ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM0ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0wLDAgKzEsNjEgQEAKK1doYXQ6CQlzZWN1cml0eS9pbWEvcG9saWN5CitEYXRlOgkJTWF5IDIwMDgKK0NvbnRhY3Q6CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkJTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJCXZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcworCQlsb2FkZWQgaW50byB0aGUgcnVuLXRpbWUgb2YgdGhpcyBzeXN0ZW0uICBBdCBydW50aW1lLAorCQl0aGUgcG9saWN5IGNhbiBiZSBjb25zdHJhaW5lZCBiYXNlZCBvbiBMU00gc3BlY2lmaWMgZGF0YS4KKwkJUG9saWNpZXMgYXJlIGxvYWRlZCBpbnRvIHRoZSBzZWN1cml0eWZzIGZpbGUgaW1hL3BvbGljeQorCQlieSBvcGVuaW5nIHRoZSBmaWxlLCB3cml0aW5nIHRoZSBydWxlcyBvbmUgYXQgYSB0aW1lIGFuZAorCQl0aGVuIGNsb3NpbmcgdGhlIGZpbGUuICBUaGUgbmV3IHBvbGljeSB0YWtlcyBlZmZlY3QgYWZ0ZXIKKwkJdGhlIGZpbGUgaW1hL3BvbGljeSBpcyBjbG9zZWQuCisKKwkJcnVsZSBmb3JtYXQ6IGFjdGlvbiBbY29uZGl0aW9uIC4uLl0KKworCQlhY3Rpb246IG1lYXN1cmUgfCBkb250X21lYXN1cmUKKwkJY29uZGl0aW9uOj0gYmFzZSB8IGxzbQorCQkJYmFzZToJW1tmdW5jPV0gW21hc2s9XSBbZnNtYWdpYz1dIFt1aWQ9XV0KKwkJCWxzbToJW1tzdWJqX3VzZXI9XSBbc3Vial9yb2xlPV0gW3N1YmpfdHlwZT1dCisJCQkJIFtvYmpfdXNlcj1dIFtvYmpfcm9sZT1dIFtvYmpfdHlwZT1dXQorCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bSU5PREVfUEVSTUlTU0lPTl0KKwkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCisJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCisJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCisJCWxzbTogIAlhcmUgTFNNIHNwZWNpZmljCisKKwkJZGVmYXVsdCBwb2xpY3k6CisJCQkjIFBST0NfU1VQRVJfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4OWZhMAorCQkJIyBTWVNGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHg2MjY1NjU3MgorCQkJIyBERUJVR0ZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDY0NjI2NzIwCisJCQkjIFRNUEZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDAxMDIxOTk0CisJCQkjIFNFQ1VSSVRZRlNfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4NzM2MzY2NzMKKworCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKKwkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQworCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCisJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKKwkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKKwkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisKKwkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgorCisJCVNFTGludXg6CisJCQkjIFNFTElOVVhfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4Rjk3Q0ZGOEMKKworCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPXZhcl9sb2dfdAorCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPWF1ZGl0ZF9sb2dfdAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1JTk9ERV9QRVJNIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisKKwkJU21hY2s6CisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMTQ2MmVkOC4uYTNhODNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKIAkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbCByYXBpZGlvLnhtbCBcCiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCi0JICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sCisJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKKwkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzMGE5NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApAQCAtMCwwICsxLDEwOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIZWFkZXIgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8Ym9vayBpZD0iQUxTQS1Ecml2ZXItQVBJIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5UaGUgQUxTQSBEcml2ZXIgQVBJPC90aXRsZT4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IGlzIGZyZWU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCA8ZW1waGFzaXM+V0lUSE9VVCBBTlkgV0FSUkFOVFk8L2VtcGhhc2lzPjsgd2l0aG91dCBldmVuIHRoZQorICAgIGltcGxpZWQgd2FycmFudHkgb2YgPGVtcGhhc2lzPk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgICAgUEFSVElDVUxBUiBQVVJQT1NFPC9lbXBoYXNpcz4uIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBmb3IgbW9yZSBkZXRhaWxzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICAgPC9wYXJhPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlcj48dGl0bGU+TWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgRGV2aWNlczwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+Q2FyZCBNYW5hZ2VtZW50PC90aXRsZT4KKyFFc291bmQvY29yZS9pbml0LmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgQ29tcG9uZW50czwvdGl0bGU+CishRXNvdW5kL2NvcmUvZGV2aWNlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Nb2R1bGUgcmVxdWVzdHMgYW5kIERldmljZSBGaWxlIEVudHJpZXM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3NvdW5kLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5NZW1vcnkgTWFuYWdlbWVudCBIZWxwZXJzPC90aXRsZT4KKyFFc291bmQvY29yZS9tZW1vcnkuYworIUVzb3VuZC9jb3JlL21lbWFsbG9jLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+UENNIEFQSTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+UENNIENvcmU8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3BjbS5jCishRXNvdW5kL2NvcmUvcGNtX2xpYi5jCishRXNvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UENNIEZvcm1hdCBIZWxwZXJzPC90aXRsZT4KKyFFc291bmQvY29yZS9wY21fbWlzYy5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UENNIE1lbW9yeSBNYW5hZ2VtZW50PC90aXRsZT4KKyFFc291bmQvY29yZS9wY21fbWVtb3J5LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+Q29udHJvbC9NaXhlciBBUEk8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkdlbmVyYWwgQ29udHJvbCBJbnRlcmZhY2U8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2NvbnRyb2wuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkFDOTcgQ29kZWMgQVBJPC90aXRsZT4KKyFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCishRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5WaXJ0dWFsIE1hc3RlciBDb250cm9sIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvdm1hc3Rlci5jCishSWluY2x1ZGUvc291bmQvY29udHJvbC5oCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1QVTQwMS1VQVJUIEFQSTwvdGl0bGU+CishRXNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+UHJvYyBJbmZvIEFQSTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+UHJvYyBJbmZvIEludGVyZmFjZTwvdGl0bGU+CishRXNvdW5kL2NvcmUvaW5mby5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlcyBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2h3ZGVwLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5KYWNrIEFic3RyYWN0aW9uIExheWVyIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvamFjay5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+SVNBIERNQSBIZWxwZXJzPC90aXRsZT4KKyFFc291bmQvY29yZS9pc2FkbWEuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk90aGVyIEhlbHBlciBNYWNyb3M8L3RpdGxlPgorIUlpbmNsdWRlL3NvdW5kL2NvcmUuaAorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCmluZGV4IDNhODgyZDkuLmM2NzFhMDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbApAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgIHVzZWQgaW4gdGhlIGdlbmVyaWMgSVJRIGxheWVyLgogICAgICA8L3BhcmE+CiAhSWluY2x1ZGUvbGludXgvaXJxLmgKKyFJaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCmluZGV4IDc3YzNjMjAuLmZiZWFmZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCkBAIC0xNyw4ICsxNyw3IEBACiAgICAgPC9hdXRob3Jncm91cD4KIAogICAgIDxjb3B5cmlnaHQ+Ci0gICAgICA8eWVhcj4yMDA3PC95ZWFyPgotICAgICAgPHllYXI+MjAwODwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDctMjAwOTwveWVhcj4KICAgICAgIDxob2xkZXI+Sm9oYW5uZXMgQmVyZzwvaG9sZGVyPgogICAgIDwvY29weXJpZ2h0PgogCkBAIC0xNjUsOCArMTY0LDggQEAKICFQaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBGcmFtZSBmb3JtYXQKICAgICAgIDwvc2VjdDE+CiAgICAgICA8c2VjdDE+Ci0gICAgICAgIDx0aXRsZT5BbGlnbm1lbnQgaXNzdWVzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+VEJEPC9wYXJhPgorICAgICAgICA8dGl0bGU+UGFja2V0IGFsaWdubWVudDwvdGl0bGU+CishUG5ldC9tYWM4MDIxMS9yeC5jIFBhY2tldCBhbGlnbm1lbnQKICAgICAgIDwvc2VjdDE+CiAgICAgICA8c2VjdDE+CiAgICAgICAgIDx0aXRsZT5DYWxsaW5nIGludG8gbWFjODAyMTEgZnJvbSBpbnRlcnJ1cHRzPC90aXRsZT4KQEAgLTIyMyw2ICsyMjIsMTcgQEAKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfa2V5X2ZsYWdzCiAgICAgPC9jaGFwdGVyPgogCisgICAgPGNoYXB0ZXIgaWQ9InBvd2Vyc2F2ZSI+CisgICAgICA8dGl0bGU+UG93ZXJzYXZlIHN1cHBvcnQ8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIFBvd2Vyc2F2ZSBzdXBwb3J0CisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9ImJlYWNvbi1maWx0ZXIiPgorICAgICAgPHRpdGxlPkJlYWNvbiBmaWx0ZXIgc3VwcG9ydDwvdGl0bGU+CishUGluY2x1ZGUvbmV0L21hYzgwMjExLmggQmVhY29uIGZpbHRlciBzdXBwb3J0CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2JlYWNvbl9sb3NzCisgICAgPC9jaGFwdGVyPgorCiAgICAgPGNoYXB0ZXIgaWQ9InFvcyI+CiAgICAgICA8dGl0bGU+TXVsdGlwbGUgcXVldWVzIGFuZCBRb1Mgc3VwcG9ydDwvdGl0bGU+CiAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKaW5kZXggNTJlMWI3OS4uOGY2ZTNiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbApAQCAtNDIsNiArNDIsMTMgQEAKIAogPHJldmhpc3Rvcnk+CiAJPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC44PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwOC0xMi0yNDwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIG5hbWUgYXR0cmlidXRlcyBpbiBtZW0gYW5kIHBvcnRpbyBzeXNmcyBkaXJlY3Rvcmllcy4KKwkJPC9yZXZyZW1hcms+CisJPC9yZXZpc2lvbj4KKwk8cmV2aXNpb24+CiAJPHJldm51bWJlcj4wLjc8L3Jldm51bWJlcj4KIAk8ZGF0ZT4yMDA4LTEyLTIzPC9kYXRlPgogCTxhdXRob3Jpbml0aWFscz5oams8L2F1dGhvcmluaXRpYWxzPgpAQCAtMzAzLDEyICszMTAsMTkgQEAKIAlhcHBlYXIgaWYgdGhlIHNpemUgb2YgdGhlIG1hcHBpbmcgaXMgbm90IDAuCiA8L3BhcmE+CiA8cGFyYT4KLQlFYWNoIDxmaWxlbmFtZT5tYXBYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0d28gcmVhZC1vbmx5IGZpbGVzCi0JdGhhdCBzaG93IHN0YXJ0IGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIG1lbW9yeToKKwlFYWNoIDxmaWxlbmFtZT5tYXBYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyBmb3VyIHJlYWQtb25seSBmaWxlcworCXRoYXQgc2hvdyBhdHRyaWJ1dGVzIG9mIHRoZSBtZW1vcnk6CiA8L3BhcmE+CiA8aXRlbWl6ZWRsaXN0PgogPGxpc3RpdGVtPgogCTxwYXJhPgorCTxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT46IEEgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoaXMgbWFwcGluZy4gVGhpcworCWlzIG9wdGlvbmFsLCB0aGUgc3RyaW5nIGNhbiBiZSBlbXB0eS4gRHJpdmVycyBjYW4gc2V0IHRoaXMgdG8gbWFrZSBpdAorCWVhc2llciBmb3IgdXNlcnNwYWNlIHRvIGZpbmQgdGhlIGNvcnJlY3QgbWFwcGluZy4KKwk8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCTxwYXJhPgogCTxmaWxlbmFtZT5hZGRyPC9maWxlbmFtZT46IFRoZSBhZGRyZXNzIG9mIG1lbW9yeSB0aGF0IGNhbiBiZSBtYXBwZWQuCiAJPC9wYXJhPgogPC9saXN0aXRlbT4KQEAgLTM2NiwxMiArMzgwLDE5IEBACiAJPGZpbGVuYW1lPi9zeXMvY2xhc3MvdWlvL3Vpb1gvcG9ydGlvLzwvZmlsZW5hbWU+LgogPC9wYXJhPgogPHBhcmE+Ci0JRWFjaCA8ZmlsZW5hbWU+cG9ydFgvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNvbnRhaW5zIHRocmVlIHJlYWQtb25seQotCWZpbGVzIHRoYXQgc2hvdyBzdGFydCwgc2l6ZSwgYW5kIHR5cGUgb2YgdGhlIHBvcnQgcmVnaW9uOgorCUVhY2ggPGZpbGVuYW1lPnBvcnRYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyBmb3VyIHJlYWQtb25seQorCWZpbGVzIHRoYXQgc2hvdyBuYW1lLCBzdGFydCwgc2l6ZSwgYW5kIHR5cGUgb2YgdGhlIHBvcnQgcmVnaW9uOgogPC9wYXJhPgogPGl0ZW1pemVkbGlzdD4KIDxsaXN0aXRlbT4KIAk8cGFyYT4KKwk8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+OiBBIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIHBvcnQgcmVnaW9uLgorCVRoZSBzdHJpbmcgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBlbXB0eS4gRHJpdmVycyBjYW4gc2V0IGl0IHRvIG1ha2UgaXQKKwllYXNpZXIgZm9yIHVzZXJzcGFjZSB0byBmaW5kIGEgY2VydGFpbiBwb3J0IHJlZ2lvbi4KKwk8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCTxwYXJhPgogCTxmaWxlbmFtZT5zdGFydDwvZmlsZW5hbWU+OiBUaGUgZmlyc3QgcG9ydCBvZiB0aGlzIHJlZ2lvbi4KIAk8L3BhcmE+CiA8L2xpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiMDhmZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTAsMCArMSw2MjE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEhlYWRlciAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzxib29rIGlkPSJXcml0aW5nLWFuLUFMU0EtRHJpdmVyIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5Xcml0aW5nIGFuIEFMU0EgRHJpdmVyPC90aXRsZT4KKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5UYWthc2hpPC9maXJzdG5hbWU+CisgICAgICA8c3VybmFtZT5Jd2FpPC9zdXJuYW1lPgorICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICA8YWRkcmVzcz4KKyAgICAgICAgICA8ZW1haWw+dGl3YWlAc3VzZS5kZTwvZW1haWw+CisgICAgICAgIDwvYWRkcmVzcz4KKyAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgIDwvYXV0aG9yPgorCisgICAgIDxkYXRlPk9jdCAxNSwgMjAwNzwvZGF0ZT4KKyAgICAgPGVkaXRpb24+MC4zLjc8L2VkaXRpb24+CisKKyAgICA8YWJzdHJhY3Q+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuIEFMU0EgKEFkdmFuY2VkIExpbnV4CisgICAgICAgIFNvdW5kIEFyY2hpdGVjdHVyZSkgZHJpdmVyLgorICAgICAgPC9wYXJhPgorICAgIDwvYWJzdHJhY3Q+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+CisgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgIFRha2FzaGkgSXdhaSA8ZW1haWw+dGl3YWlAc3VzZS5kZTwvZW1haWw+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBmcmVlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgPGVtcGhhc2lzPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9lbXBoYXNpcz47IHdpdGhvdXQgZXZlbiB0aGUKKyAgICBpbXBsaWVkIHdhcnJhbnR5IG9mIDxlbXBoYXNpcz5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICAgIFBBUlRJQ1VMQVIgUFVSUE9TRTwvZW1waGFzaXM+LiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgZm9yIG1vcmUgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgIDwvYm9va2luZm8+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQcmVmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8cHJlZmFjZSBpZD0icHJlZmFjZSI+CisgICAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuCisgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvIj48Y2l0ZXRpdGxlPgorICAgICAgQUxTQSAoQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlKTwvY2l0ZXRpdGxlPjwvdWxpbms+CisgICAgICBkcml2ZXIuIFRoZSBkb2N1bWVudCBmb2N1c2VzIG1haW5seSBvbiBQQ0kgc291bmRjYXJkcy4KKyAgICAgIEluIHRoZSBjYXNlIG9mIG90aGVyIGRldmljZSB0eXBlcywgdGhlIEFQSSBtaWdodAorICAgICAgYmUgZGlmZmVyZW50LCB0b28uIEhvd2V2ZXIsIGF0IGxlYXN0IHRoZSBBTFNBIGtlcm5lbCBBUEkgaXMKKyAgICAgIGNvbnNpc3RlbnQsIGFuZCB0aGVyZWZvcmUgaXQgd291bGQgYmUgc3RpbGwgYSBiaXQgaGVscCBmb3IKKyAgICAgIHdyaXRpbmcgdGhlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IHRhcmdldHMgcGVvcGxlIHdobyBhbHJlYWR5IGhhdmUgZW5vdWdoCisgICAgQyBsYW5ndWFnZSBza2lsbHMgYW5kIGhhdmUgYmFzaWMgbGludXgga2VybmVsIHByb2dyYW1taW5nCisgICAga25vd2xlZGdlLiAgVGhpcyBkb2N1bWVudCBkb2Vzbid0IGV4cGxhaW4gdGhlIGdlbmVyYWwKKyAgICB0b3BpYyBvZiBsaW51eCBrZXJuZWwgY29kaW5nIGFuZCBkb2Vzbid0IGNvdmVyIGxvdy1sZXZlbAorICAgIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJdCBvbmx5IGRlc2NyaWJlcworICAgIHRoZSBzdGFuZGFyZCB3YXkgdG8gd3JpdGUgYSBQQ0kgc291bmQgZHJpdmVyIG9uIEFMU0EuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3UgYXJlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgb2xkZXIgQUxTQSB2ZXIuMC41LnggQVBJLCB5b3UKKyAgICBjYW4gY2hlY2sgdGhlIGRyaXZlcnMgc3VjaCBhcyA8ZmlsZW5hbWU+c291bmQvcGNpL2VzMTkzOC5jPC9maWxlbmFtZT4gb3IKKyAgICA8ZmlsZW5hbWU+c291bmQvcGNpL21hZXN0cm8zLmM8L2ZpbGVuYW1lPiB3aGljaCBoYXZlIGFsc28gYWxtb3N0IHRoZSBzYW1lCisgICAgY29kZS1iYXNlIGluIHRoZSBBTFNBIDAuNS54IHRyZWUsIHNvIHlvdSBjYW4gY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGRvY3VtZW50IGlzIHN0aWxsIGEgZHJhZnQgdmVyc2lvbi4gQW55IGZlZWRiYWNrIGFuZAorICAgIGNvcnJlY3Rpb25zLCBwbGVhc2UhIQorICAgIDwvcGFyYT4KKyAgPC9wcmVmYWNlPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBGaWxlIFRyZWUgU3RydWN0dXJlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iZmlsZS10cmVlIj4KKyAgICA8dGl0bGU+RmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIGRyaXZlcnMgYXJlIHByb3ZpZGVkIGluIHR3byB3YXlzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgT25lIGlzIHRoZSB0cmVlcyBwcm92aWRlZCBhcyBhIHRhcmJhbGwgb3IgdmlhIGN2cyBmcm9tIHRoZQorICAgICAgQUxTQSdzIGZ0cCBzaXRlLCBhbmQgYW5vdGhlciBpcyB0aGUgMi42IChvciBsYXRlcikgTGludXgga2VybmVsCisgICAgICB0cmVlLiBUbyBzeW5jaHJvbml6ZSBib3RoLCB0aGUgQUxTQSBkcml2ZXIgdHJlZSBpcyBzcGxpdCBpbnRvCisgICAgICB0d28gZGlmZmVyZW50IHRyZWVzOiBhbHNhLWtlcm5lbCBhbmQgYWxzYS1kcml2ZXIuIFRoZSBmb3JtZXIKKyAgICAgIGNvbnRhaW5zIHB1cmVseSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaW51eCAyLjYgKG9yIGxhdGVyKQorICAgICAgdHJlZS4gVGhpcyB0cmVlIGlzIGRlc2lnbmVkIG9ubHkgZm9yIGNvbXBpbGF0aW9uIG9uIDIuNiBvcgorICAgICAgbGF0ZXIgZW52aXJvbm1lbnQuIFRoZSBsYXR0ZXIsIGFsc2EtZHJpdmVyLCBjb250YWlucyBtYW55IHN1YnRsZQorICAgICAgZmlsZXMgZm9yIGNvbXBpbGluZyBBTFNBIGRyaXZlcnMgb3V0c2lkZSBvZiB0aGUgTGludXgga2VybmVsIHRyZWUsCisgICAgICB3cmFwcGVyIGZ1bmN0aW9ucyBmb3Igb2xkZXIgMi4yIGFuZCAyLjQga2VybmVscywgdG8gYWRhcHQgdGhlIGxhdGVzdCBrZXJuZWwgQVBJLAorICAgICAgYW5kIGFkZGl0aW9uYWwgZHJpdmVycyB3aGljaCBhcmUgc3RpbGwgaW4gZGV2ZWxvcG1lbnQgb3IgaW4KKyAgICAgIHRlc3RzLiAgVGhlIGRyaXZlcnMgaW4gYWxzYS1kcml2ZXIgdHJlZSB3aWxsIGJlIG1vdmVkIHRvCisgICAgICBhbHNhLWtlcm5lbCAoYW5kIGV2ZW50dWFsbHkgdG8gdGhlIDIuNiBrZXJuZWwgdHJlZSkgd2hlbiB0aGV5IGFyZQorICAgICAgZmluaXNoZWQgYW5kIGNvbmZpcm1lZCB0byB3b3JrIGZpbmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlsZSB0cmVlIHN0cnVjdHVyZSBvZiBBTFNBIGRyaXZlciBpcyBkZXBpY3RlZCBiZWxvdy4gQm90aAorICAgICAgICBhbHNhLWtlcm5lbCBhbmQgYWxzYS1kcml2ZXIgaGF2ZSBhbG1vc3QgdGhlIHNhbWUgZmlsZQorICAgICAgICBzdHJ1Y3R1cmUsIGV4Y2VwdCBmb3IgPHF1b3RlPmNvcmU8L3F1b3RlPiBkaXJlY3RvcnkuIEl0J3MKKyAgICAgICAgbmFtZWQgYXMgPHF1b3RlPmFjb3JlPC9xdW90ZT4gaW4gYWxzYS1kcml2ZXIgdHJlZS4gCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPkFMU0EgRmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisgICAgICAgICAgPGxpdGVyYWxsYXlvdXQ+CisgICAgICAgIHNvdW5kCisgICAgICAgICAgICAgICAgL2NvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC9zZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL29zcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvaW5zdHIKKyAgICAgICAgICAgICAgICAvaW9jdGwzMgorICAgICAgICAgICAgICAgIC9pbmNsdWRlCisgICAgICAgICAgICAgICAgL2RyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC9tcHU0MDEKKyAgICAgICAgICAgICAgICAgICAgICAgIC9vcGwzCisgICAgICAgICAgICAgICAgL2kyYworICAgICAgICAgICAgICAgICAgICAgICAgL2wzCisgICAgICAgICAgICAgICAgL3N5bnRoCisgICAgICAgICAgICAgICAgICAgICAgICAvZW11eAorICAgICAgICAgICAgICAgIC9wY2kKKyAgICAgICAgICAgICAgICAgICAgICAgIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL2lzYQorICAgICAgICAgICAgICAgICAgICAgICAgLyhjYXJkcykKKyAgICAgICAgICAgICAgICAvYXJtCisgICAgICAgICAgICAgICAgL3BwYworICAgICAgICAgICAgICAgIC9zcGFyYworICAgICAgICAgICAgICAgIC91c2IKKyAgICAgICAgICAgICAgICAvcGNtY2lhIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL29zcworICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmNvcmUgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbWlkZGxlIGxheWVyIHdoaWNoIGlzIHRoZSBoZWFydAorICAgICAgb2YgQUxTQSBkcml2ZXJzLiBJbiB0aGlzIGRpcmVjdG9yeSwgdGhlIG5hdGl2ZSBBTFNBIG1vZHVsZXMgYXJlCisgICAgICBzdG9yZWQuIFRoZSBzdWItZGlyZWN0b3JpZXMgY29udGFpbiBkaWZmZXJlbnQgbW9kdWxlcyBhbmQgYXJlCisgICAgICBkZXBlbmRlbnQgdXBvbiB0aGUga2VybmVsIGNvbmZpZy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktb3NzIj4KKyAgICAgICAgPHRpdGxlPmNvcmUvb3NzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgY29kZXMgZm9yIFBDTSBhbmQgbWl4ZXIgT1NTIGVtdWxhdGlvbiBtb2R1bGVzIGFyZSBzdG9yZWQKKyAgICAgICAgaW4gdGhpcyBkaXJlY3RvcnkuIFRoZSByYXdtaWRpIE9TUyBlbXVsYXRpb24gaXMgaW5jbHVkZWQgaW4KKyAgICAgICAgdGhlIEFMU0EgcmF3bWlkaSBjb2RlIHNpbmNlIGl0J3MgcXVpdGUgc21hbGwuIFRoZSBzZXF1ZW5jZXIKKyAgICAgICAgY29kZSBpcyBzdG9yZWQgaW4gPGZpbGVuYW1lPmNvcmUvc2VxL29zczwvZmlsZW5hbWU+IGRpcmVjdG9yeSAoc2VlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1zZXEtb3NzIj48Y2l0ZXRpdGxlPgorICAgICAgICBiZWxvdzwvY2l0ZXRpdGxlPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnktaW9jdGwzMiI+CisgICAgICAgIDx0aXRsZT5jb3JlL2lvY3RsMzI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSAzMmJpdC1pb2N0bCB3cmFwcGVycyBmb3IgNjRiaXQKKyAgICAgICAgYXJjaGl0ZWN0dXJlcyBzdWNoIGxpa2UgeDg2LTY0LCBwcGM2NCBhbmQgc3BhcmM2NC4gRm9yIDMyYml0CisgICAgICAgIGFuZCBhbHBoYSBhcmNoaXRlY3R1cmVzLCB0aGVzZSBhcmUgbm90IGNvbXBpbGVkLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcSI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGFyZSBmb3IgdGhlIEFMU0EKKyAgICAgICAgc2VxdWVuY2VyLiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc2VxdWVuY2VyIGNvcmUgYW5kCisgICAgICAgIHByaW1hcnkgc2VxdWVuY2VyIG1vZHVsZXMgc3VjaCBsaWtlIHNuZC1zZXEtbWlkaSwKKyAgICAgICAgc25kLXNlcS12aXJtaWRpLCBldGMuIFRoZXkgYXJlIGNvbXBpbGVkIG9ubHkgd2hlbgorICAgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9TRVFVRU5DRVI8L2NvbnN0YW50PiBpcyBzZXQgaW4gdGhlIGtlcm5lbAorICAgICAgICBjb25maWcuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxLW9zcyI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcS9vc3M8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBPU1Mgc2VxdWVuY2VyIGVtdWxhdGlvbiBjb2Rlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LWRlcS1pbnN0ciI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcS9pbnN0cjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBtb2R1bGVzIGZvciB0aGUgc2VxdWVuY2VyCisgICAgICAgIGluc3RydW1lbnQgbGF5ZXIuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pbmNsdWRlLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+aW5jbHVkZSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgdGhlIHBsYWNlIGZvciB0aGUgcHVibGljIGhlYWRlciBmaWxlcyBvZiBBTFNBIGRyaXZlcnMsCisgICAgICB3aGljaCBhcmUgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlci1zcGFjZSwgb3IgaW5jbHVkZWQgYnkKKyAgICAgIHNldmVyYWwgZmlsZXMgYXQgZGlmZmVyZW50IGRpcmVjdG9yaWVzLiBCYXNpY2FsbHksIHRoZSBwcml2YXRlCisgICAgICBoZWFkZXIgZmlsZXMgc2hvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhpcyBkaXJlY3RvcnksIGJ1dCB5b3UgbWF5CisgICAgICBzdGlsbCBmaW5kIGZpbGVzIHRoZXJlLCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zIDopIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmRyaXZlcnMgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb2RlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgZHJpdmVycworICAgICAgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuICBUaGV5IGFyZSBoZW5jZSBzdXBwb3NlZCBub3QgdG8gYmUKKyAgICAgIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4KKyAgICAgIEZvciBleGFtcGxlLCB0aGUgZHVtbXkgcGNtIGRyaXZlciBhbmQgdGhlIHNlcmlhbCBNSURJCisgICAgICBkcml2ZXIgYXJlIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LiBJbiB0aGUgc3ViLWRpcmVjdG9yaWVzLAorICAgICAgdGhlcmUgaXMgY29kZSBmb3IgY29tcG9uZW50cyB3aGljaCBhcmUgaW5kZXBlbmRlbnQgZnJvbQorICAgICAgYnVzIGFuZCBjcHUgYXJjaGl0ZWN0dXJlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3RvcnktbXB1NDAxIj4KKyAgICAgICAgPHRpdGxlPmRyaXZlcnMvbXB1NDAxPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIE1QVTQwMSBhbmQgTVBVNDAxLVVBUlQgbW9kdWxlcyBhcmUgc3RvcmVkIGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeS1vcGwzIj4KKyAgICAgICAgPHRpdGxlPmRyaXZlcnMvb3BsMyBhbmQgb3BsNDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBPUEwzIGFuZCBPUEw0IEZNLXN5bnRoIHN0dWZmIGlzIGZvdW5kIGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmkyYyBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIEFMU0EgaTJjIGNvbXBvbmVudHMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBhIHN0YW5kYXJkIGkyYyBsYXllciBvbiBMaW51eCwgQUxTQSBoYXMgaXRzCisgICAgICBvd24gaTJjIGNvZGUgZm9yIHNvbWUgY2FyZHMsIGJlY2F1c2UgdGhlIHNvdW5kY2FyZCBuZWVkcyBvbmx5IGEKKyAgICAgIHNpbXBsZSBvcGVyYXRpb24gYW5kIHRoZSBzdGFuZGFyZCBpMmMgQVBJIGlzIHRvbyBjb21wbGljYXRlZCBmb3IKKyAgICAgIHN1Y2ggYSBwdXJwb3NlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pMmMtZGlyZWN0b3J5LWwzIj4KKyAgICAgICAgPHRpdGxlPmkyYy9sMzwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgYSBzdWItZGlyZWN0b3J5IGZvciBBUk0gTDMgaTJjLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1zeW50aC1kaXJlY3RvcnkiPgorICAgICAgICA8dGl0bGU+c3ludGggZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjb250YWlucyB0aGUgc3ludGggbWlkZGxlLWxldmVsIG1vZHVsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTbyBmYXIsIHRoZXJlIGlzIG9ubHkgRW11ODAwMC9FbXUxMGsxIHN5bnRoIGRyaXZlciB1bmRlcgorICAgICAgICB0aGUgPGZpbGVuYW1lPnN5bnRoL2VtdXg8L2ZpbGVuYW1lPiBzdWItZGlyZWN0b3J5LiAKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtcGNpLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+cGNpIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkaXJlY3RvcnkgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgaG9sZCB0aGUgdG9wLWxldmVsIGNhcmQgbW9kdWxlcworICAgICAgZm9yIFBDSSBzb3VuZGNhcmRzIGFuZCB0aGUgY29kZSBzcGVjaWZpYyB0byB0aGUgUENJIEJVUy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkcml2ZXJzIGNvbXBpbGVkIGZyb20gYSBzaW5nbGUgZmlsZSBhcmUgc3RvcmVkIGRpcmVjdGx5CisgICAgICBpbiB0aGUgcGNpIGRpcmVjdG9yeSwgd2hpbGUgdGhlIGRyaXZlcnMgd2l0aCBzZXZlcmFsIHNvdXJjZSBmaWxlcyBhcmUKKyAgICAgIHN0b3JlZCBvbiB0aGVpciBvd24gc3ViLWRpcmVjdG9yeSAoZS5nLiBlbXUxMGsxLCBpY2UxNzEyKS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pc2EtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5pc2EgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBob2xkIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzCisgICAgICBmb3IgSVNBIHNvdW5kY2FyZHMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtYXJtLXBwYy1zcGFyYy1kaXJlY3RvcmllcyI+CisgICAgICA8dGl0bGU+YXJtLCBwcGMsIGFuZCBzcGFyYyBkaXJlY3RvcmllczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhleSBhcmUgdXNlZCBmb3IgdG9wLWxldmVsIGNhcmQgbW9kdWxlcyB3aGljaCBhcmUKKyAgICAgIHNwZWNpZmljIHRvIG9uZSBvZiB0aGVzZSBhcmNoaXRlY3R1cmVzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXVzYi1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPnVzYiBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBVU0ItYXVkaW8gZHJpdmVyLiBJbiB0aGUgbGF0ZXN0IHZlcnNpb24sIHRoZQorICAgICAgVVNCIE1JREkgZHJpdmVyIGlzIGludGVncmF0ZWQgaW4gdGhlIHVzYi1hdWRpbyBkcml2ZXIuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtcGNtY2lhLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+cGNtY2lhIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIFBDTUNJQSwgZXNwZWNpYWxseSBQQ0NhcmQgZHJpdmVycyB3aWxsIGdvIGhlcmUuIENhcmRCdXMKKyAgICAgIGRyaXZlcnMgd2lsbCBiZSBpbiB0aGUgcGNpIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGVpciBBUEkgaXMgaWRlbnRpY2FsCisgICAgICB0byB0aGF0IG9mIHN0YW5kYXJkIFBDSSBjYXJkcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1vc3MtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5vc3MgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgT1NTL0xpdGUgc291cmNlIGZpbGVzIGFyZSBzdG9yZWQgaGVyZSBpbiBMaW51eCAyLjYgKG9yCisgICAgICBsYXRlcikgdHJlZS4gSW4gdGhlIEFMU0EgZHJpdmVyIHRhcmJhbGwsIHRoaXMgZGlyZWN0b3J5IGlzIGVtcHR5LAorICAgICAgb2YgY291cnNlIDopIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBCYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVycyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImJhc2ljLWZsb3ciPgorICAgIDx0aXRsZT5CYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVyczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1vdXRsaW5lIj4KKyAgICAgIDx0aXRsZT5PdXRsaW5lPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbWluaW11bSBmbG93IGZvciBQQ0kgc291bmRjYXJkcyBpcyBhcyBmb2xsb3dzOgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmRlZmluZSB0aGUgUENJIElEIHRhYmxlIChzZWUgdGhlIHNlY3Rpb24KKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJwY2ktcmVzb3VyY2UtZW50cmllcyI+PGNpdGV0aXRsZT5QQ0kgRW50cmllcworICAgICAgICAgIDwvY2l0ZXRpdGxlPjwvbGluaz4pLjwvcGFyYT48L2xpc3RpdGVtPiAKKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5wcm9iZSgpPC9mdW5jdGlvbj4gY2FsbGJhY2suPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+cmVtb3ZlKCk8L2Z1bmN0aW9uPiBjYWxsYmFjay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIGEgPHN0cnVjdG5hbWU+cGNpX2RyaXZlcjwvc3RydWN0bmFtZT4gc3RydWN0dXJlCisJICBjb250YWluaW5nIHRoZSB0aHJlZSBwb2ludGVycyBhYm92ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIGFuIDxmdW5jdGlvbj5pbml0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBqdXN0IGNhbGxpbmcKKwkgIHRoZSA8ZnVuY3Rpb24+cGNpX3JlZ2lzdGVyX2RyaXZlcigpPC9mdW5jdGlvbj4gdG8gcmVnaXN0ZXIgdGhlIHBjaV9kcml2ZXIgdGFibGUKKwkgIGRlZmluZWQgYWJvdmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSBhbiA8ZnVuY3Rpb24+ZXhpdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8gY2FsbAorCSAgdGhlIDxmdW5jdGlvbj5wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1leGFtcGxlIj4KKyAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvZGUgZXhhbXBsZSBpcyBzaG93biBiZWxvdy4gU29tZSBwYXJ0cyBhcmUga2VwdAorICAgICAgdW5pbXBsZW1lbnRlZCBhdCB0aGlzIG1vbWVudCBidXQgd2lsbCBiZSBmaWxsZWQgaW4gdGhlCisgICAgICBuZXh0IHNlY3Rpb25zLiBUaGUgbnVtYmVycyBpbiB0aGUgY29tbWVudCBsaW5lcyBvZiB0aGUKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX3Byb2JlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgcmVmZXIgdG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLiAKKworICAgICAgICA8ZXhhbXBsZT4KKyAgICAgICAgICA8dGl0bGU+QmFzaWMgRmxvdyBmb3IgUENJIERyaXZlcnMgLSBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorICAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisgIC8qIG1vZHVsZSBwYXJhbWV0ZXJzIChzZWUgIk1vZHVsZSBQYXJhbWV0ZXJzIikgKi8KKyAgLyogU05EUlZfQ0FSRFM6IG1heGltdW0gbnVtYmVyIG9mIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLworICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CisgIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworICAvKiBkZWZpbml0aW9uIG9mIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZCAqLworICBzdHJ1Y3QgbXljaGlwIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgLyogdGhlIHJlc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgaW4gc2VjdGlvbgorICAgICAgICAgICAqICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIKKyAgICAgICAgICAgKi8KKyAgfTsKKworICAvKiBjaGlwLXNwZWNpZmljIGRlc3RydWN0b3IKKyAgICogKHNlZSAiUENJIFJlc291cmNlIE1hbmFnZW1lbnQiKQorICAgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2ZyZWUoc3RydWN0IG15Y2hpcCAqY2hpcCkKKyAgeworICAgICAgICAgIC4uLi4gLyogd2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlci4uLiAqLworICB9CisKKyAgLyogY29tcG9uZW50LWRlc3RydWN0b3IKKyAgICogKHNlZSAiTWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50cyIpCisgICAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKKyAgeworICAgICAgICAgIHJldHVybiBzbmRfbXljaGlwX2ZyZWUoZGV2aWNlLT5kZXZpY2VfZGF0YSk7CisgIH0KKworICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yCisgICAqIChzZWUgIk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXljaGlwICoqcmNoaXApCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisgICAgICAgICAgICAgICAgIC5kZXZfZnJlZSA9IHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgICAgICAgICAgfTsKKworICAgICAgICAgICpyY2hpcCA9IE5VTEw7CisKKyAgICAgICAgICAvKiBjaGVjayBQQ0kgYXZhaWxhYmlsaXR5IGhlcmUKKyAgICAgICAgICAgKiAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIpCisgICAgICAgICAgICovCisgICAgICAgICAgLi4uLgorCisgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqLworICAgICAgICAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICAgIGNoaXAtPmNhcmQgPSBjYXJkOworCisgICAgICAgICAgLyogcmVzdCBvZiBpbml0aWFsaXphdGlvbiBoZXJlOyB3aWxsIGJlIGltcGxlbWVudGVkCisgICAgICAgICAgICogbGF0ZXIsIHNlZSAiUENJIFJlc291cmNlIE1hbmFnZW1lbnQiCisgICAgICAgICAgICovCisgICAgICAgICAgLi4uLgorCisgICAgICAgICAgZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKKyAgICAgICAgICAqcmNoaXAgPSBjaGlwOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY29uc3RydWN0b3IgLS0gc2VlICJDb25zdHJ1Y3RvciIgc3ViLXNlY3Rpb24gKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCisgIHsKKyAgICAgICAgICBzdGF0aWMgaW50IGRldjsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworCisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgIGlmICghZW5hYmxlW2Rldl0pIHsKKyAgICAgICAgICAgICAgICAgIGRldisrOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDIpICovCisgICAgICAgICAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgICAgLyogKDMpICovCisgICAgICAgICAgZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CisgICAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9jYXJkX2ZyZWUoY2FyZCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHN0cmNweShjYXJkLT5kcml2ZXIsICJNeSBDaGlwIik7CisgICAgICAgICAgc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIk15IE93biBDaGlwIDEyMyIpOworICAgICAgICAgIHNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCBpcnEgJWkiLAorICAgICAgICAgICAgICAgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5pb3BvcnQsIGNoaXAtPmlycSk7CisKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICAuLi4uIC8qIGltcGxlbWVudGVkIGxhdGVyICovCisKKyAgICAgICAgICAvKiAoNikgKi8KKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDcpICovCisgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisgICAgICAgICAgZGV2Kys7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBkZXN0cnVjdG9yIC0tIHNlZSB0aGUgIkRlc3RydWN0b3IiIHN1Yi1zZWN0aW9uICovCisgIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXljaGlwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQorICB7CisgICAgICAgICAgc25kX2NhcmRfZnJlZShwY2lfZ2V0X2RydmRhdGEocGNpKSk7CisgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgTlVMTCk7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZWFsIGNvbnN0cnVjdG9yIG9mIFBDSSBkcml2ZXJzIGlzIHRoZSA8ZnVuY3Rpb24+cHJvYmU8L2Z1bmN0aW9uPiBjYWxsYmFjay4KKyAgICAgIFRoZSA8ZnVuY3Rpb24+cHJvYmU8L2Z1bmN0aW9uPiBjYWxsYmFjayBhbmQgb3RoZXIgY29tcG9uZW50LWNvbnN0cnVjdG9ycyB3aGljaCBhcmUgY2FsbGVkCisgICAgICBmcm9tIHRoZSA8ZnVuY3Rpb24+cHJvYmU8L2Z1bmN0aW9uPiBjYWxsYmFjayBzaG91bGQgYmUgZGVmaW5lZCB3aXRoCisgICAgICB0aGUgPHBhcmFtZXRlcj5fX2RldmluaXQ8L3BhcmFtZXRlcj4gcHJlZml4LiBZb3UgCisgICAgICBjYW5ub3QgdXNlIHRoZSA8cGFyYW1ldGVyPl9faW5pdDwvcGFyYW1ldGVyPiBwcmVmaXggZm9yIHRoZW0sCisgICAgICBiZWNhdXNlIGFueSBQQ0kgZGV2aWNlIGNvdWxkIGJlIGEgaG90cGx1ZyBkZXZpY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBpcyBvZnRlbiB1c2VkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1kZXZpY2UtaW5kZXgiPgorICAgICAgICA8dGl0bGU+MSkgQ2hlY2sgYW5kIGluY3JlbWVudCB0aGUgZGV2aWNlIGluZGV4LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBkZXY7CisgIC4uLi4KKyAgaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKyAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgaWYgKCFlbmFibGVbZGV2XSkgeworICAgICAgICAgIGRldisrOworICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgZW5hYmxlW2Rldl0gaXMgdGhlIG1vZHVsZSBvcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFYWNoIHRpbWUgdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIGNhbGxlZCwgY2hlY2sgdGhlCisgICAgICAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZGV2aWNlLiBJZiBub3QgYXZhaWxhYmxlLCBzaW1wbHkgaW5jcmVtZW50CisgICAgICAgIHRoZSBkZXZpY2UgaW5kZXggYW5kIHJldHVybnMuIGRldiB3aWxsIGJlIGluY3JlbWVudGVkIGFsc28KKyAgICAgICAgbGF0ZXIgKDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+PGNpdGV0aXRsZT5zdGVwCisgICAgICAgIDc8L2NpdGV0aXRsZT48L2xpbms+KS4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItY3JlYXRlLWNhcmQiPgorICAgICAgICA8dGl0bGU+MikgQ3JlYXRlIGEgY2FyZCBpbnN0YW5jZTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9jYXJkICpjYXJkOworICBpbnQgZXJyOworICAuLi4uCisgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGRldGFpbHMgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+PGNpdGV0aXRsZT4KKyAgICAgICAgICBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtbWFpbiI+CisgICAgICAgIDx0aXRsZT4zKSBDcmVhdGUgYSBtYWluIGNvbXBvbmVudDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoaXMgcGFydCwgdGhlIFBDSSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgLi4uLgorICBlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKKyAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgIHJldHVybiBlcnI7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoZSBkZXRhaWxzIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InBjaS1yZXNvdXJjZSI+PGNpdGV0aXRsZT5QQ0kgUmVzb3VyY2UKKyAgICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItbWFpbi1jb21wb25lbnQiPgorICAgICAgICA8dGl0bGU+NCkgU2V0IHRoZSBkcml2ZXIgSUQgYW5kIG5hbWUgc3RyaW5ncy48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cmNweShjYXJkLT5kcml2ZXIsICJNeSBDaGlwIik7CisgIHN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJNeSBPd24gQ2hpcCAxMjMiKTsKKyAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisgICAgICAgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5pb3BvcnQsIGNoaXAtPmlycSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGUgZHJpdmVyIGZpZWxkIGhvbGRzIHRoZSBtaW5pbWFsIElEIHN0cmluZyBvZiB0aGUKKyAgICAgICAgY2hpcC4gVGhpcyBpcyB1c2VkIGJ5IGFsc2EtbGliJ3MgY29uZmlndXJhdG9yLCBzbyBrZWVwIGl0CisgICAgICAgIHNpbXBsZSBidXQgdW5pcXVlLiAKKyAgICAgICAgICBFdmVuIHRoZSBzYW1lIGRyaXZlciBjYW4gaGF2ZSBkaWZmZXJlbnQgZHJpdmVyIElEcyB0bworICAgICAgICBkaXN0aW5ndWlzaCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBlYWNoIGNoaXAgdHlwZS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgc2hvcnRuYW1lIGZpZWxkIGlzIGEgc3RyaW5nIHNob3duIGFzIG1vcmUgdmVyYm9zZQorICAgICAgICBuYW1lLiBUaGUgbG9uZ25hbWUgZmllbGQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uCisgICAgICAgIHNob3duIGluIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZHM8L2ZpbGVuYW1lPi4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItY3JlYXRlLW90aGVyIj4KKyAgICAgICAgPHRpdGxlPjUpIENyZWF0ZSBvdGhlciBjb21wb25lbnRzLCBzdWNoIGFzIG1peGVyLCBNSURJLCBldGMuPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSB5b3UgZGVmaW5lIHRoZSBiYXNpYyBjb21wb25lbnRzIHN1Y2ggYXMKKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlIj48Y2l0ZXRpdGxlPlBDTTwvY2l0ZXRpdGxlPjwvbGluaz4sCisgICAgICAgICAgbWl4ZXIgKGUuZy4gPGxpbmsgbGlua2VuZD0iYXBpLWFjOTciPjxjaXRldGl0bGU+QUM5NzwvY2l0ZXRpdGxlPjwvbGluaz4pLAorICAgICAgICAgIE1JREkgKGUuZy4gPGxpbmsgbGlua2VuZD0ibWlkaS1pbnRlcmZhY2UiPjxjaXRldGl0bGU+TVBVLTQwMTwvY2l0ZXRpdGxlPjwvbGluaz4pLAorICAgICAgICAgIGFuZCBvdGhlciBpbnRlcmZhY2VzLgorICAgICAgICAgIEFsc28sIGlmIHlvdSB3YW50IGEgPGxpbmsgbGlua2VuZD0icHJvYy1pbnRlcmZhY2UiPjxjaXRldGl0bGU+cHJvYworICAgICAgICBmaWxlPC9jaXRldGl0bGU+PC9saW5rPiwgZGVmaW5lIGl0IGhlcmUsIHRvby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1yZWdpc3Rlci1jYXJkIj4KKyAgICAgICAgPHRpdGxlPjYpIFJlZ2lzdGVyIHRoZSBjYXJkIGluc3RhbmNlLjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisgIGlmIChlcnIgPCAwKSB7CisgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgc2VjdGlvbiA8bGluaworICAgICAgICBsaW5rZW5kPSJjYXJkLW1hbmFnZW1lbnQtcmVnaXN0cmF0aW9uIj48Y2l0ZXRpdGxlPk1hbmFnZW1lbnQKKyAgICAgICAgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHM8L2NpdGV0aXRsZT48L2xpbms+LCB0b28uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLXNldC1wY2kiPgorICAgICAgICA8dGl0bGU+NykgU2V0IHRoZSBQQ0kgZHJpdmVyIGRhdGEgYW5kIHJldHVybiB6ZXJvLjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisgICAgICAgIGRldisrOworICAgICAgICByZXR1cm4gMDsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIEluIHRoZSBhYm92ZSwgdGhlIGNhcmQgcmVjb3JkIGlzIHN0b3JlZC4gVGhpcyBwb2ludGVyIGlzCisgICAgICAgIHVzZWQgaW4gdGhlIHJlbW92ZSBjYWxsYmFjayBhbmQgcG93ZXItbWFuYWdlbWVudAorICAgICAgICBjYWxsYmFja3MsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5EZXN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciwgcmVtb3ZlIGNhbGxiYWNrLCBzaW1wbHkgcmVsZWFzZXMgdGhlIGNhcmQKKyAgICAgIGluc3RhbmNlLiBUaGVuIHRoZSBBTFNBIG1pZGRsZSBsYXllciB3aWxsIHJlbGVhc2UgYWxsIHRoZQorICAgICAgYXR0YWNoZWQgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEl0IHdvdWxkIGJlIHR5cGljYWxseSBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCisgIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhlIGFib3ZlIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBjYXJkIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSBQQ0kKKwlkcml2ZXIgZGF0YS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1oZWFkZXItZmlsZXMiPgorICAgICAgPHRpdGxlPkhlYWRlciBGaWxlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBhYm92ZSBleGFtcGxlLCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGluY2x1ZGUgZmlsZXMKKyAgICAgIGFyZSBuZWNlc3NhcnkuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisgICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyAgI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyAgI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJd2hlcmUgdGhlIGxhc3Qgb25lIGlzIG5lY2Vzc2FyeSBvbmx5IHdoZW4gbW9kdWxlIG9wdGlvbnMgYXJlCisgICAgICBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZS4gIElmIHRoZSBjb2RlIGlzIHNwbGl0IGludG8gc2V2ZXJhbAorICAgICAgZmlsZXMsIHRoZSBmaWxlcyB3aXRob3V0IG1vZHVsZSBvcHRpb25zIGRvbid0IG5lZWQgdGhlbS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZXNlIGhlYWRlcnMsIHlvdSdsbCBuZWVkCisgICAgICA8ZmlsZW5hbWU+Jmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OzwvZmlsZW5hbWU+IGZvciBpbnRlcnJ1cHQKKyAgICAgIGhhbmRsaW5nLCBhbmQgPGZpbGVuYW1lPiZsdDthc20vaW8uaCZndDs8L2ZpbGVuYW1lPiBmb3IgSS9PCisgICAgICBhY2Nlc3MuIElmIHlvdSB1c2UgdGhlIDxmdW5jdGlvbj5tZGVsYXkoKTwvZnVuY3Rpb24+IG9yCisgICAgICA8ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMsIHlvdSdsbCBuZWVkIHRvIGluY2x1ZGUKKyAgICAgIDxmaWxlbmFtZT4mbHQ7bGludXgvZGVsYXkuaCZndDs8L2ZpbGVuYW1lPiB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBBTFNBIGludGVyZmFjZXMgbGlrZSB0aGUgUENNIGFuZCBjb250cm9sIEFQSXMgYXJlIGRlZmluZWQgaW4gb3RoZXIKKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQveHh4LmgmZ3Q7PC9maWxlbmFtZT4gaGVhZGVyIGZpbGVzLgorICAgICAgVGhleSBoYXZlIHRvIGJlIGluY2x1ZGVkIGFmdGVyCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2NvcmUuaCZndDs8L2ZpbGVuYW1lPi4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iY2FyZC1tYW5hZ2VtZW50Ij4KKyAgICA8dGl0bGU+TWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNhcmQtaW5zdGFuY2UiPgorICAgICAgPHRpdGxlPkNhcmQgSW5zdGFuY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBGb3IgZWFjaCBzb3VuZGNhcmQsIGEgPHF1b3RlPmNhcmQ8L3F1b3RlPiByZWNvcmQgbXVzdCBiZSBhbGxvY2F0ZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQSBjYXJkIHJlY29yZCBpcyB0aGUgaGVhZHF1YXJ0ZXJzIG9mIHRoZSBzb3VuZGNhcmQuICBJdCBtYW5hZ2VzCisgICAgICB0aGUgd2hvbGUgbGlzdCBvZiBkZXZpY2VzIChjb21wb25lbnRzKSBvbiB0aGUgc291bmRjYXJkLCBzdWNoIGFzCisgICAgICBQQ00sIG1peGVycywgTUlESSwgc3ludGhlc2l6ZXIsIGFuZCBzbyBvbi4gIEFsc28sIHRoZSBjYXJkCisgICAgICByZWNvcmQgaG9sZHMgdGhlIElEIGFuZCB0aGUgbmFtZSBzdHJpbmdzIG9mIHRoZSBjYXJkLCBtYW5hZ2VzCisgICAgICB0aGUgcm9vdCBvZiBwcm9jIGZpbGVzLCBhbmQgY29udHJvbHMgdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdGVzCisgICAgICBhbmQgaG90cGx1ZyBkaXNjb25uZWN0aW9ucy4gIFRoZSBjb21wb25lbnQgbGlzdCBvbiB0aGUgY2FyZAorICAgICAgcmVjb3JkIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBjb3JyZWN0IHJlbGVhc2Ugb2YgcmVzb3VyY2VzIGF0CisgICAgICBkZXN0cnVjdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHRvIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgaW50IGVycjsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgbW9kdWxlLCBleHRyYV9zaXplLCAmY2FyZCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmdW5jdGlvbiB0YWtlcyBmaXZlIGFyZ3VtZW50cywgdGhlIGNhcmQtaW5kZXggbnVtYmVyLCB0aGUKKyAgICAgICAgaWQgc3RyaW5nLCB0aGUgbW9kdWxlIHBvaW50ZXIgKHVzdWFsbHkKKyAgICAgICAgPGNvbnN0YW50PlRISVNfTU9EVUxFPC9jb25zdGFudD4pLAorICAgICAgICB0aGUgc2l6ZSBvZiBleHRyYS1kYXRhIHNwYWNlLCBhbmQgdGhlIHBvaW50ZXIgdG8gcmV0dXJuIHRoZQorICAgICAgICBjYXJkIGluc3RhbmNlLiAgVGhlIGV4dHJhX3NpemUgYXJndW1lbnQgaXMgdXNlZCB0bworICAgICAgICBhbGxvY2F0ZSBjYXJkLSZndDtwcml2YXRlX2RhdGEgZm9yIHRoZQorICAgICAgICBjaGlwLXNwZWNpZmljIGRhdGEuICBOb3RlIHRoYXQgdGhlc2UgZGF0YQorICAgICAgICBhcmUgYWxsb2NhdGVkIGJ5IDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY29tcG9uZW50Ij4KKyAgICAgIDx0aXRsZT5Db21wb25lbnRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgY2FyZCBpcyBjcmVhdGVkLCB5b3UgY2FuIGF0dGFjaCB0aGUgY29tcG9uZW50cworICAgICAgKGRldmljZXMpIHRvIHRoZSBjYXJkIGluc3RhbmNlLiBJbiBhbiBBTFNBIGRyaXZlciwgYSBjb21wb25lbnQgaXMKKyAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9kZXZpY2U8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgIEEgY29tcG9uZW50IGNhbiBiZSBhIFBDTSBpbnN0YW5jZSwgYSBjb250cm9sIGludGVyZmFjZSwgYSByYXcKKyAgICAgIE1JREkgaW50ZXJmYWNlLCBldGMuICBFYWNoIHN1Y2ggaW5zdGFuY2UgaGFzIG9uZSBjb21wb25lbnQKKyAgICAgIGVudHJ5LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQSBjb21wb25lbnQgY2FuIGJlIGNyZWF0ZWQgdmlhCisgICAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9YWFgsIGNoaXAsICZvcHMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBkZXZpY2UtbGV2ZWwKKyAgICAgICg8Y29uc3RhbnQ+U05EUlZfREVWX1hYWDwvY29uc3RhbnQ+KSwgdGhlIGRhdGEgcG9pbnRlciwgYW5kIHRoZQorICAgICAgY2FsbGJhY2sgcG9pbnRlcnMgKDxwYXJhbWV0ZXI+JmFtcDtvcHM8L3BhcmFtZXRlcj4pLiBUaGUKKyAgICAgIGRldmljZS1sZXZlbCBkZWZpbmVzIHRoZSB0eXBlIG9mIGNvbXBvbmVudHMgYW5kIHRoZSBvcmRlciBvZgorICAgICAgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24uICBGb3IgbW9zdCBjb21wb25lbnRzLCB0aGUKKyAgICAgIGRldmljZS1sZXZlbCBpcyBhbHJlYWR5IGRlZmluZWQuICBGb3IgYSB1c2VyLWRlZmluZWQgY29tcG9uZW50LAorICAgICAgeW91IGNhbiB1c2UgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRVZFTDwvY29uc3RhbnQ+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoaXMgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJ3QgYWxsb2NhdGUgdGhlIGRhdGEgc3BhY2UuIFRoZSBkYXRhCisgICAgICBtdXN0IGJlIGFsbG9jYXRlZCBtYW51YWxseSBiZWZvcmVoYW5kLCBhbmQgaXRzIHBvaW50ZXIgaXMgcGFzc2VkCisgICAgICBhcyB0aGUgYXJndW1lbnQuIFRoaXMgcG9pbnRlciBpcyB1c2VkIGFzIHRoZQorICAgICAgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPiBpZGVudGlmaWVyIGluIHRoZSBhYm92ZSBleGFtcGxlKQorICAgICAgZm9yIHRoZSBpbnN0YW5jZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFYWNoIHByZS1kZWZpbmVkIEFMU0EgY29tcG9uZW50IHN1Y2ggYXMgYWM5NyBhbmQgcGNtIGNhbGxzCisgICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IGluc2lkZSBpdHMKKyAgICAgIGNvbnN0cnVjdG9yLiBUaGUgZGVzdHJ1Y3RvciBmb3IgZWFjaCBjb21wb25lbnQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIGNhbGxiYWNrIHBvaW50ZXJzLiAgSGVuY2UsIHlvdSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZgorICAgICAgY2FsbGluZyBhIGRlc3RydWN0b3IgZm9yIHN1Y2ggYSBjb21wb25lbnQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgeW91ciBvd24gY29tcG9uZW50LCB5b3UgbmVlZCB0bworICAgICAgc2V0IHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHRvIHRoZSBkZXZfZnJlZSBjYWxsYmFjayBpbgorICAgICAgdGhlIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+LCBzbyB0aGF0IGl0IGNhbiBiZSByZWxlYXNlZAorICAgICAgYXV0b21hdGljYWxseSB2aWEgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LgorICAgICAgVGhlIG5leHQgZXhhbXBsZSB3aWxsIHNob3cgYW4gaW1wbGVtZW50YXRpb24gb2YgY2hpcC1zcGVjaWZpYworICAgICAgZGF0YS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMiPgorICAgICAgPHRpdGxlPkNoaXAtU3BlY2lmaWMgRGF0YTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIENoaXAtc3BlY2lmaWMgaW5mb3JtYXRpb24sIGUuZy4gdGhlIEkvTyBwb3J0IGFkZHJlc3MsIGl0cworICAgICAgcmVzb3VyY2UgcG9pbnRlciwgb3IgdGhlIGlycSBudW1iZXIsIGlzIHN0b3JlZCBpbiB0aGUKKyAgICAgIGNoaXAtc3BlY2lmaWMgcmVjb3JkLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gZ2VuZXJhbCwgdGhlcmUgYXJlIHR3byB3YXlzIG9mIGFsbG9jYXRpbmcgdGhlIGNoaXAgcmVjb3JkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KKyAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aAorCSAgdG8gdGhlIDR0aCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPiwgaS5lLgorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG15Y2hpcCksICZjYXJkKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5teWNoaXA8L3N0cnVjdG5hbWU+IGlzIHRoZSB0eXBlIG9mIHRoZSBjaGlwIHJlY29yZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHJldHVybiwgdGhlIGFsbG9jYXRlZCByZWNvcmQgY2FuIGJlIGFjY2Vzc2VkIGFzCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBXaXRoIHRoaXMgbWV0aG9kLCB5b3UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSB0d2ljZS4KKyAgICAgICAgICBUaGUgcmVjb3JkIGlzIHJlbGVhc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGNhcmQgaW5zdGFuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jaGlwLXNwZWNpZmljLWFsbG9jYXRlLWV4dHJhIj4KKyAgICAgICAgPHRpdGxlPjIuIEFsbG9jYXRpbmcgYW4gZXh0cmEgZGV2aWNlLjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAorICAgICAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgIC4uLi4uCisgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNoaXAgcmVjb3JkIHNob3VsZCBoYXZlIHRoZSBmaWVsZCB0byBob2xkIHRoZSBjYXJkCisgICAgICAgICAgcG9pbnRlciBhdCBsZWFzdCwgCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgeworICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgICAgICAgICAuLi4uCisgIH07CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVuLCBzZXQgdGhlIGNhcmQgcG9pbnRlciBpbiB0aGUgcmV0dXJuZWQgY2hpcCBpbnN0YW5jZS4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgY2hpcC0+Y2FyZCA9IGNhcmQ7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOZXh0LCBpbml0aWFsaXplIHRoZSBmaWVsZHMsIGFuZCByZWdpc3RlciB0aGlzIGNoaXAKKyAgICAgICAgICByZWNvcmQgYXMgYSBsb3ctbGV2ZWwgZGV2aWNlIHdpdGggYSBzcGVjaWZpZWQKKyAgICAgICAgICA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiwgCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0geworICAgICAgICAgIC5kZXZfZnJlZSA9ICAgICAgICBzbmRfbXljaGlwX2Rldl9mcmVlLAorICB9OworICAuLi4uCisgIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9kZXZfZnJlZSgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICAgIGRldmljZS1kZXN0cnVjdG9yIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGNhbGwgdGhlIHJlYWwKKyAgICAgICAgZGVzdHJ1Y3Rvci4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQorICB7CisgICAgICAgICAgcmV0dXJuIHNuZF9teWNoaXBfZnJlZShkZXZpY2UtPmRldmljZV9kYXRhKTsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgd2hlcmUgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZSgpPC9mdW5jdGlvbj4gaXMgdGhlIHJlYWwgZGVzdHJ1Y3Rvci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtcmVnaXN0cmF0aW9uIj4KKyAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gYW5kIFJlbGVhc2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIGFsbCBjb21wb25lbnRzIGFyZSBhc3NpZ25lZCwgcmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UKKyAgICAgIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9jYXJkX3JlZ2lzdGVyKCk8L2Z1bmN0aW9uPi4gQWNjZXNzCisgICAgICB0byB0aGUgZGV2aWNlIGZpbGVzIGlzIGVuYWJsZWQgYXQgdGhpcyBwb2ludC4gVGhhdCBpcywgYmVmb3JlCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcmVnaXN0ZXIoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgdGhlCisgICAgICBjb21wb25lbnRzIGFyZSBzYWZlbHkgaW5hY2Nlc3NpYmxlIGZyb20gZXh0ZXJuYWwgc2lkZS4gSWYgdGhpcworICAgICAgY2FsbCBmYWlscywgZXhpdCB0aGUgcHJvYmUgZnVuY3Rpb24gYWZ0ZXIgcmVsZWFzaW5nIHRoZSBjYXJkIHZpYQorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciByZWxlYXNpbmcgdGhlIGNhcmQgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCBzaW1wbHkKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlKCk8L2Z1bmN0aW9uPi4gQXMgbWVudGlvbmVkIGVhcmxpZXIsIGFsbAorICAgICAgY29tcG9uZW50cyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSBieSB0aGlzIGNhbGwuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQXMgZnVydGhlciBub3RlcywgdGhlIGRlc3RydWN0b3JzIChib3RoCisgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9kZXZfZnJlZTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZTwvZnVuY3Rpb24+KSBjYW5ub3QgYmUgZGVmaW5lZCB3aXRoCisgICAgICB0aGUgPHBhcmFtZXRlcj5fX2RldmV4aXQ8L3BhcmFtZXRlcj4gcHJlZml4LCBiZWNhdXNlIHRoZXkgbWF5IGJlCisgICAgICBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IsIHRvbywgYXQgdGhlIGZhbHNlIHBhdGguIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEZvciBhIGRldmljZSB3aGljaCBhbGxvd3MgaG90cGx1Z2dpbmcsIHlvdSBjYW4gdXNlCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZDwvZnVuY3Rpb24+LiAgVGhpcyBvbmUgd2lsbAorICAgICAgcG9zdHBvbmUgdGhlIGRlc3RydWN0aW9uIHVudGlsIGFsbCBkZXZpY2VzIGFyZSBjbG9zZWQuCisgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBjaS1yZXNvdXJjZSI+CisgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgc2VjdGlvbiwgd2UnbGwgY29tcGxldGUgdGhlIGNoaXAtc3BlY2lmaWMgY29uc3RydWN0b3IsCisgICAgICBkZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LAorICAgICAgYmVsb3cuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCB7CisgICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOworICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2k7CisKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQ7CisgICAgICAgICAgaW50IGlycTsKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShzdHJ1Y3QgbXljaGlwICpjaGlwKQorICB7CisgICAgICAgICAgLyogZGlzYWJsZSBoYXJkd2FyZSBoZXJlIGlmIGFueSAqLworICAgICAgICAgIC4uLi4gLyogKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGRvY3VtZW50KSAqLworCisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgaXJxICovCisgICAgICAgICAgaWYgKGNoaXAtPmlycSA+PSAwKQorICAgICAgICAgICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKyAgICAgICAgICAvKiByZWxlYXNlIHRoZSBJL08gcG9ydHMgJiBtZW1vcnkgKi8KKyAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogZGlzYWJsZSB0aGUgUENJIGVudHJ5ICovCisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgZGF0YSAqLworICAgICAgICAgIGtmcmVlKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBteWNoaXAgKipyY2hpcCkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKKyAgICAgICAgICAgICAgICAgLmRldl9mcmVlID0gc25kX215Y2hpcF9kZXZfZnJlZSwKKyAgICAgICAgICB9OworCisgICAgICAgICAgKnJjaGlwID0gTlVMTDsKKworICAgICAgICAgIC8qIGluaXRpYWxpemUgdGhlIFBDSSBlbnRyeSAqLworICAgICAgICAgIGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIC8qIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgKDI4Yml0IERNQSkgKi8KKyAgICAgICAgICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKyAgICAgICAgICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOworICAgICAgICAgIH0KKworICAgICAgICAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgc3R1ZmYgKi8KKyAgICAgICAgICBjaGlwLT5jYXJkID0gY2FyZDsKKyAgICAgICAgICBjaGlwLT5wY2kgPSBwY2k7CisgICAgICAgICAgY2hpcC0+aXJxID0gLTE7CisKKyAgICAgICAgICAvKiAoMSkgUENJIHJlc291cmNlIGFsbG9jYXRpb24gKi8KKyAgICAgICAgICBlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIk15IENoaXAiKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKKyAgICAgICAgICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFGX1NIQVJFRCwgIk15IENoaXAiLCBjaGlwKSkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgICAgfQorICAgICAgICAgIGNoaXAtPmlycSA9IHBjaS0+aXJxOworCisgICAgICAgICAgLyogKDIpIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGlwIGhhcmR3YXJlICovCisgICAgICAgICAgLi4uLiAvKiAgIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBkb2N1bWVudCkgKi8KKworICAgICAgICAgIGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CisgICAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworCisgICAgICAgICAgKnJjaGlwID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfSAgICAgICAgCisKKyAgLyogUENJIElEcyAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKKyAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKyAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHsgMCwgfQorICB9OworICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOworCisgIC8qIHBjaV9kcml2ZXIgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IE93biBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXljaGlwX2lkcywKKyAgICAgICAgICAucHJvYmUgPSBzbmRfbXljaGlwX3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXljaGlwX3JlbW92ZSksCisgIH07CisKKyAgLyogbW9kdWxlIGluaXRpYWxpemF0aW9uICovCisgIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9teWNoaXBfaW5pdCh2b2lkKQorICB7CisgICAgICAgICAgcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICAvKiBtb2R1bGUgY2xlYW4gdXAgKi8KKyAgc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9teWNoaXBfZXhpdCh2b2lkKQorICB7CisgICAgICAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworICB9CisKKyAgbW9kdWxlX2luaXQoYWxzYV9jYXJkX215Y2hpcF9pbml0KQorICBtb2R1bGVfZXhpdChhbHNhX2NhcmRfbXljaGlwX2V4aXQpCisKKyAgRVhQT1JUX05PX1NZTUJPTFM7IC8qIGZvciBvbGQga2VybmVscyBvbmx5ICovCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1zb21lLWhhZnRhcyI+CisgICAgICA8dGl0bGU+U29tZSBIYWZ0YSdzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBQQ0kgcmVzb3VyY2VzIGlzIGRvbmUgaW4gdGhlCisgICAgICA8ZnVuY3Rpb24+cHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCBhbmQgdXN1YWxseSBhbiBleHRyYQorICAgICAgPGZ1bmN0aW9uPnh4eF9jcmVhdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHdyaXR0ZW4gZm9yIHRoaXMKKyAgICAgIHB1cnBvc2UuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBQQ0kgZGV2aWNlcywgeW91IGZpcnN0IGhhdmUgdG8gY2FsbAorICAgICAgdGhlIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYmVmb3JlCisgICAgICBhbGxvY2F0aW5nIHJlc291cmNlcy4gQWxzbywgeW91IG5lZWQgdG8gc2V0IHRoZSBwcm9wZXIgUENJIERNQQorICAgICAgbWFzayB0byBsaW1pdCB0aGUgYWNjZXNzZWQgSS9PIHJhbmdlLiBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQKKyAgICAgIG5lZWQgdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX3NldF9tYXN0ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLAorICAgICAgdG9vLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgU3VwcG9zZSB0aGUgMjhiaXQgbWFzaywgYW5kIHRoZSBjb2RlIHRvIGJlIGFkZGVkIHdvdWxkIGJlIGxpa2U6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKyAgaWYgKGVyciA8IDApCisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwIHx8CisgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgIHJldHVybiAtRU5YSU87CisgIH0KKyAgCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLXJlc291cmNlLWFsbG9jYXRpb24iPgorICAgICAgPHRpdGxlPlJlc291cmNlIEFsbG9jYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIEkvTyBwb3J0cyBhbmQgaXJxcyBpcyBkb25lIHZpYSBzdGFuZGFyZCBrZXJuZWwKKyAgICAgIGZ1bmN0aW9ucy4gVW5saWtlIEFMU0EgdmVyLjAuNS54LiwgdGhlcmUgYXJlIG5vIGhlbHBlcnMgZm9yCisgICAgICB0aGF0LiBBbmQgdGhlc2UgcmVzb3VyY2VzIG11c3QgYmUgcmVsZWFzZWQgaW4gdGhlIGRlc3RydWN0b3IKKyAgICAgIGZ1bmN0aW9uIChzZWUgYmVsb3cpLiBBbHNvLCBvbiBBTFNBIDAuOS54LCB5b3UgZG9uJ3QgbmVlZCB0bworICAgICAgYWxsb2NhdGUgKHBzZXVkby0pRE1BIGZvciBQQ0kgbGlrZSBpbiBBTFNBIDAuNS54LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm93IGFzc3VtZSB0aGF0IHRoZSBQQ0kgZGV2aWNlIGhhcyBhbiBJL08gcG9ydCB3aXRoIDggYnl0ZXMKKyAgICAgICAgYW5kIGFuIGludGVycnVwdC4gVGhlbiBzdHJ1Y3QgPHN0cnVjdG5hbWU+bXljaGlwPC9zdHJ1Y3RuYW1lPiB3aWxsIGhhdmUgdGhlCisgICAgICAgIGZvbGxvd2luZyBmaWVsZHM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCB7CisgICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOworCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3J0OworICAgICAgICAgIGludCBpcnE7CisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBhbiBJL08gcG9ydCAoYW5kIGFsc28gYSBtZW1vcnkgcmVnaW9uKSwgeW91IG5lZWQgdG8gaGF2ZQorICAgICAgdGhlIHJlc291cmNlIHBvaW50ZXIgZm9yIHRoZSBzdGFuZGFyZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBGb3IKKyAgICAgIGFuIGlycSwgeW91IGhhdmUgdG8ga2VlcCBvbmx5IHRoZSBpcnEgbnVtYmVyIChpbnRlZ2VyKS4gQnV0IHlvdQorICAgICAgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgbnVtYmVyIGFzIC0xIGJlZm9yZSBhY3R1YWwgYWxsb2NhdGlvbiwKKyAgICAgIHNpbmNlIGlycSAwIGlzIHZhbGlkLiBUaGUgcG9ydCBhZGRyZXNzIGFuZCBpdHMgcmVzb3VyY2UgcG9pbnRlcgorICAgICAgY2FuIGJlIGluaXRpYWxpemVkIGFzIG51bGwgYnkKKyAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPiBhdXRvbWF0aWNhbGx5LCBzbyB5b3UKKyAgICAgIGRvbid0IGhhdmUgdG8gdGFrZSBjYXJlIG9mIHJlc2V0dGluZyB0aGVtLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIGFuIEkvTyBwb3J0IGlzIGRvbmUgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpOworICBpZiAoZXJyIDwgMCkgeyAKKyAgICAgICAgICBrZnJlZShjaGlwKTsKKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CisgIGNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPCEtLSBvYnNvbGV0ZSAtLT4KKyAgICAgICAgSXQgd2lsbCByZXNlcnZlIHRoZSBJL08gcG9ydCByZWdpb24gb2YgOCBieXRlcyBvZiB0aGUgZ2l2ZW4KKyAgICAgIFBDSSBkZXZpY2UuIFRoZSByZXR1cm5lZCB2YWx1ZSwgY2hpcC0mZ3Q7cmVzX3BvcnQsIGlzIGFsbG9jYXRlZAorICAgICAgdmlhIDxmdW5jdGlvbj5rbWFsbG9jKCk8L2Z1bmN0aW9uPiBieQorICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPi4gVGhlIHBvaW50ZXIgbXVzdCBiZQorICAgICAgcmVsZWFzZWQgdmlhIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4sIGJ1dCB0aGVyZSBpcyBhCisgICAgICBwcm9ibGVtIHdpdGggdGhpcy4gVGhpcyBpc3N1ZSB3aWxsIGJlIGV4cGxhaW5lZCBsYXRlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIGFuIGludGVycnVwdCBzb3VyY2UgaXMgZG9uZSBsaWtlIHRoaXM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKKyAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCAiTXkgQ2hpcCIsIGNoaXApKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgfQorICBjaGlwLT5pcnEgPSBwY2ktPmlycTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIDxmdW5jdGlvbj5zbmRfbXljaGlwX2ludGVycnVwdCgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBkZWZpbmVkIDxsaW5rCisgICAgICBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj48Y2l0ZXRpdGxlPmxhdGVyPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIE5vdGUgdGhhdCBjaGlwLSZndDtpcnEgc2hvdWxkIGJlIGRlZmluZWQKKyAgICAgIG9ubHkgd2hlbiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IHN1Y2NlZWRlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBPbiB0aGUgUENJIGJ1cywgaW50ZXJydXB0cyBjYW4gYmUgc2hhcmVkLiBUaHVzLAorICAgICAgPGNvbnN0YW50PklSUUZfU0hBUkVEPC9jb25zdGFudD4gaXMgdXNlZCBhcyB0aGUgaW50ZXJydXB0IGZsYWcgb2YKKyAgICAgIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGxhc3QgYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnJlcXVlc3RfaXJxKCk8L2Z1bmN0aW9uPiBpcyB0aGUKKyAgICAgIGRhdGEgcG9pbnRlciBwYXNzZWQgdG8gdGhlIGludGVycnVwdCBoYW5kbGVyLiBVc3VhbGx5LCB0aGUKKyAgICAgIGNoaXAtc3BlY2lmaWMgcmVjb3JkIGlzIHVzZWQgZm9yIHRoYXQsIGJ1dCB5b3UgY2FuIHVzZSB3aGF0IHlvdQorICAgICAgbGlrZSwgdG9vLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEkgd29uJ3QgZ2l2ZSBkZXRhaWxzIGFib3V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhdCB0aGlzCisgICAgICAgIHBvaW50LCBidXQgYXQgbGVhc3QgaXRzIGFwcGVhcmFuY2UgY2FuIGJlIGV4cGxhaW5lZCBub3cuIFRoZQorICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBsb29rcyB1c3VhbGx5IGxpa2UgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgbGV0J3Mgd3JpdGUgdGhlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3RvciBmb3IgdGhlIHJlc291cmNlcworICAgICAgYWJvdmUuIFRoZSByb2xlIG9mIGRlc3RydWN0b3IgaXMgc2ltcGxlOiBkaXNhYmxlIHRoZSBoYXJkd2FyZQorICAgICAgKGlmIGFscmVhZHkgYWN0aXZhdGVkKSBhbmQgcmVsZWFzZSB0aGUgcmVzb3VyY2VzLiBTbyBmYXIsIHdlCisgICAgICBoYXZlIG5vIGhhcmR3YXJlIHBhcnQsIHNvIHRoZSBkaXNhYmxpbmcgY29kZSBpcyBub3Qgd3JpdHRlbiBoZXJlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRvIHJlbGVhc2UgdGhlIHJlc291cmNlcywgdGhlIDxxdW90ZT5jaGVjay1hbmQtcmVsZWFzZTwvcXVvdGU+CisgICAgICAgIG1ldGhvZCBpcyBhIHNhZmVyIHdheS4gRm9yIHRoZSBpbnRlcnJ1cHQsIGRvIGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKGNoaXAtPmlycSA+PSAwKQorICAgICAgICAgIGZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBTaW5jZSB0aGUgaXJxIG51bWJlciBjYW4gc3RhcnQgZnJvbSAwLCB5b3Ugc2hvdWxkIGluaXRpYWxpemUKKyAgICAgICAgY2hpcC0mZ3Q7aXJxIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSAoZS5nLiAtMSksIHNvIHRoYXQgeW91IGNhbgorICAgICAgICBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGlycSBudW1iZXIgYXMgYWJvdmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSByZXF1ZXN0ZWQgSS9PIHBvcnRzIG9yIG1lbW9yeSByZWdpb25zIHZpYQorCTxmdW5jdGlvbj5wY2lfcmVxdWVzdF9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbnMoKTwvZnVuY3Rpb24+IGxpa2UgaW4gdGhpcyBleGFtcGxlLAorCXJlbGVhc2UgdGhlIHJlc291cmNlKHMpIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLAorCTxmdW5jdGlvbj5wY2lfcmVsZWFzZV9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbnMoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlXaGVuIHlvdSByZXF1ZXN0ZWQgbWFudWFsbHkgdmlhIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlvciA8ZnVuY3Rpb24+cmVxdWVzdF9tZW1fcmVnaW9uPC9mdW5jdGlvbj4sIHlvdSBjYW4gcmVsZWFzZSBpdCB2aWEKKwk8ZnVuY3Rpb24+cmVsZWFzZV9yZXNvdXJjZSgpPC9mdW5jdGlvbj4uICBTdXBwb3NlIHRoYXQgeW91IGtlZXAKKwl0aGUgcmVzb3VyY2UgcG9pbnRlciByZXR1cm5lZCBmcm9tIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlpbiBjaGlwLSZndDtyZXNfcG9ydCwgdGhlIHJlbGVhc2UgcHJvY2VkdXJlIGxvb2tzIGxpa2U6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBEb24ndCBmb3JnZXQgdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX2Rpc2FibGVfZGV2aWNlKCk8L2Z1bmN0aW9uPgorICAgICAgYmVmb3JlIHRoZSBlbmQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbmQgZmluYWxseSwgcmVsZWFzZSB0aGUgY2hpcC1zcGVjaWZpYyByZWNvcmQuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAga2ZyZWUoY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBZ2FpbiwgcmVtZW1iZXIgdGhhdCB5b3UgY2Fubm90CisgICAgICB1c2UgdGhlIDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+IHByZWZpeCBmb3IgdGhpcyBkZXN0cnVjdG9yLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXZSBkaWRuJ3QgaW1wbGVtZW50IHRoZSBoYXJkd2FyZSBkaXNhYmxpbmcgcGFydCBpbiB0aGUgYWJvdmUuCisgICAgICBJZiB5b3UgbmVlZCB0byBkbyB0aGlzLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZXN0cnVjdG9yIG1heSBiZQorICAgICAgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBpcyBjb21wbGV0ZWQuCisgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIGZsYWcgdG8gc2tpcCBoYXJkd2FyZSBkaXNhYmxpbmcKKyAgICAgIGlmIHRoZSBoYXJkd2FyZSB3YXMgbm90IGluaXRpYWxpemVkIHlldC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjaGlwLWRhdGEgaXMgYXNzaWduZWQgdG8gdGhlIGNhcmQgdXNpbmcKKyAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gd2l0aAorICAgICAgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRUxWRUw8L2NvbnN0YW50PiAsIGl0cyBkZXN0cnVjdG9yIGlzIAorICAgICAgY2FsbGVkIGF0IHRoZSBsYXN0LiAgVGhhdCBpcywgaXQgaXMgYXNzdXJlZCB0aGF0IGFsbCBvdGhlcgorICAgICAgY29tcG9uZW50cyBsaWtlIFBDTXMgYW5kIGNvbnRyb2xzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLgorICAgICAgWW91IGRvbid0IGhhdmUgdG8gc3RvcCBQQ01zLCBldGMuIGV4cGxpY2l0bHksIGJ1dCBqdXN0CisgICAgICBjYWxsIGxvdy1sZXZlbCBoYXJkd2FyZSBzdG9wcGluZy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtYW5hZ2VtZW50IG9mIGEgbWVtb3J5LW1hcHBlZCByZWdpb24gaXMgYWxtb3N0IGFzIHNhbWUgYXMKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgYW4gSS9PIHBvcnQuIFlvdSdsbCBuZWVkIHRocmVlIGZpZWxkcyBsaWtlCisgICAgICAgIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGlvYmFzZV9waHlzOworICAgICAgICAgIHZvaWQgX19pb21lbSAqaW9iYXNlX3ZpcnQ7CisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBhbmQgdGhlIGFsbG9jYXRpb24gd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsKKyAgICAgICAgICBrZnJlZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CisgIGNoaXAtPmlvYmFzZV9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisgIGNoaXAtPmlvYmFzZV92aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKGNoaXAtPmlvYmFzZV9waHlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaSwgMCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIAorICAgICAgICBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3RvciB3b3VsZCBiZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShzdHJ1Y3QgbXljaGlwICpjaGlwKQorICB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGlmIChjaGlwLT5pb2Jhc2VfdmlydCkKKyAgICAgICAgICAgICAgICAgIGlvdW5tYXAoY2hpcC0+aW9iYXNlX3ZpcnQpOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZGV2aWNlLXN0cnVjdCI+CisgICAgICA8dGl0bGU+UmVnaXN0cmF0aW9uIG9mIERldmljZSBTdHJ1Y3Q8L3RpdGxlPgorICAgICAgPHBhcmE+CisJQXQgc29tZSBwb2ludCwgdHlwaWNhbGx5IGFmdGVyIGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiwKKwl5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPmRldmljZTwvc3RydWN0bmFtZT4gb2YgdGhlIGNoaXAKKwl5b3UncmUgaGFuZGxpbmcgZm9yIHVkZXYgYW5kIGNvLiAgQUxTQSBwcm92aWRlcyBhIG1hY3JvIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKwlvbGRlciBrZXJuZWxzLiAgU2ltcGx5IGNhbGwgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwlzbyB0aGF0IGl0IHN0b3JlcyB0aGUgUENJJ3MgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIGNhcmQuICBUaGlzIHdpbGwgYmUKKwlyZWZlcnJlZCBieSBBTFNBIGNvcmUgZnVuY3Rpb25zIGxhdGVyIHdoZW4gdGhlIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlJbiB0aGUgY2FzZSBvZiBub24tUENJLCBwYXNzIHRoZSBwcm9wZXIgZGV2aWNlIHN0cnVjdCBwb2ludGVyIG9mIHRoZSBCVVMKKwlpbnN0ZWFkLiAgKEluIHRoZSBjYXNlIG9mIGxlZ2FjeSBJU0Egd2l0aG91dCBQblAsIHlvdSBkb24ndCBoYXZlIHRvIGRvCisJYW55dGhpbmcuKQorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZW50cmllcyI+CisgICAgICA8dGl0bGU+UENJIEVudHJpZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvIGZhciwgc28gZ29vZC4gTGV0J3MgZmluaXNoIHRoZSBtaXNzaW5nIFBDSQorICAgICAgc3R1ZmYuIEF0IGZpcnN0LCB3ZSBuZWVkIGEKKyAgICAgIDxzdHJ1Y3RuYW1lPnBjaV9kZXZpY2VfaWQ8L3N0cnVjdG5hbWU+IHRhYmxlIGZvciB0aGlzCisgICAgICBjaGlwc2V0LiBJdCdzIGEgdGFibGUgb2YgUENJIHZlbmRvci9kZXZpY2UgSUQgbnVtYmVyLCBhbmQgc29tZQorICAgICAgbWFza3MuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9teWNoaXBfaWRzW10gPSB7CisgICAgICAgICAgeyBQQ0lfVkVORE9SX0lEX0ZPTywgUENJX0RFVklDRV9JRF9CQVIsCisgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAorICAgICAgICAgIC4uLi4KKyAgICAgICAgICB7IDAsIH0KKyAgfTsKKyAgTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9teWNoaXBfaWRzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFuZCBzZWNvbmQgZmllbGRzIG9mCisgICAgICB0aGUgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGFyZSB0aGUgdmVuZG9yIGFuZAorICAgICAgZGV2aWNlIElEcy4gSWYgeW91IGhhdmUgbm8gcmVhc29uIHRvIGZpbHRlciB0aGUgbWF0Y2hpbmcKKyAgICAgIGRldmljZXMsIHlvdSBjYW4gbGVhdmUgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgYWJvdmUuIFRoZSBsYXN0CisgICAgICBmaWVsZCBvZiB0aGUgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gc3RydWN0IGNvbnRhaW5zCisgICAgICBwcml2YXRlIGRhdGEgZm9yIHRoaXMgZW50cnkuIFlvdSBjYW4gc3BlY2lmeSBhbnkgdmFsdWUgaGVyZSwgZm9yCisgICAgICBleGFtcGxlLCB0byBkZWZpbmUgc3BlY2lmaWMgb3BlcmF0aW9ucyBmb3Igc3VwcG9ydGVkIGRldmljZSBJRHMuCisgICAgICBTdWNoIGFuIGV4YW1wbGUgaXMgZm91bmQgaW4gdGhlIGludGVsOHgwIGRyaXZlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBlbnRyeSBvZiB0aGlzIGxpc3QgaXMgdGhlIHRlcm1pbmF0b3IuIFlvdSBtdXN0CisgICAgICBzcGVjaWZ5IHRoaXMgYWxsLXplcm8gZW50cnkuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlbiwgcHJlcGFyZSB0aGUgPHN0cnVjdG5hbWU+cGNpX2RyaXZlcjwvc3RydWN0bmFtZT4gcmVjb3JkOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICAgICAgLm5hbWUgPSAiTXkgT3duIENoaXAiLAorICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teWNoaXBfaWRzLAorICAgICAgICAgIC5wcm9iZSA9IHNuZF9teWNoaXBfcHJvYmUsCisgICAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9teWNoaXBfcmVtb3ZlKSwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5wcm9iZTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnJlbW92ZTwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9ucyBoYXZlIGFscmVhZHkKKyAgICAgIGJlZW4gZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbnMuCisgICAgICBUaGUgPHN0cnVjdGZpZWxkPnJlbW92ZTwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9uIHNob3VsZAorICAgICAgYmUgZGVmaW5lZCB3aXRoIHRoZSAKKyAgICAgIDxmdW5jdGlvbj5fX2RldmV4aXRfcCgpPC9mdW5jdGlvbj4gbWFjcm8sIHNvIHRoYXQgaXQncyBub3QKKyAgICAgIGRlZmluZWQgZm9yIGJ1aWx0LWluIChhbmQgbm9uLWhvdC1wbHVnZ2FibGUpIGNhc2UuIFRoZQorICAgICAgPHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPiAKKyAgICAgIGZpZWxkIGlzIHRoZSBuYW1lIHN0cmluZyBvZiB0aGlzIGRldmljZS4gTm90ZSB0aGF0IHlvdSBtdXN0IG5vdAorICAgICAgdXNlIGEgc2xhc2ggPHF1b3RlPi88L3F1b3RlPiBpbiB0aGlzIHN0cmluZy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbmQgYXQgbGFzdCwgdGhlIG1vZHVsZSBlbnRyaWVzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9teWNoaXBfaW5pdCh2b2lkKQorICB7CisgICAgICAgICAgcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX215Y2hpcF9leGl0KHZvaWQpCisgIHsKKyAgICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbXljaGlwX2luaXQpCisgIG1vZHVsZV9leGl0KGFsc2FfY2FyZF9teWNoaXBfZXhpdCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0IHRoZXNlIG1vZHVsZSBlbnRyaWVzIGFyZSB0YWdnZWQgd2l0aAorICAgICAgPHBhcmFtZXRlcj5fX2luaXQ8L3BhcmFtZXRlcj4gYW5kIAorICAgICAgPHBhcmFtZXRlcj5fX2V4aXQ8L3BhcmFtZXRlcj4gcHJlZml4ZXMsIG5vdAorICAgICAgPHBhcmFtZXRlcj5fX2RldmluaXQ8L3BhcmFtZXRlcj4gbm9yCisgICAgICA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9oLCBvbmUgdGhpbmcgd2FzIGZvcmdvdHRlbi4gSWYgeW91IGhhdmUgbm8gZXhwb3J0ZWQgc3ltYm9scywKKyAgICAgICAgeW91IG5lZWQgdG8gZGVjbGFyZSBpdCBpbiAyLjIgb3IgMi40IGtlcm5lbHMgKGl0J3Mgbm90IG5lY2Vzc2FyeSBpbiAyLjYga2VybmVscykuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgRVhQT1JUX05PX1NZTUJPTFM7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBUaGF0J3MgYWxsIQorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQQ00gSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icGNtLWludGVyZmFjZSI+CisgICAgPHRpdGxlPlBDTSBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtZ2VuZXJhbCI+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIFBDTSBtaWRkbGUgbGF5ZXIgb2YgQUxTQSBpcyBxdWl0ZSBwb3dlcmZ1bCBhbmQgaXQgaXMgb25seQorICAgICAgbmVjZXNzYXJ5IGZvciBlYWNoIGRyaXZlciB0byBpbXBsZW1lbnQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMKKyAgICAgIHRvIGFjY2VzcyBpdHMgaGFyZHdhcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgYWNjZXNzaW5nIHRvIHRoZSBQQ00gbGF5ZXIsIHlvdSBuZWVkIHRvIGluY2x1ZGUKKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4gZmlyc3QuIEluIGFkZGl0aW9uLAorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY21fcGFyYW1zLmgmZ3Q7PC9maWxlbmFtZT4gbWlnaHQgYmUgbmVlZGVkCisgICAgICBpZiB5b3UgYWNjZXNzIHRvIHNvbWUgZnVuY3Rpb25zIHJlbGF0ZWQgd2l0aCBod19wYXJhbS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFYWNoIGNhcmQgZGV2aWNlIGNhbiBoYXZlIHVwIHRvIGZvdXIgcGNtIGluc3RhbmNlcy4gQSBwY20KKyAgICAgIGluc3RhbmNlIGNvcnJlc3BvbmRzIHRvIGEgcGNtIGRldmljZSBmaWxlLiBUaGUgbGltaXRhdGlvbiBvZgorICAgICAgbnVtYmVyIG9mIGluc3RhbmNlcyBjb21lcyBvbmx5IGZyb20gdGhlIGF2YWlsYWJsZSBiaXQgc2l6ZSBvZgorICAgICAgdGhlIExpbnV4J3MgZGV2aWNlIG51bWJlcnMuIE9uY2Ugd2hlbiA2NGJpdCBkZXZpY2UgbnVtYmVyIGlzCisgICAgICB1c2VkLCB3ZSdsbCBoYXZlIG1vcmUgcGNtIGluc3RhbmNlcyBhdmFpbGFibGUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQSBwY20gaW5zdGFuY2UgY29uc2lzdHMgb2YgcGNtIHBsYXliYWNrIGFuZCBjYXB0dXJlIHN0cmVhbXMsCisgICAgICBhbmQgZWFjaCBwY20gc3RyZWFtIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIHBjbSBzdWJzdHJlYW1zLiBTb21lCisgICAgICBzb3VuZGNhcmRzIHN1cHBvcnQgbXVsdGlwbGUgcGxheWJhY2sgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZSwKKyAgICAgIGVtdTEwazEgaGFzIGEgUENNIHBsYXliYWNrIG9mIDMyIHN0ZXJlbyBzdWJzdHJlYW1zLiBJbiB0aGlzIGNhc2UsIGF0CisgICAgICBlYWNoIG9wZW4sIGEgZnJlZSBzdWJzdHJlYW0gaXMgKHVzdWFsbHkpIGF1dG9tYXRpY2FsbHkgY2hvc2VuCisgICAgICBhbmQgb3BlbmVkLiBNZWFud2hpbGUsIHdoZW4gb25seSBvbmUgc3Vic3RyZWFtIGV4aXN0cyBhbmQgaXQgd2FzCisgICAgICBhbHJlYWR5IG9wZW5lZCwgdGhlIHN1Y2Nlc3NmdWwgb3BlbiB3aWxsIGVpdGhlciBibG9jaworICAgICAgb3IgZXJyb3Igd2l0aCA8Y29uc3RhbnQ+RUFHQUlOPC9jb25zdGFudD4gYWNjb3JkaW5nIHRvIHRoZQorICAgICAgZmlsZSBvcGVuIG1vZGUuIEJ1dCB5b3UgZG9uJ3QgaGF2ZSB0byBjYXJlIGFib3V0IHN1Y2ggZGV0YWlscyBpbiB5b3VyCisgICAgICBkcml2ZXIuIFRoZSBQQ00gbWlkZGxlIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIHN1Y2ggd29yay4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1leGFtcGxlIj4KKyAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBleGFtcGxlIGNvZGUgYmVsb3cgZG9lcyBub3QgaW5jbHVkZSBhbnkgaGFyZHdhcmUgYWNjZXNzCisgICAgICByb3V0aW5lcyBidXQgc2hvd3Mgb25seSB0aGUgc2tlbGV0b24sIGhvdyB0byBidWlsZCB1cCB0aGUgUENNCisgICAgICBpbnRlcmZhY2VzLgorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ00gRXhhbXBsZSBDb2RlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorICAuLi4uCisKKyAgLyogaGFyZHdhcmUgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIGhhcmR3YXJlIGRlZmluaXRpb24gKi8KKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9teWNoaXBfY2FwdHVyZV9odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIG9wZW4gY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7CisgICAgICAgICAgLyogbW9yZSBoYXJkd2FyZS1pbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgaGVyZSAqLworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgLyogdGhlIGhhcmR3YXJlLXNwZWNpZmljIGNvZGVzIHdpbGwgYmUgaGVyZSAqLworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKworICB9CisKKyAgLyogb3BlbiBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX2NhcHR1cmVfaHc7CisgICAgICAgICAgLyogbW9yZSBoYXJkd2FyZS1pbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgaGVyZSAqLworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICAvKiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZXMgd2lsbCBiZSBoZXJlICovCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiAwOworCisgIH0KKworICAvKiBod19wYXJhbXMgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCisgIHsKKyAgICAgICAgICByZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworICB9CisKKyAgLyogaHdfZnJlZSBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICByZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworICB9CisKKyAgLyogcHJlcGFyZSBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICAvKiBzZXQgdXAgdGhlIGhhcmR3YXJlIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAqIGZvciBleGFtcGxlLi4uCisgICAgICAgICAgICovCisgICAgICAgICAgbXljaGlwX3NldF9zYW1wbGVfZm9ybWF0KGNoaXAsIHJ1bnRpbWUtPmZvcm1hdCk7CisgICAgICAgICAgbXljaGlwX3NldF9zYW1wbGVfcmF0ZShjaGlwLCBydW50aW1lLT5yYXRlKTsKKyAgICAgICAgICBteWNoaXBfc2V0X2NoYW5uZWxzKGNoaXAsIHJ1bnRpbWUtPmNoYW5uZWxzKTsKKyAgICAgICAgICBteWNoaXBfc2V0X2RtYV9zZXR1cChjaGlwLCBydW50aW1lLT5kbWFfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5wZXJpb2Rfc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiB0cmlnZ2VyIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbWQpCisgIHsKKyAgICAgICAgICBzd2l0Y2ggKGNtZCkgeworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisgICAgICAgICAgICAgICAgICAvKiBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUgKi8KKyAgICAgICAgICAgICAgICAgIC4uLi4KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAgICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lICovCisgICAgICAgICAgICAgICAgICAuLi4uCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgfQorICB9CisKKyAgLyogcG9pbnRlciBjYWxsYmFjayAqLworICBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKKyAgc25kX215Y2hpcF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgdW5zaWduZWQgaW50IGN1cnJlbnRfcHRyOworCisgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvaW50ZXIgKi8KKyAgICAgICAgICBjdXJyZW50X3B0ciA9IG15Y2hpcF9nZXRfaHdfcG9pbnRlcihjaGlwKTsKKyAgICAgICAgICByZXR1cm4gY3VycmVudF9wdHI7CisgIH0KKworICAvKiBvcGVyYXRvcnMgKi8KKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4sCisgICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKiBvcGVyYXRvcnMgKi8KKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXljaGlwX2NhcHR1cmVfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfY2FwdHVyZV9vcGVuLAorICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfY2FwdHVyZV9jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKgorICAgKiAgZGVmaW5pdGlvbnMgb2YgY2FwdHVyZSBhcmUgb21pdHRlZCBoZXJlLi4uCisgICAqLworCisgIC8qIGNyZWF0ZSBhIHBjbSBkZXZpY2UgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKHN0cnVjdCBteWNoaXAgKmNoaXApCisgIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiTXkgQ2hpcCIsIDAsIDEsIDEsICZwY20pOworICAgICAgICAgIGlmIChlcnIgPCAwKSAKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworICAgICAgICAgIHN0cmNweShwY20tPm5hbWUsICJNeSBDaGlwIik7CisgICAgICAgICAgY2hpcC0+cGNtID0gcGNtOworICAgICAgICAgIC8qIHNldCBvcGVyYXRvcnMgKi8KKyAgICAgICAgICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9wbGF5YmFja19vcHMpOworICAgICAgICAgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfY2FwdHVyZV9vcHMpOworICAgICAgICAgIC8qIHByZS1hbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKi8KKyAgICAgICAgICAvKiBOT1RFOiB0aGlzIG1heSBmYWlsICovCisgICAgICAgICAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBIHBjbSBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgYnkgdGhlIDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4KKyAgICAgIGZ1bmN0aW9uLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIHBjbSwKKyAgICAgIG5hbWVseSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKHN0cnVjdCBteWNoaXAgKmNoaXApCisgIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiTXkgQ2hpcCIsIDAsIDEsIDEsICZwY20pOworICAgICAgICAgIGlmIChlcnIgPCAwKSAKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworICAgICAgICAgIHN0cmNweShwY20tPm5hbWUsICJNeSBDaGlwIik7CisgICAgICAgICAgY2hpcC0+cGNtID0gcGNtOworCSAgLi4uLgorICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+c25kX3BjbV9uZXcoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHRha2VzIGZvdXIKKyAgICAgIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIgdG8gd2hpY2ggdGhpcworICAgICAgcGNtIGlzIGFzc2lnbmVkLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgSUQgc3RyaW5nLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwgMCBpbiB0aGUKKyAgICAgIGFib3ZlKSBpcyB0aGUgaW5kZXggb2YgdGhpcyBuZXcgcGNtLiBJdCBiZWdpbnMgZnJvbSB6ZXJvLiBJZgorICAgICAgeW91IGNyZWF0ZSBtb3JlIHRoYW4gb25lIHBjbSBpbnN0YW5jZXMsIHNwZWNpZnkgdGhlCisgICAgICBkaWZmZXJlbnQgbnVtYmVycyBpbiB0aGlzIGFyZ3VtZW50LiBGb3IgZXhhbXBsZSwKKyAgICAgIDxwYXJhbWV0ZXI+aW5kZXg8L3BhcmFtZXRlcj4gPSAxIGZvciB0aGUgc2Vjb25kIFBDTSBkZXZpY2UuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb3VydGggYW5kIGZpZnRoIGFyZ3VtZW50cyBhcmUgdGhlIG51bWJlciBvZiBzdWJzdHJlYW1zCisgICAgICBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUsIHJlc3BlY3RpdmVseS4gSGVyZSAxIGlzIHVzZWQgZm9yCisgICAgICBib3RoIGFyZ3VtZW50cy4gV2hlbiBubyBwbGF5YmFjayBvciBjYXB0dXJlIHN1YnN0cmVhbXMgYXJlIGF2YWlsYWJsZSwKKyAgICAgIHBhc3MgMCB0byB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIElmIGEgY2hpcCBzdXBwb3J0cyBtdWx0aXBsZSBwbGF5YmFja3Mgb3IgY2FwdHVyZXMsIHlvdSBjYW4KKyAgICAgIHNwZWNpZnkgbW9yZSBudW1iZXJzLCBidXQgdGhleSBtdXN0IGJlIGhhbmRsZWQgcHJvcGVybHkgaW4KKyAgICAgIG9wZW4vY2xvc2UsIGV0Yy4gY2FsbGJhY2tzLiAgV2hlbiB5b3UgbmVlZCB0byBrbm93IHdoaWNoCisgICAgICBzdWJzdHJlYW0geW91IGFyZSByZWZlcnJpbmcgdG8sIHRoZW4gaXQgY2FuIGJlIG9idGFpbmVkIGZyb20KKyAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfcGNtX3N1YnN0cmVhbTwvc3RydWN0bmFtZT4gZGF0YSBwYXNzZWQgdG8gZWFjaCBjYWxsYmFjaworICAgICAgYXMgZm9sbG93czogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisgIGludCBpbmRleCA9IHN1YnN0cmVhbS0+bnVtYmVyOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgcGNtIGlzIGNyZWF0ZWQsIHlvdSBuZWVkIHRvIHNldCBvcGVyYXRvcnMgZm9yIGVhY2gKKyAgICAgICAgcGNtIHN0cmVhbS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKyAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7CisgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKyAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX2NhcHR1cmVfb3BzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG9wZXJhdG9ycyBhcmUgZGVmaW5lZCB0eXBpY2FsbHkgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX215Y2hpcF9wbGF5YmFja19vcHMgPSB7CisgICAgICAgICAgLm9wZW4gPSAgICAgICAgc25kX215Y2hpcF9wY21fb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX3BjbV9jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEFsbCB0aGUgY2FsbGJhY2tzIGFyZSBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj48Y2l0ZXRpdGxlPgorICAgICAgICBPcGVyYXRvcnM8L2NpdGV0aXRsZT48L2xpbms+IHN1YnNlY3Rpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciBzZXR0aW5nIHRoZSBvcGVyYXRvcnMsIHlvdSBwcm9iYWJseSB3aWxsIHdhbnQgdG8KKyAgICAgICAgcHJlLWFsbG9jYXRlIHRoZSBidWZmZXIuIEZvciB0aGUgcHJlLWFsbG9jYXRpb24sIHNpbXBseSBjYWxsCisgICAgICAgIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgSXQgd2lsbCBhbGxvY2F0ZSBhIGJ1ZmZlciB1cCB0byA2NGtCIGFzIGRlZmF1bHQuCisgICAgICBCdWZmZXIgbWFuYWdlbWVudCBkZXRhaWxzIHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCisgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgY2FuIHNldCBzb21lIGV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIHBjbQorICAgICAgICBpbiBwY20tJmd0O2luZm9fZmxhZ3MuCisgICAgICAgIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSBkZWZpbmVkIGFzCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19YWFg8L2NvbnN0YW50PiBpbgorICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZC5oJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyB1c2VkIGZvcgorICAgICAgICB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbiAoZGVzY3JpYmVkIGxhdGVyKS4gV2hlbiB5b3VyIHNvdW5kY2hpcAorICAgICAgICBzdXBwb3J0cyBvbmx5IGhhbGYtZHVwbGV4LCBzcGVjaWZ5IGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcGNtLT5pbmZvX2ZsYWdzID0gU05EUlZfUENNX0lORk9fSEFMRl9EVVBMRVg7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT4uLi4gQW5kIHRoZSBEZXN0cnVjdG9yPzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlc3RydWN0b3IgZm9yIGEgcGNtIGluc3RhbmNlIGlzIG5vdCBhbHdheXMKKyAgICAgIG5lY2Vzc2FyeS4gU2luY2UgdGhlIHBjbSBkZXZpY2Ugd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgbWlkZGxlCisgICAgICBsYXllciBjb2RlIGF1dG9tYXRpY2FsbHksIHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgdGhlIGRlc3RydWN0b3IKKyAgICAgIGV4cGxpY2l0bHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciB3b3VsZCBiZSBuZWNlc3NhcnkgaWYgeW91IGNyZWF0ZWQKKyAgICAgICAgc3BlY2lhbCByZWNvcmRzIGludGVybmFsbHkgYW5kIG5lZWRlZCB0byByZWxlYXNlIHRoZW0uIEluIHN1Y2ggYQorICAgICAgICBjYXNlLCBzZXQgdGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gdG8KKyAgICAgICAgcGNtLSZndDtwcml2YXRlX2ZyZWU6IAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ00gSW5zdGFuY2Ugd2l0aCBhIERlc3RydWN0b3I8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteWNoaXBfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX2NoaXAocGNtKTsKKyAgICAgICAgICAvKiBmcmVlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBrZnJlZShjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhKTsKKyAgICAgICAgICAvKiBkbyB3aGF0IHlvdSBsaWtlIGVsc2UgKi8KKyAgICAgICAgICAuLi4uCisgIH0KKworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20oc3RydWN0IG15Y2hpcCAqY2hpcCkKKyAgeworICAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207CisgICAgICAgICAgLi4uLgorICAgICAgICAgIC8qIGFsbG9jYXRlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhID0ga21hbGxvYyguLi4pOworICAgICAgICAgIC8qIHNldCB0aGUgZGVzdHJ1Y3RvciAqLworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZnJlZSA9IG15Y2hpcF9wY21fZnJlZTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lIj4KKyAgICAgIDx0aXRsZT5SdW50aW1lIFBvaW50ZXIgLSBUaGUgQ2hlc3Qgb2YgUENNIEluZm9ybWF0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwkgIFdoZW4gdGhlIFBDTSBzdWJzdHJlYW0gaXMgb3BlbmVkLCBhIFBDTSBydW50aW1lIGluc3RhbmNlIGlzCisJYWxsb2NhdGVkIGFuZCBhc3NpZ25lZCB0byB0aGUgc3Vic3RyZWFtLiBUaGlzIHBvaW50ZXIgaXMKKwlhY2Nlc3NpYmxlIHZpYSA8Y29uc3RhbnQ+c3Vic3RyZWFtLSZndDtydW50aW1lPC9jb25zdGFudD4uCisJVGhpcyBydW50aW1lIHBvaW50ZXIgaG9sZHMgbW9zdCBpbmZvcm1hdGlvbiB5b3UgbmVlZAorCXRvIGNvbnRyb2wgdGhlIFBDTTogdGhlIGNvcHkgb2YgaHdfcGFyYW1zIGFuZCBzd19wYXJhbXMgY29uZmlndXJhdGlvbnMsIHRoZSBidWZmZXIKKwlwb2ludGVycywgbW1hcCByZWNvcmRzLCBzcGlubG9ja3MsIGV0Yy4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgZGVmaW5pdGlvbiBvZiBydW50aW1lIGluc3RhbmNlIGlzIGZvdW5kIGluCisJPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gIEhlcmUgYXJlCisgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZToKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCitzdHJ1Y3QgX3NuZF9wY21fcnVudGltZSB7CisJLyogLS0gU3RhdHVzIC0tICovCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICp0cmlnZ2VyX21hc3RlcjsKKwlzbmRfdGltZXN0YW1wX3QgdHJpZ2dlcl90c3RhbXA7CS8qIHRyaWdnZXIgdGltZXN0YW1wICovCisJaW50IG92ZXJyYW5nZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbF9tYXg7CisJc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyX2Jhc2U7CS8qIFBvc2l0aW9uIGF0IGJ1ZmZlciByZXN0YXJ0ICovCisJc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyX2ludGVycnVwdDsgLyogUG9zaXRpb24gYXQgaW50ZXJydXB0IHRpbWUqLworCisJLyogLS0gSFcgcGFyYW1zIC0tICovCisJc25kX3BjbV9hY2Nlc3NfdCBhY2Nlc3M7CS8qIGFjY2VzcyBtb2RlICovCisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CS8qIFNORFJWX1BDTV9GT1JNQVRfKiAqLworCXNuZF9wY21fc3ViZm9ybWF0X3Qgc3ViZm9ybWF0OwkvKiBzdWJmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgcmF0ZTsJCS8qIHJhdGUgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CQkvKiBjaGFubmVscyAqLworCXNuZF9wY21fdWZyYW1lc190IHBlcmlvZF9zaXplOwkvKiBwZXJpb2Qgc2l6ZSAqLworCXVuc2lnbmVkIGludCBwZXJpb2RzOwkJLyogcGVyaW9kcyAqLworCXNuZF9wY21fdWZyYW1lc190IGJ1ZmZlcl9zaXplOwkvKiBidWZmZXIgc2l6ZSAqLworCXVuc2lnbmVkIGludCB0aWNrX3RpbWU7CQkvKiB0aWNrIHRpbWUgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBtaW5fYWxpZ247CS8qIE1pbiBhbGlnbm1lbnQgZm9yIHRoZSBmb3JtYXQgKi8KKwlzaXplX3QgYnl0ZV9hbGlnbjsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfYml0czsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX2JpdHM7CisJdW5zaWduZWQgaW50IGluZm87CisJdW5zaWduZWQgaW50IHJhdGVfbnVtOworCXVuc2lnbmVkIGludCByYXRlX2RlbjsKKworCS8qIC0tIFNXIHBhcmFtcyAtLSAqLworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXBfbW9kZTsJLyogbW1hcCB0aW1lc3RhbXAgaXMgdXBkYXRlZCAqLworICAJdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOworCXVuc2lnbmVkIGludCBzbGVlcF9taW47CQkvKiBtaW4gdGlja3MgdG8gc2xlZXAgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBzdGFydF90aHJlc2hvbGQ7CisJc25kX3BjbV91ZnJhbWVzX3Qgc3RvcF90aHJlc2hvbGQ7CisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV90aHJlc2hvbGQ7IC8qIFNpbGVuY2UgZmlsbGluZyBoYXBwZW5zIHdoZW4KKwkJCQkJCW5vaXNlIGlzIG5lYXJlc3QgdGhhbiB0aGlzICovCisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV9zaXplOwkvKiBTaWxlbmNlIGZpbGxpbmcgc2l6ZSAqLworCXNuZF9wY21fdWZyYW1lc190IGJvdW5kYXJ5OwkvKiBwb2ludGVycyB3cmFwIHBvaW50ICovCisKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlZF9zdGFydDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlZF9zaXplOworCisJc25kX3BjbV9zeW5jX2lkX3Qgc3luYzsJCS8qIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbiBJRCAqLworCisJLyogLS0gbW1hcCAtLSAqLworCXZvbGF0aWxlIHN0cnVjdCBzbmRfcGNtX21tYXBfc3RhdHVzICpzdGF0dXM7CisJdm9sYXRpbGUgc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sICpjb250cm9sOworCWF0b21pY190IG1tYXBfY291bnQ7CisKKwkvKiAtLSBsb2NraW5nIC8gc2NoZWR1bGluZyAtLSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aWNrX3RpbWVyOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CisKKwkvKiAtLSBwcml2YXRlIHNlY3Rpb24gLS0gKi8KKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisKKwkvKiAtLSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAtLSAqLworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGh3OworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRzIGh3X2NvbnN0cmFpbnRzOworCisJLyogLS0gaW50ZXJydXB0IGNhbGxiYWNrcyAtLSAqLworCXZvaWQgKCp0cmFuc2Zlcl9hY2tfYmVnaW4pKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKKwl2b2lkICgqdHJhbnNmZXJfYWNrX2VuZCkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworCisJLyogLS0gdGltZXIgLS0gKi8KKwl1bnNpZ25lZCBpbnQgdGltZXJfcmVzb2x1dGlvbjsJLyogdGltZXIgcmVzb2x1dGlvbiAqLworCisJLyogLS0gRE1BIC0tICovICAgICAgICAgICAKKwl1bnNpZ25lZCBjaGFyICpkbWFfYXJlYTsJLyogRE1BIGFyZWEgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogcGh5c2ljYWwgYnVzIGFkZHJlc3MgKG5vdCBhY2Nlc3NpYmxlIGZyb20gbWFpbiBDUFUpICovCisJc2l6ZV90IGRtYV9ieXRlczsJCS8qIHNpemUgb2YgRE1BIGFyZWEgKi8KKworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hX2J1ZmZlcl9wOwkvKiBhbGxvY2F0ZWQgYnVmZmVyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQorCS8qIC0tIE9TUyB0aGluZ3MgLS0gKi8KKwlzdHJ1Y3Qgc25kX3BjbV9vc3NfcnVudGltZSBvc3M7CisjZW5kaWYKK307CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJPC9wYXJhPgorCisJPHBhcmE+CisJICBGb3IgdGhlIG9wZXJhdG9ycyAoY2FsbGJhY2tzKSBvZiBlYWNoIHNvdW5kIGRyaXZlciwgbW9zdCBvZgorCXRoZXNlIHJlY29yZHMgYXJlIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25seS4gIE9ubHkgdGhlIFBDTQorCW1pZGRsZS1sYXllciBjaGFuZ2VzIC8gdXBkYXRlcyB0aGVtLiAgVGhlIGV4Y2VwdGlvbnMgYXJlCisJdGhlIGhhcmR3YXJlIGRlc2NyaXB0aW9uIChodyksIGludGVycnVwdCBjYWxsYmFja3MKKwkodHJhbnNmZXJfYWNrX3h4eCksIERNQSBidWZmZXIgaW5mb3JtYXRpb24sIGFuZCB0aGUgcHJpdmF0ZQorCWRhdGEuICBCZXNpZGVzLCBpZiB5b3UgdXNlIHRoZSBzdGFuZGFyZCBidWZmZXIgYWxsb2NhdGlvbgorCW1ldGhvZCB2aWEgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sCisJeW91IGRvbid0IG5lZWQgdG8gc2V0IHRoZSBETUEgYnVmZmVyIGluZm9ybWF0aW9uIGJ5IHlvdXJzZWxmLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIHRoZSBzZWN0aW9ucyBiZWxvdywgaW1wb3J0YW50IHJlY29yZHMgYXJlIGV4cGxhaW5lZC4KKwk8L3BhcmE+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWh3Ij4KKwk8dGl0bGU+SGFyZHdhcmUgRGVzY3JpcHRpb248L3RpdGxlPgorCTxwYXJhPgorCSAgVGhlIGhhcmR3YXJlIGRlc2NyaXB0b3IgKHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfcGNtX2hhcmR3YXJlPC9zdHJ1Y3RuYW1lPikKKwljb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGZ1bmRhbWVudGFsIGhhcmR3YXJlCisJY29uZmlndXJhdGlvbi4gIEFib3ZlIGFsbCwgeW91J2xsIG5lZWQgdG8gZGVmaW5lIHRoaXMgaW4KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj48Y2l0ZXRpdGxlPgorCXRoZSBvcGVuIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KKwlOb3RlIHRoYXQgdGhlIHJ1bnRpbWUgaW5zdGFuY2UgaG9sZHMgdGhlIGNvcHkgb2YgdGhlCisJZGVzY3JpcHRvciwgbm90IHRoZSBwb2ludGVyIHRvIHRoZSBleGlzdGluZyBkZXNjcmlwdG9yLiAgVGhhdAorCWlzLCBpbiB0aGUgb3BlbiBjYWxsYmFjaywgeW91IGNhbiBtb2RpZnkgdGhlIGNvcGllZCBkZXNjcmlwdG9yCisJKDxjb25zdGFudD5ydW50aW1lLSZndDtodzwvY29uc3RhbnQ+KSBhcyB5b3UgbmVlZC4gIEZvciBleGFtcGxlLCBpZiB0aGUgbWF4aW11bQorCW51bWJlciBvZiBjaGFubmVscyBpcyAxIG9ubHkgb24gc29tZSBjaGlwIG1vZGVscywgeW91IGNhbgorCXN0aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBkZXNjcmlwdG9yIGFuZCBjaGFuZ2UgdGhlCisJY2hhbm5lbHNfbWF4IGxhdGVyOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworICAgICAgICAgIC4uLgorICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsgLyogY29tbW9uIGRlZmluaXRpb24gKi8KKyAgICAgICAgICBpZiAoY2hpcC0+bW9kZWwgPT0gVkVSWV9PTERfT05FKQorICAgICAgICAgICAgICAgICAgcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwkgIFR5cGljYWxseSwgeW91J2xsIGhhdmUgYSBoYXJkd2FyZSBkZXNjcmlwdG9yIGFzIGJlbG93OgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9teWNoaXBfcGxheWJhY2tfaHcgPSB7CisgICAgICAgICAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKyAgICAgICAgICAuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorICAgICAgICAgIC5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKyAgICAgICAgICAucmF0ZV9taW4gPSAgICAgICAgIDgwMDAsCisgICAgICAgICAgLnJhdGVfbWF4ID0gICAgICAgICA0ODAwMCwKKyAgICAgICAgICAuY2hhbm5lbHNfbWluID0gICAgIDIsCisgICAgICAgICAgLmNoYW5uZWxzX21heCA9ICAgICAyLAorICAgICAgICAgIC5idWZmZXJfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19taW4gPSA0MDk2LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZHNfbWluID0gICAgICAxLAorICAgICAgICAgIC5wZXJpb2RzX21heCA9ICAgICAgMTAyNCwKKyAgfTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSB0eXBlIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwY20uIFRoZSBiaXQgZmxhZ3MgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmQuaCZndDs8L2ZpbGVuYW1lPiBhcworICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fWFhYPC9jb25zdGFudD4uIEhlcmUsIGF0IGxlYXN0LCB5b3UKKyAgICAgICAgaGF2ZSB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG1tYXAgaXMgc3VwcG9ydGVkIGFuZCB3aGljaAorICAgICAgICBpbnRlcmxlYXZlZCBmb3JtYXQgaXMgc3VwcG9ydGVkLgorICAgICAgICBXaGVuIHRoZSBpcyBzdXBwb3J0ZWQsIGFkZCB0aGUKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX01NQVA8L2NvbnN0YW50PiBmbGFnIGhlcmUuIFdoZW4gdGhlCisgICAgICAgIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBpbnRlcmxlYXZlZCBvciB0aGUgbm9uLWludGVybGVhdmVkCisgICAgICAgIGZvcm1hdHMsIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IG9yCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IGZsYWcgbXVzdAorICAgICAgICBiZSBzZXQsIHJlc3BlY3RpdmVseS4gSWYgYm90aCBhcmUgc3VwcG9ydGVkLCB5b3UgY2FuIHNldCBib3RoLAorICAgICAgICB0b28uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5CTE9DS19UUkFOU0ZFUjwvY29uc3RhbnQ+IGFyZSBzcGVjaWZpZWQgZm9yIHRoZSBPU1MgbW1hcAorICAgICAgICBtb2RlLiBVc3VhbGx5IGJvdGggYXJlIHNldC4gT2YgY291cnNlLAorICAgICAgICA8Y29uc3RhbnQ+TU1BUF9WQUxJRDwvY29uc3RhbnQ+IGlzIHNldCBvbmx5IGlmIHRoZSBtbWFwIGlzCisgICAgICAgIHJlYWxseSBzdXBwb3J0ZWQuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIG90aGVyIHBvc3NpYmxlIGZsYWdzIGFyZQorICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUEFVU0U8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+LiBUaGUKKyAgICAgICAgPGNvbnN0YW50PlBBVVNFPC9jb25zdGFudD4gYml0IG1lYW5zIHRoYXQgdGhlIHBjbSBzdXBwb3J0cyB0aGUKKyAgICAgICAgPHF1b3RlPnBhdXNlPC9xdW90ZT4gb3BlcmF0aW9uLCB3aGlsZSB0aGUKKyAgICAgICAgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+IGJpdCBtZWFucyB0aGF0IHRoZSBwY20gc3VwcG9ydHMKKyAgICAgICAgdGhlIGZ1bGwgPHF1b3RlPnN1c3BlbmQvcmVzdW1lPC9xdW90ZT4gb3BlcmF0aW9uLgorCUlmIHRoZSA8Y29uc3RhbnQ+UEFVU0U8L2NvbnN0YW50PiBmbGFnIGlzIHNldCwKKwl0aGUgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBiZWxvdworICAgICAgICBtdXN0IGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyAocGF1c2UgcHVzaC9yZWxlYXNlKSBjb21tYW5kcy4KKwlUaGUgc3VzcGVuZC9yZXN1bWUgdHJpZ2dlciBjb21tYW5kcyBjYW4gYmUgZGVmaW5lZCBldmVuIHdpdGhvdXQKKwl0aGUgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+IGZsYWcuICBTZWUgPGxpbmsKKwlsaW5rZW5kPSJwb3dlci1tYW5hZ2VtZW50Ij48Y2l0ZXRpdGxlPgorCVBvd2VyIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+IHNlY3Rpb24gZm9yIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbXMgY2FuIGJlIHN5bmNocm9uaXplZCAodHlwaWNhbGx5LAorCXN5bmNocm9uaXplZCBzdGFydC9zdG9wIG9mIGEgcGxheWJhY2sgYW5kIGEgY2FwdHVyZSBzdHJlYW1zKSwKKwl5b3UgY2FuIGdpdmUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQ8L2NvbnN0YW50PiwKKwl0b28uICBJbiB0aGlzIGNhc2UsIHlvdSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsaW5rZWQtbGlzdCBvZgorCVBDTSBzdWJzdHJlYW1zIGluIHRoZSB0cmlnZ2VyIGNhbGxiYWNrLiAgVGhpcyB3aWxsIGJlCisJZGVzY3JpYmVkIGluIHRoZSBsYXRlciBzZWN0aW9uLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8c3RydWN0ZmllbGQ+Zm9ybWF0czwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBiaXQtZmxhZ3MKKyAgICAgICAgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgKDxjb25zdGFudD5TTkRSVl9QQ01fRk1UQklUX1hYWDwvY29uc3RhbnQ+KS4KKyAgICAgICAgSWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUgZm9ybWF0LCBnaXZlIGFsbCBvcidlZAorICAgICAgICBiaXRzLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBzaWduZWQgMTZiaXQgbGl0dGxlLWVuZGlhbgorICAgICAgICBmb3JtYXQgaXMgc3BlY2lmaWVkLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBiaXQtZmxhZ3Mgb2YKKyAgICAgICAgc3VwcG9ydGVkIHJhdGVzICg8Y29uc3RhbnQ+U05EUlZfUENNX1JBVEVfWFhYPC9jb25zdGFudD4pLgorICAgICAgICBXaGVuIHRoZSBjaGlwIHN1cHBvcnRzIGNvbnRpbnVvdXMgcmF0ZXMsIHBhc3MKKyAgICAgICAgPGNvbnN0YW50PkNPTlRJTlVPVVM8L2NvbnN0YW50PiBiaXQgYWRkaXRpb25hbGx5LgorICAgICAgICBUaGUgcHJlLWRlZmluZWQgcmF0ZSBiaXRzIGFyZSBwcm92aWRlZCBvbmx5IGZvciB0eXBpY2FsCisJcmF0ZXMuIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCByYXRlcywgeW91IG5lZWQgdG8gYWRkCisgICAgICAgIHRoZSA8Y29uc3RhbnQ+S05PVDwvY29uc3RhbnQ+IGJpdCBhbmQgc2V0IHVwIHRoZSBoYXJkd2FyZQorICAgICAgICBjb25zdHJhaW50IG1hbnVhbGx5IChleHBsYWluZWQgbGF0ZXIpLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwk8c3RydWN0ZmllbGQ+cmF0ZV9taW48L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cmF0ZV9tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1pbmltdW0gYW5kCisJbWF4aW11bSBzYW1wbGUgcmF0ZS4gIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgc29tZWhvdyB0bworCTxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGJpdHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWF4PC9zdHJ1Y3RmaWVsZD4gCisJZGVmaW5lLCBhcyB5b3UgbWlnaHQgYWxyZWFkeSBleHBlY3RlZCwgdGhlIG1pbmltdW0gYW5kIG1heGltdW0KKwludW1iZXIgb2YgY2hhbm5lbHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmVzIHRoZQorCW1heGltdW0gYnVmZmVyIHNpemUgaW4gYnl0ZXMuICBUaGVyZSBpcyBubworCTxzdHJ1Y3RmaWVsZD5idWZmZXJfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIHNpbmNlCisJaXQgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbWluaW11bSBwZXJpb2Qgc2l6ZSBhbmQgdGhlCisJbWluaW11bSBudW1iZXIgb2YgcGVyaW9kcy4KKwlNZWFud2hpbGUsIDxzdHJ1Y3RmaWVsZD5wZXJpb2RfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJZGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgb2YgdGhlIHBlcmlvZCBpbiBieXRlcy4KKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19tYXg8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19taW48L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1heGltdW0gYW5kCisJbWluaW11bSBudW1iZXIgb2YgcGVyaW9kcyBpbiB0aGUgYnVmZmVyLgorICAgICAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgPHF1b3RlPnBlcmlvZDwvcXVvdGU+IGlzIGEgdGVybSB0aGF0IGNvcnJlc3BvbmRzIHRvCisJYSBmcmFnbWVudCBpbiB0aGUgT1NTIHdvcmxkLiBUaGUgcGVyaW9kIGRlZmluZXMgdGhlIHNpemUgYXQKKwl3aGljaCBhIFBDTSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiBUaGlzIHNpemUgc3Ryb25nbHkKKwlkZXBlbmRzIG9uIHRoZSBoYXJkd2FyZS4gCisJR2VuZXJhbGx5LCB0aGUgc21hbGxlciBwZXJpb2Qgc2l6ZSB3aWxsIGdpdmUgeW91IG1vcmUKKwlpbnRlcnJ1cHRzLCB0aGF0IGlzLCBtb3JlIGNvbnRyb2xzLiAKKwlJbiB0aGUgY2FzZSBvZiBjYXB0dXJlLCB0aGlzIHNpemUgZGVmaW5lcyB0aGUgaW5wdXQgbGF0ZW5jeS4KKwlPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHdob2xlIGJ1ZmZlciBzaXplIGRlZmluZXMgdGhlCisJb3V0cHV0IGxhdGVuY3kgZm9yIHRoZSBwbGF5YmFjayBkaXJlY3Rpb24uCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJVGhlcmUgaXMgYWxzbyBhIGZpZWxkIDxzdHJ1Y3RmaWVsZD5maWZvX3NpemU8L3N0cnVjdGZpZWxkPi4KKwlUaGlzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgaGFyZHdhcmUgRklGTywgYnV0IGN1cnJlbnRseSBpdAorCWlzIG5laXRoZXIgdXNlZCBpbiB0aGUgZHJpdmVyIG5vciBpbiB0aGUgYWxzYS1saWIuICBTbywgeW91CisJY2FuIGlnbm9yZSB0aGlzIGZpZWxkLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWNvbmZpZyI+CisJPHRpdGxlPlBDTSBDb25maWd1cmF0aW9uczwvdGl0bGU+CisJPHBhcmE+CisJT2ssIGxldCdzIGdvIGJhY2sgYWdhaW4gdG8gdGhlIFBDTSBydW50aW1lIHJlY29yZHMuCisJVGhlIG1vc3QgZnJlcXVlbnRseSByZWZlcnJlZCByZWNvcmRzIGluIHRoZSBydW50aW1lIGluc3RhbmNlIGFyZQorCXRoZSBQQ00gY29uZmlndXJhdGlvbnMuCisJVGhlIFBDTSBjb25maWd1cmF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBydW50aW1lIGluc3RhbmNlCisJYWZ0ZXIgdGhlIGFwcGxpY2F0aW9uIHNlbmRzIDx0eXBlPmh3X3BhcmFtczwvdHlwZT4gZGF0YSB2aWEKKwlhbHNhLWxpYi4gIFRoZXJlIGFyZSBtYW55IGZpZWxkcyBjb3BpZWQgZnJvbSBod19wYXJhbXMgYW5kCisJc3dfcGFyYW1zIHN0cnVjdHMuICBGb3IgZXhhbXBsZSwKKwk8c3RydWN0ZmllbGQ+Zm9ybWF0PC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIGZvcm1hdCB0eXBlCisJY2hvc2VuIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGVudW0gdmFsdWUKKwk8Y29uc3RhbnQ+U05EUlZfUENNX0ZPUk1BVF9YWFg8L2NvbnN0YW50Pi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlPbmUgdGhpbmcgdG8gYmUgbm90ZWQgaXMgdGhhdCB0aGUgY29uZmlndXJlZCBidWZmZXIgYW5kIHBlcmlvZAorCXNpemVzIGFyZSBzdG9yZWQgaW4gPHF1b3RlPmZyYW1lczwvcXVvdGU+IGluIHRoZSBydW50aW1lLgorICAgICAgICBJbiB0aGUgQUxTQSB3b3JsZCwgMSBmcmFtZSA9IGNoYW5uZWxzICogc2FtcGxlcy1zaXplLgorCUZvciBjb252ZXJzaW9uIGJldHdlZW4gZnJhbWVzIGFuZCBieXRlcywgeW91IGNhbiB1c2UgdGhlCisJPGZ1bmN0aW9uPmZyYW1lc190b19ieXRlcygpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgICAgPGZ1bmN0aW9uPmJ5dGVzX3RvX2ZyYW1lcygpPC9mdW5jdGlvbj4gaGVscGVyIGZ1bmN0aW9ucy4gCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBwZXJpb2RfYnl0ZXMgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlBbHNvLCBtYW55IHNvZnR3YXJlIHBhcmFtZXRlcnMgKHN3X3BhcmFtcykgYXJlCisJc3RvcmVkIGluIGZyYW1lcywgdG9vLiAgUGxlYXNlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBmaWVsZC4KKwk8dHlwZT5zbmRfcGNtX3VmcmFtZXNfdDwvdHlwZT4gaXMgZm9yIHRoZSBmcmFtZXMgYXMgdW5zaWduZWQKKwlpbnRlZ2VyIHdoaWxlIDx0eXBlPnNuZF9wY21fc2ZyYW1lc190PC90eXBlPiBpcyBmb3IgdGhlIGZyYW1lcworCWFzIHNpZ25lZCBpbnRlZ2VyLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWRtYSI+CisJPHRpdGxlPkRNQSBCdWZmZXIgSW5mb3JtYXRpb248L3RpdGxlPgorCTxwYXJhPgorCVRoZSBETUEgYnVmZmVyIGlzIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBmb3VyIGZpZWxkcywKKwk8c3RydWN0ZmllbGQ+ZG1hX2FyZWE8L3N0cnVjdGZpZWxkPiwKKwk8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPiwKKwk8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPmRtYV9wcml2YXRlPC9zdHJ1Y3RmaWVsZD4uCisJVGhlIDxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+IGhvbGRzIHRoZSBidWZmZXIKKwlwb2ludGVyICh0aGUgbG9naWNhbCBhZGRyZXNzKS4gIFlvdSBjYW4gY2FsbAorCTxmdW5jdGlvbj5tZW1jcHk8L2Z1bmN0aW9uPiBmcm9tL3RvIAorCXRoaXMgcG9pbnRlci4gIE1lYW53aGlsZSwgPHN0cnVjdGZpZWxkPmRtYV9hZGRyPC9zdHJ1Y3RmaWVsZD4KKwlob2xkcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLiAgVGhpcyBmaWVsZCBpcworCXNwZWNpZmllZCBvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBhIGxpbmVhciBidWZmZXIuCisJPHN0cnVjdGZpZWxkPmRtYV9ieXRlczwvc3RydWN0ZmllbGQ+IGhvbGRzIHRoZSBzaXplIG9mIGJ1ZmZlcgorCWluIGJ5dGVzLiAgPHN0cnVjdGZpZWxkPmRtYV9wcml2YXRlPC9zdHJ1Y3RmaWVsZD4gaXMgdXNlZCBmb3IKKwl0aGUgQUxTQSBETUEgYWxsb2NhdG9yLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUlmIHlvdSB1c2UgYSBzdGFuZGFyZCBBTFNBIGZ1bmN0aW9uLAorCTxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+LCBmb3IKKwlhbGxvY2F0aW5nIHRoZSBidWZmZXIsIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZSBBTFNBIG1pZGRsZQorCWxheWVyLCBhbmQgeW91IHNob3VsZCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gY2hhbmdlIHRoZW0gYnkKKwl5b3Vyc2VsZi4gIFlvdSBjYW4gcmVhZCB0aGVtIGJ1dCBub3Qgd3JpdGUgdGhlbS4KKwlPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHdhbnQgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciBieQorCXlvdXJzZWxmLCB5b3UnbGwgbmVlZCB0byBtYW5hZ2UgaXQgaW4gaHdfcGFyYW1zIGNhbGxiYWNrLgorCUF0IGxlYXN0LCA8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gaXMgbWFuZGF0b3J5LgorCTxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+IGlzIG5lY2Vzc2FyeSB3aGVuIHRoZQorCWJ1ZmZlciBpcyBtbWFwcGVkLiAgSWYgeW91ciBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IG1tYXAsIHRoaXMKKwlmaWVsZCBpcyBub3QgbmVjZXNzYXJ5LiAgPHN0cnVjdGZpZWxkPmRtYV9hZGRyPC9zdHJ1Y3RmaWVsZD4KKwlpcyBhbHNvIG9wdGlvbmFsLiAgWW91IGNhbiB1c2UKKwk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBhcyB5b3UgbGlrZSwgdG9vLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLXN0YXR1cyI+CisJPHRpdGxlPlJ1bm5pbmcgU3RhdHVzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGUgcnVubmluZyBzdGF0dXMgY2FuIGJlIHJlZmVycmVkIHZpYSA8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7c3RhdHVzPC9jb25zdGFudD4uCisJVGhpcyBpcyB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21fbW1hcF9zdGF0dXM8L3N0cnVjdG5hbWU+CisJcmVjb3JkLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZ2V0IHRoZSBjdXJyZW50IERNQSBoYXJkd2FyZQorCXBvaW50ZXIgdmlhIDxjb25zdGFudD5ydW50aW1lLSZndDtzdGF0dXMtJmd0O2h3X3B0cjwvY29uc3RhbnQ+LgorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoZSBETUEgYXBwbGljYXRpb24gcG9pbnRlciBjYW4gYmUgcmVmZXJyZWQgdmlhCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2NvbnRyb2w8L2NvbnN0YW50Piwgd2hpY2ggcG9pbnRzIHRvIHRoZQorCXN0cnVjdCA8c3RydWN0bmFtZT5zbmRfcGNtX21tYXBfY29udHJvbDwvc3RydWN0bmFtZT4gcmVjb3JkLgorCUhvd2V2ZXIsIGFjY2Vzc2luZyBkaXJlY3RseSB0byB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZC4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj4KKwk8dGl0bGU+UHJpdmF0ZSBEYXRhPC90aXRsZT4gCisJPHBhcmE+CisJWW91IGNhbiBhbGxvY2F0ZSBhIHJlY29yZCBmb3IgdGhlIHN1YnN0cmVhbSBhbmQgc3RvcmUgaXQgaW4KKwk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uICBVc3VhbGx5LCB0aGlzCisJaXMgZG9uZSBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgorCURvbid0IG1peCB0aGlzIHdpdGggPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uCisJVGhlIDxjb25zdGFudD5wY20tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+IHVzdWFsbHkgcG9pbnRzIHRvIHRoZQorCWNoaXAgaW5zdGFuY2UgYXNzaWduZWQgc3RhdGljYWxseSBhdCB0aGUgY3JlYXRpb24gb2YgUENNLCB3aGlsZSB0aGUgCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+IHBvaW50cyB0byBhIGR5bmFtaWMKKwlkYXRhIHN0cnVjdHVyZSBjcmVhdGVkIGF0IHRoZSBQQ00gb3BlbiBjYWxsYmFjay4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXlfcGNtX2RhdGEgKmRhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworICAgICAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBhbGxvY2F0ZWQgb2JqZWN0IG11c3QgYmUgcmVsZWFzZWQgaW4KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj48Y2l0ZXRpdGxlPgorCXRoZSBjbG9zZSBjYWxsYmFjazwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWludHIiPgorCTx0aXRsZT5JbnRlcnJ1cHQgQ2FsbGJhY2tzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGUgZmllbGQgPHN0cnVjdGZpZWxkPnRyYW5zZmVyX2Fja19iZWdpbjwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD50cmFuc2Zlcl9hY2tfZW5kPC9zdHJ1Y3RmaWVsZD4gYXJlIGNhbGxlZCBhdAorCXRoZSBiZWdpbm5pbmcgYW5kIGF0IHRoZSBlbmQgb2YKKwk8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIHJlc3BlY3RpdmVseS4gCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycyI+CisgICAgICA8dGl0bGU+T3BlcmF0b3JzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBPSywgbm93IGxldCBtZSBnaXZlIGRldGFpbHMgYWJvdXQgZWFjaCBwY20gY2FsbGJhY2sKKyAgICAgICg8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPikuIEluIGdlbmVyYWwsIGV2ZXJ5IGNhbGxiYWNrIG11c3QKKyAgICAgIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyCisgICAgICBzdWNoIGFzIDxjb25zdGFudD4tRUlOVkFMPC9jb25zdGFudD4uIFRvIGNob29zZSBhbiBhcHByb3ByaWF0ZQorICAgICAgZXJyb3IgbnVtYmVyLCBpdCBpcyBhZHZpc2VkIHRvIGNoZWNrIHdoYXQgdmFsdWUgb3RoZXIgcGFydHMgb2YKKyAgICAgIHRoZSBrZXJuZWwgcmV0dXJuIHdoZW4gdGhlIHNhbWUga2luZCBvZiByZXF1ZXN0IGZhaWxzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRha2VzIGF0IGxlYXN0IHRoZSBhcmd1bWVudCB3aXRoCisgICAgICAgIDxzdHJ1Y3RuYW1lPnNuZF9wY21fc3Vic3RyZWFtPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLiBUbyByZXRyaWV2ZQorICAgICAgICB0aGUgY2hpcCByZWNvcmQgZnJvbSB0aGUgZ2l2ZW4gc3Vic3RyZWFtIGluc3RhbmNlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgZm9sbG93aW5nIG1hY3JvLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpbnQgeHh4KCkgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCVRoZSBtYWNybyByZWFkcyA8Y29uc3RhbnQ+c3Vic3RyZWFtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50PiwKKwl3aGljaCBpcyBhIGNvcHkgb2YgPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uCisJWW91IGNhbiBvdmVycmlkZSB0aGUgZm9ybWVyIGlmIHlvdSBuZWVkIHRvIGFzc2lnbiBkaWZmZXJlbnQgZGF0YQorCXJlY29yZHMgcGVyIFBDTSBzdWJzdHJlYW0uICBGb3IgZXhhbXBsZSwgdGhlIGNtaTgzMzAgZHJpdmVyIGFzc2lnbnMKKwlkaWZmZXJlbnQgcHJpdmF0ZV9kYXRhIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLAorCWJlY2F1c2UgaXQgdXNlcyB0d28gZGlmZmVyZW50IGNvZGVjcyAoU0ItIGFuZCBBRC1jb21wYXRpYmxlKSBmb3IKKwlkaWZmZXJlbnQgZGlyZWN0aW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+b3BlbiBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBjbSBzdWJzdHJlYW0gaXMgb3BlbmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXQgbGVhc3QsIGhlcmUgeW91IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcnVudGltZS0mZ3Q7aHcKKyAgICAgICAgICByZWNvcmQuIFR5cGljYWxseSwgdGhpcyBpcyBkb25lIGJ5IGxpa2UgdGhpczogCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPnNuZF9teWNoaXBfcGxheWJhY2tfaHc8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICAgICAgcHJlLWRlZmluZWQgaGFyZHdhcmUgZGVzY3JpcHRpb24uCisJPC9wYXJhPgorCisJPHBhcmE+CisJWW91IGNhbiBhbGxvY2F0ZSBhIHByaXZhdGUgZGF0YSBpbiB0aGlzIGNhbGxiYWNrLCBhcyBkZXNjcmliZWQKKwlpbiA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtcHJpdmF0ZSI+PGNpdGV0aXRsZT4KKwlQcml2YXRlIERhdGE8L2NpdGV0aXRsZT48L2xpbms+IHNlY3Rpb24uCisJPC9wYXJhPgorCisJPHBhcmE+CisJSWYgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbmVlZHMgbW9yZSBjb25zdHJhaW50cywgc2V0IHRoZQorCWhhcmR3YXJlIGNvbnN0cmFpbnRzIGhlcmUsIHRvby4KKwlTZWUgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1jb25zdHJhaW50cyI+PGNpdGV0aXRsZT4KKwlDb25zdHJhaW50czwvY2l0ZXRpdGxlPjwvbGluaz4gZm9yIG1vcmUgZGV0YWlscy4KKwk8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1jbG9zZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5jbG9zZSBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIE9idmlvdXNseSwgdGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBjbSBzdWJzdHJlYW0gaXMgY2xvc2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW55IHByaXZhdGUgaW5zdGFuY2UgZm9yIGEgcGNtIHN1YnN0cmVhbSBhbGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgb3BlbiBjYWxsYmFjayB3aWxsIGJlIHJlbGVhc2VkIGhlcmUuIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAga2ZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1pb2N0bC1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5pb2N0bCBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgdXNlZCBmb3IgYW55IHNwZWNpYWwgY2FsbCB0byBwY20gaW9jdGxzLiBCdXQKKyAgICAgICAgdXN1YWxseSB5b3UgY2FuIHBhc3MgYSBnZW5lcmljIGlvY3RsIGNhbGxiYWNrLCAKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2lvY3RsPC9mdW5jdGlvbj4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWh3LXBhcmFtcy1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19wYXJhbXMgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgaGFyZHdhcmUgcGFyYW1ldGVyCisgICAgICAgICg8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4pIGlzIHNldAorICAgICAgICB1cCBieSB0aGUgYXBwbGljYXRpb24sIAorICAgICAgICB0aGF0IGlzLCBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBzaXplLCB0aGUgcGVyaW9kIHNpemUsIHRoZQorICAgICAgICBmb3JtYXQsIGV0Yy4gYXJlIGRlZmluZWQgZm9yIHRoZSBwY20gc3Vic3RyZWFtLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1hbnkgaGFyZHdhcmUgc2V0dXBzIHNob3VsZCBiZSBkb25lIGluIHRoaXMgY2FsbGJhY2ssCisgICAgICAgIGluY2x1ZGluZyB0aGUgYWxsb2NhdGlvbiBvZiBidWZmZXJzLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFBhcmFtZXRlcnMgdG8gYmUgaW5pdGlhbGl6ZWQgYXJlIHJldHJpZXZlZCBieQorICAgICAgICAgIDxmdW5jdGlvbj5wYXJhbXNfeHh4KCk8L2Z1bmN0aW9uPiBtYWNyb3MuIFRvIGFsbG9jYXRlCisgICAgICAgICAgYnVmZmVyLCB5b3UgY2FuIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24sIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgYXZhaWxhYmxlCisJICBvbmx5IHdoZW4gdGhlIERNQSBidWZmZXJzIGhhdmUgYmVlbiBwcmUtYWxsb2NhdGVkLgorCSAgU2VlIHRoZSBzZWN0aW9uIDxsaW5rCisJICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeS1idWZmZXItdHlwZXMiPjxjaXRldGl0bGU+CisJICBCdWZmZXIgVHlwZXM8L2NpdGV0aXRsZT48L2xpbms+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBhbmQgPHN0cnVjdGZpZWxkPnByZXBhcmU8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MKKyAgICAgICAgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgT1NTIGVtdWxhdGlvbiBtYXkKKyAgICAgICAgY2FsbCB0aGVzZSBjYWxsYmFja3MgYXQgZWFjaCBjaGFuZ2UgdmlhIGl0cyBpb2N0bC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBhbGxvY2F0ZSB0aGUgc2FtZSBidWZmZXJzCisgICAgICAgIG1hbnkgdGltZXMsIHdoaWNoIHdpbGwgbGVhZCB0byBtZW1vcnkgbGVha3MhICBDYWxsaW5nIHRoZQorICAgICAgICBoZWxwZXIgZnVuY3Rpb24gYWJvdmUgbWFueSB0aW1lcyBpcyBPSy4gSXQgd2lsbCByZWxlYXNlIHRoZQorICAgICAgICBwcmV2aW91cyBidWZmZXIgYXV0b21hdGljYWxseSB3aGVuIGl0IHdhcyBhbHJlYWR5IGFsbG9jYXRlZC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbm90aGVyIG5vdGUgaXMgdGhhdCB0aGlzIGNhbGxiYWNrIGlzIG5vbi1hdG9taWMKKyAgICAgICAgKHNjaGVkdWxhYmxlKS4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD50cmlnZ2VyPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgCisgICAgICAgIGlzIGF0b21pYyAobm9uLXNjaGVkdWxhYmxlKS4gVGhhdCBpcywgbXV0ZXhlcyBvciBhbnkKKyAgICAgICAgc2NoZWR1bGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKwlQbGVhc2Ugc2VlIHRoZSBzdWJzZWN0aW9uCisJPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1hdG9taWNpdHkiPjxjaXRldGl0bGU+CisJQXRvbWljaXR5PC9jaXRldGl0bGU+PC9saW5rPiBmb3IgZGV0YWlscy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctZnJlZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19mcmVlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB0byByZWxlYXNlIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHZpYQorICAgICAgICAgIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPi4gRm9yIGV4YW1wbGUsIHJlbGVhc2luZyB0aGUKKyAgICAgICAgICBidWZmZXIgdmlhIAorICAgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+IGlzIGRvbmUgYnkKKyAgICAgICAgICBjYWxsaW5nIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQgYmVmb3JlIHRoZSBjbG9zZSBjYWxsYmFjayBpcyBjYWxsZWQuCisgICAgICAgICAgQWxzbywgdGhlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRvby4KKyAgICAgICAgICBLZWVwIHRyYWNrIHdoZXRoZXIgdGhlIHJlc291cmNlIHdhcyBhbHJlYWR5IHJlbGVhc2VkLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcHJlcGFyZS1jYWxsYmFjayI+CisgICAgICAgPHRpdGxlPnByZXBhcmUgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHBjbSBpcworICAgICAgICA8cXVvdGU+cHJlcGFyZWQ8L3F1b3RlPi4gWW91IGNhbiBzZXQgdGhlIGZvcm1hdCB0eXBlLCBzYW1wbGUKKyAgICAgICAgcmF0ZSwgZXRjLiBoZXJlLiBUaGUgZGlmZmVyZW5jZSBmcm9tCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBpcyB0aGF0IHRoZSAKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByZXBhcmU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBlYWNoCisgICAgICAgIHRpbWUgCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3ByZXBhcmUoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgaS5lLiB3aGVuCisgICAgICAgIHJlY292ZXJpbmcgYWZ0ZXIgdW5kZXJydW5zLCBldGMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgbm93IG5vbi1hdG9taWMuCisJWW91IGNhbiB1c2Ugc2NoZWR1bGUtcmVsYXRlZCBmdW5jdGlvbnMgc2FmZWx5IGluIHRoaXMgY2FsbGJhY2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIGNhbGxiYWNrcywgeW91IGNhbiByZWZlciB0byB0aGUKKyAgICAgICAgdmFsdWVzIHZpYSB0aGUgcnVudGltZSByZWNvcmQsCisgICAgICAgIHN1YnN0cmVhbS0mZ3Q7cnVudGltZS4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGdldCB0aGUgY3VycmVudAorICAgICAgICByYXRlLCBmb3JtYXQgb3IgY2hhbm5lbHMsIGFjY2VzcyB0bworICAgICAgICBydW50aW1lLSZndDtyYXRlLAorICAgICAgICBydW50aW1lLSZndDtmb3JtYXQgb3IKKyAgICAgICAgcnVudGltZS0mZ3Q7Y2hhbm5lbHMsIHJlc3BlY3RpdmVseS4gCisgICAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGlzIHNldCB0bworCXJ1bnRpbWUtJmd0O2RtYV9hcmVhLiAgVGhlIGJ1ZmZlciBhbmQgcGVyaW9kIHNpemVzIGFyZQorCWluIHJ1bnRpbWUtJmd0O2J1ZmZlcl9zaXplIGFuZCBydW50aW1lLSZndDtwZXJpb2Rfc2l6ZSwKKwlyZXNwZWN0aXZlbHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCZSBjYXJlZnVsIHRoYXQgdGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBtYW55IHRpbWVzIGF0CisgICAgICAgIGVhY2ggc2V0dXAsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXRyaWdnZXItY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+dHJpZ2dlciBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcGNtIGlzIHN0YXJ0ZWQsIHN0b3BwZWQgb3IgcGF1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2hpY2ggYWN0aW9uIGlzIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50LAorICAgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fVFJJR0dFUl9YWFg8L2NvbnN0YW50PiBpbgorICAgICAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uIEF0IGxlYXN0LAorICAgICAgICAgIHRoZSA8Y29uc3RhbnQ+U1RBUlQ8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlNUT1A8L2NvbnN0YW50PgorICAgICAgICAgIGNvbW1hbmRzIG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhbGxiYWNrLiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3dpdGNoIChjbWQpIHsKKyAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKyAgICAgICAgICAvKiBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUgKi8KKyAgICAgICAgICBicmVhazsKKyAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lICovCisgICAgICAgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgcGF1c2Ugb3BlcmF0aW9uIChnaXZlbiBpbiB0aGUgaW5mbworICAgICAgICBmaWVsZCBvZiB0aGUgaGFyZHdhcmUgdGFibGUpLCB0aGUgPGNvbnN0YW50PlBBVVNFX1BVU0U8L2NvbnN0YW50PgorICAgICAgICBhbmQgPGNvbnN0YW50PlBBVVNFX1JFTEVBU0U8L2NvbnN0YW50PiBjb21tYW5kcyBtdXN0IGJlCisgICAgICAgIGhhbmRsZWQgaGVyZSwgdG9vLiBUaGUgZm9ybWVyIGlzIHRoZSBjb21tYW5kIHRvIHBhdXNlIHRoZSBwY20sCisgICAgICAgIGFuZCB0aGUgbGF0dGVyIHRvIHJlc3RhcnQgdGhlIHBjbSBhZ2Fpbi4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGVuIHRoZSBwY20gc3VwcG9ydHMgdGhlIHN1c3BlbmQvcmVzdW1lIG9wZXJhdGlvbiwKKwlyZWdhcmRsZXNzIG9mIGZ1bGwgb3IgcGFydGlhbCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LAorICAgICAgICB0aGUgPGNvbnN0YW50PlNVU1BFTkQ8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+CisgICAgICAgIGNvbW1hbmRzIG11c3QgYmUgaGFuZGxlZCwgdG9vLgorICAgICAgICBUaGVzZSBjb21tYW5kcyBhcmUgaXNzdWVkIHdoZW4gdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdHVzIGlzCisgICAgICAgIGNoYW5nZWQuICBPYnZpb3VzbHksIHRoZSA8Y29uc3RhbnQ+U1VTUEVORDwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gY29tbWFuZHMKKyAgICAgICAgc3VzcGVuZCBhbmQgcmVzdW1lIHRoZSBwY20gc3Vic3RyZWFtLCBhbmQgdXN1YWxseSwgdGhleQorICAgICAgICBhcmUgaWRlbnRpY2FsIHRvIHRoZSA8Y29uc3RhbnQ+U1RPUDwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+U1RBUlQ8L2NvbnN0YW50PiBjb21tYW5kcywgcmVzcGVjdGl2ZWx5LgorCSAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSJwb3dlci1tYW5hZ2VtZW50Ij48Y2l0ZXRpdGxlPgorCVBvd2VyIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+IHNlY3Rpb24gZm9yIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoaXMgY2FsbGJhY2sgaXMgYXRvbWljLiAgWW91IGNhbm5vdCBjYWxsCisJICBmdW5jdGlvbnMgd2hpY2ggbWF5IHNsZWVwLgorCSAgVGhlIHRyaWdnZXIgY2FsbGJhY2sgc2hvdWxkIGJlIGFzIG1pbmltYWwgYXMgcG9zc2libGUsCisJICBqdXN0IHJlYWxseSB0cmlnZ2VyaW5nIHRoZSBETUEuICBUaGUgb3RoZXIgc3R1ZmYgc2hvdWxkIGJlCisJICBpbml0aWFsaXplZCBod19wYXJhbXMgYW5kIHByZXBhcmUgY2FsbGJhY2tzIHByb3Blcmx5CisJICBiZWZvcmVoYW5kLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wb2ludGVyLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPnBvaW50ZXIgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfeHh4X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBQQ00gbWlkZGxlIGxheWVyIGlucXVpcmVzCisgICAgICAgIHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvc2l0aW9uIG9uIHRoZSBidWZmZXIuIFRoZSBwb3NpdGlvbiBtdXN0CisgICAgICAgIGJlIHJldHVybmVkIGluIGZyYW1lcywKKyAgICAgICAgcmFuZ2luZyBmcm9tIDAgdG8gYnVmZmVyX3NpemUgLSAxLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgdXN1YWxseSBmcm9tIHRoZSBidWZmZXItdXBkYXRlIHJvdXRpbmUgaW4gdGhlCisgICAgICAgIHBjbSBtaWRkbGUgbGF5ZXIsIHdoaWNoIGlzIGludm9rZWQgd2hlbgorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gaXMgY2FsbGVkIGluIHRoZQorICAgICAgICBpbnRlcnJ1cHQgcm91dGluZS4gVGhlbiB0aGUgcGNtIG1pZGRsZSBsYXllciB1cGRhdGVzIHRoZQorICAgICAgICBwb3NpdGlvbiBhbmQgY2FsY3VsYXRlcyB0aGUgYXZhaWxhYmxlIHNwYWNlLCBhbmQgd2FrZXMgdXAgdGhlCisgICAgICAgIHNsZWVwaW5nIHBvbGwgdGhyZWFkcywgZXRjLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBhdG9taWMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWNvcHktc2lsZW5jZSI+CisgICAgICAgIDx0aXRsZT5jb3B5IGFuZCBzaWxlbmNlIGNhbGxiYWNrczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm90IG1hbmRhdG9yeSwgYW5kIGNhbiBiZSBvbWl0dGVkIGluCisgICAgICAgIG1vc3QgY2FzZXMuIFRoZXNlIGNhbGxiYWNrcyBhcmUgdXNlZCB3aGVuIHRoZSBoYXJkd2FyZSBidWZmZXIKKyAgICAgICAgY2Fubm90IGJlIGluIHRoZSBub3JtYWwgbWVtb3J5IHNwYWNlLiBTb21lIGNoaXBzIGhhdmUgdGhlaXIKKyAgICAgICAgb3duIGJ1ZmZlciBvbiB0aGUgaGFyZHdhcmUgd2hpY2ggaXMgbm90IG1hcHBhYmxlLiBJbiBzdWNoIGEKKyAgICAgICAgY2FzZSwgeW91IGhhdmUgdG8gdHJhbnNmZXIgdGhlIGRhdGEgbWFudWFsbHkgZnJvbSB0aGUgbWVtb3J5CisgICAgICAgIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgYnVmZmVyLiBPciwgaWYgdGhlIGJ1ZmZlciBpcworICAgICAgICBub24tY29udGlndW91cyBvbiBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIG1lbW9yeSBzcGFjZXMsCisgICAgICAgIHRoZXNlIGNhbGxiYWNrcyBtdXN0IGJlIGRlZmluZWQsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB0aGVzZSB0d28gY2FsbGJhY2tzIGFyZSBkZWZpbmVkLCBjb3B5IGFuZCBzZXQtc2lsZW5jZQorICAgICAgICBvcGVyYXRpb25zIGFyZSBkb25lIGJ5IHRoZW0uIFRoZSBkZXRhaWxlZCB3aWxsIGJlIGRlc2NyaWJlZCBpbgorICAgICAgICB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluaworICAgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPi4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWFjayI+CisgICAgICAgIDx0aXRsZT5hY2sgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGFsc28gbm90IG1hbmRhdG9yeS4gVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQKKyAgICAgICAgd2hlbiB0aGUgYXBwbF9wdHIgaXMgdXBkYXRlZCBpbiByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbnMuCisgICAgICAgIFNvbWUgZHJpdmVycyBsaWtlIGVtdTEwazEtZnggYW5kIGNzNDZ4eCBuZWVkIHRvIHRyYWNrIHRoZQorCWN1cnJlbnQgYXBwbF9wdHIgZm9yIHRoZSBpbnRlcm5hbCBidWZmZXIsIGFuZCB0aGlzIGNhbGxiYWNrCisJaXMgdXNlZnVsIG9ubHkgZm9yIHN1Y2ggYSBwdXJwb3NlLgorCTwvcGFyYT4KKwk8cGFyYT4KKwkgIFRoaXMgY2FsbGJhY2sgaXMgYXRvbWljLgorCTwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBhZ2UtY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+cGFnZSBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCB0b28uIFRoaXMgY2FsbGJhY2sgaXMgdXNlZAorICAgICAgICBtYWlubHkgZm9yIG5vbi1jb250aWd1b3VzIGJ1ZmZlcnMuIFRoZSBtbWFwIGNhbGxzIHRoaXMKKyAgICAgICAgY2FsbGJhY2sgdG8gZ2V0IHRoZSBwYWdlIGFkZHJlc3MuIFNvbWUgZXhhbXBsZXMgd2lsbCBiZQorICAgICAgICBleHBsYWluZWQgaW4gdGhlIGxhdGVyIHNlY3Rpb24gPGxpbmsKKyAgICAgICAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnkiPjxjaXRldGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkKKyAgICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4sIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlciI+CisgICAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXI8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZXN0IG9mIHBjbSBzdHVmZiBpcyB0aGUgUENNIGludGVycnVwdCBoYW5kbGVyLiBUaGUKKyAgICAgIHJvbGUgb2YgUENNIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBzb3VuZCBkcml2ZXIgaXMgdG8gdXBkYXRlCisgICAgICB0aGUgYnVmZmVyIHBvc2l0aW9uIGFuZCB0byB0ZWxsIHRoZSBQQ00gbWlkZGxlIGxheWVyIHdoZW4gdGhlCisgICAgICBidWZmZXIgcG9zaXRpb24gZ29lcyBhY3Jvc3MgdGhlIHByZXNjcmliZWQgcGVyaW9kIHNpemUuIFRvCisgICAgICBpbmZvcm0gdGhpcywgY2FsbCB0aGUgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+CisgICAgICBmdW5jdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBzb3VuZCBjaGlwcyB0byBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0cy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItYm91bmRhcnkiPgorICAgICAgICA8dGl0bGU+SW50ZXJydXB0cyBhdCB0aGUgcGVyaW9kIChmcmFnbWVudCkgYm91bmRhcnk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGZyZXF1ZW50bHkgZm91bmQgdHlwZTogIHRoZSBoYXJkd2FyZQorICAgICAgICBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IGF0IGVhY2ggcGVyaW9kIGJvdW5kYXJ5LgorCUluIHRoaXMgY2FzZSwgeW91IGNhbiBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBhdCBlYWNoIAorICAgICAgICBpbnRlcnJ1cHQuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IHRha2VzIHRoZQorICAgICAgICBzdWJzdHJlYW0gcG9pbnRlciBhcyBpdHMgYXJndW1lbnQuIFRodXMsIHlvdSBuZWVkIHRvIGtlZXAgdGhlCisgICAgICAgIHN1YnN0cmVhbSBwb2ludGVyIGFjY2Vzc2libGUgZnJvbSB0aGUgY2hpcCBpbnN0YW5jZS4gRm9yCisgICAgICAgIGV4YW1wbGUsIGRlZmluZSBzdWJzdHJlYW0gZmllbGQgaW4gdGhlIGNoaXAgcmVjb3JkIHRvIGhvbGQgdGhlCisgICAgICAgIGN1cnJlbnQgcnVubmluZyBzdWJzdHJlYW0gcG9pbnRlciwgYW5kIHNldCB0aGUgcG9pbnRlciB2YWx1ZQorICAgICAgICBhdCBvcGVuIGNhbGxiYWNrIChhbmQgcmVzZXQgYXQgY2xvc2UgY2FsbGJhY2spLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBhY3F1aXJlIGEgc3BpbmxvY2sgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQgdGhlCisgICAgICAgIGxvY2sgaXMgdXNlZCBpbiBvdGhlciBwY20gY2FsbGJhY2tzLCB0b28sIHRoZW4geW91IGhhdmUgdG8KKyAgICAgICAgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZworICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIGJlY2F1c2UKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGNhbGxzIG90aGVyIHBjbQorICAgICAgICBjYWxsYmFja3MgaW5zaWRlLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlOgorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlciBDYXNlICMxPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX215Y2hpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGRldl9pZDsKKyAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBpZiAocGNtX2lycV9pbnZva2VkKGNoaXApKSB7CisgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIsIHVubG9jayBiZWZvcmUgaXQgKi8KKyAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+c3Vic3RyZWFtKTsKKyAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAgIH0KKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci10aW1lciI+CisgICAgICAgIDx0aXRsZT5IaWdoIGZyZXF1ZW5jeSB0aW1lciBpbnRlcnJ1cHRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisJVGhpcyBoYXBwZW5zZSB3aGVuIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMKKyAgICAgICAgYXQgdGhlIHBlcmlvZCBib3VuZGFyeSBidXQgaXNzdWVzIHRpbWVyIGludGVycnVwdHMgYXQgYSBmaXhlZAorICAgICAgICB0aW1lciByYXRlIChlLmcuIGVzMTk2OCBvciB5bWZwY2kgZHJpdmVycykuIAorICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IGhhcmR3YXJlCisgICAgICAgIHBvc2l0aW9uIGFuZCBhY2N1bXVsYXRlIHRoZSBwcm9jZXNzZWQgc2FtcGxlIGxlbmd0aCBhdCBlYWNoCisgICAgICAgIGludGVycnVwdC4gIFdoZW4gdGhlIGFjY3VtdWxhdGVkIHNpemUgZXhjZWVkcyB0aGUgcGVyaW9kCisgICAgICAgIHNpemUsIGNhbGwgCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBhbmQgcmVzZXQgdGhlCisgICAgICAgIGFjY3VtdWxhdG9yLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlIHRoZSBmb2xsb3dpbmcuCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyIENhc2UgIzI8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXljaGlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gZGV2X2lkOworICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGlmIChwY21faXJxX2ludm9rZWQoY2hpcCkpIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXN0X3B0ciwgc2l6ZTsKKyAgICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgY3VycmVudCBoYXJkd2FyZSBwb2ludGVyIChpbiBmcmFtZXMpICovCisgICAgICAgICAgICAgICAgICBsYXN0X3B0ciA9IGdldF9od19wdHIoY2hpcCk7CisgICAgICAgICAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIHByb2Nlc3NlZCBmcmFtZXMgc2luY2UgdGhlCisgICAgICAgICAgICAgICAgICAgKiBsYXN0IHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBpZiAobGFzdF9wdHIgPCBjaGlwLT5sYXN0X3B0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICsgbGFzdF9wdHIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2hpcC0+bGFzdF9wdHI7IAorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbGFzdF9wdHIgLSBjaGlwLT5sYXN0X3B0cjsKKyAgICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRoZSBsYXN0IHVwZGF0ZWQgcG9pbnQgKi8KKyAgICAgICAgICAgICAgICAgIGNoaXAtPmxhc3RfcHRyID0gbGFzdF9wdHI7CisgICAgICAgICAgICAgICAgICAvKiBhY2N1bXVsYXRlIHRoZSBzaXplICovCisgICAgICAgICAgICAgICAgICBjaGlwLT5zaXplICs9IHNpemU7CisgICAgICAgICAgICAgICAgICAvKiBvdmVyIHRoZSBwZXJpb2QgYm91bmRhcnk/ICovCisgICAgICAgICAgICAgICAgICBpZiAoY2hpcC0+c2l6ZSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldCB0aGUgYWNjdW11bGF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcC0+c2l6ZSAlPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FsbCB1cGRhdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2V4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItYm90aCI+CisgICAgICAgIDx0aXRsZT5PbiBjYWxsaW5nIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIGJvdGggY2FzZXMsIGV2ZW4gaWYgbW9yZSB0aGFuIG9uZSBwZXJpb2QgYXJlIGVsYXBzZWQsIHlvdQorICAgICAgICBkb24ndCBoYXZlIHRvIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IG1hbnkgdGltZXMuIENhbGwKKyAgICAgICAgb25seSBvbmNlLiBBbmQgdGhlIHBjbSBsYXllciB3aWxsIGNoZWNrIHRoZSBjdXJyZW50IGhhcmR3YXJlCisgICAgICAgIHBvaW50ZXIgYW5kIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IHN0YXR1cy4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1hdG9taWNpdHkiPgorICAgICAgPHRpdGxlPkF0b21pY2l0eTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgKGFuZCB0aHVzIGRpZmZpY3VsdCB0byBkZWJ1ZykgcHJvYmxlbXMKKyAgICAgIGluIGtlcm5lbCBwcm9ncmFtbWluZyBhcmUgcmFjZSBjb25kaXRpb25zLgorICAgICAgSW4gdGhlIExpbnV4IGtlcm5lbCwgdGhleSBhcmUgdXN1YWxseSBhdm9pZGVkIHZpYSBzcGluLWxvY2tzLCBtdXRleGVzCisgICAgICBvciBzZW1hcGhvcmVzLiAgSW4gZ2VuZXJhbCwgaWYgYSByYWNlIGNvbmRpdGlvbiBjYW4gaGFwcGVuCisgICAgICBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgaXQgaGFzIHRvIGJlIG1hbmFnZWQgYXRvbWljYWxseSwgYW5kIHlvdQorICAgICAgaGF2ZSB0byB1c2UgYSBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcml0aWNhbCBzZXNzaW9uLiBJZiB0aGUKKyAgICAgIGNyaXRpY2FsIHNlY3Rpb24gaXMgbm90IGluIGludGVycnVwdCBoYW5kbGVyIGNvZGUgYW5kCisgICAgICBpZiB0YWtpbmcgYSByZWxhdGl2ZWx5IGxvbmcgdGltZSB0byBleGVjdXRlIGlzIGFjY2VwdGFibGUsIHlvdQorICAgICAgc2hvdWxkIHVzZSBtdXRleGVzIG9yIHNlbWFwaG9yZXMgaW5zdGVhZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBcyBhbHJlYWR5IHNlZW4sIHNvbWUgcGNtIGNhbGxiYWNrcyBhcmUgYXRvbWljIGFuZCBzb21lIGFyZQorICAgICAgbm90LiAgRm9yIGV4YW1wbGUsIHRoZSA8cGFyYW1ldGVyPmh3X3BhcmFtczwvcGFyYW1ldGVyPiBjYWxsYmFjayBpcworICAgICAgbm9uLWF0b21pYywgd2hpbGUgPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCisgICAgICBhdG9taWMuICBUaGlzIG1lYW5zLCB0aGUgbGF0dGVyIGlzIGNhbGxlZCBhbHJlYWR5IGluIGEgc3BpbmxvY2sKKyAgICAgIGhlbGQgYnkgdGhlIFBDTSBtaWRkbGUgbGF5ZXIuIFBsZWFzZSB0YWtlIHRoaXMgYXRvbWljaXR5IGludG8KKyAgICAgIGFjY291bnQgd2hlbiB5b3UgY2hvb3NlIGEgbG9ja2luZyBzY2hlbWUgaW4gdGhlIGNhbGxiYWNrcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJbiB0aGUgYXRvbWljIGNhbGxiYWNrcywgeW91IGNhbm5vdCB1c2UgZnVuY3Rpb25zIHdoaWNoIG1heSBjYWxsCisgICAgICA8ZnVuY3Rpb24+c2NoZWR1bGU8L2Z1bmN0aW9uPiBvciBnbyB0bworICAgICAgPGZ1bmN0aW9uPnNsZWVwPC9mdW5jdGlvbj4uICBTZW1hcGhvcmVzIGFuZCBtdXRleGVzIGNhbiBzbGVlcCwKKyAgICAgIGFuZCBoZW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGluc2lkZSB0aGUgYXRvbWljIGNhbGxiYWNrcworICAgICAgKGUuZy4gPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrKS4KKyAgICAgIFRvIGltcGxlbWVudCBzb21lIGRlbGF5IGluIHN1Y2ggYSBjYWxsYmFjaywgcGxlYXNlIHVzZQorICAgICAgPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQWxsIHRocmVlIGF0b21pYyBjYWxsYmFja3MgKHRyaWdnZXIsIHBvaW50ZXIsIGFuZCBhY2spIGFyZQorICAgICAgY2FsbGVkIHdpdGggbG9jYWwgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJhaW50cyI+CisgICAgICA8dGl0bGU+Q29uc3RyYWludHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCBzYW1wbGUgcmF0ZXMsIG9yIG9ubHkgdGhlCisgICAgICBsaW1pdGVkIHNhbXBsZXMsIHlvdSBuZWVkIHRvIHNldCBhIGNvbnN0cmFpbnQgZm9yIHRoZQorICAgICAgY29uZGl0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcmRlciB0byByZXN0cmljdCB0aGUgc2FtcGxlIHJhdGVzIGluIHRoZSBzb21lCisgICAgICAgIHN1cHBvcnRlZCB2YWx1ZXMsIHVzZQorCTxmdW5jdGlvbj5zbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCgpPC9mdW5jdGlvbj4uCisJWW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBvcGVuIGNhbGxiYWNrLgorCisgICAgICAgIDxleGFtcGxlPgorCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHM8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPQorICAgICAgICAgIHs0MDAwLCAxMDAwMCwgMjIwNTAsIDQ0MTAwfTsKKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBjb25zdHJhaW50c19yYXRlcyA9IHsKKyAgICAgICAgICAuY291bnQgPSBBUlJBWV9TSVpFKHJhdGVzKSwKKyAgICAgICAgICAubGlzdCA9IHJhdGVzLAorICAgICAgICAgIC5tYXNrID0gMCwKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnN0cmFpbnRzX3JhdGVzKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgY29uc3RyYWludHMuCisgICAgICAgIExvb2sgYXQgPGZpbGVuYW1lPnNvdW5kL3BjbS5oPC9maWxlbmFtZT4gZm9yIGEgY29tcGxldGUgbGlzdC4KKyAgICAgICAgWW91IGNhbiBldmVuIGRlZmluZSB5b3VyIG93biBjb25zdHJhaW50IHJ1bGVzLgorICAgICAgICBGb3IgZXhhbXBsZSwgbGV0J3Mgc3VwcG9zZSBteV9jaGlwIGNhbiBtYW5hZ2UgYSBzdWJzdHJlYW0gb2YgMSBjaGFubmVsCisgICAgICAgIGlmIGFuZCBvbmx5IGlmIHRoZSBmb3JtYXQgaXMgUzE2X0xFLCBvdGhlcndpc2UgaXQgc3VwcG9ydHMgYW55IGZvcm1hdAorICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIDxzdHJ1Y3RuYW1lPnNuZF9wY21faGFyZHdhcmU8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSAob3IgaW4gYW55CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnRfbGlzdCkuIFlvdSBjYW4gYnVpbGQgYSBydWxlIGxpa2UgdGhpczoKKworICAgICAgICA8ZXhhbXBsZT4KKwkgIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQorICB7CisgICAgICAgICAgc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKyAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworICAgICAgICAgIHN0cnVjdCBzbmRfbWFzayAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX21hc2sgZm10OworCisgICAgICAgICAgc25kX21hc2tfYW55KCZmbXQpOyAgICAvKiBJbml0IHRoZSBzdHJ1Y3QgKi8KKyAgICAgICAgICBpZiAoYy0+bWluIDwgMikgeworICAgICAgICAgICAgICAgICAgZm10LmJpdHNbMF0gJj0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEU7CisgICAgICAgICAgICAgICAgICByZXR1cm4gc25kX21hc2tfcmVmaW5lKGYsICZmbXQpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoZW4geW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCB5b3VyIHJ1bGU6CisKKyAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorCSA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKyAgICAgICAgICAgICAgICAgICAgICBod19ydWxlX2NoYW5uZWxzX2J5X2Zvcm1hdCwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAtMSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBydWxlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIHNldHMgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gQnV0IGFuIGFwcGxpY2F0aW9uIGNhbiBzZXQgdGhlIGZvcm1hdCBiZWZvcmUgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gVGh1cyB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSB0aGUgaW52ZXJzZSBydWxlOgorCisgICAgICAgPGV4YW1wbGU+CisJIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0KHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCisgIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX21hc2sgKmYgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisgICAgICAgICAgc3RydWN0IHNuZF9pbnRlcnZhbCBjaDsKKworICAgICAgICAgIHNuZF9pbnRlcnZhbF9hbnkoJmNoKTsKKyAgICAgICAgICBpZiAoZi0+Yml0c1swXSA9PSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkgeworICAgICAgICAgICAgICAgICAgY2gubWluID0gY2gubWF4ID0gMTsKKyAgICAgICAgICAgICAgICAgIGNoLmludGVnZXIgPSAxOworICAgICAgICAgICAgICAgICAgcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJmNoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAuLi5hbmQgaW4gdGhlIG9wZW4gY2FsbGJhY2s6CisgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKwkgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21faHdfcnVsZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgIGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisgICAgICAgICAgICAgICAgICAgICAgLTEpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJIHdvbid0IGdpdmUgbW9yZSBkZXRhaWxzIGhlcmUsIHJhdGhlciBJCisgICAgICAgIHdvdWxkIGxpa2UgdG8gc2F5LCA8cXVvdGU+THVrZSwgdXNlIHRoZSBzb3VyY2UuPC9xdW90ZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBDb250cm9sIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImNvbnRyb2wtaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+Q29udHJvbCBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb250cm9sIGludGVyZmFjZSBpcyB1c2VkIHdpZGVseSBmb3IgbWFueSBzd2l0Y2hlcywKKyAgICAgIHNsaWRlcnMsIGV0Yy4gd2hpY2ggYXJlIGFjY2Vzc2VkIGZyb20gdXNlci1zcGFjZS4gSXRzIG1vc3QKKyAgICAgIGltcG9ydGFudCB1c2UgaXMgdGhlIG1peGVyIGludGVyZmFjZS4gSW4gb3RoZXIgd29yZHMsIHNpbmNlIEFMU0EKKyAgICAgIDAuOS54LCBhbGwgdGhlIG1peGVyIHN0dWZmIGlzIGltcGxlbWVudGVkIG9uIHRoZSBjb250cm9sIGtlcm5lbCBBUEkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIGhhcyBhIHdlbGwtZGVmaW5lZCBBQzk3IGNvbnRyb2wgbW9kdWxlLiBJZiB5b3VyIGNoaXAKKyAgICAgIHN1cHBvcnRzIG9ubHkgdGhlIEFDOTcgYW5kIG5vdGhpbmcgZWxzZSwgeW91IGNhbiBza2lwIHRoaXMKKyAgICAgIHNlY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvbnRyb2wgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29udHJvbC5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgSW5jbHVkZSB0aGlzIGZpbGUgaWYgeW91IHdhbnQgdG8gYWRkIHlvdXIgb3duIGNvbnRyb2xzLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1kZWZpbml0aW9uIj4KKyAgICAgIDx0aXRsZT5EZWZpbml0aW9uIG9mIENvbnRyb2xzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUbyBjcmVhdGUgYSBuZXcgY29udHJvbCwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZQorCWZvbGxvd2luZyB0aHJlZQorICAgICAgY2FsbGJhY2tzOiA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+LAorICAgICAgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnB1dDwvc3RydWN0ZmllbGQ+LiBUaGVuLCBkZWZpbmUgYQorICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9rY29udHJvbF9uZXc8L3N0cnVjdG5hbWU+IHJlY29yZCwgc3VjaCBhczogCisKKyAgICAgICAgPGV4YW1wbGU+CisJICA8dGl0bGU+RGVmaW5pdGlvbiBvZiBhIENvbnRyb2w8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbXlfY29udHJvbCBfX2RldmluaXRkYXRhID0geworICAgICAgICAgIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorICAgICAgICAgIC5uYW1lID0gIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorICAgICAgICAgIC5pbmRleCA9IDAsCisgICAgICAgICAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisgICAgICAgICAgLnByaXZhdGVfdmFsdWUgPSAweGZmZmYsCisgICAgICAgICAgLmluZm8gPSBteV9jb250cm9sX2luZm8sCisgICAgICAgICAgLmdldCA9IG15X2NvbnRyb2xfZ2V0LAorICAgICAgICAgIC5wdXQgPSBteV9jb250cm9sX3B1dAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTW9zdCBsaWtlbHkgdGhlIGNvbnRyb2wgaXMgY3JlYXRlZCB2aWEKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+LCBhbmQgaW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4KKyAgICAgIGFkZCB0aGUgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IHByZWZpeCB0byB0aGUKKyAgICAgIGRlZmluaXRpb24gYXMgYWJvdmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pZmFjZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgY29udHJvbAorICAgICAgdHlwZSwgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX1hYWDwvY29uc3RhbnQ+LCB3aGljaAorICAgICAgaXMgdXN1YWxseSA8Y29uc3RhbnQ+TUlYRVI8L2NvbnN0YW50Pi4KKyAgICAgIFVzZSA8Y29uc3RhbnQ+Q0FSRDwvY29uc3RhbnQ+IGZvciBnbG9iYWwgY29udHJvbHMgdGhhdCBhcmUgbm90CisgICAgICBsb2dpY2FsbHkgcGFydCBvZiB0aGUgbWl4ZXIuCisgICAgICBJZiB0aGUgY29udHJvbCBpcyBjbG9zZWx5IGFzc29jaWF0ZWQgd2l0aCBzb21lIHNwZWNpZmljIGRldmljZSBvbgorICAgICAgdGhlIHNvdW5kIGNhcmQsIHVzZSA8Y29uc3RhbnQ+SFdERVA8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5QQ008L2NvbnN0YW50PiwgPGNvbnN0YW50PlJBV01JREk8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5USU1FUjwvY29uc3RhbnQ+LCBvciA8Y29uc3RhbnQ+U0VRVUVOQ0VSPC9jb25zdGFudD4sIGFuZAorICAgICAgc3BlY2lmeSB0aGUgZGV2aWNlIG51bWJlciB3aXRoIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmRldmljZTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnN1YmRldmljZTwvc3RydWN0ZmllbGQ+IGZpZWxkcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IGlzIHRoZSBuYW1lIGlkZW50aWZpZXIKKyAgICAgIHN0cmluZy4gU2luY2UgQUxTQSAwLjkueCwgdGhlIGNvbnRyb2wgbmFtZSBpcyB2ZXJ5IGltcG9ydGFudCwKKyAgICAgIGJlY2F1c2UgaXRzIHJvbGUgaXMgY2xhc3NpZmllZCBmcm9tIGl0cyBuYW1lLiBUaGVyZSBhcmUKKyAgICAgIHByZS1kZWZpbmVkIHN0YW5kYXJkIGNvbnRyb2wgbmFtZXMuIFRoZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4KKyAgICAgIHRoZSA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzIj48Y2l0ZXRpdGxlPgorICAgICAgQ29udHJvbCBOYW1lczwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBob2xkcyB0aGUgaW5kZXggbnVtYmVyCisgICAgICBvZiB0aGlzIGNvbnRyb2wuIElmIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBjb250cm9scyB3aXRoCisgICAgICB0aGUgc2FtZSBuYW1lLCB0aGV5IGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBpbmRleAorICAgICAgbnVtYmVyLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gCisgICAgICBzZXZlcmFsIGNvZGVjcyBleGlzdCBvbiB0aGUgY2FyZC4gSWYgdGhlIGluZGV4IGlzIHplcm8sIHlvdSBjYW4KKyAgICAgIG9taXQgdGhlIGRlZmluaXRpb24gYWJvdmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5hY2Nlc3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYWNjZXNzCisgICAgICB0eXBlIG9mIHRoaXMgY29udHJvbC4gR2l2ZSB0aGUgY29tYmluYXRpb24gb2YgYml0IG1hc2tzLAorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19YWFg8L2NvbnN0YW50PiwgdGhlcmUuCisgICAgICBUaGUgZGV0YWlscyB3aWxsIGJlIGV4cGxhaW5lZCBpbgorICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWFjY2Vzcy1mbGFncyI+PGNpdGV0aXRsZT4KKyAgICAgIEFjY2VzcyBGbGFnczwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zCisgICAgICBhbiBhcmJpdHJhcnkgbG9uZyBpbnRlZ2VyIHZhbHVlIGZvciB0aGlzIHJlY29yZC4gV2hlbiB1c2luZworICAgICAgdGhlIGdlbmVyaWMgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MsIHlvdSBjYW4gcGFzcyBhIHZhbHVlIAorICAgICAgdGhyb3VnaCB0aGlzIGZpZWxkLiBJZiBzZXZlcmFsIHNtYWxsIG51bWJlcnMgYXJlIG5lY2Vzc2FyeSwgeW91IGNhbgorICAgICAgY29tYmluZSB0aGVtIGluIGJpdHdpc2UuIE9yLCBpdCdzIHBvc3NpYmxlIHRvIGdpdmUgYSBwb2ludGVyCisgICAgICAoY2FzdGVkIHRvIHVuc2lnbmVkIGxvbmcpIG9mIHNvbWUgcmVjb3JkIHRvIHRoaXMgZmllbGQsIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD50bHY8L3N0cnVjdGZpZWxkPiBmaWVsZCBjYW4gYmUgdXNlZCB0byBwcm92aWRlCisgICAgICBtZXRhZGF0YSBhYm91dCB0aGUgY29udHJvbDsgc2VlIHRoZQorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtdGx2Ij4KKyAgICAgIDxjaXRldGl0bGU+TWV0YWRhdGE8L2NpdGV0aXRsZT48L2xpbms+IHN1YnNlY3Rpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgb3RoZXIgdGhyZWUgYXJlCisJPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzIj48Y2l0ZXRpdGxlPgorCWNhbGxiYWNrIGZ1bmN0aW9uczwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgTmFtZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkcyB0byBkZWZpbmUgdGhlIGNvbnRyb2wgbmFtZXMuIEEKKyAgICAgIGNvbnRyb2wgaXMgdXN1YWxseSBkZWZpbmVkIGZyb20gdGhlIHRocmVlIHBhcnRzIGFzCisgICAgICA8cXVvdGU+U09VUkNFIERJUkVDVElPTiBGVU5DVElPTjwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCwgPGNvbnN0YW50PlNPVVJDRTwvY29uc3RhbnQ+LCBzcGVjaWZpZXMgdGhlIHNvdXJjZQorICAgICAgb2YgdGhlIGNvbnRyb2wsIGFuZCBpcyBhIHN0cmluZyBzdWNoIGFzIDxxdW90ZT5NYXN0ZXI8L3F1b3RlPiwKKyAgICAgIDxxdW90ZT5QQ008L3F1b3RlPiwgPHF1b3RlPkNEPC9xdW90ZT4gYW5kCisgICAgICA8cXVvdGU+TGluZTwvcXVvdGU+LiBUaGVyZSBhcmUgbWFueSBwcmUtZGVmaW5lZCBzb3VyY2VzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBzZWNvbmQsIDxjb25zdGFudD5ESVJFQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+UGxheWJhY2s8L3F1b3RlPiwgPHF1b3RlPkNhcHR1cmU8L3F1b3RlPiwgPHF1b3RlPkJ5cGFzcworICAgICAgUGxheWJhY2s8L3F1b3RlPiBhbmQgPHF1b3RlPkJ5cGFzcyBDYXB0dXJlPC9xdW90ZT4uIE9yLCBpdCBjYW4KKyAgICAgIGJlIG9taXR0ZWQsIG1lYW5pbmcgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCwgPGNvbnN0YW50PkZVTkNUSU9OPC9jb25zdGFudD4sIGlzIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+U3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Wb2x1bWU8L3F1b3RlPiBhbmQKKyAgICAgIDxxdW90ZT5Sb3V0ZTwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGFtcGxlIG9mIGNvbnRyb2wgbmFtZXMgYXJlLCB0aHVzLCA8cXVvdGU+TWFzdGVyIENhcHR1cmUKKyAgICAgIFN3aXRjaDwvcXVvdGU+IG9yIDxxdW90ZT5QQ00gUGxheWJhY2sgVm9sdW1lPC9xdW90ZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9uczoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtZ2xvYmFsIj4KKyAgICAgICAgPHRpdGxlPkdsb2JhbCBjYXB0dXJlIGFuZCBwbGF5YmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxxdW90ZT5DYXB0dXJlIFNvdXJjZTwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZSBTd2l0Y2g8L3F1b3RlPgorICAgICAgICBhbmQgPHF1b3RlPkNhcHR1cmUgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwKKyAgICAgICAgY2FwdHVyZSAoaW5wdXQpIHNvdXJjZSwgc3dpdGNoIGFuZCB2b2x1bWUuIFNpbWlsYXJseSwKKyAgICAgICAgPHF1b3RlPlBsYXliYWNrIFN3aXRjaDwvcXVvdGU+IGFuZCA8cXVvdGU+UGxheWJhY2sKKyAgICAgICAgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwgb3V0cHV0IGdhaW4gc3dpdGNoIGFuZAorICAgICAgICB2b2x1bWUuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLXRvbmUiPgorICAgICAgICA8dGl0bGU+VG9uZS1jb250cm9sczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRvbmUtY29udHJvbCBzd2l0Y2ggYW5kIHZvbHVtZXMgYXJlIHNwZWNpZmllZCBsaWtlCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+VG9uZSBDb250cm9sIC0KKyAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBCYXNzPC9xdW90ZT4sCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBDZW50ZXI8L3F1b3RlPi4gIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLTNkIj4KKyAgICAgICAgPHRpdGxlPjNEIGNvbnRyb2xzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgM0QtY29udHJvbCBzd2l0Y2hlcyBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UgPHF1b3RlPjNECisgICAgICAgIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+M0QgQ29udHJvbCAtCisgICAgICAgIFN3aXRjaDwvcXVvdGU+LCA8cXVvdGU+M0QgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LCA8cXVvdGU+M0QKKyAgICAgICAgQ29udHJvbCAtIFNwYWNlPC9xdW90ZT4uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLW1pYyI+CisgICAgICAgIDx0aXRsZT5NaWMgYm9vc3Q8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNaWMtYm9vc3Qgc3dpdGNoIGlzIHNldCBhcyA8cXVvdGU+TWljIEJvb3N0PC9xdW90ZT4gb3IKKyAgICAgICAgPHF1b3RlPk1pYyBCb29zdCAoNmRCKTwvcXVvdGU+LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4KKyAgICAgICAgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5BY2Nlc3MgRmxhZ3M8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBhY2Nlc3MgZmxhZyBpcyB0aGUgYml0bWFzayB3aGljaCBzcGVjaWZpZXMgdGhlIGFjY2VzcyB0eXBlCisgICAgICBvZiB0aGUgZ2l2ZW4gY29udHJvbC4gIFRoZSBkZWZhdWx0IGFjY2VzcyB0eXBlIGlzCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURTwvY29uc3RhbnQ+LCAKKyAgICAgIHdoaWNoIG1lYW5zIGJvdGggcmVhZCBhbmQgd3JpdGUgYXJlIGFsbG93ZWQgdG8gdGhpcyBjb250cm9sLgorICAgICAgV2hlbiB0aGUgYWNjZXNzIGZsYWcgaXMgb21pdHRlZCAoaS5lLiA9IDApLCBpdCBpcworICAgICAgY29uc2lkZXJlZCBhcyA8Y29uc3RhbnQ+UkVBRFdSSVRFPC9jb25zdGFudD4gYWNjZXNzIGFzIGRlZmF1bHQuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFdoZW4gdGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LCBwYXNzCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQ8L2NvbnN0YW50PiBpbnN0ZWFkLgorICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgZG9uJ3QgaGF2ZSB0byBkZWZpbmUKKyAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cHV0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICBTaW1pbGFybHksIHdoZW4gdGhlIGNvbnRyb2wgaXMgd3JpdGUtb25seSAoYWx0aG91Z2ggaXQncyBhIHJhcmUKKyAgICAgIGNhc2UpLCB5b3UgY2FuIHVzZSB0aGUgPGNvbnN0YW50PldSSVRFPC9jb25zdGFudD4gZmxhZyBpbnN0ZWFkLCBhbmQKKyAgICAgIHlvdSBkb24ndCBuZWVkIHRoZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgSWYgdGhlIGNvbnRyb2wgdmFsdWUgY2hhbmdlcyBmcmVxdWVudGx5IChlLmcuIHRoZSBWVSBtZXRlciksCisgICAgICA8Y29uc3RhbnQ+Vk9MQVRJTEU8L2NvbnN0YW50PiBmbGFnIHNob3VsZCBiZSBnaXZlbi4gIFRoaXMgbWVhbnMKKyAgICAgIHRoYXQgdGhlIGNvbnRyb2wgbWF5IGJlIGNoYW5nZWQgd2l0aG91dAorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2hhbmdlLW5vdGlmaWNhdGlvbiI+PGNpdGV0aXRsZT4KKyAgICAgIG5vdGlmaWNhdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uIEFwcGxpY2F0aW9ucyBzaG91bGQgcG9sbCBzdWNoCisgICAgICBhIGNvbnRyb2wgY29uc3RhbnRseS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjb250cm9sIGlzIGluYWN0aXZlLCBzZXQKKyAgICAgIHRoZSA8Y29uc3RhbnQ+SU5BQ1RJVkU8L2NvbnN0YW50PiBmbGFnLCB0b28uCisgICAgICBUaGVyZSBhcmUgPGNvbnN0YW50PkxPQ0s8L2NvbnN0YW50PiBhbmQKKyAgICAgIDxjb25zdGFudD5PV05FUjwvY29uc3RhbnQ+IGZsYWdzIHRvIGNoYW5nZSB0aGUgd3JpdGUKKyAgICAgIHBlcm1pc3Npb25zLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1pbmZvIj4KKyAgICAgICAgPHRpdGxlPmluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIGdldAorICAgICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnRyb2wuIFRoaXMgbXVzdCBzdG9yZSB0aGUKKyAgICAgICAgdmFsdWVzIG9mIHRoZSBnaXZlbiBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2N0bF9lbGVtX2luZm88L3N0cnVjdG5hbWU+CisgICAgICAgIG9iamVjdC4gRm9yIGV4YW1wbGUsIGZvciBhIGJvb2xlYW4gY29udHJvbCB3aXRoIGEgc2luZ2xlCisgICAgICAgIGVsZW1lbnQ6IAorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5FeGFtcGxlIG9mIGluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX21vbm9faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKKyAgeworICAgICAgICAgIHVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworICAgICAgICAgIHVpbmZvLT5jb3VudCA9IDE7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKyAgICAgICAgICB1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCisgICAgICAgIG9mIHRoZSBjb250cm9sLiBUaGVyZSBhcmUgPGNvbnN0YW50PkJPT0xFQU48L2NvbnN0YW50PiwKKyAgICAgICAgPGNvbnN0YW50PklOVEVHRVI8L2NvbnN0YW50PiwgPGNvbnN0YW50PkVOVU1FUkFURUQ8L2NvbnN0YW50PiwKKyAgICAgICAgPGNvbnN0YW50PkJZVEVTPC9jb25zdGFudD4sIDxjb25zdGFudD5JRUM5NTg8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PklOVEVHRVI2NDwvY29uc3RhbnQ+LiBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSAKKyAgICAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgY29udHJvbC4gRm9yIGV4YW1wbGUsIGEgc3RlcmVvCisgICAgICAgIHZvbHVtZSB3b3VsZCBoYXZlIGNvdW50ID0gMi4gVGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGEgdW5pb24sIGFuZCAKKyAgICAgICAgdGhlIHZhbHVlcyBzdG9yZWQgYXJlIGRlcGVuZGluZyBvbiB0aGUgdHlwZS4gVGhlIGJvb2xlYW4gYW5kCisgICAgICAgIGludGVnZXIgdHlwZXMgYXJlIGlkZW50aWNhbC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgZW51bWVyYXRlZCB0eXBlIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIG90aGVycy4gIFlvdSdsbAorICAgICAgICAgIG5lZWQgdG8gc2V0IHRoZSBzdHJpbmcgZm9yIHRoZSBjdXJyZW50bHkgZ2l2ZW4gaXRlbSBpbmRleC4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKKyAgeworICAgICAgICAgIHN0YXRpYyBjaGFyICp0ZXh0c1s0XSA9IHsKKyAgICAgICAgICAgICAgICAgICJGaXJzdCIsICJTZWNvbmQiLCAiVGhpcmQiLCAiRm91cnRoIgorICAgICAgICAgIH07CisgICAgICAgICAgdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisgICAgICAgICAgdWluZm8tPmNvdW50ID0gMTsKKyAgICAgICAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDQ7CisgICAgICAgICAgaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAzKQorICAgICAgICAgICAgICAgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDM7CisgICAgICAgICAgc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisgICAgICAgICAgICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJICBTb21lIGNvbW1vbiBpbmZvIGNhbGxiYWNrcyBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIGNvbnZlbmllbmNlOgorCTxmdW5jdGlvbj5zbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvKCk8L2Z1bmN0aW9uPiBhbmQKKwk8ZnVuY3Rpb24+c25kX2N0bF9ib29sZWFuX3N0ZXJlb19pbmZvKCk8L2Z1bmN0aW9uPi4KKwlPYnZpb3VzbHksIHRoZSBmb3JtZXIgaXMgYW4gaW5mbyBjYWxsYmFjayBmb3IgYSBtb25vIGNoYW5uZWwKKwlib29sZWFuIGl0ZW0sIGp1c3QgbGlrZSA8ZnVuY3Rpb24+c25kX215Y3RsX21vbm9faW5mbzwvZnVuY3Rpb24+CisJYWJvdmUsIGFuZCB0aGUgbGF0dGVyIGlzIGZvciBhIHN0ZXJlbyBjaGFubmVsIGJvb2xlYW4gaXRlbS4KKwk8L3BhcmE+CisKKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1nZXQiPgorICAgICAgICA8dGl0bGU+Z2V0IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgY29udHJvbCBhbmQgdG8gcmV0dXJuIHRvIHVzZXItc3BhY2UuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkV4YW1wbGUgb2YgZ2V0IGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBnZXRfc29tZV92YWx1ZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCVRoZSA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXBlbmRzIG9uIAorICAgICAgICB0aGUgdHlwZSBvZiBjb250cm9sIGFzIHdlbGwgYXMgb24gdGhlIGluZm8gY2FsbGJhY2suICBGb3IgZXhhbXBsZSwKKwl0aGUgc2IgZHJpdmVyIHVzZXMgdGhpcyBmaWVsZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LAorICAgICAgICB0aGUgYml0LXNoaWZ0IGFuZCB0aGUgYml0LW1hc2suICBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQgYXMgZm9sbG93czoKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIC5wcml2YXRlX3ZhbHVlID0gcmVnIHwgKHNoaWZ0IDw8IDE2KSB8IChtYXNrIDw8IDI0KQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCWFuZCBpcyByZXRyaWV2ZWQgaW4gY2FsbGJhY2tzIGxpa2UKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3NibWl4ZXJfZ2V0X3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorICB7CisgICAgICAgICAgaW50IHJlZyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKyAgICAgICAgICBpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKyAgICAgICAgICBpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweGZmOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIHRoZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssCisJeW91IGhhdmUgdG8gZmlsbCBhbGwgdGhlIGVsZW1lbnRzIGlmIHRoZQorICAgICAgICBjb250cm9sIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnRzLAorICAgICAgICBpLmUuIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+ICZndDsgMS4KKwlJbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2UgZmlsbGVkIG9ubHkgb25lIGVsZW1lbnQKKyAgICAgICAgKDxzdHJ1Y3RmaWVsZD52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdPC9zdHJ1Y3RmaWVsZD4pIHNpbmNlIGl0J3MKKyAgICAgICAgYXNzdW1lZCBhcyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiA9IDEuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1wdXQiPgorICAgICAgICA8dGl0bGU+cHV0IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gd3JpdGUgYSB2YWx1ZSBmcm9tIHVzZXItc3BhY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBwdXQgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKyAgICAgICAgICBpbnQgY2hhbmdlZCA9IDA7CisgICAgICAgICAgaWYgKGNoaXAtPmN1cnJlbnRfdmFsdWUgIT0KKyAgICAgICAgICAgICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CisgICAgICAgICAgICAgICAgICBjaGFuZ2VfY3VycmVudF92YWx1ZShjaGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorCisgICAgICAgICAgQXMgc2VlbiBhYm92ZSwgeW91IGhhdmUgdG8gcmV0dXJuIDEgaWYgdGhlIHZhbHVlIGlzCisgICAgICAgIGNoYW5nZWQuIElmIHRoZSB2YWx1ZSBpcyBub3QgY2hhbmdlZCwgcmV0dXJuIDAgaW5zdGVhZC4gCisJSWYgYW55IGZhdGFsIGVycm9yIGhhcHBlbnMsIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgYXMKKyAgICAgICAgdXN1YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKwlBcyBpbiB0aGUgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLAorCXdoZW4gdGhlIGNvbnRyb2wgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudHMsCisJYWxsIGVsZW1lbnRzIG11c3QgYmUgZXZhbHVhdGVkIGluIHRoaXMgY2FsbGJhY2ssIHRvby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWFsbCI+CisgICAgICAgIDx0aXRsZT5DYWxsYmFja3MgYXJlIG5vdCBhdG9taWM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbGwgdGhlc2UgdGhyZWUgY2FsbGJhY2tzIGFyZSBiYXNpY2FsbHkgbm90IGF0b21pYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gZXZlcnl0aGluZyBpcyByZWFkeSwgZmluYWxseSB3ZSBjYW4gY3JlYXRlIGEgbmV3CisgICAgICBjb250cm9sLiBUbyBjcmVhdGUgYSBjb250cm9sLCB0aGVyZSBhcmUgdHdvIGZ1bmN0aW9ucyB0byBiZQorICAgICAgY2FsbGVkLCA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX2FkZCgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIHNpbXBsZXN0IHdheSwgeW91IGNhbiBkbyBsaWtlIHRoaXM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZteV9jb250cm9sLCBjaGlwKSk7CisgIGlmIChlcnIgPCAwKQorICAgICAgICAgIHJldHVybiBlcnI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPm15X2NvbnRyb2w8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2tjb250cm9sX25ldzwvc3RydWN0bmFtZT4gb2JqZWN0IGRlZmluZWQgYWJvdmUsIGFuZCBjaGlwCisgICAgICBpcyB0aGUgb2JqZWN0IHBvaW50ZXIgdG8gYmUgcGFzc2VkIHRvCisgICAgICBrY29udHJvbC0mZ3Q7cHJpdmF0ZV9kYXRhIAorICAgICAgd2hpY2ggY2FuIGJlIHJlZmVycmVkIHRvIGluIGNhbGxiYWNrcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbGxvY2F0ZXMgYSBuZXcKKyAgICAgIDxzdHJ1Y3RuYW1lPnNuZF9rY29udHJvbDwvc3RydWN0bmFtZT4gaW5zdGFuY2UgKHRoYXQncyB3aHkgdGhlIGRlZmluaXRpb24KKyAgICAgIG9mIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBjYW4gYmUgd2l0aAorICAgICAgdGhlIDxwYXJhbWV0ZXI+X19kZXZpbml0ZGF0YTwvcGFyYW1ldGVyPiAKKyAgICAgIHByZWZpeCksIGFuZCA8ZnVuY3Rpb24+c25kX2N0bF9hZGQ8L2Z1bmN0aW9uPiBhc3NpZ25zIHRoZSBnaXZlbgorICAgICAgY29udHJvbCBjb21wb25lbnQgdG8gdGhlIGNhcmQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jaGFuZ2Utbm90aWZpY2F0aW9uIj4KKyAgICAgIDx0aXRsZT5DaGFuZ2UgTm90aWZpY2F0aW9uPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgbmVlZCB0byBjaGFuZ2UgYW5kIHVwZGF0ZSBhIGNvbnRyb2wgaW4gdGhlIGludGVycnVwdAorICAgICAgcm91dGluZSwgeW91IGNhbiBjYWxsIDxmdW5jdGlvbj5zbmRfY3RsX25vdGlmeSgpPC9mdW5jdGlvbj4uIEZvcgorICAgICAgZXhhbXBsZSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2N0bF9ub3RpZnkoY2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsIGlkX3BvaW50ZXIpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgZXZlbnQtbWFzaywgYW5kIHRoZQorICAgICAgY29udHJvbCBpZCBwb2ludGVyIGZvciB0aGUgbm90aWZpY2F0aW9uLiBUaGUgZXZlbnQtbWFzaworICAgICAgc3BlY2lmaWVzIHRoZSB0eXBlcyBvZiBub3RpZmljYXRpb24sIGZvciBleGFtcGxlLCBpbiB0aGUgYWJvdmUKKyAgICAgIGV4YW1wbGUsIHRoZSBjaGFuZ2Ugb2YgY29udHJvbCB2YWx1ZXMgaXMgbm90aWZpZWQuCisgICAgICBUaGUgaWQgcG9pbnRlciBpcyB0aGUgcG9pbnRlciBvZiBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2N0bF9lbGVtX2lkPC9zdHJ1Y3RuYW1lPgorICAgICAgdG8gYmUgbm90aWZpZWQuCisgICAgICBZb3UgY2FuIGZpbmQgc29tZSBleGFtcGxlcyBpbiA8ZmlsZW5hbWU+ZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgorICAgICAgPGZpbGVuYW1lPmVzMTk2OC5jPC9maWxlbmFtZT4gZm9yIGhhcmR3YXJlIHZvbHVtZSBpbnRlcnJ1cHRzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtdGx2Ij4KKyAgICAgIDx0aXRsZT5NZXRhZGF0YTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIFRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRCIHZhbHVlcyBvZiBhIG1peGVyIGNvbnRyb2wsIHVzZQorICAgICAgb24gb2YgdGhlIDxjb25zdGFudD5ERUNMQVJFX1RMVl94eHg8L2NvbnN0YW50PiBtYWNyb3MgZnJvbQorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC90bHYuaCZndDs8L2ZpbGVuYW1lPiB0byBkZWZpbmUgYSB2YXJpYWJsZQorICAgICAgY29udGFpbmluZyB0aGlzIGluZm9ybWF0aW9uLCBzZXQgdGhlPHN0cnVjdGZpZWxkPnRsdi5wCisgICAgICA8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byBwb2ludCB0byB0aGlzIHZhcmlhYmxlLCBhbmQgaW5jbHVkZSB0aGUKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQ8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmFjY2Vzczwvc3RydWN0ZmllbGQ+IGZpZWxkOyBsaWtlIHRoaXM6CisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlX215X2NvbnRyb2wsIC00MDUwLCAxNTAsIDApOworCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBteV9jb250cm9sIF9fZGV2aW5pdGRhdGEgPSB7CisgICAgICAgICAgLi4uCisgICAgICAgICAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisgICAgICAgICAgLi4uCisgICAgICAgICAgLnRsdi5wID0gZGJfc2NhbGVfbXlfY29udHJvbCwKKyAgfTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5ERUNMQVJFX1RMVl9EQl9TQ0FMRTwvZnVuY3Rpb24+IG1hY3JvIGRlZmluZXMKKyAgICAgIGluZm9ybWF0aW9uIGFib3V0IGEgbWl4ZXIgY29udHJvbCB3aGVyZSBlYWNoIHN0ZXAgaW4gdGhlIGNvbnRyb2wncworICAgICAgdmFsdWUgY2hhbmdlcyB0aGUgZEIgdmFsdWUgYnkgYSBjb25zdGFudCBkQiBhbW91bnQuCisgICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBkZWZpbmVkLgorICAgICAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIG1pbmltdW0gdmFsdWUsIGluIHVuaXRzIG9mIDAuMDEgZEIuCisgICAgICBUaGUgdGhpcmQgcGFyYW1ldGVyIGlzIHRoZSBzdGVwIHNpemUsIGluIHVuaXRzIG9mIDAuMDEgZEIuCisgICAgICBTZXQgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIgdG8gMSBpZiB0aGUgbWluaW11bSB2YWx1ZSBhY3R1YWxseSBtdXRlcworICAgICAgdGhlIGNvbnRyb2wuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5ERUNMQVJFX1RMVl9EQl9MSU5FQVI8L2Z1bmN0aW9uPiBtYWNybyBkZWZpbmVzCisgICAgICBpbmZvcm1hdGlvbiBhYm91dCBhIG1peGVyIGNvbnRyb2wgd2hlcmUgdGhlIGNvbnRyb2wncyB2YWx1ZSBhZmZlY3RzCisgICAgICB0aGUgb3V0cHV0IGxpbmVhcmx5LgorICAgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gYmUgZGVmaW5lZC4KKyAgICAgIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBtaW5pbXVtIHZhbHVlLCBpbiB1bml0cyBvZiAwLjAxIGRCLgorICAgICAgVGhlIHRoaXJkIHBhcmFtZXRlciBpcyB0aGUgbWF4aW11bSB2YWx1ZSwgaW4gdW5pdHMgb2YgMC4wMSBkQi4KKyAgICAgIElmIHRoZSBtaW5pbXVtIHZhbHVlIG11dGVzIHRoZSBjb250cm9sLCBzZXQgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8KKyAgICAgIDxjb25zdGFudD5UTFZfREJfR0FJTl9NVVRFPC9jb25zdGFudD4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQVBJIGZvciBBQzk3IENvZGVjICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYXBpLWFjOTciPgorICAgIDx0aXRsZT5BUEkgZm9yIEFDOTcgQ29kZWM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEFMU0EgQUM5NyBjb2RlYyBsYXllciBpcyBhIHdlbGwtZGVmaW5lZCBvbmUsIGFuZCB5b3UgZG9uJ3QKKyAgICAgIGhhdmUgdG8gd3JpdGUgbXVjaCBjb2RlIHRvIGNvbnRyb2wgaXQuIE9ubHkgbG93LWxldmVsIGNvbnRyb2wKKyAgICAgIHJvdXRpbmVzIGFyZSBuZWNlc3NhcnkuIFRoZSBBQzk3IGNvZGVjIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2FjOTdfY29kZWMuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBBQzk3IEludGVyZmFjZTwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKKyAgICAgICAgICAuLi4uCisgIH07CisKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNuZF9teWNoaXBfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZykKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIC8qIHJlYWQgYSByZWdpc3RlciB2YWx1ZSBoZXJlIGZyb20gdGhlIGNvZGVjICovCisgICAgICAgICAgcmV0dXJuIHRoZV9yZWdpc3Rlcl92YWx1ZTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIHNuZF9teWNoaXBfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLyogd3JpdGUgdGhlIGdpdmVuIHJlZ2lzdGVyIHZhbHVlIHRvIHRoZSBjb2RlYyAqLworICB9CisKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2FjOTcoc3RydWN0IG15Y2hpcCAqY2hpcCkKKyAgeworICAgICAgICAgIHN0cnVjdCBzbmRfYWM5N19idXMgKmJ1czsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5NzsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7CisgICAgICAgICAgICAgICAgICAud3JpdGUgPSBzbmRfbXljaGlwX2FjOTdfd3JpdGUsCisgICAgICAgICAgICAgICAgICAucmVhZCA9IHNuZF9teWNoaXBfYWM5N19yZWFkLAorICAgICAgICAgIH07CisKKyAgICAgICAgICBlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cyk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIG1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKyAgICAgICAgICBhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgcmV0dXJuIHNuZF9hYzk3X21peGVyKGJ1cywgJmFjOTcsICZjaGlwLT5hYzk3KTsKKyAgfQorCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gY3JlYXRlIGFuIGFjOTcgaW5zdGFuY2UsIGZpcnN0IGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X2J1czwvZnVuY3Rpb24+CisgICAgICB3aXRoIGFuIDx0eXBlPmFjOTdfYnVzX29wc190PC90eXBlPiByZWNvcmQgd2l0aCBjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9hYzk3X2J1cyAqYnVzOworICBzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgb3BzID0geworICAgICAgICAud3JpdGUgPSBzbmRfbXljaGlwX2FjOTdfd3JpdGUsCisgICAgICAgIC5yZWFkID0gc25kX215Y2hpcF9hYzk3X3JlYWQsCisgIH07CisKKyAgc25kX2FjOTdfYnVzKGNhcmQsIDAsICZvcHMsIE5VTEwsICZwYnVzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICBUaGUgYnVzIHJlY29yZCBpcyBzaGFyZWQgYW1vbmcgYWxsIGJlbG9uZ2luZyBhYzk3IGluc3RhbmNlcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBbmQgdGhlbiBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19taXhlcigpPC9mdW5jdGlvbj4gd2l0aCBhbgorICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9hYzk3X3RlbXBsYXRlPC9zdHJ1Y3RuYW1lPgorICAgICAgcmVjb3JkIHRvZ2V0aGVyIHdpdGggdGhlIGJ1cyBwb2ludGVyIGNyZWF0ZWQgYWJvdmUuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTc7CisgIGludCBlcnI7CisKKyAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOworICBhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIHNuZF9hYzk3X21peGVyKGJ1cywgJmFjOTcsICZjaGlwLT5hYzk3KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIGNoaXAtJmd0O2FjOTcgaXMgYSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICA8dHlwZT5hYzk3X3Q8L3R5cGU+IGluc3RhbmNlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjaGlwIHBvaW50ZXIgaXMgc2V0IGFzIHRoZSBwcml2YXRlIGRhdGEsIHNvIHRoYXQKKyAgICAgICAgdGhlIHJlYWQvd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb25zIGNhbiByZWZlciB0byB0aGlzIGNoaXAgaW5zdGFuY2UuCisgICAgICAgIFRoaXMgaW5zdGFuY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3JlZCBpbiB0aGUgY2hpcAorCXJlY29yZC4gIElmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlCisgICAgICAgIGRyaXZlciwgb3IgbmVlZCB0aGUgc3VzcGVuZC9yZXN1bWUgb2YgYWM5NyBjb2RlY3MsIGtlZXAgdGhpcworICAgICAgICBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1jYWxsYmFja3MiPgorICAgICAgPHRpdGxlPkNhbGxiYWNrczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHN0YW5kYXJkIGNhbGxiYWNrcyBhcmUgPHN0cnVjdGZpZWxkPnJlYWQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD53cml0ZTwvc3RydWN0ZmllbGQ+LiBPYnZpb3VzbHkgdGhleSAKKyAgICAgIGNvcnJlc3BvbmQgdG8gdGhlIGZ1bmN0aW9ucyBmb3IgcmVhZCBhbmQgd3JpdGUgYWNjZXNzZXMgdG8gdGhlCisgICAgICBoYXJkd2FyZSBsb3ctbGV2ZWwgY29kZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5yZWFkPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgcmV0dXJucyB0aGUKKyAgICAgICAgcmVnaXN0ZXIgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBhcmd1bWVudC4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNuZF9teWNoaXBfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZykKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiB0aGVfcmVnaXN0ZXJfdmFsdWU7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEhlcmUsIHRoZSBjaGlwIGNhbiBiZSBjYXN0IGZyb20gYWM5Ny0mZ3Q7cHJpdmF0ZV9kYXRhLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTWVhbndoaWxlLCB0aGUgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMKKyAgICAgICAgdXNlZCB0byBzZXQgdGhlIHJlZ2lzdGVyIHZhbHVlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfbXljaGlwX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm9uLWF0b21pYyBsaWtlIHRoZSBjb250cm9sIEFQSSBjYWxsYmFja3MuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgYWxzbyBvdGhlciBjYWxsYmFja3M6CisgICAgICA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD53YWl0PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+aW5pdDwvc3RydWN0ZmllbGQ+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIHJlc2V0CisgICAgICB0aGUgY29kZWMuIElmIHRoZSBjaGlwIHJlcXVpcmVzIGEgc3BlY2lhbCBraW5kIG9mIHJlc2V0LCB5b3UgY2FuCisgICAgICBkZWZpbmUgdGhpcyBjYWxsYmFjay4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPndhaXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvCisgICAgICBhZGQgc29tZSB3YWl0aW5nIHRpbWUgaW4gdGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb2RlYy4gSWYgdGhlCisgICAgICBjaGlwIHJlcXVpcmVzIHRoZSBleHRyYSB3YWl0aW5nIHRpbWUsIGRlZmluZSB0aGlzIGNhbGxiYWNrLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5pdDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgZm9yCisgICAgICBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb2RlYy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctdXBkYXRpbmctcmVnaXN0ZXJzIj4KKyAgICAgIDx0aXRsZT5VcGRhdGluZyBSZWdpc3RlcnMgaW4gVGhlIERyaXZlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRvIHRoZSBjb2RlYyBmcm9tIHRoZSBkcml2ZXIsIHlvdSBjYW4KKyAgICAgIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+LAorICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3JlYWQoKTwvZnVuY3Rpb24+LAorICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZSgpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlX2JpdHMoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEJvdGggPGZ1bmN0aW9uPnNuZF9hYzk3X3dyaXRlKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb25zIGFyZSB1c2VkIHRvCisgICAgICAgIHNldCBhIHZhbHVlIHRvIHRoZSBnaXZlbiByZWdpc3RlcgorICAgICAgICAoPGNvbnN0YW50PkFDOTdfWFhYPC9jb25zdGFudD4pLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMKKyAgICAgICAgdGhhdCA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBkb2Vzbid0IHdyaXRlIGEKKyAgICAgICAgdmFsdWUgaWYgdGhlIGdpdmVuIHZhbHVlIGhhcyBiZWVuIGFscmVhZHkgc2V0LCB3aGlsZQorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+IGFsd2F5cyByZXdyaXRlcyB0aGUKKyAgICAgICAgdmFsdWUuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfTUFTVEVSLCAweDgwODApOworICBzbmRfYWM5N191cGRhdGUoYWM5NywgQUM5N19NQVNURVIsIDB4ODA4MCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N19yZWFkKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIHRvIHJlYWQgdGhlIHZhbHVlCisgICAgICAgIG9mIHRoZSBnaXZlbiByZWdpc3Rlci4gRm9yIGV4YW1wbGUsIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHZhbHVlID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X01BU1RFUik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGVfYml0cygpPC9mdW5jdGlvbj4gaXMgdXNlZCB0byB1cGRhdGUKKyAgICAgICAgc29tZSBiaXRzIGluIHRoZSBnaXZlbiByZWdpc3Rlci4gIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIHJlZywgbWFzaywgdmFsdWUpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbHNvLCB0aGVyZSBpcyBhIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgc2FtcGxlIHJhdGUgKG9mIGEKKyAgICAgICAgZ2l2ZW4gcmVnaXN0ZXIgc3VjaCBhcworICAgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fRlJPTlRfREFDX1JBVEU8L2NvbnN0YW50Pikgd2hlbiBWUkEgb3IKKyAgICAgICAgRFJBIGlzIHN1cHBvcnRlZCBieSB0aGUgY29kZWM6CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N19zZXRfcmF0ZSgpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3NldF9yYXRlKGFjOTcsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLCA0NDEwMCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgdG8gc2V0IHRoZSByYXRlOgorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX01JQ19BRENfUkFURTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX0ZST05UX0RBQ19SQVRFPC9jb25zdGFudD4sCisgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTFJfQURDX1JBVEU8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4uIFdoZW4KKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4gaXMgc3BlY2lmaWVkLCB0aGUgcmVnaXN0ZXIgaXMKKyAgICAgIG5vdCByZWFsbHkgY2hhbmdlZCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgSUVDOTU4IHN0YXR1cyBiaXRzIHdpbGwKKyAgICAgIGJlIHVwZGF0ZWQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1jbG9jay1hZGp1c3RtZW50Ij4KKyAgICAgIDx0aXRsZT5DbG9jayBBZGp1c3RtZW50PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBzb21lIGNoaXBzLCB0aGUgY2xvY2sgb2YgdGhlIGNvZGVjIGlzbid0IDQ4MDAwIGJ1dCB1c2luZyBhCisgICAgICBQQ0kgY2xvY2sgKHRvIHNhdmUgYSBxdWFydHohKS4gSW4gdGhpcyBjYXNlLCBjaGFuZ2UgdGhlIGZpZWxkCisgICAgICBidXMtJmd0O2Nsb2NrIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICB2YWx1ZS4gRm9yIGV4YW1wbGUsIGludGVsOHgwIAorICAgICAgYW5kIGVzMTk2OCBkcml2ZXJzIGhhdmUgdGhlaXIgb3duIGZ1bmN0aW9uIHRvIHJlYWQgZnJvbSB0aGUgY2xvY2suCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LXByb2MtZmlsZXMiPgorICAgICAgPHRpdGxlPlByb2MgRmlsZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIEFDOTcgaW50ZXJmYWNlIHdpbGwgY3JlYXRlIGEgcHJvYyBmaWxlIHN1Y2ggYXMKKyAgICAgIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvY29kZWM5NyMwL2FjOTcjMC0wPC9maWxlbmFtZT4gYW5kCisgICAgICA8ZmlsZW5hbWU+YWM5NyMwLTArcmVnczwvZmlsZW5hbWU+LiBZb3UgY2FuIHJlZmVyIHRvIHRoZXNlIGZpbGVzIHRvCisgICAgICBzZWUgdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWdpc3RlcnMgb2YgdGhlIGNvZGVjLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctbXVsdGlwbGUtY29kZWNzIj4KKyAgICAgIDx0aXRsZT5NdWx0aXBsZSBDb2RlY3M8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlcmUgYXJlIHNldmVyYWwgY29kZWNzIG9uIHRoZSBzYW1lIGNhcmQsIHlvdSBuZWVkIHRvCisgICAgICBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19taXhlcigpPC9mdW5jdGlvbj4gbXVsdGlwbGUgdGltZXMgd2l0aAorICAgICAgYWM5Ny5udW09MSBvciBncmVhdGVyLiBUaGUgPHN0cnVjdGZpZWxkPm51bTwvc3RydWN0ZmllbGQ+IGZpZWxkCisgICAgICBzcGVjaWZpZXMgdGhlIGNvZGVjIG51bWJlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Ugc2V0IHVwIG11bHRpcGxlIGNvZGVjcywgeW91IGVpdGhlciBuZWVkIHRvIHdyaXRlCisgICAgICBkaWZmZXJlbnQgY2FsbGJhY2tzIGZvciBlYWNoIGNvZGVjIG9yIGNoZWNrCisgICAgICBhYzk3LSZndDtudW0gaW4gdGhlIGNhbGxiYWNrIHJvdXRpbmVzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNSURJIChNUFU0MDEtVUFSVCkgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibWlkaS1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5NSURJIChNUFU0MDEtVUFSVCkgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBNYW55IHNvdW5kY2FyZHMgaGF2ZSBidWlsdC1pbiBNSURJIChNUFU0MDEtVUFSVCkKKyAgICAgIGludGVyZmFjZXMuIFdoZW4gdGhlIHNvdW5kY2FyZCBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgTVBVNDAxLVVBUlQKKyAgICAgIGludGVyZmFjZSwgbW9zdCBsaWtlbHkgeW91IGNhbiB1c2UgdGhlIEFMU0EgTVBVNDAxLVVBUlQgQVBJLiBUaGUKKyAgICAgIE1QVTQwMS1VQVJUIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL21wdTQwMS5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgc291bmRjaGlwcyBoYXZlIGEgc2ltaWxhciBidXQgc2xpZ2h0bHkgZGlmZmVyZW50CisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBtcHU0MDEgc3R1ZmYuIEZvciBleGFtcGxlLCBlbXUxMGsxIGhhcyBpdHMgb3duCisgICAgICBtcHU0MDEgcm91dGluZXMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRvIGNyZWF0ZSBhIHJhd21pZGkgb2JqZWN0LCBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisgIHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwgcG9ydCwgaW5mb19mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICBpcnEsIGlycV9mbGFncywgJnJtaWRpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZQorICAgICAgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuIFlvdSBjYW4gY3JlYXRlIHVwIHRvIDggcmF3bWlkaQorICAgICAgZGV2aWNlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIHR5cGUgb2YgdGhlIGhhcmR3YXJlLAorICAgICAgPGNvbnN0YW50Pk1QVTQwMV9IV19YWFg8L2NvbnN0YW50Pi4gSWYgaXQncyBub3QgYSBzcGVjaWFsIG9uZSwKKyAgICAgIHlvdSBjYW4gdXNlIDxjb25zdGFudD5NUFU0MDFfSFdfTVBVNDAxPC9jb25zdGFudD4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDR0aCBhcmd1bWVudCBpcyB0aGUgSS9PIHBvcnQgYWRkcmVzcy4gTWFueQorICAgICAgYmFja3dhcmQtY29tcGF0aWJsZSBNUFU0MDEgaGF2ZSBhbiBJL08gcG9ydCBzdWNoIGFzIDB4MzMwLiBPciwgaXQKKyAgICAgIG1pZ2h0IGJlIGEgcGFydCBvZiBpdHMgb3duIFBDSSBJL08gcmVnaW9uLiBJdCBkZXBlbmRzIG9uIHRoZQorICAgICAgY2hpcCBkZXNpZ24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGUgNXRoIGFyZ3VtZW50IGlzIGEgYml0ZmxhZyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgV2hlbiB0aGUgSS9PIHBvcnQgYWRkcmVzcyBhYm92ZSBpcyBwYXJ0IG9mIHRoZSBQQ0kgSS9PCisgICAgICByZWdpb24sIHRoZSBNUFU0MDEgSS9PIHBvcnQgbWlnaHQgaGF2ZSBiZWVuIGFscmVhZHkgYWxsb2NhdGVkCisgICAgICAocmVzZXJ2ZWQpIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLiBJbiBzdWNoIGEgY2FzZSwgcGFzcyBhIGJpdCBmbGFnCisgICAgICA8Y29uc3RhbnQ+TVBVNDAxX0lORk9fSU5URUdSQVRFRDwvY29uc3RhbnQ+LAorICAgICAgYW5kIHRoZSBtcHU0MDEtdWFydCBsYXllciB3aWxsIGFsbG9jYXRlIHRoZSBJL08gcG9ydHMgYnkgaXRzZWxmLiAKKyAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCVdoZW4gdGhlIGNvbnRyb2xsZXIgc3VwcG9ydHMgb25seSB0aGUgaW5wdXQgb3Igb3V0cHV0IE1JREkgc3RyZWFtLAorCXBhc3MgdGhlIDxjb25zdGFudD5NUFU0MDFfSU5GT19JTlBVVDwvY29uc3RhbnQ+IG9yCisJPGNvbnN0YW50Pk1QVTQwMV9JTkZPX09VVFBVVDwvY29uc3RhbnQ+IGJpdGZsYWcsIHJlc3BlY3RpdmVseS4KKwlUaGVuIHRoZSByYXdtaWRpIGluc3RhbmNlIGlzIGNyZWF0ZWQgYXMgYSBzaW5nbGUgc3RyZWFtLgorCTwvcGFyYT4KKworCTxwYXJhPgorCTxjb25zdGFudD5NUFU0MDFfSU5GT19NTUlPPC9jb25zdGFudD4gYml0ZmxhZyBpcyB1c2VkIHRvIGNoYW5nZQorCXRoZSBhY2Nlc3MgbWV0aG9kIHRvIE1NSU8gKHZpYSByZWFkYiBhbmQgd3JpdGViKSBpbnN0ZWFkIG9mCisJaW9iIGFuZCBvdXRiLiBJbiB0aGlzIGNhc2UsIHlvdSBoYXZlIHRvIHBhc3MgdGhlIGlvbWFwcGVkIGFkZHJlc3MKKwl0byA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uCisJPC9wYXJhPgorCisJPHBhcmE+CisJV2hlbiA8Y29uc3RhbnQ+TVBVNDAxX0lORk9fVFhfSVJRPC9jb25zdGFudD4gaXMgc2V0LCB0aGUgb3V0cHV0CisJc3RyZWFtIGlzbid0IGNoZWNrZWQgaW4gdGhlIGRlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXIuICBUaGUgZHJpdmVyCisJbmVlZHMgdG8gY2FsbCA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X2ludGVycnVwdF90eCgpPC9mdW5jdGlvbj4KKwlieSBpdHNlbGYgdG8gc3RhcnQgcHJvY2Vzc2luZyB0aGUgb3V0cHV0IHN0cmVhbSBpbiB0aGUgaXJxIGhhbmRsZXIuCisJPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVXN1YWxseSwgdGhlIHBvcnQgYWRkcmVzcyBjb3JyZXNwb25kcyB0byB0aGUgY29tbWFuZCBwb3J0IGFuZAorICAgICAgICBwb3J0ICsgMSBjb3JyZXNwb25kcyB0byB0aGUgZGF0YSBwb3J0LiBJZiBub3QsIHlvdSBtYXkgY2hhbmdlCisgICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+Y3BvcnQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorICAgICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX21wdTQwMTwvc3RydWN0bmFtZT4gbWFudWFsbHkgCisgICAgICAgIGFmdGVyd2FyZC4gSG93ZXZlciwgPHN0cnVjdG5hbWU+c25kX21wdTQwMTwvc3RydWN0bmFtZT4gcG9pbnRlciBpcyBub3QKKyAgICAgICAgcmV0dXJuZWQgZXhwbGljaXRseSBieQorICAgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIFlvdSBuZWVkIHRvIGNhc3QKKyAgICAgICAgcm1pZGktJmd0O3ByaXZhdGVfZGF0YSB0bworICAgICAgICA8c3RydWN0bmFtZT5zbmRfbXB1NDAxPC9zdHJ1Y3RuYW1lPiBleHBsaWNpdGx5LCAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1OworICBtcHUgPSBybWlkaS0+cHJpdmF0ZV9kYXRhOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgYW5kIHJlc2V0IHRoZSBjcG9ydCBhcyB5b3UgbGlrZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBtcHUtPmNwb3J0ID0gbXlfb3duX2NvbnRyb2xfcG9ydDsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDZ0aCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGlycSBudW1iZXIgZm9yIFVBUlQuIElmIHRoZSBpcnEKKyAgICAgIGlzIGFscmVhZHkgYWxsb2NhdGVkLCBwYXNzIDAgdG8gdGhlIDd0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aXJxX2ZsYWdzPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCBwYXNzIHRoZSBmbGFncworICAgICAgZm9yIGlycSBhbGxvY2F0aW9uIAorICAgICAgKDxjb25zdGFudD5TQV9YWFg8L2NvbnN0YW50PiBiaXRzKSB0byBpdCwgYW5kIHRoZSBpcnEgd2lsbCBiZQorICAgICAgcmVzZXJ2ZWQgYnkgdGhlIG1wdTQwMS11YXJ0IGxheWVyLiBJZiB0aGUgY2FyZCBkb2Vzbid0IGdlbmVyYXRlCisgICAgICBVQVJUIGludGVycnVwdHMsIHBhc3MgLTEgYXMgdGhlIGlycSBudW1iZXIuIFRoZW4gYSB0aW1lcgorICAgICAgaW50ZXJydXB0IHdpbGwgYmUgaW52b2tlZCBmb3IgcG9sbGluZy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj4KKyAgICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgaW50ZXJydXB0IGlzIGFsbG9jYXRlZCBpbgorICAgICAgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9uZXcoKTwvZnVuY3Rpb24+LCB0aGUgcHJpdmF0ZQorICAgICAgaW50ZXJydXB0IGhhbmRsZXIgaXMgdXNlZCwgaGVuY2UgeW91IGRvbid0IGhhdmUgYW55dGhpbmcgZWxzZSB0byBkbworICAgICAgdGhhbiBjcmVhdGluZyB0aGUgbXB1NDAxIHN0dWZmLiBPdGhlcndpc2UsIHlvdSBoYXZlIHRvIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPiBleHBsaWNpdGx5IHdoZW4KKyAgICAgIGEgVUFSVCBpbnRlcnJ1cHQgaXMgaW52b2tlZCBhbmQgY2hlY2tlZCBpbiB5b3VyIG93biBpbnRlcnJ1cHQKKyAgICAgIGhhbmRsZXIuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG5lZWQgdG8gcGFzcyB0aGUgcHJpdmF0ZV9kYXRhIG9mIHRoZQorICAgICAgICByZXR1cm5lZCByYXdtaWRpIG9iamVjdCBmcm9tCisgICAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPiBhcyB0aGUgc2Vjb25kCisgICAgICAgIGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX21wdTQwMV91YXJ0X2ludGVycnVwdChpcnEsIHJtaWRpLT5wcml2YXRlX2RhdGEsIHJlZ3MpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUmF3TUlESSBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJyYXdtaWRpLWludGVyZmFjZSI+CisgICAgPHRpdGxlPlJhd01JREkgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vdmVydmlldyI+CisgICAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByYXcgTUlESSBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgaGFyZHdhcmUgTUlESSBwb3J0cyB0aGF0IGNhbgorICAgICAgYmUgYWNjZXNzZWQgYXMgYSBieXRlIHN0cmVhbS4gIEl0IGlzIG5vdCB1c2VkIGZvciBzeW50aGVzaXplcgorICAgICAgY2hpcHMgdGhhdCBkbyBub3QgZGlyZWN0bHkgdW5kZXJzdGFuZCBNSURJLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFMU0EgaGFuZGxlcyBmaWxlIGFuZCBidWZmZXIgbWFuYWdlbWVudC4gIEFsbCB5b3UgaGF2ZSB0byBkbyBpcworICAgICAgdG8gd3JpdGUgc29tZSBjb2RlIHRvIG1vdmUgZGF0YSBiZXR3ZWVuIHRoZSBidWZmZXIgYW5kIHRoZQorICAgICAgaGFyZHdhcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIHJhd21pZGkgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcmF3bWlkaS5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRvIGNyZWF0ZSBhIHJhd21pZGkgZGV2aWNlLCBjYWxsIHRoZQorICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX25ldzwvZnVuY3Rpb24+IGZ1bmN0aW9uOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworICBlcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2hpcC0+Y2FyZCwgIk15TUlESSIsIDAsIG91dHMsIGlucywgJnJtaWRpKTsKKyAgaWYgKGVyciA8IDApCisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgcm1pZGktPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIHN0cmNweShybWlkaS0+bmFtZSwgIk15IE1JREkiKTsKKyAgcm1pZGktPmluZm9fZmxhZ3MgPSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIHwKKyAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfAorICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgICAgdGhlIElEIHN0cmluZy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoaXMgY29tcG9uZW50LiAgWW91IGNhbgorICAgICAgY3JlYXRlIHVwIHRvIDggcmF3bWlkaSBkZXZpY2VzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBmb3VydGggYW5kIGZpZnRoIGFyZ3VtZW50cyBhcmUgdGhlIG51bWJlciBvZiBvdXRwdXQgYW5kCisgICAgICBpbnB1dCBzdWJzdHJlYW1zLCByZXNwZWN0aXZlbHksIG9mIHRoaXMgZGV2aWNlIChhIHN1YnN0cmVhbSBpcworICAgICAgdGhlIGVxdWl2YWxlbnQgb2YgYSBNSURJIHBvcnQpLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFNldCB0aGUgPHN0cnVjdGZpZWxkPmluZm9fZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byBzcGVjaWZ5CisgICAgICB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UuCisgICAgICBTZXQgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19PVVRQVVQ8L2NvbnN0YW50PiBpZiB0aGVyZSBpcworICAgICAgYXQgbGVhc3Qgb25lIG91dHB1dCBwb3J0LAorICAgICAgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19JTlBVVDwvY29uc3RhbnQ+IGlmIHRoZXJlIGlzIGF0CisgICAgICBsZWFzdCBvbmUgaW5wdXQgcG9ydCwKKyAgICAgIGFuZCA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDwvY29uc3RhbnQ+IGlmIHRoZSBkZXZpY2UKKyAgICAgIGNhbiBoYW5kbGUgb3V0cHV0IGFuZCBpbnB1dCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFmdGVyIHRoZSByYXdtaWRpIGRldmljZSBpcyBjcmVhdGVkLCB5b3UgbmVlZCB0byBzZXQgdGhlCisgICAgICBvcGVyYXRvcnMgKGNhbGxiYWNrcykgZm9yIGVhY2ggc3Vic3RyZWFtLiAgVGhlcmUgYXJlIGhlbHBlcgorICAgICAgZnVuY3Rpb25zIHRvIHNldCB0aGUgb3BlcmF0b3JzIGZvciBhbGwgdGhlIHN1YnN0cmVhbXMgb2YgYSBkZXZpY2U6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwgJnNuZF9teW1pZGlfb3V0cHV0X29wcyk7CisgIHNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULCAmc25kX215bWlkaV9pbnB1dF9vcHMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIG9wZXJhdG9ycyBhcmUgdXN1YWxseSBkZWZpbmVkIGxpa2UgdGhpczoKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgc25kX215bWlkaV9vdXRwdXRfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgc25kX215bWlkaV9vdXRwdXRfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgIHNuZF9teW1pZGlfb3V0cHV0X2Nsb3NlLAorICAgICAgICAgIC50cmlnZ2VyID0gc25kX215bWlkaV9vdXRwdXRfdHJpZ2dlciwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBleHBsYWluZWQgaW4gdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPjxjaXRldGl0bGU+Q2FsbGJhY2tzPC9jaXRldGl0bGU+PC9saW5rPgorICAgICAgc2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBzdWJzdHJlYW0sIHlvdSBzaG91bGQgZ2l2ZSBhCisgICAgICB1bmlxdWUgbmFtZSB0byBlYWNoIG9mIHRoZW06CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKyAgbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcywKKyAgICAgICAgICAgICAgICAgICAgICBsaXN0IHsKKyAgICAgICAgICBzcHJpbnRmKHN1YnN0cmVhbS0+bmFtZSwgIk15IE1JREkgUG9ydCAlZCIsIHN1YnN0cmVhbS0+bnVtYmVyICsgMSk7CisgIH0KKyAgLyogc2FtZSBmb3IgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgKi8KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPgorICAgICAgPHRpdGxlPkNhbGxiYWNrczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgSW4gYWxsIHRoZSBjYWxsYmFja3MsIHRoZSBwcml2YXRlIGRhdGEgdGhhdCB5b3UndmUgc2V0IGZvciB0aGUKKyAgICAgIHJhd21pZGkgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCBhcworICAgICAgc3Vic3RyZWFtLSZndDtybWlkaS0mZ3Q7cHJpdmF0ZV9kYXRhLgorICAgICAgPCEtLSA8Y29kZT4gaXNuJ3QgYXZhaWxhYmxlIGJlZm9yZSBEb2NCb29rIDQuMyAtLT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBvcnQsIHlvdXIgY2FsbGJhY2tzIGNhbiBkZXRlcm1pbmUgdGhlCisgICAgICBwb3J0IGluZGV4IGZyb20gdGhlIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gZGF0YSBwYXNzZWQgdG8gZWFjaAorICAgICAgY2FsbGJhY2s6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKyAgaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLW9wZW4iPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHN1YnN0cmVhbSBpcyBvcGVuZWQuCisgICAgICAgIFlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgaGVyZSwgYnV0IHlvdSBzaG91bGRuJ3QKKyAgICAgICAgc3RhcnQgdHJhbnNtaXR0aW5nL3JlY2VpdmluZyBkYXRhIHlldC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtY2xvc2UiPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5jbG9zZTwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBHdWVzcyB3aGF0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+Y2xvc2U8L2Z1bmN0aW9uPgorICAgICAgICBjYWxsYmFja3Mgb2YgYSByYXdtaWRpIGRldmljZSBhcmUgc2VyaWFsaXplZCB3aXRoIGEgbXV0ZXgsCisgICAgICAgIGFuZCBjYW4gc2xlZXAuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLXRyaWdnZXItb3V0Ij4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGZvciBvdXRwdXQKKyAgICAgIHN1YnN0cmVhbXM8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF94eHhfb3V0cHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggYSBub256ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVyIHdoZW4gdGhlcmUgaXMgc29tZSBkYXRhIGluIHRoZSBzdWJzdHJlYW0gYnVmZmVyIHRoYXQKKyAgICAgICAgbXVzdCBiZSB0cmFuc21pdHRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUbyByZWFkIGRhdGEgZnJvbSB0aGUgYnVmZmVyLCBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrPC9mdW5jdGlvbj4uICBJdCB3aWxsCisgICAgICAgIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQ7IHRoaXMgd2lsbCBiZQorICAgICAgICBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZQorICAgICAgICBkYXRhIGluIHRoZSBidWZmZXIuCisgICAgICAgIEFmdGVyIHRoZSBkYXRhIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHksIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjazwvZnVuY3Rpb24+IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgZGF0YSBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdW5zaWduZWQgY2hhciBkYXRhOworICB3aGlsZSAoc25kX3Jhd21pZGlfdHJhbnNtaXRfcGVlayhzdWJzdHJlYW0sICZkYXRhLCAxKSA9PSAxKSB7CisgICAgICAgICAgaWYgKHNuZF9teWNoaXBfdHJ5X3RvX3RyYW5zbWl0KGRhdGEpKQorICAgICAgICAgICAgICAgICAgc25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrKHN1YnN0cmVhbSwgMSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGhhcmR3YXJlIEZJRk8gZnVsbCAqLworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGtub3cgYmVmb3JlaGFuZCB0aGF0IHRoZSBoYXJkd2FyZSB3aWxsIGFjY2VwdCBkYXRhLCB5b3UKKyAgICAgICAgY2FuIHVzZSB0aGUgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0PC9mdW5jdGlvbj4gZnVuY3Rpb24KKyAgICAgICAgd2hpY2ggcmVhZHMgc29tZSBkYXRhIGFuZCByZW1vdmVzIHRoZW0gZnJvbSB0aGUgYnVmZmVyIGF0IG9uY2U6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB3aGlsZSAoc25kX215Y2hpcF90cmFuc21pdF9wb3NzaWJsZSgpKSB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhOworICAgICAgICAgIGlmIChzbmRfcmF3bWlkaV90cmFuc21pdChzdWJzdHJlYW0sICZkYXRhLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgICAgIHNuZF9teWNoaXBfdHJhbnNtaXQoZGF0YSk7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIGhvdyBtYW55IGJ5dGVzIHlvdSBjYW4gYWNjZXB0LCB5b3UgY2FuCisgICAgICAgIHVzZSBhIGJ1ZmZlciBzaXplIGdyZWF0ZXIgdGhhbiBvbmUgd2l0aCB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0KjwvZnVuY3Rpb24+IGZ1bmN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcC4gIElmCisgICAgICAgIHRoZSBoYXJkd2FyZSBGSUZPIGlzIGZ1bGwgYmVmb3JlIHRoZSBzdWJzdHJlYW0gYnVmZmVyIGhhcyBiZWVuCisgICAgICAgIGVtcHRpZWQsIHlvdSBoYXZlIHRvIGNvbnRpbnVlIHRyYW5zbWl0dGluZyBkYXRhIGxhdGVyLCBlaXRoZXIKKyAgICAgICAgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIG9yIHdpdGggYSB0aW1lciBpZiB0aGUgaGFyZHdhcmUKKyAgICAgICAgZG9lc24ndCBoYXZlIGEgTUlESSB0cmFuc21pdCBpbnRlcnJ1cHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYQorICAgICAgICB6ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIHdoZW4gdGhlIHRyYW5zbWlzc2lvbgorICAgICAgICBvZiBkYXRhIHNob3VsZCBiZSBhYm9ydGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC10cmlnZ2VyLWluIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGZvciBpbnB1dAorICAgICAgc3Vic3RyZWFtczwvdGl0bGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgc25kX3h4eF9pbnB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IHVwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aXRoIGEgbm9uemVybyA8cGFyYW1ldGVyPnVwPC9wYXJhbWV0ZXI+CisgICAgICAgIHBhcmFtZXRlciB0byBlbmFibGUgcmVjZWl2aW5nIGRhdGEsIG9yIHdpdGggYSB6ZXJvCisgICAgICAgIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIGRvIGRpc2FibGUgcmVjZWl2aW5nIGRhdGEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgbXVzdCBub3Qgc2xlZXA7IHRoZQorICAgICAgICBhY3R1YWwgcmVhZGluZyBvZiBkYXRhIGZyb20gdGhlIGRldmljZSBpcyB1c3VhbGx5IGRvbmUgaW4gYW4KKyAgICAgICAgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBkYXRhIHJlY2VwdGlvbiBpcyBlbmFibGVkLCB5b3VyIGludGVycnVwdCBoYW5kbGVyIHNob3VsZAorICAgICAgICBjYWxsIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV9yZWNlaXZlPC9mdW5jdGlvbj4gZm9yIGFsbCByZWNlaXZlZAorICAgICAgICBkYXRhOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdm9pZCBzbmRfbXljaGlwX21pZGlfaW50ZXJydXB0KC4uLikKKyAgeworICAgICAgICAgIHdoaWxlIChteWNoaXBfbWlkaV9hdmFpbGFibGUoKSkgeworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhOworICAgICAgICAgICAgICAgICAgZGF0YSA9IG15Y2hpcF9taWRpX3JlYWQoKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9yYXdtaWRpX3JlY2VpdmUoc3Vic3RyZWFtLCAmZGF0YSwgMSk7CisgICAgICAgICAgfQorICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLWRyYWluIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+ZHJhaW48L2Z1bmN0aW9uPiBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgc25kX3h4eF9kcmFpbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIHdpdGggb3V0cHV0IHN1YnN0cmVhbXMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCB3YWl0CisgICAgICAgIHVudGlsIGFsbCBkYXRhIHJlYWQgZnJvbSB0aGUgc3Vic3RyZWFtIGJ1ZmZlciBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkZXZpY2UgY2FuIGJlIGNsb3NlZCBhbmQgdGhlIGRyaXZlciB1bmxvYWRlZAorICAgICAgICB3aXRob3V0IGxvc2luZyBkYXRhLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuIElmIHlvdSBkbyBub3Qgc2V0CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5kcmFpbjwvc3RydWN0ZmllbGQ+IGluIHRoZSBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzCisgICAgICAgIHN0cnVjdHVyZSwgQUxTQSB3aWxsIHNpbXBseSB3YWl0IGZvciA1MCZuYnNwO21pbGxpc2Vjb25kcworICAgICAgICBpbnN0ZWFkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTWlzY2VsbGFuZW91cyBEZXZpY2VzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibWlzYy1kZXZpY2VzIj4KKyAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBEZXZpY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtb3BsMyI+CisgICAgICA8dGl0bGU+Rk0gT1BMMzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEZNIE9QTDMgaXMgc3RpbGwgdXNlZCBpbiBtYW55IGNoaXBzIChtYWlubHkgZm9yIGJhY2t3YXJkCisgICAgICBjb21wYXRpYmlsaXR5KS4gQUxTQSBoYXMgYSBuaWNlIE9QTDMgRk0gY29udHJvbCBsYXllciwgdG9vLiBUaGUKKyAgICAgIE9QTDMgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvb3BsMy5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZNIHJlZ2lzdGVycyBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZGlyZWN0LUZNIEFQSSwKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmRfZm0uaCZndDs8L2ZpbGVuYW1lPi4gSW4KKyAgICAgIEFMU0EgbmF0aXZlIG1vZGUsIEZNIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaAorICAgICAgdGhlIEhhcmR3YXJlLURlcGVuZGFudCBEZXZpY2UgZGlyZWN0LUZNIGV4dGVuc2lvbiBBUEksIHdoZXJlYXMgaW4KKyAgICAgIE9TUyBjb21wYXRpYmxlIG1vZGUsIEZNIHJlZ2lzdGVycyBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgT1NTCisgICAgICBkaXJlY3QtRk0gY29tcGF0aWJsZSBBUEkgaW4gPGZpbGVuYW1lPi9kZXYvZG1mbVg8L2ZpbGVuYW1lPiBkZXZpY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gY3JlYXRlIHRoZSBPUEwzIGNvbXBvbmVudCwgeW91IGhhdmUgdHdvIGZ1bmN0aW9ucyB0bworICAgICAgICBjYWxsLiBUaGUgZmlyc3Qgb25lIGlzIGEgY29uc3RydWN0b3IgZm9yIHRoZSA8dHlwZT5vcGwzX3Q8L3R5cGU+CisgICAgICAgIGluc3RhbmNlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisgIHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBscG9ydCwgcnBvcnQsIE9QTDNfSFdfT1BMM19YWFgsCisgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkLCAmb3BsMyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUKKyAgICAgIGxlZnQgcG9ydCBhZGRyZXNzLCBhbmQgdGhlIHRoaXJkIGlzIHRoZSByaWdodCBwb3J0IGFkZHJlc3MuIEluCisgICAgICBtb3N0IGNhc2VzLCB0aGUgcmlnaHQgcG9ydCBpcyBwbGFjZWQgYXQgdGhlIGxlZnQgcG9ydCArIDIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvdXJ0aCBhcmd1bWVudCBpcyB0aGUgaGFyZHdhcmUgdHlwZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGxlZnQgYW5kIHJpZ2h0IHBvcnRzIGhhdmUgYmVlbiBhbHJlYWR5IGFsbG9jYXRlZCBieQorICAgICAgdGhlIGNhcmQgZHJpdmVyLCBwYXNzIG5vbi16ZXJvIHRvIHRoZSBmaWZ0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aW50ZWdyYXRlZDwvcGFyYW1ldGVyPikuIE90aGVyd2lzZSwgdGhlIG9wbDMgbW9kdWxlIHdpbGwKKyAgICAgIGFsbG9jYXRlIHRoZSBzcGVjaWZpZWQgcG9ydHMgYnkgaXRzZWxmLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUgcmVxdWlyZXMgc3BlY2lhbCBtZXRob2QKKyAgICAgICAgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgSS9PIGFjY2VzcywgeW91IGNhbiBjcmVhdGUgb3BsMyBpbnN0YW5jZQorICAgICAgICBzZXBhcmF0ZWx5IHdpdGggPGZ1bmN0aW9uPnNuZF9vcGwzX25ldygpPC9mdW5jdGlvbj4uCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9vcGwzICpvcGwzOworICBzbmRfb3BsM19uZXcoY2FyZCwgT1BMM19IV19PUEwzX1hYWCwgJm9wbDMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVRoZW4gc2V0IDxzdHJ1Y3RmaWVsZD5jb21tYW5kPC9zdHJ1Y3RmaWVsZD4sCisJPHN0cnVjdGZpZWxkPnByaXZhdGVfZGF0YTwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD5wcml2YXRlX2ZyZWU8L3N0cnVjdGZpZWxkPiBmb3IgdGhlIHByaXZhdGUKKwlhY2Nlc3MgZnVuY3Rpb24sIHRoZSBwcml2YXRlIGRhdGEgYW5kIHRoZSBkZXN0cnVjdG9yLgorCVRoZSBsX3BvcnQgYW5kIHJfcG9ydCBhcmUgbm90IG5lY2Vzc2FyaWx5IHNldC4gIE9ubHkgdGhlCisJY29tbWFuZCBtdXN0IGJlIHNldCBwcm9wZXJseS4gIFlvdSBjYW4gcmV0cmlldmUgdGhlIGRhdGEKKwlmcm9tIHRoZSBvcGwzLSZndDtwcml2YXRlX2RhdGEgZmllbGQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCUFmdGVyIGNyZWF0aW5nIHRoZSBvcGwzIGluc3RhbmNlIHZpYSA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPiwKKwljYWxsIDxmdW5jdGlvbj5zbmRfb3BsM19pbml0KCk8L2Z1bmN0aW9uPiB0byBpbml0aWFsaXplIHRoZSBjaGlwIHRvIHRoZQorCXByb3BlciBzdGF0ZS4gTm90ZSB0aGF0IDxmdW5jdGlvbj5zbmRfb3BsM19jcmVhdGUoKTwvZnVuY3Rpb24+IGFsd2F5cworCWNhbGxzIGl0IGludGVybmFsbHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgb3BsMyBpbnN0YW5jZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSwgdGhlbiBjcmVhdGUgYQorICAgICAgICBod2RlcCBkZXZpY2UgZm9yIHRoaXMgb3BsMy4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9od2RlcCAqb3BsM2h3ZGVwOworICBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgJm9wbDNod2RlcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgPHR5cGU+b3BsM190PC90eXBlPiBpbnN0YW5jZSB5b3UKKyAgICAgIGNyZWF0ZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBpbmRleCBudW1iZXIsIHVzdWFsbHkgMC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4LW9mZnNldCBmb3IgdGhlIHNlcXVlbmNlcgorICAgICAgY2xpZW50IGFzc2lnbmVkIHRvIHRoZSBPUEwzIHBvcnQuIFdoZW4gdGhlcmUgaXMgYW4gTVBVNDAxLVVBUlQsCisgICAgICBnaXZlIDEgZm9yIGhlcmUgKFVBUlQgYWx3YXlzIHRha2VzIDApLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLWhhcmR3YXJlLWRlcGVuZGVudCI+CisgICAgICA8dGl0bGU+SGFyZHdhcmUtRGVwZW5kZW50IERldmljZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgY2hpcHMgbmVlZCB1c2VyLXNwYWNlIGFjY2VzcyBmb3Igc3BlY2lhbAorICAgICAgY29udHJvbHMgb3IgZm9yIGxvYWRpbmcgdGhlIG1pY3JvIGNvZGUuIEluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuCisgICAgICBjcmVhdGUgYSBod2RlcCAoaGFyZHdhcmUtZGVwZW5kZW50KSBkZXZpY2UuIFRoZSBod2RlcCBBUEkgaXMKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9od2RlcC5oJmd0OzwvZmlsZW5hbWU+LiBZb3UgY2FuCisgICAgICBmaW5kIGV4YW1wbGVzIGluIG9wbDMgZHJpdmVyIG9yCisgICAgICA8ZmlsZW5hbWU+aXNhL3NiL3NiMTZfY3NwLmM8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY3JlYXRpb24gb2YgdGhlIDx0eXBlPmh3ZGVwPC90eXBlPiBpbnN0YW5jZSBpcyBkb25lIHZpYQorICAgICAgICA8ZnVuY3Rpb24+c25kX2h3ZGVwX25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfaHdkZXAgKmh3OworICBzbmRfaHdkZXBfbmV3KGNhcmQsICJNeSBIV0RFUCIsIDAsICZodyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4IG51bWJlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdGhlbiBwYXNzIGFueSBwb2ludGVyIHZhbHVlIHRvIHRoZQorICAgICAgICA8cGFyYW1ldGVyPnByaXZhdGVfZGF0YTwvcGFyYW1ldGVyPi4KKyAgICAgICAgSWYgeW91IGFzc2lnbiBhIHByaXZhdGUgZGF0YSwgeW91IHNob3VsZCBkZWZpbmUgdGhlCisgICAgICAgIGRlc3RydWN0b3IsIHRvby4gVGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluCisgICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9mcmVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuICAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKyAgaHctPnByaXZhdGVfZGF0YSA9IHA7CisgIGh3LT5wcml2YXRlX2ZyZWUgPSBteWRhdGFfZnJlZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlc3RydWN0b3Igd291bGQgYmU6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXlkYXRhX2ZyZWUoc3RydWN0IHNuZF9od2RlcCAqaHcpCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXlkYXRhICpwID0gaHctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICBrZnJlZShwKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYXJiaXRyYXJ5IGZpbGUgb3BlcmF0aW9ucyBjYW4gYmUgZGVmaW5lZCBmb3IgdGhpcworICAgICAgICBpbnN0YW5jZS4gVGhlIGZpbGUgb3BlcmF0b3JzIGFyZSBkZWZpbmVkIGluCisgICAgICAgIHRoZSA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiB0YWJsZS4gRm9yIGV4YW1wbGUsIGFzc3VtZSB0aGF0CisgICAgICAgIHRoaXMgY2hpcCBuZWVkcyBhbiBpb2N0bC4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaHctPm9wcy5vcGVuID0gbXlkYXRhX29wZW47CisgIGh3LT5vcHMuaW9jdGwgPSBteWRhdGFfaW9jdGw7CisgIGh3LT5vcHMucmVsZWFzZSA9IG15ZGF0YV9yZWxlYXNlOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgQW5kIGltcGxlbWVudCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHlvdSBsaWtlLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtSUVDOTU4Ij4KKyAgICAgIDx0aXRsZT5JRUM5NTggKFMvUERJRik8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFVzdWFsbHkgdGhlIGNvbnRyb2xzIGZvciBJRUM5NTggZGV2aWNlcyBhcmUgaW1wbGVtZW50ZWQgdmlhCisgICAgICB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFRoZXJlIGlzIGEgbWFjcm8gdG8gY29tcG9zZSBhIG5hbWUgc3RyaW5nIGZvcgorICAgICAgSUVDOTU4IGNvbnRyb2xzLCA8ZnVuY3Rpb24+U05EUlZfQ1RMX05BTUVfSUVDOTU4KCk8L2Z1bmN0aW9uPgorICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O2luY2x1ZGUvYXNvdW5kLmgmZ3Q7PC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGNvbnRyb2xzIGZvciBJRUM5NTggc3RhdHVzIGJpdHMuIFRoZXNlCisgICAgICBjb250cm9scyB1c2UgdGhlIHR5cGUgPHR5cGU+U05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg8L3R5cGU+LAorICAgICAgYW5kIHRoZSBzaXplIG9mIGVsZW1lbnQgaXMgZml4ZWQgYXMgNCBieXRlcyBhcnJheQorICAgICAgKHZhbHVlLmllYzk1OC5zdGF0dXNbeF0pLiBGb3IgdGhlIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4KKyAgICAgIGNhbGxiYWNrLCB5b3UgZG9uJ3Qgc3BlY2lmeSAKKyAgICAgIHRoZSB2YWx1ZSBmaWVsZCBmb3IgdGhpcyB0eXBlICh0aGUgY291bnQgZmllbGQgbXVzdCBiZSBzZXQsCisgICAgICB0aG91Z2gpLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxxdW90ZT5JRUM5NTggUGxheWJhY2sgQ29uIE1hc2s8L3F1b3RlPiBpcyB1c2VkIHRvIHJldHVybiB0aGUKKyAgICAgIGJpdC1tYXNrIGZvciB0aGUgSUVDOTU4IHN0YXR1cyBiaXRzIG9mIGNvbnN1bWVyIG1vZGUuIFNpbWlsYXJseSwKKyAgICAgIDxxdW90ZT5JRUM5NTggUGxheWJhY2sgUHJvIE1hc2s8L3F1b3RlPiByZXR1cm5zIHRoZSBiaXRtYXNrIGZvcgorICAgICAgcHJvZmVzc2lvbmFsIG1vZGUuIFRoZXkgYXJlIHJlYWQtb25seSBjb250cm9scywgYW5kIGFyZSBkZWZpbmVkCisgICAgICBhcyBNSVhFUiBjb250cm9scyAoaWZhY2UgPQorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSPC9jb25zdGFudD4pLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBNZWFud2hpbGUsIDxxdW90ZT5JRUM5NTggUGxheWJhY2sgRGVmYXVsdDwvcXVvdGU+IGNvbnRyb2wgaXMKKyAgICAgIGRlZmluZWQgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIGN1cnJlbnQgZGVmYXVsdCBJRUM5NTgKKyAgICAgIGJpdHMuIE5vdGUgdGhhdCB0aGlzIG9uZSBpcyB1c3VhbGx5IGRlZmluZWQgYXMgYSBQQ00gY29udHJvbAorICAgICAgKGlmYWNlID0gPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTTwvY29uc3RhbnQ+KSwKKyAgICAgIGFsdGhvdWdoIGluIHNvbWUgcGxhY2VzIGl0J3MgZGVmaW5lZCBhcyBhIE1JWEVSIGNvbnRyb2wuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gYWRkaXRpb24sIHlvdSBjYW4gZGVmaW5lIHRoZSBjb250cm9sIHN3aXRjaGVzIHRvCisgICAgICBlbmFibGUvZGlzYWJsZSBvciB0byBzZXQgdGhlIHJhdyBiaXQgbW9kZS4gVGhlIGltcGxlbWVudGF0aW9uCisgICAgICB3aWxsIGRlcGVuZCBvbiB0aGUgY2hpcCwgYnV0IHRoZSBjb250cm9sIHNob3VsZCBiZSBuYW1lZCBhcworICAgICAgPHF1b3RlPklFQzk1OCB4eHg8L3F1b3RlPiwgcHJlZmVyYWJseSB1c2luZworICAgICAgdGhlIDxmdW5jdGlvbj5TTkRSVl9DVExfTkFNRV9JRUM5NTgoKTwvZnVuY3Rpb24+IG1hY3JvLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBzZXZlcmFsIGNhc2VzLCBmb3IgZXhhbXBsZSwKKyAgICAgIDxmaWxlbmFtZT5wY2kvZW11MTBrMTwvZmlsZW5hbWU+LAorICAgICAgPGZpbGVuYW1lPnBjaS9pY2UxNzEyPC9maWxlbmFtZT4sIG9yCisgICAgICA8ZmlsZW5hbWU+cGNpL2NtaXBjaS5jPC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBCdWZmZXIgYW5kIE1lbW9yeSBNYW5hZ2VtZW50ICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYnVmZmVyLWFuZC1tZW1vcnkiPgorICAgIDx0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS1idWZmZXItdHlwZXMiPgorICAgICAgPHRpdGxlPkJ1ZmZlciBUeXBlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgQUxTQSBwcm92aWRlcyBzZXZlcmFsIGRpZmZlcmVudCBidWZmZXIgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAgICAgIGRlcGVuZGluZyBvbiB0aGUgYnVzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLiBBbGwgdGhlc2UgaGF2ZSBhCisgICAgICBjb25zaXN0ZW50IEFQSS4gVGhlIGFsbG9jYXRpb24gb2YgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzIGlzCisgICAgICBkb25lIHZpYSAKKyAgICAgIDxmdW5jdGlvbj5zbmRfbWFsbG9jX3h4eF9wYWdlcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoZXJlIHh4eAorICAgICAgaXMgdGhlIGJ1cyB0eXBlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIHBhZ2VzIHdpdGggZmFsbGJhY2sgaXMKKyAgICAgIDxmdW5jdGlvbj5zbmRfbWFsbG9jX3h4eF9wYWdlc19mYWxsYmFjaygpPC9mdW5jdGlvbj4uIFRoaXMKKyAgICAgIGZ1bmN0aW9uIHRyaWVzIHRvIGFsbG9jYXRlIHRoZSBzcGVjaWZpZWQgcGFnZXMgYnV0IGlmIHRoZSBwYWdlcworICAgICAgYXJlIG5vdCBhdmFpbGFibGUsIGl0IHRyaWVzIHRvIHJlZHVjZSB0aGUgcGFnZSBzaXplcyB1bnRpbAorICAgICAgZW5vdWdoIHNwYWNlIGlzIGZvdW5kLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByZWxlYXNlIHRoZSBwYWdlcywgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9mcmVlX3h4eF9wYWdlcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFVzdWFsbHksIEFMU0EgZHJpdmVycyB0cnkgdG8gYWxsb2NhdGUgYW5kIHJlc2VydmUKKyAgICAgICBhIGxhcmdlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgc3BhY2UKKyAgICAgICBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCBmb3IgdGhlIGxhdGVyIHVzZS4KKyAgICAgICBUaGlzIGlzIGNhbGxlZCA8cXVvdGU+cHJlLWFsbG9jYXRpb248L3F1b3RlPi4KKyAgICAgICBBcyBhbHJlYWR5IHdyaXR0ZW4sIHlvdSBjYW4gY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGF0IAorICAgICAgIHBjbSBpbnN0YW5jZSBjb25zdHJ1Y3Rpb24gdGltZSAoaW4gdGhlIGNhc2Ugb2YgUENJIGJ1cykuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShwY2kpLCBzaXplLCBtYXgpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGlzIHRoZSBieXRlIHNpemUgdG8gYmUKKyAgICAgIHByZS1hbGxvY2F0ZWQgYW5kIHRoZSA8cGFyYW1ldGVyPm1heDwvcGFyYW1ldGVyPiBpcyB0aGUgbWF4aW11bQorICAgICAgc2l6ZSB0byBiZSBjaGFuZ2VkIHZpYSB0aGUgPGZpbGVuYW1lPnByZWFsbG9jPC9maWxlbmFtZT4gcHJvYyBmaWxlLgorICAgICAgVGhlIGFsbG9jYXRvciB3aWxsIHRyeSB0byBnZXQgYW4gYXJlYSBhcyBsYXJnZSBhcyBwb3NzaWJsZQorICAgICAgd2l0aGluIHRoZSBnaXZlbiBzaXplLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgc2Vjb25kIGFyZ3VtZW50ICh0eXBlKSBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IChkZXZpY2UgcG9pbnRlcikKKyAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlIGJ1cy4KKyAgICAgIEluIHRoZSBjYXNlIG9mIHRoZSBJU0EgYnVzLCBwYXNzIDxmdW5jdGlvbj5zbmRfZG1hX2lzYV9kYXRhKCk8L2Z1bmN0aW9uPgorICAgICAgYXMgdGhlIHRoaXJkIGFyZ3VtZW50IHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVjwvY29uc3RhbnQ+IHR5cGUuCisgICAgICBGb3IgdGhlIGNvbnRpbnVvdXMgYnVmZmVyIHVucmVsYXRlZCB0byB0aGUgYnVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkCisgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gdHlwZSBhbmQgdGhlCisgICAgICA8ZnVuY3Rpb24+c25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCk8L2Z1bmN0aW9uPiBkZXZpY2UgcG9pbnRlciwKKyAgICAgIHdoZXJlIDxjb25zdGFudD5HRlBfS0VSTkVMPC9jb25zdGFudD4gaXMgdGhlIGtlcm5lbCBhbGxvY2F0aW9uIGZsYWcgdG8KKyAgICAgIHVzZS4KKyAgICAgIEZvciB0aGUgUENJIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMsIHVzZQorICAgICAgPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVl9TRzwvY29uc3RhbnQ+IHdpdGgKKyAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX3BjaV9kYXRhKHBjaSk8L2Z1bmN0aW9uPgorICAgICAgKHNlZSB0aGUgCisgICAgICAgICAgPGxpbmsgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnktbm9uLWNvbnRpZ3VvdXMiPjxjaXRldGl0bGU+Tm9uLUNvbnRpZ3VvdXMgQnVmZmVycworICAgICAgICAgIDwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbikuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBPbmNlIHRoZSBidWZmZXIgaXMgcHJlLWFsbG9jYXRlZCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgIGFsbG9jYXRvciBpbiB0aGUgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBzaXplKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byBwcmUtYWxsb2NhdGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWV4dGVybmFsLWhhcmR3YXJlIj4KKyAgICAgIDx0aXRsZT5FeHRlcm5hbCBIYXJkd2FyZSBCdWZmZXJzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIGNoaXBzIGhhdmUgdGhlaXIgb3duIGhhcmR3YXJlIGJ1ZmZlcnMgYW5kIHRoZSBETUEKKyAgICAgIHRyYW5zZmVyIGZyb20gdGhlIGhvc3QgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuIEluIHN1Y2ggYSBjYXNlLAorICAgICAgeW91IG5lZWQgdG8gZWl0aGVyIDEpIGNvcHkvc2V0IHRoZSBhdWRpbyBkYXRhIGRpcmVjdGx5IHRvIHRoZQorICAgICAgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLCBvciAyKSBtYWtlIGFuIGludGVybWVkaWF0ZSBidWZmZXIgYW5kCisgICAgICBjb3B5L3NldCB0aGUgZGF0YSBmcm9tIGl0IHRvIHRoZSBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIgaW4KKyAgICAgIGludGVycnVwdHMgKG9yIGluIHRhc2tsZXRzLCBwcmVmZXJhYmx5KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBjYXNlIHdvcmtzIGZpbmUgaWYgdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpcyBsYXJnZQorICAgICAgZW5vdWdoLiAgVGhpcyBtZXRob2QgZG9lc24ndCBuZWVkIGFueSBleHRyYSBidWZmZXJzIGFuZCB0aHVzIGlzCisgICAgICBtb3JlIGVmZmVjdGl2ZS4gWW91IG5lZWQgdG8gZGVmaW5lIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGZvciAKKyAgICAgIHRoZSBkYXRhIHRyYW5zZmVyLiBIb3dldmVyLCB0aGVyZSBpcyBhIGRyYXdiYWNrOiBpdCBjYW5ub3QKKyAgICAgIGJlIG1tYXBwZWQuIFRoZSBleGFtcGxlcyBhcmUgR1VTJ3MgR0YxIFBDTSBvciBlbXU4MDAwJ3MKKyAgICAgIHdhdmV0YWJsZSBQQ00uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHNlY29uZCBjYXNlIGFsbG93cyBmb3IgbW1hcCBvbiB0aGUgYnVmZmVyLCBhbHRob3VnaCB5b3UgaGF2ZQorICAgICAgdG8gaGFuZGxlIGFuIGludGVycnVwdCBvciBhIHRhc2tsZXQgdG8gdHJhbnNmZXIgdGhlIGRhdGEKKyAgICAgIGZyb20gdGhlIGludGVybWVkaWF0ZSBidWZmZXIgdG8gdGhlIGhhcmR3YXJlIGJ1ZmZlci4gWW91IGNhbiBmaW5kIGFuCisgICAgICBleGFtcGxlIGluIHRoZSB2eHBvY2tldCBkcml2ZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBjYXNlIGlzIHdoZW4gdGhlIGNoaXAgdXNlcyBhIFBDSSBtZW1vcnktbWFwCisgICAgICByZWdpb24gZm9yIHRoZSBidWZmZXIgaW5zdGVhZCBvZiB0aGUgaG9zdCBtZW1vcnkuIEluIHRoaXMgY2FzZSwKKyAgICAgIG1tYXAgaXMgYXZhaWxhYmxlIG9ubHkgb24gY2VydGFpbiBhcmNoaXRlY3R1cmVzIGxpa2UgdGhlIEludGVsIG9uZS4KKyAgICAgIEluIG5vbi1tbWFwIG1vZGUsIHRoZSBkYXRhIGNhbm5vdCBiZSB0cmFuc2ZlcnJlZCBhcyBpbiB0aGUgbm9ybWFsCisgICAgICB3YXkuIFRodXMgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgYXMgd2VsbCwgCisgICAgICBhcyBpbiB0aGUgY2FzZXMgYWJvdmUuIFRoZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KKyAgICAgIDxmaWxlbmFtZT5ybWUzMi5jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5ybWU5Ni5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgICA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcyBkZXBlbmRzIHVwb24gCisgICAgICAgIHdoZXRoZXIgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIGludGVybGVhdmVkIG9yIG5vbi1pbnRlcmxlYXZlZAorICAgICAgICBzYW1wbGVzLiBUaGUgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcworICAgICAgICBkZWZpbmVkIGxpa2UgYmVsb3csIGEgYml0IAorICAgICAgICBkaWZmZXJlbnRseSBkZXBlbmRpbmcgd2hldGhlciB0aGUgZGlyZWN0aW9uIGlzIHBsYXliYWNrIG9yCisgICAgICAgIGNhcHR1cmU6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgcGxheWJhY2tfY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKnNyYywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworICBzdGF0aWMgaW50IGNhcHR1cmVfY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKmRzdCwgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBpbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgc2Vjb25kIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5jaGFubmVsPC9wYXJhbWV0ZXI+KSBpcyBub3QgdXNlZC4gVGhlIHRoaXJkIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIHBvaW50cyB0aGUgCisgICAgICBjdXJyZW50IHBvc2l0aW9uIG9mZnNldCBpbiBmcmFtZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1lYW5pbmcgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBpcyBkaWZmZXJlbnQgYmV0d2VlbgorICAgICAgcGxheWJhY2sgYW5kIGNhcHR1cmUuIEZvciBwbGF5YmFjaywgaXQgaG9sZHMgdGhlIHNvdXJjZSBkYXRhCisgICAgICBwb2ludGVyLCBhbmQgZm9yIGNhcHR1cmUsIGl0J3MgdGhlIGRlc3RpbmF0aW9uIGRhdGEgcG9pbnRlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBiZSBjb3BpZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGF0IHlvdSBoYXZlIHRvIGRvIGluIHRoaXMgY2FsbGJhY2sgaXMgYWdhaW4gZGlmZmVyZW50CisgICAgICAgIGJldHdlZW4gcGxheWJhY2sgYW5kIGNhcHR1cmUgZGlyZWN0aW9ucy4gSW4gdGhlCisgICAgICAgIHBsYXliYWNrIGNhc2UsIHlvdSBjb3B5IHRoZSBnaXZlbiBhbW91bnQgb2YgZGF0YQorICAgICAgICAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgYXQgdGhlIHNwZWNpZmllZCBwb2ludGVyCisgICAgICAgICg8cGFyYW1ldGVyPnNyYzwvcGFyYW1ldGVyPikgdG8gdGhlIHNwZWNpZmllZCBvZmZzZXQKKyAgICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUgYnVmZmVyLiBXaGVuCisgICAgICAgIGNvZGVkIGxpa2UgbWVtY3B5LWxpa2Ugd2F5LCB0aGUgY29weSB3b3VsZCBiZSBsaWtlOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteV9tZW1jcHkobXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksIHNyYywKKyAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgdGhlIGNhcHR1cmUgZGlyZWN0aW9uLCB5b3UgY29weSB0aGUgZ2l2ZW4gYW1vdW50IG9mCisgICAgICAgIGRhdGEgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CisgICAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlIGJ1ZmZlciB0byB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHBvaW50ZXIgKDxwYXJhbWV0ZXI+ZHN0PC9wYXJhbWV0ZXI+KS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXlfbWVtY3B5KGRzdCwgbXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCBib3RoIHRoZSBwb3NpdGlvbiBhbmQgdGhlIGFtb3VudCBvZiBkYXRhIGFyZSBnaXZlbgorICAgICAgaW4gZnJhbWVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgIHdpbGwgYmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgbmVlZCB0byBjaGVjayB0aGUgY2hhbm5lbCBhcmd1bWVudCwgYW5kIGlmIGl0J3MgLTEsIGNvcHkKKyAgICAgIHRoZSB3aG9sZSBjaGFubmVscy4gT3RoZXJ3aXNlLCB5b3UgaGF2ZSB0byBjb3B5IG9ubHkgdGhlCisgICAgICBzcGVjaWZpZWQgY2hhbm5lbC4gUGxlYXNlIGNoZWNrCisgICAgICA8ZmlsZW5hbWU+aXNhL2d1cy9ndXNfcGNtLmM8L2ZpbGVuYW1lPiBhcyBhbiBleGFtcGxlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIGFsc28KKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gYSBzaW1pbGFyIHdheS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzaWxlbmNlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbWVhbmluZ3Mgb2YgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gCisgICAgICBjYWxsYmFjaywgYWx0aG91Z2ggdGhlcmUgaXMgbm8gPHBhcmFtZXRlcj5zcmMvZHN0PC9wYXJhbWV0ZXI+CisgICAgICBhcmd1bWVudC4gSW4gdGhlIGNhc2Ugb2YgaW50ZXJsZWF2ZWQgc2FtcGxlcywgdGhlIGNoYW5uZWwKKyAgICAgIGFyZ3VtZW50IGhhcyBubyBtZWFuaW5nLCBhcyB3ZWxsIGFzIG9uCisgICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcm9sZSBvZiA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHRvCisgICAgICAgIHNldCB0aGUgZ2l2ZW4gYW1vdW50IAorICAgICAgICAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgb2Ygc2lsZW5jZSBkYXRhIGF0IHRoZQorICAgICAgICBzcGVjaWZpZWQgb2Zmc2V0ICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlCisgICAgICAgIGJ1ZmZlci4gU3VwcG9zZSB0aGF0IHRoZSBkYXRhIGZvcm1hdCBpcyBzaWduZWQgKHRoYXQgaXMsIHRoZQorICAgICAgICBzaWxlbnQtZGF0YSBpcyAwKSwgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBhIG1lbXNldC1saWtlCisgICAgICAgIGZ1bmN0aW9uIHdvdWxkIGJlIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgMCwKKyAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBub24taW50ZXJsZWF2ZWQgc2FtcGxlcywgYWdhaW4sIHRoZQorICAgICAgaW1wbGVtZW50YXRpb24gYmVjb21lcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiBTZWUsIGZvciBleGFtcGxlLAorICAgICAgPGZpbGVuYW1lPmlzYS9ndXMvZ3VzX3BjbS5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS1ub24tY29udGlndW91cyI+CisgICAgICA8dGl0bGU+Tm9uLUNvbnRpZ3VvdXMgQnVmZmVyczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91ciBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgcGFnZSB0YWJsZSBhcyBpbiBlbXUxMGsxIG9yIHRoZQorICAgICAgYnVmZmVyIGRlc2NyaXB0b3JzIGFzIGluIHZpYTgyeHgsIHlvdSBjYW4gdXNlIHRoZSBzY2F0dGVyLWdhdGhlcgorICAgICAgKFNHKSBETUEuIEFMU0EgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBoYW5kbGluZyBTRy1idWZmZXJzLgorICAgICAgVGhlIEFQSSBpcyBwcm92aWRlZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbS5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyB0aGUgU0ctYnVmZmVyIGhhbmRsZXIsIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzKCk8L2Z1bmN0aW9uPiBvcgorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbCgpPC9mdW5jdGlvbj4KKyAgICAgICAgd2l0aCA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWX1NHPC9jb25zdGFudD4KKwlpbiB0aGUgUENNIGNvbnN0cnVjdG9yIGxpa2Ugb3RoZXIgUENJIHByZS1hbGxvY2F0b3IuCisgICAgICAgIFlvdSBuZWVkIHRvIHBhc3MgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+LAorICAgICAgICB3aGVyZSBwY2kgaXMgdGhlIHN0cnVjdCA8c3RydWN0bmFtZT5wY2lfZGV2PC9zdHJ1Y3RuYW1lPiBwb2ludGVyCisgICAgICAgIG9mIHRoZSBjaGlwIGFzIHdlbGwuCisgICAgICAgIFRoZSA8dHlwZT5zdHJ1Y3Qgc25kX3NnX2J1ZjwvdHlwZT4gaW5zdGFuY2UgaXMgY3JlYXRlZCBhcworICAgICAgICBzdWJzdHJlYW0tJmd0O2RtYV9wcml2YXRlLiBZb3UgY2FuIGNhc3QKKyAgICAgICAgdGhlIHBvaW50ZXIgbGlrZTogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9zZ19idWYgKnNnYnVmID0gKHN0cnVjdCBzbmRfc2dfYnVmICopc3Vic3RyZWFtLT5kbWFfcHJpdmF0ZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlbiBjYWxsIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+CisgICAgICBpbiB0aGUgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrCisgICAgICBhcyB3ZWxsIGFzIGluIHRoZSBjYXNlIG9mIG5vcm1hbCBQQ0kgYnVmZmVyLgorICAgICAgVGhlIFNHLWJ1ZmZlciBoYW5kbGVyIHdpbGwgYWxsb2NhdGUgdGhlIG5vbi1jb250aWd1b3VzIGtlcm5lbAorICAgICAgcGFnZXMgb2YgdGhlIGdpdmVuIHNpemUgYW5kIG1hcCB0aGVtIG9udG8gdGhlIHZpcnR1YWxseSBjb250aWd1b3VzCisgICAgICBtZW1vcnkuICBUaGUgdmlydHVhbCBwb2ludGVyIGlzIGFkZHJlc3NlZCBpbiBydW50aW1lLSZndDtkbWFfYXJlYS4KKyAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIChydW50aW1lLSZndDtkbWFfYWRkcikgaXMgc2V0IHRvIHplcm8sCisgICAgICBiZWNhdXNlIHRoZSBidWZmZXIgaXMgcGh5c2ljYWxseSBub24tY29udGlnb3VzLgorICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgdGFibGUgaXMgc2V0IHVwIGluIHNnYnVmLSZndDt0YWJsZS4KKyAgICAgIFlvdSBjYW4gZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IGEgY2VydGFpbiBvZmZzZXQgdmlhCisgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9zZ2J1Zl9nZXRfYWRkcigpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBhIFNHLWhhbmRsZXIgaXMgdXNlZCwgeW91IG5lZWQgdG8gc2V0CisgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9zZ2J1Zl9vcHNfcGFnZTwvZnVuY3Rpb24+IGFzCisgICAgICB0aGUgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKyAgICAgIChTZWUgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+CisgICAgICA8Y2l0ZXRpdGxlPnBhZ2UgY2FsbGJhY2sgc2VjdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uKQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gcmVsZWFzZSB0aGUgZGF0YSwgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2ZyZWVfcGFnZXMoKTwvZnVuY3Rpb24+IGluIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmh3X2ZyZWU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBhcyB1c3VhbC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktdm1hbGxvY2VkIj4KKyAgICAgIDx0aXRsZT5WbWFsbG9jJ2VkIEJ1ZmZlcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0J3MgcG9zc2libGUgdG8gdXNlIGEgYnVmZmVyIGFsbG9jYXRlZCB2aWEKKyAgICAgIDxmdW5jdGlvbj52bWFsbG9jPC9mdW5jdGlvbj4sIGZvciBleGFtcGxlLCBmb3IgYW4gaW50ZXJtZWRpYXRlCisgICAgICBidWZmZXIuIFNpbmNlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIG5vdCBjb250aWd1b3VzLCB5b3UgbmVlZAorICAgICAgdG8gc2V0IHRoZSA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIHRvIG9idGFpbgorICAgICAgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXQgZXZlcnkgb2Zmc2V0LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrCisgICAgICAgIHdvdWxkIGJlIGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworICAvKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCisgIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbXljaGlwX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCisgIHsKKyAgICAgICAgICB2b2lkICpwYWdlcHRyID0gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKKyAgICAgICAgICByZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQcm9jIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InByb2MtaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+UHJvYyBJbnRlcmZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQUxTQSBwcm92aWRlcyBhbiBlYXN5IGludGVyZmFjZSBmb3IgcHJvY2ZzLiBUaGUgcHJvYyBmaWxlcyBhcmUKKyAgICAgIHZlcnkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIEkgcmVjb21tZW5kIHlvdSBzZXQgdXAgcHJvYyBmaWxlcyBpZgorICAgICAgeW91IHdyaXRlIGEgZHJpdmVyIGFuZCB3YW50IHRvIGdldCBhIHJ1bm5pbmcgc3RhdHVzIG9yIHJlZ2lzdGVyCisgICAgICBkdW1wcy4gVGhlIEFQSSBpcyBmb3VuZCBpbgorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9pbmZvLmgmZ3Q7PC9maWxlbmFtZT4uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVG8gY3JlYXRlIGEgcHJvYyBmaWxlLCBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcHJvY19uZXcoKTwvZnVuY3Rpb24+LiAKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CisgIGludCBlcnIgPSBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAibXktZmlsZSIsICZlbnRyeSk7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcHJvYyBmaWxlIHRvIGJlCisgICAgY3JlYXRlZC4gVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBjcmVhdGUgYSBmaWxlCisgICAgPGZpbGVuYW1lPm15LWZpbGU8L2ZpbGVuYW1lPiB1bmRlciB0aGUgY2FyZCBkaXJlY3RvcnksCisgICAgZS5nLiA8ZmlsZW5hbWU+L3Byb2MvYXNvdW5kL2NhcmQwL215LWZpbGU8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgTGlrZSBvdGhlciBjb21wb25lbnRzLCB0aGUgcHJvYyBlbnRyeSBjcmVhdGVkIHZpYQorICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9wcm9jX25ldygpPC9mdW5jdGlvbj4gd2lsbCBiZSByZWdpc3RlcmVkIGFuZAorICAgIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgaW4gdGhlIGNhcmQgcmVnaXN0cmF0aW9uIGFuZCByZWxlYXNlCisgICAgZnVuY3Rpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY3JlYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGZ1bmN0aW9uIHN0b3JlcyBhIG5ldworICAgIGluc3RhbmNlIGluIHRoZSBwb2ludGVyIGdpdmVuIGluIHRoZSB0aGlyZCBhcmd1bWVudC4KKyAgICBJdCBpcyBpbml0aWFsaXplZCBhcyBhIHRleHQgcHJvYyBmaWxlIGZvciByZWFkIG9ubHkuICBUbyB1c2UKKyAgICB0aGlzIHByb2MgZmlsZSBhcyBhIHJlYWQtb25seSB0ZXh0IGZpbGUgYXMgaXQgaXMsIHNldCB0aGUgcmVhZAorICAgIGNhbGxiYWNrIHdpdGggYSBwcml2YXRlIGRhdGEgdmlhIAorICAgICA8ZnVuY3Rpb24+c25kX2luZm9fc2V0X3RleHRfb3BzKCk8L2Z1bmN0aW9uPi4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgbXlfcHJvY19yZWFkKTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgCisgICAgd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5jaGlwPC9wYXJhbWV0ZXI+KSBpcyB0aGUKKyAgICBwcml2YXRlIGRhdGEgdG8gYmUgdXNlZCBpbiB0aGUgY2FsbGJhY2tzLiBUaGUgdGhpcmQgcGFyYW1ldGVyCisgICAgc3BlY2lmaWVzIHRoZSByZWFkIGJ1ZmZlciBzaXplIGFuZCB0aGUgZm91cnRoCisgICAgKDxwYXJhbWV0ZXI+bXlfcHJvY19yZWFkPC9wYXJhbWV0ZXI+KSBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoCisgICAgaXMgZGVmaW5lZCBsaWtlCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIEluIHRoZSByZWFkIGNhbGxiYWNrLCB1c2UgPGZ1bmN0aW9uPnNuZF9pcHJpbnRmKCk8L2Z1bmN0aW9uPiBmb3IKKyAgICBvdXRwdXQgc3RyaW5ncywgd2hpY2ggd29ya3MganVzdCBsaWtlIG5vcm1hbAorICAgIDxmdW5jdGlvbj5wcmludGYoKTwvZnVuY3Rpb24+LiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKKyAgeworICAgICAgICAgIHN0cnVjdCBteV9jaGlwICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRoaXMgaXMgbXkgY2hpcCFcbiIpOworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBvcnQgPSAlbGRcbiIsIGNoaXAtPnBvcnQpOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBmaWxlIHBlcm1pc3Npb25zIGNhbiBiZSBjaGFuZ2VkIGFmdGVyd2FyZHMuICBBcyBkZWZhdWx0LCBpdCdzCisgICAgc2V0IGFzIHJlYWQgb25seSBmb3IgYWxsIHVzZXJzLiAgSWYgeW91IHdhbnQgdG8gYWRkIHdyaXRlCisgICAgcGVybWlzc2lvbiBmb3IgdGhlIHVzZXIgKHJvb3QgYXMgZGVmYXVsdCksIGRvIGFzIGZvbGxvd3M6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIGFuZCBzZXQgdGhlIHdyaXRlIGJ1ZmZlciBzaXplIGFuZCB0aGUgY2FsbGJhY2sKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVudHJ5LT5jLnRleHQud3JpdGUgPSBteV9wcm9jX3dyaXRlOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciB0aGUgd3JpdGUgY2FsbGJhY2ssIHlvdSBjYW4gdXNlCisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9saW5lKCk8L2Z1bmN0aW9uPiB0byBnZXQgYSB0ZXh0IGxpbmUsIGFuZAorICAgIDxmdW5jdGlvbj5zbmRfaW5mb19nZXRfc3RyKCk8L2Z1bmN0aW9uPiB0byByZXRyaWV2ZSBhIHN0cmluZyBmcm9tCisgICAgdGhlIGxpbmUuIFNvbWUgZXhhbXBsZXMgYXJlIGZvdW5kIGluCisgICAgPGZpbGVuYW1lPmNvcmUvb3NzL21peGVyX29zcy5jPC9maWxlbmFtZT4sIGNvcmUvb3NzL2FuZAorICAgIDxmaWxlbmFtZT5wY21fb3NzLmM8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgYSByYXctZGF0YSBwcm9jLWZpbGUsIHNldCB0aGUgYXR0cmlidXRlcyBhcyBmb2xsb3dzOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBzbmRfaW5mb19lbnRyeV9vcHMgbXlfZmlsZV9pb19vcHMgPSB7CisgICAgICAgICAgLnJlYWQgPSBteV9maWxlX2lvX3JlYWQsCisgIH07CisKKyAgZW50cnktPmNvbnRlbnQgPSBTTkRSVl9JTkZPX0NPTlRFTlRfREFUQTsKKyAgZW50cnktPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIGVudHJ5LT5jLm9wcyA9ICZteV9maWxlX2lvX29wczsKKyAgZW50cnktPnNpemUgPSA0MDk2OworICBlbnRyeS0+bW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjYWxsYmFjayBpcyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgdGV4dC1maWxlCisgICAgICB2ZXJzaW9uLiBZb3UgbmVlZCB0byB1c2UgYSBsb3ctbGV2ZWwgSS9PIGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICA8ZnVuY3Rpb24+Y29weV9mcm9tL3RvX3VzZXIoKTwvZnVuY3Rpb24+IHRvIHRyYW5zZmVyIHRoZQorICAgICAgZGF0YS4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBsb25nIG15X2ZpbGVfaW9fcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcykKKyAgeworICAgICAgICAgIGxvbmcgc2l6ZSA9IGNvdW50OworICAgICAgICAgIGlmIChwb3MgKyBzaXplID4gbG9jYWxfbWF4X3NpemUpCisgICAgICAgICAgICAgICAgICBzaXplID0gbG9jYWxfbWF4X3NpemUgLSBwb3M7CisgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIGxvY2FsX2RhdGEgKyBwb3MsIHNpemUpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgcmV0dXJuIHNpemU7CisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUG93ZXIgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBvd2VyLW1hbmFnZW1lbnQiPgorICAgIDx0aXRsZT5Qb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBjaGlwIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aCBzdXNwZW5kL3Jlc3VtZQorICAgICAgZnVuY3Rpb25zLCB5b3UgbmVlZCB0byBhZGQgcG93ZXItbWFuYWdlbWVudCBjb2RlIHRvIHRoZQorICAgICAgZHJpdmVyLiBUaGUgYWRkaXRpb25hbCBjb2RlIGZvciBwb3dlci1tYW5hZ2VtZW50IHNob3VsZCBiZQorICAgICAgPGZ1bmN0aW9uPmlmZGVmPC9mdW5jdGlvbj4nZWQgd2l0aAorICAgICAgPGNvbnN0YW50PkNPTkZJR19QTTwvY29uc3RhbnQ+LiAKKyAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlJZiB0aGUgZHJpdmVyIDxlbXBoYXNpcz5mdWxseTwvZW1waGFzaXM+IHN1cHBvcnRzIHN1c3BlbmQvcmVzdW1lCisJdGhhdCBpcywgdGhlIGRldmljZSBjYW4gYmUKKwlwcm9wZXJseSByZXN1bWVkIHRvIGl0cyBzdGF0ZSB3aGVuIHN1c3BlbmQgd2FzIGNhbGxlZCwKKwl5b3UgY2FuIHNldCB0aGUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcKKwlpbiB0aGUgcGNtIGluZm8gZmllbGQuICBVc3VhbGx5LCB0aGlzIGlzIHBvc3NpYmxlIHdoZW4gdGhlCisJcmVnaXN0ZXJzIG9mIHRoZSBjaGlwIGNhbiBiZSBzYWZlbHkgc2F2ZWQgYW5kIHJlc3RvcmVkIHRvCisJUkFNLiBJZiB0aGlzIGlzIHNldCwgdGhlIHRyaWdnZXIgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGgKKwk8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FPC9jb25zdGFudD4gYWZ0ZXIgdGhlIHJlc3VtZQorCWNhbGxiYWNrIGNvbXBsZXRlcy4gCisJPC9wYXJhPgorCisJPHBhcmE+CisJRXZlbiBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBQTSBmdWxseSBidXQgCisJcGFydGlhbCBzdXNwZW5kL3Jlc3VtZSBpcyBzdGlsbCBwb3NzaWJsZSwgaXQncyBzdGlsbCB3b3J0aHkgdG8KKwlpbXBsZW1lbnQgc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzLiBJbiBzdWNoIGEgY2FzZSwgYXBwbGljYXRpb25zCisJd291bGQgcmVzZXQgdGhlIHN0YXR1cyBieSBjYWxsaW5nCisJPGZ1bmN0aW9uPnNuZF9wY21fcHJlcGFyZSgpPC9mdW5jdGlvbj4gYW5kIHJlc3RhcnQgdGhlIHN0cmVhbQorCWFwcHJvcHJpYXRlbHkuICBIZW5jZSwgeW91IGNhbiBkZWZpbmUgc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzCisJYmVsb3cgYnV0IGRvbid0IHNldCA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4KKwlpbmZvIGZsYWcgdG8gdGhlIFBDTS4KKwk8L3BhcmE+CisJCisJPHBhcmE+CisJTm90ZSB0aGF0IHRoZSB0cmlnZ2VyIHdpdGggU1VTUEVORCBjYW4gYWx3YXlzIGJlIGNhbGxlZCB3aGVuCisJPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGw8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsCisJcmVnYXJkbGVzcyBvZiB0aGUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcuCisJVGhlIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PiBmbGFnIGFmZmVjdHMgb25seSB0aGUgYmVoYXZpb3IKKwlvZiA8ZnVuY3Rpb24+c25kX3BjbV9yZXN1bWUoKTwvZnVuY3Rpb24+LgorCShUaHVzLCBpbiB0aGVvcnksCisJPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTwvY29uc3RhbnQ+IGlzbid0IG5lZWRlZAorCXRvIGJlIGhhbmRsZWQgaW4gdGhlIHRyaWdnZXIgY2FsbGJhY2sgd2hlbiBubworCTxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50PiBmbGFnIGlzIHNldC4gIEJ1dCwKKwlpdCdzIGJldHRlciB0byBrZWVwIGl0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuKQorCTwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIHRoZSBlYXJsaWVyIHZlcnNpb24gb2YgQUxTQSBkcml2ZXJzLCBhIGNvbW1vbgorICAgICAgcG93ZXItbWFuYWdlbWVudCBsYXllciB3YXMgcHJvdmlkZWQsIGJ1dCBpdCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgVGhlIGRyaXZlciBuZWVkcyB0byBkZWZpbmUgdGhlIHN1c3BlbmQvcmVzdW1lIGhvb2tzIGFjY29yZGluZyB0bworICAgICAgdGhlIGJ1cyB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0by4gIEluIHRoZSBjYXNlIG9mIFBDSSBkcml2ZXJzLCB0aGUKKyAgICAgIGNhbGxiYWNrcyBsb29rIGxpa2UgYmVsb3c6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaWZkZWYgQ09ORklHX1BNCisgIHN0YXRpYyBpbnQgc25kX215X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaSwgcG1fbWVzc2FnZV90IHN0YXRlKQorICB7CisgICAgICAgICAgLi4uLiAvKiBkbyB0aGluZ3MgZm9yIHN1c3BlbmQgKi8KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorICBzdGF0aWMgaW50IHNuZF9teV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaSkKKyAgeworICAgICAgICAgIC4uLi4gLyogZG8gdGhpbmdzIGZvciBzdXNwZW5kICovCisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgI2VuZGlmCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIHNjaGVtZSBvZiB0aGUgcmVhbCBzdXNwZW5kIGpvYiBpcyBhcyBmb2xsb3dzLgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2FyZCBhbmQgdGhlIGNoaXAgZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoKTwvZnVuY3Rpb24+IHdpdGgKKwkgIDxjb25zdGFudD5TTkRSVl9DVExfUE9XRVJfRDNob3Q8L2NvbnN0YW50PiB0byBjaGFuZ2UgdGhlCisJICBwb3dlciBzdGF0dXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DYWxsIDxmdW5jdGlvbj5zbmRfcGNtX3N1c3BlbmRfYWxsKCk8L2Z1bmN0aW9uPiB0byBzdXNwZW5kIHRoZSBydW5uaW5nIFBDTSBzdHJlYW1zLjwvcGFyYT48L2xpc3RpdGVtPgorCTxsaXN0aXRlbT48cGFyYT5JZiBBQzk3IGNvZGVjcyBhcmUgdXNlZCwgY2FsbAorCTxmdW5jdGlvbj5zbmRfYWM5N19zdXNwZW5kKCk8L2Z1bmN0aW9uPiBmb3IgZWFjaCBjb2RlYy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNhdmUgdGhlIHJlZ2lzdGVyIHZhbHVlcyBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdG9wIHRoZSBoYXJkd2FyZSBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EaXNhYmxlIHRoZSBQQ0kgZGV2aWNlIGJ5IGNhbGxpbmcKKwkgIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+LiAgVGhlbiwgY2FsbAorICAgICAgICAgIDxmdW5jdGlvbj5wY2lfc2F2ZV9zdGF0ZSgpPC9mdW5jdGlvbj4gYXQgbGFzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBBIHR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBteWNoaXBfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisgIHsKKyAgICAgICAgICAvKiAoMSkgKi8KKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIC8qICgyKSAqLworICAgICAgICAgIHNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisgICAgICAgICAgLyogKDQpICovCisgICAgICAgICAgc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3NhdmVfcmVnaXN0ZXJzKGNoaXApOworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfc3RvcF9oYXJkd2FyZShjaGlwKTsKKyAgICAgICAgICAvKiAoNykgKi8KKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICBwY2lfc2F2ZV9zdGF0ZShwY2kpOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBzY2hlbWUgb2YgdGhlIHJlYWwgcmVzdW1lIGpvYiBpcyBhcyBmb2xsb3dzLgorCisgICAgPG9yZGVyZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2FyZCBhbmQgdGhlIGNoaXAgZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIFBDSS4gRmlyc3QsIGNhbGwgPGZ1bmN0aW9uPnBjaV9yZXN0b3JlX3N0YXRlKCk8L2Z1bmN0aW9uPi4KKyAgICAJVGhlbiBlbmFibGUgdGhlIHBjaSBkZXZpY2UgYWdhaW4gYnkgY2FsbGluZyA8ZnVuY3Rpb24+cGNpX2VuYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+LgorCUNhbGwgPGZ1bmN0aW9uPnBjaV9zZXRfbWFzdGVyKCk8L2Z1bmN0aW9uPiBpZiBuZWNlc3NhcnksIHRvby48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmUtaW5pdGlhbGl6ZSB0aGUgY2hpcC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdG9yZSB0aGUgc2F2ZWQgcmVnaXN0ZXJzIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdW1lIHRoZSBtaXhlciwgZS5nLiBjYWxsaW5nCisgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3Jlc3VtZSgpPC9mdW5jdGlvbj4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3RhcnQgdGhlIGhhcmR3YXJlIChpZiBhbnkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5DYWxsIDxmdW5jdGlvbj5zbmRfcG93ZXJfY2hhbmdlX3N0YXRlKCk8L2Z1bmN0aW9uPiB3aXRoCisJPGNvbnN0YW50PlNORFJWX0NUTF9QT1dFUl9EMDwvY29uc3RhbnQ+IHRvIG5vdGlmeSB0aGUgcHJvY2Vzc2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgQSB0eXBpY2FsIGNvZGUgd291bGQgYmUgbGlrZToKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgbXljaGlwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQorICB7CisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAvKiAoMikgKi8KKyAgICAgICAgICBwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworICAgICAgICAgIHBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgcGNpX3NldF9tYXN0ZXIocGNpKTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3JlaW5pdF9jaGlwKGNoaXApOworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdG9yZV9yZWdpc3RlcnMoY2hpcCk7CisgICAgICAgICAgLyogKDUpICovCisgICAgICAgICAgc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTcpOworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdGFydF9jaGlwKGNoaXApOworICAgICAgICAgIC8qICg3KSAqLworICAgICAgICAgIHNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKwlBcyBzaG93biBpbiB0aGUgYWJvdmUsIGl0J3MgYmV0dGVyIHRvIHNhdmUgcmVnaXN0ZXJzIGFmdGVyCisJc3VzcGVuZGluZyB0aGUgUENNIG9wZXJhdGlvbnMgdmlhCisJPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGwoKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZCgpPC9mdW5jdGlvbj4uICBJdCBtZWFucyB0aGF0IHRoZSBQQ00KKwlzdHJlYW1zIGFyZSBhbHJlYWR5IHN0b3BwcGVkIHdoZW4gdGhlIHJlZ2lzdGVyIHNuYXBzaG90IGlzCisJdGFrZW4uICBCdXQsIHJlbWVtYmVyIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gcmVzdGFydCB0aGUgUENNCisJc3RyZWFtIGluIHRoZSByZXN1bWUgY2FsbGJhY2suIEl0J2xsIGJlIHJlc3RhcnRlZCB2aWEgCisJdHJpZ2dlciBjYWxsIHdpdGggPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTwvY29uc3RhbnQ+CisJd2hlbiBuZWNlc3NhcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBPSywgd2UgaGF2ZSBhbGwgY2FsbGJhY2tzIG5vdy4gTGV0J3Mgc2V0IHRoZW0gdXAuIEluIHRoZQorICAgICAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNhcmQsIG1ha2Ugc3VyZSB0aGF0IHlvdSBjYW4gZ2V0IHRoZSBjaGlwCisgICAgICBkYXRhIGZyb20gdGhlIGNhcmQgaW5zdGFuY2UsIHR5cGljYWxseSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2RhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCwgaW4gY2FzZSB5b3UKKyAgICAgIGNyZWF0ZWQgdGhlIGNoaXAgZGF0YSBpbmRpdmlkdWFsbHkuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKKwk8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQorCXZpYSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSwgJmNhcmQpOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IG5lZWQgYSBzcGFjZSB0byBzYXZlIHRoZSByZWdpc3RlcnMsIGFsbG9jYXRlIHRoZQorCWJ1ZmZlciBmb3IgaXQgaGVyZSwgdG9vLCBzaW5jZSBpdCB3b3VsZCBiZSBmYXRhbAorICAgIGlmIHlvdSBjYW5ub3QgYWxsb2NhdGUgYSBtZW1vcnkgaW4gdGhlIHN1c3BlbmQgcGhhc2UuCisgICAgVGhlIGFsbG9jYXRlZCBidWZmZXIgc2hvdWxkIGJlIHJlbGVhc2VkIGluIHRoZSBjb3JyZXNwb25kaW5nCisgICAgZGVzdHJ1Y3Rvci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEFuZCBuZXh0LCBzZXQgc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzIHRvIHRoZSBwY2lfZHJpdmVyLgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKKyAgICAgICAgICAubmFtZSA9ICJNeSBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXlfaWRzLAorICAgICAgICAgIC5wcm9iZSA9IHNuZF9teV9wcm9iZSwKKyAgICAgICAgICAucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX215X3JlbW92ZSksCisgICNpZmRlZiBDT05GSUdfUE0KKyAgICAgICAgICAuc3VzcGVuZCA9IHNuZF9teV9zdXNwZW5kLAorICAgICAgICAgIC5yZXN1bWUgPSBzbmRfbXlfcmVzdW1lLAorICAjZW5kaWYKKyAgfTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTW9kdWxlIFBhcmFtZXRlcnMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJtb2R1bGUtcGFyYW1ldGVycyI+CisgICAgPHRpdGxlPk1vZHVsZSBQYXJhbWV0ZXJzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGFyZSBzdGFuZGFyZCBtb2R1bGUgb3B0aW9ucyBmb3IgQUxTQS4gQXQgbGVhc3QsIGVhY2gKKyAgICAgIG1vZHVsZSBzaG91bGQgaGF2ZSB0aGUgPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwKKyAgICAgIDxwYXJhbWV0ZXI+aWQ8L3BhcmFtZXRlcj4gYW5kIDxwYXJhbWV0ZXI+ZW5hYmxlPC9wYXJhbWV0ZXI+CisgICAgICBvcHRpb25zLiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgKHVzdWFsbHkgdXAgdG8KKyAgICAgIDggPSA8Y29uc3RhbnQ+U05EUlZfQ0FSRFM8L2NvbnN0YW50PiBjYXJkcyksIHRoZXkgc2hvdWxkIGJlCisgICAgICBhcnJheXMuIFRoZSBkZWZhdWx0IGluaXRpYWwgdmFsdWVzIGFyZSBkZWZpbmVkIGFscmVhZHkgYXMKKyAgICAgIGNvbnN0YW50cyBmb3IgZWFzaWVyIHByb2dyYW1taW5nOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKKyAgc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworICBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBvbmx5IGEgc2luZ2xlIGNhcmQsIHRoZXkgY291bGQgYmUgc2luZ2xlCisgICAgdmFyaWFibGVzLCBpbnN0ZWFkLiAgPHBhcmFtZXRlcj5lbmFibGU8L3BhcmFtZXRlcj4gb3B0aW9uIGlzIG5vdAorICAgIGFsd2F5cyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlLCBidXQgaXQgd291bGQgYmUgYmV0dGVyIHRvIGhhdmUgYQorICAgIGR1bW15IG9wdGlvbiBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIGRlY2xhcmVkIHdpdGggdGhlIHN0YW5kYXJkCisgICAgPGZ1bmN0aW9uPm1vZHVsZV9wYXJhbSgpKCk8L2Z1bmN0aW9uPiwKKyAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtX2FycmF5KCkoKTwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5NT0RVTEVfUEFSTV9ERVNDKCk8L2Z1bmN0aW9uPiBtYWNyb3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNkZWZpbmUgQ0FSRF9OQU1FICJNeSBDaGlwIgorCisgIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKKyAgbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CisgIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOworICBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQWxzbywgZG9uJ3QgZm9yZ2V0IHRvIGRlZmluZSB0aGUgbW9kdWxlIGRlc2NyaXB0aW9uLCBjbGFzc2VzLAorICAgICAgbGljZW5zZSBhbmQgZGV2aWNlcy4gRXNwZWNpYWxseSwgdGhlIHJlY2VudCBtb2Rwcm9iZSByZXF1aXJlcyB0bworICAgICAgZGVmaW5lIHRoZSBtb2R1bGUgbGljZW5zZSBhcyBHUEwsIGV0Yy4sIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzCisgICAgICBzaG93biBhcyA8cXVvdGU+dGFpbnRlZDwvcXVvdGU+LiAKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIE1PRFVMRV9ERVNDUklQVElPTigiTXkgQ2hpcCIpOworICBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1ZlbmRvcixNeSBDaGlwIE5hbWV9fSIpOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIb3cgVG8gUHV0IFlvdXIgRHJpdmVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iaG93LXRvLXB1dC15b3VyLWRyaXZlciI+CisgICAgPHRpdGxlPkhvdyBUbyBQdXQgWW91ciBEcml2ZXIgSW50byBBTFNBIFRyZWU8L3RpdGxlPgorCTxzZWN0aW9uPgorCTx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKwk8cGFyYT4KKwlTbyBmYXIsIHlvdSd2ZSBsZWFybmVkIGhvdyB0byB3cml0ZSB0aGUgZHJpdmVyIGNvZGVzLgorCUFuZCB5b3UgbWlnaHQgaGF2ZSBhIHF1ZXN0aW9uIG5vdzogaG93IHRvIHB1dCBteSBvd24KKwlkcml2ZXIgaW50byB0aGUgQUxTQSBkcml2ZXIgdHJlZT8KKwlIZXJlIChmaW5hbGx5IDopIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgaXMgZGVzY3JpYmVkIGJyaWVmbHkuCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB0aGF0IHlvdSBjcmVhdGUgYSBuZXcgUENJIGRyaXZlciBmb3IgdGhlIGNhcmQKKwk8cXVvdGU+eHl6PC9xdW90ZT4uICBUaGUgY2FyZCBtb2R1bGUgbmFtZSB3b3VsZCBiZQorCXNuZC14eXouICBUaGUgbmV3IGRyaXZlciBpcyB1c3VhbGx5IHB1dCBpbnRvIHRoZSBhbHNhLWRyaXZlcgorCXRyZWUsIDxmaWxlbmFtZT5hbHNhLWRyaXZlci9wY2k8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4KKwl0aGUgY2FzZSBvZiBQQ0kgY2FyZHMuCisJVGhlbiB0aGUgZHJpdmVyIGlzIGV2YWx1YXRlZCwgYXVkaXRlZCBhbmQgdGVzdGVkCisJYnkgZGV2ZWxvcGVycyBhbmQgdXNlcnMuICBBZnRlciBhIGNlcnRhaW4gdGltZSwgdGhlIGRyaXZlcgorCXdpbGwgZ28gdG8gdGhlIGFsc2Eta2VybmVsIHRyZWUgKHRvIHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeSwKKwlzdWNoIGFzIDxmaWxlbmFtZT5hbHNhLWtlcm5lbC9wY2k8L2ZpbGVuYW1lPikgYW5kIGV2ZW50dWFsbHkKKyAJd2lsbCBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIExpbnV4IDIuNiB0cmVlICh0aGUgZGlyZWN0b3J5IHdvdWxkIGJlCisJPGZpbGVuYW1lPmxpbnV4L3NvdW5kL3BjaTwvZmlsZW5hbWU+KS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCB0aGUgZHJpdmVyIGNvZGUgaXMgc3VwcG9zZWQKKwl0byBiZSBwdXQgaW50byBhbHNhLWRyaXZlciB0cmVlLiBUaGUgdHdvIGNhc2VzIGFyZSBjb3ZlcmVkOgorCWEgZHJpdmVyIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIG9uZSBjb25zaXN0aW5nCisJb2Ygc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uPgorCTx0aXRsZT5Ecml2ZXIgd2l0aCBBIFNpbmdsZSBTb3VyY2UgRmlsZTwvdGl0bGU+CisJPHBhcmE+CisJPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlNb2RpZnkgYWxzYS1kcml2ZXIvcGNpL01ha2VmaWxlCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB5b3UgaGF2ZSBhIGZpbGUgeHl6LmMuICBBZGQgdGhlIGZvbGxvd2luZworCXR3byBsaW5lcworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZC14eXotb2JqcyA6PSB4eXoubworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCUFkZCB0aGUgbmV3IGVudHJ5IG9mIEtjb25maWcgZm9yIHlvdXIgeHl6IGRyaXZlci4KKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBjb25maWcgU05EX1hZWgorICAgICAgICAgIHRyaXN0YXRlICJGb29iYXIgWFlaIgorICAgICAgICAgIGRlcGVuZHMgb24gU05ECisgICAgICAgICAgc2VsZWN0IFNORF9QQ00KKyAgICAgICAgICBoZWxwCisgICAgICAgICAgICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRm9vYmFyIFhZWiBzb3VuZGNhcmQuCisKKyAgICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKyAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHNuZC14eXouCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJdGhlIGxpbmUsIHNlbGVjdCBTTkRfUENNLCBzcGVjaWZpZXMgdGhhdCB0aGUgZHJpdmVyIHh5eiBzdXBwb3J0cworCVBDTS4gIEluIGFkZGl0aW9uIHRvIFNORF9QQ00sIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcmUKKwlzdXBwb3J0ZWQgZm9yIHNlbGVjdCBjb21tYW5kOgorCVNORF9SQVdNSURJLCBTTkRfVElNRVIsIFNORF9IV0RFUCwgU05EX01QVTQwMV9VQVJULAorCVNORF9PUEwzX0xJQiwgU05EX09QTDRfTElCLCBTTkRfVlhfTElCLCBTTkRfQUM5N19DT0RFQy4KKwlBZGQgdGhlIHNlbGVjdCBjb21tYW5kIGZvciBlYWNoIHN1cHBvcnRlZCBjb21wb25lbnQuCisJPC9wYXJhPgorCisJPHBhcmE+CisJTm90ZSB0aGF0IHNvbWUgc2VsZWN0aW9ucyBpbXBseSB0aGUgbG93bGV2ZWwgc2VsZWN0aW9ucy4KKwlGb3IgZXhhbXBsZSwgUENNIGluY2x1ZGVzIFRJTUVSLCBNUFU0MDFfVUFSVCBpbmNsdWRlcyBSQVdNSURJLAorCUFDOTdfQ09ERUMgaW5jbHVkZXMgUENNLCBhbmQgT1BMM19MSUIgaW5jbHVkZXMgSFdERVAuCisJWW91IGRvbid0IG5lZWQgdG8gZ2l2ZSB0aGUgbG93bGV2ZWwgc2VsZWN0aW9ucyBhZ2Fpbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlGb3IgdGhlIGRldGFpbHMgb2YgS2NvbmZpZyBzY3JpcHQsIHJlZmVyIHRvIHRoZSBrYnVpbGQKKwlkb2N1bWVudGF0aW9uLgorCTwvcGFyYT4KKworCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJUnVuIGN2c2NvbXBpbGUgc2NyaXB0IHRvIHJlLWdlbmVyYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZAorCWJ1aWxkIHRoZSB3aG9sZSBzdHVmZiBhZ2Fpbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8L29yZGVyZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbj4KKwk8dGl0bGU+RHJpdmVycyB3aXRoIFNldmVyYWwgU291cmNlIEZpbGVzPC90aXRsZT4KKwk8cGFyYT4KKwlTdXBwb3NlIHRoYXQgdGhlIGRyaXZlciBzbmQteHl6IGhhdmUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisJVGhleSBhcmUgbG9jYXRlZCBpbiB0aGUgbmV3IHN1YmRpcmVjdG9yeSwKKwlwY2kveHl6LgorCisJPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlBZGQgYSBuZXcgZGlyZWN0b3J5ICg8ZmlsZW5hbWU+eHl6PC9maWxlbmFtZT4pIGluCisJPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaS9NYWtlZmlsZTwvZmlsZW5hbWU+IGFzIGJlbG93CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvYmotJChDT05GSUdfU05EKSArPSB4eXovCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVVuZGVyIHRoZSBkaXJlY3RvcnkgPGZpbGVuYW1lPnh5ejwvZmlsZW5hbWU+LCBjcmVhdGUgYSBNYWtlZmlsZQorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+U2FtcGxlIE1ha2VmaWxlIGZvciBhIGRyaXZlciB4eXo8L3RpdGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWZuZGVmIFNORF9UT1BESVIKKyAgU05EX1RPUERJUj0uLi8uLgorICBlbmRpZgorCisgIGluY2x1ZGUgJChTTkRfVE9QRElSKS90b3BsZXZlbC5jb25maWcKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL01ha2VmaWxlLmNvbmYKKworICBzbmQteHl6LW9ianMgOj0geHl6Lm8gYWJjLm8gZGVmLm8KKworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCisKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL1J1bGVzLm1ha2UKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoaXMgcHJvY2VkdXJlIGlzIGFzIHNhbWUgYXMgaW4gdGhlIGxhc3Qgc2VjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlSdW4gY3ZzY29tcGlsZSBzY3JpcHQgdG8gcmUtZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kCisJYnVpbGQgdGhlIHdob2xlIHN0dWZmIGFnYWluLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvb3JkZXJlZGxpc3Q+CisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBVc2VmdWwgRnVuY3Rpb25zICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0idXNlZnVsLWZ1bmN0aW9ucyI+CisgICAgPHRpdGxlPlVzZWZ1bCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLXByaW50ayI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+IGFuZCBmcmllbmRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIHByb3ZpZGVzIGEgdmVyYm9zZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIElmIGEga2VybmVsIGNvbmZpZworICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs8L2NvbnN0YW50PiBpcyBzZXQsIHRoaXMKKyAgICAgIGZ1bmN0aW9uIHByaW50cyB0aGUgZ2l2ZW4gbWVzc2FnZSB0b2dldGhlciB3aXRoIHRoZSBmaWxlIG5hbWUKKyAgICAgIGFuZCB0aGUgbGluZSBvZiB0aGUgY2FsbGVyLiBUaGUgPGNvbnN0YW50PktFUk5fWFhYPC9jb25zdGFudD4KKyAgICAgIHByZWZpeCBpcyBwcm9jZXNzZWQgYXMgCisgICAgICB3ZWxsIGFzIHRoZSBvcmlnaW5hbCA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBkb2VzLCBzbyBpdCdzCisgICAgICByZWNvbW1lbmRlZCB0byBhZGQgdGhpcyBwcmVmaXgsIGUuZy4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3ByaW50ayhLRVJOX0VSUiAiT2ggbXksIHNvcnJ5LCBpdCdzIGV4dHJlbWVseSBiYWQhXG4iKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIGFsc28gPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4ncyBmb3IKKyAgICAgIGRlYnVnZ2luZy4gPGZ1bmN0aW9uPnNuZF9wcmludGQoKTwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGZvcgorICAgICAgZ2VuZXJhbCBkZWJ1Z2dpbmcgcHVycG9zZXMuIElmCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcyBmdW5jdGlvbiBpcworICAgICAgY29tcGlsZWQsIGFuZCB3b3JrcyBqdXN0IGxpa2UKKyAgICAgIDxmdW5jdGlvbj5zbmRfcHJpbnRrKCk8L2Z1bmN0aW9uPi4gSWYgdGhlIEFMU0EgaXMgY29tcGlsZWQKKyAgICAgIHdpdGhvdXQgdGhlIGRlYnVnZ2luZyBmbGFnLCBpdCdzIGlnbm9yZWQuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wcmludGRkKCk8L2Z1bmN0aW9uPiBpcyBjb21waWxlZCBpbiBvbmx5IHdoZW4KKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHX1ZFUkJPU0U8L2NvbnN0YW50PiBpcyBzZXQuIFBsZWFzZSBub3RlCisgICAgICB0aGF0IDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHX1ZFUkJPU0U8L2NvbnN0YW50PiBpcyBub3Qgc2V0IGFzIGRlZmF1bHQKKyAgICAgIGV2ZW4gaWYgeW91IGNvbmZpZ3VyZSB0aGUgYWxzYS1kcml2ZXIgd2l0aAorICAgICAgPG9wdGlvbj4tLXdpdGgtZGVidWc9ZnVsbDwvb3B0aW9uPiBvcHRpb24uIFlvdSBuZWVkIHRvIGdpdmUKKyAgICAgIGV4cGxpY2l0bHkgPG9wdGlvbj4tLXdpdGgtZGVidWc9ZGV0ZWN0PC9vcHRpb24+IG9wdGlvbiBpbnN0ZWFkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYnVnIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX0JVRygpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0IHNob3dzIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+QlVHPzwvY29tcHV0ZXJvdXRwdXQ+IG1lc3NhZ2UgYW5kCisgICAgICBzdGFjayB0cmFjZSBhcyB3ZWxsIGFzIDxmdW5jdGlvbj5zbmRfQlVHX09OPC9mdW5jdGlvbj4gYXQgdGhlIHBvaW50LgorICAgICAgSXQncyB1c2VmdWwgdG8gc2hvdyB0aGF0IGEgZmF0YWwgZXJyb3IgaGFwcGVucyB0aGVyZS4gCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwkgV2hlbiBubyBkZWJ1ZyBmbGFnIGlzIHNldCwgdGhpcyBtYWNybyBpcyBpZ25vcmVkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYnVnLW9uIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX0JVR19PTigpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfQlVHX09OKCk8L2Z1bmN0aW9uPiBtYWNybyBpcyBzaW1pbGFyIHdpdGgKKwk8ZnVuY3Rpb24+V0FSTl9PTigpPC9mdW5jdGlvbj4gbWFjcm8uIEZvciBleGFtcGxlLCAgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX0JVR19PTighcG9pbnRlcik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCW9yIGl0IGNhbiBiZSB1c2VkIGFzIHRoZSBjb25kaXRpb24sCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmIChzbmRfQlVHX09OKG5vbl96ZXJvX2lzX2J1ZykpCisgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1hY3JvIHRha2VzIGFuIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuCisJV2hlbiA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+LCBpcyBzZXQsIHRoZQorCWV4cHJlc3Npb24gaXMgYWN0dWFsbHkgZXZhbHVhdGVkLiBJZiBpdCdzIG5vbi16ZXJvLCBpdCBzaG93cworCXRoZSB3YXJuaW5nIG1lc3NhZ2Ugc3VjaCBhcworCTxjb21wdXRlcm91dHB1dD5CVUc/ICh4eHgpPC9jb21wdXRlcm91dHB1dD4KKwlub3JtYWxseSBmb2xsb3dlZCBieSBzdGFjayB0cmFjZS4gIEl0IHJldHVybnMgdGhlIGV2YWx1YXRlZAorCXZhbHVlLgorCVdoZW4gbm8gPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50PiBpcyBzZXQsIHRoaXMKKwltYWNybyBhbHdheXMgcmV0dXJucyB6ZXJvLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQWNrbm93bGVkZ21lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYWNrbm93bGVkZ21lbnRzIj4KKyAgICA8dGl0bGU+QWNrbm93bGVkZ21lbnRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEkgd291bGQgbGlrZSB0byB0aGFuayBQaGlsIEtlcnIgZm9yIGhpcyBoZWxwIGZvciBpbXByb3ZlbWVudCBhbmQKKyAgICAgIGNvcnJlY3Rpb25zIG9mIHRoaXMgZG9jdW1lbnQuIAorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICBLZXZpbiBDb25kZXIgcmVmb3JtYXR0ZWQgdGhlIG9yaWdpbmFsIHBsYWluLXRleHQgdG8gdGhlCisgICAgRG9jQm9vayBmb3JtYXQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIEdpdWxpYW5vIFBvY2hpbmkgY29ycmVjdGVkIHR5cG9zIGFuZCBjb250cmlidXRlZCB0aGUgZXhhbXBsZSBjb2RlcworICAgIGluIHRoZSBoYXJkd2FyZSBjb25zdHJhaW50cyBzZWN0aW9uLgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TbWFjay50eHQgYi9Eb2N1bWVudGF0aW9uL1NtYWNrLnR4dAppbmRleCA5ODljMmZjLi42MjljOTJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1NtYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1NtYWNrLnR4dApAQCAtMTg0LDE0ICsxODQsMTYgQEAKIG90aGVyIHRoYW4gYSBsZXR0ZXIgb3IgZGlnaXQsIGFyZSByZXNlcnZlZCBmb3IgdXNlIGJ5IHRoZSBTbWFjayBkZXZlbG9wbWVudAogdGVhbS4gU21hY2sgbGFiZWxzIGFyZSB1bnN0cnVjdHVyZWQsIGNhc2Ugc2Vuc2l0aXZlLCBhbmQgdGhlIG9ubHkgb3BlcmF0aW9uCiBldmVyIHBlcmZvcm1lZCBvbiB0aGVtIGlzIGNvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiBTbWFjayBsYWJlbHMgY2Fubm90Ci1jb250YWluIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgb3IgdGhlICIvIiAoc2xhc2gpIGNoYXJhY3Rlci4KK2NvbnRhaW4gdW5wcmludGFibGUgY2hhcmFjdGVycyBvciB0aGUgIi8iIChzbGFzaCkgY2hhcmFjdGVyLiBTbWFjayBsYWJlbHMKK2Nhbm5vdCBiZWdpbiB3aXRoIGEgJy0nLCB3aGljaCBpcyByZXNlcnZlZCBmb3Igc3BlY2lhbCBvcHRpb25zLgogCiBUaGVyZSBhcmUgc29tZSBwcmVkZWZpbmVkIGxhYmVsczoKIAotCV8gUHJvbm91bmNlZCAiZmxvb3IiLCBhIHNpbmdsZSB1bmRlcnNjb3JlIGNoYXJhY3Rlci4KLQleIFByb25vdW5jZWQgImhhdCIsIGEgc2luZ2xlIGNpcmN1bWZsZXggY2hhcmFjdGVyLgotCSogUHJvbm91bmNlZCAic3RhciIsIGEgc2luZ2xlIGFzdGVyaXNrIGNoYXJhY3Rlci4KLQk/IFByb25vdW5jZWQgImh1aCIsIGEgc2luZ2xlIHF1ZXN0aW9uIG1hcmsgY2hhcmFjdGVyLgorCV8gCVByb25vdW5jZWQgImZsb29yIiwgYSBzaW5nbGUgdW5kZXJzY29yZSBjaGFyYWN0ZXIuCisJXiAJUHJvbm91bmNlZCAiaGF0IiwgYSBzaW5nbGUgY2lyY3VtZmxleCBjaGFyYWN0ZXIuCisJKiAJUHJvbm91bmNlZCAic3RhciIsIGEgc2luZ2xlIGFzdGVyaXNrIGNoYXJhY3Rlci4KKwk/IAlQcm9ub3VuY2VkICJodWgiLCBhIHNpbmdsZSBxdWVzdGlvbiBtYXJrIGNoYXJhY3Rlci4KKwlAIAlQcm9ub3VuY2VkICJJbnRlcm5ldCIsIGEgc2luZ2xlIGF0IHNpZ24gY2hhcmFjdGVyLgogCiBFdmVyeSB0YXNrIG9uIGEgU21hY2sgc3lzdGVtIGlzIGFzc2lnbmVkIGEgbGFiZWwuIFN5c3RlbSB0YXNrcywgc3VjaCBhcwogaW5pdCg4KSBhbmQgc3lzdGVtcyBkYWVtb25zLCBhcmUgcnVuIHdpdGggdGhlIGZsb29yICgiXyIpIGxhYmVsLiBVc2VyIHRhc2tzCkBAIC00MTIsNiArNDE0LDM2IEBACiAJQSBwcml2aWxlZ2VkIHByb2dyYW0gbWF5IHNldCB0aGlzIHRvIG1hdGNoIHRoZSBsYWJlbCBvZiBhbm90aGVyCiAJdGFzayB3aXRoIHdoaWNoIGl0IGhvcGVzIHRvIGNvbW11bmljYXRlLgogCitTbWFjayBOZXRsYWJlbCBFeGNlcHRpb25zCisKK1lvdSB3aWxsIG9mdGVuIGZpbmQgdGhhdCB5b3VyIGxhYmVsZWQgYXBwbGljYXRpb24gaGFzIHRvIHRhbGsgdG8gdGhlIG91dHNpZGUsCit1bmxhYmVsZWQgd29ybGQuIFRvIGRvIHRoaXMgdGhlcmUncyBhIHNwZWNpYWwgZmlsZSAvc21hY2svbmV0bGFiZWwgd2hlcmUgeW91IGNhbgorYWRkIHNvbWUgZXhjZXB0aW9ucyBpbiB0aGUgZm9ybSBvZiA6CitASVAxCSAgIExBQkVMMSBvcgorQElQMi9NQVNLICBMQUJFTDIKKworSXQgbWVhbnMgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgaGF2ZSB1bmxhYmVsZWQgYWNjZXNzIHRvIEBJUDEgaWYgaXQgaGFzCit3cml0ZSBhY2Nlc3Mgb24gTEFCRUwxLCBhbmQgYWNjZXNzIHRvIHRoZSBzdWJuZXQgQElQMi9NQVNLIGlmIGl0IGhhcyB3cml0ZQorYWNjZXNzIG9uIExBQkVMMi4KKworRW50cmllcyBpbiB0aGUgL3NtYWNrL25ldGxhYmVsIGZpbGUgYXJlIG1hdGNoZWQgYnkgbG9uZ2VzdCBtYXNrIGZpcnN0LCBsaWtlIGluCitjbGFzc2xlc3MgSVB2NCByb3V0aW5nLgorCitBIHNwZWNpYWwgbGFiZWwgJ0AnIGFuZCBhbiBvcHRpb24gJy1DSVBTTycgY2FuIGJlIHVzZWQgdGhlcmUgOgorQCAgICAgIG1lYW5zIEludGVybmV0LCBhbnkgYXBwbGljYXRpb24gd2l0aCBhbnkgbGFiZWwgaGFzIGFjY2VzcyB0byBpdAorLUNJUFNPIG1lYW5zIHN0YW5kYXJkIENJUFNPIG5ldHdvcmtpbmcKKworSWYgeW91IGRvbid0IGtub3cgd2hhdCBDSVBTTyBpcyBhbmQgZG9uJ3QgcGxhbiB0byB1c2UgaXQsIHlvdSBjYW4ganVzdCBkbyA6CitlY2hvIDEyNy4wLjAuMSAtQ0lQU08gPiAvc21hY2svbmV0bGFiZWwKK2VjaG8gMC4wLjAuMC8wIEAgICAgICA+IC9zbWFjay9uZXRsYWJlbAorCitJZiB5b3UgdXNlIENJUFNPIG9uIHlvdXIgMTkyLjE2OC4wLjAvMTYgbG9jYWwgbmV0d29yayBhbmQgbmVlZCBhbHNvIHVubGFiZWxlZAorSW50ZXJuZXQgYWNjZXNzLCB5b3UgY2FuIGhhdmUgOgorZWNobyAxMjcuMC4wLjEgICAgICAtQ0lQU08gPiAvc21hY2svbmV0bGFiZWwKK2VjaG8gMTkyLjE2OC4wLjAvMTYgLUNJUFNPID4gL3NtYWNrL25ldGxhYmVsCitlY2hvIDAuMC4wLjAvMCAgICAgIEAgICAgICA+IC9zbWFjay9uZXRsYWJlbAorCisKIFdyaXRpbmcgQXBwbGljYXRpb25zIGZvciBTbWFjawogCiBUaGVyZSBhcmUgdGhyZWUgc29ydHMgb2YgYXBwbGljYXRpb25zIHRoYXQgd2lsbCBydW4gb24gYSBTbWFjayBzeXN0ZW0uIEhvdyBhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CmluZGV4IDBkYWI2ZTMuLmEzMGZlNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQKQEAgLTQwLDEzICs0MCwxMyBAQAogTWFjaGluZSBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0KIAotICBUaGUgbWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbnMgbXVzdCBjYWxsIHRoZSBzM2MyNDEwX3BtX2luaXQoKSBmdW5jdGlvbgorICBUaGUgbWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbnMgbXVzdCBjYWxsIHRoZSBzM2NfcG1faW5pdCgpIGZ1bmN0aW9uCiAgIHRvIHNheSB0aGF0IGl0cyBib290bG9hZGVyIGlzIGNhcGFibGUgb2YgcmVzdW1pbmcuIFRoaXMgY2FuIGJlIGFzCiAgIHNpbXBsZSBhcyBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUgbWFjaGluZSdzIGRlZmluaXRpb246CiAKLSAgSU5JVE1BQ0hJTkUoczNjMjQxMF9wbV9pbml0KQorICBJTklUTUFDSElORShzM2NfcG1faW5pdCkKIAotICBBIGJvYXJkIGNhbiBkbyBpdHMgb3duIHNldHVwIGJlZm9yZSBjYWxsaW5nIHMzYzI0MTBfcG1faW5pdCwgaWYgaXQKKyAgQSBib2FyZCBjYW4gZG8gaXRzIG93biBzZXR1cCBiZWZvcmUgY2FsbGluZyBzM2NfcG1faW5pdCwgaWYgaXQKICAgbmVlZHMgdG8gc2V0dXAgYW55dGhpbmcgZWxzZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0LgogCiAgIFRoZXJlIGlzIGN1cnJlbnRseSBubyBzdXBwb3J0IGZvciBvdmVyLXJpZGluZyB0aGUgZGVmYXVsdCBtZXRob2Qgb2YKQEAgLTc0LDcgKzc0LDcgQEAKIAogCWVuYWJsZV9pcnFfd2FrZShJUlFfRUlOVDApOwogCi0JczNjMjQxMF9wbV9pbml0KCk7CisJczNjX3BtX2luaXQoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dAppbmRleCBkYzYwNDU1Li40M2NiMTAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKQEAgLTI5LDcgKzI5LDE0IEBACiAJCQkJQ1BVIHN1cHBvcnRzIHZlY3RvciByZWxvY2F0aW9uIChjb250cm9sCiAJCQkJcmVnaXN0ZXIgViBiaXQuKQogCi1mZmMwMDAwMAlmZmZlZmZmZglETUEgbWVtb3J5IG1hcHBpbmcgcmVnaW9uLiAgTWVtb3J5IHJldHVybmVkCitmZmZlMDAwMAlmZmZlZmZmZglYU2NhbGUgY2FjaGUgZmx1c2ggYXJlYS4gIFRoaXMgaXMgdXNlZAorCQkJCWluIHByb2MteHNjYWxlLlMgdG8gZmx1c2ggdGhlIHdob2xlIGRhdGEKKwkJCQljYWNoZS4gIEZyZWUgZm9yIG90aGVyIHVzYWdlIG9uIG5vbi1YU2NhbGUuCisKK2ZmZjAwMDAwCWZmZmRmZmZmCUZpeG1hcCBtYXBwaW5nIHJlZ2lvbi4gIEFkZHJlc3NlcyBwcm92aWRlZAorCQkJCWJ5IGZpeF90b192aXJ0KCkgd2lsbCBiZSBsb2NhdGVkIGhlcmUuCisKK2ZmYzAwMDAwCWZmZWZmZmZmCURNQSBtZW1vcnkgbWFwcGluZyByZWdpb24uICBNZW1vcnkgcmV0dXJuZWQKIAkJCQlieSB0aGUgZG1hX2FsbG9jX3h4eCBmdW5jdGlvbnMgd2lsbCBiZQogCQkJCWR5bmFtaWNhbGx5IG1hcHBlZCBoZXJlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKaW5kZXggNjM0Yzk1Mi4uZDVhZjNmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dApAQCAtMzUsOSArMzUsMyBAQAogIyBlY2hvIGFudGljaXBhdG9yeSA+IC9zeXMvYmxvY2svaGRhL3F1ZXVlL3NjaGVkdWxlcgogIyBjYXQgL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCiBub29wIFthbnRpY2lwYXRvcnldIGRlYWRsaW5lIGNmcQotCi1FYWNoIGlvIHF1ZXVlIGhhcyBhIHNldCBvZiBpbyBzY2hlZHVsZXIgdHVuYWJsZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGVzZQotdHVuYWJsZXMgY29udHJvbCBob3cgdGhlIGlvIHNjaGVkdWxlciB3b3Jrcy4gWW91IGNhbiBmaW5kIHRoZXNlIGVudHJpZXMKLWluOgotCi0vc3lzL2Jsb2NrLzxkZXZpY2U+L3F1ZXVlL2lvc2NoZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dAppbmRleCA1YjBjZmE2Li5jZTczZjNlYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dApAQCAtMTE3LDEwICsxMTcsMjggQEAKIHNhbXBsaW5nX3JhdGU6IG1lYXN1cmVkIGluIHVTICgxMF4tNiBzZWNvbmRzKSwgdGhpcyBpcyBob3cgb2Z0ZW4geW91CiB3YW50IHRoZSBrZXJuZWwgdG8gbG9vayBhdCB0aGUgQ1BVIHVzYWdlIGFuZCB0byBtYWtlIGRlY2lzaW9ucyBvbgogd2hhdCB0byBkbyBhYm91dCB0aGUgZnJlcXVlbmN5LiAgVHlwaWNhbGx5IHRoaXMgaXMgc2V0IHRvIHZhbHVlcyBvZgotYXJvdW5kICcxMDAwMCcgb3IgbW9yZS4KK2Fyb3VuZCAnMTAwMDAnIG9yIG1vcmUuIEl0J3MgZGVmYXVsdCB2YWx1ZSBpcyAoY21wLiB3aXRoIHVzZXJzLWd1aWRlLnR4dCk6Cit0cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAwCitUaGUgbG93ZXN0IHZhbHVlIHlvdSBjYW4gc2V0IGlzOgordHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwIG9yIGl0IG1heSBnZXQgcmVzdHJpY3RlZCB0byBhIHZhbHVlIHdoZXJlIGl0CittYWtlcyBub3Qgc2Vuc2UgZm9yIHRoZSBrZXJuZWwgYW55bW9yZSB0byBwb2xsIHRoYXQgb2Z0ZW4gd2hpY2ggZGVwZW5kcworb24geW91ciBIWiBjb25maWcgdmFyaWFibGUgKEhaPTEwMDA6IG1heD0yMDAwMHVzLCBIWj0yNTA6IG1heD01MDAwKS4KK0JlIGF3YXJlIHRoYXQgdHJhbnNpdGlvbiBsYXRlbmN5IGlzIGluIG5zIGFuZCBzYW1wbGluZ19yYXRlIGlzIGluIHVzLCBzbyB5b3UKK2dldCB0aGUgc2FtZSBzeXNmcyB2YWx1ZSBieSBkZWZhdWx0LgorU2FtcGxpbmcgcmF0ZSBzaG91bGQgYWx3YXlzIGdldCBhZGp1c3RlZCBjb25zaWRlcmluZyB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5CitUbyBzZXQgdGhlIHNhbXBsaW5nIHJhdGUgNzUwIHRpbWVzIGFzIGhpZ2ggYXMgdGhlIHRyYW5zaXRpb24gbGF0ZW5jeQoraW4gdGhlIGJhc2ggKGFzIHNhaWQsIDEwMDAgaXMgZGVmYXVsdCksIGRvOgorZWNobyBgJCgoJChjYXQgY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kpICogNzUwIC8gMTAwMCkpIFwKKyAgICA+b25kZW1hbmQvc2FtcGxpbmdfcmF0ZQogCi1zaG93X3NhbXBsaW5nX3JhdGVfKG1pbnxtYXgpOiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzYW1wbGluZyByYXRlcwotYXZhaWxhYmxlIHRoYXQgeW91IG1heSBzZXQgJ3NhbXBsaW5nX3JhdGUnIHRvLgorc2hvd19zYW1wbGluZ19yYXRlXyhtaW58bWF4KTogVEhJUyBJTlRFUkZBQ0UgSVMgREVQUkVDQVRFRCwgRE9OJ1QgVVNFIElULgorWW91IGNhbiB1c2Ugd2lkZXIgcmFuZ2VzIG5vdyBhbmQgdGhlIGdlbmVyYWwKK2NwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5IHZhcmlhYmxlIChjbXAuIHdpdGggdXNlci1ndWlkZS50eHQpIGNhbiBiZQordXNlZCB0byBvYnRhaW4gZXhhY3RseSB0aGUgc2FtZSBpbmZvOgorc2hvd19zYW1wbGluZ19yYXRlX21pbiA9IHRyYW5zdGl0aW9uX2xhdGVuY3kgKiA1MDAgICAgLyAxMDAwCitzaG93X3NhbXBsaW5nX3JhdGVfbWF4ID0gdHJhbnN0aXRpb25fbGF0ZW5jeSAqIDUwMDAwMCAvIDEwMDAKKyhkaXZpZGVkIGJ5IDEwMDAgaXMgdG8gaWxsdXN0cmF0ZSB0aGF0IHNhbXBsaW5nIHJhdGUgaXMgaW4gdXMgYW5kCit0cmFuc2l0aW9uIGxhdGVuY3kgaXMgZXhwb3J0ZWQgbnMpLgogCiB1cF90aHJlc2hvbGQ6IGRlZmluZXMgd2hhdCB0aGUgYXZlcmFnZSBDUFUgdXNhZ2UgYmV0d2VlbiB0aGUgc2FtcGxpbmdzCiBvZiAnc2FtcGxpbmdfcmF0ZScgbmVlZHMgdG8gYmUgZm9yIHRoZSBrZXJuZWwgdG8gbWFrZSBhIGRlY2lzaW9uIG9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dAppbmRleCA5MTc5MThmLi43NWY0MTE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKQEAgLTE1Miw2ICsxNTIsMTggQEAKIAkJCQlmcmVxdWVuY3kgdGhlIHByb2Nlc3NvciBjYW4gcnVuIGF0KGluIGtIeikgCiBjcHVpbmZvX21heF9mcmVxIDoJCXRoaXMgZmlsZSBzaG93cyB0aGUgbWF4aW11bSBvcGVyYXRpbmcKIAkJCQlmcmVxdWVuY3kgdGhlIHByb2Nlc3NvciBjYW4gcnVuIGF0KGluIGtIeikgCitjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeQlUaGUgdGltZSBpdCB0YWtlcyBvbiB0aGlzIENQVSB0bworCQkJCXN3aXRjaCBiZXR3ZWVuIHR3byBmcmVxdWVuY2llcyBpbiBuYW5vCisJCQkJc2Vjb25kcy4gSWYgdW5rbm93biBvciBrbm93biB0byBiZQorCQkJCXRoYXQgaGlnaCB0aGF0IHRoZSBkcml2ZXIgZG9lcyBub3QKKwkJCQl3b3JrIHdpdGggdGhlIG9uZGVtYW5kIGdvdmVybm9yLCAtMQorCQkJCShDUFVGUkVRX0VURVJOQUwpIHdpbGwgYmUgcmV0dXJuZWQuCisJCQkJVXNpbmcgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsCisJCQkJdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIHBvbGxpbmcKKwkJCQlmcmVxdWVuY3kgZm9yIGEga2VybmVsIGdvdmVybm9yIG9yCisJCQkJdXNlcnNwYWNlIGRhZW1vbi4gTWFrZSBzdXJlIHRvIG5vdAorCQkJCXN3aXRjaCB0aGUgZnJlcXVlbmN5IHRvbyBvZnRlbgorCQkJCXJlc3VsdGluZyBpbiBwZXJmb3JtYW5jZSBsb3NzLgogc2NhbGluZ19kcml2ZXIgOgkJdGhpcyBmaWxlIHNob3dzIHdoYXQgY3B1ZnJlcSBkcml2ZXIgaXMKIAkJCQl1c2VkIHRvIHNldCB0aGUgZnJlcXVlbmN5IG9uIHRoaXMgQ1BVCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQKaW5kZXggNDU5MzJlYy4uYjQxZjNlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQKQEAgLTE4LDExICsxOCwxMSBAQAogdGhlc2UgbWFjcm9zIGluIGluY2x1ZGUvYXNtLVhYWC90b3BvbG9neS5oOgogI2RlZmluZSB0b3BvbG9neV9waHlzaWNhbF9wYWNrYWdlX2lkKGNwdSkKICNkZWZpbmUgdG9wb2xvZ3lfY29yZV9pZChjcHUpCi0jZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncyhjcHUpCi0jZGVmaW5lIHRvcG9sb2d5X2NvcmVfc2libGluZ3MoY3B1KQorI2RlZmluZSB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpCisjZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpCiAKIFRoZSB0eXBlIG9mICoqX2lkIGlzIGludC4KLVRoZSB0eXBlIG9mIHNpYmxpbmdzIGlzIGNwdW1hc2tfdC4KK1RoZSB0eXBlIG9mIHNpYmxpbmdzIGlzIChjb25zdCkgc3RydWN0IGNwdW1hc2sgKi4KIAogVG8gYmUgY29uc2lzdGVudCBvbiBhbGwgYXJjaGl0ZWN0dXJlcywgaW5jbHVkZS9saW51eC90b3BvbG9neS5oCiBwcm92aWRlcyBkZWZhdWx0IGRlZmluaXRpb25zIGZvciBhbnkgb2YgdGhlIGFib3ZlIG1hY3JvcyB0aGF0IGFyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKaW5kZXggMmJlMDgyNC4uNjIyNTRkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0zMTQ1LDYgKzMxNDUsMTIgQEAKIAkJICAxID0gL2Rldi9ibG9ja3JvbTEJU2Vjb25kIFJPTSBjYXJkJ3MgdHJhbnNsYXRpb24gbGF5ZXIgaW50ZXJmYWNlCiAJCSAgLi4uCiAKKzI2MCBjaGFyCU9TRCAoT2JqZWN0LWJhc2VkLWRldmljZSkgU0NTSSBEZXZpY2UKKwkJICAwID0gL2Rldi9vc2QwCQlGaXJzdCBPU0QgRGV2aWNlCisJCSAgMSA9IC9kZXYvb3NkMQkJU2Vjb25kIE9TRCBEZXZpY2UKKwkJICAuLi4KKwkJICAyNTUgPSAvZGV2L29zZDI1NQkyNTZ0aCBPU0QgRGV2aWNlCisKICAqKioqCUFERElUSU9OQUwgL2RldiBESVJFQ1RPUlkgRU5UUklFUwogCiBUaGlzIHNlY3Rpb24gZGV0YWlscyBhZGRpdGlvbmFsIGVudHJpZXMgdGhhdCBzaG91bGQgb3IgbWF5IGV4aXN0IGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCAxZTg5YTUxLi44ODUxOWRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTYyLDcgKzYyLDYgQEAKIGFpYzcqc2VxLmgqCiBhaWNhc20KIGFpY2RiLmgqCi1hc20KIGFzbS1vZmZzZXRzLmgKIGFzbV9vZmZzZXRzLmgKIGF1dG9jb25mLmgqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0IGIvRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRjNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dApAQCAtMCwwICsxLDI0MCBAQAorCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gdXNlIHRoZSBkeW5hbWljIGRlYnVnIChkZGVidWcpIGZlYXR1cmUuCisKK0R5bmFtaWMgZGVidWcgaXMgZGVzaWduZWQgdG8gYWxsb3cgeW91IHRvIGR5bmFtaWNhbGx5IGVuYWJsZS9kaXNhYmxlIGtlcm5lbAorY29kZSB0byBvYnRhaW4gYWRkaXRpb25hbCBrZXJuZWwgaW5mb3JtYXRpb24uIEN1cnJlbnRseSwgaWYKK0NPTkZJR19EWU5BTUlDX0RFQlVHIGlzIHNldCwgdGhlbiBhbGwgcHJfZGVidWcoKS9kZXZfZGVidWcoKSBjYWxscyBjYW4gYmUKK2R5bmFtaWNhbGx5IGVuYWJsZWQgcGVyLWNhbGxzaXRlLgorCitEeW5hbWljIGRlYnVnIGhhcyBldmVuIG1vcmUgdXNlZnVsIGZlYXR1cmVzOgorCisgKiBTaW1wbGUgcXVlcnkgbGFuZ3VhZ2UgYWxsb3dzIHR1cm5pbmcgb24gYW5kIG9mZiBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBieQorICAgbWF0Y2hpbmcgYW55IGNvbWJpbmF0aW9uIG9mOgorCisgICAtIHNvdXJjZSBmaWxlbmFtZQorICAgLSBmdW5jdGlvbiBuYW1lCisgICAtIGxpbmUgbnVtYmVyIChpbmNsdWRpbmcgcmFuZ2VzIG9mIGxpbmUgbnVtYmVycykKKyAgIC0gbW9kdWxlIG5hbWUKKyAgIC0gZm9ybWF0IHN0cmluZworCisgKiBQcm92aWRlcyBhIGRlYnVnZnMgY29udHJvbCBmaWxlOiA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sIHdoaWNoIGNhbiBiZQorICAgcmVhZCB0byBkaXNwbGF5IHRoZSBjb21wbGV0ZSBsaXN0IG9mIGtub3duIGRlYnVnIHN0YXRlbWVudHMsIHRvIGhlbHAgZ3VpZGUgeW91CisKK0NvbnRyb2xsaW5nIGR5bmFtaWMgZGVidWcgQmVoYXZpb3VyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBiZWhhdmlvdXIgb2YgcHJfZGVidWcoKS9kZXZfZGVidWcoKXMgYXJlIGNvbnRyb2xsZWQgdmlhIHdyaXRpbmcgdG8gYQorY29udHJvbCBmaWxlIGluIHRoZSAnZGVidWdmcycgZmlsZXN5c3RlbS4gVGh1cywgeW91IG11c3QgZmlyc3QgbW91bnQgdGhlIGRlYnVnZnMKK2ZpbGVzeXN0ZW0sIGluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHRoaXMgZmVhdHVyZS4gU3Vic2VxdWVudGx5LCB3ZSByZWZlciB0byB0aGUKK2NvbnRyb2wgZmlsZSBhczogPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbC4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvCitlbmFibGUgcHJpbnRpbmcgZnJvbSBzb3VyY2UgZmlsZSAnc3Zjc29jay5jJywgbGluZSAxNjAzIHlvdSBzaW1wbHkgZG86CisKK251bGxhcmJvcjp+ICMgZWNobyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCitJZiB5b3UgbWFrZSBhIG1pc3Rha2Ugd2l0aCB0aGUgc3ludGF4LCB0aGUgd3JpdGUgd2lsbCBmYWlsIHRodXM6CisKK251bGxhcmJvcjp+ICMgZWNobyAnZmlsZSBzdmNzb2NrLmMgd3RmIDEgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCistYmFzaDogZWNobzogd3JpdGUgZXJyb3I6IEludmFsaWQgYXJndW1lbnQKKworVmlld2luZyBEeW5hbWljIERlYnVnIEJlaGF2aW91cgorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gdmlldyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgYmVoYXZpb3VyIG9mIGFsbCB0aGUgZGVidWcgc3RhdGVtZW50cwordmlhOgorCitudWxsYXJib3I6fiAjIGNhdCA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisjIGZpbGVuYW1lOmxpbmVubyBbbW9kdWxlXWZ1bmN0aW9uIGZsYWdzIGZvcm1hdAorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozMjMgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9jbGVhbnVwIC0gIlNWQ1JETUEgTW9kdWxlIFJlbW92ZWQsIGRlcmVnaXN0ZXIgUlBDIFJETUEgdHJhbnNwb3J0XDAxMiIKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y19yZG1hLmM6MzQxIFtzdmN4cHJ0X3JkbWFdc3ZjX3JkbWFfaW5pdCAtICJcMDExbWF4X2lubGluZSAgICAgICA6ICVkXDAxMiIKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y19yZG1hLmM6MzQwIFtzdmN4cHJ0X3JkbWFdc3ZjX3JkbWFfaW5pdCAtICJcMDExc3FfZGVwdGggICAgICAgICA6ICVkXDAxMiIKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y19yZG1hLmM6MzM4IFtzdmN4cHJ0X3JkbWFdc3ZjX3JkbWFfaW5pdCAtICJcMDExbWF4X3JlcXVlc3RzICAgICA6ICVkXDAxMiIKKy4uLgorCisKK1lvdSBjYW4gYWxzbyBhcHBseSBzdGFuZGFyZCBVbml4IHRleHQgbWFuaXB1bGF0aW9uIGZpbHRlcnMgdG8gdGhpcworZGF0YSwgZS5nLgorCitudWxsYXJib3I6fiAjIGdyZXAgLWkgcmRtYSA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sICB8IHdjIC1sCis2MgorCitudWxsYXJib3I6fiAjIGdyZXAgLWkgdGNwIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgfCB3YyAtbAorNDIKKworTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgdGhlIHRoaXJkIGNvbHVtbiBzaG93cyB0aGUgZW5hYmxlZCBiZWhhdmlvdXIKK2ZsYWdzIGZvciBlYWNoIGRlYnVnIHN0YXRlbWVudCBjYWxsc2l0ZSAoc2VlIGJlbG93IGZvciBkZWZpbml0aW9ucyBvZiB0aGUKK2ZsYWdzKS4gIFRoZSBkZWZhdWx0IHZhbHVlLCBubyBleHRyYSBiZWhhdmlvdXIgZW5hYmxlZCwgaXMgIi0iLiAgU28KK3lvdSBjYW4gdmlldyBhbGwgdGhlIGRlYnVnIHN0YXRlbWVudCBjYWxsc2l0ZXMgd2l0aCBhbnkgbm9uLWRlZmF1bHQgZmxhZ3M6CisKK251bGxhcmJvcjp+ICMgYXdrICckMyAhPSAiLSInIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKyMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNzb2NrLmM6MTYwMyBbc3VucnBjXXN2Y19zZW5kIHAgInN2Y19wcm9jZXNzOiBzdF9zZW5kdG8gcmV0dXJuZWQgJWRcMDEyIgorCisKK0NvbW1hbmQgTGFuZ3VhZ2UgUmVmZXJlbmNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBdCB0aGUgbGV4aWNhbCBsZXZlbCwgYSBjb21tYW5kIGNvbXByaXNlcyBhIHNlcXVlbmNlIG9mIHdvcmRzIHNlcGFyYXRlZAorYnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiAgTm90ZSB0aGF0IG5ld2xpbmVzIGFyZSB0cmVhdGVkIGFzIHdvcmQKK3NlcGFyYXRvcnMgYW5kIGRvICpub3QqIGVuZCBhIGNvbW1hbmQgb3IgYWxsb3cgbXVsdGlwbGUgY29tbWFuZHMgdG8KK2JlIGRvbmUgdG9nZXRoZXIuICBTbyB0aGVzZSBhcmUgYWxsIGVxdWl2YWxlbnQ6CisKK251bGxhcmJvcjp+ICMgZWNobyAtYyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1jICcgIGZpbGUgICBzdmNzb2NrLmMgICAgIGxpbmUgIDE2MDMgK3AgICcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKK251bGxhcmJvcjp+ICMgZWNobyAtYyAnZmlsZSBzdmNzb2NrLmNcbmxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCitDb21tYW5kcyBhcmUgYm91bmRlZCBieSBhIHdyaXRlKCkgc3lzdGVtIGNhbGwuICBJZiB5b3Ugd2FudCB0byBkbworbXVsdGlwbGUgY29tbWFuZHMgeW91IG5lZWQgdG8gZG8gYSBzZXBhcmF0ZSAiZWNobyIgZm9yIGVhY2gsIGxpa2U6CisKK251bGxhcmJvcjp+ICMgZWNobyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+IC9wcm9jL2RwcmludGsgO1wKKz4gZWNobyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNTYzICtwJyA+IC9wcm9jL2RwcmludGsKKworb3IgZXZlbiBsaWtlOgorCitudWxsYXJib3I6fiAjICgKKz4gZWNobyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA7XAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE1NjMgK3AnIDtcCis+ICkgPiAvcHJvYy9kcHJpbnRrCisKK0F0IHRoZSBzeW50YWN0aWNhbCBsZXZlbCwgYSBjb21tYW5kIGNvbXByaXNlcyBhIHNlcXVlbmNlIG9mIG1hdGNoCitzcGVjaWZpY2F0aW9ucywgZm9sbG93ZWQgYnkgYSBmbGFncyBjaGFuZ2Ugc3BlY2lmaWNhdGlvbi4KKworY29tbWFuZCA6Oj0gbWF0Y2gtc3BlYyogZmxhZ3Mtc3BlYworCitUaGUgbWF0Y2gtc3BlYydzIGFyZSB1c2VkIHRvIGNob29zZSBhIHN1YnNldCBvZiB0aGUga25vd24gZHByaW50aygpCitjYWxsc2l0ZXMgdG8gd2hpY2ggdG8gYXBwbHkgdGhlIGZsYWdzLXNwZWMuICBUaGluayBvZiB0aGVtIGFzIGEgcXVlcnkKK3dpdGggaW1wbGljaXQgQU5EcyBiZXR3ZWVuIGVhY2ggcGFpci4gIE5vdGUgdGhhdCBhbiBlbXB0eSBsaXN0IG9mCittYXRjaC1zcGVjcyBpcyBwb3NzaWJsZSwgYnV0IGlzIG5vdCB2ZXJ5IHVzZWZ1bCBiZWNhdXNlIGl0IHdpbGwgbm90CittYXRjaCBhbnkgZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlcy4KKworQSBtYXRjaCBzcGVjaWZpY2F0aW9uIGNvbXByaXNlcyBhIGtleXdvcmQsIHdoaWNoIGNvbnRyb2xzIHRoZSBhdHRyaWJ1dGUKK29mIHRoZSBjYWxsc2l0ZSB0byBiZSBjb21wYXJlZCwgYW5kIGEgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LiAgUG9zc2libGUKK2tleXdvcmRzIGFyZToKKworbWF0Y2gtc3BlYyA6Oj0gJ2Z1bmMnIHN0cmluZyB8CisJICAgICAgICdmaWxlJyBzdHJpbmcgfAorCSAgICAgICAnbW9kdWxlJyBzdHJpbmcgfAorCSAgICAgICAnZm9ybWF0JyBzdHJpbmcgfAorCSAgICAgICAnbGluZScgbGluZS1yYW5nZQorCitsaW5lLXJhbmdlIDo6PSBsaW5lbm8gfAorCSAgICAgICAnLSdsaW5lbm8gfAorCSAgICAgICBsaW5lbm8nLScgfAorCSAgICAgICBsaW5lbm8nLSdsaW5lbm8KKy8vIE5vdGU6IGxpbmUtcmFuZ2UgY2Fubm90IGNvbnRhaW4gc3BhY2UsIGUuZy4KKy8vICIxLTMwIiBpcyB2YWxpZCByYW5nZSBidXQgIjEgLSAzMCIgaXMgbm90LgorCitsaW5lbm8gOjo9IHVuc2lnbmVkLWludAorCitUaGUgbWVhbmluZ3Mgb2YgZWFjaCBrZXl3b3JkIGFyZToKKworZnVuYworICAgIFRoZSBnaXZlbiBzdHJpbmcgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZnVuY3Rpb24gbmFtZQorICAgIG9mIGVhY2ggY2FsbHNpdGUuICBFeGFtcGxlOgorCisgICAgZnVuYyBzdmNfdGNwX2FjY2VwdAorCitmaWxlCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IGVpdGhlciB0aGUgZnVsbAorICAgIHBhdGhuYW1lIG9yIHRoZSBiYXNlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgb2YgZWFjaAorICAgIGNhbGxzaXRlLiAgRXhhbXBsZXM6CisKKyAgICBmaWxlIHN2Y3NvY2suYworICAgIGZpbGUgL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3Zjc29jay5jCisKK21vZHVsZQorICAgIFRoZSBnaXZlbiBzdHJpbmcgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbW9kdWxlIG5hbWUKKyAgICBvZiBlYWNoIGNhbGxzaXRlLiAgVGhlIG1vZHVsZSBuYW1lIGlzIHRoZSBzdHJpbmcgYXMKKyAgICBzZWVuIGluICJsc21vZCIsIGkuZS4gd2l0aG91dCB0aGUgZGlyZWN0b3J5IG9yIHRoZSAua28KKyAgICBzdWZmaXggYW5kIHdpdGggJy0nIGNoYW5nZWQgdG8gJ18nLiAgRXhhbXBsZXM6CisKKyAgICBtb2R1bGUgc3VucnBjCisgICAgbW9kdWxlIG5mc2QKKworZm9ybWF0CisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlIGR5bmFtaWMgZGVidWcgZm9ybWF0CisgICAgc3RyaW5nLiAgTm90ZSB0aGF0IHRoZSBzdHJpbmcgZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUKKyAgICBlbnRpcmUgZm9ybWF0LCBvbmx5IHNvbWUgcGFydC4gIFdoaXRlc3BhY2UgYW5kIG90aGVyCisgICAgc3BlY2lhbCBjaGFyYWN0ZXJzIGNhbiBiZSBlc2NhcGVkIHVzaW5nIEMgb2N0YWwgY2hhcmFjdGVyCisgICAgZXNjYXBlIFxvb28gbm90YXRpb24sIGUuZy4gdGhlIHNwYWNlIGNoYXJhY3RlciBpcyBcMDQwLgorICAgIEFsdGVybmF0aXZlbHksIHRoZSBzdHJpbmcgY2FuIGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZQorICAgIGNoYXJhY3RlcnMgKCIpIG9yIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzICgnKS4KKyAgICBFeGFtcGxlczoKKworICAgIGZvcm1hdCBzdmNyZG1hOgkgICAgLy8gbWFueSBvZiB0aGUgTkZTL1JETUEgc2VydmVyIGRwcmludGtzCisgICAgZm9ybWF0IHJlYWRhaGVhZAkgICAgLy8gc29tZSBkcHJpbnRrcyBpbiB0aGUgcmVhZGFoZWFkIGNhY2hlCisgICAgZm9ybWF0IG5mc2Q6XDA0MFNFVEFUVFIgLy8gb25lIHdheSB0byBtYXRjaCBhIGZvcm1hdCB3aXRoIHdoaXRlc3BhY2UKKyAgICBmb3JtYXQgIm5mc2Q6IFNFVEFUVFIiICAvLyBhIG5lYXRlciB3YXkgdG8gbWF0Y2ggYSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlCisgICAgZm9ybWF0ICduZnNkOiBTRVRBVFRSJyAgLy8geWV0IGFub3RoZXIgd2F5IHRvIG1hdGNoIGEgZm9ybWF0IHdpdGggd2hpdGVzcGFjZQorCitsaW5lCisgICAgVGhlIGdpdmVuIGxpbmUgbnVtYmVyIG9yIHJhbmdlIG9mIGxpbmUgbnVtYmVycyBpcyBjb21wYXJlZAorICAgIGFnYWluc3QgdGhlIGxpbmUgbnVtYmVyIG9mIGVhY2ggZHByaW50aygpIGNhbGxzaXRlLiAgQSBzaW5nbGUKKyAgICBsaW5lIG51bWJlciBtYXRjaGVzIHRoZSBjYWxsc2l0ZSBsaW5lIG51bWJlciBleGFjdGx5LiAgQQorICAgIHJhbmdlIG9mIGxpbmUgbnVtYmVycyBtYXRjaGVzIGFueSBjYWxsc2l0ZSBiZXR3ZWVuIHRoZSBmaXJzdAorICAgIGFuZCBsYXN0IGxpbmUgbnVtYmVyIGluY2x1c2l2ZS4gIEFuIGVtcHR5IGZpcnN0IG51bWJlciBtZWFucworICAgIHRoZSBmaXJzdCBsaW5lIGluIHRoZSBmaWxlLCBhbiBlbXB0eSBsaW5lIG51bWJlciBtZWFucyB0aGUKKyAgICBsYXN0IG51bWJlciBpbiB0aGUgZmlsZS4gIEV4YW1wbGVzOgorCisgICAgbGluZSAxNjAzCSAgICAvLyBleGFjdGx5IGxpbmUgMTYwMworICAgIGxpbmUgMTYwMC0xNjA1ICAvLyB0aGUgc2l4IGxpbmVzIGZyb20gbGluZSAxNjAwIHRvIGxpbmUgMTYwNQorICAgIGxpbmUgLTE2MDUJICAgIC8vIHRoZSAxNjA1IGxpbmVzIGZyb20gbGluZSAxIHRvIGxpbmUgMTYwNQorICAgIGxpbmUgMTYwMC0JICAgIC8vIGFsbCBsaW5lcyBmcm9tIGxpbmUgMTYwMCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlCisKK1RoZSBmbGFncyBzcGVjaWZpY2F0aW9uIGNvbXByaXNlcyBhIGNoYW5nZSBvcGVyYXRpb24gZm9sbG93ZWQKK2J5IG9uZSBvciBtb3JlIGZsYWcgY2hhcmFjdGVycy4gIFRoZSBjaGFuZ2Ugb3BlcmF0aW9uIGlzIG9uZQorb2YgdGhlIGNoYXJhY3RlcnM6CisKKy0KKyAgICByZW1vdmUgdGhlIGdpdmVuIGZsYWdzCisKKysKKyAgICBhZGQgdGhlIGdpdmVuIGZsYWdzCisKKz0KKyAgICBzZXQgdGhlIGZsYWdzIHRvIHRoZSBnaXZlbiBmbGFncworCitUaGUgZmxhZ3MgYXJlOgorCitwCisgICAgQ2F1c2VzIGEgcHJpbnRrKCkgbWVzc2FnZSB0byBiZSBlbWl0dGVkIHRvIGRtZXNnCisKK05vdGUgdGhlIHJlZ2V4cCBeWy0rPV1bc2NwXSskIG1hdGNoZXMgYSBmbGFncyBzcGVjaWZpY2F0aW9uLgorTm90ZSBhbHNvIHRoYXQgdGhlcmUgaXMgbm8gY29udmVuaWVudCBzeW50YXggdG8gcmVtb3ZlIGFsbAordGhlIGZsYWdzIGF0IG9uY2UsIHlvdSBuZWVkIHRvIHVzZSAiLXBzYyIuCisKK0V4YW1wbGVzCis9PT09PT09PQorCisvLyBlbmFibGUgdGhlIG1lc3NhZ2UgYXQgbGluZSAxNjAzIG9mIGZpbGUgc3Zjc29jay5jCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gZmlsZSBzdmNzb2NrLmMKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIHRoZSBORlMgc2VydmVyIG1vZHVsZQorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdtb2R1bGUgbmZzZCArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIGFsbCAxMiBtZXNzYWdlcyBpbiB0aGUgZnVuY3Rpb24gc3ZjX3Byb2Nlc3MoKQorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBkaXNhYmxlIGFsbCAxMiBtZXNzYWdlcyBpbiB0aGUgZnVuY3Rpb24gc3ZjX3Byb2Nlc3MoKQorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzIC1wJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgbWVzc2FnZXMgZm9yIE5GUyBjYWxscyBSRUFELCBSRUFETElOSywgUkVBRERJUiBhbmQgUkVBRERJUisuCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Zvcm1hdCAibmZzZDogUkVBRCIgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggMjBkM2I5NC4uZmM1ZTg1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNiwyMCArNiw0NyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGFuZCBpZWVlODAyMTFfcmVnZG9tIG1vZHVsZSBwYXJhbWV0ZXIKLVdoZW46CTIuNi4yOQorV2hhdDoJVGhlIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlcgorV2hlbjoJTWFyY2ggMjAxMCAvIGRlc2t0b3AgY2F0Y2h1cAorCitXaHk6CVRoaXMgd2FzIGluaGVyaXRlZCBieSB0aGUgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGNvZGUsCisJYW5kIGN1cnJlbnRseSBzZXJ2ZXMgYXMgYW4gb3B0aW9uIGZvciB1c2VycyB0byBkZWZpbmUgYW4KKwlJU08gLyBJRUMgMzE2NiBhbHBoYTIgY29kZSBmb3IgdGhlIGNvdW50cnkgdGhleSBhcmUgY3VycmVudGx5CisJcHJlc2VudCBpbi4gQWx0aG91Z2ggdGhlcmUgYXJlIHVzZXJzcGFjZSBBUEkgcmVwbGFjZW1lbnRzIGZvciB0aGlzCisJdGhyb3VnaCBubDgwMjExIGRpc3RyaWJ1dGlvbnMgaGF2ZW4ndCB5ZXQgY2F1Z2h0IHVwIHdpdGggaW1wbGVtZW50aW5nCisJZGVjZW50IGFsdGVybmF0aXZlcyB0aHJvdWdoIHN0YW5kYXJkIEdVSXMuIEFsdGhvdWdoIGF2YWlsYWJsZSBhcyBhbgorCW9wdGlvbiB0aHJvdWdoIGl3IG9yIHdwYV9zdXBwbGljYW50IGl0cyBqdXN0IGEgbWF0dGVyIG9mIHRpbWUgYmVmb3JlCisJZGlzdHJpYnV0aW9ucyBwaWNrIHVwIGdvb2QgR1VJIG9wdGlvbnMgZm9yIHRoaXMuIFRoZSBpZGVhbCBzb2x1dGlvbgorCXdvdWxkIGFjdHVhbGx5IGNvbnNpc3Qgb2YgaW50ZWxsaWdlbnQgZGVzaWducyB3aGljaCB3b3VsZCBkbyB0aGlzIGZvcgorCXRoZSB1c2VyIGF1dG9tYXRpY2FsbHkgZXZlbiB3aGVuIHRyYXZlbGxpbmcgdGhyb3VnaCBkaWZmZXJlbnQgY291bnRyaWVzLgorCVVudGlsIHRoZW4gd2UgbGVhdmUgdGhpcyBtb2R1bGUgcGFyYW1ldGVyIGFzIGEgY29tcHJvbWlzZS4KKworCVdoZW4gdXNlcnNwYWNlIGltcHJvdmVzIHdpdGggcmVhc29uYWJsZSB3aWRlbHktYXZhaWxhYmxlIGFsdGVybmF0aXZlcyBmb3IKKwl0aGlzIHdlIHdpbGwgbm8gbG9uZ2VyIG5lZWQgdGhpcyBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGVudHJ5IGhvcGVzIHRoYXQKKwlieSB0aGUgc3VwZXItZnV0dXJpc3RpY2FsbHkgbG9va2luZyBkYXRlIG9mICJNYXJjaCAyMDEwIiB3ZSB3aWxsIGhhdmUKKwlzdWNoIHJlcGxhY2VtZW50cyB3aWRlbHkgYXZhaWxhYmxlLgorCitXaG86CUx1aXMgUi4gUm9kcmlndWV6IDxscm9kcmlndWV6QGF0aGVyb3MuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIC0gb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uCitXaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCisKIFdoeToJVGhlIG9sZCByZWd1bGF0b3J5IGluZnJhc3RydWN0dXJlIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgb25lCiAJd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBzdGF0aWNhbGx5IGRlZmluZWQgcmVndWxhdG9yeSBkb21haW5zLiBXZSBkbwogCW5vdCB3YW50IHRvIGtlZXAgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiB0aGUga2VybmVsIGR1ZSB0byB0aGUKIAl0aGUgZHluYW1pYyBuYXR1cmUgb2YgcmVndWxhdG9yeSBsYXcgYW5kIGxvY2FsaXphdGlvbi4gV2Uga2VwdCBhcm91bmQKIAl0aGUgb2xkIHN0YXRpYyBkZWZpbml0aW9ucyBmb3IgdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBvZjoKKwogCQkqIFVTCiAJCSogSlAKIAkJKiBFVQorCiAJYW5kIHVzZWQgYnkgZGVmYXVsdCB0aGUgVVMgd2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgd2FzCi0Jc2V0LiBXZSBhbHNvIGtlcHQgYXJvdW5kIHRoZSBpZWVlODAyMTFfcmVnZG9tIG1vZHVsZSBwYXJhbWV0ZXIgaW4gY2FzZQotCXNvbWUgYXBwbGljYXRpb25zIHdlcmUgcmVseWluZyBvbiBpdC4gQ2hhbmdpbmcgcmVndWxhdG9yeSBkb21haW5zCi0JY2FuIG5vdyBiZSBkb25lIGluc3RlYWQgYnkgdXNpbmcgbmw4MDIxMSwgYXMgaXMgZG9uZSB3aXRoIGl3LgorCXNldC4gV2Ugd2lsbCByZW1vdmUgdGhpcyBvcHRpb24gb25jZSB0aGUgc3RhbmRhcmQgTGludXggZGVza3RvcCBjYXRjaGVzCisJdXAgd2l0aCB0aGUgbmV3IHVzZXJzcGFjZSBBUElzIHdlIGhhdmUgaW1wbGVtZW50ZWQuCisKIFdobzoJTHVpcyBSLiBSb2RyaWd1ZXogPGxyb2RyaWd1ZXpAYXRoZXJvcy5jb20+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjI5LDcgKzI1Niw5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2hhdDoJYjQzIHN1cHBvcnQgZm9yIGZpcm13YXJlIHJldmlzaW9uIDwgNDEwCi1XaGVuOglKdWx5IDIwMDgKK1doZW46CVRoZSBzY2hlZHVsZSB3YXMgSnVseSAyMDA4LCBidXQgaXQgd2FzIGRlY2lkZWQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8ga2VlcCB0aGUKKyAgICAgICAgY29kZSBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBtYWpvciBtYWludGFuYW5jZSBoZWFkYWNoZXMuCisJU28gaXQgX2NvdWxkXyBiZSByZW1vdmVkIF9hbnlfIHRpbWUgbm93LCBpZiBpdCBjb25mbGljdHMgd2l0aCBzb21ldGhpbmcgbmV3LgogV2h5OglUaGUgc3VwcG9ydCBjb2RlIGZvciB0aGUgb2xkIGZpcm13YXJlIGh1cnRzIGNvZGUgcmVhZGFiaWxpdHkvbWFpbnRhaW5hYmlsaXR5CiAJYW5kIHNsaWdodGx5IGh1cnRzIHJ1bnRpbWUgcGVyZm9ybWFuY2UuIEJ1Z2ZpeGVzIGZvciB0aGUgb2xkIGZpcm13YXJlCiAJYXJlIG5vdCBwcm92aWRlZCBieSBCcm9hZGNvbSBhbnltb3JlLgpAQCAtMjQ0LDEzICsyNzMsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJcmVtb3ZlIEhJRCBjb21wYXQgc3VwcG9ydAotV2hlbjoJMi42LjI5Ci1XaHk6CW5lZWRlZCBvbmx5IGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHVudGlsIGRpc3Ryb3MgZml4IHRoZW1zZWx2ZXMgdXAKLVdobzoJSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6IHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCkKIFdoZW46IE9jdG9iZXIgMjAwOQogV2h5OiAgVGhlICVwRiB2c3ByaW50ZiBmb3JtYXQgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBpbiBhCkBAIC0zMTEsNyArMzMzLDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGF0OglpMmNfYXR0YWNoX2NsaWVudCgpLCBpMmNfZGV0YWNoX2NsaWVudCgpLCBpMmNfZHJpdmVyLT5kZXRhY2hfY2xpZW50KCkKLVdoZW46CTIuNi4yOSAoaWRlYWxseSkgb3IgMi42LjMwIChtb3JlIGxpa2VseSkKK1doZW46CTIuNi4zMAorQ2hlY2s6CWkyY19hdHRhY2hfY2xpZW50IGkyY19kZXRhY2hfY2xpZW50CiBXaHk6CURlcHJlY2F0ZWQgYnkgdGhlIG5ldyAoc3RhbmRhcmQpIGRldmljZSBkcml2ZXIgYmluZGluZyBtb2RlbC4gVXNlCiAJaTJjX2RyaXZlci0+cHJvYmUoKSBhbmQgLT5yZW1vdmUoKSBpbnN0ZWFkLgogV2hvOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KQEAgLTMyNiwxNyArMzQ5LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CVNFTGludXggImNvbXBhdF9uZXQiIGZ1bmN0aW9uYWxpdHkKLVdoZW46CTIuNi4zMCBhdCB0aGUgZWFybGllc3QKLVdoeToJSW4gMi42LjE4IHRoZSBTZWNtYXJrIGNvbmNlcHQgd2FzIGludHJvZHVjZWQgdG8gcmVwbGFjZSB0aGUgImNvbXBhdF9uZXQiCi0JbmV0d29yayBhY2Nlc3MgY29udHJvbCBmdW5jdGlvbmFsaXR5IG9mIFNFTGludXguICBTZWNtYXJrIG9mZmVycyBib3RoCi0JYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBncmVhdGVyIGZsZXhpYmlsaXR5IHRoYW4gdGhlICJjb21wYXRfbmV0IgotCW1lY2hhbmlzbS4gIE5vdyB0aGF0IHRoZSBtYWpvciBMaW51eCBkaXN0cmlidXRpb25zIGhhdmUgbW92ZWQgdG8KLQlTZWNtYXJrLCBpdCBpcyB0aW1lIHRvIGRlcHJlY2F0ZSB0aGUgb2xkZXIgbWVjaGFuaXNtIGFuZCBzdGFydCB0aGUKLQlwcm9jZXNzIG9mIHJlbW92aW5nIHRoZSBvbGQgY29kZS4KLVdobzoJUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJc3lzZnMgdWkgZm9yIGNoYW5naW5nIHA0LWNsb2NrbW9kIHBhcmFtZXRlcnMKIFdoZW46CVNlcHRlbWJlciAyMDA5CiBXaHk6CVNlZSBjb21taXRzIDEyOWY4YWU5YjFiNWJlOTQ1MTdkYTc2MDA5ZWE5NTZlODkxMDRjZTggYW5kCkBAIC0zNDQsMyArMzU2LDIwIEBACiAJUmVtb3ZhbCBpcyBzdWJqZWN0IHRvIGZpeGluZyBhbnkgcmVtYWluaW5nIGJ1Z3MgaW4gQUNQSSB3aGljaCBtYXkKIAljYXVzZSB0aGUgdGhlcm1hbCB0aHJvdHRsaW5nIG5vdCB0byBoYXBwZW4gYXQgdGhlIHJpZ2h0IHRpbWUuCiBXaG86CURhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglfX2RvX0lSUSBhbGwgaW4gb25lIGZpdHMgbm90aGluZyBpbnRlcnJ1cHQgaGFuZGxlcgorV2hlbjoJMi42LjMyCitXaHk6CV9fZG9fSVJRIHdhcyBrZXB0IGZvciBlYXN5IG1pZ3JhdGlvbiB0byB0aGUgdHlwZSBmbG93IGhhbmRsZXJzLgorCU1vcmUgdGhhbiB0d28geWVhcnMgb2YgbWlncmF0aW9uIHRpbWUgaXMgZW5vdWdoLgorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJb2Jzb2xldGUgZ2VuZXJpYyBpcnEgZGVmaW5lcyBhbmQgdHlwZWRlZnMKK1doZW46CTIuNi4zMAorV2h5OglUaGUgZGVmaW5lcyBhbmQgdHlwZWRlZnMgKGh3X2ludGVycnVwdF90eXBlLCBub19pcnFfdHlwZSwgaXJxX2Rlc2NfdCkKKwloYXZlIGJlZW4ga2VwdCBhcm91bmQgZm9yIG1pZ3JhdGlvbiByZWFzb25zLiBBZnRlciBtb3JlIHRoYW4gdHdvIHllYXJzCisJaXQncyB0aW1lIHRvIHJlbW92ZSB0aGVtIGZpbmFsbHkKK1dobzoJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggZWM2YTkzOS4uNGU3OGNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtNDM3LDggKzQzNywxMSBAQAogY2FuIGFuZCBzaG91bGQgYmUgZG9uZSB1c2luZyB0aGUgaW50ZXJuYWwgbG9ja2luZyB3aXRoIHNtYWxsZXIgY3JpdGljYWwgYXJlYXMpLgogQ3VycmVudCB3b3JzdCBvZmZlbmRlciBpcyBleHQyX2dldF9ibG9jaygpLi4uCiAKLS0+ZmFzeW5jKCkgaXMgYSBtZXNzLiBUaGlzIGFyZWEgbmVlZHMgYSBiaWcgY2xlYW51cCBhbmQgdGhhdCB3aWxsIHByb2JhYmx5Ci1hZmZlY3QgbG9ja2luZy4KKy0+ZmFzeW5jKCkgaXMgY2FsbGVkIHdpdGhvdXQgQktMIHByb3RlY3Rpb24sIGFuZCBpcyByZXNwb25zaWJsZSBmb3IKK21haW50YWluaW5nIHRoZSBGQVNZTkMgYml0IGluIGZpbHAtPmZfZmxhZ3MuICBNb3N0IGluc3RhbmNlcyBjYWxsCitmYXN5bmNfaGVscGVyKCksIHdoaWNoIGRvZXMgdGhhdCBtYWludGVuYW5jZSwgc28gaXQncyBub3Qgbm9ybWFsbHkKK3NvbWV0aGluZyBvbmUgbmVlZHMgdG8gd29ycnkgYWJvdXQuICBSZXR1cm4gdmFsdWVzID4gMCB3aWxsIGJlIG1hcHBlZCB0bworemVybyBpbiB0aGUgVkZTIGxheWVyLgogCiAtPnJlYWRkaXIoKSBhbmQgLT5pb2N0bCgpIG9uIGRpcmVjdG9yaWVzIG11c3QgYmUgY2hhbmdlZC4gSWRlYWxseSB3ZSB3b3VsZAogbW92ZSAtPnJlYWRkaXIoKSB0byBpbm9kZV9vcGVyYXRpb25zIGFuZCB1c2UgYSBzZXBhcmF0ZSBtZXRob2QgZm9yIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyCmluZGV4IGZhZTM0OTUuLjk2OThjMzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMgorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIKQEAgLTcsMTAgKzcsMTQgQEAKICAgKiBuRm9yY2UzIDI1MEdiIE1DUCAgICAgICAgICAxMGRlOjAwRTQgCiAgICogbkZvcmNlNCBNQ1AgICAgICAgICAgICAgICAgMTBkZTowMDUyCiAgICogbkZvcmNlNCBNQ1AtMDQgICAgICAgICAgICAgMTBkZTowMDM0Ci0gICogbkZvcmNlNCBNQ1A1MSAgICAgICAgICAgICAgMTBkZTowMjY0Ci0gICogbkZvcmNlNCBNQ1A1NSAgICAgICAgICAgICAgMTBkZTowMzY4Ci0gICogbkZvcmNlNCBNQ1A2MSAgICAgICAgICAgICAgMTBkZTowM0VCCi0gICogbkZvcmNlNCBNQ1A2NSAgICAgICAgICAgICAgMTBkZTowNDQ2CisgICogbkZvcmNlIE1DUDUxICAgICAgICAgICAgICAgMTBkZTowMjY0CisgICogbkZvcmNlIE1DUDU1ICAgICAgICAgICAgICAgMTBkZTowMzY4CisgICogbkZvcmNlIE1DUDYxICAgICAgICAgICAgICAgMTBkZTowM0VCCisgICogbkZvcmNlIE1DUDY1ICAgICAgICAgICAgICAgMTBkZTowNDQ2CisgICogbkZvcmNlIE1DUDY3ICAgICAgICAgICAgICAgMTBkZTowNTQyCisgICogbkZvcmNlIE1DUDczICAgICAgICAgICAgICAgMTBkZTowN0Q4CisgICogbkZvcmNlIE1DUDc4UyAgICAgICAgICAgICAgMTBkZTowNzUyCisgICogbkZvcmNlIE1DUDc5ICAgICAgICAgICAgICAgMTBkZTowQUEyCiAKIERhdGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWlsYWJsZSwgYnV0IHNlZW1zIHRvIGJlIHNpbWlsYXIgdG8gdGhlCiAgICAgICAgICAgIEFNRC04MTExIFNNQnVzIDIuMCBhZGFwdGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKaW5kZXggZWYxZWZhNy4uZjg4OTQ4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CkBAIC00LDcgKzQsNyBAQAogICAqIEludGVsIDgyMzcxQUIgUElJWDQgYW5kIFBJSVg0RQogICAqIEludGVsIDgyNDQzTVggKDQ0ME1YKQogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJbnRlbCB3ZWJzaXRlCi0gICogU2VydmVyV29ya3MgT1NCNCwgQ1NCNSwgQ1NCNiBhbmQgSFQtMTAwMCBzb3V0aGJyaWRnZXMKKyAgKiBTZXJ2ZXJXb3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwIGFuZCBIVC0xMTAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogT25seSBhdmFpbGFibGUgdmlhIE5EQSBmcm9tIFNlcnZlcldvcmtzCiAgICogQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCBhbmQgU0I4MDAgc291dGhicmlkZ2VzCiAgICAgRGF0YXNoZWV0OiBOb3QgcHVibGljbHkgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgYi9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1Y2U1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwpAQCAtMCwwICsxLDE2NyBAQAorSG93IHRvIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5saWtlIFBDSSBvciBVU0IgZGV2aWNlcywgSTJDIGRldmljZXMgYXJlIG5vdCBlbnVtZXJhdGVkIGF0IHRoZSBoYXJkd2FyZQorbGV2ZWwuIEluc3RlYWQsIHRoZSBzb2Z0d2FyZSBtdXN0IGtub3cgd2hpY2ggZGV2aWNlcyBhcmUgY29ubmVjdGVkIG9uIGVhY2gKK0kyQyBidXMgc2VnbWVudCwgYW5kIHdoYXQgYWRkcmVzcyB0aGVzZSBkZXZpY2VzIGFyZSB1c2luZy4gRm9yIHRoaXMKK3JlYXNvbiwgdGhlIGtlcm5lbCBjb2RlIG11c3QgaW5zdGFudGlhdGUgSTJDIGRldmljZXMgZXhwbGljaXRseS4gVGhlcmUgYXJlCitzZXZlcmFsIHdheXMgdG8gYWNoaWV2ZSB0aGlzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgYW5kIHJlcXVpcmVtZW50cy4KKworCitNZXRob2QgMTogRGVjbGFyZSB0aGUgSTJDIGRldmljZXMgYnkgYnVzIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtZXRob2QgaXMgYXBwcm9wcmlhdGUgd2hlbiB0aGUgSTJDIGJ1cyBpcyBhIHN5c3RlbSBidXMgYXMgaXMgdGhlIGNhc2UKK2ZvciBtYW55IGVtYmVkZGVkIHN5c3RlbXMuIE9uIHN1Y2ggc3lzdGVtcywgZWFjaCBJMkMgYnVzIGhhcyBhIG51bWJlcgord2hpY2ggaXMga25vd24gaW4gYWR2YW5jZS4gSXQgaXMgdGh1cyBwb3NzaWJsZSB0byBwcmUtZGVjbGFyZSB0aGUgSTJDCitkZXZpY2VzIHdoaWNoIGxpdmUgb24gdGhpcyBidXMuIFRoaXMgaXMgZG9uZSB3aXRoIGFuIGFycmF5IG9mIHN0cnVjdAoraTJjX2JvYXJkX2luZm8gd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSBjYWxsaW5nIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKCkuCisKK0V4YW1wbGUgKGZyb20gb21hcDIgaDQpOgorCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgaDRfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJpc3AxMzAxX29tYXAiLCAweDJkKSwKKwkJLmlycQkJPSBPTUFQX0dQSU9fSVJRKDEyNSksCisJfSwKKwl7CS8qIEVFUFJPTSBvbiBtYWluYm9hcmQgKi8KKwkJSTJDX0JPQVJEX0lORk8oIjI0YzAxIiwgMHg1MiksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm0yNGMwMSwKKwl9LAorCXsJLyogRUVQUk9NIG9uIGNwdSBjYXJkICovCisJCUkyQ19CT0FSRF9JTkZPKCIyNGMwMSIsIDB4NTcpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtMjRjMDEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X2luaXQodm9pZCkKK3sKKwkoLi4uKQorCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGg0X2kyY19ib2FyZF9pbmZvLAorCQkJQVJSQVlfU0laRShoNF9pMmNfYm9hcmRfaW5mbykpOworCSguLi4pCit9CisKK1RoZSBhYm92ZSBjb2RlIGRlY2xhcmVzIDMgZGV2aWNlcyBvbiBJMkMgYnVzIDEsIGluY2x1ZGluZyB0aGVpciByZXNwZWN0aXZlCithZGRyZXNzZXMgYW5kIGN1c3RvbSBkYXRhIG5lZWRlZCBieSB0aGVpciBkcml2ZXJzLiBXaGVuIHRoZSBJMkMgYnVzIGluCitxdWVzdGlvbiBpcyByZWdpc3RlcmVkLCB0aGUgSTJDIGRldmljZXMgd2lsbCBiZSBpbnN0YW50aWF0ZWQgYXV0b21hdGljYWxseQorYnkgaTJjLWNvcmUuCisKK1RoZSBkZXZpY2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSB1bmJvdW5kIGFuZCBkZXN0cm95ZWQgd2hlbiB0aGUgSTJDIGJ1cwordGhleSBzaXQgb24gZ29lcyBhd2F5IChpZiBldmVyLikKKworCitNZXRob2QgMjogSW5zdGFudGlhdGUgdGhlIGRldmljZXMgZXhwbGljaXRseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtZXRob2QgaXMgYXBwcm9wcmlhdGUgd2hlbiBhIGxhcmdlciBkZXZpY2UgdXNlcyBhbiBJMkMgYnVzIGZvcgoraW50ZXJuYWwgY29tbXVuaWNhdGlvbi4gQSB0eXBpY2FsIGNhc2UgaXMgVFYgYWRhcHRlcnMuIFRoZXNlIGNhbiBoYXZlIGEKK3R1bmVyLCBhIHZpZGVvIGRlY29kZXIsIGFuIGF1ZGlvIGRlY29kZXIsIGV0Yy4gdXN1YWxseSBjb25uZWN0ZWQgdG8gdGhlCittYWluIGNoaXAgYnkgdGhlIG1lYW5zIG9mIGFuIEkyQyBidXMuIFlvdSB3b24ndCBrbm93IHRoZSBudW1iZXIgb2YgdGhlIEkyQworYnVzIGluIGFkdmFuY2UsIHNvIHRoZSBtZXRob2QgMSBkZXNjcmliZWQgYWJvdmUgY2FuJ3QgYmUgdXNlZC4gSW5zdGVhZCwKK3lvdSBjYW4gaW5zdGFudGlhdGUgeW91ciBJMkMgZGV2aWNlcyBleHBsaWNpdGx5LiBUaGlzIGlzIGRvbmUgYnkgZmlsbGluZworYSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gYW5kIGNhbGxpbmcgaTJjX25ld19kZXZpY2UoKS4KKworRXhhbXBsZSAoZnJvbSB0aGUgc2ZlNDAwMSBuZXR3b3JrIGRyaXZlcik6CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc2ZlNDAwMV9od21vbl9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJtYXg2NjQ3IiwgMHg0ZSksCit9OworCitpbnQgc2ZlNDAwMV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJKC4uLikKKwllZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50ID0KKwkJaTJjX25ld19kZXZpY2UoJmVmeC0+aTJjX2FkYXAsICZzZmU0MDAxX2h3bW9uX2luZm8pOworCisJKC4uLikKK30KKworVGhlIGFib3ZlIGNvZGUgaW5zdGFudGlhdGVzIDEgSTJDIGRldmljZSBvbiB0aGUgSTJDIGJ1cyB3aGljaCBpcyBvbiB0aGUKK25ldHdvcmsgYWRhcHRlciBpbiBxdWVzdGlvbi4KKworQSB2YXJpYW50IG9mIHRoaXMgaXMgd2hlbiB5b3UgZG9uJ3Qga25vdyBmb3Igc3VyZSBpZiBhbiBJMkMgZGV2aWNlIGlzCitwcmVzZW50IG9yIG5vdCAoZm9yIGV4YW1wbGUgZm9yIGFuIG9wdGlvbmFsIGZlYXR1cmUgd2hpY2ggaXMgbm90IHByZXNlbnQKK29uIGNoZWFwIHZhcmlhbnRzIG9mIGEgYm9hcmQgYnV0IHlvdSBoYXZlIG5vIHdheSB0byB0ZWxsIHRoZW0gYXBhcnQpLCBvcgoraXQgbWF5IGhhdmUgZGlmZmVyZW50IGFkZHJlc3NlcyBmcm9tIG9uZSBib2FyZCB0byB0aGUgbmV4dCAobWFudWZhY3R1cmVyCitjaGFuZ2luZyBpdHMgZGVzaWduIHdpdGhvdXQgbm90aWNlKS4gSW4gdGhpcyBjYXNlLCB5b3UgY2FuIGNhbGwKK2kyY19uZXdfcHJvYmVkX2RldmljZSgpIGluc3RlYWQgb2YgaTJjX25ld19kZXZpY2UoKS4KKworRXhhbXBsZSAoZnJvbSB0aGUgcG54NDAwOCBPSENJIGRyaXZlcik6CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHVzYl9oY2RfcG54NDAwOF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCSguLi4pCisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjX2luZm87CisKKwkoLi4uKQorCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDIpOworCW1lbXNldCgmaTJjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlzdHJsY3B5KGkyY19pbmZvLm5hbWUsICJpc3AxMzAxX3BueCIsIEkyQ19OQU1FX1NJWkUpOworCWlzcDEzMDFfaTJjX2NsaWVudCA9IGkyY19uZXdfcHJvYmVkX2RldmljZShpMmNfYWRhcCwgJmkyY19pbmZvLAorCQkJCQkJICAgbm9ybWFsX2kyYyk7CisJaTJjX3B1dF9hZGFwdGVyKGkyY19hZGFwKTsKKwkoLi4uKQorfQorCitUaGUgYWJvdmUgY29kZSBpbnN0YW50aWF0ZXMgdXAgdG8gMSBJMkMgZGV2aWNlIG9uIHRoZSBJMkMgYnVzIHdoaWNoIGlzIG9uCit0aGUgT0hDSSBhZGFwdGVyIGluIHF1ZXN0aW9uLiBJdCBmaXJzdCB0cmllcyBhdCBhZGRyZXNzIDB4MmMsIGlmIG5vdGhpbmcKK2lzIGZvdW5kIHRoZXJlIGl0IHRyaWVzIGFkZHJlc3MgMHgyZCwgYW5kIGlmIHN0aWxsIG5vdGhpbmcgaXMgZm91bmQsIGl0CitzaW1wbHkgZ2l2ZXMgdXAuCisKK1RoZSBkcml2ZXIgd2hpY2ggaW5zdGFudGlhdGVkIHRoZSBJMkMgZGV2aWNlIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95aW5nCitpdCBvbiBjbGVhbnVwLiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyBpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoKSBvbiB0aGUKK3BvaW50ZXIgdGhhdCB3YXMgZWFybGllciByZXR1cm5lZCBieSBpMmNfbmV3X2RldmljZSgpIG9yCitpMmNfbmV3X3Byb2JlZF9kZXZpY2UoKS4KKworCitNZXRob2QgMzogUHJvYmUgYW4gSTJDIGJ1cyBmb3IgY2VydGFpbiBkZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcyB5b3UgZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IGFuIEkyQyBkZXZpY2UsIG5vdCBldmVuCit0byBjYWxsIGkyY19uZXdfcHJvYmVkX2RldmljZSgpLiBUaGUgdHlwaWNhbCBjYXNlIGlzIGhhcmR3YXJlIG1vbml0b3JpbmcKK2NoaXBzIG9uIFBDIG1haW5ib2FyZHMuIFRoZXJlIGFyZSBzZXZlcmFsIGRvemVuIG1vZGVscywgd2hpY2ggY2FuIGxpdmUKK2F0IDI1IGRpZmZlcmVudCBhZGRyZXNzZXMuIEdpdmVuIHRoZSBodWdlIG51bWJlciBvZiBtYWluYm9hcmRzIG91dCB0aGVyZSwKK2l0IGlzIG5leHQgdG8gaW1wb3NzaWJsZSB0byBidWlsZCBhbiBleGhhdXN0aXZlIGxpc3Qgb2YgdGhlIGhhcmR3YXJlCittb25pdG9yaW5nIGNoaXBzIGJlaW5nIHVzZWQuIEZvcnR1bmF0ZWx5LCBtb3N0IG9mIHRoZXNlIGNoaXBzIGhhdmUKK21hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEIHJlZ2lzdGVycywgc28gdGhleSBjYW4gYmUgaWRlbnRpZmllZCBieQorcHJvYmluZy4KKworSW4gdGhhdCBjYXNlLCBJMkMgZGV2aWNlcyBhcmUgbmVpdGhlciBkZWNsYXJlZCBub3IgaW5zdGFudGlhdGVkCitleHBsaWNpdGx5LiBJbnN0ZWFkLCBpMmMtY29yZSB3aWxsIHByb2JlIGZvciBzdWNoIGRldmljZXMgYXMgc29vbiBhcyB0aGVpcgorZHJpdmVycyBhcmUgbG9hZGVkLCBhbmQgaWYgYW55IGlzIGZvdW5kLCBhbiBJMkMgZGV2aWNlIHdpbGwgYmUKK2luc3RhbnRpYXRlZCBhdXRvbWF0aWNhbGx5LiBJbiBvcmRlciB0byBwcmV2ZW50IGFueSBtaXNiZWhhdmlvciBvZiB0aGlzCittZWNoYW5pc20sIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5OgorKiBUaGUgSTJDIGRldmljZSBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGRldGVjdCgpIG1ldGhvZCwgd2hpY2gKKyAgaWRlbnRpZmllcyBhIHN1cHBvcnRlZCBkZXZpY2UgYnkgcmVhZGluZyBmcm9tIGFyYml0cmFyeSByZWdpc3RlcnMuCisqIE9ubHkgYnVzZXMgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIGEgc3VwcG9ydGVkIGRldmljZSBhbmQgYWdyZWUgdG8gYmUKKyAgcHJvYmVkLCB3aWxsIGJlIHByb2JlZC4gRm9yIGV4YW1wbGUgdGhpcyBhdm9pZHMgcHJvYmluZyBmb3IgaGFyZHdhcmUKKyAgbW9uaXRvcmluZyBjaGlwcyBvbiBhIFRWIGFkYXB0ZXIuCisKK0V4YW1wbGU6CitTZWUgbG05MF9kcml2ZXIgYW5kIGxtOTBfZGV0ZWN0KCkgaW4gZHJpdmVycy9od21vbi9sbTkwLmMKKworSTJDIGRldmljZXMgaW5zdGFudGlhdGVkIGFzIGEgcmVzdWx0IG9mIHN1Y2ggYSBzdWNjZXNzZnVsIHByb2JlIHdpbGwgYmUKK2Rlc3Ryb3llZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGRyaXZlciB3aGljaCBkZXRlY3RlZCB0aGVtIGlzIHJlbW92ZWQsCitvciB3aGVuIHRoZSB1bmRlcmx5aW5nIEkyQyBidXMgaXMgaXRzZWxmIGRlc3Ryb3llZCwgd2hpY2hldmVyIGhhcHBlbnMKK2ZpcnN0LgorCitUaG9zZSBvZiB5b3UgZmFtaWxpYXIgd2l0aCB0aGUgaTJjIHN1YnN5c3RlbSBvZiAyLjQga2VybmVscyBhbmQgZWFybHkgMi42CitrZXJuZWxzIHdpbGwgZmluZCBvdXQgdGhhdCB0aGlzIG1ldGhvZCAzIGlzIGVzc2VudGlhbGx5IHNpbWlsYXIgdG8gd2hhdAord2FzIGRvbmUgdGhlcmUuIFR3byBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBhcmU6CisqIFByb2JpbmcgaXMgb25seSBvbmUgd2F5IHRvIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIG5vdywgd2hpbGUgaXQgd2FzIHRoZQorICBvbmx5IHdheSBiYWNrIHRoZW4uIFdoZXJlIHBvc3NpYmxlLCBtZXRob2RzIDEgYW5kIDIgc2hvdWxkIGJlIHByZWZlcnJlZC4KKyAgTWV0aG9kIDMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIG90aGVyIHdheSwgYXMgaXQgY2FuIGhhdmUKKyAgdW5kZXNpcmFibGUgc2lkZSBlZmZlY3RzLgorKiBJMkMgYnVzZXMgbXVzdCBub3cgZXhwbGljaXRseSBzYXkgd2hpY2ggSTJDIGRyaXZlciBjbGFzc2VzIGNhbiBwcm9iZQorICB0aGVtIChieSB0aGUgbWVhbnMgb2YgdGhlIGNsYXNzIGJpdGZpZWxkKSwgd2hpbGUgYWxsIEkyQyBidXNlcyB3ZXJlCisgIHByb2JlZCBieSBkZWZhdWx0IGJhY2sgdGhlbi4gVGhlIGRlZmF1bHQgaXMgYW4gZW1wdHkgY2xhc3Mgd2hpY2ggbWVhbnMKKyAgdGhhdCBubyBwcm9iaW5nIGhhcHBlbnMuIFRoZSBwdXJwb3NlIG9mIHRoZSBjbGFzcyBiaXRmaWVsZCBpcyB0byBsaW1pdAorICB0aGUgYWZvcmVtZW50aW9uZWQgdW5kZXNpcmFibGUgc2lkZSBlZmZlY3RzLgorCitPbmNlIGFnYWluLCBtZXRob2QgMyBzaG91bGQgYmUgYXZvaWRlZCB3aGVyZXZlciBwb3NzaWJsZS4gRXhwbGljaXQgZGV2aWNlCitpbnN0YW50aWF0aW9uIChtZXRob2RzIDEgYW5kIDIpIGlzIG11Y2ggcHJlZmVycmVkIGZvciBpdCBpcyBzYWZlciBhbmQKK2Zhc3Rlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwppbmRleCA2YjlhZjdkLi5jMWEwNmY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCkBAIC0yMDcsMTUgKzIwNywyNiBAQAogaWRlbnRpZnkgc3VwcG9ydGVkIGRldmljZXMgKHJldHVybmluZyAwIGZvciBzdXBwb3J0ZWQgb25lcyBhbmQgLUVOT0RFVgogZm9yIHVuc3VwcG9ydGVkIG9uZXMpLCBhIGxpc3Qgb2YgYWRkcmVzc2VzIHRvIHByb2JlLCBhbmQgYSBkZXZpY2UgdHlwZQogKG9yIGNsYXNzKSBzbyB0aGF0IG9ubHkgSTJDIGJ1c2VzIHdoaWNoIG1heSBoYXZlIHRoYXQgdHlwZSBvZiBkZXZpY2UKLWNvbm5lY3RlZCAoYW5kIG5vdCBvdGhlcndpc2UgZW51bWVyYXRlZCkgd2lsbCBiZSBwcm9iZWQuICBUaGUgaTJjCi1jb3JlIHdpbGwgdGhlbiBjYWxsIHlvdSBiYWNrIGFzIG5lZWRlZCBhbmQgd2lsbCBpbnN0YW50aWF0ZSBhIGRldmljZQotZm9yIHlvdSBmb3IgZXZlcnkgc3VjY2Vzc2Z1bCBkZXRlY3Rpb24uCitjb25uZWN0ZWQgKGFuZCBub3Qgb3RoZXJ3aXNlIGVudW1lcmF0ZWQpIHdpbGwgYmUgcHJvYmVkLiAgRm9yIGV4YW1wbGUsCithIGRyaXZlciBmb3IgYSBoYXJkd2FyZSBtb25pdG9yaW5nIGNoaXAgZm9yIHdoaWNoIGF1dG8tZGV0ZWN0aW9uIGlzCituZWVkZWQgd291bGQgc2V0IGl0cyBjbGFzcyB0byBJMkNfQ0xBU1NfSFdNT04sIGFuZCBvbmx5IEkyQyBhZGFwdGVycword2l0aCBhIGNsYXNzIGluY2x1ZGluZyBJMkNfQ0xBU1NfSFdNT04gd291bGQgYmUgcHJvYmVkIGJ5IHRoaXMgZHJpdmVyLgorTm90ZSB0aGF0IHRoZSBhYnNlbmNlIG9mIG1hdGNoaW5nIGNsYXNzZXMgZG9lcyBub3QgcHJldmVudCB0aGUgdXNlIG9mCithIGRldmljZSBvZiB0aGF0IHR5cGUgb24gdGhlIGdpdmVuIEkyQyBhZGFwdGVyLiAgQWxsIGl0IHByZXZlbnRzIGlzCithdXRvLWRldGVjdGlvbjsgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBvZiBkZXZpY2VzIGlzIHN0aWxsIHBvc3NpYmxlLgogCiBOb3RlIHRoYXQgdGhpcyBtZWNoYW5pc20gaXMgcHVyZWx5IG9wdGlvbmFsIGFuZCBub3Qgc3VpdGFibGUgZm9yIGFsbAogZGV2aWNlcy4gIFlvdSBuZWVkIHNvbWUgcmVsaWFibGUgd2F5IHRvIGlkZW50aWZ5IHRoZSBzdXBwb3J0ZWQgZGV2aWNlcwogKHR5cGljYWxseSB1c2luZyBkZXZpY2Utc3BlY2lmaWMsIGRlZGljYXRlZCBpZGVudGlmaWNhdGlvbiByZWdpc3RlcnMpLAogb3RoZXJ3aXNlIG1pc2RldGVjdGlvbnMgYXJlIGxpa2VseSB0byBvY2N1ciBhbmQgdGhpbmdzIGNhbiBnZXQgd3JvbmcKLXF1aWNrbHkuCitxdWlja2x5LiAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEkyQyBwcm90b2NvbCBkb2Vzbid0IGluY2x1ZGUgYW55CitzdGFuZGFyZCB3YXkgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhIGNoaXAgYXQgYSBnaXZlbiBhZGRyZXNzLCBsZXQKK2Fsb25lIGEgc3RhbmRhcmQgd2F5IHRvIGlkZW50aWZ5IGRldmljZXMuICBFdmVuIHdvcnNlIGlzIHRoZSBsYWNrIG9mCitzZW1hbnRpY3MgYXNzb2NpYXRlZCB0byBidXMgdHJhbnNmZXJzLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzYW1lCit0cmFuc2ZlciBjYW4gYmUgc2VlbiBhcyBhIHJlYWQgb3BlcmF0aW9uIGJ5IGEgY2hpcCBhbmQgYXMgYSB3cml0ZQorb3BlcmF0aW9uIGJ5IGFub3RoZXIgY2hpcC4gIEZvciB0aGVzZSByZWFzb25zLCBleHBsaWNpdCBkZXZpY2UKK2luc3RhbnRpYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBwcmVmZXJyZWQgdG8gYXV0by1kZXRlY3Rpb24gd2hlcmUKK3Bvc3NpYmxlLgogCiAKIERldmljZSBEZWxldGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA1NGYyMWE1Li5iZTNiZGU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDQsNiArNDQsNyBAQAogCUZCCVRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGVuYWJsZWQuCiAJSFcJQXBwcm9wcmlhdGUgaGFyZHdhcmUgaXMgZW5hYmxlZC4KIAlJQS02NAlJQS02NCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlJTUEgICAgIEludGVncml0eSBtZWFzdXJlbWVudCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlJT1NDSEVECU1vcmUgdGhhbiBvbmUgSS9PIHNjaGVkdWxlciBpcyBlbmFibGVkLgogCUlQX1BOUAlJUCBESENQLCBCT09UUCwgb3IgUkFSUCBpcyBlbmFibGVkLgogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KQEAgLTQ5MiwxMCArNDkzLDEyIEBACiAJCQlEZWZhdWx0OiA2NAogCiAJaHBldD0JCVtYODYtMzIsSFBFVF0gb3B0aW9uIHRvIGNvbnRyb2wgSFBFVCB1c2FnZQotCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfQorCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfAorCQkJCXZlcmJvc2UgfQogCQkJZGlzYWJsZTogZGlzYWJsZSBIUEVUIGFuZCB1c2UgUElUIGluc3RlYWQKIAkJCWZvcmNlOiBhbGxvdyBmb3JjZSBlbmFibGVkIG9mIHVuZG9jdW1lbnRlZCBjaGlwcyAoSUNINCwKIAkJCVZJQSwgblZpZGlhKQorCQkJdmVyYm9zZTogc2hvdyBjb250ZW50cyBvZiBIUEVUIHJlZ2lzdGVycyBkdXJpbmcgc2V0dXAKIAogCWNvbTIwMDIwPQlbSFcsTkVUXSBBUkNuZXQgLSBDT00yMDAyMCBjaGlwc2V0CiAJCQlGb3JtYXQ6CkBAIC04MjksNiArODMyLDE1IEBACiAKIAlodmNfaXVjdj0JW1MzOTBdIE51bWJlciBvZiB6L1ZNIElVQ1YgaHlwZXJ2aXNvciBjb25zb2xlIChIVkMpCiAJCQkgICAgICAgdGVybWluYWwgZGV2aWNlcy4gVmFsaWQgdmFsdWVzOiAwLi44CisJaHZjX2l1Y3ZfYWxsb3c9CVtTMzkwXSBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzLgorCQkJICAgICAgIElmIHNwZWNpZmllZCwgei9WTSBJVUNWIEhWQyBhY2NlcHRzIGNvbm5lY3Rpb25zCisJCQkgICAgICAgZnJvbSBsaXN0ZWQgei9WTSB1c2VyIElEcyBvbmx5LgorCisJaTJjX2J1cz0JW0hXXSBPdmVycmlkZSB0aGUgZGVmYXVsdCBib2FyZCBzcGVjaWZpYyBJMkMgYnVzIHNwZWVkCisJCQkgICAgIG9yIHJlZ2lzdGVyIGFuIGFkZGl0aW9uYWwgSTJDIGJ1cyB0aGF0IGlzIG5vdAorCQkJICAgICByZWdpc3RlcmVkIGZyb20gYm9hcmQgaW5pdGlhbGl6YXRpb24gY29kZS4KKwkJCSAgICAgRm9ybWF0OgorCQkJICAgICA8YnVzX2lkPiw8Y2xrcmF0ZT4KIAogCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKQEAgLTkwMiw2ICs5MTQsMTUgQEAKIAlpaGFzaF9lbnRyaWVzPQlbS05MXQogCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIGlub2RlIGNhY2hlLgogCisJaW1hX2F1ZGl0PQlbSU1BXQorCQkJRm9ybWF0OiB7ICIwIiB8ICIxIiB9CisJCQkwIC0tIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4gKERlZmF1bHQpCisJCQkxIC0tIGVuYWJsZSBpbmZvcm1hdGlvbmFsIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4KKworCWltYV9oYXNoPQlbSU1BXQorCQkJRm9ybXQ6IHsgInNoYTEiIHwgIm1kNSIgfQorCQkJZGVmYXVsdDogInNoYTEiCisKIAlpbjIwMDA9CQlbSFcsU0NTSV0KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2luMjAwMC5jLgogCkBAIC0xMzEwLDggKzEzMzEsMTMgQEAKIAogCW1lbXRlc3Q9CVtLTkwsWDg2XSBFbmFibGUgbWVtdGVzdAogCQkJRm9ybWF0OiA8aW50ZWdlcj4KLQkJCXJhbmdlOiAwLDQgOiBwYXR0ZXJuIG51bWJlcgogCQkJZGVmYXVsdCA6IDAgPGRpc2FibGU+CisJCQlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtZW10ZXN0IHBhc3NlcyB0byBiZQorCQkJcGVyZm9ybWVkLiBFYWNoIHBhc3Mgc2VsZWN0cyBhbm90aGVyIHRlc3QKKwkJCXBhdHRlcm4gZnJvbSBhIGdpdmVuIHNldCBvZiBwYXR0ZXJucy4gTWVtdGVzdAorCQkJZmlsbHMgdGhlIG1lbW9yeSB3aXRoIHRoaXMgcGF0dGVybiwgdmFsaWRhdGVzCisJCQltZW1vcnkgY29udGVudHMgYW5kIHJlc2VydmVzIGJhZCBtZW1vcnkKKwkJCXJlZ2lvbnMgdGhhdCBhcmUgZGV0ZWN0ZWQuCiAKIAltZXllLio9CQlbSFddIFNldCBNb3Rpb25FeWUgQ2FtZXJhIHBhcmFtZXRlcnMKIAkJCVNlZSBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0LgpAQCAtMTgxNiwxMSArMTg0Miw2IEBACiAJCQlhdXRvY29uZmlndXJhdGlvbi4KIAkJCVJhbmdlcyBhcmUgaW4gcGFpcnMgKG1lbW9yeSBiYXNlIGFuZCBzaXplKS4KIAotCWR5bmFtaWNfcHJpbnRrCUVuYWJsZXMgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgaWYKLQkJCUNPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBoYXMgYmVlbiBlbmFibGVkLgotCQkJVGhlc2UgY2FuIGFsc28gYmUgc3dpdGNoZWQgb24vb2ZmIHZpYQotCQkJPGRlYnVnZnM+L2R5bmFtaWNfcHJpbnRrL21vZHVsZXMKLQogCXByaW50LWZhdGFsLXNpZ25hbHM9CiAJCQlbS05MXSBkZWJ1ZzogcHJpbnQgZmF0YWwgc2lnbmFscwogCQkJcHJpbnQtZmF0YWwtc2lnbmFscz0xOiBwcmludCBzZWdmYXVsdCBpbmZvIHRvCkBAIC0yMDA5LDE1ICsyMDMwLDYgQEAKIAkJCUlmIGVuYWJsZWQgYXQgYm9vdCB0aW1lLCAvc2VsaW51eC9kaXNhYmxlIGNhbiBiZSB1c2VkCiAJCQlsYXRlciB0byBkaXNhYmxlIHByaW9yIHRvIGluaXRpYWwgcG9saWN5IGxvYWQuCiAKLQlzZWxpbnV4X2NvbXBhdF9uZXQgPQotCQkJW1NFTElOVVhdIFNldCBpbml0aWFsIHNlbGludXhfY29tcGF0X25ldCBmbGFnIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0OiB7ICIwIiB8ICIxIiB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAwIC0tIHVzZSBuZXcgc2VjbWFyay1iYXNlZCBwYWNrZXQgY29udHJvbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIDEgLS0gdXNlIGxlZ2FjeSBwYWNrZXQgY29udHJvbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgMCAocHJlZmVycmVkKS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhCi0gICAgICAgICAgICAgICAgICAgICAgICAvc2VsaW51eC9jb21wYXRfbmV0LgotCiAJc2VyaWFsbnVtYmVyCVtCVUdTPVg4Ni0zMl0KIAogCXNoYXBlcnM9CVtORVRdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKaW5kZXggN2EzYmIxYS4uYjEzMmU0YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKQEAgLTE0MSw3ICsxNDEsOCBAQAogCURlZmF1bHQgQ0NJRCBmb3IgdGhlIHJlY2VpdmVyLXNlbmRlciBoYWxmLWNvbm5lY3Rpb247IHNlZSB0eF9jY2lkLgogCiBzZXFfd2luZG93ID0gMTAwCi0JVGhlIGluaXRpYWwgc2VxdWVuY2Ugd2luZG93IChzZWMuIDcuNS4yKS4KKwlUaGUgaW5pdGlhbCBzZXF1ZW5jZSB3aW5kb3cgKHNlYy4gNy41LjIpIG9mIHRoZSBzZW5kZXIuIFRoaXMgaW5mbHVlbmNlcworCXRoZSBsb2NhbCBhY2tubyB2YWxpZGl0eSBhbmQgdGhlIHJlbW90ZSBzZXFubyB2YWxpZGl0eSB3aW5kb3dzICg3LjUuMSkuCiAKIHR4X3FsZW4gPSA1CiAJVGhlIHNpemUgb2YgdGhlIHRyYW5zbWl0IGJ1ZmZlciBpbiBwYWNrZXRzLiBBIHZhbHVlIG9mIDAgY29ycmVzcG9uZHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggYzc3MTI3OC4uZWM1ZGUwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTIsNyArMiw3IEBACiAKIGlwX2ZvcndhcmQgLSBCT09MRUFOCiAJMCAtIGRpc2FibGVkIChkZWZhdWx0KQotCW5vdCAwIC0gZW5hYmxlZCAKKwlub3QgMCAtIGVuYWJsZWQKIAogCUZvcndhcmQgUGFja2V0cyBiZXR3ZWVuIGludGVyZmFjZXMuCiAKQEAgLTM2LDQ5ICszNiw0OSBAQAogSVAgRnJhZ21lbnRhdGlvbjoKIAogaXBmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgotCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4gCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbgogCWlwZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCiAJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXBmcmFnX2xvd190aHJlc2gKIAlpcyByZWFjaGVkLgotCQorCiBpcGZyYWdfbG93X3RocmVzaCAtIElOVEVHRVIKLQlTZWUgaXBmcmFnX2hpZ2hfdGhyZXNoCQorCVNlZSBpcGZyYWdfaGlnaF90aHJlc2gKIAogaXBmcmFnX3RpbWUgLSBJTlRFR0VSCi0JVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgkKKwlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCiAKIGlwZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCi0JUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZQogCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUCBmcmFnbWVudHMuCiAJRGVmYXVsdDogNjAwCiAKIGlwZnJhZ19tYXhfZGlzdCAtIElOVEVHRVIKLQlpcGZyYWdfbWF4X2Rpc3QgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aGljaCBkZWZpbmVzIHRoZSAKLQltYXhpbXVtICJkaXNvcmRlciIgd2hpY2ggaXMgYWxsb3dlZCBhbW9uZyBmcmFnbWVudHMgd2hpY2ggc2hhcmUgYSAKLQljb21tb24gSVAgc291cmNlIGFkZHJlc3MuIE5vdGUgdGhhdCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaXMgCi0Jbm90IHVudXN1YWwsIGJ1dCBpZiBhIGxhcmdlIG51bWJlciBvZiBmcmFnbWVudHMgYXJyaXZlIGZyb20gYSBzb3VyY2UgCi0JSVAgYWRkcmVzcyB3aGlsZSBhIHBhcnRpY3VsYXIgZnJhZ21lbnQgcXVldWUgcmVtYWlucyBpbmNvbXBsZXRlLCBpdCAKLQlwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgYmVsb25naW5nIHRvIHRoYXQgcXVldWUgCi0JaGF2ZSBiZWVuIGxvc3QuIFdoZW4gaXBmcmFnX21heF9kaXN0IGlzIHBvc2l0aXZlLCBhbiBhZGRpdGlvbmFsIGNoZWNrIAotCWlzIGRvbmUgb24gZnJhZ21lbnRzIGJlZm9yZSB0aGV5IGFyZSBhZGRlZCB0byBhIHJlYXNzZW1ibHkgcXVldWUgLSBpZiAKLQlpcGZyYWdfbWF4X2Rpc3QgKG9yIG1vcmUpIGZyYWdtZW50cyBoYXZlIGFycml2ZWQgZnJvbSBhIHBhcnRpY3VsYXIgSVAgCi0JYWRkcmVzcyBiZXR3ZWVuIGFkZGl0aW9ucyB0byBhbnkgSVAgZnJhZ21lbnQgcXVldWUgdXNpbmcgdGhhdCBzb3VyY2UgCi0JYWRkcmVzcywgaXQncyBwcmVzdW1lZCB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBpbiB0aGUgcXVldWUgYXJlIAotCWxvc3QuIFRoZSBleGlzdGluZyBmcmFnbWVudCBxdWV1ZSB3aWxsIGJlIGRyb3BwZWQsIGFuZCBhIG5ldyBvbmUgCisJaXBmcmFnX21heF9kaXN0IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2hpY2ggZGVmaW5lcyB0aGUKKwltYXhpbXVtICJkaXNvcmRlciIgd2hpY2ggaXMgYWxsb3dlZCBhbW9uZyBmcmFnbWVudHMgd2hpY2ggc2hhcmUgYQorCWNvbW1vbiBJUCBzb3VyY2UgYWRkcmVzcy4gTm90ZSB0aGF0IHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpcworCW5vdCB1bnVzdWFsLCBidXQgaWYgYSBsYXJnZSBudW1iZXIgb2YgZnJhZ21lbnRzIGFycml2ZSBmcm9tIGEgc291cmNlCisJSVAgYWRkcmVzcyB3aGlsZSBhIHBhcnRpY3VsYXIgZnJhZ21lbnQgcXVldWUgcmVtYWlucyBpbmNvbXBsZXRlLCBpdAorCXByb2JhYmx5IGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBiZWxvbmdpbmcgdG8gdGhhdCBxdWV1ZQorCWhhdmUgYmVlbiBsb3N0LiBXaGVuIGlwZnJhZ19tYXhfZGlzdCBpcyBwb3NpdGl2ZSwgYW4gYWRkaXRpb25hbCBjaGVjaworCWlzIGRvbmUgb24gZnJhZ21lbnRzIGJlZm9yZSB0aGV5IGFyZSBhZGRlZCB0byBhIHJlYXNzZW1ibHkgcXVldWUgLSBpZgorCWlwZnJhZ19tYXhfZGlzdCAob3IgbW9yZSkgZnJhZ21lbnRzIGhhdmUgYXJyaXZlZCBmcm9tIGEgcGFydGljdWxhciBJUAorCWFkZHJlc3MgYmV0d2VlbiBhZGRpdGlvbnMgdG8gYW55IElQIGZyYWdtZW50IHF1ZXVlIHVzaW5nIHRoYXQgc291cmNlCisJYWRkcmVzcywgaXQncyBwcmVzdW1lZCB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBpbiB0aGUgcXVldWUgYXJlCisJbG9zdC4gVGhlIGV4aXN0aW5nIGZyYWdtZW50IHF1ZXVlIHdpbGwgYmUgZHJvcHBlZCwgYW5kIGEgbmV3IG9uZQogCXN0YXJ0ZWQuIEFuIGlwZnJhZ19tYXhfZGlzdCB2YWx1ZSBvZiB6ZXJvIGRpc2FibGVzIHRoaXMgY2hlY2suCiAKIAlVc2luZyBhIHZlcnkgc21hbGwgdmFsdWUsIGUuZy4gMSBvciAyLCBmb3IgaXBmcmFnX21heF9kaXN0IGNhbgogCXJlc3VsdCBpbiB1bm5lY2Vzc2FyaWx5IGRyb3BwaW5nIGZyYWdtZW50IHF1ZXVlcyB3aGVuIG5vcm1hbAotCXJlb3JkZXJpbmcgb2YgcGFja2V0cyBvY2N1cnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcG9vciBhcHBsaWNhdGlvbiAKLQlwZXJmb3JtYW5jZS4gVXNpbmcgYSB2ZXJ5IGxhcmdlIHZhbHVlLCBlLmcuIDUwMDAwLCBpbmNyZWFzZXMgdGhlIAotCWxpa2VsaWhvb2Qgb2YgaW5jb3JyZWN0bHkgcmVhc3NlbWJsaW5nIElQIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZSAKKwlyZW9yZGVyaW5nIG9mIHBhY2tldHMgb2NjdXJzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvb3IgYXBwbGljYXRpb24KKwlwZXJmb3JtYW5jZS4gVXNpbmcgYSB2ZXJ5IGxhcmdlIHZhbHVlLCBlLmcuIDUwMDAwLCBpbmNyZWFzZXMgdGhlCisJbGlrZWxpaG9vZCBvZiBpbmNvcnJlY3RseSByZWFzc2VtYmxpbmcgSVAgZnJhZ21lbnRzIHRoYXQgb3JpZ2luYXRlCiAJZnJvbSBkaWZmZXJlbnQgSVAgZGF0YWdyYW1zLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uLgogCURlZmF1bHQ6IDY0CiAKIElORVQgcGVlciBzdG9yYWdlOgogCiBpbmV0X3BlZXJfdGhyZXNob2xkIC0gSU5URUdFUgotCVRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIHRoZSBzdG9yYWdlLiAgU3RhcnRpbmcgZnJvbSB0aGlzIHRocmVzaG9sZAkKKwlUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gIFN0YXJ0aW5nIGZyb20gdGhpcyB0aHJlc2hvbGQKIAllbnRyaWVzIHdpbGwgYmUgdGhyb3duIGFnZ3Jlc3NpdmVseS4gIFRoaXMgdGhyZXNob2xkIGFsc28gZGV0ZXJtaW5lcwogCWVudHJpZXMnIHRpbWUtdG8tbGl2ZSBhbmQgdGltZSBpbnRlcnZhbHMgYmV0d2VlbiBnYXJiYWdlIGNvbGxlY3Rpb24KIAlwYXNzZXMuICBNb3JlIGVudHJpZXMsIGxlc3MgdGltZS10by1saXZlLCBsZXNzIEdDIGludGVydmFsLgpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaW4gZWZmZWN0IHVuZGVyIGxvdyAob3IgYWJzZW50KSBtZW1vcnkgcHJlc3N1cmUgb24gdGhlIHBvb2wuCiAJTWVhc3VyZWQgaW4gc2Vjb25kcy4KIAotVENQIHZhcmlhYmxlczogCitUQ1AgdmFyaWFibGVzOgogCiBzb21heGNvbm4gLSBJTlRFR0VSCiAJTGltaXQgb2Ygc29ja2V0IGxpc3RlbigpIGJhY2tsb2csIGtub3duIGluIHVzZXJzcGFjZSBhcyBTT01BWENPTk4uCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogdGNwX3Jlb3JkZXJpbmcgLSBJTlRFR0VSCiAJTWF4aW1hbCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaW4gYSBUQ1Agc3RyZWFtLgotCURlZmF1bHQ6IDMJCisJRGVmYXVsdDogMwogCiB0Y3BfcmV0cmFuc19jb2xsYXBzZSAtIEJPT0xFQU4KIAlCdWctdG8tYnVnIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGJyb2tlbiBwcmludGVycy4KQEAgLTUyMSw3ICs1MjEsNyBAQAogCiBpcF9sb2NhbF9wb3J0X3JhbmdlIC0gMiBJTlRFR0VSUwogCURlZmluZXMgdGhlIGxvY2FsIHBvcnQgcmFuZ2UgdGhhdCBpcyB1c2VkIGJ5IFRDUCBhbmQgVURQIHRvCi0JY2hvb3NlIHRoZSBsb2NhbCBwb3J0LiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBmaXJzdCwgdGhlIAorCWNob29zZSB0aGUgbG9jYWwgcG9ydC4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgZmlyc3QsIHRoZQogCXNlY29uZCB0aGUgbGFzdCBsb2NhbCBwb3J0IG51bWJlci4gRGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uCiAJYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbToKIAk+IDEyOE1iIDMyNzY4LTYxMDAwCkBAIC01OTQsMTIgKzU5NCwxMiBAQAogCiAJSWYgemVybywgaWNtcCBlcnJvciBtZXNzYWdlcyBhcmUgc2VudCB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YKIAl0aGUgZXhpdGluZyBpbnRlcmZhY2UuCi0gCisKIAlJZiBub24temVybywgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBzZW50IHdpdGggdGhlIHByaW1hcnkgYWRkcmVzcyBvZgogCXRoZSBpbnRlcmZhY2UgdGhhdCByZWNlaXZlZCB0aGUgcGFja2V0IHRoYXQgY2F1c2VkIHRoZSBpY21wIGVycm9yLgogCVRoaXMgaXMgdGhlIGJlaGF2aW91ciBuZXR3b3JrIG1hbnkgYWRtaW5pc3RyYXRvcnMgd2lsbCBleHBlY3QgZnJvbQogCWEgcm91dGVyLiBBbmQgaXQgY2FuIG1ha2UgZGVidWdnaW5nIGNvbXBsaWNhdGVkIG5ldHdvcmsgbGF5b3V0cwotCW11Y2ggZWFzaWVyLiAKKwltdWNoIGVhc2llci4KIAogCU5vdGUgdGhhdCBpZiBubyBwcmltYXJ5IGFkZHJlc3MgZXhpc3RzIGZvciB0aGUgaW50ZXJmYWNlIHNlbGVjdGVkLAogCXRoZW4gdGhlIHByaW1hcnkgYWRkcmVzcyBvZiB0aGUgZmlyc3Qgbm9uLWxvb3BiYWNrIGludGVyZmFjZSB0aGF0CkBAIC02MTEsNyArNjExLDcgQEAKIAlDaGFuZ2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBncm91cHMgd2UgY2FuIHN1YnNjcmliZSB0by4KIAlEZWZhdWx0OiAyMAogCi1jb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUgImludGVyZmFjZSIgaXMgCitjb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUgImludGVyZmFjZSIgaXMKIAkJICB0aGUgbmFtZSBvZiB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlKQogY29uZi9hbGwvKgkgIGlzIHNwZWNpYWwsIGNoYW5nZXMgdGhlIHNldHRpbmdzIGZvciBhbGwgaW50ZXJmYWNlcwogCkBAIC02MjUsMTEgKzYyNSwxMSBAQAogYWNjZXB0X3JlZGlyZWN0cyAtIEJPT0xFQU4KIAlBY2NlcHQgSUNNUCByZWRpcmVjdCBtZXNzYWdlcy4KIAlhY2NlcHRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZjoKLQktIGJvdGggY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBhcmUgVFJVRSBpbiB0aGUgY2FzZSBmb3J3YXJkaW5nCi0JICBmb3IgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkCisJLSBib3RoIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgYXJlIFRSVUUgaW4gdGhlIGNhc2UKKwkgIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAogCW9yCi0JLSBhdCBsZWFzdCBvbmUgb2YgY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIGluIHRoZSBjYXNlCi0JICBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkCisJLSBhdCBsZWFzdCBvbmUgb2YgY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIGluIHRoZQorCSAgY2FzZSBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkCiAJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQogCWRlZmF1bHQgVFJVRSAoaG9zdCkKIAkJRkFMU0UgKHJvdXRlcikKQEAgLTY0MCw4ICs2NDAsOCBAQAogbWNfZm9yd2FyZGluZyAtIEJPT0xFQU4KIAlEbyBtdWx0aWNhc3Qgcm91dGluZy4gVGhlIGtlcm5lbCBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIENPTkZJR19NUk9VVEUKIAlhbmQgYSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24gaXMgcmVxdWlyZWQuCi0JY29uZi9hbGwvbWNfZm9yd2FyZGluZyBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIG11bHRpY2FzdCByb3V0aW5nCi0JZm9yIHRoZSBpbnRlcmZhY2UKKwljb25mL2FsbC9tY19mb3J3YXJkaW5nIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgbXVsdGljYXN0CisJcm91dGluZwlmb3IgdGhlIGludGVyZmFjZQogCiBtZWRpdW1faWQgLSBJTlRFR0VSCiAJSW50ZWdlciB2YWx1ZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdGhlIGRldmljZXMgYnkgdGhlIG1lZGl1bSB0aGV5CkBAIC02NDksNyArNjQ5LDcgQEAKIAl0aGUgYnJvYWRjYXN0IHBhY2tldHMgYXJlIHJlY2VpdmVkIG9ubHkgb24gb25lIG9mIHRoZW0uCiAJVGhlIGRlZmF1bHQgdmFsdWUgMCBtZWFucyB0aGF0IHRoZSBkZXZpY2UgaXMgdGhlIG9ubHkgaW50ZXJmYWNlCiAJdG8gaXRzIG1lZGl1bSwgdmFsdWUgb2YgLTEgbWVhbnMgdGhhdCBtZWRpdW0gaXMgbm90IGtub3duLgotCQorCiAJQ3VycmVudGx5LCBpdCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgcHJveHlfYXJwIGJlaGF2aW9yOgogCXRoZSBwcm94eV9hcnAgZmVhdHVyZSBpcyBlbmFibGVkIGZvciBwYWNrZXRzIGZvcndhcmRlZCBiZXR3ZWVuCiAJdHdvIGRldmljZXMgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG1lZGlhLgpAQCAtNjk5LDE2ICs2OTksMjIgQEAKIAlkZWZhdWx0IFRSVUUgKHJvdXRlcikKIAkJRkFMU0UgKGhvc3QpCiAKLXJwX2ZpbHRlciAtIEJPT0xFQU4KLQkxIC0gZG8gc291cmNlIHZhbGlkYXRpb24gYnkgcmV2ZXJzZWQgcGF0aCwgYXMgc3BlY2lmaWVkIGluIFJGQzE4MTIKLQkgICAgUmVjb21tZW5kZWQgb3B0aW9uIGZvciBzaW5nbGUgaG9tZWQgaG9zdHMgYW5kIHN0dWIgbmV0d29yawotCSAgICByb3V0ZXJzLiBDb3VsZCBjYXVzZSB0cm91YmxlcyBmb3IgY29tcGxpY2F0ZWQgKG5vdCBsb29wIGZyZWUpCi0JICAgIG5ldHdvcmtzIHJ1bm5pbmcgYSBzbG93IHVucmVsaWFibGUgcHJvdG9jb2wgKHNvcnQgb2YgUklQKSwKLQkgICAgb3IgdXNpbmcgc3RhdGljIHJvdXRlcy4KLQorcnBfZmlsdGVyIC0gSU5URUdFUgogCTAgLSBObyBzb3VyY2UgdmFsaWRhdGlvbi4KKwkxIC0gU3RyaWN0IG1vZGUgYXMgZGVmaW5lZCBpbiBSRkMzNzA0IFN0cmljdCBSZXZlcnNlIFBhdGgKKwkgICAgRWFjaCBpbmNvbWluZyBwYWNrZXQgaXMgdGVzdGVkIGFnYWluc3QgdGhlIEZJQiBhbmQgaWYgdGhlIGludGVyZmFjZQorCSAgICBpcyBub3QgdGhlIGJlc3QgcmV2ZXJzZSBwYXRoIHRoZSBwYWNrZXQgY2hlY2sgd2lsbCBmYWlsLgorCSAgICBCeSBkZWZhdWx0IGZhaWxlZCBwYWNrZXRzIGFyZSBkaXNjYXJkZWQuCisJMiAtIExvb3NlIG1vZGUgYXMgZGVmaW5lZCBpbiBSRkMzNzA0IExvb3NlIFJldmVyc2UgUGF0aAorCSAgICBFYWNoIGluY29taW5nIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIGlzIGFsc28gdGVzdGVkIGFnYWluc3QgdGhlIEZJQgorCSAgICBhbmQgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCByZWFjaGFibGUgdmlhIGFueSBpbnRlcmZhY2UKKwkgICAgdGhlIHBhY2tldCBjaGVjayB3aWxsIGZhaWwuCiAKLQljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGRvIHNvdXJjZSB2YWxpZGF0aW9uCisJQ3VycmVudCByZWNvbW1lbmRlZCBwcmFjdGljZSBpbiBSRkMzNzA0IGlzIHRvIGVuYWJsZSBzdHJpY3QgbW9kZQorCXRvIHByZXZlbnQgSVAgc3Bvb2ZpbmcgZnJvbSBERG9zIGF0dGFja3MuIElmIHVzaW5nIGFzeW1tZXRyaWMgcm91dGluZworCW9yIG90aGVyIGNvbXBsaWNhdGVkIHJvdXRpbmcsIHRoZW4gbG9vc2UgbW9kZSBpcyByZWNvbW1lbmRlZC4KKworCWNvbmYvYWxsL3JwX2ZpbHRlciBtdXN0IGFsc28gYmUgc2V0IHRvIG5vbi16ZXJvIHRvIGRvIHNvdXJjZSB2YWxpZGF0aW9uCiAJb24gdGhlIGludGVyZmFjZQogCiAJRGVmYXVsdCB2YWx1ZSBpcyAwLiBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdApAQCAtNzgyLDYgKzc4OCwxMiBAQAogCVRoZSBtYXggdmFsdWUgZnJvbSBjb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfaWdub3JlIGlzIHVzZWQKIAl3aGVuIEFSUCByZXF1ZXN0IGlzIHJlY2VpdmVkIG9uIHRoZSB7aW50ZXJmYWNlfQogCithcnBfbm90aWZ5IC0gQk9PTEVBTgorCURlZmluZSBtb2RlIGZvciBub3RpZmljYXRpb24gb2YgYWRkcmVzcyBhbmQgZGV2aWNlIGNoYW5nZXMuCisJMCAtIChkZWZhdWx0KTogZG8gbm90aGluZworCTEgLSBHZW5lcmF0ZSBncmF0dWl0b3VzIGFycCByZXBsaWVzIHdoZW4gZGV2aWNlIGlzIGJyb3VnaHQgdXAKKwkgICAgb3IgaGFyZHdhcmUgYWRkcmVzcyBjaGFuZ2VzLgorCiBhcnBfYWNjZXB0IC0gQk9PTEVBTgogCURlZmluZSBiZWhhdmlvciB3aGVuIGdyYXR1aXRvdXMgYXJwIHJlcGxpZXMgYXJlIHJlY2VpdmVkOgogCTAgLSBkcm9wIGdyYXR1aXRvdXMgYXJwIGZyYW1lcwpAQCAtODIzLDcgKzgzNSw3IEBACiAKIGJpbmR2Nm9ubHkgLSBCT09MRUFOCiAJRGVmYXVsdCB2YWx1ZSBmb3IgSVBWNl9WNk9OTFkgc29ja2V0IG9wdGlvbiwKLQl3aGljaCByZXN0cmljdHMgdXNlIG9mIHRoZSBJUHY2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb24gCisJd2hpY2ggcmVzdHJpY3RzIHVzZSBvZiB0aGUgSVB2NiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9uCiAJb25seS4KIAkJVFJVRTogZGlzYWJsZSBJUHY0LW1hcHBlZCBhZGRyZXNzIGZlYXR1cmUKIAkJRkFMU0U6IGVuYWJsZSBJUHY0LW1hcHBlZCBhZGRyZXNzIGZlYXR1cmUKQEAgLTgzMywxOSArODQ1LDE5IEBACiBJUHY2IEZyYWdtZW50YXRpb246CiAKIGlwNmZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCi0JTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQdjYgZnJhZ21lbnRzLiBXaGVuIAorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUHY2IGZyYWdtZW50cy4gV2hlbgogCWlwNmZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAogCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwNmZyYWdfbG93X3RocmVzaAogCWlzIHJlYWNoZWQuCi0JCisKIGlwNmZyYWdfbG93X3RocmVzaCAtIElOVEVHRVIKLQlTZWUgaXA2ZnJhZ19oaWdoX3RocmVzaAkKKwlTZWUgaXA2ZnJhZ19oaWdoX3RocmVzaAogCiBpcDZmcmFnX3RpbWUgLSBJTlRFR0VSCiAJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVB2NiBmcmFnbWVudCBpbiBtZW1vcnkuCiAKIGlwNmZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgotCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUKIAlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVB2NiBmcmFnbWVudHMuCiAJRGVmYXVsdDogNjAwCiAKQEAgLTg1NCwxNyArODY2LDE3IEBACiAKIAogY29uZi9hbGwvKjoKLQlDaGFuZ2UgYWxsIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgc2V0dGluZ3MuICAKKwlDaGFuZ2UgYWxsIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgc2V0dGluZ3MuCiAKIAlbWFhYOiAgT3RoZXIgc3BlY2lhbCBmZWF0dXJlcyB0aGFuIGZvcndhcmRpbmc/XQogCiBjb25mL2FsbC9mb3J3YXJkaW5nIC0gQk9PTEVBTgotCUVuYWJsZSBnbG9iYWwgSVB2NiBmb3J3YXJkaW5nIGJldHdlZW4gYWxsIGludGVyZmFjZXMuICAKKwlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLgogCi0JSVB2NCBhbmQgSVB2NiB3b3JrIGRpZmZlcmVudGx5IGhlcmU7IGUuZy4gbmV0ZmlsdGVyIG11c3QgYmUgdXNlZCAKKwlJUHY0IGFuZCBJUHY2IHdvcmsgZGlmZmVyZW50bHkgaGVyZTsgZS5nLiBuZXRmaWx0ZXIgbXVzdCBiZSB1c2VkCiAJdG8gY29udHJvbCB3aGljaCBpbnRlcmZhY2VzIG1heSBmb3J3YXJkIHBhY2tldHMgYW5kIHdoaWNoIG5vdC4KIAotCVRoaXMgYWxzbyBzZXRzIGFsbCBpbnRlcmZhY2VzJyBIb3N0L1JvdXRlciBzZXR0aW5nIAorCVRoaXMgYWxzbyBzZXRzIGFsbCBpbnRlcmZhY2VzJyBIb3N0L1JvdXRlciBzZXR0aW5nCiAJJ2ZvcndhcmRpbmcnIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCiAKIAlUaGlzIHJlZmVycmVkIHRvIGFzIGdsb2JhbCBmb3J3YXJkaW5nLgpAQCAtODc1LDEyICs4ODcsMTIgQEAKIGNvbmYvaW50ZXJmYWNlLyo6CiAJQ2hhbmdlIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZS4KIAotCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQgCisJVGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3VyIGZvciBjZXJ0YWluIHNldHRpbmdzIGlzIGRpZmZlcmVudAogCWRlcGVuZGluZyBvbiB3aGV0aGVyIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvciBub3QuCiAKIGFjY2VwdF9yYSAtIEJPT0xFQU4KIAlBY2NlcHQgUm91dGVyIEFkdmVydGlzZW1lbnRzOyBhdXRvY29uZmlndXJlIHVzaW5nIHRoZW0uCi0JCisKIAlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZC4KIAkJCSAgICBkaXNhYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQuCiAKQEAgLTkyNiw3ICs5MzgsNyBAQAogCURlZmF1bHQ6IDAKIAogYXV0b2NvbmYgLSBCT09MRUFOCi0JQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlciAKKwlBdXRvY29uZmlndXJlIGFkZHJlc3NlcyB1c2luZyBQcmVmaXggSW5mb3JtYXRpb24gaW4gUm91dGVyCiAJQWR2ZXJ0aXNlbWVudHMuCiAKIAlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgYWNjZXB0X3JhX3BpbmZvIGlzIGVuYWJsZWQuCkBAIC05MzUsMTEgKzk0NywxMSBAQAogZGFkX3RyYW5zbWl0cyAtIElOVEVHRVIKIAlUaGUgYW1vdW50IG9mIER1cGxpY2F0ZSBBZGRyZXNzIERldGVjdGlvbiBwcm9iZXMgdG8gc2VuZC4KIAlEZWZhdWx0OiAxCi0JCi1mb3J3YXJkaW5nIC0gQk9PTEVBTgotCUNvbmZpZ3VyZSBpbnRlcmZhY2Utc3BlY2lmaWMgSG9zdC9Sb3V0ZXIgYmVoYXZpb3VyLiAgCiAKLQlOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNldHRpbmcgb24gYWxsIAorZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4KKworCU5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGhhdmUgdGhlIHNhbWUgc2V0dGluZyBvbiBhbGwKIAlpbnRlcmZhY2VzOyBtaXhlZCByb3V0ZXIvaG9zdCBzY2VuYXJpb3MgYXJlIHJhdGhlciB1bmNvbW1vbi4KIAogCUZBTFNFOgpAQCAtOTQ4LDEzICs5NjAsMTMgQEAKIAogCTEuIElzUm91dGVyIGZsYWcgaXMgbm90IHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCiAJMi4gUm91dGVyIFNvbGljaXRhdGlvbnMgYXJlIGJlaW5nIHNlbnQgd2hlbiBuZWNlc3NhcnkuCi0JMy4gSWYgYWNjZXB0X3JhIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUm91dGVyIAorCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlcgogCSAgIEFkdmVydGlzZW1lbnRzIChhbmQgZG8gYXV0b2NvbmZpZ3VyYXRpb24pLgogCTQuIElmIGFjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSZWRpcmVjdHMuCiAKIAlUUlVFOgogCi0JSWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLCBSb3V0ZXIgYmVoYXZpb3VyIGlzIGFzc3VtZWQuIAorCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLgogCVRoaXMgbWVhbnMgZXhhY3RseSB0aGUgcmV2ZXJzZSBmcm9tIHRoZSBhYm92ZToKIAogCTEuIElzUm91dGVyIGZsYWcgaXMgc2V0IGluIE5laWdoYm91ciBBZHZlcnRpc2VtZW50cy4KQEAgLTk4OSw3ICsxMDAxLDcgQEAKIAlEZWZhdWx0OiA0CiAKIHJvdXRlcl9zb2xpY2l0YXRpb25zIC0gSU5URUdFUgotCU51bWJlciBvZiBSb3V0ZXIgU29saWNpdGF0aW9ucyB0byBzZW5kIHVudGlsIGFzc3VtaW5nIG5vIAorCU51bWJlciBvZiBSb3V0ZXIgU29saWNpdGF0aW9ucyB0byBzZW5kIHVudGlsIGFzc3VtaW5nIG5vCiAJcm91dGVycyBhcmUgcHJlc2VudC4KIAlEZWZhdWx0OiAzCiAKQEAgLTEwMTMsMTEgKzEwMjUsMTEgQEAKIAogbWF4X2Rlc3luY19mYWN0b3IgLSBJTlRFR0VSCiAJTWF4aW11bSB2YWx1ZSBmb3IgREVTWU5DX0ZBQ1RPUiwgd2hpY2ggaXMgYSByYW5kb20gdmFsdWUKLQl0aGF0IGVuc3VyZXMgdGhhdCBjbGllbnRzIGRvbid0IHN5bmNocm9uaXplIHdpdGggZWFjaCAKKwl0aGF0IGVuc3VyZXMgdGhhdCBjbGllbnRzIGRvbid0IHN5bmNocm9uaXplIHdpdGggZWFjaAogCW90aGVyIGFuZCBnZW5lcmF0ZSBuZXcgYWRkcmVzc2VzIGF0IGV4YWN0bHkgdGhlIHNhbWUgdGltZS4KIAl2YWx1ZSBpcyBpbiBzZWNvbmRzLgogCURlZmF1bHQ6IDYwMAotCQorCiByZWdlbl9tYXhfcmV0cnkgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZlIHVwIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUKIAl2YWxpZCB0ZW1wb3JhcnkgYWRkcmVzc2VzLgpAQCAtMTAyNSwxMyArMTAzNywxNSBAQAogCiBtYXhfYWRkcmVzc2VzIC0gSU5URUdFUgogCU51bWJlciBvZiBtYXhpbXVtIGFkZHJlc3NlcyBwZXIgaW50ZXJmYWNlLiAgMCBkaXNhYmxlcyBsaW1pdGF0aW9uLgotCUl0IGlzIHJlY29tbWVuZGVkIG5vdCBzZXQgdG9vIGxhcmdlIHZhbHVlIChvciAwKSBiZWNhdXNlIGl0IHdvdWxkIAotCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mIAorCUl0IGlzIHJlY29tbWVuZGVkIG5vdCBzZXQgdG9vIGxhcmdlIHZhbHVlIChvciAwKSBiZWNhdXNlIGl0IHdvdWxkCisJYmUgdG9vIGVhc3kgd2F5IHRvIGNyYXNoIGtlcm5lbCB0byBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YKIAlhdXRvY29uZmlndXJlZCBhZGRyZXNzZXMuCiAJRGVmYXVsdDogMTYKIAogZGlzYWJsZV9pcHY2IC0gQk9PTEVBTgotCURpc2FibGUgSVB2NiBvcGVyYXRpb24uCisJRGlzYWJsZSBJUHY2IG9wZXJhdGlvbi4gIElmIGFjY2VwdF9kYWQgaXMgc2V0IHRvIDIsIHRoaXMgdmFsdWUKKwl3aWxsIGJlIGR5bmFtaWNhbGx5IHNldCB0byBUUlVFIGlmIERBRCBmYWlscyBmb3IgdGhlIGxpbmstbG9jYWwKKwlhZGRyZXNzLgogCURlZmF1bHQ6IEZBTFNFIChlbmFibGUgSVB2NiBvcGVyYXRpb24pCiAKIGFjY2VwdF9kYWQgLSBJTlRFR0VSCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI2ODY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dApAQCAtMCwwICsxLDE5OSBAQAorTGludXggQmFzZSBEcml2ZXIgZm9yIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWFyY2ggMTAsIDIwMDkKKworCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIEJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KKy0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworLSBTdXBwb3J0CisKKworCitJbiBUaGlzIFJlbGVhc2UKKz09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpeGdiZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIDEwIEdpZ2FiaXQgUENJCitFeHByZXNzIEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbi4gIFRoaXMgZHJpdmVyIGluY2x1ZGVzIHN1cHBvcnQgZm9yCitJdGFuaXVtKFIpMi1iYXNlZCBzeXN0ZW1zLgorCitGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbgorc3VwcGxpZWQgd2l0aCB5b3VyIDEwIEdpZ2FiaXQgYWRhcHRlci4gIEFsbCBoYXJkd2FyZSByZXF1aXJlbWVudHMgbGlzdGVkIGFwcGx5Cit0byB1c2Ugd2l0aCBMaW51eC4KKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoaXMga2VybmVsOgorIC0gTmF0aXZlIFZMQU5zCisgLSBDaGFubmVsIEJvbmRpbmcgKHRlYW1pbmcpCisgLSBTTk1QCisgLSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZAorIC0gRGF0YSBDZW50ZXIgQnJpZGdpbmcKKworQ2hhbm5lbCBCb25kaW5nIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlOgorL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorCitFdGh0b29sLCBsc3BjaSwgYW5kIGlmY29uZmlnIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgZGV2aWNlIGFuZCBkcml2ZXIKK3NwZWNpZmljIGluZm9ybWF0aW9uLgorCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGRldmljZXMgYmFzZWQgb24gdGhlIDgyNTk4IGNvbnRyb2xsZXIgYW5kIHRoZSA4MjU5OQorY29udHJvbGxlci4KKworRm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGlkZW50aWZ5aW5nIHdoaWNoIGFkYXB0ZXIgeW91IGhhdmUsIHBsZWFzZSB2aXNpdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDA4NDQxLmh0bQorCisKK0J1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2VsZWN0IG0gZm9yICJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0IiBsb2NhdGVkIGF0OgorICAgICAgTG9jYXRpb246CisgICAgICAgIC0+IERldmljZSBEcml2ZXJzCisgICAgICAgICAgLT4gTmV0d29yayBkZXZpY2Ugc3VwcG9ydCAoTkVUREVWSUNFUyBbPXldKQorICAgICAgICAgICAgLT4gRXRoZXJuZXQgKDEwMDAwIE1iaXQpIChORVRERVZfMTAwMDAgWz15XSkKKworMS4gbWFrZSBtb2R1bGVzICYgbWFrZSBtb2R1bGVzX2luc3RhbGwKKworMi4gTG9hZCB0aGUgbW9kdWxlOgorCisjIG1vZHByb2JlIGl4Z2JlCisKKyAgIFRoZSBpbnNtb2QgY29tbWFuZCBjYW4gYmUgdXNlZCBpZiB0aGUgZnVsbAorICAgcGF0aCB0byB0aGUgZHJpdmVyIG1vZHVsZSBpcyBzcGVjaWZpZWQuICBGb3IgZXhhbXBsZToKKworICAgICBpbnNtb2QgL2xpYi9tb2R1bGVzLzxLRVJORUwgVkVSU0lPTj4va2VybmVsL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmtvCisKKyAgIFdpdGggMi42IGJhc2VkIGtlcm5lbHMgYWxzbyBtYWtlIHN1cmUgdGhhdCBvbGRlciBpeGdiZSBkcml2ZXJzIGFyZQorICAgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwsIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgbW9kdWxlOgorCisgICAgIHJtbW9kIGl4Z2JlOyBtb2Rwcm9iZSBpeGdiZQorCiszLiBBc3NpZ24gYW4gSVAgYWRkcmVzcyB0byB0aGUgaW50ZXJmYWNlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcsIHdoZXJlCisgICB4IGlzIHRoZSBpbnRlcmZhY2UgbnVtYmVyOgorCisgICAgIGlmY29uZmlnIGV0aHggPElQX2FkZHJlc3M+CisKKzQuIFZlcmlmeSB0aGF0IHRoZSBpbnRlcmZhY2Ugd29ya3MuIEVudGVyIHRoZSBmb2xsb3dpbmcsIHdoZXJlIDxJUF9hZGRyZXNzPgorICAgaXMgdGhlIElQIGFkZHJlc3MgZm9yIGFub3RoZXIgbWFjaGluZSBvbiB0aGUgc2FtZSBzdWJuZXQgYXMgdGhlIGludGVyZmFjZQorICAgdGhhdCBpcyBiZWluZyB0ZXN0ZWQ6CisKKyAgICAgcGluZyAgPElQX2FkZHJlc3M+CisKKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFZpZXdpbmcgTGluayBNZXNzYWdlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcworICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzIG9uCisgIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBkbWVzZyAtbiA4CisKKyAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KKworCisgIEp1bWJvIEZyYW1lcworICAtLS0tLS0tLS0tLS0KKyAgVGhlIGRyaXZlciBzdXBwb3J0cyBKdW1ibyBGcmFtZXMgZm9yIGFsbCBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMKKyAgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4KKyAgVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBNVFUgaXMgMTYxMTAuICBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8KKyAgaW5jcmVhc2UgdGhlIE1UVSBzaXplLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgaWZjb25maWcgZXRoeCBtdHUgOTAwMCB1cAorCisgIFRoZSBtYXhpbXVtIE1UVSBzZXR0aW5nIGZvciBKdW1ibyBGcmFtZXMgaXMgMTYxMTAuICBUaGlzIHZhbHVlIGNvaW5jaWRlcworICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgorCisgIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkLCBha2EgR1JPCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGluLWtlcm5lbCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBHUk8uICBHUk8gaGFzCisgIHNob3duIHRoYXQgYnkgY29hbGVzY2luZyBSeCB0cmFmZmljIGludG8gbGFyZ2VyIGNodW5rcyBvZiBkYXRhLCBDUFUKKyAgdXRpbGl6YXRpb24gY2FuIGJlIHNpZ25pZmljYW50bHkgcmVkdWNlZCB3aGVuIHVuZGVyIGxhcmdlIFJ4IGxvYWQuICBHUk8gaXMgYW4KKyAgZXZvbHV0aW9uIG9mIHRoZSBwcmV2aW91c2x5LXVzZWQgTFJPIGludGVyZmFjZS4gIEdSTyBpcyBhYmxlIHRvIGNvYWxlc2NlCisgIG90aGVyIHByb3RvY29scyBiZXNpZGVzIFRDUC4gIEl0J3MgYWxzbyBzYWZlIHRvIHVzZSB3aXRoIGNvbmZpZ3VyYXRpb25zIHRoYXQKKyAgYXJlIHByb2JsZW1hdGljIGZvciBMUk8sIG5hbWVseSBicmlkZ2luZyBhbmQgaVNDU0kuCisKKyAgR1JPIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgZHJpdmVyLiAgRnV0dXJlIHZlcnNpb25zIG9mIGV0aHRvb2wgd2lsbAorICBzdXBwb3J0IGRpc2FibGluZyBhbmQgcmUtZW5hYmxpbmcgR1JPIG9uIHRoZSBmbHkuCisKKworICBEYXRhIENlbnRlciBCcmlkZ2luZywgYWthIERDQgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIERDQiBpcyBhIGNvbmZpZ3VyYXRpb24gUXVhbGl0eSBvZiBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIGluIGhhcmR3YXJlLgorICBJdCB1c2VzIHRoZSBWTEFOIHByaW9yaXR5IHRhZyAoODAyLjFwKSB0byBmaWx0ZXIgdHJhZmZpYy4gIFRoYXQgbWVhbnMKKyAgdGhhdCB0aGVyZSBhcmUgOCBkaWZmZXJlbnQgcHJpb3JpdGllcyB0aGF0IHRyYWZmaWMgY2FuIGJlIGZpbHRlcmVkIGludG8uCisgIEl0IGFsc28gZW5hYmxlcyBwcmlvcml0eSBmbG93IGNvbnRyb2wgd2hpY2ggY2FuIGxpbWl0IG9yIGVsaW1pbmF0ZSB0aGUKKyAgbnVtYmVyIG9mIGRyb3BwZWQgcGFja2V0cyBkdXJpbmcgbmV0d29yayBzdHJlc3MuICBCYW5kd2lkdGggY2FuIGJlCisgIGFsbG9jYXRlZCB0byBlYWNoIG9mIHRoZXNlIHByaW9yaXRpZXMsIHdoaWNoIGlzIGVuZm9yY2VkIGF0IHRoZSBoYXJkd2FyZQorICBsZXZlbC4KKworICBUbyBlbmFibGUgRENCIHN1cHBvcnQgaW4gaXhnYmUsIHlvdSBtdXN0IGVuYWJsZSB0aGUgRENCIG5ldGxpbmsgbGF5ZXIgdG8KKyAgYWxsb3cgdGhlIHVzZXJzcGFjZSB0b29scyAoc2VlIGJlbG93KSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkcml2ZXIuCisgIFRoaXMgY2FuIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBoZXJlOgorCisgICAgICAgIC0+IE5ldHdvcmtpbmcgc3VwcG9ydAorICAgICAgICAgIC0+IE5ldHdvcmtpbmcgb3B0aW9ucworICAgICAgICAgICAgLT4gRGF0YSBDZW50ZXIgQnJpZGdpbmcgc3VwcG9ydAorCisgIE9uY2UgdGhpcyBpcyBzZWxlY3RlZCwgRENCIHN1cHBvcnQgbXVzdCBiZSBzZWxlY3RlZCBmb3IgaXhnYmUuICBUaGlzIGNhbgorICBiZSBmb3VuZCBoZXJlOgorCisgICAgICAgIC0+IERldmljZSBEcml2ZXJzCisgICAgICAgICAgLT4gTmV0d29yayBkZXZpY2Ugc3VwcG9ydCAoTkVUREVWSUNFUyBbPXldKQorICAgICAgICAgICAgLT4gRXRoZXJuZXQgKDEwMDAwIE1iaXQpIChORVRERVZfMTAwMDAgWz15XSkKKyAgICAgICAgICAgICAgLT4gSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydAorICAgICAgICAgICAgICAgIC0+IERhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnQKKworICBBZnRlciB0aGVzZSBvcHRpb25zIGFyZSBzZWxlY3RlZCwgeW91IG11c3QgcmVidWlsZCB5b3VyIGtlcm5lbCBhbmQgeW91cgorICBtb2R1bGVzLgorCisgIEluIG9yZGVyIHRvIHVzZSBEQ0IsIHVzZXJzcGFjZSB0b29scyBtdXN0IGJlIGRvd25sb2FkZWQgYW5kIGluc3RhbGxlZC4KKyAgVGhlIGRjYmQgdG9vbHMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAgICAgIGh0dHA6Ly9lMTAwMC5zZi5uZXQKKworCisgIEV0aHRvb2wKKyAgLS0tLS0tLQorICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIHZlcnNpb24gMy4wIG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKKyAgVGhlIGxhdGVzdCByZWxlYXNlIG9mIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGZyb20KKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLgorCisKKyAgTkFQSQorICAtLS0tCisKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGl4Z2JlIGRyaXZlci4gIE5BUEkgaXMgZW5hYmxlZAorICBieSBkZWZhdWx0IGluIHRoZSBkcml2ZXIuCisKKyAgU2VlIHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3ogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFQSS4KKworCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK29yIHRoZSBJbnRlbCBXaXJlZCBOZXR3b3JraW5nIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZWZvcmdlIGF0OgorCisgICAgaHR0cDovL2UxMDAwLnNvdXJjZWZvcmdlLm5ldAorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCit0byB0aGUgaXNzdWUgdG8gZTEwMDAtZGV2ZWxAbGlzdHMuc2YubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmRzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzA3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmRzLnR4dApAQCAtMCwwICsxLDM1NiBAQAorCitPdmVydmlldworPT09PT09PT0KKworVGhpcyByZWFkbWUgdHJpZXMgdG8gcHJvdmlkZSBzb21lIGJhY2tncm91bmQgb24gdGhlIGhvd3MgYW5kIHdoeXMgb2YgUkRTLAorYW5kIHdpbGwgaG9wZWZ1bGx5IGhlbHAgeW91IGZpbmQgeW91ciB3YXkgYXJvdW5kIHRoZSBjb2RlLgorCitJbiBhZGRpdGlvbiwgcGxlYXNlIHNlZSB0aGlzIGVtYWlsIGFib3V0IFJEUyBvcmlnaW5zOgoraHR0cDovL29zcy5vcmFjbGUuY29tL3BpcGVybWFpbC9yZHMtZGV2ZWwvMjAwNy1Ob3ZlbWJlci8wMDAyMjguaHRtbAorCitSRFMgQXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09CisKK1JEUyBwcm92aWRlcyByZWxpYWJsZSwgb3JkZXJlZCBkYXRhZ3JhbSBkZWxpdmVyeSBieSB1c2luZyBhIHNpbmdsZQorcmVsaWFibGUgY29ubmVjdGlvbiBiZXR3ZWVuIGFueSB0d28gbm9kZXMgaW4gdGhlIGNsdXN0ZXIuIFRoaXMgYWxsb3dzCithcHBsaWNhdGlvbnMgdG8gdXNlIGEgc2luZ2xlIHNvY2tldCB0byB0YWxrIHRvIGFueSBvdGhlciBwcm9jZXNzIGluIHRoZQorY2x1c3RlciAtIHNvIGluIGEgY2x1c3RlciB3aXRoIE4gcHJvY2Vzc2VzIHlvdSBuZWVkIE4gc29ja2V0cywgaW4gY29udHJhc3QKK3RvIE4qTiBpZiB5b3UgdXNlIGEgY29ubmVjdGlvbi1vcmllbnRlZCBzb2NrZXQgdHJhbnNwb3J0IGxpa2UgVENQLgorCitSRFMgaXMgbm90IEluZmluaWJhbmQtc3BlY2lmaWM7IGl0IHdhcyBkZXNpZ25lZCB0byBzdXBwb3J0IGRpZmZlcmVudAordHJhbnNwb3J0cy4gIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHVzZWQgdG8gc3VwcG9ydCBSRFMgb3ZlciBUQ1AgYXMgd2VsbAorYXMgSUIuIFdvcmsgaXMgaW4gcHJvZ3Jlc3MgdG8gc3VwcG9ydCBSRFMgb3ZlciBpV0FSUCwgYW5kIHVzaW5nIERDRSB0bworZ3VhcmFudGVlIG5vIGRyb3BwZWQgcGFja2V0cyBvbiBFdGhlcm5ldCwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHVzZSBSRFMgb3ZlcgorVURQIGluIHRoZSBmdXR1cmUuCisKK1RoZSBoaWdoLWxldmVsIHNlbWFudGljcyBvZiBSRFMgZnJvbSB0aGUgYXBwbGljYXRpb24ncyBwb2ludCBvZiB2aWV3IGFyZQorCisgKglBZGRyZXNzaW5nCisgICAgICAgIFJEUyB1c2VzIElQdjQgYWRkcmVzc2VzIGFuZCAxNmJpdCBwb3J0IG51bWJlcnMgdG8gaWRlbnRpZnkKKyAgICAgICAgdGhlIGVuZCBwb2ludCBvZiBhIGNvbm5lY3Rpb24uIEFsbCBzb2NrZXQgb3BlcmF0aW9ucyB0aGF0IGludm9sdmUKKyAgICAgICAgcGFzc2luZyBhZGRyZXNzZXMgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UgZ2VuZXJhbGx5CisgICAgICAgIHVzZSBhIHN0cnVjdCBzb2NrYWRkcl9pbi4KKworICAgICAgICBUaGUgZmFjdCB0aGF0IElQdjQgYWRkcmVzc2VzIGFyZSB1c2VkIGRvZXMgbm90IG1lYW4gdGhlIHVuZGVybHlpbmcKKyAgICAgICAgdHJhbnNwb3J0IGhhcyB0byBiZSBJUC1iYXNlZC4gSW4gZmFjdCwgUkRTIG92ZXIgSUIgdXNlcyBhCisgICAgICAgIHJlbGlhYmxlIElCIGNvbm5lY3Rpb247IHRoZSBJUCBhZGRyZXNzIGlzIHVzZWQgZXhjbHVzaXZlbHkgdG8KKyAgICAgICAgbG9jYXRlIHRoZSByZW1vdGUgbm9kZSdzIEdJRCAoYnkgQVJQaW5nIGZvciB0aGUgZ2l2ZW4gSVApLgorCisgICAgICAgIFRoZSBwb3J0IHNwYWNlIGlzIGVudGlyZWx5IGluZGVwZW5kZW50IG9mIFVEUCwgVENQIG9yIGFueSBvdGhlcgorICAgICAgICBwcm90b2NvbC4KKworICoJU29ja2V0IGludGVyZmFjZQorICAgICAgICBSRFMgc29ja2V0cyB3b3JrICptb3N0bHkqIGFzIHlvdSB3b3VsZCBleHBlY3QgZnJvbSBhIEJTRAorICAgICAgICBzb2NrZXQuIFRoZSBuZXh0IHNlY3Rpb24gd2lsbCBjb3ZlciB0aGUgZGV0YWlscy4gQXQgYW55IHJhdGUsCisgICAgICAgIGFsbCBJL08gaXMgcGVyZm9ybWVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIEJTRCBzb2NrZXQgQVBJLgorICAgICAgICBTb21lIGFkZGl0aW9ucyBsaWtlIHplcm9jb3B5IHN1cHBvcnQgYXJlIGltcGxlbWVudGVkIHRocm91Z2gKKyAgICAgICAgY29udHJvbCBtZXNzYWdlcywgd2hpbGUgb3RoZXIgZXh0ZW5zaW9ucyB1c2UgdGhlIGdldHNvY2tvcHQvCisgICAgICAgIHNldHNvY2tvcHQgY2FsbHMuCisKKyAgICAgICAgU29ja2V0cyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB5b3UgY2FuIHNlbmQgb3IgcmVjZWl2ZSBkYXRhLgorICAgICAgICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGJpbmRpbmcgYWxzbyBzZWxlY3RzIGEgdHJhbnNwb3J0IGFuZAorICAgICAgICBhdHRhY2hlcyBpdCB0byB0aGUgc29ja2V0LiBPbmNlIGJvdW5kLCB0aGUgdHJhbnNwb3J0IGFzc2lnbm1lbnQKKyAgICAgICAgZG9lcyBub3QgY2hhbmdlLiBSRFMgd2lsbCB0b2xlcmF0ZSBJUHMgbW92aW5nIGFyb3VuZCAoZWcgaW4KKyAgICAgICAgYSBhY3RpdmUtYWN0aXZlIEhBIHNjZW5hcmlvKSwgYnV0IG9ubHkgYXMgbG9uZyBhcyB0aGUgYWRkcmVzcworICAgICAgICBkb2Vzbid0IG1vdmUgdG8gYSBkaWZmZXJlbnQgdHJhbnNwb3J0LgorCisgKglzeXNjdGxzCisgICAgICAgIFJEUyBzdXBwb3J0cyBhIG51bWJlciBvZiBzeXNjdGxzIGluIC9wcm9jL3N5cy9uZXQvcmRzCisKKworU29ja2V0IEludGVyZmFjZQorPT09PT09PT09PT09PT09PQorCisgIEFGX1JEUywgUEZfUkRTLCBTT0xfUkRTCisgICAgICAgIFRoZXNlIGNvbnN0YW50cyBoYXZlbid0IGJlZW4gYXNzaWduZWQgeWV0LCBiZWNhdXNlIFJEUyBpc24ndCBpbgorICAgICAgICBtYWlubGluZSB5ZXQuIEN1cnJlbnRseSwgdGhlIGtlcm5lbCBtb2R1bGUgYXNzaWducyBzb21lIGNvbnN0YW50CisgICAgICAgIGFuZCBwdWJsaXNoZXMgaXQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIHR3byBzeXNjdGwgZmlsZXMKKyAgICAgICAgICAgICAgICAvcHJvYy9zeXMvbmV0L3Jkcy9wZl9yZHMKKyAgICAgICAgICAgICAgICAvcHJvYy9zeXMvbmV0L3Jkcy9zb2xfcmRzCisKKyAgZmQgPSBzb2NrZXQoUEZfUkRTLCBTT0NLX1NFUVBBQ0tFVCwgMCk7CisgICAgICAgIFRoaXMgY3JlYXRlcyBhIG5ldywgdW5ib3VuZCBSRFMgc29ja2V0LgorCisgIHNldHNvY2tvcHQoU09MX1NPQ0tFVCk6IHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHNpemUKKyAgICAgICAgUkRTIGhvbm9ycyB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZSBzb2NrZXQgb3B0aW9ucy4KKyAgICAgICAgWW91IGFyZSBub3QgYWxsb3dlZCB0byBxdWV1ZSBtb3JlIHRoYW4gU09fU05EU0laRSBieXRlcyB0bworICAgICAgICBhIHNvY2tldC4gQSBtZXNzYWdlIGlzIHF1ZXVlZCB3aGVuIHNlbmRtc2cgaXMgY2FsbGVkLCBhbmQKKyAgICAgICAgaXQgbGVhdmVzIHRoZSBxdWV1ZSB3aGVuIHRoZSByZW1vdGUgc3lzdGVtIGFja25vd2xlZGdlcworICAgICAgICBpdHMgYXJyaXZhbC4KKworICAgICAgICBUaGUgU09fUkNWU0laRSBvcHRpb24gY29udHJvbHMgdGhlIG1heGltdW0gcmVjZWl2ZSBxdWV1ZSBsZW5ndGguCisgICAgICAgIFRoaXMgaXMgYSBzb2Z0IGxpbWl0IHJhdGhlciB0aGFuIGEgaGFyZCBsaW1pdCAtIFJEUyB3aWxsCisgICAgICAgIGNvbnRpbnVlIHRvIGFjY2VwdCBhbmQgcXVldWUgaW5jb21pbmcgbWVzc2FnZXMsIGV2ZW4gaWYgdGhhdAorICAgICAgICB0YWtlcyB0aGUgcXVldWUgbGVuZ3RoIG92ZXIgdGhlIGxpbWl0LiBIb3dldmVyLCBpdCB3aWxsIGFsc28KKyAgICAgICAgbWFyayB0aGUgcG9ydCBhcyAiY29uZ2VzdGVkIiBhbmQgc2VuZCBhIGNvbmdlc3Rpb24gdXBkYXRlIHRvCisgICAgICAgIHRoZSBzb3VyY2Ugbm9kZS4gVGhlIHNvdXJjZSBub2RlIGlzIHN1cHBvc2VkIHRvIHRocm90dGxlIGFueQorICAgICAgICBwcm9jZXNzZXMgc2VuZGluZyB0byB0aGlzIGNvbmdlc3RlZCBwb3J0LgorCisgIGJpbmQoZmQsICZzb2NrYWRkcl9pbiwgLi4uKQorICAgICAgICBUaGlzIGJpbmRzIHRoZSBzb2NrZXQgdG8gYSBsb2NhbCBJUCBhZGRyZXNzIGFuZCBwb3J0LCBhbmQgYQorICAgICAgICB0cmFuc3BvcnQuCisKKyAgc2VuZG1zZyhmZCwgLi4uKQorICAgICAgICBTZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGluZGljYXRlZCByZWNpcGllbnQuIFRoZSBrZXJuZWwgd2lsbAorICAgICAgICB0cmFuc3BhcmVudGx5IGVzdGFibGlzaCB0aGUgdW5kZXJseWluZyByZWxpYWJsZSBjb25uZWN0aW9uCisgICAgICAgIGlmIGl0IGlzbid0IHVwIHlldC4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRoYXQgZXhjZWVkcyBTT19TTkRTSVpFIHdpbGwKKyAgICAgICAgcmV0dXJuIHdpdGggLUVNU0dTSVpFCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0aGF0IHdvdWxkIHRha2UgdGhlIHRvdGFsIG51bWJlcgorICAgICAgICBvZiBxdWV1ZWQgYnl0ZXMgb3ZlciB0aGUgU09fU05EU0laRSB0aHJlc2hvbGQgd2lsbCByZXR1cm4KKyAgICAgICAgRUFHQUlOLgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gYSBkZXN0aW5hdGlvbiB0aGF0IGlzIG1hcmtlZAorICAgICAgICBhcyAiY29uZ2VzdGVkIiB3aWxsIHJldHVybiBFTk9CVUZTLgorCisgIHJlY3Ztc2coZmQsIC4uLikKKyAgICAgICAgUmVjZWl2ZXMgYSBtZXNzYWdlIHRoYXQgd2FzIHF1ZXVlZCB0byB0aGlzIHNvY2tldC4gVGhlIHNvY2tldHMKKyAgICAgICAgcmVjdiBxdWV1ZSBhY2NvdW50aW5nIGlzIGFkanVzdGVkLCBhbmQgaWYgdGhlIHF1ZXVlIGxlbmd0aAorICAgICAgICBkcm9wcyBiZWxvdyBTT19TTkRTSVpFLCB0aGUgcG9ydCBpcyBtYXJrZWQgdW5jb25nZXN0ZWQsIGFuZAorICAgICAgICBhIGNvbmdlc3Rpb24gdXBkYXRlIGlzIHNlbnQgdG8gYWxsIHBlZXJzLgorCisgICAgICAgIEFwcGxpY2F0aW9ucyBjYW4gYXNrIHRoZSBSRFMga2VybmVsIG1vZHVsZSB0byByZWNlaXZlCisgICAgICAgIG5vdGlmaWNhdGlvbnMgdmlhIGNvbnRyb2wgbWVzc2FnZXMgKGZvciBpbnN0YW5jZSwgdGhlcmUgaXMgYQorICAgICAgICBub3RpZmljYXRpb24gd2hlbiBhIGNvbmdlc3Rpb24gdXBkYXRlIGFycml2ZWQsIG9yIHdoZW4gYSBSRE1BCisgICAgICAgIG9wZXJhdGlvbiBjb21wbGV0ZXMpLiBUaGVzZSBub3RpZmljYXRpb25zIGFyZSByZWNlaXZlZCB0aHJvdWdoCisgICAgICAgIHRoZSBtc2cubXNnX2NvbnRyb2wgYnVmZmVyIG9mIHN0cnVjdCBtc2doZHIuIFRoZSBmb3JtYXQgb2YgdGhlCisgICAgICAgIG1lc3NhZ2VzIGlzIGRlc2NyaWJlZCBpbiBtYW5wYWdlcy4KKworICBwb2xsKGZkKQorICAgICAgICBSRFMgc3VwcG9ydHMgdGhlIHBvbGwgaW50ZXJmYWNlIHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbgorICAgICAgICB0byBpbXBsZW1lbnQgYXN5bmMgSS9PLgorCisgICAgICAgIFBPTExJTiBoYW5kbGluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBXaGVuIHRoZXJlJ3MgYW4KKyAgICAgICAgaW5jb21pbmcgbWVzc2FnZSBxdWV1ZWQgdG8gdGhlIHNvY2tldCwgb3IgYSBwZW5kaW5nIG5vdGlmaWNhdGlvbiwKKyAgICAgICAgd2Ugc2lnbmFsIFBPTExJTi4KKworICAgICAgICBQT0xMT1VUIGlzIGEgbGl0dGxlIGhhcmRlci4gU2luY2UgeW91IGNhbiBlc3NlbnRpYWxseSBzZW5kCisgICAgICAgIHRvIGFueSBkZXN0aW5hdGlvbiwgUkRTIHdpbGwgYWx3YXlzIHNpZ25hbCBQT0xMT1VUIGFzIGxvbmcgYXMKKyAgICAgICAgdGhlcmUncyByb29tIG9uIHRoZSBzZW5kIHF1ZXVlIChpZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZAorICAgICAgICBpcyBsZXNzIHRoYW4gdGhlIHNlbmRidWYgc2l6ZSkuCisKKyAgICAgICAgSG93ZXZlciwgdGhlIGtlcm5lbCB3aWxsIHJlZnVzZSB0byBhY2NlcHQgbWVzc2FnZXMgdG8KKyAgICAgICAgYSBkZXN0aW5hdGlvbiBtYXJrZWQgY29uZ2VzdGVkIC0gaW4gdGhpcyBjYXNlIHlvdSB3aWxsIGxvb3AKKyAgICAgICAgZm9yZXZlciBpZiB5b3UgcmVseSBvbiBwb2xsIHRvIHRlbGwgeW91IHdoYXQgdG8gZG8uCisgICAgICAgIFRoaXMgaXNuJ3QgYSB0cml2aWFsIHByb2JsZW0sIGJ1dCBhcHBsaWNhdGlvbnMgY2FuIGRlYWwgd2l0aAorICAgICAgICB0aGlzIC0gYnkgdXNpbmcgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zLCBhbmQgYnkgY2hlY2tpbmcgZm9yCisgICAgICAgIEVOT0JVRlMgZXJyb3JzIHJldHVybmVkIGJ5IHNlbmRtc2cuCisKKyAgc2V0c29ja29wdChTT0xfUkRTLCBSRFNfQ0FOQ0VMX1NFTlRfVE8sICZzb2NrYWRkcl9pbikKKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGRpc2NhcmQgYWxsIG1lc3NhZ2VzIHF1ZXVlZCB0byBhCisgICAgICAgIHNwZWNpZmljIGRlc3RpbmF0aW9uIG9uIHRoaXMgcGFydGljdWxhciBzb2NrZXQuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGNhbmNlbCBvdXRzdGFuZGluZyBtZXNzYWdlcyBpZgorICAgICAgICBpdCBkZXRlY3RzIGEgdGltZW91dC4gRm9yIGluc3RhbmNlLCBpZiBpdCB0cmllZCB0byBzZW5kIGEgbWVzc2FnZSwKKyAgICAgICAgYW5kIHRoZSByZW1vdGUgaG9zdCBpcyB1bnJlYWNoYWJsZSwgUkRTIHdpbGwga2VlcCB0cnlpbmcgZm9yZXZlci4KKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIG1heSBkZWNpZGUgaXQncyBub3Qgd29ydGggaXQsIGFuZCBjYW5jZWwgdGhlCisgICAgICAgIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCBpdCB3b3VsZCB1c2UgUkRTX0NBTkNFTF9TRU5UX1RPIHRvCisgICAgICAgIG51a2UgYW55IHBlbmRpbmcgbWVzc2FnZXMuCisKKworUkRNQSBmb3IgUkRTCis9PT09PT09PT09PT0KKworICBzZWUgcmRzLXJkbWEoNykgbWFucGFnZSAoYXZhaWxhYmxlIGluIHJkcy10b29scykKKworCitDb25nZXN0aW9uIE5vdGlmaWNhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgIHNlZSByZHMoNykgbWFucGFnZQorCisKK1JEUyBQcm90b2NvbAorPT09PT09PT09PT09CisKKyAgTWVzc2FnZSBoZWFkZXIKKworICAgIFRoZSBtZXNzYWdlIGhlYWRlciBpcyBhICdzdHJ1Y3QgcmRzX2hlYWRlcicgKHNlZSByZHMuaCk6CisgICAgRmllbGRzOgorICAgICAgaF9zZXF1ZW5jZToKKyAgICAgICAgICBwZXItcGFja2V0IHNlcXVlbmNlIG51bWJlcgorICAgICAgaF9hY2s6CisgICAgICAgICAgcGlnZ3liYWNrZWQgYWNrbm93bGVkZ21lbnQgb2YgbGFzdCBwYWNrZXQgcmVjZWl2ZWQKKyAgICAgIGhfbGVuOgorICAgICAgICAgIGxlbmd0aCBvZiBkYXRhLCBub3QgaW5jbHVkaW5nIGhlYWRlcgorICAgICAgaF9zcG9ydDoKKyAgICAgICAgICBzb3VyY2UgcG9ydAorICAgICAgaF9kcG9ydDoKKyAgICAgICAgICBkZXN0aW5hdGlvbiBwb3J0CisgICAgICBoX2ZsYWdzOgorICAgICAgICAgIENPTkdfQklUTUFQIC0gdGhpcyBpcyBhIGNvbmdlc3Rpb24gdXBkYXRlIGJpdG1hcAorICAgICAgICAgIEFDS19SRVFVSVJFRCAtIHJlY2VpdmVyIG11c3QgYWNrIHRoaXMgcGFja2V0CisgICAgICAgICAgUkVUUkFOU01JVFRFRCAtIHBhY2tldCBoYXMgcHJldmlvdXNseSBiZWVuIHNlbnQKKyAgICAgIGhfY3JlZGl0OgorICAgICAgICAgIGluZGljYXRlIHRvIG90aGVyIGVuZCBvZiBjb25uZWN0aW9uIHRoYXQKKyAgICAgICAgICBpdCBoYXMgbW9yZSBjcmVkaXRzIGF2YWlsYWJsZSAoaS5lLiB0aGVyZSBpcworICAgICAgICAgIG1vcmUgc2VuZCByb29tKQorICAgICAgaF9wYWRkaW5nWzRdOgorICAgICAgICAgIHVudXNlZCwgZm9yIGZ1dHVyZSB1c2UKKyAgICAgIGhfY3N1bToKKyAgICAgICAgICBoZWFkZXIgY2hlY2tzdW0KKyAgICAgIGhfZXh0aGRyOgorICAgICAgICAgIG9wdGlvbmFsIGRhdGEgY2FuIGJlIHBhc3NlZCBoZXJlLiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGZvcgorICAgICAgICAgIHBhc3NpbmcgUkRNQS1yZWxhdGVkIGluZm9ybWF0aW9uLgorCisgIEFDSyBhbmQgcmV0cmFuc21pdCBoYW5kbGluZworCisgICAgICBPbmUgbWlnaHQgdGhpbmsgdGhhdCB3aXRoIHJlbGlhYmxlIElCIGNvbm5lY3Rpb25zIHlvdSB3b3VsZG4ndCBuZWVkCisgICAgICB0byBhY2sgbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IElCCisgICAgICBoYXJkd2FyZSBnZW5lcmF0ZXMgYW4gYWNrIG1lc3NhZ2UgYmVmb3JlIGl0IGhhcyBETUFlZCB0aGUgbWVzc2FnZQorICAgICAgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYSBwb3RlbnRpYWwgbWVzc2FnZSBsb3NzIGlmIHRoZSBIQ0EgaXMKKyAgICAgIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdCBzZW5kcyB0aGUgYWNrIGFuZCBiZWZvcmUKKyAgICAgIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYSBwb3RlbnRpYWwgaXNzdWUKKyAgICAgIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorCisgICAgICBTZW5kaW5nIGFuIGFjayBpbW1lZGlhdGVseSB3b3VsZCBhbGxvdyB0aGUgc2VuZGVyIHRvIGZyZWUgdGhlIHNlbnQKKyAgICAgIG1lc3NhZ2UgZnJvbSB0aGVpciBzZW5kIHF1ZXVlIHF1aWNrbHksIGJ1dCBjb3VsZCBjYXVzZSBleGNlc3NpdmUKKyAgICAgIHRyYWZmaWMgdG8gYmUgdXNlZCBmb3IgYWNrcy4gUkRTIHBpZ2d5YmFja3MgYWNrcyBvbiBzZW50IGRhdGEKKyAgICAgIHBhY2tldHMuICBBY2stb25seSBwYWNrZXRzIGFyZSByZWR1Y2VkIGJ5IG9ubHkgYWxsb3dpbmcgb25lIHRvIGJlCisgICAgICBpbiBmbGlnaHQgYXQgYSB0aW1lLCBhbmQgYnkgdGhlIHNlbmRlciBvbmx5IGFza2luZyBmb3IgYWNrcyB3aGVuCisgICAgICBpdHMgc2VuZCBidWZmZXJzIHN0YXJ0IHRvIGZpbGwgdXAuIEFsbCByZXRyYW5zbWlzc2lvbnMgYXJlIGFsc28KKyAgICAgIGFja2VkLgorCisgIEZsb3cgQ29udHJvbAorCisgICAgICBSRFMncyBJQiB0cmFuc3BvcnQgdXNlcyBhIGNyZWRpdC1iYXNlZCBtZWNoYW5pc20gdG8gdmVyaWZ5IHRoYXQKKyAgICAgIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBwZWVyJ3MgcmVjZWl2ZSBidWZmZXJzIGZvciBtb3JlIGRhdGEuIFRoaXMKKyAgICAgIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGhhcmR3YXJlIHJldHJpZXMgb24gdGhlIGNvbm5lY3Rpb24uCisKKyAgQ29uZ2VzdGlvbgorCisgICAgICBNZXNzYWdlcyB3YWl0aW5nIGluIHRoZSByZWNlaXZlIHF1ZXVlIG9uIHRoZSByZWNlaXZpbmcgc29ja2V0CisgICAgICBhcmUgYWNjb3VudGVkIGFnYWluc3QgdGhlIHNvY2tldHMgU09fUkNWQlVGIG9wdGlvbiB2YWx1ZS4gIE9ubHkKKyAgICAgIHRoZSBwYXlsb2FkIGJ5dGVzIGluIHRoZSBtZXNzYWdlIGFyZSBhY2NvdW50ZWQgZm9yLiAgSWYgdGhlCisgICAgICBudW1iZXIgb2YgYnl0ZXMgcXVldWVkIGVxdWFscyBvciBleGNlZWRzIHJjdmJ1ZiB0aGVuIHRoZSBzb2NrZXQKKyAgICAgIGlzIGNvbmdlc3RlZC4gIEFsbCBzZW5kcyBhdHRlbXB0ZWQgdG8gdGhpcyBzb2NrZXQncyBhZGRyZXNzCisgICAgICBzaG91bGQgcmV0dXJuIGJsb2NrIG9yIHJldHVybiAtRVdPVUxEQkxPQ0suCisKKyAgICAgIEFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVhc29uYWJseSB0dW5lZCBzdWNoIHRoYXQgdGhpcworICAgICAgc2l0dWF0aW9uIHZlcnkgcmFyZWx5IG9jY3Vycy4gIEFuIGFwcGxpY2F0aW9uIGVuY291bnRlcmluZyB0aGlzCisgICAgICAiYmFjay1wcmVzc3VyZSIgaXMgY29uc2lkZXJlZCBhIGJ1Zy4KKworICAgICAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgZWFjaCBub2RlIG1haW50YWluIGJpdG1hcHMgd2hpY2gKKyAgICAgIGluZGljYXRlIHdoaWNoIHBvcnRzIG9uIGJvdW5kIGFkZHJlc3NlcyBhcmUgY29uZ2VzdGVkLiAgQXMgdGhlCisgICAgICBiaXRtYXAgY2hhbmdlcyBpdCBpcyBzZW50IHRocm91Z2ggYWxsIHRoZSBjb25uZWN0aW9ucyB3aGljaAorICAgICAgdGVybWluYXRlIGluIHRoZSBsb2NhbCBhZGRyZXNzIG9mIHRoZSBiaXRtYXAgd2hpY2ggY2hhbmdlZC4KKworICAgICAgVGhlIGJpdG1hcHMgYXJlIGFsbG9jYXRlZCBhcyBjb25uZWN0aW9ucyBhcmUgYnJvdWdodCB1cC4gIFRoaXMKKyAgICAgIGF2b2lkcyBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aCB3aGljaCBxdWV1ZXMKKyAgICAgIHNhZ2VzIG9uIHNvY2tldHMuICBUaGUgZGVuc2UgYml0bWFwcyBsZXQgdHJhbnNwb3J0cyBzZW5kIHRoZQorICAgICAgZW50aXJlIGJpdG1hcCBvbiBhbnkgYml0bWFwIGNoYW5nZSByZWFzb25hYmx5IGVmZmljaWVudGx5LiAgVGhpcworICAgICAgaXMgbXVjaCBlYXNpZXIgdG8gaW1wbGVtZW50IHRoYW4gc29tZSBmaW5lci1ncmFpbmVkCisgICAgICBjb21tdW5pY2F0aW9uIG9mIHBlci1wb3J0IGNvbmdlc3Rpb24uICBUaGUgc2VuZGVyIGRvZXMgYSB2ZXJ5CisgICAgICBpbmV4cGVuc2l2ZSBiaXQgdGVzdCB0byB0ZXN0IGlmIHRoZSBwb3J0IGl0J3MgYWJvdXQgdG8gc2VuZCB0bworICAgICAgaXMgY29uZ2VzdGVkIG9yIG5vdC4KKworCitSRFMgVHJhbnNwb3J0IExheWVyCis9PT09PT09PT09PT09PT09PT0KKworICBBcyBtZW50aW9uZWQgYWJvdmUsIFJEUyBpcyBub3QgSUItc3BlY2lmaWMuIEl0cyBjb2RlIGlzIGRpdmlkZWQKKyAgaW50byBhIGdlbmVyYWwgUkRTIGxheWVyIGFuZCBhIHRyYW5zcG9ydCBsYXllci4KKworICBUaGUgZ2VuZXJhbCBsYXllciBoYW5kbGVzIHRoZSBzb2NrZXQgQVBJLCBjb25nZXN0aW9uIGhhbmRsaW5nLAorICBsb29wYmFjaywgc3RhdHMsIHVzZXJtZW0gcGlubmluZywgYW5kIHRoZSBjb25uZWN0aW9uIHN0YXRlIG1hY2hpbmUuCisKKyAgVGhlIHRyYW5zcG9ydCBsYXllciBoYW5kbGVzIHRoZSBkZXRhaWxzIG9mIHRoZSB0cmFuc3BvcnQuIFRoZSBJQgorICB0cmFuc3BvcnQsIGZvciBleGFtcGxlLCBoYW5kbGVzIGFsbCB0aGUgcXVldWUgcGFpcnMsIHdvcmsgcmVxdWVzdHMsCisgIENNIGV2ZW50IGhhbmRsZXJzLCBhbmQgb3RoZXIgSW5maW5pYmFuZCBkZXRhaWxzLgorCisKK1JEUyBLZXJuZWwgU3RydWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09CisKKyAgc3RydWN0IHJkc19tZXNzYWdlCisgICAgYWthIHBvc3NpYmx5ICJyZHNfb3V0Z29pbmciLCB0aGUgZ2VuZXJpYyBSRFMgbGF5ZXIgY29waWVzIGRhdGEgdG8KKyAgICBiZSBzZW50IGFuZCBzZXRzIGhlYWRlciBmaWVsZHMgYXMgbmVlZGVkLCBiYXNlZCBvbiB0aGUgc29ja2V0IEFQSS4KKyAgICBUaGlzIGlzIHRoZW4gcXVldWVkIGZvciB0aGUgaW5kaXZpZHVhbCBjb25uZWN0aW9uIGFuZCBzZW50IGJ5IHRoZQorICAgIGNvbm5lY3Rpb24ncyB0cmFuc3BvcnQuCisgIHN0cnVjdCByZHNfaW5jb21pbmcKKyAgICBhIGdlbmVyaWMgc3RydWN0IHJlZmVycmluZyB0byBpbmNvbWluZyBkYXRhIHRoYXQgY2FuIGJlIGhhbmRlZCBmcm9tCisgICAgdGhlIHRyYW5zcG9ydCB0byB0aGUgZ2VuZXJhbCBjb2RlIGFuZCBxdWV1ZWQgYnkgdGhlIGdlbmVyYWwgY29kZQorICAgIHdoaWxlIHRoZSBzb2NrZXQgaXMgYXdva2VuLiBJdCBpcyB0aGVuIHBhc3NlZCBiYWNrIHRvIHRoZSB0cmFuc3BvcnQKKyAgICBjb2RlIHRvIGhhbmRsZSB0aGUgYWN0dWFsIGNvcHktdG8tdXNlci4KKyAgc3RydWN0IHJkc19zb2NrZXQKKyAgICBwZXItc29ja2V0IGluZm9ybWF0aW9uCisgIHN0cnVjdCByZHNfY29ubmVjdGlvbgorICAgIHBlci1jb25uZWN0aW9uIGluZm9ybWF0aW9uCisgIHN0cnVjdCByZHNfdHJhbnNwb3J0CisgICAgcG9pbnRlcnMgdG8gdHJhbnNwb3J0LXNwZWNpZmljIGZ1bmN0aW9ucworICBzdHJ1Y3QgcmRzX3N0YXRpc3RpY3MKKyAgICBub24tdHJhbnNwb3J0LXNwZWNpZmljIHN0YXRpc3RpY3MKKyAgc3RydWN0IHJkc19jb25nX21hcAorICAgIHdyYXBzIHRoZSByYXcgY29uZ2VzdGlvbiBiaXRtYXAsIGNvbnRhaW5zIHJibm9kZSwgd2FpdHEsIGV0Yy4KKworQ29ubmVjdGlvbiBtYW5hZ2VtZW50Cis9PT09PT09PT09PT09PT09PT09PT0KKworICBDb25uZWN0aW9ucyBtYXkgYmUgaW4gVVAsIERPV04sIENPTk5FQ1RJTkcsIERJU0NPTk5FQ1RJTkcsIGFuZAorICBFUlJPUiBzdGF0ZXMuCisKKyAgVGhlIGZpcnN0IHRpbWUgYW4gYXR0ZW1wdCBpcyBtYWRlIGJ5IGFuIFJEUyBzb2NrZXQgdG8gc2VuZCBkYXRhIHRvCisgIGEgbm9kZSwgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZCBhbmQgY29ubmVjdGVkLiBUaGF0IGNvbm5lY3Rpb24gaXMKKyAgdGhlbiBtYWludGFpbmVkIGZvcmV2ZXIgLS0gaWYgdGhlcmUgYXJlIHRyYW5zcG9ydCBlcnJvcnMsIHRoZQorICBjb25uZWN0aW9uIHdpbGwgYmUgZHJvcHBlZCBhbmQgcmUtZXN0YWJsaXNoZWQuCisKKyAgRHJvcHBpbmcgYSBjb25uZWN0aW9uIHdoaWxlIHBhY2tldHMgYXJlIHF1ZXVlZCB3aWxsIGNhdXNlIHF1ZXVlZCBvcgorICBwYXJ0aWFsbHktc2VudCBkYXRhZ3JhbXMgdG8gYmUgcmV0cmFuc21pdHRlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzCisgIHJlLWVzdGFibGlzaGVkLgorCisKK1RoZSBzZW5kIHBhdGgKKz09PT09PT09PT09PT0KKworICByZHNfc2VuZG1zZygpCisgICAgc3RydWN0IHJkc19tZXNzYWdlIGJ1aWx0IGZyb20gaW5jb21pbmcgZGF0YQorICAgIENNU0dzIHBhcnNlZCAoZS5nLiBSRE1BIG9wcykKKyAgICB0cmFuc3BvcnQgY29ubmVjdGlvbiBhbGxvY2VkIGFuZCBjb25uZWN0ZWQgaWYgbm90IGFscmVhZHkKKyAgICByZHNfbWVzc2FnZSBwbGFjZWQgb24gc2VuZCBxdWV1ZQorICAgIHNlbmQgd29ya2VyIGF3b2tlbgorICByZHNfc2VuZF93b3JrZXIoKQorICAgIGNhbGxzIHJkc19zZW5kX3htaXQoKSB1bnRpbCBxdWV1ZSBpcyBlbXB0eQorICByZHNfc2VuZF94bWl0KCkKKyAgICB0cmFuc21pdHMgY29uZ2VzdGlvbiBtYXAgaWYgb25lIGlzIHBlbmRpbmcKKyAgICBtYXkgc2V0IEFDS19SRVFVSVJFRAorICAgIGNhbGxzIHRyYW5zcG9ydCB0byBzZW5kIGVpdGhlciBub24tUkRNQSBvciBSRE1BIG1lc3NhZ2UKKyAgICAoUkRNQSBvcHMgbmV2ZXIgcmV0cmFuc21pdHRlZCkKKyAgcmRzX2liX3htaXQoKQorICAgIGFsbG9jcyB3b3JrIHJlcXVlc3RzIGZyb20gc2VuZCByaW5nCisgICAgYWRkcyBhbnkgbmV3IHNlbmQgY3JlZGl0cyBhdmFpbGFibGUgdG8gcGVlciAoaF9jcmVkaXRzKQorICAgIG1hcHMgdGhlIHJkc19tZXNzYWdlJ3Mgc2cgbGlzdAorICAgIHBpZ2d5YmFja3MgYWNrCisgICAgcG9wdWxhdGVzIHdvcmsgcmVxdWVzdHMKKyAgICBwb3N0IHNlbmQgdG8gY29ubmVjdGlvbidzIHF1ZXVlIHBhaXIKKworVGhlIHJlY3YgcGF0aAorPT09PT09PT09PT09PQorCisgIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlcigpCisgICAgbG9va3MgYXQgd3JpdGUgY29tcGxldGlvbnMKKyAgICB1bm1hcHMgcmVjdiBidWZmZXIgZnJvbSBkZXZpY2UKKyAgICBubyBlcnJvcnMsIGNhbGwgcmRzX2liX3Byb2Nlc3NfcmVjdigpCisgICAgcmVmaWxsIHJlY3YgcmluZworICByZHNfaWJfcHJvY2Vzc19yZWN2KCkKKyAgICB2YWxpZGF0ZSBoZWFkZXIgY2hlY2tzdW0KKyAgICBjb3B5IGhlYWRlciB0byByZHNfaWJfaW5jb21pbmcgc3RydWN0IGlmIHN0YXJ0IG9mIGEgbmV3IGRhdGFncmFtCisgICAgYWRkIHRvIGliaW5jJ3MgZnJhZ2xpc3QKKyAgICBpZiBjb21wZXRlZCBkYXRhZ3JhbToKKyAgICAgIHVwZGF0ZSBjb25nIG1hcCBpZiBkYXRhZ3JhbSB3YXMgY29uZyB1cGRhdGUKKyAgICAgIGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKSBvdGhlcndpc2UKKyAgICAgIG5vdGUgaWYgYWNrIGlzIHJlcXVpcmVkCisgIHJkc19yZWN2X2luY29taW5nKCkKKyAgICBkcm9wIGR1cGxpY2F0ZSBwYWNrZXRzCisgICAgcmVzcG9uZCB0byBwaW5ncworICAgIGZpbmQgdGhlIHNvY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0YWdyYW0KKyAgICBhZGQgdG8gc29jayBxdWV1ZQorICAgIHdha2UgdXAgc29jaworICAgIGRvIHNvbWUgY29uZ2VzdGlvbiBjYWxjdWxhdGlvbnMKKyAgcmRzX3JlY3Ztc2cKKyAgICBjb3B5IGRhdGEgaW50byB1c2VyIGlvdmVjCisgICAgaGFuZGxlIENNU0dzCisgICAgcmV0dXJuIHRvIGFwcGxpY2F0aW9uCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU4YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQKQEAgLTAsMCArMSwxODAgQEAKK1RoZSBleGlzdGluZyBpbnRlcmZhY2VzIGZvciBnZXR0aW5nIG5ldHdvcmsgcGFja2FnZXMgdGltZSBzdGFtcGVkIGFyZToKKworKiBTT19USU1FU1RBTVAKKyAgR2VuZXJhdGUgdGltZSBzdGFtcCBmb3IgZWFjaCBpbmNvbWluZyBwYWNrZXQgdXNpbmcgdGhlIChub3QgbmVjZXNzYXJpbHkKKyAgbW9ub3Rvbm91cyEpIHN5c3RlbSB0aW1lLiBSZXN1bHQgaXMgcmV0dXJuZWQgdmlhIHJlY3ZfbXNnKCkgaW4gYQorICBjb250cm9sIG1lc3NhZ2UgYXMgdGltZXZhbCAodXNlYyByZXNvbHV0aW9uKS4KKworKiBTT19USU1FU1RBTVBOUworICBTYW1lIHRpbWUgc3RhbXBpbmcgbWVjaGFuaXNtIGFzIFNPX1RJTUVTVEFNUCwgYnV0IHJldHVybnMgcmVzdWx0IGFzCisgIHRpbWVzcGVjIChuc2VjIHJlc29sdXRpb24pLgorCisqIElQX01VTFRJQ0FTVF9MT09QICsgU09fVElNRVNUQU1QW05TXQorICBPbmx5IGZvciBtdWx0aWNhc3RzOiBhcHByb3hpbWF0ZSBzZW5kIHRpbWUgc3RhbXAgYnkgcmVjZWl2aW5nIHRoZSBsb29wZWQKKyAgcGFja2V0IGFuZCB1c2luZyBpdHMgcmVjZWl2ZSB0aW1lIHN0YW1wLgorCitUaGUgZm9sbG93aW5nIGludGVyZmFjZSBjb21wbGVtZW50cyB0aGUgZXhpc3Rpbmcgb25lczogcmVjZWl2ZSB0aW1lCitzdGFtcHMgY2FuIGJlIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWQgZm9yIGFyYml0cmFyeSBwYWNrZXRzIGFuZCBtdWNoCitjbG9zZXIgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBwYWNrZXQgaXMgcmVhbGx5IHNlbnQuIFRpbWUgc3RhbXBzIGNhbgorYmUgZ2VuZXJhdGVkIGluIHNvZnR3YXJlIChhcyBiZWZvcmUpIG9yIGluIGhhcmR3YXJlIChpZiB0aGUgaGFyZHdhcmUKK2hhcyBzdWNoIGEgZmVhdHVyZSkuCisKK1NPX1RJTUVTVEFNUElORzoKKworSW5zdHJ1Y3RzIHRoZSBzb2NrZXQgbGF5ZXIgd2hpY2gga2luZCBvZiBpbmZvcm1hdGlvbiBpcyB3YW50ZWQuIFRoZQorcGFyYW1ldGVyIGlzIGFuIGludGVnZXIgd2l0aCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgYml0cyBzZXQuIFNldHRpbmcKK290aGVyIGJpdHMgaXMgYW4gZXJyb3IgYW5kIGRvZXNuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHN0YXRlLgorCitTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFOiAgdHJ5IHRvIG9idGFpbiBzZW5kIHRpbWUgc3RhbXAgaW4gaGFyZHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU6ICBpZiBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIGlzIG9mZiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxzLCB0aGVuIGRvIGl0IGluIHNvZnR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFOiAgcmV0dXJuIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCB0aW1lIHN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBoYXJkd2FyZQorU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRTogIGlmIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgaXMgb2ZmIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHMsIHRoZW4gZG8gaXQgaW4gc29mdHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOiByZXR1cm4gb3JpZ2luYWwgcmF3IGhhcmR3YXJlIHRpbWUgc3RhbXAKK1NPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFOiByZXR1cm4gaGFyZHdhcmUgdGltZSBzdGFtcCB0cmFuc2Zvcm1lZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeXN0ZW0gdGltZSBiYXNlCitTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOiAgICAgcmV0dXJuIHN5c3RlbSB0aW1lIHN0YW1wIGdlbmVyYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlCisKK1NPRl9USU1FU1RBTVBJTkdfVFgvUlggZGV0ZXJtaW5lIGhvdyB0aW1lIHN0YW1wcyBhcmUgZ2VuZXJhdGVkLgorU09GX1RJTUVTVEFNUElOR19SQVcvU1lTIGRldGVybWluZSBob3cgdGhleSBhcmUgcmVwb3J0ZWQgaW4gdGhlCitmb2xsb3dpbmcgY29udHJvbCBtZXNzYWdlOgorICAgIHN0cnVjdCBzY21fdGltZXN0YW1waW5nIHsKKyAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHN5c3RpbWU7CisgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBod3RpbWV0cmFuczsKKyAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGh3dGltZXJhdzsKKyAgICB9OworCityZWN2bXNnKCkgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoaXMgY29udHJvbCBtZXNzYWdlIGZvciByZWd1bGFyIGluY29taW5nCitwYWNrZXRzLiBGb3Igc2VuZCB0aW1lIHN0YW1wcyB0aGUgb3V0Z29pbmcgcGFja2V0IGlzIGxvb3BlZCBiYWNrIHRvCit0aGUgc29ja2V0J3MgZXJyb3IgcXVldWUgd2l0aCB0aGUgc2VuZCB0aW1lIHN0YW1wKHMpIGF0dGFjaGVkLiBJdCBjYW4KK2JlIHJlY2VpdmVkIHdpdGggcmVjdm1zZyhmbGFncz1NU0dfRVJSUVVFVUUpLiBUaGUgY2FsbCByZXR1cm5zIHRoZQorb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0IGRhdGEgaW5jbHVkaW5nIGFsbCBoZWFkZXJzIHByZXByZW5kZWQgZG93biB0bworYW5kIGluY2x1ZGluZyB0aGUgbGluayBsYXllciwgdGhlIHNjbV90aW1lc3RhbXBpbmcgY29udHJvbCBtZXNzYWdlIGFuZAorYSBzb2NrX2V4dGVuZGVkX2VyciBjb250cm9sIG1lc3NhZ2Ugd2l0aCBlZV9lcnJubz09RU5PTVNHIGFuZAorZWVfb3JpZ2luPT1TT19FRV9PUklHSU5fVElNRVNUQU1QSU5HLiBBIHNvY2tldCB3aXRoIHN1Y2ggYSBwZW5kaW5nCitib3VuY2VkIHBhY2tldCBpcyByZWFkeSBmb3IgcmVhZGluZyBhcyBmYXIgYXMgc2VsZWN0KCkgaXMgY29uY2VybmVkLgorSWYgdGhlIG91dGdvaW5nIHBhY2tldCBoYXMgdG8gYmUgZnJhZ21lbnRlZCwgdGhlbiBvbmx5IHRoZSBmaXJzdAorZnJhZ21lbnQgaXMgdGltZSBzdGFtcGVkIGFuZCByZXR1cm5lZCB0byB0aGUgc2VuZGluZyBzb2NrZXQuCisKK0FsbCB0aHJlZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBldmVudCBpbiB0aW1lLCBidXQgd2VyZQorZ2VuZXJhdGVkIGluIGRpZmZlcmVudCB3YXlzLiBFYWNoIG9mIHRoZXNlIHZhbHVlcyBtYXkgYmUgZW1wdHkgKD0gYWxsCit6ZXJvKSwgaW4gd2hpY2ggY2FzZSBubyBzdWNoIHZhbHVlIHdhcyBhdmFpbGFibGUuIElmIHRoZSBhcHBsaWNhdGlvbgoraXMgbm90IGludGVyZXN0ZWQgaW4gc29tZSBvZiB0aGVzZSB2YWx1ZXMsIHRoZXkgY2FuIGJlIGxlZnQgYmxhbmsgdG8KK2F2b2lkIHRoZSBwb3RlbnRpYWwgb3ZlcmhlYWQgb2YgY2FsY3VsYXRpbmcgdGhlbS4KKworc3lzdGltZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSB0aW1lIGF0IHRoYXQgbW9tZW50LiBUaGlzCitjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgYWxzbyByZXR1cm5lZCB2aWEgU09fVElNRVNUQU1QW05TXS4gSWYgdGhlCit0aW1lIHN0YW1wIHdhcyBnZW5lcmF0ZWQgYnkgaGFyZHdhcmUsIHRoZW4gdGhpcyBmaWVsZCBpcworZW1wdHkuIE90aGVyd2lzZSBpdCBpcyBmaWxsZWQgaW4gaWYgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSBpcworc2V0LgorCitod3RpbWVyYXcgaXMgdGhlIG9yaWdpbmFsIGhhcmR3YXJlIHRpbWUgc3RhbXAuIEZpbGxlZCBpbiBpZgorU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgaXMgc2V0LiBObyBhc3N1bXB0aW9ucyBhYm91dCBpdHMKK3JlbGF0aW9uIHRvIHN5c3RlbSB0aW1lIHNob3VsZCBiZSBtYWRlLgorCitod3RpbWV0cmFucyBpcyB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCB0cmFuc2Zvcm1lZCBzbyB0aGF0IGl0Citjb3JyZXNwb25kcyBhcyBnb29kIGFzIHBvc3NpYmxlIHRvIHN5c3RlbSB0aW1lLiBUaGlzIGNvcnJlbGF0aW9uIGlzCitub3QgcGVyZmVjdDsgYXMgYSBjb25zZXF1ZW5jZSwgc29ydGluZyBwYWNrZXRzIHJlY2VpdmVkIHZpYSBkaWZmZXJlbnQKK05JQ3MgYnkgdGhlaXIgaHd0aW1ldHJhbnMgbWF5IGRpZmZlciBmcm9tIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUKK3JlY2VpdmVkLiBod3RpbWV0cmFucyBtYXkgYmUgbm9uLW1vbm90b25pYyBldmVuIGZvciB0aGUgc2FtZSBOSUMuCitGaWxsZWQgaW4gaWYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgaXMgc2V0LiBSZXF1aXJlcyBzdXBwb3J0CitieSB0aGUgbmV0d29yayBkZXZpY2UgYW5kIHdpbGwgYmUgZW1wdHkgd2l0aG91dCB0aGF0IHN1cHBvcnQuCisKKworU0lPQ1NIV1RTVEFNUDoKKworSGFyZHdhcmUgdGltZSBzdGFtcGluZyBtdXN0IGFsc28gYmUgaW5pdGlhbGl6ZWQgZm9yIGVhY2ggZGV2aWNlIGRyaXZlcgordGhhdCBpcyBleHBlY3RlZCB0byBkbyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nLiBUaGUgcGFyYW1ldGVyIGlzOgorCitzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHsKKyAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAvKiBubyBmbGFncyBkZWZpbmVkIHJpZ2h0IG5vdywgbXVzdCBiZSB6ZXJvICovCisgICAgaW50IHR4X3R5cGU7ICAgICAgICAgLyogSFdUU1RBTVBfVFhfKiAqLworICAgIGludCByeF9maWx0ZXI7ICAgICAgIC8qIEhXVFNUQU1QX0ZJTFRFUl8qICovCit9OworCitEZXNpcmVkIGJlaGF2aW9yIGlzIHBhc3NlZCBpbnRvIHRoZSBrZXJuZWwgYW5kIHRvIGEgc3BlY2lmaWMgZGV2aWNlIGJ5CitjYWxsaW5nIGlvY3RsKFNJT0NTSFdUU1RBTVApIHdpdGggYSBwb2ludGVyIHRvIGEgc3RydWN0IGlmcmVxIHdob3NlCitpZnJfZGF0YSBwb2ludHMgdG8gYSBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnLiBUaGUgdHhfdHlwZSBhbmQKK3J4X2ZpbHRlciBhcmUgaGludHMgdG8gdGhlIGRyaXZlciB3aGF0IGl0IGlzIGV4cGVjdGVkIHRvIGRvLiBJZgordGhlIHJlcXVlc3RlZCBmaW5lLWdyYWluZWQgZmlsdGVyaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzIGlzIG5vdAorc3VwcG9ydGVkLCB0aGUgZHJpdmVyIG1heSB0aW1lIHN0YW1wIG1vcmUgdGhhbiBqdXN0IHRoZSByZXF1ZXN0ZWQgdHlwZXMKK29mIHBhY2tldHMuCisKK0EgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgc2hhbGwgdXBkYXRlIHRoZSBzdHJ1Y3QKK3dpdGggdGhlIGFjdHVhbCwgcG9zc2libHkgbW9yZSBwZXJtaXNzaXZlIGNvbmZpZ3VyYXRpb24uIElmIHRoZQorcmVxdWVzdGVkIHBhY2tldHMgY2Fubm90IGJlIHRpbWUgc3RhbXBlZCwgdGhlbiBub3RoaW5nIHNob3VsZCBiZQorY2hhbmdlZCBhbmQgRVJBTkdFIHNoYWxsIGJlIHJldHVybmVkIChpbiBjb250cmFzdCB0byBFSU5WQUwsIHdoaWNoCitpbmRpY2F0ZXMgdGhhdCBTSU9DU0hXVFNUQU1QIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsKS4KKworT25seSBhIHByb2Nlc3NlcyB3aXRoIGFkbWluIHJpZ2h0cyBtYXkgY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uLiBVc2VyCitzcGFjZSBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgZG9uJ3QgaW50ZXJmZXJlCit3aXRoIGVhY2ggb3RoZXIgYW5kIHRoYXQgdGhlIHNldHRpbmdzIGFyZSByZXNldC4KKworLyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctPnR4X3R5cGUgKi8KK2VudW0geworCS8qCisJICogbm8gb3V0Z29pbmcgcGFja2V0IHdpbGwgbmVlZCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nOworCSAqIHNob3VsZCBhIHBhY2tldCBhcnJpdmUgd2hpY2ggYXNrcyBmb3IgaXQsIG5vIGhhcmR3YXJlCisJICogdGltZSBzdGFtcGluZyB3aWxsIGJlIGRvbmUKKwkgKi8KKwlIV1RTVEFNUF9UWF9PRkYsCisKKwkvKgorCSAqIGVuYWJsZXMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBmb3Igb3V0Z29pbmcgcGFja2V0czsKKwkgKiB0aGUgc2VuZGVyIG9mIHRoZSBwYWNrZXQgZGVjaWRlcyB3aGljaCBhcmUgdG8gYmUKKwkgKiB0aW1lIHN0YW1wZWQgYnkgc2V0dGluZyBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFCisJICogYmVmb3JlIHNlbmRpbmcgdGhlIHBhY2tldAorCSAqLworCUhXVFNUQU1QX1RYX09OLAorfTsKKworLyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctPnJ4X2ZpbHRlciAqLworZW51bSB7CisJLyogdGltZSBzdGFtcCBubyBpbmNvbWluZyBwYWNrZXQgYXQgYWxsICovCisJSFdUU1RBTVBfRklMVEVSX05PTkUsCisKKwkvKiB0aW1lIHN0YW1wIGFueSBpbmNvbWluZyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfQUxMLAorCisgICAgICAgIC8qIHJldHVybiB2YWx1ZTogdGltZSBzdGFtcCBhbGwgcGFja2V0cyByZXF1ZXN0ZWQgcGx1cyBzb21lIG90aGVycyAqLworICAgICAgICBIV1RTVEFNUF9GSUxURVJfU09NRSwKKworCS8qIFBUUCB2MSwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5ULAorCisgICAgICAgIC4uLgorfTsKKworCitERVZJQ0UgSU1QTEVNRU5UQVRJT04KKworQSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBtdXN0IHN1cHBvcnQgdGhlCitTSU9DU0hXVFNUQU1QIGlvY3RsLiBUaW1lIHN0YW1wcyBmb3IgcmVjZWl2ZWQgcGFja2V0cyBtdXN0IGJlIHN0b3JlZAoraW4gdGhlIHNrYiB3aXRoIHNrYl9od3RzdGFtcF9zZXQoKS4KKworVGltZSBzdGFtcHMgZm9yIG91dGdvaW5nIHBhY2tldHMgYXJlIHRvIGJlIGdlbmVyYXRlZCBhcyBmb2xsb3dzOgorLSBJbiBoYXJkX3N0YXJ0X3htaXQoKSwgY2hlY2sgaWYgc2tiX2h3dHN0YW1wX2NoZWNrX3R4X2hhcmR3YXJlKCkKKyAgcmV0dXJucyBub24temVyby4gSWYgeWVzLCB0aGVuIHRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQKKyAgdG8gZG8gaGFyZHdhcmUgdGltZSBzdGFtcGluZy4KKy0gSWYgdGhpcyBpcyBwb3NzaWJsZSBmb3IgdGhlIHNrYiBhbmQgcmVxdWVzdGVkLCB0aGVuIGRlY2xhcmUKKyAgdGhhdCB0aGUgZHJpdmVyIGlzIGRvaW5nIHRoZSB0aW1lIHN0YW1waW5nIGJ5IGNhbGxpbmcKKyAgc2tiX2h3dHN0YW1wX3R4X2luX3Byb2dyZXNzKCkuIEEgZHJpdmVyIG5vdCBzdXBwb3J0aW5nCisgIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgZG9lc24ndCBkbyB0aGF0LiBBIGRyaXZlciBtdXN0IG5ldmVyCisgIHRvdWNoIHNrX2J1ZmY6OnRzdGFtcCEgSXQgaXMgdXNlZCB0byBzdG9yZSBob3cgdGltZSBzdGFtcGluZworICBmb3IgYW4gb3V0Z29pbmcgcGFja2V0cyBpcyB0byBiZSBkb25lLgorLSBBcyBzb29uIGFzIHRoZSBkcml2ZXIgaGFzIHNlbnQgdGhlIHBhY2tldCBhbmQvb3Igb2J0YWluZWQgYQorICBoYXJkd2FyZSB0aW1lIHN0YW1wIGZvciBpdCwgaXQgcGFzc2VzIHRoZSB0aW1lIHN0YW1wIGJhY2sgYnkKKyAgY2FsbGluZyBza2JfaHd0c3RhbXBfdHgoKSB3aXRoIHRoZSBvcmlnaW5hbCBza2IsIHRoZSByYXcKKyAgaGFyZHdhcmUgdGltZSBzdGFtcCBhbmQgYSBoYW5kbGUgdG8gdGhlIGRldmljZSAobmVjZXNzYXJ5CisgIHRvIGNvbnZlcnQgdGhlIGhhcmR3YXJlIHRpbWUgc3RhbXAgdG8gc3lzdGVtIHRpbWUpLiBJZiBvYnRhaW5pbmcKKyAgdGhlIGhhcmR3YXJlIHRpbWUgc3RhbXAgc29tZWhvdyBmYWlscywgdGhlbiB0aGUgZHJpdmVyIHNob3VsZAorICBub3QgZmFsbCBiYWNrIHRvIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcuIFRoZSByYXRpb25hbGUgaXMgdGhhdAorICB0aGlzIHdvdWxkIG9jY3VyIGF0IGEgbGF0ZXIgdGltZSBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZQorICB0aGFuIG90aGVyIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcgYW5kIHRoZXJlZm9yZSBjb3VsZCBsZWFkCisgIHRvIHVuZXhwZWN0ZWQgZGVsdGFzIGJldHdlZW4gdGltZSBzdGFtcHMuCistIElmIHRoZSBkcml2ZXIgZGlkIG5vdCBjYWxsIHNrYl9od3RzdGFtcF90eF9pbl9wcm9ncmVzcygpLCB0aGVuCisgIGRldl9oYXJkX3N0YXJ0X3htaXQoKSBjaGVja3Mgd2hldGhlciBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nCisgIGlzIHdhbnRlZCBhcyBmYWxsYmFjayBhbmQgcG90ZW50aWFsbHkgZ2VuZXJhdGVzIHRoZSB0aW1lIHN0YW1wLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTgxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAordGltZXN0YW1waW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE0ODlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK0NQUEZMQUdTID0gLUkuLi8uLi8uLi9pbmNsdWRlCisKK3RpbWVzdGFtcGluZzogdGltZXN0YW1waW5nLmMKKworY2xlYW46CisJcm0gLWYgdGltZXN0YW1waW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2QxNDMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBkZW1vbnN0cmF0ZXMgaG93IHRoZSB2YXJpb3VzIHRpbWUgc3RhbXBpbmcgZmVhdHVyZXMgaW4KKyAqIHRoZSBMaW51eCBrZXJuZWwgd29yay4gSXQgZW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIGEgUFRQCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBzdGFuZC1hbG9uZSBtYXN0ZXIgbW9kZSBieSBzZW5kaW5nIFBUUHYxIFN5bmMKKyAqIG11bHRpY2FzdHMgb25jZSBldmVyeSBzZWNvbmQuIEl0IGxvb2tzIGZvciBzaW1pbGFyIHBhY2tldHMsIGJ1dAorICogYmV5b25kIHRoYXQgZG9lc24ndCBhY3R1YWxseSBpbXBsZW1lbnQgUFRQLgorICoKKyAqIE91dGdvaW5nIHBhY2tldHMgYXJlIHRpbWUgc3RhbXBlZCB3aXRoIFNPX1RJTUVTVEFNUElORyB3aXRoIG9yCisgKiB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQuCisgKgorICogSW5jb21pbmcgcGFja2V0cyBhcmUgdGltZSBzdGFtcGVkIHdpdGggU09fVElNRVNUQU1QSU5HIHdpdGggb3IKKyAqIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydCwgU0lPQ0dTVEFNUFtOU10gKHBlci1zb2NrZXQgdGltZSBzdGFtcCkgYW5kCisgKiBTT19USU1FU1RBTVBbTlNdLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisKKyNpbmNsdWRlICJhc20vdHlwZXMuaCIKKyNpbmNsdWRlICJsaW51eC9uZXRfdHN0YW1wLmgiCisjaW5jbHVkZSAibGludXgvZXJycXVldWUuaCIKKworI2lmbmRlZiBTT19USU1FU1RBTVBJTkcKKyMgZGVmaW5lIFNPX1RJTUVTVEFNUElORyAgICAgICAgIDM3CisjIGRlZmluZSBTQ01fVElNRVNUQU1QSU5HICAgICAgICBTT19USU1FU1RBTVBJTkcKKyNlbmRpZgorCisjaWZuZGVmIFNPX1RJTUVTVEFNUE5TCisjIGRlZmluZSBTT19USU1FU1RBTVBOUyAzNQorI2VuZGlmCisKKyNpZm5kZWYgU0lPQ0dTVEFNUE5TCisjIGRlZmluZSBTSU9DR1NUQU1QTlMgMHg4OTA3CisjZW5kaWYKKworI2lmbmRlZiBTSU9DU0hXVFNUQU1QCisjIGRlZmluZSBTSU9DU0hXVFNUQU1QIDB4ODliMAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycm9yKQoreworCWlmIChlcnJvcikKKwkJcHJpbnRmKCJpbnZhbGlkIG9wdGlvbjogJXNcbiIsIGVycm9yKTsKKwlwcmludGYoInRpbWVzdGFtcGluZyBpbnRlcmZhY2Ugb3B0aW9uKlxuXG4iCisJICAgICAgICJPcHRpb25zOlxuIgorCSAgICAgICAiICBJUF9NVUxUSUNBU1RfTE9PUCAtIGxvb3Bpbmcgb3V0Z29pbmcgbXVsdGljYXN0c1xuIgorCSAgICAgICAiICBTT19USU1FU1RBTVAgLSBub3JtYWwgc29mdHdhcmUgdGltZSBzdGFtcGluZywgbXMgcmVzb2x1dGlvblxuIgorCSAgICAgICAiICBTT19USU1FU1RBTVBOUyAtIG1vcmUgYWNjdXJhdGUgc29mdHdhcmUgdGltZSBzdGFtcGluZ1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIC0gaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBvdXRnb2luZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgLSBzb2Z0d2FyZSBmYWxsYmFjayBmb3Igb3V0Z29pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIC0gaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBpbmNvbWluZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgLSBzb2Z0d2FyZSBmYWxsYmFjayBmb3IgaW5jb21pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIC0gcmVxdWVzdCByZXBvcnRpbmcgb2Ygc29mdHdhcmUgdGltZSBzdGFtcHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgLSByZXF1ZXN0IHJlcG9ydGluZyBvZiB0cmFuc2Zvcm1lZCBIVyB0aW1lIHN0YW1wc1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSAtIHJlcXVlc3QgcmVwb3J0aW5nIG9mIHJhdyBIVyB0aW1lIHN0YW1wc1xuIgorCSAgICAgICAiICBTSU9DR1NUQU1QIC0gY2hlY2sgbGFzdCBzb2NrZXQgdGltZSBzdGFtcFxuIgorCSAgICAgICAiICBTSU9DR1NUQU1QTlMgLSBtb3JlIGFjY3VyYXRlIHNvY2tldCB0aW1lIHN0YW1wXG4iKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBiYWlsKGNvbnN0IGNoYXIgKmVycm9yKQoreworCXByaW50ZigiJXM6ICVzXG4iLCBlcnJvciwgc3RyZXJyb3IoZXJybm8pKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzeW5jW10gPSB7CisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwKKwkweDVmLCAweDQ0LCAweDQ2LCAweDRjLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDEsCisKKwkvKiBmYWtlIHV1aWQgKi8KKwkweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisKKwkweDAwLCAweDAxLCAweDAwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDA1LCAweGNkLCAweDAxLAorCTB4MjksIDB4YjEsIDB4OGQsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAxLAorCisJLyogZmFrZSB1dWlkICovCisJMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDA0LCAweDA1LAorCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LAorCTB4NDQsIDB4NDYsIDB4NGMsIDB4NTQsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHg2MCwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHg2MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0NCwgMHg0NiwgMHg0YywgMHg1NCwKKwkweDAwLCAweDAxLAorCisJLyogZmFrZSB1dWlkICovCisJMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDA0LCAweDA1LAorCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIHZvaWQgc2VuZHBhY2tldChpbnQgc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcl9sZW4pCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCByZXM7CisKKwlyZXMgPSBzZW5kdG8oc29jaywgc3luYywgc2l6ZW9mKHN5bmMpLCAwLAorCQlhZGRyLCBhZGRyX2xlbik7CisJZ2V0dGltZW9mZGF5KCZub3csIDApOworCWlmIChyZXMgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgInNlbmQiLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpbnRmKCIlbGQuJTA2bGQ6IHNlbnQgJWQgYnl0ZXNcbiIsCisJCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkJICAgICAgIHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50cGFja2V0KHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJlcywKKwkJCWNoYXIgKmRhdGEsCisJCQlpbnQgc29jaywgaW50IHJlY3Ztc2dfZmxhZ3MsCisJCQlpbnQgc2lvY2dzdGFtcCwgaW50IHNpb2Nnc3RhbXBucykKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmZyb21fYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCXN0cnVjdCBjbXNnaGRyICpjbXNnOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisKKwlwcmludGYoIiVsZC4lMDZsZDogcmVjZWl2ZWQgJXMgZGF0YSwgJWQgYnl0ZXMgZnJvbSAlcywgJWQgYnl0ZXMgY29udHJvbCBtZXNzYWdlc1xuIiwKKwkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJICAgICAgIChyZWN2bXNnX2ZsYWdzICYgTVNHX0VSUlFVRVVFKSA/ICJlcnJvciIgOiAicmVndWxhciIsCisJICAgICAgIHJlcywKKwkgICAgICAgaW5ldF9udG9hKGZyb21fYWRkci0+c2luX2FkZHIpLAorCSAgICAgICBtc2ctPm1zZ19jb250cm9sbGVuKTsKKwlmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKG1zZyk7CisJICAgICBjbXNnOworCSAgICAgY21zZyA9IENNU0dfTlhUSERSKG1zZywgY21zZykpIHsKKwkJcHJpbnRmKCIgICBjbXNnIGxlbiAlZDogIiwgY21zZy0+Y21zZ19sZW4pOworCQlzd2l0Y2ggKGNtc2ctPmNtc2dfbGV2ZWwpIHsKKwkJY2FzZSBTT0xfU09DS0VUOgorCQkJcHJpbnRmKCJTT0xfU09DS0VUICIpOworCQkJc3dpdGNoIChjbXNnLT5jbXNnX3R5cGUpIHsKKwkJCWNhc2UgU09fVElNRVNUQU1QOiB7CisJCQkJc3RydWN0IHRpbWV2YWwgKnN0YW1wID0KKwkJCQkJKHN0cnVjdCB0aW1ldmFsICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiU09fVElNRVNUQU1QICVsZC4lMDZsZCIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl91c2VjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgU09fVElNRVNUQU1QTlM6IHsKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnN0YW1wID0KKwkJCQkJKHN0cnVjdCB0aW1lc3BlYyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIlNPX1RJTUVTVEFNUE5TICVsZC4lMDlsZCIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgU09fVElNRVNUQU1QSU5HOiB7CisJCQkJc3RydWN0IHRpbWVzcGVjICpzdGFtcCA9CisJCQkJCShzdHJ1Y3QgdGltZXNwZWMgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJTT19USU1FU1RBTVBJTkcgIik7CisJCQkJcHJpbnRmKCJTVyAlbGQuJTA5bGQgIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCXN0YW1wKys7CisJCQkJcHJpbnRmKCJIVyB0cmFuc2Zvcm1lZCAlbGQuJTA5bGQgIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCXN0YW1wKys7CisJCQkJcHJpbnRmKCJIVyByYXcgJWxkLiUwOWxkIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZGVmYXVsdDoKKwkJCQlwcmludGYoInR5cGUgJWQiLCBjbXNnLT5jbXNnX3R5cGUpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSVBQUk9UT19JUDoKKwkJCXByaW50ZigiSVBQUk9UT19JUCAiKTsKKwkJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCQljYXNlIElQX1JFQ1ZFUlI6IHsKKwkJCQlzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVyciA9CisJCQkJCShzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJJUF9SRUNWRVJSIGVlX2Vycm5vICclcycgZWVfb3JpZ2luICVkID0+ICVzIiwKKwkJCQkJc3RyZXJyb3IoZXJyLT5lZV9lcnJubyksCisJCQkJCWVyci0+ZWVfb3JpZ2luLAorI2lmZGVmIFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcKKwkJCQkJZXJyLT5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyA/CisJCQkJCSJib3VuY2VkIHBhY2tldCIgOiAidW5leHBlY3RlZCBvcmlnaW4iCisjZWxzZQorCQkJCQkicHJvYmFibHkgU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyIKKyNlbmRpZgorCQkJCQkpOworCQkJCWlmIChyZXMgPCBzaXplb2Yoc3luYykpCisJCQkJCXByaW50ZigiID0+IHRydW5jYXRlZCBkYXRhPyEiKTsKKwkJCQllbHNlIGlmICghbWVtY21wKHN5bmMsIGRhdGEgKyByZXMgLSBzaXplb2Yoc3luYyksCisJCQkJCQkJc2l6ZW9mKHN5bmMpKSkKKwkJCQkJcHJpbnRmKCIgPT4gR09UIE9VUiBEQVRBIEJBQ0sgKEhVUlJBWSEpIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIElQX1BLVElORk86IHsKKwkJCQlzdHJ1Y3QgaW5fcGt0aW5mbyAqcGt0aW5mbyA9CisJCQkJCShzdHJ1Y3QgaW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIklQX1BLVElORk8gaW50ZXJmYWNlIGluZGV4ICV1IiwKKwkJCQkJcGt0aW5mby0+aXBpX2lmaW5kZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJZGVmYXVsdDoKKwkJCQlwcmludGYoInR5cGUgJWQiLCBjbXNnLT5jbXNnX3R5cGUpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGYoImxldmVsICVkIHR5cGUgJWQiLAorCQkJCWNtc2ctPmNtc2dfbGV2ZWwsCisJCQkJY21zZy0+Y21zZ190eXBlKTsKKwkJCWJyZWFrOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlpZiAoc2lvY2dzdGFtcCkgeworCQlpZiAoaW9jdGwoc29jaywgU0lPQ0dTVEFNUCwgJnR2KSkKKwkJCXByaW50ZigiICAgJXM6ICVzXG4iLCAiU0lPQ0dTVEFNUCIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXByaW50ZigiU0lPQ0dTVEFNUCAlbGQuJTA2bGRcbiIsCisJCQkgICAgICAgKGxvbmcpdHYudHZfc2VjLAorCQkJICAgICAgIChsb25nKXR2LnR2X3VzZWMpOworCX0KKwlpZiAoc2lvY2dzdGFtcG5zKSB7CisJCWlmIChpb2N0bChzb2NrLCBTSU9DR1NUQU1QTlMsICZ0cykpCisJCQlwcmludGYoIiAgICVzOiAlc1xuIiwgIlNJT0NHU1RBTVBOUyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXByaW50ZigiU0lPQ0dTVEFNUE5TICVsZC4lMDlsZFxuIiwKKwkJCSAgICAgICAobG9uZyl0cy50dl9zZWMsCisJCQkgICAgICAgKGxvbmcpdHMudHZfbnNlYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWN2cGFja2V0KGludCBzb2NrLCBpbnQgcmVjdm1zZ19mbGFncywKKwkJICAgICAgIGludCBzaW9jZ3N0YW1wLCBpbnQgc2lvY2dzdGFtcG5zKQoreworCWNoYXIgZGF0YVsyNTZdOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBpb3ZlYyBlbnRyeTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gZnJvbV9hZGRyOworCXN0cnVjdCB7CisJCXN0cnVjdCBjbXNnaGRyIGNtOworCQljaGFyIGNvbnRyb2xbNTEyXTsKKwl9IGNvbnRyb2w7CisJaW50IHJlczsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJbXNnLm1zZ19pb3YgPSAmZW50cnk7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCWVudHJ5Lmlvdl9iYXNlID0gZGF0YTsKKwllbnRyeS5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpOworCW1zZy5tc2dfbmFtZSA9IChjYWRkcl90KSZmcm9tX2FkZHI7CisJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGZyb21fYWRkcik7CisJbXNnLm1zZ19jb250cm9sID0gJmNvbnRyb2w7CisJbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOworCisJcmVzID0gcmVjdm1zZyhzb2NrLCAmbXNnLCByZWN2bXNnX2ZsYWdzfE1TR19ET05UV0FJVCk7CisJaWYgKHJlcyA8IDApIHsKKwkJcHJpbnRmKCIlcyAlczogJXNcbiIsCisJCSAgICAgICAicmVjdm1zZyIsCisJCSAgICAgICAocmVjdm1zZ19mbGFncyAmIE1TR19FUlJRVUVVRSkgPyAiZXJyb3IiIDogInJlZ3VsYXIiLAorCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgeworCQlwcmludHBhY2tldCgmbXNnLCByZXMsIGRhdGEsCisJCQkgICAgc29jaywgcmVjdm1zZ19mbGFncywKKwkJCSAgICBzaW9jZ3N0YW1wLCBzaW9jZ3N0YW1wbnMpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBzb190aW1lc3RhbXBpbmdfZmxhZ3MgPSAwOworCWludCBzb190aW1lc3RhbXAgPSAwOworCWludCBzb190aW1lc3RhbXBucyA9IDA7CisJaW50IHNpb2Nnc3RhbXAgPSAwOworCWludCBzaW9jZ3N0YW1wbnMgPSAwOworCWludCBpcF9tdWx0aWNhc3RfbG9vcCA9IDA7CisJY2hhciAqaW50ZXJmYWNlOworCWludCBpOworCWludCBlbmFibGVkID0gMTsKKwlpbnQgc29jazsKKwlzdHJ1Y3QgaWZyZXEgZGV2aWNlOworCXN0cnVjdCBpZnJlcSBod3RzdGFtcDsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGh3Y29uZmlnLCBod2NvbmZpZ19yZXF1ZXN0ZWQ7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJc3RydWN0IGlwX21yZXEgaW1yOworCXN0cnVjdCBpbl9hZGRyIGlhZGRyOworCWludCB2YWw7CisJc29ja2xlbl90IGxlbjsKKwlzdHJ1Y3QgdGltZXZhbCBuZXh0OworCisJaWYgKGFyZ2MgPCAyKQorCQl1c2FnZSgwKTsKKwlpbnRlcmZhY2UgPSBhcmd2WzFdOworCisJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPX1RJTUVTVEFNUCIpKQorCQkJc29fdGltZXN0YW1wID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPX1RJTUVTVEFNUE5TIikpCisJCQlzb190aW1lc3RhbXBucyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTSU9DR1NUQU1QIikpCisJCQlzaW9jZ3N0YW1wID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNJT0NHU1RBTVBOUyIpKQorCQkJc2lvY2dzdGFtcG5zID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIklQX01VTFRJQ0FTVF9MT09QIikpCisJCQlpcF9tdWx0aWNhc3RfbG9vcCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7CisJCWVsc2UKKwkJCXVzYWdlKGFyZ3ZbaV0pOworCX0KKworCXNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworCWlmIChzb2NrZXQgPCAwKQorCQliYWlsKCJzb2NrZXQiKTsKKworCW1lbXNldCgmZGV2aWNlLCAwLCBzaXplb2YoZGV2aWNlKSk7CisJc3RybmNweShkZXZpY2UuaWZyX25hbWUsIGludGVyZmFjZSwgc2l6ZW9mKGRldmljZS5pZnJfbmFtZSkpOworCWlmIChpb2N0bChzb2NrLCBTSU9DR0lGQUREUiwgJmRldmljZSkgPCAwKQorCQliYWlsKCJnZXR0aW5nIGludGVyZmFjZSBJUCBhZGRyZXNzIik7CisKKwltZW1zZXQoJmh3dHN0YW1wLCAwLCBzaXplb2YoaHd0c3RhbXApKTsKKwlzdHJuY3B5KGh3dHN0YW1wLmlmcl9uYW1lLCBpbnRlcmZhY2UsIHNpemVvZihod3RzdGFtcC5pZnJfbmFtZSkpOworCWh3dHN0YW1wLmlmcl9kYXRhID0gKHZvaWQgKikmaHdjb25maWc7CisJbWVtc2V0KCZod2NvbmZpZywgMCwgc2l6ZW9mKCZod2NvbmZpZykpOworCWh3Y29uZmlnLnR4X3R5cGUgPQorCQkoc29fdGltZXN0YW1waW5nX2ZsYWdzICYgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSkgPworCQlIV1RTVEFNUF9UWF9PTiA6IEhXVFNUQU1QX1RYX09GRjsKKwlod2NvbmZpZy5yeF9maWx0ZXIgPQorCQkoc29fdGltZXN0YW1waW5nX2ZsYWdzICYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSkgPworCQlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkMgOiBIV1RTVEFNUF9GSUxURVJfTk9ORTsKKwlod2NvbmZpZ19yZXF1ZXN0ZWQgPSBod2NvbmZpZzsKKwlpZiAoaW9jdGwoc29jaywgU0lPQ1NIV1RTVEFNUCwgJmh3dHN0YW1wKSA8IDApIHsKKwkJaWYgKChlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFNVUCkgJiYKKwkJICAgIGh3Y29uZmlnX3JlcXVlc3RlZC50eF90eXBlID09IEhXVFNUQU1QX1RYX09GRiAmJgorCQkgICAgaHdjb25maWdfcmVxdWVzdGVkLnJ4X2ZpbHRlciA9PSBIV1RTVEFNUF9GSUxURVJfTk9ORSkKKwkJCXByaW50ZigiU0lPQ1NIV1RTVEFNUDogZGlzYWJsaW5nIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgbm90IHBvc3NpYmxlXG4iKTsKKwkJZWxzZQorCQkJYmFpbCgiU0lPQ1NIV1RTVEFNUCIpOworCX0KKwlwcmludGYoIlNJT0NTSFdUU1RBTVA6IHR4X3R5cGUgJWQgcmVxdWVzdGVkLCBnb3QgJWQ7IHJ4X2ZpbHRlciAlZCByZXF1ZXN0ZWQsIGdvdCAlZFxuIiwKKwkgICAgICAgaHdjb25maWdfcmVxdWVzdGVkLnR4X3R5cGUsIGh3Y29uZmlnLnR4X3R5cGUsCisJICAgICAgIGh3Y29uZmlnX3JlcXVlc3RlZC5yeF9maWx0ZXIsIGh3Y29uZmlnLnJ4X2ZpbHRlcik7CisKKwkvKiBiaW5kIHRvIFBUUCBwb3J0ICovCisJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworCWFkZHIuc2luX3BvcnQgPSBodG9ucygzMTkgLyogUFRQIGV2ZW50IHBvcnQgKi8pOworCWlmIChiaW5kKHNvY2ssCisJCSAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCisJCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKQorCQliYWlsKCJiaW5kIik7CisKKwkvKiBzZXQgbXVsdGljYXN0IGdyb3VwIGZvciBvdXRnb2luZyBwYWNrZXRzICovCisJaW5ldF9hdG9uKCIyMjQuMC4xLjEzMCIsICZpYWRkcik7IC8qIGFsdGVybmF0ZSBQVFAgZG9tYWluIDEgKi8KKwlhZGRyLnNpbl9hZGRyID0gaWFkZHI7CisJaW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gaWFkZHIuc19hZGRyOworCWltci5pbXJfaW50ZXJmYWNlLnNfYWRkciA9CisJCSgoc3RydWN0IHNvY2thZGRyX2luICopJmRldmljZS5pZnJfYWRkciktPnNpbl9hZGRyLnNfYWRkcjsKKwlpZiAoc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfSUYsCisJCSAgICAgICAmaW1yLmltcl9pbnRlcmZhY2Uuc19hZGRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSA8IDApCisJCWJhaWwoInNldCBtdWx0aWNhc3QiKTsKKworCS8qIGpvaW4gbXVsdGljYXN0IGdyb3VwLCBsb29wIG91ciBvd24gcGFja2V0ICovCisJaWYgKHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfQUREX01FTUJFUlNISVAsCisJCSAgICAgICAmaW1yLCBzaXplb2Yoc3RydWN0IGlwX21yZXEpKSA8IDApCisJCWJhaWwoImpvaW4gbXVsdGljYXN0IGdyb3VwIik7CisKKwlpZiAoc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfTE9PUCwKKwkJICAgICAgICZpcF9tdWx0aWNhc3RfbG9vcCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApIHsKKwkJYmFpbCgibG9vcCBtdWx0aWNhc3QiKTsKKwl9CisKKwkvKiBzZXQgc29ja2V0IG9wdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcgKi8KKwlpZiAoc29fdGltZXN0YW1wICYmCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QLAorCQkJICAgJmVuYWJsZWQsIHNpemVvZihlbmFibGVkKSkgPCAwKQorCQliYWlsKCJzZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUCIpOworCisJaWYgKHNvX3RpbWVzdGFtcG5zICYmCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QTlMsCisJCQkgICAmZW5hYmxlZCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApCisJCWJhaWwoInNldHNvY2tvcHQgU09fVElNRVNUQU1QTlMiKTsKKworCWlmIChzb190aW1lc3RhbXBpbmdfZmxhZ3MgJiYKKwkJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsCisJCQkgICAmc29fdGltZXN0YW1waW5nX2ZsYWdzLAorCQkJICAgc2l6ZW9mKHNvX3RpbWVzdGFtcGluZ19mbGFncykpIDwgMCkKKwkJYmFpbCgic2V0c29ja29wdCBTT19USU1FU1RBTVBJTkciKTsKKworCS8qIHJlcXVlc3QgSVBfUEtUSU5GTyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCisJaWYgKHNldHNvY2tvcHQoc29jaywgU09MX0lQLCBJUF9QS1RJTkZPLAorCQkgICAgICAgJmVuYWJsZWQsIHNpemVvZihlbmFibGVkKSkgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgInNldHNvY2tvcHQgSVBfUEtUSU5GTyIsIHN0cmVycm9yKGVycm5vKSk7CisKKwkvKiB2ZXJpZnkgc29ja2V0IG9wdGlvbnMgKi8KKwlsZW4gPSBzaXplb2YodmFsKTsKKwlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVAsICZ2YWwsICZsZW4pIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJnZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUCIsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQlwcmludGYoIlNPX1RJTUVTVEFNUCAlZFxuIiwgdmFsKTsKKworCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUE5TLCAmdmFsLCAmbGVuKSA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAiZ2V0c29ja29wdCBTT19USU1FU1RBTVBOUyIsCisJCSAgICAgICBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpbnRmKCJTT19USU1FU1RBTVBOUyAlZFxuIiwgdmFsKTsKKworCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUElORywgJnZhbCwgJmxlbikgPCAwKSB7CisJCXByaW50ZigiJXM6ICVzXG4iLCAiZ2V0c29ja29wdCBTT19USU1FU1RBTVBJTkciLAorCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlNPX1RJTUVTVEFNUElORyAlZFxuIiwgdmFsKTsKKwkJaWYgKHZhbCAhPSBzb190aW1lc3RhbXBpbmdfZmxhZ3MpCisJCQlwcmludGYoIiAgIG5vdCB0aGUgZXhwZWN0ZWQgdmFsdWUgJWRcbiIsCisJCQkgICAgICAgc29fdGltZXN0YW1waW5nX2ZsYWdzKTsKKwl9CisKKwkvKiBzZW5kIHBhY2tldHMgZm9yZXZlciBldmVyeSBmaXZlIHNlY29uZHMgKi8KKwlnZXR0aW1lb2ZkYXkoJm5leHQsIDApOworCW5leHQudHZfc2VjID0gKG5leHQudHZfc2VjICsgMSkgLyA1ICogNTsKKwluZXh0LnR2X3VzZWMgPSAwOworCXdoaWxlICgxKSB7CisJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJc3RydWN0IHRpbWV2YWwgZGVsdGE7CisJCWxvbmcgZGVsdGFfdXM7CisJCWludCByZXM7CisJCWZkX3NldCByZWFkZnMsIGVycm9yZnM7CisKKwkJZ2V0dGltZW9mZGF5KCZub3csIDApOworCQlkZWx0YV91cyA9IChsb25nKShuZXh0LnR2X3NlYyAtIG5vdy50dl9zZWMpICogMTAwMDAwMCArCisJCQkobG9uZykobmV4dC50dl91c2VjIC0gbm93LnR2X3VzZWMpOworCQlpZiAoZGVsdGFfdXMgPiAwKSB7CisJCQkvKiBjb250aW51ZSB3YWl0aW5nIGZvciB0aW1lb3V0IG9yIGRhdGEgKi8KKwkJCWRlbHRhLnR2X3NlYyA9IGRlbHRhX3VzIC8gMTAwMDAwMDsKKwkJCWRlbHRhLnR2X3VzZWMgPSBkZWx0YV91cyAlIDEwMDAwMDA7CisKKwkJCUZEX1pFUk8oJnJlYWRmcyk7CisJCQlGRF9aRVJPKCZlcnJvcmZzKTsKKwkJCUZEX1NFVChzb2NrLCAmcmVhZGZzKTsKKwkJCUZEX1NFVChzb2NrLCAmZXJyb3Jmcyk7CisJCQlwcmludGYoIiVsZC4lMDZsZDogc2VsZWN0ICVsZHVzXG4iLAorCQkJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCQkJICAgICAgIGRlbHRhX3VzKTsKKwkJCXJlcyA9IHNlbGVjdChzb2NrICsgMSwgJnJlYWRmcywgMCwgJmVycm9yZnMsICZkZWx0YSk7CisJCQlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisJCQlwcmludGYoIiVsZC4lMDZsZDogc2VsZWN0IHJldHVybmVkOiAlZCwgJXNcbiIsCisJCQkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJCQkgICAgICAgcmVzLAorCQkJICAgICAgIHJlcyA8IDAgPyBzdHJlcnJvcihlcnJubykgOiAic3VjY2VzcyIpOworCQkJaWYgKHJlcyA+IDApIHsKKwkJCQlpZiAoRkRfSVNTRVQoc29jaywgJnJlYWRmcykpCisJCQkJCXByaW50ZigicmVhZHkgZm9yIHJlYWRpbmdcbiIpOworCQkJCWlmIChGRF9JU1NFVChzb2NrLCAmZXJyb3JmcykpCisJCQkJCXByaW50ZigiaGFzIGVycm9yXG4iKTsKKwkJCQlyZWN2cGFja2V0KHNvY2ssIDAsCisJCQkJCSAgIHNpb2Nnc3RhbXAsCisJCQkJCSAgIHNpb2Nnc3RhbXBucyk7CisJCQkJcmVjdnBhY2tldChzb2NrLCBNU0dfRVJSUVVFVUUsCisJCQkJCSAgIHNpb2Nnc3RhbXAsCisJCQkJCSAgIHNpb2Nnc3RhbXBucyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSBvbmUgcGFja2V0ICovCisJCQlzZW5kcGFja2V0KHNvY2ssCisJCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkJCSAgIHNpemVvZihhZGRyKSk7CisJCQluZXh0LnR2X3NlYyArPSA1OworCQkJY29udGludWU7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKaW5kZXggN2ZhNGIyNy4uZWRiN2FlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKQEAgLTU2LDYgKzU2LDEyIEBACiAgICAgaGFyZHdhcmUuCiAgIC0gZnNsLG1hZ2ljLXBhY2tldCA6IElmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cwogICAgIHdha2luZyB1cCB2aWEgbWFnaWMgcGFja2V0LgorICAtIGJkLXN0YXNoIDogSWYgcHJlc2VudCwgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIHN0YXNoaW5nCisgICAgYnVmZmVyIGRlc2NyaXB0b3JzIGluIHRoZSBMMi4KKyAgLSByeC1zdGFzaC1sZW4gOiBEZW5vdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgYSByZWNlaXZlZCBidWZmZXIgdG8gc3Rhc2gKKyAgICBpbiB0aGUgTDIuCisgIC0gcngtc3Rhc2gtaWR4IDogRGVub3RlcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgZnJvbSB0aGUgcmVjZWl2ZWQKKyAgICBidWZmZXIgdG8gc3Rhc2ggaW4gdGhlIEwyLgogCiBFeGFtcGxlOgogCWV0aGVybmV0QDI0MDAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKaW5kZXggYWFiY2MzYS4uM2MwMGM5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKQEAgLTIsOCArMiw2IEBACiAJLSB0aGlzIGZpbGUuCiBzY2hlZC1hcmNoLnR4dAogCS0gQ1BVIFNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbiBoaW50cyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUuCi1zY2hlZC1jb2RpbmcudHh0Ci0JLSByZWZlcmVuY2UgZm9yIHZhcmlvdXMgc2NoZWR1bGVyLXJlbGF0ZWQgbWV0aG9kcyBpbiB0aGUgTygxKSBzY2hlZHVsZXIuCiBzY2hlZC1kZXNpZ24tQ0ZTLnR4dAogCS0gZ29hbHMsIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIENvbXBsZXRlIEZhaXIgU2NoZWR1bGVyLgogc2NoZWQtZG9tYWlucy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWNvZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQ4ZGI3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWNvZGluZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotICAgICBSZWZlcmVuY2UgZm9yIHZhcmlvdXMgc2NoZWR1bGVyLXJlbGF0ZWQgbWV0aG9kcyBpbiB0aGUgTygxKSBzY2hlZHVsZXIKLQkJUm9iZXJ0IExvdmUgPHJtbEB0ZWNoOS5uZXQ+LCBNb250YVZpc3RhIFNvZnR3YXJlCi0KLQotTm90ZSBtb3N0IG9mIHRoZXNlIG1ldGhvZHMgYXJlIGxvY2FsIHRvIGtlcm5lbC9zY2hlZC5jIC0gdGhpcyBpcyBieSBkZXNpZ24uCi1UaGUgc2NoZWR1bGVyIGlzIG1lYW50IHRvIGJlIHNlbGYtY29udGFpbmVkIGFuZCBhYnN0cmFjdGVkIGF3YXkuICBUaGlzIGRvY3VtZW50Ci1pcyBwcmltYXJpbHkgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxlciwgbm90IGludGVyZmFjaW5nIHRvIGl0LiAgU29tZSBvZgotdGhlIGRpc2N1c3NlZCBpbnRlcmZhY2VzLCBob3dldmVyLCBhcmUgZ2VuZXJhbCBwcm9jZXNzL3NjaGVkdWxpbmcgbWV0aG9kcy4KLVRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaC4KLQotCi1NYWluIFNjaGVkdWxpbmcgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBsb2FkX2JhbGFuY2UocnVucXVldWVfdCAqdGhpc19ycSwgaW50IGlkbGUpCi0JQXR0ZW1wdHMgdG8gcHVsbCB0YXNrcyBmcm9tIG9uZSBjcHUgdG8gYW5vdGhlciB0byBiYWxhbmNlIGNwdSB1c2FnZSwKLQlpZiBuZWVkZWQuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZXhwbGljaXRseSBpZiB0aGUgcnVucXVldWVzIGFyZQotCWltYmFsYW5jZWQgb3IgcGVyaW9kaWNhbGx5IGJ5IHRoZSB0aW1lciB0aWNrLiAgUHJpb3IgdG8gY2FsbGluZywKLQl0aGUgY3VycmVudCBydW5xdWV1ZSBtdXN0IGJlIGxvY2tlZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KLQotdm9pZCBzY2hlZHVsZSgpCi0JVGhlIG1haW4gc2NoZWR1bGluZyBmdW5jdGlvbi4gIFVwb24gcmV0dXJuLCB0aGUgaGlnaGVzdCBwcmlvcml0eQotCXByb2Nlc3Mgd2lsbCBiZSBhY3RpdmUuCi0KLQotTG9ja2luZwotLS0tLS0tLQotCi1FYWNoIHJ1bnF1ZXVlIGhhcyBpdHMgb3duIGxvY2ssIHJxLT5sb2NrLiAgV2hlbiBtdWx0aXBsZSBydW5xdWV1ZXMgbmVlZAotdG8gYmUgbG9ja2VkLCBsb2NrIGFjcXVpcmVzIG11c3QgYmUgb3JkZXJlZCBieSBhc2NlbmRpbmcgJnJ1bnF1ZXVlIHZhbHVlLgotCi1BIHNwZWNpZmljIHJ1bnF1ZXVlIGlzIGxvY2tlZCB2aWEKLQotCXRhc2tfcnFfbG9jayh0YXNrX3QgcGlkLCB1bnNpZ25lZCBsb25nICpmbGFncykKLQotd2hpY2ggZGlzYWJsZXMgcHJlZW1wdGlvbiwgZGlzYWJsZXMgaW50ZXJydXB0cywgYW5kIGxvY2tzIHRoZSBydW5xdWV1ZSBwaWQgaXMKLXJ1bm5pbmcgb24uICBMaWtld2lzZSwKLQotCXRhc2tfcnFfdW5sb2NrKHRhc2tfdCBwaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotCi11bmxvY2tzIHRoZSBydW5xdWV1ZSBwaWQgaXMgcnVubmluZyBvbiwgcmVzdG9yZXMgaW50ZXJydXB0cyB0byB0aGVpciBwcmV2aW91cwotc3RhdGUsIGFuZCByZWVuYWJsZXMgcHJlZW1wdGlvbi4KLQotVGhlIHJvdXRpbmVzCi0KLQlkb3VibGVfcnFfbG9jayhydW5xdWV1ZV90ICpycTEsIHJ1bnF1ZXVlX3QgKnJxMikKLQotYW5kCi0KLQlkb3VibGVfcnFfdW5sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQotCi1zYWZlbHkgbG9jayBhbmQgdW5sb2NrLCByZXNwZWN0aXZlbHksIHRoZSB0d28gc3BlY2lmaWVkIHJ1bnF1ZXVlcy4gIFRoZXkgZG8KLW5vdCwgaG93ZXZlciwgZGlzYWJsZSBhbmQgcmVzdG9yZSBpbnRlcnJ1cHRzLiAgVXNlcnMgYXJlIHJlcXVpcmVkIHRvIGRvIHNvCi1tYW51YWxseSBiZWZvcmUgYW5kIGFmdGVyIGNhbGxzLgotCi0KLVZhbHVlcwotLS0tLS0tCi0KLU1BWF9QUklPCi0JVGhlIG1heGltdW0gcHJpb3JpdHkgb2YgdGhlIHN5c3RlbSwgc3RvcmVkIGluIHRoZSB0YXNrIGFzIHRhc2stPnByaW8uCi0JTG93ZXIgcHJpb3JpdGllcyBhcmUgaGlnaGVyLiAgTm9ybWFsIChub24tUlQpIHByaW9yaXRpZXMgcmFuZ2UgZnJvbQotCU1BWF9SVF9QUklPIHRvIChNQVhfUFJJTyAtIDEpLgotTUFYX1JUX1BSSU8KLQlUaGUgbWF4aW11bSByZWFsLXRpbWUgcHJpb3JpdHkgb2YgdGhlIHN5c3RlbS4gIFZhbGlkIFJUIHByaW9yaXRpZXMKLQlyYW5nZSBmcm9tIDAgdG8gKE1BWF9SVF9QUklPIC0gMSkuCi1NQVhfVVNFUl9SVF9QUklPCi0JVGhlIG1heGltdW0gcmVhbC10aW1lIHByaW9yaXR5IHRoYXQgaXMgZXhwb3J0ZWQgdG8gdXNlci1zcGFjZS4gIFNob3VsZAotCWFsd2F5cyBiZSBlcXVhbCB0byBvciBsZXNzIHRoYW4gTUFYX1JUX1BSSU8uICBTZXR0aW5nIGl0IGxlc3MgYWxsb3dzCi0Ja2VybmVsIHRocmVhZHMgdG8gaGF2ZSBoaWdoZXIgcHJpb3JpdGllcyB0aGFuIGFueSB1c2VyLXNwYWNlIHRhc2suCi1NSU5fVElNRVNMSUNFCi1NQVhfVElNRVNMSUNFCi0JUmVzcGVjdGl2ZWx5LCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB0aW1lc2xpY2VzIChxdWFudGEpIG9mIGEgcHJvY2Vzcy4KLQotRGF0YQotLS0tLQotCi1zdHJ1Y3QgcnVucXVldWUKLQlUaGUgbWFpbiBwZXItQ1BVIHJ1bnF1ZXVlIGRhdGEgc3RydWN0dXJlLgotc3RydWN0IHRhc2tfc3RydWN0Ci0JVGhlIG1haW4gcGVyLXByb2Nlc3MgZGF0YSBzdHJ1Y3R1cmUuCi0KLQotR2VuZXJhbCBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0KLQotY3B1X3JxKGNwdSkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSBvZiB0aGUgc3BlY2lmaWVkIGNwdS4KLXRoaXNfcnEoKQotCVJldHVybnMgdGhlIHJ1bnF1ZXVlIG9mIHRoZSBjdXJyZW50IGNwdS4KLXRhc2tfcnEocGlkKQotCVJldHVybnMgdGhlIHJ1bnF1ZXVlIHdoaWNoIGhvbGRzIHRoZSBzcGVjaWZpZWQgcGlkLgotY3B1X2N1cnIoY3B1KQotCVJldHVybnMgdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGdpdmVuIGNwdS4KLXJ0X3Rhc2socGlkKQotCVJldHVybnMgdHJ1ZSBpZiBwaWQgaXMgcmVhbC10aW1lLCBmYWxzZSBpZiBub3QuCi0KLQotUHJvY2VzcyBDb250cm9sIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgc2V0X3VzZXJfbmljZSh0YXNrX3QgKnAsIGxvbmcgbmljZSkKLQlTZXRzIHRoZSAibmljZSIgdmFsdWUgb2YgdGFzayBwIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLWludCBzZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQotCVNldHMgdGhlIHNjaGVkdWxpbmcgcG9saWN5IGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gcGlkLgotaW50IHNldF9jcHVzX2FsbG93ZWQodGFza190ICpwLCB1bnNpZ25lZCBsb25nIG5ld19tYXNrKQotCVNldHMgYSBnaXZlbiB0YXNrJ3MgQ1BVIGFmZmluaXR5IGFuZCBtaWdyYXRlcyBpdCB0byBhIHByb3BlciBjcHUuCi0JQ2FsbGVycyBtdXN0IGhhdmUgYSB2YWxpZCByZWZlcmVuY2UgdG8gdGhlIHRhc2sgYW5kIGFzc3VyZSB0aGUKLQl0YXNrIG5vdCBleGl0IHByZW1hdHVyZWx5LiAgTm8gbG9ja3MgY2FuIGJlIGhlbGQgZHVyaW5nIHRoZSBjYWxsLgotc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkKLQlTZXRzIHRoZSBnaXZlbiB0YXNrJ3Mgc3RhdGUgdG8gdGhlIGdpdmVuIHZhbHVlLgotc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCi0JU2V0cyB0aGUgY3VycmVudCB0YXNrJ3Mgc3RhdGUgdG8gdGhlIGdpdmVuIHZhbHVlLgotdm9pZCBzZXRfdHNrX25lZWRfcmVzY2hlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLQlTZXRzIG5lZWRfcmVzY2hlZCBpbiB0aGUgZ2l2ZW4gdGFzay4KLXZvaWQgY2xlYXJfdHNrX25lZWRfcmVzY2hlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLQlDbGVhcnMgbmVlZF9yZXNjaGVkIGluIHRoZSBnaXZlbiB0YXNrLgotdm9pZCBzZXRfbmVlZF9yZXNjaGVkKCkKLQlTZXRzIG5lZWRfcmVzY2hlZCBpbiB0aGUgY3VycmVudCB0YXNrLgotdm9pZCBjbGVhcl9uZWVkX3Jlc2NoZWQoKQotCUNsZWFycyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGN1cnJlbnQgdGFzay4KLWludCBuZWVkX3Jlc2NoZWQoKQotCVJldHVybnMgdHJ1ZSBpZiBuZWVkX3Jlc2NoZWQgaXMgc2V0IGluIHRoZSBjdXJyZW50IHRhc2ssIGZhbHNlCi0Jb3RoZXJ3aXNlLgoteWllbGQoKQotCVBsYWNlIHRoZSBjdXJyZW50IHByb2Nlc3MgYXQgdGhlIGVuZCBvZiB0aGUgcnVucXVldWUgYW5kIGNhbGwgc2NoZWR1bGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvb3NkLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9vc2QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMTYyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvb3NkLnR4dApAQCAtMCwwICsxLDE5OCBAQAorVGhlIE9TRCBTdGFuZGFyZAorPT09PT09PT09PT09PT09PQorT1NEIChPYmplY3QtQmFzZWQgU3RvcmFnZSBEZXZpY2UpIGlzIGEgVDEwIFNDU0kgY29tbWFuZCBzZXQgdGhhdCBpcyBkZXNpZ25lZAordG8gcHJvdmlkZSBlZmZpY2llbnQgb3BlcmF0aW9uIG9mIGlucHV0L291dHB1dCBsb2dpY2FsIHVuaXRzIHRoYXQgbWFuYWdlIHRoZQorYWxsb2NhdGlvbiwgcGxhY2VtZW50LCBhbmQgYWNjZXNzaW5nIG9mIHZhcmlhYmxlLXNpemUgZGF0YS1zdG9yYWdlIGNvbnRhaW5lcnMsCitjYWxsZWQgb2JqZWN0cy4gT2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gY29udGFpbiBvcGVyYXRpbmcgc3lzdGVtIGFuZCBhcHBsaWNhdGlvbgorY29uc3RydWN0cy4gRWFjaCBvYmplY3QgaGFzIGFzc29jaWF0ZWQgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBpdCwgd2hpY2ggYXJlCitpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBvYmplY3QgYW5kIHByb3ZpZGUgbWV0YWRhdGEgYWJvdXQgdGhlIG9iamVjdC4gVGhlIHN0YW5kYXJkCitkZWZpbmVzIHNvbWUgY29tbW9uIG9ibGlnYXRvcnkgYXR0cmlidXRlcywgYnV0IHVzZXIgYXR0cmlidXRlcyBjYW4gYmUgYWRkZWQgYXMKK25lZWRlZC4KKworU2VlOiBodHRwOi8vd3d3LnQxMC5vcmcvZnRwL3QxMC9kcmFmdHMvb3NkMi8gZm9yIHRoZSBsYXRlc3QgZHJhZnQgZm9yIE9TRCAyCitvciBzZWFyY2ggdGhlIHdlYiBmb3IgIk9TRCBTQ1NJIgorCitPU0QgaW4gdGhlIExpbnV4IEtlcm5lbAorPT09PT09PT09PT09PT09PT09PT09PT0KK29zZC1pbml0aWF0b3I6CisgIFRoZSBtYWluIGNvbXBvbmVudCBvZiBPU0QgaW4gS2VybmVsIGlzIHRoZSBvc2QtaW5pdGlhdG9yIGxpYnJhcnkuIEl0cyBtYWluCit1c2VyIGlzIGludGVuZGVkIHRvIGJlIHRoZSBwTkZTLW92ZXItb2JqZWN0cyBsYXlvdXQgZHJpdmVyLCB3aGljaCB1c2VzIG9iamVjdHMKK2FzIGl0cyBiYWNrLWVuZCBkYXRhIHN0b3JhZ2UuIE90aGVyIGNsaWVudHMgYXJlIHRoZSBvdGhlciBvc2QgcGFydHMgbGlzdGVkIGJlbG93LgorCitvc2QtdWxkOgorICBUaGlzIGlzIGEgU0NTSSBVTEQgdGhhdCByZWdpc3RlcnMgZm9yIE9TRCB0eXBlIGRldmljZXMgYW5kIHByb3ZpZGVzIGEgdGVzdGluZworcGxhdGZvcm0sIGJvdGggZm9yIHRoZSBpbi1rZXJuZWwgaW5pdGlhdG9yIGFzIHdlbGwgYXMgY29ubmVjdGVkIHRhcmdldHMuIEl0CitjdXJyZW50bHkgaGFzIG5vIHVzZWZ1bCB1c2VyLW1vZGUgQVBJLCB0aG91Z2ggaXQgY291bGQgaGF2ZSBpZiBuZWVkIGJlLgorCitleG9mczoKKyAgSXMgYW4gT1NEIGJhc2VkIExpbnV4IGZpbGUgc3lzdGVtLiBJdCB1c2VzIHRoZSBvc2QtaW5pdGlhdG9yIGFuZCBvc2QtdWxkLAordG8gZXhwb3J0IGEgdXNhYmxlIGZpbGUgc3lzdGVtIGZvciB1c2Vycy4KK1NlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4b2ZzLnR4dCBmb3IgbW9yZSBkZXRhaWxzCisKK29zZCB0YXJnZXQ6CisgIFRoZXJlIGFyZSBubyBjdXJyZW50IHBsYW5zIGZvciBhbiBPU0QgdGFyZ2V0IGltcGxlbWVudGF0aW9uIGluIGtlcm5lbC4gRm9yIGFsbAorbmVlZHMsIGEgdXNlci1tb2RlIHRhcmdldCB0aGF0IGlzIGJhc2VkIG9uIHRoZSBzY3NpIHRndCB0YXJnZXQgZnJhbWV3b3JrIGlzCithdmFpbGFibGUgZnJvbSBPaGlvIFN1cGVyY29tcHV0ZXIgQ2VudGVyIChPU0MpIGF0OgoraHR0cDovL3d3dy5vcGVuLW9zZC5vcmcvYmluL3ZpZXcvTWFpbi9Pc2NPc2RQcm9qZWN0CitUaGVyZSBhcmUgc2V2ZXJhbCBvdGhlciB0YXJnZXQgaW1wbGVtZW50YXRpb25zLiBTZWUgaHR0cDovL29wZW4tb3NkLm9yZyBmb3IgbW9yZQorbGlua3MuCisKK0ZpbGVzIGFuZCBGb2xkZXJzCis9PT09PT09PT09PT09PT09PQorVGhpcyBpcyB0aGUgY29tcGxldGUgbGlzdCBvZiBmaWxlcyBpbmNsdWRlZCBpbiB0aGlzIHdvcms6CitpbmNsdWRlL3Njc2kvCisJb3NkX2luaXRpYXRvci5oICAgTWFpbiBBUEkgZm9yIHRoZSBpbml0aWF0b3IgbGlicmFyeQorCW9zZF90eXBlcy5oCSAgQ29tbW9uIE9TRCB0eXBlcworCW9zZF9zZWMuaAkgIFNlY3VyaXR5IE1hbmFnZXIgQVBJCisJb3NkX3Byb3RvY29sLmgJICBXaXJlIGRlZmluaXRpb25zIG9mIHRoZSBPU0Qgc3RhbmRhcmQgcHJvdG9jb2wKKwlvc2RfYXR0cmlidXRlcy5oICBXaXJlIGRlZmluaXRpb25zIG9mIE9TRCBhdHRyaWJ1dGVzCisKK2RyaXZlcnMvc2NzaS9vc2QvCisJb3NkX2luaXRpYXRvci5jICAgT1NELUluaXRpYXRvciBsaWJyYXJ5IGltcGxlbWVudGF0aW9uCisJb3NkX3VsZC5jCSAgVGhlIE9TRCBzY3NpIFVMRAorCW9zZF9rdGVzdC57aCxjfQkgIEluLWtlcm5lbCB0ZXN0IHN1aXRlIChjYWxsZWQgYnkgb3NkX3VsZCkKKwlvc2RfZGVidWcuaAkgIFNvbWUgcHJpbnRrIG1hY3JvcworCU1ha2VmaWxlCSAgRm9yIGJvdGggaW4tdHJlZSBhbmQgb3V0LW9mLXRyZWUgY29tcGlsYXRpb24KKwlLY29uZmlnCQkgIEVuYWJsZXMgaW5jbHVzaW9uIG9mIHRoZSBkaWZmZXJlbnQgcGllY2VzCisJb3NkX3Rlc3QuYwkgIFVzZXItbW9kZSBhcHBsaWNhdGlvbiB0byBjYWxsIHRoZSBrZXJuZWwgdGVzdHMKKworVGhlIE9TRC1Jbml0aWF0b3IgTGlicmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PQorb3NkX2luaXRpYXRvciBpcyBhIGxvdyBsZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhbiBvc2QgaW5pdGlhdG9yIGVuY29kZXIuCitCdXQgZXZlbiB0aG91Z2gsIGl0IHNob3VsZCBiZSBpbnR1aXRpdmUgYW5kIGVhc3kgdG8gdXNlLiBQZXJoYXBzIG92ZXIgdGltZSBhbgoraGlnaGVyIGxldmVyIHdpbGwgZm9ybSB0aGF0IGF1dG9tYXRlcyBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiByZWNpcGVzLgorCitpbml0L2Zpbmk6CistIG9zZF9kZXZfaW5pdCgpIGFzc29jaWF0ZXMgYSBzY3NpX2RldmljZSB3aXRoIGFuIG9zZF9kZXYgc3RydWN0dXJlCisgIGFuZCBpbml0aWFsaXplcyBzb21lIGdsb2JhbCBwb29scy4gVGhpcyBzaG91bGQgYmUgZG9uZSBvbmNlIHBlciBzY3NpX2RldmljZQorICAoT1NEIExVTikuIFRoZSBvc2RfZGV2IHN0cnVjdHVyZSBpcyBuZWVkZWQgZm9yIGNhbGxpbmcgb3NkX3N0YXJ0X3JlcXVlc3QoKS4KKworLSBvc2RfZGV2X2ZpbmkoKSBjbGVhbnMgdXAgYmVmb3JlIGEgb3NkX2Rldi9zY3NpX2RldmljZSBkZXN0cnVjdGlvbi4KKworT1NEIGNvbW1hbmRzIGVuY29kaW5nLCBleGVjdXRpb24sIGFuZCBkZWNvZGluZyBvZiByZXN1bHRzOgorCitzdHJ1Y3Qgb3NkX3JlcXVlc3QncyBpcyB1c2VkIHRvIGl0ZXJhdGl2ZWx5IGVuY29kZSBhbiBPU0QgY29tbWFuZCBhbmQgY2FycnkKK2l0cyBzdGF0ZSB0aHJvdWdob3V0IGV4ZWN1dGlvbi4gRWFjaCByZXF1ZXN0IGdvZXMgdGhyb3VnaCB0aGVzZSBzdGFnZXM6CisKK2EuIG9zZF9zdGFydF9yZXF1ZXN0KCkgYWxsb2NhdGVzIHRoZSByZXF1ZXN0LgorCitiLiBBbnkgb2YgdGhlIG9zZF9yZXFfKiBtZXRob2RzIGlzIHVzZWQgdG8gZW5jb2RlIGEgcmVxdWVzdCBvZiB0aGUgc3BlY2lmaWVkCisgICB0eXBlLgorCitjLiBvc2RfcmVxX2FkZF97Z2V0LHNldH1fYXR0cl8qIG1heSBiZSBjYWxsZWQgdG8gYWRkIGdldC9zZXQgYXR0cmlidXRlcyB0byB0aGUKKyAgIENEQi4gIkxpc3QiIG9yICJQYWdlIiBtb2RlIGNhbiBiZSB1c2VkIGV4Y2x1c2l2ZWx5LiBUaGUgYXR0cmlidXRlLWxpc3QgQVBJCisgICBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIHJlcXVlc3QuIEhvd2V2ZXIsIG9ubHkgb25lCisgICBhdHRyaWJ1dGUtcGFnZSBjYW4gYmUgcmVhZCwgYXMgbWFuZGF0ZWQgYnkgdGhlIE9TRCBzdGFuZGFyZC4KKworZC4gb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSBjb21wdXRlcyBvZmZzZXRzIGludG8gdGhlIGRhdGEtaW4gYW5kIGRhdGEtb3V0IGJ1ZmZlcnMKKyAgIGFuZCBzaWducyB0aGUgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0eSBrZXkgYW5kIGludGVncml0eS0KKyAgIGNoZWNrIHBhcmFtZXRlcnMuCisKK2UuIG9zZF9leGVjdXRlX3JlcXVlc3QoKSBtYXkgYmUgY2FsbGVkIHRvIGV4ZWN1dGUgdGhlIHJlcXVlc3QgdmlhIHRoZSBibG9jaworICAgbGF5ZXIgYW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uLiAgVGhlIHJlcXVlc3QgY2FuIGJlIGV4ZWN1dGVkCisgICBhc3luY2hyb25vdXNseSBieSBjYWxsaW5nIHRoZSBibG9jayBsYXllciBBUEkgZGlyZWN0bHkuCisKK2YuIEFmdGVyIGV4ZWN1dGlvbiwgb3NkX3JlcV9kZWNvZGVfc2Vuc2UoKSBjYW4gYmUgY2FsbGVkIHRvIGRlY29kZSB0aGUgcmVxdWVzdCdzCisgICBzZW5zZSBpbmZvcm1hdGlvbi4KKworZy4gb3NkX3JlcV9kZWNvZGVfZ2V0X2F0dHIoKSBtYXkgYmUgY2FsbGVkIHRvIHJldHJpZXZlIG9zZF9hZGRfZ2V0X2F0dHJfbGlzdCgpCisgICB2YWx1ZXMuCisKK2guIG9zZF9lbmRfcmVxdWVzdCgpIG11c3QgYmUgY2FsbGVkIHRvIGRlYWxsb2NhdGUgdGhlIHJlcXVlc3QgYW5kIGFueSByZXNvdXJjZQorICAgYXNzb2NpYXRlZCB3aXRoIGl0LiBOb3RlIHRoYXQgb3NkX2VuZF9yZXF1ZXN0IGNsZWFucyB1cCB0aGUgcmVxdWVzdCBhdCBhbnkKKyAgIHN0YWdlIGFuZCBpdCBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9zZF9zdGFydF9yZXF1ZXN0KCkuCisKK29zZF9yZXF1ZXN0J3Mgc3RydWN0dXJlOgorCitUaGUgT1NEIHN0YW5kYXJkIGRlZmluZXMgYSBjb21wbGV4IHN0cnVjdHVyZSBvZiBJTyBzZWdtZW50cyBwb2ludGVkIHRvIGJ5CittZW1iZXJzIGluIHRoZSBDREIuIFVwIHRvIDMgc2VnbWVudHMgY2FuIGJlIGRlcGxveWVkIGluIHRoZSBJTi1CdWZmZXIgYW5kIHVwIHRvCis0IGluIHRoZSBPVVQtQnVmZmVyLiBUaGUgQVNDSUkgaWxsdXN0cmF0aW9uIGJlbG93IGRlcGljdHMgYSBzZWN1cmUtcmVhZCB3aXRoCithc3NvY2lhdGVkIGdldCtzZXQgb2YgYXR0cmlidXRlcy1saXN0cy4gT3RoZXIgY29tYmluYXRpb25zIHZlcnkgb24gdGhlIHNhbWUKK2Jhc2ljIHRoZW1lLiBGcm9tIG5vLXNlZ21lbnRzLXVzZWQgdXAgdG8gYWxsLXNlZ21lbnRzLXVzZWQuCisKK3xfX19fX19fX09TRC1DREJfX19fX19fX19ffAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8cmVhZF9sZW4gKG9mZnNldD0wKSAgICAgLXwtLS0tLS0tLS1cCit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8Cit8Z2V0X2F0dHJzX2xpc3RfbGVuZ3RoICAgIHwgICAgICAgICB8Cit8Z2V0X2F0dHJzX2xpc3Rfb2Zmc2V0ICAgLXwtLS0tXCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICB8Cit8cmV0cmlldmVkX2F0dHJzX2FsbG9jX2xlbnwgICAgfCAgICB8Cit8cmV0cmlldmVkX2F0dHJzX29mZnNldCAgLXwtLS0tfC0tLS18LVwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgIHwgfAorfHNldF9hdHRyc19saXN0X2xlbmd0aCAgICB8ICAgIHwgICAgfCB8Cit8c2V0X2F0dHJzX2xpc3Rfb2Zmc2V0ICAgLXwtXCAgfCAgICB8IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8ICAgIHwgfAorfGluX2RhdGFfaW50ZWdfb2Zmc2V0ICAgIC18LXwtLXwtLS0tfC18LVwKK3xvdXRfZGF0YV9pbnRlZ19vZmZzZXQgICAtfC18LS18LS1cIHwgfCB8CitcX19fX19fX19fX19fX19fX19fX19fX19fXy8gfCAgfCAgfCB8IHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgfCB8IHwKK3xfX19fX19fT1VULUJVRkZFUl9fX19fX19ffCB8ICB8ICB8IHwgfCB8Cit8ICAgICAgU2V0IGF0dHIgbGlzdCAgICAgIHw8LyAgfCAgfCB8IHwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgIHwgfCB8IHwKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICB8ICB8IHwgfCB8Cit8ICAgR2V0IGF0dHIgZGVzY3JpcHRvcnMgIHw8LS0tLyAgfCB8IHwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgfCB8IHwKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICB8IHwgfCB8Cit8ICAgIE91dC1kYXRhIGludGVncml0eSAgIHw8LS0tLS0tLyB8IHwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCB8IHwKK1xfX19fX19fX19fX19fX19fX19fX19fX19fLyAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfAorfF9fX19fX19fSU4tQlVGRkVSX19fX19fX198ICAgICAgICAgfCB8IHwKK3wgICAgICBJbi1EYXRhIHJlYWQgICAgICAgfDwtLS0tLS0tLS8gfCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICB8IHwKK3wgICAgICBHZXQgYXR0ciBsaXN0ICAgICAgfDwtLS0tLS0tLS0tLyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgSW4tZGF0YSBpbnRlZ3JpdHkgICAgfDwtLS0tLS0tLS0tLS0vCit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1xfX19fX19fX19fX19fX19fX19fX19fX19fLworCitBIGJsb2NrIGRldmljZSByZXF1ZXN0IGNhbiBjYXJyeSBiaWRpcmVjdGlvbmFsIHBheWxvYWQgYnkgbWVhbnMgb2YgYXNzb2NpYXRpbmcKK2EgYmlkaV9yZWFkIHJlcXVlc3Qgd2l0aCBhIG1haW4gd3JpdGUtcmVxdWVzdC4gRWFjaCBpbi9vdXQgcmVxdWVzdCBpcyBkZXNjcmliZWQKK2J5IGEgY2hhaW4gb2YgQklPcyBhc3NvY2lhdGVkIHdpdGggZWFjaCByZXF1ZXN0LgorVGhlIENEQiBpcyBvZiBhIFNDU0kgVkFSTEVOIENEQiBmb3JtYXQsIGFzIGRlc2NyaWJlZCBieSBPU0Qgc3RhbmRhcmQuCitUaGUgT1NEIHN0YW5kYXJkIGFsc28gbWFuZGF0ZXMgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBhdCBzdGFydCBvZiBlYWNoIHNlZ21lbnQuCisKK0luIHRoZSBjb2RlLCBpbiBzdHJ1Y3Qgb3NkX3JlcXVlc3QsIHRoZXJlIGFyZSB0d28gX29zZF9pb19pbmZvIHN0cnVjdHVyZXMgdG8KK2Rlc2NyaWJlIHRoZSBJTi9PVVQgYnVmZmVycyBhYm92ZSwgdHdvIEJJT3MgZm9yIHRoZSBkYXRhIHBheWxvYWQgYW5kIHVwIHRvIGZpdmUKK19vc2RfcmVxX2RhdGFfc2VnbWVudCBzdHJ1Y3R1cmVzIHRvIGhvbGQgdGhlIGRpZmZlcmVudCBzZWdtZW50cyBhbGxvY2F0aW9uIGFuZAoraW5mb3JtYXRpb24uCisKK0ltcG9ydGFudDogV2UgaGF2ZSBjaG9zZW4gdG8gZGlzcmVnYXJkIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBCSU8tY2hhaW4gKGFuZAordGhlIHJlc3VsdGluZyBzZy1saXN0KSBkZXNjcmliZXMgYSBsaW5lYXIgbWVtb3J5IGJ1ZmZlci4gTWVhbmluZyBvbmx5IGZpcnN0IGFuZAorbGFzdCBzY2F0dGVyIGNoYWluIGNhbiBiZSBpbmNvbXBsZXRlIGFuZCBhbGwgdGhlIG1pZGRsZSBjaGFpbnMgYXJlIG9mIFBBR0VfU0laRS4KK0ZvciB1cywgYSBzY2F0dGVyLWdhdGhlci1saXN0LCBhcyBpdHMgbmFtZSBpbXBsaWVzIGFuZCBhcyB1c2VkIGJ5IHRoZSBOZXR3b3JraW5nCitsYXllciwgaXMgdG8gZGVzY3JpYmUgYSB2ZWN0b3Igb2YgYnVmZmVycyB0aGF0IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8vZnJvbSB0aGUKK3dpcmUuIEl0IHdvcmtzIHZlcnkgd2VsbCB3aXRoIGN1cnJlbnQgaVNDU0kgdHJhbnNwb3J0LiBpU0NTSSBpcyBjdXJyZW50bHkgdGhlCitvbmx5IGRlcGxveWVkIE9TRCB0cmFuc3BvcnQuIEluIHRoZSBmdXR1cmUgd2UgYW50aWNpcGF0ZSBTQVMgYW5kIEZDIGF0dGFjaGVkIE9TRAorZGV2aWNlcyBhcyB3ZWxsLgorCitUaGUgT1NEIFRlc3RpbmcgVUxECis9PT09PT09PT09PT09PT09PT09CitUT0RPOiBNb3JlIHVzZXItbW9kZSBjb250cm9sIG9uIHRlc3RzLgorCitBdXRob3JzLCBNYWlsaW5nIGxpc3QKKz09PT09PT09PT09PT09PT09PT09PQorUGxlYXNlIGNvbW11bmljYXRlIHdpdGggdXMgb24gYW55IGRlcGxveW1lbnQgb2Ygb3NkLCB3aGV0aGVyIHVzaW5nIHRoaXMgY29kZQorb3Igbm90LgorCitBbnkgcHJvYmxlbXMsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIGxvbmVseSBPU0QgbmlnaHRzLCBwbGVhc2UgZW1haWw6CisgICBPU0QgRGV2IExpc3QgPG9zZC1kZXZAb3Blbi1vc2Qub3JnPgorCitNb3JlIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIG9uOgoraHR0cDovL29wZW4tb3NkLm9yZworCitCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorCitSZWZlcmVuY2VzCis9PT09PT09PT09CitXZWJlciwgUi4sICJTQ1NJIE9iamVjdC1CYXNlZCBTdG9yYWdlIERldmljZSBDb21tYW5kcyIsCitUMTAvMTM1NS1EIEFOU0kvSU5DSVRTIDQwMC0yMDA0LAoraHR0cDovL3d3dy50MTAub3JnL2Z0cC90MTAvZHJhZnRzL29zZC9vc2QtcjEwLnBkZgorCitXZWJlciwgUi4sICJTQ1NJIE9iamVjdC1CYXNlZCBTdG9yYWdlIERldmljZSBDb21tYW5kcyAtMiAoT1NELTIpIgorVDEwLzE3MjktRCwgV29ya2luZyBEcmFmdCwgcmV2LiAzCitodHRwOi8vd3d3LnQxMC5vcmcvZnRwL3QxMC9kcmFmdHMvb3NkMi9vc2QycjAzLnBkZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCA4NDFhOTM2Li4wMTI4NThkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMzQ2LDYgKzM0Niw5IEBACiAgICAgc2JpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQogICAgIHNiZG1hOAktIDhiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTE2CS0gMTZiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBmbXBvcnQJLSAob3B0aW9uYWwpIE9QTDMgSS9PIHBvcnQKKyAgICBtcHVwb3J0CS0gKG9wdGlvbmFsKSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVpcnEJLSAob3B0aW9uYWwpIE1QVTQwMSBpcnEgIwogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgYW5kIGF1dG9wcm9iZS4KIApAQCAtMzg4LDM0ICszOTEsMTEgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KICAgICAKLSAgTW9kdWxlIHNuZC1jczQyMzIKLSAgLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEgSVNBIGNoaXBzLgotCi0gICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKLQotICAgIHdpdGggaXNhcG5wPTAsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgotCi0gICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQotICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKLSAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQotICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQotICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMyIGNoaXAgKDUsNyw5LDExLDEyLDE1KQotICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQotICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMyIGNoaXAgKDAsMSwzKQotICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBDUzQyMzIgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKLSAgICAKLSAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4gVGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJvYmUKLSAgICAoaWYgSVNBIFBuUCBpcyBub3QgdXNlZCkgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlCi0gICAgb3B0aW9uYWwuCi0KLSAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCi0gICAgCiAgIE1vZHVsZSBzbmQtY3M0MjM2CiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEsCisgICAgCSAgICAgICAJICAgICAJICAgCSAgIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUzQyMzhCL0NTNDIzOSBJU0EgY2hpcHMuCiAKICAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQpAQCAtNDM3LDYgKzQxNyw5IEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgICBUaGlzIG1vZHVsZSBpcyBhbGlhc2VkIGFzIHNuZC1jczQyMzIgc2luY2UgaXQgcHJvdmlkZXMgdGhlIG9sZAorICAgIHNuZC1jczQyMzIgZnVuY3Rpb25hbGl0eSwgdG9vLgorCiAgIE1vZHVsZSBzbmQtY3M0MjgxCiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTYwNiw2ICs1ODksNyBAQAogICAgIE1vZHVsZSBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMtMTY4OCBhbmQgRVMtNjg4IHNvdW5kIGNhcmRzLgogCiAgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBPUEwzIChvcHRpb247IHNoYXJlIHRoZSBzYW1lIHBvcnQgYXMgZGVmYXVsdCkKICAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKICAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCiAgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQpAQCAtNzU3LDYgKzc0MSw5IEBACiAgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQogICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSB1c2UgTFBJQiwgMiA9IFBPU0JVRikKICAgICBwcm9iZV9tYXNrICAtIEJpdG1hc2sgdG8gcHJvYmUgY29kZWNzIChkZWZhdWx0ID0gLTEsIG1lYW5pbmcgYWxsIHNsb3RzKQorICAgIAkJICBXaGVuIHRoZSBiaXQgOCAoMHgxMDApIGlzIHNldCwgdGhlIGxvd2VyIDggYml0cyBhcmUgdXNlZAorCQkgIGFzIHRoZSAiZml4ZWQiIGNvZGVjIHNsb3RzOyBpLmUuIHRoZSBkcml2ZXIgcHJvYmVzIHRoZQorCQkgIHNsb3RzIHJlZ2FyZGxlc3Mgd2hhdCBoYXJkd2FyZSByZXBvcnRzIGJhY2sKICAgICBwcm9iZV9vbmx5CS0gT25seSBwcm9iaW5nIGFuZCBubyBjb2RlYyBpbml0aWFsaXphdGlvbiAoZGVmYXVsdD1vZmYpOwogCQkgIFVzZWZ1bCB0byBjaGVjayB0aGUgaW5pdGlhbCBjb2RlYyBzdGF0dXMgZm9yIGRlYnVnZ2luZwogICAgIGJkbF9wb3NfYWRqCS0gU3BlY2lmaWVzIHRoZSBETUEgSVJRIHRpbWluZyBkZWxheSBpbiBzYW1wbGVzLgpAQCAtMTE4NSw2ICsxMTcyLDU0IEBACiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzIGFuZCBQblAuCiAgICAgCisgIE1vZHVsZSBzbmQtbXNuZC1jbGFzc2ljCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSBvciBNb250ZXJleQorICAgIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIG1zbmQtY2xhc3NpYyBjYXJkCisgICAgaXJxCQktIElSUSAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgZGlnaXRhbAktIERpZ2l0YWwgZGF1Z2h0ZXJib2FyZCBwcmVzZW50IChkZWZhdWx0ID0gMCkKKyAgICBjZmcJCS0gQ29uZmlnIHBvcnQgKDB4MjUwLCAweDI2MCBvciAweDI3MCkgZGVmYXVsdCA9IFBuUAorICAgIHJlc2V0CS0gUmVzZXQgYWxsIGRldmljZXMKKyAgICBtcHVfaW8JLSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVfaXJxCS0gTVBVNDAxIGlycSMKKyAgICBpZGVfaW8wCS0gSURFIHBvcnQgIzAKKyAgICBpZGVfaW8xCS0gSURFIHBvcnQgIzEKKyAgICBpZGVfaXJxCS0gSURFIGlycSMKKyAgICBqb3lzdGlja19pbwktIEpveXN0aWNrIEkvTyBwb3J0CisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9tc25kaW5pdC5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCisgICAgU2VlIERvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbgorICAgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZSAKKyAgICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCisgICAgYXQKKwlodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwCisKKyAgTW9kdWxlIHNuZC1tc25kLXBpbm5hY2xlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS9GaWppIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIHBpbm5hY2xlL2ZpamkgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgcGlubmFsY2UvZmlqaSBjYXJkCisgICAgbWVtCQktIE1lbW9yeSBhZGRyZXNzICgweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLAorCQkgIDB4ZTAwMDAgb3IgMHhlODAwMCkKKyAgICB3cml0ZV9uZGVsYXkgLSBlbmFibGUgd3JpdGUgbmRlbGF5IChkZWZhdWx0ID0gMSkKKyAgICBjYWxpYnJhdGVfc2lnbmFsIC0gY2FsaWJyYXRlIHNpZ25hbCAoZGVmYXVsdCA9IDApCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgZmlsZXMgInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIgYW5kCisgICAgInR1cnRsZWJlYWNoL3BuZHNwZXJtLmJpbiIgaW4gdGhlIHByb3BlciBmaXJtd2FyZSBkaXJlY3RvcnkuCisKICAgTW9kdWxlIHNuZC1tdHBhdgogICAtLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4MjQsNyArMTg1OSw3IEBACiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsCi0gICAgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYIGFuZCBIREFWMS4zIChEZWx1eGUpLgorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgYW5kIEVzc2VuY2UgU1RYLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjYXJkcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ2NDRmNy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+Ci0KLTxib29rPgotPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLTwhLS0gSGVhZGVyICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Ym9va2luZm8+Ci0gICAgPHRpdGxlPlRoZSBBTFNBIERyaXZlciBBUEk8L3RpdGxlPgotCi0gICAgPGxlZ2Fsbm90aWNlPgotICAgIDxwYXJhPgotICAgIFRoaXMgZG9jdW1lbnQgaXMgZnJlZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBUaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IDxlbXBoYXNpcz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvZW1waGFzaXM+OyB3aXRob3V0IGV2ZW4gdGhlCi0gICAgaW1wbGllZCB3YXJyYW50eSBvZiA8ZW1waGFzaXM+TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSAgICBQQVJUSUNVTEFSIFBVUlBPU0U8L2VtcGhhc2lzPi4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGZvciBtb3JlIGRldGFpbHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAgICA8L3BhcmE+Ci0gICAgPC9sZWdhbG5vdGljZT4KLQotICA8L2Jvb2tpbmZvPgotCi0gIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KLSAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnZW1lbnQ8L3RpdGxlPgotIUVzb3VuZC9jb3JlL2luaXQuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBDb21wb25lbnRzPC90aXRsZT4KLSFFc291bmQvY29yZS9kZXZpY2UuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk1vZHVsZSByZXF1ZXN0cyBhbmQgRGV2aWNlIEZpbGUgRW50cmllczwvdGl0bGU+Ci0hRXNvdW5kL2NvcmUvc291bmQuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk1lbW9yeSBNYW5hZ2VtZW50IEhlbHBlcnM8L3RpdGxlPgotIUVzb3VuZC9jb3JlL21lbW9yeS5jCi0hRXNvdW5kL2NvcmUvbWVtYWxsb2MuYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5QQ00gQVBJPC90aXRsZT4KLSAgICAgPHNlY3QxPjx0aXRsZT5QQ00gQ29yZTwvdGl0bGU+Ci0hRXNvdW5kL2NvcmUvcGNtLmMKLSFFc291bmQvY29yZS9wY21fbGliLmMKLSFFc291bmQvY29yZS9wY21fbmF0aXZlLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5QQ00gRm9ybWF0IEhlbHBlcnM8L3RpdGxlPgotIUVzb3VuZC9jb3JlL3BjbV9taXNjLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5QQ00gTWVtb3J5IE1hbmFnZW1lbnQ8L3RpdGxlPgotIUVzb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5Db250cm9sL01peGVyIEFQSTwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+R2VuZXJhbCBDb250cm9sIEludGVyZmFjZTwvdGl0bGU+Ci0hRXNvdW5kL2NvcmUvY29udHJvbC5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+QUM5NyBDb2RlYyBBUEk8L3RpdGxlPgotIUVzb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKLSFFc291bmQvcGNpL2FjOTcvYWM5N19wY20uYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5NSURJIEFQSTwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+UmF3IE1JREkgQVBJPC90aXRsZT4KLSFFc291bmQvY29yZS9yYXdtaWRpLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5NUFU0MDEtVUFSVCBBUEk8L3RpdGxlPgotIUVzb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCi0gICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLSAgPGNoYXB0ZXI+PHRpdGxlPlByb2MgSW5mbyBBUEk8L3RpdGxlPgotICAgICA8c2VjdDE+PHRpdGxlPlByb2MgSW5mbyBJbnRlcmZhY2U8L3RpdGxlPgotIUVzb3VuZC9jb3JlL2luZm8uYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5NaXNjZWxsYW5lb3VzIEZ1bmN0aW9uczwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+SGFyZHdhcmUtRGVwZW5kZW50IERldmljZXMgQVBJPC90aXRsZT4KLSFFc291bmQvY29yZS9od2RlcC5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+SVNBIERNQSBIZWxwZXJzPC90aXRsZT4KLSFFc291bmQvY29yZS9pc2FkbWEuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk90aGVyIEhlbHBlciBNYWNyb3M8L3RpdGxlPgotIUlpbmNsdWRlL3NvdW5kL2NvcmUuaAotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhN2MwN2EuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCisrKyAvZGV2L251bGwKQEAgLTEsNjIxMCArMCwwIEBACi08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+Ci0KLTxib29rPgotPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLTwhLS0gSGVhZGVyICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Ym9va2luZm8+Ci0gICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgotICAgIDxhdXRob3I+Ci0gICAgICA8Zmlyc3RuYW1lPlRha2FzaGk8L2ZpcnN0bmFtZT4KLSAgICAgIDxzdXJuYW1lPkl3YWk8L3N1cm5hbWU+Ci0gICAgICA8YWZmaWxpYXRpb24+Ci0gICAgICAgIDxhZGRyZXNzPgotICAgICAgICAgIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KLSAgICAgICAgPC9hZGRyZXNzPgotICAgICAgPC9hZmZpbGlhdGlvbj4KLSAgICAgPC9hdXRob3I+Ci0KLSAgICAgPGRhdGU+T2N0IDE1LCAyMDA3PC9kYXRlPgotICAgICA8ZWRpdGlvbj4wLjMuNzwvZWRpdGlvbj4KLQotICAgIDxhYnN0cmFjdD4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgYW4gQUxTQSAoQWR2YW5jZWQgTGludXgKLSAgICAgICAgU291bmQgQXJjaGl0ZWN0dXJlKSBkcml2ZXIuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9hYnN0cmFjdD4KLQotICAgIDxsZWdhbG5vdGljZT4KLSAgICA8cGFyYT4KLSAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSAgVGFrYXNoaSBJd2FpIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBUaGlzIGRvY3VtZW50IGlzIGZyZWU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgVGhpcyBkb2N1bWVudCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCA8ZW1waGFzaXM+V0lUSE9VVCBBTlkgV0FSUkFOVFk8L2VtcGhhc2lzPjsgd2l0aG91dCBldmVuIHRoZQotICAgIGltcGxpZWQgd2FycmFudHkgb2YgPGVtcGhhc2lzPk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0gICAgUEFSVElDVUxBUiBQVVJQT1NFPC9lbXBoYXNpcz4uIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBmb3IgbW9yZSBkZXRhaWxzLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICAgIE1BIDAyMTExLTEzMDcgVVNBCi0gICAgPC9wYXJhPgotICAgIDwvbGVnYWxub3RpY2U+Ci0KLSAgPC9ib29raW5mbz4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFByZWZhY2UgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxwcmVmYWNlIGlkPSJwcmVmYWNlIj4KLSAgICA8dGl0bGU+UHJlZmFjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgYW4KLSAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy8iPjxjaXRldGl0bGU+Ci0gICAgICBBTFNBIChBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUpPC9jaXRldGl0bGU+PC91bGluaz4KLSAgICAgIGRyaXZlci4gVGhlIGRvY3VtZW50IGZvY3VzZXMgbWFpbmx5IG9uIFBDSSBzb3VuZGNhcmRzLgotICAgICAgSW4gdGhlIGNhc2Ugb2Ygb3RoZXIgZGV2aWNlIHR5cGVzLCB0aGUgQVBJIG1pZ2h0Ci0gICAgICBiZSBkaWZmZXJlbnQsIHRvby4gSG93ZXZlciwgYXQgbGVhc3QgdGhlIEFMU0Ega2VybmVsIEFQSSBpcwotICAgICAgY29uc2lzdGVudCwgYW5kIHRoZXJlZm9yZSBpdCB3b3VsZCBiZSBzdGlsbCBhIGJpdCBoZWxwIGZvcgotICAgICAgd3JpdGluZyB0aGVtLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgIFRoaXMgZG9jdW1lbnQgdGFyZ2V0cyBwZW9wbGUgd2hvIGFscmVhZHkgaGF2ZSBlbm91Z2gKLSAgICBDIGxhbmd1YWdlIHNraWxscyBhbmQgaGF2ZSBiYXNpYyBsaW51eCBrZXJuZWwgcHJvZ3JhbW1pbmcKLSAgICBrbm93bGVkZ2UuICBUaGlzIGRvY3VtZW50IGRvZXNuJ3QgZXhwbGFpbiB0aGUgZ2VuZXJhbAotICAgIHRvcGljIG9mIGxpbnV4IGtlcm5lbCBjb2RpbmcgYW5kIGRvZXNuJ3QgY292ZXIgbG93LWxldmVsCi0gICAgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEl0IG9ubHkgZGVzY3JpYmVzCi0gICAgdGhlIHN0YW5kYXJkIHdheSB0byB3cml0ZSBhIFBDSSBzb3VuZCBkcml2ZXIgb24gQUxTQS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIElmIHlvdSBhcmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBvbGRlciBBTFNBIHZlci4wLjUueCBBUEksIHlvdQotICAgIGNhbiBjaGVjayB0aGUgZHJpdmVycyBzdWNoIGFzIDxmaWxlbmFtZT5zb3VuZC9wY2kvZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgotICAgIDxmaWxlbmFtZT5zb3VuZC9wY2kvbWFlc3RybzMuYzwvZmlsZW5hbWU+IHdoaWNoIGhhdmUgYWxzbyBhbG1vc3QgdGhlIHNhbWUKLSAgICBjb2RlLWJhc2UgaW4gdGhlIEFMU0EgMC41LnggdHJlZSwgc28geW91IGNhbiBjb21wYXJlIHRoZSBkaWZmZXJlbmNlcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgZG9jdW1lbnQgaXMgc3RpbGwgYSBkcmFmdCB2ZXJzaW9uLiBBbnkgZmVlZGJhY2sgYW5kCi0gICAgY29ycmVjdGlvbnMsIHBsZWFzZSEhCi0gICAgPC9wYXJhPgotICA8L3ByZWZhY2U+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEZpbGUgVHJlZSBTdHJ1Y3R1cmUgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJmaWxlLXRyZWUiPgotICAgIDx0aXRsZT5GaWxlIFRyZWUgU3RydWN0dXJlPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZ2VuZXJhbCI+Ci0gICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIEFMU0EgZHJpdmVycyBhcmUgcHJvdmlkZWQgaW4gdHdvIHdheXMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBPbmUgaXMgdGhlIHRyZWVzIHByb3ZpZGVkIGFzIGEgdGFyYmFsbCBvciB2aWEgY3ZzIGZyb20gdGhlCi0gICAgICBBTFNBJ3MgZnRwIHNpdGUsIGFuZCBhbm90aGVyIGlzIHRoZSAyLjYgKG9yIGxhdGVyKSBMaW51eCBrZXJuZWwKLSAgICAgIHRyZWUuIFRvIHN5bmNocm9uaXplIGJvdGgsIHRoZSBBTFNBIGRyaXZlciB0cmVlIGlzIHNwbGl0IGludG8KLSAgICAgIHR3byBkaWZmZXJlbnQgdHJlZXM6IGFsc2Eta2VybmVsIGFuZCBhbHNhLWRyaXZlci4gVGhlIGZvcm1lcgotICAgICAgY29udGFpbnMgcHVyZWx5IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpbnV4IDIuNiAob3IgbGF0ZXIpCi0gICAgICB0cmVlLiBUaGlzIHRyZWUgaXMgZGVzaWduZWQgb25seSBmb3IgY29tcGlsYXRpb24gb24gMi42IG9yCi0gICAgICBsYXRlciBlbnZpcm9ubWVudC4gVGhlIGxhdHRlciwgYWxzYS1kcml2ZXIsIGNvbnRhaW5zIG1hbnkgc3VidGxlCi0gICAgICBmaWxlcyBmb3IgY29tcGlsaW5nIEFMU0EgZHJpdmVycyBvdXRzaWRlIG9mIHRoZSBMaW51eCBrZXJuZWwgdHJlZSwKLSAgICAgIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBvbGRlciAyLjIgYW5kIDIuNCBrZXJuZWxzLCB0byBhZGFwdCB0aGUgbGF0ZXN0IGtlcm5lbCBBUEksCi0gICAgICBhbmQgYWRkaXRpb25hbCBkcml2ZXJzIHdoaWNoIGFyZSBzdGlsbCBpbiBkZXZlbG9wbWVudCBvciBpbgotICAgICAgdGVzdHMuICBUaGUgZHJpdmVycyBpbiBhbHNhLWRyaXZlciB0cmVlIHdpbGwgYmUgbW92ZWQgdG8KLSAgICAgIGFsc2Eta2VybmVsIChhbmQgZXZlbnR1YWxseSB0byB0aGUgMi42IGtlcm5lbCB0cmVlKSB3aGVuIHRoZXkgYXJlCi0gICAgICBmaW5pc2hlZCBhbmQgY29uZmlybWVkIHRvIHdvcmsgZmluZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaWxlIHRyZWUgc3RydWN0dXJlIG9mIEFMU0EgZHJpdmVyIGlzIGRlcGljdGVkIGJlbG93LiBCb3RoCi0gICAgICAgIGFsc2Eta2VybmVsIGFuZCBhbHNhLWRyaXZlciBoYXZlIGFsbW9zdCB0aGUgc2FtZSBmaWxlCi0gICAgICAgIHN0cnVjdHVyZSwgZXhjZXB0IGZvciA8cXVvdGU+Y29yZTwvcXVvdGU+IGRpcmVjdG9yeS4gSXQncwotICAgICAgICBuYW1lZCBhcyA8cXVvdGU+YWNvcmU8L3F1b3RlPiBpbiBhbHNhLWRyaXZlciB0cmVlLiAKLQotICAgICAgICA8ZXhhbXBsZT4KLSAgICAgICAgICA8dGl0bGU+QUxTQSBGaWxlIFRyZWUgU3RydWN0dXJlPC90aXRsZT4KLSAgICAgICAgICA8bGl0ZXJhbGxheW91dD4KLSAgICAgICAgc291bmQKLSAgICAgICAgICAgICAgICAvY29yZQotICAgICAgICAgICAgICAgICAgICAgICAgL29zcwotICAgICAgICAgICAgICAgICAgICAgICAgL3NlcQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvb3NzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9pbnN0cgotICAgICAgICAgICAgICAgIC9pb2N0bDMyCi0gICAgICAgICAgICAgICAgL2luY2x1ZGUKLSAgICAgICAgICAgICAgICAvZHJpdmVycwotICAgICAgICAgICAgICAgICAgICAgICAgL21wdTQwMQotICAgICAgICAgICAgICAgICAgICAgICAgL29wbDMKLSAgICAgICAgICAgICAgICAvaTJjCi0gICAgICAgICAgICAgICAgICAgICAgICAvbDMKLSAgICAgICAgICAgICAgICAvc3ludGgKLSAgICAgICAgICAgICAgICAgICAgICAgIC9lbXV4Ci0gICAgICAgICAgICAgICAgL3BjaQotICAgICAgICAgICAgICAgICAgICAgICAgLyhjYXJkcykKLSAgICAgICAgICAgICAgICAvaXNhCi0gICAgICAgICAgICAgICAgICAgICAgICAvKGNhcmRzKQotICAgICAgICAgICAgICAgIC9hcm0KLSAgICAgICAgICAgICAgICAvcHBjCi0gICAgICAgICAgICAgICAgL3NwYXJjCi0gICAgICAgICAgICAgICAgL3VzYgotICAgICAgICAgICAgICAgIC9wY21jaWEgLyhjYXJkcykKLSAgICAgICAgICAgICAgICAvb3NzCi0gICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+Y29yZSBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBtaWRkbGUgbGF5ZXIgd2hpY2ggaXMgdGhlIGhlYXJ0Ci0gICAgICBvZiBBTFNBIGRyaXZlcnMuIEluIHRoaXMgZGlyZWN0b3J5LCB0aGUgbmF0aXZlIEFMU0EgbW9kdWxlcyBhcmUKLSAgICAgIHN0b3JlZC4gVGhlIHN1Yi1kaXJlY3RvcmllcyBjb250YWluIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBhcmUKLSAgICAgIGRlcGVuZGVudCB1cG9uIHRoZSBrZXJuZWwgY29uZmlnLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1vc3MiPgotICAgICAgICA8dGl0bGU+Y29yZS9vc3M8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBjb2RlcyBmb3IgUENNIGFuZCBtaXhlciBPU1MgZW11bGF0aW9uIG1vZHVsZXMgYXJlIHN0b3JlZAotICAgICAgICBpbiB0aGlzIGRpcmVjdG9yeS4gVGhlIHJhd21pZGkgT1NTIGVtdWxhdGlvbiBpcyBpbmNsdWRlZCBpbgotICAgICAgICB0aGUgQUxTQSByYXdtaWRpIGNvZGUgc2luY2UgaXQncyBxdWl0ZSBzbWFsbC4gVGhlIHNlcXVlbmNlcgotICAgICAgICBjb2RlIGlzIHN0b3JlZCBpbiA8ZmlsZW5hbWU+Y29yZS9zZXEvb3NzPC9maWxlbmFtZT4gZGlyZWN0b3J5IChzZWUKLSAgICAgICAgPGxpbmsgbGlua2VuZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcS1vc3MiPjxjaXRldGl0bGU+Ci0gICAgICAgIGJlbG93PC9jaXRldGl0bGU+PC9saW5rPikuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1pb2N0bDMyIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvaW9jdGwzMjwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIDMyYml0LWlvY3RsIHdyYXBwZXJzIGZvciA2NGJpdAotICAgICAgICBhcmNoaXRlY3R1cmVzIHN1Y2ggbGlrZSB4ODYtNjQsIHBwYzY0IGFuZCBzcGFyYzY0LiBGb3IgMzJiaXQKLSAgICAgICAgYW5kIGFscGhhIGFyY2hpdGVjdHVyZXMsIHRoZXNlIGFyZSBub3QgY29tcGlsZWQuIAotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvc2VxPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBkaXJlY3RvcnkgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgYXJlIGZvciB0aGUgQUxTQQotICAgICAgICBzZXF1ZW5jZXIuIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZXIgY29yZSBhbmQKLSAgICAgICAgcHJpbWFyeSBzZXF1ZW5jZXIgbW9kdWxlcyBzdWNoIGxpa2Ugc25kLXNlcS1taWRpLAotICAgICAgICBzbmQtc2VxLXZpcm1pZGksIGV0Yy4gVGhleSBhcmUgY29tcGlsZWQgb25seSB3aGVuCi0gICAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX1NFUVVFTkNFUjwvY29uc3RhbnQ+IGlzIHNldCBpbiB0aGUga2VybmVsCi0gICAgICAgIGNvbmZpZy4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1zZXEtb3NzIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvc2VxL29zczwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIE9TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIGNvZGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnktZGVxLWluc3RyIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvc2VxL2luc3RyPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIG1vZHVsZXMgZm9yIHRoZSBzZXF1ZW5jZXIKLSAgICAgICAgaW5zdHJ1bWVudCBsYXllci4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWluY2x1ZGUtZGlyZWN0b3J5Ij4KLSAgICAgIDx0aXRsZT5pbmNsdWRlIGRpcmVjdG9yeTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyB0aGUgcGxhY2UgZm9yIHRoZSBwdWJsaWMgaGVhZGVyIGZpbGVzIG9mIEFMU0EgZHJpdmVycywKLSAgICAgIHdoaWNoIGFyZSB0byBiZSBleHBvcnRlZCB0byB1c2VyLXNwYWNlLCBvciBpbmNsdWRlZCBieQotICAgICAgc2V2ZXJhbCBmaWxlcyBhdCBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuIEJhc2ljYWxseSwgdGhlIHByaXZhdGUKLSAgICAgIGhlYWRlciBmaWxlcyBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiB0aGlzIGRpcmVjdG9yeSwgYnV0IHlvdSBtYXkKLSAgICAgIHN0aWxsIGZpbmQgZmlsZXMgdGhlcmUsIGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMgOikgCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+ZHJpdmVycyBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvZGUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBkcml2ZXJzCi0gICAgICBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gIFRoZXkgYXJlIGhlbmNlIHN1cHBvc2VkIG5vdCB0byBiZQotICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLgotICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkdW1teSBwY20gZHJpdmVyIGFuZCB0aGUgc2VyaWFsIE1JREkKLSAgICAgIGRyaXZlciBhcmUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkuIEluIHRoZSBzdWItZGlyZWN0b3JpZXMsCi0gICAgICB0aGVyZSBpcyBjb2RlIGZvciBjb21wb25lbnRzIHdoaWNoIGFyZSBpbmRlcGVuZGVudCBmcm9tCi0gICAgICBidXMgYW5kIGNwdSBhcmNoaXRlY3R1cmVzLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeS1tcHU0MDEiPgotICAgICAgICA8dGl0bGU+ZHJpdmVycy9tcHU0MDE8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgTVBVNDAxIGFuZCBNUFU0MDEtVUFSVCBtb2R1bGVzIGFyZSBzdG9yZWQgaGVyZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWRyaXZlcnMtZGlyZWN0b3J5LW9wbDMiPgotICAgICAgICA8dGl0bGU+ZHJpdmVycy9vcGwzIGFuZCBvcGw0PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIE9QTDMgYW5kIE9QTDQgRk0tc3ludGggc3R1ZmYgaXMgZm91bmQgaGVyZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtaTJjLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+aTJjIGRpcmVjdG9yeTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBjb250YWlucyB0aGUgQUxTQSBpMmMgY29tcG9uZW50cy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsdGhvdWdoIHRoZXJlIGlzIGEgc3RhbmRhcmQgaTJjIGxheWVyIG9uIExpbnV4LCBBTFNBIGhhcyBpdHMKLSAgICAgIG93biBpMmMgY29kZSBmb3Igc29tZSBjYXJkcywgYmVjYXVzZSB0aGUgc291bmRjYXJkIG5lZWRzIG9ubHkgYQotICAgICAgc2ltcGxlIG9wZXJhdGlvbiBhbmQgdGhlIHN0YW5kYXJkIGkyYyBBUEkgaXMgdG9vIGNvbXBsaWNhdGVkIGZvcgotICAgICAgc3VjaCBhIHB1cnBvc2UuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnktbDMiPgotICAgICAgICA8dGl0bGU+aTJjL2wzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBpcyBhIHN1Yi1kaXJlY3RvcnkgZm9yIEFSTSBMMyBpMmMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXN5bnRoLWRpcmVjdG9yeSI+Ci0gICAgICAgIDx0aXRsZT5zeW50aCBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBzeW50aCBtaWRkbGUtbGV2ZWwgbW9kdWxlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFNvIGZhciwgdGhlcmUgaXMgb25seSBFbXU4MDAwL0VtdTEwazEgc3ludGggZHJpdmVyIHVuZGVyCi0gICAgICAgIHRoZSA8ZmlsZW5hbWU+c3ludGgvZW11eDwvZmlsZW5hbWU+IHN1Yi1kaXJlY3RvcnkuIAotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1wY2ktZGlyZWN0b3J5Ij4KLSAgICAgIDx0aXRsZT5wY2kgZGlyZWN0b3J5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGRpcmVjdG9yeSBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBob2xkIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzCi0gICAgICBmb3IgUENJIHNvdW5kY2FyZHMgYW5kIHRoZSBjb2RlIHNwZWNpZmljIHRvIHRoZSBQQ0kgQlVTLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGRyaXZlcnMgY29tcGlsZWQgZnJvbSBhIHNpbmdsZSBmaWxlIGFyZSBzdG9yZWQgZGlyZWN0bHkKLSAgICAgIGluIHRoZSBwY2kgZGlyZWN0b3J5LCB3aGlsZSB0aGUgZHJpdmVycyB3aXRoIHNldmVyYWwgc291cmNlIGZpbGVzIGFyZQotICAgICAgc3RvcmVkIG9uIHRoZWlyIG93biBzdWItZGlyZWN0b3J5IChlLmcuIGVtdTEwazEsIGljZTE3MTIpLiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWlzYS1kaXJlY3RvcnkiPgotICAgICAgPHRpdGxlPmlzYSBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZGlyZWN0b3J5IGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGhvbGQgdGhlIHRvcC1sZXZlbCBjYXJkIG1vZHVsZXMKLSAgICAgIGZvciBJU0Egc291bmRjYXJkcy4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1hcm0tcHBjLXNwYXJjLWRpcmVjdG9yaWVzIj4KLSAgICAgIDx0aXRsZT5hcm0sIHBwYywgYW5kIHNwYXJjIGRpcmVjdG9yaWVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGV5IGFyZSB1c2VkIGZvciB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzIHdoaWNoIGFyZQotICAgICAgc3BlY2lmaWMgdG8gb25lIG9mIHRoZXNlIGFyY2hpdGVjdHVyZXMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtdXNiLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+dXNiIGRpcmVjdG9yeTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFVTQi1hdWRpbyBkcml2ZXIuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiwgdGhlCi0gICAgICBVU0IgTUlESSBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbiB0aGUgdXNiLWF1ZGlvIGRyaXZlci4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1wY21jaWEtZGlyZWN0b3J5Ij4KLSAgICAgIDx0aXRsZT5wY21jaWEgZGlyZWN0b3J5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgUENNQ0lBLCBlc3BlY2lhbGx5IFBDQ2FyZCBkcml2ZXJzIHdpbGwgZ28gaGVyZS4gQ2FyZEJ1cwotICAgICAgZHJpdmVycyB3aWxsIGJlIGluIHRoZSBwY2kgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZWlyIEFQSSBpcyBpZGVudGljYWwKLSAgICAgIHRvIHRoYXQgb2Ygc3RhbmRhcmQgUENJIGNhcmRzLiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLW9zcy1kaXJlY3RvcnkiPgotICAgICAgPHRpdGxlPm9zcyBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBPU1MvTGl0ZSBzb3VyY2UgZmlsZXMgYXJlIHN0b3JlZCBoZXJlIGluIExpbnV4IDIuNiAob3IKLSAgICAgIGxhdGVyKSB0cmVlLiBJbiB0aGUgQUxTQSBkcml2ZXIgdGFyYmFsbCwgdGhpcyBkaXJlY3RvcnkgaXMgZW1wdHksCi0gICAgICBvZiBjb3Vyc2UgOikgCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0iYmFzaWMtZmxvdyI+Ci0gICAgPHRpdGxlPkJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LW91dGxpbmUiPgotICAgICAgPHRpdGxlPk91dGxpbmU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBtaW5pbXVtIGZsb3cgZm9yIFBDSSBzb3VuZGNhcmRzIGlzIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ZGVmaW5lIHRoZSBQQ0kgSUQgdGFibGUgKHNlZSB0aGUgc2VjdGlvbgotICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj48Y2l0ZXRpdGxlPlBDSSBFbnRyaWVzCi0gICAgICAgICAgPC9jaXRldGl0bGU+PC9saW5rPikuPC9wYXJhPjwvbGlzdGl0ZW0+IAotICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBjYWxsYmFjay48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5yZW1vdmUoKTwvZnVuY3Rpb24+IGNhbGxiYWNrLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgYSA8c3RydWN0bmFtZT5wY2lfZHJpdmVyPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUKLQkgIGNvbnRhaW5pbmcgdGhlIHRocmVlIHBvaW50ZXJzIGFib3ZlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgYW4gPGZ1bmN0aW9uPmluaXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGp1c3QgY2FsbGluZwotCSAgdGhlIDxmdW5jdGlvbj5wY2lfcmVnaXN0ZXJfZHJpdmVyKCk8L2Z1bmN0aW9uPiB0byByZWdpc3RlciB0aGUgcGNpX2RyaXZlciB0YWJsZQotCSAgZGVmaW5lZCBhYm92ZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIGFuIDxmdW5jdGlvbj5leGl0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB0byBjYWxsCi0JICB0aGUgPGZ1bmN0aW9uPnBjaV91bnJlZ2lzdGVyX2RyaXZlcigpPC9mdW5jdGlvbj4gZnVuY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWV4YW1wbGUiPgotICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY29kZSBleGFtcGxlIGlzIHNob3duIGJlbG93LiBTb21lIHBhcnRzIGFyZSBrZXB0Ci0gICAgICB1bmltcGxlbWVudGVkIGF0IHRoaXMgbW9tZW50IGJ1dCB3aWxsIGJlIGZpbGxlZCBpbiB0aGUKLSAgICAgIG5leHQgc2VjdGlvbnMuIFRoZSBudW1iZXJzIGluIHRoZSBjb21tZW50IGxpbmVzIG9mIHRoZQotICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfcHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uCi0gICAgICByZWZlciB0byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uIAotCi0gICAgICAgIDxleGFtcGxlPgotICAgICAgICAgIDx0aXRsZT5CYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVycyAtIEV4YW1wbGU8L3RpdGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0gICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0gICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0KLSAgLyogbW9kdWxlIHBhcmFtZXRlcnMgKHNlZSAiTW9kdWxlIFBhcmFtZXRlcnMiKSAqLwotICAvKiBTTkRSVl9DQVJEUzogbWF4aW11bSBudW1iZXIgb2YgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCi0gIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7Ci0gIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKLSAgc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOwotCi0gIC8qIGRlZmluaXRpb24gb2YgdGhlIGNoaXAtc3BlY2lmaWMgcmVjb3JkICovCi0gIHN0cnVjdCBteWNoaXAgewotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgICAgICAgICAvKiB0aGUgcmVzdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBpbiBzZWN0aW9uCi0gICAgICAgICAgICogIlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50IgotICAgICAgICAgICAqLwotICB9OwotCi0gIC8qIGNoaXAtc3BlY2lmaWMgZGVzdHJ1Y3RvcgotICAgKiAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIpCi0gICAqLwotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShzdHJ1Y3QgbXljaGlwICpjaGlwKQotICB7Ci0gICAgICAgICAgLi4uLiAvKiB3aWxsIGJlIGltcGxlbWVudGVkIGxhdGVyLi4uICovCi0gIH0KLQotICAvKiBjb21wb25lbnQtZGVzdHJ1Y3RvcgotICAgKiAoc2VlICJNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzIikKLSAgICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQotICB7Ci0gICAgICAgICAgcmV0dXJuIHNuZF9teWNoaXBfZnJlZShkZXZpY2UtPmRldmljZV9kYXRhKTsKLSAgfQotCi0gIC8qIGNoaXAtc3BlY2lmaWMgY29uc3RydWN0b3IKLSAgICogKHNlZSAiTWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50cyIpCi0gICAqLwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBteWNoaXAgKipyY2hpcCkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXA7Ci0gICAgICAgICAgaW50IGVycjsKLSAgICAgICAgICBzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKLSAgICAgICAgICAgICAgICAgLmRldl9mcmVlID0gc25kX215Y2hpcF9kZXZfZnJlZSwKLSAgICAgICAgICB9OwotCi0gICAgICAgICAgKnJjaGlwID0gTlVMTDsKLQotICAgICAgICAgIC8qIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgaGVyZQotICAgICAgICAgICAqIChzZWUgIlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50IikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICAuLi4uCi0KLSAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovCi0gICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAgICAgICAgY2hpcC0+Y2FyZCA9IGNhcmQ7Ci0KLSAgICAgICAgICAvKiByZXN0IG9mIGluaXRpYWxpemF0aW9uIGhlcmU7IHdpbGwgYmUgaW1wbGVtZW50ZWQKLSAgICAgICAgICAgKiBsYXRlciwgc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIKLSAgICAgICAgICAgKi8KLSAgICAgICAgICAuLi4uCi0KLSAgICAgICAgICBlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOwotICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKLQotICAgICAgICAgICpyY2hpcCA9IGNoaXA7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvKiBjb25zdHJ1Y3RvciAtLSBzZWUgIkNvbnN0cnVjdG9yIiBzdWItc2VjdGlvbiAqLwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKLSAgewotICAgICAgICAgIHN0YXRpYyBpbnQgZGV2OwotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICAgICAgICAgIGludCBlcnI7Ci0KLSAgICAgICAgICAvKiAoMSkgKi8KLSAgICAgICAgICBpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgICAgaWYgKCFlbmFibGVbZGV2XSkgewotICAgICAgICAgICAgICAgICAgZGV2Kys7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiAoMikgKi8KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLSAgICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICAgICAgICAvKiAoMykgKi8KLSAgICAgICAgICBlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogKDQpICovCi0gICAgICAgICAgc3RyY3B5KGNhcmQtPmRyaXZlciwgIk15IENoaXAiKTsKLSAgICAgICAgICBzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTXkgT3duIENoaXAgMTIzIik7Ci0gICAgICAgICAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCi0gICAgICAgICAgICAgICAgICBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPmlvcG9ydCwgY2hpcC0+aXJxKTsKLQotICAgICAgICAgIC8qICg1KSAqLwotICAgICAgICAgIC4uLi4gLyogaW1wbGVtZW50ZWQgbGF0ZXIgKi8KLQotICAgICAgICAgIC8qICg2KSAqLwotICAgICAgICAgIGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwotICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiAoNykgKi8KLSAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKLSAgICAgICAgICBkZXYrKzsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIGRlc3RydWN0b3IgLS0gc2VlIHRoZSAiRGVzdHJ1Y3RvciIgc3ViLXNlY3Rpb24gKi8KLSAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCi0gIHsKLSAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKLSAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9leGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlYWwgY29uc3RydWN0b3Igb2YgUENJIGRyaXZlcnMgaXMgdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrLgotICAgICAgVGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrIGFuZCBvdGhlciBjb21wb25lbnQtY29uc3RydWN0b3JzIHdoaWNoIGFyZSBjYWxsZWQKLSAgICAgIGZyb20gdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrIHNob3VsZCBiZSBkZWZpbmVkIHdpdGgKLSAgICAgIHRoZSA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBwcmVmaXguIFlvdSAKLSAgICAgIGNhbm5vdCB1c2UgdGhlIDxwYXJhbWV0ZXI+X19pbml0PC9wYXJhbWV0ZXI+IHByZWZpeCBmb3IgdGhlbSwKLSAgICAgIGJlY2F1c2UgYW55IFBDSSBkZXZpY2UgY291bGQgYmUgYSBob3RwbHVnIGRldmljZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiB0aGUgPGZ1bmN0aW9uPnByb2JlPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHRoZSBmb2xsb3dpbmcgc2NoZW1lIGlzIG9mdGVuIHVzZWQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLWRldmljZS1pbmRleCI+Ci0gICAgICAgIDx0aXRsZT4xKSBDaGVjayBhbmQgaW5jcmVtZW50IHRoZSBkZXZpY2UgaW5kZXguPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IGRldjsKLSAgLi4uLgotICBpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICBpZiAoIWVuYWJsZVtkZXZdKSB7Ci0gICAgICAgICAgZGV2Kys7Ci0gICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICB3aGVyZSBlbmFibGVbZGV2XSBpcyB0aGUgbW9kdWxlIG9wdGlvbi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVhY2ggdGltZSB0aGUgPGZ1bmN0aW9uPnByb2JlPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkLCBjaGVjayB0aGUKLSAgICAgICAgYXZhaWxhYmlsaXR5IG9mIHRoZSBkZXZpY2UuIElmIG5vdCBhdmFpbGFibGUsIHNpbXBseSBpbmNyZW1lbnQKLSAgICAgICAgdGhlIGRldmljZSBpbmRleCBhbmQgcmV0dXJucy4gZGV2IHdpbGwgYmUgaW5jcmVtZW50ZWQgYWxzbwotICAgICAgICBsYXRlciAoPGxpbmsKLSAgICAgICAgbGlua2VuZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1zZXQtcGNpIj48Y2l0ZXRpdGxlPnN0ZXAKLSAgICAgICAgNzwvY2l0ZXRpdGxlPjwvbGluaz4pLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtY2FyZCI+Ci0gICAgICAgIDx0aXRsZT4yKSBDcmVhdGUgYSBjYXJkIGluc3RhbmNlPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gIC4uLi4KLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgZGV0YWlscyB3aWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgc2VjdGlvbgotICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1jYXJkLWluc3RhbmNlIj48Y2l0ZXRpdGxlPgotICAgICAgICAgIE1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHM8L2NpdGV0aXRsZT48L2xpbms+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLWNyZWF0ZS1tYWluIj4KLSAgICAgICAgPHRpdGxlPjMpIENyZWF0ZSBhIG1haW4gY29tcG9uZW50PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gdGhpcyBwYXJ0LCB0aGUgUENJIHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICAuLi4uCi0gIGVyciA9IHNuZF9teWNoaXBfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApOwotICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgIHNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0gICAgICAgICAgcmV0dXJuIGVycjsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgVGhlIGRldGFpbHMgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24gPGxpbmsKLSAgICAgICAgbGlua2VuZD0icGNpLXJlc291cmNlIj48Y2l0ZXRpdGxlPlBDSSBSZXNvdXJjZQotICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1tYWluLWNvbXBvbmVudCI+Ci0gICAgICAgIDx0aXRsZT40KSBTZXQgdGhlIGRyaXZlciBJRCBhbmQgbmFtZSBzdHJpbmdzLjwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RyY3B5KGNhcmQtPmRyaXZlciwgIk15IENoaXAiKTsKLSAgc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIk15IE93biBDaGlwIDEyMyIpOwotICBzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHggaXJxICVpIiwKLSAgICAgICAgICBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPmlvcG9ydCwgY2hpcC0+aXJxKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIFRoZSBkcml2ZXIgZmllbGQgaG9sZHMgdGhlIG1pbmltYWwgSUQgc3RyaW5nIG9mIHRoZQotICAgICAgICBjaGlwLiBUaGlzIGlzIHVzZWQgYnkgYWxzYS1saWIncyBjb25maWd1cmF0b3IsIHNvIGtlZXAgaXQKLSAgICAgICAgc2ltcGxlIGJ1dCB1bmlxdWUuIAotICAgICAgICAgIEV2ZW4gdGhlIHNhbWUgZHJpdmVyIGNhbiBoYXZlIGRpZmZlcmVudCBkcml2ZXIgSURzIHRvCi0gICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggY2hpcCB0eXBlLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBzaG9ydG5hbWUgZmllbGQgaXMgYSBzdHJpbmcgc2hvd24gYXMgbW9yZSB2ZXJib3NlCi0gICAgICAgIG5hbWUuIFRoZSBsb25nbmFtZSBmaWVsZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24KLSAgICAgICAgc2hvd24gaW4gPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkczwvZmlsZW5hbWU+LiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtb3RoZXIiPgotICAgICAgICA8dGl0bGU+NSkgQ3JlYXRlIG90aGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgbWl4ZXIsIE1JREksIGV0Yy48L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBIZXJlIHlvdSBkZWZpbmUgdGhlIGJhc2ljIGNvbXBvbmVudHMgc3VjaCBhcwotICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UiPjxjaXRldGl0bGU+UENNPC9jaXRldGl0bGU+PC9saW5rPiwKLSAgICAgICAgICBtaXhlciAoZS5nLiA8bGluayBsaW5rZW5kPSJhcGktYWM5NyI+PGNpdGV0aXRsZT5BQzk3PC9jaXRldGl0bGU+PC9saW5rPiksCi0gICAgICAgICAgTUlESSAoZS5nLiA8bGluayBsaW5rZW5kPSJtaWRpLWludGVyZmFjZSI+PGNpdGV0aXRsZT5NUFUtNDAxPC9jaXRldGl0bGU+PC9saW5rPiksCi0gICAgICAgICAgYW5kIG90aGVyIGludGVyZmFjZXMuCi0gICAgICAgICAgQWxzbywgaWYgeW91IHdhbnQgYSA8bGluayBsaW5rZW5kPSJwcm9jLWludGVyZmFjZSI+PGNpdGV0aXRsZT5wcm9jCi0gICAgICAgIGZpbGU8L2NpdGV0aXRsZT48L2xpbms+LCBkZWZpbmUgaXQgaGVyZSwgdG9vLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLXJlZ2lzdGVyLWNhcmQiPgotICAgICAgICA8dGl0bGU+NikgUmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UuPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKLSAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1yZWdpc3RyYXRpb24iPjxjaXRldGl0bGU+TWFuYWdlbWVudAotICAgICAgICBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvY2l0ZXRpdGxlPjwvbGluaz4sIHRvby4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+Ci0gICAgICAgIDx0aXRsZT43KSBTZXQgdGhlIFBDSSBkcml2ZXIgZGF0YSBhbmQgcmV0dXJuIHplcm8uPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKLSAgICAgICAgZGV2Kys7Ci0gICAgICAgIHJldHVybiAwOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgSW4gdGhlIGFib3ZlLCB0aGUgY2FyZCByZWNvcmQgaXMgc3RvcmVkLiBUaGlzIHBvaW50ZXIgaXMKLSAgICAgICAgdXNlZCBpbiB0aGUgcmVtb3ZlIGNhbGxiYWNrIGFuZCBwb3dlci1tYW5hZ2VtZW50Ci0gICAgICAgIGNhbGxiYWNrcywgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWRlc3RydWN0b3IiPgotICAgICAgPHRpdGxlPkRlc3RydWN0b3I8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBkZXN0cnVjdG9yLCByZW1vdmUgY2FsbGJhY2ssIHNpbXBseSByZWxlYXNlcyB0aGUgY2FyZAotICAgICAgaW5zdGFuY2UuIFRoZW4gdGhlIEFMU0EgbWlkZGxlIGxheWVyIHdpbGwgcmVsZWFzZSBhbGwgdGhlCi0gICAgICBhdHRhY2hlZCBjb21wb25lbnRzIGF1dG9tYXRpY2FsbHkuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgd291bGQgYmUgdHlwaWNhbGx5IGxpa2UgdGhlIGZvbGxvd2luZzoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX215Y2hpcF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKLSAgewotICAgICAgICAgIHNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOwotICAgICAgICAgIHBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBUaGUgYWJvdmUgY29kZSBhc3N1bWVzIHRoYXQgdGhlIGNhcmQgcG9pbnRlciBpcyBzZXQgdG8gdGhlIFBDSQotCWRyaXZlciBkYXRhLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWhlYWRlci1maWxlcyI+Ci0gICAgICA8dGl0bGU+SGVhZGVyIEZpbGVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBGb3IgdGhlIGFib3ZlIGV4YW1wbGUsIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgaW5jbHVkZSBmaWxlcwotICAgICAgYXJlIG5lY2Vzc2FyeS4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotICAjaW5jbHVkZSA8c291bmQvY29yZS5oPgotICAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLQl3aGVyZSB0aGUgbGFzdCBvbmUgaXMgbmVjZXNzYXJ5IG9ubHkgd2hlbiBtb2R1bGUgb3B0aW9ucyBhcmUKLSAgICAgIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBmaWxlLiAgSWYgdGhlIGNvZGUgaXMgc3BsaXQgaW50byBzZXZlcmFsCi0gICAgICBmaWxlcywgdGhlIGZpbGVzIHdpdGhvdXQgbW9kdWxlIG9wdGlvbnMgZG9uJ3QgbmVlZCB0aGVtLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlc2UgaGVhZGVycywgeW91J2xsIG5lZWQKLSAgICAgIDxmaWxlbmFtZT4mbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7PC9maWxlbmFtZT4gZm9yIGludGVycnVwdAotICAgICAgaGFuZGxpbmcsIGFuZCA8ZmlsZW5hbWU+Jmx0O2FzbS9pby5oJmd0OzwvZmlsZW5hbWU+IGZvciBJL08KLSAgICAgIGFjY2Vzcy4gSWYgeW91IHVzZSB0aGUgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4gb3IKLSAgICAgIDxmdW5jdGlvbj51ZGVsYXkoKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucywgeW91J2xsIG5lZWQgdG8gaW5jbHVkZQotICAgICAgPGZpbGVuYW1lPiZsdDtsaW51eC9kZWxheS5oJmd0OzwvZmlsZW5hbWU+IHRvby4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIEFMU0EgaW50ZXJmYWNlcyBsaWtlIHRoZSBQQ00gYW5kIGNvbnRyb2wgQVBJcyBhcmUgZGVmaW5lZCBpbiBvdGhlcgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC94eHguaCZndDs8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZXMuCi0gICAgICBUaGV5IGhhdmUgdG8gYmUgaW5jbHVkZWQgYWZ0ZXIKLSAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29yZS5oJmd0OzwvZmlsZW5hbWU+LgotICAgICAgPC9wYXJhPgotCi0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIE1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJjYXJkLW1hbmFnZW1lbnQiPgotICAgIDx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+Ci0gICAgICA8dGl0bGU+Q2FyZCBJbnN0YW5jZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgIEZvciBlYWNoIHNvdW5kY2FyZCwgYSA8cXVvdGU+Y2FyZDwvcXVvdGU+IHJlY29yZCBtdXN0IGJlIGFsbG9jYXRlZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBBIGNhcmQgcmVjb3JkIGlzIHRoZSBoZWFkcXVhcnRlcnMgb2YgdGhlIHNvdW5kY2FyZC4gIEl0IG1hbmFnZXMKLSAgICAgIHRoZSB3aG9sZSBsaXN0IG9mIGRldmljZXMgKGNvbXBvbmVudHMpIG9uIHRoZSBzb3VuZGNhcmQsIHN1Y2ggYXMKLSAgICAgIFBDTSwgbWl4ZXJzLCBNSURJLCBzeW50aGVzaXplciwgYW5kIHNvIG9uLiAgQWxzbywgdGhlIGNhcmQKLSAgICAgIHJlY29yZCBob2xkcyB0aGUgSUQgYW5kIHRoZSBuYW1lIHN0cmluZ3Mgb2YgdGhlIGNhcmQsIG1hbmFnZXMKLSAgICAgIHRoZSByb290IG9mIHByb2MgZmlsZXMsIGFuZCBjb250cm9scyB0aGUgcG93ZXItbWFuYWdlbWVudCBzdGF0ZXMKLSAgICAgIGFuZCBob3RwbHVnIGRpc2Nvbm5lY3Rpb25zLiAgVGhlIGNvbXBvbmVudCBsaXN0IG9uIHRoZSBjYXJkCi0gICAgICByZWNvcmQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGNvcnJlY3QgcmVsZWFzZSBvZiByZXNvdXJjZXMgYXQKLSAgICAgIGRlc3RydWN0aW9uLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdG8gY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSwgY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgbW9kdWxlLCBleHRyYV9zaXplKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgYXJndW1lbnRzLCB0aGUgY2FyZC1pbmRleCBudW1iZXIsIHRoZQotICAgICAgICBpZCBzdHJpbmcsIHRoZSBtb2R1bGUgcG9pbnRlciAodXN1YWxseQotICAgICAgICA8Y29uc3RhbnQ+VEhJU19NT0RVTEU8L2NvbnN0YW50PiksCi0gICAgICAgIGFuZCB0aGUgc2l6ZSBvZiBleHRyYS1kYXRhIHNwYWNlLiAgVGhlIGxhc3QgYXJndW1lbnQgaXMgdXNlZCB0bwotICAgICAgICBhbGxvY2F0ZSBjYXJkLSZndDtwcml2YXRlX2RhdGEgZm9yIHRoZQotICAgICAgICBjaGlwLXNwZWNpZmljIGRhdGEuICBOb3RlIHRoYXQgdGhlc2UgZGF0YQotICAgICAgICBhcmUgYWxsb2NhdGVkIGJ5IDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY29tcG9uZW50Ij4KLSAgICAgIDx0aXRsZT5Db21wb25lbnRzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBZnRlciB0aGUgY2FyZCBpcyBjcmVhdGVkLCB5b3UgY2FuIGF0dGFjaCB0aGUgY29tcG9uZW50cwotICAgICAgKGRldmljZXMpIHRvIHRoZSBjYXJkIGluc3RhbmNlLiBJbiBhbiBBTFNBIGRyaXZlciwgYSBjb21wb25lbnQgaXMKLSAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9kZXZpY2U8L3N0cnVjdG5hbWU+IG9iamVjdC4KLSAgICAgIEEgY29tcG9uZW50IGNhbiBiZSBhIFBDTSBpbnN0YW5jZSwgYSBjb250cm9sIGludGVyZmFjZSwgYSByYXcKLSAgICAgIE1JREkgaW50ZXJmYWNlLCBldGMuICBFYWNoIHN1Y2ggaW5zdGFuY2UgaGFzIG9uZSBjb21wb25lbnQKLSAgICAgIGVudHJ5LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgQSBjb21wb25lbnQgY2FuIGJlIGNyZWF0ZWQgdmlhCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9YWFgsIGNoaXAsICZvcHMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBkZXZpY2UtbGV2ZWwKLSAgICAgICg8Y29uc3RhbnQ+U05EUlZfREVWX1hYWDwvY29uc3RhbnQ+KSwgdGhlIGRhdGEgcG9pbnRlciwgYW5kIHRoZQotICAgICAgY2FsbGJhY2sgcG9pbnRlcnMgKDxwYXJhbWV0ZXI+JmFtcDtvcHM8L3BhcmFtZXRlcj4pLiBUaGUKLSAgICAgIGRldmljZS1sZXZlbCBkZWZpbmVzIHRoZSB0eXBlIG9mIGNvbXBvbmVudHMgYW5kIHRoZSBvcmRlciBvZgotICAgICAgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24uICBGb3IgbW9zdCBjb21wb25lbnRzLCB0aGUKLSAgICAgIGRldmljZS1sZXZlbCBpcyBhbHJlYWR5IGRlZmluZWQuICBGb3IgYSB1c2VyLWRlZmluZWQgY29tcG9uZW50LAotICAgICAgeW91IGNhbiB1c2UgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRVZFTDwvY29uc3RhbnQ+LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoaXMgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJ3QgYWxsb2NhdGUgdGhlIGRhdGEgc3BhY2UuIFRoZSBkYXRhCi0gICAgICBtdXN0IGJlIGFsbG9jYXRlZCBtYW51YWxseSBiZWZvcmVoYW5kLCBhbmQgaXRzIHBvaW50ZXIgaXMgcGFzc2VkCi0gICAgICBhcyB0aGUgYXJndW1lbnQuIFRoaXMgcG9pbnRlciBpcyB1c2VkIGFzIHRoZQotICAgICAgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPiBpZGVudGlmaWVyIGluIHRoZSBhYm92ZSBleGFtcGxlKQotICAgICAgZm9yIHRoZSBpbnN0YW5jZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBFYWNoIHByZS1kZWZpbmVkIEFMU0EgY29tcG9uZW50IHN1Y2ggYXMgYWM5NyBhbmQgcGNtIGNhbGxzCi0gICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IGluc2lkZSBpdHMKLSAgICAgIGNvbnN0cnVjdG9yLiBUaGUgZGVzdHJ1Y3RvciBmb3IgZWFjaCBjb21wb25lbnQgaXMgZGVmaW5lZCBpbiB0aGUKLSAgICAgIGNhbGxiYWNrIHBvaW50ZXJzLiAgSGVuY2UsIHlvdSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZgotICAgICAgY2FsbGluZyBhIGRlc3RydWN0b3IgZm9yIHN1Y2ggYSBjb21wb25lbnQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgeW91ciBvd24gY29tcG9uZW50LCB5b3UgbmVlZCB0bwotICAgICAgc2V0IHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHRvIHRoZSBkZXZfZnJlZSBjYWxsYmFjayBpbgotICAgICAgdGhlIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+LCBzbyB0aGF0IGl0IGNhbiBiZSByZWxlYXNlZAotICAgICAgYXV0b21hdGljYWxseSB2aWEgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LgotICAgICAgVGhlIG5leHQgZXhhbXBsZSB3aWxsIHNob3cgYW4gaW1wbGVtZW50YXRpb24gb2YgY2hpcC1zcGVjaWZpYwotICAgICAgZGF0YS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMiPgotICAgICAgPHRpdGxlPkNoaXAtU3BlY2lmaWMgRGF0YTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgIENoaXAtc3BlY2lmaWMgaW5mb3JtYXRpb24sIGUuZy4gdGhlIEkvTyBwb3J0IGFkZHJlc3MsIGl0cwotICAgICAgcmVzb3VyY2UgcG9pbnRlciwgb3IgdGhlIGlycSBudW1iZXIsIGlzIHN0b3JlZCBpbiB0aGUKLSAgICAgIGNoaXAtc3BlY2lmaWMgcmVjb3JkLgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBteWNoaXAgewotICAgICAgICAgIC4uLi4KLSAgfTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gZ2VuZXJhbCwgdGhlcmUgYXJlIHR3byB3YXlzIG9mIGFsbG9jYXRpbmcgdGhlIGNoaXAgcmVjb3JkLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KLSAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aAotCSAgdG8gdGhlIDR0aCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaS5lLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IG15Y2hpcCkpOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPm15Y2hpcDwvc3RydWN0bmFtZT4gaXMgdGhlIHR5cGUgb2YgdGhlIGNoaXAgcmVjb3JkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gcmV0dXJuLCB0aGUgYWxsb2NhdGVkIHJlY29yZCBjYW4gYmUgYWNjZXNzZWQgYXMKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIFdpdGggdGhpcyBtZXRob2QsIHlvdSBkb24ndCBoYXZlIHRvIGFsbG9jYXRlIHR3aWNlLgotICAgICAgICAgIFRoZSByZWNvcmQgaXMgcmVsZWFzZWQgdG9nZXRoZXIgd2l0aCB0aGUgY2FyZCBpbnN0YW5jZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtYWxsb2NhdGUtZXh0cmEiPgotICAgICAgICA8dGl0bGU+Mi4gQWxsb2NhdGluZyBhbiBleHRyYSBkZXZpY2UuPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAotICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCi0gICAgICAgICAgPGZ1bmN0aW9uPmt6YWxsb2MoKTwvZnVuY3Rpb24+LiAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwotICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKLSAgLi4uLi4KLSAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgY2hpcCByZWNvcmQgc2hvdWxkIGhhdmUgdGhlIGZpZWxkIHRvIGhvbGQgdGhlIGNhcmQKLSAgICAgICAgICBwb2ludGVyIGF0IGxlYXN0LCAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IG15Y2hpcCB7Ci0gICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwotICAgICAgICAgIC4uLi4KLSAgfTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZW4sIHNldCB0aGUgY2FyZCBwb2ludGVyIGluIHRoZSByZXR1cm5lZCBjaGlwIGluc3RhbmNlLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBjaGlwLT5jYXJkID0gY2FyZDsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5leHQsIGluaXRpYWxpemUgdGhlIGZpZWxkcywgYW5kIHJlZ2lzdGVyIHRoaXMgY2hpcAotICAgICAgICAgIHJlY29yZCBhcyBhIGxvdy1sZXZlbCBkZXZpY2Ugd2l0aCBhIHNwZWNpZmllZAotICAgICAgICAgIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+LCAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7Ci0gICAgICAgICAgLmRldl9mcmVlID0gICAgICAgIHNuZF9teWNoaXBfZGV2X2ZyZWUsCi0gIH07Ci0gIC4uLi4KLSAgc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlKCk8L2Z1bmN0aW9uPiBpcyB0aGUKLSAgICAgICAgZGV2aWNlLWRlc3RydWN0b3IgZnVuY3Rpb24sIHdoaWNoIHdpbGwgY2FsbCB0aGUgcmVhbAotICAgICAgICBkZXN0cnVjdG9yLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljaGlwX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCi0gIHsKLSAgICAgICAgICByZXR1cm4gc25kX215Y2hpcF9mcmVlKGRldmljZS0+ZGV2aWNlX2RhdGEpOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICB3aGVyZSA8ZnVuY3Rpb24+c25kX215Y2hpcF9mcmVlKCk8L2Z1bmN0aW9uPiBpcyB0aGUgcmVhbCBkZXN0cnVjdG9yLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1yZWdpc3RyYXRpb24iPgotICAgICAgPHRpdGxlPlJlZ2lzdHJhdGlvbiBhbmQgUmVsZWFzZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWZ0ZXIgYWxsIGNvbXBvbmVudHMgYXJlIGFzc2lnbmVkLCByZWdpc3RlciB0aGUgY2FyZCBpbnN0YW5jZQotICAgICAgYnkgY2FsbGluZyA8ZnVuY3Rpb24+c25kX2NhcmRfcmVnaXN0ZXIoKTwvZnVuY3Rpb24+LiBBY2Nlc3MKLSAgICAgIHRvIHRoZSBkZXZpY2UgZmlsZXMgaXMgZW5hYmxlZCBhdCB0aGlzIHBvaW50LiBUaGF0IGlzLCBiZWZvcmUKLSAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9yZWdpc3RlcigpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCB0aGUKLSAgICAgIGNvbXBvbmVudHMgYXJlIHNhZmVseSBpbmFjY2Vzc2libGUgZnJvbSBleHRlcm5hbCBzaWRlLiBJZiB0aGlzCi0gICAgICBjYWxsIGZhaWxzLCBleGl0IHRoZSBwcm9iZSBmdW5jdGlvbiBhZnRlciByZWxlYXNpbmcgdGhlIGNhcmQgdmlhCi0gICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZSgpPC9mdW5jdGlvbj4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIHJlbGVhc2luZyB0aGUgY2FyZCBpbnN0YW5jZSwgeW91IGNhbiBjYWxsIHNpbXBseQotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiBBcyBtZW50aW9uZWQgZWFybGllciwgYWxsCi0gICAgICBjb21wb25lbnRzIGFyZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgY2FsbC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBcyBmdXJ0aGVyIG5vdGVzLCB0aGUgZGVzdHJ1Y3RvcnMgKGJvdGgKLSAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlPC9mdW5jdGlvbj4gYW5kCi0gICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9mcmVlPC9mdW5jdGlvbj4pIGNhbm5vdCBiZSBkZWZpbmVkIHdpdGgKLSAgICAgIHRoZSA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXgsIGJlY2F1c2UgdGhleSBtYXkgYmUKLSAgICAgIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciwgdG9vLCBhdCB0aGUgZmFsc2UgcGF0aC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgRm9yIGEgZGV2aWNlIHdoaWNoIGFsbG93cyBob3RwbHVnZ2luZywgeW91IGNhbiB1c2UKLSAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkPC9mdW5jdGlvbj4uICBUaGlzIG9uZSB3aWxsCi0gICAgICBwb3N0cG9uZSB0aGUgZGVzdHJ1Y3Rpb24gdW50aWwgYWxsIGRldmljZXMgYXJlIGNsb3NlZC4KLSAgICAgIDwvcGFyYT4KLQotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50ICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0icGNpLXJlc291cmNlIj4KLSAgICA8dGl0bGU+UENJIFJlc291cmNlIE1hbmFnZW1lbnQ8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1leGFtcGxlIj4KLSAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhpcyBzZWN0aW9uLCB3ZSdsbCBjb21wbGV0ZSB0aGUgY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciwKLSAgICAgIGRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsCi0gICAgICBiZWxvdy4gCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0gICAgICAgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50IEV4YW1wbGU8L3RpdGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwIHsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaTsKLQotICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydDsKLSAgICAgICAgICBpbnQgaXJxOwotICB9OwotCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9mcmVlKHN0cnVjdCBteWNoaXAgKmNoaXApCi0gIHsKLSAgICAgICAgICAvKiBkaXNhYmxlIGhhcmR3YXJlIGhlcmUgaWYgYW55ICovCi0gICAgICAgICAgLi4uLiAvKiAobm90IGltcGxlbWVudGVkIGluIHRoaXMgZG9jdW1lbnQpICovCi0KLSAgICAgICAgICAvKiByZWxlYXNlIHRoZSBpcnEgKi8KLSAgICAgICAgICBpZiAoY2hpcC0+aXJxID49IDApCi0gICAgICAgICAgICAgICAgICBmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwotICAgICAgICAgIC8qIHJlbGVhc2UgdGhlIEkvTyBwb3J0cyAmIG1lbW9yeSAqLwotICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKLSAgICAgICAgICAvKiBkaXNhYmxlIHRoZSBQQ0kgZW50cnkgKi8KLSAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKLSAgICAgICAgICAvKiByZWxlYXNlIHRoZSBkYXRhICovCi0gICAgICAgICAga2ZyZWUoY2hpcCk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yICovCi0gIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqKnJjaGlwKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKLSAgICAgICAgICBpbnQgZXJyOwotICAgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewotICAgICAgICAgICAgICAgICAuZGV2X2ZyZWUgPSBzbmRfbXljaGlwX2Rldl9mcmVlLAotICAgICAgICAgIH07Ci0KLSAgICAgICAgICAqcmNoaXAgPSBOVUxMOwotCi0gICAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgUENJIGVudHJ5ICovCi0gICAgICAgICAgZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgLyogY2hlY2sgUENJIGF2YWlsYWJpbGl0eSAoMjhiaXQgRE1BKSAqLwotICAgICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAotICAgICAgICAgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7Ci0gICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBzdHVmZiAqLwotICAgICAgICAgIGNoaXAtPmNhcmQgPSBjYXJkOwotICAgICAgICAgIGNoaXAtPnBjaSA9IHBjaTsKLSAgICAgICAgICBjaGlwLT5pcnEgPSAtMTsKLQotICAgICAgICAgIC8qICgxKSBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwotICAgICAgICAgIGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpOwotICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBrZnJlZShjaGlwKTsKLSAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotICAgICAgICAgIGlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX215Y2hpcF9pbnRlcnJ1cHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCAiTXkgQ2hpcCIsIGNoaXApKSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOwotICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2hpcC0+aXJxID0gcGNpLT5pcnE7Ci0KLSAgICAgICAgICAvKiAoMikgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoaXAgaGFyZHdhcmUgKi8KLSAgICAgICAgICAuLi4uIC8qICAgKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGRvY3VtZW50KSAqLwotCi0gICAgICAgICAgZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7Ci0KLSAgICAgICAgICAqcmNoaXAgPSBjaGlwOwotICAgICAgICAgIHJldHVybiAwOwotICB9ICAgICAgICAKLQotICAvKiBQQ0kgSURzICovCi0gIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdID0gewotICAgICAgICAgIHsgUENJX1ZFTkRPUl9JRF9GT08sIFBDSV9ERVZJQ0VfSURfQkFSLAotICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgeyAwLCB9Ci0gIH07Ci0gIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfbXljaGlwX2lkcyk7Ci0KLSAgLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCi0gIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7Ci0gICAgICAgICAgLm5hbWUgPSAiTXkgT3duIENoaXAiLAotICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teWNoaXBfaWRzLAotICAgICAgICAgIC5wcm9iZSA9IHNuZF9teWNoaXBfcHJvYmUsCi0gICAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9teWNoaXBfcmVtb3ZlKSwKLSAgfTsKLQotICAvKiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KLSAgc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX215Y2hpcF9pbml0KHZvaWQpCi0gIHsKLSAgICAgICAgICByZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLSAgfQotCi0gIC8qIG1vZHVsZSBjbGVhbiB1cCAqLwotICBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX215Y2hpcF9leGl0KHZvaWQpCi0gIHsKLSAgICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Ci0gIH0KLQotICBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbXljaGlwX2luaXQpCi0gIG1vZHVsZV9leGl0KGFsc2FfY2FyZF9teWNoaXBfZXhpdCkKLQotICBFWFBPUlRfTk9fU1lNQk9MUzsgLyogZm9yIG9sZCBrZXJuZWxzIG9ubHkgKi8KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLXNvbWUtaGFmdGFzIj4KLSAgICAgIDx0aXRsZT5Tb21lIEhhZnRhJ3M8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIFBDSSByZXNvdXJjZXMgaXMgZG9uZSBpbiB0aGUKLSAgICAgIDxmdW5jdGlvbj5wcm9iZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIGFuZCB1c3VhbGx5IGFuIGV4dHJhCi0gICAgICA8ZnVuY3Rpb24+eHh4X2NyZWF0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgd3JpdHRlbiBmb3IgdGhpcwotICAgICAgcHVycG9zZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBjYXNlIG9mIFBDSSBkZXZpY2VzLCB5b3UgZmlyc3QgaGF2ZSB0byBjYWxsCi0gICAgICB0aGUgPGZ1bmN0aW9uPnBjaV9lbmFibGVfZGV2aWNlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBiZWZvcmUKLSAgICAgIGFsbG9jYXRpbmcgcmVzb3VyY2VzLiBBbHNvLCB5b3UgbmVlZCB0byBzZXQgdGhlIHByb3BlciBQQ0kgRE1BCi0gICAgICBtYXNrIHRvIGxpbWl0IHRoZSBhY2Nlc3NlZCBJL08gcmFuZ2UuIEluIHNvbWUgY2FzZXMsIHlvdSBtaWdodAotICAgICAgbmVlZCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfc2V0X21hc3RlcigpPC9mdW5jdGlvbj4gZnVuY3Rpb24sCi0gICAgICB0b28uCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBTdXBwb3NlIHRoZSAyOGJpdCBtYXNrLCBhbmQgdGhlIGNvZGUgdG8gYmUgYWRkZWQgd291bGQgYmUgbGlrZToKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpOwotICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICByZXR1cm4gZXJyOwotICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKLSAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKLSAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7Ci0gICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0gICAgICAgICAgcmV0dXJuIC1FTlhJTzsKLSAgfQotICAKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtcmVzb3VyY2UtYWxsb2NhdGlvbiI+Ci0gICAgICA8dGl0bGU+UmVzb3VyY2UgQWxsb2NhdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgSS9PIHBvcnRzIGFuZCBpcnFzIGlzIGRvbmUgdmlhIHN0YW5kYXJkIGtlcm5lbAotICAgICAgZnVuY3Rpb25zLiBVbmxpa2UgQUxTQSB2ZXIuMC41LnguLCB0aGVyZSBhcmUgbm8gaGVscGVycyBmb3IKLSAgICAgIHRoYXQuIEFuZCB0aGVzZSByZXNvdXJjZXMgbXVzdCBiZSByZWxlYXNlZCBpbiB0aGUgZGVzdHJ1Y3RvcgotICAgICAgZnVuY3Rpb24gKHNlZSBiZWxvdykuIEFsc28sIG9uIEFMU0EgMC45LngsIHlvdSBkb24ndCBuZWVkIHRvCi0gICAgICBhbGxvY2F0ZSAocHNldWRvLSlETUEgZm9yIFBDSSBsaWtlIGluIEFMU0EgMC41LnguCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3cgYXNzdW1lIHRoYXQgdGhlIFBDSSBkZXZpY2UgaGFzIGFuIEkvTyBwb3J0IHdpdGggOCBieXRlcwotICAgICAgICBhbmQgYW4gaW50ZXJydXB0LiBUaGVuIHN0cnVjdCA8c3RydWN0bmFtZT5teWNoaXA8L3N0cnVjdG5hbWU+IHdpbGwgaGF2ZSB0aGUKLSAgICAgICAgZm9sbG93aW5nIGZpZWxkczoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwIHsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0KLSAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQ7Ci0gICAgICAgICAgaW50IGlycTsKLSAgfTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIGFuIEkvTyBwb3J0IChhbmQgYWxzbyBhIG1lbW9yeSByZWdpb24pLCB5b3UgbmVlZCB0byBoYXZlCi0gICAgICB0aGUgcmVzb3VyY2UgcG9pbnRlciBmb3IgdGhlIHN0YW5kYXJkIHJlc291cmNlIG1hbmFnZW1lbnQuIEZvcgotICAgICAgYW4gaXJxLCB5b3UgaGF2ZSB0byBrZWVwIG9ubHkgdGhlIGlycSBudW1iZXIgKGludGVnZXIpLiBCdXQgeW91Ci0gICAgICBuZWVkIHRvIGluaXRpYWxpemUgdGhpcyBudW1iZXIgYXMgLTEgYmVmb3JlIGFjdHVhbCBhbGxvY2F0aW9uLAotICAgICAgc2luY2UgaXJxIDAgaXMgdmFsaWQuIFRoZSBwb3J0IGFkZHJlc3MgYW5kIGl0cyByZXNvdXJjZSBwb2ludGVyCi0gICAgICBjYW4gYmUgaW5pdGlhbGl6ZWQgYXMgbnVsbCBieQotICAgICAgPGZ1bmN0aW9uPmt6YWxsb2MoKTwvZnVuY3Rpb24+IGF1dG9tYXRpY2FsbHksIHNvIHlvdQotICAgICAgZG9uJ3QgaGF2ZSB0byB0YWtlIGNhcmUgb2YgcmVzZXR0aW5nIHRoZW0uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgYW4gSS9PIHBvcnQgaXMgZG9uZSBsaWtlIHRoaXM6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJNeSBDaGlwIik7Ci0gIGlmIChlcnIgPCAwKSB7IAotICAgICAgICAgIGtmcmVlKGNoaXApOwotICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gIH0KLSAgY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICA8IS0tIG9ic29sZXRlIC0tPgotICAgICAgICBJdCB3aWxsIHJlc2VydmUgdGhlIEkvTyBwb3J0IHJlZ2lvbiBvZiA4IGJ5dGVzIG9mIHRoZSBnaXZlbgotICAgICAgUENJIGRldmljZS4gVGhlIHJldHVybmVkIHZhbHVlLCBjaGlwLSZndDtyZXNfcG9ydCwgaXMgYWxsb2NhdGVkCi0gICAgICB2aWEgPGZ1bmN0aW9uPmttYWxsb2MoKTwvZnVuY3Rpb24+IGJ5Ci0gICAgICA8ZnVuY3Rpb24+cmVxdWVzdF9yZWdpb24oKTwvZnVuY3Rpb24+LiBUaGUgcG9pbnRlciBtdXN0IGJlCi0gICAgICByZWxlYXNlZCB2aWEgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiwgYnV0IHRoZXJlIGlzIGEKLSAgICAgIHByb2JsZW0gd2l0aCB0aGlzLiBUaGlzIGlzc3VlIHdpbGwgYmUgZXhwbGFpbmVkIGxhdGVyLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgYW4gaW50ZXJydXB0IHNvdXJjZSBpcyBkb25lIGxpa2UgdGhpczoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAotICAgICAgICAgICAgICAgICAgSVJRRl9TSEFSRUQsICJNeSBDaGlwIiwgY2hpcCkpIHsKLSAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOwotICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKLSAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICB9Ci0gIGNoaXAtPmlycSA9IHBjaS0+aXJxOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgd2hlcmUgPGZ1bmN0aW9uPnNuZF9teWNoaXBfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPiBpcyB0aGUKLSAgICAgIGludGVycnVwdCBoYW5kbGVyIGRlZmluZWQgPGxpbmsKLSAgICAgIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPjxjaXRldGl0bGU+bGF0ZXI8L2NpdGV0aXRsZT48L2xpbms+LgotICAgICAgTm90ZSB0aGF0IGNoaXAtJmd0O2lycSBzaG91bGQgYmUgZGVmaW5lZAotICAgICAgb25seSB3aGVuIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4gc3VjY2VlZGVkLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIE9uIHRoZSBQQ0kgYnVzLCBpbnRlcnJ1cHRzIGNhbiBiZSBzaGFyZWQuIFRodXMsCi0gICAgICA8Y29uc3RhbnQ+SVJRRl9TSEFSRUQ8L2NvbnN0YW50PiBpcyB1c2VkIGFzIHRoZSBpbnRlcnJ1cHQgZmxhZyBvZgotICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfaXJxKCk8L2Z1bmN0aW9uPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IGlzIHRoZQotICAgICAgZGF0YSBwb2ludGVyIHBhc3NlZCB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFVzdWFsbHksIHRoZQotICAgICAgY2hpcC1zcGVjaWZpYyByZWNvcmQgaXMgdXNlZCBmb3IgdGhhdCwgYnV0IHlvdSBjYW4gdXNlIHdoYXQgeW91Ci0gICAgICBsaWtlLCB0b28uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSSB3b24ndCBnaXZlIGRldGFpbHMgYWJvdXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGF0IHRoaXMKLSAgICAgICAgcG9pbnQsIGJ1dCBhdCBsZWFzdCBpdHMgYXBwZWFyYW5jZSBjYW4gYmUgZXhwbGFpbmVkIG5vdy4gVGhlCi0gICAgICAgIGludGVycnVwdCBoYW5kbGVyIGxvb2tzIHVzdWFsbHkgbGlrZSB0aGUgZm9sbG93aW5nOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX215Y2hpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGRldl9pZDsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE5vdyBsZXQncyB3cml0ZSB0aGUgY29ycmVzcG9uZGluZyBkZXN0cnVjdG9yIGZvciB0aGUgcmVzb3VyY2VzCi0gICAgICBhYm92ZS4gVGhlIHJvbGUgb2YgZGVzdHJ1Y3RvciBpcyBzaW1wbGU6IGRpc2FibGUgdGhlIGhhcmR3YXJlCi0gICAgICAoaWYgYWxyZWFkeSBhY3RpdmF0ZWQpIGFuZCByZWxlYXNlIHRoZSByZXNvdXJjZXMuIFNvIGZhciwgd2UKLSAgICAgIGhhdmUgbm8gaGFyZHdhcmUgcGFydCwgc28gdGhlIGRpc2FibGluZyBjb2RlIGlzIG5vdCB3cml0dGVuIGhlcmUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzLCB0aGUgPHF1b3RlPmNoZWNrLWFuZC1yZWxlYXNlPC9xdW90ZT4KLSAgICAgICAgbWV0aG9kIGlzIGEgc2FmZXIgd2F5LiBGb3IgdGhlIGludGVycnVwdCwgZG8gbGlrZSB0aGlzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBpZiAoY2hpcC0+aXJxID49IDApCi0gICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIFNpbmNlIHRoZSBpcnEgbnVtYmVyIGNhbiBzdGFydCBmcm9tIDAsIHlvdSBzaG91bGQgaW5pdGlhbGl6ZQotICAgICAgICBjaGlwLSZndDtpcnEgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIChlLmcuIC0xKSwgc28gdGhhdCB5b3UgY2FuCi0gICAgICAgIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgaXJxIG51bWJlciBhcyBhYm92ZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoZW4geW91IHJlcXVlc3RlZCBJL08gcG9ydHMgb3IgbWVtb3J5IHJlZ2lvbnMgdmlhCi0JPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4gb3IKLQk8ZnVuY3Rpb24+cGNpX3JlcXVlc3RfcmVnaW9ucygpPC9mdW5jdGlvbj4gbGlrZSBpbiB0aGlzIGV4YW1wbGUsCi0JcmVsZWFzZSB0aGUgcmVzb3VyY2UocykgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sCi0JPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbigpPC9mdW5jdGlvbj4gb3IKLQk8ZnVuY3Rpb24+cGNpX3JlbGVhc2VfcmVnaW9ucygpPC9mdW5jdGlvbj4uCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotCVdoZW4geW91IHJlcXVlc3RlZCBtYW51YWxseSB2aWEgPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPgotCW9yIDxmdW5jdGlvbj5yZXF1ZXN0X21lbV9yZWdpb248L2Z1bmN0aW9uPiwgeW91IGNhbiByZWxlYXNlIGl0IHZpYQotCTxmdW5jdGlvbj5yZWxlYXNlX3Jlc291cmNlKCk8L2Z1bmN0aW9uPi4gIFN1cHBvc2UgdGhhdCB5b3Uga2VlcAotCXRoZSByZXNvdXJjZSBwb2ludGVyIHJldHVybmVkIGZyb20gPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPgotCWluIGNoaXAtJmd0O3Jlc19wb3J0LCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUgbG9va3MgbGlrZToKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICByZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIERvbid0IGZvcmdldCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+Ci0gICAgICBiZWZvcmUgdGhlIGVuZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFuZCBmaW5hbGx5LCByZWxlYXNlIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZC4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBrZnJlZShjaGlwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEFnYWluLCByZW1lbWJlciB0aGF0IHlvdSBjYW5ub3QKLSAgICAgIHVzZSB0aGUgPHBhcmFtZXRlcj5fX2RldmV4aXQ8L3BhcmFtZXRlcj4gcHJlZml4IGZvciB0aGlzIGRlc3RydWN0b3IuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFdlIGRpZG4ndCBpbXBsZW1lbnQgdGhlIGhhcmR3YXJlIGRpc2FibGluZyBwYXJ0IGluIHRoZSBhYm92ZS4KLSAgICAgIElmIHlvdSBuZWVkIHRvIGRvIHRoaXMsIHBsZWFzZSBub3RlIHRoYXQgdGhlIGRlc3RydWN0b3IgbWF5IGJlCi0gICAgICBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGlwIGlzIGNvbXBsZXRlZC4KLSAgICAgIEl0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIGEgZmxhZyB0byBza2lwIGhhcmR3YXJlIGRpc2FibGluZwotICAgICAgaWYgdGhlIGhhcmR3YXJlIHdhcyBub3QgaW5pdGlhbGl6ZWQgeWV0LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFdoZW4gdGhlIGNoaXAtZGF0YSBpcyBhc3NpZ25lZCB0byB0aGUgY2FyZCB1c2luZwotICAgICAgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiB3aXRoCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfREVWX0xPV0xFTFZFTDwvY29uc3RhbnQ+ICwgaXRzIGRlc3RydWN0b3IgaXMgCi0gICAgICBjYWxsZWQgYXQgdGhlIGxhc3QuICBUaGF0IGlzLCBpdCBpcyBhc3N1cmVkIHRoYXQgYWxsIG90aGVyCi0gICAgICBjb21wb25lbnRzIGxpa2UgUENNcyBhbmQgY29udHJvbHMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuCi0gICAgICBZb3UgZG9uJ3QgaGF2ZSB0byBzdG9wIFBDTXMsIGV0Yy4gZXhwbGljaXRseSwgYnV0IGp1c3QKLSAgICAgIGNhbGwgbG93LWxldmVsIGhhcmR3YXJlIHN0b3BwaW5nLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIG1hbmFnZW1lbnQgb2YgYSBtZW1vcnktbWFwcGVkIHJlZ2lvbiBpcyBhbG1vc3QgYXMgc2FtZSBhcwotICAgICAgICB0aGUgbWFuYWdlbWVudCBvZiBhbiBJL08gcG9ydC4gWW91J2xsIG5lZWQgdGhyZWUgZmllbGRzIGxpa2UKLSAgICAgICAgdGhlIGZvbGxvd2luZzogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IG15Y2hpcCB7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW9iYXNlX3BoeXM7Ci0gICAgICAgICAgdm9pZCBfX2lvbWVtICppb2Jhc2VfdmlydDsKLSAgfTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIGFuZCB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBsaWtlIGJlbG93OgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIGlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJNeSBDaGlwIikpIDwgMCkgewotICAgICAgICAgIGtmcmVlKGNoaXApOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gIH0KLSAgY2hpcC0+aW9iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKLSAgY2hpcC0+aW9iYXNlX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUoY2hpcC0+aW9iYXNlX3BoeXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpLCAwKSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgCi0gICAgICAgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkZXN0cnVjdG9yIHdvdWxkIGJlOgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9mcmVlKHN0cnVjdCBteWNoaXAgKmNoaXApCi0gIHsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgaWYgKGNoaXAtPmlvYmFzZV92aXJ0KQotICAgICAgICAgICAgICAgICAgaW91bm1hcChjaGlwLT5pb2Jhc2VfdmlydCk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKLSAgICAgICAgICAuLi4uCi0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1kZXZpY2Utc3RydWN0Ij4KLSAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gb2YgRGV2aWNlIFN0cnVjdDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLQlBdCBzb21lIHBvaW50LCB0eXBpY2FsbHkgYWZ0ZXIgY2FsbGluZyA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+LAotCXlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBzdHJ1Y3QgPHN0cnVjdG5hbWU+ZGV2aWNlPC9zdHJ1Y3RuYW1lPiBvZiB0aGUgY2hpcAotCXlvdSdyZSBoYW5kbGluZyBmb3IgdWRldiBhbmQgY28uICBBTFNBIHByb3ZpZGVzIGEgbWFjcm8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aAotCW9sZGVyIGtlcm5lbHMuICBTaW1wbHkgY2FsbCBsaWtlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCXNvIHRoYXQgaXQgc3RvcmVzIHRoZSBQQ0kncyBkZXZpY2UgcG9pbnRlciB0byB0aGUgY2FyZC4gIFRoaXMgd2lsbCBiZQotCXJlZmVycmVkIGJ5IEFMU0EgY29yZSBmdW5jdGlvbnMgbGF0ZXIgd2hlbiB0aGUgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCUluIHRoZSBjYXNlIG9mIG5vbi1QQ0ksIHBhc3MgdGhlIHByb3BlciBkZXZpY2Ugc3RydWN0IHBvaW50ZXIgb2YgdGhlIEJVUwotCWluc3RlYWQuICAoSW4gdGhlIGNhc2Ugb2YgbGVnYWN5IElTQSB3aXRob3V0IFBuUCwgeW91IGRvbid0IGhhdmUgdG8gZG8KLQlhbnl0aGluZy4pCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj4KLSAgICAgIDx0aXRsZT5QQ0kgRW50cmllczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU28gZmFyLCBzbyBnb29kLiBMZXQncyBmaW5pc2ggdGhlIG1pc3NpbmcgUENJCi0gICAgICBzdHVmZi4gQXQgZmlyc3QsIHdlIG5lZWQgYQotICAgICAgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gdGFibGUgZm9yIHRoaXMKLSAgICAgIGNoaXBzZXQuIEl0J3MgYSB0YWJsZSBvZiBQQ0kgdmVuZG9yL2RldmljZSBJRCBudW1iZXIsIGFuZCBzb21lCi0gICAgICBtYXNrcy4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBGb3IgZXhhbXBsZSwKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKLSAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKLSAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHsgMCwgfQotICB9OwotICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZHMgb2YKLSAgICAgIHRoZSA8c3RydWN0bmFtZT5wY2lfZGV2aWNlX2lkPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgYXJlIHRoZSB2ZW5kb3IgYW5kCi0gICAgICBkZXZpY2UgSURzLiBJZiB5b3UgaGF2ZSBubyByZWFzb24gdG8gZmlsdGVyIHRoZSBtYXRjaGluZwotICAgICAgZGV2aWNlcywgeW91IGNhbiBsZWF2ZSB0aGUgcmVtYWluaW5nIGZpZWxkcyBhcyBhYm92ZS4gVGhlIGxhc3QKLSAgICAgIGZpZWxkIG9mIHRoZSA8c3RydWN0bmFtZT5wY2lfZGV2aWNlX2lkPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgY29udGFpbnMKLSAgICAgIHByaXZhdGUgZGF0YSBmb3IgdGhpcyBlbnRyeS4gWW91IGNhbiBzcGVjaWZ5IGFueSB2YWx1ZSBoZXJlLCBmb3IKLSAgICAgIGV4YW1wbGUsIHRvIGRlZmluZSBzcGVjaWZpYyBvcGVyYXRpb25zIGZvciBzdXBwb3J0ZWQgZGV2aWNlIElEcy4KLSAgICAgIFN1Y2ggYW4gZXhhbXBsZSBpcyBmb3VuZCBpbiB0aGUgaW50ZWw4eDAgZHJpdmVyLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBsYXN0IGVudHJ5IG9mIHRoaXMgbGlzdCBpcyB0aGUgdGVybWluYXRvci4gWW91IG11c3QKLSAgICAgIHNwZWNpZnkgdGhpcyBhbGwtemVybyBlbnRyeS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVuLCBwcmVwYXJlIHRoZSA8c3RydWN0bmFtZT5wY2lfZHJpdmVyPC9zdHJ1Y3RuYW1lPiByZWNvcmQ6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKLSAgICAgICAgICAubmFtZSA9ICJNeSBPd24gQ2hpcCIsCi0gICAgICAgICAgLmlkX3RhYmxlID0gc25kX215Y2hpcF9pZHMsCi0gICAgICAgICAgLnByb2JlID0gc25kX215Y2hpcF9wcm9iZSwKLSAgICAgICAgICAucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX215Y2hpcF9yZW1vdmUpLAotICB9OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByb2JlPC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb25zIGhhdmUgYWxyZWFkeQotICAgICAgYmVlbiBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9ucy4KLSAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb24gc2hvdWxkCi0gICAgICBiZSBkZWZpbmVkIHdpdGggdGhlIAotICAgICAgPGZ1bmN0aW9uPl9fZGV2ZXhpdF9wKCk8L2Z1bmN0aW9uPiBtYWNybywgc28gdGhhdCBpdCdzIG5vdAotICAgICAgZGVmaW5lZCBmb3IgYnVpbHQtaW4gKGFuZCBub24taG90LXBsdWdnYWJsZSkgY2FzZS4gVGhlCi0gICAgICA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IAotICAgICAgZmllbGQgaXMgdGhlIG5hbWUgc3RyaW5nIG9mIHRoaXMgZGV2aWNlLiBOb3RlIHRoYXQgeW91IG11c3Qgbm90Ci0gICAgICB1c2UgYSBzbGFzaCA8cXVvdGU+LzwvcXVvdGU+IGluIHRoaXMgc3RyaW5nLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFuZCBhdCBsYXN0LCB0aGUgbW9kdWxlIGVudHJpZXM6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX215Y2hpcF9pbml0KHZvaWQpCi0gIHsKLSAgICAgICAgICByZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbXljaGlwX2V4aXQodm9pZCkKLSAgewotICAgICAgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLSAgfQotCi0gIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9teWNoaXBfaW5pdCkKLSAgbW9kdWxlX2V4aXQoYWxzYV9jYXJkX215Y2hpcF9leGl0KQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3RlIHRoYXQgdGhlc2UgbW9kdWxlIGVudHJpZXMgYXJlIHRhZ2dlZCB3aXRoCi0gICAgICA8cGFyYW1ldGVyPl9faW5pdDwvcGFyYW1ldGVyPiBhbmQgCi0gICAgICA8cGFyYW1ldGVyPl9fZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXhlcywgbm90Ci0gICAgICA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBub3IKLSAgICAgIDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgT2gsIG9uZSB0aGluZyB3YXMgZm9yZ290dGVuLiBJZiB5b3UgaGF2ZSBubyBleHBvcnRlZCBzeW1ib2xzLAotICAgICAgICB5b3UgbmVlZCB0byBkZWNsYXJlIGl0IGluIDIuMiBvciAyLjQga2VybmVscyAoaXQncyBub3QgbmVjZXNzYXJ5IGluIDIuNiBrZXJuZWxzKS4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBFWFBPUlRfTk9fU1lNQk9MUzsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIFRoYXQncyBhbGwhCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFBDTSBJbnRlcmZhY2UgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJwY20taW50ZXJmYWNlIj4KLSAgICA8dGl0bGU+UENNIEludGVyZmFjZTwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1nZW5lcmFsIj4KLSAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgUENNIG1pZGRsZSBsYXllciBvZiBBTFNBIGlzIHF1aXRlIHBvd2VyZnVsIGFuZCBpdCBpcyBvbmx5Ci0gICAgICBuZWNlc3NhcnkgZm9yIGVhY2ggZHJpdmVyIHRvIGltcGxlbWVudCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucwotICAgICAgdG8gYWNjZXNzIGl0cyBoYXJkd2FyZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEZvciBhY2Nlc3NpbmcgdG8gdGhlIFBDTSBsYXllciwgeW91IG5lZWQgdG8gaW5jbHVkZQotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPiBmaXJzdC4gSW4gYWRkaXRpb24sCi0gICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbV9wYXJhbXMuaCZndDs8L2ZpbGVuYW1lPiBtaWdodCBiZSBuZWVkZWQKLSAgICAgIGlmIHlvdSBhY2Nlc3MgdG8gc29tZSBmdW5jdGlvbnMgcmVsYXRlZCB3aXRoIGh3X3BhcmFtLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEVhY2ggY2FyZCBkZXZpY2UgY2FuIGhhdmUgdXAgdG8gZm91ciBwY20gaW5zdGFuY2VzLiBBIHBjbQotICAgICAgaW5zdGFuY2UgY29ycmVzcG9uZHMgdG8gYSBwY20gZGV2aWNlIGZpbGUuIFRoZSBsaW1pdGF0aW9uIG9mCi0gICAgICBudW1iZXIgb2YgaW5zdGFuY2VzIGNvbWVzIG9ubHkgZnJvbSB0aGUgYXZhaWxhYmxlIGJpdCBzaXplIG9mCi0gICAgICB0aGUgTGludXgncyBkZXZpY2UgbnVtYmVycy4gT25jZSB3aGVuIDY0Yml0IGRldmljZSBudW1iZXIgaXMKLSAgICAgIHVzZWQsIHdlJ2xsIGhhdmUgbW9yZSBwY20gaW5zdGFuY2VzIGF2YWlsYWJsZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBIHBjbSBpbnN0YW5jZSBjb25zaXN0cyBvZiBwY20gcGxheWJhY2sgYW5kIGNhcHR1cmUgc3RyZWFtcywKLSAgICAgIGFuZCBlYWNoIHBjbSBzdHJlYW0gY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgcGNtIHN1YnN0cmVhbXMuIFNvbWUKLSAgICAgIHNvdW5kY2FyZHMgc3VwcG9ydCBtdWx0aXBsZSBwbGF5YmFjayBmdW5jdGlvbnMuIEZvciBleGFtcGxlLAotICAgICAgZW11MTBrMSBoYXMgYSBQQ00gcGxheWJhY2sgb2YgMzIgc3RlcmVvIHN1YnN0cmVhbXMuIEluIHRoaXMgY2FzZSwgYXQKLSAgICAgIGVhY2ggb3BlbiwgYSBmcmVlIHN1YnN0cmVhbSBpcyAodXN1YWxseSkgYXV0b21hdGljYWxseSBjaG9zZW4KLSAgICAgIGFuZCBvcGVuZWQuIE1lYW53aGlsZSwgd2hlbiBvbmx5IG9uZSBzdWJzdHJlYW0gZXhpc3RzIGFuZCBpdCB3YXMKLSAgICAgIGFscmVhZHkgb3BlbmVkLCB0aGUgc3VjY2Vzc2Z1bCBvcGVuIHdpbGwgZWl0aGVyIGJsb2NrCi0gICAgICBvciBlcnJvciB3aXRoIDxjb25zdGFudD5FQUdBSU48L2NvbnN0YW50PiBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICBmaWxlIG9wZW4gbW9kZS4gQnV0IHlvdSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgc3VjaCBkZXRhaWxzIGluIHlvdXIKLSAgICAgIGRyaXZlci4gVGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2Ygc3VjaCB3b3JrLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWV4YW1wbGUiPgotICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIGV4YW1wbGUgY29kZSBiZWxvdyBkb2VzIG5vdCBpbmNsdWRlIGFueSBoYXJkd2FyZSBhY2Nlc3MKLSAgICAgIHJvdXRpbmVzIGJ1dCBzaG93cyBvbmx5IHRoZSBza2VsZXRvbiwgaG93IHRvIGJ1aWxkIHVwIHRoZSBQQ00KLSAgICAgIGludGVyZmFjZXMuCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0gICAgICAgICAgPHRpdGxlPlBDTSBFeGFtcGxlIENvZGU8L3RpdGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAjaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0gIC4uLi4KLQotICAvKiBoYXJkd2FyZSBkZWZpbml0aW9uICovCi0gIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXljaGlwX3BsYXliYWNrX2h3ID0gewotICAgICAgICAgIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAotICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLSAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0gICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCi0gICAgICAgICAgLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLSAgICAgICAgICAucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCi0gICAgICAgICAgLnJhdGVfbWluID0gICAgICAgICA4MDAwLAotICAgICAgICAgIC5yYXRlX21heCA9ICAgICAgICAgNDgwMDAsCi0gICAgICAgICAgLmNoYW5uZWxzX21pbiA9ICAgICAyLAotICAgICAgICAgIC5jaGFubmVsc19tYXggPSAgICAgMiwKLSAgICAgICAgICAuYnVmZmVyX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWluID0gNDA5NiwKLSAgICAgICAgICAucGVyaW9kX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RzX21pbiA9ICAgICAgMSwKLSAgICAgICAgICAucGVyaW9kc19tYXggPSAgICAgIDEwMjQsCi0gIH07Ci0KLSAgLyogaGFyZHdhcmUgZGVmaW5pdGlvbiAqLwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX215Y2hpcF9jYXB0dXJlX2h3ID0gewotICAgICAgICAgIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAotICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLSAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0gICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCi0gICAgICAgICAgLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLSAgICAgICAgICAucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCi0gICAgICAgICAgLnJhdGVfbWluID0gICAgICAgICA4MDAwLAotICAgICAgICAgIC5yYXRlX21heCA9ICAgICAgICAgNDgwMDAsCi0gICAgICAgICAgLmNoYW5uZWxzX21pbiA9ICAgICAyLAotICAgICAgICAgIC5jaGFubmVsc19tYXggPSAgICAgMiwKLSAgICAgICAgICAuYnVmZmVyX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWluID0gNDA5NiwKLSAgICAgICAgICAucGVyaW9kX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RzX21pbiA9ICAgICAgMSwKLSAgICAgICAgICAucGVyaW9kc19tYXggPSAgICAgIDEwMjQsCi0gIH07Ci0KLSAgLyogb3BlbiBjYWxsYmFjayAqLwotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQotICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsKLSAgICAgICAgICAvKiBtb3JlIGhhcmR3YXJlLWluaXRpYWxpemF0aW9uIHdpbGwgYmUgZG9uZSBoZXJlICovCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogY2xvc2UgY2FsbGJhY2sgKi8KLSAgc3RhdGljIGludCBzbmRfbXljaGlwX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSAgICAgICAgICAvKiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZXMgd2lsbCBiZSBoZXJlICovCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHJldHVybiAwOwotCi0gIH0KLQotICAvKiBvcGVuIGNhbGxiYWNrICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0KLSAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfY2FwdHVyZV9odzsKLSAgICAgICAgICAvKiBtb3JlIGhhcmR3YXJlLWluaXRpYWxpemF0aW9uIHdpbGwgYmUgZG9uZSBoZXJlICovCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogY2xvc2UgY2FsbGJhY2sgKi8KLSAgc3RhdGljIGludCBzbmRfbXljaGlwX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgICAgIC8qIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlcyB3aWxsIGJlIGhlcmUgKi8KLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgfQotCi0gIC8qIGh3X3BhcmFtcyBjYWxsYmFjayAqLwotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLSAgewotICAgICAgICAgIHJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Ci0gIH0KLQotICAvKiBod19mcmVlIGNhbGxiYWNrICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Ci0gIH0KLQotICAvKiBwcmVwYXJlIGNhbGxiYWNrICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQotICAgICAgICAgIC8qIHNldCB1cCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICogZm9yIGV4YW1wbGUuLi4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9mb3JtYXQoY2hpcCwgcnVudGltZS0+Zm9ybWF0KTsKLSAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9yYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOwotICAgICAgICAgIG15Y2hpcF9zZXRfY2hhbm5lbHMoY2hpcCwgcnVudGltZS0+Y2hhbm5lbHMpOwotICAgICAgICAgIG15Y2hpcF9zZXRfZG1hX3NldHVwKGNoaXAsIHJ1bnRpbWUtPmRtYV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPmJ1ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPnBlcmlvZF9zaXplKTsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIHRyaWdnZXIgY2FsbGJhY2sgKi8KLSAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCkKLSAgewotICAgICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLSAgICAgICAgICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdGFydCB0aGUgUENNIGVuZ2luZSAqLwotICAgICAgICAgICAgICAgICAgLi4uLgotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotICAgICAgICAgICAgICAgICAgLyogZG8gc29tZXRoaW5nIHRvIHN0b3AgdGhlIFBDTSBlbmdpbmUgKi8KLSAgICAgICAgICAgICAgICAgIC4uLi4KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICB9Ci0gIH0KLQotICAvKiBwb2ludGVyIGNhbGxiYWNrICovCi0gIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotICBzbmRfbXljaGlwX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSAgICAgICAgICB1bnNpZ25lZCBpbnQgY3VycmVudF9wdHI7Ci0KLSAgICAgICAgICAvKiBnZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9pbnRlciAqLwotICAgICAgICAgIGN1cnJlbnRfcHRyID0gbXljaGlwX2dldF9od19wb2ludGVyKGNoaXApOwotICAgICAgICAgIHJldHVybiBjdXJyZW50X3B0cjsKLSAgfQotCi0gIC8qIG9wZXJhdG9ycyAqLwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9teWNoaXBfcGxheWJhY2tfb3BzID0gewotICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfcGxheWJhY2tfb3BlbiwKLSAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX2Nsb3NlLAotICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAotICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKLSAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAotICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCi0gICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKLSAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAotICB9OwotCi0gIC8qIG9wZXJhdG9ycyAqLwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9teWNoaXBfY2FwdHVyZV9vcHMgPSB7Ci0gICAgICAgICAgLm9wZW4gPSAgICAgICAgc25kX215Y2hpcF9jYXB0dXJlX29wZW4sCi0gICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9jYXB0dXJlX2Nsb3NlLAotICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAotICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKLSAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAotICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCi0gICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKLSAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAotICB9OwotCi0gIC8qCi0gICAqICBkZWZpbml0aW9ucyBvZiBjYXB0dXJlIGFyZSBvbWl0dGVkIGhlcmUuLi4KLSAgICovCi0KLSAgLyogY3JlYXRlIGEgcGNtIGRldmljZSAqLwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20oc3RydWN0IG15Y2hpcCAqY2hpcCkKLSAgewotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207Ci0gICAgICAgICAgaW50IGVycjsKLQotICAgICAgICAgIGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwgJnBjbSk7Ci0gICAgICAgICAgaWYgKGVyciA8IDApIAotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0gICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKLSAgICAgICAgICBjaGlwLT5wY20gPSBwY207Ci0gICAgICAgICAgLyogc2V0IG9wZXJhdG9ycyAqLwotICAgICAgICAgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7Ci0gICAgICAgICAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9jYXB0dXJlX29wcyk7Ci0gICAgICAgICAgLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLwotICAgICAgICAgIC8qIE5PVEU6IHRoaXMgbWF5IGZhaWwgKi8KLSAgICAgICAgICBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+Ci0gICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEEgcGNtIGluc3RhbmNlIGlzIGFsbG9jYXRlZCBieSB0aGUgPGZ1bmN0aW9uPnNuZF9wY21fbmV3KCk8L2Z1bmN0aW9uPgotICAgICAgZnVuY3Rpb24uIEl0IHdvdWxkIGJlIGJldHRlciB0byBjcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgcGNtLAotICAgICAgbmFtZWx5LCAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20oc3RydWN0IG15Y2hpcCAqY2hpcCkKLSAgewotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207Ci0gICAgICAgICAgaW50IGVycjsKLQotICAgICAgICAgIGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwgJnBjbSk7Ci0gICAgICAgICAgaWYgKGVyciA8IDApIAotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0gICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKLSAgICAgICAgICBjaGlwLT5wY20gPSBwY207Ci0JICAuLi4uCi0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdGFrZXMgZm91cgotICAgICAgYXJndW1lbnRzLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciB0byB3aGljaCB0aGlzCi0gICAgICBwY20gaXMgYXNzaWduZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBJRCBzdHJpbmcuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50ICg8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+LCAwIGluIHRoZQotICAgICAgYWJvdmUpIGlzIHRoZSBpbmRleCBvZiB0aGlzIG5ldyBwY20uIEl0IGJlZ2lucyBmcm9tIHplcm8uIElmCi0gICAgICB5b3UgY3JlYXRlIG1vcmUgdGhhbiBvbmUgcGNtIGluc3RhbmNlcywgc3BlY2lmeSB0aGUKLSAgICAgIGRpZmZlcmVudCBudW1iZXJzIGluIHRoaXMgYXJndW1lbnQuIEZvciBleGFtcGxlLAotICAgICAgPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiA9IDEgZm9yIHRoZSBzZWNvbmQgUENNIGRldmljZS4gIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZvdXJ0aCBhbmQgZmlmdGggYXJndW1lbnRzIGFyZSB0aGUgbnVtYmVyIG9mIHN1YnN0cmVhbXMKLSAgICAgIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZSwgcmVzcGVjdGl2ZWx5LiBIZXJlIDEgaXMgdXNlZCBmb3IKLSAgICAgIGJvdGggYXJndW1lbnRzLiBXaGVuIG5vIHBsYXliYWNrIG9yIGNhcHR1cmUgc3Vic3RyZWFtcyBhcmUgYXZhaWxhYmxlLAotICAgICAgcGFzcyAwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSWYgYSBjaGlwIHN1cHBvcnRzIG11bHRpcGxlIHBsYXliYWNrcyBvciBjYXB0dXJlcywgeW91IGNhbgotICAgICAgc3BlY2lmeSBtb3JlIG51bWJlcnMsIGJ1dCB0aGV5IG11c3QgYmUgaGFuZGxlZCBwcm9wZXJseSBpbgotICAgICAgb3Blbi9jbG9zZSwgZXRjLiBjYWxsYmFja3MuICBXaGVuIHlvdSBuZWVkIHRvIGtub3cgd2hpY2gKLSAgICAgIHN1YnN0cmVhbSB5b3UgYXJlIHJlZmVycmluZyB0bywgdGhlbiBpdCBjYW4gYmUgb2J0YWluZWQgZnJvbQotICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21fc3Vic3RyZWFtPC9zdHJ1Y3RuYW1lPiBkYXRhIHBhc3NlZCB0byBlYWNoIGNhbGxiYWNrCi0gICAgICBhcyBmb2xsb3dzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLSAgaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFmdGVyIHRoZSBwY20gaXMgY3JlYXRlZCwgeW91IG5lZWQgdG8gc2V0IG9wZXJhdG9ycyBmb3IgZWFjaAotICAgICAgICBwY20gc3RyZWFtLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAotICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfcGxheWJhY2tfb3BzKTsKLSAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAotICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfY2FwdHVyZV9vcHMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgb3BlcmF0b3JzIGFyZSBkZWZpbmVkIHR5cGljYWxseSBsaWtlIHRoaXM6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKLSAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BjbV9vcGVuLAotICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfcGNtX2Nsb3NlLAotICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAotICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKLSAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAotICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCi0gICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKLSAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAotICB9OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgQWxsIHRoZSBjYWxsYmFja3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMiPjxjaXRldGl0bGU+Ci0gICAgICAgIE9wZXJhdG9yczwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFmdGVyIHNldHRpbmcgdGhlIG9wZXJhdG9ycywgeW91IHByb2JhYmx5IHdpbGwgd2FudCB0bwotICAgICAgICBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlci4gRm9yIHRoZSBwcmUtYWxsb2NhdGlvbiwgc2ltcGx5IGNhbGwKLSAgICAgICAgdGhlIGZvbGxvd2luZzogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBJdCB3aWxsIGFsbG9jYXRlIGEgYnVmZmVyIHVwIHRvIDY0a0IgYXMgZGVmYXVsdC4KLSAgICAgIEJ1ZmZlciBtYW5hZ2VtZW50IGRldGFpbHMgd2lsbCBiZSBkZXNjcmliZWQgaW4gdGhlIGxhdGVyIHNlY3Rpb24gPGxpbmsKLSAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5Ci0gICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBjYW4gc2V0IHNvbWUgZXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGNtCi0gICAgICAgIGluIHBjbS0mZ3Q7aW5mb19mbGFncy4KLSAgICAgICAgVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlIGRlZmluZWQgYXMKLSAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1hYWDwvY29uc3RhbnQ+IGluCi0gICAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvYXNvdW5kLmgmZ3Q7PC9maWxlbmFtZT4sIHdoaWNoIGlzIHVzZWQgZm9yCi0gICAgICAgIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9uIChkZXNjcmliZWQgbGF0ZXIpLiBXaGVuIHlvdXIgc291bmRjaGlwCi0gICAgICAgIHN1cHBvcnRzIG9ubHkgaGFsZi1kdXBsZXgsIHNwZWNpZnkgbGlrZSB0aGlzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBwY20tPmluZm9fZmxhZ3MgPSBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWDsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWRlc3RydWN0b3IiPgotICAgICAgPHRpdGxlPi4uLiBBbmQgdGhlIERlc3RydWN0b3I/PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZGVzdHJ1Y3RvciBmb3IgYSBwY20gaW5zdGFuY2UgaXMgbm90IGFsd2F5cwotICAgICAgbmVjZXNzYXJ5LiBTaW5jZSB0aGUgcGNtIGRldmljZSB3aWxsIGJlIHJlbGVhc2VkIGJ5IHRoZSBtaWRkbGUKLSAgICAgIGxheWVyIGNvZGUgYXV0b21hdGljYWxseSwgeW91IGRvbid0IGhhdmUgdG8gY2FsbCB0aGUgZGVzdHJ1Y3RvcgotICAgICAgZXhwbGljaXRseS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBkZXN0cnVjdG9yIHdvdWxkIGJlIG5lY2Vzc2FyeSBpZiB5b3UgY3JlYXRlZAotICAgICAgICBzcGVjaWFsIHJlY29yZHMgaW50ZXJuYWxseSBhbmQgbmVlZGVkIHRvIHJlbGVhc2UgdGhlbS4gSW4gc3VjaCBhCi0gICAgICAgIGNhc2UsIHNldCB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiB0bwotICAgICAgICBwY20tJmd0O3ByaXZhdGVfZnJlZTogCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0gICAgICAgICAgPHRpdGxlPlBDTSBJbnN0YW5jZSB3aXRoIGEgRGVzdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIG15Y2hpcF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fY2hpcChwY20pOwotICAgICAgICAgIC8qIGZyZWUgeW91ciBvd24gZGF0YSAqLwotICAgICAgICAgIGtmcmVlKGNoaXAtPm15X3ByaXZhdGVfcGNtX2RhdGEpOwotICAgICAgICAgIC8qIGRvIHdoYXQgeW91IGxpa2UgZWxzZSAqLwotICAgICAgICAgIC4uLi4KLSAgfQotCi0gIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfbmV3X3BjbShzdHJ1Y3QgbXljaGlwICpjaGlwKQotICB7Ci0gICAgICAgICAgc3RydWN0IHNuZF9wY20gKnBjbTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgLyogYWxsb2NhdGUgeW91ciBvd24gZGF0YSAqLwotICAgICAgICAgIGNoaXAtPm15X3ByaXZhdGVfcGNtX2RhdGEgPSBrbWFsbG9jKC4uLik7Ci0gICAgICAgICAgLyogc2V0IHRoZSBkZXN0cnVjdG9yICovCi0gICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOwotICAgICAgICAgIHBjbS0+cHJpdmF0ZV9mcmVlID0gbXljaGlwX3BjbV9mcmVlOwotICAgICAgICAgIC4uLi4KLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9leGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUiPgotICAgICAgPHRpdGxlPlJ1bnRpbWUgUG9pbnRlciAtIFRoZSBDaGVzdCBvZiBQQ00gSW5mb3JtYXRpb248L3RpdGxlPgotCTxwYXJhPgotCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbSBpcyBvcGVuZWQsIGEgUENNIHJ1bnRpbWUgaW5zdGFuY2UgaXMKLQlhbGxvY2F0ZWQgYW5kIGFzc2lnbmVkIHRvIHRoZSBzdWJzdHJlYW0uIFRoaXMgcG9pbnRlciBpcwotCWFjY2Vzc2libGUgdmlhIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3J1bnRpbWU8L2NvbnN0YW50Pi4KLQlUaGlzIHJ1bnRpbWUgcG9pbnRlciBob2xkcyBtb3N0IGluZm9ybWF0aW9uIHlvdSBuZWVkCi0JdG8gY29udHJvbCB0aGUgUENNOiB0aGUgY29weSBvZiBod19wYXJhbXMgYW5kIHN3X3BhcmFtcyBjb25maWd1cmF0aW9ucywgdGhlIGJ1ZmZlcgotCXBvaW50ZXJzLCBtbWFwIHJlY29yZHMsIHNwaW5sb2NrcywgZXRjLgotCTwvcGFyYT4KLQotCTxwYXJhPgotCVRoZSBkZWZpbml0aW9uIG9mIHJ1bnRpbWUgaW5zdGFuY2UgaXMgZm91bmQgaW4KLQk8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbS5oJmd0OzwvZmlsZW5hbWU+LiAgSGVyZSBhcmUKLSAgICAgICB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlOgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLXN0cnVjdCBfc25kX3BjbV9ydW50aW1lIHsKLQkvKiAtLSBTdGF0dXMgLS0gKi8KLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnRyaWdnZXJfbWFzdGVyOwotCXNuZF90aW1lc3RhbXBfdCB0cmlnZ2VyX3RzdGFtcDsJLyogdHJpZ2dlciB0aW1lc3RhbXAgKi8KLQlpbnQgb3ZlcnJhbmdlOwotCXNuZF9wY21fdWZyYW1lc190IGF2YWlsX21heDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBod19wdHJfYmFzZTsJLyogUG9zaXRpb24gYXQgYnVmZmVyIHJlc3RhcnQgKi8KLQlzbmRfcGNtX3VmcmFtZXNfdCBod19wdHJfaW50ZXJydXB0OyAvKiBQb3NpdGlvbiBhdCBpbnRlcnJ1cHQgdGltZSovCi0KLQkvKiAtLSBIVyBwYXJhbXMgLS0gKi8KLQlzbmRfcGNtX2FjY2Vzc190IGFjY2VzczsJLyogYWNjZXNzIG1vZGUgKi8KLQlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsJLyogU05EUlZfUENNX0ZPUk1BVF8qICovCi0Jc25kX3BjbV9zdWJmb3JtYXRfdCBzdWJmb3JtYXQ7CS8qIHN1YmZvcm1hdCAqLwotCXVuc2lnbmVkIGludCByYXRlOwkJLyogcmF0ZSBpbiBIeiAqLwotCXVuc2lnbmVkIGludCBjaGFubmVsczsJCS8qIGNoYW5uZWxzICovCi0Jc25kX3BjbV91ZnJhbWVzX3QgcGVyaW9kX3NpemU7CS8qIHBlcmlvZCBzaXplICovCi0JdW5zaWduZWQgaW50IHBlcmlvZHM7CQkvKiBwZXJpb2RzICovCi0Jc25kX3BjbV91ZnJhbWVzX3QgYnVmZmVyX3NpemU7CS8qIGJ1ZmZlciBzaXplICovCi0JdW5zaWduZWQgaW50IHRpY2tfdGltZTsJCS8qIHRpY2sgdGltZSAqLwotCXNuZF9wY21fdWZyYW1lc190IG1pbl9hbGlnbjsJLyogTWluIGFsaWdubWVudCBmb3IgdGhlIGZvcm1hdCAqLwotCXNpemVfdCBieXRlX2FsaWduOwotCXVuc2lnbmVkIGludCBmcmFtZV9iaXRzOwotCXVuc2lnbmVkIGludCBzYW1wbGVfYml0czsKLQl1bnNpZ25lZCBpbnQgaW5mbzsKLQl1bnNpZ25lZCBpbnQgcmF0ZV9udW07Ci0JdW5zaWduZWQgaW50IHJhdGVfZGVuOwotCi0JLyogLS0gU1cgcGFyYW1zIC0tICovCi0Jc3RydWN0IHRpbWVzcGVjIHRzdGFtcF9tb2RlOwkvKiBtbWFwIHRpbWVzdGFtcCBpcyB1cGRhdGVkICovCi0gIAl1bnNpZ25lZCBpbnQgcGVyaW9kX3N0ZXA7Ci0JdW5zaWduZWQgaW50IHNsZWVwX21pbjsJCS8qIG1pbiB0aWNrcyB0byBzbGVlcCAqLwotCXNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsgLyogU2lsZW5jZSBmaWxsaW5nIGhhcHBlbnMgd2hlbgotCQkJCQkJbm9pc2UgaXMgbmVhcmVzdCB0aGFuIHRoaXMgKi8KLQlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7CS8qIFNpbGVuY2UgZmlsbGluZyBzaXplICovCi0Jc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CS8qIHBvaW50ZXJzIHdyYXAgcG9pbnQgKi8KLQotCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3N0YXJ0OwotCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3NpemU7Ci0KLQlzbmRfcGNtX3N5bmNfaWRfdCBzeW5jOwkJLyogaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIElEICovCi0KLQkvKiAtLSBtbWFwIC0tICovCi0Jdm9sYXRpbGUgc3RydWN0IHNuZF9wY21fbW1hcF9zdGF0dXMgKnN0YXR1czsKLQl2b2xhdGlsZSBzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgKmNvbnRyb2w7Ci0JYXRvbWljX3QgbW1hcF9jb3VudDsKLQotCS8qIC0tIGxvY2tpbmcgLyBzY2hlZHVsaW5nIC0tICovCi0Jc3BpbmxvY2tfdCBsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IHNsZWVwOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpY2tfdGltZXI7Ci0Jc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKLQotCS8qIC0tIHByaXZhdGUgc2VjdGlvbiAtLSAqLwotCXZvaWQgKnByaXZhdGVfZGF0YTsKLQl2b2lkICgqcHJpdmF0ZV9mcmVlKShzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKTsKLQotCS8qIC0tIGhhcmR3YXJlIGRlc2NyaXB0aW9uIC0tICovCi0Jc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaHc7Ci0Jc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludHMgaHdfY29uc3RyYWludHM7Ci0KLQkvKiAtLSBpbnRlcnJ1cHQgY2FsbGJhY2tzIC0tICovCi0Jdm9pZCAoKnRyYW5zZmVyX2Fja19iZWdpbikoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotCXZvaWQgKCp0cmFuc2Zlcl9hY2tfZW5kKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci0KLQkvKiAtLSB0aW1lciAtLSAqLwotCXVuc2lnbmVkIGludCB0aW1lcl9yZXNvbHV0aW9uOwkvKiB0aW1lciByZXNvbHV0aW9uICovCi0KLQkvKiAtLSBETUEgLS0gKi8gICAgICAgICAgIAotCXVuc2lnbmVkIGNoYXIgKmRtYV9hcmVhOwkvKiBETUEgYXJlYSAqLwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7CQkvKiBwaHlzaWNhbCBidXMgYWRkcmVzcyAobm90IGFjY2Vzc2libGUgZnJvbSBtYWluIENQVSkgKi8KLQlzaXplX3QgZG1hX2J5dGVzOwkJLyogc2l6ZSBvZiBETUEgYXJlYSAqLwotCi0Jc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFfYnVmZmVyX3A7CS8qIGFsbG9jYXRlZCBidWZmZXIgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JLyogLS0gT1NTIHRoaW5ncyAtLSAqLwotCXN0cnVjdCBzbmRfcGNtX29zc19ydW50aW1lIG9zczsKLSNlbmRpZgotfTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQkgIEZvciB0aGUgb3BlcmF0b3JzIChjYWxsYmFja3MpIG9mIGVhY2ggc291bmQgZHJpdmVyLCBtb3N0IG9mCi0JdGhlc2UgcmVjb3JkcyBhcmUgc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5LiAgT25seSB0aGUgUENNCi0JbWlkZGxlLWxheWVyIGNoYW5nZXMgLyB1cGRhdGVzIHRoZW0uICBUaGUgZXhjZXB0aW9ucyBhcmUKLQl0aGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gKGh3KSwgaW50ZXJydXB0IGNhbGxiYWNrcwotCSh0cmFuc2Zlcl9hY2tfeHh4KSwgRE1BIGJ1ZmZlciBpbmZvcm1hdGlvbiwgYW5kIHRoZSBwcml2YXRlCi0JZGF0YS4gIEJlc2lkZXMsIGlmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIGJ1ZmZlciBhbGxvY2F0aW9uCi0JbWV0aG9kIHZpYSA8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPiwKLQl5b3UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIERNQSBidWZmZXIgaW5mb3JtYXRpb24gYnkgeW91cnNlbGYuCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JSW4gdGhlIHNlY3Rpb25zIGJlbG93LCBpbXBvcnRhbnQgcmVjb3JkcyBhcmUgZXhwbGFpbmVkLgotCTwvcGFyYT4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtaHciPgotCTx0aXRsZT5IYXJkd2FyZSBEZXNjcmlwdGlvbjwvdGl0bGU+Ci0JPHBhcmE+Ci0JICBUaGUgaGFyZHdhcmUgZGVzY3JpcHRvciAoc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21faGFyZHdhcmU8L3N0cnVjdG5hbWU+KQotCWNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUKLQljb25maWd1cmF0aW9uLiAgQWJvdmUgYWxsLCB5b3UnbGwgbmVlZCB0byBkZWZpbmUgdGhpcyBpbgotCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+Ci0JdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgotCU5vdGUgdGhhdCB0aGUgcnVudGltZSBpbnN0YW5jZSBob2xkcyB0aGUgY29weSBvZiB0aGUKLQlkZXNjcmlwdG9yLCBub3QgdGhlIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IuICBUaGF0Ci0JaXMsIGluIHRoZSBvcGVuIGNhbGxiYWNrLCB5b3UgY2FuIG1vZGlmeSB0aGUgY29waWVkIGRlc2NyaXB0b3IKLQkoPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2h3PC9jb25zdGFudD4pIGFzIHlvdSBuZWVkLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBtYXhpbXVtCi0JbnVtYmVyIG9mIGNoYW5uZWxzIGlzIDEgb25seSBvbiBzb21lIGNoaXAgbW9kZWxzLCB5b3UgY2FuCi0Jc3RpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGRlc2NyaXB0b3IgYW5kIGNoYW5nZSB0aGUKLQljaGFubmVsc19tYXggbGF0ZXI6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0gICAgICAgICAgLi4uCi0gICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OyAvKiBjb21tb24gZGVmaW5pdGlvbiAqLwotICAgICAgICAgIGlmIChjaGlwLT5tb2RlbCA9PSBWRVJZX09MRF9PTkUpCi0gICAgICAgICAgICAgICAgICBydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAxOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCTwvcGFyYT4KLQotCTxwYXJhPgotCSAgVHlwaWNhbGx5LCB5b3UnbGwgaGF2ZSBhIGhhcmR3YXJlIGRlc2NyaXB0b3IgYXMgYmVsb3c6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKLSAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKLSAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0gICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAotICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0gICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAotICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKLSAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAotICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKLSAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCi0gICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKLSAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCi0gICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKLSAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCi0gICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAotICB9OwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0JPGl0ZW1pemVkbGlzdD4KLQk8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIHR5cGUgYW5kCi0gICAgICAgIGNhcGFiaWxpdGllcyBvZiB0aGlzIHBjbS4gVGhlIGJpdCBmbGFncyBhcmUgZGVmaW5lZCBpbgotICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZC5oJmd0OzwvZmlsZW5hbWU+IGFzCi0gICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19YWFg8L2NvbnN0YW50Pi4gSGVyZSwgYXQgbGVhc3QsIHlvdQotICAgICAgICBoYXZlIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgbW1hcCBpcyBzdXBwb3J0ZWQgYW5kIHdoaWNoCi0gICAgICAgIGludGVybGVhdmVkIGZvcm1hdCBpcyBzdXBwb3J0ZWQuCi0gICAgICAgIFdoZW4gdGhlIGlzIHN1cHBvcnRlZCwgYWRkIHRoZQotICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fTU1BUDwvY29uc3RhbnQ+IGZsYWcgaGVyZS4gV2hlbiB0aGUKLSAgICAgICAgaGFyZHdhcmUgc3VwcG9ydHMgdGhlIGludGVybGVhdmVkIG9yIHRoZSBub24taW50ZXJsZWF2ZWQKLSAgICAgICAgZm9ybWF0cywgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEPC9jb25zdGFudD4gb3IKLSAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEPC9jb25zdGFudD4gZmxhZyBtdXN0Ci0gICAgICAgIGJlIHNldCwgcmVzcGVjdGl2ZWx5LiBJZiBib3RoIGFyZSBzdXBwb3J0ZWQsIHlvdSBjYW4gc2V0IGJvdGgsCi0gICAgICAgIHRvby4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGNvbnN0YW50Pk1NQVBfVkFMSUQ8L2NvbnN0YW50PiBhbmQKLSAgICAgICAgPGNvbnN0YW50PkJMT0NLX1RSQU5TRkVSPC9jb25zdGFudD4gYXJlIHNwZWNpZmllZCBmb3IgdGhlIE9TUyBtbWFwCi0gICAgICAgIG1vZGUuIFVzdWFsbHkgYm90aCBhcmUgc2V0LiBPZiBjb3Vyc2UsCi0gICAgICAgIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gaXMgc2V0IG9ubHkgaWYgdGhlIG1tYXAgaXMKLSAgICAgICAgcmVhbGx5IHN1cHBvcnRlZC4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgb3RoZXIgcG9zc2libGUgZmxhZ3MgYXJlCi0gICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19QQVVTRTwvY29uc3RhbnQ+IGFuZAotICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4uIFRoZQotICAgICAgICA8Y29uc3RhbnQ+UEFVU0U8L2NvbnN0YW50PiBiaXQgbWVhbnMgdGhhdCB0aGUgcGNtIHN1cHBvcnRzIHRoZQotICAgICAgICA8cXVvdGU+cGF1c2U8L3F1b3RlPiBvcGVyYXRpb24sIHdoaWxlIHRoZQotICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gYml0IG1lYW5zIHRoYXQgdGhlIHBjbSBzdXBwb3J0cwotICAgICAgICB0aGUgZnVsbCA8cXVvdGU+c3VzcGVuZC9yZXN1bWU8L3F1b3RlPiBvcGVyYXRpb24uCi0JSWYgdGhlIDxjb25zdGFudD5QQVVTRTwvY29uc3RhbnQ+IGZsYWcgaXMgc2V0LAotCXRoZSA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGJlbG93Ci0gICAgICAgIG11c3QgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIChwYXVzZSBwdXNoL3JlbGVhc2UpIGNvbW1hbmRzLgotCVRoZSBzdXNwZW5kL3Jlc3VtZSB0cmlnZ2VyIGNvbW1hbmRzIGNhbiBiZSBkZWZpbmVkIGV2ZW4gd2l0aG91dAotCXRoZSA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gZmxhZy4gIFNlZSA8bGluawotCWxpbmtlbmQ9InBvd2VyLW1hbmFnZW1lbnQiPjxjaXRldGl0bGU+Ci0JUG93ZXIgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbiBmb3IgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotCi0JPHBhcmE+Ci0JICBXaGVuIHRoZSBQQ00gc3Vic3RyZWFtcyBjYW4gYmUgc3luY2hyb25pemVkICh0eXBpY2FsbHksCi0Jc3luY2hyb25pemVkIHN0YXJ0L3N0b3Agb2YgYSBwbGF5YmFjayBhbmQgYSBjYXB0dXJlIHN0cmVhbXMpLAotCXlvdSBjYW4gZ2l2ZSA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fU1lOQ19TVEFSVDwvY29uc3RhbnQ+LAotCXRvby4gIEluIHRoaXMgY2FzZSwgeW91J2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxpbmtlZC1saXN0IG9mCi0JUENNIHN1YnN0cmVhbXMgaW4gdGhlIHRyaWdnZXIgY2FsbGJhY2suICBUaGlzIHdpbGwgYmUKLQlkZXNjcmliZWQgaW4gdGhlIGxhdGVyIHNlY3Rpb24uCi0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxzdHJ1Y3RmaWVsZD5mb3JtYXRzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIGJpdC1mbGFncwotICAgICAgICBvZiBzdXBwb3J0ZWQgZm9ybWF0cyAoPGNvbnN0YW50PlNORFJWX1BDTV9GTVRCSVRfWFhYPC9jb25zdGFudD4pLgotICAgICAgICBJZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBmb3JtYXQsIGdpdmUgYWxsIG9yJ2VkCi0gICAgICAgIGJpdHMuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIHNpZ25lZCAxNmJpdCBsaXR0bGUtZW5kaWFuCi0gICAgICAgIGZvcm1hdCBpcyBzcGVjaWZpZWQuCi0gICAgICAgIDwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCi0JPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPHN0cnVjdGZpZWxkPnJhdGVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIGJpdC1mbGFncyBvZgotICAgICAgICBzdXBwb3J0ZWQgcmF0ZXMgKDxjb25zdGFudD5TTkRSVl9QQ01fUkFURV9YWFg8L2NvbnN0YW50PikuCi0gICAgICAgIFdoZW4gdGhlIGNoaXAgc3VwcG9ydHMgY29udGludW91cyByYXRlcywgcGFzcwotICAgICAgICA8Y29uc3RhbnQ+Q09OVElOVU9VUzwvY29uc3RhbnQ+IGJpdCBhZGRpdGlvbmFsbHkuCi0gICAgICAgIFRoZSBwcmUtZGVmaW5lZCByYXRlIGJpdHMgYXJlIHByb3ZpZGVkIG9ubHkgZm9yIHR5cGljYWwKLQlyYXRlcy4gSWYgeW91ciBjaGlwIHN1cHBvcnRzIHVuY29udmVudGlvbmFsIHJhdGVzLCB5b3UgbmVlZCB0byBhZGQKLSAgICAgICAgdGhlIDxjb25zdGFudD5LTk9UPC9jb25zdGFudD4gYml0IGFuZCBzZXQgdXAgdGhlIGhhcmR3YXJlCi0gICAgICAgIGNvbnN0cmFpbnQgbWFudWFsbHkgKGV4cGxhaW5lZCBsYXRlcikuCi0gICAgICAgIDwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCi0JPGxpc3RpdGVtPgotCTxwYXJhPgotCTxzdHJ1Y3RmaWVsZD5yYXRlX21pbjwvc3RydWN0ZmllbGQ+IGFuZAotCTxzdHJ1Y3RmaWVsZD5yYXRlX21heDwvc3RydWN0ZmllbGQ+IGRlZmluZSB0aGUgbWluaW11bSBhbmQKLQltYXhpbXVtIHNhbXBsZSByYXRlLiAgVGhpcyBzaG91bGQgY29ycmVzcG9uZCBzb21laG93IHRvCi0JPHN0cnVjdGZpZWxkPnJhdGVzPC9zdHJ1Y3RmaWVsZD4gYml0cy4KLQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQk8c3RydWN0ZmllbGQ+Y2hhbm5lbF9taW48L3N0cnVjdGZpZWxkPiBhbmQKLQk8c3RydWN0ZmllbGQ+Y2hhbm5lbF9tYXg8L3N0cnVjdGZpZWxkPiAKLQlkZWZpbmUsIGFzIHlvdSBtaWdodCBhbHJlYWR5IGV4cGVjdGVkLCB0aGUgbWluaW11bSBhbmQgbWF4aW11bQotCW51bWJlciBvZiBjaGFubmVscy4KLQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQk8c3RydWN0ZmllbGQ+YnVmZmVyX2J5dGVzX21heDwvc3RydWN0ZmllbGQ+IGRlZmluZXMgdGhlCi0JbWF4aW11bSBidWZmZXIgc2l6ZSBpbiBieXRlcy4gIFRoZXJlIGlzIG5vCi0JPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19taW48L3N0cnVjdGZpZWxkPiBmaWVsZCwgc2luY2UKLQlpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBtaW5pbXVtIHBlcmlvZCBzaXplIGFuZCB0aGUKLQltaW5pbXVtIG51bWJlciBvZiBwZXJpb2RzLgotCU1lYW53aGlsZSwgPHN0cnVjdGZpZWxkPnBlcmlvZF9ieXRlc19taW48L3N0cnVjdGZpZWxkPiBhbmQKLQlkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSBvZiB0aGUgcGVyaW9kIGluIGJ5dGVzLgotCTxzdHJ1Y3RmaWVsZD5wZXJpb2RzX21heDwvc3RydWN0ZmllbGQ+IGFuZAotCTxzdHJ1Y3RmaWVsZD5wZXJpb2RzX21pbjwvc3RydWN0ZmllbGQ+IGRlZmluZSB0aGUgbWF4aW11bSBhbmQKLQltaW5pbXVtIG51bWJlciBvZiBwZXJpb2RzIGluIHRoZSBidWZmZXIuCi0gICAgICAgIDwvcGFyYT4KLQotCTxwYXJhPgotCVRoZSA8cXVvdGU+cGVyaW9kPC9xdW90ZT4gaXMgYSB0ZXJtIHRoYXQgY29ycmVzcG9uZHMgdG8KLQlhIGZyYWdtZW50IGluIHRoZSBPU1Mgd29ybGQuIFRoZSBwZXJpb2QgZGVmaW5lcyB0aGUgc2l6ZSBhdAotCXdoaWNoIGEgUENNIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFRoaXMgc2l6ZSBzdHJvbmdseQotCWRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiAKLQlHZW5lcmFsbHksIHRoZSBzbWFsbGVyIHBlcmlvZCBzaXplIHdpbGwgZ2l2ZSB5b3UgbW9yZQotCWludGVycnVwdHMsIHRoYXQgaXMsIG1vcmUgY29udHJvbHMuIAotCUluIHRoZSBjYXNlIG9mIGNhcHR1cmUsIHRoaXMgc2l6ZSBkZWZpbmVzIHRoZSBpbnB1dCBsYXRlbmN5LgotCU9uIHRoZSBvdGhlciBoYW5kLCB0aGUgd2hvbGUgYnVmZmVyIHNpemUgZGVmaW5lcyB0aGUKLQlvdXRwdXQgbGF0ZW5jeSBmb3IgdGhlIHBsYXliYWNrIGRpcmVjdGlvbi4KLQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQlUaGVyZSBpcyBhbHNvIGEgZmllbGQgPHN0cnVjdGZpZWxkPmZpZm9fc2l6ZTwvc3RydWN0ZmllbGQ+LgotCVRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBGSUZPLCBidXQgY3VycmVudGx5IGl0Ci0JaXMgbmVpdGhlciB1c2VkIGluIHRoZSBkcml2ZXIgbm9yIGluIHRoZSBhbHNhLWxpYi4gIFNvLCB5b3UKLQljYW4gaWdub3JlIHRoaXMgZmllbGQuCi0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JPC9pdGVtaXplZGxpc3Q+Ci0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtY29uZmlnIj4KLQk8dGl0bGU+UENNIENvbmZpZ3VyYXRpb25zPC90aXRsZT4KLQk8cGFyYT4KLQlPaywgbGV0J3MgZ28gYmFjayBhZ2FpbiB0byB0aGUgUENNIHJ1bnRpbWUgcmVjb3Jkcy4KLQlUaGUgbW9zdCBmcmVxdWVudGx5IHJlZmVycmVkIHJlY29yZHMgaW4gdGhlIHJ1bnRpbWUgaW5zdGFuY2UgYXJlCi0JdGhlIFBDTSBjb25maWd1cmF0aW9ucy4KLQlUaGUgUENNIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIHJ1bnRpbWUgaW5zdGFuY2UKLQlhZnRlciB0aGUgYXBwbGljYXRpb24gc2VuZHMgPHR5cGU+aHdfcGFyYW1zPC90eXBlPiBkYXRhIHZpYQotCWFsc2EtbGliLiAgVGhlcmUgYXJlIG1hbnkgZmllbGRzIGNvcGllZCBmcm9tIGh3X3BhcmFtcyBhbmQKLQlzd19wYXJhbXMgc3RydWN0cy4gIEZvciBleGFtcGxlLAotCTxzdHJ1Y3RmaWVsZD5mb3JtYXQ8L3N0cnVjdGZpZWxkPiBob2xkcyB0aGUgZm9ybWF0IHR5cGUKLQljaG9zZW4gYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBmaWVsZCBjb250YWlucyB0aGUgZW51bSB2YWx1ZQotCTxjb25zdGFudD5TTkRSVl9QQ01fRk9STUFUX1hYWDwvY29uc3RhbnQ+LgotCTwvcGFyYT4KLQotCTxwYXJhPgotCU9uZSB0aGluZyB0byBiZSBub3RlZCBpcyB0aGF0IHRoZSBjb25maWd1cmVkIGJ1ZmZlciBhbmQgcGVyaW9kCi0Jc2l6ZXMgYXJlIHN0b3JlZCBpbiA8cXVvdGU+ZnJhbWVzPC9xdW90ZT4gaW4gdGhlIHJ1bnRpbWUuCi0gICAgICAgIEluIHRoZSBBTFNBIHdvcmxkLCAxIGZyYW1lID0gY2hhbm5lbHMgKiBzYW1wbGVzLXNpemUuCi0JRm9yIGNvbnZlcnNpb24gYmV0d2VlbiBmcmFtZXMgYW5kIGJ5dGVzLCB5b3UgY2FuIHVzZSB0aGUKLQk8ZnVuY3Rpb24+ZnJhbWVzX3RvX2J5dGVzKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgICAgICA8ZnVuY3Rpb24+Ynl0ZXNfdG9fZnJhbWVzKCk8L2Z1bmN0aW9uPiBoZWxwZXIgZnVuY3Rpb25zLiAKLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHBlcmlvZF9ieXRlcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotCTxwYXJhPgotCUFsc28sIG1hbnkgc29mdHdhcmUgcGFyYW1ldGVycyAoc3dfcGFyYW1zKSBhcmUKLQlzdG9yZWQgaW4gZnJhbWVzLCB0b28uICBQbGVhc2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLgotCTx0eXBlPnNuZF9wY21fdWZyYW1lc190PC90eXBlPiBpcyBmb3IgdGhlIGZyYW1lcyBhcyB1bnNpZ25lZAotCWludGVnZXIgd2hpbGUgPHR5cGU+c25kX3BjbV9zZnJhbWVzX3Q8L3R5cGU+IGlzIGZvciB0aGUgZnJhbWVzCi0JYXMgc2lnbmVkIGludGVnZXIuCi0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtZG1hIj4KLQk8dGl0bGU+RE1BIEJ1ZmZlciBJbmZvcm1hdGlvbjwvdGl0bGU+Ci0JPHBhcmE+Ci0JVGhlIERNQSBidWZmZXIgaXMgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGZvdXIgZmllbGRzLAotCTxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+LAotCTxzdHJ1Y3RmaWVsZD5kbWFfYWRkcjwvc3RydWN0ZmllbGQ+LAotCTxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBhbmQKLQk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPi4KLQlUaGUgPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIGJ1ZmZlcgotCXBvaW50ZXIgKHRoZSBsb2dpY2FsIGFkZHJlc3MpLiAgWW91IGNhbiBjYWxsCi0JPGZ1bmN0aW9uPm1lbWNweTwvZnVuY3Rpb24+IGZyb20vdG8gCi0JdGhpcyBwb2ludGVyLiAgTWVhbndoaWxlLCA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgotCWhvbGRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGlzIGZpZWxkIGlzCi0Jc3BlY2lmaWVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGEgbGluZWFyIGJ1ZmZlci4KLQk8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIHNpemUgb2YgYnVmZmVyCi0JaW4gYnl0ZXMuICA8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBpcyB1c2VkIGZvcgotCXRoZSBBTFNBIERNQSBhbGxvY2F0b3IuCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JSWYgeW91IHVzZSBhIHN0YW5kYXJkIEFMU0EgZnVuY3Rpb24sCi0JPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sIGZvcgotCWFsbG9jYXRpbmcgdGhlIGJ1ZmZlciwgdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgdGhlIEFMU0EgbWlkZGxlCi0JbGF5ZXIsIGFuZCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBjaGFuZ2UgdGhlbSBieQotCXlvdXJzZWxmLiAgWW91IGNhbiByZWFkIHRoZW0gYnV0IG5vdCB3cml0ZSB0aGVtLgotCU9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5Ci0JeW91cnNlbGYsIHlvdSdsbCBuZWVkIHRvIG1hbmFnZSBpdCBpbiBod19wYXJhbXMgY2FsbGJhY2suCi0JQXQgbGVhc3QsIDxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBpcyBtYW5kYXRvcnkuCi0JPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaXMgbmVjZXNzYXJ5IHdoZW4gdGhlCi0JYnVmZmVyIGlzIG1tYXBwZWQuICBJZiB5b3VyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgbW1hcCwgdGhpcwotCWZpZWxkIGlzIG5vdCBuZWNlc3NhcnkuICA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgotCWlzIGFsc28gb3B0aW9uYWwuICBZb3UgY2FuIHVzZQotCTxzdHJ1Y3RmaWVsZD5kbWFfcHJpdmF0ZTwvc3RydWN0ZmllbGQ+IGFzIHlvdSBsaWtlLCB0b28uCi0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtc3RhdHVzIj4KLQk8dGl0bGU+UnVubmluZyBTdGF0dXM8L3RpdGxlPgotCTxwYXJhPgotCVRoZSBydW5uaW5nIHN0YXR1cyBjYW4gYmUgcmVmZXJyZWQgdmlhIDxjb25zdGFudD5ydW50aW1lLSZndDtzdGF0dXM8L2NvbnN0YW50Pi4KLQlUaGlzIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX3BjbV9tbWFwX3N0YXR1czwvc3RydWN0bmFtZT4KLQlyZWNvcmQuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBnZXQgdGhlIGN1cnJlbnQgRE1BIGhhcmR3YXJlCi0JcG9pbnRlciB2aWEgPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3N0YXR1cy0mZ3Q7aHdfcHRyPC9jb25zdGFudD4uCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JVGhlIERNQSBhcHBsaWNhdGlvbiBwb2ludGVyIGNhbiBiZSByZWZlcnJlZCB2aWEKLQk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7Y29udHJvbDwvY29uc3RhbnQ+LCB3aGljaCBwb2ludHMgdG8gdGhlCi0Jc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21fbW1hcF9jb250cm9sPC9zdHJ1Y3RuYW1lPiByZWNvcmQuCi0JSG93ZXZlciwgYWNjZXNzaW5nIGRpcmVjdGx5IHRvIHRoaXMgdmFsdWUgaXMgbm90IHJlY29tbWVuZGVkLgotCTwvcGFyYT4KLQk8L3NlY3Rpb24+Ci0KLQk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLXByaXZhdGUiPgotCTx0aXRsZT5Qcml2YXRlIERhdGE8L3RpdGxlPiAKLQk8cGFyYT4KLQlZb3UgY2FuIGFsbG9jYXRlIGEgcmVjb3JkIGZvciB0aGUgc3Vic3RyZWFtIGFuZCBzdG9yZSBpdCBpbgotCTxjb25zdGFudD5ydW50aW1lLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4gIFVzdWFsbHksIHRoaXMKLQlpcyBkb25lIGluCi0JPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtb3Blbi1jYWxsYmFjayI+PGNpdGV0aXRsZT4KLQl0aGUgb3BlbiBjYWxsYmFjazwvY2l0ZXRpdGxlPjwvbGluaz4uCi0JRG9uJ3QgbWl4IHRoaXMgd2l0aCA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4KLQlUaGUgPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4gdXN1YWxseSBwb2ludHMgdG8gdGhlCi0JY2hpcCBpbnN0YW5jZSBhc3NpZ25lZCBzdGF0aWNhbGx5IGF0IHRoZSBjcmVhdGlvbiBvZiBQQ00sIHdoaWxlIHRoZSAKLQk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4gcG9pbnRzIHRvIGEgZHluYW1pYwotCWRhdGEgc3RydWN0dXJlIGNyZWF0ZWQgYXQgdGhlIFBDTSBvcGVuIGNhbGxiYWNrLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHN0cnVjdCBteV9wY21fZGF0YSAqZGF0YTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOwotICAgICAgICAgIC4uLi4KLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGFsbG9jYXRlZCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCBpbgotCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+Ci0JdGhlIGNsb3NlIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtaW50ciI+Ci0JPHRpdGxlPkludGVycnVwdCBDYWxsYmFja3M8L3RpdGxlPgotCTxwYXJhPgotCVRoZSBmaWVsZCA8c3RydWN0ZmllbGQ+dHJhbnNmZXJfYWNrX2JlZ2luPC9zdHJ1Y3RmaWVsZD4gYW5kCi0JPHN0cnVjdGZpZWxkPnRyYW5zZmVyX2Fja19lbmQ8L3N0cnVjdGZpZWxkPiBhcmUgY2FsbGVkIGF0Ci0JdGhlIGJlZ2lubmluZyBhbmQgYXQgdGhlIGVuZCBvZgotCTxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgcmVzcGVjdGl2ZWx5LiAKLQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE9LLCBub3cgbGV0IG1lIGdpdmUgZGV0YWlscyBhYm91dCBlYWNoIHBjbSBjYWxsYmFjawotICAgICAgKDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+KS4gSW4gZ2VuZXJhbCwgZXZlcnkgY2FsbGJhY2sgbXVzdAotICAgICAgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIKLSAgICAgIHN1Y2ggYXMgPGNvbnN0YW50Pi1FSU5WQUw8L2NvbnN0YW50Pi4gVG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlCi0gICAgICBlcnJvciBudW1iZXIsIGl0IGlzIGFkdmlzZWQgdG8gY2hlY2sgd2hhdCB2YWx1ZSBvdGhlciBwYXJ0cyBvZgotICAgICAgdGhlIGtlcm5lbCByZXR1cm4gd2hlbiB0aGUgc2FtZSBraW5kIG9mIHJlcXVlc3QgZmFpbHMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgYXQgbGVhc3QgdGhlIGFyZ3VtZW50IHdpdGgKLSAgICAgICAgPHN0cnVjdG5hbWU+c25kX3BjbV9zdWJzdHJlYW08L3N0cnVjdG5hbWU+IHBvaW50ZXIuIFRvIHJldHJpZXZlCi0gICAgICAgIHRoZSBjaGlwIHJlY29yZCBmcm9tIHRoZSBnaXZlbiBzdWJzdHJlYW0gaW5zdGFuY2UsIHlvdSBjYW4gdXNlIHRoZQotICAgICAgICBmb2xsb3dpbmcgbWFjcm8uIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIGludCB4eHgoKSB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSAgICAgICAgICAuLi4uCi0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0JVGhlIG1hY3JvIHJlYWRzIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LAotCXdoaWNoIGlzIGEgY29weSBvZiA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4KLQlZb3UgY2FuIG92ZXJyaWRlIHRoZSBmb3JtZXIgaWYgeW91IG5lZWQgdG8gYXNzaWduIGRpZmZlcmVudCBkYXRhCi0JcmVjb3JkcyBwZXIgUENNIHN1YnN0cmVhbS4gIEZvciBleGFtcGxlLCB0aGUgY21pODMzMCBkcml2ZXIgYXNzaWducwotCWRpZmZlcmVudCBwcml2YXRlX2RhdGEgZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMsCi0JYmVjYXVzZSBpdCB1c2VzIHR3byBkaWZmZXJlbnQgY29kZWNzIChTQi0gYW5kIEFELWNvbXBhdGlibGUpIGZvcgotCWRpZmZlcmVudCBkaXJlY3Rpb25zLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtb3Blbi1jYWxsYmFjayI+Ci0gICAgICAgIDx0aXRsZT5vcGVuIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBvcGVuZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBdCBsZWFzdCwgaGVyZSB5b3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBydW50aW1lLSZndDtodwotICAgICAgICAgIHJlY29yZC4gVHlwaWNhbGx5LCB0aGlzIGlzIGRvbmUgYnkgbGlrZSB0aGlzOiAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0KLSAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+c25kX215Y2hpcF9wbGF5YmFja19odzwvcGFyYW1ldGVyPiBpcyB0aGUKLSAgICAgICAgICBwcmUtZGVmaW5lZCBoYXJkd2FyZSBkZXNjcmlwdGlvbi4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlZb3UgY2FuIGFsbG9jYXRlIGEgcHJpdmF0ZSBkYXRhIGluIHRoaXMgY2FsbGJhY2ssIGFzIGRlc2NyaWJlZAotCWluIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj48Y2l0ZXRpdGxlPgotCVByaXZhdGUgRGF0YTwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbi4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlJZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBuZWVkcyBtb3JlIGNvbnN0cmFpbnRzLCBzZXQgdGhlCi0JaGFyZHdhcmUgY29uc3RyYWludHMgaGVyZSwgdG9vLgotCVNlZSA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj48Y2l0ZXRpdGxlPgotCUNvbnN0cmFpbnRzPC9jaXRldGl0bGU+PC9saW5rPiBmb3IgbW9yZSBkZXRhaWxzLgotCTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWNsb3NlLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmNsb3NlIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgT2J2aW91c2x5LCB0aGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBjbG9zZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbnkgcHJpdmF0ZSBpbnN0YW5jZSBmb3IgYSBwY20gc3Vic3RyZWFtIGFsbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgICBvcGVuIGNhbGxiYWNrIHdpbGwgYmUgcmVsZWFzZWQgaGVyZS4gCi0KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBrZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSk7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWlvY3RsLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmlvY3RsIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBpcyB1c2VkIGZvciBhbnkgc3BlY2lhbCBjYWxsIHRvIHBjbSBpb2N0bHMuIEJ1dAotICAgICAgICB1c3VhbGx5IHlvdSBjYW4gcGFzcyBhIGdlbmVyaWMgaW9jdGwgY2FsbGJhY2ssIAotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfaW9jdGw8L2Z1bmN0aW9uPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctcGFyYW1zLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmh3X3BhcmFtcyBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcyk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXIKLSAgICAgICAgKDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPikgaXMgc2V0Ci0gICAgICAgIHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiwgCi0gICAgICAgIHRoYXQgaXMsIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIHNpemUsIHRoZSBwZXJpb2Qgc2l6ZSwgdGhlCi0gICAgICAgIGZvcm1hdCwgZXRjLiBhcmUgZGVmaW5lZCBmb3IgdGhlIHBjbSBzdWJzdHJlYW0uIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTWFueSBoYXJkd2FyZSBzZXR1cHMgc2hvdWxkIGJlIGRvbmUgaW4gdGhpcyBjYWxsYmFjaywKLSAgICAgICAgaW5jbHVkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgUGFyYW1ldGVycyB0byBiZSBpbml0aWFsaXplZCBhcmUgcmV0cmlldmVkIGJ5Ci0gICAgICAgICAgPGZ1bmN0aW9uPnBhcmFtc194eHgoKTwvZnVuY3Rpb24+IG1hY3Jvcy4gVG8gYWxsb2NhdGUKLSAgICAgICAgICBidWZmZXIsIHlvdSBjYW4gY2FsbCBhIGhlbHBlciBmdW5jdGlvbiwgCi0KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPiBpcyBhdmFpbGFibGUKLQkgIG9ubHkgd2hlbiB0aGUgRE1BIGJ1ZmZlcnMgaGF2ZSBiZWVuIHByZS1hbGxvY2F0ZWQuCi0JICBTZWUgdGhlIHNlY3Rpb24gPGxpbmsKLQkgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWJ1ZmZlci10eXBlcyI+PGNpdGV0aXRsZT4KLQkgIEJ1ZmZlciBUeXBlczwvY2l0ZXRpdGxlPjwvbGluaz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGFuZCA8c3RydWN0ZmllbGQ+cHJlcGFyZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcwotICAgICAgICBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlciBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBPU1MgZW11bGF0aW9uIG1heQotICAgICAgICBjYWxsIHRoZXNlIGNhbGxiYWNrcyBhdCBlYWNoIGNoYW5nZSB2aWEgaXRzIGlvY3RsLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRodXMsIHlvdSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGFsbG9jYXRlIHRoZSBzYW1lIGJ1ZmZlcnMKLSAgICAgICAgbWFueSB0aW1lcywgd2hpY2ggd2lsbCBsZWFkIHRvIG1lbW9yeSBsZWFrcyEgIENhbGxpbmcgdGhlCi0gICAgICAgIGhlbHBlciBmdW5jdGlvbiBhYm92ZSBtYW55IHRpbWVzIGlzIE9LLiBJdCB3aWxsIHJlbGVhc2UgdGhlCi0gICAgICAgIHByZXZpb3VzIGJ1ZmZlciBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgd2FzIGFscmVhZHkgYWxsb2NhdGVkLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFub3RoZXIgbm90ZSBpcyB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgbm9uLWF0b21pYwotICAgICAgICAoc2NoZWR1bGFibGUpLiBUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUKLSAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayAKLSAgICAgICAgaXMgYXRvbWljIChub24tc2NoZWR1bGFibGUpLiBUaGF0IGlzLCBtdXRleGVzIG9yIGFueQotICAgICAgICBzY2hlZHVsZS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBpbgotICAgICAgICA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLgotCVBsZWFzZSBzZWUgdGhlIHN1YnNlY3Rpb24KLQk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+PGNpdGV0aXRsZT4KLQlBdG9taWNpdHk8L2NpdGV0aXRsZT48L2xpbms+IGZvciBkZXRhaWxzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1ody1mcmVlLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmh3X2ZyZWUgY2FsbGJhY2s8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX3h4eF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHJlbGVhc2UgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdmlhCi0gICAgICAgICAgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+LiBGb3IgZXhhbXBsZSwgcmVsZWFzaW5nIHRoZQotICAgICAgICAgIGJ1ZmZlciB2aWEgCi0gICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgZG9uZSBieQotICAgICAgICAgIGNhbGxpbmcgdGhlIGZvbGxvd2luZzogCi0KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgdGhlIGNsb3NlIGNhbGxiYWNrIGlzIGNhbGxlZC4KLSAgICAgICAgICBBbHNvLCB0aGUgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdG9vLgotICAgICAgICAgIEtlZXAgdHJhY2sgd2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIGFscmVhZHkgcmVsZWFzZWQuIAotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wcmVwYXJlLWNhbGxiYWNrIj4KLSAgICAgICA8dGl0bGU+cHJlcGFyZSBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcGNtIGlzCi0gICAgICAgIDxxdW90ZT5wcmVwYXJlZDwvcXVvdGU+LiBZb3UgY2FuIHNldCB0aGUgZm9ybWF0IHR5cGUsIHNhbXBsZQotICAgICAgICByYXRlLCBldGMuIGhlcmUuIFRoZSBkaWZmZXJlbmNlIGZyb20KLSAgICAgICAgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGlzIHRoYXQgdGhlIAotICAgICAgICA8c3RydWN0ZmllbGQ+cHJlcGFyZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGVhY2gKLSAgICAgICAgdGltZSAKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcHJlcGFyZSgpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCBpLmUuIHdoZW4KLSAgICAgICAgcmVjb3ZlcmluZyBhZnRlciB1bmRlcnJ1bnMsIGV0Yy4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLQlOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBub3cgbm9uLWF0b21pYy4KLQlZb3UgY2FuIHVzZSBzY2hlZHVsZS1yZWxhdGVkIGZ1bmN0aW9ucyBzYWZlbHkgaW4gdGhpcyBjYWxsYmFjay4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEluIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzLCB5b3UgY2FuIHJlZmVyIHRvIHRoZQotICAgICAgICB2YWx1ZXMgdmlhIHRoZSBydW50aW1lIHJlY29yZCwKLSAgICAgICAgc3Vic3RyZWFtLSZndDtydW50aW1lLgotICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZ2V0IHRoZSBjdXJyZW50Ci0gICAgICAgIHJhdGUsIGZvcm1hdCBvciBjaGFubmVscywgYWNjZXNzIHRvCi0gICAgICAgIHJ1bnRpbWUtJmd0O3JhdGUsCi0gICAgICAgIHJ1bnRpbWUtJmd0O2Zvcm1hdCBvcgotICAgICAgICBydW50aW1lLSZndDtjaGFubmVscywgcmVzcGVjdGl2ZWx5LiAKLSAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgc2V0IHRvCi0JcnVudGltZS0mZ3Q7ZG1hX2FyZWEuICBUaGUgYnVmZmVyIGFuZCBwZXJpb2Qgc2l6ZXMgYXJlCi0JaW4gcnVudGltZS0mZ3Q7YnVmZmVyX3NpemUgYW5kIHJ1bnRpbWUtJmd0O3BlcmlvZF9zaXplLAotCXJlc3BlY3RpdmVseS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEJlIGNhcmVmdWwgdGhhdCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG1hbnkgdGltZXMgYXQKLSAgICAgICAgZWFjaCBzZXR1cCwgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtdHJpZ2dlci1jYWxsYmFjayI+Ci0gICAgICAgIDx0aXRsZT50cmlnZ2VyIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBwY20gaXMgc3RhcnRlZCwgc3RvcHBlZCBvciBwYXVzZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBXaGljaCBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQsCi0gICAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1hYWDwvY29uc3RhbnQ+IGluCi0gICAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gQXQgbGVhc3QsCi0gICAgICAgICAgdGhlIDxjb25zdGFudD5TVEFSVDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+U1RPUDwvY29uc3RhbnQ+Ci0gICAgICAgICAgY29tbWFuZHMgbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgY2FsbGJhY2suIAotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzd2l0Y2ggKGNtZCkgewotICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdGFydCB0aGUgUENNIGVuZ2luZSAqLwotICAgICAgICAgIGJyZWFrOwotICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0gICAgICAgICAgLyogZG8gc29tZXRoaW5nIHRvIHN0b3AgdGhlIFBDTSBlbmdpbmUgKi8KLSAgICAgICAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiB0aGUgcGNtIHN1cHBvcnRzIHRoZSBwYXVzZSBvcGVyYXRpb24gKGdpdmVuIGluIHRoZSBpbmZvCi0gICAgICAgIGZpZWxkIG9mIHRoZSBoYXJkd2FyZSB0YWJsZSksIHRoZSA8Y29uc3RhbnQ+UEFVU0VfUFVTRTwvY29uc3RhbnQ+Ci0gICAgICAgIGFuZCA8Y29uc3RhbnQ+UEFVU0VfUkVMRUFTRTwvY29uc3RhbnQ+IGNvbW1hbmRzIG11c3QgYmUKLSAgICAgICAgaGFuZGxlZCBoZXJlLCB0b28uIFRoZSBmb3JtZXIgaXMgdGhlIGNvbW1hbmQgdG8gcGF1c2UgdGhlIHBjbSwKLSAgICAgICAgYW5kIHRoZSBsYXR0ZXIgdG8gcmVzdGFydCB0aGUgcGNtIGFnYWluLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgc3VzcGVuZC9yZXN1bWUgb3BlcmF0aW9uLAotCXJlZ2FyZGxlc3Mgb2YgZnVsbCBvciBwYXJ0aWFsIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQsCi0gICAgICAgIHRoZSA8Y29uc3RhbnQ+U1VTUEVORDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4KLSAgICAgICAgY29tbWFuZHMgbXVzdCBiZSBoYW5kbGVkLCB0b28uCi0gICAgICAgIFRoZXNlIGNvbW1hbmRzIGFyZSBpc3N1ZWQgd2hlbiB0aGUgcG93ZXItbWFuYWdlbWVudCBzdGF0dXMgaXMKLSAgICAgICAgY2hhbmdlZC4gIE9idmlvdXNseSwgdGhlIDxjb25zdGFudD5TVVNQRU5EPC9jb25zdGFudD4gYW5kCi0gICAgICAgIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PiBjb21tYW5kcwotICAgICAgICBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHBjbSBzdWJzdHJlYW0sIGFuZCB1c3VhbGx5LCB0aGV5Ci0gICAgICAgIGFyZSBpZGVudGljYWwgdG8gdGhlIDxjb25zdGFudD5TVE9QPC9jb25zdGFudD4gYW5kCi0gICAgICAgIDxjb25zdGFudD5TVEFSVDwvY29uc3RhbnQ+IGNvbW1hbmRzLCByZXNwZWN0aXZlbHkuCi0JICBTZWUgdGhlIDxsaW5rIGxpbmtlbmQ9InBvd2VyLW1hbmFnZW1lbnQiPjxjaXRldGl0bGU+Ci0JUG93ZXIgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbiBmb3IgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFzIG1lbnRpb25lZCwgdGhpcyBjYWxsYmFjayBpcyBhdG9taWMuICBZb3UgY2Fubm90IGNhbGwKLQkgIGZ1bmN0aW9ucyB3aGljaCBtYXkgc2xlZXAuCi0JICBUaGUgdHJpZ2dlciBjYWxsYmFjayBzaG91bGQgYmUgYXMgbWluaW1hbCBhcyBwb3NzaWJsZSwKLQkgIGp1c3QgcmVhbGx5IHRyaWdnZXJpbmcgdGhlIERNQS4gIFRoZSBvdGhlciBzdHVmZiBzaG91bGQgYmUKLQkgIGluaXRpYWxpemVkIGh3X3BhcmFtcyBhbmQgcHJlcGFyZSBjYWxsYmFja3MgcHJvcGVybHkKLQkgIGJlZm9yZWhhbmQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBvaW50ZXItY2FsbGJhY2siPgotICAgICAgICA8dGl0bGU+cG9pbnRlciBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF94eHhfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIFBDTSBtaWRkbGUgbGF5ZXIgaW5xdWlyZXMKLSAgICAgICAgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9zaXRpb24gb24gdGhlIGJ1ZmZlci4gVGhlIHBvc2l0aW9uIG11c3QKLSAgICAgICAgYmUgcmV0dXJuZWQgaW4gZnJhbWVzLAotICAgICAgICByYW5naW5nIGZyb20gMCB0byBidWZmZXJfc2l6ZSAtIDEuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB1c3VhbGx5IGZyb20gdGhlIGJ1ZmZlci11cGRhdGUgcm91dGluZSBpbiB0aGUKLSAgICAgICAgcGNtIG1pZGRsZSBsYXllciwgd2hpY2ggaXMgaW52b2tlZCB3aGVuCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgaW4gdGhlCi0gICAgICAgIGludGVycnVwdCByb3V0aW5lLiBUaGVuIHRoZSBwY20gbWlkZGxlIGxheWVyIHVwZGF0ZXMgdGhlCi0gICAgICAgIHBvc2l0aW9uIGFuZCBjYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgc3BhY2UsIGFuZCB3YWtlcyB1cCB0aGUKLSAgICAgICAgc2xlZXBpbmcgcG9sbCB0aHJlYWRzLCBldGMuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBhbHNvIGF0b21pYy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtY29weS1zaWxlbmNlIj4KLSAgICAgICAgPHRpdGxlPmNvcHkgYW5kIHNpbGVuY2UgY2FsbGJhY2tzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub3QgbWFuZGF0b3J5LCBhbmQgY2FuIGJlIG9taXR0ZWQgaW4KLSAgICAgICAgbW9zdCBjYXNlcy4gVGhlc2UgY2FsbGJhY2tzIGFyZSB1c2VkIHdoZW4gdGhlIGhhcmR3YXJlIGJ1ZmZlcgotICAgICAgICBjYW5ub3QgYmUgaW4gdGhlIG5vcm1hbCBtZW1vcnkgc3BhY2UuIFNvbWUgY2hpcHMgaGF2ZSB0aGVpcgotICAgICAgICBvd24gYnVmZmVyIG9uIHRoZSBoYXJkd2FyZSB3aGljaCBpcyBub3QgbWFwcGFibGUuIEluIHN1Y2ggYQotICAgICAgICBjYXNlLCB5b3UgaGF2ZSB0byB0cmFuc2ZlciB0aGUgZGF0YSBtYW51YWxseSBmcm9tIHRoZSBtZW1vcnkKLSAgICAgICAgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBidWZmZXIuIE9yLCBpZiB0aGUgYnVmZmVyIGlzCi0gICAgICAgIG5vbi1jb250aWd1b3VzIG9uIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgbWVtb3J5IHNwYWNlcywKLSAgICAgICAgdGhlc2UgY2FsbGJhY2tzIG11c3QgYmUgZGVmaW5lZCwgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIElmIHRoZXNlIHR3byBjYWxsYmFja3MgYXJlIGRlZmluZWQsIGNvcHkgYW5kIHNldC1zaWxlbmNlCi0gICAgICAgIG9wZXJhdGlvbnMgYXJlIGRvbmUgYnkgdGhlbS4gVGhlIGRldGFpbGVkIHdpbGwgYmUgZGVzY3JpYmVkIGluCi0gICAgICAgIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5Ci0gICAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtYWNrIj4KLSAgICAgICAgPHRpdGxlPmFjayBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBub3QgbWFuZGF0b3J5LiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZAotICAgICAgICB3aGVuIHRoZSBhcHBsX3B0ciBpcyB1cGRhdGVkIGluIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9ucy4KLSAgICAgICAgU29tZSBkcml2ZXJzIGxpa2UgZW11MTBrMS1meCBhbmQgY3M0Nnh4IG5lZWQgdG8gdHJhY2sgdGhlCi0JY3VycmVudCBhcHBsX3B0ciBmb3IgdGhlIGludGVybmFsIGJ1ZmZlciwgYW5kIHRoaXMgY2FsbGJhY2sKLQlpcyB1c2VmdWwgb25seSBmb3Igc3VjaCBhIHB1cnBvc2UuCi0JPC9wYXJhPgotCTxwYXJhPgotCSAgVGhpcyBjYWxsYmFjayBpcyBhdG9taWMuCi0JPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+Ci0gICAgICAgIDx0aXRsZT5wYWdlIGNhbGxiYWNrPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIHRvby4gVGhpcyBjYWxsYmFjayBpcyB1c2VkCi0gICAgICAgIG1haW5seSBmb3Igbm9uLWNvbnRpZ3VvdXMgYnVmZmVycy4gVGhlIG1tYXAgY2FsbHMgdGhpcwotICAgICAgICBjYWxsYmFjayB0byBnZXQgdGhlIHBhZ2UgYWRkcmVzcy4gU29tZSBleGFtcGxlcyB3aWxsIGJlCi0gICAgICAgIGV4cGxhaW5lZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluawotICAgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQotICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPiwgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj4KLSAgICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlc3Qgb2YgcGNtIHN0dWZmIGlzIHRoZSBQQ00gaW50ZXJydXB0IGhhbmRsZXIuIFRoZQotICAgICAgcm9sZSBvZiBQQ00gaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIHNvdW5kIGRyaXZlciBpcyB0byB1cGRhdGUKLSAgICAgIHRoZSBidWZmZXIgcG9zaXRpb24gYW5kIHRvIHRlbGwgdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2hlbiB0aGUKLSAgICAgIGJ1ZmZlciBwb3NpdGlvbiBnb2VzIGFjcm9zcyB0aGUgcHJlc2NyaWJlZCBwZXJpb2Qgc2l6ZS4gVG8KLSAgICAgIGluZm9ybSB0aGlzLCBjYWxsIHRoZSA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4KLSAgICAgIGZ1bmN0aW9uLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIHNvdW5kIGNoaXBzIHRvIGdlbmVyYXRlIHRoZSBpbnRlcnJ1cHRzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci1ib3VuZGFyeSI+Ci0gICAgICAgIDx0aXRsZT5JbnRlcnJ1cHRzIGF0IHRoZSBwZXJpb2QgKGZyYWdtZW50KSBib3VuZGFyeTwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgaXMgdGhlIG1vc3QgZnJlcXVlbnRseSBmb3VuZCB0eXBlOiAgdGhlIGhhcmR3YXJlCi0gICAgICAgIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgYXQgZWFjaCBwZXJpb2QgYm91bmRhcnkuCi0JSW4gdGhpcyBjYXNlLCB5b3UgY2FuIGNhbGwKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGF0IGVhY2ggCi0gICAgICAgIGludGVycnVwdC4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gdGFrZXMgdGhlCi0gICAgICAgIHN1YnN0cmVhbSBwb2ludGVyIGFzIGl0cyBhcmd1bWVudC4gVGh1cywgeW91IG5lZWQgdG8ga2VlcCB0aGUKLSAgICAgICAgc3Vic3RyZWFtIHBvaW50ZXIgYWNjZXNzaWJsZSBmcm9tIHRoZSBjaGlwIGluc3RhbmNlLiBGb3IKLSAgICAgICAgZXhhbXBsZSwgZGVmaW5lIHN1YnN0cmVhbSBmaWVsZCBpbiB0aGUgY2hpcCByZWNvcmQgdG8gaG9sZCB0aGUKLSAgICAgICAgY3VycmVudCBydW5uaW5nIHN1YnN0cmVhbSBwb2ludGVyLCBhbmQgc2V0IHRoZSBwb2ludGVyIHZhbHVlCi0gICAgICAgIGF0IG9wZW4gY2FsbGJhY2sgKGFuZCByZXNldCBhdCBjbG9zZSBjYWxsYmFjaykuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgeW91IGFjcXVpcmUgYSBzcGlubG9jayBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZCB0aGUKLSAgICAgICAgbG9jayBpcyB1c2VkIGluIG90aGVyIHBjbSBjYWxsYmFja3MsIHRvbywgdGhlbiB5b3UgaGF2ZSB0bwotICAgICAgICByZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgYmVjYXVzZQotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gY2FsbHMgb3RoZXIgcGNtCi0gICAgICAgIGNhbGxiYWNrcyBpbnNpZGUuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6Ci0KLSAgICAgICAgICA8ZXhhbXBsZT4KLQkgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyIENhc2UgIzE8L3RpdGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXljaGlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gZGV2X2lkOwotICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGlmIChwY21faXJxX2ludm9rZWQoY2hpcCkpIHsKLSAgICAgICAgICAgICAgICAgIC8qIGNhbGwgdXBkYXRlciwgdW5sb2NrIGJlZm9yZSBpdCAqLwotICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwotICAgICAgICAgICAgICAgICAgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5zdWJzdHJlYW0pOwotICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKLSAgICAgICAgICAgICAgICAgIC8qIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgfQotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBzcGluX3VubG9jaygmY2hpcC0+bG9jayk7Ci0gICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9leGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyLXRpbWVyIj4KLSAgICAgICAgPHRpdGxlPkhpZ2ggZnJlcXVlbmN5IHRpbWVyIGludGVycnVwdHM8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLQlUaGlzIGhhcHBlbnNlIHdoZW4gdGhlIGhhcmR3YXJlIGRvZXNuJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cwotICAgICAgICBhdCB0aGUgcGVyaW9kIGJvdW5kYXJ5IGJ1dCBpc3N1ZXMgdGltZXIgaW50ZXJydXB0cyBhdCBhIGZpeGVkCi0gICAgICAgIHRpbWVyIHJhdGUgKGUuZy4gZXMxOTY4IG9yIHltZnBjaSBkcml2ZXJzKS4gCi0gICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgaGFyZHdhcmUKLSAgICAgICAgcG9zaXRpb24gYW5kIGFjY3VtdWxhdGUgdGhlIHByb2Nlc3NlZCBzYW1wbGUgbGVuZ3RoIGF0IGVhY2gKLSAgICAgICAgaW50ZXJydXB0LiAgV2hlbiB0aGUgYWNjdW11bGF0ZWQgc2l6ZSBleGNlZWRzIHRoZSBwZXJpb2QKLSAgICAgICAgc2l6ZSwgY2FsbCAKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGFuZCByZXNldCB0aGUKLSAgICAgICAgYWNjdW11bGF0b3IuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2UgdGhlIGZvbGxvd2luZy4KLQotICAgICAgICAgIDxleGFtcGxlPgotCSAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXIgQ2FzZSAjMjwvdGl0bGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBkZXZfaWQ7Ci0gICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgaWYgKHBjbV9pcnFfaW52b2tlZChjaGlwKSkgewotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcHRyLCBzaXplOwotICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvaW50ZXIgKGluIGZyYW1lcykgKi8KLSAgICAgICAgICAgICAgICAgIGxhc3RfcHRyID0gZ2V0X2h3X3B0cihjaGlwKTsKLSAgICAgICAgICAgICAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcHJvY2Vzc2VkIGZyYW1lcyBzaW5jZSB0aGUKLSAgICAgICAgICAgICAgICAgICAqIGxhc3QgdXBkYXRlCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3B0ciA8IGNoaXAtPmxhc3RfcHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBsYXN0X3B0ciAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjaGlwLT5sYXN0X3B0cjsgCi0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBsYXN0X3B0ciAtIGNoaXAtPmxhc3RfcHRyOwotICAgICAgICAgICAgICAgICAgLyogcmVtZW1iZXIgdGhlIGxhc3QgdXBkYXRlZCBwb2ludCAqLwotICAgICAgICAgICAgICAgICAgY2hpcC0+bGFzdF9wdHIgPSBsYXN0X3B0cjsKLSAgICAgICAgICAgICAgICAgIC8qIGFjY3VtdWxhdGUgdGhlIHNpemUgKi8KLSAgICAgICAgICAgICAgICAgIGNoaXAtPnNpemUgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgIC8qIG92ZXIgdGhlIHBlcmlvZCBib3VuZGFyeT8gKi8KLSAgICAgICAgICAgICAgICAgIGlmIChjaGlwLT5zaXplID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IHRoZSBhY2N1bXVsYXRvciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5zaXplICU9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeSAqLwotICAgICAgICAgIH0KLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwotICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci1ib3RoIj4KLSAgICAgICAgPHRpdGxlPk9uIGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gYm90aCBjYXNlcywgZXZlbiBpZiBtb3JlIHRoYW4gb25lIHBlcmlvZCBhcmUgZWxhcHNlZCwgeW91Ci0gICAgICAgIGRvbid0IGhhdmUgdG8gY2FsbAotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gbWFueSB0aW1lcy4gQ2FsbAotICAgICAgICBvbmx5IG9uY2UuIEFuZCB0aGUgcGNtIGxheWVyIHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgaGFyZHdhcmUKLSAgICAgICAgcG9pbnRlciBhbmQgdXBkYXRlIHRvIHRoZSBsYXRlc3Qgc3RhdHVzLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+Ci0gICAgICA8dGl0bGU+QXRvbWljaXR5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCAoYW5kIHRodXMgZGlmZmljdWx0IHRvIGRlYnVnKSBwcm9ibGVtcwotICAgICAgaW4ga2VybmVsIHByb2dyYW1taW5nIGFyZSByYWNlIGNvbmRpdGlvbnMuCi0gICAgICBJbiB0aGUgTGludXgga2VybmVsLCB0aGV5IGFyZSB1c3VhbGx5IGF2b2lkZWQgdmlhIHNwaW4tbG9ja3MsIG11dGV4ZXMKLSAgICAgIG9yIHNlbWFwaG9yZXMuICBJbiBnZW5lcmFsLCBpZiBhIHJhY2UgY29uZGl0aW9uIGNhbiBoYXBwZW4KLSAgICAgIGluIGFuIGludGVycnVwdCBoYW5kbGVyLCBpdCBoYXMgdG8gYmUgbWFuYWdlZCBhdG9taWNhbGx5LCBhbmQgeW91Ci0gICAgICBoYXZlIHRvIHVzZSBhIHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIGNyaXRpY2FsIHNlc3Npb24uIElmIHRoZQotICAgICAgY3JpdGljYWwgc2VjdGlvbiBpcyBub3QgaW4gaW50ZXJydXB0IGhhbmRsZXIgY29kZSBhbmQKLSAgICAgIGlmIHRha2luZyBhIHJlbGF0aXZlbHkgbG9uZyB0aW1lIHRvIGV4ZWN1dGUgaXMgYWNjZXB0YWJsZSwgeW91Ci0gICAgICBzaG91bGQgdXNlIG11dGV4ZXMgb3Igc2VtYXBob3JlcyBpbnN0ZWFkLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEFzIGFscmVhZHkgc2Vlbiwgc29tZSBwY20gY2FsbGJhY2tzIGFyZSBhdG9taWMgYW5kIHNvbWUgYXJlCi0gICAgICBub3QuICBGb3IgZXhhbXBsZSwgdGhlIDxwYXJhbWV0ZXI+aHdfcGFyYW1zPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCi0gICAgICBub24tYXRvbWljLCB3aGlsZSA8cGFyYW1ldGVyPnRyaWdnZXI8L3BhcmFtZXRlcj4gY2FsbGJhY2sgaXMKLSAgICAgIGF0b21pYy4gIFRoaXMgbWVhbnMsIHRoZSBsYXR0ZXIgaXMgY2FsbGVkIGFscmVhZHkgaW4gYSBzcGlubG9jawotICAgICAgaGVsZCBieSB0aGUgUENNIG1pZGRsZSBsYXllci4gUGxlYXNlIHRha2UgdGhpcyBhdG9taWNpdHkgaW50bwotICAgICAgYWNjb3VudCB3aGVuIHlvdSBjaG9vc2UgYSBsb2NraW5nIHNjaGVtZSBpbiB0aGUgY2FsbGJhY2tzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEluIHRoZSBhdG9taWMgY2FsbGJhY2tzLCB5b3UgY2Fubm90IHVzZSBmdW5jdGlvbnMgd2hpY2ggbWF5IGNhbGwKLSAgICAgIDxmdW5jdGlvbj5zY2hlZHVsZTwvZnVuY3Rpb24+IG9yIGdvIHRvCi0gICAgICA8ZnVuY3Rpb24+c2xlZXA8L2Z1bmN0aW9uPi4gIFNlbWFwaG9yZXMgYW5kIG11dGV4ZXMgY2FuIHNsZWVwLAotICAgICAgYW5kIGhlbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgaW5zaWRlIHRoZSBhdG9taWMgY2FsbGJhY2tzCi0gICAgICAoZS5nLiA8cGFyYW1ldGVyPnRyaWdnZXI8L3BhcmFtZXRlcj4gY2FsbGJhY2spLgotICAgICAgVG8gaW1wbGVtZW50IHNvbWUgZGVsYXkgaW4gc3VjaCBhIGNhbGxiYWNrLCBwbGVhc2UgdXNlCi0gICAgICA8ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+bWRlbGF5KCk8L2Z1bmN0aW9uPi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBBbGwgdGhyZWUgYXRvbWljIGNhbGxiYWNrcyAodHJpZ2dlciwgcG9pbnRlciwgYW5kIGFjaykgYXJlCi0gICAgICBjYWxsZWQgd2l0aCBsb2NhbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICAgICAgPC9wYXJhPgotCi0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj4KLSAgICAgIDx0aXRsZT5Db25zdHJhaW50czwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSWYgeW91ciBjaGlwIHN1cHBvcnRzIHVuY29udmVudGlvbmFsIHNhbXBsZSByYXRlcywgb3Igb25seSB0aGUKLSAgICAgIGxpbWl0ZWQgc2FtcGxlcywgeW91IG5lZWQgdG8gc2V0IGEgY29uc3RyYWludCBmb3IgdGhlCi0gICAgICBjb25kaXRpb24uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIHJlc3RyaWN0IHRoZSBzYW1wbGUgcmF0ZXMgaW4gdGhlIHNvbWUKLSAgICAgICAgc3VwcG9ydGVkIHZhbHVlcywgdXNlCi0JPGZ1bmN0aW9uPnNuZF9wY21faHdfY29uc3RyYWludF9saXN0KCk8L2Z1bmN0aW9uPi4KLQlZb3UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gdGhlIG9wZW4gY2FsbGJhY2suCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0JICA8dGl0bGU+RXhhbXBsZSBvZiBIYXJkd2FyZSBDb25zdHJhaW50czwvdGl0bGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9Ci0gICAgICAgICAgezQwMDAsIDEwMDAwLCAyMjA1MCwgNDQxMDB9OwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cmFpbnRzX3JhdGVzID0gewotICAgICAgICAgIC5jb3VudCA9IEFSUkFZX1NJWkUocmF0ZXMpLAotICAgICAgICAgIC5saXN0ID0gcmF0ZXMsCi0gICAgICAgICAgLm1hc2sgPSAwLAotICB9OwotCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIGludCBlcnI7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludHNfcmF0ZXMpOwotICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAuLi4uCi0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBjb25zdHJhaW50cy4KLSAgICAgICAgTG9vayBhdCA8ZmlsZW5hbWU+c291bmQvcGNtLmg8L2ZpbGVuYW1lPiBmb3IgYSBjb21wbGV0ZSBsaXN0LgotICAgICAgICBZb3UgY2FuIGV2ZW4gZGVmaW5lIHlvdXIgb3duIGNvbnN0cmFpbnQgcnVsZXMuCi0gICAgICAgIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIG15X2NoaXAgY2FuIG1hbmFnZSBhIHN1YnN0cmVhbSBvZiAxIGNoYW5uZWwKLSAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhlIGZvcm1hdCBpcyBTMTZfTEUsIG90aGVyd2lzZSBpdCBzdXBwb3J0cyBhbnkgZm9ybWF0Ci0gICAgICAgIHNwZWNpZmllZCBpbiB0aGUgPHN0cnVjdG5hbWU+c25kX3BjbV9oYXJkd2FyZTwvc3RydWN0bmFtZT4gc3RydWN0dXJlIChvciBpbiBhbnkKLSAgICAgICAgb3RoZXIgY29uc3RyYWludF9saXN0KS4gWW91IGNhbiBidWlsZCBhIHJ1bGUgbGlrZSB0aGlzOgotCi0gICAgICAgIDxleGFtcGxlPgotCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHMgZm9yIENoYW5uZWxzPC90aXRsZT4KLQkgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAotICAgICAgICAgICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7Ci0gICAgICAgICAgc3RydWN0IHNuZF9tYXNrICpmID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOwotICAgICAgICAgIHN0cnVjdCBzbmRfbWFzayBmbXQ7Ci0KLSAgICAgICAgICBzbmRfbWFza19hbnkoJmZtdCk7ICAgIC8qIEluaXQgdGhlIHN0cnVjdCAqLwotICAgICAgICAgIGlmIChjLT5taW4gPCAyKSB7Ci0gICAgICAgICAgICAgICAgICBmbXQuYml0c1swXSAmPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBzbmRfbWFza19yZWZpbmUoZiwgJmZtdCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0gCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlbiB5b3UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gYWRkIHlvdXIgcnVsZToKLQotICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0JIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAotICAgICAgICAgICAgICAgICAgICAgIGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0LCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAotICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJ1bGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gc2V0cyB0aGUgbnVtYmVyIG9mCi0gICAgICAgIGNoYW5uZWxzLiBCdXQgYW4gYXBwbGljYXRpb24gY2FuIHNldCB0aGUgZm9ybWF0IGJlZm9yZSB0aGUgbnVtYmVyIG9mCi0gICAgICAgIGNoYW5uZWxzLiBUaHVzIHlvdSBhbHNvIG5lZWQgdG8gZGVmaW5lIHRoZSBpbnZlcnNlIHJ1bGU6Ci0KLSAgICAgICA8ZXhhbXBsZT4KLQkgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHMgZm9yIENoYW5uZWxzPC90aXRsZT4KLQkgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgaHdfcnVsZV9jaGFubmVsc19ieV9mb3JtYXQoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKLSAgewotICAgICAgICAgIHN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOwotICAgICAgICAgIHN0cnVjdCBzbmRfbWFzayAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2ludGVydmFsIGNoOwotCi0gICAgICAgICAgc25kX2ludGVydmFsX2FueSgmY2gpOwotICAgICAgICAgIGlmIChmLT5iaXRzWzBdID09IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSB7Ci0gICAgICAgICAgICAgICAgICBjaC5taW4gPSBjaC5tYXggPSAxOwotICAgICAgICAgICAgICAgICAgY2guaW50ZWdlciA9IDE7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmY2gpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9leGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIC4uLmFuZCBpbiB0aGUgb3BlbiBjYWxsYmFjazoKLSAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotCSA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgICAgaHdfcnVsZV9mb3JtYXRfYnlfY2hhbm5lbHMsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKLSAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEkgd29uJ3QgZ2l2ZSBtb3JlIGRldGFpbHMgaGVyZSwgcmF0aGVyIEkKLSAgICAgICAgd291bGQgbGlrZSB0byBzYXksIDxxdW90ZT5MdWtlLCB1c2UgdGhlIHNvdXJjZS48L3F1b3RlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIENvbnRyb2wgSW50ZXJmYWNlICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0iY29udHJvbC1pbnRlcmZhY2UiPgotICAgIDx0aXRsZT5Db250cm9sIEludGVyZmFjZTwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtZ2VuZXJhbCI+Ci0gICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHVzZWQgd2lkZWx5IGZvciBtYW55IHN3aXRjaGVzLAotICAgICAgc2xpZGVycywgZXRjLiB3aGljaCBhcmUgYWNjZXNzZWQgZnJvbSB1c2VyLXNwYWNlLiBJdHMgbW9zdAotICAgICAgaW1wb3J0YW50IHVzZSBpcyB0aGUgbWl4ZXIgaW50ZXJmYWNlLiBJbiBvdGhlciB3b3Jkcywgc2luY2UgQUxTQQotICAgICAgMC45LngsIGFsbCB0aGUgbWl4ZXIgc3R1ZmYgaXMgaW1wbGVtZW50ZWQgb24gdGhlIGNvbnRyb2wga2VybmVsIEFQSS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFMU0EgaGFzIGEgd2VsbC1kZWZpbmVkIEFDOTcgY29udHJvbCBtb2R1bGUuIElmIHlvdXIgY2hpcAotICAgICAgc3VwcG9ydHMgb25seSB0aGUgQUM5NyBhbmQgbm90aGluZyBlbHNlLCB5b3UgY2FuIHNraXAgdGhpcwotICAgICAgc2VjdGlvbi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY29udHJvbCBBUEkgaXMgZGVmaW5lZCBpbgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9jb250cm9sLmgmZ3Q7PC9maWxlbmFtZT4uCi0gICAgICBJbmNsdWRlIHRoaXMgZmlsZSBpZiB5b3Ugd2FudCB0byBhZGQgeW91ciBvd24gY29udHJvbHMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWRlZmluaXRpb24iPgotICAgICAgPHRpdGxlPkRlZmluaXRpb24gb2YgQ29udHJvbHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRvIGNyZWF0ZSBhIG5ldyBjb250cm9sLCB5b3UgbmVlZCB0byBkZWZpbmUgdGhlCi0JZm9sbG93aW5nIHRocmVlCi0gICAgICBjYWxsYmFja3M6IDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4sCi0gICAgICA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+cHV0PC9zdHJ1Y3RmaWVsZD4uIFRoZW4sIGRlZmluZSBhCi0gICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2tjb250cm9sX25ldzwvc3RydWN0bmFtZT4gcmVjb3JkLCBzdWNoIGFzOiAKLQotICAgICAgICA8ZXhhbXBsZT4KLQkgIDx0aXRsZT5EZWZpbml0aW9uIG9mIGEgQ29udHJvbDwvdGl0bGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBteV9jb250cm9sIF9fZGV2aW5pdGRhdGEgPSB7Ci0gICAgICAgICAgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0gICAgICAgICAgLm5hbWUgPSAiUENNIFBsYXliYWNrIFN3aXRjaCIsCi0gICAgICAgICAgLmluZGV4ID0gMCwKLSAgICAgICAgICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKLSAgICAgICAgICAucHJpdmF0ZV92YWx1ZSA9IDB4ZmZmZiwKLSAgICAgICAgICAuaW5mbyA9IG15X2NvbnRyb2xfaW5mbywKLSAgICAgICAgICAuZ2V0ID0gbXlfY29udHJvbF9nZXQsCi0gICAgICAgICAgLnB1dCA9IG15X2NvbnRyb2xfcHV0Ci0gIH07Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBNb3N0IGxpa2VseSB0aGUgY29udHJvbCBpcyBjcmVhdGVkIHZpYQotICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfbmV3MSgpPC9mdW5jdGlvbj4sIGFuZCBpbiBzdWNoIGEgY2FzZSwgeW91IGNhbgotICAgICAgYWRkIHRoZSA8cGFyYW1ldGVyPl9fZGV2aW5pdGRhdGE8L3BhcmFtZXRlcj4gcHJlZml4IHRvIHRoZQotICAgICAgZGVmaW5pdGlvbiBhcyBhYm92ZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmlmYWNlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSBjb250cm9sCi0gICAgICB0eXBlLCA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfWFhYPC9jb25zdGFudD4sIHdoaWNoCi0gICAgICBpcyB1c3VhbGx5IDxjb25zdGFudD5NSVhFUjwvY29uc3RhbnQ+LgotICAgICAgVXNlIDxjb25zdGFudD5DQVJEPC9jb25zdGFudD4gZm9yIGdsb2JhbCBjb250cm9scyB0aGF0IGFyZSBub3QKLSAgICAgIGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSBtaXhlci4KLSAgICAgIElmIHRoZSBjb250cm9sIGlzIGNsb3NlbHkgYXNzb2NpYXRlZCB3aXRoIHNvbWUgc3BlY2lmaWMgZGV2aWNlIG9uCi0gICAgICB0aGUgc291bmQgY2FyZCwgdXNlIDxjb25zdGFudD5IV0RFUDwvY29uc3RhbnQ+LAotICAgICAgPGNvbnN0YW50PlBDTTwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+UkFXTUlESTwvY29uc3RhbnQ+LAotICAgICAgPGNvbnN0YW50PlRJTUVSPC9jb25zdGFudD4sIG9yIDxjb25zdGFudD5TRVFVRU5DRVI8L2NvbnN0YW50PiwgYW5kCi0gICAgICBzcGVjaWZ5IHRoZSBkZXZpY2UgbnVtYmVyIHdpdGggdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+ZGV2aWNlPC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+c3ViZGV2aWNlPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIG5hbWUgaWRlbnRpZmllcgotICAgICAgc3RyaW5nLiBTaW5jZSBBTFNBIDAuOS54LCB0aGUgY29udHJvbCBuYW1lIGlzIHZlcnkgaW1wb3J0YW50LAotICAgICAgYmVjYXVzZSBpdHMgcm9sZSBpcyBjbGFzc2lmaWVkIGZyb20gaXRzIG5hbWUuIFRoZXJlIGFyZQotICAgICAgcHJlLWRlZmluZWQgc3RhbmRhcmQgY29udHJvbCBuYW1lcy4gVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbgotICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPjxjaXRldGl0bGU+Ci0gICAgICBDb250cm9sIE5hbWVzPC9jaXRldGl0bGU+PC9saW5rPiBzdWJzZWN0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGhvbGRzIHRoZSBpbmRleCBudW1iZXIKLSAgICAgIG9mIHRoaXMgY29udHJvbC4gSWYgdGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IGNvbnRyb2xzIHdpdGgKLSAgICAgIHRoZSBzYW1lIG5hbWUsIHRoZXkgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIGluZGV4Ci0gICAgICBudW1iZXIuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiAKLSAgICAgIHNldmVyYWwgY29kZWNzIGV4aXN0IG9uIHRoZSBjYXJkLiBJZiB0aGUgaW5kZXggaXMgemVybywgeW91IGNhbgotICAgICAgb21pdCB0aGUgZGVmaW5pdGlvbiBhYm92ZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmFjY2Vzczwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBhY2Nlc3MKLSAgICAgIHR5cGUgb2YgdGhpcyBjb250cm9sLiBHaXZlIHRoZSBjb21iaW5hdGlvbiBvZiBiaXQgbWFza3MsCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1hYWDwvY29uc3RhbnQ+LCB0aGVyZS4KLSAgICAgIFRoZSBkZXRhaWxzIHdpbGwgYmUgZXhwbGFpbmVkIGluCi0gICAgICB0aGUgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj48Y2l0ZXRpdGxlPgotICAgICAgQWNjZXNzIEZsYWdzPC9jaXRldGl0bGU+PC9saW5rPiBzdWJzZWN0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX3ZhbHVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMKLSAgICAgIGFuIGFyYml0cmFyeSBsb25nIGludGVnZXIgdmFsdWUgZm9yIHRoaXMgcmVjb3JkLiBXaGVuIHVzaW5nCi0gICAgICB0aGUgZ2VuZXJpYyA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+LAotICAgICAgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGFuZAotICAgICAgPHN0cnVjdGZpZWxkPnB1dDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcywgeW91IGNhbiBwYXNzIGEgdmFsdWUgCi0gICAgICB0aHJvdWdoIHRoaXMgZmllbGQuIElmIHNldmVyYWwgc21hbGwgbnVtYmVycyBhcmUgbmVjZXNzYXJ5LCB5b3UgY2FuCi0gICAgICBjb21iaW5lIHRoZW0gaW4gYml0d2lzZS4gT3IsIGl0J3MgcG9zc2libGUgdG8gZ2l2ZSBhIHBvaW50ZXIKLSAgICAgIChjYXN0ZWQgdG8gdW5zaWduZWQgbG9uZykgb2Ygc29tZSByZWNvcmQgdG8gdGhpcyBmaWVsZCwgdG9vLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPHN0cnVjdGZpZWxkPnRsdjwvc3RydWN0ZmllbGQ+IGZpZWxkIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUKLSAgICAgIG1ldGFkYXRhIGFib3V0IHRoZSBjb250cm9sOyBzZWUgdGhlCi0gICAgICA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS10bHYiPgotICAgICAgPGNpdGV0aXRsZT5NZXRhZGF0YTwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBvdGhlciB0aHJlZSBhcmUKLQk8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MiPjxjaXRldGl0bGU+Ci0JY2FsbGJhY2sgZnVuY3Rpb25zPC9jaXRldGl0bGU+PC9saW5rPi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY29udHJvbC1uYW1lcyI+Ci0gICAgICA8dGl0bGU+Q29udHJvbCBOYW1lczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmRzIHRvIGRlZmluZSB0aGUgY29udHJvbCBuYW1lcy4gQQotICAgICAgY29udHJvbCBpcyB1c3VhbGx5IGRlZmluZWQgZnJvbSB0aGUgdGhyZWUgcGFydHMgYXMKLSAgICAgIDxxdW90ZT5TT1VSQ0UgRElSRUNUSU9OIEZVTkNUSU9OPC9xdW90ZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0LCA8Y29uc3RhbnQ+U09VUkNFPC9jb25zdGFudD4sIHNwZWNpZmllcyB0aGUgc291cmNlCi0gICAgICBvZiB0aGUgY29udHJvbCwgYW5kIGlzIGEgc3RyaW5nIHN1Y2ggYXMgPHF1b3RlPk1hc3RlcjwvcXVvdGU+LAotICAgICAgPHF1b3RlPlBDTTwvcXVvdGU+LCA8cXVvdGU+Q0Q8L3F1b3RlPiBhbmQKLSAgICAgIDxxdW90ZT5MaW5lPC9xdW90ZT4uIFRoZXJlIGFyZSBtYW55IHByZS1kZWZpbmVkIHNvdXJjZXMuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHNlY29uZCwgPGNvbnN0YW50PkRJUkVDVElPTjwvY29uc3RhbnQ+LCBpcyBvbmUgb2YgdGhlCi0gICAgICBmb2xsb3dpbmcgc3RyaW5ncyBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgY29udHJvbDoKLSAgICAgIDxxdW90ZT5QbGF5YmFjazwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZTwvcXVvdGU+LCA8cXVvdGU+QnlwYXNzCi0gICAgICBQbGF5YmFjazwvcXVvdGU+IGFuZCA8cXVvdGU+QnlwYXNzIENhcHR1cmU8L3F1b3RlPi4gT3IsIGl0IGNhbgotICAgICAgYmUgb21pdHRlZCwgbWVhbmluZyBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHRoaXJkLCA8Y29uc3RhbnQ+RlVOQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQotICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBvZiB0aGUgY29udHJvbDoKLSAgICAgIDxxdW90ZT5Td2l0Y2g8L3F1b3RlPiwgPHF1b3RlPlZvbHVtZTwvcXVvdGU+IGFuZAotICAgICAgPHF1b3RlPlJvdXRlPC9xdW90ZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGV4YW1wbGUgb2YgY29udHJvbCBuYW1lcyBhcmUsIHRodXMsIDxxdW90ZT5NYXN0ZXIgQ2FwdHVyZQotICAgICAgU3dpdGNoPC9xdW90ZT4gb3IgPHF1b3RlPlBDTSBQbGF5YmFjayBWb2x1bWU8L3F1b3RlPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zOgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY29udHJvbC1uYW1lcy1nbG9iYWwiPgotICAgICAgICA8dGl0bGU+R2xvYmFsIGNhcHR1cmUgYW5kIHBsYXliYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPHF1b3RlPkNhcHR1cmUgU291cmNlPC9xdW90ZT4sIDxxdW90ZT5DYXB0dXJlIFN3aXRjaDwvcXVvdGU+Ci0gICAgICAgIGFuZCA8cXVvdGU+Q2FwdHVyZSBWb2x1bWU8L3F1b3RlPiBhcmUgdXNlZCBmb3IgdGhlIGdsb2JhbAotICAgICAgICBjYXB0dXJlIChpbnB1dCkgc291cmNlLCBzd2l0Y2ggYW5kIHZvbHVtZS4gU2ltaWxhcmx5LAotICAgICAgICA8cXVvdGU+UGxheWJhY2sgU3dpdGNoPC9xdW90ZT4gYW5kIDxxdW90ZT5QbGF5YmFjawotICAgICAgICBWb2x1bWU8L3F1b3RlPiBhcmUgdXNlZCBmb3IgdGhlIGdsb2JhbCBvdXRwdXQgZ2FpbiBzd2l0Y2ggYW5kCi0gICAgICAgIHZvbHVtZS4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtdG9uZSI+Ci0gICAgICAgIDx0aXRsZT5Ub25lLWNvbnRyb2xzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgdG9uZS1jb250cm9sIHN3aXRjaCBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UKLSAgICAgICAgPHF1b3RlPlRvbmUgQ29udHJvbCAtIFhYWDwvcXVvdGU+LCBlLmcuIDxxdW90ZT5Ub25lIENvbnRyb2wgLQotICAgICAgICBTd2l0Y2g8L3F1b3RlPiwgPHF1b3RlPlRvbmUgQ29udHJvbCAtIEJhc3M8L3F1b3RlPiwKLSAgICAgICAgPHF1b3RlPlRvbmUgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LiAgCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtM2QiPgotICAgICAgICA8dGl0bGU+M0QgY29udHJvbHM8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAzRC1jb250cm9sIHN3aXRjaGVzIGFuZCB2b2x1bWVzIGFyZSBzcGVjaWZpZWQgbGlrZSA8cXVvdGU+M0QKLSAgICAgICAgQ29udHJvbCAtIFhYWDwvcXVvdGU+LCBlLmcuIDxxdW90ZT4zRCBDb250cm9sIC0KLSAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT4zRCBDb250cm9sIC0gQ2VudGVyPC9xdW90ZT4sIDxxdW90ZT4zRAotICAgICAgICBDb250cm9sIC0gU3BhY2U8L3F1b3RlPi4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtbWljIj4KLSAgICAgICAgPHRpdGxlPk1pYyBib29zdDwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE1pYy1ib29zdCBzd2l0Y2ggaXMgc2V0IGFzIDxxdW90ZT5NaWMgQm9vc3Q8L3F1b3RlPiBvcgotICAgICAgICA8cXVvdGU+TWljIEJvb3N0ICg2ZEIpPC9xdW90ZT4uIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTW9yZSBwcmVjaXNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbgotICAgICAgICA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQ8L2ZpbGVuYW1lPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1hY2Nlc3MtZmxhZ3MiPgotICAgICAgPHRpdGxlPkFjY2VzcyBGbGFnczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBmbGFnIGlzIHRoZSBiaXRtYXNrIHdoaWNoIHNwZWNpZmllcyB0aGUgYWNjZXNzIHR5cGUKLSAgICAgIG9mIHRoZSBnaXZlbiBjb250cm9sLiAgVGhlIGRlZmF1bHQgYWNjZXNzIHR5cGUgaXMKLSAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFPC9jb25zdGFudD4sIAotICAgICAgd2hpY2ggbWVhbnMgYm90aCByZWFkIGFuZCB3cml0ZSBhcmUgYWxsb3dlZCB0byB0aGlzIGNvbnRyb2wuCi0gICAgICBXaGVuIHRoZSBhY2Nlc3MgZmxhZyBpcyBvbWl0dGVkIChpLmUuID0gMCksIGl0IGlzCi0gICAgICBjb25zaWRlcmVkIGFzIDxjb25zdGFudD5SRUFEV1JJVEU8L2NvbnN0YW50PiBhY2Nlc3MgYXMgZGVmYXVsdC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgV2hlbiB0aGUgY29udHJvbCBpcyByZWFkLW9ubHksIHBhc3MKLSAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRDwvY29uc3RhbnQ+IGluc3RlYWQuCi0gICAgICBJbiB0aGlzIGNhc2UsIHlvdSBkb24ndCBoYXZlIHRvIGRlZmluZQotICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KLSAgICAgIFNpbWlsYXJseSwgd2hlbiB0aGUgY29udHJvbCBpcyB3cml0ZS1vbmx5IChhbHRob3VnaCBpdCdzIGEgcmFyZQotICAgICAgY2FzZSksIHlvdSBjYW4gdXNlIHRoZSA8Y29uc3RhbnQ+V1JJVEU8L2NvbnN0YW50PiBmbGFnIGluc3RlYWQsIGFuZAotICAgICAgeW91IGRvbid0IG5lZWQgdGhlIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBJZiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzIGZyZXF1ZW50bHkgKGUuZy4gdGhlIFZVIG1ldGVyKSwKLSAgICAgIDxjb25zdGFudD5WT0xBVElMRTwvY29uc3RhbnQ+IGZsYWcgc2hvdWxkIGJlIGdpdmVuLiAgVGhpcyBtZWFucwotICAgICAgdGhhdCB0aGUgY29udHJvbCBtYXkgYmUgY2hhbmdlZCB3aXRob3V0Ci0gICAgICA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jaGFuZ2Utbm90aWZpY2F0aW9uIj48Y2l0ZXRpdGxlPgotICAgICAgbm90aWZpY2F0aW9uPC9jaXRldGl0bGU+PC9saW5rPi4gQXBwbGljYXRpb25zIHNob3VsZCBwb2xsIHN1Y2gKLSAgICAgIGEgY29udHJvbCBjb25zdGFudGx5LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFdoZW4gdGhlIGNvbnRyb2wgaXMgaW5hY3RpdmUsIHNldAotICAgICAgdGhlIDxjb25zdGFudD5JTkFDVElWRTwvY29uc3RhbnQ+IGZsYWcsIHRvby4KLSAgICAgIFRoZXJlIGFyZSA8Y29uc3RhbnQ+TE9DSzwvY29uc3RhbnQ+IGFuZAotICAgICAgPGNvbnN0YW50Pk9XTkVSPC9jb25zdGFudD4gZmxhZ3MgdG8gY2hhbmdlIHRoZSB3cml0ZQotICAgICAgcGVybWlzc2lvbnMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzIj4KLSAgICAgIDx0aXRsZT5DYWxsYmFja3M8L3RpdGxlPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWluZm8iPgotICAgICAgICA8dGl0bGU+aW5mbyBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8gZ2V0Ci0gICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udHJvbC4gVGhpcyBtdXN0IHN0b3JlIHRoZQotICAgICAgICB2YWx1ZXMgb2YgdGhlIGdpdmVuIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfY3RsX2VsZW1faW5mbzwvc3RydWN0bmFtZT4KLSAgICAgICAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgZm9yIGEgYm9vbGVhbiBjb250cm9sIHdpdGggYSBzaW5nbGUKLSAgICAgICAgZWxlbWVudDogCi0KLSAgICAgICAgICA8ZXhhbXBsZT4KLQkgICAgPHRpdGxlPkV4YW1wbGUgb2YgaW5mbyBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljdGxfbW9ub19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotICB7Ci0gICAgICAgICAgdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47Ci0gICAgICAgICAgdWluZm8tPmNvdW50ID0gMTsKLSAgICAgICAgICB1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotICAgICAgICAgIHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBzcGVjaWZpZXMgdGhlIHR5cGUKLSAgICAgICAgb2YgdGhlIGNvbnRyb2wuIFRoZXJlIGFyZSA8Y29uc3RhbnQ+Qk9PTEVBTjwvY29uc3RhbnQ+LAotICAgICAgICA8Y29uc3RhbnQ+SU5URUdFUjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RU5VTUVSQVRFRDwvY29uc3RhbnQ+LAotICAgICAgICA8Y29uc3RhbnQ+QllURVM8L2NvbnN0YW50PiwgPGNvbnN0YW50PklFQzk1ODwvY29uc3RhbnQ+IGFuZAotICAgICAgICA8Y29uc3RhbnQ+SU5URUdFUjY0PC9jb25zdGFudD4uIFRoZQotICAgICAgICA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBzcGVjaWZpZXMgdGhlIAotICAgICAgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBjb250cm9sLiBGb3IgZXhhbXBsZSwgYSBzdGVyZW8KLSAgICAgICAgdm9sdW1lIHdvdWxkIGhhdmUgY291bnQgPSAyLiBUaGUKLSAgICAgICAgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgYSB1bmlvbiwgYW5kIAotICAgICAgICB0aGUgdmFsdWVzIHN0b3JlZCBhcmUgZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgYm9vbGVhbiBhbmQKLSAgICAgICAgaW50ZWdlciB0eXBlcyBhcmUgaWRlbnRpY2FsLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBlbnVtZXJhdGVkIHR5cGUgaXMgYSBiaXQgZGlmZmVyZW50IGZyb20gb3RoZXJzLiAgWW91J2xsCi0gICAgICAgICAgbmVlZCB0byBzZXQgdGhlIHN0cmluZyBmb3IgdGhlIGN1cnJlbnRseSBnaXZlbiBpdGVtIGluZGV4LiAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljdGxfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotICB7Ci0gICAgICAgICAgc3RhdGljIGNoYXIgKnRleHRzWzRdID0gewotICAgICAgICAgICAgICAgICAgIkZpcnN0IiwgIlNlY29uZCIsICJUaGlyZCIsICJGb3VydGgiCi0gICAgICAgICAgfTsKLSAgICAgICAgICB1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLSAgICAgICAgICB1aW5mby0+Y291bnQgPSAxOwotICAgICAgICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNDsKLSAgICAgICAgICBpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IDMpCi0gICAgICAgICAgICAgICAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMzsKLSAgICAgICAgICBzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKLSAgICAgICAgICAgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLQkgIFNvbWUgY29tbW9uIGluZm8gY2FsbGJhY2tzIGFyZSBhdmFpbGFibGUgZm9yIHlvdXIgY29udmVuaWVuY2U6Ci0JPGZ1bmN0aW9uPnNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8oKTwvZnVuY3Rpb24+IGFuZAotCTxmdW5jdGlvbj5zbmRfY3RsX2Jvb2xlYW5fc3RlcmVvX2luZm8oKTwvZnVuY3Rpb24+LgotCU9idmlvdXNseSwgdGhlIGZvcm1lciBpcyBhbiBpbmZvIGNhbGxiYWNrIGZvciBhIG1vbm8gY2hhbm5lbAotCWJvb2xlYW4gaXRlbSwganVzdCBsaWtlIDxmdW5jdGlvbj5zbmRfbXljdGxfbW9ub19pbmZvPC9mdW5jdGlvbj4KLQlhYm92ZSwgYW5kIHRoZSBsYXR0ZXIgaXMgZm9yIGEgc3RlcmVvIGNoYW5uZWwgYm9vbGVhbiBpdGVtLgotCTwvcGFyYT4KLQotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWdldCI+Ci0gICAgICAgIDx0aXRsZT5nZXQgY2FsbGJhY2s8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQotICAgICAgICBjb250cm9sIGFuZCB0byByZXR1cm4gdG8gdXNlci1zcGFjZS4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBGb3IgZXhhbXBsZSwKLQotICAgICAgICAgIDxleGFtcGxlPgotCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBnZXQgY2FsbGJhY2s8L3RpdGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX215Y3RsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLSAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGdldF9zb21lX3ZhbHVlKGNoaXApOwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9leGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0JVGhlIDxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGRlcGVuZHMgb24gCi0gICAgICAgIHRoZSB0eXBlIG9mIGNvbnRyb2wgYXMgd2VsbCBhcyBvbiB0aGUgaW5mbyBjYWxsYmFjay4gIEZvciBleGFtcGxlLAotCXRoZSBzYiBkcml2ZXIgdXNlcyB0aGlzIGZpZWxkIHRvIHN0b3JlIHRoZSByZWdpc3RlciBvZmZzZXQsCi0gICAgICAgIHRoZSBiaXQtc2hpZnQgYW5kIHRoZSBiaXQtbWFzay4gIFRoZQotICAgICAgICA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIHNldCBhcyBmb2xsb3dzOgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgLnByaXZhdGVfdmFsdWUgPSByZWcgfCAoc2hpZnQgPDwgMTYpIHwgKG1hc2sgPDwgMjQpCi1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JYW5kIGlzIHJldHJpZXZlZCBpbiBjYWxsYmFja3MgbGlrZQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfc2JtaXhlcl9nZXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi0gIHsKLSAgICAgICAgICBpbnQgcmVnID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwotICAgICAgICAgIGludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwotICAgICAgICAgIGludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDB4ZmY7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JSW4gdGhlIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaywKLQl5b3UgaGF2ZSB0byBmaWxsIGFsbCB0aGUgZWxlbWVudHMgaWYgdGhlCi0gICAgICAgIGNvbnRyb2wgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudHMsCi0gICAgICAgIGkuZS4gPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gJmd0OyAxLgotCUluIHRoZSBleGFtcGxlIGFib3ZlLCB3ZSBmaWxsZWQgb25seSBvbmUgZWxlbWVudAotICAgICAgICAoPHN0cnVjdGZpZWxkPnZhbHVlLmludGVnZXIudmFsdWVbMF08L3N0cnVjdGZpZWxkPikgc2luY2UgaXQncwotICAgICAgICBhc3N1bWVkIGFzIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+ID0gMS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLXB1dCI+Ci0gICAgICAgIDx0aXRsZT5wdXQgY2FsbGJhY2s8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byB3cml0ZSBhIHZhbHVlIGZyb20gdXNlci1zcGFjZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEZvciBleGFtcGxlLAotCi0gICAgICAgICAgPGV4YW1wbGU+Ci0JICAgIDx0aXRsZT5FeGFtcGxlIG9mIHB1dCBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljdGxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotICAgICAgICAgIGludCBjaGFuZ2VkID0gMDsKLSAgICAgICAgICBpZiAoY2hpcC0+Y3VycmVudF92YWx1ZSAhPQotICAgICAgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKLSAgICAgICAgICAgICAgICAgIGNoYW5nZV9jdXJyZW50X3ZhbHVlKGNoaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Ci0gICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2V4YW1wbGU+Ci0KLSAgICAgICAgICBBcyBzZWVuIGFib3ZlLCB5b3UgaGF2ZSB0byByZXR1cm4gMSBpZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgY2hhbmdlZC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBjaGFuZ2VkLCByZXR1cm4gMCBpbnN0ZWFkLiAKLQlJZiBhbnkgZmF0YWwgZXJyb3IgaGFwcGVucywgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBhcwotICAgICAgICB1c3VhbC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotCUFzIGluIHRoZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssCi0Jd2hlbiB0aGUgY29udHJvbCBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50cywKLQlhbGwgZWxlbWVudHMgbXVzdCBiZSBldmFsdWF0ZWQgaW4gdGhpcyBjYWxsYmFjaywgdG9vLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MtYWxsIj4KLSAgICAgICAgPHRpdGxlPkNhbGxiYWNrcyBhcmUgbm90IGF0b21pYzwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFsbCB0aGVzZSB0aHJlZSBjYWxsYmFja3MgYXJlIGJhc2ljYWxseSBub3QgYXRvbWljLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiBldmVyeXRoaW5nIGlzIHJlYWR5LCBmaW5hbGx5IHdlIGNhbiBjcmVhdGUgYSBuZXcKLSAgICAgIGNvbnRyb2wuIFRvIGNyZWF0ZSBhIGNvbnRyb2wsIHRoZXJlIGFyZSB0d28gZnVuY3Rpb25zIHRvIGJlCi0gICAgICBjYWxsZWQsIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfYWRkKCk8L2Z1bmN0aW9uPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiB0aGUgc2ltcGxlc3Qgd2F5LCB5b3UgY2FuIGRvIGxpa2UgdGhpczoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJm15X2NvbnRyb2wsIGNoaXApKTsKLSAgaWYgKGVyciA8IDApCi0gICAgICAgICAgcmV0dXJuIGVycjsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBpcyB0aGUKLSAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfa2NvbnRyb2xfbmV3PC9zdHJ1Y3RuYW1lPiBvYmplY3QgZGVmaW5lZCBhYm92ZSwgYW5kIGNoaXAKLSAgICAgIGlzIHRoZSBvYmplY3QgcG9pbnRlciB0byBiZSBwYXNzZWQgdG8KLSAgICAgIGtjb250cm9sLSZndDtwcml2YXRlX2RhdGEgCi0gICAgICB3aGljaCBjYW4gYmUgcmVmZXJyZWQgdG8gaW4gY2FsbGJhY2tzLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+IGFsbG9jYXRlcyBhIG5ldwotICAgICAgPHN0cnVjdG5hbWU+c25kX2tjb250cm9sPC9zdHJ1Y3RuYW1lPiBpbnN0YW5jZSAodGhhdCdzIHdoeSB0aGUgZGVmaW5pdGlvbgotICAgICAgb2YgPHBhcmFtZXRlcj5teV9jb250cm9sPC9wYXJhbWV0ZXI+IGNhbiBiZSB3aXRoCi0gICAgICB0aGUgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IAotICAgICAgcHJlZml4KSwgYW5kIDxmdW5jdGlvbj5zbmRfY3RsX2FkZDwvZnVuY3Rpb24+IGFzc2lnbnMgdGhlIGdpdmVuCi0gICAgICBjb250cm9sIGNvbXBvbmVudCB0byB0aGUgY2FyZC4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNoYW5nZS1ub3RpZmljYXRpb24iPgotICAgICAgPHRpdGxlPkNoYW5nZSBOb3RpZmljYXRpb248L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBhbmQgdXBkYXRlIGEgY29udHJvbCBpbiB0aGUgaW50ZXJydXB0Ci0gICAgICByb3V0aW5lLCB5b3UgY2FuIGNhbGwgPGZ1bmN0aW9uPnNuZF9jdGxfbm90aWZ5KCk8L2Z1bmN0aW9uPi4gRm9yCi0gICAgICBleGFtcGxlLCAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfY3RsX25vdGlmeShjYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgaWRfcG9pbnRlcik7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBldmVudC1tYXNrLCBhbmQgdGhlCi0gICAgICBjb250cm9sIGlkIHBvaW50ZXIgZm9yIHRoZSBub3RpZmljYXRpb24uIFRoZSBldmVudC1tYXNrCi0gICAgICBzcGVjaWZpZXMgdGhlIHR5cGVzIG9mIG5vdGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGluIHRoZSBhYm92ZQotICAgICAgZXhhbXBsZSwgdGhlIGNoYW5nZSBvZiBjb250cm9sIHZhbHVlcyBpcyBub3RpZmllZC4KLSAgICAgIFRoZSBpZCBwb2ludGVyIGlzIHRoZSBwb2ludGVyIG9mIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfY3RsX2VsZW1faWQ8L3N0cnVjdG5hbWU+Ci0gICAgICB0byBiZSBub3RpZmllZC4KLSAgICAgIFlvdSBjYW4gZmluZCBzb21lIGV4YW1wbGVzIGluIDxmaWxlbmFtZT5lczE5MzguYzwvZmlsZW5hbWU+IG9yCi0gICAgICA8ZmlsZW5hbWU+ZXMxOTY4LmM8L2ZpbGVuYW1lPiBmb3IgaGFyZHdhcmUgdm9sdW1lIGludGVycnVwdHMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS10bHYiPgotICAgICAgPHRpdGxlPk1ldGFkYXRhPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgVG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZEIgdmFsdWVzIG9mIGEgbWl4ZXIgY29udHJvbCwgdXNlCi0gICAgICBvbiBvZiB0aGUgPGNvbnN0YW50PkRFQ0xBUkVfVExWX3h4eDwvY29uc3RhbnQ+IG1hY3JvcyBmcm9tCi0gICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3Rsdi5oJmd0OzwvZmlsZW5hbWU+IHRvIGRlZmluZSBhIHZhcmlhYmxlCi0gICAgICBjb250YWluaW5nIHRoaXMgaW5mb3JtYXRpb24sIHNldCB0aGU8c3RydWN0ZmllbGQ+dGx2LnAKLSAgICAgIDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHBvaW50IHRvIHRoaXMgdmFyaWFibGUsIGFuZCBpbmNsdWRlIHRoZQotICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRDwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+YWNjZXNzPC9zdHJ1Y3RmaWVsZD4gZmllbGQ7IGxpa2UgdGhpczoKLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoZGJfc2NhbGVfbXlfY29udHJvbCwgLTQwNTAsIDE1MCwgMCk7Ci0KLSAgc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG15X2NvbnRyb2wgX19kZXZpbml0ZGF0YSA9IHsKLSAgICAgICAgICAuLi4KLSAgICAgICAgICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8Ci0gICAgICAgICAgICAgICAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCwKLSAgICAgICAgICAuLi4KLSAgICAgICAgICAudGx2LnAgPSBkYl9zY2FsZV9teV9jb250cm9sLAotICB9OwotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPGZ1bmN0aW9uPkRFQ0xBUkVfVExWX0RCX1NDQUxFPC9mdW5jdGlvbj4gbWFjcm8gZGVmaW5lcwotICAgICAgaW5mb3JtYXRpb24gYWJvdXQgYSBtaXhlciBjb250cm9sIHdoZXJlIGVhY2ggc3RlcCBpbiB0aGUgY29udHJvbCdzCi0gICAgICB2YWx1ZSBjaGFuZ2VzIHRoZSBkQiB2YWx1ZSBieSBhIGNvbnN0YW50IGRCIGFtb3VudC4KLSAgICAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGRlZmluZWQuCi0gICAgICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgbWluaW11bSB2YWx1ZSwgaW4gdW5pdHMgb2YgMC4wMSBkQi4KLSAgICAgIFRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgdGhlIHN0ZXAgc2l6ZSwgaW4gdW5pdHMgb2YgMC4wMSBkQi4KLSAgICAgIFNldCB0aGUgZm91cnRoIHBhcmFtZXRlciB0byAxIGlmIHRoZSBtaW5pbXVtIHZhbHVlIGFjdHVhbGx5IG11dGVzCi0gICAgICB0aGUgY29udHJvbC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPGZ1bmN0aW9uPkRFQ0xBUkVfVExWX0RCX0xJTkVBUjwvZnVuY3Rpb24+IG1hY3JvIGRlZmluZXMKLSAgICAgIGluZm9ybWF0aW9uIGFib3V0IGEgbWl4ZXIgY29udHJvbCB3aGVyZSB0aGUgY29udHJvbCdzIHZhbHVlIGFmZmVjdHMKLSAgICAgIHRoZSBvdXRwdXQgbGluZWFybHkuCi0gICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBkZWZpbmVkLgotICAgICAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIG1pbmltdW0gdmFsdWUsIGluIHVuaXRzIG9mIDAuMDEgZEIuCi0gICAgICBUaGUgdGhpcmQgcGFyYW1ldGVyIGlzIHRoZSBtYXhpbXVtIHZhbHVlLCBpbiB1bml0cyBvZiAwLjAxIGRCLgotICAgICAgSWYgdGhlIG1pbmltdW0gdmFsdWUgbXV0ZXMgdGhlIGNvbnRyb2wsIHNldCB0aGUgc2Vjb25kIHBhcmFtZXRlciB0bwotICAgICAgPGNvbnN0YW50PlRMVl9EQl9HQUlOX01VVEU8L2NvbnN0YW50Pi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBBUEkgZm9yIEFDOTcgQ29kZWMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJhcGktYWM5NyI+Ci0gICAgPHRpdGxlPkFQSSBmb3IgQUM5NyBDb2RlYzwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbj4KLSAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgQUxTQSBBQzk3IGNvZGVjIGxheWVyIGlzIGEgd2VsbC1kZWZpbmVkIG9uZSwgYW5kIHlvdSBkb24ndAotICAgICAgaGF2ZSB0byB3cml0ZSBtdWNoIGNvZGUgdG8gY29udHJvbCBpdC4gT25seSBsb3ctbGV2ZWwgY29udHJvbAotICAgICAgcm91dGluZXMgYXJlIG5lY2Vzc2FyeS4gVGhlIEFDOTcgY29kZWMgQVBJIGlzIGRlZmluZWQgaW4KLSAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvYWM5N19jb2RlYy5oJmd0OzwvZmlsZW5hbWU+LiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctZXhhbXBsZSI+Ci0gICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGV4YW1wbGU+Ci0JICAgIDx0aXRsZT5FeGFtcGxlIG9mIEFDOTcgSW50ZXJmYWNlPC90aXRsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwIHsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgc3RydWN0IHNuZF9hYzk3ICphYzk3OwotICAgICAgICAgIC4uLi4KLSAgfTsKLQotICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX215Y2hpcF9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgLyogcmVhZCBhIHJlZ2lzdGVyIHZhbHVlIGhlcmUgZnJvbSB0aGUgY29kZWMgKi8KLSAgICAgICAgICByZXR1cm4gdGhlX3JlZ2lzdGVyX3ZhbHVlOwotICB9Ci0KLSAgc3RhdGljIHZvaWQgc25kX215Y2hpcF9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwotICAgICAgICAgIC4uLi4KLSAgICAgICAgICAvKiB3cml0ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXIgdmFsdWUgdG8gdGhlIGNvZGVjICovCi0gIH0KLQotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfYWM5NyhzdHJ1Y3QgbXljaGlwICpjaGlwKQotICB7Ci0gICAgICAgICAgc3RydWN0IHNuZF9hYzk3X2J1cyAqYnVzOwotICAgICAgICAgIHN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3OwotICAgICAgICAgIGludCBlcnI7Ci0gICAgICAgICAgc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idXNfb3BzIG9wcyA9IHsKLSAgICAgICAgICAgICAgICAgIC53cml0ZSA9IHNuZF9teWNoaXBfYWM5N193cml0ZSwKLSAgICAgICAgICAgICAgICAgIC5yZWFkID0gc25kX215Y2hpcF9hYzk3X3JlYWQsCi0gICAgICAgICAgfTsKLQotICAgICAgICAgIGVyciA9IHNuZF9hYzk3X2J1cyhjaGlwLT5jYXJkLCAwLCAmb3BzLCBOVUxMLCAmYnVzKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOwotICAgICAgICAgIGFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgICAgICAgICByZXR1cm4gc25kX2FjOTdfbWl4ZXIoYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOwotICB9Ci0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY29uc3RydWN0b3IiPgotICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyBjcmVhdGUgYW4gYWM5NyBpbnN0YW5jZSwgZmlyc3QgY2FsbCA8ZnVuY3Rpb24+c25kX2FjOTdfYnVzPC9mdW5jdGlvbj4KLSAgICAgIHdpdGggYW4gPHR5cGU+YWM5N19idXNfb3BzX3Q8L3R5cGU+IHJlY29yZCB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9ucy4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2FjOTdfYnVzICpidXM7Ci0gIHN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7Ci0gICAgICAgIC53cml0ZSA9IHNuZF9teWNoaXBfYWM5N193cml0ZSwKLSAgICAgICAgLnJlYWQgPSBzbmRfbXljaGlwX2FjOTdfcmVhZCwKLSAgfTsKLQotICBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgTlVMTCwgJnBidXMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgIFRoZSBidXMgcmVjb3JkIGlzIHNoYXJlZCBhbW9uZyBhbGwgYmVsb25naW5nIGFjOTcgaW5zdGFuY2VzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEFuZCB0aGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X21peGVyKCk8L2Z1bmN0aW9uPiB3aXRoIGFuCi0gICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2FjOTdfdGVtcGxhdGU8L3N0cnVjdG5hbWU+Ci0gICAgICByZWNvcmQgdG9nZXRoZXIgd2l0aCB0aGUgYnVzIHBvaW50ZXIgY3JlYXRlZCBhYm92ZS4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5NzsKLSAgaW50IGVycjsKLQotICBtZW1zZXQoJmFjOTcsIDAsIHNpemVvZihhYzk3KSk7Ci0gIGFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgc25kX2FjOTdfbWl4ZXIoYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgd2hlcmUgY2hpcC0mZ3Q7YWM5NyBpcyBhIHBvaW50ZXIgdG8gYSBuZXdseSBjcmVhdGVkCi0gICAgICAgIDx0eXBlPmFjOTdfdDwvdHlwZT4gaW5zdGFuY2UuCi0gICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNoaXAgcG9pbnRlciBpcyBzZXQgYXMgdGhlIHByaXZhdGUgZGF0YSwgc28gdGhhdAotICAgICAgICB0aGUgcmVhZC93cml0ZSBjYWxsYmFjayBmdW5jdGlvbnMgY2FuIHJlZmVyIHRvIHRoaXMgY2hpcCBpbnN0YW5jZS4KLSAgICAgICAgVGhpcyBpbnN0YW5jZSBpcyBub3QgbmVjZXNzYXJpbHkgc3RvcmVkIGluIHRoZSBjaGlwCi0JcmVjb3JkLiAgSWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZXMgZnJvbSB0aGUKLSAgICAgICAgZHJpdmVyLCBvciBuZWVkIHRoZSBzdXNwZW5kL3Jlc3VtZSBvZiBhYzk3IGNvZGVjcywga2VlcCB0aGlzCi0gICAgICAgIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNhbGxiYWNrcyI+Ci0gICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgc3RhbmRhcmQgY2FsbGJhY2tzIGFyZSA8c3RydWN0ZmllbGQ+cmVhZDwvc3RydWN0ZmllbGQ+IGFuZAotICAgICAgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4uIE9idmlvdXNseSB0aGV5IAotICAgICAgY29ycmVzcG9uZCB0byB0aGUgZnVuY3Rpb25zIGZvciByZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyB0byB0aGUKLSAgICAgIGhhcmR3YXJlIGxvdy1sZXZlbCBjb2Rlcy4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnJlYWQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayByZXR1cm5zIHRoZQotICAgICAgICByZWdpc3RlciB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGFyZ3VtZW50LiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX215Y2hpcF9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgcmV0dXJuIHRoZV9yZWdpc3Rlcl92YWx1ZTsKLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgSGVyZSwgdGhlIGNoaXAgY2FuIGJlIGNhc3QgZnJvbSBhYzk3LSZndDtwcml2YXRlX2RhdGEuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBNZWFud2hpbGUsIHRoZSA8c3RydWN0ZmllbGQ+d3JpdGU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcwotICAgICAgICB1c2VkIHRvIHNldCB0aGUgcmVnaXN0ZXIgdmFsdWUuIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIHNuZF9teWNoaXBfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub24tYXRvbWljIGxpa2UgdGhlIGNvbnRyb2wgQVBJIGNhbGxiYWNrcy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIGNhbGxiYWNrczoKLSAgICAgIDxzdHJ1Y3RmaWVsZD5yZXNldDwvc3RydWN0ZmllbGQ+LAotICAgICAgPHN0cnVjdGZpZWxkPndhaXQ8L3N0cnVjdGZpZWxkPiBhbmQKLSAgICAgIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5yZXNldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQKLSAgICAgIHRoZSBjb2RlYy4gSWYgdGhlIGNoaXAgcmVxdWlyZXMgYSBzcGVjaWFsIGtpbmQgb2YgcmVzZXQsIHlvdSBjYW4KLSAgICAgIGRlZmluZSB0aGlzIGNhbGxiYWNrLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+d2FpdDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8KLSAgICAgIGFkZCBzb21lIHdhaXRpbmcgdGltZSBpbiB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLiBJZiB0aGUKLSAgICAgIGNoaXAgcmVxdWlyZXMgdGhlIGV4dHJhIHdhaXRpbmcgdGltZSwgZGVmaW5lIHRoaXMgY2FsbGJhY2suIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdXNlZCBmb3IKLSAgICAgIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny11cGRhdGluZy1yZWdpc3RlcnMiPgotICAgICAgPHRpdGxlPlVwZGF0aW5nIFJlZ2lzdGVycyBpbiBUaGUgRHJpdmVyPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdG8gdGhlIGNvZGVjIGZyb20gdGhlIGRyaXZlciwgeW91IGNhbgotICAgICAgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4sCi0gICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVhZCgpPC9mdW5jdGlvbj4sCi0gICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGVfYml0cygpPC9mdW5jdGlvbj4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgQm90aCA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8KLSAgICAgICAgc2V0IGEgdmFsdWUgdG8gdGhlIGdpdmVuIHJlZ2lzdGVyCi0gICAgICAgICg8Y29uc3RhbnQ+QUM5N19YWFg8L2NvbnN0YW50PikuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcwotICAgICAgICB0aGF0IDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGUoKTwvZnVuY3Rpb24+IGRvZXNuJ3Qgd3JpdGUgYQotICAgICAgICB2YWx1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaGFzIGJlZW4gYWxyZWFkeSBzZXQsIHdoaWxlCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzIHJld3JpdGVzIHRoZQotICAgICAgICB2YWx1ZS4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19NQVNURVIsIDB4ODA4MCk7Ci0gIHNuZF9hYzk3X3VwZGF0ZShhYzk3LCBBQzk3X01BU1RFUiwgMHg4MDgwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3JlYWQoKTwvZnVuY3Rpb24+IGlzIHVzZWQgdG8gcmVhZCB0aGUgdmFsdWUKLSAgICAgICAgb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLiBGb3IgZXhhbXBsZSwgCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgdmFsdWUgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfTUFTVEVSKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZV9iaXRzKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIHRvIHVwZGF0ZQotICAgICAgICBzb21lIGJpdHMgaW4gdGhlIGdpdmVuIHJlZ2lzdGVyLiAgCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5NywgcmVnLCBtYXNrLCB2YWx1ZSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsc28sIHRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBzYW1wbGUgcmF0ZSAob2YgYQotICAgICAgICBnaXZlbiByZWdpc3RlciBzdWNoIGFzCi0gICAgICAgIDxjb25zdGFudD5BQzk3X1BDTV9GUk9OVF9EQUNfUkFURTwvY29uc3RhbnQ+KSB3aGVuIFZSQSBvcgotICAgICAgICBEUkEgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjb2RlYzoKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3NldF9yYXRlKCk8L2Z1bmN0aW9uPi4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2FjOTdfc2V0X3JhdGUoYWM5NywgQUM5N19QQ01fRlJPTlRfREFDX1JBVEUsIDQ0MTAwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSB0byBzZXQgdGhlIHJhdGU6Ci0gICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTUlDX0FEQ19SQVRFPC9jb25zdGFudD4sCi0gICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fRlJPTlRfREFDX1JBVEU8L2NvbnN0YW50PiwKLSAgICAgIDxjb25zdGFudD5BQzk3X1BDTV9MUl9BRENfUkFURTwvY29uc3RhbnQ+LAotICAgICAgPGNvbnN0YW50PkFDOTdfU1BESUY8L2NvbnN0YW50Pi4gV2hlbgotICAgICAgPGNvbnN0YW50PkFDOTdfU1BESUY8L2NvbnN0YW50PiBpcyBzcGVjaWZpZWQsIHRoZSByZWdpc3RlciBpcwotICAgICAgbm90IHJlYWxseSBjaGFuZ2VkIGJ1dCB0aGUgY29ycmVzcG9uZGluZyBJRUM5NTggc3RhdHVzIGJpdHMgd2lsbAotICAgICAgYmUgdXBkYXRlZC4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNsb2NrLWFkanVzdG1lbnQiPgotICAgICAgPHRpdGxlPkNsb2NrIEFkanVzdG1lbnQ8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHNvbWUgY2hpcHMsIHRoZSBjbG9jayBvZiB0aGUgY29kZWMgaXNuJ3QgNDgwMDAgYnV0IHVzaW5nIGEKLSAgICAgIFBDSSBjbG9jayAodG8gc2F2ZSBhIHF1YXJ0eiEpLiBJbiB0aGlzIGNhc2UsIGNoYW5nZSB0aGUgZmllbGQKLSAgICAgIGJ1cy0mZ3Q7Y2xvY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW50ZWw4eDAgCi0gICAgICBhbmQgZXMxOTY4IGRyaXZlcnMgaGF2ZSB0aGVpciBvd24gZnVuY3Rpb24gdG8gcmVhZCBmcm9tIHRoZSBjbG9jay4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctcHJvYy1maWxlcyI+Ci0gICAgICA8dGl0bGU+UHJvYyBGaWxlczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIEFMU0EgQUM5NyBpbnRlcmZhY2Ugd2lsbCBjcmVhdGUgYSBwcm9jIGZpbGUgc3VjaCBhcwotICAgICAgPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkMC9jb2RlYzk3IzAvYWM5NyMwLTA8L2ZpbGVuYW1lPiBhbmQKLSAgICAgIDxmaWxlbmFtZT5hYzk3IzAtMCtyZWdzPC9maWxlbmFtZT4uIFlvdSBjYW4gcmVmZXIgdG8gdGhlc2UgZmlsZXMgdG8KLSAgICAgIHNlZSB0aGUgY3VycmVudCBzdGF0dXMgYW5kIHJlZ2lzdGVycyBvZiB0aGUgY29kZWMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1tdWx0aXBsZS1jb2RlY3MiPgotICAgICAgPHRpdGxlPk11bHRpcGxlIENvZGVjczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBjb2RlY3Mgb24gdGhlIHNhbWUgY2FyZCwgeW91IG5lZWQgdG8KLSAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X21peGVyKCk8L2Z1bmN0aW9uPiBtdWx0aXBsZSB0aW1lcyB3aXRoCi0gICAgICBhYzk3Lm51bT0xIG9yIGdyZWF0ZXIuIFRoZSA8c3RydWN0ZmllbGQ+bnVtPC9zdHJ1Y3RmaWVsZD4gZmllbGQKLSAgICAgIHNwZWNpZmllcyB0aGUgY29kZWMgbnVtYmVyLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBzZXQgdXAgbXVsdGlwbGUgY29kZWNzLCB5b3UgZWl0aGVyIG5lZWQgdG8gd3JpdGUKLSAgICAgIGRpZmZlcmVudCBjYWxsYmFja3MgZm9yIGVhY2ggY29kZWMgb3IgY2hlY2sKLSAgICAgIGFjOTctJmd0O251bSBpbiB0aGUgY2FsbGJhY2sgcm91dGluZXMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIE1JREkgKE1QVTQwMS1VQVJUKSBJbnRlcmZhY2UgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJtaWRpLWludGVyZmFjZSI+Ci0gICAgPHRpdGxlPk1JREkgKE1QVTQwMS1VQVJUKSBJbnRlcmZhY2U8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWdlbmVyYWwiPgotICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE1hbnkgc291bmRjYXJkcyBoYXZlIGJ1aWx0LWluIE1JREkgKE1QVTQwMS1VQVJUKQotICAgICAgaW50ZXJmYWNlcy4gV2hlbiB0aGUgc291bmRjYXJkIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBNUFU0MDEtVUFSVAotICAgICAgaW50ZXJmYWNlLCBtb3N0IGxpa2VseSB5b3UgY2FuIHVzZSB0aGUgQUxTQSBNUFU0MDEtVUFSVCBBUEkuIFRoZQotICAgICAgTVBVNDAxLVVBUlQgQVBJIGlzIGRlZmluZWQgaW4KLSAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvbXB1NDAxLmgmZ3Q7PC9maWxlbmFtZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgU29tZSBzb3VuZGNoaXBzIGhhdmUgYSBzaW1pbGFyIGJ1dCBzbGlnaHRseSBkaWZmZXJlbnQKLSAgICAgIGltcGxlbWVudGF0aW9uIG9mIG1wdTQwMSBzdHVmZi4gRm9yIGV4YW1wbGUsIGVtdTEwazEgaGFzIGl0cyBvd24KLSAgICAgIG1wdTQwMSByb3V0aW5lcy4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVG8gY3JlYXRlIGEgcmF3bWlkaSBvYmplY3QsIGNhbGwKLSAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLSAgc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLCBwb3J0LCBpbmZvX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgIGlycSwgaXJxX2ZsYWdzLCAmcm1pZGkpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlCi0gICAgICBpbmRleCBvZiB0aGlzIGNvbXBvbmVudC4gWW91IGNhbiBjcmVhdGUgdXAgdG8gOCByYXdtaWRpCi0gICAgICBkZXZpY2VzLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgdHlwZSBvZiB0aGUgaGFyZHdhcmUsCi0gICAgICA8Y29uc3RhbnQ+TVBVNDAxX0hXX1hYWDwvY29uc3RhbnQ+LiBJZiBpdCdzIG5vdCBhIHNwZWNpYWwgb25lLAotICAgICAgeW91IGNhbiB1c2UgPGNvbnN0YW50Pk1QVTQwMV9IV19NUFU0MDE8L2NvbnN0YW50Pi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgNHRoIGFyZ3VtZW50IGlzIHRoZSBJL08gcG9ydCBhZGRyZXNzLiBNYW55Ci0gICAgICBiYWNrd2FyZC1jb21wYXRpYmxlIE1QVTQwMSBoYXZlIGFuIEkvTyBwb3J0IHN1Y2ggYXMgMHgzMzAuIE9yLCBpdAotICAgICAgbWlnaHQgYmUgYSBwYXJ0IG9mIGl0cyBvd24gUENJIEkvTyByZWdpb24uIEl0IGRlcGVuZHMgb24gdGhlCi0gICAgICBjaGlwIGRlc2lnbi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotCVRoZSA1dGggYXJndW1lbnQgaXMgYSBiaXRmbGFnIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotICAgICAgICBXaGVuIHRoZSBJL08gcG9ydCBhZGRyZXNzIGFib3ZlIGlzIHBhcnQgb2YgdGhlIFBDSSBJL08KLSAgICAgIHJlZ2lvbiwgdGhlIE1QVTQwMSBJL08gcG9ydCBtaWdodCBoYXZlIGJlZW4gYWxyZWFkeSBhbGxvY2F0ZWQKLSAgICAgIChyZXNlcnZlZCkgYnkgdGhlIGRyaXZlciBpdHNlbGYuIEluIHN1Y2ggYSBjYXNlLCBwYXNzIGEgYml0IGZsYWcKLSAgICAgIDxjb25zdGFudD5NUFU0MDFfSU5GT19JTlRFR1JBVEVEPC9jb25zdGFudD4sCi0gICAgICBhbmQgdGhlIG1wdTQwMS11YXJ0IGxheWVyIHdpbGwgYWxsb2NhdGUgdGhlIEkvTyBwb3J0cyBieSBpdHNlbGYuIAotICAgICAgPC9wYXJhPgotCi0JPHBhcmE+Ci0JV2hlbiB0aGUgY29udHJvbGxlciBzdXBwb3J0cyBvbmx5IHRoZSBpbnB1dCBvciBvdXRwdXQgTUlESSBzdHJlYW0sCi0JcGFzcyB0aGUgPGNvbnN0YW50Pk1QVTQwMV9JTkZPX0lOUFVUPC9jb25zdGFudD4gb3IKLQk8Y29uc3RhbnQ+TVBVNDAxX0lORk9fT1VUUFVUPC9jb25zdGFudD4gYml0ZmxhZywgcmVzcGVjdGl2ZWx5LgotCVRoZW4gdGhlIHJhd21pZGkgaW5zdGFuY2UgaXMgY3JlYXRlZCBhcyBhIHNpbmdsZSBzdHJlYW0uCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JPGNvbnN0YW50Pk1QVTQwMV9JTkZPX01NSU88L2NvbnN0YW50PiBiaXRmbGFnIGlzIHVzZWQgdG8gY2hhbmdlCi0JdGhlIGFjY2VzcyBtZXRob2QgdG8gTU1JTyAodmlhIHJlYWRiIGFuZCB3cml0ZWIpIGluc3RlYWQgb2YKLQlpb2IgYW5kIG91dGIuIEluIHRoaXMgY2FzZSwgeW91IGhhdmUgdG8gcGFzcyB0aGUgaW9tYXBwZWQgYWRkcmVzcwotCXRvIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlXaGVuIDxjb25zdGFudD5NUFU0MDFfSU5GT19UWF9JUlE8L2NvbnN0YW50PiBpcyBzZXQsIHRoZSBvdXRwdXQKLQlzdHJlYW0gaXNuJ3QgY2hlY2tlZCBpbiB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoZSBkcml2ZXIKLQluZWVkcyB0byBjYWxsIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0X3R4KCk8L2Z1bmN0aW9uPgotCWJ5IGl0c2VsZiB0byBzdGFydCBwcm9jZXNzaW5nIHRoZSBvdXRwdXQgc3RyZWFtIGluIHRoZSBpcnEgaGFuZGxlci4KLQk8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBVc3VhbGx5LCB0aGUgcG9ydCBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIHBvcnQgYW5kCi0gICAgICAgIHBvcnQgKyAxIGNvcnJlc3BvbmRzIHRvIHRoZSBkYXRhIHBvcnQuIElmIG5vdCwgeW91IG1heSBjaGFuZ2UKLSAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5jcG9ydDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mCi0gICAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfbXB1NDAxPC9zdHJ1Y3RuYW1lPiBtYW51YWxseSAKLSAgICAgICAgYWZ0ZXJ3YXJkLiBIb3dldmVyLCA8c3RydWN0bmFtZT5zbmRfbXB1NDAxPC9zdHJ1Y3RuYW1lPiBwb2ludGVyIGlzIG5vdAotICAgICAgICByZXR1cm5lZCBleHBsaWNpdGx5IGJ5Ci0gICAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4gWW91IG5lZWQgdG8gY2FzdAotICAgICAgICBybWlkaS0mZ3Q7cHJpdmF0ZV9kYXRhIHRvCi0gICAgICAgIDxzdHJ1Y3RuYW1lPnNuZF9tcHU0MDE8L3N0cnVjdG5hbWU+IGV4cGxpY2l0bHksIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBzbmRfbXB1NDAxICptcHU7Ci0gIG1wdSA9IHJtaWRpLT5wcml2YXRlX2RhdGE7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBhbmQgcmVzZXQgdGhlIGNwb3J0IGFzIHlvdSBsaWtlOgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIG1wdS0+Y3BvcnQgPSBteV9vd25fY29udHJvbF9wb3J0OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgNnRoIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgaXJxIG51bWJlciBmb3IgVUFSVC4gSWYgdGhlIGlycQotICAgICAgaXMgYWxyZWFkeSBhbGxvY2F0ZWQsIHBhc3MgMCB0byB0aGUgN3RoIGFyZ3VtZW50Ci0gICAgICAoPHBhcmFtZXRlcj5pcnFfZmxhZ3M8L3BhcmFtZXRlcj4pLiBPdGhlcndpc2UsIHBhc3MgdGhlIGZsYWdzCi0gICAgICBmb3IgaXJxIGFsbG9jYXRpb24gCi0gICAgICAoPGNvbnN0YW50PlNBX1hYWDwvY29uc3RhbnQ+IGJpdHMpIHRvIGl0LCBhbmQgdGhlIGlycSB3aWxsIGJlCi0gICAgICByZXNlcnZlZCBieSB0aGUgbXB1NDAxLXVhcnQgbGF5ZXIuIElmIHRoZSBjYXJkIGRvZXNuJ3QgZ2VuZXJhdGUKLSAgICAgIFVBUlQgaW50ZXJydXB0cywgcGFzcyAtMSBhcyB0aGUgaXJxIG51bWJlci4gVGhlbiBhIHRpbWVyCi0gICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBpbnZva2VkIGZvciBwb2xsaW5nLiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ibWlkaS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPgotICAgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIHRoZSBpbnRlcnJ1cHQgaXMgYWxsb2NhdGVkIGluCi0gICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4sIHRoZSBwcml2YXRlCi0gICAgICBpbnRlcnJ1cHQgaGFuZGxlciBpcyB1c2VkLCBoZW5jZSB5b3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBlbHNlIHRvIGRvCi0gICAgICB0aGFuIGNyZWF0aW5nIHRoZSBtcHU0MDEgc3R1ZmYuIE90aGVyd2lzZSwgeW91IGhhdmUgdG8gY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoKTwvZnVuY3Rpb24+IGV4cGxpY2l0bHkgd2hlbgotICAgICAgYSBVQVJUIGludGVycnVwdCBpcyBpbnZva2VkIGFuZCBjaGVja2VkIGluIHlvdXIgb3duIGludGVycnVwdAotICAgICAgaGFuZGxlci4gIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBwYXNzIHRoZSBwcml2YXRlX2RhdGEgb2YgdGhlCi0gICAgICAgIHJldHVybmVkIHJhd21pZGkgb2JqZWN0IGZyb20KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9uZXcoKTwvZnVuY3Rpb24+IGFzIHRoZSBzZWNvbmQKLSAgICAgICAgYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoKTwvZnVuY3Rpb24+LiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KGlycSwgcm1pZGktPnByaXZhdGVfZGF0YSwgcmVncyk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBSYXdNSURJIEludGVyZmFjZSAgLS0+Ci08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLSAgPGNoYXB0ZXIgaWQ9InJhd21pZGktaW50ZXJmYWNlIj4KLSAgICA8dGl0bGU+UmF3TUlESSBJbnRlcmZhY2U8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW92ZXJ2aWV3Ij4KLSAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIHJhdyBNSURJIGludGVyZmFjZSBpcyB1c2VkIGZvciBoYXJkd2FyZSBNSURJIHBvcnRzIHRoYXQgY2FuCi0gICAgICBiZSBhY2Nlc3NlZCBhcyBhIGJ5dGUgc3RyZWFtLiAgSXQgaXMgbm90IHVzZWQgZm9yIHN5bnRoZXNpemVyCi0gICAgICBjaGlwcyB0aGF0IGRvIG5vdCBkaXJlY3RseSB1bmRlcnN0YW5kIE1JREkuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgQUxTQSBoYW5kbGVzIGZpbGUgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LiAgQWxsIHlvdSBoYXZlIHRvIGRvIGlzCi0gICAgICB0byB3cml0ZSBzb21lIGNvZGUgdG8gbW92ZSBkYXRhIGJldHdlZW4gdGhlIGJ1ZmZlciBhbmQgdGhlCi0gICAgICBoYXJkd2FyZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgcmF3bWlkaSBBUEkgaXMgZGVmaW5lZCBpbgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9yYXdtaWRpLmgmZ3Q7PC9maWxlbmFtZT4uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVG8gY3JlYXRlIGEgcmF3bWlkaSBkZXZpY2UsIGNhbGwgdGhlCi0gICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfbmV3PC9mdW5jdGlvbj4gZnVuY3Rpb246Ci0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0gIGVyciA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiTXlNSURJIiwgMCwgb3V0cywgaW5zLCAmcm1pZGkpOwotICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICByZXR1cm4gZXJyOwotICBybWlkaS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgc3RyY3B5KHJtaWRpLT5uYW1lLCAiTXkgTUlESSIpOwotICBybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAotICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCi0gICAgICB0aGUgSUQgc3RyaW5nLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuICBZb3UgY2FuCi0gICAgICBjcmVhdGUgdXAgdG8gOCByYXdtaWRpIGRldmljZXMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIGZvdXJ0aCBhbmQgZmlmdGggYXJndW1lbnRzIGFyZSB0aGUgbnVtYmVyIG9mIG91dHB1dCBhbmQKLSAgICAgIGlucHV0IHN1YnN0cmVhbXMsIHJlc3BlY3RpdmVseSwgb2YgdGhpcyBkZXZpY2UgKGEgc3Vic3RyZWFtIGlzCi0gICAgICB0aGUgZXF1aXZhbGVudCBvZiBhIE1JREkgcG9ydCkuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgU2V0IHRoZSA8c3RydWN0ZmllbGQ+aW5mb19mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHNwZWNpZnkKLSAgICAgIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZS4KLSAgICAgIFNldCA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX09VVFBVVDwvY29uc3RhbnQ+IGlmIHRoZXJlIGlzCi0gICAgICBhdCBsZWFzdCBvbmUgb3V0cHV0IHBvcnQsCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX0lOUFVUPC9jb25zdGFudD4gaWYgdGhlcmUgaXMgYXQKLSAgICAgIGxlYXN0IG9uZSBpbnB1dCBwb3J0LAotICAgICAgYW5kIDxjb25zdGFudD5TTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYPC9jb25zdGFudD4gaWYgdGhlIGRldmljZQotICAgICAgY2FuIGhhbmRsZSBvdXRwdXQgYW5kIGlucHV0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgQWZ0ZXIgdGhlIHJhd21pZGkgZGV2aWNlIGlzIGNyZWF0ZWQsIHlvdSBuZWVkIHRvIHNldCB0aGUKLSAgICAgIG9wZXJhdG9ycyAoY2FsbGJhY2tzKSBmb3IgZWFjaCBzdWJzdHJlYW0uICBUaGVyZSBhcmUgaGVscGVyCi0gICAgICBmdW5jdGlvbnMgdG8gc2V0IHRoZSBvcGVyYXRvcnMgZm9yIGFsbCB0aGUgc3Vic3RyZWFtcyBvZiBhIGRldmljZToKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmc25kX215bWlkaV9vdXRwdXRfb3BzKTsKLSAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsICZzbmRfbXltaWRpX2lucHV0X29wcyk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgb3BlcmF0b3JzIGFyZSB1c3VhbGx5IGRlZmluZWQgbGlrZSB0aGlzOgotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfbXltaWRpX291dHB1dF9vcHMgPSB7Ci0gICAgICAgICAgLm9wZW4gPSAgICBzbmRfbXltaWRpX291dHB1dF9vcGVuLAotICAgICAgICAgIC5jbG9zZSA9ICAgc25kX215bWlkaV9vdXRwdXRfY2xvc2UsCi0gICAgICAgICAgLnRyaWdnZXIgPSBzbmRfbXltaWRpX291dHB1dF90cmlnZ2VyLAotICB9OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICBUaGVzZSBjYWxsYmFja3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgPGxpbmsKLSAgICAgIGxpbmtlbmQ9InJhd21pZGktaW50ZXJmYWNlLWNhbGxiYWNrcyI+PGNpdGV0aXRsZT5DYWxsYmFja3M8L2NpdGV0aXRsZT48L2xpbms+Ci0gICAgICBzZWN0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHN1YnN0cmVhbSwgeW91IHNob3VsZCBnaXZlIGEKLSAgICAgIHVuaXF1ZSBuYW1lIHRvIGVhY2ggb2YgdGhlbToKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zLAotICAgICAgICAgICAgICAgICAgICAgIGxpc3QgewotICAgICAgICAgIHNwcmludGYoc3Vic3RyZWFtLT5uYW1lLCAiTXkgTUlESSBQb3J0ICVkIiwgc3Vic3RyZWFtLT5udW1iZXIgKyAxKTsKLSAgfQotICAvKiBzYW1lIGZvciBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCAqLwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLWNhbGxiYWNrcyI+Ci0gICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBJbiBhbGwgdGhlIGNhbGxiYWNrcywgdGhlIHByaXZhdGUgZGF0YSB0aGF0IHlvdSd2ZSBzZXQgZm9yIHRoZQotICAgICAgcmF3bWlkaSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIGFzCi0gICAgICBzdWJzdHJlYW0tJmd0O3JtaWRpLSZndDtwcml2YXRlX2RhdGEuCi0gICAgICA8IS0tIDxjb2RlPiBpc24ndCBhdmFpbGFibGUgYmVmb3JlIERvY0Jvb2sgNC4zIC0tPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9ydCwgeW91ciBjYWxsYmFja3MgY2FuIGRldGVybWluZSB0aGUKLSAgICAgIHBvcnQgaW5kZXggZnJvbSB0aGUgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSBkYXRhIHBhc3NlZCB0byBlYWNoCi0gICAgICBjYWxsYmFjazoKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotICBpbnQgaW5kZXggPSBzdWJzdHJlYW0tPm51bWJlcjsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3Atb3BlbiI+Ci0gICAgICA8dGl0bGU+PGZ1bmN0aW9uPm9wZW48L2Z1bmN0aW9uPiBjYWxsYmFjazwvdGl0bGU+Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgc3Vic3RyZWFtIGlzIG9wZW5lZC4KLSAgICAgICAgWW91IGNhbiBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSBoZXJlLCBidXQgeW91IHNob3VsZG4ndAotICAgICAgICBzdGFydCB0cmFuc21pdHRpbmcvcmVjZWl2aW5nIGRhdGEgeWV0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC1jbG9zZSI+Ci0gICAgICA8dGl0bGU+PGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIEd1ZXNzIHdoYXQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5jbG9zZTwvZnVuY3Rpb24+Ci0gICAgICAgIGNhbGxiYWNrcyBvZiBhIHJhd21pZGkgZGV2aWNlIGFyZSBzZXJpYWxpemVkIHdpdGggYSBtdXRleCwKLSAgICAgICAgYW5kIGNhbiBzbGVlcC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtdHJpZ2dlci1vdXQiPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgZm9yIG91dHB1dAotICAgICAgc3Vic3RyZWFtczwvdGl0bGU+Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHZvaWQgc25kX3h4eF9vdXRwdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCB1cCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2l0aCBhIG5vbnplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPgotICAgICAgICBwYXJhbWV0ZXIgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgaW4gdGhlIHN1YnN0cmVhbSBidWZmZXIgdGhhdAotICAgICAgICBtdXN0IGJlIHRyYW5zbWl0dGVkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRvIHJlYWQgZGF0YSBmcm9tIHRoZSBidWZmZXIsIGNhbGwKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWs8L2Z1bmN0aW9uPi4gIEl0IHdpbGwKLSAgICAgICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZDsgdGhpcyB3aWxsIGJlCi0gICAgICAgIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlCi0gICAgICAgIGRhdGEgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICAgQWZ0ZXIgdGhlIGRhdGEgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWxseSwgY2FsbAotICAgICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrPC9mdW5jdGlvbj4gdG8gcmVtb3ZlIHRoZQotICAgICAgICBkYXRhIGZyb20gdGhlIHN1YnN0cmVhbSBidWZmZXI6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICB1bnNpZ25lZCBjaGFyIGRhdGE7Ci0gIHdoaWxlIChzbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrKHN1YnN0cmVhbSwgJmRhdGEsIDEpID09IDEpIHsKLSAgICAgICAgICBpZiAoc25kX215Y2hpcF90cnlfdG9fdHJhbnNtaXQoZGF0YSkpCi0gICAgICAgICAgICAgICAgICBzbmRfcmF3bWlkaV90cmFuc21pdF9hY2soc3Vic3RyZWFtLCAxKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBicmVhazsgLyogaGFyZHdhcmUgRklGTyBmdWxsICovCi0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIHRoYXQgdGhlIGhhcmR3YXJlIHdpbGwgYWNjZXB0IGRhdGEsIHlvdQotICAgICAgICBjYW4gdXNlIHRoZSA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbgotICAgICAgICB3aGljaCByZWFkcyBzb21lIGRhdGEgYW5kIHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBidWZmZXIgYXQgb25jZToKLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHdoaWxlIChzbmRfbXljaGlwX3RyYW5zbWl0X3Bvc3NpYmxlKCkpIHsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7Ci0gICAgICAgICAgaWYgKHNuZF9yYXdtaWRpX3RyYW5zbWl0KHN1YnN0cmVhbSwgJmRhdGEsIDEpICE9IDEpCi0gICAgICAgICAgICAgICAgICBicmVhazsgLyogbm8gbW9yZSBkYXRhICovCi0gICAgICAgICAgc25kX215Y2hpcF90cmFuc21pdChkYXRhKTsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBrbm93IGJlZm9yZWhhbmQgaG93IG1hbnkgYnl0ZXMgeW91IGNhbiBhY2NlcHQsIHlvdSBjYW4KLSAgICAgICAgdXNlIGEgYnVmZmVyIHNpemUgZ3JlYXRlciB0aGFuIG9uZSB3aXRoIHRoZQotICAgICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXQqPC9mdW5jdGlvbj4gZnVuY3Rpb25zLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIG11c3Qgbm90IHNsZWVwLiAgSWYKLSAgICAgICAgdGhlIGhhcmR3YXJlIEZJRk8gaXMgZnVsbCBiZWZvcmUgdGhlIHN1YnN0cmVhbSBidWZmZXIgaGFzIGJlZW4KLSAgICAgICAgZW1wdGllZCwgeW91IGhhdmUgdG8gY29udGludWUgdHJhbnNtaXR0aW5nIGRhdGEgbGF0ZXIsIGVpdGhlcgotICAgICAgICBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3Igd2l0aCBhIHRpbWVyIGlmIHRoZSBoYXJkd2FyZQotICAgICAgICBkb2Vzbid0IGhhdmUgYSBNSURJIHRyYW5zbWl0IGludGVycnVwdC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBhCi0gICAgICAgIHplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgd2hlbiB0aGUgdHJhbnNtaXNzaW9uCi0gICAgICAgIG9mIGRhdGEgc2hvdWxkIGJlIGFib3J0ZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLXRyaWdnZXItaW4iPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgZm9yIGlucHV0Ci0gICAgICBzdWJzdHJlYW1zPC90aXRsZT4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBzbmRfeHh4X2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggYSBub256ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4KLSAgICAgICAgcGFyYW1ldGVyIHRvIGVuYWJsZSByZWNlaXZpbmcgZGF0YSwgb3Igd2l0aCBhIHplcm8KLSAgICAgICAgPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgZG8gZGlzYWJsZSByZWNlaXZpbmcgZGF0YS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcDsgdGhlCi0gICAgICAgIGFjdHVhbCByZWFkaW5nIG9mIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGlzIHVzdWFsbHkgZG9uZSBpbiBhbgotICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlci4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIGRhdGEgcmVjZXB0aW9uIGlzIGVuYWJsZWQsIHlvdXIgaW50ZXJydXB0IGhhbmRsZXIgc2hvdWxkCi0gICAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3JlY2VpdmU8L2Z1bmN0aW9uPiBmb3IgYWxsIHJlY2VpdmVkCi0gICAgICAgIGRhdGE6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICB2b2lkIHNuZF9teWNoaXBfbWlkaV9pbnRlcnJ1cHQoLi4uKQotICB7Ci0gICAgICAgICAgd2hpbGUgKG15Y2hpcF9taWRpX2F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7Ci0gICAgICAgICAgICAgICAgICBkYXRhID0gbXljaGlwX21pZGlfcmVhZCgpOwotICAgICAgICAgICAgICAgICAgc25kX3Jhd21pZGlfcmVjZWl2ZShzdWJzdHJlYW0sICZkYXRhLCAxKTsKLSAgICAgICAgICB9Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtZHJhaW4iPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj5kcmFpbjwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBzbmRfeHh4X2RyYWluKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyBvbmx5IHVzZWQgd2l0aCBvdXRwdXQgc3Vic3RyZWFtcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHdhaXQKLSAgICAgICAgdW50aWwgYWxsIGRhdGEgcmVhZCBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KLSAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgY2xvc2VkIGFuZCB0aGUgZHJpdmVyIHVubG9hZGVkCi0gICAgICAgIHdpdGhvdXQgbG9zaW5nIGRhdGEuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gSWYgeW91IGRvIG5vdCBzZXQKLSAgICAgICAgPHN0cnVjdGZpZWxkPmRyYWluPC9zdHJ1Y3RmaWVsZD4gaW4gdGhlIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMKLSAgICAgICAgc3RydWN0dXJlLCBBTFNBIHdpbGwgc2ltcGx5IHdhaXQgZm9yIDUwJm5ic3A7bWlsbGlzZWNvbmRzCi0gICAgICAgIGluc3RlYWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBNaXNjZWxsYW5lb3VzIERldmljZXMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJtaXNjLWRldmljZXMiPgotICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIERldmljZXM8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pc2MtZGV2aWNlcy1vcGwzIj4KLSAgICAgIDx0aXRsZT5GTSBPUEwzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgRk0gT1BMMyBpcyBzdGlsbCB1c2VkIGluIG1hbnkgY2hpcHMgKG1haW5seSBmb3IgYmFja3dhcmQKLSAgICAgIGNvbXBhdGliaWxpdHkpLiBBTFNBIGhhcyBhIG5pY2UgT1BMMyBGTSBjb250cm9sIGxheWVyLCB0b28uIFRoZQotICAgICAgT1BMMyBBUEkgaXMgZGVmaW5lZCBpbgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9vcGwzLmgmZ3Q7PC9maWxlbmFtZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRk0gcmVnaXN0ZXJzIGNhbiBiZSBkaXJlY3RseSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBkaXJlY3QtRk0gQVBJLAotICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZF9mbS5oJmd0OzwvZmlsZW5hbWU+LiBJbgotICAgICAgQUxTQSBuYXRpdmUgbW9kZSwgRk0gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoCi0gICAgICB0aGUgSGFyZHdhcmUtRGVwZW5kYW50IERldmljZSBkaXJlY3QtRk0gZXh0ZW5zaW9uIEFQSSwgd2hlcmVhcyBpbgotICAgICAgT1NTIGNvbXBhdGlibGUgbW9kZSwgRk0gcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIHRoZSBPU1MKLSAgICAgIGRpcmVjdC1GTSBjb21wYXRpYmxlIEFQSSBpbiA8ZmlsZW5hbWU+L2Rldi9kbWZtWDwvZmlsZW5hbWU+IGRldmljZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyBjcmVhdGUgdGhlIE9QTDMgY29tcG9uZW50LCB5b3UgaGF2ZSB0d28gZnVuY3Rpb25zIHRvCi0gICAgICAgIGNhbGwuIFRoZSBmaXJzdCBvbmUgaXMgYSBjb25zdHJ1Y3RvciBmb3IgdGhlIDx0eXBlPm9wbDNfdDwvdHlwZT4KLSAgICAgICAgaW5zdGFuY2UuIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKLSAgc25kX29wbDNfY3JlYXRlKGNhcmQsIGxwb3J0LCBycG9ydCwgT1BMM19IV19PUEwzX1hYWCwKLSAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQsICZvcGwzKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBzZWNvbmQgb25lIGlzIHRoZQotICAgICAgbGVmdCBwb3J0IGFkZHJlc3MsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIHJpZ2h0IHBvcnQgYWRkcmVzcy4gSW4KLSAgICAgIG1vc3QgY2FzZXMsIHRoZSByaWdodCBwb3J0IGlzIHBsYWNlZCBhdCB0aGUgbGVmdCBwb3J0ICsgMi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZm91cnRoIGFyZ3VtZW50IGlzIHRoZSBoYXJkd2FyZSB0eXBlLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGUgbGVmdCBhbmQgcmlnaHQgcG9ydHMgaGF2ZSBiZWVuIGFscmVhZHkgYWxsb2NhdGVkIGJ5Ci0gICAgICB0aGUgY2FyZCBkcml2ZXIsIHBhc3Mgbm9uLXplcm8gdG8gdGhlIGZpZnRoIGFyZ3VtZW50Ci0gICAgICAoPHBhcmFtZXRlcj5pbnRlZ3JhdGVkPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCB0aGUgb3BsMyBtb2R1bGUgd2lsbAotICAgICAgYWxsb2NhdGUgdGhlIHNwZWNpZmllZCBwb3J0cyBieSBpdHNlbGYuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGUgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSByZXF1aXJlcyBzcGVjaWFsIG1ldGhvZAotICAgICAgICBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBJL08gYWNjZXNzLCB5b3UgY2FuIGNyZWF0ZSBvcGwzIGluc3RhbmNlCi0gICAgICAgIHNlcGFyYXRlbHkgd2l0aCA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPi4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7Ci0gIHNuZF9vcGwzX25ldyhjYXJkLCBPUEwzX0hXX09QTDNfWFhYLCAmb3BsMyk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0JVGhlbiBzZXQgPHN0cnVjdGZpZWxkPmNvbW1hbmQ8L3N0cnVjdGZpZWxkPiwKLQk8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gYW5kCi0JPHN0cnVjdGZpZWxkPnByaXZhdGVfZnJlZTwvc3RydWN0ZmllbGQ+IGZvciB0aGUgcHJpdmF0ZQotCWFjY2VzcyBmdW5jdGlvbiwgdGhlIHByaXZhdGUgZGF0YSBhbmQgdGhlIGRlc3RydWN0b3IuCi0JVGhlIGxfcG9ydCBhbmQgcl9wb3J0IGFyZSBub3QgbmVjZXNzYXJpbHkgc2V0LiAgT25seSB0aGUKLQljb21tYW5kIG11c3QgYmUgc2V0IHByb3Blcmx5LiAgWW91IGNhbiByZXRyaWV2ZSB0aGUgZGF0YQotCWZyb20gdGhlIG9wbDMtJmd0O3ByaXZhdGVfZGF0YSBmaWVsZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0JQWZ0ZXIgY3JlYXRpbmcgdGhlIG9wbDMgaW5zdGFuY2UgdmlhIDxmdW5jdGlvbj5zbmRfb3BsM19uZXcoKTwvZnVuY3Rpb24+LAotCWNhbGwgPGZ1bmN0aW9uPnNuZF9vcGwzX2luaXQoKTwvZnVuY3Rpb24+IHRvIGluaXRpYWxpemUgdGhlIGNoaXAgdG8gdGhlCi0JcHJvcGVyIHN0YXRlLiBOb3RlIHRoYXQgPGZ1bmN0aW9uPnNuZF9vcGwzX2NyZWF0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzCi0JY2FsbHMgaXQgaW50ZXJuYWxseS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHRoZSBvcGwzIGluc3RhbmNlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LCB0aGVuIGNyZWF0ZSBhCi0gICAgICAgIGh3ZGVwIGRldmljZSBmb3IgdGhpcyBvcGwzLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2h3ZGVwICpvcGwzaHdkZXA7Ci0gIHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmb3BsM2h3ZGVwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSA8dHlwZT5vcGwzX3Q8L3R5cGU+IGluc3RhbmNlIHlvdQotICAgICAgY3JlYXRlZCwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGluZGV4IG51bWJlciwgdXN1YWxseSAwLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXgtb2Zmc2V0IGZvciB0aGUgc2VxdWVuY2VyCi0gICAgICBjbGllbnQgYXNzaWduZWQgdG8gdGhlIE9QTDMgcG9ydC4gV2hlbiB0aGVyZSBpcyBhbiBNUFU0MDEtVUFSVCwKLSAgICAgIGdpdmUgMSBmb3IgaGVyZSAoVUFSVCBhbHdheXMgdGFrZXMgMCkuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtaGFyZHdhcmUtZGVwZW5kZW50Ij4KLSAgICAgIDx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU29tZSBjaGlwcyBuZWVkIHVzZXItc3BhY2UgYWNjZXNzIGZvciBzcGVjaWFsCi0gICAgICBjb250cm9scyBvciBmb3IgbG9hZGluZyB0aGUgbWljcm8gY29kZS4gSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4KLSAgICAgIGNyZWF0ZSBhIGh3ZGVwIChoYXJkd2FyZS1kZXBlbmRlbnQpIGRldmljZS4gVGhlIGh3ZGVwIEFQSSBpcwotICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2h3ZGVwLmgmZ3Q7PC9maWxlbmFtZT4uIFlvdSBjYW4KLSAgICAgIGZpbmQgZXhhbXBsZXMgaW4gb3BsMyBkcml2ZXIgb3IKLSAgICAgIDxmaWxlbmFtZT5pc2Evc2Ivc2IxNl9jc3AuYzwvZmlsZW5hbWU+LiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBjcmVhdGlvbiBvZiB0aGUgPHR5cGU+aHdkZXA8L3R5cGU+IGluc3RhbmNlIGlzIGRvbmUgdmlhCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfaHdkZXBfbmV3KCk8L2Z1bmN0aW9uPi4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9od2RlcCAqaHc7Ci0gIHNuZF9od2RlcF9uZXcoY2FyZCwgIk15IEhXREVQIiwgMCwgJmh3KTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIHdoZXJlIHRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXggbnVtYmVyLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiB0aGVuIHBhc3MgYW55IHBvaW50ZXIgdmFsdWUgdG8gdGhlCi0gICAgICAgIDxwYXJhbWV0ZXI+cHJpdmF0ZV9kYXRhPC9wYXJhbWV0ZXI+LgotICAgICAgICBJZiB5b3UgYXNzaWduIGEgcHJpdmF0ZSBkYXRhLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUKLSAgICAgICAgZGVzdHJ1Y3RvciwgdG9vLiBUaGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4KLSAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2ZyZWU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBteWRhdGEgKnAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwotICBody0+cHJpdmF0ZV9kYXRhID0gcDsKLSAgaHctPnByaXZhdGVfZnJlZSA9IG15ZGF0YV9mcmVlOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGVzdHJ1Y3RvciB3b3VsZCBiZToKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBteWRhdGFfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpodykKLSAgewotICAgICAgICAgIHN0cnVjdCBteWRhdGEgKnAgPSBody0+cHJpdmF0ZV9kYXRhOwotICAgICAgICAgIGtmcmVlKHApOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBhcmJpdHJhcnkgZmlsZSBvcGVyYXRpb25zIGNhbiBiZSBkZWZpbmVkIGZvciB0aGlzCi0gICAgICAgIGluc3RhbmNlLiBUaGUgZmlsZSBvcGVyYXRvcnMgYXJlIGRlZmluZWQgaW4KLSAgICAgICAgdGhlIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+IHRhYmxlLiBGb3IgZXhhbXBsZSwgYXNzdW1lIHRoYXQKLSAgICAgICAgdGhpcyBjaGlwIG5lZWRzIGFuIGlvY3RsLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBody0+b3BzLm9wZW4gPSBteWRhdGFfb3BlbjsKLSAgaHctPm9wcy5pb2N0bCA9IG15ZGF0YV9pb2N0bDsKLSAgaHctPm9wcy5yZWxlYXNlID0gbXlkYXRhX3JlbGVhc2U7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBBbmQgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXMgeW91IGxpa2UuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pc2MtZGV2aWNlcy1JRUM5NTgiPgotICAgICAgPHRpdGxlPklFQzk1OCAoUy9QRElGKTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVXN1YWxseSB0aGUgY29udHJvbHMgZm9yIElFQzk1OCBkZXZpY2VzIGFyZSBpbXBsZW1lbnRlZCB2aWEKLSAgICAgIHRoZSBjb250cm9sIGludGVyZmFjZS4gVGhlcmUgaXMgYSBtYWNybyB0byBjb21wb3NlIGEgbmFtZSBzdHJpbmcgZm9yCi0gICAgICBJRUM5NTggY29udHJvbHMsIDxmdW5jdGlvbj5TTkRSVl9DVExfTkFNRV9JRUM5NTgoKTwvZnVuY3Rpb24+Ci0gICAgICBkZWZpbmVkIGluIDxmaWxlbmFtZT4mbHQ7aW5jbHVkZS9hc291bmQuaCZndDs8L2ZpbGVuYW1lPi4gIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmQgY29udHJvbHMgZm9yIElFQzk1OCBzdGF0dXMgYml0cy4gVGhlc2UKLSAgICAgIGNvbnRyb2xzIHVzZSB0aGUgdHlwZSA8dHlwZT5TTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODwvdHlwZT4sCi0gICAgICBhbmQgdGhlIHNpemUgb2YgZWxlbWVudCBpcyBmaXhlZCBhcyA0IGJ5dGVzIGFycmF5Ci0gICAgICAodmFsdWUuaWVjOTU4LnN0YXR1c1t4XSkuIEZvciB0aGUgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPgotICAgICAgY2FsbGJhY2ssIHlvdSBkb24ndCBzcGVjaWZ5IAotICAgICAgdGhlIHZhbHVlIGZpZWxkIGZvciB0aGlzIHR5cGUgKHRoZSBjb3VudCBmaWVsZCBtdXN0IGJlIHNldCwKLSAgICAgIHRob3VnaCkuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBDb24gTWFzazwvcXVvdGU+IGlzIHVzZWQgdG8gcmV0dXJuIHRoZQotICAgICAgYml0LW1hc2sgZm9yIHRoZSBJRUM5NTggc3RhdHVzIGJpdHMgb2YgY29uc3VtZXIgbW9kZS4gU2ltaWxhcmx5LAotICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBQcm8gTWFzazwvcXVvdGU+IHJldHVybnMgdGhlIGJpdG1hc2sgZm9yCi0gICAgICBwcm9mZXNzaW9uYWwgbW9kZS4gVGhleSBhcmUgcmVhZC1vbmx5IGNvbnRyb2xzLCBhbmQgYXJlIGRlZmluZWQKLSAgICAgIGFzIE1JWEVSIGNvbnRyb2xzIChpZmFjZSA9Ci0gICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI8L2NvbnN0YW50PikuICAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE1lYW53aGlsZSwgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBEZWZhdWx0PC9xdW90ZT4gY29udHJvbCBpcwotICAgICAgZGVmaW5lZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgY3VycmVudCBkZWZhdWx0IElFQzk1OAotICAgICAgYml0cy4gTm90ZSB0aGF0IHRoaXMgb25lIGlzIHVzdWFsbHkgZGVmaW5lZCBhcyBhIFBDTSBjb250cm9sCi0gICAgICAoaWZhY2UgPSA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNPC9jb25zdGFudD4pLAotICAgICAgYWx0aG91Z2ggaW4gc29tZSBwbGFjZXMgaXQncyBkZWZpbmVkIGFzIGEgTUlYRVIgY29udHJvbC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBhZGRpdGlvbiwgeW91IGNhbiBkZWZpbmUgdGhlIGNvbnRyb2wgc3dpdGNoZXMgdG8KLSAgICAgIGVuYWJsZS9kaXNhYmxlIG9yIHRvIHNldCB0aGUgcmF3IGJpdCBtb2RlLiBUaGUgaW1wbGVtZW50YXRpb24KLSAgICAgIHdpbGwgZGVwZW5kIG9uIHRoZSBjaGlwLCBidXQgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIG5hbWVkIGFzCi0gICAgICA8cXVvdGU+SUVDOTU4IHh4eDwvcXVvdGU+LCBwcmVmZXJhYmx5IHVzaW5nCi0gICAgICB0aGUgPGZ1bmN0aW9uPlNORFJWX0NUTF9OQU1FX0lFQzk1OCgpPC9mdW5jdGlvbj4gbWFjcm8uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiBmaW5kIHNldmVyYWwgY2FzZXMsIGZvciBleGFtcGxlLAotICAgICAgPGZpbGVuYW1lPnBjaS9lbXUxMGsxPC9maWxlbmFtZT4sCi0gICAgICA8ZmlsZW5hbWU+cGNpL2ljZTE3MTI8L2ZpbGVuYW1lPiwgb3IKLSAgICAgIDxmaWxlbmFtZT5wY2kvY21pcGNpLmM8L2ZpbGVuYW1lPi4gIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEJ1ZmZlciBhbmQgTWVtb3J5IE1hbmFnZW1lbnQgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJidWZmZXItYW5kLW1lbW9yeSI+Ci0gICAgPHRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5IE1hbmFnZW1lbnQ8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWJ1ZmZlci10eXBlcyI+Ci0gICAgICA8dGl0bGU+QnVmZmVyIFR5cGVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBTFNBIHByb3ZpZGVzIHNldmVyYWwgZGlmZmVyZW50IGJ1ZmZlciBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICAgICAgZGVwZW5kaW5nIG9uIHRoZSBidXMgYW5kIHRoZSBhcmNoaXRlY3R1cmUuIEFsbCB0aGVzZSBoYXZlIGEKLSAgICAgIGNvbnNpc3RlbnQgQVBJLiBUaGUgYWxsb2NhdGlvbiBvZiBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMgaXMKLSAgICAgIGRvbmUgdmlhIAotICAgICAgPGZ1bmN0aW9uPnNuZF9tYWxsb2NfeHh4X3BhZ2VzKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgd2hlcmUgeHh4Ci0gICAgICBpcyB0aGUgYnVzIHR5cGUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgcGFnZXMgd2l0aCBmYWxsYmFjayBpcwotICAgICAgPGZ1bmN0aW9uPnNuZF9tYWxsb2NfeHh4X3BhZ2VzX2ZhbGxiYWNrKCk8L2Z1bmN0aW9uPi4gVGhpcwotICAgICAgZnVuY3Rpb24gdHJpZXMgdG8gYWxsb2NhdGUgdGhlIHNwZWNpZmllZCBwYWdlcyBidXQgaWYgdGhlIHBhZ2VzCi0gICAgICBhcmUgbm90IGF2YWlsYWJsZSwgaXQgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYWdlIHNpemVzIHVudGlsCi0gICAgICBlbm91Z2ggc3BhY2UgaXMgZm91bmQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIHJlbGVhc2UgdGhlIHBhZ2VzLCBjYWxsCi0gICAgICA8ZnVuY3Rpb24+c25kX2ZyZWVfeHh4X3BhZ2VzKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVXN1YWxseSwgQUxTQSBkcml2ZXJzIHRyeSB0byBhbGxvY2F0ZSBhbmQgcmVzZXJ2ZQotICAgICAgIGEgbGFyZ2UgY29udGlndW91cyBwaHlzaWNhbCBzcGFjZQotICAgICAgIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXMgbG9hZGVkIGZvciB0aGUgbGF0ZXIgdXNlLgotICAgICAgIFRoaXMgaXMgY2FsbGVkIDxxdW90ZT5wcmUtYWxsb2NhdGlvbjwvcXVvdGU+LgotICAgICAgIEFzIGFscmVhZHkgd3JpdHRlbiwgeW91IGNhbiBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYXQgCi0gICAgICAgcGNtIGluc3RhbmNlIGNvbnN0cnVjdGlvbiB0aW1lIChpbiB0aGUgY2FzZSBvZiBQQ0kgYnVzKS4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKHBjaSksIHNpemUsIG1heCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgdGhlIGJ5dGUgc2l6ZSB0byBiZQotICAgICAgcHJlLWFsbG9jYXRlZCBhbmQgdGhlIDxwYXJhbWV0ZXI+bWF4PC9wYXJhbWV0ZXI+IGlzIHRoZSBtYXhpbXVtCi0gICAgICBzaXplIHRvIGJlIGNoYW5nZWQgdmlhIHRoZSA8ZmlsZW5hbWU+cHJlYWxsb2M8L2ZpbGVuYW1lPiBwcm9jIGZpbGUuCi0gICAgICBUaGUgYWxsb2NhdG9yIHdpbGwgdHJ5IHRvIGdldCBhbiBhcmVhIGFzIGxhcmdlIGFzIHBvc3NpYmxlCi0gICAgICB3aXRoaW4gdGhlIGdpdmVuIHNpemUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoZSBzZWNvbmQgYXJndW1lbnQgKHR5cGUpIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgKGRldmljZSBwb2ludGVyKQotICAgICAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYnVzLgotICAgICAgSW4gdGhlIGNhc2Ugb2YgdGhlIElTQSBidXMsIHBhc3MgPGZ1bmN0aW9uPnNuZF9kbWFfaXNhX2RhdGEoKTwvZnVuY3Rpb24+Ci0gICAgICBhcyB0aGUgdGhpcmQgYXJndW1lbnQgd2l0aCA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWPC9jb25zdGFudD4gdHlwZS4KLSAgICAgIEZvciB0aGUgY29udGludW91cyBidWZmZXIgdW5yZWxhdGVkIHRvIHRoZSBidXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQKLSAgICAgIHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVM8L2NvbnN0YW50PiB0eXBlIGFuZCB0aGUKLSAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX2NvbnRpbnVvdXNfZGF0YShHRlBfS0VSTkVMKTwvZnVuY3Rpb24+IGRldmljZSBwb2ludGVyLAotICAgICAgd2hlcmUgPGNvbnN0YW50PkdGUF9LRVJORUw8L2NvbnN0YW50PiBpcyB0aGUga2VybmVsIGFsbG9jYXRpb24gZmxhZyB0bwotICAgICAgdXNlLgotICAgICAgRm9yIHRoZSBQQ0kgc2NhdHRlci1nYXRoZXIgYnVmZmVycywgdXNlCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWX1NHPC9jb25zdGFudD4gd2l0aAotICAgICAgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+Ci0gICAgICAoc2VlIHRoZSAKLSAgICAgICAgICA8bGluayBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeS1ub24tY29udGlndW91cyI+PGNpdGV0aXRsZT5Ob24tQ29udGlndW91cyBCdWZmZXJzCi0gICAgICAgICAgPC9jaXRldGl0bGU+PC9saW5rPiBzZWN0aW9uKS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE9uY2UgdGhlIGJ1ZmZlciBpcyBwcmUtYWxsb2NhdGVkLCB5b3UgY2FuIHVzZSB0aGUKLSAgICAgICAgYWxsb2NhdG9yIGluIHRoZSA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2s6IAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHNpemUpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHByZS1hbGxvY2F0ZSB0byB1c2UgdGhpcyBmdW5jdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktZXh0ZXJuYWwtaGFyZHdhcmUiPgotICAgICAgPHRpdGxlPkV4dGVybmFsIEhhcmR3YXJlIEJ1ZmZlcnM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFNvbWUgY2hpcHMgaGF2ZSB0aGVpciBvd24gaGFyZHdhcmUgYnVmZmVycyBhbmQgdGhlIERNQQotICAgICAgdHJhbnNmZXIgZnJvbSB0aGUgaG9zdCBtZW1vcnkgaXMgbm90IGF2YWlsYWJsZS4gSW4gc3VjaCBhIGNhc2UsCi0gICAgICB5b3UgbmVlZCB0byBlaXRoZXIgMSkgY29weS9zZXQgdGhlIGF1ZGlvIGRhdGEgZGlyZWN0bHkgdG8gdGhlCi0gICAgICBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIsIG9yIDIpIG1ha2UgYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBhbmQKLSAgICAgIGNvcHkvc2V0IHRoZSBkYXRhIGZyb20gaXQgdG8gdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpbgotICAgICAgaW50ZXJydXB0cyAob3IgaW4gdGFza2xldHMsIHByZWZlcmFibHkpLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGNhc2Ugd29ya3MgZmluZSBpZiB0aGUgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyIGlzIGxhcmdlCi0gICAgICBlbm91Z2guICBUaGlzIG1ldGhvZCBkb2Vzbid0IG5lZWQgYW55IGV4dHJhIGJ1ZmZlcnMgYW5kIHRodXMgaXMKLSAgICAgIG1vcmUgZWZmZWN0aXZlLiBZb3UgbmVlZCB0byBkZWZpbmUgdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAotICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgZm9yIAotICAgICAgdGhlIGRhdGEgdHJhbnNmZXIuIEhvd2V2ZXIsIHRoZXJlIGlzIGEgZHJhd2JhY2s6IGl0IGNhbm5vdAotICAgICAgYmUgbW1hcHBlZC4gVGhlIGV4YW1wbGVzIGFyZSBHVVMncyBHRjEgUENNIG9yIGVtdTgwMDAncwotICAgICAgd2F2ZXRhYmxlIFBDTS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgc2Vjb25kIGNhc2UgYWxsb3dzIGZvciBtbWFwIG9uIHRoZSBidWZmZXIsIGFsdGhvdWdoIHlvdSBoYXZlCi0gICAgICB0byBoYW5kbGUgYW4gaW50ZXJydXB0IG9yIGEgdGFza2xldCB0byB0cmFuc2ZlciB0aGUgZGF0YQotICAgICAgZnJvbSB0aGUgaW50ZXJtZWRpYXRlIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgYnVmZmVyLiBZb3UgY2FuIGZpbmQgYW4KLSAgICAgIGV4YW1wbGUgaW4gdGhlIHZ4cG9ja2V0IGRyaXZlci4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBbm90aGVyIGNhc2UgaXMgd2hlbiB0aGUgY2hpcCB1c2VzIGEgUENJIG1lbW9yeS1tYXAKLSAgICAgIHJlZ2lvbiBmb3IgdGhlIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBob3N0IG1lbW9yeS4gSW4gdGhpcyBjYXNlLAotICAgICAgbW1hcCBpcyBhdmFpbGFibGUgb25seSBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgbGlrZSB0aGUgSW50ZWwgb25lLgotICAgICAgSW4gbm9uLW1tYXAgbW9kZSwgdGhlIGRhdGEgY2Fubm90IGJlIHRyYW5zZmVycmVkIGFzIGluIHRoZSBub3JtYWwKLSAgICAgIHdheS4gVGh1cyB5b3UgbmVlZCB0byBkZWZpbmUgdGhlIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcyBhcyB3ZWxsLCAKLSAgICAgIGFzIGluIHRoZSBjYXNlcyBhYm92ZS4gVGhlIGV4YW1wbGVzIGFyZSBmb3VuZCBpbgotICAgICAgPGZpbGVuYW1lPnJtZTMyLmM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnJtZTk2LmM8L2ZpbGVuYW1lPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGRlcGVuZHMgdXBvbiAKLSAgICAgICAgd2hldGhlciB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgaW50ZXJsZWF2ZWQgb3Igbm9uLWludGVybGVhdmVkCi0gICAgICAgIHNhbXBsZXMuIFRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzCi0gICAgICAgIGRlZmluZWQgbGlrZSBiZWxvdywgYSBiaXQgCi0gICAgICAgIGRpZmZlcmVudGx5IGRlcGVuZGluZyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgcGxheWJhY2sgb3IKLSAgICAgICAgY2FwdHVyZTogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBwbGF5YmFja19jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKLSAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgdm9pZCAqc3JjLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7Ci0gIHN0YXRpYyBpbnQgY2FwdHVyZV9jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKLSAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgdm9pZCAqZHN0LCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBjYXNlIG9mIGludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQKLSAgICAgICg8cGFyYW1ldGVyPmNoYW5uZWw8L3BhcmFtZXRlcj4pIGlzIG5vdCB1c2VkLiBUaGUgdGhpcmQgYXJndW1lbnQKLSAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgcG9pbnRzIHRoZSAKLSAgICAgIGN1cnJlbnQgcG9zaXRpb24gb2Zmc2V0IGluIGZyYW1lcy4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbWVhbmluZyBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IGlzIGRpZmZlcmVudCBiZXR3ZWVuCi0gICAgICBwbGF5YmFjayBhbmQgY2FwdHVyZS4gRm9yIHBsYXliYWNrLCBpdCBob2xkcyB0aGUgc291cmNlIGRhdGEKLSAgICAgIHBvaW50ZXIsIGFuZCBmb3IgY2FwdHVyZSwgaXQncyB0aGUgZGVzdGluYXRpb24gZGF0YSBwb2ludGVyLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIGJlIGNvcGllZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoYXQgeW91IGhhdmUgdG8gZG8gaW4gdGhpcyBjYWxsYmFjayBpcyBhZ2FpbiBkaWZmZXJlbnQKLSAgICAgICAgYmV0d2VlbiBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLiBJbiB0aGUKLSAgICAgICAgcGxheWJhY2sgY2FzZSwgeW91IGNvcHkgdGhlIGdpdmVuIGFtb3VudCBvZiBkYXRhCi0gICAgICAgICg8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+KSBhdCB0aGUgc3BlY2lmaWVkIHBvaW50ZXIKLSAgICAgICAgKDxwYXJhbWV0ZXI+c3JjPC9wYXJhbWV0ZXI+KSB0byB0aGUgc3BlY2lmaWVkIG9mZnNldAotICAgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIG9uIHRoZSBoYXJkd2FyZSBidWZmZXIuIFdoZW4KLSAgICAgICAgY29kZWQgbGlrZSBtZW1jcHktbGlrZSB3YXksIHRoZSBjb3B5IHdvdWxkIGJlIGxpa2U6IAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgc3JjLAotICAgICAgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEZvciB0aGUgY2FwdHVyZSBkaXJlY3Rpb24sIHlvdSBjb3B5IHRoZSBnaXZlbiBhbW91bnQgb2YKLSAgICAgICAgZGF0YSAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQKLSAgICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUgYnVmZmVyIHRvIHRoZQotICAgICAgICBzcGVjaWZpZWQgcG9pbnRlciAoPHBhcmFtZXRlcj5kc3Q8L3BhcmFtZXRlcj4pLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBteV9tZW1jcHkoZHN0LCBteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwKLSAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgTm90ZSB0aGF0IGJvdGggdGhlIHBvc2l0aW9uIGFuZCB0aGUgYW1vdW50IG9mIGRhdGEgYXJlIGdpdmVuCi0gICAgICBpbiBmcmFtZXMuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhlIGNhc2Ugb2Ygbm9uLWludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBpbXBsZW1lbnRhdGlvbgotICAgICAgd2lsbCBiZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFlvdSBuZWVkIHRvIGNoZWNrIHRoZSBjaGFubmVsIGFyZ3VtZW50LCBhbmQgaWYgaXQncyAtMSwgY29weQotICAgICAgdGhlIHdob2xlIGNoYW5uZWxzLiBPdGhlcndpc2UsIHlvdSBoYXZlIHRvIGNvcHkgb25seSB0aGUKLSAgICAgIHNwZWNpZmllZCBjaGFubmVsLiBQbGVhc2UgY2hlY2sKLSAgICAgIDxmaWxlbmFtZT5pc2EvZ3VzL2d1c19wY20uYzwvZmlsZW5hbWU+IGFzIGFuIGV4YW1wbGUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgYWxzbwotICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIHNpbWlsYXIgd2F5LiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNpbGVuY2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBtZWFuaW5ncyBvZiBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGluIHRoZQotICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiAKLSAgICAgIGNhbGxiYWNrLCBhbHRob3VnaCB0aGVyZSBpcyBubyA8cGFyYW1ldGVyPnNyYy9kc3Q8L3BhcmFtZXRlcj4KLSAgICAgIGFyZ3VtZW50LiBJbiB0aGUgY2FzZSBvZiBpbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgY2hhbm5lbAotICAgICAgYXJndW1lbnQgaGFzIG5vIG1lYW5pbmcsIGFzIHdlbGwgYXMgb24KLSAgICAgIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suICAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSByb2xlIG9mIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdG8KLSAgICAgICAgc2V0IHRoZSBnaXZlbiBhbW91bnQgCi0gICAgICAgICg8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+KSBvZiBzaWxlbmNlIGRhdGEgYXQgdGhlCi0gICAgICAgIHNwZWNpZmllZCBvZmZzZXQgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUKLSAgICAgICAgYnVmZmVyLiBTdXBwb3NlIHRoYXQgdGhlIGRhdGEgZm9ybWF0IGlzIHNpZ25lZCAodGhhdCBpcywgdGhlCi0gICAgICAgIHNpbGVudC1kYXRhIGlzIDApLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIHVzaW5nIGEgbWVtc2V0LWxpa2UKLSAgICAgICAgZnVuY3Rpb24gd291bGQgYmUgbGlrZTogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgbXlfbWVtY3B5KG15X2J1ZmZlciArIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBwb3MpLCAwLAotICAgICAgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCBzYW1wbGVzLCBhZ2FpbiwgdGhlCi0gICAgICBpbXBsZW1lbnRhdGlvbiBiZWNvbWVzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuIFNlZSwgZm9yIGV4YW1wbGUsCi0gICAgICA8ZmlsZW5hbWU+aXNhL2d1cy9ndXNfcGNtLmM8L2ZpbGVuYW1lPi4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LW5vbi1jb250aWd1b3VzIj4KLSAgICAgIDx0aXRsZT5Ob24tQ29udGlndW91cyBCdWZmZXJzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3VyIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBwYWdlIHRhYmxlIGFzIGluIGVtdTEwazEgb3IgdGhlCi0gICAgICBidWZmZXIgZGVzY3JpcHRvcnMgYXMgaW4gdmlhODJ4eCwgeW91IGNhbiB1c2UgdGhlIHNjYXR0ZXItZ2F0aGVyCi0gICAgICAoU0cpIERNQS4gQUxTQSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIFNHLWJ1ZmZlcnMuCi0gICAgICBUaGUgQVBJIGlzIHByb3ZpZGVkIGluIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIGNyZWF0aW5nIHRoZSBTRy1idWZmZXIgaGFuZGxlciwgY2FsbAotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMoKTwvZnVuY3Rpb24+IG9yCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKCk8L2Z1bmN0aW9uPgotICAgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9ERVZfU0c8L2NvbnN0YW50PgotCWluIHRoZSBQQ00gY29uc3RydWN0b3IgbGlrZSBvdGhlciBQQ0kgcHJlLWFsbG9jYXRvci4KLSAgICAgICAgWW91IG5lZWQgdG8gcGFzcyA8ZnVuY3Rpb24+c25kX2RtYV9wY2lfZGF0YShwY2kpPC9mdW5jdGlvbj4sCi0gICAgICAgIHdoZXJlIHBjaSBpcyB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnBjaV9kZXY8L3N0cnVjdG5hbWU+IHBvaW50ZXIKLSAgICAgICAgb2YgdGhlIGNoaXAgYXMgd2VsbC4KLSAgICAgICAgVGhlIDx0eXBlPnN0cnVjdCBzbmRfc2dfYnVmPC90eXBlPiBpbnN0YW5jZSBpcyBjcmVhdGVkIGFzCi0gICAgICAgIHN1YnN0cmVhbS0mZ3Q7ZG1hX3ByaXZhdGUuIFlvdSBjYW4gY2FzdAotICAgICAgICB0aGUgcG9pbnRlciBsaWtlOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX3NnX2J1ZiAqc2didWYgPSAoc3RydWN0IHNuZF9zZ19idWYgKilzdWJzdHJlYW0tPmRtYV9wcml2YXRlOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4KLSAgICAgIGluIHRoZSA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sKLSAgICAgIGFzIHdlbGwgYXMgaW4gdGhlIGNhc2Ugb2Ygbm9ybWFsIFBDSSBidWZmZXIuCi0gICAgICBUaGUgU0ctYnVmZmVyIGhhbmRsZXIgd2lsbCBhbGxvY2F0ZSB0aGUgbm9uLWNvbnRpZ3VvdXMga2VybmVsCi0gICAgICBwYWdlcyBvZiB0aGUgZ2l2ZW4gc2l6ZSBhbmQgbWFwIHRoZW0gb250byB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMKLSAgICAgIG1lbW9yeS4gIFRoZSB2aXJ0dWFsIHBvaW50ZXIgaXMgYWRkcmVzc2VkIGluIHJ1bnRpbWUtJmd0O2RtYV9hcmVhLgotICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgKHJ1bnRpbWUtJmd0O2RtYV9hZGRyKSBpcyBzZXQgdG8gemVybywKLSAgICAgIGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyBwaHlzaWNhbGx5IG5vbi1jb250aWdvdXMuCi0gICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0YWJsZSBpcyBzZXQgdXAgaW4gc2didWYtJmd0O3RhYmxlLgotICAgICAgWW91IGNhbiBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXQgYSBjZXJ0YWluIG9mZnNldCB2aWEKLSAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3NnYnVmX2dldF9hZGRyKCk8L2Z1bmN0aW9uPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIGEgU0ctaGFuZGxlciBpcyB1c2VkLCB5b3UgbmVlZCB0byBzZXQKLSAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3NnYnVmX29wc19wYWdlPC9mdW5jdGlvbj4gYXMKLSAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLgotICAgICAgKFNlZSA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wYWdlLWNhbGxiYWNrIj4KLSAgICAgIDxjaXRldGl0bGU+cGFnZSBjYWxsYmFjayBzZWN0aW9uPC9jaXRldGl0bGU+PC9saW5rPi4pCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyByZWxlYXNlIHRoZSBkYXRhLCBjYWxsCi0gICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfZnJlZV9wYWdlcygpPC9mdW5jdGlvbj4gaW4gdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+aHdfZnJlZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGFzIHVzdWFsLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS12bWFsbG9jZWQiPgotICAgICAgPHRpdGxlPlZtYWxsb2MnZWQgQnVmZmVyczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQncyBwb3NzaWJsZSB0byB1c2UgYSBidWZmZXIgYWxsb2NhdGVkIHZpYQotICAgICAgPGZ1bmN0aW9uPnZtYWxsb2M8L2Z1bmN0aW9uPiwgZm9yIGV4YW1wbGUsIGZvciBhbiBpbnRlcm1lZGlhdGUKLSAgICAgIGJ1ZmZlci4gU2luY2UgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgbm90IGNvbnRpZ3VvdXMsIHlvdSBuZWVkCi0gICAgICB0byBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5wYWdlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgdG8gb2J0YWluCi0gICAgICB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhdCBldmVyeSBvZmZzZXQuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIDxzdHJ1Y3RmaWVsZD5wYWdlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sKLSAgICAgICAgd291bGQgYmUgbGlrZSB0aGlzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0gIC8qIGdldCB0aGUgcGh5c2ljYWwgcGFnZSBwb2ludGVyIG9uIHRoZSBnaXZlbiBvZmZzZXQgKi8KLSAgc3RhdGljIHN0cnVjdCBwYWdlICpteWNoaXBfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKLSAgewotICAgICAgICAgIHZvaWQgKnBhZ2VwdHIgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotICAgICAgICAgIHJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFByb2MgSW50ZXJmYWNlICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0icHJvYy1pbnRlcmZhY2UiPgotICAgIDx0aXRsZT5Qcm9jIEludGVyZmFjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBBTFNBIHByb3ZpZGVzIGFuIGVhc3kgaW50ZXJmYWNlIGZvciBwcm9jZnMuIFRoZSBwcm9jIGZpbGVzIGFyZQotICAgICAgdmVyeSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gSSByZWNvbW1lbmQgeW91IHNldCB1cCBwcm9jIGZpbGVzIGlmCi0gICAgICB5b3Ugd3JpdGUgYSBkcml2ZXIgYW5kIHdhbnQgdG8gZ2V0IGEgcnVubmluZyBzdGF0dXMgb3IgcmVnaXN0ZXIKLSAgICAgIGR1bXBzLiBUaGUgQVBJIGlzIGZvdW5kIGluCi0gICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2luZm8uaCZndDs8L2ZpbGVuYW1lPi4gCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBUbyBjcmVhdGUgYSBwcm9jIGZpbGUsIGNhbGwKLSAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9wcm9jX25ldygpPC9mdW5jdGlvbj4uIAotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKLSAgaW50IGVyciA9IHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJteS1maWxlIiwgJmVudHJ5KTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBwcm9jIGZpbGUgdG8gYmUKLSAgICBjcmVhdGVkLiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIGNyZWF0ZSBhIGZpbGUKLSAgICA8ZmlsZW5hbWU+bXktZmlsZTwvZmlsZW5hbWU+IHVuZGVyIHRoZSBjYXJkIGRpcmVjdG9yeSwKLSAgICBlLmcuIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvbXktZmlsZTwvZmlsZW5hbWU+LiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBMaWtlIG90aGVyIGNvbXBvbmVudHMsIHRoZSBwcm9jIGVudHJ5IGNyZWF0ZWQgdmlhCi0gICAgPGZ1bmN0aW9uPnNuZF9jYXJkX3Byb2NfbmV3KCk8L2Z1bmN0aW9uPiB3aWxsIGJlIHJlZ2lzdGVyZWQgYW5kCi0gICAgcmVsZWFzZWQgYXV0b21hdGljYWxseSBpbiB0aGUgY2FyZCByZWdpc3RyYXRpb24gYW5kIHJlbGVhc2UKLSAgICBmdW5jdGlvbnMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBXaGVuIHRoZSBjcmVhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24gc3RvcmVzIGEgbmV3Ci0gICAgaW5zdGFuY2UgaW4gdGhlIHBvaW50ZXIgZ2l2ZW4gaW4gdGhlIHRoaXJkIGFyZ3VtZW50LgotICAgIEl0IGlzIGluaXRpYWxpemVkIGFzIGEgdGV4dCBwcm9jIGZpbGUgZm9yIHJlYWQgb25seS4gIFRvIHVzZQotICAgIHRoaXMgcHJvYyBmaWxlIGFzIGEgcmVhZC1vbmx5IHRleHQgZmlsZSBhcyBpdCBpcywgc2V0IHRoZSByZWFkCi0gICAgY2FsbGJhY2sgd2l0aCBhIHByaXZhdGUgZGF0YSB2aWEgCi0gICAgIDxmdW5jdGlvbj5zbmRfaW5mb19zZXRfdGV4dF9vcHMoKTwvZnVuY3Rpb24+LgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBteV9wcm9jX3JlYWQpOwotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAKLSAgICB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50ICg8cGFyYW1ldGVyPmNoaXA8L3BhcmFtZXRlcj4pIGlzIHRoZQotICAgIHByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGluIHRoZSBjYWxsYmFja3MuIFRoZSB0aGlyZCBwYXJhbWV0ZXIKLSAgICBzcGVjaWZpZXMgdGhlIHJlYWQgYnVmZmVyIHNpemUgYW5kIHRoZSBmb3VydGgKLSAgICAoPHBhcmFtZXRlcj5teV9wcm9jX3JlYWQ8L3BhcmFtZXRlcj4pIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKLSAgICBpcyBkZWZpbmVkIGxpa2UKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIG15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgSW4gdGhlIHJlYWQgY2FsbGJhY2ssIHVzZSA8ZnVuY3Rpb24+c25kX2lwcmludGYoKTwvZnVuY3Rpb24+IGZvcgotICAgIG91dHB1dCBzdHJpbmdzLCB3aGljaCB3b3JrcyBqdXN0IGxpa2Ugbm9ybWFsCi0gICAgPGZ1bmN0aW9uPnByaW50ZigpPC9mdW5jdGlvbj4uICBGb3IgZXhhbXBsZSwKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIG15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15X2NoaXAgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwotCi0gICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiVGhpcyBpcyBteSBjaGlwIVxuIik7Ci0gICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiUG9ydCA9ICVsZFxuIiwgY2hpcC0+cG9ydCk7Ci0gIH0KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgVGhlIGZpbGUgcGVybWlzc2lvbnMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXJ3YXJkcy4gIEFzIGRlZmF1bHQsIGl0J3MKLSAgICBzZXQgYXMgcmVhZCBvbmx5IGZvciBhbGwgdXNlcnMuICBJZiB5b3Ugd2FudCB0byBhZGQgd3JpdGUKLSAgICBwZXJtaXNzaW9uIGZvciB0aGUgdXNlciAocm9vdCBhcyBkZWZhdWx0KSwgZG8gYXMgZm9sbG93czoKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gZW50cnktPm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1I7Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgYW5kIHNldCB0aGUgd3JpdGUgYnVmZmVyIHNpemUgYW5kIHRoZSBjYWxsYmFjawotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgZW50cnktPmMudGV4dC53cml0ZSA9IG15X3Byb2Nfd3JpdGU7Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgRm9yIHRoZSB3cml0ZSBjYWxsYmFjaywgeW91IGNhbiB1c2UKLSAgICA8ZnVuY3Rpb24+c25kX2luZm9fZ2V0X2xpbmUoKTwvZnVuY3Rpb24+IHRvIGdldCBhIHRleHQgbGluZSwgYW5kCi0gICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9zdHIoKTwvZnVuY3Rpb24+IHRvIHJldHJpZXZlIGEgc3RyaW5nIGZyb20KLSAgICB0aGUgbGluZS4gU29tZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KLSAgICA8ZmlsZW5hbWU+Y29yZS9vc3MvbWl4ZXJfb3NzLmM8L2ZpbGVuYW1lPiwgY29yZS9vc3MvYW5kCi0gICAgPGZpbGVuYW1lPnBjbV9vc3MuYzwvZmlsZW5hbWU+LiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEZvciBhIHJhdy1kYXRhIHByb2MtZmlsZSwgc2V0IHRoZSBhdHRyaWJ1dGVzIGFzIGZvbGxvd3M6Ci0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHNuZF9pbmZvX2VudHJ5X29wcyBteV9maWxlX2lvX29wcyA9IHsKLSAgICAgICAgICAucmVhZCA9IG15X2ZpbGVfaW9fcmVhZCwKLSAgfTsKLQotICBlbnRyeS0+Y29udGVudCA9IFNORFJWX0lORk9fQ09OVEVOVF9EQVRBOwotICBlbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgZW50cnktPmMub3BzID0gJm15X2ZpbGVfaW9fb3BzOwotICBlbnRyeS0+c2l6ZSA9IDQwOTY7Ci0gIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR087Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgVGhlIGNhbGxiYWNrIGlzIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSB0ZXh0LWZpbGUKLSAgICAgIHZlcnNpb24uIFlvdSBuZWVkIHRvIHVzZSBhIGxvdy1sZXZlbCBJL08gZnVuY3Rpb25zIHN1Y2ggYXMKLSAgICAgIDxmdW5jdGlvbj5jb3B5X2Zyb20vdG9fdXNlcigpPC9mdW5jdGlvbj4gdG8gdHJhbnNmZXIgdGhlCi0gICAgICBkYXRhLgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGxvbmcgbXlfZmlsZV9pb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmaWxlX3ByaXZhdGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9zKQotICB7Ci0gICAgICAgICAgbG9uZyBzaXplID0gY291bnQ7Ci0gICAgICAgICAgaWYgKHBvcyArIHNpemUgPiBsb2NhbF9tYXhfc2l6ZSkKLSAgICAgICAgICAgICAgICAgIHNpemUgPSBsb2NhbF9tYXhfc2l6ZSAtIHBvczsKLSAgICAgICAgICBpZiAoY29weV90b191c2VyKGJ1ZiwgbG9jYWxfZGF0YSArIHBvcywgc2l6ZSkpCi0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgfQotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICA8L3BhcmE+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBQb3dlciBNYW5hZ2VtZW50ICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0icG93ZXItbWFuYWdlbWVudCI+Ci0gICAgPHRpdGxlPlBvd2VyIE1hbmFnZW1lbnQ8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSWYgdGhlIGNoaXAgaXMgc3VwcG9zZWQgdG8gd29yayB3aXRoIHN1c3BlbmQvcmVzdW1lCi0gICAgICBmdW5jdGlvbnMsIHlvdSBuZWVkIHRvIGFkZCBwb3dlci1tYW5hZ2VtZW50IGNvZGUgdG8gdGhlCi0gICAgICBkcml2ZXIuIFRoZSBhZGRpdGlvbmFsIGNvZGUgZm9yIHBvd2VyLW1hbmFnZW1lbnQgc2hvdWxkIGJlCi0gICAgICA8ZnVuY3Rpb24+aWZkZWY8L2Z1bmN0aW9uPidlZCB3aXRoCi0gICAgICA8Y29uc3RhbnQ+Q09ORklHX1BNPC9jb25zdGFudD4uIAotICAgIDwvcGFyYT4KLQotCTxwYXJhPgotCUlmIHRoZSBkcml2ZXIgPGVtcGhhc2lzPmZ1bGx5PC9lbXBoYXNpcz4gc3VwcG9ydHMgc3VzcGVuZC9yZXN1bWUKLQl0aGF0IGlzLCB0aGUgZGV2aWNlIGNhbiBiZQotCXByb3Blcmx5IHJlc3VtZWQgdG8gaXRzIHN0YXRlIHdoZW4gc3VzcGVuZCB3YXMgY2FsbGVkLAotCXlvdSBjYW4gc2V0IHRoZSA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4gZmxhZwotCWluIHRoZSBwY20gaW5mbyBmaWVsZC4gIFVzdWFsbHksIHRoaXMgaXMgcG9zc2libGUgd2hlbiB0aGUKLQlyZWdpc3RlcnMgb2YgdGhlIGNoaXAgY2FuIGJlIHNhZmVseSBzYXZlZCBhbmQgcmVzdG9yZWQgdG8KLQlSQU0uIElmIHRoaXMgaXMgc2V0LCB0aGUgdHJpZ2dlciBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aAotCTxjb25zdGFudD5TTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU8L2NvbnN0YW50PiBhZnRlciB0aGUgcmVzdW1lCi0JY2FsbGJhY2sgY29tcGxldGVzLiAKLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlFdmVuIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IFBNIGZ1bGx5IGJ1dCAKLQlwYXJ0aWFsIHN1c3BlbmQvcmVzdW1lIGlzIHN0aWxsIHBvc3NpYmxlLCBpdCdzIHN0aWxsIHdvcnRoeSB0bwotCWltcGxlbWVudCBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MuIEluIHN1Y2ggYSBjYXNlLCBhcHBsaWNhdGlvbnMKLQl3b3VsZCByZXNldCB0aGUgc3RhdHVzIGJ5IGNhbGxpbmcKLQk8ZnVuY3Rpb24+c25kX3BjbV9wcmVwYXJlKCk8L2Z1bmN0aW9uPiBhbmQgcmVzdGFydCB0aGUgc3RyZWFtCi0JYXBwcm9wcmlhdGVseS4gIEhlbmNlLCB5b3UgY2FuIGRlZmluZSBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MKLQliZWxvdyBidXQgZG9uJ3Qgc2V0IDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50PgotCWluZm8gZmxhZyB0byB0aGUgUENNLgotCTwvcGFyYT4KLQkKLQk8cGFyYT4KLQlOb3RlIHRoYXQgdGhlIHRyaWdnZXIgd2l0aCBTVVNQRU5EIGNhbiBhbHdheXMgYmUgY2FsbGVkIHdoZW4KLQk8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kX2FsbDwvZnVuY3Rpb24+IGlzIGNhbGxlZCwKLQlyZWdhcmRsZXNzIG9mIHRoZSA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4gZmxhZy4KLQlUaGUgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+IGZsYWcgYWZmZWN0cyBvbmx5IHRoZSBiZWhhdmlvcgotCW9mIDxmdW5jdGlvbj5zbmRfcGNtX3Jlc3VtZSgpPC9mdW5jdGlvbj4uCi0JKFRodXMsIGluIHRoZW9yeSwKLQk8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FPC9jb25zdGFudD4gaXNuJ3QgbmVlZGVkCi0JdG8gYmUgaGFuZGxlZCBpbiB0aGUgdHJpZ2dlciBjYWxsYmFjayB3aGVuIG5vCi0JPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcgaXMgc2V0LiAgQnV0LAotCWl0J3MgYmV0dGVyIHRvIGtlZXAgaXQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4pCi0JPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhlIGVhcmxpZXIgdmVyc2lvbiBvZiBBTFNBIGRyaXZlcnMsIGEgY29tbW9uCi0gICAgICBwb3dlci1tYW5hZ2VtZW50IGxheWVyIHdhcyBwcm92aWRlZCwgYnV0IGl0IGhhcyBiZWVuIHJlbW92ZWQuCi0gICAgICBUaGUgZHJpdmVyIG5lZWRzIHRvIGRlZmluZSB0aGUgc3VzcGVuZC9yZXN1bWUgaG9va3MgYWNjb3JkaW5nIHRvCi0gICAgICB0aGUgYnVzIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvLiAgSW4gdGhlIGNhc2Ugb2YgUENJIGRyaXZlcnMsIHRoZQotICAgICAgY2FsbGJhY2tzIGxvb2sgbGlrZSBiZWxvdzoKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gICNpZmRlZiBDT05GSUdfUE0KLSAgc3RhdGljIGludCBzbmRfbXlfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi0gIHsKLSAgICAgICAgICAuLi4uIC8qIGRvIHRoaW5ncyBmb3Igc3VzcGVuZCAqLwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci0gIHN0YXRpYyBpbnQgc25kX215X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQotICB7Ci0gICAgICAgICAgLi4uLiAvKiBkbyB0aGluZ3MgZm9yIHN1c3BlbmQgKi8KLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotICAjZW5kaWYKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBUaGUgc2NoZW1lIG9mIHRoZSByZWFsIHN1c3BlbmQgam9iIGlzIGFzIGZvbGxvd3MuCi0KLSAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJldHJpZXZlIHRoZSBjYXJkIGFuZCB0aGUgY2hpcCBkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2FsbCA8ZnVuY3Rpb24+c25kX3Bvd2VyX2NoYW5nZV9zdGF0ZSgpPC9mdW5jdGlvbj4gd2l0aAotCSAgPGNvbnN0YW50PlNORFJWX0NUTF9QT1dFUl9EM2hvdDwvY29uc3RhbnQ+IHRvIGNoYW5nZSB0aGUKLQkgIHBvd2VyIHN0YXR1cy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGwoKTwvZnVuY3Rpb24+IHRvIHN1c3BlbmQgdGhlIHJ1bm5pbmcgUENNIHN0cmVhbXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPGxpc3RpdGVtPjxwYXJhPklmIEFDOTcgY29kZWNzIGFyZSB1c2VkLCBjYWxsCi0JPGZ1bmN0aW9uPnNuZF9hYzk3X3N1c3BlbmQoKTwvZnVuY3Rpb24+IGZvciBlYWNoIGNvZGVjLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2F2ZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0b3AgdGhlIGhhcmR3YXJlIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRpc2FibGUgdGhlIFBDSSBkZXZpY2UgYnkgY2FsbGluZwotCSAgPGZ1bmN0aW9uPnBjaV9kaXNhYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uICBUaGVuLCBjYWxsCi0gICAgICAgICAgPGZ1bmN0aW9uPnBjaV9zYXZlX3N0YXRlKCk8L2Z1bmN0aW9uPiBhdCBsYXN0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEEgdHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6Ci0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IG15Y2hpcF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLSAgewotICAgICAgICAgIC8qICgxKSAqLwotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOwotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgICAgLyogKDIpICovCi0gICAgICAgICAgc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotICAgICAgICAgIC8qICgzKSAqLwotICAgICAgICAgIHNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKLSAgICAgICAgICAvKiAoNCkgKi8KLSAgICAgICAgICBzbmRfYWM5N19zdXNwZW5kKGNoaXAtPmFjOTcpOwotICAgICAgICAgIC8qICg1KSAqLwotICAgICAgICAgIHNuZF9teWNoaXBfc2F2ZV9yZWdpc3RlcnMoY2hpcCk7Ci0gICAgICAgICAgLyogKDYpICovCi0gICAgICAgICAgc25kX215Y2hpcF9zdG9wX2hhcmR3YXJlKGNoaXApOwotICAgICAgICAgIC8qICg3KSAqLwotICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotICAgICAgICAgIHBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgVGhlIHNjaGVtZSBvZiB0aGUgcmVhbCByZXN1bWUgam9iIGlzIGFzIGZvbGxvd3MuCi0KLSAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJldHJpZXZlIHRoZSBjYXJkIGFuZCB0aGUgY2hpcCBkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgUENJLiBGaXJzdCwgY2FsbCA8ZnVuY3Rpb24+cGNpX3Jlc3RvcmVfc3RhdGUoKTwvZnVuY3Rpb24+LgotICAgIAlUaGVuIGVuYWJsZSB0aGUgcGNpIGRldmljZSBhZ2FpbiBieSBjYWxsaW5nIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uCi0JQ2FsbCA8ZnVuY3Rpb24+cGNpX3NldF9tYXN0ZXIoKTwvZnVuY3Rpb24+IGlmIG5lY2Vzc2FyeSwgdG9vLjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZS1pbml0aWFsaXplIHRoZSBjaGlwLjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0b3JlIHRoZSBzYXZlZCByZWdpc3RlcnMgaWYgbmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZXN1bWUgdGhlIG1peGVyLCBlLmcuIGNhbGxpbmcKLSAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVzdW1lKCk8L2Z1bmN0aW9uPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdGFydCB0aGUgaGFyZHdhcmUgKGlmIGFueSkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoKTwvZnVuY3Rpb24+IHdpdGgKLQk8Y29uc3RhbnQ+U05EUlZfQ1RMX1BPV0VSX0QwPC9jb25zdGFudD4gdG8gbm90aWZ5IHRoZSBwcm9jZXNzZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9vcmRlcmVkbGlzdD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBBIHR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlOgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBteWNoaXBfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCi0gIHsKLSAgICAgICAgICAvKiAoMSkgKi8KLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotICAgICAgICAgIC8qICgyKSAqLwotICAgICAgICAgIHBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0gICAgICAgICAgcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKLSAgICAgICAgICBwY2lfc2V0X21hc3RlcihwY2kpOwotICAgICAgICAgIC8qICgzKSAqLwotICAgICAgICAgIHNuZF9teWNoaXBfcmVpbml0X2NoaXAoY2hpcCk7Ci0gICAgICAgICAgLyogKDQpICovCi0gICAgICAgICAgc25kX215Y2hpcF9yZXN0b3JlX3JlZ2lzdGVycyhjaGlwKTsKLSAgICAgICAgICAvKiAoNSkgKi8KLSAgICAgICAgICBzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7Ci0gICAgICAgICAgLyogKDYpICovCi0gICAgICAgICAgc25kX215Y2hpcF9yZXN0YXJ0X2NoaXAoY2hpcCk7Ci0gICAgICAgICAgLyogKDcpICovCi0gICAgICAgICAgc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotCUFzIHNob3duIGluIHRoZSBhYm92ZSwgaXQncyBiZXR0ZXIgdG8gc2F2ZSByZWdpc3RlcnMgYWZ0ZXIKLQlzdXNwZW5kaW5nIHRoZSBQQ00gb3BlcmF0aW9ucyB2aWEKLQk8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kX2FsbCgpPC9mdW5jdGlvbj4gb3IKLQk8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kKCk8L2Z1bmN0aW9uPi4gIEl0IG1lYW5zIHRoYXQgdGhlIFBDTQotCXN0cmVhbXMgYXJlIGFscmVhZHkgc3RvcHBwZWQgd2hlbiB0aGUgcmVnaXN0ZXIgc25hcHNob3QgaXMKLQl0YWtlbi4gIEJ1dCwgcmVtZW1iZXIgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byByZXN0YXJ0IHRoZSBQQ00KLQlzdHJlYW0gaW4gdGhlIHJlc3VtZSBjYWxsYmFjay4gSXQnbGwgYmUgcmVzdGFydGVkIHZpYSAKLQl0cmlnZ2VyIGNhbGwgd2l0aCA8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FPC9jb25zdGFudD4KLQl3aGVuIG5lY2Vzc2FyeS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIE9LLCB3ZSBoYXZlIGFsbCBjYWxsYmFja3Mgbm93LiBMZXQncyBzZXQgdGhlbSB1cC4gSW4gdGhlCi0gICAgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FyZCwgbWFrZSBzdXJlIHRoYXQgeW91IGNhbiBnZXQgdGhlIGNoaXAKLSAgICAgIGRhdGEgZnJvbSB0aGUgY2FyZCBpbnN0YW5jZSwgdHlwaWNhbGx5IHZpYQotICAgICAgPHN0cnVjdGZpZWxkPnByaXZhdGVfZGF0YTwvc3RydWN0ZmllbGQ+IGZpZWxkLCBpbiBjYXNlIHlvdQotICAgICAgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIGluZGl2aWR1YWxseS4KLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQotICB7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0JV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKLQk8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQotCXZpYSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQuCi0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKLSAgewotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJZiB5b3UgbmVlZCBhIHNwYWNlIHRvIHNhdmUgdGhlIHJlZ2lzdGVycywgYWxsb2NhdGUgdGhlCi0JYnVmZmVyIGZvciBpdCBoZXJlLCB0b28sIHNpbmNlIGl0IHdvdWxkIGJlIGZhdGFsCi0gICAgaWYgeW91IGNhbm5vdCBhbGxvY2F0ZSBhIG1lbW9yeSBpbiB0aGUgc3VzcGVuZCBwaGFzZS4KLSAgICBUaGUgYWxsb2NhdGVkIGJ1ZmZlciBzaG91bGQgYmUgcmVsZWFzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICBkZXN0cnVjdG9yLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgQW5kIG5leHQsIHNldCBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MgdG8gdGhlIHBjaV9kcml2ZXIuCi0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewotICAgICAgICAgIC5uYW1lID0gIk15IENoaXAiLAotICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teV9pZHMsCi0gICAgICAgICAgLnByb2JlID0gc25kX215X3Byb2JlLAotICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXlfcmVtb3ZlKSwKLSAgI2lmZGVmIENPTkZJR19QTQotICAgICAgICAgIC5zdXNwZW5kID0gc25kX215X3N1c3BlbmQsCi0gICAgICAgICAgLnJlc3VtZSA9IHNuZF9teV9yZXN1bWUsCi0gICNlbmRpZgotICB9OwotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICA8L3BhcmE+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBNb2R1bGUgUGFyYW1ldGVycyAgLS0+Ci08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLSAgPGNoYXB0ZXIgaWQ9Im1vZHVsZS1wYXJhbWV0ZXJzIj4KLSAgICA8dGl0bGU+TW9kdWxlIFBhcmFtZXRlcnM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlcmUgYXJlIHN0YW5kYXJkIG1vZHVsZSBvcHRpb25zIGZvciBBTFNBLiBBdCBsZWFzdCwgZWFjaAotICAgICAgbW9kdWxlIHNob3VsZCBoYXZlIHRoZSA8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+LAotICAgICAgPHBhcmFtZXRlcj5pZDwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5lbmFibGU8L3BhcmFtZXRlcj4KLSAgICAgIG9wdGlvbnMuIAotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcyAodXN1YWxseSB1cCB0bwotICAgICAgOCA9IDxjb25zdGFudD5TTkRSVl9DQVJEUzwvY29uc3RhbnQ+IGNhcmRzKSwgdGhleSBzaG91bGQgYmUKLSAgICAgIGFycmF5cy4gVGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgYXJlIGRlZmluZWQgYWxyZWFkeSBhcwotICAgICAgY29uc3RhbnRzIGZvciBlYXNpZXIgcHJvZ3JhbW1pbmc6Ci0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwotICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7Ci0gIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJZiB0aGUgbW9kdWxlIHN1cHBvcnRzIG9ubHkgYSBzaW5nbGUgY2FyZCwgdGhleSBjb3VsZCBiZSBzaW5nbGUKLSAgICB2YXJpYWJsZXMsIGluc3RlYWQuICA8cGFyYW1ldGVyPmVuYWJsZTwvcGFyYW1ldGVyPiBvcHRpb24gaXMgbm90Ci0gICAgYWx3YXlzIG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhCi0gICAgZHVtbXkgb3B0aW9uIGZvciBjb21wYXRpYmlsaXR5LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgVGhlIG1vZHVsZSBwYXJhbWV0ZXJzIG11c3QgYmUgZGVjbGFyZWQgd2l0aCB0aGUgc3RhbmRhcmQKLSAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtKCkoKTwvZnVuY3Rpb24+LAotICAgIDxmdW5jdGlvbj5tb2R1bGVfcGFyYW1fYXJyYXkoKSgpPC9mdW5jdGlvbj4gYW5kCi0gICAgPGZ1bmN0aW9uPk1PRFVMRV9QQVJNX0RFU0MoKTwvZnVuY3Rpb24+IG1hY3Jvcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSB0eXBpY2FsIGNvZGluZyB3b3VsZCBiZSBsaWtlIGJlbG93OgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgI2RlZmluZSBDQVJEX05BTUUgIk15IENoaXAiCi0KLSAgbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotICBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOwotICBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLSAgTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7Ci0gIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotICBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBBbHNvLCBkb24ndCBmb3JnZXQgdG8gZGVmaW5lIHRoZSBtb2R1bGUgZGVzY3JpcHRpb24sIGNsYXNzZXMsCi0gICAgICBsaWNlbnNlIGFuZCBkZXZpY2VzLiBFc3BlY2lhbGx5LCB0aGUgcmVjZW50IG1vZHByb2JlIHJlcXVpcmVzIHRvCi0gICAgICBkZWZpbmUgdGhlIG1vZHVsZSBsaWNlbnNlIGFzIEdQTCwgZXRjLiwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMKLSAgICAgIHNob3duIGFzIDxxdW90ZT50YWludGVkPC9xdW90ZT4uIAotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgTU9EVUxFX0RFU0NSSVBUSU9OKCJNeSBDaGlwIik7Ci0gIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSAgTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VmVuZG9yLE15IENoaXAgTmFtZX19Iik7Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEhvdyBUbyBQdXQgWW91ciBEcml2ZXIgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJob3ctdG8tcHV0LXlvdXItZHJpdmVyIj4KLSAgICA8dGl0bGU+SG93IFRvIFB1dCBZb3VyIERyaXZlciBJbnRvIEFMU0EgVHJlZTwvdGl0bGU+Ci0JPHNlY3Rpb24+Ci0JPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgotCTxwYXJhPgotCVNvIGZhciwgeW91J3ZlIGxlYXJuZWQgaG93IHRvIHdyaXRlIHRoZSBkcml2ZXIgY29kZXMuCi0JQW5kIHlvdSBtaWdodCBoYXZlIGEgcXVlc3Rpb24gbm93OiBob3cgdG8gcHV0IG15IG93bgotCWRyaXZlciBpbnRvIHRoZSBBTFNBIGRyaXZlciB0cmVlPwotCUhlcmUgKGZpbmFsbHkgOikgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBpcyBkZXNjcmliZWQgYnJpZWZseS4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlTdXBwb3NlIHRoYXQgeW91IGNyZWF0ZSBhIG5ldyBQQ0kgZHJpdmVyIGZvciB0aGUgY2FyZAotCTxxdW90ZT54eXo8L3F1b3RlPi4gIFRoZSBjYXJkIG1vZHVsZSBuYW1lIHdvdWxkIGJlCi0Jc25kLXh5ei4gIFRoZSBuZXcgZHJpdmVyIGlzIHVzdWFsbHkgcHV0IGludG8gdGhlIGFsc2EtZHJpdmVyCi0JdHJlZSwgPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbgotCXRoZSBjYXNlIG9mIFBDSSBjYXJkcy4KLQlUaGVuIHRoZSBkcml2ZXIgaXMgZXZhbHVhdGVkLCBhdWRpdGVkIGFuZCB0ZXN0ZWQKLQlieSBkZXZlbG9wZXJzIGFuZCB1c2Vycy4gIEFmdGVyIGEgY2VydGFpbiB0aW1lLCB0aGUgZHJpdmVyCi0Jd2lsbCBnbyB0byB0aGUgYWxzYS1rZXJuZWwgdHJlZSAodG8gdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5LAotCXN1Y2ggYXMgPGZpbGVuYW1lPmFsc2Eta2VybmVsL3BjaTwvZmlsZW5hbWU+KSBhbmQgZXZlbnR1YWxseQotIAl3aWxsIGJlIGludGVncmF0ZWQgaW50byB0aGUgTGludXggMi42IHRyZWUgKHRoZSBkaXJlY3Rvcnkgd291bGQgYmUKLQk8ZmlsZW5hbWU+bGludXgvc291bmQvcGNpPC9maWxlbmFtZT4pLgotCTwvcGFyYT4KLQotCTxwYXJhPgotCUluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIHRoZSBkcml2ZXIgY29kZSBpcyBzdXBwb3NlZAotCXRvIGJlIHB1dCBpbnRvIGFsc2EtZHJpdmVyIHRyZWUuIFRoZSB0d28gY2FzZXMgYXJlIGNvdmVyZWQ6Ci0JYSBkcml2ZXIgY29uc2lzdGluZyBvZiBhIHNpbmdsZSBzb3VyY2UgZmlsZSBhbmQgb25lIGNvbnNpc3RpbmcKLQlvZiBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KLQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0JPHNlY3Rpb24+Ci0JPHRpdGxlPkRyaXZlciB3aXRoIEEgU2luZ2xlIFNvdXJjZSBGaWxlPC90aXRsZT4KLQk8cGFyYT4KLQk8b3JkZXJlZGxpc3Q+Ci0JPGxpc3RpdGVtPgotCTxwYXJhPgotCU1vZGlmeSBhbHNhLWRyaXZlci9wY2kvTWFrZWZpbGUKLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlTdXBwb3NlIHlvdSBoYXZlIGEgZmlsZSB4eXouYy4gIEFkZCB0aGUgZm9sbG93aW5nCi0JdHdvIGxpbmVzCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kLXh5ei1vYmpzIDo9IHh5ei5vCi0gIG9iai0kKENPTkZJR19TTkRfWFlaKSArPSBzbmQteHl6Lm8KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0JPHBhcmE+Ci0JQ3JlYXRlIHRoZSBLY29uZmlnIGVudHJ5Ci0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JQWRkIHRoZSBuZXcgZW50cnkgb2YgS2NvbmZpZyBmb3IgeW91ciB4eXogZHJpdmVyLgotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIGNvbmZpZyBTTkRfWFlaCi0gICAgICAgICAgdHJpc3RhdGUgIkZvb2JhciBYWVoiCi0gICAgICAgICAgZGVwZW5kcyBvbiBTTkQKLSAgICAgICAgICBzZWxlY3QgU05EX1BDTQotICAgICAgICAgIGhlbHAKLSAgICAgICAgICAgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBGb29iYXIgWFlaIHNvdW5kY2FyZC4KLQotICAgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotICAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgc25kLXh5ei4KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLQl0aGUgbGluZSwgc2VsZWN0IFNORF9QQ00sIHNwZWNpZmllcyB0aGF0IHRoZSBkcml2ZXIgeHl6IHN1cHBvcnRzCi0JUENNLiAgSW4gYWRkaXRpb24gdG8gU05EX1BDTSwgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIGFyZQotCXN1cHBvcnRlZCBmb3Igc2VsZWN0IGNvbW1hbmQ6Ci0JU05EX1JBV01JREksIFNORF9USU1FUiwgU05EX0hXREVQLCBTTkRfTVBVNDAxX1VBUlQsCi0JU05EX09QTDNfTElCLCBTTkRfT1BMNF9MSUIsIFNORF9WWF9MSUIsIFNORF9BQzk3X0NPREVDLgotCUFkZCB0aGUgc2VsZWN0IGNvbW1hbmQgZm9yIGVhY2ggc3VwcG9ydGVkIGNvbXBvbmVudC4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlOb3RlIHRoYXQgc29tZSBzZWxlY3Rpb25zIGltcGx5IHRoZSBsb3dsZXZlbCBzZWxlY3Rpb25zLgotCUZvciBleGFtcGxlLCBQQ00gaW5jbHVkZXMgVElNRVIsIE1QVTQwMV9VQVJUIGluY2x1ZGVzIFJBV01JREksCi0JQUM5N19DT0RFQyBpbmNsdWRlcyBQQ00sIGFuZCBPUEwzX0xJQiBpbmNsdWRlcyBIV0RFUC4KLQlZb3UgZG9uJ3QgbmVlZCB0byBnaXZlIHRoZSBsb3dsZXZlbCBzZWxlY3Rpb25zIGFnYWluLgotCTwvcGFyYT4KLQotCTxwYXJhPgotCUZvciB0aGUgZGV0YWlscyBvZiBLY29uZmlnIHNjcmlwdCwgcmVmZXIgdG8gdGhlIGtidWlsZAotCWRvY3VtZW50YXRpb24uCi0JPC9wYXJhPgotCi0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQlSdW4gY3ZzY29tcGlsZSBzY3JpcHQgdG8gcmUtZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kCi0JYnVpbGQgdGhlIHdob2xlIHN0dWZmIGFnYWluLgotCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCTwvb3JkZXJlZGxpc3Q+Ci0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uPgotCTx0aXRsZT5Ecml2ZXJzIHdpdGggU2V2ZXJhbCBTb3VyY2UgRmlsZXM8L3RpdGxlPgotCTxwYXJhPgotCVN1cHBvc2UgdGhhdCB0aGUgZHJpdmVyIHNuZC14eXogaGF2ZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KLQlUaGV5IGFyZSBsb2NhdGVkIGluIHRoZSBuZXcgc3ViZGlyZWN0b3J5LAotCXBjaS94eXouCi0KLQk8b3JkZXJlZGxpc3Q+Ci0JPGxpc3RpdGVtPgotCTxwYXJhPgotCUFkZCBhIG5ldyBkaXJlY3RvcnkgKDxmaWxlbmFtZT54eXo8L2ZpbGVuYW1lPikgaW4KLQk8ZmlsZW5hbWU+YWxzYS1kcml2ZXIvcGNpL01ha2VmaWxlPC9maWxlbmFtZT4gYXMgYmVsb3cKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIG9iai0kKENPTkZJR19TTkQpICs9IHh5ei8KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0JPHBhcmE+Ci0JVW5kZXIgdGhlIGRpcmVjdG9yeSA8ZmlsZW5hbWU+eHl6PC9maWxlbmFtZT4sIGNyZWF0ZSBhIE1ha2VmaWxlCi0KLSAgICAgIDxleGFtcGxlPgotCTx0aXRsZT5TYW1wbGUgTWFrZWZpbGUgZm9yIGEgZHJpdmVyIHh5ejwvdGl0bGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBpZm5kZWYgU05EX1RPUERJUgotICBTTkRfVE9QRElSPS4uLy4uCi0gIGVuZGlmCi0KLSAgaW5jbHVkZSAkKFNORF9UT1BESVIpL3RvcGxldmVsLmNvbmZpZwotICBpbmNsdWRlICQoU05EX1RPUERJUikvTWFrZWZpbGUuY29uZgotCi0gIHNuZC14eXotb2JqcyA6PSB4eXoubyBhYmMubyBkZWYubwotCi0gIG9iai0kKENPTkZJR19TTkRfWFlaKSArPSBzbmQteHl6Lm8KLQotICBpbmNsdWRlICQoU05EX1RPUERJUikvUnVsZXMubWFrZQotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2V4YW1wbGU+Ci0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0JPHBhcmE+Ci0JQ3JlYXRlIHRoZSBLY29uZmlnIGVudHJ5Ci0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JVGhpcyBwcm9jZWR1cmUgaXMgYXMgc2FtZSBhcyBpbiB0aGUgbGFzdCBzZWN0aW9uLgotCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCi0JPGxpc3RpdGVtPgotCTxwYXJhPgotCVJ1biBjdnNjb21waWxlIHNjcmlwdCB0byByZS1nZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKLQlidWlsZCB0aGUgd2hvbGUgc3R1ZmYgYWdhaW4uCi0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JPC9vcmRlcmVkbGlzdD4KLQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0gIDwvY2hhcHRlcj4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFVzZWZ1bCBGdW5jdGlvbnMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJ1c2VmdWwtZnVuY3Rpb25zIj4KLSAgICA8dGl0bGU+VXNlZnVsIEZ1bmN0aW9uczwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtcHJpbnRrIj4KLSAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX3ByaW50aygpPC9mdW5jdGlvbj4gYW5kIGZyaWVuZHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFMU0EgcHJvdmlkZXMgYSB2ZXJib3NlIHZlcnNpb24gb2YgdGhlCi0gICAgICA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gSWYgYSBrZXJuZWwgY29uZmlnCi0gICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9WRVJCT1NFX1BSSU5USzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcwotICAgICAgZnVuY3Rpb24gcHJpbnRzIHRoZSBnaXZlbiBtZXNzYWdlIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgbmFtZQotICAgICAgYW5kIHRoZSBsaW5lIG9mIHRoZSBjYWxsZXIuIFRoZSA8Y29uc3RhbnQ+S0VSTl9YWFg8L2NvbnN0YW50PgotICAgICAgcHJlZml4IGlzIHByb2Nlc3NlZCBhcyAKLSAgICAgIHdlbGwgYXMgdGhlIG9yaWdpbmFsIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGRvZXMsIHNvIGl0J3MKLSAgICAgIHJlY29tbWVuZGVkIHRvIGFkZCB0aGlzIHByZWZpeCwgZS5nLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfcHJpbnRrKEtFUk5fRVJSICJPaCBteSwgc29ycnksIGl0J3MgZXh0cmVtZWx5IGJhZCFcbiIpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVyZSBhcmUgYWxzbyA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPidzIGZvcgotICAgICAgZGVidWdnaW5nLiA8ZnVuY3Rpb24+c25kX3ByaW50ZCgpPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgZm9yCi0gICAgICBnZW5lcmFsIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYKLSAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4gaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIGlzCi0gICAgICBjb21waWxlZCwgYW5kIHdvcmtzIGp1c3QgbGlrZQotICAgICAgPGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+LiBJZiB0aGUgQUxTQSBpcyBjb21waWxlZAotICAgICAgd2l0aG91dCB0aGUgZGVidWdnaW5nIGZsYWcsIGl0J3MgaWdub3JlZC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICA8ZnVuY3Rpb24+c25kX3ByaW50ZGQoKTwvZnVuY3Rpb24+IGlzIGNvbXBpbGVkIGluIG9ubHkgd2hlbgotICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUdfVkVSQk9TRTwvY29uc3RhbnQ+IGlzIHNldC4gUGxlYXNlIG5vdGUKLSAgICAgIHRoYXQgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUdfVkVSQk9TRTwvY29uc3RhbnQ+IGlzIG5vdCBzZXQgYXMgZGVmYXVsdAotICAgICAgZXZlbiBpZiB5b3UgY29uZmlndXJlIHRoZSBhbHNhLWRyaXZlciB3aXRoCi0gICAgICA8b3B0aW9uPi0td2l0aC1kZWJ1Zz1mdWxsPC9vcHRpb24+IG9wdGlvbi4gWW91IG5lZWQgdG8gZ2l2ZQotICAgICAgZXhwbGljaXRseSA8b3B0aW9uPi0td2l0aC1kZWJ1Zz1kZXRlY3Q8L29wdGlvbj4gb3B0aW9uIGluc3RlYWQuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1idWciPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj5zbmRfQlVHKCk8L2Z1bmN0aW9uPjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgc2hvd3MgdGhlIDxjb21wdXRlcm91dHB1dD5CVUc/PC9jb21wdXRlcm91dHB1dD4gbWVzc2FnZSBhbmQKLSAgICAgIHN0YWNrIHRyYWNlIGFzIHdlbGwgYXMgPGZ1bmN0aW9uPnNuZF9CVUdfT048L2Z1bmN0aW9uPiBhdCB0aGUgcG9pbnQuCi0gICAgICBJdCdzIHVzZWZ1bCB0byBzaG93IHRoYXQgYSBmYXRhbCBlcnJvciBoYXBwZW5zIHRoZXJlLiAKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCSBXaGVuIG5vIGRlYnVnIGZsYWcgaXMgc2V0LCB0aGlzIG1hY3JvIGlzIGlnbm9yZWQuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1idWctb24iPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj5zbmRfQlVHX09OKCk8L2Z1bmN0aW9uPjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9CVUdfT04oKTwvZnVuY3Rpb24+IG1hY3JvIGlzIHNpbWlsYXIgd2l0aAotCTxmdW5jdGlvbj5XQVJOX09OKCk8L2Z1bmN0aW9uPiBtYWNyby4gRm9yIGV4YW1wbGUsICAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfQlVHX09OKCFwb2ludGVyKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0Jb3IgaXQgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbmRpdGlvbiwKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgaWYgKHNuZF9CVUdfT04obm9uX3plcm9faXNfYnVnKSkKLSAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbWFjcm8gdGFrZXMgYW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS4KLQlXaGVuIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4sIGlzIHNldCwgdGhlCi0JZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBldmFsdWF0ZWQuIElmIGl0J3Mgbm9uLXplcm8sIGl0IHNob3dzCi0JdGhlIHdhcm5pbmcgbWVzc2FnZSBzdWNoIGFzCi0JPGNvbXB1dGVyb3V0cHV0PkJVRz8gKHh4eCk8L2NvbXB1dGVyb3V0cHV0PgotCW5vcm1hbGx5IGZvbGxvd2VkIGJ5IHN0YWNrIHRyYWNlLiAgSXQgcmV0dXJucyB0aGUgZXZhbHVhdGVkCi0JdmFsdWUuCi0JV2hlbiBubyA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcwotCW1hY3JvIGFsd2F5cyByZXR1cm5zIHplcm8uCi0gICAgICA8L3BhcmE+Ci0KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBBY2tub3dsZWRnbWVudHMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJhY2tub3dsZWRnbWVudHMiPgotICAgIDx0aXRsZT5BY2tub3dsZWRnbWVudHM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSSB3b3VsZCBsaWtlIHRvIHRoYW5rIFBoaWwgS2VyciBmb3IgaGlzIGhlbHAgZm9yIGltcHJvdmVtZW50IGFuZAotICAgICAgY29ycmVjdGlvbnMgb2YgdGhpcyBkb2N1bWVudC4gCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgIEtldmluIENvbmRlciByZWZvcm1hdHRlZCB0aGUgb3JpZ2luYWwgcGxhaW4tdGV4dCB0byB0aGUKLSAgICBEb2NCb29rIGZvcm1hdC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgR2l1bGlhbm8gUG9jaGluaSBjb3JyZWN0ZWQgdHlwb3MgYW5kIGNvbnRyaWJ1dGVkIHRoZSBleGFtcGxlIGNvZGVzCi0gICAgaW4gdGhlIGhhcmR3YXJlIGNvbnN0cmFpbnRzIHNlY3Rpb24uCi0gICAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci08L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDBmNWQyNmIuLjhlZWMwNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC01Niw2ICs1Niw3IEBACiAgIHNvbnktYXNzYW1kCVNvbnkgQVNTQU1ECiAgIHRvc2hpYmEtczA2CVRvc2hpYmEgUzA2CiAgIHRvc2hpYmEtcngxCVRvc2hpYmEgUlgxCisgIHR5YW4JCVR5YW4gVGh1bmRlciBuNjY1MFcgKFMyOTE1LUUpCiAgIHVsdHJhCQlTYW1zdW5nIFExIFVsdHJhIFZpc3RhIG1vZGVsCiAgIGxlbm92by0zMDAwCUxlbm92byAzMDAwIHk0MTAKICAgbmVjCQlORUMgVmVyc2EgUzkxMDAKQEAgLTI2MSw2ICsyNjIsOCBAQAogPT09PT09PT09PT09PQogICBsYXB0b3AJQmFzaWMgTGFwdG9wIGNvbmZpZyAoZGVmYXVsdCkKICAgaHAJCUhQIFNwYXJ0YW4gbGFwdG9wCisgIGhwLWR2NjczNglIUCBkdjY3MzYKKyAgbGVub3ZvLXgyMDAJTGVub3ZvIFgyMDAgbGFwdG9wCiAKIFNUQUM5MjAwCiA9PT09PT09PQpAQCAtMjc4LDYgKzI4MSw3IEBACiAgIGdhdGV3YXktbTQJR2F0ZXdheSBsYXB0b3BzIHdpdGggRUFQRCBjb250cm9sCiAgIGdhdGV3YXktbTQtMglHYXRld2F5IGxhcHRvcHMgd2l0aCBFQVBEIGNvbnRyb2wKICAgcGFuYXNvbmljCVBhbmFzb25pYyBDRi03NAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIwNS85MjU0CiA9PT09PT09PT09PT09CkBAIC0yODUsNiArMjg5LDggQEAKICAgZGVsbC1tNDIJRGVsbCAodW5rbm93bikKICAgZGVsbC1tNDMJRGVsbCBQcmVjaXNpb24KICAgZGVsbC1tNDQJRGVsbCBJbnNwaXJvbgorICBlYXBkCQlLZWVwIEVBUEQgb24gKGUuZy4gR2F0ZXdheSBUMTYxNikKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMjAvOTIyMQogPT09PT09PT09PT09PQpAQCAtMzA4LDYgKzMxNCw3IEBACiAgIGRlbGwtZDgyCURlbGwgKHVua25vd24pCiAgIGRlbGwtbTgxCURlbGwgKHVua25vd24pCiAgIGRlbGwtbTgyCURlbGwgWFBTIE0xMjEwCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjAyLzkyNTAvOTI1MQogPT09PT09PT09PT09PT09PT09CkBAIC0zMTksNiArMzI2LDcgQEAKICAgbTMJCVNvbWUgR2F0ZXdheSBNWCBzZXJpZXMgbGFwdG9wcwogICBtNQkJU29tZSBHYXRld2F5IE1YIHNlcmllcyBsYXB0b3BzIChNUDY5NTQpCiAgIG02CQlTb21lIEdhdGV3YXkgTlggc2VyaWVzIGxhcHRvcHMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMjcvOTIyOC85MjI5LzkyN3gKID09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zMjgsNiArMzM2LDcgQEAKICAgNXN0YWNrCUQ5NjUgNXN0YWNrICsgU1BESUYKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ3MUIqCiA9PT09PT09PT09PT0KQEAgLTMzNSw3ICszNDQsMTAgQEAKICAgZGVsbC1tNC0xCURlbGwgZGVza3RvcHMKICAgZGVsbC1tNC0yCURlbGwgZGVza3RvcHMKICAgZGVsbC1tNC0zCURlbGwgZGVza3RvcHMKLSAgaHAtbTQJCUhQIGR2IGxhcHRvcHMKKyAgaHAtbTQJCUhQIG1pbmkgMTAwMAorICBocC1kdjUJSFAgZHYgc2VyaWVzCisgIGhwLWhkeAlIUCBIRFggc2VyaWVzCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzMqCiA9PT09PT09PT09PQpAQCAtMzQ1LDEzICszNTcsMTYgQEAKICAgZGVsbC1tNi1kbWljCURlbGwgZGVza3RvcHMvbGFwdG9wcyB3aXRoIGRpZ2l0YWwgbWljcwogICBkZWxsLW02CURlbGwgZGVza3RvcHMvbGFwdG9wcyB3aXRoIGJvdGggdHlwZSBvZiBtaWNzCiAgIGRlbGwtZXEJRGVsbCBkZXNrdG9wcy9sYXB0b3BzCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhEODMqCiA9PT09PT09PT09PQogICByZWYJCVJlZmVyZW5jZSBib2FyZAogICBtaWMtcmVmCVJlZmVyZW5jZSBib2FyZCB3aXRoIHBvd2VyIG1hbmFnbWVudCBmb3IgcG9ydHMKKyAgZGVsbC1zMTQJRGVsbCBsYXB0b3AKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzk4NzIKID09PT09PT09Ci0gIHZhaW8JCVNldHVwIGZvciBWQUlPIEZFNTUwRy9TWjExMAotICB2YWlvLWFyIFNldHVwIGZvciBWQUlPIEFSCisgIHZhaW8JCVZBSU8gbGFwdG9wIHdpdGhvdXQgU1BESUYKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CmluZGV4IDhkNjhmZmYuLmM1OTQ4ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dApAQCAtMTA5LDYgKzEwOSwxMyBAQAogU2luY2UgMi42LjI5IGtlcm5lbCwgdGhlIGRyaXZlciBoYXMgYSBtb3JlIHJvYnVzdCBwcm9iaW5nIG1ldGhvZCwgc28KIHRoaXMgZXJyb3IgbWlnaHQgaGFwcGVuIHJhcmVseSwgdGhvdWdoLgogCitPbiBhIG1hY2hpbmUgd2l0aCBhIGJyb2tlbiBCSU9TLCBzb21ldGltZXMgeW91IG5lZWQgdG8gZm9yY2UgdGhlCitkcml2ZXIgdG8gcHJvYmUgdGhlIGNvZGVjIHNsb3RzIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHJlcG9ydCBmb3IgdXNlLgorSW4gc3VjaCBhIGNhc2UsIHR1cm4gdGhlIGJpdCA4ICgweDEwMCkgb2YgYHByb2JlX21hc2tgIG9wdGlvbiBvbi4KK1RoZW4gdGhlIHJlc3QgOCBiaXRzIGFyZSBwYXNzZWQgYXMgdGhlIGNvZGVjIHNsb3RzIHRvIHByb2JlCit1bmNvbmRpdGlvbmFsbHkuICBGb3IgZXhhbXBsZSwgYHByb2JlX21hc2s9MHgxMDNgIHdpbGwgZm9yY2UgdG8gcHJvYmUKK3RoZSBjb2RlYyBzbG90cyAwIGFuZCAxIG5vIG1hdHRlciB3aGF0IHRoZSBoYXJkd2FyZSByZXBvcnRzLgorCiAKIEludGVycnVwdCBIYW5kbGluZwogfn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0zNTgsMTAgKzM2NSwyNiBAQAogICB0byB0aGlzIGZpbGUuCiBpbml0X3ZlcmJzOjoKICAgVGhlIGV4dHJhIHZlcmJzIHRvIGV4ZWN1dGUgYXQgaW5pdGlhbGl6YXRpb24uICBZb3UgY2FuIGFkZCBhIHZlcmIgYnkKLSAgd3JpdGluZyB0byB0aGlzIGZpbGUuICBQYXNzIHRyZWUgbnVtYmVycywgbmlkLCB2ZXJiIGFuZCBwYXJhbWV0ZXIuCisgIHdyaXRpbmcgdG8gdGhpcyBmaWxlLiAgUGFzcyB0aHJlZSBudW1iZXJzOiBuaWQsIHZlcmIgYW5kIHBhcmFtZXRlcgorICAoc2VwYXJhdGVkIHdpdGggYSBzcGFjZSkuCiBoaW50czo6Ci0gIFNob3dzIGhpbnQgc3RyaW5ncyBmb3IgY29kZWMgcGFyc2VycyBmb3IgYW55IHVzZS4gIFJpZ2h0IG5vdyBpdCdzCi0gIG5vdCB1c2VkLgorICBTaG93cyAvIHN0b3JlcyBoaW50IHN0cmluZ3MgZm9yIGNvZGVjIHBhcnNlcnMgZm9yIGFueSB1c2UuCisgIEl0cyBmb3JtYXQgaXMgYGtleSA9IHZhbHVlYC4gIEZvciBleGFtcGxlLCBwYXNzaW5nIGBocF9kZXRlY3QgPSB5ZXNgCisgIHRvIElEVC9TVEFDIGNvZGVjIHBhcnNlciB3aWxsIHJlc3VsdCBpbiB0aGUgZGlzYWJsZW1lbnQgb2YgdGhlCisgIGhlYWRwaG9uZSBkZXRlY3Rpb24uCitpbml0X3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIGluaXRpYWwgcGluIGRlZmF1bHQgY29uZmlnIHZhbHVlcyBzZXQgYnkgQklPUy4KK2RyaXZlcl9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBwaW4gZGVmYXVsdCB2YWx1ZXMgc2V0IGJ5IHRoZSBjb2RlYyBwYXJzZXIgZXhwbGljaXRseS4KKyAgVGhpcyBkb2Vzbid0IHNob3cgYWxsIHBpbiB2YWx1ZXMgYnV0IG9ubHkgdGhlIGNoYW5nZWQgdmFsdWVzIGJ5CisgIHRoZSBwYXJzZXIuICBUaGF0IGlzLCBpZiB0aGUgcGFyc2VyIGRvZXNuJ3QgY2hhbmdlIHRoZSBwaW4gZGVmYXVsdAorICBjb25maWcgdmFsdWVzIGJ5IGl0c2VsZiwgdGhpcyB3aWxsIGNvbnRhaW4gbm90aGluZy4KK3VzZXJfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgcGluIGRlZmF1bHQgY29uZmlnIHZhbHVlcyB0byBvdmVycmlkZSB0aGUgQklPUyBzZXR1cC4KKyAgV3JpdGluZyB0aGlzICh3aXRoIHR3byBudW1iZXJzLCBOSUQgYW5kIHZhbHVlKSBhcHBlbmRzIHRoZSBuZXcKKyAgdmFsdWUuICBUaGUgZ2l2ZW4gd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGluaXRpYWwgQklPUyB2YWx1ZSBhdAorICB0aGUgbmV4dCByZWNvbmZpZ3VyYXRpb24gdGltZS4gIE5vdGUgdGhhdCB0aGlzIGNvbmZpZyB3aWxsIG92ZXJyaWRlCisgIGV2ZW4gdGhlIGRyaXZlciBwaW4gY29uZmlncywgdG9vLgogcmVjb25maWc6OgogICBUcmlnZ2VycyB0aGUgY29kZWMgcmUtY29uZmlndXJhdGlvbi4gIFdoZW4gYW55IHZhbHVlIGlzIHdyaXR0ZW4gdG8KICAgdGhpcyBmaWxlLCB0aGUgZHJpdmVyIHJlLWluaXRpYWxpemUgYW5kIHBhcnNlcyB0aGUgY29kZWMgdHJlZQpAQCAtMzcxLDYgKzM5NCwxNCBAQAogICBSZXNldHMgdGhlIGNvZGVjLCByZW1vdmVzIHRoZSBtaXhlciBlbGVtZW50cyBhbmQgUENNIHN0dWZmIG9mIHRoZQogICBzcGVjaWZpZWQgY29kZWMsIGFuZCBjbGVhciBhbGwgaW5pdCB2ZXJicyBhbmQgaGludHMuCiAKK0ZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbgordmFsdWUgb2YgdGhlIHBpbiB3aWRnZXQgMHgxNCB0byAweDk5OTMwMTNmLCBhbmQgbGV0IHRoZSBkcml2ZXIKK3JlLWNvbmZpZ3VyZSBiYXNlZCBvbiB0aGF0IHN0YXRlLCBydW4gbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAjIGVjaG8gMHgxNCAweDk5OTMwMTNmID4gL3N5cy9jbGFzcy9zb3VuZC9od0MwRDAvdXNlcl9waW5fY29uZmlncworICAjIGVjaG8gMSA+IC9zeXMvY2xhc3Mvc291bmQvaHdDMEQwL3JlY29uZmlnICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAKIFBvd2VyLVNhdmluZwogfn5+fn5+fn5+fn5+CkBAIC00NjEsNiArNDkyLDE2IEBACiBUaGVyZSBhcmUgc29tZSBvdGhlciB1c2VmdWwgb3B0aW9ucy4gIFNlZSBgLS1oZWxwYCBvcHRpb24gb3V0cHV0IGZvcgogZGV0YWlscy4KIAorV2hlbiBhIHByb2JlIGVycm9yIG9jY3VycyBvciB3aGVuIHRoZSBkcml2ZXIgb2J2aW91c2x5IGFzc2lnbnMgYQorbWlzbWF0Y2hlZCBtb2RlbCwgaXQnZCBiZSBoZWxwZnVsIHRvIGxvYWQgdGhlIGRyaXZlciB3aXRoCitgcHJvYmVfb25seT0xYCBvcHRpb24gKGF0IGJlc3QgYWZ0ZXIgdGhlIGNvbGQgcmVib290KSBhbmQgcnVuCithbHNhLWluZm8gYXQgdGhpcyBzdGF0ZS4gIFdpdGggdGhpcyBvcHRpb24sIHRoZSBkcml2ZXIgd29uJ3QgY29uZmlndXJlCit0aGUgbWl4ZXIgYW5kIFBDTSBidXQganVzdCB0cmllcyB0byBwcm9iZSB0aGUgY29kZWMgc2xvdC4gIEFmdGVyCitwcm9iaW5nLCB0aGUgcHJvYyBmaWxlIGlzIGF2YWlsYWJsZSwgc28geW91IGNhbiBnZXQgdGhlIHJhdyBjb2RlYworaW5mb3JtYXRpb24gYmVmb3JlIG1vZGlmaWVkIGJ5IHRoZSBkcml2ZXIuICBPZiBjb3Vyc2UsIHRoZSBkcml2ZXIKK2lzbid0IHVzYWJsZSB3aXRoIGBwcm9iZV9vbmx5PTFgLiAgQnV0IHlvdSBjYW4gY29udGludWUgdGhlCitjb25maWd1cmF0aW9uIHZpYSBod2RlcCBzeXNmcyBmaWxlIGlmIGhkYS1yZWNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4KKwogCiBoZGEtdmVyYgogfn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CmluZGV4IDQ2Zjk2ODQuLjllNjc2MzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dApAQCAtMTE2LDYgKzExNiw5IEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIk91dHB1dCBNaXhlciIsIFdNODczMV9QV1IsIDQsIDEsIHdtODczMV9vdXRwdXRfbWl4ZXJfY29udHJvbHMsCiAJQVJSQVlfU0laRSh3bTg3MzFfb3V0cHV0X21peGVyX2NvbnRyb2xzKSksCiAKK0lmIHlvdSBkb250IHdhbnQgdGhlIG1peGVyIGVsZW1lbnRzIHByZWZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1peGVyIHdpZGdldCwKK3lvdSBjYW4gdXNlIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwgaW5zdGVhZC4gdGhlIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lCithcyBmb3IgU05EX1NPQ19EQVBNX01JWEVSLgogCiAyLjMgUGxhdGZvcm0vTWFjaGluZSBkb21haW4gV2lkZ2V0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2YWY3YS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1UbyBjb25maWd1cmUgdGhlIENyeXN0YWwgQ1M0MjN4IHNvdW5kIGNoaXAgYW5kIGFjdGl2YXRlIGl0cyBEU1AgZnVuY3Rpb25zLAotbW9kdWxlcyBtYXkgYmUgbG9hZGVkIGluIHRoaXMgb3JkZXI6Ci0gIAotCW1vZHByb2JlIHNvdW5kCi0JaW5zbW9kIGFkMTg0OAotCWluc21vZCB1YXJ0NDAxCi0JaW5zbW9kIGNzNDIzMiBpbz0qIGlycT0qIGRtYT0qIGRtYTI9KgotICAKLVRoaXMgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhcmFtZXRlcnM6Ci0gIAotCWlvLS1JL08gYWRkcmVzcyBvZiB0aGUgV2luZG93cyBTb3VuZCBTeXN0ZW0gKG5vcm1hbGx5IDB4NTM0KQotCWlycS0tSVJRIG9mIHRoaXMgZGV2aWNlCi0JZG1hIGFuZCBkbWEyLS1ETUEgY2hhbm5lbHMgKERNQTIgbWF5IGJlIDApCi0gIAotT24gc29tZSBjYXJkcywgdGhlIGJvYXJkIGF0dGVtcHRzIHRvIGRvIG5vbi1QblAgc2V0dXAsIGFuZCBmYWlscy4gIElmIHlvdQotaGF2ZSBwcm9ibGVtcywgdXNlIExpbnV4JyBQblAgZmFjaWxpdGllcy4gCi0gIAotVG8gZ2V0IE1JREkgZmFjaWxpdGllcyBhZGQKLSAgCi0JaW5zbW9kIG9wbDMgaW89KgotICAKLXdoZXJlICJpbyIgaXMgdGhlIEkvTyBhZGRyZXNzIG9mIHRoZSBPUEwzIHN5bnRoZXNpemVyLiBUaGlzIHdpbGwgYmUgc2hvd24KLWluIC9wcm9jL3N5cy9wbnAgYW5kIGlzIG5vcm1hbGx5IDB4Mzg4LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCmluZGV4IGYwNGJhNmIuLjc1ZDk2N2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KQEAgLTgwLDcgKzgwLDcgQEAKICAgICBhZGRpdGlvbmFsIGZlYXR1cmVzLgogCiAyLiAgVGhlIGNvbW1lcmNpYWwgT1NTIGRyaXZlciBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgc2l0ZToKLSAgICBodHRwOi8vd3d3L29wZW5zb3VuZC5jb20uICBUaGlzIG1heSBiZSB1c2VkIGZvciBjYXJkcyB0aGF0CisgICAgaHR0cDovL3d3dy5vcGVuc291bmQuY29tLiAgVGhpcyBtYXkgYmUgdXNlZCBmb3IgY2FyZHMgdGhhdAogICAgIGFyZSB1bnN1cHBvcnRlZCBieSB0aGUga2VybmVsIGRyaXZlciwgb3IgbWF5IGJlIHVzZWQKICAgICBieSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAppbmRleCAyNzA0ODE5Li42YzNjNjI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKQEAgLTIyOSwxNiArMjI5LDI2IEBACiAJaW50IHN0YXR1czsJCS8qIDI4OiAqLwogCXVuc2lnbmVkIGludCBsZW5ndGg7CS8qIDMyOiBMZW5ndGggb2YgZGF0YSAoc3VibWl0dGVkIG9yIGFjdHVhbCkgKi8KIAl1bnNpZ25lZCBpbnQgbGVuX2NhcDsJLyogMzY6IERlbGl2ZXJlZCBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHNldHVwWzhdOwkvKiA0MDogT25seSBmb3IgQ29udHJvbCAnUycgKi8KLX07CQkJCS8qIDQ4IGJ5dGVzIHRvdGFsICovCisJdW5pb24gewkJCS8qIDQwOiAqLworCQl1bnNpZ25lZCBjaGFyIHNldHVwW1NFVFVQX0xFTl07CS8qIE9ubHkgZm9yIENvbnRyb2wgUy10eXBlICovCisJCXN0cnVjdCBpc29fcmVjIHsJCS8qIE9ubHkgZm9yIElTTyAqLworCQkJaW50IGVycm9yX2NvdW50OworCQkJaW50IG51bWRlc2M7CisJCX0gaXNvOworCX0gczsKKwlpbnQgaW50ZXJ2YWw7CQkvKiA0ODogT25seSBmb3IgSW50ZXJydXB0IGFuZCBJU08gKi8KKwlpbnQgc3RhcnRfZnJhbWU7CS8qIDUyOiBGb3IgSVNPICovCisJdW5zaWduZWQgaW50IHhmZXJfZmxhZ3M7IC8qIDU2OiBjb3B5IG9mIFVSQidzIHRyYW5zZmVyX2ZsYWdzICovCisJdW5zaWduZWQgaW50IG5kZXNjOwkvKiA2MDogQWN0dWFsIG51bWJlciBvZiBJU08gZGVzY3JpcHRvcnMgKi8KK307CQkJCS8qIDY0IHRvdGFsIGxlbmd0aCAqLwogCiBUaGVzZSBldmVudHMgY2FuIGJlIHJlY2VpdmVkIGZyb20gYSBjaGFyYWN0ZXIgZGV2aWNlIGJ5IHJlYWRpbmcgd2l0aCByZWFkKDIpLAotd2l0aCBhbiBpb2N0bCgyKSwgb3IgYnkgYWNjZXNzaW5nIHRoZSBidWZmZXIgd2l0aCBtbWFwLgord2l0aCBhbiBpb2N0bCgyKSwgb3IgYnkgYWNjZXNzaW5nIHRoZSBidWZmZXIgd2l0aCBtbWFwLiBIb3dldmVyLCByZWFkKDIpCitvbmx5IHJldHVybnMgZmlyc3QgNDggYnl0ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KIAogVGhlIGNoYXJhY3RlciBkZXZpY2UgaXMgdXN1YWxseSBjYWxsZWQgL2Rldi91c2Jtb25OLCB3aGVyZSBOIGlzIHRoZSBVU0IgYnVzCiBudW1iZXIuIE51bWJlciB6ZXJvICgvZGV2L3VzYm1vbjApIGlzIHNwZWNpYWwgYW5kIG1lYW5zICJhbGwgYnVzZXMiLgotSG93ZXZlciwgdGhpcyBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIE5vdGUgdGhhdCBzcGVjaWZpYyBuYW1pbmcKLXBvbGljeSBpcyBzZXQgYnkgeW91ciBMaW51eCBkaXN0cmlidXRpb24uCitOb3RlIHRoYXQgc3BlY2lmaWMgbmFtaW5nIHBvbGljeSBpcyBzZXQgYnkgeW91ciBMaW51eCBkaXN0cmlidXRpb24uCiAKIElmIHlvdSBjcmVhdGUgL2Rldi91c2Jtb24wIGJ5IGhhbmQsIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG93bmVkIGJ5IHJvb3QKIGFuZCBoYXMgbW9kZSAwNjAwLiBPdGhlcndpc2UsIHVucHJpdmlsZWRnZWQgdXNlcnMgd2lsbCBiZSBhYmxlIHRvIHNub29wCkBAIC0yNzksOSArMjg5LDEwIEBACiBUaGlzIGNhbGwgcmV0dXJucyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCiAKICBNT05fSU9DWF9HRVQsIGRlZmluZWQgYXMgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2dldF9hcmcpCisgTU9OX0lPQ1hfR0VUWCwgZGVmaW5lZCBhcyBfSU9XKE1PTl9JT0NfTUFHSUMsIDEwLCBzdHJ1Y3QgbW9uX2dldF9hcmcpCiAKLVRoaXMgY2FsbCB3YWl0cyBmb3IgZXZlbnRzIHRvIGFycml2ZSBpZiBub25lIHdlcmUgaW4gdGhlIGtlcm5lbCBidWZmZXIsCi10aGVuIHJldHVybnMgdGhlIGZpcnN0IGV2ZW50LiBJdHMgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBmb2xsb3dpbmcKK1RoZXNlIGNhbGxzIHdhaXQgZm9yIGV2ZW50cyB0byBhcnJpdmUgaWYgbm9uZSB3ZXJlIGluIHRoZSBrZXJuZWwgYnVmZmVyLAordGhlbiByZXR1cm4gdGhlIGZpcnN0IGV2ZW50LiBUaGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBmb2xsb3dpbmcKIHN0cnVjdHVyZToKIAogc3RydWN0IG1vbl9nZXRfYXJnIHsKQEAgLTI5NCw2ICszMDUsOCBAQAogcG9pbnRlZCBieSBoZHIgY29udGFpbnMgdGhlIG5leHQgZXZlbnQgc3RydWN0dXJlLCBhbmQgdGhlIGRhdGEgYnVmZmVyIGNvbnRhaW5zCiB0aGUgZGF0YSwgaWYgYW55LiBUaGUgZXZlbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwgYnVmZmVyLgogCitUaGUgTU9OX0lPQ1hfR0VUIGNvcGllcyA0OCBieXRlcywgTU9OX0lPQ1hfR0VUWCBjb3BpZXMgNjQgYnl0ZXMuCisKICBNT05fSU9DWF9NRkVUQ0gsIGRlZmluZWQgYXMgX0lPV1IoTU9OX0lPQ19NQUdJQywgNywgc3RydWN0IG1vbl9tZmV0Y2hfYXJnKQogCiBUaGlzIGlvY3RsIGlzIHByaW1hcmlseSB1c2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGFjY2Vzc2VzIHRoZSBidWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQKaW5kZXggN2I0NTk2YS4uZTAyMDM2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQKQEAgLTE1OCw3ICsxNTgsNyBAQAogMDIwMi80CTIuMDArCWhlYWRlcgkJTWFnaWMgc2lnbmF0dXJlICJIZHJTIgogMDIwNi8yCTIuMDArCXZlcnNpb24JCUJvb3QgcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQKIDAyMDgvNAkyLjAwKwlyZWFsbW9kZV9zd3RjaAlCb290IGxvYWRlciBob29rIChzZWUgYmVsb3cpCi0wMjBDLzIJMi4wMCsJc3RhcnRfc3lzCVRoZSBsb2FkLWxvdyBzZWdtZW50ICgweDEwMDApIChvYnNvbGV0ZSkKKzAyMEMvMgkyLjAwKwlzdGFydF9zeXNfc2VnCVRoZSBsb2FkLWxvdyBzZWdtZW50ICgweDEwMDApIChvYnNvbGV0ZSkKIDAyMEUvMgkyLjAwKwlrZXJuZWxfdmVyc2lvbglQb2ludGVyIHRvIGtlcm5lbCB2ZXJzaW9uIHN0cmluZwogMDIxMC8xCTIuMDArCXR5cGVfb2ZfbG9hZGVyCUJvb3QgbG9hZGVyIGlkZW50aWZpZXIKIDAyMTEvMQkyLjAwKwlsb2FkZmxhZ3MJQm9vdCBwcm90b2NvbCBvcHRpb24gZmxhZ3MKQEAgLTE3MCwxMCArMTcwLDExIEBACiAwMjI0LzIJMi4wMSsJaGVhcF9lbmRfcHRyCUZyZWUgbWVtb3J5IGFmdGVyIHNldHVwIGVuZAogMDIyNi8yCU4vQQlwYWQxCQlVbnVzZWQKIDAyMjgvNAkyLjAyKwljbWRfbGluZV9wdHIJMzItYml0IHBvaW50ZXIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKLTAyMkMvNAkyLjAzKwlpbml0cmRfYWRkcl9tYXgJSGlnaGVzdCBsZWdhbCBpbml0cmQgYWRkcmVzcworMDIyQy80CTIuMDMrCXJhbWRpc2tfbWF4CUhpZ2hlc3QgbGVnYWwgaW5pdHJkIGFkZHJlc3MKIDAyMzAvNAkyLjA1KwlrZXJuZWxfYWxpZ25tZW50IFBoeXNpY2FsIGFkZHIgYWxpZ25tZW50IHJlcXVpcmVkIGZvciBrZXJuZWwKIDAyMzQvMQkyLjA1KwlyZWxvY2F0YWJsZV9rZXJuZWwgV2hldGhlciBrZXJuZWwgaXMgcmVsb2NhdGFibGUgb3Igbm90Ci0wMjM1LzMJTi9BCXBhZDIJCVVudXNlZAorMDIzNS8xCU4vQQlwYWQyCQlVbnVzZWQKKzAyMzYvMglOL0EJcGFkMwkJVW51c2VkCiAwMjM4LzQJMi4wNisJY21kbGluZV9zaXplCU1heGltdW0gc2l6ZSBvZiB0aGUga2VybmVsIGNvbW1hbmQgbGluZQogMDIzQy80CTIuMDcrCWhhcmR3YXJlX3N1YmFyY2ggSGFyZHdhcmUgc3ViYXJjaGl0ZWN0dXJlCiAwMjQwLzgJMi4wNysJaGFyZHdhcmVfc3ViYXJjaF9kYXRhIFN1YmFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkYXRhCkBAIC0yOTksMTQgKzMwMCwxNCBAQAogICBlLmcuIDB4MDIwNCBmb3IgdmVyc2lvbiAyLjA0LCBhbmQgMHgwYTExIGZvciBhIGh5cG90aGV0aWNhbCB2ZXJzaW9uCiAgIDEwLjE3LgogCi1GaWVsZCBuYW1lOglyZWFkbW9kZV9zd3RjaAorRmllbGQgbmFtZToJcmVhbG1vZGVfc3d0Y2gKIFR5cGU6CQltb2RpZnkgKG9wdGlvbmFsKQogT2Zmc2V0L3NpemU6CTB4MjA4LzQKIFByb3RvY29sOgkyLjAwKwogCiAgIEJvb3QgbG9hZGVyIGhvb2sgKHNlZSBBRFZBTkNFRCBCT09UIExPQURFUiBIT09LUyBiZWxvdy4pCiAKLUZpZWxkIG5hbWU6CXN0YXJ0X3N5cworRmllbGQgbmFtZToJc3RhcnRfc3lzX3NlZwogVHlwZToJCXJlYWQKIE9mZnNldC9zaXplOgkweDIwYy8yCiBQcm90b2NvbDoJMi4wMCsKQEAgLTQ2OCw3ICs0NjksNyBAQAogICB6ZXJvLCB0aGUga2VybmVsIHdpbGwgYXNzdW1lIHRoYXQgeW91ciBib290IGxvYWRlciBkb2VzIG5vdCBzdXBwb3J0CiAgIHRoZSAyLjAyKyBwcm90b2NvbC4KIAotRmllbGQgbmFtZToJaW5pdHJkX2FkZHJfbWF4CitGaWVsZCBuYW1lOglyYW1kaXNrX21heAogVHlwZToJCXJlYWQKIE9mZnNldC9zaXplOgkweDIyYy80CiBQcm90b2NvbDoJMi4wMysKQEAgLTU0Miw3ICs1NDMsMTAgQEAKIAogICBUaGUgcGF5bG9hZCBtYXkgYmUgY29tcHJlc3NlZC4gVGhlIGZvcm1hdCBvZiBib3RoIHRoZSBjb21wcmVzc2VkIGFuZAogICB1bmNvbXByZXNzZWQgZGF0YSBzaG91bGQgYmUgZGV0ZXJtaW5lZCB1c2luZyB0aGUgc3RhbmRhcmQgbWFnaWMKLSAgbnVtYmVycy4gQ3VycmVudGx5IG9ubHkgZ3ppcCBjb21wcmVzc2VkIEVMRiBpcyB1c2VkLgorICBudW1iZXJzLiAgVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0cyBhcmUgZ3ppcAorICAobWFnaWMgbnVtYmVycyAxRiA4QiBvciAxRiA5RSksIGJ6aXAyIChtYWdpYyBudW1iZXIgNDIgNUEpIGFuZCBMWk1BCisgIChtYWdpYyBudW1iZXIgNUQgMDApLiAgVGhlIHVuY29tcHJlc3NlZCBwYXlsb2FkIGlzIGN1cnJlbnRseSBhbHdheXMgRUxGCisgIChtYWdpYyBudW1iZXIgN0YgNDUgNEMgNDYpLgogICAKIEZpZWxkIG5hbWU6CXBheWxvYWRfbGVuZ3RoCiBUeXBlOgkJcmVhZApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1ZDQ2MGM5Li4wMTI0M2NlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNTAyLDYgKzUwMiwxMyBAQAogTToJcnB1cmRpZUBycHN5cy5uZXQKIFM6CU1haW50YWluZWQKIAorQVJNL0NPUlRJTkEgU1lTVEVNUyBHRU1JTkkgQVJNIEFSQ0hJVEVDVFVSRQorUDoJUGF1bGl1cyBaYWxlY2thcworTToJcGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1Q6CWdpdCBnaXRvcmlvdXMub3JnL2xpbnV4LWdlbWluaS9tYWlubGluZS5naXQKK1M6CU1haW50YWluZWQKKwogQVJNL0VaWCBTTUFSVFBIT05FUyAoQTc4MCwgQTkxMCwgQTEyMDAsIEU2ODAsIFJPS1IgRTIgYW5kIFJPS1IgRTYpCiBQOglEYW5pZWwgUmliZWlybwogTToJZHJ3eXJtQGdtYWlsLmNvbQpAQCAtNTEzLDYgKzUyMCwxMiBAQAogVzoJaHR0cDovL3d3dy5vcGVuZXp4Lm9yZy8KIFM6CU1haW50YWluZWQKIAorQVJNL0ZBUkFEQVkgRkE1MjYgUE9SVAorUDoJUGF1bGl1cyBaYWxlY2thcworTToJcGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKwogQVJNL0ZSRUVTQ0FMRSBJTVggLyBNWEMgQVJNIEFSQ0hJVEVDVFVSRQogUDoJU2FzY2hhIEhhdWVyCiBNOglrZXJuZWxAcGVuZ3V0cm9uaXguZGUKQEAgLTYyMiw3ICs2MzUsNyBAQAogTToJZGlya0BvcGZlci1vbmxpbmUuZGUKIFM6CU1haW50YWluZWQKIAotQVJNL1BBTE1UWCBTVVBQT1JUCitBUk0vUEFMTVRYLFBBTE1UNSxQQUxNTEQgU1VQUE9SVAogUDoJTWFyZWsgVmFzdXQKIE06CW1hcmVrLnZhc3V0QGdtYWlsLmNvbQogVzoJaHR0cDovL2hhY2tuZGV2LmNvbQpAQCAtNzY1LDYgKzc3OCwxNCBAQAogTDoJYXRoOWstZGV2ZWxAbGlzdHMuYXRoOWsub3JnCiBTOglTdXBwb3J0ZWQKIAorQVRIRVJPUyBBUjkxNzAgV0lSRUxFU1MgRFJJVkVSCitQOglDaHJpc3RpYW4gTGFtcGFydGVyCitNOgljaHVua2VleUB3ZWIuZGUKK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hcjkxNzAKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC8KKwogQVRJX1JFTU9URTIgRFJJVkVSCiBQOglWaWxsZSBTeXJqYWxhCiBNOglzeXJqYWxhQHNjaS5maQpAQCAtMTAxMSw2ICsxMDMyLDggQEAKIFM6CVN1cHBvcnRlZAogCiBCUk9BRENPTSBURzMgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVIKK1A6CU1hdHQgQ2FybHNvbgorTToJbWNhcmxzb25AYnJvYWRjb20uY29tCiBQOglNaWNoYWVsIENoYW4KIE06CW1jaGFuQGJyb2FkY29tLmNvbQogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMTI2OSw2ICsxMjkyLDEyIEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2hlcmJlcnQvY3J5cHRvLTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorQ1JZUFRPR1JBUEhJQyBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUgorUDoJTmVpbCBIb3JtYW4KK006CW5ob3JtYW5AdHV4ZHJpdmVyLmNvbQorTDoJbGludXgtY3J5cHRvQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBDUzU1MzUgQXVkaW8gQUxTQSBkcml2ZXIKIFA6CUpheWEgS3VtYXIKIE06CWpheWFrdW1hci5hbHNhQGdtYWlsLmNvbQpAQCAtMjIxNiw2ICsyMjQ1LDExIEBACiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK0lOVEVHUklUWSBNRUFTVVJFTUVOVCBBUkNISVRFQ1RVUkUgKElNQSkKK1A6CU1pbWkgWm9oYXIKK006CXpvaGFyQHVzLmlibS5jb20KK1M6CVN1cHBvcnRlZAorCiBJTVMgVFdJTlRVUkJPIEZSQU1FQlVGRkVSIERSSVZFUgogTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU9ycGhhbgpAQCAtMjgzMiw3ICsyODY2LDcgQEAKIE06CXppcHBlbEBsaW51eC1tNjhrLm9yZwogTDoJbGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC1tNjhrLm9yZy8KLVc6CWh0dHA6Ly9saW51eC1tNjhrLWN2cy51YmIuY2EvCitUOglnaXQgZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dlZXJ0L2xpbnV4LW02OGsuZ2l0CiBTOglNYWludGFpbmVkCiAKIE02OEsgT04gQVBQTEUgTUFDSU5UT1NICkBAIC0zMjg5LDYgKzMzMjMsMTYgQEAKIFc6CWh0dHA6Ly93d3cubm9uZ251Lm9yZy9vcmlub2NvLwogUzoJTWFpbnRhaW5lZAogCitPU0QgTElCUkFSWQorUDoJQm9heiBIYXJyb3NoCitNOgliaGFycm9zaEBwYW5hc2FzLmNvbQorUDoJQmVubnkgSGFsZXZ5CitNOgliaGFsZXZ5QHBhbmFzYXMuY29tCitMOglvc2QtZGV2QG9wZW4tb3NkLm9yZworVzoJaHR0cDovL29wZW4tb3NkLm9yZworVDoJZ2l0Oi8vZ2l0Lm9wZW4tb3NkLm9yZy9vcGVuLW9zZC5naXQKK1M6CU1haW50YWluZWQKKwogUDU0IFdJUkVMRVNTIERSSVZFUgogUDoJTWljaGFlbCBXdQogTToJZmxhbWluZ2ljZUBzb3VybWlsay5uZXQKQEAgLTM1MzksNiArMzU4MywyMiBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCitQWEExNjggU1VQUE9SVAorUDoJRXJpYyBNaWFvCitNOgllcmljLm1pYW9AbWFydmVsbC5jb20KK1A6CUphc29uIENoYWdhcworTToJamFzb24uY2hhZ2FzQG1hcnZlbGwuY29tCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3ljbWlhby9weGEtbGludXgtMi42LmdpdAorUzoJU3VwcG9ydGVkCisKK1BYQTkxMCBTVVBQT1JUCitQOglFcmljIE1pYW8KK006CWVyaWMubWlhb0BtYXJ2ZWxsLmNvbQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC95Y21pYW8vcHhhLWxpbnV4LTIuNi5naXQKK1M6CVN1cHBvcnRlZAorCiBQWEEgTU1DSSBEUklWRVIKIFM6CU9ycGhhbgogCkBAIC0zNTg5LDcgKzM2NDksNyBAQAogUkFMSU5LIFJUMlgwMCBXSVJFTEVTUyBMQU4gRFJJVkVSCiBQOglydDJ4MDAgcHJvamVjdAogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1MOglydDI0MDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOgl1c2Vyc0BydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbQogVzoJaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tLwogUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9pdmQvcnQyeDAwLmdpdApAQCAtMzYzNSw2ICszNjk1LDEyIEBACiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK1JEUyAtIFJFTElBQkxFIERBVEFHUkFNIFNPQ0tFVFMKK1A6CUFuZHkgR3JvdmVyCitNOglhbmR5Lmdyb3ZlckBvcmFjbGUuY29tCitMOglyZHMtZGV2ZWxAb3NzLm9yYWNsZS5jb20KK1M6CVN1cHBvcnRlZAorCiBSRUFELUNPUFkgVVBEQVRFIChSQ1UpCiBQOglEaXBhbmthciBTYXJtYQogTToJZGlwYW5rYXJAaW4uaWJtLmNvbQpAQCAtMzcyNiw2ICszNzkyLDE1IEBACiBXOglodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGludXgzOTAvCiBTOglTdXBwb3J0ZWQKIAorUzM5MCBaQ1JZUFQgRFJJVkVSCitQOglGZWxpeCBCZWNrCitNOglmZWxpeC5iZWNrQGRlLmlibS5jb20KK1A6CVJhbHBoIFd1ZXJ0aG5lcgorTToJcmFscGgud3VlcnRobmVyQGRlLmlibS5jb20KK006CWxpbnV4MzkwQGRlLmlibS5jb20KK0w6CWxpbnV4LXMzOTBAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKKwogUzM5MCBaRkNQIERSSVZFUgogUDoJQ2hyaXN0b2YgU2NobWl0dAogTToJY2hyaXN0b2Yuc2NobWl0dEBkZS5pYm0uY29tCkBAIC0zODQ0LDYgKzM5MTksNyBAQAogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZyAoc3VnZ2VzdGVkIENjOikKIFQ6CWdpdCBrZXJuZWwub3JnOnB1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAorVzoJaHR0cDovL3NlY3VyaXR5Lndpa2kua2VybmVsLm9yZy8KIFM6CVN1cHBvcnRlZAogCiBTRUNVUklUWSBDT05UQUNUCkBAIC00Mjg1LDYgKzQzNjEsMTkgQEAKIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdGxhbi8KIFM6CU1haW50YWluZWQKIAorVE9NT1lPIFNFQ1VSSVRZIE1PRFVMRQorUDoJS2VudGFybyBUYWtlZGEKK006CXRha2VkYWtuQG50dGRhdGEuY28uanAKK1A6CVRldHN1byBIYW5kYQorTToJcGVuZ3Vpbi1rZXJuZWxASS1sb3ZlLlNBS1VSQS5uZS5qcAorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyAoa2VybmVsIGlzc3VlcykKK0w6CXRvbW95by11c2Vycy1lbkBsaXN0cy5zb3VyY2Vmb3JnZS5qcCAoc3Vic2NyaWJlcnMtb25seSwgZm9yIGRldmVsb3BlcnMgYW5kIHVzZXJzIGluIEVuZ2xpc2gpCitMOgl0b21veW8tZGV2QGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBpbiBKYXBhbmVzZSkKK0w6CXRvbW95by11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5qcCAoc3Vic2NyaWJlcnMtb25seSwgZm9yIHVzZXJzIGluIEphcGFuZXNlKQorVzoJaHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC8KK1Q6CXF1aWx0IGh0dHA6Ly9zdm4uc291cmNlZm9yZ2UuanAvc3Zucm9vdC90b21veW8vdHJ1bmsvMi4yLngvdG9tb3lvLWxzbS9wYXRjaGVzLworUzoJTWFpbnRhaW5lZAorCiBUT1NISUJBIEFDUEkgRVhUUkFTIERSSVZFUgogUDoJSm9obiBCZWxtb250ZQogTToJdG9zaGliYV9hY3BpQG1lbWViZWFtLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxYWIzZWJmLi5jNjMwN2I2IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNTMzLDggKzUzMyw5IEBACiBlbmRpZgogCiAjIEZvcmNlIGdjYyB0byBiZWhhdmUgY29ycmVjdCBldmVuIGZvciBidWdneSBkaXN0cmlidXRpb25zCi0jIEFyY2ggTWFrZWZpbGVzIG1heSBvdmVycmlkZSB0aGlzIHNldHRpbmcKK2lmbmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKIEtCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCitlbmRpZgogCiBpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgogS0JVSUxEX0NGTEFHUwkrPSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZm5vLW9wdGltaXplLXNpYmxpbmctY2FsbHMKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGExMDU3YzIuLjM2NDFlYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNiArNjIsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogT19OT05CTE9DSyBjbGFzaGVzIHdpdGggdGhlIGJpdHMgdXNlZCBmb3Igc29ja2V0IHR5cGVzLiAgVGhlcmVmb3JlIHdlCiAgKiBoYXZlIHRvIGRlZmluZSBTT0NLX05PTkJMT0NLIHRvIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCmluZGV4IGRlMzVjZDQuLmNjZDJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FMUEhBX1NUQVRGU19ICiAjZGVmaW5lIF9BTFBIQV9TVEFURlNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQWxwaGEgaXMgdGhlIG9ubHkgNjQtYml0IHBsYXRmb3JtIHdpdGggMzItYml0IHN0YXRmcy4gQW5kIGRvZXNuJ3QKICAgIGV2ZW4gc2VlbSB0byBpbXBsZW1lbnQgc3RhdGZzNjQgKi8KICNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2OGU3MDg5Li40ZDY4MmIxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FMUEhBX1NXQUJfSAogI2RlZmluZSBfQUxQSEFfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCmluZGV4IGU0YTU0YjYxNS4uYjQ1ZDkxMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCkBAIC05MDMsOCArOTAzLDkgQEAKIAlzdHEJJDI2LCAwKCRzcCkKIAkucHJvbG9ndWUgMAogCisJbW92CSQzMSwgJDE3CiAJbGRhCSQxNiwgOCgkc3ApCi0JanNyCSQyNiwgZG9fcGlwZQorCWpzcgkkMjYsIGRvX3BpcGVfZmxhZ3MKIAogCWxkcQkkMjYsIDAoJHNwKQogCWJuZQkkMCwgMWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKaW5kZXggNzAzNzMxYS4uY2M3ODM0NiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkJY3B1ID0gKGNwdSA8IChOUl9DUFVTLTEpID8gY3B1ICsgMSA6IDApOwogCWxhc3RfY3B1ID0gY3B1OwogCi0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBjcHVtYXNrX29mKGNwdSkpOwogCXJldHVybiAwOwogfQpAQCAtOTAsNyArOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaXJxKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2lycV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpcnEsIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2lycV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVjJXMiLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCBlMTZhZWI2Li42N2MxOWY4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtNjQsNyArNjQsNyBAQAogCQlzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdChyZWdzKTsKIAkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlpZiAoY3B1ICE9IGJvb3RfY3B1aWQpIHsKLQkJICAgICAgICBrc3RhdF9jcHUoY3B1KS5pcnFzW1JUQ19JUlFdKys7CisJCSAgICAgICAga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KFJUQ19JUlEsIGlycV90b19kZXNjKFJUQ19JUlEpKTsKIAkJfSBlbHNlIHsKIAkJCWhhbmRsZV9pcnEoUlRDX0lSUSk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwppbmRleCBhZTQxZjA5Li40MmVlMDU5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2h3cnBiLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi1leHRlcm4gaW50IGRvX3BpcGUoaW50ICopOwotCiAvKgogICogQnJrIG5lZWRzIHRvIHJldHVybiBhbiBlcnJvci4gIFN0aWxsIHN1cHBvcnQgTGludXgncyBicmsoMCkgcXVlcnkgaWRpb20sCiAgKiB3aGljaCBPU0YgcHJvZ3JhbXMganVzdCBzaG91bGRuJ3QgYmUgZG9pbmcuICBXZSdyZSBzdGlsbCBub3QgcXVpdGUKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vaW5pdC5jIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKaW5kZXggNWQ3YTE2ZS4uYWY3MWQzOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9pbml0LmMKKysrIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKQEAgLTE4OSw5ICsxODksMjEgQEAKIAogCWlmIChhbHBoYV91c2luZ19zcm0pIHsKIAkJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgY29uc29sZV9yZW1hcF92bTsKLQkJdW5zaWduZWQgbG9uZyB2YWRkciA9IFZNQUxMT0NfU1RBUlQ7CisJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOworCQl1bnNpZ25lZCBsb25nIHZhZGRyOwogCQl1bnNpZ25lZCBsb25nIGksIGo7CiAKKwkJLyogY2FsY3VsYXRlIG5lZWRlZCBzaXplICovCisJCWZvciAoaSA9IDA7IGkgPCBjcmItPm1hcF9lbnRyaWVzOyArK2kpCisJCQlucl9wYWdlcyArPSBjcmItPm1hcFtpXS5jb3VudDsKKworCQkvKiByZWdpc3RlciB0aGUgdm0gYXJlYSAqLworCQljb25zb2xlX3JlbWFwX3ZtLmZsYWdzID0gVk1fQUxMT0M7CisJCWNvbnNvbGVfcmVtYXBfdm0uc2l6ZSA9IG5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7CisJCXZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoJmNvbnNvbGVfcmVtYXBfdm0sIFBBR0VfU0laRSk7CisKKwkJdmFkZHIgPSAodW5zaWduZWQgbG9uZyljb25zb2xlX3JlbWFwX3ZtLmFkZHI7CisKIAkJLyogU2V0IHVwIHRoZSB0aGlyZCBsZXZlbCBQVEVzIGFuZCB1cGRhdGUgdGhlIHZpcnR1YWwKIAkJICAgYWRkcmVzc2VzIG9mIHRoZSBDUkIgZW50cmllcy4gICovCiAJCWZvciAoaSA9IDA7IGkgPCBjcmItPm1hcF9lbnRyaWVzOyArK2kpIHsKQEAgLTIxMywxMiArMjI1LDYgQEAKIAkJCQl2YWRkciArPSBQQUdFX1NJWkU7CiAJCQl9CiAJCX0KLQotCQkvKiBMZXQgdm1hbGxvYyBrbm93IHRoYXQgd2UndmUgYWxsb2NhdGVkIHNvbWUgc3BhY2UuICAqLwotCQljb25zb2xlX3JlbWFwX3ZtLmZsYWdzID0gVk1fQUxMT0M7Ci0JCWNvbnNvbGVfcmVtYXBfdm0uYWRkciA9ICh2b2lkICopIFZNQUxMT0NfU1RBUlQ7Ci0JCWNvbnNvbGVfcmVtYXBfdm0uc2l6ZSA9IHZhZGRyIC0gVk1BTExPQ19TVEFSVDsKLQkJdm1saXN0ID0gJmNvbnNvbGVfcmVtYXBfdm07CiAJfQogCiAJY2FsbGJhY2tfaW5pdF9kb25lID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGRiZmRmODcuLmUwMmI4OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMjQxLDYgKzI0MSw3IEBACiBjb25maWcgQVJDSF9BVDkxCiAJYm9vbCAiQXRtZWwgQVQ5MSIKIAlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEhBVkVfQ0xLCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEF0bWVsIEFUOTFSTTkyMDAsCkBAIC0yNzUsNiArMjc2LDE0IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBDaXJydXMgRVA5M3h4IHNlcmllcyBvZiBDUFVzLgogCitjb25maWcgQVJDSF9HRU1JTkkKKwlib29sICJDb3J0aW5hIFN5c3RlbXMgR2VtaW5pIgorCXNlbGVjdCBDUFVfRkE1MjYKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIENvcnRpbmEgU3lzdGVtcyBHZW1pbmkgZmFtaWx5IFNvQ3MKKwogY29uZmlnIEFSQ0hfRk9PVEJSSURHRQogCWJvb2wgIkZvb3RCcmlkZ2UiCiAJc2VsZWN0IENQVV9TQTExMApAQCAtNDc3LDEyICs0ODYsMjkgQEAKIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IFRJQ0tfT05FU0hPVAorCXNlbGVjdCBQTEFUX1BYQQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsL01hcnZlbGwncyBQWEEyeHgvUFhBM3h4IHByb2Nlc3NvciBsaW5lLgogCitjb25maWcgQVJDSF9NTVAKKwlib29sICJNYXJ2ZWxsIFBYQTE2OC85MTAiCisJZGVwZW5kcyBvbiBNTVUKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgVElDS19PTkVTSE9UCisJc2VsZWN0IFBMQVRfUFhBCisJaGVscAorCSAgU3VwcG9ydCBmb3IgTWFydmVsbCdzIFBYQTE2OC85MTAgcHJvY2Vzc29yIGxpbmUuCisKIGNvbmZpZyBBUkNIX1JQQwogCWJvb2wgIlJpc2NQQyIKIAlzZWxlY3QgQVJDSF9BQ09STgpAQCAtNTk4LDYgKzYyNCw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1nZW1pbmkvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWlvcDMyeC9LY29uZmlnIgpAQCAtNjE3LDYgKzY0NSw5IEBACiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtcHhhL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL3BsYXQtcHhhL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1tbXAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIgogCkBAIC02ODYsMTIgKzcxNywxNSBAQAogY29uZmlnIFBMQVRfT1JJT04KIAlib29sCiAKK2NvbmZpZyBQTEFUX1BYQQorCWJvb2wKKwogc291cmNlIGFyY2gvYXJtL21tL0tjb25maWcKIAogY29uZmlnIElXTU1YVAogCWJvb2wgIkVuYWJsZSBpV01NWHQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMKLQlkZWZhdWx0IHkgaWYgUFhBMjd4IHx8IFBYQTN4eAorCWRlcGVuZHMgb24gQ1BVX1hTQ0FMRSB8fCBDUFVfWFNDMyB8fCBDUFVfTU9IQVdLCisJZGVmYXVsdCB5IGlmIFBYQTI3eCB8fCBQWEEzeHggfHwgQVJDSF9NTVAKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgaVdNTVh0IGNvbnRleHQgc3dpdGNoaW5nIGF0IHJ1biB0aW1lIGlmCiAJICBydW5uaW5nIG9uIGEgQ1BVIHRoYXQgc3VwcG9ydHMgaXQuCkBAIC05MTUsNiArOTQ5LDIzIEBACiAJZGVmYXVsdCAiMiIKIAlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKIAorY29uZmlnIEhJR0hNRU0KKwlib29sICJIaWdoIE1lbW9yeSBTdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoZSBhZGRyZXNzIHNwYWNlIG9mIEFSTSBwcm9jZXNzb3JzIGlzIG9ubHkgNCBHaWdhYnl0ZXMgbGFyZ2UKKwkgIGFuZCBpdCBoYXMgdG8gYWNjb21tb2RhdGUgdXNlciBhZGRyZXNzIHNwYWNlLCBrZXJuZWwgYWRkcmVzcworCSAgc3BhY2UgYXMgd2VsbCBhcyBzb21lIG1lbW9yeSBtYXBwZWQgSU8uIFRoYXQgbWVhbnMgdGhhdCwgaWYgeW91CisJICBoYXZlIGEgbGFyZ2UgYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSBhbmQvb3IgSU8sIG5vdCBhbGwgb2YgdGhlCisJICBtZW1vcnkgY2FuIGJlICJwZXJtYW5lbnRseSBtYXBwZWQiIGJ5IHRoZSBrZXJuZWwuIFRoZSBwaHlzaWNhbAorCSAgbWVtb3J5IHRoYXQgaXMgbm90IHBlcm1hbmVudGx5IG1hcHBlZCBpcyBjYWxsZWQgImhpZ2ggbWVtb3J5Ii4KKworCSAgRGVwZW5kaW5nIG9uIHRoZSBzZWxlY3RlZCBrZXJuZWwvdXNlciBtZW1vcnkgc3BsaXQsIG1pbmltdW0KKwkgIHZtYWxsb2Mgc3BhY2UgYW5kIGFjdHVhbCBhbW91bnQgb2YgUkFNLCB5b3UgbWF5IG5vdCBuZWVkIHRoaXMKKwkgIG9wdGlvbiB3aGljaCBzaG91bGQgcmVzdWx0IGluIGEgc2xpZ2h0bHkgZmFzdGVyIGtlcm5lbC4KKworCSAgSWYgdW5zdXJlLCBzYXkgbi4KKwogc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgTEVEUwpAQCAtMTA5Miw3ICsxMTQzLDcgQEAKIAogY29uZmlnIENQVV9GUkVRX1NBMTEwMAogCWJvb2wKLQlkZXBlbmRzIG9uIENQVV9GUkVRICYmIChTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwIHx8IFNBMTEwMF9IMzgwMCB8fCBTQTExMDBfTEFSVCB8fCBTQTExMDBfUExFQiB8fCBTQTExMDBfQkFER0U0IHx8IFNBMTEwMF9IQUNLS0lUKQorCWRlcGVuZHMgb24gQ1BVX0ZSRVEgJiYgKFNBMTEwMF9IMzEwMCB8fCBTQTExMDBfSDM2MDAgfHwgU0ExMTAwX0xBUlQgfHwgU0ExMTAwX1BMRUIgfHwgU0ExMTAwX0JBREdFNCB8fCBTQTExMDBfSEFDS0tJVCkKIAlkZWZhdWx0IHkKIAogY29uZmlnIENQVV9GUkVRX1NBMTExMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKaW5kZXggMTkyZWUwMS4uYTcxZmQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCkBAIC0yLDE4ICsyLDI5IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKLSMgUk1LIHdhbnRzIGFybSBrZXJuZWxzIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMgc28gaGFyZHdpcmUgdGhpcyB0byB5LgorIyBSTUsgd2FudHMgYXJtIGtlcm5lbHMgY29tcGlsZWQgd2l0aCBmcmFtZSBwb2ludGVycyBvciBzdGFjayB1bndpbmRpbmcuCiAjIElmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBhbmQgYXJlIHdpbGxpbmcgdG8gbGl2ZSB3aXRob3V0IHN0YWNrCiAjIHRyYWNlcywgeW91IGNhbiBnZXQgYSBzbGlnaHRseSBzbWFsbGVyIGtlcm5lbCBieSBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvCiAjIG4sIGJ1dCB0aGVuIFJNSyB3aWxsIGhhdmUgdG8ga2lsbCB5b3UgOykuCiBjb25maWcgRlJBTUVfUE9JTlRFUgogCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZhdWx0IHkgaWYgIUFSTV9VTldJTkQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IE4gaGVyZSwgdGhlIHJlc3VsdGluZyBrZXJuZWwgd2lsbCBiZSBzbGlnaHRseSBzbWFsbGVyIGFuZAotCSAgZmFzdGVyLiBIb3dldmVyLCB3aGVuIGEgcHJvYmxlbSBvY2N1cnMgd2l0aCB0aGUga2VybmVsLCB0aGUKLQkgIGluZm9ybWF0aW9uIHRoYXQgaXMgcmVwb3J0ZWQgaXMgc2V2ZXJlbHkgbGltaXRlZC4gTW9zdCBwZW9wbGUKLQkgIHNob3VsZCBzYXkgWSBoZXJlLgorCSAgZmFzdGVyLiBIb3dldmVyLCBpZiBuZWl0aGVyIEZSQU1FX1BPSU5URVIgbm9yIEFSTV9VTldJTkQgYXJlIGVuYWJsZWQsCisJICB3aGVuIGEgcHJvYmxlbSBvY2N1cnMgd2l0aCB0aGUga2VybmVsLCB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcworCSAgcmVwb3J0ZWQgaXMgc2V2ZXJlbHkgbGltaXRlZC4KKworY29uZmlnIEFSTV9VTldJTkQKKwlib29sICJFbmFibGUgc3RhY2sgdW53aW5kaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBRUFCSSAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN0YWNrIHVud2luZGluZyBzdXBwb3J0IGluIHRoZSBrZXJuZWwKKwkgIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGUKKwkgIGNvbXBpbGVyLiBUaGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBpcyBzbGlnaHRseSBiaWdnZXIgYnV0CisJICB0aGUgcGVyZm9ybWFuY2UgaXMgbm90IGFmZmVjdGVkLiBDdXJyZW50bHksIHRoaXMgZmVhdHVyZQorCSAgb25seSB3b3JrcyB3aXRoIEVBQkkgY29tcGlsZXJzLiBJZiB1bnN1cmUgc2F5IFkuCiAKIGNvbmZpZyBERUJVR19VU0VSCiAJYm9vbCAiVmVyYm9zZSB1c2VyIGZhdWx0IG1lc3NhZ2VzIgpAQCAtNjYsNyArNzcsNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgZGVidWcgcHJpbnQgcm91dGluZXMgdG8gZGlyZWN0IHRoZWlyCiAJICBvdXRwdXQgdG8gdGhlIEVtYmVkZGVkSUNFIG1hY3JvY2VsbCdzIERDQyBjaGFubmVsIHVzaW5nCiAJICBjby1wcm9jZXNzb3IgMTQuIFRoaXMgaXMga25vd24gdG8gd29yayBvbiB0aGUgQVJNOSBzdHlsZSBJQ0UKLQkgIGNoYW5uZWwuCisJICBjaGFubmVsIGFuZCBvbiB0aGUgWFNjYWxlIHdpdGggdGhlIFBFRURJLgogCiAJICBJdCBkb2VzIGluY2x1ZGUgYSB0aW1lb3V0IHRvIGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gZG9lcyBub3QKIAkgIHRvdGFsbHkgZnJlZXplIHdoZW4gdGhlcmUgaXMgbm90aGluZyBjb25uZWN0ZWQgdG8gcmVhZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMjRlMGYwMS4uZTg0NzI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTcyLDYgKzcyLDcgQEAKIHR1bmUtJChDT05GSUdfQ1BVX0FSTTkyMlQpCTo9LW10dW5lPWFybTl0ZG1pCiB0dW5lLSQoQ09ORklHX0NQVV9BUk05MjVUKQk6PS1tdHVuZT1hcm05dGRtaQogdHVuZS0kKENPTkZJR19DUFVfQVJNOTI2VCkJOj0tbXR1bmU9YXJtOXRkbWkKK3R1bmUtJChDT05GSUdfQ1BVX0ZBNTI2KQk6PS1tdHVuZT1hcm05dGRtaQogdHVuZS0kKENPTkZJR19DUFVfU0ExMTApCTo9LW10dW5lPXN0cm9uZ2FybTExMAogdHVuZS0kKENPTkZJR19DUFVfU0ExMTAwKQk6PS1tdHVuZT1zdHJvbmdhcm0xMTAwCiB0dW5lLSQoQ09ORklHX0NQVV9YU0NBTEUpCTo9JChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9eHNjYWxlLC1tdHVuZT1zdHJvbmdhcm0xMTApIC1XYSwtbWNwdT14c2NhbGUKQEAgLTg1LDYgKzg2LDEwIEBACiBDRkxBR1NfQUJJCTo9JChjYWxsIGNjLW9wdGlvbiwtbWFwY3MtMzIsLW1hYmk9YXBjcy1nbnUpICQoY2FsbCBjYy1vcHRpb24sLW1uby10aHVtYi1pbnRlcndvcmssKQogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfQVJNX1VOV0lORCkseSkKK0NGTEFHU19BQkkJKz0tZnVud2luZC10YWJsZXMKK2VuZGlmCisKICMgTmVlZCAtVWFybSBmb3IgZ2NjIDwgMy54CiBLQlVJTERfQ0ZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKGFyY2gteSkgJCh0dW5lLXkpICQoY2FsbCBjYy1vcHRpb24sLW1zaG9ydC1sb2FkLWJ5dGVzLCQoY2FsbCBjYy1vcHRpb24sLW1hbGlnbm1lbnQtdHJhcHMsKSkgLW1zb2Z0LWZsb2F0IC1VYXJtCiBLQlVJTERfQUZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKGFyY2gteSkgJCh0dW5lLXkpIC1tc29mdC1mbG9hdApAQCAtMTA1LDggKzExMCwxMSBAQAogIHRleHRvZnMtJChDT05GSUdfU0ExMTExKQkgICA6PSAweDAwMjA4MDAwCiBlbmRpZgogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9QWEEpCSAgIDo9IHB4YQorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NTVApCSAgIDo9IG1tcAorICAgIHBsYXQtJChDT05GSUdfUExBVF9QWEEpCSAgIDo9IHB4YQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9MNzIwMCkJICAgOj0gbDcyMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUikgOj0gaW50ZWdyYXRvcgorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9HRU1JTkkpICAgICA6PSBnZW1pbmkKICB0ZXh0b2ZzLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gMHgwMDAyODAwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9DTFBTNzExWCkgICA6PSBjbHBzNzExeAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JT1AzMlgpCSAgIDo9IGlvcDMyeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggNzdkNjE0MjMuLmIzNzFmYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMjcsNiArMjcsMTIgQEAKIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiAJCW1jcglwMTQsIDAsIFxjaCwgYzAsIGM1LCAwCiAJCS5lbmRtCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKQorCQkubWFjcm8JbG9hZHNwLCByYgorCQkuZW5kbQorCQkubWFjcm8Jd3JpdGViLCBjaCwgcmIKKwkJbWNyCXAxNCwgMCwgXGNoLCBjOCwgYzAsIDAKKwkJLmVuZG0KICNlbHNlCiAJCS5tYWNybwlsb2Fkc3AsIHJiCiAJCS5lbmRtCkBAIC00NTksNiArNDY1LDIwIEBACiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJQCBJU0IKIAkJbW92CXBjLCByMTIKIAorX19mYTUyNl9jYWNoZV9vbjoKKwkJbW92CXIxMiwgbHIKKwkJYmwJX19zZXR1cF9tbXUKKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCUAgSW52YWxpZGF0ZSB3aG9sZSBjYWNoZQorCQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCQltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCUAgZmx1c2ggVVRMQgorCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgcmVhZCBjb250cm9sIHJlZworCQlvcnIJcjAsIHIwLCAjMHgxMDAwCQlAIEktY2FjaGUgZW5hYmxlCisJCWJsCV9fY29tbW9uX21tdV9jYWNoZV9vbgorCQltb3YJcjAsICMwCisJCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJQCBmbHVzaCBVVExCCisJCW1vdglwYywgcjEyCisKIF9fYXJtNl9tbXVfY2FjaGVfb246CiAJCW1vdglyMTIsIGxyCiAJCWJsCV9fc2V0dXBfbW11CkBAIC02MzAsMTIgKzY1MCwzMCBAQAogCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgogCQliCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKKwkJLndvcmQJMHg1NjE1ODAwMAkJQCBQWEExNjgKKwkJLndvcmQJMHhmZmZmZjAwMAorCQliIF9fYXJtdjRfbW11X2NhY2hlX29uCisJCWIgX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCWIgX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKKworCQkud29yZAkweDU2MDU2OTMwCisJCS53b3JkCTB4ZmYwZmZmZjAJCUAgUFhBOTM1CisJCWIJX19hcm12NF9tbXVfY2FjaGVfb24KKwkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAorCiAJCS53b3JkCTB4NTYwNTAwMDAJCUAgRmVyb2Nlb24KIAkJLndvcmQJMHhmZjBmMDAwMAogCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCiAJCWIJX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKIAorCQkud29yZAkweDY2MDE1MjYxCQlAIEZBNTI2CisJCS53b3JkCTB4ZmYwMWZmZjEKKwkJYglfX2ZhNTI2X2NhY2hlX29uCisJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCWIJX19mYTUyNl9jYWNoZV9mbHVzaAorCiAJCUAgVGhlc2UgbWF0Y2ggb24gdGhlIGFyY2hpdGVjdHVyZSBJRAogCiAJCS53b3JkCTB4MDAwMjAwMDAJCUAgQVJNdjRUCkBAIC03NzUsNiArODEzLDEyIEBACiAJCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CUAgZHJhaW4gV0IKIAkJbW92CXBjLCBscgogCQkKK19fZmE1MjZfY2FjaGVfZmx1c2g6CisJCW1vdglyMSwgIzAKKwkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTQsIDAJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGNhY2hlCisJCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJQCBmbHVzaCBJIGNhY2hlCisJCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CUAgZHJhaW4gV0IKKwkJbW92CXBjLCBscgogCiBfX2FybXY2X21tdV9jYWNoZV9mbHVzaDoKIAkJbW92CXIxLCAjMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggM2ZjMDg0MS4uMzkzYzgxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC00Niw2ICs0NiwyMSBAQAogCiAJYXNtKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGM1LCAwIiA6IDogInIiIChjaCkpOwogfQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKworc3RhdGljIHZvaWQgaWNlZGNjX3B1dGMoaW50IGNoKQoreworCWludCBzdGF0dXMsIGkgPSAweDQwMDAwMDA7CisKKwlkbyB7CisJCWlmICgtLWkgPCAwKQorCQkJcmV0dXJuOworCisJCWFzbSB2b2xhdGlsZSAoIm1yYyBwMTQsIDAsICUwLCBjMTQsIGMwLCAwIiA6ICI9ciIgKHN0YXR1cykpOworCX0gd2hpbGUgKHN0YXR1cyAmICgxIDw8IDI4KSk7CisKKwlhc20oIm1jciBwMTQsIDAsICUwLCBjOCwgYzAsIDAiIDogOiAiciIgKGNoKSk7Cit9CiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCAxNTNhMDdlLi5hNTkyNGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC0xMSw2ICsxMSwxMSBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKKyAgL0RJU0NBUkQvIDogeworICAgICooLkFSTS5leGlkeCopCisgICAgKiguQVJNLmV4dGFiKikKKyAgfQorCiAgIC4gPSBURVhUX1NUQVJUOwogICBfdGV4dCA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYyBiL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwppbmRleCAxMDM3YmJhLi41NTg5NDQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCkBAIC02Miw5ICs2Miw4IEBACiAJcmV0dXJuIGNsazsKIH0KIAotc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3N0cnVjdCBjbGsgKmNsa19nZXRfc3lzKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewotCWNvbnN0IGNoYXIgKmRldl9pZCA9IGRldiA/IGRldl9uYW1lKGRldikgOiBOVUxMOwogCXN0cnVjdCBjbGsgKmNsazsKIAogCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CkBAIC03NSw2ICs3NCwxNCBAQAogCiAJcmV0dXJuIGNsayA/IGNsayA6IEVSUl9QVFIoLUVOT0VOVCk7CiB9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfc3lzKTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3sKKwljb25zdCBjaGFyICpkZXZfaWQgPSBkZXYgPyBkZXZfbmFtZShkZXYpIDogTlVMTDsKKworCXJldHVybiBjbGtfZ2V0X3N5cyhkZXZfaWQsIGNvbl9pZCk7Cit9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXQpOwogCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCmluZGV4IGYwMzBmMDcuLjczNGFjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYworKysgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KQEAgLTM0OSw2ICszNTAsMTIgQEAKIAogCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAorCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgeworCQlkZXZfZXJyKGRldiwgIkRNQSBidWZmZXIgYm91bmNpbmcgb2YgSElHSE1FTSBwYWdlcyAiCisJCQkgICAgICJpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIH4wOworCX0KKwogCXJldHVybiBtYXBfc2luZ2xlKGRldiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBzaXplLCBkaXIpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwppbmRleCA2OTdjNjQ5Li43NzEzYTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYworKysgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwpAQCAtMTI0LDM3ICsxMjQsNiBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBzaG9ydCBzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCkKLXsKLQl1bnNpZ25lZCBzaG9ydCBncGlvX2JpdDsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOwotCWdwaW9fYml0ID0gaW9yZWFkMTYoc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpIHwgYml0OwotCWlvd3JpdGUxNihncGlvX2JpdCwgc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOwotCi0JcmV0dXJuIGdwaW9fYml0OwotfQotCi11bnNpZ25lZCBzaG9ydCByZXNldF9zY29vcF9ncGlvKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgYml0KQotewotCXVuc2lnbmVkIHNob3J0IGdwaW9fYml0OwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+c2Nvb3BfbG9jaywgZmxhZyk7Ci0JZ3Bpb19iaXQgPSBpb3JlYWQxNihzZGV2LT5iYXNlICsgU0NPT1BfR1BXUikgJiB+Yml0OwotCWlvd3JpdGUxNihncGlvX2JpdCwgc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOwotCi0JcmV0dXJuIGdwaW9fYml0OwotfQotCi1FWFBPUlRfU1lNQk9MKHNldF9zY29vcF9ncGlvKTsKLUVYUE9SVF9TWU1CT0wocmVzZXRfc2Nvb3BfZ3Bpbyk7Ci0KIHVuc2lnbmVkIHNob3J0IHJlYWRfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCmluZGV4IDc4MGJiZjcuLjE0MGYxZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9wbS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXJ0Yy5oPgogI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zaGFycHNsX3BtLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hY3M1a19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhYjRlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTIzMyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXNpbXRlYy1taWNyZWwxCisjIFR1ZSBEZWMgMTYgMTM6MzE6MzQgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfS1M4Njk1PXkKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgS2VuZGluL01pY3JlbCBLUzg2OTUgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfTUFDSF9LUzg2OTU9eQorQ09ORklHX01BQ0hfRFNNMzIwPXkKK0NPTkZJR19NQUNIX0FDUzVLPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyMlQ9eQorQ09ORklHX0NQVV8zMnY0VD15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorQ09ORklHX1BDSV9ERUJVRz15CitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CitDT05GSUdfQ0FSREJVUz15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCitDT05GSUdfWUVOVEE9eQorQ09ORklHX1lFTlRBX08yPXkKK0NPTkZJR19ZRU5UQV9SSUNPSD15CitDT05GSUdfWUVOVEFfVEk9eQorQ09ORklHX1lFTlRBX0VORV9UVU5FPXkKK0NPTkZJR19ZRU5UQV9UT1NISUJBPXkKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjA0MTAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfQVJNX0tTODY5NV9FVEhFUj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CitDT05GSUdfUFJJU001ND1tCisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfS1M4Njk1PXkKK0NPTkZJR19TRVJJQUxfS1M4Njk1X0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0FDUzVLQ0FOPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19QQ0E5NTNYPXkKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfS1M4Njk1X1dBVENIRE9HPXkKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1NjM9eQorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfdGlueV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlM2QwODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTQxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctc2ltdGVjLW1pY3JlbDEKKyMgVHVlIEphbiAgNiAxMzoyMzowNyAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfS1M4Njk1PXkKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgS2VuZGluL01pY3JlbCBLUzg2OTUgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19NQUNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RTTTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9BQ1M1Sz15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2NFQ9eQorQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU0wLDExNTIwMCBpbml0PS9iaW4vc2giCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0FSTV9LUzg2OTVfRVRIRVI9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9LUzg2OTU9eQorQ09ORklHX1NFUklBTF9LUzg2OTVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19BQ1M1S0NBTj15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1BDQTk1M1g9eQorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0tTODY5NV9XQVRDSERPRz15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUENGODU2Mz15CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKaW5kZXggYjFjZDMzMS4uYzY2ZGQzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCkBAIC04OSw3ICs4OSw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCmluZGV4IDgwMjIyZmUuLmYyNjQ4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKQEAgLTkxLDcgKzkxLDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9CQURHRTQ9eQogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwppbmRleCBlZTEzMGI1Li4yYjRjMDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NlcmZjdWJlX2RlZmNvbmZpZwpAQCAtOTMsNyArOTMsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2I3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTk2MiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgorIyBTdW4gRmViICAxIDE2OjMxOjM2IDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX1NMVUJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0FSTUNPUkU9eQorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfUFhBMjV4PXkKK0NPTkZJR19QWEEyN3g9eQorQ09ORklHX1BYQV9TU1A9eQorIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19YU0NBTEVfUE1VPXkKK0NPTkZJR19ETUFCT1VOQ0U9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJX0hPU1RfSVRFODE1Mj15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD1tCisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1lFTlRBPW0KKyMgQ09ORklHX1lFTlRBX08yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTlRBX1JJQ09IIGlzIG5vdCBzZXQKK0NPTkZJR19ZRU5UQV9UST15CisjIENPTkZJR19ZRU5UQV9FTkVfVFVORSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQV9UT1NISUJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9QWEEyWFg9bQorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyBtZW09MzJNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKK0NPTkZJR19BUE1fRU1VTEFUSU9OPW0KK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCisjIENPTkZJR19CVF9SRkNPTU1fVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9CTkVQPW0KKyMgQ09ORklHX0JUX0JORVBfTUNfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPW0KKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QWEEyWFg9eQorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0dQSU89bQorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQ01fWDI3MD15CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9bQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9QQ01DSUE9bQorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKK0NPTkZJR19ETTkwMDA9eQorQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTEKKyMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPTz1tCisjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAorIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVM9bQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX0NTIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPW0KKyMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVBNUE9XRVIgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD1tCisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDA9bQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9bQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorQ09ORklHX1VDQjE0MDBfQ09SRT1tCisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KKyMgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPW0KK0NPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkU9eQorIyBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIwWFggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjI2NiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVMgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwN1QgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPQlVGX0dFTj1tCitDT05GSUdfVklERU9CVUZfRE1BX1NHPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcworIworCisjCisjIEF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19UVkFVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTc0MzIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MjAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzNDUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1M0wzMkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTTUyNzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004NzM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQMjdTTVBYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RDTTgyNVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKworIworIyBNUEVHIHZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMKKyMKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDMxQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VUEQ2NDA4MyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzEzNCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRVhJVU1fT1JJT04gaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0lWVFYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ0FGRV9DQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQ0FNRVJBPW0KKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExPW0KKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9UVzk5MTAgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fUFhBMjd4PW0KKyMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAorIyBDT05GSUdfVjRMX1VTQl9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT15CisjIENPTkZJR19GQl9QWEFfT1ZFUkxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlM9eQorQ09ORklHX0ZCX01CWD1tCisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1BYQTJYWF9QQ009bQorQ09ORklHX1NORF9QWEEyWFhfTElCPW0KK0NPTkZJR19TTkRfUFhBMlhYX0xJQl9BQzk3PXkKK0NPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9bQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NEUklDT0hfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9WMzAyMD15CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTAKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ0MDg2Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4MSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmMzCi0jIE1vbiBEZWMgIDMgMTM6MzY6MDkgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTFNGPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX0NPTElCUkk9eQotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotQ09ORklHX1BYQTI3eD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotQ09ORklHX0FSTV9USFVNQj15Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci1DT05GSUdfWFNDQUxFX1BNVT15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0wCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0wCi1DT05GSUdfQ01ETElORT0iIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi1DT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi1DT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU1VTUEVORD15Ci0jIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQX05GX1FVRVVFPW0KLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLUNPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJEQT1tCi0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKLUNPTkZJR19JUkxBTj1tCi1DT05GSUdfSVJDT01NPW0KLUNPTkZJR19JUkRBX1VMVFJBPXkKLQotIwotIyBJckRBIG9wdGlvbnMKLSMKLUNPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15Ci1DT05GSUdfSVJEQV9GQVNUX1JSPXkKLSMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKLSMKLQotIwotIyBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19JUlRUWV9TSVI9bQotCi0jCi0jIERvbmdsZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS0lOR1NVTl9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1NEQVpaTEVfRE9OR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0Ci0KLSMKLSMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0Ci0KLSMKLSMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAotIwotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfU0lHTUFURUxfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9GSUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01DU19GSVIgaXMgbm90IHNldAotQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KLUNPTkZJR19CVF9SRkNPTU09bQotQ09ORklHX0JUX1JGQ09NTV9UVFk9eQotQ09ORklHX0JUX0JORVA9bQotQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKLUNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15Ci1DT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19CVF9IQ0lVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLUNPTkZJR19DRkc4MDIxMT15Ci1DT05GSUdfTkw4MDIxMT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9eQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLSMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15Ci1DT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi1DT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQotQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKLUNPTkZJR19NVERfUFhBMlhYPXkKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0JMT0NLMk1URD15Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci1DT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD15Ci1DT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRFZBTkNFRD15Ci1DT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRERSRVNTPTB4NDAwMDAwMAotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfSElHSD15Ci1DT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURT15Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX09ORU5BTkQ9eQotIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9OAotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci1DT05GSUdfRE05MDAwPXkKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLUNPTkZJR19IT1NUQVA9eQotQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15Ci1DT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTY0MAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9bQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19NT1VTRV9TRVJJQUw9bQotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMD15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1VJTlBVVD1tCi0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1BYQT15Ci1DT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci1DT05GSUdfRklSTVdBUkVfRURJRD15Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQotQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz15Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFUlNJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX1NFUklBTD1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotQ09ORklHX1VTQl9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRD15Ci1DT05GSUdfVVNCX0RVTU1ZX0hDRD1tCi1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19NTUNfUFhBIGlzIG5vdCBzZXQKLUNPTkZJR19ORVdfTEVEUz15Ci0jIENPTkZJR19MRURTX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci0jIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX1BDRjg1ODM9bQotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfU0ExMTAwIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTE1IgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0xCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPXkKLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMTUiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfQVNDSUk9eQotQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLUNPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotQ09ORklHX0tFWVM9eQotQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKLUNPTkZJR19TRUNVUklUWT15Ci0jIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FFUz1tCi0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PXkKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfQ1JDMTY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19SRUVEX1NPTE9NT049eQotQ09ORklHX1JFRURfU09MT01PTl9ERUMxNj15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEyNzBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjNiZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE3MzcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNjoxODoxNyAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9DT0xJQlJJPXkKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUkFVTUZFTERfUFJPVE8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTI3eD15CisjIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1FVRVVFPW0KKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19JUkRBPW0KKworIworIyBJckRBIHByb3RvY29scworIworQ09ORklHX0lSTEFOPW0KK0NPTkZJR19JUkNPTU09bQorQ09ORklHX0lSREFfVUxUUkE9eQorCisjCisjIElyREEgb3B0aW9ucworIworQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKK0NPTkZJR19JUkRBX0ZBU1RfUlI9eQorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0lSVFRZX1NJUj1tCisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRklDUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05MODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CitDT05GSUdfTElCODAyMTE9eQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1dFUD15CitDT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorIyBDT05GSUdfTVREX0NGSV9OT1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQPXkKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUFhBMlhYPXkKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMT0NLMk1URD15CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQPXkKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FEVkFOQ0VEPXkKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FERFJFU1M9MHg0MDAwMDAwCitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9ISUdIPXkKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CisjIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPXkKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD04CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKK0NPTkZJR19ETTkwMDBfREVCVUdMRVZFTD00CisjIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUQVA9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTY0MAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9bQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9VSU5QVVQ9bQorIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworQ09ORklHX1VTQl9TRVJJQUw9bQorIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKK0NPTkZJR19VU0JfRFVNTVlfSENEPW0KK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorIyBDT05GSUdfTEVEU19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1ODM9bQorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTE1IgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0xCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xNSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUkVFRF9TT0xPTU9OPXkKK0NPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc0YTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTE1NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAorIyBGcmkgTWFyIDEzIDE2OjEzOjIwIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CisjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisKKyMKKyMgU3VwcG9ydGVkIFBYQTN4eCBQcm9jZXNzb3IgVmFyaWFudHMKKyMKK0NPTkZJR19DUFVfUFhBMzAwPXkKKyMgQ09ORklHX0NQVV9QWEEzMTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1BYQTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUFhBOTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9QWEE5MzUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSU5URUxNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9DT0xJQlJJMzAwPXkKKyMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9SQVVNRkVMRF9QUk9UTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfUFhBM3h4PXkKKyMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDMz15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKK0NPTkZJR19JT18zNj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX1hTQzNMMj15CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJ3IgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKKyMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0FYODg3OTY9eQorIyBDT05GSUdfQVg4ODc5Nl85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUj15CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CitDT05GSUdfREVCVUdfR1BJTz15CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT15CisjIENPTkZJR19GQl9QWEFfT1ZFUkxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1BYQT15CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKaW5kZXggZjc2MjJlNi4uMWFhNjIyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtMTEzLDcgKzExMyw2IEBACiBDT05GSUdfU0ExMTAwX0NPTExJRT15CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OTU1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTc0MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgorIyBTdW4gRmViICAxIDE2OjQzOjMxIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSU5URUxNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfRU1fWDI3MD15CitDT05GSUdfTUFDSF9FWEVEQT15CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfUFhBMjd4PXkKK0NPTkZJR19QWEFfU1NQPXkKKyMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyBtZW09MzJNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KKyMgQ09ORklHX0JUX1JGQ09NTV9UVFkgaXMgbm90IHNldAorQ09ORklHX0JUX0JORVA9bQorIyBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVIgaXMgbm90IHNldAorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0JUX0hDSUJUVVNCPW0KKyMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKK0NPTkZJR19MSUI4MDIxMT1tCisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX1NUQUE9eQorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUFhBMlhYPXkKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorQ09ORklHX0RNOTAwMD15CitDT05GSUdfRE05MDAwX0RFQlVHTEVWRUw9MQorIyBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKK0NPTkZJR19MSUJFUlRBUz1tCisjIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAorQ09ORklHX0xJQkVSVEFTX1NESU89bQorIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9BUE1QT1dFUj15CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfUFhBMjd4PXkKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EQTkwMzQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1IGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTI9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BYQT15CisjIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfUFhBMlhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorQ09ORklHX1BPV0VSX1NVUFBMWT15CisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0JBVFRFUllfREE5MDMwPXkKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorQ09ORklHX1BNSUNfREE5MDNYPXkKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRT15CisjIENPTkZJR19NRURJQV9UVU5FUl9TSU1QTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODcgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjBYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIwNjAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMjY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjEzMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9RVDEwMTAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1UyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA3VCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj1tCitDT05GSUdfVklERU9CVUZfR0VOPW0KK0NPTkZJR19WSURFT0JVRl9ETUFfU0c9bQorQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKKworIworIyBFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzCisjCisKKyMKKyMgQXVkaW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1RWQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBNzQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQxNUMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NU1AzNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTM0NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzTDMyQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NNTI3OTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVExWMzIwQUlDMjNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3MzkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlAyN1NNUFggaXMgbm90IHNldAorCisjCisjIFZpZGVvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19PVjc2NzAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVENNODI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE0WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBhbmQgYXVkaW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0NYMjU4NDAgaXMgbm90IHNldAorCisjCisjIE1QRUcgdmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0NYMjM0MVggaXMgbm90IHNldAorCisjCisjIFZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19TQUE3MTI3IGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcworIworIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQT1tCisjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAorQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMT1tCisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9PVjc3MlggaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1BYQTI3eD1tCisjIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKK0NPTkZJR19GQl9NQlg9bQorIyBDT05GSUdfRkJfTUJYX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTENEX1RETzI0TT15CisjIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0RBOTAzWD1tCisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1BYQTJYWF9MSUI9bQorQ09ORklHX1NORF9QWEEyWFhfTElCX0FDOTc9eQorIyBDT05GSUdfU05EX1BYQTJYWF9BQzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1BYQTJYWF9TT0M9bQorQ09ORklHX1NORF9QWEEyWFhfU09DX0FDOTc9bQorQ09ORklHX1NORF9QWEEyWFhfU09DX0VNX1gyNzA9bQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9bQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX1dNOTcxMj1tCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9bQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19EQTkwM1g9eQorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9WMzAyMD15CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX0RBOTAzWD15CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTAKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCmluZGV4IDhmOTg2ZTkuLjE1MDI5NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCkBAIC05MCw3ICs5MCw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0gzNjAwPXkKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0gzWFhYPXkKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldApAQCAtMTAwLDcgKzk5LDYgQEAKICMgQ09ORklHX1NBMTEwMF9TSEFOTk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9TSU1QQUQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX1NTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IMzYwMF9TTEVFVkUgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBUeXBlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwppbmRleCAxYzhmYjg5Li5kYjA3MDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKQEAgLTkxLDcgKzkxLDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0hBQ0tLSVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKaW5kZXggODFmYWRhZi4uZjMwNzRlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCkBAIC0xNzgsNyArMTc4LDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjA9eQogQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwX1NTUD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCmluZGV4IDRiYzM4MDcuLmMzNjdhZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCkBAIC0xLDExICsxLDExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmM3Ci0jIFRodSBEZWMgIDQgMTU6Mjc6MzkgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNQorIyBUdWUgTWFyICAzIDIxOjQ1OjU3IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLSMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX01NVT15CkBAIC00MiwxMCArNDIsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfTkFNRVNQQUNFUz15CkBAIC01Myw2ICs2Miw3IEBACiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTgzLDYgKzkzLDcgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQpAQCAtOTMsNyArMTA0LDYgQEAKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTEwMSwxMSArMTExLDkgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMjEsNyArMTI5LDYgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMzIsNyArMTM5LDYgQEAKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldApAQCAtMTU5LDExICsxNjUsMTMgQEAKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogCiAjCiAjIE1hcnZlbGwgS2lya3dvb2QgSW1wbGVtZW50YXRpb25zCkBAIC0xNzEsMTQgKzE3OSw4IEBACiBDT05GSUdfTUFDSF9EQjg4RjYyODFfQlA9eQogQ09ORklHX01BQ0hfUkQ4OEY2MTkyX05BUz15CiBDT05GSUdfTUFDSF9SRDg4RjYyODE9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKK0NPTkZJR19NQUNIX1NIRUVWQVBMVUc9eQorQ09ORklHX01BQ0hfVFMyMTk9eQogQ09ORklHX1BMQVRfT1JJT049eQogCiAjCkBAIC0yMTQsNiArMjE2LDcgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCkBAIC0yNDIsNyArMjQ1LDYgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKQEAgLTI5MSw2ICsyOTMsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzU1LDYgKzM1OCw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTM2OCwxMiArMzcyLDI3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkw4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTElCODAyMTE9eQorQ09ORklHX01BQzgwMjExPXkKKworIworIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgorIworQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM5OCw2ICs0MTcsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NTEsOSArNDcxLDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKQEAgLTQ4MSw2ICs0OTksNyBAQAogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKQEAgLTQ5MSw2ICs1MTAsMTIgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTMsOCBAQAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKQEAgLTY4Miw2ICs3MDksOSBAQAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC02OTUsNiArNzI1LDcgQEAKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC03MTAsNyArNzQxLDYgQEAKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTcyMCw2ICs3NTAsNyBAQAogIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldApAQCAtNzU0LDggKzc4NSwzOSBAQAogIyBXaXJlbGVzcyBMQU4KICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CitDT05GSUdfTElCRVJUQVM9eQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKKyMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRINUsgaXMgbm90IHNldAorIyBDT05GSUdfQVRIOUsgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTENPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTEFHTiBpcyBub3Qgc2V0CisjIENPTkZJR19JV0wzOTQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDMgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC03OTEsMTMgKzg1MywyMCBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTgwNyw3ICs4NzYsMTEgQEAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtODM5LDExICs5MTIsMTEgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODc5LDYgKzk1Miw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NVjY0WFhYPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC05MDUsOCArOTc5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldApAQCAtOTI1LDEyICs5OTcsMTIgQEAKICMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT1JJT049eQogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTk1MiwxMCArMTAyNCwxMiBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTEwMTIsMTEgKzEwODYsOSBAQAogQ09ORklHX0hJRF9BNFRFQ0g9eQogQ09ORklHX0hJRF9BUFBMRT15CiBDT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0JSSUdIVD15CiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQogQ09ORklHX0hJRF9DWVBSRVNTPXkKLUNPTkZJR19ISURfREVMTD15CiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfR1lSQVRJT049eQogQ09ORklHX0hJRF9MT0dJVEVDSD15CkBAIC0xMDI0LDEyICsxMDk2LDE1IEBACiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15CiBDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiAjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQogIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKICMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CkBAIC0xMDU4LDYgKzExMzMsNyBAQAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldApAQCAtMTA4Nyw3ICsxMTYzLDYgQEAKIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQpAQCAtMTEzNSwyMSArMTIxMCw1MSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfTVZTRElPPXkKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQotIyBDT05GSUdfTEVEU19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19DTEFTUz15CiAKICMKICMgTEVEIGRyaXZlcnMKICMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCiAjCi0jIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTE3OCw3ICsxMjgzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCkBAIC0xMjI3LDYgKzEzMzIsNyBAQAogIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTIzOCwxNiArMTM0NCwxNCBAQAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfWEZTX0ZTPXkKLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTI2OCw5ICsxMzcyLDkgQEAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwotQ09ORklHX0ZBVF9GUz1tCi1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjg2LDEwICsxMzkwLDcgQEAKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTMwOSw2ICsxNDEwLDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMzkzLDcgKzE0OTUsNyBAQAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldApAQCAtMTQxNiw2ICsxNTE4LDcgQEAKICMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15CkBAIC0xNDI0LDcgKzE1MjcsNyBAQAogQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CkBAIC0xNDM1LDcgKzE1MzgsMTAgQEAKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19UUkFDSU5HPXkKIAogIwogIyBUcmFjZXJzCkBAIC0xNDQ2LDExICsxNTUyLDE0IEBACiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTE0NjQsMTkgKzE1NzMsMjIgQEAKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCiAjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fUk5HPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTE0OTYsNyArMTYwOCw3IEBACiBDT05GSUdfQ1JZUFRPX0NCQz1tCiAjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19FQ0I9eQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CkBAIC0xNTEwLDcgKzE2MjIsNyBAQAogIwogIyBEaWdlc3QKICMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DUkMzMkM9eQogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTI3LDkgKzE2MzksOSBAQAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PXkKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKQEAgLTE1NjAsNiArMTY3Miw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZwppbmRleCBhMWNjMzRmLi41NmFlNTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKQEAgLTg3LDcgKzg3LDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCmluZGV4IDczYmE2MmIuLjgyNDI4YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCkBAIC0xLDkgKzEsMTAgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgU3VuIERlYyAzMCAxMzowMjo1NCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIEZyaSBKYW4gMzAgMTI6NDI6MDMgMjAwOQogIwogQ09ORklHX0FSTT15CitDT05GSUdfSEFWRV9QV009eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CkBAIC0xMiw2ICsxMyw3IEBACiAjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKQEAgLTIxLDggKzIzLDggQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIApAQCAtNDEsMTYgKzQzLDI0IEBACiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC02NSwzMSArNzUsNDEgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwMyw4ICsxMjMsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gVHlwZQpAQCAtMTE0LDkgKzEzMyw3IEBACiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKQEAgLTEzMCw0MSArMTQ3LDU4IEBACiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QWEE9eQogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAKICMKICMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKICMKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfTUFHSUNJQU49eQorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CiBDT05GSUdfUFhBMjd4PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUFhBX1BXTT15CitDT05GSUdfUFhBX0hBVkVfQk9BUkRfSVJRUz15CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTE3Myw2ICsyMDcsNyBAQAogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CiBDT05GSUdfQ1BVX0NQMTU9eQpAQCAtMTg2LDYgKzIyMSw3IEBACiAjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CiBDT05GSUdfSVdNTVhUPXkKIENPTkZJR19YU0NBTEVfUE1VPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMTk3LDI4ICsyMzMsMzMgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKIENPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIAogIwpAQCAtMjI5LDkgKzI3MCwxMCBAQAogQ09ORklHX0NNRExJTkU9ImtlZXBpbml0cmQiCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15CitDT05GSUdfQVRBR1NfUFJPQz15CiAKICMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CiAjCiBDT05GSUdfQ1BVX0ZSRVE9eQogQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKQEAgLTIzOSw2ICsyODEsNyBAQAogQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjkwLDcgQEAKICMgQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CiAjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTI2Myw2ICszMDcsOCBAQAogIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQogIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogCkBAIC0yNzAsMjEgKzMxNiwxOCBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKIENPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19BUE1fRU1VTEFUSU9OPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzE2LDMzICszNTksMTUgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzUzLDYgKzM3OCw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTM5MCwyMCArNDE2LDE3IEBACiAjIERvbmdsZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ET05HTEUgaXMgbm90IHNldAotCi0jCi0jIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAotCi0jCi0jIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0tJTkdTVU5fRE9OR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTREFaWkxFX0RPTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzk1OV9ET05HTEUgaXMgbm90IHNldAogCiAjCiAjIEZJUiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfU0lHTUFURUxfRklSIGlzIG5vdCBzZXQKIENPTkZJR19QWEFfRklDUD1tCisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00MTcsMTcgKzQ0MCwxNyBAQAogIwogIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKICMKK0NPTkZJR19CVF9IQ0lCVFVTQj1tCisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ0MiwyNSArNDY1LDI4IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9ERUJVRz15Ci1DT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwotQ09ORklHX01URF9DSEFSPW0KLUNPTkZJR19NVERfQkxLREVWUz1tCi1DT05GSUdfTVREX0JMT0NLPW0KK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CkBAIC00NzMsNiArNDk5LDcgQEAKICMKIENPTkZJR19NVERfQ0ZJPXkKICMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKICMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CkBAIC00ODcsNiArNTE0LDcgQEAKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKICMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKQEAgLTQ5Nyw5ICs1MjUsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDQwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QWEEyWFggaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CkBAIC01MjMsNiArNTQ5LDEyIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01MzEsMTAgKzU2MywxMiBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNTQ3LDcgKzU4MSw2IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NjMsNiArNTk2LDIwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTYxMiw3ICs2NTksMjYgQEAKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1VJTlBVVD1tCiAKICMKQEAgLTYyNSw5ICs2OTEsMTEgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQyLDYgKzcxMCw3IEBACiAjIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldApAQCAtNjQ5LDM3ICs3MTgsNDUgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPW0KK0NPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BYQT1tCi0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CkBAIC02ODgsMTkgKzc2NSwzOSBAQAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKIENPTkZJR19XMT15CiAKICMKICMgMS13aXJlIEJ1cyBNYXN0ZXJzCiAjCisjIENPTkZJR19XMV9NQVNURVJfRFMyNDkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAogQ09ORklHX1cxX01BU1RFUl9EUzFXTT15CisjIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgMS13aXJlIFNsYXZlcwpAQCAtNzA5LDMyICs4MDYsNTYgQEAKICMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAogIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKIENPTkZJR19XMV9TTEFWRV9EUzI3NjA9eQorIyBDT05GSUdfVzFfU0xBVkVfQlEyNzAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUERBX1BPV0VSPXkKLSMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CiBDT05GSUdfQkFUVEVSWV9EUzI3NjA9eQorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKIENPTkZJR19IVENfRUdQSU89eQogQ09ORklHX0hUQ19QQVNJQzM9eQorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzQ1LDYgKzg2Niw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTc1Miw4ICs4NzQsOCBAQAogIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC03NjUsMTMgKzg4NywyMSBAQAogIwogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT15CitDT05GSUdfRkJfUFhBX09WRVJMQVk9eQorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0NPUkdJPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfUFdNPXkKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC04MDIsMTUgKzkzMiw4IEBACiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KQEAgLTgyNCw1MyArOTQ3LDE4NSBAQAogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKK0NPTkZJR19TTkRfRFJJVkVSUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9QWEEyWFhfQUM5NyBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIworIyBDT05GSUdfU05EX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BYQTJYWF9MSUI9bQorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz1tCiBDT05GSUdfU05EX1BYQTJYWF9TT0M9bQotCi0jCi0jIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIworQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9bQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19ISUQ9bQotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj1tCisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz01MDAKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1BYQTI3WD15CitDT05GSUdfVVNCX1BYQTI3WD15CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KKyMgQ09ORklHX1VTQl9FVEhfUk5ESVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRGUz1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9bQorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorQ09ORklHX1VTQl9HUElPX1ZCVVM9eQogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiAjCiBDT05GSUdfTU1DX0JMT0NLPXkKIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKIENPTkZJR19TRElPX1VBUlQ9bQorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTg5OSw2ICsxMTU0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTkwOCwxNyArMTE2NiwyNiBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKIENPTkZJR19SVENfRFJWX1NBMTEwMD15CisjIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC05MjcsMTkgKzExOTQsMTggQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC05NjUsMTUgKzEyMzEsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk5Nyw5ICsxMjYxLDEzIEBACiAjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTEwMDcsMTQgKzEyNzUsMTMgQEAKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDc2LDYgKzEzNDMsNyBAQAogQ09ORklHX1BSSU5US19USU1FPXkKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CkBAIC0xMDgzLDE1ICsxMzUxLDE4IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKQEAgLTExMDAsMTcgKzEzNzEsNDEgQEAKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVk09eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiAjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAogCkBAIC0xMTE5LDU1ICsxNDE0LDExMCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIwogIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKaW5kZXggODNjODE3Zi4uYjA2OTg3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCkBAIC0xNjUsNiArMTY1LDcgQEAKICMgTWFydmVsbCBNVjc4eHgwIEltcGxlbWVudGF0aW9ucwogIwogQ09ORklHX01BQ0hfREI3OFgwMF9CUD15CitDT05GSUdfTUFDSF9SRDc4WDAwX01BU0E9eQogCiAjCiAjIEJvb3Qgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwppbmRleCBkODFlYTIxLi4zNmNkNjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwpAQCAtOTEsNyArOTEsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI5MThkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjA2MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAorIyBGcmkgTWFyIDEzIDE0OjE3OjAxIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfT1BST0ZJTEVfQVJNVjc9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUD15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX09NQVBfTVVYPXkKK0NPTkZJR19PTUFQX01VWF9ERUJVRz15CitDT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQorQ09ORklHX09NQVBfTUNCU1A9eQorIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAorQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15CitDT05GSUdfT01BUF9TRVJJQUxfV0FLRT15CitDT05GSUdfQVJDSF9PTUFQMzRYWD15CitDT05GSUdfQVJDSF9PTUFQMzQzMD15CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9PTUFQM19CRUFHTEU9eQorQ09ORklHX01BQ0hfT01BUF9MRFA9eQorQ09ORklHX01BQ0hfT1ZFUk89eQorQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQT15CitDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFA9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CitDT05GSUdfQVJNX1RIVU1CRUU9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEyOAorQ09ORklHX0FFQUJJPXkKKyMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19MRURTPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMyLDExNTIwMCByb290PS9kZXYvbW1jYmxrMHAzIHJvb3R3YWl0IGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0hBVkVfQU9VVD15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKK0NPTkZJR19CVF9SRkNPTU09eQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9eQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD15CisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVVBUlQ9eQorQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQorQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CisjIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lCQ00yMDNYPXkKK0NPTkZJR19CVF9IQ0lCUEExMFg9eQorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05MODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CitDT05GSUdfTElCODAyMTE9eQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD1tCitDT05GSUdfTUFDODAyMTE9eQorCisjCisjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCisjCitDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9MRURTPXkKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fOTNDWDY9bQorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9ERUxBWT1tCisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MTFYPW0KK0NPTkZJR19TTVNDOTExWD1tCisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CitDT05GSUdfTElCRVJUQVM9eQorQ09ORklHX0xJQkVSVEFTX1VTQj15CitDT05GSUdfTElCRVJUQVNfU0RJTz15CitDT05GSUdfTElCRVJUQVNfREVCVUc9eQorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAorQ09ORklHX1VTQl9aRDEyMDE9bQorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19SVEw4MTg3PW0KKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19QNTRfQ09NTU9OPW0KK0NPTkZJR19QNTRfVVNCPW0KKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPW0KK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15CisjIENPTkZJR19CNDMgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KK0NPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVD15CitDT05GSUdfVVNCX05FVF9BWDg4MTdYPXkKK0NPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPXkKK0NPTkZJR19VU0JfTkVUX0RNOTYwMT1tCisjIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX0dMNjIwQT1tCitDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KK0NPTkZJR19VU0JfTkVUX1BMVVNCPW0KK0NPTkZJR19VU0JfTkVUX01DUzc4MzA9bQorQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCitDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPW0KK0NPTkZJR19VU0JfQUxJX001NjMyPXkKK0NPTkZJR19VU0JfQU4yNzIwPXkKK0NPTkZJR19VU0JfQkVMS0lOPXkKK0NPTkZJR19VU0JfQVJNTElOVVg9eQorQ09ORklHX1VTQl9FUFNPTjI4ODg9eQorQ09ORklHX1VTQl9LQzIxOTA9eQorQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0RFQlVHX0dQSU89eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorQ09ORklHX0dQSU9fVFdMNDAzMD15CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKK0NPTkZJR19QT1dFUl9TVVBQTFk9bQorIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9DT1JFPXkKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCitDT05GSUdfVklERU9fQUxMT1dfVjRMMT15CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorQ09ORklHX0RWQl9DT1JFPW0KK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfTUVESUFfQVRUQUNIPXkKK0NPTkZJR19NRURJQV9UVU5FUj1tCisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI3WD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzE9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIyNjY9bQorQ09ORklHX01FRElBX1RVTkVSX1FUMTAxMD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19UVkVFUFJPTT1tCitDT05GSUdfVklERU9fVFVORVI9bQorQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CitDT05GSUdfVklERU9fTVNQMzQwMD1tCitDT05GSUdfVklERU9fQ1M1M0wzMkE9bQorQ09ORklHX1ZJREVPX1dNODc3NT1tCitDT05GSUdfVklERU9fU0FBNzExWD1tCitDT05GSUdfVklERU9fQ1gyNTg0MD1tCitDT05GSUdfVklERU9fQ1gyMzQxWD1tCisjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQTIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BVTA4MjggaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CitDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKK0NPTkZJR19VU0JfVklERU9fQ0xBU1M9bQorQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15CisjIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1BWUlVTQjI9bQorQ09ORklHX1ZJREVPX1BWUlVTQjJfU1lTRlM9eQorQ09ORklHX1ZJREVPX1BWUlVTQjJfRFZCPXkKKyMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRU0yOFhYIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19VU0JWSVNJT049bQorQ09ORklHX1ZJREVPX1VTQlZJREVPPW0KK0NPTkZJR19VU0JfVklDQU09bQorQ09ORklHX1VTQl9JQk1DQU09bQorQ09ORklHX1VTQl9LT05JQ0FXQz1tCitDT05GSUdfVVNCX1FVSUNLQ0FNX01FU1NFTkdFUj1tCisjIENPTkZJR19VU0JfRVQ2MVgyNTEgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09WQ0FNQ0hJUD1tCitDT05GSUdfVVNCX1c5OTY4Q0Y9bQorQ09ORklHX1VTQl9PVjUxMT1tCitDT05GSUdfVVNCX1NFNDAxPW0KK0NPTkZJR19VU0JfU045QzEwMj1tCitDT05GSUdfVVNCX1NUVjY4MD1tCisjIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFdDPW0KKyMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9aUjM2NFhYPW0KKyMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0k0NzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMKK0NPTkZJR19EVkJfVVNCPW0KKyMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RWQl9VU0JfQTgwMD1tCitDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUI9bQorIyBDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVVNCX0RJQlVTQl9NQz1tCitDT05GSUdfRFZCX1VTQl9ESUIwNzAwPW0KK0NPTkZJR19EVkJfVVNCX1VNVF8wMTA9bQorQ09ORklHX0RWQl9VU0JfQ1hVU0I9bQorQ09ORklHX0RWQl9VU0JfTTkyMFg9bQorQ09ORklHX0RWQl9VU0JfR0w4NjE9bQorQ09ORklHX0RWQl9VU0JfQVU2NjEwPW0KK0NPTkZJR19EVkJfVVNCX0RJR0lUVj1tCitDT05GSUdfRFZCX1VTQl9WUDcwNDU9bQorQ09ORklHX0RWQl9VU0JfVlA3MDJYPW0KK0NPTkZJR19EVkJfVVNCX0dQOFBTSz1tCitDT05GSUdfRFZCX1VTQl9OT1ZBX1RfVVNCMj1tCitDT05GSUdfRFZCX1VTQl9UVFVTQjI9bQorQ09ORklHX0RWQl9VU0JfRFRUMjAwVT1tCitDT05GSUdfRFZCX1VTQl9PUEVSQTE9bQorQ09ORklHX0RWQl9VU0JfQUY5MDA1PW0KK0NPTkZJR19EVkJfVVNCX0FGOTAwNV9SRU1PVEU9bQorIyBDT05GSUdfRFZCX1VTQl9EVzIxMDIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1VTQl9DSU5FUkdZX1QyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9VU0JfQU5ZU0VFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9VU0JfRFRWNTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVVNCX0FGOTAxNSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAorCisjCisjIE11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfU1RCMDg5OSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RCNjEwMCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX0NYMjQxMTA9bQorQ09ORklHX0RWQl9DWDI0MTIzPW0KK0NPTkZJR19EVkJfTVQzMTI9bQorQ09ORklHX0RWQl9TNUgxNDIwPW0KKyMgQ09ORklHX0RWQl9TVFYwMjg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TVEI2MDAwIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfU1RWMDI5OT1tCitDT05GSUdfRFZCX1REQTgwODM9bQorQ09ORklHX0RWQl9UREExMDA4Nj1tCisjIENPTkZJR19EVkJfVERBODI2MSBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1ZFUzFYOTM9bQorQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwPW0KKyMgQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVERBODI2WD1tCitDT05GSUdfRFZCX1RVQTYxMDA9bQorIyBDT05GSUdfRFZCX0NYMjQxMTYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NJMjFYWCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfU1A4ODcwPW0KK0NPTkZJR19EVkJfU1A4ODdYPW0KK0NPTkZJR19EVkJfQ1gyMjcwMD1tCitDT05GSUdfRFZCX0NYMjI3MDI9bQorIyBDT05GSUdfRFZCX0RSWDM5N1hEIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfTDY0NzgxPW0KK0NPTkZJR19EVkJfVERBMTAwNFg9bQorQ09ORklHX0RWQl9OWFQ2MDAwPW0KK0NPTkZJR19EVkJfTVQzNTI9bQorQ09ORklHX0RWQl9aTDEwMzUzPW0KK0NPTkZJR19EVkJfRElCMzAwME1CPW0KK0NPTkZJR19EVkJfRElCMzAwME1DPW0KK0NPTkZJR19EVkJfRElCNzAwME09bQorQ09ORklHX0RWQl9ESUI3MDAwUD1tCitDT05GSUdfRFZCX1REQTEwMDQ4PW0KKworIworIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9WRVMxODIwPW0KK0NPTkZJR19EVkJfVERBMTAwMjE9bQorQ09ORklHX0RWQl9UREExMDAyMz1tCitDT05GSUdfRFZCX1NUVjAyOTc9bQorCisjCisjIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9OWFQyMDBYPW0KKyMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9PUjUxMTMyIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQkNNMzUxMD1tCitDT05GSUdfRFZCX0xHRFQzMzBYPW0KKyMgQ09ORklHX0RWQl9MR0RUMzMwNCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1M1SDE0MDk9bQorQ09ORklHX0RWQl9BVTg1MjI9bQorQ09ORklHX0RWQl9TNUgxNDExPW0KKworIworIyBJU0RCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9TOTIxIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAorIworQ09ORklHX0RWQl9QTEw9bQorQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwPW0KKworIworIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUworIworQ09ORklHX0RWQl9MTkJQMjE9bQorIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAorQ09ORklHX0RWQl9JU0w2NDIxPW0KKyMgQ09ORklHX0RWQl9MR1M4R0w1IGlzIG5vdCBzZXQKKworIworIyBUb29scyB0byBkZXZlbG9wIG5ldyBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9EVU1NWV9GRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQUY5MDEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSFdERVA9eQorQ09ORklHX1NORF9SQVdNSURJPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KKyMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CitDT05GSUdfU05EX0RFQlVHPXkKKyMgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPXkKK0NPTkZJR19TTkRfVVNCX0NBSUFRPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CisjIENPTkZJR19TTkRfT01BUF9TT0NfT1ZFUk8gaXMgbm90IHNldAorQ09ORklHX1NORF9PTUFQX1NPQ19TRFAzNDMwPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfUEFORE9SQT15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfVFdMNDAzMD15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorQ09ORklHX1VTQl9PVEc9eQorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfU09DPXkKKworIworIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9PVEc9eQorQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CitDT05GSUdfTVVTQl9QSU9fT05MWT15CisjIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFJJTlRFUj15CitDT05GSUdfVVNCX1dETT15CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19UV0w0MDMwX1VTQj15CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfT01BUF9IUz15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9eQorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorQ09ORklHX1NDSEVEU1RBVFM9eQorQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfQ1JDMTY9bQorQ09ORklHX0NSQ19UMTBESUY9eQorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9eQorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKaW5kZXggYThlZTY5OC4uMDIwZTZhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCkBAIC00ODEsNyArNDgxLDcgQEAKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CiAjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9PUklPTj15CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CkBAIC0xMTc3LDcgKzExNzcsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NNDhUODY9eQogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCmluZGV4IGE2YjQ3ZWEuLmYyZDJkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwpAQCAtODgsNyArODgsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjVmYWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnCkBAIC0wLDAgKzEsODkxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIEZyaSBNYXIgMjAgMTM6NDM6MTMgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9NTVA9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKworIworIyBNYXJ2ZWxsIFBYQTE2OC85MTAgSW1wbG1lbnRhdGlvbnMKKyMKK0NPTkZJR19NQUNIX0FTUEVOSVRFPXkKK0NPTkZJR19NQUNIX1pZTE9OSVRFMj15CisjIENPTkZJR19NQUNIX1RUQ19ES0IgaXMgbm90IHNldAorQ09ORklHX0NQVV9QWEExNjg9eQorQ09ORklHX1BMQVRfUFhBPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX01PSEFXSz15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJvb3Rmc3R5cGU9bmZzIG5mc3Jvb3Q9MTkyLjE2OC4yLjEwMDovbmZzcm9vdC8gaXA9MTkyLjE2OC4yLjEwMToxOTIuMTY4LjIuMTAwOjoyNTUuMjU1LjI1NS4wOjpldGgwOm9uIGNvbnNvbGU9dHR5UzAsMTE1MjAwIG1lbT0xMjhNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3ZTI5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhOTEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBGcmkgTWFyIDIwIDEzOjQ1OjEyIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTU1QPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVEFWT1JFVkI9eQorCisjCisjIE1hcnZlbGwgUFhBMTY4LzkxMCBJbXBsbWVudGF0aW9ucworIworIyBDT05GSUdfTUFDSF9BU1BFTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFMiBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9UVENfREtCPXkKK0NPTkZJR19DUFVfUFhBOTEwPXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9NT0hBV0s9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMi4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMi4xMDE6MTkyLjE2OC4yLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09MTI4TSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzMTAyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTgyMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAorIyBGcmkgTWFyIDEzIDE1OjI4OjU2IDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUD15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKK0NPTkZJR19PTUFQX01VWD15CitDT05GSUdfT01BUF9NVVhfREVCVUc9eQorQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKK0NPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9OT0tJQV9SWDUxPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEyOAorQ09ORklHX0FFQUJJPXkKKyMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImluaXQ9L3NiaW4vcHJlaW5pdCB1YmkubXRkPTQgcm9vdD11YmkwOnJvb3RmcyByb290ZnN0eXBlPXViaWZzIHJ3IGNvbnNvbGU9dHR5TVRENSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfVkZQPXkKK0NPTkZJR19WRlB2Mz15CitDT05GSUdfTkVPTj15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0RFQlVHPXkKKyMgQ09ORklHX1BNX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0NBTl9QTV9UUkFDRT15CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZJTFRFUj1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMT1tCisKKyMKKyMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUwgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorQ09ORklHX01URF9PT1BTPXkKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTUFQX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CisjIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkRfT01BUDI9eQorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPW0KK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPW0KKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9bQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9VSU5QVVQ9bQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX09NQVA9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfT01BUDI0WFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1RXTDQwMzA9eQorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX09NQVBfV0FUQ0hET0c9bQorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9DT1JFPXkKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCitDT05GSUdfVklERU9fQUxMT1dfVjRMMT15CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPX1Y0TDE9bQorQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CisjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQTIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19QVlJVU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JQk1DQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tPTklDQVdDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0k0NzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CisjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX0xPR0lURUNIPW0KKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9bQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD1tCitDT05GSUdfSElEX1NBTVNVTkc9bQorQ09ORklHX0hJRF9TT05ZPW0KK0NPTkZJR19ISURfU1VOUExVUz1tCisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VTUEVORD15CitDT05GSUdfVVNCX09URz15CitDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQorQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQj15CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX1NPQz15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfT1RHPXkKK0NPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CisjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9MSUJVU1VBTD15CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1RFU1Q9bQorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9bQorQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQorQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQorQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlM9eQorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfWkVSTz1tCisjIENPTkZJR19VU0JfWkVST19ITlBURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfVVNCPXkKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfT01BUF9IUz1tCisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPW0KKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPW0KKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVFdMNDAzMD1tCisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz1tCisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPW0KKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPW0KKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9eQorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GUz15CisjIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorQ09ORklHX1NVTlJQQ19HU1M9bQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9bQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQorQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQorQ09ORklHX0xPQ0tERVA9eQorQ09ORklHX0xPQ0tfU1RBVD15CisjIENPTkZJR19ERUJVR19MT0NLREVQIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRV9JUlFGTEFHUz15CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9bQorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKaW5kZXggZDA1MmM4Zi4uOTg0ZjcwOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwpAQCAtODcsNyArODcsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKaW5kZXggOWI2NTYxZC4uOTAyMzViZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcKQEAgLTEsODggKzEsMTc0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItZ2l0MwotIyBTYXQgSnVsIDE2IDE1OjIxOjQ3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1naXQ2CisjIFRodSBKYW4gIDggMTc6MTQ6NDcgMjAwOQogIwogQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCiAjCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0hBUks9eQogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTkxLDE0ICsxNzcsMjAgQEAKIENPTkZJR19DUFVfU0ExMTA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WNFdCPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfVjRXQj15CiBDT05GSUdfQ1BVX1RMQl9WNFdCPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKIAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKICMKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0xMDcsMjIgKzE5OSw0MCBAQAogQ09ORklHX0lTQV9ETUE9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lfSE9TVF9WSUE4MkM1MDU9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci0jIENPTkZJR19QQ0lfTkFNRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESVNDT05USUdNRU0gaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0xFRFM9eQogQ09ORklHX0xFRFNfVElNRVI9eQogIyBDT05GSUdfTEVEU19DUFUgaXMgbm90IHNldApAQCAtMTM1LDYgKzI0NSwxMiBAQAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0iIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTE0MywxMyArMjU5LDE2IEBACiAjCiAjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAogIwotIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKLUNPTkZJR19GUEVfRkFTVEZQRT15CitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CkBAIC0xNTgsNiArMjc3LDc1IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0xNjYsMzYgKzM1NCwyNyBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX1BDPW0KICMgQ09ORklHX1BBUlBPUlRfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfUENfRklGTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QTlAgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldApAQCAtMjEwLDUyICszODksNzggQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9eQotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfSURFUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfSURFX0FSTT15Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC0yNzUsMTcgKzQ4MCwyMCBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV83MDAwRkFTU1QgaXMgbm90IHNldApAQCAtMjk2LDEyICs1MDQsMTggQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldApAQCAtMzE0LDIwICs1MjgsMTUgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPW0KLSMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKQEAgLTMzNiwxMjMgKzU0NSw1NyBAQAogIyBDT05GSUdfU0NTSV9VMTRfMzRGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAogIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldApAQCAtNDYyLDU2ICs2MDUsNjkgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX0NTODl4MD15Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19DUzg5eDBfTk9FRVBST009eQogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIworIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIFdpcmVsZXNzIExBTgogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC01MTksMTggKzY3NSwxNyBAQAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NDAsNyArNjk1LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC01NTMsMTQgKzcwNywyNSBAQAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNTgwLDE2ICs3NDUsMjIgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01OTksOTAgKzc3MCwxMjIgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogQ09ORklHX1BSSU5URVI9bQogIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBBUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDPXkKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DWUJFUjIwMDA9eQogIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtNjkxLDEyNiArODk0LDEzMiBAQAogIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPW0KLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiBDT05GSUdfU09VTkRfUFJJTUU9bQotIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQ01QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VTMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVNTU09MTzEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFFU1RSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9JQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9PU1M9bQogIyBDT05GSUdfU09VTkRfVFJBQ0VJTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0RNQVAgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxODE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9TR0FMQVhZIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9BRExJQj1tCi0jIENPTkZJR19TT1VORF9BQ0lfTUlYRVIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQ1M0MjMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1NTQ0FQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9HVVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVk1JREkgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU1MgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1BBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QU1MgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1NCPW0KLSMgQ09ORklHX1NPVU5EX0FXRTMyX1NZTlRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1dBVkVGUk9OVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NQVVJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1lNMzgxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9PUEwzU0ExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX09QTDNTQTIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfWU1GUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1VBUlQ2ODUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0FFRFNQMTYgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfS0FITFVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FMSTU0NTUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRk9SVEUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUk1FOTZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04MzQsMTQgKzEwNDMsMTIgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfREVWRlNfRlM9eQotQ09ORklHX0RFVkZTX01PVU5UPXkKLSMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04NTUsMjIgKzEwNjIsMjcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz1tCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19ORlNEPW0KKyMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19TVU5SUEM9bQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC04OTcsMTEgKzExMDksOSBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9bQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCkBAIC05NDIsMzAgKzExNTIsNzQgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAogCiAjCkBAIC05NzMsMTkgKzEyMjcsMjMgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwppbmRleCAwM2Y3ODNlLi42ODVkMmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCkBAIC04OSw3ICs4OSw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94bV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveG1feDJ4eF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMzlmMzY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MveG1feDJ4eF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxODA2ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzgKLSMgU3VuIE9jdCAgNSAxMTowNTozNiAyMDA4Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci0jIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQ0xLPXkKLSMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE1BQk9VTkNFPXkKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAotQ09ORklHX01BQ0hfRU1fWDI3MD15Ci0jIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9BUk1DT1JFPXkKLSMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAotQ09ORklHX1BYQTI1eD15Ci1DT05GSUdfUFhBMjd4PXkKLUNPTkZJR19QWEFfU1NQPXkKLSMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci1DT05GSUdfUENJX0hPU1RfSVRFODE1Mj15Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCi1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotQ09ORklHX1lFTlRBPW0KLSMgQ09ORklHX1lFTlRBX08yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTlRBX1JJQ09IIGlzIG5vdCBzZXQKLUNPTkZJR19ZRU5UQV9UST15Ci0jIENPTkZJR19ZRU5UQV9FTkVfVFVORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRU5UQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9QWEEyWFg9bQotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19WTVNQTElUXzNHPXkKLSMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAotIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKLSMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0xZjAzIG1lbT0zMk0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgUG93ZXIgTWFuYWdlbWVudAotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLUNPTkZJR19BUE1fRU1VTEFUSU9OPW0KLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KLUNPTkZJR19CVF9SRkNPTU09bQotIyBDT05GSUdfQlRfUkZDT01NX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQlRfQk5FUD1tCi0jIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfQlRfSENJVVNCPW0KLUNPTkZJR19CVF9IQ0lVU0JfU0NPPXkKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX1NUQUE9eQotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDQwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCi1DT05GSUdfTVREX1BYQTJYWD15Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9HUElPPW0KLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0NNX1gyNzA9eQotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfUExBVEZPUk09eQotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBPW0KLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotQ09ORklHX1BBVEFfUENNQ0lBPW0KLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci1DT05GSUdfRE05MDAwPXkKLUNPTkZJR19ETTkwMDBfREVCVUdMRVZFTD0xCi0jIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPTz15Ci0jIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAotIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19MSUJFUlRBUz1tCi0jIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVNfQ1MgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTX1NESU89bQotIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLUNPTkZJR19QUFBfRklMVEVSPXkKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVBNUE9XRVIgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX1BYQTI3eD1tCi0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLUNPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1IGlzIG5vdCBzZXQKLUNPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTI9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1BYQT15Ci1DT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj1tCi1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfUFhBPXkKLSMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAotQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKLUNPTkZJR19GQl9NQlg9bQotIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLUNPTkZJR19TT1VORD1tCi1DT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FSTT15Ci1DT05GSUdfU05EX1BYQTJYWF9QQ009bQotQ09ORklHX1NORF9QWEEyWFhfQUM5Nz1tCi1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ01DSUE9eQotIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9bQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9bQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX0JMT0NLPW0KLUNPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKLSMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfTU1DX1BYQT1tCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NEUklDT0hfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTX0NNX1gyNzA9eQotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotQ09ORklHX1JUQ19EUlZfVjMwMjA9eQotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotQ09ORklHX1JUQ19EUlZfU0ExMTAwPXkKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwotIwotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9TVU1NQVJZPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPW0KLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTAKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfRVJST1JTPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaAppbmRleCA3OTQ4OWZkLi4wODM4OTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9fQVJNX0FfT1VUX0hfXwogCiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgZXhlYwogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDZjYmQ4ZmQuLmJiN2Q2OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTQ2LDYgKzQ2LDE0IEBACiAjIGRlZmluZSBNVUxUSV9DQUNIRSAxCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GQTUyNikKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIGZhCisjIGVuZGlmCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk05MjZUKQogIyBpZmRlZiBfQ0FDSEUKICMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCkBAIC05NCw2ICsxMDIsMTQgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01PSEFXSykKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIG1vaGF3aworIyBlbmRpZgorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfRkVST0NFT04pCiAjIGRlZmluZSBNVUxUSV9DQUNIRSAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDIyY2IxNGUuLmZmNDZkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTUsMTAgKzE1LDIwIEBACiAgKiBtdXN0IG5vdCBiZSB1c2VkIGJ5IGRyaXZlcnMuCiAgKi8KICNpZm5kZWYgX19hcmNoX3BhZ2VfdG9fZG1hCisKKyNpZiAhZGVmaW5lZChDT05GSUdfSElHSE1FTSkKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwYWdlX3RvX2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiAoZG1hX2FkZHJfdClfX3ZpcnRfdG9fYnVzKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSk7CiB9CisjZWxpZiBkZWZpbmVkKF9fcGZuX3RvX2J1cykKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwYWdlX3RvX2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAoZG1hX2FkZHJfdClfX3Bmbl90b19idXMocGFnZV90b19wZm4ocGFnZSkpOworfQorI2Vsc2UKKyNlcnJvciAidGhpcyBtYWNoaW5lIGNsYXNzIG5lZWRzIHRvIGRlZmluZSBfX2FyY2hfcGFnZV90b19kbWEgdG8gdXNlIEhJR0hNRU0iCisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkICpkbWFfdG9fdmlydChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkcikKIHsKQEAgLTU3LDYgKzY3LDggQEAKICAqIFVzZSB0aGUgZHJpdmVyIERNQSBzdXBwb3J0IC0gc2VlIGRtYS1tYXBwaW5nLmggKGRtYV9zeW5jXyopCiAgKi8KIGV4dGVybiB2b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsIGludCBydyk7CitleHRlcm4gdm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgcncpOwogCiAvKgogICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbiBiZSBzdXBwb3J0ZWQKQEAgLTMxNiw3ICszMjgsNyBAQAogCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAogCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQotCQlkbWFfY2FjaGVfbWFpbnQocGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBzaXplLCBkaXIpOworCQlkbWFfY2FjaGVfbWFpbnRfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gcGFnZV90b19kbWEoZGV2LCBwYWdlKSArIG9mZnNldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggZGY1NjM4Zi4uN2VkZjM1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLmgKQEAgLTE5LDIxICsxOSwxNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KIAotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZG1hY2hfdDsKLQogI2luY2x1ZGUgPG1hY2gvaXNhLWRtYS5oPgogCiAvKgotICogRE1BIG1vZGVzCisgKiBUaGUgRE1BIG1vZGVzIHJlZmxlY3QgdGhlIHNldHRpbmdzIGZvciB0aGUgSVNBIERNQSBjb250cm9sbGVyCiAgKi8KLXR5cGVkZWYgdW5zaWduZWQgaW50IGRtYW1vZGVfdDsKKyNkZWZpbmUgRE1BX01PREVfTUFTSwkgMHhjYwogCi0jZGVmaW5lIERNQV9NT0RFX01BU0sJMwotCi0jZGVmaW5lIERNQV9NT0RFX1JFQUQJIDAKLSNkZWZpbmUgRE1BX01PREVfV1JJVEUJIDEKLSNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAyCi0jZGVmaW5lIERNQV9BVVRPSU5JVAkgNAorI2RlZmluZSBETUFfTU9ERV9SRUFECSAweDQ0CisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCSAweDQ4CisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMHhjMAorI2RlZmluZSBETUFfQVVUT0lOSVQJIDB4MTAKIAogZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7CiAKQEAgLTUyLDQ0ICs0OCw0NCBAQAogLyogQ2xlYXIgdGhlICdETUEgUG9pbnRlciBGbGlwIEZsb3AnLgogICogV3JpdGUgMCBmb3IgTFNCL01TQiwgMSBmb3IgTVNCL0xTQiBhY2Nlc3MuCiAgKi8KLSNkZWZpbmUgY2xlYXJfZG1hX2ZmKGNoYW5uZWwpCisjZGVmaW5lIGNsZWFyX2RtYV9mZihjaGFuKQogCiAvKiBTZXQgb25seSB0aGUgcGFnZSByZWdpc3RlciBiaXRzIG9mIHRoZSB0cmFuc2ZlciBhZGRyZXNzLgogICoKICAqIE5PVEU6IFRoaXMgaXMgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgc2hvdWxkCiAgKiAgICAgICBiZSBoaWRkZW4gZnJvbSB0aGUgZHJpdmVycwogICovCi1leHRlcm4gdm9pZCBzZXRfZG1hX3BhZ2UoZG1hY2hfdCBjaGFubmVsLCBjaGFyIHBhZ2Vucik7CitleHRlcm4gdm9pZCBzZXRfZG1hX3BhZ2UodW5zaWduZWQgaW50IGNoYW4sIGNoYXIgcGFnZW5yKTsKIAogLyogUmVxdWVzdCBhIERNQSBjaGFubmVsCiAgKgogICogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBuZWVkIHRvIGRvIGFsbG9jYXRlIGFuIGludGVycnVwdAogICovCi1leHRlcm4gaW50ICByZXF1ZXN0X2RtYShkbWFjaF90IGNoYW5uZWwsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOworZXh0ZXJuIGludCAgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGNoYW4sIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwogCiAvKiBGcmVlIGEgRE1BIGNoYW5uZWwKICAqCiAgKiBTb21lIGFyY2hpdGVjdHVyZXMgbWF5IG5lZWQgdG8gZG8gZnJlZSBhbiBpbnRlcnJ1cHQKICAqLwotZXh0ZXJuIHZvaWQgZnJlZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKK2V4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogRW5hYmxlIERNQSBmb3IgdGhpcyBjaGFubmVsCiAgKgogICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGlzIG1heSBoYXZlIG90aGVyIHNpZGUgZWZmZWN0cyBsaWtlCiAgKiBlbmFibGluZyBhbiBpbnRlcnJ1cHQgYW5kIHNldHRpbmcgdGhlIERNQSByZWdpc3RlcnMuCiAgKi8KLWV4dGVybiB2b2lkIGVuYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4pOwogCiAvKiBEaXNhYmxlIERNQSBmb3IgdGhpcyBjaGFubmVsCiAgKgogICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGlzIG1heSBoYXZlIG90aGVyIHNpZGUgZWZmZWN0cyBsaWtlCiAgKiBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9yIHdoYXRldmVyLgogICovCi1leHRlcm4gdm9pZCBkaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4pOwogCiAvKiBUZXN0IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjaGFubmVsIGhhcyBhbiBhY3RpdmUgRE1BIHRyYW5zZmVyCiAgKi8KLWV4dGVybiBpbnQgZG1hX2NoYW5uZWxfYWN0aXZlKGRtYWNoX3QgY2hhbm5lbCk7CitleHRlcm4gaW50IGRtYV9jaGFubmVsX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY2hhbik7CiAKIC8qIFNldCB0aGUgRE1BIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgZm9yIHRoaXMgY2hhbm5lbAogICoKQEAgLTk3LDcgKzkzLDcgQEAKICAqIGVzcGVjaWFsbHkgc2luY2Ugc29tZSBETUEgYXJjaGl0ZWN0dXJlcyBkb24ndCB1cGRhdGUgdGhlCiAgKiBETUEgYWRkcmVzcyBpbW1lZGlhdGVseSwgYnV0IGRlZmVyIGl0IHRvIHRoZSBlbmFibGVfZG1hKCkuCiAgKi8KLWV4dGVybiB2b2lkIHNldF9kbWFfc2coZG1hY2hfdCBjaGFubmVsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbnJfc2cpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9zZyh1bnNpZ25lZCBpbnQgY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKTsKIAogLyogU2V0IHRoZSBETUEgYWRkcmVzcyBmb3IgdGhpcyBjaGFubmVsCiAgKgpAQCAtMTA1LDkgKzEwMSw5IEBACiAgKiBlc3BlY2lhbGx5IHNpbmNlIHNvbWUgRE1BIGFyY2hpdGVjdHVyZXMgZG9uJ3QgdXBkYXRlIHRoZQogICogRE1BIGFkZHJlc3MgaW1tZWRpYXRlbHksIGJ1dCBkZWZlciBpdCB0byB0aGUgZW5hYmxlX2RtYSgpLgogICovCi1leHRlcm4gdm9pZCBfX3NldF9kbWFfYWRkcihkbWFjaF90IGNoYW5uZWwsIHZvaWQgKmFkZHIpOwotI2RlZmluZSBzZXRfZG1hX2FkZHIoY2hhbm5lbCwgYWRkcikJCQkJXAotCV9fc2V0X2RtYV9hZGRyKGNoYW5uZWwsIGJ1c190b192aXJ0KGFkZHIpKQorZXh0ZXJuIHZvaWQgX19zZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGNoYW4sIHZvaWQgKmFkZHIpOworI2RlZmluZSBzZXRfZG1hX2FkZHIoY2hhbiwgYWRkcikJCQkJXAorCV9fc2V0X2RtYV9hZGRyKGNoYW4sIGJ1c190b192aXJ0KGFkZHIpKQogCiAvKiBTZXQgdGhlIERNQSBieXRlIGNvdW50IGZvciB0aGlzIGNoYW5uZWwKICAqCkBAIC0xMTUsNyArMTExLDcgQEAKICAqIGVzcGVjaWFsbHkgc2luY2Ugc29tZSBETUEgYXJjaGl0ZWN0dXJlcyBkb24ndCB1cGRhdGUgdGhlCiAgKiBETUEgY291bnQgaW1tZWRpYXRlbHksIGJ1dCBkZWZlciBpdCB0byB0aGUgZW5hYmxlX2RtYSgpLgogICovCi1leHRlcm4gdm9pZCBzZXRfZG1hX2NvdW50KGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAogLyogU2V0IHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24gZm9yIHRoaXMgY2hhbm5lbAogICoKQEAgLTEyNCwxMSArMTIwLDExIEBACiAgKiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uIGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlCiAgKiBlbmFibGVfZG1hKCkuCiAgKi8KLWV4dGVybiB2b2lkIHNldF9kbWFfbW9kZShkbWFjaF90IGNoYW5uZWwsIGRtYW1vZGVfdCBtb2RlKTsKK2V4dGVybiB2b2lkIHNldF9kbWFfbW9kZSh1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IG1vZGUpOwogCiAvKiBTZXQgdGhlIHRyYW5zZmVyIHNwZWVkIGZvciB0aGlzIGNoYW5uZWwKICAqLwotZXh0ZXJuIHZvaWQgc2V0X2RtYV9zcGVlZChkbWFjaF90IGNoYW5uZWwsIGludCBjeWNsZV9ucyk7CitleHRlcm4gdm9pZCBzZXRfZG1hX3NwZWVkKHVuc2lnbmVkIGludCBjaGFuLCBpbnQgY3ljbGVfbnMpOwogCiAvKiBHZXQgRE1BIHJlc2lkdWUgY291bnQuIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzCiAgKiBzaG91bGQgcmV0dXJuIHplcm8uIFJlYWRpbmcgdGhpcyB3aGlsZSBhIERNQSB0cmFuc2ZlciBpcwpAQCAtMTM2LDcgKzEzMiw3IEBACiAgKiBJZiBjYWxsZWQgYmVmb3JlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQsIGl0IG1heSByZXR1cm4gMS4KICAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KICAqLwotZXh0ZXJuIGludCAgZ2V0X2RtYV9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCk7CitleHRlcm4gaW50ICBnZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4pOwogCiAjaWZuZGVmIE5PX0RNQQogI2RlZmluZSBOT19ETUEJMjU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGE1ODM3OGMuLmQ3ZGExOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIFJfQVJNX0FCUzMyCTIKICNkZWZpbmUgUl9BUk1fQ0FMTAkyOAogI2RlZmluZSBSX0FSTV9KVU1QMjQJMjkKKyNkZWZpbmUgUl9BUk1fVjRCWAk0MAorI2RlZmluZSBSX0FSTV9QUkVMMzEJNDIKIAogLyoKICAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXhtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmFlOTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfQVNNX0ZJWE1BUF9ICisjZGVmaW5lIF9BU01fRklYTUFQX0gKKworLyoKKyAqIE5vdGhpbmcgdG9vIGZhbmN5IGZvciBub3cuCisgKgorICogT24gQVJNIHdlIGFscmVhZHkgaGF2ZSB3ZWxsIGtub3duIGZpeGVkIHZpcnR1YWwgYWRkcmVzc2VzIGltcG9zZWQgYnkKKyAqIHRoZSBhcmNoaXRlY3R1cmUgc3VjaCBhcyB0aGUgdmVjdG9yIHBhZ2Ugd2hpY2ggaXMgbG9jYXRlZCBhdCAweGZmZmYwMDAwLAorICogdGhlcmVmb3JlIGEgc2Vjb25kIGxldmVsIHBhZ2UgdGFibGUgaXMgYWxyZWFkeSBhbGxvY2F0ZWQgY292ZXJpbmcKKyAqIDB4ZmZmMDAwMDAgdXB3YXJkcy4KKyAqCisgKiBUaGUgY2FjaGUgZmx1c2hpbmcgY29kZSBpbiBwcm9jLXhzY2FsZS5TIHVzZXMgdGhlIHZpcnR1YWwgYXJlYSBiZXR3ZWVuCisgKiAweGZmZmUwMDAwIGFuZCAweGZmZmVmZmZmLgorICovCisKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkJMHhmZmYwMDAwMFVMCisjZGVmaW5lIEZJWEFERFJfVE9QCQkweGZmZmUwMDAwVUwKKyNkZWZpbmUgRklYQUREUl9TSVpFCQkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NUQVJUKQorCisjZGVmaW5lIEZJWF9LTUFQX0JFR0lOCQkwCisjZGVmaW5lIEZJWF9LTUFQX0VORAkJKEZJWEFERFJfU0laRSA+PiBQQUdFX1NISUZUKQorCisjZGVmaW5lIF9fZml4X3RvX3ZpcnQoeCkJKEZJWEFERFJfU1RBUlQgKyAoKHgpIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpCSgoKHgpIC0gRklYQUREUl9TVEFSVCkgPj4gUEFHRV9TSElGVCkKKworZXh0ZXJuIHZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpeF90b192aXJ0KGNvbnN0IHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKGlkeCA+PSBGSVhfS01BUF9FTkQpCisJCV9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3QoKTsKKwlyZXR1cm4gX19maXhfdG9fdmlydChpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2aXJ0X3RvX2ZpeChjb25zdCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCUJVR19PTih2YWRkciA+PSBGSVhBRERSX1RPUCB8fCB2YWRkciA8IEZJWEFERFJfU1RBUlQpOworCXJldHVybiBfX3ZpcnRfdG9fZml4KHZhZGRyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zY29vcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc2Nvb3AuaAppbmRleCBkZmI4MzMwLi40NjQ5MmE2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc2Nvb3AuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zY29vcC5oCkBAIC02Myw3ICs2Myw1IEBACiBleHRlcm4gc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKIAogdm9pZCByZXNldF9zY29vcChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotdW5zaWduZWQgc2hvcnQgX19kZXByZWNhdGVkIHNldF9zY29vcF9ncGlvKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgYml0KTsKLXVuc2lnbmVkIHNob3J0IF9fZGVwcmVjYXRlZCByZXNldF9zY29vcF9ncGlvKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgYml0KTsKIHVuc2lnbmVkIHNob3J0IHJlYWRfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnKTsKIHZvaWQgd3JpdGVfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCBkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjM2ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0FTTV9ISUdITUVNX0gKKyNkZWZpbmUgX0FTTV9ISUdITUVNX0gKKworI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisKKyNkZWZpbmUgUEtNQVBfQkFTRQkJKFBBR0VfT0ZGU0VUIC0gUE1EX1NJWkUpCisjZGVmaW5lIExBU1RfUEtNQVAJCVBUUlNfUEVSX1BURQorI2RlZmluZSBMQVNUX1BLTUFQX01BU0sJCShMQVNUX1BLTUFQIC0gMSkKKyNkZWZpbmUgUEtNQVBfTlIodmlydCkJCSgoKHZpcnQpIC0gUEtNQVBfQkFTRSkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgUEtNQVBfQUREUihucikJCShQS01BUF9CQVNFICsgKChucikgPDwgUEFHRV9TSElGVCkpCisKKyNkZWZpbmUga21hcF9wcm90CQlQQUdFX0tFUk5FTAorCisjZGVmaW5lIGZsdXNoX2NhY2hlX2ttYXBzKCkJZmx1c2hfY2FjaGVfYWxsKCkKKworZXh0ZXJuIHB0ZV90ICpwa21hcF9wYWdlX3RhYmxlOworCisjZGVmaW5lIEFSQ0hfTkVFRFNfS01BUF9ISUdIX0dFVAorCitleHRlcm4gdm9pZCAqa21hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkICprbWFwX2hpZ2hfZ2V0KHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGt1bm1hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKTsKKworZXh0ZXJuIHZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQga3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOworZXh0ZXJuIHZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKK2V4dGVybiB2b2lkICprbWFwX2F0b21pY19wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlKTsKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZShjb25zdCB2b2lkICpwdHIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oCmluZGV4IGJkYTQ4OWYuLmY3YmQ1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdjYXAuaApAQCAtMTcsNiArMTcsOCBAQAogI2RlZmluZSBIV0NBUF9DUlVOQ0gJMTAyNAogI2RlZmluZSBIV0NBUF9USFVNQkVFCTIwNDgKICNkZWZpbmUgSFdDQVBfTkVPTgk0MDk2CisjZGVmaW5lIEhXQ0FQX1ZGUHYzCTgxOTIKKyNkZWZpbmUgSFdDQVBfVkZQdjNEMTYJMTYzODQKIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaAppbmRleCA0NWRlZjEzLi5kMTZlYzk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oCkBAIC0xOCw2ICsxOCw3IEBACiAJS01fSVJRMSwKIAlLTV9TT0ZUSVJRMCwKIAlLTV9TT0ZUSVJRMSwKKwlLTV9MMl9DQUNIRSwKIAlLTV9UWVBFX05SCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9kbWEuaAppbmRleCBmYzcyNzhlLi45ZTYxNGExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvZG1hLmgKQEAgLTE1LDEzICsxNSwxMyBAQAogdHlwZWRlZiBzdHJ1Y3QgZG1hX3N0cnVjdCBkbWFfdDsKIAogc3RydWN0IGRtYV9vcHMgewotCWludAkoKnJlcXVlc3QpKGRtYWNoX3QsIGRtYV90ICopOwkJLyogb3B0aW9uYWwgKi8KLQl2b2lkCSgqZnJlZSkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLwotCXZvaWQJKCplbmFibGUpKGRtYWNoX3QsIGRtYV90ICopOwkJLyogbWFuZGF0b3J5ICovCi0Jdm9pZCAJKCpkaXNhYmxlKShkbWFjaF90LCBkbWFfdCAqKTsJCS8qIG1hbmRhdG9yeSAqLwotCWludAkoKnJlc2lkdWUpKGRtYWNoX3QsIGRtYV90ICopOwkJLyogb3B0aW9uYWwgKi8KLQlpbnQJKCpzZXRzcGVlZCkoZG1hY2hfdCwgZG1hX3QgKiwgaW50KTsJLyogb3B0aW9uYWwgKi8KLQljaGFyCSp0eXBlOworCWludAkoKnJlcXVlc3QpKHVuc2lnbmVkIGludCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLworCXZvaWQJKCpmcmVlKSh1bnNpZ25lZCBpbnQsIGRtYV90ICopOwkJCS8qIG9wdGlvbmFsICovCisJdm9pZAkoKmVuYWJsZSkodW5zaWduZWQgaW50LCBkbWFfdCAqKTsJCS8qIG1hbmRhdG9yeSAqLworCXZvaWQgCSgqZGlzYWJsZSkodW5zaWduZWQgaW50LCBkbWFfdCAqKTsJCS8qIG1hbmRhdG9yeSAqLworCWludAkoKnJlc2lkdWUpKHVuc2lnbmVkIGludCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLworCWludAkoKnNldHNwZWVkKSh1bnNpZ25lZCBpbnQsIGRtYV90ICosIGludCk7CS8qIG9wdGlvbmFsICovCisJY29uc3QgY2hhciAqdHlwZTsKIH07CiAKIHN0cnVjdCBkbWFfc3RydWN0IHsKQEAgLTM0LDI0ICszNCwyMSBAQAogCXVuc2lnbmVkIGludAlhY3RpdmU6MTsJLyogVHJhbnNmZXIgYWN0aXZlCQkqLwogCXVuc2lnbmVkIGludAlpbnZhbGlkOjE7CS8qIEFkZHJlc3MvQ291bnQgY2hhbmdlZAkqLwogCi0JZG1hbW9kZV90CWRtYV9tb2RlOwkvKiBETUEgbW9kZQkJCSovCisJdW5zaWduZWQgaW50CWRtYV9tb2RlOwkvKiBETUEgbW9kZQkJCSovCiAJaW50CQlzcGVlZDsJCS8qIERNQSBzcGVlZAkJCSovCiAKIAl1bnNpZ25lZCBpbnQJbG9jazsJCS8qIERldmljZSBpcyBhbGxvY2F0ZWQJCSovCiAJY29uc3QgY2hhcgkqZGV2aWNlX2lkOwkvKiBEZXZpY2UgbmFtZQkJCSovCiAKLQl1bnNpZ25lZCBpbnQJZG1hX2Jhc2U7CS8qIENvbnRyb2xsZXIgYmFzZSBhZGRyZXNzCSovCi0JaW50CQlkbWFfaXJxOwkvKiBDb250cm9sbGVyIElSUQkJKi8KLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgY3VyX3NnOwkvKiBDdXJyZW50IGNvbnRyb2xsZXIgYnVmZmVyCSovCi0JdW5zaWduZWQgaW50CXN0YXRlOwotCi0Jc3RydWN0IGRtYV9vcHMJKmRfb3BzOworCWNvbnN0IHN0cnVjdCBkbWFfb3BzICpkX29wczsKIH07CiAKLS8qIFByb3RvdHlwZTogdm9pZCBhcmNoX2RtYV9pbml0KGRtYSkKLSAqIFB1cnBvc2UgIDogSW5pdGlhbGlzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgRE1BCi0gKiBQYXJhbXMgICA6IGRtYSAtIHBvaW50ZXIgdG8gYXJyYXkgb2YgRE1BIHN0cnVjdHVyZXMKKy8qCisgKiBpc2FfZG1hX2FkZCAtIGFkZCBhbiBJU0Etc3R5bGUgRE1BIGNoYW5uZWwKICAqLwotZXh0ZXJuIHZvaWQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKTsKK2V4dGVybiBpbnQgaXNhX2RtYV9hZGQodW5zaWduZWQgaW50LCBkbWFfdCAqZG1hKTsKIAotZXh0ZXJuIHZvaWQgaXNhX2luaXRfZG1hKGRtYV90ICpkbWEpOworLyoKKyAqIEFkZCB0aGUgSVNBIERNQSBjb250cm9sbGVyLiAgQWx3YXlzIHRha2VzIGNoYW5uZWxzIDAtNy4KKyAqLworZXh0ZXJuIHZvaWQgaXNhX2luaXRfZG1hKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tYXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbWFwLmgKaW5kZXggMzlkOTQ5Yi4uNThjZjkxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21hcC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIE1UX0hJR0hfVkVDVE9SUwkJOAogI2RlZmluZSBNVF9NRU1PUlkJCTkKICNkZWZpbmUgTVRfUk9NCQkJMTAKKyNkZWZpbmUgTVRfTUVNT1JZX05PTkNBQ0hFRAkxMQogCiAjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHZvaWQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAppbmRleCAwMjAyYTdjLi44NTc2M2RiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaApAQCAtNDQsMTQgKzQ0LDIxIEBACiAgKiBUaGUgbW9kdWxlIHNwYWNlIGxpdmVzIGJldHdlZW4gdGhlIGFkZHJlc3NlcyBnaXZlbiBieSBUQVNLX1NJWkUKICAqIGFuZCBQQUdFX09GRlNFVCAtIGl0IG11c3QgYmUgd2l0aGluIDMyTUIgb2YgdGhlIGtlcm5lbCB0ZXh0LgogICovCi0jZGVmaW5lIE1PRFVMRVNfRU5ECQkoUEFHRV9PRkZTRVQpCi0jZGVmaW5lIE1PRFVMRVNfVkFERFIJCShNT0RVTEVTX0VORCAtIDE2KjEwNDg1NzYpCi0KKyNkZWZpbmUgTU9EVUxFU19WQUREUgkJKFBBR0VfT0ZGU0VUIC0gMTYqMTAyNCoxMDI0KQogI2lmIFRBU0tfU0laRSA+IE1PRFVMRVNfVkFERFIKICNlcnJvciBUb3Agb2YgdXNlciBzcGFjZSBjbGFzaGVzIHdpdGggc3RhcnQgb2YgbW9kdWxlIHNwYWNlCiAjZW5kaWYKIAogLyoKKyAqIFRoZSBoaWdobWVtIHBrbWFwIHZpcnR1YWwgc3BhY2Ugc2hhcmVzIHRoZSBlbmQgb2YgdGhlIG1vZHVsZSBhcmVhLgorICovCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNkZWZpbmUgTU9EVUxFU19FTkQJCShQQUdFX09GRlNFVCAtIFBNRF9TSVpFKQorI2Vsc2UKKyNkZWZpbmUgTU9EVUxFU19FTkQJCShQQUdFX09GRlNFVCkKKyNlbmRpZgorCisvKgogICogVGhlIFhJUCBrZXJuZWwgZ2V0cyBtYXBwZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbW9kdWxlIHZtIGFyZWEuCiAgKiBTaW5jZSB3ZSB1c2Ugc2VjdGlvbnMgdG8gbWFwIGl0LCB0aGlzIG1hY3JvIHJlcGxhY2VzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCiAgKiB3aXRoIGl0cyB2aXJ0dWFsIGFkZHJlc3Mgd2hpbGUga2VlcGluZyBvZmZzZXQgZnJvbSB0aGUgYmFzZSBzZWN0aW9uLgpAQCAtMTgxLDYgKzE4OCw3IEBACiAjaWZuZGVmIF9fdmlydF90b19idXMKICNkZWZpbmUgX192aXJ0X3RvX2J1cwlfX3ZpcnRfdG9fcGh5cwogI2RlZmluZSBfX2J1c190b192aXJ0CV9fcGh5c190b192aXJ0CisjZGVmaW5lIF9fcGZuX3RvX2J1cyh4KQkoKHgpIDw8IFBBR0VfU0hJRlQpCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2lkICp4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCAyNGIxNjhkLi5lNGRmYTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMSwxNSArMSwyNyBAQAogI2lmbmRlZiBfQVNNX0FSTV9NT0RVTEVfSAogI2RlZmluZSBfQVNNX0FSTV9NT0RVTEVfSAogCi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKLXsKLQlpbnQgZm9vOwotfTsKLQogI2RlZmluZSBFbGZfU2hkcglFbGYzMl9TaGRyCiAjZGVmaW5lIEVsZl9TeW0JCUVsZjMyX1N5bQogI2RlZmluZSBFbGZfRWhkcglFbGYzMl9FaGRyCiAKK3N0cnVjdCB1bndpbmRfdGFibGU7CisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYworeworI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisJRWxmX1NoZHIgKnVud19zZWNfaW5pdDsKKwlFbGZfU2hkciAqdW53X3NlY19kZXZpbml0OworCUVsZl9TaGRyICp1bndfc2VjX2NvcmU7CisJRWxmX1NoZHIgKnNlY19pbml0X3RleHQ7CisJRWxmX1NoZHIgKnNlY19kZXZpbml0X3RleHQ7CisJRWxmX1NoZHIgKnNlY19jb3JlX3RleHQ7CisJc3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX2luaXQ7CisJc3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX2RldmluaXQ7CisJc3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX2NvcmU7CisjZW5kaWYKK307CisKIC8qCiAgKiBJbmNsdWRlIHRoZSBBUk0gYXJjaGl0ZWN0dXJlIHZlcnNpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBmMzQxYzlkLi5lNmViOGE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC03Niw2ICs3NiwxNCBAQAogIyBlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0NPUFlfRkEKKyMgaWZkZWYgX1VTRVIKKyMgIGRlZmluZSBNVUxUSV9VU0VSIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9VU0VSIGZhCisjIGVuZGlmCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19DUFVfU0ExMTAwCiAjIGlmZGVmIF9VU0VSCiAjICBkZWZpbmUgTVVMVElfVVNFUiAxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaAppbmRleCBkYjgwMjAzLi4zOTc2NDEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKQEAgLTg5LDYgKzg5LDE0IEBACiAjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKICMgIGVuZGlmCiAjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfRkE1MjYKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2ZhNTI2CisjICBlbmRpZgorIyBlbmRpZgogIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNVQKICMgIGlmZGVmIENQVV9OQU1FCiAjICAgdW5kZWYgIE1VTFRJX0NQVQpAQCAtMTg1LDYgKzE5MywxNCBAQAogIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjMwogIyAgZW5kaWYKICMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X21vaGF3aworIyAgZW5kaWYKKyMgZW5kaWYKICMgaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgogIyAgaWZkZWYgQ1BVX05BTUUKICMgICB1bmRlZiAgTVVMVElfQ1BVCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDczMTkyNjEuLjIzNmEwNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0yNyw2ICsyNyw4IEBACiAvKiBQVFJBQ0VfU1lTQ0FMTCBpcyAyNCAqLwogI2RlZmluZSBQVFJBQ0VfR0VUQ1JVTkNIUkVHUwkyNQogI2RlZmluZSBQVFJBQ0VfU0VUQ1JVTkNIUkVHUwkyNgorI2RlZmluZSBQVFJBQ0VfR0VUVkZQUkVHUwkyNworI2RlZmluZSBQVFJBQ0VfU0VUVkZQUkVHUwkyOAogCiAvKgogICogUFNSIGJpdHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGYyY2QxOGEuLmVlMTMwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9TRVRVUF9ICiAjZGVmaW5lIF9fQVNNQVJNX1NFVFVQX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMTAyNAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zaXplcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2l6ZXMuaAppbmRleCA1MDM4NDNkLi5jMTBkMWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zaXplcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NpemVzLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgU1pfOE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIFNaXzE2TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAogI2RlZmluZSBTWl8zMk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgU1pfNDhNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCiAjZGVmaW5lIFNaXzY0TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAogI2RlZmluZSBTWl8xMjhNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKICNkZWZpbmUgU1pfMjU2TSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDY4MTdiZTkuLjUzN2RlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGExNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX0FTTV9TVEFDS1RSQUNFX0gKKyNkZWZpbmUgX19BU01fU1RBQ0tUUkFDRV9ICisKK3N0cnVjdCBzdGFja2ZyYW1lIHsKKwl1bnNpZ25lZCBsb25nIGZwOworCXVuc2lnbmVkIGxvbmcgc3A7CisJdW5zaWduZWQgbG9uZyBscjsKKwl1bnNpZ25lZCBsb25nIHBjOworfTsKKworZXh0ZXJuIGludCB1bndpbmRfZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lKTsKK2V4dGVybiB2b2lkIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUsCisJCQkgICAgaW50ICgqZm4pKHN0cnVjdCBzdGFja2ZyYW1lICosIHZvaWQgKiksIHZvaWQgKmRhdGEpOworCisjZW5kaWYJLyogX19BU01fU1RBQ0tUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggMjdhNjg5Yi4uY2EyYmYyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBfX0FTTV9BUk1fU1dBQl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDgxMWJlNTUuLmJkNGRjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC05Nyw4ICs5Nyw4IEBACiBleHRlcm4gaW50IGNwdV9hcmNoaXRlY3R1cmUodm9pZCk7CiBleHRlcm4gdm9pZCBjcHVfaW5pdCh2b2lkKTsKIAotdm9pZCBhcm1fbWFjaGluZV9yZXN0YXJ0KGNoYXIgbW9kZSk7Ci1leHRlcm4gdm9pZCAoKmFybV9wbV9yZXN0YXJ0KShjaGFyIHN0cik7Cit2b2lkIGFybV9tYWNoaW5lX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOworZXh0ZXJuIHZvaWQgKCphcm1fcG1fcmVzdGFydCkoY2hhciBzdHIsIGNvbnN0IGNoYXIgKmNtZCk7CiAKICNkZWZpbmUgVURCR19VTkRFRklORUQJKDEgPDwgMCkKICNkZWZpbmUgVURCR19TWVNDQUxMCSgxIDw8IDEpCkBAIC0xMjUsNiArMTI1LDEyIEBACiAJCQkJICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCiAjZGVmaW5lIGRtYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDUiIFwKIAkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9GQTUyNikKKyNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA0IiBcCisJCQkJICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCisjZGVmaW5lIGRzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIFwKKwkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKKyNkZWZpbmUgZG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQogI2Vsc2UKICNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQogI2RlZmluZSBkc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA2OGI5ZWM4Li40Zjg4NDgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk5LDYgKzk5LDggQEAKIAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQlcCiAJKCh1bnNpZ25lZCBsb25nKSh0YXNrX3RocmVhZF9pbmZvKHRzayktPmNwdV9jb250ZXh0LnBjKSkKKyNkZWZpbmUgdGhyZWFkX3NhdmVkX3NwKHRzaykJXAorCSgodW5zaWduZWQgbG9uZykodGFza190aHJlYWRfaW5mbyh0c2spLT5jcHVfY29udGV4dC5zcCkpCiAjZGVmaW5lIHRocmVhZF9zYXZlZF9mcCh0c2spCVwKIAkoKHVuc2lnbmVkIGxvbmcpKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+Y3B1X2NvbnRleHQuZnApKQogCkBAIC0xMTMsNiArMTE1LDggQEAKIGV4dGVybiB2b2lkIGl3bW14dF90YXNrX3JlbGVhc2Uoc3RydWN0IHRocmVhZF9pbmZvICopOwogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfc3dpdGNoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKIAorZXh0ZXJuIHZvaWQgdmZwX3N5bmNfc3RhdGUoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpOworCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGI1NDNhMDUuLmE2MjIxODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMzksNiArMzksNyBAQAogI2RlZmluZSBUTEJfVjZfRF9BU0lECSgxIDw8IDE3KQogI2RlZmluZSBUTEJfVjZfSV9BU0lECSgxIDw8IDE4KQogCisjZGVmaW5lIFRMQl9CVEIJCSgxIDw8IDI4KQogI2RlZmluZSBUTEJfTDJDTEVBTl9GUgkoMSA8PCAyOSkJCS8qIEZlcm9jZW9uICovCiAjZGVmaW5lIFRMQl9EQ0xFQU4JKDEgPDwgMzApCiAjZGVmaW5lIFRMQl9XQgkJKDEgPDwgMzEpCkBAIC01Myw2ICs1NCw3IEBACiAgKgkgIHY0d2IgIC0gQVJNdjQgd2l0aCB3cml0ZSBidWZmZXIgd2l0aG91dCBJIFRMQiBmbHVzaCBlbnRyeSBpbnN0cnVjdGlvbgogICoJICB2NHdiaSAtIEFSTXY0IHdpdGggd3JpdGUgYnVmZmVyIHdpdGggSSBUTEIgZmx1c2ggZW50cnkgaW5zdHJ1Y3Rpb24KICAqCSAgZnIgICAgLSBGZXJvY2VvbiAodjR3Ymkgd2l0aCBub24tb3V0ZXItY2FjaGVhYmxlIHBhZ2UgdGFibGUgd2Fsa3MpCisgKgkgIGZhICAgIC0gRmFyYWRheSAodjQgd2l0aCB3cml0ZSBidWZmZXIgd2l0aCBVVExCIGFuZCBicmFuY2ggdGFyZ2V0IGJ1ZmZlciAoQlRCKSkKICAqCSAgdjZ3YmkgLSBBUk12NiB3aXRoIHdyaXRlIGJ1ZmZlciB3aXRoIEkgVExCIGZsdXNoIGVudHJ5IGluc3RydWN0aW9uCiAgKgkgIHY3d2JpIC0gaWRlbnRpY2FsIHRvIHY2d2JpCiAgKi8KQEAgLTg5LDYgKzkxLDIyIEBACiAjIGRlZmluZSB2NF9hbHdheXNfZmxhZ3MJKC0xVUwpCiAjZW5kaWYKIAorI2RlZmluZSBmYV90bGJfZmxhZ3MJKFRMQl9XQiB8IFRMQl9CVEIgfCBUTEJfRENMRUFOIHwgXAorCQkJIFRMQl9WNF9VX0ZVTEwgfCBUTEJfVjRfVV9QQUdFKQorCisjaWZkZWYgQ09ORklHX0NQVV9UTEJfRkEKKyMgZGVmaW5lIGZhX3Bvc3NpYmxlX2ZsYWdzCWZhX3RsYl9mbGFncworIyBkZWZpbmUgZmFfYWx3YXlzX2ZsYWdzCWZhX3RsYl9mbGFncworIyBpZmRlZiBfVExCCisjICBkZWZpbmUgTVVMVElfVExCIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9UTEIgZmEKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBmYV9wb3NzaWJsZV9mbGFncwkwCisjIGRlZmluZSBmYV9hbHdheXNfZmxhZ3MJKC0xVUwpCisjZW5kaWYKKwogI2RlZmluZSB2NHdiaV90bGJfZmxhZ3MJKFRMQl9XQiB8IFRMQl9EQ0xFQU4gfCBcCiAJCQkgVExCX1Y0X0lfRlVMTCB8IFRMQl9WNF9EX0ZVTEwgfCBcCiAJCQkgVExCX1Y0X0lfUEFHRSB8IFRMQl9WNF9EX1BBR0UpCkBAIC0xNDAsNyArMTU4LDcgQEAKICMgZGVmaW5lIHY0d2JfYWx3YXlzX2ZsYWdzCSgtMVVMKQogI2VuZGlmCiAKLSNkZWZpbmUgdjZ3YmlfdGxiX2ZsYWdzIChUTEJfV0IgfCBUTEJfRENMRUFOIHwgXAorI2RlZmluZSB2NndiaV90bGJfZmxhZ3MgKFRMQl9XQiB8IFRMQl9EQ0xFQU4gfCBUTEJfQlRCIHwgXAogCQkJIFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwgXAogCQkJIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwgXAogCQkJIFRMQl9WNl9JX0FTSUQgfCBUTEJfVjZfRF9BU0lEKQpAQCAtMjY3LDYgKzI4NSw3IEBACiAJCQkJIHY0d2JpX3Bvc3NpYmxlX2ZsYWdzIHwgXAogCQkJCSBmcl9wb3NzaWJsZV9mbGFncyB8IFwKIAkJCQkgdjR3Yl9wb3NzaWJsZV9mbGFncyB8IFwKKwkJCQkgZmFfcG9zc2libGVfZmxhZ3MgfCBcCiAJCQkJIHY2d2JpX3Bvc3NpYmxlX2ZsYWdzIHwgXAogCQkJCSB2N3diaV9wb3NzaWJsZV9mbGFncykKIApAQCAtMjc1LDYgKzI5NCw3IEBACiAJCQkJIHY0d2JpX2Fsd2F5c19mbGFncyAmIFwKIAkJCQkgZnJfYWx3YXlzX2ZsYWdzICYgXAogCQkJCSB2NHdiX2Fsd2F5c19mbGFncyAmIFwKKwkJCQkgZmFfYWx3YXlzX2ZsYWdzICYgXAogCQkJCSB2NndiaV9hbHdheXNfZmxhZ3MgJiBcCiAJCQkJIHY3d2JpX2Fsd2F5c19mbGFncykKIApAQCAtMjk3LDkgKzMxNyw3IEBACiAJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwgfCBUTEJfVjZfSV9GVUxMKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCi0JaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwKLQkJICAgICBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8Ci0JCSAgICAgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpKSB7CisJaWYgKHRsYl9mbGFnKFRMQl9CVEIpKSB7CiAJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgNiIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAkJZHNiKCk7CkBAIC0zMzQsOSArMzUyLDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfQVNJRCkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMiIgOiA6ICJyIiAoYXNpZCkgOiAiY2MiKTsKIAotCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9GVUxMIHwgVExCX1Y2X0RfRlVMTCB8Ci0JCSAgICAgVExCX1Y2X0lfUEFHRSB8IFRMQl9WNl9EX1BBR0UgfAotCQkgICAgIFRMQl9WNl9JX0FTSUQgfCBUTEJfVjZfRF9BU0lEKSkgeworCWlmICh0bGJfZmxhZyhUTEJfQlRCKSkgewogCQkvKiBmbHVzaCB0aGUgYnJhbmNoIHRhcmdldCBjYWNoZSAqLwogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDYiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWRzYigpOwpAQCAtMzc0LDkgKzM5MCw3IEBACiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX1BBR0UpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKHVhZGRyKSA6ICJjYyIpOwogCi0JaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwKLQkJICAgICBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8Ci0JCSAgICAgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpKSB7CisJaWYgKHRsYl9mbGFnKFRMQl9CVEIpKSB7CiAJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgNiIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAkJZHNiKCk7CkBAIC00MTEsOSArNDI1LDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfUEFHRSkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAoa2FkZHIpIDogImNjIik7CiAKLQlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfAotCQkgICAgIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwKLQkJICAgICBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkpIHsKKwlpZiAodGxiX2ZsYWcoVExCX0JUQikpIHsKIAkJLyogZmx1c2ggdGhlIGJyYW5jaCB0YXJnZXQgY2FjaGUgKi8KIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA2IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlkc2IoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IGFhMzk5YWUuLjQ5MTk2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtMjUsNSArMjUsNiBAQAogfQogCiBleHRlcm4gdm9pZCBfX2luaXQgZWFybHlfdHJhcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF9iYWNrdHJhY2VfZW50cnkodW5zaWduZWQgbG9uZyB3aGVyZSwgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIGZyYW1lKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bndpbmQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZWRmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bndpbmQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogYXJjaC9hcm0vaW5jbHVkZS9hc20vdW53aW5kLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BU01fVU5XSU5EX0gKKyNkZWZpbmUgX19BU01fVU5XSU5EX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogVW53aW5kIHJlYXNvbiBjb2RlIGFjY29yZGluZyB0aGUgdGhlIEFSTSBFQUJJIGRvY3VtZW50cyAqLworZW51bSB1bndpbmRfcmVhc29uX2NvZGUgeworCVVSQ19PSyA9IDAsCQkJLyogb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KKwlVUkNfQ09OVElOVUVfVU5XSU5EID0gOCwKKwlVUkNfRkFJTFVSRSA9IDkJCQkvKiB1bnNwZWNpZmllZCBmYWlsdXJlIG9mIHNvbWUga2luZCAqLworfTsKKworc3RydWN0IHVud2luZF9pZHggeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGluc247Cit9OworCitzdHJ1Y3QgdW53aW5kX3RhYmxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVud2luZF9pZHggKnN0YXJ0OworCXN0cnVjdCB1bndpbmRfaWR4ICpzdG9wOworCXVuc2lnbmVkIGxvbmcgYmVnaW5fYWRkcjsKKwl1bnNpZ25lZCBsb25nIGVuZF9hZGRyOworfTsKKworZXh0ZXJuIHN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyB0ZXh0X2FkZHIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyB0ZXh0X3NpemUpOworZXh0ZXJuIHZvaWQgdW53aW5kX3RhYmxlX2RlbChzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIpOworZXh0ZXJuIHZvaWQgdW53aW5kX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCisjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKK2V4dGVybiBpbnQgX19pbml0IHVud2luZF9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB1bndpbmRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorI2RlZmluZSBVTldJTkQoY29kZS4uLikJCWNvZGUKKyNlbHNlCisjZGVmaW5lIFVOV0lORChjb2RlLi4uKQorI2VuZGlmCisKKyNlbmRpZgkvKiBfX0FTTV9VTldJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdXNlci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdXNlci5oCmluZGV4IDgyNWMxZTcuLmRmOTVlMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VzZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91c2VyLmgKQEAgLTgxLDQgKzgxLDEzIEBACiAjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCiAjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQogCisvKgorICogVXNlciBzcGVjaWZpYyBWRlAgcmVnaXN0ZXJzLiBJZiBvbmx5IFZGUHYyIGlzIHByZXNlbnQsIHJlZ2lzdGVycyAxNiB0byAzMQorICogYXJlIGlnbm9yZWQgYnkgdGhlIHB0cmFjZSBzeXN0ZW0gY2FsbC4KKyAqLworc3RydWN0IHVzZXJfdmZwIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZnByZWdzWzMyXTsKKwl1bnNpZ25lZCBsb25nIGZwc2NyOworfTsKKwogI2VuZGlmIC8qIF9BUk1fVVNFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNDMwNTM0NS4uMTFhNTE5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjksMTIgKzI5LDE0IEBACiBvYmotJChDT05GSUdfT0FCSV9DT01QQVQpCSs9IHN5c19vYWJpLWNvbXBhdC5vCiBvYmotJChDT05GSUdfQVJNX1RIVU1CRUUpCSs9IHRodW1iZWUubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KK29iai0kKENPTkZJR19BUk1fVU5XSU5EKQkrPSB1bndpbmQubwogCiBvYmotJChDT05GSUdfQ1JVTkNIKQkJKz0gY3J1bmNoLm8gY3J1bmNoLWJpdHMubwogQUZMQUdTX2NydW5jaC1iaXRzLm8JCTo9IC1XYSwtbWNwdT1lcDkzMTIKIAogb2JqLSQoQ09ORklHX0NQVV9YU0NBTEUpCSs9IHhzY2FsZS1jcDAubwogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0geHNjYWxlLWNwMC5vCitvYmotJChDT05GSUdfQ1BVX01PSEFXSykJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfSVdNTVhUKQkJKz0gaXdtbXh0Lm8KIEFGTEFHU19pd21teHQubwkJCTo9IC1XYSwtbWNwdT1pd21teHQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwppbmRleCBmNTNjNTgyLi5iMTIxYjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtNDksNiArNDksMzMgQEAKIDEwMDI6CiAJCS5lbmRtCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCwgcmQsIHJ4CisJCW1jcglwMTQsIDAsIFxyZCwgYzgsIGMwLCAwCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKzEwMDE6CisJCW1yYwlwMTQsIDAsIFxyeCwgYzE0LCBjMCwgMAorCQl0c3QJXHJ4LCAjMHgxMDAwMDAwMAorCQliZXEJMTAwMWIKKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQsIHJkLCByeAorCQltb3YJXHJkLCAjMHgxMDAwMDAwMAorMTAwMToKKwkJc3VicwlccmQsIFxyZCwgIzEKKwkJYm1pCTEwMDJmCisJCW1yYwlwMTQsIDAsIFxyeCwgYzE0LCBjMCwgMAorCQl0c3QJXHJ4LCAjMHgxMDAwMDAwMAorCQlibmUJMTAwMWIKKzEwMDI6CisJCS5lbmRtCisKICNlbHNlCiAKIAkJLm1hY3JvCWFkZHJ1YXJ0LCByeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKaW5kZXggNGEzYTUwNC4uMGU4OGU0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCkBAIC0yNCwxMSArMjQsNiBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KIAotI2RlZmluZSBJU0FfRE1BX01PREVfUkVBRAkweDQ0Ci0jZGVmaW5lIElTQV9ETUFfTU9ERV9XUklURQkweDQ4Ci0jZGVmaW5lIElTQV9ETUFfTU9ERV9DQVNDQURFCTB4YzAKLSNkZWZpbmUgSVNBX0RNQV9BVVRPSU5JVAkweDEwCi0KICNkZWZpbmUgSVNBX0RNQV9NQVNLCQkwCiAjZGVmaW5lIElTQV9ETUFfTU9ERQkJMQogI2RlZmluZSBJU0FfRE1BX0NMUkZGCQkyCkBAIC00OSwzOCArNDQsMzUgQEAKIAl7ICAweGQ0LCAgMHhkNiwgIDB4ZDgsICAweDQ4YSwgIDB4MDhhLCAgMHhjYywgMHhjZSB9CiB9OwogCi1zdGF0aWMgaW50IGlzYV9nZXRfZG1hX3Jlc2lkdWUoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIGludCBpc2FfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCXVuc2lnbmVkIGludCBpb19wb3J0ID0gaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ09VTlRdOworCXVuc2lnbmVkIGludCBpb19wb3J0ID0gaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfQ09VTlRdOwogCWludCBjb3VudDsKIAogCWNvdW50ID0gMSArIGluYihpb19wb3J0KTsKIAljb3VudCB8PSBpbmIoaW9fcG9ydCkgPDwgODsKIAotCXJldHVybiBjaGFubmVsIDwgNCA/IGNvdW50IDogKGNvdW50IDw8IDEpOworCXJldHVybiBjaGFuIDwgNCA/IGNvdW50IDogKGNvdW50IDw8IDEpOwogfQogCi1zdGF0aWMgdm9pZCBpc2FfZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpc2FfZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKIAlpZiAoZG1hLT5pbnZhbGlkKSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgbGVuZ3RoOwogCQl1bnNpZ25lZCBpbnQgbW9kZTsKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCi0JCW1vZGUgPSBjaGFubmVsICYgMzsKKwkJbW9kZSA9IChjaGFuICYgMykgfCBkbWEtPmRtYV9tb2RlOwogCQlzd2l0Y2ggKGRtYS0+ZG1hX21vZGUgJiBETUFfTU9ERV9NQVNLKSB7CiAJCWNhc2UgRE1BX01PREVfUkVBRDoKLQkJCW1vZGUgfD0gSVNBX0RNQV9NT0RFX1JFQUQ7CiAJCQlkaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAJCQlicmVhazsKIAogCQljYXNlIERNQV9NT0RFX1dSSVRFOgotCQkJbW9kZSB8PSBJU0FfRE1BX01PREVfV1JJVEU7CiAJCQlkaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBETUFfTU9ERV9DQVNDQURFOgotCQkJbW9kZSB8PSBJU0FfRE1BX01PREVfQ0FTQ0FERTsKIAkJCWRpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCQkJYnJlYWs7CiAKQEAgLTEwNSwzNCArOTcsMzEgQEAKIAkJYWRkcmVzcyA9IGRtYS0+YnVmLmRtYV9hZGRyZXNzOwogCQlsZW5ndGggID0gZG1hLT5idWYubGVuZ3RoIC0gMTsKIAotCQlvdXRiKGFkZHJlc3MgPj4gMTYsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX1BHTE9dKTsKLQkJb3V0YihhZGRyZXNzID4+IDI0LCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9QR0hJXSk7CisJCW91dGIoYWRkcmVzcyA+PiAxNiwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfUEdMT10pOworCQlvdXRiKGFkZHJlc3MgPj4gMjQsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX1BHSEldKTsKIAotCQlpZiAoY2hhbm5lbCA+PSA0KSB7CisJCWlmIChjaGFuID49IDQpIHsKIAkJCWFkZHJlc3MgPj49IDE7CiAJCQlsZW5ndGggPj49IDE7CiAJCX0KIAotCQlvdXRiKDAsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0NMUkZGXSk7CisJCW91dGIoMCwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfQ0xSRkZdKTsKIAotCQlvdXRiKGFkZHJlc3MsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0FERFJdKTsKLQkJb3V0YihhZGRyZXNzID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0FERFJdKTsKKwkJb3V0YihhZGRyZXNzLCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9BRERSXSk7CisJCW91dGIoYWRkcmVzcyA+PiA4LCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9BRERSXSk7CiAKLQkJb3V0YihsZW5ndGgsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0NPVU5UXSk7Ci0JCW91dGIobGVuZ3RoID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX0NPVU5UXSk7CisJCW91dGIobGVuZ3RoLCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9DT1VOVF0pOworCQlvdXRiKGxlbmd0aCA+PiA4LCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9DT1VOVF0pOwogCi0JCWlmIChkbWEtPmRtYV9tb2RlICYgRE1BX0FVVE9JTklUKQotCQkJbW9kZSB8PSBJU0FfRE1BX0FVVE9JTklUOwotCi0JCW91dGIobW9kZSwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfTU9ERV0pOworCQlvdXRiKG1vZGUsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX01PREVdKTsKIAkJZG1hLT5pbnZhbGlkID0gMDsKIAl9Ci0Jb3V0YihjaGFubmVsICYgMywgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfTUFTS10pOworCW91dGIoY2hhbiAmIDMsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX01BU0tdKTsKIH0KIAotc3RhdGljIHZvaWQgaXNhX2Rpc2FibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlzYV9kaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKLQlvdXRiKGNoYW5uZWwgfCA0LCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NQVNLXSk7CisJb3V0YihjaGFuIHwgNCwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfTUFTS10pOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9vcHMgaXNhX2RtYV9vcHMgPSB7CkBAIC0xNjAsNyArMTQ5LDEyIEBACiAJLmVuZAk9IDB4MDQ4ZgogfSB9OwogCi12b2lkIF9faW5pdCBpc2FfaW5pdF9kbWEoZG1hX3QgKmRtYSkKK3N0YXRpYyBkbWFfdCBpc2FfZG1hWzhdOworCisvKgorICogSVNBIERNQSBhbHdheXMgc3RhcnRzIGF0IGNoYW5uZWwgMAorICovCit2b2lkIF9faW5pdCBpc2FfaW5pdF9kbWEodm9pZCkKIHsKIAkvKgogCSAqIFRyeSB0byBhdXRvZGV0ZWN0IHByZXNlbmNlIG9mIGFuIElTQSBETUEgY29udHJvbGxlci4KQEAgLTE3OCwxMSArMTcyLDExIEBACiAJb3V0YigweGFhLCAweDAwKTsKIAogCWlmIChpbmIoMCkgPT0gMHg1NSAmJiBpbmIoMCkgPT0gMHhhYSkgewotCQlpbnQgY2hhbm5lbCwgaTsKKwkJdW5zaWduZWQgaW50IGNoYW4sIGk7CiAKLQkJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IDg7IGNoYW5uZWwrKykgewotCQkJZG1hW2NoYW5uZWxdLmRfb3BzID0gJmlzYV9kbWFfb3BzOwotCQkJaXNhX2Rpc2FibGVfZG1hKGNoYW5uZWwsIE5VTEwpOworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgODsgY2hhbisrKSB7CisJCQlpc2FfZG1hW2NoYW5dLmRfb3BzID0gJmlzYV9kbWFfb3BzOworCQkJaXNhX2Rpc2FibGVfZG1hKGNoYW4sIE5VTEwpOwogCQl9CiAKIAkJb3V0YigweDQwLCAweDBiKTsKQEAgLTIxNyw1ICsyMTEsMTIgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkbWFfcmVzb3VyY2VzKTsgaSsrKQogCQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCBkbWFfcmVzb3VyY2VzICsgaSk7CisKKwkJZm9yIChjaGFuID0gMDsgY2hhbiA8IDg7IGNoYW4rKykgeworCQkJaW50IHJldCA9IGlzYV9kbWFfYWRkKGNoYW4sICZpc2FfZG1hW2NoYW5dKTsKKwkJCWlmIChyZXQpCisJCQkJcHJpbnRrKEtFUk5fRVJSICJJU0FETUEldTogdW5hYmxlIHRvIHJlZ2lzdGVyOiAlZFxuIiwKKwkJCQkJY2hhbiwgcmV0KTsKKwkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kbWEuYyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEuYwppbmRleCBkMDA2MDg1Li43ZDViOWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZG1hLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RtYS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCkBAIC0yMywxOSArMjQsNDAgQEAKIERFRklORV9TUElOTE9DSyhkbWFfc3Bpbl9sb2NrKTsKIEVYUE9SVF9TWU1CT0woZG1hX3NwaW5fbG9jayk7CiAKLXN0YXRpYyBkbWFfdCBkbWFfY2hhbltNQVhfRE1BX0NIQU5ORUxTXTsKK3N0YXRpYyBkbWFfdCAqZG1hX2NoYW5bTUFYX0RNQV9DSEFOTkVMU107CisKK3N0YXRpYyBpbmxpbmUgZG1hX3QgKmRtYV9jaGFubmVsKHVuc2lnbmVkIGludCBjaGFuKQoreworCWlmIChjaGFuID49IE1BWF9ETUFfQ0hBTk5FTFMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGRtYV9jaGFuW2NoYW5dOworfQorCitpbnQgX19pbml0IGlzYV9kbWFfYWRkKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQoreworCWlmICghZG1hLT5kX29wcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZ19pbml0X3RhYmxlKCZkbWEtPmJ1ZiwgMSk7CisKKwlpZiAoZG1hX2NoYW5bY2hhbl0pCisJCXJldHVybiAtRUJVU1k7CisJZG1hX2NoYW5bY2hhbl0gPSBkbWE7CisJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBSZXF1ZXN0IERNQSBjaGFubmVsCiAgKgogICogT24gY2VydGFpbiBwbGF0Zm9ybXMsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0IGFzIHdlbGwuLi4KICAqLwotaW50IHJlcXVlc3RfZG1hKGRtYWNoX3QgY2hhbm5lbCwgY29uc3QgY2hhciAqZGV2aWNlX2lkKQoraW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAJaW50IHJldDsKIAotCWlmIChjaGFubmVsID49IE1BWF9ETUFfQ0hBTk5FTFMgfHwgIWRtYS0+ZF9vcHMpCisJaWYgKCFkbWEpCiAJCWdvdG8gYmFkX2RtYTsKIAogCWlmICh4Y2hnKCZkbWEtPmxvY2ssIDEpICE9IDApCkBAIC00Nyw3ICs2OSw3IEBACiAKIAlyZXQgPSAwOwogCWlmIChkbWEtPmRfb3BzLT5yZXF1ZXN0KQotCQlyZXQgPSBkbWEtPmRfb3BzLT5yZXF1ZXN0KGNoYW5uZWwsIGRtYSk7CisJCXJldCA9IGRtYS0+ZF9vcHMtPnJlcXVlc3QoY2hhbiwgZG1hKTsKIAogCWlmIChyZXQpCiAJCXhjaGcoJmRtYS0+bG9jaywgMCk7CkBAIC01NSw3ICs3Nyw3IEBACiAJcmV0dXJuIHJldDsKIAogYmFkX2RtYToKLQlwcmludGsoS0VSTl9FUlIgImRtYTogdHJ5aW5nIHRvIGFsbG9jYXRlIERNQSVkXG4iLCBjaGFubmVsKTsKKwlwcmludGsoS0VSTl9FUlIgImRtYTogdHJ5aW5nIHRvIGFsbG9jYXRlIERNQSVkXG4iLCBjaGFuKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAogYnVzeToKQEAgLTY4LDQyICs5MCw0MiBAQAogICoKICAqIE9uIGNlcnRhaW4gcGxhdGZvcm1zLCB3ZSBoYXZlIHRvIGZyZWUgaW50ZXJydXB0IGFzIHdlbGwuLi4KICAqLwotdm9pZCBmcmVlX2RtYShkbWFjaF90IGNoYW5uZWwpCit2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBjaGFuKQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCi0JaWYgKGNoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMUyB8fCAhZG1hLT5kX29wcykKKwlpZiAoIWRtYSkKIAkJZ290byBiYWRfZG1hOwogCiAJaWYgKGRtYS0+YWN0aXZlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGZyZWVpbmcgYWN0aXZlIERNQVxuIiwgY2hhbm5lbCk7Ci0JCWRtYS0+ZF9vcHMtPmRpc2FibGUoY2hhbm5lbCwgZG1hKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogZnJlZWluZyBhY3RpdmUgRE1BXG4iLCBjaGFuKTsKKwkJZG1hLT5kX29wcy0+ZGlzYWJsZShjaGFuLCBkbWEpOwogCQlkbWEtPmFjdGl2ZSA9IDA7CiAJfQogCiAJaWYgKHhjaGcoJmRtYS0+bG9jaywgMCkgIT0gMCkgewogCQlpZiAoZG1hLT5kX29wcy0+ZnJlZSkKLQkJCWRtYS0+ZF9vcHMtPmZyZWUoY2hhbm5lbCwgZG1hKTsKKwkJCWRtYS0+ZF9vcHMtPmZyZWUoY2hhbiwgZG1hKTsKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBmcmVlIGZyZWUgRE1BXG4iLCBjaGFubmVsKTsKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZnJlZSBmcmVlIERNQVxuIiwgY2hhbik7CiAJcmV0dXJuOwogCiBiYWRfZG1hOgotCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gZnJlZSBETUElZFxuIiwgY2hhbm5lbCk7CisJcHJpbnRrKEtFUk5fRVJSICJkbWE6IHRyeWluZyB0byBmcmVlIERNQSVkXG4iLCBjaGFuKTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9kbWEpOwogCiAvKiBTZXQgRE1BIFNjYXR0ZXItR2F0aGVyIGxpc3QKICAqLwotdm9pZCBzZXRfZG1hX3NnIChkbWFjaF90IGNoYW5uZWwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBucl9zZykKK3ZvaWQgc2V0X2RtYV9zZyAodW5zaWduZWQgaW50IGNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBucl9zZykKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAogCWlmIChkbWEtPmFjdGl2ZSkKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWx0ZXJpbmcgRE1BIFNHIHdoaWxlICIKLQkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFubmVsKTsKKwkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFuKTsKIAogCWRtYS0+c2cgPSBzZzsKIAlkbWEtPnNnY291bnQgPSBucl9zZzsKQEAgLTExNSwxMyArMTM3LDEzIEBACiAgKgogICogQ29weSBhZGRyZXNzIHRvIHRoZSBzdHJ1Y3R1cmUsIGFuZCBzZXQgdGhlIGludmFsaWQgYml0CiAgKi8KLXZvaWQgX19zZXRfZG1hX2FkZHIgKGRtYWNoX3QgY2hhbm5lbCwgdm9pZCAqYWRkcikKK3ZvaWQgX19zZXRfZG1hX2FkZHIgKHVuc2lnbmVkIGludCBjaGFuLCB2b2lkICphZGRyKQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCiAJaWYgKGRtYS0+YWN0aXZlKQogCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBhbHRlcmluZyBETUEgYWRkcmVzcyB3aGlsZSAiCi0JCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbm5lbCk7CisJCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbik7CiAKIAlkbWEtPnNnID0gTlVMTDsKIAlkbWEtPmFkZHIgPSBhZGRyOwpAQCAtMTMzLDEzICsxNTUsMTMgQEAKICAqCiAgKiBDb3B5IGFkZHJlc3MgdG8gdGhlIHN0cnVjdHVyZSwgYW5kIHNldCB0aGUgaW52YWxpZCBiaXQKICAqLwotdm9pZCBzZXRfZG1hX2NvdW50IChkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgY291bnQpCit2b2lkIHNldF9kbWFfY291bnQgKHVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCiAJaWYgKGRtYS0+YWN0aXZlKQogCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBhbHRlcmluZyBETUEgY291bnQgd2hpbGUgIgotCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW5uZWwpOworCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW4pOwogCiAJZG1hLT5zZyA9IE5VTEw7CiAJZG1hLT5jb3VudCA9IGNvdW50OwpAQCAtMTQ5LDEzICsxNzEsMTMgQEAKIAogLyogU2V0IERNQSBkaXJlY3Rpb24gbW9kZQogICovCi12b2lkIHNldF9kbWFfbW9kZSAoZG1hY2hfdCBjaGFubmVsLCBkbWFtb2RlX3QgbW9kZSkKK3ZvaWQgc2V0X2RtYV9tb2RlICh1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IG1vZGUpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoZG1hLT5hY3RpdmUpCiAJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBtb2RlIHdoaWxlICIKLQkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFubmVsKTsKKwkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFuKTsKIAogCWRtYS0+ZG1hX21vZGUgPSBtb2RlOwogCWRtYS0+aW52YWxpZCA9IDE7CkBAIC0xNjQsNDIgKzE4Niw0MiBAQAogCiAvKiBFbmFibGUgRE1BIGNoYW5uZWwKICAqLwotdm9pZCBlbmFibGVfZG1hIChkbWFjaF90IGNoYW5uZWwpCit2b2lkIGVuYWJsZV9kbWEgKHVuc2lnbmVkIGludCBjaGFuKQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCiAJaWYgKCFkbWEtPmxvY2spCiAJCWdvdG8gZnJlZV9kbWE7CiAKIAlpZiAoZG1hLT5hY3RpdmUgPT0gMCkgewogCQlkbWEtPmFjdGl2ZSA9IDE7Ci0JCWRtYS0+ZF9vcHMtPmVuYWJsZShjaGFubmVsLCBkbWEpOworCQlkbWEtPmRfb3BzLT5lbmFibGUoY2hhbiwgZG1hKTsKIAl9CiAJcmV0dXJuOwogCiBmcmVlX2RtYToKLQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZW5hYmxlIGZyZWUgRE1BXG4iLCBjaGFubmVsKTsKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZW5hYmxlIGZyZWUgRE1BXG4iLCBjaGFuKTsKIAlCVUcoKTsKIH0KIEVYUE9SVF9TWU1CT0woZW5hYmxlX2RtYSk7CiAKIC8qIERpc2FibGUgRE1BIGNoYW5uZWwKICAqLwotdm9pZCBkaXNhYmxlX2RtYSAoZG1hY2hfdCBjaGFubmVsKQordm9pZCBkaXNhYmxlX2RtYSAodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoIWRtYS0+bG9jaykKIAkJZ290byBmcmVlX2RtYTsKIAogCWlmIChkbWEtPmFjdGl2ZSA9PSAxKSB7CiAJCWRtYS0+YWN0aXZlID0gMDsKLQkJZG1hLT5kX29wcy0+ZGlzYWJsZShjaGFubmVsLCBkbWEpOworCQlkbWEtPmRfb3BzLT5kaXNhYmxlKGNoYW4sIGRtYSk7CiAJfQogCXJldHVybjsKIAogZnJlZV9kbWE6Ci0JcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdHJ5aW5nIHRvIGRpc2FibGUgZnJlZSBETUFcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBkaXNhYmxlIGZyZWUgRE1BXG4iLCBjaGFuKTsKIAlCVUcoKTsKIH0KIEVYUE9SVF9TWU1CT0woZGlzYWJsZV9kbWEpOwpAQCAtMjA3LDQ1ICsyMjksMzggQEAKIC8qCiAgKiBJcyB0aGUgc3BlY2lmaWVkIERNQSBjaGFubmVsIGFjdGl2ZT8KICAqLwotaW50IGRtYV9jaGFubmVsX2FjdGl2ZShkbWFjaF90IGNoYW5uZWwpCitpbnQgZG1hX2NoYW5uZWxfYWN0aXZlKHVuc2lnbmVkIGludCBjaGFuKQogewotCXJldHVybiBkbWFfY2hhbltjaGFubmVsXS5hY3RpdmU7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOworCXJldHVybiBkbWEtPmFjdGl2ZTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2NoYW5uZWxfYWN0aXZlKTsKIAotdm9pZCBzZXRfZG1hX3BhZ2UoZG1hY2hfdCBjaGFubmVsLCBjaGFyIHBhZ2VucikKK3ZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBjaGFuLCBjaGFyIHBhZ2VucikKIHsKLQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gc2V0X2RtYV9wYWdlXG4iLCBjaGFubmVsKTsKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gc2V0X2RtYV9wYWdlXG4iLCBjaGFuKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X2RtYV9wYWdlKTsKIAotdm9pZCBzZXRfZG1hX3NwZWVkKGRtYWNoX3QgY2hhbm5lbCwgaW50IGN5Y2xlX25zKQordm9pZCBzZXRfZG1hX3NwZWVkKHVuc2lnbmVkIGludCBjaGFuLCBpbnQgY3ljbGVfbnMpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZG1hLT5kX29wcy0+c2V0c3BlZWQpCi0JCXJldCA9IGRtYS0+ZF9vcHMtPnNldHNwZWVkKGNoYW5uZWwsIGRtYSwgY3ljbGVfbnMpOworCQlyZXQgPSBkbWEtPmRfb3BzLT5zZXRzcGVlZChjaGFuLCBkbWEsIGN5Y2xlX25zKTsKIAlkbWEtPnNwZWVkID0gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXRfZG1hX3NwZWVkKTsKIAotaW50IGdldF9kbWFfcmVzaWR1ZShkbWFjaF90IGNoYW5uZWwpCitpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBjaGFuKQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCWludCByZXQgPSAwOwogCiAJaWYgKGRtYS0+ZF9vcHMtPnJlc2lkdWUpCi0JCXJldCA9IGRtYS0+ZF9vcHMtPnJlc2lkdWUoY2hhbm5lbCwgZG1hKTsKKwkJcmV0ID0gZG1hLT5kX29wcy0+cmVzaWR1ZShjaGFuLCBkbWEpOwogCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X2RtYV9yZXNpZHVlKTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9kbWEodm9pZCkKLXsKLQlhcmNoX2RtYV9pbml0KGRtYV9jaGFuKTsKLQlyZXR1cm4gMDsKLX0KLQotY29yZV9pbml0Y2FsbChpbml0X2RtYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCA4NTA0MGNmLi5kNjYyYTJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vdmZwbWFjcm9zLmg+CiAjaW5jbHVkZSA8bWFjaC9lbnRyeS1tYWNyby5TPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKQEAgLTEyMyw2ICsxMjQsOCBAQAogI2VuZGlmCiAKIAkubWFjcm8Jc3ZjX2VudHJ5LCBzdGFja19ob2xlPTAKKyBVTldJTkQoLmZuc3RhcnQJCSkKKyBVTldJTkQoLnNhdmUge3IwIC0gcGN9CQkpCiAJc3ViCXNwLCBzcCwgIyhTX0ZSQU1FX1NJWkUgKyBcc3RhY2tfaG9sZSkKICBTUEZJWCgJdHN0CXNwLCAjNAkJKQogIFNQRklYKAliaWNuZQlzcCwgc3AsICM0CSkKQEAgLTE5Niw2ICsxOTksNyBAQAogCWxkcglyMCwgW3NwLCAjU19QU1JdCiAJbXNyCXNwc3JfY3hzZiwgcjAKIAlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgbG9hZCByMCAtIHBjLCBjcHNyCisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX2RhYnRfc3ZjKQogCiAJLmFsaWduCTUKQEAgLTIyOCw2ICsyMzIsNyBAQAogCWJsZXEJdHJhY2VfaGFyZGlycXNfb24KICNlbmRpZgogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9faXJxX3N2YykKIAogCS5sdG9yZwpAQCAtMjc4LDYgKzI4Myw3IEBACiAJbGRyCWxyLCBbc3AsICNTX1BTUl0JCUAgR2V0IFNWQyBjcHNyCiAJbXNyCXNwc3JfY3hzZiwgbHIKIAlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgUmVzdG9yZSBTVkMgcmVnaXN0ZXJzCisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX3VuZF9zdmMpCiAKIAkuYWxpZ24JNQpAQCAtMzIwLDYgKzMyNiw3IEBACiAJbGRyCXIwLCBbc3AsICNTX1BTUl0KIAltc3IJc3Bzcl9jeHNmLCByMAogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fcGFidF9zdmMpCiAKIAkuYWxpZ24JNQpAQCAtMzQzLDYgKzM1MCw4IEBACiAjZW5kaWYKIAogCS5tYWNybwl1c3JfZW50cnkKKyBVTldJTkQoLmZuc3RhcnQJKQorIFVOV0lORCguY2FudHVud2luZAkpCUAgZG9uJ3QgdW53aW5kIHRoZSB1c2VyIHNwYWNlCiAJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQogCXN0bWliCXNwLCB7cjEgLSByMTJ9CiAKQEAgLTQyMCw2ICs0MjksNyBAQAogCW1vdglyMiwgc3AKIAlhZHIJbHIsIHJldF9mcm9tX2V4Y2VwdGlvbgogCWIJZG9fRGF0YUFib3J0CisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX2RhYnRfdXNyKQogCiAJLmFsaWduCTUKQEAgLTQ1MCw2ICs0NjAsNyBAQAogCiAJbW92CXdoeSwgIzAKIAliCXJldF90b191c2VyCisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX2lycV91c3IpCiAKIAkubHRvcmcKQEAgLTQ4NCw2ICs0OTUsNyBAQAogI2Vsc2UKIAliCV9fdW5kX3Vzcl91bmtub3duCiAjZW5kaWYKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fdW5kX3VzcikKIAogCUAKQEAgLTY3MSwxNCArNjgzLDE4IEBACiAJZW5hYmxlX2lycQkJCQlAIEVuYWJsZSBpbnRlcnJ1cHRzCiAJbW92CXIxLCBzcAkJCQlAIHJlZ3MKIAlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgorIFVOV0lORCguZm5lbmQJCSkKIAkvKiBmYWxsIHRocm91Z2ggKi8KIC8qCiAgKiBUaGlzIGlzIHRoZSByZXR1cm4gY29kZSB0byB1c2VyIG1vZGUgZm9yIGFib3J0IGhhbmRsZXJzCiAgKi8KIEVOVFJZKHJldF9mcm9tX2V4Y2VwdGlvbikKKyBVTldJTkQoLmZuc3RhcnQJKQorIFVOV0lORCguY2FudHVud2luZAkpCiAJZ2V0X3RocmVhZF9pbmZvIHRzawogCW1vdgl3aHksICMwCiAJYglyZXRfdG9fdXNlcgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19wYWJ0X3VzcikKIEVORFBST0MocmV0X2Zyb21fZXhjZXB0aW9uKQogCkBAIC02ODgsNiArNzA0LDggQEAKICAqIHByZXZpb3VzIGFuZCBuZXh0IGFyZSBndWFyYW50ZWVkIG5vdCB0byBiZSB0aGUgc2FtZS4KICAqLwogRU5UUlkoX19zd2l0Y2hfdG8pCisgVU5XSU5EKC5mbnN0YXJ0CSkKKyBVTldJTkQoLmNhbnR1bndpbmQJKQogCWFkZAlpcCwgcjEsICNUSV9DUFVfU0FWRQogCWxkcglyMywgW3IyLCAjVElfVFBfVkFMVUVdCiAJc3RtaWEJaXAhLCB7cjQgLSBzbCwgZnAsIHNwLCBscn0JQCBTdG9yZSBtb3N0IHJlZ3Mgb24gc3RhY2sKQEAgLTcxNyw2ICs3MzUsNyBAQAogCWJsCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluCiAJbW92CXIwLCByNQogCWxkbWlhCXI0LCB7cjQgLSBzbCwgZnAsIHNwLCBwY30JQCBMb2FkIGFsbCByZWdzIHNhdmVkIHByZXZpb3VzbHkKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fc3dpdGNoX3RvKQogCiAJX19JTklUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggMTU5ZDA0MS4uYjU1Y2IwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CiAjaW5jbHVkZSA8bWFjaC9lbnRyeS1tYWNyby5TPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgImVudHJ5LWhlYWRlci5TIgogCkBAIC0yMiw2ICsyMyw4IEBACiAgKiBzdGFjay4KICAqLwogcmV0X2Zhc3Rfc3lzY2FsbDoKKyBVTldJTkQoLmZuc3RhcnQJKQorIFVOV0lORCguY2FudHVud2luZAkpCiAJZGlzYWJsZV9pcnEJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKIAlsZHIJcjEsIFt0c2ssICNUSV9GTEFHU10KIAl0c3QJcjEsICNfVElGX1dPUktfTUFTSwpAQCAtMzgsNiArNDEsNyBAQAogCW1vdglyMCwgcjAKIAlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQwogCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKKyBVTldJTkQoLmZuZW5kCQkpCiAKIC8qCiAgKiBPaywgd2UgbmVlZCB0byBkbyBleHRyYSBwcm9jZXNzaW5nLCBlbnRlciB0aGUgc2xvdyBwYXRoLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDM2M2RiMTguLjY4NzRjN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpAQCAtMTA0LDYgKzEwNCwxMSBAQAogCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoYmFkX2lycV9kZXNjLmxvY2spLAogfTsKIAorI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCisvKiBXZSBhcmUgbm90IGFsbG9jYXRpbmcgYmFkX2lycV9kZXNjLmFmZmluaXR5IG9yIC5wZW5kaW5nX21hc2sgKi8KKyNlcnJvciAiQVJNIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19DUFVNQVNLX09GRlNUQUNLLiIKKyNlbmRpZgorCiAvKgogICogZG9fSVJRIGhhbmRsZXMgYWxsIGhhcmR3YXJlIElSUSdzLiAgRGVjb2RlZCBJUlFzIHNob3VsZCBub3QKICAqIGNvbWUgdmlhIHRoaXMgZnVuY3Rpb24uICBJbnN0ZWFkLCB0aGV5IHNob3VsZCBwcm92aWRlIHRoZWlyCkBAIC0xNjEsNyArMTY2LDcgQEAKIAkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVCB8IElSUV9OT1BST0JFOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWJhZF9pcnFfZGVzYy5hZmZpbml0eSA9IENQVV9NQVNLX0FMTDsKKwljcHVtYXNrX3NldGFsbChiYWRfaXJxX2Rlc2MuYWZmaW5pdHkpOwogCWJhZF9pcnFfZGVzYy5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAjZW5kaWYKIAlpbml0X2FyY2hfaXJxKCk7CkBAIC0xOTEsMTUgKzE5NiwxNiBAQAogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7CiAKIAkJaWYgKGRlc2MtPmNwdSA9PSBjcHUpIHsKLQkJCXVuc2lnbmVkIGludCBuZXdjcHUgPSBhbnlfb25saW5lX2NwdShkZXNjLT5hZmZpbml0eSk7Ci0KLQkJCWlmIChuZXdjcHUgPT0gTlJfQ1BVUykgeworCQkJdW5zaWduZWQgaW50IG5ld2NwdSA9IGNwdW1hc2tfYW55X2FuZChkZXNjLT5hZmZpbml0eSwKKwkJCQkJCQkgICAgICBjcHVfb25saW5lX21hc2spOworCQkJaWYgKG5ld2NwdSA+PSBucl9jcHVfaWRzKSB7CiAJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiSVJRJXUgbm8gbG9uZ2VyIGFmZmluZSB0byBDUFUldVxuIiwKIAkJCQkJICAgICAgIGksIGNwdSk7CiAKLQkJCQljcHVzX3NldGFsbChkZXNjLT5hZmZpbml0eSk7Ci0JCQkJbmV3Y3B1ID0gYW55X29ubGluZV9jcHUoZGVzYy0+YWZmaW5pdHkpOworCQkJCWNwdW1hc2tfc2V0YWxsKGRlc2MtPmFmZmluaXR5KTsKKwkJCQluZXdjcHUgPSBjcHVtYXNrX2FueV9hbmQoZGVzYy0+YWZmaW5pdHksCisJCQkJCQkJIGNwdV9vbmxpbmVfbWFzayk7CiAJCQl9CiAKIAkJCXJvdXRlX2lycShkZXNjLCBpLCBuZXdjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCmluZGV4IGRhYjQ4ZjIuLmQxNzMxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKIC8qCkBAIC02Niw2ICs2NywyNCBAQAogCQkJICAgICAgY2hhciAqc2Vjc3RyaW5ncywKIAkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorCUVsZl9TaGRyICpzLCAqc2VjaGRyc19lbmQgPSBzZWNoZHJzICsgaGRyLT5lX3NobnVtOworCisJZm9yIChzID0gc2VjaGRyczsgcyA8IHNlY2hkcnNfZW5kOyBzKyspIHsKKwkJaWYgKHN0cmNtcCgiLkFSTS5leGlkeC5pbml0LnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC51bndfc2VjX2luaXQgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi5BUk0uZXhpZHguZGV2aW5pdC50ZXh0Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2gudW53X3NlY19kZXZpbml0ID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuQVJNLmV4aWR4Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2gudW53X3NlY19jb3JlID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuaW5pdC50ZXh0Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2guc2VjX2luaXRfdGV4dCA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLmRldmluaXQudGV4dCIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSA9PSAwKQorCQkJbW9kLT5hcmNoLnNlY19kZXZpbml0X3RleHQgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi50ZXh0Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2guc2VjX2NvcmVfdGV4dCA9IHM7CisJfQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNCw2ICsxMjMsMTAgQEAKIAkJbG9jID0gZHN0c2VjLT5zaF9hZGRyICsgcmVsLT5yX29mZnNldDsKIAogCQlzd2l0Y2ggKEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbykpIHsKKwkJY2FzZSBSX0FSTV9OT05FOgorCQkJLyogaWdub3JlICovCisJCQlicmVhazsKKwogCQljYXNlIFJfQVJNX0FCUzMyOgogCQkJKih1MzIgKilsb2MgKz0gc3ltLT5zdF92YWx1ZTsKIAkJCWJyZWFrOwpAQCAtMTMyLDYgKzE1NSwyMCBAQAogCQkJKih1MzIgKilsb2MgfD0gb2Zmc2V0ICYgMHgwMGZmZmZmZjsKIAkJCWJyZWFrOwogCisJICAgICAgIGNhc2UgUl9BUk1fVjRCWDoKKwkJICAgICAgIC8qIFByZXNlcnZlIFJtIGFuZCB0aGUgY29uZGl0aW9uIGNvZGUuIEFsdGVyCisJCQkqIG90aGVyIGJpdHMgdG8gcmUtY29kZSBpbnN0cnVjdGlvbiBhcworCQkJKiBNT1YgUEMsUm0uCisJCQkqLworCQkgICAgICAgKih1MzIgKilsb2MgJj0gMHhmMDAwMDAwZjsKKwkJICAgICAgICoodTMyICopbG9jIHw9IDB4MDFhMGYwMDA7CisJCSAgICAgICBicmVhazsKKworCQljYXNlIFJfQVJNX1BSRUwzMToKKwkJCW9mZnNldCA9ICoodTMyICopbG9jICsgc3ltLT5zdF92YWx1ZSAtIGxvYzsKKwkJCSoodTMyICopbG9jID0gb2Zmc2V0ICYgMHg3ZmZmZmZmZjsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIHJlbG9jYXRpb246ICV1XG4iLAogCQkJICAgICAgIG1vZHVsZS0+bmFtZSwgRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKSk7CkBAIC0xNTAsMTQgKzE4Nyw1MCBAQAogCXJldHVybiAtRU5PRVhFQzsKIH0KIAorI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECitzdGF0aWMgdm9pZCByZWdpc3Rlcl91bndpbmRfdGFibGVzKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlpZiAobW9kLT5hcmNoLnVud19zZWNfaW5pdCAmJiBtb2QtPmFyY2guc2VjX2luaXRfdGV4dCkKKwkJbW9kLT5hcmNoLnVud2luZF9pbml0ID0KKwkJCXVud2luZF90YWJsZV9hZGQobW9kLT5hcmNoLnVud19zZWNfaW5pdC0+c2hfYWRkciwKKwkJCQkJIG1vZC0+YXJjaC51bndfc2VjX2luaXQtPnNoX3NpemUsCisJCQkJCSBtb2QtPmFyY2guc2VjX2luaXRfdGV4dC0+c2hfYWRkciwKKwkJCQkJIG1vZC0+YXJjaC5zZWNfaW5pdF90ZXh0LT5zaF9zaXplKTsKKwlpZiAobW9kLT5hcmNoLnVud19zZWNfZGV2aW5pdCAmJiBtb2QtPmFyY2guc2VjX2RldmluaXRfdGV4dCkKKwkJbW9kLT5hcmNoLnVud2luZF9kZXZpbml0ID0KKwkJCXVud2luZF90YWJsZV9hZGQobW9kLT5hcmNoLnVud19zZWNfZGV2aW5pdC0+c2hfYWRkciwKKwkJCQkJIG1vZC0+YXJjaC51bndfc2VjX2RldmluaXQtPnNoX3NpemUsCisJCQkJCSBtb2QtPmFyY2guc2VjX2RldmluaXRfdGV4dC0+c2hfYWRkciwKKwkJCQkJIG1vZC0+YXJjaC5zZWNfZGV2aW5pdF90ZXh0LT5zaF9zaXplKTsKKwlpZiAobW9kLT5hcmNoLnVud19zZWNfY29yZSAmJiBtb2QtPmFyY2guc2VjX2NvcmVfdGV4dCkKKwkJbW9kLT5hcmNoLnVud2luZF9jb3JlID0KKwkJCXVud2luZF90YWJsZV9hZGQobW9kLT5hcmNoLnVud19zZWNfY29yZS0+c2hfYWRkciwKKwkJCQkJIG1vZC0+YXJjaC51bndfc2VjX2NvcmUtPnNoX3NpemUsCisJCQkJCSBtb2QtPmFyY2guc2VjX2NvcmVfdGV4dC0+c2hfYWRkciwKKwkJCQkJIG1vZC0+YXJjaC5zZWNfY29yZV90ZXh0LT5zaF9zaXplKTsKK30KKworc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl91bndpbmRfdGFibGVzKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwl1bndpbmRfdGFibGVfZGVsKG1vZC0+YXJjaC51bndpbmRfaW5pdCk7CisJdW53aW5kX3RhYmxlX2RlbChtb2QtPmFyY2gudW53aW5kX2RldmluaXQpOworCXVud2luZF90YWJsZV9kZWwobW9kLT5hcmNoLnVud2luZF9jb3JlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQorI2VuZGlmCisKIGludAogbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZjMyX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKIHsKKwlyZWdpc3Rlcl91bndpbmRfdGFibGVzKG1vZHVsZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQKIG1vZHVsZV9hcmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXVucmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhtb2QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZDNlYTZmYS4uMmRlMTRlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX25vdGlmeS5oPgorI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvY2Vzc29yX21vZGVzW10gPSB7CkBAIC04Miw3ICs4Myw3IEBACiBfX3NldHVwKCJub2hsdCIsIG5vaGx0X3NldHVwKTsKIF9fc2V0dXAoImhsdCIsIGhsdF9zZXR1cCk7CiAKLXZvaWQgYXJtX21hY2hpbmVfcmVzdGFydChjaGFyIG1vZGUpCit2b2lkIGFybV9tYWNoaW5lX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBDbGVhbiBhbmQgZGlzYWJsZSBjYWNoZSwgYW5kIHR1cm4gb2ZmIGludGVycnVwdHMKQEAgLTk5LDcgKzEwMCw3IEBACiAJLyoKIAkgKiBOb3cgY2FsbCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHJlYm9vdCBjb2RlLgogCSAqLwotCWFyY2hfcmVzZXQobW9kZSk7CisJYXJjaF9yZXNldChtb2RlLCBjbWQpOwogCiAJLyoKIAkgKiBXaG9vcHMgLSB0aGUgYXJjaGl0ZWN0dXJlIHdhcyB1bmFibGUgdG8gcmVib290LgpAQCAtMTE5LDcgKzEyMCw3IEBACiB2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKIEVYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKIAotdm9pZCAoKmFybV9wbV9yZXN0YXJ0KShjaGFyIHN0cikgPSBhcm1fbWFjaGluZV9yZXN0YXJ0Owordm9pZCAoKmFybV9wbV9yZXN0YXJ0KShjaGFyIHN0ciwgY29uc3QgY2hhciAqY21kKSA9IGFybV9tYWNoaW5lX3Jlc3RhcnQ7CiBFWFBPUlRfU1lNQk9MX0dQTChhcm1fcG1fcmVzdGFydCk7CiAKIApAQCAtMTk0LDkgKzE5NSw5IEBACiAJCXBtX3Bvd2VyX29mZigpOwogfQogCi12b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpjbWQpCiB7Ci0JYXJtX3BtX3Jlc3RhcnQocmVib290X21vZGUpOworCWFybV9wbV9yZXN0YXJ0KHJlYm9vdF9tb2RlLCBjbWQpOwogfQogCiB2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMzcyLDIzICszNzMsMjEgQEAKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXVuc2lnbmVkIGxvbmcgZnAsIGxyOwotCXVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsIHN0YWNrX2VuZDsKKwlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcmFtZTsKIAlpbnQgY291bnQgPSAwOwogCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQogCQlyZXR1cm4gMDsKIAotCXN0YWNrX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZW5kX29mX3N0YWNrKHApOwotCXN0YWNrX2VuZCA9ICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShwKSArIFRIUkVBRF9TSVpFOwotCi0JZnAgPSB0aHJlYWRfc2F2ZWRfZnAocCk7CisJZnJhbWUuZnAgPSB0aHJlYWRfc2F2ZWRfZnAocCk7CisJZnJhbWUuc3AgPSB0aHJlYWRfc2F2ZWRfc3AocCk7CisJZnJhbWUubHIgPSAwOwkJCS8qIHJlY292ZXJlZCBmcm9tIHRoZSBzdGFjayAqLworCWZyYW1lLnBjID0gdGhyZWFkX3NhdmVkX3BjKHApOwogCWRvIHsKLQkJaWYgKGZwIDwgc3RhY2tfc3RhcnQgfHwgZnAgPiBzdGFja19lbmQpCisJCWludCByZXQgPSB1bndpbmRfZnJhbWUoJmZyYW1lKTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gMDsKLQkJbHIgPSAoKHVuc2lnbmVkIGxvbmcgKilmcClbLTFdOwotCQlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhscikpCi0JCQlyZXR1cm4gbHI7Ci0JCWZwID0gKih1bnNpZ25lZCBsb25nICopIChmcCAtIDEyKTsKKwkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMoZnJhbWUucGMpKQorCQkJcmV0dXJuIGZyYW1lLnBjOwogCX0gd2hpbGUgKGNvdW50ICsrIDwgMTYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCmluZGV4IGRmNjUzZWEuLjg5ODgyYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKQEAgLTY1Myw2ICs2NTMsNTQgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1ZGUAorLyoKKyAqIEdldCB0aGUgY2hpbGQgVkZQIHN0YXRlLgorICovCitzdGF0aWMgaW50IHB0cmFjZV9nZXR2ZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB2b2lkIF9fdXNlciAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKKwl1bmlvbiB2ZnBfc3RhdGUgKnZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOworCXN0cnVjdCB1c2VyX3ZmcCBfX3VzZXIgKnVmcCA9IGRhdGE7CisKKwl2ZnBfc3luY19zdGF0ZSh0aHJlYWQpOworCisJLyogY29weSB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCisJaWYgKGNvcHlfdG9fdXNlcigmdWZwLT5mcHJlZ3MsICZ2ZnAtPmhhcmQuZnByZWdzLAorCQkJIHNpemVvZih2ZnAtPmhhcmQuZnByZWdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogY29weSB0aGUgc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyICovCisJaWYgKHB1dF91c2VyKHZmcC0+aGFyZC5mcHNjciwgJnVmcC0+ZnBzY3IpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRoZSBjaGlsZCBWRlAgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgcHRyYWNlX3NldHZmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHZvaWQgX191c2VyICpkYXRhKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyh0c2spOworCXVuaW9uIHZmcF9zdGF0ZSAqdmZwID0gJnRocmVhZC0+dmZwc3RhdGU7CisJc3RydWN0IHVzZXJfdmZwIF9fdXNlciAqdWZwID0gZGF0YTsKKworCXZmcF9zeW5jX3N0YXRlKHRocmVhZCk7CisKKwkvKiBjb3B5IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJnZmcC0+aGFyZC5mcHJlZ3MsICZ1ZnAtPmZwcmVncywKKwkJCSAgIHNpemVvZih2ZnAtPmhhcmQuZnByZWdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogY29weSB0aGUgc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyICovCisJaWYgKGdldF91c2VyKHZmcC0+aGFyZC5mcHNjciwgJnVmcC0+ZnBzY3IpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAlpbnQgcmV0OwpAQCAtNzc1LDYgKzgyMywxNiBAQAogCQkJYnJlYWs7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19WRlAKKwkJY2FzZSBQVFJBQ0VfR0VUVkZQUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9nZXR2ZnByZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKilkYXRhKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFRSQUNFX1NFVFZGUFJFR1M6CisJCQlyZXQgPSBwdHJhY2Vfc2V0dmZwcmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopZGF0YSk7CisJCQlicmVhazsKKyNlbmRpZgorCiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggNjhkNjQ5NC4uYmM1ZTQxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAiY29tcGF0LmgiCiAjaW5jbHVkZSAiYXRhZ3MuaCIKQEAgLTY4NSw2ICs2ODYsOCBAQAogCXN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjOwogCWNoYXIgKmZyb20gPSBkZWZhdWx0X2NvbW1hbmRfbGluZTsKIAorCXVud2luZF9pbml0KCk7CisKIAlzZXR1cF9wcm9jZXNzb3IoKTsKIAltZGVzYyA9IHNldHVwX21hY2hpbmUobWFjaGluZV9hcmNoX3R5cGUpOwogCW1hY2hpbmVfbmFtZSA9IG1kZXNjLT5uYW1lOwpAQCAtNzgwLDYgKzc4Myw4IEBACiAJImNydW5jaCIsCiAJInRodW1iZWUiLAogCSJuZW9uIiwKKwkidmZwdjMiLAorCSJ2ZnB2M2QxNiIsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IDU1ZmE3ZmYuLjc4MDFhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTkzLDYgKzkzLDcgQEAKIAlwbWQgPSBwbWRfb2Zmc2V0KHBnZCArIHBnZF9pbmRleChQSFlTX09GRlNFVCksIFBIWVNfT0ZGU0VUKTsKIAkqcG1kID0gX19wbWQoKFBIWVNfT0ZGU0VUICYgUEdESVJfTUFTSykgfAogCQkgICAgIFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSk7CisJZmx1c2hfcG1kX2VudHJ5KHBtZCk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gdGVsbCB0aGUgc2Vjb25kYXJ5IGNvcmUgd2hlcmUgdG8gZmluZApAQCAtMTMwLDYgKzEzMSw3IEBACiAJc2Vjb25kYXJ5X2RhdGEucGdkaXIgPSAwOwogCiAJKnBtZCA9IF9fcG1kKDApOworCWNsZWFuX3BtZF9lbnRyeShwbWQpOwogCXBnZF9mcmVlKCZpbml0X21tLCBwZ2QpOwogCiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggZmM2NTBmNi4uOWY0NDRlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0yLDM0ICsyLDU5IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CiAKLSNpbmNsdWRlICJzdGFja3RyYWNlLmgiCisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAotaW50IHdhbGtfc3RhY2tmcmFtZSh1bnNpZ25lZCBsb25nIGZwLCB1bnNpZ25lZCBsb25nIGxvdywgdW5zaWduZWQgbG9uZyBoaWdoLAotCQkgICAgaW50ICgqZm4pKHN0cnVjdCBzdGFja2ZyYW1lICosIHZvaWQgKiksIHZvaWQgKmRhdGEpCisjaWYgZGVmaW5lZChDT05GSUdfRlJBTUVfUE9JTlRFUikgJiYgIWRlZmluZWQoQ09ORklHX0FSTV9VTldJTkQpCisvKgorICogVW53aW5kIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lIGFuZCBzdG9yZSB0aGUgbmV3IHJlZ2lzdGVyIHZhbHVlcyBpbiB0aGUKKyAqIHN0cnVjdHVyZSBwYXNzZWQgYXMgYXJndW1lbnQuIFVud2luZGluZyBpcyBlcXVpdmFsZW50IHRvIGEgZnVuY3Rpb24gcmV0dXJuLAorICogaGVuY2UgdGhlIG5ldyBQQyB2YWx1ZSByYXRoZXIgdGhhbiBMUiBzaG91bGQgYmUgdXNlZCBmb3IgYmFja3RyYWNlLgorICoKKyAqIFdpdGggZnJhbWVwb2ludGVyIGVuYWJsZWQsIGEgc2ltcGxlIGZ1bmN0aW9uIHByb2xvZ3VlIGxvb2tzIGxpa2UgdGhpczoKKyAqCW1vdglpcCwgc3AKKyAqCXN0bWRiCXNwISwge2ZwLCBpcCwgbHIsIHBjfQorICoJc3ViCWZwLCBpcCwgIzQKKyAqCisgKiBBIHNpbXBsZSBmdW5jdGlvbiBlcGlsb2d1ZSBsb29rcyBsaWtlIHRoaXM6CisgKglsZG0Jc3AsIHtmcCwgc3AsIHBjfQorICoKKyAqIE5vdGUgdGhhdCB3aXRoIGZyYW1lcG9pbnRlciBlbmFibGVkLCBldmVuIHRoZSBsZWFmIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lCisgKiBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUsIHRoZXJlZm9yZSB3ZSBjYW4gaWdub3JlIHRoZSBMUiB2YWx1ZSBpbiB0aGlzIGNhc2UuCisgKi8KK2ludCB1bndpbmRfZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lKQogewotCXN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZTsKKwl1bnNpZ25lZCBsb25nIGhpZ2gsIGxvdzsKKwl1bnNpZ25lZCBsb25nIGZwID0gZnJhbWUtPmZwOwogCi0JZG8gewotCQkvKgotCQkgKiBDaGVjayBjdXJyZW50IGZyYW1lIHBvaW50ZXIgaXMgd2l0aGluIGJvdW5kcwotCQkgKi8KLQkJaWYgKGZwIDwgKGxvdyArIDEyKSB8fCBmcCArIDQgPj0gaGlnaCkKLQkJCWJyZWFrOworCS8qIG9ubHkgZ28gdG8gYSBoaWdoZXIgYWRkcmVzcyBvbiB0aGUgc3RhY2sgKi8KKwlsb3cgPSBmcmFtZS0+c3A7CisJaGlnaCA9IEFMSUdOKGxvdywgVEhSRUFEX1NJWkUpICsgVEhSRUFEX1NJWkU7CiAKLQkJZnJhbWUgPSAoc3RydWN0IHN0YWNrZnJhbWUgKikoZnAgLSAxMik7CisJLyogY2hlY2sgY3VycmVudCBmcmFtZSBwb2ludGVyIGlzIHdpdGhpbiBib3VuZHMgKi8KKwlpZiAoZnAgPCAobG93ICsgMTIpIHx8IGZwICsgNCA+PSBoaWdoKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBmcmFtZSAqLworCWZyYW1lLT5mcCA9ICoodW5zaWduZWQgbG9uZyAqKShmcCAtIDEyKTsKKwlmcmFtZS0+c3AgPSAqKHVuc2lnbmVkIGxvbmcgKikoZnAgLSA4KTsKKwlmcmFtZS0+cGMgPSAqKHVuc2lnbmVkIGxvbmcgKikoZnAgLSA0KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwKKwkJICAgICBpbnQgKCpmbikoc3RydWN0IHN0YWNrZnJhbWUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwl3aGlsZSAoMSkgeworCQlpbnQgcmV0OwogCiAJCWlmIChmbihmcmFtZSwgZGF0YSkpCiAJCQlicmVhazsKLQotCQkvKgotCQkgKiBVcGRhdGUgdGhlIGxvdyBib3VuZCAtIHRoZSBuZXh0IGZyYW1lIG11c3QgYWx3YXlzCi0JCSAqIGJlIGF0IGEgaGlnaGVyIGFkZHJlc3MgdGhhbiB0aGUgY3VycmVudCBmcmFtZS4KLQkJICovCi0JCWxvdyA9IGZwICsgNDsKLQkJZnAgPSBmcmFtZS0+ZnA7Ci0JfSB3aGlsZSAoZnApOwotCi0JcmV0dXJuIDA7CisJCXJldCA9IHVud2luZF9mcmFtZShmcmFtZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQogfQogRVhQT1JUX1NZTUJPTCh3YWxrX3N0YWNrZnJhbWUpOwogCkBAIC00NCw3ICs2OSw3IEBACiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlX2RhdGEgKmRhdGEgPSBkOwogCXN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UgPSBkYXRhLT50cmFjZTsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBmcmFtZS0+bHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gZnJhbWUtPnBjOwogCiAJaWYgKGRhdGEtPm5vX3NjaGVkX2Z1bmN0aW9ucyAmJiBpbl9zY2hlZF9mdW5jdGlvbnMoYWRkcikpCiAJCXJldHVybiAwOwpAQCAtNjEsMTEgKzg2LDEwIEBACiB2b2lkIHNhdmVfc3RhY2tfdHJhY2VfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQogewogCXN0cnVjdCBzdGFja190cmFjZV9kYXRhIGRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmcCwgYmFzZTsKKwlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcmFtZTsKIAogCWRhdGEudHJhY2UgPSB0cmFjZTsKIAlkYXRhLnNraXAgPSB0cmFjZS0+c2tpcDsKLQliYXNlID0gKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRzayk7CiAKIAlpZiAodHNrICE9IGN1cnJlbnQpIHsKICNpZmRlZiBDT05GSUdfU01QCkBAIC03NiwxNCArMTAwLDIyIEBACiAJCUJVRygpOwogI2Vsc2UKIAkJZGF0YS5ub19zY2hlZF9mdW5jdGlvbnMgPSAxOwotCQlmcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCQlmcmFtZS5mcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCQlmcmFtZS5zcCA9IHRocmVhZF9zYXZlZF9zcCh0c2spOworCQlmcmFtZS5sciA9IDA7CQkvKiByZWNvdmVyZWQgZnJvbSB0aGUgc3RhY2sgKi8KKwkJZnJhbWUucGMgPSB0aHJlYWRfc2F2ZWRfcGModHNrKTsKICNlbmRpZgogCX0gZWxzZSB7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgY3VycmVudF9zcCBhc20gKCJzcCIpOworCiAJCWRhdGEubm9fc2NoZWRfZnVuY3Rpb25zID0gMDsKLQkJYXNtKCJtb3YgJTAsIGZwIiA6ICI9ciIgKGZwKSk7CisJCWZyYW1lLmZwID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX2ZyYW1lX2FkZHJlc3MoMCk7CisJCWZyYW1lLnNwID0gY3VycmVudF9zcDsKKwkJZnJhbWUubHIgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJCWZyYW1lLnBjID0gKHVuc2lnbmVkIGxvbmcpc2F2ZV9zdGFja190cmFjZV90c2s7CiAJfQogCi0Jd2Fsa19zdGFja2ZyYW1lKGZwLCBiYXNlLCBiYXNlICsgVEhSRUFEX1NJWkUsIHNhdmVfdHJhY2UsICZkYXRhKTsKKwl3YWxrX3N0YWNrZnJhbWUoJmZyYW1lLCBzYXZlX3RyYWNlLCAmZGF0YSk7CiAJaWYgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKQogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IFVMT05HX01BWDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmggYi9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWZkMjBjYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1zdHJ1Y3Qgc3RhY2tmcmFtZSB7Ci0JdW5zaWduZWQgbG9uZyBmcDsKLQl1bnNpZ25lZCBsb25nIHNwOwotCXVuc2lnbmVkIGxvbmcgbHI7Ci0JdW5zaWduZWQgbG9uZyBwYzsKLX07Ci0KLWludCB3YWxrX3N0YWNrZnJhbWUodW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyBsb3csIHVuc2lnbmVkIGxvbmcgaGlnaCwKLQkJICAgIGludCAoKmZuKShzdHJ1Y3Qgc3RhY2tmcmFtZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCmluZGV4IGM2OGI0NGEuLjRjZGM0YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogLyoKQEAgLTU1LDE0ICs1NiwyMiBAQAogI2lmZGVmIENPTkZJR19TTVAKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIGZwLCBwYyA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CisJc3RydWN0IHN0YWNrZnJhbWUgZnJhbWU7CiAKLQlpZiAoaW5fbG9ja19mdW5jdGlvbnMocGMpKSB7Ci0JCWZwID0gcmVncy0+QVJNX2ZwOwotCQlwYyA9ICgodW5zaWduZWQgbG9uZyAqKWZwKVstMV07Ci0JfQorCWlmICghaW5fbG9ja19mdW5jdGlvbnMocmVncy0+QVJNX3BjKSkKKwkJcmV0dXJuIHJlZ3MtPkFSTV9wYzsKIAotCXJldHVybiBwYzsKKwlmcmFtZS5mcCA9IHJlZ3MtPkFSTV9mcDsKKwlmcmFtZS5zcCA9IHJlZ3MtPkFSTV9zcDsKKwlmcmFtZS5sciA9IHJlZ3MtPkFSTV9scjsKKwlmcmFtZS5wYyA9IHJlZ3MtPkFSTV9wYzsKKwlkbyB7CisJCWludCByZXQgPSB1bndpbmRfZnJhbWUoJmZyYW1lKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gMDsKKwl9IHdoaWxlIChpbl9sb2NrX2Z1bmN0aW9ucyhmcmFtZS5wYykpOworCisJcmV0dXJuIGZyYW1lLnBjOwogfQogRVhQT1JUX1NZTUJPTChwcm9maWxlX3BjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCA3OWFiYzRkLi41N2ViMGY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAicHRyYWNlLmgiCiAjaW5jbHVkZSAic2lnbmFsLmgiCkBAIC02MSw2ICs2Miw3IEBACiAJCWR1bXBfbWVtKCJFeGNlcHRpb24gc3RhY2siLCBmcmFtZSArIDQsIGZyYW1lICsgNCArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogfQogCisjaWZuZGVmIENPTkZJR19BUk1fVU5XSU5ECiAvKgogICogU3RhY2sgcG9pbnRlcnMgc2hvdWxkIGFsd2F5cyBiZSB3aXRoaW4gdGhlIGtlcm5lbHMgdmlldyBvZgogICogcGh5c2ljYWwgbWVtb3J5LiAgSWYgaXQgaXMgbm90IHRoZXJlLCB0aGVuIHdlIGNhbid0IGR1bXAKQEAgLTc0LDYgKzc2LDcgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIC8qCiAgKiBEdW1wIG91dCB0aGUgY29udGVudHMgb2Ygc29tZSBtZW1vcnkgbmljZWx5Li4uCkBAIC0xNTAsMTMgKzE1MywzMyBAQAogCXNldF9mcyhmcyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1bndpbmRfYmFja3RyYWNlKHJlZ3MsIHRzayk7Cit9CisjZWxzZQogc3RhdGljIHZvaWQgZHVtcF9iYWNrdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXVuc2lnbmVkIGludCBmcDsKKwl1bnNpZ25lZCBpbnQgZnAsIG1vZGU7CiAJaW50IG9rID0gMTsKIAogCXByaW50aygiQmFja3RyYWNlOiAiKTsKLQlmcCA9IHJlZ3MtPkFSTV9mcDsKKworCWlmICghdHNrKQorCQl0c2sgPSBjdXJyZW50OworCisJaWYgKHJlZ3MpIHsKKwkJZnAgPSByZWdzLT5BUk1fZnA7CisJCW1vZGUgPSBwcm9jZXNzb3JfbW9kZShyZWdzKTsKKwl9IGVsc2UgaWYgKHRzayAhPSBjdXJyZW50KSB7CisJCWZwID0gdGhyZWFkX3NhdmVkX2ZwKHRzayk7CisJCW1vZGUgPSAweDEwOworCX0gZWxzZSB7CisJCWFzbSgibW92ICUwLCBmcCIgOiAiPXIiIChmcCkgOiA6ICJjYyIpOworCQltb2RlID0gMHgxMDsKKwl9CisKIAlpZiAoIWZwKSB7CiAJCXByaW50aygibm8gZnJhbWUgcG9pbnRlciIpOwogCQlvayA9IDA7CkBAIC0xNjgsMjkgKzE5MSwyMCBAQAogCXByaW50aygiXG4iKTsKIAogCWlmIChvaykKLQkJY19iYWNrdHJhY2UoZnAsIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpKTsKKwkJY19iYWNrdHJhY2UoZnAsIG1vZGUpOwogfQorI2VuZGlmCiAKIHZvaWQgZHVtcF9zdGFjayh2b2lkKQogewotCV9fYmFja3RyYWNlKCk7CisJZHVtcF9iYWNrdHJhY2UoTlVMTCwgTlVMTCk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7CiAKIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyAqc3ApCiB7Ci0JdW5zaWduZWQgbG9uZyBmcDsKLQotCWlmICghdHNrKQotCQl0c2sgPSBjdXJyZW50OwotCi0JaWYgKHRzayAhPSBjdXJyZW50KQotCQlmcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOwotCWVsc2UKLQkJYXNtKCJtb3YgJTAsIGZwIiA6ICI9ciIgKGZwKSA6IDogImNjIik7Ci0KLQljX2JhY2t0cmFjZShmcCwgMHgxMCk7CisJZHVtcF9iYWNrdHJhY2UoTlVMTCwgdHNrKTsKIAliYXJyaWVyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGVkYzJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKgorICogU3RhY2sgdW53aW5kaW5nIHN1cHBvcnQgZm9yIEFSTQorICoKKyAqIEFuIEFSTSBFQUJJIHZlcnNpb24gb2YgZ2NjIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoZSB1bndpbmQKKyAqIHRhYmxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHVud2luZCB0YWJsZXMsCisgKiBzZWUgIkV4Y2VwdGlvbiBIYW5kbGluZyBBQkkgZm9yIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIiBhdDoKKyAqCisgKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2Muc3Vic2V0LnN3ZGV2LmFiaS9pbmRleC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorCisvKiBEdW1teSBmdW5jdGlvbnMgdG8gYXZvaWQgbGlua2VyIGNvbXBsYWludHMgKi8KK3ZvaWQgX19hZWFiaV91bndpbmRfY3BwX3ByMCh2b2lkKQoreworfTsKK0VYUE9SVF9TWU1CT0woX19hZWFiaV91bndpbmRfY3BwX3ByMCk7CisKK3ZvaWQgX19hZWFiaV91bndpbmRfY3BwX3ByMSh2b2lkKQoreworfTsKK0VYUE9SVF9TWU1CT0woX19hZWFiaV91bndpbmRfY3BwX3ByMSk7CisKK3ZvaWQgX19hZWFiaV91bndpbmRfY3BwX3ByMih2b2lkKQoreworfTsKK0VYUE9SVF9TWU1CT0woX19hZWFiaV91bndpbmRfY3BwX3ByMik7CisKK3N0cnVjdCB1bndpbmRfY3RybF9ibG9jayB7CisJdW5zaWduZWQgbG9uZyB2cnNbMTZdOwkJLyogdmlydHVhbCByZWdpc3RlciBzZXQgKi8KKwl1bnNpZ25lZCBsb25nICppbnNuOwkJLyogcG9pbnRlciB0byB0aGUgY3VycmVudCBpbnN0cnVjdGlvbnMgd29yZCAqLworCWludCBlbnRyaWVzOwkJCS8qIG51bWJlciBvZiBlbnRyaWVzIGxlZnQgdG8gaW50ZXJwcmV0ICovCisJaW50IGJ5dGU7CQkJLyogY3VycmVudCBieXRlIG51bWJlciBpbiB0aGUgaW5zdHJ1Y3Rpb25zIHdvcmQgKi8KK307CisKK2VudW0gcmVncyB7CisJRlAgPSAxMSwKKwlTUCA9IDEzLAorCUxSID0gMTQsCisJUEMgPSAxNQorfTsKKworZXh0ZXJuIHN0cnVjdCB1bndpbmRfaWR4IF9fc3RhcnRfdW53aW5kX2lkeFtdOworZXh0ZXJuIHN0cnVjdCB1bndpbmRfaWR4IF9fc3RvcF91bndpbmRfaWR4W107CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodW53aW5kX2xvY2spOworc3RhdGljIExJU1RfSEVBRCh1bndpbmRfdGFibGVzKTsKKworLyogQ29udmVydCBhIHByZWwzMSBzeW1ib2wgdG8gYW4gYWJzb2x1dGUgYWRkcmVzcyAqLworI2RlZmluZSBwcmVsMzFfdG9fYWRkcihwdHIpCQkJCVwKKyh7CQkJCQkJCVwKKwkvKiBzaWduLWV4dGVuZCB0byAzMiBiaXRzICovCQkJXAorCWxvbmcgb2Zmc2V0ID0gKCgobG9uZykqKHB0cikpIDw8IDEpID4+IDE7CVwKKwkodW5zaWduZWQgbG9uZykocHRyKSArIG9mZnNldDsJCQlcCit9KQorCisvKgorICogQmluYXJ5IHNlYXJjaCBpbiB0aGUgdW53aW5kIGluZGV4LiBUaGUgZW50cmllcyBlbnRyaWVzIGFyZQorICogZ3VhcmFudGVlZCB0byBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSBsaW5rZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW53aW5kX2lkeCAqc2VhcmNoX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHVud2luZF9pZHggKmZpcnN0LAorCQkJCSAgICAgICBzdHJ1Y3QgdW53aW5kX2lkeCAqbGFzdCkKK3sKKwlwcl9kZWJ1ZygiJXMoJTA4bHgsICVwLCAlcClcbiIsIF9fZnVuY19fLCBhZGRyLCBmaXJzdCwgbGFzdCk7CisKKwlpZiAoYWRkciA8IGZpcnN0LT5hZGRyKSB7CisJCXByX3dhcm5pbmcoInVud2luZDogVW5rbm93biBzeW1ib2wgYWRkcmVzcyAlMDhseFxuIiwgYWRkcik7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSBpZiAoYWRkciA+PSBsYXN0LT5hZGRyKQorCQlyZXR1cm4gbGFzdDsKKworCXdoaWxlIChmaXJzdCA8IGxhc3QgLSAxKSB7CisJCXN0cnVjdCB1bndpbmRfaWR4ICptaWQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0ICsgMSkgPj4gMSk7CisKKwkJaWYgKGFkZHIgPCBtaWQtPmFkZHIpCisJCQlsYXN0ID0gbWlkOworCQllbHNlCisJCQlmaXJzdCA9IG1pZDsKKwl9CisKKwlyZXR1cm4gZmlyc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdW53aW5kX2lkeCAqdW53aW5kX2ZpbmRfaWR4KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgdW53aW5kX2lkeCAqaWR4ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzKCUwOGx4KVxuIiwgX19mdW5jX18sIGFkZHIpOworCisJaWYgKGNvcmVfa2VybmVsX3RleHQoYWRkcikpCisJCS8qIG1haW4gdW53aW5kIHRhYmxlICovCisJCWlkeCA9IHNlYXJjaF9pbmRleChhZGRyLCBfX3N0YXJ0X3Vud2luZF9pZHgsCisJCQkJICAgX19zdG9wX3Vud2luZF9pZHggLSAxKTsKKwllbHNlIHsKKwkJLyogbW9kdWxlIHVud2luZCB0YWJsZXMgKi8KKwkJc3RydWN0IHVud2luZF90YWJsZSAqdGFibGU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVud2luZF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsICZ1bndpbmRfdGFibGVzLCBsaXN0KSB7CisJCQlpZiAoYWRkciA+PSB0YWJsZS0+YmVnaW5fYWRkciAmJgorCQkJICAgIGFkZHIgPCB0YWJsZS0+ZW5kX2FkZHIpIHsKKwkJCQlpZHggPSBzZWFyY2hfaW5kZXgoYWRkciwgdGFibGUtPnN0YXJ0LAorCQkJCQkJICAgdGFibGUtPnN0b3AgLSAxKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bndpbmRfbG9jaywgZmxhZ3MpOworCX0KKworCXByX2RlYnVnKCIlczogaWR4ID0gJXBcbiIsIF9fZnVuY19fLCBpZHgpOworCXJldHVybiBpZHg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVud2luZF9nZXRfYnl0ZShzdHJ1Y3QgdW53aW5kX2N0cmxfYmxvY2sgKmN0cmwpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAoY3RybC0+ZW50cmllcyA8PSAwKSB7CisJCXByX3dhcm5pbmcoInVud2luZDogQ29ycnVwdCB1bndpbmQgdGFibGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSAoKmN0cmwtPmluc24gPj4gKGN0cmwtPmJ5dGUgKiA4KSkgJiAweGZmOworCisJaWYgKGN0cmwtPmJ5dGUgPT0gMCkgeworCQljdHJsLT5pbnNuKys7CisJCWN0cmwtPmVudHJpZXMtLTsKKwkJY3RybC0+Ynl0ZSA9IDM7CisJfSBlbHNlCisJCWN0cmwtPmJ5dGUtLTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHVud2luZCBpbnN0cnVjdGlvbi4KKyAqLworc3RhdGljIGludCB1bndpbmRfZXhlY19pbnNuKHN0cnVjdCB1bndpbmRfY3RybF9ibG9jayAqY3RybCkKK3sKKwl1bnNpZ25lZCBsb25nIGluc24gPSB1bndpbmRfZ2V0X2J5dGUoY3RybCk7CisKKwlwcl9kZWJ1ZygiJXM6IGluc24gPSAlMDhseFxuIiwgX19mdW5jX18sIGluc24pOworCisJaWYgKChpbnNuICYgMHhjMCkgPT0gMHgwMCkKKwkJY3RybC0+dnJzW1NQXSArPSAoKGluc24gJiAweDNmKSA8PCAyKSArIDQ7CisJZWxzZSBpZiAoKGluc24gJiAweGMwKSA9PSAweDQwKQorCQljdHJsLT52cnNbU1BdIC09ICgoaW5zbiAmIDB4M2YpIDw8IDIpICsgNDsKKwllbHNlIGlmICgoaW5zbiAmIDB4ZjApID09IDB4ODApIHsKKwkJdW5zaWduZWQgbG9uZyBtYXNrOworCQl1bnNpZ25lZCBsb25nICp2c3AgPSAodW5zaWduZWQgbG9uZyAqKWN0cmwtPnZyc1tTUF07CisJCWludCBsb2FkX3NwLCByZWcgPSA0OworCisJCWluc24gPSAoaW5zbiA8PCA4KSB8IHVud2luZF9nZXRfYnl0ZShjdHJsKTsKKwkJbWFzayA9IGluc24gJiAweDBmZmY7CisJCWlmIChtYXNrID09IDApIHsKKwkJCXByX3dhcm5pbmcoInVud2luZDogJ1JlZnVzZSB0byB1bndpbmQnIGluc3RydWN0aW9uICUwNGx4XG4iLAorCQkJCSAgIGluc24pOworCQkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwkJfQorCisJCS8qIHBvcCBSNC1SMTUgYWNjb3JkaW5nIHRvIG1hc2sgKi8KKwkJbG9hZF9zcCA9IG1hc2sgJiAoMSA8PCAoMTMgLSA0KSk7CisJCXdoaWxlIChtYXNrKSB7CisJCQlpZiAobWFzayAmIDEpCisJCQkJY3RybC0+dnJzW3JlZ10gPSAqdnNwKys7CisJCQltYXNrID4+PSAxOworCQkJcmVnKys7CisJCX0KKwkJaWYgKCFsb2FkX3NwKQorCQkJY3RybC0+dnJzW1NQXSA9ICh1bnNpZ25lZCBsb25nKXZzcDsKKwl9IGVsc2UgaWYgKChpbnNuICYgMHhmMCkgPT0gMHg5MCAmJgorCQkgICAoaW5zbiAmIDB4MGQpICE9IDB4MGQpCisJCWN0cmwtPnZyc1tTUF0gPSBjdHJsLT52cnNbaW5zbiAmIDB4MGZdOworCWVsc2UgaWYgKChpbnNuICYgMHhmMCkgPT0gMHhhMCkgeworCQl1bnNpZ25lZCBsb25nICp2c3AgPSAodW5zaWduZWQgbG9uZyAqKWN0cmwtPnZyc1tTUF07CisJCWludCByZWc7CisKKwkJLyogcG9wIFI0LVJbNCtiYmJdICovCisJCWZvciAocmVnID0gNDsgcmVnIDw9IDQgKyAoaW5zbiAmIDcpOyByZWcrKykKKwkJCWN0cmwtPnZyc1tyZWddID0gKnZzcCsrOworCQlpZiAoaW5zbiAmIDB4ODApCisJCQljdHJsLT52cnNbMTRdID0gKnZzcCsrOworCQljdHJsLT52cnNbU1BdID0gKHVuc2lnbmVkIGxvbmcpdnNwOworCX0gZWxzZSBpZiAoaW5zbiA9PSAweGIwKSB7CisJCWN0cmwtPnZyc1tQQ10gPSBjdHJsLT52cnNbTFJdOworCQkvKiBubyBmdXJ0aGVyIHByb2Nlc3NpbmcgKi8KKwkJY3RybC0+ZW50cmllcyA9IDA7CisJfSBlbHNlIGlmIChpbnNuID09IDB4YjEpIHsKKwkJdW5zaWduZWQgbG9uZyBtYXNrID0gdW53aW5kX2dldF9ieXRlKGN0cmwpOworCQl1bnNpZ25lZCBsb25nICp2c3AgPSAodW5zaWduZWQgbG9uZyAqKWN0cmwtPnZyc1tTUF07CisJCWludCByZWcgPSAwOworCisJCWlmIChtYXNrID09IDAgfHwgbWFzayAmIDB4ZjApIHsKKwkJCXByX3dhcm5pbmcoInVud2luZDogU3BhcmUgZW5jb2RpbmcgJTA0bHhcbiIsCisJCQkgICAgICAgKGluc24gPDwgOCkgfCBtYXNrKTsKKwkJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJCX0KKworCQkvKiBwb3AgUjAtUjMgYWNjb3JkaW5nIHRvIG1hc2sgKi8KKwkJd2hpbGUgKG1hc2spIHsKKwkJCWlmIChtYXNrICYgMSkKKwkJCQljdHJsLT52cnNbcmVnXSA9ICp2c3ArKzsKKwkJCW1hc2sgPj49IDE7CisJCQlyZWcrKzsKKwkJfQorCQljdHJsLT52cnNbU1BdID0gKHVuc2lnbmVkIGxvbmcpdnNwOworCX0gZWxzZSBpZiAoaW5zbiA9PSAweGIyKSB7CisJCXVuc2lnbmVkIGxvbmcgdWxlYjEyOCA9IHVud2luZF9nZXRfYnl0ZShjdHJsKTsKKworCQljdHJsLT52cnNbU1BdICs9IDB4MjA0ICsgKHVsZWIxMjggPDwgMik7CisJfSBlbHNlIHsKKwkJcHJfd2FybmluZygidW53aW5kOiBVbmhhbmRsZWQgaW5zdHJ1Y3Rpb24gJTAybHhcbiIsIGluc24pOworCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCX0KKworCXByX2RlYnVnKCIlczogZnAgPSAlMDhseCBzcCA9ICUwOGx4IGxyID0gJTA4bHggcGMgPSAlMDhseFxuIiwgX19mdW5jX18sCisJCSBjdHJsLT52cnNbRlBdLCBjdHJsLT52cnNbU1BdLCBjdHJsLT52cnNbTFJdLCBjdHJsLT52cnNbUENdKTsKKworCXJldHVybiBVUkNfT0s7Cit9CisKKy8qCisgKiBVbndpbmQgYSBzaW5nbGUgZnJhbWUgc3RhcnRpbmcgd2l0aCAqc3AgZm9yIHRoZSBzeW1ib2wgYXQgKnBjLiBJdAorICogdXBkYXRlcyB0aGUgKnBjIGFuZCAqc3Agd2l0aCB0aGUgbmV3IHZhbHVlcy4KKyAqLworaW50IHVud2luZF9mcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUpCit7CisJdW5zaWduZWQgbG9uZyBoaWdoLCBsb3c7CisJc3RydWN0IHVud2luZF9pZHggKmlkeDsKKwlzdHJ1Y3QgdW53aW5kX2N0cmxfYmxvY2sgY3RybDsKKworCS8qIG9ubHkgZ28gdG8gYSBoaWdoZXIgYWRkcmVzcyBvbiB0aGUgc3RhY2sgKi8KKwlsb3cgPSBmcmFtZS0+c3A7CisJaGlnaCA9IEFMSUdOKGxvdywgVEhSRUFEX1NJWkUpICsgVEhSRUFEX1NJWkU7CisKKwlwcl9kZWJ1ZygiJXMocGMgPSAlMDhseCBsciA9ICUwOGx4IHNwID0gJTA4bHgpXG4iLCBfX2Z1bmNfXywKKwkJIGZyYW1lLT5wYywgZnJhbWUtPmxyLCBmcmFtZS0+c3ApOworCisJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKGZyYW1lLT5wYykpCisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisKKwlpZHggPSB1bndpbmRfZmluZF9pZHgoZnJhbWUtPnBjKTsKKwlpZiAoIWlkeCkgeworCQlwcl93YXJuaW5nKCJ1bndpbmQ6IEluZGV4IG5vdCBmb3VuZCAlMDhseFxuIiwgZnJhbWUtPnBjKTsKKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwl9CisKKwljdHJsLnZyc1tGUF0gPSBmcmFtZS0+ZnA7CisJY3RybC52cnNbU1BdID0gZnJhbWUtPnNwOworCWN0cmwudnJzW0xSXSA9IGZyYW1lLT5scjsKKwljdHJsLnZyc1tQQ10gPSAwOworCisJaWYgKGlkeC0+aW5zbiA9PSAxKQorCQkvKiBjYW4ndCB1bndpbmQgKi8KKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwllbHNlIGlmICgoaWR4LT5pbnNuICYgMHg4MDAwMDAwMCkgPT0gMCkKKwkJLyogcHJlbDMxIHRvIHRoZSB1bndpbmQgdGFibGUgKi8KKwkJY3RybC5pbnNuID0gKHVuc2lnbmVkIGxvbmcgKilwcmVsMzFfdG9fYWRkcigmaWR4LT5pbnNuKTsKKwllbHNlIGlmICgoaWR4LT5pbnNuICYgMHhmZjAwMDAwMCkgPT0gMHg4MDAwMDAwMCkKKwkJLyogb25seSBwZXJzb25hbGl0eSByb3V0aW5lIDAgc3VwcG9ydGVkIGluIHRoZSBpbmRleCAqLworCQljdHJsLmluc24gPSAmaWR4LT5pbnNuOworCWVsc2UgeworCQlwcl93YXJuaW5nKCJ1bndpbmQ6IFVuc3VwcG9ydGVkIHBlcnNvbmFsaXR5IHJvdXRpbmUgJTA4bHggaW4gdGhlIGluZGV4IGF0ICVwXG4iLAorCQkJICAgaWR4LT5pbnNuLCBpZHgpOworCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCX0KKworCS8qIGNoZWNrIHRoZSBwZXJzb25hbGl0eSByb3V0aW5lICovCisJaWYgKCgqY3RybC5pbnNuICYgMHhmZjAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgeworCQljdHJsLmJ5dGUgPSAyOworCQljdHJsLmVudHJpZXMgPSAxOworCX0gZWxzZSBpZiAoKCpjdHJsLmluc24gJiAweGZmMDAwMDAwKSA9PSAweDgxMDAwMDAwKSB7CisJCWN0cmwuYnl0ZSA9IDE7CisJCWN0cmwuZW50cmllcyA9IDEgKyAoKCpjdHJsLmluc24gJiAweDAwZmYwMDAwKSA+PiAxNik7CisJfSBlbHNlIHsKKwkJcHJfd2FybmluZygidW53aW5kOiBVbnN1cHBvcnRlZCBwZXJzb25hbGl0eSByb3V0aW5lICUwOGx4IGF0ICVwXG4iLAorCQkJICAgKmN0cmwuaW5zbiwgY3RybC5pbnNuKTsKKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwl9CisKKwl3aGlsZSAoY3RybC5lbnRyaWVzID4gMCkgeworCQlpbnQgdXJjOworCisJCWlmIChjdHJsLnZyc1tTUF0gPCBsb3cgfHwgY3RybC52cnNbU1BdID49IGhpZ2gpCisJCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCQl1cmMgPSB1bndpbmRfZXhlY19pbnNuKCZjdHJsKTsKKwkJaWYgKHVyYyA8IDApCisJCQlyZXR1cm4gdXJjOworCX0KKworCWlmIChjdHJsLnZyc1tQQ10gPT0gMCkKKwkJY3RybC52cnNbUENdID0gY3RybC52cnNbTFJdOworCisJZnJhbWUtPmZwID0gY3RybC52cnNbRlBdOworCWZyYW1lLT5zcCA9IGN0cmwudnJzW1NQXTsKKwlmcmFtZS0+bHIgPSBjdHJsLnZyc1tMUl07CisJZnJhbWUtPnBjID0gY3RybC52cnNbUENdOworCisJcmV0dXJuIFVSQ19PSzsKK30KKwordm9pZCB1bndpbmRfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcmFtZTsKKwl1bnNpZ25lZCBsb25nIGhpZ2gsIGxvdzsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGN1cnJlbnRfc3AgYXNtICgic3AiKTsKKworCXByX2RlYnVnKCIlcyhyZWdzID0gJXAgdHNrID0gJXApXG4iLCBfX2Z1bmNfXywgcmVncywgdHNrKTsKKworCWlmICghdHNrKQorCQl0c2sgPSBjdXJyZW50OworCisJaWYgKHJlZ3MpIHsKKwkJZnJhbWUuZnAgPSByZWdzLT5BUk1fZnA7CisJCWZyYW1lLnNwID0gcmVncy0+QVJNX3NwOworCQlmcmFtZS5sciA9IHJlZ3MtPkFSTV9scjsKKwkJZnJhbWUucGMgPSByZWdzLT5BUk1fcGM7CisJfSBlbHNlIGlmICh0c2sgPT0gY3VycmVudCkgeworCQlmcmFtZS5mcCA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzKDApOworCQlmcmFtZS5zcCA9IGN1cnJlbnRfc3A7CisJCWZyYW1lLmxyID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCQlmcmFtZS5wYyA9ICh1bnNpZ25lZCBsb25nKXVud2luZF9iYWNrdHJhY2U7CisJfSBlbHNlIHsKKwkJLyogdGFzayBibG9ja2VkIGluIF9fc3dpdGNoX3RvICovCisJCWZyYW1lLmZwID0gdGhyZWFkX3NhdmVkX2ZwKHRzayk7CisJCWZyYW1lLnNwID0gdGhyZWFkX3NhdmVkX3NwKHRzayk7CisJCS8qCisJCSAqIFRoZSBmdW5jdGlvbiBjYWxsaW5nIF9fc3dpdGNoX3RvIGNhbm5vdCBiZSBhIGxlYWYgZnVuY3Rpb24KKwkJICogc28gTFIgaXMgcmVjb3ZlcmVkIGZyb20gdGhlIHN0YWNrLgorCQkgKi8KKwkJZnJhbWUubHIgPSAwOworCQlmcmFtZS5wYyA9IHRocmVhZF9zYXZlZF9wYyh0c2spOworCX0KKworCWxvdyA9IGZyYW1lLnNwICYgfihUSFJFQURfU0laRSAtIDEpOworCWhpZ2ggPSBsb3cgKyBUSFJFQURfU0laRTsKKworCXdoaWxlICgxKSB7CisJCWludCB1cmM7CisJCXVuc2lnbmVkIGxvbmcgd2hlcmUgPSBmcmFtZS5wYzsKKworCQl1cmMgPSB1bndpbmRfZnJhbWUoJmZyYW1lKTsKKwkJaWYgKHVyYyA8IDApCisJCQlicmVhazsKKwkJZHVtcF9iYWNrdHJhY2VfZW50cnkod2hlcmUsIGZyYW1lLnBjLCBmcmFtZS5zcCAtIDQpOworCX0KK30KKworc3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0ZXh0X2FkZHIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0ZXh0X3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdW53aW5kX2lkeCAqaWR4OworCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Moc2l6ZW9mKCp0YWIpLCBHRlBfS0VSTkVMKTsKKworCXByX2RlYnVnKCIlcyglMDhseCwgJTA4bHgsICUwOGx4LCAlMDhseClcbiIsIF9fZnVuY19fLCBzdGFydCwgc2l6ZSwKKwkJIHRleHRfYWRkciwgdGV4dF9zaXplKTsKKworCWlmICghdGFiKQorCQlyZXR1cm4gdGFiOworCisJdGFiLT5zdGFydCA9IChzdHJ1Y3QgdW53aW5kX2lkeCAqKXN0YXJ0OworCXRhYi0+c3RvcCA9IChzdHJ1Y3QgdW53aW5kX2lkeCAqKShzdGFydCArIHNpemUpOworCXRhYi0+YmVnaW5fYWRkciA9IHRleHRfYWRkcjsKKwl0YWItPmVuZF9hZGRyID0gdGV4dF9hZGRyICsgdGV4dF9zaXplOworCisJLyogQ29udmVydCB0aGUgc3ltYm9sIGFkZHJlc3NlcyB0byBhYnNvbHV0ZSB2YWx1ZXMgKi8KKwlmb3IgKGlkeCA9IHRhYi0+c3RhcnQ7IGlkeCA8IHRhYi0+c3RvcDsgaWR4KyspCisJCWlkeC0+YWRkciA9IHByZWwzMV90b19hZGRyKCZpZHgtPmFkZHIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVud2luZF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmdGFiLT5saXN0LCAmdW53aW5kX3RhYmxlcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW53aW5kX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB0YWI7Cit9CisKK3ZvaWQgdW53aW5kX3RhYmxlX2RlbChzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdGFiKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdW53aW5kX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmdGFiLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bndpbmRfbG9jaywgZmxhZ3MpOworCisJa2ZyZWUodGFiKTsKK30KKworaW50IF9faW5pdCB1bndpbmRfaW5pdCh2b2lkKQoreworCXN0cnVjdCB1bndpbmRfaWR4ICppZHg7CisKKwkvKiBDb252ZXJ0IHRoZSBzeW1ib2wgYWRkcmVzc2VzIHRvIGFic29sdXRlIHZhbHVlcyAqLworCWZvciAoaWR4ID0gX19zdGFydF91bndpbmRfaWR4OyBpZHggPCBfX3N0b3BfdW53aW5kX2lkeDsgaWR4KyspCisJCWlkeC0+YWRkciA9IHByZWwzMV90b19hZGRyKCZpZHgtPmFkZHIpOworCisJcHJfZGVidWcoInVud2luZDogQVJNIHN0YWNrIHVud2luZGluZyBpbml0aWFsaXNlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMDAyMTYwNy4uYzkwZjI3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTY0LDcgKzY0LDkgQEAKIAkJX19pbml0cmFtZnNfZW5kID0gLjsKICNlbmRpZgogCQkuID0gQUxJR04oNDA5Nik7CisJCV9fcGVyX2NwdV9sb2FkID0gLjsKIAkJX19wZXJfY3B1X3N0YXJ0ID0gLjsKKwkJCSooLmRhdGEucGVyY3B1LnBhZ2VfYWxpZ25lZCkKIAkJCSooLmRhdGEucGVyY3B1KQogCQkJKiguZGF0YS5wZXJjcHUuc2hhcmVkX2FsaWduZWQpCiAJCV9fcGVyX2NwdV9lbmQgPSAuOwpAQCAtODAsNiArODIsOCBAQAogCQlFWElUX1RFWFQKIAkJRVhJVF9EQVRBCiAJCSooLmV4aXRjYWxsLmV4aXQpCisJCSooLkFSTS5leGlkeC5leGl0LnRleHQpCisJCSooLkFSTS5leHRhYi5leGl0LnRleHQpCiAjaWZuZGVmIENPTkZJR19NTVUKIAkJKiguZml4dXApCiAJCSooX19leF90YWJsZSkKQEAgLTExMCw2ICsxMTQsMjMgQEAKIAogCV9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgYW5kIHJvZGF0YSBzZWN0aW9uICovCiAKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorCS8qCisJICogU3RhY2sgdW53aW5kaW5nIHRhYmxlcworCSAqLworCS4gPSBBTElHTig4KTsKKwkuQVJNLnVud2luZF9pZHggOiB7CisJCV9fc3RhcnRfdW53aW5kX2lkeCA9IC47CisJCSooLkFSTS5leGlkeCopCisJCV9fc3RvcF91bndpbmRfaWR4ID0gLjsKKwl9CisJLkFSTS51bndpbmRfdGFiIDogeworCQlfX3N0YXJ0X3Vud2luZF90YWIgPSAuOworCQkqKC5BUk0uZXh0YWIqKQorCQlfX3N0b3BfdW53aW5kX3RhYiA9IC47CisJfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAogCV9fZGF0YV9sb2MgPSBBTElHTig0KTsJCS8qIGxvY2F0aW9uIGluIGJpbmFyeSAqLwogCS4gPSBQQUdFX09GRlNFVCArIFRFWFRfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA4ZjQxMTVkLi5mZTA4Y2ExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTYsNyArMTYsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwppbmRleCA4MTQzOWZlLi40MzhlZmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCkBAIC0yMzgsNiArMjM4LDEwIEBACiAJYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKIAkvKiBMRURzICovCiAJYXQ5MV9ncGlvX2xlZHMoZWtfbGVkcywgQVJSQVlfU0laRShla19sZWRzKSk7CisJLyogUENLMCBwcm92aWRlcyBNQ0xLIHRvIHRoZSBXTTg3MzEgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOworCS8qIFNTQyAoZm9yIFdNODczMSkgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc3NjKEFUOTFTQU05MjYwX0lEX1NTQywgQVRNRUxfU1NDX1RYKTsKIH0KIAogTUFDSElORV9TVEFSVChBVDkxU0FNOUcyMEVLLCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKaW5kZXggN2I5Y2U3YS4uYjVkYWY3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCkBAIC00Nyw5ICs0Nyw2IEBACiAjZGVmaW5lIEFUOTFSTTkyMDBfQkdBCQk0CS8qIEFUOTFSTTkyMDAgQkdBIHBhY2thZ2UgaGFzIDQgYmFua3MgKi8KIAogc3RydWN0IGF0OTFfZ3Bpb19iYW5rIHsKLQl1bnNpZ25lZCBjaGlwYmFzZTsJCS8qIGJhbmsncyBmaXJzdCBHUElPIG51bWJlciAqLwotCXZvaWQgX19pb21lbSAqcmVnYmFzZTsJCS8qIGJhc2Ugb2YgcmVnaXN0ZXIgYmFuayAqLwotCXN0cnVjdCBhdDkxX2dwaW9fYmFuayAqbmV4dDsJLyogYmFuayBzaGFyaW5nIHNhbWUgSVJRL2Nsb2NrLy4uLiAqLwogCXVuc2lnbmVkIHNob3J0IGlkOwkJLyogcGVyaXBoZXJhbCBJRCAqLwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwkJLyogb2Zmc2V0IGZyb20gc3lzdGVtIHBlcmlwaGVyYWwgYmFzZSAqLwogCXN0cnVjdCBjbGsgKmNsb2NrOwkJLyogYXNzb2NpYXRlZCBjbG9jayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKaW5kZXggMmY3ZDQ5Ny4uZjIyMzZmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCkBAIC0yNCwxOSArMjQsNTkgQEAKICNpbmNsdWRlIDxtYWNoL2F0OTFfcGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCitzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAJKm5leHQ7CQkvKiBCYW5rIHNoYXJpbmcgc2FtZSBjbG9jayAqLworCXN0cnVjdCBhdDkxX2dwaW9fYmFuawkqYmFuazsJCS8qIEJhbmsgZGVmaW5pdGlvbiAqLworCXZvaWQgX19pb21lbQkJKnJlZ2Jhc2U7CS8qIEJhc2Ugb2YgcmVnaXN0ZXIgYmFuayAqLworfTsKIAotc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayAqZ3BpbzsKKyNkZWZpbmUgdG9fYXQ5MV9ncGlvX2NoaXAoYykgY29udGFpbmVyX29mKGMsIHN0cnVjdCBhdDkxX2dwaW9fY2hpcCwgY2hpcCkKKworc3RhdGljIHZvaWQgYXQ5MV9ncGlvbGliX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCk7CitzdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCk7CitzdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KTsKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCk7CitzdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KTsKKworI2RlZmluZSBBVDkxX0dQSU9fQ0hJUChuYW1lLCBiYXNlX2dwaW8sIG5yX2dwaW8pCQkJXAorCXsJCQkJCQkJCVwKKwkJLmNoaXAgPSB7CQkJCQkJXAorCQkJLmxhYmVsCQkgID0gbmFtZSwJCQlcCisJCQkucmVxdWVzdAkgID0gYXQ5MV9ncGlvbGliX3JlcXVlc3QsCVwKKwkJCS5kaXJlY3Rpb25faW5wdXQgID0gYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dCwgXAorCQkJLmRpcmVjdGlvbl9vdXRwdXQgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dCwgXAorCQkJLmdldAkJICA9IGF0OTFfZ3Bpb2xpYl9nZXQsCQlcCisJCQkuc2V0CQkgID0gYXQ5MV9ncGlvbGliX3NldCwJCVwKKwkJCS5kYmdfc2hvdwkgID0gYXQ5MV9ncGlvbGliX2RiZ19zaG93LAlcCisJCQkuYmFzZQkJICA9IGJhc2VfZ3BpbywJCQlcCisJCQkubmdwaW8JCSAgPSBucl9ncGlvLAkJCVwKKwkJfSwJCQkJCQkJXAorCX0KKworc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fY2hpcCBncGlvX2NoaXBbXSA9IHsKKwlBVDkxX0dQSU9fQ0hJUCgiQSIsIDB4MDAgKyBQSU5fQkFTRSwgMzIpLAorCUFUOTFfR1BJT19DSElQKCJCIiwgMHgyMCArIFBJTl9CQVNFLCAzMiksCisJQVQ5MV9HUElPX0NISVAoIkMiLCAweDQwICsgUElOX0JBU0UsIDMyKSwKKwlBVDkxX0dQSU9fQ0hJUCgiRCIsIDB4NjAgKyBQSU5fQkFTRSwgMzIpLAorCUFUOTFfR1BJT19DSElQKCJFIiwgMHg4MCArIFBJTl9CQVNFLCAzMiksCit9OworCiBzdGF0aWMgaW50IGdwaW9fYmFua3M7CiAKLQogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnBpbl90b19jb250cm9sbGVyKHVuc2lnbmVkIHBpbikKIHsKIAlwaW4gLT0gUElOX0JBU0U7CiAJcGluIC89IDMyOwogCWlmIChsaWtlbHkocGluIDwgZ3Bpb19iYW5rcykpCi0JCXJldHVybiBncGlvW3Bpbl0ucmVnYmFzZTsKKwkJcmV0dXJuIGdwaW9fY2hpcFtwaW5dLnJlZ2Jhc2U7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE5NywzOSArMjM3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfbXVsdGlfZHJpdmUpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogbmV3LXN0eWxlIEdQSU8gY2FsbHM7IHRoZXNlIGV4cGVjdCBhdDkxX3NldF9HUElPX3BlcmlwaCB0byBoYXZlIGJlZW4KLSAqIGNhbGxlZCwgYW5kIG1heWJlIGF0OTFfc2V0X211bHRpX2RyaXZlKCkgZm9yIHB1dG91dCBwaW5zLgotICovCi0KLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBwaW4pCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIShfX3Jhd19yZWFkbChwaW8gKyBQSU9fUFNSKSAmIG1hc2spKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09EUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKLQotaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbyB8fCAhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19QU1IpICYgbWFzaykpCi0JCXJldHVybiAtRUlOVkFMOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsdWUgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRVIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoKICAqIGFzc3VtaW5nIHRoZSBwaW4gaXMgbXV4ZWQgYXMgYSBncGlvIG91dHB1dCwgc2V0IGl0cyB2YWx1ZS4KICAqLwpAQCAtMjgyLDcgKzI4OSw3IEBACiAJZWxzZQogCQl3YWtldXBzW2JhbmtdICY9IH5tYXNrOwogCi0Jc2V0X2lycV93YWtlKGdwaW9bYmFua10uaWQsIHN0YXRlKTsKKwlzZXRfaXJxX3dha2UoZ3Bpb19jaGlwW2JhbmtdLmJhbmstPmlkLCBzdGF0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MiwxNCArMjk5LDE0IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb1tpXS5yZWdiYXNlOworCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9fY2hpcFtpXS5yZWdiYXNlOwogCiAJCWJhY2t1cHNbaV0gPSBfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKTsKIAkJX19yYXdfd3JpdGVsKGJhY2t1cHNbaV0sIHBpbyArIFBJT19JRFIpOwogCQlfX3Jhd193cml0ZWwod2FrZXVwc1tpXSwgcGlvICsgUElPX0lFUik7CiAKIAkJaWYgKCF3YWtldXBzW2ldKQotCQkJY2xrX2Rpc2FibGUoZ3Bpb1tpXS5jbG9jayk7CisJCQljbGtfZGlzYWJsZShncGlvX2NoaXBbaV0uYmFuay0+Y2xvY2spOwogCQllbHNlIHsKICNpZmRlZiBDT05GSUdfUE1fREVCVUcKIAkJCXByaW50ayhLRVJOX0RFQlVHICJHUElPLSVjIG1heSB3YWtlIGZvciAlMDh4XG4iLCAnQScraSwgd2FrZXVwc1tpXSk7CkBAIC0zMTMsMTAgKzMyMCwxMCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewotCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9baV0ucmVnYmFzZTsKKwkJdm9pZCBfX2lvbWVtCSpwaW8gPSBncGlvX2NoaXBbaV0ucmVnYmFzZTsKIAogCQlpZiAoIXdha2V1cHNbaV0pCi0JCQljbGtfZW5hYmxlKGdwaW9baV0uY2xvY2spOworCQkJY2xrX2VuYWJsZShncGlvX2NoaXBbaV0uYmFuay0+Y2xvY2spOwogCiAJCV9fcmF3X3dyaXRlbCh3YWtldXBzW2ldLCBwaW8gKyBQSU9fSURSKTsKIAkJX19yYXdfd3JpdGVsKGJhY2t1cHNbaV0sIHBpbyArIFBJT19JRVIpOwpAQCAtMzgwLDEyICszODcsMTIgQEAKIHsKIAl1bnNpZ25lZAlwaW47CiAJc3RydWN0IGlycV9kZXNjCSpncGlvOwotCXN0cnVjdCBhdDkxX2dwaW9fYmFuayAqYmFuazsKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbzsKIAl2b2lkIF9faW9tZW0JKnBpbzsKIAl1MzIJCWlzcjsKIAotCWJhbmsgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXBpbyA9IGJhbmstPnJlZ2Jhc2U7CisJYXQ5MV9ncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7CiAKIAkvKiB0ZW1wb3JhcmlseSBtYXNrIChsZXZlbCBzZW5zaXRpdmUpIHBhcmVudCBJUlEgKi8KIAlkZXNjLT5jaGlwLT5hY2soaXJxKTsKQEAgLTM5NiwxNCArNDAzLDE0IEBACiAJCSAqLwogCQlpc3IgPSBfX3Jhd19yZWFkbChwaW8gKyBQSU9fSVNSKSAmIF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOwogCQlpZiAoIWlzcikgewotCQkJaWYgKCFiYW5rLT5uZXh0KQorCQkJaWYgKCFhdDkxX2dwaW8tPm5leHQpCiAJCQkJYnJlYWs7Ci0JCQliYW5rID0gYmFuay0+bmV4dDsKLQkJCXBpbyA9IGJhbmstPnJlZ2Jhc2U7CisJCQlhdDkxX2dwaW8gPSBhdDkxX2dwaW8tPm5leHQ7CisJCQlwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXBpbiA9IGJhbmstPmNoaXBiYXNlOworCQlwaW4gPSBhdDkxX2dwaW8tPmNoaXAuYmFzZTsKIAkJZ3BpbyA9ICZpcnFfZGVzY1twaW5dOwogCiAJCXdoaWxlIChpc3IpIHsKQEAgLTUwMiwxNyArNTA5LDE3IEBACiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQJCXBpb2MsIHBpbjsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsJKnRoaXMsICpwcmV2OworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqdGhpcywgKnByZXY7CiAKLQlmb3IgKHBpb2MgPSAwLCBwaW4gPSBQSU5fQkFTRSwgdGhpcyA9IGdwaW8sIHByZXYgPSBOVUxMOworCWZvciAocGlvYyA9IDAsIHBpbiA9IFBJTl9CQVNFLCB0aGlzID0gZ3Bpb19jaGlwLCBwcmV2ID0gTlVMTDsKIAkJCXBpb2MrKyA8IGdwaW9fYmFua3M7CiAJCQlwcmV2ID0gdGhpcywgdGhpcysrKSB7Ci0JCXVuc2lnbmVkCWlkID0gdGhpcy0+aWQ7CisJCXVuc2lnbmVkCWlkID0gdGhpcy0+YmFuay0+aWQ7CiAJCXVuc2lnbmVkCWk7CiAKIAkJX19yYXdfd3JpdGVsKH4wLCB0aGlzLT5yZWdiYXNlICsgUElPX0lEUik7CiAKLQkJZm9yIChpID0gMCwgcGluID0gdGhpcy0+Y2hpcGJhc2U7IGkgPCAzMjsgaSsrLCBwaW4rKykgeworCQlmb3IgKGkgPSAwLCBwaW4gPSB0aGlzLT5jaGlwLmJhc2U7IGkgPCAzMjsgaSsrLCBwaW4rKykgewogCQkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW3Bpbl0ubG9jaywgJmdwaW9fbG9ja19jbGFzcyk7CiAKIAkJCS8qCkBAIC01MzcsMzIgKzU0NCwxMTcgQEAKIAlwcl9pbmZvKCJBVDkxOiAlZCBncGlvIGlycXMgaW4gJWQgYmFua3NcbiIsIHBpbiAtIFBJTl9CQVNFLCBncGlvX2JhbmtzKTsKIH0KIAorLyogZ3Bpb2xpYiBzdXBwb3J0ICovCitzdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7CisJdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7CisJdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OworCisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCSB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbCA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIHBkc3I7CisKKwlwZHNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX1BEU1IpOworCXJldHVybiAocGRzciAmIG1hc2spICE9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQoreworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7CisJdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7CisJdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OworCisJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWwgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXVuc2lnbmVkIHBpbiA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisJdm9pZCBfX2lvbWVtICpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCXVuc2lnbmVkIG1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCisJLyogQ2Fubm90IHJlcXVlc3QgR1BJT3MgdGhhdCBhcmUgaW4gYWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgKi8KKwlpZiAoIShfX3Jhd19yZWFkbChwaW8gKyBQSU9fUFNSKSAmIG1hc2spKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bmdwaW87IGkrKykgeworCQl1bnNpZ25lZCBwaW4gPSBjaGlwLT5iYXNlICsgaTsKKwkJdm9pZCBfX2lvbWVtICpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOworCQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2socGluKTsKKwkJY29uc3QgY2hhciAqZ3Bpb19sYWJlbDsKKworCQlncGlvX2xhYmVsID0gZ3Bpb2NoaXBfaXNfcmVxdWVzdGVkKGNoaXAsIGkpOworCQlpZiAoZ3Bpb19sYWJlbCkgeworCQkJc2VxX3ByaW50ZihzLCAiWyVzXSBHUElPJXMlZDogIiwKKwkJCQkgICBncGlvX2xhYmVsLCBjaGlwLT5sYWJlbCwgaSk7CisJCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQorCQkJCXNlcV9wcmludGYocywgIltncGlvXSAlc1xuIiwKKwkJCQkJICAgYXQ5MV9nZXRfZ3Bpb192YWx1ZShwaW4pID8KKwkJCQkJICAgInNldCIgOiAiY2xlYXIiKTsKKwkJCWVsc2UKKwkJCQlzZXFfcHJpbnRmKHMsICJbcGVyaXBoICVzXVxuIiwKKwkJCQkJICAgX19yYXdfcmVhZGwocGlvICsgUElPX0FCU1IpICYKKwkJCQkJICAgbWFzayA/ICJCIiA6ICJBIik7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBDYWxsZWQgZnJvbSB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGluaXQgdG8gZW5hYmxlIEdQSU8gcGluIHN1cHBvcnQuCiAgKi8KIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pbml0KHN0cnVjdCBhdDkxX2dwaW9fYmFuayAqZGF0YSwgaW50IG5yX2JhbmtzKQogewogCXVuc2lnbmVkCQlpOwotCXN0cnVjdCBhdDkxX2dwaW9fYmFuawkqbGFzdDsKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbywgKmxhc3QgPSBOVUxMOwogCiAJQlVHX09OKG5yX2JhbmtzID4gTUFYX0dQSU9fQkFOS1MpOwogCi0JZ3BpbyA9IGRhdGE7CiAJZ3Bpb19iYW5rcyA9IG5yX2JhbmtzOwogCi0JZm9yIChpID0gMCwgbGFzdCA9IE5VTEw7IGkgPCBucl9iYW5rczsgaSsrLCBsYXN0ID0gZGF0YSwgZGF0YSsrKSB7Ci0JCWRhdGEtPmNoaXBiYXNlID0gUElOX0JBU0UgKyBpICogMzI7Ci0JCWRhdGEtPnJlZ2Jhc2UgPSBkYXRhLT5vZmZzZXQgKyAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYmFua3M7IGkrKykgeworCQlhdDkxX2dwaW8gPSAmZ3Bpb19jaGlwW2ldOworCisJCWF0OTFfZ3Bpby0+YmFuayA9ICZkYXRhW2ldOworCQlhdDkxX2dwaW8tPmNoaXAuYmFzZSA9IFBJTl9CQVNFICsgaSAqIDMyOworCQlhdDkxX2dwaW8tPnJlZ2Jhc2UgPSBhdDkxX2dwaW8tPmJhbmstPm9mZnNldCArCisJCQkodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKIAogCQkvKiBlbmFibGUgUElPIGNvbnRyb2xsZXIncyBjbG9jayAqLwotCQljbGtfZW5hYmxlKGRhdGEtPmNsb2NrKTsKKwkJY2xrX2VuYWJsZShhdDkxX2dwaW8tPmJhbmstPmNsb2NrKTsKIAotCQkvKgotCQkgKiBTb21lIHByb2Nlc3NvcnMgc2hhcmUgcGVyaXBoZXJhbCBJRCBiZXR3ZWVuIG11bHRpcGxlIEdQSU8gYmFua3MuCi0JCSAqICBTQU05MjYzIChQSU9DLCBQSU9ELCBQSU9FKQotCQkgKiAgQ0FQOSAoUElPQSwgUElPQiwgUElPQywgUElPRCkKLQkJICovCi0JCWlmIChsYXN0ICYmIGxhc3QtPmlkID09IGRhdGEtPmlkKQotCQkJbGFzdC0+bmV4dCA9IGRhdGE7CisJCS8qIEFUOTFTQU05MjYzX0lEX1BJT0NERSBncm91cHMgUElPQywgUElPRCwgUElPRSAqLworCQlpZiAobGFzdCAmJiBsYXN0LT5iYW5rLT5pZCA9PSBhdDkxX2dwaW8tPmJhbmstPmlkKQorCQkJbGFzdC0+bmV4dCA9IGF0OTFfZ3BpbzsKKwkJbGFzdCA9IGF0OTFfZ3BpbzsKKworCQlncGlvY2hpcF9hZGQoJmF0OTFfZ3Bpby0+Y2hpcCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBiZmZhNjc0Li4wNGM5MWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjEzLDMyICsyMTMsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotCW1pZ2h0X3NsZWVwKCk7Ci19Ci0KLWV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBhdDkxX2dldF9ncGlvX3ZhbHVlKGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWF0OTFfc2V0X2dwaW9fdmFsdWUoZ3BpbywgdmFsdWUpOwotfQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KIAorI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKIHsKIAlyZXR1cm4gZ3BpbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGU3MTI2NTguLjUyNjhhZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtNDMsNyArNDMsNyBAQAogCiB2b2lkICgqYXQ5MV9hcmNoX3Jlc2V0KSh2b2lkKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogY2FsbCB0aGUgQ1BVLXNwZWNpZmljIHJlc2V0IGZ1bmN0aW9uICovCiAJaWYgKGF0OTFfYXJjaF9yZXNldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMjRlOTYxNS4uZjkxNmNkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAltb3YJcjAsIHIwIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDE3Y2E0MWQuLmI3ZTcwMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjEsNyArMjEsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlkYXZpbmNpX3dhdGNoZG9nX3Jlc2V0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAzNTBhMDI4Li45YTI2MjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTM0LDYgKzM0LDYgQEAKIAlhc20gdm9sYXRpbGUgKCJtY3IgcDE1LCAwLCBpcCwgYzE1LCBjMSwgMiIgOiA6IDogImNjIik7CiB9CiAKLSNkZWZpbmUgYXJjaF9yZXNldChtb2RlKQljcHVfcmVzZXQoMHg4MDAwMDAwMCkKKyNkZWZpbmUgYXJjaF9yZXNldChtb2RlLCBjbWQpCWNwdV9yZXNldCgweDgwMDAwMDAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKaW5kZXggOTQ0ZTQyZC4uOTUyMmUyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwotb2JqLXkJCQk6PSBjb3JlLm8gY2xvY2subyBncGlvLm8KK29iai15CQkJOj0gY29yZS5vIGNsb2NrLm8gZG1hLW0ycC5vIGdwaW8ubwogb2JqLW0JCQk6PQogb2JqLW4JCQk6PQogb2JqLQkJCTo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwppbmRleCA5NjA0OTI4Li5lOGViZWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTQxLDYgKzQxLDU2IEBACiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19VU0hfRU4sCiB9OwogCisvKiBETUEgQ2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMCA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwMDIwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAxID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDAwMTAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDIgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDA4MDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMyA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwMDQwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA0ID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDAyMDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDUgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDEwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNiA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwODAwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA3ID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDA0MDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDggPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMjAwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOSA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAxMDAwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMm0wID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDQwMDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTEgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwODAwMDAwMCwKK307CisKICNkZWZpbmUgSU5JVF9DSyhkZXYsY29uLGNrKQkJCQkJXAogCXsgLmRldl9pZCA9IGRldiwgLmNvbl9pZCA9IGNvbiwgLmNsayA9IGNrIH0KIApAQCAtNTQsNiArMTA0LDE4IEBACiAJSU5JVF9DSyhOVUxMLCAicGNsayIsICZjbGtfcCksCiAJSU5JVF9DSyhOVUxMLCAicGxsMiIsICZjbGtfcGxsMiksCiAJSU5JVF9DSyhOVUxMLCAidXNiX2hvc3QiLCAmY2xrX3VzYl9ob3N0KSwKKwlJTklUX0NLKE5VTEwsICJtMnAwIiwgJmNsa19tMnAwKSwKKwlJTklUX0NLKE5VTEwsICJtMnAxIiwgJmNsa19tMnAxKSwKKwlJTklUX0NLKE5VTEwsICJtMnAyIiwgJmNsa19tMnAyKSwKKwlJTklUX0NLKE5VTEwsICJtMnAzIiwgJmNsa19tMnAzKSwKKwlJTklUX0NLKE5VTEwsICJtMnA0IiwgJmNsa19tMnA0KSwKKwlJTklUX0NLKE5VTEwsICJtMnA1IiwgJmNsa19tMnA1KSwKKwlJTklUX0NLKE5VTEwsICJtMnA2IiwgJmNsa19tMnA2KSwKKwlJTklUX0NLKE5VTEwsICJtMnA3IiwgJmNsa19tMnA3KSwKKwlJTklUX0NLKE5VTEwsICJtMnA4IiwgJmNsa19tMnA4KSwKKwlJTklUX0NLKE5VTEwsICJtMnA5IiwgJmNsa19tMnA5KSwKKwlJTklUX0NLKE5VTEwsICJtMm0wIiwgJmNsa19tMm0wKSwKKwlJTklUX0NLKE5VTEwsICJtMm0xIiwgJmNsa19tMm0xKSwKIH07CiAKIApAQCAtMTEwLDYgKzE3MiwyMiBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZylyYXRlOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgZXA5M3h4X2RtYV9jbG9ja19pbml0KHZvaWQpCit7CisJY2xrX20ycDAucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDEucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDIucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDMucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDQucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDUucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDYucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDcucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDgucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ycDkucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ybTAucmF0ZSA9IGNsa19oLnJhdGU7CisJY2xrX20ybTEucmF0ZSA9IGNsa19oLnJhdGU7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGVwOTN4eF9jbG9ja19pbml0KHZvaWQpCiB7CiAJdTMyIHZhbHVlOwpAQCAtMTI0LDYgKzIwMiw3IEBACiAJY2xrX2YucmF0ZSA9IGNsa19wbGwxLnJhdGUgLyBmY2xrX2Rpdmlzb3JzWyh2YWx1ZSA+PiAyNSkgJiAweDddOwogCWNsa19oLnJhdGUgPSBjbGtfcGxsMS5yYXRlIC8gaGNsa19kaXZpc29yc1sodmFsdWUgPj4gMjApICYgMHg3XTsKIAljbGtfcC5yYXRlID0gY2xrX2gucmF0ZSAvIHBjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDE4KSAmIDB4M107CisJZXA5M3h4X2RtYV9jbG9ja19pbml0KCk7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7CiAJaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLW0ycC5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLW0ycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGY1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMKKyAqIE0yUCBETUEgaGFuZGxpbmcgZm9yIENpcnJ1cyBFUDkzeHggY2hpcHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxpZWQgRGF0YSBTeXN0ZW1zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogT24gdGhlIEVQOTN4eCBjaGlwIHRoZSBmb2xsb3dpbmcgcGVyaXBoZXJhbHMgbXkgYmUgYWxsb2NhdGVkIHRvIHRoZSAxMAorICogTWVtb3J5IHRvIEludGVybmFsIFBlcmlwaGVyYWwgKE0yUCkgY2hhbm5lbHMgKDUgdHJhbnNtaXQgKyA1IHJlY2VpdmUpLgorICoKKyAqCUkyUwljb250YWlucyAzIFR4IGFuZCAzIFJ4IERNQSBDaGFubmVscworICoJQUFDCWNvbnRhaW5zIDMgVHggYW5kIDMgUnggRE1BIENoYW5uZWxzCisgKglVQVJUMQljb250YWlucyAxIFR4IGFuZCAxIFJ4IERNQSBDaGFubmVscworICoJVUFSVDIJY29udGFpbnMgMSBUeCBhbmQgMSBSeCBETUEgQ2hhbm5lbHMKKyAqCVVBUlQzCWNvbnRhaW5zIDEgVHggYW5kIDEgUnggRE1BIENoYW5uZWxzCisgKglJckRBCWNvbnRhaW5zIDEgVHggYW5kIDEgUnggRE1BIENoYW5uZWxzCisgKgorICogU1NQIGFuZCBJREUgdXNlIHRoZSBNZW1vcnkgdG8gTWVtb3J5IChNMk0pIGNoYW5uZWxzIGFuZCBhcmUgbm90IGNvdmVyZWQKKyAqIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBNMlBfQ09OVFJPTAkJCTB4MDAKKyNkZWZpbmUgIE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTgkoMSA8PCAwKQorI2RlZmluZSAgTTJQX0NPTlRST0xfTkZCX0lSUV9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgIE0yUF9DT05UUk9MX0VSUk9SX0lSUV9FTgkoMSA8PCAzKQorI2RlZmluZSAgTTJQX0NPTlRST0xfRU5BQkxFCQkoMSA8PCA0KQorI2RlZmluZSBNMlBfSU5URVJSVVBUCQkJMHgwNAorI2RlZmluZSAgTTJQX0lOVEVSUlVQVF9TVEFMTAkJKDEgPDwgMCkKKyNkZWZpbmUgIE0yUF9JTlRFUlJVUFRfTkZCCQkoMSA8PCAxKQorI2RlZmluZSAgTTJQX0lOVEVSUlVQVF9FUlJPUgkJKDEgPDwgMykKKyNkZWZpbmUgTTJQX1BQQUxMT0MJCQkweDA4CisjZGVmaW5lIE0yUF9TVEFUVVMJCQkweDBjCisjZGVmaW5lIE0yUF9SRU1BSU4JCQkweDE0CisjZGVmaW5lIE0yUF9NQVhDTlQwCQkJMHgyMAorI2RlZmluZSBNMlBfQkFTRTAJCQkweDI0CisjZGVmaW5lIE0yUF9NQVhDTlQxCQkJMHgzMAorI2RlZmluZSBNMlBfQkFTRTEJCQkweDM0CisKKyNkZWZpbmUgU1RBVEVfSURMRQkwCS8qIENoYW5uZWwgaXMgaW5hY3RpdmUuICAqLworI2RlZmluZSBTVEFURV9TVEFMTAkxCS8qIENoYW5uZWwgaXMgYWN0aXZlLCBubyBidWZmZXJzIHBlbmRpbmcuICAqLworI2RlZmluZSBTVEFURV9PTgkyCS8qIENoYW5uZWwgaXMgYWN0aXZlLCBvbmUgYnVmZmVyIHBlbmRpbmcuICAqLworI2RlZmluZSBTVEFURV9ORVhUCTMJLyogQ2hhbm5lbCBpcyBhY3RpdmUsIHR3byBidWZmZXJzIHBlbmRpbmcuICAqLworCitzdHJ1Y3QgbTJwX2NoYW5uZWwgeworCWNoYXIJCQkJKm5hbWU7CisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJaW50CQkJCWlycTsKKworCXN0cnVjdCBjbGsJCQkqY2xrOworCXNwaW5sb2NrX3QJCQlsb2NrOworCisJdm9pZAkJCQkqY2xpZW50OworCXVuc2lnbmVkCQkJbmV4dF9zbG90OjE7CisJc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyCSpidWZmZXJfeGZlcjsKKwlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIJKmJ1ZmZlcl9uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQJCWJ1ZmZlcnNfcGVuZGluZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbTJwX2NoYW5uZWwgbTJwX3J4W10gPSB7CisJeyJtMnAxIiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMDQwLCBJUlFfRVA5M1hYX0RNQU0yUDF9LAorCXsibTJwMyIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDBjMCwgSVJRX0VQOTNYWF9ETUFNMlAzfSwKKwl7Im0ycDUiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAyMDAsIElSUV9FUDkzWFhfRE1BTTJQNX0sCisJeyJtMnA3IiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMjgwLCBJUlFfRVA5M1hYX0RNQU0yUDd9LAorCXsibTJwOSIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDMwMCwgSVJRX0VQOTNYWF9ETUFNMlA5fSwKKwl7TlVMTH0sCit9OworCitzdGF0aWMgc3RydWN0IG0ycF9jaGFubmVsIG0ycF90eFtdID0geworCXsibTJwMCIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDAwMCwgSVJRX0VQOTNYWF9ETUFNMlAwfSwKKwl7Im0ycDIiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAwODAsIElSUV9FUDkzWFhfRE1BTTJQMn0sCisJeyJtMnA0IiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMjQwLCBJUlFfRVA5M1hYX0RNQU0yUDR9LAorCXsibTJwNiIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDJjMCwgSVJRX0VQOTNYWF9ETUFNMlA2fSwKKwl7Im0ycDgiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAzNDAsIElSUV9FUDkzWFhfRE1BTTJQOH0sCisJe05VTEx9LAorfTsKKworc3RhdGljIHZvaWQgZmVlZF9idWYoc3RydWN0IG0ycF9jaGFubmVsICpjaCwgc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyICpidWYpCit7CisJaWYgKGNoLT5uZXh0X3Nsb3QgPT0gMCkgeworCQl3cml0ZWwoYnVmLT5zaXplLCBjaC0+YmFzZSArIE0yUF9NQVhDTlQwKTsKKwkJd3JpdGVsKGJ1Zi0+YnVzX2FkZHIsIGNoLT5iYXNlICsgTTJQX0JBU0UwKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoYnVmLT5zaXplLCBjaC0+YmFzZSArIE0yUF9NQVhDTlQxKTsKKwkJd3JpdGVsKGJ1Zi0+YnVzX2FkZHIsIGNoLT5iYXNlICsgTTJQX0JBU0UxKTsKKwl9CisJY2gtPm5leHRfc2xvdCBePSAxOworfQorCitzdGF0aWMgdm9pZCBjaG9vc2VfYnVmZmVyX3hmZXIoc3RydWN0IG0ycF9jaGFubmVsICpjaCkKK3sKKwlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZjsKKworCWNoLT5idWZmZXJfeGZlciA9IE5VTEw7CisJaWYgKCFsaXN0X2VtcHR5KCZjaC0+YnVmZmVyc19wZW5kaW5nKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KGNoLT5idWZmZXJzX3BlbmRpbmcubmV4dCwKKwkJCQkgc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7CisJCWZlZWRfYnVmKGNoLCBidWYpOworCQljaC0+YnVmZmVyX3hmZXIgPSBidWY7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaG9vc2VfYnVmZmVyX25leHQoc3RydWN0IG0ycF9jaGFubmVsICpjaCkKK3sKKwlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZjsKKworCWNoLT5idWZmZXJfbmV4dCA9IE5VTEw7CisJaWYgKCFsaXN0X2VtcHR5KCZjaC0+YnVmZmVyc19wZW5kaW5nKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KGNoLT5idWZmZXJzX3BlbmRpbmcubmV4dCwKKwkJCQkgc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7CisJCWZlZWRfYnVmKGNoLCBidWYpOworCQljaC0+YnVmZmVyX25leHQgPSBidWY7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbTJwX3NldF9jb250cm9sKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gsIHUzMiB2KQoreworCS8qCisJICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgbXVzdCBiZSByZWFkIGltbWVkaWF0ZWx5IGFmdGVyIGJlaW5nIHdyaXR0ZW4gc28KKwkgKiB0aGF0IHRoZSBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGlzIGNvcnJlY3RseSB1cGRhdGVkLiBTZWUgdGhlIGVwOTN4eAorCSAqIHVzZXJzJyBndWlkZSBmb3IgZGV0YWlscy4KKwkgKi8KKwl3cml0ZWwodiwgY2gtPmJhc2UgKyBNMlBfQ09OVFJPTCk7CisJcmVhZGwoY2gtPmJhc2UgKyBNMlBfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG0ycF9jaGFubmVsX3N0YXRlKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJcmV0dXJuIChyZWFkbChjaC0+YmFzZSArIE0yUF9TVEFUVVMpID4+IDQpICYgMHgzOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbTJwX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG0ycF9jaGFubmVsICpjaCA9IGRldl9pZDsKKwlzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbDsKKwl1MzIgaXJxX3N0YXR1cywgdjsKKwlpbnQgZXJyb3IgPSAwOworCisJY2wgPSBjaC0+Y2xpZW50OworCisJc3Bpbl9sb2NrKCZjaC0+bG9jayk7CisJaXJxX3N0YXR1cyA9IHJlYWRsKGNoLT5iYXNlICsgTTJQX0lOVEVSUlVQVCk7CisKKwlpZiAoaXJxX3N0YXR1cyAmIE0yUF9JTlRFUlJVUFRfRVJST1IpIHsKKwkJd3JpdGVsKE0yUF9JTlRFUlJVUFRfRVJST1IsIGNoLT5iYXNlICsgTTJQX0lOVEVSUlVQVCk7CisJCWVycm9yID0gMTsKKwl9CisKKwlpZiAoKGlycV9zdGF0dXMgJiAoTTJQX0lOVEVSUlVQVF9TVEFMTCB8IE0yUF9JTlRFUlJVUFRfTkZCKSkgPT0gMCkgeworCQlzcGluX3VubG9jaygmY2gtPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJc3dpdGNoIChtMnBfY2hhbm5lbF9zdGF0ZShjaCkpIHsKKwljYXNlIFNUQVRFX0lETEU6CisJCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2l0aG91dCBhIGRtYSBidWZmZXJcbiIpOworCQlCVUcoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNUQVRFX1NUQUxMOgorCQljbC0+YnVmZmVyX2ZpbmlzaGVkKGNsLT5jb29raWUsIGNoLT5idWZmZXJfeGZlciwgMCwgZXJyb3IpOworCQlpZiAoY2gtPmJ1ZmZlcl9uZXh0ICE9IE5VTEwpIHsKKwkJCWNsLT5idWZmZXJfZmluaXNoZWQoY2wtPmNvb2tpZSwgY2gtPmJ1ZmZlcl9uZXh0LAorCQkJCQkgICAgMCwgZXJyb3IpOworCQl9CisJCWNob29zZV9idWZmZXJfeGZlcihjaCk7CisJCWNob29zZV9idWZmZXJfbmV4dChjaCk7CisJCWlmIChjaC0+YnVmZmVyX3hmZXIgIT0gTlVMTCkKKwkJCWNsLT5idWZmZXJfc3RhcnRlZChjbC0+Y29va2llLCBjaC0+YnVmZmVyX3hmZXIpOworCQlicmVhazsKKworCWNhc2UgU1RBVEVfT046CisJCWNsLT5idWZmZXJfZmluaXNoZWQoY2wtPmNvb2tpZSwgY2gtPmJ1ZmZlcl94ZmVyLCAwLCBlcnJvcik7CisJCWNoLT5idWZmZXJfeGZlciA9IGNoLT5idWZmZXJfbmV4dDsKKwkJY2hvb3NlX2J1ZmZlcl9uZXh0KGNoKTsKKwkJY2wtPmJ1ZmZlcl9zdGFydGVkKGNsLT5jb29raWUsIGNoLT5idWZmZXJfeGZlcik7CisJCWJyZWFrOworCisJY2FzZSBTVEFURV9ORVhUOgorCQlwcl9jcml0KCJtMnBfaXJxOiBkbWEgaW50ZXJydXB0IHdoaWxlIG5leHRcbiIpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJdiA9IHJlYWRsKGNoLT5iYXNlICsgTTJQX0NPTlRST0wpICYgfihNMlBfQ09OVFJPTF9TVEFMTF9JUlFfRU4gfAorCQkJCQkgICAgICBNMlBfQ09OVFJPTF9ORkJfSVJRX0VOKTsKKwlpZiAoY2gtPmJ1ZmZlcl94ZmVyICE9IE5VTEwpCisJCXYgfD0gTTJQX0NPTlRST0xfU1RBTExfSVJRX0VOOworCWlmIChjaC0+YnVmZmVyX25leHQgIT0gTlVMTCkKKwkJdiB8PSBNMlBfQ09OVFJPTF9ORkJfSVJRX0VOOworCW0ycF9zZXRfY29udHJvbChjaCwgdik7CisKKwlzcGluX3VubG9jaygmY2gtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBtMnBfY2hhbm5lbCAqZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wpCit7CisJc3RydWN0IG0ycF9jaGFubmVsICpjaDsKKwlpbnQgaTsKKworCWlmIChjbC0+ZmxhZ3MgJiBFUDkzWFhfRE1BX00yUF9SWCkKKwkJY2ggPSBtMnBfcng7CisJZWxzZQorCQljaCA9IG0ycF90eDsKKworCWZvciAoaSA9IDA7IGNoW2ldLmJhc2U7IGkrKykgeworCQlzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbGllbnQ7CisKKwkJY2xpZW50ID0gY2hbaV0uY2xpZW50OworCQlpZiAoY2xpZW50ICE9IE5VTEwpIHsKKwkJCWludCBwb3J0OworCisJCQlwb3J0ID0gY2wtPmZsYWdzICYgRVA5M1hYX0RNQV9NMlBfUE9SVF9NQVNLOworCQkJaWYgKHBvcnQgPT0gKGNsaWVudC0+ZmxhZ3MgJgorCQkJCSAgICAgRVA5M1hYX0RNQV9NMlBfUE9SVF9NQVNLKSkgeworCQkJCXByX3dhcm5pbmcoIkRNQSBjaGFubmVsIGFscmVhZHkgdXNlZCBieSAlc1xuIiwKKwkJCQkJICAgY2wtPm5hbWUgPyA6ICJ1bmtub3duIGNsaWVudCIpOworCQkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBjaFtpXS5iYXNlOyBpKyspIHsKKwkJaWYgKGNoW2ldLmNsaWVudCA9PSBOVUxMKQorCQkJcmV0dXJuIGNoICsgaTsKKwl9CisKKwlwcl93YXJuaW5nKCJObyBmcmVlIERNQSBjaGFubmVsIGZvciAlc1xuIiwKKwkJICAgY2wtPm5hbWUgPyA6ICJ1bmtub3duIGNsaWVudCIpOworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworfQorCitzdGF0aWMgdm9pZCBjaGFubmVsX2VuYWJsZShzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsID0gY2gtPmNsaWVudDsKKwl1MzIgdjsKKworCWNsa19lbmFibGUoY2gtPmNsayk7CisKKwl2ID0gY2wtPmZsYWdzICYgRVA5M1hYX0RNQV9NMlBfUE9SVF9NQVNLOworCXdyaXRlbCh2LCBjaC0+YmFzZSArIE0yUF9QUEFMTE9DKTsKKworCXYgPSBjbC0+ZmxhZ3MgJiBFUDkzWFhfRE1BX00yUF9FUlJPUl9NQVNLOworCXYgfD0gTTJQX0NPTlRST0xfRU5BQkxFIHwgTTJQX0NPTlRST0xfRVJST1JfSVJRX0VOOworCW0ycF9zZXRfY29udHJvbChjaCwgdik7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5uZWxfZGlzYWJsZShzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCXUzMiB2OworCisJdiA9IHJlYWRsKGNoLT5iYXNlICsgTTJQX0NPTlRST0wpOworCXYgJj0gfihNMlBfQ09OVFJPTF9TVEFMTF9JUlFfRU4gfCBNMlBfQ09OVFJPTF9ORkJfSVJRX0VOKTsKKwltMnBfc2V0X2NvbnRyb2woY2gsIHYpOworCisJd2hpbGUgKG0ycF9jaGFubmVsX3N0YXRlKGNoKSA9PSBTVEFURV9PTikKKwkJY3B1X3JlbGF4KCk7CisKKwltMnBfc2V0X2NvbnRyb2woY2gsIDB4MCk7CisKKwl3aGlsZSAobTJwX2NoYW5uZWxfc3RhdGUoY2gpID09IFNUQVRFX1NUQUxMKQorCQljcHVfcmVsYXgoKTsKKworCWNsa19kaXNhYmxlKGNoLT5jbGspOworfQorCitpbnQgZXA5M3h4X2RtYV9tMnBfY2xpZW50X3JlZ2lzdGVyKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2g7CisJaW50IGVycjsKKworCWNoID0gZmluZF9mcmVlX2NoYW5uZWwoY2wpOworCWlmIChJU19FUlIoY2gpKQorCQlyZXR1cm4gUFRSX0VSUihjaCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShjaC0+aXJxLCBtMnBfaXJxLCAwLCBjbC0+bmFtZSA/IDogImRtYS1tMnAiLCBjaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNoLT5jbGllbnQgPSBjbDsKKwljaC0+bmV4dF9zbG90ID0gMDsKKwljaC0+YnVmZmVyX3hmZXIgPSBOVUxMOworCWNoLT5idWZmZXJfbmV4dCA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJmNoLT5idWZmZXJzX3BlbmRpbmcpOworCisJY2wtPmNoYW5uZWwgPSBjaDsKKworCWNoYW5uZWxfZW5hYmxlKGNoKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZXA5M3h4X2RtYV9tMnBfY2xpZW50X3JlZ2lzdGVyKTsKKwordm9pZCBlcDkzeHhfZG1hX20ycF9jbGllbnRfdW5yZWdpc3RlcihzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gY2wtPmNoYW5uZWw7CisKKwljaGFubmVsX2Rpc2FibGUoY2gpOworCWZyZWVfaXJxKGNoLT5pcnEsIGNoKTsKKwljaC0+Y2xpZW50ID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGVwOTN4eF9kbWFfbTJwX2NsaWVudF91bnJlZ2lzdGVyKTsKKwordm9pZCBlcDkzeHhfZG1hX20ycF9zdWJtaXQoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wsCisJCQkgICBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gY2wtPmNoYW5uZWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCXYgPSByZWFkbChjaC0+YmFzZSArIE0yUF9DT05UUk9MKTsKKwlpZiAoY2gtPmJ1ZmZlcl94ZmVyID09IE5VTEwpIHsKKwkJY2gtPmJ1ZmZlcl94ZmVyID0gYnVmOworCQlmZWVkX2J1ZihjaCwgYnVmKTsKKwkJY2wtPmJ1ZmZlcl9zdGFydGVkKGNsLT5jb29raWUsIGJ1Zik7CisKKwkJdiB8PSBNMlBfQ09OVFJPTF9TVEFMTF9JUlFfRU47CisJCW0ycF9zZXRfY29udHJvbChjaCwgdik7CisKKwl9IGVsc2UgaWYgKGNoLT5idWZmZXJfbmV4dCA9PSBOVUxMKSB7CisJCWNoLT5idWZmZXJfbmV4dCA9IGJ1ZjsKKwkJZmVlZF9idWYoY2gsIGJ1Zik7CisKKwkJdiB8PSBNMlBfQ09OVFJPTF9ORkJfSVJRX0VOOworCQltMnBfc2V0X2NvbnRyb2woY2gsIHYpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmNoLT5idWZmZXJzX3BlbmRpbmcpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZXA5M3h4X2RtYV9tMnBfc3VibWl0KTsKKwordm9pZCBlcDkzeHhfZG1hX20ycF9zdWJtaXRfcmVjdXJzaXZlKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsLAorCQkJCSAgICAgc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyICpidWYpCit7CisJc3RydWN0IG0ycF9jaGFubmVsICpjaCA9IGNsLT5jaGFubmVsOworCisJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmY2gtPmJ1ZmZlcnNfcGVuZGluZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9zdWJtaXRfcmVjdXJzaXZlKTsKKwordm9pZCBlcDkzeHhfZG1hX20ycF9mbHVzaChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gY2wtPmNoYW5uZWw7CisKKwljaGFubmVsX2Rpc2FibGUoY2gpOworCWNoLT5uZXh0X3Nsb3QgPSAwOworCWNoLT5idWZmZXJfeGZlciA9IE5VTEw7CisJY2gtPmJ1ZmZlcl9uZXh0ID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmY2gtPmJ1ZmZlcnNfcGVuZGluZyk7CisJY2hhbm5lbF9lbmFibGUoY2gpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZXA5M3h4X2RtYV9tMnBfZmx1c2gpOworCitzdGF0aWMgaW50IGluaXRfY2hhbm5lbChzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCWNoLT5jbGsgPSBjbGtfZ2V0KE5VTEwsIGNoLT5uYW1lKTsKKwlpZiAoSVNfRVJSKGNoLT5jbGspKQorCQlyZXR1cm4gUFRSX0VSUihjaC0+Y2xrKTsKKworCXNwaW5fbG9ja19pbml0KCZjaC0+bG9jayk7CisJY2gtPmNsaWVudCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZXA5M3h4X2RtYV9tMnBfaW5pdCh2b2lkKQoreworCWludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBtMnBfcnhbaV0uYmFzZTsgaSsrKSB7CisJCXJldCA9IGluaXRfY2hhbm5lbChtMnBfcnggKyBpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgbTJwX3R4W2ldLmJhc2U7IGkrKykgeworCQlyZXQgPSBpbml0X2NoYW5uZWwobTJwX3R4ICsgaSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXByX2luZm8oIk0yUCBETUEgc3Vic3lzdGVtIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoZXA5M3h4X2RtYV9tMnBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwN2EuYwppbmRleCA1YjVjMjJiLi42MTcxMTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDdhLmMKQEAgLTQ4LDEyICs0OCwyNCBAQAogCS5waHlfaWQJCT0gMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZGI5MzA3YV9pMmNfZGF0YVtdID0geworCXsKKwkJLyogT24tYm9hcmQgYmF0dGVyeSBiYWNrZWQgUlRDICovCisJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCisJfSwKKwkvKgorCSAqIFRoZSBJMkMgc2lnbmFscyBhcmUgYWxzbyByb3V0ZWQgdG8gdGhlIEV4cGFuc2lvbiBDb25uZWN0b3IgKEo0KQorCSAqLworfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGVkYjkzMDdhX2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVkYjkzMDdhX2ZsYXNoKTsKIAogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJmVkYjkzMDdhX2V0aF9kYXRhLCAxKTsKKworCWVwOTN4eF9pbml0X2kyYyhlZGI5MzA3YV9pMmNfZGF0YSwgQVJSQVlfU0laRShlZGI5MzA3YV9pMmNfZGF0YSkpOwogfQogCiBNQUNISU5FX1NUQVJUKEVEQjkzMDdBLCAiQ2lycnVzIExvZ2ljIEVEQjkzMDdBIEV2YWx1YXRpb24gQm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmJkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1MzIJCQlidXNfYWRkcjsKKwl1MTYJCQlzaXplOworfTsKKworc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCB7CisJY2hhcgkJCSpuYW1lOworCXU4CQkJZmxhZ3M7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSgqYnVmZmVyX3N0YXJ0ZWQpKHZvaWQgKmNvb2tpZSwKKwkJCQkJc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyICpidWYpOworCXZvaWQJCQkoKmJ1ZmZlcl9maW5pc2hlZCkodm9pZCAqY29va2llLAorCQkJCQlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZiwKKwkJCQkJaW50IGJ5dGVzLCBpbnQgZXJyb3IpOworCisJLyogSW50ZXJuYWwgdG8gdGhlIERNQSBjb2RlLiAgKi8KKwl2b2lkCQkJKmNoYW5uZWw7Cit9OworCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfSTJTMQkweDAwCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfSTJTMgkweDAxCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfQUFDMQkweDAyCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfQUFDMgkweDAzCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfQUFDMwkweDA0CisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfSTJTMwkweDA1CisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfVUFSVDEJMHgwNgorI2RlZmluZSBFUDkzWFhfRE1BX00yUF9QT1JUX1VBUlQyCTB4MDcKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9VQVJUMwkweDA4CisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfSVJEQQkweDA5CisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfTUFTSwkweDBmCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1RYCQkweDAwCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1JYCQkweDEwCisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX0FCT1JUX09OX0VSUk9SCTB4MjAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfSUdOT1JFX0VSUk9SCTB4NDAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfRVJST1JfTUFTSwkweDYwCisKK2ludCAgZXA5M3h4X2RtYV9tMnBfY2xpZW50X3JlZ2lzdGVyKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKm0ycCk7Cit2b2lkIGVwOTN4eF9kbWFfbTJwX2NsaWVudF91bnJlZ2lzdGVyKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKm0ycCk7Cit2b2lkIGVwOTN4eF9kbWFfbTJwX3N1Ym1pdChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICptMnAsCisJCQkgICBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1Zik7Cit2b2lkIGVwOTN4eF9kbWFfbTJwX3N1Ym1pdF9yZWN1cnNpdmUoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqbTJwLAorCQkJCSAgICAgc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyICpidWYpOwordm9pZCBlcDkzeHhfZG1hX20ycF9mbHVzaChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICptMnApOworCisjZW5kaWYgLyogX19BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAppbmRleCAyMmQ2YzlhLi5mNjZiZTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaApAQCAtNTgsNyArNTgsOCBAQAogCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwotI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDAwMDAwKQorI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQkoKHZvaWQgX19pb21lbSAqKQkJXAorCQkJCQkgKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAwMDAwMCkpCiAKICNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX0JBU0UJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwMTAwMDApCiAjZGVmaW5lIEVQOTNYWF9FVEhFUk5FVF9QSFlTX0JBU0UJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAxMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA2Nzc4OWQwLi5lZDhmMzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC05LDcgKzksNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCXUzMiBkZXZpY2VjZmc7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kbWEuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kbWEuYwppbmRleCA0ZjM1MDYzLi5lMmUwZGY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jCkBAIC0yMSwxNiArMjEsMTYgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KIAogI2lmIDAKLXN0YXRpYyBpbnQgZmJfZG1hX3JlcXVlc3QoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIGludCBmYl9kbWFfcmVxdWVzdCh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHZvaWQgZmJfZG1hX2VuYWJsZShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBmYl9kbWFfZW5hYmxlKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogfQogCi1zdGF0aWMgdm9pZCBmYl9kbWFfZGlzYWJsZShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBmYl9kbWFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKIH0KIApAQCAtNDIsNyArNDIsNyBAQAogfTsKICNlbmRpZgogCi12b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCitzdGF0aWMgaW50IF9faW5pdCBmYl9kbWFfaW5pdCh2b2lkKQogewogI2lmIDAKIAlkbWFbX0RDMjEyODVfRE1BKDApXS5kX29wcyA9ICZmYl9kbWFfb3BzOwpAQCAtNTAsNiArNTAsOCBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lTQV9ETUEKIAlpZiAoZm9vdGJyaWRnZV9jZm5fbW9kZSgpKQotCQlpc2FfaW5pdF9kbWEoZG1hICsgX0lTQV9ETUEoMCkpOworCQlpc2FfaW5pdF9kbWEoKTsKICNlbmRpZgorCXJldHVybiAwOwogfQorY29yZV9pbml0Y2FsbChmYl9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAyZGI3ZjM2Li4wYjI5MzE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE4LDcgKzE4LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAobW9kZSA9PSAncycpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWI3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKK2lmIEFSQ0hfR0VNSU5JCisKK21lbnUgIkNvcnRpbmEgU3lzdGVtcyBHZW1pbmkgSW1wbGVtZW50YXRpb25zIgorCitjb25maWcgTUFDSF9SVVQxMDAKKwlib29sICJUZWx0b25pa2EgUlVUMTAwIgorCXNlbGVjdCBHRU1JTklfTUVNX1NXQVAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEKKwkgIFRlbHRvbmlrYSAzRyBSb3V0ZXIgUlVUMTAwLgorCitlbmRtZW51CisKK2NvbmZpZyBHRU1JTklfTUVNX1NXQVAKKwlib29sICJHZW1pbmkgbWVtb3J5IGlzIHN3YXBwZWQiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiBHZW1pbmkgbWVtb3J5IGlzIHN3YXBwZWQgYnkgYm9vdGxvYWRlci4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NTA1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJOj0gaXJxLm8gbW0ubyB0aW1lLm8gZGV2aWNlcy5vIGdwaW8ubworCisjIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX1JVVDEwMCkJKz0gYm9hcmQtcnV0MXh4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYTUyYzIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDkgQEAKK2lmZXEgKCQoQ09ORklHX0dFTUlOSV9NRU1fU1dBUCkseSkKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MDA4MDAwMDAKK2Vsc2UKKyAgIHpyZWxhZGRyLXkJOj0gMHgxMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDEwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MTA4MDAwMDAKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1ydXQxeHguYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXJ1dDF4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGU5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1ydXQxeHguYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogIFN1cHBvcnQgZm9yIFRlbHRvbmlrYSBSVVQxeHgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcnV0MXh4X2tleXNbXSA9IHsKKwl7CisJCS5jb2RlCQk9IEtFWV9TRVRVUCwKKwkJLmdwaW8JCT0gNjAsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIlJlc2V0IHRvIGRlZmF1bHRzIiwKKwkJLnR5cGUJCT0gRVZfS0VZLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHJ1dDF4eF9rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBydXQxeHhfa2V5cywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHJ1dDF4eF9rZXlzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ1dDF4eF9rZXlzX2RldmljZSA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnJ1dDF4eF9rZXlzX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcnV0MTAwX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiUG93ZXIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSAxNywKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJHU00iLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAorCQkuZ3BpbwkJCT0gNywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHJ1dDEwMF9sZWRzX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShydXQxMDBfbGVkcyksCisJLmxlZHMJCT0gcnV0MTAwX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBydXQxeHhfbGVkcyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnJ1dDEwMF9sZWRzX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHJ1dDF4eF90aW1lciA9IHsKKwkuaW5pdAk9IGdlbWluaV90aW1lcl9pbml0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJ1dDF4eF9pbml0KHZvaWQpCit7CisJZ2VtaW5pX2dwaW9faW5pdCgpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3VhcnQoKTsKKwlwbGF0Zm9ybV9yZWdpc3Rlcl9wZmxhc2goU1pfOE0sIE5VTEwsIDApOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnV0MXh4X2xlZHMpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnV0MXh4X2tleXNfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChSVVQxMDAsICJUZWx0b25pa2EgUlVUMTAwIikKKwkucGh5c19pbwk9IDB4N2ZmZmMwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGZmZmZjMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAsCisJLm1hcF9pbwkJPSBnZW1pbmlfbWFwX2lvLAorCS5pbml0X2lycQk9IGdlbWluaV9pbml0X2lycSwKKwkudGltZXIJCT0gJnJ1dDF4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcnV0MXh4X2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzkyODM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvY29tbW9uLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvbW1vbiBHZW1pbmkgYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0dFTUlOSV9DT01NT05fSF9fCisjZGVmaW5lIF9fR0VNSU5JX0NPTU1PTl9IX18KKworc3RydWN0IG10ZF9wYXJ0aXRpb247CisKK2V4dGVybiB2b2lkIGdlbWluaV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBnZW1pbmlfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBnZW1pbmlfdGltZXJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGdlbWluaV9ncGlvX2luaXQodm9pZCk7CisKKy8qIENvbW1vbiBwbGF0Zm9ybSBkZXZpY2VzIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgcGxhdGZvcm1fcmVnaXN0ZXJfdWFydCh2b2lkKTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fcmVnaXN0ZXJfcGZsYXNoKHVuc2lnbmVkIGludCBzaXplLAorCQkJCSAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsCisJCQkJICAgIHVuc2lnbmVkIGludCBucl9wYXJ0cyk7CisKKyNlbmRpZiAvKiBfX0dFTUlOSV9DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1MjUyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2RldmljZXMuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29tbW9uIGRldmljZXMgZGVmaW5pdGlvbiBmb3IgR2VtaW5pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dsb2JhbF9yZWcuaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1lbWJhc2UJPSAodm9pZCAqKUlPX0FERFJFU1MoR0VNSU5JX1VBUlRfQkFTRSksCisJCS5tYXBiYXNlCT0gR0VNSU5JX1VBUlRfQkFTRSwKKwkJLmlycQkJPSBJUlFfVUFSVCwKKwkJLnVhcnRjbGsJPSBVQVJUX0NMSywKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnR5cGUJCT0gUE9SVF8xNjU1MEEsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfRklYRURfVFlQRSwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworaW50IHBsYXRmb3JtX3JlZ2lzdGVyX3VhcnQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBHRU1JTklfRkxBU0hfQkFTRSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBmbGFzaF9wbGF0Zm9ybV9kYXRhID0ge307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBmbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCT0gMCwKKwkuZGV2IAk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGZsYXNoX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworaW50IHBsYXRmb3JtX3JlZ2lzdGVyX3BmbGFzaCh1bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbnJfcGFydHMpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSArIEdMT0JBTF9TVEFUVVMpOworCisJaWYgKChyZWcgJiBGTEFTSF9UWVBFX01BU0spICE9IEZMQVNIX1RZUEVfUEFSQUxMRUwpCisJCXJldHVybiAtRU5YSU87CisKKwlpZiAocmVnICYgRkxBU0hfV0lEVEhfMTZCSVQpCisJCXBmbGFzaF9wbGF0Zm9ybV9kYXRhLndpZHRoID0gMjsKKwllbHNlCisJCXBmbGFzaF9wbGF0Zm9ybV9kYXRhLndpZHRoID0gMTsKKworCS8qIGVuYWJsZSBwYXJhbGxlbCBmbGFzaCBwaW5zIGFuZCBkaXNhYmxlIG90aGVycyAqLworCXJlZyA9IF9fcmF3X3JlYWRsKElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSArIEdMT0JBTF9NSVNDX0NUUkwpOworCXJlZyAmPSB+UEZMQVNIX1BBRFNfRElTQUJMRTsKKwlyZWcgfD0gU0ZMQVNIX1BBRFNfRElTQUJMRSB8IE5BTkRfUEFEU19ESVNBQkxFOworCV9fcmF3X3dyaXRlbChyZWcsIElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSArIEdMT0JBTF9NSVNDX0NUUkwpOworCisJZmxhc2hfcmVzb3VyY2UuZW5kID0gZmxhc2hfcmVzb3VyY2Uuc3RhcnQgKyBzaXplIC0gMTsKKworCXBmbGFzaF9wbGF0Zm9ybV9kYXRhLnBhcnRzID0gcGFydHM7CisJcGZsYXNoX3BsYXRmb3JtX2RhdGEubnJfcGFydHMgPSBucl9wYXJ0czsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBmbGFzaF9kZXZpY2UpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ncGlvLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBHZW1pbmkgZ3Bpb2NoaXAgYW5kIGludGVycnVwdCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIEJhc2VkIG9uIHBsYXQtbXhjL2dwaW8uYzoKKyAqICBNWEMgR1BJTyBzdXBwb3J0LiAoYykgMjAwOCBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICogIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCisjZGVmaW5lIEdQSU9fQkFTRSh4KQkJSU9fQUREUkVTUyhHRU1JTklfR1BJT19CQVNFKHgpKQorCisvKiBHUElPIHJlZ2lzdGVycyBkZWZpbml0aW9uICovCisjZGVmaW5lIEdQSU9fREFUQV9PVVQJCTB4MAorI2RlZmluZSBHUElPX0RBVEFfSU4JCTB4NAorI2RlZmluZSBHUElPX0RJUgkJMHg4CisjZGVmaW5lIEdQSU9fREFUQV9TRVQJCTB4MTAKKyNkZWZpbmUgR1BJT19EQVRBX0NMUgkJMHgxNAorI2RlZmluZSBHUElPX1BVTExfRU4JCTB4MTgKKyNkZWZpbmUgR1BJT19QVUxMX1RZUEUJCTB4MUMKKyNkZWZpbmUgR1BJT19JTlRfRU4JCTB4MjAKKyNkZWZpbmUgR1BJT19JTlRfU1RBVAkJMHgyNAorI2RlZmluZSBHUElPX0lOVF9NQVNLCQkweDJDCisjZGVmaW5lIEdQSU9fSU5UX0NMUgkJMHgzMAorI2RlZmluZSBHUElPX0lOVF9UWVBFCQkweDM0CisjZGVmaW5lIEdQSU9fSU5UX0JPVEhfRURHRQkweDM4CisjZGVmaW5lIEdQSU9fSU5UX0xFVkVMCQkweDNDCisjZGVmaW5lIEdQSU9fREVCT1VOQ0VfRU4JMHg0MAorI2RlZmluZSBHUElPX0RFQk9VTkNFX1BSRVNDQUxFCTB4NDQKKworI2RlZmluZSBHUElPX1BPUlRfTlVNCQkzCisKK3N0YXRpYyB2b2lkIF9zZXRfZ3Bpb19pcnFlbmFibGUodW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBpbmRleCwKKwkJCQlpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfRU4pOworCXJlZyA9IChyZWcgJiAofigxIDw8IGluZGV4KSkpIHwgKCEhZW5hYmxlIDw8IGluZGV4KTsKKwlfX3Jhd193cml0ZWwocmVnLCBiYXNlICsgR1BJT19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0UoZ3BpbyAvIDMyKTsKKworCV9fcmF3X3dyaXRlbCgxIDw8IChncGlvICUgMzIpLCBiYXNlICsgR1BJT19JTlRfQ0xSKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShncGlvIC8gMzIpOworCisJX3NldF9ncGlvX2lycWVuYWJsZShiYXNlLCBncGlvICUgMzIsIDApOworfQorCitzdGF0aWMgdm9pZCBncGlvX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0UoZ3BpbyAvIDMyKTsKKworCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFzZSwgZ3BpbyAlIDMyLCAxKTsKK30KKworc3RhdGljIGludCBncGlvX3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdW5zaWduZWQgaW50IGdwaW9fbWFzayA9IDEgPDwgKGdwaW8gJSAzMik7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0UoZ3BpbyAvIDMyKTsKKwl1bnNpZ25lZCBpbnQgcmVnX2JvdGgsIHJlZ19sZXZlbCwgcmVnX3R5cGU7CisKKwlyZWdfdHlwZSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9UWVBFKTsKKwlyZWdfbGV2ZWwgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKKwlyZWdfYm90aCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCXJlZ190eXBlICY9IH5ncGlvX21hc2s7CisJCXJlZ19ib3RoIHw9IGdwaW9fbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJcmVnX3R5cGUgJj0gfmdwaW9fbWFzazsKKwkJcmVnX2JvdGggJj0gfmdwaW9fbWFzazsKKwkJcmVnX2xldmVsICY9IH5ncGlvX21hc2s7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgorCQlyZWdfdHlwZSAmPSB+Z3Bpb19tYXNrOworCQlyZWdfYm90aCAmPSB+Z3Bpb19tYXNrOworCQlyZWdfbGV2ZWwgfD0gZ3Bpb19tYXNrOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CisJCXJlZ190eXBlIHw9IGdwaW9fbWFzazsKKwkJcmVnX2xldmVsICY9IH5ncGlvX21hc2s7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQlyZWdfdHlwZSB8PSBncGlvX21hc2s7CisJCXJlZ19sZXZlbCB8PSBncGlvX21hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCV9fcmF3X3dyaXRlbChyZWdfdHlwZSwgYmFzZSArIEdQSU9fSU5UX1RZUEUpOworCV9fcmF3X3dyaXRlbChyZWdfbGV2ZWwsIGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOworCV9fcmF3X3dyaXRlbChyZWdfYm90aCwgYmFzZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CisKKwlncGlvX2Fja19pcnEoaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBpbnQgZ3Bpb19pcnFfbm8sIGlycV9zdGF0OworCXVuc2lnbmVkIGludCBwb3J0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2RhdGEoaXJxKTsKKworCWlycV9zdGF0ID0gX19yYXdfcmVhZGwoR1BJT19CQVNFKHBvcnQpICsgR1BJT19JTlRfU1RBVCk7CisKKwlncGlvX2lycV9ubyA9IEdQSU9fSVJRX0JBU0UgKyBwb3J0ICogMzI7CisJZm9yICg7IGlycV9zdGF0ICE9IDA7IGlycV9zdGF0ID4+PSAxLCBncGlvX2lycV9ubysrKSB7CisKKwkJaWYgKChpcnFfc3RhdCAmIDEpID09IDApCisJCQljb250aW51ZTsKKworCQlCVUdfT04oIShpcnFfZGVzY1tncGlvX2lycV9ub10uaGFuZGxlX2lycSkpOworCQlpcnFfZGVzY1tncGlvX2lycV9ub10uaGFuZGxlX2lycShncGlvX2lycV9ubywKKwkJCQkmaXJxX2Rlc2NbZ3Bpb19pcnFfbm9dKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJHUElPIiwKKwkuYWNrID0gZ3Bpb19hY2tfaXJxLAorCS5tYXNrID0gZ3Bpb19tYXNrX2lycSwKKwkudW5tYXNrID0gZ3Bpb191bm1hc2tfaXJxLAorCS5zZXRfdHlwZSA9IGdwaW9fc2V0X2lycV90eXBlLAorfTsKKworc3RhdGljIHZvaWQgX3NldF9ncGlvX2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJaW50IGRpcikKK3sKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShvZmZzZXQgLyAzMik7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0RJUik7CisJaWYgKGRpcikKKwkJcmVnIHw9IDEgPDwgKG9mZnNldCAlIDMyKTsKKwllbHNlCisJCXJlZyAmPSB+KDEgPDwgKG9mZnNldCAlIDMyKSk7CisJX19yYXdfd3JpdGVsKHJlZywgYmFzZSArIEdQSU9fRElSKTsKK30KKworc3RhdGljIHZvaWQgZ2VtaW5pX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKG9mZnNldCAvIDMyKTsKKworCWlmICh2YWx1ZSkKKwkJX19yYXdfd3JpdGVsKDEgPDwgKG9mZnNldCAlIDMyKSwgYmFzZSArIEdQSU9fREFUQV9TRVQpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKDEgPDwgKG9mZnNldCAlIDMyKSwgYmFzZSArIEdQSU9fREFUQV9DTFIpOworfQorCitzdGF0aWMgaW50IGdlbWluaV9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0Uob2Zmc2V0IC8gMzIpOworCisJcmV0dXJuIChfX3Jhd19yZWFkbChiYXNlICsgR1BJT19EQVRBX0lOKSA+PiAob2Zmc2V0ICUgMzIpKSAmIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2VtaW5pX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlfc2V0X2dwaW9fZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VtaW5pX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJCWludCB2YWx1ZSkKK3sKKwlfc2V0X2dwaW9fZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgMSk7CisJZ2VtaW5pX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBnZW1pbmlfZ3Bpb19jaGlwID0geworCS5sYWJlbAkJCT0gIkdlbWluaSIsCisJLmRpcmVjdGlvbl9pbnB1dAk9IGdlbWluaV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkuZ2V0CQkJPSBnZW1pbmlfZ3Bpb19nZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBnZW1pbmlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCS5zZXQJCQk9IGdlbWluaV9ncGlvX3NldCwKKwkuYmFzZQkJCT0gMCwKKwkubmdwaW8JCQk9IEdQSU9fUE9SVF9OVU0gKiAzMiwKK307CisKK3ZvaWQgX19pbml0IGdlbWluaV9ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBHUElPX1BPUlRfTlVNOyBpKyspIHsKKwkJLyogZGlzYWJsZSwgdW5tYXNrIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyAqLworCQlfX3Jhd193cml0ZWwoMHgwLCBHUElPX0JBU0UoaSkgKyBHUElPX0lOVF9FTik7CisJCV9fcmF3X3dyaXRlbCgweDAsIEdQSU9fQkFTRShpKSArIEdQSU9fSU5UX01BU0spOworCQlfX3Jhd193cml0ZWwofjB4MCwgR1BJT19CQVNFKGkpICsgR1BJT19JTlRfQ0xSKTsKKworCQlmb3IgKGogPSBHUElPX0lSUV9CQVNFICsgaSAqIDMyOworCQkgICAgIGogPCBHUElPX0lSUV9CQVNFICsgKGkgKyAxKSAqIDMyOyBqKyspIHsKKwkJCXNldF9pcnFfY2hpcChqLCAmZ3Bpb19pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaiwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaiwgSVJRRl9WQUxJRCk7CisJCX0KKworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTyhpKSwgZ3Bpb19pcnFfaGFuZGxlcik7CisJCXNldF9pcnFfZGF0YShJUlFfR1BJTyhpKSwgKHZvaWQgKilpKTsKKwl9CisKKwlCVUdfT04oZ3Bpb2NoaXBfYWRkKCZnZW1pbmlfZ3Bpb19jaGlwKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNGE2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDIzIEBACisvKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKwkubWFjcm8JYWRkcnVhcnQscngKKwltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPworCWxkcmVxCVxyeCwgPUdFTUlOSV9VQVJUX0JBU0UJCQlAIHBoeXNpY2FsCisJbGRybmUJXHJ4LCA9SU9fQUREUkVTUyhHRU1JTklfVUFSVF9CQVNFKQlAIHZpcnR1YWwKKwkuZW5kbQorCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2RlZmluZSBGTE9XX0NPTlRST0wKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI0ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgR2VtaW5pIHBsYXRmb3JtLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBJUlFfU1RBVFVTCTB4MTQKKworCS5tYWNybyAgZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCS5lbmRtCisKKwkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIgICAgIFxpcnFzdGF0LCA9SU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UgKyBJUlFfU1RBVFVTKQorCWxkciAgICAgXGlycW5yLCBbXGlycXN0YXRdCisJY21wICAgICBcaXJxbnIsICMwCisJYmVxICAgICAyMzEzZgorCW1vdiAgICAgXHRtcCwgXGlycW5yCisJbW92ICAgICBcaXJxbnIsICMwCisyMzEyOgorCXRzdCAgICAgXHRtcCwgIzEKKwlibmUgICAgIDIzMTNmCisJYWRkICAgICBcaXJxbnIsIFxpcnFuciwgIzEKKwltb3YgICAgIFx0bXAsIFx0bXAsIGxzciAjMQorCWNtcCAgICAgXGlycW5yLCAjMzEKKwliY2MgICAgIDIzMTJiCisyMzEzOgorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZ2xvYmFsX3JlZy5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2dsb2JhbF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdmZjdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2dsb2JhbF9yZWcuaApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBHZW1pbmkuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fTUFDSF9HTE9CQUxfUkVHX0gKKyNkZWZpbmUgX19NQUNIX0dMT0JBTF9SRUdfSAorCisvKiBHbG9iYWwgV29yZCBJRCBSZWdpc3RlciovCisjZGVmaW5lIEdMT0JBTF9JRAkJCTB4MDAKKworI2RlZmluZSBDSElQX0lEKHJlZykJCQkoKHJlZykgPj4gOCkKKyNkZWZpbmUgQ0hJUF9SRVZJU0lPTihyZWcpCQkoKHJlZykgJiAweEZGKQorCisvKiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9TVEFUVVMJCQkweDA0CisKKyNkZWZpbmUgQ1BVX0JJR19FTkRJQU4JCQkoMSA8PCAzMSkKKyNkZWZpbmUgUExMX09TQ18zME0JCQkoMSA8PCAzMCkJLyogZWxzZSA2ME1IeiAqLworCisjZGVmaW5lIE9QRVJBVElPTl9NT0RFX01BU0sJCSgweEYgPDwgMjYpCisjZGVmaW5lIE9QTV9JRERRCQkJKDB4RiA8PCAyNikKKyNkZWZpbmUgT1BNX05BTkQJCQkoMHhFIDw8IDI2KQorI2RlZmluZSBPUE1fUklORwkJCSgweEQgPDwgMjYpCisjZGVmaW5lIE9QTV9ESVJFQ1RfQk9PVAkJCSgweEMgPDwgMjYpCisjZGVmaW5lIE9QTV9VU0IxX1BIWV9URVNUCQkoMHhCIDw8IDI2KQorI2RlZmluZSBPUE1fVVNCMF9QSFlfVEVTVAkJKDB4QSA8PCAyNikKKyNkZWZpbmUgT1BNX1NBVEExX1BIWV9URVNUCQkoMHg5IDw8IDI2KQorI2RlZmluZSBPUE1fU0FUQTBfUEhZX1RFU1QJCSgweDggPDwgMjYpCisjZGVmaW5lIE9QTV9JQ0VfQVJNCQkJKDB4NyA8PCAyNikKKyNkZWZpbmUgT1BNX0lDRV9GQVJBREFZCQkJKDB4NiA8PCAyNikKKyNkZWZpbmUgT1BNX1BMTF9CWVBBU1MJCQkoMHg1IDw8IDI2KQorI2RlZmluZSBPUE1fREVCVUcJCQkoMHg0IDw8IDI2KQorI2RlZmluZSBPUE1fQlVSTl9JTgkJCSgweDMgPDwgMjYpCisjZGVmaW5lIE9QTV9NQklTVAkJCSgweDIgPDwgMjYpCisjZGVmaW5lIE9QTV9TQ0FOCQkJKDB4MSA8PCAyNikKKyNkZWZpbmUgT1BNX1JFQUwJCQkoMHgwIDw8IDI2KQorCisjZGVmaW5lIEZMQVNIX1RZUEVfTUFTSwkJCSgweDMgPDwgMjQpCisjZGVmaW5lIEZMQVNIX1RZUEVfTkFORF8ySwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgRkxBU0hfVFlQRV9OQU5EXzUxMgkJKDB4MiA8PCAyNCkKKyNkZWZpbmUgRkxBU0hfVFlQRV9QQVJBTExFTAkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgRkxBU0hfVFlQRV9TRVJJQUwJCSgweDAgPDwgMjQpCisvKiBpZiBwYXJhbGxlbCAqLworI2RlZmluZSBGTEFTSF9XSURUSF8xNkJJVAkJKDEgPDwgMjMpCS8qIGVsc2UgOCBiaXQgKi8KKy8qIGlmIHNlcmlhbCAqLworI2RlZmluZSBGTEFTSF9BVE1FTAkJCSgxIDw8IDIzKQkvKiBlbHNlIFNUTSAqLworCisjZGVmaW5lIEZMQVNIX1NJWkVfTUFTSwkJCSgweDMgPDwgMjEpCisjZGVmaW5lIE5BTkRfMjU2TQkJCSgweDMgPDwgMjEpCS8qIGFuZCBtb3JlICovCisjZGVmaW5lIE5BTkRfMTI4TQkJCSgweDIgPDwgMjEpCisjZGVmaW5lIE5BTkRfNjRNCQkJKDB4MSA8PCAyMSkKKyNkZWZpbmUgTkFORF8zMk0JCQkoMHgwIDw8IDIxKQorI2RlZmluZSBBVE1FTF8xNk0JCQkoMHgzIDw8IDIxKQkvKiBhbmQgbW9yZSAqLworI2RlZmluZSBBVE1FTF84TQkJCSgweDIgPDwgMjEpCisjZGVmaW5lIEFUTUVMXzRNXzJNCQkJKDB4MSA8PCAyMSkKKyNkZWZpbmUgQVRNRUxfMU0JCQkoMHgwIDw8IDIxKQkvKiBhbmQgbGVzcyAqLworI2RlZmluZSBTVE1fMzJNCQkJCSgxIDw8IDIyKQkvKiBhbmQgbW9yZSAqLworI2RlZmluZSBTVE1fMTZNCQkJCSgwIDw8IDIyKQkvKiBhbmQgbGVzcyAqLworCisjZGVmaW5lIEZMQVNIX1BBUkFMTEVMX0hJR0hfUElOX0NOVAkoMSA8PCAyMCkJLyogZWxzZSBsb3cgcGluIGNudCAqLworCisjZGVmaW5lIENQVV9BSEJfUkFUSU9fTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgQ1BVX0FIQl8xXzEJCQkoMHgwIDw8IDE4KQorI2RlZmluZSBDUFVfQUhCXzNfMgkJCSgweDEgPDwgMTgpCisjZGVmaW5lIENQVV9BSEJfMjRfMTMJCQkoMHgyIDw8IDE4KQorI2RlZmluZSBDUFVfQUhCXzJfMQkJCSgweDMgPDwgMTgpCisKKyNkZWZpbmUgUkVHX1RPX0FIQl9TUEVFRChyZWcpCQkoKCgocmVnKSA+PiAxNSkgJiAweDcpICogMTAgKyAxMzApCisjZGVmaW5lIEFIQl9TUEVFRF9UT19SRUcoeCkJCSgoKCh4IC0gMTMwKSkgLyAxMCkgPDwgMTUpCisKKy8qIGl0IGlzIHBvc2libGUgdG8gb3ZlcnJpZGUgc29tZSBzZXR0aW5ncywgdXNlID4+IE9WRVJSSURFX3h4eHhfU0hJRlQgKi8KKyNkZWZpbmUgT1ZFUlJJREVfRkxBU0hfVFlQRV9TSElGVAkxNgorI2RlZmluZSBPVkVSUklERV9GTEFTSF9XSURUSF9TSElGVAkxNgorI2RlZmluZSBPVkVSUklERV9GTEFTSF9TSVpFX1NISUZUCTE2CisjZGVmaW5lIE9WRVJSSURFX0NQVV9BSEJfUkFUSU9fU0hJRlQJMTUKKyNkZWZpbmUgT1ZFUlJJREVfQUhCX1NQRUVEX1NISUZUCTE1CisKKy8qIEdsb2JhbCBQTEwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfUExMX0NUUkwJCQkweDA4CisKKyNkZWZpbmUgUExMX0JZUEFTUwkJCSgxIDw8IDMxKQorI2RlZmluZSBQTExfUE9XRVJfRE9XTgkJCSgxIDw8IDgpCisjZGVmaW5lIFBMTF9DT05UUk9MX1EJCQkoMHgxRiA8PCAwKQorCisvKiBHbG9iYWwgU29mdCBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9SRVNFVAkJCTB4MEMKKworI2RlZmluZSBSRVNFVF9HTE9CQUwJCQkoMSA8PCAzMSkKKyNkZWZpbmUgUkVTRVRfQ1BVMQkJCSgxIDw8IDMwKQorI2RlZmluZSBSRVNFVF9UVkUJCQkoMSA8PCAyOCkKKyNkZWZpbmUgUkVTRVRfU0FUQTEJCQkoMSA8PCAyNykKKyNkZWZpbmUgUkVTRVRfU0FUQTAJCQkoMSA8PCAyNikKKyNkZWZpbmUgUkVTRVRfQ0lSCQkJKDEgPDwgMjUpCisjZGVmaW5lIFJFU0VUX0VYVF9ERVYJCQkoMSA8PCAyNCkKKyNkZWZpbmUgUkVTRVRfV0QJCQkoMSA8PCAyMykKKyNkZWZpbmUgUkVTRVRfR1BJTzIJCQkoMSA8PCAyMikKKyNkZWZpbmUgUkVTRVRfR1BJTzEJCQkoMSA8PCAyMSkKKyNkZWZpbmUgUkVTRVRfR1BJTzAJCQkoMSA8PCAyMCkKKyNkZWZpbmUgUkVTRVRfU1NQCQkJKDEgPDwgMTkpCisjZGVmaW5lIFJFU0VUX1VBUlQJCQkoMSA8PCAxOCkKKyNkZWZpbmUgUkVTRVRfVElNRVIJCQkoMSA8PCAxNykKKyNkZWZpbmUgUkVTRVRfUlRDCQkJKDEgPDwgMTYpCisjZGVmaW5lIFJFU0VUX0lOVDEJCQkoMSA8PCAxNSkKKyNkZWZpbmUgUkVTRVRfSU5UMAkJCSgxIDw8IDE0KQorI2RlZmluZSBSRVNFVF9MQ0QJCQkoMSA8PCAxMykKKyNkZWZpbmUgUkVTRVRfTFBDCQkJKDEgPDwgMTIpCisjZGVmaW5lIFJFU0VUX0FQQgkJCSgxIDw8IDExKQorI2RlZmluZSBSRVNFVF9ETUEJCQkoMSA8PCAxMCkKKyNkZWZpbmUgUkVTRVRfVVNCMQkJCSgxIDw8IDkpCisjZGVmaW5lIFJFU0VUX1VTQjAJCQkoMSA8PCA4KQorI2RlZmluZSBSRVNFVF9QQ0kJCQkoMSA8PCA3KQorI2RlZmluZSBSRVNFVF9HTUFDMQkJCSgxIDw8IDYpCisjZGVmaW5lIFJFU0VUX0dNQUMwCQkJKDEgPDwgNSkKKyNkZWZpbmUgUkVTRVRfU0VDVVJJVFkJCQkoMSA8PCA0KQorI2RlZmluZSBSRVNFVF9SQUlECQkJKDEgPDwgMykKKyNkZWZpbmUgUkVTRVRfSURFCQkJKDEgPDwgMikKKyNkZWZpbmUgUkVTRVRfRkxBU0gJCQkoMSA8PCAxKQorI2RlZmluZSBSRVNFVF9EUkFNCQkJKDEgPDwgMCkKKworLyogR2xvYmFsIElPIFBhZCBEcml2aW5nIENhcGFiaWxpdHkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfSU9fRFJJVklOR19DVFJMCQkweDEwCisKKyNkZWZpbmUgRFJJVklOR19DVVJSRU5UX01BU0sJCTB4MworCisvKiBoZXJlIDAwLTRtQSwgMDEtOG1BLCAxMC0xMm1BLCAxMS0xNm1BICovCisjZGVmaW5lIEdQSU8xX1BBRFNfMzFfMjhfU0hJRlQJCTI4CisjZGVmaW5lIEdQSU8wX1BBRFNfMzFfMTZfU0hJRlQJCTI2CisjZGVmaW5lIEdQSU8wX1BBRFNfMTVfMF9TSElGVAkJMjQKKyNkZWZpbmUgUENJX0FORF9FWFRfUkVTRVRfUEFEU19TSElGVAkyMgorI2RlZmluZSBJREVfUEFEU19TSElGVAkJCTIwCisjZGVmaW5lIEdNQUMxX1BBRFNfU0hJRlQJCTE4CisjZGVmaW5lIEdNQUMwX1BBRFNfU0hJRlQJCTE2CisvKiBEUkFNIGlzIG5vdCBpbiBtQSBhbmQgcG9vcmx5IGRvY3VtZW50ZWQgKi8KKyNkZWZpbmUgRFJBTV9DTE9DS19QQURTX1NISUZUCQk4CisjZGVmaW5lIERSQU1fREFUQV9QQURTX1NISUZUCQk0CisjZGVmaW5lIERSQU1fQ09OVFJPTF9QQURTX1NISUZUCQkwCisKKy8qIEdsb2JhbCBJTyBQYWQgU2xldyBSYXRlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX0lPX1NMRVdfUkFURV9DVFJMCTB4MTQKKworI2RlZmluZSBHUElPMV9QQURTXzMxXzI4X1NMT1cJCSgxIDw8IDEwKQorI2RlZmluZSBHUElPMF9QQURTXzMxXzE2X1NMT1cJCSgxIDw8IDkpCisjZGVmaW5lIEdQSU8wX1BBRFNfMTVfMF9TTE9XCQkoMSA8PCA4KQorI2RlZmluZSBQQ0lfUEFEU19TTE9XCQkJKDEgPDwgNykKKyNkZWZpbmUgSURFX1BBRFNfU0xPVwkJCSgxIDw8IDYpCisjZGVmaW5lIEdNQUMxX1BBRFNfU0xPVwkJCSgxIDw8IDUpCisjZGVmaW5lIEdNQUMwX1BBRFNfU0xPVwkJCSgxIDw8IDQpCisjZGVmaW5lIERSQU1fQ0xPQ0tfUEFEU19TTE9XCQkoMSA8PCAxKQorI2RlZmluZSBEUkFNX0lPX1BBRFNfU0xPVwkJKDEgPDwgMCkKKworLyoKKyAqIEdlbmVyYWwgc2tldyBjb250cm9sIGRlZmluZXMKKyAqIDE2IHN0ZXBzLCBlYWNoIHN0ZXAgaXMgYXJvdW5kIDAuMm5zCisgKi8KKyNkZWZpbmUgU0tFV19NQVNLCQkJMHhGCisKKy8qIEdsb2JhbCBJREUgUEFEIFNrZXcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfSURFX1NLRVdfQ1RSTAkJMHgxOAorCisjZGVmaW5lIElERTFfSE9TVF9TVFJPQkVfREVMQVlfU0hJRlQJMjgKKyNkZWZpbmUgSURFMV9ERVZJQ0VfU1RST0JFX0RFTEFZX1NISUZUCTI0CisjZGVmaW5lIElERTFfT1VUUFVUX0lPX1NLRVdfU0hJRlQJMjAKKyNkZWZpbmUgSURFMV9JTlBVVF9JT19TS0VXX1NISUZUCTE2CisjZGVmaW5lIElERTBfSE9TVF9TVFJPQkVfREVMQVlfU0hJRlQJMTIKKyNkZWZpbmUgSURFMF9ERVZJQ0VfU1RST0JFX0RFTEFZX1NISUZUCTgKKyNkZWZpbmUgSURFMF9PVVRQVVRfSU9fU0tFV19TSElGVAk0CisjZGVmaW5lIElERTBfSU5QVVRfSU9fU0tFV19TSElGVAkwCisKKy8qIEdsb2JhbCBHTUFDIENvbnRyb2wgUGFkIFNrZXcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfR01BQ19DVFJMX1NLRVdfQ1RSTAkweDFDCisKKyNkZWZpbmUgR01BQzFfVFhDX1NLRVdfU0hJRlQJCTI4CisjZGVmaW5lIEdNQUMxX1RYRU5fU0tFV19TSElGVAkJMjQKKyNkZWZpbmUgR01BQzFfUlhDX1NLRVdfU0hJRlQJCTIwCisjZGVmaW5lIEdNQUMxX1JYRFZfU0tFV19TSElGVAkJMTYKKyNkZWZpbmUgR01BQzBfVFhDX1NLRVdfU0hJRlQJCTEyCisjZGVmaW5lIEdNQUMwX1RYRU5fU0tFV19TSElGVAkJOAorI2RlZmluZSBHTUFDMF9SWENfU0tFV19TSElGVAkJNAorI2RlZmluZSBHTUFDMF9SWERWX1NLRVdfU0hJRlQJCTAKKworLyogR2xvYmFsIEdNQUMwIERhdGEgUEFEIFNrZXcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfR01BQzBfREFUQV9TS0VXX0NUUkwJMHgyMAorLyogR2xvYmFsIEdNQUMxIERhdGEgUEFEIFNrZXcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfR01BQzFfREFUQV9TS0VXX0NUUkwJMHgyNAorCisjZGVmaW5lIEdNQUNfVFhEX1NLRVdfU0hJRlQoeCkJCSgoKHgpICogNCkgKyAxNikKKyNkZWZpbmUgR01BQ19SWERfU0tFV19TSElGVCh4KQkJKCh4KSAqIDQpCisKKy8qIENQVSBoYXMgdHdvIEFIQiBidXNzZXMuICovCisKKy8qIEdsb2JhbCBBcmJpdHJhdGlvbjAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfQVJCSVRSQVRJT04wX0NUUkwJMHgyOAorCisjZGVmaW5lIEJPT1RfQ09OVFJPTExFUl9ISUdIX1BSSU8JKDEgPDwgMykKKyNkZWZpbmUgRE1BX0JVUzFfSElHSF9QUklPCQkoMSA8PCAyKQorI2RlZmluZSBDUFUwX0hJR0hfUFJJTwkJCSgxIDw8IDApCisKKy8qIEdsb2JhbCBBcmJpdHJhdGlvbjEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfQVJCSVRSQVRJT04xX0NUUkwJMHgyQworCisjZGVmaW5lIFRWRV9ISUdIX1BSSU8JCQkoMSA8PCA5KQorI2RlZmluZSBQQ0lfSElHSF9QUklPCQkJKDEgPDwgOCkKKyNkZWZpbmUgVVNCMV9ISUdIX1BSSU8JCQkoMSA8PCA3KQorI2RlZmluZSBVU0IwX0hJR0hfUFJJTwkJCSgxIDw8IDYpCisjZGVmaW5lIEdNQUMxX0hJR0hfUFJJTwkJCSgxIDw8IDUpCisjZGVmaW5lIEdNQUMwX0hJR0hfUFJJTwkJCSgxIDw8IDQpCisjZGVmaW5lIFNFQ1VSSVRZX0hJR0hfUFJJTwkJKDEgPDwgMykKKyNkZWZpbmUgUkFJRF9ISUdIX1BSSU8JCQkoMSA8PCAyKQorI2RlZmluZSBJREVfSElHSF9QUklPCQkJKDEgPDwgMSkKKyNkZWZpbmUgRE1BX0JVUzJfSElHSF9QUklPCQkoMSA8PCAwKQorCisvKiBDb21tb24gYml0cyBmb3IgYm90aCBhcmJpdHJhdGlvbiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQlVSU1RfTEVOR1RIX1NISUZUCQkxNgorI2RlZmluZSBCVVJTVF9MRU5HVEhfTUFTSwkJKDB4M0YgPDwgMTYpCisKKy8qIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfTUlTQ19DVFJMCQkweDMwCisKKyNkZWZpbmUgTUVNT1JZX1NQQUNFX1NXQVAJCSgxIDw8IDMxKQorI2RlZmluZSBVU0IxX1BMVUdfTUlOSUIJCQkoMSA8PCAzMCkgLyogZWxzZSBwbHVnIGlzIG1pbmktQSAqLworI2RlZmluZSBVU0IwX1BMVUdfTUlOSUIJCQkoMSA8PCAyOSkKKyNkZWZpbmUgR01BQ19HTUlJCQkJKDEgPDwgMjgpCisjZGVmaW5lIEdNQUNfMV9FTkFCTEUJCQkoMSA8PCAyNykKKy8qIFRPRE86IGRlZmluZSBBVEEvU0FUQSBiaXRzICovCisjZGVmaW5lIFVTQjFfVkJVU19PTgkJCSgxIDw8IDIzKQorI2RlZmluZSBVU0IwX1ZCVVNfT04JCQkoMSA8PCAyMikKKyNkZWZpbmUgQVBCX0NMS09VVF9FTkFCTEUJCSgxIDw8IDIxKQorI2RlZmluZSBUVkNfQ0xLT1VUX0VOQUJMRQkJKDEgPDwgMjApCisjZGVmaW5lIEVYVF9DTEtJTl9FTkFCTEUJCSgxIDw8IDE5KQorI2RlZmluZSBQQ0lfNjZNSFoJCQkoMSA8PCAxOCkgLyogZWxzZSAzMyBNSHogKi8KKyNkZWZpbmUgUENJX0NMS09VVF9FTkFCTEUJCSgxIDw8IDE3KQorI2RlZmluZSBMUENfQ0xLT1VUX0VOQUJMRQkJKDEgPDwgMTYpCisjZGVmaW5lIFVTQjFfV0FLRVVQX09OCQkJKDEgPDwgMTUpCisjZGVmaW5lIFVTQjBfV0FLRVVQX09OCQkJKDEgPDwgMTQpCisvKiBUT0RPOiBkZWZpbmUgUENJIGlkbGUgZGV0ZWN0IGJpdHMgKi8KKyNkZWZpbmUgVFZDX1BBRFNfRU5BQkxFCQkJKDEgPDwgOSkKKyNkZWZpbmUgU1NQX1BBRFNfRU5BQkxFCQkJKDEgPDwgOCkKKyNkZWZpbmUgTENEX1BBRFNfRU5BQkxFCQkJKDEgPDwgNykKKyNkZWZpbmUgTFBDX1BBRFNfRU5BQkxFCQkJKDEgPDwgNikKKyNkZWZpbmUgUENJX1BBRFNfRU5BQkxFCQkJKDEgPDwgNSkKKyNkZWZpbmUgSURFX1BBRFNfRU5BQkxFCQkJKDEgPDwgNCkKKyNkZWZpbmUgRFJBTV9QQURTX1BPV0VSX0RPV04JCSgxIDw8IDMpCisjZGVmaW5lIE5BTkRfUEFEU19ESVNBQkxFCQkoMSA8PCAyKQorI2RlZmluZSBQRkxBU0hfUEFEU19ESVNBQkxFCQkoMSA8PCAxKQorI2RlZmluZSBTRkxBU0hfUEFEU19ESVNBQkxFCQkoMSA8PCAwKQorCisvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfQ0xPQ0tfQ1RSTAkJMHgzNAorCisjZGVmaW5lIFBPV0VSX1NUQVRFX0cwCQkJKDEgPDwgMzEpCisjZGVmaW5lIFBPV0VSX1NUQVRFX1MxCQkJKDEgPDwgMzApIC8qIGVsc2UgaXQgaXMgUzMvUzQgc3RhdGUgKi8KKyNkZWZpbmUgU0VDVVJJVFlfQVBCX0FIQgkJKDEgPDwgMjkpCisvKiBlbHNlIFNlY3VyaXR5IEFQQiBjbGsgd2lsbCBiZSAwLjc1eEFIQiAqLworLyogVE9ETzogVFZDIGNsb2NrIGRpdmlkZXIgKi8KKyNkZWZpbmUgUENJX0NMS1JVTl9FTkFCTEUJCSgxIDw8IDE2KQorI2RlZmluZSBCT09UX0NMS19ESVNBQkxFCQkoMSA8PCAxMykKKyNkZWZpbmUgVFZDX0NMS19ESVNBQkxFCQkJKDEgPDwgMTIpCisjZGVmaW5lIEZMQVNIX0NMS19ESVNBQkxFCQkoMSA8PCAxMSkKKyNkZWZpbmUgRERSX0NMS19ESVNBQkxFCQkJKDEgPDwgMTApCisjZGVmaW5lIFBDSV9DTEtfRElTQUJMRQkJCSgxIDw8IDkpCisjZGVmaW5lIElERV9DTEtfRElTQUJMRQkJCSgxIDw8IDgpCisjZGVmaW5lIFVTQjFfQ0xLX0RJU0FCTEUJCSgxIDw8IDcpCisjZGVmaW5lIFVTQjBfQ0xLX0RJU0FCTEUJCSgxIDw8IDYpCisjZGVmaW5lIFNBVEExX0NMS19ESVNBQkxFCQkoMSA8PCA1KQorI2RlZmluZSBTQVRBMF9DTEtfRElTQUJMRQkJKDEgPDwgNCkKKyNkZWZpbmUgR01BQzFfQ0xLX0RJU0FCTEUJCSgxIDw8IDMpCisjZGVmaW5lIEdNQUMwX0NMS19ESVNBQkxFCQkoMSA8PCAyKQorI2RlZmluZSBTRUNVUklUWV9DTEtfRElTQUJMRQkJKDEgPDwgMSkKKworLyogVE9ETzogb3RoZXIgcmVnaXN0ZXJzIGRlZmluaXRpb25zIGlmIG5lZWRlZCAqLworCisjZW5kaWYgLyogX19NQUNIX0dMT0JBTF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjMmM3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIEdlbWluaSBncGlvbGliIHNwZWNpZmljIGRlZmluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19NQUNIX0dQSU9fSF9fCisjZGVmaW5lIF9fTUFDSF9HUElPX0hfXworCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorCisjZGVmaW5lIGdwaW9fdG9faXJxKHgpCSgoeCkgKyBHUElPX0lSUV9CQVNFKQorI2RlZmluZSBpcnFfdG9fZ3Bpbyh4KQkoKHgpIC0gR1BJT19JUlFfQkFTRSkKKworI2VuZGlmIC8qIF9fTUFDSF9HUElPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY3NTI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBHZW1pbmkuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19NQUNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19NQUNIX0hBUkRXQVJFX0gKKworLyoKKyAqIE1lbW9yeSBNYXAgZGVmaW5pdGlvbnMKKyAqLworLyogRklYTUU6IERvZXMgaXQgcmVhbGx5IHN3YXAgU1JBTSBsaWtlIHRoaXM/ICovCisjaWZkZWYgQ09ORklHX0dFTUlOSV9NRU1fU1dBUAorIyBkZWZpbmUgR0VNSU5JX0RSQU1fQkFTRQkweDAwMDAwMDAwCisjIGRlZmluZSBHRU1JTklfU1JBTV9CQVNFCTB4MjAwMDAwMDAKKyNlbHNlCisjIGRlZmluZSBHRU1JTklfU1JBTV9CQVNFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEdFTUlOSV9EUkFNX0JBU0UJMHgxMDAwMDAwMAorI2VuZGlmCisjZGVmaW5lIEdFTUlOSV9GTEFTSF9CQVNFCTB4MzAwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0dMT0JBTF9CQVNFCTB4NDAwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1dBUVRDSERPR19CQVNFCTB4NDEwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1VBUlRfQkFTRQkweDQyMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9USU1FUl9CQVNFCTB4NDMwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0xDRF9CQVNFCQkweDQ0MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9SVENfQkFTRQkJMHg0NTAwMDAwMAorI2RlZmluZSBHRU1JTklfU0FUQV9CQVNFCTB4NDYwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0xQQ19IT1NUX0JBU0UJMHg0NzAwMDAwMAorI2RlZmluZSBHRU1JTklfTFBDX0lPX0JBU0UJMHg0NzgwMDAwMAorI2RlZmluZSBHRU1JTklfSU5URVJSVVBUX0JBU0UJMHg0ODAwMDAwMAorLyogVE9ETzogRGlmZmVyZW50IGludGVycnVwdCBjb250cm9sZXJzIHdoZW4gU01QCisgKiAjZGVmaW5lIEdFTUlOSV9JTlRFUlJVUFQwX0JBU0UJMHg0ODAwMDAwMAorICogI2RlZmluZSBHRU1JTklfSU5URVJSVVBUMV9CQVNFCTB4NDkwMDAwMDAKKyAqLworI2RlZmluZSBHRU1JTklfU1NQX0NUUkxfQkFTRQkweDRBMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9QT1dFUl9DVFJMX0JBU0UJMHg0QjAwMDAwMAorI2RlZmluZSBHRU1JTklfQ0lSX0JBU0UJCTB4NEMwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0dQSU9fQkFTRSh4KQkoMHg0RDAwMDAwMCArICh4KSAqIDB4MTAwMDAwMCkKKyNkZWZpbmUgR0VNSU5JX1BDSV9JT19CQVNFCTB4NTAwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1BDSV9NRU1fQkFTRQkweDU4MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9UT0VfQkFTRQkJMHg2MDAwMDAwMAorI2RlZmluZSBHRU1JTklfR01BQzBfQkFTRQkweDYwMDBBMDAwCisjZGVmaW5lIEdFTUlOSV9HTUFDMV9CQVNFCTB4NjAwMEUwMDAKKyNkZWZpbmUgR0VNSU5JX1NFQ1VSSVRZX0JBU0UJMHg2MjAwMDAwMAorI2RlZmluZSBHRU1JTklfSURFMF9CQVNFCTB4NjMwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0lERTFfQkFTRQkweDYzNDAwMDAwCisjZGVmaW5lIEdFTUlOSV9SQUlEX0JBU0UJMHg2NDAwMDAwMAorI2RlZmluZSBHRU1JTklfRkxBU0hfQ1RSTF9CQVNFCTB4NjUwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0RSQU1fQ1RSTF9CQVNFCTB4NjYwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0dFTkVSQUxfRE1BX0JBU0UJMHg2NzAwMDAwMAorI2RlZmluZSBHRU1JTklfVVNCMF9CQVNFCTB4NjgwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1VTQjFfQkFTRQkweDY5MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9CSUdfRU5ESUFOX0JBU0UJMHg4MDAwMDAwMAorCisjZGVmaW5lIEdFTUlOSV9USU1FUjFfQkFTRQlHRU1JTklfVElNRVJfQkFTRQorI2RlZmluZSBHRU1JTklfVElNRVIyX0JBU0UJKEdFTUlOSV9USU1FUl9CQVNFICsgMHgxMCkKKyNkZWZpbmUgR0VNSU5JX1RJTUVSM19CQVNFCShHRU1JTklfVElNRVJfQkFTRSArIDB4MjApCisKKy8qCisgKiBVQVJUIENsb2NrIHdoZW4gU3lzdGVtIGNsayBpcyAxNTBNSHoKKyAqLworI2RlZmluZSBVQVJUX0NMSwk0ODAwMDAwMAorCisvKgorICogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkKKyAqLworI2RlZmluZSBJT19BRERSRVNTKHgpCSgoKCh4KSAmIDB4RkZGMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4MDAwRkZGRkYpIHwgMHhGMDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NDgwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDE4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19NQUNIX0lPX0gKKyNkZWZpbmUgX19NQUNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNlbmRpZiAvKiBfX01BQ0hfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiYzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19NQUNIX0lSUVNfSF9fCisjZGVmaW5lIF9fTUFDSF9JUlFTX0hfXworCisjZGVmaW5lIElSUV9TRVJJUlExCTMxCisjZGVmaW5lIElSUV9TRVJJUlEwCTMwCisjZGVmaW5lIElSUV9QQ0lECTI5CisjZGVmaW5lIElSUV9QQ0lDCTI4CisjZGVmaW5lIElSUV9QQ0lCCTI3CisjZGVmaW5lIElSUV9QV1IJCTI2CisjZGVmaW5lIElSUV9DSVIJCTI1CisjZGVmaW5lIElSUV9HUElPKHgpCSgyMiArICh4KSkKKyNkZWZpbmUgSVJRX1NTUAkJMjEKKyNkZWZpbmUgSVJRX0xQQwkJMjAKKyNkZWZpbmUgSVJRX0xDRAkJMTkKKyNkZWZpbmUgSVJRX1VBUlQJMTgKKyNkZWZpbmUgSVJRX1JUQwkJMTcKKyNkZWZpbmUgSVJRX1RJTUVSMwkxNgorI2RlZmluZSBJUlFfVElNRVIyCTE1CisjZGVmaW5lIElSUV9USU1FUjEJMTQKKyNkZWZpbmUgSVJRX0ZMQVNICTEyCisjZGVmaW5lIElSUV9VU0IxCTExCisjZGVmaW5lIElSUV9VU0IwCTEwCisjZGVmaW5lIElSUV9ETUEJCTkKKyNkZWZpbmUgSVJRX1BDSQkJOAorI2RlZmluZSBJUlFfSVBTRUMJNworI2RlZmluZSBJUlFfUkFJRAk2CisjZGVmaW5lIElSUV9JREUxCTUKKyNkZWZpbmUgSVJRX0lERTAJNAorI2RlZmluZSBJUlFfV0FUQ0hET0cJMworI2RlZmluZSBJUlFfR01BQzEJMgorI2RlZmluZSBJUlFfR01BQzAJMQorI2RlZmluZSBJUlFfSVBJCQkwCisKKyNkZWZpbmUgTk9STUFMX0lSUV9OVU0JMzIKKworI2RlZmluZSBHUElPX0lSUV9CQVNFCU5PUk1BTF9JUlFfTlVNCisjZGVmaW5lIEdQSU9fSVJRX05VTQkoMyAqIDMyKQorCisjZGVmaW5lIEFSQ0hfVElNRVJfSVJRCUlSUV9USU1FUjIKKworI2RlZmluZSBOUl9JUlFTCQkoTk9STUFMX0lSUV9OVU0gKyBHUElPX0lSUV9OVU0pCisKKyNlbmRpZiAvKiBfX01BQ0hfSVJRU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE0ZDViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX01BQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19NQUNIX01FTU9SWV9ICisKKyNpZmRlZiBDT05GSUdfR0VNSU5JX01FTV9TV0FQCisjIGRlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorI2Vsc2UKKyMgZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MTAwMDAwMDApCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTUFDSF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYmQ3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fTUFDSF9TWVNURU1fSAorI2RlZmluZSBfX01BQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ2xvYmFsX3JlZy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJLyoKKwkgKiBCZWNhdXNlIG9mIGJyb2tlbiBoYXJkd2FyZSB3ZSBoYXZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9yIHRoZSBDUFUKKwkgKiB3aWxsIG5ldmVyIHdha2V1cC4uLiBBY2N0dWFseSBpdCBpcyBub3QgdmVyeSBnb29kIHRvIGVuYWJsZQorCSAqIGludGVycnVwdHMgaGVyZSBzaW5jZSBzY2hlZHVsZXIgY2FuIG1pc3MgYSB0aWNrLCBidXQgdGhlcmUgaXMKKwkgKiBubyBvdGhlciB3YXkgYXJvdW5kIHRoaXMuIFBsYXRmb3JtcyB0aGF0IG5lZWRzIGl0IGZvciBwb3dlciBzYXZpbmcKKwkgKiBzaG91bGQgY2FsbCBlbmFibGVfaGx0KCkgaW4gaW5pdCBjb2RlLCBzaW5jZSBieSBkZWZhdWx0IGl0IGlzCisJICogZGlzYWJsZWQuCisJICovCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwlfX3Jhd193cml0ZWwoUkVTRVRfR0xPQkFMIHwgUkVTRVRfQ1BVMSwKKwkJICAgICBJT19BRERSRVNTKEdFTUlOSV9HTE9CQUxfQkFTRSkgKyBHTE9CQUxfUkVTRVQpOworfQorCisjZW5kaWYgLyogX19NQUNIX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNTY5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDEzIEBACisvKgorICogR2VtaW5pIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKiBXaGVuIEFIQiBidXMgZnJlcXVlbmN5IGlzIDE1ME1IeiAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMzgwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YzVkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBCYXNlZCBvbiBtYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oOgorICogQ29weXJpZ2h0OgkoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19NQUNIX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX01BQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqVUFSVCA9ICh1bnNpZ25lZCBsb25nICopR0VNSU5JX1VBUlRfQkFTRTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoZSBzZXJpYWwgcG9ydCBoYXMgYWxyZWFkeSBiZWVuCisgKiBpbml0aWFsaXplZCBieSB0aGUgYm9vdGxvYWRlci4gIElmIHlvdSBkaWRuJ3Qgc2V0dXAgYSBwb3J0IGluCisgKiB5b3VyIGJvb3Rsb2FkZXIgdGhlbiBub3RoaW5nIHdpbGwgYXBwZWFyICh3aGljaCBtaWdodCBiZSBkZXNpcmVkKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB1dGMoY2hhciBjKQoreworCXdoaWxlICghKFVBUlRbVUFSVF9MU1JdICYgVUFSVF9MU1JfVEhSRSkpCisJCWJhcnJpZXIoKTsKKwlVQVJUW1VBUlRfVFhdID0gYzsKK30KKworI2RlZmluZSBmbHVzaCgpIGRvIHsgfSB3aGlsZSAoMCkKKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCisKKyNlbmRpZiAvKiBfX01BQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2U1MzZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDEwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBWTUFMTE9DX0VORAkweEYwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjEzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pcnEuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBJbnRlcnJ1cHQgcm91dGluZXMgZm9yIEdlbWluaQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBJUlFfU09VUkNFKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MDApCisjZGVmaW5lIElSUV9NQVNLKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MDQpCisjZGVmaW5lIElSUV9DTEVBUihiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDA4KQorI2RlZmluZSBJUlFfVE1PREUoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgwQykKKyNkZWZpbmUgSVJRX1RMRVZFTChiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDEwKQorI2RlZmluZSBJUlFfU1RBVFVTKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MTQpCisjZGVmaW5lIEZJUV9TT1VSQ0UoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgyMCkKKyNkZWZpbmUgRklRX01BU0soYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgyNCkKKyNkZWZpbmUgRklRX0NMRUFSKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MjgpCisjZGVmaW5lIEZJUV9UTU9ERShiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDJDKQorI2RlZmluZSBGSVFfTEVWRUwoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgzMCkKKyNkZWZpbmUgRklRX1NUQVRVUyhiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDM0KQorCitzdGF0aWMgdm9pZCBnZW1pbmlfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgSVJRX0NMRUFSKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworfQorCitzdGF0aWMgdm9pZCBnZW1pbmlfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChJUlFfTUFTSyhJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKKwltYXNrICY9IH4oMSA8PCBpcnEpOworCV9fcmF3X3dyaXRlbChtYXNrLCBJUlFfTUFTSyhJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKK30KKworc3RhdGljIHZvaWQgZ2VtaW5pX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChJUlFfTUFTSyhJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKKwltYXNrIHw9ICgxIDw8IGlycSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIElSUV9NQVNLKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdlbWluaV9pcnFfY2hpcCA9IHsKKwkubmFtZQk9ICJJTlRDIiwKKwkuYWNrCT0gZ2VtaW5pX2Fja19pcnEsCisJLm1hc2sJPSBnZW1pbmlfbWFza19pcnEsCisJLnVubWFzawk9IGdlbWluaV91bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcnFfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAiaXJxX2hhbmRsZXIiLAorCS5zdGFydAk9IElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSwKKwkuZW5kCT0gSU9fQUREUkVTUyhGSVFfU1RBVFVTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpICsgNCwKK307CisKK3ZvaWQgX19pbml0IGdlbWluaV9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpLCBtb2RlID0gMCwgbGV2ZWwgPSAwOworCisJLyoKKwkgKiBEaXNhYmxlIGFyY2hfaWRsZSgpIGJ5IGRlZmF1bHQgc2luY2UgaXQgaXMgYnVnZ3kKKwkgKiBGb3IgbW9yZSBpbmZvIHNlZSBhcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKwkgKi8KKwlkaXNhYmxlX2hsdCgpOworCisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpcnFfcmVzb3VyY2UpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJmdlbWluaV9pcnFfY2hpcCk7CisJCWlmKChpID49IElSUV9USU1FUjEgJiYgaSA8PSBJUlFfVElNRVIzKSB8fCAoaSA+PSBJUlFfU0VSSVJRMCAmJiBpIDw9IElSUV9TRVJJUlExKSkgeworCQkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9lZGdlX2lycSk7CisJCQltb2RlIHw9IDEgPDwgaTsKKwkJCWxldmVsIHw9IDEgPDwgaTsKKwkJfSBlbHNlIHsJCQkKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJfQorCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJX19yYXdfd3JpdGVsKDAsIElSUV9NQVNLKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworCV9fcmF3X3dyaXRlbCgwLCBGSVFfTUFTSyhJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKKworCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSAqLworCV9fcmF3X3dyaXRlbChtb2RlLCBJUlFfVE1PREUoSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7CisJX19yYXdfd3JpdGVsKGxldmVsLCBJUlFfVExFVkVMKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvbW0uYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5NDgyNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL21tLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqICBTdGF0aWMgbWFwcGluZ3MgZm9yIEdlbWluaQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyogUGFnZSB0YWJsZSBtYXBwaW5nIGZvciBJL08gcmVnaW9uICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGdlbWluaV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UpLAorCQkucGZuCQk9X19waHlzX3RvX3BmbihHRU1JTklfR0xPQkFMX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX1VBUlRfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfVUFSVF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9USU1FUl9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9USU1FUl9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfSU5URVJSVVBUX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX1BPV0VSX0NUUkxfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfUE9XRVJfQ1RSTF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9HUElPX0JBU0UoMCkpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0dQSU9fQkFTRSgwKSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfR1BJT19CQVNFKDEpKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9HUElPX0JBU0UoMSkpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0dQSU9fQkFTRSgyKSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfR1BJT19CQVNFKDIpKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9GTEFTSF9DVFJMX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0ZMQVNIX0NUUkxfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfRFJBTV9DVFJMX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0RSQU1fQ1RSTF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9HRU5FUkFMX0RNQV9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9HRU5FUkFMX0RNQV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sCit9OworCit2b2lkIF9faW5pdCBnZW1pbmlfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGdlbWluaV9pb19kZXNjLCBBUlJBWV9TSVpFKGdlbWluaV9pb19kZXNjKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkYzVhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL3RpbWUuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dsb2JhbF9yZWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIHRpbWVycworICovCisjZGVmaW5lIFRJTUVSX0NPVU5UKEJBU0VfQUREUikJCShCQVNFX0FERFIgICsgMHgwMCkKKyNkZWZpbmUgVElNRVJfTE9BRChCQVNFX0FERFIpCQkoQkFTRV9BRERSICArIDB4MDQpCisjZGVmaW5lIFRJTUVSX01BVENIMShCQVNFX0FERFIpCQkoQkFTRV9BRERSICArIDB4MDgpCisjZGVmaW5lIFRJTUVSX01BVENIMihCQVNFX0FERFIpCQkoQkFTRV9BRERSICArIDB4MEMpCisjZGVmaW5lIFRJTUVSX0NSKEJBU0VfQUREUikJCShCQVNFX0FERFIgICsgMHgzMCkKKworI2RlZmluZSBUSU1FUl8xX0NSX0VOQUJMRQkJKDEgPDwgMCkKKyNkZWZpbmUgVElNRVJfMV9DUl9DTE9DSwkJKDEgPDwgMSkKKyNkZWZpbmUgVElNRVJfMV9DUl9JTlQJCQkoMSA8PCAyKQorI2RlZmluZSBUSU1FUl8yX0NSX0VOQUJMRQkJKDEgPDwgMykKKyNkZWZpbmUgVElNRVJfMl9DUl9DTE9DSwkJKDEgPDwgNCkKKyNkZWZpbmUgVElNRVJfMl9DUl9JTlQJCQkoMSA8PCA1KQorI2RlZmluZSBUSU1FUl8zX0NSX0VOQUJMRQkJKDEgPDwgNikKKyNkZWZpbmUgVElNRVJfM19DUl9DTE9DSwkJKDEgPDwgNykKKyNkZWZpbmUgVElNRVJfM19DUl9JTlQJCQkoMSA8PCA4KQorCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ2VtaW5pX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdGltZXJfdGljaygpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBnZW1pbmlfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJHZW1pbmkgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5oYW5kbGVyCT0gZ2VtaW5pX3RpbWVyX2ludGVycnVwdCwKK307CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLwordm9pZCBfX2luaXQgZ2VtaW5pX3RpbWVyX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGlja19yYXRlLCByZWdfdjsKKworCXJlZ192ID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UgKyBHTE9CQUxfU1RBVFVTKSk7CisJdGlja19yYXRlID0gUkVHX1RPX0FIQl9TUEVFRChyZWdfdikgKiAxMDAwMDAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQnVzOiAlZE1IeiIsIHRpY2tfcmF0ZSAvIDEwMDAwMDApOworCisJdGlja19yYXRlIC89IDY7CQkvKiBBUEIgYnVzIHJ1biBBSEIqKDEvNikgKi8KKworCXN3aXRjaChyZWdfdiAmIENQVV9BSEJfUkFUSU9fTUFTSykgeworCWNhc2UgQ1BVX0FIQl8xXzE6CisJCXByaW50ayhLRVJOX0NPTlQgIigxLzEpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQUhCXzNfMjoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKDMvMilcbiIpOworCQlicmVhazsKKwljYXNlIENQVV9BSEJfMjRfMTM6CisJCXByaW50ayhLRVJOX0NPTlQgIigyNC8xMylcbiIpOworCQlicmVhazsKKwljYXNlIENQVV9BSEJfMl8xOgorCQlwcmludGsoS0VSTl9DT05UICIoMi8xKVxuIik7CisJCWJyZWFrOworCX0KKworCS8qCisJICogTWFrZSBpcnFzIGhhcHBlbiBmb3IgdGhlIHN5c3RlbSB0aW1lcgorCSAqLworCXNldHVwX2lycShJUlFfVElNRVIyLCAmZ2VtaW5pX3RpbWVyX2lycSk7CisJLyogU3RhcnQgdGhlIHRpbWVyICovCisJX19yYXdfd3JpdGVsKHRpY2tfcmF0ZSAvIEhaLCBUSU1FUl9DT1VOVChJT19BRERSRVNTKEdFTUlOSV9USU1FUjJfQkFTRSkpKTsKKwlfX3Jhd193cml0ZWwodGlja19yYXRlIC8gSFosIFRJTUVSX0xPQUQoSU9fQUREUkVTUyhHRU1JTklfVElNRVIyX0JBU0UpKSk7CisJX19yYXdfd3JpdGVsKFRJTUVSXzJfQ1JfRU5BQkxFIHwgVElNRVJfMl9DUl9JTlQsIFRJTUVSX0NSKElPX0FERFJFU1MoR0VNSU5JX1RJTUVSX0JBU0UpKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGU0YTdjNzYuLmE3MDhkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNSw3ICsyNSw3IEBACiB9CiAKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlDUFVfUkVHIChQTVVfQkFTRSwgUE1VX1NUQVQpIHw9IFBNVV9XQVJNUkVTRVQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKaW5kZXggODg3Y2IyMS4uMDVmMTczOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lteC1yZWdzLmg+CiAKQEAgLTI0NSw0MyArMjQ0LDggQEAKIAlpbXhfbW1jX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGluZm87CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgaW14X2ZiX2luZm87Ci0KLXZvaWQgX19pbml0IHNldF9pbXhfZmJfaW5mbyhzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKmhhcmRfaW14X2ZiX2luZm8pCi17Ci0JbWVtY3B5KCZpbXhfZmJfaW5mbyxoYXJkX2lteF9mYl9pbmZvLHNpemVvZihzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEpKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhmYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDAyMDUwMDAsCi0JCS5lbmQJPSAweDAwMjA1MEZGLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTENEQ19JTlQsCi0JCS5lbmQJPSBMQ0RDX0lOVCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyB1NjQgZmJfZG1hX21hc2sgPSB+KHU2NCkwOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhmYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImlteC1mYiIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0gCQkucGxhdGZvcm1fZGF0YQk9ICZpbXhfZmJfaW5mbywKLQkJLmRtYV9tYXNrCT0gJmZiX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteGZiX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaW14ZmJfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZpbXhfbW1jX2RldmljZSwKLQkmaW14ZmJfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbXhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvaW14ZmIuaCBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzBkMGQ5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgbWFjaGluZSB3aGljaCB3ZSBhcmUgcnVubmluZyBvbi4KLSAqLwotCi0jZGVmaW5lIFBDUl9URlQJCSgxIDw8IDMxKQotI2RlZmluZSBQQ1JfQ09MT1IJKDEgPDwgMzApCi0jZGVmaW5lIFBDUl9QQlNJWl8xCSgwIDw8IDI4KQotI2RlZmluZSBQQ1JfUEJTSVpfMgkoMSA8PCAyOCkKLSNkZWZpbmUgUENSX1BCU0laXzQJKDIgPDwgMjgpCi0jZGVmaW5lIFBDUl9QQlNJWl84CSgzIDw8IDI4KQotI2RlZmluZSBQQ1JfQlBJWF8xCSgwIDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF8yCSgxIDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF80CSgyIDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF84CSgzIDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF8xMgkoNCA8PCAyNSkKLSNkZWZpbmUgUENSX0JQSVhfMTYJKDQgPDwgMjUpCi0jZGVmaW5lIFBDUl9QSVhQT0wJKDEgPDwgMjQpCi0jZGVmaW5lIFBDUl9GTE1QT0wJKDEgPDwgMjMpCi0jZGVmaW5lIFBDUl9MUFBPTAkoMSA8PCAyMikKLSNkZWZpbmUgUENSX0NMS1BPTAkoMSA8PCAyMSkKLSNkZWZpbmUgUENSX09FUE9MCSgxIDw8IDIwKQotI2RlZmluZSBQQ1JfU0NMS0lETEUJKDEgPDwgMTkpCi0jZGVmaW5lIFBDUl9FTkRfU0VMCSgxIDw8IDE4KQotI2RlZmluZSBQQ1JfRU5EX0JZVEVfU1dBUCAoMSA8PCAxNykKLSNkZWZpbmUgUENSX1JFVl9WUwkoMSA8PCAxNikKLSNkZWZpbmUgUENSX0FDRF9TRUwJKDEgPDwgMTUpCi0jZGVmaW5lIFBDUl9BQ0QoeCkJKCgoeCkgJiAweDdmKSA8PCA4KQotI2RlZmluZSBQQ1JfU0NMS19TRUwJKDEgPDwgNykKLSNkZWZpbmUgUENSX1NIQVJQCSgxIDw8IDYpCi0jZGVmaW5lIFBDUl9QQ0QoeCkJKCh4KSAmIDB4M2YpCi0KLSNkZWZpbmUgUFdNUl9DTFMoeCkJKCgoeCkgJiAweDFmZikgPDwgMTYpCi0jZGVmaW5lIFBXTVJfTERNU0sJKDEgPDwgMTUpCi0jZGVmaW5lIFBXTVJfU0NSMQkoMSA8PCAxMCkKLSNkZWZpbmUgUFdNUl9TQ1IwCSgxIDw8IDkpCi0jZGVmaW5lIFBXTVJfQ0NfRU4JKDEgPDwgOCkKLSNkZWZpbmUgUFdNUl9QVyh4KQkoKHgpICYgMHhmZikKLQotI2RlZmluZSBMU0NSMV9QU19SSVNFX0RFTEFZKHgpICAgICgoKHgpICYgMHg3ZikgPDwgMjYpCi0jZGVmaW5lIExTQ1IxX0NMU19SSVNFX0RFTEFZKHgpICAgKCgoeCkgJiAweDNmKSA8PCAxNikKLSNkZWZpbmUgTFNDUjFfUkVWX1RPR0dMRV9ERUxBWSh4KSAoKCh4KSAmIDB4ZikgPDwgOCkKLSNkZWZpbmUgTFNDUjFfR1JBWTIoeCkgICAgICAgICAgICAoKCh4KSAmIDB4ZikgPDwgNCkKLSNkZWZpbmUgTFNDUjFfR1JBWTEoeCkgICAgICAgICAgICAoKCh4KSAmIDB4ZikpCi0KLSNkZWZpbmUgRE1BQ1JfQlVSU1QJKDEgPDwgMzEpCi0jZGVmaW5lIERNQUNSX0hNKHgpCSgoKHgpICYgMHhmKSA8PCAxNikKLSNkZWZpbmUgRE1BQ1JfVE0oeCkJKCh4KSAmIDB4ZikKLQotc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIHsKLQl1X2xvbmcJCXBpeGNsb2NrOwotCi0JdV9zaG9ydAkJeHJlczsKLQl1X3Nob3J0CQl5cmVzOwotCi0JdV9pbnQJCW5vbnN0ZDsKLQl1X2NoYXIJCWJwcDsKLQl1X2NoYXIJCWhzeW5jX2xlbjsKLQl1X2NoYXIJCWxlZnRfbWFyZ2luOwotCXVfY2hhcgkJcmlnaHRfbWFyZ2luOwotCi0JdV9jaGFyCQl2c3luY19sZW47Ci0JdV9jaGFyCQl1cHBlcl9tYXJnaW47Ci0JdV9jaGFyCQlsb3dlcl9tYXJnaW47Ci0JdV9jaGFyCQlzeW5jOwotCi0JdV9pbnQJCWNtYXBfZ3JleXNjYWxlOjEsCi0JCQljbWFwX2ludmVyc2U6MSwKLQkJCWNtYXBfc3RhdGljOjEsCi0JCQl1bnVzZWQ6Mjk7Ci0KLQl1X2ludAkJcGNyOwotCXVfaW50CQlwd21yOwotCXVfaW50CQlsc2NyMTsKLQl1X2ludAkJZG1hY3I7Ci0KLQl1X2NoYXIgKiBmaXhlZF9zY3JlZW5fY3B1OwotCWRtYV9hZGRyX3QgZml4ZWRfc2NyZWVuX2RtYTsKLQotCXZvaWQgKCpsY2RfcG93ZXIpKGludCk7Ci0Jdm9pZCAoKmJhY2tsaWdodF9wb3dlcikoaW50KTsKLX07Ci0KLXZvaWQgc2V0X2lteF9mYl9pbmZvKHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBhZGVlN2U1Li40NmQ0Y2E5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zMiw3ICszMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotYXJjaF9yZXNldChjaGFyIG1vZGUpCithcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGM0ODUzNDUuLmUxNTUxYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMzIsNyArMzIsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogVG8gcmVzZXQsIHdlIGhpdCB0aGUgb24tYm9hcmQgcmVzZXQgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGUwMTJiZjEuLjQyYWUyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNTksNyArNTksMTAgQEAKIAl9KQogCiAjZGVmaW5lIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpCQkJCQlcCi0JX19hcmNoX3ZpcnRfdG9fZG1hKGRldiwgcGFnZV9hZGRyZXNzKHBhZ2UpKQorCSh7CQkJCQkJCQlcCisJCS8qIF9faXNfbGJ1c192aXJ0KCkgY2FuIG5ldmVyIGJlIHRydWUgZm9yIFJBTSBwYWdlcyAqLwlcCisJCShkbWFfYWRkcl90KXBhZ2VfdG9fcGh5cyhwYWdlKTsJCQkJXAorCX0pCiAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9JT1AxM1hYICovCiAjZW5kaWYgLyogIUFTU0VNQkxZICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBjNzEyN2Y0Li5kMGM2NmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTEzLDcgKzEzLDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKgogCSAqIFJlc2V0IHRoZSBpbnRlcm5hbCBidXMgKHdhcm5pbmcgYm90aCBjb3JlcyBhcmUgcmVzZXQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKaW5kZXggNjczYjBkYi4uNDg3M2YyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYwpAQCAtMTAyNiw4ICsxMDI2LDEwIEBACiAJCXdoaWNoX2F0dSA9IDA7CiAJfQogCi0JaWYgKCF3aGljaF9hdHUpCisJaWYgKCF3aGljaF9hdHUpIHsKKwkJa2ZyZWUocmVzKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJc3dpdGNoKHdoaWNoX2F0dSkgewogCWNhc2UgSU9QMTNYWF9JTklUX0FUVV9BVFVYOgpAQCAtMTA3NCw2ICsxMDc2LDcgQEAKIAkJc3lzLT5tYXBfaXJxID0gaW9wMTN4eF9wY2llX21hcF9pcnE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWtmcmVlKHJlcyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDMyZDllNWIuLmE0YjgwOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMGNiM2FkOC4uZjE5MmEzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTQsNyArMTQsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCSpJT1AzWFhfUENTUiA9IDB4MzA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDJlOWM2OGYuLmRlMzcwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTcsNyArMTcsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGQ1N2MzZmMuLjg5MjBmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTksNyArMTksNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qIEZpcnN0IHRyeSBtYWNoaW5lIHNwZWNpZmljIHN1cHBvcnQgKi8KIAlpZiAobWFjaGluZV9pc19peGRwMjM1MSgpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKaW5kZXggZDgxNmM1MS4uNzBhZmNmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiB9CiAKIHZvaWQgX19pbml0IGl4cDR4eF9wY2lfcHJlaW5pdCh2b2lkKQoteyAgCit7CiAJdW5zaWduZWQgbG9uZyBjcHVpZCA9IHJlYWRfY3B1aWRfaWQoKTsKIAogCS8qCkBAIC0zODYsMTcgKzM4NiwxNyBAQAogCiAJcHJfZGVidWcoInNldHVwIFBDSS1BSEIoaW5ib3VuZCkgYW5kIEFIQi1QQ0kob3V0Ym91bmQpIGFkZHJlc3MgbWFwcGluZ3NcbiIpOwogCi0JLyogCisJLyoKIAkgKiBXZSB1c2UgaWRlbnRpdHkgQUhCLT5QQ0kgYWRkcmVzcyB0cmFuc2xhdGlvbgogCSAqIGluIHRoZSAweDQ4MDAwMDAwIHRvIDB4NGJmZmZmZmYgYWRkcmVzcyBzcGFjZQogCSAqLwogCSpQQ0lfUENJTUVNQkFTRSA9IDB4NDg0OTRBNEI7CiAKLQkvKiAKKwkvKgogCSAqIFdlIGFsc28gdXNlIGlkZW50aXR5IFBDSS0+QUhCIGFkZHJlc3MgdHJhbnNsYXRpb24KIAkgKiBpbiA0IDE2TUIgQkFScyB0aGF0IGJlZ2luIGF0IHRoZSBwaHlzaWNhbCBtZW1vcnkgc3RhcnQKIAkgKi8KLQkqUENJX0FIQk1FTUJBU0UgPSAoUEhZU19PRkZTRVQgJiAweEZGMDAwMDAwKSArIAorCSpQQ0lfQUhCTUVNQkFTRSA9IChQSFlTX09GRlNFVCAmIDB4RkYwMDAwMDApICsKIAkJKChQSFlTX09GRlNFVCAmIDB4RkYwMDAwMDApID4+IDgpICsKIAkJKChQSFlTX09GRlNFVCAmIDB4RkYwMDAwMDApID4+IDE2KSArCiAJCSgoUEhZU19PRkZTRVQgJiAweEZGMDAwMDAwKSA+PiAyNCkgKwpAQCAtNDA4LDE4ICs0MDgsMTkgQEAKIAkJcHJfZGVidWcoInNldHVwIEJBUnMgaW4gY29udHJvbGxlclxuIik7CiAKIAkJLyoKLQkJICogV2UgY29uZmlndXJlIHRoZSBQQ0kgaW5ib3VuZCBtZW1vcnkgd2luZG93cyB0byBiZSAKKwkJICogV2UgY29uZmlndXJlIHRoZSBQQ0kgaW5ib3VuZCBtZW1vcnkgd2luZG93cyB0byBiZQogCQkgKiAxOjEgbWFwcGVkIHRvIFNEUkFNCiAJCSAqLwotCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18wLCA0LCBQSFlTX09GRlNFVCArIDB4MDAwMDAwMDApOwotCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18xLCA0LCBQSFlTX09GRlNFVCArIDB4MDEwMDAwMDApOwotCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18yLCA0LCBQSFlTX09GRlNFVCArIDB4MDIwMDAwMDApOwotCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18zLCA0LCBQSFlTX09GRlNFVCArIDB4MDMwMDAwMDApOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18wLCA0LCBQSFlTX09GRlNFVCk7CisJCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzEsIDQsIFBIWVNfT0ZGU0VUICsgU1pfMTZNKTsKKwkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMiwgNCwgUEhZU19PRkZTRVQgKyBTWl8zMk0pOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18zLCA0LCBQSFlTX09GRlNFVCArIFNaXzQ4TSk7CiAKIAkJLyoKLQkJICogRW5hYmxlIENTUiB3aW5kb3cgYXQgMHhmZjAwMDAwMC4KKwkJICogRW5hYmxlIENTUiB3aW5kb3cgYXQgNjQgTWlCIHRvIGFsbG93IFBDSSBtYXN0ZXJzCisJCSAqIHRvIGNvbnRpbnVlIHByZWZldGNoaW5nIHBhc3QgNjQgTWlCIGJvdW5kYXJ5LgogCQkgKi8KLQkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfNCwgNCwgMHhmZjAwMDAwOCk7CisJCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzQsIDQsIFBIWVNfT0ZGU0VUICsgU1pfNjRNKTsKIAogCQkvKgogCQkgKiBFbmFibGUgdGhlIElPIHdpbmRvdyB0byBiZSB3YXkgdXAgaGlnaCwgYXQgMHhmZmZmZmMwMApAQCAtNTAwLDcgKzUwMSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0cnVjdCBwY2lfYnVzICppeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdHJ1Y3QgcGNpX2J1cyAqIF9fZGV2aW5pdCBpeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmaXhwNHh4X29wcywgc3lzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCA1MWJkNjljLi5kZWY3NzczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0xNywyNiArMTcsMzEgQEAKICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogCiAvKiBQcm9jZXNzb3IgaWQgdmFsdWUgaW4gQ1AxNSBSZWdpc3RlciAwICovCi0jZGVmaW5lIElYUDQyNV9QUk9DRVNTT1JfSURfVkFMVUUJMHg2OTA1NDFjMAotI2RlZmluZSBJWFA0MzVfUFJPQ0VTU09SX0lEX1ZBTFVFCTB4NjkwNTQwNDAKLSNkZWZpbmUgSVhQNDY1X1BST0NFU1NPUl9JRF9WQUxVRQkweDY5MDU0MjAwCi0jZGVmaW5lIElYUDRYWF9QUk9DRVNTT1JfSURfTUFTSwkweGZmZmZmZmYwCisjZGVmaW5lIElYUDQyWF9QUk9DRVNTT1JfSURfVkFMVUUJMHg2OTA1NDFjMCAvKiBpbmNsdWRpbmcgdW51c2VkIDB4NjkwNTQxRXggKi8KKyNkZWZpbmUgSVhQNDJYX1BST0NFU1NPUl9JRF9NQVNLCTB4ZmZmZmZmYzAKIAotI2RlZmluZSBjcHVfaXNfaXhwNDJ4KCkJKChyZWFkX2NwdWlkX2lkKCkgJiBJWFA0WFhfUFJPQ0VTU09SX0lEX01BU0spID09IFwKLQkJCSAgSVhQNDI1X1BST0NFU1NPUl9JRF9WQUxVRSkKLSNkZWZpbmUgY3B1X2lzX2l4cDQzeCgpCSgocmVhZF9jcHVpZF9pZCgpICYgSVhQNFhYX1BST0NFU1NPUl9JRF9NQVNLKSA9PSBcCi0JCQkgIElYUDQzNV9QUk9DRVNTT1JfSURfVkFMVUUpCi0jZGVmaW5lIGNwdV9pc19peHA0NngoKQkoKHJlYWRfY3B1aWRfaWQoKSAmIElYUDRYWF9QUk9DRVNTT1JfSURfTUFTSykgPT0gXAotCQkJICBJWFA0NjVfUFJPQ0VTU09SX0lEX1ZBTFVFKQorI2RlZmluZSBJWFA0M1hfUFJPQ0VTU09SX0lEX1ZBTFVFCTB4NjkwNTQwNDAKKyNkZWZpbmUgSVhQNDNYX1BST0NFU1NPUl9JRF9NQVNLCTB4ZmZmZmZmZjAKKworI2RlZmluZSBJWFA0NlhfUFJPQ0VTU09SX0lEX1ZBTFVFCTB4NjkwNTQyMDAgLyogaW5jbHVkaW5nIElYUDQ1NSAqLworI2RlZmluZSBJWFA0NlhfUFJPQ0VTU09SX0lEX01BU0sJMHhmZmZmZmZmMAorCisjZGVmaW5lIGNwdV9pc19peHA0MngoKQkoKHJlYWRfY3B1aWRfaWQoKSAmIElYUDQyWF9QUk9DRVNTT1JfSURfTUFTSykgPT0gXAorCQkJIElYUDQyWF9QUk9DRVNTT1JfSURfVkFMVUUpCisjZGVmaW5lIGNwdV9pc19peHA0M3goKQkoKHJlYWRfY3B1aWRfaWQoKSAmIElYUDQzWF9QUk9DRVNTT1JfSURfTUFTSykgPT0gXAorCQkJIElYUDQzWF9QUk9DRVNTT1JfSURfVkFMVUUpCisjZGVmaW5lIGNwdV9pc19peHA0NngoKQkoKHJlYWRfY3B1aWRfaWQoKSAmIElYUDQ2WF9QUk9DRVNTT1JfSURfTUFTSykgPT0gXAorCQkJIElYUDQ2WF9QUk9DRVNTT1JfSURfVkFMVUUpCiAKIHN0YXRpYyBpbmxpbmUgdTMyIGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cyh2b2lkKQogewogCXVuc2lnbmVkIGludCB2YWwgPSB+KklYUDRYWF9FWFBfQ0ZHMjsKLQl2YWwgJj0gfklYUDRYWF9GRUFUVVJFX1JFU0VSVkVEOwotCWlmICghY3B1X2lzX2l4cDQ2eCgpKQotCQl2YWwgJj0gfklYUDRYWF9GRUFUVVJFX0lYUDQ2WF9PTkxZOwogCi0JcmV0dXJuIHZhbDsKKwlpZiAoY3B1X2lzX2l4cDQyeCgpKQorCQlyZXR1cm4gdmFsICYgSVhQNDJYX0ZFQVRVUkVfTUFTSzsKKwlpZiAoY3B1X2lzX2l4cDQzeCgpKQorCQlyZXR1cm4gdmFsICYgSVhQNDNYX0ZFQVRVUkVfTUFTSzsKKwlyZXR1cm4gdmFsICYgSVhQNDZYX0ZFQVRVUkVfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl4cDR4eF93cml0ZV9mZWF0dXJlX2JpdHModTMyIHZhbHVlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2l4cDR4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXhwNHh4LXJlZ3MuaAppbmRleCBhZDljODg4Li45N2M1MzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXhwNHh4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXhwNHh4LXJlZ3MuaApAQCAtNjA0LDYgKzYwNCw3IEBACiAjZGVmaW5lIERDTURfTEVOR1RICTB4MDFmZmYJCS8qIGxlbmd0aCBtYXNrIChtYXggPSA4SyAtIDEpICovCiAKIC8qICJmdXNlIiBiaXRzIG9mIElYUF9FWFBfQ0ZHMiAqLworLyogQWxsIElYUDR4eCBDUFVzICovCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1JDT01QCQkoMSA8PCAwKQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9VU0JfREVWSUNFCSgxIDw8IDEpCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX0hBU0gJCSgxIDw8IDIpCkBAIC02MTksMjAgKzYyMCw0MSBAQAogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVCCSgxIDw8IDEyKQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVDCSgxIDw8IDEzKQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9QQ0kJCSgxIDw8IDE0KQotI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9FQ0NfVElNRVNZTkMJKDEgPDwgMTUpCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1VUT1BJQV9QSFlfTElNSVQJKDMgPDwgMTYpCisjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1hTQ0FMRV9NQVhfRlJFUQkoMyA8PCAyMikKKyNkZWZpbmUgSVhQNDJYX0ZFQVRVUkVfTUFTSwkJKElYUDRYWF9GRUFUVVJFX1JDT01QICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9VU0JfREVWSUNFICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfSEFTSCAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0FFUyAgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9ERVMgICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfSERMQyAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0FBTCAgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9IU1MgICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfVVRPUElBICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX05QRUJfRVRIMCAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9OUEVDX0VUSCAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfUkVTRVRfTlBFQSAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1JFU0VUX05QRUIgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVDICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfUENJICAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1VUT1BJQV9QSFlfTElNSVQgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9YU0NBTEVfTUFYX0ZSRVEpCisKKworLyogSVhQNDN4LzQ2eCBDUFVzICovCisjZGVmaW5lIElYUDRYWF9GRUFUVVJFX0VDQ19USU1FU1lOQwkoMSA8PCAxNSkKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfVVNCX0hPU1QJCSgxIDw8IDE4KQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9OUEVBX0VUSAkJKDEgPDwgMTkpCisjZGVmaW5lIElYUDQzWF9GRUFUVVJFX01BU0sJCShJWFA0MlhfRkVBVFVSRV9NQVNLICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfRUNDX1RJTUVTWU5DICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1VTQl9IT1NUICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9OUEVBX0VUSCkKKworLyogSVhQNDZ4IENQVSAoaW5jbHVkaW5nIElYUDQ1NSkgb25seSAqLwogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9OUEVCX0VUSF8xX1RPXzMJKDEgPDwgMjApCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1JTQQkJKDEgPDwgMjEpCi0jZGVmaW5lIElYUDRYWF9GRUFUVVJFX1hTQ0FMRV9NQVhfRlJFUQkoMyA8PCAyMikKLSNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfUkVTRVJWRUQJCSgweEZGIDw8IDI0KQotCi0jZGVmaW5lIElYUDRYWF9GRUFUVVJFX0lYUDQ2WF9PTkxZIChJWFA0WFhfRkVBVFVSRV9FQ0NfVElNRVNZTkMgfAlcCi0JCQkJICAgIElYUDRYWF9GRUFUVVJFX1VTQl9IT1NUIHwJCVwKLQkJCQkgICAgSVhQNFhYX0ZFQVRVUkVfTlBFQV9FVEggfAkJXAotCQkJCSAgICBJWFA0WFhfRkVBVFVSRV9OUEVCX0VUSF8xX1RPXzMgfAlcCi0JCQkJICAgIElYUDRYWF9GRUFUVVJFX1JTQSB8CQlcCi0JCQkJICAgIElYUDRYWF9GRUFUVVJFX1hTQ0FMRV9NQVhfRlJFUSkKKyNkZWZpbmUgSVhQNDZYX0ZFQVRVUkVfTUFTSwkJKElYUDQzWF9GRUFUVVJFX01BU0sgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9OUEVCX0VUSF8xX1RPXzMgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfUlNBKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA5MmE3ZThkLi5kMmFhMjZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yMCw3ICsyMCw3IEBACiB9CiAKIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJaWYgKCAxICYmIG1vZGUgPT0gJ3MnKSB7CiAJCS8qIEp1bXAgaW50byBST00gYXQgYWRkcmVzcyAwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfbnBlLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfbnBlLmMKaW5kZXggYzczYTk0ZC4uMjUyMzEwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X25wZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9ucGUuYwpAQCAtNTc1LDggKzU3NSw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+c2l6ZTsgaSsrKQogCQkJaW1hZ2UtPmRhdGFbaV0gPSBzd2FiMzIoaW1hZ2UtPmRhdGFbaV0pOwogCi0JaWYgKCFjcHVfaXNfaXhwNDZ4KCkgJiYgKChpbWFnZS0+aWQgPj4gMjgpICYgMHhGIC8qIGRldmljZSBJRCAqLykpIHsKLQkJcHJpbnRfbnBlKEtFUk5fSU5GTywgbnBlLCAiSVhQNDZ4IGZpcm13YXJlIGlnbm9yZWQgb24gIgorCWlmIChjcHVfaXNfaXhwNDJ4KCkgJiYgKChpbWFnZS0+aWQgPj4gMjgpICYgMHhGIC8qIGRldmljZSBJRCAqLykpIHsKKwkJcHJpbnRfbnBlKEtFUk5fSU5GTywgbnBlLCAiSVhQNDN4L0lYUDQ2eCBmaXJtd2FyZSBpZ25vcmVkIG9uICIKIAkJCSAgIklYUDQyeFxuIik7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTU5Niw3ICs1OTYsNyBAQAogCQkgICJyZXZpc2lvbiAweCVYOiVYXG4iLCAoaW1hZ2UtPmlkID4+IDE2KSAmIDB4RkYsCiAJCSAgKGltYWdlLT5pZCA+PiA4KSAmIDB4RkYsIGltYWdlLT5pZCAmIDB4RkYpOwogCi0JaWYgKCFjcHVfaXNfaXhwNDZ4KCkpIHsKKwlpZiAoY3B1X2lzX2l4cDQyeCgpKSB7CiAJCWlmICghbnBlLT5pZCkKIAkJCWluc3RyX3NpemUgPSBOUEVfQV80MlhfSU5TVFJfU0laRTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCmluZGV4IDM2MDBjZDkuLmI1NDIxY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKQEAgLTIwLDYgKzIwLDE4IEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIE1hcnZlbGwgUkQtODhGNjI4MSBSZWZlcmVuY2UgQm9hcmQuCiAKK2NvbmZpZyBNQUNIX1NIRUVWQVBMVUcKKwlib29sICJNYXJ2ZWxsIFNoZWV2YVBsdWcgUmVmZXJlbmNlIEJvYXJkIgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTWFydmVsbCBTaGVldmFQbHVnIFJlZmVyZW5jZSBCb2FyZC4KKworY29uZmlnIE1BQ0hfVFMyMTkKKwlib29sICJRTkFQIFRTLTExOSBhbmQgVFMtMjE5IFR1cmJvIE5BUyIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIFFOQVAgVFMtMTE5IGFuZCBUUy0yMTkgVHVyYm8gTkFTIGRldmljZXMuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCmluZGV4IGI5NmM1NWQuLjhmMDNjOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQpAQCAtMSw1ICsxLDcgQEAKLW9iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gaXJxLm8gcGNpZS5vCitvYmoteQkJCQkrPSBjb21tb24ubyBhZGRyLW1hcC5vIGlycS5vIHBjaWUubyBtcHAubwogCiBvYmotJChDT05GSUdfTUFDSF9EQjg4RjYyODFfQlApCQkrPSBkYjg4ZjYyODEtYnAtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY2MTkyX05BUykJKz0gcmQ4OGY2MTkyLW5hcy1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjYyODEpCQkrPSByZDg4ZjYyODEtc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfU0hFRVZBUExVRykJCSs9IHNoZWV2YXBsdWctc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfVFMyMTkpCQkrPSB0czIxOS1zZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwppbmRleCBiMzQwNGI3Li4zZDJmYWU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL29yaW9uX3NwaS5oPgogI2luY2x1ZGUgPG5ldC9kc2EuaD4KQEAgLTI0LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CiAjaW5jbHVkZSA8cGxhdC9jYWNoZS1mZXJvY2Vvbi1sMi5oPgogI2luY2x1ZGUgPHBsYXQvZWhjaS1vcmlvbi5oPgorI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tdl94b3IuaD4KICNpbmNsdWRlIDxwbGF0L29yaW9uX25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L3RpbWUuaD4KQEAgLTIzMSwxNCArMjMzLDE3IEBACiAKIHZvaWQgX19pbml0IGtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQogeworCWludCBpOworCiAJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJa2lya3dvb2Rfc3dpdGNoX3Jlc291cmNlc1swXS5zdGFydCA9IGlycTsKIAkJa2lya3dvb2Rfc3dpdGNoX3Jlc291cmNlc1swXS5lbmQgPSBpcnE7CiAJCWtpcmt3b29kX3N3aXRjaF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7CiAJfQogCi0JZC0+bWlpX2J1cyA9ICZraXJrd29vZF9nZTAwX3NoYXJlZC5kZXY7CiAJZC0+bmV0ZGV2ID0gJmtpcmt3b29kX2dlMDAuZGV2OworCWZvciAoaSA9IDA7IGkgPCBkLT5ucl9jaGlwczsgaSsrKQorCQlkLT5jaGlwW2ldLm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OwogCWtpcmt3b29kX3N3aXRjaF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBkOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9zd2l0Y2hfZGV2aWNlKTsKQEAgLTI1NCw3ICsyNTksNyBAQAogCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotdm9pZCBfX2luaXQga2lya3dvb2RfcnRjX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBraXJrd29vZF9ydGNfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1tdiIsIC0xLCAma2lya3dvb2RfcnRjX3Jlc291cmNlLCAxKTsKIH0KQEAgLTI5Niw2ICszMDEsNTAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL1NESU8vTU1DCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXZzZGlvX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU0RJT19QSFlTX0JBU0UsCisJCS5lbmQJPSBTRElPX1BIWVNfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9LSVJLV09PRF9TRElPLAorCQkuZW5kCT0gSVJRX0tJUktXT09EX1NESU8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IG12c2Rpb19kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBraXJrd29vZF9zZGlvID0geworCS5uYW1lCQk9ICJtdnNkaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJm12c2Rpb19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12c2Rpb19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG12c2Rpb19yZXNvdXJjZXMsCit9OworCit2b2lkIF9faW5pdCBraXJrd29vZF9zZGlvX2luaXQoc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhICptdnNkaW9fZGF0YSkKK3sKKwl1MzIgZGV2LCByZXY7CisKKwlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOworCWlmIChyZXYgPT0gMCkgIC8qIGNhdGNoIGFsbCBLaXJrd29vZCBaMCdzICovCisJCW12c2Rpb19kYXRhLT5jbG9jayA9IDEwMDAwMDAwMDsKKwllbHNlCisJCW12c2Rpb19kYXRhLT5jbG9jayA9IDIwMDAwMDAwMDsKKwltdnNkaW9fZGF0YS0+ZHJhbSA9ICZraXJrd29vZF9tYnVzX2RyYW1faW5mbzsKKwlraXJrd29vZF9zZGlvLmRldi5wbGF0Zm9ybV9kYXRhID0gbXZzZGlvX2RhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9zZGlvKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNQSQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IG9yaW9uX3NwaV9pbmZvIGtpcmt3b29kX3NwaV9wbGF0X2RhdGEgPSB7CkBAIC0zMjYsNiArMzc1LDQ1IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YSBraXJrd29vZF9pMmNfcGRhdGEgPSB7CisJLmZyZXFfbQkJPSA4LCAvKiBhc3N1bWVzIDE2NiBNSHogVENMSyAqLworCS5mcmVxX24JCT0gMywKKwkudGltZW91dAk9IDEwMDAsIC8qIERlZmF1bHQgdGltZW91dCBvZiAxIHNlY29uZCAqLworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBraXJrd29vZF9pMmNfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJpMmMiLAorCQkuc3RhcnQJPSBJMkNfUEhZU19CQVNFLAorCQkuZW5kCT0gSTJDX1BIWVNfQkFTRSArIDB4MWYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUJPSAiaTJjIiwKKwkJLnN0YXJ0CT0gSVJRX0tJUktXT09EX1RXU0ksCisJCS5lbmQJPSBJUlFfS0lSS1dPT0RfVFdTSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtpcmt3b29kX2kyYyA9IHsKKwkubmFtZQkJPSBNVjY0WFhYX0kyQ19DVExSX05BTUUsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGtpcmt3b29kX2kyY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGtpcmt3b29kX2kyY19yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmtpcmt3b29kX2kyY19wZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQga2lya3dvb2RfaTJjX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtpcmt3b29kX2kyYyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBVQVJUMAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGtpcmt3b29kX3VhcnQwX2RhdGFbXSA9IHsKQEAgLTUwMiw3ICs1OTAsNyBAQAogCX0sCiB9OwogCi12b2lkIF9faW5pdCBraXJrd29vZF94b3IwX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBraXJrd29vZF94b3IwX2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtpcmt3b29kX3hvcjBfc2hhcmVkKTsKIApAQCAtNjAwLDcgKzY4OCw3IEBACiAJfSwKIH07CiAKLXZvaWQgX19pbml0IGtpcmt3b29kX3hvcjFfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3hvcjFfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2RfeG9yMV9zaGFyZWQpOwogCkBAIC03MDgsNCArNzk2LDkgQEAKICNpZmRlZiBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDIKIAlraXJrd29vZF9sMl9pbml0KCk7CiAjZW5kaWYKKworCS8qIGludGVybmFsIGRldmljZXMgdGhhdCBldmVyeSBib2FyZCBoYXMgKi8KKwlraXJrd29vZF9ydGNfaW5pdCgpOworCWtpcmt3b29kX3hvcjBfaW5pdCgpOworCWtpcmt3b29kX3hvcjFfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKaW5kZXggZmUzNjdjMS4uNmVlODg0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCkBAIC0xNCw2ICsxNCw3IEBACiBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YTsKIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGE7CitzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGE7CiAKIC8qCiAgKiBCYXNpYyBLaXJrd29vZCBpbml0IGZ1bmN0aW9ucyB1c2VkIGVhcmx5IGJ5IG1hY2hpbmUtc2V0dXAuCkBAIC0zMywxNCArMzQsMTQgQEAKIHZvaWQga2lya3dvb2RfZ2UwMV9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSk7CiB2b2lkIGtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKTsKIHZvaWQga2lya3dvb2RfcGNpZV9pbml0KHZvaWQpOwotdm9pZCBraXJrd29vZF9ydGNfaW5pdCh2b2lkKTsKIHZvaWQga2lya3dvb2Rfc2F0YV9pbml0KHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgKnNhdGFfZGF0YSk7Cit2b2lkIGtpcmt3b29kX3NkaW9faW5pdChzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgKm12c2Rpb19kYXRhKTsKIHZvaWQga2lya3dvb2Rfc3BpX2luaXQodm9pZCk7Cit2b2lkIGtpcmt3b29kX2kyY19pbml0KHZvaWQpOwogdm9pZCBraXJrd29vZF91YXJ0MF9pbml0KHZvaWQpOwogdm9pZCBraXJrd29vZF91YXJ0MV9pbml0KHZvaWQpOwotdm9pZCBraXJrd29vZF94b3IwX2luaXQodm9pZCk7Ci12b2lkIGtpcmt3b29kX3hvcjFfaW5pdCh2b2lkKTsKIAorZXh0ZXJuIGludCBraXJrd29vZF90Y2xrOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIga2lya3dvb2RfdGltZXI7CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZGI4OGY2MjgxLWJwLXNldHVwLmMKaW5kZXggYTE0YzI5NC4uNTUwNWQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jCkBAIC0xMSwxOCArMTEsNTkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KKyNpbmNsdWRlIDxwbGF0L29yaW9uX25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L212c2Rpby5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGI4OGY2MjgxX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lID0gInUtYm9vdCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9IFNaXzFNCisJfSwgeworCQkubmFtZSA9ICJ1SW1hZ2UiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IFNaXzRNCisJfSwgeworCQkubmFtZSA9ICJyb290IiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGI4OGY2MjgxX25hbmRfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJPSBLSVJLV09PRF9OQU5EX01FTV9QSFlTX0JBU0UsCisJLmVuZAkJPSBLSVJLV09PRF9OQU5EX01FTV9QSFlTX0JBU0UgKworCQkJICBLSVJLV09PRF9OQU5EX01FTV9TSVpFIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb25fbmFuZF9kYXRhIGRiODhmNjI4MV9uYW5kX2RhdGEgPSB7CisJLnBhcnRzCQk9IGRiODhmNjI4MV9uYW5kX3BhcnRzLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZGI4OGY2MjgxX25hbmRfcGFydHMpLAorCS5jbGUJCT0gMCwKKwkuYWxlCQk9IDEsCisJLndpZHRoCQk9IDgsCisJLmNoaXBfZGVsYXkJPSAyNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiODhmNjI4MV9uYW5kX2ZsYXNoID0geworCS5uYW1lCQk9ICJvcmlvbl9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRiODhmNjI4MV9uYW5kX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmZGI4OGY2MjgxX25hbmRfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKIAogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGRiODhmNjI4MV9nZTAwX2RhdGEgPSB7CiAJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCkBAIC0zMiwxOCArNzMsMzIgQEAKIAkubl9wb3J0cwk9IDIsCiB9OwogCitzdGF0aWMgc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhIGRiODhmNjI4MV9tdnNkaW9fZGF0YSA9IHsKKwkuZ3Bpb193cml0ZV9wcm90ZWN0CT0gMzcsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAzOCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGI4OGY2MjgxX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDM3X0dQSU8sCisJTVBQMzhfR1BJTywKKwkwCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZGI4OGY2MjgxX2luaXQodm9pZCkKIHsKIAkvKgogCSAqIEJhc2ljIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCiAJICovCiAJa2lya3dvb2RfaW5pdCgpOworCWtpcmt3b29kX21wcF9jb25mKGRiODhmNjI4MV9tcHBfY29uZmlnKTsKIAogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwogCWtpcmt3b29kX2dlMDBfaW5pdCgmZGI4OGY2MjgxX2dlMDBfZGF0YSk7Ci0Ja2lya3dvb2RfcnRjX2luaXQoKTsKIAlraXJrd29vZF9zYXRhX2luaXQoJmRiODhmNjI4MV9zYXRhX2RhdGEpOwogCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKKwlraXJrd29vZF9zZGlvX2luaXQoJmRiODhmNjI4MV9tdnNkaW9fZGF0YSk7CisJCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYjg4ZjYyODFfbmFuZF9mbGFzaCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGRiODhmNjI4MV9wY2lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKaW5kZXggYWRhNDgwYy4uMzhjOTg2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCkBAIC05Myw2ICs5Myw3IEBACiAjZGVmaW5lICBERVZJQ0VfSUQJCShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDAzNCkKICNkZWZpbmUgIFJUQ19QSFlTX0JBU0UJCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MDMwMCkKICNkZWZpbmUgIFNQSV9QSFlTX0JBU0UJCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MDYwMCkKKyNkZWZpbmUgIEkyQ19QSFlTX0JBU0UJCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MTAwMCkKICNkZWZpbmUgIFVBUlQwX1BIWVNfQkFTRQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDIwMDApCiAjZGVmaW5lICBVQVJUMF9WSVJUX0JBU0UJKERFVl9CVVNfVklSVF9CQVNFIHwgMHgyMDAwKQogI2RlZmluZSAgVUFSVDFfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjEwMCkKQEAgLTExNiw1ICsxMTcsNyBAQAogCiAjZGVmaW5lIFNBVEFfUEhZU19CQVNFCQkoS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UgfCAweDgwMDAwKQogCisjZGVmaW5lIFNESU9fUEhZU19CQVNFCQkoS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UgfCAweDkwMDAwKQorCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA4NTEwZjZjLi4yM2ExOTE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTcsNyArMTcsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogRW5hYmxlIHNvZnQgcmVzZXQgdG8gYXNzZXJ0IFJTVE9VVG4uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M0NDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYworICoKKyAqIE1QUCBmdW5jdGlvbnMgZm9yIE1hcnZlbGwgS2lya3dvb2QgU29DcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGtpcmt3b29kX3ZhcmlhbnQodm9pZCkKK3sKKwl1MzIgZGV2LCByZXY7CisKKwlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOworCisJaWYgKGRldiA9PSBNVjg4RjYyODFfREVWX0lEICYmIHJldiA+PSBNVjg4RjYyODFfUkVWX0EwKQorCQlyZXR1cm4gTVBQX0Y2MjgxX01BU0s7CisJaWYgKGRldiA9PSBNVjg4RjYxOTJfREVWX0lEICYmIHJldiA+PSBNVjg4RjYxOTJfUkVWX0EwKQorCQlyZXR1cm4gTVBQX0Y2MTkyX01BU0s7CisJaWYgKGRldiA9PSBNVjg4RjYxODBfREVWX0lEKQorCQlyZXR1cm4gTVBQX0Y2MTgwX01BU0s7CisKKwlwcmludGsoS0VSTl9FUlIgIk1QUCBzZXR1cDogdW5rbm93biBraXJrd29vZCB2YXJpYW50ICIKKwkJCSIoZGV2ICUjeCByZXYgJSN4KVxuIiwgZGV2LCByZXYpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIE1QUF9DVFJMKGkpCShERVZfQlVTX1ZJUlRfQkFTRSArIChpKSAqIDQpCisjZGVmaW5lIE1QUF9OUl9SRUdTCSgxICsgTVBQX01BWC84KQorCit2b2lkIF9faW5pdCBraXJrd29vZF9tcHBfY29uZih1bnNpZ25lZCBpbnQgKm1wcF9saXN0KQoreworCXUzMiBtcHBfY3RybFtNUFBfTlJfUkVHU107CisJdW5zaWduZWQgaW50IHZhcmlhbnRfbWFzazsKKwlpbnQgaTsKKworCXZhcmlhbnRfbWFzayA9IGtpcmt3b29kX3ZhcmlhbnQoKTsKKwlpZiAoIXZhcmlhbnRfbWFzaykKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgImluaXRpYWwgTVBQIHJlZ3M6Iik7CisJZm9yIChpID0gMDsgaSA8IE1QUF9OUl9SRUdTOyBpKyspIHsKKwkJbXBwX2N0cmxbaV0gPSByZWFkbChNUFBfQ1RSTChpKSk7CisJCXByaW50aygiICUwOHgiLCBtcHBfY3RybFtpXSk7CisJfQorCXByaW50aygiXG4iKTsKKworCXdoaWxlICgqbXBwX2xpc3QpIHsKKwkJdW5zaWduZWQgaW50IG51bSA9IE1QUF9OVU0oKm1wcF9saXN0KTsKKwkJdW5zaWduZWQgaW50IHNlbCA9IE1QUF9TRUwoKm1wcF9saXN0KTsKKwkJaW50IHNoaWZ0LCBncGlvX21vZGU7CisKKwkJaWYgKG51bSA+IE1QUF9NQVgpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAia2lya3dvb2RfbXBwX2NvbmY6IGludmFsaWQgTVBQICIKKwkJCQkJIm51bWJlciAoJXUpXG4iLCBudW0pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCEoKm1wcF9saXN0ICYgdmFyaWFudF9tYXNrKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJraXJrd29vZF9tcHBfY29uZjogcmVxdWVzdGVkIE1QUCV1IGNvbmZpZyAiCisJCQkgICAgICAgInVuYXZhaWxhYmxlIG9uIHRoaXMgaGFyZHdhcmVcbiIsIG51bSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNoaWZ0ID0gKG51bSAmIDcpIDw8IDI7CisJCW1wcF9jdHJsW251bSAvIDhdICY9IH4oMHhmIDw8IHNoaWZ0KTsKKwkJbXBwX2N0cmxbbnVtIC8gOF0gfD0gc2VsIDw8IHNoaWZ0OworCisJCWdwaW9fbW9kZSA9IDA7CisJCWlmICgqbXBwX2xpc3QgJiBNUFBfSU5QVVRfTUFTSykKKwkJCWdwaW9fbW9kZSB8PSBHUElPX0lOUFVUX09LOworCQlpZiAoKm1wcF9saXN0ICYgTVBQX09VVFBVVF9NQVNLKQorCQkJZ3Bpb19tb2RlIHw9IEdQSU9fT1VUUFVUX09LOworCQlpZiAoc2VsICE9IDApCisJCQlncGlvX21vZGUgPSAwOworCQlvcmlvbl9ncGlvX3NldF92YWxpZChudW0sIGdwaW9fbW9kZSk7CisKKwkJbXBwX2xpc3QrKzsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiICBmaW5hbCBNUFAgcmVnczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVBQX05SX1JFR1M7IGkrKykgeworCQl3cml0ZWwobXBwX2N0cmxbaV0sIE1QUF9DVFJMKGkpKTsKKwkJcHJpbnRrKCIgJTA4eCIsIG1wcF9jdHJsW2ldKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyMWE4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5oIC0tIE11bHRpIFB1cnBvc2UgUGlucworICoKKyAqIENvcHlyaWdodCAyMDA5OiBNYXJ2ZWxsIFRlY2hub2xvZ3kgR3JvdXAgTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19LSVJLV09PRF9NUFBfSAorI2RlZmluZSBfX0tJUktXT09EX01QUF9ICisKKyNkZWZpbmUgTVBQKF9udW0sIF9zZWwsIF9pbiwgX291dCwgX0Y2MTgwLCBfRjYxOTAsIF9GNjE5MiwgX0Y2MjgxKSAoIFwKKwkvKiBNUFAgbnVtYmVyICovCQkoKF9udW0pICYgMHhmZikgfCBcCisJLyogTVBQIHNlbGVjdCB2YWx1ZSAqLwkJKCgoX3NlbCkgJiAweGYpIDw8IDgpIHwgXAorCS8qIG1heSBiZSBpbnB1dCBzaWduYWwgKi8JKCghIShfaW4pKSA8PCAxMikgfCBcCisJLyogbWF5IGJlIG91dHB1dCBzaWduYWwgKi8JKCghIShfb3V0KSkgPDwgMTMpIHwgXAorCS8qIGF2YWlsYWJsZSBvbiBGNjE4MCAqLwkoKCEhKF9GNjE4MCkpIDw8IDE0KSB8IFwKKwkvKiBhdmFpbGFibGUgb24gRjYxOTAgKi8JKCghIShfRjYxOTApKSA8PCAxNSkgfCBcCisJLyogYXZhaWxhYmxlIG9uIEY2MTkyICovCSgoISEoX0Y2MTkyKSkgPDwgMTYpIHwgXAorCS8qIGF2YWlsYWJsZSBvbiBGNjI4MSAqLwkoKCEhKF9GNjI4MSkpIDw8IDE3KSkKKworI2RlZmluZSBNUFBfTlVNKHgpCSgoeCkgJiAweGZmKQorI2RlZmluZSBNUFBfU0VMKHgpCSgoKHgpID4+IDgpICYgMHhmKQorCisJCQkJLyogICBudW0gc2VsICBpICBvICA2MTgwIDYxOTAgNjE5MiA2MjgxICovCisKKyNkZWZpbmUgTVBQX0lOUFVUX01BU0sJCU1QUCggIDAsIDB4MCwgMSwgMCwgMCwgICAwLCAgIDAsICAgMCAgICApCisjZGVmaW5lIE1QUF9PVVRQVVRfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAxLCAwLCAgIDAsICAgMCwgICAwICAgICkKKworI2RlZmluZSBNUFBfRjYxODBfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAwLCAxLCAgIDAsICAgMCwgICAwICAgICkKKyNkZWZpbmUgTVBQX0Y2MTkwX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAxLCAgIDAsICAgMCAgICApCisjZGVmaW5lIE1QUF9GNjE5Ml9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDAsIDAsICAgMCwgICAxLCAgIDAgICAgKQorI2RlZmluZSBNUFBfRjYyODFfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFAwX0dQSU8JCU1QUCggIDAsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDBfTkZfSU8yCQlNUFAoICAwLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAwX1NQSV9TQ24JCU1QUCggIDAsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMV9HUE8JCU1QUCggIDEsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDFfTkZfSU8zCQlNUFAoICAxLCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxX1NQSV9NT1NJCQlNUFAoICAxLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDJfR1BPCQlNUFAoICAyLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyX05GX0lPNAkJTVBQKCAgMiwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMl9TUElfU0NLCQlNUFAoICAyLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDNfR1BPCQlNUFAoICAzLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzX05GX0lPNQkJTVBQKCAgMywgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQM19TUElfTUlTTwkJTVBQKCAgMywgMHgyLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFA0X0dQSU8JCU1QUCggIDQsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDRfTkZfSU82CQlNUFAoICA0LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA0X1VBUlQwX1JYRAkJTVBQKCAgNCwgMHgyLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNF9TQVRBMV9BQ1RuCQlNUFAoICA0LCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA0X1BUUF9DTEsJCU1QUCggIDQsIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNV9HUE8JCU1QUCggIDUsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDVfTkZfSU83CQlNUFAoICA1LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA1X1VBUlQwX1RYRAkJTVBQKCAgNSwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNV9QVFBfVFJJR19HRU4JTVBQKCAgNSwgMHg0LCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNV9TQVRBMF9BQ1RuCQlNUFAoICA1LCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDZfU1lTUlNUX09VVG4JTVBQKCAgNiwgMHgxLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNl9TUElfTU9TSQkJTVBQKCAgNiwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNl9QVFBfVFJJR19HRU4JTVBQKCAgNiwgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFA3X0dQTwkJTVBQKCAgNywgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQN19QRVhfUlNUX09VVG4JTVBQKCAgNywgMHgxLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQN19TUElfU0NuCQlNUFAoICA3LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA3X1BUUF9UUklHX0dFTglNUFAoICA3LCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDhfR1BJTwkJTVBQKCAgOCwgMHgwLCAxLCAxLCAxLCAgICAxLCAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9UV19TREEJCU1QUCggIDgsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfVUFSVDBfUlRTCQlNUFAoICA4LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X1VBUlQxX1JUUwkJTVBQKCAgOCwgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9NSUkwX1JYRVJSCQlNUFAoICA4LCAweDQsIDEsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X1NBVEExX1BSRVNFTlRuCU1QUCggIDgsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfUFRQX0NMSwkJTVBQKCAgOCwgMHhjLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9NSUkwX0NPTAkJTVBQKCAgOCwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFA5X0dQSU8JCU1QUCggIDksIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDlfVFdfU0NLCQlNUFAoICA5LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X1VBUlQwX0NUUwkJTVBQKCAgOSwgMHgyLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOV9VQVJUMV9DVFMJCU1QUCggIDksIDB4MywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDlfU0FUQTBfUFJFU0VOVG4JTVBQKCAgOSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOV9QVFBfRVZFTlRfUkVRCU1QUCggIDksIDB4YywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDlfTUlJMF9DUlMJCU1QUCggIDksIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTBfR1BPCQlNUFAoIDEwLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMF9TUElfU0NLCQlNUFAoIDEwLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMF9VQVJUMF9UWEQJCU1QUCggMTAsIDBYMywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEwX1NBVEExX0FDVG4JTVBQKCAxMCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTBfUFRQX1RSSUdfR0VOCU1QUCggMTAsIDB4YywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTFfR1BJTwkJTVBQKCAxMSwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTFfU1BJX01JU08JCU1QUCggMTEsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX1VBUlQwX1JYRAkJTVBQKCAxMSwgMHgzLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTFfUFRQX0VWRU5UX1JFUQlNUFAoIDExLCAweDQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMV9QVFBfVFJJR19HRU4JTVBQKCAxMSwgMHhjLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTFfUFRQX0NMSwkJTVBQKCAxMSwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTFfU0FUQTBfQUNUbglNUFAoIDExLCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDEyX0dQTwkJTVBQKCAxMiwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTJfU0RfQ0xLCQlNUFAoIDEyLCAweDEsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDEzX0dQSU8JCU1QUCggMTMsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEzX1NEX0NNRAkJTVBQKCAxMywgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTNfVUFSVDFfVFhECQlNUFAoIDEzLCAweDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDE0X0dQSU8JCU1QUCggMTQsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE0X1NEX0QwCQlNUFAoIDE0LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNF9VQVJUMV9SWEQJCU1QUCggMTQsIDB4MywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE0X1NBVEExX1BSRVNFTlRuCU1QUCggMTQsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE0X01JSTBfQ09MCQlNUFAoIDE0LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDE1X0dQSU8JCU1QUCggMTUsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE1X1NEX0QxCQlNUFAoIDE1LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNV9VQVJUMF9SVFMJCU1QUCggMTUsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE1X1VBUlQxX1RYRAkJTVBQKCAxNSwgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTVfU0FUQTBfQUNUbglNUFAoIDE1LCAweDQsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDE2X0dQSU8JCU1QUCggMTYsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE2X1NEX0QyCQlNUFAoIDE2LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNl9VQVJUMF9DVFMJCU1QUCggMTYsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE2X1VBUlQxX1JYRAkJTVBQKCAxNiwgMHgzLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTZfU0FUQTFfQUNUbglNUFAoIDE2LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNl9NSUkwX0NSUwkJTVBQKCAxNiwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxN19HUElPCQlNUFAoIDE3LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxN19TRF9EMwkJTVBQKCAxNywgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTdfU0FUQTBfUFJFU0VOVG4JTVBQKCAxNywgMHg0LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxOF9HUE8JCU1QUCggMTgsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE4X05GX0lPMAkJTVBQKCAxOCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxOV9HUE8JCU1QUCggMTksIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE5X05GX0lPMQkJTVBQKCAxOSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyMF9HUElPCQlNUFAoIDIwLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMF9UU01QMAkJTVBQKCAyMCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjBfVERNX0NIMF9UWF9RTAlNUFAoIDIwLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMF9HRTFfMAkJTVBQKCAyMCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjBfQVVESU9fU1BESUZJCU1QUCggMjAsIDB4NCwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIwX1NBVEExX0FDVG4JTVBQKCAyMCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyMV9HUElPCQlNUFAoIDIxLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMV9UU01QMQkJTVBQKCAyMSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjFfVERNX0NIMF9SWF9RTAlNUFAoIDIxLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMV9HRTFfMQkJTVBQKCAyMSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjFfQVVESU9fU1BESUZPCU1QUCggMjEsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIxX1NBVEEwX0FDVG4JTVBQKCAyMSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyMl9HUElPCQlNUFAoIDIyLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMl9UU01QMgkJTVBQKCAyMiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjJfVERNX0NIMl9UWF9RTAlNUFAoIDIyLCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMl9HRTFfMgkJTVBQKCAyMiwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjJfQVVESU9fU1BESUZSTUtDTEsJTVBQKCAyMiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjJfU0FUQTFfUFJFU0VOVG4JTVBQKCAyMiwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyM19HUElPCQlNUFAoIDIzLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyM19UU01QMwkJTVBQKCAyMywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjNfVERNX0NIMl9SWF9RTAlNUFAoIDIzLCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyM19HRTFfMwkJTVBQKCAyMywgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjNfQVVESU9fSTJTQkNMSwlNUFAoIDIzLCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyM19TQVRBMF9QUkVTRU5UbglNUFAoIDIzLCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDI0X0dQSU8JCU1QUCggMjQsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI0X1RTTVA0CQlNUFAoIDI0LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNF9URE1fU1BJX0NTMAlERVYoIDI0LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNF9HRTFfNAkJTVBQKCAyNCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjRfQVVESU9fSTJTRE8JTVBQKCAyNCwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyNV9HUElPCQlNUFAoIDI1LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNV9UU01QNQkJTVBQKCAyNSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjVfVERNX1NQSV9TQ0sJTVBQKCAyNSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjVfR0UxXzUJCU1QUCggMjUsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI1X0FVRElPX0kyU0xSQ0xLCU1QUCggMjUsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjZfR1BJTwkJTVBQKCAyNiwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjZfVFNNUDYJCU1QUCggMjYsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI2X1RETV9TUElfTUlTTwlNUFAoIDI2LCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNl9HRTFfNgkJTVBQKCAyNiwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjZfQVVESU9fSTJTTUNMSwlNUFAoIDI2LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDI3X0dQSU8JCU1QUCggMjcsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI3X1RTTVA3CQlNUFAoIDI3LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyN19URE1fU1BJX01PU0kJTVBQKCAyNywgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjdfR0UxXzcJCU1QUCggMjcsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI3X0FVRElPX0kyU0RJCU1QUCggMjcsIDB4NCwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjhfR1BJTwkJTVBQKCAyOCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjhfVFNNUDgJCU1QUCggMjgsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI4X1RETV9DT0RFQ19JTlRuCU1QUCggMjgsIDB4MiwgMCwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI4X0dFMV84CQlNUFAoIDI4LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOF9BVURJT19FWFRDTEsJTVBQKCAyOCwgMHg0LCAxLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyOV9HUElPCQlNUFAoIDI5LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOV9UU01QOQkJTVBQKCAyOSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjlfVERNX0NPREVDX1JTVG4JTVBQKCAyOSwgMHgyLCAwLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjlfR0UxXzkJCU1QUCggMjksIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzBfR1BJTwkJTVBQKCAzMCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzBfVFNNUDEwCQlNUFAoIDMwLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMF9URE1fUENMSwkJTVBQKCAzMCwgMHgyLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzBfR0UxXzEwCQlNUFAoIDMwLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDMxX0dQSU8JCU1QUCggMzEsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMxX1RTTVAxMQkJTVBQKCAzMSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzFfVERNX0ZTCQlNUFAoIDMxLCAweDIsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMV9HRTFfMTEJCU1QUCggMzEsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzJfR1BJTwkJTVBQKCAzMiwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzJfVFNNUDEyCQlNUFAoIDMyLCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMl9URE1fRFJYCQlNUFAoIDMyLCAweDIsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMl9HRTFfMTIJCU1QUCggMzIsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzNfR1BJTwkJTVBQKCAzMywgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzNfVERNX0RUWAkJTVBQKCAzMywgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzNfR0UxXzEzCQlNUFAoIDMzLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDM0X0dQSU8JCU1QUCggMzQsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDM0X1RETV9TUElfQ1MxCU1QUCggMzQsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDM0X0dFMV8xNAkJTVBQKCAzNCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzNV9HUElPCQlNUFAoIDM1LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNV9URE1fQ0gwX1RYX1FMCU1QUCggMzUsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDM1X0dFMV8xNQkJTVBQKCAzNSwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzVfU0FUQTBfQUNUbglNUFAoIDM1LCAweDUsIDAsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNV9NSUkwX1JYRVJSCU1QUCggMzUsIDB4YywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzZfR1BJTwkJTVBQKCAzNiwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzZfVFNNUDAJCU1QUCggMzYsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM2X1RETV9TUElfQ1MxCU1QUCggMzYsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM2X0FVRElPX1NQRElGSQlNUFAoIDM2LCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDM3X0dQSU8JCU1QUCggMzcsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM3X1RTTVAxCQlNUFAoIDM3LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzN19URE1fQ0gyX1RYX1FMCU1QUCggMzcsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM3X0FVRElPX1NQRElGTwlNUFAoIDM3LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDM4X0dQSU8JCU1QUCggMzgsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM4X1RTTVAyCQlNUFAoIDM4LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOF9URE1fQ0gyX1JYX1FMCU1QUCggMzgsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM4X0FVRElPX1NQRElGUk1MQ0xLCU1QUCggMzgsIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzlfR1BJTwkJTVBQKCAzOSwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzlfVFNNUDMJCU1QUCggMzksIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM5X1RETV9TUElfQ1MwCU1QUCggMzksIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM5X0FVRElPX0kyU0JDTEsJTVBQKCAzOSwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0MF9HUElPCQlNUFAoIDQwLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MF9UU01QNAkJTVBQKCA0MCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDBfVERNX1NQSV9TQ0sJTVBQKCA0MCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDBfQVVESU9fSTJTRE8JTVBQKCA0MCwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0MV9HUElPCQlNUFAoIDQxLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MV9UU01QNQkJTVBQKCA0MSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDFfVERNX1NQSV9NSVNPCU1QUCggNDEsIDB4MiwgMSwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQxX0FVRElPX0kyU0xSQwlNUFAoIDQxLCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQyX0dQSU8JCU1QUCggNDIsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQyX1RTTVA2CQlNUFAoIDQyLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0Ml9URE1fU1BJX01PU0kJTVBQKCA0MiwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDJfQVVESU9fSTJTTUNMSwlNUFAoIDQyLCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQzX0dQSU8JCU1QUCggNDMsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQzX1RTTVA3CQlNUFAoIDQzLCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0M19URE1fQ09ERUNfSU5UbglNUFAoIDQzLCAweDIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0M19BVURJT19JMlNESQlNUFAoIDQzLCAweDQsIDEsIDAsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQ0X0dQSU8JCU1QUCggNDQsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ0X1RTTVA4CQlNUFAoIDQ0LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0NF9URE1fQ09ERUNfUlNUbglNUFAoIDQ0LCAweDIsIDAsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0NF9BVURJT19FWFRDTEsJTVBQKCA0NCwgMHg0LCAxLCAwLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0NV9HUElPCQlNUFAoIDQ1LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0NV9UU01QOQkJTVBQKCA0NSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDVfVERNX1BDTEsJCU1QUCggNDUsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDZfR1BJTwkJTVBQKCA0NiwgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDZfVFNNUDEwCQlNUFAoIDQ2LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0Nl9URE1fRlMJCU1QUCggNDYsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDdfR1BJTwkJTVBQKCA0NywgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDdfVFNNUDExCQlNUFAoIDQ3LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0N19URE1fRFJYCQlNUFAoIDQ3LCAweDIsIDEsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQ4X0dQSU8JCU1QUCggNDgsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ4X1RTTVAxMgkJTVBQKCA0OCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDhfVERNX0RUWAkJTVBQKCA0OC4gMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0OV9HUElPCQlNUFAoIDQ5LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OV9UU01QOQkJTVBQKCA0OSwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDlfVERNX0NIMF9SWF9RTAlNUFAoIDQ5LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OV9QVFBfQ0xLCQlNUFAoIDQ5LCAweDUsIDEsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUF9NQVgJCQk0OQorCit2b2lkIGtpcmt3b29kX21wcF9jb25mKHVuc2lnbmVkIGludCAqbXBwX2xpc3QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MTkyLW5hcy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYxOTItbmFzLXNldHVwLmMKaW5kZXggYjFkMWE4N2EuLjJmMGU0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MTkyLW5hcy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MTkyLW5hcy1zZXR1cC5jCkBAIC0xMSwxMSArMTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CkBAIC0yMyw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL29yaW9uX3NwaS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KICNpbmNsdWRlICJjb21tb24uaCIKIApAQCAtNjEsMTQgKzU3LDExIEBACiAKIAlraXJrd29vZF9laGNpX2luaXQoKTsKIAlraXJrd29vZF9nZTAwX2luaXQoJnJkODhmNjE5Ml9nZTAwX2RhdGEpOwotCWtpcmt3b29kX3J0Y19pbml0KCk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZyZDg4ZjYxOTJfc2F0YV9kYXRhKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhyZDg4RjYxOTJfc3BpX3NsYXZlX2luZm8sCiAJCQkJQVJSQVlfU0laRShyZDg4RjYxOTJfc3BpX3NsYXZlX2luZm8pKTsKIAlraXJrd29vZF9zcGlfaW5pdCgpOwogCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKLQlraXJrd29vZF94b3IwX2luaXQoKTsKLQlraXJrd29vZF94b3IxX2luaXQoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcmQ4OGY2MTkyX3BjaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwppbmRleCA5YTBlOTA1Li4zMWU5OTZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKQEAgLTExLDIxICsxMSwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPG5ldC9kc2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KICNpbmNsdWRlIDxwbGF0L29yaW9uX25hbmQuaD4KICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJkODhmNjI4MV9uYW5kX3BhcnRzW10gPSB7CiAJewpAQCAtNzUsNyArNzQsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSByZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1syXQk9ICJsYW4zIiwKQEAgLTgzLDYgKzgyLDExIEBACiAJLnBvcnRfbmFtZXNbNV0JPSAiY3B1IiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX2dlMDFfZGF0YSA9IHsKIAkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigxMSksCiB9OwpAQCAtOTEsNiArOTUsMTUgQEAKIAkubl9wb3J0cwk9IDIsCiB9OwogCitzdGF0aWMgc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9tdnNkaW9fZGF0YSA9IHsKKwkuZ3Bpb19jYXJkX2RldGVjdCA9IDI4LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCByZDg4ZjYyODFfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMjhfR1BJTywKKwkwCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcmQ4OGY2MjgxX2luaXQodm9pZCkKIHsKIAl1MzIgZGV2LCByZXY7CkBAIC05OSwyMSArMTEyLDIyIEBACiAJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KIAkgKi8KIAlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYocmQ4OGY2MjgxX21wcF9jb25maWcpOwogCiAJa2lya3dvb2RfZWhjaV9pbml0KCk7CiAKIAlraXJrd29vZF9nZTAwX2luaXQoJnJkODhmNjI4MV9nZTAwX2RhdGEpOwogCWtpcmt3b29kX3BjaWVfaWQoJmRldiwgJnJldik7CiAJaWYgKHJldiA9PSBNVjg4RjYyODFfUkVWX0EwKSB7Ci0JCXJkODhmNjI4MV9zd2l0Y2hfZGF0YS5zd19hZGRyID0gMTA7CisJCXJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLnN3X2FkZHIgPSAxMDsKIAkJa2lya3dvb2RfZ2UwMV9pbml0KCZyZDg4ZjYyODFfZ2UwMV9kYXRhKTsKIAl9IGVsc2UgewotCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOworCQlyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YS5wb3J0X25hbWVzWzRdID0gIndhbiI7CiAJfQotCWtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoJnJkODhmNjI4MV9zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAotCWtpcmt3b29kX3J0Y19pbml0KCk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZyZDg4ZjYyODFfc2F0YV9kYXRhKTsKKwlraXJrd29vZF9zZGlvX2luaXQoJnJkODhmNjI4MV9tdnNkaW9fZGF0YSk7CiAJa2lya3dvb2RfdWFydDBfaW5pdCgpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZDg4ZjYyODFfbmFuZF9mbGFzaCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvc2hlZXZhcGx1Zy1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWU0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta2lya3dvb2Qvc2hlZXZhcGx1Zy1zZXR1cC5jCisgKgorICogTWFydmVsbCBTaGVldmFQbHVnIFJlZmVyZW5jZSBCb2FyZCBTZXR1cAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L29yaW9uX25hbmQuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNoZWV2YXBsdWdfbmFuZF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUgPSAidS1ib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMU0KKwl9LCB7CisJCS5uYW1lID0gInVJbWFnZSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplID0gU1pfNE0KKwl9LCB7CisJCS5uYW1lID0gInJvb3QiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGVldmFwbHVnX25hbmRfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJPSBLSVJLV09PRF9OQU5EX01FTV9QSFlTX0JBU0UsCisJLmVuZAkJPSBLSVJLV09PRF9OQU5EX01FTV9QSFlTX0JBU0UgKworCQkJICBLSVJLV09PRF9OQU5EX01FTV9TSVpFIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb25fbmFuZF9kYXRhIHNoZWV2YXBsdWdfbmFuZF9kYXRhID0geworCS5wYXJ0cwkJPSBzaGVldmFwbHVnX25hbmRfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzaGVldmFwbHVnX25hbmRfcGFydHMpLAorCS5jbGUJCT0gMCwKKwkuYWxlCQk9IDEsCisJLndpZHRoCQk9IDgsCisJLmNoaXBfZGVsYXkJPSAyNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZWV2YXBsdWdfbmFuZF9mbGFzaCA9IHsKKwkubmFtZQkJPSAib3Jpb25fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaGVldmFwbHVnX25hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9ICZzaGVldmFwbHVnX25hbmRfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHNoZWV2YXBsdWdfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDApLAorfTsKKworc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSBzaGVldmFwbHVnX212c2Rpb19kYXRhID0geworCS8vIHVuZm9ydHVuYXRlbHkgdGhlIENEIHNpZ25hbCBoYXMgbm90IGJlZW4gY29ubmVjdGVkICovCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHNoZWV2YXBsdWdfbGVkX3BpbnNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAicGx1ZzpncmVlbjpoZWFsdGgiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAorCQkuZ3BpbwkJCT0gNDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBzaGVldmFwbHVnX2xlZF9kYXRhID0geworCS5sZWRzCQk9IHNoZWV2YXBsdWdfbGVkX3BpbnMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShzaGVldmFwbHVnX2xlZF9waW5zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZWV2YXBsdWdfbGVkcyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNoZWV2YXBsdWdfbGVkX2RhdGEsCisJfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzaGVldmFwbHVnX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI5X0dQSU8sCS8qIFVTQiBQb3dlciBFbmFibGUgKi8KKwlNUFA0OV9HUElPLAkvKiBMRUQgKi8KKwkwCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2hlZXZhcGx1Z19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCWtpcmt3b29kX2luaXQoKTsKKwlraXJrd29vZF9tcHBfY29uZihzaGVldmFwbHVnX21wcF9jb25maWcpOworCisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCisJaWYgKGdwaW9fcmVxdWVzdCgyOSwgIlVTQiBQb3dlciBFbmFibGUiKSAhPSAwIHx8CisJICAgIGdwaW9fZGlyZWN0aW9uX291dHB1dCgyOSwgMSkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBzZXQgdXAgR1BJTyAyOSAoVVNCIFBvd2VyIEVuYWJsZSlcbiIpOworCWtpcmt3b29kX2VoY2lfaW5pdCgpOworCisJa2lya3dvb2RfZ2UwMF9pbml0KCZzaGVldmFwbHVnX2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2Rpb19pbml0KCZzaGVldmFwbHVnX212c2Rpb19kYXRhKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hlZXZhcGx1Z19uYW5kX2ZsYXNoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZWV2YXBsdWdfbGVkcyk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU0hFRVZBUExVRywgIk1hcnZlbGwgU2hlZXZhUGx1ZyBSZWZlcmVuY2UgQm9hcmQiKQorCS8qIE1haW50YWluZXI6IHNoYWRpIEFtbW91cmkgPHNoYWRpQG1hcnZlbGwuY29tPiAqLworCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IHNoZWV2YXBsdWdfaW5pdCwKKwkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKKwkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE1NzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czIxOS1zZXR1cC5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICoKKyAqIFFOQVAgVFMtMTE5L1RTLTIxOSBUdXJibyBOQVMgQm9hcmQgU2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIE1hcnRpbiBNaWNobG1heXIgPHRibUBjeXJpdXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBCeXJvbiBCcmFkbGV5IDxieXJvbi5iYnJhZGxleUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9vcmlvbl9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMTYgTWlCIE5PUiBmbGFzaC4gVGhlIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlzIG5vdCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUKKyAqICAgICBwYXJ0aXRpb25zIG9uIHRoZSBkZXZpY2UgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgY29tcGF0YWJpbGl0eSB3aXRoCisgKiAgICAgdGhlIFFOQVAgZmlybXdhcmUuCisgKiBMYXlvdXQgYXMgdXNlZCBieSBRTkFQOgorICogIDB4MDAwMDAwMDAtMHgwMDA4MDAwMCA6ICJVLUJvb3QiCisgKiAgMHgwMDIwMDAwMC0weDAwNDAwMDAwIDogIktlcm5lbCIKKyAqICAweDAwNDAwMDAwLTB4MDBkMDAwMDAgOiAiUm9vdEZTIgorICogIDB4MDBkMDAwMDAtMHgwMTAwMDAwMCA6ICJSb290RlMyIgorICogIDB4MDAwODAwMDAtMHgwMDBjMDAwMCA6ICJVLUJvb3QgQ29uZmlnIgorICogIDB4MDAwYzAwMDAtMHgwMDIwMDAwMCA6ICJOQVMgQ29uZmlnIgorICoKKyAqIFdlJ2xsIHVzZSAiUm9vdEZTMSIgaW5zdGVhZCBvZiAiUm9vdEZTIiB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCB0aGUgbGF5b3V0CisgKiB1c2VkIGJ5IHRoZSBRTkFQIFRTLTEwOS9UUy0yMDkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHFuYXBfdHMyMTlfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlUtQm9vdCIsCisJCS5zaXplCQk9IDB4MDAwODAwMDAsCisJCS5vZmZzZXQJCT0gMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sIHsKKwkJLm5hbWUJCT0gIktlcm5lbCIsCisJCS5zaXplCQk9IDB4MDAyMDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDIwMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJSb290RlMxIiwKKwkJLnNpemUJCT0gMHgwMDkwMDAwMCwKKwkJLm9mZnNldAkJPSAweDAwNDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlJvb3RGUzIiLAorCQkuc2l6ZQkJPSAweDAwMzAwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDBkMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiVS1Cb290IENvbmZpZyIsCisJCS5zaXplCQk9IDB4MDAwNDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDA4MDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJOQVMgQ29uZmlnIiwKKwkJLnNpemUJCT0gMHgwMDE0MDAwMCwKKwkJLm9mZnNldAkJPSAweDAwMGMwMDAwLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9mbGFzaCA9IHsKKwkudHlwZQkJPSAibTI1cDEyOCIsCisJLm5hbWUJCT0gInNwaV9mbGFzaCIsCisJLnBhcnRzCQk9IHFuYXBfdHMyMTlfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHFuYXBfdHMyMTlfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgcW5hcF90czIxOV9zcGlfc2xhdmVfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnFuYXBfdHMyMTlfZmxhc2gsCisJCS5pcnEJCT0gLTEsCisJCS5tYXhfc3BlZWRfaHoJPSAyMDAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcW5hcF90czIxOV9pMmNfcnRjID0geworCUkyQ19CT0FSRF9JTkZPKCJzMzUzOTBhIiwgMHgzMCksCit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9nZTAwX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCit9OworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBxbmFwX3RzMjE5X3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcW5hcF90czIxOV9idXR0b25zW10gPSB7CisJeworCQkuY29kZQkJPSBLRVlfQ09QWSwKKwkJLmdwaW8JCT0gMTUsCisJCS5kZXNjCQk9ICJVU0IgQ29weSIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwl9LAorCXsKKwkJLmNvZGUJCT0gS0VZX1JFU1RBUlQsCisJCS5ncGlvCQk9IDE2LAorCQkuZGVzYwkJPSAiUmVzZXQiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHFuYXBfdHMyMTlfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHFuYXBfdHMyMTlfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxbmFwX3RzMjE5X2J1dHRvbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcW5hcF90czIxOV9idXR0b25fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHFuYXBfdHMyMTlfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMF9TUElfU0NuLAorCU1QUDFfU1BJX01PU0ksCisJTVBQMl9TUElfU0NLLAorCU1QUDNfU1BJX01JU08sCisJTVBQOF9UV19TREEsCisJTVBQOV9UV19TQ0ssCisJTVBQMTBfVUFSVDBfVFhELAorCU1QUDExX1VBUlQwX1JYRCwKKwlNUFAxM19VQVJUMV9UWEQsCS8qIFBJQyBjb250cm9sbGVyICovCisJTVBQMTRfVUFSVDFfUlhELAkvKiBQSUMgY29udHJvbGxlciAqLworCU1QUDE1X0dQSU8sCQkvKiBVU0IgQ29weSBidXR0b24gKi8KKwlNUFAxNl9HUElPLAkJLyogUmVzZXQgYnV0dG9uICovCisJTVBQMjBfU0FUQTFfQUNUbiwKKwlNUFAyMV9TQVRBMF9BQ1RuLAorCU1QUDIyX1NBVEExX1BSRVNFTlRuLAorCU1QUDIzX1NBVEEwX1BSRVNFTlRuLAorCTAKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBRTkFQIFRTLXgxOSBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kIHZpYSBVQVJUMS1hdHRhY2hlZCBQSUMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFVBUlQxX1JFRyh4KQkoVUFSVDFfVklSVF9CQVNFICsgKChVQVJUXyMjeCkgPDwgMikpCisKK3ZvaWQgcW5hcF90czIxOV9wb3dlcl9vZmYodm9pZCkKK3sKKwkvKiAxOTIwMCBiYXVkIGRpdmlzb3IgKi8KKwljb25zdCB1bnNpZ25lZCBkaXZpc29yID0gKChraXJrd29vZF90Y2xrICsgKDggKiAxOTIwMCkpIC8gKDE2ICogMTkyMDApKTsKKworCXByX2luZm8oIiVzOiB0cmlnZ2VyaW5nIHBvd2VyLW9mZi4uLlxuIiwgX19mdW5jX18pOworCisJLyogaGlqYWNrIFVBUlQxIGFuZCByZXNldCBpbnRvIHNhbmUgc3RhdGUgKDE5MjAwLDhuMSkgKi8KKwl3cml0ZWwoMHg4MywgVUFSVDFfUkVHKExDUikpOworCXdyaXRlbChkaXZpc29yICYgMHhmZiwgVUFSVDFfUkVHKERMTCkpOworCXdyaXRlbCgoZGl2aXNvciA+PiA4KSAmIDB4ZmYsIFVBUlQxX1JFRyhETE0pKTsKKwl3cml0ZWwoMHgwMywgVUFSVDFfUkVHKExDUikpOworCXdyaXRlbCgweDAwLCBVQVJUMV9SRUcoSUVSKSk7CisJd3JpdGVsKDB4MDAsIFVBUlQxX1JFRyhGQ1IpKTsKKwl3cml0ZWwoMHgwMCwgVUFSVDFfUkVHKE1DUikpOworCisJLyogc2VuZCB0aGUgcG93ZXItb2ZmIGNvbW1hbmQgJ0EnIHRvIFBJQyAqLworCXdyaXRlbCgnQScsIFVBUlQxX1JFRyhUWCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcW5hcF90czIxOV9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCWtpcmt3b29kX2luaXQoKTsKKwlraXJrd29vZF9tcHBfY29uZihxbmFwX3RzMjE5X21wcF9jb25maWcpOworCisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCWtpcmt3b29kX3VhcnQxX2luaXQoKTsgLyogQSBQSUMgY29udHJvbGxlciBpcyBjb25uZWN0ZWQgaGVyZS4gKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhxbmFwX3RzMjE5X3NwaV9zbGF2ZV9pbmZvLAorCQkJCUFSUkFZX1NJWkUocW5hcF90czIxOV9zcGlfc2xhdmVfaW5mbykpOworCWtpcmt3b29kX3NwaV9pbml0KCk7CisJa2lya3dvb2RfaTJjX2luaXQoKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmcW5hcF90czIxOV9pMmNfcnRjLCAxKTsKKwlraXJrd29vZF9nZTAwX2luaXQoJnFuYXBfdHMyMTlfZ2UwMF9kYXRhKTsKKwlraXJrd29vZF9zYXRhX2luaXQoJnFuYXBfdHMyMTlfc2F0YV9kYXRhKTsKKwlraXJrd29vZF9laGNpX2luaXQoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnFuYXBfdHMyMTlfYnV0dG9uX2RldmljZSk7CisKKwlwbV9wb3dlcl9vZmYgPSBxbmFwX3RzMjE5X3Bvd2VyX29mZjsKKworfQorCitNQUNISU5FX1NUQVJUKFRTMjE5LCAiUU5BUCBUUy0xMTkvVFMtMjE5IikKKwkvKiBNYWludGFpbmVyOiBNYXJ0aW4gTWljaGxtYXlyIDx0Ym1AY3lyaXVzLmNvbT4gKi8KKwkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBxbmFwX3RzMjE5X2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZwppbmRleCAyNzU0ZGFhLi5mZTBjODJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L0tjb25maWcKQEAgLTE0LDYgKzE0LDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIHRoZSBELUxpbmsKIAkgIERTTS0zMjAgV2lyZWxlc3MgTWVkaWEgUGxheWVyLgogCitjb25maWcgTUFDSF9BQ1M1SworCWJvb2wgIkJyaXZvIFN5c3RlbXMgTExDLCBBQ1MtNTAwMCBNYXN0ZXIgYm9hcmQiCisJaGVscAorCSAgc2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiB0aGUgQnJpdm8KKwkgIFN5c3RlbXMgTExDLCBBQ1MtNTAwMCBNYXN0ZXIgYm9hcmQuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKaW5kZXggZjczNWQyYy4uN2UzZTgxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDQgQEAKICMgQm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfS1M4Njk1KQkrPSBib2FyZC1taWNyZWwubwogb2JqLSQoQ09ORklHX01BQ0hfRFNNMzIwKQkrPSBib2FyZC1kc20zMjAubworb2JqLSQoQ09ORklHX01BQ0hfQUNTNUspCSs9IGJvYXJkLWFjczVrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWFjczVrLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1hY3M1ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2U1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1hY3M1ay5jCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtYWNzNWsuYworICoKKyAqIEJyaXZvIFN5c3RlbXMgTExDLCBBQ1MtNTAwMCBNYXN0ZXIgQm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCQkgIERhbmllbCBTaWx2ZXJzdG9uZSA8ZHNpbHZlcnNAc2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBhY3M1a19pMmNfZGV2aWNlX3BsYXRkYXRhID0geworCS5zZGFfcGluCT0gNCwKKwkuc2NsX3Bpbgk9IDUsCisJLnVkZWxheQkJPSAxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFjczVrX2kyY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1ncGlvIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5yZXNvdXJjZQk9IE5VTEwsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFjczVrX2kyY19kZXZpY2VfcGxhdGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgYWNzNWtfcGNhOTU1NV9zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgIHVuc2lnbmVkIGdwaW9fYmFzZSwgdW5zaWduZWQgbmdwaW8sCisJCQkgICAgICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdGF0aWMgaW50IGFjczVrX2dwaW9fdmFsdWVbXSA9IHsKKwkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAwLCAtMSwgLTEKKwl9OworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoYWNzNWtfZ3Bpb192YWx1ZSk7ICsrbikgeworCQlncGlvX3JlcXVlc3QoZ3Bpb19iYXNlICsgbiwgIkFDUy01MDAwIEdQSU8gRXhwYW5kZXIiKTsKKwkJaWYgKGFjczVrX2dwaW9fdmFsdWVbbl0gPCAwKQorCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19iYXNlICsgbik7CisJCWVsc2UKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX2Jhc2UgKyBuLAorCQkJCQkgICAgICBhY3M1a19ncGlvX3ZhbHVlW25dKTsKKwkJZ3Bpb19leHBvcnQoZ3Bpb19iYXNlICsgbiwgMCk7IC8qIEV4cG9ydCwgZGlyZWN0aW9uIGxvY2tlZCBkb3duICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGFjczVrX2kyY19wY2E5NTU1X3BsYXRkYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwgLyogU3RhcnQgZGlyZWN0bHkgYWZ0ZXIgdGhlIENQVSdzIEdQSU8gKi8KKwkuaW52ZXJ0CQk9IDAsIC8qIERvIG5vdCBpbnZlcnQgKi8KKwkuc2V0dXAJCT0gYWNzNWtfcGNhOTU1NV9zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gYWNzNWtfaTJjX2RldnNbXSBfX2luaXRkYXRhID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAorCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjYTk1NTUiLCAweDIwKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWNzNWtfaTJjX3BjYTk1NTVfcGxhdGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY3M1a19pMmNfaW5pdCh2b2lkKQoreworCS8qIFRoZSBncGlvIGludGVyZmFjZSAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWNzNWtfaTJjX2RldmljZSk7CisJLyogSTJDIGRldmljZXMgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBhY3M1a19pMmNfZGV2cywKKwkJCQlBUlJBWV9TSVpFKGFjczVrX2kyY19kZXZzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhY3M1a19ub3JfcGFydGl0aW9uc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQm9vdCBBZ2VudCBhbmQgY29uZmlnIiwKKwkJLnNpemUJPSBTWl8yNTZLLAorCQkub2Zmc2V0CT0gMCwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICJLZXJuZWwiLAorCQkuc2l6ZQk9IFNaXzFNLAorCQkub2Zmc2V0CT0gU1pfMjU2SywKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAiU3F1YXNoRlMxIiwKKwkJLnNpemUJPSBTWl8yTSwKKwkJLm9mZnNldAk9IFNaXzI1NksgKyBTWl8xTSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUJPSAiU3F1YXNoRlMyIiwKKwkJLnNpemUJPSBTWl80TSArIFNaXzJNLAorCQkub2Zmc2V0CT0gU1pfMjU2SyArIFNaXzFNICsgU1pfMk0sCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lCT0gIkRhdGEiLAorCQkuc2l6ZQk9IFNaXzE2TSArIFNaXzRNICsgU1pfMk0gKyBTWl81MTJLLCAvKiAyMi41IE1CICovCisJCS5vZmZzZXQJPSBTWl8yNTZLICsgU1pfOE0gKyBTWl8xTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBhY3M1a19ub3JfcGRhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShhY3M1a19ub3JfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IGFjczVrX25vcl9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhY3M1a19ub3JfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFNaXzMyTSwgLyogV2UgZXhwZWN0IHRoZSBib290bG9hZGVyIHRvIG1hcAorCQkJCSAgKiB0aGUgZmxhc2ggaGVyZS4KKwkJCQkgICovCisJCS5lbmQgICA9IFNaXzMyTSArIFNaXzE2TSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBTWl8zMk0gKyBTWl8xNk0sCisJCS5lbmQgICA9IFNaXzMyTSArIFNaXzMyTSAtIFNaXzI1NksgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhY3M1a19kZXZpY2Vfbm9yID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjczVrX25vcl9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gYWNzNWtfbm9yX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhY3M1a19ub3JfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3M1a19yZWdpc3Rlcl9ub3Iodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGFjczVrX25vcl9wYXJ0aXRpb25zWzBdLm1hc2tfZmxhZ3MgPT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogVW5wcm90ZWN0aW5nIGJvb3Rsb2FkZXIgYW5kIGNvbmZpZ3VyYXRpb24gcGFydGl0aW9uXG4iKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWNzNWtfZGV2aWNlX25vcik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHBoeXNtYXAtZmxhc2ggZGV2aWNlXG4iKTsKK30KKworc3RhdGljIGludCBfX2luaXQgYWNzNWtfcHJvdGVjdGlvbl9zZXR1cChjaGFyICpzKQoreworCS8qIFdlIGNhbid0IGFsbG9jYXRlIGFueXRoaW5nIGhlcmUgYnV0IHdlIHNob3VsZCBiZSBhYmxlCisJICogdG8gdHJpdmlhbGx5IHBhcnNlIHMgYW5kIGRlY2lkZSBpZiB3ZSBjYW4gcHJvdGVjdCB0aGUKKwkgKiBib290bG9hZGVyIHBhcnRpdGlvbiBvciBub3QKKwkgKi8KKwlpZiAoc3RyY21wKHMsICJubyIpID09IDApCisJCWFjczVrX25vcl9wYXJ0aXRpb25zWzBdLm1hc2tfZmxhZ3MgPSAwOworCisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInByb3RlY3RfYm9vdGxvYWRlcj0iLCBhY3M1a19wcm90ZWN0aW9uX3NldHVwKTsKKworc3RhdGljIHZvaWQgX19pbml0IGFjczVrX2luaXRfZ3Bpbyh2b2lkKQoreworCWludCBpOworCisJa3M4Njk1X3JlZ2lzdGVyX2dwaW9zKCk7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJZ3Bpb19yZXF1ZXN0KGksICJBQ1M1SyBJUlEiKTsKKwlncGlvX3JlcXVlc3QoNywgIkFDUzVLIEtTX0ZSRFkiKTsKKwlmb3IgKGkgPSA4OyBpIDwgMTY7ICsraSkKKwkJZ3Bpb19yZXF1ZXN0KGksICJBQ1M1SyBVbnVzZWQiKTsKKworCWdwaW9fcmVxdWVzdCgzLCAiQUNTNUsgQ0FOIENvbnRyb2wiKTsKKwlncGlvX3JlcXVlc3QoNiwgIkFDUzVLIEhlYXJ0YmVhdCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgzLCAxKTsgLyogRGVmYXVsdCBDQU5fUkVTRVQgaGlnaCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCg2LCAwKTsgLyogRGVmYXVsdCBLUzg2OTVfQUNUSVZFIGxvdyAqLworCWdwaW9fZXhwb3J0KDMsIDApOyAvKiBleHBvcnQgQ0FOX1JFU0VUIGFzIG91dHB1dCBvbmx5ICovCisJZ3Bpb19leHBvcnQoNiwgMCk7IC8qIGV4cG9ydCBLUzg2OTVfQUNUSVZFIGFzIG91dHB1dCBvbmx5ICovCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3M1a19pbml0KHZvaWQpCit7CisJYWNzNWtfaW5pdF9ncGlvKCk7CisKKwkvKiBOZXR3b3JrIGRldmljZSAqLworCWtzODY5NV9hZGRfZGV2aWNlX2xhbigpOwkvKiBldGgwID0gTEFOICovCisJa3M4Njk1X2FkZF9kZXZpY2Vfd2FuKCk7CS8qIGV0aFggPSBXQU4gKi8KKworCS8qIE5PUiBkZXZpY2VzICovCisJYWNzNWtfcmVnaXN0ZXJfbm9yKCk7CisKKwkvKiBJMkMgYnVzICovCisJYWNzNWtfaTJjX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChBQ1M1SywgIkJyaXZvIFN5c3RlbXMgTExDIEFDUy01MDAwIE1hc3RlciBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogU2ltdGVjIEVsZWN0cm9uaWNzLiAqLworCS5waHlzX2lvCT0gS1M4Njk1X0lPX1BBLAorCS5pb19wZ19vZmZzdAk9IChLUzg2OTVfSU9fVkEgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEtTODY5NV9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0ga3M4Njk1X21hcF9pbywKKwkuaW5pdF9pcnEJPSBrczg2OTVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGFjczVrX2luaXQsCisJLnRpbWVyCQk9ICZrczg2OTVfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDZkNTg4N2MuLjc2ZTUzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM1LDcgKzM1LDExIEBACiAJCQkJCV9fcGh5c190b192aXJ0KHgpIDogX19idXNfdG9fdmlydCh4KSk7IH0pCiAjZGVmaW5lIF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIHgpCSh7IGlzX2xidXNfZGV2aWNlKGRldikgPyBcCiAJCQkJCShkbWFfYWRkcl90KV9fdmlydF90b19waHlzKHgpIDogKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cyh4KTsgfSkKLSNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgeCkJX19hcmNoX3ZpcnRfdG9fZG1hKGRldiwgcGFnZV9hZGRyZXNzKHgpKQorI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCB4KQlcCisJKHsgZG1hX2FkZHJfdCBfX2RtYSA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsgXAorCSAgIGlmICghaXNfbGJ1c19kZXZpY2UoZGV2KSkgXAorCQlfX2RtYSA9IF9fZG1hIC0gUEhZU19PRkZTRVQgKyBLUzg2OTVfUENJTUVNX1BBOyBcCisJICAgX19kbWE7IH0pCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNWE5YjAzMi4uZmIxZGRhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjcsNyArMjcsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDUyNzJhYmUuLmUwZGQzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xOSw3ICsxOSw3IEBACiAJKih1bnNpZ25lZCBsb25nICopKElPX0JBU0UgKyAweDUwMDA0KSA9IDE7CS8qIGlkbGUgbW9kZSAqLwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAobW9kZSA9PSAncycpIHsKIAkJY3B1X3Jlc2V0KDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZmE0NmJiMWUuLjQ1YTU2ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNyBAQAogCWNwdV9kb19pZGxlICgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAljcHVfcmVzZXQgKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggOGRiMTE0Ny4uYzFkZTM2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBFbmFibGUgc29mdCByZXNldCB0byBhc3NlcnQgUlNUT1VUbi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTU2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnCkBAIC0wLDAgKzEsNDcgQEAKK2lmIEFSQ0hfTU1QCisKK21lbnUgIk1hcnZlbGwgUFhBMTY4LzkxMCBJbXBsbWVudGF0aW9ucyIKKworY29uZmlnIE1BQ0hfQVNQRU5JVEUKKwlib29sICJNYXJ2ZWxsJ3MgUFhBMTY4IEFzcGVuaXRlIERldmVsb3BtZW50IEJvYXJkIgorCXNlbGVjdCBDUFVfUFhBMTY4CisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBMTY4LWJhc2VkCisJICBBc3Blbml0ZSBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIE1BQ0hfWllMT05JVEUyCisJYm9vbCAiTWFydmVsbCdzIFBYQTE2OCBaeWxvbml0ZTIgRGV2ZWxvcG1lbnQgQm9hcmQiCisJc2VsZWN0IENQVV9QWEExNjgKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgTWFydmVsbCBQWEExNjgtYmFzZWQKKwkgIFp5bG9uaXRlMiBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIE1BQ0hfVEFWT1JFVkIKKwlib29sICJNYXJ2ZWxsJ3MgUFhBOTEwIFRhdm9yRVZCIERldmVsb3BtZW50IEJvYXJkIgorCXNlbGVjdCBDUFVfUFhBOTEwCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBOTEwLWJhc2VkCisJICBUYXZvckVWQiBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIE1BQ0hfVFRDX0RLQgorCWJvb2wgIk1hcnZlbGwncyBQWEE5MTAgVGF2b3JFVkIgRGV2ZWxvcG1lbnQgQm9hcmQiCisJc2VsZWN0IENQVV9QWEE5MTAKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgTWFydmVsbCBQWEE5MTAtYmFzZWQKKwkgIFRUQ19ES0IgRGV2ZWxvcG1lbnQgQm9hcmQuCisKK2VuZG1lbnUKKworY29uZmlnIENQVV9QWEExNjgKKwlib29sCisJc2VsZWN0IENQVV9NT0hBV0sKKwloZWxwCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEExNjgKKworY29uZmlnIENQVV9QWEE5MTAKKwlib29sCisJc2VsZWN0IENQVV9NT0hBV0sKKwloZWxwCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEE5MTAKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1tbXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4M2U2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIE1hcnZlbGwncyBQWEExNjggcHJvY2Vzc29ycyBsaW5lCisjCisKK29iai15CQkJCSs9IGNvbW1vbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGlycS5vIHRpbWUubworCisjIFNvQyBzdXBwb3J0CitvYmotJChDT05GSUdfQ1BVX1BYQTE2OCkJKz0gcHhhMTY4Lm8KK29iai0kKENPTkZJR19DUFVfUFhBOTEwKQkrPSBweGE5MTAubworCisjIGJvYXJkIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX0FTUEVOSVRFKQkrPSBhc3Blbml0ZS5vCitvYmotJChDT05GSUdfTUFDSF9aWUxPTklURTIpCSs9IGFzcGVuaXRlLm8KK29iai0kKENPTkZJR19NQUNIX1RBVk9SRVZCKQkrPSB0YXZvcmV2Yi5vCitvYmotJChDT05GSUdfTUFDSF9UVENfREtCKQkrPSB0dGNfZGtiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NGE0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvYXNwZW5pdGUuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2MjQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvYXNwZW5pdGUuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBQWEExNjgtYmFzZWQgQXNwZW5pdGUgYW5kIFp5bG9uaXRlMgorICogIERldmVsb3BtZW50IFBsYXRmb3JtLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMTY4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGExNjguaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb21tb25fcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogRGF0YSBGbGFzaCBJbnRlcmZhY2UgKi8KKwlHUElPMF9ERklfRDE1LAorCUdQSU8xX0RGSV9EMTQsCisJR1BJTzJfREZJX0QxMywKKwlHUElPM19ERklfRDEyLAorCUdQSU80X0RGSV9EMTEsCisJR1BJTzVfREZJX0QxMCwKKwlHUElPNl9ERklfRDksCisJR1BJTzdfREZJX0Q4LAorCUdQSU84X0RGSV9ENywKKwlHUElPOV9ERklfRDYsCisJR1BJTzEwX0RGSV9ENSwKKwlHUElPMTFfREZJX0Q0LAorCUdQSU8xMl9ERklfRDMsCisJR1BJTzEzX0RGSV9EMiwKKwlHUElPMTRfREZJX0QxLAorCUdQSU8xNV9ERklfRDAsCisKKwkvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgKi8KKwlHUElPMThfU01DX25DUzAsCisJR1BJTzM0X1NNQ19uQ1MxLAorCUdQSU8yM19TTUNfbkxVQSwKKwlHUElPMjVfU01DX25MTEEsCisJR1BJTzI4X1NNQ19SRFksCisJR1BJTzI5X1NNQ19TQ0xLLAorCUdQSU8zNV9TTUNfQkUxLAorCUdQSU8zNl9TTUNfQkUyLAorCUdQSU8yN19HUElPLAkvKiBFdGhlcm5ldCBJUlEgKi8KKworCS8qIFVBUlQxICovCisJR1BJTzEwN19VQVJUMV9SWEQsCisJR1BJTzEwOF9VQVJUMV9UWEQsCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU01DX0NTMV9QSFlTX0JBU0UgKyAweDMwMCwKKwkJLmVuZAk9IFNNQ19DUzFfUEhZU19CQVNFICsgMHhmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdwaW9fdG9faXJxKDI3KSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKDI3KSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWM5MXhfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNvbW1vbl9pbml0KHZvaWQpCit7CisJbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb21tb25fcGluX2NvbmZpZykpOworCisJLyogb24tY2hpcCBkZXZpY2VzICovCisJcHhhMTY4X2FkZF91YXJ0KDEpOworCisJLyogb2ZmLWNoaXAgZGV2aWNlcyAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQVNQRU5JVEUsICJQWEExNjgtYmFzZWQgQXNwZW5pdGUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCS5waHlzX2lvICAgICAgICA9IEFQQl9QSFlTX0JBU0UsCisJLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoQVBCX1ZJUlRfQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IHB4YTE2OF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmcHhhMTY4X3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IGNvbW1vbl9pbml0LAorTUFDSElORV9FTkQKKworTUFDSElORV9TVEFSVChaWUxPTklURTIsICJQWEExNjgtYmFzZWQgWnlsb25pdGUyIERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGExNjhfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YTE2OF90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSBjb21tb25faW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDljYzVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgdm9pZCBhcGJjX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IGNsa19yc3Q7CisKKwljbGtfcnN0ID0gQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLIHwgQVBCQ19GTkNMS1NFTChjbGstPmZuY2xrc2VsKTsKKwlfX3Jhd193cml0ZWwoY2xrX3JzdCwgY2xrLT5jbGtfcnN0KTsKK30KKworc3RhdGljIHZvaWQgYXBiY19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX19yYXdfd3JpdGVsKDAsIGNsay0+Y2xrX3JzdCk7Cit9CisKK3N0cnVjdCBjbGtvcHMgYXBiY19jbGtfb3BzID0geworCS5lbmFibGUJCT0gYXBiY19jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gYXBiY19jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOworCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmIChjbGstPmVuYWJsZWQrKyA9PSAwKQorCQljbGstPm9wcy0+ZW5hYmxlKGNsayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQorCQljbGstPm9wcy0+ZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChjbGstPm9wcy0+Z2V0cmF0ZSkKKwkJcmF0ZSA9IGNsay0+b3BzLT5nZXRyYXRlKGNsayk7CisJZWxzZQorCQlyYXRlID0gY2xrLT5yYXRlOworCisJcmV0dXJuIHJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3ZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk2N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApAQCAtMCwwICsxLDcxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKK3N0cnVjdCBjbGtvcHMgeworCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworCXVuc2lnbmVkIGxvbmcJCSgqZ2V0cmF0ZSkoc3RydWN0IGNsayAqKTsKK307CisKK3N0cnVjdCBjbGsgeworCWNvbnN0IHN0cnVjdCBjbGtvcHMJKm9wczsKKworCXZvaWQgX19pb21lbQkqY2xrX3JzdDsJLyogY2xvY2sgcmVzZXQgY29udHJvbCByZWdpc3RlciAqLworCWludAkJZm5jbGtzZWw7CS8qIGZ1bmN0aW9uYWwgY2xvY2sgc2VsZWN0IChBUEJDKSAqLworCXVpbnQzMl90CWVuYWJsZV92YWw7CS8qIHZhbHVlIGZvciBjbG9jayBlbmFibGUgKEFQTVUpICovCisJdW5zaWduZWQgbG9uZwlyYXRlOworCWludAkJZW5hYmxlZDsKK307CisKK2V4dGVybiBzdHJ1Y3QgY2xrb3BzIGFwYmNfY2xrX29wczsKKworI2RlZmluZSBBUEJDX0NMSyhfbmFtZSwgX3JlZywgX2ZuY2xrc2VsLCBfcmF0ZSkJCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUEJDXyMjX3JlZywJXAorCQkuZm5jbGtzZWwJPSBfZm5jbGtzZWwsCQkJXAorCQkucmF0ZQkJPSBfcmF0ZSwJCQlcCisJCS5vcHMJCT0gJmFwYmNfY2xrX29wcywJCVwKK30KKworI2RlZmluZSBBUEJDX0NMS19PUFMoX25hbWUsIF9yZWcsIF9mbmNsa3NlbCwgX3JhdGUsIF9vcHMpCVwKK3N0cnVjdCBjbGsgY2xrXyMjX25hbWUgPSB7CQkJCQlcCisJCS5jbGtfcnN0CT0gKHZvaWQgX19pb21lbSAqKUFQQkNfIyNfcmVnLAlcCisJCS5mbmNsa3NlbAk9IF9mbmNsa3NlbCwJCQlcCisJCS5yYXRlCQk9IF9yYXRlLAkJCVwKKwkJLm9wcwkJPSBfb3BzLAkJCQlcCit9CisKKyNkZWZpbmUgQVBNVV9DTEsoX25hbWUsIF9yZWcsIF9ldmFsLCBfcmF0ZSkJCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUE1VXyMjX3JlZywJXAorCQkuZW5hYmxlX3ZhbAk9IF9ldmFsLAkJCVwKKwkJLnJhdGUJCT0gX3JhdGUsCQkJXAorCQkub3BzCQk9ICZhcG11X2Nsa19vcHMsCQlcCit9CisKKyNkZWZpbmUgQVBNVV9DTEtfT1BTKF9uYW1lLCBfcmVnLCBfZXZhbCwgX3JhdGUsIF9vcHMpCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUE1VXyMjX3JlZywJXAorCQkuZW5hYmxlX3ZhbAk9IF9ldmFsLAkJCVwKKwkJLnJhdGUJCT0gX3JhdGUsCQkJXAorCQkub3BzCQk9IF9vcHMsCQkJCVwKK30KKworI2RlZmluZSBJTklUX0NMS1JFRyhfY2xrLCBfZGV2bmFtZSwgX2Nvbm5hbWUpCQkJXAorCXsJCQkJCQkJXAorCQkuY2xrCQk9IF9jbGssCQkJCVwKKwkJLmRldl9pZAkJPSBfZGV2bmFtZSwJCQlcCisJCS5jb25faWQJCT0gX2Nvbm5hbWUsCQkJXAorCX0KKworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3B4YTE2OF9ncGlvOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3B4YTE2OF90aW1lcnM7CisKK2V4dGVybiB2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlNjZjMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmMKKyAqCisgKiAgQ29kZSBjb21tb24gdG8gUFhBMTY4IHByb2Nlc3NvciBsaW5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc3RhbmRhcmRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVBCX1BIWVNfQkFTRSksCisJCS52aXJ0dWFsCT0gQVBCX1ZJUlRfQkFTRSwKKwkJLmxlbmd0aAkJPSBBUEJfUEhZU19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVhJX1BIWVNfQkFTRSksCisJCS52aXJ0dWFsCT0gQVhJX1ZJUlRfQkFTRSwKKwkJLmxlbmd0aAkJPSBBWElfUEhZU19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2ZiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaApAQCAtMCwwICsxLDEzIEBACisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQorCitzdHJ1Y3Qgc3lzX3RpbWVyOworCitleHRlcm4gdm9pZCB0aW1lcl9pbml0KGludCBpcnEpOworCitleHRlcm4gc3RydWN0IHN5c190aW1lciBweGExNjhfdGltZXI7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBweGE5MTBfdGltZXI7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMTY4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTkxMF9pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgX19pbml0IGljdV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MWQ5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9kZXZpY2VzLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2RldmljZXMuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorCitpbnQgX19pbml0IHB4YV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHB4YV9kZXZpY2VfZGVzYyAqZGVzYywKKwkJCQl2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSByZXNbMiArIE1BWF9SRVNPVVJDRV9ETUFdOworCWludCBpLCByZXQgPSAwLCBucmVzID0gMDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoZGVzYy0+ZHJ2X25hbWUsIGRlc2MtPmlkKTsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CisKKwlpZiAoZGVzYy0+c3RhcnQgIT0gLTF1bCAmJiBkZXNjLT5zaXplID4gMCkgeworCQlyZXNbbnJlc10uc3RhcnQJPSBkZXNjLT5zdGFydDsKKwkJcmVzW25yZXNdLmVuZAk9IGRlc2MtPnN0YXJ0ICsgZGVzYy0+c2l6ZSAtIDE7CisJCXJlc1tucmVzXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCQlucmVzKys7CisJfQorCisJaWYgKGRlc2MtPmlycSAhPSBOT19JUlEpIHsKKwkJcmVzW25yZXNdLnN0YXJ0CT0gZGVzYy0+aXJxOworCQlyZXNbbnJlc10uZW5kCT0gZGVzYy0+aXJxOworCQlyZXNbbnJlc10uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwkJbnJlcysrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVTT1VSQ0VfRE1BOyBpKyssIG5yZXMrKykgeworCQlpZiAoZGVzYy0+ZG1hW2ldID09IDApCisJCQlicmVhazsKKworCQlyZXNbbnJlc10uc3RhcnQJPSBkZXNjLT5kbWFbaV07CisJCXJlc1tucmVzXS5lbmQJPSBkZXNjLT5kbWFbaV07CisJCXJlc1tucmVzXS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgbnJlcyk7CisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkYXRhICYmIHNpemUpIHsKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0KSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2FkZHItbWFwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvYWRkci1tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU0MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2FkZHItbWFwLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCisgKgorICogICBDb21tb24gYWRkcmVzcyBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9BRERSX01BUF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQUREUl9NQVBfSAorCisvKiBBUEIgLSBBcHBsaWNhdGlvbiBTdWJzeXN0ZW0gUGVyaXBoZXJhbCBCdXMKKyAqCisgKiBOT1RFOiB0aGUgRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBvbiB0aGUgQVhJIGZhYnJpYyAjMQorICogc2xhdmUgcG9ydCB0byBBSEIvQVBCIGJyaWRnZSwgZHVlIHRvIGl0cyBjbG9zZSByZWxhdGlvbnNoaXAgdG8gdGhvc2UKKyAqIHBlcmlwaGVyYWxzIG9uIEFQQiwgbGV0J3MgY291bnQgaXQgaW50byB0aGUgQUJQIG1hcHBpbmcgYXJlYS4KKyAqLworI2RlZmluZSBBUEJfUEhZU19CQVNFCQkweGQ0MDAwMDAwCisjZGVmaW5lIEFQQl9WSVJUX0JBU0UJCTB4ZmUwMDAwMDAKKyNkZWZpbmUgQVBCX1BIWVNfU0laRQkJMHgwMDIwMDAwMAorCisjZGVmaW5lIEFYSV9QSFlTX0JBU0UJCTB4ZDQyMDAwMDAKKyNkZWZpbmUgQVhJX1ZJUlRfQkFTRQkJMHhmZTIwMDAwMAorI2RlZmluZSBBWElfUEhZU19TSVpFCQkweDAwMjAwMDAwCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAtIENoaXAgU2VsZWN0IDAgYW5kIDEgKi8KKyNkZWZpbmUgU01DX0NTMF9QSFlTX0JBU0UJMHg4MDAwMDAwMAorI2RlZmluZSBTTUNfQ1MwX1BIWVNfU0laRQkweDEwMDAwMDAwCisjZGVmaW5lIFNNQ19DUzFfUEhZU19CQVNFCTB4OTAwMDAwMDAKKyNkZWZpbmUgU01DX0NTMV9QSFlTX1NJWkUJMHgxMDAwMDAwMAorCisjZW5kaWYgLyogX19BU01fTUFDSF9BRERSX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiMzU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9DTEtERVZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlNzk3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NQVVRZUEVfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NQVVRZUEVfSAorCisjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKworLyoKKyAqICBDUFUgICBTdGVwcGluZyAgIE9MRF9JRCAgICAgICBDUFVfSUQgICAgICBDSElQX0lECisgKgorICogUFhBMTY4ICAgIEEwICAgIDB4NDExNTkyNjMgICAweDU2MTU4NDAwICAgMHgwMEEwQTMzMworICogUFhBOTEwICAgIFkwICAgIDB4NDExNTkyNjIgICAweDU2MTU4MDAwICAgMHgwMEYwQzkxMAorICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTE2OAorIyAgZGVmaW5lIF9fY3B1X2lzX3B4YTE2OChpZCkJXAorCSh7IHVuc2lnbmVkIGludCBfaWQgPSAoKGlkKSA+PiA4KSAmIDB4ZmY7IF9pZCA9PSAweDg0OyB9KQorI2Vsc2UKKyMgIGRlZmluZSBfX2NwdV9pc19weGExNjgoaWQpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTkxMAorIyAgZGVmaW5lIF9fY3B1X2lzX3B4YTkxMChpZCkJXAorCSh7IHVuc2lnbmVkIGludCBfaWQgPSAoKGlkKSA+PiA4KSAmIDB4ZmY7IF9pZCA9PSAweDgwOyB9KQorI2Vsc2UKKyMgIGRlZmluZSBfX2NwdV9pc19weGE5MTAoaWQpCSgwKQorI2VuZGlmCisKKyNkZWZpbmUgY3B1X2lzX3B4YTE2OCgpCQkoeyBfX2NwdV9pc19weGExNjgocmVhZF9jcHVpZF9pZCgpKTsgfSkKKyNkZWZpbmUgY3B1X2lzX3B4YTkxMCgpCQkoeyBfX2NwdV9pc19weGE5MTAocmVhZF9jcHVpZF9pZCgpKTsgfSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQ1BVVFlQRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTBmODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDIzIEBACisvKiBhcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3BpZWQgZnJvbSBhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZGVidWcuUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworCQkubWFjcm8JYWRkcnVhcnQscngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KKwkJbGRyZXEJXHJ4LCA9QVBCX1BIWVNfQkFTRQkJQCBwaHlzaWNhbAorCQlsZHJuZQlccngsID1BUEJfVklSVF9CQVNFCQlAIHZpcnR1YWwKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAxNzAwMAorCQkuZW5kbQorCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDU4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaApAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNQVhfUkVTT1VSQ0VfRE1BCTIKKworLyogc3RydWN0dXJlIGZvciBkZXNjcmliaW5nIHRoZSBvbi1jaGlwIGRldmljZXMgKi8KK3N0cnVjdCBweGFfZGV2aWNlX2Rlc2MgeworCWNvbnN0IGNoYXIJKmRldl9uYW1lOworCWNvbnN0IGNoYXIJKmRydl9uYW1lOworCWludAkJaWQ7CisJaW50CQlpcnE7CisJdW5zaWduZWQgbG9uZwlzdGFydDsKKwl1bnNpZ25lZCBsb25nCXNpemU7CisJaW50CQlkbWFbTUFYX1JFU09VUkNFX0RNQV07Cit9OworCisjZGVmaW5lIFBYQTE2OF9ERVZJQ0UoX25hbWUsIF9kcnYsIF9pZCwgX2lycSwgX3N0YXJ0LCBfc2l6ZSwgX2RtYS4uLikJXAorc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGExNjhfZGV2aWNlXyMjX25hbWUgX19pbml0ZGF0YSA9IHsJCVwKKwkuZGV2X25hbWUJPSAicHhhMTY4LSIgI19uYW1lLAkJCQlcCisJLmRydl9uYW1lCT0gX2RydiwJCQkJCQlcCisJLmlkCQk9IF9pZCwJCQkJCQlcCisJLmlycQkJPSBJUlFfUFhBMTY4XyMjX2lycSwJCQkJXAorCS5zdGFydAkJPSBfc3RhcnQsCQkJCQlcCisJLnNpemUJCT0gX3NpemUsCQkJCQlcCisJLmRtYQkJPSB7IF9kbWEgfSwJCQkJCVwKK307CisKKyNkZWZpbmUgUFhBOTEwX0RFVklDRShfbmFtZSwgX2RydiwgX2lkLCBfaXJxLCBfc3RhcnQsIF9zaXplLCBfZG1hLi4uKQlcCitzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHB4YTkxMF9kZXZpY2VfIyNfbmFtZSBfX2luaXRkYXRhID0gewkJXAorCS5kZXZfbmFtZQk9ICJweGE5MTAtIiAjX25hbWUsCQkJCVwKKwkuZHJ2X25hbWUJPSBfZHJ2LAkJCQkJCVwKKwkuaWQJCT0gX2lkLAkJCQkJCVwKKwkuaXJxCQk9IElSUV9QWEE5MTBfIyNfaXJxLAkJCQlcCisJLnN0YXJ0CQk9IF9zdGFydCwJCQkJCVwKKwkuc2l6ZQkJPSBfc2l6ZSwJCQkJCVwKKwkuZG1hCQk9IHsgX2RtYSB9LAkJCQkJXAorfTsKK2V4dGVybiBpbnQgcHhhX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICosIHZvaWQgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY5MTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZG1hLmgKKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fTUFDSF9ETUFfSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIERNQUNfUkVHU19WSVJUCShBUEJfVklSVF9CQVNFICsgMHgwMDAwMCkKKworI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjZW5kaWYgLyogX19BU01fTUFDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDNjZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9yZWdzLWljdS5oPgorCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybwlhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCWxkcglcYmFzZSwgPUlDVV9BUF9JUlFfU0VMX0lOVF9OVU0KKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWxkcglcdG1wLCBbXGJhc2UsICMwXQorCWFuZAlcaXJxbnIsIFx0bXAsICMweDNmCisJdHN0CVx0bXAsICMoMSA8PCA2KQorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjI2ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX01BQ0hfR1BJT19ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZGVmaW5lIEdQSU9fUkVHU19WSVJUCShBUEJfVklSVF9CQVNFICsgMHgxOTAwMCkKKworI2RlZmluZSBCQU5LX09GRihuKQkoKChuKSA8IDMpID8gKG4pIDw8IDIgOiAweDEwMCArICgoKG4pIC0gMykgPDwgMikpCisjZGVmaW5lIEdQSU9fUkVHKHgpCSgqKCh2b2xhdGlsZSB1MzIgKikoR1BJT19SRUdTX1ZJUlQgKyAoeCkpKSkKKworI2RlZmluZSBOUl9CVUlMVElOX0dQSU8JKDEyOCkKKworI2RlZmluZSBncGlvX3RvX2JhbmsoZ3BpbykJKChncGlvKSA+PiA1KQorI2RlZmluZSBncGlvX3RvX2lycShncGlvKQkoSVJRX0dQSU9fU1RBUlQgKyAoZ3BpbykpCisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gSVJRX0dQSU9fU1RBUlQpCisKKworI2RlZmluZSBfX2dwaW9faXNfaW52ZXJ0ZWQoZ3BpbykJKDApCisjZGVmaW5lIF9fZ3Bpb19pc19vY2N1cGllZChncGlvKQkoMCkKKworLyogTk9URTogdGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIGhlcmUgdG8gbWFrZSBvcHRpbWl6YXRpb24gb2YKKyAqIGdwaW9fe2dldCxzZXR9X3ZhbHVlKCkgdG8gd29yayB3aGVuICdncGlvJyBpcyBhIGNvbnN0YW50LgorICogVXNhZ2Ugb2YgdGhlc2UgbWFjcm9zIG90aGVyd2lzZSBpcyBubyBsb25nZXIgcmVjb21tZW5kZWQsCisgKiB1c2UgZ2VuZXJpYyBHUElPIEFQSSB3aGVuZXZlciBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBHUElPX2JpdChncGlvKQkoMSA8PCAoKGdwaW8pICYgMHgxZikpCisKKyNkZWZpbmUgR1BMUih4KQkJR1BJT19SRUcoQkFOS19PRkYoZ3Bpb190b19iYW5rKHgpKSArIDB4MDApCisjZGVmaW5lIEdQRFIoeCkJCUdQSU9fUkVHKEJBTktfT0ZGKGdwaW9fdG9fYmFuayh4KSkgKyAweDBjKQorI2RlZmluZSBHUFNSKHgpCQlHUElPX1JFRyhCQU5LX09GRihncGlvX3RvX2JhbmsoeCkpICsgMHgxOCkKKyNkZWZpbmUgR1BDUih4KQkJR1BJT19SRUcoQkFOS19PRkYoZ3Bpb190b19iYW5rKHgpKSArIDB4MjQpCisKKyNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTI2NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9NQUNIX0hBUkRXQVJFX0gKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2FkZjNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9NQUNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKy8qCisgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHJlYWwgSVNBIG5vciBQQ0kgYnVzZXMsIGJ1dCB0aGVyZSBpcyBzbyBtYW55CisgKiBkcml2ZXJzIG91dCB0aGVyZSB0aGF0IG1pZ2h0IGp1c3Qgd29yayBpZiB3ZSBmYWtlIHRoZW0uLi4KKyAqLworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzZTQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JUlFTX0gKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzIGZvciBQWEExNjgKKyAqLworI2RlZmluZSBJUlFfUFhBMTY4X05PTkUJCQkoLTEpCisjZGVmaW5lIElSUV9QWEExNjhfU1NQMwkJCTAKKyNkZWZpbmUgSVJRX1BYQTE2OF9TU1AyCQkJMQorI2RlZmluZSBJUlFfUFhBMTY4X1NTUDEJCQkyCisjZGVmaW5lIElSUV9QWEExNjhfU1NQMAkJCTMKKyNkZWZpbmUgSVJRX1BYQTE2OF9QTUlDX0lOVAkJNAorI2RlZmluZSBJUlFfUFhBMTY4X1JUQ19JTlQJCTUKKyNkZWZpbmUgSVJRX1BYQTE2OF9SVENfQUxBUk0JCTYKKyNkZWZpbmUgSVJRX1BYQTE2OF9UV1NJMAkJNworI2RlZmluZSBJUlFfUFhBMTY4X0dQVQkJCTgKKyNkZWZpbmUgSVJRX1BYQTE2OF9LRVlQQUQJCTkKKyNkZWZpbmUgSVJRX1BYQTE2OF9PTkVXSVJFCQkxMgorI2RlZmluZSBJUlFfUFhBMTY4X1RJTUVSMQkJMTMKKyNkZWZpbmUgSVJRX1BYQTE2OF9USU1FUjIJCTE0CisjZGVmaW5lIElSUV9QWEExNjhfVElNRVIzCQkxNQorI2RlZmluZSBJUlFfUFhBMTY4X0NNVQkJCTE2CisjZGVmaW5lIElSUV9QWEExNjhfU1NQNAkJCTE3CisjZGVmaW5lIElSUV9QWEExNjhfTVNQX1dBS0VVUAkJMTkKKyNkZWZpbmUgSVJRX1BYQTE2OF9DRl9XQUtFVVAJCTIwCisjZGVmaW5lIElSUV9QWEExNjhfWERfV0FLRVVQCQkyMQorI2RlZmluZSBJUlFfUFhBMTY4X01GVQkJCTIyCisjZGVmaW5lIElSUV9QWEExNjhfTVNQCQkJMjMKKyNkZWZpbmUgSVJRX1BYQTE2OF9DRgkJCTI0CisjZGVmaW5lIElSUV9QWEExNjhfWEQJCQkyNQorI2RlZmluZSBJUlFfUFhBMTY4X0REUl9JTlQJCTI2CisjZGVmaW5lIElSUV9QWEExNjhfVUFSVDEJCTI3CisjZGVmaW5lIElSUV9QWEExNjhfVUFSVDIJCTI4CisjZGVmaW5lIElSUV9QWEExNjhfV0RUCQkJMzUKKyNkZWZpbmUgSVJRX1BYQTE2OF9GUlFfQ0hBTkdFCQkzOAorI2RlZmluZSBJUlFfUFhBMTY4X1NESDEJCQkzOQorI2RlZmluZSBJUlFfUFhBMTY4X1NESDIJCQk0MAorI2RlZmluZSBJUlFfUFhBMTY4X0xDRAkJCTQxCisjZGVmaW5lIElSUV9QWEExNjhfQ0kJCQk0MgorI2RlZmluZSBJUlFfUFhBMTY4X1VTQjEJCQk0NAorI2RlZmluZSBJUlFfUFhBMTY4X05BTkQJCQk0NQorI2RlZmluZSBJUlFfUFhBMTY4X0hJRklfRE1BCQk0NgorI2RlZmluZSBJUlFfUFhBMTY4X0RNQV9JTlQwCQk0NworI2RlZmluZSBJUlFfUFhBMTY4X0RNQV9JTlQxCQk0OAorI2RlZmluZSBJUlFfUFhBMTY4X0dQSU9YCQk0OQorI2RlZmluZSBJUlFfUFhBMTY4X1VTQjIJCQk1MQorI2RlZmluZSBJUlFfUFhBMTY4X0FDOTcJCQk1NworI2RlZmluZSBJUlFfUFhBMTY4X1RXU0kxCQk1OAorI2RlZmluZSBJUlFfUFhBMTY4X1BNVQkJCTYwCisjZGVmaW5lIElSUV9QWEExNjhfU01fSU5UCQk2MworCisvKgorICogSW50ZXJydXB0IG51bWJlcnMgZm9yIFBYQTkxMAorICovCisjZGVmaW5lIElSUV9QWEE5MTBfQUlSUQkJCTAKKyNkZWZpbmUgSVJRX1BYQTkxMF9TU1AzCQkJMQorI2RlZmluZSBJUlFfUFhBOTEwX1NTUDIJCQkyCisjZGVmaW5lIElSUV9QWEE5MTBfU1NQMQkJCTMKKyNkZWZpbmUgSVJRX1BYQTkxMF9QTUlDX0lOVAkJNAorI2RlZmluZSBJUlFfUFhBOTEwX1JUQ19JTlQJCTUKKyNkZWZpbmUgSVJRX1BYQTkxMF9SVENfQUxBUk0JCTYKKyNkZWZpbmUgSVJRX1BYQTkxMF9UV1NJMAkJNworI2RlZmluZSBJUlFfUFhBOTEwX0dQVQkJCTgKKyNkZWZpbmUgSVJRX1BYQTkxMF9LRVlQQUQJCTkKKyNkZWZpbmUgSVJRX1BYQTkxMF9ST1RBUlkJCTEwCisjZGVmaW5lIElSUV9QWEE5MTBfVFJBQ0tCQUxMCQkxMQorI2RlZmluZSBJUlFfUFhBOTEwX09ORVdJUkUJCTEyCisjZGVmaW5lIElSUV9QWEE5MTBfQVAxX1RJTUVSMQkJMTMKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUDFfVElNRVIyCQkxNAorI2RlZmluZSBJUlFfUFhBOTEwX0FQMV9USU1FUjMJCTE1CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0FQMAkJMTYKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQVAxCQkxNworI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19BUDIJCTE4CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0FQMwkJMTkKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQVA0CQkyMAorI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19DUDAJCTIxCisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0NQMQkJMjIKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQ1AyCQkyMworI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19DUDMJCTI0CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0NQNAkJMjUKKyNkZWZpbmUgSVJRX1BYQTkxMF9MMl9ERFIJCTI2CisjZGVmaW5lIElSUV9QWEE5MTBfVUFSVDIJCTI3CisjZGVmaW5lIElSUV9QWEE5MTBfVUFSVDMJCTI4CisjZGVmaW5lIElSUV9QWEE5MTBfQVAyX1RJTUVSMQkJMjkKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUDJfVElNRVIyCQkzMAorI2RlZmluZSBJUlFfUFhBOTEwX0NQMl9USU1FUjEJCTMxCisjZGVmaW5lIElSUV9QWEE5MTBfQ1AyX1RJTUVSMgkJMzIKKyNkZWZpbmUgSVJRX1BYQTkxMF9DUDJfVElNRVIzCQkzMworI2RlZmluZSBJUlFfUFhBOTEwX0dTU1AJCQkzNAorI2RlZmluZSBJUlFfUFhBOTEwX0NQMl9XRFQJCTM1CisjZGVmaW5lIElSUV9QWEE5MTBfTUFJTl9QTVUJCTM2CisjZGVmaW5lIElSUV9QWEE5MTBfQ1BfRlJFUV9DSEcJCTM3CisjZGVmaW5lIElSUV9QWEE5MTBfQVBfRlJFUV9DSEcJCTM4CisjZGVmaW5lIElSUV9QWEE5MTBfTU1DCQkJMzkKKyNkZWZpbmUgSVJRX1BYQTkxMF9BRVUJCQk0MAorI2RlZmluZSBJUlFfUFhBOTEwX0xDRAkJCTQxCisjZGVmaW5lIElSUV9QWEE5MTBfQ0NJQwkJCTQyCisjZGVmaW5lIElSUV9QWEE5MTBfSVJFCQkJNDMKKyNkZWZpbmUgSVJRX1BYQTkxMF9VU0IxCQkJNDQKKyNkZWZpbmUgSVJRX1BYQTkxMF9OQU5ECQkJNDUKKyNkZWZpbmUgSVJRX1BYQTkxMF9ISUZJX0RNQQkJNDYKKyNkZWZpbmUgSVJRX1BYQTkxMF9ETUFfSU5UMAkJNDcKKyNkZWZpbmUgSVJRX1BYQTkxMF9ETUFfSU5UMQkJNDgKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUF9HUElPCQk0OQorI2RlZmluZSBJUlFfUFhBOTEwX0FQMl9USU1FUjMJCTUwCisjZGVmaW5lIElSUV9QWEE5MTBfVVNCMgkJCTUxCisjZGVmaW5lIElSUV9QWEE5MTBfVFdTSTEJCTU0CisjZGVmaW5lIElSUV9QWEE5MTBfQ1BfR1BJTwkJNTUKKyNkZWZpbmUgSVJRX1BYQTkxMF9VQVJUMQkJNTkJLyogU2xvdyBVQVJUICovCisjZGVmaW5lIElSUV9QWEE5MTBfQVBfUE1VCQk2MAorI2RlZmluZSBJUlFfUFhBOTEwX1NNX0lOVAkJNjMJLyogZnJvbSBQaW5NdXggKi8KKworI2RlZmluZSBJUlFfR1BJT19TVEFSVAkJCTY0CisjZGVmaW5lIElSUV9HUElPX05VTQkJCTEyOAorI2RlZmluZSBJUlFfR1BJTyh4KQkJCShJUlFfR1BJT19TVEFSVCArICh4KSkKKworI2RlZmluZSBOUl9JUlFTCQkoSVJRX0dQSU9fU1RBUlQgKyBJUlFfR1BJT19OVU0pCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjIxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfTUVNT1JZX0gKKworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiZGI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NRlBfUFhBMTY4X0gKKyNkZWZpbmUgX19BU01fTUFDSF9NRlBfUFhBMTY4X0gKKworI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgR1BJTzBfR1BJTwkJTUZQX0NGRyhHUElPMCwgQUY1KQorI2RlZmluZSBHUElPMV9HUElPCQlNRlBfQ0ZHKEdQSU8xLCBBRjUpCisjZGVmaW5lIEdQSU8yX0dQSU8JCU1GUF9DRkcoR1BJTzIsIEFGNSkKKyNkZWZpbmUgR1BJTzNfR1BJTwkJTUZQX0NGRyhHUElPMywgQUY1KQorI2RlZmluZSBHUElPNF9HUElPCQlNRlBfQ0ZHKEdQSU80LCBBRjUpCisjZGVmaW5lIEdQSU81X0dQSU8JCU1GUF9DRkcoR1BJTzUsIEFGNSkKKyNkZWZpbmUgR1BJTzZfR1BJTwkJTUZQX0NGRyhHUElPNiwgQUY1KQorI2RlZmluZSBHUElPN19HUElPCQlNRlBfQ0ZHKEdQSU83LCBBRjUpCisjZGVmaW5lIEdQSU84X0dQSU8JCU1GUF9DRkcoR1BJTzgsIEFGNSkKKyNkZWZpbmUgR1BJTzlfR1BJTwkJTUZQX0NGRyhHUElPOSwgQUY1KQorI2RlZmluZSBHUElPMTBfR1BJTwkJTUZQX0NGRyhHUElPMTAsIEFGNSkKKyNkZWZpbmUgR1BJTzExX0dQSU8JCU1GUF9DRkcoR1BJTzExLCBBRjUpCisjZGVmaW5lIEdQSU8xMl9HUElPCQlNRlBfQ0ZHKEdQSU8xMiwgQUY1KQorI2RlZmluZSBHUElPMTNfR1BJTwkJTUZQX0NGRyhHUElPMTMsIEFGNSkKKyNkZWZpbmUgR1BJTzE0X0dQSU8JCU1GUF9DRkcoR1BJTzE0LCBBRjUpCisjZGVmaW5lIEdQSU8xNV9HUElPCQlNRlBfQ0ZHKEdQSU8xNSwgQUY1KQorI2RlZmluZSBHUElPMTZfR1BJTwkJTUZQX0NGRyhHUElPMTYsIEFGMCkKKyNkZWZpbmUgR1BJTzE3X0dQSU8JCU1GUF9DRkcoR1BJTzE3LCBBRjUpCisjZGVmaW5lIEdQSU8xOF9HUElPCQlNRlBfQ0ZHKEdQSU8xOCwgQUYwKQorI2RlZmluZSBHUElPMTlfR1BJTwkJTUZQX0NGRyhHUElPMTksIEFGNSkKKyNkZWZpbmUgR1BJTzIwX0dQSU8JCU1GUF9DRkcoR1BJTzIwLCBBRjApCisjZGVmaW5lIEdQSU8yMV9HUElPCQlNRlBfQ0ZHKEdQSU8yMSwgQUY1KQorI2RlZmluZSBHUElPMjJfR1BJTwkJTUZQX0NGRyhHUElPMjIsIEFGNSkKKyNkZWZpbmUgR1BJTzIzX0dQSU8JCU1GUF9DRkcoR1BJTzIzLCBBRjUpCisjZGVmaW5lIEdQSU8yNF9HUElPCQlNRlBfQ0ZHKEdQSU8yNCwgQUY1KQorI2RlZmluZSBHUElPMjVfR1BJTwkJTUZQX0NGRyhHUElPMjUsIEFGNSkKKyNkZWZpbmUgR1BJTzI2X0dQSU8JCU1GUF9DRkcoR1BJTzI2LCBBRjApCisjZGVmaW5lIEdQSU8yN19HUElPCQlNRlBfQ0ZHKEdQSU8yNywgQUY1KQorI2RlZmluZSBHUElPMjhfR1BJTwkJTUZQX0NGRyhHUElPMjgsIEFGNSkKKyNkZWZpbmUgR1BJTzI5X0dQSU8JCU1GUF9DRkcoR1BJTzI5LCBBRjUpCisjZGVmaW5lIEdQSU8zMF9HUElPCQlNRlBfQ0ZHKEdQSU8zMCwgQUY1KQorI2RlZmluZSBHUElPMzFfR1BJTwkJTUZQX0NGRyhHUElPMzEsIEFGNSkKKyNkZWZpbmUgR1BJTzMyX0dQSU8JCU1GUF9DRkcoR1BJTzMyLCBBRjUpCisjZGVmaW5lIEdQSU8zM19HUElPCQlNRlBfQ0ZHKEdQSU8zMywgQUY1KQorI2RlZmluZSBHUElPMzRfR1BJTwkJTUZQX0NGRyhHUElPMzQsIEFGMCkKKyNkZWZpbmUgR1BJTzM1X0dQSU8JCU1GUF9DRkcoR1BJTzM1LCBBRjApCisjZGVmaW5lIEdQSU8zNl9HUElPCQlNRlBfQ0ZHKEdQSU8zNiwgQUYwKQorI2RlZmluZSBHUElPMzdfR1BJTwkJTUZQX0NGRyhHUElPMzcsIEFGMCkKKyNkZWZpbmUgR1BJTzM4X0dQSU8JCU1GUF9DRkcoR1BJTzM4LCBBRjApCisjZGVmaW5lIEdQSU8zOV9HUElPCQlNRlBfQ0ZHKEdQSU8zOSwgQUYwKQorI2RlZmluZSBHUElPNDBfR1BJTwkJTUZQX0NGRyhHUElPNDAsIEFGMCkKKyNkZWZpbmUgR1BJTzQxX0dQSU8JCU1GUF9DRkcoR1BJTzQxLCBBRjApCisjZGVmaW5lIEdQSU80Ml9HUElPCQlNRlBfQ0ZHKEdQSU80MiwgQUYwKQorI2RlZmluZSBHUElPNDNfR1BJTwkJTUZQX0NGRyhHUElPNDMsIEFGMCkKKyNkZWZpbmUgR1BJTzQ0X0dQSU8JCU1GUF9DRkcoR1BJTzQ0LCBBRjApCisjZGVmaW5lIEdQSU80NV9HUElPCQlNRlBfQ0ZHKEdQSU80NSwgQUYwKQorI2RlZmluZSBHUElPNDZfR1BJTwkJTUZQX0NGRyhHUElPNDYsIEFGMCkKKyNkZWZpbmUgR1BJTzQ3X0dQSU8JCU1GUF9DRkcoR1BJTzQ3LCBBRjApCisjZGVmaW5lIEdQSU80OF9HUElPCQlNRlBfQ0ZHKEdQSU80OCwgQUYwKQorI2RlZmluZSBHUElPNDlfR1BJTwkJTUZQX0NGRyhHUElPNDksIEFGMCkKKyNkZWZpbmUgR1BJTzUwX0dQSU8JCU1GUF9DRkcoR1BJTzUwLCBBRjApCisjZGVmaW5lIEdQSU81MV9HUElPCQlNRlBfQ0ZHKEdQSU81MSwgQUYwKQorI2RlZmluZSBHUElPNTJfR1BJTwkJTUZQX0NGRyhHUElPNTIsIEFGMCkKKyNkZWZpbmUgR1BJTzUzX0dQSU8JCU1GUF9DRkcoR1BJTzUzLCBBRjApCisjZGVmaW5lIEdQSU81NF9HUElPCQlNRlBfQ0ZHKEdQSU81NCwgQUYwKQorI2RlZmluZSBHUElPNTVfR1BJTwkJTUZQX0NGRyhHUElPNTUsIEFGMCkKKyNkZWZpbmUgR1BJTzU2X0dQSU8JCU1GUF9DRkcoR1BJTzU2LCBBRjApCisjZGVmaW5lIEdQSU81N19HUElPCQlNRlBfQ0ZHKEdQSU81NywgQUYwKQorI2RlZmluZSBHUElPNThfR1BJTwkJTUZQX0NGRyhHUElPNTgsIEFGMCkKKyNkZWZpbmUgR1BJTzU5X0dQSU8JCU1GUF9DRkcoR1BJTzU5LCBBRjApCisjZGVmaW5lIEdQSU82MF9HUElPCQlNRlBfQ0ZHKEdQSU82MCwgQUYwKQorI2RlZmluZSBHUElPNjFfR1BJTwkJTUZQX0NGRyhHUElPNjEsIEFGMCkKKyNkZWZpbmUgR1BJTzYyX0dQSU8JCU1GUF9DRkcoR1BJTzYyLCBBRjApCisjZGVmaW5lIEdQSU82M19HUElPCQlNRlBfQ0ZHKEdQSU82MywgQUYwKQorI2RlZmluZSBHUElPNjRfR1BJTwkJTUZQX0NGRyhHUElPNjQsIEFGMCkKKyNkZWZpbmUgR1BJTzY1X0dQSU8JCU1GUF9DRkcoR1BJTzY1LCBBRjApCisjZGVmaW5lIEdQSU82Nl9HUElPCQlNRlBfQ0ZHKEdQSU82NiwgQUYwKQorI2RlZmluZSBHUElPNjdfR1BJTwkJTUZQX0NGRyhHUElPNjcsIEFGMCkKKyNkZWZpbmUgR1BJTzY4X0dQSU8JCU1GUF9DRkcoR1BJTzY4LCBBRjApCisjZGVmaW5lIEdQSU82OV9HUElPCQlNRlBfQ0ZHKEdQSU82OSwgQUYwKQorI2RlZmluZSBHUElPNzBfR1BJTwkJTUZQX0NGRyhHUElPNzAsIEFGMCkKKyNkZWZpbmUgR1BJTzcxX0dQSU8JCU1GUF9DRkcoR1BJTzcxLCBBRjApCisjZGVmaW5lIEdQSU83Ml9HUElPCQlNRlBfQ0ZHKEdQSU83MiwgQUYwKQorI2RlZmluZSBHUElPNzNfR1BJTwkJTUZQX0NGRyhHUElPNzMsIEFGMCkKKyNkZWZpbmUgR1BJTzc0X0dQSU8JCU1GUF9DRkcoR1BJTzc0LCBBRjApCisjZGVmaW5lIEdQSU83NV9HUElPCQlNRlBfQ0ZHKEdQSU83NSwgQUYwKQorI2RlZmluZSBHUElPNzZfR1BJTwkJTUZQX0NGRyhHUElPNzYsIEFGMCkKKyNkZWZpbmUgR1BJTzc3X0dQSU8JCU1GUF9DRkcoR1BJTzc3LCBBRjApCisjZGVmaW5lIEdQSU83OF9HUElPCQlNRlBfQ0ZHKEdQSU83OCwgQUYwKQorI2RlZmluZSBHUElPNzlfR1BJTwkJTUZQX0NGRyhHUElPNzksIEFGMCkKKyNkZWZpbmUgR1BJTzgwX0dQSU8JCU1GUF9DRkcoR1BJTzgwLCBBRjApCisjZGVmaW5lIEdQSU84MV9HUElPCQlNRlBfQ0ZHKEdQSU84MSwgQUYwKQorI2RlZmluZSBHUElPODJfR1BJTwkJTUZQX0NGRyhHUElPODIsIEFGMCkKKyNkZWZpbmUgR1BJTzgzX0dQSU8JCU1GUF9DRkcoR1BJTzgzLCBBRjApCisjZGVmaW5lIEdQSU84NF9HUElPCQlNRlBfQ0ZHKEdQSU84NCwgQUYwKQorI2RlZmluZSBHUElPODVfR1BJTwkJTUZQX0NGRyhHUElPODUsIEFGMCkKKyNkZWZpbmUgR1BJTzg2X0dQSU8JCU1GUF9DRkcoR1BJTzg2LCBBRjApCisjZGVmaW5lIEdQSU84N19HUElPCQlNRlBfQ0ZHKEdQSU84NywgQUYwKQorI2RlZmluZSBHUElPODhfR1BJTwkJTUZQX0NGRyhHUElPODgsIEFGMCkKKyNkZWZpbmUgR1BJTzg5X0dQSU8JCU1GUF9DRkcoR1BJTzg5LCBBRjApCisjZGVmaW5lIEdQSU85MF9HUElPCQlNRlBfQ0ZHKEdQSU85MCwgQUYwKQorI2RlZmluZSBHUElPOTFfR1BJTwkJTUZQX0NGRyhHUElPOTEsIEFGMCkKKyNkZWZpbmUgR1BJTzkyX0dQSU8JCU1GUF9DRkcoR1BJTzkyLCBBRjApCisjZGVmaW5lIEdQSU85M19HUElPCQlNRlBfQ0ZHKEdQSU85MywgQUYwKQorI2RlZmluZSBHUElPOTRfR1BJTwkJTUZQX0NGRyhHUElPOTQsIEFGMCkKKyNkZWZpbmUgR1BJTzk1X0dQSU8JCU1GUF9DRkcoR1BJTzk1LCBBRjApCisjZGVmaW5lIEdQSU85Nl9HUElPCQlNRlBfQ0ZHKEdQSU85NiwgQUYwKQorI2RlZmluZSBHUElPOTdfR1BJTwkJTUZQX0NGRyhHUElPOTcsIEFGMCkKKyNkZWZpbmUgR1BJTzk4X0dQSU8JCU1GUF9DRkcoR1BJTzk4LCBBRjApCisjZGVmaW5lIEdQSU85OV9HUElPCQlNRlBfQ0ZHKEdQSU85OSwgQUYwKQorI2RlZmluZSBHUElPMTAwX0dQSU8JCU1GUF9DRkcoR1BJTzEwMCwgQUYwKQorI2RlZmluZSBHUElPMTAxX0dQSU8JCU1GUF9DRkcoR1BJTzEwMSwgQUYwKQorI2RlZmluZSBHUElPMTAyX0dQSU8JCU1GUF9DRkcoR1BJTzEwMiwgQUYwKQorI2RlZmluZSBHUElPMTAzX0dQSU8JCU1GUF9DRkcoR1BJTzEwMywgQUYwKQorI2RlZmluZSBHUElPMTA0X0dQSU8JCU1GUF9DRkcoR1BJTzEwNCwgQUYwKQorI2RlZmluZSBHUElPMTA1X0dQSU8JCU1GUF9DRkcoR1BJTzEwNSwgQUYwKQorI2RlZmluZSBHUElPMTA2X0dQSU8JCU1GUF9DRkcoR1BJTzEwNiwgQUYwKQorI2RlZmluZSBHUElPMTA3X0dQSU8JCU1GUF9DRkcoR1BJTzEwNywgQUYwKQorI2RlZmluZSBHUElPMTA4X0dQSU8JCU1GUF9DRkcoR1BJTzEwOCwgQUYwKQorI2RlZmluZSBHUElPMTA5X0dQSU8JCU1GUF9DRkcoR1BJTzEwOSwgQUYwKQorI2RlZmluZSBHUElPMTEwX0dQSU8JCU1GUF9DRkcoR1BJTzExMCwgQUYwKQorI2RlZmluZSBHUElPMTExX0dQSU8JCU1GUF9DRkcoR1BJTzExMSwgQUYwKQorI2RlZmluZSBHUElPMTEyX0dQSU8JCU1GUF9DRkcoR1BJTzExMiwgQUYwKQorI2RlZmluZSBHUElPMTEzX0dQSU8JCU1GUF9DRkcoR1BJTzExMywgQUYwKQorI2RlZmluZSBHUElPMTE0X0dQSU8JCU1GUF9DRkcoR1BJTzExNCwgQUYwKQorI2RlZmluZSBHUElPMTE1X0dQSU8JCU1GUF9DRkcoR1BJTzExNSwgQUYwKQorI2RlZmluZSBHUElPMTE2X0dQSU8JCU1GUF9DRkcoR1BJTzExNiwgQUYwKQorI2RlZmluZSBHUElPMTE3X0dQSU8JCU1GUF9DRkcoR1BJTzExNywgQUYwKQorI2RlZmluZSBHUElPMTE4X0dQSU8JCU1GUF9DRkcoR1BJTzExOCwgQUYwKQorI2RlZmluZSBHUElPMTE5X0dQSU8JCU1GUF9DRkcoR1BJTzExOSwgQUYwKQorI2RlZmluZSBHUElPMTIwX0dQSU8JCU1GUF9DRkcoR1BJTzEyMCwgQUYwKQorI2RlZmluZSBHUElPMTIxX0dQSU8JCU1GUF9DRkcoR1BJTzEyMSwgQUYwKQorI2RlZmluZSBHUElPMTIyX0dQSU8JCU1GUF9DRkcoR1BJTzEyMiwgQUYwKQorCisvKiBERkkgKi8KKyNkZWZpbmUgR1BJTzBfREZJX0QxNQkJTUZQX0NGRyhHUElPMCwgQUYwKQorI2RlZmluZSBHUElPMV9ERklfRDE0CQlNRlBfQ0ZHKEdQSU8xLCBBRjApCisjZGVmaW5lIEdQSU8yX0RGSV9EMTMJCU1GUF9DRkcoR1BJTzIsIEFGMCkKKyNkZWZpbmUgR1BJTzNfREZJX0QxMgkJTUZQX0NGRyhHUElPMywgQUYwKQorI2RlZmluZSBHUElPNF9ERklfRDExCQlNRlBfQ0ZHKEdQSU80LCBBRjApCisjZGVmaW5lIEdQSU81X0RGSV9EMTAJCU1GUF9DRkcoR1BJTzUsIEFGMCkKKyNkZWZpbmUgR1BJTzZfREZJX0Q5CQlNRlBfQ0ZHKEdQSU82LCBBRjApCisjZGVmaW5lIEdQSU83X0RGSV9EOAkJTUZQX0NGRyhHUElPNywgQUYwKQorI2RlZmluZSBHUElPOF9ERklfRDcJCU1GUF9DRkcoR1BJTzgsIEFGMCkKKyNkZWZpbmUgR1BJTzlfREZJX0Q2CQlNRlBfQ0ZHKEdQSU85LCBBRjApCisjZGVmaW5lIEdQSU8xMF9ERklfRDUJCU1GUF9DRkcoR1BJTzEwLCBBRjApCisjZGVmaW5lIEdQSU8xMV9ERklfRDQJCU1GUF9DRkcoR1BJTzExLCBBRjApCisjZGVmaW5lIEdQSU8xMl9ERklfRDMJCU1GUF9DRkcoR1BJTzEyLCBBRjApCisjZGVmaW5lIEdQSU8xM19ERklfRDIJCU1GUF9DRkcoR1BJTzEzLCBBRjApCisjZGVmaW5lIEdQSU8xNF9ERklfRDEJCU1GUF9DRkcoR1BJTzE0LCBBRjApCisjZGVmaW5lIEdQSU8xNV9ERklfRDAJCU1GUF9DRkcoR1BJTzE1LCBBRjApCisKKyNkZWZpbmUgR1BJTzMwX0RGSV9BRERSMAlNRlBfQ0ZHKEdQSU8zMCwgQUYwKQorI2RlZmluZSBHUElPMzFfREZJX0FERFIxCU1GUF9DRkcoR1BJTzMxLCBBRjApCisjZGVmaW5lIEdQSU8zMl9ERklfQUREUjIJTUZQX0NGRyhHUElPMzIsIEFGMCkKKyNkZWZpbmUgR1BJTzMzX0RGSV9BRERSMwlNRlBfQ0ZHKEdQSU8zMywgQUYwKQorCisvKiBOQU5EICovCisjZGVmaW5lIEdQSU8xNl9ORF9uQ1MwCQlNRlBfQ0ZHKEdQSU8xNiwgQUYxKQorI2RlZmluZSBHUElPMTdfTkRfbldFCQlNRlBfQ0ZHKEdQSU8xNywgQUYwKQorI2RlZmluZSBHUElPMjFfTkRfQUxFCQlNRlBfQ0ZHKEdQSU8yMSwgQUYwKQorI2RlZmluZSBHUElPMjJfTkRfQ0xFCQlNRlBfQ0ZHKEdQSU8yMiwgQUYwKQorI2RlZmluZSBHUElPMjRfTkRfblJFCQlNRlBfQ0ZHKEdQSU8yNCwgQUYwKQorI2RlZmluZSBHUElPMjZfTkRfUm5CMQkJTUZQX0NGRyhHUElPMjYsIEFGMSkKKyNkZWZpbmUgR1BJTzI3X05EX1JuQjIJCU1GUF9DRkcoR1BJTzI3LCBBRjEpCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAqLworI2RlZmluZSBHUElPMThfU01DX25DUzAJCU1GUF9DRkcoR1BJTzE4LCBBRjMpCisjZGVmaW5lIEdQSU8xOF9TTUNfbkNTMQkJTUZQX0NGRyhHUElPMTgsIEFGMikKKyNkZWZpbmUgR1BJTzE2X1NNQ19uQ1MwCQlNRlBfQ0ZHKEdQSU8xNiwgQUYyKQorI2RlZmluZSBHUElPMTZfU01DX25DUzEJCU1GUF9DRkcoR1BJTzE2LCBBRjMpCisjZGVmaW5lIEdQSU8xOV9TTUNfbkNTMAkJTUZQX0NGRyhHUElPMTksIEFGMCkKKyNkZWZpbmUgR1BJTzIwX1NNQ19uQ1MxCQlNRlBfQ0ZHKEdQSU8yMCwgQUYyKQorI2RlZmluZSBHUElPMjNfU01DX25MVUEJCU1GUF9DRkcoR1BJTzIzLCBBRjApCisjZGVmaW5lIEdQSU8yNV9TTUNfbkxMQQkJTUZQX0NGRyhHUElPMjUsIEFGMCkKKyNkZWZpbmUgR1BJTzI3X1NNQ19JUlEJCU1GUF9DRkcoR1BJTzI3LCBBRjApCisjZGVmaW5lIEdQSU8yOF9TTUNfUkRZCQlNRlBfQ0ZHKEdQSU8yOCwgQUYwKQorI2RlZmluZSBHUElPMjlfU01DX1NDTEsJCU1GUF9DRkcoR1BJTzI5LCBBRjApCisjZGVmaW5lIEdQSU8zNF9TTUNfbkNTMQkJTUZQX0NGRyhHUElPMzQsIEFGMikKKyNkZWZpbmUgR1BJTzM1X1NNQ19CRTEJCU1GUF9DRkcoR1BJTzM1LCBBRjIpCisjZGVmaW5lIEdQSU8zNl9TTUNfQkUyCQlNRlBfQ0ZHKEdQSU8zNiwgQUYyKQorCisvKiBDb21wYWN0IEZsYXNoICovCisjZGVmaW5lIEdQSU8xOV9DRl9uQ0UxCQlNRlBfQ0ZHKEdQSU8xOSwgQUYzKQorI2RlZmluZSBHUElPMjBfQ0ZfbkNFMgkJTUZQX0NGRyhHUElPMjAsIEFGMykKKyNkZWZpbmUgR1BJTzIzX0NGX25BTEUJCU1GUF9DRkcoR1BJTzIzLCBBRjMpCisjZGVmaW5lIEdQSU8yNV9DRl9uUkVTRVQJTUZQX0NGRyhHUElPMjUsIEFGMykKKyNkZWZpbmUgR1BJTzI4X0NGX1JEWQkJTUZQX0NGRyhHUElPMjgsIEFGMykKKyNkZWZpbmUgR1BJTzI5X0NGX1NUU0NICQlNRlBfQ0ZHKEdQSU8yOSwgQUYzKQorI2RlZmluZSBHUElPMzBfQ0ZfblJFRwkJTUZQX0NGRyhHUElPMzAsIEFGMykKKyNkZWZpbmUgR1BJTzMxX0NGX25JT0lTMTYJTUZQX0NGRyhHUElPMzEsIEFGMykKKyNkZWZpbmUgR1BJTzMyX0NGX25DRDEJCU1GUF9DRkcoR1BJTzMyLCBBRjMpCisjZGVmaW5lIEdQSU8zM19DRl9uQ0QyCQlNRlBfQ0ZHKEdQSU8zMywgQUYzKQorCisvKiBVQVJUMSAqLworI2RlZmluZSBHUElPMTA3X1VBUlQxX1RYRAlNRlBfQ0ZHX0RSVihHUElPMTA3LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMDdfVUFSVDFfUlhECU1GUF9DRkdfRFJWKEdQSU8xMDcsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzEwOF9VQVJUMV9SWEQJTUZQX0NGR19EUlYoR1BJTzEwOCwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTA4X1VBUlQxX1RYRAlNRlBfQ0ZHX0RSVihHUElPMTA4LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xMDlfVUFSVDFfQ1RTCU1GUF9DRkcoR1BJTzEwOSwgQUYxKQorI2RlZmluZSBHUElPMTA5X1VBUlQxX1JUUwlNRlBfQ0ZHKEdQSU8xMDksIEFGMikKKyNkZWZpbmUgR1BJTzExMF9VQVJUMV9SVFMJTUZQX0NGRyhHUElPMTEwLCBBRjEpCisjZGVmaW5lIEdQSU8xMTBfVUFSVDFfQ1RTCU1GUF9DRkcoR1BJTzExMCwgQUYyKQorI2RlZmluZSBHUElPMTExX1VBUlQxX1JJCU1GUF9DRkcoR1BJTzExMSwgQUYxKQorI2RlZmluZSBHUElPMTExX1VBUlQxX0RTUglNRlBfQ0ZHKEdQSU8xMTEsIEFGMikKKyNkZWZpbmUgR1BJTzExMl9VQVJUMV9EVFIJTUZQX0NGRyhHUElPMTExLCBBRjEpCisjZGVmaW5lIEdQSU8xMTJfVUFSVDFfRENECU1GUF9DRkcoR1BJTzExMiwgQUYyKQorCisvKiBNTUMxICovCisjZGVmaW5lIEdQSU8zN19NTUMxX0RBVDcJTUZQX0NGRyhHUElPMzcsIEFGMSkKKyNkZWZpbmUgR1BJTzM4X01NQzFfREFUNglNRlBfQ0ZHKEdQSU8zOCwgQUYxKQorI2RlZmluZSBHUElPNTRfTU1DMV9EQVQ1CU1GUF9DRkcoR1BJTzU0LCBBRjEpCisjZGVmaW5lIEdQSU80OF9NTUMxX0RBVDQJTUZQX0NGRyhHUElPNDgsIEFGMSkKKyNkZWZpbmUgR1BJTzUxX01NQzFfREFUMwlNRlBfQ0ZHKEdQSU81MSwgQUYxKQorI2RlZmluZSBHUElPNTJfTU1DMV9EQVQyCU1GUF9DRkcoR1BJTzUyLCBBRjEpCisjZGVmaW5lIEdQSU80MF9NTUMxX0RBVDEJTUZQX0NGRyhHUElPNDAsIEFGMSkKKyNkZWZpbmUgR1BJTzQxX01NQzFfREFUMAlNRlBfQ0ZHKEdQSU80MSwgQUYxKQorI2RlZmluZSBHUElPNDlfTU1DMV9DTUQJCU1GUF9DRkcoR1BJTzQ5LCBBRjEpCisjZGVmaW5lIEdQSU80M19NTUMxX0NMSwkJTUZQX0NGRyhHUElPNDMsIEFGMSkKKyNkZWZpbmUgR1BJTzUzX01NQzFfQ0QJCU1GUF9DRkcoR1BJTzUzLCBBRjEpCisjZGVmaW5lIEdQSU80Nl9NTUMxX1dQCQlNRlBfQ0ZHKEdQSU80NiwgQUYxKQorCisvKiBMQ0QgKi8KKyNkZWZpbmUgR1BJTzg0X0xDRF9DUwkJTUZQX0NGRyhHUElPODQsIEFGMSkKKyNkZWZpbmUgR1BJTzYwX0xDRF9ERDAJCU1GUF9DRkcoR1BJTzYwLCBBRjEpCisjZGVmaW5lIEdQSU82MV9MQ0RfREQxCQlNRlBfQ0ZHKEdQSU82MSwgQUYxKQorI2RlZmluZSBHUElPNzBfTENEX0REMTAJCU1GUF9DRkcoR1BJTzcwLCBBRjEpCisjZGVmaW5lIEdQSU83MV9MQ0RfREQxMQkJTUZQX0NGRyhHUElPNzEsIEFGMSkKKyNkZWZpbmUgR1BJTzcyX0xDRF9ERDEyCQlNRlBfQ0ZHKEdQSU83MiwgQUYxKQorI2RlZmluZSBHUElPNzNfTENEX0REMTMJCU1GUF9DRkcoR1BJTzczLCBBRjEpCisjZGVmaW5lIEdQSU83NF9MQ0RfREQxNAkJTUZQX0NGRyhHUElPNzQsIEFGMSkKKyNkZWZpbmUgR1BJTzc1X0xDRF9ERDE1CQlNRlBfQ0ZHKEdQSU83NSwgQUYxKQorI2RlZmluZSBHUElPNzZfTENEX0REMTYJCU1GUF9DRkcoR1BJTzc2LCBBRjEpCisjZGVmaW5lIEdQSU83N19MQ0RfREQxNwkJTUZQX0NGRyhHUElPNzcsIEFGMSkKKyNkZWZpbmUgR1BJTzc4X0xDRF9ERDE4CQlNRlBfQ0ZHKEdQSU83OCwgQUYxKQorI2RlZmluZSBHUElPNzlfTENEX0REMTkJCU1GUF9DRkcoR1BJTzc5LCBBRjEpCisjZGVmaW5lIEdQSU82Ml9MQ0RfREQyCQlNRlBfQ0ZHKEdQSU82MiwgQUYxKQorI2RlZmluZSBHUElPODBfTENEX0REMjAJCU1GUF9DRkcoR1BJTzgwLCBBRjEpCisjZGVmaW5lIEdQSU84MV9MQ0RfREQyMQkJTUZQX0NGRyhHUElPODEsIEFGMSkKKyNkZWZpbmUgR1BJTzgyX0xDRF9ERDIyCQlNRlBfQ0ZHKEdQSU84MiwgQUYxKQorI2RlZmluZSBHUElPODNfTENEX0REMjMJCU1GUF9DRkcoR1BJTzgzLCBBRjEpCisjZGVmaW5lIEdQSU82M19MQ0RfREQzCQlNRlBfQ0ZHKEdQSU82MywgQUYxKQorI2RlZmluZSBHUElPNjRfTENEX0RENAkJTUZQX0NGRyhHUElPNjQsIEFGMSkKKyNkZWZpbmUgR1BJTzY1X0xDRF9ERDUJCU1GUF9DRkcoR1BJTzY1LCBBRjEpCisjZGVmaW5lIEdQSU82Nl9MQ0RfREQ2CQlNRlBfQ0ZHKEdQSU82NiwgQUYxKQorI2RlZmluZSBHUElPNjdfTENEX0RENwkJTUZQX0NGRyhHUElPNjcsIEFGMSkKKyNkZWZpbmUgR1BJTzY4X0xDRF9ERDgJCU1GUF9DRkcoR1BJTzY4LCBBRjEpCisjZGVmaW5lIEdQSU82OV9MQ0RfREQ5CQlNRlBfQ0ZHKEdQSU82OSwgQUYxKQorI2RlZmluZSBHUElPNTlfTENEX0RFTkFfQklBUwlNRlBfQ0ZHKEdQSU81OSwgQUYxKQorI2RlZmluZSBHUElPNTZfTENEX0ZDTEtfUkQJTUZQX0NGRyhHUElPNTYsIEFGMSkKKyNkZWZpbmUgR1BJTzU3X0xDRF9MQ0xLX0EwCU1GUF9DRkcoR1BJTzU3LCBBRjEpCisjZGVmaW5lIEdQSU81OF9MQ0RfUENMS19XUglNRlBfQ0ZHKEdQSU81OCwgQUYxKQorI2RlZmluZSBHUElPODVfTENEX1ZTWU5DCU1GUF9DRkcoR1BJTzg1LCBBRjEpCisKKy8qIEkyUyAqLworI2RlZmluZSBHUElPMTEzX0kyU19NQ0xLCU1GUF9DRkcoR1BJTzExMyxBRjYpCisjZGVmaW5lIEdQSU8xMTRfSTJTX0ZSTQkJTUZQX0NGRyhHUElPMTE0LEFGMSkKKyNkZWZpbmUgR1BJTzExNV9JMlNfQkNMSwlNRlBfQ0ZHKEdQSU8xMTUsQUYxKQorI2RlZmluZSBHUElPMTE2X0kyU19SWEQJCU1GUF9DRkcoR1BJTzExNixBRjIpCisjZGVmaW5lIEdQSU8xMTdfSTJTX1RYRAkJTUZQX0NGRyhHUElPMTE3LEFGMikKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUZQX1BYQTE2OF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGExY2JjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaApAQCAtMCwwICsxLDE1NyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX01GUF9QWEE5MTBfSAorI2RlZmluZSBfX0FTTV9NQUNIX01GUF9QWEE5MTBfSAorCisjaW5jbHVkZSA8bWFjaC9tZnAuaD4KKworLyogVUFSVDIgKi8KKyNkZWZpbmUgR1BJTzQ3X1VBUlQyX1JYRAlNRlBfQ0ZHKEdQSU80NywgQUY2KQorI2RlZmluZSBHUElPNDhfVUFSVDJfVFhECU1GUF9DRkcoR1BJTzQ4LCBBRjYpCisKKy8qIFVBUlQzICovCisjZGVmaW5lIEdQSU8zMV9VQVJUM19SWEQJTUZQX0NGRyhHUElPMzEsIEFGNCkKKyNkZWZpbmUgR1BJTzMyX1VBUlQzX1RYRAlNRlBfQ0ZHKEdQSU8zMiwgQUY0KQorCisvKklSREEqLworI2RlZmluZSBHUElPNTFfSVJEQV9TSEROCU1GUF9DRkcoR1BJTzUxLCBBRjApCisKKy8qIFNNQyAqLworI2RlZmluZSBTTV9uQ1MwX25DUzAJCU1GUF9DRkcoU01fbkNTMCwgQUYwKQorI2RlZmluZSBTTV9BRFZfU01fQURWCQlNRlBfQ0ZHKFNNX0FEViwgQUYwKQorI2RlZmluZSBTTV9TQ0xLX1NNX1NDTEsJCU1GUF9DRkcoU01fU0NMSywgQUYwKQorI2RlZmluZSBTTV9TQ0xLX1NNX1NDTEsJCU1GUF9DRkcoU01fU0NMSywgQUYwKQorI2RlZmluZSBTTV9CRTBfU01fQkUwCQlNRlBfQ0ZHKFNNX0JFMCwgQUYxKQorI2RlZmluZSBTTV9CRTFfU01fQkUxCQlNRlBfQ0ZHKFNNX0JFMSwgQUYxKQorCisvKiBJMkMgKi8KKyNkZWZpbmUgR1BJTzUzX0NJMkNfU0NMCQlNRlBfQ0ZHKEdQSU81MywgQUYyKQorI2RlZmluZSBHUElPNTRfQ0kyQ19TREEJCU1GUF9DRkcoR1BJTzU0LCBBRjIpCisKKy8qIFNTUDEgKEkyUykgKi8KKyNkZWZpbmUgR1BJTzI0X1NTUDFfU0RBVEFfSU4JTUZQX0NGR19EUlYoR1BJTzI0LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzIxX1NTUDFfQklUQ0xLCU1GUF9DRkdfRFJWKEdQSU8yMSwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8yMF9TU1AxX1NZU0NMSwlNRlBfQ0ZHX0RSVihHUElPMjAsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPMjJfU1NQMV9TWU5DCU1GUF9DRkdfRFJWKEdQSU8yMiwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8yM19TU1AxX0RBVEFfT1VUCU1GUF9DRkdfRFJWKEdQSU8yMywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8xMjRfTU5fQ0xLX09VVAlNRlBfQ0ZHX0RSVihHUElPMTI0LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzEyM19DTEtfUkVRCQlNRlBfQ0ZHX0RSVihHUElPMTIzLCBBRjAsIE1FRElVTSkKKworLyogREZJICovCisjZGVmaW5lIERGX0lPMF9ORF9JTzAJCU1GUF9DRkcoREZfSU8wLCBBRjApCisjZGVmaW5lIERGX0lPMV9ORF9JTzEJCU1GUF9DRkcoREZfSU8xLCBBRjApCisjZGVmaW5lIERGX0lPMl9ORF9JTzIJCU1GUF9DRkcoREZfSU8yLCBBRjApCisjZGVmaW5lIERGX0lPM19ORF9JTzMJCU1GUF9DRkcoREZfSU8zLCBBRjApCisjZGVmaW5lIERGX0lPNF9ORF9JTzQJCU1GUF9DRkcoREZfSU80LCBBRjApCisjZGVmaW5lIERGX0lPNV9ORF9JTzUJCU1GUF9DRkcoREZfSU81LCBBRjApCisjZGVmaW5lIERGX0lPNl9ORF9JTzYJCU1GUF9DRkcoREZfSU82LCBBRjApCisjZGVmaW5lIERGX0lPN19ORF9JTzcJCU1GUF9DRkcoREZfSU83LCBBRjApCisjZGVmaW5lIERGX0lPOF9ORF9JTzgJCU1GUF9DRkcoREZfSU84LCBBRjApCisjZGVmaW5lIERGX0lPOV9ORF9JTzkJCU1GUF9DRkcoREZfSU85LCBBRjApCisjZGVmaW5lIERGX0lPMTBfTkRfSU8xMAkJTUZQX0NGRyhERl9JTzEwLCBBRjApCisjZGVmaW5lIERGX0lPMTFfTkRfSU8xMQkJTUZQX0NGRyhERl9JTzExLCBBRjApCisjZGVmaW5lIERGX0lPMTJfTkRfSU8xMgkJTUZQX0NGRyhERl9JTzEyLCBBRjApCisjZGVmaW5lIERGX0lPMTNfTkRfSU8xMwkJTUZQX0NGRyhERl9JTzEzLCBBRjApCisjZGVmaW5lIERGX0lPMTRfTkRfSU8xNAkJTUZQX0NGRyhERl9JTzE0LCBBRjApCisjZGVmaW5lIERGX0lPMTVfTkRfSU8xNQkJTUZQX0NGRyhERl9JTzE1LCBBRjApCisjZGVmaW5lIERGX25DUzBfU01fbkNTMl9uQ1MwCU1GUF9DRkcoREZfbkNTMF9TTV9uQ1MyLCBBRjApCisjZGVmaW5lIERGX0FMRV9TTV9XRW5fTkRfQUxFCU1GUF9DRkcoREZfQUxFX1NNX1dFbiwgQUYxKQorI2RlZmluZSBERl9DTEVfU01fT0VuX05EX0NMRQlNRlBfQ0ZHKERGX0NMRV9TTV9PRW4sIEFGMCkKKyNkZWZpbmUgREZfV0VuX0RGX1dFbgkJTUZQX0NGRyhERl9XRW4sIEFGMSkKKyNkZWZpbmUgREZfUkVuX0RGX1JFbgkJTUZQX0NGRyhERl9SRW4sIEFGMSkKKyNkZWZpbmUgREZfUkRZMF9ERl9SRFkwCQlNRlBfQ0ZHKERGX1JEWTAsIEFGMCkKKworLyprZXlwYWQqLworI2RlZmluZSBHUElPMDBfS1BfTUtJTjAJCU1GUF9DRkcoR1BJTzAsIEFGMSkKKyNkZWZpbmUgR1BJTzAxX0tQX01LT1VUMAlNRlBfQ0ZHKEdQSU8xLCBBRjEpCisjZGVmaW5lIEdQSU8wMl9LUF9NS0lOMQkJTUZQX0NGRyhHUElPMiwgQUYxKQorI2RlZmluZSBHUElPMDNfS1BfTUtPVVQxCU1GUF9DRkcoR1BJTzMsIEFGMSkKKyNkZWZpbmUgR1BJTzA0X0tQX01LSU4yCQlNRlBfQ0ZHKEdQSU80LCBBRjEpCisjZGVmaW5lIEdQSU8wNV9LUF9NS09VVDIJTUZQX0NGRyhHUElPNSwgQUYxKQorI2RlZmluZSBHUElPMDZfS1BfTUtJTjMJCU1GUF9DRkcoR1BJTzYsIEFGMSkKKyNkZWZpbmUgR1BJTzA3X0tQX01LT1VUMwlNRlBfQ0ZHKEdQSU83LCBBRjEpCisjZGVmaW5lIEdQSU8wOF9LUF9NS0lONAkJTUZQX0NGRyhHUElPOCwgQUYxKQorI2RlZmluZSBHUElPMDlfS1BfTUtPVVQ0CU1GUF9DRkcoR1BJTzksIEFGMSkKKyNkZWZpbmUgR1BJTzEwX0tQX01LSU41CQlNRlBfQ0ZHKEdQSU8xMCwgQUYxKQorI2RlZmluZSBHUElPMTFfS1BfTUtPVVQ1CU1GUF9DRkcoR1BJTzExLCBBRjEpCisjZGVmaW5lIEdQSU8xMl9LUF9NS0lONgkJTUZQX0NGRyhHUElPMTIsIEFGMSkKKyNkZWZpbmUgR1BJTzEzX0tQX01LT1VUNglNRlBfQ0ZHKEdQSU8xMywgQUYxKQorI2RlZmluZSBHUElPMTRfS1BfTUtJTjcJCU1GUF9DRkcoR1BJTzE0LCBBRjEpCisjZGVmaW5lIEdQSU8xNV9LUF9NS09VVDcJTUZQX0NGRyhHUElPMTUsIEFGMSkKKyNkZWZpbmUgR1BJTzE2X0tQX0RLSU4wCQlNRlBfQ0ZHKEdQSU8xNiwgQUYxKQorI2RlZmluZSBHUElPMTdfS1BfREtJTjEJCU1GUF9DRkcoR1BJTzE3LCBBRjEpCisjZGVmaW5lIEdQSU8xOF9LUF9ES0lOMgkJTUZQX0NGRyhHUElPMTgsIEFGMSkKKyNkZWZpbmUgR1BJTzE5X0tQX0RLSU4zCQlNRlBfQ0ZHKEdQSU8xOSwgQUYxKQorCisvKiBMQ0QgKi8KKyNkZWZpbmUgR1BJTzgxX0xDRF9GQ0xLCQlNRlBfQ0ZHKEdQSU84MSwgQUYxKQorI2RlZmluZSBHUElPODJfTENEX0xDTEsJCU1GUF9DRkcoR1BJTzgyLCBBRjEpCisjZGVmaW5lIEdQSU84M19MQ0RfUENMSwkJTUZQX0NGRyhHUElPODMsIEFGMSkKKyNkZWZpbmUgR1BJTzg0X0xDRF9ERU5BCQlNRlBfQ0ZHKEdQSU84NCwgQUYxKQorI2RlZmluZSBHUElPODVfTENEX0REMAkJTUZQX0NGRyhHUElPODUsIEFGMSkKKyNkZWZpbmUgR1BJTzg2X0xDRF9ERDEJCU1GUF9DRkcoR1BJTzg2LCBBRjEpCisjZGVmaW5lIEdQSU84N19MQ0RfREQyCQlNRlBfQ0ZHKEdQSU84NywgQUYxKQorI2RlZmluZSBHUElPODhfTENEX0REMwkJTUZQX0NGRyhHUElPODgsIEFGMSkKKyNkZWZpbmUgR1BJTzg5X0xDRF9ERDQJCU1GUF9DRkcoR1BJTzg5LCBBRjEpCisjZGVmaW5lIEdQSU85MF9MQ0RfREQ1CQlNRlBfQ0ZHKEdQSU85MCwgQUYxKQorI2RlZmluZSBHUElPOTFfTENEX0RENgkJTUZQX0NGRyhHUElPOTEsIEFGMSkKKyNkZWZpbmUgR1BJTzkyX0xDRF9ERDcJCU1GUF9DRkcoR1BJTzkyLCBBRjEpCisjZGVmaW5lIEdQSU85M19MQ0RfREQ4CQlNRlBfQ0ZHKEdQSU85MywgQUYxKQorI2RlZmluZSBHUElPOTRfTENEX0REOQkJTUZQX0NGRyhHUElPOTQsIEFGMSkKKyNkZWZpbmUgR1BJTzk1X0xDRF9ERDEwCQlNRlBfQ0ZHKEdQSU85NSwgQUYxKQorI2RlZmluZSBHUElPOTZfTENEX0REMTEJCU1GUF9DRkcoR1BJTzk2LCBBRjEpCisjZGVmaW5lIEdQSU85N19MQ0RfREQxMgkJTUZQX0NGRyhHUElPOTcsIEFGMSkKKyNkZWZpbmUgR1BJTzk4X0xDRF9ERDEzCQlNRlBfQ0ZHKEdQSU85OCwgQUYxKQorI2RlZmluZSBHUElPMTAwX0xDRF9ERDE0CU1GUF9DRkcoR1BJTzEwMCwgQUYxKQorI2RlZmluZSBHUElPMTAxX0xDRF9ERDE1CU1GUF9DRkcoR1BJTzEwMSwgQUYxKQorI2RlZmluZSBHUElPMTAyX0xDRF9ERDE2CU1GUF9DRkcoR1BJTzEwMiwgQUYxKQorI2RlZmluZSBHUElPMTAzX0xDRF9ERDE3CU1GUF9DRkcoR1BJTzEwMywgQUYxKQorI2RlZmluZSBHUElPMTA0X0xDRF9ERDE4CU1GUF9DRkcoR1BJTzEwNCwgQUYxKQorI2RlZmluZSBHUElPMTA1X0xDRF9ERDE5CU1GUF9DRkcoR1BJTzEwNSwgQUYxKQorI2RlZmluZSBHUElPMTA2X0xDRF9ERDIwCU1GUF9DRkcoR1BJTzEwNiwgQUYxKQorI2RlZmluZSBHUElPMTA3X0xDRF9ERDIxCU1GUF9DRkcoR1BJTzEwNywgQUYxKQorI2RlZmluZSBHUElPMTA4X0xDRF9ERDIyCU1GUF9DRkcoR1BJTzEwOCwgQUYxKQorI2RlZmluZSBHUElPMTA5X0xDRF9ERDIzCU1GUF9DRkcoR1BJTzEwOSwgQUYxKQorCisjZGVmaW5lIEdQSU8xMDRfTENEX1NQSURPVVQJTUZQX0NGRyhHUElPMTA0LCBBRjMpCisjZGVmaW5lIEdQSU8xMDVfTENEX1NQSURJTglNRlBfQ0ZHKEdQSU8xMDUsIEFGMykKKyNkZWZpbmUgR1BJTzEwN19MQ0RfQ1MxIAlNRlBfQ0ZHKEdQSU8xMDcsIEFGMykKKyNkZWZpbmUgR1BJTzEwOF9MQ0RfRENMSwlNRlBfQ0ZHKEdQSU8xMDgsIEFGMykKKworI2RlZmluZSBHUElPMTA2X0xDRF9SRVNFVAlNRlBfQ0ZHKEdQSU8xMDYsIEFGMCkKKworLypzbWFydCBwYW5lbCovCisjZGVmaW5lIEdQSU84Ml9MQ0RfQTAJCU1GUF9DRkcoR1BJTzgyLCBBRjApCisjZGVmaW5lIEdQSU84M19MQ0RfV1IJCU1GUF9DRkcoR1BJTzgzLCBBRjApCisjZGVmaW5lIEdQSU8xMDNfTENEX0NTCQlNRlBfQ0ZHKEdQSU8xMDMsIEFGMCkKKworLyoxd2lyZSovCisjZGVmaW5lIEdQSU8xMDZfMVdJUkUJCU1GUF9DRkcoR1BJTzEwNiwgQUYzKQorCisvKkNDSUMqLworI2RlZmluZSBHUElPNjdfQ0NJQ19JTjcJCU1GUF9DRkdfRFJWKEdQSU82NywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU82OF9DQ0lDX0lONgkJTUZQX0NGR19EUlYoR1BJTzY4LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzY5X0NDSUNfSU41CQlNRlBfQ0ZHX0RSVihHUElPNjksIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzBfQ0NJQ19JTjQJCU1GUF9DRkdfRFJWKEdQSU83MCwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83MV9DQ0lDX0lOMwkJTUZQX0NGR19EUlYoR1BJTzcxLCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzcyX0NDSUNfSU4yCQlNRlBfQ0ZHX0RSVihHUElPNzIsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzNfQ0NJQ19JTjEJCU1GUF9DRkdfRFJWKEdQSU83MywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83NF9DQ0lDX0lOMAkJTUZQX0NGR19EUlYoR1BJTzc0LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzc1X0NBTV9IU1lOQwlNRlBfQ0ZHX0RSVihHUElPNzUsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzZfQ0FNX1ZTWU5DCU1GUF9DRkdfRFJWKEdQSU83NiwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83N19DQU1fTUNMSwkJTUZQX0NGR19EUlYoR1BJTzc3LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzc4X0NBTV9QQ0xLCQlNRlBfQ0ZHX0RSVihHUElPNzgsIEFGMSwgTUVESVVNKQorCisvKiBNTUMxICovCisjZGVmaW5lIE1NQzFfREFUN19NTUMxX0RBVDcJTUZQX0NGR19EUlYoTU1DMV9EQVQ3LCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQ2X01NQzFfREFUNglNRlBfQ0ZHX0RSVihNTUMxX0RBVDYsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0RBVDVfTU1DMV9EQVQ1CU1GUF9DRkdfRFJWKE1NQzFfREFUNSwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUNF9NTUMxX0RBVDQJTUZQX0NGR19EUlYoTU1DMV9EQVQ0LCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQzX01NQzFfREFUMwlNRlBfQ0ZHX0RSVihNTUMxX0RBVDMsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0RBVDJfTU1DMV9EQVQyCU1GUF9DRkdfRFJWKE1NQzFfREFUMiwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUMV9NTUMxX0RBVDEJTUZQX0NGR19EUlYoTU1DMV9EQVQxLCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQwX01NQzFfREFUMAlNRlBfQ0ZHX0RSVihNTUMxX0RBVDAsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0NNRF9NTUMxX0NNRAlNRlBfQ0ZHX0RSVihNTUMxX0NNRCwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfQ0xLX01NQzFfQ0xLCU1GUF9DRkdfRFJWKE1NQzFfQ0xLLCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9DRF9NTUMxX0NECQlNRlBfQ0ZHX0RSVihNTUMxX0NELCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9XUF9NTUMxX1dQCQlNRlBfQ0ZHX0RSVihNTUMxX1dQLCBBRjAsIE1FRElVTSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0ggTUZQX1BYQTkxMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZWE0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTUZQX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NRlBfSAorCisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KKworLyoKKyAqIE5PVEU6IHRoZSBNRlBSIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBvbiBQWEExNjggcHJvY2Vzc29yIGxpbmVzIGFyZSBhCisgKiBiaXQgZGlmZmVyZW50IGZyb20gdGhvc2Ugb24gUFhBM3h4LiAgQml0IFs3OjEwXSBhcmUgbm93IHJlc2VydmVkLCB3aGljaAorICogd2VyZSBTTEVFUF9PRV9OLCBTTEVFUF9EQVRBLCBTTEVFUF9TRUwgYW5kIHRoZSBMU0Igb2YgRFJJVkUgYml0cy4KKyAqCisgKiBUbyBjb3BlIHdpdGggdGhpcyBkaWZmZXJlbmNlIGFuZCByZS11c2UgdGhlIHB4YTN4eCBtZnAgY29kZSBhcyBtdWNoIGFzCisgKiBwb3NzaWJsZSwgd2UgbWFrZSB0aGUgZm9sbG93aW5nIGNvbXByb21pc2U6CisgKgorICogMS4gU0xFRVBfT0VfTiB3aWxsIGFsd2F5cyBiZSBwcm9ncmFtbWVkIHRvICcxJyAoYnkgTUZQX0xQTV9GTE9BVCkKKyAqIDIuIERSSVZFIHN0cmVuZ3RoIGRlZmluaXRpb25zIHJlZGVmaW5lZCB0byBpbmNsdWRlIHRoZSByZXNlcnZlZCBiaXQxMAorICogMy4gT3ZlcnJpZGUgTUZQX0NGRygpIGFuZCBNRlBfQ0ZHX0RSVigpCisgKiA0LiBEcm9wIHRoZSB1c2Ugb2YgTUZQX0NGR19MUE0oKSBhbmQgTUZQX0NGR19YKCkKKyAqLworCisjZGVmaW5lIE1GUF9EUklWRV9WRVJZX1NMT1cJKDB4MCA8PCAxMykKKyNkZWZpbmUgTUZQX0RSSVZFX1NMT1cJCSgweDIgPDwgMTMpCisjZGVmaW5lIE1GUF9EUklWRV9NRURJVU0JKDB4NCA8PCAxMykKKyNkZWZpbmUgTUZQX0RSSVZFX0ZBU1QJCSgweDggPDwgMTMpCisKKyN1bmRlZiBNRlBfQ0ZHCisjdW5kZWYgTUZQX0NGR19EUlYKKyN1bmRlZiBNRlBfQ0ZHX0xQTQorI3VuZGVmIE1GUF9DRkdfWAorI3VuZGVmIE1GUF9DRkdfREVGQVVMVAorCisjZGVmaW5lIE1GUF9DRkcocGluLCBhZikJCVwKKwkoTUZQX0xQTV9GTE9BVCB8IE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF9EUklWRV9NRURJVU0pCisKKyNkZWZpbmUgTUZQX0NGR19EUlYocGluLCBhZiwgZHJ2KQlcCisJKE1GUF9MUE1fRkxPQVQgfCBNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfRFJJVkVfIyNkcnYpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwYThhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGExNjguaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUFhBMTY4X0gKKyNkZWZpbmUgX19BU01fTUFDSF9QWEExNjhfSAorCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHB4YTE2OF9kZXZpY2VfdWFydDE7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGExNjhfZGV2aWNlX3VhcnQyOworCitzdGF0aWMgaW5saW5lIGludCBweGExNjhfYWRkX3VhcnQoaW50IGlkKQoreworCXN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgKmQgPSBOVUxMOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgMTogZCA9ICZweGExNjhfZGV2aWNlX3VhcnQxOyBicmVhazsKKwljYXNlIDI6IGQgPSAmcHhhMTY4X2RldmljZV91YXJ0MjsgYnJlYWs7CisJfQorCisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHhhX3JlZ2lzdGVyX2RldmljZShkLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BYQTE2OF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhZWFmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGE5MTAuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUFhBOTEwX0gKKyNkZWZpbmUgX19BU01fTUFDSF9QWEE5MTBfSAorCisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHB4YTkxMF9kZXZpY2VfdWFydDE7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGE5MTBfZGV2aWNlX3VhcnQyOworCitzdGF0aWMgaW5saW5lIGludCBweGE5MTBfYWRkX3VhcnQoaW50IGlkKQoreworCXN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgKmQgPSBOVUxMOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgMTogZCA9ICZweGE5MTBfZGV2aWNlX3VhcnQxOyBicmVhazsKKwljYXNlIDI6IGQgPSAmcHhhOTEwX2RldmljZV91YXJ0MjsgYnJlYWs7CisJfQorCisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHhhX3JlZ2lzdGVyX2RldmljZShkLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BYQTkxMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiOGM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwYmMuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBiYy5oCisgKgorICogICBBcHBsaWNhdGlvbiBQZXJpcGhlcmFsIEJ1cyBDbG9jayBVbml0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19BUEJDX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SRUdTX0FQQkNfSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIEFQQkNfVklSVF9CQVNFCShBUEJfVklSVF9CQVNFICsgMHgwMTUwMDApCisjZGVmaW5lIEFQQkNfUkVHKHgpCShBUEJDX1ZJUlRfQkFTRSArICh4KSkKKworLyoKKyAqIEFQQiBjbG9jayByZWdpc3RlciBvZmZzZXRzIGZvciBQWEExNjgKKyAqLworI2RlZmluZSBBUEJDX1BYQTE2OF9VQVJUMQlBUEJDX1JFRygweDAwMCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfVUFSVDIJQVBCQ19SRUcoMHgwMDQpCisjZGVmaW5lIEFQQkNfUFhBMTY4X0dQSU8JQVBCQ19SRUcoMHgwMDgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1BXTTAJQVBCQ19SRUcoMHgwMGMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1BXTTEJQVBCQ19SRUcoMHgwMTApCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDEJQVBCQ19SRUcoMHgwMWMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDIJQVBCQ19SRUcoMHgwMjApCisjZGVmaW5lIEFQQkNfUFhBMTY4X1JUQwkJQVBCQ19SRUcoMHgwMjgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1RXU0kwCUFQQkNfUkVHKDB4MDJjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9LUEMJCUFQQkNfUkVHKDB4MDMwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9USU1FUlMJQVBCQ19SRUcoMHgwMzQpCisjZGVmaW5lIEFQQkNfUFhBMTY4X0FJQgkJQVBCQ19SRUcoMHgwM2MpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NXX0pUQUcJQVBCQ19SRUcoMHgwNDApCisjZGVmaW5lIEFQQkNfUFhBMTY4X09ORVdJUkUJQVBCQ19SRUcoMHgwNDgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDMJQVBCQ19SRUcoMHgwNGMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X0FTRkFSCUFQQkNfUkVHKDB4MDUwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9BU1NBUglBUEJDX1JFRygweDA1NCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfU1NQNAlBUEJDX1JFRygweDA1OCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfU1NQNQlBUEJDX1JFRygweDA1YykKKyNkZWZpbmUgQVBCQ19QWEExNjhfVFdTSTEJQVBCQ19SRUcoMHgwNmMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1VBUlQzCUFQQkNfUkVHKDB4MDcwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9BQzk3CUFQQkNfUkVHKDB4MDg0KQorCisvKgorICogQVBCIENsb2NrIHJlZ2lzdGVyIG9mZnNldHMgZm9yIFBYQTkxMAorICovCisjZGVmaW5lIEFQQkNfUFhBOTEwX1VBUlQwCUFQQkNfUkVHKDB4MDAwKQorI2RlZmluZSBBUEJDX1BYQTkxMF9VQVJUMQlBUEJDX1JFRygweDAwNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfR1BJTwlBUEJDX1JFRygweDAwOCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMAlBUEJDX1JFRygweDAwYykKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMQlBUEJDX1JFRygweDAxMCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMglBUEJDX1JFRygweDAxNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfUFdNMwlBUEJDX1JFRygweDAxOCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfU1NQMQlBUEJDX1JFRygweDAxYykKKyNkZWZpbmUgQVBCQ19QWEE5MTBfU1NQMglBUEJDX1JFRygweDAyMCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfSVBDCQlBUEJDX1JFRygweDAyNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfVFdTSTAJQVBCQ19SRUcoMHgwMmMpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0tQQwkJQVBCQ19SRUcoMHgwMzApCisjZGVmaW5lIEFQQkNfUFhBOTEwX1RJTUVSUwlBUEJDX1JFRygweDAzNCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfVEJST1QJQVBCQ19SRUcoMHgwMzgpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0FJQgkJQVBCQ19SRUcoMHgwM2MpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1NXX0pUQUcJQVBCQ19SRUcoMHgwNDApCisjZGVmaW5lIEFQQkNfUFhBOTEwX1RJTUVSUzEJQVBCQ19SRUcoMHgwNDQpCisjZGVmaW5lIEFQQkNfUFhBOTEwX09ORVdJUkUJQVBCQ19SRUcoMHgwNDgpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1NTUDMJQVBCQ19SRUcoMHgwNGMpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0FTRkFSCUFQQkNfUkVHKDB4MDUwKQorI2RlZmluZSBBUEJDX1BYQTkxMF9BU1NBUglBUEJDX1JFRygweDA1NCkKKworLyogQ29tbW9uIEFQQiBjbG9jayByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBCQ19BUEJDTEsJKDEgPDwgMCkgIC8qIEFQQiBCdXMgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIEFQQkNfRk5DTEsJKDEgPDwgMSkgIC8qIEZ1bmN0aW9uYWwgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIEFQQkNfUlNUCSgxIDw8IDIpICAvKiBSZXNldCBHZW5lcmF0aW9uICovCisKKy8qIEZ1bmN0aW9uYWwgQ2xvY2sgU2VsZWN0aW9uIE1hc2sgKi8KKyNkZWZpbmUgQVBCQ19GTkNMS1NFTCh4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfUkVHU19BUEJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwbXUuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTkwMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBtdS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcG11LmgKKyAqCisgKiAgIEFwcGxpY2F0aW9uIFN1YnN5c3RlbSBQb3dlciBNYW5hZ2VtZW50IFVuaXQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9SRUdTX0FQTVVfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfQVBNVV9ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisKKyNkZWZpbmUgQVBNVV9WSVJUX0JBU0UJKEFYSV9WSVJUX0JBU0UgKyAweDgyODAwKQorI2RlZmluZSBBUE1VX1JFRyh4KQkoQVBNVV9WSVJUX0JBU0UgKyAoeCkpCisKKy8qIENsb2NrIFJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgQVBNVV9JUkUJQVBNVV9SRUcoMHgwNDgpCisjZGVmaW5lIEFQTVVfTENECUFQTVVfUkVHKDB4MDRjKQorI2RlZmluZSBBUE1VX0NDSUMJQVBNVV9SRUcoMHgwNTApCisjZGVmaW5lIEFQTVVfU0RIMAlBUE1VX1JFRygweDA1NCkKKyNkZWZpbmUgQVBNVV9TREgxCUFQTVVfUkVHKDB4MDU4KQorI2RlZmluZSBBUE1VX1VTQglBUE1VX1JFRygweDA1YykKKyNkZWZpbmUgQVBNVV9OQU5ECUFQTVVfUkVHKDB4MDYwKQorI2RlZmluZSBBUE1VX0RNQQlBUE1VX1JFRygweDA2NCkKKyNkZWZpbmUgQVBNVV9HRVUJQVBNVV9SRUcoMHgwNjgpCisjZGVmaW5lIEFQTVVfQlVTCUFQTVVfUkVHKDB4MDZjKQorCisjZGVmaW5lIEFQTVVfRk5DTEtfRU4JKDEgPDwgNCkKKyNkZWZpbmUgQVBNVV9BWElDTEtfRU4JKDEgPDwgMykKKyNkZWZpbmUgQVBNVV9GTlJTVF9ESVMJKDEgPDwgMSkKKyNkZWZpbmUgQVBNVV9BWElSU1RfRElTCSgxIDw8IDApCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfQVBNVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWljdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjA4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtaWN1LmgKKyAqCisgKiAgIEludGVycnVwdCBDb250cm9sIFVuaXQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9JQ1VfSAorI2RlZmluZSBfX0FTTV9NQUNIX0lDVV9ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisKKyNkZWZpbmUgSUNVX1ZJUlRfQkFTRQkoQVhJX1ZJUlRfQkFTRSArIDB4ODIwMDApCisjZGVmaW5lIElDVV9SRUcoeCkJKElDVV9WSVJUX0JBU0UgKyAoeCkpCisKKyNkZWZpbmUgSUNVX0lOVF9DT05GKG4pCQlJQ1VfUkVHKChuKSA8PCAyKQorI2RlZmluZSBJQ1VfSU5UX0NPTkZfQVBfSU5UCSgxIDw8IDYpCisjZGVmaW5lIElDVV9JTlRfQ09ORl9DUF9JTlQJKDEgPDwgNSkKKyNkZWZpbmUgSUNVX0lOVF9DT05GX0lSUQkoMSA8PCA0KQorI2RlZmluZSBJQ1VfSU5UX0NPTkZfTUFTSwkoMHhmKQorCisjZGVmaW5lIElDVV9BUF9GSVFfU0VMX0lOVF9OVU0JSUNVX1JFRygweDEwOCkJLyogQVAgRklRIFNlbGVjdGVkIEludGVycnVwdCAqLworI2RlZmluZSBJQ1VfQVBfSVJRX1NFTF9JTlRfTlVNCUlDVV9SRUcoMHgxMEMpCS8qIEFQIElSUSBTZWxlY3RlZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUNVX0FQX0dCTF9JUlFfTVNLCUlDVV9SRUcoMHgxMTQpCS8qIEFQIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBJQ1VfSU5UX1NUQVRVU18wCUlDVV9SRUcoMHgxMjgpCS8qIEludGVycnVwdCBTdHVhdHMgMCAqLworI2RlZmluZSBJQ1VfSU5UX1NUQVRVU18xCUlDVV9SRUcoMHgxMkMpCS8qIEludGVycnVwdCBTdGF0dXMgMSAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9JQ1VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXJzLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy10aW1lcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTU4OWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXJzLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVycy5oCisgKgorICogICBUaW1lcnMgTW9kdWxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19USU1FUlNfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfVElNRVJTX0gKKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworI2RlZmluZSBUSU1FUlMxX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MTQwMDApCisjZGVmaW5lIFRJTUVSUzJfVklSVF9CQVNFCShBUEJfVklSVF9CQVNFICsgMHgxNjAwMCkKKworI2RlZmluZSBUTVJfQ0NSCQkoMHgwMDAwKQorI2RlZmluZSBUTVJfVE5fTU0obiwgbSkJKDB4MDAwNCArICgobikgPDwgMykgKyAoKChuKSArIChtKSkgPDwgMikpCisjZGVmaW5lIFRNUl9DUihuKQkoMHgwMDI4ICsgKChuKSA8PCAyKSkKKyNkZWZpbmUgVE1SX1NSKG4pCSgweDAwMzQgKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfSUVSKG4pCSgweDAwNDAgKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfUExWUihuKQkoMHgwMDRjICsgKChuKSA8PCAyKSkKKyNkZWZpbmUgVE1SX1BMQ1IobikJKDB4MDA1OCArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9XTUVSCSgweDAwNjQpCisjZGVmaW5lIFRNUl9XTVIJCSgweDAwNjgpCisjZGVmaW5lIFRNUl9XVlIJCSgweDAwNmMpCisjZGVmaW5lIFRNUl9XU1IJCSgweDAwNzApCisjZGVmaW5lIFRNUl9JQ1IobikJKDB4MDA3NCArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9XSUNSCSgweDAwODApCisjZGVmaW5lIFRNUl9DRVIJCSgweDAwODQpCisjZGVmaW5lIFRNUl9DTVIJCSgweDAwODgpCisjZGVmaW5lIFRNUl9JTFIobikJKDB4MDA4YyArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9XQ1IJCSgweDAwOTgpCisjZGVmaW5lIFRNUl9XRkFSCSgweDAwOWMpCisjZGVmaW5lIFRNUl9XU0FSCSgweDAwQTApCisjZGVmaW5lIFRNUl9DVldSKG4pCSgweDAwQTQgKyAoKG4pIDw8IDIpKQorCisjZGVmaW5lIFRNUl9DQ1JfQ1NfMCh4KQkoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgVE1SX0NDUl9DU18xKHgpCSgoKHgpICYgMHg3KSA8PCAyKQorI2RlZmluZSBUTVJfQ0NSX0NTXzIoeCkJKCgoeCkgJiAweDMpIDw8IDUpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfVElNRVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDFlZGZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9NQUNIX1NZU1RFTV9ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJY3B1X3Jlc2V0KDApOworfQorI2VuZGlmIC8qIF9fQVNNX01BQ0hfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlYmJkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMzI1MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZDVmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIFVBUlQxX0JBU0UJKEFQQl9QSFlTX0JBU0UgKyAweDM2MDAwKQorI2RlZmluZSBVQVJUMl9CQVNFCShBUEJfUEhZU19CQVNFICsgMHgxNzAwMCkKKyNkZWZpbmUgVUFSVDNfQkFTRQkoQVBCX1BIWVNfQkFTRSArIDB4MTgwMDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpVQVJUID0gKHVuc2lnbmVkIGxvbmcgKilVQVJUMl9CQVNFOworCisJLyogVUFSVCBlbmFibGVkPyAqLworCWlmICghKFVBUlRbVUFSVF9JRVJdICYgVUFSVF9JRVJfVVVFKSkKKwkJcmV0dXJuOworCisJd2hpbGUgKCEoVUFSVFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKKwkJYmFycmllcigpOworCisJVUFSVFtVQVJUX1RYXSA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGNjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqLworCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmZjJmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2lycS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLmMKKyAqCisgKiAgR2VuZXJpYyBJUlEgaGFuZGxpbmcsIEdQSU8gSVJRIGRlbXVsdGlwbGV4aW5nLCBldGMuCisgKgorICogIEF1dGhvcjoJQmluIFlhbmcgPGJpbi55YW5nQG1hcnZlbGwuY29tPgorICogIENyZWF0ZWQ6CVNlcCAzMCwgMjAwOAorICogIENvcHlyaWdodDoJTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1pY3UuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIElSUV9ST1VURV9UT19BUAkJKElDVV9JTlRfQ09ORl9BUF9JTlQgfCBJQ1VfSU5UX0NPTkZfSVJRKQorCisjZGVmaW5lIFBSSU9SSVRZX0RFRkFVTFQJMHgxCisjZGVmaW5lIFBSSU9SSVRZX05PTkUJCTB4MAkvKiBtZWFucyBJUlEgZGlzYWJsZWQgKi8KKworc3RhdGljIHZvaWQgaWN1X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKFBSSU9SSVRZX05PTkUsIElDVV9JTlRfQ09ORihpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaWN1X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoSVJRX1JPVVRFX1RPX0FQIHwgUFJJT1JJVFlfREVGQVVMVCwgSUNVX0lOVF9DT05GKGlycSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGljdV9pcnFfY2hpcCA9IHsKKwkubmFtZQk9ICJpY3VfaXJxIiwKKwkuYWNrCT0gaWN1X21hc2tfaXJxLAorCS5tYXNrCT0gaWN1X21hc2tfaXJxLAorCS51bm1hc2sJPSBpY3VfdW5tYXNrX2lycSwKK307CisKK3ZvaWQgX19pbml0IGljdV9pbml0X2lycSh2b2lkKQoreworCWludCBpcnE7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IDY0OyBpcnErKykgeworCQlpY3VfbWFza19pcnEoaXJxKTsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmljdV9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMgYi9hcmNoL2FybS9tYWNoLW1tcC9weGExNjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTkyNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKKyAqCisgKiAgQ29kZSBzcGVjaWZpYyB0byBQWEExNjgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvY3B1dHlwZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1hcGJjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBNRlBSX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MWUwMDApCisKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTE2OF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0KK3sKKwlNRlBfQUREUl9YKEdQSU8wLCAgIEdQSU8zNiwgIDB4MDRjKSwKKwlNRlBfQUREUl9YKEdQSU8zNywgIEdQSU81NSwgIDB4MDAwKSwKKwlNRlBfQUREUl9YKEdQSU81NiwgIEdQSU8xMjMsIDB4MGUwKSwKKwlNRlBfQUREUl9YKEdQSU8xMjQsIEdQSU8xMjcsIDB4MGY0KSwKKworCU1GUF9BRERSX0VORCwKK307CisKKyNkZWZpbmUgQVBNQVNLKGkpCShHUElPX1JFR1NfVklSVCArIEJBTktfT0ZGKGkpICsgMHgwOWMpCisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGExNjhfaW5pdF9ncGlvKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBlbmFibGUgR1BJTyBjbG9jayAqLworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfRk5DTEssIEFQQkNfUFhBMTY4X0dQSU8pOworCisJLyogdW5tYXNrIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIGFsbCA0IGJhbmtzIC0gQVBNQVNLeCAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBBUE1BU0soaSkpOworCisJcHhhX2luaXRfZ3BpbyhJUlFfUFhBMTY4X0dQSU9YLCAwLCAxMjcsIE5VTEwpOworfQorCit2b2lkIF9faW5pdCBweGExNjhfaW5pdF9pcnEodm9pZCkKK3sKKwlpY3VfaW5pdF9pcnEoKTsKKwlweGExNjhfaW5pdF9ncGlvKCk7Cit9CisKKy8qIEFQQiBwZXJpcGhlcmFsIGNsb2NrcyAqLworc3RhdGljIEFQQkNfQ0xLKHVhcnQxLCBQWEExNjhfVUFSVDEsIDEsIDE0NzQ1NjAwKTsKK3N0YXRpYyBBUEJDX0NMSyh1YXJ0MiwgUFhBMTY4X1VBUlQyLCAxLCAxNDc0NTYwMCk7CisKKy8qIGRldmljZSBhbmQgY2xvY2sgYmluZGluZ3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGExNjhfY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDEsICJweGEyeHgtdWFydC4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa191YXJ0MiwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YTE2OF9pbml0KHZvaWQpCit7CisJaWYgKGNwdV9pc19weGExNjgoKSkgeworCQltZnBfaW5pdF9iYXNlKE1GUFJfVklSVF9CQVNFKTsKKwkJbWZwX2luaXRfYWRkcihweGExNjhfbWZwX2FkZHJfbWFwKTsKKwkJcHhhX2luaXRfZG1hKElSUV9QWEExNjhfRE1BX0lOVDAsIDMyKTsKKwkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGExNjhfY2xrcmVncykpOworCX0KKworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwocHhhMTY4X2luaXQpOworCisvKiBzeXN0ZW0gdGltZXIgLSBjbG9jayBlbmFibGVkLCAzLjI1TUh6ICovCisjZGVmaW5lIFRJTUVSX0NMS19SU1QJKEFQQkNfQVBCQ0xLIHwgQVBCQ19GTkNMSyB8IEFQQkNfRk5DTEtTRUwoMykpCisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGExNjhfdGltZXJfaW5pdCh2b2lkKQoreworCS8qIHRoaXMgaXMgZWFybHksIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgQ0NVIHJlZ2lzdGVycyBieQorCSAqIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHVzaW5nIGNsa18qIEFQSS4gQ2xvY2sgcmF0ZSBpcyBkZWZpbmVkCisJICogYnkgQVBCQ19USU1FUlNfQ0xLX1JTVCAoMy4yNU1IeikgYW5kIGVuYWJsZWQgZnJlZS1ydW5uaW5nCisJICovCisJX19yYXdfd3JpdGVsKEFQQkNfQVBCQ0xLIHwgQVBCQ19SU1QsIEFQQkNfUFhBMTY4X1RJTUVSUyk7CisKKwkvKiAzLjI1TUh6LCBidXMvZnVuY3Rpb25hbCBjbG9jayBlbmFibGVkLCByZWxlYXNlIHJlc2V0ICovCisJX19yYXdfd3JpdGVsKFRJTUVSX0NMS19SU1QsIEFQQkNfUFhBMTY4X1RJTUVSUyk7CisKKwl0aW1lcl9pbml0KElSUV9QWEExNjhfVElNRVIxKTsKK30KKworc3RydWN0IHN5c190aW1lciBweGExNjhfdGltZXIgPSB7CisJLmluaXQJPSBweGExNjhfdGltZXJfaW5pdCwKK307CisKKy8qIG9uLWNoaXAgZGV2aWNlcyAqLworUFhBMTY4X0RFVklDRSh1YXJ0MSwgInB4YTJ4eC11YXJ0IiwgMCwgVUFSVDEsIDB4ZDQwMTcwMDAsIDB4MzAsIDIxLCAyMik7CitQWEExNjhfREVWSUNFKHVhcnQyLCAicHhhMnh4LXVhcnQiLCAxLCBVQVJUMiwgMHhkNDAxODAwMCwgMHgzMCwgMjMsIDI0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzZjhmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jCisgKgorICogIENvZGUgc3BlY2lmaWMgdG8gUFhBOTEwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBiYy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1hcG11Lmg+CisjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBNRlBSX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MWUwMDApCisKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTkxMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0KK3sKKwlNRlBfQUREUl9YKEdQSU8wLCBHUElPNTQsIDB4ZGMpLAorCU1GUF9BRERSX1goR1BJTzY3LCBHUElPOTgsIDB4MWI4KSwKKwlNRlBfQUREUl9YKEdQSU8xMDAsIEdQSU8xMDksIDB4MjM4KSwKKworCU1GUF9BRERSKEdQSU8xMjMsIDB4Y2MpLAorCU1GUF9BRERSKEdQSU8xMjQsIDB4ZDApLAorCisJTUZQX0FERFIoREZfSU8wLCAweDQwKSwKKwlNRlBfQUREUihERl9JTzEsIDB4M2MpLAorCU1GUF9BRERSKERGX0lPMiwgMHgzOCksCisJTUZQX0FERFIoREZfSU8zLCAweDM0KSwKKwlNRlBfQUREUihERl9JTzQsIDB4MzApLAorCU1GUF9BRERSKERGX0lPNSwgMHgyYyksCisJTUZQX0FERFIoREZfSU82LCAweDI4KSwKKwlNRlBfQUREUihERl9JTzcsIDB4MjQpLAorCU1GUF9BRERSKERGX0lPOCwgMHgyMCksCisJTUZQX0FERFIoREZfSU85LCAweDFjKSwKKwlNRlBfQUREUihERl9JTzEwLCAweDE4KSwKKwlNRlBfQUREUihERl9JTzExLCAweDE0KSwKKwlNRlBfQUREUihERl9JTzEyLCAweDEwKSwKKwlNRlBfQUREUihERl9JTzEzLCAweGMpLAorCU1GUF9BRERSKERGX0lPMTQsIDB4OCksCisJTUZQX0FERFIoREZfSU8xNSwgMHg0KSwKKworCU1GUF9BRERSKERGX25DUzBfU01fbkNTMiwgMHg0NCksCisJTUZQX0FERFIoREZfbkNTMV9TTV9uQ1MzLCAweDQ4KSwKKwlNRlBfQUREUihTTV9uQ1MwLCAweDRjKSwKKwlNRlBfQUREUihTTV9uQ1MxLCAweDUwKSwKKwlNRlBfQUREUihERl9XRW4sIDB4NTQpLAorCU1GUF9BRERSKERGX1JFbiwgMHg1OCksCisJTUZQX0FERFIoREZfQ0xFX1NNX09FbiwgMHg1YyksCisJTUZQX0FERFIoREZfQUxFX1NNX1dFbiwgMHg2MCksCisJTUZQX0FERFIoU01fU0NMSywgMHg2NCksCisJTUZQX0FERFIoREZfUkRZMCwgMHg2OCksCisJTUZQX0FERFIoU01fQkUwLCAweDZjKSwKKwlNRlBfQUREUihTTV9CRTEsIDB4NzApLAorCU1GUF9BRERSKFNNX0FEViwgMHg3NCksCisJTUZQX0FERFIoREZfUkRZMSwgMHg3OCksCisJTUZQX0FERFIoU01fQURWTVVYLCAweDdjKSwKKwlNRlBfQUREUihTTV9SRFksIDB4ODApLAorCisJTUZQX0FERFJfWChNTUMxX0RBVDcsIE1NQzFfV1AsIDB4ODQpLAorCisJTUZQX0FERFJfRU5ELAorfTsKKworI2RlZmluZSBBUE1BU0soaSkJKEdQSU9fUkVHU19WSVJUICsgQkFOS19PRkYoaSkgKyAweDA5YykKKworc3RhdGljIHZvaWQgX19pbml0IHB4YTkxMF9pbml0X2dwaW8odm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIGVuYWJsZSBHUElPIGNsb2NrICovCisJX19yYXdfd3JpdGVsKEFQQkNfQVBCQ0xLIHwgQVBCQ19GTkNMSywgQVBCQ19QWEE5MTBfR1BJTyk7CisKKwkvKiB1bm1hc2sgR1BJTyBlZGdlIGRldGVjdGlvbiBmb3IgYWxsIDQgYmFua3MgLSBBUE1BU0t4ICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIEFQTUFTSyhpKSk7CisKKwlweGFfaW5pdF9ncGlvKElSUV9QWEE5MTBfQVBfR1BJTywgMCwgMTI3LCBOVUxMKTsKK30KKwordm9pZCBfX2luaXQgcHhhOTEwX2luaXRfaXJxKHZvaWQpCit7CisJaWN1X2luaXRfaXJxKCk7CisJcHhhOTEwX2luaXRfZ3BpbygpOworfQorCisvKiBBUEIgcGVyaXBoZXJhbCBjbG9ja3MgKi8KK3N0YXRpYyBBUEJDX0NMSyh1YXJ0MSwgUFhBOTEwX1VBUlQwLCAxLCAxNDc0NTYwMCk7CitzdGF0aWMgQVBCQ19DTEsodWFydDIsIFBYQTkxMF9VQVJUMSwgMSwgMTQ3NDU2MDApOworCisvKiBkZXZpY2UgYW5kIGNsb2NrIGJpbmRpbmdzICovCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcHhhOTEwX2Nsa3JlZ3NbXSA9IHsKKwlJTklUX0NMS1JFRygmY2xrX3VhcnQxLCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDIsICJweGEyeHgtdWFydC4xIiwgTlVMTCksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGE5MTBfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfcHhhOTEwKCkpIHsKKwkJbWZwX2luaXRfYmFzZShNRlBSX1ZJUlRfQkFTRSk7CisJCW1mcF9pbml0X2FkZHIocHhhOTEwX21mcF9hZGRyX21hcCk7CisJCXB4YV9pbml0X2RtYShJUlFfUFhBOTEwX0RNQV9JTlQwLCAzMik7CisJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhOTEwX2Nsa3JlZ3MpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKHB4YTkxMF9pbml0KTsKKworLyogc3lzdGVtIHRpbWVyIC0gY2xvY2sgZW5hYmxlZCwgMy4yNU1IeiAqLworI2RlZmluZSBUSU1FUl9DTEtfUlNUCShBUEJDX0FQQkNMSyB8IEFQQkNfRk5DTEsgfCBBUEJDX0ZOQ0xLU0VMKDMpKQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHhhOTEwX3RpbWVyX2luaXQodm9pZCkKK3sKKwkvKiByZXNldCBhbmQgY29uZmlndXJlICovCisJX19yYXdfd3JpdGVsKEFQQkNfQVBCQ0xLIHwgQVBCQ19SU1QsIEFQQkNfUFhBOTEwX1RJTUVSUyk7CisJX19yYXdfd3JpdGVsKFRJTUVSX0NMS19SU1QsIEFQQkNfUFhBOTEwX1RJTUVSUyk7CisKKwl0aW1lcl9pbml0KElSUV9QWEE5MTBfQVAxX1RJTUVSMSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgcHhhOTEwX3RpbWVyID0geworCS5pbml0CT0gcHhhOTEwX3RpbWVyX2luaXQsCit9OworCisvKiBvbi1jaGlwIGRldmljZXMgKi8KKworLyogTk9URTogdGhlcmUgYXJlIHRvdGFsbHkgMyBVQVJUcyBvbiBQWEE5MTA6CisgKgorICogICBVQVJUMSAgIC0gU2xvdyBVQVJUIChjYW4gYmUgdXNlZCBib3RoIGJ5IEFQIGFuZCBDUCkKKyAqICAgVUFSVDIvMyAtIEZhc3QgVUFSVAorICoKKyAqIFRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB0aGUgbGVnYWN5IEZGVUFSVC9CVFVBUlQvU1RVQVJUIHNlcXVlbmNlLAorICogdGhleSBhcmUgcmUtb3JkZXJlZCBhczoKKyAqCisgKiAgIHB4YTkxMF9kZXZpY2VfdWFydDEgLSBVQVJUMiBhcyBGRlVBUlQKKyAqICAgcHhhOTEwX2RldmljZV91YXJ0MiAtIFVBUlQzIGFzIEJUVUFSVAorICoKKyAqIFVBUlQxIGlzIG5vdCB1c2VkIGJ5IEFQIGZvciB0aGUgbW9tZW50LgorICovCitQWEE5MTBfREVWSUNFKHVhcnQxLCAicHhhMnh4LXVhcnQiLCAwLCBVQVJUMiwgMHhkNDAxNzAwMCwgMHgzMCwgMjEsIDIyKTsKK1BYQTkxMF9ERVZJQ0UodWFydDIsICJweGEyeHgtdWFydCIsIDEsIFVBUlQzLCAweGQ0MDE4MDAwLCAweDMwLCAyMywgMjQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvdGF2b3JldmIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwYzkyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvdGF2b3JldmIuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBQWEE5MTAtYmFzZWQgVGF2b3JFVkIgRGV2ZWxvcG1lbnQgUGxhdGZvcm0uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGE5MTAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTkxMC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRhdm9yZXZiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQyICovCisJR1BJTzQ3X1VBUlQyX1JYRCwKKwlHUElPNDhfVUFSVDJfVFhELAorCisJLyogU01DICovCisJU01fbkNTMF9uQ1MwLAorCVNNX0FEVl9TTV9BRFYsCisJU01fU0NMS19TTV9TQ0xLLAorCVNNX1NDTEtfU01fU0NMSywKKwlTTV9CRTBfU01fQkUwLAorCVNNX0JFMV9TTV9CRTEsCisKKwkvKiBERkkgKi8KKwlERl9JTzBfTkRfSU8wLAorCURGX0lPMV9ORF9JTzEsCisJREZfSU8yX05EX0lPMiwKKwlERl9JTzNfTkRfSU8zLAorCURGX0lPNF9ORF9JTzQsCisJREZfSU81X05EX0lPNSwKKwlERl9JTzZfTkRfSU82LAorCURGX0lPN19ORF9JTzcsCisJREZfSU84X05EX0lPOCwKKwlERl9JTzlfTkRfSU85LAorCURGX0lPMTBfTkRfSU8xMCwKKwlERl9JTzExX05EX0lPMTEsCisJREZfSU8xMl9ORF9JTzEyLAorCURGX0lPMTNfTkRfSU8xMywKKwlERl9JTzE0X05EX0lPMTQsCisJREZfSU8xNV9ORF9JTzE1LAorCURGX25DUzBfU01fbkNTMl9uQ1MwLAorCURGX0FMRV9TTV9XRW5fTkRfQUxFLAorCURGX0NMRV9TTV9PRW5fTkRfQ0xFLAorCURGX1dFbl9ERl9XRW4sCisJREZfUkVuX0RGX1JFbiwKKwlERl9SRFkwX0RGX1JEWTAsCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSB0YXZvcmV2Yl9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU01DX0NTMV9QSFlTX0JBU0UgKyAweDMwMCwKKwkJLmVuZAk9IFNNQ19DUzFfUEhZU19CQVNFICsgMHhmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdwaW9fdG9faXJxKDgwKSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKDgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ0YXZvcmV2Yl9zbWM5MXhfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRhdm9yZXZiX2luaXQodm9pZCkKK3sKKwltZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHRhdm9yZXZiX3Bpbl9jb25maWcpKTsKKworCS8qIG9uLWNoaXAgZGV2aWNlcyAqLworCXB4YTkxMF9hZGRfdWFydCgxKTsKKworCS8qIG9mZi1jaGlwIGRldmljZXMgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKFRBVk9SRVZCLCAiUFhBOTEwIEV2YWx1YXRpb24gQm9hcmQgKGFrYSBUYXZvckVWQikiKQorCS5waHlzX2lvICAgICAgICA9IEFQQl9QSFlTX0JBU0UsCisJLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoQVBCX1ZJUlRfQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IHB4YTkxMF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmcHhhOTEwX3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IHRhdm9yZXZiX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2E2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKKyAqCisgKiAgIFN1cHBvcnQgZm9yIGNsb2Nrc291cmNlIGFuZCBjbG9ja2V2ZW50cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgIDIwMDgtMDQtMTE6IEphc29uIENoYWdhcyA8SmFzb24uY2hhZ2FzQG1hcnZlbGwuY29tPgorICogICAyMDA4LTEwLTA4OiBCaW4gWWFuZyA8YmluLnlhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhlIHRpbWVycyBtb2R1bGUgYWN0dWFsbHkgaW5jbHVkZXMgdGhyZWUgdGltZXJzLCBlYWNoIHRpbWVyIHdpdGggdXB0bworICogdGhyZWUgbWF0Y2ggY29tcGFyYXRvcnMuIFRpbWVyICMwIGlzIHVzZWQgaGVyZSBpbiBmcmVlLXJ1bm5pbmcgbW9kZSBhcworICogdGhlIGNsb2NrIHNvdXJjZSwgYW5kIG1hdGNoIGNvbXBhcmF0b3IgIzEgdXNlZCBhcyBjbG9jayBldmVudCBkZXZpY2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy10aW1lcnMuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgVElNRVJTX1ZJUlRfQkFTRQlUSU1FUlMxX1ZJUlRfQkFTRQorCisjZGVmaW5lIE1BWF9ERUxUQQkJKDB4ZmZmZmZmZmUpCisjZGVmaW5lIE1JTl9ERUxUQQkJKDE2KQorCisjZGVmaW5lIFRDUjJOU19TQ0FMRV9GQUNUT1IJMTAKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGNyMm5zX3NjYWxlOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3RjcjJuc19zY2FsZSh1bnNpZ25lZCBsb25nIHRjcl9yYXRlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gMTAwMDAwMDAwMFVMTCA8PCBUQ1IyTlNfU0NBTEVfRkFDVE9SOworCWRvX2Rpdih2LCB0Y3JfcmF0ZSk7CisJdGNyMm5zX3NjYWxlID0gdjsKKwkvKgorCSAqIFdlIHdhbnQgYW4gZXZlbiB2YWx1ZSB0byBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSB0b3AgYml0CisJICogcmV0dXJuZWQgYnkgY250MzJfdG9fNjMoKSB3aXRob3V0IGFuIGFkZGl0aW9uYWwgcnVuIHRpbWUKKwkgKiBpbnN0cnVjdGlvbi4gU28gaWYgdGhlIExTQiBpcyAxIHRoZW4gcm91bmQgaXQgdXAuCisJICovCisJaWYgKHRjcjJuc19zY2FsZSAmIDEpCisJCXRjcjJuc19zY2FsZSsrOworfQorCisvKgorICogRklYTUU6IHRoZSB0aW1lciBuZWVkcyBzb21lIGRlbGF5IHRvIHN0YWJsaXplIHRoZSBjb3VudGVyIGNhcHR1cmUKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCB0aW1lcl9yZWFkKHZvaWQpCit7CisJaW50IGRlbGF5ID0gMTAwOworCisJX19yYXdfd3JpdGVsKDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ1ZXUigwKSk7CisKKwl3aGlsZSAoZGVsYXktLSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DVldSKDApKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHYgPSBjbnQzMl90b182Myh0aW1lcl9yZWFkKCkpOworCXJldHVybiAodiAqIHRjcjJuc19zY2FsZSkgPj4gVENSMk5TX1NDQUxFX0ZBQ1RPUjsKK30KKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYyA9IGRldl9pZDsKKworCS8qIGRpc2FibGUgYW5kIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLworCV9fcmF3X3dyaXRlbCgweDAsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUVSKDApKTsKKwlfX3Jhd193cml0ZWwoMHgxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lDUigwKSk7CisJYy0+ZXZlbnRfaGFuZGxlcihjKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbmV4dDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyBhbmQgZW5hYmxlICovCisJX19yYXdfd3JpdGVsKDB4MDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUNSKDApKTsKKwlfX3Jhd193cml0ZWwoMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JRVIoMCkpOworCisJbmV4dCA9IHRpbWVyX3JlYWQoKSArIGRlbHRhOworCV9fcmF3X3dyaXRlbChuZXh0LCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX1ROX01NKDAsIDApKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJLyogZGlzYWJsZSB0aGUgbWF0Y2hpbmcgaW50ZXJydXB0ICovCisJCV9fcmF3X3dyaXRlbCgweDAwLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lFUigwKSk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWJyZWFrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNrZXZ0ID0geworCS5uYW1lCQk9ICJjbG9ja2V2ZW50IiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDIwMCwKKwkuc2V0X25leHRfZXZlbnQJPSB0aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSB0aW1lcl9zZXRfbW9kZSwKK307CisKK3N0YXRpYyBjeWNsZV90IGNsa3NyY19yZWFkKHZvaWQpCit7CisJcmV0dXJuIHRpbWVyX3JlYWQoKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBja3NyYyA9IHsKKwkubmFtZQkJPSAiY2xvY2tzb3VyY2UiLAorCS5zaGlmdAkJPSAyMCwKKwkucmF0aW5nCQk9IDIwMCwKKwkucmVhZAkJPSBjbGtzcmNfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdGltZXJfY29uZmlnKHZvaWQpCit7CisJdWludDMyX3QgY2NyID0gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DQ1IpOworCXVpbnQzMl90IGNlciA9IF9fcmF3X3JlYWRsKFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0VSKTsKKwl1aW50MzJfdCBjbXIgPSBfX3Jhd19yZWFkbChUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NNUik7CisKKwlfX3Jhd193cml0ZWwoY2VyICYgfjB4MSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DRVIpOyAvKiBkaXNhYmxlICovCisKKwljY3IgJj0gVE1SX0NDUl9DU18wKDB4Myk7CisJX19yYXdfd3JpdGVsKGNjciwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DQ1IpOworCisJLyogZnJlZS1ydW5uaW5nIG1vZGUgKi8KKwlfX3Jhd193cml0ZWwoY21yIHwgMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DTVIpOworCisJX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9QTENSKDApKTsgLyogZnJlZS1ydW5uaW5nICovCisJX19yYXdfd3JpdGVsKDB4NywgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JQ1IoMCkpOyAgLyogY2xlYXIgc3RhdHVzICovCisJX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JRVIoMCkpOworCisJLyogZW5hYmxlIHRpbWVyIGNvdW50ZXIgKi8KKwlfX3Jhd193cml0ZWwoY2VyIHwgMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DRVIpOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gInRpbWVyIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmRldl9pZAkJPSAmY2tldnQsCit9OworCit2b2lkIF9faW5pdCB0aW1lcl9pbml0KGludCBpcnEpCit7CisJdGltZXJfY29uZmlnKCk7CisKKwlzZXRfdGNyMm5zX3NjYWxlKENMT0NLX1RJQ0tfUkFURSk7CisKKwlja2V2dC5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBja2V2dC5zaGlmdCk7CisJY2tldnQubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhNQVhfREVMVEEsICZja2V2dCk7CisJY2tldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhNSU5fREVMVEEsICZja2V2dCk7CisJY2tldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisKKwlja3NyYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIGNrc3JjLnNoaWZ0KTsKKworCXNldHVwX2lycShpcnEsICZ0aW1lcl9pcnEpOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNrc3JjKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmNrZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGNmZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIFBYQTkxMC1iYXNlZCBUVENfREtCIERldmVsb3BtZW50IFBsYXRmb3JtLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTEwLmg+CisjaW5jbHVkZSA8bWFjaC9weGE5MTAuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpICAgICAgICh4KSwgQVJSQVlfU0laRSh4KQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0dGNfZGtiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQyICovCisJR1BJTzQ3X1VBUlQyX1JYRCwKKwlHUElPNDhfVUFSVDJfVFhELAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHR0Y19ka2JfaW5pdCh2b2lkKQoreworCW1mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodHRjX2RrYl9waW5fY29uZmlnKSk7CisKKwkvKiBvbi1jaGlwIGRldmljZXMgKi8KKwlweGE5MTBfYWRkX3VhcnQoMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoVFRDX0RLQiwgIlBYQTkxMC1iYXNlZCBUVENfREtCIERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGE5MTBfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YTkxMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSB0dGNfZGtiX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGYwNWFkMmUuLjU3NGNjYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE3LDcgKzE3LDcgQEAKIAogdm9pZCBhcmNoX2lkbGUodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWZvciAoOzspIDsgIC8qIGRlcGVuZHMgb24gSVBDIHcvIG90aGVyIGNvcmUgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKaW5kZXggZDgzY2I4Ni4uNmZiZTY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKQEAgLTgsNiArOCwxMiBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBNYXJ2ZWxsIERCLTc4eDAwLUJQIERldmVsb3BtZW50IEJvYXJkLgogCitjb25maWcgTUFDSF9SRDc4WDAwX01BU0EKKwlib29sICJNYXJ2ZWxsIFJELTc4eDAwLW1BU0EgUmVmZXJlbmNlIERlc2lnbiIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIE1hcnZlbGwgUkQtNzh4MDAtbUFTQSBSZWZlcmVuY2UgRGVzaWduLgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvTWFrZWZpbGUKaW5kZXggZWMxNmMwNS4uZGE2MjhiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9NYWtlZmlsZQpAQCAtMSwyICsxLDMgQEAKIG9iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gaXJxLm8gcGNpZS5vCiBvYmotJChDT05GSUdfTUFDSF9EQjc4WDAwX0JQKQkrPSBkYjc4eDAwLWJwLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX1JENzhYMDBfTUFTQSkJKz0gcmQ3OHgwMC1tYXNhLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwppbmRleCBiMGU0ZTBkLi5hNTc1ZGFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CkBAIC00MzAsOSArNDMyLDIyIEBACiAKIHZvaWQgX19pbml0IG12Nzh4eDBfZ2UxMF9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKIHsKKwl1MzIgZGV2LCByZXY7CisKIAlldGhfZGF0YS0+c2hhcmVkID0gJm12Nzh4eDBfZ2UxMF9zaGFyZWQ7CiAJbXY3OHh4MF9nZTEwLmRldi5wbGF0Zm9ybV9kYXRhID0gZXRoX2RhdGE7CiAKKwkvKgorCSAqIE9uIHRoZSBaMCwgZ2UxMCBhbmQgZ2UxMSBhcmUgaW50ZXJuYWxseSBjb25uZWN0ZWQgYmFjaworCSAqIHRvIGJhY2ssIGFuZCBub3QgYnJvdWdodCBvdXQuCisJICovCisJbXY3OHh4MF9wY2llX2lkKCZkZXYsICZyZXYpOworCWlmIChkZXYgPT0gTVY3OFgwMF9aMF9ERVZfSUQpIHsKKwkJZXRoX2RhdGEtPnBoeV9hZGRyID0gTVY2NDNYWF9FVEhfUEhZX05PTkU7CisJCWV0aF9kYXRhLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aF9kYXRhLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfZ2UxMF9zaGFyZWQpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXY3OHh4MF9nZTEwKTsKIH0KQEAgLTQ4NCwxMyArNDk5LDEwMSBAQAogCiB2b2lkIF9faW5pdCBtdjc4eHgwX2dlMTFfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpCiB7CisJdTMyIGRldiwgcmV2OworCiAJZXRoX2RhdGEtPnNoYXJlZCA9ICZtdjc4eHgwX2dlMTFfc2hhcmVkOwogCW12Nzh4eDBfZ2UxMS5kZXYucGxhdGZvcm1fZGF0YSA9IGV0aF9kYXRhOwogCisJLyoKKwkgKiBPbiB0aGUgWjAsIGdlMTAgYW5kIGdlMTEgYXJlIGludGVybmFsbHkgY29ubmVjdGVkIGJhY2sKKwkgKiB0byBiYWNrLCBhbmQgbm90IGJyb3VnaHQgb3V0LgorCSAqLworCW12Nzh4eDBfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAoZGV2ID09IE1WNzhYMDBfWjBfREVWX0lEKSB7CisJCWV0aF9kYXRhLT5waHlfYWRkciA9IE1WNjQzWFhfRVRIX1BIWV9OT05FOworCQlldGhfZGF0YS0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGhfZGF0YS0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJfQorCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2dlMTFfc2hhcmVkKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfZ2UxMSk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGJ1cyAwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YSBtdjc4eHgwX2kyY18wX3BkYXRhID0geworCS5mcmVxX20JCT0gOCwgLyogYXNzdW1lcyAxNjYgTUh6IFRDTEsgKi8KKwkuZnJlcV9uCQk9IDMsCisJLnRpbWVvdXQJPSAxMDAwLCAvKiBEZWZhdWx0IHRpbWVvdXQgb2YgMSBzZWNvbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY3OHh4MF9pMmNfMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiaTJjIDAgYmFzZSIsCisJCS5zdGFydCAgPSBJMkNfMF9QSFlTX0JBU0UsCisJCS5lbmQgICAgPSBJMkNfMF9QSFlTX0JBU0UgKyAweDFmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZSAgID0gImkyYyAwIGlycSIsCisJCS5zdGFydCAgPSBJUlFfTVY3OFhYMF9JMkNfMCwKKwkJLmVuZCAgICA9IElSUV9NVjc4WFgwX0kyQ18wLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXY3OHh4MF9pMmNfMCA9IHsKKwkubmFtZQkJPSBNVjY0WFhYX0kyQ19DVExSX05BTUUsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12Nzh4eDBfaTJjXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjc4eHgwX2kyY18wX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbXY3OHh4MF9pMmNfMF9wZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMgYnVzIDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhIG12Nzh4eDBfaTJjXzFfcGRhdGEgPSB7CisJLmZyZXFfbQkJPSA4LCAvKiBhc3N1bWVzIDE2NiBNSHogVENMSyAqLworCS5mcmVxX24JCT0gMywKKwkudGltZW91dAk9IDEwMDAsIC8qIERlZmF1bHQgdGltZW91dCBvZiAxIHNlY29uZCAqLworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjc4eHgwX2kyY18xX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUgICA9ICJpMmMgMSBiYXNlIiwKKwkJLnN0YXJ0ICA9IEkyQ18xX1BIWVNfQkFTRSwKKwkJLmVuZCAgICA9IEkyQ18xX1BIWVNfQkFTRSArIDB4MWYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5uYW1lICAgPSAiaTJjIDEgaXJxIiwKKwkJLnN0YXJ0ICA9IElSUV9NVjc4WFgwX0kyQ18xLAorCQkuZW5kICAgID0gSVJRX01WNzhYWDBfSTJDXzEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdjc4eHgwX2kyY18xID0geworCS5uYW1lCQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY3OHh4MF9pMmNfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG12Nzh4eDBfaTJjXzFfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZtdjc4eHgwX2kyY18xX3BkYXRhLAorCX0sCit9OworCit2b2lkIF9faW5pdCBtdjc4eHgwX2kyY19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2kyY18wKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfaTJjXzEpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNBVEEKQEAgLTcxOSw2ICs4MjIsMzIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJhbAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY2hhciAqIF9faW5pdCBtdjc4eHgwX2lkKHZvaWQpCit7CisJdTMyIGRldiwgcmV2OworCisJbXY3OHh4MF9wY2llX2lkKCZkZXYsICZyZXYpOworCisJaWYgKGRldiA9PSBNVjc4WDAwX1owX0RFVl9JRCkgeworCQlpZiAocmV2ID09IE1WNzhYMDBfUkVWX1owKQorCQkJcmV0dXJuICJNVjc4WDAwLVowIjsKKwkJZWxzZQorCQkJcmV0dXJuICJNVjc4WDAwLVJldi1VbnN1cHBvcnRlZCI7CisJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQpIHsKKwkJaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMCkKKwkJCXJldHVybiAiTVY3ODEwMC1BMCI7CisJCWVsc2UKKwkJCXJldHVybiAiTVY3ODEwMC1SZXYtVW5zdXBwb3J0ZWQiOworCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgyMDBfREVWX0lEKSB7CisJCWlmIChyZXYgPT0gTVY3ODEwMF9SRVZfQTApCisJCQlyZXR1cm4gIk1WNzgyMDAtQTAiOworCQllbHNlCisJCQlyZXR1cm4gIk1WNzgyMDAtUmV2LVVuc3VwcG9ydGVkIjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIkRldmljZS1Vbmtub3duIjsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGlzX2wyX3dyaXRldGhyb3VnaCh2b2lkKQogewogCXJldHVybiAhIShyZWFkbChDUFVfQ09OVFJPTCkgJiBMMl9XUklURVRIUk9VR0gpOwpAQCAtNzM3LDcgKzg2Niw4IEBACiAJZ2V0X3BjbGtfbDJjbGsoaGNsaywgY29yZV9pbmRleCwgJnBjbGssICZsMmNsayk7CiAJdGNsayA9IGdldF90Y2xrKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNVjc4eHgwIGNvcmUgIyVkLCAiLCBjb3JlX2luZGV4KTsKKwlwcmludGsoS0VSTl9JTkZPICIlcyAiLCBtdjc4eHgwX2lkKCkpOworCXByaW50aygiY29yZSAjJWQsICIsIGNvcmVfaW5kZXgpOwogCXByaW50aygiUENMSyA9ICVkTUh6LCAiLCAocGNsayArIDQ5OTk5OSkgLyAxMDAwMDAwKTsKIAlwcmludGsoIkwyID0gJWRNSHosICIsIChsMmNsayArIDQ5OTk5OSkgLyAxMDAwMDAwKTsKIAlwcmludGsoIkhDTEsgPSAlZE1IeiwgIiwgKGhjbGsgKyA0OTk5OTkpIC8gMTAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmgKaW5kZXggNzhhZjVkZS4uYmVmYzIyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uaApAQCAtMjksNiArMjksOCBAQAogdm9pZCBtdjc4eHgwX3NldHVwX3BjaWVfbWVtX3dpbihpbnQgd2luZG93LCB1MzIgYmFzZSwgdTMyIHNpemUsCiAJCQkJaW50IG1haiwgaW50IG1pbik7CiAKK3ZvaWQgbXY3OHh4MF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldik7CisKIHZvaWQgbXY3OHh4MF9laGNpMF9pbml0KHZvaWQpOwogdm9pZCBtdjc4eHgwX2VoY2kxX2luaXQodm9pZCk7CiB2b2lkIG12Nzh4eDBfZWhjaTJfaW5pdCh2b2lkKTsKQEAgLTQyLDYgKzQ0LDcgQEAKIHZvaWQgbXY3OHh4MF91YXJ0MV9pbml0KHZvaWQpOwogdm9pZCBtdjc4eHgwX3VhcnQyX2luaXQodm9pZCk7CiB2b2lkIG12Nzh4eDBfdWFydDNfaW5pdCh2b2lkKTsKK3ZvaWQgbXY3OHh4MF9pMmNfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbXY3OHh4MF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMKaW5kZXggMmUyODViYi4uZWZkYWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvZGI3OHgwMC1icC1zZXR1cC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yOCwyMSArMjksMjIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX2dlMTBfZGF0YSA9IHsKLQkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfTk9ORSwKLQkuc3BlZWQJCT0gU1BFRURfMTAwMCwKLQkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAorCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX2dlMTFfZGF0YSA9IHsKLQkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfTk9ORSwKLQkuc3BlZWQJCT0gU1BFRURfMTAwMCwKLQkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAorCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDExKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGRiNzh4MDBfc2F0YV9kYXRhID0gewogCS5uX3BvcnRzCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBkYjc4eDAwX2kyY19ydGMgPSB7CisJSTJDX0JPQVJEX0lORk8oImRzMTMzOCIsIDB4NjgpLAorfTsKKworCiBzdGF0aWMgdm9pZCBfX2luaXQgZGI3OHgwMF9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTY0LDYgKzY2LDggQEAKIAkJbXY3OHh4MF9zYXRhX2luaXQoJmRiNzh4MDBfc2F0YV9kYXRhKTsKIAkJbXY3OHh4MF91YXJ0MF9pbml0KCk7CiAJCW12Nzh4eDBfdWFydDJfaW5pdCgpOworCQltdjc4eHgwX2kyY19pbml0KCk7CisJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZkYjc4eDAwX2kyY19ydGMsIDEpOwogCX0gZWxzZSB7CiAJCW12Nzh4eDBfdWFydDFfaW5pdCgpOwogCQltdjc4eHgwX3VhcnQzX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKaW5kZXggZTkzMGVhNS4uNTgyY2ZmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKQEAgLTgwLDYgKzgwLDE4IEBACiAjZGVmaW5lICBUSU1FUl9WSVJUX0JBU0UJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAzMDApCiAKIC8qCisgKiBTdXBwb3J0ZWQgZGV2aWNlcyBhbmQgcmV2aXNpb25zLgorICovCisjZGVmaW5lIE1WNzhYMDBfWjBfREVWX0lECTB4NjM4MQorI2RlZmluZSBNVjc4WDAwX1JFVl9aMAkJMQorCisjZGVmaW5lIE1WNzgxMDBfREVWX0lECQkweDc4MTAKKyNkZWZpbmUgTVY3ODEwMF9SRVZfQTAJCTEKKworI2RlZmluZSBNVjc4MjAwX0RFVl9JRAkJMHg3ODIwCisjZGVmaW5lIE1WNzgyMDBfUkVWX0EwCQkxCisKKy8qCiAgKiBSZWdpc3RlciBNYXAKICAqLwogI2RlZmluZSBERFJfVklSVF9CQVNFCQkoTVY3OFhYMF9SRUdTX1ZJUlRfQkFTRSB8IDB4MDAwMDApCkBAIC05MCw2ICsxMDIsOCBAQAogI2RlZmluZSBERVZfQlVTX1ZJUlRfQkFTRQkoTVY3OFhYMF9SRUdTX1ZJUlRfQkFTRSB8IDB4MTAwMDApCiAjZGVmaW5lICBTQU1QTEVfQVRfUkVTRVRfTE9XCShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDAzMCkKICNkZWZpbmUgIFNBTVBMRV9BVF9SRVNFVF9ISUdICShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDAzNCkKKyNkZWZpbmUgIEkyQ18wX1BIWVNfQkFTRQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDEwMDApCisjZGVmaW5lICBJMkNfMV9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgxMTAwKQogI2RlZmluZSAgVUFSVDBfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjAwMCkKICNkZWZpbmUgIFVBUlQwX1ZJUlRfQkFTRQkoREVWX0JVU19WSVJUX0JBU0UgfCAweDIwMDApCiAjZGVmaW5lICBVQVJUMV9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgyMTAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggN2Q1MTc5NC4uMWQ2MzUwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBFbmFibGUgc29mdCByZXNldCB0byBhc3NlcnQgUlNUT1VUbi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcGNpZS5jCmluZGV4IGFhZDNhN2EuLmE1NjA0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3BjaWUuYwpAQCAtMzMsNiArMzMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpZV9tZW1fc3BhY2U7CiAKIAordm9pZCBfX2luaXQgbXY3OHh4MF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldikKK3sKKwkqZGV2ID0gb3Jpb25fcGNpZV9kZXZfaWQoKHZvaWQgX19pb21lbSAqKVBDSUUwMF9WSVJUX0JBU0UpOworCSpyZXYgPSBvcmlvbl9wY2llX3Jldigodm9pZCBfX2lvbWVtICopUENJRTAwX1ZJUlRfQkFTRSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtdjc4eHgwX3BjaWVfcHJlaW5pdCh2b2lkKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3JkNzh4MDAtbWFzYS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3JkNzh4MDAtbWFzYS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzZiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcmQ3OHgwMC1tYXNhLXNldHVwLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbXY3OHgwMC9yZDc4eDAwLW1hc2Etc2V0dXAuYworICoKKyAqIE1hcnZlbGwgUkQtNzh4MDAtbUFTQSBEZXZlbG9wbWVudCBCb2FyZCBTZXR1cAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSByZDc4eDAwX21hc2FfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkNzh4MDBfbWFzYV9nZTAxX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOSksCit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ3OHgwMF9tYXNhX2dlMTBfZGF0YSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSByZDc4eDAwX21hc2FfZ2UxMV9kYXRhID0geworfTsKKworc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgcmQ3OHgwMF9tYXNhX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcmQ3OHgwMF9tYXNhX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIE1WNzh4MDAgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwltdjc4eHgwX2luaXQoKTsKKworCS8qCisJICogUGFydGl0aW9uIG9uLWNoaXAgcGVyaXBoZXJhbHMgYmV0d2VlbiB0aGUgdHdvIENQVSBjb3Jlcy4KKwkgKi8KKwlpZiAobXY3OHh4MF9jb3JlX2luZGV4KCkgPT0gMCkgeworCQltdjc4eHgwX2VoY2kwX2luaXQoKTsKKwkJbXY3OHh4MF9laGNpMV9pbml0KCk7CisJCW12Nzh4eDBfZ2UwMF9pbml0KCZyZDc4eDAwX21hc2FfZ2UwMF9kYXRhKTsKKwkJbXY3OHh4MF9nZTEwX2luaXQoJnJkNzh4MDBfbWFzYV9nZTEwX2RhdGEpOworCQltdjc4eHgwX3NhdGFfaW5pdCgmcmQ3OHgwMF9tYXNhX3NhdGFfZGF0YSk7CisJCW12Nzh4eDBfdWFydDBfaW5pdCgpOworCQltdjc4eHgwX3VhcnQyX2luaXQoKTsKKwl9IGVsc2UgeworCQltdjc4eHgwX2VoY2kyX2luaXQoKTsKKwkJbXY3OHh4MF9nZTAxX2luaXQoJnJkNzh4MDBfbWFzYV9nZTAxX2RhdGEpOworCQltdjc4eHgwX2dlMTFfaW5pdCgmcmQ3OHgwMF9tYXNhX2dlMTFfZGF0YSk7CisJCW12Nzh4eDBfdWFydDFfaW5pdCgpOworCQltdjc4eHgwX3VhcnQzX2luaXQoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJkNzh4MDBfcGNpX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEFzc2lnbiBhbGwgUENJZSBkZXZpY2VzIHRvIENQVSBjb3JlICMwLgorCSAqLworCWlmIChtYWNoaW5lX2lzX3JkNzh4MDBfbWFzYSgpICYmIG12Nzh4eDBfY29yZV9pbmRleCgpID09IDApCisJCW12Nzh4eDBfcGNpZV9pbml0KDEsIDEpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwocmQ3OHgwMF9wY2lfaW5pdCk7CisKK01BQ0hJTkVfU1RBUlQoUkQ3OFgwMF9NQVNBLCAiTWFydmVsbCBSRC03OHgwMC1NQVNBIERldmVsb3BtZW50IEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4gKi8KKwkucGh5c19pbwk9IE1WNzhYWDBfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChNVjc4WFgwX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gcmQ3OHgwMF9tYXNhX2luaXQsCisJLm1hcF9pbwkJPSBtdjc4eHgwX21hcF9pbywKKwkuaW5pdF9pcnEJPSBtdjc4eHgwX2luaXRfaXJxLAorCS50aW1lcgkJPSAmbXY3OHh4MF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZwppbmRleCAyYjU5ZmM3Li5lYjc2NjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBpZiBBUkNIX01YMQogCi1jb21tZW50ICJNWDEgUGxhdGZvcm1zIgorY29tbWVudCAiTVgxIHBsYXRmb3JtczoiCiAKIGNvbmZpZyBNQUNIX01YTEFEUwogCWJvb2wKQEAgLTExLDQgKzExLDkgQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgTW90b3JvbGEgTVgxQURTL01YTEFEUyBib2FyZHMKIAorY29uZmlnIE1BQ0hfU0NCOTMyOAorCWJvb2wgIlN5bmVydHJvbml4eCBzY2I5MzI4IgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhIFN5bmVydHJvbml4eCBzY2I5MzI4IGJvYXJkCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlCmluZGV4IGI5Njk3MTkuLjgyZjEzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlCkBAIC04LDMgKzgsNCBAQAogCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19BUkNIX01YMUFEUykgKz0gbXgxYWRzLm8KK29iai0kKENPTkZJR19NQUNIX1NDQjkzMjgpICs9IHNjYjkzMjgubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCmluZGV4IDRiY2QxZWMuLjBkMGYzMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgImNybV9yZWdzLmgiCiAKIHN0YXRpYyBpbnQgX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQpAQCAtODcsMzMgKzg4LDYgQEAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnNldF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKIH0KIAotLyoKLSAqICBnZXQgdGhlIHN5c3RlbSBwbGwgY2xvY2sgaW4gSHoKLSAqCi0gKiAgICAgICAgICAgICAgICAgIG1maSArIG1mbiAvIChtZmQgKzEpCi0gKiAgZiA9IDIgKiBmX3JlZiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIHBkICsgMQotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBteDFfZGVjb2RlX3BsbCh1bnNpZ25lZCBpbnQgcGxsLCB1MzIgZl9yZWYpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxsOwotCXVuc2lnbmVkIGxvbmcgcXVvdDsKLQotCXUzMiBtZmkgPSAocGxsID4+IDEwKSAmIDB4ZjsKLQl1MzIgbWZuID0gcGxsICYgMHgzZmY7Ci0JdTMyIG1mZCA9IChwbGwgPj4gMTYpICYgMHgzZmY7Ci0JdTMyIHBkID0gIChwbGwgPj4gMjYpICYgMHhmOwotCi0JbWZpID0gbWZpIDw9IDUgPyA1IDogbWZpOwotCi0JbGwgPSAyICogKHVuc2lnbmVkIGxvbmcgbG9uZylmX3JlZiAqCi0JCSgobWZpIDw8IDE2KSArIChtZm4gPDwgMTYpIC8gKG1mZCArIDEpKTsKLQlxdW90ID0gKHBkICsgMSkgKiAoMSA8PCAxNik7Ci0JbGwgKz0gcXVvdCAvIDI7Ci0JZG9fZGl2KGxsLCBxdW90KTsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbGw7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsazE2bV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDE2MDAwMDAwOwpAQCAtMTg4LDcgKzE2Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c3RlbV9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBteDFfZGVjb2RlX3BsbChfX3Jhd19yZWFkbChDQ01fU1BDVEwwKSwKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCksCiAJCQkgICAgICBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpKTsKIH0KIApAQCAtMjAwLDcgKzE3NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1jdV9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBteDFfZGVjb2RlX3BsbChfX3Jhd19yZWFkbChDQ01fTVBDVEwwKSwKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCksCiAJCQkgICAgICBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpKTsKIH0KIApAQCAtNDg4LDcgKzQ2Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lID0gImRtYV9jbGsiLAorCS5uYW1lID0gImRtYSIsCiAJLnBhcmVudCA9ICZoY2xrLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKQEAgLTUzOSw3ICs1MTMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7Ci0JLm5hbWUgPSAidWFydF9jbGsiLAorCS5uYW1lID0gInVhcnQiLAogCS5wYXJlbnQgPSAmcGVyY2xrWzBdLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKQEAgLTYyMSw3ICs1OTUsNyBAQAogCSZydGNfY2xrLAogfTsKIAotaW50IF9faW5pdCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQoraW50IF9faW5pdCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXN0cnVjdCBjbGsgKipjbGtwOwogCXVuc2lnbmVkIGludCByZWc7CkBAIC02NTIsNSArNjI2LDcgQEAKIAljbGtfZW5hYmxlKCZoY2xrKTsKIAljbGtfZW5hYmxlKCZmY2xrKTsKIAorCW14Y190aW1lcl9pbml0KCZncHRfY2xrKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCmluZGV4IGE5NTY0NDEuLjk3ZjQyZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKQEAgLTIzLDEwICsyMywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X2NzaV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCAgPSAweDAwMjI0MDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwppbmRleCAzMjAwY2Y2Li43YWUyMjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2Y4NTd4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTI1LDcgKzI3LDExIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLW14Mi5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2lmZGVmIENPTkZJR19JMkNfSU1YCisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCkBAIC0xMDUsNiArMTExLDU1IEBACiB9OwogCiAvKgorICogSTJDCisgKi8KKworI2lmZGVmIENPTkZJR19JMkNfSU1YCitzdGF0aWMgaW50IGkyY19waW5zW10gPSB7CisJUEExNV9QRl9JMkNfU0RBLAorCVBBMTZfUEZfSTJDX1NDTCwKK307CisKK3N0YXRpYyBpbnQgaTJjX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGkyY19waW5zLAorCQkJQVJSQVlfU0laRShpMmNfcGlucyksICJJMkMiKTsKK30KKworc3RhdGljIHZvaWQgaTJjX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhpMmNfcGlucywKKwkJCUFSUkFZX1NJWkUoaTJjX3BpbnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmODU3eF9kYXRhW10gPSB7CisJeworCQkuZ3Bpb19iYXNlID0gNCAqIDMyLAorCX0sIHsKKwkJLmdwaW9fYmFzZSA9IDQgKiAzMiArIDE2LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgxYWRzX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorCS5pbml0ID0gaTJjX2luaXQsCisJLmV4aXQgPSBpMmNfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbXgxYWRzX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU3eCIsIDB4MjIpLAorCQkudHlwZSA9ICJwY2Y4NTc1IiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNmODU3eF9kYXRhWzBdLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1N3giLCAweDI0KSwKKwkJLnR5cGUgPSAicGNmODU3NSIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVsxXSwKKwl9LAorfTsKKyNlbmRpZgorCisvKgogICogQm9hcmQgaW5pdAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX2luaXQodm9pZCkKQEAgLTExNSwxMiArMTcwLDE5IEBACiAKIAkvKiBQaHlzbWFwIGZsYXNoICovCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmZmxhc2hfZGV2aWNlLCAmbXgxYWRzX2ZsYXNoX2RhdGEpOworCisJLyogSTJDICovCisjaWZkZWYgQ09ORklHX0kyQ19JTVgKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBteDFhZHNfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteDFhZHNfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9pMmNfZGV2aWNlLCAmbXgxYWRzX2kyY19kYXRhKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMzIwMDApOwotCW14Y190aW1lcl9pbml0KCJncHRfY2xrIik7CisJbXgxX2Nsb2Nrc19pbml0KDMyMDAwKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBteDFhZHNfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMgYi9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3MWYzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYWhhdWVyQHdlYi5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEp1ZXJnZW4gQmVpc2VydCA8amJlaXNlcnRAbmV0c2NhcGUubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoKKyAqIFRoaXMgc2NiOTMyOCBoYXMgYSAzMk1pQiBmbGFzaAorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IElNWF9DUzBfUEhZUywKKwkuZW5kCT0gSU1YX0NTMF9QSFlTICsgKDMyICogMTAyNCAqIDEwMjQpIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNjYl9mbGFzaF9kYXRhID0geworCS53aWR0aCAgPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NiX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2NiX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworLyoKKyAqIHNjYjkzMjggaGFzIGEgRE05MDAwIG5ldHdvcmsgY29udHJvbGxlcgorICogY29ubmVjdGVkIHRvIENTNSwgd2l0aCAxNiBiaXQgZGF0YSBwYXRoCisgKiBhbmQgaW50ZXJydXB0IGNvbm5lY3RlZCB0byBHUElPIDMKKyAqLworCisvKgorICogaW50ZXJuYWwgZGF0YXBhdGggaXMgZml4ZWQgMTYgYml0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBkbTkwMDBfcGxhdGRhdGEgPSB7CisJLmZsYWdzCT0gRE05MDAwX1BMQVRGXzE2QklUT05MWSwKK307CisKKy8qCisgKiB0aGUgRE05MDAwIGRyaXZlcnMgd2FudHMgdHdvIGRlZmluZWQgYWRkcmVzcyBzcGFjZXMKKyAqIHRvIGdhaW4gYWNjZXNzIHRvIGFkZHJlc3MgbGF0Y2ggcmVnaXN0ZXJzIGFuZCB0aGUgZGF0YSBwYXRoLgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMHhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJhZGRyZXNzIGFyZWEiLAorCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMsCisJCS5lbmQJPSBJTVhfQ1M1X1BIWVMgKyAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQkvKiBhZGRyZXNzIGFjY2VzcyAqLworCX0sCisJWzFdID0geworCQkubmFtZQk9ICJkYXRhIGFyZWEiLAorCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMgKyA0LAorCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgNSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogZGF0YSBhY2Nlc3MgKi8KKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0dQSU9DKDMpLAorCQkuZW5kCT0gSVJRX0dQSU9DKDMpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMHhfZGV2aWNlID0geworCS5uYW1lCQk9ICJkbTkwMDAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDB4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZG05MDAweF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRtOTAwMF9wbGF0ZGF0YSwKKwl9Cit9OworCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJUEM5X1BGX1VBUlQxX0NUUywKKwlQQzEwX1BGX1VBUlQxX1JUUywKKwlQQzExX1BGX1VBUlQxX1RYRCwKKwlQQzEyX1BGX1VBUlQxX1JYRCwKK307CisKK3N0YXRpYyBpbnQgdWFydDFfbXhjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLCAiVUFSVDEiKTsKK30KKworc3RhdGljIGludCB1YXJ0MV9teGNfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuaW5pdCA9IHVhcnQxX214Y19pbml0LAorCS5leGl0ID0gdWFydDFfbXhjX2V4aXQsCisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NiX2ZsYXNoX2RldmljZSwKKwkmZG05MDAweF9kZXZpY2UsCit9OworCisvKgorICogc2NiOTMyOF9pbml0IC0gSW5pdCB0aGUgQ1BVIGNhcmQgaXRzZWxmCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzY2I5MzI4X2luaXQodm9pZCkKK3sKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDFfZGV2aWNlLCAmdWFydF9wZGF0YSk7CisKKwlwcmludGsoS0VSTl9JTkZPIlNjYjkzMjg6IEFkZGluZyBkZXZpY2VzXG4iKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNjYjkzMjhfdGltZXJfaW5pdCh2b2lkKQoreworCW14MV9jbG9ja3NfaW5pdCgzMjAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHNjYjkzMjhfdGltZXIgPSB7CisJLmluaXQJPSBzY2I5MzI4X3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKFNDQjkzMjgsICJTeW5lcnRyb25peHggc2NiOTMyOCIpCisgICAgLyogU2FzY2hhIEhhdWVyICovCisJLnBoeXNfaW8JPSAweDAwMjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhlMDIwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDgwMDAxMDAsCisJLm1hcF9pbwkJPSBteGNfbWFwX2lvLAorCS5pbml0X2lycQk9IG14Y19pbml0X2lycSwKKwkudGltZXIJCT0gJnNjYjkzMjhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHNjYjkzMjhfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZwppbmRleCAxZWFhOTdjLi40MmE3ODg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKQEAgLTEsMTQgKzEsMjIgQEAKLWNvbW1lbnQgIk1YMiBmYW1pbHkgQ1BVIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX01YMgoraWYgQVJDSF9NWDIKKworY2hvaWNlCisJcHJvbXB0ICJDUFVzOiIKKwlkZWZhdWx0IE1BQ0hfTVgyMQorCitjb25maWcgTUFDSF9NWDIxCisJYm9vbCAiaS5NWDIxIHN1cHBvcnQiCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSdzIE1YMiBiYXNlZCBpLk1YMjEgcHJvY2Vzc29yLgogCiBjb25maWcgTUFDSF9NWDI3CiAJYm9vbCAiaS5NWDI3IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX01YMgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNWDIgYmFzZWQgaS5NWDI3IHByb2Nlc3Nvci4KIAotY29tbWVudCAiTVgyIFBsYXRmb3JtcyIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgyCitlbmRjaG9pY2UKKworY29tbWVudCAiTVgyIHBsYXRmb3JtczoiCiAKIGNvbmZpZyBNQUNIX01YMjdBRFMKIAlib29sICJNWDI3QURTIHBsYXRmb3JtIgpAQCAtMzcsMyArNDUsNSBAQAogCSAgUENNOTcwIGV2YWx1YXRpb24gYm9hcmQuCiAKIGVuZGNob2ljZQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQppbmRleCAzODJkODYwLi45NTA2NDlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQpAQCAtNCw3ICs0LDkgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJOj0gIHN5c3RlbS5vIGdlbmVyaWMubyBkZXZpY2VzLm8gc2VyaWFsLm8KK29iai15CTo9ICBnZW5lcmljLm8gZGV2aWNlcy5vIHNlcmlhbC5vCisKK29iai0kKENPTkZJR19NQUNIX01YMjEpICs9IGNsb2NrX2lteDIxLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfTVgyNykgKz0gY3B1X2lteDI3Lm8KIG9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrX2lteDI3Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZS5ib290CmluZGV4IDY5NjgzMWRjZC4uZTg2NzM5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUuYm9vdAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZS5ib290CkBAIC0xLDMgKzEsNyBAQAotICAgenJlbGFkZHIteQk6PSAweEEwMDA4MDAwCi1wYXJhbXNfcGh5cy15CTo9IDB4QTAwMDAxMDAKLWluaXRyZF9waHlzLXkJOj0gMHhBMDgwMDAwMAorenJlbGFkZHItJChDT05GSUdfTUFDSF9NWDIxKQk6PSAweEMwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19NQUNIX01YMjEpCTo9IDB4QzAwMDAxMDAKK2luaXRyZF9waHlzLSQoQ09ORklHX01BQ0hfTVgyMSkJOj0gMHhDMDgwMDAwMAorCit6cmVsYWRkci0kKENPTkZJR19NQUNIX01YMjcpCTo9IDB4QTAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX01BQ0hfTVgyNykJOj0gMHhBMDAwMDEwMAoraW5pdHJkX3BoeXMtJChDT05GSUdfTUFDSF9NWDI3KQk6PSAweEEwODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVlNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKiBDb3B5cmlnaHQgMjAwOCBNYXJ0aW4gRnV6emV5LCBtZnV6emV5QGdtYWlsLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKworc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgaW50IF9jbGtfc3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisJcmVnIHw9IENDTV9DU0NSX1NQRU47CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOworCisJd2hpbGUgKChfX3Jhd19yZWFkbChDQ01fU1BDVEwxKSAmIENDTV9TUENUTDFfTEYpID09IDApCisJCTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa19zcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisJcmVnICY9IH5DQ01fQ1NDUl9TUEVOOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKK30KKworCisjZGVmaW5lIENTQ1IoKSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpKQorI2RlZmluZSBQQ0RSMCgpIChfX3Jhd19yZWFkbChDQ01fUENEUjApKQorI2RlZmluZSBQQ0RSMSgpIChfX3Jhd19yZWFkbChDQ01fUENEUjEpKQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BlcmNsa3hfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlpZiAocGFyZW50X3JhdGUgJSByYXRlKQorCQlkaXYrKzsKKworCWlmIChkaXYgPiA2NCkKKwkJZGl2ID0gNjQ7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19wZXJjbGt4X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiByZWc7CisJdTMyIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+aWQgPCAwIHx8IGNsay0+aWQgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlpZiAoZGl2ID4gNjQgfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGl2LS07CisKKwlyZWcgPQorCSAgICBfX3Jhd19yZWFkbChDQ01fUENEUjEpICYgfihDQ01fUENEUjFfUEVSRElWMV9NQVNLIDw8CisJCQkJICAgICAgIChjbGstPmlkIDw8IDMpKTsKKwlyZWcgfD0gZGl2IDw8IChjbGstPmlkIDw8IDMpOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa191c2JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHVzYl9wZGY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXVzYl9wZGYgPSAoQ1NDUigpICYgQ0NNX0NTQ1JfVVNCX01BU0spID4+IENDTV9DU0NSX1VTQl9PRkZTRVQ7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAodXNiX3BkZiArIDFVKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19zc2l4X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcGRmKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlwZGYgPSAocGRmIDwgMikgPyAxMjRVTCA6IHBkZjsgIC8qIE1YMjEgJiBNWDI3IFRPMSAqLworCisJcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gcGRmOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTFfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gX2Nsa19zc2l4X3JlY2FsYyhjbGssCisJCShQQ0RSMCgpICYgQ0NNX1BDRFIwX1NTSTFCQVVERElWX01BU0spCisJCT4+IENDTV9QQ0RSMF9TU0kxQkFVRERJVl9PRkZTRVQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gX2Nsa19zc2l4X3JlY2FsYyhjbGssCisJCShQQ0RSMCgpICYgQ0NNX1BDRFIwX1NTSTJCQVVERElWX01BU0spID4+CisJCUNDTV9QQ0RSMF9TU0kyQkFVRERJVl9PRkZTRVQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX25mY19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJbmZjX3BkZiA9IChQQ0RSMCgpICYgQ0NNX1BDRFIwX05GQ0RJVl9NQVNLKQorCQk+PiBDQ01fUENEUjBfTkZDRElWX09GRlNFVDsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIChuZmNfcGRmICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfcGFyZW50X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yb3VuZF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKK30KKworc3RhdGljIGludCBfY2xrX3BhcmVudF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnNldF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2U7IC8qIGluIEh6ICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9oaWdoX3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2U7Cit9CisKKy8qCisgKiB0aGUgaGlnaCBmcmVxdWVuY3kgZXh0ZXJuYWwgY2xvY2sgcmVmZXJlbmNlCisgKiBEZWZhdWx0IGNhc2UgaXMgMjZNSHouCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrID0geworCS5nZXRfcmF0ZSA9IGdldF9oaWdoX3JlZmVyZW5jZV9jbG9ja19yYXRlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsgLyogaW4gSHogKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xvd19yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7Cit9CisKKy8qCisgKiB0aGUgbG93IGZyZXF1ZW5jeSBleHRlcm5hbCBjbG9jayByZWZlcmVuY2UKKyAqIERlZmF1bHQgY2FzZSBpcyAzMi43NjhrSHouCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWxfY2xrID0geworCS5nZXRfcmF0ZSA9IGdldF9sb3dfcmVmZXJlbmNlX2Nsb2NrX3JhdGUsCit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfZnBtX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgKiA1MTI7Cit9CisKKy8qIE91dHB1dCBvZiBmcmVxdWVuY3kgcHJlIG11bHRpcGxpZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZwbV9jbGsgPSB7CisJLnBhcmVudCA9ICZja2lsX2NsaywKKwkuZ2V0X3JhdGUgPSBfY2xrX2ZwbV9yZWNhbGMsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbXBsbF9jbGsoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IHJlZzsKKwl1bnNpZ25lZCBsb25nIHJlZl9jbGs7CisJdW5zaWduZWQgbG9uZyBtZmkgPSAwLCBtZm4gPSAwLCBtZmQgPSAwLCBwZGYgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wOworCisJcmVmX2NsayA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fTVBDVEwwKTsKKwlwZGYgPSAocmVnICYgQ0NNX01QQ1RMMF9QRF9NQVNLKSAgPj4gQ0NNX01QQ1RMMF9QRF9PRkZTRVQ7CisJbWZkID0gKHJlZyAmIENDTV9NUENUTDBfTUZEX01BU0spID4+IENDTV9NUENUTDBfTUZEX09GRlNFVDsKKwltZmkgPSAocmVnICYgQ0NNX01QQ1RMMF9NRklfTUFTSykgPj4gQ0NNX01QQ1RMMF9NRklfT0ZGU0VUOworCW1mbiA9IChyZWcgJiBDQ01fTVBDVEwwX01GTl9NQVNLKSA+PiBDQ01fTVBDVEwwX01GTl9PRkZTRVQ7CisKKwltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKKwl0ZW1wID0gMkxMICogcmVmX2NsayAqIG1mbjsKKwlkb19kaXYodGVtcCwgbWZkICsgMSk7CisJdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZmkgKyB0ZW1wOworCWRvX2Rpdih0ZW1wLCBwZGYgKyAxKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZyl0ZW1wOworfQorCitzdGF0aWMgc3RydWN0IGNsayBtcGxsX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9tcGxsX2NsaywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfZmNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKwl1MzIgZGl2OworCisJZGl2ID0gKENTQ1IoKSAmIENDTV9DU0NSX1BSRVNDX01BU0spID4+IENDTV9DU0NSX1BSRVNDX09GRlNFVDsKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2KzEpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBmY2xrX2NsayA9IHsKKwkucGFyZW50ID0gJm1wbGxfY2xrLAorCS5nZXRfcmF0ZSA9IF9jbGtfZmNsa19nZXRfcmF0ZQorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NwbGxfY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1aW50MzJfdCByZWc7CisJdW5zaWduZWQgbG9uZyByZWZfY2xrOworCXVuc2lnbmVkIGxvbmcgbWZpID0gMCwgbWZuID0gMCwgbWZkID0gMCwgcGRmID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKKworCXJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCk7CisJcGRmID0gKHJlZyAmIENDTV9TUENUTDBfUERfTUFTSykgPj4gQ0NNX1NQQ1RMMF9QRF9PRkZTRVQ7CisJbWZkID0gKHJlZyAmIENDTV9TUENUTDBfTUZEX01BU0spID4+IENDTV9TUENUTDBfTUZEX09GRlNFVDsKKwltZmkgPSAocmVnICYgQ0NNX1NQQ1RMMF9NRklfTUFTSykgPj4gQ0NNX1NQQ1RMMF9NRklfT0ZGU0VUOworCW1mbiA9IChyZWcgJiBDQ01fU1BDVEwwX01GTl9NQVNLKSA+PiBDQ01fU1BDVEwwX01GTl9PRkZTRVQ7CisKKwltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKKwl0ZW1wID0gMkxMICogcmVmX2NsayAqIG1mbjsKKwlkb19kaXYodGVtcCwgbWZkICsgMSk7CisJdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZmkgKyB0ZW1wOworCWRvX2Rpdih0ZW1wLCBwZGYgKyAxKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZyl0ZW1wOworfQorCitzdGF0aWMgc3RydWN0IGNsayBzcGxsX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9zcGxsX2NsaywKKwkuZW5hYmxlID0gX2Nsa19zcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfc3BsbF9kaXNhYmxlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2hjbGtfY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdW5zaWduZWQgbG9uZyBiY2xrX3BkZjsKKworCWJjbGtfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX0JDTEtfTUFTSykKKwkJPj4gQ0NNX0NTQ1JfQkNMS19PRkZTRVQ7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlyZXR1cm4gcmF0ZSAvIChiY2xrX3BkZiArIDEpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBoY2xrX2NsayA9IHsKKwkucGFyZW50ID0gJmZjbGtfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9oY2xrX2NsaywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9pcGdfY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdW5zaWduZWQgbG9uZyBpcGdfcGRmOworCisJaXBnX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9JUERJVikgPj4gQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoaXBnX3BkZiArIDEpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrID0geworCS5wYXJlbnQgPSAmaGNsa19jbGssCisJLmdldF9yYXRlID0gZ2V0X2lwZ19jbGssCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BlcmNsa3hfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBlcmNsa19wZGY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWlmIChjbGstPmlkIDwgMCB8fCBjbGstPmlkID4gMykKKwkJcmV0dXJuIDA7CisKKwlwZXJjbGtfcGRmID0gKFBDRFIxKCkgPj4gKGNsay0+aWQgPDwgMykpICYgQ0NNX1BDRFIxX1BFUkRJVjFfTUFTSzsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIChwZXJjbGtfcGRmICsgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmbXBsbF9jbGssCisJCS5nZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9yZWNhbGMsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJm1wbGxfY2xrLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkJLnJvdW5kX3JhdGUgPSBfY2xrX3BlcmNsa3hfcm91bmRfcmF0ZSwKKwkJLnNldF9yYXRlID0gX2Nsa19wZXJjbGt4X3NldF9yYXRlLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAorCQkvKiBFbmFibGUvRGlzYWJsZSBkb25lIHZpYSBsY2RfY2xrY1sxXSAqLworCX0sIHsKKwkJLmlkID0gMywKKwkJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkJLnJvdW5kX3JhdGUgPSBfY2xrX3BlcmNsa3hfcm91bmRfcmF0ZSwKKwkJLnNldF9yYXRlID0gX2Nsa19wZXJjbGt4X3NldF9yYXRlLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAorCQkvKiBFbmFibGUvRGlzYWJsZSBkb25lIHZpYSBjc2lfY2xrWzFdICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfaXBnX2Nsa1tdOworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJnVhcnRfaXBnX2Nsa1swXSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKKwkJLnNlY29uZGFyeSA9ICZ1YXJ0X2lwZ19jbGtbMV0sCisJfSwgeworCQkuaWQgPSAyLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmdWFydF9pcGdfY2xrWzJdLAorCX0sIHsKKwkJLmlkID0gMywKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJnVhcnRfaXBnX2Nsa1szXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9pcGdfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9VQVJUMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9VQVJUMV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfVUFSVDJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVUFSVDJfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1VBUlQzX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1VBUlQzX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAzLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9VQVJUNF9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9VQVJUNF9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHRfaXBnX2Nsa1tdOworCitzdGF0aWMgc3RydWN0IGNsayBncHRfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmZ3B0X2lwZ19jbGtbMF0sCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmZ3B0X2lwZ19jbGtbMV0sCisJfSwgeworCQkuaWQgPSAyLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmZ3B0X2lwZ19jbGtbMl0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9pcGdfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9HUFQxX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0dQVDFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0dQVDJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfR1BUMl9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfR1BUM19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9HUFQzX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGtbXSA9IHsKKwl7CisJCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKKwkJLnNlY29uZGFyeSA9ICZwd21fY2xrWzFdLAorCX0sIHsKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfUFdNX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1BXTV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZGhjX2lwZ19jbGtbXTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1sxXSwKKwkJLnNlY29uZGFyeSA9ICZzZGhjX2lwZ19jbGtbMF0sCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCisJCS5zZWNvbmRhcnkgPSAmc2RoY19pcGdfY2xrWzFdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZGhjX2lwZ19jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NESEMxX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1NESEMxX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9TREhDMl9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TREhDMl9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjc3BpX2lwZ19jbGtbXTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NwaV9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1sxXSwKKwkJLnNlY29uZGFyeSA9ICZjc3BpX2lwZ19jbGtbMF0sCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCisJCS5zZWNvbmRhcnkgPSAmY3NwaV9pcGdfY2xrWzFdLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAorCQkuc2Vjb25kYXJ5ID0gJmNzcGlfaXBnX2Nsa1syXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NwaV9pcGdfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9DU1BJMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9DU1BJMV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfQ1NQSTJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfQ1NQSTJfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDMsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0NTUEkzX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0NTUEkzX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnBlcl9jbGtbMl0sCisJCS5zZWNvbmRhcnkgPSAmbGNkY19jbGtbMV0sCisJCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCisJfSwgeworCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5zZWNvbmRhcnkgPSAmbGNkY19jbGtbMl0sCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9MQ0RDX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0xDRENfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5wYXJlbnQgPSAmaGNsa19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9IQ0xLX0xDRENfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzaV9jbGtbXSA9IHsKKwl7CisJCS5wYXJlbnQgPSAmcGVyX2Nsa1szXSwKKwkJLnNlY29uZGFyeSA9ICZjc2lfY2xrWzFdLAorCQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorCX0sIHsKKwkJLnBhcmVudCA9ICZoY2xrX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0hDTEtfQ1NJX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfQ1NJX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtbXSA9IHsKKwl7CisJCS5wYXJlbnQgPSAmc3BsbF9jbGssCisJCS5nZXRfcmF0ZSA9IF9jbGtfdXNiX3JlY2FsYywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1VTQk9UR19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9VU0JPVEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5wYXJlbnQgPSAmaGNsa19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9IQ0xLX1VTQk9UR19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9pcGdfY2xrW107CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmbXBsbF9jbGssCisJCS5zZWNvbmRhcnkgPSAmc3NpX2lwZ19jbGtbMF0sCisJCS5nZXRfcmF0ZSA9IF9jbGtfc3NpMV9yZWNhbGMsCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9TU0kxX0JBVURfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU1NJMV9CQVVEX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJm1wbGxfY2xrLAorCQkuc2Vjb25kYXJ5ID0gJnNzaV9pcGdfY2xrWzFdLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3NzaTJfcmVjYWxjLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU1NJMl9CQVVEX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1NTSTJfQkFVRF9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU1NJMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TU0kxX0lQR19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU1NJMl9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TU0kyX0lQR19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG5mY19jbGsgPSB7CisJLnBhcmVudCA9ICZmY2xrX2NsaywKKwkuZ2V0X3JhdGUgPSBfY2xrX25mY19yZWNhbGMsCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfTkZDX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfTkZDX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jbGtbXSA9IHsKKwl7CisJCS5wYXJlbnQgPSAmaGNsa19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9ETUFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfRE1BX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJCS5zZWNvbmRhcnkgPSAmZG1hX2Nsa1sxXSwKKwl9LCAgeworCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19ETUFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19ETUFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYnJvbV9jbGsgPSB7CisJLnBhcmVudCA9ICZoY2xrX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9IQ0xLX0JST01fUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9IQ0xLX0JST01fT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW1tYV9jbGtbXSA9IHsKKwl7CisJCS5wYXJlbnQgPSAmaGNsa19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9FTU1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0VNTUFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwkJLnNlY29uZGFyeSA9ICZlbW1hX2Nsa1sxXSwKKwl9LCB7CisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9IQ0xLX0VNTUFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19FTU1BX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2xjZGNfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU0xDRENfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU0xDRENfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwkJLnNlY29uZGFyeSA9ICZzbGNkY19jbGtbMV0sCisJfSwgeworCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19TTENEQ19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9IQ0xLX1NMQ0RDX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2RvZ19jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1dEVF9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1dEVF9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvX2NsayA9IHsKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfR1BJT19SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0dQSU9fT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjX2NsayA9IHsKKwkuaWQgPSAwLAorCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9JMkMxX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSTJDMV9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBrcHBfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9LUFBfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9LUFBfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb3dpcmVfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9PV0lSRV9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX09XSVJFX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJ0Y19jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1JUQ19SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1JUQ19PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2Nsa29fcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCisJCWRpdisrOworCisJaWYgKGRpdiA+IDgpCisJCWRpdiA9IDg7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19jbGtvX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiByZWc7CisJdTMyIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdiA+IDggfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGl2LS07CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUjApOworCisJaWYgKGNsay0+cGFyZW50ID09ICZ1c2JfY2xrWzBdKSB7CisJCXJlZyAmPSB+Q0NNX1BDRFIwXzQ4TURJVl9NQVNLOworCQlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUOworCX0KKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUjApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfY2xrb19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBkaXYgPSAwOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoY2xrLT5wYXJlbnQgPT0gJnVzYl9jbGtbMF0pIC8qIDQ4TSAqLworCQlkaXYgPSBfX3Jhd19yZWFkbChDQ01fUENEUjApICYgQ0NNX1BDRFIwXzQ4TURJVl9NQVNLCisJCQkgPj4gQ0NNX1BDRFIwXzQ4TURJVl9PRkZTRVQ7CisJZGl2Kys7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa29fY2xrOworCitzdGF0aWMgaW50IF9jbGtfY2xrb19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ0NTUikgJiB+Q0NNX0NDU1JfQ0xLT1NFTF9NQVNLOworCisJaWYgKHBhcmVudCA9PSAmY2tpbF9jbGspCisJCXJlZyB8PSAwIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmZnBtX2NsaykKKwkJcmVnIHw9IDEgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZja2loX2NsaykKKwkJcmVnIHw9IDIgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09IG1wbGxfY2xrLnBhcmVudCkKKwkJcmVnIHw9IDMgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09IHNwbGxfY2xrLnBhcmVudCkKKwkJcmVnIHw9IDQgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZtcGxsX2NsaykKKwkJcmVnIHw9IDUgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZzcGxsX2NsaykKKwkJcmVnIHw9IDYgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZmY2xrX2NsaykKKwkJcmVnIHw9IDcgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZoY2xrX2NsaykKKwkJcmVnIHw9IDggPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZpcGdfY2xrKQorCQlyZWcgfD0gOSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbMF0pCisJCXJlZyB8PSAweEEgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzFdKQorCQlyZWcgfD0gMHhCIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1syXSkKKwkJcmVnIHw9IDB4QyA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbM10pCisJCXJlZyB8PSAweEQgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZzc2lfY2xrWzBdKQorCQlyZWcgfD0gMHhFIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmc3NpX2Nsa1sxXSkKKwkJcmVnIHw9IDB4RiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJm5mY19jbGspCisJCXJlZyB8PSAweDEwIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmdXNiX2Nsa1swXSkKKwkJcmVnIHw9IDB4MTQgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZjbGtvX2NsaykKKwkJcmVnIHw9IDB4MTUgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DQ1NSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtvX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBfY2xrX2Nsa29fcmVjYWxjLAorCS5zZXRfcmF0ZSA9IF9jbGtfY2xrb19zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfY2xrb19yb3VuZF9yYXRlLAorCS5zZXRfcGFyZW50ID0gX2Nsa19jbGtvX3NldF9wYXJlbnQsCit9OworCisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCBcCisJfSwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gX19pbml0ZGF0YSA9IHsKKy8qIEl0J3MgdW5saWtlbHkgdGhhdCBhbnkgZHJpdmVyIHdhbnRzIG9uZSBvZiB0aGVtIGRpcmVjdGx5OgorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2tpaCIsIGNraWhfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2tpbCIsIGNraWxfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZnBtIiwgZnBtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1wbGwiLCBtcGxsX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNwbGwiLCBzcGxsX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImZjbGsiLCBmY2xrX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImhjbGsiLCBoY2xrX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImlwZyIsIGlwZ19jbGspCisqLworCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicGVyY2xrMSIsIHBlcl9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwZXJjbGsyIiwgcGVyX2Nsa1sxXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInBlcmNsazMiLCBwZXJfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicGVyY2xrNCIsIHBlcl9jbGtbM10pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjbGtvIiwgY2xrb19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydF9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydF9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydF9jbGtbMl0pCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4zIiwgTlVMTCwgdWFydF9jbGtbM10pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQxIiwgZ3B0X2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDEiLCBncHRfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MSIsIGdwdF9jbGtbMl0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwd20iLCBwd21fY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RoYzEiLCBzZGhjX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkaGMyIiwgc2RoY19jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMSIsIGNzcGlfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpX2Nsa1sxXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkzIiwgY3NwaV9jbGtbMl0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJsY2RjIiwgbGNkY19jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidXNiIiwgdXNiX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTEiLCBzc2lfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMiIsIHNzaV9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJuZmMiLCBuZmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZG1hIiwgZG1hX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImJyb20iLCBicm9tX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVtbWEiLCBlbW1hX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNsY2RjIiwgc2xjZGNfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3BpbyIsIGdwaW9fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaTJjIiwgaTJjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1rZXlwYWQiLCBOVUxMLCBrcHBfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAib3dpcmUiLCBvd2lyZV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQorfTsKKworLyoKKyAqIG11c3QgYmUgY2FsbGVkIHZlcnkgZWFybHkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogYXZhaWxhYmxlIGNsb2NrIHJhdGUgd2hlbiB0aGUgdGltZXIgZnJhbWV3b3JrIHN0YXJ0cworICovCitpbnQgX19pbml0IG14MjFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBscmVmLCB1bnNpZ25lZCBsb25nIGhyZWYpCit7CisJaW50IGk7CisJdTMyIGNzY3I7CisKKwlleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gbHJlZjsKKwlleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSA9IGhyZWY7CisKKwkvKiBkZXRlY3QgY2xvY2sgcmVmZXJlbmNlIGZvciBib3RoIHN5c3RlbSBQTEwgKi8KKwljc2NyID0gQ1NDUigpOworCWlmIChjc2NyICYgQ0NNX0NTQ1JfTUNVKQorCQltcGxsX2Nsay5wYXJlbnQgPSAmY2tpaF9jbGs7CisJZWxzZQorCQltcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKKworCWlmIChjc2NyICYgQ0NNX0NTQ1JfU1ApCisJCXNwbGxfY2xrLnBhcmVudCA9ICZja2loX2NsazsKKwllbHNlCisJCXNwbGxfY2xrLnBhcmVudCA9ICZmcG1fY2xrOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisKKwkvKiBUdXJuIG9mZiBhbGwgY2xvY2sgZ2F0ZXMgKi8KKwlfX3Jhd193cml0ZWwoMCwgQ0NNX1BDQ1IwKTsKKwlfX3Jhd193cml0ZWwoQ0NNX1BDQ1JfR1BUMV9NQVNLLCBDQ01fUENDUjEpOworCisJLyogVGhpcyB0dXJucyBvZiB0aGUgc2VyaWFsIFBMTCBhcyB3ZWxsICovCisJc3BsbF9jbGsuZGlzYWJsZSgmc3BsbF9jbGspOworCisJLyogVGhpcyB3aWxsIHByb3BhZ2F0ZSB0byBhbGwgY2hpbGRyZW4gYW5kIGluaXQgYWxsIHRoZSBjbG9jayByYXRlcy4gKi8KKwljbGtfZW5hYmxlKCZwZXJfY2xrWzBdKTsKKwljbGtfZW5hYmxlKCZncGlvX2Nsayk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTExfQ09OU09MRQorCWNsa19lbmFibGUoJnVhcnRfY2xrWzBdKTsKKyNlbmRpZgorCisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGtbMF0pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggYzY5ODk2ZC4uM2Y3MjgwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKiBDb3B5cmlnaHQgMjAwOCBNYXJ0aW4gRnV6emV5LCBtZnV6emV5QGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMCwyMyArMjEsNjAgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJjcm1fcmVncy5oIgorLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBDQ01fQ1NDUiAgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MCkKKyNkZWZpbmUgQ0NNX01QQ1RMMCAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDQpCisjZGVmaW5lIENDTV9NUENUTDEgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHg4KQorI2RlZmluZSBDQ01fU1BDVEwwICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4QykKKyNkZWZpbmUgQ0NNX1NQQ1RMMSAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDEwKQorI2RlZmluZSBDQ01fT1NDMjZNQ1RMICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MTQpCisjZGVmaW5lIENDTV9QQ0RSMCAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxOCkKKyNkZWZpbmUgQ0NNX1BDRFIxICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDFjKQorI2RlZmluZSBDQ01fUENDUjAgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MjApCisjZGVmaW5lIENDTV9QQ0NSMSAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgyNCkKKyNkZWZpbmUgQ0NNX0NDU1IgICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDI4KQorI2RlZmluZSBDQ01fUE1DVEwgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MmMpCisjZGVmaW5lIENDTV9QTUNPVU5UICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgzMCkKKyNkZWZpbmUgQ0NNX1dLR0RDVEwgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDM0KQogCi1zdGF0aWMgc3RydWN0IGNsayBja2lsX2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9tYWluX2Nsa1tdOwotc3RhdGljIHN0cnVjdCBjbGsgc3BsbF9jbGs7CisjZGVmaW5lIENDTV9DU0NSX1VQREFURV9ESVMJKDEgPDwgMzEpCisjZGVmaW5lIENDTV9DU0NSX1NTSTIJCSgxIDw8IDIzKQorI2RlZmluZSBDQ01fQ1NDUl9TU0kxCQkoMSA8PCAyMikKKyNkZWZpbmUgQ0NNX0NTQ1JfVlBVCQkoMSA8PCAyMSkKKyNkZWZpbmUgQ0NNX0NTQ1JfTVNIQyAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIENDTV9DU0NSX1NQTExSRVMgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBDQ01fQ1NDUl9NUExMUkVTICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgQ0NNX0NTQ1JfU1AgICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIENDTV9DU0NSX01DVSAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk1ESVYgICAgICAoMSA8PCA0KQorI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk0gICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBDQ01fQ1NDUl9GUE0gICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBDQ01fQ1NDUl9TUEVOICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBDQ01fQ1NDUl9NUEVOICAgICAgICAgICAoMSA8PCAwKQogCi1zdGF0aWMgaW50IF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKKy8qIGkuTVgyNyBUTyAyKyAqLworI2RlZmluZSBDQ01fQ1NDUl9BUk1fU1JDICAgICAgICAoMSA8PCAxNSkKKworI2RlZmluZSBDQ01fU1BDVEwxX0xGICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgQ0NNX1NQQ1RMMV9CUk1PICAgICAgICAgKDEgPDwgNikKKworc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9tYWluMV9jbGssIG1wbGxfbWFpbjJfY2xrOworCitzdGF0aWMgaW50IGNsa19wY2NyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyByZWc7CiAKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykKKwkJcmV0dXJuIDA7CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyB8PSAxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OwogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CkBAIC00NCwxNiArODIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIGNsa19wY2NyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwogCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpCisJCXJldHVybjsKKwogCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CiAJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAotc3RhdGljIGludCBfY2xrX3NwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyBpbnQgY2xrX3NwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHJlZzsKIApAQCAtNjEsMTMgKzEwMiwxMiBAQAogCXJlZyB8PSBDQ01fQ1NDUl9TUEVOOwogCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKIAotCXdoaWxlICgoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMSkgJiBDQ01fU1BDVEwxX0xGKSA9PSAwKQotCQk7CisJd2hpbGUgKCEoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMSkgJiBDQ01fU1BDVEwxX0xGKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19zcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgY2xrX3NwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyByZWc7CiAKQEAgLTc2LDE5MiArMTE2LDMwIEBACiAJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOwogfQogCi1zdGF0aWMgdm9pZCBfY2xrX3BjY3IwMV9lbmFibGUodW5zaWduZWQgbG9uZyBtYXNrMCwgdW5zaWduZWQgbG9uZyBtYXNrMSkKK3N0YXRpYyBpbnQgY2xrX2NwdV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQogewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IwKTsKLQlyZWcgfD0gbWFzazA7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IwKTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMSk7Ci0JcmVnIHw9IG1hc2sxOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgX2Nsa19wY2NyMDFfZGlzYWJsZSh1bnNpZ25lZCBsb25nIG1hc2swLCB1bnNpZ25lZCBsb25nIG1hc2sxKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IwKTsKLQlyZWcgJj0gfm1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyAmPSB+bWFzazE7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IxKTsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19wY2NyMTBfZW5hYmxlKHVuc2lnbmVkIGxvbmcgbWFzazEsIHVuc2lnbmVkIGxvbmcgbWFzazApCi17Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyB8PSBtYXNrMTsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjEpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IwKTsKLQlyZWcgfD0gbWFzazA7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IwKTsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19wY2NyMTBfZGlzYWJsZSh1bnNpZ25lZCBsb25nIG1hc2sxLCB1bnNpZ25lZCBsb25nIG1hc2swKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IxKTsKLQlyZWcgJj0gfm1hc2sxOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjApOwotCXJlZyAmPSB+bWFzazA7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IwKTsKLX0KLQotc3RhdGljIGludCBfY2xrX2RtYV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfRE1BX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0RNQV9NQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2RtYV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9ETUFfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfRE1BX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfcnRpY19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfUlRJQ19NQVNLLCBDQ01fUENDUjFfSENMS19SVElDX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcnRpY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9SVElDX01BU0ssIENDTV9QQ0NSMV9IQ0xLX1JUSUNfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19lbW1hX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZW5hYmxlKENDTV9QQ0NSMF9FTU1BX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0VNTUFfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19lbW1hX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2Rpc2FibGUoQ0NNX1BDQ1IwX0VNTUFfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfRU1NQV9NQVNLKTsKLX0KLQotc3RhdGljIGludCBfY2xrX3NsY2RjX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZW5hYmxlKENDTV9QQ0NSMF9TTENEQ19NQVNLLCBDQ01fUENDUjFfSENMS19TTENEQ19NQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX3NsY2RjX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2Rpc2FibGUoQ0NNX1BDQ1IwX1NMQ0RDX01BU0ssIENDTV9QQ0NSMV9IQ0xLX1NMQ0RDX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfZmVjX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZW5hYmxlKENDTV9QQ0NSMF9GRUNfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfRkVDX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfZmVjX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2Rpc2FibGUoQ0NNX1BDQ1IwX0ZFQ19NQVNLLCBDQ01fUENDUjFfSENMS19GRUNfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa192cHVfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMSk7Ci0JcmVnIHw9IENDTV9QQ0NSMV9WUFVfQkFVRF9NQVNLIHwgQ0NNX1BDQ1IxX0hDTEtfVlBVX01BU0s7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX3ZwdV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMSk7Ci0JcmVnICY9IH4oQ0NNX1BDQ1IxX1ZQVV9CQVVEX01BU0sgfCBDQ01fUENDUjFfSENMS19WUFVfTUFTSyk7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IxKTsKLX0KLQotc3RhdGljIGludCBfY2xrX3NhaGFyYTJfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9lbmFibGUoQ0NNX1BDQ1IwX1NBSEFSQV9NQVNLLCBDQ01fUENDUjFfSENMS19TQUhBUkFfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19zYWhhcmEyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2Rpc2FibGUoQ0NNX1BDQ1IwX1NBSEFSQV9NQVNLLCBDQ01fUENDUjFfSENMS19TQUhBUkFfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19tc3RpY2sxX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMTBfZW5hYmxlKENDTV9QQ0NSMV9NU0hDX0JBVURfTUFTSywgQ0NNX1BDQ1IwX01TSENfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19tc3RpY2sxX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjEwX2Rpc2FibGUoQ0NNX1BDQ1IxX01TSENfQkFVRF9NQVNLLCBDQ01fUENDUjBfTVNIQ19NQVNLKTsKLX0KLQotI2RlZmluZSBDU0NSKCkgKF9fcmF3X3JlYWRsKENDTV9DU0NSKSkKLSNkZWZpbmUgUENEUjAoKSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSkKLSNkZWZpbmUgUENEUjEoKSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSkKLQotc3RhdGljIGludCBfY2xrX2NwdV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCWludCBjc2NyID0gQ1NDUigpOworCWludCBjc2NyID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwogCiAJaWYgKGNsay0+cGFyZW50ID09IHBhcmVudCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgewotCQlpZiAocGFyZW50ID09ICZtcGxsX21haW5fY2xrWzBdKSB7CisJCWlmIChwYXJlbnQgPT0gJm1wbGxfbWFpbjFfY2xrKSB7CiAJCQljc2NyIHw9IENDTV9DU0NSX0FSTV9TUkM7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGFyZW50ID09ICZtcGxsX21haW5fY2xrWzFdKQorCQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluMl9jbGspCiAJCQkJY3NjciAmPSB+Q0NNX0NTQ1JfQVJNX1NSQzsKIAkJCWVsc2UKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlfX3Jhd193cml0ZWwoY3NjciwgQ0NNX0NTQ1IpOwotCX0gZWxzZQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCXJldHVybiAwOworCQljbGstPnBhcmVudCA9IHBhcmVudDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NwdV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaW50IGRpdjsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwpAQCAtMjc4LDcgKzE1Niw3IEBACiAJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OwogfQogCi1zdGF0aWMgaW50IF9jbGtfY3B1X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIGludCBzZXRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdW5zaWduZWQgaW50IGRpdjsKIAl1aW50MzJfdCByZWc7CkBAIC0yOTUsMTkgKzE3MywxOCBAQAogCiAJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwogCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCXJlZyAmPSB+Q0NNX0NTQ1JfQVJNX01BU0s7Ci0JCXJlZyB8PSBkaXYgPDwgQ0NNX0NTQ1JfQVJNX09GRlNFVDsKLQkJcmVnICY9IH4weDA2OwotCQlfX3Jhd193cml0ZWwocmVnIHwgMHg4MDAwMDAwMCwgQ0NNX0NTQ1IpOworCQlyZWcgJj0gfigzIDw8IDEyKTsKKwkJcmVnIHw9IGRpdiA8PCAxMjsKKwkJcmVnICY9IH4oQ0NNX0NTQ1JfRlBNIHwgQ0NNX0NTQ1JfU1BFTik7CisJCV9fcmF3X3dyaXRlbChyZWcgfCBDQ01fQ1NDUl9VUERBVEVfRElTLCBDQ01fQ1NDUik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW50IHNldCBDUFUgZnJlcXVlbmN5IVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc2V0IENQVSBmcmVxdWVuY3khXG4iKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX3JhdGVfcGVyKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXUzMiBkaXY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKQEAgLTMyNCw3ICsyMDEsNyBAQAogCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKIH0KIAotc3RhdGljIGludCBfY2xrX3BlcmNsa3hfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgaW50IHNldF9yYXRlX3BlcihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgcmVnOwogCXUzMiBkaXY7CkBAIC0zNDAsODQgKzIxNyw2NSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlkaXYtLTsKIAotCXJlZyA9Ci0JICAgIF9fcmF3X3JlYWRsKENDTV9QQ0RSMSkgJiB+KENDTV9QQ0RSMV9QRVJESVYxX01BU0sgPDwKLQkJCQkgICAgICAgKGNsay0+aWQgPDwgMykpOworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMSkgJiB+KDB4M2YgPDwgKGNsay0+aWQgPDwgMykpOwogCXJlZyB8PSBkaXYgPDwgKGNsay0+aWQgPDwgMyk7CiAJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIxKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3VzYl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdXNiKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHVzYl9wZGY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKIAogCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAotCXVzYl9wZGYgPSAoQ1NDUigpICYgQ0NNX0NTQ1JfVVNCX01BU0spID4+IENDTV9DU0NSX1VTQl9PRkZTRVQ7CisJdXNiX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMjgpICYgMHg3OwogCiAJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHVzYl9wZGYgKyAxVSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfc3NpMV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpeChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcGRmKQogewotCXVuc2lnbmVkIGxvbmcgc3NpMV9wZGY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKIAogCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAotCXNzaTFfcGRmID0gKFBDRFIwKCkgJiBDQ01fUENEUjBfU1NJMUJBVURESVZfTUFTSykgPj4KLQkJCQkJQ0NNX1BDRFIwX1NTSTFCQVVERElWX09GRlNFVDsKLQogCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQotCQlzc2kxX3BkZiArPSA0OworCQlwZGYgKz0gNDsgIC8qIE1YMjcgVE8yKyAqLwogCWVsc2UKLQkJc3NpMV9wZGYgPSAoc3NpMV9wZGYgPCAyKSA/IDEyNFVMIDogc3NpMV9wZGY7CisJCXBkZiA9IChwZGYgPCAyKSA/IDEyNFVMIDogcGRmOyAgLyogTVgyMSAmIE1YMjcgVE8xICovCiAKLQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyBzc2kxX3BkZjsKKwlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyBwZGY7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfc3NpMl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpMShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdW5zaWduZWQgbG9uZyBzc2kyX3BkZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0Jc3NpMl9wZGYgPSAoUENEUjAoKSAmIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9NQVNLKSA+PgotCSAgICBDQ01fUENEUjBfU1NJMkJBVURESVZfT0ZGU0VUOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCXNzaTJfcGRmICs9IDQ7Ci0JZWxzZQotCQlzc2kyX3BkZiA9IChzc2kyX3BkZiA8IDIpID8gMTI0VUwgOiBzc2kyX3BkZjsKLQotCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIHNzaTJfcGRmOworCXJldHVybiBnZXRfcmF0ZV9zc2l4KGNsaywgKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgPj4gMTYpICYgMHgzZik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfbmZjX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDI2KSAmIDB4M2YpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9uZmMoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwogCiAJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwogCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJbmZjX3BkZiA9Ci0JCSAgICAoUENEUjAoKSAmIENDTV9QQ0RSMF9ORkNESVYyX01BU0spID4+Ci0JCSAgICBDQ01fUENEUjBfTkZDRElWMl9PRkZTRVQ7Ci0JfSBlbHNlIHsKLQkJbmZjX3BkZiA9Ci0JCSAgICAoUENEUjAoKSAmIENDTV9QQ0RSMF9ORkNESVZfTUFTSykgPj4KLQkJICAgIENDTV9QQ0RSMF9ORkNESVZfT0ZGU0VUOwotCX0KKwlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKKwkJbmZjX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDYpICYgMHhmOworCWVsc2UKKwkJbmZjX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDEyKSAmIDB4ZjsKIAogCXJldHVybiBwYXJlbnRfcmF0ZSAvIChuZmNfcGRmICsgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfdnB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV92cHUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgdnB1X3BkZjsKIAl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwpAQCAtNDI1LDI1ICsyODMsMjcgQEAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKIAlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgewotCQl2cHVfcGRmID0KLQkJICAgIChQQ0RSMCgpICYgQ0NNX1BDRFIwX1ZQVURJVjJfTUFTSykgPj4KLQkJICAgIENDTV9QQ0RSMF9WUFVESVYyX09GRlNFVDsKKwkJdnB1X3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDEwKSAmIDB4M2Y7CiAJCXZwdV9wZGYgKz0gNDsKIAl9IGVsc2UgewotCQl2cHVfcGRmID0KLQkJICAgIChQQ0RSMCgpICYgQ0NNX1BDRFIwX1ZQVURJVl9NQVNLKSA+PgotCQkgICAgQ0NNX1BDRFIwX1ZQVURJVl9PRkZTRVQ7CisJCXZwdV9wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiA4KSAmIDB4ZjsKIAkJdnB1X3BkZiA9ICh2cHVfcGRmIDwgMikgPyAxMjQgOiB2cHVfcGRmOwogCX0KKwogCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIHZwdV9wZGY7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfcGFyZW50X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJvdW5kX3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOwogfQogCi1zdGF0aWMgaW50IF9jbGtfcGFyZW50X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKK30KKworc3RhdGljIGludCBzZXRfcmF0ZV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5zZXRfcmF0ZShjbGstPnBhcmVudCwgcmF0ZSk7CiB9CkBAIC00NTEsMTExMiArMzExLDM4MCBAQAogLyogaW4gSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gMjYwMDAwMDA7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9oaWdoX3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2hpZ2hfcmVmZXJlbmNlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2U7CiB9CiAKKy8qIGluIEh6ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gMzI3Njg7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2xvd19yZWZlcmVuY2Uoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBleHRlcm5hbF9sb3dfcmVmZXJlbmNlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9mcG0oc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpICogMTAyNDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXBsbChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9NUENUTDApLAorCQkJY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGxfbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCS8qIGkuTVgyNyBUTzI6CisJICogY2xrLT5pZCA9PSAwOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMSB3aGljaCBpcyBmcm9tIDIgKiBNUExMIC8gMgorCSAqIGNsay0+aWQgPT0gMTogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDIgd2hpY2ggaXMgZnJvbSAyICogTVBMTCAvIDMKKwkgKi8KKwlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCAmJiBjbGstPmlkID09IDEpCisJCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIDNVTDsKKworCXJldHVybiBwYXJlbnRfcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3BsbChzdHJ1Y3QgY2xrICpjbGspCit7CisJdWludDMyX3QgcmVnOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCk7CisKKwkvKiBPbiBUTzIgd2UgaGF2ZSB0byB3cml0ZSB0aGUgdmFsdWUgYmFjay4gT3RoZXJ3aXNlIHdlCisJICogcmVhZCAwIGZyb20gdGhpcyByZWdpc3RlciB0aGUgbmV4dCB0aW1lLgorCSAqLworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQlfX3Jhd193cml0ZWwocmVnLCBDQ01fU1BDVEwwKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHJhdGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jcHUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyByYXRlOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCWRpdiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMTIpICYgMHgzOworCWVsc2UKKwkJZGl2ID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiAxMykgJiAweDc7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlyZXR1cm4gcmF0ZSAvIChkaXYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYWhiKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUsIGJjbGtfcGRmOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCWJjbGtfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA4KSAmIDB4MzsKKwllbHNlCisJCWJjbGtfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA5KSAmIDB4ZjsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXJldHVybiByYXRlIC8gKGJjbGtfcGRmICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2lwZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlLCBpcGdfcGRmOworCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWVsc2UKKwkJaXBnX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOCkgJiAxOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoaXBnX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGVyY2xrX3BkZiwgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCisJCXJldHVybiAwOworCisJcGVyY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjEpID4+IChjbGstPmlkIDw8IDMpKSAmIDB4M2Y7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAocGVyY2xrX3BkZiArIDEpOworfQorCiAvKgogICogdGhlIGhpZ2ggZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQogICogRGVmYXVsdCBjYXNlIGlzIDI2TUh6LiBDb3VsZCBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUKICAqIHdpdGggYSBjYWxsIHRvIGNoYW5nZV9leHRlcm5hbF9oaWdoX3JlZmVyZW5jZSgpCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrID0gewotCS5uYW1lID0gImNraWgiLAotCS5nZXRfcmF0ZSA9IGdldF9oaWdoX3JlZmVyZW5jZV9jbG9ja19yYXRlLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2hpZ2hfcmVmZXJlbmNlLAogfTsKIAotLyogaW4gSHogKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2xvd19yZWZlcmVuY2UgPSAzMjc2ODsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfY2xrID0geworCS5wYXJlbnQJCT0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX21wbGwsCit9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsKLX0KKy8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDEgb2YgQVJNIGNvcmUKKyAqIEl0IHByb3ZpZGVzIHRoZSBjbG9jayBzb3VyY2Ugd2hvc2UgcmF0ZSBpcyBzYW1lIGFzIE1QTEwKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9tYWluMV9jbGsgPSB7CisJLmlkCQk9IDAsCisJLnBhcmVudAkJPSAmbXBsbF9jbGssCisJLmdldF9yYXRlCT0gZ2V0X3JhdGVfbXBsbF9tYWluLAorfTsKKworLyogRm9yIGkuTVgyNyBUTzIsIGl0IGlzIHRoZSBNUExMIHBhdGggMiBvZiBBUk0gY29yZQorICogSXQgcHJvdmlkZXMgdGhlIGNsb2NrIHNvdXJjZSB3aG9zZSByYXRlIGlzIHNhbWUgTVBMTCAqIDIgLyAzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjJfY2xrID0geworCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJm1wbGxfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX21wbGxfbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7CisJLnBhcmVudAkJPSAmbXBsbF9tYWluMl9jbGssCisJLmdldF9yYXRlCT0gZ2V0X3JhdGVfYWhiLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKKwkucGFyZW50CQk9ICZhaGJfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2lwZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNwdV9jbGsgPSB7CisJLnBhcmVudCA9ICZtcGxsX21haW4yX2NsaywKKwkuc2V0X3BhcmVudCA9IGNsa19jcHVfc2V0X3BhcmVudCwKKwkucm91bmRfcmF0ZSA9IHJvdW5kX3JhdGVfY3B1LAorCS5nZXRfcmF0ZSA9IGdldF9yYXRlX2NwdSwKKwkuc2V0X3JhdGUgPSBzZXRfcmF0ZV9jcHUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzcGxsX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9yYXRlX3NwbGwsCisJLmVuYWJsZSA9IGNsa19zcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19zcGxsX2Rpc2FibGUsCit9OwogCiAvKgogICogdGhlIGxvdyBmcmVxdWVuY3kgZXh0ZXJuYWwgY2xvY2sgcmVmZXJlbmNlCi0gKiBEZWZhdWx0IGNhc2UgaXMgMzIuNzY4a0h6IENvdWxkIGJlIGNoYW5nZWQgYXQgcnVudGltZQotICogd2l0aCBhIGNhbGwgdG8gY2hhbmdlX2V4dGVybmFsX2xvd19yZWZlcmVuY2UoKQorICogRGVmYXVsdCBjYXNlIGlzIDMyLjc2OGtIei4KICAqLwogc3RhdGljIHN0cnVjdCBjbGsgY2tpbF9jbGsgPSB7Ci0JLm5hbWUgPSAiY2tpbCIsCi0JLmdldF9yYXRlID0gZ2V0X2xvd19yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9sb3dfcmVmZXJlbmNlLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X21wbGxfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1aW50MzJfdCByZWc7Ci0JdW5zaWduZWQgbG9uZyByZWZfY2xrOwotCXVuc2lnbmVkIGxvbmcgbWZpID0gMCwgbWZuID0gMCwgbWZkID0gMCwgcGRmID0gMDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKLQotCXJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCk7Ci0JcGRmID0gKHJlZyAmIENDTV9NUENUTDBfUERfTUFTSykgPj4gQ0NNX01QQ1RMMF9QRF9PRkZTRVQ7Ci0JbWZkID0gKHJlZyAmIENDTV9NUENUTDBfTUZEX01BU0spID4+IENDTV9NUENUTDBfTUZEX09GRlNFVDsKLQltZmkgPSAocmVnICYgQ0NNX01QQ1RMMF9NRklfTUFTSykgPj4gQ0NNX01QQ1RMMF9NRklfT0ZGU0VUOwotCW1mbiA9IChyZWcgJiBDQ01fTVBDVEwwX01GTl9NQVNLKSA+PiBDQ01fTVBDVEwwX01GTl9PRkZTRVQ7Ci0KLQltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKLQl0ZW1wID0gMkxMICogcmVmX2NsayAqIG1mbjsKLQlkb19kaXYodGVtcCwgbWZkICsgMSk7Ci0JdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZmkgKyB0ZW1wOwotCWRvX2Rpdih0ZW1wLCBwZGYgKyAxKTsKLQotCXJldHVybiAodW5zaWduZWQgbG9uZyl0ZW1wOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBtcGxsX2NsayA9IHsKLQkubmFtZSA9ICJtcGxsIiwKLQkucGFyZW50ID0gJmNraWhfY2xrLAotCS5nZXRfcmF0ZSA9IGdldF9tcGxsX2NsaywKKy8qIE91dHB1dCBvZiBmcmVxdWVuY3kgcHJlIG11bHRpcGxpZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZwbV9jbGsgPSB7CisJLnBhcmVudCA9ICZja2lsX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9mcG0sCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX21wbGxfbWFpbl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKyNkZWZpbmUgUENDUjAgQ0NNX1BDQ1IwCisjZGVmaW5lIFBDQ1IxIENDTV9QQ0NSMQogCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JLyogaS5NWDI3IFRPMjoKLQkgKiBjbGstPmlkID09IDA6IGFybSBjbG9jayBzb3VyY2UgcGF0aCAxIHdoaWNoIGlzIGZyb20gMipNUExML0RJVl8yCi0JICogY2xrLT5pZCA9PSAxOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMiB3aGljaCBpcyBmcm9tIDIqTVBMTC9ESVZfMwotCSAqLwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzAgJiYgY2xrLT5pZCA9PSAxKQotCQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyAzVUw7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbl9jbGtbXSA9IHsKLQl7Ci0JCS8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDEgb2YgQVJNIGNvcmUKLQkJICogSXQgcHJvdmlkZSB0aGUgY2xvY2sgc291cmNlIHdob3NlIHJhdGUgaXMgc2FtZSBhcyBNUExMCi0JCSAqLwotCQkubmFtZSA9ICJtcGxsX21haW4iLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJm1wbGxfY2xrLAotCQkuZ2V0X3JhdGUgPSBfY2xrX21wbGxfbWFpbl9nZXRfcmF0ZQotCX0sIHsKLQkJLyogRm9yIGkuTVgyNyBUTzIsIGl0IGlzIHRoZSBNUExMIHBhdGggMiBvZiBBUk0gY29yZQotCQkgKiBJdCBwcm92aWRlIHRoZSBjbG9jayBzb3VyY2Ugd2hvc2UgcmF0ZSBpcyBzYW1lIE1QTEwgKiAyLzMKLQkJICovCi0JCS5uYW1lID0gIm1wbGxfbWFpbiIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmbXBsbF9jbGssCi0JCS5nZXRfcmF0ZSA9IF9jbGtfbXBsbF9tYWluX2dldF9yYXRlCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzLCBwKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5lbmFibGUJCT0gY2xrX3BjY3JfZW5hYmxlLAlcCisJCS5kaXNhYmxlCT0gY2xrX3BjY3JfZGlzYWJsZSwJXAorCQkuc2Vjb25kYXJ5CT0gcywJCQlcCisJCS5wYXJlbnQJCT0gcCwJCQlcCiAJfQotfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NwbGxfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1aW50MzJfdCByZWc7Ci0JdW5zaWduZWQgbG9uZyByZWZfY2xrOwotCXVuc2lnbmVkIGxvbmcgbWZpID0gMCwgbWZuID0gMCwgbWZkID0gMCwgcGRmID0gMDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKLQotCXJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCk7Ci0JLypUT0RPOiBUaGlzIGlzIFRPMiBCdWcgKi8KLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKLQkJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1NQQ1RMMCk7Ci0KLQlwZGYgPSAocmVnICYgQ0NNX1NQQ1RMMF9QRF9NQVNLKSA+PiBDQ01fU1BDVEwwX1BEX09GRlNFVDsKLQltZmQgPSAocmVnICYgQ0NNX1NQQ1RMMF9NRkRfTUFTSykgPj4gQ0NNX1NQQ1RMMF9NRkRfT0ZGU0VUOwotCW1maSA9IChyZWcgJiBDQ01fU1BDVEwwX01GSV9NQVNLKSA+PiBDQ01fU1BDVEwwX01GSV9PRkZTRVQ7Ci0JbWZuID0gKHJlZyAmIENDTV9TUENUTDBfTUZOX01BU0spID4+IENDTV9TUENUTDBfTUZOX09GRlNFVDsKLQotCW1maSA9IChtZmkgPD0gNSkgPyA1IDogbWZpOwotCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZuOwotCWRvX2Rpdih0ZW1wLCBtZmQgKyAxKTsKLQl0ZW1wID0gMkxMICogcmVmX2NsayAqIG1maSArIHRlbXA7Ci0JZG9fZGl2KHRlbXAsIHBkZiArIDEpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXRlbXA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwbGxfY2xrID0gewotCS5uYW1lID0gInNwbGwiLAotCS5wYXJlbnQgPSAmY2tpaF9jbGssCi0JLmdldF9yYXRlID0gZ2V0X3NwbGxfY2xrLAotCS5lbmFibGUgPSBfY2xrX3NwbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19zcGxsX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIGRpdjsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0KLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKLQkJZGl2ID0gKENTQ1IoKSAmIENDTV9DU0NSX0FSTV9NQVNLKSA+PiBDQ01fQ1NDUl9BUk1fT0ZGU0VUOwotCWVsc2UKLQkJZGl2ID0gKENTQ1IoKSAmIENDTV9DU0NSX1BSRVNDX01BU0spID4+IENDTV9DU0NSX1BSRVNDX09GRlNFVDsKLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXJldHVybiByYXRlIC8gKGRpdiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0gewotCS5uYW1lID0gImNwdV9jbGsiLAotCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkuc2V0X3BhcmVudCA9IF9jbGtfY3B1X3NldF9wYXJlbnQsCi0JLnJvdW5kX3JhdGUgPSBfY2xrX2NwdV9yb3VuZF9yYXRlLAotCS5nZXRfcmF0ZSA9IGdldF9jcHVfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfY3B1X3NldF9yYXRlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FoYl9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQl1bnNpZ25lZCBsb25nIGJjbGtfcGRmOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCWJjbGtfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX0FIQl9NQVNLKQotCQkJCQk+PiBDQ01fQ1NDUl9BSEJfT0ZGU0VUOwotCWVsc2UKLQkJYmNsa19wZGYgPSAoQ1NDUigpICYgQ0NNX0NTQ1JfQkNMS19NQVNLKQotCQkJCQk+PiBDQ01fQ1NDUl9CQ0xLX09GRlNFVDsKLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXJldHVybiByYXRlIC8gKGJjbGtfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7Ci0JLm5hbWUgPSAiYWhiX2NsayIsCi0JLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCS5nZXRfcmF0ZSA9IGdldF9haGJfY2xrLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2lwZ19jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQl1bnNpZ25lZCBsb25nIGlwZ19wZGY7Ci0KLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKLQkJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JZWxzZQotCQlpcGdfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX0lQRElWKSA+PiBDQ01fQ1NDUl9JUERJVl9PRkZTRVQ7Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlyZXR1cm4gcmF0ZSAvIChpcGdfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGsgPSB7Ci0JLm5hbWUgPSAiaXBnX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5nZXRfcmF0ZSA9IGdldF9pcGdfY2xrLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJjbGt4X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwZXJjbGtfcGRmOwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCi0JCXJldHVybiAwOwotCi0JcGVyY2xrX3BkZiA9IChQQ0RSMSgpID4+IChjbGstPmlkIDw8IDMpKSAmIENDTV9QQ0RSMV9QRVJESVYxX01BU0s7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAocGVyY2xrX3BkZiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJwZXJfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1BFUkNMSzFfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInBlcl9jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JCS5nZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9yZWNhbGMsCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfUEVSQ0xLMl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAicGVyX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkJLnJvdW5kX3JhdGUgPSBfY2xrX3BlcmNsa3hfcm91bmRfcmF0ZSwKLQkJLnNldF9yYXRlID0gX2Nsa19wZXJjbGt4X3NldF9yYXRlLAotCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1BFUkNMSzNfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInBlcl9jbGsiLAotCQkuaWQgPSAzLAotCQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCi0JCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKLQkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9QRVJDTEs0X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0cnVjdCBjbGsgdWFydDFfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1YXJ0X2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZ1YXJ0MV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJ1YXJ0X2lwZ19jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVUFSVDFfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RydWN0IGNsayB1YXJ0Ml9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVhcnRfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnVhcnQyX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInVhcnRfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9VQVJUMl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdHJ1Y3QgY2xrIHVhcnQzX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAidWFydF9jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmdWFydDNfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAidWFydF9pcGdfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VBUlQzX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0cnVjdCBjbGsgdWFydDRfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1YXJ0X2NsayIsCi0JCS5pZCA9IDMsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZ1YXJ0NF9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJ1YXJ0X2lwZ19jbGsiLAotCQkuaWQgPSAzLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVUFSVDRfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RydWN0IGNsayB1YXJ0NV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVhcnRfY2xrIiwKLQkJLmlkID0gNCwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnVhcnQ1X2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInVhcnRfaXBnX2NsayIsCi0JCS5pZCA9IDQsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9VQVJUNV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdHJ1Y3QgY2xrIHVhcnQ2X2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAidWFydF9jbGsiLAotCQkuaWQgPSA1LAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmdWFydDZfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAidWFydF9pcGdfY2xrIiwKLQkJLmlkID0gNSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VBUlQ2X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJncHRfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJmdwdDFfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiZ3B0X2lwZ19jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfR1BUMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiZ3B0X2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZncHQyX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImdwdF9pcGdfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQVDJfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImdwdF9jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmZ3B0M19jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJncHRfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUFQzX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJncHRfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJmdwdDRfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiZ3B0X2lwZ19jbGsiLAotCQkuaWQgPSAzLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfR1BUNF9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ1X2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiZ3B0X2NsayIsCi0JCS5pZCA9IDQsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZncHQ1X2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImdwdF9pcGdfY2xrIiwKLQkJLmlkID0gNCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQVDVfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImdwdF9jbGsiLAotCQkuaWQgPSA1LAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmZ3B0Nl9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJncHRfaXBnX2NsayIsCi0JCS5pZCA9IDUsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUFQ2X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInB3bV9jbGsiLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmcHdtX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInB3bV9jbGsiLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfUFdNX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkaGMxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAic2RoY19jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmc2RoYzFfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAic2RoY19pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NESEMxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkaGMyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAic2RoY19jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmc2RoYzJfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAic2RoY19pcGdfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NESEMyX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkaGMzX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAic2RoY19jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmc2RoYzNfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAic2RoY19pcGdfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NESEMzX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzcGkxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiY3NwaV9jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmY3NwaTFfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiY3NwaV9pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0NTUEkxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzcGkyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiY3NwaV9jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmY3NwaTJfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiY3NwaV9pcGdfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0NTUEkyX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzcGkzX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiY3NwaV9jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmY3NwaTNfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiY3NwaV9pcGdfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0NTUEkzX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJsY2RjX2NsayIsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1syXSwKLQkJLnNlY29uZGFyeSA9ICZsY2RjX2Nsa1sxXSwKLQkJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCQkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKLQl9LCB7Ci0JCS5uYW1lID0gImxjZGNfaXBnX2NsayIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLnNlY29uZGFyeSA9ICZsY2RjX2Nsa1syXSwKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9MQ0RDX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJsY2RjX2FoYl9jbGsiLAotCQkucGFyZW50ID0gJmFoYl9jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19MQ0RDX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzaV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzaV9wZXJjbGsiLAotCQkucGFyZW50ID0gJnBlcl9jbGtbM10sCi0JCS5zZWNvbmRhcnkgPSAmY3NpX2Nsa1sxXSwKLQkJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAotCQkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzaV9haGJfY2xrIiwKLQkJLnBhcmVudCA9ICZhaGJfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX0hDTEtfQ1NJX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVzYl9jbGsiLAotCQkucGFyZW50ID0gJnNwbGxfY2xrLAotCQkuZ2V0X3JhdGUgPSBfY2xrX3VzYl9yZWNhbGMsCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVVNCT1RHX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJ1c2JfYWhiX2NsayIsCi0JCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9IQ0xLX1VTQk9UR19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorI2RlZmluZSBERUZJTkVfQ0xPQ0sxKG5hbWUsIGksIGVyLCBlcywgZ2V0c2V0cm91bmQsIHMsIHApCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCQlcCisJCS5pZAkJPSBpLAkJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCQlcCisJCS5nZXRfcmF0ZQk9IGdldF9yYXRlXyMjZ2V0c2V0cm91bmQsCVwKKwkJLnNldF9yYXRlCT0gc2V0X3JhdGVfIyNnZXRzZXRyb3VuZCwJXAorCQkucm91bmRfcmF0ZQk9IHJvdW5kX3JhdGVfIyNnZXRzZXRyb3VuZCwJXAorCQkuZW5hYmxlCQk9IGNsa19wY2NyX2VuYWJsZSwJCVwKKwkJLmRpc2FibGUJPSBjbGtfcGNjcl9kaXNhYmxlLAkJXAorCQkuc2Vjb25kYXJ5CT0gcywJCQkJXAorCQkucGFyZW50CQk9IHAsCQkJCVwKIAl9Ci19OwogCi1zdGF0aWMgc3RydWN0IGNsayBzc2kxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAic3NpX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkJLnNlY29uZGFyeSA9ICZzc2kxX2Nsa1sxXSwKLQkJLmdldF9yYXRlID0gX2Nsa19zc2kxX3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9TU0kxX0JBVURfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInNzaV9pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NTSTFfSVBHX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGtlZXAgdGhlIGZvbGxvd2luZyBsaXN0IGluIG9yZGVyICovCitzdGF0aWMgc3RydWN0IGNsayBzbGNkY19jbGsxLCBzYWhhcmEyX2NsazEsIHJ0aWNfY2xrMSwgZmVjX2NsazEsIGVtbWFfY2xrMSwKKwkJICBkbWFfY2xrMSwgbGNkY19jbGsyLCB2cHVfY2xrMTsKKworLyogQWxsIGNsb2NrcyB3ZSBjYW4gZ2F0ZSB0aHJvdWdoIFBDQ1J4IGluIHRoZSBvcmRlciBvZiBQQ0NSeCBiaXRzICovCitERUZJTkVfQ0xPQ0soc3NpMl9jbGsxLCAgICAxLCBQQ0NSMCwgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsazEsICAgIDAsIFBDQ1IwLCAgMSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNsY2RjX2NsaywgICAgMCwgUENDUjAsICAyLCBOVUxMLCAmc2xjZGNfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHNkaGMzX2NsazEsICAgMCwgUENDUjAsICAzLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzJfY2xrMSwgICAwLCBQQ0NSMCwgIDQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjMV9jbGsxLCAgIDAsIFBDQ1IwLCAgNSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNjY19jbGssICAgICAgMCwgUENDUjAsICA2LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2FoYXJhMl9jbGssICAwLCBQQ0NSMCwgIDcsIE5VTEwsICZzYWhhcmEyX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGljX2NsaywgICAgIDAsIFBDQ1IwLCAgOCwgTlVMTCwgJnJ0aWNfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHJ0Y19jbGssICAgICAgMCwgUENDUjAsICA5LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0socHdtX2NsazEsICAgICAwLCBQQ0NSMCwgMTEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhvd2lyZV9jbGssICAgIDAsIFBDQ1IwLCAxMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKG1zdGlja19jbGsxLCAgMCwgUENDUjAsIDEzLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sobGNkY19jbGsxLCAgICAwLCBQQ0NSMCwgMTQsIE5VTEwsICZsY2RjX2NsazIsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhrcHBfY2xrLCAgICAgIDAsIFBDQ1IwLCAxNSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGlpbV9jbGssICAgICAgMCwgUENDUjAsIDE2LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMl9jbGssICAgICAxLCBQQ0NSMCwgMTcsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhpMmMxX2NsaywgICAgIDAsIFBDQ1IwLCAxOCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDZfY2xrMSwgICAgMCwgUENDUjAsIDI5LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NV9jbGsxLCAgICAwLCBQQ0NSMCwgMjAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ0X2NsazEsICAgIDAsIFBDQ1IwLCAyMSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDNfY2xrMSwgICAgMCwgUENDUjAsIDIyLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Ml9jbGsxLCAgICAwLCBQQ0NSMCwgMjMsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQxX2NsazEsICAgIDAsIFBDQ1IwLCAyNCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwaW9fY2xrLCAgICAgMCwgUENDUjAsIDI1LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZmVjX2NsaywgICAgICAwLCBQQ0NSMCwgMjYsIE5VTEwsICZmZWNfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGVtbWFfY2xrLCAgICAgMCwgUENDUjAsIDI3LCBOVUxMLCAmZW1tYV9jbGsxLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZG1hX2NsaywgICAgICAwLCBQQ0NSMCwgMjgsIE5VTEwsICZkbWFfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGNzcGkxM19jbGsxLCAgMCwgUENDUjAsIDI5LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrMSwgICAwLCBQQ0NSMCwgMzAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpMV9jbGsxLCAgIDAsIFBDQ1IwLCAzMSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworCitERUZJTkVfQ0xPQ0sobXN0aWNrX2NsaywgICAwLCBQQ0NSMSwgIDIsIE5VTEwsICZtc3RpY2tfY2xrMSwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKG5mY19jbGssICAgICAgMCwgUENDUjEsICAzLCBnZXRfcmF0ZV9uZmMsIE5VTEwsICZjcHVfY2xrKTsKK0RFRklORV9DTE9DSyhzc2kyX2NsaywgICAgIDEsIFBDQ1IxLCAgNCwgZ2V0X3JhdGVfc3NpMiwgJnNzaTJfY2xrMSwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsaywgICAgIDAsIFBDQ1IxLCAgNSwgZ2V0X3JhdGVfc3NpMSwgJnNzaTFfY2xrMSwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSyh2cHVfY2xrLCAgICAgIDAsIFBDQ1IxLCAgNiwgZ2V0X3JhdGVfdnB1LCAmdnB1X2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sxKHBlcjRfY2xrLCAgICAzLCBQQ0NSMSwgIDcsIHBlciwgTlVMTCwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSzEocGVyM19jbGssICAgIDIsIFBDQ1IxLCAgOCwgcGVyLCBOVUxMLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXIyX2NsaywgICAgMSwgUENDUjEsICA5LCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sxKHBlcjFfY2xrLCAgICAwLCBQQ0NSMSwgMTAsIHBlciwgTlVMTCwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSyh1c2JfY2xrMSwgICAgIDAsIFBDQ1IxLCAxMSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHNsY2RjX2NsazEsICAgMCwgUENDUjEsIDEyLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soc2FoYXJhMl9jbGsxLCAwLCBQQ0NSMSwgMTMsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGljX2NsazEsICAgIDAsIFBDQ1IxLCAxNCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGxjZGNfY2xrMiwgICAgMCwgUENDUjEsIDE1LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0sodnB1X2NsazEsICAgICAwLCBQQ0NSMSwgMTYsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhmZWNfY2xrMSwgICAgIDAsIFBDQ1IxLCAxNywgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGVtbWFfY2xrMSwgICAgMCwgUENDUjEsIDE4LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZW1pX2NsaywgICAgICAwLCBQQ0NSMSwgMTksIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhkbWFfY2xrMSwgICAgIDAsIFBDQ1IxLCAyMCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGNzaV9jbGsxLCAgICAgMCwgUENDUjEsIDIxLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soYnJvbV9jbGssICAgICAwLCBQQ0NSMSwgMjIsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhhdGFfY2xrLCAgICAgIDAsIFBDQ1IxLCAyMywgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHdkb2dfY2xrLCAgICAgMCwgUENDUjEsIDI0LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsaywgICAgICAwLCBQQ0NSMSwgMjUsIGdldF9yYXRlX3VzYiwgJnVzYl9jbGsxLCAmc3BsbF9jbGspOworREVGSU5FX0NMT0NLKHVhcnQ2X2NsazEsICAgMCwgUENDUjEsIDI2LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDVfY2xrMSwgICAwLCBQQ0NSMSwgMjcsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGsxLCAgIDAsIFBDQ1IxLCAyOCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQzX2NsazEsICAgMCwgUENDUjEsIDI5LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrMSwgICAwLCBQQ0NSMSwgMzAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGsxLCAgIDAsIFBDQ1IxLCAzMSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworCisvKiBDbG9ja3Mgd2UgY2Fubm90IGRpcmVjdGx5IGdhdGUsIGJ1dCBkcml2ZXJzIG5lZWQgdGhlaXIgcmF0ZXMgKi8KK0RFRklORV9DTE9DSyhjc3BpMV9jbGssICAgIDAsIDAsICAgICAgMCwgTlVMTCwgJmNzcGkxX2NsazEsICZwZXIyX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgICAxLCAwLCAgICAgIDAsIE5VTEwsICZjc3BpMl9jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKGNzcGkzX2NsaywgICAgMiwgMCwgICAgICAwLCBOVUxMLCAmY3NwaTEzX2NsazEsICZwZXIyX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZzZGhjMV9jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHNkaGMyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmc2RoYzJfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjM19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJnNkaGMzX2NsazEsICZwZXIyX2Nsayk7CitERUZJTkVfQ0xPQ0socHdtX2NsaywgICAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZwd21fY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyhncHQxX2NsaywgICAgIDAsIDAsICAgICAgMCwgTlVMTCwgJmdwdDFfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyhncHQyX2NsaywgICAgIDEsIDAsICAgICAgMCwgTlVMTCwgJmdwdDJfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyhncHQzX2NsaywgICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJmdwdDNfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ0X2NsaywgICAgIDMsIDAsICAgICAgMCwgTlVMTCwgJmdwdDRfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ1X2NsaywgICAgIDQsIDAsICAgICAgMCwgTlVMTCwgJmdwdDVfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ2X2NsaywgICAgIDUsIDAsICAgICAgMCwgTlVMTCwgJmdwdDZfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssICAgIDAsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQxX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgICAxLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0Ml9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgICAgMiwgMCwgICAgICAwLCBOVUxMLCAmdWFydDNfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGssICAgIDMsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQ0X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDVfY2xrLCAgICA0LCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0NV9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQ2X2NsaywgICAgNSwgMCwgICAgICAwLCBOVUxMLCAmdWFydDZfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSzEobGNkY19jbGssICAgIDAsIDAsICAgICAgMCwgcGFyZW50LCAmbGNkY19jbGsxLCAmcGVyM19jbGspOworREVGSU5FX0NMT0NLMShjc2lfY2xrLCAgICAgMCwgMCwgICAgICAwLCBwYXJlbnQsICZjc2lfY2xrMSwgJnBlcjRfY2xrKTsKKworI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAorCXsgXAorCQkuZGV2X2lkID0gZCwgXAorCQkuY29uX2lkID0gbiwgXAorCQkuY2xrID0gJmMsIFwKIAl9LAorCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnQyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0M19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4zIiwgTlVMTCwgdWFydDRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuNCIsIE5VTEwsIHVhcnQ1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjUiLCBOVUxMLCB1YXJ0Nl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQxIiwgZ3B0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQyIiwgZ3B0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQzIiwgZ3B0M19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQ0IiwgZ3B0NF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQ1IiwgZ3B0NV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQ2IiwgZ3B0Nl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjAiLCBOVUxMLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4wIiwgTlVMTCwgc2RoYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4xIiwgTlVMTCwgc2RoYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4yIiwgTlVMTCwgc2RoYzNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTEiLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMiIsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkzIiwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMSIsIHNzaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMiIsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQuMCIsIE5VTEwsIG5mY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ2cHUiLCB2cHVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZG1hIiwgZG1hX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0aWMiLCBydGljX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImJyb20iLCBicm9tX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVtbWEiLCBlbW1hX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNsY2RjIiwgc2xjZGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZW1pIiwgZW1pX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3BpbyIsIGdwaW9fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImlpbSIsIGlpbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJrcHAiLCBrcHBfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3cxLjAiLCBOVUxMLCBvd2lyZV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2NjIiwgc2NjX2NsaykKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaTJfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJzc2lfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNzaTJfY2xrWzFdLAotCQkuZ2V0X3JhdGUgPSBfY2xrX3NzaTJfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1NTSTJfQkFVRF9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAic3NpX2lwZ19jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfU1NJMl9JUEdfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbmZjX2NsayA9IHsKLQkubmFtZSA9ICJuZmNfY2xrIiwKLQkucGFyZW50ID0gJmNwdV9jbGssCi0JLmdldF9yYXRlID0gX2Nsa19uZmNfcmVjYWxjLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX05GQ19CQVVEX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZwdV9jbGsgPSB7Ci0JLm5hbWUgPSAidnB1X2NsayIsCi0JLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCS5nZXRfcmF0ZSA9IF9jbGtfdnB1X3JlY2FsYywKLQkuZW5hYmxlID0gX2Nsa192cHVfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa192cHVfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jbGsgPSB7Ci0JLm5hbWUgPSAiZG1hX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2RtYV9lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2RtYV9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcnRpY19jbGsgPSB7Ci0JLm5hbWUgPSAicnRpY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19ydGljX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfcnRpY19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYnJvbV9jbGsgPSB7Ci0JLm5hbWUgPSAiYnJvbV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9IQ0xLX0JST01fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZW1tYV9jbGsgPSB7Ci0JLm5hbWUgPSAiZW1tYV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbW1hX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfZW1tYV9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2xjZGNfY2xrID0gewotCS5uYW1lID0gInNsY2RjX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX3NsY2RjX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfc2xjZGNfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZlY19jbGsgPSB7Ci0JLm5hbWUgPSAiZmVjX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2ZlY19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2ZlY19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZW1pX2NsayA9IHsKLQkubmFtZSA9ICJlbWlfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19FTUlfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2FoYXJhMl9jbGsgPSB7Ci0JLm5hbWUgPSAic2FoYXJhX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX3NhaGFyYTJfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19zYWhhcmEyX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhdGFfY2xrID0gewotCS5uYW1lID0gImF0YV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9IQ0xLX0FUQV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3RpY2sxX2NsayA9IHsKLQkubmFtZSA9ICJtc3RpY2sxX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX21zdGljazFfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19tc3RpY2sxX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZG9nX2NsayA9IHsKLQkubmFtZSA9ICJ3ZG9nX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1dEVF9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvX2NsayA9IHsKLQkubmFtZSA9ICJncGlvX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQSU9fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiaTJjX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9JMkMxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJpMmNfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0kyQzJfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaWltX2NsayA9IHsKLQkubmFtZSA9ICJpaW1fY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfSUlNX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGtwcF9jbGsgPSB7Ci0JLm5hbWUgPSAia3BwX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0tQUF9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvd2lyZV9jbGsgPSB7Ci0JLm5hbWUgPSAib3dpcmVfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfT1dJUkVfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcnRjX2NsayA9IHsKLQkubmFtZSA9ICJydGNfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfUlRDX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNjY19jbGsgPSB7Ci0JLm5hbWUgPSAic2NjX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NDQ19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2Nsa29fcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKKy8qIEFkanVzdCB0aGUgY2xvY2sgcGF0aCBmb3IgVE8yIGFuZCBsYXRlciAqLworc3RhdGljIHZvaWQgX19pbml0IHRvMl9hZGp1c3RfY2xvY2tzKHZvaWQpCiB7Ci0JdTMyIGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQlpZiAocGFyZW50X3JhdGUgJSByYXRlKQotCQlkaXYrKzsKLQotCWlmIChkaXYgPiA4KQotCQlkaXYgPSA4OwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OwotfQotCi1zdGF0aWMgaW50IF9jbGtfY2xrb19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgcmVnOwotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXYgPiA4IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWRpdi0tOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSAmIH5DQ01fUENEUjBfQ0xLT0RJVl9NQVNLOwotCXJlZyB8PSBkaXYgPDwgQ0NNX1BDRFIwX0NMS09ESVZfT0ZGU0VUOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jbGtvX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSAmIENDTV9QQ0RSMF9DTEtPRElWX01BU0sgPj4KLQkJQ0NNX1BDRFIwX0NMS09ESVZfT0ZGU0VUOwotCWRpdisrOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OwotfQotCi1zdGF0aWMgaW50IF9jbGtfY2xrb19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fQ0NTUikgJiB+Q0NNX0NDU1JfQ0xLT1NFTF9NQVNLOwotCi0JaWYgKHBhcmVudCA9PSAmY2tpbF9jbGspCi0JCXJlZyB8PSAwIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2tpaF9jbGspCi0JCXJlZyB8PSAyIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSBtcGxsX2Nsay5wYXJlbnQpCi0JCXJlZyB8PSAzIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSBzcGxsX2Nsay5wYXJlbnQpCi0JCXJlZyB8PSA0IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmbXBsbF9jbGspCi0JCXJlZyB8PSA1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmc3BsbF9jbGspCi0JCXJlZyB8PSA2IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY3B1X2NsaykKLQkJcmVnIHw9IDcgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZhaGJfY2xrKQotCQlyZWcgfD0gOCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmlwZ19jbGspCi0JCXJlZyB8PSA5IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1swXSkKLQkJcmVnIHw9IDB4QSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbMV0pCi0JCXJlZyB8PSAweEIgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzJdKQotCQlyZWcgfD0gMHhDIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1szXSkKLQkJcmVnIHw9IDB4RCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnNzaTFfY2xrWzBdKQotCQlyZWcgfD0gMHhFIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmc3NpMl9jbGtbMF0pCi0JCXJlZyB8PSAweEYgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZuZmNfY2xrKQotCQlyZWcgfD0gMHgxMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJm1zdGljazFfY2xrKQotCQlyZWcgfD0gMHgxMSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnZwdV9jbGspCi0JCXJlZyB8PSAweDEyIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmdXNiX2Nsa1swXSkKLQkJcmVnIHw9IDB4MTUgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DQ1NSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9jbGtfY2xrb19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUjApIHwgQ0NNX1BDRFIwX0NMS09fRU47Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2Nsa29fZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgJiB+Q0NNX1BDRFIwX0NMS09fRU47Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrb19jbGsgPSB7Ci0JLm5hbWUgPSAiY2xrb19jbGsiLAotCS5nZXRfcmF0ZSA9IF9jbGtfY2xrb19yZWNhbGMsCi0JLnNldF9yYXRlID0gX2Nsa19jbGtvX3NldF9yYXRlLAotCS5yb3VuZF9yYXRlID0gX2Nsa19jbGtvX3JvdW5kX3JhdGUsCi0JLnNldF9wYXJlbnQgPSBfY2xrX2Nsa29fc2V0X3BhcmVudCwKLQkuZW5hYmxlID0gX2Nsa19jbGtvX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfY2xrb19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKm14Y19jbGtzW10gPSB7Ci0JJmNraWhfY2xrLAotCSZja2lsX2NsaywKLQkmbXBsbF9jbGssCi0JJm1wbGxfbWFpbl9jbGtbMF0sCi0JJm1wbGxfbWFpbl9jbGtbMV0sCi0JJnNwbGxfY2xrLAotCSZjcHVfY2xrLAotCSZhaGJfY2xrLAotCSZpcGdfY2xrLAotCSZwZXJfY2xrWzBdLAotCSZwZXJfY2xrWzFdLAotCSZwZXJfY2xrWzJdLAotCSZwZXJfY2xrWzNdLAotCSZjbGtvX2NsaywKLQkmdWFydDFfY2xrWzBdLAotCSZ1YXJ0MV9jbGtbMV0sCi0JJnVhcnQyX2Nsa1swXSwKLQkmdWFydDJfY2xrWzFdLAotCSZ1YXJ0M19jbGtbMF0sCi0JJnVhcnQzX2Nsa1sxXSwKLQkmdWFydDRfY2xrWzBdLAotCSZ1YXJ0NF9jbGtbMV0sCi0JJnVhcnQ1X2Nsa1swXSwKLQkmdWFydDVfY2xrWzFdLAotCSZ1YXJ0Nl9jbGtbMF0sCi0JJnVhcnQ2X2Nsa1sxXSwKLQkmZ3B0MV9jbGtbMF0sCi0JJmdwdDFfY2xrWzFdLAotCSZncHQyX2Nsa1swXSwKLQkmZ3B0Ml9jbGtbMV0sCi0JJmdwdDNfY2xrWzBdLAotCSZncHQzX2Nsa1sxXSwKLQkmZ3B0NF9jbGtbMF0sCi0JJmdwdDRfY2xrWzFdLAotCSZncHQ1X2Nsa1swXSwKLQkmZ3B0NV9jbGtbMV0sCi0JJmdwdDZfY2xrWzBdLAotCSZncHQ2X2Nsa1sxXSwKLQkmcHdtX2Nsa1swXSwKLQkmcHdtX2Nsa1sxXSwKLQkmc2RoYzFfY2xrWzBdLAotCSZzZGhjMV9jbGtbMV0sCi0JJnNkaGMyX2Nsa1swXSwKLQkmc2RoYzJfY2xrWzFdLAotCSZzZGhjM19jbGtbMF0sCi0JJnNkaGMzX2Nsa1sxXSwKLQkmY3NwaTFfY2xrWzBdLAotCSZjc3BpMV9jbGtbMV0sCi0JJmNzcGkyX2Nsa1swXSwKLQkmY3NwaTJfY2xrWzFdLAotCSZjc3BpM19jbGtbMF0sCi0JJmNzcGkzX2Nsa1sxXSwKLQkmbGNkY19jbGtbMF0sCi0JJmxjZGNfY2xrWzFdLAotCSZsY2RjX2Nsa1syXSwKLQkmY3NpX2Nsa1swXSwKLQkmY3NpX2Nsa1sxXSwKLQkmdXNiX2Nsa1swXSwKLQkmdXNiX2Nsa1sxXSwKLQkmc3NpMV9jbGtbMF0sCi0JJnNzaTFfY2xrWzFdLAotCSZzc2kyX2Nsa1swXSwKLQkmc3NpMl9jbGtbMV0sCi0JJm5mY19jbGssCi0JJnZwdV9jbGssCi0JJmRtYV9jbGssCi0JJnJ0aWNfY2xrLAotCSZicm9tX2NsaywKLQkmZW1tYV9jbGssCi0JJnNsY2RjX2NsaywKLQkmZmVjX2NsaywKLQkmZW1pX2NsaywKLQkmc2FoYXJhMl9jbGssCi0JJmF0YV9jbGssCi0JJm1zdGljazFfY2xrLAotCSZ3ZG9nX2NsaywKLQkmZ3Bpb19jbGssCi0JJmkyY19jbGtbMF0sCi0JJmkyY19jbGtbMV0sCi0JJmlpbV9jbGssCi0JJmtwcF9jbGssCi0JJm93aXJlX2NsaywKLQkmcnRjX2NsaywKLQkmc2NjX2NsaywKLX07Ci0KLXZvaWQgX19pbml0IGNoYW5nZV9leHRlcm5hbF9sb3dfcmVmZXJlbmNlKHVuc2lnbmVkIGxvbmcgbmV3X3JlZikKLXsKLQlleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gbmV3X3JlZjsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXQgY2xrX2Vhcmx5X2dldF90aW1lcl9yYXRlKHZvaWQpCi17Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZSgmcGVyX2Nsa1swXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwcm9iZV9teGNfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc2NyID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwogCiAJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJaWYgKENTQ1IoKSAmIDB4ODAwMCkKLQkJCWNwdV9jbGsucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMF07CisJCWlmIChjc2NyICYgQ0NNX0NTQ1JfQVJNX1NSQykKKwkJCWNwdV9jbGsucGFyZW50ID0gJm1wbGxfbWFpbjFfY2xrOwogCi0JCWlmICghKENTQ1IoKSAmIDB4MDA4MDAwMDApKQotCQkJc3NpMl9jbGtbMF0ucGFyZW50ID0gJnNwbGxfY2xrOworCQlpZiAoIShjc2NyICYgQ0NNX0NTQ1JfU1NJMikpCisJCQlzc2kxX2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7CiAKLQkJaWYgKCEoQ1NDUigpICYgMHgwMDQwMDAwMCkpCi0JCQlzc2kxX2Nsa1swXS5wYXJlbnQgPSAmc3BsbF9jbGs7CisJCWlmICghKGNzY3IgJiBDQ01fQ1NDUl9TU0kxKSkKKwkJCXNzaTFfY2xrLnBhcmVudCA9ICZzcGxsX2NsazsKIAotCQlpZiAoIShDU0NSKCkgJiAweDAwMjAwMDAwKSkKKwkJaWYgKCEoY3NjciAmIENDTV9DU0NSX1ZQVSkpCiAJCQl2cHVfY2xrLnBhcmVudCA9ICZzcGxsX2NsazsKIAl9IGVsc2UgewogCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKQEAgLTE1NjUsMTEgKzY5MywxMyBAQAogCQljcHVfY2xrLnNldF9yYXRlID0gTlVMTDsKIAkJYWhiX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CiAKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihwZXJfY2xrKSAvIHNpemVvZihwZXJfY2xrWzBdKTsgaSsrKQotCQkJcGVyX2Nsa1tpXS5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXBlcjFfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJcGVyMl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOworCQlwZXIzX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXBlcjRfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKIAotCQlzc2kxX2Nsa1swXS5wYXJlbnQgPSAmbXBsbF9jbGs7Ci0JCXNzaTJfY2xrWzBdLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJc3NpMV9jbGsucGFyZW50ID0gJm1wbGxfY2xrOworCQlzc2kyX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CiAKIAkJdnB1X2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CiAJfQpAQCAtMTU3OSw0NyArNzA5LDQ3IEBACiAgKiBtdXN0IGJlIGNhbGxlZCB2ZXJ5IGVhcmx5IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAqIGF2YWlsYWJsZSBjbG9jayByYXRlIHdoZW4gdGhlIHRpbWVyIGZyYW1ld29yayBzdGFydHMKICAqLwotaW50IF9faW5pdCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQoraW50IF9faW5pdCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKLQl1MzIgY3NjcjsKLQlzdHJ1Y3QgY2xrICoqY2xrcDsKKwl1MzIgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKwlpbnQgaTsKIAogCWV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gZnJlZjsKIAotCS8qIGRldGVjdCBjbG9jayByZWZlcmVuY2UgZm9yIGJvdGggc3lzdGVtIFBMTCAqLwotCWNzY3IgPSBDU0NSKCk7CisJLyogZGV0ZWN0IGNsb2NrIHJlZmVyZW5jZSBmb3IgYm90aCBzeXN0ZW0gUExMcyAqLwogCWlmIChjc2NyICYgQ0NNX0NTQ1JfTUNVKQogCQltcGxsX2Nsay5wYXJlbnQgPSAmY2tpaF9jbGs7CiAJZWxzZQotCQltcGxsX2Nsay5wYXJlbnQgPSAmY2tpbF9jbGs7CisJCW1wbGxfY2xrLnBhcmVudCA9ICZmcG1fY2xrOwogCiAJaWYgKGNzY3IgJiBDQ01fQ1NDUl9TUCkKIAkJc3BsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOwogCWVsc2UKLQkJc3BsbF9jbGsucGFyZW50ID0gJmNraWxfY2xrOworCQlzcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKIAotCXByb2JlX214Y19jbG9ja3MoKTsKKwl0bzJfYWRqdXN0X2Nsb2NrcygpOwogCi0JcGVyX2Nsa1swXS5lbmFibGUoJnBlcl9jbGtbMF0pOwotCWdwdDFfY2xrWzFdLmVuYWJsZSgmZ3B0MV9jbGtbMV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOwogCi0JZm9yIChjbGtwID0gbXhjX2Nsa3M7IGNsa3AgPCBteGNfY2xrcyArIEFSUkFZX1NJWkUobXhjX2Nsa3MpOyBjbGtwKyspCi0JCWNsa19yZWdpc3RlcigqY2xrcCk7CisJLyogVHVybiBvZmYgYWxsIGNsb2NrcyB3ZSBkbyBub3QgbmVlZCAqLworCV9fcmF3X3dyaXRlbCgwLCBDQ01fUENDUjApOworCV9fcmF3X3dyaXRlbCgoMSA8PCAxMCkgfCAoMSA8PCAxOSksIENDTV9QQ0NSMSk7CiAKLQkvKiBUdXJuIG9mZiBhbGwgcG9zc2libGUgY2xvY2tzICovCi0JX19yYXdfd3JpdGVsKENDTV9QQ0NSMF9HUFQxX01BU0ssIENDTV9QQ0NSMCk7Ci0JX19yYXdfd3JpdGVsKENDTV9QQ0NSMV9QRVJDTEsxX01BU0sgfCBDQ01fUENDUjFfSENMS19FTUlfTUFTSywKLQkJICAgICBDQ01fUENDUjEpOwogCXNwbGxfY2xrLmRpc2FibGUoJnNwbGxfY2xrKTsKIAotCS8qIFRoaXMgd2lsbCBwcm9wYWdhdGUgdG8gYWxsIGNoaWxkcmVuIGFuZCBpbml0IGFsbCB0aGUgY2xvY2sgcmF0ZXMgKi8KLQotCWNsa19lbmFibGUoJmVtaV9jbGspOworCS8qIGVuYWJsZSBiYXNpYyBjbG9ja3MgKi8KKwljbGtfZW5hYmxlKCZwZXIxX2Nsayk7CiAJY2xrX2VuYWJsZSgmZ3Bpb19jbGspOworCWNsa19lbmFibGUoJmVtaV9jbGspOwogCWNsa19lbmFibGUoJmlpbV9jbGspOwotCWNsa19lbmFibGUoJmdwdDFfY2xrWzBdKTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19MTF9DT05TT0xFCi0JY2xrX2VuYWJsZSgmdWFydDFfY2xrWzBdKTsKKwljbGtfZW5hYmxlKCZ1YXJ0MV9jbGspOwogI2VuZGlmCisKKwlteGNfdGltZXJfaW5pdCgmZ3B0MV9jbGspOworCiAJcmV0dXJuIDA7CiB9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY3B1X2lteDI3LmMKaW5kZXggMjM5MzA4Zi4uZDllM2JmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY3B1X2lteDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY3B1X2lteDI3LmMKQEAgLTI2LDExICsyNiwxMSBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAiY3JtX3JlZ3MuaCIKLQogc3RhdGljIGludCBjcHVfc2lsaWNvbl9yZXYgPSAtMTsKIHN0YXRpYyBpbnQgY3B1X3BhcnRudW1iZXI7CiAKKyNkZWZpbmUgU1lTX0NISVBfSUQgICAgICAgICAgICAgMHgwMCAgICAvKiBUaGUgb2Zmc2V0IG9mIENISVAgSUQgcmVnaXN0ZXIgKi8KKwogc3RhdGljIHZvaWQgcXVlcnlfc2lsaWNvbl9wYXJhbWV0ZXIodm9pZCkKIHsKIAl1MzIgdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY3JtX3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2NybV9yZWdzLmgKaW5kZXggOTQ2NDRjZC4uNzQ5ZGU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY3JtX3JlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jcm1fcmVncy5oCkBAIC0zOCw0MiArMzgsMzYgQEAKICNkZWZpbmUgQ0NNX1BNQ09VTlQgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDMwKQogI2RlZmluZSBDQ01fV0tHRENUTCAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MzQpCiAKLSNkZWZpbmUgQ0NNX0NTQ1JfVVNCX09GRlNFVCAgICAgMjgKLSNkZWZpbmUgQ0NNX0NTQ1JfVVNCX01BU0sgICAgICAgKDB4NyA8PCAyOCkKKyNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0NfT0ZGU0VUICAgMjkKKyNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0NfTUFTSyAgICAgKDB4NyA8PCBDQ01fQ1NDUl9QUkVTQ19PRkZTRVQpCisKKyNkZWZpbmUgQ0NNX0NTQ1JfVVNCX09GRlNFVCAgICAgMjYKKyNkZWZpbmUgQ0NNX0NTQ1JfVVNCX01BU0sgICAgICAgKDB4NyA8PCBDQ01fQ1NDUl9VU0JfT0ZGU0VUKQogI2RlZmluZSBDQ01fQ1NDUl9TRF9PRkZTRVQgICAgICAyNAotI2RlZmluZSBDQ01fQ1NDUl9TRF9NQVNLICAgICAgICAoMHgzIDw8IDI0KQotI2RlZmluZSBDQ01fQ1NDUl9TU0kyICAgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgQ0NNX0NTQ1JfU1NJMl9PRkZTRVQgICAgMjMKLSNkZWZpbmUgQ0NNX0NTQ1JfU1NJMSAgICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIENDTV9DU0NSX1NTSTFfT0ZGU0VUICAgIDIyCi0jZGVmaW5lIENDTV9DU0NSX1ZQVSAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIENDTV9DU0NSX1ZQVV9PRkZTRVQgICAgMjEKLSNkZWZpbmUgQ0NNX0NTQ1JfTVNIQyAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIENDTV9DU0NSX1NQTExSRVMgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBDQ01fQ1NDUl9NUExMUkVTICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgQ0NNX0NTQ1JfU0RfTUFTSyAgICAgICAgKDB4MyA8PCBDQ01fQ1NDUl9TRF9PRkZTRVQpCisjZGVmaW5lIENDTV9DU0NSX1NQTExSRVMgICAgICAgICgxIDw8IDIyKQorI2RlZmluZSBDQ01fQ1NDUl9NUExMUkVTICAgICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgQ0NNX0NTQ1JfU1NJMl9PRkZTRVQgICAgMjAKKyNkZWZpbmUgQ0NNX0NTQ1JfU1NJMiAgICAgICAgICAgKDEgPDwgQ0NNX0NTQ1JfU1NJMl9PRkZTRVQpCisjZGVmaW5lIENDTV9DU0NSX1NTSTFfT0ZGU0VUICAgIDE5CisjZGVmaW5lIENDTV9DU0NSX1NTSTEgICAgICAgICAgICgxIDw8IENDTV9DU0NSX1NTSTFfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9GSVJfT0ZGU0VUICAgIAkxOAorI2RlZmluZSBDQ01fQ1NDUl9GSVIJCSgxIDw8IENDTV9DU0NSX0ZJUl9PRkZTRVQpCiAjZGVmaW5lIENDTV9DU0NSX1NQICAgICAgICAgICAgICgxIDw8IDE3KQogI2RlZmluZSBDQ01fQ1NDUl9NQ1UgICAgICAgICAgICAoMSA8PCAxNikKLS8qIENDTV9DU0NSX0FSTV94eHgganVzdCBiZSBhdmFsaWFibGUgb24gaS5NWDI3IFRPMiovCi0jZGVmaW5lIENDTV9DU0NSX0FSTV9TUkMgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBDQ01fQ1NDUl9BUk1fT0ZGU0VUICAgICAxMgotI2RlZmluZSBDQ01fQ1NDUl9BUk1fTUFTSyAgICAgICAoMHgzIDw8IDEyKQotLyogQ0NNX0NTQ1JfQVJNX3h4eCBqdXN0IGJlIGF2YWxpYWJsZSBvbiBpLk1YMjcgVE8yKi8KLSNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0NfT0ZGU0VUICAgMTMKLSNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0NfTUFTSyAgICAgKDB4NyA8PCAxMykKLSNkZWZpbmUgQ0NNX0NTQ1JfQkNMS19PRkZTRVQgICAgOQotI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX01BU0sgICAgICAoMHhmIDw8IDkpCi0jZGVmaW5lIENDTV9DU0NSX0lQRElWX09GRlNFVCAgIDgKLSNkZWZpbmUgQ0NNX0NTQ1JfSVBESVYgICAgICAgICAgKDEgPDwgOCkKLS8qIENDTV9DU0NSX0FIQl94eHgganVzdCBiZSBhdmFsaWFibGUgb24gaS5NWDI3IFRPMiovCi0jZGVmaW5lIENDTV9DU0NSX0FIQl9PRkZTRVQgICAgIDgKLSNkZWZpbmUgQ0NNX0NTQ1JfQUhCX01BU0sgICAgICAgKDB4MyA8PCA4KQotLyogQ0NNX0NTQ1JfQUhCX3h4eCBqdXN0IGJlIGF2YWxpYWJsZSBvbiBpLk1YMjcgVE8yKi8KKyNkZWZpbmUgQ0NNX0NTQ1JfQkNMS19PRkZTRVQJMTAKKyNkZWZpbmUgQ0NNX0NTQ1JfQkNMS19NQVNLICAgICAgKDB4ZiA8PCBDQ01fQ1NDUl9CQ0xLX09GRlNFVCkKKyNkZWZpbmUgQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUICAgOQorI2RlZmluZSBDQ01fQ1NDUl9JUERJViAgICAgICAgICAoMSA8PCBDQ01fQ1NDUl9JUERJVl9PRkZTRVQpCisKICNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNRElWICAgICAgKDEgPDwgNCkKICNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgQ0NNX0NTQ1JfRlBNICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgQ0NNX0NTQ1JfU1BFTiAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgQ0NNX0NTQ1JfTVBFTiAgICAgICAgICAgMQogCisKKwogI2RlZmluZSBDQ01fTVBDVEwwX0NQTE0gICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgQ0NNX01QQ1RMMF9QRF9PRkZTRVQgICAgMjYKICNkZWZpbmUgQ0NNX01QQ1RMMF9QRF9NQVNLICAgICAgKDB4ZiA8PCAyNikKQEAgLTEwOSwyNSArMTAzLDE0IEBACiAKICNkZWZpbmUgQ0NNX1BDRFIwX1NTSTJCQVVERElWX09GRlNFVCAgICAyNgogI2RlZmluZSBDQ01fUENEUjBfU1NJMkJBVURESVZfTUFTSyAgICAgICgweDNmIDw8IDI2KQotI2RlZmluZSBDQ01fUENEUjBfQ0xLT19FTiAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIENDTV9QQ0RSMF9DTEtPRElWX09GRlNFVCAgICAgICAgMjIKLSNkZWZpbmUgQ0NNX1BDRFIwX0NMS09ESVZfTUFTSyAgICAgICAgICAoMHg3IDw8IDIyKQogI2RlZmluZSBDQ01fUENEUjBfU1NJMUJBVURESVZfT0ZGU0VUICAgIDE2CiAjZGVmaW5lIENDTV9QQ0RSMF9TU0kxQkFVRERJVl9NQVNLICAgICAgKDB4M2YgPDwgMTYpCi0vKlRoZSBkaWZpbml0aW9uIGZvciBpLk1YMjcgVE8yKi8KLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVjJfT0ZGU0VUICAgICAgICAxMAotI2RlZmluZSBDQ01fUENEUjBfVlBVRElWMl9NQVNLICAgICAgICAgICgweDNmIDw8IDEwKQotI2RlZmluZSBDQ01fUENEUjBfTkZDRElWMl9PRkZTRVQgICAgICAgICA2Ci0jZGVmaW5lIENDTV9QQ0RSMF9ORkNESVYyX01BU0sgICAgICAgICAgICgweGYgPDwgNikKLSNkZWZpbmUgQ0NNX1BDRFIwX01TSENESVYyX01BU0sgICAgICAgICAgMHgzZgotLypUaGUgZGlmaW5pdGlvbiBmb3IgaS5NWDI3IFRPMiovCiAjZGVmaW5lIENDTV9QQ0RSMF9ORkNESVZfT0ZGU0VUICAgICAgICAgMTIKICNkZWZpbmUgQ0NNX1BDRFIwX05GQ0RJVl9NQVNLICAgICAgICAgICAoMHhmIDw8IDEyKQotI2RlZmluZSBDQ01fUENEUjBfVlBVRElWX09GRlNFVCAgICAgICAgOAotI2RlZmluZSBDQ01fUENEUjBfVlBVRElWX01BU0sgICAgICAgICAgKDB4ZiA8PCA4KQotI2RlZmluZSBDQ01fUENEUjBfTVNIQ0RJVl9PRkZTRVQgICAgICAgIDAKLSNkZWZpbmUgQ0NNX1BDRFIwX01TSENESVZfTUFTSyAgICAgICAgICAweDFmCi0KKyNkZWZpbmUgQ0NNX1BDRFIwXzQ4TURJVl9PRkZTRVQJCTUKKyNkZWZpbmUgQ0NNX1BDRFIwXzQ4TURJVl9NQVNLCQkoMHg3IDw8IENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENEUjBfRklSSURJVl9PRkZTRVQJMAorI2RlZmluZSBDQ01fUENEUjBfRklSSURJVl9NQVNLCQkweDFmCiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVY0X09GRlNFVCAgICAgICAgMjQKICNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjRfTUFTSyAgICAgICAgICAoMHgzZiA8PCAyNCkKICNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjNfT0ZGU0VUICAgICAgICAxNgpAQCAtMTM3LDEzMyArMTIwLDEzNSBAQAogI2RlZmluZSBDQ01fUENEUjFfUEVSRElWMV9PRkZTRVQgICAgICAgIDAKICNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjFfTUFTSyAgICAgICAgICAweDNmCiAKLSNkZWZpbmUgQ0NNX1BDQ1IwX0NTUEkxX09GRlNFVCAgICAgICAgICAzMQotI2RlZmluZSBDQ01fUENDUjBfQ1NQSTFfTUFTSyAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBDQ01fUENDUjBfQ1NQSTJfT0ZGU0VUICAgICAgICAgIDMwCi0jZGVmaW5lIENDTV9QQ0NSMF9DU1BJMl9NQVNLICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIENDTV9QQ0NSMF9DU1BJM19PRkZTRVQgICAgICAgICAgMjkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0NTUEkzX01BU0sgICAgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0RNQV9PRkZTRVQgICAgICAgICAgICAyOAotI2RlZmluZSBDQ01fUENDUjBfRE1BX01BU0sgICAgICAgICAgICAgICgxIDw8IDI4KQotI2RlZmluZSBDQ01fUENDUjBfRU1NQV9PRkZTRVQgICAgICAgICAgIDI3Ci0jZGVmaW5lIENDTV9QQ0NSMF9FTU1BX01BU0sgICAgICAgICAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIENDTV9QQ0NSMF9GRUNfT0ZGU0VUICAgICAgICAgICAgMjYKLSNkZWZpbmUgQ0NNX1BDQ1IwX0ZFQ19NQVNLICAgICAgICAgICAgICAoMSA8PCAyNikKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQSU9fT0ZGU0VUICAgICAgICAgICAyNQotI2RlZmluZSBDQ01fUENDUjBfR1BJT19NQVNLICAgICAgICAgICAgICgxIDw8IDI1KQotI2RlZmluZSBDQ01fUENDUjBfR1BUMV9PRkZTRVQgICAgICAgICAgIDI0Ci0jZGVmaW5lIENDTV9QQ0NSMF9HUFQxX01BU0sgICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQyX09GRlNFVCAgICAgICAgICAgMjMKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDJfTUFTSyAgICAgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDNfT0ZGU0VUICAgICAgICAgICAyMgotI2RlZmluZSBDQ01fUENDUjBfR1BUM19NQVNLICAgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBDQ01fUENDUjBfR1BUNF9PRkZTRVQgICAgICAgICAgIDIxCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQ0X01BU0sgICAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQ1X09GRlNFVCAgICAgICAgICAgMjAKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDVfTUFTSyAgICAgICAgICAgICAoMSA8PCAyMCkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDZfT0ZGU0VUICAgICAgICAgICAxOQotI2RlZmluZSBDQ01fUENDUjBfR1BUNl9NQVNLICAgICAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBDQ01fUENDUjBfSTJDMV9PRkZTRVQgICAgICAgICAgIDE4Ci0jZGVmaW5lIENDTV9QQ0NSMF9JMkMxX01BU0sgICAgICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIENDTV9QQ0NSMF9JMkMyX09GRlNFVCAgICAgICAgICAgMTcKLSNkZWZpbmUgQ0NNX1BDQ1IwX0kyQzJfTUFTSyAgICAgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgQ0NNX1BDQ1IwX0lJTV9PRkZTRVQgICAgICAgICAgICAxNgotI2RlZmluZSBDQ01fUENDUjBfSUlNX01BU0sgICAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBDQ01fUENDUjBfS1BQX09GRlNFVCAgICAgICAgICAgIDE1Ci0jZGVmaW5lIENDTV9QQ0NSMF9LUFBfTUFTSyAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIENDTV9QQ0NSMF9MQ0RDX09GRlNFVCAgICAgICAgICAgMTQKLSNkZWZpbmUgQ0NNX1BDQ1IwX0xDRENfTUFTSyAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgQ0NNX1BDQ1IwX01TSENfT0ZGU0VUICAgICAgICAgICAxMwotI2RlZmluZSBDQ01fUENDUjBfTVNIQ19NQVNLICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBDQ01fUENDUjBfT1dJUkVfT0ZGU0VUICAgICAgICAgIDEyCi0jZGVmaW5lIENDTV9QQ0NSMF9PV0lSRV9NQVNLICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIENDTV9QQ0NSMF9QV01fT0ZGU0VUICAgICAgICAgICAgMTEKLSNkZWZpbmUgQ0NNX1BDQ1IwX1BXTV9NQVNLICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX1JUQ19PRkZTRVQgICAgICAgICAgICA5Ci0jZGVmaW5lIENDTV9QQ0NSMF9SVENfTUFTSyAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX1JUSUNfT0ZGU0VUICAgICAgICAgICA4Ci0jZGVmaW5lIENDTV9QQ0NSMF9SVElDX01BU0sgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NBSEFSQV9PRkZTRVQgICAgICAgICA3Ci0jZGVmaW5lIENDTV9QQ0NSMF9TQUhBUkFfTUFTSyAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NDQ19PRkZTRVQgICAgICAgICAgICA2Ci0jZGVmaW5lIENDTV9QQ0NSMF9TQ0NfTUFTSyAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NESEMxX09GRlNFVCAgICAgICAgICA1Ci0jZGVmaW5lIENDTV9QQ0NSMF9TREhDMV9NQVNLICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NESEMyX09GRlNFVCAgICAgICAgICA0Ci0jZGVmaW5lIENDTV9QQ0NSMF9TREhDMl9NQVNLICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NESEMzX09GRlNFVCAgICAgICAgICAzCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDM19NQVNLICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NMQ0RDX09GRlNFVCAgICAgICAgICAyCi0jZGVmaW5lIENDTV9QQ0NSMF9TTENEQ19NQVNLICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NTSTFfSVBHX09GRlNFVCAgICAgICAxCi0jZGVmaW5lIENDTV9QQ0NSMF9TU0kxX0lQR19NQVNLICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX1NTSTJfSVBHX09GRlNFVCAgICAgICAwCi0jZGVmaW5lIENDTV9QQ0NSMF9TU0kyX0lQR19NQVNLICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfT0ZGU0VUICAgICAgIAkzMQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0NTSV9SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19ETUFfT0ZGU0VUICAgICAgIAkzMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0RNQV9SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCAgICAgIAkyOAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQgICAgICAJMjcKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19FTU1BX1JFRwkgICAgICAgIENDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0xDRENfT0ZGU0VUICAgICAgCTI2CisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfTENEQ19SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19PRkZTRVQgICAgIAkyNQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1NMQ0RDX1JFRwkgICAgICAgIENDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQgICAgCTI0CisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfVVNCT1RHX1JFRwlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CTUlfT0ZGU0VUICAgIAkyMworI2RlZmluZSBDQ01fUENDUl9CTUlfTUFTSyAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfQk1JX01BU0spCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQk1JX1JFRwkgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X09GRlNFVCAgICAgICAgCTIyCisjZGVmaW5lIENDTV9QQ0NSX1BFUkNMSzRfUkVHCSAgICAJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX09GRlNFVCAgICAgICAgICAJMjEKKyNkZWZpbmUgQ0NNX1BDQ1JfU0xDRENfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX09GRlNFVCAgICAgICAyMAorI2RlZmluZSBDQ01fUENDUl9GSVJJX0JBVURfTUFTSyAgICAgICAgICgxIDw8IENDTV9QQ0NSX0ZJUklfQkFVRF9NQVNLKQorI2RlZmluZSBDQ01fUENDUl9GSVJJX0JBVURfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX05GQ19PRkZTRVQJCTE5CisjZGVmaW5lIENDTV9QQ0NSX05GQ19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9MQ0RDX09GRlNFVCAgICAgICAgICAgCTE4CisjZGVmaW5lIENDTV9QQ0NSX0xDRENfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX09GRlNFVCAgICAgIAkxNworI2RlZmluZSBDQ01fUENDUl9TU0kxX0JBVURfUkVHCSAgICAJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfQkFVRF9PRkZTRVQgICAgICAJMTYKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX1JFRwkgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9FTU1BX09GRlNFVCAgICAgICAgICAgCTE1CisjZGVmaW5lIENDTV9QQ0NSX0VNTUFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCAgICAgICAgIAkxNAorI2RlZmluZSBDQ01fUENDUl9VU0JPVEdfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRE1BX09GRlNFVCAgICAgICAgICAgIAkxMworI2RlZmluZSBDQ01fUENDUl9ETUFfUkVHICAgICAgICAgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9JMkMxX09GRlNFVCAgICAgICAgICAgCTEyCisjZGVmaW5lIENDTV9QQ0NSX0kyQzFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BJT19PRkZTRVQgICAgICAgICAgIAkxMQorI2RlZmluZSBDQ01fUENDUl9HUElPX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NESEMyX09GRlNFVCAgICAgICAgICAJMTAKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzJfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfT0ZGU0VUICAgICAgICAgIAk5CisjZGVmaW5lIENDTV9QQ0NSX1NESEMxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0ZJUklfT0ZGU0VUCQk4CisjZGVmaW5lIENDTV9QQ0NSX0ZJUklfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfQkFVRF9NQVNLKQorI2RlZmluZSBDQ01fUENDUl9GSVJJX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfSVBHX09GRlNFVCAgICAgICAJNworI2RlZmluZSBDQ01fUENDUl9TU0kyX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTFfSVBHX09GRlNFVCAgICAgICAJNgorI2RlZmluZSBDQ01fUENDUl9TU0kxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkyX09GRlNFVAkJNQorI2RlZmluZQlDQ01fUENDUl9DU1BJMl9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9DU1BJMV9PRkZTRVQJCTQKKyNkZWZpbmUJQ0NNX1BDQ1JfQ1NQSTFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfT0ZGU0VUICAgICAgICAgIAkzCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQ0X1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQzX09GRlNFVCAgICAgICAgICAJMgorI2RlZmluZSBDQ01fUENDUl9VQVJUM19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9VQVJUMl9PRkZTRVQgICAgICAgICAgCTEKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDJfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfT0ZGU0VUICAgICAgICAgIAkwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQxX1JFRwkJQ0NNX1BDQ1IwCiAKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQxX09GRlNFVCAgICAgICAgICAzMQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDFfTUFTSyAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDJfT0ZGU0VUICAgICAgICAgIDMwCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUMl9NQVNLICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUM19PRkZTRVQgICAgICAgICAgMjkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQzX01BU0sgICAgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQ0X09GRlNFVCAgICAgICAgICAyOAotI2RlZmluZSBDQ01fUENDUjFfVUFSVDRfTUFTSyAgICAgICAgICAgICgxIDw8IDI4KQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDVfT0ZGU0VUICAgICAgICAgIDI3Ci0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUNV9NQVNLICAgICAgICAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUNl9PRkZTRVQgICAgICAgICAgMjYKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQ2X01BU0sgICAgICAgICAgICAoMSA8PCAyNikKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VTQk9UR19PRkZTRVQgICAgICAgICAyNQotI2RlZmluZSBDQ01fUENDUjFfVVNCT1RHX01BU0sgICAgICAgICAgICgxIDw8IDI1KQotI2RlZmluZSBDQ01fUENDUjFfV0RUX09GRlNFVCAgICAgICAgICAgIDI0Ci0jZGVmaW5lIENDTV9QQ0NSMV9XRFRfTUFTSyAgICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0FUQV9PRkZTRVQgICAgICAgMjMKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfQVRBX01BU0sgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfQlJPTV9PRkZTRVQgICAgICAyMgotI2RlZmluZSBDQ01fUENDUjFfSENMS19CUk9NX01BU0sgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBDQ01fUENDUjFfSENMS19DU0lfT0ZGU0VUICAgICAgIDIxCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0NTSV9NQVNLICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0RNQV9PRkZTRVQgICAgICAgMjAKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRE1BX01BU0sgICAgICAgICAoMSA8PCAyMCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRU1JX09GRlNFVCAgICAgICAxOQotI2RlZmluZSBDQ01fUENDUjFfSENMS19FTUlfTUFTSyAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19FTU1BX09GRlNFVCAgICAgIDE4Ci0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0VNTUFfTUFTSyAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0ZFQ19PRkZTRVQgICAgICAgMTcKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRkVDX01BU0sgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfVlBVX09GRlNFVCAgICAgICAxNgotI2RlZmluZSBDQ01fUENDUjFfSENMS19WUFVfTUFTSyAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19MQ0RDX09GRlNFVCAgICAgIDE1Ci0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0xDRENfTUFTSyAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1JUSUNfT0ZGU0VUICAgICAgMTQKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfUlRJQ19NQVNLICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX09GRlNFVCAgICAxMwotI2RlZmluZSBDQ01fUENDUjFfSENMS19TQUhBUkFfTUFTSyAgICAgICgxIDw8IDEzKQotI2RlZmluZSBDQ01fUENDUjFfSENMS19TTENEQ19PRkZTRVQgICAgIDEyCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1NMQ0RDX01BU0sgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1VTQk9UR19PRkZTRVQgICAgMTEKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfVVNCT1RHX01BU0sgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzFfT0ZGU0VUICAgICAgICAxMAotI2RlZmluZSBDQ01fUENDUjFfUEVSQ0xLMV9NQVNLICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBDQ01fUENDUjFfUEVSQ0xLMl9PRkZTRVQgICAgICAgIDkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzJfTUFTSyAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBDQ01fUENDUjFfUEVSQ0xLM19PRkZTRVQgICAgICAgIDgKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzNfTUFTSyAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBDQ01fUENDUjFfUEVSQ0xLNF9PRkZTRVQgICAgICAgIDcKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzRfTUFTSyAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBDQ01fUENDUjFfVlBVX0JBVURfT0ZGU0VUICAgICAgIDYKLSNkZWZpbmUgQ0NNX1BDQ1IxX1ZQVV9CQVVEX01BU0sgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBDQ01fUENDUjFfU1NJMV9CQVVEX09GRlNFVCAgICAgIDUKLSNkZWZpbmUgQ0NNX1BDQ1IxX1NTSTFfQkFVRF9NQVNLICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBDQ01fUENDUjFfU1NJMl9CQVVEX09GRlNFVCAgICAgIDQKLSNkZWZpbmUgQ0NNX1BDQ1IxX1NTSTJfQkFVRF9NQVNLICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBDQ01fUENDUjFfTkZDX0JBVURfT0ZGU0VUICAgICAgIDMKLSNkZWZpbmUgQ0NNX1BDQ1IxX05GQ19CQVVEX01BU0sgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBDQ01fUENDUjFfTVNIQ19CQVVEX09GRlNFVCAgICAgIDIKLSNkZWZpbmUgQ0NNX1BDQ1IxX01TSENfQkFVRF9NQVNLICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBDQ01fUENDUl9PV0lSRV9PRkZTRVQgICAgICAgICAgCTMxCisjZGVmaW5lIENDTV9QQ0NSX09XSVJFX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX0tQUF9PRkZTRVQgICAgICAgICAgICAJMzAKKyNkZWZpbmUgQ0NNX1BDQ1JfS1BQX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX1JUQ19PRkZTRVQgICAgICAgICAgICAJMjkKKyNkZWZpbmUgQ0NNX1BDQ1JfUlRDX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX1BXTV9PRkZTRVQgICAgICAgICAgICAJMjgKKyNkZWZpbmUgQ0NNX1BDQ1JfUFdNX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX0dQVDNfT0ZGU0VUICAgICAgICAgICAJMjcKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUM19SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9HUFQyX09GRlNFVCAgICAgICAgICAgCTI2CisjZGVmaW5lIENDTV9QQ0NSX0dQVDJfUkVHCQlDQ01fUENDUjEKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMV9PRkZTRVQgICAgICAgICAgIAkyNQorI2RlZmluZSBDQ01fUENDUl9HUFQxX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX1dEVF9PRkZTRVQgICAgICAgICAgICAJMjQKKyNkZWZpbmUgQ0NNX1BDQ1JfV0RUX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkzX09GRlNFVAkJMjMKKyNkZWZpbmUJQ0NNX1BDQ1JfQ1NQSTNfUkVHCQlDQ01fUENDUjEKKworI2RlZmluZSBDQ01fUENDUl9DU1BJMV9NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0NTUEkxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTJfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9DU1BJMl9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkzX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfQ1NQSTNfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9ETUFfTUFTSyAgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0RNQV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0VNTUFfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfRU1NQV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0dQSU9fTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfR1BJT19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0dQVDFfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfR1BUMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0dQVDJfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfR1BUMl9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0dQVDNfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfR1BUM19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQlJPTV9NQVNLCQkoMSA8PCBDQ01fUENDUl9IQ0xLX0JST01fT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0NTSV9NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0hDTEtfQ1NJX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19ETUFfTUFTSyAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX0RNQV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRU1NQV9NQVNLICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19FTU1BX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19MQ0RDX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX0xDRENfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1NMQ0RDX01BU0sgICAgICAgCSgxIDw8IENDTV9QQ0NSX0hDTEtfU0xDRENfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19NQVNLICAgICAgCSgxIDw8IENDTV9QQ0NSX0hDTEtfVVNCT1RHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSTJDMV9NQVNLICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9JMkMxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfS1BQX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9LUFBfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9MQ0RDX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0xDRENfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9ORkNfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfTkZDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfT1dJUkVfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9PV0lSRV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1BFUkNMSzRfTUFTSyAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfUEVSQ0xLNF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1BXTV9NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfUFdNX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfUlRDX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9SVENfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TREhDMV9NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NESEMxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzJfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TREhDMl9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfU0xDRENfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TU0kxX0JBVURfTUFTSyAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NTSTFfSVBHX01BU0sgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfU1NJMV9JUEdfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TU0kyX0JBVURfTUFTSyAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTJfQkFVRF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfSVBHX01BU0sgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfU1NJMl9JUEdfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9VQVJUMV9NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1VBUlQxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDJfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUMl9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQzX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVUFSVDNfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9VQVJUNF9NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1VBUlQ0X09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVVNCT1RHX01BU0sgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VU0JPVEdfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9XRFRfTUFTSyAgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1dEVF9PRkZTRVQpCisKIAogI2RlZmluZSBDQ01fQ0NTUl8zMktTUiAgICAgICAgICAoMSA8PCAxNSkKKwogI2RlZmluZSBDQ01fQ0NTUl9DTEtNT0RFMSAgICAgICAoMSA8PCA5KQogI2RlZmluZSBDQ01fQ0NTUl9DTEtNT0RFMCAgICAgICAoMSA8PCA4KQorCiAjZGVmaW5lIENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUIDAKICNkZWZpbmUgQ0NNX0NDU1JfQ0xLT1NFTF9NQVNLICAgMHgxZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKaW5kZXggMmY5MjQwYi4uYTBmMWIzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYwpAQCAtMzQsNiArMzQsMTAgQEAKIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCiAgKiBSZXNvdXJjZSBkZWZpbml0aW9uIGZvciB0aGUgTVhDIElyREEKQEAgLTIyNSwzNyArMjI5LDIxNSBAQAogCS5yZXNvdXJjZSA9IG14Y19uYW5kX3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBsY2RjOgorICogLSBpLk1YMTogdGhlIGJhc2ljIGNvbnRyb2xsZXIKKyAqIC0gaS5NWDIxOiB0byBiZSBjaGVja2VkCisgKiAtIGkuTVgyNzogbGlrZSBpLk1YMSwgd2l0aCBzbGlnaHRseSB2YXJpYXRpb25zCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2ZiW10gPSB7CisJeworCQkuc3RhcnQgPSBMQ0RDX0JBU0VfQUREUiwKKwkJLmVuZCAgID0gTENEQ19CQVNFX0FERFIgKyAweEZGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IE1YQ19JTlRfTENEQywKKwkJLmVuZCAgID0gTVhDX0lOVF9MQ0RDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCisvKiBteGMgbGNkIGRyaXZlciAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmJfZGV2aWNlID0geworCS5uYW1lID0gImlteC1mYiIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2ZiKSwKKwkucmVzb3VyY2UgPSBteGNfZmIsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhGRkZGRkZGRiwKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEZFQ19CQVNFX0FERFIsCisJCS5lbmQJPSBGRUNfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSBNWENfSU5UX0ZFQywKKwkJLmVuZAk9IE1YQ19JTlRfRkVDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlID0geworCS5uYW1lID0gImZlYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19mZWNfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEkyQ19CQVNFX0FERFIsCisJCS5lbmQJPSBJMkNfQkFTRV9BRERSICsgMHgwZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBNWENfSU5UX0kyQywKKwkJLmVuZAk9IE1YQ19JTlRfSTJDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmNfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19pMmNfMV9yZXNvdXJjZXMKK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEkyQzJfQkFTRV9BRERSLAorCQkuZW5kCT0gSTJDMl9CQVNFX0FERFIgKyAweDBmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE1YQ19JTlRfSTJDMiwKKwkJLmVuZAk9IE1YQ19JTlRfSTJDMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjXzJfcmVzb3VyY2VzCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBXTV9CQVNFX0FERFIsCisJCS5lbmQJPSBQV01fQkFTRV9BRERSICsgMHgwZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJWzFdID0geworCQkuc3RhcnQgICA9IE1YQ19JTlRfUFdNLAorCQkuZW5kICAgICA9IE1YQ19JTlRfUFdNLAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXhjX3B3bSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzCit9OworCisvKgorICogUmVzb3VyY2UgZGVmaW5pdGlvbiBmb3IgdGhlIE1YQyBTREhDCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NkaGMxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJCS5zdGFydCA9IFNESEMxX0JBU0VfQUREUiwKKwkJCS5lbmQgICA9IFNESEMxX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwlbMV0gPSB7CisJCQkuc3RhcnQgPSBNWENfSU5UX1NESEMxLAorCQkJLmVuZCAgID0gTVhDX0lOVF9TREhDMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwlbMl0gPSB7CisJCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMSwKKwkJCS5lbmQgICAgPSBETUFfUkVRX1NESEMxLAorCQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfRE1BCisJCX0sCit9OworCitzdGF0aWMgdTY0IG14Y19zZGhjMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTAgPSB7CisgICAgICAgLm5hbWUgICAgICAgICAgID0gIm14Yy1tbWMiLAorICAgICAgIC5pZCAgICAgICAgICAgICA9IDAsCisgICAgICAgLmRldiAgICAgICAgICAgID0geworICAgICAgICAgICAgICAgLmRtYV9tYXNrID0gJm14Y19zZGhjMV9kbWFtYXNrLAorICAgICAgICAgICAgICAgLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKyAgICAgICB9LAorICAgICAgIC5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUobXhjX3NkaGMxX3Jlc291cmNlcyksCisgICAgICAgLnJlc291cmNlICAgICAgID0gbXhjX3NkaGMxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NkaGMyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJCS5zdGFydCA9IFNESEMyX0JBU0VfQUREUiwKKwkJCS5lbmQgICA9IFNESEMyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwlbMV0gPSB7CisJCQkuc3RhcnQgPSBNWENfSU5UX1NESEMyLAorCQkJLmVuZCAgID0gTVhDX0lOVF9TREhDMiwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfSwKKwlbMl0gPSB7CisJCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMiwKKwkJCS5lbmQgICAgPSBETUFfUkVRX1NESEMyLAorCQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfRE1BCisJCX0sCit9OworCitzdGF0aWMgdTY0IG14Y19zZGhjMl9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTEgPSB7CisgICAgICAgLm5hbWUgICAgICAgICAgID0gIm14Yy1tbWMiLAorICAgICAgIC5pZCAgICAgICAgICAgICA9IDEsCisgICAgICAgLmRldiAgICAgICAgICAgID0geworICAgICAgICAgICAgICAgLmRtYV9tYXNrID0gJm14Y19zZGhjMl9kbWFtYXNrLAorICAgICAgICAgICAgICAgLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKyAgICAgICB9LAorICAgICAgIC5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUobXhjX3NkaGMyX3Jlc291cmNlcyksCisgICAgICAgLnJlc291cmNlICAgICAgID0gbXhjX3NkaGMyX3Jlc291cmNlcywKK307CisKIC8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteF9ncGlvX3BvcnRzW10gPSB7CiAJWzBdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAogCQkuaXJxID0gTVhDX0lOVF9HUElPLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDApLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIpLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQsCiAJfSwKIAlbMV0gPSB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMSIsCi0JCS5iYXNlID0gKHZvaWQqKShBSVBJX0JBU0VfQUREUl9WSVJUICsgMHgxNTAwMCArIDB4MTAwICogMSksCisJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MTAwKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMzIsCiAJfSwKIAlbMl0gPSB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCi0JCS5iYXNlID0gKHZvaWQqKShBSVBJX0JBU0VfQUREUl9WSVJUICsgMHgxNTAwMCArIDB4MTAwICogMiksCisJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MjAwKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCiAJfSwKIAlbM10gPSB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMyIsCi0JCS5iYXNlID0gKHZvaWQqKShBSVBJX0JBU0VfQUREUl9WSVJUICsgMHgxNTAwMCArIDB4MTAwICogMyksCisJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MzAwKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgOTYsCiAJfSwKIAlbNF0gPSB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tNCIsCi0JCS5iYXNlID0gKHZvaWQqKShBSVBJX0JBU0VfQUREUl9WSVJUICsgMHgxNTAwMCArIDB4MTAwICogNCksCisJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4NDAwKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMTI4LAogCX0sCiAJWzVdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTUiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDUpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDUwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDE2MCwKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCmluZGV4IDFlOGNiNTcuLjA0OTAwNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKQEAgLTEsNCArMSwzIEBACi0KIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQxOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MzsKQEAgLTE0LDMgKzEzLDEwIEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2U1OwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfbmFuZF9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmJfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZlY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jCmluZGV4IGRlYTY1MjEuLmJkNTFkZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKaW5kZXggMmI1YzY3Zi4uNGEzYjA5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MS1teDIuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDI3YWRzLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0xMzUsNiArMTM1LDcgQEAKIHsKIAlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX3VhcnQzX3BpbnMsCiAJCQlBUlJBWV9TSVpFKG14Y191YXJ0M19waW5zKSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXhjX3VhcnQ0X3BpbnNbXSA9IHsKQEAgLTE3OSw2ICsxODAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm14MjdhZHNfbm9yX210ZF9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBteGNfZmVjX3BpbnNbXSA9IHsKQEAgLTE5Niw3ICsxOTgsNyBAQAogCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAogCVBEMTJfQU9VVF9GRUNfUlhEMCwKIAlQRDEzX0FPVVRfRkVDX1JYX0RWLAotCVBEMTRfQU9VVF9GRUNfQ0xSLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAogCVBEMTVfQU9VVF9GRUNfQ09MLAogCVBEMTZfQUlOX0ZFQ19UWF9FUiwKIAlQRjIzX0FJTl9GRUNfVFhfRU4KQEAgLTIwOCwxMiArMjEwLDYgQEAKIAkJCUFSUkFZX1NJWkUobXhjX2ZlY19waW5zKSwgIkZFQyIpOwogfQogCi1zdGF0aWMgdm9pZCBncGlvX2ZlY19pbmFjdGl2ZSh2b2lkKQotewotCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfZmVjX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y19mZWNfcGlucykpOwotfQotCiBzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CiAJewogCQkuaW5pdCA9IHVhcnRfbXhjX3BvcnQwX2luaXQsCkBAIC0yNjMsMTEgKzI1OSwxMCBAQAogCWlmICgoX19yYXdfcmVhZHcoUEJDX1ZFUlNJT05fUkVHKSAmIENLSUhfMjdNSFpfQklUX1NFVCkgPT0gMCkKIAkJZnJlZiA9IDI3MDAwMDAwOwogCi0JbXhjX2Nsb2Nrc19pbml0KGZyZWYpOwotCW14Y190aW1lcl9pbml0KCJncHRfY2xrLjAiKTsKKwlteDI3X2Nsb2Nrc19pbml0KGZyZWYpOwogfQogCi1zdHJ1Y3Qgc3lzX3RpbWVyIG14MjdhZHNfdGltZXIgPSB7CitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0gewogCS5pbml0CT0gbXgyN2Fkc190aW1lcl9pbml0LAogfTsKIApAQCAtMjgwLDcgKzI3NSw3IEBACiAJfSwKIH07CiAKLXZvaWQgX19pbml0IG14MjdhZHNfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyN2Fkc19tYXBfaW8odm9pZCkKIHsKIAlteGNfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KG14MjdhZHNfaW9fZGVzYywgQVJSQVlfU0laRShteDI3YWRzX2lvX2Rlc2MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKaW5kZXggZGZkNDE1Ni4uYWE0ZWFhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKQEAgLTIwLDExICsyMCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDEtbXgyLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorI2lmZGVmIENPTkZJR19JMkNfSU1YCisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wY20wMzguaD4KQEAgLTEyMSwxMCArMTI4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXhjX3VhcnQyX3BpbnNbXSA9IHsgUEUxMF9QRl9VQVJUM19DVFMsCitzdGF0aWMgaW50IG14Y191YXJ0Ml9waW5zW10gPSB7IFBFOF9QRl9VQVJUM19UWEQsCiAJCQkJUEU5X1BGX1VBUlQzX1JYRCwKIAkJCQlQRTEwX1BGX1VBUlQzX0NUUywKLQkJCQlQRTlfUEZfVUFSVDNfUlhEIH07CisJCQkJUEUxMV9QRl9VQVJUM19SVFMgfTsKIAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0Ml9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0xNzAsNyArMTc3LDcgQEAKIAlQRDExX0FPVVRfRkVDX1RYX0NMSywKIAlQRDEyX0FPVVRfRkVDX1JYRDAsCiAJUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX0NMUiwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKIAlQRDE1X0FPVVRfRkVDX0NPTCwKIAlQRDE2X0FJTl9GRUNfVFhfRVIsCiAJUEYyM19BSU5fRkVDX1RYX0VOCkBAIC0xODIsMTIgKzE4OSw2IEBACiAJCQlBUlJBWV9TSVpFKG14Y19mZWNfcGlucyksICJGRUMiKTsKIH0KIAotc3RhdGljIHZvaWQgZ3Bpb19mZWNfaW5hY3RpdmUodm9pZCkKLXsKLQlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX2ZlY19waW5zLAotCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpKTsKLX0KLQogc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjbTAzOF9uYW5kX2JvYXJkX2luZm8gPSB7CiAJLndpZHRoID0gMSwKIAkuaHdfZWNjID0gMSwKQEAgLTE5Niw2ICsxOTcsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwY20wMzhfbm9yX210ZF9kZXZpY2UsCiAJJm14Y193MV9tYXN0ZXJfZGV2aWNlLAorCSZteGNfZmVjX2RldmljZSwKIAkmcGNtMDM4X3NyYW1fbXRkX2RldmljZSwKIH07CiAKQEAgLTIwOCw2ICsyMTAsNTEgQEAKIAlfX3Jhd193cml0ZWwoMHgyMjIyMGEwMCwgQ1NDUl9BKDEpKTsKIH0KIAorI2lmZGVmIENPTkZJR19JMkNfSU1YCitzdGF0aWMgaW50IG14Y19pMmMxX3BpbnNbXSA9IHsKKwlQQzVfUEZfSTJDMl9TREEsCisJUEM2X1BGX0kyQzJfU0NMCit9OworCitzdGF0aWMgaW50IHBjbTAzOF9pMmNfMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfaTJjMV9waW5zLCBBUlJBWV9TSVpFKG14Y19pMmMxX3BpbnMpLAorCQkJIkkyQzEiKTsKK30KKworc3RhdGljIHZvaWQgcGNtMDM4X2kyY18xX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfaTJjMV9waW5zLCBBUlJBWV9TSVpFKG14Y19pMmMxX3BpbnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzhfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKKwkuaW5pdCA9IHBjbTAzOF9pMmNfMV9pbml0LAorCS5leGl0ID0gcGNtMDM4X2kyY18xX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBib2FyZF9lZXByb20gPSB7CisJLmJ5dGVfbGVuID0gNDA5NiwKKwkucGFnZV9zaXplID0gMzIsCisJLmZsYWdzID0gQVQyNF9GTEFHX0FERFIxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtMDM4X2kyY19kZXZpY2VzW10gPSB7CisJWzBdID0geworCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKKwl9LAorCVsxXSA9IHsKKwkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCisJCS50eXBlID0gInBjZjg1NjMiCisJfSwKKwlbMl0gPSB7CisJCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCisJCS50eXBlID0gImxtNzUiCisJfQorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXQodm9pZCkKIHsKIAlncGlvX2ZlY19hY3RpdmUoKTsKQEAgLTIxNyw5ICsyNjQsMTcgQEAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YVsxXSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfcGRhdGFbMl0pOwogCi0JbXhjX2dwaW9fbW9kZShQRTE2X0FGX1JUQ0spOyAvKiBPV0lSRSAqLworCW14Y19ncGlvX21vZGUoUEUxNl9BRl9PV0lSRSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmcGNtMDM4X25hbmRfYm9hcmRfaW5mbyk7CiAKKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzhfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShwY20wMzhfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzOF9pMmNfMV9kYXRhKTsKKyNlbmRpZgorCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECkBAIC0yMjksMTEgKzI4NCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJncHRfY2xrLjAiKTsKKwlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAotc3RydWN0IHN5c190aW1lciBwY20wMzhfdGltZXIgPSB7CitzdGF0aWMgc3RydWN0IHN5c190aW1lciBwY20wMzhfdGltZXIgPSB7CiAJLmluaXQgPSBwY20wMzhfdGltZXJfaW5pdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwppbmRleCBhNTYwY2Q2Li5iZjRlNTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCkBAIC0xNyw5ICsxNywxMzggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIGludCBwY205NzBfc2RoYzJfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1JUQyArIDI4KTsKK30KKworc3RhdGljIGludCBwY205NzBfc2RoYzJfcGluc1tdID0geworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCit9OworCitzdGF0aWMgaW50IHBjbTk3MF9zZGhjMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjbTk3MF9zZGhjMl9waW5zLAorCQlBUlJBWV9TSVpFKHBjbTk3MF9zZGhjMl9waW5zKSwgInNkaGMyIik7CisJaWYocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0dQSU9DKDI5KSwgZGV0ZWN0X2lycSwgMCwKKwkJCQkiaW14LW1tYy1kZXRlY3QiLCBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWxlYXNlX2dwaW87CisKKwlzZXRfaXJxX3R5cGUoSVJRX0dQSU9DKDI5KSwgSVJRRl9UUklHR0VSX0ZBTExJTkcpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVEMgKyAyOCwgImlteC1tbWMtcm8iKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWxlYXNlX2dwaW87CisKKwlteGNfZ3Bpb19tb2RlKChHUElPX1BPUlRDIHwgMjgpIHwgR1BJT19HUElPIHwgR1BJT19JTik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QT1JUQyArIDI4KTsKKworCXJldHVybiAwOworCitvdXRfcmVsZWFzZV9ncGlvOgorCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwY205NzBfc2RoYzJfcGlucywKKwkJCUFSUkFZX1NJWkUocGNtOTcwX3NkaGMyX3BpbnMpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwY205NzBfc2RoYzJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoSVJRX0dQSU9DKDI5KSwgZGF0YSk7CisJZ3Bpb19mcmVlKEdQSU9fUE9SVEMgKyAyOCk7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKHBjbTk3MF9zZGhjMl9waW5zLAorCQkJQVJSQVlfU0laRShwY205NzBfc2RoYzJfcGlucykpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CisJLmdldF9ybyA9IHBjbTk3MF9zZGhjMl9nZXRfcm8sCisJLmluaXQgPSBwY205NzBfc2RoYzJfaW5pdCwKKwkuZXhpdCA9IHBjbTk3MF9zZGhjMl9leGl0LAorfTsKKworc3RhdGljIGludCBteGNfZmJfcGluc1tdID0geworCVBBNV9QRl9MU0NMSywJUEE2X1BGX0xEMCwJUEE3X1BGX0xEMSwJUEE4X1BGX0xEMiwKKwlQQTlfUEZfTEQzLAlQQTEwX1BGX0xENCwJUEExMV9QRl9MRDUsCVBBMTJfUEZfTEQ2LAorCVBBMTNfUEZfTEQ3LAlQQTE0X1BGX0xEOCwJUEExNV9QRl9MRDksCVBBMTZfUEZfTEQxMCwKKwlQQTE3X1BGX0xEMTEsCVBBMThfUEZfTEQxMiwJUEExOV9QRl9MRDEzLAlQQTIwX1BGX0xEMTQsCisJUEEyMV9QRl9MRDE1LAlQQTIyX1BGX0xEMTYsCVBBMjNfUEZfTEQxNywJUEEyNF9QRl9SRVYsCisJUEEyNV9QRl9DTFMsCVBBMjZfUEZfUFMsCVBBMjdfUEZfU1BMX1NQUiwgUEEyOF9QRl9IU1lOQywKKwlQQTI5X1BGX1ZTWU5DLAlQQTMwX1BGX0NPTlRSQVNULCBQQTMxX1BGX09FX0FDRAorfTsKKworc3RhdGljIGludCBwY20wMzhfZmJfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y19mYl9waW5zLAorCQkJQVJSQVlfU0laRShteGNfZmJfcGlucyksICJGQiIpOworfQorCitzdGF0aWMgaW50IHBjbTAzOF9mYl9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y19mYl9waW5zLCBBUlJBWV9TSVpFKG14Y19mYl9waW5zKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbm5lY3RlZCBpcyBhIHBvcnRyYWl0IFNoYXJwLVFWR0EgZGlzcGxheQorICogb2YgdHlwZTogTFEwMzVRN0RIMDYKKyAqLworc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBwY20wMzhfZmJfZGF0YSA9IHsKKwkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCisJLnhyZXMJCT0gMjQwLAorCS55cmVzCQk9IDMyMCwKKworCS5icHAJCT0gMTYsCisJLmhzeW5jX2xlbgk9IDcsCisJLmxlZnRfbWFyZ2luCT0gNSwKKwkucmlnaHRfbWFyZ2luCT0gMTYsCisKKwkudnN5bmNfbGVuCT0gMSwKKwkudXBwZXJfbWFyZ2luCT0gNywKKwkubG93ZXJfbWFyZ2luCT0gOSwKKwkuZml4ZWRfc2NyZWVuX2NwdSA9IDAsCisKKwkvKgorCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKKwkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCisJICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCisJICogLSBjbG9jayBub3QgaW52ZXJ0ZWQKKwkgKiAtIGRhdGEgbm90IGludmVydGVkCisJICogLSBkYXRhIGVuYWJsZSBsb3cgYWN0aXZlCisJICogLSBlbmFibGUgc2hhcnAgbW9kZQorCSAqLworCS5wY3IJCT0gMHhGQTAwODBDMCwKKwkucHdtcgkJPSAweDAwQTkwM0ZGLAorCS5sc2NyMQkJPSAweDAwMTIwMzAwLAorCS5kbWFjcgkJPSAweDAwMDIwMDEwLAorCisJLmluaXQgPSBwY20wMzhfZmJfaW5pdCwKKwkuZXhpdCA9IHBjbTAzOF9mYl9leGl0LAorfTsKKwogLyoKICAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IHBjbTAzOCBpbml0LgogICoKQEAgLTI4LDQgKzE1Nyw2IEBACiAgKi8KIHZvaWQgX19pbml0IHBjbTk3MF9iYXNlYm9hcmRfaW5pdCh2b2lkKQogeworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgJnNkaGNfcGRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9zZXJpYWwuYwppbmRleCAxNmRlYmMyLi40MGE0ODVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9zZXJpYWwuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7CiAJewpAQCAtOTksNiArMTAwLDcgQEAKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDMpLAogfTsKIAorI2lmZGVmIENPTkZJR19NQUNIX01YMjcKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRbXSA9IHsKIAl7CiAJCS5zdGFydCA9IFVBUlQ1X0JBU0VfQUREUiwKQEAgLTEzNiwzICsxMzgsNCBAQAogCS5yZXNvdXJjZSA9IHVhcnQ1LAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0NSksCiB9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9zeXN0ZW0uYyBiL2FyY2gvYXJtL21hY2gtbXgyL3N5c3RlbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgyNjk3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3N5c3RlbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAotICogQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KLS8qCi0gKiBQdXQgdGhlIENQVSBpbnRvIGlkbGUgbW9kZS4gSXQgaXMgY2FsbGVkIGJ5IGRlZmF1bHRfaWRsZSgpCi0gKiBpbiBwcm9jZXNzLmMgZmlsZS4KLSAqLwotdm9pZCBhcmNoX2lkbGUodm9pZCkKLXsKLQkvKgotCSAqIFRoaXMgc2hvdWxkIGRvIGFsbCB0aGUgY2xvY2sgc3dpdGNoaW5nCi0JICogYW5kIHdhaXQgZm9yIGludGVycnVwdCB0cmlja3MuCi0JICovCi0JY3B1X2RvX2lkbGUoKTsKLX0KLQotI2RlZmluZSBXRE9HX1dDUl9SRUcgICAgICAgICAgICAgICAgICAgIElPX0FERFJFU1MoV0RPR19CQVNFX0FERFIpCi0jZGVmaW5lIFdET0dfV0NSX1NSUyAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLQotLyoKLSAqIFJlc2V0IHRoZSBzeXN0ZW0uIEl0IGlzIGNhbGxlZCBieSBtYWNoaW5lX3Jlc3RhcnQoKS4KLSAqLwotdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0KLQljbGsgPSBjbGtfZ2V0KE5VTEwsICJ3ZG9nX2NsayIpOwotCWlmICghY2xrKSB7Ci0JCXByaW50ayhLRVJOX0VSUiJDYW5ub3QgYWN0aXZhdGUgdGhlIHdhdGNoZG9nLiBHaXZpbmcgdXBcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY2xrX2VuYWJsZShjbGspOwotCi0JLyogQXNzZXJ0IFNSUyBzaWduYWwgKi8KLQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoV0RPR19XQ1JfUkVHKSAmIH5XRE9HX1dDUl9TUlMsIFdET0dfV0NSX1JFRyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZwppbmRleCBlNzk2NTllLi5kNjIzNTU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKQEAgLTEsMjEgKzEsNDAgQEAKLW1lbnUgIk1YMyBPcHRpb25zIgotCWRlcGVuZHMgb24gQVJDSF9NWDMKK2lmIEFSQ0hfTVgzCisKK2NvbmZpZyBBUkNIX01YMzEKKwlib29sCisKK2NvbmZpZyBBUkNIX01YMzUKKwlib29sCisKK2NvbW1lbnQgIk1YMyBwbGF0Zm9ybXM6IgogCiBjb25maWcgTUFDSF9NWDMxQURTCiAJYm9vbCAiU3VwcG9ydCBNWDMxQURTIHBsYXRmb3JtcyIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDMxQURTIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX01YMzFBRFNfV00xMTMzX0VWMQorCWJvb2wgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIDExMzMtRVYxIG1vZHVsZSIKKwlkZXBlbmRzIG9uIE1BQ0hfTVgzMUFEUworCXNlbGVjdCBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKKwlzZWxlY3QgTUZEX1dNODM1Ml9DT05GSUdfTU9ERV8wCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIDExMzMtRVYxIFBNVQorCSAgYW5kIGF1ZGlvIG1vZHVsZSBmb3IgdGhlIE1YMzFBRFMgcGxhdGZvcm0uCisKIGNvbmZpZyBNQUNIX1BDTTAzNwotCWJvb2wgIlN1cHBvcnQgUGh5dGVjIHBjbTAzNyBwbGF0Zm9ybXMiCisJYm9vbCAiU3VwcG9ydCBQaHl0ZWMgcGNtMDM3IChpLk1YMzEpIHBsYXRmb3JtcyIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBQaHl0ZWMgcGNtMDM3IHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzCiAJICBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKIGNvbmZpZyBNQUNIX01YMzFMSVRFCiAJYm9vbCAiU3VwcG9ydCBNWDMxIExJVEVLSVQgKExvZ2ljUEQpIgorCXNlbGVjdCBBUkNIX01YMzEKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMzEgTElURUtJVCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwpAQCAtMjMsNiArNDIsNyBAQAogCiBjb25maWcgTUFDSF9NWDMxXzNEUwogCWJvb2wgIlN1cHBvcnQgTVgzMVBESyAoM0RTKSIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDMxUERLICgzRFMpIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCkBAIC0zMCwxMCArNTAsMTggQEAKIAogY29uZmlnIE1BQ0hfTVgzMU1PQk9BUkQKIAlib29sICJTdXBwb3J0IG14MzFtb2JvYXJkIHBsYXRmb3JtcyAoRVBGTCBNb2JvdHMgZ3JvdXApIgorCXNlbGVjdCBBUkNIX01YMzEKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIG14MzFtb2JvYXJkIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKLWVuZG1lbnUKK2NvbmZpZyBNQUNIX1FPTkcKKwlib29sICJTdXBwb3J0IERhdmUvREVOWCBRb25nRVZCLUxJVEUgcGxhdGZvcm0iCisJc2VsZWN0IEFSQ0hfTVgzMQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgRGF2ZS9ERU5YIFFvbmdFVkItTElURSBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcworCSAgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQppbmRleCA1YTE1MTU0MC4uMjcyYzhhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKQEAgLTQsOSArNCwxMyBAQAogCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCi1vYmoteQkJCTo9IG1tLm8gY2xvY2subyBkZXZpY2VzLm8gaW9tdXgubworb2JqLXkJCQkJOj0gbW0ubyBkZXZpY2VzLm8KK29iai0kKENPTkZJR19BUkNIX01YMzEpCQkrPSBjbG9jay5vIGlvbXV4Lm8KK29iai0kKENPTkZJR19BUkNIX01YMzUpCQkrPSBjbG9jay1pbXgzNS5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxQURTKQkrPSBteDMxYWRzLm8KIG9iai0kKENPTkZJR19NQUNIX01YMzFMSVRFKQkrPSBteDMxbGl0ZS5vCiBvYmotJChDT05GSUdfTUFDSF9QQ00wMzcpCSs9IHBjbTAzNy5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxXzNEUykJKz0gbXgzMXBkay5vCi1vYmotJChDT05GSUdfTUFDSF9NWDMxTU9CT0FSRCkJKz0gbXgzMW1vYm9hcmQubworb2JqLSQoQ09ORklHX01BQ0hfTVgzMU1PQk9BUkQpCSs9IG14MzFtb2JvYXJkLm8gbXgzMW1vYm9hcmQtZGV2Ym9hcmQubyBcCisJCQkJICAgbXgzMW1vYm9hcmQtbWFyeGJvdC5vCitvYmotJChDT05GSUdfTUFDSF9RT05HKQkJKz0gcW9uZy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ExMTJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKworI2RlZmluZSBDQ01fQkFTRQlJT19BRERSRVNTKENDTV9CQVNFX0FERFIpCisKKyNkZWZpbmUgQ0NNX0NDTVIgICAgICAgIDB4MDAKKyNkZWZpbmUgQ0NNX1BEUjAgICAgICAgIDB4MDQKKyNkZWZpbmUgQ0NNX1BEUjEgICAgICAgIDB4MDgKKyNkZWZpbmUgQ0NNX1BEUjIgICAgICAgIDB4MEMKKyNkZWZpbmUgQ0NNX1BEUjMgICAgICAgIDB4MTAKKyNkZWZpbmUgQ0NNX1BEUjQgICAgICAgIDB4MTQKKyNkZWZpbmUgQ0NNX1JDU1IgICAgICAgIDB4MTgKKyNkZWZpbmUgQ0NNX01QQ1RMICAgICAgIDB4MUMKKyNkZWZpbmUgQ0NNX1BQQ1RMICAgICAgIDB4MjAKKyNkZWZpbmUgQ0NNX0FDTVIgICAgICAgIDB4MjQKKyNkZWZpbmUgQ0NNX0NPU1IgICAgICAgIDB4MjgKKyNkZWZpbmUgQ0NNX0NHUjAgICAgICAgIDB4MkMKKyNkZWZpbmUgQ0NNX0NHUjEgICAgICAgIDB4MzAKKyNkZWZpbmUgQ0NNX0NHUjIgICAgICAgIDB4MzQKKyNkZWZpbmUgQ0NNX0NHUjMgICAgICAgIDB4MzgKKworI2lmZGVmIEhBVkVfU0VUX1JBVEVfU1VQUE9SVAorc3RhdGljIHZvaWQgY2FsY19kaXZpZGVycyh1MzIgZGl2LCB1MzIgKnByZSwgdTMyICpwb3N0LCB1MzIgbWF4cG9zdCkKK3sKKwl1MzIgbWluX3ByZSwgdGVtcF9wcmUsIG9sZF9lcnIsIGVycjsKKworCW1pbl9wcmUgPSAoZGl2IC0gMSkgLyBtYXhwb3N0ICsgMTsKKwlvbGRfZXJyID0gODsKKworCWZvciAodGVtcF9wcmUgPSA4OyB0ZW1wX3ByZSA+PSBtaW5fcHJlOyB0ZW1wX3ByZS0tKSB7CisJCWlmIChkaXYgPiAodGVtcF9wcmUgKiBtYXhwb3N0KSkKKwkJCWJyZWFrOworCisJCWlmIChkaXYgPCAodGVtcF9wcmUgKiB0ZW1wX3ByZSkpCisJCQljb250aW51ZTsKKworCQllcnIgPSBkaXYgJSB0ZW1wX3ByZTsKKworCQlpZiAoZXJyID09IDApIHsKKwkJCSpwcmUgPSB0ZW1wX3ByZTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyID0gdGVtcF9wcmUgLSBlcnI7CisKKwkJaWYgKGVyciA8IG9sZF9lcnIpIHsKKwkJCW9sZF9lcnIgPSBlcnI7CisJCQkqcHJlID0gdGVtcF9wcmU7CisJCX0KKwl9CisKKwkqcG9zdCA9IChkaXYgKyAqcHJlIC0gMSkgLyAqcHJlOworfQorCisvKiBnZXQgdGhlIGJlc3QgdmFsdWVzIGZvciBhIDMtYml0IGRpdmlkZXIgY29tYmluZWQgd2l0aCBhIDYtYml0IGRpdmlkZXIgKi8KK3N0YXRpYyB2b2lkIGNhbGNfZGl2aWRlcnNfM182KHUzMiBkaXYsIHUzMiAqcHJlLCB1MzIgKnBvc3QpCit7CisJaWYgKGRpdiA+PSA1MTIpIHsKKwkJKnByZSA9IDg7CisJCSpwb3N0ID0gNjQ7CisJfSBlbHNlIGlmIChkaXYgPj0gNjQpIHsKKwkJY2FsY19kaXZpZGVycyhkaXYsIHByZSwgcG9zdCwgNjQpOworCX0gZWxzZSBpZiAoZGl2IDw9IDgpIHsKKwkJKnByZSA9IGRpdjsKKwkJKnBvc3QgPSAxOworCX0gZWxzZSB7CisJCSpwcmUgPSAxOworCQkqcG9zdCA9IGRpdjsKKwl9Cit9CisKKy8qIGdldCB0aGUgYmVzdCB2YWx1ZXMgZm9yIHR3byBjYXNjYWRlZCAzLWJpdCBkaXZpZGVycyAqLworc3RhdGljIHZvaWQgY2FsY19kaXZpZGVyc18zXzModTMyIGRpdiwgdTMyICpwcmUsIHUzMiAqcG9zdCkKK3sKKwlpZiAoZGl2ID49IDY0KSB7CisJCSpwcmUgPSAqcG9zdCA9IDg7CisJfSBlbHNlIGlmIChkaXYgPiA4KSB7CisJCWNhbGNfZGl2aWRlcnMoZGl2LCBwcmUsIHBvc3QsIDgpOworCX0gZWxzZSB7CisJCSpwcmUgPSAxOworCQkqcG9zdCA9IGRpdjsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXBsbCh2b2lkKQoreworCXVsb25nIG1wY3RsID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fTVBDVEwpOworCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKG1wY3RsLCAyNDAwMDAwMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3BwbGwodm9pZCkKK3sKKwl1bG9uZyBwcGN0bCA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BQQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChwcGN0bCwgMjQwMDAwMDApOworfQorCitzdHJ1Y3QgYXJtX2FoYl9kaXYgeworCXVuc2lnbmVkIGNoYXIgYXJtLCBhaGIsIHNlbDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2FoYl9kaXYgY2xrX2NvbnN1bWVyW10gPSB7CisJeyAuYXJtID0gMSwgLmFoYiA9IDQsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gMywgLnNlbCA9IDF9LAorCXsgLmFybSA9IDIsIC5haGIgPSAyLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCisJeyAuYXJtID0gNCwgLmFoYiA9IDEsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gNSwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSA4LCAuc2VsID0gMH0sCisJeyAuYXJtID0gMSwgLmFoYiA9IDYsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAyLCAuYWhiID0gNCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDQsIC5haGIgPSAyLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2FoYl9kaXYgY2xrX2F1dG9tb3RpdmVbXSA9IHsKKwl7IC5hcm0gPSAxLCAuYWhiID0gMywgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSAyLCAuc2VsID0gMX0sCisJeyAuYXJtID0gMiwgLmFoYiA9IDEsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSA2LCAuc2VsID0gMH0sCisJeyAuYXJtID0gMSwgLmFoYiA9IDQsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAyLCAuYWhiID0gMiwgLnNlbCA9IDF9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9hcm0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjAgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIwKTsKKwlzdHJ1Y3QgYXJtX2FoYl9kaXYgKmFhZDsKKwl1bnNpZ25lZCBsb25nIGZyZWYgPSBnZXRfcmF0ZV9tcGxsKCk7CisKKwlpZiAocGRyMCAmIDEpIHsKKwkJLyogY29uc3VtZXIgcGF0aCAqLworCQlhYWQgPSAmY2xrX2NvbnN1bWVyWyhwZHIwID4+IDE2KSAmIDB4Zl07CisJCWlmIChhYWQtPnNlbCkKKwkJCWZyZWYgPSBmcmVmICogMiAvIDM7CisJfSBlbHNlIHsKKwkJLyogYXV0byBwYXRoICovCisJCWFhZCA9ICZjbGtfYXV0b21vdGl2ZVsocGRyMCA+PiA5KSAmIDB4N107CisJCWlmIChhYWQtPnNlbCkKKwkJCWZyZWYgPSBmcmVmICogMyAvIDQ7CisJfQorCXJldHVybiBmcmVmIC8gYWFkLT5hcm07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2FoYihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIwID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMCk7CisJc3RydWN0IGFybV9haGJfZGl2ICphYWQ7CisJdW5zaWduZWQgbG9uZyBmcmVmID0gZ2V0X3JhdGVfbXBsbCgpOworCisJaWYgKHBkcjAgJiAxKQorCQkvKiBjb25zdW1lciBwYXRoICovCisJCWFhZCA9ICZjbGtfY29uc3VtZXJbKHBkcjAgPj4gMTYpICYgMHhmXTsKKwllbHNlCisJCS8qIGF1dG8gcGF0aCAqLworCQlhYWQgPSAmY2xrX2F1dG9tb3RpdmVbKHBkcjAgPj4gOSkgJiAweDddOworCisJcmV0dXJuIGZyZWYgLyBhYWQtPmFoYjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfaXBnKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfYWhiKE5VTEwpID4+IDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF8zXzNfZGl2KHVuc2lnbmVkIGxvbmcgaW4pCit7CisJcmV0dXJuICgoKGluID4+IDMpICYgMHg3KSArIDEpICogKChpbiAmIDB4NykgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdWFydChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIzID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMyk7CisJdW5zaWduZWQgbG9uZyBwZHI0ID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSNCk7CisJdW5zaWduZWQgbG9uZyBkaXYgPSBnZXRfM18zX2RpdihwZHI0ID4+IDEwKTsKKworCWlmIChwZHIzICYgKDEgPDwgMTQpKQorCQlyZXR1cm4gZ2V0X3JhdGVfYXJtKCkgLyBkaXY7CisJZWxzZQorCQlyZXR1cm4gZ2V0X3JhdGVfcHBsbCgpIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zZGhjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjMgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIzKTsKKwl1bnNpZ25lZCBsb25nIGRpdiwgcmF0ZTsKKworCWlmIChwZHIzICYgKDEgPDwgNikpCisJCXJhdGUgPSBnZXRfcmF0ZV9hcm0oKTsKKwllbHNlCisJCXJhdGUgPSBnZXRfcmF0ZV9wcGxsKCk7CisKKwlzd2l0Y2ggKGNsay0+aWQpIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJZGl2ID0gcGRyMyAmIDB4M2Y7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGl2ID0gKHBkcjMgPj4gOCkgJiAweDNmOworCQlicmVhazsKKwljYXNlIDI6CisJCWRpdiA9IChwZHIzID4+IDE2KSAmIDB4M2Y7CisJCWJyZWFrOworCX0KKworCXJldHVybiByYXRlIC8gZ2V0XzNfM19kaXYoZGl2KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbXNoYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIxID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMSk7CisJdW5zaWduZWQgbG9uZyBkaXYxLCBkaXYyLCByYXRlOworCisJaWYgKHBkcjEgJiAoMSA8PCA3KSkKKwkJcmF0ZSA9IGdldF9yYXRlX2FybSgpOworCWVsc2UKKwkJcmF0ZSA9IGdldF9yYXRlX3BwbGwoKTsKKworCWRpdjEgPSAocGRyMSA+PiAyOSkgJiAweDc7CisJZGl2MiA9IChwZHIxID4+IDIyKSAmIDB4M2Y7CisKKwlyZXR1cm4gcmF0ZSAvICgoZGl2MSArIDEpICogKGRpdjIgKyAxKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIyID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMik7CisJdW5zaWduZWQgbG9uZyBkaXYxLCBkaXYyLCByYXRlOworCisJaWYgKHBkcjIgJiAoMSA8PCA2KSkKKwkJcmF0ZSA9IGdldF9yYXRlX2FybSgpOworCWVsc2UKKwkJcmF0ZSA9IGdldF9yYXRlX3BwbGwoKTsKKworCXN3aXRjaCAoY2xrLT5pZCkgeworCWRlZmF1bHQ6CisJY2FzZSAwOgorCQlkaXYxID0gcGRyMiAmIDB4M2Y7CisJCWRpdjIgPSAocGRyMiA+PiAyNCkgJiAweDc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGl2MSA9IChwZHIyID4+IDgpICYgMHgzZjsKKwkJZGl2MiA9IChwZHIyID4+IDI3KSAmIDB4NzsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJhdGUgLyAoKGRpdjEgKyAxKSAqIChkaXYyICsgMSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jc2koc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGRyMiA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjIpOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChwZHIyICYgKDEgPDwgNykpCisJCXJhdGUgPSBnZXRfcmF0ZV9hcm0oKTsKKwllbHNlCisJCXJhdGUgPSBnZXRfcmF0ZV9wcGxsKCk7CisKKwlyZXR1cm4gcmF0ZSAvIGdldF8zXzNfZGl2KChwZHIyID4+IDE2KSAmIDB4M2YpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGdfcGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjAgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIwKTsKKwl1bnNpZ25lZCBsb25nIHBkcjQgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFI0KTsKKwl1bnNpZ25lZCBsb25nIGRpdjEsIGRpdjI7CisKKwlpZiAocGRyMCAmICgxIDw8IDI2KSkgeworCQlkaXYxID0gKHBkcjQgPj4gMTkpICYgMHg3OworCQlkaXYyID0gKHBkcjQgPj4gMTYpICYgMHg3OworCQlyZXR1cm4gZ2V0X3JhdGVfYXJtKCkgLyAoKGRpdjEgKyAxKSAqIChkaXYyICsgMSkpOworCX0gZWxzZSB7CisJCWRpdjEgPSAocGRyMCA+PiAxMikgJiAweDc7CisJCXJldHVybiBnZXRfcmF0ZV9haGIoTlVMTCkgLyBkaXYxOworCX0KK30KKworc3RhdGljIGludCBjbGtfY2dyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDMgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGtfY2dyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyAmPSB+KDMgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gQ0NNX0JBU0UgKyBlciwJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKKwkJLmVuYWJsZQkJPSBjbGtfY2dyX2VuYWJsZSwJXAorCQkuZGlzYWJsZQk9IGNsa19jZ3JfZGlzYWJsZSwJXAorCX0KKworREVGSU5FX0NMT0NLKGFzcmNfY2xrLCAgIDAsIENDTV9DR1IwLCAgMCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgMCwgQ0NNX0NHUjAsICAyLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGF1ZG11eF9jbGssIDAsIENDTV9DR1IwLCAgNCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soY2FuMV9jbGssICAgMCwgQ0NNX0NHUjAsICA2LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGNhbjJfY2xrLCAgIDEsIENDTV9DR1IwLCAgOCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpMV9jbGssICAwLCBDQ01fQ0dSMCwgMTAsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMSwgQ0NNX0NHUjAsIDEyLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGVjdF9jbGssICAgIDAsIENDTV9DR1IwLCAxNCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlZGlvX2NsaywgICAwLCBDQ01fQ0dSMCwgMTYsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGVtaV9jbGssICAgIDAsIENDTV9DR1IwLCAxOCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlcGl0MV9jbGssICAwLCBDQ01fQ0dSMCwgMjAsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKGVwaXQyX2NsaywgIDEsIENDTV9DR1IwLCAyMiwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXNhaV9jbGssICAgMCwgQ0NNX0NHUjAsIDI0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlc2RoYzFfY2xrLCAwLCBDQ01fQ0dSMCwgMjYsIGdldF9yYXRlX3NkaGMsIE5VTEwpOworREVGSU5FX0NMT0NLKGVzZGhjMl9jbGssIDEsIENDTV9DR1IwLCAyOCwgZ2V0X3JhdGVfc2RoYywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXNkaGMzX2NsaywgMiwgQ0NNX0NHUjAsIDMwLCBnZXRfcmF0ZV9zZGhjLCBOVUxMKTsKKworREVGSU5FX0NMT0NLKGZlY19jbGssICAgIDAsIENDTV9DR1IxLCAgMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncGlvMV9jbGssICAwLCBDQ01fQ0dSMSwgIDIsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGdwaW8yX2NsaywgIDEsIENDTV9DR1IxLCAgNCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3BpbzNfY2xrLCAgMiwgQ0NNX0NHUjEsICA2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncHRfY2xrLCAgICAwLCBDQ01fQ0dSMSwgIDgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgMCwgQ0NNX0NHUjEsIDEwLCBnZXRfcmF0ZV9pcGdfcGVyLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpMmMyX2NsaywgICAxLCBDQ01fQ0dSMSwgMTIsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKGkyYzNfY2xrLCAgIDIsIENDTV9DR1IxLCAxNCwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaW9tdXhjX2NsaywgMCwgQ0NNX0NHUjEsIDE2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpcHVfY2xrLCAgICAwLCBDQ01fQ0dSMSwgMTgsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGtwcF9jbGssICAgIDAsIENDTV9DR1IxLCAyMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhtbGJfY2xrLCAgICAwLCBDQ01fQ0dSMSwgMjIsIGdldF9yYXRlX2FoYiwgTlVMTCk7CitERUZJTkVfQ0xPQ0sobXNoY19jbGssICAgMCwgQ0NNX0NHUjEsIDI0LCBnZXRfcmF0ZV9tc2hjLCBOVUxMKTsKK0RFRklORV9DTE9DSyhvd2lyZV9jbGssICAwLCBDQ01fQ0dSMSwgMjYsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgIDAsIENDTV9DR1IxLCAyOCwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0socm5nY19jbGssICAgMCwgQ0NNX0NHUjEsIDMwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworCitERUZJTkVfQ0xPQ0socnRjX2NsaywgICAgMCwgQ0NNX0NHUjIsICAwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHJ0aWNfY2xrLCAgIDAsIENDTV9DR1IyLCAgMiwgZ2V0X3JhdGVfYWhiLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAwLCBDQ01fQ0dSMiwgIDQsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soc2RtYV9jbGssICAgMCwgQ0NNX0NHUjIsICA2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzcGJhX2NsaywgICAwLCBDQ01fQ0dSMiwgIDgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3BkaWZfY2xrLCAgMCwgQ0NNX0NHUjIsIDEwLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsaywgICAwLCBDQ01fQ0dSMiwgMTIsIGdldF9yYXRlX3NzaSwgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgMSwgQ0NNX0NHUjIsIDE0LCBnZXRfcmF0ZV9zc2ksIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgIDAsIENDTV9DR1IyLCAxNiwgZ2V0X3JhdGVfdWFydCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgMSwgQ0NNX0NHUjIsIDE4LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAyLCBDQ01fQ0dSMiwgMjAsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVzYm90Z19jbGssIDAsIENDTV9DR1IyLCAyMiwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sod2RvZ19jbGssICAgMCwgQ0NNX0NHUjIsIDI0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhtYXhfY2xrLCAgICAwLCBDQ01fQ0dSMiwgMjYsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGFkbXV4X2NsaywgIDAsIENDTV9DR1IyLCAzMCwgTlVMTCwgTlVMTCk7CisKK0RFRklORV9DTE9DSyhjc2lfY2xrLCAgICAwLCBDQ01fQ0dSMywgIDAsIGdldF9yYXRlX2NzaSwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaWltX2NsaywgICAgMCwgQ0NNX0NHUjMsICAyLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncHUyZF9jbGssICAwLCBDQ01fQ0dSMywgIDQsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKQlcCisJewkJCQlcCisJCS5kZXZfaWQgPSBkLAkJXAorCQkuY29uX2lkID0gbiwJCVwKKwkJLmNsayA9ICZjLAkJXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gX19pbml0ZGF0YSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFzcmMiLCBhc3JjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdWRtdXgiLCBhdWRtdXhfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2FuIiwgY2FuMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjYW4iLCBjYW4yX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVjdCIsIGVjdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlZGlvIiwgZWRpb19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlc2FpIiwgZXNhaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZGhjIiwgZXNkaGMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkaGMiLCBlc2RoYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RoYyIsIGVzZGhjM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3BpbzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3BpbyIsIGdwaW8yX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJncHQuMCIsIE5VTEwsIGdwdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4yIiwgTlVMTCwgaTJjM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpb211eGMiLCBpb211eGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaXB1IiwgaXB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImtwcCIsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtbGIiLCBtbGJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXNoYyIsIG1zaGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3cxIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJuZ2MiLCBybmdjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0YyIsIHJ0Y19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGljIiwgcnRpY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzY2MiLCBzY2NfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RtYSIsIHNkbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3BiYSIsIHNwYmFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3BkaWYiLCBzcGRpZl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaSIsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjEiLCBOVUxMLCB1YXJ0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidXNib3RnIiwgdXNib3RnX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImlpbSIsIGlpbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHUyZCIsIGdwdTJkX2NsaykKK307CisKK2ludCBfX2luaXQgbXgzNV9jbG9ja3NfaW5pdCgpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGxsID0gMDsKKworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDM1KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19MTF9DT05TT0xFCisJbGwgPSAoMyA8PCAxNik7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJLyogVHVybiBvZmYgYWxsIGNsb2NrcyBleGNlcHQgdGhlIG9uZXMgd2UgbmVlZCB0byBzdXJ2aXZlLCBuYW1lbHk6CisJICogRU1JLCBHUElPMS8yLzMsIEdQVCwgSU9NVVgsIE1BWCBhbmQgZXZlbnR1YWxseSB1YXJ0CisJICovCisJX19yYXdfd3JpdGVsKCgzIDw8IDE4KSwgQ0NNX0JBU0UgKyBDQ01fQ0dSMCk7CisJX19yYXdfd3JpdGVsKCgzIDw8IDIpIHwgKDMgPDwgNCkgfCAoMyA8PCA2KSB8ICgzIDw8IDgpIHwgKDMgPDwgMTYpLAorCQkJQ0NNX0JBU0UgKyBDQ01fQ0dSMSk7CisJX19yYXdfd3JpdGVsKCgzIDw8IDI2KSB8IGxsLCBDQ01fQkFTRSArIENDTV9DR1IyKTsKKwlfX3Jhd193cml0ZWwoMCwgQ0NNX0JBU0UgKyBDQ01fQ0dSMyk7CisKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKaW5kZXggYjE3NDZhYS4uY2E0NmY0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCkBAIC0yMyw5ICsyMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAKICNpbmNsdWRlICJjcm1fcmVncy5oIgogCkBAIC02NCwxNyArNjgsMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjbGsgbWN1X3BsbF9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBtY3VfbWFpbl9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayB1c2JfcGxsX2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNlcmlhbF9wbGxfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsazsKIAotc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IGNncl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykKKwkJcmV0dXJuIDA7CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyB8PSAzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OwogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CkBAIC04MiwxMzMgKzg2LDY5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBjZ3JfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHJlZzsKIAorCWlmICghY2xrLT5lbmFibGVfcmVnKQorCQlyZXR1cm47CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyAmPSB+KDMgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCisJLyogc3BlY2lhbCBjYXNlIGZvciBFTUkgY2xvY2sgKi8KKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IE1YQ19DQ01fQ0dSMiAmJiBjbGstPmVuYWJsZV9zaGlmdCA9PSA4KQorCQlyZWcgfD0gKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCiAJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19lbWlfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGxfcmVmX2dldF9yYXRlKHZvaWQpCiB7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVnICY9IH4oMyA8PCBjbGstPmVuYWJsZV9zaGlmdCk7Ci0JcmVnIHw9ICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKLQlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwotfQotCi1zdGF0aWMgaW50IF9jbGtfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiByZWc7Ci0Jc2lnbmVkIGxvbmcgcGQgPSAxOwkvKiBQcmUtZGl2aWRlciAqLwotCXNpZ25lZCBsb25nIG1maTsJLyogTXVsdGlwbGljYXRpb24gRmFjdG9yIChJbnRlZ2VyIHBhcnQpICovCi0Jc2lnbmVkIGxvbmcgbWZuOwkvKiBNdWx0aXBsaWNhdGlvbiBGYWN0b3IgKEludGVnZXIgcGFydCkgKi8KLQlzaWduZWQgbG9uZyBtZmQ7CS8qIE11bHRpcGxpY2F0aW9uIEZhY3RvciAoRGVub21pbmF0b3IgUGFydCkgKi8KLQlzaWduZWQgbG9uZyB0bXA7Ci0JdTMyIHJlZl9mcmVxID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXdoaWxlICgoKHJlZl9mcmVxIC8gcGQpICogMTApID4gcmF0ZSkKLQkJcGQrKzsKLQotCWlmICgocmVmX2ZyZXEgLyBwZCkgPCBQUkVfRElWX01JTl9GUkVRKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIHRoZSByZWZfZnJlcS8yIGluIHRoZSBmb2xsb3dpbmcgaXMgdG8gcm91bmQgdXAgKi8KLQltZmkgPSAoKChyYXRlIC8gMikgKiBwZCkgKyAocmVmX2ZyZXEgLyAyKSkgLyByZWZfZnJlcTsKLQlpZiAobWZpIDwgNSB8fCBtZmkgPiAxNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBwaWNrIGEgbWZkIHZhbHVlIHRoYXQgd2lsbCB3b3JrCi0JICogdGhlbiBzb2x2ZSBmb3IgbWZuICovCi0JbWZkID0gcmVmX2ZyZXEgLyA1MDAwMDsKLQotCS8qCi0JICogICAgICAgICAgcGxsX2ZyZXEgKiBwZCAqIG1mZAotCSAqICAgbWZuID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0gIChtZmkgKiBtZmQpCi0JICogICAgICAgICAgIDIgKiByZWZfZnJlcQotCSAqLwotCS8qIHRoZSB0bXAvMiBpcyBmb3Igcm91bmRpbmcgKi8KLQl0bXAgPSByZWZfZnJlcSAvIDEwMDAwOwotCW1mbiA9Ci0JICAgICgoKCgoKHJhdGUgLyAyKSArICh0bXAgLyAyKSkgLyB0bXApICogcGQpICogbWZkKSAvIDEwMDAwKSAtCi0JICAgIChtZmkgKiBtZmQpOwotCi0JbWZuID0gbWZuICYgMHgzZmY7Ci0JcGQtLTsKLQltZmQtLTsKLQotCS8qIENoYW5nZSB0aGUgUGxsIHZhbHVlICovCi0JcmVnID0gKG1maSA8PCBNWENfQ0NNX1BDVExfTUZJX09GRlNFVCkgfAotCSAgICAobWZuIDw8IE1YQ19DQ01fUENUTF9NRk5fT0ZGU0VUKSB8Ci0JICAgIChtZmQgPDwgTVhDX0NDTV9QQ1RMX01GRF9PRkZTRVQpIHwgKHBkIDw8IE1YQ19DQ01fUENUTF9QRF9PRkZTRVQpOwotCi0JaWYgKGNsayA9PSAmbWN1X3BsbF9jbGspCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fTVBDVEwpOwotCWVsc2UgaWYgKGNsayA9PSAmdXNiX3BsbF9jbGspCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fVVBDVEwpOwotCWVsc2UgaWYgKGNsayA9PSAmc2VyaWFsX3BsbF9jbGspCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fU1JQQ1RMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbG9uZyBtZmksIG1mbiwgbWZkLCBwZGYsIHJlZl9jbGssIG1mbl9hYnM7Ci0JdW5zaWduZWQgbG9uZyByZWcsIGNjbXI7Ci0JczY0IHRlbXA7CisJdW5zaWduZWQgbG9uZyBjY21yOwogCXVuc2lnbmVkIGludCBwcmNzOwogCiAJY2NtciA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7CiAJcHJjcyA9IChjY21yICYgTVhDX0NDTV9DQ01SX1BSQ1NfTUFTSykgPj4gTVhDX0NDTV9DQ01SX1BSQ1NfT0ZGU0VUOwogCWlmIChwcmNzID09IDB4MSkKLQkJcmVmX2NsayA9IENLSUxfQ0xLX0ZSRVEgKiAxMDI0OworCQlyZXR1cm4gQ0tJTF9DTEtfRlJFUSAqIDEwMjQ7CiAJZWxzZQotCQlyZWZfY2xrID0gY2xrX2dldF9yYXRlKCZja2loX2Nsayk7Ci0KLQlpZiAoY2xrID09ICZtY3VfcGxsX2NsaykgewotCQlpZiAoKGNjbXIgJiBNWENfQ0NNX0NDTVJfTVBFKSA9PSAwKQotCQkJcmV0dXJuIHJlZl9jbGs7Ci0JCWlmICgoY2NtciAmIE1YQ19DQ01fQ0NNUl9NRFMpICE9IDApCi0JCQlyZXR1cm4gcmVmX2NsazsKLQkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9NUENUTCk7Ci0JfSBlbHNlIGlmIChjbGsgPT0gJnVzYl9wbGxfY2xrKQotCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1VQQ1RMKTsKLQllbHNlIGlmIChjbGsgPT0gJnNlcmlhbF9wbGxfY2xrKQotCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1NSUENUTCk7Ci0JZWxzZSB7Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwZGYgPSAocmVnICYgTVhDX0NDTV9QQ1RMX1BEX01BU0spID4+IE1YQ19DQ01fUENUTF9QRF9PRkZTRVQ7Ci0JbWZkID0gKHJlZyAmIE1YQ19DQ01fUENUTF9NRkRfTUFTSykgPj4gTVhDX0NDTV9QQ1RMX01GRF9PRkZTRVQ7Ci0JbWZpID0gKHJlZyAmIE1YQ19DQ01fUENUTF9NRklfTUFTSykgPj4gTVhDX0NDTV9QQ1RMX01GSV9PRkZTRVQ7Ci0JbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7Ci0JbWZuID0gbWZuX2FicyA9IHJlZyAmIE1YQ19DQ01fUENUTF9NRk5fTUFTSzsKLQotCWlmIChtZm4gPj0gMHgyMDApIHsKLQkJbWZuIHw9IDB4RkZGRkZFMDA7Ci0JCW1mbl9hYnMgPSAtbWZuOwotCX0KLQotCXJlZl9jbGsgKj0gMjsKLQlyZWZfY2xrIC89IHBkZiArIDE7Ci0KLQl0ZW1wID0gKHU2NCkgcmVmX2NsayAqIG1mbl9hYnM7Ci0JZG9fZGl2KHRlbXAsIG1mZCArIDEpOwotCWlmIChtZm4gPCAwKQotCQl0ZW1wID0gLXRlbXA7Ci0JdGVtcCA9IChyZWZfY2xrICogbWZpKSArIHRlbXA7Ci0KLQlyZXR1cm4gdGVtcDsKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspOwogfQogCi1zdGF0aWMgaW50IF9jbGtfdXNiX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdXNiX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1VQQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlcmlhbF9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9TUlBDVEwpOworCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKHJlZywgcGxsX3JlZl9nZXRfcmF0ZSgpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByZWcsIGNjbXI7CisKKwljY21yID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKKworCWlmICghKGNjbXIgJiBNWENfQ0NNX0NDTVJfTVBFKSB8fCAoY2NtciAmIE1YQ19DQ01fQ0NNUl9NRFMpKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZja2loX2Nsayk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX01QQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKQEAgLTIyMiw3ICsxNjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfY2xrX3VzYl9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCB1c2JfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKQEAgLTIzMSw3ICsxNzEsNyBAQAogCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NNUik7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19zZXJpYWxfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IHNlcmlhbF9wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCkBAIC0yNDUsNyArMTg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19zZXJpYWxfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgc2VyaWFsX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCkBAIC0yNTgsNyArMTk4LDcgQEAKICNkZWZpbmUgUERSMShtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIxKSAmIG1hc2spID4+IG9mZikKICNkZWZpbmUgUERSMihtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIyKSAmIG1hc2spID4+IG9mZikKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tY3VfbWFpbl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtY3VfbWFpbl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHBtY3IwID0gX19yYXdfcmVhZGwoTVhDX0NDTV9QTUNSMCk7CiAKQEAgLTI2OCw3ICsyMDgsNyBAQAogCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZtY3VfcGxsX2Nsayk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfaGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhaGJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X3BkZjsKIApAQCAtMjc3LDcgKzIxNyw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobWF4X3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2lwZ19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcGdfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgaXBnX3BkZjsKIApAQCAtMjg2LDcgKzIyNiw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoaXBnX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX25mY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZmNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKIApAQCAtMjk1LDcgKzIzNSw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobmZjX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2hzcF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoc3BfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgaHNwX3BkZjsKIApAQCAtMzA0LDcgKzI0NCw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoaHNwX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3VzYl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1c2JfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgdXNiX3BkZiwgdXNiX3ByZXBkZjsKIApAQCAtMzE1LDcgKzI1NSw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAodXNiX3ByZXBkZiArIDEpIC8gKHVzYl9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jc2lfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnLCBwcmUsIHBvc3Q7CiAKQEAgLTMyOSw3ICsyNjksNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHByZSAqIHBvc3QpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NzaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NpX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdTMyIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgZGl2ID0gcGFyZW50IC8gcmF0ZTsKQEAgLTM0Miw3ICsyODIsNyBAQAogCXJldHVybiBwYXJlbnQgLyAocHJlICogcG9zdCk7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19jc2lfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgaW50IGNzaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgcmVnLCBkaXYsIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIApAQCAtMzYzLDE2ICszMDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3Blcl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwZXJfcGRmOwotCi0JcGVyX3BkZiA9IFBEUjAoTVhDX0NDTV9QRFIwX1BFUl9QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjBfUEVSX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChwZXJfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfc3NpMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzc2kxX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHNzaTFfcGRmLCBzc2kxX3ByZXBkZjsKIApAQCAtMzgzLDcgKzMxNCw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoc3NpMV9wcmVwZGYgKyAxKSAvIChzc2kxX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NpMl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBzc2kyX3BkZiwgc3NpMl9wcmVwZGY7CiAKQEAgLTM5NCw3ICszMjUsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHNzaTJfcHJlcGRmICsgMSkgLyAoc3NpMl9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19maXJpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcmlfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmlyaV9wZGYsIGZpcmlfcHJlcGRmOwogCkBAIC00MDUsNyArMzM2LDcgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChmaXJpX3ByZXBkZiArIDEpIC8gKGZpcmlfcGRmICsgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfZmlyaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXUzMiBwcmUsIHBvc3Q7CiAJdTMyIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CkBAIC00MjAsNyArMzUxLDcgQEAKIAogfQogCi1zdGF0aWMgaW50IF9jbGtfZmlyaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyBpbnQgZmlyaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgcmVnLCBkaXYsIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIApAQCAtNDQxLDEyICszNzIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tYnhfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWJ4X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIDI7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfbXN0aWNrMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtc3RpY2sxX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG1zdGlfcGRmOwogCkBAIC00NTUsNyArMzg2LDcgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChtc3RpX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX21zdGljazJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbXN0aWNrMl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBtc3RpX3BkZjsKIApAQCAtNDcyLDY2MSArNDAzLDE4NSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKLQkubmFtZSA9ICJja2loIiwKIAkuZ2V0X3JhdGUgPSBjbGtfY2tpaF9nZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19ja2lsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gQ0tJTF9DTEtfRlJFUTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2tpbF9jbGsgPSB7Ci0JLm5hbWUgPSAiY2tpbCIsCi0JLmdldF9yYXRlID0gY2xrX2NraWxfZ2V0X3JhdGUsCi19OwotCiBzdGF0aWMgc3RydWN0IGNsayBtY3VfcGxsX2NsayA9IHsKLQkubmFtZSA9ICJtY3VfcGxsIiwKIAkucGFyZW50ID0gJmNraWhfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGxsX2dldF9yYXRlLAorCS5nZXRfcmF0ZSA9IG1jdV9wbGxfZ2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3VfbWFpbl9jbGsgPSB7Ci0JLm5hbWUgPSAibWN1X21haW5fY2xrIiwKIAkucGFyZW50ID0gJm1jdV9wbGxfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfbWN1X21haW5fZ2V0X3JhdGUsCisJLmdldF9yYXRlID0gbWN1X21haW5fZ2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZXJpYWxfcGxsX2NsayA9IHsKLQkubmFtZSA9ICJzZXJpYWxfcGxsIiwKIAkucGFyZW50ID0gJmNraWhfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGxsX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX3NlcmlhbF9wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19zZXJpYWxfcGxsX2Rpc2FibGUsCisJLmdldF9yYXRlID0gc2VyaWFsX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gc2VyaWFsX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBzZXJpYWxfcGxsX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfcGxsX2NsayA9IHsKLQkubmFtZSA9ICJ1c2JfcGxsIiwKIAkucGFyZW50ID0gJmNraWhfY2xrLAotCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGxsX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX3VzYl9wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa191c2JfcGxsX2Rpc2FibGUsCisJLmdldF9yYXRlID0gdXNiX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gdXNiX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSB1c2JfcGxsX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewotCS5uYW1lID0gImFoYl9jbGsiLAogCS5wYXJlbnQgPSAmbWN1X21haW5fY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfaGNsa19nZXRfcmF0ZSwKKwkuZ2V0X3JhdGUgPSBhaGJfZ2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfY2xrID0gewotCS5uYW1lID0gInBlcl9jbGsiLAotCS5wYXJlbnQgPSAmdXNiX3BsbF9jbGssCi0JLmdldF9yYXRlID0gX2Nsa19wZXJfZ2V0X3JhdGUsCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzLCBwKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5lbmFibGUJCT0gY2dyX2VuYWJsZSwJCVwKKwkJLmRpc2FibGUJPSBjZ3JfZGlzYWJsZSwJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJXAorCQkucGFyZW50CQk9IHAsCQkJXAorCX0KKworI2RlZmluZSBERUZJTkVfQ0xPQ0sxKG5hbWUsIGksIGVyLCBlcywgZ2V0c2V0cm91bmQsIHMsIHApCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCQlcCisJCS5pZAkJPSBpLAkJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCQlcCisJCS5nZXRfcmF0ZQk9IGdldHNldHJvdW5kIyNfZ2V0X3JhdGUsCVwKKwkJLnNldF9yYXRlCT0gZ2V0c2V0cm91bmQjI19zZXRfcmF0ZSwJXAorCQkucm91bmRfcmF0ZQk9IGdldHNldHJvdW5kIyNfcm91bmRfcmF0ZSwJXAorCQkuZW5hYmxlCQk9IGNncl9lbmFibGUsCQkJXAorCQkuZGlzYWJsZQk9IGNncl9kaXNhYmxlLAkJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQlcCisJfQorCitERUZJTkVfQ0xPQ0socGVyY2xrX2NsaywgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworREVGSU5FX0NMT0NLKHNkaGMxX2NsaywgICAwLCBNWENfQ0NNX0NHUjAsICAwLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMCwgIDIsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhncHRfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAgNCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGVwaXQxX2NsaywgICAwLCBNWENfQ0NNX0NHUjAsICA2LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soZXBpdDJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMCwgIDgsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhpaW1fY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAxMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGF0YV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjAsIDEyLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RtYV9jbGsxLCAgIDAsIE1YQ19DQ01fQ0dSMCwgMTQsIE5VTEwsICZzZG1hX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAgMiwgTVhDX0NDTV9DR1IwLCAxNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHJuZ19jbGssICAgICAwLCBNWENfQ0NNX0NHUjAsIDE4LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMCwgMjAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAgMSwgTVhDX0NDTV9DR1IwLCAyMiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHNzaTFfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjAsIDI0LCBzc2kxX2dldF9yYXRlLCBOVUxMLCAmc2VyaWFsX3BsbF9jbGspOworREVGSU5FX0NMT0NLKGkyYzFfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjAsIDI2LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMl9jbGssICAgIDEsIE1YQ19DQ01fQ0dSMCwgMjgsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhpMmMzX2NsaywgICAgMiwgTVhDX0NDTV9DR1IwLCAzMCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworCitERUZJTkVfQ0xPQ0sobXBlZzRfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMSwgIDAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2sxX2NsaywgMCwgTVhDX0NDTV9DR1IxLCAgMiwgbXN0aWNrMV9nZXRfcmF0ZSwgTlVMTCwgJnVzYl9wbGxfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2syX2NsaywgMSwgTVhDX0NDTV9DR1IxLCAgNCwgbXN0aWNrMl9nZXRfcmF0ZSwgTlVMTCwgJnVzYl9wbGxfY2xrKTsKK0RFRklORV9DTE9DSzEoY3NpX2NsaywgICAgMCwgTVhDX0NDTV9DR1IxLCAgNiwgY3NpLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRjX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgIDgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgMCwgTVhDX0NDTV9DR1IxLCAxMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDEyLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazIsICAgIDAsIE1YQ19DQ01fQ0dSMSwgMTgsIHVzYl9nZXRfcmF0ZSwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGtwcF9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaXB1X2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgMjIsIGhzcF9nZXRfcmF0ZSwgTlVMTCwgJm1jdV9tYWluX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgIDIsIE1YQ19DQ01fQ0dSMSwgMjQsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGssICAgMywgTVhDX0NDTV9DR1IxLCAyNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICA0LCBNWENfQ0NNX0NHUjEsIDI4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMSwgMzAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKKworREVGSU5FX0NMT0NLKHNzaTJfY2xrLCAgICAxLCBNWENfQ0NNX0NHUjIsICAwLCBzc2kyX2dldF9yYXRlLCBOVUxMLCAmc2VyaWFsX3BsbF9jbGspOworREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgICAwLCBNWENfQ0NNX0NHUjIsICAyLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMiwgIDQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhtYnhfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IyLCAgNiwgbWJ4X2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZW1pX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMiwgIDgsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGljX2NsaywgICAgMCwgTVhDX0NDTV9DR1IyLCAxMCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLMShmaXJpX2NsaywgICAwLCBNWENfQ0NNX0NHUjIsIDEyLCBmaXJpLCBOVUxMLCAmdXNiX3BsbF9jbGspOworCitERUZJTkVfQ0xPQ0soc2RtYV9jbGsyLCAgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1c2JfY2xrMSwgICAgMCwgTlVMTCwgICAgICAgICAgMCwgdXNiX2dldF9yYXRlLCBOVUxMLCAmdXNiX3BsbF9jbGspOworREVGSU5FX0NMT0NLKG5mY19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBuZmNfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGlwZ19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBpcGdfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKKworI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAorCXsgXAorCQkuZGV2X2lkID0gZCwgXAorCQkuY29uX2lkID0gbiwgXAorCQkuY2xrID0gJmMsIFwKKwl9LAorCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaSIsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkiLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpIiwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ3ZG9nIiwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlwdS1jb3JlIiwgTlVMTCwgaXB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14M19zZGNfZmIiLCBOVUxMLCBpcHVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCisJX1JFR0lTVEVSX0NMT0NLKCJteDMtY2FtZXJhLjAiLCAiY3NpIiwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyYzNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3cxLjAiLCBOVUxMLCBvd2lyZV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjEiLCBOVUxMLCBzZGhjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaSIsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZmlyaSIsIGZpcmlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0aWMiLCBydGljX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJuZyIsIHJuZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZG1hX2FoYiIsIHNkbWFfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkbWFfaXBnIiwgc2RtYV9jbGsyKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2syX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXBlZzQiLCBtcGVnNF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYngiLCBtYnhfY2xrKQogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgcGVyY2xrX2NsayA9IHsKLQkubmFtZSA9ICJwZXJjbGtfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAiY3NwaV9jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJmlwZ19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfQ1NQSTFfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiY3NwaV9jbGsiLAotCSAuaWQgPSAxLAotCSAucGFyZW50ID0gJmlwZ19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfQ1NQSTJfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiY3NwaV9jbGsiLAotCSAuaWQgPSAyLAotCSAucGFyZW50ID0gJmlwZ19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfQ1NQSTNfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKLQkubmFtZSA9ICJpcGdfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmdldF9yYXRlID0gX2Nsa19pcGdfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbWlfY2xrID0gewotCS5uYW1lID0gImVtaV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMl9FTUlfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19lbWlfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9jbGsgPSB7Ci0JLm5hbWUgPSAiZ3B0X2NsayIsCi0JLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0dQVF9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwd21fY2xrID0gewotCS5uYW1lID0gInB3bV9jbGsiLAotCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9QV01fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZXBpdF9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gImVwaXRfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0VQSVQxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gImVwaXRfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0VQSVQyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG5mY19jbGsgPSB7Ci0JLm5hbWUgPSAibmZjX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfbmZjX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2NjX2NsayA9IHsKLQkubmFtZSA9ICJzY2NfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpcHVfY2xrID0gewotCS5uYW1lID0gImlwdV9jbGsiLAotCS5wYXJlbnQgPSAmbWN1X21haW5fY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfaHNwX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX0lQVV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBrcHBfY2xrID0gewotCS5uYW1lID0gImtwcF9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9LUFBfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2RvZ19jbGsgPSB7Ci0JLm5hbWUgPSAid2RvZ19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9XRE9HX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0gewotCS5uYW1lID0gInJ0Y19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9SVENfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAidXNiX2NsayIsCi0JIC5wYXJlbnQgPSAmdXNiX3BsbF9jbGssCi0JIC5nZXRfcmF0ZSA9IF9jbGtfdXNiX2dldF9yYXRlLH0sCi0JewotCSAubmFtZSA9ICJ1c2JfYWhiX2NsayIsCi0JIC5wYXJlbnQgPSAmYWhiX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9VU0JPVEdfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3NpX2NsayA9IHsKLQkubmFtZSA9ICJjc2lfY2xrIiwKLQkucGFyZW50ID0gJnNlcmlhbF9wbGxfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfY3NpX2dldF9yYXRlLAotCS5yb3VuZF9yYXRlID0gX2Nsa19jc2lfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBfY2xrX2NzaV9zZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9DU0lfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1VBUlQxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1VBUlQyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMiwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX1VBUlQzX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gMywKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX1VBUlQ0X09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gInVhcnRfY2xrIiwKLQkgLmlkID0gNCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX1VBUlQ1X09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gImkyY19jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJnBlcmNsa19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfSTJDMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJpMmNfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0kyQzJfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiaTJjX2NsayIsCi0JIC5pZCA9IDIsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9JMkMzX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG93aXJlX2NsayA9IHsKLQkubmFtZSA9ICJvd2lyZV9jbGsiLAotCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX09XSVJFX09GRlNFVCwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAic2RoY19jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJnBlcmNsa19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU0RfTU1DMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJzZGhjX2NsayIsCi0JIC5pZCA9IDEsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9TRF9NTUMyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gInNzaV9jbGsiLAotCSAucGFyZW50ID0gJnNlcmlhbF9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX3NzaTFfZ2V0X3JhdGUsCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU1NJMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJzc2lfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZzZXJpYWxfcGxsX2NsaywKLQkgLmdldF9yYXRlID0gX2Nsa19zc2kyX2dldF9yYXRlLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX1NTSTJfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmlyaV9jbGsgPSB7Ci0JLm5hbWUgPSAiZmlyaV9jbGsiLAotCS5wYXJlbnQgPSAmdXNiX3BsbF9jbGssCi0JLnJvdW5kX3JhdGUgPSBfY2xrX2Zpcmlfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBfY2xrX2Zpcmlfc2V0X3JhdGUsCi0JLmdldF9yYXRlID0gX2Nsa19maXJpX2dldF9yYXRlLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0ZJUklfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRhX2NsayA9IHsKLQkubmFtZSA9ICJhdGFfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfQVRBX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1ieF9jbGsgPSB7Ci0JLm5hbWUgPSAibWJ4X2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0dBQ0NfT0ZGU0VULAotCS5nZXRfcmF0ZSA9IF9jbGtfbWJ4X2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdnB1X2NsayA9IHsKLQkubmFtZSA9ICJ2cHVfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfR0FDQ19PRkZTRVQsCi0JLmdldF9yYXRlID0gX2Nsa19tYnhfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBydGljX2NsayA9IHsKLQkubmFtZSA9ICJydGljX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX1JUSUNfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcm5nX2NsayA9IHsKLQkubmFtZSA9ICJybmdfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfUk5HX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJzZG1hX2FoYl9jbGsiLAotCSAucGFyZW50ID0gJmFoYl9jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU0RNQV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJzZG1hX2lwZ19jbGsiLAotCSAucGFyZW50ID0gJmlwZ19jbGssfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXBlZzRfY2xrID0gewotCS5uYW1lID0gIm1wZWc0X2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX0hBTlRST19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2bDJjY19jbGsgPSB7Ci0JLm5hbWUgPSAidmwyY2NfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfSEFOVFJPX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zdGlja19jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gIm1zdGlja19jbGsiLAotCSAuaWQgPSAwLAotCSAucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX21zdGljazFfZ2V0X3JhdGUsCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0sxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gIm1zdGlja19jbGsiLAotCSAuaWQgPSAxLAotCSAucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX21zdGljazJfZ2V0X3JhdGUsCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0syX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlpbV9jbGsgPSB7Ci0JLm5hbWUgPSAiaWltX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0lJTV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NrbzFfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgZGl2LCBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50IC8gcmF0ZTsKLQlpZiAocGFyZW50ICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlpZiAoZGl2ID4gOCkKLQkJZGl2ID0gMTY7Ci0JZWxzZSBpZiAoZGl2ID4gNCkKLQkJZGl2ID0gODsKLQllbHNlIGlmIChkaXYgPiAyKQotCQlkaXYgPSA0OwotCi0JcmV0dXJuIHBhcmVudCAvIGRpdjsKLX0KLQotc3RhdGljIGludCBfY2xrX2NrbzFfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHJlZywgZGl2LCBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50IC8gcmF0ZTsKLQotCWlmIChkaXYgPT0gMTYpCi0JCWRpdiA9IDQ7Ci0JZWxzZSBpZiAoZGl2ID09IDgpCi0JCWRpdiA9IDM7Ci0JZWxzZSBpZiAoZGl2ID09IDQpCi0JCWRpdiA9IDI7Ci0JZWxzZSBpZiAoZGl2ID09IDIpCi0JCWRpdiA9IDE7Ci0JZWxzZSBpZiAoZGl2ID09IDEpCi0JCWRpdiA9IDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ09TUikgJiB+TVhDX0NDTV9DT1NSX0NMS09VVERJVl9NQVNLOwotCXJlZyB8PSBkaXYgPDwgTVhDX0NDTV9DT1NSX0NMS09VVERJVl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DT1NSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2NrbzFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0KLQlkaXYgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NPU1IpICYgTVhDX0NDTV9DT1NSX0NMS09VVERJVl9NQVNLID4+Ci0JICAgIE1YQ19DQ01fQ09TUl9DTEtPVVRESVZfT0ZGU0VUOwotCi0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoMSA8PCBkaXYpOwotfQotCi1zdGF0aWMgaW50IF9jbGtfY2tvMV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoraW50IF9faW5pdCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKIAl1MzIgcmVnOworCWludCBpOwogCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DT1NSKSAmIH5NWENfQ0NNX0NPU1JfQ0xLT1NFTF9NQVNLOwotCi0JaWYgKHBhcmVudCA9PSAmbWN1X21haW5fY2xrKQotCQlyZWcgfD0gMCA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZpcGdfY2xrKQotCQlyZWcgfD0gMSA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZ1c2JfcGxsX2NsaykKLQkJcmVnIHw9IDIgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSBtY3VfbWFpbl9jbGsucGFyZW50KQotCQlyZWcgfD0gMyA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZhaGJfY2xrKQotCQlyZWcgfD0gNSA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZzZXJpYWxfcGxsX2NsaykKLQkJcmVnIHw9IDcgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2tpaF9jbGspCi0JCXJlZyB8PSA4IDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmVtaV9jbGspCi0JCXJlZyB8PSA5IDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmlwdV9jbGspCi0JCXJlZyB8PSAweEEgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmbmZjX2NsaykKLQkJcmVnIHw9IDB4QiA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZ1YXJ0X2Nsa1swXSkKLQkJcmVnIHw9IDB4QyA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ09TUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfY2xrX2NrbzFfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DT1NSKSB8IE1YQ19DQ01fQ09TUl9DTEtPRU47Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DT1NSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2NrbzFfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ09TUikgJiB+TVhDX0NDTV9DT1NSX0NMS09FTjsKLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NPU1IpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBja28xX2NsayA9IHsKLQkubmFtZSA9ICJja28xX2NsayIsCi0JLmdldF9yYXRlID0gX2Nsa19ja28xX2dldF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfY2tvMV9zZXRfcmF0ZSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfY2tvMV9yb3VuZF9yYXRlLAotCS5zZXRfcGFyZW50ID0gX2Nsa19ja28xX3NldF9wYXJlbnQsCi0JLmVuYWJsZSA9IF9jbGtfY2tvMV9lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2NrbzFfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfY2xrc1tdID0gewotCSZja2loX2NsaywKLQkmY2tpbF9jbGssCi0JJm1jdV9wbGxfY2xrLAotCSZ1c2JfcGxsX2NsaywKLQkmc2VyaWFsX3BsbF9jbGssCi0JJm1jdV9tYWluX2NsaywKLQkmYWhiX2NsaywKLQkmcGVyX2NsaywKLQkmcGVyY2xrX2NsaywKLQkmY2tvMV9jbGssCi0JJmVtaV9jbGssCi0JJmNzcGlfY2xrWzBdLAotCSZjc3BpX2Nsa1sxXSwKLQkmY3NwaV9jbGtbMl0sCi0JJmlwZ19jbGssCi0JJmdwdF9jbGssCi0JJnB3bV9jbGssCi0JJndkb2dfY2xrLAotCSZydGNfY2xrLAotCSZlcGl0X2Nsa1swXSwKLQkmZXBpdF9jbGtbMV0sCi0JJm5mY19jbGssCi0JJmlwdV9jbGssCi0JJmtwcF9jbGssCi0JJnVzYl9jbGtbMF0sCi0JJnVzYl9jbGtbMV0sCi0JJmNzaV9jbGssCi0JJnVhcnRfY2xrWzBdLAotCSZ1YXJ0X2Nsa1sxXSwKLQkmdWFydF9jbGtbMl0sCi0JJnVhcnRfY2xrWzNdLAotCSZ1YXJ0X2Nsa1s0XSwKLQkmaTJjX2Nsa1swXSwKLQkmaTJjX2Nsa1sxXSwKLQkmaTJjX2Nsa1syXSwKLQkmb3dpcmVfY2xrLAotCSZzZGhjX2Nsa1swXSwKLQkmc2RoY19jbGtbMV0sCi0JJnNzaV9jbGtbMF0sCi0JJnNzaV9jbGtbMV0sCi0JJmZpcmlfY2xrLAotCSZhdGFfY2xrLAotCSZydGljX2NsaywKLQkmcm5nX2NsaywKLQkmc2RtYV9jbGtbMF0sCi0JJnNkbWFfY2xrWzFdLAotCSZtc3RpY2tfY2xrWzBdLAotCSZtc3RpY2tfY2xrWzFdLAotCSZzY2NfY2xrLAotCSZpaW1fY2xrLAotfTsKLQotaW50IF9faW5pdCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQotewotCXUzMiByZWc7Ci0Jc3RydWN0IGNsayAqKmNsa3A7CisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzEpOwogCiAJY2tpaF9yYXRlID0gZnJlZjsKIAotCWZvciAoY2xrcCA9IG14Y19jbGtzOyBjbGtwIDwgbXhjX2Nsa3MgKyBBUlJBWV9TSVpFKG14Y19jbGtzKTsgY2xrcCsrKQotCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCi0JaWYgKGNwdV9pc19teDMxKCkpIHsKLQkJY2xrX3JlZ2lzdGVyKCZtcGVnNF9jbGspOwotCQljbGtfcmVnaXN0ZXIoJm1ieF9jbGspOwotCX0gZWxzZSB7Ci0JCWNsa19yZWdpc3RlcigmdnB1X2Nsayk7Ci0JCWNsa19yZWdpc3RlcigmdmwyY2NfY2xrKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgcG9zc2libGUgY2xvY2tzICovCi0JX19yYXdfd3JpdGVsKE1YQ19DQ01fQ0dSMF9HUFRfTUFTSywgTVhDX0NDTV9DR1IwKTsKKwlfX3Jhd193cml0ZWwoKDMgPDwgNCksIE1YQ19DQ01fQ0dSMCk7CiAJX19yYXdfd3JpdGVsKDAsIE1YQ19DQ01fQ0dSMSk7Ci0KLQlfX3Jhd193cml0ZWwoTVhDX0NDTV9DR1IyX0VNSV9NQVNLIHwKLQkJICAgICBNWENfQ0NNX0NHUjJfSVBNVVgxX01BU0sgfAotCQkgICAgIE1YQ19DQ01fQ0dSMl9JUE1VWDJfTUFTSyB8Ci0JCSAgICAgTVhDX0NDTV9DR1IyX01YQ0NMS0VOU0VMX01BU0sgfAkvKiBmb3IgTVgzMiAqLwotCQkgICAgIE1YQ19DQ01fQ0dSMl9DSElLQ0FNUEVOX01BU0sgfAkvKiBmb3IgTVgzMiAqLwotCQkgICAgIE1YQ19DQ01fQ0dSMl9PVlJWUFVCVVNZX01BU0sgfAkvKiBmb3IgTVgzMiAqLworCV9fcmF3X3dyaXRlbCgoMyA8PCA4KSB8ICgzIDw8IDE0KSB8ICgzIDw8IDE2KXwKIAkJICAgICAxIDw8IDI3IHwgMSA8PCAyOCwgLyogQml0IDI3IGFuZCAyOCBhcmUgbm90IGRlZmluZWQgZm9yCiAJCQkJCSAgIE1YMzIsIGJ1dCBzdGlsbCByZXF1aXJlZCB0byBiZSBzZXQgKi8KIAkJICAgICBNWENfQ0NNX0NHUjIpOwogCi0JY2xrX2Rpc2FibGUoJmNrbzFfY2xrKTsKLQljbGtfZGlzYWJsZSgmdXNiX3BsbF9jbGspOworCXVzYl9wbGxfZGlzYWJsZSgmdXNiX3BsbF9jbGspOwogCiAJcHJfaW5mbygiQ2xvY2sgaW5wdXQgc291cmNlIGlzICVsZFxuIiwgY2xrX2dldF9yYXRlKCZja2loX2NsaykpOwogCkBAIC0xMTQzLDYgKzU5OCw4IEBACiAJCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fUE1DUjEpOwogCX0KIAorCW14Y190aW1lcl9pbml0KCZpcGdfY2xrKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvY3JtX3JlZ3MuaAppbmRleCA0YTBlMGVkLi5hZGZhMzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2NybV9yZWdzLmgKQEAgLTkxLDQ3ICs5MSw2IEBACiAjZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfUE9ERl9PRkZTRVQgICAgICAgICAgICAwCiAjZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfUE9ERl9NQVNLICAgICAgICAgICAgICAweDcKIAotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl8xICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfMiAgICAgICAgICAgICAgICAgICgweDEgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzMgICAgICAgICAgICAgICAgICAoMHgyIDw8IDExKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl80ICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfNSAgICAgICAgICAgICAgICAgICgweDQgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzYgICAgICAgICAgICAgICAgICAoMHg1IDw8IDExKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl83ICAgICAgICAgICAgICAgICAgKDB4NiA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfOCAgICAgICAgICAgICAgICAgICgweDcgPDwgMTEpCi0KLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfMSAgICAgICAgICAgICAgICAgICgweDAgPDwgNikKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfMiAgICAgICAgICAgICAgICAgICgweDEgPDwgNikKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfMyAgICAgICAgICAgICAgICAgICgweDIgPDwgNikKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0lQR19ESVZfNCAgICAgICAgICAgICAgICAgICgweDMgPDwgNikKLQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl8xICAgICAgICAgICAgICAgICAgKDB4MCA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl8yICAgICAgICAgICAgICAgICAgKDB4MSA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl8zICAgICAgICAgICAgICAgICAgKDB4MiA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl80ICAgICAgICAgICAgICAgICAgKDB4MyA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl81ICAgICAgICAgICAgICAgICAgKDB4NCA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl82ICAgICAgICAgICAgICAgICAgKDB4NSA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl83ICAgICAgICAgICAgICAgICAgKDB4NiA8PCAzKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUFYX0RJVl84ICAgICAgICAgICAgICAgICAgKDB4NyA8PCAzKQotCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzEgICAgICAgICAgICAgICAgICAoMHgwIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzIgICAgICAgICAgICAgICAgICAoMHgxIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzMgICAgICAgICAgICAgICAgICAoMHgyIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzQgICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzUgICAgICAgICAgICAgICAgICAoMHg0IDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzYgICAgICAgICAgICAgICAgICAoMHg1IDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzcgICAgICAgICAgICAgICAgICAoMHg2IDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9ORkNfRElWXzggICAgICAgICAgICAgICAgICAoMHg3IDw8IDgpCi0KLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfMSAgICAgICAgICAgICAgICAgIDB4MAotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl8yICAgICAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzMgICAgICAgICAgICAgICAgICAweDIKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfNCAgICAgICAgICAgICAgICAgIDB4MwotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl81ICAgICAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzYgICAgICAgICAgICAgICAgICAweDUKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfNyAgICAgICAgICAgICAgICAgIDB4NgotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl84ICAgICAgICAgICAgICAgICAgMHg3Ci0KICNkZWZpbmUgTVhDX0NDTV9QRFIxX1VTQl9QUkRGX09GRlNFVCAgICAgICAgICAgIDMwCiAjZGVmaW5lIE1YQ19DQ01fUERSMV9VU0JfUFJERl9NQVNLICAgICAgICAgICAgICAoMHgzIDw8IDMwKQogI2RlZmluZSBNWENfQ0NNX1BEUjFfVVNCX1BPREZfT0ZGU0VUICAgICAgICAgICAgMjcKQEAgLTE1MiwxMTggKzExMSw2IEBACiAvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFJDU1IgKi8KICNkZWZpbmUgTVhDX0NDTV9SQ1NSX05GMTZCCQkJMHg4MDAwMDAwMAogCi0vKiBCaXQgZGVmaW5pdGlvbnMgZm9yIGJvdGggTUNVLCBVU0IgYW5kIFNSIFBMTCBjb250cm9sIHJlZ2lzdGVycyAqLwotI2RlZmluZSBNWENfQ0NNX1BDVExfQlJNICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBNWENfQ0NNX1BDVExfUERfT0ZGU0VUICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICgweEYgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRkRfT0ZGU0VUICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M0ZGIDw8IDE2KQotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZJX09GRlNFVCAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX01GSV9NQVNLICAgICAgICAgICAgICAgICAgICgweEYgPDwgMTApCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRk5fT0ZGU0VUICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRk5fTUFTSyAgICAgICAgICAgICAgICAgICAweDNGRgotCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMxX09GRlNFVCAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMxX01BU0sgICAgICAgICAgICAgICAoMHgzIDw8IDApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMyX09GRlNFVCAgICAgICAgICAgICAyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRF9NTUMyX01BU0sgICAgICAgICAgICAgICAoMHgzIDw8IDIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9HUFRfT0ZGU0VUICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9HUFRfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMV9PRkZTRVQgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMl9PRkZTRVQgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9FUElUMl9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JSU1fT0ZGU0VUICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBNWENfQ0NNX0NHUjBfSUlNX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0FUQV9PRkZTRVQgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9BVEFfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKQotI2RlZmluZSBNWENfQ0NNX0NHUjBfU0RNQV9PRkZTRVQgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1NETUFfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9DU1BJM19PRkZTRVQgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX0NHUjBfQ1NQSTNfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1JOR19PRkZTRVQgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9STkdfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDE4KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfVUFSVDFfT0ZGU0VUICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1VBUlQxX01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMjApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9VQVJUMl9PRkZTRVQgICAgICAgICAgICAgICAyMgotI2RlZmluZSBNWENfQ0NNX0NHUjBfVUFSVDJfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1NTSTFfT0ZGU0VUICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TU0kxX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfSTJDMV9PRkZTRVQgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0kyQzFfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JMkMyX09GRlNFVCAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBNWENfQ0NNX0NHUjBfSTJDMl9NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyOCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0kyQzNfT0ZGU0VUICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JMkMzX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDMwKQotCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9IQU5UUk9fT0ZGU0VUICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9IQU5UUk9fTUFTSyAgICAgICAgICAgICAgICAoMHgzIDw8IDApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzFfT0ZGU0VUICAgICAgICAgICAyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzFfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzJfT0ZGU0VUICAgICAgICAgICA0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9NRU1TVElDSzJfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9DU0lfT0ZGU0VUICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9DU0lfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9SVENfT0ZGU0VUICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9SVENfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9XRE9HX09GRlNFVCAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBNWENfQ0NNX0NHUjFfV0RPR19NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1BXTV9PRkZTRVQgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9QV01fTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKQotI2RlZmluZSBNWENfQ0NNX0NHUjFfU0lNX09GRlNFVCAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1NJTV9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9FQ1RfT0ZGU0VUICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX0NHUjFfRUNUX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VTQk9UR19PRkZTRVQgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VU0JPVEdfTUFTSyAgICAgICAgICAgICAgICAoMHgzIDw8IDE4KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfS1BQX09GRlNFVCAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX0tQUF9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMjApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9JUFVfT0ZGU0VUICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBNWENfQ0NNX0NHUjFfSVBVX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VBUlQzX09GRlNFVCAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VQVJUM19NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfVUFSVDRfT0ZGU0VUICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VBUlQ0X01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VQVJUNV9PRkZTRVQgICAgICAgICAgICAgICAyOAotI2RlZmluZSBNWENfQ0NNX0NHUjFfVUFSVDVfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAyOCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX09XSVJFX09GRlNFVCAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9PV0lSRV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDMwKQotCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9TU0kyX09GRlNFVCAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9TU0kyX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMV9PRkZTRVQgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMl9PRkZTRVQgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DU1BJMl9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9HQUNDX09GRlNFVCAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9HQUNDX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9FTUlfT0ZGU0VUICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9FTUlfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9SVElDX09GRlNFVCAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBNWENfQ0NNX0NHUjJfUlRJQ19NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0ZJUklfT0ZGU0VUICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9GSVJJX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKQotI2RlZmluZSBNWENfQ0NNX0NHUjJfSVBNVVgxX09GRlNFVCAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0lQTVVYMV9NQVNLICAgICAgICAgICAgICAgICgweDMgPDwgMTQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9JUE1VWDJfT0ZGU0VUICAgICAgICAgICAgICAxNgotI2RlZmluZSBNWENfQ0NNX0NHUjJfSVBNVVgyX01BU0sgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikKLQotLyogVGhlc2UgbmV3IENHUjIgYml0cyBhcmUgYWRkZWQgaW4gTVgzMiAqLwotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNU1lTQ0xLU0VMX09GRlNFVAkxOAotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNU1lTQ0xLU0VMX01BU0sJCSgweDMgPDwgMTgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1TU0lDTEtTRUxfT0ZGU0VUCTIwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1TU0lDTEtTRUxfTUFTSwkJKDB4MyA8PCAyMCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FQTVBFUkNMS1NFTF9PRkZTRVQJMjIKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FQTVBFUkNMS1NFTF9NQVNLCQkoMHgzIDw8IDIyKQotI2RlZmluZSBNWENfQ0NNX0NHUjJfTVhDQ0xLRU5TRUxfT0ZGU0VUCQkyNAotI2RlZmluZSBNWENfQ0NNX0NHUjJfTVhDQ0xLRU5TRUxfTUFTSwkJKDB4MSA8PCAyNCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0NISUtDQU1QRU5fT0ZGU0VUCQkyNQotI2RlZmluZSBNWENfQ0NNX0NHUjJfQ0hJS0NBTVBFTl9NQVNLCQkoMHgxIDw8IDI1KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfT1ZSVlBVQlVTWV9PRkZTRVQJCTI2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9PVlJWUFVCVVNZX01BU0sJCSgweDEgPDwgMjYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1FTkFfT0ZGU0VUCQkzMAotI2RlZmluZSBNWENfQ0NNX0NHUjJfQU9NRU5BX01BU0sJCSgweDEgPDwgMzApCi0KIC8qCiAgKiBMVFIwIHJlZ2lzdGVyIG9mZnNldHMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IGY4NDI4ODAuLjM4MGJlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBbXSA9IHsKIAl7CiAJCS5zdGFydCA9IFVBUlQxX0JBU0VfQUREUiwKQEAgLTgyLDYgKzg0LDcgQEAKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDIpLAogfTsKIAorI2lmZGVmIENPTkZJR19BUkNIX01YMzEKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IFVBUlQ0X0JBU0VfQUREUiwKQEAgLTExOSw2ICsxMjIsNyBAQAogCS5yZXNvdXJjZSA9IHVhcnQ0LAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0NCksCiB9OworI2VuZGlmIC8qIENPTkZJR19BUkNIX01YMzEgKi8KIAogLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKQEAgLTE2NCw4ICsxNjgsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19uYW5kX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CT0gTkZDX0JBU0VfQUREUiwKLQkJLmVuZAk9IE5GQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLnN0YXJ0CT0gMCwgLyogcnVudGltZSBkZXBlbmRlbnQgKi8KKwkJLmVuZAk9IDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiAJfSwgewogCQkuc3RhcnQJPSBNWENfSU5UX05BTkRGQywKQEAgLTE4MCwzICsxODQsMTg4IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19uYW5kX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gbXhjX25hbmRfcmVzb3VyY2VzLAogfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IEkyQ19CQVNFX0FERFIsCisJCS5lbmQgPSBJMkNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMsCisJCS5lbmQgPSBNWENfSU5UX0kyQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmMwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyYzBfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IEkyQzJfQkFTRV9BRERSLAorCQkuZW5kID0gSTJDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBNWENfSU5UX0kyQzIsCisJCS5lbmQgPSBNWENfSU5UX0kyQzIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19pMmMxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyYzJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBJMkMzX0JBU0VfQUREUiwKKwkJLmVuZCA9IEkyQzNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMzLAorCQkuZW5kID0gTVhDX0lOVF9JMkMzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTIgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyYzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjMl9yZXNvdXJjZXMsCit9OworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNzZGhjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1NQ19TREhDMV9CQVNFX0FERFIsCisJCS5lbmQgPSBNTUNfU0RIQzFfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX01NQ19TREhDMSwKKwkJLmVuZCA9IE1YQ19JTlRfTU1DX1NESEMxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNzZGhjMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1NQ19TREhDMl9CQVNFX0FERFIsCisJCS5lbmQgPSBNTUNfU0RIQzJfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX01NQ19TREhDMiwKKwkJLmVuZCA9IE1YQ19JTlRfTU1DX1NESEMyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTAgPSB7CisJLm5hbWUgPSAibXhjLW1tYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjc2RoYzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNzZGhjMF9yZXNvdXJjZXMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJteGMtbW1jIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNzZGhjMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y3NkaGMxX3Jlc291cmNlcywKK307CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfTVgzMSAqLworCisvKiBpLk1YMzEgSW1hZ2UgUHJvY2Vzc2luZyBVbml0ICovCisKKy8qIFRoZSByZXNvdXJjZSBvcmRlciBpcyBpbXBvcnRhbnQhICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14M19pcHVfcnNyY1tdID0geworCXsKKwkJLnN0YXJ0ID0gSVBVX0NUUkxfQkFTRV9BRERSLAorCQkuZW5kID0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHg1RiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBJUFVfQ1RSTF9CQVNFX0FERFIgKyAweDg4LAorCQkuZW5kID0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHhCMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX0lQVV9TWU4sCisJCS5lbmQgPSBNWENfSU5UX0lQVV9TWU4sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JUFVfRVJSLAorCQkuZW5kID0gTVhDX0lOVF9JUFVfRVJSLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfaXB1ID0geworCS5uYW1lID0gImlwdS1jb3JlIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXgzX2lwdV9yc3JjKSwKKwkucmVzb3VyY2UgPSBteDNfaXB1X3JzcmMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZiX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHhCNCwKKwkJLmVuZAk9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4MUJGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfZmIgPSB7CisJLm5hbWUJCT0gIm14M19zZGNfZmIiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZmJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBmYl9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisgICAgICAgfSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWENfRkVDX0JBU0VfQUREUiwKKwkJLmVuZAk9IE1YQ19GRUNfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSBNWENfSU5UX0ZFQywKKwkJLmVuZAk9IE1YQ19JTlRfRkVDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlID0geworCS5uYW1lID0gImZlYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19mZWNfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IG14M19kZXZpY2VzX2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2lzX214MzEoKSkgeworCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBNWDMxX05GQ19CQVNFX0FERFI7CisJCW14Y19uYW5kX3Jlc291cmNlc1swXS5lbmQgPSBNWDMxX05GQ19CQVNFX0FERFIgKyAweGZmZjsKKwl9CisJaWYgKGNwdV9pc19teDM1KCkpIHsKKwkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gTVgzNV9ORkNfQkFTRV9BRERSOworCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9ORkNfQkFTRV9BRERSICsgMHhmZmY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChteDNfZGV2aWNlc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA5OTQ5ZWY0Li44OGMwNGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC02LDMgKzYsMTEgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdzFfbWFzdGVyX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14M19pcHU7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfZmI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW14My9pb211eC5jCmluZGV4IDdhNTA4OGIuLjQwZmZjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvaW9tdXguYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgVmFsZW50aW4gTG9uZ2NoYW1wIDx2YWxlbnRpbi5sb25nY2hhbXBAZXBmbC5jaD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjEsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CkBAIC0zOCw2ICs0MCw4IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbXV4X2xvY2spOwogCiAjZGVmaW5lIElPTVVYX1JFR19NQVNLIChJT01VWF9QQUROVU1fTUFTSyAmIH4weDMpCisKK3Vuc2lnbmVkIGxvbmcgbXhjX3Bpbl9hbGxvY19tYXBbTkJfUE9SVFMgKiAzMiAvIEJJVFNfUEVSX0xPTkddOwogLyoKICAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCiAgKi8KQEAgLTUwLDkgKzU0LDYgQEAKIAlmaWVsZCA9IHBpbl9tb2RlICYgMHgzOwogCW1vZGUgPSAocGluX21vZGUgJiBJT01VWF9NT0RFX01BU0spID4+IElPTVVYX01PREVfU0hJRlQ7CiAKLQlwcl9kZWJ1ZygiJXM6IHJlZyBvZmZzZXQgPSAweCV4IGZpZWxkID0gJWQgbW9kZSA9IDB4JTAyeFxuIiwKLQkJCV9fZnVuY19fLCAocGluX21vZGUgJiBJT01VWF9SRUdfTUFTSyksIGZpZWxkLCBtb2RlKTsKLQogCXNwaW5fbG9jaygmZ3Bpb19tdXhfbG9jayk7CiAKIAlsID0gX19yYXdfcmVhZGwocmVnKTsKQEAgLTkzLDYgKzk0LDg2IEBACiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXRfcGFkKTsKIAogLyoKKyAqIHNldHVwcyBhIHNpbmdsZSBwaW46CisgKiAJLSByZXNlcnZlcyB0aGUgcGluIHNvIHRoYXQgaXQgaXMgbm90IGNsYWltZWQgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIHNldHVwcyB0aGUgaW9tdXggYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uCisgKiAJLSBpZiB0aGUgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYSBHUElPLCB3ZSBjbGFpbSBpdCB0aHJvdWdoIGtlcm5lbCBncGlvbGliCisgKi8KK2ludCBteGNfaW9tdXhfc2V0dXBfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIHBhZCA9IHBpbiAmIElPTVVYX1BBRE5VTV9NQVNLOworCXVuc2lnbmVkIGdwaW87CisKKwlpZiAocGFkID49IChQSU5fTUFYICsgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteGNfaW9tdXg6IEF0dGVtcHQgdG8gcmVxdWVzdCBub25leGlzdGFudCBwaW4gJXUgZm9yIFwiJXNcIlxuIiwKKwkJCXBhZCwgbGFiZWwgPyBsYWJlbCA6ICI/Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXhjX2lvbXV4OiBwaW4gJXUgYWxyZWFkeSB1c2VkLiBBbGxvY2F0aW9uIGZvciBcIiVzXCIgZmFpbGVkXG4iLAorCQkJcGFkLCBsYWJlbCA/IGxhYmVsIDogIj8iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW14Y19pb211eF9tb2RlKHBpbik7CisKKwkvKiBpZiB3ZSBoYXZlIGEgZ3Bpbywgd2UgY2FuIGFsbG9jYXRlIGl0ICovCisJZ3BpbyA9IChwaW4gJiBJT01VWF9HUElPTlVNX01BU0spID4+IElPTVVYX0dQSU9OVU1fU0hJRlQ7CisJaWYgKGdwaW8gPCAoR1BJT19QT1JUX01BWCArIDEpICogMzIpCisJCWlmIChncGlvX3JlcXVlc3QoZ3BpbywgbGFiZWwpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldHVwX3Bpbik7CisKK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwkJY29uc3QgY2hhciAqbGFiZWwpCit7CisJdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CisJaW50IGk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAobXhjX2lvbXV4X3NldHVwX3BpbigqcCwgbGFiZWwpKQorCQkJZ290byBzZXR1cF9lcnJvcjsKKwkJcCsrOworCX0KKwlyZXR1cm4gMDsKKworc2V0dXBfZXJyb3I6CisJbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwaW5fbGlzdCwgaSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMpOworCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluKQoreworCXVuc2lnbmVkIHBhZCA9IHBpbiAmIElPTVVYX1BBRE5VTV9NQVNLOworCXVuc2lnbmVkIGdwaW87CisKKwlpZiAocGFkIDwgKFBJTl9NQVggKyAxKSkKKwkJY2xlYXJfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApOworCisJZ3BpbyA9IChwaW4gJiBJT01VWF9HUElPTlVNX01BU0spID4+IElPTVVYX0dQSU9OVU1fU0hJRlQ7CisJaWYgKGdwaW8gPCAoR1BJT19QT1JUX01BWCArIDEpICogMzIpCisJCWdwaW9fZnJlZShncGlvKTsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3JlbGVhc2VfcGluKTsKKwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW14Y19pb211eF9yZWxlYXNlX3BpbigqcCk7CisJCXArKzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMpOworCisvKgogICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhcgogICogc2lnbmFsLgogICovCkBAIC0xMTEsNCArMTkyLDMgQEAKIAlzcGluX3VubG9jaygmZ3Bpb19tdXhfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXRfZ3ByKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggMDU4OWI1Yy4uOWUxNDU5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC0yMiwxMCArMjIsMTQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKwogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiEKICAqIEBmaWxlIG1tLmMKQEAgLTUwLDYgKzU0LDE2IEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVklDX0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gQVZJQ19TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKIH07CiAKQEAgLTYyLDMgKzc2LDI0IEBACiB7CiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorc3RhdGljIGludCBteGNfaW5pdF9sMngwKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpsMngwX2Jhc2U7CisKKwlsMngwX2Jhc2UgPSBpb3JlbWFwKEwyQ0NfQkFTRV9BRERSLCA0MDk2KTsKKwlpZiAoSVNfRVJSKGwyeDBfYmFzZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyZW1hcHBpbmcgTDIgY2FjaGUgYXJlYSBmYWlsZWQgd2l0aCAlbGRcbiIsCisJCQkJUFRSX0VSUihsMngwX2Jhc2UpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbDJ4MF9pbml0KGwyeDBfYmFzZSwgMHgwMDAzMDAyNCwgMHgwMDAwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChteGNfaW5pdF9sMngwKTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKaW5kZXggZjkwMmE3Yy4uODNlNWU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM1LDYgKzM3LDEyIEBACiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2F1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImRldmljZXMuaCIKIAogLyohCkBAIC05NCwxMyArMTAyLDE2IEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKK3N0YXRpYyBpbnQgdWFydF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMQorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCiB7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1RTMV9fQ1RTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlRTMV9fUlRTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fVFhEMV9fVFhEMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlhEMV9fUlhEMSk7Ci0KKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0X3BpbnMsIEFSUkFZX1NJWkUodWFydF9waW5zKSwgInVhcnQtMCIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIH0KICNlbHNlIC8qICFTRVJJQUxfSU1YICovCkBAIC0xNzYsNyArMTg3LDcgQEAKIAkvKgogCSAqIENvbmZpZ3VyZSBJTlQgbGluZSBhcyBHUElPIGlucHV0CiAJICovCi0JbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPMV80LCBJT01VWF9DT05GSUdfR1BJTykpOworCW14Y19pb211eF9zZXR1cF9waW4oSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPMV80LCBJT01VWF9DT05GSUdfR1BJTyksICJleHBpbyIpOwogCiAJLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0IGFuZCBjbGVhciB0aGUgc3RhdHVzICovCiAJX19yYXdfd3JpdGV3KDB4RkZGRiwgUEJDX0lOVE1BU0tfQ0xFQVJfUkVHKTsKQEAgLTE5MSwyNiArMjAyLDMwMSBAQAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKEVYUElPX1BBUkVOVF9JTlQsIG14MzFhZHNfZXhwaW9faXJxX2hhbmRsZXIpOwogfQogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCisvKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBzZXR1cCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcworICogMTEzMy1FVjEgUE1VL2F1ZGlvIGJvYXJkLiAgV2hlbiBvdGhlciBQTVUgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgdGhlCisgKiByZWd1bGF0b3IgZGVmaW5pdGlvbnMgbWF5IGJlIHNoYXJlZCB3aXRoIHRoZW0sIGJ1dCBmb3Igbm93IHRoZXkgY2FuCisgKiBvbmx5IGJlIHVzZWQgd2l0aCB0aGlzIGJvYXJkIHNvIHdvdWxkIGdlbmVyYXRlIHdhcm5pbmdzIGFib3V0CisgKiB1bnVzZWQgc3RhdGljcyBhbmQgc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpYyB0byB0aGlzCisgKiBtb2R1bGUuCisgKi8KKworLyogQ1BVICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc3cxYV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAiY3B1X3ZjYyIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MWFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMUEiLAorCQkubWluX3VWID0gMTI3NTAwMCwKKwkJLm1heF91ViA9IDE2MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX01PREUsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCQkgICAgUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAxNDAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJIH0sCisJCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzdzFhX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc3cxYV9jb25zdW1lcnMsCit9OworCisvKiBTeXN0ZW0gSU8gLSBIaWdoICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmlvaGlfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZJT0hPIiwKKwkJLm1pbl91ViA9IDI4MDAwMDAsCisJCS5tYXhfdVYgPSAyODAwMDAwLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDI4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogU3lzdGVtIElPIC0gTG93ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmlvbG9fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZJT0xPIiwKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAxODAwMDAwLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDE4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogRERSIFJBTSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MmFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMkEiLAorCQkubWluX3VWID0gMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDE4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLnN0YXRlX2Rpc2sgPSB7CisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAwLAorCQkgfSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxkbzFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZDQU0vVk1NQzEvVk1NQzIiLAorCQkubWluX3VWID0gMjgwMDAwMCwKKwkJLm1heF91ViA9IDI4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuYXBwbHlfdVYgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgbGRvMl9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAiQVZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiSFBWREQiLAorCX0sCit9OworCisvKiBDT0RFQyBhbmQgU0lNICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbGRvMl9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkVTSU0vVlNJTS9BVkREIiwKKwkJLm1pbl91ViA9IDMzMDAwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGxkbzJfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBsZG8yX2NvbnN1bWVycywKK307CisKKy8qIEdlbmVyYWwgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2ZGlnX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWRElHIiwKKwkJLm1pbl91ViA9IDE1MDAwMDAsCisJCS5tYXhfdVYgPSAxNTAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogVHJhbmNlaXZlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG80X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWUkYxL0NWRERfMi43NzUiLAorCQkubWluX3VWID0gMjUwMDAwMCwKKwkJLm1heF91ViA9IDI1MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuYXBwbHlfdVYgPSAxLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLmJvb3Rfb24gPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHdtODM1MF9sZWRfcGxhdGZvcm1fZGF0YSB3bTgzNTBfbGVkX2RhdGEgPSB7CisJLm5hbWUgICAgICAgICAgICA9ICJ3bTgzNTA6d2hpdGUiLAorCS5kZWZhdWx0X3RyaWdnZXIgPSAiaGVhcnRiZWF0IiwKKwkubWF4X3VBICAgICAgICAgID0gMjc4OTksCit9OworCitzdGF0aWMgc3RydWN0IHdtODM1MF9hdWRpb19wbGF0Zm9ybV9kYXRhIGlteDMyYWRzX3dtODM1MF9zZXR1cCA9IHsKKwkudm1pZF9kaXNjaGFyZ2VfbXNlY3MgPSAxMDAwLAorCS5kcmFpbl9tc2VjcyA9IDMwLAorCS5jYXBfZGlzY2hhcmdlX21zZWNzID0gNzAwLAorCS52bWlkX2NoYXJnZV9tc2VjcyA9IDcwMCwKKwkudm1pZF9zX2N1cnZlID0gV004MzUwX1NfQ1VSVkVfU0xPVywKKwkuZGlzX291dDQgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCisJLmRpc19vdXQzID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAorCS5kaXNfb3V0MiA9IFdNODM1MF9ESVNDSEFSR0VfU0xPVywKKwkuZGlzX291dDEgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCisJLnZyb2lfb3V0NCA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfb3V0MyA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfb3V0MiA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfb3V0MSA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCisJLnZyb2lfZW5hYmxlID0gMCwKKwkuY29kZWNfY3VycmVudF9vbiA9IFdNODM1MF9DT0RFQ19JU0VMXzFfMCwKKwkuY29kZWNfY3VycmVudF9zdGFuZGJ5ID0gV004MzUwX0NPREVDX0lTRUxfMF81LAorCS5jb2RlY19jdXJyZW50X2NoYXJnZSA9IFdNODM1MF9DT0RFQ19JU0VMXzFfNSwKK307CisKK3N0YXRpYyBpbnQgbXgzMV93bTgzNTBfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJaW50IGk7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCAwLCBXTTgzNTBfR1BJT19ESVJfSU4sCisJCQkgICBXTTgzNTBfR1BJTzBfUFdSX09OX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9VUCwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09OKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDMsIFdNODM1MF9HUElPX0RJUl9JTiwKKwkJCSAgIFdNODM1MF9HUElPM19QV1JfT0ZGX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSCwKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfRE9XTiwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09OKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDQsIFdNODM1MF9HUElPX0RJUl9JTiwKKwkJCSAgIFdNODM1MF9HUElPNF9NUl9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNywgV004MzUwX0dQSU9fRElSX0lOLAorCQkJICAgV004MzUwX0dQSU83X0hJQkVSTkFURV9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNiwgV004MzUwX0dQSU9fRElSX09VVCwKKwkJCSAgIFdNODM1MF9HUElPNl9TRE9VVF9PVVQsIFdNODM1MF9HUElPX0FDVElWRV9ISUdILAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDgsIFdNODM1MF9HUElPX0RJUl9PVVQsCisJCQkgICBXTTgzNTBfR1BJTzhfVkNDX0ZBVUxUX09VVCwgV004MzUwX0dQSU9fQUNUSVZFX0xPVywKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfTk9ORSwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA5LCBXTTgzNTBfR1BJT19ESVJfT1VULAorCQkJICAgV004MzUwX0dQSU85X0JBVFRfRkFVTFRfT1VULCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCS8qIEZpeCB1cCBmb3Igb3VyIG93biBzdXBwbGllcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZG8yX2NvbnN1bWVycyk7IGkrKykKKwkJbGRvMl9jb25zdW1lcnNbaV0uZGV2ID0gd204MzUwLT5kZXY7CisKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfMSwgJnN3MWFfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzMsICZ2aW9oaV9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfNCwgJnZpb2xvX2RhdGEpOworCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBXTTgzNTBfRENEQ182LCAmc3cyYV9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18xLCAmbGRvMV9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18yLCAmbGRvMl9kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18zLCAmdmRpZ19kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET180LCAmbGRvNF9kYXRhKTsKKworCS8qIExFRHMgKi8KKwl3bTgzNTBfZGNkY19zZXRfc2xvdCh3bTgzNTAsIFdNODM1MF9EQ0RDXzUsIDEsIDEsCisJCQkgICAgIFdNODM1MF9EQzVfRVJSQUNUX1NIVVRET1dOX0NPTlYpOworCXdtODM1MF9pc2lua19zZXRfZmxhc2god204MzUwLCBXTTgzNTBfSVNJTktfQSwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfRElTQUJMRSwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfVFJJR19CSVQsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX0RVUl8zMk1TLAorCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9PTl9JTlNUQU5ULAorCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfSU5TVEFOVCwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfTU9ERV9FTik7CisJd204MzUwX2RjZGMyNV9zZXRfbW9kZSh3bTgzNTAsIFdNODM1MF9EQ0RDXzUsCisJCQkgICAgICAgV004MzUwX0lTSU5LX01PREVfQk9PU1QsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0lMSU1fTk9STUFMLAorCQkJICAgICAgIFdNODM1MF9EQzVfUk1QXzIwViwKKwkJCSAgICAgICBXTTgzNTBfREM1X0ZCU1JDX0lTSU5LQSk7CisJd204MzUwX3JlZ2lzdGVyX2xlZCh3bTgzNTAsIDAsIFdNODM1MF9EQ0RDXzUsIFdNODM1MF9JU0lOS19BLAorCQkJICAgICZ3bTgzNTBfbGVkX2RhdGEpOworCisJd204MzUwLT5jb2RlYy5wbGF0Zm9ybV9kYXRhID0gJmlteDMyYWRzX3dtODM1MF9zZXR1cDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbXgzMV93bTgzNTBfcGRhdGEgPSB7CisJLmluaXQgPSBteDMxX3dtODM1MF9pbml0LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0lNWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbXgzMWFkc19pMmMxX2RldmljZXNbXSA9IHsKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ3bTgzNTAiLCAweDFhKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXgzMV93bTgzNTBfcGRhdGEsCisJCS5pcnEgPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMyksCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgbXhjX2luaXRfaTJjKHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgzMWFkc19pMmMxX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteDMxYWRzX2kyYzFfZGV2aWNlcykpOworCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NT1NJLCBJT01VWF9DT05GSUdfQUxUMSkpOworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgTlVMTCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgbXhjX2luaXRfaTJjKHZvaWQpCit7Cit9CisjZW5kaWYKKwogLyohCiAgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIGkuTVgzMUFEUyBib2FyZC4KICAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxYWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwJPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKIAkJLnZpcnR1YWwJPSBTUEJBMF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQQkEwX0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gU1BCQTBfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAogCX0sIHsKLQkJLnZpcnR1YWwJPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzJfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKIAkJLnZpcnR1YWwJPSBDUzRfQkFTRV9BRERSX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUzRfQkFTRV9BRERSKSwKIAkJLmxlbmd0aAkJPSBDUzRfU0laRSAvIDIsCkBAIC0yMjEsMTMgKzUwNywxMyBAQAogLyohCiAgKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCiAgKi8KLXZvaWQgX19pbml0IG14MzFhZHNfbWFwX2lvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19tYXBfaW8odm9pZCkKIHsKIAlteGNfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KG14MzFhZHNfaW9fZGVzYywgQVJSQVlfU0laRShteDMxYWRzX2lvX2Rlc2MpKTsKIH0KIAotdm9pZCBfX2luaXQgbXgzMWFkc19pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfaW5pdF9pcnEodm9pZCkKIHsKIAlteGNfaW5pdF9pcnEoKTsKIAlteDMxYWRzX2luaXRfZXhwaW8oKTsKQEAgLTI0MCwxNSArNTI2LDE1IEBACiB7CiAJbXhjX2luaXRfZXh0dWFydCgpOwogCW14Y19pbml0X2lteF91YXJ0KCk7CisJbXhjX2luaXRfaTJjKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDMxYWRzX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAotc3RydWN0IHN5c190aW1lciBteDMxYWRzX3RpbWVyID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgzMWFkc190aW1lciA9IHsKIAkuaW5pdAk9IG14MzFhZHNfdGltZXJfaW5pdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCmluZGV4IGM0MzQ0MDAuLjg5NGQ5OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYwpAQCAtNDIsMjEgKzQyLDExIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWxpdGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewotCQkudmlydHVhbCA9IEFJUFMxX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gQUlQUzFfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewogCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAogCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAogCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKIAkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwgewotCQkudmlydHVhbCA9IEFJUFMyX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gQUlQUzJfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewogCQkudmlydHVhbCA9IENTNF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbiA9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGggPSBDUzRfU0laRSwKQEAgLTgyLDggKzcyLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14MzFsaXRlX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBteDMxbGl0ZV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODBiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMl9fQ1RTMiwgTVgzMV9QSU5fUlRTMl9fUlRTMiwKKwlNWDMxX1BJTl9UWEQyX19UWEQyLCBNWDMxX1BJTl9SWEQyX19SWEQyLAorfTsKKworLyoKKyAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IG14MzFtb2JvYXJkIGluaXQuCisgKi8KK3ZvaWQgX19pbml0IG14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgbXgzMWRldmJvYXJkIHBlcmlwaGVyYWxzXG4iKTsKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywgQVJSQVlfU0laRShteGNfdWFydDFfcGlucyksICJ1YXJ0MSIpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY5NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogc3lzdGVtIGluaXQgZm9yIGJhc2Vib2FyZCB1c2FnZS4gV2lsbCBiZSBjYWxsZWQgYnkgbXgzMW1vYm9hcmQgaW5pdC4KKyAqLwordm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfbWFyeGJvdF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIG14MzFtYXJ4Ym90IHBlcmlwaGVyYWxzXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCmluZGV4IGMyOTA5OGEuLjM0YzJhMWI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKIApAQCAtNjMsNiArNjQsMTggQEAKIAkmbXgzMW1vYm9hcmRfZmxhc2gsCiB9OwogCitzdGF0aWMgaW50IG14Y191YXJ0MF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwgTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLCBNWDMxX1BJTl9SWEQxX19SWEQxLAorfTsKK3N0YXRpYyBpbnQgbXhjX3VhcnQ0X3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9QQ19SU1RfX0NUUzUsIE1YMzFfUElOX1BDX1ZTMl9fUlRTNSwKKwlNWDMxX1BJTl9QQ19CVkQyX19UWEQ1LCBNWDMxX1BJTl9QQ19CVkQxX19SWEQ1LAorfTsKKworc3RhdGljIGludCBteDMxbW9ib2FyZF9iYXNlYm9hcmQ7Citjb3JlX3BhcmFtKG14MzFtb2JvYXJkX2Jhc2Vib2FyZCwgbXgzMW1vYm9hcmRfYmFzZWJvYXJkLCBpbnQsIDA0NDQpOworCiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KQEAgLTcwLDU4ICs4MywyOSBAQAogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCi0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1RTMV9fQ1RTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlRTMV9fUlRTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fVFhEMV9fVFhEMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlhEMV9fUlhEMSk7Ci0KKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDBfcGlucywgQVJSQVlfU0laRShteGNfdWFydDBfcGlucyksICJ1YXJ0MCIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIAotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzJfX0NUUzIpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzJfX1JUUzIpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDJfX1RYRDIpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDJfX1JYRDIpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOwotCi0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUENfUlNUX19DVFM1KTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9QQ19WUzJfX1JUUzUpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1BDX0JWRDJfX1RYRDUpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1BDX0JWRDFfX1JYRDUpOwotCisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQ0X3BpbnMsIEFSUkFZX1NJWkUobXhjX3VhcnQ0X3BpbnMpLCAidWFydDQiKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U0LCAmdWFydF9wZGF0YSk7Ci19CiAKLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIG14MzFtb2JvYXJkLgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFtb2JvYXJkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKLQkJLnZpcnR1YWwJPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzJfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sCi19OwotCi0vKgotICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgotICovCi12b2lkIF9faW5pdCBteDMxbW9ib2FyZF9tYXBfaW8odm9pZCkKLXsKLQlteGNfbWFwX2lvKCk7Ci0JaW90YWJsZV9pbml0KG14MzFtb2JvYXJkX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgzMW1vYm9hcmRfaW9fZGVzYykpOworCXN3aXRjaCAobXgzMW1vYm9hcmRfYmFzZWJvYXJkKSB7CisJY2FzZSBNWDMxTk9CT0FSRDoKKwkJYnJlYWs7CisJY2FzZSBNWDMxREVWQk9BUkQ6CisJCW14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQoKTsKKwkJYnJlYWs7CisJY2FzZSBNWDMxTUFSWEJPVDoKKwkJbXgzMW1vYm9hcmRfbWFyeGJvdF9pbml0KCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBteDMxbW9ib2FyZF9iYXNlYm9hcmQgdHlwZSAlZFxuIiwgbXgzMW1vYm9hcmRfYmFzZWJvYXJkKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDMxbW9ib2FyZF90aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiaXBnX2Nsay4wIik7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgbXgzMW1vYm9hcmRfdGltZXIgPSB7CkBAIC0xMzMsNyArMTE3LDcgQEAKIAkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDMxbW9ib2FyZF9tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gbXhjX21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJm14MzFtb2JvYXJkX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCmluZGV4IGQ0NjRkMDYuLmJjNjNmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKQEAgLTQ1LDQwICs0NSwxNyBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKLXsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DVFMxX19DVFMxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SVFMxX19SVFMxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9UWEQxX19UWEQxKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SWEQxX19SWEQxKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLX0KLQotLyohCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIGkuTVgzMVBESyBib2FyZC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxcGRrX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKLQkJLnZpcnR1YWwJPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQUlQUzJfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sCitzdGF0aWMgaW50IHVhcnRfcGluc1tdID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsCisJTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLAorCU1YMzFfUElOX1JYRDFfX1JYRDEKIH07CiAKLS8qIQotICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzMXBka19tYXBfaW8odm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQogewotCW14Y19tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgzMXBka19pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFwZGtfaW9fZGVzYykpOworCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnRfcGlucywgQVJSQVlfU0laRSh1YXJ0X3BpbnMpLCAidWFydC0wIik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogfQogCiAvKiEKQEAgLTkxLDggKzY4LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14MzFwZGtfdGltZXJfaW5pdCh2b2lkKQogewotCW14Y19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci0JbXhjX3RpbWVyX2luaXQoImlwZ19jbGsuMCIpOworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDMxcGRrX3RpbWVyID0gewpAQCAtMTA4LDcgKzg0LDcgQEAKIAkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDMxcGRrX21hcF9pbywKKwkubWFwX2lvICAgICAgICAgPSBteGNfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgzMXBka190aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKaW5kZXggOGNlYTgyNS4uNWZjZTAyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM3LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBjbTAzNy5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2lmZGVmIENPTkZJR19JMkNfSU1YCisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC0xMTcsMTIgKzEyMyw5MCBAQAogCS5od19lY2MgPSAxLAogfTsKIAorI2lmZGVmIENPTkZJR19JMkNfSU1YCitzdGF0aWMgaW50IGkyY18xX3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9DU1BJMl9NT1NJX19TQ0wsCisJTVgzMV9QSU5fQ1NQSTJfTUlTT19fU0RBLAorfTsKKworc3RhdGljIGludCBwY20wMzdfaTJjXzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGkyY18xX3BpbnMsIEFSUkFZX1NJWkUoaTJjXzFfcGlucyksCisJCQkiaTJjLTEiKTsKK30KKworc3RhdGljIHZvaWQgcGNtMDM3X2kyY18xX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCW14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMoaTJjXzFfcGlucywgQVJSQVlfU0laRShpMmNfMV9waW5zKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM3X2kyY18xX2RhdGEgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCisJLmluaXQgPSBwY20wMzdfaTJjXzFfaW5pdCwKKwkuZXhpdCA9IHBjbTAzN19pMmNfMV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDQwOTYsCisJLnBhZ2Vfc2l6ZSA9IDMyLAorCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjbTAzN19pMmNfZGV2aWNlc1tdID0geworICAgICAgIHsKKwkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygicnRjLXBjZjg1NjMiLCAweDUxKSwKKwkJLnR5cGUgPSAicGNmODU2MyIsCisJfQorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNkaGMxX3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9TRDFfREFUQTNfX1NEMV9EQVRBMywKKwlNWDMxX1BJTl9TRDFfREFUQTJfX1NEMV9EQVRBMiwKKwlNWDMxX1BJTl9TRDFfREFUQTFfX1NEMV9EQVRBMSwKKwlNWDMxX1BJTl9TRDFfREFUQTBfX1NEMV9EQVRBMCwKKwlNWDMxX1BJTl9TRDFfQ0xLX19TRDFfQ0xLLAorCU1YMzFfUElOX1NEMV9DTURfX1NEMV9DTUQsCit9OworCitzdGF0aWMgaW50IHBjbTk3MF9zZGhjMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBoLCB2b2lkICpkYXRhKQoreworCXJldHVybiBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhzZGhjMV9waW5zLCBBUlJBWV9TSVpFKHNkaGMxX3BpbnMpLAorCQkJCSJzZGhjLTEiKTsKK30KKworc3RhdGljIHZvaWQgcGNtOTcwX3NkaGMxX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCW14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMoc2RoYzFfcGlucywgQVJSQVlfU0laRShzZGhjMV9waW5zKSk7Cit9CisKKy8qIE5vIGNhcmQgYW5kIHJ3IGRldGVjdGlvbiBhdCB0aGUgbW9tZW50ICovCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CisJLmluaXQgPSBwY205NzBfc2RoYzFfaW5pdCwKKwkuZXhpdCA9IHBjbTk3MF9zZGhjMV9leGl0LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwY20wMzdfZmxhc2gsCiAJJnBjbTAzN19ldGgsCiAJJnBjbTAzN19zcmFtX2RldmljZSwKIH07CiAKK3N0YXRpYyBpbnQgdWFydDBfcGluc1tdID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsCisJTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLAorCU1YMzFfUElOX1JYRDFfX1JYRDEKK307CisKK3N0YXRpYyBpbnQgdWFydDJfcGluc1tdID0geworCU1YMzFfUElOX0NTUEkzX01PU0lfX1JYRDMsCisJTVgzMV9QSU5fQ1NQSTNfTUlTT19fVFhEMworfTsKKwogLyoKICAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgogICovCkBAIC0xMzAsNTkgKzIxNCwzMyBAQAogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCi0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1RTMV9fQ1RTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlRTMV9fUlRTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fVFhEMV9fVFhEMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlhEMV9fUlhEMSk7Ci0KKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0MF9waW5zLCBBUlJBWV9TSVpFKHVhcnQwX3BpbnMpLCAidWFydC0wIik7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCi0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1NQSTNfTU9TSV9fUlhEMyk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1NQSTNfTUlTT19fVFhEMyk7Ci0KKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0Ml9waW5zLCBBUlJBWV9TSVpFKHVhcnQyX3BpbnMpLCAidWFydC0yIik7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfcGRhdGEpOwogCi0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQkFUVF9MSU5FX19PV0lSRSk7CisJbXhjX2lvbXV4X3NldHVwX3BpbihNWDMxX1BJTl9CQVRUX0xJTkVfX09XSVJFLCAiYmF0dC0wd2lyZSIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y193MV9tYXN0ZXJfZGV2aWNlLCBOVUxMKTsKIAogCS8qIFNNU0M5MjE1IElSUSBwaW4gKi8KLQlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8zXzEsIElPTVVYX0NPTkZJR19HUElPKSk7Ci0JaWYgKCFncGlvX3JlcXVlc3QoTVgzMV9QSU5fR1BJTzNfMSwgInBjbTAzNy1ldGgiKSkKKwlpZiAoIW14Y19pb211eF9zZXR1cF9waW4oSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPM18xLCBJT01VWF9DT05GSUdfR1BJTyksCisJCQkJInBjbTAzNy1ldGgiKSkKIAkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoTVgzMV9QSU5fR1BJTzNfMSk7CiAKKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIHBjbTAzN19pMmNfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUocGNtMDM3X2kyY19kZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZwY20wMzdfaTJjXzFfZGF0YSk7CisjZW5kaWYKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZwY20wMzdfbmFuZF9ib2FyZF9pbmZvKTsKLX0KLQotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgc3RhdGljIG1hcHBpbmdzIGZvciB0aGUgcGNtMDM3IGJvYXJkLgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBjbTAzN19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gQUlQUzFfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMxX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQUlQUzJfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LAotfTsKLQotLyoKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwotdm9pZCBfX2luaXQgcGNtMDM3X21hcF9pbyh2b2lkKQotewotCW14Y19tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQocGNtMDM3X2lvX2Rlc2MsIEFSUkFZX1NJWkUocGNtMDM3X2lvX2Rlc2MpKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTAsICZzZGhjX3BkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHBjbTAzN190aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiaXBnX2Nsay4wIik7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgcGNtMDM3X3RpbWVyID0gewpAQCAtMTk0LDcgKzI1Miw3IEBACiAJLnBoeXNfaW8JPSBBSVBTMV9CQVNFX0FERFIsCiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gcGNtMDM3X21hcF9pbywKKwkubWFwX2lvICAgICAgICAgPSBteGNfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmcGNtMDM3X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcW9uZy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcW9uZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDI4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9xb25nLmMKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcyBMdGQsIDx5YW5va0BlbWNyYWZ0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXFvbmcuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qIEZQR0EgZGVmaW5lcyAqLworI2RlZmluZSBRT05HX0ZQR0FfVkVSU0lPTihtYWpvciwgbWlub3IsIHJldikJXAorCSgoKG1ham9yICYgMHhGKSA8PCAxMikgfCAoKG1pbm9yICYgMHhGKSA8PCA4KSB8IChyZXYgJiAweEZGKSkKKworI2RlZmluZSBRT05HX0ZQR0FfQkFTRUFERFIgCQlDUzFfQkFTRV9BRERSCisjZGVmaW5lIFFPTkdfRlBHQV9QRVJJUEhfU0laRSAJCSgxIDw8IDI0KQorCisjZGVmaW5lIFFPTkdfRlBHQV9DVFJMX0JBU0VBRERSCQlRT05HX0ZQR0FfQkFTRUFERFIKKyNkZWZpbmUgUU9OR19GUEdBX0NUUkxfU0laRSAJCTB4MTAKKy8qIEZQR0EgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUU9OR19GUEdBX0NUUkxfVkVSU0lPTgkJMHgwMAorCisjZGVmaW5lIFFPTkdfRE5FVF9JRAkJMQorI2RlZmluZSBRT05HX0RORVRfQkFTRUFERFIJXAorCShRT05HX0ZQR0FfQkFTRUFERFIgKyBRT05HX0RORVRfSUQgKiBRT05HX0ZQR0FfUEVSSVBIX1NJWkUpCisjZGVmaW5lIFFPTkdfRE5FVF9TSVpFIAkJMHgwMDAwMTAwMAorCisjZGVmaW5lIFFPTkdfRlBHQV9JUlEJCUlPTVVYX1RPX0lSUShNWDMxX1BJTl9EVFJfRENFMSkKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIGludCB1YXJ0X3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9DVFMxX19DVFMxLAorCU1YMzFfUElOX1JUUzFfX1JUUzEsCisJTVgzMV9QSU5fVFhEMV9fVFhEMSwKKwlNWDMxX1BJTl9SWEQxX19SWEQxCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKK3sKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0X3BpbnMsIEFSUkFZX1NJWkUodWFydF9waW5zKSwKKwkJCSJ1YXJ0LTAiKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG5ldF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gImRuZXQtbWVtb3J5IiwKKwkJLnN0YXJ0CT0gUU9OR19ETkVUX0JBU0VBRERSLAorCQkuZW5kCT0gUU9OR19ETkVUX0JBU0VBRERSICsgUU9OR19ETkVUX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gUU9OR19GUEdBX0lSUSwKKwkJLmVuZAk9IFFPTkdfRlBHQV9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbmV0X2RldmljZSA9IHsKKwkubmFtZQkJCT0gImRuZXQiLAorCS5pZAkJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShkbmV0X3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IGRuZXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcW9uZ19pbml0X2RuZXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbmV0X2RldmljZSk7CisJcmV0dXJuIHJldDsKK30KKworLyogTVREIE5PUiBmbGFzaCAqLworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBxb25nX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcW9uZ19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSBDUzBfQkFTRV9BRERSLAorCS5lbmQgPSBDUzBfQkFTRV9BRERSICsgUU9OR19OT1JfU0laRSAtIDEsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxb25nX25vcl9tdGRfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcW9uZ19mbGFzaF9kYXRhLAorCQl9LAorCS5yZXNvdXJjZSA9ICZxb25nX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKK3N0YXRpYyB2b2lkIHFvbmdfaW5pdF9ub3JfbXRkKHZvaWQpCit7CisJKHZvaWQpcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZxb25nX25vcl9tdGRfZGV2aWNlKTsKK30KKworLyoKKyAqIEhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKi8KK3N0YXRpYyB2b2lkIHFvbmdfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBuYW5kX2NoaXAtPklPX0FERFJfVyArICgxIDw8IDI0KSk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBuYW5kX2NoaXAtPklPX0FERFJfVyArICgxIDw8IDIzKSk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBEZXZpY2UgUmVhZHkgcGluLgorICovCitzdGF0aWMgaW50IHFvbmdfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZSQikpOworfQorCitzdGF0aWMgdm9pZCBxb25nX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCWlmIChjaGlwID49IDApCisJCWdwaW9fc2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgMCk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksIDEpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBxb25nX25hbmRfZGF0YSA9IHsKKwkuY2hpcCA9IHsKKwkJLmNoaXBfZGVsYXkJCT0gMjAsCisJCS5vcHRpb25zCQk9IDAsCisJfSwKKwkuY3RybCA9IHsKKwkJLmNtZF9jdHJsIAkJPSBxb25nX25hbmRfY21kX2N0cmwsCisJCS5kZXZfcmVhZHkJCT0gcW9uZ19uYW5kX2RldmljZV9yZWFkeSwKKwkJLnNlbGVjdF9jaGlwCQk9IHFvbmdfbmFuZF9zZWxlY3RfY2hpcCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHFvbmdfbmFuZF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgIAk9IENTM19CQVNFX0FERFIsCisJLmVuZCAgICAJPSBDUzNfQkFTRV9BRERSICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxb25nX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJnZW5fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZxb25nX25hbmRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmcW9uZ19uYW5kX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHFvbmdfaW5pdF9uYW5kX210ZCh2b2lkKQoreworCS8qIGluaXQgQ1MgKi8KKwlfX3Jhd193cml0ZWwoMHgwMDAwNGYwMCwgQ1NDUl9VKDMpKTsKKwlfX3Jhd193cml0ZWwoMHgyMDAxM2IzMSwgQ1NDUl9MKDMpKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAyMDgwMCwgQ1NDUl9BKDMpKTsKKwlteGNfaW9tdXhfc2V0X2dwcihNVVhfU0RDVExfQ1NEMV9TRUwsIHRydWUpOworCisJLyogZW5hYmxlIHBpbiAqLworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fTkZDRV9CLCBJT01VWF9DT05GSUdfR1BJTykpOworCWlmICghZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgIm5hbmRfZW5hYmxlIikpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksIDApOworCisJLyogcmVhZHkvYnVzeSBwaW4gKi8KKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX05GUkIsIElPTVVYX0NPTkZJR19HUElPKSk7CisJaWYgKCFncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORlJCKSwgIm5hbmRfcmR5IikpCisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZSQikpOworCisJLyogd3JpdGUgcHJvdGVjdCBwaW4gKi8KKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX05GV1BfQiwgSU9NVVhfQ09ORklHX0dQSU8pKTsKKwlpZiAoIWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX05GV1BfQiksICJuYW5kX3dwIikpCisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZXUF9CKSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnFvbmdfbmFuZF9kZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcW9uZ19pbml0X2ZwZ2Eodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdTMyIGZwZ2FfdmVyOworCisJcmVncyA9IGlvcmVtYXAoUU9OR19GUEdBX0NUUkxfQkFTRUFERFIsIFFPTkdfRlBHQV9DVFJMX1NJWkUpOworCWlmICghcmVncykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycywgYWJvcnRpbmcuXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWZwZ2FfdmVyID0gcmVhZGwocmVncyArIFFPTkdfRlBHQV9DVFJMX1ZFUlNJT04pOworCWlvdW5tYXAocmVncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUW9uZyBGUEdBIHZlcnNpb24gJWQuJWQuJWRcbiIsCisJCQkoZnBnYV92ZXIgJiAweEYwMDApID4+IDEyLAorCQkJKGZwZ2FfdmVyICYgMHgwRjAwKSA+PiA4LCBmcGdhX3ZlciAmIDB4MDBGRik7CisJaWYgKGZwZ2FfdmVyIDwgUU9OR19GUEdBX1ZFUlNJT04oMCwgOCwgNykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJxb25nOiBVbmV4cGVjdGVkIEZQR0EgdmVyc2lvbiwgRlBHQS1iYXNlZCAiCisJCQkJImRldmljZXMgd29uJ3QgYmUgcmVnaXN0ZXJlZCFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogcmVnaXN0ZXIgRlBHQS1iYXNlZCBkZXZpY2VzICovCisJcW9uZ19pbml0X25hbmRfbXRkKCk7CisJcW9uZ19pbml0X2RuZXQoKTsKK30KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIE1YMzEgbWVtb3J5IG1hcC4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBxb25nX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwgPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IEFJUFMxX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRAorCX0sIHsKKwkJLnZpcnR1YWwgPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IEFJUFMyX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRAorCX0KK307CisKKy8qCisgKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBxb25nX21hcF9pbyh2b2lkKQoreworCW14Y19tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQocW9uZ19pb19kZXNjLCBBUlJBWV9TSVpFKHFvbmdfaW9fZGVzYykpOworfQorCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pbml0X2lteF91YXJ0KCk7CisJcW9uZ19pbml0X25vcl9tdGQoKTsKKwlxb25nX2luaXRfZnBnYSgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcW9uZ190aW1lcl9pbml0KHZvaWQpCit7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHFvbmdfdGltZXIgPSB7CisJLmluaXQJPSBxb25nX3RpbWVyX2luaXQsCit9OworCisvKgorICogVGhlIGZvbGxvd2luZyB1c2VzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MgZGVmaW5lZCBpbiBhcmNoLmggaW4gb3JkZXIgdG8KKyAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfUU9ORyBkYXRhIHN0cnVjdHVyZS4KKyAqLworCitNQUNISU5FX1NUQVJUKFFPTkcsICJEYXZlL0RFTlggUW9uZ0VWQi1MSVRFIikKKwkvKiBNYWludGFpbmVyOiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkggKi8KKwkucGh5c19pbyAgICAgICAgPSBBSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gcW9uZ19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZxb25nX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDZjMTAyM2IuLmRjN2I0YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjgsNyArMjgsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCXdyaXRlbChORVRYX1NZU1RFTV9SRVNfQ1JfRklSTVdfUkVTX0VOIHwgTkVUWF9TWVNURU1fUkVTX0NSX0ZJUk1XX1JFUywKIAkgICAgICAgTkVUWF9TWVNURU1fUkVTX0NSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBlMjA2OGM1Li4xNTYxNTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yMCw3ICsyMCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NFU1NPUl9OUzkzNjAKIAlpZiAocHJvY2Vzc29yX2lzX25zOTM2MCgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYwppbmRleCAyMmUwZWI2Li5mZWIwZTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYwpAQCAtNjMsNyArNjMsNiBAQAogI2Vsc2UKIHN0YXRpYyB2b2lkIGhhbmRsZV9wcmlvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIApAQCAtNzIsNyArNzEsNyBAQAogCUJVR19PTihkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUyk7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCWlmICh1bmxpa2VseSghYWN0aW9uIHx8IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCAxMGEzMDFlLi4zZjMyNWQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC03LDYgKzcsMTEgQEAKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCitjb25maWcgQVJDSF9PTUFQODUwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxCisJYm9vbCAiT01BUDg1MCBCYXNlZCBTeXN0ZW0iCisJc2VsZWN0IENQVV9BUk05MjZUCisKIGNvbmZpZyBBUkNIX09NQVAxNVhYCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJZGVmYXVsdCB5CkBAIC00Niw2ICs1MSwxMiBAQAogCSAgVEkgT01BUCAxNzEwIEgzIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAogCSAgYSBib2FyZC4KIAorY29uZmlnIE1BQ0hfT01BUF9IVENXSVpBUkQKKwlib29sICJIVEMgV2l6YXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQODUwCisJaGVscAorCSAgSFRDIFdpemFyZCBzbWFydHBob25lIHN1cHBvcnQgKEFLQSBRVEVLIDkxMDAsIC4uLikKKwogY29uZmlnIE1BQ0hfT01BUF9PU0sKIAlib29sICJUSSBPU0sgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWApAQCAtMTYzLDcgKzE3NCw3IEBACiAKIGNvbmZpZyBPTUFQX0FSTV8xOTVNSFoKIAlib29sICJPTUFQIEFSTSAxOTUgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQNzMwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTk1TUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtMTc1LDEzICsxODYsMTMgQEAKIAogY29uZmlnIE9NQVBfQVJNXzE4Mk1IWgogCWJvb2wgIk9NQVAgQVJNIDE4MiBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVA3MzAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVA4NTApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxODJNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTY4TUhaCiAJYm9vbCAiT01BUCBBUk0gMTY4IE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVA4NTApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxNjhNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0xOTMsMjAgKzIwNCwyMCBAQAogCiBjb25maWcgT01BUF9BUk1fMTIwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTIwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVA4NTApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxMjBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fNjBNSFoKIAlib29sICJPTUFQIEFSTSA2MCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogICAgICAgICBkZWZhdWx0IHkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDYwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIE9NQVBfQVJNXzMwTUhaCiAJYm9vbCAiT01BUCBBUk0gMzAgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDg1MCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDMwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKaW5kZXggMmU2MTgzOS4uOGI0MGFhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCkBAIC0xNzUsNyArMTc1LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGFtc19kZWx0YV9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX0xDRCwJCSZhbXNfZGVsdGFfbGNkX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmFtc19kZWx0YV91YXJ0X2NvbmZpZyB9LAotCXsgT01BUF9UQUdfVVNCLAkJJmFtc19kZWx0YV91c2JfY29uZmlnIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGFtc19kZWx0YV9rcF9yZXNvdXJjZXNbXSA9IHsKQEAgLTIzMiw2ICsyMzEsNyBAQAogCS8qIENsZWFyIGxhdGNoMiAoTkFORCwgTENELCBtb2RlbSBlbmFibGUpICovCiAJYW1zX2RlbHRhX2xhdGNoMl93cml0ZSh+MCwgMCk7CiAKKwlvbWFwX3VzYl9pbml0KCZhbXNfZGVsdGFfdXNiX2NvbmZpZyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYW1zX2RlbHRhX2RldmljZXMsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2RldmljZXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwppbmRleCAzMDMwODI5Li4xOWUwZTkyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKQEAgLTM0LDcgKzM0LDM5IEBACiAjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLWZzYW1wbGUuaD4KKworLyogZnNhbXBsZSBpcyBwcmV0dHkgY2xvc2UgdG8gcDItc2FtcGxlICovCisKKyNkZWZpbmUgZnNhbXBsZV9jcGxkX3JlYWQocmVnKSBfX3Jhd19yZWFkYihyZWcpCisjZGVmaW5lIGZzYW1wbGVfY3BsZF93cml0ZSh2YWwsIHJlZykgX19yYXdfd3JpdGViKHZhbCwgcmVnKQorCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CQVNFICAgIDB4RTgxMDAwMDAKKyNkZWZpbmUgRlNBTVBMRV9DUExEX1NJWkUgICAgU1pfNEsKKyNkZWZpbmUgRlNBTVBMRV9DUExEX1NUQVJUICAgMHgwNTA4MDAwMAorCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9SRUdfQSAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDApCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TV0lUQ0ggIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDIpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9VQVJUICAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDIpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9SRUdfQiAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDQpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9WRVJTSU9OIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDYpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDYpCisKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9CVF9SRVNFVCAgICAgICAgIDAKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9MQ0RfUkVTRVQgICAgICAgIDEKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9DQU1fUFdETiAgICAgICAgIDIKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9DSEFSR0VSX0VOQUJMRSAgIDMKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9TRF9NTUNfRU4gICAgICAgIDQKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX1BXUkVOICAgICAgIDUKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9CQUNLTElHSFQgICAgICAgIDYKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX0VOX1JFU0VUICAgIDcKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX1NMRUVQeF9OICAgIDgKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9PVEdfUkVTRVQgICAgICAgIDkKKworI2RlZmluZSBmc2FtcGxlX2NwbGRfc2V0KGJpdCkgXAorICAgIGZzYW1wbGVfY3BsZF93cml0ZSgoKChiaXQpICYgMTUpIDw8IDQpIHwgMHgwZiwgRlNBTVBMRV9DUExEX1NFVF9DTFIpCisKKyNkZWZpbmUgZnNhbXBsZV9jcGxkX2NsZWFyKGJpdCkgXAorICAgIGZzYW1wbGVfY3BsZF93cml0ZSgweGYwIHwgKChiaXQpICYgMTUpLCBGU0FNUExFX0NQTERfU0VUX0NMUikKIAogc3RhdGljIGludCBmc2FtcGxlX2tleW1hcFtdID0gewogCUtFWSgwLDAsS0VZX1VQKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKaW5kZXggN2QyNjcwMi4uZTcyNDk0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKQEAgLTYyLDcgKzYyLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGdlbmVyaWNfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwJCU5VTEwgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZnZW5lcmljX3VhcnRfY29uZmlnIH0sCiB9OwogCkBAIC03MCwxMiArNjksMTIgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CisJCW9tYXBfdXNiX2luaXQoJmdlbmVyaWMxNTEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiAJaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgewotCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNjEwX3VzYl9jb25maWc7CisJCW9tYXBfdXNiX2luaXQoJmdlbmVyaWMxNjEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi1tbWMuYwppbmRleCA0MDlmYTU2Li40NGQ0YTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLW1tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDItbW1jLmMKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogCisjaW5jbHVkZSAiYm9hcmQtaDIuaCIKKwogI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCiAKIHN0YXRpYyBpbnQgbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggMGQ3ODRhNy4uZjY5NWFhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtNDYsNiArNDYsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAKKyNpbmNsdWRlICJib2FyZC1oMi5oIgorCisvKiBBdCBPTUFQMTYxMCBJbm5vdmF0b3IgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KKyNkZWZpbmUgT01BUDE2MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAorCiBzdGF0aWMgaW50IGgyX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCiAJS0VZKDAsIDEsIEtFWV9SSUdIVCksCkBAIC0zNjQsNyArMzY5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgyX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQkmaDJfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmgyX3VhcnRfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmaDJfbGNkX2NvbmZpZyB9LAogfTsKQEAgLTQxMyw2ICs0MTcsNyBAQAogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBoMl9pMmNfYm9hcmRfaW5mbywKIAkJCSAgICAgIEFSUkFZX1NJWkUoaDJfaTJjX2JvYXJkX2luZm8pKTsKKwlvbWFwX3VzYl9pbml0KCZoMl91c2JfY29uZmlnKTsKIAloMl9tbWNfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1ZTI2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMTYxMCBIMiBib2FyZC4KKyAqCisgKiBDbGVhbnVwIGZvciBMaW51eC0yLjYgYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSDJfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDJfSAorCisjZGVmaW5lIEgyX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCisjCWRlZmluZSBIMl9UUFNfR1BJT19NTUNfUFdSX0VOCShIMl9UUFNfR1BJT19CQVNFICsgMykKKworZXh0ZXJuIHZvaWQgaDJfbW1jX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0gyX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMtbW1jLmMKaW5kZXggZmRmZTc5My4uMGQ4YTNjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLW1tYy5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2luY2x1ZGUgImJvYXJkLWgzLmgiCisKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCiBzdGF0aWMgaW50IG1tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IGJmMDhiNmEuLjQ2OTU5NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTUwLDYgKzUwLDExIEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCisjaW5jbHVkZSAiYm9hcmQtaDMuaCIKKworLyogSW4gT01BUDE3MTAgSDMgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KKyNkZWZpbmUgT01BUDE3MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAorCiAjZGVmaW5lIEgzX1RTX0dQSU8JNDgKIAogc3RhdGljIGludCBoM19rZXltYXBbXSA9IHsKQEAgLTQxOCw3ICs0MjMsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDNfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwJCSZoM191c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmaDNfdWFydF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJCSZoM19sY2RfY29uZmlnIH0sCiB9OwpAQCAtNDcyLDYgKzQ3Niw3IEBACiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIGgzX2kyY19ib2FyZF9pbmZvLAogCQkJICAgICAgQVJSQVlfU0laRShoM19pMmNfYm9hcmRfaW5mbykpOworCW9tYXBfdXNiX2luaXQoJmgzX3VzYl9jb25maWcpOwogCWgzX21tY19pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGRlNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0gzX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0gzX0gKKworI2RlZmluZSBIM19UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQorIwlkZWZpbmUgSDNfVFBTX0dQSU9fTU1DX1BXUl9FTgkoSDNfVFBTX0dQSU9fQkFTRSArIDQpCisKK2V4dGVybiB2b2lkIGgzX21tY19pbml0KHZvaWQpOworCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IM19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCAwNzFjZDAyLi4yZmQ5ODI2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zOSw2ICszOSw5IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogCisvKiBBdCBPTUFQMTYxMCBJbm5vdmF0b3IgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KKyNkZWZpbmUgSU5OT1ZBVE9SMTYxMF9FVEhSX1NUQVJUCTB4MDQwMDAzMDAKKwogc3RhdGljIGludCBpbm5vdmF0b3Jfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9GMSksCiAJS0VZKDAsIDMsIEtFWV9ET1dOKSwKQEAgLTM3MCw3ICszNzMsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaW5ub3ZhdG9yX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVVNCLCAgICAgICAgIE5VTEwgfSwKIAl7IE9NQVBfVEFHX0xDRCwJCU5VTEwgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZpbm5vdmF0b3JfdWFydF9jb25maWcgfSwKIH07CkBAIC0zOTIsMTMgKzM5NCwxMyBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJaW5ub3ZhdG9yX2NvbmZpZ1swXS5kYXRhID0gJmlubm92YXRvcjE1MTBfdXNiX2NvbmZpZzsKKwkJb21hcF91c2JfaW5pdCgmaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnKTsKIAkJaW5ub3ZhdG9yX2NvbmZpZ1sxXS5kYXRhID0gJmlubm92YXRvcjE1MTBfbGNkX2NvbmZpZzsKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAogCWlmIChjcHVfaXNfb21hcDE2MTAoKSkgewotCQlpbm5vdmF0b3JfY29uZmlnWzBdLmRhdGEgPSAmaDJfdXNiX2NvbmZpZzsKKwkJb21hcF91c2JfaW5pdCgmaDJfdXNiX2NvbmZpZyk7CiAJCWlubm92YXRvcl9jb25maWdbMV0uZGF0YSA9ICZpbm5vdmF0b3IxNjEwX2xjZF9jb25maWc7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKaW5kZXggYWY1MWUwYi4uN2JjN2EzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYwpAQCAtMjMzLDEwICsyMzMsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG5va2lhNzcwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQlOVUxMIH0sCi19OwotCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9EU1ApCiAvKgogICogYXVkaW8gcG93ZXIgY29udHJvbApAQCAtMzcxLDE5ICszNjcsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfaW5pdCh2b2lkKQogewotCW5va2lhNzcwX2NvbmZpZ1swXS5kYXRhID0gJm5va2lhNzcwX3VzYl9jb25maWc7Ci0KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhub2tpYTc3MF9kZXZpY2VzLCBBUlJBWV9TSVpFKG5va2lhNzcwX2RldmljZXMpKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhub2tpYTc3MF9zcGlfYm9hcmRfaW5mbywKIAkJCQlBUlJBWV9TSVpFKG5va2lhNzcwX3NwaV9ib2FyZF9pbmZvKSk7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBub2tpYTc3MF9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobm9raWE3NzBfY29uZmlnKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKIAlvbWFwX2RzcF9pbml0KCk7CiAJYWRzNzg0Nl9kZXZfaW5pdCgpOwogCW1pcGlkX2Rldl9pbml0KCk7CisJb21hcF91c2JfaW5pdCgmbm9raWE3NzBfdXNiX2NvbmZpZyk7CiAJbm9raWE3NzBfbW1jX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggMWExNmVjYi4uY2YzMjQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC01Miw2ICs1MiwyMCBAQAogI2luY2x1ZGUgPG1hY2gvdGMuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCisvKiBBdCBPTUFQNTkxMiBPU0sgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KKyNkZWZpbmUgT01BUF9PU0tfRVRIUl9TVEFSVAkJMHgwNDgwMDMwMAorCisvKiBUUFM2NTAxMCBoYXMgZm91ciBHUElPcy4gIG5QRyBhbmQgTEVEMiBjYW4gYmUgdHJlYXRlZCBsaWtlIEdQSU9zIHdpdGgKKyAqIGFsdGVybmF0ZSBwaW4gY29uZmlndXJhdGlvbnMgZm9yIGhhcmR3YXJlLWNvbnRyb2xsZWQgYmxpbmtpbmcuCisgKi8KKyNkZWZpbmUgT1NLX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fVVNCX1BXUl9FTgkoT1NLX1RQU19HUElPX0JBU0UgKyAwKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EMwkoT1NLX1RQU19HUElPX0JBU0UgKyAxKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0xBTl9SRVNFVAkoT1NLX1RQU19HUElPX0JBU0UgKyAyKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0RTUF9QV1JfRU4JKE9TS19UUFNfR1BJT19CQVNFICsgMykKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDkJKE9TS19UUFNfR1BJT19CQVNFICsgNCkKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDIJKE9TS19UUFNfR1BJT19CQVNFICsgNSkKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9za19wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTI5MCw3ICszMDQsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9za19jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLCAgICAgICAgICAgJm9za191c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULAkJJm9za191YXJ0X2NvbmZpZyB9LAogI2lmZGVmCUNPTkZJR19PTUFQX09TS19NSVNUUkFMCiAJeyBPTUFQX1RBR19MQ0QsCQkJJm9za19sY2RfY29uZmlnIH0sCkBAIC01NDEsNiArNTU0LDggQEAKIAlsIHw9ICgzIDw8IDEpOwogCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKIAorCW9tYXBfdXNiX2luaXQoJm9za191c2JfY29uZmlnKTsKKwogCS8qIGlycSBmb3IgdHBzNjUwMTAgY2hpcCAqLwogCS8qIGJvb3Rsb2FkZXIgZWZmZWN0aXZlbHkgZG9lczogIG9tYXBfY2ZnX3JlZyhVMTlfMTYxMF9NUFVJTzEpOyAqLwogCWlmIChncGlvX3JlcXVlc3QoT01BUF9NUFVJTygxKSwgInRwczY1MDEwIikgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IDk5ZjJiNDMuLjg4NmI0YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtNDMsNiArNDMsMjEgQEAKICNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAKKyNkZWZpbmUgUEFMTVRFX1VTQkRFVEVDVF9HUElPCTAKKyNkZWZpbmUgUEFMTVRFX1VTQl9PUl9EQ19HUElPCTEKKyNkZWZpbmUgUEFMTVRFX1RTQ19HUElPCQk0CisjZGVmaW5lIFBBTE1URV9QSU5UREFWX0dQSU8JNgorI2RlZmluZSBQQUxNVEVfTU1DX1dQX0dQSU8JOAorI2RlZmluZSBQQUxNVEVfTU1DX1BPV0VSX0dQSU8JOQorI2RlZmluZSBQQUxNVEVfSERRX0dQSU8JCTExCisjZGVmaW5lIFBBTE1URV9IRUFEUEhPTkVTX0dQSU8JMTQKKyNkZWZpbmUgUEFMTVRFX1NQRUFLRVJfR1BJTwkxNQorI2RlZmluZSBQQUxNVEVfRENfR1BJTwkJT01BUF9NUFVJTygyKQorI2RlZmluZSBQQUxNVEVfTU1DX1NXSVRDSF9HUElPCU9NQVBfTVBVSU8oNCkKKyNkZWZpbmUgUEFMTVRFX01NQzFfR1BJTwlPTUFQX01QVUlPKDYpCisjZGVmaW5lIFBBTE1URV9NTUMyX0dQSU8JT01BUF9NUFVJTyg3KQorI2RlZmluZSBQQUxNVEVfTU1DM19HUElPCU9NQVBfTVBVSU8oMTEpCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10ZV9pbml0X2lycSh2b2lkKQogewogCW9tYXAxX2luaXRfY29tbW9uX2h3KCk7CkBAIC0yODYsNyArMzAxLDYgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBwYWxtdGVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwJCSZwYWxtdGVfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTENELAkJJnBhbG10ZV9sY2RfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmcGFsbXRlX3VhcnRfY29uZmlnIH0sCiB9OwpAQCAtMzQxLDYgKzM1NSw3IEBACiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGFsbXRlX3NwaV9pbmZvLCBBUlJBWV9TSVpFKHBhbG10ZV9zcGlfaW5mbykpOwogCXBhbG10ZV9taXNjX2dwaW9fc2V0dXAoKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF91c2JfaW5pdCgmcGFsbXRlX3VzYl9jb25maWcpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwppbmRleCAxY2JjMTI3Li40ZjFiNDQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKQEAgLTQzLDYgKzQzLDEzIEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAKKyNkZWZpbmUgUEFMTVRUX1VTQkRFVEVDVF9HUElPCTAKKyNkZWZpbmUgUEFMTVRUX0NBQkxFX0dQSU8JMQorI2RlZmluZSBQQUxNVFRfTEVEX0dQSU8JCTMKKyNkZWZpbmUgUEFMTVRUX1BFTklSUV9HUElPCTYKKyNkZWZpbmUgUEFMTVRUX01NQ19XUF9HUElPCTgKKyNkZWZpbmUgUEFMTVRUX0hEUV9HUElPCQkxMQorCiBzdGF0aWMgaW50IHBhbG10dF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0VTQyksCiAJS0VZKDAsIDEsIEtFWV9TUEFDRSksCkBAIC0yNzIsNyArMjc5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBhbG10dF9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLAkJJnBhbG10dF91c2JfY29uZmlnCX0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmcGFsbXR0X2xjZF9jb25maWcJfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZwYWxtdHRfdWFydF9jb25maWcJfSwKIH07CkBAIC0yOTcsNiArMzAzLDcgQEAKIAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBhbG10dF9ib2FyZGluZm8sQVJSQVlfU0laRShwYWxtdHRfYm9hcmRpbmZvKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOworCW9tYXBfdXNiX2luaXQoJnBhbG10dF91c2JfY29uZmlnKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCBiYWY1ZWZiLi45YTU1YzNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtNDYsNiArNDYsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KIAorI2RlZmluZSBQQUxNWjcxX1VTQkRFVEVDVF9HUElPCTAKKyNkZWZpbmUgUEFMTVo3MV9QRU5JUlFfR1BJTwk2CisjZGVmaW5lIFBBTE1aNzFfTU1DX1dQX0dQSU8JOAorI2RlZmluZSBQQUxNWjcxX0hEUV9HUElPIAkxMQorCisjZGVmaW5lIFBBTE1aNzFfSE9UU1lOQ19HUElPCU9NQVBfTVBVSU8oMSkKKyNkZWZpbmUgUEFMTVo3MV9DQUJMRV9HUElPCU9NQVBfTVBVSU8oMikKKyNkZWZpbmUgUEFMTVo3MV9TTElERVJfR1BJTwlPTUFQX01QVUlPKDMpCisjZGVmaW5lIFBBTE1aNzFfTU1DX0lOX0dQSU8JT01BUF9NUFVJTyg0KQorCiBzdGF0aWMgdm9pZCBfX2luaXQKIG9tYXBfcGFsbXo3MV9pbml0X2lycSh2b2lkKQogewpAQCAtMjM5LDcgKzI0OSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBwYWxtejcxX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0Je09NQVBfVEFHX1VTQiwJJnBhbG16NzFfdXNiX2NvbmZpZ30sCiAJe09NQVBfVEFHX0xDRCwJJnBhbG16NzFfbGNkX2NvbmZpZ30sCiAJe09NQVBfVEFHX1VBUlQsCSZwYWxtejcxX3VhcnRfY29uZmlnfSwKIH07CkBAIC0zMTMsNiArMzIyLDcgQEAKIAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBhbG16NzFfYm9hcmRpbmZvLAogCQkJCUFSUkFZX1NJWkUocGFsbXo3MV9ib2FyZGluZm8pKTsKKwlvbWFwX3VzYl9pbml0KCZwYWxtejcxX3VzYl9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKIAlwYWxtejcxX2dwaW9fc2V0dXAoMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLW1tYy5jCmluZGV4IDY2YTRkN2QuLjU4YTQ2ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLW1tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLW1tYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1zeDEuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IDI4Yzc2YTEuLmMwOTY1NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1zeDEuaD4KIAogLyogV3JpdGUgdG8gSTJDIGRldmljZSAqLwogaW50IHN4MV9pMmNfd3JpdGVfYnl0ZSh1OCBkZXZhZGRyLCB1OCByZWdvZmZzZXQsIHU4IHZhbHVlKQpAQCAtMzczLDcgKzM3NCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBzeDFfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwJJnN4MV91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCSZzeDFfbGNkX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJnN4MV91YXJ0X2NvbmZpZyB9LAogfTsKQEAgLTM4OCw2ICszODgsNyBAQAogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHN4MV9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKKwlvbWFwX3VzYl9pbml0KCZzeDFfdXNiX2NvbmZpZyk7CiAJc3gxX21tY19pbml0KCk7CiAKIAkvKiB0dXJuIG9uIFVTQiBwb3dlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggYTc2NTM1NC4uOTgyNzVlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0xNDUsNyArMTQ1LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHZvaWNlYmx1ZV9jb25maWdbXSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwgICZ2b2ljZWJsdWVfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwgJnZvaWNlYmx1ZV91YXJ0X2NvbmZpZyB9LAogfTsKIApAQCAtMTg1LDYgKzE4NCw3IEBACiAJb21hcF9ib2FyZF9jb25maWcgPSB2b2ljZWJsdWVfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHZvaWNlYmx1ZV9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlvbWFwX3VzYl9pbml0KCZ2b2ljZWJsdWVfdXNiX2NvbmZpZyk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiAKIAkvKiBUaGVyZSBpcyBhIGdvb2QgY2hhbmNlIGJvYXJkIGlzIGdvaW5nIHVwLCBzbyBlbmFibGUgcG93ZXIgTEVECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKaW5kZXggNWZiYTIwNy4uZGFmZTRmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwpAQCAtMjAsNDEgKzIwLDE2MSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19nZW5lcmljOworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX3VhcnQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHNwY2s7CisKICNpbmNsdWRlICJjbG9jay5oIgogCitzdGF0aWMgaW50IGNsa19vbWFwMV9kdW1teV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGtfb21hcDFfZHVtbXlfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kdW1teSA9IHsKKwkuZW5hYmxlID0gY2xrX29tYXAxX2R1bW15X2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19vbWFwMV9kdW1teV9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfY2sgPSB7CisJLm5hbWUJPSAiZHVtbXkiLAorCS5vcHMJPSAmY2xrb3BzX2R1bW15LAorCS5mbGFncwk9IFJBVEVfRklYRUQsCit9OworCitzdHJ1Y3Qgb21hcF9jbGsgeworCXUzMgkJY3B1OworCXN0cnVjdCBjbGtfbG9va3VwIGxrOworfTsKKworI2RlZmluZSBDTEsoZGV2LCBjb24sIGNrLCBjcCkgCQlcCisJewkJCQlcCisJCSAuY3B1ID0gY3AsCQlcCisJCS5sayA9IHsJCQlcCisJCQkuZGV2X2lkID0gZGV2LAlcCisJCQkuY29uX2lkID0gY29uLAlcCisJCQkuY2xrID0gY2ssCVwKKwkJfSwJCQlcCisJfQorCisjZGVmaW5lIENLXzMxMAkoMSA8PCAwKQorI2RlZmluZSBDS183MzAJKDEgPDwgMSkKKyNkZWZpbmUgQ0tfMTUxMAkoMSA8PCAyKQorI2RlZmluZSBDS18xNlhYCSgxIDw8IDMpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcF9jbGtzW10gPSB7CisJLyogbm9uLVVMUEQgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJja19yZWYiLAkmY2tfcmVmLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJja19kcGxsMSIsCSZja19kcGxsMSwJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCS8qIENLX0dFTjEgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJja19kcGxsMW91dCIsCSZja19kcGxsMW91dC5jbGssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkiY2tfc29zc2kiLAkmc29zc2lfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkiYXJtX2NrIiwJJmFybV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJtcGVyX2NrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybV9ncGlvX2NrIiwJJmFybV9ncGlvX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybXhvcl9jayIsCSZhcm14b3JfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm10aW1fY2siLAkmYXJtdGltX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZhcm13ZHRfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJmFybXBlcl9jay5jbGssCUNLXzE2WFgpLAorCUNMSygib21hcF93ZHQiLCAiaWNrIiwJCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm1pbnRoX2NrIiwJJmFybWludGhfY2sxNTEwLCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybWludGhfY2siLAkmYXJtaW50aF9jazE2eHgsIENLXzE2WFgpLAorCS8qIENLX0dFTjIgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJkc3BfY2siLAkmZHNwX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3BtbXVfY2siLAkmZHNwbW11X2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3BwZXJfY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3B4b3JfY2siLAkmZHNweG9yX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3B0aW1fY2siLAkmZHNwdGltX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJLyogQ0tfR0VOMyBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJInRjX2NrIiwJJnRjX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183MzApLAorCUNMSyhOVUxMLAkidGlwYl9jayIsCSZ0aXBiX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImwzX29jcGlfY2siLAkmbDNfb2NwaV9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ0YzFfY2siLAkmdGMxX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJInRjMl9jayIsCSZ0YzJfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkiZG1hX2NrIiwJJmRtYV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiZG1hX2xjZGZyZWVfY2siLCAmZG1hX2xjZGZyZWVfY2ssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkiYXBpX2NrIiwJJmFwaV9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImxiX2NrIiwJJmxiX2NrLmNsaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJyaGVhMV9jayIsCSZyaGVhMV9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJyaGVhMl9jayIsCSZyaGVhMl9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJsY2RfY2siLAkmbGNkX2NrXzE2eHgsCUNLXzE2WFggfCBDS183MzApLAorCUNMSyhOVUxMLAkibGNkX2NrIiwJJmxjZF9ja18xNTEwLmNsaywgQ0tfMTUxMCB8IENLXzMxMCksCisJLyogVUxQRCBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJInVhcnQxX2NrIiwJJnVhcnQxXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidWFydDFfY2siLAkmdWFydDFfMTZ4eC5jbGssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkidWFydDJfY2siLAkmdWFydDJfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVhcnQzX2NrIiwJJnVhcnQzXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidWFydDNfY2siLAkmdWFydDNfMTZ4eC5jbGssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkidXNiX2Nsa28iLAkmdXNiX2Nsa28sCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVzYl9oaGNfY2siLAkmdXNiX2hoY19jazE1MTAsIENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidXNiX2hoY19jayIsCSZ1c2JfaGhjX2NrMTZ4eCwgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ1c2JfZGNfY2siLAkmdXNiX2RjX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJIm1jbGsiLAkJJm1jbGtfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJtY2xrIiwJCSZtY2xrXzE2eHgsCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkiYmNsayIsCQkmYmNsa18xNTEwLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImJjbGsiLAkJJmJjbGtfMTZ4eCwJQ0tfMTZYWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJmY2siLAkmbW1jMV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm1tY2ktb21hcC4xIiwgImZjayIsCSZtbWMyX2NrLAlDS18xNlhYKSwKKwlDTEsoIm1tY2ktb21hcC4xIiwgImljayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYKSwKKwkvKiBWaXJ0dWFsIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibXB1IiwJCSZ2aXJ0dWFsX2NrX21wdSwgQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjX2ZjaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjX2ljaywJQ0tfMTZYWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwX3V3aXJlIiwgImZjayIsCSZhcm14b3JfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJmRzcHBlcl9jaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKK307CisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKKwogX191MzIgYXJtX2lkbGVjdDFfbWFzazsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBPbWFwMSBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIDE0OworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIDE0OwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfdWFydF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXVuc2lnbmVkIGludCB2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHZhbCAmIGNsay0+ZW5hYmxlX2JpdCkKLQkJY2xrLT5yYXRlID0gNDgwMDAwMDA7Ci0JZWxzZQotCQljbGstPnJhdGUgPSAxMjAwMDAwMDsKKwl1bnNpZ25lZCBpbnQgdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZXR1cm4gdmFsICYgY2xrLT5lbmFibGVfYml0ID8gNDgwMDAwMDAgOiAxMjAwMDAwMDsKIH0KIAotc3RhdGljIHZvaWQgb21hcDFfc29zc2lfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3Nvc3NpX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIGRpdiA9IG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKTsKIAogCWRpdiA9IChkaXYgPj4gMTcpICYgMHg3OwogCWRpdisrOwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2OworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZGl2OwogfQogCiBzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCkBAIC03OCw2ICsxOTgsMTEgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kc3BjayA9IHsKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKIHN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqY2xrKQogewogCWludCByZXQ7CkBAIC0xMDUsNiArMjMwLDExIEBACiAJb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYyhjbGspOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydCA9IHsKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCit9OworCiBzdGF0aWMgdm9pZCBvbWFwMV9jbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IGFybV9pZGxlY3QxX2NsayAqIGljbGsgPSAoc3RydWN0IGFybV9pZGxlY3QxX2NsayAqKWNsazsKQEAgLTE5Nyw5ICszMjcsNiBAQAogCXN0cnVjdCBjbGsgKiBwYXJlbnQ7CiAJdW5zaWduZWQgIGRzb3JfZXhwOwogCi0JaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlwYXJlbnQgPSBjbGstPnBhcmVudDsKIAlpZiAodW5saWtlbHkocGFyZW50ID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTIxNSwyMiArMzQyLDE1IEBACiAJcmV0dXJuIGRzb3JfZXhwOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGRzb3I7Ci0KIAkvKiBDYWxjdWxhdGUgZGl2aXNvciBlbmNvZGVkIGFzIDItYml0IGV4cG9uZW50ICovCi0JZHNvciA9IDEgPDwgKDMgJiAob21hcF9yZWFkdyhBUk1fQ0tDVEwpID4+IGNsay0+cmF0ZV9vZmZzZXQpKTsKKwlpbnQgZHNvciA9IDEgPDwgKDMgJiAob21hcF9yZWFkdyhBUk1fQ0tDVEwpID4+IGNsay0+cmF0ZV9vZmZzZXQpKTsKIAotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKLQkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7Ci0KLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKIH0KIAotc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpbnQgZHNvcjsKIApAQCAtMjQ1LDEyICszNjUsNyBAQAogCWRzb3IgPSAxIDw8ICgzICYgKF9fcmF3X3JlYWR3KERTUF9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOwogCW9tYXAxX2Nsa19kaXNhYmxlKCZhcGlfY2suY2xrKTsKIAotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKLQkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7Ci0KLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKIH0KIAogLyogTVBVIHZpcnR1YWwgY2xvY2sgZnVuY3Rpb25zICovCkBAIC0yODksMzUgKzQwNCw1NyBAQAogCQlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKIAogCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOwotCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50ICByZXQgPSAtRUlOVkFMOwotCWludCAgZHNvcl9leHA7Ci0JX191MTYgIHJlZ3ZhbDsKKwlpbnQgZHNvcl9leHA7CisJdTE2IHJlZ3ZhbDsKIAotCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgewotCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKLQkJaWYgKGRzb3JfZXhwID4gMykKLQkJCWRzb3JfZXhwID0gLUVJTlZBTDsKLQkJaWYgKGRzb3JfZXhwIDwgMCkKLQkJCXJldHVybiBkc29yX2V4cDsKKwlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwlpZiAoZHNvcl9leHAgPiAzKQorCQlkc29yX2V4cCA9IC1FSU5WQUw7CisJaWYgKGRzb3JfZXhwIDwgMCkKKwkJcmV0dXJuIGRzb3JfZXhwOwogCi0JCXJlZ3ZhbCA9IF9fcmF3X3JlYWR3KERTUF9DS0NUTCk7Ci0JCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7Ci0JCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OwotCQlfX3Jhd193cml0ZXcocmVndmFsLCBEU1BfQ0tDVEwpOwotCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKLQkJcmV0ID0gMDsKLQl9CisJcmVndmFsID0gX19yYXdfcmVhZHcoRFNQX0NLQ1RMKTsKKwlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOworCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OworCV9fcmF3X3dyaXRldyhyZWd2YWwsIERTUF9DS0NUTCk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7CiAKLQlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gMDsKK30KIAotCXJldHVybiByZXQ7CitzdGF0aWMgbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IGRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOworCWlmIChkc29yX2V4cCA8IDApCisJCXJldHVybiBkc29yX2V4cDsKKwlpZiAoZHNvcl9leHAgPiAzKQorCQlkc29yX2V4cCA9IDM7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IGRzb3JfZXhwOworCXUxNiByZWd2YWw7CisKKwlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwlpZiAoZHNvcl9leHAgPiAzKQorCQlkc29yX2V4cCA9IC1FSU5WQUw7CisJaWYgKGRzb3JfZXhwIDwgMCkKKwkJcmV0dXJuIGRzb3JfZXhwOworCisJcmVndmFsID0gb21hcF9yZWFkdyhBUk1fQ0tDVEwpOworCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7CisJcmVndmFsIHw9IGRzb3JfZXhwIDw8IGNsay0+cmF0ZV9vZmZzZXQ7CisJcmVndmFsID0gdmVyaWZ5X2NrY3RsX3ZhbHVlKHJlZ3ZhbCk7CisJb21hcF93cml0ZXcocmVndmFsLCBBUk1fQ0tDVEwpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKQEAgLTM3MiwxNCArNTA5LDE0IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCXZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2YWwgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCWlmIChyYXRlID09IDEyMDAwMDAwKQogCQl2YWwgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CiAJZWxzZSBpZiAocmF0ZSA9PSA0ODAwMDAwMCkKIAkJdmFsIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQlvbWFwX3dyaXRlbCh2YWwsIGNsay0+ZW5hYmxlX3JlZyk7CisJX19yYXdfd3JpdGVsKHZhbCwgY2xrLT5lbmFibGVfcmVnKTsKIAljbGstPnJhdGUgPSByYXRlOwogCiAJcmV0dXJuIDA7CkBAIC0zOTgsOCArNTM1LDggQEAKIAllbHNlCiAJCXJhdGlvX2JpdHMgPSAoZHNvciAtIDIpIDw8IDI7CiAKLQlyYXRpb19iaXRzIHw9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOwotCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CisJcmF0aW9fYml0cyB8PSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjB4ZmQ7CisJX19yYXdfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMyw4ICs1NjAsNiBAQAogCW9tYXBfd3JpdGVsKGwsIE1PRF9DT05GX0NUUkxfMSk7CiAKIAljbGstPnJhdGUgPSBwX3JhdGUgLyAoZGl2ICsgMSk7Ci0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDAsOCArNTc1LDggQEAKIAlfX3UxNiByYXRpb19iaXRzOwogCiAJLyogRGV0ZXJtaW5lIGN1cnJlbnQgcmF0ZSBhbmQgZW5zdXJlIGNsb2NrIGlzIGJhc2VkIG9uIDk2TUh6IEFQTEwgKi8KLQlyYXRpb19iaXRzID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjE7Ci0Jb21hcF93cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKKwlyYXRpb19iaXRzID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4xOworCV9fcmF3X3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOwogCiAJcmF0aW9fYml0cyA9IChyYXRpb19iaXRzICYgMHhmYykgPj4gMjsKIAlpZiAocmF0aW9fYml0cyA+IDYpCkBAIC00NjgsNyArNjAzLDcgQEAKIAkJCQlvbWFwMV9jbGtfZGVueV9pZGxlKGNsay0+cGFyZW50KTsKIAkJfQogCi0JCXJldCA9IGNsay0+ZW5hYmxlKGNsayk7CisJCXJldCA9IGNsay0+b3BzLT5lbmFibGUoY2xrKTsKIAogCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7CiAJCQlvbWFwMV9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CkBAIC00ODIsNyArNjE3LDcgQEAKIHN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7Ci0JCWNsay0+ZGlzYWJsZShjbGspOworCQljbGstPm9wcy0+ZGlzYWJsZShjbGspOwogCQlpZiAobGlrZWx5KGNsay0+cGFyZW50KSkgewogCQkJb21hcDFfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwogCQkJaWYgKGNsay0+ZmxhZ3MgJiBDTE9DS19OT19JRExFX1BBUkVOVCkKQEAgLTQ5Niw5ICs2MzEsNiBAQAogCV9fdTE2IHJlZ3ZhbDE2OwogCV9fdTMyIHJlZ3ZhbDMyOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLAogCQkgICAgICAgY2xrLT5uYW1lKTsKQEAgLTUwNiwyNSArNjM4LDEzIEBACiAJfQogCiAJaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KKwkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CiAJfSBlbHNlIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKLQkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQorCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUzOSw0NCArNjU5LDI2IEBACiAJCXJldHVybjsKIAogCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KKwkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwogCX0gZWxzZSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQorCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZ2VuZXJpYyA9IHsKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKK307CisKIHN0YXRpYyBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWludCBkc29yX2V4cDsKLQogCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKIAkJcmV0dXJuIGNsay0+cmF0ZTsKIAotCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgewotCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKLQkJaWYgKGRzb3JfZXhwIDwgMCkKLQkJCXJldHVybiBkc29yX2V4cDsKLQkJaWYgKGRzb3JfZXhwID4gMykKLQkJCWRzb3JfZXhwID0gMzsKLQkJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOwotCX0KLQogCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gTlVMTCkKIAkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwogCkBAIC01ODYsMzAgKzY4OCw5IEBACiBzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpbnQgIHJldCA9IC1FSU5WQUw7Ci0JaW50ICBkc29yX2V4cDsKLQlfX3UxNiAgcmVndmFsOwogCiAJaWYgKGNsay0+c2V0X3JhdGUpCiAJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKLQllbHNlIGlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgewotCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKLQkJaWYgKGRzb3JfZXhwID4gMykKLQkJCWRzb3JfZXhwID0gLUVJTlZBTDsKLQkJaWYgKGRzb3JfZXhwIDwgMCkKLQkJCXJldHVybiBkc29yX2V4cDsKLQotCQlyZWd2YWwgPSBvbWFwX3JlYWR3KEFSTV9DS0NUTCk7Ci0JCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7Ci0JCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OwotCQlyZWd2YWwgPSB2ZXJpZnlfY2tjdGxfdmFsdWUocmVndmFsKTsKLQkJb21hcF93cml0ZXcocmVndmFsLCBBUk1fQ0tDVEwpOwotCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKLQkJcmV0ID0gMDsKLQl9Ci0KLQlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYzMiwxNyArNzEzLDEwIEBACiAJfQogCiAJLyogSXMgdGhlIGNsb2NrIGFscmVhZHkgZGlzYWJsZWQ/ICovCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKQotCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCX0gZWxzZSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKQotCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQllbHNlCi0JCQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQl9CisJaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKQorCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJZWxzZQorCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CiAKIAlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgY2xrLT5lbmFibGVfYml0KSkgPT0gMCkKIAkJcmV0dXJuOwpAQCAtNjU5LDcgKzczMyw3IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCIuLi4gIiwgY2xrLT5uYW1lKTsKLQljbGstPmRpc2FibGUoY2xrKTsKKwljbGstPm9wcy0+ZGlzYWJsZShjbGspOwogCXByaW50aygiIGRvbmVcbiIpOwogfQogCkBAIC02NzcsMTAgKzc1MSwxMCBAQAogCiBpbnQgX19pbml0IG9tYXAxX2Nsa19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNsayAqKiBjbGtwOworCXN0cnVjdCBvbWFwX2NsayAqYzsKIAljb25zdCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcgKmluZm87CiAJaW50IGNyeXN0YWxfdHlwZSA9IDA7IC8qIERlZmF1bHQgMTIgTUh6ICovCi0JdTMyIHJlZzsKKwl1MzIgcmVnLCBjcHVfbWFzazsKIAogI2lmZGVmIENPTkZJR19ERUJVR19MTAogCS8qIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKQEAgLTcwMCwyOCArNzc0LDI1IEBACiAJLyogQnkgZGVmYXVsdCBhbGwgaWRsZWN0MSBjbG9ja3MgYXJlIGFsbG93ZWQgdG8gaWRsZSAqLwogCWFybV9pZGxlY3QxX21hc2sgPSB+MDsKIAotCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgewotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTUxMCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKLQkJfQorCWZvciAoYyA9IG9tYXBfY2xrczsgYyA8IG9tYXBfY2xrcyArIEFSUkFZX1NJWkUob21hcF9jbGtzKTsgYysrKQorCQljbGtfaW5pdF9vbmUoYy0+bGsuY2xrKTsKIAotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTZYWCkgJiYgY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKLQkJfQorCWNwdV9tYXNrID0gMDsKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCWNwdV9tYXNrIHw9IENLXzE2WFg7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQljcHVfbWFzayB8PSBDS18xNTEwOworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQljcHVfbWFzayB8PSBDS183MzA7CisJaWYgKGNwdV9pc19vbWFwMzEwKCkpCisJCWNwdV9tYXNrIHw9IENLXzMxMDsKIAotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQNzMwKSAmJiBjcHVfaXNfb21hcDczMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7CisJZm9yIChjID0gb21hcF9jbGtzOyBjIDwgb21hcF9jbGtzICsgQVJSQVlfU0laRShvbWFwX2Nsa3MpOyBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgeworCQkJY2xrZGV2X2FkZCgmYy0+bGspOworCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CiAJCX0KIAotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMzEwKSAmJiBjcHVfaXNfb21hcDMxMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci0KIAlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0NMT0NLLCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcpOwogCWlmIChpbmZvICE9IE5VTEwpIHsKIAkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKQEAgLTc2OSw3ICs4NDAsNiBAQAogCQkJfQogCQl9CiAJfQotCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CiAjZWxzZQogCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSBhbmQgZW5hYmxlIGl0ICovCiAJaWYgKG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0dWFsX2NrX21wdSwgfjApKSB7CkBAIC03NzgsOSArODQ4LDkgQEAKIAkJb21hcF93cml0ZXcoMHgyMjkwLCBEUExMX0NUTCk7CiAJCW9tYXBfd3JpdGV3KGNwdV9pc19vbWFwNzMwKCkgPyAweDMwMDUgOiAweDEwMDUsIEFSTV9DS0NUTCk7CiAJCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKLQkJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKIAl9CiAjZW5kaWYKKwlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwogCS8qIENhY2hlIHJhdGVzIGZvciBjbG9ja3MgY29ubmVjdGVkIHRvIGNrX3JlZiAobm90IGRwbGwxKSAqLwogCXByb3BhZ2F0ZV9yYXRlKCZja19yZWYpOwogCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogIgpAQCAtODMyLDQgKzkwMiwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCmluZGV4IGMxZGNkZjEuLjE3Zjg3NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKQEAgLTEzLDI3ICsxMywyMiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDFfQ0xPQ0tfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDFfQ0xPQ0tfSAogCi1zdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV93YXRjaGRvZ19yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIGludCBvbWFwMV9zZXRfc29zc2lfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9zb3NzaV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9zb3NzaV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKiBjbGspOwogc3RhdGljIGludCBvbWFwMV9zZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIGludCBvbWFwMV9zZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyB2b2lkIG9tYXAxX2luaXRfZXh0X2NsayhzdHJ1Y3QgY2xrICogY2xrKTsKIHN0YXRpYyBpbnQgb21hcDFfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBsb25nIG9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKKworc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKIHN0cnVjdCBtcHVfcmF0ZSB7CiAJdW5zaWduZWQgbG9uZwkJcmF0ZTsKQEAgLTE1MiwxMDEgKzE0Nyw4NCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBja19yZWYgPSB7CiAJLm5hbWUJCT0gImNrX3JlZiIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKIAkubmFtZQkJPSAiY2tfZHBsbDEiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGNrX2RwbGwxb3V0ID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJja19kcGxsMW91dCIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSURMRV9DT05UUk9MIHwKLQkJCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBSQVRFX1BST1BBR0FURVMsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9DS09VVF9BUk0sCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSAxMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNvc3NpX2NrID0gewogCS5uYW1lCQk9ICJja19zb3NzaSIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmY2tfZHBsbDFvdXQuY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX05PX0lETEVfUEFSRU5UIHwKLQkJCSAgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzEsCisJLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5UIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8xKSwKIAkuZW5hYmxlX2JpdAk9IDE2LAogCS5yZWNhbGMJCT0gJm9tYXAxX3Nvc3NpX3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3Nvc3NpX3JhdGUsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1fY2sgPSB7CiAJLm5hbWUJCT0gImFybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAogCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm1wZXJfY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImFybXBlcl9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfQ0tDVEwgfAotCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKIAkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKIAkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKIAkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkuZW5hYmxlX2JpdAk9IEVOX0dQSU9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJteG9yX2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJhcm14b3JfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmY2tfcmVmLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSAxLAogfTsKQEAgLTI1NCwxNCArMjMyLDEyIEBACiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm10aW1fY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImFybXRpbV9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZja19yZWYsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gOSwKIH07CkBAIC0yNjksMjAxICsyNDUsMTY2IEBACiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm13ZHRfY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImFybXdkdF9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZja19yZWYsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX1dEVENLLAogCQkucmVjYWxjCQk9ICZvbWFwMV93YXRjaGRvZ19yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSAwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7CiAJLm5hbWUJCT0gImFybWludGhfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCiAJICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCiAJICoKIAkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgogCSAqLwotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNwX2NrID0gewogCS5uYW1lCQk9ICJkc3BfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fQ0tDVEwpLAogCS5lbmFibGVfYml0CT0gRU5fRFNQQ0ssCiAJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQRElWX09GRlNFVCwKIAkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcG1tdV9jayA9IHsKIAkubmFtZQkJPSAiZHNwbW11X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKIAkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcHBlcl9jayA9IHsKIAkubmFtZQkJPSAiZHNwcGVyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZHNwY2ssCiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IFZJUlRVQUxfSU9fQUREUkVTUywKIAkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCiAJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKIAkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbiwKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKIAkuc2V0X3JhdGUJPSAmb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4sCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3B4b3JfY2sgPSB7CiAJLm5hbWUJCT0gImRzcHhvcl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2RzcGNrLAogCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCiAJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNwdGltX2NrID0gewogCS5uYW1lCQk9ICJkc3B0aW1fY2siLAorCS5vcHMJCT0gJmNsa29wc19kc3BjaywKIAkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgVklSVFVBTF9JT19BRERSRVNTLAogCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAogfTsKIAogLyogVGllIEFSTV9JRExFQ1QxOklETElGX0FSTSB0byB0aGlzIGxvZ2ljYWwgY2xvY2sgc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayB0Y19jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAidGNfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVA3MzAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCSAgQUxXQVlTX0VOQUJMRUQgfCBDTE9DS19JRExFX0NPTlRST0wsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5yYXRlX29mZnNldAk9IENLQ1RMX1RDRElWX09GRlNFVCwKIAkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTUxMCA9IHsKIAkubmFtZQkJPSAiYXJtaW50aF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS8qIE5vdGU6IE9uIDE1MTAgdGhlIGZyZXF1ZW5jeSBmb2xsb3dzIFRDX0NLCiAJICoKIAkgKiAxNnh4IHZlcnNpb24gaXMgaW4gTVBVIGNsb2Nrcy4KIAkgKi8KLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRpcGJfY2sgPSB7CiAJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KIAkubmFtZQkJPSAidGlwYl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbDNfb2NwaV9jayA9IHsKIAkvKiBOby1pZGxlIGNvbnRyb2xsZWQgYnkgInRjX2NrIiAqLwogCS5uYW1lCQk9ICJsM19vY3BpX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QzLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMyksCiAJLmVuYWJsZV9iaXQJPSBFTl9PQ1BJX0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0YzFfY2sgPSB7CiAJLm5hbWUJCT0gInRjMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMywKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDMpLAogCS5lbmFibGVfYml0CT0gRU5fVEMxX0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0YzJfY2sgPSB7CiAJLm5hbWUJCT0gInRjMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMywKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDMpLAogCS5lbmFibGVfYml0CT0gRU5fVEMyX0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbWFfY2sgPSB7CiAJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KIAkubmFtZQkJPSAiZG1hX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9sY2RmcmVlX2NrID0gewogCS5uYW1lCQk9ICJkbWFfbGNkZnJlZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcGlfY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImFwaV9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gOCwKIH07CkBAIC00NzEsMjc2ICs0MTIsMjM4IEBACiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsYl9jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAibGJfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fTEJDSywKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayByaGVhMV9jayA9IHsKIAkubmFtZQkJPSAicmhlYTFfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcmhlYTJfY2sgPSB7CiAJLm5hbWUJCT0gInJoZWEyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGxjZF9ja18xNnh4ID0gewogCS5uYW1lCQk9ICJsY2RfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfCBSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJLmVuYWJsZV9iaXQJPSBFTl9MQ0RDSywKIAkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAogCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogfTsKIAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgbGNkX2NrXzE1MTAgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImxjZF9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkJICBSQVRFX0NLQ1RMIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9MQ0RDSywKIAkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKIAkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAotCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVhcnRfY2xrIHVhcnQxXzE2eHggPSB7CiAJLmNsawk9IHsKIAkJLm5hbWUJCT0gInVhcnQxX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX3VhcnQsCiAJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJCS5yYXRlCQk9IDQ4MDAwMDAwLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBSQVRFX0ZJWEVEIHwKLQkJCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCQkuZW5hYmxlX2JpdAk9IDI5LAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbCwKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfdWFydF9mdW5jdGlvbmFsLAogCX0sCiAJLnN5c2NfYWRkcgk9IDB4ZmZmYjAwNTQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jayA9IHsKIAkubmFtZQkJPSAidWFydDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IDMwLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNTEwID0gewogCS5uYW1lCQk9ICJ1YXJ0M19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAotCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVhcnRfY2xrIHVhcnQzXzE2eHggPSB7CiAJLmNsawk9IHsKIAkJLm5hbWUJCT0gInVhcnQzX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX3VhcnQsCiAJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJCS5yYXRlCQk9IDQ4MDAwMDAwLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBSQVRFX0ZJWEVEIHwKLQkJCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCQkuZW5hYmxlX2JpdAk9IDMxLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbCwKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfdWFydF9mdW5jdGlvbmFsLAogCX0sCiAJLnN5c2NfYWRkcgk9IDB4ZmZmYjk4NTQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrbyA9IHsJLyogNiBNSHogb3V0cHV0IG9uIFc0X1VTQl9DTEtPICovCiAJLm5hbWUJCT0gInVzYl9jbGtvIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA2MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVVMUERfQ0xPQ0tfQ1RSTCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFVMUERfQ0xPQ0tfQ1RSTCksCiAJLmVuYWJsZV9iaXQJPSBVU0JfTUNMS19FTl9CSVQsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTUxMCA9IHsKIAkubmFtZQkJPSAidXNiX2hoY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsIC8qIEFjdHVhbGx5IDIgY2xvY2tzLCAxMk1IeiBhbmQgNDhNSHogKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IFVTQl9IT1NUX0hIQ19VSE9TVF9FTiwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNnh4ID0gewogCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwKIAkvKiBPVEdfU1lTQ09OXzIuT1RHX1BBREVOID09IDAgKG5vdCAxNTEwLWNvbXBhdGlibGUpICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopT1RHX0JBU0UgKyAweDA4IC8qIE9UR19TWVNDT05fMiAqLywKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE9UR19CQVNFICsgMHgwOCksIC8qIE9UR19TWVNDT05fMiAqLwogCS5lbmFibGVfYml0CT0gOCAvKiBVSE9TVF9FTiAqLywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9kY19jayA9IHsKIAkubmFtZQkJPSAidXNiX2RjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBSQVRFX0ZJWEVELAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVNPRlRfUkVRX1JFRywKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKIAkuZW5hYmxlX2JpdAk9IDQsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2xrXzE1MTAgPSB7CiAJLm5hbWUJCT0gIm1jbGsiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAotIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9GSVhFRCwKLSAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopU09GVF9SRVFfUkVHLAotIAkuZW5hYmxlX2JpdAk9IDYsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCisJLmVuYWJsZV9iaXQJPSA2LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNnh4ID0gewogCS5uYW1lCQk9ICJtY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQ09NX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKENPTV9DTEtfRElWX0NUUkxfU0VMKSwKIAkuZW5hYmxlX2JpdAk9IENPTV9VTFBEX1BMTF9DTEtfUkVRLAogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfZXh0X2Nsa19yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX2V4dF9jbGtfcmF0ZSwKIAkuaW5pdAkJPSAmb21hcDFfaW5pdF9leHRfY2xrLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNTEwID0gewogCS5uYW1lCQk9ICJiY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9GSVhFRCwKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTZ4eCA9IHsKIAkubmFtZQkJPSAiYmNsayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVNXRF9DTEtfRElWX0NUUkxfU0VMLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTV0RfQ0xLX0RJVl9DVFJMX1NFTCksCiAJLmVuYWJsZV9iaXQJPSBTV0RfVUxQRF9QTExfQ0xLX1JFUSwKIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X2V4dF9jbGtfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMV9yb3VuZF9leHRfY2xrX3JhdGUsCiAJLmluaXQJCT0gJm9tYXAxX2luaXRfZXh0X2NsaywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2sgPSB7CiAJLm5hbWUJCT0gIm1tY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8Ci0JCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IDIzLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMl9jayA9IHsKIAkubmFtZQkJPSAibW1jX2NrIiwKIAkuaWQJCT0gMSwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gMjAsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0dWFsX2NrX21wdSA9IHsKIAkubmFtZQkJPSAibXB1IiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiAvKiB2aXJ0dWFsIGZ1bmN0aW9uYWwgY2xvY2sgZG9tYWluIGZvciBJMkMuIEp1c3QgZm9yIG1ha2luZyBzdXJlIHRoYXQgQVJNWE9SX0NLCkBAIC03NDgsNzggKzY1MSwxOSBAQAogc3RhdGljIHN0cnVjdCBjbGsgaTJjX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCiAJLmlkCQk9IDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgVklSVFVBTF9DTE9DSyB8IENMT0NLX05PX0lETEVfUEFSRU5UIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5wYXJlbnQJCT0gJmFybXhvcl9jay5jbGssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyY19pY2sgPSB7CiAJLm5hbWUJCT0gImkyY19pY2siLAogCS5pZAkJPSAxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFZJUlRVQUxfQ0xPQ0sgfCBDTE9DS19OT19JRExFX1BBUkVOVCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBDTE9DS19OT19JRExFX1BBUkVOVCwKIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqIG9uY2hpcF9jbGtzW10gPSB7Ci0JLyogbm9uLVVMUEQgY2xvY2tzICovCi0JJmNrX3JlZiwKLQkmY2tfZHBsbDEsCi0JLyogQ0tfR0VOMSBjbG9ja3MgKi8KLQkmY2tfZHBsbDFvdXQuY2xrLAotCSZzb3NzaV9jaywKLQkmYXJtX2NrLAotCSZhcm1wZXJfY2suY2xrLAotCSZhcm1fZ3Bpb19jaywKLQkmYXJteG9yX2NrLmNsaywKLQkmYXJtdGltX2NrLmNsaywKLQkmYXJtd2R0X2NrLmNsaywKLQkmYXJtaW50aF9jazE1MTAsICAmYXJtaW50aF9jazE2eHgsCi0JLyogQ0tfR0VOMiBjbG9ja3MgKi8KLQkmZHNwX2NrLAotCSZkc3BtbXVfY2ssCi0JJmRzcHBlcl9jaywKLQkmZHNweG9yX2NrLAotCSZkc3B0aW1fY2ssCi0JLyogQ0tfR0VOMyBjbG9ja3MgKi8KLQkmdGNfY2suY2xrLAotCSZ0aXBiX2NrLAotCSZsM19vY3BpX2NrLAotCSZ0YzFfY2ssCi0JJnRjMl9jaywKLQkmZG1hX2NrLAotCSZkbWFfbGNkZnJlZV9jaywKLQkmYXBpX2NrLmNsaywKLQkmbGJfY2suY2xrLAotCSZyaGVhMV9jaywKLQkmcmhlYTJfY2ssCi0JJmxjZF9ja18xNnh4LAotCSZsY2RfY2tfMTUxMC5jbGssCi0JLyogVUxQRCBjbG9ja3MgKi8KLQkmdWFydDFfMTUxMCwKLQkmdWFydDFfMTZ4eC5jbGssCi0JJnVhcnQyX2NrLAotCSZ1YXJ0M18xNTEwLAotCSZ1YXJ0M18xNnh4LmNsaywKLQkmdXNiX2Nsa28sCi0JJnVzYl9oaGNfY2sxNTEwLCAmdXNiX2hoY19jazE2eHgsCi0JJnVzYl9kY19jaywKLQkmbWNsa18xNTEwLCAgJm1jbGtfMTZ4eCwKLQkmYmNsa18xNTEwLCAgJmJjbGtfMTZ4eCwKLQkmbW1jMV9jaywKLQkmbW1jMl9jaywKLQkvKiBWaXJ0dWFsIGNsb2NrcyAqLwotCSZ2aXJ0dWFsX2NrX21wdSwKLQkmaTJjX2ZjaywKLQkmaTJjX2ljaywKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCBiYTVkN2MwLi5iYmJhZWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtODYsNyArODYsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWJveF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm1haWxib3giLAorCS5uYW1lCQk9ICJvbWFwMS1tYWlsYm94IiwKIAkuaWQJCT0gLTEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1ib3hfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBtYm94X3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwppbmRleCA4OWJiODc1Li40ZWYyNmZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCkBAIC0zOCw2ICszOCw3IEBACiAJeyAuanRhZ19pZCA9IDB4YjU3NCwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMxMDMxNSwgLnR5cGUgPSAweDAzMTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHgzNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAxMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDMwMH0sCisJeyAuanRhZ19pZCA9IDB4YjU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDUwMCwgLnR5cGUgPSAweDA4NTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNDcwLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzEwMTAwLCAudHlwZSA9IDB4MTUxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgxNjEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTEwMDAwfSwKQEAgLTc3LDcgKzc4LDcgQEAKIAlwcm9kX2lkID0gb21hcF9yZWFkbChPTUFQX1BST0RVQ1RJT05fSURfMSk7CiAJb21hcF9pZCA9IG9tYXBfcmVhZGwoT01BUDMyX0lEXzEpOwogCi0JLyogQ2hlY2sgZm9yIHVudXNhYmxlIE9NQVBfUFJPRFVDVElPTl9JRF8xIG9uIDE2MTFCLzU5MTIgYW5kIDczMCAqLworCS8qIENoZWNrIGZvciB1bnVzYWJsZSBPTUFQX1BST0RVQ1RJT05fSURfMSBvbiAxNjExQi81OTEyIGFuZCA3MzAvODUwICovCiAJaWYgKCgocHJvZF9pZCA+PiAyMCkgPT0gMCkgfHwgKHByb2RfaWQgPT0gb21hcF9pZCkpCiAJCXByb2RfaWQgPSAwOwogCWVsc2UKQEAgLTE3OCw2ICsxNzksNyBAQAogCiAJc3dpdGNoIChjcHVfdHlwZSkgewogCWNhc2UgMHgwNzoKKwljYXNlIDB4MDg6CiAJCW9tYXBfcmV2aXNpb24gfD0gMHgwNzsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IDRjM2U1ODIuLjNhZmU1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTUyLDYgKzUyLDIyIEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXA4NTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IE9NQVA4NTBfRFNQX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQODUwX0RTUF9TVEFSVCksCisJCS5sZW5ndGgJCT0gT01BUDg1MF9EU1BfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwgeworCQkudmlydHVhbAk9IE9NQVA4NTBfRFNQUkVHX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQODUwX0RTUFJFR19TVEFSVCksCisJCS5sZW5ndGgJCT0gT01BUDg1MF9EU1BSRUdfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfQorfTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDE1MTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewpAQCAtMTA5LDYgKzEyNSwxMyBAQAogCQlpb3RhYmxlX2luaXQob21hcDczMF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXA3MzBfaW9fZGVzYykpOwogCX0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWlmIChjcHVfaXNfb21hcDg1MCgpKSB7CisJCWlvdGFibGVfaW5pdChvbWFwODUwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDg1MF9pb19kZXNjKSk7CisJfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCA5YWQ1MTk3Li5kZTAzYzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTE0NSw2ICsxNDUsMTQgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayBvbWFwODUwX2lycV9iYW5rc1tdID0geworCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmOGUyMmYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZkYjljMWYyIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgxMDAsCS50cmlnZ2VyX21hcCA9IDB4ODAwMDQwZjMgfSwKK307CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7CiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLAkJLnRyaWdnZXJfbWFwID0gMHhiM2ZlYmZmZiB9LApAQCAtMTg0LDYgKzE5MiwxMiBAQAogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDczMF9pcnFfYmFua3MpOwogCX0KICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwlpZiAoY3B1X2lzX29tYXA4NTAoKSkgeworCQlpcnFfYmFua3MgPSBvbWFwODUwX2lycV9iYW5rczsKKwkJaXJxX2JhbmtfY291bnQgPSBBUlJBWV9TSVpFKG9tYXA4NTBfaXJxX2JhbmtzKTsKKwl9CisjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlpcnFfYmFua3MgPSBvbWFwMTUxMF9pcnFfYmFua3M7CkBAIC0yMTQsOSArMjI4LDggQEAKIAlpcnFfYmFua193cml0ZWwoMHgwMywgMSwgSVJRX0NPTlRST0xfUkVHX09GRlNFVCk7CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyBpbiBnbG9iYWwgbWFzayAqLwotCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwN3h4KCkpCiAJCWlycV9iYW5rX3dyaXRlbCgweDAsIDAsIElSUV9HTVJfUkVHX09GRlNFVCk7Ci0JfQogCiAJLyogSW5zdGFsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBlYWNoIGJhbmsgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaXJxX2JhbmtfY291bnQ7IGkrKykgewpAQCAtMjM2LDYgKzI0OSw4IEBACiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkKIAkJb21hcF91bm1hc2tfaXJxKElOVF83MzBfSUgyX0lSUSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXA4NTAoKSkKKwkJb21hcF91bm1hc2tfaXJxKElOVF84NTBfSUgyX0lSUSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCW9tYXBfdW5tYXNrX2lycShJTlRfMTUxMF9JSDJfSVJRKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tYWlsYm94LmMKaW5kZXggNTlhYmJmMy4uMGFmNGQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tYWlsYm94LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTWFpbGJveCByZXNlcnZhdGlvbiBtb2R1bGVzIGZvciBEU1AKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKiBXcml0dGVuIGJ5OiBIaXJvc2hpIERPWVUgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTUFJTEJPWF9EU1AyQVJNMV9GbGFnCQkweDFjCiAjZGVmaW5lIE1BSUxCT1hfRFNQMkFSTTJfRmxhZwkJMHgyMAogCi11bnNpZ25lZCBsb25nIG1ib3hfYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1ib3hfYmFzZTsKIAogc3RydWN0IG9tYXBfbWJveDFfZmlmbyB7CiAJdW5zaWduZWQgbG9uZyBjbWQ7CkBAIC00MCwxNCArNDAsMTQgQEAKIAlzdHJ1Y3Qgb21hcF9tYm94MV9maWZvIHJ4X2ZpZm87CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBtYm94X3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW5saW5lIGludCBtYm94X3JlYWRfcmVnKHNpemVfdCBvZnMpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWR3KG1ib3hfYmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWR3KG1ib3hfYmFzZSArIG9mcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGlubGluZSB2b2lkIG1ib3hfd3JpdGVfcmVnKHUzMiB2YWwsIHNpemVfdCBvZnMpCiB7Ci0JX19yYXdfd3JpdGV3KHZhbCwgbWJveF9iYXNlICsgcmVnKTsKKwlfX3Jhd193cml0ZXcodmFsLCBtYm94X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBtc2cgKi8KQEAgLTE0Myw3ICsxNDMsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0wobWJveF9kc3BfaW5mbyk7CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAxX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0ID0gMDsKQEAgLTE3MCwxMiArMTcwLDEwIEBACiAJfQogCW1ib3hfZHNwX2luZm8uaXJxID0gcmVzLT5zdGFydDsKIAotCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1ib3hfZHNwX2luZm8pOwogfQogCi1zdGF0aWMgaW50IG9tYXAxX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwMV9tYm94X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKIApAQCAtMTg0LDkgKzE4Miw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAxX21ib3hfZHJpdmVyID0gewogCS5wcm9iZQk9IG9tYXAxX21ib3hfcHJvYmUsCi0JLnJlbW92ZQk9IG9tYXAxX21ib3hfcmVtb3ZlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChvbWFwMV9tYm94X3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKLQkJLm5hbWUJPSAibWFpbGJveCIsCisJCS5uYW1lCT0gIm9tYXAxLW1haWxib3giLAogCX0sCiB9OwogCkBAIC0yMDMsNCArMjAxLDcgQEAKIG1vZHVsZV9pbml0KG9tYXAxX21ib3hfaW5pdCk7CiBtb2R1bGVfZXhpdChvbWFwMV9tYm94X2V4aXQpOwogCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIm9tYXAgbWFpbGJveDogb21hcDEgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZ1bmN0aW9ucyIpOworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBET1lVIiA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4pOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwMS1tYWlsYm94Iik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKaW5kZXggNTc1YmEzMS4uZDA0MGMzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwpAQCAtMjgsOSArMjgsOSBAQAogI2RlZmluZSBEUFNfUlNUQ1QyX1BFUl9FTgkoMSA8PCAwKQogI2RlZmluZSBEU1BfUlNUQ1QyX1dEX1BFUl9FTgkoMSA8PCAxKQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLWNvbnN0IGNoYXIgKmNsa19uYW1lc1tdID0geyAiZHNwX2NrIiwgImFwaV9jayIsICJkc3B4b3JfY2siIH07Ci0jZW5kaWYKK3N0YXRpYyBpbnQgZHNwX3VzZTsKK3N0YXRpYyBzdHJ1Y3QgY2xrICphcGlfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmRzcF9jbGs7CiAKIHN0YXRpYyB2b2lkIG9tYXAxX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQogewpAQCAtMzksMjAgKzM5LDQwIEBACiAJICogYXJlIERTUCBwdWJsaWMgcGVyaXBoZXJhbHMuCiAJICovCiAJaWYgKGlkID09IE9NQVBfTUNCU1AxIHx8IGlkID09IE9NQVBfTUNCU1AzKSB7Ci0JCW9tYXBfZHNwX3JlcXVlc3RfbWVtKCk7Ci0JCS8qCi0JCSAqIERTUCBleHRlcm5hbCBwZXJpcGhlcmFsIHJlc2V0Ci0JCSAqIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBkc3AgY29kZQotCQkgKi8KLQkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KERTUF9SU1RDVDIpIHwgRFBTX1JTVENUMl9QRVJfRU4gfAotCQkJCURTUF9SU1RDVDJfV0RfUEVSX0VOLCBEU1BfUlNUQ1QyKTsKKwkJaWYgKGRzcF91c2UrKyA9PSAwKSB7CisJCQlhcGlfY2xrID0gY2xrX2dldChOVUxMLCAiYXBpX2NsayIpOworCQkJZHNwX2NsayA9IGNsa19nZXQoTlVMTCwgImRzcF9jbGsiKTsKKwkJCWlmICghSVNfRVJSKGFwaV9jbGspICYmICFJU19FUlIoZHNwX2NsaykpIHsKKwkJCQljbGtfZW5hYmxlKGFwaV9jbGspOworCQkJCWNsa19lbmFibGUoZHNwX2Nsayk7CisKKwkJCQlvbWFwX2RzcF9yZXF1ZXN0X21lbSgpOworCQkJCS8qCisJCQkJICogRFNQIGV4dGVybmFsIHBlcmlwaGVyYWwgcmVzZXQKKwkJCQkgKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gZHNwIGNvZGUKKwkJCQkgKi8KKwkJCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRFNQX1JTVENUMikgfCBEUFNfUlNUQ1QyX1BFUl9FTiB8CisJCQkJCQlEU1BfUlNUQ1QyX1dEX1BFUl9FTiwgRFNQX1JTVENUMik7CisJCQl9CisJCX0KIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXAxX21jYnNwX2ZyZWUodW5zaWduZWQgaW50IGlkKQogewotCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykKLQkJb21hcF9kc3BfcmVsZWFzZV9tZW0oKTsKKwlpZiAoaWQgPT0gT01BUF9NQ0JTUDEgfHwgaWQgPT0gT01BUF9NQ0JTUDMpIHsKKwkJaWYgKC0tZHNwX3VzZSA9PSAwKSB7CisJCQlvbWFwX2RzcF9yZWxlYXNlX21lbSgpOworCQkJaWYgKCFJU19FUlIoYXBpX2NsaykpIHsKKwkJCQljbGtfZGlzYWJsZShhcGlfY2xrKTsKKwkJCQljbGtfcHV0KGFwaV9jbGspOworCQkJfQorCQkJaWYgKCFJU19FUlIoZHNwX2NsaykpIHsKKwkJCQljbGtfZGlzYWJsZShkc3BfY2xrKTsKKwkJCQljbGtfcHV0KGRzcF9jbGspOworCQkJfQorCQl9CisJfQogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3Bfb3BzIG9tYXAxX21jYnNwX29wcyA9IHsKQEAgLTk0LDggKzExNCw2IEBACiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQMVJYLAogCQkudHhfaXJxCQk9IElOVF9NY0JTUDFUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAzLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AyX0JBU0UsCkBAIC0xMTIsOCArMTMwLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AzUlgsCiAJCS50eF9pcnEJCT0gSU5UX01jQlNQM1RYLAogCQkub3BzCQk9ICZvbWFwMV9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDMsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAxNXh4X21jYnNwX3BkYXRhKQpAQCAtMTMxLDggKzE0Nyw2IEBACiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQMVJYLAogCQkudHhfaXJxCQk9IElOVF9NY0JTUDFUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAzLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDE2MTBfTUNCU1AyX0JBU0UsCkBAIC0xNDksOCArMTYzLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AzUlgsCiAJCS50eF9pcnEJCT0gSU5UX01jQlNQM1RYLAogCQkub3BzCQk9ICZvbWFwMV9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDMsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAxNnh4X21jYnNwX3BkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKaW5kZXggMDYyYzkwNS4uNzIxZTBkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCkBAIC01OCw2ICs1OCwyNSBAQAogI2RlZmluZSBPTUFQNzMwX1BJTlNfU1oJCTAKICNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQNzMwICovCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCitzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwODUwX3BpbnNbXSA9IHsKK01VWF9DRkdfODUwKCJFMl84NTBfS0JSMCIsICAgICAgICAxMiwgICAyMSwgICAgMCwgICAyMCwgICAxLCAwKQorTVVYX0NGR184NTAoIko3Xzg1MF9LQlIxIiwgICAgICAgIDEyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRTFfODUwX0tCUjIiLCAgICAgICAgMTIsICAgMjksICAgIDAsICAgMjgsICAgMSwgMCkKK01VWF9DRkdfODUwKCJGM184NTBfS0JSMyIsICAgICAgICAxMywgICAgMSwgICAgMCwgICAgMCwgICAxLCAwKQorTVVYX0NGR184NTAoIkQyXzg1MF9LQlI0IiwgICAgICAgIDEzLCAgICA1LCAgICAwLCAgICA0LCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiQzJfODUwX0tCQzAiLCAgICAgICAgMTMsICAgIDksICAgIDAsICAgIDgsICAgMSwgMCkKK01VWF9DRkdfODUwKCJEM184NTBfS0JDMSIsICAgICAgICAxMywgICAxMywgICAgMCwgICAxMiwgICAxLCAwKQorTVVYX0NGR184NTAoIkU0Xzg1MF9LQkMyIiwgICAgICAgIDEzLCAgIDE3LCAgICAwLCAgIDE2LCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRjRfODUwX0tCQzMiLCAgICAgICAgMTMsICAgMjEsICAgIDAsICAgMjAsICAgMSwgMCkKK01VWF9DRkdfODUwKCJFM184NTBfS0JDNCIsICAgICAgICAxMywgICAyNSwgICAgMCwgICAyNCwgICAxLCAwKQorCitNVVhfQ0ZHXzg1MCgiQUExN184NTBfVVNCX0RNIiwgICAgIDIsICAgMjEsICAgIDAsICAgMjAsICAgMCwgMCkKK01VWF9DRkdfODUwKCJXMTZfODUwX1VTQl9QVV9FTiIsICAgMiwgICAyNSwgICAgMCwgICAyNCwgICAwLCAwKQorTVVYX0NGR184NTAoIlcxN184NTBfVVNCX1ZCVVNJIiwgICAyLCAgIDI5LCAgICAwLCAgIDI4LCAgIDAsIDApCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAxeHh4X3BpbnNbXSA9IHsKIC8qCkBAIC00MTksNiArNDM4LDExIEBACiAJCQlwcmludGsoIiAgICAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKIAkJCSAgICAgICBjZmctPnB1bGxfbmFtZSwgY2ZnLT5wdWxsX3JlZywgcHVsbF9vcmlnLCBwdWxsKTsKIAl9CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJb21hcF9tdXhfcmVnaXN0ZXIob21hcDg1MF9waW5zLCBBUlJBWV9TSVpFKG9tYXA4NTBfcGlucykpOworI2VuZGlmCisKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYX0VSUk9SUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKaW5kZXggMDAwMjA4NC4uODQyMDkwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0xMjEsNiArMTIxLDEzIEBACiAJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLmlycSA9IElOVF83MzBfVUFSVF9NT0RFTV9JUkRBXzI7CiAJfQogCisJaWYgKGNwdV9pc19vbWFwODUwKCkpIHsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0ucmVnc2hpZnQgPSAwOworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS5yZWdzaGlmdCA9IDA7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLmlycSA9IElOVF84NTBfVUFSVF9NT0RFTV8xOworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS5pcnEgPSBJTlRfODUwX1VBUlRfTU9ERU1fSVJEQV8yOworCX0KKwogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7CiAJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLnVhcnRjbGsgPSBPTUFQMTUxMF9CQVNFX0JBVUQgKiAxNjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCAzNzU0Yjc5Li42NGFiMzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC01OCw0ICs1OCwxMiBAQAogCiBjb25maWcgTUFDSF9PTUFQM19QQU5ET1JBCiAJYm9vbCAiT01BUDMgUGFuZG9yYSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCitjb25maWcgTUFDSF9PTUFQXzM0MzBTRFAKKwlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisKK2NvbmZpZyBNQUNIX05PS0lBX1JYNTEKKwlib29sICJOb2tpYSBSWC01MSBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggYmJkMTJiYy4uYTJjM2ZjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gbWVtb3J5Lm8gY29udHJvbC5vIHByY20ubyBjbG9jay5vIG11eC5vIFwKK29iai15IDo9IGlycS5vIGlkLm8gaW8ubyBzZHJjLm8gY29udHJvbC5vIHByY20ubyBjbG9jay5vIG11eC5vIFwKIAkJZGV2aWNlcy5vIHNlcmlhbC5vIGdwbWMubyB0aW1lci1ncC5vIHBvd2VyZG9tYWluLm8gXAogCQljbG9ja2RvbWFpbi5vCiAKQEAgLTE0LDYgKzE0LDEwIEBACiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IHNyYW0yNDN4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gc3JhbTM0eHgubwogCisjIFNNUy9TRFJDCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNkcmMyeHh4Lm8KKyMgb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBzZHJjM3h4eC5vCisKICMgUG93ZXIgTWFuYWdlbWVudAogaWZlcSAoJChDT05GSUdfUE0pLHkpCiBvYmoteQkJCQkJKz0gcG0ubwpAQCAtMzgsNCArNDIsMTIgQEAKIAkJCQkJICAgbW1jLXR3bDQwMzAubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSkJKz0gYm9hcmQtb21hcDNwYW5kb3JhLm8gXAogCQkJCQkgICBtbWMtdHdsNDAzMC5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFApCQkrPSBib2FyZC0zNDMwc2RwLm8gXAorCQkJCQkgICBtbWMtdHdsNDAzMC5vCiAKK29iai0kKENPTkZJR19NQUNIX05PS0lBX1JYNTEpCQkrPSBib2FyZC1yeDUxLm8gXAorCQkJCQkgICBib2FyZC1yeDUxLXBlcmlwaGVyYWxzLm8gXAorIyBQbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdCBjb2RlCitpZmVxICgkKENPTkZJR19VU0JfTVVTQl9TT0MpLHkpCitvYmoteQkJCQkJKz0gdXNiLW11c2IubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKaW5kZXggODNmYTM3Mi4uMjIxNDM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKQEAgLTM1LDEyICszNSwxNiBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCisjZGVmaW5lIFNEUDI0MzBfQ1MwX0JBU0UJMHgwNDAwMDAwMAogI2RlZmluZQlTRFAyNDMwX0ZMQVNIX0NTCTAKICNkZWZpbmUJU0RQMjQzMF9TTUM5MVhfQ1MJNQogCisjZGVmaW5lIFNEUDI0MzBfRVRIUl9HUElPX0lSUQkJMTQ5CisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHAyNDMwX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTAyLDggKzEwNiw4IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSBPTUFQX0dQSU9fSVJRKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpLAotCQkuZW5kCT0gT01BUF9HUElPX0lSUShPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSwKKwkJLnN0YXJ0CT0gT01BUF9HUElPX0lSUShTRFAyNDMwX0VUSFJfR1BJT19JUlEpLAorCQkuZW5kCT0gT01BUF9HUElPX0lSUShTRFAyNDMwX0VUSFJfR1BJT19JUlEpLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAogCX0sCiB9OwpAQCAtMTcwLDEzICsxNzQsMTMgQEAKIAlzZHAyNDMwX3NtYzkxeF9yZXNvdXJjZXNbMF0uZW5kID0gY3NfbWVtX2Jhc2UgKyAweDMwZjsKIAl1ZGVsYXkoMTAwKTsKIAotCWlmIChncGlvX3JlcXVlc3QoT01BUDI0WFhfRVRIUl9HUElPX0lSUSwgIlNNQzkxeCBpcnEiKSA8IDApIHsKKwlpZiAoZ3Bpb19yZXF1ZXN0KFNEUDI0MzBfRVRIUl9HUElPX0lSUSwgIlNNQzkxeCBpcnEiKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCi0JCQlPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKKwkJCVNEUDI0MzBfRVRIUl9HUElPX0lSUSk7CiAJCWdwbWNfY3NfZnJlZShldGhfY3MpOwogCQlnb3RvIG91dDsKIAl9Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoT01BUDI0WFhfRVRIUl9HUElPX0lSUSk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0RQMjQzMF9FVEhSX0dQSU9fSVJRKTsKIAogb3V0OgogCWNsa19kaXNhYmxlKGdwbWNfZmNrKTsKQEAgLTE4NSw3ICsxODksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8yNDMwc2RwX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIAlzZHAyNDMwX2luaXRfc21jOTF4KCk7CkBAIC0yNTEsNiArMjU1LDcgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHAyNDMwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwl1c2JfbXVzYl9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzI0MzBzZHBfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTI3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtMCwwICsxLDU0MiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzCisgKgorICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIEluaXRpYWwgY29kZTogU3llZCBNb2hhbW1lZCBLaGFzaW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKworI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgorI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CisKKyNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorCisjZGVmaW5lIENPTkZJR19ESVNBQkxFX0hGQ0xLIDEKKworI2RlZmluZSBTRFAzNDMwX0VUSFJfR1BJT19JUlFfU0RQVjEJMjkKKyNkZWZpbmUgU0RQMzQzMF9FVEhSX0dQSU9fSVJRX1NEUFYyCTYKKyNkZWZpbmUgU0RQMzQzMF9TTUM5MVhfQ1MJCTMKKworI2RlZmluZSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYxCTMKKyNkZWZpbmUgU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMgkyCisKKyNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFRElDQVRFRAkweDAzCisjZGVmaW5lIEVOQUJMRV9WQVVYM19ERVZfR1JQCTB4MjAKKworI2RlZmluZSBUV0w0MDMwX01TRUNVUkVfR1BJTyAyMgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNkcDM0MzBfc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDAsCisJCS5lbmQJPSAwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHAzNDMwX3NtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzZHAzNDMwX3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNkcDM0MzBfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgc2RwMzQzMF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0xFRlQpLAorCUtFWSgwLCAxLCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBLRVlfQSksCisJS0VZKDAsIDMsIEtFWV9CKSwKKwlLRVkoMCwgNCwgS0VZX0MpLAorCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDEsIDEsIEtFWV9VUCksCisJS0VZKDEsIDIsIEtFWV9FKSwKKwlLRVkoMSwgMywgS0VZX0YpLAorCUtFWSgxLCA0LCBLRVlfRyksCisJS0VZKDIsIDAsIEtFWV9FTlRFUiksCisJS0VZKDIsIDEsIEtFWV9JKSwKKwlLRVkoMiwgMiwgS0VZX0opLAorCUtFWSgyLCAzLCBLRVlfSyksCisJS0VZKDIsIDQsIEtFWV8zKSwKKwlLRVkoMywgMCwgS0VZX00pLAorCUtFWSgzLCAxLCBLRVlfTiksCisJS0VZKDMsIDIsIEtFWV9PKSwKKwlLRVkoMywgMywgS0VZX1ApLAorCUtFWSgzLCA0LCBLRVlfUSksCisJS0VZKDQsIDAsIEtFWV9SKSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfVCksCisJS0VZKDQsIDMsIEtFWV9VKSwKKwlLRVkoNCwgNCwgS0VZX0QpLAorCUtFWSg1LCAwLCBLRVlfViksCisJS0VZKDUsIDEsIEtFWV9XKSwKKwlLRVkoNSwgMiwgS0VZX0wpLAorCUtFWSg1LCAzLCBLRVlfUyksCisJS0VZKDUsIDQsIEtFWV9IKSwKKwkwCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgc2RwMzQzMF9rcF9kYXRhID0geworCS5yb3dzCQk9IDUsCisJLmNvbHMJCT0gNiwKKwkua2V5bWFwCQk9IHNkcDM0MzBfa2V5bWFwLAorCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShzZHAzNDMwX2tleW1hcCksCisJLnJlcAkJPSAxLAorfTsKKworc3RhdGljIGludCB0c19ncGlvOwkvKiBOZWVkZWQgZm9yIGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGUgKi8KKworLyoqCisgKiBAYnJpZWYgYWRzNzg0Nl9kZXZfaW5pdCA6IFJlcXVlc3RzICYgc2V0cyBHUElPIGxpbmUgZm9yIHBlbi1pcnEKKyAqCisgKiBAcmV0dXJuIC0gdm9pZC4gSWYgcmVxdWVzdCBncGlvIGZhaWxzIHRoZW4gRmxhZyBLRVJOX0VSUi4KKyAqLworc3RhdGljIHZvaWQgYWRzNzg0Nl9kZXZfaW5pdCh2b2lkKQoreworCWlmIChncGlvX3JlcXVlc3QodHNfZ3BpbywgIkFEUzc4NDYgcGVuZG93biIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBhZHM3NDYgcGVuIGRvd24gR1BJT1xuIik7CisJCXJldHVybjsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dCh0c19ncGlvKTsKKworCW9tYXBfc2V0X2dwaW9fZGVib3VuY2UodHNfZ3BpbywgMSk7CisJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKHRzX2dwaW8sIDB4YSk7Cit9CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUodHNfZ3Bpbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIHRzYzIwNDZfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmdldF9wZW5kb3duX3N0YXRlCT0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSwKKwkua2VlcF92cmVmX29uCQk9IDEsCit9OworCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2aWNlX2NvbmZpZyB0c2MyMDQ2X21jc3BpX2NvbmZpZyA9IHsKKwkudHVyYm9fbW9kZQk9IDAsCisJLnNpbmdsZV9jaGFubmVsCT0gMSwJLyogMDogc2xhdmUsIDE6IG1hc3RlciAqLworfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzZHAzNDMwX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS8qCisJCSAqIFRTQzIwNDYgb3BlcmF0ZXMgYXQgYSBtYXggZnJlcWVuY3kgb2YgMk1Ieiwgc28KKwkJICogb3BlcmF0ZSBzbGlnaHRseSBiZWxvdyBhdCAxLjVNSHoKKwkJICovCisJCS5tb2RhbGlhcwkJPSAiYWRzNzg0NiIsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkubWF4X3NwZWVkX2h6CQk9IDE1MDAwMDAsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmdHNjMjA0Nl9tY3NwaV9jb25maWcsCisJCS5pcnEJCQk9IDAsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ0c2MyMDQ2X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMzQzMF9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJzZHAyNDMwX2xjZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdmRhY19zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmRhYyIsCisJLmRldgkJPSAmc2RwMzQzMF9sY2RfZGV2aWNlLmRldiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3Zkdmlfc3VwcGx5ID0geworCS5zdXBwbHkJCT0gInZkdmkiLAorCS5kZXYJCT0gJnNkcDM0MzBfbGNkX2RldmljZS5kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2RwMzQzMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2RwMzQzMF9zbWM5MXhfZGV2aWNlLAorCSZzZHAzNDMwX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNkcDM0MzBfaW5pdF9zbWM5MXgodm9pZCkKK3sKKwlpbnQgZXRoX2NzOworCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7CisJaW50IGV0aF9ncGlvID0gMDsKKworCWV0aF9jcyA9IFNEUDM0MzBfU01DOTFYX0NTOworCisJaWYgKGdwbWNfY3NfcmVxdWVzdChldGhfY3MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUE1DIG1lbSBmb3Igc21jOTF4XG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNkcDM0MzBfc21jOTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgzMDA7CisJc2RwMzQzMF9zbWM5MXhfcmVzb3VyY2VzWzBdLmVuZCA9IGNzX21lbV9iYXNlICsgMHgzMGY7CisJdWRlbGF5KDEwMCk7CisKKwlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJZXRoX2dwaW8gPSBTRFAzNDMwX0VUSFJfR1BJT19JUlFfU0RQVjI7CisJZWxzZQorCQlldGhfZ3BpbyA9IFNEUDM0MzBfRVRIUl9HUElPX0lSUV9TRFBWMTsKKworCXNkcDM0MzBfc21jOTF4X3Jlc291cmNlc1sxXS5zdGFydCA9IGdwaW9fdG9faXJxKGV0aF9ncGlvKTsKKworCWlmIChncGlvX3JlcXVlc3QoZXRoX2dwaW8sICJTTUM5MXggaXJxIikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MXggSVJRXG4iLAorCQkJZXRoX2dwaW8pOworCQlyZXR1cm47CisJfQorCWdwaW9fZGlyZWN0aW9uX2lucHV0KGV0aF9ncGlvKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9pbml0X2lycSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworCXNkcDM0MzBfaW5pdF9zbWM5MXgoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHNkcDM0MzBfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cwk9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgc2RwMzQzMF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBzZHAzNDMwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJeyBPTUFQX1RBR19VQVJULAkmc2RwMzQzMF91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJnNkcDM0MzBfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIGludCBzZHAzNDMwX2JhdHRfdGFibGVbXSA9IHsKKy8qIDAgQyovCiszMDgwMCwgMjk1MDAsIDI4MzAwLCAyNzEwMCwKKzI2MDAwLCAyNDkwMCwgMjM5MDAsIDIyOTAwLCAyMjAwMCwgMjExMDAsIDIwMzAwLCAxOTQwMCwgMTg3MDAsIDE3OTAwLAorMTcyMDAsIDE2NTAwLCAxNTkwMCwgMTUzMDAsIDE0NzAwLCAxNDEwMCwgMTM2MDAsIDEzMTAwLCAxMjYwMCwgMTIxMDAsCisxMTYwMCwgMTEyMDAsIDEwODAwLCAxMDQwMCwgMTAwMDAsIDk2MzAsICAgOTI4MCwgICA4OTUwLCAgIDg2MjAsICAgODMxMCwKKzgwMjAsICAgNzczMCwgICA3NDYwLCAgIDcyMDAsICAgNjk1MCwgICA2NzEwLCAgIDY0NzAsICAgNjI1MCwgICA2MDQwLCAgIDU4MzAsCis1NjQwLCAgIDU0NTAsICAgNTI2MCwgICA1MDkwLCAgIDQ5MjAsICAgNDc2MCwgICA0NjAwLCAgIDQ0NTAsICAgNDMxMCwgICA0MTcwLAorNDA0MCwgICAzOTEwLCAgIDM3OTAsICAgMzY3MCwgICAzNTUwCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfYmNpX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF9iY2lfZGF0YSA9IHsKKwkuYmF0dGVyeV90bXBfdGJsCT0gc2RwMzQzMF9iYXR0X3RhYmxlLAorCS50YmxzaXplCQk9IEFSUkFZX1NJWkUoc2RwMzQzMF9iYXR0X3RhYmxlKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworCXsKKwkJLm1tYwkJPSAxLAorCQkvKiA4IGJpdHMgKGRlZmF1bHQpIHJlcXVpcmVzIFM2LjMgPT0gT04sCisJCSAqIHNvIHRoZSBTSU0gY2FyZCBpc24ndCB1c2VkOyBlbHNlIDQgYml0cy4KKwkJICovCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb193cAk9IDQsCisJfSwKKwl7CisJCS5tbWMJCT0gMiwKKwkJLndpcmVzCQk9IDgsCisJCS5ncGlvX3dwCT0gNywKKwl9LAorCXt9CS8qIFRlcm1pbmF0b3IgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZtbWMxX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tYyIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92c2ltX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tY19hdXgiLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdm1tYzJfc3VwcGx5ID0geworCS5zdXBwbHkJCQk9ICJ2bW1jIiwKK307CisKK3N0YXRpYyBpbnQgc2RwMzQzMF90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQoreworCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSwKKwkgKiBncGlvICsgMSBpcyAibW1jMV9jZCIgKGlucHV0L0lSUSkKKwkgKi8KKwltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOworCW1tY1sxXS5ncGlvX2NkID0gZ3BpbyArIDE7CisJdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCisJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAuLi4gd2UgImtub3ciIHRoZQorCSAqIHJlZ3VsYXRvcnMgd2lsbCBiZSBzZXQgdXAgb25seSAqYWZ0ZXIqIHdlIHJldHVybi4KKwkgKi8KKwlzZHAzNDMwX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OworCXNkcDM0MzBfdnNpbV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKKwlzZHAzNDMwX3ZtbWMyX3N1cHBseS5kZXYgPSBtbWNbMV0uZGV2OworCisJLyogZ3BpbyArIDcgaXMgInN1Yl9sY2RfZW5fYmtsIiAob3V0cHV0L1BXTTEpICovCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyA3LCAic3ViX2xjZF9lbl9ia2wiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDcsIDApOworCisJLyogZ3BpbyArIDE1IGlzICJzdWJfbGNkX25SU1QiIChvdXRwdXQpICovCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyAxNSwgInN1Yl9sY2RfblJTVCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgMTUsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF9ncGlvX2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IE9NQVBfTUFYX0dQSU9fTElORVMsCisJLmlycV9iYXNlCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAorCS5pcnFfZW5kCT0gVFdMNDAzMF9HUElPX0lSUV9FTkQsCisJLnB1bGxkb3ducwk9IEJJVCgyKSB8IEJJVCg2KSB8IEJJVCg4KSB8IEJJVCgxMykKKwkJCQl8IEJJVCgxNikgfCBCSVQoMTcpLAorCS5zZXR1cAkJPSBzZHAzNDMwX3R3bF9ncGlvX3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIHNkcDM0MzBfdXNiX2RhdGEgPSB7CisJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF9tYWRjX2RhdGEgPSB7CisJLmlycV9saW5lCT0gMSwKK307CisKKy8qCisgKiBBcHBseSBhbGwgdGhlIGZpeGVkIHZvbHRhZ2VzIHNpbmNlIG1vc3QgdmVyc2lvbnMgb2YgVS1Cb290CisgKiBkb24ndCBib3RoZXIgd2l0aCB0aGF0IGluaXRpYWxpemF0aW9uLgorICovCisKKy8qIFZBVVgxIGZvciBtYWluYm9hcmQgKGlyZGEgYW5kIHN1Yi1sY2QpICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4MSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDI4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDI4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworLyogVkFVWDIgZm9yIGNhbWVyYSBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXgyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCisvKiBWQVVYMyBmb3IgTENEIGJvYXJkICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4MyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDI4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDI4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworLyogVkFVWDQgZm9yIE9NQVAgVkREX0NTSTIgKGNhbWVyYSkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXg0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCisvKiBWTU1DMSBmb3IgT01BUCBWRERfTU1DMSAoaS9vKSBhbmQgTU1DMSBjYXJkICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92bW1jMSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4NTAwMDAsCisJCS5tYXhfdVYJCQk9IDMxNTAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnNkcDM0MzBfdm1tYzFfc3VwcGx5LAorfTsKKworLyogVk1NQzIgZm9yIE1NQzIgY2FyZCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdm1tYzIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODUwMDAwLAorCQkubWF4X3VWCQkJPSAxODUwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92bW1jMl9zdXBwbHksCit9OworCisvKiBWU0lNIGZvciBPTUFQIFZERF9NTUMxQSAoaS9vIGZvciBEQVQ0Li5EQVQ3KSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdnNpbSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDMwMDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnNkcDM0MzBfdnNpbV9zdXBwbHksCit9OworCisvKiBWREFDIGZvciBEU1MgZHJpdmluZyBTLVZpZGVvICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92ZGFjID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnNkcDM0MzBfdmRhY19zdXBwbHksCit9OworCisvKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92cGxsMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVkRWSSIsCisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnNkcDM0MzBfdmR2aV9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCT0gVFdMNDAzMF9JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDQwMzBfSVJRX0VORCwKKworCS8qIHBsYXRmb3JtX2RhdGEgZm9yIGNoaWxkcmVuIGdvZXMgaGVyZSAqLworCS5iY2kJCT0gJnNkcDM0MzBfYmNpX2RhdGEsCisJLmdwaW8JCT0gJnNkcDM0MzBfZ3Bpb19kYXRhLAorCS5tYWRjCQk9ICZzZHAzNDMwX21hZGNfZGF0YSwKKwkua2V5cGFkCQk9ICZzZHAzNDMwX2twX2RhdGEsCisJLnVzYgkJPSAmc2RwMzQzMF91c2JfZGF0YSwKKworCS52YXV4MQkJPSAmc2RwMzQzMF92YXV4MSwKKwkudmF1eDIJCT0gJnNkcDM0MzBfdmF1eDIsCisJLnZhdXgzCQk9ICZzZHAzNDMwX3ZhdXgzLAorCS52YXV4NAkJPSAmc2RwMzQzMF92YXV4NCwKKwkudm1tYzEJCT0gJnNkcDM0MzBfdm1tYzEsCisJLnZtbWMyCQk9ICZzZHAzNDMwX3ZtbWMyLAorCS52c2ltCQk9ICZzZHAzNDMwX3ZzaW0sCisJLnZkYWMJCT0gJnNkcDM0MzBfdmRhYywKKwkudnBsbDIJCT0gJnNkcDM0MzBfdnBsbDIsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgc2RwMzQzMF9pMmNfYm9hcmRpbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHdsNDAzMCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2RwMzQzMF90d2xkYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMzQzMF9pMmNfaW5pdCh2b2lkKQoreworCS8qIGkyYzEgZm9yIFBNSUMgb25seSAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBzZHAzNDMwX2kyY19ib2FyZGluZm8sCisJCQlBUlJBWV9TSVpFKHNkcDM0MzBfaTJjX2JvYXJkaW5mbykpOworCS8qIGkyYzIgb24gY2FtZXJhIGNvbm5lY3RvciAoZm9yIHNlbnNvciBjb250cm9sKSBhbmQgb3B0aW9uYWwgaXNwMTMwMSAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCA0MDAsIE5VTEwsIDApOworCS8qIGkyYzMgb24gZGlzcGxheSBjb25uZWN0b3IgKGZvciBEVkksIHRmcDQxMCkgKi8KKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9pbml0KHZvaWQpCit7CisJb21hcDM0MzBfaTJjX2luaXQoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHAzNDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwMzQzMF9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBzZHAzNDMwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHAzNDMwX2NvbmZpZyk7CisJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApCisJCXRzX2dwaW8gPSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYyOworCWVsc2UKKwkJdHNfZ3BpbyA9IFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjE7CisJc2RwMzQzMF9zcGlfYm9hcmRfaW5mb1swXS5pcnEgPSBncGlvX3RvX2lycSh0c19ncGlvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzZHAzNDMwX3NwaV9ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoc2RwMzQzMF9zcGlfYm9hcmRfaW5mbykpOworCWFkczc4NDZfZGV2X2luaXQoKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJdXNiX211c2JfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKKwlvbWFwMl9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUF8zNDMwU0RQLCAiT01BUDM0MzAgMzQzMFNEUCBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogU3llZCBLaGFzaW0gLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfMzQzMHNkcF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcF8zNDMwc2RwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwXzM0MzBzZHBfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwppbmRleCAwYTdiMjRiYS4uMDZkZmJhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogI2RlZmluZSBBUE9MTE9OX0ZMQVNIX0NTCTAKICNkZWZpbmUgQVBPTExPTl9FVEhfQ1MJCTEKKyNkZWZpbmUgQVBPTExPTl9FVEhSX0dQSU9fSVJRCTc0CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhcG9sbG9uX3BhcnRpdGlvbnNbXSA9IHsKIAl7CkBAIC0yNDksNyArMjUwLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfYXBvbGxvbl9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiAJYXBvbGxvbl9pbml0X3NtYzkxeCgpOwpAQCAtMjcyLDcgKzI3Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGFwb2xsb25fY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VQVJULAkmYXBvbGxvbl91YXJ0X2NvbmZpZyB9LAotCXsgT01BUF9UQUdfVVNCLAkJJmFwb2xsb25fdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTENELAkJJmFwb2xsb25fbGNkX2NvbmZpZyB9LAogfTsKIApAQCAtMjk5LDYgKzI5OSw3IEBACiAJb21hcF9jZmdfcmVnKFAyMV8yNDJYX0dQSU8xMik7CiAJZ3Bpb19yZXF1ZXN0KDEyLCAiVVNCIHN1c3BlbmQiKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTIsIDApOworCW9tYXBfdXNiX2luaXQoJmFwb2xsb25fdXNiX2NvbmZpZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwppbmRleCAzYjM0YzIwLi4zNDkyMTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwppbmRleCA1ZTliMTQ2Li5hMDI2N2E5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCkBAIC00Nyw2ICs0Nyw4IEBACiAjZGVmaW5lIEg0X0ZMQVNIX0NTCTAKICNkZWZpbmUgSDRfU01DOTFYX0NTCTEKIAorI2RlZmluZSBINF9FVEhSX0dQSU9fSVJRCQk5MgorCiBzdGF0aWMgdW5zaWduZWQgaW50IHJvd19ncGlvc1s2XSA9IHsgODgsIDg5LCAxMjQsIDExLCA2LCA5NiB9Owogc3RhdGljIHVuc2lnbmVkIGludCBjb2xfZ3Bpb3NbN10gPSB7IDkwLCA5MSwgMTAwLCAzNiwgMTIsIDk3LCA5OCB9OwogCkBAIC0zNDEsNyArMzQzLDcgQEAKIAl1ZGVsYXkoMTAwKTsKIAogCW9tYXBfY2ZnX3JlZyhNMTVfMjRYWF9HUElPOTIpOwotCWlmIChkZWJ1Z19jYXJkX2luaXQoY3NfbWVtX2Jhc2UsIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpIDwgMCkKKwlpZiAoZGVidWdfY2FyZF9pbml0KGNzX21lbV9iYXNlLCBINF9FVEhSX0dQSU9fSVJRKSA8IDApCiAJCWdwbWNfY3NfZnJlZShldGhfY3MpOwogCiBvdXQ6CkBAIC0zNjMsNyArMzY1LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogCWg0X2luaXRfZmxhc2goKTsKQEAgLTM3Nyw2ICszNzksMzkgQEAKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIGg0X3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKyNpZmRlZglDT05GSUdfTUFDSF9PTUFQMl9INF9VU0IxCisJLyogTk9URTogIHVzYjEgY291bGQgYWxzbyBiZSB1c2VkIHdpdGggMyB3aXJlIHNpZ25hbGluZyAqLworCS5waW5zWzFdCT0gNCwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX01BQ0hfT01BUF9INF9PVEcKKwkvKiBTMS4xMCBPTiAtLSBVU0IgT1RHIHBvcnQKKwkgKiB1c2IwIHN3aXRjaGVkIHRvIE1pbmktQUIgcG9ydCBhbmQgaXNwMTMwMSB0cmFuc2NlaXZlcjsKKwkgKiBTMi5QT1MzID0gT0ZGLCBTMi5QT1M0ID0gT04gLi4uIHRvIGFsbG93IGJhdHRlcnkgY2hhcmdpbmcKKwkgKi8KKwkub3RnCQk9IDEsCisJLnBpbnNbMF0JPSA0LAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKKwkvKiB1c2UgT1RHIGNhYmxlLCBvciBzdGFuZGFyZCBBLXRvLU1pbmlCICovCisJLmhtY19tb2RlCT0gMHgxNCwJLyogMDpkZXYvb3RnIDE6aG9zdCAyOmRpc2FibGUgKi8KKyNlbGlmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKKwkvKiB1c2UgT1RHIGNhYmxlLCBvciBOT05TVEFOREFSRCAoQi10by1NaW5pQikgKi8KKwkuaG1jX21vZGUJPSAweDExLAkvKiAwOmhvc3QgMTpob3N0IDI6ZGlzYWJsZSAqLworI2VuZGlmCS8qIFhYICovCisKKyNlbHNlCisJLyogUzEuMTAgT0ZGIC0tIHVzYiAiZG93bmxvYWQgcG9ydCIKKwkgKiB1c2IwIHN3aXRjaGVkIHRvIE1pbmktQiBwb3J0IGFuZCBpc3AxMTA1IHRyYW5zY2VpdmVyOworCSAqIFMyLlBPUzMgPSBPTiwgUzIuUE9TNCA9IE9GRiAuLi4gdG8gZW5hYmxlIGJhdHRlcnkgY2hhcmdpbmcKKwkgKi8KKwkucmVnaXN0ZXJfZGV2CT0gMSwKKwkucGluc1swXQk9IDMsCisvKgkuaG1jX21vZGUJPSAweDE0LCovCS8qIDA6ZGV2IDE6aG9zdCAyOmRpc2FibGUgKi8KKwkuaG1jX21vZGUJPSAweDAwLAkJLyogMDpkZXZ8b3RnIDE6ZGlzYWJsZSAyOmRpc2FibGUgKi8KKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDRfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VQVJULAkmaDRfdWFydF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJCSZoNF9sY2RfY29uZmlnIH0sCkBAIC00MjgsNiArNDYzLDcgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoNF9kZXZpY2VzLCBBUlJBWV9TSVpFKGg0X2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGg0X2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoNF9jb25maWcpOworCW9tYXBfdXNiX2luaXQoJmg0X3VzYl9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggNjAzMWUxNy4uZTA5NmY3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0yMiwzMSArMjIsMzQgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLWxkcC5oPgogI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCi0jZGVmaW5lIFNEUDM0MzBfU01DOTFYX0NTCTMKKyNkZWZpbmUgTERQX1NNQzkxMVhfQ1MJCTEKKyNkZWZpbmUgTERQX1NNQzkxMVhfR1BJTwkxNTIKKyNkZWZpbmUgREVCVUdfQkFTRQkJMHgwODAwMDAwMAorI2RlZmluZSBMRFBfRVRIUl9TVEFSVAkJREVCVUdfQkFTRQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxkcF9zbWM5MTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gT01BUDM0WFhfRVRIUl9TVEFSVCwKLQkJLmVuZAk9IE9NQVAzNFhYX0VUSFJfU1RBUlQgKyBTWl80SywKKwkJLnN0YXJ0CT0gTERQX0VUSFJfU1RBUlQsCisJCS5lbmQJPSBMRFBfRVRIUl9TVEFSVCArIFNaXzRLLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTk4LDcgKzEwMSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiAJbGRwX2luaXRfc21jOTExeCgpOwpAQCAtMTYyLDYgKzE2NSw3IEBACiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobGRwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwl1c2JfbXVzYl9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwppbmRleCBlMzljZDJjLi43NDQ3NDBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIApAQCAtMTc1LDkgKzE3Niw2IEBACiB7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIGJlYWdsZV9pMmNfYm9hcmRpbmZvLAogCQkJQVJSQVlfU0laRShiZWFnbGVfaTJjX2JvYXJkaW5mbykpOwotI2lmZGVmIENPTkZJR19JMkMyX09NQVBfQkVBR0xFCi0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7Ci0jZW5kaWYKIAkvKiBCdXMgMyBpcyBhdHRhY2hlZCB0byB0aGUgRFZJIHBvcnQgd2hlcmUgZGV2aWNlcyBsaWtlIHRoZSBwaWNvIERMUAogCSAqIHByb2plY3RvciBkb24ndCB3b3JrIHJlbGlhYmx5IHdpdGggNDAwa0h6ICovCiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDEwMCwgTlVMTCwgMCk7CkBAIC0xODYsNyArMTg0LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiB9CkBAIC0zMTYsNiArMzE0LDcgQEAKIAkvKiBSRVZJU0lUIGxlYXZlIERWSSBwb3dlcmVkIGRvd24gdW50aWwgaXQncyBuZWVkZWQgLi4uICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDE3MCwgdHJ1ZSk7CiAKKwl1c2JfbXVzYl9pbml0KCk7CiAJb21hcDNiZWFnbGVfZmxhc2hfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwppbmRleCBiMzE5NjEwLi40MDJmMDljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC01Myw2ICs1NCwxMyBAQAogCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCiAJCS5ncGlvX3dwCT0gMTI3LAogCQkuZXh0X2Nsb2NrCT0gMSwKKwkJLnRyYW5zY2VpdmVyCT0gdHJ1ZSwKKwl9LAorCXsKKwkJLm1tYwkJPSAzLAorCQkud2lyZXMJCT0gNCwKKwkJLmdwaW9fY2QJPSAtRUlOVkFMLAorCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJfSwKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwpAQCAtMTEwLDcgKzExOCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpAQCAtMTkzLDYgKzIwMSw3IEBACiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ob21hcDNwYW5kb3JhX3NwaV9ib2FyZF9pbmZvLAogCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfc3BpX2JvYXJkX2luZm8pKTsKIAlvbWFwM3BhbmRvcmFfYWRzNzg0Nl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNwYW5kb3JhX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDgyYjNkYzUuLmIzZjZlOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTM3LDIwICszNyw4NSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW92ZXJvLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfWEdBVEUJMTUKKyNkZWZpbmUgT1ZFUk9fR1BJT19XMldfTlJFU0VUCTE2CisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfTlJFU0VUCTE2NAorI2RlZmluZSBPVkVST19HUElPX1VTQkhfQ1BFTgkxNjgKKyNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX05SRVNFVAkxODMKKwogI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUgU1pfMTI4SwogI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKIAorI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKworI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZpY2VfY29uZmlnIGFkczc4NDZfbWNzcGlfY29uZmlnID0geworCS50dXJib19tb2RlCT0gMCwKKwkuc2luZ2xlX2NoYW5uZWwJPSAxLAkvKiAwOiBzbGF2ZSwgMTogbWFzdGVyICovCit9OworCitzdGF0aWMgaW50IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKE9WRVJPX0dQSU9fUEVORE9XTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIGFkczc4NDZfY29uZmlnID0geworCS54X21heAkJCT0gMHgwZmZmLAorCS55X21heAkJCT0gMHgwZmZmLAorCS54X3BsYXRlX29obXMJCT0gMTgwLAorCS5wcmVzc3VyZV9tYXgJCT0gMjU1LAorCS5kZWJvdW5jZV9tYXgJCT0gMTAsCisJLmRlYm91bmNlX3RvbAkJPSAzLAorCS5kZWJvdW5jZV9yZXAJCT0gMSwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlLAorCS5rZWVwX3ZyZWZfb24JCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gb3Zlcm9fc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJhZHM3ODQ2IiwKKwkJLmJ1c19udW0JCT0gMSwKKwkJLmNoaXBfc2VsZWN0CQk9IDAsCisJCS5tYXhfc3BlZWRfaHoJCT0gMTUwMDAwMCwKKwkJLmNvbnRyb2xsZXJfZGF0YQk9ICZhZHM3ODQ2X21jc3BpX2NvbmZpZywKKwkJLmlycQkJCT0gT01BUF9HUElPX0lSUShPVkVST19HUElPX1BFTkRPV04pLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmYWRzNzg0Nl9jb25maWcsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2Fkczc4NDZfaW5pdCh2b2lkKQoreworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fUEVORE9XTiwgIkFEUzc4NDZfUEVORE9XTiIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9pbnB1dChPVkVST19HUElPX1BFTkRPV04pID09IDApKSB7CisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fUEVORE9XTiwgMCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIEFEUzc4NDZfUEVORE9XTlxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhvdmVyb19zcGlfYm9hcmRfaW5mbywKKwkJCUFSUkFZX1NJWkUob3Zlcm9fc3BpX2JvYXJkX2luZm8pKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgb3Zlcm9fYWRzNzg0Nl9pbml0KHZvaWQpIHsgcmV0dXJuOyB9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG92ZXJvX25hbmRfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLApAQCAtMTc0LDcgKzIzOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiB9CkBAIC0yMDksNiArMjc0LDcgQEAKIAkJLndpcmVzCQk9IDQsCiAJCS5ncGlvX2NkCT0gLUVJTlZBTCwKIAkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCQkudHJhbnNjZWl2ZXIJPSB0cnVlLAogCX0sCiAJe30JLyogVGVybWluYXRvciAqLwogfTsKQEAgLTIyMiw2ICsyODgsOCBAQAogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CiAJb3Zlcm9fZmxhc2hfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoKTsKKwlvdmVyb19hZHM3ODQ2X2luaXQoKTsKIAogCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwKIAkJCSAgIk9WRVJPX0dQSU9fVzJXX05SRVNFVCIpID09IDApICYmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzgxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1mbGFzaC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgorCisjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKworCisjZGVmaW5lIFNNQzkxWF9DUwkJCTEKKyNkZWZpbmUgU01DOTFYX0dQSU9fSVJRCQkJNTQKKyNkZWZpbmUgU01DOTFYX0dQSU9fUkVTRVQJCTE2NAorI2RlZmluZSBTTUM5MVhfR1BJT19QV1JEV04JCTg2CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugcng1MV9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByeDUxX3NtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyeDUxX3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJ4NTFfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgcng1MV9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1EpLAorCUtFWSgwLCAxLCBLRVlfVyksCisJS0VZKDAsIDIsIEtFWV9FKSwKKwlLRVkoMCwgMywgS0VZX1IpLAorCUtFWSgwLCA0LCBLRVlfVCksCisJS0VZKDAsIDUsIEtFWV9ZKSwKKwlLRVkoMCwgNiwgS0VZX1UpLAorCUtFWSgwLCA3LCBLRVlfSSksCisJS0VZKDEsIDAsIEtFWV9PKSwKKwlLRVkoMSwgMSwgS0VZX0QpLAorCUtFWSgxLCAyLCBLRVlfRE9UKSwKKwlLRVkoMSwgMywgS0VZX1YpLAorCUtFWSgxLCA0LCBLRVlfRE9XTiksCisJS0VZKDIsIDAsIEtFWV9QKSwKKwlLRVkoMiwgMSwgS0VZX0YpLAorCUtFWSgyLCAyLCBLRVlfVVApLAorCUtFWSgyLCAzLCBLRVlfQiksCisJS0VZKDIsIDQsIEtFWV9SSUdIVCksCisJS0VZKDMsIDAsIEtFWV9DT01NQSksCisJS0VZKDMsIDEsIEtFWV9HKSwKKwlLRVkoMywgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMywgMywgS0VZX04pLAorCUtFWSg0LCAwLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNCwgMSwgS0VZX0gpLAorCUtFWSg0LCAzLCBLRVlfTSksCisJS0VZKDQsIDQsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDUsIDEsIEtFWV9KKSwKKwlLRVkoNSwgMiwgS0VZX1opLAorCUtFWSg1LCAzLCBLRVlfU1BBQ0UpLAorCUtFWSg1LCA0LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNiwgMCwgS0VZX0EpLAorCUtFWSg2LCAxLCBLRVlfSyksCisJS0VZKDYsIDIsIEtFWV9YKSwKKwlLRVkoNiwgMywgS0VZX1NQQUNFKSwKKwlLRVkoNiwgNCwgS0VZX0ZOKSwKKwlLRVkoNywgMCwgS0VZX1MpLAorCUtFWSg3LCAxLCBLRVlfTCksCisJS0VZKDcsIDIsIEtFWV9DKSwKKwlLRVkoNywgMywgS0VZX0xFRlQpLAorCUtFWSgweGZmLCAwLCBLRVlfRjYpLAorCUtFWSgweGZmLCAxLCBLRVlfRjcpLAorCUtFWSgweGZmLCAyLCBLRVlfRjgpLAorCUtFWSgweGZmLCA0LCBLRVlfRjkpLAorCUtFWSgweGZmLCA1LCBLRVlfRjEwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSByeDUxX2twX2RhdGEgPSB7CisJLnJvd3MJCT0gOCwKKwkuY29scwkJPSA4LAorCS5rZXltYXAJCT0gcng1MV9rZXltYXAsCisJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHJ4NTFfa2V5bWFwKSwKKwkucmVwCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcng1MV9wZXJpcGhlcmFsc19kZXZpY2VzW10gPSB7CisJJnJ4NTFfc21jOTF4X2RldmljZSwKK307CisKKy8qCisgKiBUaW1pbmdzIGFyZSB0YWtlbiBmcm9tIHNtc2MtbGFuOTFjOTYtbXMucGRmCisgKi8KK3N0YXRpYyBpbnQgc21jOTF4X2luaXRfZ3BtYyhpbnQgY3MpCit7CisJc3RydWN0IGdwbWNfdGltaW5ncyB0OworCWNvbnN0IGludCB0Ml9yID0gNDU7CQkvKiB0MiBpbiBGaWd1cmUgMTIuMTAgKi8KKwljb25zdCBpbnQgdDJfdyA9IDMwOwkJLyogdDIgaW4gRmlndXJlIDEyLjExICovCisJY29uc3QgaW50IHQzID0gMTU7CQkvKiB0MyBpbiBGaWd1cmUgMTIuMTAgKi8KKwljb25zdCBpbnQgdDVfciA9IDA7CQkvKiB0NSBpbiBGaWd1cmUgMTIuMTAgKi8KKwljb25zdCBpbnQgdDZfciA9IDQ1OwkJLyogdDYgaW4gRmlndXJlIDEyLjEwICovCisJY29uc3QgaW50IHQ2X3cgPSAwOwkJLyogdDYgaW4gRmlndXJlIDEyLjExICovCisJY29uc3QgaW50IHQ3X3cgPSAxNTsJCS8qIHQ3IGluIEZpZ3VyZSAxMi4xMSAqLworCWNvbnN0IGludCB0MTUgPSAxMjsJCS8qIHQxNSBpbiBGaWd1cmUgMTIuMiAqLworCWNvbnN0IGludCB0MjAgPSAxODU7CQkvKiB0MjAgaW4gRmlndXJlIDEyLjIgKi8KKworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKworCXQuY3Nfb24gPSB0MTU7CisJdC5jc19yZF9vZmYgPSB0MyArIHQyX3IgKyB0NV9yOwkvKiBGaWd1cmUgMTIuMTAgKi8KKwl0LmNzX3dyX29mZiA9IHQzICsgdDJfdyArIHQ2X3c7CS8qIEZpZ3VyZSAxMi4xMSAqLworCXQuYWR2X29uID0gdDM7CQkJLyogRmlndXJlIDEyLjEwICovCisJdC5hZHZfcmRfb2ZmID0gdDMgKyB0Ml9yOwkvKiBGaWd1cmUgMTIuMTAgKi8KKwl0LmFkdl93cl9vZmYgPSB0MyArIHQyX3c7CS8qIEZpZ3VyZSAxMi4xMSAqLworCXQub2Vfb2ZmID0gdDMgKyB0Ml9yICsgdDVfcjsJLyogRmlndXJlIDEyLjEwICovCisJdC5vZV9vbiA9IHQub2Vfb2ZmIC0gdDZfcjsJLyogRmlndXJlIDEyLjEwICovCisJdC53ZV9vZmYgPSB0MyArIHQyX3cgKyB0Nl93OwkvKiBGaWd1cmUgMTIuMTEgKi8KKwl0LndlX29uID0gdC53ZV9vZmYgLSB0N193OwkvKiBGaWd1cmUgMTIuMTEgKi8KKwl0LnJkX2N5Y2xlID0gdDIwOwkJLyogRmlndXJlIDEyLjIgKi8KKwl0LndyX2N5Y2xlID0gdDIwOwkJLyogRmlndXJlIDEyLjQgKi8KKwl0LmFjY2VzcyA9IHQzICsgdDJfciArIHQ1X3I7CS8qIEZpZ3VyZSAxMi4xMCAqLworCXQud3JfYWNjZXNzID0gdDMgKyB0Ml93ICsgdDZfdzsJLyogRmlndXJlIDEyLjExICovCisKKwlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUcxLCBHUE1DX0NPTkZJRzFfREVWSUNFU0laRV8xNik7CisKKwlyZXR1cm4gZ3BtY19jc19zZXRfdGltaW5ncyhjcywgJnQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9pbml0X3NtYzkxeCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7CisJaW50IHJldDsKKworCW9tYXBfY2ZnX3JlZyhVOF8zNFhYX0dQSU81NF9ET1dOKTsKKwlvbWFwX2NmZ19yZWcoRzI1XzM0WFhfR1BJTzg2X09VVCk7CisJb21hcF9jZmdfcmVnKEgxOV8zNFhYX0dQSU8xNjRfT1VUKTsKKworCWlmIChncG1jX2NzX3JlcXVlc3QoU01DOTFYX0NTLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtYzkxeFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyeDUxX3NtYzkxeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MzAwOworCXJ4NTFfc21jOTF4X3Jlc291cmNlc1swXS5lbmQgPSBjc19tZW1fYmFzZSArIDB4MzBmOworCisJc21jOTF4X2luaXRfZ3BtYyhTTUM5MVhfQ1MpOworCisJaWYgKGdwaW9fcmVxdWVzdChTTUM5MVhfR1BJT19JUlEsICJTTUM5MVggaXJxIikgPCAwKQorCQlnb3RvIGZyZWUxOworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU01DOTFYX0dQSU9fSVJRKTsKKwlyeDUxX3NtYzkxeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBncGlvX3RvX2lycShTTUM5MVhfR1BJT19JUlEpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFNNQzkxWF9HUElPX1BXUkRXTiwgIlNNQzkxWCBwb3dlcmRvd24iKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWUyOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTTUM5MVhfR1BJT19QV1JEV04sIDApOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFNNQzkxWF9HUElPX1JFU0VULCAiU01DOTFYIHJlc2V0Iik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlMzsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoU01DOTFYX0dQSU9fUkVTRVQsIDApOworCWdwaW9fc2V0X3ZhbHVlKFNNQzkxWF9HUElPX1JFU0VULCAxKTsKKwltc2xlZXAoMTAwKTsKKwlncGlvX3NldF92YWx1ZShTTUM5MVhfR1BJT19SRVNFVCwgMCk7CisKKwlyZXR1cm47CisKK2ZyZWUzOgorCWdwaW9fZnJlZShTTUM5MVhfR1BJT19QV1JEV04pOworZnJlZTI6CisJZ3Bpb19mcmVlKFNNQzkxWF9HUElPX0lSUSk7CitmcmVlMToKKwlncG1jX2NzX2ZyZWUoU01DOTFYX0NTKTsKKworCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGluaXRpYWxpemUgc21jOTF4XG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YSByeDUxX21hZGNfZGF0YSA9IHsKKwkuaXJxX2xpbmUJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworCXsKKwkJLm5hbWUJCT0gImV4dGVybmFsIiwKKwkJLm1tYwkJPSAxLAorCQkud2lyZXMJCT0gNCwKKwkJLmNvdmVyX29ubHkJPSB0cnVlLAorCQkuZ3Bpb19jZAk9IDE2MCwKKwkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCX0sCisJeworCQkubmFtZQkJPSAiaW50ZXJuYWwiLAorCQkubW1jCQk9IDIsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCisJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwl9LAorCXt9CS8qIFRlcm1pbmF0b3IgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZtbWMxX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tYyIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWMiLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdnNpbV9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZhdXgxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWMjgiLAorCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdmF1eDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZDU0kiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworLyogVkFVWDMgLSBhZGRzIG1vcmUgcG93ZXIgdG8gVklPXzE4IHJhaWwgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZhdXgzID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWQ0FNX0RJR18xOCIsCisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdmF1eDQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZDQU1fQU5BXzI4IiwKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92bW1jMSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4NTAwMDAsCisJCS5tYXhfdVYJCQk9IDMxNTAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnJ4NTFfdm1tYzFfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdm1tYzIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZNTUMyXzMwIiwKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnJ4NTFfdm1tYzJfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdnNpbSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVk1NQzJfSU9fMTgiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmcng1MV92c2ltX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIGludCByeDUxX3R3bGdwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuKQoreworCS8qIEZJWE1FIHRoaXMgZ3BpbyBzZXR1cCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yIG5vdyAqLworCWdwaW9fcmVxdWVzdChncGlvICsgNiwgImJhY2tsaWdodF9wd20iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDYsIDApOworCWdwaW9fcmVxdWVzdChncGlvICsgNywgInNwZWFrZXJfZW4iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDcsIDEpOworCisJLyogc2V0IHVwIE1NQyBhZGFwdGVycywgbGlua2luZyB0aGVpciByZWd1bGF0b3JzIHRvIHRoZW0gKi8KKwl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJcng1MV92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKKwlyeDUxX3ZtbWMyX3N1cHBseS5kZXYgPSBtbWNbMV0uZGV2OworCXJ4NTFfdnNpbV9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHJ4NTFfZ3Bpb19kYXRhID0geworCS5ncGlvX2Jhc2UJCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAorCS5pcnFfZW5kCQk9IFRXTDQwMzBfR1BJT19JUlFfRU5ELAorCS5wdWxsZG93bnMJCT0gQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpCisJCQkJfCBCSVQoNCkgfCBCSVQoNSkKKwkJCQl8IEJJVCg4KSB8IEJJVCg5KSB8IEJJVCgxMCkgfCBCSVQoMTEpCisJCQkJfCBCSVQoMTIpIHwgQklUKDEzKSB8IEJJVCgxNCkgfCBCSVQoMTUpCisJCQkJfCBCSVQoMTYpIHwgQklUKDE3KSAsCisJLnNldHVwCQkJPSByeDUxX3R3bGdwaW9fc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSByeDUxX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJCT0gVFdMNDAzMF9JUlFfRU5ELAorCisJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCisJLmdwaW8JCQk9ICZyeDUxX2dwaW9fZGF0YSwKKwkua2V5cGFkCQkJPSAmcng1MV9rcF9kYXRhLAorCS5tYWRjCQkJPSAmcng1MV9tYWRjX2RhdGEsCisKKwkudmF1eDEJCQk9ICZyeDUxX3ZhdXgxLAorCS52YXV4MgkJCT0gJnJ4NTFfdmF1eDIsCisJLnZhdXgzCQkJPSAmcng1MV92YXV4MywKKwkudmF1eDQJCQk9ICZyeDUxX3ZhdXg0LAorCS52bW1jMQkJCT0gJnJ4NTFfdm1tYzEsCisJLnZtbWMyCQkJPSAmcng1MV92bW1jMiwKKwkudnNpbQkJCT0gJnJ4NTFfdnNpbSwKKwkudmRhYwkJCT0gJnJ4NTFfdmRhYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzFbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0d2w1MDMwIiwgMHg0OCksCisJCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKKwkJLmlycSA9IElOVF8zNFhYX1NZU19OSVJRLAorCQkucGxhdGZvcm1fZGF0YSA9ICZyeDUxX3R3bGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ4NTFfaTJjX2luaXQodm9pZCkKK3sKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xLAorCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEpKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgMTAwLCBOVUxMLCAwKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCByeDUxX3BlcmlwaGVyYWxzX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyeDUxX3BlcmlwaGVyYWxzX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX2RldmljZXMpKTsKKwlyeDUxX2kyY19pbml0KCk7CisJcng1MV9pbml0X3NtYzkxeCgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGRhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTm9raWEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyByeDUxX3VhcnRfY29uZmlnID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyByeDUxX2xjZF9jb25maWcgPSB7CisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHJ4NTFfZmJtZW0wX2NvbmZpZyA9IHsKKwkuc2l6ZSA9IDc1MiAqIDEwMjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHJ4NTFfZmJtZW0xX2NvbmZpZyA9IHsKKwkuc2l6ZSA9IDc1MiAqIDEwMjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHJ4NTFfZmJtZW0yX2NvbmZpZyA9IHsKKwkuc2l6ZSA9IDc1MiAqIDEwMjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCByeDUxX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJnJ4NTFfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0ZCTUVNLAkmcng1MV9mYm1lbTBfY29uZmlnIH0sCisJeyBPTUFQX1RBR19GQk1FTSwJJnJ4NTFfZmJtZW0xX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfRkJNRU0sCSZyeDUxX2ZibWVtMl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZyeDUxX2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCByeDUxX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7Cit9CisKK2V4dGVybiB2b2lkIF9faW5pdCByeDUxX3BlcmlwaGVyYWxzX2luaXQodm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCByeDUxX2luaXQodm9pZCkKK3sKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHJ4NTFfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHJ4NTFfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJdXNiX211c2JfaW5pdCgpOworCXJ4NTFfcGVyaXBoZXJhbHNfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE5PS0lBX1JYNTEsICJOb2tpYSBSWC01MSBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPiAqLworCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gcng1MV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcng1MV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gcng1MV9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggY2U0ZDQ2YS4uNDI0N2ExNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMjYsMTEgKzI2LDEwIEBACiAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9ja2RvbWFpbi5oPgotI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlICJtZW1vcnkuaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KICNpbmNsdWRlICJzZHJjLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJwcm0uaCIKQEAgLTQ2LDcgKzQ1LDcgQEAKICNkZWZpbmUgRFBMTF9NSU5fRElWSURFUgkJMQogCiAvKiBQb3NzaWJsZSBlcnJvciByZXN1bHRzIGZyb20gX2RwbGxfdGVzdF9tdWx0ICovCi0jZGVmaW5lIERQTExfTVVMVF9VTkRFUkZMT1cJCSgxIDw8IDApCisjZGVmaW5lIERQTExfTVVMVF9VTkRFUkZMT1cJCS0xCiAKIC8qCiAgKiBTY2FsZSBmYWN0b3IgdG8gbWl0aWdhdGUgcm91bmRvZmYgZXJyb3JzIGluIERQTEwgcmF0ZSByb3VuZGluZy4KQEAgLTU5LDYgKzU4LDE2IEBACiAjZGVmaW5lIERQTExfUk9VTkRJTkdfVkFMCQkoKERQTExfU0NBTEVfQkFTRSAvIDIpICogXAogCQkJCQkgKERQTExfU0NBTEVfRkFDVE9SIC8gRFBMTF9TQ0FMRV9CQVNFKSkKIAorLyogRFBMTCB2YWxpZCBGaW50IGZyZXF1ZW5jeSBiYW5kIGxpbWl0cyAtIGZyb20gMzR4eCBUUk0gU2VjdGlvbiA0LjcuNi4yICovCisjZGVmaW5lIERQTExfRklOVF9CQU5EMV9NSU4JCTc1MDAwMAorI2RlZmluZSBEUExMX0ZJTlRfQkFORDFfTUFYCQkyMTAwMDAwCisjZGVmaW5lIERQTExfRklOVF9CQU5EMl9NSU4JCTc1MDAwMDAKKyNkZWZpbmUgRFBMTF9GSU5UX0JBTkQyX01BWAkJMjEwMDAwMDAKKworLyogX2RwbGxfdGVzdF9maW50KCkgcmV0dXJuIGNvZGVzICovCisjZGVmaW5lIERQTExfRklOVF9VTkRFUkZMT1cJCS0xCisjZGVmaW5lIERQTExfRklOVF9JTlZBTElECQktMgorCiB1OCBjcHVfbWFzazsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02Niw2ICs3NSw3NCBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCisgKiBfb21hcDJ4eHhfY2xrX2NvbW1pdCAtIGNvbW1pdCBjbG9jayBwYXJlbnQvcmF0ZSBjaGFuZ2VzIGluIGhhcmR3YXJlCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICoKKyAqCisgKiBJZiBAY2xrIGhhcyB0aGUgREVMQVlFRF9BUFAgZmxhZyBzZXQsIG1lYW5pbmcgdGhhdCBwYXJlbnQvcmF0ZSBjaGFuZ2VzCisgKiBkb24ndCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgVkFMSURfQ09ORklHIGJpdCBpcyB3cml0dGVuLCB3cml0ZSB0aGUKKyAqIFZBTElEX0NPTkZJRyBiaXQgYW5kIHdhaXQgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0ZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX29tYXAyeHh4X2Nsa19jb21taXQoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCkpCisJCXJldHVybjsKKworCXBybV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX1ZBTElEX0NPTkZJRywgT01BUDI0WFhfR1JfTU9ELAorCQlPTUFQMjRYWF9QUkNNX0NMS0NGR19DVFJMX09GRlNFVCk7CisJLyogT0NQIGJhcnJpZXIgKi8KKwlwcm1fcmVhZF9tb2RfcmVnKE9NQVAyNFhYX0dSX01PRCwgT01BUDI0WFhfUFJDTV9DTEtDRkdfQ1RSTF9PRkZTRVQpOworfQorCisvKgorICogX2RwbGxfdGVzdF9maW50IC0gdGVzdCB3aGV0aGVyIGFuIEZpbnQgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSBEUExMCisgKiBAY2xrOiBEUExMIHN0cnVjdCBjbGsgdG8gdGVzdAorICogQG46IGRpdmlkZXIgdmFsdWUgKE4pIHRvIHRlc3QKKyAqCisgKiBUZXN0cyB3aGV0aGVyIGEgcGFydGljdWxhciBkaXZpZGVyIEBuIHdpbGwgcmVzdWx0IGluIGEgdmFsaWQgRFBMTAorICogaW50ZXJuYWwgY2xvY2sgZnJlcXVlbmN5IEZpbnQuIFNlZSB0aGUgMzR4eCBUUk0gNC43LjYuMiAiRFBMTCBKaXR0ZXIKKyAqIENvcnJlY3Rpb24iLiAgUmV0dXJucyAwIGlmIE9LLCAtMSBpZiB0aGUgZW5jbG9zaW5nIGxvb3AgY2FuIHRlcm1pbmF0ZQorICogKGFzc3VtaW5nIHRoYXQgaXQgaXMgY291bnRpbmcgTiB1cHdhcmRzKSwgb3IgLTIgaWYgdGhlIGVuY2xvc2luZyBsb29wCisgKiBzaG91bGQgc2tpcCB0byB0aGUgbmV4dCBpdGVyYXRpb24gKGFnYWluIGFzc3VtaW5nIE4gaXMgaW5jcmVhc2luZykuCisgKi8KK3N0YXRpYyBpbnQgX2RwbGxfdGVzdF9maW50KHN0cnVjdCBjbGsgKmNsaywgdTggbikKK3sKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwlsb25nIGZpbnQ7CisJaW50IHJldCA9IDA7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJLyogRFBMTCBkaXZpZGVyIG11c3QgcmVzdWx0IGluIGEgdmFsaWQgaml0dGVyIGNvcnJlY3Rpb24gdmFsICovCisJZmludCA9IGNsay0+cGFyZW50LT5yYXRlIC8gKG4gKyAxKTsKKwlpZiAoZmludCA8IERQTExfRklOVF9CQU5EMV9NSU4pIHsKKworCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgorCQkJICJsb3dlcmluZyBtYXhfZGl2aWRlclxuIiwgbik7CisJCWRkLT5tYXhfZGl2aWRlciA9IG47CisJCXJldCA9IERQTExfRklOVF9VTkRFUkZMT1c7CisKKwl9IGVsc2UgaWYgKGZpbnQgPiBEUExMX0ZJTlRfQkFORDFfTUFYICYmCisJCSAgIGZpbnQgPCBEUExMX0ZJTlRfQkFORDJfTUlOKSB7CisKKwkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmVcbiIsIG4pOworCQlyZXQgPSBEUExMX0ZJTlRfSU5WQUxJRDsKKworCX0gZWxzZSBpZiAoZmludCA+IERQTExfRklOVF9CQU5EMl9NQVgpIHsKKworCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgorCQkJICJib29zdGluZyBtaW5fZGl2aWRlclxuIiwgbik7CisJCWRkLT5taW5fZGl2aWRlciA9IG47CisJCXJldCA9IERQTExfRklOVF9JTlZBTElEOworCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBvbWFwMl9pbml0X2Nsa19jbGtkbSAtIGxvb2sgdXAgYSBjbG9ja2RvbWFpbiBuYW1lLCBzdG9yZSBwb2ludGVyIGluIGNsawogICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQogICoKQEAgLTEyMCw3ICsxOTcsNyBAQAogCQkJCQkJIGNsay0+bmFtZSwgY2xrcy0+cGFyZW50LT5uYW1lLAogCQkJCQkJICgoY2xrLT5wYXJlbnQpID8KIAkJCQkJCSAgY2xrLT5wYXJlbnQtPm5hbWUgOiAiTlVMTCIpKTsKLQkJCQkJY2xrLT5wYXJlbnQgPSBjbGtzLT5wYXJlbnQ7CisJCQkJCWNsa19yZXBhcmVudChjbGssIGNsa3MtPnBhcmVudCk7CiAJCQkJfTsKIAkJCQlmb3VuZCA9IDE7CiAJCQl9CkBAIC0xMzQsMjUgKzIxMSw1MiBAQAogCXJldHVybjsKIH0KIAotLyogUmV0dXJucyB0aGUgRFBMTCByYXRlICovCisvKioKKyAqIG9tYXAyX2dldF9kcGxsX3JhdGUgLSByZXR1cm5zIHRoZSBjdXJyZW50IERQTEwgQ0xLT1VUIHJhdGUKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBhIERQTEwKKyAqCisgKiBEUExMcyBjYW4gYmUgbG9ja2VkIG9yIGJ5cGFzc2VkIC0gYmFzaWNhbGx5LCBlbmFibGVkIG9yIGRpc2FibGVkLgorICogV2hlbiBsb2NrZWQsIHRoZSBEUExMIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBNIGFuZCBOIHZhbHVlcy4gIFdoZW4KKyAqIGJ5cGFzc2VkLCBvbiBPTUFQMnh4eCwgdGhlIG91dHB1dCByYXRlIGlzIGVpdGhlciB0aGUgMzJLaUh6IGNsb2NrCisgKiBvciBzeXNfY2xrLiAgQnlwYXNzIHJhdGVzIG9uIE9NQVAzIGRlcGVuZCBvbiB0aGUgRFBMTDogRFBMTHMgMSBhbmQKKyAqIDIgYXJlIGJ5cGFzc2VkIHdpdGggZHBsbDFfZmNsayBhbmQgZHBsbDJfZmNsayByZXNwZWN0aXZlbHkKKyAqIChnZW5lcmF0ZWQgYnkgRFBMTDMpLCB3aGlsZSBEUExMIDMsIDQsIGFuZCA1IGJ5cGFzcyByYXRlcyBhcmUgc3lzX2Nsay4KKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgRFBMTCBDTEtPVVQgcmF0ZSAoKm5vdCogQ0xLT1VUWDIpIGlmIHRoZSBEUExMIGlzCisgKiBsb2NrZWQsIG9yIHRoZSBhcHByb3ByaWF0ZSBieXBhc3MgcmF0ZSBpZiB0aGUgRFBMTCBpcyBieXBhc3NlZCwgb3IgMAorICogaWYgdGhlIGNsb2NrIEBjbGsgaXMgbm90IGEgRFBMTC4KKyAqLwogdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCWxvbmcgbG9uZyBkcGxsX2NsazsKLQl1MzIgZHBsbF9tdWx0LCBkcGxsX2RpdiwgZHBsbDsKKwl1MzIgZHBsbF9tdWx0LCBkcGxsX2RpdiwgdjsKIAlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKIAogCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JLyogUkVWSVNJVDogV2hhdCBkbyB3ZSByZXR1cm4gb24gZXJyb3I/ICovCiAJaWYgKCFkZCkKIAkJcmV0dXJuIDA7CiAKLQlkcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwotCWRwbGxfbXVsdCA9IGRwbGwgJiBkZC0+bXVsdF9tYXNrOworCS8qIFJldHVybiBieXBhc3MgcmF0ZSBpZiBEUExMIGlzIGJ5cGFzc2VkICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJdiAmPSBkZC0+ZW5hYmxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfQorCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKKwlkcGxsX211bHQgPSB2ICYgZGQtPm11bHRfbWFzazsKIAlkcGxsX211bHQgPj49IF9fZmZzKGRkLT5tdWx0X21hc2spOwotCWRwbGxfZGl2ID0gZHBsbCAmIGRkLT5kaXYxX21hc2s7CisJZHBsbF9kaXYgPSB2ICYgZGQtPmRpdjFfbWFzazsKIAlkcGxsX2RpdiA+Pj0gX19mZnMoZGQtPmRpdjFfbWFzayk7CiAKLQlkcGxsX2NsayA9IChsb25nIGxvbmcpY2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQ7CisJZHBsbF9jbGsgPSAobG9uZyBsb25nKWRkLT5jbGtfcmVmLT5yYXRlICogZHBsbF9tdWx0OwogCWRvX2RpdihkcGxsX2NsaywgZHBsbF9kaXYgKyAxKTsKIAogCXJldHVybiBkcGxsX2NsazsKQEAgLTE2MiwxNCArMjY2LDExIEBACiAgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2ssCiAgKiBkaXZpZGVkIGJ5IHNvbWUgZmFjdG9yCiAgKi8KLXZvaWQgb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQordW5zaWduZWQgbG9uZyBvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJV0FSTl9PTighY2xrLT5maXhlZF9kaXYpOwogCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGstPmZpeGVkX2RpdjsKLQotCWlmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNsay0+Zml4ZWRfZGl2OwogfQogCiAvKioKQEAgLTE5MCwxMSArMjkxLDEwIEBACiAJICogMjR4eCB1c2VzIDAgdG8gaW5kaWNhdGUgbm90IHJlYWR5LCBhbmQgMSB0byBpbmRpY2F0ZSByZWFkeS4KIAkgKiAzNHh4IHJldmVyc2VzIHRoaXMsIGp1c3QgdG8ga2VlcCB1cyBvbiBvdXIgdG9lcwogCSAqLwotCWlmIChjcHVfbWFzayAmIChSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpKSB7CisJaWYgKGNwdV9tYXNrICYgKFJBVEVfSU5fMjQyWCB8IFJBVEVfSU5fMjQzWCkpCiAJCWVuYSA9IG1hc2s7Ci0JfSBlbHNlIGlmIChjcHVfbWFzayAmIFJBVEVfSU5fMzQzWCkgeworCWVsc2UgaWYgKGNwdV9tYXNrICYgUkFURV9JTl8zNDNYKQogCQllbmEgPSAwOwotCX0KIAogCS8qIFdhaXQgZm9yIGxvY2sgKi8KIAl3aGlsZSAoKChfX3Jhd19yZWFkbChyZWcpICYgbWFzaykgIT0gZW5hKSAmJgpAQCAtMjI4LDMxICszMjgsMTIgQEAKIAkgKiBpdCBhbmQgcHVsbCBpdCBpbnRvIHN0cnVjdCBjbGsgaXRzZWxmIHNvbWVob3cuCiAJICovCiAJcmVnID0gY2xrLT5lbmFibGVfcmVnOwotCWlmICgoKCh1MzIpcmVnICYgMHhmZikgPj0gQ01fRkNMS0VOMSkgJiYKLQkgICAgKCgodTMyKXJlZyAmIDB4ZmYpIDw9IE9NQVAyNFhYX0NNX0ZDTEtFTjIpKQotCQlvdGhlcl9yZWcgPSAodm9pZCBfX2lvbWVtICopKCgodTMyKXJlZyAmIH4weGYwKSB8IDB4MTApOyAvKiBDTV9JQ0xLRU4qICovCi0JZWxzZSBpZiAoKCgodTMyKXJlZyAmIDB4ZmYpID49IENNX0lDTEtFTjEpICYmCi0JCSAoKCh1MzIpcmVnICYgMHhmZikgPD0gT01BUDI0WFhfQ01fSUNMS0VONCkpCi0JCW90aGVyX3JlZyA9ICh2b2lkIF9faW9tZW0gKikoKCh1MzIpcmVnICYgfjB4ZjApIHwgMHgwMCk7IC8qIENNX0ZDTEtFTiogKi8KLQllbHNlCi0JCXJldHVybjsKIAotCS8qIFJFVklTSVQ6IFdoYXQgYXJlIHRoZSBhcHByb3ByaWF0ZSBleGNsdXNpb25zIGZvciAzNFhYPyAqLwotCS8qIE5vIGNoZWNrIGZvciBEU1Mgb3IgY2FtIGNsb2NrcyAqLwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiAoKHUzMilyZWcgJiAweDBmKSA9PSAwKSB7IC8qIENNX3tGLEl9Q0xLRU4xICovCi0JCWlmIChjbGstPmVuYWJsZV9iaXQgPT0gT01BUDI0WFhfRU5fRFNTMl9TSElGVCB8fAotCQkgICAgY2xrLT5lbmFibGVfYml0ID09IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQgfHwKLQkJICAgIGNsay0+ZW5hYmxlX2JpdCA9PSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQpCi0JCQlyZXR1cm47Ci0JfQotCi0JLyogUkVWSVNJVDogV2hhdCBhcmUgdGhlIGFwcHJvcHJpYXRlIGV4Y2x1c2lvbnMgZm9yIDM0WFg/ICovCi0JLyogT01BUDM6IGlnbm9yZSBEU1MtbW9kIGNsb2NrcyAqLwotCWlmIChjcHVfaXNfb21hcDM0eHgoKSAmJgotCSAgICAoKCh1MzIpcmVnICYgfjB4ZmYpID09ICh1MzIpT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIDApIHx8Ci0JICAgICAoKCgodTMyKXJlZyAmIH4weGZmKSA9PSAodTMyKU9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgMCkpICYmCi0JICAgICBjbGstPmVuYWJsZV9iaXQgPT0gT01BUDM0MzBfRU5fU1NJX1NISUZUKSkpCi0JCXJldHVybjsKKwkvKgorCSAqIENvbnZlcnQgQ01fSUNMS0VOKiA8LT4gQ01fRkNMS0VOKi4gIFRoaXMgY29udmVyc2lvbiBhc3N1bWVzCisJICogaXQncyBqdXN0IGEgbWF0dGVyIG9mIFhPUmluZyB0aGUgYml0cy4KKwkgKi8KKwlvdGhlcl9yZWcgPSAodm9pZCBfX2lvbWVtICopKCh1MzIpcmVnIF4gKENNX0ZDTEtFTiBeIENNX0lDTEtFTikpOwogCiAJLyogQ2hlY2sgaWYgYm90aCBmdW5jdGlvbmFsIGFuZCBpbnRlcmZhY2UgY2xvY2tzCiAJICogYXJlIHJ1bm5pbmcuICovCkBAIC0yNjQsMTggKzM0NSw5IEBACiAJb21hcDJfd2FpdF9jbG9ja19yZWFkeShzdF9yZWcsIGJpdCwgY2xrLT5uYW1lKTsKIH0KIAotLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50Ci0gKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KLSAqLwotaW50IF9vbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1MzIgcmVndmFsMzI7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIChBTFdBWVNfRU5BQkxFRCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSykpCi0JCXJldHVybiAwOwotCi0JaWYgKGNsay0+ZW5hYmxlKQotCQlyZXR1cm4gY2xrLT5lbmFibGUoY2xrKTsKKwl1MzIgdjsKIAogCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCkBAIC0yODMsMzMgKzM1NSwzOCBAQAogCQlyZXR1cm4gMDsgLyogUkVWSVNJVDogLUVJTlZBTCAqLwogCX0KIAotCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlpZiAoY2xrLT5mbGFncyAmIElOVkVSVF9FTkFCTEUpCi0JCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQl2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCWVsc2UKLQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0Jd21iKCk7Ci0KLQlvbWFwMl9jbGtfd2FpdF9yZWFkeShjbGspOworCQl2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7IC8qIE9DUCBiYXJyaWVyICovCiAKIAlyZXR1cm4gMDsKIH0KIAotLyogRGlzYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudCAqLwotdm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIGludCBvbWFwMl9kZmx0X2Nsa19lbmFibGVfd2FpdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHJlZ3ZhbDMyOworCWludCByZXQ7CiAKLQlpZiAoY2xrLT5mbGFncyAmIChBTFdBWVNfRU5BQkxFRCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSykpCi0JCXJldHVybjsKLQotCWlmIChjbGstPmRpc2FibGUpIHsKLQkJY2xrLT5kaXNhYmxlKGNsayk7Ci0JCXJldHVybjsKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOyAvKiBSRVZJU0lUOiAtRUlOVkFMICovCiAJfQogCi0JaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSBOVUxMKSB7CisJcmV0ID0gb21hcDJfZGZsdF9jbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCA9PSAwKQorCQlvbWFwMl9jbGtfd2FpdF9yZWFkeShjbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2OworCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpIHsKIAkJLyoKIAkJICogJ0luZGVwZW5kZW50JyBoZXJlIHJlZmVycyB0byBhIGNsb2NrIHdoaWNoIGlzIG5vdAogCQkgKiBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuCkBAIC0zMTksMjAgKzM5Niw0NCBAQAogCQlyZXR1cm47CiAJfQogCi0JcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCWlmIChjbGstPmZsYWdzICYgSU5WRVJUX0VOQUJMRSkKLQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJdiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCWVsc2UKLQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCXdtYigpOworCQl2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCS8qIE5vIE9DUCBiYXJyaWVyIG5lZWRlZCBoZXJlIHNpbmNlIGl0IGlzIGEgZGlzYWJsZSBvcGVyYXRpb24gKi8KK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdF93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlX3dhaXQsCisJLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAorfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCit9OworCisvKiBFbmFibGVzIGNsb2NrIHdpdGhvdXQgY29uc2lkZXJpbmcgcGFyZW50IGRlcGVuZGVuY2llcyBvciB1c2UgY291bnQKKyAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0aGlzIHRvIHVzZSBjbGstPmVuYWJsZSBsaWtlIG9uIG9tYXAxPworICovCitzdGF0aWMgaW50IF9vbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5vcHMtPmVuYWJsZShjbGspOworfQorCisvKiBEaXNhYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50ICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CiB9CiAKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKIAkJX29tYXAyX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChsaWtlbHkoKHUzMiljbGstPnBhcmVudCkpCisJCWlmIChjbGstPnBhcmVudCkKIAkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKIAkJaWYgKGNsay0+Y2xrZG0pCiAJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOwpAQCAtMzQ1LDMwICs0NDYsMjkgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgewotCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQotCQkJcmV0ID0gb21hcDJfY2xrX2VuYWJsZShjbGstPnBhcmVudCk7Ci0KLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQkJY2xrLT51c2Vjb3VudC0tOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCiAJCWlmIChjbGstPmNsa2RtKQogCQkJb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOwogCisJCWlmIChjbGstPnBhcmVudCkgeworCQkJcmV0ID0gb21hcDJfY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisKIAkJcmV0ID0gX29tYXAyX2Nsa19lbmFibGUoY2xrKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCQlpZiAoY2xrLT5jbGtkbSkKLQkJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOwotCi0JCQlpZiAoY2xrLT5wYXJlbnQpIHsKKwkJaWYgKHJldCkgeworCQkJaWYgKGNsay0+cGFyZW50KQogCQkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJCQljbGstPnVzZWNvdW50LS07Ci0JCQl9CisKKwkJCWdvdG8gZXJyOwogCQl9CiAJfQorCXJldHVybiByZXQ7CiAKK2VycjoKKwlpZiAoY2xrLT5jbGtkbSkKKwkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKKwljbGstPnVzZWNvdW50LS07CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc2LDI0ICs0NzYsMjIgQEAKICAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGFyZSBwYXJ0IG9mIENMS1NFTF94eXogZ292ZXJuZWQgY2xvY2tzLgogICogUkVWSVNJVDogTWF5YmUgY2hhbmdlIHRvIHVzZSBjbGstPmVuYWJsZSgpIGZ1bmN0aW9ucyBsaWtlIG9uIG9tYXAxPwogICovCi12b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQordW5zaWduZWQgbG9uZyBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTMyIGRpdiA9IDA7CiAKIAlwcl9kZWJ1ZygiY2xvY2s6IHJlY2FsYydpbmcgY2xrc2VsIGNsayAlc1xuIiwgY2xrLT5uYW1lKTsKIAogCWRpdiA9IG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihjbGspOwogCWlmIChkaXYgPT0gMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gY2xrLT5yYXRlOwogCi0JaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdikpCi0JCXJldHVybjsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKKwlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CiAKLQlwcl9kZWJ1ZygiY2xvY2s6IG5ldyBjbG9jayByYXRlIGlzICVsZCAoZGl2ICVkKVxuIiwgY2xrLT5yYXRlLCBkaXYpOworCXByX2RlYnVnKCJjbG9jazogbmV3IGNsb2NrIHJhdGUgaXMgJWxkIChkaXYgJWQpXG4iLCByYXRlLCBkaXYpOwogCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiByYXRlOwogfQogCiAvKioKQEAgLTQwNSw4ICs1MDMsOCBAQAogICogdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBwYXJlbnQgY2xvY2sgYWRkcmVzcy4KICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xrc2VsIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KICAqLwotY29uc3Qgc3RydWN0IGNsa3NlbCAqb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLAotCQkJCQkJc3RydWN0IGNsayAqc3JjX2NsaykKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsICpvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQkgICAgICAgc3RydWN0IGNsayAqc3JjX2NsaykKIHsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOwogCkBAIC00NTUsNyArNTUzLDcgQEAKIAkqbmV3X2RpdiA9IDE7CiAKIAljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKGNsa3MgPT0gTlVMTCkKKwlpZiAoIWNsa3MpCiAJCXJldHVybiB+MDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNTE0LDcgKzYxMiw3IEBACiAvKiBHaXZlbiBhIGNsb2NrIGFuZCBhIHJhdGUgYXBwbHkgYSBjbG9jayBzcGVjaWZpYyByb3VuZGluZyBmdW5jdGlvbiAqLwogbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCisJaWYgKGNsay0+cm91bmRfcmF0ZSkKIAkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwogCiAJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQpAQCAtNTQwLDcgKzYzOCw3IEBACiAJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwogCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOwotCWlmIChjbGtzID09IE5VTEwpCisJaWYgKCFjbGtzKQogCQlyZXR1cm4gMDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNTc2LDcgKzY3NCw3IEBACiAJV0FSTl9PTihkaXYgPT0gMCk7CiAKIAljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKGNsa3MgPT0gTlVMTCkKKwlpZiAoIWNsa3MpCiAJCXJldHVybiB+MDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNTk1LDIzICs2OTMsNiBAQAogfQogCiAvKioKLSAqIG9tYXAyX2dldF9jbGtzZWwgLSBmaW5kIGNsa3NlbCByZWdpc3RlciBhZGRyICYgZmllbGQgbWFzayBmb3IgYSBjbGsKLSAqIEBjbGs6IHN0cnVjdCBjbGsgdG8gdXNlCi0gKiBAZmllbGRfbWFzazogcHRyIHRvIHUzMiB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgZmllbGQgbWFzawotICoKLSAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsa3NlbCByZWdpc3RlciB1cG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KLSAqLwotdm9pZCBfX2lvbWVtICpvbWFwMl9nZXRfY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyICpmaWVsZF9tYXNrKQotewotCWlmICh1bmxpa2VseSgoY2xrLT5jbGtzZWxfcmVnID09IE5VTEwpIHx8IChjbGstPmNsa3NlbF9tYXNrID09IE5VTEwpKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7Ci0KLQlyZXR1cm4gY2xrLT5jbGtzZWxfcmVnOwotfQotCi0vKioKICAqIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvciAtIGdldCBjdXJyZW50IGRpdmlkZXIgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCiAgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlLgogICoKQEAgLTYxOSw0OSArNzAwLDQxIEBACiAgKi8KIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKQogewotCXUzMiBmaWVsZF9tYXNrLCBmaWVsZF92YWw7Ci0Jdm9pZCBfX2lvbWVtICpkaXZfYWRkcjsKKwl1MzIgdjsKIAotCWRpdl9hZGRyID0gb21hcDJfZ2V0X2Nsa3NlbChjbGssICZmaWVsZF9tYXNrKTsKLQlpZiAoZGl2X2FkZHIgPT0gTlVMTCkKKwlpZiAoIWNsay0+Y2xrc2VsX21hc2spCiAJCXJldHVybiAwOwogCi0JZmllbGRfdmFsID0gX19yYXdfcmVhZGwoZGl2X2FkZHIpICYgZmllbGRfbWFzazsKLQlmaWVsZF92YWwgPj49IF9fZmZzKGZpZWxkX21hc2spOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpICYgY2xrLT5jbGtzZWxfbWFzazsKKwl2ID4+PSBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKIAotCXJldHVybiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihjbGssIGZpZWxkX3ZhbCk7CisJcmV0dXJuIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKGNsaywgdik7CiB9CiAKIGludCBvbWFwMl9jbGtzZWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JdTMyIGZpZWxkX21hc2ssIGZpZWxkX3ZhbCwgcmVnX3ZhbCwgdmFsaWRyYXRlLCBuZXdfZGl2ID0gMDsKLQl2b2lkIF9faW9tZW0gKmRpdl9hZGRyOworCXUzMiB2LCBmaWVsZF92YWwsIHZhbGlkcmF0ZSwgbmV3X2RpdiA9IDA7CisKKwlpZiAoIWNsay0+Y2xrc2VsX21hc2spCisJCXJldHVybiAtRUlOVkFMOwogCiAJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgcmF0ZSwgJm5ld19kaXYpOwogCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7Ci0JaWYgKGRpdl9hZGRyID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZmllbGRfdmFsID0gb21hcDJfZGl2aXNvcl90b19jbGtzZWwoY2xrLCBuZXdfZGl2KTsKIAlpZiAoZmllbGRfdmFsID09IH4wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlZ192YWwgPSBfX3Jhd19yZWFkbChkaXZfYWRkcik7Ci0JcmVnX3ZhbCAmPSB+ZmllbGRfbWFzazsKLQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgX19mZnMoZmllbGRfbWFzaykpOwotCV9fcmF3X3dyaXRlbChyZWdfdmFsLCBkaXZfYWRkcik7Ci0Jd21iKCk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7CisJdiAmPSB+Y2xrLT5jbGtzZWxfbWFzazsKKwl2IHw9IGZpZWxkX3ZhbCA8PCBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsgLyogT0NQIGJhcnJpZXIgKi8KIAogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gbmV3X2RpdjsKIAotCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFAgJiYgY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfVkFMSURfQ09ORklHLAotCQkJT01BUDI0WFhfR1JfTU9ELCBPTUFQMjRYWF9QUkNNX0NMS0NGR19DVFJMX09GRlNFVCk7Ci0JCXdtYigpOwotCX0KKwlfb21hcDJ4eHhfY2xrX2NvbW1pdChjbGspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02ODAsMzEgKzc1MywyNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGRwbGxfY2ssIGNvcmVfY2ssIHZpcnRfcHJjbV9zZXQ7IHBsdXMgYWxsIGNsa3NlbCBjbG9ja3MgKi8KLQlpZiAoY2xrLT5zZXRfcmF0ZSAhPSBOVUxMKQorCWlmIChjbGstPnNldF9yYXRlKQogCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CiAKLQlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIC8qCiAgKiBDb252ZXJ0cyBlbmNvZGVkIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpbnRvIGEgZnVsbCBhZGRyZXNzCi0gKiBPbiBlcnJvciwgKnNyY19hZGRyIHdpbGwgYmUgcmV0dXJuZWQgYXMgMC4KKyAqIE9uIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIChwYXJlbnRfZGl2KSB3aWxsIGJlIDAuCiAgKi8KLXN0YXRpYyB1MzIgb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQodm9pZCBfX2lvbWVtICoqc3JjX2FkZHIsCi0JCQkJICAgICAgc3RydWN0IGNsayAqc3JjX2NsaywgdTMyICpmaWVsZF9tYXNrLAotCQkJCSAgICAgIHN0cnVjdCBjbGsgKmNsaywgdTMyICpwYXJlbnRfZGl2KQorc3RhdGljIHUzMiBfb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQoc3RydWN0IGNsayAqc3JjX2Nsaywgc3RydWN0IGNsayAqY2xrLAorCQkJCSAgICAgICB1MzIgKmZpZWxkX3ZhbCkKIHsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOwogCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKIAotCSpwYXJlbnRfZGl2ID0gMDsKLQkqc3JjX2FkZHIgPSBOVUxMOwotCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgc3JjX2Nsayk7Ci0JaWYgKGNsa3MgPT0gTlVMTCkKKwlpZiAoIWNsa3MpCiAJCXJldHVybiAwOwogCiAJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CkBAIC03MjIsNDcgKzc4OCwzNSBAQAogCS8qIFNob3VsZCBuZXZlciBoYXBwZW4uICBBZGQgYSBjbGtzZWwgbWFzayB0byB0aGUgc3RydWN0IGNsay4gKi8KIAlXQVJOX09OKGNsay0+Y2xrc2VsX21hc2sgPT0gMCk7CiAKLQkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7Ci0JKnNyY19hZGRyID0gY2xrLT5jbGtzZWxfcmVnOwotCSpwYXJlbnRfZGl2ID0gY2xrci0+ZGl2OworCSpmaWVsZF92YWwgPSBjbGtyLT52YWw7CiAKLQlyZXR1cm4gY2xrci0+dmFsOworCXJldHVybiBjbGtyLT5kaXY7CiB9CiAKIGludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpCiB7Ci0Jdm9pZCBfX2lvbWVtICpzcmNfYWRkcjsKLQl1MzIgZmllbGRfdmFsLCBmaWVsZF9tYXNrLCByZWdfdmFsLCBwYXJlbnRfZGl2OworCXUzMiBmaWVsZF92YWwsIHYsIHBhcmVudF9kaXY7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkpCisJaWYgKGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFjbGstPmNsa3NlbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmaWVsZF92YWwgPSBvbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZCgmc3JjX2FkZHIsIG5ld19wYXJlbnQsCi0JCQkJCSAgICAgICAmZmllbGRfbWFzaywgY2xrLCAmcGFyZW50X2Rpdik7Ci0JaWYgKHNyY19hZGRyID09IE5VTEwpCisJcGFyZW50X2RpdiA9IF9vbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZChuZXdfcGFyZW50LCBjbGssICZmaWVsZF92YWwpOworCWlmICghcGFyZW50X2RpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCi0JCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7Ci0KIAkvKiBTZXQgbmV3IHNvdXJjZSB2YWx1ZSAocHJldmlvdXMgZGl2aWRlcnMgaWYgYW55IGluIGVmZmVjdCkgKi8KLQlyZWdfdmFsID0gX19yYXdfcmVhZGwoc3JjX2FkZHIpICYgfmZpZWxkX21hc2s7Ci0JcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IF9fZmZzKGZpZWxkX21hc2spKTsKLQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgc3JjX2FkZHIpOwotCXdtYigpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOworCXYgJj0gfmNsay0+Y2xrc2VsX21hc2s7CisJdiB8PSBmaWVsZF92YWwgPDwgX19mZnMoY2xrLT5jbGtzZWxfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGNsay0+Y2xrc2VsX3JlZyk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7ICAgIC8qIE9DUCBiYXJyaWVyICovCiAKLQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQICYmIGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCV9fcmF3X3dyaXRlbChPTUFQMjRYWF9WQUxJRF9DT05GSUcsIE9NQVAyNFhYX1BSQ01fQ0xLQ0ZHX0NUUkwpOwotCQl3bWIoKTsKLQl9CisJX29tYXAyeHh4X2Nsa19jb21taXQoY2xrKTsKIAotCWNsay0+cGFyZW50ID0gbmV3X3BhcmVudDsKLQotCWlmIChjbGstPnVzZWNvdW50ID4gMCkKLQkJb21hcDJfY2xrX2VuYWJsZShjbGspOworCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOwogCiAJLyogQ0xLU0VMIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cycgcmF0ZXMsIGRpdmlkZWQgYnkgYSBkaXZpc29yICovCiAJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKQEAgLTc3Myw5ICs4MjcsNiBAQAogCXByX2RlYnVnKCJjbG9jazogc2V0IHBhcmVudCBvZiAlcyB0byAlcyAobmV3IHJhdGUgJWxkKVxuIiwKIAkJIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUsIGNsay0+cmF0ZSk7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODA1LDcgKzg1Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUodW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwgdW5zaWduZWQgaW50IG0sIHVuc2lnbmVkIGludCBuKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZSh1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAorCQkJCQkgICAgdW5zaWduZWQgaW50IG0sIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07CiAKQEAgLTgzOCw3ICs4OTAsNyBAQAogCQkJICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCiB7Ci0JaW50IGZsYWdzID0gMCwgY2FycnkgPSAwOworCWludCByID0gMCwgY2FycnkgPSAwOwogCiAJLyogVW5zY2FsZSBtIGFuZCByb3VuZCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKm0gJSBEUExMX1NDQUxFX0ZBQ1RPUiA+PSBEUExMX1JPVU5ESU5HX1ZBTCkKQEAgLTg1OSwxMyArOTExLDEzIEBACiAJaWYgKCptIDwgRFBMTF9NSU5fTVVMVElQTElFUikgewogCQkqbSA9IERQTExfTUlOX01VTFRJUExJRVI7CiAJCSpuZXdfcmF0ZSA9IDA7Ci0JCWZsYWdzID0gRFBMTF9NVUxUX1VOREVSRkxPVzsKKwkJciA9IERQTExfTVVMVF9VTkRFUkZMT1c7CiAJfQogCiAJaWYgKCpuZXdfcmF0ZSA9PSAwKQogCQkqbmV3X3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKHBhcmVudF9yYXRlLCAqbSwgbik7CiAKLQlyZXR1cm4gZmxhZ3M7CisJcmV0dXJuIHI7CiB9CiAKIC8qKgpAQCAtODg5LDU0ICs5NDEsNjUgQEAKIAlpbnQgbSwgbiwgciwgZSwgc2NhbGVkX21heF9tOwogCXVuc2lnbmVkIGxvbmcgc2NhbGVkX3J0X3JwLCBuZXdfcmF0ZTsKIAlpbnQgbWluX2UgPSAtMSwgbWluX2VfbSA9IC0xLCBtaW5fZV9uID0gLTE7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKIAlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCiAJCXJldHVybiB+MDsKIAorCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKIAlwcl9kZWJ1ZygiY2xvY2s6IHN0YXJ0aW5nIERQTEwgcm91bmRfcmF0ZSBmb3IgY2xvY2sgJXMsIHRhcmdldCByYXRlICIKIAkJICIlbGRcbiIsIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOwogCi0Jc2NhbGVkX3J0X3JwID0gdGFyZ2V0X3JhdGUgLyAoY2xrLT5wYXJlbnQtPnJhdGUgLyBEUExMX1NDQUxFX0ZBQ1RPUik7Ci0Jc2NhbGVkX21heF9tID0gY2xrLT5kcGxsX2RhdGEtPm1heF9tdWx0aXBsaWVyICogRFBMTF9TQ0FMRV9GQUNUT1I7CisJc2NhbGVkX3J0X3JwID0gdGFyZ2V0X3JhdGUgLyAoZGQtPmNsa19yZWYtPnJhdGUgLyBEUExMX1NDQUxFX0ZBQ1RPUik7CisJc2NhbGVkX21heF9tID0gZGQtPm1heF9tdWx0aXBsaWVyICogRFBMTF9TQ0FMRV9GQUNUT1I7CiAKLQljbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX3JhdGUgPSAwOworCWRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9IDA7CiAKLQlmb3IgKG4gPSBjbGstPmRwbGxfZGF0YS0+bWF4X2RpdmlkZXI7IG4gPj0gRFBMTF9NSU5fRElWSURFUjsgbi0tKSB7CisJZm9yIChuID0gZGQtPm1pbl9kaXZpZGVyOyBuIDw9IGRkLT5tYXhfZGl2aWRlcjsgbisrKSB7CisKKwkJLyogSXMgdGhlIChpbnB1dCBjbGssIGRpdmlkZXIpIHBhaXIgdmFsaWQgZm9yIHRoZSBEUExMPyAqLworCQlyID0gX2RwbGxfdGVzdF9maW50KGNsaywgbik7CisJCWlmIChyID09IERQTExfRklOVF9VTkRFUkZMT1cpCisJCQlicmVhazsKKwkJZWxzZSBpZiAociA9PSBEUExMX0ZJTlRfSU5WQUxJRCkKKwkJCWNvbnRpbnVlOwogCiAJCS8qIENvbXB1dGUgdGhlIHNjYWxlZCBEUExMIG11bHRpcGxpZXIsIGJhc2VkIG9uIHRoZSBkaXZpZGVyICovCiAJCW0gPSBzY2FsZWRfcnRfcnAgKiBuOwogCiAJCS8qCi0JCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gZG93biwgYSBtIG92ZXJmbG93IG1lYW5zIHdlIGNhbgotCQkgKiBjYW4gaW1tZWRpYXRlbHkgc2tpcCB0byB0aGUgbmV4dCBuCisJCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gdXAsIGEgbSBvdmVyZmxvdyBtZWFucyB3ZQorCQkgKiBjYW4gYmFpbCBvdXQgY29tcGxldGVseSAoc2luY2UgYXMgbiBpbmNyZWFzZXMgaW4KKwkJICogdGhlIG5leHQgaXRlcmF0aW9uLCB0aGVyZSdzIG5vIHdheSB0aGF0IG0gY2FuCisJCSAqIGluY3JlYXNlIGJleW9uZCB0aGUgY3VycmVudCBtKQogCQkgKi8KIAkJaWYgKG0gPiBzY2FsZWRfbWF4X20pCi0JCQljb250aW51ZTsKKwkJCWJyZWFrOwogCiAJCXIgPSBfZHBsbF90ZXN0X211bHQoJm0sIG4sICZuZXdfcmF0ZSwgdGFyZ2V0X3JhdGUsCi0JCQkJICAgIGNsay0+cGFyZW50LT5yYXRlKTsKKwkJCQkgICAgZGQtPmNsa19yZWYtPnJhdGUpOworCisJCS8qIG0gY2FuJ3QgYmUgc2V0IGxvdyBlbm91Z2ggZm9yIHRoaXMgbiAtIHRyeSB3aXRoIGEgbGFyZ2VyIG4gKi8KKwkJaWYgKHIgPT0gRFBMTF9NVUxUX1VOREVSRkxPVykKKwkJCWNvbnRpbnVlOwogCiAJCWUgPSB0YXJnZXRfcmF0ZSAtIG5ld19yYXRlOwogCQlwcl9kZWJ1ZygiY2xvY2s6IG4gPSAlZDogbSA9ICVkOiByYXRlIGVycm9yIGlzICVkICIKIAkJCSAiKG5ld19yYXRlID0gJWxkKVxuIiwgbiwgbSwgZSwgbmV3X3JhdGUpOwogCiAJCWlmIChtaW5fZSA9PSAtMSB8fAotCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gY2xrLT5kcGxsX2RhdGEtPnJhdGVfdG9sZXJhbmNlKSkgeworCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gZGQtPnJhdGVfdG9sZXJhbmNlKSkgewogCQkJbWluX2UgPSBlOwogCQkJbWluX2VfbSA9IG07CiAJCQltaW5fZV9uID0gbjsKIAogCQkJcHJfZGVidWcoImNsb2NrOiBmb3VuZCBuZXcgbGVhc3QgZXJyb3IgJWRcbiIsIG1pbl9lKTsKLQkJfQogCi0JCS8qCi0JCSAqIFNpbmNlIHdlJ3JlIGNvdW50aW5nIG4gZG93biwgYSBtIHVuZGVyZmxvdyBtZWFucyB3ZQotCQkgKiBjYW4gYmFpbCBvdXQgY29tcGxldGVseSAoc2luY2UgYXMgbiBkZWNyZWFzZXMgaW4KLQkJICogdGhlIG5leHQgaXRlcmF0aW9uLCB0aGVyZSdzIG5vIHdheSB0aGF0IG0gY2FuCi0JCSAqIGluY3JlYXNlIGJleW9uZCB0aGUgY3VycmVudCBtKQotCQkgKi8KLQkJaWYgKHIgJiBEUExMX01VTFRfVU5ERVJGTE9XKQotCQkJYnJlYWs7CisJCQkvKiBXZSBmb3VuZCBnb29kIHNldHRpbmdzIC0tIGJhaWwgb3V0IG5vdyAqLworCQkJaWYgKG1pbl9lIDw9IGRkLT5yYXRlX3RvbGVyYW5jZSkKKwkJCQlicmVhazsKKwkJfQogCX0KIAogCWlmIChtaW5fZSA8IDApIHsKQEAgLTk0NCwxNyArMTAwNywxNyBAQAogCQlyZXR1cm4gfjA7CiAJfQogCi0JY2xrLT5kcGxsX2RhdGEtPmxhc3Rfcm91bmRlZF9tID0gbWluX2VfbTsKLQljbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX24gPSBtaW5fZV9uOwotCWNsay0+ZHBsbF9kYXRhLT5sYXN0X3JvdW5kZWRfcmF0ZSA9Ci0JCV9kcGxsX2NvbXB1dGVfbmV3X3JhdGUoY2xrLT5wYXJlbnQtPnJhdGUsIG1pbl9lX20sICBtaW5fZV9uKTsKKwlkZC0+bGFzdF9yb3VuZGVkX20gPSBtaW5fZV9tOworCWRkLT5sYXN0X3JvdW5kZWRfbiA9IG1pbl9lX247CisJZGQtPmxhc3Rfcm91bmRlZF9yYXRlID0gX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZShkZC0+Y2xrX3JlZi0+cmF0ZSwKKwkJCQkJCSAgICAgICBtaW5fZV9tLCAgbWluX2Vfbik7CiAKIAlwcl9kZWJ1ZygiY2xvY2s6IGZpbmFsIGxlYXN0IGVycm9yOiBlID0gJWQsIG0gPSAlZCwgbiA9ICVkXG4iLAogCQkgbWluX2UsIG1pbl9lX20sIG1pbl9lX24pOwogCXByX2RlYnVnKCJjbG9jazogZmluYWwgcmF0ZTogJWxkICAodGFyZ2V0IHJhdGU6ICVsZClcbiIsCi0JCSBjbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX3JhdGUsIHRhcmdldF9yYXRlKTsKKwkJIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSwgdGFyZ2V0X3JhdGUpOwogCi0JcmV0dXJuIGNsay0+ZHBsbF9kYXRhLT5sYXN0X3JvdW5kZWRfcmF0ZTsKKwlyZXR1cm4gZGQtPmxhc3Rfcm91bmRlZF9yYXRlOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk3Myw2ICsxMDM2LDEwIEBACiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiXG4iLCBjbGstPm5hbWUpOwotCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlvbWFwMl9jbGtfZW5hYmxlKGNsayk7CisJCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisJfSBlbHNlCisJCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggMWZiMzMwZS4uMjY3OWRkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMjEsMTMgKzIxLDI4IEBACiAvKiBUaGUgbWF4aW11bSBlcnJvciBiZXR3ZWVuIGEgdGFyZ2V0IERQTEwgcmF0ZSBhbmQgdGhlIHJvdW5kZWQgcmF0ZSBpbiBIeiAqLwogI2RlZmluZSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UJNTAwMDAKIAorLyogQ01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDIGJpdHMgKDJYWFgpICovCisjZGVmaW5lIENPUkVfQ0xLX1NSQ18zMksJCTB4MAorI2RlZmluZSBDT1JFX0NMS19TUkNfRFBMTAkJMHgxCisjZGVmaW5lIENPUkVfQ0xLX1NSQ19EUExMX1gyCQkweDIKKworLyogT01BUDJ4eHggQ01fQ0xLRU5fUExMLkVOX0RQTEwgYml0cyAtIGZvciBvbWFwMl9nZXRfZHBsbF9yYXRlKCkgKi8KKyNkZWZpbmUgT01BUDJYWFhfRU5fRFBMTF9MUEJZUEFTUwkJMHgxCisjZGVmaW5lIE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MJCTB4MgorI2RlZmluZSBPTUFQMlhYWF9FTl9EUExMX0xPQ0tFRAkJCTB4MworCisvKiBPTUFQM3h4eCBDTV9DTEtFTl9QTEwqLkVOXypfRFBMTCBiaXRzIC0gZm9yIG9tYXAyX2dldF9kcGxsX3JhdGUoKSAqLworI2RlZmluZSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTCQkweDUKKyNkZWZpbmUgT01BUDNYWFhfRU5fRFBMTF9GUkJZUEFTUwkJMHg2CisjZGVmaW5lIE9NQVAzWFhYX0VOX0RQTExfTE9DS0VECQkJMHg3CisKIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIGludCBvbWFwMl9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogaW50IG9tYXAyX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqbmV3X3BhcmVudCk7Ci1pbnQgb21hcDJfZHBsbF9yYXRlX3RvbGVyYW5jZV9zZXQoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBpbnQgdG9sZXJhbmNlKTsKK2ludCBvbWFwMl9kcGxsX3NldF9yYXRlX3RvbGVyYW5jZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGludCB0b2xlcmFuY2UpOwogbG9uZyBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKTsKIAogI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwpAQCAtMzYsNyArNTEsNyBAQAogI2RlZmluZSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQJTlVMTAogI2VuZGlmCiAKLXZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwordW5zaWduZWQgbG9uZyBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2luaXRfY2xrX2Nsa2RtKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2luaXRfY2xrc2VsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwogdTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspOwpAQCAtNDQsMTMgKzU5LDE2IEBACiAJCQkJdTMyICpuZXdfZGl2KTsKIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpOwogdTMyIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyIGRpdik7Ci12b2lkIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Cit1bnNpZ25lZCBsb25nIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CiBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKmNsayk7CiBpbnQgb21hcDJfd2FpdF9jbG9ja19yZWFkeSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIGN2YWwsIGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdF93YWl0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2RmbHQ7CisKIGV4dGVybiB1OCBjcHVfbWFzazsKIAogLyogY2xrc2VsX3JhdGUgZGF0YSBjb21tb24gdG8gMjR4eC8zNDN4ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYwppbmRleCBkMzgyZWIwLi4xZTgzOWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKQEAgLTMxLDE1ICszMSwxOTIgQEAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCi0jaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazI0eHguaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29zY2NrOworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2ZpeGVkOworCisjaW5jbHVkZSAiY2xvY2syNHh4LmgiCisKK3N0cnVjdCBvbWFwX2NsayB7CisJdTMyCQljcHU7CisJc3RydWN0IGNsa19sb29rdXAgbGs7Cit9OworCisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2ssIGNwKSAJCVwKKwl7CQkJCVwKKwkJIC5jcHUgPSBjcCwJCVwKKwkJLmxrID0gewkJCVwKKwkJCS5kZXZfaWQgPSBkZXYsCVwKKwkJCS5jb25faWQgPSBjb24sCVwKKwkJCS5jbGsgPSBjaywJXAorCQl9LAkJCVwKKwl9CisKKyNkZWZpbmUgQ0tfMjQzWAkoMSA8PCAwKQorI2RlZmluZSBDS18yNDJYCSgxIDw8IDEpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDI0eHhfY2xrc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY18zMmtfY2siLAkmZnVuY18zMmtfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jayIsCSZzeXNfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhcGxsOTZfY2siLAkmYXBsbDk2X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KKwlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZnVuY18xMm1fY2siLAkmZnVuY18xMm1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dCIsCSZzeXNfY2xrb3V0LAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0Ml9zcmMiLCAmc3lzX2Nsa291dDJfc3JjLCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVtdWxfY2siLAkmZW11bF9jaywJQ0tfMjQyWCksCisJLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3BfaXJhdGVfaWNrIiwgJmRzcF9pcmF0ZV9pY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzcF9pY2siLAkmZHNwX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCisJLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJnZnhfaWNrIiwJJmdmeF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtZG1faWNrIiwJJm1kbV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkibWRtX29zY19jayIsCSZtZG1fb3NjX2NrLAlDS18yNDNYKSwKKwkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNzX2ljayIsCSZkc3NfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3MxX2ZjayIsCSZkc3MxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZHNzMl9mY2siLAkmZHNzMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzc181NG1fZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogTDMgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzc2lfZmNrIiwJJnNzaV9zc3Jfc3N0X2ZjaywgQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogTDQgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KKwlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KKwlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNSIsICJpY2siLAkmbWNic3A1X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJpY2siLAkmbWNzcGkxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJmY2siLAkmbWNzcGkyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ljayIsCSZ1YXJ0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ZjayIsCSZ1YXJ0Ml9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwaW9zX2ljayIsCSZncGlvc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmbXB1X3dkdF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJvbWFwY3RybF9pY2siLAkmb21hcGN0cmxfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAyNHh4Y2FtIiwgImljayIsCSZjYW1faWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ3ZHQ0X2ZjayIsCSZ3ZHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJm1tY19pY2ssCUNLXzI0MlgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tY19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZmFjX2ljayIsCSZmYWNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmYWNfZmNrIiwJJmZhY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzZG1hX2ljayIsCSZzZG1hX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidmx5bnFfaWNrIiwJJnZseW5xX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ2bHlucV9mY2siLAkmdmx5bnFfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkcmNfaWNrIiwJJnNkcmNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImRlc19pY2siLAkmZGVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFlc19pY2siLAkmYWVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVzYmhzX2ljayIsCSZ1c2Joc19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9mY2siLAkmZ3BpbzVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9pbnRjX2ljayIsCSZtZG1faW50Y19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgIm1tY2hzZGJfZmNrIiwgCSZtbWNoc2RiMl9mY2ssCUNLXzI0M1gpLAorfTsKKwogLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLwogI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCiAjZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMwpAQCAtNTksMTkgKzIzNiwzMiBAQAogICogT21hcDI0eHggc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBUaGlzIGFjdHVhbGx5IHJldHVybnMgdGhlIHJhdGUgb2YgY29yZV9jaywgbm90IGRwbGxfY2suICovCi1zdGF0aWMgdTMyIG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eChzdHJ1Y3QgY2xrICp0Y2xrKQorLyoqCisgKiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSAtIHJldHVybiB0aGUgQ09SRV9DTEsgcmF0ZQorICogQGNsazogcG9pbnRlciB0byB0aGUgY29tYmluZWQgZHBsbF9jayArIGNvcmVfY2sgKGN1cnJlbnRseSAiZHBsbF9jayIpCisgKgorICogUmV0dXJucyB0aGUgQ09SRV9DTEsgcmF0ZS4gIENPUkVfQ0xLIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSByYXRlCisgKiBzb3VyY2VzIG9uIE9NQVAyeHh4OiB0aGUgRFBMTCBDTEtPVVQgcmF0ZSwgRFBMTCBDTEtPVVRYMiwgb3IgMzJLSHoKKyAqICh0aGUgbGF0dGVyIGlzIHVudXN1YWwpLiAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoCisgKiBzdHJ1Y3QgY2xrICpkcGxsX2NrLCB3aGljaCBpcyBhIGNvbXBvc2l0ZSBjbG9jayBvZiBkcGxsX2NrIGFuZAorICogY29yZV9jay4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoc3RydWN0IGNsayAqY2xrKQogewotCWxvbmcgbG9uZyBkcGxsX2NsazsKLQl1OCBhbXVsdDsKKwlsb25nIGxvbmcgY29yZV9jbGs7CisJdTMyIHY7CiAKLQlkcGxsX2NsayA9IG9tYXAyX2dldF9kcGxsX3JhdGUodGNsayk7CisJY29yZV9jbGsgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CiAKLQlhbXVsdCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQlhbXVsdCAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKLQlkcGxsX2NsayAqPSBhbXVsdDsKKwl2ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCXYgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CiAKLQlyZXR1cm4gZHBsbF9jbGs7CisJaWYgKHYgPT0gQ09SRV9DTEtfU1JDXzMySykKKwkJY29yZV9jbGsgPSAzMjc2ODsKKwllbHNlCisJCWNvcmVfY2xrICo9IHY7CisKKwlyZXR1cm4gY29yZV9jbGs7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCkBAIC05Niw2ICsyODYsMTEgQEAKIAkJICAgICAgT01BUDI0WFhfUFJDTV9DTEtTUkNfQ1RSTCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjayA9IHsKKwkuZW5hYmxlCQk9ICZvbWFwMl9lbmFibGVfb3NjX2NrLAorCS5kaXNhYmxlCT0gJm9tYXAyX2Rpc2FibGVfb3NjX2NrLAorfTsKKwogI2lmZGVmIE9MRF9DSwogLyogUmVjYWxjdWxhdGUgU1lTVF9DTEsgKi8KIHN0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCkBAIC0xNDksMTEgKzM0NCwxNiBAQAogCWNtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZml4ZWQgPSB7CisJLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZSwKK307CisKIC8qCiAgKiBVc2VzIHRoZSBjdXJyZW50IHByY20gc2V0IHRvIHRlbGwgaWYgYSByYXRlIGlzIHZhbGlkLgogICogWW91IGNhbiBnbyBzbG93ZXIsIGJ1dCBub3QgZmFzdGVyIHdpdGhpbiBhIGdpdmVuIHJhdGUgc2V0LgogICovCi1sb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKK3N0YXRpYyBsb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKIHsKIAl1MzIgaGlnaCwgbG93LCBjb3JlX2Nsa19zcmM7CiAKQEAgLTE4MiwxMSArMzgyLDkgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoY2xrKTsKLQotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKGNsayk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQpAQCAtMTk1LDIyICszOTMsMTkgQEAKIAl1MzIgYnlwYXNzID0gMDsKIAlzdHJ1Y3QgcHJjbV9jb25maWcgdG1wc2V0OwogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwogCW11bHQgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CiAJbXVsdCAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKIAogCWlmICgocmF0ZSA9PSAoY3VyX3JhdGUgLyAyKSkgJiYgKG11bHQgPT0gMikpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTEwsIDEpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7CiAJfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAJfSBlbHNlIGlmIChyYXRlICE9IGN1cl9yYXRlKSB7CiAJCXZhbGlkX3JhdGUgPSBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHJhdGUpOwogCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQotCQkJZ290byBkcGxsX2V4aXQ7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAobXVsdCA9PSAxKQogCQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKQEAgLTIxOSw3ICs0MTQsNyBAQAogCiAJCWRkID0gY2xrLT5kcGxsX2RhdGE7CiAJCWlmICghZGQpCi0JCQlnb3RvIGRwbGxfZXhpdDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKIAkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsICY9IH4oZGQtPm11bHRfbWFzayB8CkBAIC0yNDUsMjIgKzQ0MCwxOSBAQAogCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLwogCQkJYnlwYXNzID0gMTsKIAotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7IC8qIEZvciBpbml0X21lbSAqLworCQkvKiBGb3Igb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcygpICovCisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKIAogCQkvKiBGb3JjZSBkbGwgbG9jayBtb2RlICovCiAJCW9tYXAyX3NldF9wcmNtKHRtcHNldC5jbV9jbGtzZWwxX3BsbCwgdG1wc2V0LmJhc2Vfc2RyY19yZnIsCiAJCQkgICAgICAgYnlwYXNzKTsKIAogCQkvKiBFcnJhdGE6IHJldCBkbGwgZW50cnkgc3RhdGUgKi8KLQkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisJCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7CiAJfQotCW9tYXAyX2RwbGxjb3JlX3JlY2FsYygmZHBsbF9jayk7Ci0JcmV0ID0gMDsKIAotZHBsbF9leGl0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4ocmV0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNjksOSArNDYxLDkgQEAKICAqCiAgKiBTZXQgdmlydF9wcmNtX3NldCdzIHJhdGUgdG8gdGhlIG1wdV9zcGVlZCBmaWVsZCBvZiB0aGUgY3VycmVudCBQUkNNIHNldC4KICAqLwotc3RhdGljIHZvaWQgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7CisJcmV0dXJuIGN1cnJfcHJjbV9zZXQtPm1wdV9zcGVlZDsKIH0KIAogLyoKQEAgLTMzNywxMiArNTI5LDEyIEBACiAJfQogCiAJY3Vycl9wcmNtX3NldCA9IHByY207Ci0JY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwogCiAJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgLyAyKSB7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTEwsIDEpOwogCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtMzY2LDI3ICs1NTgsNjcgQEAKIAogCQkvKiBNYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KIAkJdG1wID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9DTEtTRUwxKSAmIE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0s7Ci0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwgQ01fQ0xLU0VMMSk7CisJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwKKwkJCQkgQ01fQ0xLU0VMMSk7CisKIAkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQogCQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbWRtLAogCQkJCQkgT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKTsKIAotCQkvKiB4MiB0byBlbnRlciBpbml0X21lbSAqLwotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisJCS8qIHgyIHRvIGVudGVyIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAKIAkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCiAJCQkgICAgICAgYnlwYXNzKTsKIAotCQlvbWFwMl9pbml0X21lbW9yeV9wYXJhbXMob21hcDJfZGxsX2ZvcmNlX25lZWRlZCgpKTsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoZG9uZV9yYXRlLCAwKTsKKwkJb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKIAogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQotCW9tYXAyX2RwbGxjb3JlX3JlY2FsYygmZHBsbF9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQorLyoKKyAqIFdhbGsgUFJDTSByYXRlIHRhYmxlIGFuZCBmaWxsb3V0IGNwdWZyZXEgZnJlcV90YWJsZQorICovCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIGZyZXFfdGFibGVbQVJSQVlfU0laRShyYXRlX3RhYmxlKV07CisKK3ZvaWQgb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJaW50IGkgPSAwOworCisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKworCQkvKiBkb24ndCBwdXQgYnlwYXNzIHJhdGVzIGluIHRhYmxlICovCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQljb250aW51ZTsKKworCQlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKwkJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBwcmNtLT5tcHVfc3BlZWQgLyAxMDAwOworCQlpKys7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZnJlcXVlbmN5ICIKKwkJICAgICAgICJ0YWJsZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CisJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKworCSp0YWJsZSA9ICZmcmVxX3RhYmxlWzBdOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0gewogCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCiAJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLApAQCAtMzk0LDI0ICs2MjYsMjcgQEAKIAkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKIAkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCiAJLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKKyNpZmRlZglDT05GSUdfQ1BVX0ZSRVEKKwkuY2xrX2luaXRfY3B1ZnJlcV90YWJsZQk9IG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyB1MzIgb21hcDJfZ2V0X2FwbGxfY2xraW4odm9pZCkKIHsKLQl1MzIgYXBsbHMsIHNjbGsgPSAwOworCXUzMiBhcGxscywgc3JhdGUgPSAwOwogCiAJYXBsbHMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7CiAJYXBsbHMgJj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSzsKIAlhcGxscyA+Pj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fU0hJRlQ7CiAKIAlpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTlfMk1IWikKLQkJc2NsayA9IDE5MjAwMDAwOworCQlzcmF0ZSA9IDE5MjAwMDAwOwogCWVsc2UgaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzEzTUhaKQotCQlzY2xrID0gMTMwMDAwMDA7CisJCXNyYXRlID0gMTMwMDAwMDA7CiAJZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTJNSFopCi0JCXNjbGsgPSAxMjAwMDAwMDsKKwkJc3JhdGUgPSAxMjAwMDAwMDsKIAotCXJldHVybiBzY2xrOworCXJldHVybiBzcmF0ZTsKIH0KIAogc3RhdGljIHUzMiBvbWFwMl9nZXRfc3lzY2xrZGl2KHZvaWQpCkBAIC00MjUsMTYgKzY2MCwxNCBAQAogCXJldHVybiBkaXY7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBvbWFwMl9nZXRfYXBsbF9jbGtpbigpICogb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIG9tYXAyX2dldF9hcGxsX2Nsa2luKCkgKiBvbWFwMl9nZXRfc3lzY2xrZGl2KCk7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKLQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKIH0KIAogLyoKQEAgLTQ2MCw3ICs2OTMsNyBAQAogCWlmICghbXB1cmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAob21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQorCWlmIChjbGtfc2V0X3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKIAogCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7CkBAIC00NzcsOCArNzEwLDggQEAKIGludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207Ci0Jc3RydWN0IGNsayAqKmNsa3A7Ci0JdTMyIGNsa3JhdGU7CisJc3RydWN0IG9tYXBfY2xrICpjOworCXUzMiBjbGtyYXRlLCBjcHVfbWFzazsKIAogCWlmIChjcHVfaXNfb21hcDI0MngoKSkKIAkJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7CkBAIC00ODcsMjYgKzcyMCwyOCBAQAogCiAJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOwogCi0Jb21hcDJfb3NjX2Nsa19yZWNhbGMoJm9zY19jayk7Ci0Jb21hcDJfc3lzX2Nsa19yZWNhbGMoJnN5c19jayk7CisJb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKKwlzeXNfY2sucmF0ZSA9IG9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOwogCi0JZm9yIChjbGtwID0gb25jaGlwXzI0eHhfY2xrczsKLQkgICAgIGNsa3AgPCBvbmNoaXBfMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfMjR4eF9jbGtzKTsKLQkgICAgIGNsa3ArKykgeworCWZvciAoYyA9IG9tYXAyNHh4X2Nsa3M7IGMgPCBvbWFwMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMjR4eF9jbGtzKTsgYysrKQorCQljbGtfaW5pdF9vbmUoYy0+bGsuY2xrKTsKIAotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQyWCAmJiBjcHVfaXNfb21hcDI0MjAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOworCWNwdV9tYXNrID0gMDsKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCWNwdV9tYXNrIHw9IENLXzI0Mlg7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQljcHVfbWFzayB8PSBDS18yNDNYOworCisJZm9yIChjID0gb21hcDI0eHhfY2xrczsgYyA8IG9tYXAyNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNHh4X2Nsa3MpOyBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgeworCQkJY2xrZGV2X2FkZCgmYy0+bGspOworCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CiAJCX0KIAotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQzWCAmJiBjcHVfaXNfb21hcDI0MzAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotCiAJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCi0JY2xrcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eCgmZHBsbF9jayk7CisJY2xrcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKIAlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgewogCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKaW5kZXggYWQ2ZDk4ZC4uMzNjM2U1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCkBAIC0yNCwxNyArMjQsMTMgQEAKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJzZHJjLmgiCiAKLXN0YXRpYyB2b2lkIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogc3RhdGljIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfY2xrX2ZpeGVkX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfZGlzYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9vc2NfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIGludCBvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogCiAvKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgpAQCAtNjIzLDQxICs2MTksMzUgQEAKIC8qIEJhc2UgZXh0ZXJuYWwgaW5wdXQgY2xvY2tzICovCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzMya19jayA9IHsKIAkubmFtZQkJPSAiZnVuY18zMmtfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDMyMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCiB9OwogCiAvKiBUeXBpY2FsIDEyLzEzTUh6IGluIHN0YW5kYWxvbmUgbW9kZSwgd2lsbCBiZSAyNk1oeiBpbiBjaGFzc2lzIG1vZGUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgKjI2LCAzOC40KU1IeiAqLwogCS5uYW1lCQk9ICJvc2NfY2siLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMsCisJLm9wcwkJPSAmY2xrb3BzX29zY2NrLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGUJCT0gJm9tYXAyX2VuYWJsZV9vc2NfY2ssCi0JLmRpc2FibGUJPSAmb21hcDJfZGlzYWJsZV9vc2NfY2ssCiAJLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCiB9OwogCiAvKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCiAJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9zY19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KIAkubmFtZQkJPSAiYWx0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIAogLyoKQEAgLTY3Myw3ICs2NjMsMTIgQEAKIAkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCiAJLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJCT0gJnN5c19jaywKKwkuY2xrX3JlZgkJPSAmc3lzX2NrLAorCS5jb250cm9sX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawkJPSBPTUFQMjRYWF9FTl9EUExMX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyCQk9IDEwMjQsCisJLm1pbl9kaXZpZGVyCQk9IDEsCiAJLm1heF9kaXZpZGVyCQk9IDE2LAogCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CkBAIC02ODQsMTAgKzY3OSw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGxfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCiAJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKQEAgLTY5NSwzMCArNjg5LDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKIAkubmFtZQkJPSAiYXBsbDk2X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZml4ZWQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5yYXRlCQk9IDk2MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAotCS5lbmFibGUJCT0gJm9tYXAyX2Nsa19maXhlZF9lbmFibGUsCi0JLmRpc2FibGUJPSAmb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7CiAJLm5hbWUJCT0gImFwbGw1NF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2ZpeGVkLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX09OX0lOSVQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fNTRNX1BMTF9TSElGVCwKLQkuZW5hYmxlCQk9ICZvbWFwMl9jbGtfZml4ZWRfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAyX2Nsa19maXhlZF9kaXNhYmxlLAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIAogLyoKQEAgLTc0NSw5ICs3MzMsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKIAkubmFtZQkJPSAiZnVuY181NG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTc1OCw5ICs3NDUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewogCS5uYW1lCQk9ICJjb3JlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtNzg1LDkgKzc3MSw4IEBACiAvKiBUaGUgcGFyZW50IG9mIHRoaXMgY2xvY2sgaXMgbm90IHNlbGVjdGFibGUgb24gMjQyMC4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfOTZtX2NrID0gewogCS5uYW1lCQk9ICJmdW5jXzk2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTgxOCw5ICs4MDMsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKIAkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCkBAIC04MzMsMTAgKzgxNyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2NrID0gewogCS5uYW1lCQk9ICJmdW5jXzEybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZpeGVkX2Rpdgk9IDQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CkBAIC04NDQsOCArODI3LDggQEAKIC8qIFNlY3VyZSB0aW1lciwgb25seSBhdmFpbGFibGUgaW4gc2VjdXJlIG1vZGUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfb3NjX2NrID0gewogCS5uYW1lCQk9ICJja193ZHQxX29zYyIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTg4Nyw5ICs4NzAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKIAkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ0xLT1VUX0VOX1NISUZULApAQCAtOTE4LDkgKzkwMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jbGtvdXRfc3JjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKQEAgLTkzMyw4ICs5MTQsOCBAQAogLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0Ml9zcmMgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQyX3NyYyIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0NMS09VVDJfRU5fU0hJRlQsCkBAIC05NTUsOCArOTM2LDggQEAKIC8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzeXNfY2xrb3V0Ml9zcmMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtPVVQyX0RJVl9NQVNLLApAQCAtOTY4LDggKzk0OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CiAJLm5hbWUJCT0gImVtdWxfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU1VTEFUSU9OX0VOX1NISUZULApAQCAtMTAwMywxMCArOTg0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXB1X2NrID0gewkvKiBDb250cm9sIGNwdSAqLwogCS5uYW1lCQk9ICJtcHVfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfAotCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCiAJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIENNX0NMS1NFTCksCkBAIC0xMDQ2LDkgKzEwMjYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3BfZmNrID0gewogCS5uYW1lCQk9ICJkc3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKQEAgLTEwNzYsOSArMTA1Niw5IEBACiAvKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTS4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pcmF0ZV9pY2sgPSB7CiAJLm5hbWUJCT0gImRzcF9pcmF0ZV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRzcF9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKIAkuY2xrc2VsCQk9IGRzcF9pcmF0ZV9pY2tfY2xrc2VsLApAQCAtMTA5MCw4ICsxMDcwLDkgQEAKIC8qIDI0MjAgb25seSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKIAkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLwogfTsKQEAgLTEwOTksOCArMTA4MCw5IEBACiAvKiAyNDMwIG9ubHkgLSBFTl9EU1AgY29udHJvbHMgYm90aCBkc3AgZmNsayBhbmQgaWNsayBvbiAyNDMwICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfaWNrID0gewogCS5uYW1lCQk9ICJpdmEyXzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRzcF9pcmF0ZV9pY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKIH07CkBAIC0xMTEyLDkgKzEwOTQsOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmExX2lmY2sgPSB7CiAJLm5hbWUJCT0gIml2YTFfaWZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENPTkZJR19QQVJUSUNJUEFOVCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgREVMQVlFRF9BUFAsCisJLmZsYWdzCQk9IENPTkZJR19QQVJUSUNJUEFOVCB8IERFTEFZRURfQVBQLAogCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfQ09QX1NISUZULApAQCAtMTEyOSw4ICsxMTExLDggQEAKIC8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0gewogCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZpdmExX2lmY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfTVBVX1NISUZULApAQCAtMTE3NSwxMCArMTE1Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfY2sgPSB7CS8qIFVzZWQgZm9yIGljayBhbmQgZmNrLCBpbnRlcmNvbm5lY3QgKi8KIAkubmFtZQkJPSAiY29yZV9sM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0wzX01BU0ssCkBAIC0xMjA0LDkgKzExODUsOSBAQAogLyogSXQgaXMgdW5jbGVhciBmcm9tIFRSTSB3aGV0aGVyIHVzYl9sNF9pY2sgaXMgcmVhbGx5IGluIEwzIG9yIEw0IGNsa2RtICovCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewkvKiBGUy1VU0IgaW50ZXJmYWNlIGNsb2NrICovCiAJLm5hbWUJCT0gInVzYl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKQEAgLTEyMzgsOSArMTIxOSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCiAJLm5hbWUJCT0gImw0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCkBAIC0xMjc2LDkgKzEyNTcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX3NzdF9mY2sgPSB7CiAJLm5hbWUJCT0gInNzaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJREVMQVlFRF9BUFAsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKQEAgLTEyOTAsNiArMTI3MSwyMCBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKIH07CiAKKy8qCisgKiBQcmVzdW1hYmx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgU1NJX0lDTEsuCisgKiBUUk0gY29udHJhZGljdHMgaXRzZWxmIG9uIHdoYXQgY2xvY2tkb21haW4gU1NJX0lDTEsgaXMgaW4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKKwkubmFtZQkJPSAic3NpX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKIAogLyoKICAqIEdGWCBjbG9jayBkb21haW4KQEAgLTEzMTIsOCArMTMwNyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8zZF9mY2sgPSB7CiAJLm5hbWUJCT0gImdmeF8zZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKQEAgLTEzMjcsOCArMTMyMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7CiAJLm5hbWUJCT0gImdmeF8yZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKQEAgLTEzNDIsOCArMTMzNyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKQEAgLTEzNzIsOCArMTM2Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLwogCS5uYW1lCQk9ICJtZG1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0NNX0lDTEtFTl9NRE1fRU5fTURNX1NISUZULApAQCAtMTM4Nyw4ICsxMzgzLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKIAkubmFtZQkJPSAibWRtX29zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX09TQ19TSElGVCwKQEAgLTE0MzIsOCArMTQyOCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCkBAIC0xNDQyLDkgKzE0MzgsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlERUxBWUVEX0FQUCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULApAQCAtMTQ3NSw5ICsxNDcxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9mY2sgPSB7CQkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwogCS5uYW1lCQk9ICJkc3MyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAkJLyogZml4ZWQgYXQgc3lzX2NrIG9yIDQ4TUh6ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCURFTEFZRURfQVBQLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCkBAIC0xNDkwLDggKzE0ODYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfNTRtX2ZjayA9IHsJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KIAkubmFtZQkJPSAiZHNzXzU0bV9mY2siLAkvKiA1NG0gdHYgY2xrICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1RWX1NISUZULApAQCAtMTUxOCw4ICsxNTE0LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKQEAgLTE1MjgsOCArMTUyNCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCkBAIC0xNTQ0LDggKzE1NDAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKQEAgLTE1NTQsOCArMTU1MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewogCS5uYW1lCQk9ICJncHQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULApAQCAtMTU2OCw4ICsxNTY0LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCkBAIC0xNTc4LDggKzE1NzQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKQEAgLTE1OTIsOCArMTU4OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfaWNrID0gewogCS5uYW1lCQk9ICJncHQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULApAQCAtMTYwMiw4ICsxNTk4LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCkBAIC0xNjE2LDggKzE2MTIsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKQEAgLTE2MjYsOCArMTYyMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0gewogCS5uYW1lCQk9ICJncHQ1X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULApAQCAtMTY0MCw4ICsxNjM2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCkBAIC0xNjUwLDggKzE2NDYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0Nl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKQEAgLTE2NjQsOCArMTY2MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfaWNrID0gewogCS5uYW1lCQk9ICJncHQ3X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNjczLDggKzE2NjksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0N19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKQEAgLTE2ODcsOCArMTY4Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULApAQCAtMTY5Nyw4ICsxNjkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCkBAIC0xNzExLDggKzE3MDcsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0OV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKQEAgLTE3MjEsOCArMTcxNyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0gewogCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULApAQCAtMTczNSw4ICsxNzMxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCkBAIC0xNzQ1LDggKzE3NDEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKQEAgLTE3NTksOCArMTc1NSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULApAQCAtMTc2OSw4ICsxNzY1LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCkBAIC0xNzgzLDggKzE3NzksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKQEAgLTE3OTMsOCArMTc4OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEyX1NISUZULApAQCAtMTgwNyw5ICsxODAzLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKQEAgLTE4MTgsOSArMTgxNCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCkBAIC0xODI5LDkgKzE4MjUsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULApAQCAtMTg0MCw5ICsxODM2LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMl9TSElGVCwKQEAgLTE4NTEsOSArMTg0Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULApAQCAtMTg2Miw5ICsxODU4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCkBAIC0xODczLDkgKzE4NjksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNF9TSElGVCwKQEAgLTE4ODQsOSArMTg4MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gNCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULApAQCAtMTg5NSw5ICsxODkxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA1LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCkBAIC0xOTA2LDkgKzE5MDIsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDUsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNV9TSElGVCwKQEAgLTE5MTcsMTAgKzE5MTMsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTkyOCw5ICsxOTI0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKQEAgLTE5MzksOSArMTkzNSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCkBAIC0xOTUwLDkgKzE5NDYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULApAQCAtMTk2MSw5ICsxOTU3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCkBAIC0xOTcyLDkgKzE5NjgsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DU1BJM19TSElGVCwKQEAgLTE5ODMsOCArMTk3OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ljayA9IHsKIAkubmFtZQkJPSAidWFydDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULApAQCAtMTk5Myw4ICsxOTg5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCkBAIC0yMDAzLDggKzE5OTksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKQEAgLTIwMTMsOCArMjAwOSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULApAQCAtMjAyMyw4ICsyMDE5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCkBAIC0yMDMzLDggKzIwMjksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKQEAgLTIwNDMsOCArMjAzOSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ljayA9IHsKIAkubmFtZQkJPSAiZ3Bpb3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCkBAIC0yMDUzLDggKzIwNDksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7CiAJLm5hbWUJCT0gImdwaW9zX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULApAQCAtMjA2Myw4ICsyMDU5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9pY2sgPSB7CiAJLm5hbWUJCT0gIm1wdV93ZHRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKQEAgLTIwNzMsOCArMjA2OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfZmNrID0gewogCS5uYW1lCQk9ICJtcHVfd2R0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01QVV9XRFRfU0hJRlQsCkBAIC0yMDgzLDkgKzIwNzksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CiAJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKQEAgLTIwOTQsOCArMjA5MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDFfU0hJRlQsCkBAIC0yMTA0LDkgKzIxMDAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fT01BUENUUkxfU0hJRlQsCkBAIC0yMTE1LDggKzIxMTEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewogCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKQEAgLTIxMjUsOCArMjEyMSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKQEAgLTIxNDAsOCArMjEzNiw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKQEAgLTIxNTAsOCArMjE0Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CiAJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZULApAQCAtMjE2MCw4ICsyMTU2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCkBAIC0yMTcwLDggKzIxNjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKIAkubmFtZQkJPSAid2R0NF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKQEAgLTIxODAsOCArMjE3Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKQEAgLTIxOTAsOCArMjE4Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewogCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKQEAgLTIyMDAsOCArMjE5Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKIAkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULApAQCAtMjIxMCw4ICsyMjA2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0gewogCS5uYW1lCQk9ICJtc3Byb19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCkBAIC0yMjIwLDggKzIyMTYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNfaWNrID0gewogCS5uYW1lCQk9ICJtbWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCkBAIC0yMjMwLDggKzIyMjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0gewogCS5uYW1lCQk9ICJtbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCkBAIC0yMjQwLDggKzIyMzYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewogCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKQEAgLTIyNTAsOCArMjI0Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7CiAJLm5hbWUJCT0gImZhY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULApAQCAtMjI2MCw4ICsyMjU2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKIAkubmFtZQkJPSAiZWFjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULApAQCAtMjI3MCw4ICsyMjY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKIAkubmFtZQkJPSAiZWFjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULApAQCAtMjI4MCw4ICsyMjc2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKIAkubmFtZQkJPSAiaGRxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCkBAIC0yMjkwLDggKzIyODYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewogCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKQEAgLTIzMDAsOSArMjI5Niw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzJfU0hJRlQsCkBAIC0yMzExLDkgKzIzMDcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKQEAgLTIzMjIsOSArMjMxOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMl9TSElGVCwKQEAgLTIzMzMsOSArMjMyOSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCkBAIC0yMzQ0LDkgKzIzNDAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMV9TSElGVCwKQEAgLTIzNTUsOSArMjM1MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMV9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVCwKQEAgLTIzNjYsMzMgKzIzNjIsMzMgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CiAJLm5hbWUJCT0gImdwbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7CiAJLm5hbWUJCT0gInNkbWFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewogCS5uYW1lCQk9ICJzZG1hX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0gewogCS5uYW1lCQk9ICJ2bHlucV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCkBAIC0yNDI2LDggKzI0MjIsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB2bHlucV9mY2sgPSB7CiAJLm5hbWUJCT0gInZseW5xX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBERUxBWUVEX0FQUCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCkBAIC0yNDQyLDggKzI0MzksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKIAkubmFtZQkJPSAic2RyY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1NEUkNfU0hJRlQsCkBAIC0yNDUyLDggKzI0NTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0gewogCS5uYW1lCQk9ICJkZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKQEAgLTI0NjIsOCArMjQ2MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7CiAJLm5hbWUJCT0gInNoYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULApAQCAtMjQ3Miw4ICsyNDcwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKIAkubmFtZQkJPSAicm5nX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9STkdfU0hJRlQsCkBAIC0yNDgyLDggKzI0ODAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0gewogCS5uYW1lCQk9ICJhZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKQEAgLTI0OTIsOCArMjQ5MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CiAJLm5hbWUJCT0gInBrYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULApAQCAtMjUwMiw4ICsyNTAwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCkBAIC0yNTEyLDggKzI1MTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Joc19pY2sgPSB7CiAJLm5hbWUJCT0gInVzYmhzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKQEAgLTI1MjIsOCArMjUyMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULApAQCAtMjUzMiw4ICsyNTMwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jaHNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCkBAIC0yNTQyLDkgKzI1NDAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKQEAgLTI1NTMsOSArMjU1MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNTYzLDggKzI1NjEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCkBAIC0yNTczLDggKzI1NzEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCkBAIC0yNTgzLDggKzI1ODEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7CiAJLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTURNX0lOVENfU0hJRlQsCkBAIC0yNTkzLDggKzI1OTEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzZGJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMV9TSElGVCwKQEAgLTI2MDMsOSArMjYwMSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIyX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jaHNkYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIyX1NISUZULApAQCAtMjYyOCwxNjYgKzI2MjYsMTMgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKIAkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVZJUlRVQUxfQ0xPQ0sgfCBBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkucGFyZW50CQk9ICZtcHVfY2ssCS8qIEluZGV4ZWQgYnkgbXB1IHNwZWVkLCBubyBwYXJlbnQgKi8KIAkucmVjYWxjCQk9ICZvbWFwMl90YWJsZV9tcHVfcmVjYWxjLAkvKiBzZXRzIGFyZSBrZXllZCBvbiBtcHUgcmF0ZSAqLwogCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF8yNHh4X2Nsa3NbXSBfX2luaXRkYXRhID0gewotCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLwotCSZmdW5jXzMya19jaywKLQkmb3NjX2NrLAotCSZzeXNfY2ssCi0JJmFsdF9jaywKLQkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLwotCSZkcGxsX2NrLAotCSZhcGxsOTZfY2ssCi0JJmFwbGw1NF9jaywKLQkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLwotCSZmdW5jXzU0bV9jaywKLQkmY29yZV9jaywKLQkmZnVuY185Nm1fY2ssCi0JJmZ1bmNfNDhtX2NrLAotCSZmdW5jXzEybV9jaywKLQkmd2R0MV9vc2NfY2ssCi0JJnN5c19jbGtvdXRfc3JjLAotCSZzeXNfY2xrb3V0LAotCSZzeXNfY2xrb3V0Ml9zcmMsCi0JJnN5c19jbGtvdXQyLAotCSZlbXVsX2NrLAotCS8qIG1wdSBkb21haW4gY2xvY2tzICovCi0JJm1wdV9jaywKLQkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLwotCSZkc3BfZmNrLAotCSZkc3BfaXJhdGVfaWNrLAotCSZkc3BfaWNrLAkJLyogMjQyeCAqLwotCSZpdmEyXzFfaWNrLAkJLyogMjQzeCAqLwotCSZpdmExX2lmY2ssCQkvKiAyNDJ4ICovCi0JJml2YTFfbXB1X2ludF9pZmNrLAkvKiAyNDJ4ICovCi0JLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KLQkmZ2Z4XzNkX2ZjaywKLQkmZ2Z4XzJkX2ZjaywKLQkmZ2Z4X2ljaywKLQkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCi0JJm1kbV9pY2ssCi0JJm1kbV9vc2NfY2ssCi0JLyogRFNTIGRvbWFpbiBjbG9ja3MgKi8KLQkmZHNzX2ljaywKLQkmZHNzMV9mY2ssCi0JJmRzczJfZmNrLAotCSZkc3NfNTRtX2ZjaywKLQkvKiBMMyBkb21haW4gY2xvY2tzICovCi0JJmNvcmVfbDNfY2ssCi0JJnNzaV9zc3Jfc3N0X2ZjaywKLQkmdXNiX2w0X2ljaywKLQkvKiBMNCBkb21haW4gY2xvY2tzICovCi0JJmw0X2NrLAkJCS8qIHVzZWQgYXMgYm90aCBjb3JlX2w0IGFuZCB3dV9sNCAqLwotCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLwotCSZ2aXJ0X3ByY21fc2V0LAotCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KLQkmZ3B0MV9pY2ssCi0JJmdwdDFfZmNrLAotCSZncHQyX2ljaywKLQkmZ3B0Ml9mY2ssCi0JJmdwdDNfaWNrLAotCSZncHQzX2ZjaywKLQkmZ3B0NF9pY2ssCi0JJmdwdDRfZmNrLAotCSZncHQ1X2ljaywKLQkmZ3B0NV9mY2ssCi0JJmdwdDZfaWNrLAotCSZncHQ2X2ZjaywKLQkmZ3B0N19pY2ssCi0JJmdwdDdfZmNrLAotCSZncHQ4X2ljaywKLQkmZ3B0OF9mY2ssCi0JJmdwdDlfaWNrLAotCSZncHQ5X2ZjaywKLQkmZ3B0MTBfaWNrLAotCSZncHQxMF9mY2ssCi0JJmdwdDExX2ljaywKLQkmZ3B0MTFfZmNrLAotCSZncHQxMl9pY2ssCi0JJmdwdDEyX2ZjaywKLQkmbWNic3AxX2ljaywKLQkmbWNic3AxX2ZjaywKLQkmbWNic3AyX2ljaywKLQkmbWNic3AyX2ZjaywKLQkmbWNic3AzX2ljaywKLQkmbWNic3AzX2ZjaywKLQkmbWNic3A0X2ljaywKLQkmbWNic3A0X2ZjaywKLQkmbWNic3A1X2ljaywKLQkmbWNic3A1X2ZjaywKLQkmbWNzcGkxX2ljaywKLQkmbWNzcGkxX2ZjaywKLQkmbWNzcGkyX2ljaywKLQkmbWNzcGkyX2ZjaywKLQkmbWNzcGkzX2ljaywKLQkmbWNzcGkzX2ZjaywKLQkmdWFydDFfaWNrLAotCSZ1YXJ0MV9mY2ssCi0JJnVhcnQyX2ljaywKLQkmdWFydDJfZmNrLAotCSZ1YXJ0M19pY2ssCi0JJnVhcnQzX2ZjaywKLQkmZ3Bpb3NfaWNrLAotCSZncGlvc19mY2ssCi0JJm1wdV93ZHRfaWNrLAotCSZtcHVfd2R0X2ZjaywKLQkmc3luY18zMmtfaWNrLAotCSZ3ZHQxX2ljaywKLQkmb21hcGN0cmxfaWNrLAotCSZpY3JfaWNrLAotCSZjYW1fZmNrLAotCSZjYW1faWNrLAotCSZtYWlsYm94ZXNfaWNrLAotCSZ3ZHQ0X2ljaywKLQkmd2R0NF9mY2ssCi0JJndkdDNfaWNrLAotCSZ3ZHQzX2ZjaywKLQkmbXNwcm9faWNrLAotCSZtc3Byb19mY2ssCi0JJm1tY19pY2ssCi0JJm1tY19mY2ssCi0JJmZhY19pY2ssCi0JJmZhY19mY2ssCi0JJmVhY19pY2ssCi0JJmVhY19mY2ssCi0JJmhkcV9pY2ssCi0JJmhkcV9mY2ssCi0JJmkyYzFfaWNrLAotCSZpMmMxX2ZjaywKLQkmaTJjaHMxX2ZjaywKLQkmaTJjMl9pY2ssCi0JJmkyYzJfZmNrLAotCSZpMmNoczJfZmNrLAotCSZncG1jX2ZjaywKLQkmc2RtYV9mY2ssCi0JJnNkbWFfaWNrLAotCSZ2bHlucV9pY2ssCi0JJnZseW5xX2ZjaywKLQkmc2RyY19pY2ssCi0JJmRlc19pY2ssCi0JJnNoYV9pY2ssCi0JJnJuZ19pY2ssCi0JJmFlc19pY2ssCi0JJnBrYV9pY2ssCi0JJnVzYl9mY2ssCi0JJnVzYmhzX2ljaywKLQkmbW1jaHMxX2ljaywKLQkmbW1jaHMxX2ZjaywKLQkmbW1jaHMyX2ljaywKLQkmbW1jaHMyX2ZjaywKLQkmZ3BpbzVfaWNrLAotCSZncGlvNV9mY2ssCi0JJm1kbV9pbnRjX2ljaywKLQkmbW1jaHNkYjFfZmNrLAotCSZtbWNoc2RiMl9mY2ssCi19OwotCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggMzFiYjcwMS4uMGExNGRjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0zMCwxNSArMzAsMjUxIEBACiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAotI2luY2x1ZGUgIm1lbW9yeS5oIgorI2luY2x1ZGUgPG1hY2gvc2RyYy5oPgogI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY2xvY2szNHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzOworCisjaW5jbHVkZSAiY2xvY2szNHh4LmgiCisKK3N0cnVjdCBvbWFwX2NsayB7CisJdTMyCQljcHU7CisJc3RydWN0IGNsa19sb29rdXAgbGs7Cit9OworCisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2ssIGNwKSAJCVwKKwl7CQkJCVwKKwkJIC5jcHUgPSBjcCwJCVwKKwkJLmxrID0gewkJCVwKKwkJCS5kZXZfaWQgPSBkZXYsCVwKKwkJCS5jb25faWQgPSBjb24sCVwKKwkJCS5jbGsgPSBjaywJXAorCQl9LAkJCVwKKwl9CisKKyNkZWZpbmUgQ0tfMzQzWAkJKDEgPDwgMCkKKyNkZWZpbmUgQ0tfMzQzMEVTMQkoMSA8PCAxKQorI2RlZmluZSBDS18zNDMwRVMyCSgxIDw8IDIpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDM0eHhfY2xrc1tdID0geworCUNMSyhOVUxMLAkib21hcF8zMmtfZmNrIiwJJm9tYXBfMzJrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEybV9jayIsCSZ2aXJ0XzEybV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEzbV9jayIsCSZ2aXJ0XzEzbV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzE2XzhtX2NrIiwgJnZpcnRfMTZfOG1fY2ssIENLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidmlydF8xOV8ybV9jayIsICZ2aXJ0XzE5XzJtX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMjZtX2NrIiwJJnZpcnRfMjZtX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMzhfNG1fY2siLCAmdmlydF8zOF80bV9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvc2Nfc3lzX2NrIiwJJm9zY19zeXNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzeXNfYWx0Y2xrIiwJJnN5c19hbHRjbGssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibWNic3BfY2xrcyIsCSZtY2JzcF9jbGtzLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQxIiwJJnN5c19jbGtvdXQxLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwxX2NrIiwJJmRwbGwxX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gyX2NrIiwJJmRwbGwxX3gyX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gybTJfY2siLCAmZHBsbDFfeDJtMl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9jayIsCSZkcGxsMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9tMl9jayIsCSZkcGxsMl9tMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19jayIsCSZkcGxsM19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfeDJfY2siLAkmZHBsbDNfeDJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJfY2siLAkmZHBsbDNfbTJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJ4Ml9jayIsICZkcGxsM19tMngyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zX2NrIiwJJmRwbGwzX20zX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zeDJfY2siLCAmZHBsbDNfbTN4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJlbXVfY29yZV9hbHdvbl9jayIsICZlbXVfY29yZV9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9jayIsCSZkcGxsNF9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF94Ml9jayIsCSZkcGxsNF94Ml9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzk2bV9hbHdvbl9mY2siLCAmb21hcF85Nm1fYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfOTZtX2ZjayIsCSZvbWFwXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY21fOTZtX2ZjayIsCSZjbV85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfNTRtX2ZjayIsCSZvbWFwXzU0bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF80OG1fZmNrIiwJJm9tYXBfNDhtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzEybV9mY2siLAkmb21hcF8xMm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20yX2NrIiwJJmRwbGw0X20yX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20yeDJfY2siLCAmZHBsbDRfbTJ4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tM19jayIsCSZkcGxsNF9tM19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tM3gyX2NrIiwgJmRwbGw0X20zeDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTRfY2siLAkmZHBsbDRfbTRfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTR4Ml9jayIsICZkcGxsNF9tNHgyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X201X2NrIiwJJmRwbGw0X201X2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X201eDJfY2siLCAmZHBsbDRfbTV4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNl9jayIsCSZkcGxsNF9tNl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNngyX2NrIiwgJmRwbGw0X202eDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZW11X3Blcl9hbHdvbl9jayIsICZlbXVfcGVyX2Fsd29uX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw1X2NrIiwJJmRwbGw1X2NrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImRwbGw1X20yX2NrIiwJJmRwbGw1X20yX2NrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImNsa291dDJfc3JjX2NrIiwgJmNsa291dDJfc3JjX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNvcmV4Ml9mY2siLAkmY29yZXgyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMV9mY2siLAkmZHBsbDFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiYXJtX2ZjayIsCSZhcm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImVtdV9tcHVfYWx3b25fY2siLCAmZW11X21wdV9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9mY2siLAkmZHBsbDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIml2YTJfY2siLAkmaXZhMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJsM19pY2siLAkmbDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImw0X2ljayIsCSZsNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicm1faWNrIiwJJnJtX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJnZnhfbDNfY2siLAkmZ2Z4X2wzX2NrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9sM19mY2siLAkmZ2Z4X2wzX2ZjaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfbDNfaWNrIiwJJmdmeF9sM19pY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2NnMV9jayIsCSZnZnhfY2cxX2NrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9jZzJfY2siLAkmZ2Z4X2NnMl9jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzZ3hfZmNrIiwJJnNneF9mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic2d4X2ljayIsCSZzZ3hfaWNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImQyZF8yNm1fZmNrIiwJJmQyZF8yNm1fZmNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjcGVmdXNlX2ZjayIsCSZjcGVmdXNlX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ0c19mY2siLAkmdHNfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJjb3JlXzk2bV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCSZtbWNoczNfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlXzQ4bV9mY2siLAkmY29yZV80OG1fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiZmNrIiwJJm1jc3BpNF9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImZzaG9zdHVzYl9mY2siLCAmZnNob3N0dXNiX2ZjaywgQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJjb3JlXzEybV9mY2siLAkmY29yZV8xMm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiZmNrIiwJJmhkcV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX3Nzcl9mY2siLAkmc3NpX3Nzcl9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9sM19pY2siLAkmY29yZV9sM19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiaHNvdGd1c2JfaWNrIiwJJmhzb3RndXNiX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzZHJjX2ljayIsCSZzZHJjX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sM19pY2siLCAmc2VjdXJpdHlfbDNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlX2w0X2ljayIsCSZjb3JlX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJJm1tY2hzM19pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImFlczJfaWNrIiwJJmFlczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTEyX2ljayIsCSZzaGExMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMl9pY2siLAkmZGVzMl9pY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiaWNrIiwJJm1jc3BpNF9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMyIsICJpY2siLAkmaTJjM19pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiaWNrIiwJJm1jYnNwNV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImZhY19pY2siLAkmZmFjX2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sNF9pY2syIiwgJnNlY3VyaXR5X2w0X2ljazIsIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiYWVzMV9pY2siLAkmYWVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9ybmciLAkiaWNrIiwJCSZybmdfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTExX2ljayIsCSZzaGExMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMV9pY2siLAkmZGVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHNzMV9hbHdvbl9mY2siLCAmZHNzMV9hbHdvbl9mY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHNzX3R2X2ZjayIsCSZkc3NfdHZfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzc185Nm1fZmNrIiwJJmRzc185Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzczJfYWx3b25fZmNrIiwgJmRzczJfYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzc19pY2siLAkmZHNzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjYW1fbWNsayIsCSZjYW1fbWNsaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjYW1faWNrIiwJJmNhbV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY3NpMl85Nm1fZmNrIiwJJmNzaTJfOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2Job3N0XzEyMG1fZmNrIiwgJnVzYmhvc3RfMTIwbV9mY2ssIENLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNiaG9zdF80OG1fZmNrIiwgJnVzYmhvc3RfNDhtX2ZjaywgQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ1c2Job3N0X2ljayIsCSZ1c2Job3N0X2ljaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ1c2ltX2ZjayIsCSZ1c2ltX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3a3VwXzMya19mY2siLAkmd2t1cF8zMmtfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2RiY2siLAkmZ3BpbzFfZGJjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJJndkdDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndrdXBfbDRfaWNrIiwJJndrdXBfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVzaW1faWNrIiwJJnVzaW1faWNrLAlDS18zNDMwRVMyKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmd2R0Ml9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0MV9pY2siLAkmd2R0MV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzFfaWNrIiwJJmdwaW8xX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzMya3N5bmNfaWNrIiwgJm9tYXBfMzJrc3luY19pY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTJfaWNrIiwJJmdwdDEyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQxX2ljayIsCSZncHQxX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwZXJfOTZtX2ZjayIsCSZwZXJfOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwZXJfNDhtX2ZjayIsCSZwZXJfNDhtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19mY2siLAkmdWFydDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfZmNrIiwJJmdwdDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfZmNrIiwJJmdwdDRfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfZmNrIiwJJmdwdDZfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfZmNrIiwJJmdwdDdfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfZmNrIiwJJmdwdDlfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBlcl8zMmtfYWx3b25fZmNrIiwgJnBlcl8zMmtfYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW82X2RiY2siLAkmZ3BpbzZfZGJjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9kYmNrIiwJJmdwaW81X2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzRfZGJjayIsCSZncGlvNF9kYmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8zX2RiY2siLAkmZ3BpbzNfZGJjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9kYmNrIiwJJmdwaW8yX2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGVyX2w0X2ljayIsCSZwZXJfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW82X2ljayIsCSZncGlvNl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNF9pY2siLAkmZ3BpbzRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8zX2ljayIsCSZncGlvM19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzJfaWNrIiwJJmdwaW8yX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2ljayIsCSZ3ZHQzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19pY2siLAkmdWFydDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfaWNrIiwJJmdwdDlfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJJmdwdDhfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfaWNrIiwJJmdwdDZfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJJmdwdDVfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfaWNrIiwJJmdwdDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJJmdwdDJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmbWNic3AyX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJm1jYnNwM19pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImljayIsCSZtY2JzcDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiZmNrIiwJJm1jYnNwM19mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImVtdV9zcmNfY2siLAkmZW11X3NyY19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwY2xrX2ZjayIsCSZwY2xrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwY2xreDJfZmNrIiwJJnBjbGt4Ml9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiYXRjbGtfZmNrIiwJJmF0Y2xrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ0cmFjZWNsa19zcmNfZmNrIiwgJnRyYWNlY2xrX3NyY19mY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkidHJhY2VjbGtfZmNrIiwJJnRyYWNlY2xrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzcjFfZmNrIiwJJnNyMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3IyX2ZjayIsCSZzcjJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNyX2w0X2ljayIsCSZzcl9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2VjdXJlXzMya19mY2siLCAmc2VjdXJlXzMya19mY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ZjayIsCSZ3ZHQxX2ZjaywJQ0tfMzQzWCksCit9OworCiAvKiBDTV9BVVRPSURMRV9QTEwqLkFVVE9fKiBiaXQgdmFsdWVzICovCiAjZGVmaW5lIERQTExfQVVUT0lETEVfRElTQUJMRQkJCTB4MAogI2RlZmluZSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QCQkweDEKQEAgLTUxLDExICsyODcsOSBAQAogICoKICAqIFJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgdGhlIERQTEwgcmF0ZS4KICAqLwotc3RhdGljIHZvaWQgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKLQotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKIH0KIAogLyogX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4gLSB3cml0ZSBjbGtlbl9iaXRzIGFyZyB0byBhIERQTEwncyBlbmFibGUgYml0cyAqLwpAQCAtNzgsMTQgKzMxMiwxMiBAQAogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwogCWludCBpID0gMDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQl1MzIgaWRsZXN0X21hc2s7CiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCi0Jc3RhdGUgPDw9IGRkLT5pZGxlc3RfYml0OwotCWlkbGVzdF9tYXNrID0gMSA8PCBkZC0+aWRsZXN0X2JpdDsKKwlzdGF0ZSA8PD0gX19mZnMoZGQtPmlkbGVzdF9tYXNrKTsKIAotCXdoaWxlICgoKF9fcmF3X3JlYWRsKGRkLT5pZGxlc3RfcmVnKSAmIGlkbGVzdF9tYXNrKSAhPSBzdGF0ZSkgJiYKKwl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBkZC0+aWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgogCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgewogCQlpKys7CiAJCXVkZWxheSgxKTsKQEAgLTEwNCw2ICszMzYsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBGcm9tIDM0MzAgVFJNIEVTMiA0LjcuNi4yICovCitzdGF0aWMgdTE2IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCit7CisJdW5zaWduZWQgbG9uZyBmaW50OworCXUxNiBmID0gMDsKKworCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIChuICsgMSk7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IGZpbnQgaXMgJWx1XG4iLCBmaW50KTsKKworCWlmIChmaW50ID49IDc1MDAwMCAmJiBmaW50IDw9IDEwMDAwMDApCisJCWYgPSAweDM7CisJZWxzZSBpZiAoZmludCA+IDEwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwKQorCQlmID0gMHg0OworCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwICYmIGZpbnQgPD0gMTUwMDAwMCkKKwkJZiA9IDB4NTsKKwllbHNlIGlmIChmaW50ID4gMTUwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDApCisJCWYgPSAweDY7CisJZWxzZSBpZiAoZmludCA+IDE3NTAwMDAgJiYgZmludCA8PSAyMTAwMDAwKQorCQlmID0gMHg3OworCWVsc2UgaWYgKGZpbnQgPiA3NTAwMDAwICYmIGZpbnQgPD0gMTAwMDAwMDApCisJCWYgPSAweEI7CisJZWxzZSBpZiAoZmludCA+IDEwMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMDApCisJCWYgPSAweEM7CisJZWxzZSBpZiAoZmludCA+IDEyNTAwMDAwICYmIGZpbnQgPD0gMTUwMDAwMDApCisJCWYgPSAweEQ7CisJZWxzZSBpZiAoZmludCA+IDE1MDAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMDApCisJCWYgPSAweEU7CisJZWxzZSBpZiAoZmludCA+IDE3NTAwMDAwICYmIGZpbnQgPD0gMjEwMDAwMDApCisJCWYgPSAweEY7CisJZWxzZQorCQlwcl9kZWJ1ZygiY2xvY2s6IHVua25vd24gZnJlcXNlbCBzZXR0aW5nIGZvciAlZFxuIiwgbik7CisKKwlyZXR1cm4gZjsKK30KKwogLyogTm9uLUNPUkUgRFBMTCAoZS5nLiwgRFBMTHMgdGhhdCBkbyBub3QgY29udHJvbCBTRFJDKSBjbG9jayBmdW5jdGlvbnMgKi8KIAogLyoKQEAgLTEyOCwyNSArMzk2LDIwIEBACiAKIAlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOwogCisJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKKwogCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT0NLRUQpOwogCi0JaWYgKGFpKSB7Ci0JCS8qCi0JCSAqIElmIG5vIGRvd25zdHJlYW0gY2xvY2tzIGFyZSBlbmFibGVkLCBDTV9JRExFU1QgYml0Ci0JCSAqIG1heSBuZXZlciBiZWNvbWUgYWN0aXZlLCBzbyBkb24ndCB3YWl0IGZvciBEUExMIHRvIGxvY2suCi0JCSAqLwotCQlyID0gMDsKKwlyID0gX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoY2xrLCAxKTsKKworCWlmIChhaSkKIAkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7Ci0JfSBlbHNlIHsKLQkJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMSk7Ci0JCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7Ci0JfTsKIAogCXJldHVybiByOwogfQogCiAvKgotICogb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyAtIGluc3RydWN0IGEgRFBMTCB0byBieXBhc3MgYW5kIHdhaXQgZm9yIHJlYWRpbmVzcworICogX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MgLSBpbnN0cnVjdCBhIERQTEwgdG8gYnlwYXNzIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKICAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKICAqCiAgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBieXBhc3MgbW9kZS4gIEluCkBAIC0yMzYsMTQgKzQ5OSwyNSBAQAogc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpbnQgcjsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKIAogCWlmIChjbGsgPT0gJmRwbGwzX2NrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbGstPnBhcmVudC0+cmF0ZSA9PSBjbGtfZ2V0X3JhdGUoY2xrKSkKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+cmF0ZSA9PSBkZC0+Y2xrX2J5cGFzcy0+cmF0ZSkgeworCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfYnlwYXNzKTsKIAkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7Ci0JZWxzZQorCX0gZWxzZSB7CisJCVdBUk5fT04oY2xrLT5wYXJlbnQgIT0gZGQtPmNsa19yZWYpOwogCQlyID0gX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisJfQorCS8qIEZJWE1FOiB0aGlzIGlzIGR1YmlvdXMgLSBpZiBjbGstPnJhdGUgaGFzIGNoYW5nZWQsIHdoYXQgYWJvdXQgcHJvcGFnYXRpbmc/ICovCisJaWYgKCFyKQorCQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTI3MCw2ICs1NDQsMjE1IEBACiAJX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKGNsayk7CiB9CiAKKworLyogTm9uLUNPUkUgRFBMTCByYXRlIHNldCBjb2RlICovCisKKy8qCisgKiBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbSAtIHNldCBub24tY29yZSBEUExMIE0sTiB2YWx1ZXMgZGlyZWN0bHkKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQG06IERQTEwgbXVsdGlwbGllciB0byBzZXQKKyAqIEBuOiBEUExMIGRpdmlkZXIgdG8gc2V0CisgKiBAZnJlcXNlbDogRlJFUVNFTCB2YWx1ZSB0byBzZXQKKyAqCisgKiBQcm9ncmFtIHRoZSBEUExMIHdpdGggdGhlIHN1cHBsaWVkIE0sIE4gdmFsdWVzLCBhbmQgd2FpdCBmb3IgdGhlIERQTEwgdG8KKyAqIGxvY2suLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKHN0cnVjdCBjbGsgKmNsaywgdTE2IG0sIHU4IG4sIHUxNiBmcmVxc2VsKQoreworCXN0cnVjdCBkcGxsX2RhdGEgKmRkID0gY2xrLT5kcGxsX2RhdGE7CisJdTMyIHY7CisKKwkvKiAzNDMwIEVTMiBUUk06IDQuNy42LjkgRFBMTCBQcm9ncmFtbWluZyBTZXF1ZW5jZSAqLworCV9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisKKwkvKiBTZXQgaml0dGVyIGNvcnJlY3Rpb24gKi8KKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwl2ICY9IH5kZC0+ZnJlcXNlbF9tYXNrOworCXYgfD0gZnJlcXNlbCA8PCBfX2ZmcyhkZC0+ZnJlcXNlbF9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmNvbnRyb2xfcmVnKTsKKworCS8qIFNldCBEUExMIG11bHRpcGxpZXIsIGRpdmlkZXIgKi8KKwl2ID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOworCXYgJj0gfihkZC0+bXVsdF9tYXNrIHwgZGQtPmRpdjFfbWFzayk7CisJdiB8PSBtIDw8IF9fZmZzKGRkLT5tdWx0X21hc2spOworCXYgfD0gKG4gLSAxKSA8PCBfX2ZmcyhkZC0+ZGl2MV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPm11bHRfZGl2MV9yZWcpOworCisJLyogV2UgbGV0IHRoZSBjbG9jayBmcmFtZXdvcmsgc2V0IHRoZSBvdGhlciBvdXRwdXQgZGl2aWRlcnMgbGF0ZXIgKi8KKworCS8qIFJFVklTSVQ6IFNldCByYW1wLXVwIGRlbGF5PyAqLworCisJX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUgLSBzZXQgbm9uLWNvcmUgRFBMTCByYXRlCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKgorICogU2V0IHRoZSBEUExMIENMS09VVCB0byB0aGUgdGFyZ2V0IHJhdGUuICBJZiB0aGUgRFBMTCBjYW4gZW50ZXIKKyAqIGxvdy1wb3dlciBieXBhc3MsIGFuZCB0aGUgdGFyZ2V0IHJhdGUgaXMgdGhlIGJ5cGFzcyBzb3VyY2UgY2xvY2sKKyAqIHJhdGUsIHRoZW4gY29uZmlndXJlIHRoZSBEUExMIGZvciBieXBhc3MuICBPdGhlcndpc2UsIHJvdW5kIHRoZQorICogdGFyZ2V0IHJhdGUgaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCB0aGVuIHByb2dyYW0gYW5kIGxvY2sKKyAqIHRoZSBEUExMLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrICpuZXdfcGFyZW50ID0gTlVMTDsKKwl1MTYgZnJlcXNlbDsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwlpbnQgcmV0OworCisJaWYgKCFjbGsgfHwgIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyYXRlID09IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEVuc3VyZSBib3RoIHRoZSBieXBhc3MgYW5kIHJlZiBjbG9ja3MgYXJlIGVuYWJsZWQgcHJpb3IgdG8KKwkgKiBkb2luZyBhbnl0aGluZzsgd2UgbmVlZCB0aGUgYnlwYXNzIGNsb2NrIHJ1bm5pbmcgdG8gcmVwcm9ncmFtCisJICogdGhlIERQTEwuCisJICovCisJb21hcDJfY2xrX2VuYWJsZShkZC0+Y2xrX2J5cGFzcyk7CisJb21hcDJfY2xrX2VuYWJsZShkZC0+Y2xrX3JlZik7CisKKwlpZiAoZGQtPmNsa19ieXBhc3MtPnJhdGUgPT0gcmF0ZSAmJgorCSAgICAoY2xrLT5kcGxsX2RhdGEtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKKwkJcHJfZGVidWcoImNsb2NrOiAlczogc2V0IHJhdGU6IGVudGVyaW5nIGJ5cGFzcy5cbiIsIGNsay0+bmFtZSk7CisKKwkJcmV0ID0gX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKKwkJaWYgKCFyZXQpCisJCQluZXdfcGFyZW50ID0gZGQtPmNsa19ieXBhc3M7CisJfSBlbHNlIHsKKwkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSAhPSByYXRlKQorCQkJb21hcDJfZHBsbF9yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZnJlcXNlbCA9IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChjbGssIGRkLT5sYXN0X3JvdW5kZWRfbik7CisJCWlmICghZnJlcXNlbCkKKwkJCVdBUk5fT04oMSk7CisKKwkJcHJfZGVidWcoImNsb2NrOiAlczogc2V0IHJhdGU6IGxvY2tpbmcgcmF0ZSB0byAlbHUuXG4iLAorCQkJIGNsay0+bmFtZSwgcmF0ZSk7CisKKwkJcmV0ID0gb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oY2xrLCBkZC0+bGFzdF9yb3VuZGVkX20sCisJCQkJCQkgZGQtPmxhc3Rfcm91bmRlZF9uLCBmcmVxc2VsKTsKKwkJaWYgKCFyZXQpCisJCQluZXdfcGFyZW50ID0gZGQtPmNsa19yZWY7CisJfQorCWlmICghcmV0KSB7CisJCS8qCisJCSAqIFN3aXRjaCB0aGUgcGFyZW50IGNsb2NrIGluIHRoZSBoZWlyYXJjaHksIGFuZCBtYWtlIHN1cmUKKwkJICogdGhhdCB0aGUgbmV3IHBhcmVudCdzIHVzZWNvdW50IGlzIGNvcnJlY3QuICBOb3RlOiB3ZQorCQkgKiBlbmFibGUgdGhlIG5ldyBwYXJlbnQgYmVmb3JlIGRpc2FibGluZyB0aGUgb2xkIHRvIGF2b2lkCisJCSAqIGFueSB1bm5lY2Vzc2FyeSBoYXJkd2FyZSBkaXNhYmxlLT5lbmFibGUgdHJhbnNpdGlvbnMuCisJCSAqLworCQlpZiAoY2xrLT51c2Vjb3VudCkgeworCQkJb21hcDJfY2xrX2VuYWJsZShuZXdfcGFyZW50KTsKKwkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwkJfQorCQljbGtfcmVwYXJlbnQoY2xrLCBuZXdfcGFyZW50KTsKKwkJY2xrLT5yYXRlID0gcmF0ZTsKKwl9CisJb21hcDJfY2xrX2Rpc2FibGUoZGQtPmNsa19yZWYpOworCW9tYXAyX2Nsa19kaXNhYmxlKGRkLT5jbGtfYnlwYXNzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSAxMi01IENEUCBjb2RlIGZyb20gVEksICJMaW1pdGF0aW9uIDIuNSIKKwkgKiBvbiAzNDMwRVMxIHByZXZlbnRzIHVzIGZyb20gY2hhbmdpbmcgRFBMTCBtdWx0aXBsaWVycyBvciBkaXZpZGVycworCSAqIG9uIERQTEw0LgorCSAqLworCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBEUExMNCBjYW5ub3QgY2hhbmdlIHJhdGUgZHVlIHRvICIKKwkJICAgICAgICJzaWxpY29uICdMaW1pdGF0aW9uIDIuNScgb24gMzQzMEVTMS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShjbGssIHJhdGUpOworfQorCisKKy8qCisgKiBDT1JFIERQTEwgKERQTEwzKSByYXRlIHByb2dyYW1taW5nIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGNhbGwgaW50byBTUkFNIGNvZGUgdG8gZG8gdGhlIGFjdHVhbCBDTSB3cml0ZXMsIHNpbmNlIHRoZSBTRFJBTQorICogaXMgY2xvY2tlZCBmcm9tIERQTEwzLgorICovCisKKy8qKgorICogb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlIC0gc2V0IENPUkUgRFBMTCBNMiBkaXZpZGVyCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKgorICogUHJvZ3JhbSB0aGUgRFBMTCBNMiBkaXZpZGVyIHdpdGggdGhlIHJvdW5kZWQgdGFyZ2V0IHJhdGUuICBSZXR1cm5zCisgKiAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgbmV3X2RpdiA9IDA7CisJdW5zaWduZWQgbG9uZyB2YWxpZHJhdGUsIHNkcmNyYXRlOworCXN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGsgIT0gJmRwbGwzX20yX2NrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyYXRlID09IGNsay0+cmF0ZSkKKwkJcmV0dXJuIDA7CisKKwl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNkcmNyYXRlID0gc2RyY19pY2sucmF0ZTsKKwlpZiAocmF0ZSA+IGNsay0+cmF0ZSkKKwkJc2RyY3JhdGUgPDw9ICgocmF0ZSAvIGNsay0+cmF0ZSkgLSAxKTsKKwllbHNlCisJCXNkcmNyYXRlID4+PSAoKGNsay0+cmF0ZSAvIHJhdGUpIC0gMSk7CisKKwlzcCA9IG9tYXAyX3NkcmNfZ2V0X3BhcmFtcyhzZHJjcmF0ZSk7CisJaWYgKCFzcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9pbmZvKCJjbG9jazogY2hhbmdpbmcgQ09SRSBEUExMIHJhdGUgZnJvbSAlbHUgdG8gJWx1XG4iLCBjbGstPnJhdGUsCisJCXZhbGlkcmF0ZSk7CisJcHJfaW5mbygiY2xvY2s6IFNEUkMgdGltaW5nIHBhcmFtcyB1c2VkOiAlMDh4ICUwOHggJTA4eFxuIiwKKwkJc3AtPnJmcl9jdHJsLCBzcC0+YWN0aW1fY3RybGEsIHNwLT5hY3RpbV9jdHJsYik7CisKKwkvKiBSRVZJU0lUOiBTUkFNIGNvZGUgZG9lc24ndCBzdXBwb3J0IG90aGVyIE0yIGRpdmlzb3JzIHlldCAqLworCVdBUk5fT04obmV3X2RpdiAhPSAxICYmIG5ld19kaXYgIT0gMik7CisKKwkvKiBSRVZJU0lUOiBBZGQgU0RSQ19NUiBjaGFuZ2luZyB0byB0aGlzIGNvZGUgYWxzbyAqLworCW9tYXAzX2NvbmZpZ3VyZV9jb3JlX2RwbGwoc3AtPnJmcl9jdHJsLCBzcC0+YWN0aW1fY3RybGEsCisJCQkJICBzcC0+YWN0aW1fY3RybGIsIG5ld19kaXYpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMgPSB7CisJLmVuYWJsZQkJPSAmb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSwKK307CisKKy8qIERQTEwgYXV0b2lkbGUgcmVhZC9zZXQgY29kZSAqLworCisKIC8qKgogICogb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkIC0gcmVhZCBhIERQTEwncyBhdXRvaWRsZSBiaXRzCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gcmVhZApAQCAtMzU2LDkgKzgzOSwxMCBAQAogICogVXNpbmcgcGFyZW50IGNsb2NrIERQTEwgZGF0YSwgbG9vayB1cCBEUExMIHN0YXRlLiAgSWYgbG9ja2VkLCBzZXQgb3VyCiAgKiByYXRlIHRvIHRoZSBkcGxsX2NsayAqIDI7IG90aGVyd2lzZSwganVzdCB1c2UgZHBsbF9jbGsuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwM19jbGtvdXR4Ml9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAl1MzIgdjsKIAlzdHJ1Y3QgY2xrICpwY2xrOwogCkBAIC0zNzIsMTcgKzg1NiwxNSBAQAogCiAJZGQgPSBwY2xrLT5kcGxsX2RhdGE7CiAKLQlXQVJOX09OKCFkZC0+Y29udHJvbF9yZWcgfHwgIWRkLT5lbmFibGVfbWFzayk7CisJV0FSTl9PTighZGQtPmVuYWJsZV9tYXNrKTsKIAogCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpICYgZGQtPmVuYWJsZV9tYXNrOwogCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7Ci0JaWYgKHYgIT0gRFBMTF9MT0NLRUQpCi0JCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCWlmICh2ICE9IE9NQVAzWFhYX0VOX0RQTExfTE9DS0VEKQorCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CiAJZWxzZQotCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAqIDI7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlICogMjsKKwlyZXR1cm4gcmF0ZTsKIH0KIAogLyogQ29tbW9uIGNsb2NrIGNvZGUgKi8KQEAgLTQzMiw3ICs5MTQsNyBAQAogCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwogI2lmIDAKLQlpZiAob21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQorCWlmIChjbGtfc2V0X3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKICNlbmRpZgogCkBAIC00NTAsMjYgKzkzMiwxMyBAQAogaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQogewogCS8qIHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsgKi8KLQlzdHJ1Y3QgY2xrICoqY2xrcDsKKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CiAJLyogdTMyIGNsa3JhdGU7ICovCiAJdTMyIGNwdV9jbGtmbGc7CiAKLQkvKiBSRVZJU0lUOiBVbHRpbWF0ZWx5IHRoaXMgd2lsbCBiZSB1c2VkIGZvciBtdWx0aWJvb3QgKi8KLSNpZiAwCi0JaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7Ci0JCWNwdV9tYXNrID0gUkFURV9JTl8yNDJYOwotCQljcHVfY2xrZmxnID0gQ0xPQ0tfSU5fT01BUDI0Mlg7Ci0JCWNsa3AgPSBvbmNoaXBfMjR4eF9jbGtzOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzI0M1g7Ci0JCWNwdV9jbGtmbGcgPSBDTE9DS19JTl9PTUFQMjQzWDsKLQkJY2xrcCA9IG9uY2hpcF8yNHh4X2Nsa3M7Ci0JfQotI2VuZGlmCiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCWNwdV9tYXNrID0gUkFURV9JTl8zNDNYOwotCQljcHVfY2xrZmxnID0gQ0xPQ0tfSU5fT01BUDM0M1g7Ci0JCWNsa3AgPSBvbmNoaXBfMzR4eF9jbGtzOworCQljcHVfY2xrZmxnID0gQ0tfMzQzWDsKIAogCQkvKgogCQkgKiBVcGRhdGUgdGhpcyBpZiB0aGVyZSBhcmUgZnVydGhlciBjbG9jayBjaGFuZ2VzIGJldHdlZW4gRVMyCkBAIC00NzcsMjMgKzk0NiwyNCBAQAogCQkgKi8KIAkJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTMV8wKSB7CiAJCQkvKiBObyAzNDMwRVMxLW9ubHkgcmF0ZXMgZXhpc3QsIHNvIG5vIFJBVEVfSU5fMzQzMEVTMSAqLwotCQkJY3B1X2Nsa2ZsZyB8PSBDTE9DS19JTl9PTUFQMzQzMEVTMTsKKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKIAkJfSBlbHNlIHsKIAkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKLQkJCWNwdV9jbGtmbGcgfD0gQ0xPQ0tfSU5fT01BUDM0MzBFUzI7CisJCQljcHVfY2xrZmxnIHw9IENLXzM0MzBFUzI7CiAJCX0KIAl9CiAKIAljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7CiAKLQlmb3IgKGNsa3AgPSBvbmNoaXBfMzR4eF9jbGtzOwotCSAgICAgY2xrcCA8IG9uY2hpcF8zNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF8zNHh4X2Nsa3MpOwotCSAgICAgY2xrcCsrKSB7Ci0JCWlmICgoKmNsa3ApLT5mbGFncyAmIGNwdV9jbGtmbGcpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQlvbWFwMl9pbml0X2Nsa19jbGtkbSgqY2xrcCk7CisJZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCisJCWNsa19pbml0X29uZShjLT5say5jbGspOworCisJZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7CisJCQljbGtkZXZfYWRkKCZjLT5sayk7CisJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KLQl9CiAKIAkvKiBSRVZJU0lUOiBOb3QgeWV0IHJlYWR5IGZvciBPTUFQMyAqLwogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGE4MjYwOTQuLjcwZWMxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtMjcsMTMgKzI3LDE0IEBACiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogCi1zdGF0aWMgdm9pZCBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgdm9pZCBvbWFwM19kcGxsX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyB2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgdTMyIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKIC8qIE1heGltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyBmb3IgT01BUDMgKi8KICNkZWZpbmUgT01BUDNfTUFYX0RQTExfTVVMVAkJMjA0OApAQCAtNDcsNiArNDgsMTAgQEAKICAqIERQTEw1IHN1cHBsaWVzIG90aGVyIHBlcmlwaGVyYWwgY2xvY2tzIChVU0JIT1NULCBVU0lNKS4KICAqLwogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgRFBMTCBieXBhc3MgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9mY2s7CitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2s7CisKIC8qIENNX0NMS0VOX1BMTCouRU4qIGJpdCB2YWx1ZXMgLSBub3QgYWxsIGFyZSBhdmFpbGFibGUgZm9yIGV2ZXJ5IERQTEwgKi8KICNkZWZpbmUgRFBMTF9MT1dfUE9XRVJfU1RPUAkJMHgxCiAjZGVmaW5lIERQTExfTE9XX1BPV0VSX0JZUEFTUwkJMHg1CkBAIC01Nyw2NyArNjIsNTkgQEAKIC8qIEFjY29yZGluZyB0byB0aW1lcjMyay5jLCB0aGlzIGlzIGEgMzI3NjhIeiBjbG9jaywgbm90IGEgMzIwMDBIeiBjbG9jay4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrX2ZjayA9IHsKIAkubmFtZQkJPSAib21hcF8zMmtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfZmNrID0gewogCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMzI3NjgsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiAvKiBWaXJ0dWFsIHNvdXJjZSBjbG9ja3MgZm9yIG9zY19zeXNfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTJtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzEybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEzbV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8xM21fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNl84bV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8xNl84bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMTY4MDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5XzJtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzE5XzJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAxOTIwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjZtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzI2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMjYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4XzRtX2NrID0gewogCS5uYW1lCQk9ICJ2aXJ0XzM4XzRtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAzODQwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xMm1fcmF0ZXNbXSA9IHsKQEAgLTE2NCwxMyArMTYxLDEzIEBACiAvKiAxMiwgMTMsIDE2LjgsIDE5LjIsIDI2LCBvciAzOC40IE1IeiAqLwogc3RhdGljIHN0cnVjdCBjbGsgb3NjX3N5c19jayA9IHsKIAkubmFtZQkJPSAib3NjX3N5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTRUwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1lTX0NMS0lOX1NFTF9NQVNLLAogCS5jbGtzZWwJCT0gb3NjX3N5c19jbGtzZWwsCiAJLyogUkVWSVNJVDogZGVhbCB3aXRoIGF1dG9leHRjbGttb2RlPyAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xODksMzYgKzE4NiwzNCBAQAogLyogRmVlZHMgRFBMTHMgLSBkaXZpZGVkIGZpcnN0IGJ5IFBSTV9DTEtTUkNfQ1RSTC5TWVNDTEtESVY/ICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CiAJLm5hbWUJCT0gInN5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfUFJNX0NMS1NSQ19DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVBfU1lTQ0xLRElWX01BU0ssCiAJLmNsa3NlbAkJPSBzeXNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfYWx0Y2xrID0gewogCS5uYW1lCQk9ICJzeXNfYWx0Y2xrIiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIH07CiAKIC8qIE9wdGlvbmFsIGV4dGVybmFsIGNsb2NrIGlucHV0IGZvciBzb21lIE1jQlNQcyAqLwogc3RhdGljIHN0cnVjdCBjbGsgbWNic3BfY2xrcyA9IHsKIAkubmFtZQkJPSAibWNic3BfY2xrcyIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiB9OwogCiAvKiBQUk0gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQxID0gewogCS5uYW1lCQk9ICJzeXNfY2xrb3V0MSIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVF9FTl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyNiwxNiArMjIxLDYgQEAKIAogLyogQ00gQ0xPQ0tTICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHBsbF9ieXBhc3NfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRwbGxfbG9ja2VkX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYxNl9kcGxsX3JhdGVzW10gPSB7CiAJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAogCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKQEAgLTI2Myw2ICsyNDgsOSBAQAogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfTVVMVF9NQVNLLAogCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZkcGxsMV9mY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCiAJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fTVBVX0RQTExfTUFTSywKIAkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKQEAgLTI3MiwxOCArMjYwLDIxIEBACiAJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAogCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19NUFVfRFBMTF9NQVNLLAogCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAotCS5pZGxlc3RfYml0CT0gT01BUDM0MzBfU1RfTVBVX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKIAkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5kcGxsX2RhdGEJPSAmZHBsbDFfZGQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIApAQCAtMjkzLDkgKzI4NCw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMV94Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDFfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKQEAgLTMxMSwxMyArMzAyLDEzIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX3gybTJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwxX3gybTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwxX3gyX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0NMS09VVF9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMzI5LDYgKzMyMCw5IEBACiAJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJmRwbGwyX2ZjaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9NQVNLLAogCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSB8CkBAIC0zMzksMjAgKzMzMywyMSBAQAogCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCksCiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX0lWQTJfRFBMTF9NQVNLLAogCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKLQkuaWRsZXN0X2JpdAk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX1NISUZULAorCS5pZGxlc3RfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKIAkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5kcGxsX2RhdGEJPSAmZHBsbDJfZGQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAotCS5lbmFibGUJCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCi0JLmRpc2FibGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIApAQCAtMzY3LDE0ICszNjIsMTQgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfbTJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwyX20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsMl9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELAogCQkJCQkgIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDJfbTJ4Ml9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0zODcsNiArMzgyLDkgQEAKIAkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfTUFTSywKIAkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKQEAgLTM5NCwxNyArMzkyLDIxIEBACiAJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVCwKIAkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiB9OwogCkBAIC00MTQsOSArNDE2LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwzX3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIApAQCAtNDYwLDU1ICs0NjIsMzQgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLS8qCi0gKiBEUExMMyBvdXRwdXQgTTIKLSAqIFJFVklTSVQ6IFRoaXMgRFBMTCBvdXRwdXQgZGl2aWRlciBtdXN0IGJlIGNoYW5nZWQgaW4gU1JBTSwgc28gdW50aWwKLSAqIHRoYXQgY29kZSBpcyByZWFkeSwgdGhpcyBzaG91bGQgcmVtYWluIGEgJ3JlYWQtb25seScgY2xrc2VsIGNsb2NrLgotICovCisvKiBEUExMMyBvdXRwdXQgTTIgLSBwcmltYXJ5IGNvbnRyb2wgcG9pbnQgZm9yIENPUkUgc3BlZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MzFfZHBsbDNtMl9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsM19tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfY2siLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gY29yZV9ja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGwzX20yeDJfY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsM194Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0NPUkVfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBkcGxsM19tMngyX2NrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwzX3gyX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCkBAIC01MjAsNDIgKzUwMSwzNCBAQAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGwzX20zeDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20zX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDNfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGwzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIC8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTN4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTN4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkcGxsM19tM19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9FTVVfQ09SRV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBlbXVfY29yZV9hbHdvbl9ja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDNfbTN4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9jb3JlX2Fsd29uX2NrID0gewogCS5uYW1lCQk9ICJlbXVfY29yZV9hbHdvbl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfbTN4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9jb3JlX2Fsd29uX2NrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogRFBMTDQgKi8KQEAgLTU2NSw2ICs1MzgsOSBAQAogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDIpLAogCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX0ZSRVFTRUxfTUFTSywKIAkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX01BU0ssCiAJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLApAQCAtNTc0LDIwICs1NTAsMjEgQEAKIAkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfTUFTSywKIAkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5pZGxlc3RfYml0CT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKIAkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAotCS5lbmFibGUJCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCi0JLmRpc2FibGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiB9OwogCkBAIC01OTgsOSArNTc1LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIApAQCAtNjEyLDExMiArNTg5LDEwMSBAQAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20yeDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwzKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfOTZNX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X20yeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTJfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fOTZNX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IElOVkVSVF9FTkFCTEUsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfOTZtX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDRfbTJ4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KKy8qCisgKiBEUExMNCBnZW5lcmF0ZXMgRFBMTDRfTTJYMl9DTEsgd2hpY2ggaXMgdGhlbiByb3V0ZWQgaW50byB0aGUgUFJNIGFzCisgKiBQUk1fOTZNX0FMV09OXyhGKUNMSy4gIFR3byBjbG9ja3MgdGhlbiBlbWVyZ2UgZnJvbSB0aGUgUFJNOgorICogOTZNX0FMV09OX0ZDTEsgKGNhbGxlZCAib21hcF85Nm1fYWx3b25fZmNrIiBiZWxvdykgYW5kCisgKiBDTV85NktfKEYpQ0xLLgorICovCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTJ4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCSBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF85Nm1fZmNrIiwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNtXzk2bV9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X20yeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0gewogCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKLQkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2Fsd29uX2ZjaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9kcGxsX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfOTZtX2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgLnJhdGVzID0gb21hcF85Nm1fc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBjbV85Nm1fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfOTZNX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwXzk2bV9mY2tfY2xrc2VsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTN4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTNfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RWX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X20zeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9UVl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB2aXJ0X29tYXBfNTRtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDRfbTN4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfb21hcF81NG1fZmNrID0gewotCS5uYW1lCQk9ICJ2aXJ0X29tYXBfNTRtX2ZjayIsCi0JLnBhcmVudAkJPSAmZHBsbDRfbTN4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gdmlydF9vbWFwXzU0bV9mY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNTRtX2Q0bTN4Ml9yYXRlc1tdID0gewogCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKIAl7IC5kaXYgPSAwIH0KQEAgLTcyOSwyMyArNjk1LDIyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzU0bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmdmlydF9vbWFwXzU0bV9mY2ssIC5yYXRlcyA9IG9tYXBfNTRtX2Q0bTN4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsNF9tM3gyX2NrLCAucmF0ZXMgPSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgICAgLnJhdGVzID0gb21hcF81NG1fYWx0X3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzU0bV9mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfNTRtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNTRNLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV81NE1fTUFTSywKIAkuY2xrc2VsCQk9IG9tYXBfNTRtX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV85Nm1kMl9yYXRlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV9jbTk2bV9yYXRlc1tdID0gewogCXsgLmRpdiA9IDIsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKIAl7IC5kaXYgPSAwIH0KIH07CkBAIC03NTYsMTA2ICs3MjEsMTEyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzQ4bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gb21hcF80OG1fOTZtZDJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gb21hcF80OG1fY205Nm1fcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgLnJhdGVzID0gb21hcF80OG1fYWx0X3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNDhNLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV80OE1fTUFTSywKIAkuY2xrc2VsCQk9IG9tYXBfNDhtX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMm1fZmNrID0gewogCS5uYW1lCQk9ICJvbWFwXzEybV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKIAkuZml4ZWRfZGl2CT0gNCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKIC8qIFRoaXMgdmlyc3R1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTR4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTRfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X200X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0RTUzFfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNHgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X200X2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTV4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTVfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X201X2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTZ4Ml9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw0X202X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMNF9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNngyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X202X2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fRU1VX1BFUklQSF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBlbXVfcGVyX2Fsd29uX2NrID0gewogCS5uYW1lCQk9ICJlbXVfcGVyX2Fsd29uX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsNF9tNngyX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtODY3LDYgKzgzOCw5IEBACiAJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNCksCiAJLm11bHRfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfRlJFUVNFTF9NQVNLLAogCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtFTjIpLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9NQVNLLAogCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKQEAgLTg3NiwyMCArODUwLDIxIEBACiAJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9BVVRPSURMRTJfUExMKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwRVMyX0FVVE9fUEVSSVBIMl9EUExMX01BU0ssCiAJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCi0JLmlkbGVzdF9iaXQJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDVfY2siLAorCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGw1X2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfUFJPUEFHQVRFUywKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIH07CiAKQEAgLTkwMCwzMSArODc1LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw1X20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNV9tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDVfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw1KSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9ESVZfMTIwTV9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzEyMG1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDVfbTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzEyMG1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzEyMG1fZmNrIiwKLQkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1NUX1BFUklQSDJfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwXzEyMG1fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTk1MSwyMiArOTA4LDIzIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjbGtvdXQyX3NyY19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJCSAgLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkgIC5yYXRlcyA9IGNsa291dDJfc3JjX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZvbWFwXzk2bV9hbHdvbl9mY2ssICAucmF0ZXMgPSBjbGtvdXQyX3NyY185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmb21hcF81NG1fZmNrLAkgIC5yYXRlcyA9IGNsa291dDJfc3JjXzU0bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKIAkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCiAJLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC05ODYsMTEgKzk0NCwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKIAkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyX0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gc3lzX2Nsa291dDJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtOTk4LDE2ICs5NTYsMjIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgY29yZXgyX2ZjayA9IHsKIAkubmFtZQkJPSAiY29yZXgyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfbTJ4Ml9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogRFBMTCBwb3dlciBkb21haW4gY2xvY2sgY29udHJvbHMgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9jb3JlX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjRfY29yZV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2NF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIApAQCAtMTAxNywzOSArOTgxLDIxIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2ZjayA9IHsKIAkubmFtZQkJPSAiZHBsbDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9DTEtfU1JDX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtzZWwJCT0gZGl2NF9jb3JlX2Nsa3NlbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAotLyoKLSAqIE1QVSBjbGtzZWw6Ci0gKiBJZiBEUExMMSBpcyBsb2NrZWQsIG1wdV9jayBkZXJpdmVzIGZyb20gRFBMTDE7IG90aGVyd2lzZSwgbXB1X2NrCi0gKiBkZXJpdmVzIGZyb20gdGhlIGhpZ2gtZnJlcXVlbmN5IGJ5cGFzcyBjbG9jayBvcmlnaW5hdGluZyBmcm9tIERQTEwzLAotICogY2FsbGVkICdkcGxsMV9mY2snCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1wdV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDFfZmNrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDFfeDJtMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsKIAkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsMV94Mm0yX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gbXB1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCkBAIC0xMDY2LDEzICsxMDEyLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9mY2sgPSB7CiAJLm5hbWUJCT0gImFybV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm1wdV9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX01QVV9DTEtfTUFTSywKIAkuY2xrc2VsCQk9IGFybV9mY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMDg0LDYzICsxMDI5LDQ4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9tcHVfYWx3b25fY2sgPSB7CiAJLm5hbWUJCT0gImVtdV9tcHVfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm1wdV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrID0gewogCS5uYW1lCQk9ICJkcGxsMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfQ0xLX1NSQ19NQVNLLAotCS5jbGtzZWwJCT0gZGl2Ml9jb3JlX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLS8qCi0gKiBJVkEyIGNsa3NlbDoKLSAqIElmIERQTEwyIGlzIGxvY2tlZCwgaXZhMl9jayBkZXJpdmVzIGZyb20gRFBMTDI7IG90aGVyd2lzZSwgaXZhMl9jawotICogZGVyaXZlcyBmcm9tIHRoZSBoaWdoLWZyZXF1ZW5jeSBieXBhc3MgY2xvY2sgb3JpZ2luYXRpbmcgZnJvbSBEUExMMywKLSAqIGNhbGxlZCAnZHBsbDJfZmNrJwotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGl2YTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwyX2ZjaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsMl9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTJfY2sgPSB7CiAJLm5hbWUJCT0gIml2YTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDJfbTJfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCi0JCQkJCSAgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGl2YTJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKIAkuY2xrZG1fbmFtZQk9ICJpdmEyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBDb21tb24gaW50ZXJmYWNlIGNsb2NrcyAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2NvcmVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIGwzX2ljayA9IHsKIAkubmFtZQkJPSAibDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0wzX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwpAQCAtMTE1MiwxMyArMTA4MiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBsNF9pY2sgPSB7CiAJLm5hbWUJCT0gImw0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0w0X01BU0ssCiAJLmNsa3NlbAkJPSBkaXYyX2wzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCkBAIC0xMTcxLDEyICsxMTAwLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJtX2ljayA9IHsKIAkubmFtZQkJPSAicm1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUk1fTUFTSywKIAkuY2xrc2VsCQk9IGRpdjJfbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTE5Miw1MyArMTEyMSw1MiBAQAogLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19jayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2wzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9sM19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCiAJLmNsa3NlbAkJPSBnZnhfbDNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2ljayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzFfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9jZzFfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzJEX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzJfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9jZzJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xMjY1LDI0ICsxMTkzLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNneF9mY2sgPSB7CiAJLm5hbWUJCT0gInNneF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fU0dYX1NISUZULAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfQ01fRkNMS0VOX1NHWF9FTl9TR1hfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX01BU0ssCiAJLmNsa3NlbAkJPSBzZ3hfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZ3hfaWNrID0gewogCS5uYW1lCQk9ICJzZ3hfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKIAkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTI5MSwxMSArMTIxOSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkMmRfMjZtX2ZjayA9IHsKIAkubmFtZQkJPSAiZDJkXzI2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9EMkRfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAogCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xMzA4LDYgKzEyMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCkBAIC0xMzE1LDEzICsxMjQ0LDEzIEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLApAQCAtMTMyOSwzNSArMTI1OCwzNCBAQAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNwZWZ1c2VfZmNrID0gewogCS5uYW1lCQk9ICJjcGVmdXNlX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0c19mY2sgPSB7CiAJLm5hbWUJCT0gInRzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1RTX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKIAkubmFtZQkJPSAidXNidGxsX2ZjayIsCi0JLnBhcmVudAkJPSAmb21hcF8xMjBtX2ZjaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMzY1LDg0ICsxMjkzLDgzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKIAkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xNDY5LDYgKzEzOTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDUsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCkBAIC0xNDc2LDEzICsxNDA0LDEzIEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKQEAgLTE0OTAsNyArMTQxOCw2IEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AxX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0xNDk5LDc3ICsxNDI2LDc2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfNDhtX2ZjayA9IHsKIAkubmFtZQkJPSAiY29yZV80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gNCwKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnNob3N0dXNiX2ZjayA9IHsKIAkubmFtZQkJPSAiZnNob3N0dXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRlNIT1NUVVNCX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTU3NywxOSArMTUwMywxOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlXzEybV9mY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfMTJtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb21hcF8xMm1fZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewogCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfMTJtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjEyLDIyICsxNTM3LDIyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3JfZmNrID0gewogCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAogCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfc3N0X2ZjayA9IHsKIAkubmFtZQkJPSAic3NpX3NzdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrLAogCS5maXhlZF9kaXYJPSAyLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKQEAgLTE2NDEsMzkgKzE1NjYsMzkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19pY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfbDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZsM19pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2sgPSB7CiAJLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewogCS5uYW1lCQk9ICJzZHJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CiAJLm5hbWUJCT0gImdwbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0sgfAotCQkJCUVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwgLyogaHVoPyAqLwogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTY4MiwxOCArMTYwNywxNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sM19pY2sgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewogCS5uYW1lCQk9ICJwa2FfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2wzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzAxLDMxICsxNjI1LDMwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDRfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKIAkubmFtZQkJPSAidXNidGxsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xNzMzLDI1MCArMTY1NiwyNTEgQEAKIC8qIEludGVyc3lzdGVtIENvbW11bmljYXRpb24gUmVnaXN0ZXJzIC0gY2hhc3NpcyBtb2RlIG9ubHkgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGljcl9pY2sgPSB7CiAJLm5hbWUJCT0gImljcl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSUNSX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CiAJLm5hbWUJCT0gImFlczJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzaGExMl9pY2sgPSB7CiAJLm5hbWUJCT0gInNoYTEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TSEExMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRlczJfaWNrID0gewogCS5uYW1lCQk9ICJkZXMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKIAkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKIAkubmFtZQkJPSAiaGRxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTRfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjM19pY2sgPSB7CiAJLm5hbWUJCT0gImkyY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDUsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CiAJLm5hbWUJCT0gImZhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRkFDX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKIAkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9PTUFQQ1RSTF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5ODQsMTkgKzE5MDgsMTggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKIAkubmFtZQkJPSAic3NpX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrID0gewogCS5uYW1lCQk9ICJzc2lfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMDExLDYgKzE5MzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewogCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTIwMTgsNyArMTk0Miw2IEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzFfQ0xLU0VMX0ZTSE9TVFVTQl9NQVNLLAogCS5jbGtzZWwJCT0gdXNiX2w0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIwMjgsOTggKzE5NTEsODcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKIAkubmFtZQkJPSAiYWVzMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKIAkubmFtZQkJPSAicm5nX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1JOR19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTExX2ljayA9IHsKIAkubmFtZQkJPSAic2hhMTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKIAkubmFtZQkJPSAiZGVzMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogRFNTICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDRfbTR4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrID0gewogCS5uYW1lCQk9ICJkc3MxX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTR4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gZHNzMV9hbHdvbl9mY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc190dl9mY2sgPSB7CiAJLm5hbWUJCT0gImRzc190dl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJm9tYXBfNTRtX2ZjaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2ZjaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3MyX2Fsd29uX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzMl9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMTI3LDQ1ICsyMDM5LDQ2IEBACiBzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBDQU0gKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY2FtX21jbGtfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X201eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKIAkubmFtZQkJPSAiY2FtX21jbGsiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTV4Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gY2FtX21jbGtfY2xrc2VsLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKIAkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwogCS5uYW1lCQk9ICJjYW1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NpMl85Nm1fZmNrID0geworCS5uYW1lCQk9ICJjc2kyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ1NJMl9TSElGVCwKIAkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjE3NCwyMiArMjA4NywyMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKLQkucGFyZW50CQk9ICZvbWFwXzEyMG1fZmNrLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gInVzYmhvc3RfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjE5NywyMiArMjExMCwxMSBAQAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CiAJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KIAkubmFtZQkJPSAidXNiaG9zdF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X3Nhcl9mY2sgPSB7Ci0JLm5hbWUJCT0gInVzYmhvc3Rfc2FyX2ZjayIsCi0JLnBhcmVudAkJPSAmb3NjX3N5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCi0JLmVuYWJsZV9yZWcJPSBPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBQTV9QV1NUQ1RSTCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMjM3LDcgKzIxMzksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1c2ltX2Nsa3NlbFtdID0gewogCXsgLnBhcmVudCA9ICZvbWFwXzk2bV9mY2ssCS5yYXRlcyA9IHVzaW1fOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm9tYXBfMTIwbV9mY2ssCS5yYXRlcyA9IHVzaW1fMTIwbV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywJLnJhdGVzID0gdXNpbV8xMjBtX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwpAQCAtMjI0NSw2MyArMjE0Nyw2MyBAQAogLyogMzQzMEVTMiBvbmx5ICovCiBzdGF0aWMgc3RydWN0IGNsayB1c2ltX2ZjayA9IHsKIAkubmFtZQkJPSAidXNpbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfQ0xLU0VMX1VTSU1PQ1BfTUFTSywKIAkuY2xrc2VsCQk9IHVzaW1fY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogWFhYIHNob3VsZCBncHQxJ3MgY2xrc2VsIGhhdmUgd2t1cF8zMmtfZmNrIGFzIHRoZSAzMmsgb3B0PyAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0gewogCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8xX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfbDRfaWNrID0gewogCS5uYW1lCQk9ICJ3a3VwX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjMxMCw1MCArMjIxMiw1MCBAQAogLyogTmV2ZXIgc3BlY2lmaWNhbGx5IG5hbWVkIGluIHRoZSBUUk0sIHNvIHdlIGhhdmUgdG8gaW5mZXIgYSBsaWtlbHkgbmFtZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9pY2sgPSB7CiAJLm5hbWUJCT0gInVzaW1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKIAkubmFtZQkJPSAid2R0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfaWNrID0gewogCS5uYW1lCQk9ICJncGlvMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrc3luY19pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfMzJrc3luY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl8zMktTWU5DX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIzNjEsMjAgKzIyNjMsMjAgQEAKIC8qIFhYWCBUaGlzIGNsb2NrIG5vIGxvbmdlciBleGlzdHMgaW4gMzQzMCBUUk0gcmV2IEYgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIzODUsNDA2ICsyMjg3LDQwNCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAicGVyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2Fsd29uX2ZjaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMl9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDVfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUN19NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzMya19hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl8zMmtfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfZGJjayA9IHsKIAkubmFtZQkJPSAiZ3BpbzZfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNF9kYmNrID0gewogCS5uYW1lCQk9ICJncGlvNF9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfZGJjayA9IHsKIAkubmFtZQkJPSAiZ3BpbzNfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8yX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9sNF9pY2sgPSB7CiAJLm5hbWUJCT0gInBlcl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW82X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2ljayA9IHsKIAkubmFtZQkJPSAiZ3BpbzRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU80X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0gewogCS5uYW1lCQk9ICJncGlvMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0gewogCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0gewogCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAgLnJhdGVzID0gY29tbW9uX21jYnNwX21jYnNwX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLApAQCAtMjc5MiwxMyArMjY5MiwxMyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAyX0NPTlRST0xfREVWQ09ORjApLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQMl9DTEtTX01BU0ssCiAJLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLApAQCAtMjgwNiwxMyArMjcwNiwxMyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQM19DTEtTX01BU0ssCiAJLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLApAQCAtMjgyMCw3ICsyNzIwLDYgQEAKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDRfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI4NjQsMTEgKzI3NjMsMTEgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZW11X3NyY19jayA9IHsKIAkubmFtZQkJPSAiZW11X3NyY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NVVhfQ1RSTF9NQVNLLAogCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI4ODgsMTEgKzI3ODcsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGNsa19mY2sgPSB7CiAJLm5hbWUJCT0gInBjbGtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBwY2xrX2VtdV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5MTEsMTEgKzI4MTAsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGNsa3gyX2ZjayA9IHsKIAkubmFtZQkJPSAicGNsa3gyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUENMS1gyX01BU0ssCiAJLmNsa3NlbAkJPSBwY2xreDJfZW11X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwpAQCAtMjkyNywyMiArMjgyNiwyMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhdGNsa19mY2sgPSB7CiAJLm5hbWUJCT0gImF0Y2xrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfQVRDTEtfTUFTSywKIAkuY2xrc2VsCQk9IGF0Y2xrX2VtdV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfc3JjX2ZjayA9IHsKIAkubmFtZQkJPSAidHJhY2VjbGtfc3JjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9NQVNLLAogCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5NjEsMTEgKzI4NjAsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfZmNrID0gewogCS5uYW1lCQk9ICJ0cmFjZWNsa19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSB0cmFjZWNsa19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5NzUsMjcgKzI4NzQsMjcgQEAKIC8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDEpICovCiBzdGF0aWMgc3RydWN0IGNsayBzcjFfZmNrID0gewogCS5uYW1lCQk9ICJzcjFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDIpICovCiBzdGF0aWMgc3RydWN0IGNsayBzcjJfZmNrID0gewogCS5uYW1lCQk9ICJzcjJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2w0X2ljayA9IHsKIAkubmFtZQkJPSAic3JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwogCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0zMDA1LDIzMSArMjkwNCwxNiBAQAogLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqb25jaGlwXzM0eHhfY2xrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm9tYXBfMzJrX2ZjaywKLQkmdmlydF8xMm1fY2ssCi0JJnZpcnRfMTNtX2NrLAotCSZ2aXJ0XzE2XzhtX2NrLAotCSZ2aXJ0XzE5XzJtX2NrLAotCSZ2aXJ0XzI2bV9jaywKLQkmdmlydF8zOF80bV9jaywKLQkmb3NjX3N5c19jaywKLQkmc3lzX2NrLAotCSZzeXNfYWx0Y2xrLAotCSZtY2JzcF9jbGtzLAotCSZzeXNfY2xrb3V0MSwKLQkmZHBsbDFfY2ssCi0JJmRwbGwxX3gyX2NrLAotCSZkcGxsMV94Mm0yX2NrLAotCSZkcGxsMl9jaywKLQkmZHBsbDJfbTJfY2ssCi0JJmRwbGwzX2NrLAotCSZjb3JlX2NrLAotCSZkcGxsM194Ml9jaywKLQkmZHBsbDNfbTJfY2ssCi0JJmRwbGwzX20yeDJfY2ssCi0JJmRwbGwzX20zX2NrLAotCSZkcGxsM19tM3gyX2NrLAotCSZlbXVfY29yZV9hbHdvbl9jaywKLQkmZHBsbDRfY2ssCi0JJmRwbGw0X3gyX2NrLAotCSZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JJm9tYXBfOTZtX2ZjaywKLQkmY21fOTZtX2ZjaywKLQkmdmlydF9vbWFwXzU0bV9mY2ssCi0JJm9tYXBfNTRtX2ZjaywKLQkmb21hcF80OG1fZmNrLAotCSZvbWFwXzEybV9mY2ssCi0JJmRwbGw0X20yX2NrLAotCSZkcGxsNF9tMngyX2NrLAotCSZkcGxsNF9tM19jaywKLQkmZHBsbDRfbTN4Ml9jaywKLQkmZHBsbDRfbTRfY2ssCi0JJmRwbGw0X200eDJfY2ssCi0JJmRwbGw0X201X2NrLAotCSZkcGxsNF9tNXgyX2NrLAotCSZkcGxsNF9tNl9jaywKLQkmZHBsbDRfbTZ4Ml9jaywKLQkmZW11X3Blcl9hbHdvbl9jaywKLQkmZHBsbDVfY2ssCi0JJmRwbGw1X20yX2NrLAotCSZvbWFwXzEyMG1fZmNrLAotCSZjbGtvdXQyX3NyY19jaywKLQkmc3lzX2Nsa291dDIsCi0JJmNvcmV4Ml9mY2ssCi0JJmRwbGwxX2ZjaywKLQkmbXB1X2NrLAotCSZhcm1fZmNrLAotCSZlbXVfbXB1X2Fsd29uX2NrLAotCSZkcGxsMl9mY2ssCi0JJml2YTJfY2ssCi0JJmwzX2ljaywKLQkmbDRfaWNrLAotCSZybV9pY2ssCi0JJmdmeF9sM19jaywKLQkmZ2Z4X2wzX2ZjaywKLQkmZ2Z4X2wzX2ljaywKLQkmZ2Z4X2NnMV9jaywKLQkmZ2Z4X2NnMl9jaywKLQkmc2d4X2ZjaywKLQkmc2d4X2ljaywKLQkmZDJkXzI2bV9mY2ssCi0JJmdwdDEwX2ZjaywKLQkmZ3B0MTFfZmNrLAotCSZjcGVmdXNlX2ZjaywKLQkmdHNfZmNrLAotCSZ1c2J0bGxfZmNrLAotCSZjb3JlXzk2bV9mY2ssCi0JJm1tY2hzM19mY2ssCi0JJm1tY2hzMl9mY2ssCi0JJm1zcHJvX2ZjaywKLQkmbW1jaHMxX2ZjaywKLQkmaTJjM19mY2ssCi0JJmkyYzJfZmNrLAotCSZpMmMxX2ZjaywKLQkmbWNic3A1X2ZjaywKLQkmbWNic3AxX2ZjaywKLQkmY29yZV80OG1fZmNrLAotCSZtY3NwaTRfZmNrLAotCSZtY3NwaTNfZmNrLAotCSZtY3NwaTJfZmNrLAotCSZtY3NwaTFfZmNrLAotCSZ1YXJ0Ml9mY2ssCi0JJnVhcnQxX2ZjaywKLQkmZnNob3N0dXNiX2ZjaywKLQkmY29yZV8xMm1fZmNrLAotCSZoZHFfZmNrLAotCSZzc2lfc3NyX2ZjaywKLQkmc3NpX3NzdF9mY2ssCi0JJmNvcmVfbDNfaWNrLAotCSZoc290Z3VzYl9pY2ssCi0JJnNkcmNfaWNrLAotCSZncG1jX2ZjaywKLQkmc2VjdXJpdHlfbDNfaWNrLAotCSZwa2FfaWNrLAotCSZjb3JlX2w0X2ljaywKLQkmdXNidGxsX2ljaywKLQkmbW1jaHMzX2ljaywKLQkmaWNyX2ljaywKLQkmYWVzMl9pY2ssCi0JJnNoYTEyX2ljaywKLQkmZGVzMl9pY2ssCi0JJm1tY2hzMl9pY2ssCi0JJm1tY2hzMV9pY2ssCi0JJm1zcHJvX2ljaywKLQkmaGRxX2ljaywKLQkmbWNzcGk0X2ljaywKLQkmbWNzcGkzX2ljaywKLQkmbWNzcGkyX2ljaywKLQkmbWNzcGkxX2ljaywKLQkmaTJjM19pY2ssCi0JJmkyYzJfaWNrLAotCSZpMmMxX2ljaywKLQkmdWFydDJfaWNrLAotCSZ1YXJ0MV9pY2ssCi0JJmdwdDExX2ljaywKLQkmZ3B0MTBfaWNrLAotCSZtY2JzcDVfaWNrLAotCSZtY2JzcDFfaWNrLAotCSZmYWNfaWNrLAotCSZtYWlsYm94ZXNfaWNrLAotCSZvbWFwY3RybF9pY2ssCi0JJnNzaV9sNF9pY2ssCi0JJnNzaV9pY2ssCi0JJnVzYl9sNF9pY2ssCi0JJnNlY3VyaXR5X2w0X2ljazIsCi0JJmFlczFfaWNrLAotCSZybmdfaWNrLAotCSZzaGExMV9pY2ssCi0JJmRlczFfaWNrLAotCSZkc3MxX2Fsd29uX2ZjaywKLQkmZHNzX3R2X2ZjaywKLQkmZHNzXzk2bV9mY2ssCi0JJmRzczJfYWx3b25fZmNrLAotCSZkc3NfaWNrLAotCSZjYW1fbWNsaywKLQkmY2FtX2ljaywKLQkmdXNiaG9zdF8xMjBtX2ZjaywKLQkmdXNiaG9zdF80OG1fZmNrLAotCSZ1c2Job3N0X2ljaywKLQkmdXNiaG9zdF9zYXJfZmNrLAotCSZ1c2ltX2ZjaywKLQkmZ3B0MV9mY2ssCi0JJndrdXBfMzJrX2ZjaywKLQkmZ3BpbzFfZGJjaywKLQkmd2R0Ml9mY2ssCi0JJndrdXBfbDRfaWNrLAotCSZ1c2ltX2ljaywKLQkmd2R0Ml9pY2ssCi0JJndkdDFfaWNrLAotCSZncGlvMV9pY2ssCi0JJm9tYXBfMzJrc3luY19pY2ssCi0JJmdwdDEyX2ljaywKLQkmZ3B0MV9pY2ssCi0JJnBlcl85Nm1fZmNrLAotCSZwZXJfNDhtX2ZjaywKLQkmdWFydDNfZmNrLAotCSZncHQyX2ZjaywKLQkmZ3B0M19mY2ssCi0JJmdwdDRfZmNrLAotCSZncHQ1X2ZjaywKLQkmZ3B0Nl9mY2ssCi0JJmdwdDdfZmNrLAotCSZncHQ4X2ZjaywKLQkmZ3B0OV9mY2ssCi0JJnBlcl8zMmtfYWx3b25fZmNrLAotCSZncGlvNl9kYmNrLAotCSZncGlvNV9kYmNrLAotCSZncGlvNF9kYmNrLAotCSZncGlvM19kYmNrLAotCSZncGlvMl9kYmNrLAotCSZ3ZHQzX2ZjaywKLQkmcGVyX2w0X2ljaywKLQkmZ3BpbzZfaWNrLAotCSZncGlvNV9pY2ssCi0JJmdwaW80X2ljaywKLQkmZ3BpbzNfaWNrLAotCSZncGlvMl9pY2ssCi0JJndkdDNfaWNrLAotCSZ1YXJ0M19pY2ssCi0JJmdwdDlfaWNrLAotCSZncHQ4X2ljaywKLQkmZ3B0N19pY2ssCi0JJmdwdDZfaWNrLAotCSZncHQ1X2ljaywKLQkmZ3B0NF9pY2ssCi0JJmdwdDNfaWNrLAotCSZncHQyX2ljaywKLQkmbWNic3AyX2ljaywKLQkmbWNic3AzX2ljaywKLQkmbWNic3A0X2ljaywKLQkmbWNic3AyX2ZjaywKLQkmbWNic3AzX2ZjaywKLQkmbWNic3A0X2ZjaywKLQkmZW11X3NyY19jaywKLQkmcGNsa19mY2ssCi0JJnBjbGt4Ml9mY2ssCi0JJmF0Y2xrX2ZjaywKLQkmdHJhY2VjbGtfc3JjX2ZjaywKLQkmdHJhY2VjbGtfZmNrLAotCSZzcjFfZmNrLAotCSZzcjJfZmNrLAotCSZzcl9sNF9pY2ssCi0JJnNlY3VyZV8zMmtfZmNrLAotCSZncHQxMl9mY2ssCi0JJndkdDFfZmNrLAotfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggNGMzY2U5Yy4uMGU3ZDUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC03MSwxNiArNzIsMTMgQEAKIAlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQogCQlyZXR1cm47CiAKLQlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbV9uYW1lKTsKKwlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbS5uYW1lKTsKIAlpZiAoIXB3cmRtKSB7Ci0JCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogX2F1dG9kZXBfbG9va3VwOiBwb3dlcmRvbWFpbiAlcyAiCi0JCQkgImRvZXMgbm90IGV4aXN0XG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lKTsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiBhdXRvZGVwczogcG93ZXJkb21haW4gJXMgZG9lcyBub3QgZXhpc3RcbiIsCisJCQkgYXV0b2RlcC0+cHdyZG0ubmFtZSk7CisJCXB3cmRtID0gRVJSX1BUUigtRU5PRU5UKTsKIAl9Ci0JYXV0b2RlcC0+cHdyZG0gPSBwd3JkbTsKLQotCXJldHVybjsKKwlhdXRvZGVwLT5wd3JkbS5wdHIgPSBwd3JkbTsKIH0KIAogLyoKQEAgLTk1LDE2ICs5MywxOSBAQAogewogCXN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwOwogCi0JZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykgewotCQlpZiAoIWF1dG9kZXAtPnB3cmRtKQorCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbS5wdHI7IGF1dG9kZXArKykgeworCQlpZiAoSVNfRVJSKGF1dG9kZXAtPnB3cmRtLnB0cikpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQogCQkJY29udGludWU7CiAKIAkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBhZGRpbmcgJXMgc2xlZXBkZXAvd2tkZXAgZm9yICIKLQkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtX25hbWUsCi0JCQkgY2xrZG0tPnB3cmRtLT5uYW1lKTsKKwkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtLnB0ci0+bmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0ucHRyLT5uYW1lKTsKIAotCQlwd3JkbV9hZGRfc2xlZXBkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7Ci0JCXB3cmRtX2FkZF93a2RlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fYWRkX3NsZWVwZGVwKGNsa2RtLT5wd3JkbS5wdHIsIGF1dG9kZXAtPnB3cmRtLnB0cik7CisJCXB3cmRtX2FkZF93a2RlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwogCX0KIH0KIApAQCAtMTIwLDE2ICsxMjEsMTkgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcDsKIAotCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbV9uYW1lOyBhdXRvZGVwKyspIHsKLQkJaWYgKCFhdXRvZGVwLT5wd3JkbSkKKwlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspIHsKKwkJaWYgKElTX0VSUihhdXRvZGVwLT5wd3JkbS5wdHIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvbWFwX2NoaXBfaXMoYXV0b2RlcC0+b21hcF9jaGlwKSkKIAkJCWNvbnRpbnVlOwogCiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogcmVtb3ZpbmcgJXMgc2xlZXBkZXAvd2tkZXAgZm9yICIKLQkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtX25hbWUsCi0JCQkgY2xrZG0tPnB3cmRtLT5uYW1lKTsKKwkJCSAicHdyZG0gJXNcbiIsIGF1dG9kZXAtPnB3cmRtLnB0ci0+bmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0ucHRyLT5uYW1lKTsKIAotCQlwd3JkbV9kZWxfc2xlZXBkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7Ci0JCXB3cmRtX2RlbF93a2RlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fZGVsX3NsZWVwZGVwKGNsa2RtLT5wd3JkbS5wdHIsIGF1dG9kZXAtPnB3cmRtLnB0cik7CisJCXB3cmRtX2RlbF93a2RlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwogCX0KIH0KIApAQCAtMTc5LDcgKzE4Myw3IEBACiAKIAlhdXRvZGVwcyA9IGluaXRfYXV0b2RlcHM7CiAJaWYgKGF1dG9kZXBzKQotCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKQorCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspCiAJCQlfYXV0b2RlcF9sb29rdXAoYXV0b2RlcCk7CiB9CiAKQEAgLTIwMiwyMCArMjA2LDIwIEBACiAJaWYgKCFvbWFwX2NoaXBfaXMoY2xrZG0tPm9tYXBfY2hpcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcHdyZG0gPSBwd3JkbV9sb29rdXAoY2xrZG0tPnB3cmRtX25hbWUpOworCXB3cmRtID0gcHdyZG1fbG9va3VwKGNsa2RtLT5wd3JkbS5uYW1lKTsKIAlpZiAoIXB3cmRtKSB7Ci0JCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG1fcmVnaXN0ZXIgJXM6IHBvd2VyZG9tYWluICVzICIKLQkJCSAiZG9lcyBub3QgZXhpc3RcbiIsIGNsa2RtLT5uYW1lLCBjbGtkbS0+cHdyZG1fbmFtZSk7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzOiBwb3dlcmRvbWFpbiAlcyBkb2VzIG5vdCBleGlzdFxuIiwKKwkJCWNsa2RtLT5uYW1lLCBjbGtkbS0+cHdyZG0ubmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQljbGtkbS0+cHdyZG0gPSBwd3JkbTsKKwljbGtkbS0+cHdyZG0ucHRyID0gcHdyZG07CiAKIAltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CiAJLyogVmVyaWZ5IHRoYXQgdGhlIGNsb2NrZG9tYWluIGlzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KIAlpZiAoX2Nsa2RtX2xvb2t1cChjbGtkbS0+bmFtZSkpIHsKIAkJcmV0ID0gLUVFWElTVDsKIAkJZ290byBjcl91bmxvY2s7Ci0JfTsKKwl9CiAKIAlsaXN0X2FkZCgmY2xrZG0tPm5vZGUsICZjbGtkbV9saXN0KTsKIApAQCAtMjQyLDcgKzI0Niw3IEBACiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwd3JkbV9kZWxfY2xrZG0oY2xrZG0tPnB3cmRtLCBjbGtkbSk7CisJcHdyZG1fZGVsX2Nsa2RtKGNsa2RtLT5wd3JkbS5wdHIsIGNsa2RtKTsKIAogCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKIAlsaXN0X2RlbCgmY2xrZG0tPm5vZGUpOwpAQCAtMzI3LDcgKzMzMSw3IEBACiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gY2xrZG0tPnB3cmRtOworCXJldHVybiBjbGtkbS0+cHdyZG0ucHRyOwogfQogCiAKQEAgLTM0OCw3ICszNTIsNyBAQAogCWlmICghY2xrZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdiA9IGNtX3JlYWRfbW9kX3JlZyhjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwl2ID0gY21fcmVhZF9tb2RfcmVnKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKIAl2ICY9IGNsa2RtLT5jbGt0cmN0cmxfbWFzazsKIAl2ID4+PSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spOwogCkBAIC0zODAsNyArMzg0LDcgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAogCQljbV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEUsCi0JCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOwogCiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCkBAIC0zODgsNyArMzkyLDcgQEAKIAkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKIAogCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKLQkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKIAogCX0gZWxzZSB7CiAJCUJVRygpOwpAQCAtNDIyLDcgKzQyNiw3IEBACiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAKIAkJY21fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEUsCi0JCQkJICAgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCQkgICAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKIAogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIApAQCAtNDMwLDcgKzQzNCw3IEBACiAJCQkgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSk7CiAKIAkJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssIHYsCi0JCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CiAKIAl9IGVsc2UgewogCQlCVUcoKTsKQEAgLTQ3OCw3ICs0ODIsNyBAQAogCiAJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCiAJCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLAorCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKIAkJCSAgICBDTV9DTEtTVENUUkwpOwogfQogCkBAIC01MTYsNyArNTIwLDcgQEAKIAogCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAogCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKQEAgLTU2Nyw2ICs1NzEsOCBAQAogCWVsc2UKIAkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKIAorCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaAppbmRleCBjZDg2ZGNjLi4yODFkNWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zLmgKQEAgLTE0LDEyICsxNCwyOSBAQAogCiAvKgogICogT01BUDIvMy1jb21tb24gY2xvY2tkb21haW5zCisgKgorICogRXZlbiB0aG91Z2ggdGhlIDI0MjAgaGFzIGEgc2luZ2xlIFBSQ00gbW9kdWxlIGZyb20gdGhlCisgKiBpbnRlcmNvbm5lY3QncyBwZXJzcGVjdGl2ZSwgaW50ZXJuYWxseSBpdCBkb2VzIGFwcGVhciB0byBoYXZlCisgKiBzZXBhcmF0ZSBQUk0gYW5kIENNIGNsb2NrZG9tYWlucy4gIFRoZSB1c3VhbCB0ZXN0IGNhc2UgaXMKKyAqIHN5c19jbGtvdXQvc3lzX2Nsa291dDIuCiAgKi8KIAogLyogVGhpcyBpcyBhbiBpbXBsaWNpdCBjbG9ja2RvbWFpbiAtIGl0IGlzIG5ldmVyIGRlZmluZWQgYXMgc3VjaCBpbiBUUk0gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gd2t1cF9jbGtkbSA9IHsKIAkubmFtZQkJPSAid2t1cF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAid2t1cF9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAid2t1cF9wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8IENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBwcm1fY2xrZG0gPSB7CisJLm5hbWUJCT0gInBybV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAid2t1cF9wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8IENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjbV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY21fY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKIH07CiAKQEAgLTMxLDcgKzQ4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfMjQyMF9jbGtkbSA9IHsKIAkubmFtZQkJPSAibXB1X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJtcHVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCkBAIC0zOSw3ICs1Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gaXZhMV8yNDIwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJpdmExX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJkc3BfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDIwX0FVVE9TVEFURV9JVkFfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCkBAIC01Niw3ICs3Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAibXB1X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLApAQCAtNjQsNyArODEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1kbV9jbGtkbSA9IHsKIAkubmFtZQkJPSAibWRtX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJtZG1fcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1kbV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDMwX0FVVE9TVEFURV9NRE1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCkBAIC04MSw3ICs5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImRzcF9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNwX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKQEAgLTg5LDcgKzEwNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZ2Z4XzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImdmeF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiZ2Z4X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLApAQCAtOTcsNyArMTE0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTDNfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCkBAIC0xMDUsNyArMTIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTDRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCkBAIC0xMTMsNyArMTMwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKQEAgLTEzMCw3ICsxNDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8zNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gIm1wdV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xMzgsNyArMTU1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBuZW9uX2Nsa2RtID0gewogCS5uYW1lCQk9ICJuZW9uX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJuZW9uX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJuZW9uX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX05FT05fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xNDYsNyArMTYzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpdmEyX2Nsa2RtID0gewogCS5uYW1lCQk9ICJpdmEyX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJpdmEyX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJpdmEyX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xNTQsNyArMTcxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMzQzMGVzMV9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJnZnhfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSksCkBAIC0xNjIsMTAgKzE3OSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHNneF9jbGtkbSA9IHsKIAkubmFtZQkJPSAic2d4X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJzZ3hfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInNneF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogfTsKIAogLyoKQEAgLTE3Nyw3ICsxOTQsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGQyZF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZDJkX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0QyRF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTE4NSw3ICsyMDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMzR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTE5Myw3ICsyMTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMzR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MNF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTIwMSw3ICsyMTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18zNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJkc3NfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImRzc19wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNzX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTIwOSw3ICsyMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNhbV9jbGtkbSA9IHsKIAkubmFtZQkJPSAiY2FtX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjYW1fcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNhbV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0yMTcsMjggKzIzNCw2MiBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHVzYmhvc3RfY2xrZG0gPSB7CiAJLm5hbWUJCT0gInVzYmhvc3RfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gInVzYmhvc3RfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInVzYmhvc3RfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMl9DTEtUUkNUUkxfVVNCSE9TVF9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHBlcl9jbGtkbSA9IHsKIAkubmFtZQkJPSAicGVyX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJwZXJfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInBlcl9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9QRVJfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCisvKgorICogRGlzYWJsZSBodyBzdXBlcnZpc2VkIG1vZGUgZm9yIGVtdV9jbGtkbSwgYmVjYXVzZSBlbXVfcHdyZG0gaXMKKyAqIHN3aXRjaGVkIG9mIGV2ZW4gaWYgc2R0aSBpcyBpbiB1c2UKKyAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBlbXVfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImVtdV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiZW11X3B3cmRtIiwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgQ0xLRE1fQ0FOX1NXU1VQLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImVtdV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gLyogQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgICovQ0xLRE1fQ0FOX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGwxX2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsMV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDFfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsMl9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDJfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGwyX3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHBsbDNfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRwbGwzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkcGxsM19wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGw0X2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsNF9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDRfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsNV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDVfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGw1X3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKK307CisKICNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCiAKIC8qCkBAIC0yNDcsMTQgKzI5OCwxNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgY2xrZG1fcHdyZG1fYXV0b2RlcHNbXSA9IHsKIAl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5wd3JkbQkgICA9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKIAl9LAogCXsKLQkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5wd3JkbQkgICA9IHsgLm5hbWUgPSAiaXZhMl9wd3JkbSIgfSwKIAkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCiAJfSwKLQl7IE5VTEwgfQorCXsKKwkJLnB3cmRtCSAgID0geyAubmFtZSA9IE5VTEwgfSwKKwl9CiB9OwogCiAvKgpAQCAtMjY0LDYgKzMxNyw4IEBACiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpjbG9ja2RvbWFpbnNfb21hcFtdID0gewogCiAJJndrdXBfY2xrZG0sCisJJmNtX2Nsa2RtLAorCSZwcm1fY2xrZG0sCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAogCSZtcHVfMjQyMF9jbGtkbSwKQEAgLTI5Nyw2ICszNTIsMTEgQEAKIAkmdXNiaG9zdF9jbGtkbSwKIAkmcGVyX2Nsa2RtLAogCSZlbXVfY2xrZG0sCisJJmRwbGwxX2Nsa2RtLAorCSZkcGxsMl9jbGtkbSwKKwkmZHBsbDNfY2xrZG0sCisJJmRwbGw0X2Nsa2RtLAorCSZkcGxsNV9jbGtkbSwKICNlbmRpZgogCiAJTlVMTCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IDEwOThlY2YuLjI5N2EyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaApAQCAtMTEwLDM1ICsxMTAsNTYgQEAKICNkZWZpbmUgT01BUDI0WFhfRU5fREVTCQkJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QxX0NPUkUgc3BlY2lmaWMgYml0cyAqLwotI2RlZmluZSBPTUFQMjRYWF9TVF9NQUlMQk9YRVMJCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1dEVDQJCQkJKDEgPDwgMjkpCi0jZGVmaW5lIE9NQVAyNDIwX1NUX1dEVDMJCQkJKDEgPDwgMjgpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01TUFJPCQkJCSgxIDw8IDI3KQotI2RlZmluZSBPTUFQMjRYWF9TVF9GQUMJCQkJCSgxIDw8IDI1KQotI2RlZmluZSBPTUFQMjQyMF9TVF9FQUMJCQkJCSgxIDw8IDI0KQotI2RlZmluZSBPTUFQMjRYWF9TVF9IRFEJCQkJCSgxIDw8IDIzKQotI2RlZmluZSBPTUFQMjRYWF9TVF9JMkMyCQkJCSgxIDw8IDIwKQotI2RlZmluZSBPTUFQMjRYWF9TVF9JMkMxCQkJCSgxIDw8IDE5KQotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDIJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMQkJCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfRFNTCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfTUFTSwkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQ0X1NISUZUCQkJCTI5CisjZGVmaW5lIE9NQVAyNFhYX1NUX1dEVDRfTUFTSwkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDI0MjBfU1RfV0RUM19TSElGVAkJCQkyOAorI2RlZmluZSBPTUFQMjQyMF9TVF9XRFQzX01BU0sJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01TUFJPX1NISUZUCQkJCTI3CisjZGVmaW5lIE9NQVAyNFhYX1NUX01TUFJPX01BU0sJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0ZBQ19TSElGVAkJCQkyNQorI2RlZmluZSBPTUFQMjRYWF9TVF9GQUNfTUFTSwkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDI0MjBfU1RfRUFDX1NISUZUCQkJCTI0CisjZGVmaW5lIE9NQVAyNDIwX1NUX0VBQ19NQVNLCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQMjRYWF9TVF9IRFFfU0hJRlQJCQkJMjMKKyNkZWZpbmUgT01BUDI0WFhfU1RfSERRX01BU0sJCQkJKDEgPDwgMjMpCisjZGVmaW5lIE9NQVAyNDIwX1NUX0kyQzJfU0hJRlQJCQkJMjAKKyNkZWZpbmUgT01BUDI0MjBfU1RfSTJDMl9NQVNLCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMjQyMF9TVF9JMkMxX1NISUZUCQkJCTE5CisjZGVmaW5lIE9NQVAyNDIwX1NUX0kyQzFfTUFTSwkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX01BU0sJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9TSElGVAkJCTE1CisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9NQVNLCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMjRYWF9TVF9EU1NfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9TVF9EU1NfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QyX0NPUkUgKi8KLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNCU1A1CQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNAkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDMJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfU1NJCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDVfU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNV9NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNF9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNF9NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQM19TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQM19NQVNLCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NTSV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NTSV9NQVNLCQkJCSgxIDw8IDEpCiAKIC8qIENNX0lETEVTVDNfQ09SRSAqLwogLyogMjQzMCBvbmx5ICovCi0jZGVmaW5lIE9NQVAyNDMwX1NUX1NEUkMJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0MzBfU1RfU0RSQ19NQVNLCQkJCSgxIDw8IDIpCiAKIC8qIENNX0lETEVTVDRfQ09SRSAqLwotI2RlZmluZSBPTUFQMjRYWF9TVF9QS0EJCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0FFUwkJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfUk5HCQkJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQMjRYWF9TVF9TSEEJCQkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0RFUwkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfUEtBX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDI0WFhfU1RfUEtBX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfQUVTX1NISUZUCQkJCTMKKyNkZWZpbmUgT01BUDI0WFhfU1RfQUVTX01BU0sJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfUk5HX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfUk5HX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfU0hBX1NISUZUCQkJCTEKKyNkZWZpbmUgT01BUDI0WFhfU1RfU0hBX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfREVTX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfREVTX01BU0sJCQkJKDEgPDwgMCkKIAogLyogQ01fQVVUT0lETEUxX0NPUkUgKi8KICNkZWZpbmUgT01BUDI0WFhfQVVUT19DQU0JCQkJKDEgPDwgMzEpCkBAIC0yNzUsMTEgKzI5NiwxNiBAQAogI2RlZmluZSBPTUFQMjRYWF9FTl8zMktTWU5DCQkJCSgxIDw8IDEpCiAKIC8qIENNX0lETEVTVF9XS1VQIHNwZWNpZmljIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0MzBfU1RfSUNSCQkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMjRYWF9TVF9PTUFQQ1RSTAkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQxCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01QVV9XRFQJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjQzMF9TVF9JQ1JfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMjQzMF9TVF9JQ1JfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9PTUFQQ1RSTF9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDI0WFhfU1RfT01BUENUUkxfTUFTSwkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1dEVDFfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQxX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTVBVX1dEVF9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDI0WFhfU1RfTVBVX1dEVF9NQVNLCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQ19TSElGVAkJCTEKKyNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQ19NQVNLCQkJKDEgPDwgMSkKIAogLyogQ01fQVVUT0lETEVfV0tVUCAqLwogI2RlZmluZSBPTUFQMjRYWF9BVVRPX09NQVBDVFJMCQkJCSgxIDw8IDUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAppbmRleCAyMTlmNWM4Li42ZjNmNWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKQEAgLTE4MywzMSArMTgzLDU4IEBACiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0lETEVTVDFfQ09SRSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0lDUgkJCQkJKDEgPDwgMjkpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzIJCQkJKDEgPDwgMjgpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTEyCQkJCSgxIDw8IDI3KQotI2RlZmluZSBPTUFQMzQzMF9TVF9ERVMyCQkJCSgxIDw8IDI2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9NU1BSTwkJCQkoMSA8PCAyMykKLSNkZWZpbmUgT01BUDM0MzBfU1RfSERRCQkJCQkoMSA8PCAyMikKLSNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRkFDCQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAzNDMwRVMxX1NUX01BSUxCT1hFUwkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX09NQVBDVFJMCQkJCSgxIDw8IDYpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NETUEJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDM0MzBfU1RfU0RSQwkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9TU0kJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX01NQzNfU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9NTUMzX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfSUNSX1NISUZUCQkJCTI5CisjZGVmaW5lIE9NQVAzNDMwX1NUX0lDUl9NQVNLCQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQMzQzMF9TVF9BRVMyX1NISUZUCQkJCTI4CisjZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzJfTUFTSwkJCQkoMSA8PCAyOCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0hBMTJfU0hJRlQJCQkJMjcKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0hBMTJfTUFTSwkJCQkoMSA8PCAyNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfREVTMl9TSElGVAkJCQkyNgorI2RlZmluZSBPTUFQMzQzMF9TVF9ERVMyX01BU0sJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01TUFJPX1NISUZUCQkJCTIzCisjZGVmaW5lIE9NQVAzNDMwX1NUX01TUFJPX01BU0sJCQkJKDEgPDwgMjMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0hEUV9TSElGVAkJCQkyMgorI2RlZmluZSBPTUFQMzQzMF9TVF9IRFFfTUFTSwkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRkFDX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9GQUNfTUFTSwkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9TU0lfSURMRV9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfU1NJX0lETEVfTUFTSwkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01BSUxCT1hFU19TSElGVAkJCTcKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUFJTEJPWEVTX01BU0sJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9PTUFQQ1RSTF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfU1RfT01BUENUUkxfTUFTSwkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NETUFfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMzQzMF9TVF9TRE1BX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0RSQ19TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NEUkNfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9TU0lfU1REQllfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NTSV9TVERCWV9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUMl9DT1JFICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1BLQQkJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMQkJCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9STkcJCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTExCQkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzEJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfUEtBX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDM0MzBfU1RfUEtBX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzFfTUFTSwkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9STkdfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMzQzMF9TVF9STkdfTUFTSwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9TVF9TSEExMV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTExX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfREVTMV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzFfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QzX0NPUkUgKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCVExMX1NISUZUCQkJMgogI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0JUTExfTUFTSwkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0NQRUZVU0VfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0NQRUZVU0VfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFMV9DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fTU1DMwkJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19NTUMzX1NISUZUCQkJMzAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19JQ1IJCQkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fSUNSX1NISUZUCQkJMjkKICNkZWZpbmUgT01BUDM0MzBfQVVUT19BRVMyCQkJCSgxIDw8IDI4KQogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0FFUzJfU0hJRlQJCQkyOAogI2RlZmluZSBPTUFQMzQzMF9BVVRPX1NIQTEyCQkJCSgxIDw8IDI3KQpAQCAtMjc2LDYgKzMwMyw5IEBACiAjZGVmaW5lIE9NQVAzNDMwX0FVVE9fREVTMV9TSElGVAkJCTAKIAogLyogQ01fQVVUT0lETEUzX0NPUkUgKi8KKyNkZWZpbmUJT01BUDM0MzBFUzJfQVVUT19VU0JIT1NUCQkJKDEgPDwgMCkKKyNkZWZpbmUJT01BUDM0MzBFUzJfQVVUT19VU0JIT1NUX1NISUZUCQkJMAorI2RlZmluZQlPTUFQMzQzMEVTMl9BVVRPX1VTQlRMTAkJCQkoMSA8PCAyKQogI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX1VTQlRMTF9TSElGVAkJCTIKICNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0JUTExfTUFTSwkJCSgxIDw8IDIpCiAKQEAgLTMzMiw4ICszNjIsMTIgQEAKICNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYX01BU0sJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9TR1ggKi8KLSNkZWZpbmUgT01BUDM0MzBFUzJfRU5fU0dYX1NISUZUCQkJMQotI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9TR1hfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVAkJMQorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9NQVNLCQkoMSA8PCAxKQorCisvKiBDTV9JQ0xLRU5fU0dYICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX01BU0sJCSgxIDw8IDApCiAKIC8qIENNX0NMS1NFTF9TR1ggKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9TSElGVAkJCTAKQEAgLTM0OSw2ICszODMsNyBAQAogCiAvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQJCQk5CisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfTUFTSwkJCSgxIDw8IDkpCiAKIC8qIENNX0lDTEtFTl9XS1VQIHNwZWNpZmljIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfRU5fV0RUMQkJCQkoMSA8PCA0KQpAQCAtMzU3LDExICszOTIsMTggQEAKICNkZWZpbmUgT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVAkJCTIKIAogLyogQ01fSURMRVNUX1dLVVAgc3BlY2lmaWMgYml0cyAqLwotI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQyCQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDEJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfMzJLU1lOQwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0lNT0NQX1NISUZUCQkJOQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0lNT0NQX01BU0sJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQyX1NISUZUCQkJCTUKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMl9NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDFfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQxX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfMzJLU1lOQ19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfMzJLU1lOQ19NQVNLCQkJKDEgPDwgMikKIAogLyogQ01fQVVUT0lETEVfV0tVUCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX1VTSU1PQ1AJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0lNT0NQX1NISUZUCQkJOQogI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDIJCQkJKDEgPDwgNSkKICNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQyX1NISUZUCQkJNQogI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDEJCQkJKDEgPDwgNCkKQEAgLTQyNiw2ICs0NjgsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUMl9DS0dFTiAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0lNX0NMS19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNJTV9DTEtfTUFTSwkJCSgxIDw8IDIpCiAjZGVmaW5lIE9NQVAzNDMwRVMyX1NUXzEyME1fQ0xLX1NISUZUCQkJMQogI2RlZmluZSBPTUFQMzQzMEVTMl9TVF8xMjBNX0NMS19NQVNLCQkJKDEgPDwgMSkKICNkZWZpbmUgT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfU0hJRlQJCTAKQEAgLTQ0OSw4ICs0OTMsMTIgQEAKICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX01VTFRfTUFTSwkJCSgweDdmZiA8PCAxNikKICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0RJVl9TSElGVAkJCTgKICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0RJVl9NQVNLCQkJKDB4N2YgPDwgOCkKLSNkZWZpbmUgT01BUDM0MzBfU09VUkNFXzU0TQkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfNDhNCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV85Nk1fU0hJRlQJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV85Nk1fTUFTSwkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV81NE1fU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV81NE1fTUFTSwkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV80OE1fU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV80OE1fTUFTSwkJCSgxIDw8IDMpCiAKIC8qIENNX0NMS1NFTDJfUExMICovCiAjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX01VTFRfU0hJRlQJCQk4CkBAIC00OTMsNyArNTQxLDEyIEBACiAjZGVmaW5lIE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZUCQkwCiAKIC8qIENNX0lETEVTVF9EU1MgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfRFNTCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9EU1NfSURMRV9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfRFNTX0lETEVfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0RTU19TVERCWV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfRFNTX1NUREJZX01BU0sJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9EU1NfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0RTU19NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFX0RTUyAqLwogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RTUwkJCQkoMSA8PCAwKQpAQCAtNTE2LDYgKzU2OSw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0RTU19NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX0NBTSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX0NTSTIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fQ1NJMl9TSElGVAkJCQkxCiAKIC8qIENNX0lDTEtFTl9DQU0gc3BlY2lmaWMgYml0cyAqLwogCkBAIC01NDUsMTAgKzYwMCwxNCBAQAogLyogQ01fSUNMS0VOX1BFUiBzcGVjaWZpYyBiaXRzICovCiAKIC8qIENNX0lETEVTVF9QRVIgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMwkJCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1A0CQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMwkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDIJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUM19TSElGVAkJCQkxMgorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQzX01BU0sJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1A0X01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AzX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDNfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMl9NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFX1BFUiAqLwogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU82CQkJCSgxIDw8IDE3KQpAQCAtNjc2LDYgKzczNSwxMCBAQAogI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1RfVVNCSE9TVCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0JIT1NUX0lETEVfU0hJRlQJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCSE9TVF9JRExFX01BU0sJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTQkhPU1RfU1REQllfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCSE9TVF9TVERCWV9NQVNLCQkoMSA8PCAwKQogCiAvKiBDTV9BVVRPSURMRV9VU0JIT1NUICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVF9TSElGVAkJCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggY2UwM2ZhNy4uZDZiNGIyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTI4LDEzICsyOCwxMjEgQEAKICNpbmNsdWRlIDxtYWNoL2VhYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQotI2RlZmluZSBPTUFQMl9NQk9YX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfTUFJTEJPWF9CQVNFKQorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMl9NT0RVTEUpCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWJveF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2FtX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX01CT1hfQkFTRSwKLQkJLmVuZAkJPSBPTUFQMl9NQk9YX0JBU0UgKyAweDExZiwKKwkJLnN0YXJ0CQk9IE9NQVAyNFhYX0NBTUVSQV9CQVNFLAorCQkuZW5kCQk9IE9NQVAyNFhYX0NBTUVSQV9CQVNFICsgMHhmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8yNFhYX0NBTV9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2NhbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAyNHh4Y2FtIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNhbV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNhbV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2NhbWVyYSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9jYW1fZGV2aWNlKTsKK30KKworI2VsaWYgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAzX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM2lzcF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ0JVRkZfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ0JVRkZfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ0NQMl9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9DQ1AyX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0NDRENfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ0NEQ19FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNDMwX0lTUF9ISVNUX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0hJU1RfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfSDNBX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0gzQV9FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNDMwX0lTUF9QUkVWX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX1BSRVZfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfUkVTWl9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9SRVNaX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX1NCTF9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9TQkxfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ1NJMkFfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ1NJMkFfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfQ1NJMlBIWV9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9DU0kyUEhZX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSU5UXzM0WFhfQ0FNX0lSUSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzaXNwX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDNpc3AiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDNpc3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvbWFwM2lzcF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2NhbWVyYSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDNpc3BfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2NhbWVyYSh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01CT1hfRldLKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX01CT1hfRldLX01PRFVMRSkKKworI2RlZmluZSBNQk9YX1JFR19TSVpFCTB4MTIwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWJveF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMjRYWF9NQUlMQk9YX0JBU0UsCisJCS5lbmQJCT0gT01BUDI0WFhfTUFJTEJPWF9CQVNFICsgTUJPWF9SRUdfU0laRSAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKQEAgLTQ3LDIwICsxNTUsNDAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM19tYm94X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNFhYX01BSUxCT1hfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzRYWF9NQUlMQk9YX0JBU0UgKyBNQk9YX1JFR19TSVpFIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSU5UXzI0WFhfTUFJTF9VMF9NUFUsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWJveF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm1haWxib3giLAorCS5uYW1lCQk9ICJvbWFwMi1tYWlsYm94IiwKIAkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1ib3hfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtYm94X3Jlc291cmNlcywKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKQogeworCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQltYm94X2RldmljZS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMl9tYm94X3Jlc291cmNlcyk7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDJfbWJveF9yZXNvdXJjZXM7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0MzAoKSkgeworCQltYm94X2RldmljZS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwM19tYm94X3Jlc291cmNlcyk7CisJCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcDNfbWJveF9yZXNvdXJjZXM7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCIlczogcGxhdGZvcm0gbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWJveF9kZXZpY2UpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKSB7IH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19PTUFQX01CT1hfRldLICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX1NUSSkKIApAQCAtMzQ4LDExICs0NzYsMTIgQEAKIAkJfQogCiAJCWR1bW15X3BkZXYuaWQgPSBpOwotCQlpY2xrID0gY2xrX2dldChkZXYsICJtbWNoc19pY2siKTsKKwkJZGV2X3NldF9uYW1lKCZkdW1teV9wZGV2LmRldiwgIm1tY2ktb21hcC1ocy4lZCIsIGkpOworCQlpY2xrID0gY2xrX2dldChkZXYsICJpY2siKTsKIAkJaWYgKGljbGsgJiYgY2xrX2VuYWJsZShpY2xrKSkKIAkJCWljbGsgPSBOVUxMOwogCi0JCWZjbGsgPSBjbGtfZ2V0KGRldiwgIm1tY2hzX2ZjayIpOworCQlmY2xrID0gY2xrX2dldChkZXYsICJmY2siKTsKIAkJaWYgKGZjbGsgJiYgY2xrX2VuYWJsZShmY2xrKSkKIAkJCWZjbGsgPSBOVUxMOwogCkBAIC01MDYsNiArNjM1LDcgQEAKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwogCW9tYXBfaHNtbWNfcmVzZXQoKTsKKwlvbWFwX2luaXRfY2FtZXJhKCk7CiAJb21hcF9pbml0X21ib3goKTsKIAlvbWFwX2luaXRfbWNzcGkoKTsKIAlvbWFwX2hkcV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggYjUyYTAyZi4uMzRiNTkxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtMjE3LDggKzIxNywxMyBAQAogCQlvbWFwX2NoaXAub2MgPSBDSElQX0lTX09NQVAzNDMwOwogCQlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApCiAJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzQzMEVTMTsKLQkJZWxzZSBpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJZWxzZSBpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzAgJiYKKwkJCSBvbWFwX3JldigpIDw9IE9NQVAzNDMwX1JFVl9FUzJfMSkKIAkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNDMwRVMyOworCQllbHNlIGlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzNfMCkKKwkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNDMwRVMzXzA7CisJCWVsc2UgaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTM18xKQorCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM0MzBFUzNfMTsKIAl9IGVsc2UgewogCQlwcl9lcnIoIlVuaW5pdGlhbGl6ZWQgb21hcF9jaGlwLCBwbGVhc2UgZml4IVxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDVlYTY0ZjkuLjkxNmZjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+Ci0KLSNpbmNsdWRlICJtZW1vcnkuaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCiAKQEAgLTE5NSwxMiArMTk1LDEyIEBACiAJb21hcGZiX3Jlc2VydmVfc2RyYW0oKTsKIH0KIAotdm9pZCBfX2luaXQgb21hcDJfaW5pdF9jb21tb25faHcodm9pZCkKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCkKIHsKIAlvbWFwMl9tdXhfaW5pdCgpOwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKIAlvbWFwMl9jbGtfaW5pdCgpOwotCW9tYXAyX2luaXRfbWVtb3J5KCk7CisJb21hcDJfc2RyY19pbml0KHNwKTsKIAlncG1jX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKaW5kZXggMzJiN2FmMy4uZmQ1YjhhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogTWFpbGJveCByZXNlcnZhdGlvbiBtb2R1bGVzIGZvciBPTUFQMgorICogTWFpbGJveCByZXNlcnZhdGlvbiBtb2R1bGVzIGZvciBPTUFQMi8zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICogV3JpdHRlbiBieTogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgotICogICAgICAgIGFuZCAgUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKiAgICAgICAgYW5kICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDQwICsxOCwyMiBAQAogI2luY2x1ZGUgPG1hY2gvbWFpbGJveC5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCi0jZGVmaW5lIE1BSUxCT1hfUkVWSVNJT04JCTB4MDAKLSNkZWZpbmUgTUFJTEJPWF9TWVNDT05GSUcJCTB4MTAKLSNkZWZpbmUgTUFJTEJPWF9TWVNTVEFUVVMJCTB4MTQKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzAJCTB4NDAKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzEJCTB4NDQKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzIJCTB4NDgKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzMJCTB4NGMKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzQJCTB4NTAKLSNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzUJCTB4NTQKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzAJCTB4ODAKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzEJCTB4ODQKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzIJCTB4ODgKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzMJCTB4OGMKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzQJCTB4OTAKLSNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzUJCTB4OTQKLSNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMAkJMHhjMAotI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU18xCQkweGM0Ci0jZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzIJCTB4YzgKLSNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMwkJMHhjYwotI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU180CQkweGQwCi0jZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzUJCTB4ZDQKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMAkJMHgxMDAKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMAkJMHgxMDQKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMQkJMHgxMDgKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMQkJMHgxMGMKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMgkJMHgxMTAKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMgkJMHgxMTQKLSNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMwkJMHgxMTgKLSNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMwkJMHgxMWMKKyNkZWZpbmUgTUFJTEJPWF9SRVZJU0lPTgkJMHgwMDAKKyNkZWZpbmUgTUFJTEJPWF9TWVNDT05GSUcJCTB4MDEwCisjZGVmaW5lIE1BSUxCT1hfU1lTU1RBVFVTCQkweDAxNAorI2RlZmluZSBNQUlMQk9YX01FU1NBR0UobSkJCSgweDA0MCArIDQgKiAobSkpCisjZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVUyhtKQkJKDB4MDgwICsgNCAqIChtKSkKKyNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVMobSkJCSgweDBjMCArIDQgKiAobSkpCisjZGVmaW5lIE1BSUxCT1hfSVJRU1RBVFVTKHUpCQkoMHgxMDAgKyA4ICogKHUpKQorI2RlZmluZSBNQUlMQk9YX0lSUUVOQUJMRSh1KQkJKDB4MTA0ICsgOCAqICh1KSkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWJveF9iYXNlOworI2RlZmluZSBNQUlMQk9YX0lSUV9ORVdNU0codSkJCSgxIDw8ICgyICogKHUpKSkKKyNkZWZpbmUgTUFJTEJPWF9JUlFfTk9URlVMTCh1KQkJKDEgPDwgKDIgKiAodSkgKyAxKSkKIAotI2RlZmluZSBNQUlMQk9YX0lSUV9OT1RGVUxMKG4pCQkoMSA8PCAoMiAqIChuKSArIDEpKQotI2RlZmluZSBNQUlMQk9YX0lSUV9ORVdNU0cobikJCSgxIDw8ICgyICogKG4pKSkKKyNkZWZpbmUgTUJPWF9SRUdfU0laRQkJCTB4MTIwCisjZGVmaW5lIE1CT1hfTlJfUkVHUwkJCShNQk9YX1JFR19TSVpFIC8gc2l6ZW9mKHUzMikpCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1ib3hfYmFzZTsKIAogc3RydWN0IG9tYXBfbWJveDJfZmlmbyB7CiAJdW5zaWduZWQgbG9uZyBtc2c7CkBAIC02Niw2ICs0OCw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFzdGF0dXM7CiAJdTMyIG5ld21zZ19iaXQ7CiAJdTMyIG5vdGZ1bGxfYml0OworCXUzMiBjdHhbTUJPWF9OUl9SRUdTXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICptYm94X2lja19oYW5kbGU7CkBAIC03MywxNCArNTYsMTQgQEAKIHN0YXRpYyB2b2lkIG9tYXAyX21ib3hfZW5hYmxlX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LAogCQkJCSAgb21hcF9tYm94X3R5cGVfdCBpcnEpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYm94X3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYm94X3JlYWRfcmVnKHNpemVfdCBvZnMpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKG1ib3hfYmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG1ib3hfYmFzZSArIG9mcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGlubGluZSB2b2lkIG1ib3hfd3JpdGVfcmVnKHUzMiB2YWwsIHNpemVfdCBvZnMpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgbWJveF9iYXNlICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBtYm94X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBNYWlsYm94IEgvVyBwcmVwYXJhdGlvbnMgKi8KQEAgLTk1LDYgKzc4LDkgQEAKIAl9CiAJY2xrX2VuYWJsZShtYm94X2lja19oYW5kbGUpOwogCisJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CisJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKKwogCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KIAlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7CiAJbCB8PSAweDAwMDAwMDExOwpAQCAtMTgzLDYgKzE2OSwzMiBAQAogCXJldHVybiAoZW5hYmxlICYgc3RhdHVzICYgYml0KTsKIH0KIAorc3RhdGljIHZvaWQgb21hcDJfbWJveF9zYXZlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWludCBpOworCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSBtYm94LT5wcml2OworCisJZm9yIChpID0gMDsgaSA8IE1CT1hfTlJfUkVHUzsgaSsrKSB7CisJCXAtPmN0eFtpXSA9IG1ib3hfcmVhZF9yZWcoaSAqIHNpemVvZih1MzIpKTsKKworCQlkZXZfZGJnKG1ib3gtPmRldiwgIiVzOiBbJTAyeF0gJTA4eFxuIiwgX19mdW5jX18sCisJCQlpLCBwLT5jdHhbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgb21hcDJfbWJveF9yZXN0b3JlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWludCBpOworCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSBtYm94LT5wcml2OworCisJZm9yIChpID0gMDsgaSA8IE1CT1hfTlJfUkVHUzsgaSsrKSB7CisJCW1ib3hfd3JpdGVfcmVnKHAtPmN0eFtpXSwgaSAqIHNpemVvZih1MzIpKTsKKworCQlkZXZfZGJnKG1ib3gtPmRldiwgIiVzOiBbJTAyeF0gJTA4eFxuIiwgX19mdW5jX18sCisJCQlpLCBwLT5jdHhbaV0pOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3hfb3BzIG9tYXAyX21ib3hfb3BzID0gewogCS50eXBlCQk9IE9NQVBfTUJPWF9UWVBFMiwKIAkuc3RhcnR1cAk9IG9tYXAyX21ib3hfc3RhcnR1cCwKQEAgLTE5NSw2ICsyMDcsOCBAQAogCS5kaXNhYmxlX2lycQk9IG9tYXAyX21ib3hfZGlzYWJsZV9pcnEsCiAJLmFja19pcnEJPSBvbWFwMl9tYm94X2Fja19pcnEsCiAJLmlzX2lycQkJPSBvbWFwMl9tYm94X2lzX2lycSwKKwkuc2F2ZV9jdHgJPSBvbWFwMl9tYm94X3NhdmVfY3R4LAorCS5yZXN0b3JlX2N0eAk9IG9tYXAyX21ib3hfcmVzdG9yZV9jdHgsCiB9OwogCiAvKgpAQCAtMjA5LDE1ICsyMjMsMTUgQEAKIC8qIERTUCAqLwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgb21hcDJfbWJveF9kc3BfcHJpdiA9IHsKIAkudHhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMCwKLQkJLmZpZm9fc3RhdAk9IE1BSUxCT1hfRklGT1NUQVRVU18wLAorCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRSgwKSwKKwkJLmZpZm9fc3RhdAk9IE1BSUxCT1hfRklGT1NUQVRVUygwKSwKIAl9LAogCS5yeF9maWZvID0gewotCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRV8xLAotCQkubXNnX3N0YXQJPSBNQUlMQk9YX01TR1NUQVRVU18xLAorCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRSgxKSwKKwkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVMoMSksCiAJfSwKLQkuaXJxZW5hYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEVfMCwKLQkuaXJxc3RhdHVzCT0gTUFJTEJPWF9JUlFTVEFUVVNfMCwKKwkuaXJxZW5hYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEUoMCksCisJLmlycXN0YXR1cwk9IE1BSUxCT1hfSVJRU1RBVFVTKDApLAogCS5ub3RmdWxsX2JpdAk9IE1BSUxCT1hfSVJRX05PVEZVTEwoMCksCiAJLm5ld21zZ19iaXQJPSBNQUlMQk9YX0lSUV9ORVdNU0coMSksCiB9OwpAQCAtMjI5LDE4ICsyNDMsMTggQEAKIH07CiBFWFBPUlRfU1lNQk9MKG1ib3hfZHNwX2luZm8pOwogCi0vKiBJVkEgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKSAvKiBJVkEgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2IG9tYXAyX21ib3hfaXZhX3ByaXYgPSB7CiAJLnR4X2ZpZm8gPSB7Ci0JCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFXzIsCi0JCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVNfMiwKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMiksCisJCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVMoMiksCiAJfSwKIAkucnhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMywKLQkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVNfMywKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMyksCisJCS5tc2dfc3RhdAk9IE1BSUxCT1hfTVNHU1RBVFVTKDMpLAogCX0sCi0JLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFXzMsCi0JLmlycXN0YXR1cwk9IE1BSUxCT1hfSVJRU1RBVFVTXzMsCisJLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFKDMpLAorCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVUygzKSwKIAkubm90ZnVsbF9iaXQJPSBNQUlMQk9YX0lSUV9OT1RGVUxMKDIpLAogCS5uZXdtc2dfYml0CT0gTUFJTEJPWF9JUlFfTkVXTVNHKDMpLAogfTsKQEAgLTI1MCwxNyArMjY0LDEyIEBACiAJLm9wcwk9ICZvbWFwMl9tYm94X29wcywKIAkucHJpdgk9ICZvbWFwMl9tYm94X2l2YV9wcml2LAogfTsKKyNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMl9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbnVtYmVyIG9mIHJlc291cmNlczogJWRcbiIsCi0JCQlwZGV2LT5udW1fcmVzb3VyY2VzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWludCByZXQ7CiAKIAkvKiBNQk9YIGJhc2UgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtMjY4LDQyICsyNzcsNjEgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBtZW0gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWJveF9iYXNlID0gcmVzLT5zdGFydDsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJaWYgKCFtYm94X2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOwogCi0JLyogRFNQIElSUSAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7Ci0JaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJLyogRFNQIG9yIElWQTIgSVJRICovCisJbWJveF9kc3BfaW5mby5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChtYm94X2RzcF9pbmZvLmlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBpcnEgcmVzb3VyY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZHNwOwogCX0KLQltYm94X2RzcF9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CiAKLQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJm1ib3hfZHNwX2luZm8pOworCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9kc3BfaW5mbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHNwOwogCi0JLyogSVZBIElSUSAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7Ci0JaWYgKHVubGlrZWx5KCFyZXMpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgaXJxIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkgLyogSVZBICovCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCS8qIElWQSBJUlEgKi8KKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAxKTsKKwkJaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGlycSByZXNvdXJjZVxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnJfaXZhMTsKKwkJfQorCQltYm94X2l2YV9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CisJCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9pdmFfaW5mbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9pdmExOwogCX0KLQltYm94X2l2YV9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CisjZW5kaWYKKwlyZXR1cm4gMDsKIAotCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmbWJveF9pdmFfaW5mbyk7Ci0KK2Vycl9pdmExOgorCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKK2Vycl9kc3A6CisJaW91bm1hcChtYm94X2Jhc2UpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAyX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKwlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9pdmFfaW5mbyk7CisjZW5kaWYKIAlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7CisJaW91bm1hcChtYm94X2Jhc2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMl9tYm94X2RyaXZlciA9IHsKIAkucHJvYmUgPSBvbWFwMl9tYm94X3Byb2JlLAotCS5yZW1vdmUgPSBvbWFwMl9tYm94X3JlbW92ZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aob21hcDJfbWJveF9yZW1vdmUpLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIm1haWxib3giLAorCQkubmFtZSA9ICJvbWFwMi1tYWlsYm94IiwKIAl9LAogfTsKIApAQCAtMzIwLDQgKzM0OCw3IEBACiBtb2R1bGVfaW5pdChvbWFwMl9tYm94X2luaXQpOwogbW9kdWxlX2V4aXQob21hcDJfbWJveF9leGl0KTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvbWFwIG1haWxib3g6IG9tYXAyLzMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZ1bmN0aW9ucyIpOworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPiwgUGF1bCBNdW5kdCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwMi1tYWlsYm94Iik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKaW5kZXggYTllNjMxZi4uYTVjMGYwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9tY2JzcC5oPgogCi1jb25zdCBjaGFyICpjbGtfbmFtZXNbXSA9IHsgIm1jYnNwX2ljayIsICJtY2JzcF9mY2siIH07Ci0KIHN0YXRpYyB2b2lkIG9tYXAyX21jYnNwMl9tdXhfc2V0dXAodm9pZCkKIHsKIAlvbWFwX2NmZ19yZWcoWTE1XzI0WFhfTUNCU1AyX0NMS1gpOwpAQCAtNTcsOCArNTUsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCkBAIC02Nyw4ICs2Myw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAyNDIwX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNDIwX21jYnNwX3BkYXRhKQpAQCAtODYsOCArODAsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCkBAIC05Niw4ICs4OCw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDNfQkFTRSwKQEAgLTEwNiw4ICs5Niw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDRfQkFTRSwKQEAgLTExNiw4ICsxMDQsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0MzBfTUNCU1A1X0JBU0UsCkBAIC0xMjYsOCArMTEyLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogfTsKICNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MzBfbWNic3BfcGRhdGEpCkBAIC0xNDUsOCArMTI5LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMl9CQVNFLApAQCAtMTU1LDggKzEzNyw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDNfQkFTRSwKQEAgLTE2NSw4ICsxNDUsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1A0X0JBU0UsCkBAIC0xNzUsOCArMTUzLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNV9CQVNFLApAQCAtMTg1LDggKzE2MSw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAzNHh4X21jYnNwX3BkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MmM3MDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYwotICoKLSAqIE1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KLSAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcmFtLmg+Ci0KLSNpbmNsdWRlICJwcm0uaCIKLQotI2luY2x1ZGUgIm1lbW9yeS5oIgotI2luY2x1ZGUgInNkcmMuaCIKLQotdm9pZCBfX2lvbWVtICpvbWFwMl9zZHJjX2Jhc2U7Ci12b2lkIF9faW9tZW0gKm9tYXAyX3Ntc19iYXNlOwotCi1zdGF0aWMgc3RydWN0IG1lbW9yeV90aW1pbmdzIG1lbV90aW1pbmdzOwotc3RhdGljIHUzMiBjdXJyX3BlcmZfbGV2ZWwgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQotdTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKQotewotCXJldHVybiBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsOwotfQotCi11MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpCi17Ci0JcmV0dXJuIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmw7Ci19Ci0KLXUzMiBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gbWVtX3RpbWluZ3MubV90eXBlOwotfQotCi0vKgotICogQ2hlY2sgdGhlIERMTCBsb2NrIHN0YXRlLCBhbmQgcmV0dXJuIHR1ZSBpZiBydW5uaW5nIGluIHVubG9jayBtb2RlLgotICogVGhpcyBpcyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHNoaWZ0ZWQgRExMIHZhbHVlIGluIHVubG9jayBtb2RlLgotICovCi11MzIgb21hcDJfZGxsX2ZvcmNlX25lZWRlZCh2b2lkKQotewotCS8qIGRsbGEgYW5kIGRsbGIgYXJlIGEgc2V0ICovCi0JdTMyIGRsbF9zdGF0ZSA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExBX0NUUkwpOwotCi0JaWYgKChkbGxfc3RhdGUgJiAoMSA8PCAyKSkgPT0gKDEgPDwgMikpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAnbGV2ZWwnIGlzIHRoZSB2YWx1ZSB0byBzdG9yZSB0byBDTV9DTEtTRUwyX1BMTC5DT1JFX0NMS19TUkMuCi0gKiBQcmFjdGljYWwgdmFsdWVzIGFyZSBDT1JFX0NMS19TUkNfRFBMTCAoZm9yIENPUkVfQ0xLID0gRFBMTF9DTEspIG9yCi0gKiBDT1JFX0NMS19TUkNfRFBMTF9YMiAoZm9yIENPUkVfQ0xLID0gKiBEUExMX0NMSyAqIDIpCi0gKi8KLXUzMiBvbWFwMl9yZXByb2dyYW1fc2RyYyh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKLXsKLQl1MzIgZGxsX2N0cmwsIG1fdHlwZTsKLQl1MzIgcHJldiA9IGN1cnJfcGVyZl9sZXZlbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKChjdXJyX3BlcmZfbGV2ZWwgPT0gbGV2ZWwpICYmICFmb3JjZSkKLQkJcmV0dXJuIHByZXY7Ci0KLQlpZiAobGV2ZWwgPT0gQ09SRV9DTEtfU1JDX0RQTEwpIHsKLQkJZGxsX2N0cmwgPSBvbWFwMl9tZW1vcnlfZ2V0X3Nsb3dfZGxsX2N0cmwoKTsKLQl9IGVsc2UgaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMX1gyKSB7Ci0JCWRsbF9jdHJsID0gb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHByZXY7Ci0JfQotCi0JbV90eXBlID0gb21hcDJfbWVtb3J5X2dldF90eXBlKCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZiwgT01BUDI0WFhfUFJDTV9WT0xUU0VUVVApOwotCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMobGV2ZWwsIGRsbF9jdHJsLCBtX3R5cGUpOwotCWN1cnJfcGVyZl9sZXZlbCA9IGxldmVsOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiBwcmV2OwotfQotCi0jaWYgIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCi12b2lkIG9tYXAyX3NyYW1fZGRyX2luaXQodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKLQkJCQl1MzIgYmFzZV9jcywgdTMyIGZvcmNlX3VubG9jaykKLXsKLX0KLXZvaWQgb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyh1MzIgcGVyZl9sZXZlbCwgdTMyIGRsbF92YWwsCi0JCQkJICAgICAgdTMyIG1lbV90eXBlKQotewotfQotI2VuZGlmCi0KLXZvaWQgb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKHUzMiBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKQotewotCXVuc2lnbmVkIGxvbmcgZGxsX2NudDsKLQl1MzIgZmFzdF9kbGwgPSAwOwotCi0JbWVtX3RpbWluZ3MubV90eXBlID0gISgoc2RyY19yZWFkX3JlZyhTRFJDX01SXzApICYgMHgzKSA9PSAweDEpOyAvKiBERFIgPSAxLCBTRFIgPSAwICovCi0KLQkvKiAyNDIyIGVzMi4wNSBhbmQgYmV5b25kIGhhcyBhIHNpbmdsZSBTSVAgRERSIGluc3RlYWQgb2YgMiBsaWtlIG90aGVycy4KLQkgKiBJbiB0aGUgY2FzZSBvZiAyNDIyLCBpdHMgb2sgdG8gdXNlIENTMSBpbnN0ZWFkIG9mIENTMC4KLQkgKi8KLQlpZiAoY3B1X2lzX29tYXAyNDIyKCkpCi0JCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAxOwotCWVsc2UKLQkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDA7Ci0KLQlpZiAobWVtX3RpbWluZ3MubV90eXBlICE9IE1fRERSKQotCQlyZXR1cm47Ci0KLQkvKiBXaXRoIEREUiB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbG93IGZyZXF1ZW5jeSBETEwgdmFsdWUgKi8KLQlpZiAoKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgKDEgPDwgMikpID09IE1fTE9DS19DVFJMKSkKLQkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX1VOTE9DSzsKLQllbHNlCi0JCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9MT0NLOwotCi0JaWYgKG1lbV90aW1pbmdzLmJhc2VfY3MgPT0gMCkgewotCQlmYXN0X2RsbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExBX0NUUkwpOwotCQlkbGxfY250ID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEFfU1RBVFVTKSAmIDB4ZmYwMDsKLQl9IGVsc2UgewotCQlmYXN0X2RsbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExCX0NUUkwpOwotCQlkbGxfY250ID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEJfU1RBVFVTKSAmIDB4ZmYwMDsKLQl9Ci0JaWYgKGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpIHsKLQkJZmFzdF9kbGwgJj0gfjB4ZmYwMDsKLQkJZmFzdF9kbGwgfD0gZGxsX2NudDsJCS8qIEN1cnJlbnQgbG9jayBtb2RlICovCi0JfQotCS8qIHNldCBmYXN0IHRpbWluZ3Mgd2l0aCBETEwgZmlsdGVyIGRpc2FibGVkICovCi0JbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCA9IChmYXN0X2RsbCB8ICgzIDw8IDgpKTsKLQotCS8qIE5vIGRpc3J1cHRpb25zLCBERFIgd2lsbCBiZSBvZmZsaW5lICYgQy1BQkkgbm90IGZvbGxvd2VkICovCi0Jb21hcDJfc3JhbV9kZHJfaW5pdCgmbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKLQkJCSAgICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAotCQkJICAgIG1lbV90aW1pbmdzLmJhc2VfY3MsCi0JCQkgICAgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7Ci0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCAmPSAweGZmMDA7CS8qIEtlZXAgbG9jayB2YWx1ZSAqLwotCi0JLyogVHVybiBzdGF0dXMgaW50byB1bmxvY2sgY3RybCAqLwotCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0KLQkJKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgMHhGKSB8ICgxIDw8IDIpKTsKLQotCS8qIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYW55dGhpbmcgYmVsb3cgMTMzTWh6ICsgZGlzYWJsZSBETEwgZmlsdGVyICovCi0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PSAoKDEgPDwgMSkgfCAoMyA8PCA4KSk7Ci19Ci0KLXZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShzdHJ1Y3Qgb21hcF9nbG9iYWxzICpvbWFwMl9nbG9iYWxzKQotewotCW9tYXAyX3NkcmNfYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnNkcmM7Ci0Jb21hcDJfc21zX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5zbXM7Ci19Ci0KLS8qIHR1cm4gb24gc21hcnQgaWRsZSBtb2RlcyBmb3IgU0RSQU0gc2NoZWR1bGVyIGFuZCBjb250cm9sbGVyICovCi12b2lkIF9faW5pdCBvbWFwMl9pbml0X21lbW9yeSh2b2lkKQotewotCXUzMiBsOwotCi0JaWYgKCFjcHVfaXNfb21hcDI0MjAoKSkKLQkJcmV0dXJuOwotCi0JbCA9IHNtc19yZWFkX3JlZyhTTVNfU1lTQ09ORklHKTsKLQlsICY9IH4oMHgzIDw8IDMpOwotCWwgfD0gKDB4MiA8PCAzKTsKLQlzbXNfd3JpdGVfcmVnKGwsIFNNU19TWVNDT05GSUcpOwotCi0JbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19TWVNDT05GSUcpOwotCWwgJj0gfigweDMgPDwgMyk7Ci0JbCB8PSAoMHgyIDw8IDMpOwotCXNkcmNfd3JpdGVfcmVnKGwsIFNEUkNfU1lTQ09ORklHKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjNkYjgwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaAotICoKLSAqIEludGVyZmFjZSBmb3IgbWVtb3J5IHRpbWluZyByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgT01BUDI0WFgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgotICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgotICogVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgQVJDSF9BUk1fTUFDSF9PTUFQMl9NRU1PUllfSAotI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX01FTU9SWV9ICi0KLS8qIE1lbW9yeSB0aW1pbmdzICovCi0jZGVmaW5lIE1fRERSCQkxCi0jZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCi0jZGVmaW5lIE1fVU5MT0NLCTAKLSNkZWZpbmUgTV9MT0NLCQkxCi0KLXN0cnVjdCBtZW1vcnlfdGltaW5ncyB7Ci0JdTMyIG1fdHlwZTsJCS8qIGRkciA9IDEsIHNkciA9IDAgKi8KLQl1MzIgZGxsX21vZGU7CQkvKiB1c2UgbG9jayBtb2RlID0gMSwgdW5sb2NrIG1vZGUgPSAwICovCi0JdTMyIHNsb3dfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIHNsb3cgc3BlZWQgKi8KLQl1MzIgZmFzdF9kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3IgZmFzdCBzcGVlZCAqLwotCXUzMiBiYXNlX2NzOwkJLyogYmFzZSBjaGlwIHNlbGVjdCB0byB1c2UgZm9yIGNhbGN1bGF0aW9ucyAqLwotfTsKLQotZXh0ZXJuIHZvaWQgb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKHUzMiBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKTsKLWV4dGVybiB1MzIgb21hcDJfbWVtb3J5X2dldF9zbG93X2RsbF9jdHJsKHZvaWQpOwotZXh0ZXJuIHUzMiBvbWFwMl9tZW1vcnlfZ2V0X2Zhc3RfZGxsX2N0cmwodm9pZCk7Ci1leHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfdHlwZSh2b2lkKTsKLXUzMiBvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKHZvaWQpOwotdTMyIG9tYXAyX3JlcHJvZ3JhbV9zZHJjKHUzMiBsZXZlbCwgdTMyIGZvcmNlKTsKLXZvaWQgX19pbml0IG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwotdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwppbmRleCA0MzdmNTIwLi5kYzQwYjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgpAQCAtNDQsNiArNDUsNyBAQAogI2RlZmluZSBWTU1DMl8zMTVWCQkweDBjCiAjZGVmaW5lIFZNTUMyXzMwMFYJCTB4MGIKICNkZWZpbmUgVk1NQzJfMjg1VgkJMHgwYQorI2RlZmluZSBWTU1DMl8yODBWCQkweDA5CiAjZGVmaW5lIFZNTUMyXzI2MFYJCTB4MDgKICNkZWZpbmUgVk1NQzJfMTg1VgkJMHgwNgogI2RlZmluZSBWTU1DMl9ERURJQ0FURUQJCTB4MkUKQEAgLTU5LDggKzYxLDggQEAKIAlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YQkqbW1jOwogCXU4CQl0d2xfdm1tY19kZXZfZ3JwOwogCXU4CQl0d2xfbW1jX2RlZGljYXRlZDsKLQljaGFyCQluYW1lW0hTTU1DX05BTUVfTEVOXTsKLX0gaHNtbWNbXSA9IHsKKwljaGFyCQluYW1lW0hTTU1DX05BTUVfTEVOICsgMV07Cit9IGhzbW1jW09NQVAzNFhYX05SX01NQ10gPSB7CiAJewogCQkudHdsX3ZtbWNfZGV2X2dycAkJPSBWTU1DMV9ERVZfR1JQLAogCQkudHdsX21tY19kZWRpY2F0ZWQJCT0gVk1NQzFfREVESUNBVEVELApAQCAtOTgsNiArMTAwLDE0IEBACiAJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uZ3Bpb193cCk7CiB9CiAKK3N0YXRpYyBpbnQgdHdsX21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKK30KKwogLyoKICAqIE1NQyBTbG90IEluaXRpYWxpemF0aW9uLgogICovCkBAIC0xNjYsNjYgKzE3Niw4NSBAQAogLyoKICAqIFNldHMgdGhlIE1NQyB2b2x0YWdlIGluIHR3bDQwMzAKICAqLworCisjZGVmaW5lIE1NQzFfT0NSCShNTUNfVkREXzE2NV8xOTUgXAorCQl8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfE1NQ19WRERfMzBfMzF8TU1DX1ZERF8zMV8zMikKKyNkZWZpbmUgTU1DMl9PQ1IJKE1NQ19WRERfMTY1XzE5NSBcCisJCXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8TU1DX1ZERF8yN18yOCBcCisJCXxNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8TU1DX1ZERF8zMF8zMXxNTUNfVkREXzMxXzMyKQorCiBzdGF0aWMgaW50IHR3bF9tbWNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqYywgaW50IHZkZCkKIHsKIAlpbnQgcmV0OwotCXU4IHZtbWMsIGRldl9ncnBfdmFsOworCXU4IHZtbWMgPSAwLCBkZXZfZ3JwX3ZhbDsKIAotCXN3aXRjaCAoMSA8PCB2ZGQpIHsKLQljYXNlIE1NQ19WRERfMzVfMzY6Ci0JY2FzZSBNTUNfVkREXzM0XzM1OgotCWNhc2UgTU1DX1ZERF8zM18zNDoKLQljYXNlIE1NQ19WRERfMzJfMzM6Ci0JY2FzZSBNTUNfVkREXzMxXzMyOgotCWNhc2UgTU1DX1ZERF8zMF8zMToKLQkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKLQkJCXZtbWMgPSBWTU1DMV8zMTVWOwotCQllbHNlCi0JCQl2bW1jID0gVk1NQzJfMzE1VjsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfVkREXzI5XzMwOgotCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQotCQkJdm1tYyA9IFZNTUMxXzMxNVY7Ci0JCWVsc2UKLQkJCXZtbWMgPSBWTU1DMl8zMDBWOwotCQlicmVhazsKLQljYXNlIE1NQ19WRERfMjdfMjg6Ci0JY2FzZSBNTUNfVkREXzI2XzI3OgotCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQotCQkJdm1tYyA9IFZNTUMxXzI4NVY7Ci0JCWVsc2UKLQkJCXZtbWMgPSBWTU1DMl8yODVWOwotCQlicmVhazsKLQljYXNlIE1NQ19WRERfMjVfMjY6Ci0JY2FzZSBNTUNfVkREXzI0XzI1OgotCWNhc2UgTU1DX1ZERF8yM18yNDoKLQljYXNlIE1NQ19WRERfMjJfMjM6Ci0JY2FzZSBNTUNfVkREXzIxXzIyOgotCWNhc2UgTU1DX1ZERF8yMF8yMToKLQkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKLQkJCXZtbWMgPSBWTU1DMV8yODVWOwotCQllbHNlCi0JCQl2bW1jID0gVk1NQzJfMjYwVjsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfVkREXzE2NV8xOTU6Ci0JCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApCisJaWYgKCF2ZGQpCisJCWdvdG8gZG9pdDsKKworCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApIHsKKwkJLyogVk1NQzE6ICBtYXggMjIwIG1BLiAgQW5kIGZvciA4LWJpdCBtb2RlLAorCQkgKiBWU0lNOiAgbWF4IDUwIG1BCisJCSAqLworCQlzd2l0Y2ggKDEgPDwgdmRkKSB7CisJCWNhc2UgTU1DX1ZERF8xNjVfMTk1OgogCQkJdm1tYyA9IFZNTUMxXzE4NVY7Ci0JCWVsc2UKKwkJCS8qIGFuZCBWU0lNXzE4MFYgKi8KKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjhfMjk6CisJCQl2bW1jID0gVk1NQzFfMjg1VjsKKwkJCS8qIGFuZCBWU0lNXzI4MFYgKi8KKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjlfMzA6CisJCWNhc2UgTU1DX1ZERF8zMF8zMToKKwkJCXZtbWMgPSBWTU1DMV8zMDBWOworCQkJLyogYW5kIFZTSU1fMzAwViAqLworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8zMV8zMjoKKwkJCXZtbWMgPSBWTU1DMV8zMTVWOworCQkJLyogZXJyb3IgaWYgVlNJTSBuZWVkZWQgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzJfREVWX0dSUCkgeworCQkvKiBWTU1DMjogIG1heCAxMDAgbUEgKi8KKwkJc3dpdGNoICgxIDw8IHZkZCkgeworCQljYXNlIE1NQ19WRERfMTY1XzE5NToKIAkJCXZtbWMgPSBWTU1DMl8xODVWOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl2bW1jID0gMDsKLQkJYnJlYWs7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI1XzI2OgorCQljYXNlIE1NQ19WRERfMjZfMjc6CisJCQl2bW1jID0gVk1NQzJfMjYwVjsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjdfMjg6CisJCQl2bW1jID0gVk1NQzJfMjgwVjsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjhfMjk6CisJCQl2bW1jID0gVk1NQzJfMjg1VjsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjlfMzA6CisJCWNhc2UgTU1DX1ZERF8zMF8zMToKKwkJCXZtbWMgPSBWTU1DMl8zMDBWOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8zMV8zMjoKKwkJCXZtbWMgPSBWTU1DMl8zMTVWOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICh2bW1jKQorZG9pdDoKKwlpZiAodmRkKQogCQlkZXZfZ3JwX3ZhbCA9IFZNTUNfREVWX0dSUF9QMTsJLyogUG93ZXIgdXAgKi8KIAllbHNlCiAJCWRldl9ncnBfdmFsID0gTERPX0NMUjsJCS8qIFBvd2VyIGRvd24gKi8KIAogCXJldCA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAogCQkJCQlkZXZfZ3JwX3ZhbCwgYy0+dHdsX3ZtbWNfZGV2X2dycCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0IHx8ICF2ZGQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKQEAgLTI0Miw2ICsyNzEsMTQgQEAKIAlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gJmhzbW1jWzBdOwogCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKKwkvKgorCSAqIEFzc3VtZSB3ZSBwb3dlciBib3RoIE9NQVAgVk1NQzEgKGZvciBDTUQsIENMSywgREFUMC4uMykgYW5kIHRoZQorCSAqIGNhcmQgdXNpbmcgdGhlIHNhbWUgVFdMIFZNTUMxIHN1cHBseSAoaHNtbWNbMF0pOyBPTUFQIGhhcyBib3RoCisJICogMS44ViBhbmQgMy4wViBtb2RlcywgY29udHJvbGxlZCBieSB0aGUgUEJJQVMgcmVnaXN0ZXIuCisJICoKKwkgKiBJbiA4LWJpdCBtb2RlcywgT01BUCBWTU1DMUEgKGZvciBEQVQ0Li43KSBuZWVkcyBhIHN1cHBseSwgd2hpY2gKKwkgKiBpcyBtb3N0IG5hdHVyYWxseSBUV0wgVlNJTTsgdGhvc2UgcGlucyBhbHNvIHVzZSBQQklBUy4KKwkgKi8KIAlpZiAocG93ZXJfb24pIHsKIAkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CiAJCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CkBAIC0yOTgsNiArMzM1LDEyIEBACiAJc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqYyA9ICZoc21tY1sxXTsKIAlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCisJLyoKKwkgKiBBc3N1bWUgVFdMIFZNTUMyIChoc21tY1sxXSkgaXMgdXNlZCBvbmx5IHRvIHBvd2VyIHRoZSBjYXJkIC4uLiBPTUFQCisJICogVkREUyBpcyB1c2VkIHRvIHBvd2VyIHRoZSBwaW5zLCBvcHRpb25hbGx5IHdpdGggYSB0cmFuc2NlaXZlciB0bworCSAqIHN1cHBvcnQgY2FyZHMgdXNpbmcgdm9sdGFnZXMgb3RoZXIgdGhhbiBWRERTICgxLjhWIG5vbWluYWwpLiAgV2hlbiBhCisJICogdHJhbnNjZWl2ZXIgaXMgdXNlZCwgREFUMy4uNyBhcmUgbXV4ZWQgYXMgdHJhbnNjZWl2ZXIgY29udHJvbCBwaW5zLgorCSAqLwogCWlmIChwb3dlcl9vbikgewogCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgewogCQkJdTMyIHJlZzsKQEAgLTMxNCw2ICszNTcsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHR3bF9tbWMzX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCisJCWludCB2ZGQpCit7CisJLyoKKwkgKiBBc3N1bWUgTU1DMyBoYXMgc2VsZi1wb3dlcmVkIGRldmljZSBjb25uZWN0ZWQsIGZvciBleGFtcGxlIG9uLWJvYXJkCisJICogY2hpcCB3aXRoIGV4dGVybmFsIHBvd2VyIHNvdXJjZS4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpoc21tY19kYXRhW09NQVAzNFhYX05SX01NQ10gX19pbml0ZGF0YTsKIAogdm9pZCBfX2luaXQgdHdsNDAzMF9tbWNfaW5pdChzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvICpjb250cm9sbGVycykKQEAgLTM0OSwxMyArNDAyLDEzIEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlzcHJpbnRmKHR3bC0+bmFtZSwgIm1tYyVpc2xvdCVpIiwgYy0+bW1jLCAxKTsKKwkJaWYgKGMtPm5hbWUpCisJCQlzdHJuY3B5KHR3bC0+bmFtZSwgYy0+bmFtZSwgSFNNTUNfTkFNRV9MRU4pOworCQllbHNlCisJCQlzbnByaW50Zih0d2wtPm5hbWUsIEFSUkFZX1NJWkUodHdsLT5uYW1lKSwKKwkJCQkibW1jJWlzbG90JWkiLCBjLT5tbWMsIDEpOwogCQltbWMtPnNsb3RzWzBdLm5hbWUgPSB0d2wtPm5hbWU7CiAJCW1tYy0+bnJfc2xvdHMgPSAxOwotCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gTU1DX1ZERF8xNjVfMTk1IHwKLQkJCQkJTU1DX1ZERF8yNl8yNyB8IE1NQ19WRERfMjdfMjggfAotCQkJCQlNTUNfVkREXzI5XzMwIHwKLQkJCQkJTU1DX1ZERF8zMF8zMSB8IE1NQ19WRERfMzFfMzI7CiAJCW1tYy0+c2xvdHNbMF0ud2lyZXMgPSBjLT53aXJlczsKIAkJbW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jayA9ICFjLT5leHRfY2xvY2s7CiAJCW1tYy0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOwpAQCAtMzY5LDcgKzQyMiwxMCBAQAogCiAJCQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOwogCQkJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPSBncGlvX3RvX2lycShjLT5ncGlvX2NkKTsKLQkJCW1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3QgPSB0d2xfbW1jX2NhcmRfZGV0ZWN0OworCQkJaWYgKGMtPmNvdmVyX29ubHkpCisJCQkJbW1jLT5zbG90c1swXS5nZXRfY292ZXJfc3RhdGUgPSB0d2xfbW1jX2dldF9jb3Zlcl9zdGF0ZTsKKwkJCWVsc2UKKwkJCQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0ID0gdHdsX21tY19jYXJkX2RldGVjdDsKIAkJfSBlbHNlCiAJCQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSAtRUlOVkFMOwogCkBAIC0zODUsMjQgKzQ0MSw0MyBAQAogCiAJCS8qIE5PVEU6ICB3ZSBhc3N1bWUgT01BUCdzIE1NQzEgYW5kIE1NQzIgdXNlCiAJCSAqIHRoZSBUV0w0MDMwJ3MgVk1NQzEgYW5kIFZNTUMyLCByZXNwZWN0aXZlbHk7Ci0JCSAqIGFuZCB0aGF0IE9NQVAncyBNTUMzIGlzbid0IHVzZWQuCisJCSAqIGFuZCB0aGF0IE1NQzMgZGV2aWNlIGhhcyBpdCdzIG93biBwb3dlciBzb3VyY2UuCiAJCSAqLwogCiAJCXN3aXRjaCAoYy0+bW1jKSB7CiAJCWNhc2UgMToKIAkJCW1tYy0+c2xvdHNbMF0uc2V0X3Bvd2VyID0gdHdsX21tYzFfc2V0X3Bvd2VyOworCQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IE1NQzFfT0NSOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKIAkJCW1tYy0+c2xvdHNbMF0uc2V0X3Bvd2VyID0gdHdsX21tYzJfc2V0X3Bvd2VyOworCQkJaWYgKGMtPnRyYW5zY2VpdmVyKQorCQkJCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUMyX09DUjsKKwkJCWVsc2UKKwkJCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gTU1DX1ZERF8xNjVfMTk1OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCW1tYy0+c2xvdHNbMF0uc2V0X3Bvd2VyID0gdHdsX21tYzNfc2V0X3Bvd2VyOworCQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IE1NQ19WRERfMTY1XzE5NTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJfZXJyKCJNTUMlZCBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQhXG4iLCBjLT5tbWMpOworCQkJa2ZyZWUobW1jKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWhzbW1jX2RhdGFbYy0+bW1jIC0gMV0gPSBtbWM7CiAJfQogCiAJb21hcDJfaW5pdF9tbWMoaHNtbWNfZGF0YSwgT01BUDM0WFhfTlJfTU1DKTsKKworCS8qIHBhc3MgdGhlIGRldmljZSBub2RlcyBiYWNrIHRvIGJvYXJkIHNldHVwIGNvZGUgKi8KKwlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKKwkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhzbW1jX2RhdGFbYy0+bW1jIC0gMV07CisKKwkJaWYgKCFjLT5tbWMgfHwgYy0+bW1jID4gbnJfaHNtbWMpCisJCQljb250aW51ZTsKKwkJYy0+ZGV2ID0gbW1jLT5kZXY7CisJfQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaAppbmRleCBlMWM4MDc2Li5lYTU5ZTg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCkBAIC05LDkgKzksMTMgQEAKIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gewogCXU4CW1tYzsJCS8qIGNvbnRyb2xsZXIgMS8yLzMgKi8KIAl1OAl3aXJlczsJCS8qIDEvNC84IHdpcmVzICovCisJYm9vbAl0cmFuc2NlaXZlcjsJLyogTU1DLTIgb3B0aW9uICovCisJYm9vbAlleHRfY2xvY2s7CS8qIHVzZSBleHRlcm5hbCBwaW4gZm9yIGlucHV0IGNsb2NrICovCisJYm9vbAljb3Zlcl9vbmx5OwkvKiBObyBjYXJkIGRldGVjdCAtIGp1c3QgY292ZXIgc3dpdGNoICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwotCWludAlleHRfY2xvY2s6MTsJLyogdXNlIGV4dGVybmFsIHBpbiBmb3IgaW5wdXQgY2xvY2sgKi8KKwljaGFyCSpuYW1lOwkJLyogb3IgTlVMTCBmb3IgZGVmYXVsdCAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsJLyogcmV0dXJuZWQ6IHBvaW50ZXIgdG8gbW1jIGFkYXB0ZXIgKi8KIH07CiAKICNpZglkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPUkUpICYmIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IGRhY2I0MWYuLjAyNmM0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtNDUzLDEwICs0NTMsMzcgQEAKIAogCiAvKiAzNFhYIEdQSU8gLSBiaWRpcmVjdGlvbmFsLCB1bmxlc3MgdGhlIG5hbWUgaGFzIGFuICJfT1VUIiBzdWZmaXguCisgKiAoQWx3YXlzIHNwZWNpZnkgUElOX0lOUFVULCBleGNlcHQgZm9yIG5hbWVzIHN1ZmZpeGVkIGJ5ICJfT1VUIi4pCiAgKiBObyBpbnRlcm5hbCBwdWxsdXAvcHVsbGRvd24gd2l0aG91dCAiX1VQIiBvciAiX0RPV04iIHN1ZmZpeC4KICAqLworTVVYX0NGR18zNFhYKCJBRjI2XzM0WFhfR1BJTzAiLCAweDFlMCwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJBRjIyXzM0WFhfR1BJTzkiLCAweGExOCwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQogTVVYX0NGR18zNFhYKCJBSDhfMzRYWF9HUElPMjkiLCAweDVmYSwKIAkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJVOF8zNFhYX0dQSU81NF9PVVQiLCAweDBiNCwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiVThfMzRYWF9HUElPNTRfRE9XTiIsIDB4MGI0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkw4XzM0WFhfR1BJTzYzIiwgMHgwY2UsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVCkKK01VWF9DRkdfMzRYWCgiRzI1XzM0WFhfR1BJTzg2X09VVCIsIDB4MGZjLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBRzRfMzRYWF9HUElPMTM0X09VVCIsIDB4MTYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBRTRfMzRYWF9HUElPMTM2X09VVCIsIDB4MTY0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBRjZfMzRYWF9HUElPMTQwX1VQIiwgMHgxNmMsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFFNl8zNFhYX0dQSU8xNDEiLCAweDE2ZSwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJBRjVfMzRYWF9HUElPMTQyIiwgMHgxNzAsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVCkKK01VWF9DRkdfMzRYWCgiQUU1XzM0WFhfR1BJTzE0MyIsIDB4MTcyLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkgxOV8zNFhYX0dQSU8xNjRfT1VUIiwgMHgxOWMsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkoyNV8zNFhYX0dQSU8xNzAiLCAweDFjNiwKIAkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwppbmRleCA1NTM2MWMxLi5lYThjZWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CiAKLWludCBfX2luaXQgb21hcDJfcG1faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcDJfcG1faW5pdCh2b2lkKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmgKaW5kZXggMWUxNTFmYS4uNjkxNDcwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oCkBAIC0xNzEsMTMgKzE3MSwxOSBAQAogCSZpdmEyX3B3cmRtLAogCSZtcHVfMzR4eF9wd3JkbSwKIAkmbmVvbl9wd3JkbSwKLQkmY29yZV8zNHh4X3B3cmRtLAorCSZjb3JlXzM0eHhfcHJlX2VzM18xX3B3cmRtLAorCSZjb3JlXzM0eHhfZXMzXzFfcHdyZG0sCiAJJmNhbV9wd3JkbSwKIAkmZHNzX3B3cmRtLAogCSZwZXJfcHdyZG0sCiAJJmVtdV9wd3JkbSwKIAkmc2d4X3B3cmRtLAogCSZ1c2Job3N0X3B3cmRtLAorCSZkcGxsMV9wd3JkbSwKKwkmZHBsbDJfcHdyZG0sCisJJmRwbGwzX3B3cmRtLAorCSZkcGxsNF9wd3JkbSwKKwkmZHBsbDVfcHdyZG0sCiAjZW5kaWYKIAogCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKaW5kZXggZjU3M2Y3MS4uNGRjZjk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKQEAgLTIwMCwxMCArMjAwLDEyIEBACiB9OwogCiAvKiBObyB3a2RlcHMgb3Igc2xlZXBkZXBzIGZvciAzNHh4IGNvcmUgYXBwYXJlbnRseSAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzM0eHhfcHdyZG0gPSB7CitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMzR4eF9wcmVfZXMzXzFfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAiY29yZV9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gQ09SRV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSB8CisJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzIgfAorCQkJCQkgICBDSElQX0lTX09NQVAzNDMwRVMzXzApLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKIAkuYmFua3MJCSAgPSAyLApAQCAtMjE3LDYgKzIxOSwyNSBAQAogCX0sCiB9OwogCisvKiBObyB3a2RlcHMgb3Igc2xlZXBkZXBzIGZvciAzNHh4IGNvcmUgYXBwYXJlbnRseSAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzM0eHhfZXMzXzFfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiY29yZV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gQ09SRV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTM18xKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX0NPUkVfU0hJRlQsCisJLmZsYWdzCQkgID0gUFdSRE1fSEFTX0hEV1JfU0FSLCAvKiBmb3IgVVNCVExMIG9ubHkgKi8KKwkuYmFua3MJCSAgPSAyLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTFSRVRTVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTJSRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTFPTlNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0yT05TVEFURSAqLworCX0sCit9OworCiAvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9EU1MgKi8KIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHNzX3B3cmRtID0gewogCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCkBAIC0yMzYsMTQgKzI1NywxOSBAQAogCX0sCiB9OwogCisvKgorICogQWx0aG91Z2ggdGhlIDM0WFggVFJNIFJldiBLIFRhYmxlIDQtMzcxIG5vdGVzIHRoYXQgcmV0ZW50aW9uIGlzIGEKKyAqIHBvc3NpYmxlIFNHWCBwb3dlcnN0YXRlLCB0aGUgU0dYIGRldmljZSBpdHNlbGYgZG9lcyBub3Qgc3VwcG9ydAorICogcmV0ZW50aW9uLgorICovCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHNneF9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJzZ3hfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1NHWF9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiAJLndrZGVwX3NyY3MJICA9IGdmeF9zZ3hfd2tkZXBzLAogCS5zbGVlcGRlcF9zcmNzCSAgPSBjYW1fZ2Z4X3NsZWVwZGVwcywKIAkvKiBYWFggVGhpcyBpcyBhY2N1cmF0ZSBmb3IgMzQzMCBTR1gsIGJ1dCB3aGF0IGFib3V0IEdGWD8gKi8KLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKQEAgLTMwNywxMSArMzMzLDEyIEBACiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHVzYmhvc3RfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAidXNiaG9zdF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiAJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKIAkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmZsYWdzCQkgID0gUFdSRE1fSEFTX0hEV1JfU0FSLCAvKiBmb3IgVVNCSE9TVCBjdHJsciBvbmx5ICovCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKIAkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLwpAQCAtMzIxLDYgKzM0OCwzNyBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGwxX3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsMV9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkcGxsMl9wd3JkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDJfcHdyZG0iLAorCS5wcmNtX29mZnMJPSBPTUFQMzQzMF9JVkEyX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGwzX3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsM19wd3JkbSIsCisJLnByY21fb2Zmcwk9IFBMTF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkcGxsNF9wd3JkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDRfcHdyZG0iLAorCS5wcmNtX29mZnMJPSBQTExfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDVfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGw1X3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gUExMX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCit9OworCisKICNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAppbmRleCA0YTMyODIyLi44MTJkNTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC0xMTMsMzMgKzExMyw1OCBAQAogI2RlZmluZSBPTUFQMjQzMF9FTl9VU0JIUwkJCQkoMSA8PCA2KQogCiAvKiBDTV9JRExFU1QxX0NPUkUsIFBNX1dLU1QxX0NPUkUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0MjBfU1RfTU1DCQkJCQkoMSA8PCAyNikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDIJCQkJKDEgPDwgMjIpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxCQkJCSgxIDw8IDIxKQotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTIJCQkJKDEgPDwgMTgpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMQkJCQkoMSA8PCAxNykKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTIJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDExCQkJCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMAkJCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOQkJCQkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOAkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNwkJCQkoMSA8PCA5KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ2CQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDUJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNAkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQzCQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDIJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDI0MjBfU1RfVkxZTlEJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0MjBfU1RfTU1DX1NISUZUCQkJCTI2CisjZGVmaW5lIE9NQVAyNDIwX1NUX01NQ19NQVNLCQkJCSgxIDw8IDI2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMl9TSElGVAkJCQkyMgorI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMl9NQVNLCQkJCSgxIDw8IDIyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMV9TSElGVAkJCQkyMQorI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMV9NQVNLCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTJfU0hJRlQJCQkxOAorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTJfTUFTSwkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNTUEkxX1NISUZUCQkJMTcKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNTUEkxX01BU0sJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEyX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEyX01BU0sJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDExX1NISUZUCQkJCTEzCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDExX01BU0sJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEwX1NISUZUCQkJCTEyCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEwX01BU0sJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDlfU0hJRlQJCQkJMTEKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOV9NQVNLCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ4X1NISUZUCQkJCTEwCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDhfTUFTSwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUN19TSElGVAkJCQk5CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDdfTUFTSwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ2X1NISUZUCQkJCTgKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNl9NQVNLCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDVfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ1X01BU0sJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNF9TSElGVAkJCQk2CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDRfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQzX1NISUZUCQkJCTUKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUM19NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDJfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQyX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0MjBfU1RfVkxZTlFfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMjQyMF9TVF9WTFlOUV9NQVNLCQkJCSgxIDw8IDMpCiAKIC8qIENNX0lETEVTVDJfQ09SRSwgUE1fV0tTVDJfQ09SRSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fSU5UQwkJCQkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDI0MzBfU1RfR1BJTzUJCQkJKDEgPDwgMTApCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01DU1BJMwkJCQkoMSA8PCA5KQotI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzIJCQkJKDEgPDwgOCkKLSNkZWZpbmUgT01BUDI0MzBfU1RfTU1DSFMxCQkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX1VTQkhTCQkJCSgxIDw8IDYpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQzCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1VTQgkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTURNX0lOVENfU0hJRlQJCQkxMQorI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fSU5UQ19NQVNLCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAyNDMwX1NUX0dQSU81X1NISUZUCQkJCTEwCisjZGVmaW5lIE9NQVAyNDMwX1NUX0dQSU81X01BU0sJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DU1BJM19TSElGVAkJCTkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTUNTUEkzX01BU0sJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTU1DSFMyX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzJfTUFTSwkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzFfU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMV9NQVNLCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAyNDMwX1NUX1VTQkhTX1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0MzBfU1RfVVNCSFNfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUM19TSElGVAkJCQkyCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQzX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfVVNCX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfVVNCX01BU0sJCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX1dLVVAsIENNX0lDTEtFTl9XS1VQLCBQTV9XS0VOX1dLVVAgc2hhcmVkIGJpdHMgKi8KICNkZWZpbmUgT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQJCQkJMgpAQCAtMTQ4LDExICsxNzMsMTMgQEAKICNkZWZpbmUgT01BUDI0WFhfRU5fR1BUMQkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS1NUX1dLVVAsIENNX0lETEVTVF9XS1VQIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQSU9TCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BJT1NfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BJT1NfTUFTSwkJCQkyCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDFfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMV9NQVNLCQkJCTAKIAogLyogQ01fSURMRVNUX01ETSBhbmQgUE1fV0tTVF9NRE0gc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0MzBfU1RfTURNCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fU0hJRlQJCQkJKDEgPDwgMCkKIAogCiAvKiAzNDMwIHJlZ2lzdGVyIGJpdHMgc2hhcmVkIGJldHdlZW4gQ00gJiBQUk0gcmVnaXN0ZXJzICovCkBAIC0yMDUsMjQgKzIzMiw0NiBAQAogI2RlZmluZSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVAkJCQk0CiAKIC8qIFBNX1dLU1QxX0NPUkUsIENNX0lETEVTVDFfQ09SRSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMyCQkJCSgxIDw8IDI1KQotI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMxCQkJCSgxIDw8IDI0KQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTQJCQkJKDEgPDwgMjEpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJMwkJCQkoMSA8PCAyMCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkyCQkJCSgxIDw8IDE5KQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTEJCQkJKDEgPDwgMTgpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzMJCQkJKDEgPDwgMTcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzIJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzEJCQkJKDEgPDwgMTUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQyCQkJCSgxIDw8IDE0KQotI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMQkJCQkoMSA8PCAxMykKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMTEJCQkJKDEgPDwgMTIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEwCQkJCSgxIDw8IDExKQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDUJCQkJKDEgPDwgMTApCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMQkJCQkoMSA8PCA5KQotI2RlZmluZSBPTUFQMzQzMF9TVF9GU0hPU1RVU0IJCQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfSFNPVEdVU0IJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfRDJECQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMyX1NISUZUCQkJCTI1CisjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzJfTUFTSwkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTU1DMV9TSElGVAkJCQkyNAorI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMxX01BU0sJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJNF9TSElGVAkJCTIxCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJNF9NQVNLCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTNfU0hJRlQJCQkyMAorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTNfTUFTSwkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkyX1NISUZUCQkJMTkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkyX01BU0sJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJMV9TSElGVAkJCTE4CisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJMV9NQVNLCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMzX1NISUZUCQkJCTE3CisjZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzNfTUFTSwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMl9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMyX01BU0sJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzFfU0hJRlQJCQkJMTUKKyNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMV9NQVNLCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMl9TSElGVAkJCQkxNAorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMl9NQVNLCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMV9TSElGVAkJCQkxMworI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMV9NQVNLCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMV9TSElGVAkJCQkxMgorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMV9NQVNLCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMF9TSElGVAkJCQkxMQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMF9NQVNLCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDVfU0hJRlQJCQkxMAorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDVfTUFTSwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AxX1NISUZUCQkJOQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDFfTUFTSwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9GU0hPU1RVU0JfU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0ZTSE9TVFVTQl9NQVNLCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfSFNPVEdVU0JfU0hJRlQJCQk0CisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0hTT1RHVVNCX01BU0sJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9IU09UR1VTQl9JRExFX1NISUZUCQk1CisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0hTT1RHVVNCX0lETEVfTUFTSwkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfSFNPVEdVU0JfU1REQllfU0hJRlQJCTQKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfSFNPVEdVU0JfU1REQllfTUFTSwkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfRDJEX1NISUZUCQkJCTMKKyNkZWZpbmUgT01BUDM0MzBfU1RfRDJEX01BU0sJCQkJKDEgPDwgMykKIAogLyogQ01fRkNMS0VOX1dLVVAsIENNX0lDTEtFTl9XS1VQLCBQTV9XS0VOX1dLVVAgc2hhcmVkIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzEJCQkJKDEgPDwgMykKQEAgLTI0MSwxMSArMjkwLDE2IEBACiAjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDEyX1NISUZUCQkJCTEKIAogLyogQ01fSURMRVNUX1dLVVAsIFBNX1dLU1RfV0tVUCBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMzQzMF9TVF9TUjIJCQkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NSMQkJCQkJKDEgPDwgNikKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzEJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMTIJCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9TUjJfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9TVF9TUjJfTUFTSwkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9TUjFfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMzQzMF9TVF9TUjFfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU8xX01BU0sJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMTJfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMl9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDFfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxX01BU0sJCQkJKDEgPDwgMCkKIAogLyoKICAqIENNX1NMRUVQREVQX0dGWCwgQ01fU0xFRVBERVBfRFNTLCBDTV9TTEVFUERFUF9DQU0sCkBAIC0yOTYsMjAgKzM1MCwzNCBAQAogI2RlZmluZSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQJCQkwCiAKIC8qIENNX0lETEVTVF9QRVIsIFBNX1dLU1RfUEVSIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU82CQkJCSgxIDw8IDE3KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNQkJCQkoMSA8PCAxNikKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzQJCQkJKDEgPDwgMTUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU8zCQkJCSgxIDw8IDE0KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMgkJCQkoMSA8PCAxMykKLSNkZWZpbmUgT01BUDM0MzBfU1RfVUFSVDMJCQkJKDEgPDwgMTEpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDkJCQkJKDEgPDwgMTApCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDgJCQkJKDEgPDwgOSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNwkJCQkoMSA8PCA4KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ2CQkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDUJCQkJKDEgPDwgNikKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNAkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQzCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDIJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzZfU0hJRlQJCQkJMTcKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzZfTUFTSwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzVfU0hJRlQJCQkJMTYKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzVfTUFTSwkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzRfU0hJRlQJCQkJMTUKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzRfTUFTSwkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzNfU0hJRlQJCQkJMTQKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzNfTUFTSwkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzJfU0hJRlQJCQkJMTMKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzJfTUFTSwkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDM0MzBfU1RfVUFSVDNfU0hJRlQJCQkJMTEKKyNkZWZpbmUgT01BUDM0MzBfU1RfVUFSVDNfTUFTSwkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOV9TSElGVAkJCQkxMAorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ5X01BU0sJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDhfU0hJRlQJCQkJOQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ4X01BU0sJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUN19TSElGVAkJCQk4CisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDdfTUFTSwkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ2X1NISUZUCQkJCTcKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNl9NQVNLCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDVfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ1X01BU0sJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNF9TSElGVAkJCQk1CisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDRfTUFTSwkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQzX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUM19NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDJfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQyX01BU0sJCQkJKDEgPDwgMykKIAogLyogQ01fU0xFRVBERVBfUEVSLCBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9NUFUsIFBNX1dLREVQX1BFUiBzaGFyZWQgYml0cyAqLwogI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX1NISUZUCQkJCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKaW5kZXggNWI1ZWNmZS4uYzZhNzk0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKQEAgLTM2Niw2ICszNjYsNyBAQAogCiAvKiBQTV9XS0VOX1dLVVAgc3BlY2lmaWMgYml0cyAqLwogI2RlZmluZSBPTUFQMzQzMF9FTl9JTwkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzEJCQkJKDEgPDwgMykKIAogLyogUE1fTVBVR1JQU0VMX1dLVVAgc3BlY2lmaWMgYml0cyAqLwogCkBAIC00NTIsNiArNDUzLDE0IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NNRFJBMF9NQVNLCQkJCSgweGZmIDw8IDApCiAKIC8qIFBSTV9WQ19DTURfVkFMXzAgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9WQ19DTURfT05fU0hJRlQJCQkyNAorI2RlZmluZSBPTUFQMzQzMF9WQ19DTURfT05fTUFTSwkJCQkoMHhGRiA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX09OTFBfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9WQ19DTURfT05MUF9NQVNLCQkJKDB4RkYgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9SRVRfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9SRVRfTUFTSwkJCSgweEZGIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PRkZfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PRkZfTUFTSwkJCSgweEZGIDw8IDApCiAKIC8qIFBSTV9WQ19DTURfVkFMXzEgc3BlY2lmaWMgYml0cyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAppbmRleCBlNGRjNGIxLi44MjZkMzI2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaApAQCAtMTQxLDYgKzE0MSwxOSBAQAogI2RlZmluZSBQTV9QV1NUQ1RSTAkJCQkJMHgwMGUwCiAjZGVmaW5lIFBNX1BXU1RTVAkJCQkJMHgwMGU0CiAKKy8qIE9tYXAyIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUFQMjRYWF9QTV9XS0VOMgkJCQkweDAwYTQKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tTVDIJCQkJMHgwMGI0CisKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfRFNQCQkJMHgwMGYwCS8qIElWQSBtb2QgKi8KKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFFTkFCTEVfRFNQCQkJMHgwMGY0CS8qIElWQSBtb2QgKi8KKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfSVZBCQkJMHgwMGY4CisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0lWQQkJCTB4MDBmYworCisvKiBPbWFwMyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfUE1fV0tFTjMJCQkJMHgwMGYwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BNX1dLU1QzCQkJCTB4MDBiOAorCiAjZGVmaW5lIE9NQVAzNDMwX1BNX01QVUdSUFNFTAkJCQkweDAwYTQKICNkZWZpbmUgT01BUDM0MzBfUE1fTVBVR1JQU0VMMQkJCQlPTUFQMzQzMF9QTV9NUFVHUlBTRUwKIApAQCAtMTUzLDE2ICsxNjYsNiBAQAogI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX0lWQTIJCQkweDAwZmMKIAogCi0vKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgT01BUDI0WFhfUE1fV0tFTjIJCQkJMHgwMGE0Ci0jZGVmaW5lIE9NQVAyNFhYX1BNX1dLU1QyCQkJCTB4MDBiNAotCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVTX0RTUAkJCTB4MDBmMAkvKiBJVkEgbW9kICovCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0RTUAkJCTB4MDBmNAkvKiBJVkEgbW9kICovCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVTX0lWQQkJCTB4MDBmOAotI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUUVOQUJMRV9JVkEJCQkweDAwZmMKLQogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKIC8qIFBvd2VyL3Jlc2V0IG1hbmFnZW1lbnQgZG9tYWluIHJlZ2lzdGVyIGdldC9zZXQgKi8KQEAgLTIyOCw3ICsyMzEsNiBAQAogI2RlZmluZSBPTUFQX1JTVFRJTUUxX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUF9SU1RUSU1FMV9NQVNLCQkJCSgweGZmIDw8IDApCiAKLQogLyogUFJNX1JTVENUUkwgKi8KIC8qIE5hbWVkIFJNX1JTVENUUkxfV0tVUCBvbiB0aGUgMjR4eCAqLwogLyogMjQyMCBjYWxscyBSU1RfRFBMTDMgJ1JTVF9EUExMJyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMwMDYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIFNNUy9TRFJDIChTRFJBTSBjb250cm9sbGVyKSBjb21tb24gY29kZSBmb3IgT01BUDIvMworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICogUGF1bCBXYWxtc2xleQorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CisKKyNpbmNsdWRlICJwcm0uaCIKKworI2luY2x1ZGUgPG1hY2gvc2RyYy5oPgorI2luY2x1ZGUgInNkcmMuaCIKKworc3RhdGljIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2luaXRfcGFyYW1zOworCit2b2lkIF9faW9tZW0gKm9tYXAyX3NkcmNfYmFzZTsKK3ZvaWQgX19pb21lbSAqb21hcDJfc21zX2Jhc2U7CisKKworLyoqCisgKiBvbWFwMl9zZHJjX2dldF9wYXJhbXMgLSByZXR1cm4gU0RSQyByZWdpc3RlciB2YWx1ZXMgZm9yIGEgZ2l2ZW4gY2xvY2sgcmF0ZQorICogQHI6IFNEUkMgY2xvY2sgcmF0ZSAoaW4gSHopCisgKgorICogUmV0dXJuIHByZS1jYWxjdWxhdGVkIHZhbHVlcyBmb3IgdGhlIFNEUkNfQUNUSU1fQ1RSTEEsCisgKiBTRFJDX0FDVElNX0NUUkxCLCBTRFJDX1JGUl9DVFJMLCBhbmQgU0RSQ19NUiByZWdpc3RlcnMsIGZvciBhIGdpdmVuCisgKiBTRFJDIGNsb2NrIHJhdGUgJ3InLiAgVGhlc2UgcGFyYW1ldGVycyBjb250cm9sIHZhcmlvdXMgdGltaW5nCisgKiBkZWxheXMgaW4gdGhlIFNEUkFNIGNvbnRyb2xsZXIgdGhhdCBhcmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZQorICogbnVtYmVyIG9mIFNEUkMgY2xvY2sgY3ljbGVzIHRvIHdhaXQ7IGhlbmNlIHRoZSBjbG9jayByYXRlCisgKiBkZXBlbmRlbmN5LiBOb3RlIHRoYXQgc2RyY19pbml0X3BhcmFtcyBtdXN0IGJlIHNvcnRlZCByYXRlCisgKiBkZXNjZW5kaW5nLiAgQWxzbyBhc3N1bWVzIHRoYXQgYm90aCBjaGlwLXNlbGVjdHMgdXNlIHRoZSBzYW1lCisgKiB0aW1pbmcgcGFyYW1ldGVycy4gIFJldHVybnMgYSBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqIHVwb24KKyAqIHN1Y2Nlc3MsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqb21hcDJfc2RyY19nZXRfcGFyYW1zKHVuc2lnbmVkIGxvbmcgcikKK3sKKwlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc3A7CisKKwlzcCA9IHNkcmNfaW5pdF9wYXJhbXM7CisKKwl3aGlsZSAoc3AtPnJhdGUgIT0gcikKKwkJc3ArKzsKKworCWlmICghc3AtPnJhdGUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHNwOworfQorCisKK3ZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3NkcmMoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKK3sKKwlvbWFwMl9zZHJjX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5zZHJjOworCW9tYXAyX3Ntc19iYXNlID0gb21hcDJfZ2xvYmFscy0+c21zOworfQorCisvKiB0dXJuIG9uIHNtYXJ0IGlkbGUgbW9kZXMgZm9yIFNEUkFNIHNjaGVkdWxlciBhbmQgY29udHJvbGxlciAqLwordm9pZCBfX2luaXQgb21hcDJfc2RyY19pbml0KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCkKK3sKKwl1MzIgbDsKKworCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7CisJbCAmPSB+KDB4MyA8PCAzKTsKKwlsIHw9ICgweDIgPDwgMyk7CisJc21zX3dyaXRlX3JlZyhsLCBTTVNfU1lTQ09ORklHKTsKKworCWwgPSBzZHJjX3JlYWRfcmVnKFNEUkNfU1lTQ09ORklHKTsKKwlsICY9IH4oMHgzIDw8IDMpOworCWwgfD0gKDB4MiA8PCAzKTsKKwlzZHJjX3dyaXRlX3JlZyhsLCBTRFJDX1NZU0NPTkZJRyk7CisKKwlzZHJjX2luaXRfcGFyYW1zID0gc3A7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMyeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMyeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmZGFkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYworICoKKyAqIFNEUkFNIHRpbWluZyByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgT01BUDJ4eHgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KKworI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CisjaW5jbHVkZSAic2RyYy5oIgorCisvKiBNZW1vcnkgdGltaW5nLCBETEwgbW9kZSBmbGFncyAqLworI2RlZmluZSBNX0REUgkJMQorI2RlZmluZSBNX0xPQ0tfQ1RSTAkoMSA8PCAyKQorI2RlZmluZSBNX1VOTE9DSwkwCisjZGVmaW5lIE1fTE9DSwkJMQorCisKK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgbWVtX3RpbWluZ3M7CitzdGF0aWMgdTMyIGN1cnJfcGVyZl9sZXZlbCA9IENPUkVfQ0xLX1NSQ19EUExMX1gyOworCitzdGF0aWMgdTMyIG9tYXAyeHh4X3NkcmNfZ2V0X3Nsb3dfZGxsX2N0cmwodm9pZCkKK3sKKwlyZXR1cm4gbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybDsKK30KKworc3RhdGljIHUzMiBvbWFwMnh4eF9zZHJjX2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpCit7CisJcmV0dXJuIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmw7Cit9CisKK3N0YXRpYyB1MzIgb21hcDJ4eHhfc2RyY19nZXRfdHlwZSh2b2lkKQoreworCXJldHVybiBtZW1fdGltaW5ncy5tX3R5cGU7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgRExMIGxvY2sgc3RhdGUsIGFuZCByZXR1cm4gdHVlIGlmIHJ1bm5pbmcgaW4gdW5sb2NrIG1vZGUuCisgKiBUaGlzIGlzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciB0aGUgc2hpZnRlZCBETEwgdmFsdWUgaW4gdW5sb2NrIG1vZGUuCisgKi8KK3UzMiBvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCh2b2lkKQoreworCS8qIGRsbGEgYW5kIGRsbGIgYXJlIGEgc2V0ICovCisJdTMyIGRsbF9zdGF0ZSA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExBX0NUUkwpOworCisJaWYgKChkbGxfc3RhdGUgJiAoMSA8PCAyKSkgPT0gKDEgPDwgMikpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnbGV2ZWwnIGlzIHRoZSB2YWx1ZSB0byBzdG9yZSB0byBDTV9DTEtTRUwyX1BMTC5DT1JFX0NMS19TUkMuCisgKiBQcmFjdGljYWwgdmFsdWVzIGFyZSBDT1JFX0NMS19TUkNfRFBMTCAoZm9yIENPUkVfQ0xLID0gRFBMTF9DTEspIG9yCisgKiBDT1JFX0NMS19TUkNfRFBMTF9YMiAoZm9yIENPUkVfQ0xLID0gKiBEUExMX0NMSyAqIDIpCisgKgorICogVXNlZCBieSB0aGUgY2xvY2sgZnJhbWV3b3JrIGR1cmluZyBDT1JFIERQTEwgY2hhbmdlcworICovCit1MzIgb21hcDJ4eHhfc2RyY19yZXByb2dyYW0odTMyIGxldmVsLCB1MzIgZm9yY2UpCit7CisJdTMyIGRsbF9jdHJsLCBtX3R5cGU7CisJdTMyIHByZXYgPSBjdXJyX3BlcmZfbGV2ZWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCisJCXJldHVybiBwcmV2OworCisJaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMKQorCQlkbGxfY3RybCA9IG9tYXAyeHh4X3NkcmNfZ2V0X3Nsb3dfZGxsX2N0cmwoKTsKKwllbHNlIGlmIChsZXZlbCA9PSBDT1JFX0NMS19TUkNfRFBMTF9YMikKKwkJZGxsX2N0cmwgPSBvbWFwMnh4eF9zZHJjX2dldF9mYXN0X2RsbF9jdHJsKCk7CisJZWxzZQorCQlyZXR1cm4gcHJldjsKKworCW1fdHlwZSA9IG9tYXAyeHh4X3NkcmNfZ2V0X3R5cGUoKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZmLCBPTUFQMjRYWF9QUkNNX1ZPTFRTRVRVUCk7CisJb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyhsZXZlbCwgZGxsX2N0cmwsIG1fdHlwZSk7CisJY3Vycl9wZXJmX2xldmVsID0gbGV2ZWw7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHByZXY7Cit9CisKKy8qIFVzZWQgYnkgdGhlIGNsb2NrIGZyYW1ld29yayBkdXJpbmcgQ09SRSBEUExMIGNoYW5nZXMgKi8KK3ZvaWQgb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CisJdTMyIGZhc3RfZGxsID0gMDsKKworCS8qIEREUiA9IDEsIFNEUiA9IDAgKi8KKwltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChzZHJjX3JlYWRfcmVnKFNEUkNfTVJfMCkgJiAweDMpID09IDB4MSk7CisKKwkvKiAyNDIyIGVzMi4wNSBhbmQgYmV5b25kIGhhcyBhIHNpbmdsZSBTSVAgRERSIGluc3RlYWQgb2YgMiBsaWtlIG90aGVycy4KKwkgKiBJbiB0aGUgY2FzZSBvZiAyNDIyLCBpdHMgb2sgdG8gdXNlIENTMSBpbnN0ZWFkIG9mIENTMC4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNDIyKCkpCisJCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAxOworCWVsc2UKKwkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDA7CisKKwlpZiAobWVtX3RpbWluZ3MubV90eXBlICE9IE1fRERSKQorCQlyZXR1cm47CisKKwkvKiBXaXRoIEREUiB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbG93IGZyZXF1ZW5jeSBETEwgdmFsdWUgKi8KKwlpZiAoKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgKDEgPDwgMikpID09IE1fTE9DS19DVFJMKSkKKwkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX1VOTE9DSzsKKwllbHNlCisJCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9MT0NLOworCisJaWYgKG1lbV90aW1pbmdzLmJhc2VfY3MgPT0gMCkgeworCQlmYXN0X2RsbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExBX0NUUkwpOworCQlkbGxfY250ID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEFfU1RBVFVTKSAmIDB4ZmYwMDsKKwl9IGVsc2UgeworCQlmYXN0X2RsbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExCX0NUUkwpOworCQlkbGxfY250ID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEJfU1RBVFVTKSAmIDB4ZmYwMDsKKwl9CisJaWYgKGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpIHsKKwkJZmFzdF9kbGwgJj0gfjB4ZmYwMDsKKwkJZmFzdF9kbGwgfD0gZGxsX2NudDsJCS8qIEN1cnJlbnQgbG9jayBtb2RlICovCisJfQorCS8qIHNldCBmYXN0IHRpbWluZ3Mgd2l0aCBETEwgZmlsdGVyIGRpc2FibGVkICovCisJbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCA9IChmYXN0X2RsbCB8ICgzIDw8IDgpKTsKKworCS8qIE5vIGRpc3J1cHRpb25zLCBERFIgd2lsbCBiZSBvZmZsaW5lICYgQy1BQkkgbm90IGZvbGxvd2VkICovCisJb21hcDJfc3JhbV9kZHJfaW5pdCgmbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKKwkJCSAgICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAorCQkJICAgIG1lbV90aW1pbmdzLmJhc2VfY3MsCisJCQkgICAgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7CisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCAmPSAweGZmMDA7CS8qIEtlZXAgbG9jayB2YWx1ZSAqLworCisJLyogVHVybiBzdGF0dXMgaW50byB1bmxvY2sgY3RybCAqLworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0KKwkJKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgMHhGKSB8ICgxIDw8IDIpKTsKKworCS8qIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYW55dGhpbmcgYmVsb3cgMTMzTWh6ICsgZGlzYWJsZSBETEwgZmlsdGVyICovCisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PSAoKDEgPDwgMSkgfCAoMyA8PCA4KSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3NGU5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYworICoKKyAqIFRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGJvYXJkIHNwZWNpZmljIGRldGFpbHMgZm9yIHRoZQorICogTUVOVE9SIFVTQiBPVEcgY29udHJvbGxlciBvbiBPTUFQMzQzMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogVmlrcmFtIFBhbmRpdGEKKyAqCisgKiBHZW5lcmFsaXphdGlvbiBieToKKyAqIEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvcG0uaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXVzYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7IC8qIHN0YXJ0IGFuZCBlbmQgc2V0IGR5bmFtaWNhbGx5ICovCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0gewkvKiBnZW5lcmFsIElSUSAqLworCQkuc3RhcnQJPSBJTlRfMjQzWF9IU19VU0JfTUMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0gewkvKiBETUEgSVJRICovCisJCS5zdGFydAk9IElOVF8yNDNYX0hTX1VTQl9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgaW50IGNsa19vbjsKKworc3RhdGljIGludCBtdXNiX3NldF9jbG9jayhzdHJ1Y3QgY2xrICpjbGssIGludCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUpIHsKKwkJaWYgKGNsa19vbiA+IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQljbGtfZW5hYmxlKGNsayk7CisJCWNsa19vbiA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGNsa19vbiA9PSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJY2xrX2Rpc2FibGUoY2xrKTsKKwkJY2xrX29uID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfZXBzX2JpdHMgbXVzYl9lcHNbXSA9IHsKKwl7CSJlcDFfdHgiLCAxMCwJfSwKKwl7CSJlcDFfcngiLCAxMCwJfSwKKwl7CSJlcDJfdHgiLCA5LAl9LAorCXsJImVwMl9yeCIsIDksCX0sCisJewkiZXAzX3R4IiwgMywJfSwKKwl7CSJlcDNfcngiLCAzLAl9LAorCXsJImVwNF90eCIsIDMsCX0sCisJewkiZXA0X3J4IiwgMywJfSwKKwl7CSJlcDVfdHgiLCAzLAl9LAorCXsJImVwNV9yeCIsIDMsCX0sCisJewkiZXA2X3R4IiwgMywJfSwKKwl7CSJlcDZfcngiLCAzLAl9LAorCXsJImVwN190eCIsIDMsCX0sCisJewkiZXA3X3J4IiwgMywJfSwKKwl7CSJlcDhfdHgiLCAyLAl9LAorCXsJImVwOF9yeCIsIDIsCX0sCisJewkiZXA5X3R4IiwgMiwJfSwKKwl7CSJlcDlfcngiLCAyLAl9LAorCXsJImVwMTBfdHgiLCAyLAl9LAorCXsJImVwMTBfcngiLCAyLAl9LAorCXsJImVwMTFfdHgiLCAyLAl9LAorCXsJImVwMTFfcngiLCAyLAl9LAorCXsJImVwMTJfdHgiLCAyLAl9LAorCXsJImVwMTJfcngiLCAyLAl9LAorCXsJImVwMTNfdHgiLCAyLAl9LAorCXsJImVwMTNfcngiLCAyLAl9LAorCXsJImVwMTRfdHgiLCAyLAl9LAorCXsJImVwMTRfcngiLCAyLAl9LAorCXsJImVwMTVfdHgiLCAyLAl9LAorCXsJImVwMTVfcngiLCAyLAl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIG11c2JfY29uZmlnID0geworCS5tdWx0aXBvaW50CT0gMSwKKwkuZHluX2ZpZm8JPSAxLAorCS5zb2Z0X2Nvbgk9IDEsCisJLmRtYQkJPSAxLAorCS5udW1fZXBzCT0gMTYsCisJLmRtYV9jaGFubmVscwk9IDcsCisJLmRtYV9yZXFfY2hhbgk9ICgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDMpLAorCS5yYW1fYml0cwk9IDEyLAorCS5lcHNfYml0cwk9IG11c2JfZXBzLAorfTsKKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworCS5tb2RlCQk9IE1VU0JfT1RHLAorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QpCisJLm1vZGUJCT0gTVVTQl9IT1NULAorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMpCisJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAorI2VuZGlmCisJLyogLmNsb2NrIGlzIHNldCBkeW5hbWljYWxseSAqLworCS5zZXRfY2xvY2sJPSBtdXNiX3NldF9jbG9jaywKKwkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKKworCS8qIFJFVklTSVQgY2hhcmdlIHB1bXAgb24gVFdMNDAzMCBjYW4gc3VwcGx5IHVwIHRvCisJICogMTAwIG1BIC4uLiBidXQgdGhpcyB2YWx1ZSBpcyBib2FyZC1zcGVjaWZpYywgbGlrZQorCSAqICJtb2RlIiwgYW5kIHNob3VsZCBiZSBwYXNzZWQgdG8gdXNiX211c2JfaW5pdCgpLgorCSAqLworCS5wb3dlcgkJPSA1MCwJCQkvKiB1cCB0byAxMDAgbUEgKi8KK307CisKK3N0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJm11c2JfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BXzMyQklUX01BU0ssCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtdXNiX3BsYXQsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG11c2JfcmVzb3VyY2VzLAorfTsKKworI2lmZGVmIENPTkZJR19OT1BfVVNCX1hDRUlWCitzdGF0aWMgdTY0IG5vcF94Y2Vpdl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcF94Y2Vpdl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm5vcF91c2JfeGNlaXYiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJm5vcF94Y2Vpdl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gTlVMTCwKKwl9LAorfTsKKyNlbmRpZgorCit2b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHZvaWQpCit7CisJaWYgKGNwdV9pc19vbWFwMjQzeCgpKQorCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAyNDNYX0hTX0JBU0U7CisJZWxzZQorCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAzNFhYX0hTVVNCX09UR19CQVNFOworCW11c2JfcmVzb3VyY2VzWzBdLmVuZCA9IG11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgU1pfOEsgLSAxOworCisJLyoKKwkgKiBSRVZJU0lUOiBUaGlzIGxpbmUgY2FuIGJlIHJlbW92ZWQgb25jZSBhbGwgdGhlIHBsYXRmb3JtcyB1c2luZworCSAqIG11c2JfY29yZS5jIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlIHVzZSBjbGtkZXYuCisJICovCisJbXVzYl9wbGF0LmNsb2NrID0gImljayI7CisKKyNpZmRlZiBDT05GSUdfTk9QX1VTQl9YQ0VJVgorCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5vcF94Y2Vpdl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOT1AtWENFSVYgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXVzYl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBIUy1VU0IgKE1VU0IpIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCmluZGV4IGY1OWE4ZDAuLjJjNzAzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCkBAIC03MSw2ICs3MSw3IEBACiAKIGNvbmZpZyBNQUNIX1RTNzhYWAogCWJvb2wgIlRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzh4eCIKKwlzZWxlY3QgUE0KIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzh4eCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYwppbmRleCA4YTBlNDlkLi42OGNjM2VmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8cGxhdC9laGNpLW9yaW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9tdl94b3IuaD4KICNpbmNsdWRlIDxwbGF0L29yaW9uX25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L29yaW9uNXhfd2R0Lmg+CiAjaW5jbHVkZSA8cGxhdC90aW1lLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKQEAgLTIxOSwxNCArMjIwLDE3IEBACiAKIHZvaWQgX19pbml0IG9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSkKIHsKKwlpbnQgaTsKKwogCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCW9yaW9uNXhfc3dpdGNoX3Jlc291cmNlc1swXS5zdGFydCA9IGlycTsKIAkJb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzWzBdLmVuZCA9IGlycTsKIAkJb3Jpb241eF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwogCX0KIAotCWQtPm1paV9idXMgPSAmb3Jpb241eF9ldGhfc2hhcmVkLmRldjsKIAlkLT5uZXRkZXYgPSAmb3Jpb241eF9ldGguZGV2OworCWZvciAoaSA9IDA7IGkgPCBkLT5ucl9jaGlwczsgaSsrKQorCQlkLT5jaGlwW2ldLm1paV9idXMgPSAmb3Jpb241eF9ldGhfc2hhcmVkLmRldjsKIAlvcmlvbjV4X3N3aXRjaF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBkOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbjV4X3N3aXRjaF9kZXZpY2UpOwpAQCAtNTMzLDYgKzUzNywyOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV2F0Y2hkb2cKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhIG9yaW9uNXhfd2R0X2RhdGEgPSB7CisJLnRjbGsJCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbjV4X3dkdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9yaW9uNXhfd2R0IiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm9yaW9uNXhfd2R0X2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCit2b2lkIF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCit7CisJb3Jpb241eF93ZHRfZGF0YS50Y2xrID0gb3Jpb241eF90Y2xrOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF93ZHRfZGV2aWNlKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRpbWUgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IG9yaW9uNXhfdGNsazsKQEAgLTYzMSw2ICs2NTgsMTEgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT3Jpb246IEFwcGx5aW5nIDUyODEgRDAgV0ZJIHdvcmthcm91bmQuXG4iKTsKIAkJZGlzYWJsZV9obHQoKTsKIAl9CisKKwkvKgorCSAqIFJlZ2lzdGVyIHdhdGNoZG9nIGRyaXZlcgorCSAqLworCW9yaW9uNXhfd2R0X2luaXQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwppbmRleCAwNzIyZDY1Li5iMzFjYTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCkBAIC03Niw3ICs3Niw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRuczMyM19wY2lfaW5pdCh2b2lkKQogewotCS8qIFRoZSA1MTgyIGRvZXNuJ3QgcmVhbGx5IHVzZSBpdCdzIFBDSSBidXMsIGFuZCBpbml0aWFsaXNpbmcgUENJCisJLyogVGhlIDUxODIgZG9lc24ndCByZWFsbHkgdXNlIGl0cyBQQ0kgYnVzLCBhbmQgaW5pdGlhbGlzaW5nIFBDSQogCSAqIGdldHMgaW4gdGhlIHdheSBvZiBpbml0aWFsaXNpbmcgdGhlIFNBVEEgY29udHJvbGxlci4KIAkgKi8KIAlpZiAobWFjaGluZV9pc19kbnMzMjMoKSAmJiBkbnMzMjNfZGV2X2lkKCkgIT0gTVY4OEY1MTgyX0RFVl9JRCkKQEAgLTQxOCw3ICs0MTgsNyBAQAogCW9yaW9uNXhfaTJjX2luaXQoKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAotCS8qIFRoZSA1MTgyIGhhcyBpdCdzIFNBVEEgY29udHJvbGxlciBvbi1jaGlwLCBhbmQgbmVlZHMgaXQncyBvd24gbGl0dGxlCisJLyogVGhlIDUxODIgaGFzIGl0cyBTQVRBIGNvbnRyb2xsZXIgb24tY2hpcCwgYW5kIG5lZWRzIGl0cyBvd24gbGl0dGxlCiAJICogaW5pdCByb3V0aW5lLgogCSAqLwogCWlmIChkbnMzMjNfZGV2X2lkKCkgPT0gTVY4OEY1MTgyX0RFVl9JRCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDA4ZTQzMDcuLjliOGRiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTksNyArMTksNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogRW5hYmxlIGFuZCBpc3N1ZSBzb2Z0IHJlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMKaW5kZXggZTBjNDNiOC4uYzliZjZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzbWluaS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAKIHN0YXRpYyB2b2lkIGxzbWluaV9wb3dlcl9vZmYodm9pZCkKIHsKLQlhcmNoX3Jlc2V0KDApOworCWFyY2hfcmVzZXQoMCwgTlVMTCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwppbmRleCAxNWY1MzIzLi45YzFjYTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwpAQCAtOTQsNyArOTQsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTEwMyw2ICsxMDMsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW4zIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4MWxfZnhvX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTE3LDcgKzEyMiw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9meG9fZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFJEODhGNTE4MUxfRlhPX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCA4YWQzOTM0Li5lZTEzOTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTA0LDYgKzEwNCwxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHJkODhmNTE4MWxfZ2VfaTJjX3J0YyA9IHsKIAlJMkNfQk9BUkRfSU5GTygiZHMxMzM4IiwgMHg2OCksCiB9OwpAQCAtMTIyLDcgKzEyNyw4IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDgpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfcGxhdF9kYXRhLAorCQkJCWdwaW9fdG9faXJxKDgpKTsKIAlvcmlvbjV4X2kyY19pbml0KCk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjYxODNhcC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKaW5kZXggMjYyZTI1ZS4uNzczN2NmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzJdCT0gImxhbjMiLApAQCAtNDQsNiArNDQsMTEgQEAKIAkucG9ydF9uYW1lc1s1XQk9ICJjcHUiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcmQ4OGY2MTgzYXBfZ2VfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJPSAia2VybmVsIiwKQEAgLTg5LDcgKzk0LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjYxODNhcF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhLCBncGlvX3RvX2lycSgzKSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoMykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJkODhmNjE4M2FwX2dlX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8pKTsKIAlvcmlvbjV4X3NwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LWZwZ2EuaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWNkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LWZwZ2EuaApAQCAtMCwwICsxLDM1IEBACisjZGVmaW5lIEZQR0FJRChfbWFnaWMsIF9yZXYpICgoX21hZ2ljIDw8IDgpICsgX3JldikKKworLyoKKyAqIGdldCB5ZXIgaWQncyBmcm9tIGh0dHA6Ly90czc4eHguZGlncml6Lm9yZy51ay8KKyAqIGRvICpub3QqIG1ha2UgdXAgeW91ciBvd24gb3IgJ2JvcnJvdycgYW55IQorICovCitlbnVtIGZwZ2FfaWRzIHsKKwkvKiBUZWNobm9sb2dpYyBTeXN0ZW1zICovCisJVFM3ODAwX1JFVl8xCT0gRlBHQUlEKDB4MDBiNDgwLCAweDAxKSwKKwlUUzc4MDBfUkVWXzIJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDIpLAorCVRTNzgwMF9SRVZfMwk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwMyksCisJVFM3ODAwX1JFVl80CT0gRlBHQUlEKDB4MDBiNDgwLCAweDA0KSwKKwlUUzc4MDBfUkVWXzUJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDUpLAorCisJLyogVW5hZmZvcmRhYmxlICYgRXhwZW5zaXZlICovCisJVUFFX0RVTU1ZCT0gRlBHQUlEKDB4ZmZmZmZmLCAweDAxKSwKK307CisKK3N0cnVjdCBmcGdhX2RldmljZSB7CisJdW5zaWduZWQJCXByZXNlbnQ6MTsKKwl1bnNpZ25lZAkJaW5pdDoxOworfTsKKworc3RydWN0IGZwZ2FfZGV2aWNlcyB7CisJLyogVGVjaG5vbG9naWMgU3lzdGVtcyAqLworCXN0cnVjdCBmcGdhX2RldmljZSAJdHNfcnRjOworCXN0cnVjdCBmcGdhX2RldmljZSAJdHNfbmFuZDsKK307CisKK3N0cnVjdCB0czc4eHhfZnBnYV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQJCWlkOworCWludAkJCXN0YXRlOworCisJc3RydWN0IGZwZ2FfZGV2aWNlcwlzdXBwb3J0czsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LXNldHVwLmMKaW5kZXggMTM2OGU5Zi4uOWE2YjM5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtc2V0dXAuYwpAQCAtMTAsMTcgKzEwLDIwIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvbTQ4dDg2Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgIm1wcC5oIgorI2luY2x1ZGUgInRzNzh4eC1mcGdhLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVFMtNzh4eCBJbmZvCkBAIC0zMywxOCArMzYsMTEgQEAKICNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UJMHhmZjkwMDAwMAogI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1NJWkUJCVNaXzFNCiAKLSNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19TWVNDT05fSUQJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHgwMDApCi0jZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfU1lTQ09OX0xDREkJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHgwMDQpCi0jZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfU1lTQ09OX0xDRE8JKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHgwMDgpCi0KLSNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19SVENfQ1RSTAkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDgwOCkKLSNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19SVENfREFUQQkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDgwYykKLQotLyoKLSAqIDUxMmtCIE5PUiBmbGFzaCBEZXZpY2UKLSAqLwotI2RlZmluZSBUUzc4WFhfTk9SX0JPT1RfQkFTRQkJMHhmZjgwMDAwMAotI2RlZmluZSBUUzc4WFhfTk9SX0JPT1RfU0laRQkJU1pfNTEySworc3RhdGljIHN0cnVjdCB0czc4eHhfZnBnYV9kYXRhIHRzNzh4eF9mcGdhID0geworCS5pZAkJPSAwLAorCS5zdGF0ZQkJPSAxLAorLyoJLnN1cHBvcnRzCT0gLi4uIC0gcG9wdWxhdGVkIGJ5IHRzNzh4eF9mcGdhX3N1cHBvcnRzKCkgKi8KK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSS9PIEFkZHJlc3MgTWFwcGluZwpAQCAtNjUsNDEgKzYxLDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiA1MTJrQiBOT1IgQm9vdCBGbGFzaCAtIHRoZSBjaGlwIGlzIGEgTTI1UDQwCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB0czc4eHhfbm9yX2Jvb3RfZmxhc2hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkubmFtZQkJPSAidHMtYm9vdHJvbSIsCi0JCS5vZmZzZXQJCT0gMCwKLQkJLyogb25seSB0aGUgZmlyc3QgMjU2a0IgaXMgdXNlZCAqLwotCQkuc2l6ZQkJPSBTWl8yNTZLLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHRzNzh4eF9ub3JfYm9vdF9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAxLAotCS5wYXJ0cwkJPSB0czc4eHhfbm9yX2Jvb3RfZmxhc2hfcmVzb3VyY2VzLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUodHM3OHh4X25vcl9ib290X2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRzNzh4eF9ub3JfYm9vdF9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0CQk9IFRTNzhYWF9OT1JfQk9PVF9CQVNFLAotCS5lbmQJCT0gVFM3OFhYX05PUl9CT09UX0JBU0UgKyBUUzc4WFhfTk9SX0JPT1RfU0laRSAtIDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0czc4eHhfbm9yX2Jvb3RfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdHM3OHh4X25vcl9ib290X2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJnRzNzh4eF9ub3JfYm9vdF9mbGFzaF9yZXNvdXJjZSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRXRoZXJuZXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHRzNzh4eF9ldGhfZGF0YSA9IHsKQEAgLTEwNywzMSArNjgsNDAgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUlRDIE00OFQ4NiAtIG5pY2tlZF5XYm9ycm93ZWQgZnJvbSBhcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYworICogU0FUQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX1JUQ19EUlZfTTQ4VDg2Ci1zdGF0aWMgdW5zaWduZWQgY2hhciB0czc4eHhfcnRjX3JlYWRieXRlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZWIoYWRkciwgVFM3OFhYX0ZQR0FfUkVHU19SVENfQ1RSTCk7Ci0JcmV0dXJuIHJlYWRiKFRTNzhYWF9GUEdBX1JFR1NfUlRDX0RBVEEpOwotfQotCi1zdGF0aWMgdm9pZCB0czc4eHhfcnRjX3dyaXRlYnl0ZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGViKGFkZHIsIFRTNzhYWF9GUEdBX1JFR1NfUlRDX0NUUkwpOwotCXdyaXRlYih2YWx1ZSwgVFM3OFhYX0ZQR0FfUkVHU19SVENfREFUQSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbTQ4dDg2X29wcyB0czc4eHhfcnRjX29wcyA9IHsKLQkucmVhZGJ5dGUJPSB0czc4eHhfcnRjX3JlYWRieXRlLAotCS53cml0ZWJ5dGUJPSB0czc4eHhfcnRjX3dyaXRlYnl0ZSwKK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIHRzNzh4eF9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3OHh4X3J0Y19kZXZpY2UgPSB7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJUQyBNNDhUODYgLSBuaWNrZWReV2JvcnJvd2VkIGZyb20gYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUU19SVENfQ1RSTAkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDgwOCkKKyNkZWZpbmUgVFNfUlRDX0RBVEEJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHg4MGMpCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHRzNzh4eF90c19ydGNfcmVhZGJ5dGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRlYihhZGRyLCBUU19SVENfQ1RSTCk7CisJcmV0dXJuIHJlYWRiKFRTX1JUQ19EQVRBKTsKK30KKworc3RhdGljIHZvaWQgdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXdyaXRlYihhZGRyLCBUU19SVENfQ1RSTCk7CisJd3JpdGViKHZhbHVlLCBUU19SVENfREFUQSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbTQ4dDg2X29wcyB0czc4eHhfdHNfcnRjX29wcyA9IHsKKwkucmVhZGJ5dGUJPSB0czc4eHhfdHNfcnRjX3JlYWRieXRlLAorCS53cml0ZWJ5dGUJPSB0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzh4eF90c19ydGNfZGV2aWNlID0gewogCS5uYW1lCQk9ICJydGMtbTQ4dDg2IiwKIAkuaWQJCT0gLTEsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRzNzh4eF9ydGNfb3BzLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ0czc4eHhfdHNfcnRjX29wcywKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gMCwKIH07CkBAIC0xNDYsNTggKzExNiwzMTMgQEAKICAqIFRPRE86IHRyYWNrIGRvd24gYSBndWluZWEgcGlnIHdpdGhvdXQgYW4gUlRDIHRvIHNlZSBpZiB3ZSBjYW4gd29yayBvdXQgYQogICogCQliZXR0ZXIgUlRDIGRldGVjdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHRzNzh4eF9ydGNfaW5pdCh2b2lkKQorc3RhdGljIGludCB0czc4eHhfdHNfcnRjX2xvYWQodm9pZCkKIHsKKwlpbnQgcmM7CiAJdW5zaWduZWQgY2hhciB0bXBfcnRjMCwgdG1wX3J0YzE7CiAKLQl0bXBfcnRjMCA9IHRzNzh4eF9ydGNfcmVhZGJ5dGUoMTI2KTsKLQl0bXBfcnRjMSA9IHRzNzh4eF9ydGNfcmVhZGJ5dGUoMTI3KTsKKwl0bXBfcnRjMCA9IHRzNzh4eF90c19ydGNfcmVhZGJ5dGUoMTI2KTsKKwl0bXBfcnRjMSA9IHRzNzh4eF90c19ydGNfcmVhZGJ5dGUoMTI3KTsKIAotCXRzNzh4eF9ydGNfd3JpdGVieXRlKDB4MDAsIDEyNik7Ci0JdHM3OHh4X3J0Y193cml0ZWJ5dGUoMHg1NSwgMTI3KTsKLQlpZiAodHM3OHh4X3J0Y19yZWFkYnl0ZSgxMjcpID09IDB4NTUpIHsKLQkJdHM3OHh4X3J0Y193cml0ZWJ5dGUoMHhhYSwgMTI3KTsKLQkJaWYgKHRzNzh4eF9ydGNfcmVhZGJ5dGUoMTI3KSA9PSAweGFhCi0JCQkJJiYgdHM3OHh4X3J0Y19yZWFkYnl0ZSgxMjYpID09IDB4MDApIHsKLQkJCXRzNzh4eF9ydGNfd3JpdGVieXRlKHRtcF9ydGMwLCAxMjYpOwotCQkJdHM3OHh4X3J0Y193cml0ZWJ5dGUodG1wX3J0YzEsIDEyNyk7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzh4eF9ydGNfZGV2aWNlKTsKLQkJCXJldHVybiAxOworCXRzNzh4eF90c19ydGNfd3JpdGVieXRlKDB4MDAsIDEyNik7CisJdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUoMHg1NSwgMTI3KTsKKwlpZiAodHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSgxMjcpID09IDB4NTUpIHsKKwkJdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUoMHhhYSwgMTI3KTsKKwkJaWYgKHRzNzh4eF90c19ydGNfcmVhZGJ5dGUoMTI3KSA9PSAweGFhCisJCQkJJiYgdHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSgxMjYpID09IDB4MDApIHsKKwkJCXRzNzh4eF90c19ydGNfd3JpdGVieXRlKHRtcF9ydGMwLCAxMjYpOworCQkJdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUodG1wX3J0YzEsIDEyNyk7CisKKwkJCWlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMuaW5pdCA9PSAwKSB7CisJCQkJcmMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzh4eF90c19ydGNfZGV2aWNlKTsKKwkJCQlpZiAoIXJjKQorCQkJCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMuaW5pdCA9IDE7CisJCQl9IGVsc2UKKwkJCQlyYyA9IHBsYXRmb3JtX2RldmljZV9hZGQoJnRzNzh4eF90c19ydGNfZGV2aWNlKTsKKworCQkJcmV0dXJuIHJjOwogCQl9CiAJfQogCisJcmV0dXJuIC1FTk9ERVY7Cit9OworCitzdGF0aWMgdm9pZCB0czc4eHhfdHNfcnRjX3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9kZWwoJnRzNzh4eF90c19ydGNfZGV2aWNlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQU5EIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVFNfTkFORF9DVFJMCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4ODAwKQkvKiBWSVJUICovCisjZGVmaW5lIFRTX05BTkRfREFUQQkoVFM3OFhYX0ZQR0FfUkVHU19QSFlTX0JBU0UgfCAweDgwNCkJLyogUEhZUyAqLworCisvKgorICogaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKKyAqCisgKiBjdHJsOgorICogTkFORF9OQ0U6IGJpdCAwIC0+IGJpdCAyCisgKiBOQU5EX0NMRTogYml0IDEgLT4gYml0IDEKKyAqIE5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMAorICovCitzdGF0aWMgdm9pZCB0czc4eHhfdHNfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCXVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJdW5zaWduZWQgY2hhciBiaXRzOworCisJCWJpdHMgPSAoY3RybCAmIE5BTkRfTkNFKSA8PCAyOworCQliaXRzIHw9IGN0cmwgJiBOQU5EX0NMRTsKKwkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA+PiAyOworCisJCXdyaXRlYigocmVhZGIoVFNfTkFORF9DVFJMKSAmIH4weDcpIHwgYml0cywgVFNfTkFORF9DVFJMKTsKKwl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIHRoaXMtPklPX0FERFJfVyk7Cit9CisKK3N0YXRpYyBpbnQgdHM3OHh4X3RzX25hbmRfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiByZWFkYihUU19OQU5EX0NUUkwpICYgMHgyMDsKK30KKworY29uc3QgY2hhciAqdHNfbmFuZF9wYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB0czc4eHhfdHNfbmFuZF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1iciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gU1pfMTI4SywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sIHsKKwkJLm5hbWUJCT0gImtlcm5lbCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl80TSwKKwl9LCB7CisJCS5uYW1lCQk9ICJpbml0cmQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNE0sCisJfSwgeworCQkubmFtZQkJPSAicm9vdGZzIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgdHM3OHh4X3RzX25hbmRfZGF0YSA9IHsKKwkuY2hpcAk9IHsKKwkJLnBhcnRfcHJvYmVfdHlwZXMJPSB0c19uYW5kX3BhcnRfcHJvYmVzLAorCQkucGFydGl0aW9ucwkJPSB0czc4eHhfdHNfbmFuZF9wYXJ0cywKKwkJLm5yX3BhcnRpdGlvbnMJCT0gQVJSQVlfU0laRSh0czc4eHhfdHNfbmFuZF9wYXJ0cyksCisJCS5jaGlwX2RlbGF5CQk9IDE1LAorCQkub3B0aW9ucwkJPSBOQU5EX1VTRV9GTEFTSF9CQlQsCisJfSwKKwkuY3RybAk9IHsKKwkJLyoKKwkJICogVGhlIEhXIEVDQyBvZmZsb2FkaW5nIGZ1bmN0aW9ucywgdXNlZCB0byBnaXZlIGFib3V0IGEgOSUKKwkJICogcGVyZm9ybWFuY2UgaW5jcmVhc2UgZm9yICdkZCBpZj0vZGV2L210ZGJsb2NrWCcgYW5kIDUlIGZvcgorCQkgKiBuYW5kZHVtcC4gIFRoaXMgYWxsIGhvd2V2ZXIgd2FzIGNoYW5nZWQgYnkgZ2l0IGNvbW1pdAorCQkgKiBlNmNmNWRmMTgzOGMyOGJiMDYwYWM0NWI1NTg1ZTQ4ZTcxYmJjNzQwIHNvIG5vdyB0aGVyZSBpcworCQkgKiBubyBwZXJmb3JtYW5jZSBhZHZhbnRhZ2UgdG8gYmUgaGFkIHNvIHdlIG5vIGxvbmdlciBib3RoZXIKKwkJICovCisJCS5jbWRfY3RybAkJPSB0czc4eHhfdHNfbmFuZF9jbWRfY3RybCwKKwkJLmRldl9yZWFkeQkJPSB0czc4eHhfdHNfbmFuZF9kZXZfcmVhZHksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHM3OHh4X3RzX25hbmRfcmVzb3VyY2VzID0geworCS5zdGFydAkJPSBUU19OQU5EX0RBVEEsCisJLmVuZAkJPSBUU19OQU5EX0RBVEEgKyA0LAorCS5mbGFncwkJPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3OHh4X3RzX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJnZW5fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ0czc4eHhfdHNfbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gJnRzNzh4eF90c19uYW5kX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCitzdGF0aWMgaW50IHRzNzh4eF90c19uYW5kX2xvYWQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlpZiAodHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5pbml0ID09IDApIHsKKwkJcmMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzh4eF90c19uYW5kX2RldmljZSk7CisJCWlmICghcmMpCisJCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLmluaXQgPSAxOworCX0gZWxzZQorCQlyYyA9IHBsYXRmb3JtX2RldmljZV9hZGQoJnRzNzh4eF90c19uYW5kX2RldmljZSk7CisKKwlyZXR1cm4gcmM7Cit9OworCitzdGF0aWMgdm9pZCB0czc4eHhfdHNfbmFuZF91bmxvYWQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKCZ0czc4eHhfdHNfbmFuZF9kZXZpY2UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZQR0EgJ2hvdHBsdWcnIHN1cHBvcnQgY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCB0czc4eHhfZnBnYV9kZXZpY2VzX3plcm9faW5pdCh2b2lkKQoreworCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5pbml0ID0gMDsKKwl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLmluaXQgPSAwOworfQorCitzdGF0aWMgdm9pZCB0czc4eHhfZnBnYV9zdXBwb3J0cyh2b2lkKQoreworCS8qIFRPRE86IHB1dCB0aGlzICd0YWJsZScgaW50byB0czc4eHgtZnBnYS5oICovCisJc3dpdGNoICh0czc4eHhfZnBnYS5pZCkgeworCWNhc2UgVFM3ODAwX1JFVl8xOgorCWNhc2UgVFM3ODAwX1JFVl8yOgorCWNhc2UgVFM3ODAwX1JFVl8zOgorCWNhc2UgVFM3ODAwX1JFVl80OgorCWNhc2UgVFM3ODAwX1JFVl81OgorCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2VudCA9IDE7CisJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQucHJlc2VudCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5wcmVzZW50ID0gMDsKKwkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdHM3OHh4X2ZwZ2FfbG9hZF9kZXZpY2VzKHZvaWQpCit7CisJaW50IHRtcCwgcmV0ID0gMDsKKworCWlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2VudCA9PSAxKSB7CisJCXRtcCA9IHRzNzh4eF90c19ydGNfbG9hZCgpOworCQlpZiAodG1wKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJUUy03OHh4OiBSVEMgbm90IHJlZ2lzdGVyZWRcbiIpOworCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAwOworCQl9CisJCXJldCB8PSB0bXA7CisJfQorCWlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLnByZXNlbnQgPT0gMSkgeworCQl0bXAgPSB0czc4eHhfdHNfbmFuZF9sb2FkKCk7CisJCWlmICh0bXApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIlRTLTc4eHg6IE5BTkQgbm90IHJlZ2lzdGVyZWRcbiIpOworCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMDsKKwkJfQorCQlyZXQgfD0gdG1wOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHM3OHh4X2ZwZ2FfdW5sb2FkX2RldmljZXModm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2VudCA9PSAxKQorCQl0czc4eHhfdHNfcnRjX3VubG9hZCgpOworCWlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLnByZXNlbnQgPT0gMSkKKwkJdHM3OHh4X3RzX25hbmRfdW5sb2FkKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRzNzh4eF9mcGdhX2xvYWQodm9pZCkKK3sKKwl0czc4eHhfZnBnYS5pZCA9IHJlYWRsKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFKTsKKworCXByaW50ayhLRVJOX0lORk8gIlRTLTc4eHggRlBHQTogbWFnaWM9MHglLjZ4LCByZXY9MHglLjJ4XG4iLAorCQkJKHRzNzh4eF9mcGdhLmlkID4+IDgpICYgMHhmZmZmZmYsCisJCQl0czc4eHhfZnBnYS5pZCAmIDB4ZmYpOworCisJdHM3OHh4X2ZwZ2Ffc3VwcG9ydHMoKTsKKworCWlmICh0czc4eHhfZnBnYV9sb2FkX2RldmljZXMoKSkgeworCQl0czc4eHhfZnBnYS5zdGF0ZSA9IC0xOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwogCXJldHVybiAwOwogfTsKLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCB0czc4eHhfcnRjX2luaXQodm9pZCkKKworc3RhdGljIGludCB0czc4eHhfZnBnYV91bmxvYWQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgZnBnYV9pZDsKKworCWZwZ2FfaWQgPSByZWFkbChUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSk7CisKKwkvKgorCSAqIFRoZXJlIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBmZWFzaWJsZSB3YXkgdG8gYmxvY2sgYWNjZXNzIHRvIHRoZSBHUElPCisJICogcGlucyBmcm9tIHVzZXJzcGFjZSAoL2Rldi9tZW0pLiAgVGhpcyBpZiBjbGF1c2Ugc2hvdWxkIGhvcGVmdWxseSB3YXJuCisJICogdGhvc2UgZm9vbGlzaCBlbm91Z2ggbm90IHRvIGZvbGxvdyAncG9saWN5JyA6KQorCSAqCisJICogVXJKVEFHIFNWTiBzaW5jZSByMTM4MSBjYW4gYmUgdXNlZCB0byByZXByb2dyYW0gdGhlIEZQR0EKKwkgKi8KKwlpZiAodHM3OHh4X2ZwZ2EuaWQgIT0gZnBnYV9pZCkgeworCQlwcmludGsoS0VSTl9FUlIJIlRTLTc4eHggRlBHQTogbWFnaWMvcmV2IG1pc21hdGNoXG4iCisJCQkiVFMtNzh4eCBGUEdBOiB3YXMgMHglLjZ4LyUuMnggYnV0IG5vdyAweCUuNngvJS4yeFxuIiwKKwkJCSh0czc4eHhfZnBnYS5pZCA+PiA4KSAmIDB4ZmZmZmZmLCB0czc4eHhfZnBnYS5pZCAmIDB4ZmYsCisJCQkoZnBnYV9pZCA+PiA4KSAmIDB4ZmZmZmZmLCBmcGdhX2lkICYgMHhmZik7CisJCXRzNzh4eF9mcGdhLnN0YXRlID0gLTE7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHRzNzh4eF9mcGdhX3VubG9hZF9kZXZpY2VzKCkpIHsKKwkJdHM3OHh4X2ZwZ2Euc3RhdGUgPSAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKIAlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNBVEEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgdHM3OHh4X3NhdGFfZGF0YSA9IHsKLQkubl9wb3J0cwk9IDIsCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHByaW50IHNvbWUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBib2FyZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBfX2luaXQgdHM3OHh4X3ByaW50X2JvYXJkX2lkKHZvaWQpCitzdGF0aWMgc3NpemVfdCB0czc4eHhfZnBnYV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JdW5zaWduZWQgaW50IGJvYXJkX2luZm87CisJaWYgKHRzNzh4eF9mcGdhLnN0YXRlIDwgMCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiYm9ya2VkXG4iKTsKIAotCWJvYXJkX2luZm8gPSByZWFkbChUUzc4WFhfRlBHQV9SRUdTX1NZU0NPTl9JRCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVFMtNzh4eCBJbmZvOiBGUEdBIHJldj0lLjJ4LCBCb2FyZCBNYWdpYz0lLjZ4LCAiLAotCQkJCWJvYXJkX2luZm8gJiAweGZmLAotCQkJCShib2FyZF9pbmZvID4+IDgpICYgMHhmZmZmZmYpOwotCWJvYXJkX2luZm8gPSByZWFkbChUUzc4WFhfRlBHQV9SRUdTX1NZU0NPTl9MQ0RJKTsKLQlwcmludGsoIkpQMT0lZCwgSlAyPSVkXG4iLAotCQkJCShib2FyZF9pbmZvID4+IDMwKSAmIDB4MSwKLQkJCQkoYm9hcmRfaW5mbyA+PiAzMSkgJiAweDEpOwotfTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKHRzNzh4eF9mcGdhLnN0YXRlKSA/ICJvbmxpbmUiIDogIm9mZmxpbmUiKTsKK30KKworc3RhdGljIHNzaXplX3QgdHM3OHh4X2ZwZ2Ffc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJaW50IHZhbHVlLCByZXQ7CisKKwlpZiAodHM3OHh4X2ZwZ2Euc3RhdGUgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVFMtNzh4eCBGUEdBOiBib3JrZWQsIHlvdSBtdXN0IHBvd2VyY3ljbGUgYXNhcFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHN0cm5jbXAoYnVmLCAib25saW5lIiwgc2l6ZW9mKCJvbmxpbmUiKSAtIDEpID09IDApCisJCXZhbHVlID0gMTsKKwllbHNlIGlmIChzdHJuY21wKGJ1ZiwgIm9mZmxpbmUiLCBzaXplb2YoIm9mZmxpbmUiKSAtIDEpID09IDApCisJCXZhbHVlID0gMDsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0czc4eHhfZnBnYV9zdG9yZTogSW52YWxpZCB2YWx1ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0czc4eHhfZnBnYS5zdGF0ZSA9PSB2YWx1ZSkKKwkJcmV0dXJuIG47CisKKwlyZXQgPSAodHM3OHh4X2ZwZ2Euc3RhdGUgPT0gMCkKKwkJPyB0czc4eHhfZnBnYV9sb2FkKCkKKwkJOiB0czc4eHhfZnBnYV91bmxvYWQoKTsKKworCWlmICghKHJldCA8IDApKQorCQl0czc4eHhfZnBnYS5zdGF0ZSA9IHZhbHVlOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdHM3OHh4X2ZwZ2FfYXR0ciA9CisJX19BVFRSKHRzNzh4eF9mcGdhLCAwNjQ0LCB0czc4eHhfZnBnYV9zaG93LCB0czc4eHhfZnBnYV9zdG9yZSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJhbCBTZXR1cApAQCAtMjIzLDIwICs0NDgsNiBAQAogCXsgMTcsIE1QUF9VQVJUIH0sCiAJeyAxOCwgTVBQX1VBUlQgfSwKIAl7IDE5LCBNUFBfVUFSVCB9LAotCXsgLTEgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB0czc4eHhfaW5pdCh2b2lkKQotewotCS8qCi0JICogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KLQkgKi8KLQlvcmlvbjV4X2luaXQoKTsKLQotCXRzNzh4eF9wcmludF9ib2FyZF9pZCgpOwotCi0Jb3Jpb241eF9tcHBfY29uZih0czc4eHhfbXBwX21vZGVzKTsKLQogCS8qCiAJICogTVBQWzIwXSBQQ0kgQ2xvY2sgT3V0IDEKIAkgKiBNUFBbMjFdIFBDSSBDbG9jayBPdXQgMApAQCAtMjQ1LDYgKzQ1NiwxOSBAQAogCSAqIE1QUFsyNF0gVW51c2VkCiAJICogTVBQWzI1XSBVbnVzZWQKIAkgKi8KKwl7IC0xIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdHM3OHh4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCW9yaW9uNXhfaW5pdCgpOworCisJb3Jpb241eF9tcHBfY29uZih0czc4eHhfbXBwX21vZGVzKTsKIAogCS8qCiAJICogQ29uZmlndXJlIHBlcmlwaGVyYWxzLgpAQCAtMjU3LDEyICs0ODEsMTIgQEAKIAlvcmlvbjV4X3VhcnQxX2luaXQoKTsKIAlvcmlvbjV4X3hvcl9pbml0KCk7CiAKLQlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihUUzc4WFhfTk9SX0JPT1RfQkFTRSwKLQkJCQkgICBUUzc4WFhfTk9SX0JPT1RfU0laRSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ0czc4eHhfbm9yX2Jvb3RfZmxhc2gpOwotCi0JaWYgKCF0czc4eHhfcnRjX2luaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVFMtNzh4eCBSVEMgbm90IGRldGVjdGVkIG9yIGVuYWJsZWRcbiIpOworCS8qIEZQR0EgaW5pdCAqLworCXRzNzh4eF9mcGdhX2RldmljZXNfemVyb19pbml0KCk7CisJcmV0ID0gdHM3OHh4X2ZwZ2FfbG9hZCgpOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHBvd2VyX2tvYmosICZ0czc4eHhfZnBnYV9hdHRyLmF0dHIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAic3lzZnNfY3JlYXRlX2ZpbGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIH0KIAogTUFDSElORV9TVEFSVChUUzc4WFgsICJUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTc4eHggU0JDIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCmluZGV4IGNjOGY4OTIuLjFiNGFkOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSB3cnQzNTBuX3YyX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTExNSw2ICsxMTUsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW40IiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJndydDM1MG5fdjJfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCB3cnQzNTBuX3YyX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTI5LDcgKzEzNCw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmd3J0MzUwbl92Ml9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJndydDM1MG5fdjJfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJndydDM1MG5fdjJfc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFdSVDM1ME5fVjJfTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGUxMmU3YWIuLjVkZGEyYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMzAsNyArMzAsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IDhlZWE3MzAuLjk2YTIwMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtNDAsNiArNDAsOSBAQAogY29uZmlnIEdVTVNUSVhfQU0yMDBFUEQKIAlib29sICJFbmFibGUgQU0yMDBFUEQgYm9hcmQgc3VwcG9ydCIKIAorY29uZmlnIEdVTVNUSVhfQU0zMDBFUEQKKwlib29sICJFbmFibGUgQU0zMDBFUEQgYm9hcmQgc3VwcG9ydCIKKwogZW5kY2hvaWNlCiAKIGNvbmZpZyBNQUNIX0lOVEVMTU9URTIKQEAgLTI1NCwxMCArMjU3LDI0IEBACiAJYm9vbCAiQ29tcHVMYWIgRU0teDI3MCBwbGF0Zm9ybSIKIAlzZWxlY3QgUFhBMjd4CiAKLWNvbmZpZyBNQUNIX0NPTElCUkkKLQlib29sICJUb3JhZGV4IENvbGlicmkgUFgyN3giCitjb25maWcgTUFDSF9FWEVEQQorCWJvb2wgIkNvbXB1TGFiIGVYZWRhIHBsYXRmb3JtIgogCXNlbGVjdCBQWEEyN3gKIAorY29uZmlnIE1BQ0hfQ09MSUJSSQorCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWEEyNzAiCisJc2VsZWN0IFBYQTI3eAorCitjb25maWcgTUFDSF9DT0xJQlJJMzAwCisJYm9vbCAiVG9yYWRleCBDb2xpYnJpIFBYQTMwMC8zMTAiCisJc2VsZWN0IFBYQTN4eAorCXNlbGVjdCBDUFVfUFhBMzAwCisKK2NvbmZpZyBNQUNIX0NPTElCUkkzMjAKKwlib29sICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIgorCXNlbGVjdCBQWEEzeHgKKwlzZWxlY3QgQ1BVX1BYQTMyMAorCiBjb25maWcgTUFDSF9aWUxPTklURQogCWJvb2wgIlBYQTN4eCBEZXZlbG9wbWVudCBQbGF0Zm9ybSAoYWthIFp5bG9uaXRlKSIKIAlzZWxlY3QgUFhBM3h4CkBAIC0yOTUsOCArMzEyLDE1IEBACiAJYm9vbCAiRW5hYmxlIEhUQyBNYWdpY2lhbiBTdXBwb3J0IgogCXNlbGVjdCBQWEEyN3gKIAlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IFBYQV9TU1AKKwlzZWxlY3QgSEFWRV9QV00KIAlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUwogCitjb25maWcgTUFDSF9ISU1BTEFZQQorCWJvb2wgIkhUQyBIaW1hbGF5YSBTdXBwb3J0IgorCXNlbGVjdCBDUFVfUFhBMjZ4CisJc2VsZWN0IEZCX1cxMDAKKwogY29uZmlnIE1BQ0hfTUlPQTcwMQogCWJvb2wgIk1pdGFjIE1pbyBBNzAxIFN1cHBvcnQiCiAJc2VsZWN0IFBYQTI3eApAQCAtMzE5LDYgKzM0MywxNiBAQAogCWJvb2wgIlBYQSBiYXNlZCBQYWxtIFBEQXMiCiAJc2VsZWN0IEhBVkVfUFdNCiAKK2NvbmZpZyBNQUNIX1BBTE1UNQorCWJvb2wgIlBhbG0gVHVuZ3N0ZW58VDUiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9QQUxNCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBJV01NWFQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgUGFsbSBUdW5nc3RlbnxUNQorCSAgaGFuZGhlbGQgY29tcHV0ZXIuCisKIGNvbmZpZyBNQUNIX1BBTE1UWAogCWJvb2wgIlBhbG0gVHxYIgogCWRlZmF1bHQgeQpAQCAtMzM5LDYgKzM3MywxNiBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBQYWxtIFppcmUgNzIKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCitjb25maWcgTUFDSF9QQUxNTEQKKwlib29sICJQYWxtIExpZmVEcml2ZSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBX1BBTE0KKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIExpZmVEcml2ZQorCSAgaGFuZGhlbGQgY29tcHV0ZXIuCisKIGNvbmZpZyBNQUNIX1BDTTk5MF9CQVNFQk9BUkQKIAlib29sICJQSFlURUMgUENNLTk5MCBkZXZlbG9wbWVudCBib2FyZCIKIAlzZWxlY3QgSEFWRV9QV00KQEAgLTM1OSw2ICs0MDMsMTggQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBNQUNIX0NTQjcyNgorCWJvb2wgIkVuYWJsZSBDb2dlbnQgQ1NCNzI2IFN5c3RlbSBPbiBhIE1vZHVsZSIKKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBDb2dlbnQKKwkgIENTQjcyNiBTeXN0ZW0gT24gTW9kdWxlLgorCitjb25maWcgQ1NCNzI2X0NTQjcwMQorCWJvb2wgIkVuYWJsZSBzdXBwcm90IGZvciBDU0I3MDEgYmFzZWJvYXJkIgorCWRlcGVuZHMgb24gTUFDSF9DU0I3MjYKKwogY29uZmlnIFBYQV9FWlgKIAlib29sICJNb3Rvcm9sYSBFWlggUGxhdGZvcm0iCiAJc2VsZWN0IFBYQTI3eApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQppbmRleCA3YjI4YmI1Li5jODBlMWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQpAQCAtMyw4ICszLDggQEAKICMKIAogIyBDb21tb24gc3VwcG9ydCAobXVzdCBiZSBsaW5rZWQgYmVmb3JlIGJvYXJkIHNwZWNpZmljIHN1cHBvcnQpCi1vYmoteQkJCQkrPSBjbG9jay5vIGRldmljZXMubyBnZW5lcmljLm8gaXJxLm8gZG1hLm8gXAotCQkJCSAgIHRpbWUubyBncGlvLm8gcmVzZXQubworb2JqLXkJCQkJKz0gY2xvY2subyBkZXZpY2VzLm8gZ2VuZXJpYy5vIGlycS5vIFwKKwkJCQkgICB0aW1lLm8gcmVzZXQubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubyBzbGVlcC5vIHN0YW5kYnkubwogCiBpZmVxICgkKENPTkZJR19DUFVfRlJFUSkseSkKQEAgLTI4LDEzICsyOCwxNiBAQAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfQVJDSF9HVU1TVElYKQkrPSBndW1zdGl4Lm8KIG9iai0kKENPTkZJR19HVU1TVElYX0FNMjAwRVBEKQkrPSBhbTIwMGVwZC5vCitvYmotJChDT05GSUdfR1VNU1RJWF9BTTMwMEVQRCkJKz0gYW0zMDBlcGQubwogb2JqLSQoQ09ORklHX0FSQ0hfTFVCQk9DSykJKz0gbHViYm9jay5vCiBvYmotJChDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCkgKz0gbHBkMjcwLm8KIG9iai0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkJKz0gbWFpbnN0b25lLm8KIG9iai0kKENPTkZJR19NQUNIX01QOTAwQykJKz0gbXA5MDAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkJKz0gaWRwLm8KIG9iai0kKENPTkZJR19NQUNIX1RSSVpFUFM0KQkrPSB0cml6ZXBzNC5vCi1vYmotJChDT05GSUdfTUFDSF9DT0xJQlJJKQkrPSBjb2xpYnJpLm8KK29iai0kKENPTkZJR19NQUNIX0NPTElCUkkpCSs9IGNvbGlicmktcHhhMjcwLm8KK29iai0kKENPTkZJR19NQUNIX0NPTElCUkkzMDApCSs9IGNvbGlicmktcHhhM3h4Lm8gY29saWJyaS1weGEzMDAubworb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSTMyMCkJKz0gY29saWJyaS1weGEzeHgubyBjb2xpYnJpLXB4YTMyMC5vCiBvYmotJChDT05GSUdfTUFDSF9INTAwMCkJKz0gaDUwMDAubwogb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DN3h4KQkrPSBjb3JnaS5vIHNoYXJwc2xfcG0ubyBjb3JnaV9wbS5vCiBvYmotJChDT05GSUdfUFhBX1NIQVJQX0N4eDAwKQkrPSBzcGl0ei5vIHNoYXJwc2xfcG0ubyBzcGl0el9wbS5vCkBAIC00NSw2ICs0OCw3IEBACiBvYmotJChDT05GSUdfTUFDSF9UT1NBKQkJKz0gdG9zYS5vCiBvYmotJChDT05GSUdfTUFDSF9FTV9YMjcwKQkrPSBlbS14MjcwLm8KIG9iai0kKENPTkZJR19NQUNIX01BR0lDSUFOKQkrPSBtYWdpY2lhbi5vCitvYmotJChDT05GSUdfTUFDSF9ISU1BTEFZQSkJKz0gaGltYWxheWEubwogb2JqLSQoQ09ORklHX01BQ0hfTUlPQTcwMSkJKz0gbWlvYTcwMS5vIG1pb2E3MDFfYm9vdHJlc3VtZS5vCiBvYmotJChDT05GSUdfQVJDSF9QWEFfRVNFUklFUykJKz0gZXNlcmllcy5vCiBvYmotJChDT05GSUdfTUFDSF9FMzMwKQkJKz0gZTMzMC5vCkBAIC01Myw3ICs1Nyw5IEBACiBvYmotJChDT05GSUdfTUFDSF9FNzUwKQkJKz0gZTc1MC5vCiBvYmotJChDT05GSUdfTUFDSF9FNDAwKQkJKz0gZTQwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FODAwKQkJKz0gZTgwMC5vCitvYmotJChDT05GSUdfTUFDSF9QQUxNVDUpCSs9IHBhbG10NS5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNVFgpCSs9IHBhbG10eC5vCitvYmotJChDT05GSUdfTUFDSF9QQUxNTEQpCSs9IHBhbG1sZC5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNWjcyKQkrPSBwYWxtejcyLm8KIG9iai0kKENPTkZJR19BUkNIX1ZJUEVSKQkrPSB2aXBlci5vCiAKQEAgLTcxLDYgKzc3LDggQEAKIG9iai0kKENPTkZJR19QWEFfRVpYKSAgICAgICAgICAgKz0gZXp4Lm8KIAogb2JqLSQoQ09ORklHX01BQ0hfSU5URUxNT1RFMikgICArPSBpbW90ZTIubworb2JqLSQoQ09ORklHX01BQ0hfQ1NCNzI2KQkrPSBjc2I3MjYubworb2JqLSQoQ09ORklHX0NTQjcyNl9DU0I3MDEpCSs9IGNzYjcwMS5vCiAKICMgU3VwcG9ydCBmb3IgYmxpbmt5IGxpZ2h0cwogbGVkLXkgOj0gbGVkcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9hbTIwMGVwZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvYW0yMDBlcGQuYwppbmRleCA3N2VlODBlLi4zNDk5ZmFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9hbTIwMGVwZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2FtMjAwZXBkLmMKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Vtc3RpeC5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2FtMzAwZXBkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9hbTMwMGVwZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDEwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9hbTMwMGVwZC5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogYW0zMDBlcGQuYyAtLSBQbGF0Zm9ybSBkZXZpY2UgZm9yIEFNMzAwIEVQRCBraXQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEpheWEgS3VtYXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIHdvcmsgd2FzIG1hZGUgcG9zc2libGUgYnkgaGVscCBhbmQgZXF1aXBtZW50IHN1cHBvcnQgZnJvbSBFLUluaworICogQ29ycG9yYXRpb24uIGh0dHA6Ly9zdXBwb3J0LmVpbmsuY29tL2NvbW11bml0eQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIHdyaXR0ZW4gdG8gYmUgdXNlZCB3aXRoIHRoZSBCcm9hZHNoZWV0IGRpc3BsYXkgY29udHJvbGxlci4KKyAqIG9uIHRoZSBBTTMwMCBFUEQgcHJvdG90eXBlIGtpdC9kZXZlbG9wbWVudCBraXQgd2l0aCBhbiBFLUluayA4MDB4NjAwCisgKiBWaXpwbGV4IEVQRCBvbiBhIEd1bXN0aXggYm9hcmQgdXNpbmcgdGhlIEJyb2Fkc2hlZXQgaW50ZXJmYWNlIGJvYXJkLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvZ3Vtc3RpeC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2luY2x1ZGUgPHZpZGVvL2Jyb2Fkc2hlZXRmYi5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBhbmVsX3R5cGUgPSA2Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFtMzAwX2RldmljZTsKK3N0YXRpYyBzdHJ1Y3QgYnJvYWRzaGVldF9ib2FyZCBhbTMwMF9ib2FyZDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYW0zMDBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzE2X0dQSU8sCisJR1BJTzE3X0dQSU8sCisJR1BJTzMyX0dQSU8sCisJR1BJTzQ4X0dQSU8sCisJR1BJTzQ5X0dQSU8sCisJR1BJTzUxX0dQSU8sCisJR1BJTzc0X0dQSU8sCisJR1BJTzc1X0dQSU8sCisJR1BJTzc2X0dQSU8sCisJR1BJTzc3X0dQSU8sCisKKwkvKiB0aGlzIGlzIHRoZSAxNi1iaXQgaGRiIGJ1cyA1OC03MyAqLworCUdQSU81OF9HUElPLAorCUdQSU81OV9HUElPLAorCUdQSU82MF9HUElPLAorCUdQSU82MV9HUElPLAorCisJR1BJTzYyX0dQSU8sCisJR1BJTzYzX0dQSU8sCisJR1BJTzY0X0dQSU8sCisJR1BJTzY1X0dQSU8sCisKKwlHUElPNjZfR1BJTywKKwlHUElPNjdfR1BJTywKKwlHUElPNjhfR1BJTywKKwlHUElPNjlfR1BJTywKKworCUdQSU83MF9HUElPLAorCUdQSU83MV9HUElPLAorCUdQSU83Ml9HUElPLAorCUdQSU83M19HUElPLAorfTsKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgZ3BpbyBjb250cm9sICovCisjZGVmaW5lIFBXUl9HUElPX1BJTgkxNgorI2RlZmluZSBDRkdfR1BJT19QSU4JMTcKKyNkZWZpbmUgUkRZX0dQSU9fUElOCTMyCisjZGVmaW5lIERDX0dQSU9fUElOCTQ4CisjZGVmaW5lIFJTVF9HUElPX1BJTgk0OQorI2RlZmluZSBMRURfR1BJT19QSU4JNTEKKyNkZWZpbmUgUkRfR1BJT19QSU4JNzQKKyNkZWZpbmUgV1JfR1BJT19QSU4JNzUKKyNkZWZpbmUgQ1NfR1BJT19QSU4JNzYKKyNkZWZpbmUgSVJRX0dQSU9fUElOCTc3CisKKy8qIGhkYiBidXMgKi8KKyNkZWZpbmUgREIwX0dQSU9fUElOCTU4CisjZGVmaW5lIERCMTVfR1BJT19QSU4JNzMKKworc3RhdGljIGludCBncGlvc1tdID0geyBQV1JfR1BJT19QSU4sIENGR19HUElPX1BJTiwgUkRZX0dQSU9fUElOLCBEQ19HUElPX1BJTiwKKwkJCVJTVF9HUElPX1BJTiwgUkRfR1BJT19QSU4sIFdSX0dQSU9fUElOLCBDU19HUElPX1BJTiwKKwkJCUlSUV9HUElPX1BJTiwgTEVEX0dQSU9fUElOIH07CitzdGF0aWMgY2hhciAqZ3Bpb19uYW1lc1tdID0geyAiUFdSIiwgIkNGRyIsICJSRFkiLCAiREMiLCAiUlNUIiwgIlJEIiwgIldSIiwKKwkJCQkiQ1MiLCAiSVJRIiwgIkxFRCIgfTsKKworc3RhdGljIGludCBhbTMwMF93YWl0X2V2ZW50KHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJLyogdG9kbzogaW1wcm92ZSBlcnIgcmVjb3ZlcnkgKi8KKwl3YWl0X2V2ZW50KHBhci0+d2FpdHEsIGdwaW9fZ2V0X3ZhbHVlKFJEWV9HUElPX1BJTikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtMzAwX2luaXRfZ3Bpb19yZWdzKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJaW50IGk7CisJaW50IGVycjsKKwljaGFyIGRibmFtZVs4XTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdwaW9zKTsgaSsrKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChncGlvc1tpXSwgZ3Bpb19uYW1lc1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmFtMzAwX2RldmljZS0+ZGV2LCAiZmFpbGVkIHJlcXVlc3RpbmcgIgorCQkJCSJncGlvICVzLCBlcnI9JWRcbiIsIGdwaW9fbmFtZXNbaV0sIGVycik7CisJCQlnb3RvIGVycl9yZXFfZ3BpbzsKKwkJfQorCX0KKworCS8qIHdlIGFsc28gbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGhkYiBidXMgKi8KKwlmb3IgKGkgPSBEQjBfR1BJT19QSU47IGkgPD0gREIxNV9HUElPX1BJTjsgaSsrKSB7CisJCXNwcmludGYoZGJuYW1lLCAiREIlZCIsIGkpOworCQllcnIgPSBncGlvX3JlcXVlc3QoaSwgZGJuYW1lKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmYW0zMDBfZGV2aWNlLT5kZXYsICJmYWlsZWQgcmVxdWVzdGluZyAiCisJCQkJImdwaW8gJWQsIGVycj0lZFxuIiwgaSwgZXJyKTsKKwkJCXdoaWxlIChpID49IERCMF9HUElPX1BJTikKKwkJCQlncGlvX2ZyZWUoaS0tKTsKKwkJCWkgPSBBUlJBWV9TSVpFKGdwaW9zKSAtIDE7CisJCQlnb3RvIGVycl9yZXFfZ3BpbzsKKwkJfQorCX0KKworCS8qIHNldHVwIHRoZSBvdXRwdXRzIGFuZCBpbml0IHZhbHVlcyAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChQV1JfR1BJT19QSU4sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChDRkdfR1BJT19QSU4sIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChEQ19HUElPX1BJTiwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJEX0dQSU9fUElOLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoV1JfR1BJT19QSU4sIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChDU19HUElPX1BJTiwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJTVF9HUElPX1BJTiwgMCk7CisKKwkvKiBzZXR1cCB0aGUgaW5wdXRzICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoUkRZX0dQSU9fUElOKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChJUlFfR1BJT19QSU4pOworCisJLyogc3RhcnQgdGhlIGhkYiBidXMgYXMgYW4gaW5wdXQgKi8KKwlmb3IgKGkgPSBEQjBfR1BJT19QSU47IGkgPD0gREIxNV9HUElPX1BJTjsgaSsrKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoaSwgMCk7CisKKwkvKiBnbyBpbnRvIGNvbW1hbmQgbW9kZSAqLworCWdwaW9fc2V0X3ZhbHVlKENGR19HUElPX1BJTiwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoUlNUX0dQSU9fUElOLCAwKTsKKwltc2xlZXAoMTApOworCWdwaW9fc2V0X3ZhbHVlKFJTVF9HUElPX1BJTiwgMSk7CisJbXNsZWVwKDEwKTsKKwlhbTMwMF93YWl0X2V2ZW50KHBhcik7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlcV9ncGlvOgorCXdoaWxlIChpID4gMCkKKwkJZ3Bpb19mcmVlKGdwaW9zW2ktLV0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhbTMwMF9pbml0X2JvYXJkKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJcmV0dXJuIGFtMzAwX2luaXRfZ3Bpb19yZWdzKHBhcik7Cit9CisKK3N0YXRpYyB2b2lkIGFtMzAwX2NsZWFudXAoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKworCWZyZWVfaXJxKElSUV9HUElPKFJEWV9HUElPX1BJTiksIHBhcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShncGlvcyk7IGkrKykKKwkJZ3Bpb19mcmVlKGdwaW9zW2ldKTsKKworCWZvciAoaSA9IERCMF9HUElPX1BJTjsgaSA8PSBEQjE1X0dQSU9fUElOOyBpKyspCisJCWdwaW9fZnJlZShpKTsKKworfQorCitzdGF0aWMgdTE2IGFtMzAwX2dldF9oZGIoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwl1MTYgcmVzID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gKERCMTVfR1BJT19QSU4gLSBEQjBfR1BJT19QSU4pIDsgaSsrKQorCQlyZXMgfD0gKGdwaW9fZ2V0X3ZhbHVlKERCMF9HUElPX1BJTiArIGkpKSA/ICgxIDw8IGkpIDogMDsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGFtMzAwX3NldF9oZGIoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IChEQjE1X0dQSU9fUElOIC0gREIwX0dQSU9fUElOKSA7IGkrKykKKwkJZ3Bpb19zZXRfdmFsdWUoREIwX0dQSU9fUElOICsgaSwgKGRhdGEgPj4gaSkgJiAweDAxKTsKK30KKworCitzdGF0aWMgdm9pZCBhbTMwMF9zZXRfY3RsKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHVuc2lnbmVkIGNoYXIgYml0LAorCQkJCXU4IHN0YXRlKQoreworCXN3aXRjaCAoYml0KSB7CisJY2FzZSBCU19DUzoKKwkJZ3Bpb19zZXRfdmFsdWUoQ1NfR1BJT19QSU4sIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBCU19EQzoKKwkJZ3Bpb19zZXRfdmFsdWUoRENfR1BJT19QSU4sIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBCU19XUjoKKwkJZ3Bpb19zZXRfdmFsdWUoV1JfR1BJT19QSU4sIHN0YXRlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGFtMzAwX2dldF9wYW5lbF90eXBlKHZvaWQpCit7CisJcmV0dXJuIHBhbmVsX3R5cGU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbTMwMF9oYW5kbGVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gZGV2X2lkOworCisJd2FrZV91cCgmcGFyLT53YWl0cSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGFtMzAwX3NldHVwX2lycShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJTyhSRFlfR1BJT19QSU4pLCBhbTMwMF9oYW5kbGVfaXJxLAorCQkJCUlSUUZfRElTQUJMRUR8SVJRRl9UUklHR0VSX1JJU0lORywKKwkJCQkiQU0zMDAiLCBwYXIpOworCWlmIChyZXQpCisJCWRldl9lcnIoJmFtMzAwX2RldmljZS0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnJvYWRzaGVldF9ib2FyZCBhbTMwMF9ib2FyZCA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5pbml0CQkJPSBhbTMwMF9pbml0X2JvYXJkLAorCS5jbGVhbnVwCQk9IGFtMzAwX2NsZWFudXAsCisJLnNldF9oZGIJCT0gYW0zMDBfc2V0X2hkYiwKKwkuZ2V0X2hkYgkJPSBhbTMwMF9nZXRfaGRiLAorCS5zZXRfY3RsCQk9IGFtMzAwX3NldF9jdGwsCisJLndhaXRfZm9yX3JkeQkJPSBhbTMwMF93YWl0X2V2ZW50LAorCS5nZXRfcGFuZWxfdHlwZQkJPSBhbTMwMF9nZXRfcGFuZWxfdHlwZSwKKwkuc2V0dXBfaXJxCQk9IGFtMzAwX3NldHVwX2lycSwKK307CisKK2ludCBfX2luaXQgYW0zMDBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShhbTMwMF9waW5fY29uZmlnKSk7CisKKwkvKiByZXF1ZXN0IG91ciBwbGF0Zm9ybSBpbmRlcGVuZGVudCBkcml2ZXIgKi8KKwlyZXF1ZXN0X21vZHVsZSgiYnJvYWRzaGVldGZiIik7CisKKwlhbTMwMF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImJyb2Fkc2hlZXRmYiIsIC0xKTsKKwlpZiAoIWFtMzAwX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiB0aGUgYW0zMDBfYm9hcmQgdGhhdCB3aWxsIGJlIHNlZW4gYnkgYnJvYWRzaGVldGZiIGlzIGEgY29weSAqLworCXBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShhbTMwMF9kZXZpY2UsICZhbTMwMF9ib2FyZCwKKwkJCQkJc2l6ZW9mKGFtMzAwX2JvYXJkKSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGFtMzAwX2RldmljZSk7CisKKwlpZiAocmV0KSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoYW0zMDBfZGV2aWNlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX3BhcmFtKHBhbmVsX3R5cGUsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwYW5lbF90eXBlLCAiU2VsZWN0IHRoZSBwYW5lbCB0eXBlOiA2LCA4LCA5NyIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImJvYXJkIGRyaXZlciBmb3IgYW0zMDAgZXBkIGtpdCIpOworTU9EVUxFX0FVVEhPUigiSmF5YSBLdW1hciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKaW5kZXggNDBiNzc0MC4uZGI1MmQyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJCWNsa2Rldl9hZGQoJmNsa3NbaV0pOwogfQogCi1pbnQgY2xrX2FkZF9hbGlhcyhjaGFyICphbGlhcywgc3RydWN0IGRldmljZSAqYWxpYXNfZGV2LCBjaGFyICppZCwKK2ludCBjbGtfYWRkX2FsaWFzKGNvbnN0IGNoYXIgKmFsaWFzLCBjb25zdCBjaGFyICphbGlhc19kZXZfbmFtZSwgY2hhciAqaWQsCiAJc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjbGsgKnIgPSBjbGtfZ2V0KGRldiwgaWQpOwpAQCAtOTYsNyArOTYsNyBAQAogCWlmICghcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsID0gY2xrZGV2X2FsbG9jKHIsIGFsaWFzLCBhbGlhc19kZXYgPyBkZXZfbmFtZShhbGlhc19kZXYpIDogTlVMTCk7CisJbCA9IGNsa2Rldl9hbGxvYyhyLCBhbGlhcywgYWxpYXNfZGV2X25hbWUpOwogCWNsa19wdXQocik7CiAJaWYgKCFsKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDRlOWM2MTMuLjU1OTliY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtNjksNiArNjksNiBAQAogI2VuZGlmCiAKIHZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7Ci1pbnQgY2xrX2FkZF9hbGlhcyhjaGFyICphbGlhcywgc3RydWN0IGRldmljZSAqYWxpYXNfZGV2LCBjaGFyICppZCwKK2ludCBjbGtfYWRkX2FsaWFzKGNvbnN0IGNoYXIgKmFsaWFzLCBjb25zdCBjaGFyICphbGlhc19uYW1lLCBjaGFyICppZCwKIAlzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMKaW5kZXggODNhNGNkZi4uMjUzZmQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNTUuYwpAQCAtMjIsMTAgKzIyLDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9iaXRmaWVsZC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggZGY4M2I5Ny4uMzQ1NzZiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy12MzAyMC5oPgogI2luY2x1ZGUgPHZpZGVvL21ieGZiLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jCmluZGV4IDMxNTZiMjUuLjc4NzNmYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2l0ODE1Mi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCmluZGV4IGQ5OWZkOWUuLjExN2I1NDM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogCkBAIC05Niw3ICs5NCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgY214MjcwX2RtOTAwMF9wbGF0ZGF0YSA9IHsKLQkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzMyQklUT05MWSwKKwkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzMyQklUT05MWSB8IERNOTAwMF9QTEFURl9OT19FRVBST00sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXgyeHhfZG05MDAwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYwppbmRleCBmZjBjNTc3Li5hOWY0OGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMwMC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgpAQCAtMTYyLDcgKzE2MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgY21feDMwMF9kbTkwMDBfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCisJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYmNmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEyNzAgYmFzZWQgQ29saWJyaSBtb2R1bGUKKyAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogR1BJTyBjb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEyNzBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzc4X25DU18yLAkvKiBFdGhlcm5ldCBDUyAqLworCUdQSU8xMTRfR1BJTywJLyogRXRoZXJuZXQgSVJRICovCit9OworCisvKgorICogTk9SIGZsYXNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjb2xpYnJpX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLm9mZnNldCA9CTB4MDAwMDAwMDAsCisJCS5zaXplID0JCTB4MDAwNDAwMDAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwgeworCQkubmFtZSA9CQkiS2VybmVsIiwKKwkJLm9mZnNldCA9CTB4MDAwNDAwMDAsCisJCS5zaXplID0JCTB4MDA0MDAwMDAsCisJCS5tYXNrX2ZsYWdzID0JMAorCX0sIHsKKwkJLm5hbWUgPQkJIlJvb3RmcyIsCisJCS5vZmZzZXQgPQkweDAwNDQwMDAwLAorCQkuc2l6ZSA9CQlNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncyA9CTAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjb2xpYnJpX2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS53aWR0aAkJPSA0LAkJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0gY29saWJyaV9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNvbGlicmlfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfcHhhMjcwX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGlicmlfcHhhMjcwX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YSA9IGNvbGlicmlfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZjb2xpYnJpX3B4YTI3MF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCisvKgorICogRE05MDAwIEV0aGVybmV0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IENPTElCUklfUFhBMjcwX0VUSF9QSFlTLAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyAzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyA0LAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyA0ICsgNTAwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gQ09MSUJSSV9QWEEyNzBfRVRIX0lSUSwKKwkJLmVuZAk9IENPTElCUklfUFhBMjcwX0VUSF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZG05MDAwIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRtOTAwMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGRtOTAwMF9yZXNvdXJjZXMsCit9OworI2VuZGlmIC8qIENPTkZJR19ETTkwMDAgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGlicmlfcHhhMjcwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjb2xpYnJpX3B4YTI3MF9mbGFzaF9kZXZpY2UsCisjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKQorCSZkbTkwMDBfZGV2aWNlLAorI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMjcwX3Bpbl9jb25maWcpKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTI3MF9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ09MSUJSSSwgIlRvcmFkZXggQ29saWJyaSBQWEEyNzAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEyNzBfaW5pdCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjMmVhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYworICoKKyAqICBTdXBwb3J0IGZvciBUb3JhZGV4IFBYQTMwMC8zMTAgYmFzZWQgQ29saWJyaSBtb2R1bGUKKyAqCisgKiAgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqICBNYXR0aGlhcyBNZWllciA8bWF0dGhpYXMuai5tZWllckBnbXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bmV0L2F4ODg3OTYuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL29oY2kuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfQVg4ODc5NikKKyNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRX0dQSU8JbWZwX3RvX2dwaW8oR1BJTzI2X0dQSU8pCisvKgorICogQXNpeCBBWDg4Nzk2IEV0aGVybmV0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXhfcGxhdF9kYXRhIGNvbGlicmlfYXNpeF9wbGF0ZGF0YSA9IHsKKwkuZmxhZ3MJCT0gQVhGTEdfTUFDX0ZST01ERVYsCisJLndvcmRsZW5ndGgJPSAyCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfYXNpeF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUFhBM3h4X0NTMl9QSFlTLAorCQkuZW5kICAgPSBQWEEzeHhfQ1MyX1BIWVMgKyAoMHgyMCAqIDIpIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwKKwkJLmVuZCAgID0gZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFzaXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJheDg4Nzk2IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGNvbGlicmlfYXNpeF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gY29saWJyaV9hc2l4X3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb2xpYnJpX2FzaXhfcGxhdGRhdGEKKwl9Cit9OworCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzAwX2V0aF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMV9uQ1MyLAkJCS8qIEFYODg3OTYgY2hpcCBzZWxlY3QgKi8KKwlHUElPMjZfR1BJTyB8IE1GUF9QVUxMX0hJR0gJLyogQVg4ODc5NiBJUlEgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMwMF9pbml0X2V0aCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX2V0aF9waW5fY29uZmlnKSk7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFzaXhfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXRfZXRoKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX0FYODg3OTYgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMDBfdXNiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8wXzJfVVNCSF9QRU4sCisJR1BJTzFfMl9VU0JIX1BXUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhMzAwX29oY2lfaW5mbyA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX0dMT0JBTF9NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKK307CisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX3VzYl9waW5fY29uZmlnKSk7CisJcHhhX3NldF9vaGNpX2luZm8oJmNvbGlicmlfcHhhMzAwX29oY2lfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19VU0JfT0hDSV9IQ0QgfHwgQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUgKi8KKworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9tbWNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzdfTU1DMV9DTEssCisJR1BJTzE0X01NQzFfQ01ELAorCUdQSU8zX01NQzFfREFUMCwKKwlHUElPNF9NTUMxX0RBVDEsCisJR1BJTzVfTU1DMV9EQVQyLAorCUdQSU82X01NQzFfREFUMywKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzAwX2xjZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNTRfTENEX0xERF8wLAorCUdQSU81NV9MQ0RfTEREXzEsCisJR1BJTzU2X0xDRF9MRERfMiwKKwlHUElPNTdfTENEX0xERF8zLAorCUdQSU81OF9MQ0RfTEREXzQsCisJR1BJTzU5X0xDRF9MRERfNSwKKwlHUElPNjBfTENEX0xERF82LAorCUdQSU82MV9MQ0RfTEREXzcsCisJR1BJTzYyX0xDRF9MRERfOCwKKwlHUElPNjNfTENEX0xERF85LAorCUdQSU82NF9MQ0RfTEREXzEwLAorCUdQSU82NV9MQ0RfTEREXzExLAorCUdQSU82Nl9MQ0RfTEREXzEyLAorCUdQSU82N19MQ0RfTEREXzEzLAorCUdQSU82OF9MQ0RfTEREXzE0LAorCUdQSU82OV9MQ0RfTEREXzE1LAorCUdQSU83MF9MQ0RfTEREXzE2LAorCUdQSU83MV9MQ0RfTEREXzE3LAorCUdQSU82Ml9MQ0RfQ1NfTiwKKwlHUElPNzJfTENEX0ZDTEssCisJR1BJTzczX0xDRF9MQ0xLLAorCUdQSU83NF9MQ0RfUENMSywKKwlHUElPNzVfTENEX0JJQVMsCisJR1BJTzc2X0xDRF9WU1lOQywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMwMF9pbml0X2xjZCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX2xjZF9waW5fY29uZmlnKSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMDBfaW5pdF9sY2Qodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfRkJfUFhBIHx8IENPTkZJR19GQl9QWEFfTU9EVUxFICovCisKKyNpZiBkZWZpbmVkKFNORF9BQzk3X0NPREVDKSB8fCBkZWZpbmVkKFNORF9BQzk3X0NPREVDX01PRFVMRSkKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMTBfYWM5N19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMjRfQUM5N19TWVNDTEssCisJR1BJTzIzX0FDOTdfbkFDUkVTRVQsCisJR1BJTzI1X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMjdfQUM5N19TREFUQV9PVVQsCisJR1BJTzI4X0FDOTdfU1lOQywKKwlHUElPMjlfQUM5N19CSVRDTEsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KHZvaWQpCit7CisJLyogbm8gQUM5NyBjb2RlYyBvbiBDb2xpYnJpIFBYQTMwMCAqLworCWlmICghY3B1X2lzX3B4YTMxMCgpKQorCQlyZXR1cm47CisKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMxMF9hYzk3X3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KHZvaWQpIHt9CisjZW5kaWYKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzMDBfaW5pdCh2b2lkKQoreworCWNvbGlicmlfcHhhMzAwX2luaXRfZXRoKCk7CisJY29saWJyaV9weGEzMDBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzMDBfaW5pdF9sY2QoKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPMzlfR1BJTykpOworCWNvbGlicmlfcHhhMzEwX2luaXRfYWM5NygpOworCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX21tY19waW5fY29uZmlnKSwKKwkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xMykpOworfQorCitNQUNISU5FX1NUQVJUKENPTElCUkkzMDAsICJUb3JhZGV4IENvbGlicmkgUFhBMzAwIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQ09MSUJSSV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLmluaXRfbWFjaGluZQk9IGNvbGlicmlfcHhhMzAwX2luaXQsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Yjc0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEzMjAvMzEwIGJhc2VkIENvbGlicmkgbW9kdWxlCisgKgorICogIERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiAgTWF0dGhpYXMgTWVpZXIgPG1hdHRoaWFzLmoubWVpZXJAZ214Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfQVg4ODc5NikKKyNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRX0dQSU8JbWZwX3RvX2dwaW8oR1BJTzM2X0dQSU8pCisKKy8qCisgKiBBc2l4IEFYODg3OTYgRXRoZXJuZXQKKyAqLworc3RhdGljIHN0cnVjdCBheF9wbGF0X2RhdGEgY29saWJyaV9hc2l4X3BsYXRkYXRhID0geworCS5mbGFncwkJPSBBWEZMR19NQUNfRlJPTURFViwKKwkud29yZGxlbmd0aAk9IDIKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29saWJyaV9hc2l4X3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBQWEEzeHhfQ1MyX1BIWVMsCisJCS5lbmQgICA9IFBYQTN4eF9DUzJfUEhZUyArICgweDIwICogMikgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLAorCQkuZW5kICAgPSBncGlvX3RvX2lycShDT0xJQlJJX0VUSF9JUlFfR1BJTyksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXNpeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF4ODg3OTYiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzIAk9IEFSUkFZX1NJWkUoY29saWJyaV9hc2l4X3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBjb2xpYnJpX2FzaXhfcmVzb3VyY2UsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmNvbGlicmlfYXNpeF9wbGF0ZGF0YQorCX0KK307CisKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMjBfZXRoX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8zX25DUzIsCQkJLyogQVg4ODc5NiBjaGlwIHNlbGVjdCAqLworCUdQSU8zNl9HUElPIHwgTUZQX1BVTExfSElHSAkvKiBBWDg4Nzk2IElSUSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfZXRoKHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfZXRoX3Bpbl9jb25maWcpKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXNpeF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF9ldGgodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfQVg4ODc5NiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91c2JfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzJfMl9VU0JIX1BFTiwKKwlHUElPM18yX1VTQkhfUFdSLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEzMjBfb2hjaV9pbmZvID0geworCS5wb3J0X21vZGUJPSBQTU1fR0xPQkFMX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUMSB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfdXNiX3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X29oY2lfaW5mbygmY29saWJyaV9weGEzMjBfb2hjaV9pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX1VTQl9PSENJX0hDRCB8fCBDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSAqLworCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMjJfTU1DMV9DTEssCisJR1BJTzIzX01NQzFfQ01ELAorCUdQSU8xOF9NTUMxX0RBVDAsCisJR1BJTzE5X01NQzFfREFUMSwKKwlHUElPMjBfTU1DMV9EQVQyLAorCUdQSU8yMV9NTUMxX0RBVDMKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2xjZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNl8yX0xDRF9MRERfMCwKKwlHUElPN18yX0xDRF9MRERfMSwKKwlHUElPOF8yX0xDRF9MRERfMiwKKwlHUElPOV8yX0xDRF9MRERfMywKKwlHUElPMTBfMl9MQ0RfTEREXzQsCisJR1BJTzExXzJfTENEX0xERF81LAorCUdQSU8xMl8yX0xDRF9MRERfNiwKKwlHUElPMTNfMl9MQ0RfTEREXzcsCisJR1BJTzYzX0xDRF9MRERfOCwKKwlHUElPNjRfTENEX0xERF85LAorCUdQSU82NV9MQ0RfTEREXzEwLAorCUdQSU82Nl9MQ0RfTEREXzExLAorCUdQSU82N19MQ0RfTEREXzEyLAorCUdQSU82OF9MQ0RfTEREXzEzLAorCUdQSU82OV9MQ0RfTEREXzE0LAorCUdQSU83MF9MQ0RfTEREXzE1LAorCUdQSU83MV9MQ0RfTEREXzE2LAorCUdQSU83Ml9MQ0RfTEREXzE3LAorCUdQSU83M19MQ0RfQ1NfTiwKKwlHUElPNzRfTENEX1ZTWU5DLAorCUdQSU8xNF8yX0xDRF9GQ0xLLAorCUdQSU8xNV8yX0xDRF9MQ0xLLAorCUdQSU8xNl8yX0xDRF9QQ0xLLAorCUdQSU8xN18yX0xDRF9CSUFTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfbGNkX3Bpbl9jb25maWcpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9sY2Qodm9pZCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTTkRfQUM5N19DT0RFQykgfHwgZGVmaW5lZChTTkRfQUM5N19DT0RFQ19NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2FjOTdfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzM0X0FDOTdfU1lTQ0xLLAorCUdQSU8zNV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzM3X0FDOTdfU0RBVEFfT1VULAorCUdQSU8zOF9BQzk3X1NZTkMsCisJR1BJTzM5X0FDOTdfQklUQ0xLLAorCUdQSU80MF9BQzk3X25BQ1JFU0VUCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfYWM5Nyh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX2FjOTdfcGluX2NvbmZpZykpOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkge30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0KHZvaWQpCit7CisJY29saWJyaV9weGEzMjBfaW5pdF9ldGgoKTsKKwljb2xpYnJpX3B4YTMyMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTMyMF9pbml0X2xjZCgpOworCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU80OV9HUElPKSk7CisJY29saWJyaV9weGEzMjBfaW5pdF9hYzk3KCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9tbWMoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfbW1jX3Bpbl9jb25maWcpLAorCQkJCW1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzI4KSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ09MSUJSSTMyMCwgIlRvcmFkZXggQ29saWJyaSBQWEEzMjAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEzMjBfaW5pdCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMGFmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYworICoKKyAqICBDb21tb24gZnVuY3Rpb25zIGZvciBhbGwgVG9yYWRleCBQWEEzeHggbW9kdWxlcworICoKKyAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKK3N0YXRpYyBpbnQgbW1jX2RldGVjdF9waW47CisKK3N0YXRpYyBpbnQgY29saWJyaV9weGEzeHhfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIGlycV9oYW5kbGVyX3QgY29saWJyaV9tbWNfZGV0ZWN0X2ludCwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QobW1jX2RldGVjdF9waW4sICJtbWMgY2FyZCBkZXRlY3QiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQobW1jX2RldGVjdF9waW4pOworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKG1tY19kZXRlY3RfcGluKSwgY29saWJyaV9tbWNfZGV0ZWN0X2ludCwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkgeworCQlncGlvX2ZyZWUobW1jX2RldGVjdF9waW4pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEobW1jX2RldGVjdF9waW4sIGRhdGEpOworCWdwaW9fZnJlZShncGlvX3RvX2lycShtbWNfZGV0ZWN0X3BpbikpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhM3h4X21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5kZXRlY3RfZGVsYXkJPSAyMCwKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuaW5pdAkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfaW5pdCwKKwkuZXhpdAkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKK307CisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhM3h4X2luaXRfbW1jKG1mcF9jZmdfdCAqcGlucywgaW50IGxlbiwgaW50IGRldGVjdF9waW4pCit7CisJcHhhM3h4X21mcF9jb25maWcocGlucywgbGVuKTsKKwltbWNfZGV0ZWN0X3BpbiA9IGRldGVjdF9waW47CisJcHhhX3NldF9tY2lfaW5mbygmY29saWJyaV9weGEzeHhfbWNpX3BsYXRmb3JtX2RhdGEpOworfQorI2VuZGlmIC8qIENPTkZJR19NTUNfUFhBIHx8IENPTkZJR19NTUNfUFhBX01PRFVMRSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQorc3RhdGljIGludCBsY2RfYmxfcGluOworCisvKgorICogTENEIHBhbmVsIChTaGFycCBMUTA0M1QzRFgwMikKKyAqLworc3RhdGljIHZvaWQgY29saWJyaV9sY2RfYmFja2xpZ2h0KGludCBvbikKK3sKKwlncGlvX3NldF92YWx1ZShsY2RfYmxfcGluLCAhIW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gc2hhcnBfbHE0M19tb2RlID0geworCS5waXhjbG9jawk9IDEwMTkzNiwKKwkueHJlcwkJPSA0ODAsCisJLnlyZXMJCT0gMjcyLAorCS5icHAJCT0gMzIsCisJLmRlcHRoCQk9IDE4LAorCS5oc3luY19sZW4gICAgICA9IDQxLAorCS5sZWZ0X21hcmdpbiAgICA9IDIsCisJLnJpZ2h0X21hcmdpbiAgID0gMiwKKwkudnN5bmNfbGVuICAgICAgPSAxMCwKKwkudXBwZXJfbWFyZ2luICAgPSAyLAorCS5sb3dlcl9tYXJnaW4gICA9IDIsCisJLnN5bmMJICAgCT0gMCwKKwkuY21hcF9ncmV5c2NhbGUgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc2hhcnBfbHE0M19pbmZvID0geworCS5tb2RlcwkJPSAmc2hhcnBfbHE0M19tb2RlLAorCS5udW1fbW9kZXMJPSAxLAorCS5jbWFwX2ludmVyc2UJPSAwLAorCS5jbWFwX3N0YXRpYwk9IDAsCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xOEJQUCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyID0gY29saWJyaV9sY2RfYmFja2xpZ2h0LAorfTsKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzeHhfaW5pdF9sY2QoaW50IGJsX3BpbikKK3sKKwlsY2RfYmxfcGluID0gYmxfcGluOworCWdwaW9fcmVxdWVzdChibF9waW4sICJsY2QgYmFja2xpZ2h0Iik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGJsX3BpbiwgMCk7CisJc2V0X3B4YV9mYl9pbmZvKCZzaGFycF9scTQzX2luZm8pOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmkuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0NzM2Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMKLSAqCi0gKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEyN3ggYmFzZWQgQ29saWJyaSBtb2R1bGUKLSAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGlicmlfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JR1BJTzc4X25DU18yLAkvKiBFdGhlcm5ldCBDUyAqLwotCUdQSU8xMTRfR1BJTywJLyogRXRoZXJuZXQgSVJRICovCi19OwotCi0vKgotICogRmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNvbGlicmlfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0ID0JMHgwMDAwMDAwMCwKLQkJLnNpemUgPQkJMHgwMDA0MDAwMCwKLQkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7Ci0JCS5uYW1lID0JCSJLZXJuZWwiLAotCQkub2Zmc2V0ID0JMHgwMDA0MDAwMCwKLQkJLnNpemUgPQkJMHgwMDQwMDAwMCwKLQkJLm1hc2tfZmxhZ3MgPQkwCi0JfSwgewotCQkubmFtZSA9CQkiUm9vdGZzIiwKLQkJLm9mZnNldCA9CTB4MDA0NDAwMDAsCi0JCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCi0JCS5tYXNrX2ZsYWdzID0JMAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNvbGlicmlfZmxhc2hfZGF0YVtdID0gewotCXsKLQkJLndpZHRoCQk9IDQsCQkJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCi0JCS5wYXJ0cwkJPSBjb2xpYnJpX3BhcnRpdGlvbnMsCi0JCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY29saWJyaV9wYXJ0aXRpb25zKQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAotCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAk9IDAsCi0JLmRldiAJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gY29saWJyaV9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLS8qCi0gKiBETTkwMDAgRXRoZXJuZXQKLSAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX0VUSF9QSFlTLAotCQkuZW5kCT0gQ09MSUJSSV9FVEhfUEhZUyArIDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX0VUSF9QSFlTICsgNCwKLQkJLmVuZAk9IENPTElCUklfRVRIX1BIWVMgKyA0ICsgNTAwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gQ09MSUJSSV9FVEhfSVJRLAotCQkuZW5kCT0gQ09MSUJSSV9FVEhfSVJRLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImRtOTAwMCIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGlicmlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmZsYXNoX2RldmljZSwKLQkmZG05MDAwX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX2luaXQodm9pZCkKLXsKLQlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3Bpbl9jb25maWcpKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGNvbGlicmlfZGV2aWNlcywgQVJSQVlfU0laRShjb2xpYnJpX2RldmljZXMpKTsKLX0KLQotTUFDSElORV9TVEFSVChDT0xJQlJJLCAiVG9yYWRleCBDb2xpYnJpIFBYQTI3eCIpCi0JLnBoeXNfaW8JPSAweDQwMDAwMDAwLAotCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IENPTElCUklfU0RSQU1fQkFTRSArIDB4MTAwLAotCS5pbml0X21hY2hpbmUJPSBjb2xpYnJpX2luaXQsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAotCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKLQkudGltZXIJCT0gJnB4YV90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCBhOGQ5MWI2Li5jZGYyMWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTQxLDkgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CkBAIC02MzcsMTYgKzYzNSwxNiBAQAogCQkvKiBHcmVlbiBMRUQgb2ZmIHRlbGxzIHRoZSBib290bG9hZGVyIHRvIGhhbHQgKi8KIAkJZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19MRURfR1JFRU4sIDApOwogCi0JYXJtX21hY2hpbmVfcmVzdGFydCgnaCcpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgY29yZ2lfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBjb3JnaV9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQogCQkvKiBHcmVlbiBMRUQgb24gdGVsbHMgdGhlIGJvb3Rsb2FkZXIgdG8gcmVib290ICovCiAJCWdwaW9fc2V0X3ZhbHVlKENPUkdJX0dQSU9fTEVEX0dSRUVOLCAxKTsKIAotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJywgY21kKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNvcmdpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKaW5kZXggNDExNjA3Yi4uZDliOTYzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfcG0uYwppbmRleCBlMzUyNTkwLi43ZjA0YjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3BtLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCmluZGV4IDhlMmYyMjEuLmE1ZWU3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvc3NwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKaW5kZXggNzcxZGQ0ZS4uMDgzYTFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCkBAIC0zNyw4ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCmluZGV4IDk2OGM4MzAuLjY3ZjM0YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcwMS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyYTI5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcwMS5jCkBAIC0wLDAgKzEsNjEgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNzYjcwMV9idXR0b25zW10gPSB7CisJeworCQkuY29kZQk9IDB4NywKKwkJLmdwaW8JPSAxLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJCS5kZXNjCT0gIlNXMiIsCisJCS50eXBlCT0gRVZfU1csCisJCS53YWtldXAgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNzYjcwMV9ncGlvX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucyA9IGNzYjcwMV9idXR0b25zLAorCS5uYnV0dG9ucyA9IEFSUkFZX1NJWkUoY3NiNzAxX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjc2I3MDFfbGVkc1tdID0geworCXsKKwkJLm5hbWUJPSAiY3NiNzAxOnllbGxvdzpoZWFydGJlYXQiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCT0gMTEsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiNzAxX2dwaW9fa2V5cyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmNzYjcwMV9ncGlvX2tleXNfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBjc2I3MDFfbGVkc19ncGlvX2RhdGEgPSB7CisJLmxlZHMJCT0gY3NiNzAxX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShjc2I3MDFfbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2I3MDFfbGVkc19ncGlvID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmY3NiNzAxX2xlZHNfZ3Bpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjc2I3MDFfZ3Bpb19rZXlzLAorCSZjc2I3MDFfbGVkc19ncGlvLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3NiNzAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK21vZHVsZV9pbml0KGNzYjcwMV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI4OWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgQ29nZW50IENTQjcyNgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvc201MDEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gvY3NiNzI2Lmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBuL2E6IDIsIDUsIDYsIDcsIDgsIDIzLCAyNCwgMjUsIDI2LCAyNywgODcsIDg4LCA4OSwKKyAqIG51OiA1OCAtLSA3NywgOTAsIDkxLCA5MywgMTAyLCAxMDUtMTA4LCAxMTQtMTE2LAorICogWFhYOiAyMSwKKyAqIFhYWDogNzkgQ1NfMyBmb3IgTEFOOTIxNSBvciBQU0tUU0VMIG9uIFIyLCBSMworICogWFhYOiAzMyBDU181IGZvciBMQU45MjE1IG9uIFIxCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NiNzI2X3Bpbl9jb25maWdbXSA9IHsKKwlHUElPNzhfbkNTXzIsIC8qIEVYUF9DUyAqLworCUdQSU83OV9uQ1NfMywgLyogU01TQzkyMTUgKi8KKwlHUElPODBfbkNTXzQsIC8qIFNNNTAxICovCisKKwlHUElPNTJfR1BJTywgLyogI1NNU0M5MjUxIGludCAqLworCUdQSU81M19HUElPLCAvKiBTTTUwMSBpbnQgKi8KKworCUdQSU8xX0dQSU8sIC8qIEdQSU8wICovCisJR1BJTzExX0dQSU8sIC8qIEdQSU8xICovCisJR1BJTzlfR1BJTywgLyogR1BJTzIgKi8KKwlHUElPMTBfR1BJTywgLyogR1BJTzMgKi8KKwlHUElPMTZfUFdNMF9PVVQsIC8qIG9yIEdQSU80ICovCisJR1BJTzE3X1BXTTFfT1VULCAvKiBvciBHUElPNSAqLworCUdQSU85NF9HUElPLCAvKiBHUElPNiAqLworCUdQSU85NV9HUElPLCAvKiBHUElPNyAqLworCUdQSU85Nl9HUElPLCAvKiBHUElPOCAqLworCUdQSU85N19HUElPLCAvKiBHUElPOSAqLworCUdQSU8xNV9HUElPLCAvKiBFWFBfSVJRICovCisJR1BJTzE4X1JEWSwgLyogRVhQX1dBSVQgKi8KKworCUdQSU8wX0dQSU8sIC8qIFBXUl9JTlQgKi8KKwlHUElPMTA0X0dQSU8sIC8qIFBXUl9PRkYgKi8KKworCUdQSU8xMl9HUElPLCAvKiB0b3VjaCBpcnEgKi8KKworCUdQSU8xM19TU1AyX1RYRCwKKwlHUElPMTRfU1NQMl9TRlJNLAorCU1GUF9DRkdfT1VUKEdQSU8xOSwgQUYxLCBEUklWRV9MT1cpLC8qIFNTUDJfU1lTQ0xLICovCisJR1BJTzIyX1NTUDJfU0NMSywKKworCUdQSU84MV9TU1AzX1RYRCwKKwlHUElPODJfU1NQM19SWEQsCisJR1BJTzgzX1NTUDNfU0ZSTSwKKwlHUElPODRfU1NQM19TQ0xLLAorCisJR1BJTzIwX0dQSU8sIC8qIFNESU8gaW50ICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzEwMF9HUElPLCAvKiBTRCBDRCAqLworCUdQSU8xMDFfR1BJTywgLyogU0QgV1AgKi8KKworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCUdQSU8xMTNfQUM5N19uUkVTRVQsCisKKwlHUElPMzRfRkZVQVJUX1JYRCwKKwlHUElPMzVfRkZVQVJUX0NUUywKKwlHUElPMzZfRkZVQVJUX0RDRCwKKwlHUElPMzdfRkZVQVJUX0RTUiwKKwlHUElPMzhfRkZVQVJUX1JJLAorCUdQSU8zOV9GRlVBUlRfVFhELAorCUdQSU80MF9GRlVBUlRfRFRSLAorCUdQSU80MV9GRlVBUlRfUlRTLAorCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwlHUElPNDZfU1RVQVJUX1JYRCwKKwlHUElPNDdfU1RVQVJUX1RYRCwKKworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzU0X25QQ0VfMiwKKwlHUElPNTVfblBSRUcsCisJR1BJTzU2X25QV0FJVCwKKwlHUElPNTdfbklPSVMxNiwgLyogbWF5YmUgdW51c2VkICovCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPOThfR1BJTywgLyogQ0YgSVJRICovCisJR1BJTzk5X0dQSU8sIC8qIENGIENEICovCisJR1BJTzEwM19HUElPLCAvKiBSZXNldCAqLworCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X21jaV9kYXRhOworCitzdGF0aWMgaW50IGNzYjcyNl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCWlycV9oYW5kbGVyX3QgZGV0ZWN0LCB2b2lkICpkYXRhKQoreworCWludCBlcnI7CisKKwljc2I3MjZfbWNpX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MDApOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QsICJNTUMgZGV0ZWN0Iik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZGV0X3JlcTsKKworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RldF9kaXI7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoQ1NCNzI2X0dQSU9fTU1DX1JPLCAiTU1DIHJvIik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcm9fcmVxOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yb19kaXI7CisKKwllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGV0ZWN0LAorCQkJSVJRRl9ESVNBQkxFRCwgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2lycTsKKworCXJldHVybiAwOworCitlcnJfaXJxOgorZXJyX3JvX2RpcjoKKwlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKK2Vycl9yb19yZXE6CitlcnJfZGV0X2RpcjoKKwlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCk7CitlcnJfZGV0X3JlcToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNzYjcyNl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKK30KKworc3RhdGljIHZvaWQgY3NiNzI2X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGF0YSk7CisJZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7CisJZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNzYjcyNl9tY2kgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0CQk9IGNzYjcyNl9tY2lfaW5pdCwKKwkuZ2V0X3JvCQk9IGNzYjcyNl9tY2lfZ2V0X3JvLAorCS8qIEZJWE1FIHNldHBvd2VyICovCisJLmV4aXQJCT0gY3NiNzI2X21jaV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX05QU19NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBOT19PQ19QUk9URUNUSU9OLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNzYjcyNl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gQ1NCNzI2X0ZMQVNIX3VNT04sCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiNzI2X2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGNzYjcyNl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiNzI2X2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2I3MjZfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgICAgICAgICAgPSBQWEFfQ1MwX1BIWVMsCisJCS5lbmQgICAgICAgICAgICA9IFBYQV9DUzBfUEhZUyArIENTQjcyNl9GTEFTSF9TSVpFIC0gMSAsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYjcyNl9mbGFzaCA9IHsKKwkubmFtZSAgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmY3NiNzI2X2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgICAgICAgPSBjc2I3MjZfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoY3NiNzI2X2ZsYXNoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYjcyNl9zbTUwMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgICAgICAgICA9IFBYQV9DUzRfUEhZUywKKwkJLmVuZCAgICAgICAgICAgID0gUFhBX0NTNF9QSFlTICsgU1pfOE0gLSAxLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUJCT0gInNtNTAxLWxvY2FsbWVtIiwKKwl9LAorCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gUFhBX0NTNF9QSFlTICsgU1pfNjRNIC0gU1pfMk0sCisJCS5lbmQgICAgICAgICAgICA9IFBYQV9DUzRfUEhZUyArIFNaXzY0TSAtIDEsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZQkJPSAic201MDEtcmVncyIsCisJfSwKKwl7CisJCS5zdGFydAkJPSBDU0I3MjZfSVJRX1NNNTAxLAorCQkuZW5kCQk9IENTQjcyNl9JUlFfU001MDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbTUwMV9pbml0ZGF0YSBjc2I3MjZfc201MDFfaW5pdGRhdGEgPSB7CisvKgkuZGV2aWNlcwk9IFNNNTAxX1VTRV9VU0JfSE9TVCwgKi8KKwkuZGV2aWNlcwk9IFNNNTAxX1VTRV9VU0JfSE9TVCB8IFNNNTAxX1VTRV9VQVJUMCB8IFNNNTAxX1VTRV9VQVJUMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc201MDFfcGxhdGRhdGEgY3NiNzI2X3NtNTAxX3BsYXRkYXRhID0geworCS5pbml0CQk9ICZjc2I3MjZfc201MDFfaW5pdGRhdGEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2I3MjZfc201MDEgPSB7CisJLm5hbWUJCT0gInNtNTAxIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiNzI2X3NtNTAxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY3NiNzI2X3NtNTAxX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY3NiNzI2X3NtNTAxX3BsYXRkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYjcyNl9sYW5fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBQWEFfQ1MzX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MzX1BIWVMgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gQ1NCNzI2X0lSUV9MQU4sCisJCS5lbmQJPSBDU0I3MjZfSVJRX0xBTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYjcyNl9sYW4gPSB7CisJLm5hbWUJCT0gInNtYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiNzI2X2xhbl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNzYjcyNl9sYW5fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjc2I3MjZfZmxhc2gsCisJJmNzYjcyNl9zbTUwMSwKKwkmY3NiNzI2X2xhbiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjc2I3MjZfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNzYjcyNl9waW5fY29uZmlnKSk7CisvKglNU0MxID0gMHg3ZmZjM2ZmYzsgKi8vKiBMQU45MjE1L0VYUF9DUyAqLworLyoJTVNDMiA9IDB4MDY2OTdmZjQ7ICovLyogbm9uZS9TTTUwMSAqLworCU1TQzIgPSAoTVNDMiAmIH4weGZmZmYpIHwgMHg3ZmY0OyAvKiBTTTUwMSAqLworCisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOworCXB4YV9zZXRfbWNpX2luZm8oJmNzYjcyNl9tY2kpOworCXB4YV9zZXRfb2hjaV9pbmZvKCZjc2I3MjZfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKENTQjcyNiwgIkNvZ2VudCBDU0I3MjYiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGNzYjcyNl9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IGUxNmY4ZTMuLmQyNDVlNTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZTE3ZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYwotICoKLSAqICBQWEEgRE1BIHJlZ2lzdHJhdGlvbiBhbmQgSVJRIGRpc3BhdGNoaW5nCi0gKgotICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQotICogIENyZWF0ZWQ6CU5vdiAxNSwgMjAwMQotICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2RtYS5oPgotCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotCi1zdHJ1Y3QgZG1hX2NoYW5uZWwgewotCWNoYXIgKm5hbWU7Ci0JcHhhX2RtYV9wcmlvIHByaW87Ci0Jdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKik7Ci0Jdm9pZCAqZGF0YTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgKmRtYV9jaGFubmVsczsKLXN0YXRpYyBpbnQgbnVtX2RtYV9jaGFubmVsczsKLQotaW50IHB4YV9yZXF1ZXN0X2RtYSAoY2hhciAqbmFtZSwgcHhhX2RtYV9wcmlvIHByaW8sCi0JCQkgdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCi0JCSAJIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgZm91bmQgPSAwOwotCi0JLyogYmFzaWMgc2FuaXR5IGNoZWNrcyAqLwotCWlmICghbmFtZSB8fCAhaXJxX2hhbmRsZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JZG8gewotCQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bV9kbWFfY2hhbm5lbHM7IGkrKykgewotCQkJaWYgKChkbWFfY2hhbm5lbHNbaV0ucHJpbyA9PSBwcmlvKSAmJgotCQkJICAgICFkbWFfY2hhbm5lbHNbaV0ubmFtZSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiBpZiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgYSBoaWVyIHByaW9yaXR5ICovCi0JfSB3aGlsZSAoIWZvdW5kICYmIHByaW8tLSk7Ci0KLQlpZiAoZm91bmQpIHsKLQkJRENTUihpKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKLQkJZG1hX2NoYW5uZWxzW2ldLm5hbWUgPSBuYW1lOwotCQlkbWFfY2hhbm5lbHNbaV0uaXJxX2hhbmRsZXIgPSBpcnFfaGFuZGxlcjsKLQkJZG1hX2NoYW5uZWxzW2ldLmRhdGEgPSBkYXRhOwotCX0gZWxzZSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBtb3JlIGF2YWlsYWJsZSBETUEgY2hhbm5lbHMgZm9yICVzXG4iLCBuYW1lKTsKLQkJaSA9IC1FTk9ERVY7Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBpOwotfQotCi12b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lKSB7Ci0JCXByaW50ayAoS0VSTl9DUklUCi0JCQkiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKLQkJCV9fZnVuY19fLCBkbWFfY2gpOwotCQlyZXR1cm47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCURDU1IoZG1hX2NoKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKLQlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBpLCBkaW50ID0gRElOVDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fZG1hX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRpbnQgJiAoMSA8PCBpKSkgewotCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKLQkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7Ci0JCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6Ci0JCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCi0JCQkJICovCi0JCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOwotCQkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1pbnQgX19pbml0IHB4YV9pbml0X2RtYShpbnQgbnVtX2NoKQotewotCWludCBpLCByZXQ7Ci0KLQlkbWFfY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hX2NoYW5uZWwpICogbnVtX2NoLCBHRlBfS0VSTkVMKTsKLQlpZiAoZG1hX2NoYW5uZWxzID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogZG1hIGNoYW5uZWwgcHJpb3JpdGllcyBvbiBweGEyeHggcHJvY2Vzc29yczoKLQkgKiBjaCAwIC0gMywgIDE2IC0gMTkgIDwtLT4gKDApIERNQV9QUklPX0hJR0gKLQkgKiBjaCA0IC0gNywgIDIwIC0gMjMgIDwtLT4gKDEpIERNQV9QUklPX01FRElVTQotCSAqIGNoIDggLSAxNSwgMjQgLSAzMSAgPC0tPiAoMikgRE1BX1BSSU9fTE9XCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7Ci0JCURDU1IoaSkgPSAwOwotCQlkbWFfY2hhbm5lbHNbaV0ucHJpbyA9IG1pbigoaSAmIDB4ZikgPj4gMiwgRE1BX1BSSU9fTE9XKTsKLQl9Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfRE1BLCBkbWFfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJETUEiLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayAoS0VSTl9DUklUICJXb3chICBDYW4ndCByZWdpc3RlciBJUlEgZm9yIERNQVxuIik7Ci0JCWtmcmVlKGRtYV9jaGFubmVscyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbnVtX2RtYV9jaGFubmVscyA9IG51bV9jaDsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwotRVhQT1JUX1NZTUJPTChweGFfZnJlZV9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jCmluZGV4IDFiZDdmNzQuLjc0ZDNmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lMzMwLmMKQEAgLTIwLDkgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYwppbmRleCBlZGNkOWQ1Li4wODAwMzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lMzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTM1MC5jCkBAIC0yMSw5ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYwppbmRleCA3N2JiOGUyLi5lZDljMGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTQwMC5jCkBAIC0yMiw5ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwppbmRleCA2ZDQ4ZTAwLi4wNzUwMGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCkBAIC0yNCw5ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgpAQCAtMTM1LDYgKzEzMywxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPMTZfR1BJTywgIC8qIEFDOTcgY29kZWMgQVZERDIgc3VwcGx5IChhbmFsb2d1ZSBwb3dlcikgKi8KKwlHUElPNDBfR1BJTywgIC8qIE1pYyBhbXAgcG93ZXIgKi8KKwlHUElPNDFfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCkBAIC0xODksNyArMTkyLDcgQEAKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlNzQwX3Bpbl9jb25maWcpKTsKIAllc2VyaWVzX3JlZ2lzdGVyX2Nsa3MoKTsKLQljbGtfYWRkX2FsaWFzKCJDTEtfQ0s0OE0iLCAmZTc0MF90N2w2NnhiX2RldmljZS5kZXYsCisJY2xrX2FkZF9hbGlhcygiQ0xLX0NLNDhNIiwgZTc0MF90N2w2NnhiX2RldmljZS5uYW1lLAogCQkJIlVEQ0NMSyIsICZweGEyNXhfZGV2aWNlX3VkYy5kZXYpLAogCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwppbmRleCBiZTFhYjhlLi42MTI2YzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCkBAIC0yMyw5ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgpAQCAtMTMzLDYgKzEzMSwxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPNF9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCUdQSU83X0dQSU8sICAvKiBTcGVha2VyIGFtcCBwb3dlciAqLworCUdQSU8zN19HUElPLCAvKiBIZWFkcGhvbmUgZGV0ZWN0ICovCisKIAkvKiBQQyBDYXJkICovCiAJR1BJTzhfR1BJTywgICAvKiBDRDAgKi8KIAlHUElPNDRfR1BJTywgIC8qIENEMSAqLwpAQCAtMTkwLDcgKzE5Myw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZTc1MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZTc1MF9waW5fY29uZmlnKSk7Ci0JY2xrX2FkZF9hbGlhcygiQ0xLX0NLM1A2TUkiLCAmZTc1MF90YzYzOTN4Yl9kZXZpY2UuZGV2LAorCWNsa19hZGRfYWxpYXMoIkNMS19DSzNQNk1JIiwgZTc1MF90YzYzOTN4Yl9kZXZpY2UubmFtZSwKIAkJCSJHUElPMTFfQ0xLIiwgTlVMTCksCiAJZXNlcmllc19nZXRfdG1pb19ncGlvcygpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jCmluZGV4IGNjOWIxMjkuLjc0YWIwOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMKQEAgLTIzLDkgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CkBAIC0xOTYsNyArMTk0LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGU4MDBfaW5pdCh2b2lkKQogewotCWNsa19hZGRfYWxpYXMoIkNMS19DSzNQNk1JIiwgJmU4MDBfdGM2MzkzeGJfZGV2aWNlLmRldiwKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsIGU4MDBfdGM2MzkzeGJfZGV2aWNlLm5hbWUsCiAJCQkiR1BJTzExX0NMSyIsIE5VTEwpLAogCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwppbmRleCBmNWVkODAzLi45MjBkZmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCkBAIC0xMSw0MCArMTEsNjMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3RkbzI0bS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KKworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCiAKLS8qIEdQSU8gSVJRIHVzYWdlICovCi0jZGVmaW5lIEdQSU80MV9FVEhJUlEJCSg0MSkKKy8qIEVNLVgyNzAgc3BlY2lmaWMgR1BJT3MgKi8KICNkZWZpbmUgR1BJTzEzX01NQ19DRAkJKDEzKQorI2RlZmluZSBHUElPOTVfTU1DX1dQCQkoOTUpCisjZGVmaW5lIEdQSU81Nl9OQU5EX1JCCQkoNTYpCisKKy8qIGVYZWRhIHNwZWNpZmljIEdQSU9zICovCisjZGVmaW5lIEdQSU8xMTRfTU1DX0NECQkoMTE0KQorI2RlZmluZSBHUElPMjBfTkFORF9SQgkJKDIwKQorI2RlZmluZSBHUElPMzhfU0RfUFdFTgkJKDM4KQorCisvKiBjb21tb24gIEdQSU9zICovCisjZGVmaW5lIEdQSU8xMV9OQU5EX0NTCQkoMTEpCisjZGVmaW5lIEdQSU85M19DQU1fUkVTRVQJKDkzKQorI2RlZmluZSBHUElPNDFfRVRISVJRCQkoNDEpCiAjZGVmaW5lIEVNX1gyNzBfRVRISVJRCQlJUlFfR1BJTyhHUElPNDFfRVRISVJRKQotI2RlZmluZSBFTV9YMjcwX01NQ19DRAkJSVJRX0dQSU8oR1BJTzEzX01NQ19DRCkKIAotLyogTkFORCBjb250cm9sIEdQSU9zICovCi0jZGVmaW5lIEdQSU8xMV9OQU5EX0NTCSgxMSkKLSNkZWZpbmUgR1BJTzU2X05BTkRfUkIJKDU2KQorc3RhdGljIGludCBtbWNfY2Q7CitzdGF0aWMgaW50IG5hbmRfcmI7CitzdGF0aWMgaW50IGRtOTAwMF9mbGFnczsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZW1feDI3MF9waW5fY29uZmlnW10gPSB7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb21tb25fcGluX2NvbmZpZ1tdID0gewogCS8qIEFDJzk3ICovCiAJR1BJTzI4X0FDOTdfQklUQ0xLLAogCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCkBAIC0xNTAsMjEgKzE3MywzMiBAQAogCUdQSU8xOF9SRFksCiAKIAkvKiBHUElPICovCi0JR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCisJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIHNsZWVwL3Jlc3VtZSBidXR0b24gKi8KIAogCS8qIHBvd2VyIGNvbnRyb2xzICovCiAJR1BJTzIwX0dQSU8JfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogR1BSU19QV0VOICovCisJR1BJTzkzX0dQSU8JfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogQ2FtZXJhIHJlc2V0ICovCiAJR1BJTzExNV9HUElPCXwgTUZQX0xQTV9EUklWRV9MT1csCS8qIFdMQU5fUFdFTiAqLwogCiAJLyogTkFORCBjb250cm9scyAqLwogCUdQSU8xMV9HUElPCXwgTUZQX0xQTV9EUklWRV9ISUdILAkvKiBOQU5EIENFIyAqLwotCUdQSU81Nl9HUElPLAkJCQkvKiBOQU5EIFJlYWR5L0J1c3kgKi8KIAogCS8qIGludGVycnVwdHMgKi8KLQlHUElPMTNfR1BJTywJLyogTU1DIGNhcmQgZGV0ZWN0ICovCiAJR1BJTzQxX0dQSU8sCS8qIERNOTAwMCBpbnRlcnJ1cHQgKi8KIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVtX3gyNzBfcGluX2NvbmZpZ1tdID0geworCUdQSU8xM19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KKwlHUElPNTZfR1BJTywJLyogTkFORCBSZWFkeS9CdXN5ICovCisJR1BJTzk1X0dQSU8sCS8qIE1NQyBXcml0ZSBwcm90ZWN0ICovCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleGVkYV9waW5fY29uZmlnW10gPSB7CisJR1BJTzIwX0dQSU8sCQkJCS8qIE5BTkQgUmVhZHkvQnVzeSAqLworCUdQSU8zOF9HUElPCXwgTUZQX0xQTV9EUklWRV9MT1csCS8qIFNEIHNsb3QgcG93ZXIgKi8KKwlHUElPMTE0X0dQSU8sCQkJCS8qIE1NQyBjYXJkIGRldGVjdCAqLworfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0RNOTAwMCkgfHwgZGVmaW5lZChDT05GSUdfRE05MDAwX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZW1feDI3MF9kbTkwMDBfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CkBAIC0xODUsNyArMjE5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBlbV94MjcwX2RtOTAwMF9wbGF0ZGF0YSA9IHsKLQkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzMyQklUT05MWSwKKwkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGX05PX0VFUFJPTSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVtX3gyNzBfZG05MDAwID0gewpAQCAtMjAwLDYgKzIzNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfZG05MDAwKHZvaWQpCiB7CisJZW1feDI3MF9kbTkwMDBfcGxhdGRhdGEuZmxhZ3MgfD0gZG05MDAwX2ZsYWdzOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZW1feDI3MF9kbTkwMDApOwogfQogI2Vsc2UKQEAgLTI4OSw3ICszMjQsNyBAQAogewogCWRzYigpOwogCi0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU81Nl9OQU5EX1JCKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUobmFuZF9yYik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlbV94MjcwX3BhcnRpdGlvbl9pbmZvW10gPSB7CkBAIC0zNTQsMTQgKzM4OSwxNCBAQAogCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMV9OQU5EX0NTLCAxKTsKIAotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPNTZfTkFORF9SQiwgIk5BTkQgUi9CIik7CisJZXJyID0gZ3Bpb19yZXF1ZXN0KG5hbmRfcmIsICJOQU5EIFIvQiIpOwogCWlmIChlcnIpIHsKIAkJcHJfd2FybmluZygiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBSL0IgZ3Bpb1xuIik7CiAJCWdwaW9fZnJlZShHUElPMTFfTkFORF9DUyk7CiAJCXJldHVybjsKIAl9CiAKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPNTZfTkFORF9SQik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQobmFuZF9yYik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVtX3gyNzBfbmFuZCk7CiB9CkBAIC0zNjksNiArNDA0LDYxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X25hbmQodm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlbV94MjcwX25vcl9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0ID0JMHgwMDAwMDAwMCwKKwkJLnNpemUgPQkJMHgwMDA1MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0JCSJFbnZpcm9ubWVudCIsCisJCS5vZmZzZXQgPQkweDAwMDUwMDAwLAorCQkuc2l6ZSA9CQkweDAwMDEwMDAwLAorCX0sIHsKKwkJLm5hbWUgPQkJIlJlc2VydmVkIiwKKwkJLm9mZnNldCA9CTB4MDAwNjAwMDAsCisJCS5zaXplID0JCTB4MDAwNTAwMDAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwgeworCQkubmFtZSA9CQkiU3BsYXNoc2NyZWVuIiwKKwkJLm9mZnNldCA9CTB4MDAwYjAwMDAsCisJCS5zaXplID0JCTB4MDAwNTAwMDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZW1feDI3MF9ub3JfZGF0YVtdID0geworCVswXSA9IHsKKwkJLndpZHRoID0gMiwKKwkJLnBhcnRzID0gZW1feDI3MF9ub3JfcGFydHMsCisJCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoZW1feDI3MF9ub3JfcGFydHMpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVtX3gyNzBfbm9yX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMU0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZW1feDI3MF9waHlzbWFwX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmVtX3gyNzBfbm9yX2ZsYXNoX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZlbV94MjcwX25vcl9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X25vcih2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZW1feDI3MF9waHlzbWFwX2ZsYXNoKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X25vcih2b2lkKSB7fQorI2VuZGlmCisKIC8qIFBYQTI3eCBPSENJIGNvbnRyb2xsZXIgc2V0dXAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCiBzdGF0aWMgaW50IGVtX3gyNzBfb2hjaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTM5NSw0MCArNDg1LDkzIEBACiAKIC8qIE1DSSBjb250cm9sbGVyIHNldHVwICovCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKmVtX3gyNzBfc2Rpb19sZG87CisKIHN0YXRpYyBpbnQgZW1feDI3MF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgaXJxX2hhbmRsZXJfdCBlbV94MjcwX2RldGVjdF9pbnQsCiAJCQkgICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyID0gcmVxdWVzdF9pcnEoRU1fWDI3MF9NTUNfQ0QsIGVtX3gyNzBfZGV0ZWN0X2ludCwKLQkJCSAgICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwlpbnQgZXJyOworCisJZW1feDI3MF9zZGlvX2xkbyA9IHJlZ3VsYXRvcl9nZXQoZGV2LCAidmNjIHNkaW8iKTsKKwlpZiAoSVNfRVJSKGVtX3gyNzBfc2Rpb19sZG8pKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVxdWVzdCBTRElPIHBvd2VyIHN1cHBseTogJWxkXG4iLAorCQkJUFRSX0VSUihlbV94MjcwX3NkaW9fbGRvKSk7CisJCXJldHVybiBQVFJfRVJSKGVtX3gyNzBfc2Rpb19sZG8pOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKG1tY19jZCksIGVtX3gyNzBfZGV0ZWN0X2ludCwKKwkJCSAgICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKKwkJCSAgICAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJICAgICAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJROiAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUTogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwlpZiAobWFjaGluZV9pc19lbV94MjcwKCkpIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU85NV9NTUNfV1AsICJNTUMgV1AiKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICJjYW4ndCByZXF1ZXN0IE1NQyB3cml0ZSBwcm90ZWN0OiAlZFxuIiwKKwkJCQllcnIpOworCQkJZ290byBlcnJfZ3Bpb193cDsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPOTVfTU1DX1dQKTsKKwl9IGVsc2UgeworCQllcnIgPSBncGlvX3JlcXVlc3QoR1BJTzM4X1NEX1BXRU4sICJzZGlvIHBvd2VyIik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVxdWVzdCBNTUMgcG93ZXIgY29udHJvbCA6ICVkXG4iLAorCQkJCWVycik7CisJCQlnb3RvIGVycl9ncGlvX3dwOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPMzhfU0RfUFdFTiwgMSk7CiAJfQogCiAJcmV0dXJuIDA7CisKK2Vycl9ncGlvX3dwOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKG1tY19jZCksIGRhdGEpOworZXJyX2lycToKKwlyZWd1bGF0b3JfcHV0KGVtX3gyNzBfc2Rpb19sZG8pOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZW1feDI3MF9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQogewotCS8qCi0JICAgRklYTUU6IGN1cnJlbnQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgYWxsb3cgdG8KLQkgICBlbmFibGUvZGlzYWJsZSBNTUMgcG93ZXIuIFRoaXMgd2lsbCBiZSBmaXhlZCBpbiBuZXh0IEhXIHJlbGVhc2VzLAotCSAgIGFuZCB3ZSdsbCBuZWVkIHRvIGFkZCBpbXBsbWVudGF0aW9uIGhlcmUuCi0JKi8KLQlyZXR1cm47CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKKwkJaW50IHZkZF91ViA9ICgyMDAwICsgKHZkZCAtIF9fZmZzKE1NQ19WRERfMjBfMjEpKSAqIDEwMCkgKiAxMDAwOworCisJCXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShlbV94MjcwX3NkaW9fbGRvLCB2ZGRfdVYsIHZkZF91Vik7CisJCXJlZ3VsYXRvcl9lbmFibGUoZW1feDI3MF9zZGlvX2xkbyk7CisJfSBlbHNlIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUoZW1feDI3MF9zZGlvX2xkbyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBlbV94MjcwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgaXJxID0gZ3Bpb190b19pcnEoR1BJTzEzX01NQ19DRCk7Ci0JZnJlZV9pcnEoaXJxLCBkYXRhKTsKKwlmcmVlX2lycShncGlvX3RvX2lycShtbWNfY2QpLCBkYXRhKTsKKwlyZWd1bGF0b3JfcHV0KGVtX3gyNzBfc2Rpb19sZG8pOworCisJaWYgKG1hY2hpbmVfaXNfZW1feDI3MCgpKQorCQlncGlvX2ZyZWUoR1BJTzk1X01NQ19XUCk7CisJZWxzZQorCQlncGlvX2ZyZWUoR1BJTzM4X1NEX1BXRU4pOworfQorCitzdGF0aWMgaW50IGVtX3gyNzBfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU85NV9NTUNfV1ApOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfE1NQ19WRERfMzBfMzEsCisJLm9jcl9tYXNrCT0gTU1DX1ZERF8yMF8yMXxNTUNfVkREXzIxXzIyfE1NQ19WRERfMjJfMjN8CisJCQkgIE1NQ19WRERfMjRfMjV8TU1DX1ZERF8yNV8yNnxNTUNfVkREXzI2XzI3fAorCQkJICBNTUNfVkREXzI3XzI4fE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHwKKwkJCSAgTU1DX1ZERF8zMF8zMXxNTUNfVkREXzMxXzMyLAogCS5pbml0IAkJPSBlbV94MjcwX21jaV9pbml0LAogCS5zZXRwb3dlciAJPSBlbV94MjcwX21jaV9zZXRwb3dlciwKIAkuZXhpdAkJPSBlbV94MjcwX21jaV9leGl0LApAQCAtNDM2LDMzICs1NzksNTMgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9tbWModm9pZCkKIHsKKwlpZiAobWFjaGluZV9pc19lbV94MjcwKCkpCisJCWVtX3gyNzBfbWNpX3BsYXRmb3JtX2RhdGEuZ2V0X3JvID0gZW1feDI3MF9tY2lfZ2V0X3JvOworCisJZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkJPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YSk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9tbWModm9pZCkge30KICNlbmRpZgogCi0vKiBMQ0QgNDgweDY0MCAqLworLyogTENEICovCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gZW1feDI3MF9sY2RfbW9kZSA9IHsKLQkucGl4Y2xvY2sJPSA1MDAwMCwKLQkuYnBwCQk9IDE2LAotCS54cmVzCQk9IDQ4MCwKLQkueXJlcwkJPSA2NDAsCi0JLmhzeW5jX2xlbgk9IDgsCi0JLnZzeW5jX2xlbgk9IDIsCi0JLmxlZnRfbWFyZ2luCT0gOCwKLQkudXBwZXJfbWFyZ2luCT0gMCwKLQkucmlnaHRfbWFyZ2luCT0gMjQsCi0JLmxvd2VyX21hcmdpbgk9IDQsCi0JLmNtYXBfZ3JleXNjYWxlCT0gMCwKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGVtX3gyNzBfbGNkX21vZGVzW10gPSB7CisJWzBdID0geworCQkucGl4Y2xvY2sJPSAzODI1MCwKKwkJLmJwcAkJPSAxNiwKKwkJLnhyZXMJCT0gNDgwLAorCQkueXJlcwkJPSA2NDAsCisJCS5oc3luY19sZW4JPSA4LAorCQkudnN5bmNfbGVuCT0gMiwKKwkJLmxlZnRfbWFyZ2luCT0gOCwKKwkJLnVwcGVyX21hcmdpbgk9IDIsCisJCS5yaWdodF9tYXJnaW4JPSAyNCwKKwkJLmxvd2VyX21hcmdpbgk9IDQsCisJCS5zeW5jCQk9IDAsCisJfSwKKwlbMV0gPSB7CisJCS5waXhjbG9jayAgICAgICA9IDE1MzgwMCwKKwkJLmJwcAkJPSAxNiwKKwkJLnhyZXMJCT0gMjQwLAorCQkueXJlcwkJPSAzMjAsCisJCS5oc3luY19sZW4JPSA4LAorCQkudnN5bmNfbGVuCT0gMiwKKwkJLmxlZnRfbWFyZ2luCT0gOCwKKwkJLnVwcGVyX21hcmdpbgk9IDIsCisJCS5yaWdodF9tYXJnaW4JPSA4OCwKKwkJLmxvd2VyX21hcmdpbgk9IDIsCisJCS5zeW5jCQk9IDAsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIGVtX3gyNzBfbGNkID0gewotCS5tb2RlcwkJPSAmZW1feDI3MF9sY2RfbW9kZSwKLQkubnVtX21vZGVzCT0gMSwKKwkubW9kZXMJCT0gZW1feDI3MF9sY2RfbW9kZXMsCisJLm51bV9tb2Rlcwk9IDIsCiAJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCwKIH07CisKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfbGNkKHZvaWQpCiB7CiAJc2V0X3B4YV9mYl9pbmZvKCZlbV94MjcwX2xjZCk7CkBAIC00NzEsNiArNjM0LDQwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X2xjZCh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgZW1feDI3MF9zcGlfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAgZW1feDI3MF90ZG8yNG1fY2hpcCA9IHsKKwkucnhfdGhyZXNob2xkID0gMSwKKwkudHhfdGhyZXNob2xkID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRvMjRtX3BsYXRmb3JtX2RhdGEgZW1feDI3MF90ZG8yNG1fcGRhdGEgPSB7CisJLm1vZGVsID0gVERPMzVTLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBlbV94MjcwX3NwaV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJ0ZG8yNG0iLAorCQkubWF4X3NwZWVkX2h6ID0gMTAwMDAwMCwKKwkJLmJ1c19udW0gPSAxLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkuY29udHJvbGxlcl9kYXRhID0gJmVtX3gyNzBfdGRvMjRtX2NoaXAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmVtX3gyNzBfdGRvMjRtX3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X3NwaSh2b2lkKQoreworCXB4YTJ4eF9zZXRfc3BpX2luZm8oMSwgJmVtX3gyNzBfc3BpX2luZm8pOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKEFSUkFZX0FORF9TSVpFKGVtX3gyNzBfc3BpX2RldmljZXMpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X3NwaSh2b2lkKSB7fQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfUFhBMlhYX0FDOTcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QWEEyWFhfQUM5N19NT0RVTEUpCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X2FjOTcodm9pZCkKIHsKQEAgLTQ4MSwyMyArNjc4LDc2IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4X01PRFVMRSkKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZW1feDI3MF9tYXRyaXhfa2V5c1tdID0geworc3RhdGljIHVuc2lnbmVkIGludCBlbV94MjcwX21vZHVsZV9tYXRyaXhfa2V5c1tdID0gewogCUtFWSgwLCAwLCBLRVlfQSksIEtFWSgxLCAwLCBLRVlfVVApLCBLRVkoMiwgMSwgS0VZX0IpLAogCUtFWSgwLCAyLCBLRVlfTEVGVCksIEtFWSgxLCAxLCBLRVlfRU5URVIpLCBLRVkoMiwgMCwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMSwgS0VZX0MpLCBLRVkoMSwgMiwgS0VZX0RPV04pLCBLRVkoMiwgMiwgS0VZX0QpLAogfTsKIAotc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2tleXBhZF9pbmZvID0geworc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBlbV94MjcwX21vZHVsZV9rZXlwYWRfaW5mbyA9IHsKIAkvKiBjb2RlIG1hcCBmb3IgdGhlIG1hdHJpeCBrZXlzICovCiAJLm1hdHJpeF9rZXlfcm93cwk9IDMsCiAJLm1hdHJpeF9rZXlfY29scwk9IDMsCi0JLm1hdHJpeF9rZXlfbWFwCQk9IGVtX3gyNzBfbWF0cml4X2tleXMsCi0JLm1hdHJpeF9rZXlfbWFwX3NpemUJPSBBUlJBWV9TSVpFKGVtX3gyNzBfbWF0cml4X2tleXMpLAorCS5tYXRyaXhfa2V5X21hcAkJPSBlbV94MjcwX21vZHVsZV9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoZW1feDI3MF9tb2R1bGVfbWF0cml4X2tleXMpLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBlbV94MjcwX2V4ZWRhX21hdHJpeF9rZXlzW10gPSB7CisJS0VZKDAsIDAsIEtFWV9SSUdIVFNISUZUKSwgS0VZKDAsIDEsIEtFWV9SSUdIVENUUkwpLAorCUtFWSgwLCAyLCBLRVlfUklHSFRBTFQpLCBLRVkoMCwgMywgS0VZX1NQQUNFKSwKKwlLRVkoMCwgNCwgS0VZX0xFRlRBTFQpLCBLRVkoMCwgNSwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMCwgNiwgS0VZX0VOVEVSKSwgS0VZKDAsIDcsIEtFWV9TTEFTSCksCisKKwlLRVkoMSwgMCwgS0VZX0RPVCksIEtFWSgxLCAxLCBLRVlfTSksCisJS0VZKDEsIDIsIEtFWV9OKSwgS0VZKDEsIDMsIEtFWV9CKSwKKwlLRVkoMSwgNCwgS0VZX1YpLCBLRVkoMSwgNSwgS0VZX0MpLAorCUtFWSgxLCA2LCBLRVlfWCksIEtFWSgxLCA3LCBLRVlfWiksCisKKwlLRVkoMiwgMCwgS0VZX0xFRlRTSElGVCksIEtFWSgyLCAxLCBLRVlfU0VNSUNPTE9OKSwKKwlLRVkoMiwgMiwgS0VZX0wpLCBLRVkoMiwgMywgS0VZX0spLAorCUtFWSgyLCA0LCBLRVlfSiksIEtFWSgyLCA1LCBLRVlfSCksCisJS0VZKDIsIDYsIEtFWV9HKSwgS0VZKDIsIDcsIEtFWV9GKSwKKworCUtFWSgzLCAwLCBLRVlfRCksIEtFWSgzLCAxLCBLRVlfUyksCisJS0VZKDMsIDIsIEtFWV9BKSwgS0VZKDMsIDMsIEtFWV9UQUIpLAorCUtFWSgzLCA0LCBLRVlfQkFDS1NQQUNFKSwgS0VZKDMsIDUsIEtFWV9QKSwKKwlLRVkoMywgNiwgS0VZX08pLCBLRVkoMywgNywgS0VZX0kpLAorCisJS0VZKDQsIDAsIEtFWV9VKSwgS0VZKDQsIDEsIEtFWV9ZKSwKKwlLRVkoNCwgMiwgS0VZX1QpLCBLRVkoNCwgMywgS0VZX1IpLAorCUtFWSg0LCA0LCBLRVlfRSksIEtFWSg0LCA1LCBLRVlfVyksCisJS0VZKDQsIDYsIEtFWV9RKSwgS0VZKDQsIDcsIEtFWV9NSU5VUyksCisKKwlLRVkoNSwgMCwgS0VZXzApLCBLRVkoNSwgMSwgS0VZXzkpLAorCUtFWSg1LCAyLCBLRVlfOCksIEtFWSg1LCAzLCBLRVlfNyksCisJS0VZKDUsIDQsIEtFWV82KSwgS0VZKDUsIDUsIEtFWV81KSwKKwlLRVkoNSwgNiwgS0VZXzQpLCBLRVkoNSwgNywgS0VZXzMpLAorCisJS0VZKDYsIDAsIEtFWV8yKSwgS0VZKDYsIDEsIEtFWV8xKSwKKwlLRVkoNiwgMiwgS0VZX0VOVEVSKSwgS0VZKDYsIDMsIEtFWV9FTkQpLAorCUtFWSg2LCA0LCBLRVlfRE9XTiksIEtFWSg2LCA1LCBLRVlfVVApLAorCUtFWSg2LCA2LCBLRVlfTUVOVSksIEtFWSg2LCA3LCBLRVlfRjEpLAorCisJS0VZKDcsIDAsIEtFWV9MRUZUKSwgS0VZKDcsIDEsIEtFWV9SSUdIVCksCisJS0VZKDcsIDIsIEtFWV9CQUNLKSwgS0VZKDcsIDMsIEtFWV9IT01FKSwKKwlLRVkoNywgNCwgMCksIEtFWSg3LCA1LCAwKSwKKwlLRVkoNywgNiwgMCksIEtFWSg3LCA3LCAwKSwKK307CisKK3N0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9leGVkYV9rZXlwYWRfaW5mbyA9IHsKKwkvKiBjb2RlIG1hcCBmb3IgdGhlIG1hdHJpeCBrZXlzICovCisJLm1hdHJpeF9rZXlfcm93cwk9IDgsCisJLm1hdHJpeF9rZXlfY29scwk9IDgsCisJLm1hdHJpeF9rZXlfbWFwCQk9IGVtX3gyNzBfZXhlZGFfbWF0cml4X2tleXMsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUJPSBBUlJBWV9TSVpFKGVtX3gyNzBfZXhlZGFfbWF0cml4X2tleXMpLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9rZXlwYWQodm9pZCkKIHsKLQlweGFfc2V0X2tleXBhZF9pbmZvKCZlbV94MjcwX2tleXBhZF9pbmZvKTsKKwlpZiAobWFjaGluZV9pc19lbV94MjcwKCkpCisJCXB4YV9zZXRfa2V5cGFkX2luZm8oJmVtX3gyNzBfbW9kdWxlX2tleXBhZF9pbmZvKTsKKwllbHNlCisJCXB4YV9zZXRfa2V5cGFkX2luZm8oJmVtX3gyNzBfZXhlZGFfa2V5cGFkX2luZm8pOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfa2V5cGFkKHZvaWQpIHt9CkBAIC01MzUsMTkgKzc4NSwyNjQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfZ3Bpb19rZXlzKHZvaWQpIHt9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdCh2b2lkKQorLyogUXVpY2sgQ2FwdHVyZSBJbnRlcmZhY2UgYW5kIHNlbnNvciBzZXR1cCAqLworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4X01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICplbV94MjcwX2NhbWVyYV9sZG87CisKK3N0YXRpYyBpbnQgZW1feDI3MF9zZW5zb3JfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPOTNfQ0FNX1JFU0VULCAiY2FtZXJhIHJlc2V0Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPOTNfQ0FNX1JFU0VULCAwKTsKKworCWVtX3gyNzBfY2FtZXJhX2xkbyA9IHJlZ3VsYXRvcl9nZXQoTlVMTCwgInZjYyBjYW0iKTsKKwlpZiAoZW1feDI3MF9jYW1lcmFfbGRvID09IE5VTEwpIHsKKwkJZ3Bpb19mcmVlKEdQSU85M19DQU1fUkVTRVQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGVtX3gyNzBfY2FtZXJhX2xkbyk7CisJaWYgKHJldCkgeworCQlyZWd1bGF0b3JfcHV0KGVtX3gyNzBfY2FtZXJhX2xkbyk7CisJCWdwaW9fZnJlZShHUElPOTNfQ0FNX1JFU0VUKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlncGlvX3NldF92YWx1ZShHUElPOTNfQ0FNX1JFU0VULCAxKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9jYW1lcmFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuaW5pdAk9IGVtX3gyNzBfc2Vuc29yX2luaXQsCisJLmZsYWdzICA9IFBYQV9DQU1FUkFfTUFTVEVSIHwgUFhBX0NBTUVSQV9EQVRBV0lEVEhfOCB8CisJCVBYQV9DQU1FUkFfUENMS19FTiB8IFBYQV9DQU1FUkFfTUNMS19FTiwKKwkubWNsa18xMGtoeiA9IDI2MDAsCit9OworCitzdGF0aWMgaW50IGVtX3gyNzBfc2Vuc29yX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQoreworCWludCByZXQ7CisJaW50IGlzX29uID0gcmVndWxhdG9yX2lzX2VuYWJsZWQoZW1feDI3MF9jYW1lcmFfbGRvKTsKKworCWlmIChvbiA9PSBpc19vbikKKwkJcmV0dXJuIDA7CisKKwlncGlvX3NldF92YWx1ZShHUElPOTNfQ0FNX1JFU0VULCAhb24pOworCisJaWYgKG9uKQorCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGVtX3gyNzBfY2FtZXJhX2xkbyk7CisJZWxzZQorCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShlbV94MjcwX2NhbWVyYV9sZG8pOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU85M19DQU1fUkVTRVQsIG9uKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7CisJLmJ1c19pZAk9IDAsCisJLnBvd2VyID0gZW1feDI3MF9zZW5zb3JfcG93ZXIsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGVtX3gyNzBfaTJjX2NhbV9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygibXQ5bTExMSIsIDB4NDgpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfaTJjX2luZm8gPSB7CisJLmZhc3RfbW9kZSA9IDEsCit9OworCitzdGF0aWMgdm9pZCAgX19pbml0IGVtX3gyNzBfaW5pdF9jYW1lcmEodm9pZCkKK3sKKwlweGFfc2V0X2kyY19pbmZvKCZlbV94MjcwX2kyY19pbmZvKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShlbV94MjcwX2kyY19jYW1faW5mbykpOworCXB4YV9zZXRfY2FtZXJhX2luZm8oJmVtX3gyNzBfY2FtZXJhX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfY2FtZXJhKHZvaWQpIHt9CisjZW5kaWYKKworLyogREE5MDMwIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb25zICovCisjZGVmaW5lIFJFR1VMQVRPUl9DT05TVU1FUihfbmFtZSwgX2RldiwgX3N1cHBseSkJCQkgICAgICAgXAorCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBfbmFtZSMjX2NvbnN1bWVyc1tdID0gewlcCisJCXsJCQkJCQkJXAorCQkJLmRldiA9IF9kZXYsCQkJCQlcCisJCQkuc3VwcGx5ID0gX3N1cHBseSwJCQkJXAorCQl9LAkJCQkJCQlcCisJfQorCitSRUdVTEFUT1JfQ09OU1VNRVIobGRvMywgTlVMTCwgInZjYyBncHMiKTsKK1JFR1VMQVRPUl9DT05TVU1FUihsZG81LCBOVUxMLCAidmNjIGNhbSIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzEwLCAmcHhhX2RldmljZV9tY2kuZGV2LCAidmNjIHNkaW8iKTsKK1JFR1VMQVRPUl9DT05TVU1FUihsZG8xMiwgTlVMTCwgInZjYyB1c2IiKTsKK1JFR1VMQVRPUl9DT05TVU1FUihsZG8xOSwgTlVMTCwgInZjYyBncHJzIik7CisKKyNkZWZpbmUgUkVHVUxBVE9SX0lOSVQoX2xkbywgX21pbl91ViwgX21heF91ViwgX29wc19tYXNrKQkJXAorCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBfbGRvIyNfZGF0YSA9IHsJCVwKKwkJLmNvbnN0cmFpbnRzID0gewkJCQkJXAorCQkJLm1pbl91ViA9IF9taW5fdVYsCQkJCVwKKwkJCS5tYXhfdVYgPSBfbWF4X3VWLAkJCQlcCisJCQkuc3RhdGVfbWVtID0gewkJCQkJXAorCQkJCS5lbmFibGVkID0gMCwJCQkJXAorCQkJfSwJCQkJCQlcCisJCQkudmFsaWRfb3BzX21hc2sgPSBfb3BzX21hc2ssCQkJXAorCQl9LAkJCQkJCQlcCisJCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKF9sZG8jI19jb25zdW1lcnMpLAlcCisJCS5jb25zdW1lcl9zdXBwbGllcyA9IF9sZG8jI19jb25zdW1lcnMsCQkJXAorCX07CisKK1JFR1VMQVRPUl9JTklUKGxkbzMsIDMyMDAwMDAsIDMyMDAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTKTsKK1JFR1VMQVRPUl9JTklUKGxkbzUsIDMwMDAwMDAsIDMwMDAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTKTsKK1JFR1VMQVRPUl9JTklUKGxkbzEwLCAyMDAwMDAwLCAzMjAwMDAwLAorCSAgICAgICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyB8IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSk7CitSRUdVTEFUT1JfSU5JVChsZG8xMiwgMzAwMDAwMCwgMzAwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQobGRvMTksIDMyMDAwMDAsIDMyMDAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTKTsKKworc3RydWN0IGxlZF9pbmZvIGVtX3gyNzBfbGVkX2luZm8gPSB7CisJLm5hbWUgPSAiZW0teDI3MDpvcmFuZ2UiLAorCS5kZWZhdWx0X3RyaWdnZXIgPSAiYmF0dGVyeS1jaGFyZ2luZy1vci1mdWxsIiwKK307CisKK3N0cnVjdCBwb3dlcl9zdXBwbHlfaW5mbyBlbV94MjcwX3BzeV9pbmZvID0geworCS5uYW1lID0gIkxQNTU1NTk3UDZILUZQUyIsCisJLnRlY2hub2xvZ3kgPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAorCS52b2x0YWdlX21heF9kZXNpZ24gPSA0MjAwMDAwLAorCS52b2x0YWdlX21pbl9kZXNpZ24gPSAzMDAwMDAwLAorCS51c2VfZm9yX2FwbSA9IDEsCit9OworCitzdGF0aWMgdm9pZCBlbV94MjcwX2JhdHRlcnlfbG93KHZvaWQpCit7CisJYXBtX3F1ZXVlX2V2ZW50KEFQTV9MT1dfQkFUVEVSWSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtX3gyNzBfYmF0dGVyeV9jcml0aWNhbCh2b2lkKQoreworCWFwbV9xdWV1ZV9ldmVudChBUE1fQ1JJVElDQUxfU1VTUEVORCk7Cit9CisKK3N0cnVjdCBkYTkwMzBfYmF0dGVyeV9pbmZvIGVtX3gyNzBfYmF0dGVydHlfaW5mbyA9IHsKKwkuYmF0dGVyeV9pbmZvID0gJmVtX3gyNzBfcHN5X2luZm8sCisKKwkuY2hhcmdlX21pbGxpYW1wID0gMTAwMCwKKwkuY2hhcmdlX21pbGxpdm9sdCA9IDQyMDAsCisKKwkudmJhdF9sb3cgPSAzNjAwLAorCS52YmF0X2NyaXQgPSAzNDAwLAorCS52YmF0X2NoYXJnZV9zdGFydCA9IDQxMDAsCisJLnZiYXRfY2hhcmdlX3N0b3AgPSA0MjAwLAorCS52YmF0X2NoYXJnZV9yZXN0YXJ0ID0gNDAwMCwKKworCS52Y2hhcmdlX21pbiA9IDMyMDAsCisJLnZjaGFyZ2VfbWF4ID0gNTUwMCwKKworCS50YmF0X2xvdyA9IDE5NywKKwkudGJhdF9oaWdoID0gNzgsCisJLnRiYXRfcmVzdGFydCA9IDEwMCwKKworCS5iYXRtb25faW50ZXJ2YWwgPSAwLAorCisJLmJhdHRlcnlfbG93ID0gZW1feDI3MF9iYXR0ZXJ5X2xvdywKKwkuYmF0dGVyeV9jcml0aWNhbCA9IGVtX3gyNzBfYmF0dGVyeV9jcml0aWNhbCwKK307CisKKyNkZWZpbmUgREE5MDMwX1NVQkRFVihfbmFtZSwgX2lkLCBfcGRhdGEpCVwKKwl7CQkJCQlcCisJCS5uYW1lID0gImRhOTAzeC0iICNfbmFtZSwJXAorCQkuaWQgPSBEQTkwMzBfSURfIyNfaWQsCQlcCisJCS5wbGF0Zm9ybV9kYXRhID0gX3BkYXRhLAlcCisJfQorCisjZGVmaW5lIERBOTAzMF9MRE8obnVtKQlEQTkwMzBfU1VCREVWKHJlZ3VsYXRvciwgTERPIyNudW0sICZsZG8jI251bSMjX2RhdGEpCisKK3N0cnVjdCBkYTkwM3hfc3ViZGV2X2luZm8gZW1feDI3MF9kYTkwMzBfc3ViZGV2c1tdID0geworCURBOTAzMF9MRE8oMyksCisJREE5MDMwX0xETyg1KSwKKwlEQTkwMzBfTERPKDEwKSwKKwlEQTkwMzBfTERPKDEyKSwKKwlEQTkwMzBfTERPKDE5KSwKKworCURBOTAzMF9TVUJERVYobGVkLCBMRURfUEMsICZlbV94MjcwX2xlZF9pbmZvKSwKKwlEQTkwMzBfU1VCREVWKGJhY2tsaWdodCwgV0xFRCwgJmVtX3gyNzBfbGVkX2luZm8pLAorCURBOTAzMF9TVUJERVYoYmF0dGVyeSwgQkFULCAmZW1feDI3MF9iYXR0ZXJ0eV9pbmZvKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgZW1feDI3MF9kYTkwMzBfaW5mbyA9IHsKKwkubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKGVtX3gyNzBfZGE5MDMwX3N1YmRldnMpLAorCS5zdWJkZXZzID0gZW1feDI3MF9kYTkwMzBfc3ViZGV2cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZW1feDI3MF9pMmNfcG1pY19pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJkYTkwMzAiLCAweDQ5KSwKKwkuaXJxID0gSVJRX0dQSU8oMCksCisJLnBsYXRmb3JtX2RhdGEgPSAmZW1feDI3MF9kYTkwMzBfaW5mbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfcHdyX2kyY19pbmZvID0geworCS51c2VfcGlvID0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfZGE5MDMwKHZvaWQpCit7CisJcHhhMjd4X3NldF9pMmNfcG93ZXJfaW5mbygmZW1feDI3MF9wd3JfaTJjX2luZm8pOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsICZlbV94MjcwX2kyY19wbWljX2luZm8sIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXByX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9waW5fY29uZmlnKSk7CiAKKwltbWNfY2QgPSBHUElPMTNfTU1DX0NEOworCW5hbmRfcmIgPSBHUElPNTZfTkFORF9SQjsKKwlkbTkwMDBfZmxhZ3MgPSBETTkwMDBfUExBVEZfMzJCSVRPTkxZOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9leGVkYV9pbml0KHZvaWQpCit7CisJcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShleGVkYV9waW5fY29uZmlnKSk7CisKKwltbWNfY2QgPSBHUElPMTE0X01NQ19DRDsKKwluYW5kX3JiID0gR1BJTzIwX05BTkRfUkI7CisJZG05MDAwX2ZsYWdzID0gRE05MDAwX1BMQVRGXzE2QklUT05MWTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbW1vbl9waW5fY29uZmlnKSk7CisKKwlpZiAobWFjaGluZV9pc19lbV94MjcwKCkpCisJCWVtX3gyNzBfbW9kdWxlX2luaXQoKTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX2V4ZWRhKCkpCisJCWVtX3gyNzBfZXhlZGFfaW5pdCgpOworCWVsc2UKKwkJcGFuaWMoIlVuc3VwcG9ydGVkIG1hY2hpbmU6ICVkXG4iLCBtYWNoaW5lX2FyY2hfdHlwZSk7CisKKwllbV94MjcwX2luaXRfZGE5MDMwKCk7CiAJZW1feDI3MF9pbml0X2RtOTAwMCgpOwogCWVtX3gyNzBfaW5pdF9ydGMoKTsKIAllbV94MjcwX2luaXRfbmFuZCgpOworCWVtX3gyNzBfaW5pdF9ub3IoKTsKIAllbV94MjcwX2luaXRfbGNkKCk7CiAJZW1feDI3MF9pbml0X21tYygpOwogCWVtX3gyNzBfaW5pdF9vaGNpKCk7CiAJZW1feDI3MF9pbml0X2tleXBhZCgpOwogCWVtX3gyNzBfaW5pdF9ncGlvX2tleXMoKTsKIAllbV94MjcwX2luaXRfYWM5NygpOworCWVtX3gyNzBfaW5pdF9jYW1lcmEoKTsKKwllbV94MjcwX2luaXRfc3BpKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoRU1fWDI3MCwgIkNvbXB1bGFiIEVNLVgyNzAiKQpAQCAtNTU5LDMgKzEwNTQsMTMgQEAKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gZW1feDI3MF9pbml0LAogTUFDSElORV9FTkQKKworTUFDSElORV9TVEFSVChFWEVEQSwgIkNvbXB1bGFiIGVYZWRhIikKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBlbV94MjcwX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCmluZGV4IGRmY2U3ZDUuLmM2MGRhZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKQEAgLTIwLDggKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMKaW5kZXggZGY1ZjgyMi4uOTJiYTE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMKQEAgLTE5LDE4ICsxOSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYwppbmRleCAwY2NjOTFjLi4zMTI2YTM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCkBAIC0yNiw4ICsyNiw5IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC0xMjcsMyArMTI4LDMzIEBACiAJaW90YWJsZV9pbml0KHN0YW5kYXJkX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc3RhbmRhcmRfaW9fZGVzYykpOwogCWdldF9jbGtfZnJlcXVlbmN5X2toeigxKTsKIH0KKworLyoKKyAqIENvbmZpZ3VyZSBwaW5zIGZvciBHUElPIG9yIG90aGVyIGZ1bmN0aW9ucworICovCitpbnQgcHhhX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGdwaW8gPSBncGlvX21vZGUgJiBHUElPX01EX01BU0tfTlI7CisJaW50IGZuID0gKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19GTikgPj4gODsKKwlpbnQgZ2FmcjsKKworCWlmIChncGlvID4gcHhhX2xhc3RfZ3BpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9MT1cpCisJCUdQQ1IoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKKwllbHNlIGlmIChncGlvX21vZGUgJiBHUElPX0RGTFRfSElHSCkKKwkJR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCWlmIChncGlvX21vZGUgJiBHUElPX01EX01BU0tfRElSKQorCQlHUERSKGdwaW8pIHw9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR1BEUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7CisJZ2FmciA9IEdBRlIoZ3BpbykgJiB+KDB4MyA8PCAoKChncGlvKSAmIDB4ZikqMikpOworCUdBRlIoZ3BpbykgPSBnYWZyIHwgIChmbiAgPDwgKCgoZ3BpbykgJiAweGYpKjIpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocHhhX2dwaW9fbW9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKaW5kZXggZGM4NzZhOC4uMzQ2NTI2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaApAQCAtOSwyMCArOSwxNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotdHlwZWRlZiBpbnQgKCpzZXRfd2FrZV90KSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci0KIHN0cnVjdCBzeXNfdGltZXI7CiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHB4YV90aW1lcjsKLWV4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwgc2V0X3dha2VfdCBmbik7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhX2luaXRfZ3BpbyhpbnQgZ3Bpb19uciwgc2V0X3dha2VfdCBmbik7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhX2luaXRfaXJxKGludCBpcnFfbnIsCisJCQkJaW50ICgqc2V0X3dha2UpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KSk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhX21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50IGluZm8pOwotZXh0ZXJuIGludCBweGFfbGFzdF9ncGlvOwogCiAjZGVmaW5lIFNFVF9CQU5LKF9fbnIsX19zdGFydCxfX3NpemUpIFwKIAltaS0+YmFua1tfX25yXS5zdGFydCA9IChfX3N0YXJ0KSwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmVjMWU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dwaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDQ1MyArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2dwaW8uYwotICoKLSAqICBHZW5lcmljIFBYQSBHUElPIGhhbmRsaW5nCi0gKgotICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQotICogIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQotICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgotCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotCi0jZGVmaW5lIEdQSU8wX0JBU0UJKCh2b2lkIF9faW9tZW0gKilpb19wMnYoMHg0MEUwMDAwMCkpCi0jZGVmaW5lIEdQSU8xX0JBU0UJKCh2b2lkIF9faW9tZW0gKilpb19wMnYoMHg0MEUwMDAwNCkpCi0jZGVmaW5lIEdQSU8yX0JBU0UJKCh2b2lkIF9faW9tZW0gKilpb19wMnYoMHg0MEUwMDAwOCkpCi0jZGVmaW5lIEdQSU8zX0JBU0UJKCh2b2lkIF9faW9tZW0gKilpb19wMnYoMHg0MEUwMDEwMCkpCi0KLSNkZWZpbmUgR1BMUl9PRkZTRVQJMHgwMAotI2RlZmluZSBHUERSX09GRlNFVAkweDBDCi0jZGVmaW5lIEdQU1JfT0ZGU0VUCTB4MTgKLSNkZWZpbmUgR1BDUl9PRkZTRVQJMHgyNAotI2RlZmluZSBHUkVSX09GRlNFVAkweDMwCi0jZGVmaW5lIEdGRVJfT0ZGU0VUCTB4M0MKLSNkZWZpbmUgR0VEUl9PRkZTRVQJMHg0OAotCi1zdHJ1Y3QgcHhhX2dwaW9fY2hpcCB7Ci0Jc3RydWN0IGdwaW9fY2hpcCBjaGlwOwotCXZvaWQgX19pb21lbSAgICAgKnJlZ2Jhc2U7Ci19OwotCi1pbnQgcHhhX2xhc3RfZ3BpbzsKLQotI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4Ci0vKiBHUElPODYvODcvODgvODkgb24gUFhBMjZ4IGhhdmUgdGhlaXIgZGlyZWN0aW9uIGJpdHMgaW4gR1BEUjIgaW52ZXJ0ZWQsCi0gKiBhcyB3ZWxsIGFzIHRoZWlyIEFsdGVybmF0ZSBGdW5jdGlvbiB2YWx1ZSBiZWluZyAnMScgZm9yIEdQSU8gaW4gR0FGUnguCi0gKi8KLXN0YXRpYyBpbnQgX19ncGlvX2lzX2ludmVydGVkKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGNwdV9pc19weGEyNXgoKSAmJiBncGlvID4gODU7Ci19Ci0jZWxzZQotI2RlZmluZSBfX2dwaW9faXNfaW52ZXJ0ZWQoZ3BpbykJKDApCi0jZW5kaWYKLQotLyoKLSAqIENvbmZpZ3VyZSBwaW5zIGZvciBHUElPIG9yIG90aGVyIGZ1bmN0aW9ucwotICovCi1pbnQgcHhhX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGdwaW8gPSBncGlvX21vZGUgJiBHUElPX01EX01BU0tfTlI7Ci0JaW50IGZuID0gKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19GTikgPj4gODsKLQlpbnQgZ2FmcjsKLQotCWlmIChncGlvID4gcHhhX2xhc3RfZ3BpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9MT1cpCi0JCUdQQ1IoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKLQllbHNlIGlmIChncGlvX21vZGUgJiBHUElPX0RGTFRfSElHSCkKLQkJR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOwotCWlmIChncGlvX21vZGUgJiBHUElPX01EX01BU0tfRElSKQotCQlHUERSKGdwaW8pIHw9IEdQSU9fYml0KGdwaW8pOwotCWVsc2UKLQkJR1BEUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7Ci0JZ2FmciA9IEdBRlIoZ3BpbykgJiB+KDB4MyA8PCAoKChncGlvKSAmIDB4ZikqMikpOwotCUdBRlIoZ3BpbykgPSBnYWZyIHwgIChmbiAgPDwgKCgoZ3BpbykgJiAweGYpKjIpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocHhhX2dwaW9fbW9kZSk7Ci0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nICAgICAgICBmbGFnczsKLQl1MzIgICAgICAgICAgICAgICAgICBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyICAgICAgICAgICAgICAgICAgdmFsdWU7Ci0Jc3RydWN0IHB4YV9ncGlvX2NoaXAgKnB4YTsKLQl2b2lkIF9faW9tZW0gICAgICAgICAqZ3BkcjsKLQotCXB4YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCwgY2hpcCk7Ci0JZ3BkciA9IHB4YS0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKGdwZHIpOwotCWlmIChfX2dwaW9faXNfaW52ZXJ0ZWQoY2hpcC0+YmFzZSArIG9mZnNldCkpCi0JCXZhbHVlIHw9IG1hc2s7Ci0JZWxzZQotCQl2YWx1ZSAmPSB+bWFzazsKLQlfX3Jhd193cml0ZWwodmFsdWUsIGdwZHIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHB4YV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgZmxhZ3M7Ci0JdTMyICAgICAgICAgICAgICAgICAgbWFzayA9IDEgPDwgb2Zmc2V0OwotCXUzMiAgICAgICAgICAgICAgICAgIHRtcDsKLQlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqcHhhOwotCXZvaWQgX19pb21lbSAgICAgICAgICpncGRyOwotCi0JcHhhID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBweGFfZ3Bpb19jaGlwLCBjaGlwKTsKLQlfX3Jhd193cml0ZWwobWFzaywKLQkJCXB4YS0+cmVnYmFzZSArICh2YWx1ZSA/IEdQU1JfT0ZGU0VUIDogR1BDUl9PRkZTRVQpKTsKLQlncGRyID0gcHhhLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQ7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRtcCA9IF9fcmF3X3JlYWRsKGdwZHIpOwotCWlmIChfX2dwaW9faXNfaW52ZXJ0ZWQoY2hpcC0+YmFzZSArIG9mZnNldCkpCi0JCXRtcCAmPSB+bWFzazsKLQllbHNlCi0JCXRtcCB8PSBtYXNrOwotCV9fcmF3X3dyaXRlbCh0bXAsIGdwZHIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmV0dXJuIEdQSU8gbGV2ZWwKLSAqLwotc3RhdGljIGludCBweGFfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXUzMiAgICAgICAgICAgICAgICAgIG1hc2sgPSAxIDw8IG9mZnNldDsKLQlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqcHhhOwotCi0JcHhhID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBweGFfZ3Bpb19jaGlwLCBjaGlwKTsKLQlyZXR1cm4gX19yYXdfcmVhZGwocHhhLT5yZWdiYXNlICsgR1BMUl9PRkZTRVQpICYgbWFzazsKLX0KLQotLyoKLSAqIFNldCBvdXRwdXQgR1BJTyBsZXZlbAotICovCi1zdGF0aWMgdm9pZCBweGFfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0JdTMyICAgICAgICAgICAgICAgICAgbWFzayA9IDEgPDwgb2Zmc2V0OwotCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpweGE7Ci0KLQlweGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHB4YV9ncGlvX2NoaXAsIGNoaXApOwotCi0JaWYgKHZhbHVlKQotCQlfX3Jhd193cml0ZWwobWFzaywgcHhhLT5yZWdiYXNlICsgR1BTUl9PRkZTRVQpOwotCWVsc2UKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHB4YS0+cmVnYmFzZSArIEdQQ1JfT0ZGU0VUKTsKLX0KLQotI2RlZmluZSBHUElPX0NISVAoX24pCQkJCQkJCVwKLQlbX25dID0gewkJCQkJCQlcCi0JCS5yZWdiYXNlID0gR1BJTyMjX24jI19CQVNFLAkJCQlcCi0JCS5jaGlwID0gewkJCQkJCVwKLQkJCS5sYWJlbAkJICA9ICJncGlvLSIgI19uLAkJXAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCVwKLQkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dCwJXAotCQkJLmdldAkJICA9IHB4YV9ncGlvX2dldCwJCVwKLQkJCS5zZXQJCSAgPSBweGFfZ3Bpb19zZXQsCQlcCi0JCQkuYmFzZQkJICA9IChfbikgKiAzMiwJCQlcCi0JCQkubmdwaW8JCSAgPSAzMiwJCQkJXAotCQl9LAkJCQkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IHB4YV9ncGlvX2NoaXAgcHhhX2dwaW9fY2hpcFtdID0gewotCUdQSU9fQ0hJUCgwKSwKLQlHUElPX0NISVAoMSksCi0JR1BJT19DSElQKDIpLAotI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQotCUdQSU9fQ0hJUCgzKSwKLSNlbmRpZgotfTsKLQotLyoKLSAqIFBYQSBHUElPIGVkZ2UgZGV0ZWN0aW9uIGZvciBJUlFzOgotICogSVJRcyBhcmUgZ2VuZXJhdGVkIG9uIEZhbGxpbmctRWRnZSwgUmlzaW5nLUVkZ2UsIG9yIGJvdGguCi0gKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHNldHRpbmcgR1JFUi9HRkVSLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEdQSU9fSVJRX3Jpc2luZ19lZGdlWzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgR1BJT19JUlFfZmFsbGluZ19lZGdlWzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgR1BJT19JUlFfbWFza1s0XTsKLQotLyoKLSAqIE9uIFBYQTI1eCBhbmQgUFhBMjd4LCBHQUZSeCBhbmQgR1BEUnggdG9nZXRoZXIgZGVjaWRlIHRoZSBhbHRlcm5hdGUKLSAqIGZ1bmN0aW9uIG9mIGEgR1BJTywgYW5kIEdQRFJ4IGNhbm5vdCBiZSBhbHRlcmVkIG9uY2UgY29uZmlndXJlZC4gSXQKLSAqIGlzIGF0dHJpYnV0ZWQgYXMgIm9jY3VwaWVkIiBoZXJlIChJIGtub3cgdGhpcyB0ZXJtaW5vbG9neSBpc24ndAotICogYWNjdXJhdGUsIHlvdSBhcmUgd2VsY29tZSB0byBwcm9wb3NlIGEgYmV0dGVyIG9uZSA6LSkKLSAqLwotc3RhdGljIGludCBfX2dwaW9faXNfb2NjdXBpZWQodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoY3B1X2lzX3B4YTI3eCgpIHx8IGNwdV9pc19weGEyNXgoKSkgewotCQlpbnQgYWYgPSAoR0FGUihncGlvKSA+PiAoKGdwaW8gJiAweGYpICogMikpICYgMHgzOwotCQlpbnQgZGlyID0gR1BEUihncGlvKSAmIEdQSU9fYml0KGdwaW8pOwotCi0JCWlmIChfX2dwaW9faXNfaW52ZXJ0ZWQoZ3BpbykpCi0JCQlyZXR1cm4gYWYgIT0gMSB8fCBkaXIgPT0gMDsKLQkJZWxzZQotCQkJcmV0dXJuIGFmICE9IDAgfHwgZGlyICE9IDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHhhX2dwaW9faXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JaW50IGdwaW8sIGlkeDsKLQotCWdwaW8gPSBJUlFfVE9fR1BJTyhpcnEpOwotCWlkeCA9IGdwaW8gPj4gNTsKLQotCWlmICh0eXBlID09IElSUV9UWVBFX1BST0JFKSB7Ci0JCS8qIERvbid0IG1lc3Mgd2l0aCBlbmFibGVkIEdQSU9zIHVzaW5nIHByZWNvbmZpZ3VyZWQgZWRnZXMgb3IKLQkJICogR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBvciB0byBvdXRwdXQgZHVyaW5nIHByb2JlCi0JCSAqLwotCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX2JpdChncGlvKSkgfHwKLQkJICAgIChHUElPX0lSUV9mYWxsaW5nX2VkZ2VbaWR4XSAmIEdQSU9fYml0KGdwaW8pKSkKLQkJCXJldHVybiAwOwotCi0JCWlmIChfX2dwaW9faXNfb2NjdXBpZWQoZ3BpbykpCi0JCQlyZXR1cm4gMDsKLQotCQl0eXBlID0gSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkc7Ci0JfQotCi0JaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChncGlvKSkKLQkJR1BEUihncGlvKSB8PSBHUElPX2JpdChncGlvKTsKLQllbHNlCi0JCUdQRFIoZ3BpbykgJj0gfkdQSU9fYml0KGdwaW8pOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKLQkJX19zZXRfYml0KGdwaW8sIEdQSU9fSVJRX3Jpc2luZ19lZGdlKTsKLQllbHNlCi0JCV9fY2xlYXJfYml0KGdwaW8sIEdQSU9fSVJRX3Jpc2luZ19lZGdlKTsKLQotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQotCQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfZmFsbGluZ19lZGdlKTsKLQllbHNlCi0JCV9fY2xlYXJfYml0KGdwaW8sIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSk7Ci0KLQlHUkVSKGdwaW8pID0gR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKLQlHRkVSKGdwaW8pID0gR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07Ci0KLQlwcl9kZWJ1ZygiJXM6IElSUSVkIChHUElPJWQpIC0gZWRnZSVzJXNcbiIsIF9fZnVuY19fLCBpcnEsIGdwaW8sCi0JCSgodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKSAgPyAiIHJpc2luZyIgIDogIiIpLAotCQkoKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpID8gIiBmYWxsaW5nIiA6ICIiKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBHUElPIElSUXMgbXVzdCBiZSBhY2tub3dsZWRnZWQuICBUaGlzIGlzIGZvciBHUElPIDAgYW5kIDEuCi0gKi8KLQotc3RhdGljIHZvaWQgcHhhX2Fja19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCUdFRFIwID0gKDEgPDwgKGlycSAtIElSUV9HUElPMCkpOwotfQotCi1zdGF0aWMgdm9pZCBweGFfbWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCUlDTVIgJj0gfigxIDw8IChpcnEgLSBQWEFfSVJRKDApKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV91bm1hc2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlJQ01SIHw9IDEgPDwgKGlycSAtIFBYQV9JUlEoMCkpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9sb3dfZ3Bpb19jaGlwID0gewotCS5uYW1lCQk9ICJHUElPLWwiLAotCS5hY2sJCT0gcHhhX2Fja19sb3dfZ3BpbywKLQkubWFzawkJPSBweGFfbWFza19sb3dfZ3BpbywKLQkudW5tYXNrCQk9IHB4YV91bm1hc2tfbG93X2dwaW8sCi0JLnNldF90eXBlCT0gcHhhX2dwaW9faXJxX3R5cGUsCi19OwotCi0vKgotICogRGVtdXggaGFuZGxlciBmb3IgR1BJTz49MiBlZGdlIGRldGVjdCBpbnRlcnJ1cHRzCi0gKi8KLQotI2RlZmluZSBHRURSX0JJVFMJKHNpemVvZihnZWRyKSAqIEJJVFNfUEVSX0JZVEUpCi0KLXN0YXRpYyB2b2lkIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWludCBsb29wLCBiaXQsIG47Ci0JdW5zaWduZWQgbG9uZyBnZWRyWzRdOwotCi0JZG8gewotCQlnZWRyWzBdID0gR0VEUjAgJiBHUElPX0lSUV9tYXNrWzBdICYgfjM7Ci0JCWdlZHJbMV0gPSBHRURSMSAmIEdQSU9fSVJRX21hc2tbMV07Ci0JCWdlZHJbMl0gPSBHRURSMiAmIEdQSU9fSVJRX21hc2tbMl07Ci0JCWdlZHJbM10gPSBHRURSMyAmIEdQSU9fSVJRX21hc2tbM107Ci0KLQkJR0VEUjAgPSBnZWRyWzBdOyBHRURSMSA9IGdlZHJbMV07Ci0JCUdFRFIyID0gZ2VkclsyXTsgR0VEUjMgPSBnZWRyWzNdOwotCi0JCWxvb3AgPSAwOwotCQliaXQgPSBmaW5kX2ZpcnN0X2JpdChnZWRyLCBHRURSX0JJVFMpOwotCQl3aGlsZSAoYml0IDwgR0VEUl9CSVRTKSB7Ci0JCQlsb29wID0gMTsKLQotCQkJbiA9IFBYQV9HUElPX0lSUV9CQVNFICsgYml0OwotCQkJZ2VuZXJpY19oYW5kbGVfaXJxKG4pOwotCi0JCQliaXQgPSBmaW5kX25leHRfYml0KGdlZHIsIEdFRFJfQklUUywgYml0ICsgMSk7Ci0JCX0KLQl9IHdoaWxlIChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgcHhhX2Fja19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGdwaW8gPSBpcnEgLSBJUlFfR1BJTygyKSArIDI7Ci0JR0VEUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOwotfQotCi1zdGF0aWMgdm9pZCBweGFfbWFza19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGdwaW8gPSBpcnEgLSBJUlFfR1BJTygyKSArIDI7Ci0JX19jbGVhcl9iaXQoZ3BpbywgR1BJT19JUlFfbWFzayk7Ci0JR1JFUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7Ci0JR0ZFUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV91bm1hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8oMikgKyAyOwotCWludCBpZHggPSBncGlvID4+IDU7Ci0JX19zZXRfYml0KGdwaW8sIEdQSU9fSVJRX21hc2spOwotCUdSRVIoZ3BpbykgPSBHUElPX0lSUV9yaXNpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwotCUdGRVIoZ3BpbykgPSBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfbXV4ZWRfZ3Bpb19jaGlwID0gewotCS5uYW1lCQk9ICJHUElPIiwKLQkuYWNrCQk9IHB4YV9hY2tfbXV4ZWRfZ3BpbywKLQkubWFzawkJPSBweGFfbWFza19tdXhlZF9ncGlvLAotCS51bm1hc2sJCT0gcHhhX3VubWFza19tdXhlZF9ncGlvLAotCS5zZXRfdHlwZQk9IHB4YV9ncGlvX2lycV90eXBlLAotfTsKLQotdm9pZCBfX2luaXQgcHhhX2luaXRfZ3BpbyhpbnQgZ3Bpb19uciwgc2V0X3dha2VfdCBmbikKLXsKLQlpbnQgaXJxLCBpLCBncGlvOwotCi0JcHhhX2xhc3RfZ3BpbyA9IGdwaW9fbnIgLSAxOwotCi0JLyogY2xlYXIgYWxsIEdQSU8gZWRnZSBkZXRlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fbnI7IGkgKz0gMzIpIHsKLQkJR0ZFUihpKSA9IDA7Ci0JCUdSRVIoaSkgPSAwOwotCQlHRURSKGkpID0gR0VEUihpKTsKLQl9Ci0KLQkvKiBHUElPIDAgYW5kIDEgbXVzdCBoYXZlIHRoZWlyIG1hc2sgYml0IGFsd2F5cyBzZXQgKi8KLQlHUElPX0lSUV9tYXNrWzBdID0gMzsKLQotCWZvciAoaXJxID0gSVJRX0dQSU8wOyBpcnEgPD0gSVJRX0dQSU8xOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX2xvd19ncGlvX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCX0KLQotCWZvciAoaXJxID0gSVJRX0dQSU8oMik7IGlycSA8IElSUV9HUElPKGdwaW9fbnIpOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX211eGVkX2dwaW9fY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0JfQotCi0JLyogSW5zdGFsbCBoYW5kbGVyIGZvciBHUElPPj0yIGVkZ2UgZGV0ZWN0IGludGVycnVwdHMgKi8KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJT18yX3gsIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIpOwotCi0JcHhhX2xvd19ncGlvX2NoaXAuc2V0X3dha2UgPSBmbjsKLQlweGFfbXV4ZWRfZ3Bpb19jaGlwLnNldF93YWtlID0gZm47Ci0KLQkvKiBhZGQgYSBHUElPIGNoaXAgZm9yIGVhY2ggcmVnaXN0ZXIgYmFuay4KLQkgKiB0aGUgbGFzdCBQWEEyNXggcmVnaXN0ZXIgb25seSBjb250YWlucyAyMSBHUElPcwotCSAqLwotCWZvciAoZ3BpbyA9IDAsIGkgPSAwOyBncGlvIDwgZ3Bpb19ucjsgZ3BpbyArPSAzMiwgaSsrKSB7Ci0JCWlmIChncGlvICsgMzIgPiBncGlvX25yKQotCQkJcHhhX2dwaW9fY2hpcFtpXS5jaGlwLm5ncGlvID0gZ3Bpb19uciAtIGdwaW87Ci0JCWdwaW9jaGlwX2FkZCgmcHhhX2dwaW9fY2hpcFtpXS5jaGlwKTsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Bscls0XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2dwZHJbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9ncmVyWzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ2Zlcls0XTsKLQotc3RhdGljIGludCBweGFfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlpbnQgaSwgZ3BpbzsKLQotCWZvciAoZ3BpbyA9IDAsIGkgPSAwOyBncGlvIDwgcHhhX2xhc3RfZ3BpbzsgZ3BpbyArPSAzMiwgaSsrKSB7Ci0JCXNhdmVkX2dwbHJbaV0gPSBHUExSKGdwaW8pOwotCQlzYXZlZF9ncGRyW2ldID0gR1BEUihncGlvKTsKLQkJc2F2ZWRfZ3JlcltpXSA9IEdSRVIoZ3Bpbyk7Ci0JCXNhdmVkX2dmZXJbaV0gPSBHRkVSKGdwaW8pOwotCi0JCS8qIENsZWFyIEdQSU8gdHJhbnNpdGlvbiBkZXRlY3QgYml0cyAqLwotCQlHRURSKGdwaW8pID0gR0VEUihncGlvKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JaW50IGksIGdwaW87Ci0KLQlmb3IgKGdwaW8gPSAwLCBpID0gMDsgZ3BpbyA8IHB4YV9sYXN0X2dwaW87IGdwaW8gKz0gMzIsIGkrKykgewotCQkvKiByZXN0b3JlIGxldmVsIHdpdGggc2V0L2NsZWFyICovCi0JCUdQU1IoZ3BpbykgPSBzYXZlZF9ncGxyW2ldOwotCQlHUENSKGdwaW8pID0gfnNhdmVkX2dwbHJbaV07Ci0KLQkJR1JFUihncGlvKSA9IHNhdmVkX2dyZXJbaV07Ci0JCUdGRVIoZ3BpbykgPSBzYXZlZF9nZmVyW2ldOwotCQlHUERSKGdwaW8pID0gc2F2ZWRfZ3BkcltpXTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotI2RlZmluZSBweGFfZ3Bpb19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhX2dwaW9fcmVzdW1lCQlOVUxMCi0jZW5kaWYKLQotc3RydWN0IHN5c2Rldl9jbGFzcyBweGFfZ3Bpb19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAiZ3BpbyIsCi0JLnN1c3BlbmQJPSBweGFfZ3Bpb19zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhX2dwaW9fcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhX2dwaW9faW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnB4YV9ncGlvX3N5c2NsYXNzKTsKLX0KLQotY29yZV9pbml0Y2FsbChweGFfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwppbmRleCBlMjk2Y2UxLi5jYTk5MTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCkBAIC0zOCwxNCArMzgsMTIgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9ndW1zdGl4Lmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0gewpAQCAtMTkxLDYgKzE4OSwxMSBAQAogCXJldHVybiAwOwogfQogCitpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGFtMzAwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGNhcnJpZXJfYm9hcmRfaW5pdCh2b2lkKQogewogCS8qCkBAIC0xOTgsNiArMjAxLDcgQEAKIAkgKiB0aGV5IGNhbm5vdCBiZSBkZXRlY3RlZCBwcm9ncmFtYXRpY2FsbHkKIAkgKi8KIAlhbTIwMF9pbml0KCk7CisJYW0zMDBfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZ3Vtc3RpeF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYwppbmRleCBkYTZlNDQyLi5mM2QyMjBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKQEAgLTI0LDE0ICsyNCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9oNTAwMC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKwogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogLyoKQEAgLTE1Myw2ICsxNTQsMTMgQEAKIAlHUElPMjNfU1NQMV9TQ0xLLAogCUdQSU8yNV9TU1AxX1RYRCwKIAlHUElPMjZfU1NQMV9SWEQsCisKKwkvKiBJMlMgKi8KKwlHUElPMjhfSTJTX0JJVENMS19PVVQsCisJR1BJTzI5X0kyU19TREFUQV9JTiwKKwlHUElPMzBfSTJTX1NEQVRBX09VVCwKKwlHUElPMzFfSTJTX1NZTkMsCisJR1BJTzMyX0kyU19TWVNDTEssCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaGltYWxheWEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2hpbWFsYXlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhOTlmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2hpbWFsYXlhLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9oaW1hbGF5YS5jCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBIVEMgSGltYWxheWEKKyAqCisgKiBCYXNlZCBvbiAyLjYuMjEtaGgyMCdzIGhpbWFsYXlhLmMgYW5kIGhpbWFsYXlhX2xjZC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFpieW5layBNaWNobCA8WmJ5bmVrLk1pY2hsQHNlem5hbS5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGltYWxheWEgTENEIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9nZW5fcmVncyBoaW1hbGF5YV9sY2RfcmVncyA9IHsKKwkubGNkX2Zvcm1hdCA9ICAgICAgICAweDAwMDAwMDAzLAorCS5sY2RkX2NudGwxID0gICAgICAgIDB4MDAwMDAwMDAsCisJLmxjZGRfY250bDIgPSAgICAgICAgMHgwMDAzZmZmZiwKKwkuZ2VubGNkX2NudGwxID0gICAgICAweDAwZmZmMDAzLAorCS5nZW5sY2RfY250bDIgPSAgICAgIDB4MDAwMDAwMDMsCisJLmdlbmxjZF9jbnRsMyA9ICAgICAgMHgwMDAxMDJhYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGhpbWFsYXlhNF9sY2RfbW9kZSA9IHsKKwkueHJlcyAJCT0gMjQwLAorCS55cmVzIAkJPSAzMjAsCisJLmxlZnRfbWFyZ2luIAk9IDAsCisJLnJpZ2h0X21hcmdpbiAJPSAzMSwKKwkudXBwZXJfbWFyZ2luIAk9IDE1LAorCS5sb3dlcl9tYXJnaW4gCT0gMCwKKwkuY3J0Y19zcwk9IDB4ODAxNTAwMTQsCisJLmNydGNfbHMJPSAweGEwZmIwMGY3LAorCS5jcnRjX2dzCT0gMHhjMDA4MDAwNywKKwkuY3J0Y192cG9zX2dzCT0gMHgwMDA4MDAwNywKKwkuY3J0Y19yZXYJPSAweDAwMDAwMDBhLAorCS5jcnRjX2RjbGsJPSAweDgxNzAwMDMwLAorCS5jcnRjX2djbGsJPSAweDgwMTUwMTBmLAorCS5jcnRjX2dvZQk9IDB4MDAwMDAwMDAsCisJLnBsbF9mcmVxIAk9IDgwLAorCS5waXhjbGtfZGl2aWRlciA9IDE1LAorCS5waXhjbGtfZGl2aWRlcl9yb3RhdGVkID0gMTUsCisJLnBpeGNsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJLnN5c2Nsa19kaXZpZGVyID0gMCwKKwkuc3lzY2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGhpbWFsYXlhNl9sY2RfbW9kZSA9IHsKKwkueHJlcyAJCT0gMjQwLAorCS55cmVzIAkJPSAzMjAsCisJLmxlZnRfbWFyZ2luIAk9IDksCisJLnJpZ2h0X21hcmdpbiAJPSA4LAorCS51cHBlcl9tYXJnaW4gCT0gNSwKKwkubG93ZXJfbWFyZ2luIAk9IDQsCisJLmNydGNfc3MJPSAweDgwMTUwMDE0LAorCS5jcnRjX2xzCT0gMHhhMGZiMDBmNywKKwkuY3J0Y19ncwk9IDB4YzAwODAwMDcsCisJLmNydGNfdnBvc19ncwk9IDB4MDAwODAwMDcsCisJLmNydGNfcmV2CT0gMHgwMDAwMDAwYSwKKwkuY3J0Y19kY2xrCT0gMHhhMTcwMDAzMCwKKwkuY3J0Y19nY2xrCT0gMHg4MDE1MDEwZiwKKwkuY3J0Y19nb2UJPSAweDAwMDAwMDAwLAorCS5wbGxfZnJlcSAJPSA5NSwKKwkucGl4Y2xrX2RpdmlkZXIgPSAweGIsCisJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSA0LAorCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorCS5zeXNjbGtfZGl2aWRlciA9IDEsCisJLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGhpbWFsYXlhX3cxMDBfZ3Bpb19pbmZvID0geworCS5pbml0X2RhdGExID0gMHhmZmZmMDAwMCwJLyogR1BJT19EQVRBICAqLworCS5ncGlvX2RpcjEgID0gMHgwMDAwMDAwMCwJLyogR1BJT19DTlRMMSAqLworCS5ncGlvX29lMSAgID0gMHgwMDNjMDAwMCwJLyogR1BJT19DTlRMMiAqLworCS5pbml0X2RhdGEyID0gMHgwMDAwMDAwMCwJLyogR1BJT19EQVRBMiAqLworCS5ncGlvX2RpcjIgID0gMHgwMDAwMDAwMCwJLyogR1BJT19DTlRMMyAqLworCS5ncGlvX29lMiAgID0gMHgwMDAwMDAwMCwJLyogR1BJT19DTlRMNCAqLworfTsKKworc3RhdGljIHN0cnVjdCB3MTAwZmJfbWFjaF9pbmZvIGhpbWFsYXlhX2ZiX2luZm8gPSB7CisJLm51bV9tb2RlcyAgPSAxLAorCS5yZWdzICAgICAgID0gJmhpbWFsYXlhX2xjZF9yZWdzLAorCS5ncGlvICAgICAgID0gJmhpbWFsYXlhX3cxMDBfZ3Bpb19pbmZvLAorCS54dGFsX2ZyZXEgPSAxNjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGltYWxheWFfZmJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDA4MDAwMDAwLAorCQkuZW5kCT0gMHgwOGZmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhpbWFsYXlhX2ZiX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAidzEwMGZiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZoaW1hbGF5YV9mYl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoaW1hbGF5YV9mYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGhpbWFsYXlhX2ZiX3Jlc291cmNlcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGltYWxheWFfZmJfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGhpbWFsYXlhX2xjZF9pbml0KHZvaWQpCit7CisJaW50IGhpbWFsYXlhX2JvYXJkaWQ7CisKKwloaW1hbGF5YV9ib2FyZGlkID0gMHg0OyAvKiBoYXJkY29kZWQgKGRldGVjdGlvbiBuZWVkcyBBU0lDMyBmdW5jdGlvbnMpICovCisJcHJpbnRrKEtFUk5fSU5GTyAiaGltYWxheWEgTENEIERyaXZlciBpbml0LiBib2FyZGlkPSVkXG4iLAorCQloaW1hbGF5YV9ib2FyZGlkKTsKKworCXN3aXRjaCAoaGltYWxheWFfYm9hcmRpZCkgeworCWNhc2UgMHg0OgorCQloaW1hbGF5YV9mYl9pbmZvLm1vZGVsaXN0ID0gJmhpbWFsYXlhNF9sY2RfbW9kZTsKKwlicmVhazsKKwljYXNlIDB4NjoKKwkJaGltYWxheWFfZmJfaW5mby5tb2RlbGlzdCA9ICZoaW1hbGF5YTZfbGNkX21vZGU7CisJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGltYWxheWEgbGNkX2luaXQ6IHVua25vd24gYm9hcmRpZD0lZC4gVXNpbmcgMHg0XG4iLAorCQkJaGltYWxheWFfYm9hcmRpZCk7CisJCWhpbWFsYXlhX2ZiX2luZm8ubW9kZWxpc3QgPSAmaGltYWxheWE0X2xjZF9tb2RlOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IGhpbWFsYXlhX2luaXQodm9pZCkKK3sKKwloaW1hbGF5YV9sY2RfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCisKK01BQ0hJTkVfU1RBUlQoSElNQUxBWUEsICJIVEMgSGltYWxheWEiKQorCS5waHlzX2lvID0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSA9IHB4YTI1eF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lID0gaGltYWxheWFfaW5pdCwKKwkudGltZXIgPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKaW5kZXggMDEzYjE1Yi4uYjYyNDNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKQEAgLTMxLDggKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2lkcC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL2JpdGZpZWxkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCmluZGV4IDM2NGM1ZTIuLjIxMjEzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCkBAIC0yOCwxMSArMjgsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKaW5kZXggMmFlMzczZi4uM2YyYTAxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCkBAIC0xLDE5ICsxLDMxIEBACiAjaWZuZGVmIF9DT0xJQlJJX0hfCiAjZGVmaW5lIF9DT0xJQlJJX0hfCisvKgorICogY29tbW9uIHNldHRpbmdzIGZvciBhbGwgbW9kdWxlcworICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKK2V4dGVybiB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbW1jKG1mcF9jZmdfdCAqcGlucywgaW50IGxlbiwgaW50IGRldGVjdF9waW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKiwgaW50LCBpbnQpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKK2V4dGVybiB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbGNkKGludCBibF9waW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X2xjZChpbnQpIHt9CisjZW5kaWYKIAogLyogcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgKi8KLSNkZWZpbmUgQ09MSUJSSV9GTEFTSF9QSFlTCShQWEFfQ1MwX1BIWVMpICAvKiBGbGFzaCByZWdpb24gKi8KLSNkZWZpbmUgQ09MSUJSSV9FVEhfUEhZUwkoUFhBX0NTMl9QSFlTKSAgLyogRXRoZXJuZXQgRE05MDAwIHJlZ2lvbiAqLwogI2RlZmluZSBDT0xJQlJJX1NEUkFNX0JBU0UJMHhhMDAwMDAwMCAgICAgIC8qIFNEUkFNIHJlZ2lvbiAqLwogCi0vKiB2aXJ0dWFsIG1lbW9yeSByZWdpb25zICovCi0jZGVmaW5lIENPTElCUklfRElTS19WSVJUCTB4RjAwMDAwMDAJLyogRGlzayBPbiBDaGlwIHJlZ2lvbiAqLworLyogZGVmaW5pdGlvbnMgZm9yIENvbGlicmkgUFhBMjcwICovCiAKLS8qIHNpemUgb2YgZmxhc2ggKi8KLSNkZWZpbmUgQ09MSUJSSV9GTEFTSF9TSVpFCTB4MDIwMDAwMDAJLyogRmxhc2ggc2l6ZSAzMiBNQiAqLwotCi0vKiBFdGhlcm5ldCBDb250cm9sbGVyIERhdmljb20gRE05MDAwICovCi0jZGVmaW5lIEdQSU9fRE05MDAwCQkxMTQKLSNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRCUlSUV9HUElPKEdQSU9fRE05MDAwKQorI2RlZmluZSBDT0xJQlJJX1BYQTI3MF9GTEFTSF9QSFlTCShQWEFfQ1MwX1BIWVMpICAvKiBGbGFzaCByZWdpb24gKi8KKyNkZWZpbmUgQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMJCShQWEFfQ1MyX1BIWVMpICAvKiBFdGhlcm5ldCAqLworI2RlZmluZSBDT0xJQlJJX1BYQTI3MF9FVEhfSVJRX0dQSU8JMTE0CisjZGVmaW5lIENPTElCUklfUFhBMjcwX0VUSF9JUlEJCVwKKwlncGlvX3RvX2lycShtZnBfdG9fZ3BpbyhDT0xJQlJJX1BYQTI3MF9FVEhfSVJRX0dQSU8pKQogCiAjZW5kaWYgLyogX0NPTElCUklfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NzYjcyNi5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NzYjcyNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2FiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY3NiNzI2LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqICBTdXBwb3J0IGZvciBDb2dlbnQgQ1NCNzI2CisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBEbWl0cnkgQmFyeXNoa292CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpZm5kZWYgQ1NCNzI2X0gKKyNkZWZpbmUgQ1NCNzI2X0gKKworI2RlZmluZSBDU0I3MjZfR1BJT19JUlFfTEFOCTUyCisjZGVmaW5lIENTQjcyNl9HUElPX0lSUV9TTTUwMQk1MworI2RlZmluZSBDU0I3MjZfR1BJT19NTUNfREVURUNUCTEwMAorI2RlZmluZSBDU0I3MjZfR1BJT19NTUNfUk8JMTAxCisKKyNkZWZpbmUgQ1NCNzI2X0ZMQVNIX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIENTQjcyNl9GTEFTSF91TU9OCSg4ICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgQ1NCNzI2X0lSUV9MQU4JCWdwaW9fdG9faXJxKENTQjcyNl9HUElPX0lSUV9MQU4pCisjZGVmaW5lIENTQjcyNl9JUlFfU001MDEJZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fSVJRX1NNNTAxKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IDc4MDQ2MzcuLjViZDU1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTEyLDM1ICsxMiwxMCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAotLyoKLSAqIERlc2NyaXB0b3Igc3RydWN0dXJlIGZvciBQWEEncyBETUEgZW5naW5lCi0gKiBOb3RlOiB0aGlzIHN0cnVjdHVyZSBtdXN0IGFsd2F5cyBiZSBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeS4KLSAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgcHhhX2RtYV9kZXNjIHsKLQl2b2xhdGlsZSB1MzIgZGRhZHI7CS8qIFBvaW50cyB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICsgZmxhZ3MgKi8KLQl2b2xhdGlsZSB1MzIgZHNhZHI7CS8qIERTQURSIHZhbHVlIGZvciB0aGUgY3VycmVudCB0cmFuc2ZlciAqLwotCXZvbGF0aWxlIHUzMiBkdGFkcjsJLyogRFRBRFIgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCi0Jdm9sYXRpbGUgdTMyIGRjbWQ7CS8qIERDTUQgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCi19IHB4YV9kbWFfZGVzYzsKKy8qIERNQSBDb250cm9sbGVyIFJlZ2lzdGVycyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBETUFDX1JFR1NfVklSVAlpb19wMnYoMHg0MDAwMDAwMCkKIAotdHlwZWRlZiBlbnVtIHsKLQlETUFfUFJJT19ISUdIID0gMCwKLQlETUFfUFJJT19NRURJVU0gPSAxLAotCURNQV9QUklPX0xPVyA9IDIKLX0gcHhhX2RtYV9wcmlvOwotCi0vKgotICogRE1BIHJlZ2lzdHJhdGlvbgotICovCi0KLWludCBfX2luaXQgcHhhX2luaXRfZG1hKGludCBudW1fY2gpOwotCi1pbnQgcHhhX3JlcXVlc3RfZG1hIChjaGFyICpuYW1lLAotCQkJIHB4YV9kbWFfcHJpbyBwcmlvLAotCQkJIHZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopLAotCQkJIHZvaWQgKmRhdGEpOwotCi12b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCk7Ci0KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCmluZGV4IGVmYmQyYWEuLmYzZTU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKQEAgLTQ1LDYgKzQ1LDIxIEBACiAvKiBlN3h4IElyREEgcG93ZXIgY29udHJvbCAqLwogI2RlZmluZSBHUElPX0U3WFhfSVJfT0ZGICAgICAgICAgMzgKIAorLyogZTc0MCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyICAxNgorI2RlZmluZSBHUElPX0U3NDBfTUlDX09OICAgICAgICAgNDAKKyNkZWZpbmUgR1BJT19FNzQwX0FNUF9PTiAgICAgICAgIDQxCisKKy8qIGU3NTAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U3NTBfSFBfQU1QX09GRiAgICAgIDQKKyNkZWZpbmUgR1BJT19FNzUwX1NQS19BTVBfT0ZGICAgICA3CisjZGVmaW5lIEdQSU9fRTc1MF9IUF9ERVRFQ1QgICAgICAzNworCisvKiBlODAwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FODAwX0hQX0RFVEVDVCAgICAgIDgxCisjZGVmaW5lIEdQSU9fRTgwMF9IUF9BTVBfT0ZGICAgICA4MgorI2RlZmluZSBHUElPX0U4MDBfU1BLX0FNUF9PTiAgICAgODMKKwogLyogQVNJQyByZWxhdGVkIEdQSU9zICovCiAjZGVmaW5lIEdQSU9fRVNFUklFU19UTUlPX0lSUSAgICAgICAgNQogI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19QQ0xSICAgICAgMTkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDJjNTM4ZDguLmIwMjRhOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjQsNDIgKzI0LDExOCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1BYQV9HUElPX0gKICNkZWZpbmUgX19BU01fQVJDSF9QWEFfR1BJT19ICiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIAorI2RlZmluZSBHUElPX1JFR1NfVklSVAlpb19wMnYoMHg0MEUwMDAwMCkKIAotLyogTk9URTogc29tZSBQWEFzIGhhdmUgZmV3ZXIgb24tY2hpcCBHUElPcyAobGlrZSBQWEEyNTUsIHdpdGggODUpLgotICogVGhvc2UgY2FzZXMgY3VycmVudGx5IGNhdXNlIGhvbGVzIGluIHRoZSBHUElPIG51bWJlciBzcGFjZS4KLSAqLworI2RlZmluZSBCQU5LX09GRihuKQkoKChuKSA8IDMpID8gKG4pIDw8IDIgOiAweDEwMCArICgoKG4pIC0gMykgPDwgMikpCisjZGVmaW5lIEdQSU9fUkVHKHgpCSgqKHZvbGF0aWxlIHUzMiAqKShHUElPX1JFR1NfVklSVCArICh4KSkpCisKKy8qIEdQSU8gUGluIExldmVsIFJlZ2lzdGVycyAqLworI2RlZmluZSBHUExSMAkJR1BJT19SRUcoQkFOS19PRkYoMCkgKyAweDAwKQorI2RlZmluZSBHUExSMQkJR1BJT19SRUcoQkFOS19PRkYoMSkgKyAweDAwKQorI2RlZmluZSBHUExSMgkJR1BJT19SRUcoQkFOS19PRkYoMikgKyAweDAwKQorI2RlZmluZSBHUExSMwkJR1BJT19SRUcoQkFOS19PRkYoMykgKyAweDAwKQorCisvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEdQRFIwCQlHUElPX1JFRyhCQU5LX09GRigwKSArIDB4MGMpCisjZGVmaW5lIEdQRFIxCQlHUElPX1JFRyhCQU5LX09GRigxKSArIDB4MGMpCisjZGVmaW5lIEdQRFIyCQlHUElPX1JFRyhCQU5LX09GRigyKSArIDB4MGMpCisjZGVmaW5lIEdQRFIzCQlHUElPX1JFRyhCQU5LX09GRigzKSArIDB4MGMpCisKKy8qIEdQSU8gUGluIE91dHB1dCBTZXQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdQU1IwCQlHUElPX1JFRyhCQU5LX09GRigwKSArIDB4MTgpCisjZGVmaW5lIEdQU1IxCQlHUElPX1JFRyhCQU5LX09GRigxKSArIDB4MTgpCisjZGVmaW5lIEdQU1IyCQlHUElPX1JFRyhCQU5LX09GRigyKSArIDB4MTgpCisjZGVmaW5lIEdQU1IzCQlHUElPX1JFRyhCQU5LX09GRigzKSArIDB4MTgpCisKKy8qIEdQSU8gUGluIE91dHB1dCBDbGVhciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BDUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgyNCkKKyNkZWZpbmUgR1BDUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgyNCkKKyNkZWZpbmUgR1BDUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgyNCkKKyNkZWZpbmUgR1BDUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgyNCkKKworLyogR1BJTyBSaXNpbmcgRWRnZSBEZXRlY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdSRVIwCQlHUElPX1JFRyhCQU5LX09GRigwKSArIDB4MzApCisjZGVmaW5lIEdSRVIxCQlHUElPX1JFRyhCQU5LX09GRigxKSArIDB4MzApCisjZGVmaW5lIEdSRVIyCQlHUElPX1JFRyhCQU5LX09GRigyKSArIDB4MzApCisjZGVmaW5lIEdSRVIzCQlHUElPX1JFRyhCQU5LX09GRigzKSArIDB4MzApCisKKy8qIEdQSU8gRmFsbGluZyBFZGdlIERldGVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0ZFUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgzYykKKyNkZWZpbmUgR0ZFUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgzYykKKyNkZWZpbmUgR0ZFUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgzYykKKyNkZWZpbmUgR0ZFUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgzYykKKworLyogR1BJTyBFZGdlIERldGVjdCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdFRFIwCQlHUElPX1JFRyhCQU5LX09GRigwKSArIDB4NDgpCisjZGVmaW5lIEdFRFIxCQlHUElPX1JFRyhCQU5LX09GRigxKSArIDB4NDgpCisjZGVmaW5lIEdFRFIyCQlHUElPX1JFRyhCQU5LX09GRigyKSArIDB4NDgpCisjZGVmaW5lIEdFRFIzCQlHUElPX1JFRyhCQU5LX09GRigzKSArIDB4NDgpCisKKy8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0FGUjBfTAkJR1BJT19SRUcoMHgwMDU0KQorI2RlZmluZSBHQUZSMF9VCQlHUElPX1JFRygweDAwNTgpCisjZGVmaW5lIEdBRlIxX0wJCUdQSU9fUkVHKDB4MDA1QykKKyNkZWZpbmUgR0FGUjFfVQkJR1BJT19SRUcoMHgwMDYwKQorI2RlZmluZSBHQUZSMl9MCQlHUElPX1JFRygweDAwNjQpCisjZGVmaW5lIEdBRlIyX1UJCUdQSU9fUkVHKDB4MDA2OCkKKyNkZWZpbmUgR0FGUjNfTAkJR1BJT19SRUcoMHgwMDZDKQorI2RlZmluZSBHQUZSM19VCQlHUElPX1JFRygweDAwNzApCisKKy8qIE1vcmUgaGFuZHkgbWFjcm9zLiAgVGhlIGFyZ3VtZW50IGlzIGEgbGl0ZXJhbCBHUElPIG51bWJlci4gKi8KKworI2RlZmluZSBHUElPX2JpdCh4KQkoMSA8PCAoKHgpICYgMHgxZikpCisKKyNkZWZpbmUgR1BMUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHgwMCkKKyNkZWZpbmUgR1BEUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHgwYykKKyNkZWZpbmUgR1BTUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHgxOCkKKyNkZWZpbmUgR1BDUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHgyNCkKKyNkZWZpbmUgR1JFUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHgzMCkKKyNkZWZpbmUgR0ZFUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHgzYykKKyNkZWZpbmUgR0VEUih4KQkJR1BJT19SRUcoQkFOS19PRkYoKHgpID4+IDUpICsgMHg0OCkKKyNkZWZpbmUgR0FGUih4KQkJR1BJT19SRUcoMHg1NCArICgoKHgpICYgMHg3MCkgPj4gMikpCisKKwogI2RlZmluZSBOUl9CVUlMVElOX0dQSU8gMTI4CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pICYmIChncGlvIDwgTlJfQlVJTFRJTl9HUElPKSkKLQkJcmV0dXJuIEdQTFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKLQllbHNlCi0JCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChncGlvKSAmJiAoZ3BpbyA8IE5SX0JVSUxUSU5fR1BJTykpIHsKLQkJaWYgKHZhbHVlKQotCQkJR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOwotCQllbHNlCi0JCQlHUENSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci0JfSBlbHNlIHsKLQkJX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci0JfQotfQotCi0jZGVmaW5lIGdwaW9fY2Fuc2xlZXAgX19ncGlvX2NhbnNsZWVwCi0KKyNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKICNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJSVJRX0dQSU8oZ3BpbykKICNkZWZpbmUgaXJxX3RvX2dwaW8oaXJxKQlJUlFfVE9fR1BJTyhpcnEpCiAKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAorLyogR1BJTzg2Lzg3Lzg4Lzg5IG9uIFBYQTI2eCBoYXZlIHRoZWlyIGRpcmVjdGlvbiBiaXRzIGluIEdQRFIyIGludmVydGVkLAorICogYXMgd2VsbCBhcyB0aGVpciBBbHRlcm5hdGUgRnVuY3Rpb24gdmFsdWUgYmVpbmcgJzEnIGZvciBHUElPIGluIEdBRlJ4LgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2dwaW9faXNfaW52ZXJ0ZWQodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gY3B1X2lzX3B4YTI1eCgpICYmIGdwaW8gPiA4NTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBfX2dwaW9faXNfaW52ZXJ0ZWQodW5zaWduZWQgZ3BpbykgeyByZXR1cm4gMDsgfQorI2VuZGlmCiAKKy8qCisgKiBPbiBQWEEyNXggYW5kIFBYQTI3eCwgR0FGUnggYW5kIEdQRFJ4IHRvZ2V0aGVyIGRlY2lkZSB0aGUgYWx0ZXJuYXRlCisgKiBmdW5jdGlvbiBvZiBhIEdQSU8sIGFuZCBHUERSeCBjYW5ub3QgYmUgYWx0ZXJlZCBvbmNlIGNvbmZpZ3VyZWQuIEl0CisgKiBpcyBhdHRyaWJ1dGVkIGFzICJvY2N1cGllZCIgaGVyZSAoSSBrbm93IHRoaXMgdGVybWlub2xvZ3kgaXNuJ3QKKyAqIGFjY3VyYXRlLCB5b3UgYXJlIHdlbGNvbWUgdG8gcHJvcG9zZSBhIGJldHRlciBvbmUgOi0pCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZ3Bpb19pc19vY2N1cGllZCh1bnNpZ25lZCBncGlvKQoreworCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSB7CisJCWludCBhZiA9IChHQUZSKGdwaW8pID4+ICgoZ3BpbyAmIDB4ZikgKiAyKSkgJiAweDM7CisJCWludCBkaXIgPSBHUERSKGdwaW8pICYgR1BJT19iaXQoZ3Bpbyk7CisKKwkJaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChncGlvKSkKKwkJCXJldHVybiBhZiAhPSAxIHx8IGRpciA9PSAwOworCQllbHNlCisJCQlyZXR1cm4gYWYgIT0gMCB8fCBkaXIgIT0gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIEdQRFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKK30KKworI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Vtc3RpeC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2d1bXN0aXguaAppbmRleCAwOTlmNTRhLi4wNmFiZDQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Vtc3RpeC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmgKQEAgLTk3LDQgKzk3LDUgQEAKIAogLyogZm9yIGV4cGFuc2lvbiBib2FyZHMgdGhhdCBjYW4ndCBiZSBwcm9ncmFtYXRpY2FsbHkgZGV0ZWN0ZWQgKi8KIGV4dGVybiBpbnQgYW0yMDBfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgYW0zMDBfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2x1YmJvY2suaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9sdWJib2NrLmgKaW5kZXggNGNiMjQxNS4uNzUxYjc0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2x1YmJvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHViYm9jay5oCkBAIC0yNSw3ICsyNSw2IEBACiAKIC8qIEZQR0EgcmVnaXN0ZXIgdmlydHVhbCBhZGRyZXNzZXMgKi8KICNkZWZpbmUgTFVCX1dIT0FNSQkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwMDApCi0jZGVmaW5lIExVQl9IRVhMRUQJCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDEwKQogI2RlZmluZSBMVUJfRElTQ19CTE5LX0xFRAlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA0MCkKICNkZWZpbmUgTFVCX0NPTkZfU1dJVENIRVMJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwNTApCiAjZGVmaW5lIExVQl9VU0VSX1NXSVRDSEVTCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDYwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21hZ2ljaWFuLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWFnaWNpYW4uaAppbmRleCAzOGQ2OGQ5Li44MmEzOTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWFnaWNpYW4uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWFnaWNpYW4uaApAQCAtNjksNyArNjksNyBAQAogI2RlZmluZSBJUlFfTUFHSUNJQU5fU0QJCShJUlFfQk9BUkRfU1RBUlQgKyAwKQogI2RlZmluZSBJUlFfTUFHSUNJQU5fRVAJCShJUlFfQk9BUkRfU1RBUlQgKyAxKQogI2RlZmluZSBJUlFfTUFHSUNJQU5fQlQJCShJUlFfQk9BUkRfU1RBUlQgKyAyKQotI2RlZmluZSBJUlFfTUFHSUNJQU5fQUMJCShJUlFfQk9BUkRfU1RBUlQgKyAzKQorI2RlZmluZSBJUlFfTUFHSUNJQU5fVkJVUwkoSVJRX0JPQVJEX1NUQVJUICsgMykKIAogLyoKICAqIENQTEQgRUdQSU9zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyNXguaAppbmRleCBhNzI4NjliLi5iMTNkYzAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTI1WF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTI1WF9ICiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTJ4eC5oPgogCiAvKiBHUElPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyN3guaAppbmRleCBkYTRmODVhLi42NTQzYzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmgKQEAgLTgsNyArOCw2IEBACiAgKiBzcGVjaWZpYyBjb250cm9sbGVyLCBhbmQgdGhpcyBzaG91bGQgd29yayBpbiBtb3N0IGNhc2VzLgogICovCiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTJ4eC5oPgogCiAvKiBOb3RlOiBHUElPMy9HUElPNCB3aWxsIGJlIGRyaXZlbiBieSBQb3dlciBJMkMgd2hlbiBQQ0ZSL1BJMkNfRU4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMnh4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTJ4eC5oCmluZGV4IDNlOTIxMTUuLjY1OGIyOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMnh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyeHguaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBMlhYX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBMlhYX0gKIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KIAogLyoKICAqIHRoZSBmb2xsb3dpbmcgTUZQX3h4eCBiaXQgZGVmaW5pdGlvbnMgaW4gbWZwLmggYXJlIHJlLXVzZWQgZm9yIHB4YTJ4eDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzAwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMwMC5oCmluZGV4IGJjMWZiMzMuLmFlODQ0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMDAuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01GUF9QWEEzMDBfSAogI2RlZmluZSBfX0FTTV9BUkNIX01GUF9QWEEzMDBfSAogCi0jaW5jbHVkZSA8bWFjaC9tZnAuaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEzeHguaD4KIAogLyogR1BJTyAqLwpAQCAtNDEsNiArNDAsNyBAQAogI2VuZGlmCiAKIC8qIENoaXAgU2VsZWN0ICovCisjZGVmaW5lIEdQSU8xX25DUzIJCU1GUF9DRkcoR1BJTzEsCUFGMSkKICNkZWZpbmUgR1BJTzJfbkNTMwkJTUZQX0NGRyhHUElPMiwgIEFGMSkKIAogLyogQUM5NyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMjAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzIwLmgKaW5kZXggNjdmODM4NS4uMDc4OTdlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMjAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMyMC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTMyMF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTMyMF9ICiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgogCiAvKiBHUElPICovCkBAIC0zOCw2ICszNyw3IEBACiAjZGVmaW5lIEdQSU8xN18yX0dQSU8JCU1GUF9DRkcoR1BJTzE3XzIsIEFGMCkKIAogLyogQ2hpcCBTZWxlY3QgKi8KKyNkZWZpbmUgR1BJTzNfbkNTMgkJTUZQX0NGRyhHUElPMywgQUYxKQogI2RlZmluZSBHUElPNF9uQ1MzCQlNRlBfQ0ZHKEdQSU80LCBBRjEpCiAKIC8qIEFDOTcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhM3h4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTN4eC5oCmluZGV4IDFmNmIzNWMuLmQzNzUxOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhM3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzeHguaApAQCAtMSw2OCArMSw5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTNYWF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTNYWF9ICiAKKyNpbmNsdWRlIDxwbGF0L21mcC5oPgorCiAjZGVmaW5lIE1GUFJfQkFTRQkoMHg0MGUxMDAwMCkKLSNkZWZpbmUgTUZQUl9TSVpFCShQQUdFX1NJWkUpCi0KLS8qIE1GUFIgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIE1GUFJfUFVMTF9TRUwJCSgweDEgPDwgMTUpCi0jZGVmaW5lIE1GUFJfUFVMTFVQX0VOCQkoMHgxIDw8IDE0KQotI2RlZmluZSBNRlBSX1BVTExET1dOX0VOCSgweDEgPDwgMTMpCi0jZGVmaW5lIE1GUFJfU0xFRVBfU0VMCQkoMHgxIDw8IDkpCi0jZGVmaW5lIE1GUFJfU0xFRVBfT0VfTgkJKDB4MSA8PCA3KQotI2RlZmluZSBNRlBSX0VER0VfQ0xFQVIJCSgweDEgPDwgNikKLSNkZWZpbmUgTUZQUl9FREdFX0ZBTExfRU4JKDB4MSA8PCA1KQotI2RlZmluZSBNRlBSX0VER0VfUklTRV9FTgkoMHgxIDw8IDQpCi0KLSNkZWZpbmUgTUZQUl9TTEVFUF9EQVRBKHgpCSgoeCkgPDwgOCkKLSNkZWZpbmUgTUZQUl9EUklWRSh4KQkJKCgoeCkgJiAweDcpIDw8IDEwKQotI2RlZmluZSBNRlBSX0FGX1NFTCh4KQkJKCgoeCkgJiAweDcpIDw8IDApCi0KLSNkZWZpbmUgTUZQUl9FREdFX05PTkUJCSgwKQotI2RlZmluZSBNRlBSX0VER0VfUklTRQkJKE1GUFJfRURHRV9SSVNFX0VOKQotI2RlZmluZSBNRlBSX0VER0VfRkFMTAkJKE1GUFJfRURHRV9GQUxMX0VOKQotI2RlZmluZSBNRlBSX0VER0VfQk9USAkJKE1GUFJfRURHRV9SSVNFIHwgTUZQUl9FREdFX0ZBTEwpCi0KLS8qCi0gKiBUYWJsZSB0aGF0IGRldGVybWluZXMgdGhlIGxvdyBwb3dlciBtb2RlcyBvdXRwdXRzLCB3aXRoIGFjdHVhbCBzZXR0aW5ncwotICogdXNlZCBpbiBwYXJlbnRoZXNlcyBmb3IgZG9uJ3QtY2FyZSB2YWx1ZXMuIEV4Y2VwdCBmb3IgdGhlIGZsb2F0IG91dHB1dCwKLSAqIHRoZSBjb25maWd1cmVkIGRyaXZlbiBhbmQgcHVsbGVkIGxldmVscyBtYXRjaCwgc28gaWYgdGhlcmUgaXMgYSBuZWVkIGZvcgotICogbm9uLUxQTSBwdWxsZWQgb3V0cHV0LCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGNvdWxkIHByb2JhYmx5IGJlIHVzZWQuCi0gKgotICogT3V0cHV0IHZhbHVlICBzbGVlcF9vZV9uICBzbGVlcF9kYXRhICBwdWxsdXBfZW4gIHB1bGxkb3duX2VuICBwdWxsX3NlbAotICogICAgICAgICAgICAgICAgIChiaXQgNykgICAgKGJpdCA4KSAgICAoYml0IDE0KSAgICAgKGJpdCAxMykgICAoYml0IDE1KQotICoKLSAqIElucHV0ICAgICAgICAgICAgMCAgICAgICAgICBYKDApICAgICAgICBYKDApICAgICAgICBYKDApICAgICAgIDAKLSAqIERyaXZlIDAgICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgICAwICAgICAgICAgICBYKDEpICAgICAgIDAKLSAqIERyaXZlIDEgICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgICBYKDEpICAgICAgICAwCSAgMAotICogUHVsbCBoaSAoMSkgICAgICAxICAgICAgICAgIFgoMSkgICAgICAgIDEgICAgICAgICAgIDAJICAwCi0gKiBQdWxsIGxvICgwKSAgICAgIDEgICAgICAgICAgWCgwKSAgICAgICAgMCAgICAgICAgICAgMQkgIDAKLSAqIFogKGZsb2F0KSAgICAgICAgMSAgICAgICAgICBYKDApICAgICAgICAwICAgICAgICAgICAwCSAgMAotICovCi0jZGVmaW5lIE1GUFJfTFBNX0lOUFVUCQkoMCkKLSNkZWZpbmUgTUZQUl9MUE1fRFJJVkVfTE9XCShNRlBSX1NMRUVQX0RBVEEoMCkgfCBNRlBSX1BVTExET1dOX0VOKQotI2RlZmluZSBNRlBSX0xQTV9EUklWRV9ISUdIICAgIAkoTUZQUl9TTEVFUF9EQVRBKDEpIHwgTUZQUl9QVUxMVVBfRU4pCi0jZGVmaW5lIE1GUFJfTFBNX1BVTExfTE9XICAgICAgCShNRlBSX0xQTV9EUklWRV9MT1cgIHwgTUZQUl9TTEVFUF9PRV9OKQotI2RlZmluZSBNRlBSX0xQTV9QVUxMX0hJR0ggICAgIAkoTUZQUl9MUE1fRFJJVkVfSElHSCB8IE1GUFJfU0xFRVBfT0VfTikKLSNkZWZpbmUgTUZQUl9MUE1fRkxPQVQgICAgICAgICAJKE1GUFJfU0xFRVBfT0VfTikKLSNkZWZpbmUgTUZQUl9MUE1fTUFTSwkJKDB4ZTA4MCkKLQotLyoKLSAqIFRoZSBwdWxsdXAgYW5kIHB1bGxkb3duIHN0YXRlIG9mIHRoZSBNRlAgcGluIGF0IHJ1biBtb2RlIGlzIGJ5IGRlZmF1bHQKLSAqIGRldGVybWluZWQgYnkgdGhlIHNlbGVjdGVkIGFsdGVybmF0ZSBmdW5jdGlvbi4gSW4gY2FzZSB0aGF0IHNvbWUgYnVnZ3kKLSAqIGRldmljZXMgbmVlZCB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IsICB0aGUgZGVmaW5pdGlvbnMgYmVsb3cKLSAqIGluZGljYXRlcyB0aGUgc2V0dGluZyBvZiBjb3JyZXNwb25kaW5nIE1GUFIgYml0cwotICoKLSAqIERlZmluaXRpb24gICAgICAgcHVsbF9zZWwgIHB1bGx1cF9lbiAgcHVsbGRvd25fZW4KLSAqIE1GUFJfUFVMTF9OT05FICAgICAgIDAgICAgICAgICAwICAgICAgICAwCi0gKiBNRlBSX1BVTExfTE9XICAgICAgICAxICAgICAgICAgMCAgICAgICAgMQotICogTUZQUl9QVUxMX0hJR0ggICAgICAgMSAgICAgICAgIDEgICAgICAgIDAKLSAqIE1GUFJfUFVMTF9CT1RIICAgICAgIDEgICAgICAgICAxICAgICAgICAxCi0gKi8KLSNkZWZpbmUgTUZQUl9QVUxMX05PTkUJCSgwKQotI2RlZmluZSBNRlBSX1BVTExfTE9XCQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTERPV05fRU4pCi0jZGVmaW5lIE1GUFJfUFVMTF9CT1RICQkoTUZQUl9QVUxMX0xPVyB8IE1GUFJfUFVMTFVQX0VOKQotI2RlZmluZSBNRlBSX1BVTExfSElHSAkJKE1GUFJfUFVMTF9TRUwgfCBNRlBSX1BVTExVUF9FTikKIAogLyogUFhBM3h4IGNvbW1vbiBNRlAgY29uZmlndXJhdGlvbnMgLSBwcm9jZXNzb3Igc3BlY2lmaWMgb25lcyBkZWZpbmVkCiAgKiBpbiBtZnAtcHhhMzAwLmggYW5kIG1mcC1weGEzMjAuaApAQCAtMTk3LDU2ICsxMzgsMjEgQEAKICNkZWZpbmUgR1BJTzVfMl9HUElPCQlNRlBfQ0ZHKEdQSU81XzIsIEFGMCkKICNkZWZpbmUgR1BJTzZfMl9HUElPCQlNRlBfQ0ZHKEdQSU82XzIsIEFGMCkKIAotLyoKLSAqIGVhY2ggTUZQIHBpbiB3aWxsIGhhdmUgYSBNRlBSIHJlZ2lzdGVyLCBzaW5jZSB0aGUgb2Zmc2V0IG9mIHRoZQotICogcmVnaXN0ZXIgdmFyaWVzIGJldHdlZW4gcHJvY2Vzc29ycywgdGhlIHByb2Nlc3NvciBzcGVjaWZpYyBjb2RlCi0gKiBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgcGluIG9mZnNldHMgYnkgcHhhM3h4X21mcF9pbml0X2FkZHIoKQotICoKLSAqIHB4YTN4eF9tZnBfaW5pdF9hZGRyIC0gYWNjZXB0cyBhIHRhYmxlIG9mICJweGEzeHhfbWZwX2FkZHJfbWFwIgotICogc3RydWN0dXJlLCB3aGljaCByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgTUZQIHBpbnMgZnJvbSAic3RhcnQiIHRvCi0gKiAiZW5kIiwgd2l0aCB0aGUgb2Zmc2V0IGJlZ2luaW5nIGF0ICJvZmZzZXQiLCB0byBkZWZpbmUgYSBzaW5nbGUKLSAqIHBpbiwgbGV0ICJlbmQiID0gLTEKLSAqCi0gKiB1c2UKLSAqCi0gKiBNRlBfQUREUl9YKCkgdG8gZGVmaW5lIGEgcmFuZ2Ugb2YgcGlucwotICogTUZQX0FERFIoKSAgIHRvIGRlZmluZSBhIHNpbmdsZSBwaW4KLSAqIE1GUF9BRERSX0VORCB0byBzaWduYWwgdGhlIGVuZCBvZiBwaW4gb2Zmc2V0IGRlZmluaXRpb25zCisvKiBOT1RFOiB1c2FnZSBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIG5vdCByZWNvbW1lbmRlZCwKKyAqIHVzZSBweGEzeHhfbWZwX2NvbmZpZygpIGluc3RlYWQuCiAgKi8KLXN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHsKLQl1bnNpZ25lZCBpbnQJc3RhcnQ7Ci0JdW5zaWduZWQgaW50CWVuZDsKLQl1bnNpZ25lZCBsb25nCW9mZnNldDsKLX07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHhhM3h4X21mcF9yZWFkKGludCBtZnApCit7CisJcmV0dXJuIG1mcF9yZWFkKG1mcCk7Cit9CiAKLSNkZWZpbmUgTUZQX0FERFJfWChzdGFydCwgZW5kLCBvZmZzZXQpIFwKLQl7IE1GUF9QSU5fIyNzdGFydCwgTUZQX1BJTl8jI2VuZCwgb2Zmc2V0IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEzeHhfbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCW1mcF93cml0ZShtZnAsIHZhbCk7Cit9CiAKLSNkZWZpbmUgTUZQX0FERFIocGluLCBvZmZzZXQpIFwKLQl7IE1GUF9QSU5fIyNwaW4sIC0xLCBvZmZzZXQgfQotCi0jZGVmaW5lIE1GUF9BRERSX0VORAl7IE1GUF9QSU5fSU5WQUxJRCwgMCB9Ci0KLS8qCi0gKiBweGEzeHhfbWZwX3JlYWQoKS9weGEzeHhfbWZwX3dyaXRlKCkgLSBmb3IgZGlyZWN0IHJlYWQvd3JpdGUgYWNjZXNzCi0gKiB0byB0aGUgTUZQUiByZWdpc3RlcgotICovCi11bnNpZ25lZCBsb25nIHB4YTN4eF9tZnBfcmVhZChpbnQgbWZwKTsKLXZvaWQgcHhhM3h4X21mcF93cml0ZShpbnQgbWZwLCB1bnNpZ25lZCBsb25nIG1mcHJfdmFsKTsKLQotLyoKLSAqIHB4YTN4eF9tZnBfY29uZmlnIC0gY29uZmlndXJlIHRoZSBNRlBSIHJlZ2lzdGVycwotICoKLSAqIHVzZWQgYnkgYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZQotICovCi12b2lkIHB4YTN4eF9tZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKTsKLQotLyoKLSAqIHB4YTN4eF9tZnBfaW5pdF9hZGRyKCkgLSBpbml0aWFsaXplIHRoZSBtYXBwaW5nIGJldHdlZW4gbWZwIHBpbgotICogaW5kZXggYW5kIE1GUFIgcmVnaXN0ZXIgb2Zmc2V0Ci0gKgotICogdXNlZCBieSBwcm9jZXNzb3Igc3BlY2lmaWMgY29kZQotICovCi12b2lkIF9faW5pdCBweGEzeHhfbWZwX2luaXRfYWRkcihzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCAqKTsKLXZvaWQgX19pbml0IHB4YTN4eF9pbml0X21mcCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEzeHhfbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZnLCBpbnQgbnVtKQoreworCW1mcF9jb25maWcobWZwX2NmZywgbnVtKTsKK30KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEEzWFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGE5MzAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTMwLmgKaW5kZXggZmE3M2Y1Ni4uMGQxMTlkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGE5MzAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTkzMC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTl4eF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTl4eF9ICiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgogCiAvKiBHUElPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbXRkLXhpcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL210ZC14aXAuaAppbmRleCBjZmNhODE1Li4yOTczODdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbXRkLXhpcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tdGQteGlwLmgKQEAgLTE1LDggKzE1LDggQEAKICNpZm5kZWYgX19BUkNIX1BYQV9NVERfWElQX0hfXwogI2RlZmluZSBfX0FSQ0hfUFhBX01URF9YSVBfSF9fCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaW50Yy5oPgogCiAjZGVmaW5lIHhpcF9pcnFwZW5kaW5nKCkJKElDSVAgJiBJQ01SKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyOTVhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtbGQuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIEdQSU9zIGFuZCBpbnRlcnJ1cHRzIGZvciBQYWxtIExpZmVEcml2ZSBIYW5kaGVsZCBDb21wdXRlcgorICoKKyAqIEF1dGhvcnM6CUFsZXggT3Nib3JuZSA8YXRvQG1lc2h5Lm9yZz4KKyAqCQlNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfUEFMTUxEX0hfCisjZGVmaW5lIF9JTkNMVURFX1BBTE1MRF9IXworCisvKiogSEVSRSBBUkUgR1BJT3MgKiovCisKKy8qIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0dQSU9fUkVTRVQJMQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9QT1dFUl9ERVRFQ1QJNAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9IT1RTWU5DX0JVVFRPTl9OCTEwCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1BPV0VSX1NXSVRDSAkxMgorI2RlZmluZSBHUElPX05SX1BBTE1MRF9FQVJQSE9ORV9ERVRFQ1QgCTEzCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0xPQ0tfU1dJVENICTE1CisKKy8qIFNEL01NQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTgkxNAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9TRF9QT1dFUgkJMTE0CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZCTExNgorCisvKiBUT1VDSFNDUkVFTiAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9XTTk3MTJfSVJRCTI3CisKKy8qIElSREEgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRQkxMDgKKworLyogTENEL0JBQ0tMSUdIVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9CTF9QT1dFUgkJMTkKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfTENEX1BPV0VSCTk2CisKKy8qIExDRCBCT1JERVIgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfQk9SREVSX1NXSVRDSAkyMQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9CT1JERVJfU0VMRUNUCTIyCisKKy8qIEJMVUVUT09USCAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9CVF9QT1dFUgkJMTcKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfQlRfUkVTRVQJCTgzCisKKy8qIFBDTUNJQSAoV2lGaSkgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfUENNQ0lBX1JFQURZCTM4CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1BDTUNJQV9QT1dFUgkzNgorI2RlZmluZSBHUElPX05SX1BBTE1MRF9QQ01DSUFfUkVTRVQJODEKKworLyogTEVEcyAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9MRURfR1JFRU4JNTIKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfTEVEX0FNQkVSCTk0CisKKy8qIElERSAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9JREVfSVJRCQk5NQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9JREVfUkVTRVQJOTgKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfSURFX1BXRU4JCTExNQorCisvKiBVU0IgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OCTMKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX1JFQURZCTg2CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1VTQl9SRVNFVAk4OAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9VU0JfSU5UCQkxMDYKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX1BPV0VSCTExOAorLyogMjAsIDUzIGFuZCA4NiBhcmUgdXNiIHJlbGF0ZWQgdG9vICovCisKKy8qIElOVEVSUlVQVFMgKi8KKyNkZWZpbmUgSVJRX0dQSU9fUEFMTUxEX0dQSU9fUkVTRVQJSVJRX0dQSU8oR1BJT19OUl9QQUxNTERfR1BJT19SRVNFVCkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTUxEX1NEX0RFVEVDVF9OCUlSUV9HUElPKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKQorI2RlZmluZSBJUlFfR1BJT19QQUxNTERfV005NzEyX0lSUQlJUlFfR1BJTyhHUElPX05SX1BBTE1MRF9XTTk3MTJfSVJRKQorI2RlZmluZSBJUlFfR1BJT19QQUxNTERfSURFX0lSUQkJSVJRX0dQSU8oR1BJT19OUl9QQUxNTERfSURFX0lSUSkKKworCisvKiogSEVSRSBBUkUgSU5JVCBWQUxVRVMgKiovCisKKy8qIElPIG1hcHBpbmdzICovCisjZGVmaW5lIFBBTE1MRF9VU0JfUEhZUwkJUFhBX0NTMl9QSFlTCisjZGVmaW5lIFBBTE1MRF9VU0JfVklSVAkJMHhmMDAwMDAwMAorI2RlZmluZSBQQUxNTERfVVNCX1NJWkUJCTB4MDAxMDAwMDAKKworI2RlZmluZSBQQUxNTERfSURFX1BIWVMJCTB4MjAwMDAwMDAKKyNkZWZpbmUgUEFMTUxEX0lERV9WSVJUCQkweGYxMDAwMDAwCisjZGVmaW5lIFBBTE1MRF9JREVfU0laRQkJMHgwMDEwMDAwMAorCisjZGVmaW5lIFBBTE1MRF9QSFlTX0lPX1NUQVJUCTB4NDAwMDAwMDAKKworLyogQkFUVEVSWSAqLworI2RlZmluZSBQQUxNTERfQkFUX01BWF9WT0xUQUdFCQk0MDAwCS8qIDQuMDBWIG1heGltdW0gdm9sdGFnZSAqLworI2RlZmluZSBQQUxNTERfQkFUX01JTl9WT0xUQUdFCQkzNTUwCS8qIDMuNTVWIGNyaXRpY2FsIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTUxEX0JBVF9NQVhfQ1VSUkVOVAkJMAkvKiB1bmtub2tuICovCisjZGVmaW5lIFBBTE1MRF9CQVRfTUlOX0NVUlJFTlQJCTAJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNTERfQkFUX01BWF9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNTERfQkFUX01JTl9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNTERfTUFYX0xJRkVfTUlOUwkJMjQwCS8qIG9uLWxpZmUgaW4gbWludXRlcyAqLworCisjZGVmaW5lIFBBTE1MRF9CQVRfTUVBU1VSRV9ERUxBWQkoSFogKiAxKQorCisvKiBCQUNLTElHSFQgKi8KKyNkZWZpbmUgUEFMTUxEX01BWF9JTlRFTlNJVFkJCTB4RkUKKyNkZWZpbmUgUEFMTUxEX0RFRkFVTFRfSU5URU5TSVRZCTB4N0UKKyNkZWZpbmUgUEFMTUxEX0xJTUlUX01BU0sJCTB4N0YKKyNkZWZpbmUgUEFMTUxEX1BSRVNDQUxFUgkJMHgzRgorI2RlZmluZSBQQUxNTERfUEVSSU9EX05TCQkzNTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10NS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGIyODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEdQSU9zIGFuZCBpbnRlcnJ1cHRzIGZvciBQYWxtIFR1bmdzdGVufFQ1IEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQXV0aG9yczoJQWxlcyBTbnVwYXJlayA8c251cGFyZWtAYXRsYXMuY3o+CisgKgkJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCQlKdXN0aW4gS2VuZHJpY2sgPHR3aWxpZ2h0c2VudHJ5QGdtYWlsLmNvbT4KKyAqCQlSaWNoYXJkVDUgPHJpY2hhcmRfdDVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfUEFMTVQ1X0hfCisjZGVmaW5lIF9JTkNMVURFX1BBTE1UNV9IXworCisvKiogSEVSRSBBUkUgR1BJT3MgKiovCisKKy8qIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0dQSU9fUkVTRVQJCTEKKworI2RlZmluZSBHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QJCTkwCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0hPVFNZTkNfQlVUVE9OX04JCTEwCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0VBUlBIT05FX0RFVEVDVAkJMTA3CisKKy8qIFNEL01NQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTgkJMTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIJCQkxMTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkJCTExNQorCisvKiBUT1VDSFNDUkVFTiAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9XTTk3MTJfSVJRCQkyNworCisvKiBJUkRBIC0gZGlzYWJsZSBHUElPIGNvbm5lY3RlZCB0byBTRCBwaW4gb2YgdHJhbmNlaXZlciAoVEZCUzQ3MTA/KSA/ICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUJCTQwCisKKy8qIFVTQiAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9VU0JfREVURUNUX04JCTE1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X1VTQl9QT1dFUgkJOTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfVVNCX1BVTExVUAkJOTMKKworLyogTENEL0JBQ0tMSUdIVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9CTF9QT1dFUgkJCTg0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUgkJOTYKKworLyogQkxVRVRPT1RIICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0JUX1BPV0VSCQkJMTcKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfQlRfUkVTRVQJCQk4MworCisvKiBJTlRFUlJVUFRTICovCisjZGVmaW5lIElSUV9HUElPX1BBTE1UNV9TRF9ERVRFQ1RfTglJUlFfR1BJTyhHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTikKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X1dNOTcxMl9JUlEJSVJRX0dQSU8oR1BJT19OUl9QQUxNVDVfV005NzEyX0lSUSkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X1VTQl9ERVRFQ1QJSVJRX0dQSU8oR1BJT19OUl9QQUxNVDVfVVNCX0RFVEVDVCkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X0dQSU9fUkVTRVQJSVJRX0dQSU8oR1BJT19OUl9QQUxNVDVfR1BJT19SRVNFVCkKKworLyoqIEhFUkUgQVJFIElOSVQgVkFMVUVTICoqLworCisvKiBWYXJpb3VzIGFkZHJlc3NlcyAgKi8KKyNkZWZpbmUgUEFMTVQ1X1BIWVNfUkFNX1NUQVJUCTB4YTAwMDAwMDAKKyNkZWZpbmUgUEFMTVQ1X1BIWVNfSU9fU1RBUlQJMHg0MDAwMDAwMAorCisvKiBUT1VDSFNDUkVFTiAqLworI2RlZmluZSBBQzk3X0xJTktfRlJBTUUJCTIxCisKKy8qIEJBVFRFUlkgKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NQVhfVk9MVEFHRQkJNDAwMAkvKiA0LjAwdiBjdXJyZW50IHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NSU5fVk9MVEFHRQkJMzU1MAkvKiAzLjU1diBjcml0aWNhbCB2b2x0YWdlICovCisjZGVmaW5lIFBBTE1UNV9CQVRfTUFYX0NVUlJFTlQJCTAJLyogdW5rbm9rbiAqLworI2RlZmluZSBQQUxNVDVfQkFUX01JTl9DVVJSRU5UCQkwCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NQVhfQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NSU5fQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVQ1X01BWF9MSUZFX01JTlMJCTM2MCAgICAvKiBvbi1saWZlIGluIG1pbnV0ZXMgKi8KKworI2RlZmluZSBQQUxNVDVfQkFUX01FQVNVUkVfREVMQVkJKEhaICogMSkKKworLyogQkFDS0xJR0hUICovCisjZGVmaW5lIFBBTE1UNV9NQVhfSU5URU5TSVRZCQkweEZFCisjZGVmaW5lIFBBTE1UNV9ERUZBVUxUX0lOVEVOU0lUWQkweDdFCisjZGVmaW5lIFBBTE1UNV9MSU1JVF9NQVNLCQkweDdGCisjZGVmaW5lIFBBTE1UNV9QUkVTQ0FMRVIJCTB4M0YKKyNkZWZpbmUgUEFMTVQ1X1BFUklPRF9OUwkJMzUwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmgKaW5kZXggODMzNDI0Ni4uYTZlZWVmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTI3LDMgKzI3LDEzIEBACiBleHRlcm4gdm9pZCBweGFfY3B1X3Jlc3VtZSh2b2lkKTsKIAogZXh0ZXJuIGludCBweGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKKworLyogTk9URTogdGhpcyBpcyBmb3IgUE0gZGVidWdnaW5nIG9uIEx1YmJvY2ssICBpdCdzIHJlYWxseSBhIGJpZworICogdWdseSwgYnV0IGxldCdzIGtlZXAgdGhlIGNyYXAgbWluaW11bSBoZXJlLCBpbnN0ZWFkIG9mIGRpcmVjdAorICogYWNjZXNzaW5nIHRoZSBMVUJCT0NLIENQTEQgcmVnaXN0ZXJzIGluIGFyY2gvYXJtL21hY2gtcHhhL3BtLmMKKyAqLworI2lmZGVmIENPTkZJR19BUkNIX0xVQkJPQ0sKK2V4dGVybiB2b2lkIGx1YmJvY2tfc2V0X2hleGxlZCh1aW50MzJfdCB2YWx1ZSk7CisjZWxzZQorI2RlZmluZSBsdWJib2NrX3NldF9oZXhsZWQoeCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YS1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhLXJlZ3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFkNjE1YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhLXJlZ3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCi0gKgotICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQotICogIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQotICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fUFhBX1JFR1NfSAotI2RlZmluZSBfX1BYQV9SRUdTX0gKLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotLyoKLSAqIFBYQSBDaGlwIHNlbGVjdHMKLSAqLwotCi0jZGVmaW5lIFBYQV9DUzBfUEhZUwkweDAwMDAwMDAwCi0jZGVmaW5lIFBYQV9DUzFfUEhZUwkweDA0MDAwMDAwCi0jZGVmaW5lIFBYQV9DUzJfUEhZUwkweDA4MDAwMDAwCi0jZGVmaW5lIFBYQV9DUzNfUEhZUwkweDBDMDAwMDAwCi0jZGVmaW5lIFBYQV9DUzRfUEhZUwkweDEwMDAwMDAwCi0jZGVmaW5lIFBYQV9DUzVfUEhZUwkweDE0MDAwMDAwCi0KLQotLyoKLSAqIFBlcnNvbmFsIENvbXB1dGVyIE1lbW9yeSBDYXJkIEludGVybmF0aW9uYWwgQXNzb2NpYXRpb24gKFBDTUNJQSkgc29ja2V0cwotICovCi0KLSNkZWZpbmUgUENNQ0lBUHJ0U3AJMHgwNDAwMDAwMAkvKiBQQ01DSUEgUGFydGl0aW9uIFNwYWNlIFtieXRlXSAgICovCi0jZGVmaW5lIFBDTUNJQVNwCSg0KlBDTUNJQVBydFNwKQkvKiBQQ01DSUEgU3BhY2UgW2J5dGVdICAgICAgICAgICAgICovCi0jZGVmaW5lIFBDTUNJQUlPU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgICAqLwotI2RlZmluZSBQQ01DSUFBdHRyU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gICAqLwotI2RlZmluZSBQQ01DSUFNZW1TcAlQQ01DSUFQcnRTcAkvKiBQQ01DSUEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAgICovCi0KLSNkZWZpbmUgUENNQ0lBMFNwCVBDTUNJQVNwCS8qIFBDTUNJQSAwIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KLSNkZWZpbmUgUENNQ0lBMElPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMCBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCi0jZGVmaW5lIFBDTUNJQTBBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAwIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KLSNkZWZpbmUgUENNQ0lBME1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAwIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KLQotI2RlZmluZSBQQ01DSUExU3AJUENNQ0lBU3AJLyogUENNQ0lBIDEgU3BhY2UgW2J5dGVdICAgICAgICAgICAqLwotI2RlZmluZSBQQ01DSUExSU9TcAlQQ01DSUFJT1NwCS8qIFBDTUNJQSAxIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgKi8KLSNkZWZpbmUgUENNQ0lBMUF0dHJTcAlQQ01DSUFBdHRyU3AJLyogUENNQ0lBIDEgQXR0cmlidXRlIFNwYWNlIFtieXRlXSAqLwotI2RlZmluZSBQQ01DSUExTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLwotCi0jZGVmaW5lIF9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCi0jZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQSAoTmIpCS8qIFBDTUNJQSBJL08gWzAuLjFdICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQUF0dHIoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBBdHRyaWJ1dGUgWzAuLjFdICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoX1BDTUNJQSAoTmIpICsgMipQQ01DSUFQcnRTcCkKLSNkZWZpbmUgX1BDTUNJQU1lbShOYikJICAgICAgICAJLyogUENNQ0lBIE1lbW9yeSBbMC4uMV0gICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShfUENNQ0lBIChOYikgKyAzKlBDTUNJQVBydFNwKQotCi0jZGVmaW5lIF9QQ01DSUEwCV9QQ01DSUEgKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8gKDApCS8qIFBDTUNJQSAwIEkvTyAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTBBdHRyCV9QQ01DSUFBdHRyICgwKQkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUEwTWVtCV9QQ01DSUFNZW0gKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBICgxKQkvKiBQQ01DSUEgMSAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUExSU8JX1BDTUNJQUlPICgxKQkvKiBQQ01DSUEgMSBJL08gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUExQXR0cglfUENNQ0lBQXR0ciAoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtICgxKQkvKiBQQ01DSUEgMSBNZW1vcnkgICAgICAgICAgICAgICAgICovCi0KLQotCi0vKgotICogRE1BIENvbnRyb2xsZXIKLSAqLwotI2RlZmluZSBEQ1NSKHgpCQlfX1JFRzIoMHg0MDAwMDAwMCwgKHgpIDw8IDIpCi0KLSNkZWZpbmUgRENTUl9SVU4JKDEgPDwgMzEpCS8qIFJ1biBCaXQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9OT0RFU0MJKDEgPDwgMzApCS8qIE5vLURlc2NyaXB0b3IgRmV0Y2ggKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9TVE9QSVJRRU4JKDEgPDwgMjkpCS8qIFN0b3AgSW50ZXJydXB0IEVuYWJsZSAocmVhZCAvIHdyaXRlKSAqLwotI2RlZmluZSBEQ1NSX1JFUVBFTkQJKDEgPDwgOCkJLyogUmVxdWVzdCBQZW5kaW5nIChyZWFkLW9ubHkpICovCi0jZGVmaW5lIERDU1JfU1RPUFNUQVRFCSgxIDw8IDMpCS8qIFN0b3AgU3RhdGUgKHJlYWQtb25seSkgKi8KLSNkZWZpbmUgRENTUl9FTkRJTlRSCSgxIDw8IDIpCS8qIEVuZCBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9TVEFSVElOVFIJKDEgPDwgMSkJLyogU3RhcnQgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCi0jZGVmaW5lIERDU1JfQlVTRVJSCSgxIDw8IDApCS8qIEJ1cyBFcnJvciBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQotI2RlZmluZSBEQ1NSX0VPUklSUUVOCSgxIDw8IDI4KSAgICAgICAvKiBFbmQgb2YgUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlIChSL1cpICovCi0jZGVmaW5lIERDU1JfRU9SSk1QRU4JKDEgPDwgMjcpICAgICAgIC8qIEp1bXAgdG8gbmV4dCBkZXNjcmlwdG9yIG9uIEVPUiAqLwotI2RlZmluZSBEQ1NSX0VPUlNUT1BFTgkoMSA8PCAyNikgICAgICAgLyogU1RPUCBvbiBhbiBFT1IgKi8KLSNkZWZpbmUgRENTUl9TRVRDTVBTVAkoMSA8PCAyNSkgICAgICAgLyogU2V0IERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KLSNkZWZpbmUgRENTUl9DTFJDTVBTVAkoMSA8PCAyNCkgICAgICAgLyogQ2xlYXIgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZSBEQ1NSX0NNUFNUCSgxIDw8IDEwKSAgICAgICAvKiBUaGUgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZSBEQ1NSX0VPUklOVFIJKDEgPDwgOSkgICAgICAgIC8qIFRoZSBlbmQgb2YgUmVjZWl2ZSAqLwotI2VuZGlmCi0KLSNkZWZpbmUgREFMR04JCV9fUkVHKDB4NDAwMDAwYTApICAvKiBETUEgQWxpZ25tZW50IFJlZ2lzdGVyICovCi0jZGVmaW5lIERJTlQJCV9fUkVHKDB4NDAwMDAwZjApICAvKiBETUEgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgRFJDTVIobikJKCooKChuKSA8IDY0KSA/IFwKLQkJCSZfX1JFRzIoMHg0MDAwMDEwMCwgKChuKSAmIDB4M2YpIDw8IDIpIDogXAotCQkJJl9fUkVHMigweDQwMDAxMTAwLCAoKG4pICYgMHgzZikgPDwgMikpKQotCi0jZGVmaW5lIERSQ01SX01BUFZMRAkoMSA8PCA3KQkvKiBNYXAgVmFsaWQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRFJDTVJfQ0hMTlVNCTB4MWYJCS8qIG1hc2sgZm9yIENoYW5uZWwgTnVtYmVyIChyZWFkIC8gd3JpdGUpICovCi0KLSNkZWZpbmUgRERBRFIoeCkJX19SRUcyKDB4NDAwMDAyMDAsICh4KSA8PCA0KQotI2RlZmluZSBEU0FEUih4KQlfX1JFRzIoMHg0MDAwMDIwNCwgKHgpIDw8IDQpCi0jZGVmaW5lIERUQURSKHgpCV9fUkVHMigweDQwMDAwMjA4LCAoeCkgPDwgNCkKLSNkZWZpbmUgRENNRCh4KQkJX19SRUcyKDB4NDAwMDAyMGMsICh4KSA8PCA0KQotCi0jZGVmaW5lIEREQURSX0RFU0NBRERSCTB4ZmZmZmZmZjAJLyogQWRkcmVzcyBvZiBuZXh0IGRlc2NyaXB0b3IgKG1hc2spICovCi0jZGVmaW5lIEREQURSX1NUT1AJKDEgPDwgMCkJLyogU3RvcCAocmVhZCAvIHdyaXRlKSAqLwotCi0jZGVmaW5lIERDTURfSU5DU1JDQUREUgkoMSA8PCAzMSkJLyogU291cmNlIEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCi0jZGVmaW5lIERDTURfSU5DVFJHQUREUgkoMSA8PCAzMCkJLyogVGFyZ2V0IEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCi0jZGVmaW5lIERDTURfRkxPV1NSQwkoMSA8PCAyOSkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSBzb3VyY2UuICovCi0jZGVmaW5lIERDTURfRkxPV1RSRwkoMSA8PCAyOCkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSB0YXJnZXQuICovCi0jZGVmaW5lIERDTURfU1RBUlRJUlFFTgkoMSA8PCAyMikJLyogU3RhcnQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBEQ01EX0VORElSUUVOCSgxIDw8IDIxKQkvKiBFbmQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBEQ01EX0VORElBTgkoMSA8PCAxOCkJLyogRGV2aWNlIEVuZGlhbi1uZXNzLiAqLwotI2RlZmluZSBEQ01EX0JVUlNUOAkoMSA8PCAxNikJLyogOCBieXRlIGJ1cnN0ICovCi0jZGVmaW5lIERDTURfQlVSU1QxNgkoMiA8PCAxNikJLyogMTYgYnl0ZSBidXJzdCAqLwotI2RlZmluZSBEQ01EX0JVUlNUMzIJKDMgPDwgMTYpCS8qIDMyIGJ5dGUgYnVyc3QgKi8KLSNkZWZpbmUgRENNRF9XSURUSDEJKDEgPDwgMTQpCS8qIDEgYnl0ZSB3aWR0aCAqLwotI2RlZmluZSBEQ01EX1dJRFRIMgkoMiA8PCAxNCkJLyogMiBieXRlIHdpZHRoIChIYWxmV29yZCkgKi8KLSNkZWZpbmUgRENNRF9XSURUSDQJKDMgPDwgMTQpCS8qIDQgYnl0ZSB3aWR0aCAoV29yZCkgKi8KLSNkZWZpbmUgRENNRF9MRU5HVEgJMHgwMWZmZgkJLyogbGVuZ3RoIG1hc2sgKG1heCA9IDhLIC0gMSkgKi8KLQotLyoKLSAqIFJlYWwgVGltZSBDbG9jawotICovCi0KLSNkZWZpbmUgUkNOUgkJX19SRUcoMHg0MDkwMDAwMCkgIC8qIFJUQyBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSBSVEFSCQlfX1JFRygweDQwOTAwMDA0KSAgLyogUlRDIEFsYXJtIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJUU1IJCV9fUkVHKDB4NDA5MDAwMDgpICAvKiBSVEMgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJUVFIJCV9fUkVHKDB4NDA5MDAwMEMpICAvKiBSVEMgVGltZXIgVHJpbSBSZWdpc3RlciAqLwotI2RlZmluZSBQSUFSCQlfX1JFRygweDQwOTAwMDM4KSAgLyogUGVyaW9kaWMgSW50ZXJydXB0IEFsYXJtIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgUlRTUl9QSUNFCSgxIDw8IDE1KQkvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgY291bnQgZW5hYmxlICovCi0jZGVmaW5lIFJUU1JfUElBTEUJKDEgPDwgMTQpCS8qIFBlcmlvZGljIGludGVycnVwdCBBbGFybSBlbmFibGUgKi8KLSNkZWZpbmUgUlRTUl9IWkUJKDEgPDwgMykJLyogSFogaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBSVFNSX0FMRQkoMSA8PCAyKQkvKiBSVEMgYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBSVFNSX0haCQkoMSA8PCAxKQkvKiBIWiByaXNpbmctZWRnZSBkZXRlY3RlZCAqLwotI2RlZmluZSBSVFNSX0FMCQkoMSA8PCAwKQkvKiBSVEMgYWxhcm0gZGV0ZWN0ZWQgKi8KLQotCi0vKgotICogT1MgVGltZXIgJiBNYXRjaCBSZWdpc3RlcnMKLSAqLwotCi0jZGVmaW5lIE9TTVIwCQlfX1JFRygweDQwQTAwMDAwKSAgLyogKi8KLSNkZWZpbmUgT1NNUjEJCV9fUkVHKDB4NDBBMDAwMDQpICAvKiAqLwotI2RlZmluZSBPU01SMgkJX19SRUcoMHg0MEEwMDAwOCkgIC8qICovCi0jZGVmaW5lIE9TTVIzCQlfX1JFRygweDQwQTAwMDBDKSAgLyogKi8KLSNkZWZpbmUgT1NNUjQJCV9fUkVHKDB4NDBBMDAwODApICAvKiAqLwotI2RlZmluZSBPU0NSCQlfX1JFRygweDQwQTAwMDEwKSAgLyogT1MgVGltZXIgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBPU0NSNAkJX19SRUcoMHg0MEEwMDA0MCkgIC8qIE9TIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgT01DUjQJCV9fUkVHKDB4NDBBMDAwQzApICAvKiAqLwotI2RlZmluZSBPU1NSCQlfX1JFRygweDQwQTAwMDE0KSAgLyogT1MgVGltZXIgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE9XRVIJCV9fUkVHKDB4NDBBMDAwMTgpICAvKiBPUyBUaW1lciBXYXRjaGRvZyBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgT0lFUgkJX19SRUcoMHg0MEEwMDAxQykgIC8qIE9TIFRpbWVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBPU1NSX00zCQkoMSA8PCAzKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAzICovCi0jZGVmaW5lIE9TU1JfTTIJCSgxIDw8IDIpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDIgKi8KLSNkZWZpbmUgT1NTUl9NMQkJKDEgPDwgMSkJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMSAqLwotI2RlZmluZSBPU1NSX00wCQkoMSA8PCAwKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAwICovCi0KLSNkZWZpbmUgT1dFUl9XTUUJKDEgPDwgMCkJLyogV2F0Y2hkb2cgTWF0Y2ggRW5hYmxlICovCi0KLSNkZWZpbmUgT0lFUl9FMwkJKDEgPDwgMykJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDMgKi8KLSNkZWZpbmUgT0lFUl9FMgkJKDEgPDwgMikJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDIgKi8KLSNkZWZpbmUgT0lFUl9FMQkJKDEgPDwgMSkJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDEgKi8KLSNkZWZpbmUgT0lFUl9FMAkJKDEgPDwgMCkJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDAgKi8KLQotCi0vKgotICogSW50ZXJydXB0IENvbnRyb2xsZXIKLSAqLwotCi0jZGVmaW5lIElDSVAJCV9fUkVHKDB4NDBEMDAwMDApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAqLwotI2RlZmluZSBJQ01SCQlfX1JFRygweDQwRDAwMDA0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBJQ0xSCQlfX1JFRygweDQwRDAwMDA4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUNGUAkJX19SRUcoMHg0MEQwMDAwQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIElDUFIJCV9fUkVHKDB4NDBEMDAwMTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIElDQ1IJCV9fUkVHKDB4NDBEMDAwMTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDTFIyCQlfX1JFRygweDQwRDAwMEE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KLQotLyoKLSAqIEdlbmVyYWwgUHVycG9zZSBJL08KLSAqLwotCi0jZGVmaW5lIEdQTFIwCQlfX1JFRygweDQwRTAwMDAwKSAgLyogR1BJTyBQaW4tTGV2ZWwgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLwotI2RlZmluZSBHUExSMQkJX19SRUcoMHg0MEUwMDAwNCkgIC8qIEdQSU8gUGluLUxldmVsIFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdQTFIyCQlfX1JFRygweDQwRTAwMDA4KSAgLyogR1BJTyBQaW4tTGV2ZWwgUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KLQotI2RlZmluZSBHUERSMAkJX19SRUcoMHg0MEUwMDAwQykgIC8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdQRFIxCQlfX1JFRygweDQwRTAwMDEwKSAgLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdQRFIyCQlfX1JFRygweDQwRTAwMDE0KSAgLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCi0KLSNkZWZpbmUgR1BTUjAJCV9fUkVHKDB4NDBFMDAwMTgpICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR1BTUjEJCV9fUkVHKDB4NDBFMDAwMUMpICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdQU1IyCQlfX1JFRygweDQwRTAwMDIwKSAgLyogR1BJTyBQaW4gT3V0cHV0IFNldCBSZWdpc3RlciBHUElPPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdQQ1IwCQlfX1JFRygweDQwRTAwMDI0KSAgLyogR1BJTyBQaW4gT3V0cHV0IENsZWFyIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR1BDUjEJCV9fUkVHKDB4NDBFMDAwMjgpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTyA8NjM6MzI+ICovCi0jZGVmaW5lIEdQQ1IyCQlfX1JFRygweDQwRTAwMDJDKSAgLyogR1BJTyBQaW4gT3V0cHV0IENsZWFyIFJlZ2lzdGVyIEdQSU8gPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdSRVIwCQlfX1JFRygweDQwRTAwMDMwKSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLwotI2RlZmluZSBHUkVSMQkJX19SRUcoMHg0MEUwMDAzNCkgIC8qIEdQSU8gUmlzaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdSRVIyCQlfX1JFRygweDQwRTAwMDM4KSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KLQotI2RlZmluZSBHRkVSMAkJX19SRUcoMHg0MEUwMDAzQykgIC8qIEdQSU8gRmFsbGluZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdGRVIxCQlfX1JFRygweDQwRTAwMDQwKSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdGRVIyCQlfX1JFRygweDQwRTAwMDQ0KSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCi0KLSNkZWZpbmUgR0VEUjAJCV9fUkVHKDB4NDBFMDAwNDgpICAvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdFRFIxCQlfX1JFRygweDQwRTAwMDRDKSAgLyogR1BJTyBFZGdlIERldGVjdCBTdGF0dXMgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR0VEUjIJCV9fUkVHKDB4NDBFMDAwNTApICAvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciBHUElPPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdBRlIwX0wJCV9fUkVHKDB4NDBFMDAwNTQpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzwxNTowPiAqLwotI2RlZmluZSBHQUZSMF9VCQlfX1JFRygweDQwRTAwMDU4KSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88MzE6MTY+ICovCi0jZGVmaW5lIEdBRlIxX0wJCV9fUkVHKDB4NDBFMDAwNUMpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzw0NzozMj4gKi8KLSNkZWZpbmUgR0FGUjFfVQkJX19SRUcoMHg0MEUwMDA2MCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDYzOjQ4PiAqLwotI2RlZmluZSBHQUZSMl9MCQlfX1JFRygweDQwRTAwMDY0KSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88Nzk6NjQ+ICovCi0jZGVmaW5lIEdBRlIyX1UJCV9fUkVHKDB4NDBFMDAwNjgpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzw5NS04MD4gKi8KLSNkZWZpbmUgR0FGUjNfTAkJX19SRUcoMHg0MEUwMDA2QykgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDExMTo5Nj4gKi8KLSNkZWZpbmUgR0FGUjNfVQkJX19SRUcoMHg0MEUwMDA3MCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDEyNzoxMTI+ICovCi0KLSNkZWZpbmUgR1BMUjMJCV9fUkVHKDB4NDBFMDAxMDApICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR1BEUjMJCV9fUkVHKDB4NDBFMDAxMEMpICAvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdQU1IzCQlfX1JFRygweDQwRTAwMTE4KSAgLyogR1BJTyBQaW4gT3V0cHV0IFNldCBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR1BDUjMJCV9fUkVHKDB4NDBFMDAxMjQpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdSRVIzCQlfX1JFRygweDQwRTAwMTMwKSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdGRVIzCQlfX1JFRygweDQwRTAwMTNDKSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLwotI2RlZmluZSBHRURSMwkJX19SRUcoMHg0MEUwMDE0OCkgIC8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLwotCi0vKiBNb3JlIGhhbmR5IG1hY3Jvcy4gIFRoZSBhcmd1bWVudCBpcyBhIGxpdGVyYWwgR1BJTyBudW1iZXIuICovCi0KLSNkZWZpbmUgR1BJT19iaXQoeCkJKDEgPDwgKCh4KSAmIDB4MWYpKQotCi0jZGVmaW5lIF9HUExSKHgpCV9fUkVHMigweDQwRTAwMDAwLCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dQRFIoeCkJX19SRUcyKDB4NDBFMDAwMEMsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR1BTUih4KQlfX1JFRzIoMHg0MEUwMDAxOCwgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIF9HUENSKHgpCV9fUkVHMigweDQwRTAwMDI0LCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dSRVIoeCkJX19SRUcyKDB4NDBFMDAwMzAsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR0ZFUih4KQlfX1JFRzIoMHg0MEUwMDAzQywgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIF9HRURSKHgpCV9fUkVHMigweDQwRTAwMDQ4LCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dBRlIoeCkJX19SRUcyKDB4NDBFMDAwNTQsICgoeCkgJiAweDcwKSA+PiAyKQotCi0jZGVmaW5lIEdQTFIoeCkgCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dQTFIoeCkgOiAmR1BMUjMpKQotI2RlZmluZSBHUERSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUERSKHgpIDogJkdQRFIzKSkKLSNkZWZpbmUgR1BTUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR1BTUih4KSA6ICZHUFNSMykpCi0jZGVmaW5lIEdQQ1IoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dQQ1IoeCkgOiAmR1BDUjMpKQotI2RlZmluZSBHUkVSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUkVSKHgpIDogJkdSRVIzKSkKLSNkZWZpbmUgR0ZFUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR0ZFUih4KSA6ICZHRkVSMykpCi0jZGVmaW5lIEdFRFIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dFRFIoeCkgOiAmR0VEUjMpKQotI2RlZmluZSBHQUZSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HQUZSKHgpIDogXAotCQkJICgoKCh4KSAmIDB4N2YpIDwgMTEyKSA/ICZHQUZSM19MIDogJkdBRlIzX1UpKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4YzNiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19NQUNIX1BYQTI1eF9ICisjZGVmaW5lIF9fTUFDSF9QWEEyNXhfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2VuZGlmIC8qIF9fTUFDSF9QWEEyNXhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzZlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX01BQ0hfUFhBMjd4X0gKKyNkZWZpbmUgX19NQUNIX1BYQTI3eF9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorCisjZGVmaW5lIEFSQl9DTlRSTAlfX1JFRygweDQ4MDAwMDQ4KSAgLyogQXJiaXRlciBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgQVJCX0RNQV9TTFZfUEFSSwkoMTw8MzEpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIERNQSBzbGF2ZSB3aGVuIGlkbGUgKi8KKyNkZWZpbmUgQVJCX0NJX1BBUksJCSgxPDwzMCkJICAgLyogQmUgcGFya2VkIHdpdGggQ2FtZXJhIEludGVyZmFjZSB3aGVuIGlkbGUgKi8KKyNkZWZpbmUgQVJCX0VYX01FTV9QQVJLIAkoMTw8MjkpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGV4dGVybmFsIE1FTUMgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9JTlRfTUVNX1BBUksJKDE8PDI4KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBpbnRlcm5hbCBNRU1DIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfVVNCX1BBUksJCSgxPDwyNykJICAgLyogQmUgcGFya2VkIHdpdGggVVNCIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfTENEX1BBUksJCSgxPDwyNikJICAgLyogQmUgcGFya2VkIHdpdGggTENEIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfRE1BX1BBUksJCSgxPDwyNSkJICAgLyogQmUgcGFya2VkIHdpdGggRE1BIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfQ09SRV9QQVJLCQkoMTw8MjQpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGNvcmUgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9MT0NLX0ZMQUcJCSgxPDwyMykJICAgLyogT25seSBMb2NraW5nIG1hc3RlcnMgZ2FpbiBhY2Nlc3MgdG8gdGhlIGJ1cyAqLworI2VuZGlmIC8qIF9fTUFDSF9QWEEyN3hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaAppbmRleCBkODMzOTNlLi4xMjA5YzQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaApAQCAtMyw2ICszLDggQEAKIAogI3dhcm5pbmcgUGxlYXNlIHVzZSBtZnAtcHhhMls1N114LmggaW5zdGVhZCBvZiBweGEyeHgtZ3Bpby5oCiAKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKwogLyogR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gYXNzaWdubWVudHMgKi8KIAogI2RlZmluZSBHUElPMV9SU1QJCTEJLyogcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKaW5kZXggNzcxMDJkNi4uNGZjZGRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKQEAgLTE0LDYgKzE0LDE5IEBACiAjaWZuZGVmIF9fUFhBMlhYX1JFR1NfSAogI2RlZmluZSBfX1BYQTJYWF9SRUdTX0gKIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIFBYQSBDaGlwIHNlbGVjdHMKKyAqLworCisjZGVmaW5lIFBYQV9DUzBfUEhZUwkweDAwMDAwMDAwCisjZGVmaW5lIFBYQV9DUzFfUEhZUwkweDA0MDAwMDAwCisjZGVmaW5lIFBYQV9DUzJfUEhZUwkweDA4MDAwMDAwCisjZGVmaW5lIFBYQV9DUzNfUEhZUwkweDBDMDAwMDAwCisjZGVmaW5lIFBYQV9DUzRfUEhZUwkweDEwMDAwMDAwCisjZGVmaW5lIFBYQV9DUzVfUEhZUwkweDE0MDAwMDAwCisKIC8qCiAgKiBNZW1vcnkgY29udHJvbGxlcgogICovCkBAIC02OSwyNCArODIsNiBAQAogI2RlZmluZSBNRFJFRlJfSzBSVU4JKDEgPDwgMTMpCS8qIFNEQ0xLMCBSdW4gQ29udHJvbC9TdGF0dXMgKi8KICNkZWZpbmUgTURSRUZSX0UwUElOCSgxIDw8IDEyKQkvKiBTRENLRTAgTGV2ZWwgQ29udHJvbC9TdGF0dXMgKi8KIAotCi0jaWZkZWYgQ09ORklHX1BYQTI3eAotCi0jZGVmaW5lIEFSQl9DTlRSTAlfX1JFRygweDQ4MDAwMDQ4KSAgLyogQXJiaXRlciBDb250cm9sIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgQVJCX0RNQV9TTFZfUEFSSwkoMTw8MzEpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIERNQSBzbGF2ZSB3aGVuIGlkbGUgKi8KLSNkZWZpbmUgQVJCX0NJX1BBUksJCSgxPDwzMCkJICAgLyogQmUgcGFya2VkIHdpdGggQ2FtZXJhIEludGVyZmFjZSB3aGVuIGlkbGUgKi8KLSNkZWZpbmUgQVJCX0VYX01FTV9QQVJLIAkoMTw8MjkpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGV4dGVybmFsIE1FTUMgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9JTlRfTUVNX1BBUksJKDE8PDI4KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBpbnRlcm5hbCBNRU1DIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfVVNCX1BBUksJCSgxPDwyNykJICAgLyogQmUgcGFya2VkIHdpdGggVVNCIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfTENEX1BBUksJCSgxPDwyNikJICAgLyogQmUgcGFya2VkIHdpdGggTENEIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfRE1BX1BBUksJCSgxPDwyNSkJICAgLyogQmUgcGFya2VkIHdpdGggRE1BIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfQ09SRV9QQVJLCQkoMTw8MjQpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGNvcmUgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9MT0NLX0ZMQUcJCSgxPDwyMykJICAgLyogT25seSBMb2NraW5nIG1hc3RlcnMgZ2FpbiBhY2Nlc3MgdG8gdGhlIGJ1cyAqLwotCi0jZW5kaWYKLQotCiAvKgogICogUG93ZXIgTWFuYWdlcgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzAwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMzA3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzMDAuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19NQUNIX1BYQTMwMF9ICisjZGVmaW5lIF9fTUFDSF9QWEEzMDBfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KKworI2VuZGlmIC8qIF9fTUFDSF9QWEEzMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTMyMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTMyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjc4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzIwLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fTUFDSF9QWEEzMjBfSAorI2RlZmluZSBfX01BQ0hfUFhBMzIwX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzIwLmg+CisKKyNlbmRpZiAvKiBfX01BQ0hfUFhBMzIwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAppbmRleCBiY2YzZmIyLi43ZDFhMDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaApAQCAtMTMsNiArMTMsMTcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9QWEEzWFhfUkVHU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfUFhBM1hYX1JFR1NfSAogCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKgorICogU3RhdGljIENoaXAgU2VsZWN0cworICovCisKKyNkZWZpbmUgUFhBMzAwX0NTMF9QSFlTCQkoMHgwMDAwMDAwMCkJLyogUFhBMzAwL1BYQTMxMCBfb25seV8gKi8KKyNkZWZpbmUgUFhBMzAwX0NTMV9QSFlTCQkoMHgzMDAwMDAwMCkJLyogUFhBMzAwL1BYQTMxMCBfb25seV8gKi8KKyNkZWZpbmUgUFhBM3h4X0NTMl9QSFlTCQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUFhBM3h4X0NTM19QSFlTCQkoMHgxNDAwMDAwMCkKKwogLyoKICAqIE9zY2lsbGF0b3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoT1NDQykKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTkzMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTkzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NWY3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhOTMwLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fTUFDSF9QWEE5MzBfSAorI2RlZmluZSBfX01BQ0hfUFhBOTMwX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisKKyNlbmRpZiAvKiBfX01BQ0hfUFhBOTMwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIzZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9SRUdTX0lOVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfSU5UQ19ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBJbnRlcnJ1cHQgQ29udHJvbGxlcgorICovCisKKyNkZWZpbmUgSUNJUAkJX19SRUcoMHg0MEQwMDAwMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIElDTVIJCV9fUkVHKDB4NDBEMDAwMDQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIElDTFIJCV9fUkVHKDB4NDBEMDAwMDgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAqLworI2RlZmluZSBJQ0ZQCQlfX1JFRygweDQwRDAwMDBDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNQUgkJX19SRUcoMHg0MEQwMDAxMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNDUgkJX19SRUcoMHg0MEQwMDAxNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBJQ0lQMgkJX19SRUcoMHg0MEQwMDA5QykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNNUjIJCV9fUkVHKDB4NDBEMDAwQTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNMUjIJCV9fUkVHKDB4NDBEMDAwQTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAyICovCisjZGVmaW5lIElDRlAyCQlfX1JFRygweDQwRDAwMEE4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ1BSMgkJX19SRUcoMHg0MEQwMDBBQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtb3N0LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1vc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1Zjg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtb3N0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1JFR1NfT1NUX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SRUdTX09TVF9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBPUyBUaW1lciAmIE1hdGNoIFJlZ2lzdGVycworICovCisKKyNkZWZpbmUgT1NNUjAJCV9fUkVHKDB4NDBBMDAwMDApICAvKiAqLworI2RlZmluZSBPU01SMQkJX19SRUcoMHg0MEEwMDAwNCkgIC8qICovCisjZGVmaW5lIE9TTVIyCQlfX1JFRygweDQwQTAwMDA4KSAgLyogKi8KKyNkZWZpbmUgT1NNUjMJCV9fUkVHKDB4NDBBMDAwMEMpICAvKiAqLworI2RlZmluZSBPU01SNAkJX19SRUcoMHg0MEEwMDA4MCkgIC8qICovCisjZGVmaW5lIE9TQ1IJCV9fUkVHKDB4NDBBMDAwMTApICAvKiBPUyBUaW1lciBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE9TQ1I0CQlfX1JFRygweDQwQTAwMDQwKSAgLyogT1MgVGltZXIgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSBPTUNSNAkJX19SRUcoMHg0MEEwMDBDMCkgIC8qICovCisjZGVmaW5lIE9TU1IJCV9fUkVHKDB4NDBBMDAwMTQpICAvKiBPUyBUaW1lciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1dFUgkJX19SRUcoMHg0MEEwMDAxOCkgIC8qIE9TIFRpbWVyIFdhdGNoZG9nIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBPSUVSCQlfX1JFRygweDQwQTAwMDFDKSAgLyogT1MgVGltZXIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworCisjZGVmaW5lIE9TU1JfTTMJCSgxIDw8IDMpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDMgKi8KKyNkZWZpbmUgT1NTUl9NMgkJKDEgPDwgMikJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMiAqLworI2RlZmluZSBPU1NSX00xCQkoMSA8PCAxKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAxICovCisjZGVmaW5lIE9TU1JfTTAJCSgxIDw8IDApCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDAgKi8KKworI2RlZmluZSBPV0VSX1dNRQkoMSA8PCAwKQkvKiBXYXRjaGRvZyBNYXRjaCBFbmFibGUgKi8KKworI2RlZmluZSBPSUVSX0UzCQkoMSA8PCAzKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMyAqLworI2RlZmluZSBPSUVSX0UyCQkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMiAqLworI2RlZmluZSBPSUVSX0UxCQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMSAqLworI2RlZmluZSBPSUVSX0UwCQkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMCAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX09TVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1ydGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTRhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1ydGMuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19SVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfUlRDX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIFJlYWwgVGltZSBDbG9jaworICovCisKKyNkZWZpbmUgUkNOUgkJX19SRUcoMHg0MDkwMDAwMCkgIC8qIFJUQyBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBSVEFSCQlfX1JFRygweDQwOTAwMDA0KSAgLyogUlRDIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUU1IJCV9fUkVHKDB4NDA5MDAwMDgpICAvKiBSVEMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUVFIJCV9fUkVHKDB4NDA5MDAwMEMpICAvKiBSVEMgVGltZXIgVHJpbSBSZWdpc3RlciAqLworI2RlZmluZSBQSUFSCQlfX1JFRygweDQwOTAwMDM4KSAgLyogUGVyaW9kaWMgSW50ZXJydXB0IEFsYXJtIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUlRTUl9QSUNFCSgxIDw8IDE1KQkvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgY291bnQgZW5hYmxlICovCisjZGVmaW5lIFJUU1JfUElBTEUJKDEgPDwgMTQpCS8qIFBlcmlvZGljIGludGVycnVwdCBBbGFybSBlbmFibGUgKi8KKyNkZWZpbmUgUlRTUl9IWkUJKDEgPDwgMykJLyogSFogaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVFNSX0FMRQkoMSA8PCAyKQkvKiBSVEMgYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVFNSX0haCQkoMSA8PCAxKQkvKiBIWiByaXNpbmctZWRnZSBkZXRlY3RlZCAqLworI2RlZmluZSBSVFNSX0FMCQkoMSA8PCAwKQkvKiBSVEMgYWxhcm0gZGV0ZWN0ZWQgKi8KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfUkVHU19SVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaAppbmRleCBjZjMxOTg2Li42YTJlZDM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaApAQCAtMzcsNyArMzcsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKICNkZWZpbmUgU1NDUjBfU0NSCSgweDAwMDBmZjAwKQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2VyQ2xrRGl2KHgpICgoKCh4KSAtIDIpLzIpIDw8IDgpIC8qIERpdmlzb3IgWzIuLjUxMl0gKi8KLQogI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCiAjZGVmaW5lIFNTQ1IwX1NDUgkoMHgwMDBmZmYwMCkJLyogU2VyaWFsIENsb2NrIFJhdGUgKG1hc2spICovCiAjZGVmaW5lIFNTQ1IwX1NlckNsa0Rpdih4KSAoKCh4KSAtIDEpIDw8IDgpIC8qIERpdmlzb3IgWzEuLjQwOTZdICovCkBAIC01MCw3ICs0OSw3IEBACiAjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwogI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCi0jZGVmaW5lIFNTQ1IwX0FEQwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCiAjZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCiAjZW5kaWYKIApAQCAtMTA5LDYgKzEwOCwxMSBAQAogI2RlZmluZSBTU1NSX1RJTlQJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgU1NTUl9QSU5UCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVycnVwdCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KQorI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9FRE1ZU1RSVCh4KQkoKHgpIDw8IDI2KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RhcnQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFNTUFNQX0ZTUlQJCSgxIDw8IDI1KQkvKiBGcmFtZSBTeW5jIFJlbGF0aXZlIFRpbWluZyAqLwogI2RlZmluZSBTU1BTUF9ETVlTVE9QKHgpCSgoeCkgPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KICNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMGYzODFlNi4uZDFmY2U4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAjaW5jbHVkZSAicHhhMnh4LXJlZ3MuaCIKLSNpbmNsdWRlICJweGEtcmVncy5oIgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CkBAIC0yMSw0ICsyMCw0IEBACiB9CiAKIAotdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSk7Cit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggZjRiMDI5Yy4uNTcwNmNlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0zNSw3ICszNSw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX2xpdHRsZXRvbigpIHx8IG1hY2hpbmVfaXNfaW50ZWxtb3RlMigpKQorCWlmIChtYWNoaW5lX2lzX2xpdHRsZXRvbigpIHx8IG1hY2hpbmVfaXNfaW50ZWxtb3RlMigpCisJCQl8fCBtYWNoaW5lX2lzX2NzYjcyNigpKQogCQlVQVJUID0gU1RVQVJUOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCmluZGV4IGZhNjljM2EuLmY2ZTAzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCkBAIC0yMCw3ICsyMCw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWludGMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtNTEsNiArNTIsNzIgQEAKIAkudW5tYXNrCQk9IHB4YV91bm1hc2tfaXJxLAogfTsKIAorLyoKKyAqIEdQSU8gSVJRcyBmb3IgR1BJTyAwIGFuZCAxCisgKi8KK3N0YXRpYyBpbnQgcHhhX3NldF9sb3dfZ3Bpb190eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8wOworCisJaWYgKF9fZ3Bpb19pc19vY2N1cGllZChncGlvKSkgeworCQlwcl9lcnIoIiVzIGZhaWxlZDogR1BJTyBpcyBjb25maWd1cmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCUdSRVIwIHw9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR1JFUjAgJj0gfkdQSU9fYml0KGdwaW8pOworCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCUdGRVIwIHw9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR0ZFUjAgJj0gfkdQSU9fYml0KGdwaW8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9hY2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlHRURSMCA9ICgxIDw8IChpcnEgLSBJUlFfR1BJTzApKTsKK30KKworc3RhdGljIHZvaWQgcHhhX21hc2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SICY9IH4oMSA8PCAoaXJxIC0gUFhBX0lSUSgwKSkpOworfQorCitzdGF0aWMgdm9pZCBweGFfdW5tYXNrX2xvd19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJSUNNUiB8PSAxIDw8IChpcnEgLSBQWEFfSVJRKDApKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfbG93X2dwaW9fY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTy1sIiwKKwkuYWNrCQk9IHB4YV9hY2tfbG93X2dwaW8sCisJLm1hc2sJCT0gcHhhX21hc2tfbG93X2dwaW8sCisJLnVubWFzawkJPSBweGFfdW5tYXNrX2xvd19ncGlvLAorCS5zZXRfdHlwZQk9IHB4YV9zZXRfbG93X2dwaW9fdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGFfaW5pdF9sb3dfZ3Bpb19pcnEoc2V0X3dha2VfdCBmbikKK3sKKwlpbnQgaXJxOworCisJLyogY2xlYXIgZWRnZSBkZXRlY3Rpb24gb24gR1BJTyAwIGFuZCAxICovCisJR0ZFUjAgJj0gfjB4MzsKKwlHUkVSMCAmPSB+MHgzOworCUdFRFIwID0gMHgzOworCisJZm9yIChpcnEgPSBJUlFfR1BJTzA7IGlycSA8PSBJUlFfR1BJTzE7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfbG93X2dwaW9fY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlweGFfbG93X2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOworfQorCiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwgc2V0X3dha2VfdCBmbikKIHsKIAlpbnQgaXJxOwpAQCAtNzIsNiArMTM5LDcgQEAKIAl9CiAKIAlweGFfaW50ZXJuYWxfaXJxX2NoaXAuc2V0X3dha2UgPSBmbjsKKwlweGFfaW5pdF9sb3dfZ3Bpb19pcnEoZm4pOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1pZHAuYwppbmRleCAxOGIyMGQ0Li44YjljMTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtaWRwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvaWRwLmg+CiAKICNpbmNsdWRlICJsZWRzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWx1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jCmluZGV4IDFhMjU4MDIuLmUyNmQ1ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvbHViYm9jay5oPgogCiAjaW5jbHVkZSAibGVkcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKaW5kZXggOTVlMDZiOC4uZGI0YWY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL21haW5zdG9uZS5oPgogCiAjaW5jbHVkZSAibGVkcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCAzMWRhN2YzLi5lMTNmNmE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMzksOCArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMzAwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9scGQyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCmluZGV4IGRlM2Y2N2QuLmQ2NDM5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCkBAIC0zOCw5ICszOCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2xwZDI3MC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggYmZmNzA0My4uZjA0YzgzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtNDEsMTUgKzQxLDE1IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2ExMTExLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvbHViYm9jay5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9wbS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0xMTMsOCArMTEzLDE0IEBACiAJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX1JJU0UsCiB9OwogCisjZGVmaW5lIExVQl9IRVhMRUQJCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDEwKQogI2RlZmluZSBMVUJfTUlTQ19XUgkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwODApCiAKK3ZvaWQgbHViYm9ja19zZXRfaGV4bGVkKHVpbnQzMl90IHZhbHVlKQoreworCUxVQl9IRVhMRUQgPSB2YWx1ZTsKK30KKwogdm9pZCBsdWJib2NrX3NldF9taXNjX3dyKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgc2V0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCAyMWI4MjFlLi5kNDZiMzY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTI1LDE0ICsyNSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tYWdpY2lhbi5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KQEAgLTY2LDYgKzY2LDExIEBACiAJR1BJTzMxX0kyU19TWU5DLAogCUdQSU8xMTNfSTJTX1NZU0NMSywKIAorCS8qIFNTUCAxICovCisJR1BJTzIzX1NTUDFfU0NMSywKKwlHUElPMjRfU1NQMV9TRlJNLAorCUdQSU8yNV9TU1AxX1RYRCwKKwogCS8qIFNTUCAyICovCiAJR1BJTzE5X1NTUDJfU0NMSywKIAlHUElPMTRfU1NQMl9TRlJNLApAQCAtMTQ4LDIyICsxNTMsMzEgQEAKICAqIEdQSU8gS2V5cwogICovCiAKKyNkZWZpbmUgSU5JVF9LRVkoX2NvZGUsIF9ncGlvLCBfZGVzYykJXAorCXsJCQkJXAorCQkuY29kZSAgID0gS0VZXyMjX2NvZGUsCVwKKwkJLmdwaW8gICA9IF9ncGlvLAlcCisJCS5kZXNjICAgPSBfZGVzYywJXAorCQkudHlwZSAgID0gRVZfS0VZLAlcCisJCS53YWtldXAgPSAxLAkJXAorCX0KKwogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIG1hZ2ljaWFuX2J1dHRvbl90YWJsZVtdID0gewotCXtLRVlfUE9XRVIsICAgICAgR1BJTzBfTUFHSUNJQU5fS0VZX1BPV0VSLCAgICAgIDAsICJQb3dlciBidXR0b24ifSwKLQl7S0VZX0VTQywgICAgICAgIEdQSU8zN19NQUdJQ0lBTl9LRVlfSEFOR1VQLCAgICAwLCAiSGFuZ3VwIGJ1dHRvbiJ9LAotCXtLRVlfRjEwLCAgICAgICAgR1BJTzM4X01BR0lDSUFOX0tFWV9DT05UQUNUUywgIDAsICJDb250YWN0cyBidXR0b24ifSwKLQl7S0VZX0NBTEVOREFSLCAgIEdQSU85MF9NQUdJQ0lBTl9LRVlfQ0FMRU5EQVIsICAwLCAiQ2FsZW5kYXIgYnV0dG9uIn0sCi0Je0tFWV9DQU1FUkEsICAgICBHUElPOTFfTUFHSUNJQU5fS0VZX0NBTUVSQSwgICAgMCwgIkNhbWVyYSBidXR0b24ifSwKLQl7S0VZX1VQLCAgICAgICAgIEdQSU85M19NQUdJQ0lBTl9LRVlfVVAsICAgICAgICAwLCAiVXAgYnV0dG9uIn0sCi0Je0tFWV9ET1dOLCAgICAgICBHUElPOTRfTUFHSUNJQU5fS0VZX0RPV04sICAgICAgMCwgIkRvd24gYnV0dG9uIn0sCi0Je0tFWV9MRUZULCAgICAgICBHUElPOTVfTUFHSUNJQU5fS0VZX0xFRlQsICAgICAgMCwgIkxlZnQgYnV0dG9uIn0sCi0Je0tFWV9SSUdIVCwgICAgICBHUElPOTZfTUFHSUNJQU5fS0VZX1JJR0hULCAgICAgMCwgIlJpZ2h0IGJ1dHRvbiJ9LAotCXtLRVlfS1BFTlRFUiwgICAgR1BJTzk3X01BR0lDSUFOX0tFWV9FTlRFUiwgICAgIDAsICJBY3Rpb24gYnV0dG9uIn0sCi0Je0tFWV9SRUNPUkQsICAgICBHUElPOThfTUFHSUNJQU5fS0VZX1JFQ09SRCwgICAgMCwgIlJlY29yZCBidXR0b24ifSwKLQl7S0VZX1ZPTFVNRVVQLCAgIEdQSU8xMDBfTUFHSUNJQU5fS0VZX1ZPTF9VUCwgICAwLCAiVm9sdW1lIHVwIn0sCi0Je0tFWV9WT0xVTUVET1dOLCBHUElPMTAxX01BR0lDSUFOX0tFWV9WT0xfRE9XTiwgMCwgIlZvbHVtZSBkb3duIn0sCi0Je0tFWV9QSE9ORSwgICAgICBHUElPMTAyX01BR0lDSUFOX0tFWV9QSE9ORSwgICAgMCwgIlBob25lIGJ1dHRvbiJ9LAotCXtLRVlfUExBWSwgICAgICAgR1BJTzk5X01BR0lDSUFOX0hFQURQSE9ORV9JTiwgIDAsICJIZWFkc2V0IGJ1dHRvbiJ9LAorCUlOSVRfS0VZKFBPV0VSLCAgICAgIEdQSU8wX01BR0lDSUFOX0tFWV9QT1dFUiwgICAgICAiUG93ZXIgYnV0dG9uIiksCisJSU5JVF9LRVkoRVNDLCAgICAgICAgR1BJTzM3X01BR0lDSUFOX0tFWV9IQU5HVVAsICAgICJIYW5ndXAgYnV0dG9uIiksCisJSU5JVF9LRVkoRjEwLCAgICAgICAgR1BJTzM4X01BR0lDSUFOX0tFWV9DT05UQUNUUywgICJDb250YWN0cyBidXR0b24iKSwKKwlJTklUX0tFWShDQUxFTkRBUiwgICBHUElPOTBfTUFHSUNJQU5fS0VZX0NBTEVOREFSLCAgIkNhbGVuZGFyIGJ1dHRvbiIpLAorCUlOSVRfS0VZKENBTUVSQSwgICAgIEdQSU85MV9NQUdJQ0lBTl9LRVlfQ0FNRVJBLCAgICAiQ2FtZXJhIGJ1dHRvbiIpLAorCUlOSVRfS0VZKFVQLCAgICAgICAgIEdQSU85M19NQUdJQ0lBTl9LRVlfVVAsICAgICAgICAiVXAgYnV0dG9uIiksCisJSU5JVF9LRVkoRE9XTiwgICAgICAgR1BJTzk0X01BR0lDSUFOX0tFWV9ET1dOLCAgICAgICJEb3duIGJ1dHRvbiIpLAorCUlOSVRfS0VZKExFRlQsICAgICAgIEdQSU85NV9NQUdJQ0lBTl9LRVlfTEVGVCwgICAgICAiTGVmdCBidXR0b24iKSwKKwlJTklUX0tFWShSSUdIVCwgICAgICBHUElPOTZfTUFHSUNJQU5fS0VZX1JJR0hULCAgICAgIlJpZ2h0IGJ1dHRvbiIpLAorCUlOSVRfS0VZKEtQRU5URVIsICAgIEdQSU85N19NQUdJQ0lBTl9LRVlfRU5URVIsICAgICAiQWN0aW9uIGJ1dHRvbiIpLAorCUlOSVRfS0VZKFJFQ09SRCwgICAgIEdQSU85OF9NQUdJQ0lBTl9LRVlfUkVDT1JELCAgICAiUmVjb3JkIGJ1dHRvbiIpLAorCUlOSVRfS0VZKFZPTFVNRVVQLCAgIEdQSU8xMDBfTUFHSUNJQU5fS0VZX1ZPTF9VUCwgICAiVm9sdW1lIHVwIiksCisJSU5JVF9LRVkoVk9MVU1FRE9XTiwgR1BJTzEwMV9NQUdJQ0lBTl9LRVlfVk9MX0RPV04sICJWb2x1bWUgZG93biIpLAorCUlOSVRfS0VZKFBIT05FLCAgICAgIEdQSU8xMDJfTUFHSUNJQU5fS0VZX1BIT05FLCAgICAiUGhvbmUgYnV0dG9uIiksCisJSU5JVF9LRVkoUExBWSwgICAgICAgR1BJTzk5X01BR0lDSUFOX0hFQURQSE9ORV9JTiwgICJIZWFkc2V0IGJ1dHRvbiIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBncGlvX2tleXNfZGF0YSA9IHsKQEAgLTE4OSw3ICsyMDMsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZ3Bpb19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFBYQV9DUzNfUEhZUywKLQkJLmVuZCAgID0gUFhBX0NTM19QSFlTICsgMHgyMCwKKwkJLmVuZCAgID0gUFhBX0NTM19QSFlTICsgMHgyMCAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtNDIwLDcgKzQzNCw3IEBACiAJfSwKIAl7CiAJCS5uYW1lID0gIm1hZ2ljaWFuOjpwaG9uZV9ibCIsCi0JCS5kZWZhdWx0X3RyaWdnZXIgPSAibm9uZSIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAiYmFja2xpZ2h0IiwKIAkJLmdwaW8gPSBHUElPMTAzX01BR0lDSUFOX0xFRF9LUCwKIAl9LAogfTsKQEAgLTQ2OCw4ICs0ODIsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYXNpYzM7Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFzaWMzX2xlZHNfbWFjaGluZm8gcGFzaWMzX2xlZHNfaW5mbyA9IHsKIAkubnVtX2xlZHMgICA9IEFSUkFZX1NJWkUocGFzaWMzX2xlZHMpLAogCS5wb3dlcl9ncGlvID0gRUdQSU9fTUFHSUNJQU5fTEVEX1BPV0VSLApAQCAtNTExLDYgKzUyMywzMSBAQAogfTsKIAogLyoKKyAqIFVTQiAiVHJhbnNjZWl2ZXIiCisgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBncGlvX3ZidXNfcmVzb3VyY2UgPSB7CisJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJLnN0YXJ0ID0gSVJRX01BR0lDSUFOX1ZCVVMsCisJLmVuZCAgID0gSVJRX01BR0lDSUFOX1ZCVVMsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gZ3Bpb192YnVzX2luZm8gPSB7CisJLmdwaW9fcHVsbHVwID0gR1BJTzI3X01BR0lDSUFOX1VTQkNfUFVFTiwKKwkuZ3Bpb192YnVzICAgPSBFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9VU0IsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBncGlvX3ZidXMgPSB7CisJLm5hbWUgICAgICAgICAgPSAiZ3Bpby12YnVzIiwKKwkuaWQgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgICAgICA9ICZncGlvX3ZidXNfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3Bpb192YnVzX2luZm8sCisJfSwKK307CisKKy8qCiAgKiBFeHRlcm5hbCBwb3dlcgogICovCiAKQEAgLTU4NiwxNSArNjIzLDE3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBvd2VyX3N1cHBseV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lICA9ICJhYyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fQUMsCi0JCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9BQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8CisJCSAgICAgICAgIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJCS5zdGFydCA9IElSUV9NQUdJQ0lBTl9WQlVTLAorCQkuZW5kICAgPSBJUlFfTUFHSUNJQU5fVkJVUywKIAl9LAogCVsxXSA9IHsKIAkJLm5hbWUgID0gInVzYiIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fQUMsCi0JCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9BQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8CisJCSAgICAgICAgIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJCS5zdGFydCA9IElSUV9NQUdJQ0lBTl9WQlVTLAorCQkuZW5kICAgPSBJUlFfTUFHSUNJQU5fVkJVUywKIAl9LAogfTsKIApAQCAtNjg4LDExICs3MjcsOSBAQAogCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0ZMQVNIX1ZQUCwgdnBwKTsKIH0KIAotI2RlZmluZSBQWEFfQ1NfU0laRQkJMHgwNDAwMDAwMAotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHN0cmF0YWZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydCA9IFBYQV9DUzBfUEhZUywKLQkuZW5kICAgPSBQWEFfQ1MwX1BIWVMgKyBQWEFfQ1NfU0laRSAtIDEsCisJLmVuZCAgID0gUFhBX0NTMF9QSFlTICsgU1pfNjRNIC0gMSwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIH07CiAKQEAgLTcyMCw2ICs3NTcsNyBAQAogCSZlZ3BpbywKIAkmYmFja2xpZ2h0LAogCSZwYXNpYzMsCisJJmdwaW9fdmJ1cywKIAkmcG93ZXJfc3VwcGx5LAogCSZzdHJhdGFmbGFzaCwKIAkmbGVkc19ncGlvLApAQCAtNzQzLDYgKzc4MSw3IEBACiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPODNfTUFHSUNJQU5fbklSX0VOLCAxKTsKIAkJcHhhX3NldF9maWNwX2luZm8oJm1hZ2ljaWFuX2ZpY3BfaW5mbyk7CiAJfQorCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKIAlweGFfc2V0X21jaV9pbmZvKCZtYWdpY2lhbl9tY2lfaW5mbyk7CiAJcHhhX3NldF9vaGNpX2luZm8oJm1hZ2ljaWFuX29oY2lfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IDVmMjI0OTYuLmE2Yzg0MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC00MSw5ICs0MSw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21haW5zdG9uZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKaW5kZXggMzM2MjZkZS4uN2ZmYjkxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwpAQCAtMTgsMTUgKzE4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKLSNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKLQogI2RlZmluZSBQR1NSKHgpCQlfX1JFRzIoMHg0MEYwMDAyMCwgKHgpIDw8IDIpCiAjZGVmaW5lIF9fR0FGUih1LCB4KQlfX1JFRzIoKHUpID8gMHg0MEUwMDA1OCA6IDB4NDBFMDAwNTQsICh4KSA8PCAzKQogI2RlZmluZSBHQUZSX0woeCkJX19HQUZSKDAsIHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMKaW5kZXggZWIxOTdhNi4uN2EyNzBlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEzeHguYwpAQCAtMjAsMTgzICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAuaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEzeHguaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAKLS8qIG1mcF9zcGluX2xvY2sgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBNRlAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbgotICogKG1vc3QgbGlrZWx5IGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uKSBpcyBhdG9taWMsIGFuZCB0aGF0Ci0gKiBtZnBfdGFibGVbXSBpcyBjb25zaXN0ZW50Ci0gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZwX3NwaW5fbG9jayk7Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKm1mcHJfbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKSZfX1JFRyhNRlBSX0JBU0UpOwotCi1zdHJ1Y3QgcHhhM3h4X21mcF9waW4gewotCXVuc2lnbmVkIGxvbmcJY29uZmlnOwkJLyogLTEgZm9yIG5vdCBjb25maWd1cmVkICovCi0JdW5zaWduZWQgbG9uZwltZnByX29mZjsJLyogTUZQUnh4IFJlZ2lzdGVyIG9mZnNldCAqLwotCXVuc2lnbmVkIGxvbmcJbWZwcl9ydW47CS8qIFJ1bi1Nb2RlIFJlZ2lzdGVyIFZhbHVlICovCi0JdW5zaWduZWQgbG9uZwltZnByX2xwbTsJLyogTG93IFBvd2VyIE1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9waW4gbWZwX3RhYmxlW01GUF9QSU5fTUFYXTsKLQotLyogbWFwcGluZyBvZiBNRlBfTFBNXyogZGVmaW5pdGlvbnMgdG8gTUZQUl9MUE1fKiByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX2xwbVtdID0gewotCU1GUFJfTFBNX0lOUFVULAotCU1GUFJfTFBNX0RSSVZFX0xPVywKLQlNRlBSX0xQTV9EUklWRV9ISUdILAotCU1GUFJfTFBNX1BVTExfTE9XLAotCU1GUFJfTFBNX1BVTExfSElHSCwKLQlNRlBSX0xQTV9GTE9BVCwKLX07Ci0KLS8qIG1hcHBpbmcgb2YgTUZQX1BVTExfKiBkZWZpbml0aW9ucyB0byBNRlBSX1BVTExfKiByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX3B1bGxbXSA9IHsKLQlNRlBSX1BVTExfTk9ORSwKLQlNRlBSX1BVTExfTE9XLAotCU1GUFJfUFVMTF9ISUdILAotCU1GUFJfUFVMTF9CT1RILAotfTsKLQotLyogbWFwcGluZyBvZiBNRlBfTFBNX0VER0VfKiBkZWZpbml0aW9ucyB0byBNRlBSX0VER0VfKiByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX2VkZ2VbXSA9IHsKLQlNRlBSX0VER0VfTk9ORSwKLQlNRlBSX0VER0VfUklTRSwKLQlNRlBSX0VER0VfRkFMTCwKLQlNRlBSX0VER0VfQk9USCwKLX07Ci0KLSNkZWZpbmUgbWZwcl9yZWFkbChvZmYpCQkJXAotCV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgKG9mZikpCi0KLSNkZWZpbmUgbWZwcl93cml0ZWwob2ZmLCB2YWwpCQlcCi0JX19yYXdfd3JpdGVsKHZhbCwgbWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKLQotI2RlZmluZSBtZnBfY29uZmlndXJlZChwKQkoKHApLT5jb25maWcgIT0gLTEpCi0KLS8qCi0gKiBwZXJmb3JtIGEgcmVhZC1iYWNrIG9mIGFueSBNRlBSIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKLSAqIHByZXZpb3VzIHdyaXRpbmdzIGFyZSBmaW5pc2hlZAotICovCi0jZGVmaW5lIG1mcHJfc3luYygpCSh2b2lkKV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgMCkKLQotc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19ydW4oc3RydWN0IHB4YTN4eF9tZnBfcGluICpwKQotewotCWlmIChtZnBfY29uZmlndXJlZChwKSkKLQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfcnVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19scG0oc3RydWN0IHB4YTN4eF9tZnBfcGluICpwKQotewotCWlmIChtZnBfY29uZmlndXJlZChwKSkgewotCQl1bnNpZ25lZCBsb25nIG1mcHJfY2xyID0gKHAtPm1mcHJfcnVuICYgfk1GUFJfRURHRV9CT1RIKSB8IE1GUFJfRURHRV9DTEVBUjsKLQkJaWYgKG1mcHJfY2xyICE9IHAtPm1mcHJfcnVuKQotCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIG1mcHJfY2xyKTsKLQkJaWYgKHAtPm1mcHJfbHBtICE9IG1mcHJfY2xyKQotCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfbHBtKTsKLQl9Ci19Ci0KLXZvaWQgcHhhM3h4X21mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIG1mcF9jZmdzKyspIHsKLQkJdW5zaWduZWQgbG9uZyB0bXAsIGMgPSAqbWZwX2NmZ3M7Ci0JCXN0cnVjdCBweGEzeHhfbWZwX3BpbiAqcDsKLQkJaW50IHBpbiwgYWYsIGRydiwgbHBtLCBlZGdlLCBwdWxsOwotCi0JCXBpbiA9IE1GUF9QSU4oYyk7Ci0JCUJVR19PTihwaW4gPj0gTUZQX1BJTl9NQVgpOwotCQlwID0gJm1mcF90YWJsZVtwaW5dOwotCi0JCWFmICA9IE1GUF9BRihjKTsKLQkJZHJ2ID0gTUZQX0RTKGMpOwotCQlscG0gPSBNRlBfTFBNX1NUQVRFKGMpOwotCQllZGdlID0gTUZQX0xQTV9FREdFKGMpOwotCQlwdWxsID0gTUZQX1BVTEwoYyk7Ci0KLQkJLyogcnVuLW1vZGUgcHVsbCBzZXR0aW5ncyB3aWxsIGNvbmZsaWN0IHdpdGggTUZQUiBiaXRzIG9mCi0JCSAqIGxvdyBwb3dlciBtb2RlIHN0YXRlLCAgY2FsY3VsYXRlIG1mcHJfcnVuIGFuZCBtZnByX2xwbQotCQkgKiBpbmRpdmlkdWFsbHkgaWYgcHVsbCAhPSBNRlBfUFVMTF9OT05FCi0JCSAqLwotCQl0bXAgPSBNRlBSX0FGX1NFTChhZikgfCBNRlBSX0RSSVZFKGRydik7Ci0KLQkJaWYgKGxpa2VseShwdWxsID09IE1GUF9QVUxMX05PTkUpKSB7Ci0JCQlwLT5tZnByX3J1biA9IHRtcCB8IG1mcHJfbHBtW2xwbV0gfCBtZnByX2VkZ2VbZWRnZV07Ci0JCQlwLT5tZnByX2xwbSA9IHAtPm1mcHJfcnVuOwotCQl9IGVsc2UgewotCQkJcC0+bWZwcl9scG0gPSB0bXAgfCBtZnByX2xwbVtscG1dIHwgbWZwcl9lZGdlW2VkZ2VdOwotCQkJcC0+bWZwcl9ydW4gPSB0bXAgfCBtZnByX3B1bGxbcHVsbF07Ci0JCX0KLQotCQlwLT5jb25maWcgPSBjOyBfX21mcF9jb25maWdfcnVuKHApOwotCX0KLQotCW1mcHJfc3luYygpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLX0KLQotdW5zaWduZWQgbG9uZyBweGEzeHhfbWZwX3JlYWQoaW50IG1mcCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7Ci0KLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JdmFsID0gbWZwcl9yZWFkbChtZnBfdGFibGVbbWZwXS5tZnByX29mZik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotdm9pZCBweGEzeHhfbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JbWZwcl93cml0ZWwobWZwX3RhYmxlW21mcF0ubWZwcl9vZmYsIHZhbCk7Ci0JbWZwcl9zeW5jKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIF9faW5pdCBweGEzeHhfbWZwX2luaXRfYWRkcihzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCAqbWFwKQotewotCXN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwICpwOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKHAgPSBtYXA7IHAtPnN0YXJ0ICE9IE1GUF9QSU5fSU5WQUxJRDsgcCsrKSB7Ci0JCW9mZnNldCA9IHAtPm9mZnNldDsKLQkJaSA9IHAtPnN0YXJ0OwotCi0JCWRvIHsKLQkJCW1mcF90YWJsZVtpXS5tZnByX29mZiA9IG9mZnNldDsKLQkJCW1mcF90YWJsZVtpXS5tZnByX3J1biA9IDA7Ci0JCQltZnBfdGFibGVbaV0ubWZwcl9scG0gPSAwOwotCQkJb2Zmc2V0ICs9IDQ7IGkrKzsKLQkJfSB3aGlsZSAoKGkgPD0gcC0+ZW5kKSAmJiAocC0+ZW5kICE9IC0xKSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIF9faW5pdCBweGEzeHhfaW5pdF9tZnAodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IGkrKykKLQkJbWZwX3RhYmxlW2ldLmNvbmZpZyA9IC0xOwotfQotCiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogQ29uZmlndXJlIHRoZSBNRlBzIGFwcHJvcHJpYXRlbHkgZm9yIHN1c3BlbmQvcmVzdW1lLgpAQCAtMjA3LDIzICszMywxMyBAQAogICovCiBzdGF0aWMgaW50IHB4YTN4eF9tZnBfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZCwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWludCBwaW47Ci0KLQlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyspIHsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwID0gJm1mcF90YWJsZVtwaW5dOwotCQlfX21mcF9jb25maWdfbHBtKHApOwotCX0KKwltZnBfY29uZmlnX2xwbSgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHB4YTN4eF9tZnBfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkKQogewotCWludCBwaW47Ci0KLQlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyspIHsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwID0gJm1mcF90YWJsZVtwaW5dOwotCQlfX21mcF9jb25maWdfcnVuKHApOwotCX0KKwltZnBfY29uZmlnX3J1bigpOwogCiAJLyogY2xlYXIgUkRIIGJpdCB3aGVuIE1GUCBzZXR0aW5ncyBhcmUgcmVzdG9yZWQKIAkgKgpAQCAtMjMxLDcgKzQ3LDYgQEAKIAkgKiBwcmVzZXJ2ZSB0aGVtIGhlcmUgaW4gY2FzZSB0aGV5IHdpbGwgYmUgcmVmZXJlbmNlZCBsYXRlcgogCSAqLwogCUFTQ1IgJj0gfihBU0NSX1JESCB8IEFTQ1JfRDFTIHwgQVNDUl9EMlMgfCBBU0NSX0QzUyk7Ci0KIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKaW5kZXggMmI0MjdlMC4uOTdjOTNhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwpAQCAtMzYsMTMgKzM2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtcnRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CkBAIC00MTEsMjEgKzQxMyw2IEBACiAvKgogICogVVNCIFVEQwogICovCi1zdGF0aWMgdm9pZCB1ZGNfcG93ZXJfY29tbWFuZChpbnQgY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUOgotCQlncGlvX3NldF92YWx1ZShHUElPMjJfVVNCX0VOQUJMRSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzIyX1VTQl9FTkFCTEUsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJ1ZGNfY29udHJvbDogdW5rbm93biBjb21tYW5kICgweCV4KSFcbiIsIGNtZCk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIGludCBpc191c2JfY29ubmVjdGVkKHZvaWQpCiB7CiAJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPMTNfblVTQl9ERVRFQ1QpOwpAQCAtNDMzLDI0ICs0MjAsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBtaW9hNzAxX3VkY19pbmZvID0gewogCS51ZGNfaXNfY29ubmVjdGVkID0gaXNfdXNiX2Nvbm5lY3RlZCwKLQkudWRjX2NvbW1hbmQJICA9IHVkY19wb3dlcl9jb21tYW5kLAorCS5ncGlvX3B1bGx1cAkgID0gR1BJTzIyX1VTQl9FTkFCTEUsCiB9OwogCi1zdHJ1Y3QgZ3Bpb19yZXNzIHVkY19ncGlvc1tdID0gewotCU1JT19HUElPX09VVChHUElPMjJfVVNCX0VOQUJMRSwgMCwgIlVTQiBWYnVzIGVuYWJsZSIpCitzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyBncGlvX3ZidXNfZGF0YSA9IHsKKwkuZ3Bpb192YnVzID0gR1BJTzEzX25VU0JfREVURUNULAorCS5ncGlvX3ZidXNfaW52ZXJ0ZWQgPSAxLAorCS5ncGlvX3B1bGx1cCA9IC0xLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKLXsKLQlweGFfc2V0X3VkY19pbmZvKCZtaW9hNzAxX3VkY19pbmZvKTsKLQlyZXR1cm4gbWlvX2dwaW9fcmVxdWVzdChBUlJBWV9BTkRfU0laRSh1ZGNfZ3Bpb3MpKTsKLX0KLQotc3RhdGljIHZvaWQgdWRjX2V4aXQodm9pZCkKLXsKLQltaW9fZ3Bpb19mcmVlKEFSUkFZX0FORF9TSVpFKHVkY19ncGlvcykpOwotfQotCiAvKgogICogU0RJTy9NTUMgQ2FyZCBjb250cm9sbGVyCiAgKi8KQEAgLTc4OSw2ICs3NjcsNyBAQAogTUlPX1BBUkVOVF9ERVYobWlvX3dtOTcxM19jb2RlYywgICJ3bTk3MTMtY29kZWMiLCAgICZweGEyeHhfYWM5Ny5kZXYsIE5VTEwpCiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX3NvdW5kLAkgICJtaW9hNzAxLXdtOTcxMyIsIE5VTEwpCiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX2JvYXJkLAkgICJtaW9hNzAxLWJvYXJkIiwgIE5VTEwpCitNSU9fU0lNUExFX0RFVihncGlvX3ZidXMsCSAgImdwaW8tdmJ1cyIsICAgICAgJmdwaW9fdmJ1c19kYXRhKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtaW9hNzAxX2dwaW9fa2V5cywKQEAgLTgwMCw3ICs3NzksOCBAQAogCSZtaW9hNzAxX3NvdW5kLAogCSZwb3dlcl9kZXYsCiAJJnN0cmF0YWZsYXNoLAotCSZtaW9hNzAxX2JvYXJkCisJJmdwaW9fdmJ1cywKKwkmbWlvYTcwMV9ib2FyZCwKIH07CiAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfbWFjaGluZV9leGl0KHZvaWQpOwpAQCAtODA4LDEzICs3ODgsMTMgQEAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfcG93ZXJvZmYodm9pZCkKIHsKIAltaW9hNzAxX21hY2hpbmVfZXhpdCgpOwotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ3MnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdzJywgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1pb2E3MDFfcmVzdGFydChjaGFyIGMpCitzdGF0aWMgdm9pZCBtaW9hNzAxX3Jlc3RhcnQoY2hhciBjLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJbWlvYTcwMV9tYWNoaW5lX2V4aXQoKTsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdzJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgncycsIGNtZCk7CiB9CiAKIHN0cnVjdCBncGlvX3Jlc3MgZ2xvYmFsX2dwaW9zW10gPSB7CkBAIC04MzcsNyArODE3LDcgQEAKIAlweGFfc2V0X21jaV9pbmZvKCZtaW9hNzAxX21jaV9pbmZvKTsKIAlweGFfc2V0X2tleXBhZF9pbmZvKCZtaW9hNzAxX2tleXBhZF9pbmZvKTsKIAl3bTk3eHhfYmF0X3NldF9wZGF0YSgmbWlvYTcwMV9iYXR0ZXJ5X2RhdGEpOwotCXVkY19pbml0KCk7CisJcHhhX3NldF91ZGNfaW5mbygmbWlvYTcwMV91ZGNfaW5mbyk7CiAJcG1fcG93ZXJfb2ZmID0gbWlvYTcwMV9wb3dlcm9mZjsKIAlhcm1fcG1fcmVzdGFydCA9IG1pb2E3MDFfcmVzdGFydDsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKQEAgLTg1MCw3ICs4MzAsNiBAQAogCiBzdGF0aWMgdm9pZCBtaW9hNzAxX21hY2hpbmVfZXhpdCh2b2lkKQogewotCXVkY19leGl0KCk7CiAJYm9vdHN0cmFwX2V4aXQoKTsKIAlnc21fZXhpdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21wOTAwLmMKaW5kZXggOGE3MzgxNC4uYTY1NzEzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tcDkwMC5jCkBAIC0xOSwxMCArMTksMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMTZ4Lmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyB2b2lkIGlzcDExNnhfcGZtX2RlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGRlbGF5KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg3NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTAsMCArMSw1NjUgQEAKKy8qCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgUGFsbSBMaWZlRHJpdmUKKyAqCisgKiBBdXRob3I6ICAgICBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHdvcmsgb2Y6CisgKgkJQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogKGZpbmQgbW9yZSBpbmZvIGF0IHd3dy5oYWNrbmRldi5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG1sZC5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbWFzb2MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbWxkX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisJR1BJTzExMl9NTUNfQ01ELAorCUdQSU8xNF9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTE0X0dQSU8sCS8qIFNEIHBvd2VyICovCisJR1BJTzExNl9HUElPLAkvKiBTRCByL28gc3dpdGNoICovCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKKwkvKiBJckRBICovCisJR1BJTzEwOF9HUElPLAkvKiBpciBkaXNhYmxlICovCisJR1BJTzQ2X0ZJQ1BfUlhELAorCUdQSU80N19GSUNQX1RYRCwKKworCS8qIE1BVFJJWCBLRVlQQUQgKi8KKwlHUElPMTAwX0tQX01LSU5fMCwKKwlHUElPMTAxX0tQX01LSU5fMSwKKwlHUElPMTAyX0tQX01LSU5fMiwKKwlHUElPOTdfS1BfTUtJTl8zLAorCUdQSU8xMDNfS1BfTUtPVVRfMCwKKwlHUElPMTA0X0tQX01LT1VUXzEsCisJR1BJTzEwNV9LUF9NS09VVF8yLAorCisJLyogTENEICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisKKwkvKiBQV00gKi8KKwlHUElPMTZfUFdNMF9PVVQsCisKKwkvKiBHUElPIEtFWVMgKi8KKwlHUElPMTBfR1BJTywJLyogaG90c3luYyBidXR0b24gKi8KKwlHUElPMTJfR1BJTywJLyogcG93ZXIgc3dpdGNoICovCisJR1BJTzE1X0dQSU8sCS8qIGxvY2sgc3dpdGNoICovCisKKwkvKiBMRURzICovCisJR1BJTzUyX0dQSU8sCS8qIGdyZWVuIGxlZCAqLworCUdQSU85NF9HUElPLAkvKiBvcmFuZ2UgbGVkICovCisKKwkvKiBQQ01DSUEgKi8KKwlHUElPNDhfblBPRSwKKwlHUElPNDlfblBXRSwKKwlHUElPNTBfblBJT1IsCisJR1BJTzUxX25QSU9XLAorCUdQSU84NV9uUENFXzEsCisJR1BJTzU0X25QQ0VfMiwKKwlHUElPNzlfUFNLVFNFTCwKKwlHUElPNTVfblBSRUcsCisJR1BJTzU2X25QV0FJVCwKKwlHUElPNTdfbklPSVMxNiwKKwlHUElPMzZfR1BJTywJLyogd2lmaSBwb3dlciAqLworCUdQSU8zOF9HUElPLAkvKiB3aWZpIHJlYWR5ICovCisJR1BJTzgxX0dQSU8sCS8qIHdpZmkgcmVzZXQgKi8KKworCS8qIEhERCAqLworCUdQSU85NV9HUElPLAkvKiBIREQgaXJxICovCisJR1BJTzExNV9HUElPLAkvKiBIREQgcG93ZXIgKi8KKworCS8qIE1JU0MgKi8KKwlHUElPMTNfR1BJTywJLyogZWFycGhvbmUgZGV0ZWN0ICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtbGRfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG1sZF9kZXRlY3RfaW50LAorCQkJCXZvaWQgKmRhdGEpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOworCWlmIChlcnIpCisJCWdvdG8gZXJyMjsKKwllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksCisJCQlwYWxtbGRfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8CisJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnIyOworCX0KKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnI0OworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjQ7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyNTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworCitlcnI1OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7CitlcnI0OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUik7CitlcnIzOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwgZGF0YSk7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGFsbWxkX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUik7CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLCBkYXRhKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOworfQorCitzdGF0aWMgaW50IHBhbG1sZF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIJPSBwYWxtbGRfbWNpX3Bvd2VyLAorCS5nZXRfcm8JCT0gcGFsbWxkX21jaV9nZXRfcm8sCisJLmluaXQgCQk9IHBhbG1sZF9tY2lfaW5pdCwKKwkuZXhpdAkJPSBwYWxtbGRfbWNpX2V4aXQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleWJvYXJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGludCBwYWxtbGRfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMSwgS0VZX0YyKSwKKwlLRVkoMCwgMiwgS0VZX1VQKSwKKworCUtFWSgxLCAwLCBLRVlfRjMpLAorCUtFWSgxLCAxLCBLRVlfRjQpLAorCUtFWSgxLCAyLCBLRVlfUklHSFQpLAorCisJS0VZKDIsIDAsIEtFWV9GMSksCisJS0VZKDIsIDEsIEtFWV9GNSksCisJS0VZKDIsIDIsIEtFWV9ET1dOKSwKKworCUtFWSgzLCAwLCBLRVlfRjYpLAorCUtFWSgzLCAxLCBLRVlfRU5URVIpLAorCUtFWSgzLCAyLCBLRVlfTEVGVCksCit9OworCitzdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBwYWxtbGRfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hdHJpeF9rZXlfcm93cwk9IDQsCisJLm1hdHJpeF9rZXlfY29scwk9IDMsCisJLm1hdHJpeF9rZXlfbWFwCQk9IHBhbG1sZF9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUocGFsbWxkX21hdHJpeF9rZXlzKSwKKworCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDMwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHBhbG1sZF9weGFfYnV0dG9uc1tdID0geworCXtLRVlfRjgsIEdQSU9fTlJfUEFMTUxEX0hPVFNZTkNfQlVUVE9OX04sIDEsICJIb3RTeW5jIEJ1dHRvbiIgfSwKKwl7S0VZX0Y5LCBHUElPX05SX1BBTE1MRF9MT0NLX1NXSVRDSCwgMCwgIkxvY2sgU3dpdGNoIiB9LAorCXtLRVlfUE9XRVIsIEdQSU9fTlJfUEFMTUxEX1BPV0VSX1NXSVRDSCwgMCwgIlBvd2VyIFN3aXRjaCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcGFsbWxkX3B4YV9rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBwYWxtbGRfcHhhX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShwYWxtbGRfcHhhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX3B4YV9rZXlzID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbWxkX3B4YV9rZXlzX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJhY2tsaWdodAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbWxkX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSLCAiQkwgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldHVybiAwOworZXJyMzoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSKTsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG1sZF9iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsIGJyaWdodG5lc3MpOworCXJldHVybiBicmlnaHRuZXNzOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9CTF9QT1dFUik7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG1sZF9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDAsCisJLm1heF9icmlnaHRuZXNzCT0gUEFMTUxEX01BWF9JTlRFTlNJVFksCisJLmRmdF9icmlnaHRuZXNzCT0gUEFMTUxEX01BWF9JTlRFTlNJVFksCisJLnB3bV9wZXJpb2RfbnMJPSBQQUxNTERfUEVSSU9EX05TLAorCS5pbml0CQk9IHBhbG1sZF9iYWNrbGlnaHRfaW5pdCwKKwkubm90aWZ5CQk9IHBhbG1sZF9iYWNrbGlnaHRfbm90aWZ5LAorCS5leGl0CQk9IHBhbG1sZF9iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG1sZF9iYWNrbGlnaHQgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbWxkX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJckRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtbGRfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAxKTsKKwlpZiAoZXJyKQorCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSk7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOworCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnN0YXJ0dXAJCT0gcGFsbWxkX2lyZGFfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gcGFsbWxkX2lyZGFfc2h1dGRvd24sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExFRHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7Cit7CisJLm5hbWUJCQk9ICJwYWxtbGQ6Z3JlZW46bGVkIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCS5ncGlvCQkJPSBHUElPX05SX1BBTE1MRF9MRURfR1JFRU4sCit9LCB7CisJLm5hbWUJCQk9ICJwYWxtbGQ6YW1iZXI6bGVkIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCS5ncGlvCQkJPSBHUElPX05SX1BBTE1MRF9MRURfQU1CRVIsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG1sZF9sZWRzID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQb3dlciBzdXBwbHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBvd2VyX3N1cHBseV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCwgIkNBQkxFX1NUQVRFX0FDIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTiwgIkNBQkxFX1NUQVRFX1VTQiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04pOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldHVybiAwOworCitlcnIzOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04pOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtbGRfaXNfYWNfb25saW5lKHZvaWQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCk7Cit9CisKK3N0YXRpYyBpbnQgcGFsbWxkX2lzX3VzYl9vbmxpbmUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKK30KKworc3RhdGljIGNoYXIgKnBhbG1sZF9zdXBwbGljYW50c1tdID0geworCSJtYWluLWJhdHRlcnkiLAorfTsKKworc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7CisJLmluaXQgICAgICAgICAgICA9IHBvd2VyX3N1cHBseV9pbml0LAorCS5pc19hY19vbmxpbmUgICAgPSBwYWxtbGRfaXNfYWNfb25saW5lLAorCS5pc191c2Jfb25saW5lICAgPSBwYWxtbGRfaXNfdXNiX29ubGluZSwKKwkuZXhpdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2V4aXQsCisJLnN1cHBsaWVkX3RvICAgICA9IHBhbG1sZF9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShwYWxtbGRfc3VwcGxpY2FudHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0geworCS5uYW1lID0gInBkYS1wb3dlciIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdNOTd4eCBiYXR0ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHdtOTd4eF9iYXR0X3BkYXRhID0geworCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAorCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAorCS5jaGFyZ2VfZ3Bpbwk9IC0xLAorCS5tYXhfdm9sdGFnZQk9IFBBTE1MRF9CQVRfTUFYX1ZPTFRBR0UsCisJLm1pbl92b2x0YWdlCT0gUEFMTUxEX0JBVF9NSU5fVk9MVEFHRSwKKwkuYmF0dF9tdWx0CT0gMTAwMCwKKwkuYmF0dF9kaXYJPSA0MTQsCisJLnRlbXBfbXVsdAk9IDEsCisJLnRlbXBfZGl2CT0gMSwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTywKKwkuYmF0dF9uYW1lCT0gIm1haW4tYmF0dCIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhU29DIGF1ZGlvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwYWxtMjd4X2Fzb2NfaW5mbyBwYWxtMjd4X2Fzb2NfcGRhdGEgPSB7CisJLmphY2tfZ3Bpbwk9IEdQSU9fTlJfUEFMTUxEX0VBUlBIT05FX0RFVEVDVCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbWxkX2xjZF9tb2Rlc1tdID0geworeworCS5waXhjbG9jawk9IDU3NjkyLAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSA0ODAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDMyLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSAxLAorCisJLmhzeW5jX2xlbgk9IDQsCisJLnZzeW5jX2xlbgk9IDEsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbWxkX2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQk9IHBhbG1sZF9sY2RfbW9kZXMsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUocGFsbWxkX2xjZF9tb2RlcyksCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKKwkmcGFsbWxkX3B4YV9rZXlzLAorI2VuZGlmCisJJnBhbG1sZF9iYWNrbGlnaHQsCisJJnBhbG1sZF9sZWRzLAorCSZwb3dlcl9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG1sZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKK3sKKwkudmlydHVhbAk9IFBBTE1MRF9JREVfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTUxEX0lERV9QSFlTKSwKKwkubGVuZ3RoCQk9IFBBTE1MRF9JREVfU0laRSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKK30sCit7CisJLnZpcnR1YWwJPSBQQUxNTERfVVNCX1ZJUlQsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1MRF9VU0JfUEhZUyksCisJLmxlbmd0aAkJPSBQQUxNTERfVVNCX1NJWkUsCisJLnR5cGUJCT0gTVRfREVWSUNFCit9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBhbG1sZF9tYXBfaW8odm9pZCkKK3sKKwlweGFfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KHBhbG1sZF9pb19kZXNjLCBBUlJBWV9TSVpFKHBhbG1sZF9pb19kZXNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtbGRfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBhbG1sZF9waW5fY29uZmlnKSk7CisKKwlzZXRfcHhhX2ZiX2luZm8oJnBhbG1sZF9sY2Rfc2NyZWVuKTsKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtbGRfbWNpX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtbGRfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZwYWxtbGRfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZ3bTk3eHhfYmF0dF9wZGF0YSk7CisJcGFsbTI3eF9hc29jX3NldF9wZGF0YSgmcGFsbTI3eF9hc29jX3BkYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFBBTE1MRCwgIlBhbG0gTGlmZURyaXZlIikKKwkucGh5c19pbwk9IFBBTE1MRF9QSFlTX0lPX1NUQVJULAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBwYWxtbGRfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcGFsbWxkX2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MjFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwpAQCAtMCwwICsxLDQ5NiBAQAorLyoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBQYWxtIFR1bmdzdGVufFQ1CisgKgorICogQXV0aG9yOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHdvcmsgb2Y6CisgKgkJQWxlcyBTbnVwYXJlayA8c251cGFyZWtAYXRsYXMuY3o+CisgKgkJSnVzdGluIEtlbmRyaWNrIDx0d2lsaWdodHNlbnRyeUBnbWFpbC5jb20+CisgKgkJUmljaGFyZFQ1IDxyaWNoYXJkX3Q1QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIChmaW5kIG1vcmUgaW5mbyBhdCB3d3cuaGFja25kZXYuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtdDUuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbWFzb2MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbXQ1X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisJR1BJTzExMl9NTUNfQ01ELAorCUdQSU8xNF9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTE0X0dQSU8sCS8qIFNEIHBvd2VyICovCisJR1BJTzExNV9HUElPLAkvKiBTRCByL28gc3dpdGNoICovCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKKwkvKiBJckRBICovCisJR1BJTzQwX0dQSU8sCS8qIGlyIGRpc2FibGUgKi8KKwlHUElPNDZfRklDUF9SWEQsCisJR1BJTzQ3X0ZJQ1BfVFhELAorCisJLyogVVNCICovCisJR1BJTzE1X0dQSU8sCS8qIHVzYiBkZXRlY3QgKi8KKwlHUElPOTVfR1BJTywJLyogdXNiIHBvd2VyICovCisKKwkvKiBNQVRSSVggS0VZUEFEICovCisJR1BJTzEwMF9LUF9NS0lOXzAsCisJR1BJTzEwMV9LUF9NS0lOXzEsCisJR1BJTzEwMl9LUF9NS0lOXzIsCisJR1BJTzk3X0tQX01LSU5fMywKKwlHUElPMTAzX0tQX01LT1VUXzAsCisJR1BJTzEwNF9LUF9NS09VVF8xLAorCUdQSU8xMDVfS1BfTUtPVVRfMiwKKworCS8qIExDRCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJLyogUFdNICovCisJR1BJTzE2X1BXTTBfT1VULAorCisJLyogTUlTQyAqLworCUdQSU8xMF9HUElPLAkvKiBob3RzeW5jIGJ1dHRvbiAqLworCUdQSU85MF9HUElPLAkvKiBwb3dlciBkZXRlY3QgKi8KKwlHUElPMTA3X0dQSU8sCS8qIGVhcnBob25lIGRldGVjdCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXQ1X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtdDVfZGV0ZWN0X2ludCwKKwkJCQl2b2lkICpkYXRhKQoreworCWludCBlcnIgPSAwOworCisJLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjI7CisJZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pLAorCQkJcGFsbXQ1X2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsICJTRF9QT1dFUiIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyMzsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyNDsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7CisJaWYgKGVycikKKwkJZ290byBlcnI0OworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjU7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKKworZXJyNToKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOworZXJyNDoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIpOworZXJyMzoKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiksIGRhdGEpOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOworZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10NV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIpOworCWZyZWVfaXJxKElSUV9HUElPX1BBTE1UNV9TRF9ERVRFQ1RfTiwgZGF0YSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKK30KKworc3RhdGljIGludCBwYWxtdDVfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdDVfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLnNldHBvd2VyCT0gcGFsbXQ1X21jaV9wb3dlciwKKwkuZ2V0X3JvCQk9IHBhbG10NV9tY2lfZ2V0X3JvLAorCS5pbml0IAkJPSBwYWxtdDVfbWNpX2luaXQsCisJLmV4aXQJCT0gcGFsbXQ1X21jaV9leGl0LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlib2FyZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbXQ1X21hdHJpeF9rZXlzW10gPSB7CisJS0VZKDAsIDAsIEtFWV9QT1dFUiksCisJS0VZKDAsIDEsIEtFWV9GMSksCisJS0VZKDAsIDIsIEtFWV9FTlRFUiksCisKKwlLRVkoMSwgMCwgS0VZX0YyKSwKKwlLRVkoMSwgMSwgS0VZX0YzKSwKKwlLRVkoMSwgMiwgS0VZX0Y0KSwKKworCUtFWSgyLCAwLCBLRVlfVVApLAorCUtFWSgyLCAyLCBLRVlfRE9XTiksCisKKwlLRVkoMywgMCwgS0VZX1JJR0hUKSwKKwlLRVkoMywgMiwgS0VZX0xFRlQpLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X2tleXBhZF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXRyaXhfa2V5X3Jvd3MJPSA0LAorCS5tYXRyaXhfa2V5X2NvbHMJPSAzLAorCS5tYXRyaXhfa2V5X21hcAkJPSBwYWxtdDVfbWF0cml4X2tleXMsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUJPSBBUlJBWV9TSVpFKHBhbG10NV9tYXRyaXhfa2V5cyksCisKKwkuZGVib3VuY2VfaW50ZXJ2YWwJPSAzMCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBwYWxtdDVfcHhhX2J1dHRvbnNbXSA9IHsKKwl7S0VZX0Y4LCBHUElPX05SX1BBTE1UNV9IT1RTWU5DX0JVVFRPTl9OLCAxLCAiSG90U3luYyBCdXR0b24iIH0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHBhbG10NV9weGFfa2V5c19kYXRhID0geworCS5idXR0b25zCT0gcGFsbXQ1X3B4YV9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUocGFsbXQ1X3B4YV9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10NV9weGFfa2V5cyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG10NV9weGFfa2V5c19kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCYWNrbGlnaHQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBhbG10NV9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9CTF9QT1dFUiwgIkJMIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUiwgIkxDRCBQT1dFUiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisKKwlyZXR1cm4gMDsKK2VycjM6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUik7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9CTF9QT1dFUik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtdDVfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlyZXR1cm4gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X2JhY2tsaWdodF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfQkxfUE9XRVIpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBwYWxtdDVfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IFBBTE1UNV9NQVhfSU5URU5TSVRZLAorCS5kZnRfYnJpZ2h0bmVzcwk9IFBBTE1UNV9NQVhfSU5URU5TSVRZLAorCS5wd21fcGVyaW9kX25zCT0gUEFMTVQ1X1BFUklPRF9OUywKKwkuaW5pdAkJPSBwYWxtdDVfYmFja2xpZ2h0X2luaXQsCisJLm5vdGlmeQkJPSBwYWxtdDVfYmFja2xpZ2h0X25vdGlmeSwKKwkuZXhpdAkJPSBwYWxtdDVfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdDVfYmFja2xpZ2h0ID0geworCS5uYW1lCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJPSB7CisJCS5wYXJlbnQJCT0gJnB4YTI3eF9kZXZpY2VfcHdtMC5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10NV9iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSXJEQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXQ1X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgMSk7CisJaWYgKGVycikKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUpOworZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKKwlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOworfQorCitzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5zdGFydHVwCQk9IHBhbG10NV9pcmRhX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHBhbG10NV9pcmRhX3NodXRkb3duLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHBhbG10NV91ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS5ncGlvX3ZidXMJCT0gR1BJT19OUl9QQUxNVDVfVVNCX0RFVEVDVF9OLAorCS5ncGlvX3ZidXNfaW52ZXJ0ZWQJPSAxLAorCS5ncGlvX3B1bGx1cAkJPSBHUElPX05SX1BBTE1UNV9VU0JfUE9XRVIsCisJLmdwaW9fcHVsbHVwX2ludmVydGVkCT0gMCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBvd2VyIHN1cHBseQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNULCAiQ0FCTEVfU1RBVEVfQUMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNUKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gMDsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXQ1X2lzX2FjX29ubGluZSh2b2lkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QpOworfQorCitzdGF0aWMgdm9pZCBwb3dlcl9zdXBwbHlfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7Cit9CisKK3N0YXRpYyBjaGFyICpwYWxtdDVfc3VwcGxpY2FudHNbXSA9IHsKKwkibWFpbi1iYXR0ZXJ5IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHBvd2VyX3N1cHBseV9pbmZvID0geworCS5pbml0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfaW5pdCwKKwkuaXNfYWNfb25saW5lICAgID0gcGFsbXQ1X2lzX2FjX29ubGluZSwKKwkuZXhpdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2V4aXQsCisJLnN1cHBsaWVkX3RvICAgICA9IHBhbG10NV9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShwYWxtdDVfc3VwcGxpY2FudHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0geworCS5uYW1lID0gInBkYS1wb3dlciIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdNOTd4eCBiYXR0ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHdtOTd4eF9iYXR0X3BkYXRhID0geworCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAorCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAorCS5jaGFyZ2VfZ3Bpbwk9IC0xLAorCS5tYXhfdm9sdGFnZQk9IFBBTE1UNV9CQVRfTUFYX1ZPTFRBR0UsCisJLm1pbl92b2x0YWdlCT0gUEFMTVQ1X0JBVF9NSU5fVk9MVEFHRSwKKwkuYmF0dF9tdWx0CT0gMTAwMCwKKwkuYmF0dF9kaXYJPSA0MTQsCisJLnRlbXBfbXVsdAk9IDEsCisJLnRlbXBfZGl2CT0gMSwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTywKKwkuYmF0dF9uYW1lCT0gIm1haW4tYmF0dCIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhU29DIGF1ZGlvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwYWxtMjd4X2Fzb2NfaW5mbyBwYWxtMjd4X2Fzb2NfcGRhdGEgPSB7CisJLmphY2tfZ3Bpbwk9IEdQSU9fTlJfUEFMTVQ1X0VBUlBIT05FX0RFVEVDVCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbXQ1X2xjZF9tb2Rlc1tdID0geworeworCS5waXhjbG9jawk9IDU3NjkyLAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSA0ODAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDMyLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSAxLAorCisJLmhzeW5jX2xlbgk9IDQsCisJLnZzeW5jX2xlbgk9IDEsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbXQ1X2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQk9IHBhbG10NV9sY2RfbW9kZXMsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUocGFsbXQ1X2xjZF9tb2RlcyksCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKKwkmcGFsbXQ1X3B4YV9rZXlzLAorI2VuZGlmCisJJnBhbG10NV9iYWNrbGlnaHQsCisJJnBvd2VyX3N1cHBseSwKK307CisKKy8qIHNldHVwIHVkYyBHUElPcyBpbml0aWFsIHN0YXRlICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X3VkY19pbml0KHZvaWQpCit7CisJaWYgKCFncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfVVNCX1BPV0VSLCAiVURDIFZidXMiKSkgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfVVNCX1BPV0VSLCAxKTsKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1VTQl9QT1dFUik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtdDVfcGluX2NvbmZpZykpOworCisJc2V0X3B4YV9mYl9pbmZvKCZwYWxtdDVfbGNkX3NjcmVlbik7CisJcHhhX3NldF9tY2lfaW5mbygmcGFsbXQ1X21jaV9wbGF0Zm9ybV9kYXRhKTsKKwlwYWxtdDVfdWRjX2luaXQoKTsKKwlweGFfc2V0X3VkY19pbmZvKCZwYWxtdDVfdWRjX2luZm8pOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZwYWxtdDVfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZ3bTk3eHhfYmF0dF9wZGF0YSk7CisJcGFsbTI3eF9hc29jX3NldF9wZGF0YSgmcGFsbTI3eF9hc29jX3BkYXRhKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChQQUxNVDUsICJQYWxtIFR1bmdzdGVufFQ1IikKKwkucGh5c19pbwk9IFBBTE1UNV9QSFlTX0lPX1NUQVJULAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcGFsbXQ1X2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCmluZGV4IGE5ZDk0ZjUuLmI0OTBjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCkBAIC0zMiwxMiArMzIsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3BhbG10eC5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCmluZGV4IDJmNzMwZGEuLmI4OGViNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKQEAgLTMzLDEzICszMywxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcGFsbXo3Mi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTAyNy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKaW5kZXggMzYxMzVhMC4uNmFiZmEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKQEAgLTI5LDEwICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvcGNtMDI3Lmg+CiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCmluZGV4IDM0ODQxYzcuLmY0NjY5OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKQEAgLTMxLDEzICszMSwxMiBAQAogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3BjbTk5MF9iYXNlYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggMTY0ZWIwYi4uODg0YjE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0xNCwxNSArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9sdWJib2NrLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiBzdHJ1Y3QgcHhhX2NwdV9wbV9mbnMgKnB4YV9jcHVfcG1fZm5zOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnNsZWVwX3NhdmU7CkBAIC01Nyw5ICs1MCw5IEBACiAKIAkJLyogaWYgaW52YWxpZCwgZGlzcGxheSBtZXNzYWdlIGFuZCB3YWl0IGZvciBhIGhhcmR3YXJlIHJlc2V0ICovCiAJCWlmIChjaGVja3N1bSAhPSBzbGVlcF9zYXZlX2NoZWNrc3VtKSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSwotCQkJTFVCX0hFWExFRCA9IDB4YmFkYmFkYzU7Ci0jZW5kaWYKKworCQkJbHViYm9ja19zZXRfaGV4bGVkKDB4YmFkYmFkYzUpOworCiAJCQl3aGlsZSAoMSkKIAkJCQlweGFfY3B1X3BtX2Zucy0+ZW50ZXIoc3RhdGUpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IGY5MDkzYmUuLjAzNmJiZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0zNiw5ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CkBAIC01MDMsMTIgKzUwMSwxMiBAQAogCiBzdGF0aWMgdm9pZCBwb29kbGVfcG93ZXJvZmYodm9pZCkKIHsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBwb29kbGVfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBwb29kbGVfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwb29kbGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wd20uYwppbmRleCAzY2E3ZmZjNi4uZmNkZDM3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wd20uaD4KIAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KIAogLyogUFdNIHJlZ2lzdGVycyBhbmQgYml0cyBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBQV01DUgkJKDB4MDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IDZjNTc1MjIuLjc3YzI2OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yNSw5ICsyNSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KQEAgLTMxMCwxNCArMzA5LDE0IEBACiB2b2lkIF9faW5pdCBweGEyNXhfaW5pdF9pcnEodm9pZCkKIHsKIAlweGFfaW5pdF9pcnEoMzIsIHB4YTI1eF9zZXRfd2FrZSk7Ci0JcHhhX2luaXRfZ3Bpbyg4NSwgcHhhMjV4X3NldF93YWtlKTsKKwlweGFfaW5pdF9ncGlvKElSUV9HUElPXzJfeCwgMiwgODQsIHB4YTI1eF9zZXRfd2FrZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAogdm9pZCBfX2luaXQgcHhhMjZ4X2luaXRfaXJxKHZvaWQpCiB7CiAJcHhhX2luaXRfaXJxKDMyLCBweGEyNXhfc2V0X3dha2UpOwotCXB4YV9pbml0X2dwaW8oOTAsIHB4YTI1eF9zZXRfd2FrZSk7CisJcHhhX2luaXRfZ3BpbyhJUlFfR1BJT18yX3gsIDIsIDg5LCBweGEyNXhfc2V0X3dha2UpOwogfQogI2VuZGlmCiAKQEAgLTM1NSw3ICszNTQsNyBAQAogCiAJCWNsa3NfcmVnaXN0ZXIocHhhMjV4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjV4X2Nsa3JlZ3MpKTsKIAotCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYSgxNikpKQorCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYShJUlFfRE1BLCAxNikpKQogCQkJcmV0dXJuIHJldDsKIAogCQlweGEyNXhfaW5pdF9wbSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCA0MTFiZWM1Li5hNDI1ZWM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMjEsOSArMjEsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CkBAIC0zMzIsNyArMzMxLDcgQEAKIHZvaWQgX19pbml0IHB4YTI3eF9pbml0X2lycSh2b2lkKQogewogCXB4YV9pbml0X2lycSgzNCwgcHhhMjd4X3NldF93YWtlKTsKLQlweGFfaW5pdF9ncGlvKDEyMSwgcHhhMjd4X3NldF93YWtlKTsKKwlweGFfaW5pdF9ncGlvKElSUV9HUElPXzJfeCwgMiwgMTIwLCBweGEyN3hfc2V0X3dha2UpOwogfQogCiAvKgpAQCAtMzgxLDcgKzM4MCw3IEBACiAKIAkJY2xrc19yZWdpc3RlcihweGEyN3hfY2xrcmVncywgQVJSQVlfU0laRShweGEyN3hfY2xrcmVncykpOwogCi0JCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKDMyKSkpCisJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDMyKSkpCiAJCQlyZXR1cm4gcmV0OwogCiAJCXB4YTI3eF9pbml0X3BtKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCmluZGV4IDczZDA0ZDguLjJmMzM5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTJ4eC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggODNmYjYwOS4uNGJhNmQyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTE3LDE1ICsxNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMwMC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJjbG9jay5oIgogCi1zdGF0aWMgc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgcHhhMzAwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGEzMDBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAogCU1GUF9BRERSX1goR1BJTzAsICAgR1BJTzIsICAgMHgwMGI0KSwKIAlNRlBfQUREUl9YKEdQSU8zLCAgIEdQSU8yNiwgIDB4MDI3YyksCkBAIC03NCw3ICs3Miw3IEBACiB9OwogCiAvKiBvdmVycmlkZSBweGEzMDAgTUZQIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwotc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHB4YTMxMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhMzEwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CiAJTUZQX0FERFJfWChHUElPMzAsICBHUElPOTgsICAgMHgwNDE4KSwKIAlNRlBfQUREUl9YKEdQSU83XzIsIEdQSU8xMl8yLCAweDA1MkMpLAogCkBAIC0xMDAsMTMgKzk4LDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBweGEzMDBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhMzAwKCkgfHwgY3B1X2lzX3B4YTMxMCgpKSB7Ci0JCXB4YTN4eF9pbml0X21mcCgpOwotCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGEzMDBfbWZwX2FkZHJfbWFwKTsKKwkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CisJCW1mcF9pbml0X2FkZHIocHhhMzAwX21mcF9hZGRyX21hcCk7CiAJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUoY29tbW9uX2Nsa3JlZ3MpKTsKIAl9CiAKIAlpZiAoY3B1X2lzX3B4YTMxMCgpKSB7Ci0JCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMxMF9tZnBfYWRkcl9tYXApOworCQltZnBfaW5pdF9hZGRyKHB4YTMxMF9tZnBfYWRkcl9tYXApOwogCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTMxMF9jbGtyZWdzKSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCmluZGV4IDM2ZjA2NjEuLjhiM2Q5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCkBAIC0xNywxNiArMTcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMyMC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJjbG9jay5oIgogCi1zdGF0aWMgc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgcHhhMzIwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGEzMjBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAogCU1GUF9BRERSX1goR1BJTzAsICBHUElPNCwgICAweDAxMjQpLAogCU1GUF9BRERSX1goR1BJTzUsICBHUElPOSwgICAweDAyOEMpLApAQCAtODksOCArODYsOCBAQAogc3RhdGljIGludCBfX2luaXQgcHhhMzIwX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2lzX3B4YTMyMCgpKSB7Ci0JCXB4YTN4eF9pbml0X21mcCgpOwotCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGEzMjBfbWZwX2FkZHJfbWFwKTsKKwkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CisJCW1mcF9pbml0X2FkZHIocHhhMzIwX21mcF9hZGRyX21hcCk7CiAJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzIwX2Nsa3JlZ3MpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggNDkwODkzOC4uYjAyZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgpAQCAtNTM4LDcgKzUzOSw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG4iOiA6InIiKHZhbHVlKSk7CiAKIAlweGFfaW5pdF9pcnEoNTYsIHB4YTN4eF9zZXRfd2FrZSk7Ci0JcHhhX2luaXRfZ3BpbygxMjgsIE5VTEwpOworCXB4YV9pbml0X2dwaW8oSVJRX0dQSU9fMl94LCAyLCAxMjcsIE5VTEwpOwogfQogCiAvKgpAQCAtNTk0LDcgKzU5NSw3IEBACiAKIAkJY2xrc19yZWdpc3RlcihweGEzeHhfY2xrcmVncywgQVJSQVlfU0laRShweGEzeHhfY2xrcmVncykpOwogCi0JCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKDMyKSkpCisJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDMyKSkpCiAJCQlyZXR1cm4gcmV0OwogCiAJCXB4YTN4eF9pbml0X3BtKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCmluZGV4IDEzZTZiZmQuLjcxMTMxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCkBAIC0xNiwxMCArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisjaW5jbHVkZSA8bWFjaC9weGE5MzAuaD4KIAotc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHB4YTkzMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhOTMwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CiAKIAlNRlBfQUREUihHUElPMCwgMHgwMmUwKSwKIAlNRlBfQUREUihHUElPMSwgMHgwMmRjKSwKQEAgLTE4MCw4ICsxNzksOCBAQAogc3RhdGljIGludCBfX2luaXQgcHhhOTMwX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2lzX3B4YTkzMCgpKSB7Ci0JCXB4YTN4eF9pbml0X21mcCgpOwotCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGE5MzBfbWZwX2FkZHJfbWFwKTsKKwkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CisJCW1mcF9pbml0X2FkZHIocHhhOTMwX21mcF9hZGRyX21hcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcmVzZXQuYwppbmRleCAwMGIyZGMyLi5kZjI5ZDQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Jlc2V0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KICNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+CiAKIHVuc2lnbmVkIGludCByZXNldF9zdGF0dXM7CkBAIC04MSw3ICs4MSw3IEBACiAJT1NNUjMgPSBPU0NSICsgMzY4NjQwOwkvKiAuLi4gaW4gMTAwIG1zICovCiB9CiAKLXZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY2xlYXJfcmVzZXRfc3RhdHVzKFJFU0VUX1NUQVRVU19BTEwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKaW5kZXggNWQwMmE3My4uZmY4MjM5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYwpAQCAtMjUsMTEgKzI1LDkgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTkzMC5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwppbmRleCBmMDg0NWMxLi4xNmI0ZWM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9wbS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggYTYyYzgzNy4uMmVkOTVmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAKICNkZWZpbmUgTURSRUZSX0tESVYJMHgyMDBhNDAwMAkvLyBhbGwgYmFua3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDZkNDQ3YzkuLjhjNjFkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtNDQsOSArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgpAQCAtMTA1LDYgKzEwMywxMiBAQAogCUdQSU81N19uSU9JUzE2LAogCUdQSU8xMDRfUFNLVFNFTCwKIAorCS8qIEkyUyAqLworCUdQSU8yOF9JMlNfQklUQ0xLX09VVCwKKwlHUElPMjlfSTJTX1NEQVRBX0lOLAorCUdQSU8zMF9JMlNfU0RBVEFfT1VULAorCUdQSU8zMV9JMlNfU1lOQywKKwogCS8qIE1NQyAqLwogCUdQSU8zMl9NTUNfQ0xLLAogCUdQSU8xMTJfTU1DX0NNRCwKQEAgLTcwMywxMCArNzA3LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNwaXR6X3Bvd2Vyb2ZmKHZvaWQpCiB7Ci0JYXJtX21hY2hpbmVfcmVzdGFydCgnZycpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2cnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgc3BpdHpfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBzcGl0el9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qIEJvb3Rsb2FkZXIgbWFnaWMgZm9yIGEgcmVib290ICovCiAJaWYoKE1TQzAgJiAweGZmZmYwMDAwKSA9PSAweDdmZjAwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMKaW5kZXggMDcyZTc3Yy4uMmU0NDkwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0el9wbS5jCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwppbmRleCA2ZjQyMDA0Li45NjVlMzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9zc3AuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNzcC5oPgogCiAjZGVmaW5lIFRJTUVPVVQgMTAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zdGFuZGJ5LlMgYi9hcmNoL2FybS9tYWNoLXB4YS9zdGFuZGJ5LlMKaW5kZXggZjM4MjFjZi4uMjlmNWY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3RhbmRieS5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3N0YW5kYnkuUwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAJCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYwppbmRleCA1OGVmMDhhLi5iNzUzNTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKQEAgLTIyLDkgKzIyLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTkzMC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCmluZGV4IDk1NjU2YTcuLjhlYjM4MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtb3N0Lmg+CiAKIC8qCiAgKiBUaGlzIGlzIFBYQSdzIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBhIHJlc29sdXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAzMzMyZTVkLi42ZThhZGU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0zNiw4ICszNiw4IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CkBAIC04NzYsMTAgKzg3NiwxMCBAQAogCiBzdGF0aWMgdm9pZCB0b3NhX3Bvd2Vyb2ZmKHZvaWQpCiB7Ci0JYXJtX21hY2hpbmVfcmVzdGFydCgnZycpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2cnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgdG9zYV9yZXN0YXJ0KGNoYXIgbW9kZSkKK3N0YXRpYyB2b2lkIHRvc2FfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBCb290bG9hZGVyIG1hZ2ljIGZvciBhIHJlYm9vdCAqLwogCWlmKChNU0MwICYgMHhmZmZmMDAwMCkgPT0gMHg3ZmYwMDAwMCkKQEAgLTkxOSw3ICs5MTksNyBAQAogCXB4YTJ4eF9zZXRfc3BpX2luZm8oMiwgJnB4YV9zc3BfbWFzdGVyX2luZm8pOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHNwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaV9ib2FyZF9pbmZvKSk7CiAKLQljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsICZ0YzYzOTN4Yl9kZXZpY2UuZGV2LCAiR1BJTzExX0NMSyIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoIkNMS19DSzNQNk1JIiwgdGM2MzkzeGJfZGV2aWNlLm5hbWUsICJHUElPMTFfQ0xLIiwgTlVMTCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IGE3MmUzYWQuLmY3OWM5Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtMzksMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3RyaXplcHM0Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKaW5kZXggNGIzMTIwZC4uMGU2NTM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCkBAIC00MiwxMiArNDIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9iaXRmaWVsZC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvdmlwZXIuaD4KIApAQCAtOTU2LDcgKzk1Myw3IEBACiAJfSwKIAl7CiAJCS52aXJ0dWFsID0gVklQRVJfUEMxMDRJT19CQVNFLAotCQkucGZuICAgICA9IF9fcGh5c190b19wZm4oX1BDTUNJQTFJTyksCisJCS5wZm4gICAgID0gX19waHlzX3RvX3BmbigweDMwMDAwMDAwKSwKIAkJLmxlbmd0aCAgPSAweDAwODAwMDAwLAogCQkudHlwZSAgICA9IE1UX0RFVklDRSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwppbmRleCA0NjUzODg4Li5jMWY3MzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwpAQCAtMTgsOSArMTgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzAwLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvenlsb25pdGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwppbmRleCAyOGU0ZTYyLi40ZTFjNDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMyMC5oPgogI2luY2x1ZGUgPG1hY2gvenlsb25pdGUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBhZDkxMTg1Li5iNmVjMTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC0zNSw2ICszNSw3IEBACiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQjExTVBDb3JlIHBsYXRmb3JtIgogCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgTVBDb3JlIFBsYXRmb3JtIEJhc2Vib2FyZC4KIAkgIFBCMTFNUENvcmUgaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKQEAgLTUxLDYgKzUyLDcgQEAKIAlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCLUE4IHBsYXRmb3JtIgogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQ29ydGV4LUE4IFBsYXRmb3JtIEJhc2Vib2FyZC4KIAkgIFBCLUE4IGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBDb3J0ZXgtQTggYW5kIGhhcyBzdXBwb3J0IGZvcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBiZDJhYTRmLi5kNjc2NjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xNTAsNiArMTUxLDQ0IEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZXRoX2RldmljZSk7CiB9CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfdXNiX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImlzcDE3NjAiLAorCS5udW1fcmVzb3VyY2VzCQk9IDIsCit9OworCitpbnQgcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXJlYWx2aWV3X3VzYl9kZXZpY2UucmVzb3VyY2UgPSByZXM7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfdXNiX2RldmljZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvIHBhdGFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuaW9wb3J0X3NoaWZ0CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhdGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfQ0ZfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19DRl9CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfQ0ZfQkFTRSArIDB4MTAwLAorCQkuZW5kCQk9IFJFQUxWSUVXX0NGX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJwYXRhX3BsYXRmb3JtIiwKKwkuaWQJCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUocGF0YV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBwYXRhX3Jlc291cmNlcywKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhdGFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19pMmNfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IFJFQUxWSUVXX0kyQ19CQVNFLAogCS5lbmQJCT0gUkVBTFZJRVdfSTJDX0JBU0UgKyBTWl80SyAtIDEsCkBAIC0xNTgsMTEgKzE5NywyNSBAQAogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInZlcnNhdGlsZS1pMmMiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkubnVtX3Jlc291cmNlcwk9IDEsCiAJLnJlc291cmNlCT0gJnJlYWx2aWV3X2kyY19yZXNvdXJjZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcmVhbHZpZXdfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtZHMxMzA3IiwgMHhkMCA+PiAxKSwKKwkJLnR5cGUgPSAiZHMxMzM4IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcmVhbHZpZXdfaTJjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgcmVhbHZpZXdfaTJjX2JvYXJkX2luZm8sCisJCQkJICAgICAgIEFSUkFZX1NJWkUocmVhbHZpZXdfaTJjX2JvYXJkX2luZm8pKTsKK30KK2FyY2hfaW5pdGNhbGwocmVhbHZpZXdfaTJjX2luaXQpOworCiAjZGVmaW5lIFJFQUxWSUVXX1NZU01DSQkoX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19NQ0lfT0ZGU0VUKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlYWx2aWV3X21tY19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAppbmRleCA0NDI2OWIxLi4yMWMwODYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaApAQCAtNDUsNiArNDUsNyBAQAogfQogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19mbGFzaF9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19pMmNfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKIGV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CkBAIC02Miw1ICs2Myw2IEBACiBleHRlcm4gdm9pZCByZWFsdmlld190aW1lcl9pbml0KHVuc2lnbmVkIGludCB0aW1lcl9pcnEpOwogZXh0ZXJuIGludCByZWFsdmlld19mbGFzaF9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIG51bSk7CiBleHRlcm4gaW50IHJlYWx2aWV3X2V0aF9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CitleHRlcm4gaW50IHJlYWx2aWV3X3VzYl9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGJhOC5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGJhOC5oCmluZGV4IGM4YmVkOGYuLjMwN2Y5N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiYTguaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYmE4LmgKQEAgLTQ1LDggKzQ1LDYgQEAKICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9ETUNfQkFTRQkJCTB4MTAwRTAwMDAJLyogRE1DIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9TTUNfQkFTRQkJCTB4MTAwRTEwMDAJLyogU01DIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9DQU5fQkFTRQkJCTB4MTAwRTIwMDAJLyogQ0FOIGJ1cyAqLwotI2RlZmluZSBSRUFMVklFV19QQkE4X0NGX0JBU0UJCQkweDE4MDAwMDAwCS8qIENvbXBhY3QgZmxhc2ggKi8KLSNkZWZpbmUgUkVBTFZJRVdfUEJBOF9DRl9NRU1fQkFTRQkJMHgxODAwMzAwMAkvKiBTTUMgZm9yIENvbXBhY3QgZmxhc2ggKi8KICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9HSUNfQ1BVX0JBU0UJCTB4MUUwMDAwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfRkxBU0gwX0JBU0UJCTB4NDAwMDAwMDAKICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9GTEFTSDBfU0laRQkJU1pfNjRNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCA3OTNhM2EzLi5jOGY1MDgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTIwNCw2ICsyMDQsMTIgQEAKICNkZWZpbmUgUkVBTFZJRVdfTFRfQkFTRSAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBMb2dpYyBUaWxlIGV4cGFuc2lvbiAqLwogCiAvKgorICogQ29tcGFjdEZsYXNoCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfQ0ZfQkFTRQkJMHgxODAwMDAwMAkvKiBDb21wYWN0Rmxhc2ggKi8KKyNkZWZpbmUgUkVBTFZJRVdfQ0ZfTUVNX0JBU0UJCTB4MTgwMDMwMDAJLyogU01DIGZvciBDb21wYWN0Rmxhc2ggKi8KKworLyoKICAqIERpc2sgb24gQ2hpcAogICovCiAjZGVmaW5lIFJFQUxWSUVXX0RPQ19CQVNFICAgICAgICAgICAgIDB4MkMwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYTJmNjFjNy4uMWExNWE0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7CiAJdW5zaWduZWQgaW50IHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCBiZWQzOWVkLi5jMjBmYmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0yNjQsNiArMjY0LDE5IEBACiAJcmV0dXJuIHJlYWx2aWV3X2V0aF9yZWdpc3RlcihuYW1lLCByZWFsdmlld19lYl9ldGhfcmVzb3VyY2VzKTsKIH0KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX0VCX1VTQl9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX0VCX1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IElSUV9FQl9VU0IsCisJCS5lbmQJCT0gSVJRX0VCX1VTQiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJaWYgKGNvcmVfdGlsZV9lYjExbXAoKSB8fCBjb3JlX3RpbGVfYTltcCgpKSB7CkBAIC0zMjMsNiArMzM2LDggQEAKIAkvKiBwbGF0Zm9ybSBkZXZpY2VzICovCiAJcmVhbHZpZXdfZWJfZXRoX3Jlc291cmNlc1sxXS5zdGFydAk9IElSUV9FQjExTVBfRVRIOwogCXJlYWx2aWV3X2ViX2V0aF9yZXNvdXJjZXNbMV0uZW5kCT0gSVJRX0VCMTFNUF9FVEg7CisJcmVhbHZpZXdfZWJfaXNwMTc2MV9yZXNvdXJjZXNbMV0uc3RhcnQJPSBJUlFfRUIxMU1QX1VTQjsKKwlyZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlc1sxXS5lbmQJPSBJUlFfRUIxMU1QX1VTQjsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X2ViX3RpbWVyX2luaXQodm9pZCkKQEAgLTM2Niw2ICszODEsNyBAQAogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19lYl9mbGFzaF9yZXNvdXJjZSwgMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAlldGhfZGV2aWNlX3JlZ2lzdGVyKCk7CisJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X2ViX2lzcDE3NjFfcmVzb3VyY2VzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwppbmRleCA4ZjA2ODNjLi5hNjRiODRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKQEAgLTIyMiw2ICsyMjIsMTkgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYjExNzZfaXNwMTc2MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExNzZfVVNCX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEIxMTc2X1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IElSUV9QQjExNzZfVVNCLAorCQkuZW5kCQk9IElSUV9QQjExNzZfVVNCLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAkvKiBBUk0xMTc2IERldkNoaXAgR0lDLCBwcmltYXJ5ICovCkBAIC0yNjAsNiArMjczLDggQEAKIAogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExNzZfZmxhc2hfcmVzb3VyY2UsIDEpOwogCXJlYWx2aWV3X2V0aF9yZWdpc3RlcihOVUxMLCByZWFsdmlld19wYjExNzZfc21zYzkxMXhfcmVzb3VyY2VzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOworCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19wYjExNzZfaXNwMTc2MV9yZXNvdXJjZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IDNlYmRiMmQuLmVhMWU2MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjMwLDMxICsyMzAsMTkgQEAKIAl9LAogfTsKIAotc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTFtcF9jZl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfcGIxMW1wX2lzcDE3NjFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMU1QX0NGX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEIxMU1QX0NGX0JBU0UgKyBTWl80SyAtIDEsCisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExTVBfVVNCX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEIxMU1QX1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCMTFNUF9DRl9NRU1fQkFTRSwKLQkJLmVuZAkJPSBSRUFMVklFV19QQjExTVBfQ0ZfTUVNX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CQk9IC0xLAkJLyogRklYTUU6IEZpbmQgY29ycmVjdCBpcnEgKi8KLQkJLmVuZAkJPSAtMSwKKwkJLnN0YXJ0CQk9IElSUV9UQzExTVBfVVNCLAorCQkuZW5kCQk9IElSUV9UQzExTVBfVVNCLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfcGIxMW1wX2NmX2RldmljZSA9IHsKLQkubmFtZQkJPSAiY29tcGFjdGZsYXNoIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2NmX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcmVhbHZpZXdfcGIxMW1wX2NmX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcGxkY3RybDsKQEAgLTMwOCw3ICsyOTYsOCBAQAogCQkJCUFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2ZsYXNoX3Jlc291cmNlKSk7CiAJcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKE5VTEwsIHJlYWx2aWV3X3BiMTFtcF9zbXNjOTExeF9yZXNvdXJjZXMpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfaTJjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExbXBfY2ZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2NmX2RldmljZSk7CisJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X3BiMTFtcF9pc3AxNzYxX3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwppbmRleCAzNGM5NDQzLi5kNmFjMWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwpAQCAtMjIxLDMxICsyMjEsMTkgQEAKIAl9LAogfTsKIAotc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiYThfY2ZfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiYThfaXNwMTc2MV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAkJPSBSRUFMVklFV19QQkE4X0NGX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9DRl9CQVNFICsgU1pfNEsgLSAxLAorCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEJBOF9VU0JfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19QQkE4X1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCQThfQ0ZfTUVNX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9DRl9NRU1fQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJCT0gLTEsCQkvKiBGSVhNRTogRmluZCBjb3JyZWN0IGlycSAqLwotCQkuZW5kCQk9IC0xLAorCQkuc3RhcnQJCT0gSVJRX1BCQThfVVNCLAorCQkuZW5kCQk9IElSUV9QQkE4X1VTQiwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X3BiYThfY2ZfZGV2aWNlID0gewotCS5uYW1lCQk9ICJjb21wYWN0Zmxhc2giLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZWFsdmlld19wYmE4X2NmX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcmVhbHZpZXdfcGJhOF9jZl9yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogQVJNIFBCLUE4IG9uLWJvYXJkIEdJQyAqLwpAQCAtMjc2LDcgKzI2NCw4IEBACiAJCQkJQVJSQVlfU0laRShyZWFsdmlld19wYmE4X2ZsYXNoX3Jlc291cmNlKSk7CiAJcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKE5VTEwsIHJlYWx2aWV3X3BiYThfc21zYzkxMXhfcmVzb3VyY2VzKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfcGJhOF9jZl9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfY2ZfZGV2aWNlKTsKKwlyZWFsdmlld191c2JfcmVnaXN0ZXIocmVhbHZpZXdfcGJhOF9pc3AxNzYxX3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYwppbmRleCA3OTU4YTMwLi5jNDdkOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYwpAQCAtMjYsNiArMjYsMTYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogCitzdHJ1Y3QgaW9tZF9kbWEgeworCXN0cnVjdCBkbWFfc3RydWN0CWRtYTsKKwl1bnNpZ25lZCBpbnQJCXN0YXRlOworCXVuc2lnbmVkIGxvbmcJCWJhc2U7CQkvKiBDb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLworCWludAkJCWlycTsJCS8qIENvbnRyb2xsZXIgSVJRICovCisJc3RydWN0IHNjYXR0ZXJsaXN0CWN1cl9zZzsJCS8qIEN1cnJlbnQgY29udHJvbGxlciBidWZmZXIgKi8KKwlkbWFfYWRkcl90CQlkbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQJCWRtYV9sZW47Cit9OworCiAjaWYgMAogdHlwZWRlZiBlbnVtIHsKIAlkbWFfc2l6ZV84CT0gMSwKQEAgLTQ0LDE1ICs1NCwxNSBAQAogI2RlZmluZSBDUgkoSU9NRF9JTzBDUiAtIElPTURfSU8wQ1VSQSkKICNkZWZpbmUgU1QJKElPTURfSU8wU1QgLSBJT01EX0lPMENVUkEpCiAKLXN0YXRpYyB2b2lkIGlvbWRfZ2V0X25leHRfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlvbWRfZ2V0X25leHRfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc3RydWN0IGlvbWRfZG1hICppZG1hKQogewogCXVuc2lnbmVkIGxvbmcgZW5kLCBvZmZzZXQsIGZsYWdzID0gMDsKIAotCWlmIChkbWEtPnNnKSB7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IGRtYS0+c2ctPmRtYV9hZGRyZXNzOworCWlmIChpZG1hLT5kbWEuc2cpIHsKKwkJc2ctPmRtYV9hZGRyZXNzID0gaWRtYS0+ZG1hX2FkZHI7CiAJCW9mZnNldCA9IHNnLT5kbWFfYWRkcmVzcyAmIH5QQUdFX01BU0s7CiAKLQkJZW5kID0gb2Zmc2V0ICsgZG1hLT5zZy0+bGVuZ3RoOworCQllbmQgPSBvZmZzZXQgKyBpZG1hLT5kbWFfbGVuOwogCiAJCWlmIChlbmQgPiBQQUdFX1NJWkUpCiAJCQllbmQgPSBQQUdFX1NJWkU7CkBAIC02MiwxNSArNzIsMTcgQEAKIAogCQlzZy0+bGVuZ3RoID0gZW5kIC0gVFJBTlNGRVJfU0laRTsKIAotCQlkbWEtPnNnLT5sZW5ndGggLT0gZW5kIC0gb2Zmc2V0OwotCQlkbWEtPnNnLT5kbWFfYWRkcmVzcyArPSBlbmQgLSBvZmZzZXQ7CisJCWlkbWEtPmRtYV9sZW4gLT0gZW5kIC0gb2Zmc2V0OworCQlpZG1hLT5kbWFfYWRkciArPSBlbmQgLSBvZmZzZXQ7CiAKLQkJaWYgKGRtYS0+c2ctPmxlbmd0aCA9PSAwKSB7Ci0JCQlpZiAoZG1hLT5zZ2NvdW50ID4gMSkgewotCQkJCWRtYS0+c2crKzsKLQkJCQlkbWEtPnNnY291bnQtLTsKKwkJaWYgKGlkbWEtPmRtYV9sZW4gPT0gMCkgeworCQkJaWYgKGlkbWEtPmRtYS5zZ2NvdW50ID4gMSkgeworCQkJCWlkbWEtPmRtYS5zZyA9IHNnX25leHQoaWRtYS0+ZG1hLnNnKTsKKwkJCQlpZG1hLT5kbWFfYWRkciA9IGlkbWEtPmRtYS5zZy0+ZG1hX2FkZHJlc3M7CisJCQkJaWRtYS0+ZG1hX2xlbiA9IGlkbWEtPmRtYS5zZy0+bGVuZ3RoOworCQkJCWlkbWEtPmRtYS5zZ2NvdW50LS07CiAJCQl9IGVsc2UgewotCQkJCWRtYS0+c2cgPSBOVUxMOworCQkJCWlkbWEtPmRtYS5zZyA9IE5VTEw7CiAJCQkJZmxhZ3MgfD0gRE1BX0VORF9TOwogCQkJfQogCQl9CkBAIC04NSw4ICs5Nyw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpb21kX2RtYV9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCWRtYV90ICpkbWEgPSAoZG1hX3QgKilkZXZfaWQ7Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gZG1hLT5kbWFfYmFzZTsKKwlzdHJ1Y3QgaW9tZF9kbWEgKmlkbWEgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gaWRtYS0+YmFzZTsKIAogCWRvIHsKIAkJdW5zaWduZWQgaW50IHN0YXR1czsKQEAgLTk1LDkzICsxMDcsOTkgQEAKIAkJaWYgKCEoc3RhdHVzICYgRE1BX1NUX0lOVCkpCiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQkJaWYgKChkbWEtPnN0YXRlIF4gc3RhdHVzKSAmIERNQV9TVF9BQikKLQkJCWlvbWRfZ2V0X25leHRfc2coJmRtYS0+Y3VyX3NnLCBkbWEpOworCQlpZiAoKGlkbWEtPnN0YXRlIF4gc3RhdHVzKSAmIERNQV9TVF9BQikKKwkJCWlvbWRfZ2V0X25leHRfc2coJmlkbWEtPmN1cl9zZywgaWRtYSk7CiAKIAkJc3dpdGNoIChzdGF0dXMgJiAoRE1BX1NUX09GTCB8IERNQV9TVF9BQikpIHsKIAkJY2FzZSBETUFfU1RfT0ZMOgkJCS8qIE9JQSAqLwogCQljYXNlIERNQV9TVF9BQjoJCQkJLyogLklCICovCi0JCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5kbWFfYWRkcmVzcywgYmFzZSArIENVUkEpOwotCQkJaW9tZF93cml0ZWwoZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQSk7Ci0JCQlkbWEtPnN0YXRlID0gRE1BX1NUX0FCOworCQkJaW9tZF93cml0ZWwoaWRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQSk7CisJCQlpb21kX3dyaXRlbChpZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQSk7CisJCQlpZG1hLT5zdGF0ZSA9IERNQV9TVF9BQjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRE1BX1NUX09GTCB8IERNQV9TVF9BQjoJCS8qIE9JQiAqLwogCQljYXNlIDA6CQkJCQkvKiAuSUEgKi8KLQkJCWlvbWRfd3JpdGVsKGRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQik7Ci0JCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5sZW5ndGgsIGJhc2UgKyBFTkRCKTsKLQkJCWRtYS0+c3RhdGUgPSAwOworCQkJaW9tZF93cml0ZWwoaWRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQik7CisJCQlpb21kX3dyaXRlbChpZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQik7CisJCQlpZG1hLT5zdGF0ZSA9IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChzdGF0dXMgJiBETUFfU1RfT0ZMICYmCi0JCSAgICBkbWEtPmN1cl9zZy5sZW5ndGggPT0gKERNQV9FTkRfU3xETUFfRU5EX0wpKQorCQkgICAgaWRtYS0+Y3VyX3NnLmxlbmd0aCA9PSAoRE1BX0VORF9TfERNQV9FTkRfTCkpCiAJCQlicmVhazsKIAl9IHdoaWxlICgxKTsKIAotCWRtYS0+c3RhdGUgPSB+RE1BX1NUX0FCOworCWlkbWEtPnN0YXRlID0gfkRNQV9TVF9BQjsKIAlkaXNhYmxlX2lycShpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGlvbWRfcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIGludCBpb21kX3JlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCXJldHVybiByZXF1ZXN0X2lycShkbWEtPmRtYV9pcnEsIGlvbWRfZG1hX2hhbmRsZSwKLQkJCSAgIElSUUZfRElTQUJMRUQsIGRtYS0+ZGV2aWNlX2lkLCBkbWEpOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKworCXJldHVybiByZXF1ZXN0X2lycShpZG1hLT5pcnEsIGlvbWRfZG1hX2hhbmRsZSwKKwkJCSAgIElSUUZfRElTQUJMRUQsIGlkbWEtPmRtYS5kZXZpY2VfaWQsIGlkbWEpOwogfQogCi1zdGF0aWMgdm9pZCBpb21kX2ZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlvbWRfZnJlZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JZnJlZV9pcnEoZG1hLT5kbWFfaXJxLCBkbWEpOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKworCWZyZWVfaXJxKGlkbWEtPmlycSwgaWRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvbWRfZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpb21kX2VuYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGRtYS0+ZG1hX2Jhc2U7CisJc3RydWN0IGlvbWRfZG1hICppZG1hID0gY29udGFpbmVyX29mKGRtYSwgc3RydWN0IGlvbWRfZG1hLCBkbWEpOworCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBpZG1hLT5iYXNlOwogCXVuc2lnbmVkIGludCBjdHJsID0gVFJBTlNGRVJfU0laRSB8IERNQV9DUl9FOwogCi0JaWYgKGRtYS0+aW52YWxpZCkgewotCQlkbWEtPmludmFsaWQgPSAwOworCWlmIChpZG1hLT5kbWEuaW52YWxpZCkgeworCQlpZG1hLT5kbWEuaW52YWxpZCA9IDA7CiAKIAkJLyoKIAkJICogQ29wZSB3aXRoIElTQS1zdHlsZSBkcml2ZXJzIHdoaWNoIGV4cGVjdCBjYWNoZQogCQkgKiBjb2hlcmVuY2UuCiAJCSAqLwotCQlpZiAoIWRtYS0+c2cpIHsKLQkJCWRtYS0+c2cgPSAmZG1hLT5idWY7Ci0JCQlkbWEtPnNnY291bnQgPSAxOwotCQkJZG1hLT5idWYubGVuZ3RoID0gZG1hLT5jb3VudDsKLQkJCWRtYS0+YnVmLmRtYV9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoTlVMTCwKLQkJCQlkbWEtPmFkZHIsIGRtYS0+Y291bnQsCi0JCQkJZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEID8KKwkJaWYgKCFpZG1hLT5kbWEuc2cpIHsKKwkJCWlkbWEtPmRtYS5zZyA9ICZpZG1hLT5kbWEuYnVmOworCQkJaWRtYS0+ZG1hLnNnY291bnQgPSAxOworCQkJaWRtYS0+ZG1hLmJ1Zi5sZW5ndGggPSBpZG1hLT5kbWEuY291bnQ7CisJCQlpZG1hLT5kbWEuYnVmLmRtYV9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoTlVMTCwKKwkJCQlpZG1hLT5kbWEuYWRkciwgaWRtYS0+ZG1hLmNvdW50LAorCQkJCWlkbWEtPmRtYS5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEID8KIAkJCQlETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKIAkJfQogCiAJCWlvbWRfd3JpdGViKERNQV9DUl9DLCBkbWFfYmFzZSArIENSKTsKLQkJZG1hLT5zdGF0ZSA9IERNQV9TVF9BQjsKKwkJaWRtYS0+c3RhdGUgPSBETUFfU1RfQUI7CiAJfQotCQkKLQlpZiAoZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKQorCisJaWYgKGlkbWEtPmRtYS5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKQogCQljdHJsIHw9IERNQV9DUl9EOwogCiAJaW9tZF93cml0ZWIoY3RybCwgZG1hX2Jhc2UgKyBDUik7Ci0JZW5hYmxlX2lycShkbWEtPmRtYV9pcnEpOworCWVuYWJsZV9pcnEoaWRtYS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgaW9tZF9kaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpb21kX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBkbWEtPmRtYV9iYXNlOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gaWRtYS0+YmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChkbWEtPnN0YXRlICE9IH5ETUFfU1RfQUIpCi0JCWRpc2FibGVfaXJxKGRtYS0+ZG1hX2lycSk7CisJaWYgKGlkbWEtPnN0YXRlICE9IH5ETUFfU1RfQUIpCisJCWRpc2FibGVfaXJxKGlkbWEtPmlycSk7CiAJaW9tZF93cml0ZWIoMCwgZG1hX2Jhc2UgKyBDUik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGlvbWRfc2V0X2RtYV9zcGVlZChkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEsIGludCBjeWNsZSkKK3N0YXRpYyBpbnQgaW9tZF9zZXRfZG1hX3NwZWVkKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hLCBpbnQgY3ljbGUpCiB7CiAJaW50IHRjciwgc3BlZWQ7CiAKQEAgLTE5Nyw3ICsyMTUsNyBAQAogCXRjciA9IGlvbWRfcmVhZGIoSU9NRF9ETUFUQ1IpOwogCXNwZWVkICY9IDM7CiAKLQlzd2l0Y2ggKGNoYW5uZWwpIHsKKwlzd2l0Y2ggKGNoYW4pIHsKIAljYXNlIERNQV8wOgogCQl0Y3IgPSAodGNyICYgfjB4MDMpIHwgc3BlZWQ7CiAJCWJyZWFrOwpAQCAtMjM2LDE2ICsyNTQsMjIgQEAKIAkubmFtZQk9ICJmbG9wcHlkbWEiCiB9OwogCi1zdGF0aWMgdm9pZCBmbG9wcHlfZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdHJ1Y3QgZmxvcHB5X2RtYSB7CisJc3RydWN0IGRtYV9zdHJ1Y3QJZG1hOworCXVuc2lnbmVkIGludAkJZmlxOworfTsKKworc3RhdGljIHZvaWQgZmxvcHB5X2VuYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CisJc3RydWN0IGZsb3BweV9kbWEgKmZkbWEgPSBjb250YWluZXJfb2YoZG1hLCBzdHJ1Y3QgZmxvcHB5X2RtYSwgZG1hKTsKIAl2b2lkICpmaXFoYW5kbGVyX3N0YXJ0OwogCXVuc2lnbmVkIGludCBmaXFoYW5kbGVyX2xlbmd0aDsKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwogCi0JaWYgKGRtYS0+c2cpCisJaWYgKGZkbWEtPmRtYS5zZykKIAkJQlVHKCk7CiAKLQlpZiAoZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKSB7CisJaWYgKGZkbWEtPmRtYS5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKSB7CiAJCWV4dGVybiB1bnNpZ25lZCBjaGFyIGZsb3BweV9maXFpbl9zdGFydCwgZmxvcHB5X2ZpcWluX2VuZDsKIAkJZmlxaGFuZGxlcl9zdGFydCA9ICZmbG9wcHlfZmlxaW5fc3RhcnQ7CiAJCWZpcWhhbmRsZXJfbGVuZ3RoID0gJmZsb3BweV9maXFpbl9lbmQgLSAmZmxvcHB5X2ZpcWluX3N0YXJ0OwpAQCAtMjU1LDggKzI3OSw4IEBACiAJCWZpcWhhbmRsZXJfbGVuZ3RoID0gJmZsb3BweV9maXFvdXRfZW5kIC0gJmZsb3BweV9maXFvdXRfc3RhcnQ7CiAJfQogCi0JcmVncy5BUk1fcjkgID0gZG1hLT5jb3VudDsKLQlyZWdzLkFSTV9yMTAgPSAodW5zaWduZWQgbG9uZylkbWEtPmFkZHI7CisJcmVncy5BUk1fcjkgID0gZmRtYS0+ZG1hLmNvdW50OworCXJlZ3MuQVJNX3IxMCA9ICh1bnNpZ25lZCBsb25nKWZkbWEtPmRtYS5hZGRyOwogCXJlZ3MuQVJNX2ZwICA9ICh1bnNpZ25lZCBsb25nKUZMT1BQWURNQV9CQVNFOwogCiAJaWYgKGNsYWltX2ZpcSgmZmgpKSB7CkBAIC0yNjYsMTYgKzI5MCwxNyBAQAogCiAJc2V0X2ZpcV9oYW5kbGVyKGZpcWhhbmRsZXJfc3RhcnQsIGZpcWhhbmRsZXJfbGVuZ3RoKTsKIAlzZXRfZmlxX3JlZ3MoJnJlZ3MpOwotCWVuYWJsZV9maXEoZG1hLT5kbWFfaXJxKTsKKwllbmFibGVfZmlxKGZkbWEtPmZpcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsb3BweV9kaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBmbG9wcHlfZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JZGlzYWJsZV9maXEoZG1hLT5kbWFfaXJxKTsKKwlzdHJ1Y3QgZmxvcHB5X2RtYSAqZmRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBmbG9wcHlfZG1hLCBkbWEpOworCWRpc2FibGVfZmlxKGZkbWEtPmZpcSk7CiAJcmVsZWFzZV9maXEoJmZoKTsKIH0KIAotc3RhdGljIGludCBmbG9wcHlfZ2V0X3Jlc2lkdWUoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIGludCBmbG9wcHlfZ2V0X3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAlnZXRfZmlxX3JlZ3MoJnJlZ3MpOwpAQCAtMjkyLDcgKzMxNyw3IEBACiAvKgogICogVGhpcyBpcyB2aXJ0dWFsIERNQSAtIHdlIGRvbid0IG5lZWQgYW55dGhpbmcgaGVyZS4KICAqLwotc3RhdGljIHZvaWQgc291bmRfZW5hYmxlX2Rpc2FibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIHNvdW5kX2VuYWJsZV9kaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKIH0KIApAQCAtMzAyLDggKzMyNywyNCBAQAogCS5kaXNhYmxlCT0gc291bmRfZW5hYmxlX2Rpc2FibGVfZG1hLAogfTsKIAotdm9pZCBfX2luaXQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKQorc3RhdGljIHN0cnVjdCBpb21kX2RtYSBpb21kX2RtYVs2XTsKKworc3RhdGljIHN0cnVjdCBmbG9wcHlfZG1hIGZsb3BweV9kbWEgPSB7CisJLmRtYQkJPSB7CisJCS5kX29wcwk9ICZmbG9wcHlfZG1hX29wcywKKwl9LAorCS5maXEJCT0gRklRX0ZMT1BQWURBVEEsCit9OworCitzdGF0aWMgZG1hX3Qgc291bmRfZG1hID0geworCS5kX29wcwkJPSAmc291bmRfZG1hX29wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJwY19kbWFfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKIAlpb21kX3dyaXRlYigwLCBJT01EX0lPMENSKTsKIAlpb21kX3dyaXRlYigwLCBJT01EX0lPMUNSKTsKIAlpb21kX3dyaXRlYigwLCBJT01EX0lPMkNSKTsKQEAgLTMxMSwzMSArMzUyLDM5IEBACiAKIAlpb21kX3dyaXRlYigweGEwLCBJT01EX0RNQVRDUik7CiAKLQlkbWFbRE1BXzBdLmRtYV9iYXNlCQk9IElPTURfSU8wQ1VSQTsKLQlkbWFbRE1BXzBdLmRtYV9pcnEJCT0gSVJRX0RNQTA7Ci0JZG1hW0RNQV8wXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfMV0uZG1hX2Jhc2UJCT0gSU9NRF9JTzFDVVJBOwotCWRtYVtETUFfMV0uZG1hX2lycQkJPSBJUlFfRE1BMTsKLQlkbWFbRE1BXzFdLmRfb3BzCQk9ICZpb21kX2RtYV9vcHM7Ci0JZG1hW0RNQV8yXS5kbWFfYmFzZQkJPSBJT01EX0lPMkNVUkE7Ci0JZG1hW0RNQV8yXS5kbWFfaXJxCQk9IElSUV9ETUEyOwotCWRtYVtETUFfMl0uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKLQlkbWFbRE1BXzNdLmRtYV9iYXNlCQk9IElPTURfSU8zQ1VSQTsKLQlkbWFbRE1BXzNdLmRtYV9pcnEJCT0gSVJRX0RNQTM7Ci0JZG1hW0RNQV8zXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfUzBdLmRtYV9iYXNlCQk9IElPTURfU0QwQ1VSQTsKLQlkbWFbRE1BX1MwXS5kbWFfaXJxCQk9IElSUV9ETUFTMDsKLQlkbWFbRE1BX1MwXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfUzFdLmRtYV9iYXNlCQk9IElPTURfU0QxQ1VSQTsKLQlkbWFbRE1BX1MxXS5kbWFfaXJxCQk9IElSUV9ETUFTMTsKLQlkbWFbRE1BX1MxXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfVklSVFVBTF9GTE9QUFldLmRtYV9pcnEJPSBGSVFfRkxPUFBZREFUQTsKLQlkbWFbRE1BX1ZJUlRVQUxfRkxPUFBZXS5kX29wcwk9ICZmbG9wcHlfZG1hX29wczsKLQlkbWFbRE1BX1ZJUlRVQUxfU09VTkRdLmRfb3BzCT0gJnNvdW5kX2RtYV9vcHM7Ci0KIAkvKgogCSAqIFNldHVwIERNQSBjaGFubmVscyAyLDMgdG8gYmUgZm9yIHBvZHVsZXMKIAkgKiBhbmQgY2hhbm5lbHMgMCwxIGZvciBpbnRlcm5hbCBkZXZpY2VzCiAJICovCiAJaW9tZF93cml0ZWIoRE1BX0VYVF9JTzN8RE1BX0VYVF9JTzIsIElPTURfRE1BRVhUKTsKKworCWlvbWRfZG1hW0RNQV8wXS5iYXNlCT0gSU9NRF9JTzBDVVJBOworCWlvbWRfZG1hW0RNQV8wXS5pcnEJPSBJUlFfRE1BMDsKKwlpb21kX2RtYVtETUFfMV0uYmFzZQk9IElPTURfSU8xQ1VSQTsKKwlpb21kX2RtYVtETUFfMV0uaXJxCT0gSVJRX0RNQTE7CisJaW9tZF9kbWFbRE1BXzJdLmJhc2UJPSBJT01EX0lPMkNVUkE7CisJaW9tZF9kbWFbRE1BXzJdLmlycQk9IElSUV9ETUEyOworCWlvbWRfZG1hW0RNQV8zXS5iYXNlCT0gSU9NRF9JTzNDVVJBOworCWlvbWRfZG1hW0RNQV8zXS5pcnEJPSBJUlFfRE1BMzsKKwlpb21kX2RtYVtETUFfUzBdLmJhc2UJPSBJT01EX1NEMENVUkE7CisJaW9tZF9kbWFbRE1BX1MwXS5pcnEJPSBJUlFfRE1BUzA7CisJaW9tZF9kbWFbRE1BX1MxXS5iYXNlCT0gSU9NRF9TRDFDVVJBOworCWlvbWRfZG1hW0RNQV9TMV0uaXJxCT0gSVJRX0RNQVMxOworCisJZm9yIChpID0gRE1BXzA7IGkgPD0gRE1BX1MxOyBpKyspIHsKKwkJaW9tZF9kbWFbaV0uZG1hLmRfb3BzID0gJmlvbWRfZG1hX29wczsKKworCQlyZXQgPSBpc2FfZG1hX2FkZChpLCAmaW9tZF9kbWFbaV0uZG1hKTsKKwkJaWYgKHJldCkKKwkJCXByaW50aygiSU9NRERNQSV1OiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLCBpLCByZXQpOworCX0KKworCXJldCA9IGlzYV9kbWFfYWRkKERNQV9WSVJUVUFMX0ZMT1BQWSwgJmZsb3BweV9kbWEuZG1hKTsKKwlpZiAocmV0KQorCQlwcmludGsoIklPTURGTE9QUFk6IHVuYWJsZSB0byByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJcmV0ID0gaXNhX2RtYV9hZGQoRE1BX1ZJUlRVQUxfU09VTkQsICZzb3VuZF9kbWEpOworCWlmIChyZXQpCisJCXByaW50aygiSU9NRFNPVU5EOiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLCByZXQpOworCXJldHVybiAwOwogfQorY29yZV9pbml0Y2FsbChycGNfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaCBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKaW5kZXggYmFkNzIwNS4uNjdiZmM2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCkBAIC0yMyw1ICsyMyw3IEBACiAKICNkZWZpbmUgRE1BX0ZMT1BQWQkJRE1BX1ZJUlRVQUxfRkxPUFBZCiAKKyNkZWZpbmUgSU9NRF9ETUFfQk9VTkRBUlkJKFBBR0VfU0laRSAtIDEpCisKICNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGJkNzI2OGJhLi40NWM3YjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJaW9tZF93cml0ZWIoMCwgSU9NRF9ST01DUjApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggNTUyYjRjNy4uNDQwYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UxZWM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby1ucnMuaApAQCAtMCwwICsxLDIzIEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBHUElPIGJhbmsgbnVtYmVyaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9HUElPTk8oYmFuayxvZmZzZXQpICgoYmFuaykgKyAob2Zmc2V0KSkKKworI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0EgICAoMzIqMCkKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktCICAgKDMyKjEpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQyAgICgzMioyKQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0QgICAoMzIqMykKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktFICAgKDMyKjQpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRiAgICgzMio1KQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0cgICAoMzIqNikKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktIICAgKDMyKjcpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDAwNDc2YTUuLjUxYTg4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yMywzICsyMyw2IEBACiAjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJKDI1NiArIENPTkZJR19TM0MyNFhYX0dQSU9fRVhUUkEpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLW5ycy5oPgorCisjZGVmaW5lIFMzQ19HUElPX0VORAkoUzNDMjQxMF9HUElPX0JBTktIICsgMzIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDQ5ZWZjZTguLjJhMjM4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIElSUV9FSU5UMjIgICAgIFMzQzI0MTBfSVJRKDUwKQogI2RlZmluZSBJUlFfRUlOVDIzICAgICBTM0MyNDEwX0lSUSg1MSkKIAotCisjZGVmaW5lIElSUV9FSU5UX0JJVCh4KQkoKHgpIC0gSVJRX0VJTlQ0ICsgNCkKICNkZWZpbmUgSVJRX0VJTlQoeCkgICAgKCgoeCkgPj0gNCkgPyAoSVJRX0VJTlQ0ICsgKHgpIC0gNCkgOiAoSVJRX0VJTlQwICsgKHgpKSkKIAogI2RlZmluZSBJUlFfTENEX0ZJRk8gICBTM0MyNDEwX0lSUSg1MikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCmluZGV4IDMyMTA3NzYuLjM1YTAzZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaApAQCAtMTQsMTYgKzE0LDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR1BJT19ICiAKLSNkZWZpbmUgUzNDMjQxMF9HUElPTk8oYmFuayxvZmZzZXQpICgoYmFuaykgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0EgICAoMzIqMCkKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktCICAgKDMyKjEpCi0jZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQyAgICgzMioyKQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0QgICAoMzIqMykKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktFICAgKDMyKjQpCi0jZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRiAgICgzMio1KQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0cgICAoMzIqNikKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktIICAgKDMyKjcpCisjaW5jbHVkZSA8bWFjaC9ncGlvLW5ycy5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDAwCiAjZGVmaW5lIFMzQzI0WFhfR1BJT19CQVNFKHgpICBTM0MyNDAwX0dQSU9fQkFTRSh4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3lzdGVtLXJlc2V0LmgKaW5kZXggNzYxM2QwYS4uYjg2ODdmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS1yZXNldC5oCkBAIC0yMiw3ICsyMiw3IEBACiBleHRlcm4gdm9pZCAoKnMzYzI0eHhfcmVzZXRfaG9vaykodm9pZCk7CiAKIHN0YXRpYyB2b2lkCi1hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJc3RydWN0IGNsayAqd2R0Y2xrOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOTFkMTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzI0MTAgLSB1c2IgcG9ydCBpbmZvcm1hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgiCi0KLSNkZWZpbmUgUzNDX0hDREZMR19VU0VECSgxKQotCi1zdHJ1Y3QgczNjMjQxMF9oY2RfcG9ydCB7Ci0JdW5zaWduZWQgY2hhcglmbGFnczsKLQl1bnNpZ25lZCBjaGFyCXBvd2VyOwotCXVuc2lnbmVkIGNoYXIJb2Nfc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIJb2NfY2hhbmdlZDsKLX07Ci0KLXN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvIHsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKLQlzdHJ1Y3QgczNjMjQxMF9oY2RfcG9ydAlwb3J0WzJdOwotCi0Jdm9pZAkJKCpwb3dlcl9jb250cm9sKShpbnQgcG9ydCwgaW50IHRvKTsKLQl2b2lkCQkoKmVuYWJsZV9vYykoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKiwgaW50IG9uKTsKLQl2b2lkCQkoKnJlcG9ydF9vYykoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKiwgaW50IHBvcnRzKTsKLX07Ci0KLXN0YXRpYyB2b2lkIGlubGluZSBzM2MyNDEwX3VzYl9yZXBvcnRfb2Moc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKmluZm8sIGludCBwb3J0cykKLXsKLQlpZiAoaW5mby0+cmVwb3J0X29jICE9IE5VTEwpIHsKLQkJKGluZm8tPnJlcG9ydF9vYykoaW5mbywgcG9ydHMpOwotCX0KLX0KLQotI2VuZGlmIC8qX19BU01fQVJDSF9VU0JDT05UUk9MX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDgyMWExNjYuLjdhN2M0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAjaWZkZWYgQ09ORklHX1BNX0gxOTQwCiAJbWVtY3B5KHBoeXNfdG9fdmlydChIMTk0MF9TVVNQRU5EX1JFU1VNRUFUKSwgaDE5NDBfcG1fcmV0dXJuLCAxMDI0KTsKICNlbmRpZgotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYwppbmRleCA5Njc4YTUzLi45ZjFiYTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQjUsIFMzQzI0MTBfR1BJT19PVVRQVVQpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocXQyNDEwX2RldmljZXMsIEFSUkFZX1NJWkUocXQyNDEwX2RldmljZXMpKTsKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzM2NfcG1faW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKFFUMjQxMCwgIlFUMjQxMCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCmluZGV4IGE2OTcwZjYuLjg3ZmM0ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCkBAIC0zNywyMSArMzcsMTQgQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCi1leHRlcm4gdm9pZCBwbV9kYmcoY29uc3QgY2hhciAqZm10LCAuLi4pOwotI2RlZmluZSBEQkcoZm10Li4uKSBwbV9kYmcoZm10KQotI2Vsc2UKLSNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcHJlcGFyZSh2b2lkKQogewogCS8qIGVuc3VyZSBhdCBsZWFzdCBHU1RBVFVTMyBoYXMgdGhlIHJlc3VtZSBhZGRyZXNzICovCiAKLQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzYzI0MTBfY3B1X3Jlc3VtZSksIFMzQzI0MTBfR1NUQVRVUzMpOworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjX2NwdV9yZXN1bWUpLCBTM0MyNDEwX0dTVEFUVVMzKTsKIAotCURCRygiR1NUQVRVUzMgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVMzKSk7Ci0JREJHKCJHU1RBVFVTNCAweCUwOHhcbiIsIF9fcmF3X3JlYWRsKFMzQzI0MTBfR1NUQVRVUzQpKTsKKwlTM0NfUE1EQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOworCVMzQ19QTURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7CiAKIAlpZiAobWFjaGluZV9pc19oMTk0MCgpKSB7CiAJCXZvaWQgKmJhc2UgPSBwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9DSEVDSyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2MDc4ZjA5Li44MzMxZThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9iYXN0LW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvYmFzdC1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCmluZGV4IDkxOTg1NmMuLjllMzQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKaW5kZXggZWNkZGJiYi4uNzJjMjY2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJICogY29ycmVjdCBhZGRyZXNzIHRvIHJlc3VtZSBmcm9tLiAqLwogCiAJX19yYXdfd3JpdGVsKDB4MkJFRCwgUzNDMjQxMl9JTkZPUk0wKTsKLQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzYzI0MTBfY3B1X3Jlc3VtZSksIFMzQzI0MTJfSU5GT1JNMSk7CisJX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhzM2NfY3B1X3Jlc3VtZSksIFMzQzI0MTJfSU5GT1JNMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzMCw3ICs2MzAsNyBAQAogCiAJLyogaW5pdGlhbGlzZSB0aGUgcG93ZXIgbWFuYWdlbWVudCBub3cgd2UndmUgc2V0dXAgZXZlcnl0aGluZy4gKi8KIAotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiAKIAlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmaml2ZV9uYW5kX2luZm87CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKaW5kZXggMjE3ZTllNC4uYzljZmU0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIGludCBzM2MyNDEyX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXMzYzI0MTBfcG1fZG9fc2F2ZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKKwlzM2NfcG1fZG9fc2F2ZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTgsNyArOTgsNyBAQAogCXRtcCB8PSAgUzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9JRExFOwogCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTJfUFdSQ0ZHKTsKIAotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKKwlzM2NfcG1fZG9fcmVzdG9yZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCmluZGV4IDViNWVlMGIuLjY5YjZjZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgX19pbml0ZGF0YSBzM2MyNDQwX2RtYV9tYXBwaW5nc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwppbmRleCAxMmQzNzhmLi5iYzhkOGQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAjaWZkZWYgQ09ORklHX1BNX0gxOTQwCiAJbWVtY3B5KHBoeXNfdG9fdmlydChIMTk0MF9TVVNQRU5EX1JFU1VNRUFUKSwgaDE5NDBfcG1fcmV0dXJuLCAxMDI0KTsKICNlbmRpZgotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiAKIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmcngzNzE1X2ZiX2luZm8pOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHJ4MzcxNV9kZXZpY2VzLCBBUlJBWV9TSVpFKHJ4MzcxNV9kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggMmE1OGE0ZC4uODQzMGU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAjZGVmaW5lIE1BUCh4KSB7IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYWU4YzBlMy4uODNjZTJhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTcwLDYgKzcwLDggQEAKICNkZWZpbmUgSVJRX0VJTlQxNwlTM0MyNDEwX0lSUSg0OSkKICNkZWZpbmUgSVJRX0VJTlQxOAlTM0MyNDEwX0lSUSg1MCkKIAorI2RlZmluZSBJUlFfRUlOVF9CSVQoeCkgKCh4KSAtIElSUV9FSU5UMDApCisKIC8qIFNVQiBJUlFTICovCiAjZGVmaW5lIElSUV9TM0NVQVJUX1JYMAkJUzNDMjQxMF9JUlEoNTEpCS8qIDY3ICovCiAjZGVmaW5lIElSUV9TM0NVQVJUX1RYMAkJUzNDMjQxMF9JUlEoNTIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCBjZmYyN2Q4Li5iYWYxYzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTUyLDYgKzUyLDkgQEAKICNkZWZpbmUgUzNDNjRYWF9QQV9WSUMwCQkoMHg3MTIwMDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9WSUMxCQkoMHg3MTMwMDAwMCkKIAorI2RlZmluZSBTM0M2NFhYX1BBX01PREVNCSgweDc0MTA4MDAwKQorI2RlZmluZSBTM0M2NFhYX1ZBX01PREVNCVMzQ19BRERSKDB4MDA2MDAwMDApCisKIC8qIHBsYWNlIFZJQ3MgY2xvc2UgdG9nZXRoZXIgKi8KICNkZWZpbmUgUzNDX1ZBX1ZJQzAJCShTM0NfVkFfSVJRICsgMHgwMCkKICNkZWZpbmUgUzNDX1ZBX1ZJQzEJCShTM0NfVkFfSVJRICsgMHgxMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDY1MmJiYzQwLi4wOTBjZmQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwppbmRleCBmOTlkOTAxLi44MWZmZmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKQEAgLTcxLDE5ICs3MSw5IEBACiAJICA8aHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL0NvbXBhcS9pbmRleC5odG1sI2lQQVFfSDM2MDA+CiAJICA8aHR0cDovL3d3dy5jb21wYXEuY29tL3Byb2R1Y3RzL2hhbmRoZWxkcy9wb2NrZXRwYy8+CiAKLWNvbmZpZyBTQTExMDBfSDM4MDAKLQlib29sICJDb21wYXEgaVBBUSBIMzgwMCIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIHRoZSBDb21wYXEgaVBBUSBIMzgwMAotCSAgc2VyaWVzIGhhbmRoZWxkIGNvbXB1dGVyLiAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtYWNoaW5lIGFuZCB0aGUKLQkgIExpbnV4IHBvcnQgdG8gdGhpcyBtYWNoaW5lIGNhbiBiZSBmb3VuZCBhdDoKLQotCSAgPGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvaW5kZXguaHRtbCNpUEFRX0gzODAwPgotCSAgPGh0dHA6Ly93d3cuY29tcGFxLmNvbS9wcm9kdWN0cy9oYW5kaGVsZHMvcG9ja2V0cGMvPgotCiBjb25maWcgU0ExMTAwX0gzWFhYCiAJYm9vbAotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMCB8fCBTQTExMDBfSDM4MDAKKwlkZXBlbmRzIG9uIFNBMTEwMF9IMzEwMCB8fCBTQTExMDBfSDM2MDAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFNBMTEwMF9CQURHRTQKQEAgLTE1NywxNSArMTQ3LDYgQEAKIAkgIFRoaXMgaXNuJ3QgZm9yIGF1ZGlvIHN1cHBvcnQsIGJ1dCBmb3IgYXR0YWNoZWQgc2Vuc29ycyBhbmQKIAkgIG90aGVyIGRldmljZXMsIGVnIGZvciBCYWRnZVBBRCA0IHNlbnNvciBzdXBwb3J0LgogCi1jb25maWcgSDM2MDBfU0xFRVZFCi0JdHJpc3RhdGUgIkNvbXBhcSBpUEFRIEhhbmRoZWxkIHNsZWV2ZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMAotCWhlbHAKLQkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgc3VwcG9ydCBmb3IgZXh0ZW5zaW9uIHBhY2tzIChzbGVldmVzKQotCSAgZm9yIHRoZSBDb21wYXEgaVBBUSBIM1hYWCBzZXJpZXMgb2YgaGFuZGhlbGQgY29tcHV0ZXJzLiAgVGhpcyBvcHRpb24KLQkgIGlzIHJlcXVpcmVkIGZvciB0aGUgQ0YsIFBDTUNJQSwgQmx1ZXRvb3RoIGFuZCBHU00vR1BSUyBleHRlbnNpb24KLQkgIHBhY2tzLgotCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDIwNTJlYjguLmJiZjJlYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTE0NSw3ICsxNDYsOCBAQAogCS5yZW1vdmUJPSBjb2xsaWVfdWFydF9yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjb2xsaWVfdWFydF9pbml0KHZvaWQpIHsKK3N0YXRpYyBpbnQgX19pbml0IGNvbGxpZV91YXJ0X2luaXQodm9pZCkKK3sKIAlyZXR1cm4gbG9jb21vX2RyaXZlcl9yZWdpc3RlcigmY29sbGllX3VhcnRfZHJpdmVyKTsKIH0KIGRldmljZV9pbml0Y2FsbChjb2xsaWVfdWFydF9pbml0KTsKQEAgLTE5NSwxOCArMTk3LDM0IEBACiAJfQogfTsKIAorc3RhdGljIGludCBjb2xsaWVfZmxhc2hfaW5pdCh2b2lkKQoreworCWludCByYyA9IGdwaW9fcmVxdWVzdChDT0xMSUVfR1BJT19WUEVOLCAiZmxhc2ggVnBwIGVuYWJsZSIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ09MTElFX0dQSU9fVlBFTiwgMSk7CisJaWYgKHJjKQorCQlncGlvX2ZyZWUoQ09MTElFX0dQSU9fVlBFTik7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lkIGNvbGxpZV9zZXRfdnBwKGludCB2cHApCiB7Ci0Jd3JpdGVfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUENSLCByZWFkX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BDUikgfCBDT0xMSUVfU0NQX1ZQRU4pOwotCWlmICh2cHApCi0JCXdyaXRlX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IpIHwgQ09MTElFX1NDUF9WUEVOKTsKLQllbHNlCi0JCXdyaXRlX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IpICYgfkNPTExJRV9TQ1BfVlBFTik7CisJZ3Bpb19zZXRfdmFsdWUoQ09MTElFX0dQSU9fVlBFTiwgdnBwKTsKK30KKworc3RhdGljIHZvaWQgY29sbGllX2ZsYXNoX2V4aXQodm9pZCkKK3sKKwlncGlvX2ZyZWUoQ09MTElFX0dQSU9fVlBFTik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBjb2xsaWVfZmxhc2hfZGF0YSA9IHsKIAkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkuaW5pdAkJPSBjb2xsaWVfZmxhc2hfaW5pdCwKIAkuc2V0X3ZwcAk9IGNvbGxpZV9zZXRfdnBwLAorCS5leGl0CQk9IGNvbGxpZV9mbGFzaF9leGl0LAogCS5wYXJ0cwkJPSBjb2xsaWVfcGFydGl0aW9ucywKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNvbGxpZV9wYXJ0aXRpb25zKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCmluZGV4IGIzOTMwN2YuLjQ0NGYyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTU4LDYgKzU5LDkgQEAKIAkJcmV0dXJuOwogCX0KIAorCWdwaW9fcmVxdWVzdChDT0xMSUVfR1BJT19DSEFSR0VfT04sICJjaGFyZ2Ugb24iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ09MTElFX0dQSU9fQ0hBUkdFX09OLCAxKTsKKwogCXVjYjF4MDBfaW9fc2V0X2Rpcih1Y2IsIDAsIENPTExJRV9UQzM1MTQzX0dQSU9fTUJBVF9PTiB8IENPTExJRV9UQzM1MTQzX0dQSU9fVE1QX09OIHwKIAkJCSAgICAgICAgICAgQ09MTElFX1RDMzUxNDNfR1BJT19CQkFUX09OKTsKIAlyZXR1cm47CkBAIC03MywxNyArNzcsMTEgQEAKIAogc3RhdGljIHZvaWQgY29sbGllX2NoYXJnZShpbnQgb24pCiB7Ci0JZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29sbGllc2Nvb3BfZGV2aWNlOwotCiAJLyogWmF1cnVzIHNlZW1zIHRvIGNvbnRhaW4gTFRDMTczMTsgaXQgc2hvdWxkIGtub3cgd2hlbiB0bwogCSAqIHN0b3AgY2hhcmdpbmcgaXRzZWxmLCBzbyBzZXR0aW5nIGNoYXJnZSBvbiBzaG91bGQgYmUKIAkgKiByZWxhdGl2ZWx5IGhhcm1sZXNzIChhcyBsb25nIGFzIGl0IGlzIG5vdCBkb25lIHRvbyBvZnRlbikuCiAJICovCi0JaWYgKG9uKSB7Ci0JCXNldF9zY29vcF9ncGlvKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBDT0xMSUVfU0NQX0NIQVJHRV9PTik7Ci0JfSBlbHNlIHsKLQkJcmVzZXRfc2Nvb3BfZ3BpbygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgQ09MTElFX1NDUF9DSEFSR0VfT04pOwotCX0KKwlncGlvX3NldF92YWx1ZShDT0xMSUVfR1BJT19DSEFSR0VfT04sIG9uKTsKIH0KIAogc3RhdGljIHZvaWQgY29sbGllX2Rpc2NoYXJnZShpbnQgb24pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYwppbmRleCBhZjI1YTc4Li4wZWIyZjE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKQEAgLTQyLDE5ICs0MiwxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3NlcmlhbF9zYTExMDAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaDM2MDAuaD4KLQotI2lmIGRlZmluZWQgKENPTkZJR19TQTExMDBfSDM2MDApIHx8IGRlZmluZWQgKENPTkZJR19TQTExMDBfSDMxMDApCiAjaW5jbHVkZSA8bWFjaC9oMzYwMF9ncGlvLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TQTExMDBfSDM4MDAKLSNpbmNsdWRlIDxtYWNoL2gzNjAwX2FzaWMuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi1zdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaXBhcV9tb2RlbF9vcHM7Ci1FWFBPUlRfU1lNQk9MKGlwYXFfbW9kZWxfb3BzKTsKK3ZvaWQgKCphc3NpZ25faDM2MDBfZWdwaW8pKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgsIGludCBsZXZlbCk7CitFWFBPUlRfU1lNQk9MKGFzc2lnbl9oMzYwMF9lZ3Bpbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoM3h4eF9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjMsNDEgKzU2LDkgQEAKIAkJLm9mZnNldAkJPSAwLAogCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KIAl9LCB7Ci0jaWZkZWYgQ09ORklHX01URF8yUEFSVFNfSVBBUQotCQkubmFtZQkJPSAiSDNYWFggcm9vdCBqZmZzMiIsCisJCS5uYW1lCQk9ICJIM1hYWCByb290ZnMiLAogCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAogCQkub2Zmc2V0CQk9IDB4MDAwNDAwMDAsCi0jZWxzZQotCQkubmFtZQkJPSAiSDNYWFgga2VybmVsIiwKLQkJLnNpemUJCT0gMHgwMDA4MDAwMCwKLQkJLm9mZnNldAkJPSAweDAwMDQwMDAwLAotCX0sIHsKLQkJLm5hbWUJCT0gIkgzWFhYIHBhcmFtcyIsCi0JCS5zaXplCQk9IDB4MDAwNDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDBDMDAwMCwKLQl9LCB7Ci0jaWZkZWYgQ09ORklHX0pGRlMyX0ZTCi0JCS5uYW1lCQk9ICJIM1hYWCByb290IGpmZnMyIiwKLQkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKLQkJLm9mZnNldAkJPSAweDAwMTAwMDAwLAotI2Vsc2UKLQkJLm5hbWUJCT0gIkgzWFhYIGluaXRyZCIsCi0JCS5zaXplCQk9IDB4MDAxMDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDEwMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJIM1hYWCByb290IGNyYW1mcyIsCi0JCS5zaXplCQk9IDB4MDAzMDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDIwMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJIM1hYWCB1c3IgY3JhbWZzIiwKLQkJLnNpemUJCT0gMHgwMDgwMDAwMCwKLQkJLm9mZnNldAkJPSAweDAwNTAwMDAwLAotCX0sIHsKLQkJLm5hbWUJCT0gIkgzWFhYIHVzciBsb2NhbCIsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5vZmZzZXQJCT0gMHgwMGQwMDAwMCwKLSNlbmRpZgotI2VuZGlmCiAJfQogfTsKIApAQCAtMTMxLDExICs5Miw3IEBACiAKIHN0YXRpYyB2b2lkIGgzNjAwX2lyZGFfc2V0X3NwZWVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHNwZWVkKQogewotCWlmIChzcGVlZCA8IDQwMDAwMDApIHsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fSVJfRlNFTCk7Ci0JfSBlbHNlIHsKLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fSVJfRlNFTCk7Ci0JfQorCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX0lSX0ZTRUwsICEoc3BlZWQgPCA0MDAwMDAwKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJkYV9wbGF0Zm9ybV9kYXRhIGgzNjAwX2lyZGFfZGF0YSA9IHsKQEAgLTI2NiwxMiArMjIzLDYgQEAKIAlzYTExMDBmYl9sY2RfcG93ZXIgPSBoM3h4eF9sY2RfcG93ZXI7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZG9fYmxhbmsoaW50IHNldHApCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmJsYW5rX2NhbGxiYWNrKQotCQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjaygxLXNldHApOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBIMzEwMCAqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZkZWYgQ09ORklHX1NBMTEwMF9IMzEwMApAQCAtMjg5LDcgKzI0MCw2IEBACiAJY2FzZSBJUEFRX0VHUElPX0xDRF9QT1dFUjoKIAkJZWdwaW8gfD0gRUdQSU9fSDM2MDBfTENEX09OOwogCQlncGlvICB8PSBHUElPX0gzMTAwX0xDRF8zVl9PTjsKLQkJZG9fYmxhbmsoc2V0cCk7CiAJCWJyZWFrOwogCWNhc2UgSVBBUV9FR1BJT19MQ0RfRU5BQkxFOgogCQlicmVhazsKQEAgLTM0MywyNSArMjkzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGgzMTAwX3JlYWRfZWdwaW8odm9pZCkKLXsKLQlyZXR1cm4gaDMxMDBfZWdwaW87Ci19Ci0KLXN0YXRpYyBpbnQgaDMxMDBfcG1fY2FsbGJhY2soaW50IHJlcSkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KQotCQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KHJlcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaDMxMDBfbW9kZWxfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLmdlbmVyaWNfbmFtZQk9ICIzMTAwIiwKLQkuY29udHJvbAk9IGgzMTAwX2NvbnRyb2xfZWdwaW8sCi0JLnJlYWQJCT0gaDMxMDBfcmVhZF9lZ3BpbywKLQkucG1fY2FsbGJhY2sJPSBoMzEwMF9wbV9jYWxsYmFjawotfTsKLQogI2RlZmluZSBIMzEwMF9ESVJFQ1RfRUdQSU8gKEdQSU9fSDMxMDBfQlRfT04JICBcCiAJCQkgIHwgR1BJT19IMzEwMF9HUElPMwkgIFwKIAkJCSAgfCBHUElPX0gzMTAwX1FNVVRFCSAgXApAQCAtMzg3LDcgKzMxOCw3IEBACiAJR0FGUiAmPSB+SDMxMDBfRElSRUNUX0VHUElPOwogCiAJSDMxMDBfRUdQSU8gPSBoMzEwMF9lZ3BpbzsKLQlpcGFxX21vZGVsX29wcyA9IGgzMTAwX21vZGVsX29wczsKKwlhc3NpZ25faDM2MDBfZWdwaW8gPSBoMzEwMF9jb250cm9sX2VncGlvOwogfQogCiBNQUNISU5FX1NUQVJUKEgzMTAwLCAiQ29tcGFxIGlQQVEgSDMxMDAiKQpAQCAtNDIwLDcgKzM1MSw2IEBACiAJCQkgRUdQSU9fSDM2MDBfTENEX1BDSSB8CiAJCQkgRUdQSU9fSDM2MDBfTENEXzVWX09OIHwKIAkJCSBFR1BJT19IMzYwMF9MVkREX09OOwotCQlkb19ibGFuayhzZXRwKTsKIAkJYnJlYWs7CiAJY2FzZSBJUEFRX0VHUElPX0xDRF9FTkFCTEU6CiAJCWJyZWFrOwpAQCAtNDcxLDI1ICs0MDEsNiBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaDM2MDBfcmVhZF9lZ3Bpbyh2b2lkKQotewotCXJldHVybiBoMzYwMF9lZ3BpbzsKLX0KLQotc3RhdGljIGludCBoMzYwMF9wbV9jYWxsYmFjayhpbnQgcmVxKQotewotCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgpCi0JCXJldHVybiBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcGFxX21vZGVsX29wcyBoMzYwMF9tb2RlbF9vcHMgX19pbml0ZGF0YSA9IHsKLQkuZ2VuZXJpY19uYW1lCT0gIjM2MDAiLAotCS5jb250cm9sCT0gaDM2MDBfY29udHJvbF9lZ3BpbywKLQkucmVhZAkJPSBoMzYwMF9yZWFkX2VncGlvLAotCS5wbV9jYWxsYmFjawk9IGgzNjAwX3BtX2NhbGxiYWNrCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgaDM2MDBfbWFwX2lvKHZvaWQpCiB7CiAJaDN4eHhfbWFwX2lvKCk7CkBAIC01MDQsNyArNDE1LDcgQEAKIAkgICAgICAgR1BJT19MREQxMSB8IEdQSU9fTEREMTAgfCBHUElPX0xERDkgIHwgR1BJT19MREQ4OwogCiAJSDM2MDBfRUdQSU8gPSBoMzYwMF9lZ3BpbzsJICAgLyogTWFpbnRhaW5zIGFjcm9zcyBzbGVlcD8gKi8KLQlpcGFxX21vZGVsX29wcyA9IGgzNjAwX21vZGVsX29wczsKKwlhc3NpZ25faDM2MDBfZWdwaW8gPSBoMzYwMF9jb250cm9sX2VncGlvOwogfQogCiBNQUNISU5FX1NUQVJUKEgzNjAwLCAiQ29tcGFxIGlQQVEgSDM2MDAiKQpAQCAtNTE5LDM4OCArNDMwLDMgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TQTExMDBfSDM2MDAgKi8KIAotI2lmZGVmIENPTkZJR19TQTExMDBfSDM4MDAKLQotI2RlZmluZSBTRVRfQVNJQzEoeCkgXAotICAgZG8ge2lmIChzZXRwKSB7IEgzODAwX0FTSUMxX0dQSU9fT1VUIHw9ICh4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfih4KTsgfX0gd2hpbGUoMCkKLQotI2RlZmluZSBTRVRfQVNJQzIoeCkgXAotICAgZG8ge2lmIChzZXRwKSB7IEgzODAwX0FTSUMyX0dQSU9QSU9EIHw9ICh4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzJfR1BJT1BJT0QgJj0gfih4KTsgfX0gd2hpbGUoMCkKLQotI2RlZmluZSBDTEVBUl9BU0lDMSh4KSBcCi0gICBkbyB7aWYgKHNldHApIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfih4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gKHgpOyB9fSB3aGlsZSgwKQotCi0jZGVmaW5lIENMRUFSX0FTSUMyKHgpIFwKLSAgIGRvIHtpZiAoc2V0cCkgeyBIMzgwMF9BU0lDMl9HUElPUElPRCAmPSB+KHgpOyB9IGVsc2UgeyBIMzgwMF9BU0lDMl9HUElPUElPRCB8PSAoeCk7IH19IHdoaWxlKDApCi0KLQotLyoKLSAgT24gc2NyZWVuIGVuYWJsZSwgd2UgZ2V0Ci0KLSAgICAgaDM4MDBfdmlkZW9fcG93ZXJfb24oMSkKLSAgICAgTENEIGNvbnRyb2xsZXIgc3RhcnRzCi0gICAgIGgzODAwX3ZpZGVvX2xjZF9lbmFibGUoMSkKLQotICBPbiBzY3JlZW4gZGlzYWJsZSwgd2UgZ2V0Ci0KLSAgICAgaDM4MDBfdmlkZW9fbGNkX2VuYWJsZSgwKQotICAgICBMQ0QgY29udHJvbGxlciBzdG9wcwotICAgICBoMzgwMF92aWRlb19wb3dlcl9vbigwKQotKi8KLQotCi1zdGF0aWMgdm9pZCBoMzgwMF92aWRlb19wb3dlcl9vbihpbnQgc2V0cCkKLXsKLQlpZiAoc2V0cCkgewotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9MQ0RfT047Ci0JCW1zbGVlcCgzMCk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX1ZHTF9PTjsKLQkJbXNsZWVwKDUpOwotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9WR0hfT047Ci0JCW1zbGVlcCg1MCk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX0xDRF81Vl9PTjsKLQkJbXNsZWVwKDUpOwotCX0gZWxzZSB7Ci0JCW1zbGVlcCg1KTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX0xDRF81Vl9PTjsKLQkJbXNsZWVwKDUwKTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX1ZHTF9PTjsKLQkJbXNsZWVwKDUpOwotCQlIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+R1BJTzFfVkdIX09OOwotCQltc2xlZXAoMTAwKTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX0xDRF9PTjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX3ZpZGVvX2xjZF9lbmFibGUoaW50IHNldHApCi17Ci0JaWYgKHNldHApIHsKLQkJbXNsZWVwKDE3KTsJLy8gV2FpdCBvbmUgZnJvbSBiZWZvcmUgdHVybmluZyBvbgotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9MQ0RfUENJOwotCX0gZWxzZSB7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH5HUElPMV9MQ0RfUENJOwotCQltc2xlZXAoMzApOwkvLyBXYWl0IGJlZm9yZSB0dXJuaW5nIG9mZgotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBoMzgwMF9jb250cm9sX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgsIGludCBzZXRwKQotewotCXN3aXRjaCAoeCkgewotCWNhc2UgSVBBUV9FR1BJT19MQ0RfUE9XRVI6Ci0JCWgzODAwX3ZpZGVvX3Bvd2VyX29uKHNldHApOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fTENEX0VOQUJMRToKLQkJaDM4MDBfdmlkZW9fbGNkX2VuYWJsZShzZXRwKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX0NPREVDX05SRVNFVDoKLQljYXNlIElQQVFfRUdQSU9fQVVESU9fT046Ci0JY2FzZSBJUEFRX0VHUElPX1FNVVRFOgotCQlwcmludGsoIiVzOiBlcnJvciAtIHNob3VsZCBub3QgYmUgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19PUFRfTlZSQU1fT046Ci0JCVNFVF9BU0lDMihHUElPMl9PUFRfT05fTlZSQU0pOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fT1BUX09OOgotCQlTRVRfQVNJQzIoR1BJTzJfT1BUX09OKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX0NBUkRfUkVTRVQ6Ci0JCVNFVF9BU0lDMihHUElPMl9PUFRfUENNX1JFU0VUKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX09QVF9SRVNFVDoKLQkJU0VUX0FTSUMyKEdQSU8yX09QVF9SRVNFVCk7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19JUl9PTjoKLQkJQ0xFQVJfQVNJQzEoR1BJTzFfSVJfT05fTik7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19JUl9GU0VMOgotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fUlMyMzJfT046Ci0JCVNFVF9BU0lDMShHUElPMV9SUzIzMl9PTik7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19WUFBfT046Ci0JCUgzODAwX0FTSUMyX0ZsYXNoV1BfVlBQX09OID0gc2V0cDsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBoMzgwMF9yZWFkX2VncGlvKHZvaWQpCi17Ci0JcmV0dXJuIEgzODAwX0FTSUMxX0dQSU9fT1VUIHwgKEgzODAwX0FTSUMyX0dQSU9QSU9EIDw8IDE2KTsKLX0KLQotLyogV2UgbmVlZCB0byBmaXggQVNJQzIgR1BJTyBvdmVyIHN1c3BlbmQvcmVzdW1lLiAgQXQgdGhlIG1vbWVudCwKLSAgIGl0IGRvZXNuJ3QgYXBwZWFyIHRoYXQgQVNJQzEgR1BJTyBoYXMgdGhlIHNhbWUgcHJvYmxlbSAqLwotCi1zdGF0aWMgaW50IGgzODAwX3BtX2NhbGxiYWNrKGludCByZXEpCi17Ci0Jc3RhdGljIHUxNiBhc2ljMV9kYXRhOwotCXN0YXRpYyB1MTYgYXNpYzJfZGF0YTsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCXByaW50aygiJXMgJWRcbiIsIF9fZnVuY19fLCByZXEpOwotCi0Jc3dpdGNoIChyZXEpIHsKLQljYXNlIFBNX1JFU1VNRToKLQkJTVNDMiA9IChNU0MyICYgMHgwMDAwZmZmZikgfCAweEU0NTEwMDAwOyAgLyogU2V0IE1TQzIgY29ycmVjdGx5ICovCi0KLQkJSDM4MDBfQVNJQzJfR1BJT1BJT0QgPSBhc2ljMl9kYXRhOwotCQlIMzgwMF9BU0lDMl9HUElPRElSID0gR1BJTzJfUEVOX0lSUQotCQkJfCBHUElPMl9TRF9ERVRFQ1QKLQkJCXwgR1BJTzJfRUFSX0lOX04KLQkJCXwgR1BJTzJfVVNCX0RFVEVDVF9OCi0JCQl8IEdQSU8yX1NEX0NPTl9TTFQ7Ci0KLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgPSBhc2ljMV9kYXRhOwotCi0JCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgpCi0JCQlyZXN1bHQgPSBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBNX1NVU1BFTkQ6Ci0JCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXggJiYKLQkJICAgICAoKHJlc3VsdCA9IGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eChyZXEpKSAhPSAwKSkKLQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJYXNpYzFfZGF0YSA9IEgzODAwX0FTSUMxX0dQSU9fT1VUOwotCQlhc2ljMl9kYXRhID0gSDM4MDBfQVNJQzJfR1BJT1BJT0Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IHVucmVjb2duaXplZCBQTSBjYWxsYmFja1xuIiwgX19mdW5jX18pOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcGFxX21vZGVsX29wcyBoMzgwMF9tb2RlbF9vcHMgX19pbml0ZGF0YSA9IHsKLQkuZ2VuZXJpY19uYW1lCT0gIjM4MDAiLAotCS5jb250cm9sCT0gaDM4MDBfY29udHJvbF9lZ3BpbywKLQkucmVhZAkJPSBoMzgwMF9yZWFkX2VncGlvLAotCS5wbV9jYWxsYmFjawk9IGgzODAwX3BtX2NhbGxiYWNrCi19OwotCi0jZGVmaW5lIE1BWF9BU0lDX0lTUl9MT09QUyAgICAyMAotCi0vKiBUaGUgb3JkZXIgb2YgdGhlc2UgaXMgaW1wb3J0YW50IC0gc2VlICNpbmNsdWRlIDxtYWNoL2lycXMuaD4gKi8KLXN0YXRpYyB1MzIga3Bpb19pcnFfbWFza1tdID0gewotCUtQSU9fS0VZX0FMTCwKLQlLUElPX1NQSV9JTlQsCi0JS1BJT19PV01fSU5ULAotCUtQSU9fQURDX0lOVCwKLQlLUElPX1VBUlRfMF9JTlQsCi0JS1BJT19VQVJUXzFfSU5ULAotCUtQSU9fVElNRVJfMF9JTlQsCi0JS1BJT19USU1FUl8xX0lOVCwKLQlLUElPX1RJTUVSXzJfSU5UCi19OwotCi1zdGF0aWMgdTMyIGdwaW9faXJxX21hc2tbXSA9IHsKLQlHUElPMl9QRU5fSVJRLAotCUdQSU8yX1NEX0RFVEVDVCwKLQlHUElPMl9FQVJfSU5fTiwKLQlHUElPMl9VU0JfREVURUNUX04sCi0JR1BJTzJfU0RfQ09OX1NMVCwKLX07Ci0KLXN0YXRpYyB2b2lkIGgzODAwX0lSUV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaW50IGk7Ci0KLQlpZiAoMCkgcHJpbnRrKCIlczogaW50ZXJydXB0IHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQVNJQ19JU1JfTE9PUFMgJiYgKEdQTFIgJiBHUElPX0gzODAwX0FTSUMpOyBpKyspIHsKLQkJdTMyIGlycTsKLQkJaW50IGo7Ci0KLQkJLyogS1BJTyAqLwotCQlpcnEgPSBIMzgwMF9BU0lDMl9LUElJTlRGTEFHOwotCQlpZiAoMCkgcHJpbnRrKCIlcyBLUElPIDB4JTA4WFxuIiwgX19mdW5jX18sIGlycSk7Ci0JCWZvciAoaiA9IDA7IGogPCBIMzgwMF9LUElPX0lSUV9DT1VOVDsgaisrKQotCQkJaWYgKGlycSAmIGtwaW9faXJxX21hc2tbal0pCi0JCQkJaGFuZGxlX2VkZ2VfaXJxKEgzODAwX0tQSU9fSVJRX0NPVU5UICsgaiwgaXJxX2Rlc2MgKyBIMzgwMF9LUElPX0lSUV9DT1VOVCArIGopOwotCi0JCS8qIEdQSU8yICovCi0JCWlycSA9IEgzODAwX0FTSUMyX0dQSUlOVEZMQUc7Ci0JCWlmICgwKSBwcmludGsoIiVzIEdQSU8gMHglMDhYXG4iLCBfX2Z1bmNfXywgaXJxKTsKLQkJZm9yIChqID0gMDsgaiA8IEgzODAwX0dQSU9fSVJRX0NPVU5UOyBqKyspCi0JCQlpZiAoaXJxICYgZ3Bpb19pcnFfbWFza1tqXSkKLQkJCQloYW5kbGVfZWRnZV9pcnEoSDM4MDBfR1BJT19JUlFfQ09VTlQgKyBqLCBpcnFfZGVzYyArIEgzODAwX0dQSU9fSVJRX0NPVU5UICsgaik7Ci0JfQotCi0JaWYgKGkgPj0gTUFYX0FTSUNfSVNSX0xPT1BTKQotCQlwcmludGsoIiVzOiBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBvdmVycnVuXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBGb3IgbGV2ZWwtYmFzZWQgaW50ZXJydXB0cyAqLwotCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwotCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGgzODAwX2lycSA9IHsKLQkubmFtZQkJPSAiaDM4MDBfYXNpYyIsCi0JLmhhbmRsZXIJPSBoMzgwMF9JUlFfZGVtdXgsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotfTsKLQotdTMyIGtwaW9faW50X3NoYWRvdyA9IDA7Ci0KLQotLyogbWFza19hY2sgPC0gSVJRIGlzIGZpcnN0IHNlcnZpY2VkLgotICAgICAgIG1hc2sgPC0gSVJRIGlzIGRpc2FibGVkLgotICAgICB1bm1hc2sgPC0gSVJRIGlzIGVuYWJsZWQKLQotICAgICBUaGUgSU5UQ0xSIHJlZ2lzdGVycyBhcmUgcG9vcmx5IGRvY3VtZW50ZWQuICBJIGJlbGlldmUgdGhhdCB3cml0aW5nCi0gICAgIGEgIjEiIHRvIHRoZSByZWdpc3RlciBjbGVhcnMgdGhlIHNwZWNpZmljIGludGVycnVwdCwgYnV0IHRoZSBkb2N1bWVudGF0aW9uCi0gICAgIGluZGljYXRlcyB3cml0aW5nIGEgIjAiIGNsZWFycyB0aGUgaW50ZXJydXB0LiAgSW4gYW55IGNhc2UsIHRoZXkgc2hvdWxkbid0Ci0gICAgIGJlIHJlYWQgKHRoYXQncyB0aGUgSU5URkxBRyByZWdpc3RlcikKLSAqLwotCi1zdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2Fja19rcGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiBtYXNrID0ga3Bpb19pcnFfbWFza1tpcnEgLSBIMzgwMF9LUElPX0lSUV9TVEFSVF07Ci0Ja3Bpb19pbnRfc2hhZG93ICY9IH5tYXNrOwotCUgzODAwX0FTSUMyX0tQSUlOVFNUQVQgPSBrcGlvX2ludF9zaGFkb3c7Ci0JSDM4MDBfQVNJQzJfS1BJSU5UQ0xSICA9IG1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX21hc2tfa3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGtwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfS1BJT19JUlFfU1RBUlRdOwotCWtwaW9faW50X3NoYWRvdyAmPSB+bWFzazsKLQlIMzgwMF9BU0lDMl9LUElJTlRTVEFUID0ga3Bpb19pbnRfc2hhZG93OwotfQotCi1zdGF0aWMgdm9pZCBoMzgwMF91bm1hc2tfa3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGtwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfS1BJT19JUlFfU1RBUlRdOwotCWtwaW9faW50X3NoYWRvdyB8PSBtYXNrOwotCUgzODAwX0FTSUMyX0tQSUlOVFNUQVQgPSBrcGlvX2ludF9zaGFkb3c7Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX21hc2tfYWNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2sgPSBncGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0dQSU9fSVJRX1NUQVJUXTsKLQlIMzgwMF9BU0lDMl9HUElJTlRTVEFUICY9IH5tYXNrOwotCUgzODAwX0FTSUMyX0dQSUlOVENMUgk9IG1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX21hc2tfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGdwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfR1BJT19JUlFfU1RBUlRdOwotCUgzODAwX0FTSUMyX0dQSUlOVFNUQVQgJj0gfm1hc2s7Ci0JfQotCi1zdGF0aWMgdm9pZCBoMzgwMF91bm1hc2tfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGdwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfR1BJT19JUlFfU1RBUlRdOwotCUgzODAwX0FTSUMyX0dQSUlOVFNUQVQgfD0gbWFzazsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGgzODAwX2luaXRfaXJxKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIHN0YW5kYXJkIElSUXMgKi8KLQlzYTExMDBfaW5pdF9pcnEoKTsKLQotCS8qIERpc2FibGUgYWxsIElSUXMgYW5kIHNldCB1cCBjbG9jayAqLwotCUgzODAwX0FTSUMyX0tQSUlOVFNUQVQJICAgPSAgMDsgICAgIC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQlIMzgwMF9BU0lDMl9HUElJTlRTVEFUCSAgID0gIDA7Ci0KLQlIMzgwMF9BU0lDMl9LUElJTlRDTFIJICAgPSAgMDsgICAgIC8qIENsZWFyIGFsbCBLUElPIGludGVycnVwdHMgKi8KLQlIMzgwMF9BU0lDMl9HUElJTlRDTFIJICAgPSAgMDsgICAgIC8qIENsZWFyIGFsbCBHUElPIGludGVycnVwdHMgKi8KLQotLy8JSDM4MDBfQVNJQzJfS1BJSU5UQ0xSCSAgID0gIDB4ZmZmZjsJICAvKiBDbGVhciBhbGwgS1BJTyBpbnRlcnJ1cHRzICovCi0vLwlIMzgwMF9BU0lDMl9HUElJTlRDTFIJICAgPSAgMHhmZmZmOwkgIC8qIENsZWFyIGFsbCBHUElPIGludGVycnVwdHMgKi8KLQotCUgzODAwX0FTSUMyX0NMT0NLX0VuYWJsZSAgICAgICB8PSBBU0lDMl9DTE9DS19FWDA7ICAgLyogMzIga0haIGNyeXN0YWwgb24gKi8KLQlIMzgwMF9BU0lDMl9JTlRSX0Nsb2NrUHJlc2NhbGUgfD0gQVNJQzJfSU5UQ1BTX1NFVDsKLQlIMzgwMF9BU0lDMl9JTlRSX0Nsb2NrUHJlc2NhbGUJPSBBU0lDMl9JTlRDUFNfQ1BTKDB4MGUpIHwgQVNJQzJfSU5UQ1BTX1NFVDsKLQlIMzgwMF9BU0lDMl9JTlRSX1RpbWVyU2V0CT0gMTsKLQotI2lmIDAKLQlmb3IgKGkgPSAwOyBpIDwgSDM4MDBfS1BJT19JUlFfQ09VTlQ7IGkrKykgewotCQlpbnQgaXJxID0gaSArIEgzODAwX0tQSU9fSVJRX1NUQVJUOwotCQlpcnFfZGVzY1tpcnFdLnZhbGlkICAgID0gMTsKLQkJaXJxX2Rlc2NbaXJxXS5wcm9iZV9vayA9IDE7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZoMzgwMF9rcGlvX2lycWNoaXApOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBIMzgwMF9HUElPX0lSUV9DT1VOVDsgaSsrKSB7Ci0JCWludCBpcnEgPSBpICsgSDM4MDBfR1BJT19JUlFfU1RBUlQ7Ci0JCWlycV9kZXNjW2lycV0udmFsaWQgICAgPSAxOwotCQlpcnFfZGVzY1tpcnFdLnByb2JlX29rID0gMTsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmgzODAwX2dwaW9faXJxY2hpcCk7Ci0JfQotI2VuZGlmCi0Jc2V0X2lycV90eXBlKElSUV9HUElPX0gzODAwX0FTSUMsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJT19IMzgwMF9BU0lDLCBoMzgwMF9JUlFfZGVtdXgpOwotfQotCi0KLSNkZWZpbmUgQVNJQzFfT1VUUFVUUwkgMHg3ZmZmICAgLyogRmlyc3QgMTUgYml0cyBhcmUgdXNlZCAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaDM4MDBfbWFwX2lvKHZvaWQpCi17Ci0JaDN4eHhfbWFwX2lvKCk7Ci0KLQkvKiBBZGQgd2FrZXVwIG9uIEFDIHBsdWcvdW5wbHVnICovCi0JUFdFUiAgfD0gUFdFUl9HUElPMTI7Ci0KLQkvKiBJbml0aWFsaXplIGgzODAwLXNwZWNpZmljIHZhbHVlcyBoZXJlICovCi0JR1BDUiA9IDB4MGZmZmZmZmY7CSAvKiBBbGwgb3V0cHV0cyBhcmUgc2V0IGxvdyBieSBkZWZhdWx0ICovCi0JR0FGUiA9CUdQSU9fSDM4MDBfQ0xLX09VVCB8Ci0JCUdQSU9fTEREMTUgfCBHUElPX0xERDE0IHwgR1BJT19MREQxMyB8IEdQSU9fTEREMTIgfAotCQlHUElPX0xERDExIHwgR1BJT19MREQxMCB8IEdQSU9fTEREOSAgfCBHUElPX0xERDg7Ci0JR1BEUiA9CUdQSU9fSDM4MDBfQ0xLX09VVCB8Ci0JCUdQSU9fSDM2MDBfQ09NX1JUUyAgfCBHUElPX0gzNjAwX0wzX0NMT0NLIHwKLQkJR1BJT19IMzYwMF9MM19NT0RFICB8IEdQSU9fSDM2MDBfTDNfREFUQSAgfAotCQlHUElPX0xERDE1IHwgR1BJT19MREQxNCB8IEdQSU9fTEREMTMgfCBHUElPX0xERDEyIHwKLQkJR1BJT19MREQxMSB8IEdQSU9fTEREMTAgfCBHUElPX0xERDkgIHwgR1BJT19MREQ4OwotCVRVQ1IgPQlUVUNSXzNfNjg2NE1IejsgICAvKiBTZWVtcyB0byBiZSB1c2VkIG9ubHkgZm9yIHRoZSBCbHVldG9vdGggVUFSVCAqLwotCi0JLyogRml4IHRoZSBtZW1vcnkgYnVzICovCi0JTVNDMiA9IChNU0MyICYgMHgwMDAwZmZmZikgfCAweEU0NTEwMDAwOwotCi0JLyogU2V0IHVwIEFTSUMgIzEgKi8KLQlIMzgwMF9BU0lDMV9HUElPX0RJUgkJPSBBU0lDMV9PVVRQVVRTOwkgICAgLyogQWxsIG91dHB1dHMgKi8KLQlIMzgwMF9BU0lDMV9HUElPX01BU0sJCT0gQVNJQzFfT1VUUFVUUzsJICAgIC8qIE5vIGludGVycnVwdHMgKi8KLQlIMzgwMF9BU0lDMV9HUElPX1NMRUVQX01BU0sJPSBBU0lDMV9PVVRQVVRTOwotCUgzODAwX0FTSUMxX0dQSU9fU0xFRVBfRElSCT0gQVNJQzFfT1VUUFVUUzsKLQlIMzgwMF9BU0lDMV9HUElPX1NMRUVQX09VVAk9IEdQSU8xX0VBUl9PTl9OOwotCUgzODAwX0FTSUMxX0dQSU9fQkFUVF9GQVVMVF9ESVIgPSBBU0lDMV9PVVRQVVRTOwotCUgzODAwX0FTSUMxX0dQSU9fQkFUVF9GQVVMVF9PVVQgPSBHUElPMV9FQVJfT05fTjsKLQotCUgzODAwX0FTSUMxX0dQSU9fT1VUID0gR1BJTzFfSVJfT05fTgotCQkJCSAgICAgIHwgR1BJTzFfUlMyMzJfT04KLQkJCQkgICAgICB8IEdQSU8xX0VBUl9PTl9OOwotCi0JLyogU2V0IHVwIEFTSUMgIzIgKi8KLQlIMzgwMF9BU0lDMl9HUElPUElPRAk9IEdQSU8yX0lOX1kxX04gfCBHUElPMl9JTl9YMV9OOwotCUgzODAwX0FTSUMyX0dQT0JGU1RBVAk9IEdQSU8yX0lOX1kxX04gfCBHUElPMl9JTl9YMV9OOwotCi0JSDM4MDBfQVNJQzJfR1BJT0RJUgk9IEdQSU8yX1BFTl9JUlEKLQkJCQkgICAgICB8IEdQSU8yX1NEX0RFVEVDVAotCQkJCSAgICAgIHwgR1BJTzJfRUFSX0lOX04KLQkJCQkgICAgICB8IEdQSU8yX1VTQl9ERVRFQ1RfTgotCQkJCSAgICAgIHwgR1BJTzJfU0RfQ09OX1NMVDsKLQotCS8qIFRPRE8gOiBTZXQgc2xlZXAgc3RhdGVzICYgYmF0dGVyeSBmYXVsdCBzdGF0ZXMgKi8KLQotCS8qIENsZWFyIFZQUCBFbmFibGUgKi8KLQlIMzgwMF9BU0lDMl9GbGFzaFdQX1ZQUF9PTiA9IDA7Ci0JaXBhcV9tb2RlbF9vcHMgPSBoMzgwMF9tb2RlbF9vcHM7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoSDM4MDAsICJDb21wYXEgaVBBUSBIMzgwMCIpCi0JLnBoeXNfaW8JPSAweDgwMDAwMDAwLAotCS5pb19wZ19vZmZzdAk9ICgoMHhmODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDB4YzAwMDAxMDAsCi0JLm1hcF9pbwkJPSBoMzgwMF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gaDM4MDBfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IGgzeHh4X21hY2hfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLSNlbmRpZiAvKiBDT05GSUdfU0ExMTAwX0gzODAwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvY29sbGllLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvY29sbGllLmgKaW5kZXggNjllOTYyNC4uOWVmYjU2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2NvbGxpZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9jb2xsaWUuaApAQCAtMTQsMjEgKzE0LDIxIEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfQ09MTElFX0gKIAogCi0jZGVmaW5lIENPTExJRV9TQ1BfQ0hBUkdFX09OCVNDT09QX0dQQ1JfUEExMQorI2RlZmluZSBDT0xMSUVfU0NPT1BfR1BJT19CQVNFCShHUElPX01BWCArIDEpCisjZGVmaW5lIENPTExJRV9HUElPX0NIQVJHRV9PTgkoQ09MTElFX1NDT09QX0dQSU9fQkFTRSArIDApCiAjZGVmaW5lIENPTExJRV9TQ1BfRElBR19CT09UMQlTQ09PUF9HUENSX1BBMTIKICNkZWZpbmUgQ09MTElFX1NDUF9ESUFHX0JPT1QyCVNDT09QX0dQQ1JfUEExMwogI2RlZmluZSBDT0xMSUVfU0NQX01VVEVfTAlTQ09PUF9HUENSX1BBMTQKICNkZWZpbmUgQ09MTElFX1NDUF9NVVRFX1IJU0NPT1BfR1BDUl9QQTE1CiAjZGVmaW5lIENPTExJRV9TQ1BfNVZPTgkJU0NPT1BfR1BDUl9QQTE2CiAjZGVmaW5lIENPTExJRV9TQ1BfQU1QX09OCVNDT09QX0dQQ1JfUEExNwotI2RlZmluZSBDT0xMSUVfU0NQX1ZQRU4JCVNDT09QX0dQQ1JfUEExOAorI2RlZmluZSBDT0xMSUVfR1BJT19WUEVOCShDT0xMSUVfU0NPT1BfR1BJT19CQVNFICsgNykKICNkZWZpbmUgQ09MTElFX1NDUF9MQl9WT0xfQ0hHCVNDT09QX0dQQ1JfUEExOQogCi0jZGVmaW5lIENPTExJRV9TQ09PUF9JT19ESVIJKCBDT0xMSUVfU0NQX0NIQVJHRV9PTiB8IENPTExJRV9TQ1BfTVVURV9MIHwgQ09MTElFX1NDUF9NVVRFX1IgfCBcCi0JCQkJQ09MTElFX1NDUF81Vk9OIHwgQ09MTElFX1NDUF9BTVBfT04gfCBDT0xMSUVfU0NQX1ZQRU4gfCBcCisjZGVmaW5lIENPTExJRV9TQ09PUF9JT19ESVIJKCBDT0xMSUVfU0NQX01VVEVfTCB8IENPTExJRV9TQ1BfTVVURV9SIHwgXAorCQkJCUNPTExJRV9TQ1BfNVZPTiB8IENPTExJRV9TQ1BfQU1QX09OIHwgXAogCQkJCUNPTExJRV9TQ1BfTEJfVk9MX0NIRyApCi0jZGVmaW5lIENPTExJRV9TQ09PUF9JT19PVVQJKCBDT0xMSUVfU0NQX01VVEVfTCB8IENPTExJRV9TQ1BfTVVURV9SIHwgQ09MTElFX1NDUF9WUEVOIHwgXAotCQkJCUNPTExJRV9TQ1BfQ0hBUkdFX09OICkKKyNkZWZpbmUgQ09MTElFX1NDT09QX0lPX09VVAkoIENPTExJRV9TQ1BfTVVURV9MIHwgQ09MTElFX1NDUF9NVVRFX1IgKQogCiAvKiBHUElPcyBmb3Igd2hpY2ggdGhlIGdlbmVyaWMgZGVmaW5pdGlvbiBkb2Vzbid0IHNheSBtdWNoICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKaW5kZXggOWNjNDdmZC4uMjgyN2ZhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgUE1fUkVTVU1FCSgoX19mb3JjZSBwbV9yZXF1ZXN0X3QpIDIpCS8qIGVudGVyIEQwICovCiAKIC8qIGdlbmVyYWxpemVkIHN1cHBvcnQgZm9yIEgzeHh4IHNlcmllcyBDb21wYXEgUG9ja2V0IFBDJ3MgKi8KLSNkZWZpbmUgbWFjaGluZV9pc19oM3h4eCgpIChtYWNoaW5lX2lzX2gzMTAwKCkgfHwgbWFjaGluZV9pc19oMzYwMCgpIHx8IG1hY2hpbmVfaXNfaDM4MDAoKSkKKyNkZWZpbmUgbWFjaGluZV9pc19oM3h4eCgpIChtYWNoaW5lX2lzX2gzMTAwKCkgfHwgbWFjaGluZV9pc19oMzYwMCgpKQogCiAvKiBQaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBjb3JyZXNwb25kaW5nIHRvIGNoaXAgc2VsZWN0cyAqLwogI2RlZmluZSBIMzYwMF9FR1BJT19QSFlTCShTQTExMDBfQ1M1X1BIWVMgKyAweDAxMDAwMDAwKQpAQCAtOTMsNzYgKzkzLDcgQEAKIAlJUEFRX0VHUElPX0xDRF9FTkFCTEUsCSAgLyogRW5hYmxlL2Rpc2FibGUgTENEIGNvbnRyb2xsZXIgKi8KIH07CiAKLXN0cnVjdCBpcGFxX21vZGVsX29wcyB7Ci0JY29uc3QgY2hhciAgICAgKmdlbmVyaWNfbmFtZTsKLQl2b2lkCSAgICAgICgqY29udHJvbCkoZW51bSBpcGFxX2VncGlvX3R5cGUsIGludCk7Ci0JdW5zaWduZWQgbG9uZyAoKnJlYWQpKHZvaWQpOwotCXZvaWQJICAgICAgKCpibGFua19jYWxsYmFjaykoaW50IGJsYW5rKTsKLQlpbnQJICAgICAgKCpwbV9jYWxsYmFjaykoaW50IHJlcSk7CSAgICAvKiBQcmltYXJ5IG1vZGVsIGNhbGxiYWNrICovCi0JaW50CSAgICAgICgqcG1fY2FsbGJhY2tfYXV4KShpbnQgcmVxKTsgIC8qIFNlY29uZGFyeSBjYWxsYmFjayAodXNlZCBieSBIQUwgbW9kdWxlcykgKi8KLX07Ci0KLWV4dGVybiBzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaXBhcV9tb2RlbF9vcHM7Ci0KLXN0YXRpYyBfX2lubGluZV9fIGNvbnN0IGNoYXIgKiBoMzYwMF9nZW5lcmljX25hbWUodm9pZCkKLXsKLQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMuZ2VuZXJpY19uYW1lOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGFzc2lnbl9oMzYwMF9lZ3BpbyhlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgbGV2ZWwpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmNvbnRyb2wpCi0JCWlwYXFfbW9kZWxfb3BzLmNvbnRyb2woeCxsZXZlbCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xyX2gzNjAwX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmNvbnRyb2wpCi0JCWlwYXFfbW9kZWxfb3BzLmNvbnRyb2woeCwwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfaDM2MDBfZWdwaW8oZW51bSBpcGFxX2VncGlvX3R5cGUgeCkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMuY29udHJvbCkKLQkJaXBhcV9tb2RlbF9vcHMuY29udHJvbCh4LDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHJlYWRfaDM2MDBfZWdwaW8odm9pZCkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMucmVhZCkKLQkJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLnJlYWQoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50ICBoMzYwMF9yZWdpc3Rlcl9ibGFua19jYWxsYmFjayh2b2lkICgqZikoaW50KSkKLXsKLQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjayA9IGY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaDM2MDBfdW5yZWdpc3Rlcl9ibGFua19jYWxsYmFjayh2b2lkICgqZikoaW50KSkKLXsKLQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjayA9IE5VTEw7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lX18gaW50ICBoMzYwMF9yZWdpc3Rlcl9wbV9jYWxsYmFjayhpbnQgKCpmKShpbnQpKQotewotCWlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eCA9IGY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaDM2MDBfdW5yZWdpc3Rlcl9wbV9jYWxsYmFjayhpbnQgKCpmKShpbnQpKQotewotCWlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBoMzYwMF9wb3dlcl9tYW5hZ2VtZW50KGludCByZXEpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrKQotCQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2socmVxKTsKLQlyZXR1cm4gMDsKLX0KK2V4dGVybiB2b2lkICgqYXNzaWduX2gzNjAwX2VncGlvKShlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgbGV2ZWwpOwogCiAjZW5kaWYgLyogQVNTRU1CTFkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwX2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMF9ncGlvLmgKaW5kZXggNjJiMGI3OC4uYTM2Y2E3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwX2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaDM2MDBfZ3Bpby5oCkBAIC00OCwyMiArNDgsMTEgQEAKICNkZWZpbmUgR1BJT19IMzYwMF9PUFRfTE9DSwkJR1BJT19HUElPICgyMikKICNkZWZpbmUgR1BJT19IMzYwMF9PUFRfREVUCQlHUElPX0dQSU8gKDI3KQogCi0vKiBIMzgwMCBzcGVjaWZpYyBwaW5zICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQUNfSU4gICAgICAgICAgICAgICAgR1BJT19HUElPICgxMikKLSNkZWZpbmUgR1BJT19IMzgwMF9DT01fRFNSICAgICAgICAgICAgICBHUElPX0dQSU8gKDEzKQotI2RlZmluZSBHUElPX0gzODAwX01NQ19JTlQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMTgpCi0jZGVmaW5lIEdQSU9fSDM4MDBfTk9QVF9JTkQgICAgICAgICAgICAgR1BJT19HUElPICgyMCkgICAvKiBBbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBhcyBHUElPX0gzNjAwX09QVF9ERVQgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9PUFRfQkFUX0ZBVUxUICAgICAgICBHUElPX0dQSU8gKDIyKQotI2RlZmluZSBHUElPX0gzODAwX0NMS19PVVQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMjcpCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIElSUV9HUElPX0gzNjAwX0FDVElPTl9CVVRUT04gICAgSVJRX0dQSU8xOAogI2RlZmluZSBJUlFfR1BJT19IMzYwMF9PUFRfREVUCQlJUlFfR1BJTzI3CiAKLSNkZWZpbmUgSVJRX0dQSU9fSDM4MDBfTU1DX0lOVCAgICAgICAgICBJUlFfR1BJTzE4Ci0jZGVmaW5lIElSUV9HUElPX0gzODAwX05PUFRfSU5EICAgICAgICAgSVJRX0dQSU8yMCAvKiBhbG1vc3Qgc2FtZSBhcyBPUFRfREVUICovCi0KIC8qIEgzMTAwIC8gMzYwMCBFR1BJTyBwaW5zICovCiAjZGVmaW5lIEVHUElPX0gzNjAwX1ZQUF9PTgkJKDEgPDwgMCkKICNkZWZpbmUgRUdQSU9fSDM2MDBfQ0FSRF9SRVNFVAkJKDEgPDwgMSkgICAvKiByZXNldCB0aGUgYXR0YWNoZWQgcGNtY2lhL2NvbXBhY3RmbGFzaCBjYXJkLiAgYWN0aXZlIGhpZ2guICovCkBAIC04NCw0NTcgKzczLDUgQEAKICNkZWZpbmUgRUdQSU9fSDM2MDBfTENEXzVWX09OCQkoMSA8PCAxNCkgIC8qIGVuYWJsZSA1ViB0byBMQ0QuIGFjdGl2ZSBoaWdoLiAqLwogI2RlZmluZSBFR1BJT19IMzYwMF9MVkREX09OCQkoMSA8PCAxNSkgIC8qIGVuYWJsZSA5ViBhbmQgLTYuNVYgdG8gTENELiAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqIEgzODAwLCBBU0lDICMyICoqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9CYXNlICAgICAgICAgICAgKEgzNjAwX0VHUElPX1ZJUlQpCi0jZGVmaW5lIEgzODAwX0FTSUMyX09GRlNFVChzLHgseSkgICAgXAotICAgICgqKCh2b2xhdGlsZSBzICopIChfSDM4MDBfQVNJQzJfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfICMjIHkpKSkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTk9GRlNFVChzLHgsbix5KSBcCi0gICAgKCooKHZvbGF0aWxlIHMgKikgKF9IMzgwMF9BU0lDMl9CYXNlICsgX0gzODAwX0FTSUMyXyAjIyB4ICMjIF8gIyMgbiAjIyBfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfICMjIHkpKSkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19CYXNlICAgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fRGlyZWN0aW9uICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVywgMTYgYml0cyAxOmlucHV0LCAwOm91dHB1dCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRUeXBlICAgICAgICAweDAwMDQgICAgLyogUi9XLCAxMiBiaXRzIDE6ZWRnZSwgMDpsZXZlbCAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgICAweDAwMDggICAgLyogUi9XLCAxMiBiaXRzIDE6cmlzaW5nLCAwOmZhbGxpbmcgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0TGV2ZWxUeXBlICAgMHgwMDBDICAgIC8qIFIvVywgMTIgYml0cyAxOmhpZ2gsIDA6bG93ICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRDbGVhciAgICAgICAweDAwMTAgICAgLyogVywgICAxMiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdEZsYWcgICAgICAgIDB4MDAxMCAgICAvKiBSLCAgIDEyIGJpdHMgLSByZWFkcyBpbnQgc3RhdHVzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0RhdGEgICAgICAgICAgICAgICAgIDB4MDAxNCAgICAvKiBSL1csIDE2IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fQmF0dEZhdWx0T3V0ICAgICAgICAgMHgwMDE4ICAgIC8qIFIvVywgMTYgYml0IC0gc2V0cyBsZXZlbCBvbiBiYXR0IGZhdWx0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdEVuYWJsZSAgICAgIDB4MDAxYyAgICAvKiBSL1csIDEyIGJpdHMgMTplbmFibGUgaW50ZXJydXB0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0FsdGVybmF0ZSAgICAgICAgICAgIDB4MDAzYyAgICAvKiBSL1csIDEyKzEgYml0cyAtIHNldCBhbHRlcm5hdGUgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19EaXJlY3Rpb24gICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIERpcmVjdGlvbiApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0VHlwZSAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEludGVycnVwdEVkZ2VUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRMZXZlbFR5cGUgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEludGVycnVwdExldmVsVHlwZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0Q2xlYXIgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRDbGVhciApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RmxhZyAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRGbGFnICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19EYXRhICAgICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIERhdGEgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0JhdHRGYXVsdE91dCAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgQmF0dEZhdWx0T3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFbmFibGUgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEludGVycnVwdEVuYWJsZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fQWx0ZXJuYXRlICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBBbHRlcm5hdGUgKQotCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfSU5fWTFfTiAgICAgICAgICAoMSA8PCAwKSAgIC8qIE91dHB1dDogVG91Y2hzY3JlZW4gWTEgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9JTl9YMCAgICAgICAgICAgICgxIDw8IDEpICAgLyogT3V0cHV0OiBUb3VjaHNjcmVlbiBYMCAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX0lOX1kwICAgICAgICAgICAgKDEgPDwgMikgICAvKiBPdXRwdXQ6IFRvdWNoc2NyZWVuIFkwICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfSU5fWDFfTiAgICAgICAgICAoMSA8PCAzKSAgIC8qIE91dHB1dDogVG91Y2hzY3JlZW4gWDEgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9CVF9SU1QgICAgICAgICAgICgxIDw8IDQpICAgLyogT3V0cHV0OiBCbHVldG9vdGggcmVzZXQgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9QRU5fSVJRICAgICAgICAgICgxIDw8IDUpICAgLyogSW5wdXQgOiBQZW4gZG93biAgICAgICAgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9TRF9ERVRFQ1QgICAgICAgICgxIDw8IDYpICAgLyogSW5wdXQgOiBTRCBkZXRlY3QgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9FQVJfSU5fTiAgICAgICAgICgxIDw8IDcpICAgLyogSW5wdXQgOiBBdWRpbyBqYWNrIHBsdWcgaW5zZXJ0ZWQgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9PUFRfUENNX1JFU0VUICAgICgxIDw8IDgpICAgLyogT3V0cHV0OiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX09QVF9SRVNFVCAgICAgICAgKDEgPDwgOSkgICAvKiBPdXRwdXQ6ICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfVVNCX0RFVEVDVF9OICAgICAoMSA8PCAxMCkgIC8qIElucHV0IDogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9TRF9DT05fU0xUICAgICAgICgxIDw8IDExKSAgLyogSW5wdXQgOiAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0Jhc2UgICAgICAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19EaXJlY3Rpb24gICAgICAgICAgICAweDAwMDAgICAgLyogUi9XLCAxMiBiaXRzIDE6aW5wdXQsIDA6b3V0cHV0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdFR5cGUgICAgICAgIDB4MDAwNCAgICAvKiBSL1csIDEyIGJpdHMgMTplZGdlLCAwOmxldmVsICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVkZ2VUeXBlICAgIDB4MDAwOCAgICAvKiBSL1csIDEyIGJpdHMgMTpyaXNpbmcsIDA6ZmFsbGluZyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRMZXZlbFR5cGUgICAweDAwMEMgICAgLyogUi9XLCAxMiBiaXRzIDE6aGlnaCwgMDpsb3cgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdENsZWFyICAgICAgIDB4MDAxMCAgICAvKiBXLCAgIDIwIGJpdHMgLSA4IHNwZWNpYWwgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0RmxhZyAgICAgICAgMHgwMDEwICAgIC8qIFIsICAgMjAgYml0cyAtIDggc3BlY2lhbCAtIHJlYWRzIGludCBzdGF0dXMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fRGF0YSAgICAgICAgICAgICAgICAgMHgwMDE0ICAgIC8qIFIvVywgMTYgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19CYXR0RmF1bHRPdXQgICAgICAgICAweDAwMTggICAgLyogUi9XLCAxNiBiaXQgLSBzZXRzIGxldmVsIG9uIGJhdHQgZmF1bHQgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0RW5hYmxlICAgICAgMHgwMDFjICAgIC8qIFIvVywgMjAgYml0cyAtIDggc3BlY2lhbCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19BbHRlcm5hdGUgICAgICAgICAgICAweDAwM2MgICAgLyogUi9XLCA2IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0RpcmVjdGlvbiAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgRGlyZWN0aW9uICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRUeXBlICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEludGVycnVwdFR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVkZ2VUeXBlICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgSW50ZXJydXB0RWRnZVR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdExldmVsVHlwZSBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgSW50ZXJydXB0TGV2ZWxUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRDbGVhciAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIEtQSU8sIEludGVycnVwdENsZWFyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRGbGFnICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIEtQSU8sIEludGVycnVwdEZsYWcgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0RhdGEgICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgRGF0YSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fQmF0dEZhdWx0T3V0ICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBLUElPLCBCYXR0RmF1bHRPdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVuYWJsZSAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUzMiwgS1BJTywgSW50ZXJydXB0RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19BbHRlcm5hdGUgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEFsdGVybmF0ZSApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19TUElfSU5UICAgICAgICAoIDEgPDwgMTYgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX09XTV9JTlQgICAgICAgICggMSA8PCAxNyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fQURDX0lOVCAgICAgICAgKCAxIDw8IDE4ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19VQVJUXzBfSU5UICAgICAoIDEgPDwgMTkgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX1VBUlRfMV9JTlQgICAgICggMSA8PCAyMCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fVElNRVJfMF9JTlQgICAgKCAxIDw8IDIxICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19USU1FUl8xX0lOVCAgICAoIDEgPDwgMjIgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX1RJTUVSXzJfSU5UICAgICggMSA8PCAyMyApCi0KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9SRUNPUkRfQlROX04gICAgICgxIDw8IDApICAgLyogUmVjb3JkIGJ1dHRvbiAqLwotI2RlZmluZSBLUElPX0gzODAwX0FTSUMyX0tFWV81VzFfTiAgICAgICAgKDEgPDwgMSkgICAvKiBLZXlwYWQgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVcyX04gICAgICAgICgxIDw8IDIpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVczX04gICAgICAgICgxIDw8IDMpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVc0X04gICAgICAgICgxIDw8IDQpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVc1X04gICAgICAgICgxIDw8IDUpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfTEVGVF9OICAgICAgICgxIDw8IDYpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfUklHSFRfTiAgICAgICgxIDw8IDcpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVAxX04gICAgICAgICgxIDw8IDgpICAgLyogT2xkICJDYWxlbmRhciIgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVAyX04gICAgICAgICgxIDw8IDkpICAgLyogT2xkICJTY2hlZHVsZSIgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVAzX04gICAgICAgICgxIDw8IDEwKSAgLyogT2xkICJRIiAgICAgICAgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVA0X04gICAgICAgICgxIDw8IDExKSAgLyogT2xkICJVbmRvIiAgICAgKi8KLQotLyogQWx0ZXJuYXRlIEtQSU8gZnVuY3Rpb25zIChzZXQgYnkgZGVmYXVsdCkgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXMV9OICAgICAgICAoMSA8PCAxKSAgIC8qIEFjdGlvbiBrZXkgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXMl9OICAgICAgICAoMSA8PCAyKSAgIC8qIEoxIG9mIGtleXBhZCBpbnB1dCAqLwotI2RlZmluZSBLUElPX0FMVF9IMzgwMF9BU0lDMl9LRVlfNVczX04gICAgICAgICgxIDw8IDMpICAgLyogSjIgb2Yga2V5cGFkIGlucHV0ICovCi0jZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzRfTiAgICAgICAgKDEgPDwgNCkgICAvKiBKMyBvZiBrZXlwYWQgaW5wdXQgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXNV9OICAgICAgICAoMSA8PCA1KSAgIC8qIEo0IG9mIGtleXBhZCBpbnB1dCAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9TUElfQmFzZSAgICAgICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0NvbnRyb2wgICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0RhdGEgICAgICAgICAgICAgICAgICAweDAwMDQgICAgLyogUi9XIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0NoaXBTZWxlY3REaXNhYmxlZCAgICAweDAwMDggICAgLyogVyAgIDggYml0cyAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1NQSV9Db250cm9sICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIFNQSSwgQ29udHJvbCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1NQSV9EYXRhICAgICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIFNQSSwgRGF0YSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1NQSV9DaGlwU2VsZWN0RGlzYWJsZWQgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIFNQSSwgQ2hpcFNlbGVjdERpc2FibGVkICkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNXzBfQmFzZSAgICAgICAgICAgICAgICAweDA2MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX1BXTV8xX0Jhc2UgICAgICAgICAgICAgICAgMHgwNzAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9QV01fVGltZUJhc2UgICAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1cgNiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9QV01fUGVyaW9kVGltZSAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgMTIgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNX0R1dHlUaW1lICAgICAgICAgICAgICAweDAwMDggICAgLyogUi9XIDEyIGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMF9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFBXTSwgMCwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMF9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIFBXTSwgMCwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV8wX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgUFdNLCAwLCBEdXR5VGltZSApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzFfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBQV00sIDEsIFRpbWVCYXNlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzFfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBQV00sIDEsIFBlcmlvZFRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMV9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIFBXTSwgMSwgRHV0eVRpbWUgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV9USU1FQkFTRV9NQVNLICAgICAgICAgICAgIDB4ZiAgICAvKiBMb3cgNCBiaXRzIHNldHMgdGltZSBiYXNlLCBtYXggPSA4ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV9USU1FQkFTRV9FTkFCTEUgICAgKCAxIDw8IDQgKSAgICAvKiBFbmFibGUgY2xvY2sgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNX1RJTUVCQVNFX0NMRUFSICAgICAoIDEgPDwgNSApICAgIC8qIENsZWFyIHRoZSBQV00gKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEXzBfQmFzZSAgICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF8xX0Jhc2UgICAgICAgICAgICAgICAgMHgwODgwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfMl9CYXNlICAgICAgICAgICAgICAgIDB4MDkwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEX1RpbWVCYXNlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XICA3IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF9QZXJpb2RUaW1lICAgICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyAxMiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfRHV0eVRpbWUgICAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSL1cgMTIgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEX0F1dG9TdG9wQ291bnQgICAgICAgICAweDAwMGMgICAgLyogUi9XIDE2IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIExFRCwgMCwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMCwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8wX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAwLCBEdXR5VGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8wX0F1dG9TdG9wQ2xvY2sgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAwLCBBdXRvU3RvcENsb2NrICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIExFRCwgMSwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMSwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8xX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAxLCBEdXR5VGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8xX0F1dG9TdG9wQ2xvY2sgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAxLCBBdXRvU3RvcENsb2NrICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIExFRCwgMiwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMiwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8yX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAyLCBEdXR5VGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8yX0F1dG9TdG9wQ2xvY2sgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAyLCBBdXRvU3RvcENsb2NrICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfVElNRUJBU0VfTUFTSyAgICAgICAgICAgIDB4MGYgICAgLyogTG93IDQgYml0cyBzZXRzIHRpbWUgYmFzZSwgbWF4ID0gMTMgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX0JMSU5LICAgICAoIDEgPDwgNCApICAgIC8qIEVuYWJsZSBibGlua2luZyAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfVElNRUJBU0VfQVVUT1NUT1AgICggMSA8PCA1ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX0FMV0FZUyAgICAoIDEgPDwgNiApICAgIC8qIEVuYWJsZSBibGluayBhbHdheXMgKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF8wX0Jhc2UgICAgICAgICAgICAgICAweDBBMDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfMV9CYXNlICAgICAgICAgICAgICAgMHgwQzAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX1JlY2VpdmUgICAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSICAgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9UcmFuc21pdCAgICAgICAgICAgICAweDAwMDAgICAgLyogICBXICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfSW50RW5hYmxlICAgICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0ludFZlcmlmeSAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9GSUZPQ29udHJvbCAgICAgICAgICAweDAwMGMgICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfTGluZUNvbnRyb2wgICAgICAgICAgMHgwMDEwICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX01vZGVtU3RhdHVzICAgICAgICAgIDB4MDAxNCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9MaW5lU3RhdHVzICAgICAgICAgICAweDAwMTggICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfU2NyYXRjaFBhZCAgICAgICAgICAgMHgwMDFjICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0Rpdmlzb3JMYXRjaEwgICAgICAgIDB4MDAyMCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9EaXZpc29yTGF0Y2hIICAgICAgICAweDAwMjQgICAgLyogUi9XICA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfUmVjZWl2ZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIFJlY2VpdmUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfVHJhbnNtaXQgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIFRyYW5zbWl0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX0ludEVuYWJsZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBJbnRFbmFibGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfSW50VmVyaWZ5ICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIEludFZlcmlmeSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9GSUZPQ29udHJvbCAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgRklGT0NvbnRyb2wgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfTGluZUNvbnRyb2wgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIExpbmVDb250cm9sICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX01vZGVtU3RhdHVzICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBNb2RlbVN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9MaW5lU3RhdHVzICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgTGluZVN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9TY3JhdGNoUGFkICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgU2NyYXRjaFBhZCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9EaXZpc29yTGF0Y2hMICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgRGl2aXNvckxhdGNoTCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9EaXZpc29yTGF0Y2hIICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgRGl2aXNvckxhdGNoSCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX1JlY2VpdmUgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBSZWNlaXZlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX1RyYW5zbWl0ICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBUcmFuc21pdCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9JbnRFbmFibGUgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgSW50RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0ludFZlcmlmeSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBJbnRWZXJpZnkgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfRklGT0NvbnRyb2wgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIEZJRk9Db250cm9sICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0xpbmVDb250cm9sICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBMaW5lQ29udHJvbCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9Nb2RlbVN0YXR1cyAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgTW9kZW1TdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfTGluZVN0YXR1cyAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIExpbmVTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfU2NyYXRjaFBhZCAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIFNjcmF0Y2hQYWQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfRGl2aXNvckxhdGNoTCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIERpdmlzb3JMYXRjaEwgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfRGl2aXNvckxhdGNoSCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIERpdmlzb3JMYXRjaEggKQotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9USU1FUl9CYXNlICAgICAgICAgICAgICAgIDB4MEUwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfVElNRVJfQ29tbWFuZCAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XICA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9Db21tYW5kICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBUaW1lciwgQ29tbWFuZCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfR0FUXzAgICAgICAgICAgICAoIDEgPDwgMCApICAgIC8qIEdhdGUgZW5hYmxlLCBjb3VudGVyIDAgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfR0FUXzEgICAgICAgICAgICAoIDEgPDwgMSApICAgIC8qIEdhdGUgZW5hYmxlLCBjb3VudGVyIDEgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfR0FUXzIgICAgICAgICAgICAoIDEgPDwgMiApICAgIC8qIEdhdGUgZW5hYmxlLCBjb3VudGVyIDIgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfQ0xLXzAgICAgICAgICAgICAoIDEgPDwgMyApICAgIC8qIENsb2NrIGVuYWJsZSwgY291bnRlciAwICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0NMS18xICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBDbG9jayBlbmFibGUsIGNvdW50ZXIgMSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9DTEtfMiAgICAgICAgICAgICggMSA8PCA1ICkgICAgLyogQ2xvY2sgZW5hYmxlLCBjb3VudGVyIDIgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfTU9ERV8wICAgICAgICAgICAoIDEgPDwgNiApICAgIC8qIE1vZGUgMCBlbmFibGUsIGNvdW50ZXIgMCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9NT0RFXzEgICAgICAgICAgICggMSA8PCA3ICkgICAgLyogTW9kZSAwIGVuYWJsZSwgY291bnRlciAxICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0NMT0NLX0Jhc2UgICAgICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9DTE9DS19FbmFibGUgICAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1cgIDE4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19FbmFibGUgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUzMiwgQ0xPQ0ssIEVuYWJsZSApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQVVESU9fMSAgICAgICAgICAgICAgMHgwMDAxICAgIC8qIEVuYWJsZSA0LjEgTUh6IGNsb2NrIGZvciA4S2h6IGFuZCA0a2h6IHNhbXBsZSByYXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0FVRElPXzIgICAgICAgICAgICAgIDB4MDAwMiAgICAvKiBFbmFibGUgMTIuMyBNSHogY2xvY2sgZm9yIDQ4S2h6IGFuZCAzMmtoeiBzYW1wbGUgcmF0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19BVURJT18zICAgICAgICAgICAgICAweDAwMDQgICAgLyogRW5hYmxlIDUuNiBNSHogY2xvY2sgZm9yIDExIGtIWiBzYW1wbGUgcmF0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19BVURJT180ICAgICAgICAgICAgICAweDAwMDggICAgLyogRW5hYmxlIDExLjI4OSBNSHogY2xvY2sgZm9yIDQ0IGFuZCAyMiBrSHogc2FtcGxlIHJhdGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQURDICAgICAgICAgICAgICAoIDEgPDwgNCApICAgIC8qIDEuMDI0IE1IeiBjbG9jayB0byBBREMgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU1BJICAgICAgICAgICAgICAoIDEgPDwgNSApICAgIC8qIDQuMDk2IE1IeiBjbG9jayB0byBTUEkgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfT1dNICAgICAgICAgICAgICAoIDEgPDwgNiApICAgIC8qIDQuMDk2IE1IeiBjbG9jayB0byBPV00gKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfUFdNICAgICAgICAgICAgICAoIDEgPDwgNyApICAgIC8qIDIuMDQ4IE1IeiBjbG9jayB0byBQV00gKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfVUFSVF8xICAgICAgICAgICAoIDEgPDwgOCApICAgIC8qIDI0LjU3NiBNSHogY2xvY2sgdG8gVUFSVDEgKHR1cm4gb2ZmIGJpdCAxNikgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfVUFSVF8wICAgICAgICAgICAoIDEgPDwgOSApICAgIC8qIDI0LjU3NiBNSHogY2xvY2sgdG8gVUFSVDAgKHR1cm4gb2ZmIGJpdCAxNykgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfMSAgICAgICAgICAgICAoIDEgPDwgMTAgKSAgIC8qIDE2LjkzNCBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfMiAgICAgICAgICAgICAoIDIgPDwgMTAgKSAgIC8qIDI0LjU3NiBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfMyAgICAgICAgICAgICAoIDMgPDwgMTAgKSAgIC8qIDMzLjg2OSBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfNCAgICAgICAgICAgICAoIDQgPDwgMTAgKSAgIC8qIDQ5LjE1MiBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRVgwICAgICAgICAgICAgICAoIDEgPDwgMTMgKSAgIC8qIEVuYWJsZSAzMi43Njgga0h6IGNyeXN0YWwgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRVgxICAgICAgICAgICAgICAoIDEgPDwgMTQgKSAgIC8qIEVuYWJsZSAyNC41NzYgTUh6IGNyeXN0YWwgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRVgyICAgICAgICAgICAgICAoIDEgPDwgMTUgKSAgIC8qIEVuYWJsZSAzMy44NjkgTUh6IGNyeXN0YWwgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0xPV19VQVJUXzEgICAgICAoIDEgPDwgMTYgKSAgIC8qIEVuYWJsZSAzLjY4NiBNSHogdG8gVUFSVDEgKHR1cm4gb2ZmIGJpdCA4KSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19TTE9XX1VBUlRfMCAgICAgICggMSA8PCAxNyApICAgLyogRW5hYmxlIDMuNjg2IE1IeiB0byBVQVJUMCAodHVybiBvZmYgYml0IDkpICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0FEQ19CYXNlICAgICAgICAgICAgICAgICAgMHgxMjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9BRENfTXVsdGlwbGV4ZXIgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1cgNCBiaXRzIC0gbG93IDMgYml0cyBzZXQgY2hhbm5lbCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfQURDX0NvbnRyb2xTdGF0dXMgICAgICAgICAweDAwMDQgICAgLyogUi9XIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfQURDX0RhdGEgICAgICAgICAgICAgICAgICAweDAwMDggICAgLyogUiAgIDEwIGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9BRENfTXVsdGlwbGV4ZXIgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCAgdTgsIEFEQywgTXVsdGlwbGV4ZXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9BRENfQ29udHJvbFN0YXR1cyAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCAgdTgsIEFEQywgQ29udHJvbFN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0FEQ19EYXRhICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgQURDLCBEYXRhICkKLQotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfTVVYX0NIQU5ORUxfTUFTSyAgICAgICAgIDB4MDcgICAgLyogTG93IDMgYml0cyBzZXRzIGNoYW5uZWwuICBtYXggPSA0ICovCi0jZGVmaW5lIEgzNjAwX0FTSUMyX0FEQ19NVVhfQ0xLRU4gICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBFbmFibGUgY2xvY2sgKi8KLQotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0FEUFNfTUFTSyAgICAgICAgICAgIDB4MGYgICAgLyogTG93IDQgYml0cyBzZXRzIHByZXNjYWxlLCBtYXggPSA4ICovCi0jZGVmaW5lIEgzNjAwX0FTSUMyX0FEQ19DU1JfRlJFRV9SVU4gICAgICAgKCAxIDw8IDQgKQotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0lOVF9FTkFCTEUgICAgICggMSA8PCA1ICkKLSNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9TVEFSVCAgICAgICAgICAoIDEgPDwgNiApICAgIC8qIFNldCB0byBzdGFydCBjb252ZXJzaW9uLiAgR29lcyB0byAwIHdoZW4gZG9uZSAqLwotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0VOQUJMRSAgICAgICAgICggMSA8PCA3ICkgICAgLyogMTpwb3dlciB1cCBBREMsIDA6cG93ZXIgZG93biAqLwotCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0lOVFJfQmFzZSAgICAgICAgICAgICAgICAgMHgxNjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9JTlRSX01hc2tBbmRGbGFnICAgICAgICAgIDB4MDAwMCAgICAvKiBSLyhXKSA4Yml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlICAgICAgICAweDAwMDQgICAgLyogUi8oVykgNWJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0lOVFJfVGltZXJTZXQgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIFIvKFcpIDhiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NYXNrQW5kRmxhZyAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIElOVFIsIE1hc2tBbmRGbGFnICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIElOVFIsIENsb2NrUHJlc2NhbGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX1RpbWVyU2V0ICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgSU5UUiwgVGltZXJTZXQgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfR0xPQkFMX01BU0sgICAgICAgKCAxIDw8IDAgKSAgICAvKiBHbG9iYWwgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9QT1dFUl9PTl9SRVNFVCAgICAoIDEgPDwgMSApICAgIC8qIDAxOiBQb3dlciBvbiByZXNldCAoYml0cyAxICYgMiApICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfRVhURVJOQUxfUkVTRVQgICAgKCAyIDw8IDEgKSAgICAvKiAxMDogRXh0ZXJuYWwgcmVzZXQgKGJpdHMgMSAmIDIgKSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX01BU0tfVUFSVF8wICAgICAgICggMSA8PCA0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NQVNLX1VBUlRfMSAgICAgICAoIDEgPDwgNSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfTUFTS19USU1FUiAgICAgICAgKCAxIDw8IDYgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX01BU0tfT1dNICAgICAgICAgICggMSA8PCA3ICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX0NMT0NLX1BSRVNDQUxFICAgICAgICAgIDB4MGYgICAgLyogNCBiaXRzLCBtYXggMTQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9TRVQgICAgICAgICAgICAgICAoIDEgPDwgNCApICAgIC8qIFRpbWUgYmFzZSBlbmFibGUgKi8KLQotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fQmFzZSAgICAgICAgICAgICAgICAgIDB4MTgwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0NvbW1hbmQgICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDQgYml0cyBjb21tYW5kIHJlZ2lzdGVyICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fRGF0YSAgICAgICAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgOCBiaXRzLCB0cmFuc21pdCAvIHJlY2VpdmUgYnVmZmVyICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fSW50ZXJydXB0ICAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSL1cgQ29tbWFuZCByZWdpc3RlciAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0ludGVycnVwdEVuYWJsZSAgICAgICAweDAwMGMgICAgLyogUi9XIENvbW1hbmQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX09XTV9DbG9ja0Rpdmlzb3IgICAgICAgICAgMHgwMDEwICAgIC8qIFIvVyA1IGJpdHMgb2YgZGl2aXNvciBhbmQgcHJlLXNjYWxlICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0NvbW1hbmQgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIENvbW1hbmQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fRGF0YSAgICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIE9XTSwgRGF0YSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JbnRlcnJ1cHQgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgT1dNLCBJbnRlcnJ1cHQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSW50ZXJydXB0RW5hYmxlICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIE9XTSwgSW50ZXJydXB0RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0Nsb2NrRGl2aXNvciAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIENsb2NrRGl2aXNvciApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0NNRF9PTkVfV0lSRV9SRVNFVCAoIDEgPDwgMCApICAgIC8qIFNldCB0byBmb3JjZSByZXNldCBvbiAxLXdpcmUgYnVzICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DTURfU1JBICAgICAgICAgICAgKCAxIDw8IDEgKSAgICAvKiBTZXQgdG8gc3dpdGNoIHRvIFNlYXJjaCBST00gYWNjZWxlcmF0b3IgbW9kZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fQ01EX0RRX09VVFBVVCAgICAgICggMSA8PCAyICkgICAgLyogV3JpdGUgb25seSAtIGZvcmNlcyBidXMgbG93ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DTURfRFFfSU5QVVQgICAgICAgKCAxIDw8IDMgKSAgICAvKiBSZWFkIG9ubHkgLSByZWZsZWN0cyBzdGF0ZSBvZiBidXMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1BEICAgICAgICAgICAgICggMSA8PCAwICkgICAgLyogUHJlc2VuY2UgZGV0ZWN0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfUERSICAgICAgICAgICAgKCAxIDw8IDEgKSAgICAvKiBQcmVzZW5jZSBkZXRlY3QgcmVzdWx0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfVEJFICAgICAgICAgICAgKCAxIDw8IDIgKSAgICAvKiBUcmFuc21pdCBidWZmZXIgZW1wdHkgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVF9URU1UICAgICAgICAgICAoIDEgPDwgMyApICAgIC8qIFRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfUkJGICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBSZWNlaXZlIGJ1ZmZlciBmdWxsICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0VQRCAgICAgICAgICAoIDEgPDwgMCApICAgIC8qIEVuYWJsZSByZWNlaXZlIGJ1ZmZlciBmdWxsIGludGVycnVwdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5URU5fSUFTICAgICAgICAgICggMSA8PCAxICkgICAgLyogRW5hYmxlIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGVtcHR5IGludGVycnVwdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5URU5fRVRCRSAgICAgICAgICggMSA8PCAyICkgICAgLyogRW5hYmxlIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0VUTVQgICAgICAgICAoIDEgPDwgMyApICAgIC8qIElOVFIgYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRFTl9FUkJGICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBFbmFibGUgcHJlc2VuY2UgZGV0ZWN0IGludGVycnVwdCAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9GbGFzaEN0bF9CYXNlICAgICAgICAgICAgIDB4MUEwMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEgzODAwLCBBU0lDICMxCi0gKiBUaGlzIEFTSUMgaXMgYWNjZXNlZCB0aHJvdWdoIEFTSUMgIzIsIGFuZAotICogbWFwcGVkIGludG8gdGhlIDFjMDAgLSAxZjAwIHJlZ2lvbgotICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfT0ZGU0VUKHMseCx5KSAgIFwKLSAgICAgKCooKHZvbGF0aWxlIHMgKikgKF9IMzgwMF9BU0lDMl9CYXNlICsgX0gzODAwX0FTSUMxXyAjIyB4ICMjIF9CYXNlICsgKF9IMzgwMF9BU0lDMV8gIyMgeCAjIyBfICMjIHkgPDwgMSkpKSkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0Jhc2UgICAgICAgICAgICAgMHgxYzAwCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19TdGFydFN0b3BDbG9jayAgICAgMHgwMCAgICAvKiBSL1cgOGJpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX1N0YXR1cyAgICAgICAgICAgICAweDAyICAgIC8qIFIgICBTZWUgYmVsb3csIGRlZmF1bHQgMHgwMDQwICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfQ2xvY2tSYXRlICAgICAgICAgIDB4MDQgICAgLyogUi9XIDhiaXQsIGxvdyAzIGJpdHMgYXJlIGNsb2NrIGRpdmlzb3IgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19TUElSZWdpc3RlciAgICAgICAgMHgwOCAgICAvKiBSL1cgOGJpdCwgc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0NtZERhdGFDb250ICAgICAgICAweDBhICAgIC8qIFIvVyA4Yml0LCB3cml0ZSB0byBzdGFydCBNTUMgYWRhcHRlciAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfUmVzcG9uc2VUaW1lb3V0ICAgIDB4MGMgICAgLyogUi9XIDhiaXQsIGNsb2NrcyBiZWZvcmUgcmVzcG9uc2UgdGltZW91dCAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19SZWFkVGltZW91dCAgICAgICAgMHgwZSAgICAvKiBSL1cgMTZiaXQsIGNsb2NrcyBiZWZvcmUgcmVjZWl2ZWQgZGF0YSB0aW1lb3V0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfQmxvY2tMZW5ndGggICAgICAgIDB4MTAgICAgLyogUi9XIDEwYml0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfTnVtT2ZCbG9ja3MgICAgICAgIDB4MTIgICAgLyogUi9XIDE2Yml0LCBpbiBibG9jayBtb2RlLCBudW1iZXIgb2YgYmxvY2tzICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0ludGVycnVwdE1hc2sgICAgICAweDFhICAgIC8qIFIvVyA4Yml0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfQ29tbWFuZE51bWJlciAgICAgIDB4MWMgICAgLyogUi9XIDYgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0FyZ3VtZW50SCAgICAgICAgICAweDFlICAgIC8qIFIvVyAxNiBiaXRzICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0FyZ3VtZW50TCAgICAgICAgICAweDIwICAgIC8qIFIvVyAxNiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfUmVzRmlmbyAgICAgICAgICAgIDB4MjIgICAgLyogUiAgIDggeCAxNiBiaXRzIC0gY29udGFpbnMgcmVzcG9uc2UgRklGTyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0J1ZmZlclBhcnRGdWxsICAgICAweDI4ICAgIC8qIFIvVyA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU3RhcnRTdG9wQ2xvY2sgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgU3RhcnRTdG9wQ2xvY2sgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU3RhdHVzICAgICAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0Nsb2NrUmF0ZSAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggIHU4LCBNTUMsIENsb2NrUmF0ZSApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElSZWdpc3RlciAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBTUElSZWdpc3RlciApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DbWREYXRhQ29udCAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBDbWREYXRhQ29udCApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19SZXNwb25zZVRpbWVvdXQgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBSZXNwb25zZVRpbWVvdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfUmVhZFRpbWVvdXQgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgUmVhZFRpbWVvdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQmxvY2tMZW5ndGggICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgQmxvY2tMZW5ndGggKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfTnVtT2ZCbG9ja3MgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgTnVtT2ZCbG9ja3MgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSW50ZXJydXB0TWFzayAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgSW50ZXJydXB0TWFzayApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19Db21tYW5kTnVtYmVyICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBDb21tYW5kTnVtYmVyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0FyZ3VtZW50SCAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIEFyZ3VtZW50SCApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19Bcmd1bWVudEwgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgTU1DLCBBcmd1bWVudEwgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfUmVzRmlmbyAgICAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgUmVzRmlmbyApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19CdWZmZXJQYXJ0RnVsbCAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBCdWZmZXJQYXJ0RnVsbCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUT1BfQ0xPQ0sgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkgICAvKiBXcml0ZSB0byAiU3RhcnRTdG9wQ2xvY2siIHJlZ2lzdGVyICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFSVF9DTE9DSyAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19SRUFEX1RJTUVPVVQgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19SRVNQT05TRV9USU1FT1VUICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19DUkNfV1JJVEVfRVJST1IgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19DUkNfUkVBRF9FUlJPUiAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19TUElfUkVBRF9FUlJPUiAgICAgICAgKDEgPDwgNCkgIC8qIFNQSSBkYXRhIHRva2VuIGVycm9yIHJlY2VpdmVkICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ1JDX1JFU1BPTlNFX0VSUk9SICAgICgxIDw8IDUpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfRklGT19FTVBUWSAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfRklGT19GVUxMICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ0xPQ0tfRU5BQkxFICAgICAgICAgICgxIDw8IDgpICAvKiBNdWx0aU1lZGlhQ2FyZCBjbG9jayBzdG9wcGVkICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfREFUQV9UUkFOU0ZFUl9ET05FICAgICgxIDw8IDExKSAvKiBXcml0ZSBvcGVyYXRpb24sIGluZGljYXRlcyB0cmFuc2ZlciBmaW5pc2hlZCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0VORF9QUk9HUkFNICAgICAgICAgICAoMSA8PCAxMikgLyogRW5kIHdyaXRlIGFuZCByZWFkIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19FTkRfQ09NTUFORF9SRVNQT05TRSAgKDEgPDwgMTMpIC8qIEVuZCBjb21tYW5kIHJlc3BvbnNlICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfU1BJX0VOQUJMRSAgICAgICAgICAgKDEgPDwgMCkgIC8qIEVuYWJsZXMgU1BJIG1vZGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfQ1JDX09OICAgICAgICAgICAgICAgKDEgPDwgMSkgIC8qIDE6dHVybiBvbiBDUkMgICAgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfU1BJX0NTX0VOQUJMRSAgICAgICAgKDEgPDwgMikgIC8qIDE6dHVybiBvbiBTUEkgQ1MgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfQ1NfQUREUkVTU19NQVNLICAgICAgMHgzOCAgICAgIC8qIEJpdHMgMyw0LDUgYXJlIHRoZSBTUEkgQ1MgcmVsYXRpdmUgYWRkcmVzcyAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX0ZPUk1BVF9OT19SRVNQT05TRSAgMHgwMAotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9GT1JNQVRfUjEgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfRk9STUFUX1IyICAgICAgICAgICAweDAyCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX0ZPUk1BVF9SMyAgICAgICAgICAgMHgwMwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9EQVRBX0VOQUJMRSAgICAgICAgICgxIDw8IDIpICAvKiBUaGlzIGNvbW1hbmQgY29udGFpbnMgYSBkYXRhIHRyYW5zZmVyICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX1dSSVRFICAgICAgICAgICAgICAgKDEgPDwgMykgIC8qIFRoaXMgZGF0YSB0cmFuc2ZlciBpcyBhIHdyaXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX1NUUkVBTV9NT0RFICAgICAgICAgKDEgPDwgNCkgIC8qIFRoaXMgZGF0YSB0cmFuc2ZlciBpcyBpbiBzdHJlYW0gbW9kZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9CVVNZX0JJVCAgICAgICAgICAgICgxIDw8IDUpICAvKiBCdXN5IHNpZ25hbCBleHBlY3RlZCBhZnRlciBjdXJyZW50IGNtZCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9JTklUSUFMSVpFICAgICAgICAgICgxIDw8IDYpICAvKiBFbmFibGVzIHRoZSA4MCBiaXRzIGZvciBpbml0aWFsaXppbmcgY2FyZCAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19JTlRfTUFTS19EQVRBX1RSQU5TRkVSX0RPTkUgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0lOVF9NQVNLX1BST0dSQU1fRE9ORSAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSU5UX01BU0tfRU5EX0NPTU1BTkRfUkVTUE9OU0UgICAgICgxIDw8IDIpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19JTlRfTUFTS19CVUZGRVJfUkVBRFkgICAgICAgICAgICAgKDEgPDwgMykKLQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQlVGRkVSX1BBUlRfRlVMTCAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKioqKioqKiogR1BJTyAqKioqKioqKioqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0Jhc2UgICAgICAgIDB4MWUwMAotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX01hc2sgICAgICAgICAgMHgzMCAgICAvKiBSL1cgMDpkb24ndCBtYXNrLCAxOm1hc2sgaW50ZXJydXB0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0RpcmVjdGlvbiAgICAgMHgzMiAgICAvKiBSL1cgMDppbnB1dCwgMTpvdXRwdXQgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX091dCAgICAgICAgICAgMHgzNCAgICAvKiBSL1cgMDpvdXRwdXQgbG93LCAxOm91dHB1dCBoaWdoICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1RyaWdnZXJUeXBlICAgMHgzNiAgICAvKiBSL1cgMDpsZXZlbCwgMTplZGdlICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0VkZ2VUcmlnZ2VyICAgMHgzOCAgICAvKiBSL1cgMDpmYWxsaW5nLCAxOnJpc2luZyAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0xldmVsVHJpZ2dlciAgMHgzQSAgICAvKiBSL1cgMDpsb3csIDE6aGlnaCBsZXZlbCBkZXRlY3QgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0xldmVsU3RhdHVzICAgMHgzQyAgICAvKiBSL1cgMDpub25lLCAxOmRldGVjdCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0VkZ2VTdGF0dXMgICAgMHgzRSAgICAvKiBSL1cgMDpub25lLCAxOmRldGVjdCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1N0YXRlICAgICAgICAgMHg0MCAgICAvKiBSICAgU2VlIG1hc2tzIGJlbG93ICAoZGVmYXVsdCAwKSAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1Jlc2V0ICAgICAgICAgMHg0MiAgICAvKiBSL1cgU2VlIG1hc2tzIGJlbG93ICAoZGVmYXVsdCAweDA0KSAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1NsZWVwTWFzayAgICAgMHg0NCAgICAvKiBSL1cgMDpkb24ndCBtYXNrLCAxOm1hc2sgdHJpZ2dlciBpbiBzbGVlcCBtb2RlICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TbGVlcERpciAgICAgIDB4NDYgICAgLyogUi9XIGRpcmVjdGlvbiAwOmlucHV0LCAxOm91dHB1dCBpbiBzbGVlcCBtb2RlICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1NsZWVwT3V0ICAgICAgMHg0OCAgICAvKiBSL1cgbGV2ZWwgMDpsb3csIDE6aGlnaCBpbiBzbGVlcCBtb2RlICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TdGF0dXMgICAgICAgIDB4NEEgICAgLyogUiAgIFBpbiBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX0dQSU9fQmF0dEZhdWx0RGlyICAweDRDICAgIC8qIFIvVyBkaXJlY3Rpb24gMDppbnB1dCwgMTpvdXRwdXQgaW4gYmF0dF9mYXVsdCAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdE91dCAgMHg0RSAgICAvKiBSL1cgbGV2ZWwgMDpsb3csIDE6aGlnaCBpbiBiYXR0X2ZhdWx0ICAgICAgICAgICAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fTWFzayAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBNYXNrICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19EaXJlY3Rpb24gICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIERpcmVjdGlvbiApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fT3V0ICAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBPdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1RyaWdnZXJUeXBlICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgVHJpZ2dlclR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0VkZ2VUcmlnZ2VyICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgRWRnZVRyaWdnZXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0xldmVsVHJpZ2dlciBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgTGV2ZWxUcmlnZ2VyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19MZXZlbFN0YXR1cyAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIExldmVsU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19FZGdlU3RhdHVzICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIEVkZ2VTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1N0YXRlICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgR1BJTywgU3RhdGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1Jlc2V0ICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgR1BJTywgUmVzZXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NsZWVwTWFzayAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgU2xlZXBNYXNrICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TbGVlcERpciAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFNsZWVwRGlyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TbGVlcE91dCAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFNsZWVwT3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TdGF0dXMgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fQmF0dEZhdWx0RGlyIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBCYXR0RmF1bHREaXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdE91dCBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgQmF0dEZhdWx0T3V0ICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX01BU0sgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX0RJUkVDVElPTiAgICAgICAoMSA8PCAxKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX09VVCAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX1RSSUdHRVJfVFlQRSAgICAoMSA8PCAzKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX0VER0VfVFJJR0dFUiAgICAoMSA8PCA0KQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX0xFVkVMX1RSSUdHRVIgICAoMSA8PCA1KQotCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fUkVTRVRfU09GVFdBUkUgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fUkVTRVRfQVVUT19TTEVFUCAgICAgICgxIDw8IDEpCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fUkVTRVRfRklSU1RfUFdSX09OICAgICgxIDw8IDIpCi0KLS8qIFRoZXNlIGFyZSBhbGwgb3V0cHV0cyAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0lSX09OX04gICAgICAgICAgKDEgPDwgMCkgICAvKiBBcHBseSBwb3dlciB0byB0aGUgSVIgTW9kdWxlICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfU0RfUFdSX09OICAgICAgICAoMSA8PCAxKSAgIC8qIFNlY3VyZSBEaWdpdGFsIHBvd2VyIG9uICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfUlMyMzJfT04gICAgICAgICAoMSA8PCAyKSAgIC8qIFR1cm4gb24gcG93ZXIgdG8gdGhlIFJTMjMyIGNoaXAgPyAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1BVTFNFX0dFTiAgICAgICAgKDEgPDwgMykgICAvKiBHb2VzIHRvIHNwZWFrZXIgLyBlYXJwaG9uZSAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0NIX1RJTUVSICAgICAgICAgKDEgPDwgNCkgICAvKiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0xDRF81Vl9PTiAgICAgICAgKDEgPDwgNSkgICAvKiBFbmFibGVzIExDRF81ViAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0xDRF9PTiAgICAgICAgICAgKDEgPDwgNikgICAvKiBFbmFibGVzIExDRF8zViAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0xDRF9QQ0kgICAgICAgICAgKDEgPDwgNykgICAvKiBDb25uZWN0cyB0byBQRFdOIG9uIExDRCBjb250cm9sbGVyICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfVkdIX09OICAgICAgICAgICAoMSA8PCA4KSAgIC8qIERyaXZlcyBWR0ggb24gdGhlIExDRCAoKzk/PykgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9WR0xfT04gICAgICAgICAgICgxIDw8IDkpICAgLyogRHJpdmVycyBWR0wgb24gdGhlIExDRCAoLTY/PykgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9GTF9QV1JfT04gICAgICAgICgxIDw8IDEwKSAgLyogRnJvbnRsaWdodCBwb3dlciBvbiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0JUX1BXUl9PTiAgICAgICAgKDEgPDwgMTEpICAvKiBCbHVldG9vdGggcG93ZXIgb24gKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9TUEtfT04gICAgICAgICAgICgxIDw8IDEyKSAgLyogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9FQVJfT05fTiAgICAgICAgICgxIDw8IDEzKSAgLyogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9BVURfUFdSX09OICAgICAgICgxIDw8IDE0KSAgLyogKi8KLQotLyogV3JpdGUgZW5hYmxlIGZvciB0aGUgZmxhc2ggKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzFfRmxhc2hXUF9CYXNlICAgICAgICAgMHgxRjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9GbGFzaFdQX1ZQUF9PTiAgICAgICAgIDB4MDAgICAgLyogUiAgIDE6IHdyaXRlLCAwOiBwcm90ZWN0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX0ZsYXNoV1BfVlBQX09OICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTgsIEZsYXNoV1AsIFZQUF9PTiApCiAKICNlbmRpZiAvKiBfSU5DTFVERV9IMzYwMF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCAwY2IzNjYwLi5hZTgxZjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTE1Myw4ICsxNTMsNiBAQAogICovCiAjaWZkZWYgQ09ORklHX1NBMTExMQogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9TMV9CVkQxX1NUU0NIRyArIDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TQTExMDBfSDM4MDApCi0jZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0JPQVJEX0VORCkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NIQVJQX0xPQ09NTykKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfTE9DT01PX1NQSV9URU5EICsgMSkKICNlbHNlCkBAIC0xNzUsMjMgKzE3MywzIEBACiAjZGVmaW5lIElSUV9MT0NPTU9fTFRfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMikKICNkZWZpbmUgSVJRX0xPQ09NT19TUElfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMykKIAotLyogSDM4MDAtc3BlY2lmaWMgSVJRcyAoQ09ORklHX1NBMTEwMF9IMzgwMCkgKi8KLSNkZWZpbmUgSDM4MDBfS1BJT19JUlFfU1RBUlQgICAgKElSUV9CT0FSRF9TVEFSVCkKLSNkZWZpbmUgSVJRX0gzODAwX0tFWSAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDApCi0jZGVmaW5lIElSUV9IMzgwMF9TUEkgICAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxKQotI2RlZmluZSBJUlFfSDM4MDBfT1dNICAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgMikKLSNkZWZpbmUgSVJRX0gzODAwX0FEQyAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDMpCi0jZGVmaW5lIElSUV9IMzgwMF9VQVJUXzAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyA0KQotI2RlZmluZSBJUlFfSDM4MDBfVUFSVF8xICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgNSkKLSNkZWZpbmUgSVJRX0gzODAwX1RJTUVSXzAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDYpCi0jZGVmaW5lIElSUV9IMzgwMF9USU1FUl8xICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyA3KQotI2RlZmluZSBJUlFfSDM4MDBfVElNRVJfMiAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgOCkKLSNkZWZpbmUgSDM4MDBfS1BJT19JUlFfQ09VTlQgICAgOQotCi0jZGVmaW5lIEgzODAwX0dQSU9fSVJRX1NUQVJUICAgIChJUlFfQk9BUkRfU1RBUlQgKyA5KQotI2RlZmluZSBJUlFfSDM4MDBfUEVOICAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgOSkKLSNkZWZpbmUgSVJRX0gzODAwX1NEX0RFVEVDVCAgICAgKElSUV9CT0FSRF9TVEFSVCArIDEwKQotI2RlZmluZSBJUlFfSDM4MDBfRUFSX0lOICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgMTEpCi0jZGVmaW5lIElSUV9IMzgwMF9VU0JfREVURUNUICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxMikKLSNkZWZpbmUgSVJRX0gzODAwX1NEX0NPTl9TTFQgICAgKElSUV9CT0FSRF9TVEFSVCArIDEzKQotI2RlZmluZSBIMzgwMF9HUElPX0lSUV9DT1VOVCAgICA1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNjM3NTVjYS4uOTQyYjE1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTAsNyArMTAsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmIChtb2RlID09ICdzJykgewogCQkvKiBKdW1wIGludG8gUk9NIGF0IGFkZHJlc3MgMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jCmluZGV4IDgxODQ4YWEuLmZkNzc2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKQEAgLTIyNiwxMiArMjI2LDIyIEBACiAJLmlkICAgICAgICAgICAgID0gLTEsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBqb3JuYWRhX2tiZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImpvcm5hZGE3MjBfa2JkIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBqb3JuYWRhX3RzX2RldmljZSA9IHsKKwkubmFtZQkJPSAiam9ybmFkYV90cyIsCisJLmlkCQk9IC0xLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzYTExMTFfZGV2aWNlLAotI2lmZGVmIENPTkZJR19TQTExMDBfSk9STkFEQTcyMF9TU1AKIAkmam9ybmFkYV9zc3BfZGV2aWNlLAotI2VuZGlmCiAJJnMxZDEzeHh4ZmJfZGV2aWNlLAorCSZqb3JuYWRhX2tiZF9kZXZpY2UsCisJJmpvcm5hZGFfdHNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgam9ybmFkYTcyMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCmluZGV4IGEyM2ZkM2QuLjM1OGQ4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCkBAIC0xNiwxMiArMTYsMjggQEAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAorI2RlZmluZSBJT19CQVNFICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCisjZGVmaW5lIElPX1NJWkUgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSU9fU1RBUlQgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBST01DQVJEX1NJWkUgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJPTUNBUkRfU1RBUlQgICAgICAgICAgIDB4MTAwMDAwMDAKKwordm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworICAgICAgICBzaG9ydCB0ZW1wOworICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOworICAgICAgICAvKiBSZXNldCB0aGUgTWFjaGluZSB2aWEgcGNbM10gb2YgdGhlIHNlcXVvaWEgY2hpcHNldCAqLworICAgICAgICBvdXR3KDB4MDksMHgyNCk7CisgICAgICAgIHRlbXA9aW53KDB4MjYpOworICAgICAgICB0ZW1wID0gdGVtcCB8ICgxPDwzKSB8ICgxPDwxMCk7CisgICAgICAgIG91dHcoMHgwOSwweDI0KTsKKyAgICAgICAgb3V0dyh0ZW1wLDB4MjYpOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkuaW9iYXNlCQk9IDB4M2Y4LApAQCAtNTAsMTQgKzY2LDM4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg3MCwKKwkJLmVuZAk9IDB4NzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9JU0FfUlRDX0FMQVJNLAorCQkuZW5kCT0gSVJRX0lTQV9SVENfQUxBUk0sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInJ0Y19jbW9zIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnRjX3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzaGFya19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCWlmIChtYWNoaW5lX2lzX3NoYXJrKCkpCisJeworCSAgICAgICAgcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZGV2aWNlKTsKKwkJaWYgKHJldCkgcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgUlRDIGRldmljZTogJWRcbiIsIHJldCk7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Ci0KLQlyZXR1cm4gcmV0OworCQlpZiAocmV0KSBwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTZXJpYWwgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIGFyY2hfaW5pdGNhbGwoc2hhcmtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYwppbmRleCA2Nzc0YjhkLi4xMGI1YjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvZG1hLmMKQEAgLTEzLDkgKzEzLDExIEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogCi12b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCitzdGF0aWMgaW50IF9faW5pdCBzaGFya19kbWFfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19JU0FfRE1BCi0JaXNhX2luaXRfZG1hKGRtYSk7CisJaXNhX2luaXRfZG1hKCk7CiAjZW5kaWYKKwlyZXR1cm4gMDsKIH0KK2NvcmVfaW5pdGNhbGwoc2hhcmtfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMDgzNmNiNy4uZjk3YTc2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yNyw1ICsyNywzIEBACiAJCWJuZQkxMDAxYgogCQkuZW5kbQogCi0JCS5tYWNybwl3YWl0dWFydCxyZCxyeAotCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZnJhbWVidWZmZXIuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNWJmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmgKKyAqCisgKiBieSBBbGV4YW5kZXIgU2NodWx6CisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9GUkFNRUJVRkZFUl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRlJBTUVCVUZGRVJfSAorCisvKiBkZWZpbmVzIGZvciB0aGUgRnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgRkJfU1RBUlQJCTB4MDYwMDAwMDAKKyNkZWZpbmUgRkJfU0laRQkJCTB4MDEwMDAwMDAKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDAxYmY3NjAuLjk0ZDg0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTAsMzUgKzEwLDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICogTWFwcGluZyBhcmVhcwotICovCi0jZGVmaW5lIElPX0JBU0UJCQkweGUwMDAwMDAwCi0KLSNlbHNlCi0KLSNkZWZpbmUgSU9fQkFTRQkJCTAKLQotI2VuZGlmCi0KLSNkZWZpbmUgSU9fU0laRQkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgSU9fU1RBUlQJCTB4NDAwMDAwMDAKLSNkZWZpbmUgUk9NQ0FSRF9TSVpFCQkweDA4MDAwMDAwCi0jZGVmaW5lIFJPTUNBUkRfU1RBUlQJCTB4MTAwMDAwMDAKLQotCi0vKiBkZWZpbmVzIGZvciB0aGUgRnJhbWVidWZmZXIgKi8KLSNkZWZpbmUgRkJfU1RBUlQJCTB4MDYwMDAwMDAKLSNkZWZpbmUgRkJfU0laRQkJCTB4MDEwMDAwMDAKLQogI2RlZmluZSBVTkNBQ0hFQUJMRV9BRERSICAgICAgICAweGRmMDEwMDAwCiAKLSNkZWZpbmUgU0VRVU9JQV9MRURfR1JFRU4gICAgICAgKDE8PDYpCi0jZGVmaW5lIFNFUVVPSUFfTEVEX0FNQkVSICAgICAgICgxPDw1KQotI2RlZmluZSBTRVFVT0lBX0xFRF9CQUNLICAgICAgICAoMTw8NykKLQogI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgICAgIDEKIAogI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAgICAgICAgICAweDYwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGM1Y2VlODIuLjljY2JjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTEsMTAgKzExLDEwIEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAogCi0jZGVmaW5lIFBDSU9fQkFTRQkweGUwMDAwMDAwCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUCTB4ZmZmZmZmZmYKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8oYSkJCSgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCi0jZGVmaW5lIF9fbWVtX3BjaShhZGRyKQkoYWRkcikKKyNkZWZpbmUgX19pbyhhKSAgICAgICAgICAgICAgICAgKCh2b2lkIF9faW9tZW0gKikoMHhlMDAwMDAwMCArIChhKSkpCisKKyNkZWZpbmUgX19tZW1fcGNpKGFkZHIpIChhZGRyKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCAwNTg2YWNkLi5jOGU4YTRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC03LDcgKzcsNyBAQAogI2RlZmluZSBOUl9JUlFTCQkJMTYKIAogI2RlZmluZSBJUlFfSVNBX0tFWUJPQVJECSAxCi0jZGVmaW5lIFJUQ19JUlEJCQkgOAorI2RlZmluZSBJUlFfSVNBX1JUQ19BTEFSTQkgOAogI2RlZmluZSBJODA0Ml9LQkRfSVJRCQkgMQogI2RlZmluZSBJODA0Ml9BVVhfSVJRCQkxMgogI2RlZmluZSBJUlFfSEFSRERJU0sgICAgICAgICAgICAxNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCmluZGV4IDg2NDI5OGYuLjk2YzQzYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKQEAgLTYsMTAgKzYsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAotLyogVXNlIG9ubHkgdGhlIGxvd2VzdCA0TUIsIG5vdGhpbmcgZWxzZSB3b3Jrcy4KLSAqIFRoZSByZXN0IGlzIG5vdCBETUFhYmxlLiBTZWUgZGV2IC8gIC5wcm9wZXJ0aWVzCi0gKiBpbiBPcGVuRmlybXdhcmUuCi0gKi8KICNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CiAjZGVmaW5lIERNQV9JU0FfQ0FTQ0FERSAgICAgICAgIDQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBjNWFiMDM4Li4zMDUzZTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjMsNiArMjMsNyBAQAogewogICBpZiAobm9kZSAhPSAwKSByZXR1cm47CiAgIC8qIE9ubHkgdGhlIGZpcnN0IDQgTUIgKD0xMDI0IFBhZ2VzKSBhcmUgdXNhYmxlIGZvciBETUEgKi8KKyAgLyogU2VlIGRldiAvIC0+IC5wcm9wZXJ0aWVzIGluIE9wZW5GaXJtd2FyZS4gKi8KICAgem9uZV9zaXplWzFdID0gem9uZV9zaXplWzBdIC0gMTAyNDsKICAgem9uZV9zaXplWzBdID0gMTAyNDsKICAgemhvbGVfc2l6ZVsxXSA9IHpob2xlX3NpemVbMF07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGU0NWJkNzMuLjIxYzM3M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC02LDIwICs2LDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAogI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi1zdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLQlzaG9ydCB0ZW1wOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JLyogUmVzZXQgdGhlIE1hY2hpbmUgdmlhIHBjWzNdIG9mIHRoZSBzZXF1b2lhIGNoaXBzZXQgKi8KLQlvdXR3KDB4MDksMHgyNCk7Ci0JdGVtcD1pbncoMHgyNik7Ci0JdGVtcCA9IHRlbXAgfCAoMTw8MykgfCAoMTw8MTApOwotCW91dHcoMHgwOSwweDI0KTsKLQlvdXR3KHRlbXAsMHgyNik7Ci0KLX0KKy8qIEZvdW5kIGluIGFyY2gvbWFjaC1zaGFyay9jb3JlLmMgKi8KK2V4dGVybiB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggMzcyNWUxNi4uMjJjY2FiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMTEsNyArMTEsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YyhpbnQgYykKIHsKLQlpbnQgdDsKKwl2b2xhdGlsZSBpbnQgdDsKIAogCVNFUklBTF9CQVNFWzBdID0gYzsKIAl0PTB4MTAwMDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCmluZGV4IDhiZDhkNmIuLmM5ZTMyZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCkBAIC0yMiwxMiArMjIsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjZGVmaW5lIExFRF9TVEFURV9FTkFCTEVECTEKICNkZWZpbmUgTEVEX1NUQVRFX0NMQUlNRUQJMgorCisjZGVmaW5lIFNFUVVPSUFfTEVEX0dSRUVOICAgICAgICgxPDw2KQorI2RlZmluZSBTRVFVT0lBX0xFRF9BTUJFUiAgICAgICAoMTw8NSkKKyNkZWZpbmUgU0VRVU9JQV9MRURfQkFDSyAgICAgICAgKDE8PDcpCisKIHN0YXRpYyBjaGFyIGxlZF9zdGF0ZTsKIHN0YXRpYyBzaG9ydCBod19sZWRfc3RhdGU7CiBzdGF0aWMgc2hvcnQgc2F2ZWRfc3RhdGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggMWM0MzQ5NC4uNTY1Nzc2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMzM1LDExICszMzUsMjUgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdmVyc2F0aWxlX2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJ2ZXJzYXRpbGUtaTJjIiwKLQkuaWQJCQk9IC0xLAorCS5pZAkJCT0gMCwKIAkubnVtX3Jlc291cmNlcwkJPSAxLAogCS5yZXNvdXJjZQkJPSAmdmVyc2F0aWxlX2kyY19yZXNvdXJjZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdmVyc2F0aWxlX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicnRjLWRzMTMwNyIsIDB4ZDAgPj4gMSksCisJCS50eXBlID0gImRzMTMzOCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZlcnNhdGlsZV9pMmNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCB2ZXJzYXRpbGVfaTJjX2JvYXJkX2luZm8sCisJCQkJICAgICAgIEFSUkFZX1NJWkUodmVyc2F0aWxlX2kyY19ib2FyZF9pbmZvKSk7Cit9CithcmNoX2luaXRjYWxsKHZlcnNhdGlsZV9pMmNfaW5pdCk7CisKICNkZWZpbmUgVkVSU0FUSUxFX1NZU01DSQkoX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX01DSV9PRkZTRVQpCiAKIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBjNTllNjEwLi44ZmZjMTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zNCw3ICszNCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJdTMyIHZhbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCmluZGV4IDQwZmY0MDguLmRlMjlkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKQEAgLTQzLDM1ICs0MywxNiBAQAogZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X3VhcnRzKHN0cnVjdCB3OTB4OTAwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIGV4dGVybiB2b2lkIHc5MHA5MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOwogZXh0ZXJuIHZvaWQgdzkwcDkxMF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfc2VyaWFsX2RldmljZTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHc5MHg5MDBfdGltZXI7CiAKLSNkZWZpbmUgVzkwWDkwMF9SRVMobmFtZSkJCQkJXAotc3RydWN0IHJlc291cmNlIHc5MHg5MDBfIyNuYW1lIyNfcmVzb3VyY2VbXSA9IHsJCVwKLQlbMF0gPSB7CQkJCQkJXAotCQkuc3RhcnQgPSBuYW1lIyNfUEEsCQkJXAotCQkuZW5kICAgPSBuYW1lIyNfUEEgKyAweDBmZiwJCVwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQlcCi0JfSwJCQkJCQlcCi0JWzFdID0gewkJCQkJCVwKLQkJLnN0YXJ0ID0gSVJRXyMjbmFtZSwJCQlcCi0JCS5lbmQgICA9IElSUV8jI25hbWUsCQkJXAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCVwKLQl9CQkJCQkJXAotfQotCi0jZGVmaW5lIFc5MFg5MDBfREVWSUNFKGRldm5hbWUsIHJlZ25hbWUsIGRldmlkLCBwbGF0ZGV2bmFtZSkJCVwKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkweDkwMF8jI2Rldm5hbWUgPSB7CQkJCVwKLQkubmFtZQkJPSBwbGF0ZGV2bmFtZSwJCQkJCVwKLQkuaWQJCT0gZGV2aWQsCQkJCQlcCi0JLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRSh3OTB4OTAwXyMjcmVnbmFtZSMjX3Jlc291cmNlKSwJXAotCS5yZXNvdXJjZSAJPSB3OTB4OTAwXyMjcmVnbmFtZSMjX3Jlc291cmNlLAkJCVwKLX0KLQotI2RlZmluZSBXOTBYOTAwX1VBUlRDRkcocG9ydCwgZmxhZywgdWMsIHVsYywgdWZjKQlcCi17CQkJCQkJCVwKLQkJLmh3cG9ydAk9IHBvcnQsCQkJCVwKLQkJLmZsYWdzCT0gZmxhZywJCQkJXAotCQkudWNvbgk9IHVjLAkJCQlcCi0JCS51bGNvbgk9IHVsYywJCQkJXAotCQkudWZjb24JPSB1ZmMsCQkJCVwKKyNkZWZpbmUgVzkwWDkwMF84MjUwUE9SVChuYW1lKQkJCQkJXAorewkJCQkJCQkJXAorCS5tZW1iYXNlCT0gbmFtZSMjX0JBLAkJCQlcCisJLm1hcGJhc2UJPSBuYW1lIyNfUEEsCQkJCVwKKwkuaXJxCQk9IElSUV8jI25hbWUsCQkJCVwKKwkudWFydGNsawk9IDExMzEzNjAwLAkJCQlcCisJLnJlZ3NoaWZ0CT0gMiwJCQkJCVwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggOTM3NTNmOS4uOTQwNjQwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yMSw3ICsyMSw3IEBACiB7CiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAljcHVfcmVzZXQoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMKaW5kZXggOWViYzkzZi4uNzI2ZmY2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zMiwyOCArMzMsNjcgQEAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY3B1LmgiCisvKnc5MHA5MTAgZXZiIG5vcmZsYXNoIGRyaXZlciBkYXRhICovCiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdzkwcDkxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworI2RlZmluZSBXOTBQOTEwX0ZMQVNIX0JBU0UJMHhBMDAwMDAwMAorI2RlZmluZSBXOTBQOTEwX0ZMQVNIX1NJWkUJMHg0MDAwMDAKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHc5MHA5MTBfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAxIGZvciBrZXJuZWwgKDk2MEspIiwKKwkJLnNpemUJPQkweEYwMDAwLAorCQkub2Zmc2V0CT0JMHgxMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAyIGZvciBpbWFnZSAoMU0pIiwKKwkJLnNpemUJPQkweDEwMDAwMCwKKwkJLm9mZnNldAk9CTB4MTAwMDAwLAorCX0sCisJeworCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDMgZm9yIHVzZXIgKDJNKSIsCisJCS5zaXplCT0JMHgyMDAwMDAsCisJCS5vZmZzZXQJPQkweDAwMjAwMDAwLAorCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdzkweDkwMF91YXJ0Y2ZnIHc5MHA5MTBfdWFydGNmZ3NbXSA9IHsKLQlXOTBYOTAwX1VBUlRDRkcoMCwgMCwgMCwgMCwgMCksCi0JVzkwWDkwMF9VQVJUQ0ZHKDEsIDAsIDAsIDAsIDApLAotCVc5MFg5MDBfVUFSVENGRygyLCAwLCAwLCAwLCAwKSwKLQlXOTBYOTAwX1VBUlRDRkcoMywgMCwgMCwgMCwgMCksCi0JVzkwWDkwMF9VQVJUQ0ZHKDQsIDAsIDAsIDAsIDApLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdzkwcDkxMF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPQkyLAorCS5wYXJ0cwkJPQl3OTBwOTEwX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0JQVJSQVlfU0laRSh3OTBwOTEwX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTBwOTEwX2ZsYXNoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0JVzkwUDkxMF9GTEFTSF9CQVNFLAorCQkuZW5kCT0JVzkwUDkxMF9GTEFTSF9CQVNFICsgVzkwUDkxMF9GTEFTSF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0JSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkwcDkxMF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0JInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPQkwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhID0gJnc5MHA5MTBfZmxhc2hfZGF0YSwKKwkJCX0sCisJLnJlc291cmNlCT0JdzkwcDkxMF9mbGFzaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPQlBUlJBWV9TSVpFKHc5MHA5MTBfZmxhc2hfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdzkwcDkxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogfTsKIAogLypIZXJlIHNob3VsZCBiZSB5b3VyIGV2YiByZXNvdXJzZSxzdWNoIGFzIExDRCovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3OTBwOTEwZXZiX2RldltdIF9faW5pdGRhdGEgPSB7CisJJnc5MHA5MTBfc2VyaWFsX2RldmljZSwKKwkmdzkwcDkxMF9mbGFzaF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9tYXBfaW8odm9pZCkKIHsKIAl3OTBwOTEwX21hcF9pbyh3OTBwOTEwX2lvZGVzYywgQVJSQVlfU0laRSh3OTBwOTEwX2lvZGVzYykpOwogCXc5MHA5MTBfaW5pdF9jbG9ja3MoMCk7Ci0JdzkwcDkxMF9pbml0X3VhcnRzKHc5MHA5MTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUodzkwcDkxMF91YXJ0Y2ZncykpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYwppbmRleCBhYTc4M2JjLi4yYmNiYWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzYsMTIgKzM3LDYgQEAKIAogI2luY2x1ZGUgImNwdS5oIgogCi0vKlc5MFA5MTAgaGFzIGZpdmUgdWFydHMqLwotCi0jZGVmaW5lIE1BWF9VQVJUX0NPVU5UIDUKLXN0YXRpYyBpbnQgdWFydF9jb3VudDsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1YXJ0X2RldnNbTUFYX1VBUlRfQ09VTlQtMV07Ci0KIC8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC01Myw0OCArNDgsMTkgQEAKIAkvKklPREVTQ19FTlQoTENEKSwqLwogfTsKIAotLypJbml0IHRoZSBkZXYgcmVzb3VyY2UqLworLyogSW5pdGlhbCBzZXJpYWwgcGxhdGZvcm0gZGF0YSAqLwogCi1zdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDApOwotc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQxKTsKLXN0YXRpYyBXOTBYOTAwX1JFUyhVQVJUMik7Ci1zdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDMpOwotc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQ0KTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MCwgVUFSVDAsIDAsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MSwgVUFSVDEsIDEsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MiwgVUFSVDIsIDIsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MywgVUFSVDMsIDMsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0NCwgVUFSVDQsIDQsICJ3OTB4OTAwLXVhcnQiKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVhcnRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnc5MHg5MDBfdWFydDAsCi0JJnc5MHg5MDBfdWFydDEsCi0JJnc5MHg5MDBfdWFydDIsCi0JJnc5MHg5MDBfdWFydDMsCi0JJnc5MHg5MDBfdWFydDQKK3N0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCB3OTBwOTEwX3VhcnRfZGF0YVtdID0geworCVc5MFg5MDBfODI1MFBPUlQoVUFSVDApLAogfTsKIAotLypJbml0IFc5MFA5MTAgdWFydCBkZXZpY2UqLwotCi12b2lkIF9faW5pdCB3OTBwOTEwX2luaXRfdWFydHMoc3RydWN0IHc5MHg5MDBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKLQlpbnQgdWFydCwgdWFydGRldjsKLQotCS8qQnkgbWluKCkgdG8ganVkZ2UgY291bnQgb2YgdWFydCBiZSB1c2VkIGluZGVlZCovCi0KLQl1YXJ0ZGV2ID0gQVJSQVlfU0laRSh1YXJ0X2RldmljZXMpOwotCW5vID0gbWluKHVhcnRkZXYsIG5vKTsKLQotCWZvciAodWFydCA9IDA7IHVhcnQgPCBubzsgdWFydCsrLCBjZmcrKykgewotCQlpZiAoY2ZnLT5od3BvcnQgIT0gdWFydCkKLQkJCXByaW50ayhLRVJOX0VSUiAidzkweDkwMF91YXJ0Y2ZnWyVkXSBlcnJvclxuIiwgdWFydCk7Ci0JCXBsYXRkZXYgPSB1YXJ0X2RldmljZXNbY2ZnLT5od3BvcnRdOwotCQl1YXJ0X2RldnNbdWFydF0gPSBwbGF0ZGV2OwotCQlwbGF0ZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGNmZzsKLQl9Ci0JdWFydF9jb3VudCA9IHVhcnQ7Ci19CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSB3OTBwOTEwX3VhcnRfZGF0YSwKKwl9LAorfTsKIAogLypJbml0IFc5MFA5MTAgZXZiIGlvKi8KIApAQCAtMTIyLDEzICs4OCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHc5MHg5MDBfYXJjaF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHc5MHA5MTBfaW5pdF9jcHUoKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXModWFydF9kZXZzLCB1YXJ0X2NvdW50KTsKLQorCXJldHVybiB3OTBwOTEwX2luaXRfY3B1KCk7CiB9CiBhcmNoX2luaXRjYWxsKHc5MHg5MDBfYXJjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGQ0OTBmMzcuLjIwOTc5NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTg2LDYgKzE4NiwyNCBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTkyNlQgcHJvY2Vzc29yLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KIAorIyBGQTUyNgorY29uZmlnIENQVV9GQTUyNgorCWJvb2wKKwlzZWxlY3QgQ1BVXzMydjQKKwlzZWxlY3QgQ1BVX0FCUlRfRVY0CisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCisJc2VsZWN0IENQVV9DQUNIRV9GQQorCXNlbGVjdCBDUFVfQ09QWV9GQSBpZiBNTVUKKwlzZWxlY3QgQ1BVX1RMQl9GQSBpZiBNTVUKKwloZWxwCisJICBUaGUgRkE1MjYgaXMgYSB2ZXJzaW9uIG9mIHRoZSBBUk12NCBjb21wYXRpYmxlIHByb2Nlc3NvciB3aXRoCisJICBCcmFuY2ggVGFyZ2V0IEJ1ZmZlciwgVW5pZmllZCBUTEIgYW5kIGNhY2hlIGxpbmUgc2l6ZSAxNi4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEZBNTI2IHByb2Nlc3Nvci4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKICMgQVJNOTQwVAogY29uZmlnIENQVV9BUk05NDBUCiAJYm9vbCAiU3VwcG9ydCBBUk05NDBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCkBAIC0zNDAsNiArMzU4LDE3IEBACiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJc2VsZWN0IElPXzM2CiAKKyMgTWFydmVsbCBQSjEgKE1vaGF3aykKK2NvbmZpZyBDUFVfTU9IQVdLCisJYm9vbAorCXNlbGVjdCBDUFVfMzJ2NQorCXNlbGVjdCBDUFVfQUJSVF9FVjVUCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCisJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCisKICMgRmVyb2Nlb24KIGNvbmZpZyBDUFVfRkVST0NFT04KIAlib29sCkBAIC00ODQsNiArNTEzLDkgQEAKIGNvbmZpZyBDUFVfQ0FDSEVfVklQVAogCWJvb2wKIAorY29uZmlnIENQVV9DQUNIRV9GQQorCWJvb2wKKwogaWYgTU1VCiAjIFRoZSBjb3B5LXBhZ2UgbW9kZWwKIGNvbmZpZyBDUFVfQ09QWV9WMwpAQCAtNDk4LDYgKzUzMCw5IEBACiBjb25maWcgQ1BVX0NPUFlfRkVST0NFT04KIAlib29sCiAKK2NvbmZpZyBDUFVfQ09QWV9GQQorCWJvb2wKKwogY29uZmlnIENQVV9DT1BZX1Y2CiAJYm9vbAogCkBAIC01MjgsNiArNTYzLDEzIEBACiAJaGVscAogCSAgRmVyb2Nlb24gVExCICh2NHdiaSB3aXRoIG5vbi1vdXRlci1jYWNoYWJsZSBwYWdlIHRhYmxlIHdhbGtzKS4KIAorY29uZmlnIENQVV9UTEJfRkEKKwlib29sCisJaGVscAorCSAgRmFyYWRheSBBUk0gRkE1MjYgYXJjaGl0ZWN0dXJlLCB1bmlmaWVkIFRMQiB3aXRoIHdyaXRlYmFjayBjYWNoZQorCSAgYW5kIGludmFsaWRhdGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZW50cnkuIEJyYW5jaCB0YXJnZXQgYnVmZmVyIGlzCisJICBhbHNvIHN1cHBvcnRlZC4KKwogY29uZmlnIENQVV9UTEJfVjYKIAlib29sCiAKQEAgLTU2OSw3ICs2MTEsNyBAQAogCiBjb25maWcgQVJNX1RIVU1CCiAJYm9vbCAiU3VwcG9ydCBUaHVtYiB1c2VyIGJpbmFyaWVzIgotCWRlcGVuZHMgb24gQ1BVX0FSTTcyMFQgfHwgQ1BVX0FSTTc0MFQgfHwgQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTk0MFQgfHwgQ1BVX0FSTTk0NkUgfHwgQ1BVX0FSTTEwMjAgfHwgQ1BVX0FSTTEwMjBFIHx8IENQVV9BUk0xMDIyIHx8IENQVV9BUk0xMDI2IHx8IENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX1Y2IHx8IENQVV9WNyB8fCBDUFVfRkVST0NFT04KKwlkZXBlbmRzIG9uIENQVV9BUk03MjBUIHx8IENQVV9BUk03NDBUIHx8IENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk05NDBUIHx8IENQVV9BUk05NDZFIHx8IENQVV9BUk0xMDIwIHx8IENQVV9BUk0xMDIwRSB8fCBDUFVfQVJNMTAyMiB8fCBDUFVfQVJNMTAyNiB8fCBDUFVfWFNDQUxFIHx8IENQVV9YU0MzIHx8IENQVV9NT0hBV0sgfHwgQ1BVX1Y2IHx8IENQVV9WNyB8fCBDUFVfRkVST0NFT04KIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIGtlcm5lbCBzdXBwb3J0IGZvciBydW5uaW5nIHVzZXIgc3BhY2UKQEAgLTYzOCw3ICs2ODAsNyBAQAogCiBjb25maWcgQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAlib29sICJGb3JjZSB3cml0ZSB0aHJvdWdoIEQtY2FjaGUiCi0JZGVwZW5kcyBvbiAoQ1BVX0FSTTc0MFQgfHwgQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTk0MFQgfHwgQ1BVX0FSTTk0NkUgfHwgQ1BVX0FSTTEwMjApICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKKwlkZXBlbmRzIG9uIChDUFVfQVJNNzQwVCB8fCBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNOTQwVCB8fCBDUFVfQVJNOTQ2RSB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfRkE1MjYpICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKIAlkZWZhdWx0IHkgaWYgQ1BVX0FSTTkyNVQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgZGF0YSBjYWNoZSBpbiB3cml0ZXRocm91Z2ggbW9kZS4gVW5sZXNzIHlvdQpAQCAtNjUzLDcgKzY5NSw3IEBACiAKIGNvbmZpZyBDUFVfQlBSRURJQ1RfRElTQUJMRQogCWJvb2wgIkRpc2FibGUgYnJhbmNoIHByZWRpY3Rpb24iCi0JZGVwZW5kcyBvbiBDUFVfQVJNMTAyMCB8fCBDUFVfVjYgfHwgQ1BVX1hTQzMgfHwgQ1BVX1Y3CisJZGVwZW5kcyBvbiBDUFVfQVJNMTAyMCB8fCBDUFVfVjYgfHwgQ1BVX01PSEFXSyB8fCBDUFVfWFNDMyB8fCBDUFVfVjcgfHwgQ1BVX0ZBNTI2CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIGJyYW5jaCBwcmVkaWN0aW9uLiAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNzA0LDcgKzc0Niw4IEBACiAKIGNvbmZpZyBDQUNIRV9MMlgwCiAJYm9vbCAiRW5hYmxlIHRoZSBMMngwIG91dGVyIGNhY2hlIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFJFQUxWSUVXX0VCX0E5TVAKKwlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgXAorCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IDQ4MGY3OGEuLjYzZTNmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiAKIG9iai0kKENPTkZJR19BTElHTk1FTlRfVFJBUCkJKz0gYWxpZ25tZW50Lm8KIG9iai0kKENPTkZJR19ESVNDT05USUdNRU0pCSs9IGRpc2NvbnRpZy5vCitvYmotJChDT05GSUdfSElHSE1FTSkJCSs9IGhpZ2htZW0ubwogCiBvYmotJChDT05GSUdfQ1BVX0FCUlRfTk9NTVUpCSs9IGFib3J0LW5vbW11Lm8KIG9iai0kKENPTkZJR19DUFVfQUJSVF9FVjQpCSs9IGFib3J0LWV2NC5vCkBAIC0zMiw2ICszMyw3IEBACiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCSs9IGNhY2hlLXY0d2Iubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNikJKz0gY2FjaGUtdjYubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNykJKz0gY2FjaGUtdjcubworb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9GQSkJKz0gY2FjaGUtZmEubwogCiBvYmotJChDT05GSUdfQ1BVX0NPUFlfVjMpCSs9IGNvcHlwYWdlLXYzLm8KIG9iai0kKENPTkZJR19DUFVfQ09QWV9WNFdUKQkrPSBjb3B5cGFnZS12NHd0Lm8KQEAgLTQxLDYgKzQzLDcgQEAKIG9iai0kKENPTkZJR19DUFVfU0ExMTAwKQkrPSBjb3B5cGFnZS12NG1jLm8KIG9iai0kKENPTkZJR19DUFVfWFNDQUxFKQkrPSBjb3B5cGFnZS14c2NhbGUubwogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0gY29weXBhZ2UteHNjMy5vCitvYmotJChDT05GSUdfQ1BVX0NPUFlfRkEpCSs9IGNvcHlwYWdlLWZhLm8KIAogb2JqLSQoQ09ORklHX0NQVV9UTEJfVjMpCSs9IHRsYi12My5vCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WNFdUKQkrPSB0bGItdjQubwpAQCAtNDksNiArNTIsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9UTEJfRkVST0NFT04pCSs9IHRsYi12NHdiaS5vCSMgcmV1c2UgdjR3YmkgVExCIGZ1bmN0aW9ucwogb2JqLSQoQ09ORklHX0NQVV9UTEJfVjYpCSs9IHRsYi12Ni5vCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WNykJKz0gdGxiLXY3Lm8KK29iai0kKENPTkZJR19DUFVfVExCX0ZBKQkrPSB0bGItZmEubwogCiBvYmotJChDT05GSUdfQ1BVX0FSTTYxMCkJKz0gcHJvYy1hcm02Xzcubwogb2JqLSQoQ09ORklHX0NQVV9BUk03MTApCSs9IHByb2MtYXJtNl83Lm8KQEAgLTYyLDYgKzY2LDcgQEAKIG9iai0kKENPTkZJR19DUFVfQVJNOTI2VCkJKz0gcHJvYy1hcm05MjYubwogb2JqLSQoQ09ORklHX0NQVV9BUk05NDBUKQkrPSBwcm9jLWFybTk0MC5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTk0NkUpCSs9IHByb2MtYXJtOTQ2Lm8KK29iai0kKENPTkZJR19DUFVfRkE1MjYpCQkrPSBwcm9jLWZhNTI2Lm8KIG9iai0kKENPTkZJR19DUFVfQVJNMTAyMCkJKz0gcHJvYy1hcm0xMDIwLm8KIG9iai0kKENPTkZJR19DUFVfQVJNMTAyMEUpCSs9IHByb2MtYXJtMTAyMGUubwogb2JqLSQoQ09ORklHX0NQVV9BUk0xMDIyKQkrPSBwcm9jLWFybTEwMjIubwpAQCAtNzAsNiArNzUsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TQTExMDApCSs9IHByb2Mtc2ExMTAwLm8KIG9iai0kKENPTkZJR19DUFVfWFNDQUxFKQkrPSBwcm9jLXhzY2FsZS5vCiBvYmotJChDT05GSUdfQ1BVX1hTQzMpCQkrPSBwcm9jLXhzYzMubworb2JqLSQoQ09ORklHX0NQVV9NT0hBV0spCSs9IHByb2MtbW9oYXdrLm8KIG9iai0kKENPTkZJR19DUFVfRkVST0NFT04pCSs9IHByb2MtZmVyb2Nlb24ubwogb2JqLSQoQ09ORklHX0NQVV9WNikJCSs9IHByb2MtdjYubwogb2JqLSQoQ09ORklHX0NQVV9WNykJCSs9IHByb2MtdjcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYThmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRmFyYWRheSBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIEJhc2VkIG9uIGNhY2hlLXY0d2IuUzoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBSdXNzZWxsIGtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBQcm9jZXNzb3JzOiBGQTUyMCBGQTUyNiBGQTYyNgkKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICogVGhlIHNpemUgb2Ygb25lIGRhdGEgY2FjaGUgbGluZS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMTYKKworLyoKKyAqIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBkYXRhIGNhY2hlLgorICovCisjaWZkZWYgQ09ORklHX0FSQ0hfR0VNSU5JCisjZGVmaW5lIENBQ0hFX0RTSVpFCTgxOTIKKyNlbHNlCisjZGVmaW5lIENBQ0hFX0RTSVpFCTE2Mzg0IAorI2VuZGlmIAorCisvKiBGSVhNRTogcHV0IG9wdGltYWwgdmFsdWUgaGVyZS4gQ3VycmVudCBvbmUgaXMganVzdCBlc3RpbWF0aW9uICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkoQ0FDSEVfRFNJWkUgKiAyKQorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhciBhZGRyZXNzCisgKglzcGFjZS4KKyAqLworRU5UUlkoZmFfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkoZmFfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CWlwLCAjMAorCW1vdglyMiwgI1ZNX0VYRUMKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTQsIDAJCUAgY2xlYW4vaW52YWxpZGF0ZSBEIGNhY2hlCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZAorICoJYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlLCBwYWdlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIHBhZ2UgYWxpZ25lZCkKKyAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKGZhX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAkJQCB0b3RhbCBzaXplID49IGxpbWl0PworCWJocwlfX2ZsdXNoX3dob2xlX2NhY2hlCQlAIGZsdXNoIHdob2xlIEQgY2FjaGUKKworMToJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgbGluZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShmYV9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIGZhbGwgdGhyb3VnaCAqLworCisvKgorICoJY29oZXJlbnRfdXNlcl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZShrYWRkcikKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjaworICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCisgKgorICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICovCitFTlRSWShmYV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBsaW5lCisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2RtYV9pbnZfcmFuZ2UpCisJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQorCXRzdAlyMSwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwliaWMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTQsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIEQgZW50cnkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2RtYV9jbGVhbl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsZW5kKQorICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgorICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KKyAqLworRU5UUlkoZmFfZG1hX2ZsdXNoX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQlmYV9jYWNoZV9mbnMsICNvYmplY3QKK0VOVFJZKGZhX2NhY2hlX2ZucykKKwkubG9uZwlmYV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCWZhX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJZmFfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWZhX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwlmYV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmYV9kbWFfZmx1c2hfcmFuZ2UKKwkuc2l6ZQlmYV9jYWNoZV9mbnMsIC4gLSBmYV9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jCmluZGV4IDgwY2QyMDcuLmQ2ZGQ4MzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYwpAQCAtMTQsOCArMTQsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9jYWNoZS1mZXJvY2Vvbi1sMi5oPgotCisjaW5jbHVkZSAibW0uaCIKIAogLyoKICAqIExvdy1sZXZlbCBjYWNoZSBtYWludGVuYW5jZSBvcGVyYXRpb25zLgpAQCAtMzQsMTQgKzM4LDM2IEBACiAgKiBUaGUgcmFuZ2Ugb3BlcmF0aW9ucyByZXF1aXJlIHR3byBzdWNjZXNzaXZlIGNwMTUgd3JpdGVzLCBpbgogICogYmV0d2VlbiB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGJlIHByZWVtcHRlZC4KICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbDJfc3RhcnRfdmEodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCS8qCisJICogTGV0J3MgZG8gb3VyIG93biBmaXhtYXAgc3R1ZmYgaW4gYSBtaW5pbWFsIHdheSBoZXJlLgorCSAqIEJlY2F1c2UgcmFuZ2Ugb3BzIGNhbid0IGJlIGRvbmUgb24gcGh5c2ljYWwgYWRkcmVzc2VzLAorCSAqIHdlIHNpbXBseSBpbnN0YWxsIGEgdmlydHVhbCBtYXBwaW5nIGZvciBpdCBvbmx5IGZvciB0aGUKKwkgKiBUTEIgbG9va3VwIHRvIG9jY3VyLCBoZW5jZSBubyBuZWVkIHRvIGZsdXNoIHRoZSB1bnRvdWNoZWQKKwkgKiBtZW1vcnkgbWFwcGluZy4gIFRoaXMgaXMgcHJvdGVjdGVkIHdpdGggdGhlIGRpc2FibGluZyBvZgorCSAqIGludGVycnVwdHMgYnkgdGhlIGNhbGxlci4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGlkeCA9IEtNX0wyX0NBQ0hFICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CisJc2V0X3B0ZV9leHQoVE9QX1BURSh2YWRkciksIHBmbl9wdGUocGFkZHIgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpLCAwKTsKKwlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmFkZHIpOworCXJldHVybiB2YWRkciArIChwYWRkciAmIH5QQUdFX01BU0spOworI2Vsc2UKKwlyZXR1cm4gX19waHlzX3RvX3ZpcnQocGFkZHIpOworI2VuZGlmCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsMl9jbGVhbl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzksIDMiIDogOiAiciIgKGFkZHIpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX212YV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMl9jbGVhbl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFfc3RhcnQsIHZhX2VuZCwgZmxhZ3M7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSAnc3RhcnQnIGFuZCAnZW5kJyByZWZlcmVuY2UgdGhlIHNhbWUgcGFnZSwgYXMKQEAgLTUxLDE3ICs3NywxNCBAQAogCUJVR19PTigoc3RhcnQgXiBlbmQpID4+IFBBR0VfU0hJRlQpOwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2YV9zdGFydCA9IGwyX3N0YXJ0X3ZhKHN0YXJ0KTsKKwl2YV9lbmQgPSB2YV9zdGFydCArIChlbmQgLSBzdGFydCk7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzksIDRcblx0IgogCQkibWNyIHAxNSwgMSwgJTEsIGMxNSwgYzksIDUiCi0JCTogOiAiciIgKHN0YXJ0KSwgInIiIChlbmQpKTsKKwkJOiA6ICJyIiAodmFfc3RhcnQpLCAiciIgKHZhX2VuZCkpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMl9jbGVhbl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlsMl9jbGVhbl9tdmFfcmFuZ2UoX19waHlzX3RvX3ZpcnQoc3RhcnQpLCBfX3BoeXNfdG9fdmlydChlbmQpKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX2ludl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzEwLCAzIiA6IDogInIiIChhZGRyKSk7CkBAIC03Miw5ICs5NSw5IEBACiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzExLCAzIiA6IDogInIiIChhZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMl9pbnZfbXZhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB2b2lkIGwyX2ludl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFfc3RhcnQsIHZhX2VuZCwgZmxhZ3M7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSAnc3RhcnQnIGFuZCAnZW5kJyByZWZlcmVuY2UgdGhlIHNhbWUgcGFnZSwgYXMKQEAgLTg0LDE3ICsxMDcsMTQgQEAKIAlCVUdfT04oKHN0YXJ0IF4gZW5kKSA+PiBQQUdFX1NISUZUKTsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdmFfc3RhcnQgPSBsMl9zdGFydF92YShzdGFydCk7CisJdmFfZW5kID0gdmFfc3RhcnQgKyAoZW5kIC0gc3RhcnQpOwogCV9fYXNtX18oIm1jciBwMTUsIDEsICUwLCBjMTUsIGMxMSwgNFxuXHQiCiAJCSJtY3IgcDE1LCAxLCAlMSwgYzE1LCBjMTEsIDUiCi0JCTogOiAiciIgKHN0YXJ0KSwgInIiIChlbmQpKTsKKwkJOiA6ICJyIiAodmFfc3RhcnQpLCAiciIgKHZhX2VuZCkpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMl9pbnZfcGFfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JbDJfaW52X212YV9yYW5nZShfX3BoeXNfdG9fdmlydChzdGFydCksIF9fcGh5c190b192aXJ0KGVuZCkpOwotfQotCiAKIC8qCiAgKiBMaW51eCBwcmltaXRpdmVzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUteHNjM2wyLmMgYi9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYwppbmRleCA0NjRkZTg5Li41ZDE4MGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYwpAQCAtMTcsMTIgKzE3LDE0IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlICJtbS5oIgogCiAjZGVmaW5lIENSX0wyCSgxIDw8IDI2KQogCkBAIC00NywyMSArNDksMTEgQEAKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzcsIGMxMSwgMSIgOiA6ICJyIiAoYWRkcikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgeHNjM19sMl9jbGVhbl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JeHNjM19sMl9jbGVhbl9tdmEoX19waHlzX3RvX3ZpcnQoYWRkcikpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgeHNjM19sMl9pbnZfbXZhKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzcsIGM3LCAxIiA6IDogInIiIChhZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4c2MzX2wyX2ludl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JeHNjM19sMl9pbnZfbXZhKF9fcGh5c190b192aXJ0KGFkZHIpKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHhzYzNfbDJfaW52X2FsbCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbDJjdHlwZSwgc2V0X3dheTsKQEAgLTc5LDUwICs3MSwxMDMgQEAKIAlkc2IoKTsKIH0KIAorI2lmZGVmIENPTkZJR19ISUdITUVNCisjZGVmaW5lIGwyX21hcF9zYXZlX2ZsYWdzKHgpCQlyYXdfbG9jYWxfc2F2ZV9mbGFncyh4KQorI2RlZmluZSBsMl9tYXBfcmVzdG9yZV9mbGFncyh4KQkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKHgpCisjZWxzZQorI2RlZmluZSBsMl9tYXBfc2F2ZV9mbGFncyh4KQkJKCh4KSA9IDApCisjZGVmaW5lIGwyX21hcF9yZXN0b3JlX2ZsYWdzKHgpCQkoKHZvaWQpKHgpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsMl9tYXBfdmEodW5zaWduZWQgbG9uZyBwYSwgdW5zaWduZWQgbG9uZyBwcmV2X3ZhLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwl1bnNpZ25lZCBsb25nIHZhID0gcHJldl92YSAmIFBBR0VfTUFTSzsKKwl1bnNpZ25lZCBsb25nIHBhX29mZnNldCA9IHBhIDw8ICgzMiAtIFBBR0VfU0hJRlQpOworCWlmICh1bmxpa2VseShwYV9vZmZzZXQgPCAocHJldl92YSA8PCAoMzIgLSBQQUdFX1NISUZUKSkpKSB7CisJCS8qCisJCSAqIFN3aXRjaGluZyB0byBhIG5ldyBwYWdlLiAgQmVjYXVzZSBjYWNoZSBvcHMgYXJlCisJCSAqIHVzaW5nIHZpcnR1YWwgYWRkcmVzc2VzIG9ubHksIHdlIG11c3QgcHV0IGEgbWFwcGluZworCQkgKiBpbiBwbGFjZSBmb3IgaXQuICBXZSBhbHNvIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhCisJCSAqIHNob3J0IHdoaWxlIGFuZCBkaXNhYmxlIHRoZW0gYWdhaW4gdG8gcHJvdGVjdCB0aGlzCisJCSAqIG1hcHBpbmcuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIGlkeDsKKwkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJaWR4ID0gS01fTDJfQ0FDSEUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOworCQl2YSA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MgfCBQU1JfSV9CSVQpOworCQlzZXRfcHRlX2V4dChUT1BfUFRFKHZhKSwgcGZuX3B0ZShwYSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCksIDApOworCQlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmEpOworCX0KKwlyZXR1cm4gdmEgKyAocGFfb2Zmc2V0ID4+ICgzMiAtIFBBR0VfU0hJRlQpKTsKKyNlbHNlCisJcmV0dXJuIF9fcGh5c190b192aXJ0KHBhKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCB4c2MzX2wyX2ludl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBmbGFnczsKKwogCWlmIChzdGFydCA9PSAwICYmIGVuZCA9PSAtMXVsKSB7CiAJCXhzYzNfbDJfaW52X2FsbCgpOwogCQlyZXR1cm47CiAJfQogCisJdmFkZHIgPSAtMTsgIC8qIHRvIGZvcmNlIHRoZSBmaXJzdCBtYXBwaW5nICovCisJbDJfbWFwX3NhdmVfZmxhZ3MoZmxhZ3MpOworCiAJLyoKIAkgKiBDbGVhbiBhbmQgaW52YWxpZGF0ZSBwYXJ0aWFsIGZpcnN0IGNhY2hlIGxpbmUuCiAJICovCiAJaWYgKHN0YXJ0ICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7Ci0JCXhzYzNfbDJfY2xlYW5fcGEoc3RhcnQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKLQkJeHNjM19sMl9pbnZfcGEoc3RhcnQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpLCB2YWRkciwgZmxhZ3MpOworCQl4c2MzX2wyX2NsZWFuX212YSh2YWRkcik7CisJCXhzYzNfbDJfaW52X212YSh2YWRkcik7CiAJCXN0YXJ0ID0gKHN0YXJ0IHwgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSArIDE7CiAJfQogCiAJLyoKLQkgKiBDbGVhbiBhbmQgaW52YWxpZGF0ZSBwYXJ0aWFsIGxhc3QgY2FjaGUgbGluZS4KLQkgKi8KLQlpZiAoc3RhcnQgPCBlbmQgJiYgKGVuZCAmIChDQUNIRV9MSU5FX1NJWkUgLSAxKSkpIHsKLQkJeHNjM19sMl9jbGVhbl9wYShlbmQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKLQkJeHNjM19sMl9pbnZfcGEoZW5kICYgfihDQUNIRV9MSU5FX1NJWkUgLSAxKSk7Ci0JCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCX0KLQotCS8qCiAJICogSW52YWxpZGF0ZSBhbGwgZnVsbCBjYWNoZSBsaW5lcyBiZXR3ZWVuICdzdGFydCcgYW5kICdlbmQnLgogCSAqLwotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQl4c2MzX2wyX2ludl9wYShzdGFydCk7CisJd2hpbGUgKHN0YXJ0IDwgKGVuZCAmIH4oQ0FDSEVfTElORV9TSVpFIC0gMSkpKSB7CisJCXZhZGRyID0gbDJfbWFwX3ZhKHN0YXJ0LCB2YWRkciwgZmxhZ3MpOworCQl4c2MzX2wyX2ludl9tdmEodmFkZHIpOwogCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJfQogCisJLyoKKwkgKiBDbGVhbiBhbmQgaW52YWxpZGF0ZSBwYXJ0aWFsIGxhc3QgY2FjaGUgbGluZS4KKwkgKi8KKwlpZiAoc3RhcnQgPCBlbmQpIHsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQsIHZhZGRyLCBmbGFncyk7CisJCXhzYzNfbDJfY2xlYW5fbXZhKHZhZGRyKTsKKwkJeHNjM19sMl9pbnZfbXZhKHZhZGRyKTsKKwl9CisKKwlsMl9tYXBfcmVzdG9yZV9mbGFncyhmbGFncyk7CisKIAlkc2IoKTsKIH0KIAogc3RhdGljIHZvaWQgeHNjM19sMl9jbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBmbGFnczsKKworCXZhZGRyID0gLTE7ICAvKiB0byBmb3JjZSB0aGUgZmlyc3QgbWFwcGluZyAqLworCWwyX21hcF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwogCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCXhzYzNfbDJfY2xlYW5fcGEoc3RhcnQpOworCQl2YWRkciA9IGwyX21hcF92YShzdGFydCwgdmFkZHIsIGZsYWdzKTsKKwkJeHNjM19sMl9jbGVhbl9tdmEodmFkZHIpOwogCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJfQogCisJbDJfbWFwX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCiAJZHNiKCk7CiB9CiAKQEAgLTE0OCwxOCArMTkzLDI2IEBACiAKIHN0YXRpYyB2b2lkIHhzYzNfbDJfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJdW5zaWduZWQgbG9uZyB2YWRkciwgZmxhZ3M7CisKIAlpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gLTF1bCkgewogCQl4c2MzX2wyX2ZsdXNoX2FsbCgpOwogCQlyZXR1cm47CiAJfQogCisJdmFkZHIgPSAtMTsgIC8qIHRvIGZvcmNlIHRoZSBmaXJzdCBtYXBwaW5nICovCisJbDJfbWFwX3NhdmVfZmxhZ3MoZmxhZ3MpOworCiAJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJeHNjM19sMl9jbGVhbl9wYShzdGFydCk7Ci0JCXhzYzNfbDJfaW52X3BhKHN0YXJ0KTsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQsIHZhZGRyLCBmbGFncyk7CisJCXhzYzNfbDJfY2xlYW5fbXZhKHZhZGRyKTsKKwkJeHNjM19sMl9pbnZfbXZhKHZhZGRyKTsKIAkJc3RhcnQgKz0gQ0FDSEVfTElORV9TSVpFOwogCX0KIAorCWwyX21hcF9yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwogCWRzYigpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mYS5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE2MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmEuYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jb3B5cGFnZS1mYS5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBGYXJhZGF5IENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogQmFzZWQgb24gY29weXBhZ2UtdjR3Yi5TOgorICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorCisvKgorICogRmFyYWRheSBvcHRpbWlzZWQgY29weV91c2VyX3BhZ2UKKyAqLworc3RhdGljIHZvaWQgX19uYWtlZAorZmFfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKK3sKKwlhc20oIlwKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQCAyXG5cCisJbW92CXIyLCAlMAkJCQlAIDFcblwKKzE6CWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJcjAsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIDEgICBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmVcblwKKwlhZGQJcjAsIHIwLCAjMTYJCQlAIDFcblwKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCXN0bWlhCXIwLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCAxICAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzE2CQkJQCAxXG5cCisJc3VicwlyMiwgcjIsICMxCQkJQCAxXG5cCisJYm5lCTFiCQkJCUAgMVxuXAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzEwLCA0CQlAIDEgICBkcmFpbiBXQlxuXAorCWxkbWZkCXNwISwge3I0LCBwY30JCQlAIDMiCisJOgorCTogIkkiIChQQUdFX1NJWkUgLyAzMikpOworfQorCit2b2lkIGZhX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqa3RvLCAqa2Zyb207CisKKwlrdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjApOworCWtmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjEpOworCWZhX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOworCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOworfQorCisvKgorICogRmFyYWRheSBvcHRpbWlzZWQgY2xlYXJfdXNlcl9wYWdlCisgKgorICogU2FtZSBzdG9yeSBhcyBhYm92ZS4KKyAqLwordm9pZCBmYV9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKnB0ciwgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWFzbSB2b2xhdGlsZSgiXAorCW1vdglyMSwgJTIJCQkJQCAxXG5cCisJbW92CXIyLCAjMAkJCQlAIDFcblwKKwltb3YJcjMsICMwCQkJCUAgMVxuXAorCW1vdglpcCwgIzAJCQkJQCAxXG5cCisJbW92CWxyLCAjMAkJCQlAIDFcblwKKzE6CXN0bWlhCSUwLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwltY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMQkJQCAxICAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCSUwLCAlMCwgIzE2CQkJQCAxXG5cCisJc3RtaWEJJTAsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAxCQlAIDEgICBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmVcblwKKwlhZGQJJTAsICUwLCAjMTYJCQlAIDFcblwKKwlzdWJzCXIxLCByMSwgIzEJCQlAIDFcblwKKwlibmUJMWIJCQkJQCAxXG5cCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgMSAgIGRyYWluIFdCIgorCTogIj1yIiAocHRyKQorCTogIjAiIChrYWRkciksICJJIiAoUEFHRV9TSVpFIC8gMzIpCisJOiAicjEiLCAicjIiLCAicjMiLCAiaXAiLCAibHIiKTsKKwlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Cit9CisKK3N0cnVjdCBjcHVfdXNlcl9mbnMgZmFfdXNlcl9mbnMgX19pbml0ZGF0YSA9IHsKKwkuY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UgPSBmYV9jbGVhcl91c2VyX2hpZ2hwYWdlLAorCS5jcHVfY29weV91c2VyX2hpZ2hwYWdlCT0gZmFfY29weV91c2VyX2hpZ2hwYWdlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGYxZWY1NjEuLjUxMGMxNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtNTE3LDYgKzUxOCw3NCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfY2FjaGVfbWFpbnQpOwogCitzdGF0aWMgdm9pZCBkbWFfY2FjaGVfbWFpbnRfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCXZvaWQgKnZhZGRyOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJdm9pZCAoKmlubmVyX29wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisJdm9pZCAoKm91dGVyX29wKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CQkvKiBpbnZhbGlkYXRlIG9ubHkgKi8KKwkJaW5uZXJfb3AgPSBkbWFjX2ludl9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9pbnZfcmFuZ2U7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToJCS8qIHdyaXRlYmFjayBvbmx5ICovCisJCWlubmVyX29wID0gZG1hY19jbGVhbl9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9jbGVhbl9yYW5nZTsKKwkJYnJlYWs7CisJY2FzZSBETUFfQklESVJFQ1RJT05BTDoJCS8qIHdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSAqLworCQlpbm5lcl9vcCA9IGRtYWNfZmx1c2hfcmFuZ2U7CisJCW91dGVyX29wID0gb3V0ZXJfZmx1c2hfcmFuZ2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJdmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisJCWlubmVyX29wKHZhZGRyLCB2YWRkciArIHNpemUpOworCX0gZWxzZSB7CisJCXZhZGRyID0ga21hcF9oaWdoX2dldChwYWdlKTsKKwkJaWYgKHZhZGRyKSB7CisJCQl2YWRkciArPSBvZmZzZXQ7CisJCQlpbm5lcl9vcCh2YWRkciwgdmFkZHIgKyBzaXplKTsKKwkJCWt1bm1hcF9oaWdoKHBhZ2UpOworCQl9CisJfQorCisJcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJb3V0ZXJfb3AocGFkZHIsIHBhZGRyICsgc2l6ZSk7Cit9CisKK3ZvaWQgZG1hX2NhY2hlX21haW50X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3sKKwkvKgorCSAqIEEgc2luZ2xlIHNnIGVudHJ5IG1heSByZWZlciB0byBtdWx0aXBsZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKKwkgKiBwYWdlcy4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nlc3MgaGlnaG1lbSBwYWdlcyBpbmRpdmlkdWFsbHkuCisJICogSWYgaGlnaG1lbSBpcyBub3QgY29uZmlndXJlZCB0aGVuIHRoZSBidWxrIG9mIHRoaXMgbG9vcCBnZXRzCisJICogb3B0aW1pemVkIG91dC4KKwkgKi8KKwlzaXplX3QgbGVmdCA9IHNpemU7CisJZG8geworCQlzaXplX3QgbGVuID0gbGVmdDsKKwkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpICYmIGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSkgeworCQkJaWYgKG9mZnNldCA+PSBQQUdFX1NJWkUpIHsKKwkJCQlwYWdlICs9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCQkJfQorCQkJbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQl9CisJCWRtYV9jYWNoZV9tYWludF9jb250aWd1b3VzKHBhZ2UsIG9mZnNldCwgbGVuLCBkaXIpOworCQlvZmZzZXQgPSAwOworCQlwYWdlKys7CisJCWxlZnQgLT0gbGVuOworCX0gd2hpbGUgKGxlZnQpOworfQorRVhQT1JUX1NZTUJPTChkbWFfY2FjaGVfbWFpbnRfcGFnZSk7CisKIC8qKgogICogZG1hX21hcF9zZyAtIG1hcCBhIHNldCBvZiBTRyBidWZmZXJzIGZvciBzdHJlYW1pbmcgbW9kZSBETUEKICAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcwpAQCAtNjE0LDcgKzY4Myw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJCWRtYV9jYWNoZV9tYWludChzZ192aXJ0KHMpLCBzLT5sZW5ndGgsIGRpcik7CisJCQlkbWFfY2FjaGVfbWFpbnRfcGFnZShzZ19wYWdlKHMpLCBzLT5vZmZzZXQsCisJCQkJCSAgICAgcy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCAwZmE5YmYzLi40ZTI4MzQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLQlpZiAobWFwcGluZyAmJiAhbWFwcGluZ19tYXBwZWQobWFwcGluZykpCisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSAmJiBtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkKIAkJc2V0X2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9oaWdobWVtLmMgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0OTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIGFyY2gvYXJtL21tL2hpZ2htZW0uYyAtLSBBUk0gaGlnaG1lbSBzdXBwb3J0CisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDcmVhdGVkOglzZXB0ZW1iZXIgOCwgMjAwOAorICogQ29weXJpZ2h0OglNYXJ2ZWxsIFNlbWljb25kdWN0b3JzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSAibW0uaCIKKwordm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwltaWdodF9zbGVlcCgpOworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CisJcmV0dXJuIGttYXBfaGlnaChwYWdlKTsKK30KK0VYUE9SVF9TWU1CT0woa21hcCk7CisKK3ZvaWQga3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwkJcmV0dXJuOworCWt1bm1hcF9oaWdoKHBhZ2UpOworfQorRVhQT1JUX1NZTUJPTChrdW5tYXApOworCit2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCS8qCisJICogV2l0aCBkZWJ1Z2dpbmcgZW5hYmxlZCwga3VubWFwX2F0b21pYyBmb3JjZXMgdGhhdCBlbnRyeSB0byAwLgorCSAqIE1ha2Ugc3VyZSBpdCB3YXMgaW5kZWVkIHByb3Blcmx5IHVubWFwcGVkLgorCSAqLworCUJVR19PTighcHRlX25vbmUoKihUT1BfUFRFKHZhZGRyKSkpKTsKKyNlbmRpZgorCXNldF9wdGVfZXh0KFRPUF9QVEUodmFkZHIpLCBta19wdGUocGFnZSwga21hcF9wcm90KSwgMCk7CisJLyoKKwkgKiBXaGVuIGRlYnVnZ2luZyBpcyBvZmYsIGt1bm1hcF9hdG9taWMgbGVhdmVzIHRoZSBwcmV2aW91cyBtYXBwaW5nCisJICogaW4gcGxhY2UsIHNvIHRoaXMgVExCIGZsdXNoIGVuc3VyZXMgdGhlIFRMQiBpcyB1cGRhdGVkIHdpdGggdGhlCisJICogbmV3IG1hcHBpbmcuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZhZGRyKTsKKworCXJldHVybiAodm9pZCAqKXZhZGRyOworfQorRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pYyk7CisKK3ZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykga3ZhZGRyICYgUEFHRV9NQVNLOworCXVuc2lnbmVkIGludCBpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChrdmFkZHIgPj0gKHZvaWQgKilGSVhBRERSX1NUQVJUKSB7CisJCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZSgodm9pZCAqKXZhZGRyKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCQlCVUdfT04odmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCkpOworCQlzZXRfcHRlX2V4dChUT1BfUFRFKHZhZGRyKSwgX19wdGUoMCksIDApOworCQlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmFkZHIpOworI2Vsc2UKKwkJKHZvaWQpIGlkeDsgIC8qIHRvIGtpbGwgYSB3YXJuaW5nICovCisjZW5kaWYKKwl9CisJcGFnZWZhdWx0X2VuYWJsZSgpOworfQorRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKKwordm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCUJVR19PTighcHRlX25vbmUoKihUT1BfUFRFKHZhZGRyKSkpKTsKKyNlbmRpZgorCXNldF9wdGVfZXh0KFRPUF9QVEUodmFkZHIpLCBwZm5fcHRlKHBmbiwga21hcF9wcm90KSwgMCk7CisJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZhZGRyKTsKKworCXJldHVybiAodm9pZCAqKXZhZGRyOworfQorCitzdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZShjb25zdCB2b2lkICpwdHIpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKKwlwdGVfdCAqcHRlOworCisJaWYgKHZhZGRyIDwgRklYQUREUl9TVEFSVCkKKwkJcmV0dXJuIHZpcnRfdG9fcGFnZShwdHIpOworCisJcHRlID0gVE9QX1BURSh2YWRkcik7CisJcmV0dXJuIHB0ZV9wYWdlKCpwdGUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDgwZmQzYjYuLjgyNzc4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgpAQCAtNDg1LDcgKzQ4Niw3IEBACiAJaW50IGksIG5vZGU7CiAKICNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCW1heF9tYXBuciAgID0gdmlydF90b19wYWdlKGhpZ2hfbWVtb3J5KSAtIG1lbV9tYXA7CisJbWF4X21hcG5yICAgPSBwZm5fdG9fcGFnZShtYXhfcGZuICsgUEhZU19QRk5fT0ZGU0VUKSAtIG1lbV9tYXA7CiAjZW5kaWYKIAogCS8qIHRoaXMgd2lsbCBwdXQgYWxsIHVudXNlZCBsb3cgbWVtb3J5IG9udG8gdGhlIGZyZWVsaXN0cyAqLwpAQCAtNTA0LDYgKzUwNSwxOSBAQAogCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoc3dhcHBlcl9wZ19kaXIpKSwgTlVMTCk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ISUdITUVNCisJLyogc2V0IGhpZ2htZW0gcGFnZSBmcmVlICovCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQlmb3JfZWFjaF9ub2RlYmFuayAoaSwgJm1lbWluZm8sIG5vZGUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBiYW5rX3Bmbl9zdGFydCgmbWVtaW5mby5iYW5rW2ldKTsKKwkJCXVuc2lnbmVkIGxvbmcgZW5kID0gYmFua19wZm5fZW5kKCZtZW1pbmZvLmJhbmtbaV0pOworCQkJaWYgKHN0YXJ0ID49IG1heF9sb3dfcGZuICsgUEhZU19QRk5fT0ZGU0VUKQorCQkJCXRvdGFsaGlnaF9wYWdlcyArPSBmcmVlX2FyZWEoc3RhcnQsIGVuZCwgTlVMTCk7CisJCX0KKwl9CisJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOworI2VuZGlmCisKIAkvKgogCSAqIFNpbmNlIG91ciBtZW1vcnkgbWF5IG5vdCBiZSBjb250aWd1b3VzLCBjYWxjdWxhdGUgdGhlCiAJICogcmVhbCBudW1iZXIgb2YgcGFnZXMgd2UgaGF2ZSBpbiB0aGlzIHN5c3RlbQpAQCAtNTIxLDkgKzUzNSwxMCBAQAogCWluaXRzaXplID0gX19pbml0X2VuZCAtIF9faW5pdF9iZWdpbjsKIAogCXByaW50ayhLRVJOX05PVElDRSAiTWVtb3J5OiAlbHVLQiBhdmFpbGFibGUgKCVkSyBjb2RlLCAiCi0JCSIlZEsgZGF0YSwgJWRLIGluaXQpXG4iLAorCQkiJWRLIGRhdGEsICVkSyBpbml0LCAlbHVLIGhpZ2htZW0pXG4iLAogCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKLQkJY29kZXNpemUgPj4gMTAsIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCk7CisJCWNvZGVzaXplID4+IDEwLCBkYXRhc2l6ZSA+PiAxMCwgaW5pdHNpemUgPj4gMTAsCisJCSh1bnNpZ25lZCBsb25nKSAodG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSkpOwogCiAJaWYgKFBBR0VfU0laRSA+PSAxNjM4NCAmJiBudW1fcGh5c3BhZ2VzIDw9IDEyOCkgewogCQlleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tLmggYi9hcmNoL2FybS9tbS9tbS5oCmluZGV4IDk1YmJlMTEuLmM0ZjZmMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLmgKKysrIGIvYXJjaC9hcm0vbW0vbW0uaApAQCAtMSw3ICsxLDYgQEAKLS8qIHRoZSB1cHBlci1tb3N0IHBhZ2UgdGFibGUgcG9pbnRlciAqLwotCiAjaWZkZWYgQ09ORklHX01NVQogCisvKiB0aGUgdXBwZXItbW9zdCBwYWdlIHRhYmxlIHBvaW50ZXIgKi8KIGV4dGVybiBwbWRfdCAqdG9wX3BtZDsKIAogI2RlZmluZSBUT1BfUFRFKHgpCXB0ZV9vZmZzZXRfa2VybmVsKHRvcF9wbWQsIHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IGQ0ZDA4MmMuLmI0MzhmYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC0xOCw5ICsxOCwxMSBAQAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9oaWdobWVtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0yNDMsNiArMjQ1LDEwIEBACiAJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNULAogCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKIAl9LAorCVtNVF9NRU1PUllfTk9OQ0FDSEVEXSA9IHsKKwkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSwKKwkJLmRvbWFpbiAgICA9IERPTUFJTl9LRVJORUwsCisJfSwKIH07CiAKIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqZ2V0X21lbV90eXBlKHVuc2lnbmVkIGludCB0eXBlKQpAQCAtNDA2LDkgKzQxMiwyOCBAQAogCQlrZXJuX3BncHJvdCB8PSBMX1BURV9TSEFSRUQ7CiAJCXZlY3NfcGdwcm90IHw9IExfUFRFX1NIQVJFRDsKIAkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX1M7CisJCW1lbV90eXBlc1tNVF9NRU1PUllfTk9OQ0FDSEVEXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfUzsKICNlbmRpZgogCX0KIAorCS8qCisJICogTm9uLWNhY2hlYWJsZSBOb3JtYWwgLSBpbnRlbmRlZCBmb3IgbWVtb3J5IGFyZWFzIHRoYXQgbXVzdAorCSAqIG5vdCBjYXVzZSBkaXJ0eSBjYWNoZSBsaW5lIHdyaXRlYmFja3Mgd2hlbiB1c2VkCisJICovCisJaWYgKGNwdV9hcmNoID49IENQVV9BUkNIX0FSTXY2KSB7CisJCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NyAmJiAoY3IgJiBDUl9UUkUpKSB7CisJCQkvKiBOb24tY2FjaGVhYmxlIE5vcm1hbCBpcyBYQ0IgPSAwMDEgKi8KKwkJCW1lbV90eXBlc1tNVF9NRU1PUllfTk9OQ0FDSEVEXS5wcm90X3NlY3QgfD0KKwkJCQlQTURfU0VDVF9CVUZGRVJFRDsKKwkJfSBlbHNlIHsKKwkJCS8qIEZvciBib3RoIEFSTXY2IGFuZCBub24tVEVYLXJlbWFwcGluZyBBUk12NyAqLworCQkJbWVtX3R5cGVzW01UX01FTU9SWV9OT05DQUNIRURdLnByb3Rfc2VjdCB8PQorCQkJCVBNRF9TRUNUX1RFWCgxKTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbV90eXBlc1tNVF9NRU1PUllfTk9OQ0FDSEVEXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQlVGRkVSQUJMRTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHYgPSBwZ3Byb3RfdmFsKHByb3RlY3Rpb25fbWFwW2ldKTsKIAkJcHJvdGVjdGlvbl9tYXBbaV0gPSBfX3BncHJvdCh2IHwgdXNlcl9wZ3Byb3QpOwpAQCAtNjc3LDYgKzcwMiwxMCBAQAogCQkJaWYgKG1lbWluZm8ubnJfYmFua3MgPj0gTlJfQkFOS1MpIHsKIAkJCQlwcmludGsoS0VSTl9DUklUICJOUl9CQU5LUyB0b28gbG93LCAiCiAJCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKKwkJCX0gZWxzZSBpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CisJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiSElHSE1FTSBpcyBub3QgeWV0IHN1cHBvcnRlZCAiCisJCQkJCQkgIndpdGggVklQVCBhbGlhc2luZyBjYWNoZSwgIgorCQkJCQkJICJpZ25vcmluZyBoaWdoIG1lbW9yeVxuIik7CiAJCQl9IGVsc2UgewogCQkJCW1lbW1vdmUoYmFuayArIDEsIGJhbmssCiAJCQkJCShtZW1pbmZvLm5yX2JhbmtzIC0gaSkgKiBzaXplb2YoKmJhbmspKTsKQEAgLTY5NCw3ICs3MjMsNyBAQAogCQkgKiB0aGUgdm1hbGxvYyBhcmVhLgogCQkgKi8KIAkJaWYgKF9fdmEoYmFuay0+c3RhcnQpID49IFZNQUxMT0NfTUlOIHx8Ci0JCSAgICBfX3ZhKGJhbmstPnN0YXJ0KSA8IFBBR0VfT0ZGU0VUKSB7CisJCSAgICBfX3ZhKGJhbmstPnN0YXJ0KSA8ICh2b2lkICopUEFHRV9PRkZTRVQpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiSWdub3JpbmcgUkFNIGF0ICUuOGx4LSUuOGx4ICIKIAkJCSAgICAgICAiKHZtYWxsb2MgcmVnaW9uIG92ZXJsYXApLlxuIiwKIAkJCSAgICAgICBiYW5rLT5zdGFydCwgYmFuay0+c3RhcnQgKyBiYW5rLT5zaXplIC0gMSk7CkBAIC04OTUsNiArOTI0LDE3IEBACiAJZmx1c2hfY2FjaGVfYWxsKCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBrbWFwX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCXBtZF90ICpwbWQgPSBwbWRfb2ZmX2soUEtNQVBfQkFTRSk7CisJcHRlX3QgKnB0ZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKDIgKiBQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpKTsKKwlCVUdfT04oIXBtZF9ub25lKCpwbWQpIHx8ICFwdGUpOworCV9fcG1kX3BvcHVsYXRlKHBtZCwgX19wYShwdGUpIHwgX1BBR0VfS0VSTkVMX1RBQkxFKTsKKwlwa21hcF9wYWdlX3RhYmxlID0gcHRlICsgUFRSU19QRVJfUFRFOworI2VuZGlmCit9CisKIC8qCiAgKiBwYWdpbmdfaW5pdCgpIHNldHMgdXAgdGhlIHBhZ2UgdGFibGVzLCBpbml0aWFsaXNlcyB0aGUgem9uZSBtZW1vcnkKICAqIG1hcHMsIGFuZCBzZXRzIHVwIHRoZSB6ZXJvIHBhZ2UsIGJhZCBwYWdlIGFuZCBiYWQgcGFnZSB0YWJsZXMuCkBAIC05MDgsNiArOTQ4LDcgQEAKIAlwcmVwYXJlX3BhZ2VfdGFibGUoKTsKIAlib290bWVtX2luaXQoKTsKIAlkZXZpY2VtYXBzX2luaXQobWRlc2MpOworCWttYXBfaW5pdCgpOwogCiAJdG9wX3BtZCA9IHBtZF9vZmZfaygweGZmZmYwMDAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YjhhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TOiBNTVUgZnVuY3Rpb25zIGZvciBGQTUyNgorICoKKyAqICBXcml0dGVuIGJ5IDogTHVrZSBMZWUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRmFyYWRheSBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqIFRoZXNlIGFyZSB0aGUgbG93IGxldmVsIGFzc2VtYmxlciBmb3IgcGVyZm9ybWluZyBjYWNoZSBhbmQgVExCCisgKiBmdW5jdGlvbnMgb24gdGhlIGZhNTI2LgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2h3Y2FwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKyNkZWZpbmUgQ0FDSEVfRExJTkVTSVpFCTE2CisKKwkudGV4dAorLyoKKyAqIGNwdV9mYTUyNl9wcm9jX2luaXQoKQorICovCitFTlRSWShjcHVfZmE1MjZfcHJvY19pbml0KQorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9mYTUyNl9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9mYTUyNl9wcm9jX2ZpbikKKwlzdG1mZAlzcCEsIHtscn0KKwltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCW1zcgljcHNyX2MsIGlwCisJYmwJZmFfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgxMDAwCQkJQCAuLi5pLi4uLi4uLi4uLi4uCisJYmljCXIwLCByMCwgIzB4MDAwZQkJCUAgLi4uLi4uLi4uLi4ud2NhLgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlub3AKKwlub3AKKwlsZG1mZAlzcCEsIHtwY30KKworLyoKKyAqIGNwdV9mYTUyNl9yZXNldChsb2MpCisgKgorICogUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIHN5c3RlbS4gIFB1dCB0aGUgQ1BVIGludG8gdGhlCisgKiBzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKiB0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICogbG9jOiBsb2NhdGlvbiB0byBqdW1wIHRvIGZvciBzb2Z0IHJlc2V0CisgKi8KKwkuYWxpZ24JNAorRU5UUlkoY3B1X2ZhNTI2X3Jlc2V0KQorLyogVE9ETzogVXNlIENQOCBpZiBwb3NzaWJsZS4uLiAqLworCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisjaWZkZWYgQ09ORklHX01NVQorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCisJYmljCWlwLCBpcCwgIzB4MTEwMAkJCUAgLi4uaS4uLnMuLi4uLi4uLgorCWJpYwlpcCwgaXAsICMweDA4MDAJCQlAIEJUQiBvZmYKKwltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwlub3AKKwlub3AKKwltb3YJcGMsIHIwCisKKy8qCisgKiBjcHVfZmE1MjZfZG9faWRsZSgpCisgKi8KKwkuYWxpZ24JNAorRU5UUlkoY3B1X2ZhNTI2X2RvX2lkbGUpCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAkJQCBXYWl0IGZvciBpbnRlcnJ1cHQKKwltb3YJcGMsIGxyCisKKworRU5UUlkoY3B1X2ZhNTI2X2RjYWNoZV9jbGVhbl9hcmVhKQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFX0RMSU5FU0laRQorCWJoaQkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBhZ2VUYWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIGNwdV9mYTUyNl9zd2l0Y2hfbW0ocGdkKQorICoKKyAqIFNldCB0aGUgdHJhbnNsYXRpb24gYmFzZSBwb2ludGVyIHRvIGJlIGFzIGRlc2NyaWJlZCBieSBwZ2QuCisgKgorICogcGdkOiBuZXcgcGFnZSB0YWJsZXMKKyAqLworCS5hbGlnbgk0CitFTlRSWShjcHVfZmE1MjZfc3dpdGNoX21tKQorI2lmZGVmIENPTkZJR19NTVUKKwltb3YJaXAsICMwCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKyNlbHNlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTQsIDAJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgd2hvbGUgRCBjYWNoZQorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCA2CQlAIGludmFsaWRhdGUgQlRCIHNpbmNlIG1tIGNoYW5nZWQKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkYXRhIHdyaXRlIGJhcnJpZXIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBVVExCCisjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfZmE1MjZfc2V0X3B0ZV9leHQocHRlcCwgcHRlLCBleHQpCisgKgorICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKKyAqLworCS5hbGlnbgk0CitFTlRSWShjcHVfZmE1MjZfc2V0X3B0ZV9leHQpCisjaWZkZWYgQ09ORklHX01NVQorCWFybXYzX3NldF9wdGVfZXh0CisJbW92CXIwLCByMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNlbmRpZgorCW1vdglwYywgbHIKKworCV9fSU5JVAorCisJLnR5cGUJX19mYTUyNl9zZXR1cCwgI2Z1bmN0aW9uCitfX2ZhNTI2X3NldHVwOgorCS8qIE9uIHJldHVybiBvZiB0aGlzIHJvdXRpbmUsIHIwIG11c3QgY2FycnkgY29ycmVjdCBmbGFncyBmb3IgQ0ZHIHJlZ2lzdGVyICovCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisjaWZkZWYgQ09ORklHX01NVQorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNQkJQCBpbnZhbGlkYXRlIElTY3JhdGNocGFkIFJBTQorCisJbW92CXIwLCAjMQorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzEsIDAJCUAgdHVybi1vbiBFQ1IKKworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CQlAIGludmFsaWRhdGUgQlRCIEFsbAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJCUAgcHJlZmV0Y2ggZmx1c2gKKworCW1vdglyMCwgIzB4MWYJCQlAIERvbWFpbnMgMCwgMSA9IG1hbmFnZXIsIDIgPSBjbGllbnQKKwltY3IJcDE1LCAwLCByMCwgYzMsIGMwCQlAIGxvYWQgZG9tYWluIGFjY2VzcyByZWdpc3RlcgorCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAorCWxkcglyNSwgZmE1MjZfY3IxX2NsZWFyCisJYmljCXIwLCByMCwgcjUKKwlsZHIJcjUsIGZhNTI2X2NyMV9zZXQKKwlvcnIJcjAsIHIwLCByNQorCW1vdglwYywgbHIKKwkuc2l6ZQlfX2ZhNTI2X3NldHVwLCAuIC0gX19mYTUyNl9zZXR1cAorCisJLyoKKwkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCisJICogLi4xMSAxMDAxIC4xMTEgMTEwMQorCSAqCisJICovCisJLnR5cGUJZmE1MjZfY3IxX2NsZWFyLCAjb2JqZWN0CisJLnR5cGUJZmE1MjZfY3IxX3NldCwgI29iamVjdAorZmE1MjZfY3IxX2NsZWFyOgorCS53b3JkCTB4M2YzZgorZmE1MjZfY3IxX3NldDoKKwkud29yZAkweDM5N0QKKworCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkudHlwZQlmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY0X2Vhcmx5X2Fib3J0CisJLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWNwdV9mYTUyNl9wcm9jX2luaXQKKwkud29yZAljcHVfZmE1MjZfcHJvY19maW4KKwkud29yZAljcHVfZmE1MjZfcmVzZXQKKwkud29yZCAgIGNwdV9mYTUyNl9kb19pZGxlCisJLndvcmQJY3B1X2ZhNTI2X2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X2ZhNTI2X3N3aXRjaF9tbQorCS53b3JkCWNwdV9mYTUyNl9zZXRfcHRlX2V4dAorCS5zaXplCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9mYTUyNl9uYW1lLCAjb2JqZWN0CitjcHVfZmE1MjZfbmFtZToKKwkuYXNjaXoJIkZBNTI2IgorCS5zaXplCWNwdV9mYTUyNl9uYW1lLCAuIC0gY3B1X2ZhNTI2X25hbWUKKworCS5hbGlnbgorCisJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJX19mYTUyNl9wcm9jX2luZm8sI29iamVjdAorX19mYTUyNl9wcm9jX2luZm86CisJLmxvbmcJMHg2NjAxNTI2MQorCS5sb25nCTB4ZmYwMWZmZjEKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9fZmE1MjZfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfSEFMRgorCS5sb25nCWNwdV9mYTUyNl9uYW1lCisJLmxvbmcJZmE1MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCWZhX3RsYl9mbnMKKwkubG9uZwlmYV91c2VyX2ZucworCS5sb25nCWZhX2NhY2hlX2ZucworCS5zaXplCV9fZmE1MjZfcHJvY19pbmZvLCAuIC0gX19mYTUyNl9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGY1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlM6IE1NVSBmdW5jdGlvbnMgZm9yIE1hcnZlbGwgUEoxIGNvcmUKKyAqCisgKiAgUEoxIChjb2RlbmFtZSBNb2hhd2spIGlzIGEgaHlicmlkIG9mIHRoZSB4c2NhbGUzIGFuZCBNYXJ2ZWxsJ3Mgb3duIGNvcmUuCisgKgorICogIEhlYXZpbHkgYmFzZWQgb24gcHJvYy1hcm05MjYuUyBhbmQgcHJvYy14c2MzLlMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9od2NhcC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWh3ZGVmLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBzaXplIG9mIGFuIGFyZWEgd2hpY2ggd2lsbCBiZSBmbHVzaGVkLiAgSWYgdGhlCisgKiBhcmVhIGlzIGxhcmdlciB0aGFuIHRoaXMsIHRoZW4gd2UgZmx1c2ggdGhlIHdob2xlIGNhY2hlLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkzMjc2OAorCisvKgorICogVGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgTDEgRCBjYWNoZS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMzIKKworLyoKKyAqIGNwdV9tb2hhd2tfcHJvY19pbml0KCkKKyAqLworRU5UUlkoY3B1X21vaGF3a19wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X21vaGF3a19wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9tb2hhd2tfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorCWJsCW1vaGF3a19mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDE4MDAJCQlAIC4uLml6Li4uLi4uLi4uLi4KKwliaWMJcjAsIHIwLCAjMHgwMDA2CQkJQCAuLi4uLi4uLi4uLi4uY2EuCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCWxkbWZkCXNwISwge3BjfQorCisvKgorICogY3B1X21vaGF3a19yZXNldChsb2MpCisgKgorICogUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIHN5c3RlbS4gIFB1dCB0aGUgQ1BVIGludG8gdGhlCisgKiBzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKiB0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICogbG9jOiBsb2NhdGlvbiB0byBqdW1wIHRvIGZvciBzb2Z0IHJlc2V0CisgKgorICogKHNhbWUgYXMgYXJtOTI2KQorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9tb2hhd2tfcmVzZXQpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlpcCwgaXAsICMweDAwMDcJCQlAIC4uLi4uLi4uLi4uLi5jYW0KKwliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCisJbWNyCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJbW92CXBjLCByMAorCisvKgorICogY3B1X21vaGF3a19kb19pZGxlKCkKKyAqCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19kb19pZGxlKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSBhbGwgY2FjaGUgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIKKyAqCWFkZHJlc3Mgc3BhY2UuCisgKi8KK0VOVFJZKG1vaGF3a19mbHVzaF91c2VyX2NhY2hlX2FsbCkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZmx1c2hfa2Vybl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuCisgKi8KK0VOVFJZKG1vaGF3a19mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKwltb3YJcjIsICNWTV9FWEVDCisJbW92CWlwLCAjMAorX19mbHVzaF93aG9sZV9jYWNoZToKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxNCwgMAkJQCBjbGVhbiAmIGludmFsaWRhdGUgYWxsIEQgY2FjaGUKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDAJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlCisgKglzcGVjaWZpZWQgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKQorICoJLSBlbmQJLSBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKQorICoJLSBmbGFncwktIHZtX2ZsYWdzIGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICoKKyAqIChzYW1lIGFzIGFybTkyNikKKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJndAlfX2ZsdXNoX3dob2xlX2NhY2hlCisxOgl0c3QJcjIsICNWTV9FWEVDCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydCwgZW5kLiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKG1vaGF3a19jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKgljb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LCBlbmQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyBhcm05MjYpCisgKi8KK0VOVFJZKG1vaGF3a19jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKi8KK0VOVFJZKG1vaGF3a19mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShtb2hhd2tfZG1hX2ludl9yYW5nZSkKKwl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJdHN0CXIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglDbGVhbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCisgKiAoc2FtZSBhcyB2NHdiKQorICovCitFTlRSWShtb2hhd2tfZG1hX2NsZWFuX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShtb2hhd2tfZG1hX2ZsdXNoX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKG1vaGF3a19jYWNoZV9mbnMpCisJLmxvbmcJbW9oYXdrX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJbW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJbW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwltb2hhd2tfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCW1vaGF3a19jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJbW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwltb2hhd2tfZG1hX2ludl9yYW5nZQorCS5sb25nCW1vaGF3a19kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwltb2hhd2tfZG1hX2ZsdXNoX3JhbmdlCisKK0VOVFJZKGNwdV9tb2hhd2tfZGNhY2hlX2NsZWFuX2FyZWEpCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFCisJYmhpCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfbW9oYXdrX3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9tb2hhd2tfc3dpdGNoX21tKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxNCwgMAkJQCBjbGVhbiAmIGludmFsaWRhdGUgYWxsIEQgY2FjaGUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJb3JyCXIwLCByMCwgIzB4MTgJCQlAIGNhY2hlIHRoZSBwYWdlIHRhYmxlIGluIEwyCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbW92CXBjLCBscgorCisvKgorICogY3B1X21vaGF3a19zZXRfcHRlX2V4dChwdGVwLCBwdGUsIGV4dCkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTUKK0VOVFJZKGNwdV9tb2hhd2tfc2V0X3B0ZV9leHQpCisJYXJtdjNfc2V0X3B0ZV9leHQKKwltb3YJcjAsIHIwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisJX19JTklUCisKKwkudHlwZQlfX21vaGF3a19zZXR1cCwgI2Z1bmN0aW9uCitfX21vaGF3a19zZXR1cDoKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMKKwlvcnIJcjQsIHI0LCAjMHgxOAkJCUAgY2FjaGUgdGhlIHBhZ2UgdGFibGUgaW4gTDIKKwltY3IJcDE1LCAwLCByNCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisKKwltb3YJcjAsICMwCQkJCUAgZG9uJ3QgYWxsb3cgQ1AgYWNjZXNzCisJbWNyCXAxNSwgMCwgcjAsIGMxNSwgYzEsIDAJCUAgd3JpdGUgQ1AgYWNjZXNzIHJlZ2lzdGVyCisKKwlhZHIJcjUsIG1vaGF3a19jcnZhbAorCWxkbWlhCXI1LCB7cjUsIHI2fQorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCByNQorCW9ycglyMCwgcjAsIHI2CisJbW92CXBjLCBscgorCisJLnNpemUJX19tb2hhd2tfc2V0dXAsIC4gLSBfX21vaGF3a19zZXR1cAorCisJLyoKKwkgKiAgUgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuMDExIDEwMDEgLi4wMCAwMTAxCisJICoKKwkgKi8KKwkudHlwZQltb2hhd2tfY3J2YWwsICNvYmplY3QKK21vaGF3a19jcnZhbDoKKwljcnZhbAljbGVhcj0weDAwMDA3ZjNmLCBtbXVzZXQ9MHgwMDAwMzkwNSwgdWNzZXQ9MHgwMDAwMTEzNAorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCS50eXBlCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0Cittb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9uczoKKwkud29yZAl2NXRfZWFybHlfYWJvcnQKKwkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJY3B1X21vaGF3a19wcm9jX2luaXQKKwkud29yZAljcHVfbW9oYXdrX3Byb2NfZmluCisJLndvcmQJY3B1X21vaGF3a19yZXNldAorCS53b3JkCWNwdV9tb2hhd2tfZG9faWRsZQorCS53b3JkCWNwdV9tb2hhd2tfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfbW9oYXdrX3N3aXRjaF9tbQorCS53b3JkCWNwdV9tb2hhd2tfc2V0X3B0ZV9leHQKKwkuc2l6ZQltb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIG1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NXRlIgorCS5zaXplCWNwdV9hcmNoX25hbWUsIC4gLSBjcHVfYXJjaF9uYW1lCisKKwkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToKKwkuYXNjaXoJInY1IgorCS5zaXplCWNwdV9lbGZfbmFtZSwgLiAtIGNwdV9lbGZfbmFtZQorCisJLnR5cGUJY3B1X21vaGF3a19uYW1lLCAjb2JqZWN0CitjcHVfbW9oYXdrX25hbWU6CisJLmFzY2l6CSJNYXJ2ZWxsIDg4U1YzMzF4IgorCS5zaXplCWNwdV9tb2hhd2tfbmFtZSwgLiAtIGNwdV9tb2hhd2tfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkudHlwZQlfXzg4c3YzMzF4X3Byb2NfaW5mbywjb2JqZWN0CitfXzg4c3YzMzF4X3Byb2NfaW5mbzoKKwkubG9uZwkweDU2MTU4MDAwCQkJQCBNYXJ2ZWxsIDg4U1YzMzF4IChNT0hBV0spCisJLmxvbmcJMHhmZmZmZjAwMAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX19tb2hhd2tfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1AKKwkubG9uZwljcHVfbW9oYXdrX25hbWUKKwkubG9uZwltb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCXY0d2JpX3RsYl9mbnMKKwkubG9uZwl2NHdiX3VzZXJfZm5zCisJLmxvbmcJbW9oYXdrX2NhY2hlX2ZucworCS5zaXplCV9fODhzdjMzMXhfcHJvY19pbmZvLCAuIC0gX184OHN2MzMxeF9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3RsYi1mYS5TIGIvYXJjaC9hcm0vbW0vdGxiLWZhLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5NGYxZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3RsYi1mYS5TCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vdGxiLWZhLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEZhcmFkYXkgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBCYXNlZCBvbiB0bGItdjR3YmkuUzoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBBUk0gYXJjaGl0ZWN0dXJlIHZlcnNpb24gNCwgRmFyYWRheSB2YXJpYXRpb24uCisgKiAgVGhpcyBhc3N1bWUgYW4gdW5pZmllZCBUTEJzLCB3aXRoIGEgd3JpdGUgYnVmZmVyLCBhbmQgYnJhbmNoIHRhcmdldCBidWZmZXIgKEJUQikKKyAqCisgKiAgUHJvY2Vzc29yczogRkE1MjAgRkE1MjYgRkE2MjYKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworCisvKgorICoJZmx1c2hfdXNlcl90bGJfcmFuZ2Uoc3RhcnQsIGVuZCwgbW0pCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIFRMQiBlbnRyaWVzIGluIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gcmFuZ2Ugc3RhcnQgYWRkcmVzcworICoJLSBlbmQgICAtIHJhbmdlIGVuZCBhZGRyZXNzCisgKgktIG1tICAgIC0gbW1fc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICovCisJLmFsaWduCTQKK0VOVFJZKGZhX2ZsdXNoX3VzZXJfdGxiX3JhbmdlKQorCXZtYV92bV9tbSBpcCwgcjIKKwlhY3RfbW0JcjMJCQkJQCBnZXQgY3VycmVudC0+YWN0aXZlX21tCisJZW9ycwlyMywgaXAsIHIzCQkJQCA9PSBtbSA/CisJbW92bmUJcGMsIGxyCQkJCUAgbm8sIHdlIGRvbnQgZG8gYW55dGhpbmcKKwltb3YJcjMsICMwCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwliaWMJcjAsIHIwLCAjMHgwZmYKKwliaWMJcjAsIHIwLCAjMHhmMDAKKzE6CW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDEJCUAgaW52YWxpZGF0ZSBVVExCIGVudHJ5CisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1vdglwYywgbHIKKworCitFTlRSWShmYV9mbHVzaF9rZXJuX3RsYl9yYW5nZSkKKwltb3YJcjMsICMwCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwliaWMJcjAsIHIwLCAjMHgwZmYKKwliaWMJcjAsIHIwLCAjMHhmMDAKKzE6CW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDEJCUAgaW52YWxpZGF0ZSBVVExCIGVudHJ5CisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcglwMTUsIDAsIHIzLCBjNywgYzUsIDQJCUAgcHJlZmV0Y2ggZmx1c2gKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQlmYV90bGJfZm5zLCAjb2JqZWN0CitFTlRSWShmYV90bGJfZm5zKQorCS5sb25nCWZhX2ZsdXNoX3VzZXJfdGxiX3JhbmdlCisJLmxvbmcJZmFfZmx1c2hfa2Vybl90bGJfcmFuZ2UKKwkubG9uZwlmYV90bGJfZmxhZ3MKKwkuc2l6ZQlmYV90bGJfZm5zLCAuIC0gZmFfdGxiX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCBjZWZjMjFjLi5kODA1YTUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtMTgsMTUgKzE4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotCi0jaW5jbHVkZSAiLi4va2VybmVsL3N0YWNrdHJhY2UuaCIKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCiBzdGF0aWMgaW50IHJlcG9ydF90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUsIHZvaWQgKmQpCiB7CiAJdW5zaWduZWQgaW50ICpkZXB0aCA9IGQ7CiAKIAlpZiAoKmRlcHRoKSB7Ci0JCW9wcm9maWxlX2FkZF90cmFjZShmcmFtZS0+bHIpOworCQlvcHJvZmlsZV9hZGRfdHJhY2UoZnJhbWUtPnBjKTsKIAkJKCpkZXB0aCktLTsKIAl9CiAKQEAgLTcwLDkgKzY5LDEyIEBACiAJc3RydWN0IGZyYW1lX3RhaWwgKnRhaWwgPSAoKHN0cnVjdCBmcmFtZV90YWlsICopIHJlZ3MtPkFSTV9mcCkgLSAxOwogCiAJaWYgKCF1c2VyX21vZGUocmVncykpIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlID0gKCh1bnNpZ25lZCBsb25nKXJlZ3MpICYgfihUSFJFQURfU0laRSAtIDEpOwotCQl3YWxrX3N0YWNrZnJhbWUocmVncy0+QVJNX2ZwLCBiYXNlLCBiYXNlICsgVEhSRUFEX1NJWkUsCi0JCQkJcmVwb3J0X3RyYWNlLCAmZGVwdGgpOworCQlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcmFtZTsKKwkJZnJhbWUuZnAgPSByZWdzLT5BUk1fZnA7CisJCWZyYW1lLnNwID0gcmVncy0+QVJNX3NwOworCQlmcmFtZS5sciA9IHJlZ3MtPkFSTV9scjsKKwkJZnJhbWUucGMgPSByZWdzLT5BUk1fcGM7CisJCXdhbGtfc3RhY2tmcmFtZSgmZnJhbWUsIHJlcG9ydF90cmFjZSwgJmRlcHRoKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYwppbmRleCA2ZDZiZDU4Li44NTNkNDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mKGNwdSk7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKLQlkZXNjLT5hZmZpbml0eSA9ICptYXNrOworCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiAJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCmluZGV4IDljYzJiMTYuLjE3ZDBlOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKIG1lbnUgIkZyZWVzY2FsZSBNWEMgSW1wbGVtZW50YXRpb25zIgogCiBjaG9pY2UKLQlwcm9tcHQgIk1YQy9pTVggQmFzZSBUeXBlIgorCXByb21wdCAiRnJlZXNjYWxlIENQVSBmYW1pbHk6IgogCWRlZmF1bHQgQVJDSF9NWDMKIAogY29uZmlnIEFSQ0hfTVgxCkBAIC0xNSwxMiArMTUsMTQgQEAKIGNvbmZpZyBBUkNIX01YMgogCWJvb2wgIk1YMi1iYXNlZCIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDIgZmFtaWx5CiAKIGNvbmZpZyBBUkNIX01YMwogCWJvb2wgIk1YMy1iYXNlZCIKIAlzZWxlY3QgQ1BVX1Y2CisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgzIGZhbWlseQogCkBAIC00Myw0ICs0NSwxMCBAQAogCSAgcmVxdWlyZW1lbnRzIGZvciB0aW1pbmcuCiAJICBTYXkgTiBoZXJlLCB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWFsaXplZCByZXF1aXJlbWVudC4KIAorY29uZmlnIE1YQ19QV00KKwl0cmlzdGF0ZSAiRW5hYmxlIFBXTSBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX01YQworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgaS5NWCBQV00gY29udHJvbGxlcihzKS4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKaW5kZXggZGI3NGE5Mi4uMDU1NDA2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKQEAgLTMsNyArMyw4IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlycS5vIGNsb2NrLm8gZ3Bpby5vIHRpbWUubyBkZXZpY2VzLm8KK29iai15IDo9IGlycS5vIGNsb2NrLm8gZ3Bpby5vIHRpbWUubyBkZXZpY2VzLm8gY3B1Lm8gc3lzdGVtLm8KIAogb2JqLSQoQ09ORklHX0FSQ0hfTVgxKSArPSBpb211eC1teDEtbXgyLm8gZG1hLW14MS1teDIubwogb2JqLSQoQ09ORklHX0FSQ0hfTVgyKSArPSBpb211eC1teDEtbXgyLm8gZG1hLW14MS1teDIubworb2JqLSQoQ09ORklHX01YQ19QV00pICArPSBwd20ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKaW5kZXggMGEzOGYwYi4uOTJlMTM1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCkBAIC00OCw2ICs0OCwxMSBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKKyAqIEFsbCB0aGUgY29kZSBpbnNpZGUgI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFViBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbAorICogTVhDIGFyY2hpdGVjdHVyZXMgaGF2ZSBzd2l0Y2hlZCB0byB1c2luZyBjbGtkZXYuCisgKi8KKyNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKKy8qCiAgKiBSZXRyaWV2ZSBhIGNsb2NrIGJ5IG5hbWUuCiAgKgogICogTm90ZSB0aGF0IHdlIGZpcnN0IHRyeSB0byB1c2UgZGV2aWNlIGlkIG9uIHRoZSBidXMKQEAgLTExMCw2ICsxMTUsNyBAQAogCXJldHVybiBjbGs7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtMTg3LDYgKzE5Myw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CiAKKyNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKIC8qIERlY3JlbWVudCB0aGUgY2xvY2sncyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50ICovCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQogewpAQCAtMTk0LDYgKzIwMSw3IEBACiAJCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworI2VuZGlmCiAKIC8qIFJvdW5kIHRoZSByZXF1ZXN0ZWQgY2xvY2sgcmF0ZSB0byB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQKICAqIHJhdGUgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByYXRlLgpAQCAtMjU3LDYgKzI2NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKIAorI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgogLyoKICAqIEFkZCBhIG5ldyBjbG9jayB0byB0aGUgY2xvY2sgdHJlZS4KICAqLwpAQCAtMzI3LDQgKzMzNiw0OSBAQAogfQogCiBsYXRlX2luaXRjYWxsKG14Y19zZXR1cF9wcm9jX2VudHJ5KTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogI2VuZGlmCisKKy8qCisgKiBHZXQgdGhlIHJlc3VsdGluZyBjbG9jayByYXRlIGZyb20gYSBQTEwgcmVnaXN0ZXIgdmFsdWUgYW5kIHRoZSBpbnB1dAorICogZnJlcXVlbmN5LiBQTExzIHdpdGggdGhpcyByZWdpc3RlciBsYXlvdXQgY2FuIGF0IGxlYXN0IGJlIGZvdW5kIG9uCisgKiBNWDEsIE1YMjEsIE1YMjcgYW5kIE1YMzEKKyAqCisgKiAgICAgICAgICAgICAgICAgIG1maSArIG1mbiAvIChtZmQgKyAxKQorICogIGYgPSAyICogZl9yZWYgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICBwZCArIDEKKyAqLwordW5zaWduZWQgbG9uZyBteGNfZGVjb2RlX3BsbCh1bnNpZ25lZCBpbnQgcmVnX3ZhbCwgdTMyIGZyZXEpCit7CisJbG9uZyBsb25nIGxsOworCWludCBtZm5fYWJzOworCXVuc2lnbmVkIGludCBtZmksIG1mbiwgbWZkLCBwZDsKKworCW1maSA9IChyZWdfdmFsID4+IDEwKSAmIDB4ZjsKKwltZm4gPSByZWdfdmFsICYgMHgzZmY7CisJbWZkID0gKHJlZ192YWwgPj4gMTYpICYgMHgzZmY7CisJcGQgPSAgKHJlZ192YWwgPj4gMjYpICYgMHhmOworCisJbWZpID0gbWZpIDw9IDUgPyA1IDogbWZpOworCisJbWZuX2FicyA9IG1mbjsKKworI2lmICFkZWZpbmVkIENPTkZJR19BUkNIX01YMSAmJiAhZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIxCisJaWYgKG1mbiA+PSAweDIwMCkgeworCQltZm4gfD0gMHhGRkZGRkUwMDsKKwkJbWZuX2FicyA9IC1tZm47CisJfQorI2VuZGlmCisKKwlmcmVxICo9IDI7CisJZnJlcSAvPSBwZCArIDE7CisKKwlsbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpZnJlcSAqIG1mbl9hYnM7CisKKwlkb19kaXYobGwsIG1mZCArIDEpOworCWlmIChtZm4gPCAwKQorCQlsbCA9IC1sbDsKKwlsbCA9IChmcmVxICogbWZpKSArIGxsOworCisJcmV0dXJuIGxsOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvY3B1LmMgYi9hcmNoL2FybS9wbGF0LW14Yy9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODZlMGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvY3B1LmMKQEAgLTAsMCArMSwxMSBAQAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3Vuc2lnbmVkIGludCBfX214Y19jcHVfdHlwZTsKK0VYUE9SVF9TWU1CT0woX19teGNfY3B1X3R5cGUpOworCit2b2lkIG14Y19zZXRfY3B1X3R5cGUodW5zaWduZWQgaW50IHR5cGUpCit7CisJX19teGNfY3B1X3R5cGUgPSB0eXBlOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMKaW5kZXggYzY2NzQ4Mi4uNTZmMmZiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCiBpbnQgX19pbml0IG14Y19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RtYS1teDEtbXgyLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jCmluZGV4IDI5MDVlYzcuLmUzNjRhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2RtYS1teDEtbXgyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIGludCBlcnJjb2RlKTsKIAl2b2lkICgqcHJvZ19oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBzY2F0dGVybGlzdCAqKTsKIAl2b2lkICpkYXRhOwotCXVuc2lnbmVkIGludCAgZG1hX21vZGU7CisJdW5zaWduZWQgaW50IGRtYV9tb2RlOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdW5zaWduZWQgaW50IHJlc2J5dGVzOwogCWludCBkbWFfbnVtOwpAQCAtODAyLDcgKzgwMiw3IEBACiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKLQlkbWFfY2xrID0gY2xrX2dldChOVUxMLCAiZG1hX2NsayIpOworCWRtYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkbWEiKTsKIAljbGtfZW5hYmxlKGRtYV9jbGspOwogCiAJLyogcmVzZXQgRE1BIG1vZHVsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCmluZGV4IGNjYmQ5NGEuLmM2NDgzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKQEAgLTIwMCw4ICsyMDAsOCBAQAogc3RhdGljIGludCBteGNfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCiAJCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlfc2V0X2dwaW9fZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgMSk7CiAJbXhjX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCV9zZXRfZ3Bpb19kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCAxKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKaW5kZXggOGYzNGEwNS4uMWNhYzlkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCkBAIC00OCw3ICs0OCw4IEBACiAgKiBCYXNlIGFkZHJlc3Mgb2YgUEJDIGNvbnRyb2xsZXIsIENTNAogICovCiAjZGVmaW5lIFBCQ19CQVNFX0FERFJFU1MgICAgICAgIDB4RUIwMDAwMDAKLSNkZWZpbmUgUEJDX1JFR19BRERSKG9mZnNldCkgICAgKFBCQ19CQVNFX0FERFJFU1MgKyAob2Zmc2V0KSkKKyNkZWZpbmUgUEJDX1JFR19BRERSKG9mZnNldCkgICAgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIFwKKwkJKFBCQ19CQVNFX0FERFJFU1MgKyAob2Zmc2V0KSkKIAogLyoKICAqIFBCQyBJbnRlcnVwdCBuYW1lIGRlZmluaXRpb25zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaAppbmRleCA0NTFkNTEwLi4zMThjNzJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKQEAgLTExLDYgKzExLDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUFEU19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUFEU19IX18KIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKwogLyogQmFzZSBhZGRyZXNzIG9mIFBCQyBjb250cm9sbGVyICovCiAjZGVmaW5lIFBCQ19CQVNFX0FERFJFU1MgICAgICAgIElPX0FERFJFU1MoQ1M0X0JBU0VfQUREUikKIC8qIE9mZnNldHMgZm9yIHRoZSBQQkMgQ29udHJvbGxlciByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFtb2JvYXJkLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGFlZjFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFtb2JvYXJkLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBWYWxlbnRpbiBMb25nY2hhbXAsIEVQRkwgTW9ib3RzIGdyb3VwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxTU9CT0FSRF9IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fCisKKy8qIG1hbmRhdG9yeSBmb3IgQ09ORklHX0xMX0RFQlVHICovCisKKyNkZWZpbmUgTVhDX0xMX1VBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIE1YQ19MTF9VQVJUX1ZBRERSCShBSVBJX0JBU0VfQUREUl9WSVJUICsgMHgwQTAwMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZW51bSBteDMxbW9ib2FyZF9ib2FyZHMgeworCU1YMzFOT0JPQVJECT0gMCwKKwlNWDMxREVWQk9BUkQJPSAxLAorCU1YMzFNQVJYQk9UCT0gMiwKK307CisKKy8qCisgKiBUaGlzIENQVSBtb2R1bGUgbmVlZHMgYSBiYXNlYm9hcmQgdG8gd29yay4gQWZ0ZXIgYmFzaWMgaW5pdGlhbGl6aW5nCisgKiBpdHMgb3duIGRldmljZXMsIGl0IGNhbGxzIGJhc2Vib2FyZCdzIGluaXQgZnVuY3Rpb24uCisgKi8KKworZXh0ZXJuIHZvaWQgbXgzMW1vYm9hcmRfZGV2Ym9hcmRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG14MzFtb2JvYXJkX21hcnhib3RfaW5pdCh2b2lkKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxTU9CT0FSRF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1xb25nLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcW9uZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZjc2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcW9uZy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMgTHRkLCA8eWFub2tAZW1jcmFmdC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9RT05HX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9RT05HX0hfXworCisvKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLworCisjZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKKworLyogTk9SIEZMQVNIICovCisjZGVmaW5lIFFPTkdfTk9SX1NJWkUJCSgxMjgqMTAyNCoxMDI0KQorCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIzN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQorI2RlZmluZSBfX2Nsa19wdXQoY2xrKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xvY2suaAppbmRleCBkMjFmNzhlLi40M2E4MmQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMjYsOSArMjYsMTMgQEAKIHN0cnVjdCBtb2R1bGU7CiAKIHN0cnVjdCBjbGsgeworI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgorCS8qIEFzIHNvb24gYXMgaS5NWDEgYW5kIGkuTVgzMSBzd2l0Y2hlZCB0byBjbGtkZXYsIHRoaXMKKwkgKiBibG9jayBjYW4gZ28gYXdheSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCBjaGFyICpuYW1lOworI2VuZGlmCiAJaW50IGlkOwogCS8qIFNvdXJjZSBjbG9jayB0aGlzIGNsayBkZXBlbmRzIG9uICovCiAJc3RydWN0IGNsayAqcGFyZW50OwpAQCAtNjMsNSArNjcsNyBAQAogaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwogCit1bnNpZ25lZCBsb25nIG14Y19kZWNvZGVfcGxsKHVuc2lnbmVkIGludCBwbGwsIHUzMiBmX3JlZik7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19DTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAppbmRleCA2MzUwMjg3Li5iMmY5YjcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0xMiwxMiArMTIsMTggQEAKICNkZWZpbmUgX19BU01fQVJDSF9NWENfQ09NTU9OX0hfXwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IGNsazsKIAogZXh0ZXJuIHZvaWQgbXhjX21hcF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIG14Y19pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KGNvbnN0IGNoYXIgKmNsa190aW1lcik7Ci1leHRlcm4gaW50IG14Y19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIHZvaWQgbXhjX3RpbWVyX2luaXQoc3RydWN0IGNsayAqdGltZXJfY2xrKTsKK2V4dGVybiBpbnQgbXgxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CitleHRlcm4gaW50IG14MjFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBscmVmLCB1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIGludCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CitleHRlcm4gaW50IG14MzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiBpbnQgbXgzNV9jbG9ja3NfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwogZXh0ZXJuIGludCBteGNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgbXhjX3NldF9jcHVfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA2MDI3NjhiLi40Zjc3MzE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMzEsNiArMzEsOSBAQAogI2lmZGVmIENPTkZJR19NQUNIX01YMzFfM0RTCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxcGRrLmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDSF9RT05HCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1xb25nLmg+CisjZW5kaWYKIAkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggYTYxMmQ4Yi4uNDJlNGVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTIzLDEwICsyMywxNiBAQAogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgzCi0jIGluY2x1ZGUgPG1hY2gvbXgzMS5oPgorI2luY2x1ZGUgPG1hY2gvbXgzeC5oPgorI2luY2x1ZGUgPG1hY2gvbXgzMS5oPgorI2luY2x1ZGUgPG1hY2gvbXgzNS5oPgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9NWDIKKyMgaW5jbHVkZSA8bWFjaC9teDJ4Lmg+CisjIGlmZGVmIENPTkZJR19NQUNIX01YMjEKKyMgIGluY2x1ZGUgPG1hY2gvbXgyMS5oPgorIyBlbmRpZgogIyBpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiAjICBpbmNsdWRlIDxtYWNoL214MjcuaD4KICMgZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyYTdiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIG1hY2hpbmUgd2hpY2ggd2UgYXJlIHJ1bm5pbmcgb24uCisgKi8KKworI2RlZmluZSBQQ1JfVEZUCQkoMSA8PCAzMSkKKyNkZWZpbmUgUENSX0NPTE9SCSgxIDw8IDMwKQorI2RlZmluZSBQQ1JfUEJTSVpfMQkoMCA8PCAyOCkKKyNkZWZpbmUgUENSX1BCU0laXzIJKDEgPDwgMjgpCisjZGVmaW5lIFBDUl9QQlNJWl80CSgyIDw8IDI4KQorI2RlZmluZSBQQ1JfUEJTSVpfOAkoMyA8PCAyOCkKKyNkZWZpbmUgUENSX0JQSVhfMQkoMCA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfMgkoMSA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfNAkoMiA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfOAkoMyA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfMTIJKDQgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzE2CSg0IDw8IDI1KQorI2RlZmluZSBQQ1JfUElYUE9MCSgxIDw8IDI0KQorI2RlZmluZSBQQ1JfRkxNUE9MCSgxIDw8IDIzKQorI2RlZmluZSBQQ1JfTFBQT0wJKDEgPDwgMjIpCisjZGVmaW5lIFBDUl9DTEtQT0wJKDEgPDwgMjEpCisjZGVmaW5lIFBDUl9PRVBPTAkoMSA8PCAyMCkKKyNkZWZpbmUgUENSX1NDTEtJRExFCSgxIDw8IDE5KQorI2RlZmluZSBQQ1JfRU5EX1NFTAkoMSA8PCAxOCkKKyNkZWZpbmUgUENSX0VORF9CWVRFX1NXQVAgKDEgPDwgMTcpCisjZGVmaW5lIFBDUl9SRVZfVlMJKDEgPDwgMTYpCisjZGVmaW5lIFBDUl9BQ0RfU0VMCSgxIDw8IDE1KQorI2RlZmluZSBQQ1JfQUNEKHgpCSgoKHgpICYgMHg3ZikgPDwgOCkKKyNkZWZpbmUgUENSX1NDTEtfU0VMCSgxIDw8IDcpCisjZGVmaW5lIFBDUl9TSEFSUAkoMSA8PCA2KQorI2RlZmluZSBQQ1JfUENEKHgpCSgoeCkgJiAweDNmKQorCisjZGVmaW5lIFBXTVJfQ0xTKHgpCSgoKHgpICYgMHgxZmYpIDw8IDE2KQorI2RlZmluZSBQV01SX0xETVNLCSgxIDw8IDE1KQorI2RlZmluZSBQV01SX1NDUjEJKDEgPDwgMTApCisjZGVmaW5lIFBXTVJfU0NSMAkoMSA8PCA5KQorI2RlZmluZSBQV01SX0NDX0VOCSgxIDw8IDgpCisjZGVmaW5lIFBXTVJfUFcoeCkJKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgTFNDUjFfUFNfUklTRV9ERUxBWSh4KSAgICAoKCh4KSAmIDB4N2YpIDw8IDI2KQorI2RlZmluZSBMU0NSMV9DTFNfUklTRV9ERUxBWSh4KSAgICgoKHgpICYgMHgzZikgPDwgMTYpCisjZGVmaW5lIExTQ1IxX1JFVl9UT0dHTEVfREVMQVkoeCkgKCgoeCkgJiAweGYpIDw8IDgpCisjZGVmaW5lIExTQ1IxX0dSQVkyKHgpICAgICAgICAgICAgKCgoeCkgJiAweGYpIDw8IDQpCisjZGVmaW5lIExTQ1IxX0dSQVkxKHgpICAgICAgICAgICAgKCgoeCkgJiAweGYpKQorCisjZGVmaW5lIERNQUNSX0JVUlNUCSgxIDw8IDMxKQorI2RlZmluZSBETUFDUl9ITSh4KQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIERNQUNSX1RNKHgpCSgoeCkgJiAweGYpCisKK3N0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSB7CisJdV9sb25nCQlwaXhjbG9jazsKKworCXVfc2hvcnQJCXhyZXM7CisJdV9zaG9ydAkJeXJlczsKKworCXVfaW50CQlub25zdGQ7CisJdV9jaGFyCQlicHA7CisJdV9jaGFyCQloc3luY19sZW47CisJdV9jaGFyCQlsZWZ0X21hcmdpbjsKKwl1X2NoYXIJCXJpZ2h0X21hcmdpbjsKKworCXVfY2hhcgkJdnN5bmNfbGVuOworCXVfY2hhcgkJdXBwZXJfbWFyZ2luOworCXVfY2hhcgkJbG93ZXJfbWFyZ2luOworCXVfY2hhcgkJc3luYzsKKworCXVfaW50CQljbWFwX2dyZXlzY2FsZToxLAorCQkJY21hcF9pbnZlcnNlOjEsCisJCQljbWFwX3N0YXRpYzoxLAorCQkJdW51c2VkOjI5OworCisJdV9pbnQJCXBjcjsKKwl1X2ludAkJcHdtcjsKKwl1X2ludAkJbHNjcjE7CisJdV9pbnQJCWRtYWNyOworCisJdV9jaGFyICogZml4ZWRfc2NyZWVuX2NwdTsKKwlkbWFfYWRkcl90IGZpeGVkX3NjcmVlbl9kbWE7CisKKwlpbnQgKCppbml0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKik7CisJaW50ICgqZXhpdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSopOworCisJdm9pZCAoKmxjZF9wb3dlcikoaW50KTsKKwl2b2lkICgqYmFja2xpZ2h0X3Bvd2VyKShpbnQpOworfTsKKwordm9pZCBzZXRfaW14X2ZiX2luZm8oc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhICopOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS1teDIuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEtbXgyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YTM4M2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS1teDIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX01YQ19HUElPX01YMV9NWDJfSAotI2RlZmluZSBfTVhDX0dQSU9fTVgxX01YMl9ICi0KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0vKgotICogIEdQSU8gTW9kdWxlIGFuZCBJL08gTXVsdGlwbGV4ZXIKLSAqICB4ID0gMC4uMyBmb3IgcmVnX0EsIHJlZ19CLCByZWdfQywgcmVnX0QKLSAqLwotI2RlZmluZSBWQV9HUElPX0JBU0UJSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUikKLSNkZWZpbmUgTVhDX0RESVIoeCkgICAgKDB4MDAgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfT0NSMSh4KSAgICAoMHgwNCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19PQ1IyKHgpICAgICgweDA4ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDT05GQTEoeCkgKDB4MGMgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNPTkZBMih4KSAoMHgxMCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ09ORkIxKHgpICgweDE0ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDT05GQjIoeCkgKDB4MTggKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfRFIoeCkgICAgICAoMHgxYyArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19HSVVTKHgpICAgICgweDIwICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX1NTUih4KSAgICAgKDB4MjQgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNSMSh4KSAgICAoMHgyOCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ1IyKHgpICAgICgweDJjICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lNUih4KSAgICAgKDB4MzAgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSVNSKHgpICAgICAoMHgzNCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19HUFIoeCkgICAgICgweDM4ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX1NXUih4KSAgICAgKDB4M2MgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfUFVFTih4KSAgICAoMHg0MCArICgoeCkgPDwgOCkpCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDEKLSMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDMKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX01YMgotIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgNQotI2VuZGlmCi0KLSNpZm5kZWYgR1BJT19QT1JUX01BWAotIyBlcnJvciAiR1BJTyBjb25maWcgcG9ydCBjb3VudCB1bmtub3duISIKLSNlbmRpZgotCi0jZGVmaW5lIEdQSU9fUElOX01BU0sgMHgxZgotCi0jZGVmaW5lIEdQSU9fUE9SVF9TSElGVCA1Ci0jZGVmaW5lIEdQSU9fUE9SVF9NQVNLICgweDcgPDwgR1BJT19QT1JUX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fUE9SVEEgKDAgPDwgR1BJT19QT1JUX1NISUZUKQotI2RlZmluZSBHUElPX1BPUlRCICgxIDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JUQyAoMiA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEQgKDMgPDwgR1BJT19QT1JUX1NISUZUKQotI2RlZmluZSBHUElPX1BPUlRFICg0IDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JURiAoNSA8PCBHUElPX1BPUlRfU0hJRlQpCi0KLSNkZWZpbmUgR1BJT19PVVQgICAoMSA8PCA4KQotI2RlZmluZSBHUElPX0lOICAgICgwIDw8IDgpCi0jZGVmaW5lIEdQSU9fUFVFTiAgKDEgPDwgOSkKLQotI2RlZmluZSBHUElPX1BGICAgICgxIDw8IDEwKQotI2RlZmluZSBHUElPX0FGICAgICgxIDw8IDExKQotCi0jZGVmaW5lIEdQSU9fT0NSX1NISUZUIDEyCi0jZGVmaW5lIEdQSU9fT0NSX01BU0sgKDMgPDwgR1BJT19PQ1JfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQUlOICAgKDAgPDwgR1BJT19PQ1JfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQklOICAgKDEgPDwgR1BJT19PQ1JfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQ0lOICAgKDIgPDwgR1BJT19PQ1JfU0hJRlQpCi0jZGVmaW5lIEdQSU9fR1BJTyAgKDMgPDwgR1BJT19PQ1JfU0hJRlQpCi0KLSNkZWZpbmUgR1BJT19BT1VUX1NISUZUIDE0Ci0jZGVmaW5lIEdQSU9fQU9VVF9NQVNLICgzIDw8IEdQSU9fQU9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19BT1VUICAgICAoMCA8PCBHUElPX0FPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQU9VVF9JU1IgKDEgPDwgR1BJT19BT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0FPVVRfMCAgICgyIDw8IEdQSU9fQU9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19BT1VUXzEgICAoMyA8PCBHUElPX0FPVVRfU0hJRlQpCi0KLSNkZWZpbmUgR1BJT19CT1VUX1NISUZUIDE2Ci0jZGVmaW5lIEdQSU9fQk9VVF9NQVNLICgzIDw8IEdQSU9fQk9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19CT1VUICAgICAgKDAgPDwgR1BJT19CT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0JPVVRfSVNSICAoMSA8PCBHUElPX0JPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQk9VVF8wICAgICgyIDw8IEdQSU9fQk9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19CT1VUXzEgICAgKDMgPDwgR1BJT19CT1VUX1NISUZUKQotCi1leHRlcm4gdm9pZCBteGNfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpOwotZXh0ZXJuIGludCBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAotCQkJCQljb25zdCBjaGFyICpsYWJlbCk7Ci1leHRlcm4gdm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogYXNzaWduZW1lbnRzIGZvciBHUElPIGFsdGVybmF0ZS9wcmltYXJ5IGZ1bmN0aW9ucyAqLwotCi0vKiBGSVhNRTogVGhpcyBsaXN0IGlzIG5vdCBjb21wbGV0ZWQuIFRoZSBjb3JyZWN0IGRpcmVjdGlvbnMgYXJlCi0gKiBtaXNzaW5nIG9uIHNvbWUgKG1hbnkpIHBpbnMKLSAqLwotI2lmZGVmIENPTkZJR19BUkNIX01YMQotI2RlZmluZSBQQTBfQUlOX1NQSTJfQ0xLICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgMCkKLSNkZWZpbmUgUEEwX0FGX0VUTVRSQUNFU1lOQyAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMCkKLSNkZWZpbmUgUEExX0FPVVRfU1BJMl9SWEQgICAgKEdQSU9fUE9SVEEgfCBHUElPX0lOIHwgMSkKLSNkZWZpbmUgUEExX1BGX1RJTiAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKLSNkZWZpbmUgUEEyX1BGX1BXTTAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyKQotI2RlZmluZSBQQTNfUEZfQ1NJX01DTEsgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzKQotI2RlZmluZSBQQTRfUEZfQ1NJX0QwICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA0KQotI2RlZmluZSBQQTVfUEZfQ1NJX0QxICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQQTZfUEZfQ1NJX0QyICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQQTdfUEZfQ1NJX0QzICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQQThfUEZfQ1NJX0Q0ICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQQTlfUEZfQ1NJX0Q1ICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQQTEwX1BGX0NTSV9ENiAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEExMV9QRl9DU0lfRDcgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBBMTJfUEZfQ1NJX1ZTWU5DICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQTEzX1BGX0NTSV9IU1lOQyAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEExNF9QRl9DU0lfUElYQ0xLICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBBMTVfUEZfSTJDX1NEQSAgICAgIChHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBBMTZfUEZfSTJDX1NDTCAgICAgIChHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBBMTdfQUZfRVRNVFJBQ0VQS1Q0IChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3KQotI2RlZmluZSBQQTE3X0FJTl9TUEkyX1NTICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgMTcpCi0jZGVmaW5lIFBBMThfQUZfRVRNVFJBQ0VQS1Q1IChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE4KQotI2RlZmluZSBQQTE5X0FGX0VUTVRSQUNFUEtUNiAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOSkKLSNkZWZpbmUgUEEyMF9BRl9FVE1UUkFDRVBLVDcgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjApCi0jZGVmaW5lIFBBMjFfUEZfQTAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQQTIyX1BGX0NTNCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEEyM19QRl9DUzUgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBBMjRfUEZfQTE2ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQTI0X0FGX0VUTVRSQUNFUEtUMCAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNCkKLSNkZWZpbmUgUEEyNV9QRl9BMTcgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjUpCi0jZGVmaW5lIFBBMjVfQUZfRVRNVFJBQ0VQS1QxIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI1KQotI2RlZmluZSBQQTI2X1BGX0ExOCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEEyNl9BRl9FVE1UUkFDRVBLVDIgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjYpCi0jZGVmaW5lIFBBMjdfUEZfQTE5ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQQTI3X0FGX0VUTVRSQUNFUEtUMyAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNykKLSNkZWZpbmUgUEEyOF9QRl9BMjAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjgpCi0jZGVmaW5lIFBBMjhfQUZfRVRNUElQRVNUQVQwIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI4KQotI2RlZmluZSBQQTI5X1BGX0EyMSAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEEyOV9BRl9FVE1QSVBFU1RBVDEgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjkpCi0jZGVmaW5lIFBBMzBfUEZfQTIyICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMwKQotI2RlZmluZSBQQTMwX0FGX0VUTVBJUEVTVEFUMiAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMCkKLSNkZWZpbmUgUEEzMV9QRl9BMjMgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBBMzFfQUZfRVRNVFJBQ0VDTEsgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDMxKQotI2RlZmluZSBQQjhfUEZfU0RfREFUMCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCA4KQotI2RlZmluZSBQQjhfQUZfTVNfUElPICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA4KQotI2RlZmluZSBQQjlfUEZfU0RfREFUMSAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gIHwgOSkKLSNkZWZpbmUgUEI5X0FGX01TX1BJMSAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgOSkKLSNkZWZpbmUgUEIxMF9QRl9TRF9EQVQyICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOICB8IDEwKQotI2RlZmluZSBQQjEwX0FGX01TX1NDTEtJICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMCkKLSNkZWZpbmUgUEIxMV9QRl9TRF9EQVQzICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBCMTFfQUZfTVNfU0RJTyAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDExKQotI2RlZmluZSBQQjEyX1BGX1NEX0NMSyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEIxMl9BRl9NU19TQ0xLMCAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTIpCi0jZGVmaW5lIFBCMTNfUEZfU0RfQ01EICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEzKQotI2RlZmluZSBQQjEzX0FGX01TX0JTICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMykKLSNkZWZpbmUgUEIxNF9BRl9TU0lfUlhGUyAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTQpCi0jZGVmaW5lIFBCMTVfQUZfU1NJX1JYQ0xLICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE1KQotI2RlZmluZSBQQjE2X0FGX1NTSV9SWERBVCAgICAoR1BJT19QT1JUQiB8IEdQSU9fSU4gfCBHUElPX0FGIHwgMTYpCi0jZGVmaW5lIFBCMTdfQUZfU1NJX1RYREFUICAgIChHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTcpCi0jZGVmaW5lIFBCMThfQUZfU1NJX1RYRlMgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE4KQotI2RlZmluZSBQQjE5X0FGX1NTSV9UWENMSyAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxOSkKLSNkZWZpbmUgUEIyMF9QRl9VU0JEX0FGRSAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBCMjFfUEZfVVNCRF9PRSAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQQjIyX1BGVVNCRF9SQ1YgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEIyM19QRl9VU0JEX1NVU1BORCAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBCMjRfUEZfVVNCRF9WUCAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQjI1X1BGX1VTQkRfVk0gICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEIyNl9QRl9VU0JEX1ZQTyAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBCMjdfUEZfVVNCRF9WTU8gICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQQjI4X1BGX1VBUlQyX0NUUyAgICAoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQQjI5X1BGX1VBUlQyX1JUUyAgICAoR1BJT19QT1JUQiB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMjkpCi0jZGVmaW5lIFBCMzBfUEZfVUFSVDJfVFhEICAgIChHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBCMzFfUEZfVUFSVDJfUlhEICAgIChHUElPX1BPUlRCIHwgR1BJT19JTiB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEMzX1BGX1NTSV9SWEZTICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEM0X1BGX1NTSV9SWENMSyAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEM1X1BGX1NTSV9SWERBVCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0lOIHwgR1BJT19QRiB8IDUpCi0jZGVmaW5lIFBDNl9QRl9TU0lfVFhEQVQgICAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEM3X1BGX1NTSV9UWEZTICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEM4X1BGX1NTSV9UWENMSyAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEM5X1BGX1VBUlQxX0NUUyAgICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQQzEwX1BGX1VBUlQxX1JUUyAgICAoR1BJT19QT1JUQyB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBDMTFfUEZfVUFSVDFfVFhEICAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBDMTJfUEZfVUFSVDFfUlhEICAgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEMxM19QRl9TUEkxX1NQSV9SRFkgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBDMTRfUEZfU1BJMV9TQ0xLICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQQzE1X1BGX1NQSTFfU1MgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEMxNl9QRl9TUEkxX01JU08gICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBDMTdfUEZfU1BJMV9NT1NJICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQzI0X0JJTl9VQVJUM19SSSAgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNCkKLSNkZWZpbmUgUEMyNV9CSU5fVUFSVDNfRFNSICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjUpCi0jZGVmaW5lIFBDMjZfQU9VVF9VQVJUM19EVFIgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI2KQotI2RlZmluZSBQQzI3X0JJTl9VQVJUM19EQ0QgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNykKLSNkZWZpbmUgUEMyOF9CSU5fVUFSVDNfQ1RTICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjgpCi0jZGVmaW5lIFBDMjlfQU9VVF9VQVJUM19SVFMgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI5KQotI2RlZmluZSBQQzMwX0JJTl9VQVJUM19UWCAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgMzApCi0jZGVmaW5lIFBDMzFfQU9VVF9VQVJUM19SWCAgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IDMxKQotI2RlZmluZSBQRDZfUEZfTFNDTEsgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBEN19QRl9SRVYgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBEN19BRl9VQVJUMl9EVFIgICAgIChHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQUYgfCA3KQotI2RlZmluZSBQRDdfQUlOX1NQSTJfU0NMSyAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgNykKLSNkZWZpbmUgUEQ4X1BGX0NMUyAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEQ4X0FGX1VBUlQyX0RDRCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCA4KQotI2RlZmluZSBQRDhfQUlOX1NQSTJfU1MgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgOCkKLSNkZWZpbmUgUEQ5X1BGX1BTICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEQ5X0FGX1VBUlQyX1JJICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCA5KQotI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAoR1BJT19QT1JURCB8IEdQSU9fSU4gfCA5KQotI2RlZmluZSBQRDEwX1BGX1NQTF9TUFIgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQRDEwX0FGX1VBUlQyX0RTUiAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDEwKQotI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgMTApCi0jZGVmaW5lIFBEMTFfUEZfQ09OVFJBU1QgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBEMTJfUEZfQUNEX09FICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBEMTNfUEZfTFBfSFNZTkMgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBEMTRfUEZfRkxNX1ZTWU5DICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBEMTVfUEZfTEQwICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBEMTZfUEZfTEQxICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBEMTdfUEZfTEQyICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBEMThfUEZfTEQzICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTgpCi0jZGVmaW5lIFBEMTlfUEZfTEQ0ICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTkpCi0jZGVmaW5lIFBEMjBfUEZfTEQ1ICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBEMjFfUEZfTEQ2ICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBEMjJfUEZfTEQ3ICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBEMjNfUEZfTEQ4ICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBEMjRfUEZfTEQ5ICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBEMjVfUEZfTEQxMCAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjUpCi0jZGVmaW5lIFBEMjZfUEZfTEQxMSAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBEMjdfUEZfTEQxMiAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBEMjhfUEZfTEQxMyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjgpCi0jZGVmaW5lIFBEMjlfUEZfTEQxNCAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjkpCi0jZGVmaW5lIFBEMzBfUEZfTEQxNSAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBEMzFfUEZfVE1SMk9VVCAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQRDMxX0JJTl9TUEkyX1RYRCAgICAoR1BJT19QT1JURCB8IEdQSU9fQklOIHwgMzEpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX01YMgotI2RlZmluZSBQQTBfUEZfVVNCSDJfQ0xLCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDApCi0jZGVmaW5lIFBBMV9QRl9VU0JIMl9ESVIJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKLSNkZWZpbmUgUEEyX1BGX1VTQkgyX0RBVEE3CShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIpCi0jZGVmaW5lIFBBM19QRl9VU0JIMl9OWFQJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEE0X1BGX1VTQkgyX1NUUAkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA0KQotI2RlZmluZSBQQTVfUEZfTFNDTEsJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNSkKLSNkZWZpbmUgUEE2X1BGX0xEMAkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQQTdfUEZfTEQxCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBBOF9QRl9MRDIJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEE5X1BGX0xEMwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQQTEwX1BGX0xENAkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEExMV9QRl9MRDUJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBBMTJfUEZfTEQ2CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQTEzX1BGX0xENwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEExNF9QRl9MRDgJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBBMTVfUEZfTEQ5CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQQTE2X1BGX0xEMTAJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBBMTdfUEZfTEQxMQkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNykKLSNkZWZpbmUgUEExOF9QRl9MRDEyCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQQTE5X1BGX0xEMTMJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTkpCi0jZGVmaW5lIFBBMjBfUEZfTEQxNAkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEEyMV9QRl9MRDE1CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQQTIyX1BGX0xEMTYJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBBMjNfUEZfTEQxNwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEEyNF9QRl9SRVYJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBBMjVfUEZfQ0xTCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQTI2X1BGX1BTCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQTI3X1BGX1NQTF9TUFIJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBBMjhfUEZfSFNZTkMJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjgpCi0jZGVmaW5lIFBBMjlfUEZfVlNZTkMJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjkpCi0jZGVmaW5lIFBBMzBfUEZfQ09OVFJBU1QJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAzMCkKLSNkZWZpbmUgUEEzMV9QRl9PRV9BQ0QJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBCNF9QRl9TRDJfRDAJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA0KQotI2RlZmluZSBQQjVfUEZfU0QyX0QxCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgNSkKLSNkZWZpbmUgUEI2X1BGX1NEMl9EMgkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDYpCi0jZGVmaW5lIFBCN19QRl9TRDJfRDMJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA3KQotI2RlZmluZSBQQjhfUEZfU0QyX0NNRAkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDgpCi0jZGVmaW5lIFBCOV9QRl9TRDJfQ0xLCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgOSkKLSNkZWZpbmUgUEIxMF9QRl9DU0lfRDAJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBCMTBfQUZfVUFSVDZfVFhECShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTApCi0jZGVmaW5lIFBCMTFfUEZfQ1NJX0QxCQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQQjExX0FGX1VBUlQ2X1JYRAkoR1BJT19QT1JUQiB8IEdQSU9fSU4gIHwgR1BJT19BRiB8IDExKQotI2RlZmluZSBQQjEyX1BGX0NTSV9EMgkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEIxMl9BRl9VQVJUNl9DVFMJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxMikKLSNkZWZpbmUgUEIxM19QRl9DU0lfRDMJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBCMTNfQUZfVUFSVDZfUlRTCShHUElPX1BPUlRCIHwgR1BJT19JTiAgfCBHUElPX0FGIHwgMTMpCi0jZGVmaW5lIFBCMTRfUEZfQ1NJX0Q0CQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQQjE1X1BGX0NTSV9NQ0xLCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBCMTZfUEZfQ1NJX1BJWENMSwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQQjE3X1BGX0NTSV9ENQkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNykKLSNkZWZpbmUgUEIxOF9QRl9DU0lfRDYJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTgpCi0jZGVmaW5lIFBCMThfQUZfVUFSVDVfVFhECShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTgpCi0jZGVmaW5lIFBCMTlfUEZfQ1NJX0Q3CQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE5KQotI2RlZmluZSBQQjE5X0FGX1VBUlQ1X1JYRAkoR1BJT19QT1JUQiB8IEdQSU9fSU4gIHwgR1BJT19BRiB8IDE5KQotI2RlZmluZSBQQjIwX1BGX0NTSV9WU1lOQwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIwKQotI2RlZmluZSBQQjIwX0FGX1VBUlQ1X0NUUwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDIwKQotI2RlZmluZSBQQjIxX1BGX0NTSV9IU1lOQwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQQjIxX0FGX1VBUlQ1X1JUUwkoR1BJT19QT1JUQiB8IEdQSU9fSU4gIHwgR1BJT19BRiB8IDIxKQotI2RlZmluZSBQQjIyX1BGX1VTQkgxX1NVU1AJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBCMjNfUEZfVVNCX1BXUgkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBCMjRfUEZfVVNCX09DX0IJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBCMjVfUEZfVVNCSDFfUkNWCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQjI2X1BGX1VTQkgxX0ZTCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQjI3X1BGX1VTQkgxX09FX0IJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBCMjhfUEZfVVNCSDFfVFhETQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEIyOV9QRl9VU0JIMV9UWERQCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQQjMwX1BGX1VTQkgxX1JYRE0JKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBCMzFfUEZfVVNCSDFfUlhEUAkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEIyNl9BRl9VQVJUNF9SVFMJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEIyOF9BRl9VQVJUNF9UWEQJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyOCkKLSNkZWZpbmUgUEIyOV9BRl9VQVJUNF9DVFMJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyOSkKLSNkZWZpbmUgUEIzMV9BRl9VQVJUNF9SWEQJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAzMSkKLSNkZWZpbmUgUEM1X1BGX0kyQzJfU0RBCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDUpCi0jZGVmaW5lIFBDNl9QRl9JMkMyX1NDTAkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQQzdfUEZfVVNCT1RHX0RBVEE1CShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEM4X1BGX1VTQk9UR19EQVRBNgkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBDOV9QRl9VU0JPVEdfREFUQTAJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQQzEwX1BGX1VTQk9UR19EQVRBMgkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQQzExX1BGX1VTQk9UR19EQVRBMQkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQQzEyX1BGX1VTQk9UR19EQVRBNAkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQzEzX1BGX1VTQk9UR19EQVRBMwkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQQzE2X1BGX1NTSTRfRlMJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBDMTdfUEZfU1NJNF9SWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxNykKLSNkZWZpbmUgUEMxOF9QRl9TU0k0X1RYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQQzE5X1BGX1NTSTRfQ0xLCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTkpCi0jZGVmaW5lIFBDMjBfUEZfU1NJMV9GUwkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEMyMV9QRl9TU0kxX1JYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQQzIyX1BGX1NTSTFfVFhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBDMjNfUEZfU1NJMV9DTEsJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEMyNF9QRl9TU0kyX0ZTCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQzI1X1BGX1NTSTJfUlhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjUpCi0jZGVmaW5lIFBDMjZfUEZfU1NJMl9UWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEMyN19QRl9TU0kyX0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQQzI4X1BGX1NTSTNfRlMJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjgpCi0jZGVmaW5lIFBDMjlfUEZfU1NJM19SWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEMzMF9QRl9TU0kzX1RYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDMwKQotI2RlZmluZSBQQzMxX1BGX1NTSTNfQ0xLCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBEMF9BSU5fRkVDX1RYRDAJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMCkKLSNkZWZpbmUgUEQxX0FJTl9GRUNfVFhEMQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAxKQotI2RlZmluZSBQRDJfQUlOX0ZFQ19UWEQyCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDIpCi0jZGVmaW5lIFBEM19BSU5fRkVDX1RYRDMJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMykKLSNkZWZpbmUgUEQ0X0FPVVRfRkVDX1JYX0VSCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDQpCi0jZGVmaW5lIFBENV9BT1VUX0ZFQ19SWEQxCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDUpCi0jZGVmaW5lIFBENl9BT1VUX0ZFQ19SWEQyCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDYpCi0jZGVmaW5lIFBEN19BT1VUX0ZFQ19SWEQzCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDcpCi0jZGVmaW5lIFBEOF9BRl9GRUNfTURJTwkJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BRiB8IDgpCi0jZGVmaW5lIFBEOV9BSU5fRkVDX01EQwkJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgOSkKLSNkZWZpbmUgUEQxMF9BT1VUX0ZFQ19DUlMJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMTApCi0jZGVmaW5lIFBEMTFfQU9VVF9GRUNfVFhfQ0xLCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDExKQotI2RlZmluZSBQRDEyX0FPVVRfRkVDX1JYRDAJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMTIpCi0jZGVmaW5lIFBEMTNfQU9VVF9GRUNfUlhfRFYJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMTMpCi0jZGVmaW5lIFBEMTRfQU9VVF9GRUNfQ0xSCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDE0KQotI2RlZmluZSBQRDE1X0FPVVRfRkVDX0NPTAkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCAxNSkKLSNkZWZpbmUgUEQxNl9BSU5fRkVDX1RYX0VSCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDE2KQotI2RlZmluZSBQRDE3X1BGX0kyQ19EQVRBCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBEMThfUEZfSTJDX0NMSwkJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEQxOV9BRl9VU0JIMl9EQVRBNAkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxOSkKLSNkZWZpbmUgUEQyMF9BRl9VU0JIMl9EQVRBMwkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMCkKLSNkZWZpbmUgUEQyMV9BRl9VU0JIMl9EQVRBNgkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMSkKLSNkZWZpbmUgUEQyMl9BRl9VU0JIMl9EQVRBMAkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMikKLSNkZWZpbmUgUEQyM19BRl9VU0JIMl9EQVRBMgkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMykKLSNkZWZpbmUgUEQyNF9BRl9VU0JIMl9EQVRBMQkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNCkKLSNkZWZpbmUgUEQyNV9QRl9DU1BJMV9SRFkJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMjUpCi0jZGVmaW5lIFBEMjZfUEZfQ1NQSTFfU1MyCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGICB8IDI2KQotI2RlZmluZSBQRDI2X0FGX1VTQkgyX0RBVEE1ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNikKLSNkZWZpbmUgUEQyN19QRl9DU1BJMV9TUzEJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMjcpCi0jZGVmaW5lIFBEMjhfUEZfQ1NQSTFfU1MwCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGICB8IDI4KQotI2RlZmluZSBQRDI5X1BGX0NTUEkxX1NDTEsJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMjkpCi0jZGVmaW5lIFBEMzBfUEZfQ1NQSTFfTUlTTwkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX1BGICB8IDMwKQotI2RlZmluZSBQRDMxX1BGX0NTUEkxX01PU0kJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMzEpCi0jZGVmaW5lIFBGMjNfQUlOX0ZFQ19UWF9FTgkoR1BJT19QT1JURiB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAyMykKLSNkZWZpbmUgUEUwX1BGX1VTQk9UR19OWFQJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAwKQotI2RlZmluZSBQRTFfUEZfVVNCT1RHX1NUUAkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEpCi0jZGVmaW5lIFBFMl9QRl9VU0JPVEdfRElSCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMikKLSNkZWZpbmUgUEUzX1BGX1VBUlQyX0NUUwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMpCi0jZGVmaW5lIFBFNF9QRl9VQVJUMl9SVFMJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA0KQotI2RlZmluZSBQRTZfUEZfVUFSVDJfVFhECShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEU3X1BGX1VBUlQyX1JYRAkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBFOF9QRl9VQVJUM19UWEQJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQRTlfUEZfVUFSVDNfUlhECShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEUxMF9QRl9VQVJUM19DVFMJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEUxMV9QRl9VQVJUM19SVFMJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEUxMl9QRl9VQVJUMV9UWEQJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEUxM19QRl9VQVJUMV9SWEQJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEUxNF9QRl9VQVJUMV9DVFMJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEUxNV9QRl9VQVJUMV9SVFMJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEUxNl9BRl9SVENLCQkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDE2KQotI2RlZmluZSBQRTE2X1BGX1JUQ0sJCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBFMThfUEZfU0RIQzFfRDAJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTgpCi0jZGVmaW5lIFBFMThfQUZfQ1NQSTNfTUlTTwkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19BRiB8IDE4KQotI2RlZmluZSBQRTE5X1BGX1NESEMxX0QxCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE5KQotI2RlZmluZSBQRTIwX1BGX1NESEMxX0QyCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIwKQotI2RlZmluZSBQRTIxX1BGX1NESEMxX0QzCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQRTIxX0FGX0NTUEkzX1NTCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjEpCi0jZGVmaW5lIFBFMjJfUEZfU0RIQzFfQ01ECShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQRTIyX0FGX0NTUEkzX01PU0kJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyMikKLSNkZWZpbmUgUEUyMl9QRl9TREhDMV9DTEsJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBFMjNfQUZfQ1NQSTNfU0NMSwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDIzKQotI2RlZmluZSBQRTI0X1BGX1VTQk9UR19DTEsJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEUyNV9QRl9VU0JPVEdfREFUQTcJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNSkKLSNlbmRpZgotCi0vKiBkZWNvZGUgaXJxIG51bWJlciB0byB1c2Ugd2l0aCBJTVIoeCksIElTUih4KSBhbmQgZnJpZW5kcyAqLwotI2RlZmluZSBJUlFfVE9fUkVHKGlycSkgKChpcnEgLSBNWENfSU5URVJOQUxfSVJRUykgPj4gNSkKLQotI2RlZmluZSBJUlFfR1BJT0EoeCkgIChNWENfR1BJT19JUlFfU1RBUlQgKyB4KQotI2RlZmluZSBJUlFfR1BJT0IoeCkgIChJUlFfR1BJT0EoMzIpICsgeCkKLSNkZWZpbmUgSVJRX0dQSU9DKHgpICAoSVJRX0dQSU9CKDMyKSArIHgpCi0jZGVmaW5lIElSUV9HUElPRCh4KSAgKElSUV9HUElPQygzMikgKyB4KQotI2RlZmluZSBJUlFfR1BJT0UoeCkgIChJUlFfR1BJT0QoMzIpICsgeCkKLQotI2VuZGlmIC8qIF9NWENfR1BJT19NWDFfTVgyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjIzMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisqCisqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyogTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBfTVhDX0lPTVVYX01YMV9ICisjZGVmaW5lIF9NWENfSU9NVVhfTVgxX0gKKworI2lmbmRlZiBHUElPX1BPUlRBCisjZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCisjZW5kaWYKKworLyogRklYTUU6IFRoaXMgbGlzdCBpcyBub3QgY29tcGxldGVkLiBUaGUgY29ycmVjdCBkaXJlY3Rpb25zIGFyZQorKiBtaXNzaW5nIG9uIHNvbWUgKG1hbnkpIHBpbnMKKyovCisKKworLyogUHJpbWFyeSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTBfQUlOX1NQSTJfQ0xLICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAwKQorI2RlZmluZSBQQTBfQUZfRVRNVFJBQ0VTWU5DICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAwKQorI2RlZmluZSBQQTFfQU9VVF9TUEkyX1JYRCAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxKQorI2RlZmluZSBQQTFfUEZfVElOICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQQTJfUEZfUFdNMCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBBM19QRl9DU0lfTUNMSyAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBBNF9QRl9DU0lfRDAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBBNV9QRl9DU0lfRDEgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBBNl9QRl9DU0lfRDIgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBBN19QRl9DU0lfRDMgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBBOF9QRl9DU0lfRDQgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBBOV9QRl9DU0lfRDUgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBBMTBfUEZfQ1NJX0Q2ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQQTExX1BGX0NTSV9ENyAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEExMl9QRl9DU0lfVlNZTkMgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBBMTNfUEZfQ1NJX0hTWU5DICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQQTE0X1BGX0NTSV9QSVhDTEsgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEExNV9QRl9JMkNfU0RBICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEExNl9QRl9JMkNfU0NMICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEExN19BRl9FVE1UUkFDRVBLVDQgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTcpCisjZGVmaW5lIFBBMTdfQUlOX1NQSTJfU1MgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE4X0FGX0VUTVRSQUNFUEtUNSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEExOV9BRl9FVE1UUkFDRVBLVDYgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBBMjBfQUZfRVRNVFJBQ0VQS1Q3ICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIwKQorI2RlZmluZSBQQTIxX1BGX0EwICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEEyMl9QRl9DUzQgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBBMjNfUEZfQ1M1ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQQTI0X1BGX0ExNiAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNCkKKyNkZWZpbmUgUEEyNF9BRl9FVE1UUkFDRVBLVDAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjQpCisjZGVmaW5lIFBBMjVfUEZfQTE3ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQTI1X0FGX0VUTVRSQUNFUEtUMSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNSkKKyNkZWZpbmUgUEEyNl9QRl9BMTggICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjYpCisjZGVmaW5lIFBBMjZfQUZfRVRNVFJBQ0VQS1QyICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI2KQorI2RlZmluZSBQQTI3X1BGX0ExOSAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNykKKyNkZWZpbmUgUEEyN19BRl9FVE1UUkFDRVBLVDMgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjcpCisjZGVmaW5lIFBBMjhfUEZfQTIwICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI4KQorI2RlZmluZSBQQTI4X0FGX0VUTVBJUEVTVEFUMCAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOCkKKyNkZWZpbmUgUEEyOV9QRl9BMjEgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjkpCisjZGVmaW5lIFBBMjlfQUZfRVRNUElQRVNUQVQxICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI5KQorI2RlZmluZSBQQTMwX1BGX0EyMiAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMCkKKyNkZWZpbmUgUEEzMF9BRl9FVE1QSVBFU1RBVDIgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzApCisjZGVmaW5lIFBBMzFfUEZfQTIzICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMxKQorI2RlZmluZSBQQTMxX0FGX0VUTVRSQUNFQ0xLICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMSkKKyNkZWZpbmUgUEI4X1BGX1NEX0RBVDAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgOCkKKyNkZWZpbmUgUEI4X0FGX01TX1BJTyAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgOCkKKyNkZWZpbmUgUEI5X1BGX1NEX0RBVDEgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgOSkKKyNkZWZpbmUgUEI5X0FGX01TX1BJMSAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgOSkKKyNkZWZpbmUgUEIxMF9QRl9TRF9EQVQyICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgMTApCisjZGVmaW5lIFBCMTBfQUZfTVNfU0NMS0kgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEwKQorI2RlZmluZSBQQjExX1BGX1NEX0RBVDMgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEIxMV9BRl9NU19TRElPICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTEpCisjZGVmaW5lIFBCMTJfUEZfU0RfQ0xLICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQQjEyX0FGX01TX1NDTEswICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMikKKyNkZWZpbmUgUEIxM19QRl9TRF9DTUQgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgMTMpCisjZGVmaW5lIFBCMTNfQUZfTVNfQlMgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEzKQorI2RlZmluZSBQQjE0X0FGX1NTSV9SWEZTICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxNCkKKyNkZWZpbmUgUEIxNV9BRl9TU0lfUlhDTEsgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTUpCisjZGVmaW5lIFBCMTZfQUZfU1NJX1JYREFUICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxNikKKyNkZWZpbmUgUEIxN19BRl9TU0lfVFhEQVQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEIxOF9BRl9TU0lfVFhGUyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTgpCisjZGVmaW5lIFBCMTlfQUZfU1NJX1RYQ0xLICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE5KQorI2RlZmluZSBQQjIwX1BGX1VTQkRfQUZFICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMCkKKyNkZWZpbmUgUEIyMV9QRl9VU0JEX09FICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjEpCisjZGVmaW5lIFBCMjJfUEZfVVNCRF9SQ1YgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQjIzX1BGX1VTQkRfU1VTUE5EICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMykKKyNkZWZpbmUgUEIyNF9QRl9VU0JEX1ZQICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjQpCisjZGVmaW5lIFBCMjVfUEZfVVNCRF9WTSAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQjI2X1BGX1VTQkRfVlBPICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNikKKyNkZWZpbmUgUEIyN19QRl9VU0JEX1ZNTyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjcpCisjZGVmaW5lIFBCMjhfUEZfVUFSVDJfQ1RTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBCMjlfUEZfVUFSVDJfUlRTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEIzMF9QRl9VQVJUMl9UWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMCkKKyNkZWZpbmUgUEIzMV9QRl9VQVJUMl9SWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQQzNfUEZfU1NJX1JYRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQQzRfUEZfU1NJX1JYQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQQzVfUEZfU1NJX1JYREFUICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNSkKKyNkZWZpbmUgUEM2X1BGX1NTSV9UWERBVCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQzdfUEZfU1NJX1RYRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQQzhfUEZfU1NJX1RYQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQQzlfUEZfVUFSVDFfQ1RTICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBDMTBfUEZfVUFSVDFfUlRTICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMCkKKyNkZWZpbmUgUEMxMV9QRl9VQVJUMV9UWEQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEMxMl9QRl9VQVJUMV9SWEQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1NQSTFfU1BJX1JEWSAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEMxNF9QRl9TUEkxX1NDTEsgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBDMTVfUEZfU1BJMV9TUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE1KQorI2RlZmluZSBQQzE2X1BGX1NQSTFfTUlTTyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNikKKyNkZWZpbmUgUEMxN19QRl9TUEkxX01PU0kgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTcpCisjZGVmaW5lIFBDMjRfQklOX1VBUlQzX1JJICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQQzI1X0JJTl9VQVJUM19EU1IgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEMyNl9BT1VUX1VBUlQzX0RUUiAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjYpCisjZGVmaW5lIFBDMjdfQklOX1VBUlQzX0RDRCAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQQzI4X0JJTl9VQVJUM19DVFMgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEMyOV9BT1VUX1VBUlQzX1JUUyAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBDMzBfQklOX1VBUlQzX1RYICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCAzMCkKKyNkZWZpbmUgUEMzMV9BT1VUX1VBUlQzX1JYICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBENl9QRl9MU0NMSyAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEQ3X1BGX1JFViAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEQ3X0FGX1VBUlQyX0RUUiAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19JTiB8IDcpCisjZGVmaW5lIFBEN19BSU5fU1BJMl9TQ0xLICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCA3KQorI2RlZmluZSBQRDhfUEZfQ0xTICAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQRDhfQUZfVUFSVDJfRENEICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBEOF9BSU5fU1BJMl9TUyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCA4KQorI2RlZmluZSBQRDlfUEZfUFMgICAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQRDlfQUZfVUFSVDJfUkkgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBEOV9BT1VUX1NQSTJfUlhEICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDkpCisjZGVmaW5lIFBEMTBfUEZfU1BMX1NQUiAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTBfQUZfVUFSVDJfRFNSICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTBfQUlOX1NQSTJfVFhEICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRDExX1BGX0NPTlRSQVNUICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQRDEyX1BGX0FDRF9PRSAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQRDEzX1BGX0xQX0hTWU5DICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQRDE0X1BGX0ZMTV9WU1lOQyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQRDE1X1BGX0xEMCAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQRDE2X1BGX0xEMSAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQRDE3X1BGX0xEMiAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQRDE4X1BGX0xEMyAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQRDE5X1BGX0xENCAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE5KQorI2RlZmluZSBQRDIwX1BGX0xENSAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQRDIxX1BGX0xENiAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQRDIyX1BGX0xENyAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQRDIzX1BGX0xEOCAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQRDI0X1BGX0xEOSAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQRDI1X1BGX0xEMTAgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQRDI2X1BGX0xEMTEgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI2KQorI2RlZmluZSBQRDI3X1BGX0xEMTIgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQRDI4X1BGX0xEMTMgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQRDI5X1BGX0xEMTQgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI5KQorI2RlZmluZSBQRDMwX1BGX0xEMTUgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQRDMxX1BGX1RNUjJPVVQgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAzMSkKKyNkZWZpbmUgUEQzMV9CSU5fU1BJMl9UWEQgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IDMxKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDIxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhYWE5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDIxLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwOSBieSBIb2xnZXIgU2NodXJpZyA8aHM0MjMzQG1haWwubW4tc29sdXRpb25zLmRlPgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgX01YQ19JT01VWF9NWDIxX0gKKyNkZWZpbmUgX01YQ19JT01VWF9NWDIxX0gKKworI2lmbmRlZiBHUElPX1BPUlRBCisjZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCisjZW5kaWYKKworCisvKiBQcmltYXJ5IEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBCMjJfUEZfVVNCSDFfQllQICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQjI1X1BGX1VTQkgxX09OICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNSkKKyNkZWZpbmUgUEM1X1BGX1VTQk9UR19TREEgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEM2X1BGX1VTQk9UR19TQ0wgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEM3X1BGX1VTQk9UR19PTiAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEM4X1BGX1VTQk9UR19GUyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEM5X1BGX1VTQk9UR19PRSAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEMxMF9QRl9VU0JPVEdfVFhETSAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBDMTFfUEZfVVNCT1RHX1RYRFAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQzEyX1BGX1VTQk9UR19SWERNICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEMxM19QRl9VU0JPVEdfUlhEUCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBDMTZfUEZfU0FQX0ZTICAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQQzE3X1BGX1NBUF9SWEQgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNykKKyNkZWZpbmUgUEMxOF9QRl9TQVBfVFhEICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTgpCisjZGVmaW5lIFBDMTlfUEZfU0FQX0NMSyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE5KQorI2RlZmluZSBQRTBfUEZfVEVTVF9XQjIgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAwKQorI2RlZmluZSBQRTFfUEZfVEVTVF9XQjEgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRTJfUEZfVEVTVF9XQjAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyKQorI2RlZmluZSBQRjFfUEZfTkZDRSAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRjNfUEZfTkZDTEUgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQRjdfUEZfTkZJTzAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQRjhfUEZfTkZJTzEgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQRjlfUEZfTkZJTzIgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQRjEwX1BGX05GSU8zICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMCkKKyNkZWZpbmUgUEYxMV9QRl9ORklPNCAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBGMTJfUEZfTkZJTzUgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQRjEzX1BGX05GSU82ICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEYxNF9QRl9ORklPNyAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBGMTZfUEZfUkVTICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE2KQorCisvKiBBbHRlcm5hdGUgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEE1X0FGX0JNSV9DTEtfQ1MgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgNSkKKyNkZWZpbmUgUEE2X0FGX0JNSV9EMCAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgNikKKyNkZWZpbmUgUEE3X0FGX0JNSV9EMSAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgNykKKyNkZWZpbmUgUEE4X0FGX0JNSV9EMiAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgOCkKKyNkZWZpbmUgUEE5X0FGX0JNSV9EMyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgOSkKKyNkZWZpbmUgUEExMF9BRl9CTUlfRDQgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTApCisjZGVmaW5lIFBBMTFfQUZfQk1JX0Q1ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQQTEyX0FGX0JNSV9ENiAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMikKKyNkZWZpbmUgUEExM19BRl9CTUlfRDcgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTMpCisjZGVmaW5lIFBBMTRfQUZfQk1JX0Q4ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE0KQorI2RlZmluZSBQQTE1X0FGX0JNSV9EOSAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNSkKKyNkZWZpbmUgUEExNl9BRl9CTUlfRDEwICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTYpCisjZGVmaW5lIFBBMTdfQUZfQk1JX0QxMSAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3KQorI2RlZmluZSBQQTE4X0FGX0JNSV9EMTIgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEExOV9BRl9CTUlfRDEzICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBBMjBfQUZfQk1JX0QxNCAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIwKQorI2RlZmluZSBQQTIxX0FGX0JNSV9EMTUgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMSkKKyNkZWZpbmUgUEEyMl9BRl9CTUlfUkVBRF9SRVEgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjIpCisjZGVmaW5lIFBBMjNfQUZfQk1JX1dSSVRFICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIzKQorI2RlZmluZSBQQTI5X0FGX0JNSV9SWF9GVUxMICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOSkKKyNkZWZpbmUgUEEzMF9BRl9CTUlfUkVBRCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzApCisKKy8qIEFJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQzE0X0FJTl9TWVNfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEQyMV9BSU5fVVNCSDJfRlMgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBEMjJfQUlOX1VTQkgyX09FICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQRDIzX0FJTl9VU0JIMl9UWERNICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMykKKyNkZWZpbmUgUEQyNF9BSU5fVVNCSDJfVFhEUCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBFOF9BSU5fSVJfVFhEICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBGMF9BSU5fUENfUlNUICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBGMV9BSU5fUENfQ0UxICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEpCisjZGVmaW5lIFBGMl9BSU5fUENfQ0UyICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBGM19BSU5fUENfUE9FICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDMpCisjZGVmaW5lIFBGNF9BSU5fUENfT0UgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDQpCisjZGVmaW5lIFBGNV9BSU5fUENfUlcgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCisKKy8qIEJJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQzE0X0JJTl9TWVNfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEQyN19CSU5fRVhUX0RNQV9HUkFOVCAgKEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjcpCisKKy8qIENJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQjI2X0NJTl9VU0JIMV9SWERBVCAgICAoR1BJT19QT1JUQiB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyNikKKworLyogQU9VVCBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTI5X0FPVVRfQk1JX1dBSVQgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEQxOV9BT1VUX1VTQkgyX1JYRE0gICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTkpCisjZGVmaW5lIFBEMjBfQU9VVF9VU0JIMl9SWERQICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDIwKQorI2RlZmluZSBQRDI1X0FPVVRfRVhUX0RNQVJFUSAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyNSkKKyNkZWZpbmUgUEQyNl9BT1VUX1VTQk9UR19SWERBVCAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjYpCisjZGVmaW5lIFBFOV9BT1VUX0lSX1JYRCAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDkpCisjZGVmaW5lIFBGNl9BT1VUX1BDX0JWRDIgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDYpCisjZGVmaW5lIFBGN19BT1VUX1BDX0JWRDEgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDcpCisjZGVmaW5lIFBGOF9BT1VUX1BDX1ZTMiAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDgpCisjZGVmaW5lIFBGOV9BT1VUX1BDX1ZTMSAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDkpCisjZGVmaW5lIFBGMTBfQU9VVF9QQ19XUCAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEwKQorI2RlZmluZSBQRjExX0FPVVRfUENfUkVBRFkgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMSkKKyNkZWZpbmUgUEYxMl9BT1VUX1BDX1dBSVQgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTIpCisjZGVmaW5lIFBGMTNfQU9VVF9QQ19DRDIgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEzKQorI2RlZmluZSBQRjE0X0FPVVRfUENfQ0QxICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNCkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzE1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNy5oCkBAIC0wLDAgKzEsMjA3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisqIENvcHlyaWdodCAoQykgMjAwOSBieSBIb2xnZXIgU2NodXJpZyA8aHM0MjMzQG1haWwubW4tc29sdXRpb25zLmRlPgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgX01YQ19JT01VWF9NWDI3X0gKKyNkZWZpbmUgX01YQ19JT01VWF9NWDI3X0gKKworI2lmbmRlZiBHUElPX1BPUlRBCisjZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCisjZW5kaWYKKworCisvKiBQcmltYXJ5IEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBMF9QRl9VU0JIMl9DTEsgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDApCisjZGVmaW5lIFBBMV9QRl9VU0JIMl9ESVIgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBBMl9QRl9VU0JIMl9EQVRBNyAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBBM19QRl9VU0JIMl9OWFQgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBBNF9QRl9VU0JIMl9TVFAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBCMjJfUEZfVVNCSDFfU1VTUCAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQjI1X1BGX1VTQkgxX1JDViAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNSkKKyNkZWZpbmUgUEM1X1BGX0kyQzJfU0RBICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDUpCisjZGVmaW5lIFBDNl9QRl9JMkMyX1NDTCAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA2KQorI2RlZmluZSBQQzdfUEZfVVNCT1RHX0RBVEE1ICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBDOF9QRl9VU0JPVEdfREFUQTYgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEM5X1BGX1VTQk9UR19EQVRBMCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQzEwX1BGX1VTQk9UR19EQVRBMiAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQzExX1BGX1VTQk9UR19EQVRBMSAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQzEyX1BGX1VTQk9UR19EQVRBNCAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1VTQk9UR19EQVRBMyAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQQzE2X1BGX1NTSTRfRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTYpCisjZGVmaW5lIFBDMTdfUEZfU1NJNF9SWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxNykKKyNkZWZpbmUgUEMxOF9QRl9TU0k0X1RYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE4KQorI2RlZmluZSBQQzE5X1BGX1NTSTRfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTkpCisjZGVmaW5lIFBDMjVfQUZfR1BUNV9USU4gICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI1KQorI2RlZmluZSBQQzI3X0FGX0dQVDRfVElOICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyNykKKyNkZWZpbmUgUEQwX1BGX1NEM19DTUQgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMCkKKyNkZWZpbmUgUEQxX1BGX1NEM19DTEsgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEQyX1BGX0FUQV9EQVRBMCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMikKKyNkZWZpbmUgUEQzX1BGX0FUQV9EQVRBMSAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEQ0X1BGX0FUQV9EQVRBMiAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEQ1X1BGX0FUQV9EQVRBMyAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEQ2X1BGX0FUQV9EQVRBNCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEQ3X1BGX0FUQV9EQVRBNSAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEQ4X1BGX0FUQV9EQVRBNiAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEQ5X1BGX0FUQV9EQVRBNyAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEQxMF9QRl9BVEFfREFUQTggICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBEMTFfUEZfQVRBX0RBVEE5ICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQRDEyX1BGX0FUQV9EQVRBMTAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEQxM19QRl9BVEFfREFUQTExICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBEMTRfUEZfQVRBX0RBVEExMiAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQRDE1X1BGX0FUQV9EQVRBMTMgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxNSkKKyNkZWZpbmUgUEQxNl9QRl9BVEFfREFUQTE0ICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTYpCisjZGVmaW5lIFBFMF9QRl9VU0JPVEdfTlhUICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEUxX1BGX1VTQk9UR19TVFAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxKQorI2RlZmluZSBQRTJfUEZfVVNCT1RHX0RJUiAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBFMjRfUEZfVVNCT1RHX0NMSyAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBFMjVfUEZfVVNCT1RHX0RBVEE3ICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBGMV9QRl9ORkNMRSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBGM19QRl9ORkNFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBGN19QRl9QQ19QT0UgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBGOF9QRl9QQ19SVyAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBGOV9QRl9QQ19JT0lTMTYgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBGMTBfUEZfUENfUlNUICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQRjExX1BGX1BDX0JWRDIgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEYxMl9QRl9QQ19CVkQxICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBGMTNfUEZfUENfVlMyICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQRjE0X1BGX1BDX1ZTMSAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEYxNl9QRl9QQ19QV1JPTiAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTYpCisjZGVmaW5lIFBGMTdfUEZfUENfUkVBRFkgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE3KQorI2RlZmluZSBQRjE4X1BGX1BDX1dBSVQgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxOCkKKyNkZWZpbmUgUEYxOV9QRl9QQ19DRDIgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTkpCisjZGVmaW5lIFBGMjBfUEZfUENfQ0QxICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIwKQorI2RlZmluZSBQRjIzX1BGX0FUQV9EQVRBMTUgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMykKKworLyogQWx0ZXJuYXRlIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBCNF9BRl9NU0hDX0RBVEEwICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgNCkKKyNkZWZpbmUgUEI1X0FGX01TSENfREFUQTEgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQQjZfQUZfTVNIQ19EQVRBMiAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBCN19BRl9NU0hDX0RBVEE0ICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEI4X0FGX01TSENfQlMgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQjlfQUZfTVNIQ19TQ0xLICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBCMTBfQUZfVUFSVDZfVFhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBCMTFfQUZfVUFSVDZfUlhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxMSkKKyNkZWZpbmUgUEIxMl9BRl9VQVJUNl9DVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEIxM19BRl9VQVJUNl9SVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDEzKQorI2RlZmluZSBQQjE4X0FGX1VBUlQ1X1RYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQQjE5X0FGX1VBUlQ1X1JYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTkpCisjZGVmaW5lIFBCMjBfQUZfVUFSVDVfQ1RTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBCMjFfQUZfVUFSVDVfUlRTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAyMSkKKyNkZWZpbmUgUEM4X0FGX0ZFQ19NRElPICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgR1BJT19JTiB8IDgpCisjZGVmaW5lIFBDMjRfQUZfR1BUNV9UT1VUICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI0KQorI2RlZmluZSBQQzI2X0FGX0dQVDRfVE9VVCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyNikKKyNkZWZpbmUgUEQxX0FGX0VUTVRSQUNFX1BLVDE1ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMSkKKyNkZWZpbmUgUEQ2X0FGX0VUTVRSQUNFX1BLVDE0ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgNikKKyNkZWZpbmUgUEQ3X0FGX0VUTVRSQUNFX1BLVDEzICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgNykKKyNkZWZpbmUgUEQ5X0FGX0VUTVRSQUNFX1BLVDEyICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgOSkKKyNkZWZpbmUgUEQyX0FGX1NEM19EMCAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMikKKyNkZWZpbmUgUEQzX0FGX1NEM19EMSAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMykKKyNkZWZpbmUgUEQ0X0FGX1NEM19EMiAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgNCkKKyNkZWZpbmUgUEQ1X0FGX1NEM19EMyAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgNSkKKyNkZWZpbmUgUEQ4X0FGX0ZFQ19NRElPICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19JTiB8IDgpCisjZGVmaW5lIFBEMTBfQUZfRVRNVFJBQ0VfUEtUMTEgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDEwKQorI2RlZmluZSBQRDExX0FGX0VUTVRSQUNFX1BLVDEwICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxMSkKKyNkZWZpbmUgUEQxMl9BRl9FVE1UUkFDRV9QS1Q5ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBEMTNfQUZfRVRNVFJBQ0VfUEtUOCAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDEzKQorI2RlZmluZSBQRDE0X0FGX0VUTVRSQUNFX1BLVDcgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxNCkKKyNkZWZpbmUgUEQxNV9BRl9FVE1UUkFDRV9QS1Q2ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTUpCisjZGVmaW5lIFBEMTZfQUZfRVRNVFJBQ0VfUEtUNSAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDE2KQorI2RlZmluZSBQRjFfQUZfRVRNVFJBQ0VfUEtUMCAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxKQorI2RlZmluZSBQRjNfQUZfRVRNVFJBQ0VfUEtUMiAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAzKQorI2RlZmluZSBQRjVfQUZfRVRNUElQRVNUQVQxMSAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCA1KQorI2RlZmluZSBQRjdfQUZfQVRBX0JVRkZFUl9FTiAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCA3KQorI2RlZmluZSBQRjhfQUZfQVRBX0lPUkRZICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCA4KQorI2RlZmluZSBQRjlfQUZfQVRBX0lOVFJRICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCA5KQorI2RlZmluZSBQRjEwX0FGX0FUQV9SRVNFVCAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxMCkKKyNkZWZpbmUgUEYxMV9BRl9BVEFfRE1BQ0sgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTEpCisjZGVmaW5lIFBGMTJfQUZfQVRBX0RNQVJFUSAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEyKQorI2RlZmluZSBQRjEzX0FGX0FUQV9EQTAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxMykKKyNkZWZpbmUgUEYxNF9BRl9BVEFfREExICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBGMTVfQUZfRVRNVFJBQ0VfU1lOQyAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE1KQorI2RlZmluZSBQRjE2X0FGX0FUQV9EQTIgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNikKKyNkZWZpbmUgUEYxN19BRl9BVEFfQ1MwICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTcpCisjZGVmaW5lIFBGMThfQUZfQVRBX0NTMSAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE4KQorI2RlZmluZSBQRjE5X0FGX0FUQV9ESU9XICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEYyMF9BRl9BVEFfRElPUiAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMjApCisjZGVmaW5lIFBGMjJfQUZfRVRNVFJBQ0VfQ0xLICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDIyKQorI2RlZmluZSBQRjIzX0FGX0VUTVRSQUNFX1BLVDQgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAyMykKKworLyogQUlOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBDMTRfQUlOX1NTSTFfTUNMSyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQQzE1X0FJTl9HUFQ2X1RPVVQgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEQwX0FJTl9GRUNfVFhEMCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEQxX0FJTl9GRUNfVFhEMSAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMSkKKyNkZWZpbmUgUEQyX0FJTl9GRUNfVFhEMiAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEQzX0FJTl9GRUNfVFhEMyAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMykKKyNkZWZpbmUgUEQ5X0FJTl9GRUNfTURDICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEQxNl9BSU5fRkVDX1RYX0VSICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBEMjdfQUlOX0VYVF9ETUFfR1JBTlQgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQRjIzX0FJTl9GRUNfVFhfRU4gICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMykKKworLyogQklOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBDMTRfQklOX1NTSTJfTUNMSyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDE0KQorCisvKiBDSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEQyX0NJTl9TTENEQzFfREFUMCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEQzX0NJTl9TTENEQzFfREFUMSAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMykKKyNkZWZpbmUgUEQ0X0NJTl9TTENEQzFfREFUMiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNCkKKyNkZWZpbmUgUEQ1X0NJTl9TTENEQzFfREFUMyAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEQ2X0NJTl9TTENEQzFfREFUNCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEQ3X0NJTl9TTENEQzFfREFUNSAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEQ4X0NJTl9TTENEQzFfREFUNiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEQ5X0NJTl9TTENEQzFfREFUNyAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEQxMF9DSU5fU0xDREMxX0RBVDggICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTFfQ0lOX1NMQ0RDMV9EQVQ5ICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQRDEyX0NJTl9TTENEQzFfREFUMTAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEQxM19DSU5fU0xDREMxX0RBVDExICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBEMTRfQ0lOX1NMQ0RDMV9EQVQxMiAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQRDE1X0NJTl9TTENEQzFfREFUMTMgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEQxNl9DSU5fU0xDREMxX0RBVDE0ICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBEMjNfQ0lOX1NMQ0RDMV9EQVQxNSAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQRjI3X0NJTl9FWFRfRE1BX0dSQU5UICAoR1BJT19QT1JURiB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyNykKKy8qIExDRENfVEVTVHggb24gUEJ4eCBvbWl0dGVkLCBiZWNhdXNlIGl0J3Mgbm90IGNsZWFyIHdoYXQgdGhleSBkbyAqLworCisvKiBBT1VUIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBDMTRfQU9VVF9HUFQ2X1RJTiAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE0KQorI2RlZmluZSBQRDRfQU9VVF9GRUNfUlhfRVIgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA0KQorI2RlZmluZSBQRDVfQU9VVF9GRUNfUlhEMSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA1KQorI2RlZmluZSBQRDZfQU9VVF9GRUNfUlhEMiAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA2KQorI2RlZmluZSBQRDdfQU9VVF9GRUNfUlhEMyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA3KQorI2RlZmluZSBQRDEwX0FPVVRfRkVDX0NSUyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMCkKKyNkZWZpbmUgUEQxMV9BT1VUX0ZFQ19UWF9DTEsgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTEpCisjZGVmaW5lIFBEMTJfQU9VVF9GRUNfUlhEMCAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEyKQorI2RlZmluZSBQRDEzX0FPVVRfRkVDX1JYX0RWICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMykKKyNkZWZpbmUgUEQxNF9BT1VUX0ZFQ19SWF9DTEsgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTQpCisjZGVmaW5lIFBEMTVfQU9VVF9GRUNfQ09MICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE1KQorCisjZGVmaW5lIFBDMTdfQk9VVF9QQ19JT0lTMTYgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDE3KQorI2RlZmluZSBQQzE4X0JPVVRfUENfQlZEMiAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAxOCkKKyNkZWZpbmUgUEMxOV9CT1VUX1BDX0JWRDEgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMTkpCisjZGVmaW5lIFBDMjhfQk9VVF9QQ19CVkQyICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDI4KQorI2RlZmluZSBQQzI5X0JPVVRfUENfVlMxICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEMzMF9CT1VUX1BDX1JFQURZICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMzApCisjZGVmaW5lIFBDMzFfQk9VVF9QQ19XQUlUICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDMxKQorCisKKyNlbmRpZiAvKiBfTVhDX0dQSU9fTVgxX01YMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjVhZTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MnguaApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKiBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9NWENfSU9NVVhfTVgyeF9ICisjZGVmaW5lIF9NWENfSU9NVVhfTVgyeF9ICisKKyNpZm5kZWYgR1BJT19QT1JUQQorI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAorI2VuZGlmCisKKworLyogUHJpbWFyeSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTVfUEZfTFNDTEsgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDUpCisjZGVmaW5lIFBBNl9QRl9MRDAgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEE3X1BGX0xEMSAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQThfUEZfTEQyICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBBOV9QRl9MRDMgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEExMF9QRl9MRDQgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEExMV9QRl9MRDUgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEExMl9QRl9MRDYgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEExM19QRl9MRDcgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEExNF9QRl9MRDggICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEExNV9QRl9MRDkgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEExNl9QRl9MRDEwICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEExN19QRl9MRDExICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEExOF9QRl9MRDEyICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEExOV9QRl9MRDEzICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEEyMF9QRl9MRDE0ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgUEEyMV9QRl9MRDE1ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEEyMl9QRl9MRDE2ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEEyM19QRl9MRDE3ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMykKKyNkZWZpbmUgUEEyNF9QRl9SRVYgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEEyNV9QRl9DTFMgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEEyNl9QRl9QUyAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEEyN19QRl9TUExfU1BSICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEEyOF9QRl9IU1lOQyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEEyOV9QRl9WU1lOQyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEEzMF9QRl9DT05UUkFTVCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMCkKKyNkZWZpbmUgUEEzMV9QRl9PRV9BQ0QgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMSkKKyNkZWZpbmUgUEI0X1BGX1NEMl9EMCAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEI1X1BGX1NEMl9EMSAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEI2X1BGX1NEMl9EMiAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEI3X1BGX1NEMl9EMyAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEI4X1BGX1NEMl9DTUQgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEI5X1BGX1NEMl9DTEsgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEIxMF9QRl9DU0lfRDAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEIxMV9QRl9DU0lfRDEgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEIxMl9QRl9DU0lfRDIgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEIxM19QRl9DU0lfRDMgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEIxNF9QRl9DU0lfRDQgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEIxNV9QRl9DU0lfTUNMSyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEIxNl9QRl9DU0lfUElYQ0xLICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEIxN19QRl9DU0lfRDUgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEIxOF9QRl9DU0lfRDYgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEIxOV9QRl9DU0lfRDcgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEIyMF9QRl9DU0lfVlNZTkMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgUEIyMV9QRl9DU0lfSFNZTkMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEIyM19QRl9VU0JfUFdSICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBCMjRfUEZfVVNCX09DICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQorI2RlZmluZSBQQjI2X1BGX1VTQkgxX0ZTICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNikKKyNkZWZpbmUgUEIyN19QRl9VU0JIMV9PRSAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjcpCisjZGVmaW5lIFBCMjhfUEZfVVNCSDFfVFhETSAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI4KQorI2RlZmluZSBQQjI5X1BGX1VTQkgxX1RYRFAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyOSkKKyNkZWZpbmUgUEIzMF9QRl9VU0JIMV9SWERNICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMzApCisjZGVmaW5lIFBCMzFfUEZfVVNCSDFfUlhEUCAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDMxKQorI2RlZmluZSBQQzE0X1BGX1RPVVQgICAgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEMxNV9QRl9USU4gICAgICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBDMjBfUEZfU1NJMV9GUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMCkKKyNkZWZpbmUgUEMyMV9QRl9TU0kxX1JYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIxKQorI2RlZmluZSBQQzIyX1BGX1NTSTFfVFhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjIpCisjZGVmaW5lIFBDMjNfUEZfU1NJMV9DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMykKKyNkZWZpbmUgUEMyNF9QRl9TU0kyX0ZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI0KQorI2RlZmluZSBQQzI1X1BGX1NTSTJfUlhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjUpCisjZGVmaW5lIFBDMjZfUEZfU1NJMl9UWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgUEMyN19QRl9TU0kyX0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI3KQorI2RlZmluZSBQQzI4X1BGX1NTSTNfRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjgpCisjZGVmaW5lIFBDMjlfUEZfU1NJM19SWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEMzMF9QRl9TU0kzX1RYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDMwKQorI2RlZmluZSBQQzMxX1BGX1NTSTNfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBEMTdfUEZfSTJDX0RBVEEgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBEMThfUEZfSTJDX0NMSyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBEMTlfUEZfQ1NQSTJfU1MyICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDE5KQorI2RlZmluZSBQRDIwX1BGX0NTUEkyX1NTMSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMCkKKyNkZWZpbmUgUEQyMV9QRl9DU1BJMl9TUzAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjEpCisjZGVmaW5lIFBEMjJfUEZfQ1NQSTJfU0NMSyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQRDIzX1BGX0NTUEkyX01JU08gICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMykKKyNkZWZpbmUgUEQyNF9QRl9DU1BJMl9NT1NJICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjQpCisjZGVmaW5lIFBEMjVfUEZfQ1NQSTFfUkRZICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBEMjZfUEZfQ1NQSTFfU1MyICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjYpCisjZGVmaW5lIFBEMjdfUEZfQ1NQSTFfU1MxICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBEMjhfUEZfQ1NQSTFfU1MwICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBEMjlfUEZfQ1NQSTFfU0NMSyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjkpCisjZGVmaW5lIFBEMzBfUEZfQ1NQSTFfTUlTTyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMCkKKyNkZWZpbmUgUEQzMV9QRl9DU1BJMV9NT1NJICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMSkKKyNkZWZpbmUgUEUzX1BGX1VBUlQyX0NUUyAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzKQorI2RlZmluZSBQRTRfUEZfVUFSVDJfUlRTICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNCkKKyNkZWZpbmUgUEU1X1BGX1BXTU8gICAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEU2X1BGX1VBUlQyX1RYRCAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQRTdfUEZfVUFSVDJfUlhEICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNykKKyNkZWZpbmUgUEU4X1BGX1VBUlQzX1RYRCAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQRTlfUEZfVUFSVDNfUlhEICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgOSkKKyNkZWZpbmUgUEUxMF9QRl9VQVJUM19DVFMgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEUxMV9QRl9VQVJUM19SVFMgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDExKQorI2RlZmluZSBQRTEyX1BGX1VBUlQxX1RYRCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQRTEzX1BGX1VBUlQxX1JYRCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTMpCisjZGVmaW5lIFBFMTRfUEZfVUFSVDFfQ1RTICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBFMTVfUEZfVUFSVDFfUlRTICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxNSkKKyNkZWZpbmUgUEUxNl9QRl9SVENLICAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEUxN19QRl9SRVNFVF9PVVQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTcpCisjZGVmaW5lIFBFMThfUEZfU0QxX0QwICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE4KQorI2RlZmluZSBQRTE5X1BGX1NEMV9EMSAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEUyMF9QRl9TRDFfRDIgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjApCisjZGVmaW5lIFBFMjFfUEZfU0QxX0QzICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQRTIyX1BGX1NEMV9DTUQgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMikKKyNkZWZpbmUgUEUyM19QRl9TRDFfQ0xLICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBGMF9QRl9OUkZCICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDApCisjZGVmaW5lIFBGMl9QRl9ORldQICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBGNF9QRl9ORkFMRSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBGNV9QRl9ORlJFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBGNl9QRl9ORldFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBGMTVfUEZfQ0xLTyAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE1KQorI2RlZmluZSBQRjIxX1BGX0NTNCAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEYyMl9QRl9DUzUgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMjIpCisKKy8qIEFsdGVybmF0ZSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQjI2X0FGX1VBUlQ0X1JUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMjYpCisjZGVmaW5lIFBCMjhfQUZfVUFSVDRfVFhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBCMjlfQUZfVUFSVDRfQ1RTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjkpCisjZGVmaW5lIFBCMzFfQUZfVUFSVDRfUlhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAzMSkKKyNkZWZpbmUgUEMyOF9BRl9TTENEQzJfRDAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjgpCisjZGVmaW5lIFBDMjlfQUZfU0xDREMyX1JTICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI5KQorI2RlZmluZSBQQzMwX0FGX1NMQ0RDMl9DUyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAzMCkKKyNkZWZpbmUgUEMzMV9BRl9TTENEQzJfQ0xLICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMzEpCisjZGVmaW5lIFBEMTlfQUZfVVNCSDJfREFUQTQgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDE5KQorI2RlZmluZSBQRDIwX0FGX1VTQkgyX0RBVEEzICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMCkKKyNkZWZpbmUgUEQyMV9BRl9VU0JIMl9EQVRBNiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjEpCisjZGVmaW5lIFBEMjJfQUZfVVNCSDJfREFUQTAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDIyKQorI2RlZmluZSBQRDIzX0FGX1VTQkgyX0RBVEEyICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMykKKyNkZWZpbmUgUEQyNF9BRl9VU0JIMl9EQVRBMSAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjQpCisjZGVmaW5lIFBEMjZfQUZfVVNCSDJfREFUQTUgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDI2KQorI2RlZmluZSBQRTBfQUZfS1BfQ09MNiAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCAwKQorI2RlZmluZSBQRTFfQUZfS1BfUk9XNiAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCAxKQorI2RlZmluZSBQRTJfQUZfS1BfUk9XNyAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCAyKQorI2RlZmluZSBQRTNfQUZfS1BfQ09MNyAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCAzKQorI2RlZmluZSBQRTRfQUZfS1BfUk9XNyAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCA0KQorI2RlZmluZSBQRTZfQUZfS1BfQ09MNiAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCA2KQorI2RlZmluZSBQRTdfQUZfS1BfUk9XNiAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCA3KQorI2RlZmluZSBQRTE2X0FGX09XSVJFICAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCAxNikKKyNkZWZpbmUgUEUxOF9BRl9DU1BJM19NSVNPICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19JTiB8IDE4KQorI2RlZmluZSBQRTIxX0FGX0NTUEkzX1NTICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQRTIyX0FGX0NTUEkzX01PU0kgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQRTIzX0FGX0NTUEkzX1NDTEsgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDIzKQorCisvKiBBSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEE2X0FJTl9TTENEQzFfREFUMCAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEE3X0FJTl9TTENEQzFfREFUMSAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEE4X0FJTl9TTENEQzFfREFUMiAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEEwX0FJTl9TTENEQzFfREFUMyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEExMV9BSU5fU0xDREMxX0RBVDUgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBBMTNfQUlOX1NMQ0RDMV9EQVQ3ICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQQTE1X0FJTl9TTENEQzFfREFUOSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEExN19BSU5fU0xDREMxX0RBVDExICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBBMTlfQUlOX1NMQ0RDMV9EQVQxMyAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE5KQorI2RlZmluZSBQQTIxX0FJTl9TTENEQzFfREFUMTUgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEEyMl9BSU5fRVhUX0RNQUdSQU5UICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIFBBMjRfQUlOX1NMQ0RDMV9EMCAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQQTI1X0FJTl9TTENEQzFfUlMgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEEyNl9BSU5fU0xDREMxX0NTICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjYpCisjZGVmaW5lIFBBMjdfQUlOX1NMQ0RDMV9DTEsgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQQjZfQUlOX1NMQ0RDMV9EMCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQjdfQUlOX1NMQ0RDMV9SUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQjhfQUlOX1NMQ0RDMV9DUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQjlfQUlOX1NMQ0RDMV9DTEsgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQjI1X0FJTl9TTENEQzFfREFUMCAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEIyNl9BSU5fU0xDREMxX0RBVDEgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjYpCisjZGVmaW5lIFBCMjdfQUlOX1NMQ0RDMV9EQVQyICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQQjI4X0FJTl9TTENEQzFfREFUMyAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEIyOV9BSU5fU0xDREMxX0RBVDQgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjkpCisjZGVmaW5lIFBCMzBfQUlOX1NMQ0RDMV9EQVQ1ICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQQjMxX0FJTl9TTENEQzFfREFUNiAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAzMSkKKyNkZWZpbmUgUEM1X0FJTl9TTENEQzFfREFUNyAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEM2X0FJTl9TTENEQzFfREFUOCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEM3X0FJTl9TTENEQzFfREFUOSAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEM4X0FJTl9TTENEQzFfREFUMTAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEM5X0FJTl9TTENEQzFfREFUMTEgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEMxMF9BSU5fU0xDREMxX0RBVDEyICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBDMTFfQUlOX1NMQ0RDMV9EQVQxMyAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQzEyX0FJTl9TTENEQzFfREFUMTQgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEMxM19BSU5fU0xDREMxX0RBVDE1ICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBFNV9BSU5fUENfU1BLT1VUICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCisKKy8qIEJJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQRTVfQklOX1RPVVQyICAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCA1KQorCisvKiBDSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEExNF9DSU5fU0xDREMxX0RBVDAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBBMTVfQ0lOX1NMQ0RDMV9EQVQxICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQTE2X0NJTl9TTENEQzFfREFUMiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEExN19DSU5fU0xDREMxX0RBVDMgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBBMThfQ0lOX1NMQ0RDMV9EQVQ0ICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQQTE5X0NJTl9TTENEQzFfREFUNSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEEyMF9DSU5fU0xDREMxX0RBVDYgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBBMjFfQ0lOX1NMQ0RDMV9EQVQ3ICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQQjMwX0NJTl9VQVJUNF9DVFMgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAzMCkKKyNkZWZpbmUgUEU1X0NJTl9UT1VUMyAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNSkKKworLyogQU9VVCBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQjI5X0FPVVRfVUFSVDRfUlhEICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEIzMV9BT1VUX1VBUlQ0X1JUUyAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBDOF9BT1VUX1VTQk9UR19UWFJfSU5UIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDgpCisjZGVmaW5lIFBDMTVfQU9VVF9XS0dEICAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE1KQorI2RlZmluZSBQRjIxX0FPVVRfRFRBQ0sgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyMSkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaAppbmRleCBjOTE5OGMwLi5hYjgzOGNmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaApAQCAtOTIsNyArOTIsNyBAQAogCU1VWF9FWFRETUFSRVEyX01CWF9TRUwJCT0gMSA8PCAxNSwKIAlNVVhfVEFNUEVSX0RFVEVDVF9FTgkJPSAxIDw8IDE2LAogCU1VWF9QR1BfVVNCXzRXSVJFCQk9IDEgPDwgMTcsCi0JTVVYX1BHQl9VU0JfQ09NTU9OCQk9IDEgPDwgMTgsCisJTVVYX1BHUF9VU0JfQ09NTU9OCQk9IDEgPDwgMTgsCiAJTVVYX1NESENfTUVNU1RJQ0sxCQk9IDEgPDwgMTksCiAJTVVYX1NESENfTUVNU1RJQ0syCQk9IDEgPDwgMjAsCiAJTVVYX1BHUF9TUExMX0JZUAkJPSAxIDw8IDIxLApAQCAtMTA5LDIxICsxMDksNDQgQEAKIH07CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMvZGlzYWJsZXMgdGhlIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbiBmb3IgYSBwYXJ0aWN1bGFyCi0gKiBzaWduYWwuCisgKiBzZXR1cHMgYSBzaW5nbGUgcGluOgorICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCisgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgorICogCS0gaWYgdGhlIHBpbiBpcyBjb25maWd1cmVkIGFzIGEgR1BJTywgd2UgY2xhaW0gaXQgdGhyb3VnIGtlcm5lbCBncGlvbGliCiAgKi8KLXZvaWQgaW9tdXhfY29uZmlnX2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMgLCBib29sKTsKK2ludCBteGNfaW9tdXhfc2V0dXBfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKTsKKy8qCisgKiBzZXR1cHMgbXV0bGlwbGUgcGlucworICogY29udmVuaWVudCB3YXkgdG8gY2FsbCB0aGUgYWJvdmUgZnVuY3Rpb24gd2l0aCB0YWJsZXMKKyAqLworaW50IG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAorCQljb25zdCBjaGFyICpsYWJlbCk7CiAKIC8qCi0gKiBzZXQgdGhlIG1vZGUgZm9yIGEgSU9NVVggcGluLgorICogcmVsZWFzZXMgYSBzaW5nbGUgcGluOgorICogCS0gbWFrZSBpdCBhdmFpbGFibGUgZm9yIGEgZnV0dXJlIHVzZSBieSBhbm90aGVyIGRyaXZlcgorICogCS0gZnJlZXMgdGhlIEdQSU8gaWYgdGhlIHBpbiB3YXMgY29uZmlndXJlZCBhcyBHUElPCisgKiAJLSBET0VTIE5PVCByZWNvbmZpZ3VyZSB0aGUgSU9NVVggaW4gaXRzIHJlc2V0IHN0YXRlCiAgKi8KLWludCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQpOwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbik7CisvKgorICogcmVsZWFzZXMgbXVsdGlwbGUgcGlucworICogY29udmVudmllbnQgd2F5IHRvIGNhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uIHdpdGggdGFibGVzCisgKi8KK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhcgogICogc2lnbmFsLgogICovCi12b2lkIG14Y19pb211eF9zZXRfZ3ByKGVudW0gaW9tdXhfZ3BfZnVuYywgYm9vbCk7Cit2b2lkIG14Y19pb211eF9zZXRfZ3ByKGVudW0gaW9tdXhfZ3BfZnVuYywgYm9vbCBlbik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY29uZmlndXJlcyB0aGUgaW9tdXggaGFyZHdhcmUuCisgKiBJdCBpcyBjYWxsZWQgYnkgdGhlIHNldHVwIGZ1bmN0aW9ucyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYW55bW9yZS4KKyAqIEl0IGlzIGhlcmUgdmlzaWJsZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICovCitpbnQgbXhjX2lvbXV4X21vZGUodW5zaWduZWQgaW50IHBpbl9tb2RlKTsKIAogI2RlZmluZSBJT01VWF9QQUROVU1fTUFTSwkweDFmZgogI2RlZmluZSBJT01VWF9HUElPTlVNX1NISUZUCTkKQEAgLTE0NCw2ICsxNjcsMTEgQEAKIAlNWENfR1BJT19JUlFfU1RBUlQpCiAKIC8qCisgKiBUaGUgbnVtYmVyIG9mIGdwaW8gZGV2aWNlcyBhbW9uZyB0aGUgcGFkcworICovCisjZGVmaW5lIEdQSU9fUE9SVF9NQVggMworCisvKgogICogVGhpcyBlbnVtZXJhdGlvbiBpcyBjb25zdHJ1Y3RlZCBiYXNlZCBvbiB0aGUgU2VjdGlvbgogICogInN3X3BhZF9jdGwgJiBzd19tdXhfY3RsIGRldGFpbHMiIG9mIHRoZSBNWDMxIElDIFNwZWMuIEVhY2ggZW51bWVyYXRlZAogICogdmFsdWUgaXMgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZS4KQEAgLTQ4MCw2ICs1MDgsOSBAQAogCU1YMzFfUElOX0NBUFRVUkUJPSBJT01VWF9QSU4oIDcsICAgMzI3KSwKIH07CiAKKyNkZWZpbmUgUElOX01BWCAzMjcKKyNkZWZpbmUgTkJfUE9SVFMgMTIgLyogTkJfUElOUy8zMiwgd2UgY2hvc2UgMzIgcGlucyBwZXIgIlBPUlQiICovCisKIC8qCiAgKiBDb252ZW5pZW5jZSB2YWx1ZXMgZm9yIHVzZSB3aXRoIG14Y19pb211eF9tb2RlKCkKICAqCkBAIC01MDcsNyArNTM4LDkgQEAKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1MxX19TUzEJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MxLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1MyX19TUzIJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MyLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfTU9TSV9fTU9TSQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX01PU0ksIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9DU1BJMl9NT1NJX19TQ0wJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NT1NJLCBJT01VWF9DT05GSUdfQUxUMSkKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfTUlTT19fTUlTTwlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX01JU08sIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9DU1BJMl9NSVNPX19TREEJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NSVNPLCBJT01VWF9DT05GSUdfQUxUMSkKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfU0NMS19fU0NMSwlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX1NDTEssIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9DU1BJMl9TUElfUkRZX19TUElfUkRZCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfU1BJX1JEWSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX1NTMF9fU1MwCQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX1NTMCwgSU9NVVhfQ09ORklHX0ZVTkMpCkBAIC01MjUsNiArNTU4LDMzIEBACiAjZGVmaW5lIE1YMzFfUElOX1NEMV9EQVRBMF9fU0QxX0RBVEEwCUlPTVVYX01PREUoTVgzMV9QSU5fU0QxX0RBVEEwLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fU0QxX0NMS19fU0QxX0NMSwlJT01VWF9NT0RFKE1YMzFfUElOX1NEMV9DTEssIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9TRDFfQ01EX19TRDFfQ01ECUlPTVVYX01PREUoTVgzMV9QSU5fU0QxX0NNRCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMF9fTEQwCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMV9fTEQxCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMl9fTEQyCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEM19fTEQzCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xENF9fTEQ0CQlJT01VWF9NT0RFKE1YMzFfUElOX0xENCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xENV9fTEQ1CQlJT01VWF9NT0RFKE1YMzFfUElOX0xENSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xENl9fTEQ2CQlJT01VWF9NT0RFKE1YMzFfUElOX0xENiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEN19fTEQ3CQlJT01VWF9NT0RFKE1YMzFfUElOX0xENywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEOF9fTEQ4CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEOCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEOV9fTEQ5CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEOSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTBfX0xEMTAJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxMCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTFfX0xEMTEJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxMSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTJfX0xEMTIJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxMiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTNfX0xEMTMJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxMywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTRfX0xEMTQJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxNCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTVfX0xEMTUJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxNSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTZfX0xEMTYJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxNiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0xEMTdfX0xEMTcJCUlPTVVYX01PREUoTVgzMV9QSU5fTEQxNywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1ZTWU5DM19fVlNZTkMzCQlJT01VWF9NT0RFKE1YMzFfUElOX1ZTWU5DMywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0hTWU5DX19IU1lOQwkJSU9NVVhfTU9ERShNWDMxX1BJTl9IU1lOQywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0ZQU0hJRlRfX0ZQU0hJRlQJSU9NVVhfTU9ERShNWDMxX1BJTl9GUFNISUZULCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fRFJEWTBfX0RSRFkwCQlJT01VWF9NT0RFKE1YMzFfUElOX0RSRFkwLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fRDNfUkVWX19EM19SRVYJCUlPTVVYX01PREUoTVgzMV9QSU5fRDNfUkVWLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ09OVFJBU1RfX0NPTlRSQVNUCUlPTVVYX01PREUoTVgzMV9QSU5fQ09OVFJBU1QsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9EM19TUExfX0QzX1NQTAkJSU9NVVhfTU9ERShNWDMxX1BJTl9EM19TUEwsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9EM19DTFNfX0QzX0NMUwkJSU9NVVhfTU9ERShNWDMxX1BJTl9EM19DTFMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MQ1MwX19HUEkwM18yMwkJSU9NVVhfTU9ERShNWDMxX1BJTl9MQ1MwLCBJT01VWF9DT05GSUdfR1BJTykKIAogLypYWFg6IFRoZSBTUzAsIFNTMSwgU1MyLCBTUzMgbGluZXMgb2Ygc3BpMyBhcmUgbXVsdGlwbGV4ZWQgYnkgY3NwaTJfc3MwLCBjc3BpMl9zczEsIGNzcGkxX3NzMAogICogY3NwaTFfc3MxKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxZjhhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisqIENvcHlyaWdodCAoQykgMjAwOSBieSBIb2xnZXIgU2NodXJpZyA8aHM0MjMzQG1haWwubW4tc29sdXRpb25zLmRlPgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgX01YQ19JT01VWF9ICisjZGVmaW5lIF9NWENfSU9NVVhfSAorCisvKgorKiAgR1BJTyBNb2R1bGUgYW5kIEkvTyBNdWx0aXBsZXhlcgorKiAgeCA9IDAuLjMgZm9yIHJlZ19BLCByZWdfQiwgcmVnX0MsIHJlZ19ECisqLworI2RlZmluZSBWQV9HUElPX0JBU0UJSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUikKKyNkZWZpbmUgTVhDX0RESVIoeCkgICAgKDB4MDAgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfT0NSMSh4KSAgICAoMHgwNCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19PQ1IyKHgpICAgICgweDA4ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDT05GQTEoeCkgKDB4MGMgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNPTkZBMih4KSAoMHgxMCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ09ORkIxKHgpICgweDE0ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDT05GQjIoeCkgKDB4MTggKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfRFIoeCkgICAgICAoMHgxYyArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19HSVVTKHgpICAgICgweDIwICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX1NTUih4KSAgICAgKDB4MjQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNSMSh4KSAgICAoMHgyOCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ1IyKHgpICAgICgweDJjICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lNUih4KSAgICAgKDB4MzAgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSVNSKHgpICAgICAoMHgzNCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19HUFIoeCkgICAgICgweDM4ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX1NXUih4KSAgICAgKDB4M2MgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfUFVFTih4KSAgICAoMHg0MCArICgoeCkgPDwgOCkpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKKyMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDMKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX01YMgorIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgNQorI2VuZGlmCisKKyNpZm5kZWYgR1BJT19QT1JUX01BWAorIyBlcnJvciAiR1BJTyBjb25maWcgcG9ydCBjb3VudCB1bmtub3duISIKKyNlbmRpZgorCisjZGVmaW5lIEdQSU9fUElOX01BU0sgMHgxZgorCisjZGVmaW5lIEdQSU9fUE9SVF9TSElGVCA1CisjZGVmaW5lIEdQSU9fUE9SVF9NQVNLICgweDcgPDwgR1BJT19QT1JUX1NISUZUKQorCisjZGVmaW5lIEdQSU9fUE9SVEEgKDAgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlRCICgxIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JUQyAoMiA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEQgKDMgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlRFICg0IDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JURiAoNSA8PCBHUElPX1BPUlRfU0hJRlQpCisKKyNkZWZpbmUgR1BJT19PVVQgICAoMSA8PCA4KQorI2RlZmluZSBHUElPX0lOICAgICgwIDw8IDgpCisjZGVmaW5lIEdQSU9fUFVFTiAgKDEgPDwgOSkKKworI2RlZmluZSBHUElPX1BGICAgICgxIDw8IDEwKQorI2RlZmluZSBHUElPX0FGICAgICgxIDw8IDExKQorCisjZGVmaW5lIEdQSU9fT0NSX1NISUZUIDEyCisjZGVmaW5lIEdQSU9fT0NSX01BU0sgKDMgPDwgR1BJT19PQ1JfU0hJRlQpCisjZGVmaW5lIEdQSU9fQUlOICAgKDAgPDwgR1BJT19PQ1JfU0hJRlQpCisjZGVmaW5lIEdQSU9fQklOICAgKDEgPDwgR1BJT19PQ1JfU0hJRlQpCisjZGVmaW5lIEdQSU9fQ0lOICAgKDIgPDwgR1BJT19PQ1JfU0hJRlQpCisjZGVmaW5lIEdQSU9fR1BJTyAgKDMgPDwgR1BJT19PQ1JfU0hJRlQpCisKKyNkZWZpbmUgR1BJT19BT1VUX1NISUZUIDE0CisjZGVmaW5lIEdQSU9fQU9VVF9NQVNLICgzIDw8IEdQSU9fQU9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19BT1VUICAgICAoMCA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVF9JU1IgKDEgPDwgR1BJT19BT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0FPVVRfMCAgICgyIDw8IEdQSU9fQU9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19BT1VUXzEgICAoMyA8PCBHUElPX0FPVVRfU0hJRlQpCisKKyNkZWZpbmUgR1BJT19CT1VUX1NISUZUIDE2CisjZGVmaW5lIEdQSU9fQk9VVF9NQVNLICgzIDw8IEdQSU9fQk9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19CT1VUICAgICAgKDAgPDwgR1BJT19CT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0JPVVRfSVNSICAoMSA8PCBHUElPX0JPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQk9VVF8wICAgICgyIDw8IEdQSU9fQk9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19CT1VUXzEgICAgKDMgPDwgR1BJT19CT1VUX1NISUZUKQorCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MS5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCisjaW5jbHVkZSA8bWFjaC9pb211eC1teDJ4Lmg+CisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyMS5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgorI2VuZGlmCisjZW5kaWYKKworCisvKiBkZWNvZGUgaXJxIG51bWJlciB0byB1c2Ugd2l0aCBJTVIoeCksIElTUih4KSBhbmQgZnJpZW5kcyAqLworI2RlZmluZSBJUlFfVE9fUkVHKGlycSkgKChpcnEgLSBNWENfSU5URVJOQUxfSVJRUykgPj4gNSkKKworI2RlZmluZSBJUlFfR1BJT0EoeCkgIChNWENfR1BJT19JUlFfU1RBUlQgKyB4KQorI2RlZmluZSBJUlFfR1BJT0IoeCkgIChJUlFfR1BJT0EoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9DKHgpICAoSVJRX0dQSU9CKDMyKSArIHgpCisjZGVmaW5lIElSUV9HUElPRCh4KSAgKElSUV9HUElPQygzMikgKyB4KQorI2RlZmluZSBJUlFfR1BJT0UoeCkgIChJUlFfR1BJT0QoMzIpICsgeCkKKworCitleHRlcm4gdm9pZCBteGNfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpOworZXh0ZXJuIGludCBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAorCWNvbnN0IGNoYXIgKmxhYmVsKTsKK2V4dGVybiB2b2lkIG14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAwYjgwODM5Li5lMDc4M2U2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xNCw3ICsxNCwxMiBAQAogI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDA4MDAwMDAwKQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweEMwMDAwMDAwKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNwogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhBMDAwMDAwMCkKKyNlbmRpZgogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzRjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDkgSG9sZ2VyIFNjaHVyaWcsIGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZQorICoKKyAqIFRoaXMgY29udGFpbnMgaS5NWDIxLXNwZWNpZmljIGhhcmR3YXJlIGRlZmluaXRpb25zLiBGb3IgdGhvc2UKKyAqIGhhcmR3YXJlIHBpZWNlcyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBpLk1YMjEgYW5kIGkuTVgyNywgaGF2ZSBhCisgKiBsb29rIGF0IG14MnguaC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXworI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCisjZW5kaWYKKworCisvKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MgKi8KKyNkZWZpbmUgU0RSQU1fQkFTRV9BRERSICAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBDU0QxX0JBU0VfQUREUiAgICAgICAgICAweEM0MDAwMDAwCisKKyNkZWZpbmUgQ1MwX0JBU0VfQUREUiAgICAgICAgICAgMHhDODAwMDAwMAorI2RlZmluZSBDUzFfQkFTRV9BRERSICAgICAgICAgICAweENDMDAwMDAwCisjZGVmaW5lIENTMl9CQVNFX0FERFIgICAgICAgICAgIDB4RDAwMDAwMDAKKyNkZWZpbmUgQ1MzX0JBU0VfQUREUiAgICAgICAgICAgMHhEMTAwMDAwMAorI2RlZmluZSBDUzRfQkFTRV9BRERSICAgICAgICAgICAweEQyMDAwMDAwCisjZGVmaW5lIENTNV9CQVNFX0FERFIgICAgICAgICAgIDB4REQwMDAwMDAKKyNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIgICAgMHhENDAwMDAwMAorCisvKiBOQU5ELCBTRFJBTSwgV0VJTSBldGMgY29udHJvbGxlcnMgKi8KKyNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUiAgICAgICAgMHhERjAwMDAwMAorI2RlZmluZSBYX01FTUNfQkFTRV9BRERSX1ZJUlQgICAweEY0MjAwMDAwCisjZGVmaW5lIFhfTUVNQ19TSVpFICAgICAgICAgICAgIFNaXzI1NksKKworI2RlZmluZSBTRFJBTUNfQkFTRV9BRERSICAgICAgICAoWF9NRU1DX0JBU0VfQUREUiArIDB4MDAwMCkKKyNkZWZpbmUgRUlNX0JBU0VfQUREUiAgICAgICAgICAgKFhfTUVNQ19CQVNFX0FERFIgKyAweDEwMDApCisjZGVmaW5lIFBDTUNJQV9DVExfQkFTRV9BRERSICAgIChYX01FTUNfQkFTRV9BRERSICsgMHgyMDAwKQorI2RlZmluZSBORkNfQkFTRV9BRERSICAgICAgICAgICAoWF9NRU1DX0JBU0VfQUREUiArIDB4MzAwMCkKKworI2RlZmluZSBJUkFNX0JBU0VfQUREUiAgICAgICAgICAweEZGRkZFODAwCS8qIGludGVybmFsIHJhbSAqLworCisvKiB0aGlzIENQVSBzdXBwb3J0cyB1cCB0byAxOTIgR1BJT3MgKGRvbid0IGZvcmdldCB0aGUgYmFzZWJvYXJkISkgKi8KKyNkZWZpbmUgQVJDSF9OUl9HUElPUwkJKDYqMzIgKyAxNikKKworLyogZml4ZWQgaW50ZXJydXB0IG51bWJlcnMgKi8KKyNkZWZpbmUgTVhDX0lOVF9VU0JDVFJMICAgICAgICAgNTgKKyNkZWZpbmUgTVhDX0lOVF9VU0JDVFJMICAgICAgICAgNTgKKyNkZWZpbmUgTVhDX0lOVF9VU0JNTlAgICAgICAgICAgNTcKKyNkZWZpbmUgTVhDX0lOVF9VU0JGVU5DICAgICAgICAgNTYKKyNkZWZpbmUgTVhDX0lOVF9VU0JIT1NUICAgICAgICAgNTUKKyNkZWZpbmUgTVhDX0lOVF9VU0JETUEgICAgICAgICAgNTQKKyNkZWZpbmUgTVhDX0lOVF9VU0JXS1VQICAgICAgICAgNTMKKyNkZWZpbmUgTVhDX0lOVF9FTU1BREVDICAgICAgICAgNTAKKyNkZWZpbmUgTVhDX0lOVF9FTU1BRU5DICAgICAgICAgNDkKKyNkZWZpbmUgTVhDX0lOVF9CTUkgICAgICAgICAgICAgMzAKKyNkZWZpbmUgTVhDX0lOVF9GSVJJICAgICAgICAgICAgOQorCisvKiBmaXhlZCBETUEgcmVxdWVzdCBudW1iZXJzICovCisjZGVmaW5lIERNQV9SRVFfQk1JX1JYICAgICAgICAgIDI5CisjZGVmaW5lIERNQV9SRVFfQk1JX1RYICAgICAgICAgIDI4CisjZGVmaW5lIERNQV9SRVFfRklSSV9SWCAgICAgICAgIDQKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX01YMjFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaAppbmRleCAwMzEzYmU3Li42ZTkzZjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKQEAgLTIsNiArMiwxMCBAQAogICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKICAqCisgKiBUaGlzIGNvbnRhaW5zIGkuTVgyNy1zcGVjaWZpYyBoYXJkd2FyZSBkZWZpbml0aW9ucy4gRm9yIHRob3NlCisgKiBoYXJkd2FyZSBwaWVjZXMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gaS5NWDIxIGFuZCBpLk1YMjcsIGhhdmUgYQorICogbG9vayBhdCBteDJ4LmguCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCkBAIC0yNywzNSArMzEsNiBAQAogLyogSVJBTSAqLwogI2RlZmluZSBJUkFNX0JBU0VfQUREUiAgICAgICAgICAweEZGRkY0QzAwCS8qIGludGVybmFsIHJhbSAqLwogCi0vKiBSZWdpc3RlciBvZmZlc3RzICovCi0jZGVmaW5lIEFJUElfQkFTRV9BRERSICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgQUlQSV9CQVNFX0FERFJfVklSVCAgICAgMHhGNDAwMDAwMAotI2RlZmluZSBBSVBJX1NJWkUgICAgICAgICAgICAgICBTWl8xTQotCi0jZGVmaW5lIERNQV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDEwMDApCi0jZGVmaW5lIFdET0dfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDIwMDApCi0jZGVmaW5lIEdQVDFfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDMwMDApCi0jZGVmaW5lIEdQVDJfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDQwMDApCi0jZGVmaW5lIEdQVDNfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDUwMDApCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDYwMDApCi0jZGVmaW5lIFJUQ19CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDcwMDApCi0jZGVmaW5lIEtQUF9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDgwMDApCi0jZGVmaW5lIE9XSVJFX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDkwMDApCi0jZGVmaW5lIFVBUlQxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEEwMDApCi0jZGVmaW5lIFVBUlQyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEIwMDApCi0jZGVmaW5lIFVBUlQzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEMwMDApCi0jZGVmaW5lIFVBUlQ0X0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEQwMDApCi0jZGVmaW5lIENTUEkxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEUwMDApCi0jZGVmaW5lIENTUEkyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEYwMDApCi0jZGVmaW5lIFNTSTFfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTAwMDApCi0jZGVmaW5lIFNTSTJfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTEwMDApCi0jZGVmaW5lIEkyQ19CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTIwMDApCi0jZGVmaW5lIFNESEMxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTMwMDApCi0jZGVmaW5lIFNESEMyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTQwMDApCi0jZGVmaW5lIEdQSU9fQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTUwMDApCi0jZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTYwMDApCi0KLSNkZWZpbmUgQ1NQSTNfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxNzAwMCkKICNkZWZpbmUgTVNIQ19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxODAwMCkKICNkZWZpbmUgR1BUNV9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxOTAwMCkKICNkZWZpbmUgR1BUNF9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxQTAwMCkKQEAgLTY0LDQxICszOSwzMyBAQAogI2RlZmluZSBJMkMyX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDFEMDAwKQogI2RlZmluZSBTREhDM19CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDFFMDAwKQogI2RlZmluZSBHUFQ2X0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDFGMDAwKQotCi0jZGVmaW5lIExDRENfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjEwMDApCi0jZGVmaW5lIFNMQ0RDX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjIwMDApCiAjZGVmaW5lIFZQVV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjMwMDApCi0jZGVmaW5lIFVTQk9UR19CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjQwMDApCi0vKiBmb3IgbXgyNyovCiAjZGVmaW5lIE9UR19CQVNFX0FERFIgICAgICAgICAgIFVTQk9UR19CQVNFX0FERFIKICNkZWZpbmUgU0FIQVJBX0JBU0VfQUREUiAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNTAwMCkKLSNkZWZpbmUgRU1NQV9QUF9CQVNFX0FERFIgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNjAwMCkKLSNkZWZpbmUgRU1NQV9QUlBfQkFTRV9BRERSICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNjQwMCkKLSNkZWZpbmUgQ0NNX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNzAwMCkKLSNkZWZpbmUgU1lTQ1RSTF9CQVNFX0FERFIgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNzgwMCkKICNkZWZpbmUgSUlNX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyODAwMCkKLQogI2RlZmluZSBSVElDX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDJBMDAwKQogI2RlZmluZSBGRUNfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDJCMDAwKQogI2RlZmluZSBTQ0NfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDJDMDAwKQogI2RlZmluZSBFVEJfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDNCMDAwKQogI2RlZmluZSBFVEJfUkFNX0JBU0VfQUREUiAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDNDMDAwKQogCi0jZGVmaW5lIEpBTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4M0UwMDApCi0jZGVmaW5lIE1BWF9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4M0YwMDApCi0KLS8qIFJPTVAgYW5kIEFWSUMgKi8KKy8qIFJPTSBwYXRjaCAqLwogI2RlZmluZSBST01QX0JBU0VfQUREUiAgICAgICAgICAweDEwMDQxMDAwCiAKLSNkZWZpbmUgQVZJQ19CQVNFX0FERFIgICAgICAgICAgMHgxMDA0MDAwMAotCi0jZGVmaW5lIFNBSEIxX0JBU0VfQUREUiAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgU0FIQjFfQkFTRV9BRERSX1ZJUlQgICAgMHhGNDEwMDAwMAotI2RlZmluZSBTQUhCMV9TSVpFICAgICAgICAgICAgICBTWl8xTQotCi0jZGVmaW5lIENTSV9CQVNFX0FERFIgICAgICAgICAgIChTQUhCMV9CQVNFX0FERFIgKyAweDAwMDApCiAjZGVmaW5lIEFUQV9CQVNFX0FERFIgICAgICAgICAgIChTQUhCMV9CQVNFX0FERFIgKyAweDEwMDApCiAKKy8qIE1lbW9yeSByZWdpb25zIGFuZCBDUyAqLworI2RlZmluZSBTRFJBTV9CQVNFX0FERFIgICAgICAgICAweEEwMDAwMDAwCisjZGVmaW5lIENTRDFfQkFTRV9BRERSICAgICAgICAgIDB4QjAwMDAwMDAKKworI2RlZmluZSBDUzBfQkFTRV9BRERSICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENTMV9CQVNFX0FERFIgICAgICAgICAgIDB4QzgwMDAwMDAKKyNkZWZpbmUgQ1MyX0JBU0VfQUREUiAgICAgICAgICAgMHhEMDAwMDAwMAorI2RlZmluZSBDUzNfQkFTRV9BRERSICAgICAgICAgICAweEQyMDAwMDAwCisjZGVmaW5lIENTNF9CQVNFX0FERFIgICAgICAgICAgIDB4RDQwMDAwMDAKKyNkZWZpbmUgQ1M1X0JBU0VfQUREUiAgICAgICAgICAgMHhENjAwMDAwMAorI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUiAgICAweERDMDAwMDAwCisKIC8qIE5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMgKi8KICNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUiAgICAgICAgMHhEODAwMDAwMAogI2RlZmluZSBYX01FTUNfQkFTRV9BRERSX1ZJUlQgICAweEY0MjAwMDAwCkBAIC0xMTAsNTYgKzc3LDkgQEAKICNkZWZpbmUgTTNJRl9CQVNFX0FERFIgICAgICAgICAgKFhfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCiAjZGVmaW5lIFBDTUNJQV9DVExfQkFTRV9BRERSICAgIChYX01FTUNfQkFTRV9BRERSICsgMHg0MDAwKQogCi0vKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MgKi8KLSNkZWZpbmUgU0RSQU1fQkFTRV9BRERSCQkweEEwMDAwMDAwCi0jZGVmaW5lIENTRDFfQkFTRV9BRERSCQkweEIwMDAwMDAwCi0KLSNkZWZpbmUgQ1MwX0JBU0VfQUREUiAgICAgICAgICAgMHhDMDAwMDAwMAotI2RlZmluZSBDUzFfQkFTRV9BRERSICAgICAgICAgICAweEM4MDAwMDAwCi0jZGVmaW5lIENTMl9CQVNFX0FERFIgICAgICAgICAgIDB4RDAwMDAwMDAKLSNkZWZpbmUgQ1MzX0JBU0VfQUREUiAgICAgICAgICAgMHhEMjAwMDAwMAotI2RlZmluZSBDUzRfQkFTRV9BRERSICAgICAgICAgICAweEQ0MDAwMDAwCi0jZGVmaW5lIENTNV9CQVNFX0FERFIgICAgICAgICAgIDB4RDYwMDAwMDAKLSNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIgICAgMHhEQzAwMDAwMAotCi0vKgotICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwaHlzaWNhbCB0byB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYWxsIHRoZQotICogcGVyaXBoZXJhbCBtb2R1bGVzLiBJdCBpcyB1c2VkIGJ5IHBhc3NpbmcgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgeAotICogYW5kIHJldHVybmluZyB0aGUgdmlydHVhbCBhZGRyZXNzLiBJZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgbWFwcGVkLAotICogaXQgcmV0dXJucyAweERFQURCRUVGCi0gKi8KLSNkZWZpbmUgSU9fQUREUkVTUyh4KSAgIFwKLQkodm9pZCBfX2lvbWVtICopIFwKLQkoKCh4ID49IEFJUElfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBJX0JBU0VfQUREUiArIEFJUElfU0laRSkpKSA/IFwKLQkJQUlQSV9JT19BRERSRVNTKHgpIDogXAotCSgoeCA+PSBTQUhCMV9CQVNFX0FERFIpICYmICh4IDwgKFNBSEIxX0JBU0VfQUREUiArIFNBSEIxX1NJWkUpKSkgPyBcCi0JCVNBSEIxX0lPX0FERFJFU1MoeCkgOiBcCi0JKCh4ID49IFhfTUVNQ19CQVNFX0FERFIpICYmICh4IDwgKFhfTUVNQ19CQVNFX0FERFIgKyBYX01FTUNfU0laRSkpKSA/IFwKLQkJWF9NRU1DX0lPX0FERFJFU1MoeCkgOiAweERFQURCRUVGKQotCi0vKiBkZWZpbmUgdGhlIGFkZHJlc3MgbWFwcGluZyBtYWNyb3M6IGluIHBoeXNpY2FsIGFkZHJlc3Mgb3JkZXIgKi8KLSNkZWZpbmUgQUlQSV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBBSVBJX0JBU0VfQUREUikgKyBBSVBJX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KQlBSVBJX0lPX0FERFJFU1MoeCkKLQotI2RlZmluZSBTQUhCMV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBTQUhCMV9CQVNFX0FERFIpICsgU0FIQjFfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgQ1M0X0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIENTNF9CQVNFX0FERFIpICsgQ1M0X0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIFhfTUVNQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBQQ01DSUFfSU9fQUREUkVTUyh4KSBcCi0JKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKLQotLyogZml4ZWQgaW50ZXJycHV0IG51bWJlcnMgKi8KKy8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCiAjZGVmaW5lIE1YQ19JTlRfQ0NNCQk2MwogI2RlZmluZSBNWENfSU5UX0lJTQkJNjIKLSNkZWZpbmUgTVhDX0lOVF9MQ0RDCQk2MQotI2RlZmluZSBNWENfSU5UX1NMQ0RDCQk2MAogI2RlZmluZSBNWENfSU5UX1NBSEFSQQkJNTkKICNkZWZpbmUgTVhDX0lOVF9TQ0NfU0NNCQk1OAogI2RlZmluZSBNWENfSU5UX1NDQ19TTU4JCTU3CkBAIC0xNjcsNTQgKzg3LDEyIEBACiAjZGVmaW5lIE1YQ19JTlRfVVNCMgkJNTUKICNkZWZpbmUgTVhDX0lOVF9VU0IxCQk1NAogI2RlZmluZSBNWENfSU5UX1ZQVQkJNTMKLSNkZWZpbmUgTVhDX0lOVF9FTU1BUFAJCTUyCi0jZGVmaW5lIE1YQ19JTlRfRU1NQVBSUAkJNTEKICNkZWZpbmUgTVhDX0lOVF9GRUMJCTUwCiAjZGVmaW5lIE1YQ19JTlRfVUFSVDUJCTQ5CiAjZGVmaW5lIE1YQ19JTlRfVUFSVDYJCTQ4Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxNQkJNDcKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDE0CQk0NgotI2RlZmluZSBNWENfSU5UX0RNQUNIMTMJCTQ1Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMgkJNDQKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDExCQk0MwotI2RlZmluZSBNWENfSU5UX0RNQUNIMTAJCTQyCi0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g5CQk0MQotI2RlZmluZSBNWENfSU5UX0RNQUNIOAkJNDAKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDcJCTM5Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g2CQkzOAotI2RlZmluZSBNWENfSU5UX0RNQUNINQkJMzcKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDQJCTM2Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gzCQkzNQotI2RlZmluZSBNWENfSU5UX0RNQUNIMgkJMzQKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDEJCTMzCi0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gwCQkzMgotI2RlZmluZSBNWENfSU5UX0NTSQkJMzEKICNkZWZpbmUgTVhDX0lOVF9BVEEJCTMwCi0jZGVmaW5lIE1YQ19JTlRfTkFOREZDCQkyOQotI2RlZmluZSBNWENfSU5UX1BDTUNJQQkJMjgKLSNkZWZpbmUgTVhDX0lOVF9XRE9HCQkyNwotI2RlZmluZSBNWENfSU5UX0dQVDEJCTI2Ci0jZGVmaW5lIE1YQ19JTlRfR1BUMgkJMjUKLSNkZWZpbmUgTVhDX0lOVF9HUFQzCQkyNAotI2RlZmluZSBNWENfSU5UX0dQVAkJSU5UX0dQVDEKLSNkZWZpbmUgTVhDX0lOVF9QV00JCTIzCi0jZGVmaW5lIE1YQ19JTlRfUlRDCQkyMgotI2RlZmluZSBNWENfSU5UX0tQUAkJMjEKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMQkJMjAKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMgkJMTkKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMwkJMTgKLSNkZWZpbmUgTVhDX0lOVF9VQVJUNAkJMTcKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMQkJMTYKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMgkJMTUKLSNkZWZpbmUgTVhDX0lOVF9TU0kxCQkxNAotI2RlZmluZSBNWENfSU5UX1NTSTIJCTEzCi0jZGVmaW5lIE1YQ19JTlRfSTJDCQkxMgotI2RlZmluZSBNWENfSU5UX1NESEMxCQkxMQotI2RlZmluZSBNWENfSU5UX1NESEMyCQkxMAogI2RlZmluZSBNWENfSU5UX1NESEMzCQk5Ci0jZGVmaW5lIE1YQ19JTlRfR1BJTwkJOAogI2RlZmluZSBNWENfSU5UX1NESEMJCTcKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMwkJNgogI2RlZmluZSBNWENfSU5UX1JUSUMJCTUKICNkZWZpbmUgTVhDX0lOVF9HUFQ0CQk0CiAjZGVmaW5lIE1YQ19JTlRfR1BUNQkJMwpAQCAtMjI4LDM2ICsxMDYsOSBAQAogI2RlZmluZSBETUFfUkVRX1VBUlQ2X1RYICAgICAgICAzNAogI2RlZmluZSBETUFfUkVRX1VBUlQ1X1JYICAgICAgICAzMwogI2RlZmluZSBETUFfUkVRX1VBUlQ1X1RYICAgICAgICAzMgotI2RlZmluZSBETUFfUkVRX0NTSV9SWCAgICAgICAgICAzMQotI2RlZmluZSBETUFfUkVRX0NTSV9TVEFUICAgICAgICAzMAogI2RlZmluZSBETUFfUkVRX0FUQV9SQ1YgICAgICAgICAyOQogI2RlZmluZSBETUFfUkVRX0FUQV9UWCAgICAgICAgICAyOAotI2RlZmluZSBETUFfUkVRX1VBUlQxX1RYICAgICAgICAyNwotI2RlZmluZSBETUFfUkVRX1VBUlQxX1JYICAgICAgICAyNgotI2RlZmluZSBETUFfUkVRX1VBUlQyX1RYICAgICAgICAyNQotI2RlZmluZSBETUFfUkVRX1VBUlQyX1JYICAgICAgICAyNAotI2RlZmluZSBETUFfUkVRX1VBUlQzX1RYICAgICAgICAyMwotI2RlZmluZSBETUFfUkVRX1VBUlQzX1JYICAgICAgICAyMgotI2RlZmluZSBETUFfUkVRX1VBUlQ0X1RYICAgICAgICAyMQotI2RlZmluZSBETUFfUkVRX1VBUlQ0X1JYICAgICAgICAyMAotI2RlZmluZSBETUFfUkVRX0NTUEkxX1RYICAgICAgICAxOQotI2RlZmluZSBETUFfUkVRX0NTUEkxX1JYICAgICAgICAxOAotI2RlZmluZSBETUFfUkVRX0NTUEkyX1RYICAgICAgICAxNwotI2RlZmluZSBETUFfUkVRX0NTUEkyX1JYICAgICAgICAxNgotI2RlZmluZSBETUFfUkVRX1NTSTFfVFgxICAgICAgICAxNQotI2RlZmluZSBETUFfUkVRX1NTSTFfUlgxICAgICAgICAxNAotI2RlZmluZSBETUFfUkVRX1NTSTFfVFgwICAgICAgICAxMwotI2RlZmluZSBETUFfUkVRX1NTSTFfUlgwICAgICAgICAxMgotI2RlZmluZSBETUFfUkVRX1NTSTJfVFgxICAgICAgICAxMQotI2RlZmluZSBETUFfUkVRX1NTSTJfUlgxICAgICAgICAxMAotI2RlZmluZSBETUFfUkVRX1NTSTJfVFgwICAgICAgICA5Ci0jZGVmaW5lIERNQV9SRVFfU1NJMl9SWDAgICAgICAgIDgKLSNkZWZpbmUgRE1BX1JFUV9TREhDMSAgICAgICAgICAgNwotI2RlZmluZSBETUFfUkVRX1NESEMyICAgICAgICAgICA2CiAjZGVmaW5lIERNQV9SRVFfTVNIQyAgICAgICAgICAgIDQKLSNkZWZpbmUgRE1BX1JFUV9FWFQgICAgICAgICAgICAgMwotI2RlZmluZSBETUFfUkVRX0NTUEkzX1RYICAgICAgICAyCi0jZGVmaW5lIERNQV9SRVFfQ1NQSTNfUlggICAgICAgIDEKIAogLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDI3ICovCiAjZGVmaW5lIENISVBfUkVWXzFfMAkJMHgwMApAQCAtMjY3LDI1ICsxMTgsOCBAQAogZXh0ZXJuIGludCBteDI3X3JldmlzaW9uKHZvaWQpOwogI2VuZGlmCiAKLS8qIGdwaW8gYW5kIGdwaW8gYmFzZWQgaW50ZXJydXB0IGhhbmRsaW5nICovCi0jZGVmaW5lIEdQSU9fRFIJCSAJMHgxQwotI2RlZmluZSBHUElPX0dESVIJIAkweDAwCi0jZGVmaW5lIEdQSU9fUFNSCSAJMHgyNAotI2RlZmluZSBHUElPX0lDUjEJIAkweDI4Ci0jZGVmaW5lIEdQSU9fSUNSMgkgCTB4MkMKLSNkZWZpbmUgR1BJT19JTVIJIAkweDMwCi0jZGVmaW5lIEdQSU9fSVNSCSAJMHgzNAotI2RlZmluZSBHUElPX0lOVF9MT1dfTEVWCTB4MwotI2RlZmluZSBHUElPX0lOVF9ISUdIX0xFVgkweDIKLSNkZWZpbmUgR1BJT19JTlRfUklTRV9FREdFIAkweDAKLSNkZWZpbmUgR1BJT19JTlRfRkFMTF9FREdFCTB4MQotI2RlZmluZSBHUElPX0lOVF9OT05FCQkweDQKLQogLyogTWFuZGF0b3J5IGRlZmluZXMgdXNlZCBnbG9iYWxseSAqLwogCi0vKiB0aGlzIGlzIGFuIGkuTVgyNyBDUFUgKi8KLSNkZWZpbmUgY3B1X2lzX214MjcoKQkJKDEpCi0KIC8qIHRoaXMgQ1BVIHN1cHBvcnRzIHVwIHRvIDE5MiBHUElPcyAoZG9uJ3QgZm9yZ2V0IHRoZSBiYXNlYm9hcmQhKSAqLwogI2RlZmluZSBBUkNIX05SX0dQSU9TCQkoMTkyICsgMTYpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJ4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDBkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIGNvbnRhaW5zIGhhcmR3YXJlIGRlZmluaXRpb25zIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIGkuTVgyMSBhbmQKKyAqIGkuTVgyNy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDJ4X0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDJ4X0hfXworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXworI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBhZGRyZXNzZXMgYXJlIGNvbW1vbiBiZXR3ZWVuIGkuTVgyMSBhbmQgaS5NWDI3ICovCisKKy8qIFJlZ2lzdGVyIG9mZmVzdHMgKi8KKyNkZWZpbmUgQUlQSV9CQVNFX0FERFIgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBBSVBJX0JBU0VfQUREUl9WSVJUICAgICAweEY0MDAwMDAwCisjZGVmaW5lIEFJUElfU0laRSAgICAgICAgICAgICAgIFNaXzFNCisKKyNkZWZpbmUgRE1BX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwMTAwMCkKKyNkZWZpbmUgV0RPR19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwMjAwMCkKKyNkZWZpbmUgR1BUMV9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwMzAwMCkKKyNkZWZpbmUgR1BUMl9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwNDAwMCkKKyNkZWZpbmUgR1BUM19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwNTAwMCkKKyNkZWZpbmUgUFdNX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwNjAwMCkKKyNkZWZpbmUgUlRDX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwNzAwMCkKKyNkZWZpbmUgS1BQX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwODAwMCkKKyNkZWZpbmUgT1dJUkVfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwOTAwMCkKKyNkZWZpbmUgVUFSVDFfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwQTAwMCkKKyNkZWZpbmUgVUFSVDJfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwQjAwMCkKKyNkZWZpbmUgVUFSVDNfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwQzAwMCkKKyNkZWZpbmUgVUFSVDRfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwRDAwMCkKKyNkZWZpbmUgQ1NQSTFfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwRTAwMCkKKyNkZWZpbmUgQ1NQSTJfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgwRjAwMCkKKyNkZWZpbmUgU1NJMV9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxMDAwMCkKKyNkZWZpbmUgU1NJMl9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxMTAwMCkKKyNkZWZpbmUgSTJDX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxMjAwMCkKKyNkZWZpbmUgU0RIQzFfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxMzAwMCkKKyNkZWZpbmUgU0RIQzJfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxNDAwMCkKKyNkZWZpbmUgR1BJT19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxNTAwMCkKKyNkZWZpbmUgQVVETVVYX0JBU0VfQUREUiAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxNjAwMCkKKyNkZWZpbmUgQ1NQSTNfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxNzAwMCkKKyNkZWZpbmUgTENEQ19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyMTAwMCkKKyNkZWZpbmUgU0xDRENfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyMjAwMCkKKyNkZWZpbmUgVVNCT1RHX0JBU0VfQUREUiAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNDAwMCkKKyNkZWZpbmUgRU1NQV9QUF9CQVNFX0FERFIgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNjAwMCkKKyNkZWZpbmUgRU1NQV9QUlBfQkFTRV9BRERSICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNjQwMCkKKyNkZWZpbmUgQ0NNX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNzAwMCkKKyNkZWZpbmUgU1lTQ1RSTF9CQVNFX0FERFIgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyNzgwMCkKKyNkZWZpbmUgSkFNX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgzRTAwMCkKKyNkZWZpbmUgTUFYX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgzRjAwMCkKKworI2RlZmluZSBBVklDX0JBU0VfQUREUiAgICAgICAgICAweDEwMDQwMDAwCisKKyNkZWZpbmUgU0FIQjFfQkFTRV9BRERSICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTQUhCMV9CQVNFX0FERFJfVklSVCAgICAweEY0MTAwMDAwCisjZGVmaW5lIFNBSEIxX1NJWkUgICAgICAgICAgICAgIFNaXzFNCisKKyNkZWZpbmUgQ1NJX0JBU0VfQUREUiAgICAgICAgICAgKFNBSEIxX0JBU0VfQUREUiArIDB4MDAwMCkKKworLyoKKyAqIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGh5c2ljYWwgdG8gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCB0aGUKKyAqIHBlcmlwaGVyYWwgbW9kdWxlcy4gSXQgaXMgdXNlZCBieSBwYXNzaW5nIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzIHgKKyAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4gSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IG1hcHBlZCwKKyAqIGl0IHJldHVybnMgMHhERUFEQkVFRgorICovCisjZGVmaW5lIElPX0FERFJFU1MoeCkgICBcCisJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIFwKKwkoKCh4ID49IEFJUElfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBJX0JBU0VfQUREUiArIEFJUElfU0laRSkpKSA/IFwKKwkJQUlQSV9JT19BRERSRVNTKHgpIDogXAorCSgoeCA+PSBTQUhCMV9CQVNFX0FERFIpICYmICh4IDwgKFNBSEIxX0JBU0VfQUREUiArIFNBSEIxX1NJWkUpKSkgPyBcCisJCVNBSEIxX0lPX0FERFJFU1MoeCkgOiBcCisJKCh4ID49IFhfTUVNQ19CQVNFX0FERFIpICYmICh4IDwgKFhfTUVNQ19CQVNFX0FERFIgKyBYX01FTUNfU0laRSkpKSA/IFwKKwkJWF9NRU1DX0lPX0FERFJFU1MoeCkgOiAweERFQURCRUVGKQorCisvKiBkZWZpbmUgdGhlIGFkZHJlc3MgbWFwcGluZyBtYWNyb3M6IGluIHBoeXNpY2FsIGFkZHJlc3Mgb3JkZXIgKi8KKyNkZWZpbmUgQUlQSV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBBSVBJX0JBU0VfQUREUikgKyBBSVBJX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KQlBSVBJX0lPX0FERFJFU1MoeCkKKworI2RlZmluZSBTQUhCMV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBTQUhCMV9CQVNFX0FERFIpICsgU0FIQjFfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgQ1M0X0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIENTNF9CQVNFX0FERFIpICsgQ1M0X0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIFhfTUVNQ19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBQQ01DSUFfSU9fQUREUkVTUyh4KSBcCisJKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKKworLyogZml4ZWQgaW50ZXJydXB0IG51bWJlcnMgKi8KKyNkZWZpbmUgTVhDX0lOVF9MQ0RDCQk2MQorI2RlZmluZSBNWENfSU5UX1NMQ0RDCQk2MAorI2RlZmluZSBNWENfSU5UX0VNTUFQUAkJNTIKKyNkZWZpbmUgTVhDX0lOVF9FTU1BUFJQCQk1MQorI2RlZmluZSBNWENfSU5UX0RNQUNIMTUJCTQ3CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxNAkJNDYKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDEzCQk0NQorI2RlZmluZSBNWENfSU5UX0RNQUNIMTIJCTQ0CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMQkJNDMKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDEwCQk0MgorI2RlZmluZSBNWENfSU5UX0RNQUNIOQkJNDEKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDgJCTQwCisjZGVmaW5lIE1YQ19JTlRfRE1BQ0g3CQkzOQorI2RlZmluZSBNWENfSU5UX0RNQUNINgkJMzgKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDUJCTM3CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0g0CQkzNgorI2RlZmluZSBNWENfSU5UX0RNQUNIMwkJMzUKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDIJCTM0CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxCQkzMworI2RlZmluZSBNWENfSU5UX0RNQUNIMAkJMzIKKyNkZWZpbmUgTVhDX0lOVF9DU0kJCTMxCisjZGVmaW5lIE1YQ19JTlRfTkFOREZDCQkyOQorI2RlZmluZSBNWENfSU5UX1BDTUNJQQkJMjgKKyNkZWZpbmUgTVhDX0lOVF9XRE9HCQkyNworI2RlZmluZSBNWENfSU5UX0dQVDEJCTI2CisjZGVmaW5lIE1YQ19JTlRfR1BUMgkJMjUKKyNkZWZpbmUgTVhDX0lOVF9HUFQzCQkyNAorI2RlZmluZSBNWENfSU5UX0dQVAkJSU5UX0dQVDEKKyNkZWZpbmUgTVhDX0lOVF9QV00JCTIzCisjZGVmaW5lIE1YQ19JTlRfUlRDCQkyMgorI2RlZmluZSBNWENfSU5UX0tQUAkJMjEKKyNkZWZpbmUgTVhDX0lOVF9VQVJUMQkJMjAKKyNkZWZpbmUgTVhDX0lOVF9VQVJUMgkJMTkKKyNkZWZpbmUgTVhDX0lOVF9VQVJUMwkJMTgKKyNkZWZpbmUgTVhDX0lOVF9VQVJUNAkJMTcKKyNkZWZpbmUgTVhDX0lOVF9DU1BJMQkJMTYKKyNkZWZpbmUgTVhDX0lOVF9DU1BJMgkJMTUKKyNkZWZpbmUgTVhDX0lOVF9TU0kxCQkxNAorI2RlZmluZSBNWENfSU5UX1NTSTIJCTEzCisjZGVmaW5lIE1YQ19JTlRfSTJDCQkxMgorI2RlZmluZSBNWENfSU5UX1NESEMxCQkxMQorI2RlZmluZSBNWENfSU5UX1NESEMyCQkxMAorI2RlZmluZSBNWENfSU5UX0dQSU8JCTgKKyNkZWZpbmUgTVhDX0lOVF9DU1BJMwkJNgorCisvKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLworI2RlZmluZSBHUElPX0RSCQkgCTB4MUMKKyNkZWZpbmUgR1BJT19HRElSCSAJMHgwMAorI2RlZmluZSBHUElPX1BTUgkgCTB4MjQKKyNkZWZpbmUgR1BJT19JQ1IxCSAJMHgyOAorI2RlZmluZSBHUElPX0lDUjIJIAkweDJDCisjZGVmaW5lIEdQSU9fSU1SCSAJMHgzMAorI2RlZmluZSBHUElPX0lTUgkgCTB4MzQKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDMKKyNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgyCisjZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRSAJMHgwCisjZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDEKKyNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0CisKKy8qIGZpeGVkIERNQSByZXF1ZXN0IG51bWJlcnMgKi8KKyNkZWZpbmUgRE1BX1JFUV9DU0lfUlggICAgICAgICAgMzEKKyNkZWZpbmUgRE1BX1JFUV9DU0lfU1RBVCAgICAgICAgMzAKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMV9UWCAgICAgICAgMjcKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SWCAgICAgICAgMjYKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMl9UWCAgICAgICAgMjUKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMl9SWCAgICAgICAgMjQKKyNkZWZpbmUgRE1BX1JFUV9VQVJUM19UWCAgICAgICAgMjMKKyNkZWZpbmUgRE1BX1JFUV9VQVJUM19SWCAgICAgICAgMjIKKyNkZWZpbmUgRE1BX1JFUV9VQVJUNF9UWCAgICAgICAgMjEKKyNkZWZpbmUgRE1BX1JFUV9VQVJUNF9SWCAgICAgICAgMjAKKyNkZWZpbmUgRE1BX1JFUV9DU1BJMV9UWCAgICAgICAgMTkKKyNkZWZpbmUgRE1BX1JFUV9DU1BJMV9SWCAgICAgICAgMTgKKyNkZWZpbmUgRE1BX1JFUV9DU1BJMl9UWCAgICAgICAgMTcKKyNkZWZpbmUgRE1BX1JFUV9DU1BJMl9SWCAgICAgICAgMTYKKyNkZWZpbmUgRE1BX1JFUV9TU0kxX1RYMSAgICAgICAgMTUKKyNkZWZpbmUgRE1BX1JFUV9TU0kxX1JYMSAgICAgICAgMTQKKyNkZWZpbmUgRE1BX1JFUV9TU0kxX1RYMCAgICAgICAgMTMKKyNkZWZpbmUgRE1BX1JFUV9TU0kxX1JYMCAgICAgICAgMTIKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1RYMSAgICAgICAgMTEKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1JYMSAgICAgICAgMTAKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1RYMCAgICAgICAgOQorI2RlZmluZSBETUFfUkVRX1NTSTJfUlgwICAgICAgICA4CisjZGVmaW5lIERNQV9SRVFfU0RIQzEgICAgICAgICAgIDcKKyNkZWZpbmUgRE1BX1JFUV9TREhDMiAgICAgICAgICAgNgorI2RlZmluZSBETUFfUkVRX0VYVCAgICAgICAgICAgICAzCisjZGVmaW5lIERNQV9SRVFfQ1NQSTNfVFggICAgICAgIDIKKyNkZWZpbmUgRE1BX1JFUV9DU1BJM19SWCAgICAgICAgMQorCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfTVgyeF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCmluZGV4IGRlMDI2NjUuLjBiMDY5NDFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKQEAgLTEsMzYwICsxLDQ1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgzMV9IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgzMV9IX18KLQotI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KLSNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgotI2VuZGlmCi0KLS8qCi0gKiBNWDMxIG1lbW9yeSBtYXA6Ci0gKgotICogVmlydAkJUGh5cwkJU2l6ZQlXaGF0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEY4MDAwMDAwCTFGRkMwMDAwCTE2SwlJUkFNCi0gKiBGOTAwMDAwMAkzMDAwMDAwMAkyNTZNCUwyQ0MKLSAqIEZDMDAwMDAwCTQzRjAwMDAwCTFNCUFJUFMgMQotICogRkMxMDAwMDAJNTAwMDAwMDAJMU0JU1BCQQotICogRkMyMDAwMDAJNTNGMDAwMDAJMU0JQUlQUyAyCi0gKiBGQzUwMDAwMAk2MDAwMDAwMAkxMjhNCVJPTVBBVENICi0gKiBGQzQwMDAwMAk2ODAwMDAwMAkxMjhNCUFWSUMKLSAqICAgICAgICAgCTcwMDAwMDAwCTI1Nk0JSVBVIChNQVggTTIpCi0gKiAgICAgICAgIAk4MDAwMDAwMAkyNTZNCUNTRDAgU0RSQU0vRERSCi0gKiAgICAgICAgIAk5MDAwMDAwMAkyNTZNCUNTRDEgU0RSQU0vRERSCi0gKiAgICAgICAgIAlBMDAwMDAwMAkxMjhNCUNTMCBGbGFzaAotICogICAgICAgICAJQTgwMDAwMDAJMTI4TQlDUzEgRmxhc2gKLSAqICAgICAgICAgCUIwMDAwMDAwCTMyTQlDUzIKLSAqICAgICAgICAgCUIyMDAwMDAwCTMyTQlDUzMKLSAqIEY0MDAwMDAwCUI0MDAwMDAwCTMyTQlDUzQKLSAqICAgICAgICAgCUI2MDAwMDAwCTMyTQlDUzUKLSAqIEZDMzIwMDAwCUI4MDAwMDAwCTY0SwlOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzCi0gKiAgICAgICAgIAlDMDAwMDAwMAk2NE0JUENNQ0lBL0NGCi0gKi8KLQotI2RlZmluZSBDUzBfQkFTRV9BRERSCQkweEEwMDAwMDAwCi0jZGVmaW5lIENTMV9CQVNFX0FERFIJCTB4QTgwMDAwMDAKLSNkZWZpbmUgQ1MyX0JBU0VfQUREUgkJMHhCMDAwMDAwMAotI2RlZmluZSBDUzNfQkFTRV9BRERSCQkweEIyMDAwMDAwCi0KLSNkZWZpbmUgQ1M0X0JBU0VfQUREUgkJMHhCNDAwMDAwMAotI2RlZmluZSBDUzRfQkFTRV9BRERSX1ZJUlQJMHhGNDAwMDAwMAotI2RlZmluZSBDUzRfU0laRQkJU1pfMzJNCi0KLSNkZWZpbmUgQ1M1X0JBU0VfQUREUgkJMHhCNjAwMDAwMAotI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUgkweEJDMDAwMDAwCi0KLS8qCiAgKiBJUkFNCiAgKi8KLSNkZWZpbmUgSVJBTV9CQVNFX0FERFIJCTB4MUZGQzAwMDAJLyogaW50ZXJuYWwgcmFtICovCi0jZGVmaW5lIElSQU1fQkFTRV9BRERSX1ZJUlQJMHhGODAwMDAwMAotI2RlZmluZSBJUkFNX1NJWkUJCVNaXzE2SworI2RlZmluZSBNWDMxX0lSQU1fQkFTRV9BRERSCQkweDFGRkMwMDAwCS8qIGludGVybmFsIHJhbSAqLworI2RlZmluZSBNWDMxX0lSQU1fU0laRQkJCVNaXzE2SwogCi0vKgotICogTDJDQwotICovCi0jZGVmaW5lIEwyQ0NfQkFTRV9BRERSCQkweDMwMDAwMDAwCi0jZGVmaW5lIEwyQ0NfQkFTRV9BRERSX1ZJUlQJMHhGOTAwMDAwMAotI2RlZmluZSBMMkNDX1NJWkUJCVNaXzFNCi0KLS8qCi0gKiBBSVBTIDEKLSAqLwotI2RlZmluZSBBSVBTMV9CQVNFX0FERFIJCTB4NDNGMDAwMDAKLSNkZWZpbmUgQUlQUzFfQkFTRV9BRERSX1ZJUlQJMHhGQzAwMDAwMAotI2RlZmluZSBBSVBTMV9TSVpFCQlTWl8xTQotCi0jZGVmaW5lIE1BWF9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDA0MDAwKQotI2RlZmluZSBFVlRNT05fQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDA4MDAwKQotI2RlZmluZSBDTEtDVExfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDBDMDAwKQotI2RlZmluZSBFVEJfU0xPVDRfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDEwMDAwKQotI2RlZmluZSBFVEJfU0xPVDVfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDE0MDAwKQotI2RlZmluZSBFQ1RfQ1RJT19CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMTgwMDApCi0jZGVmaW5lIEkyQ19CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQotI2RlZmluZSBJMkMzX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwODQwMDApCiAjZGVmaW5lIE9UR19CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDg4MDAwKQogI2RlZmluZSBBVEFfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4QzAwMCkKLSNkZWZpbmUgVUFSVDFfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5MDAwMCkKLSNkZWZpbmUgVUFSVDJfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKLSNkZWZpbmUgSTJDMl9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDk4MDAwKQotI2RlZmluZSBPV0lSRV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDlDMDAwKQotI2RlZmluZSBTU0kxX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQTAwMDApCi0jZGVmaW5lIENTUEkxX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQTQwMDApCi0jZGVmaW5lIEtQUF9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEE4MDAwKQotI2RlZmluZSBJT01VWENfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQogI2RlZmluZSBVQVJUNF9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEIwMDAwKQogI2RlZmluZSBVQVJUNV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEI0MDAwKQotI2RlZmluZSBFQ1RfSVAxX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCODAwMCkKLSNkZWZpbmUgRUNUX0lQMl9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQkMwMDApCi0KLS8qCi0gKiBTUEJBIGdsb2JhbCBtb2R1bGUgZW5hYmxlZCAjMAotICovCi0jZGVmaW5lIFNQQkEwX0JBU0VfQUREUiAJMHg1MDAwMDAwMAotI2RlZmluZSBTUEJBMF9CQVNFX0FERFJfVklSVAkweEZDMTAwMDAwCi0jZGVmaW5lIFNQQkEwX1NJWkUJCVNaXzFNCiAKICNkZWZpbmUgTU1DX1NESEMxX0JBU0VfQUREUgkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwNDAwMCkKICNkZWZpbmUgTU1DX1NESEMyX0JBU0VfQUREUgkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwODAwMCkKLSNkZWZpbmUgVUFSVDNfQkFTRV9BRERSIAkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwQzAwMCkKLSNkZWZpbmUgQ1NQSTJfQkFTRV9BRERSIAkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxMDAwMCkKLSNkZWZpbmUgU1NJMl9CQVNFX0FERFIJCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDE0MDAwKQogI2RlZmluZSBTSU0xX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMTgwMDApCiAjZGVmaW5lIElJTV9CQVNFX0FERFIJCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDFDMDAwKQotI2RlZmluZSBBVEFfRE1BX0JBU0VfQUREUgkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyMDAwMCkKLSNkZWZpbmUgTVNIQzFfQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyNDAwMCkKLSNkZWZpbmUgTVNIQzJfQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyNDAwMCkKLSNkZWZpbmUgU1BCQV9DVFJMX0JBU0VfQUREUgkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAzQzAwMCkKIAotLyoKLSAqIEFJUFMgMgotICovCi0jZGVmaW5lIEFJUFMyX0JBU0VfQUREUgkJMHg1M0YwMDAwMAotI2RlZmluZSBBSVBTMl9CQVNFX0FERFJfVklSVAkweEZDMjAwMDAwCi0jZGVmaW5lIEFJUFMyX1NJWkUJCVNaXzFNCi0jZGVmaW5lIENDTV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQogI2RlZmluZSBDU1BJM19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQogI2RlZmluZSBGSVJJX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOEMwMDApCi0jZGVmaW5lIEdQVDFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5MDAwMCkKLSNkZWZpbmUgRVBJVDFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKLSNkZWZpbmUgRVBJVDJfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKLSNkZWZpbmUgR1BJTzNfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBNDAwMCkKLSNkZWZpbmUgU0NDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQUMwMDApCiAjZGVmaW5lIFNDTV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEFFMDAwKQogI2RlZmluZSBTTU5fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBRjAwMCkKLSNkZWZpbmUgUk5HQV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEIwMDAwKQotI2RlZmluZSBJUFVfQ1RSTF9CQVNFX0FERFIJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQzAwMDApCi0jZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQzQwMDApCiAjZGVmaW5lIE1QRUc0X0VOQ19CQVNFX0FERFIJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQzgwMDApCi0jZGVmaW5lIEdQSU8xX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQ0MwMDApCi0jZGVmaW5lIEdQSU8yX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDAwMDApCi0jZGVmaW5lIFNETUFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBENDAwMCkKLSNkZWZpbmUgUlRDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDgwMDApCi0jZGVmaW5lIFdET0dfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEQzAwMCkKLSNkZWZpbmUgUFdNX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRTAwMDApCi0jZGVmaW5lIFJUSUNfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBFQzAwMCkKIAotLyoKLSAqIFJPTVAgYW5kIEFWSUMKLSAqLwotI2RlZmluZSBST01QX0JBU0VfQUREUgkJMHg2MDAwMDAwMAotI2RlZmluZSBST01QX0JBU0VfQUREUl9WSVJUCTB4RkM1MDAwMDAKLSNkZWZpbmUgUk9NUF9TSVpFCQlTWl8xTQorI2RlZmluZSBNWDMxX05GQ19CQVNFX0FERFIJKFhfTUVNQ19CQVNFX0FERFIgKyAweDAwMDApCiAKLSNkZWZpbmUgQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKLSNkZWZpbmUgQVZJQ19CQVNFX0FERFJfVklSVAkweEZDNDAwMDAwCi0jZGVmaW5lIEFWSUNfU0laRQkJU1pfMU0KLQotLyoKLSAqIE5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMKLSAqLwotI2RlZmluZSBYX01FTUNfQkFTRV9BRERSCTB4QjgwMDAwMDAKLSNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUCTB4RkMzMjAwMDAKLSNkZWZpbmUgWF9NRU1DX1NJWkUJCVNaXzY0SwotCi0jZGVmaW5lIE5GQ19CQVNFX0FERFIJCShYX01FTUNfQkFTRV9BRERSICsgMHgwMDAwKQotI2RlZmluZSBFU0RDVExfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQotI2RlZmluZSBXRUlNX0JBU0VfQUREUgkJKFhfTUVNQ19CQVNFX0FERFIgKyAweDIwMDApCi0jZGVmaW5lIE0zSUZfQkFTRV9BRERSCQkoWF9NRU1DX0JBU0VfQUREUiArIDB4MzAwMCkKLSNkZWZpbmUgRU1JX0NUTF9CQVNFX0FERFIJKFhfTUVNQ19CQVNFX0FERFIgKyAweDQwMDApCi0jZGVmaW5lIFBDTUNJQV9DVExfQkFTRV9BRERSCUVNSV9DVExfQkFTRV9BRERSCi0KLS8qCi0gKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MKLSAqLwotI2RlZmluZSBJUFVfTUVNX0JBU0VfQUREUgkweDcwMDAwMDAwCi0jZGVmaW5lIENTRDBfQkFTRV9BRERSCQkweDgwMDAwMDAwCi0jZGVmaW5lIENTRDFfQkFTRV9BRERSCQkweDkwMDAwMDAwCi0jZGVmaW5lIENTMF9CQVNFX0FERFIJCTB4QTAwMDAwMDAKLSNkZWZpbmUgQ1MxX0JBU0VfQUREUgkJMHhBODAwMDAwMAotI2RlZmluZSBDUzJfQkFTRV9BRERSCQkweEIwMDAwMDAwCi0jZGVmaW5lIENTM19CQVNFX0FERFIJCTB4QjIwMDAwMDAKLQotI2RlZmluZSBDUzRfQkFTRV9BRERSCQkweEI0MDAwMDAwCi0jZGVmaW5lIENTNF9CQVNFX0FERFJfVklSVAkweEY0MDAwMDAwCi0jZGVmaW5lIENTNF9TSVpFCQlTWl8zMk0KLQotI2RlZmluZSBDUzVfQkFTRV9BRERSCQkweEI2MDAwMDAwCi0jZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSCTB4QkMwMDAwMDAKLQotLyohCi0gKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCi0gKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4Ci0gKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCi0gKiBpdCByZXR1cm5zIDB4REVBREJFRUYKLSAqLwotI2RlZmluZSBJT19BRERSRVNTKHgpICAgXAotCSh2b2lkIF9faW9tZW0gKikgXAotCSgoKHggPj0gSVJBTV9CQVNFX0FERFIpICYmICh4IDwgKElSQU1fQkFTRV9BRERSICsgSVJBTV9TSVpFKSkpID8gSVJBTV9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gTDJDQ19CQVNFX0FERFIpICYmICh4IDwgKEwyQ0NfQkFTRV9BRERSICsgTDJDQ19TSVpFKSkpID8gTDJDQ19JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gQUlQUzFfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBTMV9CQVNFX0FERFIgKyBBSVBTMV9TSVpFKSkpID8gQUlQUzFfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IFNQQkEwX0JBU0VfQUREUikgJiYgKHggPCAoU1BCQTBfQkFTRV9BRERSICsgU1BCQTBfU0laRSkpKSA/IFNQQkEwX0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBBSVBTMl9CQVNFX0FERFIpICYmICh4IDwgKEFJUFMyX0JBU0VfQUREUiArIEFJUFMyX1NJWkUpKSkgPyBBSVBTMl9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gUk9NUF9CQVNFX0FERFIpICYmICh4IDwgKFJPTVBfQkFTRV9BRERSICsgUk9NUF9TSVpFKSkpID8gUk9NUF9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gQVZJQ19CQVNFX0FERFIpICYmICh4IDwgKEFWSUNfQkFTRV9BRERSICsgQVZJQ19TSVpFKSkpID8gQVZJQ19JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gQ1M0X0JBU0VfQUREUikgJiYgKHggPCAoQ1M0X0JBU0VfQUREUiArIENTNF9TSVpFKSkpID8gQ1M0X0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBYX01FTUNfSU9fQUREUkVTUyh4KTpcCi0JMHhERUFEQkVFRikKLQotLyoKLSAqIGRlZmluZSB0aGUgYWRkcmVzcyBtYXBwaW5nIG1hY3JvczogaW4gcGh5c2ljYWwgYWRkcmVzcyBvcmRlcgotICovCi0KLSNkZWZpbmUgSVJBTV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBJUkFNX0JBU0VfQUREUikgKyBJUkFNX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIEwyQ0NfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gTDJDQ19CQVNFX0FERFIpICsgTDJDQ19CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBSVBTMV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBBSVBTMV9CQVNFX0FERFIpICsgQUlQUzFfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgU1BCQTBfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gU1BCQTBfQkFTRV9BRERSKSArIFNQQkEwX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIEFJUFMyX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIEFJUFMyX0JBU0VfQUREUikgKyBBSVBTMl9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBST01QX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIFJPTVBfQkFTRV9BRERSKSArIFJPTVBfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgQVZJQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBBVklDX0JBU0VfQUREUikgKyBBVklDX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLS8qCi0gKiBJbnRlcnJ1cHQgbnVtYmVycwotICovCi0jZGVmaW5lIE1YQ19JTlRfUEVOX0FEUzc4NDMJMAotI2RlZmluZSBNWENfSU5UX1JFU1YxCQkxCi0jZGVmaW5lIE1YQ19JTlRfQ1M4OTAwQQkJMgotI2RlZmluZSBNWENfSU5UX0kyQzMJCTMKLSNkZWZpbmUgTVhDX0lOVF9JMkMyCQk0CiAjZGVmaW5lIE1YQ19JTlRfTVBFRzRfRU5DT0RFUgk1Ci0jZGVmaW5lIE1YQ19JTlRfUlRJQwkJNgogI2RlZmluZSBNWENfSU5UX0ZJUkkJCTcKLSNkZWZpbmUgTVhDX0lOVF9NTUNfU0RIQzIJOAorI2RlZmluZSBNWDMxX0lOVF9NTUNfU0RIQzIJOAogI2RlZmluZSBNWENfSU5UX01NQ19TREhDMQk5Ci0jZGVmaW5lIE1YQ19JTlRfSTJDCQkxMAotI2RlZmluZSBNWENfSU5UX1NTSTIJCTExCi0jZGVmaW5lIE1YQ19JTlRfU1NJMQkJMTIKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMgkJMTMKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMQkJMTQKLSNkZWZpbmUgTVhDX0lOVF9BVEEJCTE1CisjZGVmaW5lIE1YMzFfSU5UX1NTSTIJCTExCisjZGVmaW5lIE1YMzFfSU5UX1NTSTEJCTEyCiAjZGVmaW5lIE1YQ19JTlRfTUJYCQkxNgogI2RlZmluZSBNWENfSU5UX0NTUEkzCQkxNwotI2RlZmluZSBNWENfSU5UX1VBUlQzCQkxOAotI2RlZmluZSBNWENfSU5UX0lJTQkJMTkKICNkZWZpbmUgTVhDX0lOVF9TSU0yCQkyMAogI2RlZmluZSBNWENfSU5UX1NJTTEJCTIxCi0jZGVmaW5lIE1YQ19JTlRfUk5HQQkJMjIKLSNkZWZpbmUgTVhDX0lOVF9FVlRNT04JCTIzCi0jZGVmaW5lIE1YQ19JTlRfS1BQCQkyNAotI2RlZmluZSBNWENfSU5UX1JUQwkJMjUKLSNkZWZpbmUgTVhDX0lOVF9QV00JCTI2Ci0jZGVmaW5lIE1YQ19JTlRfRVBJVDIJCTI3Ci0jZGVmaW5lIE1YQ19JTlRfRVBJVDEJCTI4Ci0jZGVmaW5lIE1YQ19JTlRfR1BUCQkyOQotI2RlZmluZSBNWENfSU5UX1JFU1YzMAkJMzAKLSNkZWZpbmUgTVhDX0lOVF9SRVNWMzEJCTMxCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDIJCTMyCi0jZGVmaW5lIE1YQ19JTlRfTkFOREZDCQkzMwotI2RlZmluZSBNWENfSU5UX1NETUEJCTM0CisjZGVmaW5lIE1YQ19JTlRfQ0NNX0RWRlMJMzEKICNkZWZpbmUgTVhDX0lOVF9VU0IxCQkzNQogI2RlZmluZSBNWENfSU5UX1VTQjIJCTM2CiAjZGVmaW5lIE1YQ19JTlRfVVNCMwkJMzcKICNkZWZpbmUgTVhDX0lOVF9VU0I0CQkzOAotI2RlZmluZSBNWENfSU5UX01TSEMxCQkzOQogI2RlZmluZSBNWENfSU5UX01TSEMyCQk0MAotI2RlZmluZSBNWENfSU5UX0lQVV9FUlIJCTQxCi0jZGVmaW5lIE1YQ19JTlRfSVBVX1NZTgkJNDIKLSNkZWZpbmUgTVhDX0lOVF9SRVNWNDMJCTQzCi0jZGVmaW5lIE1YQ19JTlRfUkVTVjQ0CQk0NAotI2RlZmluZSBNWENfSU5UX1VBUlQxCQk0NQogI2RlZmluZSBNWENfSU5UX1VBUlQ0CQk0NgogI2RlZmluZSBNWENfSU5UX1VBUlQ1CQk0NwotI2RlZmluZSBNWENfSU5UX0VDVAkJNDgKLSNkZWZpbmUgTVhDX0lOVF9TQ0NfU0NNCQk0OQotI2RlZmluZSBNWENfSU5UX1NDQ19TTU4JCTUwCi0jZGVmaW5lIE1YQ19JTlRfR1BJTzIJCTUxCi0jZGVmaW5lIE1YQ19JTlRfR1BJTzEJCTUyCiAjZGVmaW5lIE1YQ19JTlRfQ0NNCQk1MwogI2RlZmluZSBNWENfSU5UX1BDTUNJQQkJNTQKLSNkZWZpbmUgTVhDX0lOVF9XRE9HCQk1NQotI2RlZmluZSBNWENfSU5UX0dQSU8zCQk1NgotI2RlZmluZSBNWENfSU5UX1JFU1Y1NwkJNTcKLSNkZWZpbmUgTVhDX0lOVF9FWFRfUE9XRVIJNTgKLSNkZWZpbmUgTVhDX0lOVF9FWFRfVEVNUEVSCTU5Ci0jZGVmaW5lIE1YQ19JTlRfRVhUX1NFTlNPUjYwCTYwCi0jZGVmaW5lIE1YQ19JTlRfRVhUX1NFTlNPUjYxCTYxCi0jZGVmaW5lIE1YQ19JTlRfRVhUX1dET0cJNjIKLSNkZWZpbmUgTVhDX0lOVF9FWFRfVFYJCTYzCiAKLSNkZWZpbmUgUFJPRF9TSUdOQVRVUkUJCTB4MQkvKiBGb3IgTVgzMSAqLwotCi0vKiBzaWxpY29uIHJldmlzaW9ucyBzcGVjaWZpYyB0byBpLk1YMzEgKi8KLSNkZWZpbmUgQ0hJUF9SRVZfMV8wCQkweDEwCi0jZGVmaW5lIENISVBfUkVWXzFfMQkJMHgxMQotI2RlZmluZSBDSElQX1JFVl8xXzIJCTB4MTIKLSNkZWZpbmUgQ0hJUF9SRVZfMV8zCQkweDEzCi0jZGVmaW5lIENISVBfUkVWXzJfMAkJMHgyMAotI2RlZmluZSBDSElQX1JFVl8yXzEJCTB4MjEKLSNkZWZpbmUgQ0hJUF9SRVZfMl8yCQkweDIyCi0jZGVmaW5lIENISVBfUkVWXzJfMwkJMHgyMwotI2RlZmluZSBDSElQX1JFVl8zXzAJCTB4MzAKLSNkZWZpbmUgQ0hJUF9SRVZfM18xCQkweDMxCi0jZGVmaW5lIENISVBfUkVWXzNfMgkJMHgzMgotCi0jZGVmaW5lIFNZU1RFTV9SRVZfTUlOCQlDSElQX1JFVl8xXzAKLSNkZWZpbmUgU1lTVEVNX1JFVl9OVU0JCTMKLQotLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLSNkZWZpbmUgR1BJT19EUgkJIAkweDAwCi0jZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDQKLSNkZWZpbmUgR1BJT19QU1IJIAkweDA4Ci0jZGVmaW5lIEdQSU9fSUNSMQkgCTB4MEMKLSNkZWZpbmUgR1BJT19JQ1IyCSAJMHgxMAotI2RlZmluZSBHUElPX0lNUgkgCTB4MTQKLSNkZWZpbmUgR1BJT19JU1IJIAkweDE4Ci0jZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MQotI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDMKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KLS8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KLQotLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gOTYgR1BJT3MgKi8KLSNkZWZpbmUgQVJDSF9OUl9HUElPUwkJOTYKLQotI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX19NWENfQk9PVF9VTkNPTVBSRVNTKQotCi0vKiB0aGlzIGlzIGEgaS5NWDMxIENQVSAqLwotI2RlZmluZSBjcHVfaXNfbXgzMSgpCQkoMSkKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OwotCi1zdGF0aWMgaW5saW5lIGludCBteDMxX3JldmlzaW9uKHZvaWQpCi17Ci0JcmV0dXJuIHN5c3RlbV9yZXY7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2NWZlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIElSQU0KKyAqLworI2RlZmluZSBNWDM1X0lSQU1fQkFTRV9BRERSCQkweDEwMDAwMDAwCS8qIGludGVybmFsIHJhbSAqLworI2RlZmluZSBNWDM1X0lSQU1fU0laRQkJU1pfMTI4SworCisjZGVmaW5lIE1YQ19GRUNfQkFTRV9BRERSCTB4NTAwMzgwMDAKKyNkZWZpbmUgTVgzNV9ORkNfQkFTRV9BRERSCTB4QkIwMDAwMDAKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzCisgKi8KKyNkZWZpbmUgTVhDX0lOVF9PV0lSRQkJMgorI2RlZmluZSBNWDM1X0lOVF9NTUNfU0RIQzEJNworI2RlZmluZSBNWENfSU5UX01NQ19TREhDMgk4CisjZGVmaW5lIE1YQ19JTlRfTU1DX1NESEMzCTkKKyNkZWZpbmUgTVgzNV9JTlRfU1NJMQkJMTEKKyNkZWZpbmUgTVgzNV9JTlRfU1NJMgkJMTIKKyNkZWZpbmUgTVhDX0lOVF9HUFUyRAkJMTYKKyNkZWZpbmUgTVhDX0lOVF9BU1JDCQkxNworI2RlZmluZSBNWENfSU5UX1VTQkhTCQkzNQorI2RlZmluZSBNWENfSU5UX1VTQk9URwkJMzcKKyNkZWZpbmUgTVhDX0lOVF9FU0FJCQk0MAorI2RlZmluZSBNWENfSU5UX0NBTjEJCTQzCisjZGVmaW5lIE1YQ19JTlRfQ0FOMgkJNDQKKyNkZWZpbmUgTVhDX0lOVF9NTEIJCTQ2CisjZGVmaW5lIE1YQ19JTlRfU1BESUYJCTQ3CisjZGVmaW5lIE1YQ19JTlRfRkVDCQk1NworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzZmIuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNmYi5oCmluZGV4IGUzOTFhNzYuLmFjMjRjNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNmYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNmYi5oCkBAIC0xNCwyNSArMTQsMjUgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCiAvKiBQcm9wcmlldGFyeSBGQl9TWU5DXyBmbGFncyAqLwotI2RlZmluZSBGQl9TWU5DX09FX0FDVF9ISUdIICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgRkJfU1lOQ19DTEtfSU5WRVJUICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEZCX1NZTkNfREFUQV9JTlZFUlQgICAgMHgyMDAwMDAwMAotI2RlZmluZSBGQl9TWU5DX0NMS19JRExFX0VOICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgRkJfU1lOQ19TSEFSUF9NT0RFICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEZCX1NZTkNfU1dBUF9SR0IgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBGQl9TWU5DX0NMS19TRUxfRU4gICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19PRV9BQ1RfSElHSAkweDgwMDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfQ0xLX0lOVkVSVAkweDQwMDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfREFUQV9JTlZFUlQJMHgyMDAwMDAwMAorI2RlZmluZSBGQl9TWU5DX0NMS19JRExFX0VOCTB4MTAwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19TSEFSUF9NT0RFCTB4MDgwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19TV0FQX1JHQgkweDA0MDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfQ0xLX1NFTF9FTgkweDAyMDAwMDAwCiAKIC8qKgogICogc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgLSBteDNmYiBwbGF0Zm9ybSBkYXRhCiAgKgotICogQGRtYV9kZXY6ICAgcG9pbnRlciB0byB0aGUgZG1hLWRldmljZSwgdXNlZCBmb3IgZG1hLXNsYXZlIGNvbm5lY3Rpb24KLSAqIEBtb2RlOiAgICAgIHBvaW50ZXIgdG8gYSBwbGF0Zm9ybS1wcm92aWRlZCBwZXIgbXhjX3JlZ2lzdGVyX2ZiKCkgdmlkZW9tb2RlCisgKiBAZG1hX2RldjoJcG9pbnRlciB0byB0aGUgZG1hLWRldmljZSwgdXNlZCBmb3IgZG1hLXNsYXZlIGNvbm5lY3Rpb24KKyAqIEBtb2RlOglwb2ludGVyIHRvIGEgcGxhdGZvcm0tcHJvdmlkZWQgcGVyIG14Y19yZWdpc3Rlcl9mYigpIHZpZGVvbW9kZQogICovCiBzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSB7Ci0gICAgICAgc3RydWN0IGRldmljZSAgICAgICAgICAgICAgICAgICAqZG1hX2RldjsKLSAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICpuYW1lOwotICAgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgICAgICAgKm1vZGU7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fbW9kZXM7CisJc3RydWN0IGRldmljZQkJCSpkbWFfZGV2OworCWNvbnN0IGNoYXIJCQkqbmFtZTsKKwljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlCSptb2RlOworCWludAkJCQludW1fbW9kZXM7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzhjNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzeC5oCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgzMV9IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgzMV9IX18KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgorI2VuZGlmCisKKy8qCisgKiBNWDMxIG1lbW9yeSBtYXA6CisgKgorICogVmlydAkJUGh5cwkJU2l6ZQlXaGF0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZDMDAwMDAwCTQzRjAwMDAwCTFNCUFJUFMgMQorICogRkMxMDAwMDAJNTAwMDAwMDAJMU0JU1BCQQorICogRkMyMDAwMDAJNTNGMDAwMDAJMU0JQUlQUyAyCisgKiBGQzUwMDAwMAk2MDAwMDAwMAkxMjhNCVJPTVBBVENICisgKiBGQzQwMDAwMAk2ODAwMDAwMAkxMjhNCUFWSUMKKyAqICAgICAgICAgCTcwMDAwMDAwCTI1Nk0JSVBVIChNQVggTTIpCisgKiAgICAgICAgIAk4MDAwMDAwMAkyNTZNCUNTRDAgU0RSQU0vRERSCisgKiAgICAgICAgIAk5MDAwMDAwMAkyNTZNCUNTRDEgU0RSQU0vRERSCisgKiAgICAgICAgIAlBMDAwMDAwMAkxMjhNCUNTMCBGbGFzaAorICogICAgICAgICAJQTgwMDAwMDAJMTI4TQlDUzEgRmxhc2gKKyAqICAgICAgICAgCUIwMDAwMDAwCTMyTQlDUzIKKyAqICAgICAgICAgCUIyMDAwMDAwCTMyTQlDUzMKKyAqIEY0MDAwMDAwCUI0MDAwMDAwCTMyTQlDUzQKKyAqICAgICAgICAgCUI2MDAwMDAwCTMyTQlDUzUKKyAqIEZDMzIwMDAwCUI4MDAwMDAwCTY0SwlOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzCisgKiAgICAgICAgIAlDMDAwMDAwMAk2NE0JUENNQ0lBL0NGCisgKi8KKworI2RlZmluZSBDUzBfQkFTRV9BRERSCQkweEEwMDAwMDAwCisjZGVmaW5lIENTMV9CQVNFX0FERFIJCTB4QTgwMDAwMDAKKyNkZWZpbmUgQ1MyX0JBU0VfQUREUgkJMHhCMDAwMDAwMAorI2RlZmluZSBDUzNfQkFTRV9BRERSCQkweEIyMDAwMDAwCisKKyNkZWZpbmUgQ1M0X0JBU0VfQUREUgkJMHhCNDAwMDAwMAorI2RlZmluZSBDUzRfQkFTRV9BRERSX1ZJUlQJMHhGNDAwMDAwMAorI2RlZmluZSBDUzRfU0laRQkJU1pfMzJNCisKKyNkZWZpbmUgQ1M1X0JBU0VfQUREUgkJMHhCNjAwMDAwMAorI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUgkweEJDMDAwMDAwCisKKy8qCisgKiBMMkNDCisgKi8KKyNkZWZpbmUgTDJDQ19CQVNFX0FERFIJCTB4MzAwMDAwMDAKKyNkZWZpbmUgTDJDQ19TSVpFCQlTWl8xTQorCisvKgorICogQUlQUyAxCisgKi8KKyNkZWZpbmUgQUlQUzFfQkFTRV9BRERSCQkweDQzRjAwMDAwCisjZGVmaW5lIEFJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkMwMDAwMDAKKyNkZWZpbmUgQUlQUzFfU0laRQkJU1pfMU0KKworI2RlZmluZSBNQVhfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwNDAwMCkKKyNkZWZpbmUgRVZUTU9OX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwODAwMCkKKyNkZWZpbmUgQ0xLQ1RMX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwQzAwMCkKKyNkZWZpbmUgRVRCX1NMT1Q0X0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxMDAwMCkKKyNkZWZpbmUgRVRCX1NMT1Q1X0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKKyNkZWZpbmUgRUNUX0NUSU9fQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDE4MDAwKQorI2RlZmluZSBJMkNfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKKyNkZWZpbmUgSTJDM19CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQorI2RlZmluZSBVQVJUMV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDkwMDAwKQorI2RlZmluZSBVQVJUMl9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDk0MDAwKQorI2RlZmluZSBJMkMyX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCisjZGVmaW5lIE9XSVJFX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOUMwMDApCisjZGVmaW5lIFNTSTFfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBMDAwMCkKKyNkZWZpbmUgQ1NQSTFfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBNDAwMCkKKyNkZWZpbmUgS1BQX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQTgwMDApCisjZGVmaW5lIElPTVVYQ19CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQUMwMDApCisjZGVmaW5lIEVDVF9JUDFfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEI4MDAwKQorI2RlZmluZSBFQ1RfSVAyX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCQzAwMCkKKworLyoKKyAqIFNQQkEgZ2xvYmFsIG1vZHVsZSBlbmFibGVkICMwCisgKi8KKyNkZWZpbmUgU1BCQTBfQkFTRV9BRERSIAkweDUwMDAwMDAwCisjZGVmaW5lIFNQQkEwX0JBU0VfQUREUl9WSVJUCTB4RkMxMDAwMDAKKyNkZWZpbmUgU1BCQTBfU0laRQkJU1pfMU0KKworI2RlZmluZSBVQVJUM19CQVNFX0FERFIgCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDBDMDAwKQorI2RlZmluZSBDU1BJMl9CQVNFX0FERFIgCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDEwMDAwKQorI2RlZmluZSBTU0kyX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMTQwMDApCisjZGVmaW5lIEFUQV9ETUFfQkFTRV9BRERSCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDIwMDAwKQorI2RlZmluZSBNU0hDMV9CQVNFX0FERFIJCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDI0MDAwKQorI2RlZmluZSBTUEJBX0NUUkxfQkFTRV9BRERSCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDNDMDAwKQorCisvKgorICogQUlQUyAyCisgKi8KKyNkZWZpbmUgQUlQUzJfQkFTRV9BRERSCQkweDUzRjAwMDAwCisjZGVmaW5lIEFJUFMyX0JBU0VfQUREUl9WSVJUCTB4RkMyMDAwMDAKKyNkZWZpbmUgQUlQUzJfU0laRQkJU1pfMU0KKyNkZWZpbmUgQ0NNX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwODAwMDApCisjZGVmaW5lIEdQVDFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5MDAwMCkKKyNkZWZpbmUgRVBJVDFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKKyNkZWZpbmUgRVBJVDJfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKKyNkZWZpbmUgR1BJTzNfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBNDAwMCkKKyNkZWZpbmUgU0NDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQUMwMDApCisjZGVmaW5lIFJOR0FfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBCMDAwMCkKKyNkZWZpbmUgSVBVX0NUUkxfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEMwMDAwKQorI2RlZmluZSBBVURNVVhfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEM0MDAwKQorI2RlZmluZSBHUElPMV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMENDMDAwKQorI2RlZmluZSBHUElPMl9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQwMDAwKQorI2RlZmluZSBTRE1BX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDQwMDApCisjZGVmaW5lIFJUQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQ4MDAwKQorI2RlZmluZSBXRE9HX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwREMwMDApCisjZGVmaW5lIFBXTV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEUwMDAwKQorI2RlZmluZSBSVElDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRUMwMDApCisKKy8qCisgKiBST01QIGFuZCBBVklDCisgKi8KKyNkZWZpbmUgUk9NUF9CQVNFX0FERFIJCTB4NjAwMDAwMDAKKyNkZWZpbmUgUk9NUF9CQVNFX0FERFJfVklSVAkweEZDNTAwMDAwCisjZGVmaW5lIFJPTVBfU0laRQkJU1pfMU0KKworI2RlZmluZSBBVklDX0JBU0VfQUREUgkJMHg2ODAwMDAwMAorI2RlZmluZSBBVklDX0JBU0VfQUREUl9WSVJUCTB4RkM0MDAwMDAKKyNkZWZpbmUgQVZJQ19TSVpFCQlTWl8xTQorCisvKgorICogTkFORCwgU0RSQU0sIFdFSU0sIE0zSUYsIEVNSSBjb250cm9sbGVycworICovCisjZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIJMHhCODAwMDAwMAorI2RlZmluZSBYX01FTUNfQkFTRV9BRERSX1ZJUlQJMHhGQzMyMDAwMAorI2RlZmluZSBYX01FTUNfU0laRQkJU1pfNjRLCisKKyNkZWZpbmUgRVNEQ1RMX0JBU0VfQUREUgkoWF9NRU1DX0JBU0VfQUREUiArIDB4MTAwMCkKKyNkZWZpbmUgV0VJTV9CQVNFX0FERFIJCShYX01FTUNfQkFTRV9BRERSICsgMHgyMDAwKQorI2RlZmluZSBNM0lGX0JBU0VfQUREUgkJKFhfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCisjZGVmaW5lIEVNSV9DVExfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHg0MDAwKQorI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUglFTUlfQ1RMX0JBU0VfQUREUgorCisvKgorICogTWVtb3J5IHJlZ2lvbnMgYW5kIENTCisgKi8KKyNkZWZpbmUgSVBVX01FTV9CQVNFX0FERFIJMHg3MDAwMDAwMAorI2RlZmluZSBDU0QwX0JBU0VfQUREUgkJMHg4MDAwMDAwMAorI2RlZmluZSBDU0QxX0JBU0VfQUREUgkJMHg5MDAwMDAwMAorCisvKiEKKyAqIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGh5c2ljYWwgdG8gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCB0aGUKKyAqIHBlcmlwaGVyYWwgbW9kdWxlcy4gSXQgaXMgdXNlZCBieSBwYXNzaW5nIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzIHgKKyAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4gSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IG1hcHBlZCwKKyAqIGl0IHJldHVybnMgMHhERUFEQkVFRgorICovCisjZGVmaW5lIElPX0FERFJFU1MoeCkgICBcCisJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIFwKKwkoKCh4ID49IEFJUFMxX0JBU0VfQUREUikgJiYgKHggPCAoQUlQUzFfQkFTRV9BRERSICsgQUlQUzFfU0laRSkpKSA/IEFJUFMxX0lPX0FERFJFU1MoeCk6XAorCSgoeCA+PSBTUEJBMF9CQVNFX0FERFIpICYmICh4IDwgKFNQQkEwX0JBU0VfQUREUiArIFNQQkEwX1NJWkUpKSkgPyBTUEJBMF9JT19BRERSRVNTKHgpOlwKKwkoKHggPj0gQUlQUzJfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBTMl9CQVNFX0FERFIgKyBBSVBTMl9TSVpFKSkpID8gQUlQUzJfSU9fQUREUkVTUyh4KTpcCisJKCh4ID49IFJPTVBfQkFTRV9BRERSKSAmJiAoeCA8IChST01QX0JBU0VfQUREUiArIFJPTVBfU0laRSkpKSA/IFJPTVBfSU9fQUREUkVTUyh4KTpcCisJKCh4ID49IEFWSUNfQkFTRV9BRERSKSAmJiAoeCA8IChBVklDX0JBU0VfQUREUiArIEFWSUNfU0laRSkpKSA/IEFWSUNfSU9fQUREUkVTUyh4KTpcCisJKCh4ID49IENTNF9CQVNFX0FERFIpICYmICh4IDwgKENTNF9CQVNFX0FERFIgKyBDUzRfU0laRSkpKSA/IENTNF9JT19BRERSRVNTKHgpOlwKKwkoKHggPj0gWF9NRU1DX0JBU0VfQUREUikgJiYgKHggPCAoWF9NRU1DX0JBU0VfQUREUiArIFhfTUVNQ19TSVpFKSkpID8gWF9NRU1DX0lPX0FERFJFU1MoeCk6XAorCTB4REVBREJFRUYpCisKKy8qCisgKiBkZWZpbmUgdGhlIGFkZHJlc3MgbWFwcGluZyBtYWNyb3M6IGluIHBoeXNpY2FsIGFkZHJlc3Mgb3JkZXIKKyAqLworI2RlZmluZSBMMkNDX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIEwyQ0NfQkFTRV9BRERSKSArIEwyQ0NfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgQUlQUzFfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gQUlQUzFfQkFTRV9BRERSKSArIEFJUFMxX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIFNQQkEwX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIFNQQkEwX0JBU0VfQUREUikgKyBTUEJBMF9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBBSVBTMl9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBBSVBTMl9CQVNFX0FERFIpICsgQUlQUzJfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgUk9NUF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBST01QX0JBU0VfQUREUikgKyBST01QX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gQVZJQ19CQVNFX0FERFIpICsgQVZJQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBDUzRfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gQ1M0X0JBU0VfQUREUikgKyBDUzRfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgWF9NRU1DX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIFhfTUVNQ19CQVNFX0FERFIpICsgWF9NRU1DX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIFBDTUNJQV9JT19BRERSRVNTKHgpIFwKKwkoKCh4KSAtIFhfTUVNQ19CQVNFX0FERFIpICsgWF9NRU1DX0JBU0VfQUREUl9WSVJUKQorCisvKgorICogSW50ZXJydXB0IG51bWJlcnMKKyAqLworI2RlZmluZSBNWENfSU5UX0kyQzMJCTMKKyNkZWZpbmUgTVhDX0lOVF9JMkMyCQk0CisjZGVmaW5lIE1YQ19JTlRfUlRJQwkJNgorI2RlZmluZSBNWENfSU5UX0kyQwkJMTAKKyNkZWZpbmUgTVhDX0lOVF9DU1BJMgkJMTMKKyNkZWZpbmUgTVhDX0lOVF9DU1BJMQkJMTQKKyNkZWZpbmUgTVhDX0lOVF9BVEEJCTE1CisjZGVmaW5lIE1YQ19JTlRfVUFSVDMJCTE4CisjZGVmaW5lIE1YQ19JTlRfSUlNCQkxOQorI2RlZmluZSBNWENfSU5UX1JOR0EJCTIyCisjZGVmaW5lIE1YQ19JTlRfRVZUTU9OCQkyMworI2RlZmluZSBNWENfSU5UX0tQUAkJMjQKKyNkZWZpbmUgTVhDX0lOVF9SVEMJCTI1CisjZGVmaW5lIE1YQ19JTlRfUFdNCQkyNgorI2RlZmluZSBNWENfSU5UX0VQSVQyCQkyNworI2RlZmluZSBNWENfSU5UX0VQSVQxCQkyOAorI2RlZmluZSBNWENfSU5UX0dQVAkJMjkKKyNkZWZpbmUgTVhDX0lOVF9QT1dFUl9GQUlMCTMwCisjZGVmaW5lIE1YQ19JTlRfVUFSVDIJCTMyCisjZGVmaW5lIE1YQ19JTlRfTkFOREZDCQkzMworI2RlZmluZSBNWENfSU5UX1NETUEJCTM0CisjZGVmaW5lIE1YQ19JTlRfTVNIQzEJCTM5CisjZGVmaW5lIE1YQ19JTlRfSVBVX0VSUgkJNDEKKyNkZWZpbmUgTVhDX0lOVF9JUFVfU1lOCQk0MgorI2RlZmluZSBNWENfSU5UX1VBUlQxCQk0NQorI2RlZmluZSBNWENfSU5UX0VDVAkJNDgKKyNkZWZpbmUgTVhDX0lOVF9TQ0NfU0NNCQk0OQorI2RlZmluZSBNWENfSU5UX1NDQ19TTU4JCTUwCisjZGVmaW5lIE1YQ19JTlRfR1BJTzIJCTUxCisjZGVmaW5lIE1YQ19JTlRfR1BJTzEJCTUyCisjZGVmaW5lIE1YQ19JTlRfV0RPRwkJNTUKKyNkZWZpbmUgTVhDX0lOVF9HUElPMwkJNTYKKyNkZWZpbmUgTVhDX0lOVF9FWFRfUE9XRVIJNTgKKyNkZWZpbmUgTVhDX0lOVF9FWFRfVEVNUEVSCTU5CisjZGVmaW5lIE1YQ19JTlRfRVhUX1NFTlNPUjYwCTYwCisjZGVmaW5lIE1YQ19JTlRfRVhUX1NFTlNPUjYxCTYxCisjZGVmaW5lIE1YQ19JTlRfRVhUX1dET0cJNjIKKyNkZWZpbmUgTVhDX0lOVF9FWFRfVFYJCTYzCisKKyNkZWZpbmUgUFJPRF9TSUdOQVRVUkUJCTB4MQkvKiBGb3IgTVgzMSAqLworCisvKiBzaWxpY29uIHJldmlzaW9ucyBzcGVjaWZpYyB0byBpLk1YMzEgKi8KKyNkZWZpbmUgQ0hJUF9SRVZfMV8wCQkweDEwCisjZGVmaW5lIENISVBfUkVWXzFfMQkJMHgxMQorI2RlZmluZSBDSElQX1JFVl8xXzIJCTB4MTIKKyNkZWZpbmUgQ0hJUF9SRVZfMV8zCQkweDEzCisjZGVmaW5lIENISVBfUkVWXzJfMAkJMHgyMAorI2RlZmluZSBDSElQX1JFVl8yXzEJCTB4MjEKKyNkZWZpbmUgQ0hJUF9SRVZfMl8yCQkweDIyCisjZGVmaW5lIENISVBfUkVWXzJfMwkJMHgyMworI2RlZmluZSBDSElQX1JFVl8zXzAJCTB4MzAKKyNkZWZpbmUgQ0hJUF9SRVZfM18xCQkweDMxCisjZGVmaW5lIENISVBfUkVWXzNfMgkJMHgzMgorCisjZGVmaW5lIFNZU1RFTV9SRVZfTUlOCQlDSElQX1JFVl8xXzAKKyNkZWZpbmUgU1lTVEVNX1JFVl9OVU0JCTMKKworLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKyNkZWZpbmUgR1BJT19EUgkJIAkweDAwCisjZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDQKKyNkZWZpbmUgR1BJT19QU1IJIAkweDA4CisjZGVmaW5lIEdQSU9fSUNSMQkgCTB4MEMKKyNkZWZpbmUgR1BJT19JQ1IyCSAJMHgxMAorI2RlZmluZSBHUElPX0lNUgkgCTB4MTQKKyNkZWZpbmUgR1BJT19JU1IJIAkweDE4CisjZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgwCisjZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MQorI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UJMHgyCisjZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDMKKyNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0CisKKy8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KKworLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gOTYgR1BJT3MgKi8KKyNkZWZpbmUgQVJDSF9OUl9HUElPUwkJOTYKKworI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX19NWENfQk9PVF9VTkNPTVBSRVNTKQorCitleHRlcm4gdW5zaWduZWQgaW50IHN5c3RlbV9yZXY7CisKK3N0YXRpYyBpbmxpbmUgaW50IG14MzFfcmV2aXNpb24odm9pZCkKK3sKKwlyZXR1cm4gc3lzdGVtX3JldjsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaAppbmRleCBmNmNhYWIwLi41ZmEyYTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCkBAIC0yNCwxMyArMjQsNzQgQEAKICNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLS8qIGNsZWFuIHVwIGFsbCB0aGluZ3MgdGhhdCBhcmUgbm90IHVzZWQgKi8KLSNpZm5kZWYgQ09ORklHX0FSQ0hfTVgzCi0jIGRlZmluZSBjcHVfaXNfbXgzMSgpICgwKQorI2RlZmluZSBNWENfQ1BVX01YMQkJMQorI2RlZmluZSBNWENfQ1BVX01YMjEJCTIxCisjZGVmaW5lIE1YQ19DUFVfTVgyNwkJMjcKKyNkZWZpbmUgTVhDX0NQVV9NWDMxCQkzMQorI2RlZmluZSBNWENfQ1BVX01YMzUJCTM1CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgaW50IF9fbXhjX2NwdV90eXBlOwogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX01BQ0hfTVgyNwotIyBkZWZpbmUgY3B1X2lzX214MjcoKSAoMCkKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKKyMgaWZkZWYgbXhjX2NwdV90eXBlCisjICB1bmRlZiBteGNfY3B1X3R5cGUKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBNWENfQ1BVX01YMQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MSgpCQkobXhjX2NwdV90eXBlID09IE1YQ19DUFVfTVgxKQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19teDEoKQkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX01YMjEKKyMgaWZkZWYgbXhjX2NwdV90eXBlCisjICB1bmRlZiBteGNfY3B1X3R5cGUKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBNWENfQ1BVX01YMjEKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teDIxKCkJCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWDIxKQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19teDIxKCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CisjIGlmZGVmIG14Y19jcHVfdHlwZQorIyAgdW5kZWYgbXhjX2NwdV90eXBlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgTVhDX0NQVV9NWDI3CisjIGVuZGlmCisjIGRlZmluZSBjcHVfaXNfbXgyNygpCQkobXhjX2NwdV90eXBlID09IE1YQ19DUFVfTVgyNykKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXgyNygpCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgzMQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MzEoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMzEpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MzEoKQkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX01YMzUKKyMgaWZkZWYgbXhjX2NwdV90eXBlCisjICB1bmRlZiBteGNfY3B1X3R5cGUKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBNWENfQ1BVX01YMzUKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teDM1KCkJCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWDM1KQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19teDM1KCkJCSgwKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWDIpCkBAIC0zOSw0ICsxMDAsNyBAQAogI2RlZmluZSBDU0NSX0EobikgKElPX0FERFJFU1MoV0VJTV9CQVNFX0FERFIpICsgbiAqIDB4MTAgKyAweDgpCiAjZW5kaWYKIAorI2RlZmluZSBjcHVfaXNfbXgzKCkJKGNwdV9pc19teDMxKCkgfHwgY3B1X2lzX214MzUoKSkKKyNkZWZpbmUgY3B1X2lzX214MigpCShjcHVfaXNfbXgyMSgpIHx8IGNwdV9pc19teDI3KCkpCisKICNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYmJmYzM3NC4uZTU2MjQxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjYsOSArMjYsNiBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLQljcHVfcmVzZXQoMCk7Ci19Cit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfU1lTVEVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtbXgxLW14Mi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtbXgxLW14Mi5jCmluZGV4IGRmNmYxODMuLmEzNzE2M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LW14MS1teDIuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MS1teDIuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAKIHZvaWQgbXhjX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9wd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmZmYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBzaW1wbGUgZHJpdmVyIGZvciBQV00gKFB1bHNlIFdpZHRoIE1vZHVsYXRvcikgY29udHJvbGxlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogRGVyaXZlZCBmcm9tIHB4YSBQV00gZHJpdmVyIGJ5IGVyaWMgbWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgorCisjaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEgfHwgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIxCisjZGVmaW5lIFBXTV9WRVJfMQorCisjZGVmaW5lIFBXTUNSCTB4MDAJLyogUFdNIENvbnRyb2wgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTVNSCTB4MDQJLyogUFdNIFNhbXBsZSBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNUFIJMHgwOAkvKiBQV00gUGVyaW9kIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01DTlIJMHgwQwkvKiBQV00gQ291bnRlciBSZWdpc3RlcgkJKi8KKworI2RlZmluZSBQV01DUl9IQ1RSCQkoMSA8PCAxOCkJCS8qIEhhbGZ3b3JkIEZJRk8gRGF0YSBTd2FwcGluZwkqLworI2RlZmluZSBQV01DUl9CQ1RSCQkoMSA8PCAxNykJCS8qIEJ5dGUgRklGTyBEYXRhIFN3YXBwaW5nCSovCisjZGVmaW5lIFBXTUNSX1NXUgkJKDEgPDwgMTYpCQkvKiBTb2Z0d2FyZSBSZXNldAkJKi8KKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDX1BFUkNMSwkoMCA8PCAxNSkJCS8qIFBFUkNMSyBDbG9jayBTb3VyY2UJCSovCisjZGVmaW5lIFBXTUNSX0NMS1NSQ19DTEszMgkoMSA8PCAxNSkJCS8qIDMyS0h6IENsb2NrIFNvdXJjZQkJKi8KKyNkZWZpbmUgUFdNQ1JfUFJFU0NBTEVSKHgpCSgoKHggLSAxKSAmIDB4N0YpIDw8IDgpCS8qIFBSRVNDQUxFUgkJCSovCisjZGVmaW5lIFBXTUNSX0lSUQkJKDEgPDwgNykJCS8qIEludGVycnVwdCBSZXF1ZXN0CQkqLworI2RlZmluZSBQV01DUl9JUlFFTgkJKDEgPDwgNikJCS8qIEludGVycnVwdCBSZXF1ZXN0IEVuYWJsZQkqLworI2RlZmluZSBQV01DUl9GSUZPQVYJCSgxIDw8IDUpCQkvKiBGSUZPIEF2YWlsYWJsZQkJKi8KKyNkZWZpbmUgUFdNQ1JfRU4JCSgxIDw8IDQpCQkvKiBFbmFibGVzL0Rpc2FibGVzIHRoZSBQV00JKi8KKyNkZWZpbmUgUFdNQ1JfUkVQRUFUKHgpCQkoKCh4KSAmIDB4MDMpIDw8IDIpCS8qIFNhbXBsZSBSZXBlYXRzCQkqLworI2RlZmluZSBQV01DUl9ESVYoeCkJCSgoKHgpICYgMHgwMykgPDwgMCkJLyogQ2xvY2sgZGl2aWRlciAyLzQvOC8xNgkqLworCisjZGVmaW5lIE1BWF9ESVYJCQkoMTI4ICogMTYpCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX01BQ0hfTVgyNyB8fCBkZWZpbmVkIENPTkZJR19BUkNIX01YMzEKKyNkZWZpbmUgUFdNX1ZFUl8yCisKKyNkZWZpbmUgUFdNQ1IJMHgwMAkvKiBQV00gQ29udHJvbCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNU1IJMHgwNAkvKiBQV00gU3RhdHVzIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01JUgkweDA4CS8qIFBXTSBJbnRlcnJ1cHQgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUFdNU0FSCTB4MEMJLyogUFdNIFNhbXBsZSBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNUFIJMHgxMAkvKiBQV00gUGVyaW9kIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01DTlIJMHgxNAkvKiBQV00gQ291bnRlciBSZWdpc3RlcgkJKi8KKworI2RlZmluZSBQV01DUl9FTgkJKDEgPDwgMCkJCS8qIEVuYWJsZXMvRGlzYWJsZXMgdGhlIFBXTQkqLworI2RlZmluZSBQV01DUl9SRVBFQVQoeCkJCSgoKHgpICYgMHgwMykgPDwgMSkJLyogU2FtcGxlIFJlcGVhdHMJCSovCisjZGVmaW5lIFBXTUNSX1NXUgkJKDEgPDwgMykJCS8qIFNvZnR3YXJlIFJlc2V0CQkqLworI2RlZmluZSBQV01DUl9QUkVTQ0FMRVIoeCkJKCgoeCAtIDEpICYgMHhGRkYpIDw8IDQpLyogUFJFU0NBTEVSCQkJKi8KKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDKHgpCQkoKCh4KSAmIDB4MykgPDwgMTYpCisjZGVmaW5lIFBXTUNSX0NMS1NSQ19PRkYJKDAgPDwgMTYpCisjZGVmaW5lIFBXTUNSX0NMS1NSQ19JUEcJKDEgPDwgMTYpCisjZGVmaW5lIFBXTUNSX0NMS1NSQ19JUEdfSElHSAkoMiA8PCAxNikKKyNkZWZpbmUgUFdNQ1JfQ0xLU1JDX0NMSzMyCSgzIDw8IDE2KQorI2RlZmluZSBQV01DUl9QT1VUQworI2RlZmluZSBQV01DUl9IQ1RSCQkoMSA8PCAyMCkJCS8qIEhhbGZ3b3JkIEZJRk8gRGF0YSBTd2FwcGluZwkqLworI2RlZmluZSBQV01DUl9CQ1RSCQkoMSA8PCAyMSkJCS8qIEJ5dGUgRklGTyBEYXRhIFN3YXBwaW5nCSovCisjZGVmaW5lIFBXTUNSX0RCR0VOCQkoMSA8PCAyMikJCS8qIERlYnVnIE1vZGUJCQkqLworI2RlZmluZSBQV01DUl9XQUlURU4JCSgxIDw8IDIzKQkJLyogV2FpdCBNb2RlCQkJKi8KKyNkZWZpbmUgUFdNQ1JfRE9aRU4JCSgxIDw8IDI0KQkJLyogRG96ZSBNb2RlCQkJKi8KKyNkZWZpbmUgUFdNQ1JfU1RPUEVOCQkoMSA8PCAyNSkJCS8qIFN0b3AgTW9kZQkJCSovCisjZGVmaW5lIFBXTUNSX0ZXTSh4KQkJKCgoeCkgJiAweDMpIDw8IDI2KQkvKiBGSUZPIFdhdGVyIE1hcmsJCSovCisKKyNkZWZpbmUgTUFYX0RJViA0MDk2CisjZW5kaWYKKworI2RlZmluZSBQV01TX1NBTVBMRSh4KQkJKCh4KSAmIDB4RkZGRikJCS8qIENvbnRhaW5zIGEgdHdvLXNhbXBsZSB3b3JkCSovCisjZGVmaW5lIFBXTVBfUEVSSU9EKHgpCQkoKHgpICYgMHhGRkZGKQkJLyogUmVwcmVzZW50cyB0aGUgUFdNJ3MgcGVyaW9kCSovCisjZGVmaW5lIFBXTUNfQ09VTlRFUih4KQkJKCh4KSAmIDB4RkZGRikJCS8qIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY291bnQgdmFsdWUJKi8KKworc3RydWN0IHB3bV9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJY29uc3QgY2hhcgkqbGFiZWw7CisJc3RydWN0IGNsawkqY2xrOworCisJaW50CQljbGtfZW5hYmxlZDsKKwl2b2lkIF9faW9tZW0JKm1taW9fYmFzZTsKKworCXVuc2lnbmVkIGludAl1c2VfY291bnQ7CisJdW5zaWduZWQgaW50CXB3bV9pZDsKK307CisKK2ludCBwd21fY29uZmlnKHN0cnVjdCBwd21fZGV2aWNlICpwd20sIGludCBkdXR5X25zLCBpbnQgcGVyaW9kX25zKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBjOworCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2N5Y2xlcywgZHV0eV9jeWNsZXMsIHByZXNjYWxlOworCisJaWYgKHB3bSA9PSBOVUxMIHx8IHBlcmlvZF9ucyA9PSAwIHx8IGR1dHlfbnMgPiBwZXJpb2RfbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJYyA9IGNsa19nZXRfcmF0ZShwd20tPmNsayk7CisJYyA9IGMgKiBwZXJpb2RfbnM7CisJZG9fZGl2KGMsIDEwMDAwMDAwMDApOworCXBlcmlvZF9jeWNsZXMgPSBjOworCisJcHJlc2NhbGUgPSBwZXJpb2RfY3ljbGVzIC8gMHgxMDAwMCArIDE7CisKKwlwZXJpb2RfY3ljbGVzIC89IHByZXNjYWxlOworCWMgPSAodW5zaWduZWQgbG9uZyBsb25nKXBlcmlvZF9jeWNsZXMgKiBkdXR5X25zOworCWRvX2RpdihjLCBwZXJpb2RfbnMpOworCWR1dHlfY3ljbGVzID0gYzsKKworI2lmZGVmIFBXTV9WRVJfMgorCXdyaXRlbChkdXR5X2N5Y2xlcywgcHdtLT5tbWlvX2Jhc2UgKyBQV01TQVIpOworCXdyaXRlbChwZXJpb2RfY3ljbGVzLCBwd20tPm1taW9fYmFzZSArIFBXTVBSKTsKKwl3cml0ZWwoUFdNQ1JfUFJFU0NBTEVSKHByZXNjYWxlIC0gMSkgfCBQV01DUl9DTEtTUkNfSVBHX0hJR0ggfCBQV01DUl9FTiwKKwkJCXB3bS0+bW1pb19iYXNlICsgUFdNQ1IpOworI2VsaWYgZGVmaW5lZCBQV01fVkVSXzEKKyNlcnJvciBQV00gbm90IHlldCB3b3JraW5nIG9uIE1YMSAvIE1YMjEKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9jb25maWcpOworCitpbnQgcHdtX2VuYWJsZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCWludCByYyA9IDA7CisKKwlpZiAoIXB3bS0+Y2xrX2VuYWJsZWQpIHsKKwkJcmMgPSBjbGtfZW5hYmxlKHB3bS0+Y2xrKTsKKwkJaWYgKCFyYykKKwkJCXB3bS0+Y2xrX2VuYWJsZWQgPSAxOworCX0KKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9lbmFibGUpOworCit2b2lkIHB3bV9kaXNhYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJaWYgKHB3bS0+Y2xrX2VuYWJsZWQpIHsKKwkJY2xrX2Rpc2FibGUocHdtLT5jbGspOworCQlwd20tPmNsa19lbmFibGVkID0gMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9kaXNhYmxlKTsKKworc3RhdGljIERFRklORV9NVVRFWChwd21fbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHB3bV9saXN0KTsKKworc3RydWN0IHB3bV9kZXZpY2UgKnB3bV9yZXF1ZXN0KGludCBwd21faWQsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisJaW50IGZvdW5kID0gMDsKKworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocHdtLCAmcHdtX2xpc3QsIG5vZGUpIHsKKwkJaWYgKHB3bS0+cHdtX2lkID09IHB3bV9pZCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJaWYgKHB3bS0+dXNlX2NvdW50ID09IDApIHsKKwkJCXB3bS0+dXNlX2NvdW50Kys7CisJCQlwd20tPmxhYmVsID0gbGFiZWw7CisJCX0gZWxzZQorCQkJcHdtID0gRVJSX1BUUigtRUJVU1kpOworCX0gZWxzZQorCQlwd20gPSBFUlJfUFRSKC1FTk9FTlQpOworCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisJcmV0dXJuIHB3bTsKK30KK0VYUE9SVF9TWU1CT0wocHdtX3JlcXVlc3QpOworCit2b2lkIHB3bV9mcmVlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCisJaWYgKHB3bS0+dXNlX2NvdW50KSB7CisJCXB3bS0+dXNlX2NvdW50LS07CisJCXB3bS0+bGFiZWwgPSBOVUxMOworCX0gZWxzZQorCQlwcl93YXJuaW5nKCJQV00gZGV2aWNlIGFscmVhZHkgZnJlZWRcbiIpOworCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9mcmVlKTsKKworc3RhdGljIGludCBfX2RldmluaXQgbXhjX3B3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXQgPSAwOworCisJcHdtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB3bV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHdtID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXB3bS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicHdtIik7CisKKwlpZiAoSVNfRVJSKHB3bS0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHB3bS0+Y2xrKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlwd20tPmNsa19lbmFibGVkID0gMDsKKworCXB3bS0+dXNlX2NvdW50ID0gMDsKKwlwd20tPnB3bV9pZCA9IHBkZXYtPmlkOworCXB3bS0+cGRldiA9IHBkZXY7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAociA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZSBkZWZpbmVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9jbGs7CisJfQorCisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCBwZGV2LT5uYW1lKTsKKwlpZiAociA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9jbGs7CisJfQorCisJcHdtLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCWlmIChwd20tPm1taW9fYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnB3bS0+bm9kZSwgJnB3bV9saXN0KTsKKwltdXRleF91bmxvY2soJnB3bV9sb2NrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHB3bSk7CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CitlcnJfZnJlZV9jbGs6CisJY2xrX3B1dChwd20tPmNsayk7CitlcnJfZnJlZToKKwlrZnJlZShwd20pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG14Y19wd21fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisKKwlwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAocHdtID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCWxpc3RfZGVsKCZwd20tPm5vZGUpOworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworCisJaW91bm1hcChwd20tPm1taW9fYmFzZSk7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisKKwljbGtfcHV0KHB3bS0+Y2xrKTsKKworCWtmcmVlKHB3bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14Y19wd21fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJteGNfcHdtIiwKKwl9LAorCS5wcm9iZQkJPSBteGNfcHdtX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXhjX3B3bV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhjX3B3bV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhjX3B3bV9kcml2ZXIpOworfQorYXJjaF9pbml0Y2FsbChteGNfcHdtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXhjX3B3bV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14Y19wd21fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG14Y19wd21fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4iKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9zeXN0ZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWMzNzU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDkgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIEx0ZCwgeWFub2tAZW1jcmFmdC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKKyNkZWZpbmUgV0RPR19XQ1JfUkVHCQlJT19BRERSRVNTKFdEVF9CQVNFX0FERFIpCisjZGVmaW5lIFdET0dfV0NSX0VOQUJMRQkJKDEgPDwgMCkKKyNlbHNlCisjZGVmaW5lIFdET0dfV0NSX1JFRwkJSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikKKyNkZWZpbmUgV0RPR19XQ1JfRU5BQkxFCQkoMSA8PCAyKQorI2VuZGlmCisKKy8qCisgKiBSZXNldCB0aGUgc3lzdGVtLiBJdCBpcyBjYWxsZWQgYnkgbWFjaGluZV9yZXN0YXJ0KCkuCisgKi8KK3ZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpZiAoIWNwdV9pc19teDEoKSkgeworCQlzdHJ1Y3QgY2xrICpjbGs7CisKKwkJY2xrID0gY2xrX2dldF9zeXMoImlteC13ZHQuMCIsIE5VTEwpOworCQlpZiAoIUlTX0VSUihjbGspKQorCQkJY2xrX2VuYWJsZShjbGspOworCX0KKworCS8qIEFzc2VydCBTUlMgc2lnbmFsICovCisJX19yYXdfd3JpdGV3KFdET0dfV0NSX0VOQUJMRSwgV0RPR19XQ1JfUkVHKTsKKworCS8qIHdhaXQgZm9yIHJlc2V0IHRvIGFzc2VydC4uLiAqLworCW1kZWxheSg1MDApOworCisJcHJpbnRrKEtFUk5fRVJSICJXYXRjaGRvZyByZXNldCBmYWlsZWQgdG8gYXNzZXJ0IHJlc2V0XG4iKTsKKworCS8qIGRlbGF5IHRvIGFsbG93IHRoZSBzZXJpYWwgcG9ydCB0byBzaG93IHRoZSBtZXNzYWdlICovCisJbWRlbGF5KDUwKTsKKworCS8qIHdlJ2xsIHRha2UgYSBqdW1wIHRocm91Z2ggemVybyBhcyBhIHBvb3Igc2Vjb25kICovCisJY3B1X3Jlc2V0KDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jCmluZGV4IDc1OGExMjkuLmVmMWIzY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKQEAgLTM0LDkgKzM0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNsb2NrZXZlbnRfbXhjOwogc3RhdGljIGVudW0gY2xvY2tfZXZlbnRfbW9kZSBjbG9ja2V2ZW50X21vZGUgPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ7CiAKLS8qIGNsb2NrIHNvdXJjZSBmb3IgdGhlIHRpbWVyICovCi1zdGF0aWMgc3RydWN0IGNsayAqdGltZXJfY2xrOwotCiAvKiBjbG9jayBzb3VyY2UgKi8KIAogc3RhdGljIGN5Y2xlX3QgbXhjX2dldF9jeWNsZXModm9pZCkKQEAgLTUzLDEzICs1MCwxMSBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG14Y19jbG9ja3NvdXJjZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBteGNfY2xvY2tzb3VyY2VfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGspCiB7Ci0JdW5zaWduZWQgaW50IGNsb2NrOworCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CiAKLQljbG9jayA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwotCi0JY2xvY2tzb3VyY2VfbXhjLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KGNsb2NrLAorCWNsb2Nrc291cmNlX214Yy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjLAogCQkJCQljbG9ja3NvdXJjZV9teGMuc2hpZnQpOwogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9teGMpOwogCkBAIC0xNzcsMTMgKzE3MiwxMSBAQAogCS5yYXRpbmcJCT0gMjAwLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgbXhjX2Nsb2NrZXZlbnRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXhjX2Nsb2NrZXZlbnRfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGspCiB7Ci0JdW5zaWduZWQgaW50IGNsb2NrOworCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CiAKLQljbG9jayA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwotCi0JY2xvY2tldmVudF9teGMubXVsdCA9IGRpdl9zYyhjbG9jaywgTlNFQ19QRVJfU0VDLAorCWNsb2NrZXZlbnRfbXhjLm11bHQgPSBkaXZfc2MoYywgTlNFQ19QRVJfU0VDLAogCQkJCQljbG9ja2V2ZW50X214Yy5zaGlmdCk7CiAJY2xvY2tldmVudF9teGMubWF4X2RlbHRhX25zID0KIAkJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZSwgJmNsb2NrZXZlbnRfbXhjKTsKQEAgLTE5NywxNCArMTkwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2luaXQgbXhjX3RpbWVyX2luaXQoY29uc3QgY2hhciAqY2xrX3RpbWVyKQordm9pZCBfX2luaXQgbXhjX3RpbWVyX2luaXQoc3RydWN0IGNsayAqdGltZXJfY2xrKQogewotCXRpbWVyX2NsayA9IGNsa19nZXQoTlVMTCwgY2xrX3RpbWVyKTsKLQlpZiAoIXRpbWVyX2NsaykgewotCQlwcmludGsoS0VSTl9FUlIiQ2Fubm90IGRldGVybWluZSB0aW1lciBjbG9jay4gR2l2aW5nIHVwLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAljbGtfZW5hYmxlKHRpbWVyX2Nsayk7CiAKIAkvKgpAQCAtMjE5LDEwICsyMDYsOSBAQAogCQkgICAgIFRJTUVSX0JBU0UgKyBNWENfVENUTCk7CiAKIAkvKiBpbml0IGFuZCByZWdpc3RlciB0aGUgdGltZXIgdG8gdGhlIGZyYW1ld29yayAqLwotCW14Y19jbG9ja3NvdXJjZV9pbml0KCk7Ci0JbXhjX2Nsb2NrZXZlbnRfaW5pdCgpOworCW14Y19jbG9ja3NvdXJjZV9pbml0KHRpbWVyX2Nsayk7CisJbXhjX2Nsb2NrZXZlbnRfaW5pdCh0aW1lcl9jbGspOwogCiAJLyogTWFrZSBpcnFzIGhhcHBlbiAqLwogCXNldHVwX2lycShUSU1FUl9JTlRFUlJVUFQsICZteGNfdGltZXJfaXJxKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCA0NmQzYjBiLi45ZGQ2OGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMTEsMTQgKzExLDE3IEBACiAKIGNvbmZpZyBBUkNIX09NQVAxCiAJYm9vbCAiVEkgT01BUDEiCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAogY29uZmlnIEFSQ0hfT01BUDIKIAlib29sICJUSSBPTUFQMiIKIAlzZWxlY3QgQ1BVX1Y2CisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAogY29uZmlnIEFSQ0hfT01BUDMKIAlib29sICJUSSBPTUFQMyIKIAlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAogZW5kY2hvaWNlCiAKQEAgLTEwNCw2ICsxMDcsMTQgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIE9NQVAgTXVsdGljaGFubmVsCiAJICBCdWZmZXJlZCBTZXJpYWwgUG9ydC4KIAorY29uZmlnIE9NQVBfTUJPWF9GV0sKKwl0cmlzdGF0ZSAiTWFpbGJveCBmcmFtZXdvcmsgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIE9NQVAgTWFpbGJveCBmcmFtZXdvcmsgc3VwcG9ydCBmb3IKKwkgIERTUCwgSVZBMS4wIGFuZCBJVkEyIGluIE9NQVAxLzIvMy4KKwogY2hvaWNlCiAgICAgICAgIHByb21wdCAiU3lzdGVtIHRpbWVyIgogCWRlZmF1bHQgT01BUF9NUFVfVElNRVIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggYmU2YWFiOS4uMmUwNjE0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTM2LDQ0ICszNiw2IEBACiAgKiBTdGFuZGFyZCBjbG9jayBmdW5jdGlvbnMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2Nsay5oCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogUmV0dXJucyBhIGNsb2NrLiBOb3RlIHRoYXQgd2UgZmlyc3QgdHJ5IHRvIHVzZSBkZXZpY2UgaWQgb24gdGhlIGJ1cwotICogYW5kIGNsb2NrIG5hbWUuIElmIHRoaXMgZmFpbHMsIHdlIHRyeSB0byB1c2UgY2xvY2sgbmFtZSBvbmx5LgotICovCi1zdHJ1Y3QgY2xrICogY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQotewotCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCWludCBpZG5vOwotCi0JaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+YnVzICE9ICZwbGF0Zm9ybV9idXNfdHlwZSkKLQkJaWRubyA9IC0xOwotCWVsc2UKLQkJaWRubyA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHAtPmlkID09IGlkbm8gJiYKLQkJICAgIHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKLQkJCWNsayA9IHA7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLWZvdW5kOgotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQotCXJldHVybiBjbGs7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotCiBpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExNCwyMiArNzYsNiBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CiAKLWludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBjbGstPnVzZWNvdW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF91c2Vjb3VudCk7Ci0KIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ2LDEzICs5Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CiAKLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsayAmJiAhSVNfRVJSKGNsaykpCi0JCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE9wdGlvbmFsIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvY2xrLmgKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODUsNiArMTI0LDExIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUpCiAJCXJldCA9IGFyY2hfY2xvY2stPmNsa19zZXRfcmF0ZShjbGssIHJhdGUpOworCWlmIChyZXQgPT0gMCkgeworCQlpZiAoY2xrLT5yZWNhbGMpCisJCQljbGstPnJhdGUgPSBjbGstPnJlY2FsYyhjbGspOworCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMDAsOCArMTQ0LDE2IEBACiAJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JaWYgKGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KQotCQlyZXQgPSAgYXJjaF9jbG9jay0+Y2xrX3NldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworCWlmIChjbGstPnVzZWNvdW50ID09IDApIHsKKwkJaWYgKGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KQorCQkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3NldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworCQlpZiAocmV0ID09IDApIHsKKwkJCWlmIChjbGstPnJlY2FsYykKKwkJCQljbGstPnJhdGUgPSBjbGstPnJlY2FsYyhjbGspOworCQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwkJfQorCX0gZWxzZQorCQlyZXQgPSAtRUJVU1k7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjEwLDE4ICsxNjIsNyBAQAogCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgY2xrICogcmV0ID0gTlVMTDsKLQotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuIHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX2dldF9wYXJlbnQpCi0JCXJldCA9IGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBjbGstPnBhcmVudDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOwogCkBAIC0yNTAsMTQgKzE5MSwyMCBAQAogX19zZXR1cCgibXB1cmF0ZT0iLCBvbWFwX2Nsa19zZXR1cCk7CiAKIC8qIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGFsd2F5cyBoYXZlIHNhbWUgdmFsdWUgYXMgdGhlIHBhcmVudCBjbG9jayAqLwotdm9pZCBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3Vuc2lnbmVkIGxvbmcgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm47CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlOworfQogCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Ci0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOwordm9pZCBjbGtfcmVwYXJlbnQoc3RydWN0IGNsayAqY2hpbGQsIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlsaXN0X2RlbF9pbml0KCZjaGlsZC0+c2libGluZyk7CisJaWYgKHBhcmVudCkKKwkJbGlzdF9hZGQoJmNoaWxkLT5zaWJsaW5nLCAmcGFyZW50LT5jaGlsZHJlbik7CisJY2hpbGQtPnBhcmVudCA9IHBhcmVudDsKKworCS8qIG5vdyBkbyB0aGUgZGVidWdmcyByZW5hbWluZyB0byByZWF0dGFjaCB0aGUgY2hpbGQKKwkgICB0byB0aGUgcHJvcGVyIHBhcmVudCAqLwogfQogCiAvKiBQcm9wYWdhdGUgcmF0ZSB0byBjaGlsZHJlbiAqLwpAQCAtMjY1LDE3ICsyMTIsMTUgQEAKIHsKIAlzdHJ1Y3QgY2xrICpjbGtwOwogCi0JaWYgKHRjbGsgPT0gTlVMTCB8fCBJU19FUlIodGNsaykpCi0JCXJldHVybjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAobGlrZWx5KGNsa3AtPnBhcmVudCAhPSB0Y2xrKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobGlrZWx5KCh1MzIpY2xrcC0+cmVjYWxjKSkKLQkJCWNsa3AtPnJlY2FsYyhjbGtwKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZ0Y2xrLT5jaGlsZHJlbiwgc2libGluZykgeworCQlpZiAoY2xrcC0+cmVjYWxjKQorCQkJY2xrcC0+cmF0ZSA9IGNsa3AtPnJlY2FsYyhjbGtwKTsKKwkJcHJvcGFnYXRlX3JhdGUoY2xrcCk7CiAJfQogfQogCitzdGF0aWMgTElTVF9IRUFEKHJvb3RfY2xrcyk7CisKIC8qKgogICogcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MgLSByZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIGFsbCByb290IGNsb2NrcwogICoKQEAgLTI4NywxOCArMjMyLDM1IEBACiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAodW5saWtlbHkoIWNsa3AtPnBhcmVudCkgJiYgbGlrZWx5KCh1MzIpY2xrcC0+cmVjYWxjKSkKLQkJCWNsa3AtPnJlY2FsYyhjbGtwKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZyb290X2Nsa3MsIHNpYmxpbmcpIHsKKwkJaWYgKGNsa3AtPnJlY2FsYykKKwkJCWNsa3AtPnJhdGUgPSBjbGtwLT5yZWNhbGMoY2xrcCk7CisJCXByb3BhZ2F0ZV9yYXRlKGNsa3ApOwogCX0KIH0KIAordm9pZCBjbGtfaW5pdF9vbmUoc3RydWN0IGNsayAqY2xrKQoreworCUlOSVRfTElTVF9IRUFEKCZjbGstPmNoaWxkcmVuKTsKK30KKwogaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogdHJhcCBvdXQgYWxyZWFkeSByZWdpc3RlcmVkIGNsb2NrcworCSAqLworCWlmIChjbGstPm5vZGUubmV4dCB8fCBjbGstPm5vZGUucHJldikKKwkJcmV0dXJuIDA7CisKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCWlmIChjbGstPnBhcmVudCkKKwkJbGlzdF9hZGQoJmNsay0+c2libGluZywgJmNsay0+cGFyZW50LT5jaGlsZHJlbik7CisJZWxzZQorCQlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLCAmcm9vdF9jbGtzKTsKKwogCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOwogCWlmIChjbGstPmluaXQpCiAJCWNsay0+aW5pdChjbGspOwpAQCAtMzE0LDM5ICsyNzYsMTIgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwlsaXN0X2RlbCgmY2xrLT5zaWJsaW5nKTsKIAlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKIAltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKIAotdm9pZCBjbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JaWYgKGFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUpCi0JCWFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2RlbnlfaWRsZSk7Ci0KLXZvaWQgY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX2FsbG93X2lkbGUpCi0JCWFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19hbGxvd19pZGxlKTsKLQogdm9pZCBjbGtfZW5hYmxlX2luaXRfY2xvY2tzKHZvaWQpCiB7CiAJc3RydWN0IGNsayAqY2xrcDsKQEAgLTM1OCw2ICsyOTMsMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZV9pbml0X2Nsb2Nrcyk7CiAKKy8qCisgKiBMb3cgbGV2ZWwgaGVscGVycworICovCitzdGF0aWMgaW50IGNsa2xsX2VuYWJsZV9udWxsKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrbGxfZGlzYWJsZV9udWxsKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbnVsbCA9IHsKKwkuZW5hYmxlCQk9IGNsa2xsX2VuYWJsZV9udWxsLAorCS5kaXNhYmxlCT0gY2xrbGxfZGlzYWJsZV9udWxsLAorfTsKKwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogdm9pZCBjbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQogewpAQCAtMzgzLDggKzMzNSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChjay0+dXNlY291bnQgPiAwIHx8IChjay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKLQkJCWNrLT5lbmFibGVfcmVnID09IDApCisJCWlmIChjay0+b3BzID09ICZjbGtvcHNfbnVsbCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjay0+dXNlY291bnQgPiAwIHx8IGNrLT5lbmFibGVfcmVnID09IDApCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggNjgyNWZiYi4uZDE3OTcxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgX19vbWFwMl9zZXRfZ2xvYmFscyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzX3RhcChvbWFwMl9nbG9iYWxzKTsKLQlvbWFwMl9zZXRfZ2xvYmFsc19tZW1vcnkob21hcDJfZ2xvYmFscyk7CisJb21hcDJfc2V0X2dsb2JhbHNfc2RyYyhvbWFwMl9nbG9iYWxzKTsKIAlvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX3ByY20ob21hcDJfZ2xvYmFscyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCmluZGV4IGIyNjkwMjQuLjg0M2U4YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCkBAIC0yMywxMCArMjMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgVkVSWV9ISV9SQVRFCTkwMDAwMDAwMAogCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOworCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKICNkZWZpbmUgTVBVX0NMSwkJIm1wdSIKICNlbHNlCkBAIC0zOSw2ICs0Miw5IEBACiAKIGludCBvbWFwX3ZlcmlmeV9zcGVlZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKKwlpZiAoZnJlcV90YWJsZSkKKwkJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIGZyZXFfdGFibGUpOworCiAJaWYgKHBvbGljeS0+Y3B1KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzAsMTIgKzc2LDI2IEBACiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJaW50IHJldCA9IDA7CiAKKwkvKiBFbnN1cmUgZGVzaXJlZCByYXRlIGlzIHdpdGhpbiBhbGxvd2VkIHJhbmdlLiAgU29tZSBnb3Zlbm9ycworCSAqIChvbmRlbWFuZCkgd2lsbCBqdXN0IHBhc3MgdGFyZ2V0X2ZyZXE9MCB0byBnZXQgdGhlIG1pbmltdW0uICovCisJaWYgKHRhcmdldF9mcmVxIDwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxKQorCQl0YXJnZXRfZnJlcSA9IHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcTsKKwlpZiAodGFyZ2V0X2ZyZXEgPiBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpCisJCXRhcmdldF9mcmVxID0gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxOworCiAJZnJlcXMub2xkID0gb21hcF9nZXRzcGVlZCgwKTsKIAlmcmVxcy5uZXcgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCB0YXJnZXRfZnJlcSAqIDEwMDApIC8gMTAwMDsKIAlmcmVxcy5jcHUgPSAwOwogCisJaWYgKGZyZXFzLm9sZCA9PSBmcmVxcy5uZXcpCisJCXJldHVybiByZXQ7CisKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwotCXJldCA9IGNsa19zZXRfcmF0ZShtcHVfY2xrLCB0YXJnZXRfZnJlcSAqIDEwMDApOworI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJjcHVmcmVxLW9tYXA6IHRyYW5zaXRpb246ICV1IC0tPiAldVxuIiwKKwkgICAgICAgZnJlcXMub2xkLCBmcmVxcy5uZXcpOworI2VuZGlmCisJcmV0ID0gY2xrX3NldF9yYXRlKG1wdV9jbGssIGZyZXFzLm5ldyAqIDEwMDApOwogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCiAJcmV0dXJuIHJldDsKQEAgLTgzLDE2ICsxMDMsMzEgQEAKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKKwlpbnQgcmVzdWx0ID0gMDsKKwogCW1wdV9jbGsgPSBjbGtfZ2V0KE5VTEwsIE1QVV9DTEspOwogCWlmIChJU19FUlIobXB1X2NsaykpCiAJCXJldHVybiBQVFJfRVJSKG1wdV9jbGspOwogCiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOworCiAJcG9saWN5LT5jdXIgPSBwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gb21hcF9nZXRzcGVlZCgwKTsKLQlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCAwKSAvIDEwMDA7Ci0JcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgVkVSWV9ISV9SQVRFKSAvIDEwMDA7Ci0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKKworCWNsa19pbml0X2NwdWZyZXFfdGFibGUoJmZyZXFfdGFibGUpOworCWlmIChmcmVxX3RhYmxlKSB7CisJCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBmcmVxX3RhYmxlKTsKKwkJaWYgKCFyZXN1bHQpCisJCQljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihmcmVxX3RhYmxlLAorCQkJCQkJCXBvbGljeS0+Y3B1KTsKKwl9IGVsc2UgeworCQlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCAwKSAvIDEwMDA7CisJCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IGNsa19yb3VuZF9yYXRlKG1wdV9jbGssCisJCQkJCQkJVkVSWV9ISV9SQVRFKSAvIDEwMDA7CisJfQorCisJLyogRklYTUU6IHdoYXQncyB0aGUgYWN0dWFsIHRyYW5zaXRpb24gdGltZT8gKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAgKiAxMDAwICogMTAwMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTAzLDYgKzEzOCwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqb21hcF9jcHVmcmVxX2F0dHJbXSA9IHsKKwkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCisJTlVMTCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgb21hcF9kcml2ZXIgPSB7CiAJLmZsYWdzCQk9IENQVUZSRVFfU1RJQ0tZLAogCS52ZXJpZnkJCT0gb21hcF92ZXJpZnlfc3BlZWQsCkBAIC0xMTEsNiArMTUxLDcgQEAKIAkuaW5pdAkJPSBvbWFwX2NwdV9pbml0LAogCS5leGl0CQk9IG9tYXBfY3B1X2V4aXQsCiAJLm5hbWUJCT0gIm9tYXAiLAorCS5hdHRyCQk9IG9tYXBfY3B1ZnJlcV9hdHRyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9jcHVmcmVxX2luaXQodm9pZCkKQEAgLTExOSwzICsxNjAsMTEgQEAKIH0KIAogYXJjaF9pbml0Y2FsbChvbWFwX2NwdWZyZXFfaW5pdCk7CisKKy8qCisgKiBpZiBldmVyIHdlIHdhbnQgdG8gcmVtb3ZlIHRoaXMsIHVwb24gY2xlYW51cCBjYWxsOgorICoKKyAqIGNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoKQorICogY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIoKQorICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCmluZGV4IDIwOGRiYjEuLjg3ZmI3ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwpAQCAtMjI4LDYgKzIyOCw5IEBACiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CisKKwkvKiByZXR1cm4gZGV2aWNlIGhhbmRsZSB0byBib2FyZCBzZXR1cCBjb2RlICovCisJZGF0YS0+ZGV2ID0gJnBkZXYtPmRldjsKIAlyZXR1cm4gMDsKIAogZmFpbDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCA0N2VjNzdhLi4yMWNjMDE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0xMjMsNiArMTIzLDcgQEAKIAogc3RhdGljIGludCBkbWFfbGNoX2NvdW50Owogc3RhdGljIGludCBkbWFfY2hhbl9jb3VudDsKK3N0YXRpYyBpbnQgb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVsczsKIAogc3RhdGljIHNwaW5sb2NrX3QgZG1hX2NoYW5fbG9jazsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kbWFfbGNoICpkbWFfY2hhbjsKQEAgLTczNyw3ICs3MzgsNyBAQAogCQkgKiBpZC4KIAkJICovCiAJCWRtYV93cml0ZShkZXZfaWQgfCAoMSA8PCAxMCksIENDUihmcmVlX2NoKSk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKSB7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDd4eCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCWRtYV93cml0ZShkZXZfaWQsIENDUihmcmVlX2NoKSk7CiAJfQogCkBAIC0xOTAwLDcgKzE5MDEsNyBAQAogLyogU1RBVFVTIHJlZ2lzdGVyIGNvdW50IGlzIGZyb20gMS0zMiB3aGlsZSBvdXIgaXMgMC0zMSAqLwogc3RhdGljIGlycXJldHVybl90IG9tYXAyX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JdTMyIHZhbDsKKwl1MzIgdmFsLCBlbmFibGVfcmVnOwogCWludCBpOwogCiAJdmFsID0gZG1hX3JlYWQoSVJRU1RBVFVTX0wwKTsKQEAgLTE5MDksNiArMTkxMCw4IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBETUEgSVJRXG4iKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KKwllbmFibGVfcmVnID0gZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKKwl2YWwgJj0gZW5hYmxlX3JlZzsgLyogRGlzcGF0Y2ggb25seSByZWxldmFudCBpbnRlcnJ1cHRzICovCiAJZm9yIChpID0gMDsgaSA8IGRtYV9sY2hfY291bnQgJiYgdmFsICE9IDA7IGkrKykgewogCQlpZiAodmFsICYgMSkKIAkJCW9tYXAyX2RtYV9oYW5kbGVfY2goaSk7CkBAIC0yMzIxLDYgKzIzMjQsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpICYmIG9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHMKKwkJCSYmIChvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzIDw9IGRtYV9sY2hfY291bnQpKQorCQlkbWFfbGNoX2NvdW50ID0gb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVsczsKKwogCWRtYV9jaGFuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfZG1hX2xjaCkgKiBkbWFfbGNoX2NvdW50LAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghZG1hX2NoYW4pCkBAIC0yMzM5LDcgKzIzNDYsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJETUEgc3VwcG9ydCBmb3IgT01BUDE1eHggaW5pdGlhbGl6ZWRcbiIpOwogCQlkbWFfY2hhbl9jb3VudCA9IDk7CiAJCWVuYWJsZV8xNTEwX21vZGUgPSAxOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXA3MzAoKSkgeworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXA3eHgoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSB2ZXJzaW9uICVkXG4iLAogCQkgICAgICAgZG1hX3JlYWQoSFdfSUQpKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIGNhcGFiaWxpdGllczogJTA4eDolMDh4OiUwNHg6JTA0eDolMDR4XG4iLApAQCAtMjM3MSw3ICsyMzc4LDcgQEAKIAkJdTggcmV2aXNpb24gPSBkbWFfcmVhZChSRVZJU0lPTikgJiAweGZmOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSByZXZpc2lvbiAlZC4lZFxuIiwKIAkJICAgICAgIHJldmlzaW9uID4+IDQsIHJldmlzaW9uICYgMHhmKTsKLQkJZG1hX2NoYW5fY291bnQgPSBPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7CisJCWRtYV9jaGFuX2NvdW50ID0gZG1hX2xjaF9jb3VudDsKIAl9IGVsc2UgewogCQlkbWFfY2hhbl9jb3VudCA9IDA7CiAJCXJldHVybiAwOwpAQCAtMjQzNyw0ICsyNDQ0LDE3IEBACiAKIGFyY2hfaW5pdGNhbGwob21hcF9pbml0X2RtYSk7CiAKKy8qCisgKiBSZXNlcnZlIHRoZSBvbWFwIFNETUEgY2hhbm5lbHMgdXNpbmcgY21kbGluZSBib290YXJnCisgKiAib21hcF9kbWFfcmVzZXJ2ZV9jaD0iLiBUaGUgdmFsaWQgcmFuZ2UgaXMgMSB0byAzMgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2RtYV9jbWRsaW5lX3Jlc2VydmVfY2goY2hhciAqc3RyKQoreworCWlmIChnZXRfb3B0aW9uKCZzdHIsICZvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzKSAhPSAxKQorCQlvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzID0gMDsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgib21hcF9kbWFfcmVzZXJ2ZV9jaD0iLCBvbWFwX2RtYV9jbWRsaW5lX3Jlc2VydmVfY2gpOworCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCmluZGV4IGU0ZjBjZTAuLmJmZDQ3NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbXRpbWVyLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CkBAIC0zNjIsNiArMzYzLDcgQEAKIAogCXJldHVybiB0aW1lcjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfcmVxdWVzdCk7CiAKIHN0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoaW50IGlkKQogewpAQCAtMzg1LDYgKzM4Nyw3IEBACiAKIAlyZXR1cm4gdGltZXI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfZnJlZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC0zOTUsNiArMzk4LDcgQEAKIAlXQVJOX09OKCF0aW1lci0+cmVzZXJ2ZWQpOwogCXRpbWVyLT5yZXNlcnZlZCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX2ZyZWUpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTQwNiw2ICs0MTAsNyBAQAogCiAJdGltZXItPmVuYWJsZWQgPSAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9lbmFibGUpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC00MTcsMTEgKzQyMiwxMyBAQAogCiAJdGltZXItPmVuYWJsZWQgPSAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9kaXNhYmxlKTsKIAogaW50IG9tYXBfZG1fdGltZXJfZ2V0X2lycShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CiAJcmV0dXJuIHRpbWVyLT5pcnE7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX2dldF9pcnEpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKIApAQCAtNDUyLDYgKzQ1OSw3IEBACiAKIAlyZXR1cm4gaW5wdXRtYXNrOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2spOwogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMykKIApAQCAtNDU5LDYgKzQ2Nyw3IEBACiB7CiAJcmV0dXJuIHRpbWVyLT5mY2xrOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9nZXRfZmNsayk7CiAKIF9fdTMyIG9tYXBfZG1fdGltZXJfbW9kaWZ5X2lkbGVjdF9tYXNrKF9fdTMyIGlucHV0bWFzaykKIHsKQEAgLTQ2Niw2ICs0NzUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayk7CiAKICNlbmRpZgogCkBAIC00NzMsNiArNDgzLDcgQEAKIHsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9UUklHR0VSX1JFRywgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3RyaWdnZXIpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfc3RhcnQoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNDg0LDYgKzQ5NSw3IEBACiAJCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3N0YXJ0KTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3N0b3Aoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNDk1LDYgKzUwNyw3IEBACiAJCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3N0b3ApOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIApAQCAtNTA3LDYgKzUyMCw3IEBACiAJbCB8PSBzb3VyY2UgPDwgbjsKIAlvbWFwX3dyaXRlbChsLCBNT0RfQ09ORl9DVFJMXzEpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfc291cmNlKTsKIAogI2Vsc2UKIApAQCAtNTIzLDYgKzUzNyw3IEBACiAJICogY2F1c2UgYW4gYWJvcnQuICovCiAJX19kZWxheSgxNTAwMDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfc291cmNlKTsKIAogI2VuZGlmCiAKQEAgLTU0MSw2ICs1NTYsNyBAQAogCiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfbG9hZCk7CiAKIC8qIE9wdGltaXplZCBzZXRfbG9hZCB3aGljaCByZW1vdmVzIGNvc3RseSBzcGluIHdhaXQgaW4gdGltZXJfc3RhcnQgKi8KIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfbG9hZF9zdGFydChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBhdXRvcmVsb2FkLApAQCAtNTYwLDYgKzU3Niw3IEBACiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ09VTlRFUl9SRUcsIGxvYWQpOwogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X2xvYWRfc3RhcnQpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGVuYWJsZSwKIAkJCSAgICAgdW5zaWduZWQgaW50IG1hdGNoKQpAQCAtNTc0LDYgKzU5MSw3IEBACiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX01BVENIX1JFRywgbWF0Y2gpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfbWF0Y2gpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3B3bShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBkZWZfb24sCiAJCQkgICBpbnQgdG9nZ2xlLCBpbnQgdHJpZ2dlcikKQEAgLTU5MCw2ICs2MDgsNyBAQAogCWwgfD0gdHJpZ2dlciA8PCAxMDsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9wd20pOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3ByZXNjYWxlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBwcmVzY2FsZXIpCiB7CkBAIC02MDMsNiArNjIyLDcgQEAKIAl9CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfcHJlc2NhbGVyKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwKIAkJCQkgIHVuc2lnbmVkIGludCB2YWx1ZSkKQEAgLTYxMCw2ICs2MzAsNyBAQAogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0lOVF9FTl9SRUcsIHZhbHVlKTsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9XQUtFVVBfRU5fUkVHLCB2YWx1ZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKTsKIAogdW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNjE5LDExICs2NDAsMTMgQEAKIAogCXJldHVybiBsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9yZWFkX3N0YXR1cyk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfU1RBVF9SRUcsIHZhbHVlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfd3JpdGVfc3RhdHVzKTsKIAogdW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTYzMywxMSArNjU2LDEzIEBACiAKIAlyZXR1cm4gbDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfcmVhZF9jb3VudGVyKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX2NvdW50ZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ09VTlRFUl9SRUcsIHZhbHVlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfd3JpdGVfY291bnRlcik7CiAKIGludCBvbWFwX2RtX3RpbWVyc19hY3RpdmUodm9pZCkKIHsKQEAgLTY1OCw2ICs2ODMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJzX2FjdGl2ZSk7CiAKIGludCBfX2luaXQgb21hcF9kbV90aW1lcl9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBmODU2YTkwLi5kM2ZhNDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTgxLDYgKzgxLDIyIEBACiAjZGVmaW5lIE9NQVA3MzBfR1BJT19JTlRfU1RBVFVTCQkweDE0CiAKIC8qCisgKiBPTUFQODUwIHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgT01BUDg1MF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmMwMDApCisjZGVmaW5lIE9NQVA4NTBfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweGZmZmJjODAwKQorI2RlZmluZSBPTUFQODUwX0dQSU8zX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZDAwMCkKKyNkZWZpbmUgT01BUDg1MF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmQ4MDApCisjZGVmaW5lIE9NQVA4NTBfR1BJTzVfQkFTRQkJSU9fQUREUkVTUygweGZmZmJlMDAwKQorI2RlZmluZSBPTUFQODUwX0dQSU82X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTgwMCkKKyNkZWZpbmUgT01BUDg1MF9HUElPX0RBVEFfSU5QVVQJCTB4MDAKKyNkZWZpbmUgT01BUDg1MF9HUElPX0RBVEFfT1VUUFVUCTB4MDQKKyNkZWZpbmUgT01BUDg1MF9HUElPX0RJUl9DT05UUk9MCTB4MDgKKyNkZWZpbmUgT01BUDg1MF9HUElPX0lOVF9DT05UUk9MCTB4MGMKKyNkZWZpbmUgT01BUDg1MF9HUElPX0lOVF9NQVNLCQkweDEwCisjZGVmaW5lIE9NQVA4NTBfR1BJT19JTlRfU1RBVFVTCQkweDE0CisKKy8qCiAgKiBvbWFwMjR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCiAjZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxODAwMCkKQEAgLTE1OSw3ICsxNzUsOCBAQAogI2RlZmluZSBNRVRIT0RfR1BJT18xNTEwCTEKICNkZWZpbmUgTUVUSE9EX0dQSU9fMTYxMAkyCiAjZGVmaW5lIE1FVEhPRF9HUElPXzczMAkJMwotI2RlZmluZSBNRVRIT0RfR1BJT18yNFhYCTQKKyNkZWZpbmUgTUVUSE9EX0dQSU9fODUwCQk0CisjZGVmaW5lIE1FVEhPRF9HUElPXzI0WFgJNQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua18xNjEwWzVdID0gewpAQCAtMTkwLDYgKzIwNywxOSBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzg1MFs3XSA9IHsKKwl7IE9NQVBfTVBVSU9fQkFTRSwgICAgIElOVF84NTBfTVBVSU8sCSAgICBJSF9NUFVJT19CQVNFLAlNRVRIT0RfTVBVSU8gfSwKKwl7IE9NQVA4NTBfR1BJTzFfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LMSwgIElIX0dQSU9fQkFTRSwJTUVUSE9EX0dQSU9fODUwIH0sCisJeyBPTUFQODUwX0dQSU8yX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzIsICBJSF9HUElPX0JBU0UgKyAzMiwJTUVUSE9EX0dQSU9fODUwIH0sCisJeyBPTUFQODUwX0dQSU8zX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzMsICBJSF9HUElPX0JBU0UgKyA2NCwJTUVUSE9EX0dQSU9fODUwIH0sCisJeyBPTUFQODUwX0dQSU80X0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzQsICBJSF9HUElPX0JBU0UgKyA5NiwJTUVUSE9EX0dQSU9fODUwIH0sCisJeyBPTUFQODUwX0dQSU81X0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzUsICBJSF9HUElPX0JBU0UgKyAxMjgsIE1FVEhPRF9HUElPXzg1MCB9LAorCXsgT01BUDg1MF9HUElPNl9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTks2LCAgSUhfR1BJT19CQVNFICsgMTYwLCBNRVRIT0RfR1BJT184NTAgfSwKK307CisjZW5kaWYKKworCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKIAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzI0MnhbNF0gPSB7CkBAIC0yMzYsNyArMjY2LDcgQEAKIAkJCXJldHVybiAmZ3Bpb19iYW5rWzBdOwogCQlyZXR1cm4gJmdwaW9fYmFua1sxICsgKGdwaW8gPj4gNCldOwogCX0KLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCWlmIChjcHVfaXNfb21hcDd4eCgpKSB7CiAJCWlmIChPTUFQX0dQSU9fSVNfTVBVSU8oZ3BpbykpCiAJCQlyZXR1cm4gJmdwaW9fYmFua1swXTsKIAkJcmV0dXJuICZncGlvX2JhbmtbMSArIChncGlvID4+IDUpXTsKQEAgLTI1MSw3ICsyODEsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZ3Bpb19pbmRleChpbnQgZ3BpbykKIHsKLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwlpZiAoY3B1X2lzX29tYXA3eHgoKSkKIAkJcmV0dXJuIGdwaW8gJiAweDFmOwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKIAkJcmV0dXJuIGdwaW8gJiAweDFmOwpAQCAtMjczLDcgKzMwMyw3IEBACiAJCXJldHVybiAwOwogCWlmICgoY3B1X2lzX29tYXAxNnh4KCkpICYmIGdwaW8gPCA2NCkKIAkJcmV0dXJuIDA7Ci0JaWYgKGNwdV9pc19vbWFwNzMwKCkgJiYgZ3BpbyA8IDE5MikKKwlpZiAoY3B1X2lzX29tYXA3eHgoKSAmJiBncGlvIDwgMTkyKQogCQlyZXR1cm4gMDsKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkgJiYgZ3BpbyA8IDEyOCkKIAkJcmV0dXJuIDA7CkBAIC0zMTgsNiArMzQ4LDExIEBACiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fRElSX0NPTlRST0w7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0RJUl9DT05UUk9MOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19PRTsKQEAgLTM4MCw2ICs0MTUsMTYgQEAKIAkJCWwgJj0gfigxIDw8IGdwaW8pOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19EQVRBX09VVFBVVDsKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmIChlbmFibGUpCisJCQlsIHw9IDEgPDwgZ3BpbzsKKwkJZWxzZQorCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCWlmIChlbmFibGUpCkBAIC00MjYsNiArNDcxLDExIEBACiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fREFUQV9JTlBVVDsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fREFUQV9JTlBVVDsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fREFUQUlOOwpAQCAtNTk4LDYgKzY0OCwxOCBAQAogCQkJZ290byBiYWQ7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0lOVF9DT05UUk9MOworCQlsID0gX19yYXdfcmVhZGwocmVnKTsKKwkJaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJCWwgfD0gMSA8PCBncGlvOworCQllbHNlIGlmICh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQorCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CisJCWVsc2UKKwkJCWdvdG8gYmFkOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlzZXRfMjR4eF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ3BpbywgdHJpZ2dlcik7CkBAIC02NzgsNiArNzQwLDExIEBACiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUzsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fSU5UX1NUQVRVUzsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMTsKQEAgLTczNiw2ICs4MDMsMTMgQEAKIAkJaW52ID0gMTsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fSU5UX01BU0s7CisJCW1hc2sgPSAweGZmZmZmZmZmOworCQlpbnYgPSAxOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxOwpAQCAtNzk5LDYgKzg3MywxNiBAQAogCQkJbCB8PSBncGlvX21hc2s7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0lOVF9NQVNLOworCQlsID0gX19yYXdfcmVhZGwocmVnKTsKKwkJaWYgKGVuYWJsZSkKKwkJCWwgJj0gfihncGlvX21hc2spOworCQllbHNlCisJCQlsIHw9IGdwaW9fbWFzazsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJaWYgKGVuYWJsZSkKQEAgLTk4Myw2ICsxMDY3LDEwIEBACiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT183MzApCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDczMF9HUElPX0lOVF9TVEFUVVM7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT184NTApCisJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDg1MF9HUElPX0lOVF9TVEFUVVM7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzE7CkBAIC0xMzcyLDYgKzE0NjAsMTMgQEAKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzczMDsKIAl9CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJaWYgKGNwdV9pc19vbWFwODUwKCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDg1MCBHUElPIGhhcmR3YXJlXG4iKTsKKwkJZ3Bpb19iYW5rX2NvdW50ID0gNzsKKwkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzg1MDsKKwl9CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCiAJaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7CkBAIC0xNDIwLDcgKzE1MTUsNyBAQAogCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fSVJRU1RBVFVTMSk7CiAJCQlfX3Jhd193cml0ZXcoMHgwMDE0LCBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TWVNDT05GSUcpOwogCQl9Ci0JCWlmIChjcHVfaXNfb21hcDczMCgpICYmIGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT183MzApIHsKKwkJaWYgKGNwdV9pc19vbWFwN3h4KCkgJiYgYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzczMCkgewogCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKyBPTUFQNzMwX0dQSU9fSU5UX01BU0spOwogCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKyBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUyk7CiAKQEAgLTE3NDMsNiArMTgzOCw5IEBACiAJY2FzZSBNRVRIT0RfR1BJT183MzA6CiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fRElSX0NPTlRST0w7CiAJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0RJUl9DT05UUk9MOworCQlicmVhazsKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX09FOwogCQlicmVhazsKQEAgLTE3NjIsNyArMTg2MCw4IEBACiAKIAkJaWYgKGJhbmtfaXNfbXB1aW8oYmFuaykpCiAJCQlncGlvID0gT01BUF9NUFVJTygwKTsKLQkJZWxzZSBpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkgfHwgY3B1X2lzX29tYXA3MzAoKSkKKwkJZWxzZSBpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkgfHwgY3B1X2lzX29tYXA3MzAoKSB8fAorCQkJCWNwdV9pc19vbWFwODUwKCkpCiAJCQliYW5rd2lkdGggPSAzMjsKIAogCQlmb3IgKGogPSAwOyBqIDwgYmFua3dpZHRoOyBqKyssIGdwaW8rKywgbWFzayA8PD0gMSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCmluZGV4IDQ2NzUzMWUuLmEzMDMwNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKQEAgLTk4LDYgKzk4LDggQEAKIHN0YXRpYyBjb25zdCBpbnQgb21hcDM0eHhfcGluc1tdWzJdID0ge307CiAjZW5kaWYKIAorI2RlZmluZSBPTUFQX0kyQ19DTURMSU5FX1NFVFVQCShCSVQoMzEpKQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9pMmNfbXV4X3BpbnMoaW50IGJ1cykKIHsKIAlpbnQgc2NsLCBzZGE7CkBAIC0xMTksMTQgKzEyMSw5IEBACiAJb21hcF9jZmdfcmVnKHNjbCk7CiB9CiAKLWludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCi0JCQkgIHVuc2lnbmVkIGxlbikKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX25yX3BvcnRzKHZvaWQpCiB7Ci0JaW50IHBvcnRzLCBlcnI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlyZXNvdXJjZV9zaXplX3QgYmFzZSwgaXJxOworCWludCBwb3J0cyA9IDA7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCiAJCXBvcnRzID0gMTsKQEAgLTEzNSwxNyArMTMyLDE2IEBACiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCXBvcnRzID0gMzsKIAotCUJVR19PTihidXNfaWQgPCAxIHx8IGJ1c19pZCA+IHBvcnRzKTsKKwlyZXR1cm4gcG9ydHM7Cit9CiAKLQlpZiAoaW5mbykgewotCQllcnIgPSBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhidXNfaWQsIGluZm8sIGxlbik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2FkZF9idXMoaW50IGJ1c19pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXJlc291cmNlX3NpemVfdCBiYXNlLCBpcnE7CiAKIAlwZGV2ID0gJm9tYXBfaTJjX2RldmljZXNbYnVzX2lkIC0gMV07Ci0JKih1MzIgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGNsa3JhdGU7Ci0KIAlpZiAoYnVzX2lkID09IDEpIHsKIAkJcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewpAQCAtMTYzLDMgKzE1OSw4MSBAQAogCW9tYXBfaTJjX211eF9waW5zKGJ1c19pZCAtIDEpOwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CiB9CisKKy8qKgorICogb21hcF9pMmNfYnVzX3NldHVwIC0gUHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgdGhlIEkyQyBidXMgc3BlZWQKKyAqIEBzdHI6IFN0cmluZyBvZiBvcHRpb25zCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvdyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBJMkMgYnVzIHNwZWVkIGZvciBnaXZlbiBJMkMKKyAqIGJ1cyB3aXRoIGEgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAqCisgKiBGb3JtYXQ6IGkyY19idXM9YnVzX2lkLGNsa3JhdGUgKGluIGtIeikKKyAqCisgKiBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2J1c19zZXR1cChjaGFyICpzdHIpCit7CisJaW50IHBvcnRzOworCWludCBpbnRzWzNdOworCisJcG9ydHMgPSBvbWFwX2kyY19ucl9wb3J0cygpOworCWdldF9vcHRpb25zKHN0ciwgMywgaW50cyk7CisJaWYgKGludHNbMF0gPCAyIHx8IGludHNbMV0gPCAxIHx8IGludHNbMV0gPiBwb3J0cykKKwkJcmV0dXJuIDA7CisJaTJjX3JhdGVbaW50c1sxXSAtIDFdID0gaW50c1syXTsKKwlpMmNfcmF0ZVtpbnRzWzFdIC0gMV0gfD0gT01BUF9JMkNfQ01ETElORV9TRVRVUDsKKworCXJldHVybiAxOworfQorX19zZXR1cCgiaTJjX2J1cz0iLCBvbWFwX2kyY19idXNfc2V0dXApOworCisvKgorICogUmVnaXN0ZXIgYnVzc2VzIGRlZmluZWQgaW4gY29tbWFuZCBsaW5lIGJ1dCB0aGF0IGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoCisgKiBvbWFwX3JlZ2lzdGVyX2kyY19idXMgZnJvbSBib2FyZCBpbml0aWFsaXphdGlvbiBjb2RlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX3JlZ2lzdGVyX2kyY19idXNfY21kbGluZSh2b2lkKQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaTJjX3JhdGUpOyBpKyspCisJCWlmIChpMmNfcmF0ZVtpXSAmIE9NQVBfSTJDX0NNRExJTkVfU0VUVVApIHsKKwkJCWkyY19yYXRlW2ldICY9IH5PTUFQX0kyQ19DTURMSU5FX1NFVFVQOworCQkJZXJyID0gb21hcF9pMmNfYWRkX2J1cyhpICsgMSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorc3Vic3lzX2luaXRjYWxsKG9tYXBfcmVnaXN0ZXJfaTJjX2J1c19jbWRsaW5lKTsKKworLyoqCisgKiBvbWFwX3JlZ2lzdGVyX2kyY19idXMgLSByZWdpc3RlciBJMkMgYnVzIHdpdGggZGV2aWNlIGRlc2NyaXB0b3JzCisgKiBAYnVzX2lkOiBidXMgaWQgY291bnRpbmcgZnJvbSBudW1iZXIgMQorICogQGNsa3JhdGU6IGNsb2NrIHJhdGUgb2YgdGhlIGJ1cyBpbiBrSHoKKyAqIEBpbmZvOiBwb2ludGVyIGludG8gSTJDIGRldmljZSBkZXNjcmlwdG9yIHRhYmxlIG9yIE5VTEwKKyAqIEBsZW46IG51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgdGFibGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLgorICovCitpbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKKwkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAorCQkJICB1bnNpZ25lZCBsZW4pCit7CisJaW50IGVycjsKKworCUJVR19PTihidXNfaWQgPCAxIHx8IGJ1c19pZCA+IG9tYXBfaTJjX25yX3BvcnRzKCkpOworCisJaWYgKGluZm8pIHsKKwkJZXJyID0gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oYnVzX2lkLCBpbmZvLCBsZW4pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoIWkyY19yYXRlW2J1c19pZCAtIDFdKQorCQlpMmNfcmF0ZVtidXNfaWQgLSAxXSA9IGNsa3JhdGU7CisJaTJjX3JhdGVbYnVzX2lkIC0gMV0gJj0gfk9NQVBfSTJDX0NNRExJTkVfU0VUVVA7CisKKwlyZXR1cm4gb21hcF9pMmNfYWRkX2J1cyhidXNfaWQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC0yNDMwc2RwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkNDQ5ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMjQzMCBTRFAgYm9hcmQuCi0gKgotICogQmFzZWQgb24gYm9hcmQtaDQuaCBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF8yNDMwU0RQX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSAotCi0vKiBQbGFjZWhvbGRlciBmb3IgMjQzMFNEUCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCTB4MDgwMDAzMDAKLSNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJMTQ5Ci0jZGVmaW5lIFNEUDI0MzBfQ1MwX0JBU0UJCTB4MDQwMDAwMDAKLQotLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotZXh0ZXJuIHZvaWQgc2RwMjQzMF9mbGFzaF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc2RwMjQzMF91c2JfaW5pdCh2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF8yNDMwU0RQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYmQ1ZTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgU2Ftc3VuZyBPTUFQMjRYWCBBcG9sbG9uIGJvYXJkLgotICoKLSAqIEluaXRpYWwgY3JlYXRpb24gYnkgS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0FQT0xMT05fSAotCi0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotZXh0ZXJuIHZvaWQgYXBvbGxvbl9tbWNfaW5pdCh2b2lkKTsKLQotc3RhdGljIGlubGluZSBpbnQgYXBvbGxvbl9wbHVzKHZvaWQpCi17Ci0JLyogVGhlIGFwb2xsb24gcGx1cyBoYXMgSURDT0RFIHJldmlzaW9uIDUgKi8KLQlyZXR1cm4gb21hcF9yZXYoKSAmIDB4YzA7Ci19Ci0KLS8qIFBsYWNlaG9sZGVyIGZvciBBUE9MTE9OIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgQVBPTExPTl9FVEhSX0dQSU9fSVJRCQk3NAotCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1mc2FtcGxlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWZzYW1wbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzYzVhZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWZzYW1wbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWZzYW1wbGUuaAotICoKLSAqIEJvYXJkLXNwZWNpZmljIGdvb2RpZXMgZm9yIFRJIEYtU2FtcGxlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYy4KLSAqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9GU0FNUExFX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0ZTQU1QTEVfSAotCi0vKiBmc2FtcGxlIGlzIHByZXR0eSBjbG9zZSB0byBwMi1zYW1wbGUgKi8KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXBlcnNldXMyLmg+Ci0KLSNkZWZpbmUgZnNhbXBsZV9jcGxkX3JlYWQocmVnKSBfX3Jhd19yZWFkYihyZWcpCi0jZGVmaW5lIGZzYW1wbGVfY3BsZF93cml0ZSh2YWwsIHJlZykgX19yYXdfd3JpdGViKHZhbCwgcmVnKQotCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CQVNFICAgIDB4RTgxMDAwMDAKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1NJWkUgICAgU1pfNEsKLSNkZWZpbmUgRlNBTVBMRV9DUExEX1NUQVJUICAgMHgwNTA4MDAwMAotCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9SRUdfQSAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDApCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9TV0lUQ0ggIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDIpCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9VQVJUICAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDIpCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9SRUdfQiAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDQpCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9WRVJTSU9OIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDYpCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDYpCi0KLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9CVF9SRVNFVCAgICAgICAgIDAKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9MQ0RfUkVTRVQgICAgICAgIDEKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9DQU1fUFdETiAgICAgICAgIDIKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9DSEFSR0VSX0VOQUJMRSAgIDMKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9TRF9NTUNfRU4gICAgICAgIDQKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX1BXUkVOICAgICAgIDUKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9CQUNLTElHSFQgICAgICAgIDYKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX0VOX1JFU0VUICAgIDcKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX1NMRUVQeF9OICAgIDgKLSNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9PVEdfUkVTRVQgICAgICAgIDkKLQotI2RlZmluZSBmc2FtcGxlX2NwbGRfc2V0KGJpdCkgXAotICAgIGZzYW1wbGVfY3BsZF93cml0ZSgoKChiaXQpICYgMTUpIDw8IDQpIHwgMHgwZiwgRlNBTVBMRV9DUExEX1NFVF9DTFIpCi0KLSNkZWZpbmUgZnNhbXBsZV9jcGxkX2NsZWFyKGJpdCkgXAotICAgIGZzYW1wbGVfY3BsZF93cml0ZSgweGYwIHwgKChiaXQpICYgMTUpLCBGU0FNUExFX0NQTERfU0VUX0NMUikKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgyLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NTMxYzguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDIuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMTYxMCBIMiBib2FyZC4KLSAqCi0gKiBDbGVhbnVwIGZvciBMaW51eC0yLjYgYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSDJfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDJfSAotCi0vKiBBdCBPTUFQMTYxMCBJbm5vdmF0b3IgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KLSNkZWZpbmUgT01BUDE2MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAotCi0jZGVmaW5lIEgyX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCi0jCWRlZmluZSBIMl9UUFNfR1BJT19NTUNfUFdSX0VOCShIMl9UUFNfR1BJT19CQVNFICsgMykKLQotZXh0ZXJuIHZvaWQgaDJfbW1jX2luaXQodm9pZCk7Ci0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0gyX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODg4MzI2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgzLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0gzX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0gzX0gKLQotLyogSW4gT01BUDE3MTAgSDMgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KLSNkZWZpbmUgT01BUDE3MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAotCi0jZGVmaW5lIEgzX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCi0jCWRlZmluZSBIM19UUFNfR1BJT19NTUNfUFdSX0VOCShIM19UUFNfR1BJT19CQVNFICsgNCkKLQotZXh0ZXJuIHZvaWQgaDNfbW1jX2luaXQodm9pZCk7Ci0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0gzX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzZmEwZjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oNC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMjQyMCBINCBib2FyZC4KLSAqCi0gKiBJbml0aWFsIGNyZWF0aW9uIGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0g0X0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0g0X0gKLQotLyogTU1DIFByb3RvdHlwZXMgKi8KLWV4dGVybiB2b2lkIGg0X21tY19pbml0KHZvaWQpOwotCi0vKiBQbGFjZWhvbGRlciBmb3IgSDQgc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBPTUFQMjRYWF9FVEhSX0dQSU9fSVJRCQk5MgotI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfSDRfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWlubm92YXRvci5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1pbm5vdmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlM2U3OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWlubm92YXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaW5ub3ZhdG9yLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0lOTk9WQVRPUl9ICi0KLSNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTVYWCkKLQotI2lmbmRlZiBPTUFQX1NEUkFNX0RFVklDRQotI2RlZmluZSBPTUFQX1NEUkFNX0RFVklDRQkJCUQyNTZNXzFYMTZfNEIKLSNlbmRpZgotCi0jZGVmaW5lIE9NQVAxNTEwUDFfSU1JRl9QUklfVkFMVUUJCTB4MDAKLSNkZWZpbmUgT01BUDE1MTBQMV9FTUlGU19QUklfVkFMVUUJCTB4MDAKLSNkZWZpbmUgT01BUDE1MTBQMV9FTUlGRl9QUklfVkFMVUUJCTB4MDAKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXZvaWQgZnBnYV93cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgaW50IHJlZyk7Ci11bnNpZ25lZCBjaGFyIGZwZ2FfcmVhZChpbnQgcmVnKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KLQotI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNlhYKQotCi0vKiBBdCBPTUFQMTYxMCBJbm5vdmF0b3IgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KLSNkZWZpbmUgSU5OT1ZBVE9SMTYxMF9FVEhSX1NUQVJUCTB4MDQwMDAzMDAKLQotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNjEwICovCi0jZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX0lOTk9WQVRPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIzMzk5Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbGRwLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDMgTERQLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfTERQX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0xEUF9ICi0KLWV4dGVybiB2b2lkIHR3bDQwMzBfYmNpX2JhdHRlcnlfaW5pdCh2b2lkKTsKLQotI2RlZmluZSBUV0w0MDMwX0lSUU5VTQkJSU5UXzM0WFhfU1lTX05JUlEKLSNkZWZpbmUgTERQX1NNQzkxMVhfQ1MgICAgICAgICAxCi0jZGVmaW5lIExEUF9TTUM5MTFYX0dQSU8gICAgICAgMTUyCi0jZGVmaW5lIERFQlVHX0JBU0UgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBPTUFQMzRYWF9FVEhSX1NUQVJUICAgIERFQlVHX0JBU0UKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfTERQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbm9raWEuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbm9raWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiYmUwMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW5va2lhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbm9raWEuaAotICoKLSAqICBJbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzIGZvciBOb2tpYS1zcGVjaWZpYyBib2FyZCBjb25maWcgZGF0YQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUJTm9raWEgQ29ycG9yYXRpb24KLSAqLwotCi0jaWZuZGVmIF9PTUFQX0JPQVJEX05PS0lBX0gKLSNkZWZpbmUgX09NQVBfQk9BUkRfTk9LSUFfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2RlZmluZSBPTUFQX1RBR19OT0tJQV9CVAkweDRlMDEKLSNkZWZpbmUgT01BUF9UQUdfV0xBTl9DWDMxMTBYCTB4NGUwMgotI2RlZmluZSBPTUFQX1RBR19DQlVTCQkweDRlMDMKLSNkZWZpbmUgT01BUF9UQUdfRU1fQVNJQ19CQjUJMHg0ZTA0Ci0KLQotI2RlZmluZSBCVF9DSElQX0NTUgkJMQotI2RlZmluZSBCVF9DSElQX1RJCQkyCi0KLSNkZWZpbmUgQlRfU1lTQ0xLXzEyCQkxCi0jZGVmaW5lIEJUX1NZU0NMS18zOF80CQkyCi0KLXN0cnVjdCBvbWFwX2JsdWV0b290aF9jb25maWcgewotCXU4ICAgIGNoaXBfdHlwZTsKLQl1OCAgICBidF93YWtldXBfZ3BpbzsKLQl1OCAgICBob3N0X3dha2V1cF9ncGlvOwotCXU4ICAgIHJlc2V0X2dwaW87Ci0JdTggICAgYnRfdWFydDsKLQl1OCAgICBiZF9hZGRyWzZdOwotCXU4ICAgIGJ0X3N5c2NsazsKLX07Ci0KLXN0cnVjdCBvbWFwX3dsYW5fY3gzMTEweF9jb25maWcgewotCXU4ICBjaGlwX3R5cGU7Ci0JczE2IHBvd2VyX2dwaW87Ci0JczE2IGlycV9ncGlvOwotCXMxNiBzcGlfY3NfZ3BpbzsKLX07Ci0KLXN0cnVjdCBvbWFwX2NidXNfY29uZmlnIHsKLQlzMTYgY2xrX2dwaW87Ci0JczE2IGRhdF9ncGlvOwotCXMxNiBzZWxfZ3BpbzsKLX07Ci0KLXN0cnVjdCBvbWFwX2VtX2FzaWNfYmI1X2NvbmZpZyB7Ci0JczE2IHJldHVfaXJxX2dwaW87Ci0JczE2IHRhaHZvX2lycV9ncGlvOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwODBkNTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMyBCRUFHTEUuCi0gKgotICogSW5pdGlhbCBjcmVhdGlvbiBieSBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDNfQkVBR0xFX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQM19CRUFHTEVfSAotCi0jZW5kaWYgLyogX19BU01fQVJDSF9PTUFQM19CRUFHTEVfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9zay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vc2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg1MGNiMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9zay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3NrLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDU5MTIgT1NLIGJvYXJkLgotICoKLSAqIFdyaXR0ZW4gYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfT1NLX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX09TS19ICi0KLS8qIEF0IE9NQVA1OTEyIE9TSyB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwotI2RlZmluZSBPTUFQX09TS19FVEhSX1NUQVJUCQkweDA0ODAwMzAwCi0KLS8qIFRQUzY1MDEwIGhhcyBmb3VyIEdQSU9zLiAgblBHIGFuZCBMRUQyIGNhbiBiZSB0cmVhdGVkIGxpa2UgR1BJT3Mgd2l0aAotICogYWx0ZXJuYXRlIHBpbiBjb25maWd1cmF0aW9ucyBmb3IgaGFyZHdhcmUtY29udHJvbGxlZCBibGlua2luZy4KLSAqLwotI2RlZmluZSBPU0tfVFBTX0dQSU9fQkFTRQkJKE9NQVBfTUFYX0dQSU9fTElORVMgKyAxNiAvKiBNUFVJTyAqLykKLSMJZGVmaW5lIE9TS19UUFNfR1BJT19VU0JfUFdSX0VOCShPU0tfVFBTX0dQSU9fQkFTRSArIDApCi0jCWRlZmluZSBPU0tfVFBTX0dQSU9fTEVEX0QzCShPU0tfVFBTX0dQSU9fQkFTRSArIDEpCi0jCWRlZmluZSBPU0tfVFBTX0dQSU9fTEFOX1JFU0VUCShPU0tfVFBTX0dQSU9fQkFTRSArIDIpCi0jCWRlZmluZSBPU0tfVFBTX0dQSU9fRFNQX1BXUl9FTgkoT1NLX1RQU19HUElPX0JBU0UgKyAzKQotIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EOQkoT1NLX1RQU19HUElPX0JBU0UgKyA0KQotIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EMgkoT1NLX1RQU19HUElPX0JBU0UgKyA1KQotCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9PU0tfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW92ZXJvLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW92ZXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlY2FlNjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIGJvYXJkLW92ZXJvLmggKEd1bXN0aXggT3Zlcm8pCi0gKgotICogSW5pdGlhbCBjb2RlOiBTdGV2ZSBTYWtvbWFuIDxzdGV2ZUBzYWtvbWFuLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09WRVJPX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PVkVST19ICi0KLSNkZWZpbmUgT1ZFUk9fR1BJT19CVF9YR0FURQkxNQotI2RlZmluZSBPVkVST19HUElPX1cyV19OUkVTRVQJMTYKLSNkZWZpbmUgT1ZFUk9fR1BJT19CVF9OUkVTRVQJMTY0Ci0jZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9DUEVOCTE2OAotI2RlZmluZSBPVkVST19HUElPX1VTQkhfTlJFU0VUCTE4MwotCi0jZW5kaWYgLyogX19fX0FTTV9BUkNIX09WRVJPX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdGUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MDZjZGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10ZS5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBQYWxtIFR1bmdzdGVuIEUgZGV2aWNlLgotICoKLSAqIE1haW50YWludGVycyA6CWh0dHA6Ly9wYWxtdGVsaW51eC5zZi5uZXQKLSAqCQkJcGFsbXRlbGludXgtZGV2ZWxvcHBlcnNAbGlzdHMuc2YubmV0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fT01BUF9CT0FSRF9QQUxNVEVfSAotI2RlZmluZSBfX09NQVBfQk9BUkRfUEFMTVRFX0gKLQotI2RlZmluZSBQQUxNVEVfVVNCREVURUNUX0dQSU8JMAotI2RlZmluZSBQQUxNVEVfVVNCX09SX0RDX0dQSU8JMQotI2RlZmluZSBQQUxNVEVfVFNDX0dQSU8JCTQKLSNkZWZpbmUgUEFMTVRFX1BJTlREQVZfR1BJTwk2Ci0jZGVmaW5lIFBBTE1URV9NTUNfV1BfR1BJTwk4Ci0jZGVmaW5lIFBBTE1URV9NTUNfUE9XRVJfR1BJTwk5Ci0jZGVmaW5lIFBBTE1URV9IRFFfR1BJTwkJMTEKLSNkZWZpbmUgUEFMTVRFX0hFQURQSE9ORVNfR1BJTwkxNAotI2RlZmluZSBQQUxNVEVfU1BFQUtFUl9HUElPCTE1Ci0jZGVmaW5lIFBBTE1URV9EQ19HUElPCQlPTUFQX01QVUlPKDIpCi0jZGVmaW5lIFBBTE1URV9NTUNfU1dJVENIX0dQSU8JT01BUF9NUFVJTyg0KQotI2RlZmluZSBQQUxNVEVfTU1DMV9HUElPCU9NQVBfTVBVSU8oNikKLSNkZWZpbmUgUEFMTVRFX01NQzJfR1BJTwlPTUFQX01QVUlPKDcpCi0jZGVmaW5lIFBBTE1URV9NTUMzX0dQSU8JT01BUF9NUFVJTygxMSkKLQotI2VuZGlmCS8qIF9fT01BUF9CT0FSRF9QQUxNVEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdHQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXR0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OWYzODIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10ZS5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBQYWxtIFR1bmdzdGVufFQgZGV2aWNlLgotICoKLSAqIE1haW50YWludGVycyA6CU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fT01BUF9CT0FSRF9QQUxNVFRfSAotI2RlZmluZSBfX09NQVBfQk9BUkRfUEFMTVRUX0gKLQotI2RlZmluZSBQQUxNVFRfVVNCREVURUNUX0dQSU8JMAotI2RlZmluZSBQQUxNVFRfQ0FCTEVfR1BJTwkxCi0jZGVmaW5lIFBBTE1UVF9MRURfR1BJTwkJMwotI2RlZmluZSBQQUxNVFRfUEVOSVJRX0dQSU8JNgotI2RlZmluZSBQQUxNVFRfTU1DX1dQX0dQSU8JOAotI2RlZmluZSBQQUxNVFRfSERRX0dQSU8JCTExCi0KLSNlbmRpZgkvKiBfX09NQVBfQk9BUkRfUEFMTVRUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXo3MS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtejcxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZDdkNTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtejcxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtejcxLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIFBhbG0gWmlyZTcxIGRldmljZS4KLSAqCi0gKiBNYWludGFpbnRlcnMgOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX09NQVBfQk9BUkRfUEFMTVo3MV9ICi0jZGVmaW5lIF9fT01BUF9CT0FSRF9QQUxNWjcxX0gKLQotI2RlZmluZSBQQUxNWjcxX1VTQkRFVEVDVF9HUElPCTAKLSNkZWZpbmUgUEFMTVo3MV9QRU5JUlFfR1BJTwk2Ci0jZGVmaW5lIFBBTE1aNzFfTU1DX1dQX0dQSU8JOAotI2RlZmluZSBQQUxNWjcxX0hEUV9HUElPIAkxMQotCi0jZGVmaW5lIFBBTE1aNzFfSE9UU1lOQ19HUElPCU9NQVBfTVBVSU8oMSkKLSNkZWZpbmUgUEFMTVo3MV9DQUJMRV9HUElPCU9NQVBfTVBVSU8oMikKLSNkZWZpbmUgUEFMTVo3MV9TTElERVJfR1BJTwlPTUFQX01QVUlPKDMpCi0jZGVmaW5lIFBBTE1aNzFfTU1DX0lOX0dQSU8JT01BUF9NUFVJTyg0KQotCi0jZW5kaWYJLyogX19PTUFQX0JPQVJEX1BBTE1aNzFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wZXJzZXVzMi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wZXJzZXVzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDZjM2Q3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGVyc2V1czIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wZXJzZXVzMi5oCi0gKgotICogIENvcHlyaWdodCAyMDAzIGJ5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogICAgT01BUDczMCAvIFBlcnNldXMyIHN1cHBvcnQgYnkgSmVhbiBQaWhldAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLiAoaHR0cDovL3d3dy5yaWRnZXJ1bi5jb20pCi0gKiBBdXRob3I6IFJpZGdlUnVuLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX1BFUlNFVVMyX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1BFUlNFVVMyX0gKLQotI2luY2x1ZGUgPG1hY2gvZnBnYS5oPgotCi0jaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCi0jZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQlEMjU2TV8xWDE2XzRCCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXZvaWNlYmx1ZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC12b2ljZWJsdWUuaAppbmRleCBlZDZkMzQ2Li4yNzkxNmIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXZvaWNlYmx1ZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtdm9pY2VibHVlLmgKQEAgLTE0LDcgKzE0LDYgQEAKIGV4dGVybiB2b2lkIHZvaWNlYmx1ZV93ZHRfZW5hYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9kaXNhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3dkdF9waW5nKHZvaWQpOwotZXh0ZXJuIHZvaWQgdm9pY2VibHVlX3Jlc2V0KHZvaWQpOwogCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfVk9JQ0VCTFVFX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IDk0NjY3NzIuLjUwZWE3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTE3LDcgKzE3LDYgQEAKIC8qIERpZmZlcmVudCBwZXJpcGhlcmFsIGlkcyAqLwogI2RlZmluZSBPTUFQX1RBR19DTE9DSwkJMHg0ZjAxCiAjZGVmaW5lIE9NQVBfVEFHX1NFUklBTF9DT05TT0xFIDB4NGYwMwotI2RlZmluZSBPTUFQX1RBR19VU0IJCTB4NGYwNAogI2RlZmluZSBPTUFQX1RBR19MQ0QJCTB4NGYwNQogI2RlZmluZSBPTUFQX1RBR19HUElPX1NXSVRDSAkweDRmMDYKICNkZWZpbmUgT01BUF9UQUdfVUFSVAkJMHg0ZjA3CkBAIC0xMzMsOSArMTMyLDYgQEAKIAljaGFyIHZlcnNpb25bMTJdOwogfTsKIAotCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1ub2tpYS5oPgotCiBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgewogCXUxNiB0YWc7CiAJdTE2IGxlbjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGM0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fTUFDSF9DTEtERVZfSAorCitzdGF0aWMgaW5saW5lIGludCBfX2Nsa19nZXQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggNzE5Mjk4NS4uMDczYTJjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMTcsMTEgKzE3LDE2IEBACiBzdHJ1Y3QgY2xrOwogc3RydWN0IGNsb2NrZG9tYWluOwogCitzdHJ1Y3QgY2xrb3BzIHsKKwlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAKIHN0cnVjdCBjbGtzZWxfcmF0ZSB7Ci0JdTgJCQlkaXY7CiAJdTMyCQkJdmFsOworCXU4CQkJZGl2OwogCXU4CQkJZmxhZ3M7CiB9OwogCkBAIC0zNCwyNCArMzksMjggQEAKIAl2b2lkIF9faW9tZW0JCSptdWx0X2RpdjFfcmVnOwogCXUzMgkJCW11bHRfbWFzazsKIAl1MzIJCQlkaXYxX21hc2s7Ci0JdTE2CQkJbGFzdF9yb3VuZGVkX207Ci0JdTgJCQlsYXN0X3JvdW5kZWRfbjsKLQl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdW5kZWRfcmF0ZTsKLQl1bnNpZ25lZCBpbnQJCXJhdGVfdG9sZXJhbmNlOwotCXUxNgkJCW1heF9tdWx0aXBsaWVyOwotCXU4CQkJbWF4X2RpdmlkZXI7Ci0JdTMyCQkJbWF4X3RvbGVyYW5jZTsKLSMgIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0JdTgJCQltb2RlczsKKwlzdHJ1Y3QgY2xrCQkqY2xrX2J5cGFzczsKKwlzdHJ1Y3QgY2xrCQkqY2xrX3JlZjsKIAl2b2lkIF9faW9tZW0JCSpjb250cm9sX3JlZzsKIAl1MzIJCQllbmFibGVfbWFzazsKKwl1bnNpZ25lZCBpbnQJCXJhdGVfdG9sZXJhbmNlOworCXVuc2lnbmVkIGxvbmcJCWxhc3Rfcm91bmRlZF9yYXRlOworCXUxNgkJCWxhc3Rfcm91bmRlZF9tOworCXU4CQkJbGFzdF9yb3VuZGVkX247CisJdTgJCQltaW5fZGl2aWRlcjsKKwl1OAkJCW1heF9kaXZpZGVyOworCXUzMgkJCW1heF90b2xlcmFuY2U7CisJdTE2CQkJbWF4X211bHRpcGxpZXI7CisjICBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCXU4CQkJbW9kZXM7CisJdm9pZCBfX2lvbWVtCQkqYXV0b2lkbGVfcmVnOworCXZvaWQgX19pb21lbQkJKmlkbGVzdF9yZWc7CisJdTMyCQkJYXV0b2lkbGVfbWFzazsKKwl1MzIJCQlmcmVxc2VsX21hc2s7CisJdTMyCQkJaWRsZXN0X21hc2s7CiAJdTgJCQlhdXRvX3JlY2FsX2JpdDsKIAl1OAkJCXJlY2FsX2VuX2JpdDsKIAl1OAkJCXJlY2FsX3N0X2JpdDsKLQl2b2lkIF9faW9tZW0JCSphdXRvaWRsZV9yZWc7Ci0JdTMyCQkJYXV0b2lkbGVfbWFzazsKLQl2b2lkIF9faW9tZW0JCSppZGxlc3RfcmVnOwotCXU4CQkJaWRsZXN0X2JpdDsKICMgIGVuZGlmCiB9OwogCkBAIC01OSwyMSArNjgsMjEgQEAKIAogc3RydWN0IGNsayB7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKwljb25zdCBzdHJ1Y3QgY2xrb3BzCSpvcHM7CiAJY29uc3QgY2hhcgkJKm5hbWU7CiAJaW50CQkJaWQ7CiAJc3RydWN0IGNsawkJKnBhcmVudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNoaWxkcmVuOworCXN0cnVjdCBsaXN0X2hlYWQJc2libGluZzsJLyogbm9kZSBmb3IgY2hpbGRyZW4gKi8KIAl1bnNpZ25lZCBsb25nCQlyYXRlOwogCV9fdTMyCQkJZmxhZ3M7CiAJdm9pZCBfX2lvbWVtCQkqZW5hYmxlX3JlZzsKLQlfX3U4CQkJZW5hYmxlX2JpdDsKLQlfX3M4CQkJdXNlY291bnQ7Ci0Jdm9pZAkJCSgqcmVjYWxjKShzdHJ1Y3QgY2xrICopOworCXVuc2lnbmVkIGxvbmcJCSgqcmVjYWxjKShzdHJ1Y3QgY2xrICopOwogCWludAkJCSgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CiAJbG9uZwkJCSgqcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKIAl2b2lkCQkJKCppbml0KShzdHJ1Y3QgY2xrICopOwotCWludAkJCSgqZW5hYmxlKShzdHJ1Y3QgY2xrICopOwotCXZvaWQJCQkoKmRpc2FibGUpKHN0cnVjdCBjbGsgKik7CisJX191OAkJCWVuYWJsZV9iaXQ7CisJX19zOAkJCXVzZWNvdW50OwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJdTgJCQlmaXhlZF9kaXY7CiAJdm9pZCBfX2lvbWVtCQkqY2xrc2VsX3JlZzsKQEAgLTk5LDcgKzEwOCw2IEBACiAJbG9uZwkJKCpjbGtfcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogCWludAkJKCpjbGtfc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAlpbnQJCSgqY2xrX3NldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KTsKLQlzdHJ1Y3QgY2xrICoJKCpjbGtfZ2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrKTsKIAl2b2lkCQkoKmNsa19hbGxvd19pZGxlKShzdHJ1Y3QgY2xrICpjbGspOwogCXZvaWQJCSgqY2xrX2RlbnlfaWRsZSkoc3RydWN0IGNsayAqY2xrKTsKIAl2b2lkCQkoKmNsa19kaXNhYmxlX3VudXNlZCkoc3RydWN0IGNsayAqY2xrKTsKQEAgLTExMCw0MiArMTE4LDMzIEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbXB1cmF0ZTsKIAotZXh0ZXJuIGludCBjbGtfaW5pdChzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyAqIGN1c3RvbV9jbG9ja3MpOworZXh0ZXJuIGludCBjbGtfaW5pdChzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyAqY3VzdG9tX2Nsb2Nrcyk7CitleHRlcm4gdm9pZCBjbGtfaW5pdF9vbmUoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiBpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBjbGtfcmVwYXJlbnQoc3RydWN0IGNsayAqY2hpbGQsIHN0cnVjdCBjbGsgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiB2b2lkIHJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKHZvaWQpOwotZXh0ZXJuIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKLWV4dGVybiB2b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsayk7Ci1leHRlcm4gdm9pZCBjbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7Ci1leHRlcm4gaW50IGNsa19nZXRfdXNlY291bnQoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiB2b2lkIGNsa19lbmFibGVfaW5pdF9jbG9ja3Modm9pZCk7CisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCitleHRlcm4gdm9pZCBjbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKTsKKyNlbmRpZgorCitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbnVsbDsKIAogLyogQ2xvY2sgZmxhZ3MgKi8KLSNkZWZpbmUgUkFURV9DS0NUTAkJKDEgPDwgMCkJLyogTWFpbiBmaXhlZCByYXRpbyBjbG9ja3MgKi8KKy8qIGJpdCAwIGlzIGZyZWUgKi8KICNkZWZpbmUgUkFURV9GSVhFRAkJKDEgPDwgMSkJLyogRml4ZWQgY2xvY2sgcmF0ZSAqLwotI2RlZmluZSBSQVRFX1BST1BBR0FURVMJCSgxIDw8IDIpCS8qIFByb2dyYW0gY2hpbGRyZW4gdG9vICovCi0jZGVmaW5lIFZJUlRVQUxfQ0xPQ0sJCSgxIDw8IDMpCS8qIENvbXBvc2l0ZSBjbG9jayBmcm9tIHRhYmxlICovCi0jZGVmaW5lIEFMV0FZU19FTkFCTEVECQkoMSA8PCA0KQkvKiBDbG9jayBjYW5ub3QgYmUgZGlzYWJsZWQgKi8KKy8qIGJpdHMgMi00IGFyZSBmcmVlICovCiAjZGVmaW5lIEVOQUJMRV9SRUdfMzJCSVQJKDEgPDwgNSkJLyogVXNlIDMyLWJpdCBhY2Nlc3MgKi8KLSNkZWZpbmUgVklSVFVBTF9JT19BRERSRVNTCSgxIDw8IDYpCS8qIENsb2NrIGluIHZpcnR1YWwgYWRkcmVzcyAqLwogI2RlZmluZSBDTE9DS19JRExFX0NPTlRST0wJKDEgPDwgNykKICNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgOCkKICNkZWZpbmUgREVMQVlFRF9BUFAJCSgxIDw8IDkpCS8qIERlbGF5IGFwcGxpY2F0aW9uIG9mIGNsb2NrICovCiAjZGVmaW5lIENPTkZJR19QQVJUSUNJUEFOVAkoMSA8PCAxMCkJLyogRnVuZGFtZW50YWwgY2xvY2sgKi8KICNkZWZpbmUgRU5BQkxFX09OX0lOSVQJCSgxIDw8IDExKQkvKiBFbmFibGUgdXBvbiBmcmFtZXdvcmsgaW5pdCAqLwogI2RlZmluZSBJTlZFUlRfRU5BQkxFICAgICAgICAgICAoMSA8PCAxMikgICAgICAgLyogMCBlbmFibGVzLCAxIGRpc2FibGVzICovCi0vKiBiaXRzIDEzLTIwIGFyZSBjdXJyZW50bHkgZnJlZSAqLwotI2RlZmluZSBDTE9DS19JTl9PTUFQMzEwCSgxIDw8IDIxKQotI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCSgxIDw8IDIyKQotI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkoMSA8PCAyMykKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE2WFgJKDEgPDwgMjQpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAyNDJYCSgxIDw8IDI1KQotI2RlZmluZSBDTE9DS19JTl9PTUFQMjQzWAkoMSA8PCAyNikKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDM0M1gJKDEgPDwgMjcpCS8qIGNsb2NrcyBjb21tb24gdG8gYWxsIDM0M1ggKi8KLSNkZWZpbmUgUEFSRU5UX0NPTlRST0xTX0NMT0NLCSgxIDw8IDI4KQotI2RlZmluZSBDTE9DS19JTl9PTUFQMzQzMEVTMQkoMSA8PCAyOSkJLyogMzQzMEVTMSBjbG9ja3Mgb25seSAqLwotI2RlZmluZSBDTE9DS19JTl9PTUFQMzQzMEVTMgkoMSA8PCAzMCkJLyogMzQzMEVTMiBjbG9ja3Mgb25seSAqLworLyogYml0cyAxMy0zMSBhcmUgY3VycmVudGx5IGZyZWUgKi8KIAogLyogQ2xrc2VsX3JhdGUgZmxhZ3MgKi8KICNkZWZpbmUgREVGQVVMVF9SQVRFCQkoMSA8PCAwKQpAQCAtMTU3LDkgKzE1Niw0IEBACiAjZGVmaW5lIFJBVEVfSU5fMjRYWAkJKFJBVEVfSU5fMjQyWCB8IFJBVEVfSU5fMjQzWCkKIAogCi0vKiBDTV9DTEtTRUwyX1BMTC5DT1JFX0NMS19TUkMgb3B0aW9ucyAoMjRYWCkgKi8KLSNkZWZpbmUgQ09SRV9DTEtfU1JDXzMySwkJMAotI2RlZmluZSBDT1JFX0NMS19TUkNfRFBMTAkJMQotI2RlZmluZSBDT1JFX0NMS19TUkNfRFBMTF9YMgkJMgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaAppbmRleCAxZjUxZjAxLi5iOWQwZGQyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrZG9tYWluLmgKKyAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaAogICoKICAqIE9NQVAyLzMgY2xvY2tkb21haW4gZnJhbWV3b3JrIGZ1bmN0aW9ucwogICoKQEAgLTQ4LDExICs0OCwxMyBAQAogICovCiBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCB7CiAKLQkvKiBOYW1lIG9mIHRoZSBwb3dlcmRvbWFpbiB0byBhZGQgYSB3a2RlcC9zbGVlcGRlcCBvbiAqLwotCWNvbnN0IGNoYXIgKnB3cmRtX25hbWU7CisJdW5pb24geworCQkvKiBOYW1lIG9mIHRoZSBwb3dlcmRvbWFpbiB0byBhZGQgYSB3a2RlcC9zbGVlcGRlcCBvbiAqLworCQljb25zdCBjaGFyICpuYW1lOwogCi0JLyogUG93ZXJkb21haW4gcG9pbnRlciAobG9va2VkIHVwIGF0IGNsa2RtX2luaXQoKSB0aW1lKSAqLwotCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CisJCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgKGxvb2tlZCB1cCBhdCBjbGtkbV9pbml0KCkgdGltZSkgKi8KKwkJc3RydWN0IHBvd2VyZG9tYWluICpwdHI7CisJfSBwd3JkbTsKIAogCS8qIE9NQVAgY2hpcCB0eXBlcyB0aGF0IHRoaXMgY2xvY2tkb21haW4gZGVwIGlzIHZhbGlkIG9uICovCiAJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7CkBAIC02NCw4ICs2NiwxMyBAQAogCS8qIENsb2NrZG9tYWluIG5hbWUgKi8KIAljb25zdCBjaGFyICpuYW1lOwogCi0JLyogUG93ZXJkb21haW4gZW5jbG9zaW5nIHRoaXMgY2xvY2tkb21haW4gKi8KLQljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCXVuaW9uIHsKKwkJLyogUG93ZXJkb21haW4gZW5jbG9zaW5nIHRoaXMgY2xvY2tkb21haW4gKi8KKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQkvKiBQb3dlcmRvbWFpbiBwb2ludGVyIGFzc2lnbmVkIGF0IGNsa2RtX3JlZ2lzdGVyKCkgKi8KKwkJc3RydWN0IHBvd2VyZG9tYWluICpwdHI7CisJfSBwd3JkbTsKIAogCS8qIENMS1RSQ1RSTC9BVVRPU1RBVEUgZmllbGQgbWFzayBpbiBDTV9DTEtTVENUUkwgcmVnICovCiAJY29uc3QgdTE2IGNsa3RyY3RybF9tYXNrOwpAQCAtNzksOSArODYsNiBAQAogCS8qIFVzZWNvdW50IHRyYWNraW5nICovCiAJYXRvbWljX3QgdXNlY291bnQ7CiAKLQkvKiBQb3dlcmRvbWFpbiBwb2ludGVyIGFzc2lnbmVkIGF0IGNsa2RtX3JlZ2lzdGVyKCkgKi8KLQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOwotCiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggZTc0NmVjNy4uMGVjZjM2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC02NSw3ICs2NSw3IEBACiAKIC8qIFRoZXNlIGdldCBjYWxsZWQgZnJvbSBvbWFwMl9zZXRfZ2xvYmFsc194eHh4KCksIGRvIG5vdCBjYWxsIHRoZXNlICovCiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3RhcChzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwotdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19tZW1vcnkoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKK3ZvaWQgb21hcDJfc2V0X2dsb2JhbHNfc2RyYyhzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3ByY20oc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggYThlMTE3OC4uOThiMTQ0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC01Niw2ICs1NiwxNCBAQAogIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCiAjIGVuZGlmCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisjIGlmZGVmIE9NQVBfTkFNRQorIyAgdW5kZWYgIE1VTFRJX09NQVAxCisjICBkZWZpbmUgTVVMVElfT01BUDEKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwODUwCisjIGVuZGlmCisjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogIyBpZmRlZiBPTUFQX05BTUUKICMgIHVuZGVmICBNVUxUSV9PTUFQMQpAQCAtMTA1LDcgKzExMyw3IEBACiAvKgogICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgaW50byBjcHUgY2xhc3Nlcy4KICAqIFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgotICogY3B1X2lzX29tYXA3eHgoKToJVHJ1ZSBmb3IgT01BUDczMAorICogY3B1X2lzX29tYXA3eHgoKToJVHJ1ZSBmb3IgT01BUDczMCwgT01BUDg1MAogICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIE9NQVAxNTEwLCBPTUFQNTkxMCBhbmQgT01BUDMxMAogICogY3B1X2lzX29tYXAxNnh4KCk6CVRydWUgZm9yIE9NQVAxNjEwLCBPTUFQNTkxMiBhbmQgT01BUDE3MTAKICAqIGNwdV9pc19vbWFwMjR4eCgpOglUcnVlIGZvciBPTUFQMjQyMCwgT01BUDI0MjIsIE9NQVAyNDIzLCBPTUFQMjQzMApAQCAtMTUzLDYgKzE2MSwxMCBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJaXNfb21hcDd4eCgpCiAjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDd4eAorIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCWlzX29tYXA3eHgoKQorIyBlbmRpZgogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMTV4eAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQlpc19vbWFwMTV4eCgpCkBAIC0xNjYsNiArMTc4LDEwIEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkxCiAjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDd4eAorIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCTEKKyMgZW5kaWYKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDE1eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJMQpAQCAtMjE5LDYgKzIzNSw3IEBACiAgKiBUaGVzZSBhcmUgb25seSByYXJlbHkgbmVlZGVkLgogICogY3B1X2lzX29tYXAzMzAoKToJVHJ1ZSBmb3IgT01BUDMzMAogICogY3B1X2lzX29tYXA3MzAoKToJVHJ1ZSBmb3IgT01BUDczMAorICogY3B1X2lzX29tYXA4NTAoKToJVHJ1ZSBmb3IgT01BUDg1MAogICogY3B1X2lzX29tYXAxNTEwKCk6CVRydWUgZm9yIE9NQVAxNTEwCiAgKiBjcHVfaXNfb21hcDE2MTAoKToJVHJ1ZSBmb3IgT01BUDE2MTAKICAqIGNwdV9pc19vbWFwMTYxMSgpOglUcnVlIGZvciBPTUFQMTYxMQpAQCAtMjQxLDYgKzI1OCw3IEBACiAKIElTX09NQVBfVFlQRSgzMTAsIDB4MDMxMCkKIElTX09NQVBfVFlQRSg3MzAsIDB4MDczMCkKK0lTX09NQVBfVFlQRSg4NTAsIDB4MDg1MCkKIElTX09NQVBfVFlQRSgxNTEwLCAweDE1MTApCiBJU19PTUFQX1RZUEUoMTYxMCwgMHgxNjEwKQogSVNfT01BUF9UWVBFKDE2MTEsIDB4MTYxMSkKQEAgLTI1NSw2ICsyNzMsNyBAQAogCiAjZGVmaW5lIGNwdV9pc19vbWFwMzEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDg1MCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNTkxMigpCQkwCkBAIC0yNzIsMTIgKzI5MSwyMiBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwNzMwCiAjICBkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJaXNfb21hcDczMCgpCiAjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKKyMgIHVuZGVmICBjcHVfaXNfb21hcDg1MAorIyAgZGVmaW5lIGNwdV9pc19vbWFwODUwKCkJCWlzX29tYXA4NTAoKQorIyBlbmRpZgogI2Vsc2UKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwNzMwCiAjICBkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMQogIyBlbmRpZgogI2VuZGlmCisjZWxzZQorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA4NTAKKyMgIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQkxCisjIGVuZGlmCisjZW5kaWYKIAogLyoKICAqIFdoZXRoZXIgd2UgaGF2ZSBNVUxUSV9PTUFQMSBvciBub3QsIHdlIHN0aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2gKQEAgLTMyMCw3ICszNDksNyBAQAogI2VuZGlmCiAKIC8qIE1hY3JvcyB0byBkZXRlY3QgaWYgd2UgaGF2ZSBPTUFQMSBvciBPTUFQMiAqLwotI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDEoKQkoY3B1X2lzX29tYXA3MzAoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSB8fCBcCisjZGVmaW5lIGNwdV9jbGFzc19pc19vbWFwMSgpCShjcHVfaXNfb21hcDd4eCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpIHx8IFwKIAkJCQljcHVfaXNfb21hcDE2eHgoKSkKICNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAyKCkJKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQogCkBAIC0zNTUsMTMgKzM4NCwyNyBAQAogICogdXNlIG9tYXBfY2hpcF9pcygpLgogICoKICAqLwotI2RlZmluZSBDSElQX0lTX09NQVAyNDIwICAgICAgICgxIDw8IDApCi0jZGVmaW5lIENISVBfSVNfT01BUDI0MzAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMCAgICAgICAoMSA8PCAyKQotI2RlZmluZSBDSElQX0lTX09NQVAzNDMwRVMxICAgICgxIDw8IDMpCi0jZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzIgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMjQyMAkJKDEgPDwgMCkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMjQzMAkJKDEgPDwgMSkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMAkJKDEgPDwgMikKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTMQkJKDEgPDwgMykKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTMgkJKDEgPDwgNCkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTM18wCQkoMSA8PCA1KQorI2RlZmluZSBDSElQX0lTX09NQVAzNDMwRVMzXzEJCSgxIDw8IDYpCiAKLSNkZWZpbmUgQ0hJUF9JU19PTUFQMjRYWCAgICAgICAoQ0hJUF9JU19PTUFQMjQyMCB8IENISVBfSVNfT01BUDI0MzApCisjZGVmaW5lIENISVBfSVNfT01BUDI0WFgJCShDSElQX0lTX09NQVAyNDIwIHwgQ0hJUF9JU19PTUFQMjQzMCkKKworLyoKKyAqICJHRSIgaGVyZSByZXByZXNlbnRzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iIGluIHRlcm1zIG9mIEVTCisgKiBsZXZlbHMuICBTbyBDSElQX0dFX09NQVAzNDMwRVMyIGlzIGludGVuZGVkIHRvIG1hdGNoIGFsbCBPTUFQMzQzMAorICogY2hpcHMgYXQgRVMyIGFuZCBiZXlvbmQsIGJ1dCBub3QsIGZvciBleGFtcGxlLCBhbnkgT01BUCBsaW5lcyBhZnRlcgorICogT01BUDMuCisgKi8KKyNkZWZpbmUgQ0hJUF9HRV9PTUFQMzQzMEVTMgkJKENISVBfSVNfT01BUDM0MzBFUzIgfCBcCisJCQkJCSBDSElQX0lTX09NQVAzNDMwRVMzXzAgfCBcCisJCQkJCSBDSElQX0lTX09NQVAzNDMwRVMzXzEpCisjZGVmaW5lIENISVBfR0VfT01BUDM0MzBFUzNfMQkJKENISVBfSVNfT01BUDM0MzBFUzNfMSkKKwogCiBpbnQgb21hcF9jaGlwX2lzKHN0cnVjdCBvbWFwX2NoaXBfaWQgb2NpKTsKIGludCBvbWFwX3R5cGUodm9pZCk7CkBAIC0zNzgsNSArNDIxLDMgQEAKIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CiAKICNlbmRpZiAgICAvKiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggOGQ5ZGZlMy4uMmIyMmE4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTMxLDcgKzMxLDggQEAKIAogI2RlZmluZSBPTUFQX01QVUlPX0JBU0UJCQkweGZmZmI1MDAwCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisjaWYgKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKSkKKwogI2RlZmluZSBPTUFQX01QVUlPX0lOUFVUX0xBVENICQkweDAwCiAjZGVmaW5lIE9NQVBfTVBVSU9fT1VUUFVUCQkweDAyCiAjZGVmaW5lIE9NQVBfTVBVSU9fSU9fQ05UTAkJMHgwNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMuaAppbmRleCA0NWI2Nzg0Li45MjFiMTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMuaApAQCAtMTAzLDYgKzEwMyw2IEBACiBleHRlcm4gdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKTsKIGV4dGVybiBpbnQgZ3BtY19jc19zZXRfcmVzZXJ2ZWQoaW50IGNzLCBpbnQgcmVzZXJ2ZWQpOwogZXh0ZXJuIGludCBncG1jX2NzX3Jlc2VydmVkKGludCBjcyk7Ci1leHRlcm4gdm9pZCBncG1jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCA2NTg5ZGRiLi4zZGM0MjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0yODYsNzggKzI4Niw0IEBACiAjaW5jbHVkZSAib21hcDI0eHguaCIKICNpbmNsdWRlICJvbWFwMzR4eC5oIgogCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQm9hcmQgc3BlY2lmaWMgZGVmaW5lcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SCi0jaW5jbHVkZSAiYm9hcmQtaW5ub3ZhdG9yLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfSDIKLSNpbmNsdWRlICJib2FyZC1oMi5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCi0jaW5jbHVkZSAiYm9hcmQtcGVyc2V1czIuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9GU0FNUExFCi0jaW5jbHVkZSAiYm9hcmQtZnNhbXBsZS5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0gzCi0jaW5jbHVkZSAiYm9hcmQtaDMuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9INAotI2luY2x1ZGUgImJvYXJkLWg0LmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfMjQzMFNEUAotI2luY2x1ZGUgImJvYXJkLTI0MzBzZHAuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFCi0jaW5jbHVkZSAiYm9hcmQtb21hcDNiZWFnbGUuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9MRFAKLSNpbmNsdWRlICJib2FyZC1sZHAuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OCi0jaW5jbHVkZSAiYm9hcmQtYXBvbGxvbi5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX09TSwotI2luY2x1ZGUgImJvYXJkLW9zay5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKLSNpbmNsdWRlICJib2FyZC12b2ljZWJsdWUuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUKLSNpbmNsdWRlICJib2FyZC1wYWxtdGUuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNWjcxCi0jaW5jbHVkZSAiYm9hcmQtcGFsbXo3MS5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BBTE1UVAotI2luY2x1ZGUgImJvYXJkLXBhbG10dC5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9TWDEKLSNpbmNsdWRlICJib2FyZC1zeDEuaCIKLSNlbmRpZgotCi0jZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi8KLQogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggZDkyYmY3OS4uMDYxMGQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTg1LDExICsxODUsMTMgQEAKICNkZWZpbmUgb21hcF93cml0ZXcodixhKQlfX3Jhd193cml0ZXcodiwgSU9fQUREUkVTUyhhKSkKICNkZWZpbmUgb21hcF93cml0ZWwodixhKQlfX3Jhd193cml0ZWwodiwgSU9fQUREUkVTUyhhKSkKIAorc3RydWN0IG9tYXBfc2RyY19wYXJhbXM7CisKIGV4dGVybiB2b2lkIG9tYXAxX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMV9pbml0X2NvbW1vbl9odyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAyX2luaXRfY29tbW9uX2h3KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDJfaW5pdF9jb21tb25faHcoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNwKTsKIAogI2RlZmluZSBfX2FyY2hfaW9yZW1hcChwLHMsdCkJb21hcF9pb3JlbWFwKHAscyx0KQogI2RlZmluZSBfX2FyY2hfaW91bm1hcCh2KQlvbWFwX2lvdW5tYXAodikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYmVkNTI3NC4uN2Y1N2VlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTEwNSw2ICsxMDUsMjkgQEAKICNkZWZpbmUgSU5UXzczMF9TUEdJT19XUgkyOQogCiAvKgorICogT01BUC04NTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKKyAqLworI2RlZmluZSBJTlRfODUwX0lIMl9GSVEJCTAKKyNkZWZpbmUgSU5UXzg1MF9JSDJfSVJRCQkxCisjZGVmaW5lIElOVF84NTBfVVNCX05PTl9JU08JMgorI2RlZmluZSBJTlRfODUwX1VTQl9JU08JCTMKKyNkZWZpbmUgSU5UXzg1MF9JQ1IJCTQKKyNkZWZpbmUgSU5UXzg1MF9FQUMJCTUKKyNkZWZpbmUgSU5UXzg1MF9HUElPX0JBTksxCTYKKyNkZWZpbmUgSU5UXzg1MF9HUElPX0JBTksyCTcKKyNkZWZpbmUgSU5UXzg1MF9HUElPX0JBTkszCTgKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDJUWAkxMAorI2RlZmluZSBJTlRfODUwX01jQlNQMlJYCTExCisjZGVmaW5lIElOVF84NTBfTWNCU1AyUlhfT1ZGCTEyCisjZGVmaW5lIElOVF84NTBfTENEX0xJTkUJMTQKKyNkZWZpbmUgSU5UXzg1MF9HU01fUFJPVEVDVAkxNQorI2RlZmluZSBJTlRfODUwX1RJTUVSMwkJMTYKKyNkZWZpbmUgSU5UXzg1MF9HUElPX0JBTks1CTE3CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LNgkxOAorI2RlZmluZSBJTlRfODUwX1NQR0lPX1dSCTI5CisKKworLyoKICAqIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAyCiAgKgogICogTk9URTogU2VlIGFsc28gdGhlIE9NQVAtMTUxMCBhbmQgMTYxMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBiZWxvdwpAQCAtMjM3LDYgKzI2MCw2NCBAQAogI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE1CSg2MiArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX05BTkQJCSg2MyArIElIMl9CQVNFKQogCisvKgorICogT01BUC04NTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDIKKyAqLworI2RlZmluZSBJTlRfODUwX0hXX0VSUk9SUwkoMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX05GSVFfUFdSX0ZBSUwJKDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9DRkNECQkoMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0NGSVJFUQkJKDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9JMkMJCSg0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfUENDCQkoNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01QVV9FWFRfTklSUQkoNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1NQSV8xMDBLXzEJKDcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TWVJFTl9TUEkJKDggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9WTFlOUQkJKDkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9HUElPX0JBTks0CSgxMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01jQlNQMVRYCSgxMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01jQlNQMVJYCSgxMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01jQlNQMVJYX09GCSgxMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1VBUlRfTU9ERU1fSVJEQV8yICgxNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1VBUlRfTU9ERU1fMQkoMTUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NQ1NJCQkoMTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF91V2lyZVRYCQkoMTcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF91V2lyZVJYCQkoMTggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TTUNfQ0QJCSgxOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1NNQ19JUkVRCSgyMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0hEUV8xV0lSRQkoMjEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9USU1FUjMySwkoMjIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NTUNfU0RJTwkoMjMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VUExECQkoMjQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VU0JfSEhDXzEJKDI3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVVNCX0hIQ18yCSgyOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1VTQl9HRU5JCSgyOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1VTQl9PVEcJCSgzMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0NBTUVSQV9JRgkoMzEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9STkcJCSgzMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0RVQUxfTU9ERV9USU1FUiAoMzMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9EQkJfUkZfRU4JKDM0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTVBVSU9fS0VZUEFECSgzNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1NIQTFfTUQ1CSgzNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1NQSV8xMDBLXzIJKDM3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfUk5HX0lETEUJKDM4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTVBVSU8JCSgzOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0xMUENfTENEX0NUUkxfQ0FOX0JFX09GRgkoNDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9MTFBDX09FX0ZBTExJTkcgKDQxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTExQQ19PRV9SSVNJTkcJKDQyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTExQQ19WU1lOQwkoNDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9XQUtFX1VQX1JFUQkoNDYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0g2CQkoNTMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0g3CQkoNTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0g4CQkoNTUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0g5CQkoNTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0gxMAkoNTcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0gxMQkoNTggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0gxMgkoNTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0gxMwkoNjAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0gxNAkoNjEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ETUFfQ0gxNQkoNjIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9OQU5ECQkoNjMgKyBJSDJfQkFTRSkKKwogI2RlZmluZSBJTlRfMjRYWF9TWVNfTklSUQk3CiAjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMAkxMgogI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTEJMTMKQEAgLTM0MSw3ICs0MjIsNyBAQAogCiAjZGVmaW5lCUlOVF8zNFhYX0JFTkNIX01QVV9FTVVMCTMKIAotLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMCkgYW5kCisvKiBNYXguIDEyOCBsZXZlbCAyIElSUXMgKE9NQVAxNjEwKSwgMTkyIEdQSU9zIChPTUFQNzMwLzg1MCkgYW5kCiAgKiAxNiBNUFVJTyBsaW5lcyAqLwogI2RlZmluZSBPTUFQX01BWF9HUElPX0xJTkVTCTE5MgogI2RlZmluZSBJSF9HUElPX0JBU0UJCSgxMjggKyBJSDJfQkFTRSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tYWlsYm94LmgKaW5kZXggN2NiZWQ5My4uYjdhNjk5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tYWlsYm94LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tYWlsYm94LmgKQEAgLTMzLDYgKzMzLDkgQEAKIAl2b2lkCQkoKmRpc2FibGVfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKIAl2b2lkCQkoKmFja19pcnEpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpOwogCWludAkJKCppc19pcnEpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpOworCS8qIGN0eCAqLworCXZvaWQJCSgqc2F2ZV9jdHgpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpOworCXZvaWQJCSgqcmVzdG9yZV9jdHgpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpOwogfTsKIAogc3RydWN0IG9tYXBfbWJveF9xdWV1ZSB7CkBAIC01Myw3ICs1Niw3IEBACiAKIAltYm94X21zZ190CQlzZXFfc25kLCBzZXFfcmN2OwogCi0Jc3RydWN0IGRldmljZQkJZGV2OworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAKIAlzdHJ1Y3Qgb21hcF9tYm94CSpuZXh0OwogCXZvaWQJCQkqcHJpdjsKQEAgLTY3LDcgKzcwLDI3IEBACiBzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKik7CiB2b2lkIG9tYXBfbWJveF9wdXQoc3RydWN0IG9tYXBfbWJveCAqKTsKIAotaW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9tYm94ICopOworaW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBvbWFwX21ib3ggKik7CiBpbnQgb21hcF9tYm94X3VucmVnaXN0ZXIoc3RydWN0IG9tYXBfbWJveCAqKTsKIAorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWJveF9zYXZlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWlmICghbWJveC0+b3BzLT5zYXZlX2N0eCkgeworCQlkZXZfZXJyKG1ib3gtPmRldiwgIiVzOlx0bm8gc2F2ZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbWJveC0+b3BzLT5zYXZlX2N0eChtYm94KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWJveF9yZXN0b3JlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWlmICghbWJveC0+b3BzLT5yZXN0b3JlX2N0eCkgeworCQlkZXZfZXJyKG1ib3gtPmRldiwgIiVzOlx0bm8gcmVzdG9yZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbWJveC0+b3BzLT5yZXN0b3JlX2N0eChtYm94KTsKK30KKwogI2VuZGlmIC8qIE1BSUxCT1hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCmluZGV4IDExM2MyNDYuLmJiMTU0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKQEAgLTM0NCw4ICszNDQsNiBAQAogCXU4IGRtYV9yeF9zeW5jLCBkbWFfdHhfc3luYzsKIAl1MTYgcnhfaXJxLCB0eF9pcnE7CiAJc3RydWN0IG9tYXBfbWNic3Bfb3BzICpvcHM7Ci0JY2hhciBjb25zdCAqKmNsa19uYW1lczsKLQlpbnQgbnVtX2Nsa3M7CiB9OwogCiBzdHJ1Y3Qgb21hcF9tY2JzcCB7CkBAIC0zNzcsOCArMzc1LDggQEAKIAkvKiBQcm90ZWN0IHRoZSBmaWVsZCAuZnJlZSwgd2hpbGUgY2hlY2tpbmcgaWYgdGhlIG1jYnNwIGlzIGluIHVzZSAqLwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQlzdHJ1Y3QgY2xrICoqY2xrczsKLQlpbnQgbnVtX2Nsa3M7CisJc3RydWN0IGNsayAqaWNsazsKKwlzdHJ1Y3QgY2xrICpmY2xrOwogfTsKIGV4dGVybiBzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKIGV4dGVybiBpbnQgb21hcF9tY2JzcF9jb3VudDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGQ2YjVjYTYuLjk5ZWQ1NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNjEsOSArNjEsMTEgQEAKICNkZWZpbmUgbGJ1c190b192aXJ0KHgpCQkoKHgpIC0gT01BUDE1MTBfTEJfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCiAjZGVmaW5lIGlzX2xidXNfZGV2aWNlKGRldikJKGNwdV9pc19vbWFwMTV4eCgpICYmIGRldiAmJiAoc3RybmNtcChkZXZfbmFtZShkZXYpLCAib2hjaSIsIDQpID09IDApKQogCi0jZGVmaW5lIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpCSh7aXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKLQkJCQkJKGRtYV9hZGRyX3QpdmlydF90b19sYnVzKHBhZ2VfYWRkcmVzcyhwYWdlKSkgOiBcCi0JCQkJCShkbWFfYWRkcl90KV9fdmlydF90b19waHlzKHBhZ2VfYWRkcmVzcyhwYWdlKSk7fSkKKyNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgcGFnZSkJXAorCSh7IGRtYV9hZGRyX3QgX19kbWEgPSBwYWdlX3RvX3BoeXMocGFnZSk7IFwKKwkgICBpZiAoaXNfbGJ1c19kZXZpY2UoZGV2KSkgXAorCQlfX2RtYSA9IF9fZG1hIC0gUEhZU19PRkZTRVQgKyBPTUFQMTUxMF9MQl9PRkZTRVQ7IFwKKwkgICBfX2RtYTsgfSkKIAogI2RlZmluZSBfX2FyY2hfZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKQkoeyAodm9pZCAqKSAoaXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKIAkJCQkJCWxidXNfdG9fdmlydChhZGRyKSA6IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oCmluZGV4IDczYTllMTUuLjQ0MzViZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaApAQCAtMzcsNiArMzcsOCBAQAogI2RlZmluZSBPTUFQX01NQ19NQVhfU0xPVFMJMgogCiBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSB7CisJLyogYmFjay1saW5rIHRvIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCS8qIG51bWJlciBvZiBzbG90cyBwZXIgY29udHJvbGxlciAqLwogCXVuc2lnbmVkIG5yX3Nsb3RzOjI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAppbmRleCBmNDM2MmI4Li44NWE2MjE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKQEAgLTYxLDYgKzYxLDE2IEBACiAJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAogCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCiAKKyNkZWZpbmUgTVVYX1JFR184NTAocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgLm11eF9yZWdfbmFtZSA9ICJPTUFQODUwX0lPX0NPTkZfIiNyZWcsIFwKKwkJCQkJLm11eF9yZWcgPSBPTUFQODUwX0lPX0NPTkZfIyNyZWcsIFwKKwkJCQkJLm1hc2tfb2Zmc2V0ID0gbW9kZV9vZmZzZXQsIFwKKwkJCQkJLm1hc2sgPSBtb2RlLAorCisjZGVmaW5lIFBVTExfUkVHXzg1MChyZWcsIGJpdCwgc3RhdHVzKQkucHVsbF9uYW1lID0gIk9NQVA4NTBfSU9fQ09ORl8iI3JlZywgXAorCQkJCQkucHVsbF9yZWcgPSBPTUFQODUwX0lPX0NPTkZfIyNyZWcsIFwKKwkJCQkJLnB1bGxfYml0ID0gYml0LCBcCisJCQkJCS5wdWxsX3ZhbCA9IHN0YXR1cywKKwogI2Vsc2UKIAogI2RlZmluZSBNVVhfUkVHKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnID0gRlVOQ19NVVhfQ1RSTF8jI3JlZywgXApAQCAtODMsNiArOTMsMTUgQEAKIAkJCQkJLnB1bGxfYml0ID0gYml0LCBcCiAJCQkJCS5wdWxsX3ZhbCA9IHN0YXR1cywKIAorI2RlZmluZSBNVVhfUkVHXzg1MChyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSBcCisJCQkJCS5tdXhfcmVnID0gT01BUDg1MF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR184NTAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfcmVnID0gT01BUDg1MF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbmRpZiAvKiBDT05GSUdfT01BUF9NVVhfREVCVUcgKi8KIAogI2RlZmluZSBNVVhfQ0ZHKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLAlcCkBAIC05OCw3ICsxMTcsNyBAQAogCiAKIC8qCi0gKiBPTUFQNzMwIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWcgZm9yIHRoZSBwaW4gbXV4LgorICogT01BUDczMC84NTAgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNvbmZpZyBmb3IgdGhlIHBpbiBtdXguCiAgKiAtIGNvbmZpZyByZWdzIGFyZSB0aGUgT01BUDczMF9JT19DT05GX3ggcmVncyAoc2VlIG9tYXA3MzAuaCkgcmVncyBhbmQKICAqICAgbm90IHRoZSBGVU5DX01VWF9DVFJMX3ggcmVncyBmcm9tIGhhcmR3YXJlLmgKICAqIC0gZm9yIHB1bGwtdXAvZG93biwgb25seSBoYXMgb25lIGVuYWJsZSBiaXQgd2hpY2ggaXMgaXMgaW4gdGhlIHNhbWUgcmVnaXN0ZXIKQEAgLTExNCw2ICsxMzMsMTcgQEAKIAlQVV9QRF9SRUcoTkEsIDApCQlcCiB9LAogCisjZGVmaW5lIE1VWF9DRkdfODUwKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLAlcCisJCSAgIHB1bGxfYml0LCBwdWxsX3N0YXR1cywgZGVidWdfc3RhdHVzKVwKK3sJCQkJCQkJXAorCS5uYW1lID0JIGRlc2MsCQkJCQlcCisJLmRlYnVnID0gZGVidWdfc3RhdHVzLAkJCQlcCisJTVVYX1JFR184NTAobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpCQlcCisJUFVMTF9SRUdfODUwKG11eF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cykJXAorCVBVX1BEX1JFRyhOQSwgMCkJCVwKK30sCisKKwogI2RlZmluZSBNVVhfQ0ZHXzI0WFgoZGVzYywgcmVnX29mZnNldCwgbW9kZSwJCQlcCiAJCQkJcHVsbF9lbiwgcHVsbF9tb2RlLCBkYmcpCVwKIHsJCQkJCQkJCVwKQEAgLTIyMSw2ICsyNTEsMjYgQEAKIAlXMTdfNzMwX1VTQl9WQlVTSSwKIH07CiAKK2VudW0gb21hcDg1MF9pbmRleCB7CisJLyogT01BUCA4NTAga2V5Ym9hcmQgKi8KKwlFMl84NTBfS0JSMCwKKwlKN184NTBfS0JSMSwKKwlFMV84NTBfS0JSMiwKKwlGM184NTBfS0JSMywKKwlEMl84NTBfS0JSNCwKKwlDMl84NTBfS0JDMCwKKwlEM184NTBfS0JDMSwKKwlFNF84NTBfS0JDMiwKKwlGNF84NTBfS0JDMywKKwlFM184NTBfS0JDNCwKKworCS8qIFVTQiAqLworCUFBMTdfODUwX1VTQl9ETSwKKwlXMTZfODUwX1VTQl9QVV9FTiwKKwlXMTdfODUwX1VTQl9WQlVTSSwKK307CisKKwogZW51bSBvbWFwMXh4eF9pbmRleCB7CiAJLyogVUFSVDEgKEJUX1VBUlRfR0FUSU5HKSovCiAJVUFSVDFfVFggPSAwLApAQCAtNzg4LDcgKzgzOCwyMCBAQAogCSAqICAtICJfRE9XTiIgc3VmZml4IChHUElPM19ET1dOKSB3aXRoIGludGVybmFsIHB1bGxkb3duCiAJICogIC0gIl9PVVQiIHN1ZmZpeCAoR1BJTzNfT1VUKSBmb3Igb3V0cHV0LW9ubHkgcGlucyAodW5saWtlIDI0eHgpCiAJICovCisJQUYyNl8zNFhYX0dQSU8wLAorCUFGMjJfMzRYWF9HUElPOSwKIAlBSDhfMzRYWF9HUElPMjksCisJVThfMzRYWF9HUElPNTRfT1VULAorCVU4XzM0WFhfR1BJTzU0X0RPV04sCisJTDhfMzRYWF9HUElPNjMsCisJRzI1XzM0WFhfR1BJTzg2X09VVCwKKwlBRzRfMzRYWF9HUElPMTM0X09VVCwKKwlBRTRfMzRYWF9HUElPMTM2X09VVCwKKwlBRjZfMzRYWF9HUElPMTQwX1VQLAorCUFFNl8zNFhYX0dQSU8xNDEsCisJQUY1XzM0WFhfR1BJTzE0MiwKKwlBRTVfMzRYWF9HUElPMTQzLAorCUgxOV8zNFhYX0dQSU8xNjRfT1VULAogCUoyNV8zNFhYX0dQSU8xNzAsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAzNHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAzNHh4LmgKaW5kZXggOGUwNDc5Zi4uYWI2NDAxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMzR4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDM0eHguaApAQCAtNDksMTEgKzQ5LDM5IEBACiAjZGVmaW5lIE9NQVAzNDNYX0NUUkxfQkFTRQlPTUFQMzQzWF9TQ01fQkFTRQogCiAjZGVmaW5lIE9NQVAzNFhYX0lDX0JBU0UJMHg0ODIwMDAwMAorCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9CQVNFCQkoTDRfMzRYWF9CQVNFICsgMHhCQzAwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NCVUZGX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MDEwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NDUDJfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgwNDAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ0NEQ19CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDA2MDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9ISVNUX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MEEwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0gzQV9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDBDMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9QUkVWX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MEUwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX1JFU1pfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgxMDAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfU0JMX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MTIwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX01NVV9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDE0MDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DU0kyQV9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDE4MDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DU0kyUEhZX0JBU0UJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgxOTcwKQorCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9FTkQJCShPTUFQMzQzMF9JU1BfQkFTRSAgICAgICAgICsgMHgwNkYpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQlVGRl9FTkQJCShPTUFQMzQzMF9JU1BfQ0JVRkZfQkFTRSAgICsgMHgwNzcpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQ1AyX0VORAkJKE9NQVAzNDMwX0lTUF9DQ1AyX0JBU0UgICAgKyAweDFFRikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NDRENfRU5ECQkoT01BUDM0MzBfSVNQX0NDRENfQkFTRSAgICArIDB4MEE3KQorI2RlZmluZSBPTUFQMzQzMF9JU1BfSElTVF9FTkQJCShPTUFQMzQzMF9JU1BfSElTVF9CQVNFICAgICsgMHgwNDcpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9IM0FfRU5ECQkoT01BUDM0MzBfSVNQX0gzQV9CQVNFICAgICArIDB4MDVGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfUFJFVl9FTkQJCShPTUFQMzQzMF9JU1BfUFJFVl9CQVNFICAgICsgMHgwOUYpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9SRVNaX0VORAkJKE9NQVAzNDMwX0lTUF9SRVNaX0JBU0UgICAgKyAweDBBQikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX1NCTF9FTkQJCShPTUFQMzQzMF9JU1BfU0JMX0JBU0UgICAgICsgMHgwRkIpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9NTVVfRU5ECQkoT01BUDM0MzBfSVNQX01NVV9CQVNFICAgICArIDB4MDZGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ1NJMkFfRU5ECQkoT01BUDM0MzBfSVNQX0NTSTJBX0JBU0UgICArIDB4MTZGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ1NJMlBIWV9FTkQJKE9NQVAzNDMwX0lTUF9DU0kyUEhZX0JBU0UgKyAweDAwNykKKwogI2RlZmluZSBPTUFQMzRYWF9JVkFfSU5UQ19CQVNFCTB4NDAwMDAwMDAKICNkZWZpbmUgT01BUDM0WFhfSFNVU0JfT1RHX0JBU0UJKEw0XzM0WFhfQkFTRSArIDB4QUIwMDApCiAjZGVmaW5lIE9NQVAzNFhYX0hTVVNCX0hPU1RfQkFTRQkoTDRfMzRYWF9CQVNFICsgMHg2NDAwMCkKICNkZWZpbmUgT01BUDM0WFhfVVNCVExMX0JBU0UJKEw0XzM0WFhfQkFTRSArIDB4NjIwMDApCiAKKyNkZWZpbmUgT01BUDM0WFhfTUFJTEJPWF9CQVNFCQkoTDRfMzRYWF9CQVNFICsgMHg5NDAwMCkKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDg1MC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwODUwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzZjY3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDg1MC5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXA4NTAuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQODUwIHByb2Nlc3Nvci4KKyAqCisgKiBEZXJpdmVkIGZyb20gb21hcDczMC5oIGJ5IFplYmVkaWFoIEMuIE1jQ2x1cmUgPHptY0BsdXJpYW4ubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVA4NTBfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVA4NTBfSAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQmFzZSBhZGRyZXNzZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBTeW50YXg6IFhYX0JBU0UgPSBWaXJ0dWFsIGJhc2UgYWRkcmVzcywgWFhfU1RBUlQgPSBQaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KKworI2RlZmluZSBPTUFQODUwX0RTUF9CQVNFCTB4RTAwMDAwMDAKKyNkZWZpbmUgT01BUDg1MF9EU1BfU0laRQkweDUwMDAwCisjZGVmaW5lIE9NQVA4NTBfRFNQX1NUQVJUCTB4RTAwMDAwMDAKKworI2RlZmluZSBPTUFQODUwX0RTUFJFR19CQVNFCTB4RTEwMDAwMDAKKyNkZWZpbmUgT01BUDg1MF9EU1BSRUdfU0laRQlTWl8xMjhLCisjZGVmaW5lIE9NQVA4NTBfRFNQUkVHX1NUQVJUCTB4RTEwMDAwMDAKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVA4NTAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQODUwX0NPTkZJR19CQVNFCTB4ZmZmZTEwMDAKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzAJMHhmZmZlMTA3MAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMQkweGZmZmUxMDc0CisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl8yCTB4ZmZmZTEwNzgKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzMJMHhmZmZlMTA3YworI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfNAkweGZmZmUxMDgwCisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl81CTB4ZmZmZTEwODQKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzYJMHhmZmZlMTA4OAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfNwkweGZmZmUxMDhjCisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl84CTB4ZmZmZTEwOTAKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzkJMHhmZmZlMTA5NAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMTAJMHhmZmZlMTA5OAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMTEJMHhmZmZlMTA5YworI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMTIJMHhmZmZlMTBhMAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMTMJMHhmZmZlMTBhNAorCisjZGVmaW5lIE9NQVA4NTBfTU9ERV8xCQkweGZmZmUxMDEwCisjZGVmaW5lIE9NQVA4NTBfTU9ERV8yCQkweGZmZmUxMDE0CisKKy8qIENTTUkgc3BlY2lhbHM6IGluIHRlcm1zIG9mIGJhc2UgKyBvZmZzZXQgKi8KKyNkZWZpbmUgT01BUDg1MF9NT0RFMl9PRkZTRVQJMHgxNAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT01BUDg1MCB0cmFmZmljIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQODUwX0ZMQVNIX0NGR18wCTB4ZmZmZWNjMTAKKyNkZWZpbmUgT01BUDg1MF9GTEFTSF9BQ0ZHXzAJMHhmZmZlY2M1MAorI2RlZmluZSBPTUFQODUwX0ZMQVNIX0NGR18xCTB4ZmZmZWNjMTQKKyNkZWZpbmUgT01BUDg1MF9GTEFTSF9BQ0ZHXzEJMHhmZmZlY2M1NAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT01BUDg1MCBEU1AgY29udHJvbCByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQODUwX0lDUl9CQVNFCTB4ZmZmYmI4MDAKKyNkZWZpbmUgT01BUDg1MF9EU1BfTV9DVEwJMHhmZmZiYjgwNAorI2RlZmluZSBPTUFQODUwX0RTUF9NTVVfQkFTRQkweGZmZmVkMjAwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPTUFQODUwIFBDQ19VUExEIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9QQ0NfVVBMRF9DVFJMX0JBU0UJKDB4ZmZmZTA5MDApCisjZGVmaW5lIE9NQVA4NTBfUENDX1VQTERfQ1RSTAkJKE9NQVA4NTBfUENDX1VQTERfQ1RSTF9CQVNFICsgMHgwMCkKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVA4NTBfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKaW5kZXggMzdlMmYwZi4uY2U2ZWU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaApAQCAtMTE4LDE4ICsxMTgsNiBAQAogZXh0ZXJuIHZvaWQgcHJldmVudF9pZGxlX3NsZWVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgYWxsb3dfaWRsZV9zbGVlcCh2b2lkKTsKIAotLyoqCi0gKiBjbGtfZGVueV9pZGxlIC0gUHJldmVudHMgdGhlIGNsb2NrIGZyb20gYmVpbmcgaWRsZWQgZHVyaW5nIE1QVSBpZGxlCi0gKiBAY2xrOiBjbG9jayBzaWduYWwgaGFuZGxlCi0gKi8KLXZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwotCi0vKioKLSAqIGNsa19hbGxvd19pZGxlIC0gQ291bnRlcnMgcHJldmlvdXMgY2xrX2RlbnlfaWRsZQotICogQGNsazogY2xvY2sgc2lnbmFsIGhhbmRsZQotICovCi12b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsayk7Ci0KIGV4dGVybiB2b2lkIG9tYXBfcG1faWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfcG1fc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXA3MzBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaAppbmRleCAyODA2YTljLi42OWM5ZTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCkBAIC01MCw5ICs1MCw5IEBACiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiBjbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgcG93ZXJkb21haW4uCi0gKiBDT1JFIHBvd2VyZG9tYWluIGlzIHByb2JhYmx5IHRoZSB3b3JzdCBjYXNlLgorICogQ09SRSBwb3dlcmRvbWFpbiBvbiBPTUFQMyBpcyB0aGUgd29yc3QgY2FzZQogICovCi0jZGVmaW5lIFBXUkRNX01BWF9DTEtETVMJMworI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTQKIAogLyogWFhYIEEgY29tcGxldGVseSBhcmJpdHJhcnkgbnVtYmVyLiBXaGF0IGlzIHJlYXNvbmFibGUgaGVyZT8gKi8KICNkZWZpbmUgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUIDEwMDAwMApAQCAtMTQ1LDYgKzE0NSw3IEBACiAKIGludCBwd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7CiBpbnQgcHdyZG1fcmVhZF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CiBpbnQgcHdyZG1fcmVhZF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogaW50IHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcHJjbS5oCmluZGV4IDU2ZWJhMGYuLjI0YWMzYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcHJjbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcHJjbS5oCkBAIC0yMCwxMCArMjAsMTEgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICi0jZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfT01BUF9QUkNNX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfT01BUF9QUkNNX0gKIAogdTMyIG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKTsKK3ZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZHJjLmgKaW5kZXggYTk4YzZjMy4uYWRjNzM1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZHJjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZHJjLmgKQEAgLTQsMTAgKzQsMTIgQEAKIC8qCiAgKiBPTUFQMi8zIFNEUkMvU01TIHJlZ2lzdGVyIGRlZmluaXRpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogVG9ueSBMaW5kZ3JlbgorICogUGF1bCBXYWxtc2xleQorICogUmljaGFyZCBXb29kcnVmZgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtNjQsMTQgKzY2LDYyIEBACiAgKiBTTVMgcmVnaXN0ZXIgYWNjZXNzCiAgKi8KIAotCi0jZGVmaW5lIE9NQVAyNDJYX1NNU19SRUdBRERSKHJlZykJSU9fQUREUkVTUyhPTUFQMjQyMF9TTVNfQkFTRSArIHJlZykKLSNkZWZpbmUgT01BUDI0M1hfU01TX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDNYX1NNU19CQVNFICsgcmVnKQotI2RlZmluZSBPTUFQMzQzWF9TTVNfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDM0M1hfU01TX0JBU0UgKyByZWcpCisjZGVmaW5lIE9NQVAyNDJYX1NNU19SRUdBRERSKHJlZykJCQkJCVwKKwkJCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFICsgcmVnKQorI2RlZmluZSBPTUFQMjQzWF9TTVNfUkVHQUREUihyZWcpCQkJCQlcCisJCQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDM0M1hfU01TX1JFR0FERFIocmVnKQkJCQkJXAorCQkJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDM0M1hfU01TX0JBU0UgKyByZWcpCiAKIC8qIFNNUyByZWdpc3RlciBvZmZzZXRzIC0gcmVhZC93cml0ZSB3aXRoIHNtc197cmVhZCx3cml0ZX1fcmVnKCkgKi8KIAogI2RlZmluZSBTTVNfU1lTQ09ORklHCQkweDAxMAogLyogUkVWSVNJVDogZmlsbCBpbiBvdGhlciBTTVMgcmVnaXN0ZXJzIGhlcmUgKi8KIAorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAtIFNEUkMgcGFyYW1ldGVycyBmb3IgYSBnaXZlbiBTRFJDIGNsb2NrIHJhdGUKKyAqIEByYXRlOiBTRFJDIGNsb2NrIHJhdGUgKGluIEh6KQorICogQGFjdGltX2N0cmxhOiBWYWx1ZSB0byBwcm9ncmFtIHRvIFNEUkNfQUNUSU1fQ1RSTEEgZm9yIHRoaXMgcmF0ZQorICogQGFjdGltX2N0cmxiOiBWYWx1ZSB0byBwcm9ncmFtIHRvIFNEUkNfQUNUSU1fQ1RSTEIgZm9yIHRoaXMgcmF0ZQorICogQHJmcl9jdHJsOiBWYWx1ZSB0byBwcm9ncmFtIHRvIFNEUkNfUkZSX0NUUkwgZm9yIHRoaXMgcmF0ZQorICogQG1yOiBWYWx1ZSB0byBwcm9ncmFtIHRvIFNEUkNfTVIgZm9yIHRoaXMgcmF0ZQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGEgcHJlLWNvbXB1dGVkIHNldCBvZiByZWdpc3RlciB2YWx1ZXMgZm9yIHRoZQorICogU0RSQyBmb3IgYSBnaXZlbiBTRFJDIGNsb2NrIHJhdGUgYW5kIFNEUkFNIGNoaXAuICBUaGVzZSBhcmUKKyAqIGludGVuZGVkIHRvIGJlIHByZS1jb21wdXRlZCBhbmQgc3BlY2lmaWVkIGluIGFuIGFycmF5IGluIHRoZSBib2FyZC0qLmMKKyAqIGZpbGVzLiAgVGhlIHN0cnVjdHVyZSBpcyBrZXllZCBvZmYgdGhlICdyYXRlJyBmaWVsZC4KKyAqLworc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgeworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwl1MzIgYWN0aW1fY3RybGE7CisJdTMyIGFjdGltX2N0cmxiOworCXUzMiByZnJfY3RybDsKKwl1MzIgbXI7Cit9OworCit2b2lkIF9faW5pdCBvbWFwMl9zZHJjX2luaXQoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNwKTsKK3N0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpvbWFwMl9zZHJjX2dldF9wYXJhbXModW5zaWduZWQgbG9uZyByKTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisKK3N0cnVjdCBtZW1vcnlfdGltaW5ncyB7CisJdTMyIG1fdHlwZTsJCS8qIGRkciA9IDEsIHNkciA9IDAgKi8KKwl1MzIgZGxsX21vZGU7CQkvKiB1c2UgbG9jayBtb2RlID0gMSwgdW5sb2NrIG1vZGUgPSAwICovCisJdTMyIHNsb3dfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIHNsb3cgc3BlZWQgKi8KKwl1MzIgZmFzdF9kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3IgZmFzdCBzcGVlZCAqLworCXUzMiBiYXNlX2NzOwkJLyogYmFzZSBjaGlwIHNlbGVjdCB0byB1c2UgZm9yIGNhbGN1bGF0aW9ucyAqLworfTsKKworZXh0ZXJuIHZvaWQgb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7CisKK3UzMiBvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCh2b2lkKTsKK3UzMiBvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbSh1MzIgbGV2ZWwsIHUzMiBmb3JjZSk7CisKKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfT01BUDIgKi8KKworI2VuZGlmICAvKiBfX0FTU0VNQkxFUl9fICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMDY5MjNmMi4uMTA2MGUzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC05LDEyICs5LDE0IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3ByY20uaD4KKwogI2lmbmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKICNkZWZpbmUgdm9pY2VibHVlX3Jlc2V0KCkJCWRvIHt9IHdoaWxlICgwKQorI2Vsc2UKK2V4dGVybiB2b2lkIHZvaWNlYmx1ZV9yZXNldCh2b2lkKTsKICNlbmRpZgogCi1leHRlcm4gdm9pZCBvbWFwX3ByY21fYXJjaF9yZXNldChjaGFyIG1vZGUpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJY3B1X2RvX2lkbGUoKTsKQEAgLTM4LDcgKzQwLDcgQEAKIAkJb21hcF93cml0ZXcoMSwgQVJNX1JTVENUMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCW9tYXAxX2FyY2hfcmVzZXQobW9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3VzYi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC91c2IuaAppbmRleCBhNTZhNjEwLi42OWYwY2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3VzYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvdXNiLmgKQEAgLTI3LDggKzI3LDE4IEBACiAjZGVmaW5lIFVEQ19CQVNFCQkJT01BUDJfVURDX0JBU0UKICNkZWZpbmUgT01BUF9PSENJX0JBU0UJCQlPTUFQMl9PSENJX0JBU0UKIAorI2lmZGVmIENPTkZJR19VU0JfTVVTQl9TT0MKK2V4dGVybiB2b2lkIHVzYl9tdXNiX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVzYl9tdXNiX2luaXQodm9pZCkKK3sKK30KICNlbmRpZgogCisjZW5kaWYKKwordm9pZCBvbWFwX3VzYl9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCmluZGV4IGI1MmNlMDUuLjBhYmZiYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwpAQCAtMSwxMCArMSw5IEBACiAvKgogICogT01BUCBtYWlsYm94IGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIENvbnRhY3Q6IFRvc2hpaGlybyBLb2JheWFzaGkgPHRvc2hpaGlyby5rb2JheWFzaGlAbm9raWEuY29tPgotICoJCVJlc3RydWN0dXJlZCBieSBIaXJvc2hpIERPWVUgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+CisgKiBDb250YWN0OiBIaXJvc2hpIERPWVUgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTIyLDIxICsyMSw5OCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorCiAjaW5jbHVkZSA8bWFjaC9tYWlsYm94Lmg+Ci0jaW5jbHVkZSAibWFpbGJveC5oIgorCitzdGF0aWMgaW50IGVuYWJsZV9zZXFfYml0OworbW9kdWxlX3BhcmFtKGVuYWJsZV9zZXFfYml0LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3NlcV9iaXQsICJFbmFibGUgc2VxdWVuY2UgYml0IGNoZWNraW5nLiIpOwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbWJveCAqbWJveGVzOwogc3RhdGljIERFRklORV9SV0xPQ0sobWJveGVzX2xvY2spOwogCisvKgorICogTWFpbGJveCBzZXF1ZW5jZSBiaXQgQVBJCisgKi8KKworLyogc2VxX3JjdiBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbnkgdmFsdWUgb3RoZXIgdGhhbgorICogMCBhbmQgMSA8PCAzMSwgdG8gYWxsb3cgZWl0aGVyIHZhbHVlIGZvciB0aGUgZmlyc3QKKyAqIG1lc3NhZ2UuICAqLworc3RhdGljIGlubGluZSB2b2lkIG1ib3hfc2VxX2luaXQoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpZiAoIWVuYWJsZV9zZXFfYml0KQorCQlyZXR1cm47CisKKwkvKiBhbnkgdmFsdWUgb3RoZXIgdGhhbiAwIGFuZCAxIDw8IDMxICovCisJbWJveC0+c2VxX3JjdiA9IDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV90b2dnbGUoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgbWJveF9tc2dfdCAqIG1zZykKK3sKKwlpZiAoIWVuYWJsZV9zZXFfYml0KQorCQlyZXR1cm47CisKKwkvKiBhZGQgc2VxX3NuZCB0byBtc2cgKi8KKwkqbXNnID0gKCptc2cgJiAweDdmZmZmZmZmKSB8IG1ib3gtPnNlcV9zbmQ7CisJLyogZmxpcCBzZXFfc25kICovCisJbWJveC0+c2VxX3NuZCBePSAxIDw8IDMxOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYm94X3NlcV90ZXN0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQoreworCW1ib3hfbXNnX3Qgc2VxOworCisJaWYgKCFlbmFibGVfc2VxX2JpdCkKKwkJcmV0dXJuIDA7CisKKwlzZXEgPSBtc2cgJiAoMSA8PCAzMSk7CisJaWYgKHNlcSA9PSBtYm94LT5zZXFfcmN2KQorCQlyZXR1cm4gLTE7CisJbWJveC0+c2VxX3JjdiA9IHNlcTsKKwlyZXR1cm4gMDsKK30KKworLyogTWFpbGJveCBGSUZPIGhhbmRsZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgbWJveF9tc2dfdCBtYm94X2ZpZm9fcmVhZChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCXJldHVybiBtYm94LT5vcHMtPmZpZm9fcmVhZChtYm94KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X2ZpZm9fd3JpdGUoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgbWJveF9tc2dfdCBtc2cpCit7CisJbWJveC0+b3BzLT5maWZvX3dyaXRlKG1ib3gsIG1zZyk7Cit9CitzdGF0aWMgaW5saW5lIGludCBtYm94X2ZpZm9fZW1wdHkoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlyZXR1cm4gbWJveC0+b3BzLT5maWZvX2VtcHR5KG1ib3gpOworfQorc3RhdGljIGlubGluZSBpbnQgbWJveF9maWZvX2Z1bGwoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlyZXR1cm4gbWJveC0+b3BzLT5maWZvX2Z1bGwobWJveCk7Cit9CisKKy8qIE1haWxib3ggSVJRIGhhbmRsZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKK3sKKwltYm94LT5vcHMtPmVuYWJsZV9pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJbWJveC0+b3BzLT5kaXNhYmxlX2lycShtYm94LCBpcnEpOworfQorc3RhdGljIGlubGluZSB2b2lkIGFja19tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQoreworCWlmIChtYm94LT5vcHMtPmFja19pcnEpCisJCW1ib3gtPm9wcy0+YWNrX2lycShtYm94LCBpcnEpOworfQorc3RhdGljIGlubGluZSBpbnQgaXNfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKK3sKKwlyZXR1cm4gbWJveC0+b3BzLT5pc19pcnEobWJveCwgaXJxKTsKK30KKwogLyogTWFpbGJveCBTZXF1ZW5jZSBCaXQgZnVuY3Rpb24gKi8KIHZvaWQgb21hcF9tYm94X2luaXRfc2VxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCiB7CkBAIC0xMzYsNyArMjEyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKG1ib3gtPnJ4cS0+Y2FsbGJhY2sgPT0gTlVMTCkgewotCQlzeXNmc19ub3RpZnkoJm1ib3gtPmRldi5rb2JqLCBOVUxMLCAibWJveCIpOworCQlzeXNmc19ub3RpZnkoJm1ib3gtPmRldi0+a29iaiwgTlVMTCwgIm1ib3giKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjA0LDcgKzI4MCw3IEBACiAJLyogbm8gbW9yZSBtZXNzYWdlcyBpbiB0aGUgZmlmby4gY2xlYXIgSVJRIHNvdXJjZS4gKi8KIAlhY2tfbWJveF9pcnEobWJveCwgSVJRX1JYKTsKIAllbmFibGVfbWJveF9pcnEobWJveCwgSVJRX1JYKTsKLQlub21lbToKK25vbWVtOgogCXNjaGVkdWxlX3dvcmsoJm1ib3gtPnJ4cS0+d29yayk7CiB9CiAKQEAgLTI4Niw3ICszNjIsNyBAQAogc3RhdGljIENMQVNTX0FUVFIobWJveCwgU19JUlVHTywgbWJveF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyBvbWFwX21ib3hfY2xhc3MgPSB7Ci0JLm5hbWUgPSAib21hcF9tYm94IiwKKwkubmFtZSA9ICJvbWFwLW1haWxib3giLAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX21ib3hfcXVldWUgKm1ib3hfcXVldWVfYWxsb2Moc3RydWN0IG9tYXBfbWJveCAqbWJveCwKQEAgLTMzMywyMSArNDA5LDYgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JbWJveC0+ZGV2LmNsYXNzID0gJm9tYXBfbWJveF9jbGFzczsKLQlkZXZfc2V0X25hbWUoJm1ib3gtPmRldiwgIiVzIiwgbWJveC0+bmFtZSk7Ci0JZGV2X3NldF9kcnZkYXRhKCZtYm94LT5kZXYsIG1ib3gpOwotCi0JcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZtYm94LT5kZXYpOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlnb3RvIGZhaWxfZGV2aWNlX3JlZzsKLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbWJveC0+ZGV2LCAmZGV2X2F0dHJfbWJveCk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZmFpbF9jcmVhdGVfbWJveDsKLQl9Ci0KIAlyZXQgPSByZXF1ZXN0X2lycShtYm94LT5pcnEsIG1ib3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkJCW1ib3gtPm5hbWUsIG1ib3gpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CkBAIC0zNzcsMTAgKzQzOCw2IEBACiAgZmFpbF9hbGxvY190eHE6CiAJZnJlZV9pcnEobWJveC0+aXJxLCBtYm94KTsKICBmYWlsX3JlcXVlc3RfaXJxOgotCWRldmljZV9yZW1vdmVfZmlsZSgmbWJveC0+ZGV2LCAmZGV2X2F0dHJfbWJveCk7Ci0gZmFpbF9jcmVhdGVfbWJveDoKLQlkZXZpY2VfdW5yZWdpc3RlcigmbWJveC0+ZGV2KTsKLSBmYWlsX2RldmljZV9yZWc6CiAJaWYgKHVubGlrZWx5KG1ib3gtPm9wcy0+c2h1dGRvd24pKQogCQltYm94LT5vcHMtPnNodXRkb3duKG1ib3gpOwogCkBAIC0zOTMsOCArNDUwLDYgQEAKIAltYm94X3F1ZXVlX2ZyZWUobWJveC0+cnhxKTsKIAogCWZyZWVfaXJxKG1ib3gtPmlycSwgbWJveCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKLQljbGFzc191bnJlZ2lzdGVyKCZvbWFwX21ib3hfY2xhc3MpOwogCiAJaWYgKHVubGlrZWx5KG1ib3gtPm9wcy0+c2h1dGRvd24pKQogCQltYm94LT5vcHMtPnNodXRkb3duKG1ib3gpOwpAQCAtNDQwLDcgKzQ5NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF9wdXQpOwogCi1pbnQgb21hcF9tYm94X3JlZ2lzdGVyKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCitpbnQgb21hcF9tYm94X3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IG9tYXBfbWJveCAqbWJveCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb21hcF9tYm94ICoqdG1wOwpAQCAtNDUwLDE0ICs1MDUsMzEgQEAKIAlpZiAobWJveC0+bmV4dCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCW1ib3gtPmRldiA9IGRldmljZV9jcmVhdGUoJm9tYXBfbWJveF9jbGFzcywKKwkJCQkgIHBhcmVudCwgMCwgbWJveCwgIiVzIiwgbWJveC0+bmFtZSk7CisJaWYgKElTX0VSUihtYm94LT5kZXYpKQorCQlyZXR1cm4gUFRSX0VSUihtYm94LT5kZXYpOworCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKG1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3N5c2ZzOworCiAJd3JpdGVfbG9jaygmbWJveGVzX2xvY2spOwogCXRtcCA9IGZpbmRfbWJveGVzKG1ib3gtPm5hbWUpOwotCWlmICgqdG1wKQorCWlmICgqdG1wKSB7CiAJCXJldCA9IC1FQlVTWTsKLQllbHNlCi0JCSp0bXAgPSBtYm94OworCQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKKwkJZ290byBlcnJfZmluZDsKKwl9CisJKnRtcCA9IG1ib3g7CiAJd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7CiAKKwlyZXR1cm4gMDsKKworZXJyX2ZpbmQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKG1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOworZXJyX3N5c2ZzOgorCWRldmljZV91bnJlZ2lzdGVyKG1ib3gtPmRldik7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tYm94X3JlZ2lzdGVyKTsKQEAgLTQ3Myw2ICs1NDUsOCBAQAogCQkJKnRtcCA9IG1ib3gtPm5leHQ7CiAJCQltYm94LT5uZXh0ID0gTlVMTDsKIAkJCXdyaXRlX3VubG9jaygmbWJveGVzX2xvY2spOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKG1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOworCQkJZGV2aWNlX3VucmVnaXN0ZXIobWJveC0+ZGV2KTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXRtcCA9ICYoKnRtcCktPm5leHQ7CkBAIC01MDEsNCArNTc1LDYgQEAKIHN1YnN5c19pbml0Y2FsbChvbWFwX21ib3hfY2xhc3NfaW5pdCk7CiBtb2R1bGVfZXhpdChvbWFwX21ib3hfY2xhc3NfZXhpdCk7CiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigib21hcCBtYWlsYm94OiBpbnRlcnJ1cHQgZHJpdmVuIG1lc3NhZ2luZyIpOworTU9EVUxFX0FVVEhPUigiVG9zaGloaXJvIEtvYmF5YXNoaSBhbmQgSGlyb3NoaSBET1lVIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjNjc0MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBNYWlsYm94IGludGVybmFsIGZ1bmN0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgotICogV3JpdHRlbiBieTogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9QTEFUX01BSUxCT1hfSAotI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfTUFJTEJPWF9ICi0KLS8qCi0gKiBNYWlsYm94IHNlcXVlbmNlIGJpdCBBUEkKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCi0jICBkZWZpbmUgTUJPWF9VU0VfU0VRX0JJVAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKLSMgIGRlZmluZSBNQk9YX1VTRV9TRVFfQklUCi0jZW5kaWYKLQotI2lmZGVmIE1CT1hfVVNFX1NFUV9CSVQKLS8qIHNlcV9yY3Ygc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggYW55IHZhbHVlIG90aGVyIHRoYW4KLSAqIDAgYW5kIDEgPDwgMzEsIHRvIGFsbG93IGVpdGhlciB2YWx1ZSBmb3IgdGhlIGZpcnN0Ci0gKiBtZXNzYWdlLiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCi17Ci0JLyogYW55IHZhbHVlIG90aGVyIHRoYW4gMCBhbmQgMSA8PCAzMSAqLwotCW1ib3gtPnNlcV9yY3YgPSAweGZmZmZmZmZmOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfdG9nZ2xlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgKiBtc2cpCi17Ci0JLyogYWRkIHNlcV9zbmQgdG8gbXNnICovCi0JKm1zZyA9ICgqbXNnICYgMHg3ZmZmZmZmZikgfCBtYm94LT5zZXFfc25kOwotCS8qIGZsaXAgc2VxX3NuZCAqLwotCW1ib3gtPnNlcV9zbmQgXj0gMSA8PCAzMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWJveF9zZXFfdGVzdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKLXsKLQltYm94X21zZ190IHNlcSA9IG1zZyAmICgxIDw8IDMxKTsKLQlpZiAoc2VxID09IG1ib3gtPnNlcV9yY3YpCi0JCXJldHVybiAtMTsKLQltYm94LT5zZXFfcmN2ID0gc2VxOwotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfdG9nZ2xlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgKiBtc2cpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCBtYm94X3NlcV90ZXN0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qIE1haWxib3ggRklGTyBoYW5kbGUgZnVuY3Rpb25zICovCi1zdGF0aWMgaW5saW5lIG1ib3hfbXNnX3QgbWJveF9maWZvX3JlYWQoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKLXsKLQlyZXR1cm4gbWJveC0+b3BzLT5maWZvX3JlYWQobWJveCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9maWZvX3dyaXRlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQotewotCW1ib3gtPm9wcy0+Zmlmb193cml0ZShtYm94LCBtc2cpOwotfQotc3RhdGljIGlubGluZSBpbnQgbWJveF9maWZvX2VtcHR5KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCi17Ci0JcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19lbXB0eShtYm94KTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IG1ib3hfZmlmb19mdWxsKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCi17Ci0JcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19mdWxsKG1ib3gpOwotfQotCi0vKiBNYWlsYm94IElSUSBoYW5kbGUgZnVuY3Rpb25zICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCi17Ci0JbWJveC0+b3BzLT5lbmFibGVfaXJxKG1ib3gsIGlycSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQotewotCW1ib3gtPm9wcy0+ZGlzYWJsZV9pcnEobWJveCwgaXJxKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKLXsKLQlpZiAobWJveC0+b3BzLT5hY2tfaXJxKQotCQltYm94LT5vcHMtPmFja19pcnEobWJveCwgaXJxKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCi17Ci0JcmV0dXJuIG1ib3gtPm9wcy0+aXNfaXJxKG1ib3gsIGlycSk7Ci19Ci0KLSNlbmRpZgkJCQkvKiBfX0FSQ0hfQVJNX1BMQVRfTUFJTEJPWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IGU1ODQyZTMuLjI4YjBhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC0yMTQsNyArMjE0LDYgQEAKIGludCBvbWFwX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQlpbnQgaTsKIAlpbnQgZXJyOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewpAQCAtMjIzLDIzICsyMjIsMjMgQEAKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaWYgKG1jYnNwLT5wZGF0YSAmJiBtY2JzcC0+cGRhdGEtPm9wcyAmJiBtY2JzcC0+cGRhdGEtPm9wcy0+cmVxdWVzdCkKLQkJbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QoaWQpOwotCi0JZm9yIChpID0gMDsgaSA8IG1jYnNwLT5udW1fY2xrczsgaSsrKQotCQljbGtfZW5hYmxlKG1jYnNwLT5jbGtzW2ldKTsKLQogCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCWlmICghbWNic3AtPmZyZWUpIHsKIAkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAogCQkJbWNic3AtPmlkKTsKIAkJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCW1jYnNwLT5mcmVlID0gMDsKIAlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCisJaWYgKG1jYnNwLT5wZGF0YSAmJiBtY2JzcC0+cGRhdGEtPm9wcyAmJiBtY2JzcC0+cGRhdGEtPm9wcy0+cmVxdWVzdCkKKwkJbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QoaWQpOworCisJY2xrX2VuYWJsZShtY2JzcC0+aWNsayk7CisJY2xrX2VuYWJsZShtY2JzcC0+ZmNsayk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IHRyYW5zbWl0dGVyLCByZWNlaXZlciBhbmQgc2FtcGxlLXJhdGUgZ2VuZXJhdG9yIGFyZQogCSAqIG5vdCBydW5uaW5nIGJlZm9yZSBhY3RpdmF0aW5nIElSUXMuCkBAIC0yNzgsNyArMjc3LDYgQEAKIHZvaWQgb21hcF9tY2JzcF9mcmVlKHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0JaW50IGk7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CkBAIC0yODksOCArMjg3LDE0IEBACiAJaWYgKG1jYnNwLT5wZGF0YSAmJiBtY2JzcC0+cGRhdGEtPm9wcyAmJiBtY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZSkKIAkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUoaWQpOwogCi0JZm9yIChpID0gbWNic3AtPm51bV9jbGtzIC0gMTsgaSA+PSAwOyBpLS0pCi0JCWNsa19kaXNhYmxlKG1jYnNwLT5jbGtzW2ldKTsKKwljbGtfZGlzYWJsZShtY2JzcC0+ZmNsayk7CisJY2xrX2Rpc2FibGUobWNic3AtPmljbGspOworCisJaWYgKG1jYnNwLT5pb190eXBlID09IE9NQVBfTUNCU1BfSVJRX0lPKSB7CisJCS8qIEZyZWUgSVJRcyAqLworCQlmcmVlX2lycShtY2JzcC0+cnhfaXJxLCAodm9pZCAqKW1jYnNwKTsKKwkJZnJlZV9pcnEobWNic3AtPnR4X2lycSwgKHZvaWQgKiltY2JzcCk7CisJfQogCiAJc3Bpbl9sb2NrKCZtY2JzcC0+bG9jayk7CiAJaWYgKG1jYnNwLT5mcmVlKSB7CkBAIC0zMDIsMTIgKzMwNiw2IEBACiAKIAltY2JzcC0+ZnJlZSA9IDE7CiAJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKLQotCWlmIChtY2JzcC0+aW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgewotCQkvKiBGcmVlIElSUXMgKi8KLQkJZnJlZV9pcnEobWNic3AtPnJ4X2lycSwgKHZvaWQgKiltY2JzcCk7Ci0JCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOwotCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9mcmVlKTsKIApAQCAtODc2LDcgKzg3NCw2IEBACiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJaW50IGlkID0gcGRldi0+aWQgLSAxOwotCWludCBpOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFwZGF0YSkgewpAQCAtODk5LDcgKzg5Niw2IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKIAl9Ci0JbWNic3BfcHRyW2lkXSA9IG1jYnNwOwogCiAJc3Bpbl9sb2NrX2luaXQoJm1jYnNwLT5sb2NrKTsKIAltY2JzcC0+aWQgPSBpZCArIDE7CkBAIC05MjEsMzkgKzkxNywzMiBAQAogCW1jYnNwLT5kbWFfcnhfc3luYyA9IHBkYXRhLT5kbWFfcnhfc3luYzsKIAltY2JzcC0+ZG1hX3R4X3N5bmMgPSBwZGF0YS0+ZG1hX3R4X3N5bmM7CiAKLQlpZiAocGRhdGEtPm51bV9jbGtzKSB7Ci0JCW1jYnNwLT5udW1fY2xrcyA9IHBkYXRhLT5udW1fY2xrczsKLQkJbWNic3AtPmNsa3MgPSBremFsbG9jKG1jYnNwLT5udW1fY2xrcyAqIHNpemVvZihzdHJ1Y3QgY2xrICopLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFtY2JzcC0+Y2xrcykgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgbWNic3AtPm51bV9jbGtzOyBpKyspIHsKLQkJCW1jYnNwLT5jbGtzW2ldID0gY2xrX2dldCgmcGRldi0+ZGV2LCBwZGF0YS0+Y2xrX25hbWVzW2ldKTsKLQkJCWlmIChJU19FUlIobWNic3AtPmNsa3NbaV0pKSB7Ci0JCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCQkiSW52YWxpZCAlcyBjb25maWd1cmF0aW9uIGZvciBNY0JTUCVkLlxuIiwKLQkJCQkJcGRhdGEtPmNsa19uYW1lc1tpXSwgbWNic3AtPmlkKTsKLQkJCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5jbGtzW2ldKTsKLQkJCQlnb3RvIGVycl9jbGs7Ci0JCQl9Ci0JCX0KKwltY2JzcC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIobWNic3AtPmljbGspKSB7CisJCXJldCA9IFBUUl9FUlIobWNic3AtPmljbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGljazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ljbGs7CisJfQogCisJbWNic3AtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKG1jYnNwLT5mY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5mY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBmY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mY2xrOwogCX0KIAogCW1jYnNwLT5wZGF0YSA9IHBkYXRhOwogCW1jYnNwLT5kZXYgPSAmcGRldi0+ZGV2OworCW1jYnNwX3B0cltpZF0gPSBtY2JzcDsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY2JzcCk7CiAJcmV0dXJuIDA7CiAKLWVycl9jbGs6Ci0Jd2hpbGUgKGktLSkKLQkJY2xrX3B1dChtY2JzcC0+Y2xrc1tpXSk7Ci0Ja2ZyZWUobWNic3AtPmNsa3MpOworZXJyX2ZjbGs6CisJY2xrX3B1dChtY2JzcC0+aWNsayk7CitlcnJfaWNsazoKIAlpb3VubWFwKG1jYnNwLT5pb19iYXNlKTsKIGVycl9pb3JlbWFwOgotCW1jYnNwLT5mcmVlID0gMDsKKwlrZnJlZShtY2JzcCk7CiBleGl0OgogCXJldHVybiByZXQ7CiB9CkBAIC05NjEsNyArOTUwLDYgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG9tYXBfbWNic3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlpZiAobWNic3ApIHsKQEAgLTk3MCwxOCArOTU4LDE1IEBACiAJCQkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUpCiAJCQltY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZShtY2JzcC0+aWQpOwogCi0JCWZvciAoaSA9IG1jYnNwLT5udW1fY2xrcyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQljbGtfZGlzYWJsZShtY2JzcC0+Y2xrc1tpXSk7Ci0JCQljbGtfcHV0KG1jYnNwLT5jbGtzW2ldKTsKLQkJfQorCQljbGtfZGlzYWJsZShtY2JzcC0+ZmNsayk7CisJCWNsa19kaXNhYmxlKG1jYnNwLT5pY2xrKTsKKwkJY2xrX3B1dChtY2JzcC0+ZmNsayk7CisJCWNsa19wdXQobWNic3AtPmljbGspOwogCiAJCWlvdW5tYXAobWNic3AtPmlvX2Jhc2UpOwogCi0JCWlmIChtY2JzcC0+bnVtX2Nsa3MpIHsKLQkJCWtmcmVlKG1jYnNwLT5jbGtzKTsKLQkJCW1jYnNwLT5jbGtzID0gTlVMTDsKLQkJCW1jYnNwLT5udW1fY2xrcyA9IDA7Ci0JCX0KKwkJbWNic3AtPmZjbGsgPSBOVUxMOworCQltY2JzcC0+aWNsayA9IE5VTEw7CiAJCW1jYnNwLT5mcmVlID0gMDsKIAkJbWNic3AtPmRldiA9IE5VTEw7CiAJfQpAQCAtMTAwMiw0ICs5ODcsMyBAQAogCS8qIFJlZ2lzdGVyIHRoZSBNY0JTUCBkcml2ZXIgKi8KIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX21jYnNwX2RyaXZlcik7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IGJlN2JjYWYuLmZhNTI5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCW9tYXBfc3JhbV9iYXNlID0gT01BUDFfU1JBTV9WQTsKIAkJb21hcF9zcmFtX3N0YXJ0ID0gT01BUDFfU1JBTV9QQTsKIAotCQlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJaWYgKGNwdV9pc19vbWFwN3h4KCkpCiAJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MzIwMDA7CS8qIDIwMEsgKi8KIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MzAwMDA7CS8qIDE5MksgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCBlMjc4ZGU2Li41MDlmMmVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC03MjksMzAgKzcyOSwxMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBwbGF0Zm9ybV9kYXRhOwotCi1zdGF0aWMgaW50IF9faW5pdAotb21hcF91c2JfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgb21hcF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKIHsKLQljb25zdCBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWc7Ci0KLQljb25maWcgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVVNCLCBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnKTsKLQlpZiAoY29uZmlnID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVU0I6IE5vIGJvYXJkLXNwZWNpZmljICIKLQkJCQkicGxhdGZvcm0gY29uZmlnIGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXBsYXRmb3JtX2RhdGEgPSAqY29uZmlnOwotCiAJaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXAyNHh4KCkpCi0JCW9tYXBfb3RnX2luaXQoJnBsYXRmb3JtX2RhdGEpOworCQlvbWFwX290Z19pbml0KHBkYXRhKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkKLQkJb21hcF8xNTEwX3VzYl9pbml0KCZwbGF0Zm9ybV9kYXRhKTsKLQllbHNlIHsKKwkJb21hcF8xNTEwX3VzYl9pbml0KHBkYXRhKTsKKwllbHNlCiAJCXByaW50ayhLRVJOX0VSUiAiVVNCOiBObyBpbml0IGZvciB5b3VyIGNoaXAgeWV0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOwogfQogCi1zdWJzeXNfaW5pdGNhbGwob21hcF91c2JfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCmluZGV4IDBkMTJjMjEuLjMyZWI5ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCkBAIC0xOSw3ICsxOSw4IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19sb2NrKTsKIHN0YXRpYyBjb25zdCBjaGFyICpncGlvX2xhYmVsW0dQSU9fTUFYXTsgIC8qIG5vbiBudWxsIGZvciBhbGxvY2F0ZWQgR1BJT3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW9fdmFsaWRbQklUU19UT19MT05HUyhHUElPX01BWCldOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb192YWxpZF9pbnB1dFtCSVRTX1RPX0xPTkdTKEdQSU9fTUFYKV07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3ZhbGlkX291dHB1dFtCSVRTX1RPX0xPTkdTKEdQSU9fTUFYKV07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9kaXJlY3Rpb24odW5zaWduZWQgcGluLCBpbnQgaW5wdXQpCiB7CkBAIC01Myw3ICs1NCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZCkpIHsKKwlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpKSB7CiAJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODMsNyArODQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHU7CiAKLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX291dHB1dCkpIHsKIAkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fZnVuY19fLCBwaW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNjEsNyArMTYyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fAorCSAgICAhKHRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZF9pbnB1dCkgfHwKKwkgICAgICB0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KSkpIHsKIAkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fZnVuY19fLCBwaW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xODMsNyArMTg2LDkgQEAKIAogdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgcGluKQogewotCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZCkpIHsKKwlpZiAocGluID49IEdQSU9fTUFYIHx8CisJICAgICEodGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KSB8fAorCSAgICAgIHRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZF9vdXRwdXQpKSkgewogCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CiAJCXJldHVybjsKIAl9CkBAIC0yMDgsMTIgKzIxMywxOCBAQAogCV9fc2V0X2RpcmVjdGlvbihwaW4sIDApOwogfQogCi12b2lkIF9faW5pdCBvcmlvbl9ncGlvX3NldF92YWxpZCh1bnNpZ25lZCBwaW4sIGludCB2YWxpZCkKK3ZvaWQgX19pbml0IG9yaW9uX2dwaW9fc2V0X3ZhbGlkKHVuc2lnbmVkIHBpbiwgaW50IG1vZGUpCiB7Ci0JaWYgKHZhbGlkKQotCQlfX3NldF9iaXQocGluLCBncGlvX3ZhbGlkKTsKKwlpZiAobW9kZSA9PSAxKQorCQltb2RlID0gR1BJT19JTlBVVF9PSyB8IEdQSU9fT1VUUFVUX09LOworCWlmIChtb2RlICYgR1BJT19JTlBVVF9PSykKKwkJX19zZXRfYml0KHBpbiwgZ3Bpb192YWxpZF9pbnB1dCk7CiAJZWxzZQotCQlfX2NsZWFyX2JpdChwaW4sIGdwaW9fdmFsaWQpOworCQlfX2NsZWFyX2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpOworCWlmIChtb2RlICYgR1BJT19PVVRQVVRfT0spCisJCV9fc2V0X2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KTsKKwllbHNlCisJCV9fY2xlYXJfYml0KHBpbiwgZ3Bpb192YWxpZF9vdXRwdXQpOwogfQogCiB2b2lkIG9yaW9uX2dwaW9fc2V0X2JsaW5rKHVuc2lnbmVkIHBpbiwgaW50IGJsaW5rKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oCmluZGV4IGVjNzQzZTguLjMzZjZjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTI1LDkgKzI1LDEzIEBACiAgKiBPcmlvbi1zcGVjaWZpYyBHUElPIEFQSSBleHRlbnNpb25zLgogICovCiB2b2lkIG9yaW9uX2dwaW9fc2V0X3VudXNlZCh1bnNpZ25lZCBwaW4pOwotdm9pZCBvcmlvbl9ncGlvX3NldF92YWxpZCh1bnNpZ25lZCBwaW4sIGludCB2YWxpZCk7CiB2b2lkIG9yaW9uX2dwaW9fc2V0X2JsaW5rKHVuc2lnbmVkIHBpbiwgaW50IGJsaW5rKTsKIAorI2RlZmluZSBHUElPX0JJRElfT0sJCSgxIDw8IDApCisjZGVmaW5lIEdQSU9fSU5QVVRfT0sJCSgxIDw8IDEpCisjZGVmaW5lIEdQSU9fT1VUUFVUX09LCQkoMSA8PCAyKQordm9pZCBvcmlvbl9ncGlvX3NldF92YWxpZCh1bnNpZ25lZCBwaW4sIGludCBtb2RlKTsKKwogLyoKICAqIEdQSU8gaW50ZXJydXB0IGhhbmRsaW5nLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9tdnNkaW8uaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L212c2Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Y2E4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9tdnNkaW8uaApAQCAtMCwwICsxLDIxIEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvbXZzZGlvLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NVlNESU9fSAorI2RlZmluZSBfX01BQ0hfTVZTRElPX0gKKworI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKworc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvICpkcmFtOworCXVuc2lnbmVkIGludCBjbG9jazsKKwlpbnQgZ3Bpb19jYXJkX2RldGVjdDsKKwlpbnQgZ3Bpb193cml0ZV9wcm90ZWN0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzljZjZhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QTEFUX09SSU9ONVhfV0RUX0gKKyNkZWZpbmUgX19QTEFUX09SSU9ONVhfV0RUX0gKKworc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgeworCXUzMgl0Y2xrOwkJLyogbm8gPGxpbnV4L2Nsay5oPiBzdXBwb3J0IHlldCAqLworfTsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtcHhhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1OGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL0tjb25maWcKQEAgLTAsMCArMSwzIEBACitpZiBQTEFUX1BYQQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXB4YS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjJjNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBjb2RlIGNvbW1vbiBhY3Jvc3MgZGlmZmVyZW50IFBYQSBwcm9jZXNzb3IgZmFtaWxpZXMKKyMKKworb2JqLXkJOj0gZG1hLm8KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCitvYmotJChDT05GSUdfUFhBM3h4KQkJKz0gbWZwLm8KK29iai0kKENPTkZJR19BUkNIX01NUCkJCSs9IG1mcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYWVlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYworICoKKyAqICBQWEEgRE1BIHJlZ2lzdHJhdGlvbiBhbmQgSVJRIGRpc3BhdGNoaW5nCisgKgorICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQorICogIENyZWF0ZWQ6CU5vdiAxNSwgMjAwMQorICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCitzdHJ1Y3QgZG1hX2NoYW5uZWwgeworCWNoYXIgKm5hbWU7CisJcHhhX2RtYV9wcmlvIHByaW87CisJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKik7CisJdm9pZCAqZGF0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgKmRtYV9jaGFubmVsczsKK3N0YXRpYyBpbnQgbnVtX2RtYV9jaGFubmVsczsKKworaW50IHB4YV9yZXF1ZXN0X2RtYSAoY2hhciAqbmFtZSwgcHhhX2RtYV9wcmlvIHByaW8sCisJCQl2b2lkICgqaXJxX2hhbmRsZXIpKGludCwgdm9pZCAqKSwKKwkJCXZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgZm91bmQgPSAwOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyAqLworCWlmICghbmFtZSB8fCAhaXJxX2hhbmRsZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZG8geworCQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9kbWFfY2hhbm5lbHM7IGkrKykgeworCQkJaWYgKChkbWFfY2hhbm5lbHNbaV0ucHJpbyA9PSBwcmlvKSAmJgorCQkJICAgICFkbWFfY2hhbm5lbHNbaV0ubmFtZSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBpZiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgYSBoaWVyIHByaW9yaXR5ICovCisJfSB3aGlsZSAoIWZvdW5kICYmIHByaW8tLSk7CisKKwlpZiAoZm91bmQpIHsKKwkJRENTUihpKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKKwkJZG1hX2NoYW5uZWxzW2ldLm5hbWUgPSBuYW1lOworCQlkbWFfY2hhbm5lbHNbaV0uaXJxX2hhbmRsZXIgPSBpcnFfaGFuZGxlcjsKKwkJZG1hX2NoYW5uZWxzW2ldLmRhdGEgPSBkYXRhOworCX0gZWxzZSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBtb3JlIGF2YWlsYWJsZSBETUEgY2hhbm5lbHMgZm9yICVzXG4iLCBuYW1lKTsKKwkJaSA9IC1FTk9ERVY7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBpOworfQorCit2b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lKSB7CisJCXByaW50ayAoS0VSTl9DUklUCisJCQkiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKKwkJCV9fZnVuY19fLCBkbWFfY2gpOworCQlyZXR1cm47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCURDU1IoZG1hX2NoKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKKwlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWludCBpLCBkaW50ID0gRElOVDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZG1hX2NoYW5uZWxzOyBpKyspIHsKKwkJaWYgKGRpbnQgJiAoMSA8PCBpKSkgeworCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7CisJCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6CisJCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCisJCQkJICovCisJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgX19pbml0IHB4YV9pbml0X2RtYShpbnQgaXJxLCBpbnQgbnVtX2NoKQoreworCWludCBpLCByZXQ7CisKKwlkbWFfY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hX2NoYW5uZWwpICogbnVtX2NoLCBHRlBfS0VSTkVMKTsKKwlpZiAoZG1hX2NoYW5uZWxzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZG1hIGNoYW5uZWwgcHJpb3JpdGllcyBvbiBweGEyeHggcHJvY2Vzc29yczoKKwkgKiBjaCAwIC0gMywgIDE2IC0gMTkgIDwtLT4gKDApIERNQV9QUklPX0hJR0gKKwkgKiBjaCA0IC0gNywgIDIwIC0gMjMgIDwtLT4gKDEpIERNQV9QUklPX01FRElVTQorCSAqIGNoIDggLSAxNSwgMjQgLSAzMSAgPC0tPiAoMikgRE1BX1BSSU9fTE9XCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7CisJCURDU1IoaSkgPSAwOworCQlkbWFfY2hhbm5lbHNbaV0ucHJpbyA9IG1pbigoaSAmIDB4ZikgPj4gMiwgRE1BX1BSSU9fTE9XKTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgIkRNQSIsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrIChLRVJOX0NSSVQgIldvdyEgIENhbid0IHJlZ2lzdGVyIElSUSBmb3IgRE1BXG4iKTsKKwkJa2ZyZWUoZG1hX2NoYW5uZWxzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwludW1fZG1hX2NoYW5uZWxzID0gbnVtX2NoOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHB4YV9yZXF1ZXN0X2RtYSk7CitFWFBPUlRfU1lNQk9MKHB4YV9mcmVlX2RtYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4MTliZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2dwaW8uYwpAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMKKyAqCisgKiAgR2VuZXJpYyBQWEEgR1BJTyBoYW5kbGluZworICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCitpbnQgcHhhX2xhc3RfZ3BpbzsKKworc3RydWN0IHB4YV9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKKwl2b2lkIF9faW9tZW0JKnJlZ2Jhc2U7CisJY2hhciBsYWJlbFsxMF07CisKKwl1bnNpZ25lZCBsb25nCWlycV9tYXNrOworCXVuc2lnbmVkIGxvbmcJaXJxX2VkZ2VfcmlzZTsKKwl1bnNpZ25lZCBsb25nCWlycV9lZGdlX2ZhbGw7CisKKyNpZmRlZiBDT05GSUdfUE0KKwl1bnNpZ25lZCBsb25nCXNhdmVkX2dwbHI7CisJdW5zaWduZWQgbG9uZwlzYXZlZF9ncGRyOworCXVuc2lnbmVkIGxvbmcJc2F2ZWRfZ3JlcjsKKwl1bnNpZ25lZCBsb25nCXNhdmVkX2dmZXI7CisjZW5kaWYKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqcHhhX2dwaW9fY2hpcHM7CisKKyNkZWZpbmUgZm9yX2VhY2hfZ3Bpb19jaGlwKGksIGMpCQkJXAorCWZvciAoaSA9IDAsIGMgPSAmcHhhX2dwaW9fY2hpcHNbMF07IGkgPD0gcHhhX2xhc3RfZ3BpbzsgaSArPSAzMiwgYysrKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqZ3Bpb19jaGlwX2Jhc2Uoc3RydWN0IGdwaW9fY2hpcCAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBweGFfZ3Bpb19jaGlwLCBjaGlwKS0+cmVnYmFzZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqZ3Bpb190b19jaGlwKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuICZweGFfZ3Bpb19jaGlwc1tncGlvX3RvX2JhbmsoZ3BpbyldOworfQorCitzdGF0aWMgaW50IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZ3Bpb19jaGlwX2Jhc2UoY2hpcCk7CisJdWludDMyX3QgdmFsdWUsIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJdmFsdWUgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BEUl9PRkZTRVQpOworCWlmIChfX2dwaW9faXNfaW52ZXJ0ZWQoY2hpcC0+YmFzZSArIG9mZnNldCkpCisJCXZhbHVlIHw9IG1hc2s7CisJZWxzZQorCQl2YWx1ZSAmPSB+bWFzazsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGJhc2UgKyBHUERSX09GRlNFVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBncGlvX2NoaXBfYmFzZShjaGlwKTsKKwl1aW50MzJfdCB0bXAsIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJX19yYXdfd3JpdGVsKG1hc2ssIGJhc2UgKyAodmFsdWUgPyBHUFNSX09GRlNFVCA6IEdQQ1JfT0ZGU0VUKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKKwl0bXAgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BEUl9PRkZTRVQpOworCWlmIChfX2dwaW9faXNfaW52ZXJ0ZWQoY2hpcC0+YmFzZSArIG9mZnNldCkpCisJCXRtcCAmPSB+bWFzazsKKwllbHNlCisJCXRtcCB8PSBtYXNrOworCV9fcmF3X3dyaXRlbCh0bXAsIGJhc2UgKyBHUERSX09GRlNFVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGFfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChncGlvX2NoaXBfYmFzZShjaGlwKSArIEdQTFJfT0ZGU0VUKSAmICgxIDw8IG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlfX3Jhd193cml0ZWwoMSA8PCBvZmZzZXQsIGdwaW9fY2hpcF9iYXNlKGNoaXApICsKKwkJCQkodmFsdWUgPyBHUFNSX09GRlNFVCA6IEdQQ1JfT0ZGU0VUKSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YV9pbml0X2dwaW9fY2hpcChpbnQgZ3Bpb19lbmQpCit7CisJaW50IGksIGdwaW8sIG5iYW5rcyA9IGdwaW9fdG9fYmFuayhncGlvX2VuZCkgKyAxOworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjaGlwczsKKworCS8qIHRoaXMgaXMgZWFybHksIHdlIGhhdmUgdG8gdXNlIGJvb3RtZW0gYWxsb2NhdG9yLCBhbmQgd2UgcmVhbGx5CisJICogd2FudCB0aGlzIHRvIGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSBmb3IgZGlmZmVyZW50ICdncGlvX2VuZCcKKwkgKi8KKwljaGlwcyA9IGFsbG9jX2Jvb3RtZW1fbG93KG5iYW5rcyAqIHNpemVvZihzdHJ1Y3QgcHhhX2dwaW9fY2hpcCkpOworCWlmIChjaGlwcyA9PSBOVUxMKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBHUElPIGNoaXBzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDAsIGdwaW8gPSAwOyBpIDwgbmJhbmtzOyBpKyssIGdwaW8gKz0gMzIpIHsKKwkJc3RydWN0IGdwaW9fY2hpcCAqYyA9ICZjaGlwc1tpXS5jaGlwOworCisJCXNwcmludGYoY2hpcHNbaV0ubGFiZWwsICJncGlvLSVkIiwgaSk7CisJCWNoaXBzW2ldLnJlZ2Jhc2UgPSAodm9pZCBfX2lvbWVtICopR1BJT19CQU5LKGkpOworCisJCWMtPmJhc2UgID0gZ3BpbzsKKwkJYy0+bGFiZWwgPSBjaGlwc1tpXS5sYWJlbDsKKworCQljLT5kaXJlY3Rpb25faW5wdXQgID0gcHhhX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCQljLT5kaXJlY3Rpb25fb3V0cHV0ID0gcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwkJYy0+Z2V0ID0gcHhhX2dwaW9fZ2V0OworCQljLT5zZXQgPSBweGFfZ3Bpb19zZXQ7CisKKwkJLyogbnVtYmVyIG9mIEdQSU9zIG9uIGxhc3QgYmFuayBtYXkgYmUgbGVzcyB0aGFuIDMyICovCisJCWMtPm5ncGlvID0gKGdwaW8gKyAzMSA+IGdwaW9fZW5kKSA/IChncGlvX2VuZCAtIGdwaW8gKyAxKSA6IDMyOworCQlncGlvY2hpcF9hZGQoYyk7CisJfQorCXB4YV9ncGlvX2NoaXBzID0gY2hpcHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9faXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CisJaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXVuc2lnbmVkIGxvbmcgZ3BkciwgbWFzayA9IEdQSU9fYml0KGdwaW8pOworCisJYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKworCWlmICh0eXBlID09IElSUV9UWVBFX1BST0JFKSB7CisJCS8qIERvbid0IG1lc3Mgd2l0aCBlbmFibGVkIEdQSU9zIHVzaW5nIHByZWNvbmZpZ3VyZWQgZWRnZXMgb3IKKwkJICogR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBvciB0byBvdXRwdXQgZHVyaW5nIHByb2JlCisJCSAqLworCQlpZiAoKGMtPmlycV9lZGdlX3Jpc2UgfCBjLT5pcnFfZWRnZV9mYWxsKSAmIEdQSU9fYml0KGdwaW8pKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKF9fZ3Bpb19pc19vY2N1cGllZChncGlvKSkKKwkJCXJldHVybiAwOworCisJCXR5cGUgPSBJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORzsKKwl9CisKKwlncGRyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUKTsKKworCWlmIChfX2dwaW9faXNfaW52ZXJ0ZWQoZ3BpbykpCisJCV9fcmF3X3dyaXRlbChncGRyIHwgbWFzaywgIGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoZ3BkciAmIH5tYXNrLCBjLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQpOworCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJYy0+aXJxX2VkZ2VfcmlzZSB8PSBtYXNrOworCWVsc2UKKwkJYy0+aXJxX2VkZ2VfcmlzZSAmPSB+bWFzazsKKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQorCQljLT5pcnFfZWRnZV9mYWxsIHw9IG1hc2s7CisJZWxzZQorCQljLT5pcnFfZWRnZV9mYWxsICY9IH5tYXNrOworCisJX19yYXdfd3JpdGVsKGMtPmlycV9lZGdlX3Jpc2UgJiBjLT5pcnFfbWFzaywgYy0+cmVnYmFzZSArIEdSRVJfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwoYy0+aXJxX2VkZ2VfZmFsbCAmIGMtPmlycV9tYXNrLCBjLT5yZWdiYXNlICsgR0ZFUl9PRkZTRVQpOworCisJcHJfZGVidWcoIiVzOiBJUlElZCAoR1BJTyVkKSAtIGVkZ2UlcyVzXG4iLCBfX2Z1bmNfXywgaXJxLCBncGlvLAorCQkoKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykgID8gIiByaXNpbmciICA6ICIiKSwKKwkJKCh0eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSA/ICIgZmFsbGluZyIgOiAiIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBweGFfZ3Bpb19kZW11eF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYzsKKwlpbnQgbG9vcCwgZ3BpbywgZ3Bpb19iYXNlLCBuOworCXVuc2lnbmVkIGxvbmcgZ2VkcjsKKworCWRvIHsKKwkJbG9vcCA9IDA7CisJCWZvcl9lYWNoX2dwaW9fY2hpcChncGlvLCBjKSB7CisJCQlncGlvX2Jhc2UgPSBjLT5jaGlwLmJhc2U7CisKKwkJCWdlZHIgPSBfX3Jhd19yZWFkbChjLT5yZWdiYXNlICsgR0VEUl9PRkZTRVQpOworCQkJZ2VkciA9IGdlZHIgJiBjLT5pcnFfbWFzazsKKwkJCV9fcmF3X3dyaXRlbChnZWRyLCBjLT5yZWdiYXNlICsgR0VEUl9PRkZTRVQpOworCisJCQluID0gZmluZF9maXJzdF9iaXQoJmdlZHIsIEJJVFNfUEVSX0xPTkcpOworCQkJd2hpbGUgKG4gPCBCSVRTX1BFUl9MT05HKSB7CisJCQkJbG9vcCA9IDE7CisKKwkJCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb190b19pcnEoZ3Bpb19iYXNlICsgbikpOworCQkJCW4gPSBmaW5kX25leHRfYml0KCZnZWRyLCBCSVRTX1BFUl9MT05HLCBuICsgMSk7CisJCQl9CisJCX0KKwl9IHdoaWxlIChsb29wKTsKK30KKworc3RhdGljIHZvaWQgcHhhX2Fja19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjID0gZ3Bpb190b19jaGlwKGdwaW8pOworCisJX19yYXdfd3JpdGVsKEdQSU9fYml0KGdwaW8pLCBjLT5yZWdiYXNlICsgR0VEUl9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBweGFfbWFza19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjID0gZ3Bpb190b19jaGlwKGdwaW8pOworCXVpbnQzMl90IGdyZXIsIGdmZXI7CisKKwljLT5pcnFfbWFzayAmPSB+R1BJT19iaXQoZ3Bpbyk7CisKKwlncmVyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdSRVJfT0ZGU0VUKSAmIH5HUElPX2JpdChncGlvKTsKKwlnZmVyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKSAmIH5HUElPX2JpdChncGlvKTsKKwlfX3Jhd193cml0ZWwoZ3JlciwgYy0+cmVnYmFzZSArIEdSRVJfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwoZ2ZlciwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgcHhhX3VubWFza19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjID0gZ3Bpb190b19jaGlwKGdwaW8pOworCisJYy0+aXJxX21hc2sgfD0gR1BJT19iaXQoZ3Bpbyk7CisJX19yYXdfd3JpdGVsKGMtPmlycV9lZGdlX3Jpc2UgJiBjLT5pcnFfbWFzaywgYy0+cmVnYmFzZSArIEdSRVJfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwoYy0+aXJxX2VkZ2VfZmFsbCAmIGMtPmlycV9tYXNrLCBjLT5yZWdiYXNlICsgR0ZFUl9PRkZTRVQpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9tdXhlZF9ncGlvX2NoaXAgPSB7CisJLm5hbWUJCT0gIkdQSU8iLAorCS5hY2sJCT0gcHhhX2Fja19tdXhlZF9ncGlvLAorCS5tYXNrCQk9IHB4YV9tYXNrX211eGVkX2dwaW8sCisJLnVubWFzawkJPSBweGFfdW5tYXNrX211eGVkX2dwaW8sCisJLnNldF90eXBlCT0gcHhhX2dwaW9faXJxX3R5cGUsCit9OworCit2b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBtdXhfaXJxLCBpbnQgc3RhcnQsIGludCBlbmQsIHNldF93YWtlX3QgZm4pCit7CisJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CisJaW50IGdwaW8sIGlycTsKKworCXB4YV9sYXN0X2dwaW8gPSBlbmQ7CisKKwkvKiBJbml0aWFsaXplIEdQSU8gY2hpcHMgKi8KKwlweGFfaW5pdF9ncGlvX2NoaXAoZW5kKTsKKworCS8qIGNsZWFyIGFsbCBHUElPIGVkZ2UgZGV0ZWN0cyAqLworCWZvcl9lYWNoX2dwaW9fY2hpcChncGlvLCBjKSB7CisJCV9fcmF3X3dyaXRlbCgwLCBjLT5yZWdiYXNlICsgR0ZFUl9PRkZTRVQpOworCQlfX3Jhd193cml0ZWwoMCwgYy0+cmVnYmFzZSArIEdSRVJfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKH4wLGMtPnJlZ2Jhc2UgKyBHRURSX09GRlNFVCk7CisJfQorCisJZm9yIChpcnEgID0gZ3Bpb190b19pcnEoc3RhcnQpOyBpcnEgPD0gZ3Bpb190b19pcnEoZW5kKTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJnB4YV9tdXhlZF9ncGlvX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KKworCS8qIEluc3RhbGwgaGFuZGxlciBmb3IgR1BJTz49MiBlZGdlIGRldGVjdCBpbnRlcnJ1cHRzICovCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIobXV4X2lycSwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7CisJcHhhX211eGVkX2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHB4YV9ncGlvX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjOworCWludCBncGlvOworCisJZm9yX2VhY2hfZ3Bpb19jaGlwKGdwaW8sIGMpIHsKKwkJYy0+c2F2ZWRfZ3BsciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUExSX09GRlNFVCk7CisJCWMtPnNhdmVkX2dwZHIgPSBfX3Jhd19yZWFkbChjLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQpOworCQljLT5zYXZlZF9ncmVyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdSRVJfT0ZGU0VUKTsKKwkJYy0+c2F2ZWRfZ2ZlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHRkVSX09GRlNFVCk7CisKKwkJLyogQ2xlYXIgR1BJTyB0cmFuc2l0aW9uIGRldGVjdCBiaXRzICovCisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBjLT5yZWdiYXNlICsgR0VEUl9PRkZTRVQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGFfZ3Bpb19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYzsKKwlpbnQgZ3BpbzsKKworCWZvcl9lYWNoX2dwaW9fY2hpcChncGlvLCBjKSB7CisJCS8qIHJlc3RvcmUgbGV2ZWwgd2l0aCBzZXQvY2xlYXIgKi8KKwkJX19yYXdfd3JpdGVsKCBjLT5zYXZlZF9ncGxyLCBjLT5yZWdiYXNlICsgR1BTUl9PRkZTRVQpOworCQlfX3Jhd193cml0ZWwofmMtPnNhdmVkX2dwbHIsIGMtPnJlZ2Jhc2UgKyBHUENSX09GRlNFVCk7CisKKwkJX19yYXdfd3JpdGVsKGMtPnNhdmVkX2dyZXIsIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJCV9fcmF3X3dyaXRlbChjLT5zYXZlZF9nZmVyLCBjLT5yZWdiYXNlICsgR0ZFUl9PRkZTRVQpOworCQlfX3Jhd193cml0ZWwoYy0+c2F2ZWRfZ3BkciwgYy0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBweGFfZ3Bpb19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcHhhX2dwaW9fcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RydWN0IHN5c2Rldl9jbGFzcyBweGFfZ3Bpb19zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAiZ3BpbyIsCisJLnN1c3BlbmQJPSBweGFfZ3Bpb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhX2dwaW9fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHhhX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnB4YV9ncGlvX3N5c2NsYXNzKTsKK30KKworY29yZV9pbml0Y2FsbChweGFfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9kbWEuaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2I5MWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L2RtYS5oCkBAIC0wLDAgKzEsODUgQEAKKyNpZm5kZWYgX19QTEFUX0RNQV9ICisjZGVmaW5lIF9fUExBVF9ETUFfSAorCisjZGVmaW5lIERNQUNfUkVHKHgpCSgqKCh2b2xhdGlsZSB1MzIgKikoRE1BQ19SRUdTX1ZJUlQgKyAoeCkpKSkKKworI2RlZmluZSBEQ1NSKG4pCQlETUFDX1JFRygobikgPDwgMikKKyNkZWZpbmUgREFMR04JCURNQUNfUkVHKDB4MDBhMCkgIC8qIERNQSBBbGlnbm1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElOVAkJRE1BQ19SRUcoMHgwMGYwKSAgLyogRE1BIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZSBEREFEUihuKQlETUFDX1JFRygweDAyMDAgKyAoKG4pIDw8IDQpKQorI2RlZmluZSBEU0FEUihuKQlETUFDX1JFRygweDAyMDQgKyAoKG4pIDw8IDQpKQorI2RlZmluZSBEVEFEUihuKQlETUFDX1JFRygweDAyMDggKyAoKG4pIDw8IDQpKQorI2RlZmluZSBEQ01EKG4pCQlETUFDX1JFRygweDAyMGMgKyAoKG4pIDw8IDQpKQorI2RlZmluZSBEUkNNUihuKQlETUFDX1JFRygoKChuKSA8IDY0KSA/IDB4MDEwMCA6IDB4MTEwMCkgKyBcCisJCQkJICgoKG4pICYgMHgzZikgPDwgMikpCisKKyNkZWZpbmUgRENTUl9SVU4JKDEgPDwgMzEpCS8qIFJ1biBCaXQgKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRENTUl9OT0RFU0MJKDEgPDwgMzApCS8qIE5vLURlc2NyaXB0b3IgRmV0Y2ggKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRENTUl9TVE9QSVJRRU4JKDEgPDwgMjkpCS8qIFN0b3AgSW50ZXJydXB0IEVuYWJsZSAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEQ1NSX1JFUVBFTkQJKDEgPDwgOCkJLyogUmVxdWVzdCBQZW5kaW5nIChyZWFkLW9ubHkpICovCisjZGVmaW5lIERDU1JfU1RPUFNUQVRFCSgxIDw8IDMpCS8qIFN0b3AgU3RhdGUgKHJlYWQtb25seSkgKi8KKyNkZWZpbmUgRENTUl9FTkRJTlRSCSgxIDw8IDIpCS8qIEVuZCBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRENTUl9TVEFSVElOVFIJKDEgPDwgMSkJLyogU3RhcnQgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfQlVTRVJSCSgxIDw8IDApCS8qIEJ1cyBFcnJvciBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KKworI2RlZmluZSBEQ1NSX0VPUklSUUVOCSgxIDw8IDI4KSAgICAgICAvKiBFbmQgb2YgUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlIChSL1cpICovCisjZGVmaW5lIERDU1JfRU9SSk1QRU4JKDEgPDwgMjcpICAgICAgIC8qIEp1bXAgdG8gbmV4dCBkZXNjcmlwdG9yIG9uIEVPUiAqLworI2RlZmluZSBEQ1NSX0VPUlNUT1BFTgkoMSA8PCAyNikgICAgICAgLyogU1RPUCBvbiBhbiBFT1IgKi8KKyNkZWZpbmUgRENTUl9TRVRDTVBTVAkoMSA8PCAyNSkgICAgICAgLyogU2V0IERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9DTFJDTVBTVAkoMSA8PCAyNCkgICAgICAgLyogQ2xlYXIgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLworI2RlZmluZSBEQ1NSX0NNUFNUCSgxIDw8IDEwKSAgICAgICAvKiBUaGUgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLworI2RlZmluZSBEQ1NSX0VPUklOVFIJKDEgPDwgOSkgICAgICAgIC8qIFRoZSBlbmQgb2YgUmVjZWl2ZSAqLworCisjZGVmaW5lIERSQ01SX01BUFZMRAkoMSA8PCA3KQkvKiBNYXAgVmFsaWQgKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRFJDTVJfQ0hMTlVNCTB4MWYJCS8qIG1hc2sgZm9yIENoYW5uZWwgTnVtYmVyIChyZWFkIC8gd3JpdGUpICovCisKKyNkZWZpbmUgRERBRFJfREVTQ0FERFIJMHhmZmZmZmZmMAkvKiBBZGRyZXNzIG9mIG5leHQgZGVzY3JpcHRvciAobWFzaykgKi8KKyNkZWZpbmUgRERBRFJfU1RPUAkoMSA8PCAwKQkvKiBTdG9wIChyZWFkIC8gd3JpdGUpICovCisKKyNkZWZpbmUgRENNRF9JTkNTUkNBRERSCSgxIDw8IDMxKQkvKiBTb3VyY2UgQWRkcmVzcyBJbmNyZW1lbnQgU2V0dGluZy4gKi8KKyNkZWZpbmUgRENNRF9JTkNUUkdBRERSCSgxIDw8IDMwKQkvKiBUYXJnZXQgQWRkcmVzcyBJbmNyZW1lbnQgU2V0dGluZy4gKi8KKyNkZWZpbmUgRENNRF9GTE9XU1JDCSgxIDw8IDI5KQkvKiBGbG93IENvbnRyb2wgYnkgdGhlIHNvdXJjZS4gKi8KKyNkZWZpbmUgRENNRF9GTE9XVFJHCSgxIDw8IDI4KQkvKiBGbG93IENvbnRyb2wgYnkgdGhlIHRhcmdldC4gKi8KKyNkZWZpbmUgRENNRF9TVEFSVElSUUVOCSgxIDw8IDIyKQkvKiBTdGFydCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERDTURfRU5ESVJRRU4JKDEgPDwgMjEpCS8qIEVuZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERDTURfRU5ESUFOCSgxIDw8IDE4KQkvKiBEZXZpY2UgRW5kaWFuLW5lc3MuICovCisjZGVmaW5lIERDTURfQlVSU1Q4CSgxIDw8IDE2KQkvKiA4IGJ5dGUgYnVyc3QgKi8KKyNkZWZpbmUgRENNRF9CVVJTVDE2CSgyIDw8IDE2KQkvKiAxNiBieXRlIGJ1cnN0ICovCisjZGVmaW5lIERDTURfQlVSU1QzMgkoMyA8PCAxNikJLyogMzIgYnl0ZSBidXJzdCAqLworI2RlZmluZSBEQ01EX1dJRFRIMQkoMSA8PCAxNCkJLyogMSBieXRlIHdpZHRoICovCisjZGVmaW5lIERDTURfV0lEVEgyCSgyIDw8IDE0KQkvKiAyIGJ5dGUgd2lkdGggKEhhbGZXb3JkKSAqLworI2RlZmluZSBEQ01EX1dJRFRINAkoMyA8PCAxNCkJLyogNCBieXRlIHdpZHRoIChXb3JkKSAqLworI2RlZmluZSBEQ01EX0xFTkdUSAkweDAxZmZmCQkvKiBsZW5ndGggbWFzayAobWF4ID0gOEsgLSAxKSAqLworCisvKgorICogRGVzY3JpcHRvciBzdHJ1Y3R1cmUgZm9yIFBYQSdzIERNQSBlbmdpbmUKKyAqIE5vdGU6IHRoaXMgc3RydWN0dXJlIG11c3QgYWx3YXlzIGJlIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5LgorICovCisKK3R5cGVkZWYgc3RydWN0IHB4YV9kbWFfZGVzYyB7CisJdm9sYXRpbGUgdTMyIGRkYWRyOwkvKiBQb2ludHMgdG8gdGhlIG5leHQgZGVzY3JpcHRvciArIGZsYWdzICovCisJdm9sYXRpbGUgdTMyIGRzYWRyOwkvKiBEU0FEUiB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwl2b2xhdGlsZSB1MzIgZHRhZHI7CS8qIERUQURSIHZhbHVlIGZvciB0aGUgY3VycmVudCB0cmFuc2ZlciAqLworCXZvbGF0aWxlIHUzMiBkY21kOwkvKiBEQ01EIHZhbHVlIGZvciB0aGUgY3VycmVudCB0cmFuc2ZlciAqLworfSBweGFfZG1hX2Rlc2M7CisKK3R5cGVkZWYgZW51bSB7CisJRE1BX1BSSU9fSElHSCA9IDAsCisJRE1BX1BSSU9fTUVESVVNID0gMSwKKwlETUFfUFJJT19MT1cgPSAyCit9IHB4YV9kbWFfcHJpbzsKKworLyoKKyAqIERNQSByZWdpc3RyYXRpb24KKyAqLworCitpbnQgX19pbml0IHB4YV9pbml0X2RtYShpbnQgaXJxLCBpbnQgbnVtX2NoKTsKKworaW50IHB4YV9yZXF1ZXN0X2RtYSAoY2hhciAqbmFtZSwKKwkJCSBweGFfZG1hX3ByaW8gcHJpbywKKwkJCSB2b2lkICgqaXJxX2hhbmRsZXIpKGludCwgdm9pZCAqKSwKKwkJCSB2b2lkICpkYXRhKTsKKwordm9pZCBweGFfZnJlZV9kbWEgKGludCBkbWFfY2gpOworCisjZW5kaWYgLyogX19QTEFUX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDI0OGNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L2dwaW8uaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIF9fUExBVF9HUElPX0gKKyNkZWZpbmUgX19QTEFUX0dQSU9fSAorCisvKgorICogV2UgaGFuZGxlIHRoZSBHUElPcyBieSBiYW5rcywgZWFjaCBiYW5rIGNvdmVycyB1cCB0byAzMiBHUElPcyB3aXRoCisgKiBvbmUgc2V0IG9mIHJlZ2lzdGVycy4gVGhlIHJlZ2lzdGVyIG9mZnNldHMgYXJlIG9yZ2FuaXplZCBiZWxvdzoKKyAqCisgKiAgICAgICAgICAgR1BMUiAgICBHUERSICAgIEdQU1IgICAgR1BDUiAgICBHUkVSICAgIEdGRVIgICAgR0VEUgorICogQkFOSyAwIC0gMHgwMDAwICAweDAwMEMgIDB4MDAxOCAgMHgwMDI0ICAweDAwMzAgIDB4MDAzQyAgMHgwMDQ4CisgKiBCQU5LIDEgLSAweDAwMDQgIDB4MDAxMCAgMHgwMDFDICAweDAwMjggIDB4MDAzNCAgMHgwMDQwICAweDAwNEMKKyAqIEJBTksgMiAtIDB4MDAwOCAgMHgwMDE0ICAweDAwMjAgIDB4MDAyQyAgMHgwMDM4ICAweDAwNDQgIDB4MDA1MAorICoKKyAqIEJBTksgMyAtIDB4MDEwMCAgMHgwMTBDICAweDAxMTggIDB4MDEyNCAgMHgwMTMwICAweDAxM0MgIDB4MDE0OAorICogQkFOSyA0IC0gMHgwMTA0ICAweDAxMTAgIDB4MDExQyAgMHgwMTI4ICAweDAxMzQgIDB4MDE0MCAgMHgwMTRDCisgKiBCQU5LIDUgLSAweDAxMDggIDB4MDExNCAgMHgwMTIwICAweDAxMkMgIDB4MDEzOCAgMHgwMTQ0ICAweDAxNTAKKyAqCisgKiBOT1RFOgorICogICBCQU5LIDMgaXMgb25seSBhdmFpbGFibGUgb24gUFhBMjd4IGFuZCBsYXRlciBwcm9jZXNzb3JzLgorICogICBCQU5LIDQgYW5kIDUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTkzNQorICovCisKKyNkZWZpbmUgR1BJT19CQU5LKG4pCShHUElPX1JFR1NfVklSVCArIEJBTktfT0ZGKG4pKQorCisjZGVmaW5lIEdQTFJfT0ZGU0VUCTB4MDAKKyNkZWZpbmUgR1BEUl9PRkZTRVQJMHgwQworI2RlZmluZSBHUFNSX09GRlNFVAkweDE4CisjZGVmaW5lIEdQQ1JfT0ZGU0VUCTB4MjQKKyNkZWZpbmUgR1JFUl9PRkZTRVQJMHgzMAorI2RlZmluZSBHRkVSX09GRlNFVAkweDNDCisjZGVmaW5lIEdFRFJfT0ZGU0VUCTB4NDgKKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3sKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZ3BpbykgJiYgKGdwaW8gPCBOUl9CVUlMVElOX0dQSU8pKQorCQlyZXR1cm4gR1BMUihncGlvKSAmIEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pICYmIChncGlvIDwgTlJfQlVJTFRJTl9HUElPKSkgeworCQlpZiAodmFsdWUpCisJCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJCWVsc2UKKwkJCUdQQ1IoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKKwl9IGVsc2UKKwkJX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Cit9CisKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAkJX19ncGlvX2NhbnNsZWVwCisKKy8qIE5PVEU6IHNvbWUgUFhBcyBoYXZlIGZld2VyIG9uLWNoaXAgR1BJT3MgKGxpa2UgUFhBMjU1LCB3aXRoIDg1KS4KKyAqIFRob3NlIGNhc2VzIGN1cnJlbnRseSBjYXVzZSBob2xlcyBpbiB0aGUgR1BJTyBudW1iZXIgc3BhY2UsIHRoZQorICogYWN0dWFsIG51bWJlciBvZiB0aGUgbGFzdCBHUElPIGlzIHJlY29yZGVkIGJ5ICdweGFfbGFzdF9ncGlvJy4KKyAqLworZXh0ZXJuIGludCBweGFfbGFzdF9ncGlvOworCit0eXBlZGVmIGludCAoKnNldF93YWtlX3QpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbik7CisKK2V4dGVybiB2b2lkIHB4YV9pbml0X2dwaW8oaW50IG11eF9pcnEsIGludCBzdGFydCwgaW50IGVuZCwgc2V0X3dha2VfdCBmbik7CisjZW5kaWYgLyogX19QTEFUX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDE5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKKyAqCisgKiAgIENvbW1vbiBNdWx0aS1GdW5jdGlvbiBQaW4gRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiAyMDA3LTgtMjE6IGVyaWMgbWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPgorICogICAgICAgICAgICBpbml0aWFsIHZlcnNpb24KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fUExBVF9NRlBfSAorI2RlZmluZSBfX0FTTV9QTEFUX01GUF9ICisKKyNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDEyOCkKKworLyogbGlzdCBvZiBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBNRlAgcGlucyAqLworZW51bSB7CisJTUZQX1BJTl9JTlZBTElEID0gLTEsCisKKwlNRlBfUElOX0dQSU8wID0gMCwKKwlNRlBfUElOX0dQSU8xLAorCU1GUF9QSU5fR1BJTzIsCisJTUZQX1BJTl9HUElPMywKKwlNRlBfUElOX0dQSU80LAorCU1GUF9QSU5fR1BJTzUsCisJTUZQX1BJTl9HUElPNiwKKwlNRlBfUElOX0dQSU83LAorCU1GUF9QSU5fR1BJTzgsCisJTUZQX1BJTl9HUElPOSwKKwlNRlBfUElOX0dQSU8xMCwKKwlNRlBfUElOX0dQSU8xMSwKKwlNRlBfUElOX0dQSU8xMiwKKwlNRlBfUElOX0dQSU8xMywKKwlNRlBfUElOX0dQSU8xNCwKKwlNRlBfUElOX0dQSU8xNSwKKwlNRlBfUElOX0dQSU8xNiwKKwlNRlBfUElOX0dQSU8xNywKKwlNRlBfUElOX0dQSU8xOCwKKwlNRlBfUElOX0dQSU8xOSwKKwlNRlBfUElOX0dQSU8yMCwKKwlNRlBfUElOX0dQSU8yMSwKKwlNRlBfUElOX0dQSU8yMiwKKwlNRlBfUElOX0dQSU8yMywKKwlNRlBfUElOX0dQSU8yNCwKKwlNRlBfUElOX0dQSU8yNSwKKwlNRlBfUElOX0dQSU8yNiwKKwlNRlBfUElOX0dQSU8yNywKKwlNRlBfUElOX0dQSU8yOCwKKwlNRlBfUElOX0dQSU8yOSwKKwlNRlBfUElOX0dQSU8zMCwKKwlNRlBfUElOX0dQSU8zMSwKKwlNRlBfUElOX0dQSU8zMiwKKwlNRlBfUElOX0dQSU8zMywKKwlNRlBfUElOX0dQSU8zNCwKKwlNRlBfUElOX0dQSU8zNSwKKwlNRlBfUElOX0dQSU8zNiwKKwlNRlBfUElOX0dQSU8zNywKKwlNRlBfUElOX0dQSU8zOCwKKwlNRlBfUElOX0dQSU8zOSwKKwlNRlBfUElOX0dQSU80MCwKKwlNRlBfUElOX0dQSU80MSwKKwlNRlBfUElOX0dQSU80MiwKKwlNRlBfUElOX0dQSU80MywKKwlNRlBfUElOX0dQSU80NCwKKwlNRlBfUElOX0dQSU80NSwKKwlNRlBfUElOX0dQSU80NiwKKwlNRlBfUElOX0dQSU80NywKKwlNRlBfUElOX0dQSU80OCwKKwlNRlBfUElOX0dQSU80OSwKKwlNRlBfUElOX0dQSU81MCwKKwlNRlBfUElOX0dQSU81MSwKKwlNRlBfUElOX0dQSU81MiwKKwlNRlBfUElOX0dQSU81MywKKwlNRlBfUElOX0dQSU81NCwKKwlNRlBfUElOX0dQSU81NSwKKwlNRlBfUElOX0dQSU81NiwKKwlNRlBfUElOX0dQSU81NywKKwlNRlBfUElOX0dQSU81OCwKKwlNRlBfUElOX0dQSU81OSwKKwlNRlBfUElOX0dQSU82MCwKKwlNRlBfUElOX0dQSU82MSwKKwlNRlBfUElOX0dQSU82MiwKKwlNRlBfUElOX0dQSU82MywKKwlNRlBfUElOX0dQSU82NCwKKwlNRlBfUElOX0dQSU82NSwKKwlNRlBfUElOX0dQSU82NiwKKwlNRlBfUElOX0dQSU82NywKKwlNRlBfUElOX0dQSU82OCwKKwlNRlBfUElOX0dQSU82OSwKKwlNRlBfUElOX0dQSU83MCwKKwlNRlBfUElOX0dQSU83MSwKKwlNRlBfUElOX0dQSU83MiwKKwlNRlBfUElOX0dQSU83MywKKwlNRlBfUElOX0dQSU83NCwKKwlNRlBfUElOX0dQSU83NSwKKwlNRlBfUElOX0dQSU83NiwKKwlNRlBfUElOX0dQSU83NywKKwlNRlBfUElOX0dQSU83OCwKKwlNRlBfUElOX0dQSU83OSwKKwlNRlBfUElOX0dQSU84MCwKKwlNRlBfUElOX0dQSU84MSwKKwlNRlBfUElOX0dQSU84MiwKKwlNRlBfUElOX0dQSU84MywKKwlNRlBfUElOX0dQSU84NCwKKwlNRlBfUElOX0dQSU84NSwKKwlNRlBfUElOX0dQSU84NiwKKwlNRlBfUElOX0dQSU84NywKKwlNRlBfUElOX0dQSU84OCwKKwlNRlBfUElOX0dQSU84OSwKKwlNRlBfUElOX0dQSU85MCwKKwlNRlBfUElOX0dQSU85MSwKKwlNRlBfUElOX0dQSU85MiwKKwlNRlBfUElOX0dQSU85MywKKwlNRlBfUElOX0dQSU85NCwKKwlNRlBfUElOX0dQSU85NSwKKwlNRlBfUElOX0dQSU85NiwKKwlNRlBfUElOX0dQSU85NywKKwlNRlBfUElOX0dQSU85OCwKKwlNRlBfUElOX0dQSU85OSwKKwlNRlBfUElOX0dQSU8xMDAsCisJTUZQX1BJTl9HUElPMTAxLAorCU1GUF9QSU5fR1BJTzEwMiwKKwlNRlBfUElOX0dQSU8xMDMsCisJTUZQX1BJTl9HUElPMTA0LAorCU1GUF9QSU5fR1BJTzEwNSwKKwlNRlBfUElOX0dQSU8xMDYsCisJTUZQX1BJTl9HUElPMTA3LAorCU1GUF9QSU5fR1BJTzEwOCwKKwlNRlBfUElOX0dQSU8xMDksCisJTUZQX1BJTl9HUElPMTEwLAorCU1GUF9QSU5fR1BJTzExMSwKKwlNRlBfUElOX0dQSU8xMTIsCisJTUZQX1BJTl9HUElPMTEzLAorCU1GUF9QSU5fR1BJTzExNCwKKwlNRlBfUElOX0dQSU8xMTUsCisJTUZQX1BJTl9HUElPMTE2LAorCU1GUF9QSU5fR1BJTzExNywKKwlNRlBfUElOX0dQSU8xMTgsCisJTUZQX1BJTl9HUElPMTE5LAorCU1GUF9QSU5fR1BJTzEyMCwKKwlNRlBfUElOX0dQSU8xMjEsCisJTUZQX1BJTl9HUElPMTIyLAorCU1GUF9QSU5fR1BJTzEyMywKKwlNRlBfUElOX0dQSU8xMjQsCisJTUZQX1BJTl9HUElPMTI1LAorCU1GUF9QSU5fR1BJTzEyNiwKKwlNRlBfUElOX0dQSU8xMjcsCisJTUZQX1BJTl9HUElPMF8yLAorCU1GUF9QSU5fR1BJTzFfMiwKKwlNRlBfUElOX0dQSU8yXzIsCisJTUZQX1BJTl9HUElPM18yLAorCU1GUF9QSU5fR1BJTzRfMiwKKwlNRlBfUElOX0dQSU81XzIsCisJTUZQX1BJTl9HUElPNl8yLAorCU1GUF9QSU5fR1BJTzdfMiwKKwlNRlBfUElOX0dQSU84XzIsCisJTUZQX1BJTl9HUElPOV8yLAorCU1GUF9QSU5fR1BJTzEwXzIsCisJTUZQX1BJTl9HUElPMTFfMiwKKwlNRlBfUElOX0dQSU8xMl8yLAorCU1GUF9QSU5fR1BJTzEzXzIsCisJTUZQX1BJTl9HUElPMTRfMiwKKwlNRlBfUElOX0dQSU8xNV8yLAorCU1GUF9QSU5fR1BJTzE2XzIsCisJTUZQX1BJTl9HUElPMTdfMiwKKworCU1GUF9QSU5fVUxQSV9TVFAsCisJTUZQX1BJTl9VTFBJX05YVCwKKwlNRlBfUElOX1VMUElfRElSLAorCisJTUZQX1BJTl9uWENWUkVOLAorCU1GUF9QSU5fREZfQ0xFX25PRSwKKwlNRlBfUElOX0RGX25BRFYxX0FMRSwKKwlNRlBfUElOX0RGX1NDTEtfRSwKKwlNRlBfUElOX0RGX1NDTEtfUywKKwlNRlBfUElOX25CRTAsCisJTUZQX1BJTl9uQkUxLAorCU1GUF9QSU5fREZfbkFEVjJfQUxFLAorCU1GUF9QSU5fREZfSU5UX1JuQiwKKwlNRlBfUElOX0RGX25DUzAsCisJTUZQX1BJTl9ERl9uQ1MxLAorCU1GUF9QSU5fbkxVQSwKKwlNRlBfUElOX25MTEEsCisJTUZQX1BJTl9ERl9uV0UsCisJTUZQX1BJTl9ERl9BTEVfbldFLAorCU1GUF9QSU5fREZfblJFX25PRSwKKwlNRlBfUElOX0RGX0FERFIwLAorCU1GUF9QSU5fREZfQUREUjEsCisJTUZQX1BJTl9ERl9BRERSMiwKKwlNRlBfUElOX0RGX0FERFIzLAorCU1GUF9QSU5fREZfSU8wLAorCU1GUF9QSU5fREZfSU8xLAorCU1GUF9QSU5fREZfSU8yLAorCU1GUF9QSU5fREZfSU8zLAorCU1GUF9QSU5fREZfSU80LAorCU1GUF9QSU5fREZfSU81LAorCU1GUF9QSU5fREZfSU82LAorCU1GUF9QSU5fREZfSU83LAorCU1GUF9QSU5fREZfSU84LAorCU1GUF9QSU5fREZfSU85LAorCU1GUF9QSU5fREZfSU8xMCwKKwlNRlBfUElOX0RGX0lPMTEsCisJTUZQX1BJTl9ERl9JTzEyLAorCU1GUF9QSU5fREZfSU8xMywKKwlNRlBfUElOX0RGX0lPMTQsCisJTUZQX1BJTl9ERl9JTzE1LAorCU1GUF9QSU5fREZfbkNTMF9TTV9uQ1MyLAorCU1GUF9QSU5fREZfbkNTMV9TTV9uQ1MzLAorCU1GUF9QSU5fU01fbkNTMCwKKwlNRlBfUElOX1NNX25DUzEsCisJTUZQX1BJTl9ERl9XRW4sCisJTUZQX1BJTl9ERl9SRW4sCisJTUZQX1BJTl9ERl9DTEVfU01fT0VuLAorCU1GUF9QSU5fREZfQUxFX1NNX1dFbiwKKwlNRlBfUElOX0RGX1JEWTAsCisJTUZQX1BJTl9ERl9SRFkxLAorCisJTUZQX1BJTl9TTV9TQ0xLLAorCU1GUF9QSU5fU01fQkUwLAorCU1GUF9QSU5fU01fQkUxLAorCU1GUF9QSU5fU01fQURWLAorCU1GUF9QSU5fU01fQURWTVVYLAorCU1GUF9QSU5fU01fUkRZLAorCisJTUZQX1BJTl9NTUMxX0RBVDcsCisJTUZQX1BJTl9NTUMxX0RBVDYsCisJTUZQX1BJTl9NTUMxX0RBVDUsCisJTUZQX1BJTl9NTUMxX0RBVDQsCisJTUZQX1BJTl9NTUMxX0RBVDMsCisJTUZQX1BJTl9NTUMxX0RBVDIsCisJTUZQX1BJTl9NTUMxX0RBVDEsCisJTUZQX1BJTl9NTUMxX0RBVDAsCisJTUZQX1BJTl9NTUMxX0NNRCwKKwlNRlBfUElOX01NQzFfQ0xLLAorCU1GUF9QSU5fTU1DMV9DRCwKKwlNRlBfUElOX01NQzFfV1AsCisKKwkvKiBhZGRpdGlvbmFsIHBpbnMgb24gUFhBOTMwICovCisJTUZQX1BJTl9HU0lNX1VJTywKKwlNRlBfUElOX0dTSU1fVUNMSywKKwlNRlBfUElOX0dTSU1fVURFVCwKKwlNRlBfUElOX0dTSU1fblVSU1QsCisJTUZQX1BJTl9QTUlDX0lOVCwKKwlNRlBfUElOX1JEWSwKKworCU1GUF9QSU5fTUFYLAorfTsKKworLyoKKyAqIGEgcG9zc2libGUgTUZQIGNvbmZpZ3VyYXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgaW50ZWdlcgorICoKKyAqIGJpdCAgMC4uIDkgLSBNRlAgUGluIE51bWJlciAoMTAyNCBQaW5zIE1heGltdW0pCisgKiBiaXQgMTAuLjEyIC0gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdGlvbgorICogYml0IDEzLi4xNSAtIERyaXZlIFN0cmVuZ3RoCisgKiBiaXQgMTYuLjE4IC0gTG93IFBvd2VyIE1vZGUgU3RhdGUKKyAqIGJpdCAxOS4uMjAgLSBMb3cgUG93ZXIgTW9kZSBFZGdlIERldGVjdGlvbgorICogYml0IDIxLi4yMiAtIFJ1biBNb2RlIFB1bGwgU3RhdGUKKyAqCisgKiB0byBmYWNpbGl0YXRlIHRoZSBkZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgcHJvdmlkZWQKKyAqCisgKiBNRlBfQ0ZHX0RFRkFVTFQgLSBkZWZhdWx0IE1GUCBjb25maWd1cmF0aW9uIHZhbHVlLCB3aXRoCisgKiAJCSAgYWx0ZXJuYXRlIGZ1bmN0aW9uID0gMCwKKyAqIAkJICBkcml2ZSBzdHJlbmd0aCA9IGZhc3QgM21BIChNRlBfRFMwM1gpCisgKiAJCSAgbG93IHBvd2VyIG1vZGUgPSBkZWZhdWx0CisgKiAJCSAgZWRnZSBkZXRlY3Rpb24gPSBub25lCisgKgorICogTUZQX0NGRwktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbgorICogTUZQX0NGR19EUlYJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kCisgKiAJCSAgcGluIGRyaXZlIHN0cmVuZ3RoCisgKiBNRlBfQ0ZHX0xQTQktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKKyAqIAkJICBsb3cgcG93ZXIgbW9kZQorICogTUZQX0NGR19YCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uLAorICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aCBhbmQgbG93IHBvd2VyIG1vZGUKKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWZwX2NmZ190OworCisjZGVmaW5lIE1GUF9QSU4oeCkJCSgoeCkgJiAweDNmZikKKworI2RlZmluZSBNRlBfQUYwCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGMQkJCSgweDEgPDwgMTApCisjZGVmaW5lIE1GUF9BRjIJCQkoMHgyIDw8IDEwKQorI2RlZmluZSBNRlBfQUYzCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGNAkJCSgweDQgPDwgMTApCisjZGVmaW5lIE1GUF9BRjUJCQkoMHg1IDw8IDEwKQorI2RlZmluZSBNRlBfQUY2CQkJKDB4NiA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGNwkJCSgweDcgPDwgMTApCisjZGVmaW5lIE1GUF9BRl9NQVNLCQkoMHg3IDw8IDEwKQorI2RlZmluZSBNRlBfQUYoeCkJCSgoKHgpID4+IDEwKSAmIDB4NykKKworI2RlZmluZSBNRlBfRFMwMVgJCSgweDAgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzAyWAkJKDB4MSA8PCAxMykKKyNkZWZpbmUgTUZQX0RTMDNYCQkoMHgyIDw8IDEzKQorI2RlZmluZSBNRlBfRFMwNFgJCSgweDMgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzA2WAkJKDB4NCA8PCAxMykKKyNkZWZpbmUgTUZQX0RTMDhYCQkoMHg1IDw8IDEzKQorI2RlZmluZSBNRlBfRFMxMFgJCSgweDYgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzEzWAkJKDB4NyA8PCAxMykKKyNkZWZpbmUgTUZQX0RTX01BU0sJCSgweDcgPDwgMTMpCisjZGVmaW5lIE1GUF9EUyh4KQkJKCgoeCkgPj4gMTMpICYgMHg3KQorCisjZGVmaW5lIE1GUF9MUE1fREVGQVVMVAkJKDB4MCA8PCAxNikKKyNkZWZpbmUgTUZQX0xQTV9EUklWRV9MT1cJKDB4MSA8PCAxNikKKyNkZWZpbmUgTUZQX0xQTV9EUklWRV9ISUdICSgweDIgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fUFVMTF9MT1cJKDB4MyA8PCAxNikKKyNkZWZpbmUgTUZQX0xQTV9QVUxMX0hJR0gJKDB4NCA8PCAxNikKKyNkZWZpbmUgTUZQX0xQTV9GTE9BVAkJKDB4NSA8PCAxNikKKyNkZWZpbmUgTUZQX0xQTV9JTlBVVAkJKDB4NiA8PCAxNikKKyNkZWZpbmUgTUZQX0xQTV9TVEFURV9NQVNLCSgweDcgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fU1RBVEUoeCkJKCgoeCkgPj4gMTYpICYgMHg3KQorCisjZGVmaW5lIE1GUF9MUE1fRURHRV9OT05FCSgweDAgPDwgMTkpCisjZGVmaW5lIE1GUF9MUE1fRURHRV9SSVNFCSgweDEgPDwgMTkpCisjZGVmaW5lIE1GUF9MUE1fRURHRV9GQUxMCSgweDIgPDwgMTkpCisjZGVmaW5lIE1GUF9MUE1fRURHRV9CT1RICSgweDMgPDwgMTkpCisjZGVmaW5lIE1GUF9MUE1fRURHRV9NQVNLCSgweDMgPDwgMTkpCisjZGVmaW5lIE1GUF9MUE1fRURHRSh4KQkJKCgoeCkgPj4gMTkpICYgMHgzKQorCisjZGVmaW5lIE1GUF9QVUxMX05PTkUJCSgweDAgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX0xPVwkJKDB4MSA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTExfSElHSAkJKDB4MiA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTExfQk9USAkJKDB4MyA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTExfTUFTSwkJKDB4MyA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTEwoeCkJCSgoKHgpID4+IDIxKSAmIDB4MykKKworI2RlZmluZSBNRlBfQ0ZHX0RFRkFVTFQJCShNRlBfQUYwIHwgTUZQX0RTMDNYIHwgTUZQX0xQTV9ERUZBVUxUIHxcCisJCQkJIE1GUF9MUE1fRURHRV9OT05FIHwgTUZQX1BVTExfTk9ORSkKKworI2RlZmluZSBNRlBfQ0ZHKHBpbiwgYWYpCQlcCisJKChNRlBfQ0ZHX0RFRkFVTFQgJiB+TUZQX0FGX01BU0spIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYpKQorCisjZGVmaW5lIE1GUF9DRkdfRFJWKHBpbiwgYWYsIGRydikJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9EU19NQVNLKSkgfFwKKwkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF8jI2RydikpCisKKyNkZWZpbmUgTUZQX0NGR19MUE0ocGluLCBhZiwgbHBtKQlcCisJKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0xQTV9TVEFURV9NQVNLKSkgfFwKKwkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF9MUE1fIyNscG0pKQorCisjZGVmaW5lIE1GUF9DRkdfWChwaW4sIGFmLCBkcnYsIGxwbSkJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9EU19NQVNLIHwgTUZQX0xQTV9TVEFURV9NQVNLKSkgfFwKKwkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF8jI2RydiB8IE1GUF9MUE1fIyNscG0pKQorCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01NUCkKKy8qCisgKiBlYWNoIE1GUCBwaW4gd2lsbCBoYXZlIGEgTUZQUiByZWdpc3Rlciwgc2luY2UgdGhlIG9mZnNldCBvZiB0aGUKKyAqIHJlZ2lzdGVyIHZhcmllcyBiZXR3ZWVuIHByb2Nlc3NvcnMsIHRoZSBwcm9jZXNzb3Igc3BlY2lmaWMgY29kZQorICogc2hvdWxkIGluaXRpYWxpemUgdGhlIHBpbiBvZmZzZXRzIGJ5IG1mcF9pbml0KCkKKyAqCisgKiBtZnBfaW5pdF9iYXNlKCkgLSBhY2NlcHRzIGEgdmlydHVhbCBiYXNlIGZvciBhbGwgTUZQUiByZWdpc3RlcnMgYW5kCisgKiBpbml0aWFsaXplIHRoZSBNRlAgdGFibGUgdG8gYSBkZWZhdWx0IHN0YXRlCisgKgorICogbWZwX2luaXRfYWRkcigpIC0gYWNjZXB0cyBhIHRhYmxlIG9mICJtZnBfYWRkcl9tYXAiIHN0cnVjdHVyZSwgd2hpY2gKKyAqIHJlcHJlc2VudHMgYSByYW5nZSBvZiBNRlAgcGlucyBmcm9tICJzdGFydCIgdG8gImVuZCIsIHdpdGggdGhlIG9mZnNldAorICogYmVnaW5pbmcgYXQgIm9mZnNldCIsIHRvIGRlZmluZSBhIHNpbmdsZSBwaW4sIGxldCAiZW5kIiA9IC0xLgorICoKKyAqIHVzZQorICoKKyAqIE1GUF9BRERSX1goKSB0byBkZWZpbmUgYSByYW5nZSBvZiBwaW5zCisgKiBNRlBfQUREUigpICAgdG8gZGVmaW5lIGEgc2luZ2xlIHBpbgorICogTUZQX0FERFJfRU5EIHRvIHNpZ25hbCB0aGUgZW5kIG9mIHBpbiBvZmZzZXQgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IG1mcF9hZGRyX21hcCB7CisJdW5zaWduZWQgaW50CXN0YXJ0OworCXVuc2lnbmVkIGludAllbmQ7CisJdW5zaWduZWQgbG9uZwlvZmZzZXQ7Cit9OworCisjZGVmaW5lIE1GUF9BRERSX1goc3RhcnQsIGVuZCwgb2Zmc2V0KSBcCisJeyBNRlBfUElOXyMjc3RhcnQsIE1GUF9QSU5fIyNlbmQsIG9mZnNldCB9CisKKyNkZWZpbmUgTUZQX0FERFIocGluLCBvZmZzZXQpIFwKKwl7IE1GUF9QSU5fIyNwaW4sIC0xLCBvZmZzZXQgfQorCisjZGVmaW5lIE1GUF9BRERSX0VORAl7IE1GUF9QSU5fSU5WQUxJRCwgMCB9CisKK3ZvaWQgX19pbml0IG1mcF9pbml0X2Jhc2UodW5zaWduZWQgbG9uZyBtZnByX2Jhc2UpOwordm9pZCBfX2luaXQgbWZwX2luaXRfYWRkcihzdHJ1Y3QgbWZwX2FkZHJfbWFwICptYXApOworCisvKgorICogbWZwX3tyZWFkLCB3cml0ZX0oKQktIGZvciBkaXJlY3QgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIE1GUFIgcmVnaXN0ZXIKKyAqIG1mcF9jb25maWcoKQkJLSBmb3IgY29uZmlndXJpbmcgYSBncm91cCBvZiBNRlBSIHJlZ2lzdGVycworICogbWZwX2NvbmZpZ19scG0oKQktIGNvbmZpZ3VyaW5nIGFsbCBsb3cgcG93ZXIgTUZQUiByZWdpc3RlcnMgZm9yIHN1c3BlbmQKKyAqIG1mcF9jb25maWdfcnVuKCkJLSBjb25maWd1cmluZyBhbGwgcnVuIHRpbWUgIE1GUFIgcmVnaXN0ZXJzIGFmdGVyIHJlc3VtZQorICovCit1bnNpZ25lZCBsb25nIG1mcF9yZWFkKGludCBtZnApOwordm9pZCBtZnBfd3JpdGUoaW50IG1mcCwgdW5zaWduZWQgbG9uZyBtZnByX3ZhbCk7Cit2b2lkIG1mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pOwordm9pZCBtZnBfY29uZmlnX3J1bih2b2lkKTsKK3ZvaWQgbWZwX2NvbmZpZ19scG0odm9pZCk7CisjZW5kaWYgLyogQ09ORklHX1BYQTN4eCB8fCBDT05GSUdfQVJDSF9NTVAgKi8KKworI2VuZGlmIC8qIF9fQVNNX1BMQVRfTUZQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcxNmM2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKKyAqCisgKiAgIE11bHRpLUZ1bmN0aW9uIFBpbiBTdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IE1hcnZlbGwgSW50ZXJuYXRpb24gTHRkLgorICoKKyAqIDIwMDctMDgtMjE6IGVyaWMgbWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPgorICogICAgICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxwbGF0L21mcC5oPgorCisjZGVmaW5lIE1GUFJfU0laRQkoUEFHRV9TSVpFKQorCisvKiBNRlBSIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNRlBSX1BVTExfU0VMCQkoMHgxIDw8IDE1KQorI2RlZmluZSBNRlBSX1BVTExVUF9FTgkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgTUZQUl9QVUxMRE9XTl9FTgkoMHgxIDw8IDEzKQorI2RlZmluZSBNRlBSX1NMRUVQX1NFTAkJKDB4MSA8PCA5KQorI2RlZmluZSBNRlBSX1NMRUVQX09FX04JCSgweDEgPDwgNykKKyNkZWZpbmUgTUZQUl9FREdFX0NMRUFSCQkoMHgxIDw8IDYpCisjZGVmaW5lIE1GUFJfRURHRV9GQUxMX0VOCSgweDEgPDwgNSkKKyNkZWZpbmUgTUZQUl9FREdFX1JJU0VfRU4JKDB4MSA8PCA0KQorCisjZGVmaW5lIE1GUFJfU0xFRVBfREFUQSh4KQkoKHgpIDw8IDgpCisjZGVmaW5lIE1GUFJfRFJJVkUoeCkJCSgoKHgpICYgMHg3KSA8PCAxMCkKKyNkZWZpbmUgTUZQUl9BRl9TRUwoeCkJCSgoKHgpICYgMHg3KSA8PCAwKQorCisjZGVmaW5lIE1GUFJfRURHRV9OT05FCQkoMCkKKyNkZWZpbmUgTUZQUl9FREdFX1JJU0UJCShNRlBSX0VER0VfUklTRV9FTikKKyNkZWZpbmUgTUZQUl9FREdFX0ZBTEwJCShNRlBSX0VER0VfRkFMTF9FTikKKyNkZWZpbmUgTUZQUl9FREdFX0JPVEgJCShNRlBSX0VER0VfUklTRSB8IE1GUFJfRURHRV9GQUxMKQorCisvKgorICogVGFibGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBsb3cgcG93ZXIgbW9kZXMgb3V0cHV0cywgd2l0aCBhY3R1YWwgc2V0dGluZ3MKKyAqIHVzZWQgaW4gcGFyZW50aGVzZXMgZm9yIGRvbid0LWNhcmUgdmFsdWVzLiBFeGNlcHQgZm9yIHRoZSBmbG9hdCBvdXRwdXQsCisgKiB0aGUgY29uZmlndXJlZCBkcml2ZW4gYW5kIHB1bGxlZCBsZXZlbHMgbWF0Y2gsIHNvIGlmIHRoZXJlIGlzIGEgbmVlZCBmb3IKKyAqIG5vbi1MUE0gcHVsbGVkIG91dHB1dCwgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBjb3VsZCBwcm9iYWJseSBiZSB1c2VkLgorICoKKyAqIE91dHB1dCB2YWx1ZSAgc2xlZXBfb2VfbiAgc2xlZXBfZGF0YSAgcHVsbHVwX2VuICBwdWxsZG93bl9lbiAgcHVsbF9zZWwKKyAqICAgICAgICAgICAgICAgICAoYml0IDcpICAgIChiaXQgOCkgICAgKGJpdCAxNCkgICAgIChiaXQgMTMpICAgKGJpdCAxNSkKKyAqCisgKiBJbnB1dCAgICAgICAgICAgIDAgICAgICAgICAgWCgwKSAgICAgICAgWCgwKSAgICAgICAgWCgwKSAgICAgICAwCisgKiBEcml2ZSAwICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAgMCAgICAgICAgICAgWCgxKSAgICAgICAwCisgKiBEcml2ZSAxICAgICAgICAgIDAgICAgICAgICAgMSAgICAgICAgICAgWCgxKSAgICAgICAgMAkgIDAKKyAqIFB1bGwgaGkgKDEpICAgICAgMSAgICAgICAgICBYKDEpICAgICAgICAxICAgICAgICAgICAwCSAgMAorICogUHVsbCBsbyAoMCkgICAgICAxICAgICAgICAgIFgoMCkgICAgICAgIDAgICAgICAgICAgIDEJICAwCisgKiBaIChmbG9hdCkgICAgICAgIDEgICAgICAgICAgWCgwKSAgICAgICAgMCAgICAgICAgICAgMAkgIDAKKyAqLworI2RlZmluZSBNRlBSX0xQTV9JTlBVVAkJKDApCisjZGVmaW5lIE1GUFJfTFBNX0RSSVZFX0xPVwkoTUZQUl9TTEVFUF9EQVRBKDApIHwgTUZQUl9QVUxMRE9XTl9FTikKKyNkZWZpbmUgTUZQUl9MUE1fRFJJVkVfSElHSCAgICAJKE1GUFJfU0xFRVBfREFUQSgxKSB8IE1GUFJfUFVMTFVQX0VOKQorI2RlZmluZSBNRlBSX0xQTV9QVUxMX0xPVyAgICAgIAkoTUZQUl9MUE1fRFJJVkVfTE9XICB8IE1GUFJfU0xFRVBfT0VfTikKKyNkZWZpbmUgTUZQUl9MUE1fUFVMTF9ISUdIICAgICAJKE1GUFJfTFBNX0RSSVZFX0hJR0ggfCBNRlBSX1NMRUVQX09FX04pCisjZGVmaW5lIE1GUFJfTFBNX0ZMT0FUICAgICAgICAgCShNRlBSX1NMRUVQX09FX04pCisjZGVmaW5lIE1GUFJfTFBNX01BU0sJCSgweGUwODApCisKKy8qCisgKiBUaGUgcHVsbHVwIGFuZCBwdWxsZG93biBzdGF0ZSBvZiB0aGUgTUZQIHBpbiBhdCBydW4gbW9kZSBpcyBieSBkZWZhdWx0CisgKiBkZXRlcm1pbmVkIGJ5IHRoZSBzZWxlY3RlZCBhbHRlcm5hdGUgZnVuY3Rpb24uIEluIGNhc2UgdGhhdCBzb21lIGJ1Z2d5CisgKiBkZXZpY2VzIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGJlaGF2aW9yLCAgdGhlIGRlZmluaXRpb25zIGJlbG93CisgKiBpbmRpY2F0ZXMgdGhlIHNldHRpbmcgb2YgY29ycmVzcG9uZGluZyBNRlBSIGJpdHMKKyAqCisgKiBEZWZpbml0aW9uICAgICAgIHB1bGxfc2VsICBwdWxsdXBfZW4gIHB1bGxkb3duX2VuCisgKiBNRlBSX1BVTExfTk9ORSAgICAgICAwICAgICAgICAgMCAgICAgICAgMAorICogTUZQUl9QVUxMX0xPVyAgICAgICAgMSAgICAgICAgIDAgICAgICAgIDEKKyAqIE1GUFJfUFVMTF9ISUdIICAgICAgIDEgICAgICAgICAxICAgICAgICAwCisgKiBNRlBSX1BVTExfQk9USCAgICAgICAxICAgICAgICAgMSAgICAgICAgMQorICovCisjZGVmaW5lIE1GUFJfUFVMTF9OT05FCQkoMCkKKyNkZWZpbmUgTUZQUl9QVUxMX0xPVwkJKE1GUFJfUFVMTF9TRUwgfCBNRlBSX1BVTExET1dOX0VOKQorI2RlZmluZSBNRlBSX1BVTExfQk9USAkJKE1GUFJfUFVMTF9MT1cgfCBNRlBSX1BVTExVUF9FTikKKyNkZWZpbmUgTUZQUl9QVUxMX0hJR0gJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMVVBfRU4pCisKKy8qIG1mcF9zcGluX2xvY2sgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBNRlAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbgorICogKG1vc3QgbGlrZWx5IGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uKSBpcyBhdG9taWMsIGFuZCB0aGF0CisgKiBtZnBfdGFibGVbXSBpcyBjb25zaXN0ZW50CisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZwX3NwaW5fbG9jayk7CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1mcHJfbW1pb19iYXNlOworCitzdHJ1Y3QgbWZwX3BpbiB7CisJdW5zaWduZWQgbG9uZwljb25maWc7CQkvKiAtMSBmb3Igbm90IGNvbmZpZ3VyZWQgKi8KKwl1bnNpZ25lZCBsb25nCW1mcHJfb2ZmOwkvKiBNRlBSeHggUmVnaXN0ZXIgb2Zmc2V0ICovCisJdW5zaWduZWQgbG9uZwltZnByX3J1bjsJLyogUnVuLU1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KKwl1bnNpZ25lZCBsb25nCW1mcHJfbHBtOwkvKiBMb3cgUG93ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBtZnBfcGluIG1mcF90YWJsZVtNRlBfUElOX01BWF07CisKKy8qIG1hcHBpbmcgb2YgTUZQX0xQTV8qIGRlZmluaXRpb25zIHRvIE1GUFJfTFBNXyogcmVnaXN0ZXIgYml0cyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWZwcl9scG1bXSA9IHsKKwlNRlBSX0xQTV9JTlBVVCwKKwlNRlBSX0xQTV9EUklWRV9MT1csCisJTUZQUl9MUE1fRFJJVkVfSElHSCwKKwlNRlBSX0xQTV9QVUxMX0xPVywKKwlNRlBSX0xQTV9QVUxMX0hJR0gsCisJTUZQUl9MUE1fRkxPQVQsCit9OworCisvKiBtYXBwaW5nIG9mIE1GUF9QVUxMXyogZGVmaW5pdGlvbnMgdG8gTUZQUl9QVUxMXyogcmVnaXN0ZXIgYml0cyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWZwcl9wdWxsW10gPSB7CisJTUZQUl9QVUxMX05PTkUsCisJTUZQUl9QVUxMX0xPVywKKwlNRlBSX1BVTExfSElHSCwKKwlNRlBSX1BVTExfQk9USCwKK307CisKKy8qIG1hcHBpbmcgb2YgTUZQX0xQTV9FREdFXyogZGVmaW5pdGlvbnMgdG8gTUZQUl9FREdFXyogcmVnaXN0ZXIgYml0cyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbWZwcl9lZGdlW10gPSB7CisJTUZQUl9FREdFX05PTkUsCisJTUZQUl9FREdFX1JJU0UsCisJTUZQUl9FREdFX0ZBTEwsCisJTUZQUl9FREdFX0JPVEgsCit9OworCisjZGVmaW5lIG1mcHJfcmVhZGwob2ZmKQkJCVwKKwlfX3Jhd19yZWFkbChtZnByX21taW9fYmFzZSArIChvZmYpKQorCisjZGVmaW5lIG1mcHJfd3JpdGVsKG9mZiwgdmFsKQkJXAorCV9fcmF3X3dyaXRlbCh2YWwsIG1mcHJfbW1pb19iYXNlICsgKG9mZikpCisKKyNkZWZpbmUgbWZwX2NvbmZpZ3VyZWQocCkJKChwKS0+Y29uZmlnICE9IC0xKQorCisvKgorICogcGVyZm9ybSBhIHJlYWQtYmFjayBvZiBhbnkgTUZQUiByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhlCisgKiBwcmV2aW91cyB3cml0aW5ncyBhcmUgZmluaXNoZWQKKyAqLworI2RlZmluZSBtZnByX3N5bmMoKQkodm9pZClfX3Jhd19yZWFkbChtZnByX21taW9fYmFzZSArIDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21mcF9jb25maWdfcnVuKHN0cnVjdCBtZnBfcGluICpwKQoreworCWlmIChtZnBfY29uZmlndXJlZChwKSkKKwkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfcnVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19scG0oc3RydWN0IG1mcF9waW4gKnApCit7CisJaWYgKG1mcF9jb25maWd1cmVkKHApKSB7CisJCXVuc2lnbmVkIGxvbmcgbWZwcl9jbHIgPSAocC0+bWZwcl9ydW4gJiB+TUZQUl9FREdFX0JPVEgpIHwgTUZQUl9FREdFX0NMRUFSOworCQlpZiAobWZwcl9jbHIgIT0gcC0+bWZwcl9ydW4pCisJCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgbWZwcl9jbHIpOworCQlpZiAocC0+bWZwcl9scG0gIT0gbWZwcl9jbHIpCisJCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgcC0+bWZwcl9scG0pOworCX0KK30KKwordm9pZCBtZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBtZnBfY2ZncysrKSB7CisJCXVuc2lnbmVkIGxvbmcgdG1wLCBjID0gKm1mcF9jZmdzOworCQlzdHJ1Y3QgbWZwX3BpbiAqcDsKKwkJaW50IHBpbiwgYWYsIGRydiwgbHBtLCBlZGdlLCBwdWxsOworCisJCXBpbiA9IE1GUF9QSU4oYyk7CisJCUJVR19PTihwaW4gPj0gTUZQX1BJTl9NQVgpOworCQlwID0gJm1mcF90YWJsZVtwaW5dOworCisJCWFmICA9IE1GUF9BRihjKTsKKwkJZHJ2ID0gTUZQX0RTKGMpOworCQlscG0gPSBNRlBfTFBNX1NUQVRFKGMpOworCQllZGdlID0gTUZQX0xQTV9FREdFKGMpOworCQlwdWxsID0gTUZQX1BVTEwoYyk7CisKKwkJLyogcnVuLW1vZGUgcHVsbCBzZXR0aW5ncyB3aWxsIGNvbmZsaWN0IHdpdGggTUZQUiBiaXRzIG9mCisJCSAqIGxvdyBwb3dlciBtb2RlIHN0YXRlLCAgY2FsY3VsYXRlIG1mcHJfcnVuIGFuZCBtZnByX2xwbQorCQkgKiBpbmRpdmlkdWFsbHkgaWYgcHVsbCAhPSBNRlBfUFVMTF9OT05FCisJCSAqLworCQl0bXAgPSBNRlBSX0FGX1NFTChhZikgfCBNRlBSX0RSSVZFKGRydik7CisKKwkJaWYgKGxpa2VseShwdWxsID09IE1GUF9QVUxMX05PTkUpKSB7CisJCQlwLT5tZnByX3J1biA9IHRtcCB8IG1mcHJfbHBtW2xwbV0gfCBtZnByX2VkZ2VbZWRnZV07CisJCQlwLT5tZnByX2xwbSA9IHAtPm1mcHJfcnVuOworCQl9IGVsc2UgeworCQkJcC0+bWZwcl9scG0gPSB0bXAgfCBtZnByX2xwbVtscG1dIHwgbWZwcl9lZGdlW2VkZ2VdOworCQkJcC0+bWZwcl9ydW4gPSB0bXAgfCBtZnByX3B1bGxbcHVsbF07CisJCX0KKworCQlwLT5jb25maWcgPSBjOyBfX21mcF9jb25maWdfcnVuKHApOworCX0KKworCW1mcHJfc3luYygpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKK30KKwordW5zaWduZWQgbG9uZyBtZnBfcmVhZChpbnQgbWZwKQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKKworCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKKwl2YWwgPSBtZnByX3JlYWRsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdmFsOworfQorCit2b2lkIG1mcF93cml0ZShpbnQgbWZwLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKG1mcCA+PSBNRlBfUElOX01BWCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCW1mcHJfd3JpdGVsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmLCB2YWwpOworCW1mcHJfc3luYygpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBfX2luaXQgbWZwX2luaXRfYmFzZSh1bnNpZ25lZCBsb25nIG1mcHJfYmFzZSkKK3sKKwlpbnQgaTsKKworCS8qIGluaXRpYWxpemUgdGhlIHRhYmxlIHdpdGggZGVmYXVsdCAtIHVuY29uZmlndXJlZCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IGkrKykKKwkJbWZwX3RhYmxlW2ldLmNvbmZpZyA9IC0xOworCisJbWZwcl9tbWlvX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopbWZwcl9iYXNlOworfQorCit2b2lkIF9faW5pdCBtZnBfaW5pdF9hZGRyKHN0cnVjdCBtZnBfYWRkcl9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgbWZwX2FkZHJfbWFwICpwOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlmb3IgKHAgPSBtYXA7IHAtPnN0YXJ0ICE9IE1GUF9QSU5fSU5WQUxJRDsgcCsrKSB7CisJCW9mZnNldCA9IHAtPm9mZnNldDsKKwkJaSA9IHAtPnN0YXJ0OworCisJCWRvIHsKKwkJCW1mcF90YWJsZVtpXS5tZnByX29mZiA9IG9mZnNldDsKKwkJCW1mcF90YWJsZVtpXS5tZnByX3J1biA9IDA7CisJCQltZnBfdGFibGVbaV0ubWZwcl9scG0gPSAwOworCQkJb2Zmc2V0ICs9IDQ7IGkrKzsKKwkJfSB3aGlsZSAoKGkgPD0gcC0+ZW5kKSAmJiAocC0+ZW5kICE9IC0xKSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIG1mcF9jb25maWdfbHBtKHZvaWQpCit7CisJc3RydWN0IG1mcF9waW4gKnAgPSAmbWZwX3RhYmxlWzBdOworCWludCBwaW47CisKKwlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyssIHArKykKKwkJX19tZnBfY29uZmlnX2xwbShwKTsKK30KKwordm9pZCBtZnBfY29uZmlnX3J1bih2b2lkKQoreworCXN0cnVjdCBtZnBfcGluICpwID0gJm1mcF90YWJsZVswXTsKKwlpbnQgcGluOworCisJZm9yIChwaW4gPSAwOyBwaW4gPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IHBpbisrLCBwKyspCisJCV9fbWZwX2NvbmZpZ19ydW4ocCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlCmluZGV4IDM5MTk1ZjkuLjhkNzgxNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlCkBAIC0xOCw2ICsxOCwxMSBAQAogb2JqLXkJCQkJKz0gZ3Bpby5vCiBvYmoteQkJCQkrPSBncGlvLWNvbmZpZy5vCiAKKyMgUE0gc3VwcG9ydAorCitvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCitvYmotJChDT05GSUdfUzNDMjQxMF9QTV9DSEVDSykJKz0gcG0tY2hlY2subworCiAjIGRldmljZXMKIAogb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMpCSs9IGRldi1oc21tYy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2F1ZGlvLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9hdWRpby5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8uaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc5Nzc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3BtLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHMzY19wbV9pbml0CisgKgorICogY2FsbGVkIGZyb20gYm9hcmQgYXQgaW5pdGlhbGlzYXRpb24gdGltZSB0byBzZXR1cCB0aGUgcG93ZXIKKyAqIG1hbmFnZW1lbnQKKyovCisKKyNpZmRlZiBDT05GSUdfUE0KKworZXh0ZXJuIF9faW5pdCBpbnQgczNjX3BtX2luaXQodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19wbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUSBtYXNrIG92ZXIgc2xlZXAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2s7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzazsKKworLyogSVJRIG1hc2tzIGZvciBJUlFzIGFsbG93ZWQgdG8gZ28gdG8gc2xlZXAgKHNlZSBpcnEuYykgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93OworCisvKiBwZXItY3B1IHNsZWVwIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCAoKnBtX2NwdV9wcmVwKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKworLyogRmxhZ3MgZm9yIFBNIENvbnRyb2wgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOworCisvKiBmcm9tIHNsZWVwLlMgKi8KKworZXh0ZXJuIGludCAgczNjX2NwdV9zYXZlKHVuc2lnbmVkIGxvbmcgKnNhdmVibGspOworZXh0ZXJuIHZvaWQgczNjX2NwdV9yZXN1bWUodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfY3B1X3N1c3BlbmQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19zbGVlcF9zYXZlX3BoeXM7CisKKy8qIHNsZWVwIHNhdmUgaW5mbyAqLworCisvKioKKyAqIHN0cnVjdCBzbGVlcF9zYXZlIC0gc2F2ZSBpbmZvcm1hdGlvbiBmb3Igc2hhcmVkIHBlcmlwaGVyYWxzLgorICogQHJlZzogUG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgdG8gc2F2ZS4KKyAqIEB2YWw6IEhvbGRlciBmb3IgdGhlIHZhbHVlIHNhdmVkIGZyb20gcmVnLgorICoKKyAqIFRoaXMgZGVzY3JpYmVzIGEgbGlzdCBvZiByZWdpc3RlcnMgd2hpY2ggaXMgdXNlZCBieSB0aGUgcG0gY29yZSBhbmQKKyAqIG90aGVyIHN1YnN5c3RlbSB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHZhbHVlcyBvdmVyIHN1c3BlbmQuCisgKi8KK3N0cnVjdCBzbGVlcF9zYXZlIHsKKwl2b2lkIF9faW9tZW0JKnJlZzsKKwl1bnNpZ25lZCBsb25nCXZhbDsKK307CisKKyNkZWZpbmUgU0FWRV9JVEVNKHgpIFwKKwl7IC5yZWcgPSAoeCkgfQorCisvKioKKyAqIHN0cnVjdCBwbV91YXJ0X3NhdmUgLSBzYXZlIGJsb2NrIGZvciBjb3JlIFVBUlQKKyAqIEB1bGNvbjogU2F2ZSB2YWx1ZSBmb3IgUzNDMjQxMF9VTENPTgorICogQHVjb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUNPTgorICogQHVmY29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VGQ09OCisgKiBAdW1jb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVU1DT04KKyAqIEB1YnJkaXY6IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUJSRElWCisgKgorICogU2F2ZSBibG9jayBmb3IgVUFSVCByZWdpc3RlcnMgdG8gYmUgaGVsZCBvdmVyIHNsZWVwIGFuZCByZXN0b3JlZCBpZiB0aGV5CisgKiBhcmUgbmVlZGVkIChzYXkgYnkgZGVidWcpLgorKi8KK3N0cnVjdCBwbV91YXJ0X3NhdmUgeworCXUzMgl1bGNvbjsKKwl1MzIJdWNvbjsKKwl1MzIJdWZjb247CisJdTMyCXVtY29uOworCXUzMgl1YnJkaXY7Cit9OworCisvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIHNhdmUvcmVzdG9yZSBsaXN0cyBvZiByZWdpc3RlcnMuICovCisKK2V4dGVybiB2b2lkIHMzY19wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7CitleHRlcm4gdm9pZCBzM2NfcG1fZG9fcmVzdG9yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2RvX3Jlc3RvcmVfY29yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOworCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gaW50IHMzY19pcnFleHRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSk7CitleHRlcm4gaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpOworI2Vsc2UKKyNkZWZpbmUgczNjX2lycWV4dF93YWtlIE5VTEwKKyNkZWZpbmUgczNjMjR4eF9pcnFfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfaXJxX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKKy8qIFBNIGRlYnVnIGZ1bmN0aW9ucyAqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKKy8qKgorICogczNjX3BtX2RiZygpIC0gbG93IGxldmVsIGRlYnVnIGZ1bmN0aW9uIGZvciB1c2UgaW4gc3VzcGVuZC9yZXN1bWUuCisgKiBAbXNnOiBUaGUgbWVzc2FnZSB0byBwcmludC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgbWFpbmx5IHRvIGRlYnVnIHRoZSByZXN1bWUgcHJvY2VzcyBiZWZvcmUgdGhlIHN5c3RlbQorICogY2FuIHJlbHkgb24gcHJpbnRrL2NvbnNvbGUgb3V0cHV0LiBJdCB1c2VzIHRoZSBsb3ctbGV2ZWwgZGVidWdnaW5nIG91dHB1dAorICogcm91dGluZSBwcmludGFzY2lpKCkgdG8gZG8gaXRzIHdvcmsuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9kYmcoY29uc3QgY2hhciAqbXNnLCAuLi4pOworCisjZGVmaW5lIFMzQ19QTURCRyhmbXQuLi4pIHMzY19wbV9kYmcoZm10KQorI2Vsc2UKKyNkZWZpbmUgUzNDX1BNREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQorI2VuZGlmCisKKy8qIHN1c3BlbmQgbWVtb3J5IGNoZWNraW5nICovCisKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDSworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3ByZXBhcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fY2hlY2tfcmVzdG9yZSh2b2lkKTsKK2V4dGVybiB2b2lkIHMzY19wbV9jaGVja19jbGVhbnVwKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3N0b3JlKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX2NsZWFudXAoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3N0b3JlKCkgICBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKioKKyAqIHMzY19wbV9jb25maWd1cmVfZXh0aW50KCkgLSBlbnN1cmUgcGlucyBhcmUgY29ycmVjdGx5IHNldCBmb3IgSVJRCisgKgorICogU2V0dXAgYWxsIHRoZSBuZWNlc3NhcnkgR1BJTyBwaW5zIGZvciB3YWtpbmcgdGhlIHN5c3RlbSBvbiBleHRlcm5hbAorICogaW50ZXJydXB0LgorICovCitleHRlcm4gdm9pZCBzM2NfcG1fY29uZmlndXJlX2V4dGludCh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fcmVzdG9yZV9ncGlvcygpIC0gcmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGdwaW9zIGFmdGVyIHNsZWVwLgorICoKKyAqIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPIHBpbnMgYWZ0ZXIgc2xlZXAsIHdoaWNoIG1heSBpbnZvbHZlIGVuc3VyaW5nCisgKiB0aGF0IHdlIGRvIG5vdCBnbGl0Y2ggdGhlIHN0YXRlIG9mIHRoZSBwaW5zIGZyb20gdGhhdCB0aGUgYm9vdGxvYWRlcidzCisgKiByZXN1bWUgY29kZSBoYXMgZG9uZS4KKyovCitleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9ncGlvcyh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fc2F2ZV9ncGlvcygpIC0gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zIGZvciByZXN0b3JpbmcgYWZ0ZXIgc2xlZXAuCisgKgorICogU2F2ZSB0aGUgR1BJTyBzdGF0ZXMgZm9yIHJlc290cmF0aW9uIG9uIHJlc3VtZS4gU2VlIHMzY19wbV9yZXN0b3JlX2dwaW9zKCkuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9zYXZlX2dwaW9zKHZvaWQpOworCisvKioKKyAqIHMzY19wbV9jYl9mbHVzaGNhY2hlIC0gY2FsbGJhY2sgZm9yIGFzc2VtYmx5IGNvZGUKKyAqCisgKiBDYWxsYmFjayB0byBpc3N1ZSBmbHVzaF9jYWNoZV9hbGwoKSBhcyB0aGlzIGNhbGwgaXMKKyAqIG5vdCBhIGRpcmVjdGx5IGNhbGxhYmxlIG9iamVjdC4KKyAqLworZXh0ZXJuIHZvaWQgczNjX3BtX2NiX2ZsdXNoY2FjaGUodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9jb3JlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhZDc1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKQEAgLTAsMCArMSw3NSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEyIElJUyByZWdpc3RlciBkZWZpbml0aW9uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19TM0MyNDEyX0lJU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19TM0MyNDEyX0lJU19ICisKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT04JCQkoMHgwMCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0QJCQkoMHgwNCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNGSUMJCQkoMHgwOCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNQU1IJCQkoMHgwQykKKyNkZWZpbmUgUzNDMjQxMl9JSVNUWEQJCQkoMHgxMCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNSWEQJCQkoMHgxNCkKKworI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9MUklOREVYCQkoMSA8PCAxMSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0VNUFRZCSgxIDw8IDEwKQorI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRU1QVFkJKDEgPDwgOSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0ZVTEwJKDEgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0ZVTEwJKDEgPDwgNykKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0UJKDEgPDwgNikKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0UJKDEgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRQkoMSA8PCA0KQorI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFCSgxIDw8IDMpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRQkoMSA8PCAyKQorI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUJKDEgPDwgMSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0lNU19QQ0xLCQkoMCA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWAkoMSA8PCAxMCkKKworI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUwJKDAgPDwgMTApCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9FWFRFUk5BTAkoMSA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0xBVkUJCSgyIDw8IDEwKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSwkoMyA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFkJKDAgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFkJKDEgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYCSgyIDw8IDgpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSwkoMyA8PCA4KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9MUl9MTE9XCQkoMCA8PCA3KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9MUl9STE9XCQkoMSA8PCA3KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfSUlTCQkoMCA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTVNCCQkoMSA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTFNCCQkoMiA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTUFTSwkJKDMgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS18yNTZGUwkoMCA8PCAzKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzUxMkZTCSgxIDw8IDMpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfMzg0RlMJKDIgPDwgMykKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS183NjhGUwkoMyA8PCAzKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLX01BU0sgCSgzIDw8IDMpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0JDTEtfMzJGUwkoMCA8PCAxKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzQ4RlMJKDEgPDwgMSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS18xNkZTCSgyIDw8IDEpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0JDTEtfMjRGUwkoMyA8PCAxKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLX01BU0sJKDMgPDwgMSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfOEJJVAkJKDEgPDwgMCkKKworI2RlZmluZSBTM0MyNDEyX0lJU1BTUl9QU1JFTgkJKDEgPDwgMTUpCisKKyNkZWZpbmUgUzNDMjQxMl9JSVNGSUNfVFhGTFVTSAkJKDEgPDwgMTUpCisjZGVmaW5lIFMzQzI0MTJfSUlTRklDX1JYRkxVU0gJCSgxIDw8IDcpCisjZGVmaW5lIFMzQzI0MTJfSUlTRklDX1RYQ09VTlQoeCkJKCgoeCkgPj4gIDgpICYgMHhmKQorI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19SWENPVU5UKHgpCSgoKHgpID4+ICAwKSAmIDB4ZikKKworCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfUzNDMjQxMl9JSVNfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAppbmRleCA2MDYxZGU4Li5kYzY2YTQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKQEAgLTkwLDcgKzkwLDEwIEBACiB7CiB9CiAKLSNkZWZpbmUgX19yYXdfd3JpdGVsKGQsYWQpIGRvIHsgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkKSkgPSAoZCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX19yYXdfd3JpdGVsKGQsIGFkKQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJKigodm9sYXRpbGUgdW5zaWduZWQgaW50IF9fZm9yY2UgKikoYWQpKSA9IChkKTsgXAorCX0gd2hpbGUgKDApCiAKIC8qIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRwogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyYzg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyAtIFVTQiBob3N0IHBvcnQgaW5mb3JtYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAorI2RlZmluZSBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAorCisjZGVmaW5lIFMzQ19IQ0RGTEdfVVNFRAkoMSkKKworc3RydWN0IHMzYzI0MTBfaGNkX3BvcnQgeworCXVuc2lnbmVkIGNoYXIJZmxhZ3M7CisJdW5zaWduZWQgY2hhcglwb3dlcjsKKwl1bnNpZ25lZCBjaGFyCW9jX3N0YXR1czsKKwl1bnNpZ25lZCBjaGFyCW9jX2NoYW5nZWQ7Cit9OworCitzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyB7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IHMzYzI0MTBfaGNkX3BvcnQJcG9ydFsyXTsKKworCXZvaWQJCSgqcG93ZXJfY29udHJvbCkoaW50IHBvcnQsIGludCB0byk7CisJdm9pZAkJKCplbmFibGVfb2MpKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICosIGludCBvbik7CisJdm9pZAkJKCpyZXBvcnRfb2MpKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICosIGludCBwb3J0cyk7Cit9OworCitzdGF0aWMgdm9pZCBpbmxpbmUgczNjMjQxMF91c2JfcmVwb3J0X29jKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICppbmZvLCBpbnQgcG9ydHMpCit7CisJaWYgKGluZm8tPnJlcG9ydF9vYyAhPSBOVUxMKSB7CisJCShpbmZvLT5yZXBvcnRfb2MpKGluZm8sIHBvcnRzKTsKKwl9Cit9CisKKyNlbmRpZiAvKl9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9wbS1jaGVjay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYyNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYwpAQCAtMCwwICsxLDI0MiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYworICogIG9yaWdpbmFsbHkgaW4gbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51aworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQb3dlciBNYW5nYW1lbnQgLSBzdXNwZW5kL3Jlc3VtZSBtZW1vcnkgY29ycnVwdGl1b24gY2hlY2suCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisKKyNpZiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgPCAxCisjZXJyb3IgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIG11c3QgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZQorI2VuZGlmCisKKy8qIHN1c3BlbmQgY2hlY2tpbmcgY29kZS4uLgorICoKKyAqIHRoaXMgbmV4dCBhcmVhIGRvZXMgYSBzZXQgb2YgY3JjIGNoZWNrcyBvdmVyIGFsbCB0aGUgaW5zdGFsbGVkCisgKiBtZW1vcnksIHNvIHRoZSBzeXN0ZW0gY2FuIHZlcmlmeSBpZiB0aGUgcmVzdW1lIHdhcyBvay4KKyAqCisgKiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgZGVmaW5lcyB0aGUgYmxvY2stc2l6ZSBmb3IgdGhlIENSQywKKyAqIGluY3JlYXNpbmcgaXQgd2lsbCBtZWFuIHRoYXQgdGhlIGFyZWEgY29ycnVwdGVkIHdpbGwgYmUgbGVzcyBlYXN5IHRvIHNwb3QsCisgKiBhbmQgcmVkdWNpbmcgdGhlIHNpemUgd2lsbCBjYXVzZSB0aGUgQ1JDIHNhdmUgYXJlYSB0byBncm93CisqLworCisjZGVmaW5lIENIRUNLX0NIVU5LU0laRSAoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFICogMTAyNCkKKworc3RhdGljIHUzMiBjcmNfc2l6ZTsJLyogc2l6ZSBuZWVkZWQgZm9yIHRoZSBjcmMgYmxvY2sgKi8KK3N0YXRpYyB1MzIgKmNyY3M7CS8qIGFsbG9jYXRlZCBvdmVyIHN1c3BlbmQvcmVzdW1lICovCisKK3R5cGVkZWYgdTMyICoocnVuX2ZuX3QpKHN0cnVjdCByZXNvdXJjZSAqcHRyLCB1MzIgKmFyZyk7CisKKy8qIHMzY19wbV9ydW5fcmVzCisgKgorICogZ28gdGhyb3VnaCB0aGUgZ2l2ZW4gcmVzb3VyY2UgbGlzdCwgYW5kIGxvb2sgZm9yIHN5c3RlbSByYW0KKyovCisKK3N0YXRpYyB2b2lkIHMzY19wbV9ydW5fcmVzKHN0cnVjdCByZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCit7CisJd2hpbGUgKHB0ciAhPSBOVUxMKSB7CisJCWlmIChwdHItPmNoaWxkICE9IE5VTEwpCisJCQlzM2NfcG1fcnVuX3JlcyhwdHItPmNoaWxkLCBmbiwgYXJnKTsKKworCQlpZiAoKHB0ci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKKwkJICAgIHN0cmNtcChwdHItPm5hbWUsICJTeXN0ZW0gUkFNIikgPT0gMCkgeworCQkJUzNDX1BNREJHKCJGb3VuZCBzeXN0ZW0gUkFNIGF0ICUwOGx4Li4lMDhseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nKXB0ci0+c3RhcnQsCisJCQkJICAodW5zaWduZWQgbG9uZylwdHItPmVuZCk7CisJCQlhcmcgPSAoZm4pKHB0ciwgYXJnKTsKKwkJfQorCisJCXB0ciA9IHB0ci0+c2libGluZzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9ydW5fc3lzcmFtKHJ1bl9mbl90IGZuLCB1MzIgKmFyZykKK3sKKwlzM2NfcG1fcnVuX3JlcygmaW9tZW1fcmVzb3VyY2UsIGZuLCBhcmcpOworfQorCitzdGF0aWMgdTMyICpzM2NfcG1fY291bnRyYW0oc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQoreworCXUzMiBzaXplID0gKHUzMikocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxOworCisJc2l6ZSArPSBDSEVDS19DSFVOS1NJWkUtMTsKKwlzaXplIC89IENIRUNLX0NIVU5LU0laRTsKKworCVMzQ19QTURCRygiQXJlYSAlMDhseC4uJTA4bHgsICVkIGJsb2Nrc1xuIiwKKwkJICAodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCwgc2l6ZSk7CisKKwkqdmFsICs9IHNpemUgKiBzaXplb2YodTMyKTsKKwlyZXR1cm4gdmFsOworfQorCisvKiBzM2NfcG1fcHJlcGFyZV9jaGVjaworICoKKyAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY3JlYXRpbmcgdGhlIENSQ3MuIFRoaXMKKyAqIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpbmFsIHNhdmUsIGFzIGl0IHdpbGwgcmVxdWlyZSBtZW1vcnkKKyAqIGFsbG9jYXRpbmcsIGFuZCB0aHVzIHRvdWNoaW5nIGJpdHMgb2YgdGhlIGtlcm5lbCB3ZSBkbyBub3QKKyAqIGtub3cgYWJvdXQuCisqLworCit2b2lkIHMzY19wbV9jaGVja19wcmVwYXJlKHZvaWQpCit7CisJY3JjX3NpemUgPSAwOworCisJczNjX3BtX3J1bl9zeXNyYW0oczNjX3BtX2NvdW50cmFtLCAmY3JjX3NpemUpOworCisJUzNDX1BNREJHKCJzM2NfcG1fcHJlcGFyZV9jaGVjazogJXUgY2hlY2tzIG5lZWRlZFxuIiwgY3JjX3NpemUpOworCisJY3JjcyA9IGttYWxsb2MoY3JjX3NpemUrNCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNyY3MgPT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgYWxsb2NhdGVkIENSQyBzYXZlIGFyZWFcbiIpOworfQorCitzdGF0aWMgdTMyICpzM2NfcG1fbWFrZWNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGxlZnQ7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQkqdmFsID0gY3JjMzJfbGUofjAsIHBoeXNfdG9fdmlydChhZGRyKSwgbGVmdCk7CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzY19wbV9jaGVja19zdG9yZQorICoKKyAqIGNvbXB1dGUgdGhlIENSQyB2YWx1ZXMgZm9yIHRoZSBtZW1vcnkgYmxvY2tzIGJlZm9yZSB0aGUgZmluYWwKKyAqIHNsZWVwLgorKi8KKwordm9pZCBzM2NfcG1fY2hlY2tfc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKQorCQlzM2NfcG1fcnVuX3N5c3JhbShzM2NfcG1fbWFrZWNoZWNrLCBjcmNzKTsKK30KKworLyogaW5fcmVnaW9uCisgKgorICogcmV0dXJuIFRSVUUgaWYgdGhlIGFyZWEgZGVmaW5lZCBieSBwdHIuLnB0citzaXplIGNvbnRhaW5zIHRoZQorICogd2hhdC4ud2hhdCt3aGF0c3oKKyovCisKK3N0YXRpYyBpbmxpbmUgaW50IGluX3JlZ2lvbih2b2lkICpwdHIsIGludCBzaXplLCB2b2lkICp3aGF0LCBzaXplX3Qgd2hhdHN6KQoreworCWlmICgod2hhdCt3aGF0c3opIDwgcHRyKQorCQlyZXR1cm4gMDsKKworCWlmICh3aGF0ID4gKHB0citzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBzM2NfcG1fcnVuY2hlY2soKSAtIGhlbHBlciB0byBjaGVjayBhIHJlc291cmNlIG9uIHJlc3RvcmUuCisgKiBAcmVzOiBUaGUgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEB2YWs6IFBvaW50ZXIgdG8gbGlzdCBvZiBDUkMzMiB2YWx1ZXMgdG8gY2hlY2suCisgKgorICogQ2FsbGVkIGZyb20gdGhlIHMzY19wbV9jaGVja19yZXN0b3JlKCkgdmlhIHMzY19wbV9ydW5fc3lzcmFtKCksIHRoaXMKKyAqIGZ1bmN0aW9uIHJ1bnMgdGhlIGdpdmVuIG1lbW9yeSByZXNvdXJjZSBjaGVja2luZyBpdCBhZ2FpbnN0IHRoZSBzdG9yZWQKKyAqIENSQyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgaXMgcmVzdG9yZWQuIFRoZSBmdW5jdGlvbiB0cmllcyB0byBza2lwIGFzCisgKiBtYW55IG9mIHRoZSBhcmVhcyB1c2VkIGR1cmluZyB0aGUgc3VzcGVuZCBwcm9jZXNzLgorICovCitzdGF0aWMgdTMyICpzM2NfcG1fcnVuY2hlY2soc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQoreworCXZvaWQgKnNhdmVfYXQgPSBwaHlzX3RvX3ZpcnQoczNjX3NsZWVwX3NhdmVfcGh5cyk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVmdDsKKwl2b2lkICpzdGtwYWdlOworCXZvaWQgKnB0cjsKKwl1MzIgY2FsYzsKKworCXN0a3BhZ2UgPSAodm9pZCAqKSgodTMyKSZjYWxjICYgflBBR0VfTUFTSyk7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIHN0a3BhZ2UsIDQwOTYpKSB7CisJCQlTM0NfUE1EQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc3RhY2sgaW5cbiIsIGFkZHIpOworCQkJZ290byBza2lwX2NoZWNrOworCQl9CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIGNyY3MsIGNyY19zaXplKSkgeworCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIGNyYyBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7CisJCQlTM0NfUE1EQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLworCisJCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKKwkJaWYgKGNhbGMgIT0gKnZhbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJSZXN0b3JlIENSQyBlcnJvciBhdCAiCisJCQkgICAgICAgIiUwOGx4ICglMDh4IHZzICUwOHgpXG4iLCBhZGRyLCBjYWxjLCAqdmFsKTsKKworCQkJUzNDX1BNREJHKCJSZXN0b3JlIENSQyBlcnJvciBhdCAlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwKKwkJCSAgICBhZGRyLCBjYWxjLCAqdmFsKTsKKwkJfQorCisJc2tpcF9jaGVjazoKKwkJdmFsKys7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworLyoqCisgKiBzM2NfcG1fY2hlY2tfcmVzdG9yZSgpIC0gbWVtb3J5IGNoZWNrIGNhbGxlZCBvbiByZXN1bWUKKyAqCisgKiBjaGVjayB0aGUgQ1JDcyBhZnRlciB0aGUgcmVzdG9yZSBldmVudCBhbmQgZnJlZSB0aGUgbWVtb3J5IHVzZWQKKyAqIHRvIGhvbGQgdGhlbQorKi8KK3ZvaWQgczNjX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKQorCQlzM2NfcG1fcnVuX3N5c3JhbShzM2NfcG1fcnVuY2hlY2ssIGNyY3MpOworfQorCisvKioKKyAqIHMzY19wbV9jaGVja19jbGVhbnVwKCkgLSBmcmVlIG1lbW9yeSByZXNvdXJjZXMKKyAqCisgKiBGcmVlIHRoZSByZXNvdXJjZXMgdGhhdCB3aGVyZSBhbGxvY2F0ZWQgYnkgdGhlIHN1c3BlbmQKKyAqIG1lbW9yeSBjaGVjayBjb2RlLiBXZSBkbyB0aGlzIHNlcGFyYXRlbHkgZnJvbSB0aGUKKyAqIHMzY19wbV9jaGVja19yZXN0b3JlKCkgZnVuY3Rpb24gYXMgd2UgY2Fubm90IGNhbGwgYW55CisgKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBzbGVlcCBkdXJpbmcgdGhhdCByZXN1bWUuCisgKi8KK3ZvaWQgczNjX3BtX2NoZWNrX2NsZWFudXAodm9pZCkKK3sKKwlrZnJlZShjcmNzKTsKKwljcmNzID0gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxMTgyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKQEAgLTAsMCArMSwzNjMgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDQsMjAwNiwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MgY29tbW9uIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQgdG8gcmFtKSBzdXBwb3J0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L3BtLWNvcmUuaD4KKworLyogZm9yIGV4dGVybmFsIHVzZSAqLworCit1bnNpZ25lZCBsb25nIHMzY19wbV9mbGFnczsKKworLyogRGVidWcgY29kZToKKyAqCisgKiBUaGlzIGNvZGUgc3VwcG9ydHMgZGVidWcgb3V0cHV0IHRvIHRoZSBsb3cgbGV2ZWwgVUFSVHMgZm9yIHVzZSBvbgorICogcmVzdW1lIGJlZm9yZSB0aGUgY29uc29sZSBsYXllciBpcyBhdmFpbGFibGUuCisqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKK2V4dGVybiB2b2lkIHByaW50YXNjaWkoY29uc3QgY2hhciAqKTsKKwordm9pZCBzM2NfcG1fZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdmE7CisJY2hhciBidWZmWzI1Nl07CisKKwl2YV9zdGFydCh2YSwgZm10KTsKKwl2c3ByaW50ZihidWZmLCBmbXQsIHZhKTsKKwl2YV9lbmQodmEpOworCisJcHJpbnRhc2NpaShidWZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9kZWJ1Z19pbml0KHZvaWQpCit7CisJLyogcmVzdGFydCB1YXJ0IGNsb2NrcyBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8gb3V0cHV0ICovCisJczNjX3BtX2RlYnVnX2luaXRfdWFydCgpOworfQorCisjZWxzZQorI2RlZmluZSBzM2NfcG1fZGVidWdfaW5pdCgpIGRvIHsgfSB3aGlsZSgwKQorCisjZW5kaWYgLyogQ09ORklHX1MzQzI0MTBfUE1fREVCVUcgKi8KKworLyogU2F2ZSB0aGUgVUFSVCBjb25maWd1cmF0aW9ucyBpZiB3ZSBhcmUgY29uZmlndXJlZCBmb3IgZGVidWcuICovCisKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRworCitzdHJ1Y3QgcG1fdWFydF9zYXZlIHVhcnRfc2F2ZVtDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNdOworCitzdGF0aWMgdm9pZCBzM2NfcG1fc2F2ZV91YXJ0KHVuc2lnbmVkIGludCB1YXJ0LCBzdHJ1Y3QgcG1fdWFydF9zYXZlICpzYXZlKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IFMzQ19WQV9VQVJUeCh1YXJ0KTsKKworCXNhdmUtPnVsY29uID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUxDT04pOworCXNhdmUtPnVjb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VQ09OKTsKKwlzYXZlLT51ZmNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VGQ09OKTsKKwlzYXZlLT51bWNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VNQ09OKTsKKwlzYXZlLT51YnJkaXYgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VQlJESVYpOworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fc2F2ZV91YXJ0cyh2b2lkKQoreworCXN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUgPSB1YXJ0X3NhdmU7CisJdW5zaWduZWQgaW50IHVhcnQ7CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTOyB1YXJ0KyssIHNhdmUrKykKKwkJczNjX3BtX3NhdmVfdWFydCh1YXJ0LCBzYXZlKTsKK30KKworc3RhdGljIHZvaWQgczNjX3BtX3Jlc3RvcmVfdWFydCh1bnNpZ25lZCBpbnQgdWFydCwgc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBTM0NfVkFfVUFSVHgodWFydCk7CisKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWxjb24sIHJlZ3MgKyBTM0MyNDEwX1VMQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWNvbiwgIHJlZ3MgKyBTM0MyNDEwX1VDT04pOworCV9fcmF3X3dyaXRlbChzYXZlLT51ZmNvbiwgcmVncyArIFMzQzI0MTBfVUZDT04pOworCV9fcmF3X3dyaXRlbChzYXZlLT51bWNvbiwgcmVncyArIFMzQzI0MTBfVU1DT04pOworCV9fcmF3X3dyaXRlbChzYXZlLT51YnJkaXYsIHJlZ3MgKyBTM0MyNDEwX1VCUkRJVik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9yZXN0b3JlX3VhcnRzKHZvaWQpCit7CisJc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSA9IHVhcnRfc2F2ZTsKKwl1bnNpZ25lZCBpbnQgdWFydDsKKworCWZvciAodWFydCA9IDA7IHVhcnQgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IHVhcnQrKywgc2F2ZSsrKQorCQlzM2NfcG1fcmVzdG9yZV91YXJ0KHVhcnQsIHNhdmUpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHMzY19wbV9zYXZlX3VhcnRzKHZvaWQpIHsgfQorc3RhdGljIHZvaWQgczNjX3BtX3Jlc3RvcmVfdWFydHModm9pZCkgeyB9CisjZW5kaWYKKworLyogVGhlIElSUSBleHQtaW50IGNvZGUgZ29lcyBoZXJlLCBpdCBpcyB0b28gc21hbGwgdG8gY3VycmVudGx5IGJvdGhlcgorICogd2l0aCBpdHMgb3duIGZpbGUuICovCisKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzawk9IDB4ZmZmZmZmZmZMOwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOworCitpbnQgczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgSVJRX0VJTlRfQklUKGlycW5vKTsKKworCWlmICghKHMzY19pcnF3YWtlX2VpbnRhbGxvdyAmIGJpdCkpCisJCXJldHVybiAtRU5PRU5UOworCisJcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAorCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKKworCWlmICghc3RhdGUpCisJCXMzY19pcnF3YWtlX2VpbnRtYXNrIHw9IGJpdDsKKwllbHNlCisJCXMzY19pcnF3YWtlX2VpbnRtYXNrICY9IH5iaXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHN0YXRlICovCisKKy8qKgorICogczNjX3BtX2RvX3NhdmUoKSAtIHNhdmUgYSBzZXQgb2YgcmVnaXN0ZXJzIGZvciByZXN0b3JhdGlvbiBvbiByZXN1bWUuCisgKiBAcHRyOiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIHJlZ2lzdGVycy4KKyAqIEBjb3VudDogU2l6ZSBvZiB0aGUgcHRyIGFycmF5LgorICoKKyAqIFJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIHJlZ2lzdGVycyBnaXZlbiwgc2F2aW5nIHRoZWlyIGNvbnRlbnRzIGluIHRoZQorICogYXJyYXkgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIHdoZW4gd2Ugd2FrZXVwLgorICovCit2b2lkIHMzY19wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgeworCQlwdHItPnZhbCA9IF9fcmF3X3JlYWRsKHB0ci0+cmVnKTsKKwkJUzNDX1BNREJHKCJzYXZlZCAlcCB2YWx1ZSAlMDhseFxuIiwgcHRyLT5yZWcsIHB0ci0+dmFsKTsKKwl9Cit9CisKKy8qKgorICogczNjX3BtX2RvX3Jlc3RvcmUoKSAtIHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIHNhdmUgbGlzdC4KKyAqIEBwdHI6IFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcmVnaXN0ZXJzLgorICogQGNvdW50OiBTaXplIG9mIHRoZSBwdHIgYXJyYXkuCisgKgorICogUmVzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIHNhdmVkIGZyb20gczNjX3BtX2RvX3NhdmUoKS4KKyAqCisgKiBOb3RlLCB3ZSBkbyBub3QgdXNlIFMzQ19QTURCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCisgKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKKyovCisKK3ZvaWQgczNjX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZXN0b3JlICVwIChyZXN0b3JlICUwOGx4LCB3YXMgJTA4eClcbiIsCisJCSAgICAgICBwdHItPnJlZywgcHRyLT52YWwsIF9fcmF3X3JlYWRsKHB0ci0+cmVnKSk7CisKKwkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7CisJfQorfQorCisvKioKKyAqIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoKSAtIGVhcmx5IHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gc2F2ZSBsaXN0LgorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBzM2NfcG1fZG9fcmVzdG9yZSgpIGV4Y2VwdCB3ZSB0cnkgYW5kIG1pbmltaXNlIHRoZQorICogc2lkZSBlZmZlY3RzIG9mIHRoZSBmdW5jdGlvbiBpbiBjYXNlIHJlZ2lzdGVycyB0aGF0IGhhcmR3YXJlIG1pZ2h0IG5lZWQKKyAqIHRvIHdvcmsgaGFzIGJlZW4gcmVzdG9yZWQuCisgKgorICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQorICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCisqLworCit2b2lkIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKQorCQlfX3Jhd193cml0ZWwocHRyLT52YWwsIHB0ci0+cmVnKTsKK30KKworLyogczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzCisgKgorICogcHJpbnQgYW55IElSUXMgYXNzZXJ0ZWQgYXQgcmVzdW1lIHRpbWUgKGllLCB3ZSB3b2tlIGZyb20pCisqLworc3RhdGljIHZvaWQgczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHdoaWNoLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaW50IGk7CisKKwl3aGljaCAmPSB+bWFzazsKKworCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgeworCQlpZiAod2hpY2ggJiAoMUw8PGkpKSB7CisJCQlTM0NfUE1EQkcoIklSUSAlZCBhc3NlcnRlZCBhdCByZXN1bWVcbiIsIHN0YXJ0K2kpOworCQl9CisJfQorfQorCisKK3ZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Cit2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKworI2RlZmluZSBhbnlfYWxsb3dlZChtYXNrLCBhbGxvdykgKCgobWFzaykgJiAoYWxsb3cpKSAhPSAoYWxsb3cpKQorCisvKiBzM2NfcG1fZW50ZXIKKyAqCisgKiBjZW50cmFsIGNvbnRyb2wgZm9yIHNsZWVwL3Jlc3VtZSBwcm9jZXNzCisqLworCitzdGF0aWMgaW50IHMzY19wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVnc19zYXZlWzE2XTsKKworCS8qIGVuc3VyZSB0aGUgZGVidWcgaXMgaW5pdGlhbGlzZWQgKGlmIGVuYWJsZWQpICovCisKKwlzM2NfcG1fZGVidWdfaW5pdCgpOworCisJUzNDX1BNREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CisKKwlpZiAocG1fY3B1X3ByZXAgPT0gTlVMTCB8fCBwbV9jcHVfc2xlZXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvcjogbm8gY3B1IHNsZWVwIGZ1bmN0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQorCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KKwkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKKwkqLworCisJaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKKwkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHdha2UtdXAgc291cmNlcyFcbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQWJvcnRpbmcgc2xlZXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHJlY292ZXJ5IGJsb2NrICovCisKKwlzM2Nfc2xlZXBfc2F2ZV9waHlzID0gdmlydF90b19waHlzKHJlZ3Nfc2F2ZSk7CisKKwlTM0NfUE1EQkcoInMzY19zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjX3NsZWVwX3NhdmVfcGh5cyk7CisKKwkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KKworCXMzY19wbV9zYXZlX2dwaW9zKCk7CisJczNjX3BtX3NhdmVfdWFydHMoKTsKKwlzM2NfcG1fc2F2ZV9jb3JlKCk7CisKKwkvKiBzZXQgdGhlIGlycSBjb25maWd1cmF0aW9uIGZvciB3YWtlICovCisKKwlzM2NfcG1fY29uZmlndXJlX2V4dGludCgpOworCisJUzNDX1BNREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCisJICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKKworCXMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcygpOworCisJLyogY2FsbCBjcHUgc3BlY2lmaWMgcHJlcGFyYXRpb24gKi8KKworCXBtX2NwdV9wcmVwKCk7CisKKwkvKiBmbHVzaCBjYWNoZSBiYWNrIHRvIHJhbSAqLworCisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwlzM2NfcG1fY2hlY2tfc3RvcmUoKTsKKworCS8qIHNlbmQgdGhlIGNwdSB0byBzbGVlcC4uLiAqLworCisJczNjX3BtX2FyY2hfc3RvcF9jbG9ja3MoKTsKKworCS8qIHMzY19jcHVfc2F2ZSB3aWxsIGFsc28gYWN0IGFzIG91ciByZXR1cm4gcG9pbnQgZnJvbSB3aGVuCisJICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUgYW5kIHJlc3RvcmVzIGl0CisJICogZHVyaW5nIHRoZSByZXN1bWUuICAqLworCisJczNjX2NwdV9zYXZlKHJlZ3Nfc2F2ZSk7CisKKwkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgdXNpbmcgdGhlIGtlcm5lbCdzIGNwdSBpbml0IGNvZGUuICovCisKKwljcHVfaW5pdCgpOworCisJLyogcmVzdG9yZSB0aGUgc3lzdGVtIHN0YXRlICovCisKKwlzM2NfcG1fcmVzdG9yZV9jb3JlKCk7CisJczNjX3BtX3Jlc3RvcmVfdWFydHMoKTsKKwlzM2NfcG1fcmVzdG9yZV9ncGlvcygpOworCisJczNjX3BtX2RlYnVnX2luaXQoKTsKKworCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KKworCXMzY19wbV9hcmNoX3Nob3dfcmVzdW1lX2lycXMoKTsKKworCVMzQ19QTURCRygiJXM6IHBvc3Qgc2xlZXAsIHByZXBhcmluZyB0byByZXR1cm5cbiIsIF9fZnVuY19fKTsKKworCXMzY19wbV9jaGVja19yZXN0b3JlKCk7CisKKwkvKiBvaywgbGV0J3MgcmV0dXJuIGZyb20gc2xlZXAgKi8KKworCVMzQ19QTURCRygiUzNDIFBNIFJlc3VtZSAocG9zdC1yZXN0b3JlKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxiYWNrIGZyb20gYXNzZW1ibHkgY29kZSAqLwordm9pZCBzM2NfcG1fY2JfZmx1c2hjYWNoZSh2b2lkKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCitzdGF0aWMgaW50IHMzY19wbV9wcmVwYXJlKHZvaWQpCit7CisJLyogcHJlcGFyZSBjaGVjayBhcmVhIGlmIGNvbmZpZ3VyZWQgKi8KKworCXMzY19wbV9jaGVja19wcmVwYXJlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9maW5pc2godm9pZCkKK3sKKwlzM2NfcG1fY2hlY2tfY2xlYW51cCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHMzY19wbV9vcHMgPSB7CisJLmVudGVyCQk9IHMzY19wbV9lbnRlciwKKwkucHJlcGFyZQk9IHMzY19wbV9wcmVwYXJlLAorCS5maW5pc2gJCT0gczNjX3BtX2ZpbmlzaCwKKwkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKKy8qIHMzY19wbV9pbml0CisgKgorICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKKyAqIGl0LgorKi8KKworaW50IF9faW5pdCBzM2NfcG1faW5pdCh2b2lkKQoreworCXByaW50aygiUzNDIFBvd2VyIE1hbmFnZW1lbnQsIENvcHlyaWdodCAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwlzdXNwZW5kX3NldF9vcHMoJnMzY19wbV9vcHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IDFlMDc2N2IuLjYzNmNiMTI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgtY2xvY2subwogb2JqLSQoQ09ORklHX1BNX1NJTVRFQykJCSs9IHBtLXNpbXRlYy5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCitvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubwogb2JqLSQoQ09ORklHX0hBVkVfUFdNKQkJKz0gcHdtLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX0NMT0NLKQkrPSBzM2MyNDEwLWNsb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKaW5kZXggM2Q0ODM3MC4uMWE4MzQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKQEAgLTIwMSw1ICsyMDEsNSBAQAogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc21ka19kZXZzLCBBUlJBWV9TSVpFKHNtZGtfZGV2cykpOwogCi0JczNjMjQxMF9wbV9pbml0KCk7CisJczNjX3BtX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwppbmRleCA1NDIwNjJmLi4xOTMyYjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCkBAIC0xODIsNyArMTgyLDcgQEAKICAqIHdpdGggdGhlIGNhY2hlcyBlbmFibGVkLiBJdCBzZWVtcyBhdCBsZWFzdCB0aGUgUzNDMjQ0MCBoYXMgYSBwcm9ibGVtCiAgKiByZXNldHRpbmcgaWYgdGhlcmUgaXMgYnVzIGFjdGl2aXR5IGludGVycnVwdGVkIGJ5IHRoZSByZXNldC4KICAqLwotc3RhdGljIHZvaWQgczNjMjR4eF9wbV9yZXN0YXJ0KGNoYXIgbW9kZSkKK3N0YXRpYyB2b2lkIHMzYzI0eHhfcG1fcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAobW9kZSAhPSAncycpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE5MSwxMiArMTkxLDEyIEBACiAJCV9fY3B1Y19mbHVzaF9rZXJuX2FsbCgpOwogCQlfX2NwdWNfZmx1c2hfdXNlcl9hbGwoKTsKIAotCQlhcmNoX3Jlc2V0KG1vZGUpOworCQlhcmNoX3Jlc2V0KG1vZGUsIGNtZCk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiAKIAkvKiBmYWxsYmFjaywgb3IgdW5oYW5kbGVkICovCi0JYXJtX21hY2hpbmVfcmVzdGFydChtb2RlKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KG1vZGUsIGNtZCk7CiB9CiAKIHZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2lycS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaAppbmRleCA0NTc0NmE5Li42OWUxYmU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2lycS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvaXJxLmgKQEAgLTEwLDYgKzEwLDEyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorCiAjZGVmaW5lIGlycWRiZih4Li4uKQogI2RlZmluZSBpcnFkYmYyKHguLi4pCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWFwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21hcC5oCmluZGV4IGZlZjhlYTguLmVlZDhmNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWFwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tYXAuaApAQCAtMzEsNiArMzEsOCBAQAogI2RlZmluZSBTM0MyNFhYX1NaX1VBUlQJICAgU1pfMU0KICNkZWZpbmUgUzNDX1VBUlRfT0ZGU0VUCSAgICgweDQwMDApCiAKKyNkZWZpbmUgUzNDX1ZBX1VBUlR4KHVhcnQpIChTM0NfVkFfVUFSVCArICgodWFydCAqIFMzQ19VQVJUX09GRlNFVCkpKQorCiAvKiBUaW1lcnMgKi8KICNkZWZpbmUgUzNDMjRYWF9WQV9USU1FUiAgIFMzQ19WQV9USU1FUgogI2RlZmluZSBTM0MyNDEwX1BBX1RJTUVSICAgKDB4NTEwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0tY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NTg4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLWNvcmUuaApAQCAtMCwwICsxLDU5IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BsbC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MyNHh4IC0gUE0gY29yZSBzdXBwb3J0IGZvciBhcmNoL2FybS9wbGF0LXMzYy9wbS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXRfdWFydCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOworCisJLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KKwl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7CisJdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOworCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKKworCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKKwl1ZGVsYXkoMTApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2FyY2hfcHJlcGFyZV9pcnFzKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2ludG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKKwlfX3Jhd193cml0ZWwoczNjX2lycXdha2VfZWludG1hc2ssIFMzQzI0MTBfRUlOVE1BU0spOworCisJLyogYWNrIGFueSBvdXRzdGFuZGluZyBleHRlcm5hbCBpbnRlcnJ1cHRzIGJlZm9yZSB3ZSBnbyB0byBzbGVlcCAqLworCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLCBTM0MyNDEwX0VJTlRQRU5EKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRQTkQpLCBTM0MyNDEwX0lOVFBORCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwgUzNDMjQxMF9TUkNQTkQpOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zdG9wX2Nsb2Nrcyh2b2lkKQoreworCV9fcmF3X3dyaXRlbCgweDAwLCBTM0MyNDEwX0NMS0NPTik7ICAvKiB0dXJuIG9mZiBjbG9ja3Mgb3ZlciBzbGVlcCAqLworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zaG93X3Jlc3VtZV9pcnFzKHZvaWQpCit7CisJUzNDX1BNREJHKCJwb3N0IHNsZWVwOiBJUlFzIDB4JTA4eCwgMHglMDh4XG4iLAorCQkgIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKKwkJICBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSk7CisKKwlzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDAsIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKKwkJCQlzM2NfaXJxd2FrZV9pbnRtYXNrKTsKKworCXMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UNC00LCBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwKKwkJCQlzM2NfaXJxd2FrZV9laW50bWFzayk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjIzNjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9wbS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICoJV3JpdHRlbiBieSBCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0vKiBzM2MyNDEwX3BtX2luaXQKLSAqCi0gKiBjYWxsZWQgZnJvbSBib2FyZCBhdCBpbml0aWFsaXNhdGlvbiB0aW1lIHRvIHNldHVwIHRoZSBwb3dlcgotICogbWFuYWdlbWVudAotKi8KLQotI2lmZGVmIENPTkZJR19QTQotCi1leHRlcm4gX19pbml0IGludCBzM2MyNDEwX3BtX2luaXQodm9pZCk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50IHMzYzI0MTBfcG1faW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBJUlEgbWFzayBvdmVyIHNsZWVwICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRtYXNrOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludG1hc2s7Ci0KLS8qIElSUSBtYXNrcyBmb3IgSVJRcyBhbGxvd2VkIHRvIGdvIHRvIHNsZWVwIChzZWUgaXJxLmMpICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRhbGxvdzsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRhbGxvdzsKLQotLyogcGVyLWNwdSBzbGVlcCBmdW5jdGlvbnMgKi8KLQotZXh0ZXJuIHZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Ci1leHRlcm4gdm9pZCAoKnBtX2NwdV9zbGVlcCkodm9pZCk7Ci0KLS8qIEZsYWdzIGZvciBQTSBDb250cm9sICovCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19wbV9mbGFnczsKLQotLyogZnJvbSBzbGVlcC5TICovCi0KLWV4dGVybiBpbnQgIHMzYzI0MTBfY3B1X3NhdmUodW5zaWduZWQgbG9uZyAqc2F2ZWJsayk7Ci1leHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9zdXNwZW5kKHZvaWQpOwotZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVfcmVzdW1lKHZvaWQpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5czsKLQotLyogc2xlZXAgc2F2ZSBpbmZvICovCi0KLXN0cnVjdCBzbGVlcF9zYXZlIHsKLQl2b2lkIF9faW9tZW0JKnJlZzsKLQl1bnNpZ25lZCBsb25nCXZhbDsKLX07Ci0KLSNkZWZpbmUgU0FWRV9JVEVNKHgpIFwKLQl7IC5yZWcgPSAoeCkgfQotCi1leHRlcm4gdm9pZCBzM2MyNDEwX3BtX2RvX3NhdmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKLWV4dGVybiB2b2lkIHMzYzI0MTBfcG1fZG9fcmVzdG9yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOwotCi0jaWZkZWYgQ09ORklHX1BNCi1leHRlcm4gaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLWV4dGVybiBpbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpOwotI2Vsc2UKLSNkZWZpbmUgczNjMjR4eF9pcnFfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzYzI0eHhfaXJxX3Jlc3VtZSAgTlVMTAotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtaWlzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLWlpcy5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLXBtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLXBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhY2YxYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEtcG0uYwpAQCAtMCwwICsxLDk1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLW9tLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDMjRYWCAtIElSUSBQTSBjb2RlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEuaD4KKworLyogc3RhdGUgZm9yIElSUXMgb3ZlciBzbGVlcCAqLworCisvKiBkZWZhdWx0IGlzIHRvIGFsbG93IGZvciBFSU5UMC4uRUlOVDE1LCBhbmQgSVJRX1JUQyBhcyB3YWtldXAgc291cmNlcworICoKKyAqIHNldCBiaXQgdG8gMSBpbiBhbGxvdyBiaXRmaWVsZCB0byBlbmFibGUgdGhlIHdha2V1cCBzZXR0aW5ncyBvbiBpdAorKi8KKwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRhbGxvdwk9IDFMIDw8IChJUlFfUlRDIC0gSVJRX0VJTlQwKSB8IDB4Zkw7Cit1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRhbGxvdwk9IDB4MDAwMGZmZjBMOworCitpbnQgczNjX2lycV93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgaXJxYml0ID0gMSA8PCAoaXJxbm8gLSBJUlFfRUlOVDApOworCisJaWYgKCEoczNjX2lycXdha2VfaW50YWxsb3cgJiBpcnFiaXQpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKKwkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7CisKKwlpZiAoIXN0YXRlKQorCQlzM2NfaXJxd2FrZV9pbnRtYXNrIHw9IGlycWJpdDsKKwllbHNlCisJCXMzY19pcnF3YWtlX2ludG1hc2sgJj0gfmlycWJpdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgaXJxX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQxMF9JTlRNU0spLAorCVNBVkVfSVRFTShTM0MyNDEwX0lOVFNVQk1TSyksCit9OworCisvKiB0aGUgZXh0aW50IHZhbHVlcyBtb3ZlIGJldHdlZW4gdGhlIHMzYzI0MTAvczNjMjQ0MCBhbmQgdGhlIHMzYzI0MTIKKyAqIHNvIHdlIHVzZSBhbiBhcnJheSB0byBob2xkIHRoZW0sIGFuZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YKKyAqIHRoZSByZWdpc3RlciBhdCBydW4tdGltZQorKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9leHRpbnRbM107CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRmbHRbNF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRtYXNrOworCitpbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2V4dGludCk7IGkrKykKKwkJc2F2ZV9leHRpbnRbaV0gPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VYVElOVDAgKyAoaSo0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2VpbnRmbHQpOyBpKyspCisJCXNhdmVfZWludGZsdFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlORkxUMCArIChpKjQpKTsKKworCXMzY19wbV9kb19zYXZlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CisJc2F2ZV9laW50bWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVE1BU0spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQorCQlfX3Jhd193cml0ZWwoc2F2ZV9leHRpbnRbaV0sIFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKKwkJX19yYXdfd3JpdGVsKHNhdmVfZWludGZsdFtpXSwgUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOworCisJczNjX3BtX2RvX3Jlc3RvcmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKKwlfX3Jhd193cml0ZWwoc2F2ZV9laW50bWFzaywgUzNDMjRYWF9FSU5UTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwppbmRleCAwMTkyZWNkLi45NTg3Mzc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MgCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE2LDM4ICsxNiw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKgotICogICAyMi1KdWwtMjAwNCAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogICAgICAgICAgICAgICAgRml4ZWQgY29tcGlsZSB3YXJuaW5ncwotICoKLSAqICAgMjItSnVsLTIwMDQgIFJvYyBXdSA8Y29vbG9uZXlAeWFob28uY29tLmNuPgotICogICAgICAgICAgICAgICAgRml4ZWQgczNjX2V4dGlycV90eXBlCi0gKgotICogICAyMS1KdWwtMjAwNCAgQXJuYXVkIFBhdGFyZCAoUnRwKSA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KLSAqICAgICAgICAgICAgICAgIEFkZGl0aW9uIG9mIEFEQy9UQyBkZW11eAotICoKLSAqICAgMDQtT2N0LTIwMDQgIEtsYXVzIEZldHNjaGVyIDxrLmZldHNjaGVyQGZldHJvbi5kZT4KLSAqCQkgIEZpeCBmb3Igc2V0X2lycV90eXBlKCkgb24gbG93IEVJTlQgbnVtYmVycwotICoKLSAqICAgMDUtT2N0LTIwMDQgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCQkgIFRpZHkgdXAgS0YncyBwYXRjaCBhbmQgc29ydCBvdXQgbmV3IHJlbGVhc2UKLSAqCi0gKiAgIDA1LU9jdC0yMDA0ICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgkJICBBZGQgc3VwcG9ydCBmb3IgcG93ZXIgbWFuYWdlbWVudCBjb250cm9scwotICoKLSAqICAgMDQtTm92LTIwMDQgIEJlbiBEb29rcwotICoJCSAgRml4IHN0YW5kYXJkIElSUSB3YWtlIGZvciBFSU5UMC4uNCBhbmQgUlRDCi0gKgotICogICAyMi1GZWItMjAwNSAgQmVuIERvb2tzCi0gKgkJICBGaXhlZCBlZGdlLXRyaWdnZXJpbmcgb24gQURDIElSUQotICoKLSAqICAgMjgtSnVuLTIwMDUgIEJlbiBEb29rcwotICoJCSAgTWFyayBJUlFfTENEIHZhbGlkCi0gKgotICogICAyNS1KdWwtMjAwNSAgQmVuIERvb2tzCi0gKgkJICBTcGxpdCB0aGUgUzNDMjQ0MCBJUlEgY29kZSB0byBzZXBhcmF0ZSBmaWxlCiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTUsODEgKzIzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1pcnF0eXBlLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KICNpbmNsdWRlIDxwbGF0L2lycS5oPgogCi0vKiB3YWtldXAgaXJxIGNvbnRyb2wgKi8KLQotI2lmZGVmIENPTkZJR19QTQotCi0vKiBzdGF0ZSBmb3IgSVJRcyBvdmVyIHNsZWVwICovCi0KLS8qIGRlZmF1bHQgaXMgdG8gYWxsb3cgZm9yIEVJTlQwLi5FSU5UMTUsIGFuZCBJUlFfUlRDIGFzIHdha2V1cCBzb3VyY2VzCi0gKgotICogc2V0IGJpdCB0byAxIGluIGFsbG93IGJpdGZpZWxkIHRvIGVuYWJsZSB0aGUgd2FrZXVwIHNldHRpbmdzIG9uIGl0Ci0qLwotCi11bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93CT0gMUwgPDwgKElSUV9SVEMgLSBJUlFfRUlOVDApIHwgMHhmTDsKLXVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzawk9IDB4ZmZmZmZmZmZMOwotdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50YWxsb3cJPSAweDAwMDBmZmYwTDsKLXVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludG1hc2sJPSAweGZmZmZmZmZmTDsKLQotaW50Ci1zM2NfaXJxX3dha2UodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBpcnFiaXQgPSAxIDw8IChpcnFubyAtIElSUV9FSU5UMCk7Ci0KLQlpZiAoIShzM2NfaXJxd2FrZV9pbnRhbGxvdyAmIGlycWJpdCkpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAotCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKLQotCWlmICghc3RhdGUpCi0JCXMzY19pcnF3YWtlX2ludG1hc2sgfD0gaXJxYml0OwotCWVsc2UKLQkJczNjX2lycXdha2VfaW50bWFzayAmPSB+aXJxYml0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXMzY19pcnFleHRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJpdCA9IDFMIDw8IChpcnFubyAtIEVYVElOVF9PRkYpOwotCi0JaWYgKCEoczNjX2lycXdha2VfZWludGFsbG93ICYgYml0KSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJ3YWtlICVzIGZvciBpcnEgJWRcbiIsCi0JICAgICAgIHN0YXRlID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgaXJxbm8pOwotCi0JaWYgKCFzdGF0ZSkKLQkJczNjX2lycXdha2VfZWludG1hc2sgfD0gYml0OwotCWVsc2UKLQkJczNjX2lycXdha2VfZWludG1hc2sgJj0gfmJpdDsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBzM2NfaXJxZXh0X3dha2UgTlVMTAotI2RlZmluZSBzM2NfaXJxX3dha2UgTlVMTAotI2VuZGlmCi0KLQogc3RhdGljIHZvaWQKIHMzY19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCiB7CkBAIC01OTAsNTkgKzQ5Myw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBpcnFfc2F2ZVtdID0gewotCVNBVkVfSVRFTShTM0MyNDEwX0lOVE1TSyksCi0JU0FWRV9JVEVNKFMzQzI0MTBfSU5UU1VCTVNLKSwKLX07Ci0KLS8qIHRoZSBleHRpbnQgdmFsdWVzIG1vdmUgYmV0d2VlbiB0aGUgczNjMjQxMC9zM2MyNDQwIGFuZCB0aGUgczNjMjQxMgotICogc28gd2UgdXNlIGFuIGFycmF5IHRvIGhvbGQgdGhlbSwgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZgotICogdGhlIHJlZ2lzdGVyIGF0IHJ1bi10aW1lCi0qLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2V4dGludFszXTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludGZsdFs0XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludG1hc2s7Ci0KLWludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQotCQlzYXZlX2V4dGludFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKLQkJc2F2ZV9laW50Zmx0W2ldID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOwotCi0JczNjMjQxMF9wbV9kb19zYXZlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7Ci0Jc2F2ZV9laW50bWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVE1BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQotCQlfX3Jhd193cml0ZWwoc2F2ZV9leHRpbnRbaV0sIFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKLQkJX19yYXdfd3JpdGVsKHNhdmVfZWludGZsdFtpXSwgUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOwotCi0JczNjMjQxMF9wbV9kb19yZXN0b3JlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7Ci0JX19yYXdfd3JpdGVsKHNhdmVfZWludG1hc2ssIFMzQzI0WFhfRUlOVE1BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKLSNlbmRpZgotCiAvKiBzM2MyNHh4X2luaXRfaXJxCiAgKgogICogSW5pdGlhbGlzZSBTM0MyNDEwIElSUSBzeXN0ZW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYwppbmRleCAyMWRmYTc0Li5kYTBkMzIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCkBAIC02MSw3ICs2MSw3IEBACiAKIAlfX3Jhd193cml0ZWwoZ3N0YXR1czQsIFMzQzI0MTBfR1NUQVRVUzQpOwogCi0JcmV0dXJuIHMzYzI0MTBfcG1faW5pdCgpOworCXJldHVybiBzM2NfcG1faW5pdCgpOwogfQogCiBhcmNoX2luaXRjYWxsKHBtX3NpbXRlY19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKaW5kZXggMzRlZjE4ZS4uMDYyYTI5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKQEAgLTMxLDE0ICszMSw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgpAQCAtNDksMTAgKzQ0LDYgQEAKIAogI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotLyogZm9yIGV4dGVybmFsIHVzZSAqLwotCi11bnNpZ25lZCBsb25nIHMzY19wbV9mbGFnczsKLQogI2RlZmluZSBQRlggInMzYzI0eHgtcG06ICIKIAogc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGNvcmVfc2F2ZVtdID0gewpAQCAtMTIwLDMyOCArMTExLDE0IEBACiAJU0FWRV9JVEVNKFMzQzI0MTBfRENMS0NPTiksCiB9OwogCi0jaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKIAotI2RlZmluZSBTQVZFX1VBUlQodmEpIFwKLQlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVUxDT04pLCBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VDT04pLCBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VGQ09OKSwgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VTUNPTiksIFwKLQlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVUJSRElWKQotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgdWFydF9zYXZlW10gPSB7Ci0JU0FWRV9VQVJUKFMzQzI0WFhfVkFfVUFSVDApLAotCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQxKSwKLSNpZm5kZWYgQ09ORklHX0NQVV9TM0MyNDAwCi0JU0FWRV9VQVJUKFMzQzI0WFhfVkFfVUFSVDIpLAotI2VuZGlmCi19OwotCi0vKiBkZWJ1ZwotICoKLSAqIHdlIHNlbmQgdGhlIGRlYnVnIHRvIHByaW50YXNjaWkoKSB0byBhbGxvdyBpdCB0byBiZSBzZWVuIGlmIHRoZQotICogc3lzdGVtIG5ldmVyIHdha2VzIHVwIGZyb20gdGhlIHNsZWVwCi0qLwotCi1leHRlcm4gdm9pZCBwcmludGFzY2lpKGNvbnN0IGNoYXIgKik7Ci0KLXZvaWQgcG1fZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgdmE7Ci0JY2hhciBidWZmWzI1Nl07Ci0KLQl2YV9zdGFydCh2YSwgZm10KTsKLQl2c3ByaW50ZihidWZmLCBmbXQsIHZhKTsKLQl2YV9lbmQodmEpOwotCi0JcHJpbnRhc2NpaShidWZmKTsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9kZWJ1Z19pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7Ci0KLQkvKiByZS1zdGFydCB1YXJ0IGNsb2NrcyAqLwotCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMDsKLQl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDE7Ci0JdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQyOwotCi0JX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMF9DTEtDT04pOwotCXVkZWxheSgxMCk7Ci19Ci0KLSNkZWZpbmUgREJHKGZtdC4uLikgcG1fZGJnKGZtdCkKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKLQotI2RlZmluZSBzM2MyNDEwX3BtX2RlYnVnX2luaXQoKSBkbyB7IH0gd2hpbGUoMCkKLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHVhcnRfc2F2ZVtdID0ge307Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0spICYmIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSAhPSAwCi0KLS8qIHN1c3BlbmQgY2hlY2tpbmcgY29kZS4uLgotICoKLSAqIHRoaXMgbmV4dCBhcmVhIGRvZXMgYSBzZXQgb2YgY3JjIGNoZWNrcyBvdmVyIGFsbCB0aGUgaW5zdGFsbGVkCi0gKiBtZW1vcnksIHNvIHRoZSBzeXN0ZW0gY2FuIHZlcmlmeSBpZiB0aGUgcmVzdW1lIHdhcyBvay4KLSAqCi0gKiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgZGVmaW5lcyB0aGUgYmxvY2stc2l6ZSBmb3IgdGhlIENSQywKLSAqIGluY3JlYXNpbmcgaXQgd2lsbCBtZWFuIHRoYXQgdGhlIGFyZWEgY29ycnVwdGVkIHdpbGwgYmUgbGVzcyBlYXN5IHRvIHNwb3QsCi0gKiBhbmQgcmVkdWNpbmcgdGhlIHNpemUgd2lsbCBjYXVzZSB0aGUgQ1JDIHNhdmUgYXJlYSB0byBncm93Ci0qLwotCi0jZGVmaW5lIENIRUNLX0NIVU5LU0laRSAoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFICogMTAyNCkKLQotc3RhdGljIHUzMiBjcmNfc2l6ZTsJLyogc2l6ZSBuZWVkZWQgZm9yIHRoZSBjcmMgYmxvY2sgKi8KLXN0YXRpYyB1MzIgKmNyY3M7CS8qIGFsbG9jYXRlZCBvdmVyIHN1c3BlbmQvcmVzdW1lICovCi0KLXR5cGVkZWYgdTMyICoocnVuX2ZuX3QpKHN0cnVjdCByZXNvdXJjZSAqcHRyLCB1MzIgKmFyZyk7Ci0KLS8qIHMzYzI0MTBfcG1fcnVuX3JlcwotICoKLSAqIGdvIHRob3J1Z2ggdGhlIGdpdmVuIHJlc291cmNlIGxpc3QsIGFuZCBsb29rIGZvciBzeXN0ZW0gcmFtCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3J1bl9yZXMoc3RydWN0IHJlc291cmNlICpwdHIsIHJ1bl9mbl90IGZuLCB1MzIgKmFyZykKLXsKLQl3aGlsZSAocHRyICE9IE5VTEwpIHsKLQkJaWYgKHB0ci0+Y2hpbGQgIT0gTlVMTCkKLQkJCXMzYzI0MTBfcG1fcnVuX3JlcyhwdHItPmNoaWxkLCBmbiwgYXJnKTsKLQotCQlpZiAoKHB0ci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKLQkJICAgIHN0cmNtcChwdHItPm5hbWUsICJTeXN0ZW0gUkFNIikgPT0gMCkgewotCQkJREJHKCJGb3VuZCBzeXN0ZW0gUkFNIGF0ICUwOGx4Li4lMDhseFxuIiwKLQkJCSAgICBwdHItPnN0YXJ0LCBwdHItPmVuZCk7Ci0JCQlhcmcgPSAoZm4pKHB0ciwgYXJnKTsKLQkJfQotCi0JCXB0ciA9IHB0ci0+c2libGluZzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcnVuX3N5c3JhbShydW5fZm5fdCBmbiwgdTMyICphcmcpCi17Ci0JczNjMjQxMF9wbV9ydW5fcmVzKCZpb21lbV9yZXNvdXJjZSwgZm4sIGFyZyk7Ci19Ci0KLXN0YXRpYyB1MzIgKnMzYzI0MTBfcG1fY291bnRyYW0oc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQotewotCXUzMiBzaXplID0gKHUzMikocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxOwotCi0Jc2l6ZSArPSBDSEVDS19DSFVOS1NJWkUtMTsKLQlzaXplIC89IENIRUNLX0NIVU5LU0laRTsKLQotCURCRygiQXJlYSAlMDhseC4uJTA4bHgsICVkIGJsb2Nrc1xuIiwgcmVzLT5zdGFydCwgcmVzLT5lbmQsIHNpemUpOwotCi0JKnZhbCArPSBzaXplICogc2l6ZW9mKHUzMik7Ci0JcmV0dXJuIHZhbDsKLX0KLQotLyogczNjMjQxMF9wbV9wcmVwYXJlX2NoZWNrCi0gKgotICogcHJlcGFyZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciBjcmVhdGluZyB0aGUgQ1JDcy4gVGhpcwotICogbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgZmluYWwgc2F2ZSwgYXMgaXQgd2lsbCByZXF1aXJlIG1lbW9yeQotICogYWxsb2NhdGluZywgYW5kIHRodXMgdG91Y2hpbmcgYml0cyBvZiB0aGUga2VybmVsIHdlIGRvIG5vdAotICoga25vdyBhYm91dC4KLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY2hlY2tfcHJlcGFyZSh2b2lkKQotewotCWNyY19zaXplID0gMDsKLQotCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX2NvdW50cmFtLCAmY3JjX3NpemUpOwotCi0JREJHKCJzM2MyNDEwX3BtX3ByZXBhcmVfY2hlY2s6ICV1IGNoZWNrcyBuZWVkZWRcbiIsIGNyY19zaXplKTsKLQotCWNyY3MgPSBrbWFsbG9jKGNyY19zaXplKzQsIEdGUF9LRVJORUwpOwotCWlmIChjcmNzID09IE5VTEwpCi0JCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGFsbG9jYXRlZCBDUkMgc2F2ZSBhcmVhXG4iKTsKLX0KLQotc3RhdGljIHUzMiAqczNjMjQxMF9wbV9tYWtlY2hlY2soc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVmdDsKLQotCWZvciAoYWRkciA9IHJlcy0+c3RhcnQ7IGFkZHIgPCByZXMtPmVuZDsKLQkgICAgIGFkZHIgKz0gQ0hFQ0tfQ0hVTktTSVpFKSB7Ci0JCWxlZnQgPSByZXMtPmVuZCAtIGFkZHI7Ci0KLQkJaWYgKGxlZnQgPiBDSEVDS19DSFVOS1NJWkUpCi0JCQlsZWZ0ID0gQ0hFQ0tfQ0hVTktTSVpFOwotCi0JCSp2YWwgPSBjcmMzMl9sZSh+MCwgcGh5c190b192aXJ0KGFkZHIpLCBsZWZ0KTsKLQkJdmFsKys7Ci0JfQotCi0JcmV0dXJuIHZhbDsKLX0KLQotLyogczNjMjQxMF9wbV9jaGVja19zdG9yZQotICoKLSAqIGNvbXB1dGUgdGhlIENSQyB2YWx1ZXMgZm9yIHRoZSBtZW1vcnkgYmxvY2tzIGJlZm9yZSB0aGUgZmluYWwKLSAqIHNsZWVwLgotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19zdG9yZSh2b2lkKQotewotCWlmIChjcmNzICE9IE5VTEwpCi0JCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX21ha2VjaGVjaywgY3Jjcyk7Ci19Ci0KLS8qIGluX3JlZ2lvbgotICoKLSAqIHJldHVybiBUUlVFIGlmIHRoZSBhcmVhIGRlZmluZWQgYnkgcHRyLi5wdHIrc2l6ZSBjb250YXRpbnMgdGhlCi0gKiB3aGF0Li53aGF0K3doYXRzegotKi8KLQotc3RhdGljIGlubGluZSBpbnQgaW5fcmVnaW9uKHZvaWQgKnB0ciwgaW50IHNpemUsIHZvaWQgKndoYXQsIHNpemVfdCB3aGF0c3opCi17Ci0JaWYgKCh3aGF0K3doYXRzeikgPCBwdHIpCi0JCXJldHVybiAwOwotCi0JaWYgKHdoYXQgPiAocHRyK3NpemUpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdTMyICpzM2MyNDEwX3BtX3J1bmNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKLXsKLQl2b2lkICpzYXZlX2F0ID0gcGh5c190b192aXJ0KHMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzKTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBsZWZ0OwotCXZvaWQgKnB0cjsKLQl1MzIgY2FsYzsKLQotCWZvciAoYWRkciA9IHJlcy0+c3RhcnQ7IGFkZHIgPCByZXMtPmVuZDsKLQkgICAgIGFkZHIgKz0gQ0hFQ0tfQ0hVTktTSVpFKSB7Ci0JCWxlZnQgPSByZXMtPmVuZCAtIGFkZHI7Ci0KLQkJaWYgKGxlZnQgPiBDSEVDS19DSFVOS1NJWkUpCi0JCQlsZWZ0ID0gQ0hFQ0tfQ0hVTktTSVpFOwotCi0JCXB0ciA9IHBoeXNfdG9fdmlydChhZGRyKTsKLQotCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgY3JjcywgY3JjX3NpemUpKSB7Ci0JCQlEQkcoInNraXBwaW5nICUwOGx4LCBoYXMgY3JjIGJsb2NrIGluXG4iLCBhZGRyKTsKLQkJCWdvdG8gc2tpcF9jaGVjazsKLQkJfQotCi0JCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBzYXZlX2F0LCAzMio0ICkpIHsKLQkJCURCRygic2tpcHBpbmcgJTA4bHgsIGhhcyBzYXZlIGJsb2NrIGluXG4iLCBhZGRyKTsKLQkJCWdvdG8gc2tpcF9jaGVjazsKLQkJfQotCi0JCS8qIGNhbGN1bGF0ZSBhbmQgY2hlY2sgdGhlIGNoZWNrc3VtICovCi0KLQkJY2FsYyA9IGNyYzMyX2xlKH4wLCBwdHIsIGxlZnQpOwotCQlpZiAoY2FsYyAhPSAqdmFsKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJSZXN0b3JlIENSQyBlcnJvciBhdCAiCi0JCQkgICAgICAgIiUwOGx4ICglMDh4IHZzICUwOHgpXG4iLCBhZGRyLCBjYWxjLCAqdmFsKTsKLQotCQkJREJHKCJSZXN0b3JlIENSQyBlcnJvciBhdCAlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwKLQkJCSAgICBhZGRyLCBjYWxjLCAqdmFsKTsKLQkJfQotCi0Jc2tpcF9jaGVjazoKLQkJdmFsKys7Ci0JfQotCi0JcmV0dXJuIHZhbDsKLX0KLQotLyogczNjMjQxMF9wbV9jaGVja19yZXN0b3JlCi0gKgotICogY2hlY2sgdGhlIENSQ3MgYWZ0ZXIgdGhlIHJlc3RvcmUgZXZlbnQgYW5kIGZyZWUgdGhlIG1lbW9yeSB1c2VkCi0gKiB0byBob2xkIHRoZW0KLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZSh2b2lkKQotewotCWlmIChjcmNzICE9IE5VTEwpIHsKLQkJczNjMjQxMF9wbV9ydW5fc3lzcmFtKHMzYzI0MTBfcG1fcnVuY2hlY2ssIGNyY3MpOwotCQlrZnJlZShjcmNzKTsKLQkJY3JjcyA9IE5VTEw7Ci0JfQotfQotCi0jZWxzZQotCi0jZGVmaW5lIHMzYzI0MTBfcG1fY2hlY2tfcHJlcGFyZSgpIGRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUoKSBkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgczNjMjQxMF9wbV9jaGVja19zdG9yZSgpICAgZG8geyB9IHdoaWxlKDApCi0jZW5kaWYKLQotLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHN0YXRlICovCi0KLXZvaWQgczNjMjQxMF9wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKLXsKLQlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgewotCQlwdHItPnZhbCA9IF9fcmF3X3JlYWRsKHB0ci0+cmVnKTsKLQkJREJHKCJzYXZlZCAlcCB2YWx1ZSAlMDhseFxuIiwgcHRyLT5yZWcsIHB0ci0+dmFsKTsKLQl9Ci19Ci0KLS8qIHMzYzI0MTBfcG1fZG9fcmVzdG9yZQotICoKLSAqIHJlc3RvcmUgdGhlIHN5c3RlbSBmcm9tIHRoZSBnaXZlbiBsaXN0IG9mIHNhdmVkIHJlZ2lzdGVycwotICoKLSAqIE5vdGUsIHdlIGRvIG5vdCB1c2UgREJHKCkgaW4gaGVyZSwgYXMgdGhlIHN5c3RlbSBtYXkgbm90IGhhdmUKLSAqIHJlc3RvcmUgdGhlIFVBUlRzIHN0YXRlIHlldAotKi8KLQotdm9pZCBzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQotewotCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJyZXN0b3JlICVwIChyZXN0b3JlICUwOGx4LCB3YXMgJTA4eClcbiIsCi0JCSAgICAgICBwdHItPnJlZywgcHRyLT52YWwsIF9fcmF3X3JlYWRsKHB0ci0+cmVnKSk7Ci0KLQkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7Ci0JfQotfQotCi0vKiBzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZQotICoKLSAqIHNpbWlsYXIgdG8gczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUKLSAqCi0gKiBXQVJOSU5HOiBEbyBub3QgcHV0IGFueSBkZWJ1ZyBpbiBoZXJlIHRoYXQgbWF5IGVmZmVjdCBtZW1vcnkgb3IgdXNlCi0gKiBwZXJpcGhlcmFscywgYXMgdGhpbmdzIG1heSBiZSBjaGFuZ2luZyEKLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKLXsKLQlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgewotCQlfX3Jhd193cml0ZWwocHRyLT52YWwsIHB0ci0+cmVnKTsKLQl9Ci19Ci0KLS8qIHMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcwotICoKLSAqIHByaW50IGFueSBJUlFzIGFzc2VydGVkIGF0IHJlc3VtZSB0aW1lIChpZSwgd2Ugd29rZSBmcm9tKQotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzKGludCBzdGFydCwgdW5zaWduZWQgbG9uZyB3aGljaCwKLQkJCQkJdW5zaWduZWQgbG9uZyBtYXNrKQotewotCWludCBpOwotCi0Jd2hpY2ggJj0gfm1hc2s7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IDMxOyBpKyspIHsKLQkJaWYgKCh3aGljaCkgJiAoMUw8PGkpKSB7Ci0JCQlEQkcoIklSUSAlZCBhc3NlcnRlZCBhdCByZXN1bWVcbiIsIHN0YXJ0K2kpOwotCQl9Ci0JfQotfQotCi0vKiBzM2MyNDEwX3BtX2NoZWNrX3Jlc3VtZV9waW4KKy8qIHMzY19wbV9jaGVja19yZXN1bWVfcGluCiAgKgogICogY2hlY2sgdG8gc2VlIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHNsZWVwIG1vZGUsIGFuZAogICogbWFrZSBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGlmIGl0IGlzIG5vdAogKi8KIAotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnFvZmZzKQorc3RhdGljIHZvaWQgczNjX3BtX2NoZWNrX3Jlc3VtZV9waW4odW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycW9mZnMpCiB7CiAJdW5zaWduZWQgbG9uZyBpcnFzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHBpbnN0YXRlOwpAQCAtNDU2LDIxICsxMzMsMjEgQEAKIAogCWlmICghaXJxc3RhdGUpIHsKIAkJaWYgKHBpbnN0YXRlID09IFMzQzI0MTBfR1BJT19JUlEpCi0JCQlEQkcoIkxlYXZpbmcgSVJRICVkIChwaW4gJWQpIGVuYWJsZWRcbiIsIGlycSwgcGluKTsKKwkJCVMzQ19QTURCRygiTGVhdmluZyBJUlEgJWQgKHBpbiAlZCkgZW5hYmxlZFxuIiwgaXJxLCBwaW4pOwogCX0gZWxzZSB7CiAJCWlmIChwaW5zdGF0ZSA9PSBTM0MyNDEwX0dQSU9fSVJRKSB7Ci0JCQlEQkcoIkRpc2FibGluZyBJUlEgJWQgKHBpbiAlZClcbiIsIGlycSwgcGluKTsKKwkJCVMzQ19QTURCRygiRGlzYWJsaW5nIElSUSAlZCAocGluICVkKVxuIiwgaXJxLCBwaW4pOwogCQkJczNjMjQxMF9ncGlvX2NmZ3BpbihwaW4sIFMzQzI0MTBfR1BJT19JTlBVVCk7CiAJCX0KIAl9CiB9CiAKLS8qIHMzYzI0MTBfcG1fY29uZmlndXJlX2V4dGludAorLyogczNjX3BtX2NvbmZpZ3VyZV9leHRpbnQKICAqCiAgKiBjb25maWd1cmUgYWxsIGV4dGVybmFsIGludGVycnVwdCBwaW5zCiAqLwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NvbmZpZ3VyZV9leHRpbnQodm9pZCkKK3ZvaWQgczNjX3BtX2NvbmZpZ3VyZV9leHRpbnQodm9pZCkKIHsKIAlpbnQgcGluOwogCkBAIC00ODAsMTEgKzE1NywxMSBAQAogCSovCiAKIAlmb3IgKHBpbiA9IFMzQzI0MTBfR1BGMDsgcGluIDw9IFMzQzI0MTBfR1BGNzsgcGluKyspIHsKLQkJczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgcGluIC0gUzNDMjQxMF9HUEYwKTsKKwkJczNjX3BtX2NoZWNrX3Jlc3VtZV9waW4ocGluLCBwaW4gLSBTM0MyNDEwX0dQRjApOwogCX0KIAogCWZvciAocGluID0gUzNDMjQxMF9HUEcwOyBwaW4gPD0gUzNDMjQxMF9HUEc3OyBwaW4rKykgewotCQlzM2MyNDEwX3BtX2NoZWNrX3Jlc3VtZV9waW4ocGluLCAocGluIC0gUzNDMjQxMF9HUEcwKSs4KTsKKwkJczNjX3BtX2NoZWNrX3Jlc3VtZV9waW4ocGluLCAocGluIC0gUzNDMjQxMF9HUEcwKSs4KTsKIAl9CiB9CiAKQEAgLTQ5NCwxMiArMTcxLDEyIEBACiAjZGVmaW5lIE9GRlNfREFUCShTM0MyNDEwX0dQQURBVCAtIFMzQzI0MTBfR1BBQ09OKQogI2RlZmluZSBPRkZTX1VQCQkoUzNDMjQxMF9HUEJVUCAgLSBTM0MyNDEwX0dQQkNPTikKIAotLyogczNjMjQxMF9wbV9zYXZlX2dwaW9zKCkKKy8qIHMzY19wbV9zYXZlX2dwaW9zKCkKICAqCiAgKiBTYXZlIHRoZSBzdGF0ZSBvZiB0aGUgR1BJT3MKICAqLwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3NhdmVfZ3Bpb3Modm9pZCkKK3ZvaWQgczNjX3BtX3NhdmVfZ3Bpb3Modm9pZCkKIHsKIAlzdHJ1Y3QgZ3Bpb19zbGVlcCAqZ3BzID0gZ3Bpb19zYXZlOwogCXVuc2lnbmVkIGludCBncGlvOwpAQCAtNTM4LDcgKzIxNSwxMCBAQAogCXJldHVybiBjb24gPT0gMTsKIH0KIAotLyogczNjMjQxMF9wbV9yZXN0b3JlX2dwaW8oKQorLyoqCisgKiBzM2MyNDEwX3BtX3Jlc3RvcmVfZ3BpbygpIC0gcmVzdG9yZSB0aGUgZ2l2ZW4gR1BJTyBiYW5rCisgKiBAaW5kZXg6IFRoZSBudW1iZXIgb2YgdGhlIEdQSU8gYmFuayBiZWluZyByZXN1bWVkLgorICogQGdwczogVGhlIHNsZWVwIGNvbmZnaXVyYXRpb24gZm9yIHRoZSBiYW5rLgogICoKICAqIFJlc3RvcmUgb25lIG9mIHRoZSBHUElPIGJhbmtzIHRoYXQgd2FzIHNhdmVkIGR1cmluZyBzdXNwZW5kLiBUaGlzIGlzCiAgKiBub3QgYXMgc2ltcGxlIGFzIG9uY2UgdGhvdWdodCwgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZiBnbGl0Y2hlcwpAQCAtNjQ2LDggKzMyNiw4IEBACiAJCV9fcmF3X3dyaXRlbChncHMtPmdwdXAsIGJhc2UgKyBPRkZTX1VQKTsKIAl9CiAKLQlEQkcoIkdQSU9bJWRdIENPTiAlMDhseCA9PiAlMDhseCwgREFUICUwOGx4ID0+ICUwOGx4XG4iLAotCSAgICBpbmRleCwgb2xkX2dwY29uLCBncHNfZ3Bjb24sIG9sZF9ncGRhdCwgZ3BzX2dwZGF0KTsKKwlTM0NfUE1EQkcoIkdQSU9bJWRdIENPTiAlMDhseCA9PiAlMDhseCwgREFUICUwOGx4ID0+ICUwOGx4XG4iLAorCQkgIGluZGV4LCBvbGRfZ3Bjb24sIGdwc19ncGNvbiwgb2xkX2dwZGF0LCBncHNfZ3BkYXQpOwogfQogCiAKQEAgLTY1Niw3ICszMzYsNyBAQAogICogUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zCiAgKi8KIAotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9yZXN0b3JlX2dwaW9zKHZvaWQpCit2b2lkIHMzY19wbV9yZXN0b3JlX2dwaW9zKHZvaWQpCiB7CiAJc3RydWN0IGdwaW9fc2xlZXAgKmdwcyA9IGdwaW9fc2F2ZTsKIAlpbnQgZ3BpbzsKQEAgLTY2NiwxNTAgKzM0NiwxNSBAQAogCX0KIH0KIAotdm9pZCAoKnBtX2NwdV9wcmVwKSh2b2lkKTsKLXZvaWQgKCpwbV9jcHVfc2xlZXApKHZvaWQpOwotCi0jZGVmaW5lIGFueV9hbGxvd2VkKG1hc2ssIGFsbG93KSAoKChtYXNrKSAmIChhbGxvdykpICE9IChhbGxvdykpCi0KLS8qIHMzYzI0MTBfcG1fZW50ZXIKLSAqCi0gKiBjZW50cmFsIGNvbnRyb2wgZm9yIHNsZWVwL3Jlc3VtZSBwcm9jZXNzCi0qLwotCi1zdGF0aWMgaW50IHMzYzI0MTBfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQordm9pZCBzM2NfcG1fcmVzdG9yZV9jb3JlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyByZWdzX3NhdmVbMTZdOwotCi0JLyogZW5zdXJlIHRoZSBkZWJ1ZyBpcyBpbml0aWFsaXNlZCAoaWYgZW5hYmxlZCkgKi8KLQotCXMzYzI0MTBfcG1fZGVidWdfaW5pdCgpOwotCi0JREJHKCJzM2MyNDEwX3BtX2VudGVyKCVkKVxuIiwgc3RhdGUpOwotCi0JaWYgKHBtX2NwdV9wcmVwID09IE5VTEwgfHwgcG1fY3B1X3NsZWVwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IG5vIGNwdSBzbGVlcCBmdW5jdGlvbnMgc2V0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY2hlY2sgaWYgd2UgaGF2ZSBhbnl0aGluZyB0byB3YWtlLXVwIHdpdGguLi4gYmFkIHRoaW5ncyBzZWVtCi0JICogdG8gaGFwcGVuIGlmIHlvdSBzdXNwZW5kIHdpdGggbm8gd2FrZXVwIChzeXN0ZW0gd2lsbCBvZnRlbgotCSAqIHJlcXVpcmUgYSBmdWxsIHBvd2VyLWN5Y2xlKQotCSovCi0KLQlpZiAoIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2ludGFsbG93KSAmJgotCSAgICAhYW55X2FsbG93ZWQoczNjX2lycXdha2VfZWludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRhbGxvdykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gc291cmNlcyBlbmFibGVkIGZvciB3YWtlLXVwIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkFib3J0aW5nIHNsZWVwXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogcHJlcGFyZSBjaGVjayBhcmVhIGlmIGNvbmZpZ3VyZWQgKi8KLQotCXMzYzI0MTBfcG1fY2hlY2tfcHJlcGFyZSgpOwotCi0JLyogc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHJlY292ZXJ5IGJsb2NrICovCi0KLQlzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyA9IHZpcnRfdG9fcGh5cyhyZWdzX3NhdmUpOwotCi0JREJHKCJzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cz0weCUwOGx4XG4iLCBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyk7Ci0KLQkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KLQotCXMzYzI0MTBfcG1fc2F2ZV9ncGlvcygpOwotCXMzYzI0MTBfcG1fZG9fc2F2ZShtaXNjX3NhdmUsIEFSUkFZX1NJWkUobWlzY19zYXZlKSk7Ci0JczNjMjQxMF9wbV9kb19zYXZlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKLQlzM2MyNDEwX3BtX2RvX3NhdmUodWFydF9zYXZlLCBBUlJBWV9TSVpFKHVhcnRfc2F2ZSkpOwotCi0JLyogc2V0IHRoZSBpcnEgY29uZmlndXJhdGlvbiBmb3Igd2FrZSAqLwotCi0JczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50KCk7Ci0KLQlEQkcoInNsZWVwOiBpcnEgd2FrZXVwIG1hc2tzOiAlMDhseCwlMDhseFxuIiwKLQkgICAgczNjX2lycXdha2VfaW50bWFzaywgczNjX2lycXdha2VfZWludG1hc2spOwotCi0JX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2ludG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKLQlfX3Jhd193cml0ZWwoczNjX2lycXdha2VfZWludG1hc2ssIFMzQzI0MTBfRUlOVE1BU0spOwotCi0JLyogYWNrIGFueSBvdXRzdGFuZGluZyBleHRlcm5hbCBpbnRlcnJ1cHRzIGJlZm9yZSB3ZSBnbyB0byBzbGVlcCAqLwotCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLCBTM0MyNDEwX0VJTlRQRU5EKTsKLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRQTkQpLCBTM0MyNDEwX0lOVFBORCk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwgUzNDMjQxMF9TUkNQTkQpOwotCi0JLyogY2FsbCBjcHUgc3BlY2lmaWMgcHJlcGFyYXRpb24gKi8KLQotCXBtX2NwdV9wcmVwKCk7Ci0KLQkvKiBmbHVzaCBjYWNoZSBiYWNrIHRvIHJhbSAqLwotCi0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0KLQlzM2MyNDEwX3BtX2NoZWNrX3N0b3JlKCk7Ci0KLQkvKiBzZW5kIHRoZSBjcHUgdG8gc2xlZXAuLi4gKi8KLQotCV9fcmF3X3dyaXRlbCgweDAwLCBTM0MyNDEwX0NMS0NPTik7ICAvKiB0dXJuIG9mZiBjbG9ja3Mgb3ZlciBzbGVlcCAqLwotCi0JLyogczNjMjQxMF9jcHVfc2F2ZSB3aWxsIGFsc28gYWN0IGFzIG91ciByZXR1cm4gcG9pbnQgZnJvbSB3aGVuCi0JICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUsIHNvIHVzZSB0aGUgcmV0dXJuCi0JICogY29kZSB0byBkaWZmZXJlbnRpYXRlIHJldHVybiBmcm9tIHNhdmUgYW5kIHJldHVybiBmcm9tIHNsZWVwICovCi0KLQlpZiAoczNjMjQxMF9jcHVfc2F2ZShyZWdzX3NhdmUpID09IDApIHsKLQkJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JCXBtX2NwdV9zbGVlcCgpOwotCX0KLQotCS8qIHJlc3RvcmUgdGhlIGNwdSBzdGF0ZSAqLwotCi0JY3B1X2luaXQoKTsKLQotCS8qIHJlc3RvcmUgdGhlIHN5c3RlbSBzdGF0ZSAqLwotCi0JczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOwotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShtaXNjX3NhdmUsIEFSUkFZX1NJWkUobWlzY19zYXZlKSk7Ci0JczNjMjQxMF9wbV9kb19yZXN0b3JlKHVhcnRfc2F2ZSwgQVJSQVlfU0laRSh1YXJ0X3NhdmUpKTsKLQlzM2MyNDEwX3BtX3Jlc3RvcmVfZ3Bpb3MoKTsKLQotCXMzYzI0MTBfcG1fZGVidWdfaW5pdCgpOwotCi0JLyogY2hlY2sgd2hhdCBpcnEgKGlmIGFueSkgcmVzdG9yZWQgdGhlIHN5c3RlbSAqLwotCi0JREJHKCJwb3N0IHNsZWVwOiBJUlFzIDB4JTA4eCwgMHglMDh4XG4iLAotCSAgICBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCi0JICAgIF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpKTsKLQotCXMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDAsIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKLQkJCQkgICAgczNjX2lycXdha2VfaW50bWFzayk7Ci0KLQlzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQ0LTQsIF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLAotCQkJCSAgICBzM2NfaXJxd2FrZV9laW50bWFzayk7Ci0KLQlEQkcoInBvc3Qgc2xlZXAsIHByZXBhcmluZyB0byByZXR1cm5cbiIpOwotCi0JczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKCk7Ci0KLQkvKiBvaywgbGV0J3MgcmV0dXJuIGZyb20gc2xlZXAgKi8KLQotCURCRygiUzNDMjQxMCBQTSBSZXN1bWUgKHBvc3QtcmVzdG9yZSlcbiIpOwotCXJldHVybiAwOworCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOworCXMzY19wbV9kb19yZXN0b3JlKG1pc2Nfc2F2ZSwgQVJSQVlfU0laRShtaXNjX3NhdmUpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzM2MyNDEwX3BtX29wcyA9IHsKLQkuZW50ZXIJCT0gczNjMjQxMF9wbV9lbnRlciwKLQkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKLX07Ci0KLS8qIHMzYzI0MTBfcG1faW5pdAotICoKLSAqIEF0dGFjaCB0aGUgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZAotICogZnJvbSB0aGUgYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gaWYgdGhlIGJvYXJkIHN1cHBvcnRzCi0gKiBpdC4KLSovCi0KLWludCBfX2luaXQgczNjMjQxMF9wbV9pbml0KHZvaWQpCit2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCkKIHsKLQlwcmludGsoIlMzQzI0MTAgUG93ZXIgTWFuYWdlbWVudCwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKLQotCXN1c3BlbmRfc2V0X29wcygmczNjMjQxMF9wbV9vcHMpOwotCXJldHVybiAwOworCXMzY19wbV9kb19zYXZlKG1pc2Nfc2F2ZSwgQVJSQVlfU0laRShtaXNjX3NhdmUpKTsKKwlzM2NfcG1fZG9fc2F2ZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7CiB9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCmluZGV4IGMxZGU2YmIuLjEzNjQzMTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAKIHN0YXRpYyBpbnQgczNjMjQ0eF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzM2MyNDEwX3BtX2RvX3NhdmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CisJczNjX3BtX2RvX3NhdmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgczNjMjQ0eF9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CisJczNjX3BtX2RvX3Jlc3RvcmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKaW5kZXggNzY1OTRiMi4uZTczZTNiNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCkBAIC00MSwyNSArNDEsMTMgQEAKIAogCS50ZXh0CiAKLQkvKiBzM2MyNDEwX2NwdV9zYXZlCi0JICoKLQkgKiBzYXZlIGVub3VnaCBvZiB0aGUgQ1BVIHN0YXRlIHRvIGFsbG93IHVzIHRvIHJlLXN0YXJ0Ci0JICogcG0uYyBjb2RlLiBhcyB3ZSBzdG9yZSBpdGVtcyBsaWtlIHRoZSBzcC9sciwgd2Ugd2lsbAotCSAqIGVuZCB1cCByZXR1cm5pbmcgZnJvbSB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIGNwdSByZXN1bWVzCi0JICogc28gdGhlIHJldHVybiB2YWx1ZSBpcyBzZXQgdG8gbWFyayB0aGlzLgotCSAqCi0JICogVGhpcyBhcmFuZ2VtZW50IG1lYW5zIHdlIGF2b2lkIGhhdmluZyB0byBmbHVzaCB0aGUgY2FjaGUKLQkgKiBmcm9tIHRoaXMgY29kZS4KKwkvKiBzM2NfY3B1X3NhdmUKIAkgKgogCSAqIGVudHJ5OgotCSAqCXIwID0gcG9pbnRlciB0byBzYXZlIGJsb2NrCi0JICoKLQkgKiBleGl0OgotCSAqCXIwID0gMCA9PiB3ZSBzdG9yZWQgZXZlcnl0aGluZwotCSAqCSAgICAgMSA9PiByZXN1bWVkIGZyb20gc2xlZXAKKwkgKglyMCA9IHNhdmUgYWRkcmVzcyAodmlydHVhbCBhZGRyIG9mIHMzY19zbGVlcF9zYXZlX3BoeXMpCiAJKi8KIAotRU5UUlkoczNjMjQxMF9jcHVfc2F2ZSkKK0VOVFJZKHMzY19jcHVfc2F2ZSkKIAlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KIAogCUBAIHN0b3JlIGNvLXByb2Nlc3NvciByZWdpc3RlcnMKQEAgLTcxLDIwICs1OSwyNSBAQAogCiAJc3RtaWEJcjAsIHsgcjQgLSByMTMgfQogCi0JbW92CXIwLCAjMAotCWxkbWZkCXNwLCB7IHI0IC0gcjEyLCBwYyB9CisJQEAgd3JpdGUgb3VyIHN0YXRlIGJhY2sgdG8gUkFNCisJYmwJczNjX3BtX2NiX2ZsdXNoY2FjaGUKIAorCUBAIGp1bXAgdG8gZmluYWwgY29kZSB0byBzZW5kIHN5c3RlbSB0byBzbGVlcAorCWxkcglyMCwgPXBtX2NwdV9zbGVlcAorCUBAbGRyCXBjLCBbIHIwIF0KKwlsZHIJcjAsIFsgcjAgXQorCW1vdglwYywgcjAKKwkKIAlAQCByZXR1cm4gdG8gdGhlIGNhbGxlciwgYWZ0ZXIgaGF2aW5nIHRoZSBNTVUKIAlAQCB0dXJuZWQgb24sIHRoaXMgcmVzdG9yZXMgdGhlIGxhc3QgYml0cyBmcm9tIHRoZQogCUBAIHN0YWNrCiByZXN1bWVfd2l0aF9tbXU6Ci0JbW92CXIwLCAjMQogCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQogCiAJLmx0b3JnCiAKIAlAQCB0aGUgbmV4dCBiaXRzIHNpdCBpbiB0aGUgLmRhdGEgc2VnbWVudCwgZXZlbiB0aG91Z2ggdGhleQotCUBAIGhhcHBlbiB0byBiZSBjb2RlLi4uIHRoZSBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyBuZWVkcyB0byBiZQorCUBAIGhhcHBlbiB0byBiZSBjb2RlLi4uIHRoZSBzM2Nfc2xlZXBfc2F2ZV9waHlzIG5lZWRzIHRvIGJlCiAJQEAgYWNjZXNzZWQgYnkgdGhlIHJlc3VtZSBjb2RlIGJlZm9yZSBpdCBjYW4gcmVzdG9yZSB0aGUgTU1VLgogCUBAIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUgaGFzIHRvIGJlIGNsb3NlIGVub3VnaCBmb3IgdGhlCiAJQEAgY29kZSB0byByZWFkIGl0Li4uIHNpbmNlIHRoZSAudGV4dCBzZWdtZW50IG5lZWRzIHRvIGJlIFJPLApAQCAtOTIsMTkgKzg1LDE5IEBACiAKIAkuZGF0YQogCi0JLmdsb2JhbAlzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cwotczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM6CisJLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCitzM2Nfc2xlZXBfc2F2ZV9waHlzOgogCS53b3JkCTAKIAogCiAJLyogc2xlZXAgbWFnaWMsIHRvIGFsbG93IHRoZSBib290bG9hZGVyIHRvIGNoZWNrIGZvciBhbiB2YWxpZAogCSAqIGltYWdlIHRvIHJlc3VtZSB0by4gTXVzdCBiZSB0aGUgZmlyc3Qgd29yZCBiZWZvcmUgdGhlCi0JICogczNjMjQxMF9jcHVfcmVzdW1lIGVudHJ5LgorCSAqIHMzY19jcHVfcmVzdW1lIGVudHJ5LgogCSovCiAKIAkud29yZAkweDJiZWRmMDBkCiAKLQkvKiBzM2MyNDEwX2NwdV9yZXN1bWUKKwkvKiBzM2NfY3B1X3Jlc3VtZQogCSAqCiAJICogcmVzdW1lIGNvZGUgZW50cnkgZm9yIGJvb3Rsb2FkZXIgdG8gY2FsbAogCSAqCkBAIC0xMTMsNyArMTA2LDcgQEAKIAkgKiBtdXN0IG5vdCB3cml0ZSB0byB0aGUgY29kZSBzZWdtZW50IChjb2RlIGlzIHJlYWQtb25seSkKIAkqLwogCi1FTlRSWShzM2MyNDEwX2NwdV9yZXN1bWUpCitFTlRSWShzM2NfY3B1X3Jlc3VtZSkKIAltb3YJcjAsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERQogCW1zcgljcHNyX2MsIHIwCiAKQEAgLTE0NSw3ICsxMzgsNyBAQAogCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUBAIGludmFsaWRhdGUgSSAmIEQgVExCcwogCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUBAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzCiAKLQlsZHIJcjAsIHMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzCUAgYWRkcmVzcyBvZiByZXN0b3JlIGJsb2NrCisJbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCQlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jawogCWxkbWlhCXIwLCB7IHI0IC0gcjEzIH0KIAogCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCQlAIFBJRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jCmluZGV4IGZiZGUxODMuLjkxZjQ5YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1LmMKQEAgLTk2LDYgKzk2LDExIEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0M2NFhYX1BBX0dQSU8pLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQzY0WFhfVkFfTU9ERU0sCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0M2NFhYX1BBX01PREVNKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby1tZW1wb3J0LmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby1tZW1wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNDJmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLW1lbXBvcnQuaApAQCAtMCwwICsxLDI1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby1tZW1wb3J0LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gR1BJTyBtZW1vcnkgcG9ydCByZWdpc3RlciBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19BU01fUExBVF9TM0M2NFhYX1JFR1NfR1BJT19NRU1QT1JUX0gKKyNkZWZpbmUgX19BU01fUExBVF9TM0M2NFhYX1JFR1NfR1BJT19NRU1QT1JUX0ggX19GSUxFX18KKworI2RlZmluZSBTM0M2NFhYX01FTTBDT05TVE9QCVMzQzY0WFhfR1BJT1JFRygweDFCMCkKKyNkZWZpbmUgUzNDNjRYWF9NRU0xQ09OU1RPUAlTM0M2NFhYX0dQSU9SRUcoMHgxQjQpCisKKyNkZWZpbmUgUzNDNjRYWF9NRU0wQ09OU0xQMAlTM0M2NFhYX0dQSU9SRUcoMHgxQzApCisjZGVmaW5lIFMzQzY0WFhfTUVNMENPTlNMUDEJUzNDNjRYWF9HUElPUkVHKDB4MUM0KQorI2RlZmluZSBTM0M2NFhYX01FTTFDT05TTFAJUzNDNjRYWF9HUElPUkVHKDB4MUM4KQorCisjZGVmaW5lIFMzQzY0WFhfTUVNMERSVkNPTglTM0M2NFhYX0dQSU9SRUcoMHgxRDApCisjZGVmaW5lIFMzQzY0WFhfTUVNMURSVkNPTglTM0M2NFhYX0dQSU9SRUcoMHgxRDQpCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX1MzQzY0WFhfUkVHU19HUElPX01FTVBPUlRfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaAppbmRleCA3NWI4NzNkLi44MWY3ZjZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLmgKQEAgLTEzLDIzICsxMywxNzUgQEAKIAogLyogQmFzZSBhZGRyZXNzZXMgZm9yIGVhY2ggb2YgdGhlIGJhbmtzICovCiAKLSNkZWZpbmUgUzNDNjRYWF9HUEFfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDAwKQotI2RlZmluZSBTM0M2NFhYX0dQQl9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwMjApCi0jZGVmaW5lIFMzQzY0WFhfR1BDX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDA0MCkKLSNkZWZpbmUgUzNDNjRYWF9HUERfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDYwKQotI2RlZmluZSBTM0M2NFhYX0dQRV9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwODApCi0jZGVmaW5lIFMzQzY0WFhfR1BGX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDBBMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEdfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMEMwKQotI2RlZmluZSBTM0M2NFhYX0dQSF9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwRTApCi0jZGVmaW5lIFMzQzY0WFhfR1BJX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDEwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEpfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMTIwKQotI2RlZmluZSBTM0M2NFhYX0dQS19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDA4MDApCi0jZGVmaW5lIFMzQzY0WFhfR1BMX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDgxMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE1fQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODIwKQotI2RlZmluZSBTM0M2NFhYX0dQTl9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDA4MzApCi0jZGVmaW5lIFMzQzY0WFhfR1BPX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDE0MCkKLSNkZWZpbmUgUzNDNjRYWF9HUFBfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMTYwKQotI2RlZmluZSBTM0M2NFhYX0dQUV9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxODApCisjZGVmaW5lIFMzQzY0WFhfR1BJT1JFRyhyZWcpCShTM0M2NFhYX1ZBX0dQSU8gKyAocmVnKSkKKworI2RlZmluZSBTM0M2NFhYX0dQQV9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwMDApCisjZGVmaW5lIFMzQzY0WFhfR1BCX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUENfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMDQwKQorI2RlZmluZSBTM0M2NFhYX0dQRF9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwNjApCisjZGVmaW5lIFMzQzY0WFhfR1BFX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDA4MCkKKyNkZWZpbmUgUzNDNjRYWF9HUEZfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMEEwKQorI2RlZmluZSBTM0M2NFhYX0dQR19CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwQzApCisjZGVmaW5lIFMzQzY0WFhfR1BIX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDBFMCkKKyNkZWZpbmUgUzNDNjRYWF9HUElfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMTAwKQorI2RlZmluZSBTM0M2NFhYX0dQSl9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAxMjApCisjZGVmaW5lIFMzQzY0WFhfR1BLX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUExfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwODEwKQorI2RlZmluZSBTM0M2NFhYX0dQTV9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDA4MjApCisjZGVmaW5lIFMzQzY0WFhfR1BOX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDgzMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE9fQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMTQwKQorI2RlZmluZSBTM0M2NFhYX0dQUF9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAxNjApCisjZGVmaW5lIFMzQzY0WFhfR1BRX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDE4MCkKKworLyogU1BDT04gKi8KKworI2RlZmluZSBTM0M2NFhYX1NQQ09OCQlTM0M2NFhYX0dQSU9SRUcoMHgxQTApCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNX01BU0sJCSgweDMgPDwgMzApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0NBTV9TSElGVAkJKDMwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9DQU1fMm1BCQkoMHgwIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9DQU1fNG1BCQkoMHgxIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9DQU1fN21BCQkoMHgyIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9DQU1fOW1BCQkoMHgzIDw8IDMwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJX1NISUZUCSgyOCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNTUElfMm1BCQkoMHgwIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV80bUEJCSgweDEgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJXzdtQQkJKDB4MiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNTUElfOW1BCQkoMHgzIDw8IDI4KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DX1NISUZUCSgyNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNNTUNfMm1BCQkoMHgwIDw8IDI2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ180bUEJCSgweDEgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DXzdtQQkJKDB4MiA8PCAyNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNNTUNfOW1BCQkoMHgzIDw8IDI2KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9MQ0RfU0hJRlQJCSgyNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTENEXzJtQQkJKDB4MCA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTENEXzRtQQkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTENEXzdtQQkJKDB4MiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTENEXzltQQkJKDB4MyA8PCAyNCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV9TSElGVAkoMjIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX01PREVNXzJtQQkJKDB4MCA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fNG1BCQkoMHgxIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV83bUEJCSgweDIgPDwgMjIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX01PREVNXzltQQkJKDB4MyA8PCAyMikKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX25SU1RPVVRfT0VOCQkoMSA8PCAyMSkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxX01BU0sJKDB4MyA8PCAxOCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fU1BJQ0xLMV9TSElGVAkoMTgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX1NQSUNMSzFfMm1BCSgweDAgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX1NQSUNMSzFfNG1BCSgweDEgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX1NQSUNMSzFfN21BCSgweDIgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX1NQSUNMSzFfOW1BCSgweDMgPDwgMTgpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfU0hJRlQJKDE2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRFFTX1BVRF9ESVNBQkxFRAkoMHgwIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRFFTX1BVRF9ET1dOCQkoMHgxIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRFFTX1BVRF9VUAkJKDB4MiA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQxX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDFfU0hJRlQJCSgxNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMV9ESVNBQkxFRAkoMHgwIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQxX0RPV04JCSgweDEgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDFfVVAJCSgweDIgPDwgMTQpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMF9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQwX1NISUZUCQkoMTIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDBfRElTQUJMRUQJKDB4MCA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMF9ET1dOCQkoMHgxIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQwX1VQCQkoMHgyIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMF9EX1BVRF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMF9EX1BVRF9TSElGVAkJKDgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMF9EX1BVRF9ESVNBQkxFRAkoMHgwIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMF9EX1BVRF9ET1dOCQkoMHgxIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMF9EX1BVRF9VUAkJKDB4MiA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fVVNCSF9ETVBECQkJKDEgPDwgNykKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9VU0JIX0RQUEQJCQkoMSA8PCA2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX1VTQkhfUFVTVzIJCSgxIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fVVNCSF9QVVNXMQkJKDEgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9VU0JIX1NVU1BORAkJKDEgPDwgMykKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfU0hJRlQJCSgwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfSE9TVAkJKDB4MCA8PCAwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfUkdCCQkoMHgxIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTENEX1NFTF82MDZfNjU2CQkoMHgyIDw8IDApCisKKworLyogRXh0ZXJuYWwgaW50ZXJydXB0IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFMzQzY0WFhfRUlOVDEyQ09OCVMzQzY0WFhfR1BJT1JFRygweDIwMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMzRDT04JUzNDNjRYWF9HUElPUkVHKDB4MjA0KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ1NkNPTglTM0M2NFhYX0dQSU9SRUcoMHgyMDgpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDc4Q09OCVMzQzY0WFhfR1BJT1JFRygweDIwQykKKyNkZWZpbmUgUzNDNjRYWF9FSU5UOUNPTglTM0M2NFhYX0dQSU9SRUcoMHgyMTApCisKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMTJGTFRDT04JUzNDNjRYWF9HUElPUkVHKDB4MjIwKQorI2RlZmluZSBTM0M2NFhYX0VJTlQzNEZMVENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMjQpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDU2RkxUQ09OCVMzQzY0WFhfR1BJT1JFRygweDIyOCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNzhGTFRDT04JUzNDNjRYWF9HUElPUkVHKDB4MjJDKQorI2RlZmluZSBTM0M2NFhYX0VJTlQ5RkxUQ09OCVMzQzY0WFhfR1BJT1JFRygweDIzMCkKKworI2RlZmluZSBTM0M2NFhYX0VJTlQxMk1BU0sJUzNDNjRYWF9HUElPUkVHKDB4MjQwKQorI2RlZmluZSBTM0M2NFhYX0VJTlQzNE1BU0sJUzNDNjRYWF9HUElPUkVHKDB4MjQ0KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ1Nk1BU0sJUzNDNjRYWF9HUElPUkVHKDB4MjQ4KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ3OE1BU0sJUzNDNjRYWF9HUElPUkVHKDB4MjRDKQorI2RlZmluZSBTM0M2NFhYX0VJTlQ5TUFTSwlTM0M2NFhYX0dQSU9SRUcoMHgyNTApCisKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMTJQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI2MCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMzRQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI2NCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNTZQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI2OCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNzhQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI2QykKKyNkZWZpbmUgUzNDNjRYWF9FSU5UOVBFTkQJUzNDNjRYWF9HUElPUkVHKDB4MjcwKQorCisjZGVmaW5lIFMzQzY0WFhfUFJJT1JJVFkJUzNDNjRYWF9HUElPUkVHKDB4MjgwKQorI2RlZmluZSBTM0M2NFhYX1BSSU9SSVRZX0FSQih4KQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgUzNDNjRYWF9TRVJWSUNFCQlTM0M2NFhYX0dQSU9SRUcoMHgyODQpCisjZGVmaW5lIFMzQzY0WFhfU0VSVklDRVBFTkQJUzNDNjRYWF9HUElPUkVHKDB4Mjg4KQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBDT04wCVMzQzY0WFhfR1BJT1JFRygweDkwMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMENPTjEJUzNDNjRYWF9HUElPUkVHKDB4OTA0KQorI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMAlTM0M2NFhYX0dQSU9SRUcoMHg5MTApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04xCVMzQzY0WFhfR1BJT1JFRygweDkxNCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjIJUzNDNjRYWF9HUElPUkVHKDB4OTE4KQorI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMwlTM0M2NFhYX0dQSU9SRUcoMHg5MUMpCisKKyNkZWZpbmUgUzNDNjRYWF9FSU5UME1BU0sJUzNDNjRYWF9HUElPUkVHKDB4OTIwKQorI2RlZmluZSBTM0M2NFhYX0VJTlQwUEVORAlTM0M2NFhYX0dQSU9SRUcoMHg5MjQpCisKKy8qIEdQSU8gc2xlZXAgY29uZmlndXJhdGlvbiAqLworCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFAJUzNDNjRYWF9HUElPUkVHKDB4ODgwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfVERPX1BVTExET1dOCSgxIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQX0NLRTFJTklUCSgxIDw8IDUpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9SU1RPVVRfTUFTSwkoMHgzIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQX1JTVE9VVF9PVVQwCSgweDAgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfUlNUT1VUX09VVDEJKDB4MSA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9SU1RPVVRfSElaCSgweDIgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9LUENPTF9NQVNLCSgweDMgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9LUENPTF9PVVQwCSgweDAgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9LUENPTF9PVVQxCSgweDEgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9LUENPTF9JTlAJKDB4MiA8PCAwKQorCisKKyNkZWZpbmUgUzNDNjRYWF9TTFBFTgkJUzNDNjRYWF9HUElPUkVHKDB4OTMwKQorCisjZGVmaW5lIFMzQzY0WFhfU0xQRU5fVVNFX3hTTFAJCSgxIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU0xQRU5fQ0ZHX0JZU0xQRU4JKDEgPDwgMSkKIAogI2VuZGlmIC8qIF9fQVNNX1BMQVRfUzNDNjRYWF9SRUdTX0dQSU9fSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtbW9kZW0uaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1tb2RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Zjc3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtbW9kZW0uaApAQCAtMCwwICsxLDMxIEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtbW9kZW0uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzY0WFggLSBtb2RlbSBibG9jayByZWdpc3RlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX1BMQVRfUzNDNjRYWF9SRUdTX01PREVNX0gKKyNkZWZpbmUgX19QTEFUX1MzQzY0WFhfUkVHU19NT0RFTV9IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTVJFRyh4KQkoUzNDNjRYWF9WQV9NT0RFTSArICh4KSkKKworI2RlZmluZSBTM0M2NFhYX01PREVNX0lOVDJBUAkJCVMzQzY0WFhfTU9ERU1SRUcoMHgwKQorI2RlZmluZSBTM0M2NFhYX01PREVNX0lOVDJNT0RFTQkJCVMzQzY0WFhfTU9ERU1SRUcoMHg0KQorI2RlZmluZSBTM0M2NFhYX01PREVNX01JRkNPTgkJCVMzQzY0WFhfTU9ERU1SRUcoMHg4KQorI2RlZmluZSBTM0M2NFhYX01PREVNX01JRlBDT04JCQlTM0M2NFhYX01PREVNUkVHKDB4QykKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9JTlRDTFIJCQlTM0M2NFhYX01PREVNUkVHKDB4MTApCisjZGVmaW5lIFMzQzY0WFhfTU9ERU1fRE1BX1RYQUREUgkJUzNDNjRYWF9NT0RFTVJFRygweDE0KQorI2RlZmluZSBTM0M2NFhYX01PREVNX0RNQV9SWEFERFIJCVMzQzY0WFhfTU9ERU1SRUcoMHgxOCkKKworI2RlZmluZSBNSUZQQ09OX0lOVDJNX0xFVkVMCQkJKDEgPDwgNCkKKyNkZWZpbmUgTUlGUENPTl9MQ0RfQllQQVNTCQkJKDEgPDwgMykKKworI2VuZGlmIC8qIF9fUExBVF9TM0M2NFhYX1JFR1NfTU9ERU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5cy5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5cy5oCmluZGV4IGQ4ZWQ4MjkuLjY5Yjc4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3Mtc3lzLmgKQEAgLTE3LDYgKzE3LDEwIEBACiAKICNkZWZpbmUgUzNDX1NZU1JFRyh4KQkJKFMzQ19WQV9TWVMgKyAoeCkpCiAKKyNkZWZpbmUgUzNDNjRYWF9BSEJfQ09OMAlTM0NfU1lTUkVHKDB4MTAwKQorI2RlZmluZSBTM0M2NFhYX0FIQl9DT04xCVMzQ19TWVNSRUcoMHgxMDQpCisjZGVmaW5lIFMzQzY0WFhfQUhCX0NPTjIJUzNDX1NZU1JFRygweDEwOCkKKwogI2RlZmluZSBTM0M2NFhYX09USEVSUwkJUzNDX1NZU1JFRygweDkwMCkKIAogI2RlZmluZSBTM0M2NFhYX09USEVSU19VU0JNQVNLCSgxIDw8IDE2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5c2Nvbi1wb3dlci5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5c2Nvbi1wb3dlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MGQ5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3Mtc3lzY29uLXBvd2VyLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXNjb24tcG93ZXIuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzY0WFggLSBzeXNjb24gcG93ZXIgYW5kIHNsZWVwIGNvbnRyb2wgcmVnaXN0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1MzQzY0WFhfUkVHU19TWVNDT05fUE9XRVJfSAorI2RlZmluZSBfX1BMQVRfUzNDNjRYWF9SRUdTX1NZU0NPTl9QT1dFUl9IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDNjRYWF9QV1JfQ0ZHCQkJCVMzQ19TWVNSRUcoMHg4MDQpCisKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfT1NDX09UR19ESVNBQkxFCQkoMSA8PCAxNykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfTU1DMl9ESVNBQkxFCQkoMSA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfTU1DMV9ESVNBQkxFCQkoMSA8PCAxNSkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfTU1DMF9ESVNBQkxFCQkoMSA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfSFNJX0RJU0FCTEUJCSgxIDw8IDEzKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19UU19ESVNBQkxFCQkoMSA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfUlRDX1RJQ0tfRElTQUJMRQkJKDEgPDwgMTEpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX1JUQ19BTEFSTV9ESVNBQkxFCSgxIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19NU01fRElTQUJMRQkJKDEgPDwgOSkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfS0VZX0RJU0FCTEUJCSgxIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0JBVEZfRElTQUJMRQkJKDEgPDwgNykKKworI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX01BU0sJCSgweDMgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9TSElGVAkJKDUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfSUdOT1JFCQkoMHgwIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfSURMRQkJKDB4MSA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX1NUT1AJCSgweDIgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9TTEVFUAkJKDB4MyA8PCA1KQorCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19CQVRGTFRfTUFTSwkJKDB4MyA8PCAzKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfQkFURkxUX1NISUZUCQkoMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9JR05PUkUJKDB4MCA8PCAzKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfQkFURkxUX0lSUQkJKDB4MSA8PCAzKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfQkFURkxUX1NMRUVQCQkoMHgzIDw8IDMpCisKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVF9XQUtFCQkoMSA8PCAyKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19PU0MyN19FTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9FSU5UX01BU0sJCQlTM0NfU1lTUkVHKDB4ODA4KQorCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMX0NGRwkJCVMzQ19TWVNSRUcoMHg4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfSVJPTV9PTgkJKDEgPDwgMzApCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9FVE1fT04JCSgxIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fU19PTgkJKDEgPDwgMTUpCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9GX09OCQkoMSA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfRE9NQUlOX1BfT04JCSgxIDw8IDEzKQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fSV9PTgkJKDEgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9HX09OCQkoMSA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfRE9NQUlOX1ZfT04JCSgxIDw8IDkpCisKKyNkZWZpbmUgUzNDNjRYWF9TVE9QX0NGRwkJCVMzQ19TWVNSRUcoMHg4MTQpCisKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX01FTU9SWV9BUk1fT04JCSgxIDw8IDI5KQorI2RlZmluZSBTM0M2NFhYX1NUT1BDRkdfVE9QX01FTU9SWV9PTgkJKDEgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfU1RPUENGR19BUk1fTE9HSUNfT04JCSgxIDw8IDE3KQorI2RlZmluZSBTM0M2NFhYX1NUT1BDRkdfVE9QX0xPR0lDX09OCQkoMSA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NUT1BDRkdfT1NDX0VOCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX1NMRUVQX0NGRwkJCVMzQ19TWVNSRUcoMHg4MTgpCisKKyNkZWZpbmUgUzNDNjRYWF9TTEVFUENGR19PU0NfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfU1RPUF9NRU1fQ0ZHCQkJUzNDX1NZU1JFRygweDgxYykKKworI2RlZmluZSBTM0M2NFhYX1NUT1BNRU1DRkdfTU9ERU1JRl9SRVRBSU4JKDEgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX0hPU1RJRl9SRVRBSU4JKDEgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX09UR19SRVRBSU4JCSgxIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19IU01DQ19SRVRBSU4JCSgxIDw8IDMpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19JUk9NX1JFVEFJTgkJKDEgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX0lSREFfUkVUQUlOCQkoMSA8PCAxKQorI2RlZmluZSBTM0M2NFhYX1NUT1BNRU1DRkdfTkZDT05fUkVUQUlOCQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfT1NDX1NUQUJMRQkJCVMzQ19TWVNSRUcoMHg4MjQpCisjZGVmaW5lIFMzQzY0WFhfUFdSX1NUQUJMRQkJCVMzQ19TWVNSRUcoMHg4MjgpCisKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBfU1RBVAkJCVMzQ19TWVNSRUcoMHg5MDgpCisKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX01NQzIJCQkoMSA8PCAxMSkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX01NQzEJCQkoMSA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX01NQzAJCQkoMSA8PCA5KQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfSFNJCQkJKDEgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX0JBVEZMVAkJKDEgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX01TTQkJCSgxIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9LRVkJCQkoMSA8PCA0KQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfVFMJCQkoMSA8PCAzKQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfUlRDX1RJQ0sJCSgxIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9SVENfQUxBUk0JCSgxIDw8IDEpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9FSU5UCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0JMS19QV1JfU1RBVAkJCVMzQ19TWVNSRUcoMHg5MGMpCisKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX0cJCQkoMSA8PCA3KQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfRVRNCQkJKDEgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX1MJCQkoMSA8PCA1KQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfRgkJCSgxIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9QCQkJKDEgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX0kJCQkoMSA8PCAyKQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfVgkJCSgxIDw8IDEpCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9UT1AJCQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfSU5GT1JNMAkJCQlTM0NfU1lTUkVHKDB4QTAwKQorI2RlZmluZSBTM0M2NFhYX0lORk9STTEJCQkJUzNDX1NZU1JFRygweEEwNCkKKyNkZWZpbmUgUzNDNjRYWF9JTkZPUk0yCQkJCVMzQ19TWVNSRUcoMHhBMDgpCisjZGVmaW5lIFMzQzY0WFhfSU5GT1JNMwkJCQlTM0NfU1lTUkVHKDB4QTBDKQorCisjZW5kaWYgLyogX19QTEFUX1MzQzY0WFhfUkVHU19TWVNDT05fUE9XRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLWVpbnQuYwppbmRleCBjZjUyNDgyLi40N2U1MTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLWVpbnQuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLWVpbnQuYwpAQCAtMjcsMjAgKzI3LDYgQEAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLS8qIEdQSU8gaXMgMHg3RjAwOHh4eCwgKi8KLSNkZWZpbmUgUzNDNjRYWF9HUElPUkVHKHgpCShTM0M2NFhYX1ZBX0dQSU8gKyAoeCkpCi0KLSNkZWZpbmUgUzNDNjRYWF9FSU5UMENPTjAJUzNDNjRYWF9HUElPUkVHKDB4OTAwKQotI2RlZmluZSBTM0M2NFhYX0VJTlQwQ09OMQlTM0M2NFhYX0dQSU9SRUcoMHg5MDQpCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04wCVMzQzY0WFhfR1BJT1JFRygweDkxMCkKLSNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjEJUzNDNjRYWF9HUElPUkVHKDB4OTE0KQotI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMglTM0M2NFhYX0dQSU9SRUcoMHg5MTgpCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04zCVMzQzY0WFhfR1BJT1JFRygweDkxQykKLQotI2RlZmluZSBTM0M2NFhYX0VJTlQwTUFTSwlTM0M2NFhYX0dQSU9SRUcoMHg5MjApCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBQRU5ECVMzQzY0WFhfR1BJT1JFRygweDkyNCkKLQotCiAjZGVmaW5lIGVpbnRfb2Zmc2V0KGlycSkJKChpcnEpIC0gSVJRX0VJTlQoMCkpCiAjZGVmaW5lIGVpbnRfaXJxX3RvX2JpdChpcnEpCSgxIDw8IGVpbnRfb2Zmc2V0KGlycSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IGI0MjExZDguLjk0NWUwZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFRodSBNYXIgMTIgMTg6MDE6NDUgMjAwOQorIyBMYXN0IHVwZGF0ZTogTW9uIE1hciAyMyAyMDowOTowMSAyMDA5CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTIxMjQsMyArMjEyNCwxMSBAQAogZm16d2VibW9kdWwJCU1BQ0hfRk1aV0VCTU9EVUwJRk1aV0VCTU9EVUwJCTIxMzQKIHJkNzh4MDBfbWFzYQkJTUFDSF9SRDc4WDAwX01BU0EJUkQ3OFgwMF9NQVNBCQkyMTM1CiBzbWFsbG9nZ2VyCQlNQUNIX1NNQUxMT0dHRVIJCVNNQUxMT0dHRVIJCTIxMzYKK2NjdzlwOTIxNQkJTUFDSF9DQ1c5UDkyMTUJCUNDVzlQOTIxNQkJMjEzNworZG0zNTVfbGVvcGFyZAkJTUFDSF9ETTM1NV9MRU9QQVJECURNMzU1X0xFT1BBUkQJCTIxMzgKK3RzMjE5CQkJTUFDSF9UUzIxOQkJVFMyMTkJCQkyMTM5Cit0bnlfYTkyNjMJCU1BQ0hfVE5ZX0E5MjYzCQlUTllfQTkyNjMJCTIxNDAKK2Fwb2xsbwkJCU1BQ0hfQVBPTExPCQlBUE9MTE8JCQkyMTQxCithdDkxY2FwOXN0awkJTUFDSF9BVDkxQ0FQOVNUSwlBVDkxQ0FQOVNUSwkJMjE0Mgorc3BjMzAwCQkJTUFDSF9TUEMzMDAJCVNQQzMwMAkJCTIxNDMKK2VrbwkJCU1BQ0hfRUtPCQlFS08JCQkyMTQ0CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwLmggYi9hcmNoL2FybS92ZnAvdmZwLmgKaW5kZXggOGRlODZlNC4uYzhjOThkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnAuaAorKysgYi9hcmNoL2FybS92ZnAvdmZwLmgKQEAgLTM3Nyw2ICszNzcsNCBAQAogCXUzMiBmbGFnczsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BNKQogZXh0ZXJuIHZvaWQgdmZwX3NhdmVfc3RhdGUodm9pZCAqbG9jYXRpb24sIHUzMiBmcGV4Yyk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBody5TIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKaW5kZXggYzkyYTA4Yi4uYTVhNGU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKQEAgLTE3Miw3ICsxNzIsNiBAQAogCQkJCQlAIHJldHJ5IHRoZSBmYXVsdGVkIGluc3RydWN0aW9uCiBFTkRQUk9DKHZmcF9zdXBwb3J0X2VudHJ5KQogCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKIEVOVFJZKHZmcF9zYXZlX3N0YXRlKQogCUAgU2F2ZSB0aGUgY3VycmVudCBWRlAgc3RhdGUKIAlAIHIwIC0gc2F2ZSBsb2NhdGlvbgpAQCAtMTkwLDcgKzE4OSw2IEBACiAJc3RtaWEJcjAsIHtyMSwgcjIsIHIzLCByMTJ9CUAgc2F2ZSBGUEVYQywgRlBTQ1IsIEZQSU5TVCwgRlBJTlNUMgogCW1vdglwYywgbHIKIEVORFBST0ModmZwX3NhdmVfc3RhdGUpCi0jZW5kaWYKIAogbGFzdF9WRlBfY29udGV4dF9hZGRyZXNzOgogCS53b3JkCWxhc3RfVkZQX2NvbnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCA5ZjQ3NmExLi43NTQ1N2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC0zNzcsNiArMzc3LDU1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdmZwX3BtX2luaXQodm9pZCkgeyB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKKy8qCisgKiBTeW5jaHJvbmlzZSB0aGUgaGFyZHdhcmUgVkZQIHN0YXRlIG9mIGEgdGhyZWFkIG90aGVyIHRoYW4gY3VycmVudCB3aXRoIHRoZQorICogc2F2ZWQgb25lLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHB0cmFjZSBtZWNoYW5pc20uCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCS8qCisJICogT24gU01QIHN5c3RlbXMsIHRoZSBWRlAgc3RhdGUgaXMgYXV0b21hdGljYWxseSBzYXZlZCBhdCBldmVyeQorCSAqIGNvbnRleHQgc3dpdGNoLiBXZSBtYXJrIHRoZSB0aHJlYWQgVkZQIHN0YXRlIGFzIGJlbG9uZ2luZyB0byBhCisJICogbm9uLWV4aXN0ZW50IENQVSBzbyB0aGF0IHRoZSBzYXZlZCBvbmUgd2lsbCBiZSByZWxvYWRlZCB3aGVuCisJICogbmVlZGVkLgorCSAqLworCXRocmVhZC0+dmZwc3RhdGUuaGFyZC5jcHUgPSBOUl9DUFVTOworfQorI2Vsc2UKK3ZvaWQgdmZwX3N5bmNfc3RhdGUoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKKwl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKKworCS8qCisJICogSWYgVkZQIGlzIGVuYWJsZWQsIHRoZSBwcmV2aW91cyBzdGF0ZSB3YXMgYWxyZWFkeSBzYXZlZCBhbmQKKwkgKiBsYXN0X1ZGUF9jb250ZXh0IHVwZGF0ZWQuCisJICovCisJaWYgKGZwZXhjICYgRlBFWENfRU4pCisJCWdvdG8gb3V0OworCisJaWYgKCFsYXN0X1ZGUF9jb250ZXh0W2NwdV0pCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBTYXZlIHRoZSBsYXN0IFZGUCBzdGF0ZSBvbiB0aGlzIENQVS4KKwkgKi8KKwlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKKwl2ZnBfc2F2ZV9zdGF0ZShsYXN0X1ZGUF9jb250ZXh0W2NwdV0sIGZwZXhjKTsKKwlmbXhyKEZQRVhDLCBmcGV4Yyk7CisKKwkvKgorCSAqIFNldCB0aGUgY29udGV4dCB0byBOVUxMIHRvIGZvcmNlIGEgcmVsb2FkIHRoZSBuZXh0IHRpbWUgdGhlIHRocmVhZAorCSAqIHVzZXMgdGhlIFZGUC4KKwkgKi8KKwlsYXN0X1ZGUF9jb250ZXh0W2NwdV0gPSBOVUxMOworCitvdXQ6CisJcHV0X2NwdSgpOworfQorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogLyoKQEAgLTQyNyw2ICs0NzYsMTggQEAKIAkJICogaW4gcGxhY2U7IHJlcG9ydCBWRlAgc3VwcG9ydCB0byB1c2Vyc3BhY2UuCiAJCSAqLwogCQllbGZfaHdjYXAgfD0gSFdDQVBfVkZQOworI2lmZGVmIENPTkZJR19WRlB2MworCQlpZiAoVkZQX2FyY2ggPj0gMykgeworCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1ZGUHYzOworCisJCQkvKgorCQkJICogQ2hlY2sgZm9yIFZGUHYzIEQxNi4gQ1BVcyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24KKwkJCSAqIG9ubHkgaGF2ZSAxNiB4IDY0Yml0IHJlZ2lzdGVycy4KKwkJCSAqLworCQkJaWYgKCgoZm1yeChNVkZSMCkgJiBNVkZSMF9BX1NJTURfTUFTSykpID09IDEpCisJCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1ZGUHYzRDE2OworCQl9CisjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVPTgogCQkvKgogCQkgKiBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBBZHZhbmNlZCBTSU1ECmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL0tjb25maWcgYi9hcmNoL2F2cjMyL0tjb25maWcKaW5kZXggYjE4OTY4MC4uMDVmZTMwNSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9LY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvS2NvbmZpZwpAQCAtMTgxLDcgKzE4MSw3IEBACiBjb25maWcgUVVJQ0tMSVNUCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgSEFWRV9BUkNIX0JPT1RNRU1fTk9ERQorY29uZmlnIEhBVkVfQVJDSF9CT09UTUVNCiAJZGVmX2Jvb2wgbgogCiBjb25maWcgQVJDSF9IQVZFX01FTU9SWV9QUkVTRU5UCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMKaW5kZXggYTk4YzZkZC4uNTU5YmJjYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMTZ4Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAzNTg2M2YyLi4wNGM4NjA2IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBhMTRhYTViLi4xNGNjNzM3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtNCw3ICs0LDcgQEAKICNpZm5kZWYgX19BU01fQVZSMzJfU1dBQl9ICiAjZGVmaW5lIF9fQVNNX0FWUjMyX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggZWQwOTIzOS4uMjQ1YjJlZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAogCQkiMToJbGQuIiBzdWZmaXggIgklMSwgJTMJCQlcbiIJXAogCQkiMjoJCQkJCQlcbiIJXAotCQkiCS5zZWN0aW9uIC5maXh1cCwgXCJheFwiCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAxCQkJCVxuIglcCiAJCSIzOgltb3YJJTAsICU0CQkJCVxuIglcCiAJCSIJcmptcAkyYgkJCQlcbiIJXAotCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDAJCQkJXG4iCVwKIAkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIgkJXG4iCVwKIAkJIgkubG9uZwkxYiwgM2IJCQkJXG4iCVwKIAkJIgkucHJldmlvdXMJCQkJXG4iCVwKQEAgLTI5NSwxMCArMjk1LDEwIEBACiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCiAJCSIxOglzdC4iIHN1ZmZpeCAiCSUxLCAlMwkJCVxuIglcCiAJCSIyOgkJCQkJCVxuIglcCi0JCSIJLnNlY3Rpb24gLmZpeHVwLCBcImF4XCIJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDEJCQkJXG4iCVwKIAkJIjM6CW1vdgklMCwgJTQJCQkJXG4iCVwKIAkJIglyam1wCTJiCQkJCVxuIglcCi0JCSIJLnByZXZpb3VzCQkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMAkJCQlcbiIJXAogCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsIFwiYVwiCQlcbiIJXAogCQkiCS5sb25nCTFiLCAzYgkJCQlcbiIJXAogCQkiCS5wcmV2aW91cwkJCQlcbiIJXApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMgYi9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUwppbmRleCAzM2Q0OTM3Li4wMDlhODAxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUwpAQCAtMTUwLDEwICsxNTAsMTAgQEAKIAl0bGJtaXNzX3Jlc3RvcmUKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19wYWdlX2ZhdWx0CisJY2FsbAlkb19wYWdlX2ZhdWx0CiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogCS5hbGlnbgkyCkBAIC0yNTAsNyArMjUwLDcgQEAKIAogCS5nbG9iYWwgcmV0X2Zyb21fZm9yawogcmV0X2Zyb21fZm9yazoKLQlyY2FsbCAgIHNjaGVkdWxlX3RhaWwKKwljYWxsICAgc2NoZWR1bGVfdGFpbAogCiAJLyogY2hlY2sgZm9yIHN5c2NhbGwgdHJhY2luZyAqLwogCWdldF90aHJlYWRfaW5mbyByMApAQCAtMjYxLDcgKzI2MSw3IEBACiAKIHN5c2NhbGxfdHJhY2VfZW50ZXI6CiAJcHVzaG0JcjgtcjEyCi0JcmNhbGwJc3lzY2FsbF90cmFjZQorCWNhbGwJc3lzY2FsbF90cmFjZQogCXBvcG0JcjgtcjEyCiAJcmptcAlzeXNjYWxsX3RyYWNlX2NvbnQKIApAQCAtMjY5LDE0ICsyNjksMTQgQEAKIAlibGQJcjEsIFRJRl9TWVNDQUxMX1RSQUNFCiAJYnJjYwkxZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc3lzY2FsbF90cmFjZQorCWNhbGwJc3lzY2FsbF90cmFjZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCiAxOglibGQJcjEsIFRJRl9ORUVEX1JFU0NIRUQKIAlicmNjCTJmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzY2hlZHVsZQorCWNhbGwJc2NoZWR1bGUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCTFiCkBAIC0yODcsNyArMjg3LDcgQEAKIAl1bm1hc2tfaW50ZXJydXB0cwogCW1vdglyMTIsIHNwCiAJbW92CXIxMSwgcjAKLQlyY2FsbAlkb19ub3RpZnlfcmVzdW1lCisJY2FsbAlkb19ub3RpZnlfcmVzdW1lCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAkxYgpAQCAtMzk0LDcgKzM5NCw3IEBACiAKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fY3JpdGljYWxfZXhjZXB0aW9uCisJY2FsbAlkb19jcml0aWNhbF9leGNlcHRpb24KIAogCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4uLiAqLwogYmFkX3JldHVybjoKQEAgLTQwNywxOCArNDA3LDE4IEBACiBkb19idXNfZXJyb3Jfd3JpdGU6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltb3YJcjExLCAxCiAJcmptcAkxZgogCiBkb19idXNfZXJyb3JfcmVhZDoKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1vdglyMTEsIDAKIDE6CW1mc3IJcjEyLCBTWVNSRUdfQkVBUgogCW1vdglyMTAsIHNwCi0JcmNhbGwJZG9fYnVzX2Vycm9yCisJY2FsbAlkb19idXNfZXJyb3IKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTEKQEAgLTQzMyw3ICs0MzMsNyBAQAogMToJcHVzaG0JcjgsIHI5CS8qIFBDIGFuZCBTUiAqLwogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19ubWkKKwljYWxsCWRvX25taQogCXBvcG0JcjgtcjkKIAltdHNyCVNZU1JFR19SQVJfTk1JLCByOAogCXRzdAlyMCwgcjAKQEAgLTQ1NywyOSArNDU3LDI5IEBACiBoYW5kbGVfYWRkcmVzc19mYXVsdDoKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19hZGRyZXNzX2V4Y2VwdGlvbgorCWNhbGwJZG9fYWRkcmVzc19leGNlcHRpb24KIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiBoYW5kbGVfcHJvdGVjdGlvbl9mYXVsdDoKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19wYWdlX2ZhdWx0CisJY2FsbAlkb19wYWdlX2ZhdWx0CiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogCS5hbGlnbgkxCiBkb19pbGxlZ2FsX29wY29kZV9sbDoKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19pbGxlZ2FsX29wY29kZQorCWNhbGwJZG9faWxsZWdhbF9vcGNvZGUKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiBkb19kdGxiX21vZGlmaWVkOgpAQCAtNTEzLDExICs1MTMsMTEgQEAKIGRvX2ZwZV9sbDoKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgMjYKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2ZwZQorCWNhbGwJZG9fZnBlCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogcmV0X2Zyb21fZXhjZXB0aW9uOgpAQCAtNTUzLDcgKzU1Myw3IEBACiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAlibGQJcjQsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNzCTFmCi0JcmNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKKwljYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCiAxOgogI2VuZGlmCiAKQEAgLTU4Miw3ICs1ODIsNyBAQAogCWJsZAlyMSwgVElGX05FRURfUkVTQ0hFRAogCWJyY2MJMWYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXNjaGVkdWxlCisJY2FsbAlzY2hlZHVsZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJZmF1bHRfZXhpdF93b3JrCkBAIC01OTMsNyArNTkzLDcgQEAKIAl1bm1hc2tfaW50ZXJydXB0cwogCW1vdglyMTIsIHNwCiAJbW92CXIxMSwgcjAKLQlyY2FsbAlkb19ub3RpZnlfcmVzdW1lCisJY2FsbAlkb19ub3RpZnlfcmVzdW1lCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAlmYXVsdF9leGl0X3dvcmsKQEAgLTYxNiwxMCArNjE2LDEwIEBACiAKIC5MZGVidWdfZml4dXBfY29udDoKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vZmYKKwljYWxsCXRyYWNlX2hhcmRpcnFzX29mZgogI2VuZGlmCiAJbW92CXIxMiwgc3AKLQlyY2FsbAlkb19kZWJ1ZworCWNhbGwJZG9fZGVidWcKIAltb3YJc3AsIHIxMgogCiAJbGRkc3AJcjIsIHNwW1JFR19TUl0KQEAgLTY0Myw3ICs2NDMsNyBAQAogCW10c3IJU1lTUkVHX1JTUl9EQkcsIHIxMQogCW10c3IJU1lTUkVHX1JBUl9EQkcsIHIxMAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCXJjYWxsCXRyYWNlX2hhcmRpcnFzX29uCisJY2FsbAl0cmFjZV9oYXJkaXJxc19vbgogMToKICNlbmRpZgogCWxkbXRzCXNwKyssIHIwLWxyCkBAIC02NzYsNyArNjc2LDcgQEAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKIAlibGQJcjExLCBTWVNSRUdfR01fT0ZGU0VUCiAJYnJjYwkxZgotCXJjYWxsCXRyYWNlX2hhcmRpcnFzX29uCisJY2FsbAl0cmFjZV9oYXJkaXJxc19vbgogMToKICNlbmRpZgogCW1mc3IJcjIsIFNZU1JFR19TUgpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAJbW92CXIxMSwgc3AKIAltb3YJcjEyLCBcbGV2ZWwKIAotCXJjYWxsCWRvX0lSUQorCWNhbGwJZG9fSVJRCiAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJmZXh0dQlyNCwgcjQsIFNZU1JFR19NMF9PRkZTRVQsIDMKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCiAxOgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCXJjYWxsCXRyYWNlX2hhcmRpcnFzX29uCisJY2FsbAl0cmFjZV9oYXJkaXJxc19vbgogI2VuZGlmCiAJcG9wbQlyOC1yOQogCW10c3IJcmFyX2ludFxsZXZlbCwgcjgKQEAgLTgwNyw3ICs4MDcsNyBAQAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmxkCXI0LCBTWVNSRUdfR01fT0ZGU0VUCiAJYnJjcwkxYgotCXJjYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCisJY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQogI2VuZGlmCiAJcmptcAkxYgogCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXZyMzIva2VybmVsL2lycS5jCmluZGV4IGE4ZTc2N2QuLjlmNTcyMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL2lycS5jCkBAIC01OCw3ICs1OCw3IEBACiAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJc2VxX3ByaW50ZihwLCAiICU4cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUgPyA6ICItIik7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKaW5kZXggNjczMTc4ZS4uZjcyNDRjZCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUwpAQCAtNjEsNyArNjEsNyBAQAogX19zeXNfbW1hcDI6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfbW1hcDIKKwljYWxsCXN5c19tbWFwMgogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTcwLDcgKzcwLDcgQEAKIF9fc3lzX3NlbmR0bzoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19zZW5kdG8KKwljYWxsCXN5c19zZW5kdG8KIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC03OSw3ICs3OSw3IEBACiBfX3N5c19yZWN2ZnJvbToKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19yZWN2ZnJvbQorCWNhbGwJc3lzX3JlY3Zmcm9tCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtODgsNyArODgsNyBAQAogX19zeXNfcHNlbGVjdDY6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfcHNlbGVjdDYKKwljYWxsCXN5c19wc2VsZWN0NgogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTk3LDcgKzk3LDcgQEAKIF9fc3lzX3NwbGljZToKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19zcGxpY2UKKwljYWxsCXN5c19zcGxpY2UKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC0xMDYsNyArMTA2LDcgQEAKIF9fc3lzX2Vwb2xsX3B3YWl0OgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX2Vwb2xsX3B3YWl0CisJY2FsbAlzeXNfZXBvbGxfcHdhaXQKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC0xMTUsNiArMTE1LDYgQEAKIF9fc3lzX3N5bmNfZmlsZV9yYW5nZToKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19zeW5jX2ZpbGVfcmFuZ2UKKwljYWxsCXN5c19zeW5jX2ZpbGVfcmFuZ2UKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9saWIvc3Rybmxlbl91c2VyLlMgYi9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUwppbmRleCA2NWNlMTFhLi5lNDZmNDcyNCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9saWIvc3Rybmxlbl91c2VyLlMKKysrIGIvYXJjaC9hdnIzMi9saWIvc3Rybmxlbl91c2VyLlMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlsZGRwYwlsciwgX3Rhc2tfc2l6ZQogCXN1YglyMTEsIGxyLCByMTIKIAltb3YJcjksIHIxMQotCXJjYWxsCV9fc3Rybmxlbl91c2VyCisJY2FsbAlfX3N0cm5sZW5fdXNlcgogCWNwLncJcjEyLCByOQogCWJyZ3QJMWYKIAlwb3BtCXBjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MThGLUVaQlJEX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCmluZGV4IDI4MWY0YjYuLmMxMjFkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBGZWIgMjAgMTA6MDE6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LjcKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldApAQCAtNDMsNyArNDIsNyBAQAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NiwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTMxNCw3ICszMTMsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19CRklOX0dQVElNRVJTPXkKK0NPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CkBAIC0zNzUsNyArMzc0LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNjM0LDYgKzYzMiw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKQEAgLTc5Myw2ICs3OTIsNyBAQAogIwogQ09ORklHX1NQSV9CRklOPXkKICMgQ09ORklHX1NQSV9CRklOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogCiAjCkBAIC04MTYsNiArODE2LDEyIEBACiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX1dEVD15CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtODY1LDcgKzg3MSwyNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19TREhfQkZJTj1tCitDT05GSUdfU0RIX0JGSU5fTUlTU0lOR19DTURfUFVMTFVQX1dPUktBUk9VTkQ9eQorQ09ORklHX1NESF9CRklOX0VOQUJMRV9TRElPX0lSUT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTEyMSw3ICsxMTQ2LDYgQEAKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCX1RFU1RDQVNFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19WRVJCT1NFPXkKIENPTkZJR19ERUJVR19NTVJTPXkKICMgQ09ORklHX0RFQlVHX0hXRVJSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCmluZGV4IDhlMmI4NTUuLjNlNTYyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTQyLDcgKzQyLDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTUsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzIsMTUgKzEzMiwyMCBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0wCiBDT05GSUdfQkZfUkVWX01BWD0yCi1DT05GSUdfQkZfUkVWXzBfMD15Ci0jIENPTkZJR19CRl9SRVZfMF8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzAgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzE9eQogIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldApAQCAtMzEzLDcgKzMxOCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0JGSU5fR1BUSU1FUlM9eQorQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKQEAgLTM3NCw3ICszNzksNiBAQAogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC01ODMsNyArNTg3LDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02MzcsNiArNjQzLDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC04MTUsNiArODIyLDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODM4LDYgKzg0Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKQEAgLTg5Niw2ICs5MDUsMTIgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCkBAIC05MDQsOCArOTE5LDEwIEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC05NDAsNTUgKzk1Nyw3IEBACiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX1NPVU5EPW0KLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NQST15Ci0KLSMKLSMgQUxTQSBCbGFja2ZpbiBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQkxBQ0tGSU5fQUQxODM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CRklOX0FENzMzMjIgaXMgbm90IHNldAotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DPW0KLUNPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKLUNPTkZJR19TTkRfQkY1WFhfSTJTPW0KLUNPTkZJR19TTkRfQkY1WFhfU09DX1NTTTI2MDI9bQotIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BRDczMzExIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfQkY1WFhfQUM5Nz1tCi1DT05GSUdfU05EX0JGNVhYX01NQVBfU1VQUE9SVD15Ci0jIENPTkZJR19TTkRfQkY1WFhfTVVMVElDSEFOX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1NORF9CRjVYWF9TT0NfU1BPUlQ9bQotQ09ORklHX1NORF9CRjVYWF9TT0NfSTJTPW0KLUNPTkZJR19TTkRfQkY1WFhfU09DX0FDOTc9bQotQ09ORklHX1NORF9CRjVYWF9TT0NfQUQxOTgwPW0KLUNPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNPTAKLSMgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DX0FEMTk4MD1tCi1DT05GSUdfU05EX1NPQ19TU00yNjAyPW0KLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz1tCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldApAQCAtMTA2MywxMyArMTAzMiwxNSBAQAogQ09ORklHX1VTQl9NVVNCX1NPQz15CiAKICMKLSMgQmxhY2tmaW4gaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBTdXBwb3J0CiAjCiBDT05GSUdfVVNCX01VU0JfSE9TVD15CiAjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQorQ09ORklHX01VU0JfRE1BX1BPTEw9eQogIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMDgxLDE4ICsxMDUyLDMzIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTExMjQsNiArMTExMCwzMCBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTE1OCwxMiArMTE2OCwxNCBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CkBAIC0xMzg0LDYgKzEzOTYsMTMgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTQyMyw2ICsxNDQyLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCBhNTAwNTBmLi45MTFiNWRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0zNiwxNCArMzYsMTMgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzMsMTUgKzEzMiwyMCBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0wCiBDT05GSUdfQkZfUkVWX01BWD0yCi1DT05GSUdfQkZfUkVWXzBfMD15Ci0jIENPTkZJR19CRl9SRVZfMF8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzAgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzE9eQogIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldApAQCAtMzE0LDcgKzMxOCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0JGSU5fR1BUSU1FUlM9eQorQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKQEAgLTM3NSw3ICszNzksNiBAQAogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC02MjYsNyArNjI5LDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02ODEsNiArNjg2LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03NTUsOCArNzYxLDggQEAKICMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAogIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CRjV4eF9QUEk9bQorQ09ORklHX0JGSU5fU1BPUlQ9bQogIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXSV9MQ0QgaXMgbm90IHNldAogQ09ORklHX0JGSU5fRE1BX0lOVEVSRkFDRT1tCkBAIC04NTksNiArODY1LDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODcxLDYwICs4NzgsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC05NDAsNiArODk0LDEyIEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtOTQ4LDggKzkwOCwxMCBAQAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtMTAwMCw2ICs5NjIsNyBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KIENPTkZJR19MQ0RfTFRWMzUwUVY9bQpAQCAtMTE1MiwxMyArMTExNSwxNSBAQAogQ09ORklHX1VTQl9NVVNCX1NPQz15CiAKICMKLSMgQmxhY2tmaW4gaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBTdXBwb3J0CiAjCiBDT05GSUdfVVNCX01VU0JfSE9TVD15CiAjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQorQ09ORklHX01VU0JfRE1BX1BPTEw9eQogIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMTcwLDE4ICsxMTM1LDMzIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEyMTMsNiArMTE5MywzMCBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTI0NywxMiArMTI1MSwxNCBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CkBAIC0xNDczLDYgKzE0NzksMTMgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNTEyLDYgKzE1MjUsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCmluZGV4IDBhMmEwMGQuLjRjNDFlMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM2LDE0ICszNiwxMyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NiwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzMywxMCArMTMyLDE1IEBACiAjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKIENPTkZJR19CRl9SRVZfTUlOPTMKIENPTkZJR19CRl9SRVZfTUFYPTYKQEAgLTE1Nyw3ICsxNjEsNiBAQAogIyBDT05GSUdfQkZJTjUzM19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IODYwNl9IVlNJU1RFTUFTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU41MzJfSVAwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTMzX0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzMy8yLzEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgpAQCAtMjc3LDcgKzI4MCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9HUFRJTUVSUz1tCiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQpAQCAtNTc1LDYgKzU3OCw3IEBACiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02MDgsNiArNjEyLDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03MTQsNiArNzE5LDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzI2LDIyICs3MzIsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtNzUyLDYgKzc0MywxMiBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTc2MCw3ICs3NTcsNyBAQAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODI2LDYgKzgyMyw3IEBACiAjCiAjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldApAQCAtMTA0Niw2ICsxMDQ0LDEzIEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTA4NCw2ICsxMDg5LDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBlYjAyNzU4Li45YzQ4MmNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0zNiwxNCArMzYsMTMgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzMsMTAgKzEzMiwxNSBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj0zCiBDT05GSUdfQkZfUkVWX01BWD02CkBAIC0xNTcsNyArMTYxLDYgQEAKICMgQ09ORklHX0JGSU41MzNfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAogIyBDT05GSUdfSDg2MDZfSFZTSVNURU1BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTMyX0lQMFggaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19CRjUzM19CT0FSRCBpcyBub3Qgc2V0CiAKICMKICMgQkY1MzMvMi8xIFNwZWNpZmljIENvbmZpZ3VyYXRpb24KQEAgLTI3Nyw3ICsyODAsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0JGSU5fR1BUSU1FUlMgaXMgbm90IHNldAorQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKQEAgLTU3OCw3ICs1ODEsOSBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTYxMiw2ICs2MTcsNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQVg4ODE4MCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKQEAgLTY3MSwxMCArNjc3LDEwIEBACiAjIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NJTVBMRV9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QUEkgaXMgbm90IHNldAotQ09ORklHX0JGSU5fU1BPUlQ9eQorQ09ORklHX0JGNXh4X1BQST1tCitDT05GSUdfQkZJTl9TUE9SVD1tCiAjIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAotQ09ORklHX1RXSV9MQ0Q9bQorIyBDT05GSUdfVFdJX0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KIENPTkZJR19TSU1QTEVfR1BJTz1tCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC03NjUsNiArNzcxLDcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzc3LDYwICs3ODQsNyBAQAogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC04NDEsNiArNzk1LDEyIEBACiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX1dEVD15CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtODUxLDYgKzgxMSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC05MDksNiArODcwLDcgQEAKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxOCwxMiArOTgwLDE0IEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKQEAgLTEyNDQsNiArMTIwOCwxMyBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTEyODIsNiArMTI1Myw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKaW5kZXggOWU2MmI5Zi4uNTkxZjZlZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgotIyBUdWUgRGVjIDMwIDE3OjI0OjM3IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM3LDE0ICszNiwxMyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NywxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzNCwxMCArMTMyLDE1IEBACiAjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKIENPTkZJR19CRl9SRVZfTUlOPTIKIENPTkZJR19CRl9SRVZfTUFYPTMKQEAgLTE4NCw3ICsxODcsNiBAQAogIyBDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9UQ00gaXMgbm90IHNldAogIyBDT05GSUdfUE5BVjEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTVNJR19NSU5PVEFVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTM3X0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzNyBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC01ODksNyArNTkxLDkgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02NDQsNiArNjQ4LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CkBAIC03MDYsMTAgKzcxMSwxMCBAQAogIyBDT05GSUdfU1BJX0FEQ19CRjUzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19CRjV4eF9QUEk9bQogQ09ORklHX0JGSU5fU1BPUlQ9bQogIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKLUNPTkZJR19UV0lfTENEPW0KKyMgQ09ORklHX1RXSV9MQ0QgaXMgbm90IHNldAogQ09ORklHX0JGSU5fRE1BX0lOVEVSRkFDRT1tCiBDT05GSUdfU0lNUExFX0dQSU89bQogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtODA4LDYgKzgxMyw3IEBACiAjCiBDT05GSUdfU1BJX0JGSU49eQogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyMCw2MCArODI2LDcgQEAKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtODg0LDYgKzgzNywxMiBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTg5NCw2ICs4NTMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtOTU3LDYgKzkxNyw3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQogIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKQEAgLTEwNzQsMTIgKzEwMzUsMTQgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldApAQCAtMTMwMCw2ICsxMjYzLDEzIEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTMzOCw2ICsxMzA4LDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZwppbmRleCBkZDZhZDZiZS4uMWE4ZThjMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LjcKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldApAQCAtNDIsNyArNDIsNyBAQAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NSwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzMiwxMCArMTMyLDE1IEBACiBDT05GSUdfQkY1Mzg9eQogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWX01JTj00CiBDT05GSUdfQkZfUkVWX01BWD01CkBAIC0yOTMsNyArMjk4LDcgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQkZJTl9HUFRJTUVSUz15CitDT05GSUdfQkZJTl9HUFRJTUVSUz1tCiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQpAQCAtMzU0LDcgKzM1OSw2IEBACiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTY0NSw2ICs2NDksNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCkBAIC02OTAsNyArNjk1LDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRDc4Nzk9bQorQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OT15CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CkBAIC03MTgsOCArNzIzLDggQEAKICMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAogIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9TUE9SVD15CitDT05GSUdfQkY1eHhfUFBJPW0KK0NPTkZJR19CRklOX1NQT1JUPW0KICMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0lfTENEIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX0RNQV9JTlRFUkZBQ0U9bQpAQCAtNzYyLDcgKzc2Nyw3IEBACiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0kyQz15CitDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQpAQCAtNzc0LDcgKzc3OSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIwotQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0k9eQorQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0k9bQogQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWj0xMDAKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldApAQCAtODE4LDYgKzgyMyw3IEBACiAjCiBDT05GSUdfU1BJX0JGSU49eQogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAKICMKQEAgLTgzMCw2MCArODM2LDcgQEAKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtODk0LDYgKzg0NywxMiBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTkwNCw2ICs4NjMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtOTU0LDYgKzkxNCw3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDcsMTIgKzk2OCwxNCBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CkBAIC0xMjMzLDYgKzExOTYsMTMgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTI3MSw2ICsxMjQxLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZwppbmRleCA2YmMyZmIxLi4yY2QxYzJiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0zNiwxNCArMzYsMTMgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsMTMgKzU1LDEzIEBACiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfQUlPPXkKKyMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xMzMsMTYgKzEzMiwyMSBAQAogIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogQ09ORklHX0JGNTQ4PXkKKyMgQ09ORklHX0JGNTQ4TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OU0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldAogQ09ORklHX0JGX1JFVl9NSU49MAogQ09ORklHX0JGX1JFVl9NQVg9MgotQ09ORklHX0JGX1JFVl8wXzA9eQorIyBDT05GSUdfQkZfUkVWXzBfMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGX1JFVl8wXzIgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzI9eQogIyBDT05GSUdfQkZfUkVWXzBfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzUgaXMgbm90IHNldApAQCAtMzQ4LDcgKzM1Miw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9HUFRJTUVSUz1tCiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8yTT15CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMU0gaXMgbm90IHNldApAQCAtNDEzLDcgKzQxNyw2IEBACiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTUxMiw5ICs1MTUsOSBAQAogIwogQ09ORklHX0lSVFRZX1NJUj1tCiBDT05GSUdfQkZJTl9TSVI9bQotQ09ORklHX0JGSU5fU0lSMz15CiAjIENPTkZJR19CRklOX1NJUjAgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSVIyIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1NJUjM9eQogQ09ORklHX1NJUl9CRklOX0RNQT15CiAjIENPTkZJR19TSVJfQkZJTl9QSU8gaXMgbm90IHNldAogCkBAIC01MzgsNyArNTQxLDggQEAKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKQEAgLTU1NCw3ICs1NTgsOSBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTY2OCw3ICs2NzQsOSBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTc0Myw2ICs3NTEsNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQVg4ODE4MCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKQEAgLTc1MSw4ICs3NjAsMTYgQEAKICMgV2lyZWxlc3MgTEFOCiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPW0KKyMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfU0RJTz1tCitDT05GSUdfUE9XRVJPRjJfQkxPQ0tTSVpFX09OTFk9eQorIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTg0NCw4ICs4NjEsOCBAQAogIyBDT05GSUdfU1BJX0FEQ19CRjUzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fU1BPUlQgaXMgbm90IHNldAorQ09ORklHX0JGNXh4X1BQST1tCitDT05GSUdfQkZJTl9TUE9SVD1tCiAjIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAogIyBDT05GSUdfVFdJX0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KQEAgLTk1MCw2ICs5NjcsNyBAQAogIwogQ09ORklHX1NQSV9CRklOPXkKICMgQ09ORklHX1NQSV9CRklOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogCiAjCkBAIC05NjIsNjAgKzk4MCw3IEBACiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKQEAgLTEwMzEsNiArOTk2LDEyIEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtMTAzOSw4ICsxMDEwLDEwIEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC0xMDkyLDYgKzEwNjUsNyBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMjQzLDE1ICsxMjE3LDE1IEBACiBDT05GSUdfVVNCX01VU0JfU09DPXkKIAogIwotIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjIEJsYWNrZmluIGhpZ2ggc3BlZWQgVVNCIFN1cHBvcnQKICMKIENPTkZJR19VU0JfTVVTQl9IT1NUPXkKICMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15Ci0jIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKLSMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfTVVTQl9QSU9fT05MWT15CitDT05GSUdfTVVTQl9ETUFfUE9MTD15CiAjIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNjMsMTEgKzEyMzcsMTEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtMTMyMSw3ICsxMjk1LDMxIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9bQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyNzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCkBAIC0xMzM3LDggKzEzMzUsOSBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLUNPTkZJR19TREhfQkZJTj1tCitDT05GSUdfU0RIX0JGSU49eQogIyBDT05GSUdfU0RIX0JGSU5fTUlTU0lOR19DTURfUFVMTFVQX1dPUktBUk9VTkQgaXMgbm90IHNldAorIyBDT05GSUdfU0RIX0JGSU5fRU5BQkxFX1NESU9fSVJRIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTM3MywxMiArMTM3MiwxNCBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CkBAIC0xNjQxLDYgKzE2NDIsMTMgQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNjgwLDYgKzE2ODgsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCmluZGV4IDY5NzE0ZmIuLjRhNmVhOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwpAQCAtMSw2ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC43CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKQEAgLTM2LDE0ICszNiwxMyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01NiwxMyArNTUsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTEzMywxMCArMTMyLDE1IEBACiAjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKIENPTkZJR19CRjU2MT15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX0JGX1JFVl9NSU49MwpAQCAtMTY2LDcgKzE3MCw2IEBACiBDT05GSUdfQkZJTjU2MV9FWktJVD15CiAjIENPTkZJR19CRklONTYxX1RFUExBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU41NjFfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19CRjU2MV9CT0FSRCBpcyBub3Qgc2V0CiAKICMKICMgQkY1NjEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgpAQCAtMzE2LDcgKzMxOSw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9HUFRJTUVSUz1tCiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQpAQCAtMzgyLDcgKzM4NSw2IEBACiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTYxMiw2ICs2MTQsNyBAQAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNjQ1LDYgKzY0OCw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BWDg4MTgwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQpAQCAtNzUxLDYgKzc1NSw3IEBACiAjCiBDT05GSUdfU1BJX0JGSU49eQogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAKICMKQEAgLTc2MywyMiArNzY4LDcgQEAKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKQEAgLTc4OSw2ICs3NzksMTIgQEAKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0JGSU5fV0RUPXkKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCkBAIC03OTcsNyArNzkzLDcgQEAKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTEwNDEsNiArMTAzNywxMyBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTEwNzksNiArMTA4Miw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnCmluZGV4IDAxN2M2ZWEuLmVmMWEyYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CbGFja1N0YW1wX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcKQEAgLTQzLDcgKzQzLDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTYsNyArNTYsNyBAQAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggZDg4MGVmNy4uZTJmYzU4OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCkBAIC00Myw3ICs0Myw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU2LDEzICs1NiwxMyBAQAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX0FJTz15CisjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKaW5kZXggMDg1MjExYi4uNjVhOGJiYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU3LDcgKzU3LDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZwppbmRleCA3NTAyMDNlLi45YjdlOWQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNTcsNyArNTcsNyBAQAogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCmluZGV4IGRlYzhhN2QuLjU2OTUyM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU3LDcgKzU3LDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggZjQxMDQzMC4uMDM1YjYzNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU3LDcgKzU3LDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKaW5kZXggMzQ2YmM3YS4uNzAxNWU0MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU3LDcgKzU3LDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcKaW5kZXggYmQ1NTNkYS4uZGZjOGUxZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01Niw3ICs1Niw3IEBACiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZwppbmRleCA3ZGI5Mzg3Li45NWE1ZjkxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTU3LDcgKzU3LDcgQEAKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnCmluZGV4IGFkMDk2NzAuLjc4ZTI0MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMyCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguNwogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0zNSwxMyArMzUsMTIgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTUzLDEzICs1MiwxMyBAQAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX0FJTz15CisjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldApAQCAtMTMwLDEwICsxMjksMTUgQEAKICMgQ09ORklHX0JGNTM4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQyTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0NE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDdNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ4TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OU0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldAogQ09ORklHX0JGX1JFVl9NSU49MgogQ09ORklHX0JGX1JFVl9NQVg9MwpAQCAtMTgwLDcgKzE4NCw2IEBACiAjIENPTkZJR19CRklONTM3X0JMVUVURUNITklYX1RDTSBpcyBub3Qgc2V0CiBDT05GSUdfUE5BVjEwPXkKICMgQ09ORklHX0NBTVNJR19NSU5PVEFVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTM3X0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzNyBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC0zNDEsNyArMzQ0LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNTM4LDcgKzU0MCw5IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTkzLDYgKzU5Nyw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BWDg4MTgwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQpAQCAtNzc2LDYgKzc4MSw3IEBACiAjCiBDT05GSUdfU1BJX0JGSU49eQogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAKICMKQEAgLTc5OSw2ICs4MDUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CkBAIC04NDUsNiArODUyLDEyIEBACiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTg1Myw4ICs4NjYsMTAgQEAKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTkxMCw2ICs5MjUsNyBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKICMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CkBAIC05NjYsNyArOTgyLDcgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CkBAIC0xMDAzLDEyICsxMDE5LDE0IEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKQEAgLTExOTYsNiArMTIxNCwxMCBAQAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIwogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTIzMCw2ICsxMjUyLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcKaW5kZXggYTQ2NTI5Yy4uMmJjMDc3OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1NSVjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZwpAQCAtNDksNyArNDksNyBAQAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC02MSw3ICs2MSw3IEBACiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MzdfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcKaW5kZXggOTdhMWYxZC4uZTY1YjNhNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcKQEAgLTM5LDcgKzM5LDcgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC01MSwxMyArNTEsMTMgQEAKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19BSU89eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaAppbmRleCAxMzA2ZTZiLi4wMjkyZDU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCkBAIC0xMTAsNyArMTEwLDcgQEAKIHN0cnVjdCBiZmluNXh4X3NwaV9tYXN0ZXIgewogCXUxNiBudW1fY2hpcHNlbGVjdDsKIAl1OCBlbmFibGVfZG1hOwotCXUxNiBwaW5fcmVxWzRdOworCXUxNiBwaW5fcmVxWzddOwogfTsKIAogLyogc3BpX2JvYXJkX2luZm8uY29udHJvbGxlcl9kYXRhIGZvciBTUEkgc2xhdmUgZGV2aWNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zcG9ydC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3Nwb3J0LmgKaW5kZXggNjVhNjUxZC4uYjU1ODkwOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3Nwb3J0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3Nwb3J0LmgKQEAgLTksNiArOSwxMyBAQAogI2lmbmRlZiBfX0JGSU5fU1BPUlRfSF9fCiAjZGVmaW5lIF9fQkZJTl9TUE9SVF9IX18KIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNlbmRpZgorCiAjZGVmaW5lIFNQT1JUX01BSk9SCTIzNwogI2RlZmluZSBTUE9SVF9OUl9ERVZTCTIKIApAQCAtMTE5LDcgKzEyNiw3IEBACiAJaW50IHR4X2xlbjsKIAlpbnQgdHhfc2VudDsKIAotCWludCBzcG9ydF9lcnJfaXJxOworCWludCBlcnJfaXJxOwogCiAJc3RydWN0IG11dGV4IG11dGV4OwkvKiBtdXR1YWwgZXhjbHVzaW9uIHNlbWFwaG9yZSAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmgKaW5kZXggZDRhMDgyZWYuLmZlMTM5NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0xMTAsNyArMTEwLDcgQEAKICogTU9ESUZJQ0FUSU9OIEhJU1RPUlkgOgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgQkY1NDhfRkFNSUxZCisjaWZuZGVmIENPTkZJR19CRjU0eAogdm9pZCBzZXRfZ3Bpb19kaXIodW5zaWduZWQsIHVuc2lnbmVkIHNob3J0KTsKIHZvaWQgc2V0X2dwaW9faW5lbih1bnNpZ25lZCwgdW5zaWduZWQgc2hvcnQpOwogdm9pZCBzZXRfZ3Bpb19wb2xhcih1bnNpZ25lZCwgdW5zaWduZWQgc2hvcnQpOwpAQCAtMzAzLDcgKzMwMywxMCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQogewotCXJldHVybiAoZ3BpbyArIEdQSU9fSVJRX0JBU0UpOworCWlmIChsaWtlbHkoZ3BpbyA8IE1BWF9CTEFDS0ZJTl9HUElPUykpCisJCXJldHVybiBncGlvICsgR1BJT19JUlFfQkFTRTsKKworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwdGltZXJzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwdGltZXJzLmgKaW5kZXggMDUyMGQyYS4uYjBmODQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncHRpbWVycy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3B0aW1lcnMuaApAQCAtMTUsMTYgKzE1LDE2IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAKIC8qCi0gKiBCRjUzNy9CRjUyNzogOCB0aW1lcnM6CisgKiBCRjUxeC9CRjUyeC9CRjUzNzogOCB0aW1lcnM6CiAgKi8KLSNpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpCisjaWYgZGVmaW5lZChDT05GSUdfQkY1MXgpIHx8IGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkKICMgZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyA4CiAjIGRlZmluZSBUSU1FUjBfR1JPVVBfUkVHICAgICAgVElNRVJfRU5BQkxFCiAjZW5kaWYKIC8qCiAgKiBCRjU0eDogMTEgdGltZXJzIChCRjU0MjogOCB0aW1lcnMpOgogICovCi0jaWYgZGVmaW5lZChCRjU0OF9GQU1JTFkpCisjaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCiAjIGlmZGVmIENPTkZJR19CRjU0MgogIyAgZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyA4CiAjIGVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDc5N2MwYzEuLmM5NGM3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMywxNCArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0jZGVmaW5lIFBFUkNQVV9NT0RVTEVfUkVTRVJWRSA4MTkyCi0jZWxzZQotI2RlZmluZSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgMAotI2VuZGlmCi0KLSNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NIFwKLQkoQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgU01QX0NBQ0hFX0JZVEVTKSArIFwKLQkgUEVSQ1BVX01PRFVMRV9SRVNFUlZFKQotCiAjZW5kaWYJLyogX19BUkNIX0JMQUNLRklOX1BFUkNQVV9fICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAyY2E3MDJlLi5mYWM3ZmU5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTUzLDQgKzUzLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZgkJCQkvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDY5YTA1MWIuLjY0MDNhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQkxBQ0tGSU5fU1dBQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwppbmRleCA1MWRhYzU1Li5hMDY3OGRhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwpAQCAtNjksNyArNjksNyBAQAogc3RhdGljIHN0cnVjdCBncGlvX3BvcnRfdCAqIGNvbnN0IGdwaW9fYXJyYXlbXSA9IHsKICNpZiBkZWZpbmVkKEJGNTMzX0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzOF9GQU1JTFkpCiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKSBGSU9fRkxBR19ELAotI2VsaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKSBQT1JURklPLAogCShzdHJ1Y3QgZ3Bpb19wb3J0X3QgKikgUE9SVEdJTywKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopIFBPUlRISU8sCkBAIC03Nyw3ICs3Nyw3IEBACiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKSBGSU8wX0ZMQUdfRCwKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopIEZJTzFfRkxBR19ELAogCShzdHJ1Y3QgZ3Bpb19wb3J0X3QgKikgRklPMl9GTEFHX0QsCi0jZWxpZiBkZWZpbmVkKEJGNTQ4X0ZBTUlMWSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTR4KQogCShzdHJ1Y3QgZ3Bpb19wb3J0X3QgKilQT1JUQV9GRVIsCiAJKHN0cnVjdCBncGlvX3BvcnRfdCAqKVBPUlRCX0ZFUiwKIAkoc3RydWN0IGdwaW9fcG9ydF90ICopUE9SVENfRkVSLApAQCAtOTMsNyArOTMsNyBAQAogI2VuZGlmCiB9OwogCi0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQogc3RhdGljIHVuc2lnbmVkIHNob3J0ICogY29uc3QgcG9ydF9mZXJbXSA9IHsKIAkodW5zaWduZWQgc2hvcnQgKikgUE9SVEZfRkVSLAogCSh1bnNpZ25lZCBzaG9ydCAqKSBQT1JUR19GRVIsCkBAIC0xMDksMTEgKzEwOSwxMSBAQAogCiBzdGF0aWMgY29uc3QKIHU4IHBtdXhfb2Zmc2V0W11bMTZdID0gewotIyAgaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpCisjICBpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkKIAl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDIsIDQsIDYsIDgsIDgsIDEwLCAxMCB9LCAvKiBQT1JURiAqLwogCXsgMCwgMCwgMCwgMCwgMCwgMiwgMiwgNCwgNCwgNiwgOCwgMTAsIDEwLCAxMCwgMTIsIDEyIH0sIC8qIFBPUlRHICovCiAJeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCA0LCA0LCA0LCA0LCA0LCA0LCA0IH0sIC8qIFBPUlRIICovCi0jICBlbGlmIGRlZmluZWQoQkY1MThfRkFNSUxZKQorIyAgZWxpZiBkZWZpbmVkKENPTkZJR19CRjUxeCkKIAl7IDAsIDIsIDIsIDIsIDIsIDIsIDIsIDQsIDYsIDYsIDYsIDgsIDgsIDgsIDgsIDEwIH0sIC8qIFBPUlRGICovCiAJeyAwLCAwLCAwLCAyLCA0LCA2LCA2LCA2LCA4LCAxMCwgMTAsIDEyLCAxNCwgMTQsIDE0LCAxNCB9LCAvKiBQT1JURyAqLwogCXsgMCwgMCwgMCwgMCwgMiwgMiwgNCwgNiwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwIH0sIC8qIFBPUlRIICovCkBAIC0xMzksNyArMTM5LDcgQEAKIAogaW5saW5lIGludCBjaGVja19ncGlvKHVuc2lnbmVkIGdwaW8pCiB7Ci0jaWYgZGVmaW5lZChCRjU0OF9GQU1JTFkpCisjaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCiAJaWYgKGdwaW8gPT0gR1BJT19QQjE1IHx8IGdwaW8gPT0gR1BJT19QQzE0IHx8IGdwaW8gPT0gR1BJT19QQzE1CiAJICAgIHx8IGdwaW8gPT0gR1BJT19QSDE0IHx8IGdwaW8gPT0gR1BJT19QSDE1CiAJICAgIHx8IGdwaW8gPT0gR1BJT19QSjE0IHx8IGdwaW8gPT0gR1BJT19QSjE1KQpAQCAtMTg3LDEzICsxODcsMTMgQEAKIAlpZiAoY2hlY2tfZ3BpbyhncGlvKSkKIAkJcmV0dXJuOwogCi0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQogCWlmICh1c2FnZSA9PSBHUElPX1VTQUdFKQogCQkqcG9ydF9mZXJbZ3Bpb19iYW5rKGdwaW8pXSAmPSB+Z3Bpb19iaXQoZ3Bpbyk7CiAJZWxzZQogCQkqcG9ydF9mZXJbZ3Bpb19iYW5rKGdwaW8pXSB8PSBncGlvX2JpdChncGlvKTsKIAlTU1lOQygpOwotI2VsaWYgZGVmaW5lZChCRjU0OF9GQU1JTFkpCisjZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKIAlpZiAodXNhZ2UgPT0gR1BJT19VU0FHRSkKIAkJZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5wb3J0X2ZlciAmPSB+Z3Bpb19iaXQoZ3Bpbyk7CiAJZWxzZQpAQCAtMjczLDcgKzI3Myw3IEBACiAJCX0KIAl9CiB9Ci0jZWxpZiBkZWZpbmVkKEJGNTQ4X0ZBTUlMWSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTR4KQogaW5saW5lIHZvaWQgcG9ydG11eF9zZXR1cCh1bnNpZ25lZCBzaG9ydCBwZXIpCiB7CiAJdTMyIHBtdXg7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAogCXJldHVybiAocG11eCA+PiAoMiAqIGdwaW9fc3ViX24oaWRlbnQpKSAmIDB4Myk7CiB9Ci0jZWxpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUxOF9GQU1JTFkpCisjZWxpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiBpbmxpbmUgdm9pZCBwb3J0bXV4X3NldHVwKHVuc2lnbmVkIHNob3J0IHBlcikKIHsKIAl1MTYgcG11eCwgaWRlbnQgPSBQX0lERU5UKHBlciksIGZ1bmN0aW9uID0gUF9GVU5DVDJNVVgocGVyKTsKQEAgLTMyMiw3ICszMjIsNyBAQAogYXJjaF9pbml0Y2FsbChiZmluX2dwaW9faW5pdCk7CiAKIAotI2lmbmRlZiBCRjU0OF9GQU1JTFkKKyNpZm5kZWYgQ09ORklHX0JGNTR4CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogRlVOQ1RJT05TOiBCbGFja2ZpbiBHZW5lcmFsIFB1cnBvc2UgUG9ydHMgQWNjZXNzIEZ1bmN0aW9ucwpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJSVJRX1BST0dfSU5UQiwgSVJRX1BPUlRHX0lOVEIsIElSUV9NQUNfVFgKICNlbGlmIGRlZmluZWQoQkY1MzhfRkFNSUxZKQogCUlSUV9QT1JURl9JTlRCCi0jZWxpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUxOF9GQU1JTFkpCisjZWxpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiAJSVJRX1BPUlRGX0lOVEIsIElSUV9QT1JUR19JTlRCLCBJUlFfUE9SVEhfSU5UQgogI2VsaWYgZGVmaW5lZChCRjU2MV9GQU1JTFkpCiAJSVJRX1BST0cwX0lOVEIsIElSUV9QUk9HMV9JTlRCLCBJUlFfUFJPRzJfSU5UQgpAQCAtNTg2LDcgKzU4Niw3IEBACiAJCWdwaW9fYXJyYXlbYmFua10tPm1hc2tiID0gMDsKIAogCQlpZiAobWFzaykgewotI2lmIGRlZmluZWQoQkY1MjdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUxOF9GQU1JTFkpCisjaWYgZGVmaW5lZChDT05GSUdfQkY1MngpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKENPTkZJR19CRjUxeCkKIAkJCWdwaW9fYmFua19zYXZlZFtiYW5rXS5mZXIgICA9ICpwb3J0X2ZlcltiYW5rXTsKICNlbmRpZgogCQkJZ3Bpb19iYW5rX3NhdmVkW2JhbmtdLmluZW4gID0gZ3Bpb19hcnJheVtiYW5rXS0+aW5lbjsKQEAgLTYzMSw3ICs2MzEsNyBAQAogCQliYW5rID0gZ3Bpb19iYW5rKGkpOwogCiAJCWlmIChtYXNrKSB7Ci0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQogCQkJKnBvcnRfZmVyW2JhbmtdICAgCT0gZ3Bpb19iYW5rX3NhdmVkW2JhbmtdLmZlcjsKICNlbmRpZgogCQkJZ3Bpb19hcnJheVtiYW5rXS0+aW5lbiAgPSBncGlvX2Jhbmtfc2F2ZWRbYmFua10uaW5lbjsKQEAgLTY1Nyw5ICs2NTcsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQkxBQ0tGSU5fR1BJT1M7IGkgKz0gR1BJT19CQU5LU0laRSkgewogCQliYW5rID0gZ3Bpb19iYW5rKGkpOwogCi0jaWYgZGVmaW5lZChCRjUyN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQogCQlncGlvX2Jhbmtfc2F2ZWRbYmFua10uZmVyID0gKnBvcnRfZmVyW2JhbmtdOwotI2lmIGRlZmluZWQoQkY1MjdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChDT05GSUdfQkY1MXgpCiAJCWdwaW9fYmFua19zYXZlZFtiYW5rXS5tdXggPSAqcG9ydF9tdXhbYmFua107CiAjZWxzZQogCQlpZiAoYmFuayA9PSAwKQpAQCAtNjg1LDggKzY4NSw4IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9CTEFDS0ZJTl9HUElPUzsgaSArPSBHUElPX0JBTktTSVpFKSB7CiAJCWJhbmsgPSBncGlvX2JhbmsoaSk7CiAKLSNpZiBkZWZpbmVkKEJGNTI3X0ZBTUlMWSkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MThfRkFNSUxZKQotI2lmIGRlZmluZWQoQkY1MjdfRkFNSUxZKSB8fCBkZWZpbmVkKEJGNTE4X0ZBTUlMWSkKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChCRjUzN19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTF4KQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKENPTkZJR19CRjUxeCkKIAkJKnBvcnRfbXV4W2JhbmtdID0gZ3Bpb19iYW5rX3NhdmVkW2JhbmtdLm11eDsKICNlbHNlCiAJCWlmIChiYW5rID09IDApCkBAIC03MTAsNyArNzEwLDcgQEAKIAogCiAjZW5kaWYKLSNlbHNlIC8qIEJGNTQ4X0ZBTUlMWSAqLworI2Vsc2UgLyogQ09ORklHX0JGNTR4ICovCiAjaWZkZWYgQ09ORklHX1BNCiAKIHUzMiBiZmluX3BtX3N0YW5kYnlfc2V0dXAodm9pZCkKQEAgLTc2Miw3ICs3NjIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChnZXRfZ3Bpb19kaXIpOwogCi0jZW5kaWYgLyogQkY1NDhfRkFNSUxZICovCisjZW5kaWYgLyogQ09ORklHX0JGNTR4ICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgpAQCAtODAyLDcgKzgwMiw4IEBACiAJICovCiAJaWYgKHVubGlrZWx5KCFjaGVja19ncGlvKGlkZW50KSAmJgogCSAgICByZXNlcnZlZF9ncGlvX21hcFtncGlvX2JhbmsoaWRlbnQpXSAmIGdwaW9fYml0KGlkZW50KSkpIHsKLQkJZHVtcF9zdGFjaygpOworCQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKQorCQkJZHVtcF9zdGFjaygpOwogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlczogUGVyaXBoZXJhbCAlZCBpcyBhbHJlYWR5IHJlc2VydmVkIGFzIEdQSU8gYnkgJXMgIVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBpZGVudCwgZ2V0X2xhYmVsKGlkZW50KSk7CkBAIC04MTcsNyArODE4LDcgQEAKIAkJICogYmUgcmVxdWVzdGVkIGFuZCB1c2VkIGJ5IHNldmVyYWwgZHJpdmVycwogCQkgKi8KIAotI2lmZGVmIEJGNTQ4X0ZBTUlMWQorI2lmZGVmIENPTkZJR19CRjU0eAogCQlpZiAoISgocGVyICYgUF9NQVlTSEFSRSkgJiYgZ2V0X3BvcnRtdXgocGVyKSA9PSBQX0ZVTkNUMk1VWChwZXIpKSkgewogI2Vsc2UKIAkJaWYgKCEocGVyICYgUF9NQVlTSEFSRSkpIHsKQEAgLTgzMCw3ICs4MzEsOCBAQAogCQkJaWYgKGNtcF9sYWJlbChpZGVudCwgbGFiZWwpID09IDApCiAJCQkJZ290byBhbnl3YXk7CiAKLQkJCWR1bXBfc3RhY2soKTsKKwkJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQkJZHVtcF9zdGFjaygpOwogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBQZXJpcGhlcmFsICVkIGZ1bmN0aW9uICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYnkgJXMgIVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgaWRlbnQsIFBfRlVOQ1QyTVVYKHBlciksIGdldF9sYWJlbChpZGVudCkpOwpAQCAtOTQ2LDE0ICs5NDgsMTYgQEAKIAl9CiAKIAlpZiAodW5saWtlbHkocmVzZXJ2ZWRfZ3Bpb19tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCXByaW50ayhLRVJOX0VSUiAiYmZpbi1ncGlvOiBHUElPICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYnkgJXMgIVxuIiwKIAkJICAgICAgIGdwaW8sIGdldF9sYWJlbChncGlvKSk7CiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJaWYgKHVubGlrZWx5KHJlc2VydmVkX3BlcmlfbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpIHsKLQkJZHVtcF9zdGFjaygpOworCQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKQorCQkJZHVtcF9zdGFjaygpOwogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBhcyBQZXJpcGhlcmFsIGJ5ICVzICFcbiIsCiAJCSAgICAgICBncGlvLCBnZXRfbGFiZWwoZ3BpbykpOwpAQCAtOTY0LDcgKzk2OCw3IEBACiAJCXByaW50ayhLRVJOX05PVElDRSAiYmZpbi1ncGlvOiBHUElPICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYXMgZ3Bpby1pcnEhIgogCQkgICAgICAgIiAoRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9iZmluLWdwaW8tbm90ZXMudHh0KVxuIiwgZ3Bpbyk7CiAJfQotI2lmbmRlZiBCRjU0OF9GQU1JTFkKKyNpZm5kZWYgQ09ORklHX0JGNTR4CiAJZWxzZSB7CS8qIFJlc2V0IFBPTEFSIHNldHRpbmcgd2hlbiBhY3F1aXJpbmcgYSBncGlvIGZvciB0aGUgZmlyc3QgdGltZSAqLwogCQlzZXRfZ3Bpb19wb2xhcihncGlvLCAwKTsKIAl9CkBAIC05OTMsNyArOTk3LDggQEAKIAlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAKIAlpZiAodW5saWtlbHkoIShyZXNlcnZlZF9ncGlvX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCWdwaW9fZXJyb3IoZ3Bpbyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtMTAxNyw3ICsxMDIyLDggQEAKIAlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAKIAlpZiAodW5saWtlbHkocmVzZXJ2ZWRfZ3Bpb19pcnFfbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpIHsKLQkJZHVtcF9zdGFjaygpOworCQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKQorCQkJZHVtcF9zdGFjaygpOwogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBhcyBncGlvLWlycSAhXG4iLAogCQkgICAgICAgZ3Bpbyk7CkBAIC0xMDI1LDcgKzEwMzEsOCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAodW5saWtlbHkocmVzZXJ2ZWRfcGVyaV9tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImJmaW4tZ3BpbzogR1BJTyAlZCBpcyBhbHJlYWR5IHJlc2VydmVkIGFzIFBlcmlwaGVyYWwgYnkgJXMgIVxuIiwKIAkJICAgICAgIGdwaW8sIGdldF9sYWJlbChncGlvKSk7CkBAIC0xMDU3LDcgKzEwNjQsOCBAQAogCWxvY2FsX2lycV9zYXZlX2h3KGZsYWdzKTsKIAogCWlmICh1bmxpa2VseSghKHJlc2VydmVkX2dwaW9faXJxX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSkgewotCQlkdW1wX3N0YWNrKCk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCQlkdW1wX3N0YWNrKCk7CiAJCWdwaW9fZXJyb3IoZ3Bpbyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtMTA3Miw3ICsxMDgwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fYmZpbl9ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQogewotI2lmZGVmIEJGNTQ4X0ZBTUlMWQorI2lmZGVmIENPTkZJR19CRjU0eAogCWdwaW9fYXJyYXlbZ3Bpb19iYW5rKGdwaW8pXS0+ZGlyX2NsZWFyID0gZ3Bpb19iaXQoZ3Bpbyk7CiAjZWxzZQogCWdwaW9fYXJyYXlbZ3Bpb19iYW5rKGdwaW8pXS0+ZGlyICY9IH5ncGlvX2JpdChncGlvKTsKQEAgLTExMDAsMTMgKzExMDgsMTMgQEAKIAogdm9pZCBiZmluX2dwaW9faXJxX3ByZXBhcmUodW5zaWduZWQgZ3BpbykKIHsKLSNpZmRlZiBCRjU0OF9GQU1JTFkKKyNpZmRlZiBDT05GSUdfQkY1NHgKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2VuZGlmCiAKIAlwb3J0X3NldHVwKGdwaW8sIEdQSU9fVVNBR0UpOwogCi0jaWZkZWYgQkY1NDhfRkFNSUxZCisjaWZkZWYgQ09ORklHX0JGNTR4CiAJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwogCV9fYmZpbl9ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKIAlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CkBAIC0xMTM1LDcgKzExNDMsNyBAQAogCiAJZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5pbmVuICY9IH5ncGlvX2JpdChncGlvKTsKIAlncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci0jaWZkZWYgQkY1NDhfRkFNSUxZCisjaWZkZWYgQ09ORklHX0JGNTR4CiAJZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5kaXJfc2V0ID0gZ3Bpb19iaXQoZ3Bpbyk7CiAjZWxzZQogCWdwaW9fYXJyYXlbZ3Bpb19iYW5rKGdwaW8pXS0+ZGlyIHw9IGdwaW9fYml0KGdwaW8pOwpAQCAtMTE1MCw3ICsxMTU4LDcgQEAKIAogaW50IGJmaW5fZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKLSNpZmRlZiBCRjU0OF9GQU1JTFkKKyNpZmRlZiBDT05GSUdfQkY1NHgKIAlyZXR1cm4gKDEgJiAoZ3Bpb19hcnJheVtncGlvX2JhbmsoZ3BpbyldLT5kYXRhID4+IGdwaW9fc3ViX24oZ3BpbykpKTsKICNlbHNlCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCA3ZmQxMjY1Li40MDFiZDMyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC03MCw2ICs3MCwxMSBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKKy8qIFdlIGFyZSBub3QgYWxsb2NhdGluZyBhIHZhcmlhYmxlLXNpemVkIGJhZF9pcnFfZGVzYy5hZmZpbml0eSAqLworI2Vycm9yICJCbGFja2ZpbiBhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSy4iCisjZW5kaWYKKwogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCiB7CiAJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOwpAQCAtODMsNyArODgsNyBAQAogCQkJZ290byBza2lwOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0YjQzNDFkLi4yNzk1MmFlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE4Myw2ICsxODMsNyBAQAogCQkuID0gQUxJR04oNCk7CiAJCV9fZXRleHRfbDEgPSAuOwogCX0KKwlBU1NFUlQgKFNJWkVPRigudGV4dF9sMSkgPD0gTDFfQ09ERV9MRU5HVEgsICJMMSB0ZXh0IG92ZXJmbG93ISIpCiAKIAkuZGF0YV9sMSBMMV9EQVRBX0FfU1RBUlQgOiBBVChMT0FEQUREUigudGV4dF9sMSkgKyBTSVpFT0YoLnRleHRfbDEpKQogCXsKQEAgLTIwMCw2ICsyMDEsNyBAQAogCQkuID0gQUxJR04oNCk7CiAJCV9fZWJzc19sMSA9IC47CiAJfQorCUFTU0VSVCAoU0laRU9GKC5kYXRhX2FfbDEpIDw9IEwxX0RBVEFfQV9MRU5HVEgsICJMMSBkYXRhIEEgb3ZlcmZsb3chIikKIAogCS5kYXRhX2JfbDEgTDFfREFUQV9CX1NUQVJUIDogQVQoTE9BREFERFIoLmRhdGFfbDEpICsgU0laRU9GKC5kYXRhX2wxKSkKIAl7CkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2Vic3NfYl9sMSA9IC47CiAJfQorCUFTU0VSVCAoU0laRU9GKC5kYXRhX2JfbDEpIDw9IEwxX0RBVEFfQl9MRU5HVEgsICJMMSBkYXRhIEIgb3ZlcmZsb3chIikKIAogCV9fbDJfbG1hX3N0YXJ0ID0gTE9BREFERFIoLmRhdGFfYl9sMSkgKyBTSVpFT0YoLmRhdGFfYl9sMSk7CiAKQEAgLTIzOSw2ICsyNDIsNyBAQAogCQkuID0gQUxJR04oNCk7CiAJCV9fZWJzc19sMiA9IC47CiAJfQorCUFTU0VSVCAoU0laRU9GKC50ZXh0X2RhdGFfbDEpIDw9IEwyX0xFTkdUSCwgIkwyIG92ZXJmbG93ISIpCiAKIAkvKiBGb3JjZSB0cmFpbGluZyBhbGlnbm1lbnQgb2Ygb3VyIGluaXQgc2VjdGlvbiBzbyB0aGF0IHdoZW4gd2UKIAkgKiBmcmVlIG91ciBpbml0IG1lbW9yeSwgd2UgZG9uJ3QgbGVhdmUgYmVoaW5kIGEgcGFydGlhbCBwYWdlLgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IGQxYTJiOWMuLjI2N2JiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTMyLDggKzMyLDYgQEAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KICNkZWZpbmUgX01BQ0hfQkxBQ0tGSU5fSF8KIAotI2RlZmluZSBCRjUxOF9GQU1JTFkKLQogI2luY2x1ZGUgImJmNTE4LmgiCiAjaW5jbHVkZSAibWVtX21hcC5oIgogI2luY2x1ZGUgImRlZkJGNTEyLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAppbmRleCA5NTIxZTE3Li5kZmU0OTJkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKQEAgLTQ1LDQgKzQ1LDcxIEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjUxNCB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KIAorLyogUmVtb3ZhYmxlIFN0b3JhZ2UgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUFdSX0NUTCgpICAgICAgICBiZmluX3JlYWQxNihSU0lfUFdSX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BXUl9DVEwodmFsKSAgICBiZmluX3dyaXRlMTYoUlNJX1BXUl9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ0xLX0NUTCgpCSAgICAgICBiZmluX3JlYWQxNihSU0lfQ0xLX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NMS19DVEwodmFsKSAgICBiZmluX3dyaXRlMTYoUlNJX0NMS19DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfQVJHVU1FTlQoKSAgICAgICBiZmluX3JlYWQzMihSU0lfQVJHVU1FTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0FSR1VNRU5UKHZhbCkgICBiZmluX3dyaXRlMzIoUlNJX0FSR1VNRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ09NTUFORCgpICAgICAgICBiZmluX3JlYWQxNihSU0lfQ09NTUFORCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ09NTUFORCh2YWwpICAgIGJmaW5fd3JpdGUxNihSU0lfQ09NTUFORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BfQ01EKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX1JFU1BfQ01EKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQX0NNRCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9SRVNQX0NNRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMCgpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UwKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UxKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UxKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTEodmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTIoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMih2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMygpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UzKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9USU1FUigpICAgICBiZmluX3JlYWQzMihSU0lfREFUQV9USU1FUikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9USU1FUih2YWwpIGJmaW5fd3JpdGUzMihSU0lfREFUQV9USU1FUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfTEdUSCgpICAgICAgYmZpbl9yZWFkMTYoUlNJX0RBVEFfTEdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9MR1RIKHZhbCkgIGJmaW5fd3JpdGUxNihSU0lfREFUQV9MR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9DVEwoKSAgICAgICBiZmluX3JlYWQxNihSU0lfREFUQV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX0NUTCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9EQVRBX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX0NOVCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9EQVRBX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9DTlQodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfREFUQV9DTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9TVEFUVVMoKSAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1NUQVRVUyh2YWwpICAgICBiZmluX3dyaXRlMzIoUlNJX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1NUQVRVU19DTFIoKSAgICAgYmZpbl9yZWFkMTYoUlNJX1NUQVRVU0NMKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9TVEFUVVNfQ0xSKHZhbCkgYmZpbl93cml0ZTE2KFJTSV9TVEFUVVNDTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX01BU0swKCkgICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX01BU0swKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9NQVNLMCh2YWwpICAgICAgYmZpbl93cml0ZTMyKFJTSV9NQVNLMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX01BU0sxKCkgICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX01BU0sxKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9NQVNLMSh2YWwpICAgICAgYmZpbl93cml0ZTMyKFJTSV9NQVNLMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0ZJRk9fQ05UKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0ZJRk9fQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9GSUZPX0NOVCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9GSUZPX0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NFQVRBX0NUTCgpICAgICAgYmZpbl9yZWFkMTYoUlNJX0NFQVRBX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NFQVRBX0NUTCh2YWwpICBiZmluX3dyaXRlMTYoUlNJX0NFQVRBX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9GSUZPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9GSUZPKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9GSUZPKHZhbCkgICAgICAgYmZpbl93cml0ZTMyKFJTSV9GSUZPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfRV9TVEFUVVMoKSAgICAgICBiZmluX3JlYWQxNihSU0lfRVNUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0VfU1RBVFVTKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0VTVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfRV9NQVNLKCkgICAgICAgICBiZmluX3JlYWQxNihSU0lfRU1BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0VfTUFTSyh2YWwpICAgICBiZmluX3dyaXRlMTYoUlNJX0VNQVNLLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ0ZHKCkgICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DRkcodmFsKSAgICAgICAgYmZpbl93cml0ZTE2KFJTSV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRF9XQUlUX0VOKCkgICAgIGJmaW5fcmVhZDE2KFJTSV9SRF9XQUlUX0VOKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRF9XQUlUX0VOKHZhbCkgYmZpbl93cml0ZTE2KFJTSV9SRF9XQUlUX0VOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMCgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMCh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDEoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDEodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQyKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQyKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQyKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMygpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMyh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDQoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDQodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ1KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ1KQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ1KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ1LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENigpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENih2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDcoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDcpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDcodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDcsIHZhbCkKKwogI2VuZGlmIC8qIF9DREVGX0JGNTE0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCmluZGV4IDRlMjZjY2YuLjE0ZGY0M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaApAQCAtMjEwLDQgKzIxMCw3MSBAQAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQUJPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUJPUlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUJPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0FCT1JULCB2YWwpCiAKKy8qIFJlbW92YWJsZSBTdG9yYWdlIEludGVyZmFjZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUlNJX1BXUl9DVEwoKSAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BXUl9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QV1JfQ1RMKHZhbCkgICAgYmZpbl93cml0ZTE2KFJTSV9QV1JfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NMS19DVEwoKQkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0NMS19DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DTEtfQ1RMKHZhbCkgICAgYmZpbl93cml0ZTE2KFJTSV9DTEtfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0FSR1VNRU5UKCkgICAgICAgYmZpbl9yZWFkMzIoUlNJX0FSR1VNRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9BUkdVTUVOVCh2YWwpICAgYmZpbl93cml0ZTMyKFJTSV9BUkdVTUVOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NPTU1BTkQoKSAgICAgICAgYmZpbl9yZWFkMTYoUlNJX0NPTU1BTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NPTU1BTkQodmFsKSAgICBiZmluX3dyaXRlMTYoUlNJX0NPTU1BTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQX0NNRCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9SRVNQX0NNRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUF9DTUQodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfUkVTUF9DTUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTAoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTApCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMCh2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMSgpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UxKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UyKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UyKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTIodmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTMoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMyh2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfVElNRVIoKSAgICAgYmZpbl9yZWFkMzIoUlNJX0RBVEFfVElNRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfVElNRVIodmFsKSBiZmluX3dyaXRlMzIoUlNJX0RBVEFfVElNRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX0xHVEgoKSAgICAgIGJmaW5fcmVhZDE2KFJTSV9EQVRBX0xHVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfTEdUSCh2YWwpICBiZmluX3dyaXRlMTYoUlNJX0RBVEFfTEdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfQ1RMKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0RBVEFfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9DVEwodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfREFUQV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9DTlQoKSAgICAgICBiZmluX3JlYWQxNihSU0lfREFUQV9DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfQ05UKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0RBVEFfQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfU1RBVFVTKCkgICAgICAgICBiZmluX3JlYWQzMihSU0lfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9TVEFUVVModmFsKSAgICAgYmZpbl93cml0ZTMyKFJTSV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9TVEFUVVNfQ0xSKCkgICAgIGJmaW5fcmVhZDE2KFJTSV9TVEFUVVNDTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfU1RBVFVTX0NMUih2YWwpIGJmaW5fd3JpdGUxNihSU0lfU1RBVFVTQ0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9NQVNLMCgpICAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9NQVNLMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfTUFTSzAodmFsKSAgICAgIGJmaW5fd3JpdGUzMihSU0lfTUFTSzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9NQVNLMSgpICAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9NQVNLMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfTUFTSzEodmFsKSAgICAgIGJmaW5fd3JpdGUzMihSU0lfTUFTSzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9GSUZPX0NOVCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9GSUZPX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRklGT19DTlQodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfRklGT19DTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DRUFUQV9DVEwoKSAgICAgIGJmaW5fcmVhZDE2KFJTSV9DRUFUQV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DRUFUQV9DVEwodmFsKSAgYmZpbl93cml0ZTE2KFJTSV9DRUFUQV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfRklGTygpICAgICAgICAgICBiZmluX3JlYWQzMihSU0lfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRklGTyh2YWwpICAgICAgIGJmaW5fd3JpdGUzMihSU0lfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0VfU1RBVFVTKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0VTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9FX1NUQVRVUyh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9FU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0VfTUFTSygpICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX0VNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9FX01BU0sodmFsKSAgICAgYmZpbl93cml0ZTE2KFJTSV9FTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX0NGRygpICAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ0ZHKHZhbCkgICAgICAgIGJmaW5fd3JpdGUxNihSU0lfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkRfV0FJVF9FTigpICAgICBiZmluX3JlYWQxNihSU0lfUkRfV0FJVF9FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkRfV0FJVF9FTih2YWwpIGJmaW5fd3JpdGUxNihSU0lfUkRfV0FJVF9FTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDAoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDAodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQxKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQxKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMigpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMikKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMih2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDMoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDModmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ0KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ0KQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ0KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ0LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENSgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENSh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDYoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDYpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDYodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ3KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ3KQorI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ3KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ3LCB2YWwpCisKICNlbmRpZiAvKiBfQ0RFRl9CRjUxNl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKaW5kZXggNTQzZjI5MS4uNTZlZTVhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaApAQCAtMTEwLDQgKzExMCwxMzkgQEAKICNkZWZpbmUgUlNJX1BJRDYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRjggLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgNiAqLwogI2RlZmluZSBSU0lfUElENyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGQyAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA3ICovCiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICAgICBTSU5HTEUgQklUIE1BQ1JPIFBBSVJTIChiaXQgbWFzayBhbmQgbmVnYXRlZCBvbmUpICAgICAgKi8KKy8qICAgICBhbmQgTVVMVEkgQklUIFJFQUQgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfQ09NTUFORCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9JRFggIDB4M2YgICAgICAgLyogQ29tbWFuZCBJbmRleCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfUlNQICAweDQwICAgICAgIC8qIFJlc3BvbnNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDTURfTF9SU1AgIDB4ODAgICAgICAgLyogTG9uZyBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0lOVF9FICAweDEwMCAgICAgIC8qIENvbW1hbmQgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIENNRF9QRU5EX0UgIDB4MjAwICAgICAgLyogQ29tbWFuZCBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01EX0UgIDB4NDAwICAgICAgLyogQ29tbWFuZCBFbmFibGUgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfUFdSX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQV1JfT04gIDB4MyAgICAgICAgLyogUG93ZXIgT24gKi8KKyNpZiAwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUQkQgIDB4M2MgICAgICAgLyogVEJEICovCisjZW5kaWYKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNEX0NNRF9PRCAgMHg0MCAgICAgICAvKiBPcGVuIERyYWluIE91dHB1dCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBST0RfQ1RMICAweDgwICAgICAgIC8qIFJvZCBDb250cm9sICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NMS19DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0xLRElWICAweGZmICAgICAgIC8qIE1DX0NMSyBEaXZpc29yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0xLX0UgIDB4MTAwICAgICAgLyogTUNfQ0xLIEJ1cyBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBQV1JfU1ZfRSAgMHgyMDAgICAgICAvKiBQb3dlciBTYXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICBDTEtESVZfQllQQVNTICAweDQwMCAgICAgIC8qIEJ5cGFzcyBEaXZpc29yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgV0lERV9CVVMgIDB4ODAwICAgICAgLyogV2lkZSBCdXMgTW9kZSBFbmFibGUgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfUkVTUF9DTUQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFU1BfQ01EICAweDNmICAgICAgIC8qIFJlc3BvbnNlIENvbW1hbmQgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfREFUQV9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERUWF9FICAweDEgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERUWF9ESVIgIDB4MiAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBEVFhfTU9ERSAgMHg0ICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIERUWF9ETUFfRSAgMHg4ICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIERNQSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERUWF9CTEtfTEdUSCAgMHhmMCAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEJsb2NrIExlbmd0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgQ01EX0NSQ19GQUlMICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCAqLworI2RlZmluZSAgICAgICAgICAgICAgREFUX0NSQ19GQUlMICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBDTURfVElNRV9PVVQgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgREFUX1RJTUVfT1VUICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBUWF9VTkRFUlJVTiAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biAqLworI2RlZmluZSAgICAgICAgICAgICAgICBSWF9PVkVSUlVOICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biAqLworI2RlZmluZSAgICAgICAgICAgICAgQ01EX1JFU1BfRU5EICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDTURfU0VOVCAgMHg4MCAgICAgICAvKiBDTUQgU2VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRfRU5EICAweDEwMCAgICAgIC8qIERhdGEgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgIFNUQVJUX0JJVF9FUlIgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgREFUX0JMS19FTkQgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX0FDVCAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9BQ1QgIDB4MTAwMCAgICAgLyogVHJhbnNtaXQgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBSWF9BQ1QgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fU1RBVCAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgUlhfRklGT19TVEFUICAweDgwMDAgICAgIC8qIFJlY2VpdmUgRklGTyBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fRlVMTCAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fRlVMTCAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCAqLworI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19aRVJPICAweDQwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9EQVRfWkVSTyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVFhfREFUX1JEWSAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFJYX0ZJRk9fUkRZICAweDIwMDAwMCAgIC8qIFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTX0NMUiAqLworCisjZGVmaW5lICAgICAgICAgQ01EX0NSQ19GQUlMX1NUQVQgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIERBVF9DUkNfRkFJTF9TVEFUICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX1NUQVQgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBEQVRfVElNRU9VVF9TVEFUICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIFRYX1VOREVSUlVOX1NUQVQgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX1NUQVQgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIENNRF9SRVNQX0VORF9TVEFUICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgIENNRF9TRU5UX1NUQVQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX1NUQVQgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICBTVEFSVF9CSVRfRVJSX1NUQVQgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBEQVRfQkxLX0VORF9TVEFUICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kIFN0YXR1cyAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9NQVNLMCAqLworCisjZGVmaW5lICAgICAgICAgQ01EX0NSQ19GQUlMX01BU0sgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfTUFTSyAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfTUFTSyAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgTWFzayAqLworI2RlZmluZSAgICAgICAgICBEQVRfVElNRU9VVF9NQVNLICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgTWFzayAqLworI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9NQVNLICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fTUFTSyAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gTWFzayAqLworI2RlZmluZSAgICAgICAgIENNRF9SRVNQX0VORF9NQVNLICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9NQVNLICAweDgwICAgICAgIC8qIENNRCBTZW50IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfTUFTSyAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICBTVEFSVF9CSVRfRVJSX01BU0sgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfTUFTSyAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICBDTURfQUNUX01BU0sgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgVFhfQUNUX01BU0sgIDB4MTAwMCAgICAgLyogVHJhbnNtaXQgQWN0aXZlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9BQ1RfTUFTSyAgMHgyMDAwICAgICAvKiBSZWNlaXZlIEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgVFhfRklGT19TVEFUX01BU0sgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgTWFzayAqLworI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fU1RBVF9NQVNLICAweDgwMDAgICAgIC8qIFJlY2VpdmUgRklGTyBTdGF0dXMgTWFzayAqLworI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fRlVMTF9NQVNLICAweDEwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRnVsbCBNYXNrICovCisjZGVmaW5lICAgICAgICAgUlhfRklGT19GVUxMX01BU0sgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fWkVST19NQVNLICAweDQwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRW1wdHkgTWFzayAqLworI2RlZmluZSAgICAgICAgICBSWF9EQVRfWkVST19NQVNLICAweDgwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBFbXB0eSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICBUWF9EQVRfUkRZX01BU0sgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgTWFzayAqLworI2RlZmluZSAgICAgICAgICBSWF9GSUZPX1JEWV9NQVNLICAweDIwMDAwMCAgIC8qIFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgTWFzayAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9GSUZPX0NOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIEZJRk9fQ09VTlQgIDB4N2ZmZiAgICAgLyogRklGTyBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9FX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICBTRElPX0lOVF9ERVQgIDB4MiAgICAgICAgLyogU0RJTyBJbnQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBTRF9DQVJEX0RFVCAgMHgxMCAgICAgICAvKiBTRCBDYXJkIERldGVjdCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9FX01BU0sgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFNESU9fTVNLICAweDIgICAgICAgIC8qIE1hc2sgU0RJTyBJbnQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0NEX01TSyAgMHg0MCAgICAgICAvKiBNYXNrIENhcmQgRGV0ZWN0ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NGRyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENMS1NfRU4gIDB4MSAgICAgICAgLyogQ2xvY2tzIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTRDRFICAweDQgICAgICAgIC8qIFNESU8gNC1CaXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNV0UgIDB4OCAgICAgICAgLyogTW92aW5nIFdpbmRvdyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNEX1JTVCAgMHgxMCAgICAgICAvKiBTRE1NQyBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUFVQX1NEREFUICAweDIwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFBVUF9TRERBVDMgIDB4NDAgICAgICAgLyogUHVsbC11cCBTRF9EQVQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBQRF9TRERBVDMgIDB4ODAgICAgICAgLyogUHVsbC1kb3duIFNEX0RBVDMgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfUkRfV0FJVF9FTiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSV1IgIDB4MSAgICAgICAgLyogUmVhZCBXYWl0IFJlcXVlc3QgKi8KKwogI2VuZGlmIC8qIF9ERUZfQkY1MTRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCmluZGV4IDE0OWEyNjkuLmRmYzkzODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKQEAgLTQ4Nyw0ICs0ODcsMTM5IEBACiAjZGVmaW5lIFJTSV9QSUQ2ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkY4IC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDYgKi8KICNkZWZpbmUgUlNJX1BJRDcgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRkMgLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgNyAqLwogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCisvKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCisjaWYgMAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLworI2VuZGlmCisjZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCisjZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLworI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCisjZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCisjZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCisKICNlbmRpZiAvKiBfREVGX0JGNTE2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCAyOTc4MjFlLi40MTdhYmNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0zMiw4ICszMiw2IEBACiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCiAjZGVmaW5lIF9NQUNIX0JMQUNLRklOX0hfCiAKLSNkZWZpbmUgQkY1MjdfRkFNSUxZCi0KICNpbmNsdWRlICJiZjUyNy5oIgogI2luY2x1ZGUgIm1lbV9tYXAuaCIKICNpbmNsdWRlICJkZWZCRjUyMi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCmluZGV4IGNkMDRjNWUuLjA1NzI5MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKQEAgLTg0Myw2ICs4NDMsNzEgQEAKIH07CiAjZW5kaWYgIC8qIHNwaSBtYXN0ZXIgYW5kIGRldmljZXMgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9TUE9SVF9NT0RVTEUpCisKKy8qIFNQT1JUIFNQSSBjb250cm9sbGVyIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfbWFzdGVyIGJmaW5fc3BvcnRfc3BpMF9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsIC8qIG1hc3RlciBvbmx5IHN1cHBvcnRzIG9uZSBkZXZpY2UgKi8KKwkuZW5hYmxlX2RtYSA9IDAsICAvKiBtYXN0ZXIgZG9uJ3Qgc3VwcG9ydCBETUEgKi8KKwkucGluX3JlcSA9IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX0RSUFJJLAorCQlQX1NQT1JUMF9SU0NMSywgUF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9SRlMsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3Nwb3J0X3NwaTBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFNQT1JUMF9UQ1IxLAorCQkuZW5kICAgPSBTUE9SVDBfVENSMSArIDB4RkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1NQT1JUMF9FUlJPUiwKKwkJLmVuZCAgID0gSVJRX1NQT1JUMF9FUlJPUiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0X3NwaTBfZGV2aWNlID0geworCS5uYW1lID0gImJmaW4tc3BvcnQtc3BpIiwKKwkuaWQgPSAxLCAvKiBCdXMgbnVtYmVyICovCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fc3BvcnRfc3BpMF9yZXNvdXJjZSksCisJLnJlc291cmNlID0gYmZpbl9zcG9ydF9zcGkwX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fc3BvcnRfc3BpMF9pbmZvLCAvKiBQYXNzZWQgdG8gZHJpdmVyICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfbWFzdGVyIGJmaW5fc3BvcnRfc3BpMV9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsIC8qIG1hc3RlciBvbmx5IHN1cHBvcnRzIG9uZSBkZXZpY2UgKi8KKwkuZW5hYmxlX2RtYSA9IDAsICAvKiBtYXN0ZXIgZG9uJ3Qgc3VwcG9ydCBETUEgKi8KKwkucGluX3JlcSA9IHtQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX0RSUFJJLAorCQlQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9SRlMsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3Nwb3J0X3NwaTFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFNQT1JUMV9UQ1IxLAorCQkuZW5kICAgPSBTUE9SVDFfVENSMSArIDB4RkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1NQT1JUMV9FUlJPUiwKKwkJLmVuZCAgID0gSVJRX1NQT1JUMV9FUlJPUiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0X3NwaTFfZGV2aWNlID0geworCS5uYW1lID0gImJmaW4tc3BvcnQtc3BpIiwKKwkuaWQgPSAyLCAvKiBCdXMgbnVtYmVyICovCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fc3BvcnRfc3BpMV9yZXNvdXJjZSksCisJLnJlc291cmNlID0gYmZpbl9zcG9ydF9zcGkxX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fc3BvcnRfc3BpMV9pbmZvLCAvKiBQYXNzZWQgdG8gZHJpdmVyICovCisJfSwKK307CisKKyNlbmRpZiAgLyogc3BvcnQgc3BpIG1hc3RlciBhbmQgZGV2aWNlcyAqLworCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzUpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1X01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZmJfZGV2aWNlID0gewogCS5uYW1lID0gImJmNTM3LWxxMDM1IiwKQEAgLTEwNzMsNiArMTEzOCwxNDEgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1BNSUNfQURQNTUyMCkgfHwgZGVmaW5lZChDT05GSUdfUE1JQ19BRFA1NTIwX01PRFVMRSkKKyNpbmNsdWRlIDxsaW51eC9tZmQvYWRwNTUyMC5oPgorCisJLyoKKwkgKiAgQURQNTUyMC81NTAxIEJhY2tsaWdodCBEYXRhCisJICovCisKK3N0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZyb21fZGF0YSBhZHA1NTIwX2JhY2tsaWdodF9kYXRhID0geworCS5mYWRlX2luIAkJPSBGQURFX1RfMTIwMG1zLAorCS5mYWRlX291dCAJCT0gRkFERV9UXzEyMDBtcywKKwkuZmFkZV9sZWRfbGF3IAkJPSBCTF9MQVdfTElORUFSLAorCS5lbl9hbWJsX3NlbnMgCQk9IDEsCisJLmFibWxfZmlsdCAJCT0gQkxfQU1CTF9GSUxUXzY0MG1zLAorCS5sMV9kYXlsaWdodF9tYXggCT0gQkxfQ1VSX21BKDE1KSwKKwkubDFfZGF5bGlnaHRfZGltIAk9IEJMX0NVUl9tQSgwKSwKKwkubDJfb2ZmaWNlX21heCAJCT0gQkxfQ1VSX21BKDcpLAorCS5sMl9vZmZpY2VfZGltIAkJPSBCTF9DVVJfbUEoMCksCisJLmwzX2RhcmtfbWF4IAkJPSBCTF9DVVJfbUEoMyksCisJLmwzX2RhcmtfZGltIAkJPSBCTF9DVVJfbUEoMCksCisJLmwyX3RyaXAgCQk9IEwyX0NPTVBfQ1VSUl91QSg3MDApLAorCS5sMl9oeXN0IAkJPSBMMl9DT01QX0NVUlJfdUEoNTApLAorCS5sM190cmlwIAkJPSBMM19DT01QX0NVUlJfdUEoODApLAorCS5sM19oeXN0IAkJPSBMM19DT01QX0NVUlJfdUEoMjApLAorfTsKKworCS8qCisJICogIEFEUDU1MjAvNTUwMSBMRURzIERhdGEKKwkgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworc3RhdGljIHN0cnVjdCBsZWRfaW5mbyBhZHA1NTIwX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImFkcDU1MjAtbGVkMSIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAibm9uZSIsCisJCS5mbGFncyA9IEZMQUdfSURfQURQNTUyMF9MRUQxX0FEUDU1MDFfTEVEMCB8IExFRF9PRkZUXzYwMG1zLAorCX0sCisjaWZkZWYgQURQNTUyMF9FTl9BTExfTEVEUworCXsKKwkJLm5hbWUgPSAiYWRwNTUyMC1sZWQyIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJub25lIiwKKwkJLmZsYWdzID0gRkxBR19JRF9BRFA1NTIwX0xFRDJfQURQNTUwMV9MRUQxLAorCX0sCisJeworCQkubmFtZSA9ICJhZHA1NTIwLWxlZDMiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gIm5vbmUiLAorCQkuZmxhZ3MgPSBGTEFHX0lEX0FEUDU1MjBfTEVEM19BRFA1NTAxX0xFRDIsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBhZHA1NTIwX2xlZHNfcGxhdGZyb21fZGF0YSBhZHA1NTIwX2xlZHNfZGF0YSA9IHsKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKGFkcDU1MjBfbGVkcyksCisJLmxlZHMgPSBhZHA1NTIwX2xlZHMsCisJLmZhZGVfaW4gPSBGQURFX1RfNjAwbXMsCisJLmZhZGVfb3V0ID0gRkFERV9UXzYwMG1zLAorCS5sZWRfb25fdGltZSA9IExFRF9PTlRfNjAwbXMsCit9OworCisJLyoKKwkgKiAgQURQNTUyMCBHUElPIERhdGEKKwkgKi8KKworc3RhdGljIHN0cnVjdCBhZHA1NTIwX2dwaW9fcGxhdGZyb21fZGF0YSBhZHA1NTIwX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19zdGFydCA9IDUwLAorCS5ncGlvX2VuX21hc2sgPSBHUElPX0MxIHwgR1BJT19DMiB8IEdQSU9fUjIsCisJLmdwaW9fcHVsbHVwX21hc2sgPSBHUElPX0MxIHwgR1BJT19DMiB8IEdQSU9fUjIsCit9OworCisJLyoKKwkgKiAgQURQNTUyMCBLZXlwYWQgRGF0YQorCSAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZHA1NTIwX2tleW1hcFtBRFA1NTIwX0tFWU1BUFNJWkVdID0geworCVtLRVkoMCwgMCldCT0gS0VZX0dSQVZFLAorCVtLRVkoMCwgMSldCT0gS0VZXzEsCisJW0tFWSgwLCAyKV0JPSBLRVlfMiwKKwlbS0VZKDAsIDMpXQk9IEtFWV8zLAorCVtLRVkoMSwgMCldCT0gS0VZXzQsCisJW0tFWSgxLCAxKV0JPSBLRVlfNSwKKwlbS0VZKDEsIDIpXQk9IEtFWV82LAorCVtLRVkoMSwgMyldCT0gS0VZXzcsCisJW0tFWSgyLCAwKV0JPSBLRVlfOCwKKwlbS0VZKDIsIDEpXQk9IEtFWV85LAorCVtLRVkoMiwgMildCT0gS0VZXzAsCisJW0tFWSgyLCAzKV0JPSBLRVlfTUlOVVMsCisJW0tFWSgzLCAwKV0JPSBLRVlfRVFVQUwsCisJW0tFWSgzLCAxKV0JPSBLRVlfQkFDS1NMQVNILAorCVtLRVkoMywgMildCT0gS0VZX0JBQ0tTUEFDRSwKKwlbS0VZKDMsIDMpXQk9IEtFWV9FTlRFUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9rZXlzX3BsYXRmcm9tX2RhdGEgYWRwNTUyMF9rZXlzX2RhdGEgPSB7CisJLnJvd3NfZW5fbWFzawk9IFJPV19SMyB8IFJPV19SMiB8IFJPV19SMSB8IFJPV19SMCwKKwkuY29sc19lbl9tYXNrCT0gQ09MX0MzIHwgQ09MX0MyIHwgQ09MX0MxIHwgQ09MX0MwLAorCS5rZXltYXAJCT0gYWRwNTUyMF9rZXltYXAsCisJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGFkcDU1MjBfa2V5bWFwKSwKKwkucmVwZWF0CQk9IDAsCit9OworCisJLyoKKwkgKiAgQURQNTUyMC81NTAxIE11bHRpZnVjdGlvbiBEZXZpY2UgSW5pdCBEYXRhCisJICovCisKK3N0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9zdWJkZXZfaW5mbyBhZHA1NTIwX3N1YmRldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImFkcDU1MjAtYmFja2xpZ2h0IiwKKwkJLmlkID0gSURfQURQNTUyMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWRwNTUyMF9iYWNrbGlnaHRfZGF0YSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWRwNTUyMC1sZWQiLAorCQkuaWQgPSBJRF9BRFA1NTIwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhZHA1NTIwX2xlZHNfZGF0YSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWRwNTUyMC1ncGlvIiwKKwkJLmlkID0gSURfQURQNTUyMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWRwNTUyMF9ncGlvX2RhdGEsCisJfSwKKwl7CisJCS5uYW1lID0gImFkcDU1MjAta2V5cyIsCisJCS5pZCA9IElEX0FEUDU1MjAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFkcDU1MjBfa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGFkcDU1MjBfcGxhdGZvcm1fZGF0YSBhZHA1NTIwX3BkZXZfZGF0YSA9IHsKKwkubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKGFkcDU1MjBfc3ViZGV2cyksCisJLnN1YmRldnMgPSBhZHA1NTIwX3N1YmRldnMsCit9OworCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJmaW5faTJjX2JvYXJkX2luZm9bXSA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19BRDcxNDIpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0FENzE0Ml9NT0RVTEUpCiAJewpAQCAtMTEwNSw2ICsxMzA1LDEzIEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikmYWRwNTU4OF9rcGFkX2RhdGEsCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1BNSUNfQURQNTUyMCkgfHwgZGVmaW5lZChDT05GSUdfUE1JQ19BRFA1NTIwX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwbWljLWFkcDU1MjAiLCAweDMyKSwKKwkJLmlycSA9IElSUV9QRjcsCisJCS5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikmYWRwNTUyMF9wZGV2X2RhdGEsCisJfSwKKyNlbmRpZgogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCkBAIC0xMTIwLDggKzEzMjcsMTEgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9QTEFURk9STSkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9QTEFURk9STV9NT0RVTEUpCi0jZGVmaW5lIFBBVEFfSU5UCUlSUV9QRjUKKyNkZWZpbmUgQ0ZfSURFX05BTkRfQ0FSRF9VU0VfSEREX0lOVEVSRkFDRQorLyogI2RlZmluZSBDRl9JREVfTkFORF9DQVJEX1VTRV9DRl9JTl9DT01NT05fTUVNT1JZX01PREUgKi8KIAorI2lmZGVmIENGX0lERV9OQU5EX0NBUkRfVVNFX0hERF9JTlRFUkZBQ0UKKyNkZWZpbmUgUEFUQV9JTlQJSVJRX1BGNQogc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gYmZpbl9wYXRhX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmlvcG9ydF9zaGlmdCA9IDEsCiAJLmlycV9mbGFncyA9IElSUUZfVFJJR0dFUl9ISUdIIHwgSVJRRl9ESVNBQkxFRCwKQEAgLTExNDQsNiArMTM1NCwyNCBAQAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKKyNlbGlmIGRlZmluZWQoQ0ZfSURFX05BTkRfQ0FSRF9VU0VfQ0ZfSU5fQ09NTU9OX01FTU9SWV9NT0RFKQorc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gYmZpbl9wYXRhX3BsYXRmb3JtX2RhdGEgPSB7CisJLmlvcG9ydF9zaGlmdCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fcGF0YV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4MjAyMTE4MjAsCisJCS5lbmQgPSAweDIwMjExODNGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gMHgyMDIxMTgxQywKKwkJLmVuZCA9IDB4MjAyMTE4MUYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fcGF0YV9kZXZpY2UgPSB7CiAJLm5hbWUgPSAicGF0YV9wbGF0Zm9ybSIsCkBAIC0xMjMyLDYgKzE0NjAsMTEgQEAKIAkmYmZpbl9zcGkwX2RldmljZSwKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9CRklOX1NQT1JUX01PRFVMRSkKKwkmYmZpbl9zcG9ydF9zcGkwX2RldmljZSwKKwkmYmZpbl9zcG9ydF9zcGkxX2RldmljZSwKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzUpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1X01PRFVMRSkKIAkmYmZpbl9mYl9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCAwYzBlM2UyLi5jZjZjMTUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0zMiw4ICszMiw2IEBACiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCiAjZGVmaW5lIF9NQUNIX0JMQUNLRklOX0hfCiAKLSNkZWZpbmUgQkY1NDhfRkFNSUxZCi0KICNpbmNsdWRlICJiZjU0OC5oIgogI2luY2x1ZGUgIm1lbV9tYXAuaCIKICNpbmNsdWRlICJhbm9tYWx5LmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKaW5kZXggZjQ4YTZhZS4uYmNlNWE4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwpAQCAtMjg3LDcgKzI4Nyw3IEBACiBzdGF0aWMgaW50IGJmaW5fcG1fdmFsaWQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewogCXJldHVybiAoc3RhdGUgPT0gUE1fU1VTUEVORF9TVEFOREJZCi0jaWZuZGVmIEJGNTMzX0ZBTUlMWQorI2lmICEoZGVmaW5lZChCRjUzM19GQU1JTFkpIHx8IGRlZmluZWQoQ09ORklHX0JGNTYxKSkKIAkvKgogCSAqIE9uIEJGNTMzLzIvMToKIAkgKiBJZiB3ZSBlbnRlciBIaWJlcm5hdGUgdGhlIFNDS0UgUGluIGlzIGRyaXZlbiBMb3csCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggOWRmMGNhOC4uZDVjZjc0MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTYsNiArNTYsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIAogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwppbmRleCAyZGZhYzhjLi43ZjY0MmZjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCmluZGV4IDczYWJhZTcuLmFmM2U4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJaWYgKGFjdGlvbikgewogCQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCQlzZXFfcHJpbnRmKHAsICIgJTEwcyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUgPyA6ICItIik7CiAJCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZGEyNTIwZC4uNjAyNTE4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggYzEwOGYzOS4uMzlhYmJmNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9IODMwMF9TV0FCX0gKICNkZWZpbmUgX0g4MzAwX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKaW5kZXggZWY0ZjAwNC4uNzRmOGRkNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2OwogCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJCWlmICghYWN0aW9uKQogCQkJZ290byB1bmxvY2s7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCmluZGV4IGE0NmY4MzkuLmFmOTQwNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUworKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCWRhdGE4IHN5c19uaV9zeXNjYWxsCiAJZGF0YTggc3lzX3VtYXNrCQkgIC8qIDYwICovCiAJZGF0YTggc3lzX2Nocm9vdAotCWRhdGE4IHN5c191c3RhdAorCWRhdGE4IGNvbXBhdF9zeXNfdXN0YXQKIAlkYXRhOCBzeXNfZHVwMgogCWRhdGE4IHN5c19nZXRwcGlkCiAJZGF0YTggc3lzX2dldHBncnAJICAvKiA2NSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IDM4NTk1NTguLjBjMjYxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTYsOCArNiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCiAvKiBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXI6ICovCiAjZGVmaW5lIEZQU1JfVFJBUF9WRAkoMSA8PCAwKQkvKiBpbnZhbGlkIG9wIHRyYXAgZGlzYWJsZWQgKi8KICNkZWZpbmUgRlBTUl9UUkFQX0RECSgxIDw8IDEpCS8qIGRlbm9ybWFsIHRyYXAgZGlzYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oCmluZGV4IDBmNWI1NTkuLmMyYzVmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaApAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMiwyMDAzIFN1cmVzaCBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyogZGVmaW5lIHRoaXMgbWFjcm8gdG8gZ2V0IHNvbWUgYXNtIHN0bXRzIGluY2x1ZGVkIGluICdjJyBmaWxlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKaW5kZXggYTNlNDRhNS4uYzQ3ODMwZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogLyogaW5jbHVkZSBjb21waWxlciBzcGVjaWZpYyBpbnRyaW5zaWNzICovCiAjaW5jbHVkZSA8YXNtL2lhNjRyZWdzLmg+CiAjaWZkZWYgX19JTlRFTF9DT01QSUxFUgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGJmYTg2YjYuLjE4YTdlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIxLDggKzIxLDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKiBTZWxlY3QgeDg2IHNwZWNpZmljIGZlYXR1cmVzIGluIDxsaW51eC9rdm0uaD4gKi8KQEAgLTE2Niw3ICsxNjUsNDAgQEAKIAl1bnNpZ25lZCBsb25nICB2Y3B1aWRbNV07CiAJdW5zaWduZWQgbG9uZyAgdnBzcjsKIAl1bnNpZ25lZCBsb25nICB2cHI7Ci0JdW5zaWduZWQgbG9uZyAgdmNyWzEyOF07CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nICB2Y3JbMTI4XTsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGxvbmcgZGNyOworCQkJdW5zaWduZWQgbG9uZyBpdG07CisJCQl1bnNpZ25lZCBsb25nIGl2YTsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MVs1XTsKKwkJCXVuc2lnbmVkIGxvbmcgcHRhOworCQkJdW5zaWduZWQgbG9uZyByc3YyWzddOworCQkJdW5zaWduZWQgbG9uZyBpcHNyOworCQkJdW5zaWduZWQgbG9uZyBpc3I7CisJCQl1bnNpZ25lZCBsb25nIHJzdjM7CisJCQl1bnNpZ25lZCBsb25nIGlpcDsKKwkJCXVuc2lnbmVkIGxvbmcgaWZhOworCQkJdW5zaWduZWQgbG9uZyBpdGlyOworCQkJdW5zaWduZWQgbG9uZyBpaXBhOworCQkJdW5zaWduZWQgbG9uZyBpZnM7CisJCQl1bnNpZ25lZCBsb25nIGlpbTsKKwkJCXVuc2lnbmVkIGxvbmcgaWhhOworCQkJdW5zaWduZWQgbG9uZyByc3Y0WzM4XTsKKwkJCXVuc2lnbmVkIGxvbmcgbGlkOworCQkJdW5zaWduZWQgbG9uZyBpdnI7CisJCQl1bnNpZ25lZCBsb25nIHRwcjsKKwkJCXVuc2lnbmVkIGxvbmcgZW9pOworCQkJdW5zaWduZWQgbG9uZyBpcnJbNF07CisJCQl1bnNpZ25lZCBsb25nIGl0djsKKwkJCXVuc2lnbmVkIGxvbmcgcG12OworCQkJdW5zaWduZWQgbG9uZyBjbWN2OworCQkJdW5zaWduZWQgbG9uZyByc3Y1WzVdOworCQkJdW5zaWduZWQgbG9uZyBscnIwOworCQkJdW5zaWduZWQgbG9uZyBscnIxOworCQkJdW5zaWduZWQgbG9uZyByc3Y2WzQ2XTsKKwkJfTsKKwl9OwogfTsKIAogc3RydWN0IGt2bV9yZWdzIHsKQEAgLTIxNCw0ICsyNDYsMTggQEAKIHN0cnVjdCBrdm1fZnB1IHsKIH07CiAKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TVEFDS19TSElGVAkxNgorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NJWkUJKDFVTCA8PCBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NISUZUKQorCitzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayB7CisJdW5zaWduZWQgY2hhciBzdGFja1tLVk1fSUE2NF9WQ1BVX1NUQUNLX1NJWkVdOworfTsKKworc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMzQ4NjYzNi4uNDU0MjY1MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTExMiw3ICsxMTIsMTEgQEAKICNkZWZpbmUgVkNQVV9TVFJVQ1RfU0hJRlQJMTYKICNkZWZpbmUgVkNQVV9TVFJVQ1RfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IFZDUFVfU1RSVUNUX1NISUZUKQogCi0jZGVmaW5lIEtWTV9TVEtfT0ZGU0VUCQlWQ1BVX1NUUlVDVF9TSVpFCisvKgorICogVGhpcyBtdXN0IG1hdGNoIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfe1NISUZULFNJWkV9IGFyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaAorICovCisjZGVmaW5lIEtWTV9TVEtfU0hJRlQJCTE2CisjZGVmaW5lIEtWTV9TVEtfT0ZGU0VUCQkoX19JQTY0X1VMX0NPTlNUKDEpPDwgS1ZNX1NUS19TSElGVCkKIAogI2RlZmluZSBLVk1fVk1fU1RSVUNUX1NISUZUCTE5CiAjZGVmaW5lIEtWTV9WTV9TVFJVQ1RfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IEtWTV9WTV9TVFJVQ1RfU0hJRlQpCkBAIC0xNTMsMTAgKzE1NywxMCBAQAogCXN0cnVjdCBrdm1fdmNwdV9kYXRhIHZjcHVfZGF0YVtLVk1fTUFYX1ZDUFVTXTsKIH07CiAKLSNkZWZpbmUgVkNQVV9CQVNFKG4pCUtWTV9WTV9EQVRBX0JBU0UgKyBcCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCB2Y3B1X2RhdGFbbl0pCi0jZGVmaW5lIFZNX0JBU0UJCUtWTV9WTV9EQVRBX0JBU0UgKyBcCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fdm1fc3RydWN0KQorI2RlZmluZSBWQ1BVX0JBU0UobikJKEtWTV9WTV9EQVRBX0JBU0UgKyBcCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCB2Y3B1X2RhdGFbbl0pKQorI2RlZmluZSBLVk1fVk1fQkFTRQkoS1ZNX1ZNX0RBVEFfQkFTRSArIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV92bV9zdHJ1Y3QpKQogI2RlZmluZSBLVk1fTUVNX0RJUlRZX0xPR19CQVNFCUtWTV9WTV9EQVRBX0JBU0UgKyBcCiAJCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fbWVtX2RpcnR5X2xvZykKIApAQCAtMjM1LDggKzIzOSw2IEBACiAKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7Ci1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnewotfTsKIAogc3RydWN0IGt2bV9tbWlvX3JlcSB7CiAJdWludDY0X3QgYWRkcjsgICAgICAgICAgLyogIHBoeXNpY2FsIGFkZHJlc3MJCSovCkBAIC00NjIsNiArNDY0LDggQEAKIAl1bnNpZ25lZCBsb25nCW1ldGFwaHlzaWNhbF9ycjQ7CiAJdW5zaWduZWQgbG9uZwl2bW1faW5pdF9ycjsKIAorCWludAkJb25saW5lX3ZjcHVzOworCiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV92bV9zdGF0IHN0YXQ7CiAJc3RydWN0IGt2bV9zYWxfZGF0YSByZHZfc2FsX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYzEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9JQTY0X01TSV9ERUZfSAorI2RlZmluZSBfSUE2NF9NU0lfREVGX0gKKworLyoKKyAqIFNoaWZ0cyBmb3IgQVBJQy1iYXNlZCBkYXRhCisgKi8KKworI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX1NISUZUCTAKKyNkZWZpbmUJICAgIE1TSV9EQVRBX1ZFQ1RPUih2KQkJKCgodTgpdikgPDwgTVNJX0RBVEFfVkVDVE9SX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX01BU0sJMHhmZmZmZmYwMAorCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUCTgKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkJKDEgPDwgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCkKKworI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfU0hJRlQJMTQKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0xFVkVMX0RFQVNTRVJUCSgwIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfQVNTRVJUCSgxIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX1NISUZUCTE1CisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX0VER0UJKDAgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwJKDEgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKworLyoKKyAqIFNoaWZ0L21hc2sgZmllbGRzIGZvciBBUElDLWJhc2VkIGJ1cyBhZGRyZXNzCisgKi8KKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9TSElGVAk0CisjZGVmaW5lICAgICBNU0lfQUREUl9IRUFERVIJCTB4ZmVlMDAwMDAKKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9NQVNLCTB4ZmZmMDAwMGYKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdSkJKChjcHUpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVAkyCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX01PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCisjZGVmaW5lCSAgICBNU0lfQUREUl9ERVNUX01PREVfTE9HSUMJKDEgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVAkzCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9DUFUJKDAgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkJKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisKKyNlbmRpZi8qIF9JQTY0X01TSV9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDc3ZjMwYjYuLjMwY2Y0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTI3LDEyICsyNywxMiBAQAogCiAjZWxzZSAvKiAhIFNNUCAqLwogCi0jZGVmaW5lIFBFUl9DUFVfQVRUUklCVVRFUwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGVyY3B1IikpKQotCiAjZGVmaW5lIHBlcl9jcHVfaW5pdCgpCQkJCShfX3BoeXNfcGVyX2NwdV9zdGFydCkKIAogI2VuZGlmCS8qIFNNUCAqLwogCisjZGVmaW5lIFBFUl9DUFVfQkFTRV9TRUNUSU9OICIuZGF0YS5wZXJjcHUiCisKIC8qCiAgKiBCZSBleHRyZW1lbHkgY2FyZWZ1bCB3aGVuIHRha2luZyB0aGUgYWRkcmVzcyBvZiB0aGlzIHZhcmlhYmxlISAgRHVlIHRvIHZpcnR1YWwKICAqIHJlbWFwcGluZywgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNhbm9uaWNhbCBhZGRyZXNzIHJldHVybmVkIGJ5IF9fZ2V0X2NwdV92YXIodmFyKSEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkNWVmMGFhLi43NDU0MjEyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02Myw0ICs2Myw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2YWE1OGI2Li5jODlhOGNiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTYsNyArNiw3IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDMyZjNhZjEuLjMxOTNmNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC04NCw3ICs4NCw3IEBACiAJLmNoaWxkCQkJPSBOVUxMLAkJCVwKIAkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKIAkubWluX2ludGVydmFsCQk9IDgsCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gOCoobWluKG51bV9vbmxpbmVfY3B1cygpLCAzMikpLCBcCisJLm1heF9pbnRlcnZhbAkJPSA4KihtaW4obnVtX29ubGluZV9jcHVzKCksIDMyVSkpLCBcCiAJLmJ1c3lfZmFjdG9yCQk9IDY0LAkJCVwKIAkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAogCS5jYWNoZV9uaWNlX3RyaWVzCT0gMiwJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjViZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXYuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9BU01fSUE2NF9VVl9VVl9ICisjZGVmaW5lIF9BU01fSUE2NF9VVl9VVl9ICisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NpbXVsYXRvci5oPgorCitzdGF0aWMgaW5saW5lIGludCBpc191dl9zeXN0ZW0odm9pZCkKK3sKKwkvKiB0ZW1wb3Jhcnkgc3VwcG9ydCBmb3IgcnVubmluZyBvbiBoYXJkd2FyZSBzaW11bGF0b3IgKi8KKwlyZXR1cm4gSVNfTUVEVVNBKCkgfHwgaWE2NF9wbGF0Zm9ybV9pcygidXYiKTsKK30KKworI2VuZGlmCS8qIF9BU01fSUE2NF9VVl9VVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IGQ1NDE2NzEuLmJkZWYyY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC0xOTksNiArMTk5LDEwIEBACiAJcmV0dXJuIF9fdmEocGh5c19hZGRyKTsKIH0KIAordm9pZCBfX2luaXQgX19hY3BpX3VubWFwX3RhYmxlKGNoYXIgKm1hcCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3QtdGltZSBUYWJsZSBQYXJzaW5nCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwppbmRleCBlMTMxMjUwLi4xNjZlMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJaWYgKGlvc2FwaWNfaW50cl9pbmZvW2lycV0uY291bnQgPT0gMCkgewogI2lmZGVmIENPTkZJR19TTVAKIAkJLyogQ2xlYXIgYWZmaW5pdHkgKi8KLQkJY3B1c19zZXRhbGwoaWRlc2MtPmFmZmluaXR5KTsKKwkJY3B1bWFza19zZXRhbGwoaWRlc2MtPmFmZmluaXR5KTsKICNlbmRpZgogCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uICovCiAJCWlvc2FwaWNfaW50cl9pbmZvW2lycV0uZGVzdCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwppbmRleCBhNThmNjRjLi43NDI5NzUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikgewotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKIAkJfQogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CkBAIC0xMDMsNyArMTAzLDcgQEAKIHZvaWQgc2V0X2lycV9hZmZpbml0eV9pbmZvICh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgaHdpZCwgaW50IHJlZGlyKQogewogCWlmIChpcnEgPCBOUl9JUlFTKSB7Ci0JCWNwdW1hc2tfY29weSgmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwKKwkJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksCiAJCQkgICAgIGNwdW1hc2tfb2YoY3B1X2xvZ2ljYWxfaWQoaHdpZCkpKTsKIAkJaXJxX3JlZGlyW2lycV0gPSAoY2hhcikgKHJlZGlyICYgMHhmZik7CiAJfQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCWlmIChkZXNjLT5zdGF0dXMgPT0gSVJRX1BFUl9DUFUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoY3B1bWFza19hbnlfYW5kKCZpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVfb25saW5lX21hc2spCisJCWlmIChjcHVtYXNrX2FueV9hbmQoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKQogCQkgICAgPj0gbnJfY3B1X2lkcykgewogCQkJLyoKIAkJCSAqIFNhdmUgaXQgZm9yIHBoYXNlIDIgcHJvY2Vzc2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCmluZGV4IDI4ZDNkNDguLmFjYzRkMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKQEAgLTQ5MywxNCArNDkzLDE1IEBACiAJc2F2ZWRfdHByID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX1RQUik7CiAJaWE2NF9zcmx6X2QoKTsKIAl3aGlsZSAodmVjdG9yICE9IElBNjRfU1BVUklPVVNfSU5UX1ZFQ1RPUikgeworCQlpbnQgaXJxID0gbG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCiAJCWlmICh1bmxpa2VseShJU19MT0NBTF9UTEJfRkxVU0godmVjdG9yKSkpIHsKIAkJCXNtcF9sb2NhbF9mbHVzaF90bGIoKTsKLQkJCWtzdGF0X3RoaXNfY3B1LmlycXNbdmVjdG9yXSsrOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KElTX1JFU0NIRURVTEUodmVjdG9yKSkpCi0JCQlrc3RhdF90aGlzX2NwdS5pcnFzW3ZlY3Rvcl0rKzsKLQkJZWxzZSB7Ci0JCQlpbnQgaXJxID0gbG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpOwotCisJCQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKKwkJfSBlbHNlIGlmICh1bmxpa2VseShJU19SRVNDSEVEVUxFKHZlY3RvcikpKSB7CisJCQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKKwkJfSBlbHNlIHsKIAkJCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9UUFIsIHZlY3Rvcik7CiAJCQlpYTY0X3NybHpfZCgpOwogCkBAIC01NDMsMjIgKzU0NCwyNCBAQAogCiAJdmVjdG9yID0gaWE2NF9nZXRfaXZyKCk7CiAKLQkgaXJxX2VudGVyKCk7Ci0JIHNhdmVkX3RwciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9UUFIpOwotCSBpYTY0X3NybHpfZCgpOworCWlycV9lbnRlcigpOworCXNhdmVkX3RwciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9UUFIpOworCWlhNjRfc3Jsel9kKCk7CiAKIAkgLyoKIAkgICogUGVyZm9ybSBub3JtYWwgaW50ZXJydXB0IHN0eWxlIHByb2Nlc3NpbmcKIAkgICovCiAJd2hpbGUgKHZlY3RvciAhPSBJQTY0X1NQVVJJT1VTX0lOVF9WRUNUT1IpIHsKKwkJaW50IGlycSA9IGxvY2FsX3ZlY3Rvcl90b19pcnEodmVjdG9yKTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwogCQlpZiAodW5saWtlbHkoSVNfTE9DQUxfVExCX0ZMVVNIKHZlY3RvcikpKSB7CiAJCQlzbXBfbG9jYWxfZmx1c2hfdGxiKCk7Ci0JCQlrc3RhdF90aGlzX2NwdS5pcnFzW3ZlY3Rvcl0rKzsKLQkJfSBlbHNlIGlmICh1bmxpa2VseShJU19SRVNDSEVEVUxFKHZlY3RvcikpKQotCQkJa3N0YXRfdGhpc19jcHUuaXJxc1t2ZWN0b3JdKys7Ci0JCWVsc2UgeworCQkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CisJCX0gZWxzZSBpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkgeworCQkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CisJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MoTlVMTCk7Ci0JCQlpbnQgaXJxID0gbG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpOwogCiAJCQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfVFBSLCB2ZWN0b3IpOwogCQkJaWE2NF9zcmx6X2QoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwppbmRleCA4OTAzMzkzLi4yYjE1ZTIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCkBAIC03LDQ0ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0vKgotICogU2hpZnRzIGZvciBBUElDLWJhc2VkIGRhdGEKLSAqLwotCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9TSElGVAkJMAotI2RlZmluZQkgICAgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh1OCl2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLCQkweGZmZmZmZjAwCi0KLSNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQJCTgKLSNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJCSgxIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotCi0jZGVmaW5lIE1TSV9EQVRBX0xFVkVMX1NISUZUCQkxNAotI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfREVBU1NFUlQJKDAgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9BU1NFUlQJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfVFJJR0dFUl9TSElGVAkJMTUKLSNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkoMCA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9MRVZFTAkoMSA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotCi0vKgotICogU2hpZnQvbWFzayBmaWVsZHMgZm9yIEFQSUMtYmFzZWQgYnVzIGFkZHJlc3MKLSAqLwotCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQk0Ci0jZGVmaW5lIE1TSV9BRERSX0hFQURFUgkJCTB4ZmVlMDAwMDAKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUSURfTUFTSwkJMHhmZmYwMDAwZgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVElEX0NQVShjcHUpCSgoY3B1KSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCkKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUTU9ERV9TSElGVAkJMgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVE1PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUTU9ERV9TSElGVCkKLSNkZWZpbmUJICAgIE1TSV9BRERSX0RFU1RNT0RFX0xPR0lDCSgxIDw8IE1TSV9BRERSX0RFU1RNT0RFX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSQkoMSA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAJaWE2NF9tc2lfY2hpcDsKIApAQCAtNjUsOCArMjgsOCBAQAogCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJYWRkciA9IG1zZy5hZGRyZXNzX2xvOwotCWFkZHIgJj0gTVNJX0FERFJfREVTVElEX01BU0s7Ci0JYWRkciB8PSBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKKwlhZGRyICY9IE1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwlhZGRyIHw9IE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKIAltc2cuYWRkcmVzc19sbyA9IGFkZHI7CiAKIAlkYXRhID0gbXNnLmRhdGE7CkBAIC03NSw3ICszOCw3IEBACiAJbXNnLmRhdGEgPSBkYXRhOwogCiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCWNwdW1hc2tfY29weShpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApAQCAtOTgsOSArNjEsOSBAQAogCW1zZy5hZGRyZXNzX2hpID0gMDsKIAltc2cuYWRkcmVzc19sbyA9CiAJCU1TSV9BRERSX0hFQURFUiB8Ci0JCU1TSV9BRERSX0RFU1RNT0RFX1BIWVMgfAorCQlNU0lfQUREUl9ERVNUX01PREVfUEhZUyB8CiAJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVSB8Ci0JCU1TSV9BRERSX0RFU1RJRF9DUFUoZGVzdF9waHlzX2lkKTsKKwkJTVNJX0FERFJfREVTVF9JRF9DUFUoZGVzdF9waHlzX2lkKTsKIAogCW1zZy5kYXRhID0KIAkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKQEAgLTE4MywxMSArMTQ2LDExIEBACiAKIAltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7CiAJbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVElEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVElEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CiAKIAlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqbWFzazsKKwljcHVtYXNrX2NvcHkoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFzayk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCkBAIC0yMTUsOSArMTc4LDkgQEAKIAltc2ctPmFkZHJlc3NfaGkgPSAwOwogCW1zZy0+YWRkcmVzc19sbyA9CiAJCU1TSV9BRERSX0hFQURFUiB8Ci0JCU1TSV9BRERSX0RFU1RNT0RFX1BIWVMgfAorCQlNU0lfQUREUl9ERVNUX01PREVfUEhZUyB8CiAJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVSB8Ci0JCU1TSV9BRERSX0RFU1RJRF9DUFUoZGVzdCk7CisJCU1TSV9BRERSX0RFU1RfSURfQ1BVKGRlc3QpOwogCiAJbXNnLT5kYXRhID0KIAkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKaW5kZXggMGU0OTk3NS4uNWMwZjQwOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKQEAgLTIxOTYsNyArMjE5Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGZtZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBmbWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHBmbWZzX2RlbGV0ZV9kZW50cnksCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTBhN2Q0N2UuLjM3NjVlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIxMywxNiArMjEzLDkgQEAKICAgICAgICAgeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CiAKICAgLyogUGVyLWNwdSBkYXRhOiAqLwotICBwZXJjcHUgOiB7IH0gOnBlcmNwdQogICAuID0gQUxJR04oUEVSQ1BVX1BBR0VfU0laRSk7Ci0gIF9fcGh5c19wZXJfY3B1X3N0YXJ0ID0gLjsKLSAgLmRhdGEucGVyY3B1IFBFUkNQVV9BRERSIDogQVQoX19waHlzX3Blcl9jcHVfc3RhcnQgLSBMT0FEX09GRlNFVCkKLQl7Ci0JCV9fcGVyX2NwdV9zdGFydCA9IC47Ci0JCSooLmRhdGEucGVyY3B1KQotCQkqKC5kYXRhLnBlcmNwdS5zaGFyZWRfYWxpZ25lZCkKLQkJX19wZXJfY3B1X2VuZCA9IC47Ci0JfQorICBQRVJDUFVfVkFERFIoUEVSQ1BVX0FERFIsIDpwZXJjcHUpCisgIF9fcGh5c19wZXJfY3B1X3N0YXJ0ID0gX19wZXJfY3B1X2xvYWQ7CiAgIC4gPSBfX3BoeXNfcGVyX2NwdV9zdGFydCArIFBFUkNQVV9QQUdFX1NJWkU7CS8qIGVuc3VyZSBwZXJjcHUgZGF0YSBmaXRzCiAgIAkJCQkJCSAqIGludG8gcGVyY3B1IHBhZ2Ugc2l6ZQogCQkJCQkJICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL0tjb25maWcgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKaW5kZXggZjgzM2EwYi4uMGEyZDZiOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwpAQCAtNCw2ICs0LDEwIEBACiBjb25maWcgSEFWRV9LVk0KIAlib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgeQorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVwZW5kcyBvbiBIQVZFX0tWTSB8fCBJQTY0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2lycS5oIGIvYXJjaC9pYTY0L2t2bS9pcnEuaAppbmRleCBjNjc4NmU4Li5jMDc4NWE3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2lycS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKQEAgLTIzLDYgKzIzLDggQEAKICNpZm5kZWYgX19JUlFfSAogI2RlZmluZSBfX0lSUV9ICiAKKyNpbmNsdWRlICJsYXBpYy5oIgorCiBzdGF0aWMgaW5saW5lIGludCBpcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggMjhmOTgyMC4uMDc2YjAwZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJc3dpdGNoIChleHQpIHsKIAljYXNlIEtWTV9DQVBfSVJRQ0hJUDoKIAljYXNlIEtWTV9DQVBfTVBfU1RBVEU6Ci0KKwljYXNlIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC0zMTQsNyArMzE0LDcgQEAKIAl1bmlvbiBpYTY0X2xpZCBsaWQ7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoa3ZtLT52Y3B1c1tpXSkgewogCQkJbGlkLnZhbCA9IFZDUFVfTElEKGt2bS0+dmNwdXNbaV0pOwogCQkJaWYgKGxpZC5pZCA9PSBpZCAmJiBsaWQuZWlkID09IGVpZCkKQEAgLTM4OCw3ICszODgsNyBAQAogCiAJY2FsbF9kYXRhLnB0Y19nX2RhdGEgPSBwLT51LnB0Y19nX2RhdGE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0gfHwga3ZtLT52Y3B1c1tpXS0+YXJjaC5tcF9zdGF0ZSA9PQogCQkJCQkJS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQgfHwKIAkJCQkJdmNwdSA9PSBrdm0tPnZjcHVzW2ldKQpAQCAtNzg4LDYgKzc4OCw4IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWt2bV9pbml0X3ZtKGt2bSk7CiAKKwlrdm0tPmFyY2gub25saW5lX3ZjcHVzID0gMDsKKwogCXJldHVybiBrdm07CiAKIH0KQEAgLTkxOSw3ICs5MjEsMTMgQEAKIAkJciA9IGt2bV9pb2FwaWNfaW5pdChrdm0pOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoa3ZtKTsKKwkJaWYgKHIpIHsKKwkJCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWJyZWFrOworCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewogCQlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnFfZXZlbnQ7CiAKQEAgLTkyNywxMCArOTM1LDE3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxX2V2ZW50LCBhcmdwLCBzaXplb2YgaXJxX2V2ZW50KSkKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQkJX19zMzIgc3RhdHVzOwogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAorCQkJc3RhdHVzID0ga3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCiAJCQkJICAgIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCQlpZiAoaW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUykgeworCQkJCWlycV9ldmVudC5zdGF0dXMgPSBzdGF0dXM7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaXJxX2V2ZW50LAorCQkJCQkJCXNpemVvZiBpcnFfZXZlbnQpKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCXIgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMTE0OSw3ICsxMTY0LDcgQEAKIAogCQkvKkluaXRpYWxpemUgaXRjIG9mZnNldCBmb3IgdmNwdXMqLwogCQlpdGNfb2Zmc2V0ID0gMFVMIC0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJdi0+YXJjaC5pdGNfb2Zmc2V0ID0gaXRjX29mZnNldDsKQEAgLTEyODMsNiArMTI5OCw4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlrdm0tPmFyY2gub25saW5lX3ZjcHVzKys7CisKIAlyZXR1cm4gdmNwdTsKIGZhaWw6CiAJcmV0dXJuIEVSUl9QVFIocik7CkBAIC0xMzAzLDggKzEzMjAsOCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE0MjEsNiArMTQzOCwyMyBAQAogCXJldHVybiAwOwogfQogCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrKQoreworCW1lbWNweShzdGFjaywgdmNwdSwgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICBzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2spCit7CisJbWVtY3B5KHZjcHUgKyAxLCAmc3RhY2stPnN0YWNrWzBdICsgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksCisJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykgLSBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7CisKKwl2Y3B1LT5hcmNoLmV4aXRfZGF0YSA9ICgoc3RydWN0IGt2bV92Y3B1ICopc3RhY2spLT5hcmNoLmV4aXRfZGF0YTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAKQEAgLTE0MzAsOSArMTQ2NCw3OCBAQAogCiAKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2sgPSBOVUxMOworCWxvbmcgcjsKKworCXN3aXRjaCAoaW9jdGwpIHsKKwljYXNlIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiB7CisJCXN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIF9fdXNlciAqdXNlcl9zdGFjazsKKwkgICAgICAgIHZvaWQgX191c2VyICpmaXJzdF9wID0gYXJncDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3N0YWNrLCBmaXJzdF9wLCBzaXplb2Yodm9pZCAqKSkpCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfc3RhY2ssCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIktWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiAiCisJCQkgICAgICAgIklsbGVnYWwgdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBzdGFja1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdGFjayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhY2spIHsKKwkJCXIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2sodmNwdSwgc3RhY2spOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9zdGFjaywgc3RhY2ssCisJCQkJIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKQorCQkJZ290byBvdXQ7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0s6IHsKKwkJc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgX191c2VyICp1c2VyX3N0YWNrOworCSAgICAgICAgdm9pZCBfX3VzZXIgKmZpcnN0X3AgPSBhcmdwOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJfc3RhY2ssIGZpcnN0X3AsIHNpemVvZih2b2lkICopKSkKKwkJCWdvdG8gb3V0OworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX3N0YWNrLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSzogIgorCQkJICAgICAgICJJbGxlZ2FsIHVzZXIgYWRkcmVzcyBmb3Igc3RhY2tcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YWNrKSB7CisJCQlyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihzdGFjaywgdXNlcl9zdGFjaywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkKKwkJCWdvdG8gb3V0OworCisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayh2Y3B1LCBzdGFjayk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXIgPSAtRUlOVkFMOworCX0KKworb3V0OgorCWtmcmVlKHN0YWNrKTsKKwlyZXR1cm4gcjsKIH0KIAogaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTE0NzIsNyArMTU3NSw3IEBACiB9CiAKIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAotCQl1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE3MzcsNyArMTg0MCw3IEBACiAJc3RydWN0IGt2bV92Y3B1ICpsdmNwdSA9IGt2bS0+dmNwdXNbMF07CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0pCiAJCQljb250aW51ZTsKIAkJaWYgKGx2Y3B1LT5hcmNoLnh0cCA+IGt2bS0+dmNwdXNbaV0tPmFyY2gueHRwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYyBiL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKaW5kZXggY2I3NjAwYi4uYThhZTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCkBAIC0yMjcsNiArMjI3LDE4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3JlZ2lzdGVyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3JlZ2lzdGVyX2luZm8oaW4xLCAmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9jYWNoZV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIApAQCAtMjY4LDggKzI4MCwxMiBAQAogc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3ZtX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgaW4wLCBpbjEsIGluMiwgaW4zOwogCi0JSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisKKwlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfdm1faW5mbyhpbjEsIGluMiwKKwkJCShwYWxfdGNfaW5mb191X3QgKikmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yOTIsNiArMzA4LDEwOCBAQAogCXZjcHUtPmFyY2gudGltZXJfZmlyZWQgPSAwOwogfQogCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfcGVyZl9tb25faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjMsIHI5OworCXVuc2lnbmVkIGxvbmcgcG1fYnVmZmVyWzE2XTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlzdGF0dXMgPSBpYTY0X3BhbF9wZXJmX21vbl9pbmZvKHBtX2J1ZmZlciwKKwkJCQkocGFsX3BlcmZfbW9uX2luZm9fdV90ICopICZyOSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIlBBTF9QRVJGX01PTl9JTkZPIGZhaWxzIHJldD0lbGRcbiIsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKGluMSkKKwkJCW1lbWNweSgodm9pZCAqKWluMSwgcG1fYnVmZmVyLCBzaXplb2YocG1fYnVmZmVyKSk7CisJCWVsc2UgeworCQkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIkludmFsaWQgcGFyYW1ldGVycyAiCisJCQkJCQkiZm9yIFBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwkJfQorCX0KKwlyZXR1cm4gKHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwpe3N0YXR1cywgcjksIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfaGFsdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHJlcyA9IDEwMDBVTCB8ICgxMDAwVUwgPDwgMTYpIHwgKDEwVUwgPDwgMzIpCisJCQkJCXwgKDFVTCA8PCA2MSkgfCAoMVVMIDw8IDYwKTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlpZiAoaW4xKSB7CisJCW1lbWNweSgodm9pZCAqKWluMSwgJnJlcywgc2l6ZW9mKHJlcykpOworCQlzdGF0dXMgPSAwOworCX0gZWxzZXsKKwkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkciSW52YWxpZCBwYXJhbWV0ZXJzICIKKwkJCQkJImZvciBQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJfQorCisJcmV0dXJuIChzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsKXtzdGF0dXMsIDAsIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfbWVtX2F0dHJpYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyByOTsKKwlsb25nIHN0YXR1czsKKworCXN0YXR1cyA9IGlhNjRfcGFsX21lbV9hdHRyaWIoJnI5KTsKKworCXJldHVybiAoc3RydWN0IGlhNjRfcGFsX3JldHZhbCl7c3RhdHVzLCByOSwgMCwgMH07Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZV9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2b2lkICp2KQoreworCXM2NCB0cmFuc190eXBlID0gKHM2NCl2OworCWlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodHJhbnNfdHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9wcmVmZXRjaF92aXNpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoaW4xKTsKKwlpZiAocmVzdWx0LnN0YXR1cyA9PSAwKSB7CisJCS8qIE11c3QgYmUgcGVyZm9ybWVkIG9uIGFsbCByZW1vdGUgcHJvY2Vzc29ycworCQlpbiB0aGUgY29oZXJlbmNlIGRvbWFpbi4gKi8KKwkJc21wX2NhbGxfZnVuY3Rpb24ocmVtb3RlX3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5LAorCQkJCQkodm9pZCAqKWluMSwgMSk7CisJCS8qIFVubmVjZXNzYXJ5IG9uIHJlbW90ZSBwcm9jZXNzb3IgZm9yIG90aGVyIHZjcHVzISovCisJCXJlc3VsdC5zdGF0dXMgPSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfcGFsX21jX2RyYWluKHZvaWQgKnYpCit7CisJaWE2NF9wYWxfbWNfZHJhaW4oKTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX2dldF9icmFuZF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKworCWlmIChpbjEgPT0gMCAmJiBpbjIpIHsKKwkJY2hhciBicmFuZF9pbmZvWzEyOF07CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9nZXRfYnJhbmRfaW5mbyhicmFuZF9pbmZvKTsKKwkJaWYgKHJlc3VsdC5zdGF0dXMgPT0gUEFMX1NUQVRVU19TVUNDRVNTKQorCQkJbWVtY3B5KCh2b2lkICopaW4yLCBicmFuZF9pbmZvLCAxMjgpOworCX0gZWxzZSB7CisJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1JFUVVJUkVTX01FTU9SWTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyJJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICIKKwkJCQkJIlBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBpbnQga3ZtX3BhbF9lbXVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bikKIHsKIApAQCAtMzAwLDE0ICs0MTgsMjIgQEAKIAlpbnQgcmV0ID0gMTsKIAogCWdyMjggPSBrdm1fZ2V0X3BhbF9jYWxsX2luZGV4KHZjcHUpOwotCS8qcHJpbnRrKCJwYWxfY2FsbCBpbmRleDolbHhcbiIsZ3IyOCk7Ki8KIAlzd2l0Y2ggKGdyMjgpIHsKIAljYXNlIFBBTF9DQUNIRV9GTFVTSDoKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX2ZsdXNoKHZjcHUpOwogCQlicmVhazsKKwljYXNlIFBBTF9NRU1fQVRUUklCOgorCQlyZXN1bHQgPSBwYWxfbWVtX2F0dHJpYih2Y3B1KTsKKwkJYnJlYWs7CiAJY2FzZSBQQUxfQ0FDSEVfU1VNTUFSWToKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX3N1bW1hcnkodmNwdSk7CiAJCWJyZWFrOworCWNhc2UgUEFMX1BFUkZfTU9OX0lORk86CisJCXJlc3VsdCA9IHBhbF9wZXJmX21vbl9pbmZvKHZjcHUpOworCQlicmVhazsKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXJlc3VsdCA9IHBhbF9oYWx0X2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX0hBTFRfTElHSFQ6CiAJewogCQlJTklUX1BBTF9TVEFUVVNfU1VDQ0VTUyhyZXN1bHQpOwpAQCAtMzE3LDYgKzQ0MywxNiBAQAogCX0KIAkJYnJlYWs7CiAKKwljYXNlIFBBTF9QUkVGRVRDSF9WSVNJQklMSVRZOgorCQlyZXN1bHQgPSBwYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfTUNfRFJBSU46CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9tY19kcmFpbigpOworCQkvKiBGSVhNRTogQWxsIHZjcHVzIGxpa2VseSBjYWxsIFBBTF9NQ19EUkFJTi4KKwkJICAgVGhhdCBjYXVzZXMgdGhlIGNvbmdlc3Rpb24uICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlbW90ZV9wYWxfbWNfZHJhaW4sIE5VTEwsIDEpOworCQlicmVhazsKKwogCWNhc2UgUEFMX0ZSRVFfUkFUSU9TOgogCQlyZXN1bHQgPSBwYWxfZnJlcV9yYXRpb3ModmNwdSk7CiAJCWJyZWFrOwpAQCAtMzQ2LDYgKzQ4Miw5IEBACiAJCUlOSVRfUEFMX1NUQVRVU19TVUNDRVNTKHJlc3VsdCk7CiAJCXJlc3VsdC52MSA9ICgxTCA8PCAzMikgfCAxTDsKIAkJYnJlYWs7CisJY2FzZSBQQUxfUkVHSVNURVJfSU5GTzoKKwkJcmVzdWx0ID0gcGFsX3JlZ2lzdGVyX2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX1ZNX1BBR0VfU0laRToKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZtX3BhZ2Vfc2l6ZSgmcmVzdWx0LnYwLAogCQkJCQkJCSZyZXN1bHQudjEpOwpAQCAtMzY1LDEyICs1MDQsMTggQEAKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZlcnNpb24oCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjAsCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjEpOwotCiAJCWJyZWFrOwogCWNhc2UgUEFMX0ZJWEVEX0FERFI6CiAJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1NVQ0NFU1M7CiAJCXJlc3VsdC52MCA9IHZjcHUtPnZjcHVfaWQ7CiAJCWJyZWFrOworCWNhc2UgUEFMX0JSQU5EX0lORk86CisJCXJlc3VsdCA9IHBhbF9nZXRfYnJhbmRfaW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfR0VUX1BTVEFURToKKwljYXNlIFBBTF9DQUNIRV9TSEFSRURfSU5GTzoKKwkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyJrdm06IFVuc3VwcG9ydGVkIHBhbCBjYWxsLCIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggMjMwZWFlNC4uYjFkYzgwOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTE2Nyw3ICsxNjcsNiBAQAogCXJldHVybiAocnIxLnZhbCk7CiB9CiAKLQogLyoKICAqIFNldCB2SUZBICYgdklUSVIgJiB2SUhBLCB3aGVuIHZQU1IuaWMgPTEKICAqIFBhcmFtZXRlcjoKQEAgLTIyMiw4ICsyMjEsNiBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgSUE2NF9JTlNUX1RMQl9WRUNUT1IpOwogfQogCi0KLQogLyoKICAqIERhdGEgTmVzdGVkIFRMQiBGYXVsdAogICogIEAgRGF0YSBOZXN0ZWQgVExCIFZlY3RvcgpAQCAtMjQ1LDcgKzI0Miw2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X0FMVF9EQVRBX1RMQl9WRUNUT1IpOwogfQogCi0KIC8qCiAgKiBEYXRhIFRMQiBGYXVsdAogICogIEAgRGF0YSBUTEIgdmVjdG9yCkBAIC0yNjUsOCArMjYxLDYgQEAKIAkvKiBJZiB2UFNSLmljLCBJRkEsIElUSVIsIElIQSovCiAJc2V0X2lmYV9pdGlyX2loYSh2Y3B1LCB2YWRyLCAxLCAxLCAxKTsKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfVkhQVF9UUkFOU19WRUNUT1IpOwotCi0KIH0KIAogLyoKQEAgLTI3OSw3ICsyNzMsNiBAQAogCV92aHB0X2ZhdWx0KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qCiAgKiBWSFBUIERhdGEgRmF1bHQKICAqICBAIFZIUFQgVHJhbnNsYXRpb24gdmVjdG9yCkBAIC0yOTAsOCArMjgzLDYgQEAKIAlfdmhwdF9mYXVsdCh2Y3B1LCB2YWRyKTsKIH0KIAotCi0KIC8qCiAgKiBEZWFsIHdpdGg6CiAgKiAgR2VuZXJhbCBFeGNlcHRpb24gdmVjdG9yCkBAIC0zMDEsNyArMjkyLDYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfR0VORVhfVkVDVE9SKTsKIH0KIAotCiAvKgogICogSWxsZWdhbCBPcGVyYXRpb24gRmF1bHQKICAqICBAIEdlbmVyYWwgRXhjZXB0aW9uIFZlY3RvcgpAQCAtNDE5LDE5ICs0MDksMTYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfUEFHRV9OT1RfUFJFU0VOVF9WRUNUT1IpOwogfQogCi0KIHZvaWQgZGF0YV9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIHZvaWQgaW5zdF9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qIERlYWwgd2l0aAogICogIERhdGEgYWNjZXNzIHJpZ2h0cyB2ZWN0b3IKICAqLwpAQCAtNTYzLDIyICs1NTAsNjQgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIHZlY3Rvcik7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV90cmFuc19wYWxfY2FsbF9hcmdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0aGFzaF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZ3BhLCBwb2ZmOworCisJaWYgKCFpc19waHlzaWNhbF9tb2RlKHZjcHUpKSB7CisJCS8qIERlcGVuZHMgb24gY2FsbGVyIHRvIHByb3ZpZGUgdGhlIERUUiBvciBEVEMgbWFwcGluZy4qLworCQlkYXRhID0gdnRsYl9sb29rdXAodmNwdSwgYXJnLCBEX1RMQik7CisJCWlmIChkYXRhKQorCQkJZ3BhID0gZGF0YS0+cGFnZV9mbGFncyAmIF9QQUdFX1BQTl9NQVNLOworCQllbHNlIHsKKwkJCWRhdGEgPSB2aHB0X2xvb2t1cChhcmcpOworCQkJaWYgKCFkYXRhKQorCQkJCXJldHVybiAwOworCQkJZ3BhID0gZGF0YS0+Z3BhZGRyICYgX1BBR0VfUFBOX01BU0s7CisJCX0KKworCQlwb2ZmID0gYXJnICYgKFBTSVpFKGRhdGEtPnBzKSAtIDEpOworCQlhcmcgPSBQQUdFQUxJR04oZ3BhLCBkYXRhLT5wcykgfCBwb2ZmOworCX0KKwlhcmcgPSBrdm1fZ3BhX3RvX21wYShhcmcgPDwgMSA+PiAxKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKGFyZyk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9wYWxfY2FsbF9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGdyMjggPSB2Y3B1X2dldF9ncih2Y3B1LCAyOCk7CisJdW5zaWduZWQgbG9uZyBncjI5ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjkpOworCXVuc2lnbmVkIGxvbmcgZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKIAogCS8qRklYTUU6Rm9yIHN0YXRpYyBhbmQgc3RhY2tlZCBjb252ZW50aW9uLCBmaXJtd2FyZQogCSAqIGhhcyBwdXQgdGhlIHBhcmFtZXRlcnMgaW4gZ3IyOC1ncjMxIGJlZm9yZQogCSAqIGJyZWFrIHRvIHZtbSAgISEqLwogCi0JcC0+dS5wYWxfZGF0YS5ncjI4ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjgpOwotCXAtPnUucGFsX2RhdGEuZ3IyOSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI5KTsKLQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJc3dpdGNoIChncjI4KSB7CisJY2FzZSBQQUxfUEVSRl9NT05fSU5GTzoKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9ICBrdm1fdHJhbnNfcGFsX2NhbGxfYXJncyh2Y3B1LCBncjI5KTsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCQlicmVhazsKKwljYXNlIFBBTF9CUkFORF9JTkZPOgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSBncjI5OzsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0ga3ZtX3RyYW5zX3BhbF9jYWxsX2FyZ3ModmNwdSwgZ3IzMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9IGdyMjk7OworCQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJfQorCXAtPnUucGFsX2RhdGEuZ3IyOCA9IGdyMjg7CiAJcC0+dS5wYWxfZGF0YS5ncjMxID0gdmNwdV9nZXRfZ3IodmNwdSwgMzEpOworCiAJcC0+ZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9QQUxfQ0FMTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3BhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBnZXRfcGFsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKIApAQCAtNjA2LDcgKzYzNSw3IEBACiAJcC0+ZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9TQUxfQ0FMTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3NhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBnZXRfc2FsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKIApAQCAtNjI5LDEzICs2NTgsMTMgQEAKIAkJaWYgKGlpbSA9PSBET01OX1BBTF9SRVFVRVNUKSB7CiAJCQlzZXRfcGFsX2NhbGxfZGF0YSh2KTsKIAkJCXZtbV90cmFuc2l0aW9uKHYpOwotCQkJc2V0X3BhbF9jYWxsX3Jlc3VsdCh2KTsKKwkJCWdldF9wYWxfY2FsbF9yZXN1bHQodik7CiAJCQl2Y3B1X2luY3JlbWVudF9paXAodik7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoaWltID09IERPTU5fU0FMX1JFUVVFU1QpIHsKIAkJCXNldF9zYWxfY2FsbF9kYXRhKHYpOwogCQkJdm1tX3RyYW5zaXRpb24odik7Ci0JCQlzZXRfc2FsX2NhbGxfcmVzdWx0KHYpOworCQkJZ2V0X3NhbF9jYWxsX3Jlc3VsdCh2KTsKIAkJCXZjcHVfaW5jcmVtZW50X2lpcCh2KTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzAzLDcgKzczMiw2IEBACiAJfQogfQogCi0KIHZvaWQgbGVhdmVfaHlwZXJ2aXNvcl90YWlsKHZvaWQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2ID0gY3VycmVudF92Y3B1OwpAQCAtNzM3LDcgKzc2NSw2IEBACiAJfQogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfbGRzKHN0cnVjdCBrdm1fcHRfcmVncyAqcmVncykKIHsKIAlyZWdzLT5jcl9pcHNyIHw9IElBNjRfUFNSX0VEOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwppbmRleCBlY2Q1MjZiLi5kNGQyODA1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYworKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAJcmV0dXJuOwogfQogCi0KIHZvaWQgc3dpdGNoX3RvX3ZpcnR1YWxfcmlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIHBzcjsKQEAgLTE2Niw4ICsxNjUsNiBAQAogCXJldHVybjsKIH0KIAotCi0KIC8qCiAgKiBJbiBwaHlzaWNhbCBtb2RlLCBpbnNlcnQgdGMvdHIgZm9yIHJlZ2lvbiAwIGFuZCA0IHVzZXMKICAqIFJJRFswXSBhbmQgUklEWzRdIHdoaWNoIGlzIGZvciBwaHlzaWNhbCBtb2RlIGVtdWxhdGlvbi4KQEAgLTI2OSw3ICsyNjYsNiBAQAogCXJldHVybiByb3RhdGVfcmVnKDk2LCBycmJfZnIsIChyZWdudW0gLSBJQTY0X0ZJUlNUX1JPVEFUSU5HX0ZSKSk7CiB9CiAKLQogLyoKICAqIFRoZSBpbnZlcnNlIG9mIHRoZSBhYm92ZTogZ2l2ZW4gYnNwc3RvcmUgYW5kIHRoZSBudW1iZXIgb2YKICAqIHJlZ2lzdGVycywgY2FsY3VsYXRlIGFyLmJzcC4KQEAgLTgxMSwxMiArODA3LDE1IEBACiBzdGF0aWMgdm9pZCB2Y3B1X3NldF9pdGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdjsKKwlzdHJ1Y3Qga3ZtICprdm07CiAJaW50IGk7CiAJbG9uZyBpdGNfb2Zmc2V0ID0gdmFsIC0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CiAJdW5zaWduZWQgbG9uZyB2aXR2ID0gVkNQVSh2Y3B1LCBpdHYpOwogCisJa3ZtID0gKHN0cnVjdCBrdm0gKilLVk1fVk1fQkFTRTsKKwogCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CiAJCQl2ID0gKHN0cnVjdCBrdm1fdmNwdSAqKSgoY2hhciAqKXZjcHUgKwogCQkJCQlzaXplb2Yoc3RydWN0IGt2bV92Y3B1X2RhdGEpICogaSk7CiAJCQlWTVgodiwgaXRjX29mZnNldCkgPSBpdGNfb2Zmc2V0OwpAQCAtMTAzOSw4ICsxMDM4LDYgQEAKIAlyZXR1cm4ga2V5OwogfQogCi0KLQogdm9pZCBrdm1fdGhhc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRoYXNoLCB2YWRyOwpAQCAtMTA1MCw3ICsxMDQ3LDYgQEAKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk00Ni5yMSwgdGhhc2gsIDApOwogfQogCi0KIHZvaWQga3ZtX3R0YWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRhZywgdmFkcjsKQEAgLTExMzEsNyArMTEyNyw2IEBACiAJcmV0dXJuIElBNjRfTk9fRkFVTFQ7CiB9CiAKLQogaW50IGt2bV90cGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIxLCByMzsKQEAgLTExNTQsNyArMTE0OSw2IEBACiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NNDYucjEsIHIxLCAwKTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbnNlcnQvUHVyZ2UgdHJhbnNsYXRpb24gcmVnaXN0ZXIvY2FjaGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzg1LDcgKzEzNzksNiBAQAogCXZjcHVfc2V0X2l0Yyh2Y3B1LCByMik7CiB9CiAKLQogdm9pZCBrdm1fbW92X2Zyb21fYXJfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMTsKQEAgLTEzOTMsOCArMTM4Niw5IEBACiAJcjEgPSB2Y3B1X2dldF9pdGModmNwdSk7CiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NMzEucjEsIHIxLCAwKTsKIH0KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIHN0cnVjdCBrdm1fdmNwdSpwcm90ZWN0aW9uIGtleSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMKKyAgc3RydWN0IGt2bV92Y3B1IHByb3RlY3Rpb24ga2V5IHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X3BrcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmVnKQpAQCAtMTQwNywyMCArMTQwMSw2IEBACiAJaWE2NF9zZXRfcGtyKHJlZywgdmFsKTsKIH0KIAotCi11bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2l0aXJfb25fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGlmYSkKLXsKLQl1bmlvbiBpYTY0X3JyIHJyLCBycjE7Ci0KLQlyci52YWwgPSB2Y3B1X2dldF9ycih2Y3B1LCBpZmEpOwotCXJyMS52YWwgPSAwOwotCXJyMS5wcyA9IHJyLnBzOwotCXJyMS5yaWQgPSByci5yaWQ7Ci0JcmV0dXJuIChycjEudmFsKTsKLX0KLQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTW92ZXMgdG8gcHJpdmlsZWdlZCByZWdpc3RlcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0NjQsOCArMTQ0NCw2IEBACiAJcmV0dXJuIChJQTY0X05PX0ZBVUxUKTsKIH0KIAotCi0KIHZvaWQga3ZtX21vdl90b19ycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjMsIHIyOwpAQCAtMTUxMCw4ICsxNDg4LDYgQEAKIAl2Y3B1X3NldF9wa3IodmNwdSwgcjMsIHIyKTsKIH0KIAotCi0KIHZvaWQga3ZtX21vdl9mcm9tX3JyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMywgcjE7CkBAIC0xNTU3LDcgKzE1MzMsNiBAQAogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTQzLnIxLCByMSwgMCk7CiB9CiAKLQogdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmVnKQogewogCS8qIEZJWE1FOiBUaGlzIGNvdWxkIGdldCBjYWxsZWQgYXMgYSByZXN1bHQgb2YgYSByc3ZkLXJlZyBmYXVsdCAqLwpAQCAtMTYwOSw3ICsxNTg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiB1bnNpZ25lZCBsb25nIGt2bV9tb3ZfZnJvbV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgdGd0ID0gaW5zdC5NMzMucjE7CkBAIC0xNjMzLDggKzE2MDcsNiBAQAogCXJldHVybiAwOwogfQogCi0KLQogdm9pZCB2Y3B1X3NldF9wc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIApAQCAtMTc3Niw5ICsxNzQ4LDYgQEAKIAl9CiB9CiAKLQotCi0KIHZvaWQgdmNwdV9yZmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaWZzLCBwc3I7CkBAIC0xNzk2LDcgKzE3NjUsNiBAQAogCXJlZ3MtPmNyX2lpcCA9IFZDUFUodmNwdSwgaWlwKTsKIH0KIAotCiAvKgogICAgVlBTUiBjYW4ndCBrZWVwIHRyYWNrIG9mIGJlbG93IGJpdHMgb2YgZ3Vlc3QgUFNSCiAgICBUaGlzIGZ1bmN0aW9uIGdldHMgZ3Vlc3QgUFNSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaCBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCmluZGV4IGIyZjEyYTUuLjA0MmFmOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCkBAIC03MDMsNyArNzAzLDcgQEAKIGV4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2VudHJpZXMoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIHU2NCBwcyk7CiBleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9lbnRyaWVzX3JlbW90ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgdTY0IHBzKTsKIGV4dGVybiB1NjQgdHJhbnNsYXRlX3BoeV9wdGUodTY0ICpwdGUsIHU2NCBpdGlyLCB1NjQgdmEpOwotZXh0ZXJuIGludCB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwKK2V4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLAogCQl1NjQgaXRpciwgdTY0IGlmYSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdik7CiBleHRlcm4gc3RydWN0IHRoYXNoX2RhdGEgKnZ0bGJfbG9va3VwKHN0cnVjdCBrdm1fdmNwdSAqdiwKQEAgLTczOCw3ICs3MzgsNyBAQAogdm9pZCB0aGFzaF9pbml0KHN0cnVjdCB0aGFzaF9jYiAqaGNiLCB1NjQgc3opOwogCiB2b2lkIHBhbmljX3ZtKHN0cnVjdCBrdm1fdmNwdSAqdiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotCit1NjQga3ZtX2dwYV90b19tcGEodTY0IGdwYSk7CiBleHRlcm4gdTY0IGlhNjRfY2FsbF92c2EodTY0IHByb2MsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMsCiAJCXU2NCBhcmc0LCB1NjQgYXJnNSwgdTY0IGFyZzYsIHU2NCBhcmc3KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92dGxiLmMgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwppbmRleCA2YjYzMDdhLi4zODIzMmIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYworKysgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwpAQCAtMTY0LDExICsxNjQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHBzLCBncGFkZHI7CiAKIAlwcyA9IGl0aXJfcHMoaXRpcik7Ci0KLQlncGFkZHIgPSAoKGdwdGUgJiBfUEFHRV9QUE5fTUFTSykgPj4gcHMgPDwgcHMpIHwKLQkJKGlmYSAmICgoMVVMIDw8IHBzKSAtIDEpKTsKLQogCXJyLnZhbCA9IGlhNjRfZ2V0X3JyKGlmYSk7CisKKwkgZ3BhZGRyID0gKChncHRlICYgX1BBR0VfUFBOX01BU0spID4+IHBzIDw8IHBzKSB8CisJCQkJCShpZmEgJiAoKDFVTCA8PCBwcykgLSAxKSk7CisKIAloZWFkID0gKHN0cnVjdCB0aGFzaF9kYXRhICopaWE2NF90aGFzaChpZmEpOwogCWhlYWQtPmV0YWcgPSBJTlZBTElEX1RJX1RBRzsKIAlpYTY0X21mKCk7CkBAIC00MTIsMTYgKzQxMiwxNCBAQAogCiAvKgogICogUHVyZ2Ugb3ZlcmxhcCBUQ3MgYW5kIHRoZW4gaW5zZXJ0IHRoZSBuZXcgZW50cnkgdG8gZW11bGF0ZSBpdGMgb3BzLgotICogICAgTm90ZXM6IE9ubHkgVEMgZW50cnkgY2FuIHB1cmdlIGFuZCBpbnNlcnQuCi0gKiAgICAxIGluZGljYXRlcyB0aGlzIGlzIE1NSU8KKyAqIE5vdGVzOiBPbmx5IFRDIGVudHJ5IGNhbiBwdXJnZSBhbmQgaW5zZXJ0LgogICovCi1pbnQgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsIHU2NCBpdGlyLAordm9pZCAgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsIHU2NCBpdGlyLAogCQkJCQkJdTY0IGlmYSwgaW50IHR5cGUpCiB7CiAJdTY0IHBzOwogCXU2NCBwaHlfcHRlLCBpb19tYXNrLCBpbmRleDsKIAl1bmlvbiBpYTY0X3JyIHZyciwgbXJyOwotCWludCByZXQgPSAwOwogCiAJcHMgPSBpdGlyX3BzKGl0aXIpOwogCXZyci52YWwgPSB2Y3B1X2dldF9ycih2LCBpZmEpOwpAQCAtNDQxLDI1ICs0MzksMTkgQEAKIAkJcGh5X3B0ZSAmPSB+X1BBR0VfTUFfTUFTSzsKIAl9CiAKLQlpZiAocHRlICYgVlRMQl9QVEVfSU8pCi0JCXJldCA9IDE7Ci0KIAl2dGxiX3B1cmdlKHYsIGlmYSwgcHMpOwogCXZocHRfcHVyZ2UodiwgaWZhLCBwcyk7CiAKLQlpZiAocHMgPT0gbXJyLnBzKSB7Ci0JCWlmICghKHB0ZSZWVExCX1BURV9JTykpIHsKLQkJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKLQkJfSBlbHNlIHsKLQkJCXZ0bGJfaW5zZXJ0KHYsIHB0ZSwgaXRpciwgaWZhKTsKLQkJCXZjcHVfcXVpY2tfcmVnaW9uX3NldChWTVgodiwgdGNfcmVnaW9ucyksIGlmYSk7Ci0JCX0KLQl9IGVsc2UgaWYgKHBzID4gbXJyLnBzKSB7CisJaWYgKChwcyAhPSBtcnIucHMpIHx8IChwdGUgJiBWVExCX1BURV9JTykpIHsKIAkJdnRsYl9pbnNlcnQodiwgcHRlLCBpdGlyLCBpZmEpOwogCQl2Y3B1X3F1aWNrX3JlZ2lvbl9zZXQoVk1YKHYsIHRjX3JlZ2lvbnMpLCBpZmEpOwotCQlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQotCQkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOwotCX0gZWxzZSB7CisJfQorCWlmIChwdGUgJiBWVExCX1BURV9JTykKKwkJcmV0dXJuOworCisJaWYgKHBzID49IG1yci5wcykKKwkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOworCWVsc2UgewogCQl1NjQgcHNyOwogCQlwaHlfcHRlICAmPSB+UEFHRV9GTEFHU19SVl9NQVNLOwogCQlwc3IgPSBpYTY0X2NsZWFyX2ljKCk7CkBAIC00NjksNyArNDYxLDYgQEAKIAlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQogCQltYXJrX3BhZ2VzX2RpcnR5KHYsIHB0ZSwgcHMpOwogCi0JcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTUwOSw3ICs1MDAsNiBAQAogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAotCiAvKgogICogTG9va3VwIHRoZSBoYXNoIHRhYmxlIGFuZCBpdHMgY29sbGlzaW9uIGNoYWluIHRvIGZpbmQgYW4gZW50cnkKICAqIGNvdmVyaW5nIHRoaXMgYWRkcmVzcyByaWQ6dmEgb3IgdGhlIGVudHJ5LgpAQCAtNTE3LDcgKzUwNyw2IEBACiAgKiBJTlBVVDoKICAqICBpbjogVExCIGZvcm1hdCBmb3IgYm90aCBWSFBUICYgVExCLgogICovCi0KIHN0cnVjdCB0aGFzaF9kYXRhICp2dGxiX2xvb2t1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgaW50IGlzX2RhdGEpCiB7CiAJc3RydWN0IHRoYXNoX2RhdGEgICpjY2g7CkBAIC01NDcsNyArNTM2LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotCiAvKgogICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBjb250cm9sIGRhdGEgYmVmb3JlIHNlcnZpY2UuCiAgKi8KQEAgLTU3Myw2ICs1NjEsMTAgQEAKIHU2NCBrdm1fZ2V0X21wdF9lbnRyeSh1NjQgZ3BmbikKIHsKIAl1NjQgKmJhc2UgPSAodTY0ICopIEtWTV9QMk1fQkFTRTsKKworCWlmIChncGZuID49IChLVk1fUDJNX1NJWkUgPj4gMykpCisJCXBhbmljX3ZtKGN1cnJlbnRfdmNwdSwgIkludmFsaWQgZ3BmbiA9JWx4XG4iLCBncGZuKTsKKwogCXJldHVybiAqKGJhc2UgKyBncGZuKTsKIH0KIApAQCAtNTg5LDcgKzU4MSw2IEBACiAJcmV0dXJuIChwdGUgPj4gUEFHRV9TSElGVCA8PCBQQUdFX1NISUZUKSB8IChncGEgJiB+UEFHRV9NQVNLKTsKIH0KIAotCiAvKgogICogRmV0Y2ggZ3Vlc3QgYnVuZGxlIGNvZGUuCiAgKiBJTlBVVDoKQEAgLTYzMSw3ICs2MjIsNiBAQAogCXJldHVybiBJQTY0X05PX0ZBVUxUOwogfQogCi0KIHZvaWQga3ZtX2luaXRfdmhwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiB7CiAJdi0+YXJjaC52aHB0Lm51bSA9IFZIUFRfTlVNX0VOVFJJRVM7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYwppbmRleCBjYTU1M2IwLi44MWU0Mjg5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCW1zZy5hZGRyZXNzX2xvID0gKHUzMikoYnVzX2FkZHIgJiAweDAwMDAwMDAwZmZmZmZmZmYpOwogCiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqY3B1X21hc2s7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdV9tYXNrKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCmluZGV4IDJhZWFlNDYuLjhkZmQzMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwpAQCAtNDksNyArNDksNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvTWFrZWZpbGUgYi9hcmNoL202OGsvTWFrZWZpbGUKaW5kZXggODEzM2RiYy4uNTcwZDg1YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9NYWtlZmlsZQpAQCAtMTE3LDMgKzExNyw2IEBACiAKIGFyY2hjbGVhbjoKIAlybSAtZiB2bWxpbnV4Lmd6IHZtbGludXguYnoyCisKK2luc3RhbGw6CisJc2ggJChzcmN0cmVlKS9hcmNoL202OGsvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpIHZtbGludXguZ3ogU3lzdGVtLm1hcCAiJChJTlNUQUxMX1BBVEgpIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oCmluZGV4IDIyNmJmYzAuLjBjYWI0MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CiAKIC8qCkBAIC04MCw3ICs4MSw3IEBACiAgKiBpbnRlcnJ1cHQgc291cmNlIChpZiBpdCBzdXBwb3J0cyBjaGFpbmluZykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGlycV9ub2RlIHsKLQlpbnQJCSgqaGFuZGxlcikoaW50LCB2b2lkICopOworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICopOwogCXZvaWQJCSpkZXZfaWQ7CiAJc3RydWN0IGlycV9ub2RlICpuZXh0OwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKaW5kZXggMDUzMDlmNy4uNTBkYjM1OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaApAQCAtMzQsNiArMzQsNyBAQAogCWNoYXIgc2NjX3R5cGU7CiAJY2hhciBldGhlcl90eXBlOwogCWNoYXIgbnVidXNfdHlwZTsKKwljaGFyIGZsb3BweV90eXBlOwogfTsKIAogI2RlZmluZSBNQUNfQURCX05PTkUJCTAKQEAgLTcxLDYgKzcyLDEyIEBACiAjZGVmaW5lIE1BQ19OT19OVUJVUwkJMAogI2RlZmluZSBNQUNfTlVCVVMJCTEKIAorI2RlZmluZSBNQUNfRkxPUFBZX0lXTQkJMAorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fQUREUjEJMQorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fQUREUjIJMgorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fSU9QCTMKKyNkZWZpbmUgTUFDX0ZMT1BQWV9BVgkJNAorCiAvKgogICoJR2VzdGFsdCBudW1iZXJzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkYmM2NGU5Li5jYTg3ZjkzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luc3RhbGwuc2ggYi9hcmNoL202OGsvaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzZiYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2luc3RhbGwuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1IGJ5IExpbnVzIFRvcnZhbGRzCisjCisjIEFkYXB0ZWQgZnJvbSBjb2RlIGluIGFyY2gvaTM4Ni9ib290L01ha2VmaWxlIGJ5IEguIFBldGVyIEFudmluCisjCisjICJtYWtlIGluc3RhbGwiIHNjcmlwdCBmb3IgbTY4ayBhcmNoaXRlY3R1cmUKKyMKKyMgQXJndW1lbnRzOgorIyAgICQxIC0ga2VybmVsIHZlcnNpb24KKyMgICAkMiAtIGtlcm5lbCBpbWFnZSBmaWxlCisjICAgJDMgLSBrZXJuZWwgbWFwIGZpbGUKKyMgICAkNCAtIGRlZmF1bHQgaW5zdGFsbCBwYXRoIChibGFuayBpZiByb290IGRpcmVjdG9yeSkKKyMKKwordmVyaWZ5ICgpIHsKKwlpZiBbICEgLWYgIiQxIiBdOyB0aGVuCisJCWVjaG8gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWVjaG8gIiAqKiogTWlzc2luZyBmaWxlOiAkMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWVjaG8gJyAqKiogWW91IG5lZWQgdG8gcnVuICJtYWtlIiBiZWZvcmUgIm1ha2UgaW5zdGFsbCIuJyAxPiYyCisJCWVjaG8gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWV4aXQgMQorCWZpCit9CisKKyMgTWFrZSBzdXJlIHRoZSBmaWxlcyBhY3R1YWxseSBleGlzdAordmVyaWZ5ICIkMiIKK3ZlcmlmeSAiJDMiCisKKyMgVXNlciBtYXkgaGF2ZSBhIGN1c3RvbSBpbnN0YWxsIHNjcmlwdAorCitpZiBbIC14IH4vYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsIF07IHRoZW4gZXhlYyB+L2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCAiJEAiOyBmaQoraWYgWyAteCAvc2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCBdOyB0aGVuIGV4ZWMgL3NiaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgIiRAIjsgZmkKKworIyBEZWZhdWx0IGluc3RhbGwgLSBzYW1lIGFzIG1ha2UgemxpbG8KKworaWYgWyAtZiAkNC92bWxpbnV6IF07IHRoZW4KKwltdiAkNC92bWxpbnV6ICQ0L3ZtbGludXoub2xkCitmaQorCitpZiBbIC1mICQ0L1N5c3RlbS5tYXAgXTsgdGhlbgorCW12ICQ0L1N5c3RlbS5tYXAgJDQvU3lzdGVtLm9sZAorZmkKKworY2F0ICQyID4gJDQvdm1saW51egorY3AgJDMgJDQvU3lzdGVtLm1hcAorCitzeW5jCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCA5OGI2YmNmLi5iZTAxNzk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTIyLDYgKzIyLDcgQEAKIC8qIGtleWIgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQzLDYgKzQ0LDEwIEBACiAjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgogCisvKiBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLworCisjZGVmaW5lIFNXSU1fSU9fU0laRSAweDIwMDAJLyogU1dJTSBJTyByZXNvdXJjZSBzaXplICovCisKIC8qIE1hYyBib290aW5mbyBzdHJ1Y3QgKi8KIAogc3RydWN0IG1hY19ib290ZXJfZGF0YSBtYWNfYmlfZGF0YTsKQEAgLTIyNCw3ICsyMjksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KIAl9LAogCiAJLyoKQEAgLTIzOSw3ICsyNDUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlYLAogCQkubmFtZQkJPSAiSUl4IiwKQEAgLTI0Nyw3ICsyNTQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJQ1gsCiAJCS5uYW1lCQk9ICJJSWN4IiwKQEAgLTI1NSw3ICsyNjMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1NFMzAsCiAJCS5uYW1lCQk9ICJTRS8zMCIsCkBAIC0yNjMsNyArMjcyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtMjgwLDcgKzI5MCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUZYLAogCQkubmFtZQkJPSAiSUlmeCIsCkBAIC0yODgsNyArMjk5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlTSSwKIAkJLm5hbWUJCT0gIklJc2kiLApAQCAtMjk2LDcgKzMwOCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZJLAogCQkubmFtZQkJPSAiSUl2aSIsCkBAIC0zMDQsNyArMzE3LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVlgsCiAJCS5uYW1lCQk9ICJJSXZ4IiwKQEAgLTMxMiw3ICszMjYsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTMyNiw3ICszNDEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0NMLAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCkBAIC0zMzQsNyArMzUwLDkgQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVU30sCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwl9LAogCiAJLyoKIAkgKglTb21lIE1hYyBMQyBtYWNoaW5lcy4gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBJSWNpLCBBREIgbGlrZSBJSXNpCkBAIC0zNDcsNyArMzY1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUksCiAJCS5uYW1lCQk9ICJMQyBJSSIsCkBAIC0zNTUsNyArMzc0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUlJLAogCQkubmFtZQkJPSAiTEMgSUlJIiwKQEAgLTM2Myw3ICszODMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTM4Myw3ICs0MDQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYwNV9BQ0MsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjA1IiwKQEAgLTM5MSw3ICs0MTMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYxMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MTAiLApAQCAtNDAwLDcgKzQyMyw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjMwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYzMCIsCkBAIC00MTAsNyArNDM0LDggQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDY1MCIsCkBAIC00MTksNyArNDQ0LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwKIAkvKglUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLwogCXsKQEAgLTQzMCw3ICs0NTYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODAwIiwKQEAgLTQzOSw3ICs0NjYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTg0MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4NDBBViIsCkBAIC00NDgsNyArNDc2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDkwMCIsCkBAIC00NTcsNyArNDg2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTk1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5NTAiLApAQCAtNDY2LDcgKzQ5Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwKIAogCS8qCkBAIC00ODAsNyArNTExLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzUsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKQEAgLTQ4OCw3ICs1MjAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1RiwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLApAQCAtNDk2LDcgKzUyOSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1MjAsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTIwIiwKQEAgLTUwNCw3ICs1MzgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU1MCwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA1NTAiLApAQCAtNTEyLDcgKzU0Nyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAJLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBTT05JQyBldGhlcm5ldCAqLwogCXsKQEAgLTUyMyw3ICs1NTksOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTg4LAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTg4IiwKQEAgLTUzMyw3ICs1NzAsOCBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfVFYsCiAJCS5uYW1lCQk9ICJUViIsCkBAIC01NDEsNyArNTc5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDYwMCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDYwMCIsCkBAIC01NDksNyArNTg4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC01NjUsNyArNjA1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY1MCIsCkBAIC01NzQsNyArNjE1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NjAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY2MEFWIiwKQEAgLTU4Myw3ICs2MjUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCiAJfSwKIAogCS8qCkBAIC01OTksNyArNjQyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTQ1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE0NSIsCkBAIC02MDcsNyArNjUxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE1MCIsCkBAIC02MTYsNyArNjYxLDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9QQiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTYwIiwKQEAgLTYyNCw3ICs2NzAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1IiwKQEAgLTYzMiw3ICs2NzksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjVDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NWMiLApAQCAtNjQwLDcgKzY4OCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE3MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNzAiLApAQCAtNjQ4LDcgKzY5Nyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODAiLApAQCAtNjU2LDcgKzcwNiw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwYyIsCkBAIC02NjQsNyArNzE1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTkwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE5MCIsCkBAIC02NzMsNyArNzI1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9CQUJPT04sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCNTIwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCkBAIC02ODIsNyArNzM1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC03MDIsNyArNzU2LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjIzMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjMwIiwKQEAgLTcxMCw3ICs3NjUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNTAiLApAQCAtNzE4LDcgKzc3NCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNzBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNzBjIiwKQEAgLTcyNiw3ICs3ODMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODAiLApAQCAtNzM0LDcgKzc5Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODBjIiwKQEAgLTc0Miw3ICs4MDEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC04MTUsMyArODc1LDQyIEBACiAJc3RyY3B5KHN0ciwgIk1hY2ludG9zaCAiKTsKIAlzdHJjYXQoc3RyLCBtYWNpbnRvc2hfY29uZmlnLT5uYW1lKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzd2ltX3Jlc291cmNlc1sxXTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3dpbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInN3aW0iLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3dpbV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHN3aW1fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc3dpbV9kZXZpY2UKK307CisKK2ludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwl1OCAqc3dpbV9iYXNlOworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5mbG9wcHlfdHlwZSkgeworCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIxOgorCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxRTAwMCk7CisJCWJyZWFrOworCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIyOgorCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxNjAwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXN3aW1fcmVzb3VyY2VzWzBdLm5hbWUgPSAic3dpbS1yZWdzIjsKKwlzd2ltX3Jlc291cmNlc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3Qpc3dpbV9iYXNlOworCXN3aW1fcmVzb3VyY2VzWzBdLmVuZCA9IChyZXNvdXJjZV9zaXplX3QpKHN3aW1fYmFzZSArIFNXSU1fSU9fU0laRSk7CisJc3dpbV9yZXNvdXJjZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtYWNfcGxhdGZvcm1fZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShtYWNfcGxhdGZvcm1fZGV2aWNlcykpOworfQorCithcmNoX2luaXRjYWxsKG1hY19wbGF0Zm9ybV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvdmlhLmMgYi9hcmNoL202OGsvbWFjL3ZpYS5jCmluZGV4IDdkOTdiYTUuLjExYmNlM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvdmlhLmMKKysrIGIvYXJjaC9tNjhrL21hYy92aWEuYwpAQCAtNjQ1LDMgKzY0NSwxMiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKwordm9pZCB2aWExX3NldF9oZWFkKGludCBoZWFkKQoreworCWlmIChoZWFkID09IDApCisJCXZpYTFbdkJ1ZkFdICY9IH5WSUExQV92SGVhZFNlbDsKKwllbHNlCisJCXZpYTFbdkJ1ZkFdIHw9IFZJQTFBX3ZIZWFkU2VsOworfQorRVhQT1JUX1NZTUJPTCh2aWExX3NldF9oZWFkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCmluZGV4IDA2ZDg4N2MuLjg1NWZjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYwpAQCAtNDksOCArNDksMzkgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTIweF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTIweF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDMwMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgzMDAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDM2LAorCQkuZW5kCQk9IDY0ICsgMzYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDAsCisJCS5lbmQJCT0gNjQgKyA0MCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MiwKKwkJLmVuZAkJPSA2NCArIDQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjB4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyMHhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjB4X2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyMHhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjB4X3VhcnQsCisJJm01MjB4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDMsNiArMTM0LDMwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTIweF9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisJdTggdjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDQsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAzNik7CisJd3JpdGViKDB4NCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDQwKTsKKwl3cml0ZWIoMHg0LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgNDIpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weDAwMDFGRkYwOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSAqLworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQyk7CisJd3JpdGViKHYgfCAweGYwLCBNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQyk7CisKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpOworCXdyaXRlYih2IHwgMHgwZiwgTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgogICogIFByb2dyYW0gdGhlIHZlY3RvciB0byBiZSBhbiBhdXRvLXZlY3RvcmVkLgogICovCkBAIC0xMTgsNiArMTczLDcgQEAKIHsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CiAJbTUyMHhfdWFydHNfaW5pdCgpOworCW01MjB4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYwppbmRleCAxM2YwMjYxLi43NDEzM2YyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKQEAgLTUwLDggKzUwLDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyM3hfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyM3hfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyM3hfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTIzeF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyM3hfZmVjX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTIzeF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyM3hfdWFydCwKKwkmbTUyM3hfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgzLDYgKzExNCwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyM3hfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4MjgsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTAzLDYgKzE1Myw3IEBACiAJbWNmX2Rpc2FibGVhbGwoKTsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CiAJbTUyM3hfdWFydHNfaW5pdCgpOworCW01MjN4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYwppbmRleCAyMzBiYWU2Li5lMDQ5MjQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKQEAgLTU1LDggKzU1LDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyNzJfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyNzJfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHg4NDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDg0MCArIDB4MWNmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA4NiwKKwkJLmVuZAkJPSA4NiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gODcsCisJCS5lbmQJCT0gODcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDg4LAorCQkuZW5kCQk9IDg4LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjcyX2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyNzJfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjcyX2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyNzJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjcyX3VhcnQsCisJJm01MjcyX2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05MSw2ICsxMjIsMjIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01MjcyX2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWltciA9IHJlYWRsKE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOworCWltciA9IChpbXIgJiB+MHgwMDAwMGZmZikgfCAweDAwMDAwZGRkOworCXdyaXRlbChpbXIsIE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOworCisJaW1yID0gcmVhZGwoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7CisJaW1yID0gKGltciAmIH4weDBmMDAwMDAwKSB8IDB4MGQwMDAwMDA7CisJd3JpdGVsKGltciwgTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSppY3JwOwpAQCAtMTU1LDYgKzIwMiw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01MjcyX3VhcnRzX2luaXQoKTsKKwltNTI3Ml9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01MjcyX2RldmljZXMsIEFSUkFZX1NJWkUobTUyNzJfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKaW5kZXggNzNjZDFhZS4uNDkzNDNmYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCkBAIC01MCw4ICs1MCw3MyBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01Mjd4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjd4X2ZlYzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDEwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDEwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyMywKKwkJLmVuZAkJPSA2NCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI3LAorCQkuZW5kCQk9IDY0ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjksCisJCS5lbmQJCT0gNjQgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjd4X2ZlYzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDE4MDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDE4MDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMTI4ICsgMjMsCisJCS5lbmQJCT0gMTI4ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDEyOCArIDI3LAorCQkuZW5kCQk9IDEyOCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSAxMjggKyAyOSwKKwkJLmVuZAkJPSAxMjggKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI3eF9mZWNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJmZWMiLAorCQkuaWQJCT0gMCwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG01Mjd4X2ZlYzBfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlCT0gbTUyN3hfZmVjMF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJmZWMiLAorCQkuaWQJCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG01Mjd4X2ZlYzFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlCT0gbTUyN3hfZmVjMV9yZXNvdXJjZXMsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTI3eF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyN3hfdWFydCwKKwkmbTUyN3hfZmVjWzBdLAorI2lmZGVmIENPTkZJR19GRUMyCisJJm01Mjd4X2ZlY1sxXSwKKyNlbmRpZgogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk3LDYgKzE2Miw1MSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfZmVjX2lycV9pbml0KGludCBucikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdTMyIGltcjsKKworCWJhc2UgPSBNQ0ZfSVBTQkFSICsgKG5yID8gTUNGSUNNX0lOVEMxIDogTUNGSUNNX0lOVEMwKTsKKworCXdyaXRlYigweDI4LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoYmFzZSArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgYmFzZSArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoYmFzZSArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIGJhc2UgKyBNQ0ZJTlRDX0lNUkwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfZmVjX2luaXQodm9pZCkKK3sKKwl1MTYgcGFyOworCXU4IHY7CisKKwltNTI3eF9mZWNfaXJxX2luaXQoMCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJcGFyID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl3cml0ZXcocGFyIHwgMHhmMDAsIE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyAweDEwMDA3OCk7CisJd3JpdGViKHYgfCAweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNzgpOworCisjaWZkZWYgQ09ORklHX0ZFQzIKKwltNTI3eF9mZWNfaXJxX2luaXQoMSk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMxICovCisJcGFyID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl3cml0ZXcocGFyIHwgMHhhMCwgTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIDB4MTAwMDc5KTsKKwl3cml0ZWIodiB8IDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogdm9pZCBtY2ZfZGlzYWJsZWFsbCh2b2lkKQogewogCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpKSA9IDB4ZmZmZmZmZmY7CkBAIC0xMTYsMTMgKzIyNiwxNCBAQAogewogCW1jZl9kaXNhYmxlYWxsKCk7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OworCW01Mjd4X3VhcnRzX2luaXQoKTsKKwltNTI3eF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewotCW01Mjd4X3VhcnRzX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI3eF9kZXZpY2VzLCBBUlJBWV9TSVpFKG01Mjd4X2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCmluZGV4IDQ0YmFlYjIuLmJlZTUyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYwpAQCAtNTcsOCArNTcsNDAgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTI4eF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI4eF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDEwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDEwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyMywKKwkJLmVuZAkJPSA2NCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI3LAorCQkuZW5kCQk9IDY0ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjksCisJCS5lbmQJCT0gNjQgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI4eF9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01Mjh4X2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTI4eF9mZWNfcmVzb3VyY2VzLAorfTsKKworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyOHhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01Mjh4X3VhcnQsCisJJm01Mjh4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05OSw2ICsxMzEsMzEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01Mjh4X2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKwl1MTYgdjE2OworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4MjgsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJdjE2ID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDU2KTsKKwl3cml0ZXcodjE2IHwgMHhmMDAsIE1DRl9JUFNCQVIgKyAweDEwMDA1Nik7CisJd3JpdGViKDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA1OCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTU4LDYgKzIxNSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01Mjh4X3VhcnRzX2luaXQoKTsKKwltNTI4eF9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01Mjh4X2RldmljZXMsIEFSUkFZX1NJWkUobTUyOHhfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMKaW5kZXggYTM0NzYyMy4uNTkxZjJmOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jCkBAIC02MSw4ICs2MSwzOCBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MzJ4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MzJ4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAweGZjMDMwMDAwLAorCQkuZW5kCQk9IDB4ZmMwMzA3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMzYsCisJCS5lbmQJCT0gNjQgKyAzNiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MCwKKwkJLmVuZAkJPSA2NCArIDQwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQyLAorCQkuZW5kCQk9IDY0ICsgNDIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUzMnhfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTMyeF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUzMnhfZmVjX3Jlc291cmNlcywKK307CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUzMnhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MzJ4X3VhcnQsCisJJm01MzJ4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Myw2ICsxMjMsMjQgQEAKIAlmb3IgKGxpbmUgPSAwOyAobGluZSA8IG5ybGluZXMpOyBsaW5lKyspCiAJCW01MzJ4X3VhcnRfaW5pdF9saW5lKGxpbmUsIG01MzJ4X3VhcnRfcGxhdGZvcm1bbGluZV0uaXJxKTsKIH0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTMyeF9mZWNfaW5pdCh2b2lkKQoreworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCU1DRl9JTlRDMF9JQ1IzNiA9IDB4MjsKKwlNQ0ZfSU5UQzBfSUNSNDAgPSAweDI7CisJTUNGX0lOVEMwX0lDUjQyID0gMHgyOworCisJTUNGX0lOVEMwX0lNUkggJj0gfihNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzYgfAorCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDAgfCBNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDIpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCU1DRl9HUElPX1BBUl9GRUNJMkMgfD0gKE1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01EQ19FTURDIHwKKwkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURJT19FTURJTyk7CisJTUNGX0dQSU9fUEFSX0ZFQyA9IChNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfN1dfRkVDIHwKKwkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDX01JSV9GRUMpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xNTAsNiArMTk4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfQlNQKHZvaWQpCiB7CiAJbTUzMnhfdWFydHNfaW5pdCgpOworCW01MzJ4X2ZlY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUzMnhfZGV2aWNlcywgQVJSQVlfU0laRShtNTMyeF9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCmluZGV4IGExZTM1MjYuLmRmYmZkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCkBAIC0zMyw4ICszMyw4IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqaW9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogc3RhdGljIGludCBpb2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgc3NpemVfdCBpb2Rldl9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCBzLCBsb2ZmX3QgKik7CkBAIC02NSwxMyArNjUsMTMgQEAKIAkuZm9wcwkJPSAmZm9wcwogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlvZGV2X2RyaXZlciA9Ci17Ci0JLm5hbWUJCT0gKGNoYXIgKikgaW9kZXZfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb2Rldl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gaW9kZXZfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGlvZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AoaW9kZXZfcmVtb3ZlKQorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaW9kZXZfcmVtb3ZlKSwKIH07CiAKIApAQCAtODksMTEgKzg5LDEwIEBACiAKIAogLyogTm8gaG90cGx1Z2dpbmcgb24gdGhlIHBsYXRmb3JtIGJ1cyAtIHVzZSBfX2luaXQgKi8KLXN0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGR2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcmkgPQotCQlpb2Rldl9nZXRfcmVzb3VyY2UocGR2LCBJT0RFVl9SRVNPVVJDRV9JUlEsIElPUkVTT1VSQ0VfSVJRKTsKKwkJaW9kZXZfZ2V0X3Jlc291cmNlKGRldiwgSU9ERVZfUkVTT1VSQ0VfSVJRLCBJT1JFU09VUkNFX0lSUSk7CiAKIAlpZiAodW5saWtlbHkoIXJpKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTEwNCw3ICsxMDMsNyBAQAogCiAKIAotc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIG1pc2NfZGVyZWdpc3RlcigmbWlzY2Rldik7CiB9CkBAIC0xNjAsMTQgKzE1OSwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9pbml0X21vZHVsZSh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKIH0KIAogCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpb2Rldl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpb2Rldl9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggYWJjNjJhYS4uMzIxNGFkZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtNjYsNyArNjYsNyBAQAogICovCiAjZGVmaW5lIElSUV9BRkZJTklUWV9IT09LKGlycSkJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotICAgIGlmICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSkpIHsJXAorICAgIGlmICghY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIGlycV9kZXNjW2lycV0uYWZmaW5pdHkpKSB7XAogCXNtdGNfZm9yd2FyZF9pcnEoaXJxKTsJCQkJCQlcCiAJaXJxX2V4aXQoKTsJCQkJCQkJXAogCXJldHVybjsJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggMDQxNzUxNi4uNTI2ZjMyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTEzOTEsMTEgKzEzOTEsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCiBzZXRfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBzZXQpCQkJCQlcCiB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzLCBuZXc7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAotCXJlcyB8PSBzZXQ7CQkJCQkJXAotCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCW5ldyA9IHJlcyB8IHNldDsJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUobmV3KTsJCQkJCVwKIAkJCQkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJXAogfQkJCQkJCQkJXApAQCAtMTQwMywyNCArMTQwMywyNCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKIGNsZWFyX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2xlYXIpCQkJCVwKIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCByZXMsIG5ldzsJCQkJCVwKIAkJCQkJCQkJXAogCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCi0JcmVzICY9IH5jbGVhcjsJCQkJCQlcCi0Jd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJbmV3ID0gcmVzICYgfmNsZWFyOwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShuZXcpOwkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CQkJCQkJCQlcCiAJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCi1jaGFuZ2VfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjaGFuZ2UsIHVuc2lnbmVkIGludCBuZXcpCQlcCitjaGFuZ2VfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjaGFuZ2UsIHVuc2lnbmVkIGludCB2YWwpCQlcCiB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzLCBuZXc7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAotCXJlcyAmPSB+Y2hhbmdlOwkJCQkJCVwKLQlyZXMgfD0gKG5ldyAmIGNoYW5nZSk7CQkJCQlcCi0Jd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJbmV3ID0gcmVzICYgfmNoYW5nZTsJCQkJCVwKKwluZXcgfD0gKHZhbCAmIGNoYW5nZSk7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKG5ldyk7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gcmVzOwkJCQkJCVwKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDljZTA2MDcuLjllODljZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtOSw2ICs5LDcgQEAKICNpZm5kZWYgX0FTTV9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9TSUdDT05URVhUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmYWNjMmQ3Li4yYWJjYTE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC03NSw2ICs3NSw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjaWZkZWYgX19LRVJORUxfXwogCiAvKiogc29ja190eXBlIC0gU29ja2V0IHR5cGVzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA4OGYxZjdkLi45OTk5M2MwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIF9BU01fU1dBQl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCmluZGV4IDQ5NGE0OWEuLjg3ZGViOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJc2V0X2JpdChpcnEsIHBjcHVfbWFza3NbZmlyc3RfY3B1KHRtcCldLnBjcHVfbWFzayk7CiAKIAl9Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9ICpjcHVtYXNrOworCWNwdW1hc2tfY29weShpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVtYXNrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnaWNfbG9jaywgZmxhZ3MpOwogCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwppbmRleCA0YjQwMDdiLi43Yjg0NWJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggMWE4NmY4NC4uMmE0NzI3MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgpAQCAtMzU2LDQwICszNTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIHVzdGF0IGNvbXBhdGliaWxpdHkgKi8KLXN0cnVjdCB1c3RhdDMyIHsKLQljb21wYXRfZGFkZHJfdAlmX3RmcmVlOwotCWNvbXBhdF9pbm9fdAlmX3Rpbm9kZTsKLQljaGFyCQlmX2ZuYW1lWzZdOwotCWNoYXIJCWZfZnBhY2tbNl07Ci19OwotCi1leHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c191c3RhdChkZXZfdCBkZXYsIHN0cnVjdCB1c3RhdCBfX3VzZXIgKiB1YnVmKTsKLQotU1lTQ0FMTF9ERUZJTkUyKDMyX3VzdGF0LCBkZXZfdCwgZGV2LCBzdHJ1Y3QgdXN0YXQzMiBfX3VzZXIgKiwgdWJ1ZjMyKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHVzdGF0IHRtcDsKLQlzdHJ1Y3QgdXN0YXQzMiB0bXAzMjsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQllcnIgPSBzeXNfdXN0YXQoZGV2LCAoc3RydWN0IHVzdGF0IF9fdXNlciAqKSZ0bXApOwotCXNldF9mcyhvbGRfZnMpOwotCi0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQltZW1zZXQoJnRtcDMyLCAwLCBzaXplb2Yoc3RydWN0IHVzdGF0MzIpKTsKLQl0bXAzMi5mX3RmcmVlID0gdG1wLmZfdGZyZWU7Ci0JdG1wMzIuZl90aW5vZGUgPSB0bXAuZl90aW5vZGU7Ci0KLQllcnIgPSBjb3B5X3RvX3VzZXIodWJ1ZjMyLCAmdG1wMzIsIHNpemVvZihzdHJ1Y3QgdXN0YXQzMikpID8gLUVGQVVMVCA6IDA7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCiBTWVNDQUxMX0RFRklORTQoMzJfc2VuZGZpbGUsIGxvbmcsIG91dF9mZCwgbG9uZywgaW5fZmQsCiAJY29tcGF0X29mZl90IF9fdXNlciAqLCBvZmZzZXQsIHMzMiwgY291bnQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggNzQzOGU5Mi4uZjYxZDZiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJUFRSCWNvbXBhdF9zeXNfdXRpbWUJCS8qIDYxMzAgKi8KIAlQVFIJc3lzX21rbm9kCiAJUFRSCXN5c18zMl9wZXJzb25hbGl0eQotCVBUUglzeXNfMzJfdXN0YXQKKwlQVFIJY29tcGF0X3N5c191c3RhdAogCVBUUgljb21wYXRfc3lzX3N0YXRmcwogCVBUUgljb21wYXRfc3lzX2ZzdGF0ZnMJCS8qIDYxMzUgKi8KIAlQVFIJc3lzX3N5c2ZzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggYjBmZWY0Zi4uNjA5OTdmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJUFRSCXN5c19vbGR1bmFtZQogCVBUUglzeXNfdW1hc2sJCQkvKiA0MDYwICovCiAJUFRSCXN5c19jaHJvb3QKLQlQVFIJc3lzXzMyX3VzdGF0CisJUFRSCWNvbXBhdF9zeXNfdXN0YXQKIAlQVFIJc3lzX2R1cDIKIAlQVFIJc3lzX2dldHBwaWQKIAlQVFIJc3lzX2dldHBncnAJCQkvKiA0MDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IGI2Y2NhMDEuLjVmNWFmN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC02ODYsNyArNjg2LDcgQEAKIAkgKiBhbmQgZWZmaWNpZW5jeSwgd2UganVzdCBwaWNrIHRoZSBlYXNpZXN0IG9uZSB0byBmaW5kLgogCSAqLwogCi0JdGFyZ2V0ID0gZmlyc3RfY3B1KGlycV9kZXNjW2lycV0uYWZmaW5pdHkpOworCXRhcmdldCA9IGNwdW1hc2tfZmlyc3QoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CiAKIAkvKgogCSAqIFdlIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gY29kZSB0byBoYXZlIGNvcnJlY3RseSBwcm9jZXNzZWQKQEAgLTkyMSwxMSArOTIxLDEzIEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7CiAJdm9pZCAqYXJnX2NvcHkgPSBwaXBpLT5hcmc7CiAJaW50IHR5cGVfY29weSA9IHBpcGktPnR5cGU7CisJaW50IGlycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgMTsKKwogCXNtdGNfaXBpX25xKCZmcmVlSVBJcSwgcGlwaSk7CiAJc3dpdGNoICh0eXBlX2NvcHkpIHsKIAljYXNlIFNNVENfQ0xPQ0tfVElDSzoKIAkJaXJxX2VudGVyKCk7Ci0JCWtzdGF0X3RoaXNfY3B1LmlycXNbTUlQU19DUFVfSVJRX0JBU0UgKyAxXSsrOworCQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAkJY2QgPSAmcGVyX2NwdShtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOwogCQljZC0+ZXZlbnRfaGFuZGxlcihjZCk7CiAJCWlycV9leGl0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggYjJkNzA0MS4uMjlmYWRhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTUyMCw3ICsxNTIwLDkgQEAKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgeworCQl1bnNpZ25lZCBsb25nIHNyID0gc2V0X2MwX3N0YXR1cyhTVDBfQkVWKTsKIAkJd3JpdGVfYzBfZWJhc2UoZWJhc2UpOworCQl3cml0ZV9jMF9zdGF0dXMoc3IpOwogCQkvKiBTZXR0aW5nIHZlY3RvciBzcGFjaW5nIGVuYWJsZXMgRUkvVkkgbW9kZSAgKi8KIAkJY2hhbmdlX2MwX2ludGN0bCgweDNlMCwgVkVDVE9SU1BBQ0lORyk7CiAJfQpAQCAtMTYwMiw4ICsxNjA0LDYgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl1bnNpZ25lZCBsb25nIHVuY2FjaGVkX2ViYXNlID0gVE9fVU5DQUMoZWJhc2UpOwogI2VuZGlmCi0JaWYgKGNwdV9oYXNfbWlwc19yMikKLQkJdW5jYWNoZWRfZWJhc2UgKz0gKHJlYWRfYzBfZWJhc2UoKSAmIDB4M2ZmZmYwMDApOwogCiAJaWYgKCFhZGRyKQogCQlwYW5pYyhwYW5pY19udWxsX2NlcnIpOwpAQCAtMTYzNSw5ICsxNjM1LDExIEBACiAJCXJldHVybjsJLyogQWxyZWFkeSBkb25lICovCiAjZW5kaWYKIAotCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KQotCQllYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX2xvd19wYWdlcygweDIwMCArIFZFQ1RPUlNQQUNJTkcqNjQpOwotCWVsc2UgeworCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDB4MjAwICsgVkVDVE9SU1BBQ0lORyo2NDsKKwkJZWJhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJCV9fYWxsb2NfYm9vdG1lbShzaXplLCAxIDw8IGZscyhzaXplKSwgMCk7CisJfSBlbHNlIHsKIAkJZWJhc2UgPSBDQUNfQkFTRTsKIAkJaWYgKGNwdV9oYXNfbWlwc19yMikKIAkJCWViYXNlICs9IChyZWFkX2MwX2ViYXNlKCkgJiAweDNmZmZmMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggYzQzZjRiMi4uODcxZTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQljLT5kY2FjaGUud2F5cyA9IDI7CiAJCWMtPmRjYWNoZS53YXliaXQgPSAwOwogCi0JCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QOworCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUCB8IE1JUFNfQ1BVX1BSRUZFVENIOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX1RYNDlYWDoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKaW5kZXggNTQ2ZTY5Ny4uYmVkNTZmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWlmICghcGxhdF9kZXZpY2VfaXNfY29oZXJlbnQoZGV2KSAmJiBkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkgewogCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAKLQkJYWRkciA9IHBsYXRfZG1hX2FkZHJfdG9fcGh5cyhkbWFfYWRkcmVzcyk7CisJCWFkZHIgPSBkbWFfYWRkcl90b192aXJ0KGRtYV9hZGRyZXNzKTsKIAkJZG1hX2NhY2hlX3diYWNrX2ludihhZGRyLCBzaXplKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtc210Yy5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMKaW5kZXggYWFiZDcyNy4uNWJhMzE4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiB2b2lkIHBsYXRfc2V0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHkpCiB7Ci0JY3B1bWFza190IHRtYXNrID0gKmFmZmluaXR5OworCWNwdW1hc2tfdCB0bWFzazsKIAlpbnQgY3B1ID0gMDsKIAl2b2lkIHNtdGNfc2V0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgYWZmKTsKIApAQCAtMTM5LDExICsxMzksMTIgQEAKIAkgKiBiZSBtYWRlIHRvIGZvcndhcmQgdG8gYW4gb2ZmbGluZSAiQ1BVIi4KIAkgKi8KIAorCWNwdW1hc2tfY29weSgmdG1hc2ssIGFmZmluaXR5KTsKIAlmb3JfZWFjaF9jcHUoY3B1LCBhZmZpbml0eSkgewogCQlpZiAoKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IDApIHx8ICFjcHVfb25saW5lKGNwdSkpCiAJCQljcHVfY2xlYXIoY3B1LCB0bWFzayk7CiAJfQotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSB0bWFzazsKKwljcHVtYXNrX2NvcHkoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgJnRtYXNrKTsKIAogCWlmIChjcHVzX2VtcHR5KHRtYXNrKSkKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKaW5kZXggZjhiMThhZi4uMGVjZDVmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCWludCBpcnEgPSBTR0lfQlVTRVJSX0lSUTsKIAogCWlycV9lbnRlcigpOwotCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGlycV90b19kZXNjKGlycSkpOwogCWlwMjJfYmVfaW50ZXJydXB0KGlycSk7CiAJaXJxX2V4aXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwppbmRleCAzZGNiMjdlLi5jOGY3ZDIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAljaGFyIGM7CiAKIAlpcnFfZW50ZXIoKTsKLQlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAlwcmludGsoS0VSTl9BTEVSVCAiT29wcywgZ290IDgyNTQgaW50ZXJydXB0LlxuIik7CiAJQXJjUmVhZCgwLCAmYywgMSwgJmNudCk7CiAJQXJjRW50ZXJJbnRlcmFjdGl2ZU1vZGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYwppbmRleCBkZGRmZGE4Li4zMTQ2OTE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvc21wLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NtcC5jCkBAIC0xNzgsOSArMTc4LDEwIEBACiB2b2lkIGJjbTE0ODBfbWFpbGJveF9pbnRlcnJ1cHQodm9pZCkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpcnEgPSBLX0JDTTE0ODBfSU5UX01CT1hfMF8wOwogCXVuc2lnbmVkIGludCBhY3Rpb247CiAKLQlrc3RhdF90aGlzX2NwdS5pcnFzW0tfQkNNMTQ4MF9JTlRfTUJPWF8wXzBdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAJLyogTG9hZCB0aGUgbWFpbGJveCByZWdpc3RlciB0byBmaWd1cmUgb3V0IHdoYXQgd2UncmUgc3VwcG9zZWQgdG8gZG8gKi8KIAlhY3Rpb24gPSAoX19yYXdfcmVhZHEobWFpbGJveF8wX3JlZ3NbY3B1XSkgPj4gNDgpICYgMHhmZmZmOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3NtcC5jCmluZGV4IDU5NTBhMjg4Li5jYWQxNDAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYwpAQCAtMTY2LDkgKzE2NiwxMCBAQAogdm9pZCBzYjEyNTBfbWFpbGJveF9pbnRlcnJ1cHQodm9pZCkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpcnEgPSBLX0lOVF9NQk9YXzA7CiAJdW5zaWduZWQgaW50IGFjdGlvbjsKIAotCWtzdGF0X3RoaXNfY3B1LmlycXNbS19JTlRfTUJPWF8wXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGlycV90b19kZXNjKGlycSkpOwogCS8qIExvYWQgdGhlIG1haWxib3ggcmVnaXN0ZXIgdG8gZmlndXJlIG91dCB3aGF0IHdlJ3JlIHN1cHBvc2VkIHRvIGRvICovCiAJYWN0aW9uID0gKF9fX19yYXdfcmVhZHEobWFpbGJveF9yZWdzW2NwdV0pID4+IDQ4KSAmIDB4ZmZmZjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKaW5kZXggNTZjNjRjYy4uNTBmZGI1YyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJaWYgKGFjdGlvbikgewogCQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCQlzZXFfcHJpbnRmKHAsICIgJTE0cy4ldSIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUsCiAJCQkJICAgKEd4SUNSKGkpICYgR3hJQ1JfTEVWRUwpID4+CiAJCQkJICAgR3hJQ1JfTEVWRUxfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXdhdGNoZG9nLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtd2F0Y2hkb2cuYwppbmRleCAxMDgxMWU5Li4yZTM3MGQ4IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtd2F0Y2hkb2cuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtd2F0Y2hkb2cuYwpAQCAtMTMwLDYgKzEzMCw3IEBACiAJICogdGhlIHN0YWNrIE5NSS1hdG9taWNhbGx5LCBpdCdzIHNhZmUgdG8gdXNlIHNtcF9wcm9jZXNzb3JfaWQoKS4KIAkgKi8KIAlpbnQgc3VtLCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGlycSA9IE5NSUlSUTsKIAl1OCB3ZHQsIHRtcDsKIAogCXdkdCA9IFdEQ1RSICYgfldEQ1RSX1dEQ05FOwpAQCAtMTM4LDcgKzEzOSw3IEBACiAJTk1JQ1IgPSBOTUlDUl9XRElGOwogCiAJbm1pX2NvdW50KGNwdSkrKzsKLQlrc3RhdF90aGlzX2NwdS5pcnFzW05NSUlSUV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAlzdW0gPSBpcnFfc3RhdFtjcHVdLl9faXJxX2NvdW50OwogCiAJaWYgKGxhc3RfaXJxX3N1bXNbY3B1XSA9PSBzdW0pIHsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKaW5kZXggYzU4NGIwMC4uNDMwZjFhZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKQEAgLTMzNiwxMCArMzM2LDExIEBACiAjZGVmaW5lIE5VTV9QRENfUkVTVUxUCTMyCiAKICNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCi0jaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorI2lmZGVmIF9fS0VSTkVMX18KKwogZXh0ZXJuIGludCBwZGNfdHlwZTsKIAogLyogVmFsdWVzIGZvciBwZGNfdHlwZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmYmE0MDJjLi44ODU0NzJiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNiArNTQsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkweDQwMWYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTB4NDAyMAorI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAvKiBPX05PTkJMT0NLIGNsYXNoZXMgd2l0aCB0aGUgYml0cyB1c2VkIGZvciBzb2NrZXQgdHlwZXMuICBUaGVyZWZvcmUgd2UKICAqIGhhdmUgdG8gZGVmaW5lIFNPQ0tfTk9OQkxPQ0sgdG8gYSBkaWZmZXJlbnQgdmFsdWUgaGVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDNmZjE2YzUuLmU3ODQwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9QQVJJU0NfU1dBQl9ICiAjZGVmaW5lIF9QQVJJU0NfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IDI5ZTcwZTEuLjFjNzQwZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWlmIChjcHVfZGVzdCA8IDApCiAJCXJldHVybjsKIAotCWNwdW1hc2tfY29weSgmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgJmNwdW1hc2tfb2ZfY3B1KGNwdV9kZXN0KSk7CisJY3B1bWFza19jb3B5KCZpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBkZXN0KTsKIH0KICNlbmRpZgogCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZWxzZQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCAzMDNkMmI2Li4wM2I5YTAxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCUVOVFJZX09VUlMobmV3dW5hbWUpCiAJRU5UUllfU0FNRSh1bWFzaykJCS8qIDYwICovCiAJRU5UUllfU0FNRShjaHJvb3QpCi0JRU5UUllfU0FNRSh1c3RhdCkKKwlFTlRSWV9DT01QKHVzdGF0KQogCUVOVFJZX1NBTUUoZHVwMikKIAlFTlRSWV9TQU1FKGdldHBwaWQpCiAJRU5UUllfU0FNRShnZXRwZ3JwKQkJLyogNjUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IDhiNWJhODIuLjQ0NDdkZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMTI3LDYgKzEyNywxMyBAQAogCQkJZGNyLXJlZyA9IDwweDAxMCAweDAwMj47CiAJCX07CiAKKwkJQ1JZUFRPOiBjcnlwdG9AMTgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1jYyxwcGM0NjBleC1jcnlwdG8iLCAiYW1jYyxwcGM0eHgtY3J5cHRvIjsKKwkJCXJlZyA9IDw0IDB4MDAxODAwMDAgMHg4MDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxZCAweDQ+OworCQl9OworCiAJCU1BTDA6IG1jbWFsIHsKIAkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQ2MGV4IiwgImlibSxtY21hbDIiOwogCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKaW5kZXggMjgwNDQ0NC4uNWU2YjA4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwpAQCAtOTcsNiArOTcsMTMgQEAKIAkJCQkgICAgICAweDYgMHg0PjsJLyogRUNDIFNFQyBFcnJvciAqLyAKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0BlZjcwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDA1ZXgtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8MHhlZjcwMDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDE3IDB4Mj47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDA1ZXgiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKaW5kZXggNTdiODJlMy4uNjBhM2M5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKQEAgLTksNyArOSw3IEBACiAjaWZuZGVmIF9fQVNNX0JPT1RYX0hfXwogI2RlZmluZSBfX0FTTV9CT09UWF9IX18KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBtYWNpbnRvc2gKICNpbmNsdWRlIDxUeXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGNkNDZmMDIuLmI1NjAwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYXV4dmVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZjk5M2U0MS4uYmIyZGU2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBfX0xJTlVYX0tWTV9QT1dFUlBDX0gKICNkZWZpbmUgX19MSU5VWF9LVk1fUE9XRVJQQ19ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3Qga3ZtX3JlZ3MgewogCV9fdTY0IHBjOwpAQCAtNTIsNCArNTIsMTEgQEAKIAlfX3U2NCBmcHJbMzJdOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYgLyogX19MSU5VWF9LVk1fUE9XRVJQQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAppbmRleCBmNDkwMzFiLi5kMjJkMzk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKQEAgLTI4LDYgKzI4LDEzIEBACiAgKiBuZWVkIHRvIGZpbmQgc29tZSB3YXkgb2YgYWR2ZXJ0aXNpbmcgaXQuICovCiAjZGVmaW5lIEtWTTQ0eF9HVUVTVF9UTEJfU0laRSA2NAogCitzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKKwl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLworCXUzMiB3b3JkMDsKKwl1MzIgd29yZDE7CisJdTMyIHdvcmQyOworfTsKKwogc3RydWN0IGt2bXBwY180NHhfc2hhZG93X3JlZiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTE2IGd0bGJfaW5kZXg7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAppbmRleCAyMTk3NzY0Li41NmJmYWU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKQEAgLTQyLDcgKzQyLDEyIEBACiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MgMTMKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0lUTEJfTUlTUyAxNAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfREVCVUcgMTUKLSNkZWZpbmUgQk9PS0VfTUFYX0lOVEVSUlVQVCAxNQorCisvKiBFNTAwICovCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfVU5BVkFJTCAzMgorI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX0RBVEEgMzMKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9ST1VORCAzNAorI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfUEVSRk9STUFOQ0VfTU9OSVRPUiAzNQogCiAjZGVmaW5lIFJFU1VNRV9GTEFHX05WICAgICAgICAgICgxPDwwKSAgLyogUmVsb2FkIGd1ZXN0IG5vbnZvbGF0aWxlIHN0YXRlPyAqLwogI2RlZmluZSBSRVNVTUVfRkxBR19IT1NUICAgICAgICAoMTw8MSkgIC8qIFJlc3VtZSBob3N0PyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2U1MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDQ5N2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogWXUgTGl1LCA8eXUubGl1QGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0tWTV9FNTAwX0hfXworI2RlZmluZSBfX0FTTV9LVk1fRTUwMF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NJWkUgMzYKKworI2RlZmluZSBFNTAwX1BJRF9OVU0gICAzCisjZGVmaW5lIEU1MDBfVExCX05VTSAgIDIKKworc3RydWN0IHRsYmV7CisJdTMyIG1hczE7CisJdTMyIG1hczI7CisJdTMyIG1hczM7CisJdTMyIG1hczc7Cit9OworCitzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCB7CisJLyogVW5tb2RpZmllZCBjb3B5IG9mIHRoZSBndWVzdCdzIFRMQi4gKi8KKwlzdHJ1Y3QgdGxiZSAqZ3Vlc3RfdGxiW0U1MDBfVExCX05VTV07CisJLyogVExCIHRoYXQncyBhY3R1YWxseSB1c2VkIHdoZW4gdGhlIGd1ZXN0IGlzIHJ1bm5pbmcuICovCisJc3RydWN0IHRsYmUgKnNoYWRvd190bGJbRTUwMF9UTEJfTlVNXTsKKwkvKiBQYWdlcyB3aGljaCBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgc2hhZG93IFRMQi4gKi8KKwlzdHJ1Y3QgcGFnZSAqKnNoYWRvd19wYWdlc1tFNTAwX1RMQl9OVU1dOworCisJdW5zaWduZWQgaW50IGd1ZXN0X3RsYl9zaXplW0U1MDBfVExCX05VTV07CisJdW5zaWduZWQgaW50IHNoYWRvd190bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBndWVzdF90bGJfbnZbRTUwMF9UTEJfTlVNXTsKKworCXUzMiBob3N0X3BpZFtFNTAwX1BJRF9OVU1dOworCXUzMiBwaWRbRTUwMF9QSURfTlVNXTsKKworCXUzMiBtYXMwOworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM0OworCXUzMiBtYXM1OworCXUzMiBtYXM2OworCXUzMiBtYXM3OworCXUzMiBsMWNzcjE7CisJdTMyIGhpZDA7CisJdTMyIGhpZDE7CisKKwlzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnRvX2U1MDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBjb250YWluZXJfb2YodmNwdSwgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAsIHZjcHUpOworfQorCisjZW5kaWYgLyogX19BU01fS1ZNX0U1MDBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGMxZTQzNmYuLmRmZGYxM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC02NCwxMyArNjQsNiBAQAogCXUzMiBoYWx0X3dha2V1cDsKIH07CiAKLXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgewotCXUzMiB0aWQ7IC8qIE9ubHkgdGhlIGxvdyA4IGJpdHMgYXJlIHVzZWQuICovCi0JdTMyIHdvcmQwOwotCXUzMiB3b3JkMTsKLQl1MzIgd29yZDI7Ci19OwotCiBlbnVtIGt2bV9leGl0X3R5cGVzIHsKIAlNTUlPX0VYSVRTLAogCURDUl9FWElUUywKQEAgLTExOCwxMSArMTExLDYgQEAKIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAl1MzIgaG9zdF9zdGFjazsKIAl1MzIgaG9zdF9waWQ7Ci0JdTMyIGhvc3RfZGJjcjA7Ci0JdTMyIGhvc3RfZGJjcjE7Ci0JdTMyIGhvc3RfZGJjcjI7Ci0JdTMyIGhvc3RfaWFjWzRdOwotCXUzMiBob3N0X21zcjsKIAogCXU2NCBmcHJbMzJdOwogCXVsb25nIGdwclszMl07CkBAIC0xNTcsNyArMTQ1LDcgQEAKIAl1MzIgdGJ1OwogCXUzMiB0Y3I7CiAJdTMyIHRzcjsKLQl1MzIgaXZvclsxNl07CisJdTMyIGl2b3JbNjRdOwogCXVsb25nIGl2cHI7CiAJdTMyIHBpcjsKIApAQCAtMTcwLDYgKzE1OCw3IEBACiAJdTMyIGNjcjE7CiAJdTMyIGRiY3IwOwogCXUzMiBkYmNyMTsKKwl1MzIgZGJzcjsKIAogI2lmZGVmIENPTkZJR19LVk1fRVhJVF9USU1JTkcKIAlzdHJ1Y3Qga3ZtcHBjX2V4aXRfdGltaW5nIHRpbWluZ19leGl0OwpAQCAtMjAwLDEwICsxODksNCBAQAogCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19leGNlcHRpb25zOwogfTsKIAotc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgbG9uZyBicFs0XTsKLQlpbnQgc2luZ2xlc3RlcDsKLX07Ci0KICNlbmRpZiAvKiBfX1BPV0VSUENfS1ZNX0hPU1RfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCAzNmQyYTUwLi4yYzZlZTM0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCkBAIC01MiwxMyArNTIsMTkgQEAKIGV4dGVybiBpbnQga3ZtcHBjX2VtdWxhdGVfbW1pbyhzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKKy8qIENvcmUtc3BlY2lmaWMgaG9va3MgKi8KKwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhZGRyLCBncGFfdCBncGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgYXNpZCwgdTMyIGZsYWdzLCB1MzIgbWF4X2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGd0bGJfaWR4KTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfcHJpdl9zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdXNlcm1vZGUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9zd2l0Y2hfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHBpZCk7Ci0KLS8qIENvcmUtc3BlY2lmaWMgaG9va3MgKi8KK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gaW50IGt2bXBwY19tbXVfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKK2V4dGVybiBncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndmFfdCBlYWRkcik7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2R0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkKTsKQEAgLTcxLDkgKzc3LDYgQEAKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1leHRlcm4gdm9pZCBrdm1wcGNfY29yZV9sb2FkX2hvc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9kZWxpdmVyX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiBpbnQga3ZtcHBjX2NvcmVfcGVuZGluZ19kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCmluZGV4IDNmOTQxYzAuLjQyODViNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaApAQCAtNzUsNiArNzUsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitleHRlcm4gdW5zaWduZWQgaW50IHRsYmNhbV9pbmRleDsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludAlpZDsKIAl1bnNpZ25lZCBpbnQJYWN0aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAppbmRleCAzZjEyMWZlLi5lNzIzM2E4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaApAQCAtMTksNiArMTksNyBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfUFMzRkJfSF8KICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BTM0ZCX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qIGlvY3RsICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZjVhNGUxNjguLjFlNWNmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYxLDQgKzYxLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZgkvKiBfQVNNX1BPV0VSUENfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKaW5kZXggMzU0NWVmYi4uMTI4NmM4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKQEAgLTIzLDkgKzIzLDEwIEBACiAjaWZuZGVmIF9TUFVfSU5GT19ICiAjZGVmaW5lIF9TUFVfSU5GT19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9zcHUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2Vsc2UKIHN0cnVjdCBtZmNfY3Ffc3IgewogCV9fdTY0IG1mY19jcV9kYXRhMF9SVzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGVmODI0YWUuLmM1ODFlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtOCw3ICs4LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2lmZGVmIF9fR05VQ19fCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKaW5kZXggNzIzNTNmNi4uZmUxNjY0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaApAQCAtNjUsNyArNjUsNyBAQAogU1lTWChzeXNfbmlfc3lzY2FsbCxzeXNfb2xkdW5hbWUsIHN5c19vbGR1bmFtZSkKIENPTVBBVF9TWVNfU1BVKHVtYXNrKQogU1lTQ0FMTF9TUFUoY2hyb290KQotU1lTQ0FMTCh1c3RhdCkKK0NPTVBBVF9TWVModXN0YXQpCiBTWVNDQUxMX1NQVShkdXAyKQogU1lTQ0FMTF9TUFUoZ2V0cHBpZCkKIFNZU0NBTExfU1BVKGdldHBncnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMTllZTQ5MS4uNDJmZTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2FscGFjYS5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0tWTQotI2luY2x1ZGUgPGFzbS9rdm1fNDR4Lmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHXzQweCkKQEAgLTM2MSw4ICszNjEsNiBAQAogCURFRklORShQVEVfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNCi0JREVGSU5FKFRMQkVfQllURVMsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlKSk7Ci0KIAlERUZJTkUoVkNQVV9IT1NUX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9zdGFjaykpOwogCURFRklORShWQ1BVX0hPU1RfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9waWQpKTsKIAlERUZJTkUoVkNQVV9HUFJTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZ3ByKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAyM2I4YjVlLi4xYjU1ZmZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbHNlCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9QRVJfQ1BVKQogCQkJY29udGludWU7CiAKLQkJY3B1c19hbmQobWFzaywgaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFwKTsKKwkJY3B1bWFza19hbmQoJm1hc2ssIGlycV9kZXNjW2lycV0uYWZmaW5pdHksICZtYXApOwogCQlpZiAoYW55X29ubGluZV9jcHUobWFzaykgPT0gTlJfQ1BVUykgewogCQkJcHJpbnRrKCJCcmVha2luZyBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCQkJbWFzayA9IG1hcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAxNjFiOWI5Li42N2YwN2Y0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xODEsMTMgKzE4MSw3IEBACiAJCV9faW5pdHJhbWZzX2VuZCA9IC47CiAJfQogI2VuZGlmCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmRhdGEucGVyY3B1ICA6IEFUKEFERFIoLmRhdGEucGVyY3B1KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fcGVyX2NwdV9zdGFydCA9IC47Ci0JCSooLmRhdGEucGVyY3B1KQotCQkqKC5kYXRhLnBlcmNwdS5zaGFyZWRfYWxpZ25lZCkKLQkJX19wZXJfY3B1X2VuZCA9IC47Ci0JfQorCVBFUkNQVShQQUdFX1NJWkUpCiAKIAkuID0gQUxJR04oOCk7CiAJLm1hY2hpbmUuZGVzYyA6IEFUKEFERFIoLm1hY2hpbmUuZGVzYykgLSBMT0FEX09GRlNFVCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKaW5kZXggYTY2YmVjNS4uMGNlZjgwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCkBAIC0yOCw3MiArMjgsNiBAQAogCiAjaW5jbHVkZSAiNDR4X3RsYi5oIgogCi0vKiBOb3RlOiBjbGVhcmluZyBNU1JbREVdIGp1c3QgbWVhbnMgdGhhdCB0aGUgZGVidWcgaW50ZXJydXB0IHdpbGwgbm90IGJlCi0gKiBkZWxpdmVyZWQgKmltbWVkaWF0ZWx5Ki4gSW5zdGVhZCwgaXQgc2ltcGx5IHNldHMgdGhlIGFwcHJvcHJpYXRlIERCU1IgYml0cy4KLSAqIElmIHRob3NlIERCU1IgYml0cyBhcmUgc3RpbGwgc2V0IHdoZW4gTVNSW0RFXSBpcyByZS1lbmFibGVkLCB0aGUgaW50ZXJydXB0Ci0gKiB3aWxsIGJlIGRlbGl2ZXJlZCBhcyBhbiAiaW1wcmVjaXNlIGRlYnVnIGV2ZW50IiAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5Ci0gKiBEQlNSW0lERV0uCi0gKi8KLXN0YXRpYyB2b2lkIGt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHModm9pZCkKLXsKLQltdG1zcihtZm1zcigpICYgfk1TUl9ERSk7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCW10c3ByKFNQUk5fSUFDMSwgdmNwdS0+YXJjaC5ob3N0X2lhY1swXSk7Ci0JbXRzcHIoU1BSTl9JQUMyLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdKTsKLQltdHNwcihTUFJOX0lBQzMsIHZjcHUtPmFyY2guaG9zdF9pYWNbMl0pOwotCW10c3ByKFNQUk5fSUFDNCwgdmNwdS0+YXJjaC5ob3N0X2lhY1szXSk7Ci0JbXRzcHIoU1BSTl9EQkNSMSwgdmNwdS0+YXJjaC5ob3N0X2RiY3IxKTsKLQltdHNwcihTUFJOX0RCQ1IyLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjIpOwotCW10c3ByKFNQUk5fREJDUjAsIHZjcHUtPmFyY2guaG9zdF9kYmNyMCk7Ci0JbXRtc3IodmNwdS0+YXJjaC5ob3N0X21zcik7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcgPSAmdmNwdS0+Z3Vlc3RfZGVidWc7Ci0JdTMyIGRiY3IwID0gMDsKLQotCXZjcHUtPmFyY2guaG9zdF9tc3IgPSBtZm1zcigpOwotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCS8qIFNhdmUgaG9zdCBkZWJ1ZyByZWdpc3RlciBzdGF0ZS4gKi8KLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzBdID0gbWZzcHIoU1BSTl9JQUMxKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdID0gbWZzcHIoU1BSTl9JQUMyKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzJdID0gbWZzcHIoU1BSTl9JQUMzKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzNdID0gbWZzcHIoU1BSTl9JQUM0KTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjAgPSBtZnNwcihTUFJOX0RCQ1IwKTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjEgPSBtZnNwcihTUFJOX0RCQ1IxKTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjIgPSBtZnNwcihTUFJOX0RCQ1IyKTsKLQotCS8qIHNldCByZWdpc3RlcnMgdXAgZm9yIGd1ZXN0ICovCi0KLQlpZiAoZGJnLT5icFswXSkgewotCQltdHNwcihTUFJOX0lBQzEsIGRiZy0+YnBbMF0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMxIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFsxXSkgewotCQltdHNwcihTUFJOX0lBQzIsIGRiZy0+YnBbMV0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMyIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFsyXSkgewotCQltdHNwcihTUFJOX0lBQzMsIGRiZy0+YnBbMl0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMzIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFszXSkgewotCQltdHNwcihTUFJOX0lBQzQsIGRiZy0+YnBbM10pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUM0IHwgREJDUjBfSURNOwotCX0KLQotCW10c3ByKFNQUk5fREJDUjAsIGRiY3IwKTsKLQltdHNwcihTUFJOX0RCQ1IxLCAwKTsKLQltdHNwcihTUFJOX0RCQ1IyLCAwKTsKLX0KLQogdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCWt2bXBwY180NHhfdGxiX2xvYWQodmNwdSk7CkBAIC0xNDksOCArODMsNiBAQAogaW50IGt2bXBwY19jb3JlX3ZjcHVfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cikKIHsKLQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAlpbnQgaW5kZXg7CiAJZ3ZhX3QgZWFkZHI7CiAJdTggcGlkOwpAQCAtMTY2LDkgKzk4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltpbmRleF07Ci0KLQl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IHRsYl94bGF0ZShndGxiZSwgZWFkZHIpOworCXRyLT5waHlzaWNhbF9hZGRyZXNzID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBpbmRleCwgZWFkZHIpOwogCS8qIFhYWCB3aGF0IGRvZXMgIndyaXRlYWJsZSIgYW5kICJ1c2VybW9kZSIgZXZlbiBtZWFuPyAqLwogCXRyLT52YWxpZCA9IDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYwppbmRleCA4MjQ4OWE3Li42MWFmNThmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCkBAIC0yNywyNSArMjcsMTIgQEAKICNpbmNsdWRlICJib29rZS5oIgogI2luY2x1ZGUgIjQ0eF90bGIuaCIKIAotI2RlZmluZSBPUF9SRkkgICAgICAxOQotCi0jZGVmaW5lIFhPUF9SRkkgICAgIDUwCi0jZGVmaW5lIFhPUF9NRk1TUiAgIDgzCi0jZGVmaW5lIFhPUF9XUlRFRSAgIDEzMQotI2RlZmluZSBYT1BfTVRNU1IgICAxNDYKLSNkZWZpbmUgWE9QX1dSVEVFSSAgMTYzCiAjZGVmaW5lIFhPUF9NRkRDUiAgIDMyMwogI2RlZmluZSBYT1BfTVREQ1IgICA0NTEKICNkZWZpbmUgWE9QX1RMQlNYICAgOTE0CiAjZGVmaW5lIFhPUF9JQ0NDSSAgIDk2NgogI2RlZmluZSBYT1BfVExCV0UgICA5NzgKIAotc3RhdGljIHZvaWQga3ZtcHBjX2VtdWxfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5zcnIwOwotCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7Ci19Ci0KIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpCiB7CkBAIC01OSw0OCArNDYsOSBAQAogCWludCB3czsKIAogCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7Ci0JY2FzZSBPUF9SRkk6Ci0JCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgewotCQljYXNlIFhPUF9SRkk6Ci0JCQlrdm1wcGNfZW11bF9yZmkodmNwdSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9SRklfRVhJVFMpOwotCQkJKmFkdmFuY2UgPSAwOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KIAljYXNlIDMxOgogCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKIAotCQljYXNlIFhPUF9NRk1TUjoKLQkJCXJ0ID0gZ2V0X3J0KGluc3QpOwotCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tc3I7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRk1TUl9FWElUUyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9NVE1TUjoKLQkJCXJzID0gZ2V0X3JzKGluc3QpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRNU1JfRVhJVFMpOwotCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWE9QX1dSVEVFOgotCQkJcnMgPSBnZXRfcnMoaW5zdCk7Ci0JCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCi0JCQkJCQkJIHwgKHZjcHUtPmFyY2guZ3ByW3JzXSAmIE1TUl9FRSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9XUlRFRUk6Ci0JCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCi0JCQkJCQkJIHwgKGluc3QgJiBNU1JfRUUpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBYT1BfTUZEQ1I6CiAJCQlkY3JuID0gZ2V0X2Rjcm4oaW5zdCk7CiAJCQlydCA9IGdldF9ydChpbnN0KTsKQEAgLTE4NiwxODYgKzEzNCw1MSBAQAogCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKIAl9CiAKKwlpZiAoZW11bGF0ZWQgPT0gRU1VTEFURV9GQUlMKQorCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX29wKHJ1biwgdmNwdSwgaW5zdCwgYWR2YW5jZSk7CisKIAlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKIHsKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKIAlzd2l0Y2ggKHNwcm4pIHsKLQljYXNlIFNQUk5fTU1VQ1I6Ci0JCXZjcHUtPmFyY2gubW11Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCWNhc2UgU1BSTl9QSUQ6CiAJCWt2bXBwY19zZXRfcGlkKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7IGJyZWFrOworCWNhc2UgU1BSTl9NTVVDUjoKKwkJdmNwdS0+YXJjaC5tbXVjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjA6CiAJCXZjcHUtPmFyY2guY2NyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6CiAJCXZjcHUtPmFyY2guY2NyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0VTUjoKLQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5kYmNyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmRiY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fVFNSOgotCQl2Y3B1LT5hcmNoLnRzciAmPSB+dmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fVENSOgotCQl2Y3B1LT5hcmNoLnRjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJa3ZtcHBjX2VtdWxhdGVfZGVjKHZjcHUpOwotCQlicmVhazsKLQotCS8qIE5vdGU6IFNQUkc0LTcgYXJlIHVzZXItcmVhZGFibGUuIFRoZXNlIHZhbHVlcyBhcmUKLQkgKiBsb2FkZWQgaW50byB0aGUgcmVhbCBTUFJHcyB3aGVuIHJlc3VtaW5nIHRoZQotCSAqIGd1ZXN0LiAqLwotCWNhc2UgU1BSTl9TUFJHNDoKLQkJdmNwdS0+YXJjaC5zcHJnNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1NQUkc1OgotCQl2Y3B1LT5hcmNoLnNwcmc1ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fU1BSRzY6Ci0JCXZjcHUtPmFyY2guc3ByZzYgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9TUFJHNzoKLQkJdmNwdS0+YXJjaC5zcHJnNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0KLQljYXNlIFNQUk5fSVZQUjoKLQkJdmNwdS0+YXJjaC5pdnByID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjA6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IyOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjM6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjU6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNzoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SODoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SOToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTA6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRklUXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEzOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE0OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE1OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKLQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcih2Y3B1LCBzcHJuLCBycyk7CiAJfQogCiAJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRTUFJfRVhJVFMpOwotCXJldHVybiBFTVVMQVRFX0RPTkU7CisJcmV0dXJuIGVtdWxhdGVkOwogfQogCiBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCiB7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCiAJc3dpdGNoIChzcHJuKSB7Ci0JLyogNDQwICovCisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5waWQ7IGJyZWFrOwogCWNhc2UgU1BSTl9NTVVDUjoKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tbXVjcjsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjA6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMDsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMTsgYnJlYWs7Ci0KLQkvKiBCb29rIEUgKi8KLQljYXNlIFNQUk5fUElEOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnBpZDsgYnJlYWs7Ci0JY2FzZSBTUFJOX0lWUFI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZwcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVhcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0VTUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5lc3I7IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMDsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IxOyBicmVhazsKLQotCWNhc2UgU1BSTl9JVk9SMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I0OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I2OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I3OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I4OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I5OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjExOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEyOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTM6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTU6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgotCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKIAl9CiAKIAlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRlNQUl9FWElUUyk7Ci0JcmV0dXJuIEVNVUxBVEVfRE9ORTsKKwlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKaW5kZXggOWEzNGI4ZS4uNGExNmY0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKQEAgLTIwOCwyMCArMjA4LDM4IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCitncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGd2YV90IGVhZGRyKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOworCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07CisJdW5zaWduZWQgaW50IHBnbWFzayA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpIC0gMTsKKworCXJldHVybiBnZXRfdGxiX3JhZGRyKGd0bGJlKSB8IChlYWRkciAmIHBnbWFzayk7Cit9CisKK2ludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUyk7CiAKIAlyZXR1cm4ga3ZtcHBjXzQ0eF90bGJfaW5kZXgodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGlkLCBhcyk7CiB9CiAKLWludCBrdm1wcGNfNDR4X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK2ludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CiAKIAlyZXR1cm4ga3ZtcHBjXzQ0eF90bGJfaW5kZXgodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGlkLCBhcyk7CiB9CiAKK3ZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19tbXVfZHRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwogc3RhdGljIHZvaWQga3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0bGJfaW5kZXgpCiB7CkBAIC0yNDgsNyArMjY2LDcgQEAKIAlLVk1UUkFDRV8xRChTVExCX0lOVkFMLCAmdmNwdV80NHgtPnZjcHUsIHN0bGJfaW5kZXgsIGhhbmRsZXIpOwogfQogCi12b2lkIGt2bXBwY19jb3JlX2Rlc3Ryb3lfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3ZvaWQga3ZtcHBjX21tdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKIAlpbnQgaTsKQEAgLTI2OSwxNSArMjg3LDE5IEBACiAgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGd1ZXN0IFRMQiBlbnRyeSBpcyBzYWZlIHRvIGluc2VydCBpbnRvCiAgKiB0aGUgc2hhZG93IFRMQi4KICAqLwotdm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmFkZHIsIGdwYV90IGdwYWRkciwgdTY0IGFzaWQsCi0gICAgICAgICAgICAgICAgICAgIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgpCit2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3RsYl9pbmRleCkKIHsKIAlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHN0bGJlOwogCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOworCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07CiAJc3RydWN0IGt2bXBwY180NHhfc2hhZG93X3JlZiAqcmVmOwogCXN0cnVjdCBwYWdlICpuZXdfcGFnZTsKIAlocGFfdCBocGFkZHI7CiAJZ2ZuX3QgZ2ZuOworCXUzMiBhc2lkID0gZ3RsYmUtPnRpZDsKKwl1MzIgZmxhZ3MgPSBndGxiZS0+d29yZDI7CisJdTMyIG1heF9ieXRlcyA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpOwogCXVuc2lnbmVkIGludCB2aWN0aW07CiAKIAkvKiBTZWxlY3QgVExCIGVudHJ5IHRvIGNsb2JiZXIuIEluZGlyZWN0bHkgZ3VhcmQgYWdhaW5zdCByYWNlcyB3aXRoIHRoZSBUTEIKQEAgLTQ0OCwxMCArNDcwLDggQEAKIAl9CiAKIAlpZiAodGxiZV9pc19ob3N0X3NhZmUodmNwdSwgdGxiZSkpIHsKLQkJdTY0IGFzaWQ7CiAJCWd2YV90IGVhZGRyOwogCQlncGFfdCBncGFkZHI7Ci0JCXUzMiBmbGFnczsKIAkJdTMyIGJ5dGVzOwogCiAJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcih0bGJlKTsKQEAgLTQ2MiwxMCArNDgyLDcgQEAKIAkJZWFkZHIgJj0gfihieXRlcyAtIDEpOwogCQlncGFkZHIgJj0gfihieXRlcyAtIDEpOwogCi0JCWFzaWQgPSAodGxiZS0+d29yZDAgJiBQUEM0NHhfVExCX1RTKSB8IHRsYmUtPnRpZDsKLQkJZmxhZ3MgPSB0bGJlLT53b3JkMiAmIDB4ZmZmZjsKLQotCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBhc2lkLCBmbGFncywgYnl0ZXMsIGd0bGJfaW5kZXgpOworCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiX2luZGV4KTsKIAl9CiAKIAlLVk1UUkFDRV81RChHVExCX1dSSVRFLCB2Y3B1LCBndGxiX2luZGV4LCB0bGJlLT50aWQsIHRsYmUtPndvcmQwLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmggYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaAppbmRleCA3NzIxOTFmLi5hOWZmODBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaApAQCAtMjUsOCArMjUsNiBAQAogCiBleHRlcm4gaW50IGt2bXBwY180NHhfdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwaWQsIHVuc2lnbmVkIGludCBhcyk7Ci1leHRlcm4gaW50IGt2bXBwY180NHhfZHRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKLWV4dGVybiBpbnQga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOwogCiBleHRlcm4gaW50IGt2bXBwY180NHhfZW11bF90bGJzeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHJ0LCB1OCByYSwgdTggcmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCByYyk7CkBAIC04NSwxMSArODMsNCBAQAogCXJldHVybiAodmNwdS0+YXJjaC5tbXVjciA+PiAxNikgJiAweDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZ3BhX3QgdGxiX3hsYXRlKHN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKnRsYmUsIGd2YV90IGVhZGRyKQotewotCXVuc2lnbmVkIGludCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKHRsYmUpIC0gMTsKLQotCXJldHVybiBnZXRfdGxiX3JhZGRyKHRsYmUpIHwgKGVhZGRyICYgcGdtYXNrKTsKLX0KLQogI2VuZGlmIC8qIF9fS1ZNX1BPV0VSUENfVExCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCmluZGV4IDZkYmRjNDguLjVhMTUyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTIsNiArMiw5IEBACiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJLS0taGVscC0tLQpAQCAtNDMsNiArNDYsMTkgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEtWTV9FNTAwCisJYm9vbCAiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMCBwcm9jZXNzb3JzIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEU1MDAKKwlzZWxlY3QgS1ZNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgRTUwMCBndWVzdCBrZXJuZWxzIGluIHZpcnR1YWwgbWFjaGluZXMgb24KKwkgIEU1MDAgaG9zdCBwcm9jZXNzb3JzLgorCisJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoCisJICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEtWTV9UUkFDRQogCWJvb2wgIktWTSB0cmFjZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gS1ZNICYmIE1BUktFUlMgJiYgU1lTRlMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCmluZGV4IGRmN2JhNTkuLjRiMmRmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQpAQCAtMTYsOCArMTYsMTggQEAKIAoga3ZtLTQ0MC1vYmpzIDo9IFwKIAlib29rZS5vIFwKKwlib29rZV9lbXVsYXRlLm8gXAogCWJvb2tlX2ludGVycnVwdHMubyBcCiAJNDR4Lm8gXAogCTQ0eF90bGIubyBcCiAJNDR4X2VtdWxhdGUubwogb2JqLSQoQ09ORklHX0tWTV80NDApICs9IGt2bS00NDAubworCitrdm0tZTUwMC1vYmpzIDo9IFwKKwlib29rZS5vIFwKKwlib29rZV9lbXVsYXRlLm8gXAorCWJvb2tlX2ludGVycnVwdHMubyBcCisJZTUwMC5vIFwKKwllNTAwX3RsYi5vIFwKKwllNTAwX2VtdWxhdGUubworb2JqLSQoQ09ORklHX0tWTV9FNTAwKSArPSBrdm0tZTUwMC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKaW5kZXggMzU0ODVkZC4uNjQyZTQyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwpAQCAtMzAsMTAgKzMwLDggQEAKICNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV80NHguaD4KIAogI2luY2x1ZGUgImJvb2tlLmgiCi0jaW5jbHVkZSAiNDR4X3RsYi5oIgogCiB1bnNpZ25lZCBsb25nIGt2bXBwY19ib29rZV9oYW5kbGVyczsKIApAQCAtMTIwLDYgKzExOCw5IEBACiAJY2FzZSBCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRToKIAljYXNlIEJPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFOgogCWNhc2UgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMOgorCWNhc2UgQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTDoKKwljYXNlIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEE6CisJY2FzZSBCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fQUxJR05NRU5UOgogCQlhbGxvd2VkID0gMTsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCXVuc2lnbmVkIGludCBwcmlvcml0eTsKIAogCXByaW9yaXR5ID0gX19mZnMoKnBlbmRpbmcpOwotCXdoaWxlIChwcmlvcml0eSA8PSBCT09LRV9NQVhfSU5URVJSVVBUKSB7CisJd2hpbGUgKHByaW9yaXR5IDw9IEJPT0tFX0lSUVBSSU9fTUFYKSB7CiAJCWlmIChrdm1wcGNfYm9va2VfaXJxcHJpb19kZWxpdmVyKHZjcHUsIHByaW9yaXR5KSkKIAkJCWJyZWFrOwogCkBAIC0yNjMsNiArMjY0LDIxIEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUw6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUwpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKworCWNhc2UgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBOgorCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKKwljYXNlIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQ6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0U6CiAJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKIAkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKQEAgLTI4NCwyOSArMzAwLDI3IEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCi0JLyogWFhYIG1vdmUgdG8gYSA0NDAtc3BlY2lmaWMgZmlsZS4gKi8KIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1M6IHsKLQkJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7Ci0JCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlOwogCQl1bnNpZ25lZCBsb25nIGVhZGRyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQlpbnQgZ3RsYl9pbmRleDsKKwkJZ3BhX3QgZ3BhZGRyOwogCQlnZm5fdCBnZm47CiAKIAkJLyogQ2hlY2sgdGhlIGd1ZXN0IFRMQi4gKi8KLQkJZ3RsYl9pbmRleCA9IGt2bXBwY180NHhfZHRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CisJCWd0bGJfaW5kZXggPSBrdm1wcGNfbW11X2R0bGJfaW5kZXgodmNwdSwgZWFkZHIpOwogCQlpZiAoZ3RsYl9pbmRleCA8IDApIHsKIAkJCS8qIFRoZSBndWVzdCBkaWRuJ3QgaGF2ZSBhIG1hcHBpbmcgZm9yIGl0LiAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19EVExCX01JU1MpOwogCQkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKKwkJCWt2bXBwY19tbXVfZHRsYl9taXNzKHZjcHUpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1JFQUxfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQkJYnJlYWs7CiAJCX0KIAotCQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwotCQl2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkID0gdGxiX3hsYXRlKGd0bGJlLCBlYWRkcik7Ci0JCWdmbiA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQgPj4gUEFHRV9TSElGVDsKKwkJZ3BhZGRyID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBndGxiX2luZGV4LCBlYWRkcik7CisJCWdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOwogCiAJCWlmIChrdm1faXNfdmlzaWJsZV9nZm4odmNwdS0+a3ZtLCBnZm4pKSB7CiAJCQkvKiBUaGUgZ3Vlc3QgVExCIGhhZCBhIG1hcHBpbmcsIGJ1dCB0aGUgc2hhZG93IFRMQgpAQCAtMzE1LDEzICszMjksMTMgQEAKIAkJCSAqIGIpIHRoZSBndWVzdCB1c2VkIGEgbGFyZ2UgbWFwcGluZyB3aGljaCB3ZSdyZSBmYWtpbmcKIAkJCSAqIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gc2F0aXNmeSB0aGUgZmF1bHQgd2l0aG91dAogCQkJICogaW52b2tpbmcgdGhlIGd1ZXN0LiAqLwotCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQsIGd0bGJlLT50aWQsCi0JCQkgICAgICAgICAgICAgICBndGxiZS0+d29yZDIsIGdldF90bGJfYnl0ZXMoZ3RsYmUpLCBndGxiX2luZGV4KTsKKwkJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJfaW5kZXgpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1ZJUlRfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQl9IGVsc2UgewogCQkJLyogR3Vlc3QgaGFzIG1hcHBlZCBhbmQgYWNjZXNzZWQgYSBwYWdlIHdoaWNoIGlzIG5vdAogCQkJICogYWN0dWFsbHkgUkFNLiAqLworCQkJdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCA9IGdwYWRkcjsKIAkJCXIgPSBrdm1wcGNfZW11bGF0ZV9tbWlvKHJ1biwgdmNwdSk7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIE1NSU9fRVhJVFMpOwogCQl9CkBAIC0zMjksMTAgKzM0Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIFhYWCBtb3ZlIHRvIGEgNDQwLXNwZWNpZmljIGZpbGUuICovCiAJY2FzZSBCT09LRV9JTlRFUlJVUFRfSVRMQl9NSVNTOiB7Ci0JCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOwotCQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAkJdW5zaWduZWQgbG9uZyBlYWRkciA9IHZjcHUtPmFyY2gucGM7CiAJCWdwYV90IGdwYWRkcjsKIAkJZ2ZuX3QgZ2ZuOwpAQCAtMzQxLDE4ICszNTIsMTggQEAKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAogCQkvKiBDaGVjayB0aGUgZ3Vlc3QgVExCLiAqLwotCQlndGxiX2luZGV4ID0ga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHZjcHUsIGVhZGRyKTsKKwkJZ3RsYl9pbmRleCA9IGt2bXBwY19tbXVfaXRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CiAJCWlmIChndGxiX2luZGV4IDwgMCkgewogCQkJLyogVGhlIGd1ZXN0IGRpZG4ndCBoYXZlIGEgbWFwcGluZyBmb3IgaXQuICovCiAJCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyk7CisJCQlrdm1wcGNfbW11X2l0bGJfbWlzcyh2Y3B1KTsKIAkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgSVRMQl9SRUFMX01JU1NfRVhJVFMpOwogCQkJYnJlYWs7CiAJCX0KIAogCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIElUTEJfVklSVF9NSVNTX0VYSVRTKTsKIAotCQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwotCQlncGFkZHIgPSB0bGJfeGxhdGUoZ3RsYmUsIGVhZGRyKTsKKwkJZ3BhZGRyID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBndGxiX2luZGV4LCBlYWRkcik7CiAJCWdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOwogCiAJCWlmIChrdm1faXNfdmlzaWJsZV9nZm4odmNwdS0+a3ZtLCBnZm4pKSB7CkBAIC0zNjIsOCArMzczLDcgQEAKIAkJCSAqIGIpIHRoZSBndWVzdCB1c2VkIGEgbGFyZ2UgbWFwcGluZyB3aGljaCB3ZSdyZSBmYWtpbmcKIAkJCSAqIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gc2F0aXNmeSB0aGUgZmF1bHQgd2l0aG91dAogCQkJICogaW52b2tpbmcgdGhlIGd1ZXN0LiAqLwotCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYmUtPnRpZCwKLQkJCSAgICAgICAgICAgICAgIGd0bGJlLT53b3JkMiwgZ2V0X3RsYl9ieXRlcyhndGxiZSksIGd0bGJfaW5kZXgpOworCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYl9pbmRleCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBHdWVzdCBtYXBwZWQgYW5kIGxlYXBlZCBhdCBub24tUkFNISAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaAppbmRleCBjZjdjOTRjLi5kNTliY2NhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KICNpbmNsdWRlICJ0aW1pbmcuaCIKIAogLyogaW50ZXJydXB0IHByaW9ydGl0eSBvcmRlcmluZyAqLwpAQCAtMzAsMTcgKzMxLDI0IEBACiAjZGVmaW5lIEJPT0tFX0lSUVBSSU9fQUxJR05NRU5UIDIKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19QUk9HUkFNIDMKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMIDQKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19TWVNDQUxMIDUKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMIDYKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19EVExCX01JU1MgNwotI2RlZmluZSBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyA4Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDSyA5Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVCVUcgMTAKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19DUklUSUNBTCAxMQotI2RlZmluZSBCT09LRV9JUlFQUklPX1dBVENIRE9HIDEyCi0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fRVhURVJOQUwgMTMKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19GSVQgMTQKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiAxNQorI2RlZmluZSBCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMIDUKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQSA2CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EIDcKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TWVNDQUxMIDgKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMIDkKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19EVExCX01JU1MgMTAKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19JVExCX01JU1MgMTEKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLIDEyCisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVCVUcgMTMKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19DUklUSUNBTCAxNAorI2RlZmluZSBCT09LRV9JUlFQUklPX1dBVENIRE9HIDE1CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fRVhURVJOQUwgMTYKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19GSVQgMTcKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiAxOAorI2RlZmluZSBCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1IgMTkKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQVggMTkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcga3ZtcHBjX2Jvb2tlX2hhbmRsZXJzOwogCiAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yICJmdWxsIiBNU1Igd3JpdGVzLiBObyBuZWVkIHRvIGNhbGwgdGhpcyBpZiBvbmx5IEVFIGlzCiAgKiBjaGFuZ2luZy4gKi8KQEAgLTU3LDQgKzY1LDkgQEAKIAl9OwogfQogCitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpOworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCk7CitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKTsKKwogI2VuZGlmIC8qIF9fS1ZNX0JPT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2VtdWxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJjNjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqCisgKiBBdXRob3JzOiBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2Rpc2Fzc2VtYmxlLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorCisjZGVmaW5lIE9QXzE5X1hPUF9SRkkgICAgIDUwCisKKyNkZWZpbmUgT1BfMzFfWE9QX01GTVNSICAgODMKKyNkZWZpbmUgT1BfMzFfWE9QX1dSVEVFICAgMTMxCisjZGVmaW5lIE9QXzMxX1hPUF9NVE1TUiAgIDE0NgorI2RlZmluZSBPUF8zMV9YT1BfV1JURUVJICAxNjMKKworc3RhdGljIHZvaWQga3ZtcHBjX2VtdWxfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5zcnIwOworCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7Cit9CisKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9vcChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJaW50IHJzOworCWludCBydDsKKworCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAxOToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisJCWNhc2UgT1BfMTlfWE9QX1JGSToKKwkJCWt2bXBwY19lbXVsX3JmaSh2Y3B1KTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1JGSV9FWElUUyk7CisJCQkqYWR2YW5jZSA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMzE6CisJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgeworCisJCWNhc2UgT1BfMzFfWE9QX01GTVNSOgorCQkJcnQgPSBnZXRfcnQoaW5zdCk7CisJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLm1zcjsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01GTVNSX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX01UTVNSOgorCQkJcnMgPSBnZXRfcnMoaW5zdCk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NVE1TUl9FWElUUyk7CisJCQlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF8zMV9YT1BfV1JURUU6CisJCQlycyA9IGdldF9ycyhpbnN0KTsKKwkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKKwkJCQkJCQkgfCAodmNwdS0+YXJjaC5ncHJbcnNdICYgTVNSX0VFKTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1dSVEVFX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX1dSVEVFSToKKwkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKKwkJCQkJCQkgfCAoaW5zdCAmIE1TUl9FRSk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fREVBUjoKKwkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fRVNSOgorCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IwOgorCQl2Y3B1LT5hcmNoLmRiY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjE6CisJCXZjcHUtPmFyY2guZGJjcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9EQlNSOgorCQl2Y3B1LT5hcmNoLmRic3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1RTUjoKKwkJdmNwdS0+YXJjaC50c3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1RDUjoKKwkJdmNwdS0+YXJjaC50Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWt2bXBwY19lbXVsYXRlX2RlYyh2Y3B1KTsKKwkJYnJlYWs7CisKKwkvKiBOb3RlOiBTUFJHNC03IGFyZSB1c2VyLXJlYWRhYmxlLiBUaGVzZSB2YWx1ZXMgYXJlCisJICogbG9hZGVkIGludG8gdGhlIHJlYWwgU1BSR3Mgd2hlbiByZXN1bWluZyB0aGUKKwkgKiBndWVzdC4gKi8KKwljYXNlIFNQUk5fU1BSRzQ6CisJCXZjcHUtPmFyY2guc3ByZzQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9TUFJHNToKKwkJdmNwdS0+YXJjaC5zcHJnNSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1NQUkc2OgorCQl2Y3B1LT5hcmNoLnNwcmc2ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fU1BSRzc6CisJCXZjcHUtPmFyY2guc3ByZzcgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCisJY2FzZSBTUFJOX0lWUFI6CisJCXZjcHUtPmFyY2guaXZwciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IwOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMjoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjQ6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I1OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjY6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjc6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjg6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjk6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEwOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTE6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTI6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMzoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fSVZQUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdnByOyBicmVhazsKKwljYXNlIFNQUk5fREVBUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kZWFyOyBicmVhazsKKwljYXNlIFNQUk5fRVNSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmVzcjsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IwOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJjcjE7IGJyZWFrOworCWNhc2UgU1BSTl9EQlNSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRic3I7IGJyZWFrOworCisJY2FzZSBTUFJOX0lWT1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I1OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjY6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjg6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjk6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKaW5kZXggMDg0ZWJjZC4uZDBjNmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKQEAgLTg2LDYgKzg2LDkgQEAKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9ERUJVRworS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX1NQRV9VTkFWQUlMCitLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX0RBVEEKK0tWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQKIAogX0dMT0JBTChrdm1wcGNfaGFuZGxlcl9sZW4pCiAJLmxvbmcga3ZtcHBjX2hhbmRsZXJfMSAtIGt2bXBwY19oYW5kbGVyXzAKQEAgLTM0Nyw3ICszNTAsOSBAQAogCWx3eglyMywgVkNQVV9TSEFET1dfUElEKHI0KQogCW10c3ByCVNQUk5fUElELCByMwogCisjaWZkZWYgQ09ORklHXzQ0eAogCWljY2NpCTAsIDAgLyogWFhYIGhhY2sgKi8KKyNlbmRpZgogCiAJLyogTG9hZCBzb21lIGd1ZXN0IHZvbGF0aWxlcy4gKi8KIAlsd3oJcjAsIFZDUFVfR1BSKHIwKShyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNjdmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBZdSBMaXUsIDx5dS5saXVAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXJjaC9wb3dlcnBjL2t2bS80NHguYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKK3ZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwlrdm1wcGNfZTUwMF90bGJfbG9hZCh2Y3B1LCBjcHUpOworfQorCit2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfZTUwMF90bGJfcHV0KHZjcHUpOworfQorCitpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCh2b2lkKQoreworCWludCByOworCisJaWYgKHN0cmNtcChjdXJfY3B1X3NwZWMtPmNwdV9uYW1lLCAiZTUwMHYyIikgPT0gMCkKKwkJciA9IDA7CisJZWxzZQorCQlyID0gLUVOT1RTVVBQOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBrdm1wcGNfY29yZV92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCWt2bXBwY19lNTAwX3RsYl9zZXR1cCh2Y3B1X2U1MDApOworCisJLyogVXNlIHRoZSBzYW1lIGNvcmUgdmVydGlvbiBhcyBob3N0J3MgKi8KKwl2Y3B1LT5hcmNoLnB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKKworCXJldHVybiAwOworfQorCisvKiAnbGluZWFyX2FkZHJlc3MnIGlzIGFjdHVhbGx5IGFuIGVuY29kaW5nIG9mIEFTfFBJRHxFQUREUiAuICovCitpbnQga3ZtcHBjX2NvcmVfdmNwdV90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRyKQoreworCWludCBpbmRleDsKKwlndmFfdCBlYWRkcjsKKwl1OCBwaWQ7CisJdTggYXM7CisKKwllYWRkciA9IHRyLT5saW5lYXJfYWRkcmVzczsKKwlwaWQgPSAodHItPmxpbmVhcl9hZGRyZXNzID4+IDMyKSAmIDB4ZmY7CisJYXMgPSAodHItPmxpbmVhcl9hZGRyZXNzID4+IDQwKSAmIDB4MTsKKworCWluZGV4ID0ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgcGlkLCBhcyk7CisJaWYgKGluZGV4IDwgMCkgeworCQl0ci0+dmFsaWQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IGt2bXBwY19tbXVfeGxhdGUodmNwdSwgaW5kZXgsIGVhZGRyKTsKKwkvKiBYWFggd2hhdCBkb2VzICJ3cml0ZWFibGUiIGFuZCAidXNlcm1vZGUiIGV2ZW4gbWVhbj8gKi8KKwl0ci0+dmFsaWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IGVycjsKKworCXZjcHVfZTUwMCA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHVfZTUwMCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl2Y3B1ID0gJnZjcHVfZTUwMC0+dmNwdTsKKwllcnIgPSBrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV92Y3B1OworCisJZXJyID0ga3ZtcHBjX2U1MDBfdGxiX2luaXQodmNwdV9lNTAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVuaW5pdF92Y3B1OworCisJcmV0dXJuIHZjcHU7CisKK3VuaW5pdF92Y3B1OgorCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKK2ZyZWVfdmNwdToKKwlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfZTUwMCk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCisJa3ZtcHBjX2U1MDBfdGxiX3VuaW5pdCh2Y3B1X2U1MDApOworCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKKwlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfZTUwMCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfaW5pdCh2b2lkKQoreworCWludCByLCBpOworCXVuc2lnbmVkIGxvbmcgaXZvclszXTsKKwl1bnNpZ25lZCBsb25nIG1heF9pdm9yID0gMDsKKworCXIgPSBrdm1wcGNfYm9va2VfaW5pdCgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCS8qIGNvcHkgZXh0cmEgRTUwMCBleGNlcHRpb24gaGFuZGxlcnMgKi8KKwlpdm9yWzBdID0gbWZzcHIoU1BSTl9JVk9SMzIpOworCWl2b3JbMV0gPSBtZnNwcihTUFJOX0lWT1IzMyk7CisJaXZvclsyXSA9IG1mc3ByKFNQUk5fSVZPUjM0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpdm9yW2ldID4gbWF4X2l2b3IpCisJCQltYXhfaXZvciA9IGl2b3JbaV07CisKKwkJbWVtY3B5KCh2b2lkICopa3ZtcHBjX2Jvb2tlX2hhbmRsZXJzICsgaXZvcltpXSwKKwkJICAgICAgIGt2bXBwY19oYW5kbGVyc19zdGFydCArIChpICsgMTYpICoga3ZtcHBjX2hhbmRsZXJfbGVuLAorCQkgICAgICAga3ZtcHBjX2hhbmRsZXJfbGVuKTsKKwl9CisJZmx1c2hfaWNhY2hlX3JhbmdlKGt2bXBwY19ib29rZV9oYW5kbGVycywKKwkJCWt2bXBwY19ib29rZV9oYW5kbGVycyArIG1heF9pdm9yICsga3ZtcHBjX2hhbmRsZXJfbGVuKTsKKworCXJldHVybiBrdm1faW5pdChOVUxMLCBzaXplb2Yoc3RydWN0IGt2bXBwY192Y3B1X2U1MDApLCBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX2V4aXQodm9pZCkKK3sKKwlrdm1wcGNfYm9va2VfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChrdm1wcGNfZTUwMF9pbml0KTsKK21vZHVsZV9leGl0KGt2bXBwY19lNTAwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3NjA0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2luY2x1ZGUgImJvb2tlLmgiCisjaW5jbHVkZSAiZTUwMF90bGIuaCIKKworI2RlZmluZSBYT1BfVExCSVZBWCA3ODYKKyNkZWZpbmUgWE9QX1RMQlNYICAgOTE0CisjZGVmaW5lIFhPUF9UTEJSRSAgIDk0NgorI2RlZmluZSBYT1BfVExCV0UgICA5NzgKKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJaW50IHJhOworCWludCByYjsKKworCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAzMToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisKKwkJY2FzZSBYT1BfVExCUkU6CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxicmUodmNwdSk7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJXRToKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJ3ZSh2Y3B1KTsKKwkJCWJyZWFrOworCisJCWNhc2UgWE9QX1RMQlNYOgorCQkJcmIgPSBnZXRfcmIoaW5zdCk7CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxic3godmNwdSxyYik7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJJVkFYOgorCQkJcmEgPSBnZXRfcmEoaW5zdCk7CisJCQlyYiA9IGdldF9yYihpbnN0KTsKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHZjcHUsIHJhLCByYik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCWlmIChlbXVsYXRlZCA9PSBFTVVMQVRFX0ZBSUwpCisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3AocnVuLCB2Y3B1LCBpbnN0LCBhZHZhbmNlKTsKKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKworCXN3aXRjaCAoc3BybikgeworCWNhc2UgU1BSTl9QSUQ6CisJCXZjcHVfZTUwMC0+cGlkWzBdID0gdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0KKwkJCXZjcHUtPmFyY2gucGlkID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fUElEMToKKwkJdmNwdV9lNTAwLT5waWRbMV0gPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9QSUQyOgorCQl2Y3B1X2U1MDAtPnBpZFsyXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzA6CisJCXZjcHVfZTUwMC0+bWFzMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzE6CisJCXZjcHVfZTUwMC0+bWFzMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzI6CisJCXZjcHVfZTUwMC0+bWFzMiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzM6CisJCXZjcHVfZTUwMC0+bWFzMyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzQ6CisJCXZjcHVfZTUwMC0+bWFzNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzY6CisJCXZjcHVfZTUwMC0+bWFzNiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzc6CisJCXZjcHVfZTUwMC0+bWFzNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0wxQ1NSMToKKwkJdmNwdV9lNTAwLT5sMWNzcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9ISUQwOgorCQl2Y3B1X2U1MDAtPmhpZDAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9ISUQxOgorCQl2Y3B1X2U1MDAtPmhpZDEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCisJY2FzZSBTUFJOX01NVUNTUjA6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF9tdF9tbXVjc3IwKHZjcHVfZTUwMCwKKwkJCQl2Y3B1LT5hcmNoLmdwcltyc10pOworCQlicmVhazsKKworCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KKwljYXNlIFNQUk5fSVZPUjMyOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzM6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcih2Y3B1LCBzcHJuLCBycyk7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCitpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChzcHJuKSB7CisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5waWRbMF07IGJyZWFrOworCWNhc2UgU1BSTl9QSUQxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFsxXTsgYnJlYWs7CisJY2FzZSBTUFJOX1BJRDI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+cGlkWzJdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMwOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMxOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMyOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMzOyBicmVhazsKKwljYXNlIFNQUk5fTUFTNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM0OyBicmVhazsKKwljYXNlIFNQUk5fTUFTNjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM2OyBicmVhazsKKwljYXNlIFNQUk5fTUFTNzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM3OyBicmVhazsKKworCWNhc2UgU1BSTl9UTEIwQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjBDRkcpOworCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdOworCQlicmVhazsKKworCWNhc2UgU1BSTl9UTEIxQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjFDRkcpOworCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOworCQlicmVhazsKKworCWNhc2UgU1BSTl9MMUNTUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bDFjc3IxOyBicmVhazsKKwljYXNlIFNQUk5fSElEMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQwOyBicmVhazsKKwljYXNlIFNQUk5fSElEMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQxOyBicmVhazsKKworCWNhc2UgU1BSTl9NTVVDU1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSAwOyBicmVhazsKKworCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KKwljYXNlIFNQUk5fSVZPUjMyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzM6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbWZzcHIodmNwdSwgc3BybiwgcnQpOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzczZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKQEAgLTAsMCArMSw3NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgeXUubGl1QGZyZWVzY2FsZS5jb20KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBhcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lNTAwLmg+CisKKyNpbmNsdWRlICIuLi9tbS9tbXVfZGVjbC5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKKyNkZWZpbmUgdG9faHRsYjFfZXNlbChlc2VsKSAodGxiMV9lbnRyeV9udW0gLSAoZXNlbCkgLSAxKQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRsYjFfZW50cnlfbnVtOworCit2b2lkIGt2bXBwY19kdW1wX3RsYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXN0cnVjdCB0bGJlICp0bGJlOworCWludCBpLCB0bGJzZWw7CisKKwlwcmludGsoInwgJThzIHwgJThzIHwgJThzIHwgJThzIHwgJThzIHxcbiIsCisJCQkibnIiLCAibWFzMSIsICJtYXMyIiwgIm1hczMiLCAibWFzNyIpOworCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgeworCQlwcmludGsoIkd1ZXN0IFRMQiVkOlxuIiwgdGxic2VsKTsKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCQl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1baV07CisJCQlpZiAodGxiZS0+bWFzMSAmIE1BUzFfVkFMSUQpCisJCQkJcHJpbnRrKCIgR1slZF1bJTNkXSB8ICAlMDhYIHwgJTA4WCB8ICUwOFggfCAlMDhYIHxcbiIsCisJCQkJCXRsYnNlbCwgaSwgdGxiZS0+bWFzMSwgdGxiZS0+bWFzMiwKKwkJCQkJdGxiZS0+bWFzMywgdGxiZS0+bWFzNyk7CisJCX0KKwl9CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKSB7CisJCXByaW50aygiU2hhZG93IFRMQiVkOlxuIiwgdGxic2VsKTsKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+c2hhZG93X3RsYl9zaXplW3RsYnNlbF07IGkrKykgeworCQkJdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtpXTsKKwkJCWlmICh0bGJlLT5tYXMxICYgTUFTMV9WQUxJRCkKKwkJCQlwcmludGsoIiBTWyVkXVslM2RdIHwgICUwOFggfCAlMDhYIHwgJTA4WCB8ICUwOFggfFxuIiwKKwkJCQkJdGxic2VsLCBpLCB0bGJlLT5tYXMxLCB0bGJlLT5tYXMyLAorCQkJCQl0bGJlLT5tYXMzLCB0bGJlLT5tYXM3KTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGxiMF9nZXRfbmV4dF92aWN0aW0oCisJCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJdW5zaWduZWQgaW50IHZpY3RpbTsKKworCXZpY3RpbSA9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdKys7CisJaWYgKHVubGlrZWx5KHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdID49IEtWTV9FNTAwX1RMQjBfV0FZX05VTSkpCisJCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdID0gMDsKKworCXJldHVybiB2aWN0aW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRsYjFfbWF4X3NoYWRvd19zaXplKHZvaWQpCit7CisJcmV0dXJuIHRsYjFfZW50cnlfbnVtIC0gdGxiY2FtX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIGludCB0bGJlX2lzX3dyaXRhYmxlKHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiB0bGJlLT5tYXMzICYgKE1BUzNfU1d8TUFTM19VVyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGU1MDBfc2hhZG93X21hczNfYXR0cmliKHUzMiBtYXMzLCBpbnQgdXNlcm1vZGUpCit7CisJLyogTWFzayBvZmYgcmVzZXJ2ZWQgYml0cy4gKi8KKwltYXMzICY9IE1BUzNfQVRUUklCX01BU0s7CisKKwlpZiAoIXVzZXJtb2RlKSB7CisJCS8qIEd1ZXN0IGlzIGluIHN1cGVydmlzb3IgbW9kZSwKKwkJICogc28gd2UgbmVlZCB0byB0cmFuc2xhdGUgZ3Vlc3QKKwkJICogc3VwZXJ2aXNvciBwZXJtaXNzaW9ucyBpbnRvIHVzZXIgcGVybWlzc2lvbnMuICovCisJCW1hczMgJj0gfkU1MDBfVExCX1VTRVJfUEVSTV9NQVNLOworCQltYXMzIHw9IChtYXMzICYgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLKSA8PCAxOworCX0KKworCXJldHVybiBtYXMzIHwgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYih1MzIgbWFzMiwgaW50IHVzZXJtb2RlKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gKG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLKSB8IE1BUzJfTTsKKyNlbHNlCisJcmV0dXJuIG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLOworI2VuZGlmCit9CisKKy8qCisgKiB3cml0aW5nIHNoYWRvdyB0bGIgZW50cnkgdG8gaG9zdCBUTEIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfaG9zdF90bGJlKHN0cnVjdCB0bGJlICpzdGxiZSkKK3sKKwltdHNwcihTUFJOX01BUzEsIHN0bGJlLT5tYXMxKTsKKwltdHNwcihTUFJOX01BUzIsIHN0bGJlLT5tYXMyKTsKKwltdHNwcihTUFJOX01BUzMsIHN0bGJlLT5tYXMzKTsKKwltdHNwcihTUFJOX01BUzcsIHN0bGJlLT5tYXM3KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRsYndlXG4iIDogOiApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaG9zdF90bGJlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKHRsYnNlbCA9PSAwKSB7CisJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCByZWdpc3RlciBtYXMwOworCisJCW1hczAgPSBtZnNwcihTUFJOX01BUzApOworCisJCW10c3ByKFNQUk5fTUFTMCwgTUFTMF9UTEJTRUwoMSkgfCBNQVMwX0VTRUwodG9faHRsYjFfZXNlbChlc2VsKSkpOworCQlfX3dyaXRlX2hvc3RfdGxiZShzdGxiZSk7CisKKwkJbXRzcHIoU1BSTl9NQVMwLCBtYXMwKTsKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgaTsKKwl1bnNpZ25lZCByZWdpc3RlciBtYXMwOworCisJLyogTG9hZCBhbGwgdmFsaWQgVExCMSBlbnRyaWVzIHRvIHJlZHVjZSBndWVzdCB0bGIgbWlzcyBmYXVsdCAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbWFzMCA9IG1mc3ByKFNQUk5fTUFTMCk7CisJZm9yIChpID0gMDsgaSA8IHRsYjFfbWF4X3NoYWRvd19zaXplKCk7IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdW2ldOworCisJCWlmIChnZXRfdGxiX3Yoc3RsYmUpKSB7CisJCQltdHNwcihTUFJOX01BUzAsIE1BUzBfVExCU0VMKDEpCisJCQkJCXwgTUFTMF9FU0VMKHRvX2h0bGIxX2VzZWwoaSkpKTsKKwkJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKwkJfQorCX0KKwltdHNwcihTUFJOX01BUzAsIG1hczApOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKwordm9pZCBrdm1wcGNfZTUwMF90bGJfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlfdGxiaWxfYWxsKCk7Cit9CisKKy8qIFNlYXJjaCB0aGUgZ3Vlc3QgVExCIGZvciBhIG1hdGNoaW5nIGVudHJ5LiAqLworc3RhdGljIGludCBrdm1wcGNfZTUwMF90bGJfaW5kZXgoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJZ3ZhX3QgZWFkZHIsIGludCB0bGJzZWwsIHVuc2lnbmVkIGludCBwaWQsIGludCBhcykKK3sKKwlpbnQgaTsKKworCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCXN0cnVjdCB0bGJlICp0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1baV07CisJCXVuc2lnbmVkIGludCB0aWQ7CisKKwkJaWYgKGVhZGRyIDwgZ2V0X3RsYl9lYWRkcih0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlYWRkciA+IGdldF90bGJfZW5kKHRsYmUpKQorCQkJY29udGludWU7CisKKwkJdGlkID0gZ2V0X3RsYl90aWQodGxiZSk7CisJCWlmICh0aWQgJiYgKHRpZCAhPSBwaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfdGxiX3YodGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X3RsYl90cyh0bGJlKSAhPSBhcyAmJiBhcyAhPSAtMSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBpOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2Uoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCXN0cnVjdCBwYWdlICpwYWdlID0gdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXTsKKworCWlmIChwYWdlKSB7CisJCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzW3RsYnNlbF1bZXNlbF0gPSBOVUxMOworCisJCWlmIChnZXRfdGxiX3Yoc3RsYmUpKSB7CisJCQlpZiAodGxiZV9pc193cml0YWJsZShzdGxiZSkpCisJCQkJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCWVsc2UKKwkJCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9zdGxiZV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwlzdGxiZS0+bWFzMSA9IDA7CisJS1ZNVFJBQ0VfNUQoU1RMQl9JTlZBTCwgJnZjcHVfZTUwMC0+dmNwdSwgaW5kZXhfb2YodGxic2VsLCBlc2VsKSwKKwkJCXN0bGJlLT5tYXMxLCBzdGxiZS0+bWFzMiwgc3RsYmUtPm1hczMsIHN0bGJlLT5tYXM3LAorCQkJaGFuZGxlcik7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX3RsYjFfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlndmFfdCBlYWRkciwgZ3ZhX3QgZWVuZCwgdTMyIHRpZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGlkID0gdGlkICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdW2ldOworCQl1bnNpZ25lZCBpbnQgdGlkOworCisJCWlmICghZ2V0X3RsYl92KHN0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlZW5kIDwgZ2V0X3RsYl9lYWRkcihzdGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZWFkZHIgPiBnZXRfdGxiX2VuZChzdGxiZSkpCisJCQljb250aW51ZTsKKworCQl0aWQgPSBnZXRfdGxiX3RpZChzdGxiZSk7CisJCWlmICh0aWQgJiYgKHRpZCAhPSBwaWQpKQorCQkJY29udGludWU7CisKKwkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIDEsIGkpOworCQl3cml0ZV9ob3N0X3RsYmUodmNwdV9lNTAwLCAxLCBpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfZTUwMF9kZWxpdmVyX3RsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJdW5zaWduZWQgaW50IGVhZGRyLCBpbnQgYXMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJdW5zaWduZWQgaW50IHZpY3RpbSwgcGlkc2VsLCB0c2l6ZWQ7CisJaW50IHRsYnNlbDsKKworCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwl0bGJzZWwgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDI4KSAmIDB4MTsKKwl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CisJcGlkc2VsID0gKHZjcHVfZTUwMC0+bWFzNCA+PiAxNikgJiAweGY7CisJdHNpemVkID0gKHZjcHVfZTUwMC0+bWFzNCA+PiA4KSAmIDB4ZjsKKworCXZjcHVfZTUwMC0+bWFzMCA9IE1BUzBfVExCU0VMKHRsYnNlbCkgfCBNQVMwX0VTRUwodmljdGltKQorCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJdmNwdV9lNTAwLT5tYXMxID0gTUFTMV9WQUxJRCB8IChhcyA/IE1BUzFfVFMgOiAwKQorCQl8IE1BUzFfVElEKHZjcHVfZTUwMC0+cGlkW3BpZHNlbF0pCisJCXwgTUFTMV9UU0laRSh0c2l6ZWQpOworCXZjcHVfZTUwMC0+bWFzMiA9IChlYWRkciAmIE1BUzJfRVBOKQorCQl8ICh2Y3B1X2U1MDAtPm1hczQgJiBNQVMyX0FUVFJJQl9NQVNLKTsKKwl2Y3B1X2U1MDAtPm1hczMgJj0gTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMzsKKwl2Y3B1X2U1MDAtPm1hczYgPSAodmNwdV9lNTAwLT5tYXM2ICYgTUFTNl9TUElEMSkKKwkJfCAoZ2V0X2N1cl9waWQodmNwdSkgPDwgMTYpCisJCXwgKGFzID8gTUFTNl9TQVMgOiAwKTsKKwl2Y3B1X2U1MDAtPm1hczcgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCXU2NCBndmFkZHIsIGdmbl90IGdmbiwgc3RydWN0IHRsYmUgKmd0bGJlLCBpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisJc3RydWN0IHRsYmUgKnN0bGJlOworCWhwYV90IGhwYWRkcjsKKworCXN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCisJLyogR2V0IHJlZmVyZW5jZSB0byBuZXcgcGFnZS4gKi8KKwluZXdfcGFnZSA9IGdmbl90b19wYWdlKHZjcHVfZTUwMC0+dmNwdS5rdm0sIGdmbik7CisJaWYgKGlzX2Vycm9yX3BhZ2UobmV3X3BhZ2UpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbHghXG4iLCBnZm4pOworCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKG5ld19wYWdlKTsKKwkJcmV0dXJuOworCX0KKwlocGFkZHIgPSBwYWdlX3RvX3BoeXMobmV3X3BhZ2UpOworCisJLyogRHJvcCByZWZlcmVuY2UgdG8gb2xkIHBhZ2UuICovCisJa3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2UodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCisJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXSA9IG5ld19wYWdlOworCisJLyogRm9yY2UgVFM9MSBJUFJPVD0wIFRTSVpFPTRLQiBmb3IgYWxsIGd1ZXN0IG1hcHBpbmdzLiAqLworCXN0bGJlLT5tYXMxID0gTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspCisJCXwgTUFTMV9USUQoZ2V0X3RsYl90aWQoZ3RsYmUpKSB8IE1BUzFfVFMgfCBNQVMxX1ZBTElEOworCXN0bGJlLT5tYXMyID0gKGd2YWRkciAmIE1BUzJfRVBOKQorCQl8IGU1MDBfc2hhZG93X21hczJfYXR0cmliKGd0bGJlLT5tYXMyLAorCQkJCXZjcHVfZTUwMC0+dmNwdS5hcmNoLm1zciAmIE1TUl9QUik7CisJc3RsYmUtPm1hczMgPSAoaHBhZGRyICYgTUFTM19SUE4pCisJCXwgZTUwMF9zaGFkb3dfbWFzM19hdHRyaWIoZ3RsYmUtPm1hczMsCisJCQkJdmNwdV9lNTAwLT52Y3B1LmFyY2gubXNyICYgTVNSX1BSKTsKKwlzdGxiZS0+bWFzNyA9IChocGFkZHIgPj4gMzIpICYgTUFTN19SUE47CisKKwlLVk1UUkFDRV81RChTVExCX1dSSVRFLCAmdmNwdV9lNTAwLT52Y3B1LCBpbmRleF9vZih0bGJzZWwsIGVzZWwpLAorCQkJc3RsYmUtPm1hczEsIHN0bGJlLT5tYXMyLCBzdGxiZS0+bWFzMywgc3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKK30KKworLyogWFhYIG9ubHkgbWFwIHRoZSBvbmUtb25lIGNhc2UsIGZvciBub3cgdXNlIFRMQjAgKi8KK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfc3RsYmVfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpndGxiZTsKKworCWd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHZjcHVfZTUwMCwgZ2V0X3RsYl9lYWRkcihndGxiZSksCisJCQlnZXRfdGxiX3JhZGRyKGd0bGJlKSA+PiBQQUdFX1NISUZULAorCQkJZ3RsYmUsIHRsYnNlbCwgZXNlbCk7CisKKwlyZXR1cm4gZXNlbDsKK30KKworLyogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBndWVzdCBUTEIgZW50cnkgaXMgc2FmZSB0byBpbnNlcnQgaW50bworICogdGhlIHNoYWRvdyBUTEIuICovCisvKiBYWFggZm9yIGJvdGggb25lLW9uZSBhbmQgb25lLXRvLW1hbnkgLCBmb3Igbm93IHVzZSBUTEIxICovCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX3RsYjFfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCXU2NCBndmFkZHIsIGdmbl90IGdmbiwgc3RydWN0IHRsYmUgKmd0bGJlKQoreworCXVuc2lnbmVkIGludCB2aWN0aW07CisKKwl2aWN0aW0gPSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSsrOworCisJaWYgKHVubGlrZWx5KHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzFdID49IHRsYjFfbWF4X3NoYWRvd19zaXplKCkpKQorCQl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSA9IDA7CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHZjcHVfZTUwMCwgZ3ZhZGRyLCBnZm4sIGd0bGJlLCAxLCB2aWN0aW0pOworCisJcmV0dXJuIHZpY3RpbTsKK30KKworLyogSW52YWxpZGF0ZSBhbGwgZ3Vlc3Qga2VybmVsIG1hcHBpbmdzIHdoZW4gZW50ZXIgdXNlcm1vZGUsCisgKiBzbyB0aGF0IHdoZW4gdGhleSBmYXVsdCBiYWNrIGluIHRoZXkgd2lsbCBnZXQgdGhlCisgKiBwcm9wZXIgcGVybWlzc2lvbiBiaXRzLiAqLwordm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKQoreworCWlmICh1c2VybW9kZSkgeworCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwkJaW50IGk7CisKKwkJLyogWFhYIFJlcGxhY2UgbG9vcCB3aXRoIGZhbmN5IGRhdGEgc3RydWN0dXJlcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHRsYjFfbWF4X3NoYWRvd19zaXplKCk7IGkrKykKKwkJCWt2bXBwY19lNTAwX3N0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBpKTsKKworCQlfdGxiaWxfYWxsKCk7CisJfQorfQorCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKmd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlpZiAodW5saWtlbHkoZ2V0X3RsYl9pcHJvdChndGxiZSkpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodGxic2VsID09IDEpIHsKKwkJa3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgZ2V0X3RsYl9lYWRkcihndGxiZSksCisJCQkJZ2V0X3RsYl9lbmQoZ3RsYmUpLAorCQkJCWdldF90bGJfdGlkKGd0bGJlKSk7CisJfSBlbHNlIHsKKwkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisJfQorCisJZ3RsYmUtPm1hczEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX210X21tdWNzcjAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwgdWxvbmcgdmFsdWUpCit7CisJaW50IGVzZWw7CisKKwlpZiAodmFsdWUgJiBNTVVDU1IwX1RMQjBGSSkKKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMF07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAwLCBlc2VsKTsKKwlpZiAodmFsdWUgJiBNTVVDU1IwX1RMQjFGSSkKKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBlc2VsKTsKKworCV90bGJpbF9hbGwoKTsKKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX3RsYml2YXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmEsIGludCByYikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwl1bnNpZ25lZCBpbnQgaWE7CisJaW50IGVzZWwsIHRsYnNlbDsKKwlndmFfdCBlYTsKKworCWVhID0gKChyYSkgPyB2Y3B1LT5hcmNoLmdwcltyYV0gOiAwKSArIHZjcHUtPmFyY2guZ3ByW3JiXTsKKworCWlhID0gKGVhID4+IDIpICYgMHgxOworCisJLyogc2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLiAqLworCXRsYnNlbCA9IChlYSA+PiAzKSAmIDB4MTsKKworCWlmIChpYSkgeworCQkvKiBpbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCisJCWZvciAoZXNlbCA9IDA7IGVzZWwgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCX0gZWxzZSB7CisJCWVhICY9IDB4ZmZmZmYwMDA7CisJCWVzZWwgPSBrdm1wcGNfZTUwMF90bGJfaW5kZXgodmNwdV9lNTAwLCBlYSwgdGxic2VsLAorCQkJCWdldF9jdXJfcGlkKHZjcHUpLCAtMSk7CisJCWlmIChlc2VsID49IDApCisJCQlrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwl9CisKKwlfdGxiaWxfYWxsKCk7CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCwgZXNlbDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisKKwl0bGJzZWwgPSBnZXRfdGxiX3RsYnNlbCh2Y3B1X2U1MDApOworCWVzZWwgPSBnZXRfdGxiX2VzZWwodmNwdV9lNTAwLCB0bGJzZWwpOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKwl2Y3B1X2U1MDAtPm1hczAgJj0gfk1BUzBfTlYofjApOworCXZjcHVfZTUwMC0+bWFzMCB8PSBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCXZjcHVfZTUwMC0+bWFzMSA9IGd0bGJlLT5tYXMxOworCXZjcHVfZTUwMC0+bWFzMiA9IGd0bGJlLT5tYXMyOworCXZjcHVfZTUwMC0+bWFzMyA9IGd0bGJlLT5tYXMzOworCXZjcHVfZTUwMC0+bWFzNyA9IGd0bGJlLT5tYXM3OworCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGFzID0gISFnZXRfY3VyX3Nhcyh2Y3B1X2U1MDApOworCXVuc2lnbmVkIGludCBwaWQgPSBnZXRfY3VyX3NwaWQodmNwdV9lNTAwKTsKKwlpbnQgZXNlbCwgdGxic2VsOworCXN0cnVjdCB0bGJlICpndGxiZSA9IE5VTEw7CisJZ3ZhX3QgZWE7CisKKwllYSA9IHZjcHUtPmFyY2guZ3ByW3JiXTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhLCB0bGJzZWwsIHBpZCwgYXMpOworCQlpZiAoZXNlbCA+PSAwKSB7CisJCQlndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ3RsYmUpIHsKKwkJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTChlc2VsKQorCQkJfCBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCQl2Y3B1X2U1MDAtPm1hczEgPSBndGxiZS0+bWFzMTsKKwkJdmNwdV9lNTAwLT5tYXMyID0gZ3RsYmUtPm1hczI7CisJCXZjcHVfZTUwMC0+bWFzMyA9IGd0bGJlLT5tYXMzOworCQl2Y3B1X2U1MDAtPm1hczcgPSBndGxiZS0+bWFzNzsKKwl9IGVsc2UgeworCQlpbnQgdmljdGltOworCisJCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwkJdGxic2VsID0gdmNwdV9lNTAwLT5tYXM0ID4+IDI4ICYgMHgxOworCQl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CisKKwkJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTCh2aWN0aW0pCisJCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJCXZjcHVfZTUwMC0+bWFzMSA9ICh2Y3B1X2U1MDAtPm1hczYgJiBNQVM2X1NQSUQwKQorCQkJfCAodmNwdV9lNTAwLT5tYXM2ICYgKE1BUzZfU0FTID8gTUFTMV9UUyA6IDApKQorCQkJfCAodmNwdV9lNTAwLT5tYXM0ICYgTUFTNF9UU0laRUQofjApKTsKKwkJdmNwdV9lNTAwLT5tYXMyICY9IE1BUzJfRVBOOworCQl2Y3B1X2U1MDAtPm1hczIgfD0gdmNwdV9lNTAwLT5tYXM0ICYgTUFTMl9BVFRSSUJfTUFTSzsKKwkJdmNwdV9lNTAwLT5tYXMzICY9IE1BUzNfVTAgfCBNQVMzX1UxIHwgTUFTM19VMiB8IE1BUzNfVTM7CisJCXZjcHVfZTUwMC0+bWFzNyA9IDA7CisJfQorCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxid2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXU2NCBlYWRkcjsKKwl1NjQgcmFkZHI7CisJdTMyIHRpZDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisJaW50IHRsYnNlbCwgZXNlbCwgc3RsYnNlbCwgc2VzZWw7CisKKwl0bGJzZWwgPSBnZXRfdGxiX3RsYnNlbCh2Y3B1X2U1MDApOworCWVzZWwgPSBnZXRfdGxiX2VzZWwodmNwdV9lNTAwLCB0bGJzZWwpOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKworCWlmIChnZXRfdGxiX3YoZ3RsYmUpICYmIHRsYnNlbCA9PSAxKSB7CisJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcihndGxiZSk7CisJCXRpZCA9IGdldF90bGJfdGlkKGd0bGJlKTsKKwkJa3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgZWFkZHIsCisJCQkJZ2V0X3RsYl9lbmQoZ3RsYmUpLCB0aWQpOworCX0KKworCWd0bGJlLT5tYXMxID0gdmNwdV9lNTAwLT5tYXMxOworCWd0bGJlLT5tYXMyID0gdmNwdV9lNTAwLT5tYXMyOworCWd0bGJlLT5tYXMzID0gdmNwdV9lNTAwLT5tYXMzOworCWd0bGJlLT5tYXM3ID0gdmNwdV9lNTAwLT5tYXM3OworCisJS1ZNVFJBQ0VfNUQoR1RMQl9XUklURSwgdmNwdSwgdmNwdV9lNTAwLT5tYXMwLAorCQkJZ3RsYmUtPm1hczEsIGd0bGJlLT5tYXMyLCBndGxiZS0+bWFzMywgZ3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKKworCS8qIEludmFsaWRhdGUgc2hhZG93IG1hcHBpbmdzIGZvciB0aGUgYWJvdXQtdG8tYmUtY2xvYmJlcmVkIFRMQkUuICovCisJaWYgKHRsYmVfaXNfaG9zdF9zYWZlKHZjcHUsIGd0bGJlKSkgeworCQlzd2l0Y2ggKHRsYnNlbCkgeworCQljYXNlIDA6CisJCQkvKiBUTEIwICovCisJCQlndGxiZS0+bWFzMSAmPSB+TUFTMV9UU0laRSh+MCk7CisJCQlndGxiZS0+bWFzMSB8PSBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80Syk7CisKKwkJCXN0bGJzZWwgPSAwOworCQkJc2VzZWwgPSBrdm1wcGNfZTUwMF9zdGxiZV9tYXAodmNwdV9lNTAwLCAwLCBlc2VsKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgorCQkJLyogVExCMSAqLworCQkJZWFkZHIgPSBnZXRfdGxiX2VhZGRyKGd0bGJlKTsKKwkJCXJhZGRyID0gZ2V0X3RsYl9yYWRkcihndGxiZSk7CisKKwkJCS8qIENyZWF0ZSBhIDRLQiBtYXBwaW5nIG9uIHRoZSBob3N0LgorCQkJICogSWYgdGhlIGd1ZXN0IHdhbnRlZCBhIGxhcmdlIHBhZ2UsCisJCQkgKiBvbmx5IHRoZSBmaXJzdCA0S0IgaXMgbWFwcGVkIGhlcmUgYW5kIHRoZSByZXN0CisJCQkgKiBhcmUgbWFwcGVkIG9uIHRoZSBmbHkuICovCisJCQlzdGxic2VsID0gMTsKKwkJCXNlc2VsID0ga3ZtcHBjX2U1MDBfdGxiMV9tYXAodmNwdV9lNTAwLCBlYWRkciwKKwkJCQkJcmFkZHIgPj4gUEFHRV9TSElGVCwgZ3RsYmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIHN0bGJzZWwsIHNlc2VsKTsKKwl9CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX21tdV9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOworCisJcmV0dXJuIGt2bXBwY19lNTAwX3RsYl9zZWFyY2godmNwdSwgZWFkZHIsIGdldF9jdXJfcGlkKHZjcHUpLCBhcyk7Cit9CisKK2ludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CisKKwlyZXR1cm4ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgZ2V0X2N1cl9waWQodmNwdSksIGFzKTsKK30KKwordm9pZCBrdm1wcGNfbW11X2l0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOworCisJa3ZtcHBjX2U1MDBfZGVsaXZlcl90bGJfbWlzcyh2Y3B1LCB2Y3B1LT5hcmNoLnBjLCBhcyk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0RTKTsKKworCWt2bXBwY19lNTAwX2RlbGl2ZXJfdGxiX21pc3ModmNwdSwgdmNwdS0+YXJjaC5mYXVsdF9kZWFyLCBhcyk7Cit9CisKK2dwYV90IGt2bXBwY19tbXVfeGxhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQlndmFfdCBlYWRkcikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmUgPQorCQkmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsX29mKGluZGV4KV1bZXNlbF9vZihpbmRleCldOworCXU2NCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKGd0bGJlKSAtIDE7CisKKwlyZXR1cm4gZ2V0X3RsYl9yYWRkcihndGxiZSkgfCAoZWFkZHIgJiBwZ21hc2spOworfQorCit2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCwgaTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspCisJCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGkrKykKKwkJCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBpKTsKKworCS8qIGRpc2NhcmQgYWxsIGd1ZXN0IG1hcHBpbmcgKi8KKwlfdGxiaWxfYWxsKCk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWFkZHIsIGdwYV90IGdwYWRkciwKKwkJCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgdGxic2VsID0gdGxic2VsX29mKGluZGV4KTsKKwlpbnQgZXNlbCA9IGVzZWxfb2YoaW5kZXgpOworCWludCBzdGxic2VsLCBzZXNlbDsKKworCXN3aXRjaCAodGxic2VsKSB7CisJY2FzZSAwOgorCQlzdGxic2VsID0gMDsKKwkJc2VzZWwgPSBlc2VsOworCQlicmVhazsKKworCWNhc2UgMTogeworCQlnZm5fdCBnZm4gPSBncGFkZHIgPj4gUEFHRV9TSElGVDsKKwkJc3RydWN0IHRsYmUgKmd0bGJlCisJCQk9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCisJCXN0bGJzZWwgPSAxOworCQlzZXNlbCA9IGt2bXBwY19lNTAwX3RsYjFfbWFwKHZjcHVfZTUwMCwgZWFkZHIsIGdmbiwgZ3RsYmUpOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIHN0bGJzZWwsIHNlc2VsKTsKK30KKworaW50IGt2bXBwY19lNTAwX3RsYl9zZWFyY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCWd2YV90IGVhZGRyLCB1bnNpZ25lZCBpbnQgcGlkLCBpbnQgYXMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVzZWwsIHRsYnNlbDsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhZGRyLCB0bGJzZWwsIHBpZCwgYXMpOworCQlpZiAoZXNlbCA+PSAwKQorCQkJcmV0dXJuIGluZGV4X29mKHRsYnNlbCwgZXNlbCk7CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9zZXR1cChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXN0cnVjdCB0bGJlICp0bGJlOworCisJLyogSW5zZXJ0IGxhcmdlIGluaXRpYWwgbWFwcGluZyBmb3IgZ3Vlc3QuICovCisJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVswXTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzI1Nk0pOworCXRsYmUtPm1hczIgPSAwOworCXRsYmUtPm1hczMgPSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7CisJdGxiZS0+bWFzNyA9IDA7CisKKwkvKiA0SyBtYXAgZm9yIHNlcmlhbCBvdXRwdXQuIFVzZWQgYnkga2VybmVsIHdyYXBwZXIuICovCisJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVsxXTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKTsKKwl0bGJlLT5tYXMyID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IE1BUzJfSSB8IE1BUzJfRzsKKwl0bGJlLT5tYXMzID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKKwl0bGJlLT5tYXM3ID0gMDsKK30KKworaW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJdGxiMV9lbnRyeV9udW0gPSBtZnNwcihTUFJOX1RMQjFDRkcpICYgMHhGRkY7CisKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdID0gS1ZNX0U1MDBfVExCMF9TSVpFOworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0OworCisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiX3NpemVbMF0gPSBLVk1fRTUwMF9UTEIwX1NJWkU7CisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9ndWVzdDA7CisKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdID0gS1ZNX0U1MDBfVExCMV9TSVpFOworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3NoYWRvdzA7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd190bGJfc2l6ZVsxXSA9IHRsYjFfZW50cnlfbnVtOworCXZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGJlKSAqIHRsYjFfZW50cnlfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9ndWVzdDE7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSA9IChzdHJ1Y3QgcGFnZSAqKikKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBLVk1fRTUwMF9UTEIwX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfc2hhZG93MTsKKworCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzFdID0gKHN0cnVjdCBwYWdlICoqKQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIHRsYjFfZW50cnlfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3BhZ2UwOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcGFnZTA6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0pOworZXJyX291dF9zaGFkb3cxOgorCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSk7CitlcnJfb3V0X2d1ZXN0MToKKwlrZnJlZSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXSk7CitlcnJfb3V0X3NoYWRvdzA6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdKTsKK2Vycl9vdXRfZ3Vlc3QwOgorCWtmcmVlKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdKTsKK2Vycl9vdXQ6CisJcmV0dXJuIC0xOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl91bmluaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1sxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlswXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjA2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgeXUubGl1QGZyZWVzY2FsZS5jb20KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBhcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaCwKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19LVk1fRTUwMF9UTEJfSF9fCisjZGVmaW5lIF9fS1ZNX0U1MDBfVExCX0hfXworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX0JJVAk3CS8qIEZpeGVkICovCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkUJCSgxVUwgPDwgS1ZNX0U1MDBfVExCMF9XQVlfU0laRV9CSVQpCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkVfTUFTSwkoS1ZNX0U1MDBfVExCMF9XQVlfU0laRSAtIDEpCisKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVAkxCS8qIE5vIGdyZWF0ZXIgdGhhbiA3ICovCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX05VTQkJKDFVTCA8PCBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fQklUKQorI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fTUFTSwkoS1ZNX0U1MDBfVExCMF9XQVlfTlVNIC0gMSkKKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1NJWkUgIChLVk1fRTUwMF9UTEIwX1dBWV9TSVpFICogS1ZNX0U1MDBfVExCMF9XQVlfTlVNKQorI2RlZmluZSBLVk1fRTUwMF9UTEIxX1NJWkUgIDE2CisKKyNkZWZpbmUgaW5kZXhfb2YodGxic2VsLCBlc2VsKQkoKCh0bGJzZWwpIDw8IDE2KSB8ICgoZXNlbCkgJiAweEZGRkYpKQorI2RlZmluZSB0bGJzZWxfb2YoaW5kZXgpCSgoaW5kZXgpID4+IDE2KQorI2RlZmluZSBlc2VsX29mKGluZGV4KQkJKChpbmRleCkgJiAweEZGRkYpCisKKyNkZWZpbmUgRTUwMF9UTEJfVVNFUl9QRVJNX01BU0sgKE1BUzNfVVh8TUFTM19VUnxNQVMzX1VXKQorI2RlZmluZSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0sgKE1BUzNfU1h8TUFTM19TUnxNQVMzX1NXKQorI2RlZmluZSBNQVMyX0FUVFJJQl9NQVNLIFwKKwkgIChNQVMyX1gwIHwgTUFTMl9YMSkKKyNkZWZpbmUgTUFTM19BVFRSSUJfTUFTSyBcCisJICAoTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMyBcCisJICAgfCBFNTAwX1RMQl9VU0VSX1BFUk1fTUFTSyB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSykKKworZXh0ZXJuIHZvaWQga3ZtcHBjX2R1bXBfdGxicyhzdHJ1Y3Qga3ZtX3ZjcHUgKik7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfbXRfbW11Y3NyMChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqLCB1bG9uZyk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxid2Uoc3RydWN0IGt2bV92Y3B1ICopOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX3RsYnJlKHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICosIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX3RsYl9zZWFyY2goc3RydWN0IGt2bV92Y3B1ICosIGd2YV90LCB1bnNpZ25lZCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfcHV0KHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQpOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl91bmluaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfc2V0dXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CisKKy8qIFRMQiBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3NpemUoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDgpICYgMHhmOworfQorCitzdGF0aWMgaW5saW5lIGd2YV90IGdldF90bGJfZWFkZHIoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuIHRsYmUtPm1hczIgJiAweGZmZmZmMDAwOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX2J5dGVzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXVuc2lnbmVkIGludCBwZ3NpemUgPSBnZXRfdGxiX3NpemUodGxiZSk7CisJcmV0dXJuIDFVTEwgPDwgMTAgPDwgKHBnc2l6ZSA8PCAxKTsKK30KKworc3RhdGljIGlubGluZSBndmFfdCBnZXRfdGxiX2VuZChjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwl1NjQgYnl0ZXMgPSBnZXRfdGxiX2J5dGVzKHRsYmUpOworCXJldHVybiBnZXRfdGxiX2VhZGRyKHRsYmUpICsgYnl0ZXMgLSAxOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX3JhZGRyKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXU2NCBycG4gPSB0bGJlLT5tYXM3OworCXJldHVybiAocnBuIDw8IDMyKSB8ICh0bGJlLT5tYXMzICYgMHhmZmZmZjAwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdGlkKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAxNikgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3RzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAxMikgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdihjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gMzEpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2lwcm90KGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAzMCkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jdXJfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5waWQgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3VyX3NwaWQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuICh2Y3B1X2U1MDAtPm1hczYgPj4gMTYpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2N1cl9zYXMoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuIHZjcHVfZTUwMC0+bWFzNiAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl90bGJzZWwoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJLyoKKwkgKiBNYW51YWwgc2F5cyB0aGF0IHRsYnNlbCBoYXMgMiBiaXRzIHdpZGUuCisJICogU2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLgorCSAqLworCXJldHVybiAodmNwdV9lNTAwLT5tYXMwID4+IDI4KSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9udl9iaXQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuIHZjcHVfZTUwMC0+bWFzMCAmIDB4ZmZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2VzZWxfYml0KAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXJldHVybiAodmNwdV9lNTAwLT5tYXMwID4+IDE2KSAmIDB4ZmZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2VzZWwoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwpCit7CisJdW5zaWduZWQgaW50IGVzZWwgPSBnZXRfdGxiX2VzZWxfYml0KHZjcHVfZTUwMCk7CisKKwlpZiAodGxic2VsID09IDApIHsKKwkJZXNlbCAmPSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fTUFTSzsKKwkJZXNlbCB8PSAoKHZjcHVfZTUwMC0+bWFzMiA+PiAxMikgJiBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX01BU0spCisJCQkJPDwgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVDsKKwl9IGVsc2UgeworCQllc2VsICY9IEtWTV9FNTAwX1RMQjFfU0laRSAtIDE7CisJfQorCisJcmV0dXJuIGVzZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRsYmVfaXNfaG9zdF9zYWZlKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCWNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCWdwYV90IGdwYTsKKworCWlmICghZ2V0X3RsYl92KHRsYmUpKQorCQlyZXR1cm4gMDsKKworCS8qIERvZXMgaXQgbWF0Y2ggY3VycmVudCBndWVzdCBBUz8gKi8KKwkvKiBYWFggd2hhdCBhYm91dCBJUyAhPSBEUz8gKi8KKwlpZiAoZ2V0X3RsYl90cyh0bGJlKSAhPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUykpCisJCXJldHVybiAwOworCisJZ3BhID0gZ2V0X3RsYl9yYWRkcih0bGJlKTsKKwlpZiAoIWdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpKQorCQkvKiBNYXBwaW5nIGlzIG5vdCBmb3IgUkFNLiAqLworCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogX19LVk1fRTUwMF9UTEJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IGQxZDM4ZGEuLmE1NjFkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC0zMCw2ICszMCwzOSBAQAogI2luY2x1ZGUgPGFzbS9kaXNhc3NlbWJsZS5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogCisjZGVmaW5lIE9QX1RSQVAgMworCisjZGVmaW5lIE9QXzMxX1hPUF9MV1pYICAgICAgMjMKKyNkZWZpbmUgT1BfMzFfWE9QX0xCWlggICAgICA4NworI2RlZmluZSBPUF8zMV9YT1BfU1RXWCAgICAgIDE1MQorI2RlZmluZSBPUF8zMV9YT1BfU1RCWCAgICAgIDIxNQorI2RlZmluZSBPUF8zMV9YT1BfU1RCVVggICAgIDI0NworI2RlZmluZSBPUF8zMV9YT1BfTEhaWCAgICAgIDI3OQorI2RlZmluZSBPUF8zMV9YT1BfTEhaVVggICAgIDMxMQorI2RlZmluZSBPUF8zMV9YT1BfTUZTUFIgICAgIDMzOQorI2RlZmluZSBPUF8zMV9YT1BfU1RIWCAgICAgIDQwNworI2RlZmluZSBPUF8zMV9YT1BfU1RIVVggICAgIDQzOQorI2RlZmluZSBPUF8zMV9YT1BfTVRTUFIgICAgIDQ2NworI2RlZmluZSBPUF8zMV9YT1BfRENCSSAgICAgIDQ3MAorI2RlZmluZSBPUF8zMV9YT1BfTFdCUlggICAgIDUzNAorI2RlZmluZSBPUF8zMV9YT1BfVExCU1lOQyAgIDU2NgorI2RlZmluZSBPUF8zMV9YT1BfU1RXQlJYICAgIDY2MgorI2RlZmluZSBPUF8zMV9YT1BfTEhCUlggICAgIDc5MAorI2RlZmluZSBPUF8zMV9YT1BfU1RIQlJYICAgIDkxOAorCisjZGVmaW5lIE9QX0xXWiAgMzIKKyNkZWZpbmUgT1BfTFdaVSAzMworI2RlZmluZSBPUF9MQlogIDM0CisjZGVmaW5lIE9QX0xCWlUgMzUKKyNkZWZpbmUgT1BfU1RXICAzNgorI2RlZmluZSBPUF9TVFdVIDM3CisjZGVmaW5lIE9QX1NUQiAgMzgKKyNkZWZpbmUgT1BfU1RCVSAzOQorI2RlZmluZSBPUF9MSFogIDQwCisjZGVmaW5lIE9QX0xIWlUgNDEKKyNkZWZpbmUgT1BfU1RIICA0NAorI2RlZmluZSBPUF9TVEhVIDQ1CisKIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAodmNwdS0+YXJjaC50Y3IgJiBUQ1JfRElFKSB7CkBAIC03OCw3ICsxMTEsNyBAQAogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX0lOU1RfRVhJVFMpOwogCiAJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKLQljYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhcCAqLworCWNhc2UgT1BfVFJBUDoKIAkJdmNwdS0+YXJjaC5lc3IgfD0gRVNSX1BUUjsKIAkJa3ZtcHBjX2NvcmVfcXVldWVfcHJvZ3JhbSh2Y3B1KTsKIAkJYWR2YW5jZSA9IDA7CkBAIC04NywzMSArMTIwLDMxIEBACiAJY2FzZSAzMToKIAkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CiAKLQkJY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHd6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MV1pYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxienggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEJaWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDE1MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHd4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUV1g6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyMTU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RieCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEJYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnV4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUQlVYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTI2LDEyICsxNTksMTIgQEAKIAkJCXZjcHUtPmFyY2guZ3ByW3JzXSA9IGVhOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyNzk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGh6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MSFpYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMzExOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoenV4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xIWlVYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTQ0LDcgKzE3Nyw3IEBACiAJCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSBlYTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMzM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1mc3ByICovCisJCWNhc2UgT1BfMzFfWE9QX01GU1BSOgogCQkJc3BybiA9IGdldF9zcHJuKGluc3QpOwogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAKQEAgLTE4NSw3ICsyMTgsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSA0MDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTk1LDcgKzIyOCw3IEBACiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDQzOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGh1eCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhVWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTIxMCw3ICsyNDMsNyBAQAogCQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gZWE7CiAJCQlicmVhazsKIAotCQljYXNlIDQ2NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtdHNwciAqLworCQljYXNlIE9QXzMxX1hPUF9NVFNQUjoKIAkJCXNwcm4gPSBnZXRfc3BybihpbnN0KTsKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJc3dpdGNoIChzcHJuKSB7CkBAIC0yNDYsNyArMjc5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgNDcwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRjYmkgKi8KKwkJY2FzZSBPUF8zMV9YT1BfRENCSToKIAkJCS8qIERvIG5vdGhpbmcuIFRoZSBndWVzdCBpcyBwZXJmb3JtaW5nIGRjYmkgYmVjYXVzZQogCQkJICogaGFyZHdhcmUgRE1BIGlzIG5vdCBzbm9vcGVkIGJ5IHRoZSBkY2FjaGUsIGJ1dAogCQkJICogZW11bGF0ZWQgRE1BIGVpdGhlciBnb2VzIHRocm91Z2ggdGhlIGRjYWNoZSBhcwpAQCAtMjU0LDE1ICsyODcsMTUgQEAKIAkJCSAqIGNvaGVyZW5jZS4gKi8KIAkJCWJyZWFrOwogCi0JCWNhc2UgNTM0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3YnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xXQlJYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgNTY2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRsYnN5bmMgKi8KKwkJY2FzZSBPUF8zMV9YT1BfVExCU1lOQzoKIAkJCWJyZWFrOwogCi0JCWNhc2UgNjYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0d2JyeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVFdCUlg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0yNzIsMTIgKzMwNSwxMiBAQAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA3OTA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGhicnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEhCUlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA5MTg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoYnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUSEJSWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTI5MywzNyArMzI2LDM3IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3eiAqLworCWNhc2UgT1BfTFdaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgNCwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsd3p1ICovCisJY2FzZSBPUF9MV1pVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDQsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGJ6ICovCisJY2FzZSBPUF9MQlo6CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxienUgKi8KKwljYXNlIE9QX0xCWlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHcgKi8KKwljYXNlIE9QX1NUVzoKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQlicmVhazsKIAotCWNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3R3dSAqLworCWNhc2UgT1BfU1RXVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCkBAIC0zMzEsMTMgKzM2NCwxMyBAQAogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RiICovCisJY2FzZSBPUF9TVEI6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnUgKi8KKwljYXNlIE9QX1NUQlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApAQCAtMzQ1LDI1ICszNzgsMjUgQEAKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoeiAqLworCWNhc2UgT1BfTEhaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaHp1ICovCisJY2FzZSBPUF9MSFpVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoICovCisJY2FzZSBPUF9TVEg6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDQ1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aHUgKi8KKwljYXNlIE9QX1NUSFU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCA1ZjgxMjU2Li45MDU3MzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMjE2LDQ2ICsyMTYsMjMgQEAKIAogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Ja3ZtcHBjX2NvcmVfZGVzdHJveV9tbXUodmNwdSk7CisJa3ZtcHBjX21tdV9kZXN0cm95KHZjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZSh2Y3B1KTsKLQogCWt2bXBwY19jb3JlX3ZjcHVfbG9hZCh2Y3B1LCBjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJa3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUodmNwdSk7Ci0KLQkvKiBEb24ndCBsZWF2ZSBndWVzdCBUTEIgZW50cmllcyByZXNpZGVudCB3aGVuIGJlaW5nIGRlLXNjaGVkdWxlZC4gKi8KLQkvKiBYWFggSXQgd291bGQgYmUgbmljZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaGVhdnl3ZWlnaHQgZXhpdCBhbmQKLQkgKiBzY2hlZF9vdXQgaGVyZSwgc2luY2Ugd2UgY291bGQgYXZvaWQgdGhlIFRMQiBmbHVzaCBmb3IgaGVhdnl3ZWlnaHQKLQkgKiBleGl0cy4gKi8KLQlfdGxiaWxfYWxsKCk7CiAJa3ZtcHBjX2NvcmVfdmNwdV9wdXQodmNwdSk7CiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCWludCBpOwotCi0JdmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCA9IGRiZy0+ZW5hYmxlZDsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkgewotCQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+Z3Vlc3RfZGVidWcuYnApOyBpKyspIHsKLQkJCWlmIChkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCi0JCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7Ci0JCQllbHNlCi0JCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9kY3JfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKaW5kZXggMjhjMDRkYS4uODgyZTQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwpAQCAtMjM3LDggKzIzNyw2IEBACiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9paWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CkBAIC0yNTQsNyArMjUyLDcgQEAKIAkJZ290byBvdXRfZW9pOwogCX0KIAotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyogTWFyayB0aGUgSVJRIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4qLwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKaW5kZXggNmEwYWQxOS4uZjA4NTM2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZjdHgtPnJxLCAmc3B1X3ByaW8tPnJ1bnFbY3R4LT5wcmlvXSk7CiAJCXNldF9iaXQoY3R4LT5wcmlvLCBzcHVfcHJpby0+Yml0bWFwKTsKIAkJaWYgKCFzcHVfcHJpby0+bnJfd2FpdGluZysrKQotCQkJX19tb2RfdGltZXIoJnNwdXNjaGVkX3RpbWVyLCBqaWZmaWVzICsgU1BVU0NIRURfVElDSyk7CisJCQltb2RfdGltZXIoJnNwdXNjaGVkX3RpbWVyLCBqaWZmaWVzICsgU1BVU0NIRURfVElDSyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggNTgzMTFhOC4uYTcwNWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RyaXZlciAqZHJ2OwogCiAJQlVHX09OKCFkZXYpOwotCXByX2RlYnVnKCIgLT4gJXM6JWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIF9kZXYtPmJ1c19pZCk7CisJZGV2X2RiZyhfZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlkcnYgPSBwczNfc3lzdGVtX2J1c19kZXZfdG9fc3lzdGVtX2J1c19kcnYoZGV2KTsKIAlCVUdfT04oIWRydik7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyICpkcnY7CiAKIAlCVUdfT04oIWRldik7Ci0JcHJfZGVidWcoIiAtPiAlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgX2Rldi0+YnVzX2lkKTsKKwlkZXZfZGJnKF9kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWRydiA9IHBzM19zeXN0ZW1fYnVzX2Rldl90b19zeXN0ZW1fYnVzX2RydihkZXYpOwogCUJVR19PTighZHJ2KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IDg0ZTA1OGYuLjgwYjUxMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtMTUzLDkgKzE1MywxMCBAQAogewogCWludCBzZXJ2ZXI7CiAJLyogRm9yIHRoZSBtb21lbnQgb25seSBpbXBsZW1lbnQgZGVsaXZlcnkgdG8gYWxsIGNwdXMgb3Igb25lIGNwdSAqLwotCWNwdW1hc2tfdCBjcHVtYXNrID0gaXJxX2Rlc2NbdmlycV0uYWZmaW5pdHk7CisJY3B1bWFza190IGNwdW1hc2s7CiAJY3B1bWFza190IHRtcCA9IENQVV9NQVNLX05PTkU7CiAKKwljcHVtYXNrX2NvcHkoJmNwdW1hc2ssIGlycV9kZXNjW3ZpcnFdLmFmZmluaXR5KTsKIAlpZiAoIWRpc3RyaWJ1dGVfaXJxcykKIAkJcmV0dXJuIGRlZmF1bHRfc2VydmVyOwogCkBAIC04NjksNyArODcwLDcgQEAKIAkJICAgICAgIHZpcnEsIGNwdSk7CiAKIAkJLyogUmVzZXQgYWZmaW5pdHkgdG8gYWxsIGNwdXMgKi8KLQkJaXJxX2Rlc2NbdmlycV0uYWZmaW5pdHkgPSBDUFVfTUFTS19BTEw7CisJCWNwdW1hc2tfc2V0YWxsKGlycV9kZXNjW3ZpcnFdLmFmZmluaXR5KTsKIAkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KHZpcnEsIGNwdV9hbGxfbWFzayk7CiB1bmxvY2s6CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggYTM1Mjk3ZC4uNTMyZTIwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTU2Niw5ICs1NjYsMTAgQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKIHsKLQljcHVtYXNrX3QgbWFzayA9IGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eTsKKwljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1aWQ7CiAKKwljcHVtYXNrX2NvcHkoJm1hc2ssIGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eSk7CiAJaWYgKGNwdXNfZXF1YWwobWFzaywgQ1BVX01BU0tfQUxMKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDZiMGEzNTMuLjJhOGFmNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0zNDMsMTMgKzM0Myw2IEBACiAKIGNvbW1lbnQgIkkvTyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiIKIAotY29uZmlnIE1BQ0hDSEtfV0FSTklORwotCWJvb2wgIlByb2Nlc3Mgd2FybmluZyBtYWNoaW5lIGNoZWNrcyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciBvbiBJQk0gUy8zOTAgb3IKLQkgIHpTZXJpZXMgdG8gcHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIChlLmcuIG9uIHBvd2VyIGZhaWx1cmVzKS4KLQkgIElmIHVuc3VyZSwgc2F5ICJZIi4KLQogY29uZmlnIFFESU8KIAl0cmlzdGF0ZSAiUURJTyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTUyMSw3ICs1MTQsNyBAQAogCiBjb25maWcgQVBQTERBVEFfTkVUX1NVTQogCXRyaXN0YXRlICJNb25pdG9yIG92ZXJhbGwgbmV0d29yayBzdGF0aXN0aWNzIgotCWRlcGVuZHMgb24gQVBQTERBVEFfQkFTRQorCWRlcGVuZHMgb24gQVBQTERBVEFfQkFTRSAmJiBORVQKIAloZWxwCiAJICBUaGlzIHByb3ZpZGVzIG5ldHdvcmsgcmVsYXRlZCBkYXRhIHRvIHRoZSBMaW51eCAtIFZNIE1vbml0b3IgU3RyZWFtLAogCSAgY3VycmVudGx5IHRoZXJlIGlzIG9ubHkgYSB0b3RhbCBzdW0gb2YgbmV0d29yayBJL08gc3RhdGlzdGljcywgbm8KQEAgLTU1Miw3ICs1NDUsNyBAQAogCSAgYnV0IGlzIGluZGVwZW5kZW50IG9mIGhhcmR3YXJlL21pY3JvY29kZSBzdXBwb3J0LgogCiBjb25maWcgWkZDUERVTVAKLQl0cmlzdGF0ZSAiemZjcGR1bXAgc3VwcG9ydCIKKwlib29sICJ6ZmNwZHVtcCBzdXBwb3J0IgogCXNlbGVjdCBTTVAKIAlkZWZhdWx0IG4KIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IGVjYTcyNGQuLmI0OWMwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC0yMDEsOCArMjAxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcm5nX2V4aXQodm9pZCkKIHsKIAkvKiB3aXBlIG1lICovCi0JbWVtc2V0KHAtPmJ1ZiwgMCwgcHJuZ19jaHVua19zaXplKTsKLQlrZnJlZShwLT5idWYpOworCWt6ZnJlZShwLT5idWYpOwogCWtmcmVlKHApOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZwcm5nX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaAppbmRleCAxY2VhZmE1Li5mNGU5ZGM3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKQEAgLTI5LDcgKzI5LDkgQEAKIAlpbnQgZnVuYzsJCS8qIEtJTUQgZnVuY3Rpb24gdG8gdXNlICovCiB9OwogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpOworc3RydWN0IHNoYXNoX2Rlc2M7CisKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBzMzkwX3NoYV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKm91dCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKaW5kZXggYjNjYjVhOC4uZTg1YmEzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCkBAIC0yMywxNyArMjMsMTcgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KIAogI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKICNpbmNsdWRlICJzaGEuaCIKIAotc3RhdGljIHZvaWQgc2hhMV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTFfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTFfSDA7CiAJc2N0eC0+c3RhdGVbMV0gPSBTSEExX0gxOwpAQCAtNDIsMzQgKzQyLDM2IEBACiAJc2N0eC0+c3RhdGVbNF0gPSBTSEExX0g0OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGExIiwKLQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGExX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGExX2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGExIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTEtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaGExX3MzOTBfaW5pdCh2b2lkKQogewogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8xKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGExX3MzOTBfZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoc2hhMV9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCmluZGV4IDE5YzAzZmIuLmY5ZmVmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKQEAgLTE2LDE3ICsxNiwxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGEyNTZfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGEyNTZfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTI1Nl9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTI1Nl9IMTsKQEAgLTM4LDIyICszOCwyNCBAQAogCXNjdHgtPnN0YXRlWzddID0gU0hBMjU2X0g3OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMjU2OworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTI1NiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEyNTYtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEyNTZfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTI1Nl9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGFsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTI1Nl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGEyNTZfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTI1NiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyNTYtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgc2hhMjU2X3MzOTBfaW5pdCh2b2lkKQpAQCAtNjEsMTIgKzYzLDEyIEBACiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzI1NikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGEyNTZfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGEyNTZfczM5MF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwppbmRleCAyM2M3ODYxLi44MzE5MmJmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCkBAIC0xMiwxNiArMTIsMTYgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi1zdGF0aWMgdm9pZCBzaGE1MTJfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGE1MTJfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzBdID0gMHg2YTA5ZTY2N2YzYmNjOTA4VUxMOwogCSooX191NjQgKikmY3R4LT5zdGF0ZVsyXSA9IDB4YmI2N2FlODU4NGNhYTczYlVMTDsKQEAgLTMzLDI5ICszMywzMSBAQAogCSooX191NjQgKikmY3R4LT5zdGF0ZVsxNF0gPSAweDViZTBjZDE5MTM3ZTIxNzlVTEw7CiAJY3R4LT5jb3VudCA9IDA7CiAJY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGE1MTJfYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGE1MTIiLAotCS5jcmFfZHJpdmVyX25hbWUgPQkic2hhNTEyLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAotCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CT0JTElTVF9IRUFEX0lOSVQoc2hhNTEyX2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEE1MTJfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhNTEyX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgc2hhNTEyX2FsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGE1MTJfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTUxMiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGE1MTItczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTUxMl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhNTEyIik7CiAKLXN0YXRpYyB2b2lkIHNoYTM4NF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTM4NF9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweGNiYmI5ZDVkYzEwNTllZDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHg2MjlhMjkyYTM2N2NkNTA3VUxMOwpAQCAtNjcsMjIgKzY5LDI1IEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NDdiNTQ4MWRiZWZhNGZhNFVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTM4NF9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTM4NCIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEzODQtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGEzODRfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTM4NF9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGEzODRfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEzODRfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTM4NF9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMzg0IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTM4NC1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMzg0X0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBNT0RVTEVfQUxJQVMoInNoYTM4NCIpOwpAQCAtOTMsMTggKzk4LDE4IEBACiAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfNTEyKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZykpIDwgMCkKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZykpIDwgMCkKIAkJZ290byBvdXQ7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKSkgPCAwKQotCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOworCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKSkgPCAwKQorCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMzg0X2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTUxMl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IDlkNmViOGMuLjc5MDNlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0xMywxNCArMTMsMTQgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXVuc2lnbmVkIGludCBpbmRleDsKIAlpbnQgcmV0OwogCkBAIC01MSwxMyArNTEsMTUgQEAKIHN0b3JlOgogCWlmIChsZW4pCiAJCW1lbWNweShjdHgtPmJ1ZiArIGluZGV4ICwgZGF0YSwgbGVuKTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9zaGFfdXBkYXRlKTsKIAotdm9pZCBzMzkwX3NoYV9maW5hbChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0KQoraW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXU2NCBiaXRzOwogCXVuc2lnbmVkIGludCBpbmRleCwgZW5kLCBwbGVuOwogCWludCByZXQ7CkBAIC04Nyw5ICs4OSwxMSBAQAogCUJVR19PTihyZXQgIT0gZW5kKTsKIAogCS8qIGNvcHkgZGlnZXN0IHRvIG91dCAqLwotCW1lbWNweShvdXQsIGN0eC0+c3RhdGUsIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoY3J5cHRvX2hhc2hfY2FzdCh0Zm0pKSk7CisJbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUoZGVzYy0+dGZtKSk7CiAJLyogd2lwZSBjb250ZXh0ICovCiAJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mICpjdHgpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV9maW5hbCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA4ZTkyNDNhLi5iMzA2MDZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiB3aXRoIG9wZXJhdGlvbiBvZiB0aGUgZm9ybSAic2V0X2JpdChiaXRuciwgZmxhZ3MpIi4KICAqLwogCi0vKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9TMzkwL2tlcm5lbC9iaXRtYXAuUyAqLworLyogYml0bWFwIHRhYmxlcyBmcm9tIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMgKi8KIGV4dGVybiBjb25zdCBjaGFyIF9vaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF9uaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF96Yl9maW5kbWFwW107CkBAIC01MjUsMTYgKzUyNSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZ6X3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAweGZmZmZmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikgewogCQl3b3JkID4+PSAxNjsKIAkJbnIgKz0gMTY7CiAJfQotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmKSA9PSAweGZmKSkgeworCWlmICgod29yZCAmIDB4ZmYpID09IDB4ZmYpIHsKIAkJd29yZCA+Pj0gODsKIAkJbnIgKz0gODsKIAl9CkBAIC01NDksMTYgKzU0OSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzX3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAwKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMCkgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg1YTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgIERhdGEgZGVmaW5pdGlvbnMgZm9yIGNoYW5uZWwgcmVwb3J0IHByb2Nlc3NpbmcKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9DUldfSAorI2RlZmluZSBfQVNNX1MzOTBfQ1JXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBDaGFubmVsIFJlcG9ydCBXb3JkCisgKi8KK3N0cnVjdCBjcncgeworCV9fdTMyIHJlczEgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCisJX191MzIgc2xjdCA6ICAxOyAgIC8qIHNvbGljaXRlZCAqLworCV9fdTMyIG9mbHcgOiAgMTsgICAvKiBvdmVyZmxvdyAqLworCV9fdTMyIGNobiAgOiAgMTsgICAvKiBjaGFpbmVkICovCisJX191MzIgcnNjICA6ICA0OyAgIC8qIHJlcG9ydGluZyBzb3VyY2UgY29kZSAqLworCV9fdTMyIGFuYyAgOiAgMTsgICAvKiBhbmNpbGxhcnkgcmVwb3J0ICovCisJX191MzIgcmVzMiA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBlcmMgIDogIDY7ICAgLyogZXJyb3ItcmVjb3ZlcnkgY29kZSAqLworCV9fdTMyIHJzaWQgOiAxNjsgICAvKiByZXBvcnRpbmctc291cmNlIElEICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordHlwZWRlZiB2b2lkICgqY3J3X2hhbmRsZXJfdCkoc3RydWN0IGNydyAqLCBzdHJ1Y3QgY3J3ICosIGludCk7CisKK2V4dGVybiBpbnQgY3J3X3JlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKTsKK2V4dGVybiB2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYyk7CitleHRlcm4gdm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpOworCisjZGVmaW5lIE5SX1JTQ1MgMTYKKworI2RlZmluZSBDUldfUlNDX01PTklUT1IgIDB4MiAgLyogbW9uaXRvcmluZyBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX1NDSAkgMHgzICAvKiBzdWJjaGFubmVsICovCisjZGVmaW5lIENSV19SU0NfQ1BBVEgJIDB4NCAgLyogY2hhbm5lbCBwYXRoICovCisjZGVmaW5lIENSV19SU0NfQ09ORklHCSAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DU1MJIDB4QiAgLyogY2hhbm5lbCBzdWJzeXN0ZW0gKi8KKworI2RlZmluZSBDUldfRVJDX0VWRU5UCSAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KKyNkZWZpbmUgQ1JXX0VSQ19BVkFJTAkgMHgwMSAvKiBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ1JXX0VSQ19JTklUCSAweDAyIC8qIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSUk9SCSAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLworI2RlZmluZSBDUldfRVJDX0lQQVJNCSAweDA0IC8qIGluc3RhbGxlZCBwYXJtIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSTQkgMHgwNSAvKiB0ZXJtaW5hbCAqLworI2RlZmluZSBDUldfRVJDX1BFUlJOCSAweDA2IC8qIHBlcm0uIGVycm9yLCBmYWMuIG5vdCBpbml0ICovCisjZGVmaW5lIENSV19FUkNfUEVSUkkJIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QTU9ECSAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncpCit7CisJaW50IGNjb2RlOworCisJYXNtIHZvbGF0aWxlKAorCQkiCXN0Y3J3CTAoJTIpXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKKwkJOiAiYSIgKHBjcncpCisJCTogImNjIiApOworCXJldHVybiBjY29kZTsKK30KKworI2VuZGlmIC8qIF9BU01fUzM5MF9DUldfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKaW5kZXggZTJkYjZmMS4uMjE4YmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCkBAIC0xNjIsMTUgKzE2MiwxNSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb19ucl9yZXFbMzJdOyAvKiBoaXN0b2dyYW0gb2YgIyBvZiByZXF1ZXN0cyBpbiBjaGFucSAqLwogfSBkYXNkX3Byb2ZpbGVfaW5mb190OwogCi0vKiAKKy8qCiAgKiBzdHJ1Y3QgZm9ybWF0X2RhdGFfdAogICogcmVwcmVzZW50cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gZm9ybWF0IGEgZGFzZAogICovCiB0eXBlZGVmIHN0cnVjdCBmb3JtYXRfZGF0YV90IHsKLQlpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLwotCWludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLwotCWludCBibGtzaXplOyAgICAvKiBzZWN0b3JzaXplICovCi0gICAgICAgIGludCBpbnRlbnNpdHk7ICAKKwl1bnNpZ25lZCBpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLworCXVuc2lnbmVkIGludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLworCXVuc2lnbmVkIGludCBibGtzaXplOwkgLyogc2VjdG9yc2l6ZSAqLworCXVuc2lnbmVkIGludCBpbnRlbnNpdHk7CiB9IGZvcm1hdF9kYXRhX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCmluZGV4IGU4MmMxMGUuLmFhZTI3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCkBAIC00NCwyNCArNDQsMTggQEAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpZGFsIHdvcmRzIG5lZWRlZCBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpZGFsX25yX3dvcmRzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotI2lmZGVmIF9fczM5MHhfXwotCWlmIChpZGFsX2lzX25lZWRlZCh2YWRkciwgbGVuZ3RoKSkKLQkJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsgCi0JCQkoSURBX0JMT0NLX1NJWkUtMSkpID4+IElEQV9TSVpFX0xPRzsKLSNlbmRpZgotCXJldHVybiAwOworCXJldHVybiAoKF9fcGEodmFkZHIpICYgKElEQV9CTE9DS19TSVpFLTEpKSArIGxlbmd0aCArCisJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwogfQogCiAvKgogICogQ3JlYXRlIHRoZSBsaXN0IG9mIGlkYWwgd29yZHMgZm9yIGFuIGFkZHJlc3MvbGVuZ3RoIHBhaXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqCi1pZGFsX2NyZWF0ZV93b3Jkcyh1bnNpZ25lZCBsb25nICppZGF3cywgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLAorCQkJCQkgICAgICAgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAl1bnNpZ25lZCBpbnQgY2lkYXc7CiAKQEAgLTc0LDcgKzY4LDYgQEAKIAkJcGFkZHIgKz0gSURBX0JMT0NLX1NJWkU7CiAJCSppZGF3cysrID0gcGFkZHI7CiAJfQotI2VuZGlmCiAJcmV0dXJuIGlkYXdzOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZTFmNTQ2NS4uMGIyZjgyOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtNDIsNCArNDIsMTEgQEAKIAlfX3U2NCBmcHJzWzE2XTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDNjNTVlNDEuLmM2ZTY3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMSw5ICsyMSw2IEBACiAvKiBtZW1vcnkgc2xvdHMgdGhhdCBkb2VzIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLX07Ci0KIHN0cnVjdCBzY2FfZW50cnkgewogCWF0b21pY190IHNjbjsKIAlfX3U2NAlyZXNlcnZlZDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCmluZGV4IGYzNzIwZGUuLmIzNDlmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaApAQCAtMTEsMTI5ICsxMSwxMTggQEAKICNpZm5kZWYgX0FTTV9TMzkwX0xPV0NPUkVfSAogI2RlZmluZSBfQVNNX1MzOTBfTE9XQ09SRV9ICiAKLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIF9fTENfRVhUX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAyMAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDI4Ci0jZGVmaW5lIF9fTENfTUNLX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAzOAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDU4Ci0jZGVmaW5lIF9fTENfU1ZDX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2OAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDcwCi0jZGVmaW5lIF9fTENfSU9fTkVXX1BTVyAgICAgICAgICAgICAgICAgMHgwNzgKLSNlbHNlIC8qICFfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNDAKLSNkZWZpbmUgX19MQ19QR01fT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNTAKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAxNzAKLSNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYzAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZDAKLSNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDAxZjAKLSNlbmRpZiAvKiAhX19zMzkweF9fICovCisjZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDAxNAorI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMJCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfQUREUkVTUwkJMHgwMDg0CisjZGVmaW5lIF9fTENfRVhUX0lOVF9DT0RFCQkweDAwODYKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAxNAotI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMgICAgICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwODQKLSNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4NgorI2RlZmluZSBfX0xDX1NWQ19JTEMJCQkweDAwODgKKyNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUJCTB4MDA4YQorI2RlZmluZSBfX0xDX1BHTV9JTEMJCQkweDAwOGMKKyNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUJCTB4MDA4ZQogCi0jZGVmaW5lIF9fTENfU1ZDX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwODgKLSNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4QQotI2RlZmluZSBfX0xDX1BHTV9JTEMgICAgICAgICAgICAgICAgICAgIDB4MDhDCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFICAgICAgICAgICAgICAgMHgwOEUKKyNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDAwOTYKKyNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwMDk4CisjZGVmaW5lIF9fTENfUEVSX0FDQ0VTU19JRAkJMHgwMGExCisjZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MDBhMwogCi0jZGVmaW5lIF9fTENfUEVSX0FUTUlECQkJMHgwOTYKLSNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDBBMQotI2RlZmluZSBfX0xDX0FSX01PREVfSUQJCQkweDBBMworI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQJCTB4MDBiOAorI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIJCTB4MDBiYQorI2RlZmluZSBfX0xDX0lPX0lOVF9QQVJNCQkweDAwYmMKKyNkZWZpbmUgX19MQ19JT19JTlRfV09SRAkJMHgwMGMwCisjZGVmaW5lIF9fTENfTUNDS19DT0RFCQkJMHgwMGU4CiAKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lEICAgICAgICAgICAgICAweDBCOAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIgICAgICAgICAgICAgIDB4MEJBCi0jZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0gICAgICAgICAgICAgICAgMHgwQkMKLSNkZWZpbmUgX19MQ19JT19JTlRfV09SRCAgICAgICAgICAgICAgICAweDBDMAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERSAgICAgICAgICAgICAgICAgIDB4MEU4Ci0KLSNkZWZpbmUgX19MQ19MQVNUX0JSRUFLIAkJMHgxMTAKLQotI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cgICAgICAgICAgICAgICAgIDB4MjAwCi0KLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEgICAgICAgICAgICAgICAgICAweEMwMAorI2RlZmluZSBfX0xDX0RVTVBfUkVJUEwJCQkweDBlMDAKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIwOAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjQ4Ci0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjU4Ci0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI2OAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4Mjg4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhDNDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhDNDQKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEM0OAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEM0QwotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4QzUwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhDNTQKLSNkZWZpbmUgX19MQ19DUFVJRCAgICAgICAgICAgICAgICAgICAgICAweEM2MAotI2RlZmluZSBfX0xDX0NQVUFERFIgICAgICAgICAgICAgICAgICAgIDB4QzY4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhDN0MKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhDOTAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweEM5OAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4CisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4CisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzMDAKKyNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgwMDgwCisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDAwZDgKKyNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDAwZTAKKyNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDAxMDAKKyNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDAxMDgKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MDEyMAorI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MDE2MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MDE4MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgwMWMwCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIxMAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI4MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4OAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4MjkwCi0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhENDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhENDgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ1MAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEQ1OAotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4RDYwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhENjgKLSNkZWZpbmUgX19MQ19DUFVJRAkJCTB4RDgwCi0jZGVmaW5lIF9fTENfQ1BVQUREUgkJCTB4RDg4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhEQjgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhERDgKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweERFOAotI2RlZmluZSBfX0xDX1ZEU09fUEVSX0NQVQkJMHhFMzgKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQotI2RlZmluZSBfX0xDX1BBU1RFCQkJMHhFNDAKLQotI2RlZmluZSBfX0xDX1BBTklDX01BR0lDCQkweEUwMAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTSAgICAgICAgICAgICAweDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MEQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwRTAKLSNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEwMAotI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDE2MAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTgwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxQzAKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsJCQkweDAxMTAKKyNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVwkJMHgwMTMwCisjZGVmaW5lIF9fTENfU1ZDX09MRF9QU1cJCTB4MDE0MAorI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXCQkweDAxNTAKKyNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVwkJMHgwMTYwCisjZGVmaW5lIF9fTENfSU9fT0xEX1BTVwkJCTB4MDE3MAorI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKKyNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCisjZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAorI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKKyNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCisjZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCisjZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAorI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCisjZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCisjZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAorI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4CisjZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKKyNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4CisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKKyNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCisjZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAorI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCisjZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAorI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKKyNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4CisjZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCisjZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAorI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCisjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCisjZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzODAKKyNkZWZpbmUgX19MQ19QQVNURQkJCTB4MDNjMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDExYjgKICNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDEyMDAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBICAgICAgICAgICAweDEyODAKKyNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDEyODAKICNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEzMDAKICNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDEzMTgKLSNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFDCisjZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwogI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MTMyOAorI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4CiAjZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzQwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzgwCisjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKKyNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMTk4LDIyMiArMTg3LDI0MCBAQAogc3RydWN0IF9sb3djb3JlCiB7CiAjaWZuZGVmIF9fczM5MHhfXwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgwMTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDAyMCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MDI4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgwMzAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDAzOCAqLwotCV9fdTggICAgICAgICBwYWQxWzB4NTgtMHg0MF07ICAgICAgICAgIC8qIDB4MDQwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX25ld19wc3c7ICAgICAgICAgLyogMHgwNTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX25ld19wc3c7ICAgICAgICAgICAgICAvKiAweDA2MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX25ld19wc3c7ICAgICAgICAgIC8qIDB4MDY4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfbmV3X3BzdzsgICAgICAgICAgICAgLyogMHgwNzAgKi8KLQlwc3dfdCAgICAgICAgaW9fbmV3X3BzdzsgICAgICAgICAgICAgICAvKiAweDA3OCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCV9fdTMyICAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191MzIgICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3U4ICAgICAgICAgZXhjX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMCAqLwotCV9fdTggICAgICAgICBwZXJfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGExICovCi0JX191OCAgICAgICAgIHBhZDJbMHhCOC0weEEyXTsgICAgICAgICAgLyogMHgwYTIgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTgJICAgICBwYWQzWzB4YzgtMHhjNF07CSAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyCSAgICAgc3RmbF9mYWNfbGlzdDsJICAgICAgIC8qIDB4MGM4ICovCi0JX191OAkgICAgIHBhZDRbMHhkNC0weGNjXTsJICAgICAgIC8qIDB4MGNjICovCi0JX191MzIgICAgICAgIGV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOyAgLyogMHgwZDQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAvKiAweDBkOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgIC8qIDB4MGUwICovCi0JX191MzIgICAgICAgIG1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07IC8qIDB4MGU4ICovCi0JX191OAkgICAgIHBhZDVbMHhmNC0weGYwXTsJICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlfX3UzMiAgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTgJICAgICBwYWQ2WzB4MTAwLTB4ZmNdOwkgICAgICAgLyogMHgwZmMgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsvKiAweDEwMCAqLwotCV9fdTgJICAgICBwYWQ3WzB4MTIwLTB4MTEwXTsgICAgICAgIC8qIDB4MTEwICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07LyogMHgxMjAgKi8KLQlfX3UzMiAgICAgICAgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOyAvKiAweDE2MCAqLwotCV9fdTMyICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgIC8qIDB4MTgwICovCi0JX191MzIgICAgICAgIGNyZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxYzAgKi8JCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLworCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJZXh0ZXJuYWxfb2xkX3BzdzsJCS8qIDB4MDAxOCAqLworCXBzd190CXN2Y19vbGRfcHN3OwkJCS8qIDB4MDAyMCAqLworCXBzd190CXByb2dyYW1fb2xkX3BzdzsJCS8qIDB4MDAyOCAqLworCXBzd190CW1jY2tfb2xkX3BzdzsJCQkvKiAweDAwMzAgKi8KKwlwc3dfdAlpb19vbGRfcHN3OwkJCS8qIDB4MDAzOCAqLworCV9fdTgJcGFkXzB4MDA0MFsweDAwNTgtMHgwMDQwXTsJLyogMHgwMDQwICovCisJcHN3X3QJZXh0ZXJuYWxfbmV3X3BzdzsJCS8qIDB4MDA1OCAqLworCXBzd190CXN2Y19uZXdfcHN3OwkJCS8qIDB4MDA2MCAqLworCXBzd190CXByb2dyYW1fbmV3X3BzdzsJCS8qIDB4MDA2OCAqLworCXBzd190CW1jY2tfbmV3X3BzdzsJCQkvKiAweDAwNzAgKi8KKwlwc3dfdAlpb19uZXdfcHN3OwkJCS8qIDB4MDA3OCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMgl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwOTAgKi8KKwlfX3UxNgltb25fY2xhc3NfbnVtOwkJCS8qIDB4MDA5NCAqLworCV9fdTE2CXBlcl9wZXJjX2F0bWlkOwkJCS8qIDB4MDA5NiAqLworCV9fdTMyCXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTMyCW1vbml0b3JfY29kZTsJCQkvKiAweDAwOWMgKi8KKwlfX3U4CWV4Y19hY2Nlc3NfaWQ7CQkJLyogMHgwMGEwICovCisJX191OAlwZXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMSAqLworCV9fdTgJcGFkXzB4MDBhMlsweDAwYjgtMHgwMGEyXTsJLyogMHgwMGEyICovCisJX191MTYJc3ViY2hhbm5lbF9pZDsJCQkvKiAweDAwYjggKi8KKwlfX3UxNglzdWJjaGFubmVsX25yOwkJCS8qIDB4MDBiYSAqLworCV9fdTMyCWlvX2ludF9wYXJtOwkJCS8qIDB4MDBiYyAqLworCV9fdTMyCWlvX2ludF93b3JkOwkJCS8qIDB4MDBjMCAqLworCV9fdTgJcGFkXzB4MDBjNFsweDAwYzgtMHgwMGM0XTsJLyogMHgwMGM0ICovCisJX191MzIJc3RmbF9mYWNfbGlzdDsJCQkvKiAweDAwYzggKi8KKwlfX3U4CXBhZF8weDAwY2NbMHgwMGQ0LTB4MDBjY107CS8qIDB4MDBjYyAqLworCV9fdTMyCWV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwkvKiAweDAwZDQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgwMGQ4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MDBlMCAqLworCV9fdTMyCW1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07CS8qIDB4MDBlOCAqLworCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCisJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KKwlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KKwlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KKwlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLwogCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMDggKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNjggKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyODggKi8KLQlfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDI5MF07ICAgICAgICAvKiAweDI5MCAqLworCS8qIENQVSByZWdpc3RlciBzYXZlIGFyZWE6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgwMTIwICovCisJX191MzIJZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOwkvKiAweDAxNjAgKi8KKwlfX3UzMglncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDE4MCAqLworCV9fdTMyCWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDAxYzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191MzIgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLQlfX3UzMiAgICAgICAga2VybmVsX3N0YWNrOyAgICAgICAgICAgICAvKiAweGM0MCAqLwotCV9fdTMyICAgICAgICB0aHJlYWRfaW5mbzsgICAgICAgICAgICAgIC8qIDB4YzQ0ICovCi0JX191MzIgICAgICAgIGFzeW5jX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNDggKi8KLQlfX3UzMiAgICAgICAga2VybmVsX2FzY2U7ICAgICAgICAgICAgICAvKiAweGM0YyAqLwotCV9fdTMyICAgICAgICB1c2VyX2FzY2U7ICAgICAgICAgICAgICAgIC8qIDB4YzUwICovCi0JX191MzIgICAgICAgIHBhbmljX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNTQgKi8KLQlfX3UzMgkgICAgIHVzZXJfZXhlY19hc2NlOwkgICAgICAgLyogMHhjNTggKi8KLQlfX3U4CSAgICAgcGFkMTBbMHhjNjAtMHhjNWNdOyAgICAgICAvKiAweGM1YyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgc3RhcnQgKi8KLQlzdHJ1Y3QgICAgICAgY3B1aW5mb19TMzkwIGNwdV9kYXRhOyAgICAvKiAweGM2MCAqLwotCV9fdTMyICAgICAgICBpcGxfZGV2aWNlOyAgICAgICAgICAgICAgIC8qIDB4YzdjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiBSZXR1cm4gcHN3cy4gKi8KKwlfX3UzMglzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjQwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjQ4ICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGM4MCAqLwotCV9fdTMyICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4Yzg4ICovCi0JX191MzIgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhjOGMgKi8KLQlfX3UzMiAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhjOTAgKi8KLQlfX3UzMiAgICAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhjOTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGM5OCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTFbMHhlMDAtMHhjYTBdOyAgICAgICAvKiAweGNhMCAqLworCS8qIENQVSB0aW1lIGFjY291bnRpbmcgdmFsdWVzICovCisJX191NjQJc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDI1MCAqLworCV9fdTY0CWFzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjU4ICovCisJX191NjQJZXhpdF90aW1lcjsJCQkvKiAweDAyNjAgKi8KKwlfX3U2NAl1c2VyX3RpbWVyOwkJCS8qIDB4MDI2OCAqLworCV9fdTY0CXN5c3RlbV90aW1lcjsJCQkvKiAweDAyNzAgKi8KKwlfX3U2NAlzdGVhbF90aW1lcjsJCQkvKiAweDAyNzggKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV90aW1lcjsJCS8qIDB4MDI4MCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX2Nsb2NrOwkJLyogMHgwMjg4ICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3UzMgljdXJyZW50X3Rhc2s7CQkJLyogMHgwMjkwICovCisJX191MzIJdGhyZWFkX2luZm87CQkJLyogMHgwMjk0ICovCisJX191MzIJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDI5OCAqLwogCi0gICAgICAgIC8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KLQlfX3U4ICAgICAgICAgcGFkMTJbMHgxMDAwLTB4ZTA0XTsgICAgICAvKiAweGUwNCAqLworCS8qIEludGVycnVwdCBhbmQgcGFuaWMgc3RhY2suICovCisJX191MzIJYXN5bmNfc3RhY2s7CQkJLyogMHgwMjljICovCisJX191MzIJcGFuaWNfc3RhY2s7CQkJLyogMHgwMmEwICovCisKKwkvKiBBZGRyZXNzIHNwYWNlIHBvaW50ZXIuICovCisJX191MzIJa2VybmVsX2FzY2U7CQkJLyogMHgwMmE0ICovCisJX191MzIJdXNlcl9hc2NlOwkJCS8qIDB4MDJhOCAqLworCV9fdTMyCXVzZXJfZXhlY19hc2NlOwkJCS8qIDB4MDJhYyAqLworCisJLyogU01QIGluZm8gYXJlYSAqLworCWNwdWlkX3QJY3B1X2lkOwkJCQkvKiAweDAyYjAgKi8KKwlfX3UzMgljcHVfbnI7CQkJCS8qIDB4MDJiOCAqLworCV9fdTMyCXNvZnRpcnFfcGVuZGluZzsJCS8qIDB4MDJiYyAqLworCV9fdTMyCXBlcmNwdV9vZmZzZXQ7CQkJLyogMHgwMmMwICovCisJX191MzIJZXh0X2NhbGxfZmFzdDsJCQkvKiAweDAyYzQgKi8KKwlfX3U2NAlpbnRfY2xvY2s7CQkJLyogMHgwMmM4ICovCisJX191NjQJY2xvY2tfY29tcGFyYXRvcjsJCS8qIDB4MDJkMCAqLworCV9fdTgJcGFkXzB4MDJkOFsweDAzMDAtMHgwMmQ4XTsJLyogMHgwMmQ4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgKi8KKwlfX3U4CWlyYls2NF07CQkJLyogMHgwMzAwICovCisKKwlfX3U4CXBhZF8weDA0MDBbMHgwZTAwLTB4MDQwMF07CS8qIDB4MDQwMCAqLworCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191MzIJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDQgKi8KKworCS8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KKwlfX3U4CXBhZF8weDBlMDhbMHgxMDAwLTB4MGUwOF07CS8qIDB4MGUwOCAqLwogI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlfX3UzMiAgICAgICAgY2N3MVsyXTsgICAgICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg4MC0weDE4XTsgICAgICAgICAgLyogMHgwMTggKi8KLQlfX3UzMiAgICAgICAgZXh0X3BhcmFtczsgICAgICAgICAgICAgICAvKiAweDA4MCAqLwotCV9fdTE2ICAgICAgICBjcHVfYWRkcjsgICAgICAgICAgICAgICAgIC8qIDB4MDg0ICovCi0JX191MTYgICAgICAgIGV4dF9pbnRfY29kZTsgICAgICAgICAgICAgLyogMHgwODYgKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwODggKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGEgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwOGMgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGUgKi8KLQlfX3UzMiAgICAgICAgZGF0YV9leGNfY29kZTsgICAgICAgICAgICAvKiAweDA5MCAqLwotCV9fdTE2ICAgICAgICBtb25fY2xhc3NfbnVtOyAgICAgICAgICAgIC8qIDB4MDk0ICovCi0JX191MTYgICAgICAgIHBlcl9wZXJjX2F0bWlkOyAgICAgICAgICAgLyogMHgwOTYgKi8KLQlhZGRyX3QgICAgICAgcGVyX2FkZHJlc3M7ICAgICAgICAgICAgICAvKiAweDA5OCAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgb3BfYWNjZXNzX2lkOyAgICAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTggICAgICAgICBhcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEzICovCi0JX191OCAgICAgICAgIHBhZDJbMHhBOC0weEE0XTsgICAgICAgICAgLyogMHgwYTQgKi8KLQlhZGRyX3QgICAgICAgdHJhbnNfZXhjX2NvZGU7ICAgICAgICAgICAvKiAweDBBMCAqLwotCWFkZHJfdCAgICAgICBtb25pdG9yX2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDljICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfaWQ7ICAgICAgICAgICAgLyogMHgwYjggKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9ucjsgICAgICAgICAgICAvKiAweDBiYSAqLwotCV9fdTMyICAgICAgICBpb19pbnRfcGFybTsgICAgICAgICAgICAgIC8qIDB4MGJjICovCi0JX191MzIgICAgICAgIGlvX2ludF93b3JkOyAgICAgICAgICAgICAgLyogMHgwYzAgKi8KLQlfX3U4ICAgICAgICAgcGFkM1sweGM4LTB4YzRdOyAgICAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyICAgICAgICBzdGZsX2ZhY19saXN0OyAgICAgICAgICAgIC8qIDB4MGM4ICovCi0JX191OCAgICAgICAgIHBhZDRbMHhlOC0weGNjXTsgICAgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4ICAgICAgICAgcGFkNVsweGY0LTB4ZjBdOyAgICAgICAgICAvKiAweDBmMCAqLwotCV9fdTMyICAgICAgICBleHRlcm5hbF9kYW1hZ2VfY29kZTsgICAgIC8qIDB4MGY0ICovCi0JYWRkcl90ICAgICAgIGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOyAgLyogMHgwZjggKi8KLQlfX3U4ICAgICAgICAgcGFkNlsweDEyMC0weDEwMF07ICAgICAgICAvKiAweDEwMCAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTIwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgxMzAgKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDE0MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTUwICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgxNjAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDE3MCAqLwotCV9fdTggICAgICAgICBwYWQ3WzB4MWEwLTB4MTgwXTsgICAgICAgIC8qIDB4MTgwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfcHN3OyAgICAgICAgICAgICAgLyogMHgxYTAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDFiMCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MWMwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgxZDAgKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDFlMCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MWYwICovCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMTAgKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI1MCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjU4ICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNjAgKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyODAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODggKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyOTAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDhbMHhjMDAtMHgyYTBdOyAgICAgICAgLyogMHgyYTAgKi8KLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLwotCV9fdTY0ICAgICAgICBzYXZlX2FyZWFbMTZdOyAgICAgICAgICAgIC8qIDB4YzAwICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQ5WzB4ZDQwLTB4YzgwXTsgICAgICAgIC8qIDB4YzgwICovCi0gCV9fdTY0ICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4ZDQwICovCi0JX191NjQgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhkNDggKi8KLQlfX3U2NCAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ1MCAqLwotCV9fdTY0ICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4ZDU4ICovCi0JX191NjQgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhkNjAgKi8KLQlfX3U2NCAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ2OCAqLwotCV9fdTY0CSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGQ3MCAqLwotCV9fdTgJICAgICBwYWQxMFsweGQ4MC0weGQ3OF07ICAgICAgIC8qIDB4ZDc4ICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4ZDgwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhkYjggKi8KLQlfX3UzMiAgICAgICAgcGFkMTE7ICAgICAgICAgICAgICAgICAgICAvKiAweGRiYyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgZW5kICovCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlfX3U4CXBhZF8weDAwMThbMHgwMDgwLTB4MDAxOF07CS8qIDB4MDAxOCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMglkYXRhX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJYWRkcl90CXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlvcF9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEyICovCisJX191OAlhcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEzICovCisJX191OAlwYWRfMHgwMGE0WzB4MDBhOC0weDAwYTRdOwkvKiAweDAwYTQgKi8KKwlhZGRyX3QJdHJhbnNfZXhjX2NvZGU7CQkJLyogMHgwMGE4ICovCisJYWRkcl90CW1vbml0b3JfY29kZTsJCQkvKiAweDAwYjAgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZTgtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCWFkZHJfdAlmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMTAwWzB4MDEyMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMTUwICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDE2MCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMTcwICovCisJX191OAlwYWRfMHgwMTgwWzB4MDFhMC0weDAxODBdOwkvKiAweDAxODAgKi8KKwlwc3dfdAlyZXN0YXJ0X3BzdzsJCQkvKiAweDAxYTAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMWIwICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMWMwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMWQwICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDFlMCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMWYwICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGRjMCAqLwotCV9fdTY0ICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4ZGM4ICovCi0JX191NjQgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhkZDAgKi8KLQlfX3U2NCAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhkZDggKi8KLQlfX3UzMgkgICAgIHNvZnRpcnFfcGVuZGluZzsJICAgICAgIC8qIDB4ZGUwICovCi0JX191MzIJICAgICBwYWRfMHgwZGU0OwkgICAgICAgLyogMHhkZTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGRlOCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTJbMHhlMDAtMHhkZjBdOyAgICAgICAvKiAweGRmMCAqLworCS8qIEVudHJ5L2V4aXQgc2F2ZSBhcmVhICYgcmV0dXJuIHBzd3MuICovCisJX191NjQJc2F2ZV9hcmVhWzE2XTsJCQkvKiAweDAyMDAgKi8KKwlwc3dfdAlyZXR1cm5fcHN3OwkJCS8qIDB4MDI4MCAqLworCXBzd190CXJldHVybl9tY2NrX3BzdzsJCS8qIDB4MDI5MCAqLwogCi0gICAgICAgIC8qIDB4ZTAwIGlzIHVzZWQgYXMgaW5kaWNhdG9yIGZvciBkdW1wIHRvb2xzICovCi0gICAgICAgIC8qIHdoZXRoZXIgdGhlIGtlcm5lbCBkaWVkIHdpdGggcGFuaWMoKSBvciBub3QgKi8KLSAgICAgICAgX191MzIgICAgICAgIHBhbmljX21hZ2ljOyAgICAgICAgICAgICAgLyogMHhlMDAgKi8KKwkvKiBDUFUgYWNjb3VudGluZyBhbmQgdGltaW5nIHZhbHVlcy4gKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMmEwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDJiMCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMmI4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDJjMCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDJjOCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMmQwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyZDggKi8KKworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3U2NAljdXJyZW50X3Rhc2s7CQkJLyogMHgwMmUwICovCisJX191NjQJdGhyZWFkX2luZm87CQkJLyogMHgwMmU4ICovCisJX191NjQJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDJmMCAqLworCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3U2NAlhc3luY19zdGFjazsJCQkvKiAweDAyZjggKi8KKwlfX3U2NAlwYW5pY19zdGFjazsJCQkvKiAweDAzMDAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3U2NAlrZXJuZWxfYXNjZTsJCQkvKiAweDAzMDggKi8KKwlfX3U2NAl1c2VyX2FzY2U7CQkJLyogMHgwMzEwICovCisJX191NjQJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMzE4ICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDMyMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMzI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMzJjICovCisJX191NjQJcGVyY3B1X29mZnNldDsJCQkvKiAweDAzMzAgKi8KKwlfX3U2NAlleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDMzOCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAzNDAgKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMzQ4ICovCisJX191NjQJdmRzb19wZXJfY3B1X2RhdGE7CQkvKiAweDAzNTAgKi8KKwlfX3U4CXBhZF8weDAzNThbMHgwMzgwLTB4MDM1OF07CS8qIDB4MDM1OCAqLworCisJLyogSW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrLiAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzODAgKi8KIAogCS8qIFBlciBjcHUgcHJpbWFyeSBzcGFjZSBhY2Nlc3MgbGlzdCAqLwotCV9fdTgJICAgICBwYWRfMHhlMDRbMHhlMzgtMHhlMDRdOyAgIC8qIDB4ZTA0ICovCi0JX191NjQJICAgICB2ZHNvX3Blcl9jcHVfZGF0YTsJICAgICAgIC8qIDB4ZTM4ICovCi0JX191MzIJICAgICBwYXN0ZVsxNl07CQkgICAgICAgLyogMHhlNDAgKi8KKwlfX3UzMglwYXN0ZVsxNl07CQkJLyogMHgwM2MwICovCiAKLQlfX3U4CSAgICAgcGFkMTNbMHgxMWI4LTB4ZTgwXTsgICAgICAvKiAweGU4MCAqLworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCiAKLQkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0LCBkaWFnIDI1MCBldGMgICovCi0JX191NjQgICAgICAgIGV4dF9wYXJhbXMyOyAgICAgICAgICAgICAgIC8qIDB4MTFCOCAqLworCS8qCisJICogMHhlMDAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIElQTCBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KKwkgKiBibG9jay4gRHVtcCB0b29scyBuZWVkIElQSUIgZm9yIElQTCBhZnRlciBkdW1wLgorCSAqIE5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIGFueSBmaWVsZHMgaW4gMHgwZTAwLTB4MGYwMAorCSAqLworCV9fdTY0CWlwaWI7CQkJCS8qIDB4MGUwMCAqLworCV9fdTMyCWlwaWJfY2hlY2tzdW07CQkJLyogMHgwZTA4ICovCisJX191OAlwYWRfMHgwZTBjWzB4MTFiOC0weDBlMGNdOwkvKiAweDBlMGMgKi8KIAotCV9fdTggICAgICAgICBwYWQxNFsweDEyMDAtMHgxMUMwXTsgICAgICAvKiAweDExQzAgKi8KKwkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0L2RpYWcgMjUwOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWV4dF9wYXJhbXMyOwkJCS8qIDB4MTFCOCAqLworCV9fdTgJcGFkXzB4MTFjMFsweDEyMDAtMHgxMUMwXTsJLyogMHgxMUMwICovCiAKLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLyAKLQotCV9fdTY0ICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOyAvKiAweDEyMDAgKi8KLQlfX3U2NCAgICAgICAgZ3ByZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxMjgwICovCi0JX191MzIgICAgICAgIHN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07IC8qIDB4MTMwMCAqLwotCV9fdTggICAgICAgICBwYWQxNVsweDEzMTgtMHgxMzEwXTsgICAgICAvKiAweDEzMTAgKi8KLQlfX3UzMiAgICAgICAgcHJlZml4cmVnX3NhdmVfYXJlYTsgICAgICAgLyogMHgxMzE4ICovCi0JX191MzIgICAgICAgIGZwdF9jcmVnX3NhdmVfYXJlYTsgICAgICAgIC8qIDB4MTMxYyAqLwotCV9fdTggICAgICAgICBwYWQxNlsweDEzMjQtMHgxMzIwXTsgICAgICAvKiAweDEzMjAgKi8KLQlfX3UzMiAgICAgICAgdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOyAgICAgLyogMHgxMzI0ICovCi0JX191MzIgICAgICAgIGNwdV90aW1lcl9zYXZlX2FyZWFbMl07ICAgIC8qIDB4MTMyOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgICAvKiAweDEzMzAgKi8KLQlfX3U4ICAgICAgICAgcGFkMTdbMHgxMzQwLTB4MTMzOF07ICAgICAgLyogMHgxMzM4ICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07IC8qIDB4MTM0MCAqLyAKLQlfX3U2NCAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAgLyogMHgxMzgwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3U2NAlmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOwkvKiAweDEyMDAgKi8KKwlfX3U2NAlncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTI4MCAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MTMwMCAqLworCV9fdTgJcGFkXzB4MTMxMFsweDEzMTgtMHgxMzEwXTsJLyogMHgxMzEwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxOCAqLworCV9fdTMyCWZwdF9jcmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxYyAqLworCV9fdTgJcGFkXzB4MTMyMFsweDEzMjQtMHgxMzIwXTsJLyogMHgxMzIwICovCisJX191MzIJdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzI0ICovCisJX191MzIJY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsJCS8qIDB4MTMyOCAqLworCV9fdTMyCWNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOwkvKiAweDEzMzAgKi8KKwlfX3U4CXBhZF8weDEzMzhbMHgxMzQwLTB4MTMzOF07CS8qIDB4MTMzOCAqLworCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MTM0MCAqLworCV9fdTY0CWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDEzODAgKi8KIAogCS8qIGFsaWduIHRvIHRoZSB0b3Agb2YgdGhlIHByZWZpeCBhcmVhICovCi0KLQlfX3U4ICAgICAgICAgcGFkMThbMHgyMDAwLTB4MTQwMF07ICAgICAgLyogMHgxNDAwICovCisJX191OAlwYWRfMHgxNDAwWzB4MjAwMC0weDE0MDBdOwkvKiAweDE0MDAgKi8KICNlbmRpZiAvKiAhX19zMzkweF9fICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvKiBFbmQgc3RydWN0dXJlKi8KIApAQCAtNDMzLDggKzQ0MCw2IEBACiAJcmV0dXJuIGFkZHJlc3M7CiB9CiAKLSNkZWZpbmUgX19QQU5JQ19NQUdJQyAgICAgICAgICAgMHhERUFEQzBERQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDI4ZWM4NzAuLmZjN2VkZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC03NCw3ICs3NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCiAJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0KSk7CiAJdXBkYXRlX21tKG5leHQsIHRzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ubWkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ubWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI2MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlciBkZWZpbml0aW9ucworICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9OTUlfSAorI2RlZmluZSBfQVNNX1MzOTBfTk1JX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBtY2kgeworCV9fdTMyIHNkIDogIDE7IC8qIDAwIHN5c3RlbSBkYW1hZ2UgKi8KKwlfX3UzMiBwZCA6ICAxOyAvKiAwMSBpbnN0cnVjdGlvbi1wcm9jZXNzaW5nIGRhbWFnZSAqLworCV9fdTMyIHNyIDogIDE7IC8qIDAyIHN5c3RlbSByZWNvdmVyeSAqLworCV9fdTMyCSA6ICAxOyAvKiAwMyAqLworCV9fdTMyIGNkIDogIDE7IC8qIDA0IHRpbWluZy1mYWNpbGl0eSBkYW1hZ2UgKi8KKwlfX3UzMiBlZCA6ICAxOyAvKiAwNSBleHRlcm5hbCBkYW1hZ2UgKi8KKwlfX3UzMgkgOiAgMTsgLyogMDYgKi8KKwlfX3UzMiBkZyA6ICAxOyAvKiAwNyBkZWdyYWRhdGlvbiAqLworCV9fdTMyIHcgIDogIDE7IC8qIDA4IHdhcm5pbmcgcGVuZGluZyAqLworCV9fdTMyIGNwIDogIDE7IC8qIDA5IGNoYW5uZWwtcmVwb3J0IHBlbmRpbmcgKi8KKwlfX3UzMiBzcCA6ICAxOyAvKiAxMCBzZXJ2aWNlLXByb2Nlc3NvciBkYW1hZ2UgKi8KKwlfX3UzMiBjayA6ICAxOyAvKiAxMSBjaGFubmVsLXN1YnN5c3RlbSBkYW1hZ2UgKi8KKwlfX3UzMgkgOiAgMjsgLyogMTItMTMgKi8KKwlfX3UzMiBiICA6ICAxOyAvKiAxNCBiYWNrZWQgdXAgKi8KKwlfX3UzMgkgOiAgMTsgLyogMTUgKi8KKwlfX3UzMiBzZSA6ICAxOyAvKiAxNiBzdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCisJX191MzIgc2MgOiAgMTsgLyogMTcgc3RvcmFnZSBlcnJvciBjb3JyZWN0ZWQgKi8KKwlfX3UzMiBrZSA6ICAxOyAvKiAxOCBzdG9yYWdlLWtleSBlcnJvciB1bmNvcnJlY3RlZCAqLworCV9fdTMyIGRzIDogIDE7IC8qIDE5IHN0b3JhZ2UgZGVncmFkYXRpb24gKi8KKwlfX3UzMiB3cCA6ICAxOyAvKiAyMCBwc3cgbXdwIHZhbGlkaXR5ICovCisJX191MzIgbXMgOiAgMTsgLyogMjEgcHN3IG1hc2sgYW5kIGtleSB2YWxpZGl0eSAqLworCV9fdTMyIHBtIDogIDE7IC8qIDIyIHBzdyBwcm9ncmFtIG1hc2sgYW5kIGNjIHZhbGlkaXR5ICovCisJX191MzIgaWEgOiAgMTsgLyogMjMgcHN3IGluc3RydWN0aW9uIGFkZHJlc3MgdmFsaWRpdHkgKi8KKwlfX3UzMiBmYSA6ICAxOyAvKiAyNCBmYWlsaW5nIHN0b3JhZ2UgYWRkcmVzcyB2YWxpZGl0eSAqLworCV9fdTMyCSA6ICAxOyAvKiAyNSAqLworCV9fdTMyIGVjIDogIDE7IC8qIDI2IGV4dGVybmFsIGRhbWFnZSBjb2RlIHZhbGlkaXR5ICovCisJX191MzIgZnAgOiAgMTsgLyogMjcgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBnciA6ICAxOyAvKiAyOCBnZW5lcmFsIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgY3IgOiAgMTsgLyogMjkgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyCSA6ICAxOyAvKiAzMCAqLworCV9fdTMyIHN0IDogIDE7IC8qIDMxIHN0b3JhZ2UgbG9naWNhbCB2YWxpZGl0eSAqLworCV9fdTMyIGllIDogIDE7IC8qIDMyIGluZGlyZWN0IHN0b3JhZ2UgZXJyb3IgKi8KKwlfX3UzMiBhciA6ICAxOyAvKiAzMyBhY2Nlc3MgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBkYSA6ICAxOyAvKiAzNCBkZWxheWVkIGFjY2VzcyBleGNlcHRpb24gKi8KKwlfX3UzMgkgOiAgNzsgLyogMzUtNDEgKi8KKwlfX3UzMiBwciA6ICAxOyAvKiA0MiB0b2QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgZmMgOiAgMTsgLyogNDMgZnAgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGFwIDogIDE7IC8qIDQ0IGFuY2lsbGFyeSByZXBvcnQgKi8KKwlfX3UzMgkgOiAgMTsgLyogNDUgKi8KKwlfX3UzMiBjdCA6ICAxOyAvKiA0NiBjcHUgdGltZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBjYyA6ICAxOyAvKiA0NyBjbG9jayBjb21wYXJhdG9yIHZhbGlkaXR5ICovCisJX191MzIJIDogMTY7IC8qIDQ3LTYzICovCit9OworCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKK2V4dGVybiB2b2lkIHMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNlbmRpZiAvKiBfQVNNX1MzOTBfTk1JX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBkYjQ1MjNmLi42MTg2MmIzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC00MiwyMiArNDIsOCBAQAogCWFzbSB2b2xhdGlsZSgic3RpZHAgMCglMSkiIDogIj1tIiAoKnB0cikgOiAiYSIgKHB0cikpOwogfQogCi1zdHJ1Y3QgY3B1aW5mb19TMzkwCi17Ci0gICAgICAgIGNwdWlkX3QgIGNwdV9pZDsKLSAgICAgICAgX191MTYgICAgY3B1X2FkZHI7Ci0gICAgICAgIF9fdTE2ICAgIGNwdV9ucjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnBnZF9xdWljazsKLSNpZmRlZiBfX3MzOTB4X18KLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcG1kX3F1aWNrOwotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotICAgICAgICB1bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcGd0YWJsZV9jYWNoZV9zejsKLX07Ci0KIGV4dGVybiB2b2lkIHMzOTBfYWRqdXN0X2ppZmZpZXModm9pZCk7Ci1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb19TMzkwICopOworZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8odm9pZCk7CiBleHRlcm4gaW50IGdldF9jcHVfY2FwYWJpbGl0eSh1bnNpZ25lZCBpbnQgKik7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggODkyMDAyNS4uZjFiMDUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTcyLDYgKzE3Miw4IEBACiAjZGVmaW5lIE5VTV9DUlMJCTE2CiAjZGVmaW5lIE5VTV9BQ1JTCTE2CiAKKyNkZWZpbmUgTlVNX0NSX1dPUkRTCTMKKwogI2RlZmluZSBGUFJfU0laRQk4CiAjZGVmaW5lIEZQQ19TSVpFCTQKICNkZWZpbmUgRlBDX1BBRF9TSVpFCTQgLyogZ2NjIGluc2lzdHMgb24gYWxpZ25pbmcgdGhlIGZwcmVncyAqLwpAQCAtMzM0LDcgKzMzNiw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0JdW5zaWduZWQgbG9uZyBjclszXTsKKwl1bnNpZ25lZCBsb25nIGNyW05VTV9DUl9XT1JEU107CiB9IHBlcl9jcl93b3JkczsKIAogI2RlZmluZSBQRVJfRU1fTUFTSyAweEU4MDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDI3ZmMxNzQuLjQwMmQ2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMzE0LDYgKzMxNCw3IEBACiAJCQkgICAgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBxZGlvIGVycm9ycyByZXBvcnRlZCB0byB0aGUgdXBwZXItbGF5ZXIgcHJvZ3JhbSAqLworI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfVEFSR0VUCQkJMHgwMgogI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfQUNDRVNTX0VYQ0VQVElPTgkweDEwCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9CVVNZCQkJMHgyMAogI2RlZmluZSBRRElPX0VSUk9SX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTgkweDQwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMDI0YjkxZS4uMjAwOTE1OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNTAsMTIgKzUwLDcgQEAKICAKICNkZWZpbmUgUFJPQ19DSEFOR0VfUEVOQUxUWQkyMAkJLyogU2NoZWR1bGUgcGVuYWx0eSAqLwogCi0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfbnIpCi0KLXN0YXRpYyBpbmxpbmUgX191MTYgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JcmV0dXJuIHN0YXAoKTsKLX0KKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9ucikKIAogLyoKICAqIHJldHVybnMgMSBpZiBjcHUgaXMgaW4gc3RvcHBlZC9jaGVjayBzdG9wcGVkIHN0YXRlIG9yIG5vdCBvcGVyYXRpb25hbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGM3ODZhYjYuLjAyMzMwYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYyLDQgKzYyLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggZDA3NDY3My4uY2QwMjQxZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CiAJY2hhciAqcmV0ID0gZHN0OwogCkBAIC0xMDksMTAgKzExMCwxNCBAQAogCQk6ICIrJmEiIChkc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRzdCwgc3JjKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHIwIGFzbSgiMCIpID0gMDsKIAljb25zdCBjaGFyICp0bXAgPSBzOwogCkBAIC0xMjEsNiArMTI2LDkgQEAKIAkJIglqbwkwYiIKIAkJOiAiK2QiIChyMCksICIrYSIgKHRtcCkgOiAgOiAiY2MiKTsKIAlyZXR1cm4gcjAgLSAodW5zaWduZWQgbG9uZykgczsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4ocyk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pCkBAIC0xMzUsNyArMTQzLDEzIEBACiAJCTogIithIiAoZW5kKSwgIithIiAodG1wKSA6ICJkIiAocjApICA6ICJjYyIpOwogCXJldHVybiBlbmQgLSBzOwogfQotCisjZWxzZSAvKiBJTl9BUkNIX1NUUklOR19DICovCit2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqIHMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1zY2FuKHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CitjaGFyICpzdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcyk7CitzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pOwogI2VuZGlmIC8qICFJTl9BUkNIX1NUUklOR19DICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaAppbmRleCBhZDkzMjEyLi45ZDcwMDU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQljaGFyIHJlc2VydmVkXzFbMjRdOwogCiAJfSB2bVs4XTsKKwljaGFyIHJlc2VydmVkXzU0NFszNTUyXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGQ2MDM5NGIuLjMwNGNmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC01MSw3ICs1MSw3IEBACiAJICogSWYgdGhlIHByb2Nlc3Mgb25seSByYW4gb24gdGhlIGxvY2FsIGNwdSwgZG8gYSBsb2NhbCBmbHVzaC4KIAkgKi8KIAlsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKQorCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCAmbG9jYWxfY3B1bWFzaykpCiAJCV9fdGxiX2ZsdXNoX2xvY2FsKCk7CiAJZWxzZQogCQlfX3RsYl9mbHVzaF9nbG9iYWwoKTsKQEAgLTczLDcgKzczLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2ZsdXNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKIHsKLQlpZiAodW5saWtlbHkoY3B1c19lbXB0eShtbS0+Y3B1X3ZtX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShtbV9jcHVtYXNrKG1tKSkpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBJZiB0aGUgbWFjaGluZSBoYXMgSURURSB3ZSBwcmVmZXIgdG8gZG8gYSBwZXIgbW0gZmx1c2gKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYzk3OWMzYi4uNWUwYWQ2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTUsNyArNSw2IEBACiAKICNkZWZpbmUgbWNfY2FwYWJsZSgpCSgxKQogCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSk7CiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKHVuc2lnbmVkIGludCBjcHUpOwogCiBleHRlcm4gY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCmluZGV4IDNhNTI2N2QuLjg0MDZhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaApAQCAtMzksNyArMzksNyBAQAogCV9fdTE2IGRheTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwKIHsKIAljaGFyIHZvbGtleVs0XTsJCS8qIHZvbHVtZSBrZXkgPSB2b2x1bWUgbGFiZWwgKi8KIAljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLwpAQCAtNTYsNiArNTYsMTQgQEAKIAljaGFyIHJlczNbMjldOwkJLyogcmVzZXJ2ZWQgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIHsKKwljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLworCWNoYXIgdm9saWRbNl07CQkvKiB2b2x1bWUgaWRlbnRpZmllciAqLworCWNoYXIgcmVzM1s2OV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgbGRsX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyLCB2YWxpZCBmb3IgbGRsIGZvcm1hdCAqLworCV9fdTY0IGZvcm1hdHRlZF9ibG9ja3M7IC8qIHZhbGlkIHdoZW4gbGRsX3ZlcnNpb24gPj0gZjIgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHZ0b2NfZXh0ZW50CiB7CiAJX191OCB0eXBlaW5kOwkJCS8qIGV4dGVudCB0eXBlIGluZGljYXRvciAqLwpAQCAtMTQwLDcgKzE0OCwxMSBAQAogCWNoYXIgcmVzMlsxMF07CQkvKiByZXNlcnZlZCAqLwogCV9fdTggRFM0RUZMVkw7CQkvKiBleHRlbmRlZCBmcmVlLXNwYWNlIG1hbmFnZW1lbnQgbGV2ZWwgKi8KIAlzdHJ1Y3QgdnRvY19jY2hoYiBEUzRFRlBUUjsgLyogcG9pbnRlciB0byBleHRlbmRlZCBmcmVlLXNwYWNlIGluZm8gKi8KLQljaGFyIHJlczNbOV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgcmVzMzsJCS8qIHJlc2VydmVkICovCisJX191MzIgRFM0RENZTDsJCS8qIG51bWJlciBvZiBsb2dpY2FsIGN5bHMgKi8KKwljaGFyIHJlczRbMl07CQkvKiByZXNlcnZlZCAqLworCV9fdTggRFM0REVWRjI7CQkvKiBkZXZpY2UgZmxhZ3MgKi8KKwljaGFyIHJlczU7CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB2dG9jX2RzNWV4dApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggM2VkYzZjNi4uMjI4ZTMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCkBAIC0xNywxMCArMTcsMTIgQEAKICMKIENGTEFHU19wdHJhY2UubwkJKz0gLURVVFNfTUFDSElORT0nIiQoVVRTX01BQ0hJTkUpIicKIAorQ0ZMQUdTX3N5c2luZm8ubyArPSAtSWluY2x1ZGUvbWF0aC1lbXUgLUlhcmNoL3MzOTAvbWF0aC1lbXUgLXcKKwogb2JqLXkJOj0gIGJpdG1hcC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBiYXNlLm8gZWFybHkubyBzZXR1cC5vIFwKIAkgICAgcHJvY2Vzc29yLm8gc3lzX3MzOTAubyBwdHJhY2UubyBzaWduYWwubyBjcGNtZC5vIGViY2RpYy5vIFwKIAkgICAgczM5MF9leHQubyBkZWJ1Zy5vIGlycS5vIGlwbC5vIGRpcy5vIGRpYWcubyBtZW1fZGV0ZWN0Lm8gXAotCSAgICB2ZHNvLm8gdnRpbWUubworCSAgICB2ZHNvLm8gdnRpbWUubyBzeXNpbmZvLm8gbm1pLm8KIAogb2JqLXkJKz0gJChpZiAkKENPTkZJR182NEJJVCksZW50cnk2NC5vLGVudHJ5Lm8pCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMgYi9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmI0MWY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKLSAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCi0gKiAgICBTZWUgaW5jbHVkZS9hc20tczM5MC97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICovCi0KLSAgICAgICAgIC5nbG9ibCBfb2lfYml0bWFwCi1fb2lfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MAotCi0gICAgICAgICAuZ2xvYmwgX25pX2JpdG1hcAotX25pX2JpdG1hcDoKLSAgICAgICAgIC5ieXRlICAweEZFLDB4RkQsMHhGQiwweEY3LDB4RUYsMHhERiwweEJGLDB4N0YKLQotICAgICAgICAgLmdsb2JsIF96Yl9maW5kbWFwCi1femJfZmluZG1hcDoKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQgCi0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDcKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOAotCi0gICAgICAgICAuZ2xvYmwgX3NiX2ZpbmRtYXAKLV9zYl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDgsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNDc1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCisgKiAgICBTZWUgaW5jbHVkZS9hc20ve2JpdG9wcy5ofHBvc2l4X3R5cGVzLmh9IGZvciBkZXRhaWxzCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2NvbnN0IGNoYXIgX29pX2JpdG1hcFtdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwIH07CitFWFBPUlRfU1lNQk9MKF9vaV9iaXRtYXApOworCitjb25zdCBjaGFyIF9uaV9iaXRtYXBbXSA9IHsgMHhmZSwgMHhmZCwgMHhmYiwgMHhmNywgMHhlZiwgMHhkZiwgMHhiZiwgMHg3ZiB9OworRVhQT1JUX1NZTUJPTChfbmlfYml0bWFwKTsKKworY29uc3QgY2hhciBfemJfZmluZG1hcFtdID0geworCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDggfTsKK0VYUE9SVF9TWU1CT0woX3piX2ZpbmRtYXApOworCitjb25zdCBjaGFyIF9zYl9maW5kbWFwW10gPSB7CisJOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTcsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCB9OworRVhQT1JUX1NZTUJPTChfc2JfZmluZG1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCmluZGV4IGEyYmUzYTkuLjEyM2RkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCkBAIC0xLDEwICsxLDExIEBACiAjaWZuZGVmIF9QVFJBQ0UzMl9ICiAjZGVmaW5lIF9QVFJBQ0UzMl9ICiAKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+ICAgIC8qIG5lZWRlZCBmb3IgTlVNX0NSX1dPUkRTICovCiAjaW5jbHVkZSAiY29tcGF0X2xpbnV4LmgiICAvKiBuZWVkZWQgZm9yIHBzd19jb21wYXRfdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JX191MzIgY3JbM107CisJX191MzIgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzMzI7CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA2MmM3MDZlLi44N2NmNWE3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC0yNTIsNyArMjUyLDcgQEAKIHN5czMyX3VzdGF0X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgZGV2X3QKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgdXN0YXQgKgotCWpnCXN5c191c3RhdAorCWpnCWNvbXBhdF9zeXNfdXN0YXQKIAogCS5nbG9ibAlzeXMzMl9kdXAyX3dyYXBwZXIKIHN5czMyX2R1cDJfd3JhcHBlcjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwppbmRleCBiYTAzZmMwLi5iZThiY2VhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCkBAIC02MDMsNyArNjAzLDcgQEAKIHN0YXRpYyBpbnQKIGRlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGkgPSAwLCByYyA9IDA7CisJaW50IGksIHJjID0gMDsKIAlmaWxlX3ByaXZhdGVfaW5mb190ICpwX2luZm87CiAJZGVidWdfaW5mb190ICpkZWJ1Z19pbmZvLCAqZGVidWdfaW5mb19zbmFwc2hvdDsKIApAQCAtNjQyLDggKzY0Miw3IEBACiAJcF9pbmZvID0ga21hbGxvYyhzaXplb2YoZmlsZV9wcml2YXRlX2luZm9fdCksCiAJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZighcF9pbmZvKXsKLQkJaWYoZGVidWdfaW5mb19zbmFwc2hvdCkKLQkJCWRlYnVnX2luZm9fZnJlZShkZWJ1Z19pbmZvX3NuYXBzaG90KTsKKwkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY5OCw4ICs2OTcsNyBAQAogCWlmICgodWlkICE9IDApIHx8IChnaWQgIT0gMCkpCiAJCXByX3dhcm5pbmcoIlJvb3QgYmVjb21lcyB0aGUgb3duZXIgb2YgYWxsIHMzOTBkYmYgZmlsZXMgIgogCQkJICAgImluIHN5c2ZzXG4iKTsKLQlpZiAoIWluaXRpYWxpemVkKQotCQlCVUcoKTsKKwlCVUdfT04oIWluaXRpYWxpemVkKTsKIAltdXRleF9sb2NrKCZkZWJ1Z19tdXRleCk7CiAKICAgICAgICAgLyogY3JlYXRlIG5ldyBkZWJ1Z19pbmZvICovCkBAIC0xMTU2LDcgKzExNTQsNiBAQAogCWVsc2UgewogCQlkZWJ1Z2ZzX3JlbW92ZShpZC0+ZGVidWdmc19lbnRyaWVzW2ldKTsKIAkJaWQtPnZpZXdzW2ldID0gTlVMTDsKLQkJcmMgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZC0+bG9jaywgZmxhZ3MpOwogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IDJhMmNhMjYuLjRkMjIxYzggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTYsNiArNiw3IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKQEAgLTE3MywxOSArMTc1LDIxIEBACiAJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfREVGQVVMVF9LRVkpOwogfQogCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB2bW1zIF9fYWxpZ25lZChQQUdFX1NJWkUpOworCiBzdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOworCS8qIE5vIFZNIGluZm9ybWF0aW9uPyBMb29rcyBsaWtlIExQQVIgKi8KKwlpZiAoc3RzaSgmdm1tcywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkJcmV0dXJuOworCWlmICghdm1tcy5jb3VudCkKKwkJcmV0dXJuOwogCi0JZ2V0X2NwdV9pZCgmUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCk7Ci0KLQkvKiBSdW5uaW5nIHVuZGVyIHovVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZmKQotCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNID8gKi8KLQlpZiAoY3B1aW5mby0+Y3B1X2lkLnZlcnNpb24gPT0gMHhmZSkKKwkvKiBSdW5uaW5nIHVuZGVyIEtWTT8gSWYgbm90IHdlIGFzc3VtZSB6L1ZNICovCisJaWYgKCFtZW1jbXAodm1tcy52bVswXS5jcGksICJceGQyXHhlNVx4ZDQiLCAzKSkKIAkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfS1ZNOworCWVsc2UKKwkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfVk07CiB9CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wZ21fY2hlY2tfaGFuZGxlcih2b2lkKQpAQCAtMzQ4LDcgKzM1Miw2IEBACiAKIAkvKiBjb3B5IGFyY2ggY29tbWFuZCBsaW5lICovCiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKLQlib290X2NvbW1hbmRfbGluZVtBUkNIX0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAwOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggZWM3ZTM1Zi4uMTA0NmMyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQ2OSw2ICs0NjksOCBAQAogCS5vcmcJMHgxMDAwMAogc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcwOgorCXhjCTB4MjAwKDI1NiksMHgyMDAJIyBwYXJ0aWFsbHkgY2xlYXIgbG93Y29yZQorCXhjCTB4MzAwKDI1NiksMHgzMDAKIAogI2lmbmRlZiBDT05GSUdfTUFSQ0hfRzUKIAkjIGNoZWNrIHByb2Nlc3NvciB2ZXJzaW9uIGFnYWluc3QgTUFSQ0hfe0c1LFo5MDAsWjk5MCxaOV8xMDksWjEwfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggZGI0NzZkMS4uMmNlZDg0NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0yMCw3ICsyMCw2IEBACiAJbGN0bAklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKSAjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSAjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFLVBBUk1BUkVBKCVyMTIpCiAjCiAjIFNldHVwIHN0YWNrCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCBmOWY3MGFhLi42NTY2N2IyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKQEAgLTg2LDcgKzg2LDYgQEAKIAlsY3RsZwklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKQkjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsZwklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykJIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCiAJCQkJCSMgbW92ZSBJUEwgZGV2aWNlIHRvIGxvd2NvcmUKLQltdmMJX19MQ19JUExERVYoNCksSVBMX0RFVklDRSs0LVBBUk1BUkVBKCVyMTIpCiAJbGdoaQklcjAsX19MQ19QQVNURQogCXN0ZwklcjAsX19MQ19WRFNPX1BFUl9DUFUKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDJkY2Y1OTBmLi42ZjM3MTFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL3Jlc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KIAogI2RlZmluZSBJUExfUEFSTV9CTE9DS19WRVJTSU9OIDAKIApAQCAtNTYsMTMgKzU2LDE0IEBACiB9OwogCiAvKgotICogRml2ZSBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKKyAqIFRoZSBmb2xsb3dpbmcgc2h1dGRvd24gYWN0aW9uIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgKi8KICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0lQTF9TVFIJCSJpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9SRUlQTF9TVFIJInJlaXBsIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fRFVNUF9TVFIJImR1bXAiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9WTUNNRF9TVFIJInZtY21kIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fU1RPUF9TVFIJInN0b3AiCisjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUgkiZHVtcF9yZWlwbCIKIAogc3RydWN0IHNodXRkb3duX2FjdGlvbiB7CiAJY2hhciAqbmFtZTsKQEAgLTE0Niw2ICsxNDcsNyBAQAogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19mY3A7CiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2NjdzsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfbnNzOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19hY3R1YWw7CiAKIHN0YXRpYyBpbnQgZHVtcF9jYXBhYmlsaXRpZXMgPSBEVU1QX1RZUEVfTk9ORTsKIHN0YXRpYyBlbnVtIGR1bXBfdHlwZSBkdW1wX3R5cGUgPSBEVU1QX1RZUEVfTk9ORTsKQEAgLTgzNSw2ICs4MzcsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19DSU87CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2NjdzsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1A6CiAJCWlmIChkaWFnMzA4X3NldF93b3JrcykKQEAgLTg0Myw2ICs4NDYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19ESUFHOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19mY3A7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfRkNQX0RVTVA6CiAJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9GQ1BfRFVNUDsKQEAgLTg1Miw2ICs4NTYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX05TU19ESUFHOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19uc3M7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfVU5LTk9XTjoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0RFRkFVTFQ7CkBAIC05NjAsNyArOTY1LDYgQEAKIAkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgUkVJUExfTUVUSE9EX0ZDUF9EVU1QOgotCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwpAQCAtMTA2OSwxMCArMTA3MywxMiBAQAogewogCWludCByYzsKIAotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9GQ1ApKQotCQlyZXR1cm4gMDsKLQlpZiAoKCFkaWFnMzA4X3NldF93b3JrcykgJiYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKSkKLQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpIHsKKwkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKQorCQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlyZWlwbF9ibG9ja19mY3AgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWlwbF9ibG9ja19mY3ApCkBAIC0xMjUzLDcgKzEyNTksNiBAQAogCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgRFVNUF9NRVRIT0RfTk9ORToKLQlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQogCXByaW50ayhLRVJOX0VNRVJHICJEdW1wIGZhaWxlZCFcbiIpOwpAQCAtMTMzMiw2ICsxMzM3LDQ5IEBACiAJLmluaXQJPSBkdW1wX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCBkdW1wX3JlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKgorCSAqIEJ5cGFzcyBkeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gKERBVCkgd2hlbiBzdG9yaW5nIElQTCBwYXJhbWV0ZXIKKwkgKiBpbmZvcm1hdGlvbiBibG9jayBhZGRyZXNzIGFuZCBjaGVja3N1bSBpbnRvIHRoZSBwcmVmaXggYXJlYQorCSAqIChjb3JyZXNwb25kaW5nIHRvIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEpLgorCSAqIFdoZW4gZW5oYW5jZWQgREFUIGFwcGxpZXMgYW5kIHRoZSBTVEUgZm9ybWF0IGNvbnRyb2wgaW4gb25lLAorCSAqIHRoZSBhYnNvbHV0ZSBhZGRyZXNzIGlzIGZvcm1lZCB3aXRob3V0IHByZWZpeGluZy4gSW4gdGhpcyBjYXNlIGEKKwkgKiBub3JtYWwgc3RvcmUgKHN0Zy9zdCkgaW50byB0aGUgcHJlZml4IGFyZWEgd291bGQgbm8gbW9yZSBtYXRjaCB0bworCSAqIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJYXNtIHZvbGF0aWxlKCJzdHVyZyAlMCwlMSIKKwkJOjogImEiICgodW5zaWduZWQgbG9uZykgcmVpcGxfYmxvY2tfYWN0dWFsKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYikpOworI2Vsc2UKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZW5kaWYKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKGNzdW1fcGFydGlhbChyZWlwbF9ibG9ja19hY3R1YWwsCisJCQkJICAgICByZWlwbF9ibG9ja19hY3R1YWwtPmhkci5sZW4sIDApKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYl9jaGVja3N1bSkpOworCXByZWVtcHRfZW5hYmxlKCk7CisJZHVtcF9ydW4odHJpZ2dlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR1bXBfcmVpcGxfaW5pdCh2b2lkKQoreworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiBfX3JlZmRhdGEgZHVtcF9yZWlwbF9hY3Rpb24gPSB7CisJLm5hbWUJPSBTSFVURE9XTl9BQ1RJT05fRFVNUF9SRUlQTF9TVFIsCisJLmZuCT0gZHVtcF9yZWlwbF9ydW4sCisJLmluaXQJPSBkdW1wX3JlaXBsX2luaXQsCit9OworCiAvKgogICogdm1jbWQgc2h1dGRvd24gYWN0aW9uOiBUcmlnZ2VyIHZtIGNvbW1hbmQgb24gc2h1dGRvd24uCiAgKi8KQEAgLTE0MjEsNyArMTQ2OSw4IEBACiAvKiBhY3Rpb24gbGlzdCAqLwogCiBzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiAqc2h1dGRvd25fYWN0aW9uc19saXN0W10gPSB7Ci0JJmlwbF9hY3Rpb24sICZyZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwgJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKKwkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfcmVpcGxfYWN0aW9uLCAmZHVtcF9hY3Rpb24sCisJJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OU19DT1VOVCAoc2l6ZW9mKHNodXRkb3duX2FjdGlvbnNfbGlzdCkgLyBzaXplb2Yodm9pZCAqKSkKIAogLyoKQEAgLTE0MzQsMTEgKzE0ODMsMTEgQEAKIAkJICAgICAgIHNpemVfdCBsZW4pCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgU0hVVERPV05fQUNUSU9OU19DT1VOVDsgaSsrKSB7CiAJCWlmICghc2h1dGRvd25fYWN0aW9uc19saXN0W2ldKQogCQkJY29udGludWU7Ci0JCWlmIChzdHJuY21wKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lLAotCQkJICAgIHN0cmxlbihzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUpKSA9PSAwKSB7CisJCWlmIChzeXNmc19zdHJlcShidWYsIHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpIHsKIAkJCXRyaWdnZXItPmFjdGlvbiA9IHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXTsKIAkJCXJldHVybiBsZW47CiAJCX0KQEAgLTE2NzIsNyArMTcyMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb25fcGFuaWNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBvbl9wYW5pY19ub3RpZnksCi0JLnByaW9yaXR5ID0gMCwKKwkucHJpb3JpdHkgPSBJTlRfTUlOLAogfTsKIAogdm9pZCBfX2luaXQgc2V0dXBfaXBsKHZvaWQpCkBAIC0xNjk2LDcgKzE3NDUsNiBAQAogCQkJc2l6ZW9mKGlwbF9pbmZvLmRhdGEubnNzLm5hbWUpKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgotCWRlZmF1bHQ6CiAJCS8qIFdlIGhhdmUgbm8gaW5mbyB0byBjb3B5ICovCiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCmluZGV4IDU5YjRlNzkuLmVlZDRhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzEwLDE1ICszMTAsMjAgQEAKIAkJCWluZm8tPnBsdF9pbml0aWFsaXplZCA9IDE7CiAJCX0KIAkJaWYgKHJfdHlwZSA9PSBSXzM5MF9QTFRPRkYxNiB8fAotCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyCi0JCSAgICB8fCByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQKLQkJCSkKKwkJICAgIHJfdHlwZSA9PSBSXzM5MF9QTFRPRkYzMiB8fAorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjY0KQogCQkJdmFsID0gbWUtPmFyY2gucGx0X29mZnNldCAtIG1lLT5hcmNoLmdvdF9vZmZzZXQgKwogCQkJCWluZm8tPnBsdF9vZmZzZXQgKyByZWxhLT5yX2FkZGVuZDsKLQkJZWxzZQotCQkJdmFsID0gIChFbGZfQWRkcikgbWUtPm1vZHVsZV9jb3JlICsKLQkJCQltZS0+YXJjaC5wbHRfb2Zmc2V0ICsgaW5mby0+cGx0X29mZnNldCArIAotCQkJCXJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQllbHNlIHsKKwkJCWlmICghKChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZVTCA8IDB4MWZmZmZlVUwpIHx8CisJCQkgICAgICAocl90eXBlID09IFJfMzkwX1BMVDMyREJMICYmCisJCQkgICAgICAgdmFsIC0gbG9jICsgMHhmZmZmZmZmZlVMTCA8IDB4MWZmZmZmZmZlVUxMKSkpCisJCQkJdmFsID0gKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKworCQkJCQltZS0+YXJjaC5wbHRfb2Zmc2V0ICsKKwkJCQkJaW5mby0+cGx0X29mZnNldDsKKwkJCXZhbCArPSByZWxhLT5yX2FkZGVuZCAtIGxvYzsKKwkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVDE2REJMKQogCQkJKih1bnNpZ25lZCBzaG9ydCAqKSBsb2MgPSB2YWwgPj4gMTsKIAkJZWxzZSBpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZGM0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlcgorICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9ldHIuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KKworc3RydWN0IG1jY2tfc3RydWN0IHsKKwlpbnQga2lsbF90YXNrOworCWludCBjaGFubmVsX3JlcG9ydDsKKwlpbnQgd2FybmluZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWNja19jb2RlOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2NrX3N0cnVjdCwgY3B1X21jY2spOworCitzdGF0aWMgTk9SRVRfVFlQRSB2b2lkIHMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCit7CisJc21wX3NlbmRfc3RvcCgpOworCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJd2hpbGUgKDEpOworfQorCisvKgorICogTWFpbiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCisgKiBvciBkaXNhYmxlZCBhbmQgbWFjaGluZSBjaGVja3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAqLwordm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWNja19zdHJ1Y3QgbWNjazsKKworCS8qCisJICogRGlzYWJsZSBtYWNoaW5lIGNoZWNrcyBhbmQgZ2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGFjY3VtdWxhdGVkCisJICogbWFjaGluZSBjaGVja3MuIEFmdGVyd2FyZHMgZGVsZXRlIHRoZSBvbGQgc3RhdGUgYW5kIGVuYWJsZSBtYWNoaW5lCisJICogY2hlY2tzIGFnYWluLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NhbF9tY2NrX2Rpc2FibGUoKTsKKwltY2NrID0gX19nZXRfY3B1X3ZhcihjcHVfbWNjayk7CisJbWVtc2V0KCZfX2dldF9jcHVfdmFyKGNwdV9tY2NrKSwgMCwgc2l6ZW9mKHN0cnVjdCBtY2NrX3N0cnVjdCkpOworCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9NQ0NLX1BFTkRJTkcpOworCWxvY2FsX21jY2tfZW5hYmxlKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJaWYgKG1jY2suY2hhbm5lbF9yZXBvcnQpCisJCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwkvKgorCSAqIEEgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KKwkgKiAoYWN0dWFsbHkgdW50aWwgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBvZmYsIG9yIHRoZSBwcm9ibGVtIGlzIGdvbmUpCisJICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBhdm9pZCBjb250aW51b3VzbHkKKwkgKiBiZWluZyBpbnRlcnJ1cHRlZC4gIE9uZSBjYXZlYXQgaXMgaG93ZXZlciwgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgcGVyCisJICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCisJICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KKwkgKiBUaG91Z2ggb25lIHN1ZmZpY2VzLCB3ZSBtYXkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyICh2aXJ0dWFsKSBjcHUuCisJICovCisJaWYgKG1jY2sud2FybmluZykgewkvKiBXQVJOSU5HIHBlbmRpbmcgPyAqLworCQlzdGF0aWMgaW50IG1jaGNoa193bmdfcG9zdGVkID0gMDsKKworCQkvKiBVc2Ugc2luZ2xlIGNwdSBjbGVhciwgYXMgd2UgY2Fubm90IGhhbmRsZSBzbXAgaGVyZS4gKi8KKwkJX19jdGxfY2xlYXJfYml0KDE0LCAyNCk7CS8qIERpc2FibGUgV0FSTklORyBNQ0ggKi8KKwkJaWYgKHhjaGcoJm1jaGNoa193bmdfcG9zdGVkLCAxKSA9PSAwKQorCQkJa2lsbF9jYWRfcGlkKFNJR1BXUiwgMSk7CisJfQorCWlmIChtY2NrLmtpbGxfdGFzaykgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXByaW50ayhLRVJOX0VNRVJHICJtY2NrOiBUZXJtaW5hdGluZyB0YXNrIGJlY2F1c2Ugb2YgbWFjaGluZSAiCisJCSAgICAgICAibWFsZnVuY3Rpb24gKGNvZGUgMHglMDE2bGx4KS5cbiIsIG1jY2subWNja19jb2RlKTsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IHRhc2s6ICVzLCBwaWQ6ICVkLlxuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCWRvX2V4aXQoU0lHU0VHVik7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9oYW5kbGVfbWNjayk7CisKKy8qCisgKiByZXR1cm5zIDAgaWYgYWxsIHJlZ2lzdGVycyBjb3VsZCBiZSB2YWxpZGF0ZWQKKyAqIHJldHVybnMgMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBub3RyYWNlIHMzOTBfcmV2YWxpZGF0ZV9yZWdpc3RlcnMoc3RydWN0IG1jaSAqbWNpKQoreworCWludCBraWxsX3Rhc2s7CisJdTY0IHRtcGNsb2NrOworCXU2NCB6ZXJvOworCXZvaWQgKmZwdF9zYXZlX2FyZWEsICpmcHRfY3JlZ19zYXZlX2FyZWE7CisKKwlraWxsX3Rhc2sgPSAwOworCXplcm8gPSAwOworCisJaWYgKCFtY2ktPmdyKSB7CisJCS8qCisJCSAqIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgY291bGRuJ3QgYmUgcmVzdG9yZWQgYW5kIGhhdmUKKwkJICogdW5rbm93biBjb250ZW50cy4gUHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgorCQkgKi8KKwkJa2lsbF90YXNrID0gMTsKKwl9CisJaWYgKCFtY2ktPmZwKSB7CisJCS8qCisJCSAqIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBjYW4ndCBiZSByZXN0b3JlZCBhbmQKKwkJICogdGhlcmVmb3JlIHRoZSBwcm9jZXNzIG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQuCisJCSAqLworCQlraWxsX3Rhc2sgPSAxOworCX0KKyNpZm5kZWYgQ09ORklHXzY0QklUCisJYXNtIHZvbGF0aWxlKAorCQkiCWxkCTAsMCglMClcbiIKKwkJIglsZAkyLDgoJTApXG4iCisJCSIJbGQJNCwxNiglMClcbiIKKwkJIglsZAk2LDI0KCUwKSIKKwkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5mbG9hdGluZ19wdF9zYXZlX2FyZWEpKTsKKyNlbmRpZgorCisJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpIHsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJZnB0X3NhdmVfYXJlYSA9ICZTMzkwX2xvd2NvcmUuZmxvYXRpbmdfcHRfc2F2ZV9hcmVhOworCQlmcHRfY3JlZ19zYXZlX2FyZWEgPSAmUzM5MF9sb3djb3JlLmZwdF9jcmVnX3NhdmVfYXJlYTsKKyNlbHNlCisJCWZwdF9zYXZlX2FyZWEgPSAodm9pZCAqKSBTMzkwX2xvd2NvcmUuZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7CisJCWZwdF9jcmVnX3NhdmVfYXJlYSA9IGZwdF9zYXZlX2FyZWEgKyAxMjg7CisjZW5kaWYKKwkJaWYgKCFtY2ktPmZjKSB7CisJCQkvKgorCQkJICogRmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciBjYW4ndCBiZSByZXN0b3JlZC4KKwkJCSAqIFRhc2sgd2lsbCBiZSB0ZXJtaW5hdGVkLgorCQkJICovCisJCQlhc20gdm9sYXRpbGUoImxmcGMgMCglMCkiIDogOiAiYSIgKCZ6ZXJvKSwgIm0iICh6ZXJvKSk7CisJCQlraWxsX3Rhc2sgPSAxOworCisJCX0gZWxzZQorCQkJYXNtIHZvbGF0aWxlKCJsZnBjIDAoJTApIiA6IDogImEiIChmcHRfY3JlZ19zYXZlX2FyZWEpKTsKKworCQlhc20gdm9sYXRpbGUoCisJCQkiCWxkCTAsMCglMClcbiIKKwkJCSIJbGQJMSw4KCUwKVxuIgorCQkJIglsZAkyLDE2KCUwKVxuIgorCQkJIglsZAkzLDI0KCUwKVxuIgorCQkJIglsZAk0LDMyKCUwKVxuIgorCQkJIglsZAk1LDQwKCUwKVxuIgorCQkJIglsZAk2LDQ4KCUwKVxuIgorCQkJIglsZAk3LDU2KCUwKVxuIgorCQkJIglsZAk4LDY0KCUwKVxuIgorCQkJIglsZAk5LDcyKCUwKVxuIgorCQkJIglsZAkxMCw4MCglMClcbiIKKwkJCSIJbGQJMTEsODgoJTApXG4iCisJCQkiCWxkCTEyLDk2KCUwKVxuIgorCQkJIglsZAkxMywxMDQoJTApXG4iCisJCQkiCWxkCTE0LDExMiglMClcbiIKKwkJCSIJbGQJMTUsMTIwKCUwKVxuIgorCQkJOiA6ICJhIiAoZnB0X3NhdmVfYXJlYSkpOworCX0KKwkvKiBSZXZhbGlkYXRlIGFjY2VzcyByZWdpc3RlcnMgKi8KKwlhc20gdm9sYXRpbGUoCisJCSIJbGFtCTAsMTUsMCglMCkiCisJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhKSk7CisJaWYgKCFtY2ktPmFyKSB7CisJCS8qCisJCSAqIEFjY2VzcyByZWdpc3RlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzLgorCQkgKiBUZXJtaW5hdGluZyB0YXNrLgorCQkgKi8KKwkJa2lsbF90YXNrID0gMTsKKwl9CisJLyogUmV2YWxpZGF0ZSBjb250cm9sIHJlZ2lzdGVycyAqLworCWlmICghbWNpLT5jcikgeworCQkvKgorCQkgKiBDb250cm9sIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCisJCSAqIENhbid0IHJlY292ZXIgYW5kIHRoZXJlZm9yZSBzdG9wcGluZyBtYWNoaW5lLgorCQkgKi8KKwkJczM5MF9oYW5kbGVfZGFtYWdlKCJpbnZhbGlkIGNvbnRyb2wgcmVnaXN0ZXJzLiIpOworCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbGN0bGcJMCwxNSwwKCUwKSIKKwkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CisjZWxzZQorCQlhc20gdm9sYXRpbGUoCisJCQkiCWxjdGwJMCwxNSwwKCUwKSIKKwkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CisjZW5kaWYKKwl9CisJLyoKKwkgKiBXZSBkb24ndCBldmVuIHRyeSB0byByZXZhbGlkYXRlIHRoZSBUT0QgcmVnaXN0ZXIsIHNpbmNlIHdlIHNpbXBseQorCSAqIGNhbid0IHdyaXRlIHNvbWV0aGluZyBzZW5zaWJsZSBpbnRvIHRoYXQgcmVnaXN0ZXIuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJLyoKKwkgKiBTZWUgaWYgd2UgY2FuIHJldmFsaWRhdGUgdGhlIFRPRCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgd2l0aCBpdHMKKwkgKiBvbGQgY29udGVudHMgKHNob3VsZCBiZSB6ZXJvKSBvdGhlcndpc2Ugc2V0IGl0IHRvIHplcm8uCisJICovCisJaWYgKCFtY2ktPnByKQorCQlhc20gdm9sYXRpbGUoCisJCQkiCXNyCTAsMFxuIgorCQkJIglzY2twZiIKKwkJCTogOiA6ICIwIiwgImNjIik7CisJZWxzZQorCQlhc20gdm9sYXRpbGUoCisJCQkiCWwJMCwwKCUwKVxuIgorCQkJIglzY2twZiIKKwkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUudG9kX3Byb2dyZWdfc2F2ZV9hcmVhKQorCQkJOiAiMCIsICJjYyIpOworI2VuZGlmCisJLyogUmV2YWxpZGF0ZSBjbG9jayBjb21wYXJhdG9yIHJlZ2lzdGVyICovCisJYXNtIHZvbGF0aWxlKAorCQkiCXN0Y2sJMCglMSlcbiIKKwkJIglzY2tjCTAoJTEpIgorCQk6ICI9bSIgKHRtcGNsb2NrKSA6ICJhIiAoJih0bXBjbG9jaykpIDogImNjIiwgIm1lbW9yeSIpOworCisJLyogQ2hlY2sgaWYgb2xkIFBTVyBpcyB2YWxpZCAqLworCWlmICghbWNpLT53cCkKKwkJLyoKKwkJICogQ2FuJ3QgdGVsbCBpZiB3ZSBjb21lIGZyb20gdXNlciBvciBrZXJuZWwgbW9kZQorCQkgKiAtPiBzdG9wcGluZyBtYWNoaW5lLgorCQkgKi8KKwkJczM5MF9oYW5kbGVfZGFtYWdlKCJvbGQgcHN3IGludmFsaWQuIik7CisKKwlpZiAoIW1jaS0+bXMgfHwgIW1jaS0+cG0gfHwgIW1jaS0+aWEpCisJCWtpbGxfdGFzayA9IDE7CisKKwlyZXR1cm4ga2lsbF90YXNrOworfQorCisjZGVmaW5lIE1BWF9JUERfQ09VTlQJMjkKKyNkZWZpbmUgTUFYX0lQRF9USU1FCSg1ICogNjAgKiBVU0VDX1BFUl9TRUMpIC8qIDUgbWludXRlcyAqLworCisjZGVmaW5lIEVEX1NUUF9JU0xBTkQJNgkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIGlzbGFuZCBjaGVjayAqLworI2RlZmluZSBFRF9TVFBfU1lOQwk3CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1lOQwkxMgkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN5bmMgY2hlY2sgKi8KKyNkZWZpbmUgRURfRVRSX1NXSVRDSAkxMwkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN3aXRjaCB0byBsb2NhbCAqLworCisvKgorICogbWFjaGluZSBjaGVjayBoYW5kbGVyLgorICovCit2b2lkIG5vdHJhY2UgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0YXRpYyBpbnQgaXBkX2NvdW50OworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBkX2xvY2spOworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbGFzdF9pcGQ7CisJc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJc3RydWN0IG1jaSAqbWNpOworCWludCB1bW9kZTsKKworCWxvY2tkZXBfb2ZmKCk7CisJczM5MF9pZGxlX2NoZWNrKCk7CisKKwltY2kgPSAoc3RydWN0IG1jaSAqKSAmUzM5MF9sb3djb3JlLm1jY2tfaW50ZXJydXB0aW9uX2NvZGU7CisJbWNjayA9ICZfX2dldF9jcHVfdmFyKGNwdV9tY2NrKTsKKwl1bW9kZSA9IHVzZXJfbW9kZShyZWdzKTsKKworCWlmIChtY2ktPnNkKSB7CisJCS8qIFN5c3RlbSBkYW1hZ2UgLT4gc3RvcHBpbmcgbWFjaGluZSAqLworCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN5c3RlbSBkYW1hZ2UgbWFjaGluZSBjaGVjay4iKTsKKwl9CisJaWYgKG1jaS0+cGQpIHsKKwkJaWYgKG1jaS0+YikgeworCQkJLyogUHJvY2Vzc2luZyBiYWNrdXAgLT4gdmVyaWZ5IGlmIHdlIGNhbiBzdXJ2aXZlIHRoaXMgKi8KKwkJCXU2NCB6X21jaWMsIG9fbWNpYywgdF9tY2ljOworI2lmZGVmIENPTkZJR182NEJJVAorCQkJel9tY2ljID0gKDFVTEw8PDYzIHwgMVVMTDw8NTkgfCAxVUxMPDwyOSk7CisJCQlvX21jaWMgPSAoMVVMTDw8NDMgfCAxVUxMPDw0MiB8IDFVTEw8PDQxIHwgMVVMTDw8NDAgfAorCQkJCSAgMVVMTDw8MzYgfCAxVUxMPDwzNSB8IDFVTEw8PDM0IHwgMVVMTDw8MzIgfAorCQkJCSAgMVVMTDw8MzAgfCAxVUxMPDwyMSB8IDFVTEw8PDIwIHwgMVVMTDw8MTcgfAorCQkJCSAgMVVMTDw8MTYpOworI2Vsc2UKKwkJCXpfbWNpYyA9ICgxVUxMPDw2MyB8IDFVTEw8PDU5IHwgMVVMTDw8NTcgfCAxVUxMPDw1MCB8CisJCQkJICAxVUxMPDwyOSk7CisJCQlvX21jaWMgPSAoMVVMTDw8NDMgfCAxVUxMPDw0MiB8IDFVTEw8PDQxIHwgMVVMTDw8NDAgfAorCQkJCSAgMVVMTDw8MzYgfCAxVUxMPDwzNSB8IDFVTEw8PDM0IHwgMVVMTDw8MzIgfAorCQkJCSAgMVVMTDw8MzAgfCAxVUxMPDwyMCB8IDFVTEw8PDE3IHwgMVVMTDw8MTYpOworI2VuZGlmCisJCQl0X21jaWMgPSAqKHU2NCAqKW1jaTsKKworCQkJaWYgKCgodF9tY2ljICYgel9tY2ljKSAhPSAwKSB8fAorCQkJICAgICgodF9tY2ljICYgb19tY2ljKSAhPSBvX21jaWMpKSB7CisJCQkJczM5MF9oYW5kbGVfZGFtYWdlKCJwcm9jZXNzaW5nIGJhY2t1cCBtYWNoaW5lICIKKwkJCQkJCSAgICJjaGVjayB3aXRoIGRhbWFnZS4iKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE51bGxpZnlpbmcgZXhpZ2VudCBjb25kaXRpb24sIHRoZXJlZm9yZSB3ZSBtaWdodAorCQkJICogcmV0cnkgdGhpcyBpbnN0cnVjdGlvbi4KKwkJCSAqLworCQkJc3Bpbl9sb2NrKCZpcGRfbG9jayk7CisJCQl0bXAgPSBnZXRfY2xvY2soKTsKKwkJCWlmICgoKHRtcCAtIGxhc3RfaXBkKSA+PiAxMikgPCBNQVhfSVBEX1RJTUUpCisJCQkJaXBkX2NvdW50Kys7CisJCQllbHNlCisJCQkJaXBkX2NvdW50ID0gMTsKKwkJCWxhc3RfaXBkID0gdG1wOworCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQorCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7CisJCQlzcGluX3VubG9jaygmaXBkX2xvY2spOworCQl9IGVsc2UgeworCQkJLyogUHJvY2Vzc2luZyBkYW1hZ2UgLT4gc3RvcHBpbmcgbWFjaGluZSAqLworCQkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBpbnN0cnVjdGlvbiBwcm9jZXNzaW5nICIKKwkJCQkJICAgImRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOworCQl9CisJfQorCWlmIChzMzkwX3JldmFsaWRhdGVfcmVnaXN0ZXJzKG1jaSkpIHsKKwkJaWYgKHVtb2RlKSB7CisJCQkvKgorCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KKwkJCSAqIHVzZXIgbW9kZSAtPiBtYXJrIHRhc2sgZm9yIHRlcm1pbmF0aW9uLgorCQkJICovCisJCQltY2NrLT5raWxsX3Rhc2sgPSAxOworCQkJbWNjay0+bWNja19jb2RlID0gKih1bnNpZ25lZCBsb25nIGxvbmcgKikgbWNpOworCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9NQ0NLX1BFTkRJTkcpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIENvdWxkbid0IHJlc3RvcmUgYWxsIHJlZ2lzdGVyIGNvbnRlbnRzIHdoaWxlIGluCisJCQkgKiBrZXJuZWwgbW9kZSAtPiBzdG9wcGluZyBtYWNoaW5lLgorCQkJICovCisJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInVuYWJsZSB0byByZXZhbGlkYXRlIHJlZ2lzdGVycy4iKTsKKwkJfQorCX0KKwlpZiAobWNpLT5jZCkgeworCQkvKiBUaW1pbmcgZmFjaWxpdHkgZGFtYWdlICovCisJCXMzOTBfaGFuZGxlX2RhbWFnZSgiVE9EIGNsb2NrIGRhbWFnZWQiKTsKKwl9CisJaWYgKG1jaS0+ZWQgJiYgbWNpLT5lYykgeworCQkvKiBFeHRlcm5hbCBkYW1hZ2UgKi8KKwkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9FVFJfU1lOQykpCisJCQlldHJfc3luY19jaGVjaygpOworCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX0VUUl9TV0lUQ0gpKQorCQkJZXRyX3N3aXRjaF90b19sb2NhbCgpOworCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX1NUUF9TWU5DKSkKKwkJCXN0cF9zeW5jX2NoZWNrKCk7CisJCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfU1RQX0lTTEFORCkpCisJCQlzdHBfaXNsYW5kX2NoZWNrKCk7CisJfQorCWlmIChtY2ktPnNlKQorCQkvKiBTdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCisJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAiCisJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7CisJaWYgKG1jaS0+a2UpCisJCS8qIFN0b3JhZ2Uga2V5LWVycm9yIHVuY29ycmVjdGVkICovCisJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgIgorCQkJCSAgICJtYWNoaW5lIGNoZWNrLiIpOworCWlmIChtY2ktPmRzICYmIG1jaS0+ZmEpCisJCS8qIFN0b3JhZ2UgZGVncmFkYXRpb24gKi8KKwkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGRlZ3JhZGF0aW9uIG1hY2hpbmUgIgorCQkJCSAgICJjaGVjay4iKTsKKwlpZiAobWNpLT5jcCkgeworCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KKwkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOworCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CisJfQorCWlmIChtY2ktPncpIHsKKwkJLyogV2FybmluZyBwZW5kaW5nICovCisJCW1jY2stPndhcm5pbmcgPSAxOworCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CisJfQorCWxvY2tkZXBfb24oKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWFjaGluZV9jaGVja19pbml0KHZvaWQpCit7CisJY3RsX3NldF9iaXQoMTQsIDI1KTsJLyogZW5hYmxlIGV4dGVybmFsIGRhbWFnZSBNQ0ggKi8KKwljdGxfc2V0X2JpdCgxNCwgMjcpOwkvKiBlbmFibGUgc3lzdGVtIHJlY292ZXJ5IE1DSCAqLworCWN0bF9zZXRfYml0KDE0LCAyNCk7CS8qIGVuYWJsZSB3YXJuaW5nIE1DSCAqLworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChtYWNoaW5lX2NoZWNrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCA1Y2QzOGE5Li5iNDhlOTYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMSwxOCArMSwxMCBAQAogLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYworICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgcGFydHMgb2YgcHJvY2VzcyBoYW5kbGluZy4KICAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBIYXJ0bXV0IFBlbm5lciAoaHBAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSksCi0gKgotICogIERlcml2ZWQgZnJvbSAiYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMiCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUsIExpbnVzIFRvcnZhbGRzCi0gKi8KLQotLyoKLSAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuLgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgSGFydG11dCBQZW5uZXIgPGhwQGRlLmlibS5jb20+LAorICoJCSBEZW5pcyBKb3NlcGggQmFycm93LAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtNDcsNiArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpIGFzbSAoInJldF9mcm9tX2ZvcmsiKTsKQEAgLTc2LDcgKzY5LDYgQEAKIAlyZXR1cm4gc2YtPmdwcnNbOF07CiB9CiAKLWV4dGVybiB2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7CiAvKgogICogVGhlIGlkbGUgbG9vcCBvbiBhIFMzOTAuLi4KICAqLwpAQCAtMTQ5LDYgKzE0MSw3IEBACiAJcmV0dXJuIGRvX2ZvcmsoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VELAogCQkgICAgICAgMCwgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOwogfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIAogLyoKICAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCkBAIC0xNjgsMzQgKzE2MSwzNSBAQAogfQogCiBpbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld19zdGFja3AsCi0JdW5zaWduZWQgbG9uZyB1bnVzZWQsCi0gICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKKwkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gICAgICAgIHN0cnVjdCBmYWtlX2ZyYW1lCi0gICAgICAgICAgewotCSAgICBzdHJ1Y3Qgc3RhY2tfZnJhbWUgc2Y7Ci0gICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyBjaGlsZHJlZ3M7Ci0gICAgICAgICAgfSAqZnJhbWU7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKwlzdHJ1Y3QgZmFrZV9mcmFtZQorCXsKKwkJc3RydWN0IHN0YWNrX2ZyYW1lIHNmOworCQlzdHJ1Y3QgcHRfcmVncyBjaGlsZHJlZ3M7CisJfSAqZnJhbWU7CiAKLSAgICAgICAgZnJhbWUgPSBjb250YWluZXJfb2YodGFza19wdF9yZWdzKHApLCBzdHJ1Y3QgZmFrZV9mcmFtZSwgY2hpbGRyZWdzKTsKLSAgICAgICAgcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKKwlmcmFtZSA9IGNvbnRhaW5lcl9vZih0YXNrX3B0X3JlZ3MocCksIHN0cnVjdCBmYWtlX2ZyYW1lLCBjaGlsZHJlZ3MpOworCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAJLyogU3RvcmUgYWNjZXNzIHJlZ2lzdGVycyB0byBrZXJuZWwgc3RhY2sgb2YgbmV3IHByb2Nlc3MuICovCi0gICAgICAgIGZyYW1lLT5jaGlsZHJlZ3MgPSAqcmVnczsKKwlmcmFtZS0+Y2hpbGRyZWdzID0gKnJlZ3M7CiAJZnJhbWUtPmNoaWxkcmVncy5ncHJzWzJdID0gMDsJLyogY2hpbGQgcmV0dXJucyAwIG9uIGZvcmsuICovCi0gICAgICAgIGZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1sxNV0gPSBuZXdfc3RhY2twOwotICAgICAgICBmcmFtZS0+c2YuYmFja19jaGFpbiA9IDA7CisJZnJhbWUtPmNoaWxkcmVncy5ncHJzWzE1XSA9IG5ld19zdGFja3A7CisJZnJhbWUtPnNmLmJhY2tfY2hhaW4gPSAwOwogCi0gICAgICAgIC8qIG5ldyByZXR1cm4gcG9pbnQgaXMgcmV0X2Zyb21fZm9yayAqLwotICAgICAgICBmcmFtZS0+c2YuZ3Byc1s4XSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOworCS8qIG5ldyByZXR1cm4gcG9pbnQgaXMgcmV0X2Zyb21fZm9yayAqLworCWZyYW1lLT5zZi5ncHJzWzhdID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2Zvcms7CiAKLSAgICAgICAgLyogZmFrZSByZXR1cm4gc3RhY2sgZm9yIHJlc3VtZSgpLCBkb24ndCBnbyBiYWNrIHRvIHNjaGVkdWxlICovCi0gICAgICAgIGZyYW1lLT5zZi5ncHJzWzldID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOworCS8qIGZha2UgcmV0dXJuIHN0YWNrIGZvciByZXN1bWUoKSwgZG9uJ3QgZ28gYmFjayB0byBzY2hlZHVsZSAqLworCWZyYW1lLT5zZi5ncHJzWzldID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCiAJLyogU2F2ZSBhY2Nlc3MgcmVnaXN0ZXJzIHRvIG5ldyB0aHJlYWQgc3RydWN0dXJlLiAqLwogCXNhdmVfYWNjZXNzX3JlZ3MoJnAtPnRocmVhZC5hY3JzWzBdKTsKIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKLSAgICAgICAgLyoKKwkvKgogCSAqIHNhdmUgZnBycyB0byBjdXJyZW50LT50aHJlYWQuZnBfcmVncyB0byBtZXJnZSB0aGVtIHdpdGgKIAkgKiB0aGUgZW11bGF0ZWQgcmVnaXN0ZXJzIGFuZCB0aGVuIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgY2hpbGQuCiAJICovCkBAIC0yMjAsMTAgKzIxNCwxMyBAQAogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCS8qIHN0YXJ0IG5ldyBwcm9jZXNzIHdpdGggYXI0IHBvaW50aW5nIHRvIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UgKi8KIAlwLT50aHJlYWQubW1fc2VnbWVudCA9IGdldF9mcygpOwotICAgICAgICAvKiBEb24ndCBjb3B5IGRlYnVnIHJlZ2lzdGVycyAqLwotICAgICAgICBtZW1zZXQoJnAtPnRocmVhZC5wZXJfaW5mbywwLHNpemVvZihwLT50aHJlYWQucGVyX2luZm8pKTsKLQotICAgICAgICByZXR1cm4gMDsKKwkvKiBEb24ndCBjb3B5IGRlYnVnIHJlZ2lzdGVycyAqLworCW1lbXNldCgmcC0+dGhyZWFkLnBlcl9pbmZvLCAwLCBzaXplb2YocC0+dGhyZWFkLnBlcl9pbmZvKSk7CisJLyogSW5pdGlhbGl6ZSBwZXIgdGhyZWFkIHVzZXIgYW5kIHN5c3RlbSB0aW1lciB2YWx1ZXMgKi8KKwl0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CisJdGktPnVzZXJfdGltZXIgPSAwOworCXRpLT5zeXN0ZW1fdGltZXIgPSAwOworCXJldHVybiAwOwogfQogCiBTWVNDQUxMX0RFRklORTAoZm9yaykKQEAgLTMxMSw3ICszMDgsNyBAQAogaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHMzOTBfZnBfcmVncyAqZnByZWdzKQogewogI2lmbmRlZiBDT05GSUdfNjRCSVQKLSAgICAgICAgLyoKKwkvKgogCSAqIHNhdmUgZnBycyB0byBjdXJyZW50LT50aHJlYWQuZnBfcmVncyB0byBtZXJnZSB0aGVtIHdpdGgKIAkgKiB0aGUgZW11bGF0ZWQgcmVnaXN0ZXJzIGFuZCB0aGVuIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgZHVtcC4KIAkgKi8KQEAgLTMyMiw2ICszMTksNyBAQAogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKQEAgLTM0Niw0ICszNDQsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKaW5kZXggODJjMTg3Mi4uODAyYzhhYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCkBAIC0xOCwxMCArMTgsMTEgQEAKICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogCi12b2lkIF9fY3B1aW5pdCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvKQordm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8odm9pZCkKIHsKIAlwcl9pbmZvKCJQcm9jZXNzb3IgJWQgc3RhcnRlZCwgYWRkcmVzcyAlZCwgaWRlbnRpZmljYXRpb24gJTA2WFxuIiwKLQkJY3B1aW5mby0+Y3B1X25yLCBjcHVpbmZvLT5jcHVfYWRkciwgY3B1aW5mby0+Y3B1X2lkLmlkZW50KTsKKwkJUzM5MF9sb3djb3JlLmNwdV9uciwgUzM5MF9sb3djb3JlLmNwdV9hZGRyLAorCQlTMzkwX2xvd2NvcmUuY3B1X2lkLmlkZW50KTsKIH0KIAogLyoKQEAgLTMwLDQ4ICszMSw0NiBAQAogCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls4XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzldID0gewogCQkiZXNhbjMiLCAiemFyY2giLCAic3RmbGUiLCAibXNhIiwgImxkaXNwIiwgImVpbW0iLCAiZGZwIiwKLQkJImVkYXQiCisJCSJlZGF0IiwgImV0ZjNlaCIKIAl9OwotICAgICAgIHN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm87Ci0gICAgICAgdW5zaWduZWQgbG9uZyBuID0gKHVuc2lnbmVkIGxvbmcpIHYgLSAxOwotICAgICAgIGludCBpOworCXN0cnVjdCBfbG93Y29yZSAqbGM7CisJdW5zaWduZWQgbG9uZyBuID0gKHVuc2lnbmVkIGxvbmcpIHYgLSAxOworCWludCBpOwogCi0gICAgICAgczM5MF9hZGp1c3RfamlmZmllcygpOwotICAgICAgIHByZWVtcHRfZGlzYWJsZSgpOwotICAgICAgIGlmICghbikgewotCSAgICAgICBzZXFfcHJpbnRmKG0sICJ2ZW5kb3JfaWQgICAgICAgOiBJQk0vUzM5MFxuIgotCQkJICAiIyBwcm9jZXNzb3JzICAgIDogJWlcbiIKLQkJCSAgImJvZ29taXBzIHBlciBjcHU6ICVsdS4lMDJsdVxuIiwKLQkJCSAgbnVtX29ubGluZV9jcHVzKCksIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKLQkJCSAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCk7Ci0JICAgICAgIHNlcV9wdXRzKG0sICJmZWF0dXJlc1x0OiAiKTsKLQkgICAgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJICAgICAgIGlmIChod2NhcF9zdHJbaV0gJiYgKGVsZl9od2NhcCAmICgxVUwgPDwgaSkpKQotCQkJICAgICAgIHNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7Ci0JICAgICAgIHNlcV9wdXRzKG0sICJcbiIpOwotICAgICAgIH0KKwlzMzkwX2FkanVzdF9qaWZmaWVzKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKCFuKSB7CisJCXNlcV9wcmludGYobSwgInZlbmRvcl9pZCAgICAgICA6IElCTS9TMzkwXG4iCisJCQkgICAiIyBwcm9jZXNzb3JzICAgIDogJWlcbiIKKwkJCSAgICJib2dvbWlwcyBwZXIgY3B1OiAlbHUuJTAybHVcbiIsCisJCQkgICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAorCQkJICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCk7CisJCXNlcV9wdXRzKG0sICJmZWF0dXJlc1x0OiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJCWlmIChod2NhcF9zdHJbaV0gJiYgKGVsZl9od2NhcCAmICgxVUwgPDwgaSkpKQorCQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7CisJCXNlcV9wdXRzKG0sICJcbiIpOworCX0KIAotICAgICAgIGlmIChjcHVfb25saW5lKG4pKSB7CisJaWYgKGNwdV9vbmxpbmUobikpIHsKICNpZmRlZiBDT05GSUdfU01QCi0JICAgICAgIGlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gbikKLQkJICAgICAgIGNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOwotCSAgICAgICBlbHNlCi0JCSAgICAgICBjcHVpbmZvID0gJmxvd2NvcmVfcHRyW25dLT5jcHVfZGF0YTsKKwkJbGMgPSAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IG4pID8KKwkJCSZTMzkwX2xvd2NvcmUgOiBsb3djb3JlX3B0cltuXTsKICNlbHNlCi0JICAgICAgIGNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOworCQlsYyA9ICZTMzkwX2xvd2NvcmU7CiAjZW5kaWYKLQkgICAgICAgc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yICVsaTogIgotCQkJICAidmVyc2lvbiA9ICUwMlgsICAiCi0JCQkgICJpZGVudGlmaWNhdGlvbiA9ICUwNlgsICAiCi0JCQkgICJtYWNoaW5lID0gJTA0WFxuIiwKLQkJCSAgbiwgY3B1aW5mby0+Y3B1X2lkLnZlcnNpb24sCi0JCQkgIGNwdWluZm8tPmNwdV9pZC5pZGVudCwKLQkJCSAgY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpOwotICAgICAgIH0KLSAgICAgICBwcmVlbXB0X2VuYWJsZSgpOwotICAgICAgIHJldHVybiAwOworCQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3IgJWxpOiAiCisJCQkgICAidmVyc2lvbiA9ICUwMlgsICAiCisJCQkgICAiaWRlbnRpZmljYXRpb24gPSAlMDZYLCAgIgorCQkJICAgIm1hY2hpbmUgPSAlMDRYXG4iLAorCQkJICAgbiwgbGMtPmNwdV9pZC52ZXJzaW9uLAorCQkJICAgbGMtPmNwdV9pZC5pZGVudCwKKwkJCSAgIGxjLT5jcHVfaWQubWFjaGluZSk7CisJfQorCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCmluZGV4IGM0MTkzMDQuLjc3NDE0NzggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCkBAIC0xLDEwICsxLDcgQEAKIC8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSAoSG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tKQotCQkgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICogICAgQ29weXJpZ2h0IElCTSBDb3JwIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+LAorICoJCSBEZW5pcyBKb3NlcGggQmFycm93LAogICovCiAKICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgpAQCAtMzAsNyArMjcsNyBAQAogCQltdmMJX19MQ19QUkVGSVhfU0FWRV9BUkVBLTB4MTAwMCg0LCVyMSksMCglcjEwKQogCQlzdGZwYwlfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBLTB4MTAwMCglcjEpCiAJCXN0Y2tjCS5MY2xrY21wLS5McGcwKCVyMTMpCi0JCW12YwlfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLTB4MTAwMCg4LCVyMSksLkxjbGtjbXAtLkxwZzAoJXIxMykKKwkJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEtMHgxMDAwKDcsJXIxKSwuTGNsa2NtcC0uTHBnMCglcjEzKQogCQlzdHB0CV9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQS0weDEwMDAoJXIxKQogCQlzdGcJJXIxMywgX19MQ19QU1dfU0FWRV9BUkVBLTB4MTAwMCs4KCVyMSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwppbmRleCA0NmI5MGNiLi42NTZmY2JiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwpAQCAtMSw0OSArMSw1IEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCi0gKgotICogIFMzOTAgdmVyc2lvbgotICovCi0jaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KLSNpbmNsdWRlIDxhc20vY3BjbWQuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KLSNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUCi0jaW5jbHVkZSA8bmV0L2FycC5oPgotI2VuZGlmCi0KLS8qCi0gKiBtZW1vcnkgbWFuYWdlbWVudAotICovCi1FWFBPUlRfU1lNQk9MKF9vaV9iaXRtYXApOwotRVhQT1JUX1NZTUJPTChfbmlfYml0bWFwKTsKLUVYUE9SVF9TWU1CT0woX3piX2ZpbmRtYXApOwotRVhQT1JUX1NZTUJPTChfc2JfZmluZG1hcCk7Ci0KLS8qCi0gKiBiaW5mbXRfZWxmIGxvYWRlciAKLSAqLwotZXh0ZXJuIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncyk7Ci1FWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKLUVYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKLQotLyoKLSAqIG1pc2MuCi0gKi8KLUVYUE9SVF9TWU1CT0wobWFjaGluZV9mbGFncyk7Ci1FWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7Ci1FWFBPUlRfU1lNQk9MKGNzdW1fZm9sZCk7Ci1FWFBPUlRfU1lNQk9MKGNvbnNvbGVfbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKGNvbnNvbGVfZGV2bm8pOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX2lycSk7CiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiBFWFBPUlRfU1lNQk9MKF9tY291bnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IGM1Y2ZiNjEuLjA2MjAxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTc0LDkgKzc0LDE3IEBACiAgKiBNYWNoaW5lIHNldHVwLi4KICAqLwogdW5zaWduZWQgaW50IGNvbnNvbGVfbW9kZSA9IDA7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfbW9kZSk7CisKIHVuc2lnbmVkIGludCBjb25zb2xlX2Rldm5vID0gLTE7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfZGV2bm8pOworCiB1bnNpZ25lZCBpbnQgY29uc29sZV9pcnEgPSAtMTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9pcnEpOworCiB1bnNpZ25lZCBsb25nIG1hY2hpbmVfZmxhZ3M7CitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfZmxhZ3MpOworCiB1bnNpZ25lZCBsb25nIGVsZl9od2NhcCA9IDA7CiBjaGFyIGVsZl9wbGF0Zm9ybVtFTEZfUExBVEZPUk1fU0laRV07CiAKQEAgLTg2LDYgKzk0LDEwIEBACiBpbnQgX19pbml0ZGF0YSBtZW1vcnlfZW5kX3NldDsKIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtZW1vcnlfZW5kOwogCisvKiBBbiBhcnJheSB3aXRoIGEgcG9pbnRlciB0byB0aGUgbG93Y29yZSBvZiBldmVyeSBDUFUuICovCitzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW05SX0NQVVNdOworRVhQT1JUX1NZTUJPTChsb3djb3JlX3B0cik7CisKIC8qCiAgKiBUaGlzIGlzIHNldCB1cCBieSB0aGUgc2V0dXAtcm91dGluZSBhdCBib290LXRpbWUKICAqIGZvciBTMzkwIG5lZWQgdG8gZmluZCBvdXQsIHdoYXQgd2UgaGF2ZSB0byBzZXR1cApAQCAtMTA5LDEzICsxMjEsMTAgQEAKICAqLwogdm9pZCBfX2NwdWluaXQgY3B1X2luaXQodm9pZCkKIHsKLSAgICAgICAgaW50IGFkZHIgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQogICAgICAgICAvKgogICAgICAgICAgKiBTdG9yZSBwcm9jZXNzb3IgaWQgaW4gbG93Y29yZSAodXNlZCBlLmcuIGluIHRpbWVyX2ludGVycnVwdCkKICAgICAgICAgICovCi0JZ2V0X2NwdV9pZCgmUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCk7Ci0gICAgICAgIFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfYWRkciA9IGFkZHI7CisJZ2V0X2NwdV9pZCgmUzM5MF9sb3djb3JlLmNwdV9pZCk7CiAKICAgICAgICAgLyoKICAgICAgICAgICogRm9yY2UgRlBVIGluaXRpYWxpemF0aW9uOgpAQCAtMTI1LDggKzEzNCw3IEBACiAKIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAljdXJyZW50LT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPm1tKQotICAgICAgICAgICAgICAgIEJVRygpOworCUJVR19PTihjdXJyZW50LT5tbSk7CiAgICAgICAgIGVudGVyX2xhenlfdGxiKCZpbml0X21tLCBjdXJyZW50KTsKIH0KIApAQCAtMjE3LDcgKzIyNSw3IEBACiAJfQogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF96ZmNwZHVtcCh1bnNpZ25lZCBpbnQgY29uc29sZV9kZXZubykKIHsKIAlzdGF0aWMgY2hhciBzdHJbNDFdOwpAQCAtMjg5LDExICsyOTcsNyBAQAogZWFybHlfcGFyYW0oIm1lbSIsIGVhcmx5X3BhcnNlX21lbSk7CiAKICNpZmRlZiBDT05GSUdfUzM5MF9TV0lUQ0hfQU1PREUKLSNpZmRlZiBDT05GSUdfUEdTVEUKLXVuc2lnbmVkIGludCBzd2l0Y2hfYW1vZGUgPSAxOwotI2Vsc2UKIHVuc2lnbmVkIGludCBzd2l0Y2hfYW1vZGUgPSAwOwotI2VuZGlmCiBFWFBPUlRfU1lNQk9MX0dQTChzd2l0Y2hfYW1vZGUpOwogCiBzdGF0aWMgaW50IHNldF9hbW9kZV9hbmRfdWFjY2Vzcyh1bnNpZ25lZCBsb25nIHVzZXJfYW1vZGUsCkBAIC00MTQsNyArNDE4LDYgQEAKIAkJUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgbWNja19pbnRfaGFuZGxlcjsKIAlsYy0+aW9fbmV3X3Bzdy5tYXNrID0gcHN3X2tlcm5lbF9iaXRzOwogCWxjLT5pb19uZXdfcHN3LmFkZHIgPSBQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBpb19pbnRfaGFuZGxlcjsKLQlsYy0+aXBsX2RldmljZSA9IFMzOTBfbG93Y29yZS5pcGxfZGV2aWNlOwogCWxjLT5jbG9ja19jb21wYXJhdG9yID0gLTFVTEw7CiAJbGMtPmtlcm5lbF9zdGFjayA9ICgodW5zaWduZWQgbG9uZykgJmluaXRfdGhyZWFkX3VuaW9uKSArIFRIUkVBRF9TSVpFOwogCWxjLT5hc3luY19zdGFjayA9ICh1bnNpZ25lZCBsb25nKQpAQCAtNDM0LDYgKzQzNyw3IEBACiAJbGMtPnZkc29fcGVyX2NwdV9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZsYy0+cGFzdGVbMF07CiAjZW5kaWYKIAlzZXRfcHJlZml4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIGxjKTsKKwlsb3djb3JlX3B0clswXSA9IGxjOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQKQEAgLTUxMCw3ICs1MTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X21lbTsKIAlpbnQgaTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCiAJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQX0RVTVApIHsKIAkJbWVtb3J5X2VuZCA9IFpGQ1BEVU1QX0hTQV9TSVpFOwogCQltZW1vcnlfZW5kX3NldCA9IDE7CkBAIC02NzcsNyArNjgxLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9od2NhcHModm9pZCkKIHsKIAlzdGF0aWMgY29uc3QgaW50IHN0ZmxfYml0c1s2XSA9IHsgMCwgMiwgNywgMTcsIDE5LCAyMSB9OwotCXN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBmYWNpbGl0eV9saXN0X2V4dGVuZGVkOwogCXVuc2lnbmVkIGludCBmYWNpbGl0eV9saXN0OwogCWludCBpOwpAQCAtNjkzLDE1ICs2OTYsMjIgQEAKIAkgKiAgIEJpdCAxNzogdGhlIG1lc3NhZ2Utc2VjdXJpdHkgYXNzaXN0IGlzIGluc3RhbGxlZAogCSAqICAgQml0IDE5OiB0aGUgbG9uZy1kaXNwbGFjZW1lbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCiAJICogICBCaXQgMjE6IHRoZSBleHRlbmRlZC1pbW1lZGlhdGUgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgMjI6IGV4dGVuZGVkLXRyYW5zbGF0aW9uIGZhY2lsaXR5IDMgaXMgaW5zdGFsbGVkCisJICogICBCaXQgMzA6IGV4dGVuZGVkLXRyYW5zbGF0aW9uIGZhY2lsaXR5IDMgZW5oYW5jZW1lbnQgZmFjaWxpdHkKIAkgKiBUaGVzZSBnZXQgdHJhbnNsYXRlZCB0bzoKIAkgKiAgIEhXQ0FQX1MzOTBfRVNBTjMgYml0IDAsIEhXQ0FQX1MzOTBfWkFSQ0ggYml0IDEsCiAJICogICBIV0NBUF9TMzkwX1NURkxFIGJpdCAyLCBIV0NBUF9TMzkwX01TQSBiaXQgMywKLQkgKiAgIEhXQ0FQX1MzOTBfTERJU1AgYml0IDQsIGFuZCBIV0NBUF9TMzkwX0VJTU0gYml0IDUuCisJICogICBIV0NBUF9TMzkwX0xESVNQIGJpdCA0LCBIV0NBUF9TMzkwX0VJTU0gYml0IDUgYW5kCisJICogICBIV0NBUF9TMzkwX0VURjNFSCBiaXQgOCAoMjIgJiYgMzApLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCWlmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSBzdGZsX2JpdHNbaV0pKSkKIAkJCWVsZl9od2NhcCB8PSAxVUwgPDwgaTsKIAorCWlmICgoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gMjIpKSkKKwkgICAgJiYgKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDMwKSkpKQorCQllbGZfaHdjYXAgfD0gMVVMIDw8IDg7CisKIAkvKgogCSAqIENoZWNrIGZvciBhZGRpdGlvbmFsIGZhY2lsaXRpZXMgd2l0aCBzdG9yZS1mYWNpbGl0eS1saXN0LWV4dGVuZGVkLgogCSAqIHN0ZmxlIHN0b3JlcyBkb3VibGV3b3JkcyAoOCBieXRlKSB3aXRoIGJpdCAxVUxMPDw2MyBhcyBiaXQgMApAQCAtNzEwLDIwICs3MjAsMjIgQEAKIAkgKiBIb3cgbWFueSBmYWNpbGl0eSB3b3JkcyBhcmUgc3RvcmVkIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZgogCSAqIGRvdWJsZXdvcmRzIHBhc3NlZCB0byB0aGUgaW5zdHJ1Y3Rpb24uIFRoZSBhZGRpdGlvbmFsIGZhY2lsaXRlcwogCSAqIGFyZToKLQkgKiAgIEJpdCA0MzogZGVjaW1hbCBmbG9hdGluZyBwb2ludCBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKKwkgKiAgIEJpdCA0MjogZGVjaW1hbCBmbG9hdGluZyBwb2ludCBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKKwkgKiAgIEJpdCA0NDogcGVyZm9ybSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gZmFjaWxpdHkgaXMgaW5zdGFsbGVkCiAJICogdHJhbnNsYXRlZCB0bzoKLQkgKiAgIEhXQ0FQX1MzOTBfREZQIGJpdCA2LgorCSAqICAgSFdDQVBfUzM5MF9ERlAgYml0IDYgKDQyICYmIDQ0KS4KIAkgKi8KIAlpZiAoKGVsZl9od2NhcCAmICgxVUwgPDwgMikpICYmCiAJICAgIF9fc3RmbGUoJmZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQsIDEpID4gMCkgewotCQlpZiAoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2NCAtIDQzKSkpCisJCWlmICgoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQyKSkpCisJCSAgICAmJiAoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQ0KSkpKQogCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA2OwogCX0KIAogCWlmIChNQUNISU5FX0hBU19IUEFHRSkKIAkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA3OwogCi0Jc3dpdGNoIChjcHVpbmZvLT5jcHVfaWQubWFjaGluZSkgeworCXN3aXRjaCAoUzM5MF9sb3djb3JlLmNwdV9pZC5tYWNoaW5lKSB7CiAJY2FzZSAweDk2NzI6CiAjaWYgIWRlZmluZWQoQ09ORklHXzY0QklUKQogCWRlZmF1bHQ6CS8qIFVzZSAiZzUiIGFzIGRlZmF1bHQgZm9yIDMxIGJpdCBrZXJuZWxzLiAqLwpAQCAtODE2LDcgKzgyOCw3IEBACiAJc2V0dXBfbG93Y29yZSgpOwogCiAgICAgICAgIGNwdV9pbml0KCk7Ci0gICAgICAgIF9fY3B1X2xvZ2ljYWxfbWFwWzBdID0gUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyOworCV9fY3B1X2xvZ2ljYWxfbWFwWzBdID0gc3RhcCgpOwogCXMzOTBfaW5pdF9jcHVfdG9wb2xvZ3koKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCAyZDMzN2NiLi4wMDZlZDUwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTUwLDEyICs1MSw2IEBACiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCi0vKgotICogQW4gYXJyYXkgd2l0aCBhIHBvaW50ZXIgdGhlIGxvd2NvcmUgb2YgZXZlcnkgQ1BVLgotICovCi1zdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW05SX0NQVVNdOwotRVhQT1JUX1NZTUJPTChsb3djb3JlX3B0cik7Ci0KIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCiBzdGF0aWMgdTggc21wX2NwdV90eXBlOwpAQCAtODEsOSArNzYsNyBAQAogCiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy9tYWNoaW5lIGNoZWNrcyAqLwogCV9fbG9hZF9wc3dfbWFzayhwc3dfa2VybmVsX2JpdHMgJiB+UFNXX01BU0tfTUNIRUNLKTsKLQotCS8qIHdyaXRlIG1hZ2ljIG51bWJlciB0byB6ZXJvIHBhZ2UgKGFic29sdXRlIDApICovCi0JbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+cGFuaWNfbWFnaWMgPSBfX1BBTklDX01BR0lDOworCXRyYWNlX2hhcmRpcnFzX29mZigpOwogCiAJLyogc3RvcCBhbGwgcHJvY2Vzc29ycyAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CkBAIC0yMzMsNyArMjI2LDcgQEAKICAqLwogI2RlZmluZSBDUFVfSU5JVF9OTwkxCiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogCiAvKgogICogemZjcGR1bXBfcHJlZml4X2FycmF5IGhvbGRzIHByZWZpeCByZWdpc3RlcnMgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86CkBAIC0yNzQsNyArMjY3LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNtcF9nZXRfc2F2ZV9hcmVhKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBwaHlfY3B1KSB7IH0KIAotI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCB8fCBDT05GSUdfWkZDUERVTVBfTU9EVUxFICovCisjZW5kaWYgLyogQ09ORklHX1pGQ1BEVU1QICovCiAKIHN0YXRpYyBpbnQgY3B1X3N0b3BwZWQoaW50IGNwdSkKIHsKQEAgLTMwNCw4ICsyOTcsOCBAQAogewogCWludCBjcHVfaWQsIGxvZ2ljYWxfY3B1OwogCi0JbG9naWNhbF9jcHUgPSBmaXJzdF9jcHUoYXZhaWwpOwotCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19maXJzdCgmYXZhaWwpOworCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm4gMDsKIAlmb3IgKGNwdV9pZCA9IDA7IGNwdV9pZCA8PSA2NTUzNTsgY3B1X2lkKyspIHsKIAkJaWYgKGNwdV9rbm93bihjcHVfaWQpKQpAQCAtMzE2LDggKzMwOSw4IEBACiAJCQljb250aW51ZTsKIAkJY3B1X3NldChsb2dpY2FsX2NwdSwgY3B1X3ByZXNlbnRfbWFwKTsKIAkJc21wX2NwdV9zdGF0ZVtsb2dpY2FsX2NwdV0gPSBDUFVfU1RBVEVfQ09ORklHVVJFRDsKLQkJbG9naWNhbF9jcHUgPSBuZXh0X2NwdShsb2dpY2FsX2NwdSwgYXZhaWwpOwotCQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwkJbG9naWNhbF9jcHUgPSBjcHVtYXNrX25leHQobG9naWNhbF9jcHUsICZhdmFpbCk7CisJCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMzI5LDggKzMyMiw4IEBACiAJaW50IGNwdV9pZCwgbG9naWNhbF9jcHUsIGNwdTsKIAlpbnQgcmM7CiAKLQlsb2dpY2FsX2NwdSA9IGZpcnN0X2NwdShhdmFpbCk7Ci0JaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJbG9naWNhbF9jcHUgPSBjcHVtYXNrX2ZpcnN0KCZhdmFpbCk7CisJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCXJldHVybiAwOwogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKQEAgLTM1MSw4ICszNDQsOCBAQAogCQkJc21wX2NwdV9zdGF0ZVtsb2dpY2FsX2NwdV0gPSBDUFVfU1RBVEVfU1RBTkRCWTsKIAkJZWxzZQogCQkJc21wX2NwdV9zdGF0ZVtsb2dpY2FsX2NwdV0gPSBDUFVfU1RBVEVfQ09ORklHVVJFRDsKLQkJbG9naWNhbF9jcHUgPSBuZXh0X2NwdShsb2dpY2FsX2NwdSwgYXZhaWwpOwotCQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwkJbG9naWNhbF9jcHUgPSBjcHVtYXNrX25leHQobG9naWNhbF9jcHUsICZhdmFpbCk7CisJCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQkJYnJlYWs7CiAJfQogb3V0OgpAQCAtMzc5LDcgKzM3Miw3IEBACiAKIAljX2NwdXMgPSAxOwogCXNfY3B1cyA9IDA7Ci0JYm9vdF9jcHVfYWRkciA9IFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfYWRkcjsKKwlib290X2NwdV9hZGRyID0gX19jcHVfbG9naWNhbF9tYXBbMF07CiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlwYW5pYygic21wX2RldGVjdF9jcHVzIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOwpAQCAtNDUzLDcgKzQ0Niw3IEBACiAJLyogU3dpdGNoIG9uIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJLyogUHJpbnQgaW5mbyBhYm91dCB0aGlzIHByb2Nlc3NvciAqLwotCXByaW50X2NwdV9pbmZvKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEpOworCXByaW50X2NwdV9pbmZvKCk7CiAJLyogY3B1X2lkbGUgd2lsbCBjYWxsIHNjaGVkdWxlIGZvciB1cyAqLwogCWNwdV9pZGxlKCk7CiAJcmV0dXJuIDA7CkBAIC01MTUsNyArNTA4LDYgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIHZvaWQgc21wX2ZyZWVfbG93Y29yZShpbnQgY3B1KQogewogCXN0cnVjdCBfbG93Y29yZSAqbG93Y29yZTsKQEAgLTUzNCw3ICs1MjYsNiBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGxvd2NvcmUsIGxjX29yZGVyKTsKIAlsb3djb3JlX3B0cltjcHVdID0gTlVMTDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyogVXBwaW5nIGFuZCBkb3duaW5nIG9mIENQVXMgKi8KIGludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKQEAgLTU0MywxNiArNTM0LDIzIEBACiAJc3RydWN0IF9sb3djb3JlICpjcHVfbG93Y29yZTsKIAlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKnNmOwogCXNpZ3BfY2NvZGUgY2NvZGU7CisJdTMyIGxvd2NvcmU7CiAKIAlpZiAoc21wX2NwdV9zdGF0ZVtjcHVdICE9IENQVV9TVEFURV9DT05GSUdVUkVEKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAoc21wX2FsbG9jX2xvd2NvcmUoY3B1KSkKIAkJcmV0dXJuIC1FTk9NRU07CisJZG8geworCQljY29kZSA9IHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX2luaXRpYWxfY3B1X3Jlc2V0KTsKKwkJaWYgKGNjb2RlID09IHNpZ3BfYnVzeSkKKwkJCXVkZWxheSgxMCk7CisJCWlmIChjY29kZSA9PSBzaWdwX25vdF9vcGVyYXRpb25hbCkKKwkJCWdvdG8gZXJyX291dDsKKwl9IHdoaWxlIChjY29kZSA9PSBzaWdwX2J1c3kpOwogCi0JY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yX3AoKF9fdTMyKSh1bnNpZ25lZCBsb25nKShsb3djb3JlX3B0cltjcHVdKSwKLQkJCQkgICBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCk7Ci0JaWYgKGNjb2RlKQotCQlyZXR1cm4gLUVJTzsKKwlsb3djb3JlID0gKHUzMikodW5zaWduZWQgbG9uZylsb3djb3JlX3B0cltjcHVdOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AobG93Y29yZSwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwkJdWRlbGF5KDEwKTsKIAogCWlkbGUgPSBjdXJyZW50X3NldFtjcHVdOwogCWNwdV9sb3djb3JlID0gbG93Y29yZV9wdHJbY3B1XTsKQEAgLTU3MSw5ICs1NjksOCBAQAogCQk6IDogImEiICgmY3B1X2xvd2NvcmUtPmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkgOiAibWVtb3J5Iik7CiAJY3B1X2xvd2NvcmUtPnBlcmNwdV9vZmZzZXQgPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV07CiAJY3B1X2xvd2NvcmUtPmN1cnJlbnRfdGFzayA9ICh1bnNpZ25lZCBsb25nKSBpZGxlOwotCWNwdV9sb3djb3JlLT5jcHVfZGF0YS5jcHVfbnIgPSBjcHU7CisJY3B1X2xvd2NvcmUtPmNwdV9uciA9IGNwdTsKIAljcHVfbG93Y29yZS0+a2VybmVsX2FzY2UgPSBTMzkwX2xvd2NvcmUua2VybmVsX2FzY2U7Ci0JY3B1X2xvd2NvcmUtPmlwbF9kZXZpY2UgPSBTMzkwX2xvd2NvcmUuaXBsX2RldmljZTsKIAllaWVpbygpOwogCiAJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX3Jlc3RhcnQpID09IHNpZ3BfYnVzeSkKQEAgLTU4Miw2ICs1NzksMTAgQEAKIAl3aGlsZSAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJY3B1X3JlbGF4KCk7CiAJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJc21wX2ZyZWVfbG93Y29yZShjcHUpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9wb3NzaWJsZV9jcHVzKGNoYXIgKnMpCkBAIC01ODksOSArNTkwLDggQEAKIAlpbnQgcGNwdXMsIGNwdTsKIAogCXBjcHVzID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMCk7Ci0JY3B1X3Bvc3NpYmxlX21hcCA9IGNwdW1hc2tfb2ZfY3B1KDApOwotCWZvciAoY3B1ID0gMTsgY3B1IDwgcGNwdXMgJiYgY3B1IDwgTlJfQ1BVUzsgY3B1KyspCi0JCWNwdV9zZXQoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IHBjcHVzICYmIGNwdSA8IG5yX2NwdV9pZHM7IGNwdSsrKQorCQlzZXRfY3B1X3Bvc3NpYmxlKGNwdSwgdHJ1ZSk7CiAJcmV0dXJuIDA7CiB9CiBlYXJseV9wYXJhbSgicG9zc2libGVfY3B1cyIsIHNldHVwX3Bvc3NpYmxlX2NwdXMpOwpAQCAtNjYzLDcgKzY2Myw3IEBACiAJLyogcmVxdWVzdCB0aGUgMHgxMjAxIGVtZXJnZW5jeSBzaWduYWwgZXh0ZXJuYWwgaW50ZXJydXB0ICovCiAJaWYgKHJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdCgweDEyMDEsIGRvX2V4dF9jYWxsX2ludGVycnVwdCkgIT0gMCkKIAkJcGFuaWMoIkNvdWxkbid0IHJlcXVlc3QgZXh0ZXJuYWwgaW50ZXJydXB0IDB4MTIwMSIpOwotCXByaW50X2NwdV9pbmZvKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEpOworCXByaW50X2NwdV9pbmZvKCk7CiAKIAkvKiBSZWFsbG9jYXRlIGN1cnJlbnQgbG93Y29yZSwgYnV0IGtlZXAgaXRzIGNvbnRlbnRzLiAqLwogCWxjX29yZGVyID0gc2l6ZW9mKGxvbmcpID09IDggPyAxIDogMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlNzVlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwOQorICogIEF1dGhvcihzKTogVWxyaWNoIFdlaWdhbmQgPFVscmljaC5XZWlnYW5kQGRlLmlibS5jb20+LAorICoJICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgorI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2NwY21kLmg+CisKKy8qIFNpZ2gsIG1hdGgtZW11LiBEb24ndCBhc2suICovCisjaW5jbHVkZSA8YXNtL3NmcC11dGlsLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgorCitzdGF0aWMgaW5saW5lIGludCBzdHNpXzAodm9pZCkKK3sKKwlpbnQgcmMgPSBzdHNpKE5VTEwsIDAsIDAsIDApOworCXJldHVybiByYyA9PSAtRU5PU1lTID8gcmMgOiAoKCh1bnNpZ25lZCBpbnQpIHJjKSA+PiAyOCk7Cit9CisKK3N0YXRpYyBpbnQgc3RzaV8xXzFfMShzdHJ1Y3Qgc3lzaW5mb18xXzFfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKK3sKKwlpZiAoc3RzaShpbmZvLCAxLCAxLCAxKSA9PSAtRU5PU1lTKQorCQlyZXR1cm4gbGVuOworCisJRUJDQVNDKGluZm8tPm1hbnVmYWN0dXJlciwgc2l6ZW9mKGluZm8tPm1hbnVmYWN0dXJlcikpOworCUVCQ0FTQyhpbmZvLT50eXBlLCBzaXplb2YoaW5mby0+dHlwZSkpOworCUVCQ0FTQyhpbmZvLT5tb2RlbCwgc2l6ZW9mKGluZm8tPm1vZGVsKSk7CisJRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKKwlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOworCUVCQ0FTQyhpbmZvLT5tb2RlbF9jYXBhY2l0eSwgc2l6ZW9mKGluZm8tPm1vZGVsX2NhcGFjaXR5KSk7CisJRUJDQVNDKGluZm8tPm1vZGVsX3Blcm1fY2FwLCBzaXplb2YoaW5mby0+bW9kZWxfcGVybV9jYXApKTsKKwlFQkNBU0MoaW5mby0+bW9kZWxfdGVtcF9jYXAsIHNpemVvZihpbmZvLT5tb2RlbF90ZW1wX2NhcCkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNYW51ZmFjdHVyZXI6ICAgICAgICAgJS0xNi4xNnNcbiIsCisJCSAgICAgICBpbmZvLT5tYW51ZmFjdHVyZXIpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJUeXBlOiAgICAgICAgICAgICAgICAgJS00LjRzXG4iLAorCQkgICAgICAgaW5mby0+dHlwZSk7CisJaWYgKGluZm8tPm1vZGVsWzBdICE9ICdcMCcpCisJCS8qCisJCSAqIFNpZ2g6IHRoZSBtb2RlbCBmaWVsZCBoYXMgYmVlbiByZW5hbWVkIHdpdGggU3lzdGVtIHo5CisJCSAqIHRvIG1vZGVsX2NhcGFjaXR5IGFuZCBhIG5ldyBtb2RlbCBmaWVsZCBoYXMgYmVlbiBhZGRlZAorCQkgKiBhZnRlciB0aGUgcGxhbnQgZmllbGQuIFRvIGF2b2lkIGNvbmZ1c2luZyBvbGRlciBwcm9ncmFtcworCQkgKiB0aGUgIk1vZGVsOiIgcHJpbnRzICJtb2RlbF9jYXBhY2l0eSBtb2RlbCIgb3IganVzdAorCQkgKiAibW9kZWxfY2FwYWNpdHkiIGlmIHRoZSBtb2RlbCBzdHJpbmcgaXMgZW1wdHkgLgorCQkgKi8KKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCSAgICAgICAiTW9kZWw6ICAgICAgICAgICAgICAgICUtMTYuMTZzICUtMTYuMTZzXG4iLAorCQkJICAgICAgIGluZm8tPm1vZGVsX2NhcGFjaXR5LCBpbmZvLT5tb2RlbCk7CisJZWxzZQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWw6ICAgICAgICAgICAgICAgICUtMTYuMTZzXG4iLAorCQkJICAgICAgIGluZm8tPm1vZGVsX2NhcGFjaXR5KTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VxdWVuY2UgQ29kZTogICAgICAgICUtMTYuMTZzXG4iLAorCQkgICAgICAgaW5mby0+c2VxdWVuY2UpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJQbGFudDogICAgICAgICAgICAgICAgJS00LjRzXG4iLAorCQkgICAgICAgaW5mby0+cGxhbnQpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNb2RlbCBDYXBhY2l0eTogICAgICAgJS0xNi4xNnMgJTA4dVxuIiwKKwkJICAgICAgIGluZm8tPm1vZGVsX2NhcGFjaXR5LCAqKHUzMiAqKSBpbmZvLT5tb2RlbF9jYXBfcmF0aW5nKTsKKwlpZiAoaW5mby0+bW9kZWxfcGVybV9jYXBbMF0gIT0gJ1wwJykKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCSAgICAgICAiTW9kZWwgUGVybS4gQ2FwYWNpdHk6ICUtMTYuMTZzICUwOHVcbiIsCisJCQkgICAgICAgaW5mby0+bW9kZWxfcGVybV9jYXAsCisJCQkgICAgICAgKih1MzIgKikgaW5mby0+bW9kZWxfcGVybV9jYXBfcmF0aW5nKTsKKwlpZiAoaW5mby0+bW9kZWxfdGVtcF9jYXBbMF0gIT0gJ1wwJykKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCSAgICAgICAiTW9kZWwgVGVtcC4gQ2FwYWNpdHk6ICUtMTYuMTZzICUwOHVcbiIsCisJCQkgICAgICAgaW5mby0+bW9kZWxfdGVtcF9jYXAsCisJCQkgICAgICAgKih1MzIgKikgaW5mby0+bW9kZWxfdGVtcF9jYXBfcmF0aW5nKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHN0c2lfMV8yXzIoc3RydWN0IHN5c2luZm9fMV8yXzIgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCit7CisJc3RydWN0IHN5c2luZm9fMV8yXzJfZXh0ZW5zaW9uICpleHQ7CisJaW50IGk7CisKKwlpZiAoc3RzaShpbmZvLCAxLCAyLCAyKSA9PSAtRU5PU1lTKQorCQlyZXR1cm4gbGVuOworCWV4dCA9IChzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKSBpbmZvICsgaW5mby0+YWNjX29mZnNldCk7CisKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBUb3RhbDogICAgICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c190b3RhbCk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNQVXMgQ29uZmlndXJlZDogICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfY29uZmlndXJlZCk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNQVXMgU3RhbmRieTogICAgICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfc3RhbmRieSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNQVXMgUmVzZXJ2ZWQ6ICAgICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfcmVzZXJ2ZWQpOworCisJaWYgKGluZm8tPmZvcm1hdCA9PSAxKSB7CisJCS8qCisJCSAqIFNpZ2ggMi4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIHRoZSBhbHRlcm5hdGUKKwkJICogY2FwYWJpbGl0eSBmaWVsZCBpcyBhIDMyIGJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIKKwkJICogaWYgdGhlIGhpZ2hlciBvcmRlciA4IGJpdHMgYXJlIG5vdCB6ZXJvLiBQcmludGluZworCQkgKiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBpbiB0aGUga2VybmVsIGlzIGEgbm8tbm8sCisJCSAqIGFsd2F5cyBwcmludCB0aGUgbnVtYmVyIGFzIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorCQkgKiBUaGUgdXNlci1zcGFjZSBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBzdHJhbmdlCisJCSAqIGVuY29kaW5nIG9mIHRoZSBhbHRlcm5hdGUgY3B1IGNhcGFiaWxpdHkuCisJCSAqLworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ2FwYWJpbGl0eTogICAgICAgICAgICV1ICV1XG4iLAorCQkJICAgICAgIGluZm8tPmNhcGFiaWxpdHksIGV4dC0+YWx0X2NhcGFiaWxpdHkpOworCQlmb3IgKGkgPSAyOyBpIDw9IGluZm8tPmNwdXNfdG90YWw7IGkrKykKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCisJCQkJICAgICAgICJBZGp1c3RtZW50ICUwMmQtd2F5OiAgICAldSAldVxuIiwKKwkJCQkgICAgICAgaSwgaW5mby0+YWRqdXN0bWVudFtpLTJdLAorCQkJCSAgICAgICBleHQtPmFsdF9hZGp1c3RtZW50W2ktMl0pOworCisJfSBlbHNlIHsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNhcGFiaWxpdHk6ICAgICAgICAgICAldVxuIiwKKwkJCSAgICAgICBpbmZvLT5jYXBhYmlsaXR5KTsKKwkJZm9yIChpID0gMjsgaSA8PSBpbmZvLT5jcHVzX3RvdGFsOyBpKyspCisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAorCQkJCSAgICAgICAiQWRqdXN0bWVudCAlMDJkLXdheTogICAgJXVcbiIsCisJCQkJICAgICAgIGksIGluZm8tPmFkanVzdG1lbnRbaS0yXSk7CisJfQorCisJaWYgKGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5ICE9IDApCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZWNvbmRhcnkgQ2FwYWJpbGl0eTogJWRcbiIsCisJCQkgICAgICAgaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgc3RzaV8yXzJfMihzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKK3sKKwlpZiAoc3RzaShpbmZvLCAyLCAyLCAyKSA9PSAtRU5PU1lTKQorCQlyZXR1cm4gbGVuOworCisJRUJDQVNDKGluZm8tPm5hbWUsIHNpemVvZihpbmZvLT5uYW1lKSk7CisKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBOdW1iZXI6ICAgICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+bHBhcl9udW1iZXIpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ2hhcmFjdGVyaXN0aWNzOiAiKTsKKwlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX0RFRElDQVRFRCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRlZGljYXRlZCAiKTsKKwlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX1NIQVJFRCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNoYXJlZCAiKTsKKwlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX0xJTUlURUQpCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMaW1pdGVkICIpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCisJCSAgICAgICBpbmZvLT5uYW1lKTsKKworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jYWYpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBUb3RhbDogICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfdG90YWwpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgQ29uZmlndXJlZDogJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX2NvbmZpZ3VyZWQpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgU3RhbmRieTogICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3N0YW5kYnkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgUmVzZXJ2ZWQ6ICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3Jlc2VydmVkKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDUFVzIERlZGljYXRlZDogICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19kZWRpY2F0ZWQpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgU2hhcmVkOiAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3NoYXJlZCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBzdHNpXzNfMl8yKHN0cnVjdCBzeXNpbmZvXzNfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQoreworCWludCBpOworCisJaWYgKHN0c2koaW5mbywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkJcmV0dXJuIGxlbjsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Y291bnQ7IGkrKykgeworCQlFQkNBU0MoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKKwkJRUJDQVNDKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKKwkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5uYW1lKTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDb250cm9sIFByb2dyYW06ICUtMTYuMTZzXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwaSk7CisKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBBZGp1c3RtZW50OiAgICAgICVkXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNhZik7CisKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDUFVzIFRvdGFsOiAgICAgICVkXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwdXNfdG90YWwpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgQ29uZmlndXJlZDogJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c19jb25maWd1cmVkKTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDUFVzIFN0YW5kYnk6ICAgICVkXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwdXNfc3RhbmRieSk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ1BVcyBSZXNlcnZlZDogICAlZFxuIiwKKwkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcHVzX3Jlc2VydmVkKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBwcm9jX3JlYWRfc3lzaW5mbyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsCisJCQkgICAgIG9mZl90IG9mZiwgaW50IGNvdW50LAorCQkJICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGluZm8gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaW50IGxldmVsLCBsZW47CisKKwlpZiAoIWluZm8pCisJCXJldHVybiAwOworCisJbGVuID0gMDsKKwlsZXZlbCA9IHN0c2lfMCgpOworCWlmIChsZXZlbCA+PSAxKQorCQlsZW4gPSBzdHNpXzFfMV8xKChzdHJ1Y3Qgc3lzaW5mb18xXzFfMSAqKSBpbmZvLCBwYWdlLCBsZW4pOworCisJaWYgKGxldmVsID49IDEpCisJCWxlbiA9IHN0c2lfMV8yXzIoKHN0cnVjdCBzeXNpbmZvXzFfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7CisKKwlpZiAobGV2ZWwgPj0gMikKKwkJbGVuID0gc3RzaV8yXzJfMigoc3RydWN0IHN5c2luZm9fMl8yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKKworCWlmIChsZXZlbCA+PSAzKQorCQlsZW4gPSBzdHNpXzNfMl8yKChzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqKSBpbmZvLCBwYWdlLCBsZW4pOworCisJZnJlZV9wYWdlKGluZm8pOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3N5c2luZm8odm9pZCkKK3sKKwljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzeXNpbmZvIiwgMDQ0NCwgTlVMTCwKKwkJCSAgICAgICBwcm9jX3JlYWRfc3lzaW5mbywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc3lzaW5mbyk7CisKKy8qCisgKiBTZXJ2aWNlIGxldmVscyBpbnRlcmZhY2UuCisgKi8KKworc3RhdGljIERFQ0xBUkVfUldTRU0oc2VydmljZV9sZXZlbF9zZW0pOworc3RhdGljIExJU1RfSEVBRChzZXJ2aWNlX2xldmVsX2xpc3QpOworCitpbnQgcmVnaXN0ZXJfc2VydmljZV9sZXZlbChzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqc2xyKQoreworCXN0cnVjdCBzZXJ2aWNlX2xldmVsICpwdHI7CisKKwlkb3duX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZzZXJ2aWNlX2xldmVsX2xpc3QsIGxpc3QpCisJCWlmIChwdHIgPT0gc2xyKSB7CisJCQl1cF93cml0ZSgmc2VydmljZV9sZXZlbF9zZW0pOworCQkJcmV0dXJuIC1FRVhJU1Q7CisJCX0KKwlsaXN0X2FkZF90YWlsKCZzbHItPmxpc3QsICZzZXJ2aWNlX2xldmVsX2xpc3QpOworCXVwX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwpOworCitpbnQgdW5yZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKHN0cnVjdCBzZXJ2aWNlX2xldmVsICpzbHIpCit7CisJc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnB0ciwgKm5leHQ7CisJaW50IHJjID0gLUVOT0VOVDsKKworCWRvd25fd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRyLCBuZXh0LCAmc2VydmljZV9sZXZlbF9saXN0LCBsaXN0KSB7CisJCWlmIChwdHIgIT0gc2xyKQorCQkJY29udGludWU7CisJCWxpc3RfZGVsKCZwdHItPmxpc3QpOworCQlyYyA9IDA7CisJCWJyZWFrOworCX0KKwl1cF93cml0ZSgmc2VydmljZV9sZXZlbF9zZW0pOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKTsKKworc3RhdGljIHZvaWQgKnNlcnZpY2VfbGV2ZWxfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlkb3duX3JlYWQoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlcnZpY2VfbGV2ZWxfbGlzdCwgKnBvcyk7Cit9CisKK3N0YXRpYyB2b2lkICpzZXJ2aWNlX2xldmVsX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dChwLCAmc2VydmljZV9sZXZlbF9saXN0LCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX2xldmVsX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXVwX3JlYWQoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKK30KKworc3RhdGljIGludCBzZXJ2aWNlX2xldmVsX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXN0cnVjdCBzZXJ2aWNlX2xldmVsICpzbHI7CisKKwlzbHIgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzZXJ2aWNlX2xldmVsLCBsaXN0KTsKKwlzbHItPnNlcV9wcmludChtLCBzbHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcnZpY2VfbGV2ZWxfc2VxX29wcyA9IHsKKwkuc3RhcnQJCT0gc2VydmljZV9sZXZlbF9zdGFydCwKKwkubmV4dAkJPSBzZXJ2aWNlX2xldmVsX25leHQsCisJLnN0b3AJCT0gc2VydmljZV9sZXZlbF9zdG9wLAorCS5zaG93CQk9IHNlcnZpY2VfbGV2ZWxfc2hvdworfTsKKworc3RhdGljIGludCBzZXJ2aWNlX2xldmVsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzZXJ2aWNlX2xldmVsX3NlcV9vcHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXJ2aWNlX2xldmVsX29wcyA9IHsKKwkub3BlbgkJPSBzZXJ2aWNlX2xldmVsX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlayAJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZQorfTsKKworc3RhdGljIHZvaWQgc2VydmljZV9sZXZlbF92bV9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCisJCQkJICAgc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnNscikKK3sKKwljaGFyICpxdWVyeV9idWZmZXIsICpzdHI7CisKKwlxdWVyeV9idWZmZXIgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIXF1ZXJ5X2J1ZmZlcikKKwkJcmV0dXJuOworCWNwY21kKCJRVUVSWSBDUExFVkVMIiwgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTsKKwlzdHIgPSBzdHJjaHIocXVlcnlfYnVmZmVyLCAnXG4nKTsKKwlpZiAoc3RyKQorCQkqc3RyID0gMDsKKwlzZXFfcHJpbnRmKG0sICJWTTogJXNcbiIsIHF1ZXJ5X2J1ZmZlcik7CisJa2ZyZWUocXVlcnlfYnVmZmVyKTsKK30KKworc3RhdGljIHN0cnVjdCBzZXJ2aWNlX2xldmVsIHNlcnZpY2VfbGV2ZWxfdm0gPSB7CisJLnNlcV9wcmludCA9IHNlcnZpY2VfbGV2ZWxfdm1fcHJpbnQKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZCkKK3sKKwlwcm9jX2NyZWF0ZSgic2VydmljZV9sZXZlbHMiLCAwLCBOVUxMLCAmc2VydmljZV9sZXZlbF9vcHMpOworCWlmIChNQUNISU5FX0lTX1ZNKQorCQlyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKCZzZXJ2aWNlX2xldmVsX3ZtKTsKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKTsKKworLyoKKyAqIEJvZ29taXBzIGNhbGN1bGF0aW9uIGJhc2VkIG9uIGNwdSBjYXBhYmlsaXR5LgorICovCitpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqY2FwYWJpbGl0eSkKK3sKKwlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKKwlpbnQgcmM7CisKKwlpbmZvID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSBzdHNpKGluZm8sIDEsIDIsIDIpOworCWlmIChyYyA9PSAtRU5PU1lTKQorCQlnb3RvIG91dDsKKwlyYyA9IDA7CisJKmNhcGFiaWxpdHkgPSBpbmZvLT5jYXBhYmlsaXR5Oworb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mbyk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ1BVIGNhcGFiaWxpdHkgbWlnaHQgaGF2ZSBjaGFuZ2VkLiBUaGVyZWZvcmUgcmVjYWxjdWxhdGUgbG9vcHNfcGVyX2ppZmZ5LgorICovCit2b2lkIHMzOTBfYWRqdXN0X2ppZmZpZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKKwljb25zdCB1bnNpZ25lZCBpbnQgZm1pbCA9IDB4NGIxODk2ODA7CS8qIDFlNyBhcyAzMi1iaXQgZmxvYXQuICovCisJRlBfREVDTF9TKFNBKTsgRlBfREVDTF9TKFNCKTsgRlBfREVDTF9TKFNSKTsKKwlGUF9ERUNMX0VYOworCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OworCisJaW5mbyA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybjsKKworCWlmIChzdHNpKGluZm8sIDEsIDIsIDIpICE9IC1FTk9TWVMpIHsKKwkJLyoKKwkJICogTWFqb3Igc2lnaC4gVGhlIGNwdSBjYXBhYmlsaXR5IGVuY29kaW5nIGlzICJzcGVjaWFsIi4KKwkJICogSWYgdGhlIGZpcnN0IDkgYml0cyBvZiBpbmZvLT5jYXBhYmlsaXR5IGFyZSAwIHRoZW4gaXQKKwkJICogaXMgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCAuLiAyXjIzLgorCQkgKiBJZiB0aGUgZmlyc3QgOSBiaXRzIGFyZSAhPSAwIHRoZW4gaXQgaXMgYSAzMiBiaXQgZmxvYXQuCisJCSAqIEluIGFkZGl0aW9uIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgcHJvcG9ydGlvbmFsbHkKKwkJICogaGlnaGVyIGNwdSBjYXBhY2l0eS4gQm9nb21pcHMgYXJlIHRoZSBvdGhlciB3YXkgcm91bmQuCisJCSAqIFRvIGdldCB0byBhIGhhbGZ3YXkgc3VpdGFibGUgbnVtYmVyIHdlIGRpdmlkZSAxZTcKKwkJICogYnkgdGhlIGNwdSBjYXBhYmlsaXR5IG51bWJlci4gWWVzLCB0aGF0IG1lYW5zIGEgZmxvYXRpbmcKKwkJICogcG9pbnQgZGl2aXNpb24gLi4gbWF0aC1lbXUgaGVyZSB3ZSBjb21lIDotKQorCQkgKi8KKwkJRlBfVU5QQUNLX1NQKFNBLCAmZm1pbCk7CisJCWlmICgoaW5mby0+Y2FwYWJpbGl0eSA+PiAyMykgPT0gMCkKKwkJCUZQX0ZST01fSU5UX1MoU0IsIGluZm8tPmNhcGFiaWxpdHksIDMyLCBpbnQpOworCQllbHNlCisJCQlGUF9VTlBBQ0tfU1AoU0IsICZpbmZvLT5jYXBhYmlsaXR5KTsKKwkJRlBfRElWX1MoU1IsIFNBLCBTQik7CisJCUZQX1RPX0lOVF9TKGNhcGFiaWxpdHksIFNSLCAzMiwgMCk7CisJfSBlbHNlCisJCS8qCisJCSAqIFJlYWxseSBvbGQgbWFjaGluZSB3aXRob3V0IHN0c2kgYmxvY2sgZm9yIGJhc2ljCisJCSAqIGNwdSBpbmZvcm1hdGlvbi4gUmVwb3J0IDQyLjAgYm9nb21pcHMuCisJCSAqLworCQljYXBhYmlsaXR5ID0gNDI7CisJbG9vcHNfcGVyX2ppZmZ5ID0gY2FwYWJpbGl0eSAqICg1MDAwMDAvSFopOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mbyk7Cit9CisKKy8qCisgKiBjYWxpYnJhdGUgdGhlIGRlbGF5IGxvb3AKKyAqLwordm9pZCBfX2NwdWluaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCit7CisJczM5MF9hZGp1c3RfamlmZmllcygpOworCS8qIFByaW50IHRoZSBnb29kIG9sZCBCb2dvbWlwcyBsaW5lIC4uICovCisJcHJpbnRrKEtFUk5fREVCVUcgIkNhbGlicmF0aW5nIGRlbGF5IGxvb3AgKHNraXBwZWQpLi4uICIKKwkgICAgICAgIiVsdS4lMDJsdSBCb2dvTUlQUyBwcmVzZXRcbiIsIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkgICAgICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZmM0NjhjYS4uZjcyZDQxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogfQogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGNsb2NrX3N5bmNfd29yZCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2NrX3N5bmNfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xvY2tfc3luY19mbGFnczsKIAogI2RlZmluZSBDTE9DS19TWU5DX0hBU19FVFIJMApAQCAtMzk0LDYgKzM5NSwyMCBAQAogCWF0b21pY19zZXRfbWFzaygweDgwMDAwMDAwLCBzd19wdHIpOwogfQogCisvKgorICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGlzIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N5bmNfY2xvY2sodm9pZCkKK3sKKwlhdG9taWNfdCAqc3dfcHRyOworCWludCByYzsKKworCXN3X3B0ciA9ICZnZXRfY3B1X3ZhcihjbG9ja19zeW5jX3dvcmQpOworCXJjID0gKGF0b21pY19yZWFkKHN3X3B0cikgJiAweDgwMDAwMDAwVSkgIT0gMDsKKwlwdXRfY3B1X3ZhcihjbG9ja19zeW5jX3N5bmMpOworCXJldHVybiByYzsKK30KKwogLyogU2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSB1c2VkIGZvciBldHIgYW5kIHN0cCBzeW5jIGV2ZW50cyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0aW1lX3N5bmNfd3E7CiAKQEAgLTQ4NSw2ICs1MDAsOCBAQAogCWlmIChldHJfc2V0cigmZXRyX2VhY3IpID09IDApIHsKIAkJZXRyX3RvbGVjID0gZ2V0X2Nsb2NrKCk7CiAJCXNldF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfSBlbHNlIGlmIChldHJfcG9ydDBfb25saW5lIHx8IGV0cl9wb3J0MV9vbmxpbmUpIHsKIAkJcHJfd2FybmluZygiVGhlIHJlYWwgb3IgdmlydHVhbCBoYXJkd2FyZSBzeXN0ZW0gZG9lcyAiCiAJCQkgICAibm90IHByb3ZpZGUgYW4gRVRSIGludGVyZmFjZVxuIik7CkBAIC01MzMsOCArNTUwLDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLnNsKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1dJVENIX0xPQ0FMLCAmZXRyX2V2ZW50cyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiB9CkBAIC01NDksOCArNTY1LDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLmVzKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1lOQ19DSEVDSywgJmV0cl9ldmVudHMpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogfQpAQCAtOTE0LDcgKzkyOSw3IEBACiAJICogRG8gbm90IHRyeSB0byBnZXQgdGhlIGFsdGVybmF0ZSBwb3J0IGFpYiBpZiB0aGUgY2xvY2sKIAkgKiBpcyBub3QgaW4gc3luYyB5ZXQuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpICYmICFlYWNyLmVzKQorCWlmICghY2hlY2tfc3luY19jbG9jaygpKQogCQlyZXR1cm4gZWFjcjsKIAogCS8qCkBAIC05OTcsNyArMTAxMiw2IEBACiAJCW9uX2VhY2hfY3B1KGRpc2FibGVfc3luY19jbG9jaywgTlVMTCwgMSk7CiAJCWRlbF90aW1lcl9zeW5jKCZldHJfdGltZXIpOwogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC0xMDcxLDE4ICsxMDg1LDEzIEBACiAJCS8qIEJvdGggcG9ydHMgbm90IHVzYWJsZS4gKi8KIAkJZWFjci5lcyA9IGVhY3Iuc2wgPSAwOwogCQlzeW5jX3BvcnQgPSAtMTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQllYWNyLmVzID0gMDsKLQogCS8qCiAJICogSWYgdGhlIGNsb2NrIGlzIGluIHN5bmMganVzdCB1cGRhdGUgdGhlIGVhY3IgYW5kIHJldHVybi4KIAkgKiBJZiB0aGVyZSBpcyBubyB2YWxpZCBzeW5jIHBvcnQgd2FpdCBmb3IgYSBwb3J0IHVwZGF0ZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSB8fAotCSAgICBlYWNyLmVzIHx8IHN5bmNfcG9ydCA8IDApIHsKKwlpZiAoY2hlY2tfc3luY19jbG9jaygpIHx8IHN5bmNfcG9ydCA8IDApIHsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwogCQlldHJfc2V0X3RvbGVjX3RpbWVvdXQobm93KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTEwMywxMyArMTExMiwxMSBAQAogCSAqIGFuZCBzZXQgdXAgYSB0aW1lciB0byB0cnkgYWdhaW4gYWZ0ZXIgMC41IHNlY29uZHMKIAkgKi8KIAlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0Jc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCWlmIChub3cgPCBldHJfdG9sZWMgKyAoMTYwMDAwMCA8PCAxMikgfHwKIAkgICAgZXRyX3N5bmNfY2xvY2tfc3RvcCgmYWliLCBzeW5jX3BvcnQpICE9IDApIHsKIAkJLyogU3luYyBmYWlsZWQuIFRyeSBhZ2FpbiBpbiAxLzIgc2Vjb25kLiAqLwogCQllYWNyLmVzID0gMDsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJZXRyX3NldF9zeW5jX3RpbWVvdXQoKTsKIAl9IGVsc2UKIAkJZXRyX3NldF90b2xlY190aW1lb3V0KG5vdyk7CkBAIC0xMTkxLDE5ICsxMTk4LDMwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwltdXRleF9sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlpZiAoZGV2ID09ICZldHJfcG9ydDBfZGV2KSB7CiAJCWlmIChldHJfcG9ydDBfb25saW5lID09IHZhbHVlKQotCQkJcmV0dXJuIGNvdW50OwkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZ290byBvdXQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCiAJCWV0cl9wb3J0MF9vbmxpbmUgPSB2YWx1ZTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCXNldF9iaXQoRVRSX0VWRU5UX1BPUlQwX0NIQU5HRSwgJmV0cl9ldmVudHMpOwogCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9IGVsc2UgewogCQlpZiAoZXRyX3BvcnQxX29ubGluZSA9PSB2YWx1ZSkKLQkJCXJldHVybiBjb3VudDsJLyogTm90aGluZyB0byBkby4gKi8KKwkJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIGRvLiAqLwogCQlldHJfcG9ydDFfb25saW5lID0gdmFsdWU7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlzZXRfYml0KEVUUl9FVkVOVF9QT1JUMV9DSEFOR0UsICZldHJfZXZlbnRzKTsKIAkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDcxLDggKzE0ODksNiBAQAogICovCiB2b2lkIHN0cF9zeW5jX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTQ4NSw4ICsxNTAxLDYgQEAKICAqLwogdm9pZCBzdHBfaXNsYW5kX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTUxMywxMCArMTUyNyw2IEBACiAKIAllbmFibGVfc3luY19jbG9jaygpOwogCi0Jc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7Ci0KIAlyYyA9IDA7CiAJaWYgKHN0cF9pbmZvLnRvZG9mZlswXSB8fCBzdHBfaW5mby50b2RvZmZbMV0gfHwKIAkgICAgc3RwX2luZm8udG9kb2ZmWzJdIHx8IHN0cF9pbmZvLnRvZG9mZlszXSB8fApAQCAtMTUzNSw5ICsxNTQ1LDYgQEAKIAlpZiAocmMpIHsKIAkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCQlzdHBfc3luYy0+aW5fc3luYyA9IC1FQUdBSU47Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCQlpZiAoZXRyX3BvcnQwX29ubGluZSB8fCBldHJfcG9ydDFfb25saW5lKQotCQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfSBlbHNlCiAJCXN0cF9zeW5jLT5pbl9zeW5jID0gMTsKIAl4Y2hnKCZmaXJzdCwgMCk7CkBAIC0xNTY5LDYgKzE1NzYsMTAgQEAKIAlpZiAocmMgfHwgc3RwX2luZm8uYyA9PSAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwkvKiBTa2lwIHN5bmNocm9uaXphdGlvbiBpZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBpbiBzeW5jLiAqLworCWlmIChjaGVja19zeW5jX2Nsb2NrKCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCW1lbXNldCgmc3RwX3N5bmMsIDAsIHNpemVvZihzdHBfc3luYykpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCWF0b21pY19zZXQoJnN0cF9zeW5jLmNwdXMsIG51bV9vbmxpbmVfY3B1cygpIC0gMSk7CkBAIC0xNjg0LDggKzE2OTUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0hBU19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW11dGV4X2xvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXN0cF9vbmxpbmUgPSB2YWx1ZTsKKwlpZiAoc3RwX29ubGluZSkKKwkJc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCBjYzM2MmM5Li4zYzcyYzljIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjb3JlX2luZm8gKmNvcmUgPSAmY29yZV9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNDU4NGQ4MS4uYzJlNDJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtNjEsOSArNjEsMTEgQEAKICNkZWZpbmUgc3RhY2tfcG9pbnRlciAoeyB2b2lkICoqc3A7IGFzbSgibGEgJTAsMCgxNSkiIDogIj0mZCIgKHNwKSk7IHNwOyB9KQogCiAjaWZuZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBMT05HICIlMDhseCAiCiAjZGVmaW5lIEZPVVJMT05HICIlMDhseCAlMDhseCAlMDhseCAlMDhseFxuIgogc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSAxMjsKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLworI2RlZmluZSBMT05HICIlMDE2bHggIgogI2RlZmluZSBGT1VSTE9ORyAiJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XG4iCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDIwOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAJCQlicmVhazsKIAkJaWYgKGkgJiYgKChpICogc2l6ZW9mIChsb25nKSAlIDMyKSA9PSAwKSkKIAkJCXByaW50aygiXG4gICAgICAgIik7Ci0JCXByaW50aygiJXAgIiwgKHZvaWQgKikqc3RhY2srKyk7CisJCXByaW50ayhMT05HLCAqc3RhY2srKyk7CiAJfQogCXByaW50aygiXG4iKTsKIAlzaG93X3RyYWNlKHRhc2ssIHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNjkwZTE3OC4uODliMmU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIHZkc29fZnJlZV9wZXJfY3B1KGludCBjcHUsIHN0cnVjdCBfbG93Y29yZSAqbG93Y29yZSkKIHsKIAl1bnNpZ25lZCBsb25nIHNlZ21lbnRfdGFibGUsIHBhZ2VfdGFibGUsIHBhZ2VfZnJhbWU7CkBAIC0xNjMsNyArMTYyLDYgQEAKIAlmcmVlX3BhZ2UocGFnZV90YWJsZSk7CiAJZnJlZV9wYWdlcyhzZWdtZW50X3RhYmxlLCBTRUdNRU5UX09SREVSKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIHZvaWQgX192ZHNvX2luaXRfY3I1KHZvaWQgKmR1bW15KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQ3OTZkMDUuLjdhMjA2M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwOCw2ICsxMDgsOCBAQAogCQlFWElUX1RFWFQKIAl9CiAKKwkvKiBlYXJseS5jIHVzZXMgc3RzaSwgd2hpY2ggcmVxdWlyZXMgcGFnZSBhbGlnbmVkIGRhdGEuICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQuZGF0YSA6IHsKIAkJSU5JVF9EQVRBCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCmluZGV4IGUwNTFjYWQuLjNlMjYwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZworKysgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKQEAgLTQsNiArNCw5IEBACiBjb25maWcgSEFWRV9LVk0KICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCA2MTIzNjEwLi45ZDE5ODAzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogc3RhdGljIGludGVyY2VwdF9oYW5kbGVyX3QgaW5zdHJ1Y3Rpb25faGFuZGxlcnNbMjU2XSA9IHsKIAlbMHg4M10gPSBrdm1fczM5MF9oYW5kbGVfZGlhZywKIAlbMHhhZV0gPSBrdm1fczM5MF9oYW5kbGVfc2lncCwKLQlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfcHJpdiwKKwlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfYjIsCiAJWzB4YjddID0gaGFuZGxlX2xjdGwsCiAJWzB4ZWJdID0gaGFuZGxlX2xjdGxnLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IGY0ZmUyOGEuLjAxODkzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtNTU1LDkgKzU1NSwxNCBAQAogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHByb2dyYW0gY2hlY2sgJWQgKGZyb20gdXNlcikiLAogCQkJICAgczM5MGludC0+cGFybSk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYOgorCQlpbnRpLT5wcmVmaXguYWRkcmVzcyA9IHMzOTBpbnQtPnBhcm07CisJCWludGktPnR5cGUgPSBzMzkwaW50LT50eXBlOworCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHNldCBwcmVmaXggdG8gJXggKGZyb20gdXNlcikiLAorCQkJICAgczM5MGludC0+cGFybSk7CisJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfU0lHUF9TVE9QOgogCWNhc2UgS1ZNX1MzOTBfUkVTVEFSVDoKLQljYXNlIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWDoKIAljYXNlIEtWTV9TMzkwX0lOVF9FTUVSR0VOQ1k6CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgImluamVjdDogdHlwZSAleCIsIHMzOTBpbnQtPnR5cGUpOwogCQlpbnRpLT50eXBlID0gczM5MGludC0+dHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAwZDMzODkzLi5mNGQ1NmU5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSAia3ZtLXMzOTAuaCIKICNpbmNsdWRlICJnYWNjZXNzLmgiCiAKQEAgLTI4Niw3ICsyODYsNyBAQAogCXNldHVwX3RpbWVyKCZ2Y3B1LT5hcmNoLmNrY190aW1lciwga3ZtX3MzOTBfaWRsZV93YWtldXAsCiAJCSAodW5zaWduZWQgbG9uZykgdmNwdSk7CiAJZ2V0X2NwdV9pZCgmdmNwdS0+YXJjaC5jcHVfaWQpOwotCXZjcHUtPmFyY2guY3B1X2lkLnZlcnNpb24gPSAweGZlOworCXZjcHUtPmFyY2guY3B1X2lkLnZlcnNpb24gPSAweGZmOwogCXJldHVybiAwOwogfQogCkBAIC00MjIsOCArNDIyLDggQEAKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQpAQCAtNDQwLDggKzQ0MCw2IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAotZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKLQogc3RhdGljIHZvaWQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJbWVtY3B5KCZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2cxNCwgJnZjcHUtPmFyY2guZ3Vlc3RfZ3Byc1sxNF0sIDE2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCAzODkzY2YxLi4wMGJiZTY5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC01MCw3ICs1MCw3IEBACiBpbnQga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNvZGUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBwcml2LmMgKi8KLWludCBrdm1fczM5MF9oYW5kbGVfcHJpdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBzaWdwLmMgKi8KIGludCBrdm1fczM5MF9oYW5kbGVfc2lncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCAzNjA1ZGY0NS4uNGI4ODgzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKQEAgLTMwNCwxMiArMzA0LDI0IEBACiAJWzB4YjFdID0gaGFuZGxlX3N0ZmwsCiB9OwogCi1pbnQga3ZtX3MzOTBfaGFuZGxlX3ByaXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoraW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaW50ZXJjZXB0X2hhbmRsZXJfdCBoYW5kbGVyOwogCisJLyoKKwkgKiBhIGxvdCBvZiBCMiBpbnN0cnVjdGlvbnMgYXJlIHByaXZpbGVkZ2VkLiBXZSBmaXJzdCBjaGVjayBmb3IKKwkgKiB0aGUgcHJpdmlsZWRnZXMgb25lcywgdGhhdCB3ZSBjYW4gaGFuZGxlIGluIHRoZSBrZXJuZWwuIElmIHRoZQorCSAqIGtlcm5lbCBjYW4gaGFuZGxlIHRoaXMgaW5zdHJ1Y3Rpb24sIHdlIGNoZWNrIGZvciB0aGUgcHJvYmxlbQorCSAqIHN0YXRlIGJpdCBhbmQgKGEpIGhhbmRsZSB0aGUgaW5zdHJ1Y3Rpb24gb3IgKGIpIHNlbmQgYSBjb2RlIDIKKwkgKiBwcm9ncmFtIGNoZWNrLgorCSAqIEFueXRoaW5nIGVsc2UgZ29lcyB0byB1c2Vyc3BhY2UuKi8KIAloYW5kbGVyID0gcHJpdl9oYW5kbGVyc1t2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhICYgMHgwMGZmXTsKLQlpZiAoaGFuZGxlcikKLQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CisJaWYgKGhhbmRsZXIpIHsKKwkJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCisJCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsCisJCQkJCQkgICBQR01fUFJJVklMRUdFRF9PUEVSQVRJT04pOworCQllbHNlCisJCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKKwl9CiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2lncC5jIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKaW5kZXggMmEwMWI5ZS4uZjI3ZGJlZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKQEAgLTE1Myw4ICsxNTMsNiBAQAogCiAJc3dpdGNoIChwYXJhbWV0ZXIgJiAweGZmKSB7CiAJY2FzZSAwOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJrdm06IHJlcXVlc3QgdG8gc3dpdGNoIHRvIEVTQS8zOTAgbW9kZSIKLQkJCQkJCQkiIG5vdCBzdXBwb3J0ZWQiKTsKIAkJcmMgPSAzOyAvKiBub3Qgb3BlcmF0aW9uYWwgKi8KIAkJYnJlYWs7CiAJY2FzZSAxOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCmluZGV4IDZjY2I5ZmEuLjNmNWY2ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtOTIsNiArOTMsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQorRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiAKIC8qCiAgKiBTaW1wbGUgdWRlbGF5IHZhcmlhbnQuIFRvIGJlIHVzZWQgb24gc3RhcnR1cCBhbmQgcmVib290CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3N0cmluZy5jIGIvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYwppbmRleCBhZTVjZjVkLi40MTQzYjdjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3N0cmluZy5jCisrKyBiL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKQEAgLTQ0LDcgKzQ0LDExIEBACiAgKi8KIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZXR1cm4gX19zdHJlbmQocykgLSBzOworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogCkBAIC03MCw2ICs3NCw3IEBACiAgKi8KIGNoYXIgKnN0cmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCiB7CisjaWYgX19HTlVDX18gPCA0CiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKIAljaGFyICpyZXQgPSBkZXN0OwogCkBAIC03OCw2ICs4Myw5IEBACiAJCSAgICAgIDogIismYSIgKGRlc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCiAJCSAgICAgIDogImNjIiwgIm1lbW9yeSIgKTsKIAlyZXR1cm4gcmV0OworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmNweShkZXN0LCBzcmMpOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHN0cmNweSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggNGQ1MzcyMC4uODMzZTgzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTIwMCwyOSArMjAwLDYgQEAKIAlkb19ub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIDApOwogfQogCi0vKgotICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCi0gKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0gKi8KLXN0YXRpYyBpbnQgZG9fb3V0X29mX21lbW9yeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwotCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkgewotCQl5aWVsZCgpOwotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldHVybiAxOwotCX0KLQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQotCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCWRvX25vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0zNjcsNyArMzQ0LDYgQEAKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCi1zdXJ2aXZlOgogCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKIAkJYWRkcmVzcyAmPSBIUEFHRV9NQVNLOwogCS8qCkBAIC0zNzgsOCArMzU0LDggQEAKIAlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCB3cml0ZSk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQkJaWYgKGRvX291dF9vZl9tZW1vcnkocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcykpCi0JCQkJZ290byBzdXJ2aXZlOworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGYwMjU4Y2EuLmM2MzRkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtNDAsNyArNDAsOSBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhQQUdFX1NJWkUpKSk7CisKIGNoYXIgIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKK0VYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKIAogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDZiNmRkYzQuLmJlNmMxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjU4LDYgKzI1OCwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKm9sZF9tbTsKIAorCS8qIERvIHdlIGhhdmUgc3dpdGNoZWQgYW1vZGU/IElmIG5vLCB3ZSBjYW5ub3QgZG8gc2llICovCisJaWYgKCFzd2l0Y2hfYW1vZGUpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogRG8gd2UgaGF2ZSBwZ3N0ZXM/IGlmIHllcywgd2UgYXJlIGRvbmUgKi8KIAlpZiAodHNrLT5tbS0+Y29udGV4dC5oYXNfcGdzdGUpCiAJCXJldHVybiAwOwpAQCAtMjkyLDcgKzI5Niw3IEBACiAJdHNrLT5tbSA9IHRzay0+YWN0aXZlX21tID0gbW07CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJdXBkYXRlX21tKG1tLCB0c2spOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXRhc2tfdW5sb2NrKHRzayk7CiAJbW1wdXQob2xkX21tKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBlYmFiZTUxLi44ZDUwZDUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xMDcsNiArMTA3LDkgQEAKIGNvbmZpZyBTWVNfU1VQUE9SVFNfUENJCiAJYm9vbAogCitjb25maWcgU1lTX1NVUFBPUlRTX0NNVAorCWJvb2wKKwogY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAogCWRlZl9ib29sIHkKIApAQCAtMTc2LDYgKzE3OSwxMCBAQAogY29uZmlnIENQVV9TSFgzCiAJYm9vbAogCitjb25maWcgQVJDSF9TSE1PQklMRQorCWJvb2wKKwlzZWxlY3QgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCisKIGNob2ljZQogCXByb21wdCAiUHJvY2Vzc29yIHN1Yi10eXBlIHNlbGVjdGlvbiIKIApAQCAtMTg4LDYgKzE5NSw3IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJYm9vbCAiU3VwcG9ydCBTSDc2MTkgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogIyBTSC0yQSBQcm9jZXNzb3IgU3VwcG9ydAogCkBAIC0yMDAsMTUgKzIwOCwxOCBAQAogCWJvb2wgIlN1cHBvcnQgU0g3MjAzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKIAlzZWxlY3QgQ1BVX0hBU19GUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MjA2CiAJYm9vbCAiU3VwcG9ydCBTSDcyMDYgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDcyNjMKIAlib29sICJTdXBwb3J0IFNINzI2MyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCiAJc2VsZWN0IENQVV9IQVNfRlBVCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX01YRwogCWJvb2wgIlN1cHBvcnQgTVgtRyBwcm9jZXNzb3IiCkBAIC0zMjMsNyArMzM0LDkgQEAKIAlib29sICJTdXBwb3J0IFNINzcyMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAloZWxwCiAJICBTZWxlY3QgU0g3NzIzIGlmIHlvdSBoYXZlIGFuIFNILU1vYmlsZVIyIENQVS4KIApAQCAtMzQ4LDYgKzM2MSwxNCBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAorY29uZmlnIENQVV9TVUJUWVBFX1NINzc4NgorCWJvb2wgIlN1cHBvcnQgU0g3Nzg2IHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NINEEKKwlzZWxlY3QgQ1BVX1NIWDMKKwlzZWxlY3QgQ1BVX0hBU19QVEVBRVgKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSFgzCiAJYm9vbCAiU3VwcG9ydCBTSC1YMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCkBAIC0zNjIsMjAgKzM4MywyNiBAQAogY29uZmlnIENQVV9TVUJUWVBFX1NINzM0MwogCWJvb2wgIlN1cHBvcnQgU0g3MzQzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAorCXNlbGVjdCBBUkNIX1NITU9CSUxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzcyMgogCWJvb2wgIlN1cHBvcnQgU0g3NzIyIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDczNjYKIAlib29sICJTdXBwb3J0IFNINzM2NiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBTF9EU1AKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiAjIFNILTUgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtMzk4LDI1ICs0MjUsMzQgQEAKIG1lbnUgIlRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uIgogCiBjb25maWcgU0hfVE1VCi0JZGVmX2Jvb2wgeQotCXByb21wdCAiVE1VIHRpbWVyIHN1cHBvcnQiCisJYm9vbCAiVE1VIHRpbWVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU0gzIHx8IENQVV9TSDQKKwlkZWZhdWx0IHkKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgVE1VIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKIGNvbmZpZyBTSF9DTVQKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJDTVQgdGltZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9TSDIgJiYgIUNQVV9TVUJUWVBFX01YRworCWJvb2wgIkNNVCB0aW1lciBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX0NNVCAmJiBDUFVfU0gyCisJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIENNVCBhcyB0aGUgc3lzdGVtIHRpbWVyLgogCisjCisjIFN1cHBvcnQgZm9yIHRoZSBuZXctc3R5bGUgQ01UIGRyaXZlci4gVGhpcyB3aWxsIHJlcGxhY2UgU0hfQ01UCisjIG9uY2UgaXRzIG90aGVyIGRlcGVuZGVuY2llcyBhcmUgbWVyZ2VkLgorIworY29uZmlnIFNIX1RJTUVSX0NNVAorCWJvb2wgIkNNVCBjbG9ja2V2ZW50cyBkcml2ZXIiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfQ01UICYmICFTSF9DTVQKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCiBjb25maWcgU0hfTVRVMgotCWRlZl9ib29sIG4KLQlwcm9tcHQgIk1UVTIgdGltZXIgc3VwcG9ydCIKKwlib29sICJNVFUyIHRpbWVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU0gyQQorCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBNVFUyIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKQEAgLTQyNiw3ICs0NjIsOCBAQAogCQkJQ1BVX1NVQlRZUEVfU0g3NzYzCiAJZGVmYXVsdCAiODYiIGlmIENQVV9TVUJUWVBFX1NINzYxOQogCWRlZmF1bHQgIjE0MCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjA2Ci0JZGVmYXVsdCAiMTQyIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMKKwlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMyAmJiBTSF9DTVQKKwlkZWZhdWx0ICIxNTMiIGlmIENQVV9TVUJUWVBFX1NINzIwMyAmJiBTSF9NVFUyCiAJZGVmYXVsdCAiMjM4IiBpZiBDUFVfU1VCVFlQRV9NWEcKIAlkZWZhdWx0ICIxNiIKIApAQCAtNDM4LDcgKzQ3NSw4IEBACiAJZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzc3MCB8fCBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwIHx8IENQVV9TVUJUWVBFX1NINzcwNSB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDMgfHwgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcgICAgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKQEAgLTUyMSw2ICs1NTksMTMgQEAKIAogCSAgRm9yIG1vcmUgZGV0YWlscyBzZWUgRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKIAorY29uZmlnIEtFWEVDX0pVTVAKKwlib29sICJrZXhlYyBqdW1wIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gU1VQRVJIMzIgJiYgS0VYRUMgJiYgSElCRVJOQVRJT04gJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSnVtcCBiZXR3ZWVuIG9yaWdpbmFsIGtlcm5lbCBhbmQga2V4ZWNlZCBrZXJuZWwgYW5kIGludm9rZQorCSAgY29kZSB2aWEgS0VYRUMKKwogY29uZmlnIFNFQ0NPTVAKIAlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuY3B1IGIvYXJjaC9zaC9LY29uZmlnLmNwdQppbmRleCAwZTI3ZmUzLi5jN2Q3MDQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcuY3B1CisrKyBiL2FyY2gvc2gvS2NvbmZpZy5jcHUKQEAgLTEwNCw2ICsxMDQsOSBAQAogY29uZmlnIENQVV9IQVNfUFRFQQogCWJvb2wKIAorY29uZmlnIENQVV9IQVNfUFRFQUVYCisJYm9vbAorCiBjb25maWcgQ1BVX0hBU19EU1AKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDQwNjdiMGQuLmJlY2UxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtODAsNiArODAsNyBAQAogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NVUEVSSDMyKQkJCTo9IHpJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1NINzc4NUxDUikJCTo9IHVJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1JTSykJCQk6PSB1SW1hZ2UKK2RlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9VUlFVRUxMKQkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwppbmRleCA4NjE5MTQ3Li5kY2MxYWY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKQEAgLTE1NSwxNyArMTU1LDIyIEBACiAKIGNvbmZpZyBTSF9TSDc3ODVMQ1JfMjlCSVRfUEhZU01BUFMKIAlib29sICJTSDc3ODVMQ1IgMjliaXQgcGh5c21hcHMiCi0JZGVwZW5kcyBvbiBTSF9TSDc3ODVMQ1IKKwlkZXBlbmRzIG9uIFNIX1NINzc4NUxDUiAmJiAyOUJJVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgYm9hcmQgaGFzIDIgcGh5c2ljYWwgbWVtb3J5IG1hcHMuIEl0IGNhbiBiZSBjaGFuZ2VkIHdpdGgKIAkgIERJUCBzd2l0Y2goUzItNSkuIElmIHlvdSBzZXQgdGhlIERJUCBzd2l0Y2ggZm9yIFMyLTUgPSBPTiwKIAkgIHlvdSBjYW4gYWNjZXNzIGFsbCBvbi1ib2FyZCBkZXZpY2UgaW4gMjliaXQgYWRkcmVzcyBtb2RlLgogCitjb25maWcgU0hfVVJRVUVMTAorCWJvb2wgIlVycXVlbGwiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODYKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNzMsNyArMTc4LDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMwotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODUsNiArMTkwLDEzIEBACiAJICBTZWxlY3QgU0g3NzYzUkRQIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU0g3NzYzCiAJICBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgU0hfRVNQVAorCWJvb2wgIkVTUFQiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjMKKwloZWxwCisJICBTZWxlY3QgRVNQVCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc2MworCSAgd2l0aCBnaWdhYml0IGV0aGVyIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9FRE9TSzc3MDUKIAlib29sICJFRE9TSzc3MDUiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDUKQEAgLTI0MCw3ICsyNTIsNyBAQAogY29uZmlnIFNIX01BR0lDX1BBTkVMX1IyCiAJYm9vbCAiTWFnaWMgUGFuZWwgUjIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjAKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IE1hZ2ljIFBhbmVsIFIyIGlmIGNvbmZpZ3VyaW5nIGZvciBNYWdpYyBQYW5lbCBSMi4KIApAQCAtMjQ5LDYgKzI2MSwxMyBAQAogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g1XzEwMSB8fCBDUFVfU1VCVFlQRV9TSDVfMTAzCiAJc2VsZWN0IFNZU19TVVBQT1JUU19QQ0kKIAorY29uZmlnIFNIX1BPTEFSSVMKKwlib29sICJTTVNDIFBvbGFyaXMiCisJc2VsZWN0IENQVV9IQVNfSVBSX0lSUQorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA5CisJaGVscAorCSAgU2VsZWN0IGlmIGNvbmZpZ3VyaW5nIGZvciBhbiBTTVNDIFBvbGFyaXMgZGV2ZWxvcG1lbnQgYm9hcmQKKwogZW5kbWVudQogCiBzb3VyY2UgImFyY2gvc2gvYm9hcmRzL21hY2gtcjJkL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDI2OWFlMmIuLjdiYWEyMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC00LDUgKzQsOCBAQAogb2JqLSQoQ09ORklHX1NIX0FQMzI1UlhBKQkrPSBib2FyZC1hcDMyNXJ4YS5vCiBvYmotJChDT05GSUdfU0hfTUFHSUNfUEFORUxfUjIpCSs9IGJvYXJkLW1hZ2ljcGFuZWxyMi5vCiBvYmotJChDT05GSUdfU0hfU0g3Nzg1TENSKQkrPSBib2FyZC1zaDc3ODVsY3Iubworb2JqLSQoQ09ORklHX1NIX1VSUVVFTEwpCSs9IGJvYXJkLXVycXVlbGwubwogb2JqLSQoQ09ORklHX1NIX1NITUlOKQkJKz0gYm9hcmQtc2htaW4ubwogb2JqLSQoQ09ORklHX1NIX0VET1NLNzc2MCkJKz0gYm9hcmQtZWRvc2s3NzYwLm8KK29iai0kKENPTkZJR19TSF9FU1BUKQkJKz0gYm9hcmQtZXNwdC5vCitvYmotJChDT05GSUdfU0hfUE9MQVJJUykJKz0gYm9hcmQtcG9sYXJpcy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCAxNWI2ZDQ1Li5hNjRlMzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE2Niw2ICsxNjYsMTYgQEAKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAorc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwkvKiBiYWNrbGlnaHQgKi8KKwljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CisKKwkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT0ZGICovCisJY3RybF9vdXR3KDAsIEZQR0FfTENEUkVHKTsKK30KKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfRVhURVJOQUwsCiAJLmNoWzBdID0gewpAQCAtMTkxLDYgKzIwMSw3IEBACiAJCX0sCiAJCS5ib2FyZF9jZmcgPSB7CiAJCQkuZGlzcGxheV9vbiA9IGFwMzIwX3d2Z2FfcG93ZXJfb24sCisJCQkuZGlzcGxheV9vZmYgPSBhcDMyMF93dmdhX3Bvd2VyX29mZiwKIAkJfSwKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2U1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBEYXRhIFRlY2hub2xvZ3kgSW5jLiBFU1BULUdJR0EgYm9hcmQgc3Vwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KKworLyogTk9SIEZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiVS1Cb290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDIgKiBTWl8xMjhLKSwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gIkxpbnV4LUtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gKDIwICogU1pfMTI4SyksCisJfSwgeworCQkubmFtZSA9ICJSb290IEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVzcHRfbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKKwkucGFydHMgPSBlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAiTk9SIEZsYXNoIiwKKwkJLnN0YXJ0ID0gMCwKKwkJLmVuZCA9IFNaXzhNIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcHRfbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkucmVzb3VyY2UgPSBlc3B0X25vcl9mbGFzaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXNwdF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogU0gtRXRoZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICA9IDB4RkVFMDA4MDAsICAgLyogdXNlIGV0aDEgKi8KKwkJLmVuZCAgICA9IDB4RkVFMDBGN0MgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgID0gNTcsICAgLyogaXJxIG51bWJlciAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSBzaDc3NjNfZXRoX3BkYXRhID0geworCS5waHkgPSAwLAorCS5lZG1hY19lbmRpYW4gPSBFRE1BQ19MSVRUTEVfRU5ESUFOLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwdF9ldGhfZGV2aWNlID0geworCS5uYW1lICAgICAgID0gInNoLWV0aCIsCisJLnJlc291cmNlICAgPSBzaF9ldGhfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hfZXRoX3Jlc291cmNlcyksCisJLmRldiAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNoNzc2M19ldGhfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplc3B0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlc3B0X25vcl9mbGFzaF9kZXZpY2UsCisJJmVzcHRfZXRoX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVzcHRfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlc3B0X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoZXNwdF9kZXZpY2VzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoZXNwdF9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9lc3B0IF9faW5pdG12ID0geworCS5tdl9uYW1lID0gIkVTUFQtR0lHQSIsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjA3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBKdW5lIDIwMDYgc3RldmUuZ2xlbmRpbm5pbmdAc21zYy5jb20KKyAqCisgKiBQb2xhcmlzLXNwZWNpZmljIHJlc291cmNlIGRlY2xhcmF0aW9uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxjcHUvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gtc2UvbWFjaC9zZS5oPgorCisjZGVmaW5lIEJDUjIJCSgweEZGRkZGRjYyKQorI2RlZmluZSBXQ1IyCQkoMHhGRkZGRkY2NikKKyNkZWZpbmUgQVJFQTVfV0FJVF9DVFJMCSgweDFDMDApCisjZGVmaW5lIFdBSVRfU1RBVEVTXzEwCSgweDcpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtbWVtb3J5IiwKKwkJLnN0YXJ0CQk9IFBBX0VYVDUsCisJCS5lbmQJCT0gUEFfRVhUNSArIDB4MWZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtaXJxIiwKKwkJLnN0YXJ0CQk9IElSUTBfSVJRLAorCQkuZW5kCQk9IElSUTBfSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYXJ0YmVhdF9iaXRfcG9zW10gPSB7IDAsIDEsIDIsIDMgfTsKKworc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKKwkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAorCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCisJLnJlZ3NpemUJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQT1JUX1BDRFIsCisJCS5lbmQJPSBQT1JUX1BDRFIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvbGFyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtc2M5MTF4X2RldmljZSwKKwkmaGVhcnRiZWF0X2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBvbGFyaXNfaW5pdGlhbGlzZSh2b2lkKQoreworCXUxNiB3Y3IsIGJjcl9tYXNrOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ29uZmlndXJpbmcgUG9sYXJpcyBleHRlcm5hbCBidXNcbiIpOworCisJLyogQ29uZmlndXJlIGFyZWEgNSB3aXRoIDIgd2FpdCBzdGF0ZXMgKi8KKwl3Y3IgPSBjdHJsX2ludyhXQ1IyKTsKKwl3Y3IgJj0gKH5BUkVBNV9XQUlUX0NUUkwpOworCXdjciB8PSAoV0FJVF9TVEFURVNfMTAgPDwgMTApOworCWN0cmxfb3V0dyh3Y3IsIFdDUjIpOworCisJLyogQ29uZmlndXJlIGFyZWEgNSBmb3IgMzItYml0IGFjY2VzcyAqLworCWJjcl9tYXNrID0gY3RybF9pbncoQkNSMik7CisJYmNyX21hc2sgfD0gMSA8PCAxMDsKKwljdHJsX291dHcoYmNyX21hc2ssIEJDUjIpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHBvbGFyaXNfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShwb2xhcmlzX2RldmljZXMpKTsKK30KK2FyY2hfaW5pdGNhbGwocG9sYXJpc19pbml0aWFsaXNlKTsKKworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBpcHJfaXJxX3RhYmxlW10gPSB7CisJLyogRXh0ZXJuYWwgSVJRcyAqLworCXsgSVJRMF9JUlEsIDAsICAwLCAgMSwgfSwJLyogSVJRMCAqLworCXsgSVJRMV9JUlEsIDAsICA0LCAgMSwgfSwJLyogSVJRMSAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXByX29mZnNldHNbXSA9IHsKKwlJTlRDX0lQUkMKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXByX2Rlc2MgaXByX2lycV9kZXNjID0geworCS5pcHJfb2Zmc2V0cwk9IGlwcl9vZmZzZXRzLAorCS5ucl9vZmZzZXRzCT0gQVJSQVlfU0laRShpcHJfb2Zmc2V0cyksCisKKwkuaXByX2RhdGEJPSBpcHJfaXJxX3RhYmxlLAorCS5ucl9pcnFzCT0gQVJSQVlfU0laRShpcHJfaXJxX3RhYmxlKSwKKwkuY2hpcCA9IHsKKwkJLm5hbWUJPSAic2g3NzA5LWV4dCIsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3BvbGFyaXNfaXJxKHZvaWQpCit7CisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkEpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkIpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkMpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkQpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkUpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkYpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkcpOworCisJcmVnaXN0ZXJfaXByX2NvbnRyb2xsZXIoJmlwcl9pcnFfZGVzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfcG9sYXJpcyBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiUG9sYXJpcyIsCisJLm12X25yX2lycXMJCT0gNjEsCisJLm12X2luaXRfaXJxCQk9IGluaXRfcG9sYXJpc19pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCAzOGE2NDk2Li42Zjk0ZjE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19wY2E5NTY0X3BmX3BsYXRmb3JtX2RhdGEgaTJjX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmdwaW8JCQk9IDAsCiAJLmkyY19jbG9ja19zcGVlZAk9IEkyQ19QQ0FfQ09OXzMzMGtIeiwKLQkudGltZW91dAkJPSAxMDAsCisJLnRpbWVvdXQJCT0gSFosCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmNfZGV2aWNlID0gewpAQCAtMjc1LDcgKzI3NSwxOCBAQAogCiBzdGF0aWMgdm9pZCBzaDc3ODVsY3JfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JY3RybF9vdXRiKDB4MDEsIFAyU0VHQUREUihQTERfUE9GQ1IpKTsKKwl1bnNpZ25lZCBjaGFyICpwOworCisJcCA9IGlvcmVtYXAoUExEX1BPRkNSLCBQTERfUE9GQ1IgKyAxKTsKKwlpZiAoIXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBlcnJvci5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwkqcCA9IDB4MDE7CisJaW91bm1hcChwKTsKKwlzZXRfYmxfYml0KCk7CisJd2hpbGUgKDEpCisJCWNwdV9yZWxheCgpOwogfQogCiAvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gU0g3Nzg2IFVycXVlbGwgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC91cnF1ZWxsLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4Ni5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBCT0FSRFJFRyhTTEVEUiksCisJCS5lbmQJPSBCT0FSRFJFRyhTTEVEUiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0geworCS5yZWdzaXplID0gMTYsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7CisJLmZsYWdzID0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9ldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSAgID0gIlNNQzkxQzExMSIgLAorCQkuc3RhcnQgID0gMHgwNTgwMDMwMCwKKwkJLmVuZCAgICA9IDB4MDU4MDAzMGYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDExLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9ldGhfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzbWM5MXgiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc21jOTF4X2V0aF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNtYzkxeF9ldGhfcmVzb3VyY2VzLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtYzkxeF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJib290ZW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNE0sCisJfSwKKwl7CisJCS5uYW1lCQk9ICJkYXRhIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBub3JfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gTk9SX0ZMQVNIX0FERFIsCisJCS5lbmQJPSBOT1JfRkxBU0hfQUREUiArIE5PUl9GTEFTSF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG5vcl9mbGFzaF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXJxdWVsbF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21jOTF4X2V0aF9kZXZpY2UsCisJJm5vcl9mbGFzaF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1cnF1ZWxsX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwkvKiBVU0IgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9VU0JfT1ZDMCwgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1VTQl9QRU5DMCwgTlVMTCk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXModXJxdWVsbF9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHVycXVlbGxfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKHVycXVlbGxfZGV2aWNlc19zZXR1cCk7CisKK3N0YXRpYyB2b2lkIHVycXVlbGxfcG93ZXJfb2ZmKHZvaWQpCit7CisJX19yYXdfd3JpdGV3KDB4YTVhNSwgVUJPQVJEUkVHKFNSU1RSKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1cnF1ZWxsX2luaXRfaXJxKHZvaWQpCit7CisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwX01BU0spOworfQorCisvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLworc3RhdGljIHZvaWQgX19pbml0IHVycXVlbGxfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gVXJxdWVsbCBzdXBwb3J0LlxuIik7CisKKwlwbV9wb3dlcl9vZmYgPSB1cnF1ZWxsX3Bvd2VyX29mZjsKK30KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3VycXVlbGwgX19pbml0bXYgPSB7CisJLm12X25hbWUJPSAiVXJxdWVsbCIsCisJLm12X3NldHVwCT0gdXJxdWVsbF9zZXR1cCwKKwkubXZfaW5pdF9pcnEJPSB1cnF1ZWxsX2luaXRfaXJxLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKaW5kZXggMDgwNTdmNi4uZGVmNDljYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKQEAgLTE4LDcgKzE4LDcgQEAKIGNvbmZpZyBTSF9SNzc4NVJQCiAJYm9vbCAiUjc3ODVSUCBib2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3Nzg1Ci0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCiBlbmRjaG9pY2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMKaW5kZXggNDRiNjQ4Yy4uNGYxOGQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TCkBAIC0xMCw0NyArMTAsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8Y3B1L21tdV9jb250ZXh0Lmg+CiAKLSNkZWZpbmUgazAJcjAKLSNkZWZpbmUgazEJcjEKLSNkZWZpbmUgazIJcjIKLSNkZWZpbmUgazMJcjMKLSNkZWZpbmUgazQJcjQKLQogLyoKICAqIEtlcm5lbCBtb2RlIHJlZ2lzdGVyIHVzYWdlOgogICoJazAJc2NyYXRjaAogICoJazEJc2NyYXRjaAotICoJazIJc2NyYXRjaCAoRXhjZXB0aW9uIGNvZGUpCi0gKglrMwlzY3JhdGNoIChSZXR1cm4gYWRkcmVzcykKLSAqCWs0CXNjcmF0Y2gKLSAqCWs1CXJlc2VydmVkCi0gKglrNglHbG9iYWwgSW50ZXJydXB0IE1hc2sgKDAtLTE1IDw8IDQpCi0gKglrNwlDVVJSRU5UX1RIUkVBRF9JTkZPIChwb2ludGVyIHRvIGN1cnJlbnQgdGhyZWFkIGluZm8pCisgKiBGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgZW50cnkuUwogICovCiAKKyNkZWZpbmUgazAJcjAKKyNkZWZpbmUgazEJcjEKKwogRU5UUlkod2FrZXVwX3N0YXJ0KQogISBjbGVhciBTVEJZIGJpdAotCW1vdgkjLTEyNiwgazIKKwltb3YJIy0xMjYsIGsxCiAgICAJYW5kCSMxMjcsIGswCi0JbW92LmIJazAsIEBrMgorCW1vdi5iCWswLCBAazEKICEgZW5hYmxlIHJlZnJlc2gKIAltb3YubAk1ZiwgazEKIAltb3Yudwk2ZiwgazAKICAgCW1vdi53CWswLCBAazEKICEganVtcCB0byBoYW5kbGVyCi0JbW92LmwJMmYsIGsyCi0JbW92LmwJM2YsIGszCi0JbW92LmwJQGsyLCBrMgotCiAJbW92LmwJNGYsIGsxCiAJam1wCUBrMQotCW5vcAorCSBub3AKIAogCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTI6CS5sb25nCUlOVEVWVAotMzoJLmxvbmcJcmV0X2Zyb21faXJxCi00OgkubG9uZwloYW5kbGVfZXhjZXB0aW9uCis0OgkubG9uZwloYW5kbGVfaW50ZXJydXB0CiA1OgkubG9uZwkweGZmZmZmZjY4CiA2Ogkud29yZAkweDA1MjQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IDc0Njc0MmJkLi44ZjMwNWIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIAkubXZfc2V0dXAgPSBocDZ4eF9zZXR1cCwKIAkvKiBJUlEncyA6IENQVSg2NCkgKyBDQ0hJUCgxNikgKyBGUkVFX1RPX1VTRSg2KSAqLwogCS5tdl9ucl9pcnFzID0gSEQ2NDQ2MV9JUlFCQVNFICsgSEQ2NDQ2MV9JUlFfTlVNICsgNiwKLQkubXZfaXJxX2RlbXV4ID0gaGQ2NDQ2MV9pcnFfZGVtdXgsCiAJLyogRW5hYmxlIElSUTAgLT4gSVJRMyBpbiBJUlFfTU9ERSAqLwogCS5tdl9pbml0X2lycSA9IGhwNnh4X2luaXRfaXJxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCAyOGU1NmM1Li5iYzM1YjRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC00NTAsNiArNDUwLDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1pZ29yX2RldmljZXNfc2V0dXAodm9pZCkKIHsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIExldCBEMTEgTEVEIHNob3cgU1RBVFVTMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NUQVRVUzAsIE5VTEwpOworCisJLyogTGl0IEQxMiBMRUQgc2hvdyBQRFNUQVRVUyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKKyNlbHNlCiAJLyogTGl0IEQxMSBMRUQgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVEo3LCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo3LCAxKTsKQEAgLTQ1OSw2ICs0NjcsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX1BUSjUsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjUsIDEpOwogCWdwaW9fZXhwb3J0KEdQSU9fUFRKNSwgMCk7CisjZW5kaWYKIAogCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcKaW5kZXggYmZmMDk1ZC4uYWVmZjNiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCA2ZjkyNmZkLi4zOTA1MzRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTYzLDE1ICs2MywxOSBAQAogCX0sCiB9OwogCi0vKiBTSC1FdGhlciAqLworLyoKKyAqIFNILUV0aGVyCisgKgorICogU0ggRXRoZXIgb2YgU0g3NzYzIGhhcyBtdWx0aSBJUlEgaGFuZGxpbmcuCisgKiAoNTcsNTgsNTkgLT4gNTcpCisgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ICA9IDB4RkVFMDA4MDAsICAgLyogdXNlIGV0aDEgKi8KIAkJLmVuZCAgICA9IDB4RkVFMDBGN0MgLSAxLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgID0gNTgsICAgLyogaXJxIG51bWJlciAqLwotCQkuZW5kICAgID0gNTgsCisJCS5zdGFydCAgPSA1NywgICAvKiBpcnEgbnVtYmVyICovCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBjMTZjY2Q0Li45NTQ4M2QxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0zMywyMCArMzMsMjQgQEAKICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXg6IEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL2NvbXByZXNzZWQgJEAKIAotaWZlcSAoJChDT05GSUdfMzJCSVQpLHkpCi1LRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKLQkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKLWVsc2UKLUtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAotCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKK0tFUk5FTF9NRU1PUlkgOj0gMHgwMDAwMDAwMAoraWZlcSAoJChDT05GSUdfUE1CX0ZJWEVEKSx5KQorS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpICYgMHgxZmZmZmZmZl0nKQogZW5kaWYKK2lmZXEgKCQoQ09ORklHXzI5QklUKSx5KQorS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpXScpCitlbmRpZgorCitLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAorCQkJJChLRVJORUxfTUVNT1JZKSArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCiAKIEtFUk5FTF9FTlRSWQk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKKwkJCSQoS0VSTkVMX01FTU9SWSkgKyBcCiAJCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKSArICQoQ09ORklHX0VOVFJZX09GRlNFVCldJykKIAogcXVpZXRfY21kX3VpbWFnZSA9IFVJTUFHRSAgJEAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKaW5kZXggMjdjZWViOS4uMjVlZjkxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKQEAgLTUzLDIxICs1MywyMiBAQAogCS51bm1hc2sJCT0gaGQ2NDQ2MV91bm1hc2tfaXJxLAogfTsKIAotaW50IGhkNjQ0NjFfaXJxX2RlbXV4KGludCBpcnEpCitzdGF0aWMgdm9pZCBoZDY0NDYxX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JaWYgKGlycSA9PSBDT05GSUdfSEQ2NDQ2MV9JUlEpIHsKLQkJdW5zaWduZWQgc2hvcnQgYml0OwotCQl1bnNpZ25lZCBzaG9ydCBuaXJyID0gaW53KEhENjQ0NjFfTklSUik7Ci0JCXVuc2lnbmVkIHNob3J0IG5pbXIgPSBpbncoSEQ2NDQ2MV9OSU1SKTsKLQkJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KEhENjQ0NjFfTklSUik7CisJc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKKwl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IEhENjQ0NjFfSVJRQkFTRTsKIAotCQluaXJyICY9IH5uaW1yOwotCQlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgMTY7IGJpdCA8PD0gMSwgaSsrKQotCQkJaWYgKG5pcnIgJiBiaXQpCi0JCQkJYnJlYWs7Ci0JCWlycSA9IEhENjQ0NjFfSVJRQkFTRSArIGk7CisJaW50diAmPSAoMSA8PCBIRDY0NDYxX0lSUV9OVU0pIC0gMTsKKworCXdoaWxlIChpbnR2KSB7CisJCWlmIChpbnR2ICYgMSkgeworCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7CisJCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKKwkJfQorCQlpbnR2ID4+PSAxOworCQlleHRfaXJxKys7CiAJfQotCXJldHVybiBpcnE7CiB9CiAKIGludCBfX2luaXQgc2V0dXBfaGQ2NDQ2MSh2b2lkKQpAQCAtOTMsNiArOTQsOSBAQAogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmhkNjQ0NjFfaXJxX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAorCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKENPTkZJR19IRDY0NDYxX0lSUSwgaGQ2NDQ2MV9pcnFfZGVtdXgpOworCXNldF9pcnFfdHlwZShDT05GSUdfSEQ2NDQ2MV9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CisKICNpZmRlZiBDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSCiAJcHJpbnRrKEtFUk5fSU5GTyAiSEQ2NDQ2MTogZW5hYmxpbmcgUENNQ0lBIGRldmljZXNcbiIpOwogCV9fcmF3X3dyaXRlYigweDRjLCBIRDY0NDYxX1BDQzFDU0NJRVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2VjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTkwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3CisjIFR1ZSBNYXIgMTcgMTM6MjU6NTggMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfVVRTX05TPXkKK0NPTkZJR19JUENfTlM9eQorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX1NINzc2M1JEUCBpcyBub3Qgc2V0CitDT05GSUdfU0hfRVNQVD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0yOAorQ09ORklHX1NIX1BDTEtfRlJFUT02NjY2NjY2NgorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NIX0VUSD15CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GT1JFSUdOX0VORElBTj15CitDT05GSUdfRkJfQk9USF9FTkRJQU49eQorIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0g3NzYwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfTE9HT19TVVBFUkhfTU9OTz15CitDT05GSUdfTE9HT19TVVBFUkhfVkdBMTY9eQorQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0FVVE9GU19GUz15CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT15CitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj15CitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND15CitDT05GSUdfTkxTX0lTTzg4NTlfOD15CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9eQorQ09ORklHX05MU19JU084ODU5XzM9eQorQ09ORklHX05MU19JU084ODU5XzQ9eQorQ09ORklHX05MU19JU084ODU5XzU9eQorQ09ORklHX05MU19JU084ODU5XzY9eQorQ09ORklHX05MU19JU084ODU5Xzc9eQorQ09ORklHX05MU19JU084ODU5Xzk9eQorQ09ORklHX05MU19JU084ODU5XzEzPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xND15CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQorQ09ORklHX05MU19LT0k4X1I9eQorQ09ORklHX05MU19LT0k4X1U9eQorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjBkZWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTY5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0CisjIFdlZCBGZWIgMTEgMTg6NDE6NTkgMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MEMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVX0VNVT15CitDT05GSUdfU0hfQURDPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19JUFJfSVJRPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAorQ09ORklHX1NIX1BPTEFSSVM9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMwMDAwMDAKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCitDT05GSUdfU0hfRE1BX0FQST15CitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIG1lbT02M00gbXRkcGFydHM9cGh5c21hcC1mbGFzaC4wOjB4MDAxMDAwMDAoYm9vdGxvYWRlcilybywweDAwNTAwMDAwKEtlcm5lbClybywweDAwQTAwMDAwKEZpbGVzeXN0ZW0pIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9DT01QQVQ9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMTAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0g9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CitDT05GSUdfREVCVUdfUElfTElTVD15CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVA9eQorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tERVAgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0c9eQorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weDAwMDAwMDAwCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9HRU5FUklDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTFkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE1NTMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgRnJpIEZlYiAyMCAxODoyNToyOSAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4NDAwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDIwMDAwMDAwCisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQl9FTkFCTEU9eQorIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKK0NPTkZJR19QTUJfRklYRUQ9eQorIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTIKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKK0NPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9TSDc3ODVMQ1I9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MjgKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX1BDSV9BVVRPPXkKK0NPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUw9eQorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorQ09ORklHX1I4MTY5PXkKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPUENBPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GSUxMUkVDVD1tCitDT05GSUdfRkJfU1lTX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9TWVNfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRk9QUz1tCitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD1tCisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1RFU1Q9bQorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlM1QzM3Mj15CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTcyNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMzMiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBUaHUgTWFyICA1IDE3OjI4OjEzIDIwMDkKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorQ09ORklHX0NQVV9TSFgzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4Nj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKK0NPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX1VSUVVFTEw9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwgMzg0MDAgZWFybHlwcmludGs9c2VyaWFsIGlwPW9uIGlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPWRoY3AgbWVtY2h1bmsudnB1PTRtIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT1BDQT15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCitDT05GSUdfSTJDX1BDQV9QTEFURk9STT15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorQ09ORklHX01GRF9TTTUwMT15CisjIENPTkZJR19NRkRfU001MDFfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GSUxMUkVDVD1tCitDT05GSUdfRkJfU1lTX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9TWVNfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRk9QUz1tCitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCitDT05GSUdfRkJfU001MDE9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCAwMTkzNjM2Li5mMTNhMDUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC05LDEzICs5LDIxIEBACiAJc2VsZWN0IFNIX0RNQV9BUEkKIAlkZWZhdWx0IG4KIAorY29uZmlnIFNIX0RNQV9JUlFfTVVMVEkKKwlib29sCisJZGVwZW5kcyBvbiBTSF9ETUEKKwlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwIHx8IENQVV9TVUJUWVBFX1NINzc1MSB8fCBcCisJCUNQVV9TVUJUWVBFX1NINzc1MFMgfHwgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSIHx8IFwKKwkJQ1BVX1NVQlRZUEVfU0g3MDkxIHx8IENQVV9TVUJUWVBFX1NINzc2MyB8fCBDUFVfU1VCVFlQRV9TSDc3NjQgfHwgXAorCQlDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CisKIGNvbmZpZyBOUl9PTkNISVBfRE1BX0NIQU5ORUxTCiAJaW50CiAJZGVwZW5kcyBvbiBTSF9ETUEKLQlkZWZhdWx0ICI2IiBpZiBDUFVfU1VCVFlQRV9TSDc3MjAgfHwgQ1BVX1NVQlRZUEVfU0g3NzIxCi0JZGVmYXVsdCAiOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCi0JZGVmYXVsdCAiMTIiIGlmIENQVV9TVUJUWVBFX1NINzc4MAotCWRlZmF1bHQgIjQiCisJZGVmYXVsdCAiNCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwIHx8IENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTBTCisJZGVmYXVsdCAiOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSIHx8IENQVV9TVUJUWVBFX1NINzc2MAorCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQorCWRlZmF1bHQgIjYiCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjaGFubmVscyB0aGF0IHRoZSBvbi1jaGlwCiAJICBETUFDIHN1cHBvcnRzLiBUaGlzIHdpbGwgYmUgNCBmb3IgU0g3NzUwL1NINzc1MSBhbmQgOCBmb3IgdGhlCkBAIC00Niw0ICs1NCwyOCBAQAogCSAgb2YgdGhlIFNINzc2MC4KIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBBdWRpby9VU0IgRE1BIG9uIHlvdXIgU0g3NzYwIGJvYXJkLgogCitjb25maWcgUFZSMl9ETUEKKwl0cmlzdGF0ZSAiUG93ZXJWUiAyIERNQUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVCAmJiBTSF9ETUEKKwloZWxwCisJICBTZWxlY3RpbmcgdGhpcyB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgUFZSMiBETUEgY29udHJvbGxlci4KKwkgIEFzIHRoaXMgY2hhaW5zIG9mZiBvZiB0aGUgb24tY2hpcCBETUFDLCB0aGF0IG11c3QgYWxzbyBiZQorCSAgZW5hYmxlZCBieSBkZWZhdWx0LgorCisJICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBwdnIyZmIgZnJhbWVidWZmZXIgZHJpdmVyIGZvcgorCSAgY2VydGFpbiBvcHRpbWl6YXRpb25zLCBidXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25hbGl0eS4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCitjb25maWcgRzJfRE1BCisJdHJpc3RhdGUgIkcyIEJ1cyBETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVAorCXNlbGVjdCBTSF9ETUFfQVBJCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBETUEgY29udHJvbGxlciBmb3IgdGhlIERyZWFtY2FzdCdzCisJICBHMiBidXMuIERyaXZlcnMgdGhhdCB3YW50IHRoaXMgd2lsbCBnZW5lcmFsbHkgZW5hYmxlIHRoaXMgb24KKwkgIHRoZWlyIG93bi4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCBhYjk1NmFkLi5jNjA2ODEzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTQsNSArNCw2IEBACiAKIG9iai0kKENPTkZJR19TSF9ETUFfQVBJKQkrPSBkbWEtYXBpLm8gZG1hLXN5c2ZzLm8KIG9iai0kKENPTkZJR19TSF9ETUEpCQkrPSBkbWEtc2gubwotb2JqLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJKz0gZG1hLXB2cjIubyBkbWEtZzIubworb2JqLSQoQ09ORklHX1BWUjJfRE1BKQkJKz0gZG1hLXB2cjIubworb2JqLSQoQ09ORklHX0cyX0RNQSkJCSs9IGRtYS1nMi5vCiBvYmotJChDT05GSUdfU0hfRE1BQlJHKQkJKz0gZG1hYnJnLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCmluZGV4IDUwODg3YTUuLjM3ZmI1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwpAQCAtMTcsMjggKzE3LDE2IEBACiAjaW5jbHVkZSA8bWFjaC1kcmVhbWNhc3QvbWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAiZG1hLXNoLmgiCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogCi1zdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdID0gewotCURNVEUwX0lSUSwKLQlETVRFMV9JUlEsCi0JRE1URTJfSVJRLAotCURNVEUzX0lSUSwKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLQlETVRFNF9JUlEsCi0JRE1URTVfSVJRLAorI2lmIGRlZmluZWQoRE1BRTFfSVJRKQorI2RlZmluZSBOUl9ETUFFCQkyCisjZWxzZQorI2RlZmluZSBOUl9ETUFFCQkxCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKSB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLQlETVRFNl9JUlEsCi0JRE1URTdfSVJRLAotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICpkbWFlX25hbWVbXSA9IHsKKwkiRE1BQyBBZGRyZXNzIEVycm9yMCIsICJETUFDIEFkZHJlc3MgRXJyb3IxIgogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2RtdGVfaXJxKHVuc2lnbmVkIGludCBjaGFuKQpAQCAtNDYsNyArMzQsMTQgQEAKIAl1bnNpZ25lZCBpbnQgaXJxID0gMDsKIAlpZiAoY2hhbiA8IEFSUkFZX1NJWkUoZG10ZV9pcnFfbWFwKSkKIAkJaXJxID0gZG10ZV9pcnFfbWFwW2NoYW5dOworCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwlpZiAoaXJxID4gRE1URTZfSVJRKQorCQlyZXR1cm4gRE1URTZfSVJROworCXJldHVybiBETVRFMF9JUlE7CisjZWxzZQogCXJldHVybiBpcnE7CisjZW5kaWYKIH0KIAogLyoKQEAgLTU5LDcgKzU0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsY194bWl0X3NoaWZ0KHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQl1MzIgY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCXUzMiBjaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCiAJcmV0dXJuIHRzX3NoaWZ0WyhjaGNyICYgQ0hDUl9UU19NQVNLKT4+Q0hDUl9UU19TSElGVF07CiB9CkBAIC03NSwxMyArNzAsMTMgQEAKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4gPSBkZXZfaWQ7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAogCWlmICghKGNoY3IgJiBDSENSX1RFKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJY2hjciAmPSB+KENIQ1JfSUUgfCBDSENSX0RFKTsKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJd2FrZV91cCgmY2hhbi0+d2FpdF9xdWV1ZSk7CiAKQEAgLTk0LDcgKzg5LDEyIEBACiAJCXJldHVybiAwOwogCiAJcmV0dXJuIHJlcXVlc3RfaXJxKGdldF9kbXRlX2lycShjaGFuLT5jaGFuKSwgZG1hX3RlaSwKLQkJCSAgIElSUUZfRElTQUJMRUQsIGNoYW4tPmRldl9pZCwgY2hhbik7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwkJCQlJUlFGX1NIQVJFRCwKKyNlbHNlCisJCQkJSVJRRl9ESVNBQkxFRCwKKyNlbmRpZgorCQkJCWNoYW4tPmRldl9pZCwgY2hhbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2RtYWNfZnJlZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTE1LDcgKzExNSw3IEBACiAJCWNoYW4tPmZsYWdzICY9IH5ETUFfVEVJX0NBUEFCTEU7CiAJfQogCi0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCWNoYW4tPmZsYWdzIHw9IERNQV9DT05GSUdVUkVEOwogCXJldHVybiAwOwpAQCAtMTI2LDEzICsxMjYsMTMgQEAKIAlpbnQgaXJxOwogCXUzMiBjaGNyOwogCi0JY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciB8PSBDSENSX0RFOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKQogCQljaGNyIHw9IENIQ1JfSUU7CiAKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSB7CiAJCWlycSA9IGdldF9kbXRlX2lycShjaGFuLT5jaGFuKTsKQEAgLTE1MCw5ICsxNTAsOSBAQAogCQlkaXNhYmxlX2lycShpcnEpOwogCX0KIAotCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgJj0gfihDSENSX0RFIHwgQ0hDUl9URSB8IENIQ1JfSUUpOwotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfZG1hY194ZmVyX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCkBAIC0xODMsMTIgKzE4MywxMyBAQAogCSAqLwogCWlmIChjaGFuLT5zYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5zYXIsIFNBUltjaGFuLT5jaGFuXSk7CisJCWN0cmxfb3V0bChjaGFuLT5zYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dK1NBUikpOwogCWlmIChjaGFuLT5kYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5kYXIsIERBUltjaGFuLT5jaGFuXSk7CisJCWN0cmxfb3V0bChjaGFuLT5kYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgREFSKSk7CiAKLQljdHJsX291dGwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLCBETUFUQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksCisJCShkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKSk7CiAKIAlzaF9kbWFjX2VuYWJsZV9kbWEoY2hhbik7CiAKQEAgLTE5NywzNiArMTk4LDI2IEBACiAKIHN0YXRpYyBpbnQgc2hfZG1hY19nZXRfZG1hX3Jlc2lkdWUoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmICghKGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pICYgQ0hDUl9ERSkpCisJaWYgKCEoY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpICYgQ0hDUl9ERSkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGN0cmxfaW5sKERNQVRDUltjaGFuLT5jaGFuXSkgPDwgY2FsY194bWl0X3NoaWZ0KGNoYW4pOworCXJldHVybiBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKQorCQkgPDwgY2FsY194bWl0X3NoaWZ0KGNoYW4pOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotI2RlZmluZSBkbWFvcl9yZWFkX3JlZygpCWN0cmxfaW53KERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcoZGF0YSkJY3RybF9vdXR3KGRhdGEsIERNQU9SKQotI2Vsc2UKLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcoKQljdHJsX2lubChETUFPUikKLSNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKGRhdGEpCWN0cmxfb3V0bChkYXRhLCBETUFPUikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBkbWFvcl9yZXNldCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgZG1hb3JfcmVzZXQoaW50IG5vKQogewotCXVuc2lnbmVkIGxvbmcgZG1hb3IgPSBkbWFvcl9yZWFkX3JlZygpOworCXVuc2lnbmVkIGxvbmcgZG1hb3IgPSBkbWFvcl9yZWFkX3JlZyhubyk7CiAKIAkvKiBUcnkgdG8gY2xlYXIgdGhlIGVycm9yIGZsYWdzIGZpcnN0LCBpbmNhc2UgdGhleSBhcmUgc2V0ICovCiAJZG1hb3IgJj0gfihETUFPUl9OTUlGIHwgRE1BT1JfQUUpOwotCWRtYW9yX3dyaXRlX3JlZyhkbWFvcik7CisJZG1hb3Jfd3JpdGVfcmVnKG5vLCBkbWFvcik7CiAKIAlkbWFvciB8PSBETUFPUl9JTklUOwotCWRtYW9yX3dyaXRlX3JlZyhkbWFvcik7CisJZG1hb3Jfd3JpdGVfcmVnKG5vLCBkbWFvcik7CiAKIAkvKiBTZWUgaWYgd2UgZ290IGFuIGVycm9yIGFnYWluICovCi0JaWYgKChkbWFvcl9yZWFkX3JlZygpICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpKSB7CisJaWYgKChkbWFvcl9yZWFkX3JlZyhubykgJiAoRE1BT1JfQUUgfCBETUFPUl9OTUlGKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWEtc2g6IENhbid0IGluaXRpYWxpemUgRE1BT1IuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjM3LDEwICsyMjgsMzMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQogc3RhdGljIGlycXJldHVybl90IGRtYV9lcnIoaW50IGlycSwgdm9pZCAqZHVtbXkpCiB7Ci0JZG1hb3JfcmVzZXQoKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCWludCBjbnQgPSAwOworCXN3aXRjaCAoaXJxKSB7CisjaWYgZGVmaW5lZChETVRFNl9JUlEpICYmIGRlZmluZWQoRE1BRTFfSVJRKQorCWNhc2UgRE1URTZfSVJROgorCQljbnQrKzsKKyNlbmRpZgorCWNhc2UgRE1URTBfSVJROgorCQlpZiAoZG1hb3JfcmVhZF9yZWcoY250KSAmIChETUFPUl9OTUlGIHwgRE1BT1JfQUUpKSB7CisJCQlkaXNhYmxlX2lycShpcnEpOworCQkJLyogRE1BIG11bHRpIGFuZCBlcnJvciBJUlEgKi8KKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisjZWxzZQorCWRtYW9yX3Jlc2V0KDApOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorCWRtYW9yX3Jlc2V0KDEpOworI2VuZGlmCiAJZGlzYWJsZV9pcnEoaXJxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKKyNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTI1OSwyNCArMjczLDU5IEBACiAJLmZsYWdzCQk9IERNQUNfQ0hBTk5FTFNfVEVJX0NBUEFCTEUsCiB9OwogCisjaWZkZWYgQ09ORklHX0NQVV9TSDQKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2RtYV9lcnJvcl9pcnEoaW50IG4pCit7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwlyZXR1cm4gKG4gPT0gMCkgPyBnZXRfZG10ZV9pcnEoMCkgOiBnZXRfZG10ZV9pcnEoNik7CisjZWxzZQorCXJldHVybiAobiA9PSAwKSA/IERNQUUwX0lSUSA6CisjaWYgZGVmaW5lZChETUFFMV9JUlEpCisJCQkJRE1BRTFfSVJROworI2Vsc2UKKwkJCQktMTsKKyNlbmRpZgorI2VuZGlmCit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgc2hfZG1hY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRtYV9pbmZvICppbmZvID0gJnNoX2RtYWNfaW5mbzsKIAlpbnQgaTsKIAogI2lmZGVmIENPTkZJR19DUFVfU0g0Ci0JaSA9IHJlcXVlc3RfaXJxKERNQUVfSVJRLCBkbWFfZXJyLCBJUlFGX0RJU0FCTEVELCAiRE1BQyBBZGRyZXNzIEVycm9yIiwgMCk7Ci0JaWYgKHVubGlrZWx5KGkgPCAwKSkKLQkJcmV0dXJuIGk7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgTlJfRE1BRTsgbisrKSB7CisJCWkgPSByZXF1ZXN0X2lycShnZXRfZG1hX2Vycm9yX2lycShuKSwgZG1hX2VyciwKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCQkJCUlSUUZfU0hBUkVELAorI2Vsc2UKKwkJCQlJUlFGX0RJU0FCTEVELAogI2VuZGlmCisJCQkJZG1hZV9uYW1lW25dLCAodm9pZCAqKWRtYWVfbmFtZVtuXSk7CisJCWlmICh1bmxpa2VseShpIDwgMCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgcmVxdWVzdF9pcnEgZmFpbFxuIiwgZG1hZV9uYW1lW25dKTsKKwkJCXJldHVybiBpOworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19DUFVfU0g0ICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgRE1BT1IsIGFuZCBjbGVhbiB1cCBhbnkgZXJyb3IgZmxhZ3MgdGhhdCBtYXkgaGF2ZQogCSAqIGJlZW4gc2V0LgogCSAqLwotCWkgPSBkbWFvcl9yZXNldCgpOworCWkgPSBkbWFvcl9yZXNldCgwKTsKIAlpZiAodW5saWtlbHkoaSAhPSAwKSkKIAkJcmV0dXJuIGk7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisJaSA9IGRtYW9yX3Jlc2V0KDEpOworCWlmICh1bmxpa2VseShpICE9IDApKQorCQlyZXR1cm4gaTsKKyNlbmRpZgogCiAJcmV0dXJuIHJlZ2lzdGVyX2RtYWMoaW5mbyk7CiB9CkBAIC0yODQsOCArMzMzLDEyIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc2hfZG1hY19leGl0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0NQVV9TSDQKLQlmcmVlX2lycShETUFFX0lSUSwgMCk7Ci0jZW5kaWYKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBOUl9ETUFFOyBuKyspIHsKKwkJZnJlZV9pcnEoZ2V0X2RtYV9lcnJvcl9pcnEobiksICh2b2lkICopZG1hZV9uYW1lW25dKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NQVV9TSDQgKi8KIAl1bnJlZ2lzdGVyX2RtYWMoJnNoX2RtYWNfaW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmggYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWZlY2Q1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgVGFrYXNoaSBZT1NISUkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fRE1BX1NIX0gKLSNkZWZpbmUgX19ETUFfU0hfSAotCi0jaW5jbHVkZSA8Y3B1L2RtYS5oPgotCi0vKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCi0jZGVmaW5lIFJFUV9MCTB4MDAwMDAwMDAKLSNkZWZpbmUgUkVRX0UJMHgwMDA4MDAwMAotI2RlZmluZSBSQUNLX0gJMHgwMDAwMDAwMAotI2RlZmluZSBSQUNLX0wJMHgwMDA0MDAwMAotI2RlZmluZSBBQ0tfUgkweDAwMDAwMDAwCi0jZGVmaW5lIEFDS19XCTB4MDAwMjAwMDAKLSNkZWZpbmUgQUNLX0gJMHgwMDAwMDAwMAotI2RlZmluZSBBQ0tfTAkweDAwMDEwMDAwCi0jZGVmaW5lIERNX0lOQwkweDAwMDA0MDAwCi0jZGVmaW5lIERNX0RFQwkweDAwMDA4MDAwCi0jZGVmaW5lIFNNX0lOQwkweDAwMDAxMDAwCi0jZGVmaW5lIFNNX0RFQwkweDAwMDAyMDAwCi0jZGVmaW5lIFJTX0lOCTB4MDAwMDAyMDAKLSNkZWZpbmUgUlNfT1VUCTB4MDAwMDAzMDAKLSNkZWZpbmUgVFNfQkxLCTB4MDAwMDAwNDAKLSNkZWZpbmUgVE1fQlVSCTB4MDAwMDAwMjAKLSNkZWZpbmUgQ0hDUl9ERSAweDAwMDAwMDAxCi0jZGVmaW5lIENIQ1JfVEUgMHgwMDAwMDAwMgotI2RlZmluZSBDSENSX0lFIDB4MDAwMDAwMDQKLQotLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAotI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKLSNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKLQotLyoKLSAqIERlZmluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KLSAqIFRoZSAweDQwMCB2YWx1ZSByZXByZXNlbnRzIGF1dG8tcmVxdWVzdCwgZXh0ZXJuYWwtPmV4dGVybmFsLgotICovCi0jZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfMzIpCi0KLSNkZWZpbmUgTUFYX0RNQUNfQ0hBTk5FTFMJKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQotCi0vKgotICogU3VidHlwZXMgdGhhdCBoYXZlIGZld2VyIGNoYW5uZWxzIHRoYW4gdGhpcyBzaW1wbHkgbmVlZCB0byBjaGFuZ2UKLSAqIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTLiBMaWtld2lzZSwgc3VidHlwZXMgd2l0aCBhIGxhcmdlciBudW1iZXIKLSAqIG9mIGNoYW5uZWxzIHNob3VsZCBleHBhbmQgb24gdGhpcy4KLSAqCi0gKiBGb3IgbW9zdCBzdWJ0eXBlcyB3ZSBjYW4gZWFzaWx5IGZpZ3VyZSB0aGVzZSB2YWx1ZXMgb3V0IHdpdGggc29tZQotICogYmFzaWMgY2FsY3VsYXRpb24sIHVuZm9ydHVuYXRlbHkgb24gb3RoZXIgc3VidHlwZXMgdGhlc2UgYXJlIG1vcmUKLSAqIHNjYXR0ZXJlZCwgc28gd2UganVzdCBsZWF2ZSBpdCB1bnJvbGxlZCBmb3Igc2ltcGxpY2l0eS4KLSAqLwotI2RlZmluZSBTQVIJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDAsIFNIX0RNQUNfQkFTRSArIDB4MTAsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDIwLCBTSF9ETUFDX0JBU0UgKyAweDMwLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1MCwgU0hfRE1BQ19CQVNFICsgMHg2MH0pCi0jZGVmaW5lIERBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwNCwgU0hfRE1BQ19CQVNFICsgMHgxNCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjQsIFNIX0RNQUNfQkFTRSArIDB4MzQsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDU0LCBTSF9ETUFDX0JBU0UgKyAweDY0fSkKLSNkZWZpbmUgRE1BVENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDA4LCBTSF9ETUFDX0JBU0UgKyAweDE4LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyOCwgU0hfRE1BQ19CQVNFICsgMHgzOCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTgsIFNIX0RNQUNfQkFTRSArIDB4Njh9KQotI2RlZmluZSBDSENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDBjLCBTSF9ETUFDX0JBU0UgKyAweDFjLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyYywgU0hfRE1BQ19CQVNFICsgMHgzYywgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NWMsIFNIX0RNQUNfQkFTRSArIDB4NmN9KQotCi0jZGVmaW5lIERNQU9SCShTSF9ETUFDX0JBU0UgKyAweDQwKQotCi0jZW5kaWYgLyogX19ETUFfU0hfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCmluZGV4IDA3OGRjNDQuLjc3M2Q1NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCkBAIC0xMjcsOCArMTI3LDggQEAKIAlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lMU1IwKTsKIAlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDEsIFNINF9QQ0lMU1IxKTsKIAkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCXdvcmQgPSAoQ09ORklHX01FTU9SWV9TSVpFID4gMHgwODAwMDAwMCkgPyAweDEwMDAwMDAwIDogMHgwODAwMDAwMDsKLQlwY2lfd3JpdGVfcmVnKHdvcmQgfCAweGEwMDAwMDAwLCBTSDRfUENJTEFSMCk7CisJd29yZCA9IENPTkZJR19NRU1PUllfU1RBUlQgfCAoQ09ORklHX01FTU9SWV9TSVpFIC0gMHgwMTAwMDAwMCk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTEFSMCk7CiAJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDc3ODBfUENJTUJBUjApOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAxIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCiAJcGNpX3dyaXRlX3JlZygweDAwMDAwMDAwLCBTSDRfUENJTEFSMSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaAppbmRleCAzNjczNmM3Li44MGQ0MDgxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIC8qIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBQblNFRyAobj0xLDIpIGFkZHJlc3MgICAqLwogI2RlZmluZSBQSFlTQUREUihhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweDFmZmZmZmZmKQogCi0jaWZkZWYgQ09ORklHXzI5QklUCisjaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIC8qCiAgKiBNYXAgYW4gYWRkcmVzcyB0byBhIGNlcnRhaW4gcHJpdmlsZWdlZCBzZWdtZW50CiAgKi8KQEAgLTQzLDcgKzQzLDcgQEAKIAkoKF9fdHlwZW9mX18oYSkpKCgodW5zaWduZWQgbG9uZykoYSkgJiAweDFmZmZmZmZmKSB8IFAzU0VHKSkKICNkZWZpbmUgUDRTRUdBRERSKGEpCVwKIAkoKF9fdHlwZW9mX18oYSkpKCgodW5zaWduZWQgbG9uZykoYSkgJiAweDFmZmZmZmZmKSB8IFA0U0VHKSkKLSNlbmRpZiAvKiAyOUJJVCAqLworI2VuZGlmIC8qIDI5QklUIHx8IFBNQl9GSVhFRCAqLwogI2VuZGlmIC8qIFAxU0VHICovCiAKIC8qIENoZWNrIGlmIGFuIGFkZHJlc3MgY2FuIGJlIHJlYWNoZWQgaW4gMjkgYml0cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaAppbmRleCA3NGY3OTQzLi5hMGIzNDgwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaApAQCAtMTEsNyArMTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiArPSBpOworCXYtPmNvdW50ZXIgKz0gaTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTIwLDcgKzIwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgLT0gaTsKKwl2LT5jb3VudGVyIC09IGk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yOSw5ICsyOSw5IEBACiAJdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0ZW1wID0gKihsb25nICopdjsKKwl0ZW1wID0gdi0+Y291bnRlcjsKIAl0ZW1wICs9IGk7Ci0JKihsb25nICopdiA9IHRlbXA7CisJdi0+Y291bnRlciA9IHRlbXA7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHRlbXA7CkBAIC00Miw5ICs0Miw5IEBACiAJdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0ZW1wID0gKihsb25nICopdjsKKwl0ZW1wID0gdi0+Y291bnRlcjsKIAl0ZW1wIC09IGk7Ci0JKihsb25nICopdiA9IHRlbXA7CisJdi0+Y291bnRlciA9IHRlbXA7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHRlbXA7CkBAIC01NSw3ICs1NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2ICY9IH5tYXNrOworCXYtPmNvdW50ZXIgJj0gfm1hc2s7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC02NCw3ICs2NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2IHw9IG1hc2s7CisJdi0+Y291bnRlciB8PSBtYXNrOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCmluZGV4IDFkMmZjMGIuLmQ4MzI4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fQVNNX1NIX0JJVE9QU19MTFNDX0gKICNkZWZpbmUgX19BU01fU0hfQklUT1BTX0xMU0NfSAogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC0xMywxNiArMTMsMTYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCiAJCSJtb3ZsaS5sCUAlMSwgJTAJISBzZXRfYml0CQlcblx0IgotCQkib3IJCSUzLCAlMAkJCQlcblx0IgorCQkib3IJCSUyLCAlMAkJCQlcblx0IgogCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogIj0meiIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC0zNCwxNiArMzQsMTYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCiAJCSJtb3ZsaS5sCUAlMSwgJTAJISBjbGVhcl9iaXQJCVxuXHQiCi0JCSJhbmQJCSUzLCAlMAkJCQlcblx0IgorCQkiYW5kCQklMiwgJTAJCQkJXG5cdCIKIAkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpCi0JCTogIjEiIChhKSwgInIiICh+bWFzaykKKwkJOiAiPSZ6IiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAofm1hc2spCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTU1LDg2ICs1NSw4NiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKIAkJIm1vdmxpLmwJQCUxLCAlMAkhIGNoYW5nZV9iaXQJCVxuXHQiCisJCSJ4b3IJCSUyLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKKwkJIm9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSUzLCAlMQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB0ZXN0X2FuZF9jbGVhcl9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTMsICUxCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgdGVzdF9hbmRfY2hhbmdlX2JpdAlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKIAkJInhvcgkJJTMsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQotCQk6ICJ0IiwgIm1lbW9yeSIKLQkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0JaW50CW1hc2ssIHJldHZhbDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYSArPSBuciA+PiA1OwotCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJIm9yCQklNCwgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgotCQkiYmYJCTFiCQkJCVxuXHQiCi0JCSJhbmQJCSU0LCAlMgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCi0JCTogInQiLCAibWVtb3J5IgotCSk7Ci0KLQlyZXR1cm4gcmV0dmFsICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQotewotCWludAltYXNrLCByZXR2YWw7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWEgKz0gbnIgPj4gNTsKLQltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJImFuZAkJJTUsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKLQkJImJmCQkxYgkJCQlcblx0IgotCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJImFuZAkJJTMsICUxCQkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAoYSksICJyIiAobWFzayksICJyIiAofm1hc2spCi0JCTogInQiLCAibWVtb3J5IgotCSk7Ci0KLQlyZXR1cm4gcmV0dmFsICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLQlpbnQJbWFzaywgcmV0dmFsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlhICs9IG5yID4+IDU7Ci0JbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9jaGFuZ2VfYml0CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkieG9yCQklNCwgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgotCQkiYmYJCTFiCQkJCVxuXHQiCi0JCSJhbmQJCSU0LCAlMgkJCQlcblx0IgotCQkic3luY28JCQkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChhKSwgInIiIChtYXNrKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKaW5kZXggZjljODg1OC4uMmY2Yzk2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaApAQCAtMTUsNiArMTUsNyBAQAogCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICpjbGspOwogCXZvaWQgKCpyZWNhbGMpKHN0cnVjdCBjbGsgKmNsayk7CiAJaW50ICgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCBpbnQgYWxnb19pZCk7CisJaW50ICgqc2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpOwogCWxvbmcgKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaAppbmRleCBhZWUzYmYyLi4wZmFjM2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKQEAgLTgsMTQgKzgsMTQgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191MzIJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJXG5cdCIKLQkJIm1vdgkJJTQsICUwCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB4Y2hnX3UzMglcblx0IgorCQkibW92CQklMCwgJTEJCQlcblx0IgorCQkibW92CQklMywgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJXG5cdCIKIAkJImJmCQkxYgkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJXG5cdCIKLQkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKG0pLCAiciIgKHZhbCkKKwkJOiAiPSZ6Iih0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAobSksICJyIiAodmFsKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCkBAIC0yOSwxNCArMjksMTQgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191OAlcblx0IgotCQkibW92CQklMCwgJTIJCQlcblx0IgotCQkibW92CQklNCwgJTAJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHhjaGdfdTgJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJXG5cdCIKKwkJIm1vdgkJJTMsICUwCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCVxuXHQiCiAJCSJiZgkJMWIJCQlcblx0IgogCQkic3luY28JCQkJCVxuXHQiCi0JCTogIj0meiIodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChtKSwgInIiICh2YWwgJiAweGZmKQorCQk6ICI9JnoiKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChtKSwgInIiICh2YWwgJiAweGZmKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCkBAIC01MSwxNyArNTEsMTcgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIF9fY21weGNoZ191MzIJCVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkiY21wL2VxCQklMiwgJTQJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIF9fY21weGNoZ191MzIJCVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgorCQkiY21wL2VxCQklMSwgJTMJCQkJXG5cdCIKIAkJImJmCQkyZgkJCQlcblx0IgotCQkibW92CQklNSwgJTAJCQkJXG5cdCIKKwkJIm1vdgkJJTMsICUwCQkJCVxuXHQiCiAJCSIyOgkJCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKG0pLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAobSksICJyIiAob2xkKSwgInIiIChuZXcpCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChtKSwgInIiIChvbGQpLCAiciIgKG5ldykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKaW5kZXggODYzMDhhYS4uNjk0YWJlNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCkBAIC0yMSw1ICsyMSw2IEBACiAjZGVmaW5lIENQVV9IQVNfTExTQwkJMHgwMDQwCS8qIG1vdmxpLmwvbW92Y28ubCAqLwogI2RlZmluZSBDUFVfSEFTX0wyX0NBQ0hFCTB4MDA4MAkvKiBTZWNvbmRhcnkgY2FjaGUgLyBVUkFNICovCiAjZGVmaW5lIENQVV9IQVNfT1AzMgkJMHgwMTAwCS8qIDMyLWJpdCBpbnN0cnVjdGlvbiBzdXBwb3J0ICovCisjZGVmaW5lIENQVV9IQVNfUFRFQUVYCQkweDAyMDAJLyogUFRFIEFTSUQgRXh0ZW5zaW9uIHN1cHBvcnQgKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzhmOGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIGFyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFRha2FzaGkgWU9TSElJCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0RNQV9TSF9ICisjZGVmaW5lIF9fRE1BX1NIX0gKKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxjcHUvZG1hLmg+CisKKy8qIERNQU9SIGNvbnRvcmw6IFRoZSBETUFPUiBhY2Nlc3Mgc2l6ZSBpcyBkaWZmZXJlbnQgYnkgQ1BVLiovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQl8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBcCisgICAgKG4gPyBjdHJsX2ludyhTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKKwk6IGN0cmxfaW53KFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCisjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBcCisgICAgKG4gPyBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCisgICAgOiBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyNlbHNlIC8qIE90aGVyIENQVSAqLworI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBjdHJsX2ludyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpCisjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZG10ZV9pcnFfbWFwW10gX19tYXliZV91bnVzZWQgPSB7CisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNCkKKyAgICBETVRFMF9JUlEsCisgICAgRE1URTBfSVJRICsgMSwKKyAgICBETVRFMF9JUlEgKyAyLAorICAgIERNVEUwX0lSUSArIDMsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA2KQorICAgIERNVEU0X0lSUSwKKyAgICBETVRFNF9JUlEgKyAxLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gOCkKKyAgICBETVRFNl9JUlEsCisgICAgRE1URTZfSVJRICsgMSwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDEyKQorICAgIERNVEU4X0lSUSwKKyAgICBETVRFOV9JUlEsCisgICAgRE1URTEwX0lSUSwKKyAgICBETVRFMTFfSVJRLAorI2VuZGlmCit9OworCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCisjZGVmaW5lIFJFUV9MCTB4MDAwMDAwMDAKKyNkZWZpbmUgUkVRX0UJMHgwMDA4MDAwMAorI2RlZmluZSBSQUNLX0gJMHgwMDAwMDAwMAorI2RlZmluZSBSQUNLX0wJMHgwMDA0MDAwMAorI2RlZmluZSBBQ0tfUgkweDAwMDAwMDAwCisjZGVmaW5lIEFDS19XCTB4MDAwMjAwMDAKKyNkZWZpbmUgQUNLX0gJMHgwMDAwMDAwMAorI2RlZmluZSBBQ0tfTAkweDAwMDEwMDAwCisjZGVmaW5lIERNX0lOQwkweDAwMDA0MDAwCisjZGVmaW5lIERNX0RFQwkweDAwMDA4MDAwCisjZGVmaW5lIFNNX0lOQwkweDAwMDAxMDAwCisjZGVmaW5lIFNNX0RFQwkweDAwMDAyMDAwCisjZGVmaW5lIFJTX0lOCTB4MDAwMDAyMDAKKyNkZWZpbmUgUlNfT1VUCTB4MDAwMDAzMDAKKyNkZWZpbmUgVFNfQkxLCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1fQlVSCTB4MDAwMDAwMjAKKyNkZWZpbmUgQ0hDUl9ERSAweDAwMDAwMDAxCisjZGVmaW5lIENIQ1JfVEUgMHgwMDAwMDAwMgorI2RlZmluZSBDSENSX0lFIDB4MDAwMDAwMDQKKworLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAorI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKKyNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKKworLyoKKyAqIERlZmluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KKyAqIFRoZSAweDQwMCB2YWx1ZSByZXByZXNlbnRzIGF1dG8tcmVxdWVzdCwgZXh0ZXJuYWwtPmV4dGVybmFsLgorICovCisjZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfMzIpCisKKy8qIERNQSBiYXNlIGFkZHJlc3MgKi8KK3N0YXRpYyB1MzIgZG1hX2Jhc2VfYWRkcltdIF9fbWF5YmVfdW51c2VkID0geworI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDQpCisJU0hfRE1BQ19CQVNFMCArIDB4MDAsCS8qIGNoYW5uZWwgMCAqLworCVNIX0RNQUNfQkFTRTAgKyAweDEwLAorCVNIX0RNQUNfQkFTRTAgKyAweDIwLAorCVNIX0RNQUNfQkFTRTAgKyAweDMwLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNikKKwlTSF9ETUFDX0JBU0UwICsgMHg1MCwKKwlTSF9ETUFDX0JBU0UwICsgMHg2MCwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDgpCisJU0hfRE1BQ19CQVNFMSArIDB4MDAsCisJU0hfRE1BQ19CQVNFMSArIDB4MTAsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSAxMikKKwlTSF9ETUFDX0JBU0UxICsgMHgyMCwKKwlTSF9ETUFDX0JBU0UxICsgMHgzMCwKKwlTSF9ETUFDX0JBU0UxICsgMHg1MCwKKwlTSF9ETUFDX0JBU0UxICsgMHg2MCwgLyogY2hhbm5lbCAxMSAqLworI2VuZGlmCit9OworCisvKiBETUEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FSICAgICAweDAwCisjZGVmaW5lIERBUiAgICAgMHgwNAorI2RlZmluZSBUQ1IgICAgIDB4MDgKKyNkZWZpbmUgQ0hDUiAgICAweDBDCisjZGVmaW5lIERNQU9SCTB4NDAKKworI2VuZGlmIC8qIF9fRE1BX1NIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IGJlY2E3MTIuLjZiZDE3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMjUsOSArMjUsOSBAQAogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCsweDEwMDAwMDAwKQogCiAjaWZkZWYgQ09ORklHX05SX0RNQV9DSEFOTkVMUwotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAgIChDT05GSUdfTlJfRE1BX0NIQU5ORUxTKQogI2Vsc2UKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCShDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUwppbmRleCAyZGFiMGI4Li4zYTQ3NTJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMKQEAgLTMxLDMgKzMxLDggQEAKICNlbmRpZgkKIAkuZW5kbQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjIGRlZmluZSBQUkVGKHgpCXByZWYJQHgKKyNlbHNlCisjIGRlZmluZSBQUkVGKHgpCW5vcAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IDkwNjczNjUuLjYxZjkzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0xOSw4ICsxOSw0MiBAQAogI2luY2x1ZGUgPGNwdS9ncGlvLmg+CiAjZW5kaWYKIAorI2RlZmluZSBBUkNIX05SX0dQSU9TIDUxMgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2lmZGVmIENPTkZJR19HUElPTElCCisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fY2Fuc2xlZXAodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCVdBUk5fT04oMSk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2VuZGlmIC8qIENPTkZJR19HUElPTElCICovCisKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGlubXV4X2VudW1fdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBwaW5tdXhfZmxhZ190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZmxhZ190OwogCiAjZGVmaW5lIFBJTk1VWF9UWVBFX05PTkUgICAgICAgICAgICAwCiAjZGVmaW5lIFBJTk1VWF9UWVBFX0ZVTkNUSU9OICAgICAgICAxCkBAIC0zNCw2ICs2OCwxMSBAQAogI2RlZmluZSBQSU5NVVhfRkxBR19XQU5UX1BVTExVUCAgICAgKDEgPDwgMykKICNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMRE9XTiAgICgxIDw8IDQpCiAKKyNkZWZpbmUgUElOTVVYX0ZMQUdfREJJVF9TSElGVCAgICAgIDUKKyNkZWZpbmUgUElOTVVYX0ZMQUdfREJJVCAgICAgICAgICAgICgweDFmIDw8IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQpCisjZGVmaW5lIFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQgICAgICAxMAorI2RlZmluZSBQSU5NVVhfRkxBR19EUkVHICAgICAgICAgICAgKDB4M2YgPDwgUElOTVVYX0ZMQUdfRFJFR19TSElGVCkKKwogc3RydWN0IHBpbm11eF9ncGlvIHsKIAlwaW5tdXhfZW51bV90IGVudW1faWQ7CiAJcGlubXV4X2ZsYWdfdCBmbGFnczsKQEAgLTU0LDcgKzkzLDcgQEAKIAkuZW51bV9pZHMgPSAocGlubXV4X2VudW1fdCBbKHJfd2lkdGggLyBmX3dpZHRoKSAqICgxIDw8IGZfd2lkdGgpXSkgXAogCiBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHsKLQl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoOworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIHJlZ19zaGFkb3c7CiAJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7CiB9OwogCkBAIC04OSwzNCArMTI4LDkgQEAKIAl1bnNpZ25lZCBpbnQgZ3Bpb19kYXRhX3NpemU7CiAKIAl1bnNpZ25lZCBsb25nICpncGlvX2luX3VzZTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiB9OwogCiBpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKTsKIAotaW50IF9fZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8pOwotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiBfX2dwaW9fcmVxdWVzdChncGlvKTsKLX0KLXZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOwotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwotaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotCi0vKiBJUlEgbW9kZXMgYXJlIHVuc3Bwb3J0ZWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JV0FSTl9PTigxKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCVdBUk5fT04oMSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+Ci0KICNlbmRpZiAvKiBfX0FTTV9TSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmgKaW5kZXggOGMxMzUzYi4uNTJiNGI2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmgKQEAgLTI0Miw3ICsyNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAKIC8qIGFyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9zZXR1cC5jICovCi1pbnQgaGQ2NDQ2MV9pcnFfZGVtdXgoaW50IGlycSk7CiB2b2lkIGhkNjQ0NjFfcmVnaXN0ZXJfaXJxX2RlbXV4KGludCBpcnEsCiAJCQkJaW50ICgqZGVtdXgpIChpbnQgaXJxLCB2b2lkICpkZXYpLCB2b2lkICpkZXYpOwogdm9pZCBoZDY0NDYxX3VucmVnaXN0ZXJfaXJxX2RlbXV4KGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDYxZjZkYWUuLjA0NTRmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTIzOCw3ICsyMzgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgogX19pb3JlbWFwX21vZGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIAl1bnNpZ25lZCBsb25nIGxhc3RfYWRkciA9IG9mZnNldCArIHNpemUgLSAxOwogI2VuZGlmCiAJdm9pZCBfX2lvbWVtICpyZXQ7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCisjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJLyoKIAkgKiBGb3IgUDEgYW5kIFAyIHNwYWNlIHRoaXMgaXMgdHJpdmlhbCwgYXMgZXZlcnl0aGluZyBpcyBhbHJlYWR5CiAJICogbWFwcGVkLiBVbmNhY2hlZCBhY2Nlc3MgZm9yIFAxIGFkZHJlc3NlcyBhcmUgZG9uZSB0aHJvdWdoIFAyLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCA2MDc4ZDhlLi42MTM2NDRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMTYsNyArMTYsNyBAQAogCT8gKE1BWF9TVEFDS19TSVpFKSBcCiAJOiAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBUSFJFQURfU0laRSAtIChBRERSKSkpCiAKLSNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykJCSgocmVncyktPnJlZ3NbMF0pCisjZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKF9yZWdzKQkJKChfcmVncyktPnJlZ3NbMF0pCiAjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemUJMAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNWQ5MTU3Yi4uMmE5YzU1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTksMTMgKzE5LDE4IEBACiAgKiAgICAoYSkgVExCIGNhY2hlIHZlcnNpb24gKG9yIHJvdW5kLCBjeWNsZSB3aGF0ZXZlciBleHByZXNzaW9uIHlvdSBsaWtlKQogICogICAgKGIpIEFTSUQgKEFkZHJlc3MgU3BhY2UgSURlbnRpZmllcikKICAqLworI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUFFWAorI2RlZmluZSBNTVVfQ09OVEVYVF9BU0lEX01BU0sJCTB4MDAwMGZmZmYKKyNlbHNlCiAjZGVmaW5lIE1NVV9DT05URVhUX0FTSURfTUFTSwkJMHgwMDAwMDBmZgotI2RlZmluZSBNTVVfQ09OVEVYVF9WRVJTSU9OX01BU0sJMHhmZmZmZmYwMAotI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCTB4MDAwMDAxMDAKLSNkZWZpbmUgTk9fQ09OVEVYVAkJCTBVTAorI2VuZGlmCiAKLS8qIEFTSUQgaXMgOC1iaXQgdmFsdWUsIHNvIGl0IGNhbid0IGJlIDB4MTAwICovCi0jZGVmaW5lIE1NVV9OT19BU0lECQkJMHgxMDAKKyNkZWZpbmUgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLCSh+MFVMICYgfk1NVV9DT05URVhUX0FTSURfTUFTSykKKyNkZWZpbmUgTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTgkoTU1VX0NPTlRFWFRfQVNJRF9NQVNLICsgMSkKKworLyogSW1wb3NzaWJsZSBBU0lEIHZhbHVlLCB0byBkaWZmZXJlbnRpYXRlIGZyb20gTk9fQ09OVEVYVC4gKi8KKyNkZWZpbmUgTU1VX05PX0FTSUQJCQlNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCisjZGVmaW5lIE5PX0NPTlRFWFQJCQkwVUwKIAogI2RlZmluZSBhc2lkX2NhY2hlKGNwdSkJCShjcHVfZGF0YVtjcHVdLmFzaWRfY2FjaGUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAppbmRleCBmNGY5YWViLi44ZWY4MDBjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCkBAIC0xMCw2ICsxMCwxNyBAQAogCS8qIERvIG5vdGhpbmcgKi8KIH0KIAorI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUFFWAorc3RhdGljIGlubGluZSB2b2lkIHNldF9hc2lkKHVuc2lnbmVkIGxvbmcgYXNpZCkKK3sKKwlfX3Jhd193cml0ZWwoYXNpZCwgTU1VX1BURUFFWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfYXNpZCh2b2lkKQoreworCXJldHVybiBfX3Jhd19yZWFkbChNTVVfUFRFQUVYKSAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKK30KKyNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FzaWQodW5zaWduZWQgbG9uZyBhc2lkKQogewogCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKQEAgLTMzLDYgKzQ0LDcgQEAKIAlhc2lkICY9IE1NVV9DT05URVhUX0FTSURfTUFTSzsKIAlyZXR1cm4gYXNpZDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0hBU19QVEVBRVggKi8KIAogLyogTU1VX1RUQiBpcyB1c2VkIGZvciBvcHRpbWl6aW5nIHRoZSBmYXVsdCBoYW5kbGluZy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfVFRCKHBnZF90ICpwZ2QpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDU4NzFkNzguLjljNmQyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMjksNyArMTI5LDEyIEBACiAgKiBpcyBub3QgdmlzaWJsZSAoaXQgaXMgcGFydCBvZiB0aGUgUE1CIG1hcHBpbmcpIGFuZCBzbyBuZWVkcyB0byBiZQogICogYWRkZWQgb3Igc3VidHJhY3RlZCBhcyByZXF1aXJlZC4KICAqLwotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmIGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKKy8qIHBoeXMgPSB2aXJ0IC0gUEFHRV9PRkZTRVQgLSAoX19NRU1PUllfU1RBUlQgJiAweGUwMDAwMDAwKSAqLworI2RlZmluZSBQTUJfT0ZGU0VUCShQQUdFX09GRlNFVCAtIFBYU0VHKF9fTUVNT1JZX1NUQVJUKSkKKyNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUE1CX09GRlNFVCkKKyNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUE1CX09GRlNFVCkpCisjZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKICNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpLVBBR0VfT0ZGU0VUK19fTUVNT1JZX1NUQVJUKQogI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQtX19NRU1PUllfU1RBUlQpKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDFlZjRiMjQuLjFmZDU4YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMzEsNyArMzEsNyBAQAogCUNQVV9TSDc3NjAsIENQVV9TSDRfMjAyLCBDUFVfU0g0XzUwMSwKIAogCS8qIFNILTRBIHR5cGVzICovCi0JQ1BVX1NINzc2MywgQ1BVX1NINzc3MCwgQ1BVX1NINzc4MCwgQ1BVX1NINzc4MSwgQ1BVX1NINzc4NSwKKwlDUFVfU0g3NzYzLCBDUFVfU0g3NzcwLCBDUFVfU0g3NzgwLCBDUFVfU0g3NzgxLCBDUFVfU0g3Nzg1LCBDUFVfU0g3Nzg2LAogCUNQVV9TSDc3MjMsIENQVV9TSFgzLAogCiAJLyogU0g0QUwtRFNQIHR5cGVzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCBkNzkwNjNjLi5lZmRkNzhhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTEwOCwxMiArMTA4LDEyIEBACiAvKgogICogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLgogICovCi0jZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKIAlzZXRfZnMoVVNFUl9EUyk7CQkJIFwKLQlyZWdzLT5wciA9IDA7CQkJCSBcCi0JcmVncy0+c3IgPSBTUl9GRDsJLyogVXNlciBtb2RlLiAqLyBcCi0JcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKLQlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcAorCV9yZWdzLT5wciA9IDA7CQkJCSBcCisJX3JlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAorCV9yZWdzLT5wYyA9IG5ld19wYzsJCQkgXAorCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtMTg5LDEwICsxODksOSBAQAogI2RlZmluZSBLU1RLX0VJUCh0c2spICAodGFza19wdF9yZWdzKHRzayktPnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAodGFza19wdF9yZWdzKHRzayktPnJlZ3NbMTVdKQogCi0jZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5yZWdzWzE1XSkKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKF9yZWdzKQkoKF9yZWdzKS0+cmVnc1sxNV0pCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCiAjZGVmaW5lIFBSRUZFVENIX1NUUklERQkJTDFfQ0FDSEVfQllURVMKICNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKICNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA4MDMxNzdmLi41NzI3ZDMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAgKi8KICNkZWZpbmUgU1JfVVNFUiAoU1JfTU1VIHwgU1JfRkQpCiAKLSNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wYywgbmV3X3NwKQkJCVwKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBuZXdfcGMsIG5ld19zcCkJCQlcCiAJc2V0X2ZzKFVTRVJfRFMpOwkJCQkJXAotCXJlZ3MtPnNyID0gU1JfVVNFUjsJLyogVXNlciBtb2RlLiAqLwkJXAotCXJlZ3MtPnBjID0gbmV3X3BjIC0gNDsJLyogQ29tcGVuc2F0ZSBzeXNjYWxsIGV4aXQgKi8JXAotCXJlZ3MtPnBjIHw9IDE7CQkvKiBTZXQgU0htZWRpYSAhICovCQlcCi0JcmVncy0+cmVnc1sxOF0gPSAwOwkJCQkJXAotCXJlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCisJX3JlZ3MtPnNyID0gU1JfVVNFUjsJLyogVXNlciBtb2RlLiAqLwkJXAorCV9yZWdzLT5wYyA9IG5ld19wYyAtIDQ7CS8qIENvbXBlbnNhdGUgc3lzY2FsbCBleGl0ICovCVwKKwlfcmVncy0+cGMgfD0gMTsJCS8qIFNldCBTSG1lZGlhICEgKi8JCVwKKwlfcmVncy0+cmVnc1sxOF0gPSAwOwkJCQkJXAorCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtMjI2LDcgKzIyNiw3IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAotI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihfcmVncykJKChfcmVncyktPnJlZ3NbMTVdKQogCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fU0hfUFJPQ0VTU09SXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDEyOTEyYWIuLjgxYzY1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTIyLDE0ICsxMjIsMTIgQEAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykpIC0gMSkKICNkZWZpbmUgdGFza19wdF9kc3ByZWdzKHRhc2spIFwKLQkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorCSgoc3RydWN0IHB0X2RzcHJlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCiAjZWxzZQogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCA4ZjhmNGFkLi4wMWE0MDc2YTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KIAorZXh0ZXJuIHZvaWQgX19ub3NhdmVfYmVnaW4sIF9fbm9zYXZlX2VuZDsKIGV4dGVybiBsb25nIF9fbWFjaHZlY19zdGFydCwgX19tYWNodmVjX2VuZDsKIGV4dGVybiBjaGFyIF9fdW5jYWNoZWRfc3RhcnQsIF9fdW5jYWNoZWRfZW5kOwogZXh0ZXJuIGNoYXIgX2Vic3NbXTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDZkNGJmNjUuLjM0NTY1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9fQVNNX1NIX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjk5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU01fU0hfU1VTUEVORF9ICisjZGVmaW5lIF9BU01fU0hfU1VTUEVORF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKSB7IHJldHVybiAwOyB9CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0cnVjdCBzd3N1c3BfYXJjaF9yZWdzIHsKKwlzdHJ1Y3QgcHRfcmVncyB1c2VyX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBiYW5rMV9yZWdzWzhdOworfTsKKyNlbmRpZgorCisvKiBmbGFncyBwYXNzZWQgdG8gYXNzZW1ibHkgc3VzcGVuZCBjb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU0xFRVAJCSgxIDw8IDApIC8qIFJlZ3VsYXIgc2xlZXAgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1NUQU5EQlkJCSgxIDw8IDEpIC8qIFNILU1vYmlsZSBTb2Z0d2FyZSBzdGFuZGJ5IG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9SU1RBTkRCWQkoMSA8PCAyKSAvKiBTSC1Nb2JpbGUgUi1zdGFuZGJ5IG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9VU1RBTkRCWQkoMSA8PCAzKSAvKiBTSC1Nb2JpbGUgVS1zdGFuZGJ5IG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TRgkJKDEgPDwgNCkgLyogRW5hYmxlIHNlbGYtcmVmcmVzaCAqLworCisjZW5kaWYgLyogX0FTTV9TSF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCBhN2NhM2ExLi40YzNiNjZlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaApAQCAtOSw3ICs5LDYgQEAKIAlpbnQgKCppbml0KSh2b2lkKTsKIAlpbnQgKCpzdGFydCkodm9pZCk7CiAJaW50ICgqc3RvcCkodm9pZCk7Ci0JY3ljbGVfdCAoKnJlYWQpKHZvaWQpOwogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiAJdW5zaWduZWQgbG9uZyAoKmdldF9vZmZzZXQpKHZvaWQpOwogI2VuZGlmCkBAIC0zOSw2ICszOCw3IEBACiAKIC8qIGFyY2gvc2gva2VybmVsL3RpbWUuYyAqLwogdm9pZCBoYW5kbGVfdGltZXJfdGljayh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNoX2hwdF9mcmVxdWVuY3k7CisKK2V4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2Vfc2g7CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCA4OGZmMWFlLi45YzE2ZjczIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTYsMjIgKzYsMTA2IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKLSNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgXAotCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpCi0KLSNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCVwKLQlmbHVzaF90bGJfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCkKLQotI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisjaWZkZWYgQ09ORklHX01NVQorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIC8qCi0gKiBGbHVzaCB3aG9sZSBUTEJzIGZvciBNTQorICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKKyAqIHRhYmxlcywgYW5kIGVmZmljaWVudGx5IGhhbmRsZSB0aGUgVExCIGlzc3Vlcy4KICAqLwotI2RlZmluZSB0bGJfZmx1c2godGxiKQkJCQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorc3RydWN0IG1tdV9nYXRoZXIgeworCXN0cnVjdCBtbV9zdHJ1Y3QJKm1tOworCXVuc2lnbmVkIGludAkJZnVsbG1tOworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0LCBlbmQ7Cit9OwogCi0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3RsYl9nYXRoZXIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOworCXRsYi0+ZW5kID0gMDsKKworCWlmICh0bGItPmZ1bGxtbSkgeworCQl0bGItPnN0YXJ0ID0gMDsKKwkJdGxiLT5lbmQgPSBUQVNLX1NJWkU7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbXVfZ2F0aGVyICoKK3RsYl9nYXRoZXJfbW11KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgZnVsbF9tbV9mbHVzaCkKK3sKKwlzdHJ1Y3QgbW11X2dhdGhlciAqdGxiID0gJmdldF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKKworCXRsYi0+bW0gPSBtbTsKKwl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisKKwlpbml0X3RsYl9nYXRoZXIodGxiKTsKKworCXJldHVybiB0bGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHRsYi0+ZnVsbG1tKQorCQlmbHVzaF90bGJfbW0odGxiLT5tbSk7CisKKwkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KKwljaGVja19wZ3RfY2FjaGUoKTsKKworCXB1dF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfcmVtb3ZlX3RsYl9lbnRyeShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCWlmICh0bGItPnN0YXJ0ID4gYWRkcmVzcykKKwkJdGxiLT5zdGFydCA9IGFkZHJlc3M7CisJaWYgKHRsYi0+ZW5kIDwgYWRkcmVzcyArIFBBR0VfU0laRSkKKwkJdGxiLT5lbmQgPSBhZGRyZXNzICsgUEFHRV9TSVpFOworfQorCisvKgorICogSW4gdGhlIGNhc2Ugb2YgdGxiIHZtYSBoYW5kbGluZywgd2UgY2FuIG9wdGltaXNlIHRoZXNlIGF3YXkgaW4gdGhlCisgKiBjYXNlIHdoZXJlIHdlJ3JlIGRvaW5nIGEgZnVsbCBNTSBmbHVzaC4gIFdoZW4gd2UncmUgZG9pbmcgYSBtdW5tYXAsCisgKiB0aGUgdm1hcyBhcmUgYWRqdXN0ZWQgdG8gb25seSBjb3ZlciB0aGUgcmVnaW9uIHRvIGJlIHRvcm4gZG93bi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0bGJfc3RhcnRfdm1hKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICghdGxiLT5mdWxsbW0pCisJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9lbmRfdm1hKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICghdGxiLT5mdWxsbW0gJiYgdGxiLT5lbmQpIHsKKwkJZmx1c2hfdGxiX3JhbmdlKHZtYSwgdGxiLT5zdGFydCwgdGxiLT5lbmQpOworCQlpbml0X3RsYl9nYXRoZXIodGxiKTsKKwl9Cit9CisKKyNkZWZpbmUgdGxiX3JlbW92ZV9wYWdlKHRsYixwYWdlKQlmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUocGFnZSkKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCkJCXB0ZV9mcmVlKCh0bGIpLT5tbSwgcHRlcCkKKyNkZWZpbmUgcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCkJCXBtZF9mcmVlKCh0bGIpLT5tbSwgcG1kcCkKKyNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCkJCXB1ZF9mcmVlKCh0bGIpLT5tbSwgcHVkcCkKKworI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbHNlIC8qIENPTkZJR19NTVUgKi8KKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQkJCWRvIHsgfSB3aGlsZSAoMCkKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCisjZW5kaWYgLyogQ09ORklHX01NVSAqLwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1RMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKaW5kZXggNjgxM2MzMi4uMGVhMTVmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaApAQCAtMSwyMiArMSwxNyBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDNfRE1BX0gKIAotCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhhNDAxMDAyMAotI2Vsc2UKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4YTQwMDAwMjAKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhhNDAxMDAyMAorI2Vsc2UgLyogU0g3NzA1LzA2LzA3LzA5ICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhhNDAwMDAyMAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKICNkZWZpbmUgRE1URTBfSVJRCTQ4Ci0jZGVmaW5lIERNVEUxX0lSUQk0OQotI2RlZmluZSBETVRFMl9JUlEJNTAKLSNkZWZpbmUgRE1URTNfSVJRCTUxCiAjZGVmaW5lIERNVEU0X0lSUQk3NgotI2RlZmluZSBETVRFNV9JUlEJNzcKLSNlbmRpZgogCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCiAjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDAwMjAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkNTE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKKyNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzczMCkKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CisjZGVmaW5lIERNVEU0X0lSUQk3NgorI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkUwMDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEU0X0lSUQk0NAorI2RlZmluZSBETUFFMF9JUlEJMzgKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZGNjA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRjYwOTAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQorI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KKyNkZWZpbmUgRE1URTRfSVJRCTQwCS8qIERNQUMwQiAqLworI2RlZmluZSBETVRFNl9JUlEJNDIKKyNkZWZpbmUgRE1URThfSVJRCTc2CS8qIERNQUMxQSAqLworI2RlZmluZSBETVRFOV9JUlEJNzcKKyNkZWZpbmUgRE1URTEwX0lSUQk3MgkvKiBETUFDMUIgKi8KKyNkZWZpbmUgRE1URTExX0lSUQk3MworI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIERNQUUxX0lSUQk3NAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkRDMDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEU0X0lSUQk0NAorI2RlZmluZSBETVRFNl9JUlEJNDYKKyNkZWZpbmUgRE1URThfSVJRCTkyCisjZGVmaW5lIERNVEU5X0lSUQk5MworI2RlZmluZSBETVRFMTBfSVJRCTk0CisjZGVmaW5lIERNVEUxMV9JUlEJOTUKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CS8qIERNQSBFcnJvciBJUlEgKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQzgxODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNlbHNlIC8qIFNINzc4NSAqLworI2RlZmluZSBETVRFMF9JUlEJMzMKKyNkZWZpbmUgRE1URTRfSVJRCTM3CisjZGVmaW5lIERNVEU2X0lSUQk1MgorI2RlZmluZSBETVRFOF9JUlEJNTQKKyNkZWZpbmUgRE1URTlfSVJRCTU1CisjZGVmaW5lIERNVEUxMF9JUlEJNTYKKyNkZWZpbmUgRE1URTExX0lSUQk1NworI2RlZmluZSBETUFFMF9JUlEJMzkJLyogRE1BIEVycm9yIElSUTAgKi8KKyNkZWZpbmUgRE1BRTFfSVJRCTU4CS8qIERNQSBFcnJvciBJUlExICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkNDMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZW5kaWYKKworI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAorI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCisjZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAorI2RlZmluZSBUU184CTB4MDAwMDAwMDAKKyNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAorI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCisjZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKKyNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAorCisvKgorICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKKyAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgorICoKKyAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCisgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVCwKKwlYTUlUX1NaXzE2QklULAorCVhNSVRfU1pfMzJCSVQsCisJWE1JVF9TWl8xMjhCSVQsCisJWE1JVF9TWl8yNTZCSVQsCit9OworCisvKgorICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKKwlbWE1JVF9TWl84QklUXQkJPSAwLAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNzc4MC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiNDI2YS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNzc4MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAotI2RlZmluZSBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAotCi0jZGVmaW5lIFJFUV9IRQkweDAwMDAwMEMwCi0jZGVmaW5lIFJFUV9ICTB4MDAwMDAwODAKLSNkZWZpbmUgUkVRX0xFCTB4MDAwMDAwNDAKLSNkZWZpbmUgVE1fQlVSU1QgMHgwMDAwMDIwCi0jZGVmaW5lIFRTXzgJMHgwMDAwMDAwMAotI2RlZmluZSBUU18xNgkweDAwMDAwMDA4Ci0jZGVmaW5lIFRTXzMyCTB4MDAwMDAwMTAKLSNkZWZpbmUgVFNfMTZCTEsJMHgwMDAwMDAxOAotI2RlZmluZSBUU18zMkJMSwkweDAwMTAwMDAwCi0KLS8qCi0gKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAotICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCi0gKgotICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KLSAqLwotZW51bSB7Ci0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzEyOEJJVCwKLQlYTUlUX1NaXzI1NkJJVCwKLX07Ci0KLS8qCi0gKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCi0JW1hNSVRfU1pfMjU2QklUXQk9IDUsCi19OwotCi0jZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAppbmRleCAyMzViN2NkLi5iY2IzMDI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCkBAIC0xLDMxICsxLDI5IEBACiAjaWZuZGVmIF9fQVNNX0NQVV9TSDRfRE1BX0gKICNkZWZpbmUgX19BU01fQ1BVX1NINF9ETUFfSAogCi0jZGVmaW5lIERNQU9SX0lOSVQJKCAweDgwMDAgfCBETUFPUl9ETUUgKQotCiAvKiBTSDc3NTEvNzc2MC83NzgwIERNQSBJUlEgc291cmNlcyAqLwotI2RlZmluZSBETVRFMF9JUlEJMzQKLSNkZWZpbmUgRE1URTFfSVJRCTM1Ci0jZGVmaW5lIERNVEUyX0lSUQkzNgotI2RlZmluZSBETVRFM19JUlEJMzcKLSNkZWZpbmUgRE1URTRfSVJRCTQ0Ci0jZGVmaW5lIERNVEU1X0lSUQk0NQotI2RlZmluZSBETVRFNl9JUlEJNDYKLSNkZWZpbmUgRE1URTdfSVJRCTQ3Ci0jZGVmaW5lIERNQUVfSVJRCTM4CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINEEKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4ZmM4MDgwMjAKIAorI2RlZmluZSBETUFPUl9JTklUCShETUFPUl9ETUUpCiAjZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4CiAjZGVmaW5lIENIQ1JfVFNfU0hJRlQJMwogCi0jaW5jbHVkZSA8Y3B1L2RtYS1zaDc3ODAuaD4KLSNlbHNlCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGZmYTAwMDAwCisjaW5jbHVkZSA8Y3B1L2RtYS1zaDRhLmg+CisjZWxzZSAvKiBDT05GSUdfQ1BVX1NINEEgKi8KKy8qCisgKiBTSDc3NTAvU0g3NzUxL1NINzc2MAorICovCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1URTZfSVJRCTQ2CisjZGVmaW5lIERNQUUwX0lSUQkzOAogCisjZGVmaW5lIERNQU9SX0lOSVQJKDB4ODAwMHxETUFPUl9ETUUpCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhmZmEwMDAwMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4ZmZhMDAwNzAKIC8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KLSNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDgwCisjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDAwODAKICNkZWZpbmUgVFNfOAkJMHgwMDAwMDAxMAogI2RlZmluZSBUU18xNgkJMHgwMDAwMDAyMAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAzMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKaW5kZXggYzIzYWY4MS4uNzQ5ZDFjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCkBAIC0yOSw2ICsyOSwxMCBAQAogI2RlZmluZSBGUlFDUjAJCQkweGZmYzgwMDAwCiAjZGVmaW5lIEZSUUNSMQkJCTB4ZmZjODAwMDQKICNkZWZpbmUgRlJRTVIxCQkJMHhmZmM4MDAxNAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQorI2RlZmluZSBGUlFDUjAJCQkweGZmYzQwMDAwCisjZGVmaW5lIEZSUUNSMQkJCTB4ZmZjNDAwMDQKKyNkZWZpbmUgRlJRTVIxCQkJMHhmZmM0MDAxNAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKICNkZWZpbmUgRlJRQ1IJCQkweGZmYzAwMDE0CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAppbmRleCA5ZWE4ZWIyLi4zY2U3ZWY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaApAQCAtMTQsMjggKzE0LDM1IEBACiAjZGVmaW5lIE1NVV9QVEVMCTB4RkYwMDAwMDQJLyogUGFnZSB0YWJsZSBlbnRyeSByZWdpc3RlciBMT1cgKi8KICNkZWZpbmUgTU1VX1RUQgkJMHhGRjAwMDAwOAkvKiBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1NVV9URUEJCTB4RkYwMDAwMEMJLyogVExCIEV4Y2VwdGlvbiBBZGRyZXNzICovCi0jZGVmaW5lIE1NVV9QVEVBCTB4RkYwMDAwMzQJLyogUGFnZSB0YWJsZSBlbnRyeSBhc3Npc3RhbmNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9QVEVBCTB4RkYwMDAwMzQJLyogUFRFIGFzc2lzdGFuY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1VX1BURUFFWAkweEZGMDAwMDdDCS8qIFBURSBBU0lEIGV4dGVuc2lvbiByZWdpc3RlciAqLwogCiAjZGVmaW5lIE1NVUNSCQkweEZGMDAwMDEwCS8qIE1NVSBDb250cm9sIFJlZ2lzdGVyICovCiAKLSNkZWZpbmUgTU1VX0lUTEJfQUREUkVTU19BUlJBWQkweEYyMDAwMDAwCiAjZGVmaW5lIE1NVV9VVExCX0FERFJFU1NfQVJSQVkJMHhGNjAwMDAwMAorI2RlZmluZSBNTVVfVVRMQl9BRERSRVNTX0FSUkFZMgkweEY2ODAwMDAwCiAjZGVmaW5lIE1NVV9QQUdFX0FTU09DX0JJVAkweDgwCiAKICNkZWZpbmUgTU1VQ1JfVEkJCSgxPDwyKQogCi0jaWZkZWYgQ09ORklHX1gyVExCCi0jZGVmaW5lIE1NVUNSX01FCQkoMSA8PCA3KQotI2Vsc2UKLSNkZWZpbmUgTU1VQ1JfTUUJCSgwKQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgJiYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MCkKICNkZWZpbmUgTU1VQ1JfU0UJCSgxIDw8IDQpCiAjZWxzZQogI2RlZmluZSBNTVVDUl9TRQkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUFFWAorI2RlZmluZSBNTVVDUl9BRVgJCSgxIDw8IDYpCisjZWxzZQorI2RlZmluZSBNTVVDUl9BRVgJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDJUTEIKKyNkZWZpbmUgTU1VQ1JfTUUJCSgxIDw8IDcpCisjZWxzZQorI2RlZmluZSBNTVVDUl9NRQkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TSF9TVE9SRV9RVUVVRVMKICNkZWZpbmUgTU1VQ1JfU1FNRAkJKDEgPDwgOSkKICNlbHNlCkBAIC00MywxNyArNTAsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgTU1VX05UTEJfRU5UUklFUwk2NAotI2RlZmluZSBNTVVfQ09OVFJPTF9JTklUCSgweDA1fE1NVUNSX1NRTUR8TU1VQ1JfTUV8TU1VQ1JfU0UpCi0KLSNkZWZpbmUgTU1VX0lUTEJfREFUQV9BUlJBWQkweEYzMDAwMDAwCi0jZGVmaW5lIE1NVV9VVExCX0RBVEFfQVJSQVkJMHhGNzAwMDAwMAotCi0jZGVmaW5lIE1NVV9VVExCX0VOVFJJRVMJICAgNjQKLSNkZWZpbmUgTU1VX1VfRU5UUllfU0hJRlQJICAgIDgKLSNkZWZpbmUgTU1VX1VUTEJfVkFMSUQJCTB4MTAwCi0jZGVmaW5lIE1NVV9JVExCX0VOVFJJRVMJICAgIDQKLSNkZWZpbmUgTU1VX0lfRU5UUllfU0hJRlQJICAgIDgKLSNkZWZpbmUgTU1VX0lUTEJfVkFMSUQJCTB4MTAwCisjZGVmaW5lIE1NVV9DT05UUk9MX0lOSVQJKDB4MDV8TU1VQ1JfU1FNRHxNTVVDUl9NRXxNTVVDUl9TRXxNTVVDUl9BRVgpCiAKICNkZWZpbmUgVFJBCTB4ZmYwMDAwMjAKICNkZWZpbmUgRVhQRVZUCTB4ZmYwMDAwMjQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY4OGFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogU0g3Nzg2IFBpbm11eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gc2g3Nzg1LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQ1BVX1NINzc4Nl9IX18KKyNkZWZpbmUgX19DUFVfU0g3Nzg2X0hfXworCitlbnVtIHsKKwkvKiBQQSAqLworCUdQSU9fUEE3LCBHUElPX1BBNiwgR1BJT19QQTUsIEdQSU9fUEE0LAorCUdQSU9fUEEzLCBHUElPX1BBMiwgR1BJT19QQTEsIEdQSU9fUEEwLAorCisJLyogUEIgKi8KKwlHUElPX1BCNywgR1BJT19QQjYsIEdQSU9fUEI1LCBHUElPX1BCNCwKKwlHUElPX1BCMywgR1BJT19QQjIsIEdQSU9fUEIxLCBHUElPX1BCMCwKKworCS8qIFBDICovCisJR1BJT19QQzcsIEdQSU9fUEM2LCBHUElPX1BDNSwgR1BJT19QQzQsCisJR1BJT19QQzMsIEdQSU9fUEMyLCBHUElPX1BDMSwgR1BJT19QQzAsCisKKwkvKiBQRCAqLworCUdQSU9fUEQ3LCBHUElPX1BENiwgR1BJT19QRDUsIEdQSU9fUEQ0LAorCUdQSU9fUEQzLCBHUElPX1BEMiwgR1BJT19QRDEsIEdQSU9fUEQwLAorCisJLyogUEUgKi8KKwlHUElPX1BFNSwgR1BJT19QRTQsIEdQSU9fUEUzLCBHUElPX1BFMiwKKwlHUElPX1BFMSwgR1BJT19QRTAsCisKKwkvKiBQRiAqLworCUdQSU9fUEY3LCBHUElPX1BGNiwgR1BJT19QRjUsIEdQSU9fUEY0LAorCUdQSU9fUEYzLCBHUElPX1BGMiwgR1BJT19QRjEsIEdQSU9fUEYwLAorCisJLyogUEcgKi8KKwlHUElPX1BHNywgR1BJT19QRzYsIEdQSU9fUEc1LCBHUElPX1BHNCwKKwlHUElPX1BHMywgR1BJT19QRzIsIEdQSU9fUEcxLCBHUElPX1BHMCwKKworCS8qIFBIICovCisJR1BJT19QSDcsIEdQSU9fUEg2LCBHUElPX1BINSwgR1BJT19QSDQsCisJR1BJT19QSDMsIEdQSU9fUEgyLCBHUElPX1BIMSwgR1BJT19QSDAsCisKKwkvKiBQSiAqLworCUdQSU9fUEo3LCBHUElPX1BKNiwgR1BJT19QSjUsIEdQSU9fUEo0LAorCUdQSU9fUEozLCBHUElPX1BKMiwgR1BJT19QSjEsIEdQSU9fUEowLAorCisJR1BJT19GTl9DREUsCisJR1BJT19GTl9FVEhfTUFHSUMsCisJR1BJT19GTl9ESVNQLAorCUdQSU9fRk5fRVRIX0xJTkssCisJR1BJT19GTl9EUjUsCisJR1BJT19GTl9FVEhfVFhfRVIsCisJR1BJT19GTl9EUjQsCisJR1BJT19GTl9FVEhfVFhfRU4sCisJR1BJT19GTl9EUjMsCisJR1BJT19GTl9FVEhfVFhEMywKKwlHUElPX0ZOX0RSMiwKKwlHUElPX0ZOX0VUSF9UWEQyLAorCUdQSU9fRk5fRFIxLAorCUdQSU9fRk5fRVRIX1RYRDEsCisJR1BJT19GTl9EUjAsCisJR1BJT19GTl9FVEhfVFhEMCwKKwlHUElPX0ZOX1ZTWU5DLAorCUdQSU9fRk5fSFNQSV9DTEssCisJR1BJT19GTl9PRERGLAorCUdQSU9fRk5fSFNQSV9DUywKKwlHUElPX0ZOX0RHNSwKKwlHUElPX0ZOX0VUSF9NRElPLAorCUdQSU9fRk5fREc0LAorCUdQSU9fRk5fRVRIX1JYX0NMSywKKwlHUElPX0ZOX0RHMywKKwlHUElPX0ZOX0VUSF9NREMsCisJR1BJT19GTl9ERzIsCisJR1BJT19GTl9FVEhfQ09MLAorCUdQSU9fRk5fREcxLAorCUdQSU9fRk5fRVRIX1RYX0NMSywKKwlHUElPX0ZOX0RHMCwKKwlHUElPX0ZOX0VUSF9DUlMsCisJR1BJT19GTl9EQ0xLSU4sCisJR1BJT19GTl9IU1BJX1JYLAorCUdQSU9fRk5fSFNZTkMsCisJR1BJT19GTl9IU1BJX1RYLAorCUdQSU9fRk5fREI1LAorCUdQSU9fRk5fRVRIX1JYRDMsCisJR1BJT19GTl9EQjQsCisJR1BJT19GTl9FVEhfUlhEMiwKKwlHUElPX0ZOX0RCMywKKwlHUElPX0ZOX0VUSF9SWEQxLAorCUdQSU9fRk5fREIyLAorCUdQSU9fRk5fRVRIX1JYRDAsCisJR1BJT19GTl9EQjEsCisJR1BJT19GTl9FVEhfUlhfRFYsCisJR1BJT19GTl9EQjAsCisJR1BJT19GTl9FVEhfUlhfRVIsCisJR1BJT19GTl9EQ0xLT1VULAorCUdQSU9fRk5fU0NJRjFfU0xLLAorCUdQSU9fRk5fU0NJRjFfUlhELAorCUdQSU9fRk5fU0NJRjFfVFhELAorCUdQSU9fRk5fREFDSzEsCisJR1BJT19GTl9CQUNLLAorCUdQSU9fRk5fRkFMRSwKKwlHUElPX0ZOX0RBQ0swLAorCUdQSU9fRk5fRkNMRSwKKwlHUElPX0ZOX0RSRVExLAorCUdQSU9fRk5fQlJFUSwKKwlHUElPX0ZOX1VTQl9PVkMxLAorCUdQSU9fRk5fRFJFUTAsCisJR1BJT19GTl9VU0JfT1ZDMCwKKwlHUElPX0ZOX1VTQl9QRU5DMSwKKwlHUElPX0ZOX1VTQl9QRU5DMCwKKwlHUElPX0ZOX0hBQzFfU0RPVVQsCisJR1BJT19GTl9TU0kxX1NEQVRBLAorCUdQSU9fRk5fU0RJRjFDTUQsCisJR1BJT19GTl9IQUMxX1NESU4sCisJR1BJT19GTl9TU0kxX1NDSywKKwlHUElPX0ZOX1NESUYxQ0QsCisJR1BJT19GTl9IQUMxX1NZTkMsCisJR1BJT19GTl9TU0kxX1dTLAorCUdQSU9fRk5fU0RJRjFXUCwKKwlHUElPX0ZOX0hBQzFfQklUQ0xLLAorCUdQSU9fRk5fU1NJMV9DTEssCisJR1BJT19GTl9TRElGMUNMSywKKwlHUElPX0ZOX0hBQzBfU0RPVVQsCisJR1BJT19GTl9TU0kwX1NEQVRBLAorCUdQSU9fRk5fU0RJRjFEMywKKwlHUElPX0ZOX0hBQzBfU0RJTiwKKwlHUElPX0ZOX1NTSTBfU0NLLAorCUdQSU9fRk5fU0RJRjFEMiwKKwlHUElPX0ZOX0hBQzBfU1lOQywKKwlHUElPX0ZOX1NTSTBfV1MsCisJR1BJT19GTl9TRElGMUQxLAorCUdQSU9fRk5fSEFDMF9CSVRDTEssCisJR1BJT19GTl9TU0kwX0NMSywKKwlHUElPX0ZOX1NESUYxRDAsCisJR1BJT19GTl9TQ0lGM19TQ0ssCisJR1BJT19GTl9TU0kyX1NEQVRBLAorCUdQSU9fRk5fU0NJRjNfUlhELAorCUdQSU9fRk5fVENMSywKKwlHUElPX0ZOX1NTSTJfU0NLLAorCUdQSU9fRk5fU0NJRjNfVFhELAorCUdQSU9fRk5fSEFDX1JFUywKKwlHUElPX0ZOX1NTSTJfV1MsCisJR1BJT19GTl9EQUNLMywKKwlHUElPX0ZOX1NESUYwQ01ELAorCUdQSU9fRk5fREFDSzIsCisJR1BJT19GTl9TRElGMENELAorCUdQSU9fRk5fRFJFUTMsCisJR1BJT19GTl9TRElGMFdQLAorCUdQSU9fRk5fU0NJRjBfQ1RTLAorCUdQSU9fRk5fRFJFUTIsCisJR1BJT19GTl9TRElGMENMSywKKwlHUElPX0ZOX1NDSUYwX1JUUywKKwlHUElPX0ZOX0lSTDcsCisJR1BJT19GTl9TRElGMEQzLAorCUdQSU9fRk5fU0NJRjBfU0NLLAorCUdQSU9fRk5fSVJMNiwKKwlHUElPX0ZOX1NESUYwRDIsCisJR1BJT19GTl9TQ0lGMF9SWEQsCisJR1BJT19GTl9JUkw1LAorCUdQSU9fRk5fU0RJRjBEMSwKKwlHUElPX0ZOX1NDSUYwX1RYRCwKKwlHUElPX0ZOX0lSTDQsCisJR1BJT19GTl9TRElGMEQwLAorCUdQSU9fRk5fU0NJRjVfU0NLLAorCUdQSU9fRk5fRlJCLAorCUdQSU9fRk5fU0NJRjVfUlhELAorCUdQSU9fRk5fSU9JUzE2LAorCUdQSU9fRk5fU0NJRjVfVFhELAorCUdQSU9fRk5fQ0UyQiwKKwlHUElPX0ZOX0RSQUszLAorCUdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX1NDSUY0X1NDSywKKwlHUElPX0ZOX0RSQUsyLAorCUdQSU9fRk5fU1NJM19XUywKKwlHUElPX0ZOX1NDSUY0X1JYRCwKKwlHUElPX0ZOX0RSQUsxLAorCUdQSU9fRk5fU1NJM19TREFUQSwKKwlHUElPX0ZOX0ZTVEFUVVMsCisJR1BJT19GTl9TQ0lGNF9UWEQsCisJR1BJT19GTl9EUkFLMCwKKwlHUElPX0ZOX1NTSTNfU0NLLAorCUdQSU9fRk5fRlNFLAorfTsKKworI2VuZGlmIC8qIF9fQ1BVX1NINzc4Nl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzZTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdXJxdWVsbC5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX19NQUNIX1VSUVVFTExfSAorI2RlZmluZSBfX01BQ0hfVVJRVUVMTF9ICisKKy8qCisgKiAtLS0tLS0gMHgwMDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzAgfCAoU1cxLFNXNDcpICAgIEVFUFJPTSwgU1JBTSwgTk9SIEZMQVNICisgKiAtLS0tLSsgMHgwNDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzEgfCAoU1c0NykgICAgICAgIFNSQU0sIFNSQU0tTEFOLVBDTUNJQSwgTk9SIEZMQVNICisgKiAtLS0tLSsgMHgwODAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzIgfCAgICAgICAgICAgICAgIEREUjMKKyAqICBDUzMgfAorICogLS0tLS0rIDB4MTAwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M0IHwgICAgICAgICAgICAgICBQQ0llCisgKiAtLS0tLSsgMHgxNDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzUgfCAoU1c0NykgICAgICAgIExSQU0vVVJBTSwgU1JBTS1MQU4tUENNQ0lBCisgKiAtLS0tLSsgMHgxODAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzYgfCAgICAgICAgICAgICAgIEFUQSwgTkFORCBGTEFTSAorICogLS0tLS0rIDB4MWMwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M3IHwgICAgICAgICAgICAgICBTSDc3ODYgcmVnaXN0ZXIKKyAqIC0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNkZWZpbmUgTk9SX0ZMQVNIX0FERFIJMHgwMDAwMDAwMAorI2RlZmluZSBOT1JfRkxBU0hfU0laRQkweDA0MDAwMDAwCisKKyNkZWZpbmUgQ1MxX0JBU0UJMHgwNTAwMDAwMAorI2RlZmluZSBDUzVfQkFTRQkweDE1MDAwMDAwCisjZGVmaW5lIEZQR0FfQkFTRQlDUzFfQkFTRQorCisjZGVmaW5lIEJPQVJEUkVHKG9mcykJKEZQR0FfQkFTRSArIG9mcyMjX09GUykKKyNkZWZpbmUgVUJPQVJEUkVHKG9mcykJKDB4YTAwMDAwMDAgKyBGUEdBX0JBU0UgKyBvZnMjI19PRlMpCisKKyNkZWZpbmUgU1JTVFJfT0ZTCTB4MDAwMCAvKiBTeXN0ZW0gcmVzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkRNUl9PRlMJMHgwMDEwIC8qIEJvYXJkIG9wZXJhdGluZyBtb2RlIHJlc2lzdGVyICovCisjZGVmaW5lIElSTDBTUl9PRlMJMHgwMDIwIC8qIElSTDAgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDBNU0tSX09GUwkweDAwMzAgLyogSVJMMCBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDFTUl9PRlMJMHgwMDQwIC8qIElSTDEgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDFNU0tSX09GUwkweDAwNTAgLyogSVJMMSBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDJTUl9PRlMJMHgwMDYwIC8qIElSTDIgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDJNU0tSX09GUwkweDAwNzAgLyogSVJMMiBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDNTUl9PRlMJMHgwMDgwIC8qIElSTDMgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDNNU0tSX09GUwkweDAwOTAgLyogSVJMMyBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIFNPRlRJTlRSX09GUwkweDAxMjAgLyogU29mdHdlYXIgSW50ZXJydXB0IHJlZ2lzdGVyICovCisjZGVmaW5lIFNMRURSX09GUwkweDAxMzAgLyogTEVEIGNvbnRyb2wgcmVzaXN0ZXIgKi8KKyNkZWZpbmUgTUFQU0NJRlNXUl9PRlMJMHgwMTQwIC8qIE1hcC9TQ0lGIFN3aXRjaCByZWdpc3RlciAqLworI2RlZmluZSBGUFZFUlJfT0ZTCTB4MDE1MCAvKiBGUEdBIFZlcnNpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBEQVRFUl9PRlMJMHgwMTYwIC8qIEZQR0EgRGF0ZSByZWdpc3RlciAqLworI2RlZmluZSBGUFlFQVJSX09GUwkweDAxNzAgLyogRlBHQSBZZWFyIHJlZ2lzdGVyICovCisjZGVmaW5lIFRDTEtDUl9PRlMJMHgwMTgwIC8qIFRDTEsgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBESVBTV01SX09GUwkweDEwMDAgLyogRElQU1cgbW9uaXRvciByZWdpc3RlciAqLworI2RlZmluZSBGUE9EUl9PRlMJMHgxMDEwIC8qIE91dHB1dCBwb3J0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVRBQ05SX09GUwkweDEwMjAgLyogQVRBLUNOIENvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQSU5EUl9PRlMJMHgxMDMwIC8qIElucHV0IHBvcnQgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBNRFNXTVJfT0ZTCTB4MTA0MCAvKiBNT0RFIFNXIG1vbml0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRERSM0JVUENSX09GUwkweDEwNTAgLyogRERSMyBCYWNrdXAgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTU0lDT0RFQ0NSX09GUwkweDEwNjAgLyogU1NJLUNPREVDIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRVNMT1RTUl9PRlMJMHgxMDcwIC8qIFBDSWV4cHJlc3MgU2xvdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIRVJQT1JUU1JfT0ZTCTB4MTA4MCAvKiBFdGhlclBoeSBQb3J0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBMQVRDSENSX09GUwkweDMwMDAgLyogTGF0Y2ggY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBMQVRDVUFSX09GUwkweDMwMTAgLyogTGF0Y2ggdXBwZXIgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBMQVRDTEFSX09GUwkweDMwMTIgLyogTGF0Y2ggbG93ZXIgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBMQVRDTFVEUl9PRlMJMHgzMDI0IC8qIExhdGNoIEQzMS0xNiByZWdpc3RlciAqLworI2RlZmluZSBMQVRDTExEUl9PRlMJMHgzMDI2IC8qIExhdGNoIEQxNS0wIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0hBUkxFRF9PRlMJMHgyMDAwIC8qIENoYXJhY3RlciBMRUQgKi8KKworI2VuZGlmICAvKiBfX01BQ0hfVVJRVUVMTF9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKaW5kZXggMmUxYjg2ZS4uODJhM2ExNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKQEAgLTMwLDUgKzMwLDYgQEAKIG9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0RVTVBfQ09ERSkJCSs9IGRpc2Fzc2VtYmxlLm8KK29iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gc3dzdXNwLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDU3Y2YwZTAuLjk5YWNlYjI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEyLDggKzEyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKIGludCBtYWluKHZvaWQpCiB7CkBAIC0yNSw1ICsyNywxMSBAQAogCURFRklORShUSV9QUkVfQ09VTlQsCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcHJlZW1wdF9jb3VudCkpOwogCURFRklORShUSV9SRVNUQVJUX0JMT0NLLG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcmVzdGFydF9ibG9jaykpOwogCisjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisJREVGSU5FKFBCRV9BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBhZGRyZXNzKSk7CisJREVGSU5FKFBCRV9PUklHX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBwYmUsIG9yaWdfYWRkcmVzcykpOworCURFRklORShQQkVfTkVYVCwgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgbmV4dCkpOworCURFRklORShTV1NVU1BfQVJDSF9SRUdTX1NJWkUsIHNpemVvZihzdHJ1Y3Qgc3dzdXNwX2FyY2hfcmVncykpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggZjQ3MWQyNC4uMjYwMDY0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogIyBTcGVjaWFsIGNhc2VzIGZvciBmYW1pbHkgYW5jZXN0cnkuCiAKIG9iai0kKENPTkZJR19DUFVfU0g0QSkJCSs9IHNoNGEvCitvYmotJChDT05GSUdfQVJDSF9TSE1PQklMRSkJKz0gc2htb2JpbGUvCiAKICMgQ29tbW9uIGludGVyZmFjZXMuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKaW5kZXggN2IxNzEzNy4uMWRjODk2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0yMzksNiArMjQxLDM1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjbGtfcmVjYWxjX3JhdGUpOwogCitpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNsayAqb2xkOworCisJaWYgKCFwYXJlbnQgfHwgIWNsaykKKwkJcmV0dXJuIHJldDsKKworCW9sZCA9IGNsay0+cGFyZW50OworCWlmIChsaWtlbHkoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPnNldF9wYXJlbnQpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJCXJldCA9IGNsay0+b3BzLT5zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQljbGstPnBhcmVudCA9IChyZXQgPyBvbGQgOiBwYXJlbnQpOworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ0xLX1JBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19zZXRfcGFyZW50KTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnBhcmVudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19nZXRfcGFyZW50KTsKKwogbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5yb3VuZF9yYXRlKSkgewpAQCAtMzI5LDYgKzM2MCw3MCBAQAogCXJldHVybiBwIC0gYnVmOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGNsa3Nfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0YXRpYyBwbV9tZXNzYWdlX3QgcHJldl9zdGF0ZTsKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJc3dpdGNoIChzdGF0ZS5ldmVudCkgeworCWNhc2UgUE1fRVZFTlRfT046CisJCS8qIFJlc3VtZWluZyBmcm9tIGhpYmVybmF0aW9uICovCisJCWlmIChwcmV2X3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tfbGlzdCwgbm9kZSkKKwkJCQlpZiAobGlrZWx5KGNsa3AtPm9wcykpIHsKKwkJCQkJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrcC0+cmF0ZTsKKworCQkJCQlpZiAobGlrZWx5KGNsa3AtPm9wcy0+c2V0X3BhcmVudCkpCisJCQkJCQljbGtwLT5vcHMtPnNldF9wYXJlbnQoY2xrcCwKKwkJCQkJCQljbGtwLT5wYXJlbnQpOworCQkJCQlpZiAobGlrZWx5KGNsa3AtPm9wcy0+c2V0X3JhdGUpKQorCQkJCQkJY2xrcC0+b3BzLT5zZXRfcmF0ZShjbGtwLAorCQkJCQkJCXJhdGUsIE5PX0NIQU5HRSk7CisJCQkJCWVsc2UgaWYgKGxpa2VseShjbGtwLT5vcHMtPnJlY2FsYykpCisJCQkJCQljbGtwLT5vcHMtPnJlY2FsYyhjbGtwKTsKKwkJCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgorCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX1NVU1BFTkQ6CisJCWJyZWFrOworCX0KKworCXByZXZfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGtzX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY2xrc19zeXNkZXZfc3VzcGVuZChkZXYsIFBNU0dfT04pOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBjbGtzX3N5c2Rldl9jbGFzcyA9IHsKKwkubmFtZSA9ICJjbGtzIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBjbGtzX3N5c2Rldl9kcml2ZXIgPSB7CisJLnN1c3BlbmQgPSBjbGtzX3N5c2Rldl9zdXNwZW5kLAorCS5yZXN1bWUgPSBjbGtzX3N5c2Rldl9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgY2xrc19zeXNkZXZfZGV2ID0geworCS5jbHMgPSAmY2xrc19zeXNkZXZfY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbGtfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmNsa3Nfc3lzZGV2X2NsYXNzKTsKKwlzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9jbGFzcywgJmNsa3Nfc3lzZGV2X2RyaXZlcik7CisJc3lzZGV2X3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9kZXYpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwoY2xrX3N5c2Rldl9pbml0KTsKKyNlbmRpZgorCiBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7CiAJaW50IGksIHJldCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwppbmRleCA1NmU1ODc4Li4wZTMyZDhlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDc2MTkgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBZb3NoaW5vcmkgU2F0bworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCwxNSArMTksMTAgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJV0RULCBFRE1BQywgQ01UMCwgQ01UMSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSwKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLAogCUhJRl9ISUZJLCBISUZfSElGQkksCiAJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsCiAJU0lPRiwKLQotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlTQ0lGMCwgU0NJRjEsIFNDSUYyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0zNiwyNCArMzIsMTggQEAKIAlJTlRDX0lSUShJUlE2LCA4MiksIElOVENfSVJRKElSUTcsIDgzKSwKIAlJTlRDX0lSUShXRFQsIDg0KSwgSU5UQ19JUlEoRURNQUMsIDg1KSwKIAlJTlRDX0lSUShDTVQwLCA4NiksIElOVENfSVJRKENNVDEsIDg3KSwKLQlJTlRDX0lSUShTQ0lGMF9FUkksIDg4KSwgSU5UQ19JUlEoU0NJRjBfUlhJLCA4OSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCA5MCksIElOVENfSVJRKFNDSUYwX1RYSSwgOTEpLAotCUlOVENfSVJRKFNDSUYxX0VSSSwgOTIpLCBJTlRDX0lSUShTQ0lGMV9SWEksIDkzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDk0KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCA5NSksCi0JSU5UQ19JUlEoU0NJRjJfRVJJLCA5NiksIElOVENfSVJRKFNDSUYyX1JYSSwgOTcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgOTgpLCBJTlRDX0lSUShTQ0lGMl9UWEksIDk5KSwKKwlJTlRDX0lSUShTQ0lGMCwgODgpLCBJTlRDX0lSUShTQ0lGMCwgODkpLAorCUlOVENfSVJRKFNDSUYwLCA5MCksIElOVENfSVJRKFNDSUYwLCA5MSksCisJSU5UQ19JUlEoU0NJRjEsIDkyKSwgSU5UQ19JUlEoU0NJRjEsIDkzKSwKKwlJTlRDX0lSUShTQ0lGMSwgOTQpLCBJTlRDX0lSUShTQ0lGMSwgOTUpLAorCUlOVENfSVJRKFNDSUYyLCA5NiksIElOVENfSVJRKFNDSUYyLCA5NyksCisJSU5UQ19JUlEoU0NJRjIsIDk4KSwgSU5UQ19JUlEoU0NJRjIsIDk5KSwKIAlJTlRDX0lSUShISUZfSElGSSwgMTAwKSwgSU5UQ19JUlEoSElGX0hJRkJJLCAxMDEpLAogCUlOVENfSVJRKERNQUMwLCAxMDQpLCBJTlRDX0lSUShETUFDMSwgMTA1KSwKIAlJTlRDX0lSUShETUFDMiwgMTA2KSwgSU5UQ19JUlEoRE1BQzMsIDEwNyksCiAJSU5UQ19JUlEoU0lPRiwgMTA4KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEkpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZjgxNDAwMDYsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMyB9IH0sCiAJeyAweGY4MTQwMDA4LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LApAQCAtNjQsNyArNTQsNyBAQAogCXsgMHhmODA4MDAwOCwgMCwgMTYsIDQsIC8qIElQUkcgKi8geyBTSU9GIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc2MTkiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NjE5IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewpAQCAtNzIsMTcgKzYyLDE3IEBACiAJCS5tYXBiYXNlCT0gMHhmODQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDg4LCA4OSwgOTEsIDkwfSwKKwkJLmlycXMJCT0geyA4OCwgODgsIDg4LCA4OCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGY4NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgOTIsIDkzLCA5NSwgOTR9LAorCQkuaXJxcwkJPSB7IDkyLCA5MiwgOTIsIDkyIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4Zjg0MjAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA5NiwgOTcsIDk5LCA5OH0sCisJCS5pcnFzCQk9IHsgOTYsIDk2LCA5NiwgOTYgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwppbmRleCBlNjExZDc5Li44NDQyOTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSZW5lc2FzIE1YLUcgKFI4QTAzMDIyQkcpIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yMCwyMyArMjAsMTUgQEAKIAlJUlE4LCBJUlE5LCBJUlExMCwgSVJRMTEsIElSUTEyLCBJUlExMywgSVJRMTQsIElSUTE1LAogCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAotCiAJU0lOVDgsIFNJTlQ3LCBTSU5UNiwgU0lOVDUsIFNJTlQ0LCBTSU5UMywgU0lOVDIsIFNJTlQxLAogCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKKwlTQ0lGMCwgU0NJRjEsCiAKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAorCU1UVTJfR1JPVVAxLCBNVFUyX0dST1VQMiwgTVRVMl9HUk9VUDMsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNQorCU1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgU0NJRjAsIFNDSUYxLAotCU1UVTJfR1JPVVAxLCBNVFUyX0dST1VQMiwgTVRVMl9HUk9VUDMsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNQorCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU5LDQ3ICs1MSwzNiBAQAogCUlOVENfSVJRKFNJTlQ0LCA5OCksIElOVENfSVJRKFNJTlQzLCA5OSksCiAJSU5UQ19JUlEoU0lOVDIsIDEwMCksIElOVENfSVJRKFNJTlQxLCAxMDEpLAogCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAyMjApLCBJTlRDX0lSUShTQ0lGMF9UWEksIDIyMSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAyMjIpLCBJTlRDX0lSUShTQ0lGMF9FUkksIDIyMyksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAyMjQpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDIyNSksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAyMjYpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDIyNyksCisJSU5UQ19JUlEoU0NJRjAsIDIyMCksIElOVENfSVJRKFNDSUYwLCAyMjEpLAorCUlOVENfSVJRKFNDSUYwLCAyMjIpLCBJTlRDX0lSUShTQ0lGMCwgMjIzKSwKKwlJTlRDX0lSUShTQ0lGMSwgMjI0KSwgSU5UQ19JUlEoU0NJRjEsIDIyNSksCisJSU5UQ19JUlEoU0NJRjEsIDIyNiksIElOVENfSVJRKFNDSUYxLCAyMjcpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMjI4KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMjI5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAyMzApLCBJTlRDX0lSUShNVFUyX1RHSTBELCAyMzEpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDIzMiksIElOVENfSVJRKE1UVTJfVEdJMEUsIDIzMyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIyOCksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMjkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzApLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMyksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBGLCAyMzQpLCBJTlRDX0lSUShNVFUyX1RHSTFBLCAyMzUpLAotCUlOVENfSVJRKE1UVTJfVEdJMUIsIDIzNiksIElOVENfSVJRKE1UVTJfVENJMVYsIDIzNyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMjM4KSwgSU5UQ19JUlEoTVRVMl9UR0kyQSwgMjM5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM0KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNiksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzcpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzgpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM5KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMkIsIDI0MCksIElOVENfSVJRKE1UVTJfVENJMlYsIDI0MSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMjQyKSwgSU5UQ19JUlEoTVRVMl9UR0kzQSwgMjQzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMywgMjQwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MiksIElOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDMpLAogCiAJSU5UQ19JUlEoTVRVMl9UR0kzQiwgMjQ0KSwKIAlJTlRDX0lSUShNVFUyX1RHSTNDLCAyNDUpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kzRCwgMjQ2KSwgSU5UQ19JUlEoTVRVMl9UQ0kzViwgMjQ3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAyNDgpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAyNDkpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDI1MCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDI1MSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0NiksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDcpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDgpLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjUwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI1MSksCiAKLQlJTlRDX0lSUShNVFUyX1RDSTRWLCAyNTIpLCBJTlRDX0lSUShNVFUyX1RHSTVVLCAyNTMpLAotCUlOVENfSVJRKE1UVTJfVEdJNVYsIDI1NCksIElOVENfSVJRKE1UVTJfVEdJNVcsIDI1NSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1MiksIElOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTQpLCBJTlRDX0lSUShNVFUyX0dST1VQNSwgMjU1KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAxLCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCQkgICBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAyLCBNVFUyX1RHSTBGLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLAotCQkgICBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLCBNVFUyX1RHSTJBKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAzLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCQkgICBNVFUyX1RHSTNBKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVA0LCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLCBNVFUyX1RHSTRBLAotCQkgICBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVA1LCBNVFUyX1RDSTRWLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTM3LDcgKzExOCw3IEBACiAJCS5tYXBiYXNlCT0gMHhmZjgwNDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjIzLCAyMjAsIDIyMSwgMjIyIH0sCisJCS5pcnFzCQk9IHsgMjIwLCAyMjAsIDIyMCwgMjIwIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKaW5kZXggMDYzMWU0Mi4uMDBmNDJmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgU0g3MjAxIHNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCAgUGV0ZXIgR3JpZmZpbiBwZ3JpZmZpbkBtcGMtZGF0YS5jby51aworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCw1NyArMTksMzIgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAorCiAJQURDX0FESSwKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAotCVJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAsCi0JV0RULAotCUlJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLCBJSUMzMF9URUksCi0JSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksIElJQzMxX1RFSSwKLQlJSUMzMl9TVFBJLCBJSUMzMl9OQUtJLCBJSUMzMl9SWEksIElJQzMyX1RYSSwgSUlDMzJfVEVJLAorCisJTVRVMjBfQUJDRCwgTVRVMjBfVkVGLCBNVFUyMV9BQiwgTVRVMjFfVlUsIE1UVTIyX0FCLCBNVFUyMl9WVSwKKwlNVFUyM19BQkNELCBNVFUyNF9BQkNELCBNVFUyNV9VVlcsIE1UVTJfVENJM1YsIE1UVTJfVENJNFYsCisKKwlSVEMsIFdEVCwKKworCUlJQzMwLCBJSUMzMSwgSUlDMzIsCiAKIAlETUFDMF9ETUlOVDAsIERNQUMxX0RNSU5UMSwKIAlETUFDMl9ETUlOVDIsIERNQUMzX0RNSU5UMywKIAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKLQlTQ0lGNF9CUkksIFNDSUY0X0VSSSwgU0NJRjRfUlhJLCBTQ0lGNF9UWEksCi0JU0NJRjVfQlJJLCBTQ0lGNV9FUkksIFNDSUY1X1JYSSwgU0NJRjVfVFhJLAotCVNDSUY2X0JSSSwgU0NJRjZfRVJJLCBTQ0lGNl9SWEksIFNDSUY2X1RYSSwKLQlTQ0lGN19CUkksIFNDSUY3X0VSSSwgU0NJRjdfUlhJLCBTQ0lGN19UWEksCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwgU0NJRjYsIFNDSUY3LAogCiAJRE1BQzBfRE1JTlRBLCBETUFDNF9ETUlOVDQsIERNQUM1X0RNSU5UNSwgRE1BQzZfRE1JTlQ2LAogCURNQUM3X0RNSU5UNywKIAotCVJDQU4wX0VSUywgUkNBTjBfT1ZSLAotCVJDQU4wX1NMRSwKLQlSQ0FOMF9STTAsIFJDQU4wX1JNMSwKLQotCVJDQU4xX0VSUywgUkNBTjFfT1ZSLAotCVJDQU4xX1NMRSwKLQlSQ0FOMV9STTAsIFJDQU4xX1JNMSwKKwlSQ0FOMCwgUkNBTjEsCiAKIAlTU0kwX1NTSUksIFNTSTFfU1NJSSwKIAotCVRNUjBfQ01JQTAsIFRNUjBfQ01JQjAsIFRNUjBfT1ZJMCwKLQlUTVIxX0NNSUExLCBUTVIxX0NNSUIxLCBUTVIxX09WSTEsCisJVE1SMCwgVE1SMSwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQotCUlSUSwgUElOVCwgQURDLAotCU1UVTIwX0FCQ0QsIE1UVTIwX1ZFRiwgTVRVMjFfQUIsIE1UVTIxX1ZVLCBNVFUyMl9BQiwgTVRVMjJfVlUsCi0JTVRVMjNfQUJDRCwgTVRVMjRfQUJDRCwgTVRVMjVfVVZXLAotCVJUQywgSUlDMzAsIElJQzMxLCBJSUMzMiwKLQlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LCBTQ0lGNiwgU0NJRjcsCi0JUkNBTjAsIFJDQU4xLCBUTVIwLCBUTVIxCi0KKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC03Niw2ICs1Miw3IEBACiAJSU5UQ19JUlEoSVJRMiwgNjYpLCBJTlRDX0lSUShJUlEzLCA2NyksCiAJSU5UQ19JUlEoSVJRNCwgNjgpLCBJTlRDX0lSUShJUlE1LCA2OSksCiAJSU5UQ19JUlEoSVJRNiwgNzApLCBJTlRDX0lSUShJUlE3LCA3MSksCisKIAlJTlRDX0lSUShQSU5UMCwgODApLCBJTlRDX0lSUShQSU5UMSwgODEpLAogCUlOVENfSVJRKFBJTlQyLCA4MiksIElOVENfSVJRKFBJTlQzLCA4MyksCiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKQEAgLTgzLDEyMyArNjAsOTIgQEAKIAogCUlOVENfSVJRKEFEQ19BREksIDkyKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDEwOCksIElOVENfSVJRKE1UVTJfVEdJMEIsIDEwOSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTEwKSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTExKSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxMTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDExMyksIElOVENfSVJRKE1UVTJfVEdJMEYsIDExNCksCisJSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTA4KSwgSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTA5KSwKKwlJTlRDX0lSUShNVFUyMF9BQkNELCAxMTApLCBJTlRDX0lSUShNVFUyMF9BQkNELCAxMTEpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTE2KSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTE3KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxMjApLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxMjEpLAorCUlOVENfSVJRKE1UVTIwX1ZFRiwgMTEyKSwgSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTMpLAorCUlOVENfSVJRKE1UVTIwX1ZFRiwgMTE0KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDEyNCksIElOVENfSVJRKE1UVTJfVEdJMkIsIDEyNSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTI4KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTI5KSwKKwlJTlRDX0lSUShNVFUyMV9BQiwgMTE2KSwgSU5UQ19JUlEoTVRVMjFfQUIsIDExNyksCisJSU5UQ19JUlEoTVRVMjFfVlUsIDEyMCksIElOVENfSVJRKE1UVTIxX1ZVLCAxMjEpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTMyKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTMzKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxMzQpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxMzUpLAorCUlOVENfSVJRKE1UVTIyX0FCLCAxMjQpLCBJTlRDX0lSUShNVFUyMl9BQiwgMTI1KSwKKwlJTlRDX0lSUShNVFUyMl9WVSwgMTI4KSwgSU5UQ19JUlEoTVRVMjJfVlUsIDEyOSksCisKKwlJTlRDX0lSUShNVFUyM19BQkNELCAxMzIpLCBJTlRDX0lSUShNVFUyM19BQkNELCAxMzMpLAorCUlOVENfSVJRKE1UVTIzX0FCQ0QsIDEzNCksIElOVENfSVJRKE1UVTIzX0FCQ0QsIDEzNSksCisKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxMzYpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTQwKSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTQxKSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxNDIpLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxNDMpLAorCUlOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MCksIElOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MSksCisJSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQyKSwgSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQzKSwKKwogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE0NCksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTVVLCAxNDgpLCBJTlRDX0lSUShNVFUyX1RHSTVWLCAxNDkpLAotCUlOVENfSVJRKE1UVTJfVEdJNVcsIDE1MCksCisJSU5UQ19JUlEoTVRVMjVfVVZXLCAxNDgpLCBJTlRDX0lSUShNVFUyNV9VVlcsIDE0OSksCisJSU5UQ19JUlEoTVRVMjVfVVZXLCAxNTApLAogCi0JSU5UQ19JUlEoUlRDX0FSTSwgMTUyKSwgSU5UQ19JUlEoUlRDX1BSRCwgMTUzKSwKLQlJTlRDX0lSUShSVENfQ1VQLCAxNTQpLCBJTlRDX0lSUShXRFQsIDE1NiksCisJSU5UQ19JUlEoUlRDLCAxNTIpLCBJTlRDX0lSUShSVEMsIDE1MyksCisJSU5UQ19JUlEoUlRDLCAxNTQpLAogCi0JSU5UQ19JUlEoSUlDMzBfU1RQSSwgMTU3KSwgSU5UQ19JUlEoSUlDMzBfTkFLSSwgMTU4KSwKLQlJTlRDX0lSUShJSUMzMF9SWEksIDE1OSksIElOVENfSVJRKElJQzMwX1RYSSwgMTYwKSwKLQlJTlRDX0lSUShJSUMzMF9URUksIDE2MSksCisJSU5UQ19JUlEoV0RULCAxNTYpLAogCi0JSU5UQ19JUlEoSUlDMzFfU1RQSSwgMTY0KSwgSU5UQ19JUlEoSUlDMzFfTkFLSSwgMTY1KSwKLQlJTlRDX0lSUShJSUMzMV9SWEksIDE2NiksIElOVENfSVJRKElJQzMxX1RYSSwgMTY3KSwKLQlJTlRDX0lSUShJSUMzMV9URUksIDE2OCksCisJSU5UQ19JUlEoSUlDMzAsIDE1NyksIElOVENfSVJRKElJQzMwLCAxNTgpLAorCUlOVENfSVJRKElJQzMwLCAxNTkpLCBJTlRDX0lSUShJSUMzMCwgMTYwKSwKKwlJTlRDX0lSUShJSUMzMCwgMTYxKSwKIAotCUlOVENfSVJRKElJQzMyX1NUUEksIDE3MCksIElOVENfSVJRKElJQzMyX05BS0ksIDE3MSksCi0JSU5UQ19JUlEoSUlDMzJfUlhJLCAxNzIpLCBJTlRDX0lSUShJSUMzMl9UWEksIDE3MyksCi0JSU5UQ19JUlEoSUlDMzJfVEVJLCAxNzQpLAorCUlOVENfSVJRKElJQzMxLCAxNjQpLCBJTlRDX0lSUShJSUMzMSwgMTY1KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY2KSwgSU5UQ19JUlEoSUlDMzEsIDE2NyksCisJSU5UQ19JUlEoSUlDMzEsIDE2OCksCisKKwlJTlRDX0lSUShJSUMzMiwgMTcwKSwgSU5UQ19JUlEoSUlDMzIsIDE3MSksCisJSU5UQ19JUlEoSUlDMzIsIDE3MiksIElOVENfSVJRKElJQzMyLCAxNzMpLAorCUlOVENfSVJRKElJQzMyLCAxNzQpLAogCiAJSU5UQ19JUlEoRE1BQzBfRE1JTlQwLCAxNzYpLCBJTlRDX0lSUShETUFDMV9ETUlOVDEsIDE3NyksCiAJSU5UQ19JUlEoRE1BQzJfRE1JTlQyLCAxNzgpLCBJTlRDX0lSUShETUFDM19ETUlOVDMsIDE3OSksCiAKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDE4MCksIElOVENfSVJRKFNDSUYwX0VSSSwgMTgxKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDE4MiksIElOVENfSVJRKFNDSUYwX1RYSSwgMTgzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDE4NCksIElOVENfSVJRKFNDSUYxX0VSSSwgMTg1KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDE4NiksIElOVENfSVJRKFNDSUYxX1RYSSwgMTg3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDE4OCksIElOVENfSVJRKFNDSUYyX0VSSSwgMTg5KSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDE5MCksIElOVENfSVJRKFNDSUYyX1RYSSwgMTkxKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDE5MiksIElOVENfSVJRKFNDSUYzX0VSSSwgMTkzKSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDE5NCksIElOVENfSVJRKFNDSUYzX1RYSSwgMTk1KSwKLQlJTlRDX0lSUShTQ0lGNF9CUkksIDE5NiksIElOVENfSVJRKFNDSUY0X0VSSSwgMTk3KSwKLQlJTlRDX0lSUShTQ0lGNF9SWEksIDE5OCksIElOVENfSVJRKFNDSUY0X1RYSSwgMTk5KSwKLQlJTlRDX0lSUShTQ0lGNV9CUkksIDIwMCksIElOVENfSVJRKFNDSUY1X0VSSSwgMjAxKSwKLQlJTlRDX0lSUShTQ0lGNV9SWEksIDIwMiksIElOVENfSVJRKFNDSUY1X1RYSSwgMjAzKSwKLQlJTlRDX0lSUShTQ0lGNl9CUkksIDIwNCksIElOVENfSVJRKFNDSUY2X0VSSSwgMjA1KSwKLQlJTlRDX0lSUShTQ0lGNl9SWEksIDIwNiksIElOVENfSVJRKFNDSUY2X1RYSSwgMjA3KSwKLQlJTlRDX0lSUShTQ0lGN19CUkksIDIwOCksIElOVENfSVJRKFNDSUY3X0VSSSwgMjA5KSwKLQlJTlRDX0lSUShTQ0lGN19SWEksIDIxMCksIElOVENfSVJRKFNDSUY3X1RYSSwgMjExKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTgwKSwgSU5UQ19JUlEoU0NJRjAsIDE4MSksCisJSU5UQ19JUlEoU0NJRjAsIDE4MiksIElOVENfSVJRKFNDSUYwLCAxODMpLAorCUlOVENfSVJRKFNDSUYxLCAxODQpLCBJTlRDX0lSUShTQ0lGMSwgMTg1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTg2KSwgSU5UQ19JUlEoU0NJRjEsIDE4NyksCisJSU5UQ19JUlEoU0NJRjIsIDE4OCksIElOVENfSVJRKFNDSUYyLCAxODkpLAorCUlOVENfSVJRKFNDSUYyLCAxOTApLCBJTlRDX0lSUShTQ0lGMiwgMTkxKSwKKwlJTlRDX0lSUShTQ0lGMywgMTkyKSwgSU5UQ19JUlEoU0NJRjMsIDE5MyksCisJSU5UQ19JUlEoU0NJRjMsIDE5NCksIElOVENfSVJRKFNDSUYzLCAxOTUpLAorCUlOVENfSVJRKFNDSUY0LCAxOTYpLCBJTlRDX0lSUShTQ0lGNCwgMTk3KSwKKwlJTlRDX0lSUShTQ0lGNCwgMTk4KSwgSU5UQ19JUlEoU0NJRjQsIDE5OSksCisJSU5UQ19JUlEoU0NJRjUsIDIwMCksIElOVENfSVJRKFNDSUY1LCAyMDEpLAorCUlOVENfSVJRKFNDSUY1LCAyMDIpLCBJTlRDX0lSUShTQ0lGNSwgMjAzKSwKKwlJTlRDX0lSUShTQ0lGNiwgMjA0KSwgSU5UQ19JUlEoU0NJRjYsIDIwNSksCisJSU5UQ19JUlEoU0NJRjYsIDIwNiksIElOVENfSVJRKFNDSUY2LCAyMDcpLAorCUlOVENfSVJRKFNDSUY3LCAyMDgpLCBJTlRDX0lSUShTQ0lGNywgMjA5KSwKKwlJTlRDX0lSUShTQ0lGNywgMjEwKSwgSU5UQ19JUlEoU0NJRjcsIDIxMSksCiAKIAlJTlRDX0lSUShETUFDMF9ETUlOVEEsIDIxMiksIElOVENfSVJRKERNQUM0X0RNSU5UNCwgMjE2KSwKIAlJTlRDX0lSUShETUFDNV9ETUlOVDUsIDIxNyksIElOVENfSVJRKERNQUM2X0RNSU5UNiwgMjE4KSwKIAlJTlRDX0lSUShETUFDN19ETUlOVDcsIDIxOSksCiAKLQlJTlRDX0lSUShSQ0FOMF9FUlMsIDIyOCksIElOVENfSVJRKFJDQU4wX09WUiwgMjI5KSwKLQlJTlRDX0lSUShSQ0FOMF9TTEUsIDIzMCksCi0JSU5UQ19JUlEoUkNBTjBfUk0wLCAyMzEpLCBJTlRDX0lSUShSQ0FOMF9STTEsIDIzMiksCisJSU5UQ19JUlEoUkNBTjAsIDIyOCksIElOVENfSVJRKFJDQU4wLCAyMjkpLAorCUlOVENfSVJRKFJDQU4wLCAyMzApLAorCUlOVENfSVJRKFJDQU4wLCAyMzEpLCBJTlRDX0lSUShSQ0FOMCwgMjMyKSwKIAotCUlOVENfSVJRKFJDQU4xX0VSUywgMjM0KSwgSU5UQ19JUlEoUkNBTjFfT1ZSLCAyMzUpLAotCUlOVENfSVJRKFJDQU4xX1NMRSwgMjM2KSwKLQlJTlRDX0lSUShSQ0FOMV9STTAsIDIzNyksIElOVENfSVJRKFJDQU4xX1JNMSwgMjM4KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM0KSwgSU5UQ19JUlEoUkNBTjEsIDIzNSksCisJSU5UQ19JUlEoUkNBTjEsIDIzNiksCisJSU5UQ19JUlEoUkNBTjEsIDIzNyksIElOVENfSVJRKFJDQU4xLCAyMzgpLAogCiAJSU5UQ19JUlEoU1NJMF9TU0lJLCAyNDQpLCBJTlRDX0lSUShTU0kxX1NTSUksIDI0NSksCiAKLQlJTlRDX0lSUShUTVIwX0NNSUEwLCAyNDYpLCBJTlRDX0lSUShUTVIwX0NNSUIwLCAyNDcpLAotCUlOVENfSVJRKFRNUjBfT1ZJMCwgMjQ4KSwKKwlJTlRDX0lSUShUTVIwLCAyNDYpLCBJTlRDX0lSUShUTVIwLCAyNDcpLAorCUlOVENfSVJRKFRNUjAsIDI0OCksCiAKLQlJTlRDX0lSUShUTVIxX0NNSUExLCAyNTIpLCBJTlRDX0lSUShUTVIxX0NNSUIxLCAyNTMpLAotCUlOVENfSVJRKFRNUjFfT1ZJMSwgMjU0KSwKLQorCUlOVENfSVJRKFRNUjEsIDI1MiksIElOVENfSVJRKFRNUjEsIDI1MyksCisJSU5UQ19JUlEoVE1SMSwgMjU0KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKE1UVTIwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMjBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQotCUlOVENfR1JPVVAoTVRVMjFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMjFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMjJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMjJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVMjNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFUyNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTI1X1VWVywgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAgKSwKLQotCUlOVENfR1JPVVAoSUlDMzAsIElJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLAotCQkgICBJSUMzMF9URUkpLAotCUlOVENfR1JPVVAoSUlDMzEsIElJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLAotCQkgICBJSUMzMV9URUkpLAotCUlOVENfR1JPVVAoSUlDMzIsIElJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLAotCQkgICBJSUMzMl9URUkpLAotCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY0LCBTQ0lGNF9CUkksIFNDSUY0X0VSSSwgU0NJRjRfUlhJLCBTQ0lGNF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjUsIFNDSUY1X0JSSSwgU0NJRjVfRVJJLCBTQ0lGNV9SWEksIFNDSUY1X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNiwgU0NJRjZfQlJJLCBTQ0lGNl9FUkksIFNDSUY2X1JYSSwgU0NJRjZfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY3LCBTQ0lGN19CUkksIFNDSUY3X0VSSSwgU0NJRjdfUlhJLCBTQ0lGN19UWEkpLAotCi0JSU5UQ19HUk9VUChSQ0FOMCwgUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCQkgICBSQ0FOMF9TTEUpLAotCUlOVENfR1JPVVAoUkNBTjEsIFJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwKLQkJICAgUkNBTjFfU0xFKSwKLQotCUlOVENfR1JPVVAoVE1SMCwgVE1SMF9DTUlBMCwgVE1SMF9DTUlCMCwgVE1SMF9PVkkwKSwKLQlJTlRDX0dST1VQKFRNUjEsIFRNUjFfQ01JQTEsIFRNUjFfQ01JQjEsIFRNUjFfT1ZJMSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMjEyLDcgKzE1OCw3IEBACiAKIAl7IDB4ZmZmZTk4MDYsIDAsIDE2LCA0LCAvKiBJUFIwOSAqLyB7IFJUQywgV0RULCBJSUMzMCwgMCB9IH0sCiAJeyAweGZmZmU5ODA4LCAwLCAxNiwgNCwgLyogSVBSMTAgKi8geyBJSUMzMSwgSUlDMzIsIERNQUMwX0RNSU5UMCwgRE1BQzFfRE1JTlQxIH0gfSwKLQl7IDB4ZmZmZTk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IERNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLCBTQ0lGMCAsIFNDSUYxIH0gfSwKKwl7IDB4ZmZmZTk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IERNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLCBTQ0lGMCwgU0NJRjEgfSB9LAogCXsgMHhmZmZlOTgwYywgMCwgMTYsIDQsIC8qIElQUjEyICovIHsgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUgfSB9LAogCXsgMHhmZmZlOTgwZSwgMCwgMTYsIDQsIC8qIElQUjEzICovIHsgU0NJRjYsIFNDSUY3LCBETUFDMF9ETUlOVEEsIERNQUM0X0RNSU5UNCAgfSB9LAogCXsgMHhmZmZlOTgxMCwgMCwgMTYsIDQsIC8qIElQUjE0ICovIHsgRE1BQzVfRE1JTlQ1LCBETUFDNl9ETUlOVDYsIERNQUM3X0RNSU5UNywgMCB9IH0sCkBAIC0yMzQsNDIgKzE4MCw0MiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4MSwgMTgyLCAxODMsIDE4MH0KKwkJLmlycXMJCT0geyAxODAsIDE4MCwgMTgwLCAxODAgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODUsIDE4NiwgMTg3LCAxODR9CisJCS5pcnFzCQk9IHsgMTg0LCAxODQsIDE4NCwgMTg0IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTg5LCAxODYsIDE4NywgMTg4fQorCQkuaXJxcwkJPSB7IDE4OCwgMTg4LCAxODgsIDE4OCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE5MywgMTk0LCAxOTUsIDE5Mn0KKwkJLmlycXMJCT0geyAxOTIsIDE5MiwgMTkyLCAxOTIgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmVhMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxOTYsIDE5OCwgMTk5LCAxOTZ9CisJCS5pcnFzCQk9IHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjAxLCAyMDIsIDIwMywgMjAwfQorCQkuaXJxcwkJPSB7IDIwMCwgMjAwLCAyMDAsIDIwMCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWIwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwNSwgMjA2LCAyMDcsIDIwNH0KKwkJLmlycXMJCT0geyAyMDQsIDIwNCwgMjA0LCAyMDQgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmViODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDksIDIxMCwgMjExLCAyMDh9CisJCS5pcnFzCQk9IHsgMjA4LCAyMDgsIDIwOCwgMjA4IH0KIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMjkwLDE3ICsyMzYsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDE1MywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAxNTQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMTUyLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwppbmRleCBlOThkYzQ0Li44MjBkZmIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTSDcyMDMgYW5kIFNINzI2MyBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDUwICsxOCwyNyBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCi0JRE1BQzBfREVJLCBETUFDMF9IRUksIERNQUMxX0RFSSwgRE1BQzFfSEVJLAotCURNQUMyX0RFSSwgRE1BQzJfSEVJLCBETUFDM19ERUksIERNQUMzX0hFSSwKLQlETUFDNF9ERUksIERNQUM0X0hFSSwgRE1BQzVfREVJLCBETUFDNV9IRUksCi0JRE1BQzZfREVJLCBETUFDNl9IRUksIERNQUM3X0RFSSwgRE1BQzdfSEVJLAorCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKIAlVU0IsIExDREMsIENNVDAsIENNVDEsIEJTQywgV0RULAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAorCisJTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKKwlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwgTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwKKwogCUFEQ19BREksCi0JSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksIElJQzMwX1RFSSwKLQlJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwgSUlDMzFfVEVJLAotCUlJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLCBJSUMzMl9URUksCi0JSUlDMzNfU1RQSSwgSUlDMzNfTkFLSSwgSUlDMzNfUlhJLCBJSUMzM19UWEksIElJQzMzX1RFSSwKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCi0JU1NVMF9TU0VSSSwgU1NVMF9TU1JYSSwgU1NVMF9TU1RYSSwKLQlTU1UxX1NTRVJJLCBTU1UxX1NTUlhJLCBTU1UxX1NTVFhJLAorCisJSUlDMzAsIElJQzMxLCBJSUMzMiwgSUlDMzMsCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisKKwlTU1UwLCBTU1UxLAorCiAJU1NJMF9TU0lJLCBTU0kxX1NTSUksIFNTSTJfU1NJSSwgU1NJM19TU0lJLAogCiAJLyogUk9NLURFQywgU0RISSwgU1JDLCBhbmQgSUVCIGFyZSBTSDcyNjMgc3BlY2lmaWMgKi8KLQlST01ERUNfSVNZLCBST01ERUNfSUVSUiwgUk9NREVDX0lBUkcsIFJPTURFQ19JU0VDLCBST01ERUNfSUJVRiwKLQlST01ERUNfSVJFQURZLAotCi0JRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxUUkVRMUksCi0KLQlTREhJMywgU0RISTAsIFNESEkxLAotCi0JUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCwKLQlSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsIFJDQU4wX1NMRSwKLQlSQ0FOMV9FUlMsIFJDQU4xX09WUiwgUkNBTjFfUk0wLCBSQ0FOMV9STTEsIFJDQU4xX1NMRSwKLQotCVNSQ19PVkYsIFNSQ19PREZJLCBTUkNfSURFSSwgSUVCSSwKKwlST01ERUMsIEZMQ1RMLCBTREhJLCBSVEMsIFJDQU4wLCBSQ0FOMSwKKwlTUkMsIElFQkksCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAotCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCi0JTVRVM19BQkNELCBNVFU0X0FCQ0QsCi0JSUlDMzAsIElJQzMxLCBJSUMzMiwgSUlDMzMsIFNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAotCVNTVTAsIFNTVTEsIFJPTURFQywgU0RISSwgRkxDVEwsIFJUQywgUkNBTjAsIFJDQU4xLCBTUkMKKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC03Myw3OSArNTAsODAgQEAKIAlJTlRDX0lSUShQSU5UMiwgODIpLCBJTlRDX0lSUShQSU5UMywgODMpLAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCiAJSU5UQ19JUlEoUElOVDYsIDg2KSwgSU5UQ19JUlEoUElOVDcsIDg3KSwKLQlJTlRDX0lSUShETUFDMF9ERUksIDEwOCksIElOVENfSVJRKERNQUMwX0hFSSwgMTA5KSwKLQlJTlRDX0lSUShETUFDMV9ERUksIDExMiksIElOVENfSVJRKERNQUMxX0hFSSwgMTEzKSwKLQlJTlRDX0lSUShETUFDMl9ERUksIDExNiksIElOVENfSVJRKERNQUMyX0hFSSwgMTE3KSwKLQlJTlRDX0lSUShETUFDM19ERUksIDEyMCksIElOVENfSVJRKERNQUMzX0hFSSwgMTIxKSwKLQlJTlRDX0lSUShETUFDNF9ERUksIDEyNCksIElOVENfSVJRKERNQUM0X0hFSSwgMTI1KSwKLQlJTlRDX0lSUShETUFDNV9ERUksIDEyOCksIElOVENfSVJRKERNQUM1X0hFSSwgMTI5KSwKLQlJTlRDX0lSUShETUFDNl9ERUksIDEzMiksIElOVENfSVJRKERNQUM2X0hFSSwgMTMzKSwKLQlJTlRDX0lSUShETUFDN19ERUksIDEzNiksIElOVENfSVJRKERNQUM3X0hFSSwgMTM3KSwKKwlJTlRDX0lSUShETUFDMCwgMTA4KSwgSU5UQ19JUlEoRE1BQzAsIDEwOSksCisJSU5UQ19JUlEoRE1BQzEsIDExMiksIElOVENfSVJRKERNQUMxLCAxMTMpLAorCUlOVENfSVJRKERNQUMyLCAxMTYpLCBJTlRDX0lSUShETUFDMiwgMTE3KSwKKwlJTlRDX0lSUShETUFDMywgMTIwKSwgSU5UQ19JUlEoRE1BQzMsIDEyMSksCisJSU5UQ19JUlEoRE1BQzQsIDEyNCksIElOVENfSVJRKERNQUM0LCAxMjUpLAorCUlOVENfSVJRKERNQUM1LCAxMjgpLCBJTlRDX0lSUShETUFDNSwgMTI5KSwKKwlJTlRDX0lSUShETUFDNiwgMTMyKSwgSU5UQ19JUlEoRE1BQzYsIDEzMyksCisJSU5UQ19JUlEoRE1BQzcsIDEzNiksIElOVENfSVJRKERNQUM3LCAxMzcpLAogCUlOVENfSVJRKFVTQiwgMTQwKSwgSU5UQ19JUlEoTENEQywgMTQxKSwKIAlJTlRDX0lSUShDTVQwLCAxNDIpLCBJTlRDX0lSUShDTVQxLCAxNDMpLAogCUlOVENfSVJRKEJTQywgMTQ0KSwgSU5UQ19JUlEoV0RULCAxNDUpLAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDE0NiksIElOVENfSVJRKE1UVTJfVEdJMEIsIDE0NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTQ4KSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTQ5KSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxNTApLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDE1MSksIElOVENfSVJRKE1UVTJfVEdJMEYsIDE1MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTUzKSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTU0KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxNTUpLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxNTYpLAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDE1NyksIElOVENfSVJRKE1UVTJfVEdJMkIsIDE1OCksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTU5KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTYwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxNjEpLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxNjIpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDE2MyksIElOVENfSVJRKE1UVTJfVEdJM0QsIDE2NCksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNDYpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE0NyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNDgpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE0OSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE1MCksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE1MSksIElOVENfSVJRKE1UVTBfVkVGLCAxNTIpLAorCUlOVENfSVJRKE1UVTFfQUIsIDE1MyksIElOVENfSVJRKE1UVTFfQUIsIDE1NCksCisJSU5UQ19JUlEoTVRVMV9WVSwgMTU1KSwgSU5UQ19JUlEoTVRVMV9WVSwgMTU2KSwKKwlJTlRDX0lSUShNVFUyX0FCLCAxNTcpLCBJTlRDX0lSUShNVFUyX0FCLCAxNTgpLAorCUlOVENfSVJRKE1UVTJfVlUsIDE1OSksIElOVENfSVJRKE1UVTJfVlUsIDE2MCksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxNjEpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MiksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxNjMpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE2NCksCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTY1KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxNjYpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxNjcpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE2OCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE2OSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxNjYpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE2NyksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxNjgpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE2OSksCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTcwKSwKIAlJTlRDX0lSUShBRENfQURJLCAxNzEpLAotCUlOVENfSVJRKElJQzMwX1NUUEksIDE3MiksIElOVENfSVJRKElJQzMwX05BS0ksIDE3MyksCi0JSU5UQ19JUlEoSUlDMzBfUlhJLCAxNzQpLCBJTlRDX0lSUShJSUMzMF9UWEksIDE3NSksCi0JSU5UQ19JUlEoSUlDMzBfVEVJLCAxNzYpLAotCUlOVENfSVJRKElJQzMxX1NUUEksIDE3NyksIElOVENfSVJRKElJQzMxX05BS0ksIDE3OCksCi0JSU5UQ19JUlEoSUlDMzFfUlhJLCAxNzkpLCBJTlRDX0lSUShJSUMzMV9UWEksIDE4MCksCi0JSU5UQ19JUlEoSUlDMzFfVEVJLCAxODEpLAotCUlOVENfSVJRKElJQzMyX1NUUEksIDE4MiksIElOVENfSVJRKElJQzMyX05BS0ksIDE4MyksCi0JSU5UQ19JUlEoSUlDMzJfUlhJLCAxODQpLCBJTlRDX0lSUShJSUMzMl9UWEksIDE4NSksCi0JSU5UQ19JUlEoSUlDMzJfVEVJLCAxODYpLAotCUlOVENfSVJRKElJQzMzX1NUUEksIDE4NyksIElOVENfSVJRKElJQzMzX05BS0ksIDE4OCksCi0JSU5UQ19JUlEoSUlDMzNfUlhJLCAxODkpLCBJTlRDX0lSUShJSUMzM19UWEksIDE5MCksCi0JSU5UQ19JUlEoSUlDMzNfVEVJLCAxOTEpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMTkyKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAxOTMpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMTk0KSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAxOTUpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMTk2KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAxOTcpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMTk4KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAxOTkpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMjAwKSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAyMDEpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMjAyKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAyMDMpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMjA0KSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAyMDUpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMjA2KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAyMDcpLAotCUlOVENfSVJRKFNTVTBfU1NFUkksIDIwOCksIElOVENfSVJRKFNTVTBfU1NSWEksIDIwOSksCi0JSU5UQ19JUlEoU1NVMF9TU1RYSSwgMjEwKSwKLQlJTlRDX0lSUShTU1UxX1NTRVJJLCAyMTEpLCBJTlRDX0lSUShTU1UxX1NTUlhJLCAyMTIpLAotCUlOVENfSVJRKFNTVTFfU1NUWEksIDIxMyksCisJSU5UQ19JUlEoSUlDMzAsIDE3MiksIElOVENfSVJRKElJQzMwLCAxNzMpLAorCUlOVENfSVJRKElJQzMwLCAxNzQpLCBJTlRDX0lSUShJSUMzMCwgMTc1KSwKKwlJTlRDX0lSUShJSUMzMCwgMTc2KSwKKwlJTlRDX0lSUShJSUMzMSwgMTc3KSwgSU5UQ19JUlEoSUlDMzEsIDE3OCksCisJSU5UQ19JUlEoSUlDMzEsIDE3OSksIElOVENfSVJRKElJQzMxLCAxODApLAorCUlOVENfSVJRKElJQzMxLCAxODEpLAorCUlOVENfSVJRKElJQzMyLCAxODIpLCBJTlRDX0lSUShJSUMzMiwgMTgzKSwKKwlJTlRDX0lSUShJSUMzMiwgMTg0KSwgSU5UQ19JUlEoSUlDMzIsIDE4NSksCisJSU5UQ19JUlEoSUlDMzIsIDE4NiksCisJSU5UQ19JUlEoSUlDMzMsIDE4NyksIElOVENfSVJRKElJQzMzLCAxODgpLAorCUlOVENfSVJRKElJQzMzLCAxODkpLCBJTlRDX0lSUShJSUMzMywgMTkwKSwKKwlJTlRDX0lSUShJSUMzMywgMTkxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTkyKSwgSU5UQ19JUlEoU0NJRjAsIDE5MyksCisJSU5UQ19JUlEoU0NJRjAsIDE5NCksIElOVENfSVJRKFNDSUYwLCAxOTUpLAorCUlOVENfSVJRKFNDSUYxLCAxOTYpLCBJTlRDX0lSUShTQ0lGMSwgMTk3KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTk4KSwgSU5UQ19JUlEoU0NJRjEsIDE5OSksCisJSU5UQ19JUlEoU0NJRjIsIDIwMCksIElOVENfSVJRKFNDSUYyLCAyMDEpLAorCUlOVENfSVJRKFNDSUYyLCAyMDIpLCBJTlRDX0lSUShTQ0lGMiwgMjAzKSwKKwlJTlRDX0lSUShTQ0lGMywgMjA0KSwgSU5UQ19JUlEoU0NJRjMsIDIwNSksCisJSU5UQ19JUlEoU0NJRjMsIDIwNiksIElOVENfSVJRKFNDSUYzLCAyMDcpLAorCUlOVENfSVJRKFNTVTAsIDIwOCksIElOVENfSVJRKFNTVTAsIDIwOSksCisJSU5UQ19JUlEoU1NVMCwgMjEwKSwKKwlJTlRDX0lSUShTU1UxLCAyMTEpLCBJTlRDX0lSUShTU1UxLCAyMTIpLAorCUlOVENfSVJRKFNTVTEsIDIxMyksCiAJSU5UQ19JUlEoU1NJMF9TU0lJLCAyMTQpLCBJTlRDX0lSUShTU0kxX1NTSUksIDIxNSksCiAJSU5UQ19JUlEoU1NJMl9TU0lJLCAyMTYpLCBJTlRDX0lSUShTU0kzX1NTSUksIDIxNyksCi0JSU5UQ19JUlEoRkxDVExfRkxTVEVJLCAyMjQpLCBJTlRDX0lSUShGTENUTF9GTFRFTkRJLCAyMjUpLAotCUlOVENfSVJRKEZMQ1RMX0ZMVFJFUTBJLCAyMjYpLCBJTlRDX0lSUShGTENUTF9GTFRSRVExSSwgMjI3KSwKLQlJTlRDX0lSUShSVENfQVJNLCAyMzEpLCBJTlRDX0lSUShSVENfUFJELCAyMzIpLAotCUlOVENfSVJRKFJUQ19DVVAsIDIzMyksCi0JSU5UQ19JUlEoUkNBTjBfRVJTLCAyMzQpLCBJTlRDX0lSUShSQ0FOMF9PVlIsIDIzNSksCi0JSU5UQ19JUlEoUkNBTjBfUk0wLCAyMzYpLCBJTlRDX0lSUShSQ0FOMF9STTEsIDIzNyksCi0JSU5UQ19JUlEoUkNBTjBfU0xFLCAyMzgpLAotCUlOVENfSVJRKFJDQU4xX0VSUywgMjM5KSwgSU5UQ19JUlEoUkNBTjFfT1ZSLCAyNDApLAotCUlOVENfSVJRKFJDQU4xX1JNMCwgMjQxKSwgSU5UQ19JUlEoUkNBTjFfUk0xLCAyNDIpLAotCUlOVENfSVJRKFJDQU4xX1NMRSwgMjQzKSwKKwlJTlRDX0lSUShGTENUTCwgMjI0KSwgSU5UQ19JUlEoRkxDVEwsIDIyNSksCisJSU5UQ19JUlEoRkxDVEwsIDIyNiksIElOVENfSVJRKEZMQ1RMLCAyMjcpLAorCUlOVENfSVJRKFJUQywgMjMxKSwgSU5UQ19JUlEoUlRDLCAyMzIpLAorCUlOVENfSVJRKFJUQywgMjMzKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM0KSwgSU5UQ19JUlEoUkNBTjAsIDIzNSksCisJSU5UQ19JUlEoUkNBTjAsIDIzNiksIElOVENfSVJRKFJDQU4wLCAyMzcpLAorCUlOVENfSVJRKFJDQU4wLCAyMzgpLAorCUlOVENfSVJRKFJDQU4xLCAyMzkpLCBJTlRDX0lSUShSQ0FOMSwgMjQwKSwKKwlJTlRDX0lSUShSQ0FOMSwgMjQxKSwgSU5UQ19JUlEoUkNBTjEsIDI0MiksCisJSU5UQ19JUlEoUkNBTjEsIDI0MyksCiAKIAkvKiBTSDcyNjMtc3BlY2lmaWMgdHJhc2ggKi8KICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzCi0JSU5UQ19JUlEoUk9NREVDX0lTWSwgMjE4KSwgSU5UQ19JUlEoUk9NREVDX0lFUlIsIDIxOSksCi0JSU5UQ19JUlEoUk9NREVDX0lBUkcsIDIyMCksIElOVENfSVJRKFJPTURFQ19JU0VDLCAyMjEpLAotCUlOVENfSVJRKFJPTURFQ19JQlVGLCAyMjIpLCBJTlRDX0lSUShST01ERUNfSVJFQURZLCAyMjMpLAorCUlOVENfSVJRKFJPTURFQywgMjE4KSwgSU5UQ19JUlEoUk9NREVDLCAyMTkpLAorCUlOVENfSVJRKFJPTURFQywgMjIwKSwgSU5UQ19JUlEoUk9NREVDLCAyMjEpLAorCUlOVENfSVJRKFJPTURFQywgMjIyKSwgSU5UQ19JUlEoUk9NREVDLCAyMjMpLAogCi0JSU5UQ19JUlEoU0RISTMsIDIyOCksIElOVENfSVJRKFNESEkwLCAyMjkpLCBJTlRDX0lSUShTREhJMSwgMjMwKSwKKwlJTlRDX0lSUShTREhJLCAyMjgpLCBJTlRDX0lSUShTREhJLCAyMjkpLAorCUlOVENfSVJRKFNESEksIDIzMCksCiAKLQlJTlRDX0lSUShTUkNfT1ZGLCAyNDQpLCBJTlRDX0lSUShTUkNfT0RGSSwgMjQ1KSwKLQlJTlRDX0lSUShTUkNfSURFSSwgMjQ2KSwKKwlJTlRDX0lSUShTUkMsIDI0NCksIElOVENfSVJRKFNSQywgMjQ1KSwKKwlJTlRDX0lSUShTUkMsIDI0NiksCiAKIAlJTlRDX0lSUShJRUJJLCAyNDcpLAogI2VuZGlmCkBAIC0xNTQsNTAgKzEzMiw2IEBACiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfREVJLCBETUFDMF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSSwgRE1BQzFfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUksIERNQUMyX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMywgRE1BQzNfREVJLCBETUFDM19IRUkpLAotCUlOVENfR1JPVVAoRE1BQzQsIERNQUM0X0RFSSwgRE1BQzRfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM1LCBETUFDNV9ERUksIERNQUM1X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNiwgRE1BQzZfREVJLCBETUFDNl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzcsIERNQUM3X0RFSSwgRE1BQzdfSEVJKSwKLQlJTlRDX0dST1VQKE1UVTBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0JSU5UQ19HUk9VUChNVFUxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoSUlDMzAsIElJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLAotCQkgICBJSUMzMF9URUkpLAotCUlOVENfR1JPVVAoSUlDMzEsIElJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLAotCQkgICBJSUMzMV9URUkpLAotCUlOVENfR1JPVVAoSUlDMzIsIElJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLAotCQkgICBJSUMzMl9URUkpLAotCUlOVENfR1JPVVAoSUlDMzMsIElJQzMzX1NUUEksIElJQzMzX05BS0ksIElJQzMzX1JYSSwgSUlDMzNfVFhJLAotCQkgICBJSUMzM19URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCi0JSU5UQ19HUk9VUChTU1UwLCBTU1UwX1NTRVJJLCBTU1UwX1NTUlhJLCBTU1UwX1NTVFhJKSwKLQlJTlRDX0dST1VQKFNTVTEsIFNTVTFfU1NFUkksIFNTVTFfU1NSWEksIFNTVTFfU1NUWEkpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxUUkVRMEksCi0JCSAgIEZMQ1RMX0ZMVFJFUTFJKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCksCi0JSU5UQ19HUk9VUChSQ0FOMCwgUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCQkgICBSQ0FOMF9TTEUpLAotCUlOVENfR1JPVVAoUkNBTjEsIFJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwKLQkJICAgUkNBTjFfU0xFKSwKLQotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMKLQlJTlRDX0dST1VQKFJPTURFQywgUk9NREVDX0lTWSwgUk9NREVDX0lFUlIsIFJPTURFQ19JQVJHLAotCQkgICBST01ERUNfSVNFQywgUk9NREVDX0lCVUYsIFJPTURFQ19JUkVBRFkpLAotCUlOVENfR1JPVVAoU0RISSwgU0RISTMsIFNESEkwLCBTREhJMSksCi0JSU5UQ19HUk9VUChTUkMsIFNSQ19PVkYsIFNSQ19PREZJLCBTUkNfSURFSSksCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNDIsMjIgKzE3NiwyMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAxOTMsIDE5NCwgMTk1LCAxOTIgfSwKKwkJLmlycXMJCT0gIHsgMTkyLCAxOTIsIDE5MiwgMTkyIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAxOTcsIDE5OCwgMTk5LCAxOTYgfSwKKwkJLmlycXMJCT0gIHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDEsIDIwMiwgMjAzLCAyMDAgfSwKKwkJLmlycXMJCT0gIHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDUsIDIwNiwgMjA3LCAyMDQgfSwKKwkJLmlycXMJCT0gIHsgMjA0LCAyMDQsIDIwNCwgMjA0IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTI3OCwxNyArMjEyLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIzMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKaW5kZXggZTZkNGVjNC4uYzQ2YTgzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDcyMDYgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBZb3NoaW5vcmkgU2F0bworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOSwzNCArMjAsMjMgQEAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKIAlBRENfQURJMCwgQURDX0FESTEsCi0JRE1BQzBfREVJLCBETUFDMF9IRUksIERNQUMxX0RFSSwgRE1BQzFfSEVJLAotCURNQUMyX0RFSSwgRE1BQzJfSEVJLCBETUFDM19ERUksIERNQUMzX0hFSSwKLQlETUFDNF9ERUksIERNQUM0X0hFSSwgRE1BQzVfREVJLCBETUFDNV9IRUksCi0JRE1BQzZfREVJLCBETUFDNl9IRUksIERNQUM3X0RFSSwgRE1BQzdfSEVJLAotCUNNVDAsIENNVDEsIEJTQywgV0RULAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCi0JUE9FMl9PRUkxLCBQT0UyX09FSTIsCi0JTVRVMlNfVEdJM0EsIE1UVTJTX1RHSTNCLCBNVFUyU19UR0kzQywgTVRVMlNfVEdJM0QsIE1UVTJTX1RDSTNWLAotCU1UVTJTX1RHSTRBLCBNVFUyU19UR0k0QiwgTVRVMlNfVEdJNEMsIE1UVTJTX1RHSTRELCBNVFUyU19UQ0k0ViwKLQlNVFUyU19UR0k1VSwgTVRVMlNfVEdJNVYsIE1UVTJTX1RHSTVXLAotCVBPRTJfT0VJMywKLQlJSUMzX1NUUEksIElJQzNfTkFLSSwgSUlDM19SWEksIElJQzNfVFhJLCBJSUMzX1RFSSwKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAorCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKKwogCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCiAJTVRVM19BQkNELCBNVFU0X0FCQ0QsIE1UVTUsIFBPRTJfMTIsIE1UVTNTX0FCQ0QsIE1UVTRTX0FCQ0QsIE1UVTVTLAotCUlJQzMsIFNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCUlJQzMsCisKKwlDTVQwLCBDTVQxLCBCU0MsIFdEVCwKKworCU1UVTJfVENJM1YsIE1UVTJfVENJNFYsIE1UVTJTX1RDSTNWLCBNVFUyU19UQ0k0ViwKKworCVBPRTJfT0VJMywKKworCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyAqLworCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU5LDg2ICs0OSw1OCBAQAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCiAJSU5UQ19JUlEoUElOVDYsIDg2KSwgSU5UQ19JUlEoUElOVDcsIDg3KSwKIAlJTlRDX0lSUShBRENfQURJMCwgOTIpLCBJTlRDX0lSUShBRENfQURJMSwgOTYpLAotCUlOVENfSVJRKERNQUMwX0RFSSwgMTA4KSwgSU5UQ19JUlEoRE1BQzBfSEVJLCAxMDkpLAotCUlOVENfSVJRKERNQUMxX0RFSSwgMTEyKSwgSU5UQ19JUlEoRE1BQzFfSEVJLCAxMTMpLAotCUlOVENfSVJRKERNQUMyX0RFSSwgMTE2KSwgSU5UQ19JUlEoRE1BQzJfSEVJLCAxMTcpLAotCUlOVENfSVJRKERNQUMzX0RFSSwgMTIwKSwgSU5UQ19JUlEoRE1BQzNfSEVJLCAxMjEpLAotCUlOVENfSVJRKERNQUM0X0RFSSwgMTI0KSwgSU5UQ19JUlEoRE1BQzRfSEVJLCAxMjUpLAotCUlOVENfSVJRKERNQUM1X0RFSSwgMTI4KSwgSU5UQ19JUlEoRE1BQzVfSEVJLCAxMjkpLAotCUlOVENfSVJRKERNQUM2X0RFSSwgMTMyKSwgSU5UQ19JUlEoRE1BQzZfSEVJLCAxMzMpLAotCUlOVENfSVJRKERNQUM3X0RFSSwgMTM2KSwgSU5UQ19JUlEoRE1BQzdfSEVJLCAxMzcpLAorCUlOVENfSVJRKERNQUMwLCAxMDgpLCBJTlRDX0lSUShETUFDMCwgMTA5KSwKKwlJTlRDX0lSUShETUFDMSwgMTEyKSwgSU5UQ19JUlEoRE1BQzEsIDExMyksCisJSU5UQ19JUlEoRE1BQzIsIDExNiksIElOVENfSVJRKERNQUMyLCAxMTcpLAorCUlOVENfSVJRKERNQUMzLCAxMjApLCBJTlRDX0lSUShETUFDMywgMTIxKSwKKwlJTlRDX0lSUShETUFDNCwgMTI0KSwgSU5UQ19JUlEoRE1BQzQsIDEyNSksCisJSU5UQ19JUlEoRE1BQzUsIDEyOCksIElOVENfSVJRKERNQUM1LCAxMjkpLAorCUlOVENfSVJRKERNQUM2LCAxMzIpLCBJTlRDX0lSUShETUFDNiwgMTMzKSwKKwlJTlRDX0lSUShETUFDNywgMTM2KSwgSU5UQ19JUlEoRE1BQzcsIDEzNyksCiAJSU5UQ19JUlEoQ01UMCwgMTQwKSwgSU5UQ19JUlEoQ01UMSwgMTQ0KSwKIAlJTlRDX0lSUShCU0MsIDE0OCksIElOVENfSVJRKFdEVCwgMTUyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAxNTYpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAxNTcpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDE1OCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDE1OSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMTYwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBFLCAxNjEpLCBJTlRDX0lSUShNVFUyX1RHSTBGLCAxNjIpLAotCUlOVENfSVJRKE1UVTJfVEdJMUEsIDE2NCksIElOVENfSVJRKE1UVTJfVEdJMUIsIDE2NSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxViwgMTY4KSwgSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMTY5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTJBLCAxNzIpLCBJTlRDX0lSUShNVFUyX1RHSTJCLCAxNzMpLAotCUlOVENfSVJRKE1UVTJfVENJMlYsIDE3NiksIElOVENfSVJRKE1UVTJfVENJMlUsIDE3NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTgwKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTgxKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxODIpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxODMpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTU2KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNTcpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTU4KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNTkpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNjApLCBJTlRDX0lSUShNVFUwX1ZFRiwgMTYxKSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTYyKSwKKwlJTlRDX0lSUShNVFUxX0FCLCAxNjQpLCBJTlRDX0lSUShNVFUxX0FCLCAxNjUpLAorCUlOVENfSVJRKE1UVTFfVlUsIDE2OCksIElOVENfSVJRKE1UVTFfVlUsIDE2OSksCisJSU5UQ19JUlEoTVRVMl9BQiwgMTcyKSwgSU5UQ19JUlEoTVRVMl9BQiwgMTczKSwKKwlJTlRDX0lSUShNVFUyX1ZVLCAxNzYpLCBJTlRDX0lSUShNVFUyX1ZVLCAxNzcpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTgwKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxODEpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTgyKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxODMpLAogCUlOVENfSVJRKE1UVTJfVENJM1YsIDE4NCksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTg4KSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTg5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxOTApLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxOTEpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTg4KSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxODkpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTkwKSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxOTEpLAogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE5MiksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VSwgMTk2KSwgSU5UQ19JUlEoTVRVMl9UR0k1ViwgMTk3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTVXLCAxOTgpLAotCUlOVENfSVJRKFBPRTJfT0VJMSwgMjAwKSwgSU5UQ19JUlEoUE9FMl9PRUkyLCAyMDEpLAotCUlOVENfSVJRKE1UVTJTX1RHSTNBLCAyMDQpLCBJTlRDX0lSUShNVFUyU19UR0kzQiwgMjA1KSwKLQlJTlRDX0lSUShNVFUyU19UR0kzQywgMjA2KSwgSU5UQ19JUlEoTVRVMlNfVEdJM0QsIDIwNyksCisJSU5UQ19JUlEoTVRVNSwgMTk2KSwgSU5UQ19JUlEoTVRVNSwgMTk3KSwKKwlJTlRDX0lSUShNVFU1LCAxOTgpLAorCUlOVENfSVJRKFBPRTJfMTIsIDIwMCksIElOVENfSVJRKFBPRTJfMTIsIDIwMSksCisJSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA0KSwgSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA1KSwKKwlJTlRDX0lSUShNVFUzU19BQkNELCAyMDYpLCBJTlRDX0lSUShNVFUzU19BQkNELCAyMDcpLAogCUlOVENfSVJRKE1UVTJTX1RDSTNWLCAyMDgpLAotCUlOVENfSVJRKE1UVTJTX1RHSTRBLCAyMTIpLCBJTlRDX0lSUShNVFUyU19UR0k0QiwgMjEzKSwKLQlJTlRDX0lSUShNVFUyU19UR0k0QywgMjE0KSwgSU5UQ19JUlEoTVRVMlNfVEdJNEQsIDIxNSksCisJSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjEyKSwgSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjEzKSwKKwlJTlRDX0lSUShNVFU0U19BQkNELCAyMTQpLCBJTlRDX0lSUShNVFU0U19BQkNELCAyMTUpLAogCUlOVENfSVJRKE1UVTJTX1RDSTRWLCAyMTYpLAotCUlOVENfSVJRKE1UVTJTX1RHSTVVLCAyMjApLCBJTlRDX0lSUShNVFUyU19UR0k1ViwgMjIxKSwKLQlJTlRDX0lSUShNVFUyU19UR0k1VywgMjIyKSwKKwlJTlRDX0lSUShNVFU1UywgMjIwKSwgSU5UQ19JUlEoTVRVNVMsIDIyMSksCisJSU5UQ19JUlEoTVRVNVMsIDIyMiksCiAJSU5UQ19JUlEoUE9FMl9PRUkzLCAyMjQpLAotCUlOVENfSVJRKElJQzNfU1RQSSwgMjI4KSwgSU5UQ19JUlEoSUlDM19OQUtJLCAyMjkpLAotCUlOVENfSVJRKElJQzNfUlhJLCAyMzApLCBJTlRDX0lSUShJSUMzX1RYSSwgMjMxKSwKLQlJTlRDX0lSUShJSUMzX1RFSSwgMjMyKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDI0MCksIElOVENfSVJRKFNDSUYwX0VSSSwgMjQxKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDI0MiksIElOVENfSVJRKFNDSUYwX1RYSSwgMjQzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDI0NCksIElOVENfSVJRKFNDSUYxX0VSSSwgMjQ1KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDI0NiksIElOVENfSVJRKFNDSUYxX1RYSSwgMjQ3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDI0OCksIElOVENfSVJRKFNDSUYyX0VSSSwgMjQ5KSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDI1MCksIElOVENfSVJRKFNDSUYyX1RYSSwgMjUxKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDI1MiksIElOVENfSVJRKFNDSUYzX0VSSSwgMjUzKSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDI1NCksIElOVENfSVJRKFNDSUYzX1RYSSwgMjU1KSwKKwlJTlRDX0lSUShJSUMzLCAyMjgpLCBJTlRDX0lSUShJSUMzLCAyMjkpLAorCUlOVENfSVJRKElJQzMsIDIzMCksIElOVENfSVJRKElJQzMsIDIzMSksCisJSU5UQ19JUlEoSUlDMywgMjMyKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjQwKSwgSU5UQ19JUlEoU0NJRjAsIDI0MSksCisJSU5UQ19JUlEoU0NJRjAsIDI0MiksIElOVENfSVJRKFNDSUYwLCAyNDMpLAorCUlOVENfSVJRKFNDSUYxLCAyNDQpLCBJTlRDX0lSUShTQ0lGMSwgMjQ1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMjQ2KSwgSU5UQ19JUlEoU0NJRjEsIDI0NyksCisJSU5UQ19JUlEoU0NJRjIsIDI0OCksIElOVENfSVJRKFNDSUYyLCAyNDkpLAorCUlOVENfSVJRKFNDSUYyLCAyNTApLCBJTlRDX0lSUShTQ0lGMiwgMjUxKSwKKwlJTlRDX0lSUShTQ0lGMywgMjUyKSwgSU5UQ19JUlEoU0NJRjMsIDI1MyksCisJSU5UQ19JUlEoU0NJRjMsIDI1NCksIElOVENfSVJRKFNDSUYzLCAyNTUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RFSSwgRE1BQzBfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ERUksIERNQUMxX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQzJfREVJLCBETUFDMl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzMsIERNQUMzX0RFSSwgRE1BQzNfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM0LCBETUFDNF9ERUksIERNQUM0X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNSwgRE1BQzVfREVJLCBETUFDNV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzYsIERNQUM2X0RFSSwgRE1BQzZfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM3LCBETUFDN19ERUksIERNQUM3X0hFSSksCi0JSU5UQ19HUk9VUChNVFUwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCUlOVENfR1JPVVAoTVRVMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUxX1ZVLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVKSwKLQlJTlRDX0dST1VQKE1UVTJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUzX0FCQ0QsIE1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTUsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoUE9FMl8xMiwgUE9FMl9PRUkxLCBQT0UyX09FSTIpLAotCUlOVENfR1JPVVAoTVRVM1NfQUJDRCwgTVRVMlNfVEdJM0EsIE1UVTJTX1RHSTNCLAotCQkgICBNVFUyU19UR0kzQywgTVRVMlNfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNFNfQUJDRCwgTVRVMlNfVEdJNEEsIE1UVTJTX1RHSTRCLAotCQkgICBNVFUyU19UR0k0QywgTVRVMlNfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVNVMsIE1UVTJTX1RHSTVVLCBNVFUyU19UR0k1ViwgTVRVMlNfVEdJNVcpLAotCUlOVENfR1JPVVAoSUlDMywgSUlDM19TVFBJLCBJSUMzX05BS0ksIElJQzNfUlhJLCBJSUMzX1RYSSwgSUlDM19URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTc0LDIyICsxMzYsMjIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZmU4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQxLCAyNDIsIDI0MywgMjQwIH0sCisJCS5pcnFzCQk9IHsgMjQwLCAyNDAsIDI0MCwgMjQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDUsIDI0NiwgMjQ3LCAyNDQgfSwKKwkJLmlycXMJCT0geyAyNDQsIDI0NCwgMjQ0LCAyNDQgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0OSwgMjUwLCAyNTEsIDI0OCB9LAorCQkuaXJxcwkJPSB7IDI0OCwgMjQ4LCAyNDgsIDI0OCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjUzLCAyNTQsIDI1NSwgMjUyIH0sCisJCS5pcnFzCQk9IHsgMjUyLCAyNTIsIDI1MiwgMjUyIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IGUwN2M2OWUuLmVjYWIyNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtNCw2ICs0LDggQEAKIAogb2JqLXkJOj0gZXgubyBwcm9iZS5vIGVudHJ5Lm8gc2V0dXAtc2gzLm8KIAorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkJKz0gc3dzdXNwLm8KKwogIyBDUFUgc3VidHlwZSBzZXR1cAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkJKz0gc2V0dXAtc2g3NzA1Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpCSs9IHNldHVwLXNoNzcweC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggYjQxMDZkMC4uNTVkYTBmZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxjcHUvbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAhIE5PVEU6CiAhIEdOVSBhcyAoYXMgb2YgMi45LjEpIGNoYW5nZXMgYmYvcyBpbnRvIGJ0L3MgYW5kIGJyYSwgd2hlbiB0aGUgYWRkcmVzcwpAQCAtMTg3LDQ0ICsxODgsMzUgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQogCS8qIFVud2luZCB0aGUgc3RhY2sgYW5kIGptcCB0byB0aGUgZGVidWcgZW50cnkgKi8KIEVOVFJZKHNoX2Jpb3NfaGFuZGxlcikKLQltb3YubAlAcjE1KywgcjAKLQltb3YubAlAcjE1KywgcjEKLQltb3YubAlAcjE1KywgcjIKLQltb3YubAlAcjE1KywgcjMKLQltb3YubAlAcjE1KywgcjQKLQltb3YubAlAcjE1KywgcjUKLQltb3YubAlAcjE1KywgcjYKLQltb3YubAlAcjE1KywgcjcKLQlzdGMJc3IsIHI4Ci0JbW92LmwJMWYsIHI5CQkJISBCTCA9MSwgUkI9MSwgSU1BU0s9MHgwRgotCW9yCXI5LCByOAotCWxkYwlyOCwgc3IJCQkhIGhlcmUsIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYmFuawotCW1vdi5sCUByMTUrLCByOAotCW1vdi5sCUByMTUrLCByOQotCW1vdi5sCUByMTUrLCByMTAKLQltb3YubAlAcjE1KywgcjExCi0JbW92LmwJQHIxNSssIHIxMgotCW1vdi5sCUByMTUrLCByMTMKLQltb3YubAlAcjE1KywgcjE0Ci0JbW92LmwJQHIxNSssIGswCi0JbGRjLmwJQHIxNSssIHNwYwotCWxkcy5sCUByMTUrLCBwcgotCW1vdi5sCUByMTUrLCBrMQotCWxkYy5sCUByMTUrLCBnYnIKLQlsZHMubAlAcjE1KywgbWFjaAotCWxkcy5sCUByMTUrLCBtYWNsCi0JbW92CWswLCByMTUKKwltb3YubAkxZiwgcjgKKwlic3IJcmVzdG9yZV9yZWdzCisJIG5vcAorCisJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgorCW1vdglrNCwgcjE1CiAJIQogCW1vdi5sCTJmLCBrMAogCW1vdi5sCUBrMCwgazAKIAlqbXAJQGswCi0JIGxkYwlrMSwgc3NyCisJIGxkYwlrMywgc3NyCiAJLmFsaWduCTIKIDE6CS5sb25nCTB4MzAwMDAwZjAKIDI6CS5sb25nCWdkYl92YnJfdmVjdG9yCiAjZW5kaWYgLyogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgKi8KIAotcmVzdG9yZV9hbGw6CishIHJlc3RvcmVfcmVncygpCishIC0gcmVzdG9yZSByMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjcgZnJvbSB0aGUgc3RhY2sKKyEgLSBzd2l0Y2ggYmFuaworISAtIHJlc3RvcmUgcjgsIHI5LCByMTAsIHIxMSwgcjEyLCByMTMsIHIxNCwgcjE1IGZyb20gdGhlIHN0YWNrCishIC0gcmVzdG9yZSBzcGMsIHByKiwgc3NyLCBnYnIsIG1hY2gsIG1hY2wsIHNraXAgZGVmYXVsdCB0cmEKKyEgazIgcmV0dXJucyBvcmlnaW5hbCBwcgorISBrMyByZXR1cm5zIG9yaWdpbmFsIHNyCishIGs0IHJldHVybnMgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgorISByOCBwYXNzZXMgU1IgYml0bWFzaywgb3ZlcndyaXR0ZW4gd2l0aCByZXN0b3JlZCBkYXRhIG9uIHJldHVybgorISByOSB0cmFzaGVkCishIEJMPTAgb24gZW50cnksIG9uIGV4aXQgQkw9MSAoZGVwZW5kaW5nIG9uIHI4KS4KKworRU5UUlkocmVzdG9yZV9yZWdzKQogCW1vdi5sCUByMTUrLCByMAogCW1vdi5sCUByMTUrLCByMQogCW1vdi5sCUByMTUrLCByMgpAQCAtMjM0LDEwICsyMjYsOSBAQAogCW1vdi5sCUByMTUrLCByNgogCW1vdi5sCUByMTUrLCByNwogCSEKLQlzdGMJc3IsIHI4Ci0JbW92LmwJN2YsIHI5Ci0Jb3IJcjksIHI4CQkJISBCTCA9MSwgUkI9MQotCWxkYwlyOCwgc3IJCQkhIGhlcmUsIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYmFuaworCXN0YwlzciwgcjkKKwlvcglyOCwgcjkKKwlsZGMJcjksIHNyCiAJIQogCW1vdi5sCUByMTUrLCByOAogCW1vdi5sCUByMTUrLCByOQpAQCAtMjQ4LDEyICsyMzksMjAgQEAKIAltb3YubAlAcjE1KywgcjE0CiAJbW92LmwJQHIxNSssIGs0CQkhIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIKIAlsZGMubAlAcjE1Kywgc3BjCi0JbGRzLmwJQHIxNSssIHByCisJbW92LmwJQHIxNSssIGsyCQkhIG9yaWdpbmFsIFBSCiAJbW92LmwJQHIxNSssIGszCQkhIG9yaWdpbmFsIFNSCiAJbGRjLmwJQHIxNSssIGdicgogCWxkcy5sCUByMTUrLCBtYWNoCiAJbGRzLmwJQHIxNSssIG1hY2wKLQlhZGQJIzQsIHIxNQkJCSEgU2tpcCBzeXNjYWxsIG51bWJlcgorCXJ0cworCSBhZGQJIzQsIHIxNQkJCSEgU2tpcCBzeXNjYWxsIG51bWJlcgorCityZXN0b3JlX2FsbDoKKwltb3YubAk3ZiwgcjgKKwlic3IJcmVzdG9yZV9yZWdzCisJIG5vcAorCisJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgogCSEKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAJbW92LmwJQHIxNSssIGswCQkhIERTUCBtb2RlIG1hcmtlcgpAQCAtMjk0LDcgKzI5Myw3IEBACiAJbW92CSMweGYwLCBrMQogCWV4dHUuYglrMSwgazEKIAlub3QJazEsIGsxCi0JYW5kCWsxLCBrMgkJCSEgTWFzayBvcmlnbmFsIFNSIHZhbHVlCisJYW5kCWsxLCBrMgkJCSEgTWFzayBvcmlnaW5hbCBTUiB2YWx1ZQogCSEKIAltb3YJazMsIGswCQkJISBDYWxjdWxhdGUgSU1BU0stYml0cwogCXNobHIyCWswCkBAIC0zMTMsNyArMzEyLDYgQEAKIAltb3YJIzAsIGsxCiAJbW92LmIJazEsIEBrMAogI2VuZGlmCi0JbW92LmwJQHIxNSssIGsyCQkhIHJlc3RvcmUgRVhQRVZUCiAJbW92CWs0LCByMTUKIAlydGUKIAkgbm9wCkBAIC0zMzYsODEgKzMzNCw1NSBAQAogRU5UUlkodmJyX2Jhc2UpCiAJLmxvbmcJMAogIQorISAweDEwMDogR2VuZXJhbCBleGNlcHRpb24gdmVjdG9yCishCiAJLmJhbGlnbiAJMjU2LDAsMjU2CiBnZW5lcmFsX2V4Y2VwdGlvbjoKLQltb3YubAkxZiwgazIKLQltb3YubAkyZiwgazMKLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMwotCW1vdi5sCUBrMiwgazIKKyNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMKKwlicmEJaGFuZGxlX2V4Y2VwdGlvbgorCSBzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKyNlbHNlCisJbW92LmwJMWYsIGs0CisJbW92LmwJQGs0LCBrNAogCiAJISBJcyBFWFBFVlQgbGFyZ2VyIHRoYW4gMHg4MDA/CiAJbW92CSMweDgsIGswCiAJc2hsbDgJazAKLQljbXAvaHMJazAsIGsyCisJY21wL2hzCWswLCBrNAogCWJmCTBmCiAKIAkhIHRoZW4gYWRkIDB4NTgwIChrMiBpcyAweGQ4MCBvciAweGRhMCkKIAltb3YJIzB4NTgsIGswCiAJc2hsbDIJazAKIAlzaGxsMglrMAotCWFkZAlrMCwgazIKKwlhZGQJazAsIGs0CiAwOgotCWJyYQloYW5kbGVfZXhjZXB0aW9uCisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAogCSBub3AKLSNlbHNlCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92LmwJQGsyLCBrMgorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YJCWs0LCBrMgkJISBrZWVwIHZlY3RvciBpbiBrMgorCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG5vcAorCisJYnJhCWhhbmRsZV9leGNlcHRpb25fc3BlY2lhbAorCSBub3AKKworCS5hbGlnbgkyCisxOgkubG9uZwlFWFBFVlQKICNlbmRpZgotCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTI6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgotIQotIQogCi0JLmJhbGlnbiAJMTAyNCwwLDEwMjQKLXRsYl9taXNzOgotCW1vdi5sCTFmLCBrMgotCW1vdi5sCTRmLCBrMwotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdi5sCUBrMiwgazIKLSEKLQkuYmFsaWduIAk1MTIsMCw1MTIKLWludGVycnVwdDoKLQltb3YubAkzZiwgazMKLSNpZiBkZWZpbmVkKENPTkZJR19LR0RCKQotCW1vdi5sCTJmLCBrMgotCSEgRGVib3VuY2UgKGZpbHRlciBuZXN0ZWQgTk1JKQotCW1vdi5sCUBrMiwgazAKLQltb3YubAk1ZiwgazEKLQljbXAvZXEJazEsIGswCi0JYmYJMGYKLQltb3YubAk2ZiwgazEKLQl0YXMuYglAazEKLQlidAkwZgotCXJ0ZQotCSBub3AKLQkuYWxpZ24JMgotMjoJLmxvbmcJSU5URVZUCi01OgkubG9uZwlOTUlfVkVDCi02OgkubG9uZwlpbl9ubWkKLTA6Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfS0dEQikgKi8KLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YJIy0xLCBrMgkJISBpbnRlcnJ1cHQgZXhjZXB0aW9uIG1hcmtlcgorISBwcmVwYXJlX3N0YWNrX3NhdmVfZHNwKCkKKyEgLSByb2xsIGJhY2sgZ1JCCishIC0gc3dpdGNoIHRvIGtlcm5lbCBzdGFjaworISAtIHNhdmUgRFNQCishIGswIHJldHVybnMgb3JpZ2luYWwgc3AgKGFmdGVyIHJvbGwgYmFjaykKKyEgazEgdHJhc2hlZAorISBrMiB0cmFzaGVkCiAKLQkuYWxpZ24JMgotMToJLmxvbmcJRVhQRVZUCi0zOgkubG9uZwlyZXRfZnJvbV9pcnEKLTQ6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgotCi0hCi0hCi0JLmFsaWduCTIKLUVOVFJZKGhhbmRsZV9leGNlcHRpb24pCi0JISBVc2luZyBrMCwgazEgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIChyMF9iYW5rMSwgcjFfYmFuayksCi0JISBzYXZlIGFsbCByZWdpc3RlcnMgb250byBzdGFjay4KLQkhCi0KK3ByZXBhcmVfc3RhY2tfc2F2ZV9kc3A6CiAjaWZkZWYgQ09ORklHX0dVU0EKIAkhIENoZWNrIGZvciByb2xsIGJhY2sgZ1JCIChVc2VyIGFuZCBLZXJuZWwpCiAJbW92CXIxNSwgazAKQEAgLTQzMCw3ICs0MDIsNyBAQAogMjoJbW92CWsxLCByMTUJCSEgU1AgPSByMQogMToKICNlbmRpZgotCisJISBTd2l0Y2ggdG8ga2VybmVsIHN0YWNrIGlmIG5lZWRlZAogCXN0Ywlzc3IsIGswCQkhIElzIGl0IGZyb20ga2VybmVsIHNwYWNlPwogCXNobGwJazAJCSEgQ2hlY2sgTUQgYml0IChiaXQzMCkgYnkgc2hpZnRpbmcgaXQgaW50by4uLgogCXNobGwJazAJCSEgICAgICAgLi4udGhlIFQgYml0CkBAIC00NDMsMTggKzQxNSwxNyBAQAogCWFkZAljdXJyZW50LCBrMQogCW1vdglrMSwgcjE1CQkhIGNoYW5nZSB0byBrZXJuZWwgc3RhY2sKIAkhCi0xOgltb3YubAkyZiwgazEKLQkhCisxOgogI2lmZGVmIENPTkZJR19TSF9EU1AKLQltb3YubAlyMiwgQC1yMTUJCSEgU2F2ZSByMiwgd2UgbmVlZCBhbm90aGVyIHJlZwotCXN0YwlzciwgazQKLQltb3YubAkxZiwgcjIKLQl0c3QJcjIsIGs0CQkJISBDaGVjayBpZiBpbiBEU1AgbW9kZQotCW1vdi5sCUByMTUrLCByMgkJISBSZXN0b3JlIHIyIG5vdworCSEgU2F2ZSBEU1AgY29udGV4dCBpZiBuZWVkZWQKKwlzdGMJc3IsIGsxCisJbW92CSMweDEwLCBrMgorCXNobGw4ICAgazIJCQkhIERTUD0xICgweDAwMDAxMDAwKQorCXRzdAlrMiwgazEJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlIChwYXNzZWQgaW4gazIpCiAJYnQvcwlza2lwX3NhdmUKLQkgbW92CSMwLCBrNAkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKKwkgbW92CSMwLCBrMQkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKIAotCW1vdglyMiwgazQJCQkhIEJhY2t1cCByMiAoaW4gazQpIGZvciBsYXRlcgorCW1vdglrMiwgazEJCQkhIFNhdmUgaGFzLWZyYW1lIG1hcmtlcgogCiAJISBTYXZlIERTUCByZWdpc3RlcnMgb24gc3RhY2sKIAlzdGMubAltb2QsIEAtcjE1CkBAIC00NzMsMzUgKzQ0NCw3NCBAQAogCSEgYXMgd2UncmUgbm90IGF0IGFsbCBpbnRlcmVzdGVkIGluIHN1cHBvcnRpbmcgYW5jaWVudCB0b29sY2hhaW5zIGF0CiAJISB0aGlzIHBvaW50LiAtLSBQRk0uCiAKLQltb3YJcjE1LCByMgorCW1vdglyMTUsIGsyCiAJLndvcmQJMHhmNjUzCQkJISBtb3ZzLmwJYTEsIEAtcjIKIAkud29yZAkweGY2ZjMJCQkhIG1vdnMubAlhMGcsIEAtcjIKIAkud29yZAkweGY2ZDMJCQkhIG1vdnMubAlhMWcsIEAtcjIKIAkud29yZAkweGY2YzMJCQkhIG1vdnMubAltMCwgQC1yMgogCS53b3JkCTB4ZjZlMwkJCSEgbW92cy5sCW0xLCBALXIyCi0JbW92CXIyLCByMTUKKwltb3YJazIsIHIxNQogCi0JbW92CWs0LCByMgkJCSEgUmVzdG9yZSByMgotCW1vdi5sCTFmLCBrNAkJCSEgRm9yY2UgRFNQIHN0YWNrIGZyYW1lCiBza2lwX3NhdmU6Ci0JbW92LmwJazQsIEAtcjE1CQkhIFB1c2ggRFNQIG1vZGUgbWFya2VyIG9udG8gc3RhY2sKKwltb3YubAlrMSwgQC1yMTUJCSEgUHVzaCBEU1AgbW9kZSBtYXJrZXIgb250byBzdGFjawogI2VuZGlmCi0JISBTYXZlIHRoZSB1c2VyIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suCi0JbW92LmwJazIsIEAtcjE1CSEgRVhQRVZUCisJcnRzCisJIG5vcAorIQorISAweDQwMDogSW5zdHJ1Y3Rpb24gYW5kIERhdGEgVExCIG1pc3MgZXhjZXB0aW9uIHZlY3RvcgorIQorCS5iYWxpZ24gCTEwMjQsMCwxMDI0Cit0bGJfbWlzczoKKwlzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKIAotCW1vdgkjLTEsIGs0Ci0JbW92LmwJazQsIEAtcjE1CSEgc2V0IFRSQSAoZGVmYXVsdDogLTEpCi0JIQoraGFuZGxlX2V4Y2VwdGlvbjoKKwltb3ZhCWV4Y2VwdGlvbl9kYXRhLCBrMAorCisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCSBQUkVGKGswKQorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YubAk1ZiwgazIJCSEgdmVjdG9yIHJlZ2lzdGVyIGFkZHJlc3MKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBtb3YubAlAazIsIGsyCQkhIHJlYWQgb3V0IHZlY3RvciBhbmQga2VlcCBpbiBrMgorCitoYW5kbGVfZXhjZXB0aW9uX3NwZWNpYWw6CisJISBTZXR1cCByZXR1cm4gYWRkcmVzcyBhbmQganVtcCB0byBleGNlcHRpb24gaGFuZGxlcgorCW1vdi5sCTdmLCByOQkJISBmZXRjaCByZXR1cm4gYWRkcmVzcworCXN0YwlyMl9iYW5rLCByMAkhIGsyICh2ZWN0b3IpCisJbW92LmwJNmYsIHIxMAorCXNobHIyCXIwCisJc2hscglyMAorCW1vdi5sCUAocjAsIHIxMCksIHIxMAorCWptcAlAcjEwCisJIGxkcwlyOSwgcHIJCSEgcHV0IHJldHVybiBhZGRyZXNzIGluIHByCisKKwkuYWxpZ24JTDFfQ0FDSEVfU0hJRlQKKworISBzYXZlX3JlZ3MoKQorISAtIHNhdmUgZGVmYXVsdCB0cmEsIG1hY2wsIG1hY2gsIGdiciwgc3NyLCBwciogYW5kIHNwYyBvbiB0aGUgc3RhY2sKKyEgLSBzYXZlIHIxNSosIHIxNCwgcjEzLCByMTIsIHIxMSwgcjEwLCByOSwgcjggb24gdGhlIHN0YWNrCishIC0gc3dpdGNoIGJhbmsKKyEgLSBzYXZlIHI3LCByNiwgcjUsIHI0LCByMywgcjIsIHIxLCByMCBvbiB0aGUgc3RhY2sKKyEgazAgY29udGFpbnMgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcioKKyEgazEgdHJhc2hlZAorISBrMyBwYXNzZXMgb3JpZ2luYWwgcHIqCishIGs0IHBhc3NlcyBTUiBiaXRtYXNrCishIEJMPTEgb24gZW50cnksIG9uIGV4aXQgQkw9MC4KKworRU5UUlkoc2F2ZV9yZWdzKQorCW1vdgkjLTEsIHIxCisJbW92LmwJazEsIEAtcjE1CSEgc2V0IFRSQSAoZGVmYXVsdDogLTEpCiAJc3RzLmwJbWFjbCwgQC1yMTUKIAlzdHMubAltYWNoLCBALXIxNQogCXN0Yy5sCWdiciwgQC1yMTUKIAlzdGMubAlzc3IsIEAtcjE1Ci0Jc3RzLmwJcHIsIEAtcjE1CisJbW92LmwJazMsIEAtcjE1CSEgb3JpZ2luYWwgcHIgaW4gazMKIAlzdGMubAlzcGMsIEAtcjE1Ci0JIQotCWxkcwlrMywgcHIJCSEgU2V0IHRoZSByZXR1cm4gYWRkcmVzcyB0byBwcgotCSEKLQltb3YubAlrMCwgQC1yMTUJISBzYXZlIG9yaWduYWwgc3RhY2sKKworCW1vdi5sCWswLCBALXIxNQkhIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIgaW4gazAKIAltb3YubAlyMTQsIEAtcjE1CiAJbW92LmwJcjEzLCBALXIxNQogCW1vdi5sCXIxMiwgQC1yMTUKQEAgLTUwOSwxMyArNTE5LDIzIEBACiAJbW92LmwJcjEwLCBALXIxNQogCW1vdi5sCXI5LCBALXIxNQogCW1vdi5sCXI4LCBALXIxNQotCSEKLQlzdGMJc3IsIHI4CQkhIEJhY2sgdG8gbm9ybWFsIHJlZ2lzdGVyIGJhbmssIGFuZAotCW9yCWsxLCByOAkJISBCbG9jayBhbGwgaW50ZXJydXB0cwotCW1vdi5sCTNmLCBrMQotCWFuZAlrMSwgcjgJCSEgLi4uCi0JbGRjCXI4LCBzcgkJISAuLi5jaGFuZ2VkIGhlcmUuCi0JIQorCisJbW92LmwJMGYsIGszCQkhIFNSIGJpdHMgdG8gc2V0IGluIGszCisKKwkhIGZhbGwtdGhyb3VnaAorCishIHNhdmVfbG93X3JlZ3MoKQorISAtIG1vZGlmeSBTUiBmb3IgYmFuayBzd2l0Y2gKKyEgLSBzYXZlIHI3LCByNiwgcjUsIHI0LCByMywgcjIsIHIxLCByMCBvbiB0aGUgc3RhY2sKKyEgazMgcGFzc2VzIGJpdHMgdG8gc2V0IGluIFNSCishIGs0IHBhc3NlcyBiaXRzIHRvIGNsZWFyIGluIFNSCisKK0VOVFJZKHNhdmVfbG93X3JlZ3MpCisJc3RjCXNyLCByOAorCW9yCWszLCByOAorCWFuZAlrNCwgcjgKKwlsZGMJcjgsIHNyCisKIAltb3YubAlyNywgQC1yMTUKIAltb3YubAlyNiwgQC1yMTUKIAltb3YubAlyNSwgQC1yMTUKQEAgLTUyMyw1MiArNTQzLDYzIEBACiAJbW92LmwJcjMsIEAtcjE1CiAJbW92LmwJcjIsIEAtcjE1CiAJbW92LmwJcjEsIEAtcjE1Ci0JbW92LmwJcjAsIEAtcjE1Ci0KLQkvKgotCSAqIFRoaXMgZ2V0cyBhIGJpdCB0cmlja3kuLiBpbiB0aGUgSU5URVZUIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byB1c2UKLQkgKiB0aGUgVkJSIG9mZnNldCBhcyBhIGRlc3RpbmF0aW9uIGluIHRoZSBqdW1wIGNhbGwgdGFibGUsIHNpbmNlIGFsbAotCSAqIG9mIHRoZSBkZXN0aW5hdGlvbnMgYXJlIHRoZSBzYW1lLiBJbiB0aGlzIGNhc2UsIChpbnRlcnJ1cHQpIHNldHMKLQkgKiBhIG1hcmtlciBpbiByMiAobm93IHIyX2Jhbmsgc2luY2UgU1IuUkIgY2hhbmdlZCksIHdoaWNoIHdlIGNoZWNrCi0JICogdG8gZGV0ZXJtaW5lIHRoZSBleGNlcHRpb24gdHlwZS4gRm9yIGFsbCBvdGhlciBleGNlcHRpb25zLCB3ZQotCSAqIGZvcmNpYmx5IHJlYWQgRVhQRVZUIGZyb20gbWVtb3J5IGFuZCBmaXggdXAgdGhlIGp1bXAgYWRkcmVzcywgaW4KLQkgKiB0aGUgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYXNlIHdlIGp1bXAgdG8gZG9fSVJRKCkgYW5kIGRlZmVyIHRoZQotCSAqIElOVEVWVCByZWFkIHVudGlsIHRoZXJlLiBBcyBhIGJvbnVzLCB3ZSBjYW4gYWxzbyBjbGVhbiB1cCB0aGUgU1IuUkIKLQkgKiBjaGVja3MgdGhhdCBkb19JUlEoKSB3YXMgZG9pbmcuLgotCSAqLwotCXN0YwlyMl9iYW5rLCByOAotCWNtcC9weglyOAotCWJmCWludGVycnVwdF9leGNlcHRpb24KLQlzaGxyMglyOAotCXNobHIJcjgKLQltb3YubAk0ZiwgcjkKLQlhZGQJcjgsIHI5Ci0JbW92LmwJQHI5LCByOQotCWptcAlAcjkKLQkgbm9wCiAJcnRzCisJIG1vdi5sCXIwLCBALXIxNQorCishCishIDB4NjAwOiBJbnRlcnJ1cHQgLyBOTUkgdmVjdG9yCishCisJLmJhbGlnbiAJNTEyLDAsNTEyCitFTlRSWShoYW5kbGVfaW50ZXJydXB0KQorI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCisJbW92LmwJMmYsIGsyCisJISBEZWJvdW5jZSAoZmlsdGVyIG5lc3RlZCBOTUkpCisJbW92LmwJQGsyLCBrMAorCW1vdi5sCTlmLCBrMQorCWNtcC9lcQlrMSwgazAKKwliZgkxMWYKKwltb3YubAkxMGYsIGsxCisJdGFzLmIJQGsxCisJYnQJMTFmCisJcnRlCiAJIG5vcAotCiAJLmFsaWduCTIKLTE6CS5sb25nCTB4MDAwMDEwMDAJISBEU1A9MQotMjoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1Ci0zOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAotNDoJLmxvbmcJZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlCis5OgkubG9uZwlOTUlfVkVDCisxMDoJLmxvbmcJaW5fbm1pCisxMToKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19LR0RCKSAqLworCXN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCiAKLWludGVycnVwdF9leGNlcHRpb246Ci0JbW92LmwJMWYsIHI5CisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCSBQUkVGKGswKQorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBtb3YJIy0xLCBrMgkJISBkZWZhdWx0IHZlY3RvciBrZXB0IGluIGsyCisKKwkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGRvX0lSUQorCW1vdi5sCTRmLCByOQkJISBmZXRjaCByZXR1cm4gYWRkcmVzcworCWxkcwlyOSwgcHIJCSEgcHV0IHJldHVybiBhZGRyZXNzIGluIHByCiAJbW92LmwJMmYsIHI0Ci0JbW92LmwJQHI0LCByNAorCW1vdi5sCTNmLCByOQorCW1vdi5sCUByNCwgcjQJCSEgcGFzcyBJTlRFVlQgdmVjdG9yIGFzIGFyZzAKIAlqbXAJQHI5Ci0JIG1vdglyMTUsIHI1Ci0JcnRzCi0JIG5vcAorCSBtb3YJcjE1LCByNQkJISBwYXNzIHNhdmVkIHJlZ2lzdGVycyBhcyBhcmcxCiAKLQkuYWxpZ24gMgotMToJLmxvbmcJZG9fSVJRCi0yOgkubG9uZwlJTlRFVlQKLQotCS5hbGlnbgkyCiBFTlRSWShleGNlcHRpb25fbm9uZSkKIAlydHMKIAkgbm9wCisKKwkuYWxpZ24JTDFfQ0FDSEVfU0hJRlQKK2V4Y2VwdGlvbl9kYXRhOgorMDoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1CisxOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAorMjoJLmxvbmcJSU5URVZUCiszOgkubG9uZwlkb19JUlEKKzQ6CS5sb25nCXJldF9mcm9tX2lycQorNToJLmxvbmcJRVhQRVZUCis2OgkubG9uZwlleGNlcHRpb25faGFuZGxpbmdfdGFibGUKKzc6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKaW5kZXggNjQ2OGFlOC4uNjNiNjdiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNINzcwNSBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA5ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMSw1MSArMjEsMzYgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsCiAJUElOVDA3LCBQSU5UODE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JQURDX0FESSwKLQlVU0JfVVNJMCwgVVNCX1VTSTEsCi0JVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywKLQlUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGX1JDTUksCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUlRDLCBUTVUyLCBETUFDLCBVU0IsIFNDSUYyLCBTQ0lGMCwKKwlETUFDLCBTQ0lGMCwgU0NJRjIsIEFEQ19BREksIFVTQiwKKworCVRQVTAsIFRQVTEsIFRQVTIsIFRQVTMsCisJVE1VMCwgVE1VMSwgVE1VMiwKKworCVJUQywgV0RULCBSRUZfUkNNSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCS8qIElSUTAtPjUgYXJlIGhhbmRsZWQgaW4gc2V0dXAtc2gzLmMgKi8KIAlJTlRDX1ZFQ1QoUElOVDA3LCAweDcwMCksIElOVENfVkVDVChQSU5UODE1LCAweDcyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMl9UWEksIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4MjApLAorCUlOVENfVkVDVChETUFDLCAweDg0MCksIElOVENfVkVDVChETUFDLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoQURDX0FESSwgMHg5ODApLAotCUlOVENfVkVDVChVU0JfVVNJMCwgMHhhMjApLCBJTlRDX1ZFQ1QoVVNCX1VTSTEsIDB4YTQwKSwKKwlJTlRDX1ZFQ1QoVVNCLCAweGEyMCksIElOVENfVkVDVChVU0IsIDB4YTQwKSwKIAlJTlRDX1ZFQ1QoVFBVMCwgMHhjMDApLCBJTlRDX1ZFQ1QoVFBVMSwgMHhjMjApLAogCUlOVENfVkVDVChUUFUyLCAweGM4MCksIElOVENfVkVDVChUUFUzLCAweGNhMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoVVNCLCBVU0JfVVNJMCwgVVNCX1VTSTEpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUZfUkNNSSwgMCwgMCB9IH0sCkBAIC03OCw3ICs2Myw3IEBACiAKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzA1IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewpAQCAtODYsMTIgKzcxLDEyIEBACiAJCS5tYXBiYXNlCT0gMHhhNDQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTYsIDU3LCA1OSB9LAorCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSB9LAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMTE1LDE0ICsxMDAsNiBAQAogCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfcnRjX3BsYXRmb3JtX2luZm8gcnRjX2luZm8gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwppbmRleCA5M2M1NWUyLi5hNzRmOTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDMgU2V0dXAgY29kZSBmb3IgU0g3NzA2LCBTSDc3MDcsIFNINzcwOCwgU0g3NzA5CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgTWFnbnVzIERhbW0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBCYXNlZCBvbiBzZXR1cC1zaDc3MDkuYwogICoKQEAgLTI0LDQ2ICsyNSwzNyBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKIAlQSU5UMDcsIFBJTlQ4MTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCi0JU0NJX0VSSSwgU0NJX1JYSSwgU0NJX1RYSSwgU0NJX1RFSSwKLQlBRENfQURJLAorCURNQUMsIFNDSUYwLCBTQ0lGMiwgU0NJLCBBRENfQURJLAogCUxDREMsIFBDQzAsIFBDQzEsCi0JVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVJFRl9SQ01JLCBSRUZfUk9WSSwKLQotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIFJFRiwgVE1VMiwgRE1BQywgU0NJLCBTQ0lGMiwgU0NJRjAsCisJVE1VMCwgVE1VMSwgVE1VMiwKKwlSVEMsIFdEVCwgUkVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTQ0lfRVJJLCAweDRlMCksIElOVENfVkVDVChTQ0lfUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNDSV9UWEksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSV9URUksIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg0NjApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoU0NJLCAweDRlMCksIElOVENfVkVDVChTQ0ksIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0NJLCAweDUyMCksIElOVENfVkVDVChTQ0ksIDB4NTQwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCi0JSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCi0JSU5UQ19WRUNUKFJFRl9ST1ZJLCAweDVhMCksCisJSU5UQ19WRUNUKFJFRiwgMHg1ODApLAorCUlOVENfVkVDVChSRUYsIDB4NWEwKSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAorCUlOVENfVkVDVChETUFDLCAweDgwMCksIElOVENfVkVDVChETUFDLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODYwKSwKIAlJTlRDX1ZFQ1QoQURDX0FESSwgMHg5ODApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMl9CUkksIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHg5NjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYyLCAweDk2MCksCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJSU5UQ19WRUNUKFBJTlQwNywgMHg3MDApLCBJTlRDX1ZFQ1QoUElOVDgxNSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpCiAJSU5UQ19WRUNUKExDREMsIDB4OWEwKSwKQEAgLTcxLDE2ICs2Myw2IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChSRUYsIFJFRl9SQ01JLCBSRUZfUk9WSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoU0NJLCBTQ0lfRVJJLCBTQ0lfUlhJLCBTQ0lfVFhJLCBTQ0lfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRiwgU0NJLCAwIH0gfSwKQEAgLTEwMSw3ICs4Myw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MHgiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzB4IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtMTExLDE0ICs5Myw2IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0JewotCQkuc3RhcnQgID0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7CiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKQEAgLTEzNiw3ICsxMTAsNyBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZmZlODAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0ksCi0JCS5pcnFzCQk9IHsgMjMsIDI0LCAyNSwgMCB9LAorCQkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKIAl9LAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXApAQCAtMTQ1LDcgKzExOSw3IEBACiAJCS5tYXBiYXNlCT0gMHhhNDAwMDE1MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTYsIDU3LCA1OSwgNTggfSwKKwkJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAogCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKQEAgLTE1NCw3ICsxMjgsNyBAQAogCQkubWFwYmFzZQk9IDB4YTQwMDAxNDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9JUkRBLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIAl9LAogI2VuZGlmCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKaW5kZXggNzdlZWU0OC4uMzM1MDk4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNIMyBTZXR1cCBjb2RlIGZvciBTSDc3MTAsIFNINzcxMgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA5ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMCw1OSArMjAsNDAgQEAKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlETUFDX0RFSTQsIERNQUNfREVJNSwKLQlJUFNFQywKKwlETUFDMSwgU0NJRjAsIFNDSUYxLCBETUFDMiwgSVBTRUMsCiAJRURNQUMwLCBFRE1BQzEsIEVETUFDMiwKLQlTSU9GMF9FUkksIFNJT0YwX1RYSSwgU0lPRjBfUlhJLCBTSU9GMF9DQ0ksCi0JU0lPRjFfRVJJLCBTSU9GMV9UWEksIFNJT0YxX1JYSSwgU0lPRjFfQ0NJLAotCVRNVTAsIFRNVTEsIFRNVTIsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGLAorCVNJT0YwLCBTSU9GMSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIERNQUMxLCBTQ0lGMCwgU0NJRjEsIERNQUMyLCBTSU9GMCwgU0lPRjEsCisJVE1VMCwgVE1VMSwgVE1VMiwKKwlSVEMsIFdEVCwgUkVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHg5NjApLAotCUlOVENfVkVDVChETUFDX0RFSTQsIDB4YjgwKSwgSU5UQ19WRUNUKERNQUNfREVJNSwgMHhiYTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMxLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDkyMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDk0MCksIElOVENfVkVDVChTQ0lGMSwgMHg5NjApLAorCUlOVENfVkVDVChETUFDMiwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQzIsIDB4YmEwKSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwCiAJSU5UQ19WRUNUKElQU0VDLCAweGJlMCksCiAjZW5kaWYKIAlJTlRDX1ZFQ1QoRURNQUMwLCAweGMwMCksIElOVENfVkVDVChFRE1BQzEsIDB4YzIwKSwKIAlJTlRDX1ZFQ1QoRURNQUMyLCAweGM0MCksCi0JSU5UQ19WRUNUKFNJT0YwX0VSSSwgMHhlMDApLCBJTlRDX1ZFQ1QoU0lPRjBfVFhJLCAweGUyMCksCi0JSU5UQ19WRUNUKFNJT0YwX1JYSSwgMHhlNDApLCBJTlRDX1ZFQ1QoU0lPRjBfQ0NJLCAweGU2MCksCi0JSU5UQ19WRUNUKFNJT0YxX0VSSSwgMHhlODApLCBJTlRDX1ZFQ1QoU0lPRjFfVFhJLCAweGVhMCksCi0JSU5UQ19WRUNUKFNJT0YxX1JYSSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0lPRjFfQ0NJLCAweGVlMCksCisJSU5UQ19WRUNUKFNJT0YwLCAweGUwMCksIElOVENfVkVDVChTSU9GMCwgMHhlMjApLAorCUlOVENfVkVDVChTSU9GMCwgMHhlNDApLCBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTYwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZTgwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGVhMCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGVjMCksIElOVENfVkVDVChTSU9GMSwgMHhlZTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQ19ERUk0LCBETUFDX0RFSTUpLAotCUlOVENfR1JPVVAoU0lPRjAsIFNJT0YwX0VSSSwgU0lPRjBfVFhJLCBTSU9GMF9SWEksIFNJT0YwX0NDSSksCi0JSU5UQ19HUk9VUChTSU9GMSwgU0lPRjFfRVJJLCBTSU9GMV9UWEksIFNJT0YxX1JYSSwgU0lPRjFfQ0NJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGLCAwLCAwIH0gfSwKQEAgLTg1LDcgKzY2LDcgQEAKIAl7IDB4YTQwODAwMDYsIDAsIDE2LCA0LCAvKiBJUFJJICovIHsgMCwgMCwgU0lPRjEgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcxMCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MTAiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC05OCwxNCArNzksNiBAQAogCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfcnRjX3BsYXRmb3JtX2luZm8gcnRjX2luZm8gPSB7CkBAIC0xMjcsMTIgKzEwMCwxMiBAQAogCQkubWFwYmFzZQk9IDB4YTQ0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhhNDQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzICAgICAgICAgICA9IHsgNTYsIDU3LCA1OSwgNTggfSwKKwkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTYsIDU2LCA1NiB9LAogCX0sIHsKIAogCQkuZmxhZ3MgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKaW5kZXggZjgwN2EyMS4uMDAzODc0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3NzIwIFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgTWFya3VzIEJydW5uZXIsIE1hcmsgSm9uYXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiAgQmFzZWQgb24gYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYzoKICAqCkBAIC0yNiwxNyArMjcsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtMTUwLDYyICsxNDEsNDkgQEAKIAlVTlVTRUQgPSAwLAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlUTVUwLCBUTVUxLCBUTVUyLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwgUkVGX1JDTUksIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5ELAorCVRNVTAsIFRNVTEsIFRNVTIsIFJUQywKKwlXRFQsIFJFRl9SQ01JLCBTSU0sCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKIAlVU0JGX1NQRCwgVE1VX1NVTkksIElSUTUsIElSUTQsCi0JRE1BQzFfREVJMCwgRE1BQzFfREVJMSwgRE1BQzFfREVJMiwgRE1BQzFfREVJMywgTENEQywgU1NMLAotCUFEQywgRE1BQzJfREVJNCwgRE1BQzJfREVJNSwgVVNCRkkwLCBVU0JGSTEsIENNVCwKKwlETUFDMSwgTENEQywgU1NMLAorCUFEQywgRE1BQzIsIFVTQkZJLCBDTVQsCiAJU0NJRjAsIFNDSUYxLAotCVBJTlQwNywgUElOVDgxNSwgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywgSUlDLAotCVNJT0YwLCBTSU9GMSwgTU1DSTAsIE1NQ0kxLCBNTUNJMiwgTU1DSTMsIFBDQywKKwlQSU5UMDcsIFBJTlQ4MTUsIFRQVSwgSUlDLAorCVNJT0YwLCBTSU9GMSwgTU1DLCBQQ0MsCiAJVVNCSEksIEFGRUlGLAogCUhfVURJLAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlUTVUsIFJUQywgU0lNLCBETUFDMSwgVVNCRkksIERNQUMyLCBVU0IsIFRQVSwgTU1DLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwogCUlOVENfVkVDVChUTVUwLCAweDQwMCksICAgICAgIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgICAgICAgSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwKLQlJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLCAgICBJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTSU1fRVJJLCAweDRlMCksICAgIElOVENfVkVDVChTSU1fUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNJTV9UWEksIDB4NTIwKSwgICAgSU5UQ19WRUNUKFNJTV9URU5ELCAweDU0MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgICAgICAgSU5UQ19WRUNUKFJUQywgMHg0ODApLAorCUlOVENfVkVDVChSVEMsIDB4NGEwKSwJICAgICAgSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTSU0sIDB4NGUwKSwJICAgICAgSU5UQ19WRUNUKFNJTSwgMHg1MDApLAorCUlOVENfVkVDVChTSU0sIDB4NTIwKSwJICAgICAgSU5UQ19WRUNUKFNJTSwgMHg1NDApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwgICAgICAgIElOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAogCS8qIEhfVURJIGNhbm5vdCBiZSBtYXNrZWQgKi8gIElOVENfVkVDVChUTVVfU1VOSSwgMHg2YzApLAotCUlOVENfVkVDVChVU0JGX1NQRCwgMHg2ZTApLCAgIElOVENfVkVDVChETUFDMV9ERUkwLCAweDgwMCksCi0JSU5UQ19WRUNUKERNQUMxX0RFSTEsIDB4ODIwKSwgSU5UQ19WRUNUKERNQUMxX0RFSTIsIDB4ODQwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfREVJMywgMHg4NjApLCBJTlRDX1ZFQ1QoTENEQywgMHg5MDApLAorCUlOVENfVkVDVChVU0JGX1NQRCwgMHg2ZTApLCAgIElOVENfVkVDVChETUFDMSwgMHg4MDApLAorCUlOVENfVkVDVChETUFDMSwgMHg4MjApLCAgICAgIElOVENfVkVDVChETUFDMSwgMHg4NDApLAorCUlOVENfVkVDVChETUFDMSwgMHg4NjApLCAgICAgIElOVENfVkVDVChMQ0RDLCAweDkwMCksCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQogCUlOVENfVkVDVChTU0wsIDB4OTgwKSwKICNlbmRpZgotCUlOVENfVkVDVChVU0JGSTAsIDB4YTIwKSwgICAgIElOVENfVkVDVChVU0JGSTEsIDB4YTQwKSwKKwlJTlRDX1ZFQ1QoVVNCRkksIDB4YTIwKSwgICAgICBJTlRDX1ZFQ1QoVVNCRkksIDB4YTQwKSwKIAlJTlRDX1ZFQ1QoVVNCSEksIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzJfREVJNCwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQzJfREVJNSwgMHhiYTApLAorCUlOVENfVkVDVChETUFDMiwgMHhiODApLCAgICAgIElOVENfVkVDVChETUFDMiwgMHhiYTApLAogCUlOVENfVkVDVChBREMsIDB4YmUwKSwgICAgICAgIElOVENfVkVDVChTQ0lGMCwgMHhjMDApLAogCUlOVENfVkVDVChTQ0lGMSwgMHhjMjApLCAgICAgIElOVENfVkVDVChQSU5UMDcsIDB4YzgwKSwKIAlJTlRDX1ZFQ1QoUElOVDgxNSwgMHhjYTApLCAgICBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZDAwKSwKLQlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZDIwKSwgICAgICBJTlRDX1ZFQ1QoVFBVMCwgMHhkODApLAotCUlOVENfVkVDVChUUFUxLCAweGRhMCksICAgICAgIElOVENfVkVDVChUUFUyLCAweGRjMCksCi0JSU5UQ19WRUNUKFRQVTMsIDB4ZGUwKSwgICAgICAgSU5UQ19WRUNUKElJQywgMHhlMDApLAotCUlOVENfVkVDVChNTUNJMCwgMHhlODApLCAgICAgIElOVENfVkVDVChNTUNJMSwgMHhlYTApLAotCUlOVENfVkVDVChNTUNJMiwgMHhlYzApLCAgICAgIElOVENfVkVDVChNTUNJMywgMHhlZTApLAorCUlOVENfVkVDVChTSU9GMSwgMHhkMjApLCAgICAgIElOVENfVkVDVChUUFUsIDB4ZDgwKSwKKwlJTlRDX1ZFQ1QoVFBVLCAweGRhMCksICAgICAgICBJTlRDX1ZFQ1QoVFBVLCAweGRjMCksCisJSU5UQ19WRUNUKFRQVSwgMHhkZTApLCAgICAgICAgSU5UQ19WRUNUKElJQywgMHhlMDApLAorCUlOVENfVkVDVChNTUMsIDB4ZTgwKSwgICAgICAgIElOVENfVkVDVChNTUMsIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoTU1DLCAweGVjMCksICAgICAgICBJTlRDX1ZFQ1QoTU1DLCAweGVlMCksCiAJSU5UQ19WRUNUKENNVCwgMHhmMDApLCAgICAgICAgSU5UQ19WRUNUKFBDQywgMHhmNjApLAogCUlOVENfVkVDVChBRkVJRiwgMHhmZTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChUTVUsIFRNVTAsIFRNVTEsIFRNVTIpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFNJTSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSTAsIERNQUMxX0RFSTEsIERNQUMxX0RFSTIsIERNQUMxX0RFSTMpLAotCUlOVENfR1JPVVAoVVNCRkksIFVTQkZJMCwgVVNCRkkxKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUk0LCBETUFDMl9ERUk1KSwKLQlJTlRDX0dST1VQKFRQVSwgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMyksCi0JSU5UQ19HUk9VUChNTUMsIE1NQ0kwLCBNTUNJMSwgTU1DSTIsIE1NQ0kzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweEE0MTRGRUUyVUwsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4QTQxNEZFRTRVTCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRl9SQ01JLCBTSU0sIDAgfSB9LApAQCAtMjE5LDcgKzE5Nyw3IEBACiAJeyAweEE0MDgwMDA4VUwsIDAsIDE2LCA0LCAvKiBJUFJKICovIHsgMCwgVVNCSEksIDAsIEFGRUlGIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MjAiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzIwIiwgdmVjdG9ycywgTlVMTCwKIAkJTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNDU0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIGswCXIwCisjZGVmaW5lIGsxCXIxCisjZGVmaW5lIGsyCXIyCisjZGVmaW5lIGszCXIzCisjZGVmaW5lIGs0CXI0CisKKyEgc3dzdXNwX2FyY2hfcmVzdW1lKCkKKyEgLSBjb3B5IHJlc3RvcmVfcGJsaXN0IHBhZ2VzCishIC0gcmVzdG9yZSByZWdpc3RlcnMgZnJvbSBzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKworRU5UUlkoc3dzdXNwX2FyY2hfcmVzdW1lKQorCW1vdi5sCTFmLCByMTUKKwltb3YubAkyZiwgcjQKKwltb3YubAlAcjQsIHI0CisKK3N3c3VzcF9jb3B5X2xvb3A6CisJbW92CXI0LCByMAorCWNtcC9lcQkjMCwgcjAKKwlidAlzd3N1c3BfcmVzdG9yZV9yZWdzCisKKwltb3YubAlAKFBCRV9BRERSRVNTLCByNCksIHIyCisJbW92LmwJQChQQkVfT1JJR19BRERSRVNTLCByNCksIHI1CisKKwltb3YJIyhQQUdFX1NJWkUgPj4gMTApLCByMworCXNobGw4CXIzCisJc2hscjIJcjMgLyogUEFHRV9TSVpFIC8gMTYgKi8KK3N3c3VzcF9jb3B5X3BhZ2U6CisJZHQJcjMKKwltb3YubAlAcjIrLHIxICAgLyogIDE2biswICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMQkgIC8qICAxNm4rNCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzggKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxICAgLyogIDE2bisxMiAqLworCW1vdi5sCXIxLEByNQorCWJmL3MJc3dzdXNwX2NvcHlfcGFnZQorCSBhZGQJIzQscjUKKworCWJyYQlzd3N1c3BfY29weV9sb29wCisJIG1vdi5sCUAoUEJFX05FWFQsIHI0KSwgcjQKKworc3dzdXNwX3Jlc3RvcmVfcmVnczoKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdi5sCTNmLCByOAorCW1vdi5sCTRmLCByNQorCWpzcglAcjUKKwkgbm9wCisKKwkhIEJMPTE6IFI3LT5SMCBpcyBiYW5rMQorCWxkcwlrMiwgcHIKKwlsZGMJazMsIHNzcgorCisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJbW92LmwJQHIxNSssIHI3CisKKwlydGUKKwkgbm9wCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKworCS5hbGlnbgkyCisxOgkubG9uZwlzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKzI6CS5sb25nCXJlc3RvcmVfcGJsaXN0CiszOgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQorNDoJLmxvbmcJcmVzdG9yZV9yZWdzCisKKyEgc3dzdXNwX2FyY2hfc3VzcGVuZCgpCishIC0gcHJlcGFyZSBwYyBmb3IgcmVzdW1lLCByZXR1cm4gZnJvbSBmdW5jdGlvbiB3aXRob3V0IHN3c3VzcF9zYXZlIG9uIHJlc3VtZQorISAtIHNhdmUgcmVnaXN0ZXJzIGluIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorISAtIGNhbGwgc3dzdXNwX3NhdmUgd3JpdGUgc3VzcGVuZCBpbWFnZQorCitFTlRSWShzd3N1c3BfYXJjaF9zdXNwZW5kKQorCXN0cwlwciwgcjAJCSEgc2F2ZSBwciBpbiByMAorCW1vdglyMTUsIHIyCQkhIHNhdmUgc3AgaW4gcjIKKwltb3YJcjgsIHI1CQkhIHNhdmUgcjggaW4gcjUKKwlzdGMJc3IsIHIxCisJbGRjCXIxLCBzc3IJCSEgc2F2ZSBzciBpbiBzc3IKKwltb3YubAkxZiwgcjEKKwlsZGMJcjEsIHNwYwkJISBzZXR1cCBwYyB2YWx1ZSBmb3IgcmVzdW1pbmcKKwltb3YubAk1ZiwgcjE1CQkhIHVzZSBzd3N1c3BfYXJjaF9yZWdzX2NwdTAgYXMgc3RhY2sKKwltb3YubAk2ZiwgcjMKKwlhZGQJcjMsIHIxNQkJISBzYXZlIGZyb20gdG9wIG9mIHN0cnVjdHVyZQorCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKwltb3YubAkyZiwgcjMJCSEgZ2V0IG5ldyBTUiB2YWx1ZSBmb3IgYmFuazEKKwltb3YJIzAsIHI0CisJbW92LmwJN2YsIHIxCisJanNyCUByMQkJISBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgYmFuazEgcjctPnIwCisJIG5vdAlyNCwgcjQKKworCSEgQkw9MTogUjctPlIwIGlzIGJhbmsxCisJc3RjCXIyX2JhbmssIGswCSEgZmV0Y2ggb2xkIHNwIGZyb20gcjJfYmFuazAKKwltb3YubAkzZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCW1vdi5sCThmLCBrMQorCWpzcglAazEJCSEgc3dpdGNoIHRvIGJhbmswIGFuZCBzYXZlIGFsbCByZWdzCisJIHN0YwlyMF9iYW5rLCBrMwkhIGZldGNoIG9sZCBwciBmcm9tIHIwX2JhbmswCisKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdglyMiwgcjE1CQkhIHJlc3RvcmUgb2xkIHNwCisJbW92CXI1LCByOAkJISByZXN0b3JlIG9sZCByOAorCXN0Ywlzc3IsIHIxCisJbGRjCXIxLCBzcgkJISByZXN0b3JlIG9sZCBzcgorCWxkcwlyMCwgcHIJCSEgcmVzdG9yZSBvbGQgcHIKKwltb3YubAk0ZiwgcjAKKwlqbXAJQHIwCisJIG5vcAorCitzd3N1c3BfY2FsbF9zYXZlOgorCW1vdglyMiwgcjE1CQkhIHJlc3RvcmUgb2xkIHNwCisJbW92CXI1LCByOAkJISByZXN0b3JlIG9sZCByOAorCWxkcwlyMCwgcHIJCSEgcmVzdG9yZSBvbGQgcHIKKwlydHMKKwkgbW92CSMwLCByMAorCisJLmFsaWduCTIKKzE6CS5sb25nCXN3c3VzcF9jYWxsX3NhdmUKKzI6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCiszOgkubG9uZwkweGRmZmZmZmZmICEgUkI9MAorNDoJLmxvbmcJc3dzdXNwX3NhdmUKKzU6CS5sb25nCXN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorNjoJLmxvbmcJU1dTVVNQX0FSQ0hfUkVHU19TSVpFCis3OgkubG9uZwlzYXZlX2xvd19yZWdzCis4OgkubG9uZwlzYXZlX3JlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCmluZGV4IGQ2MDg1NTcuLjIwM2IxODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG9iai15CTo9IHByb2JlLm8gY29tbW9uLm8KIGNvbW1vbi15CSs9ICQoYWRkcHJlZml4IC4uL3NoMy8sIGVudHJ5Lm8gZXgubykKIAorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgc3dzdXNwLm8pCiBvYmotJChDT05GSUdfU0hfRlBVKQkJCSs9IGZwdS5vIHNvZnRmbG9hdC5vCiBvYmotJChDT05GSUdfU0hfU1RPUkVfUVVFVUVTKQkJKz0gc3EubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggMmU0MjU3Mi4uM2QzYTNjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QRVJGX0NPVU5URVIgfAogCQkJCQkgIENQVV9IQVNfTExTQzsKIAkJYnJlYWs7CisJY2FzZSAweDQwMDQ6CisJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3ODY7CisJCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OworCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKKwkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVSB8IENQVV9IQVNfUEVSRl9DT1VOVEVSIHwKKwkJCUNQVV9IQVNfTExTQyB8IENQVV9IQVNfUFRFQUVYOworCQlicmVhazsKIAljYXNlIDB4MzAwODoKIAkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggZWM4ODQwMy4uYTFjODBkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0yMSwxNyArMjEsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtNTAsMTMgKzQwLDEzIEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJCS5pcnFzCQk9IHsgMjMsIDIzLCAyMywgMCB9LAogCX0sIHsKICNlbmRpZgogCQkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtODcsNDMgKzc3LDI3IEBACiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSTDAsIElSTDEsIElSTDIsIElSTDMsIC8qIG9ubHkgSVJMTSBtb2RlIHN1cHBvcnRlZCAqLwotCUhVREksIEdQSU9JLAotCURNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsIERNQUNfRE1URTMsCi0JRE1BQ19ETVRFNCwgRE1BQ19ETVRFNSwgRE1BQ19ETVRFNiwgRE1BQ19ETVRFNywKLQlETUFDX0RNQUUsCisJSFVESSwgR1BJT0ksIERNQUMsCiAJUENJQzBfUENJU0VSUiwgUENJQzFfUENJRVJSLCBQQ0lDMV9QQ0lQV0RXTiwgUENJQzFfUENJUFdPTiwKIAlQQ0lDMV9QQ0lETUEwLCBQQ0lDMV9QQ0lETUExLCBQQ0lDMV9QQ0lETUEyLCBQQ0lDMV9QQ0lETUEzLAotCVRNVTMsIFRNVTQsIFRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVNDSTFfRVJJLCBTQ0kxX1JYSSwgU0NJMV9UWEksIFNDSTFfVEVJLAotCVNDSUZfRVJJLCBTQ0lGX1JYSSwgU0NJRl9CUkksIFNDSUZfVFhJLAotCVdEVCwKLQlSRUZfUkNNSSwgUkVGX1JPVkksCisJVE1VMywgVE1VNCwgVE1VMCwgVE1VMSwgVE1VMiwgUlRDLCBTQ0kxLCBTQ0lGLCBXRFQsIFJFRiwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlETUFDLCBQQ0lDMSwgVE1VMiwgUlRDLCBTQ0kxLCBTQ0lGLCBSRUYsCisJUENJQzEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLCBJTlRDX1ZFQ1QoR1BJT0ksIDB4NjIwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNDSTFfRVJJLCAweDRlMCksIElOVENfVkVDVChTQ0kxX1JYSSwgMHg1MDApLAotCUlOVENfVkVDVChTQ0kxX1RYSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJMV9URUksIDB4NTQwKSwKLQlJTlRDX1ZFQ1QoU0NJRl9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUZfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUZfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGX1RYSSwgMHg3NjApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTQ0kxLCAweDRlMCksIElOVENfVkVDVChTQ0kxLCAweDUwMCksCisJSU5UQ19WRUNUKFNDSTEsIDB4NTIwKSwgSU5UQ19WRUNUKFNDSTEsIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoU0NJRiwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRiwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGLCAweDc0MCksIElOVENfVkVDVChTQ0lGLCAweDc2MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAotCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLCBJTlRDX1ZFQ1QoUkVGX1JPVkksIDB4NWEwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChTQ0kxLCBTQ0kxX0VSSSwgU0NJMV9SWEksIFNDSTFfVFhJLCBTQ0kxX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGLCBTQ0lGX0VSSSwgU0NJRl9SWEksIFNDSUZfQlJJLCBTQ0lGX1RYSSksCi0JSU5UQ19HUk9VUChSRUYsIFJFRl9SQ01JLCBSRUZfUk9WSSksCisJSU5UQ19WRUNUKFJFRiwgMHg1ODApLCBJTlRDX1ZFQ1QoUkVGLCAweDVhMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTM2LDcgKzExMCw3IEBACiAJCQkJCQkgUENJQzEsIFBDSUMwX1BDSVNFUlIgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc1MCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3NTAiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogLyogU0g3NzUwLCBTSDc3NTBTLCBTSDc3NTEgYW5kIFNINzA5MSBhbGwgaGF2ZSA0LWNoYW5uZWwgRE1BIGNvbnRyb2xsZXJzICovCkBAIC0xNDUsMzkgKzExOSwyOCBAQAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSkKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfZG1hNFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKERNQUNfRE1URTAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUNfRE1URTEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDX0RNQUUsIDB4NmMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNfZG1hNFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLAotCQkgICBETUFDX0RNVEUzLCBETUFDX0RNQUUpLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAogfTsKIAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19kbWE0LCAic2g3NzUwX2RtYTQiLAotCQkJIHZlY3RvcnNfZG1hNCwgZ3JvdXBzX2RtYTQsCisJCQkgdmVjdG9yc19kbWE0LCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKICNlbmRpZgogCiAvKiBTSDc3NTBSIGFuZCBTSDc3NTFSIGJvdGggaGF2ZSA4LWNoYW5uZWwgRE1BIGNvbnRyb2xsZXJzICovCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfZG1hOFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKERNQUNfRE1URTAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUNfRE1URTEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDX0RNVEU0LCAweDc4MCksIElOVENfVkVDVChETUFDX0RNVEU1LCAweDdhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTYsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUNfRE1URTcsIDB4N2UwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETUFFLCAweDZjMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzX2RtYThbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoRE1BQywgRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwKLQkJICAgRE1BQ19ETVRFMywgRE1BQ19ETVRFNCwgRE1BQ19ETVRFNSwKLQkJICAgRE1BQ19ETVRFNiwgRE1BQ19ETVRFNywgRE1BQ19ETUFFKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3ZTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCiB9OwogCiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2RtYTgsICJzaDc3NTBfZG1hOCIsCi0JCQkgdmVjdG9yc19kbWE4LCBncm91cHNfZG1hOCwKKwkJCSB2ZWN0b3JzX2RtYTgsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKaW5kZXggOGUzNDRlYy4uMWE5MjM2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQkrPSBzZXR1cC1zaDc3NzAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJKz0gc2V0dXAtc2g3NzgwLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCSs9IHNldHVwLXNoNzc4NS5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBzZXR1cC1zaDc3ODYubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCSs9IHNldHVwLXNoNzcyMi5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQkrPSBzZXR1cC1zaDc3MjMubwpAQCAtMjEsNiArMjIsNyBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQk6PSBjbG9jay1zaDc3NzAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQk6PSBjbG9jay1zaDc3ODAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQk6PSBjbG9jay1zaDc3ODUubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBjbG9jay1zaDc3ODYubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQk6PSBjbG9jay1zaDc3MjIubwpAQCAtMzEsNiArMzMsNyBAQAogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJOj0gcGlubXV4LXNoNzcyMi5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQk6PSBwaW5tdXgtc2g3NzIzLm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCTo9IHBpbm11eC1zaDc3ODUubworcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJOj0gcGlubXV4LXNoNzc4Ni5vCiAKIG9iai15CQkJKz0gJChjbG9jay15KQogb2JqLSQoQ09ORklHX1NNUCkJKz0gJChzbXAteSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0YTljMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKyAqCisgKiBTSDc3ODYgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBTSDc3ODUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAxLCAyLCA0LCAxIH07CitzdGF0aWMgaW50IHNmY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07CitzdGF0aWMgaW50IGJmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxMiwgMTYsIDEsCisJCQkgICAgIDI0LCAzMiwgMSwgMSwgMSwgMSwgMSwgMSB9Oworc3RhdGljIGludCBtZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Oworc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMTYsIDEsCisJCQkgICAgICAyNCwgMzIsIDEsIDQ4LCAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmXTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X21vZHVsZV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gbW9kdWxlX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAxNikgJiAweDAwMGYpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDc3ODZfY2xrX29wc1tdID0geworCSZzaDc3ODZfbWFzdGVyX2Nsa19vcHMsCisJJnNoNzc4Nl9tb2R1bGVfY2xrX29wcywKKwkmc2g3Nzg2X2J1c19jbGtfb3BzLAorCSZzaDc3ODZfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDc3ODZfY2xrX29wcykpCisJCSpvcHMgPSBzaDc3ODZfY2xrX29wc1tpZHhdOworfQorCitzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAyMCkgJiAweDAwMDMpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfc2h5d2F5X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBzaHl3YXlfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoNzc4Nl9zaHl3YXlfY2xrID0geworCS5uYW1lCQk9ICJzaHl3YXlfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNzc4Nl9zaHl3YXlfY2xrX29wcywKK307CisKK3N0YXRpYyB2b2lkIGRkcl9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDEyKSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7CisJLm5hbWUJCT0gImRkcl9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAorfTsKKworLyoKKyAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKKyAqIGNsb2NrIGZyYW1ld29yaworICovCitzdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKKwkmc2g3Nzg2X3NoeXdheV9jbGssCisJJnNoNzc4Nl9kZHJfY2xrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3Nzg2X2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2g3Nzg2X29uY2hpcF9jbG9ja3MpOyBpKyspIHsKKwkJc3RydWN0IGNsayAqY2xrcCA9IHNoNzc4Nl9vbmNoaXBfY2xvY2tzW2ldOworCisJCWNsa3AtPnBhcmVudCA9IGNsazsKKwkJY2xrX3JlZ2lzdGVyKGNsa3ApOworCQljbGtfZW5hYmxlKGNsa3ApOworCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgaGF2ZSB0aGUgcmVzdCBvZiB0aGUgY2xvY2tzIHJlZ2lzdGVyZWQsIHdlIG5lZWQgdG8KKwkgKiBmb3JjZSB0aGUgcGFyZW50IGNsb2NrIHRvIHByb3BhZ2F0ZSBzbyB0aGF0IHRoZXNlIGNsb2NrcyB3aWxsCisJICogYXV0b21hdGljYWxseSBmaWd1cmUgb3V0IHRoZWlyIHJhdGUuIFdlIGNoZWF0IGJ5IGhhbmRpbmcgdGhlCisJICogcGFyZW50IGNsb2NrIGl0cyBjdXJyZW50IHJhdGUgYW5kIGZvcmNpbmcgY2hpbGQgcHJvcGFnYXRpb24uCisJICovCisJY2xrX3NldF9yYXRlKGNsaywgY2xrX2dldF9yYXRlKGNsaykpOworCisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHNoNzc4Nl9jbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczYjM0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwpAQCAtMCwwICsxLDk1MCBAQAorLyoKKyAqIFNINzc4NiBQaW5tdXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIEJhc2VkIG9uIFNINzc4NSBwaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGNwdS9zaDc3ODYuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBLAorCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBLAorCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCVBDM19EQVRBLCBQQzJfREFUQSwgUEMxX0RBVEEsIFBDMF9EQVRBLAorCVBEN19EQVRBLCBQRDZfREFUQSwgUEQ1X0RBVEEsIFBENF9EQVRBLAorCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBLAorCVBFN19EQVRBLCBQRTZfREFUQSwKKwlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSwKKwlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLAorCVBIN19EQVRBLCBQSDZfREFUQSwgUEg1X0RBVEEsIFBINF9EQVRBLAorCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBLAorCVBKN19EQVRBLCBQSjZfREFUQSwgUEo1X0RBVEEsIFBKNF9EQVRBLAorCVBKM19EQVRBLCBQSjJfREFUQSwgUEoxX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBBN19JTiwgUEE2X0lOLCBQQTVfSU4sIFBBNF9JTiwKKwlQQTNfSU4sIFBBMl9JTiwgUEExX0lOLCBQQTBfSU4sCisJUEI3X0lOLCBQQjZfSU4sIFBCNV9JTiwgUEI0X0lOLAorCVBCM19JTiwgUEIyX0lOLCBQQjFfSU4sIFBCMF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEN19JTiwgUEQ2X0lOLCBQRDVfSU4sIFBENF9JTiwKKwlQRDNfSU4sIFBEMl9JTiwgUEQxX0lOLCBQRDBfSU4sCisJUEU3X0lOLCBQRTZfSU4sCisJUEY3X0lOLCBQRjZfSU4sIFBGNV9JTiwgUEY0X0lOLAorCVBGM19JTiwgUEYyX0lOLCBQRjFfSU4sIFBGMF9JTiwKKwlQRzdfSU4sIFBHNl9JTiwgUEc1X0lOLAorCVBIN19JTiwgUEg2X0lOLCBQSDVfSU4sIFBINF9JTiwKKwlQSDNfSU4sIFBIMl9JTiwgUEgxX0lOLCBQSDBfSU4sCisJUEo3X0lOLCBQSjZfSU4sIFBKNV9JTiwgUEo0X0lOLAorCVBKM19JTiwgUEoyX0lOLCBQSjFfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sCisJUEE3X0lOX1BVLCBQQTZfSU5fUFUsIFBBNV9JTl9QVSwgUEE0X0lOX1BVLAorCVBBM19JTl9QVSwgUEEyX0lOX1BVLCBQQTFfSU5fUFUsIFBBMF9JTl9QVSwKKwlQQjdfSU5fUFUsIFBCNl9JTl9QVSwgUEI1X0lOX1BVLCBQQjRfSU5fUFUsCisJUEIzX0lOX1BVLCBQQjJfSU5fUFUsIFBCMV9JTl9QVSwgUEIwX0lOX1BVLAorCVBDN19JTl9QVSwgUEM2X0lOX1BVLCBQQzVfSU5fUFUsIFBDNF9JTl9QVSwKKwlQQzNfSU5fUFUsIFBDMl9JTl9QVSwgUEMxX0lOX1BVLCBQQzBfSU5fUFUsCisJUEQ3X0lOX1BVLCBQRDZfSU5fUFUsIFBENV9JTl9QVSwgUEQ0X0lOX1BVLAorCVBEM19JTl9QVSwgUEQyX0lOX1BVLCBQRDFfSU5fUFUsIFBEMF9JTl9QVSwKKwlQRTdfSU5fUFUsIFBFNl9JTl9QVSwKKwlQRjdfSU5fUFUsIFBGNl9JTl9QVSwgUEY1X0lOX1BVLCBQRjRfSU5fUFUsCisJUEYzX0lOX1BVLCBQRjJfSU5fUFUsIFBGMV9JTl9QVSwgUEYwX0lOX1BVLAorCVBHN19JTl9QVSwgUEc2X0lOX1BVLCBQRzVfSU5fUFUsCisJUEg3X0lOX1BVLCBQSDZfSU5fUFUsIFBINV9JTl9QVSwgUEg0X0lOX1BVLAorCVBIM19JTl9QVSwgUEgyX0lOX1BVLCBQSDFfSU5fUFUsIFBIMF9JTl9QVSwKKwlQSjdfSU5fUFUsIFBKNl9JTl9QVSwgUEo1X0lOX1BVLCBQSjRfSU5fUFUsCisJUEozX0lOX1BVLCBQSjJfSU5fUFUsIFBKMV9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUEE3X09VVCwgUEE2X09VVCwgUEE1X09VVCwgUEE0X09VVCwKKwlQQTNfT1VULCBQQTJfT1VULCBQQTFfT1VULCBQQTBfT1VULAorCVBCN19PVVQsIFBCNl9PVVQsIFBCNV9PVVQsIFBCNF9PVVQsCisJUEIzX09VVCwgUEIyX09VVCwgUEIxX09VVCwgUEIwX09VVCwKKwlQQzdfT1VULCBQQzZfT1VULCBQQzVfT1VULCBQQzRfT1VULAorCVBDM19PVVQsIFBDMl9PVVQsIFBDMV9PVVQsIFBDMF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFN19PVVQsIFBFNl9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBHN19PVVQsIFBHNl9PVVQsIFBHNV9PVVQsCisJUEg3X09VVCwgUEg2X09VVCwgUEg1X09VVCwgUEg0X09VVCwKKwlQSDNfT1VULCBQSDJfT1VULCBQSDFfT1VULCBQSDBfT1VULAorCVBKN19PVVQsIFBKNl9PVVQsIFBKNV9PVVQsIFBKNF9PVVQsCisJUEozX09VVCwgUEoyX09VVCwgUEoxX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQQTdfRk4sIFBBNl9GTiwgUEE1X0ZOLCBQQTRfRk4sCisJUEEzX0ZOLCBQQTJfRk4sIFBBMV9GTiwgUEEwX0ZOLAorCVBCN19GTiwgUEI2X0ZOLCBQQjVfRk4sIFBCNF9GTiwKKwlQQjNfRk4sIFBCMl9GTiwgUEIxX0ZOLCBQQjBfRk4sCisJUEM3X0ZOLCBQQzZfRk4sIFBDNV9GTiwgUEM0X0ZOLAorCVBDM19GTiwgUEMyX0ZOLCBQQzFfRk4sIFBDMF9GTiwKKwlQRDdfRk4sIFBENl9GTiwgUEQ1X0ZOLCBQRDRfRk4sCisJUEQzX0ZOLCBQRDJfRk4sIFBEMV9GTiwgUEQwX0ZOLAorCVBFN19GTiwgUEU2X0ZOLAorCVBGN19GTiwgUEY2X0ZOLCBQRjVfRk4sIFBGNF9GTiwKKwlQRjNfRk4sIFBGMl9GTiwgUEYxX0ZOLCBQRjBfRk4sCisJUEc3X0ZOLCBQRzZfRk4sIFBHNV9GTiwKKwlQSDdfRk4sIFBINl9GTiwgUEg1X0ZOLCBQSDRfRk4sCisJUEgzX0ZOLCBQSDJfRk4sIFBIMV9GTiwgUEgwX0ZOLAorCVBKN19GTiwgUEo2X0ZOLCBQSjVfRk4sIFBKNF9GTiwKKwlQSjNfRk4sIFBKMl9GTiwgUEoxX0ZOLAorCVAxTVNFTDE0XzAsIFAxTVNFTDE0XzEsCisJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCVAxTVNFTDExXzAsIFAxTVNFTDExXzEsCisJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwlQMU1TRUw5XzAsIFAxTVNFTDlfMSwKKwlQMU1TRUw4XzAsIFAxTVNFTDhfMSwKKwlQMU1TRUw3XzAsIFAxTVNFTDdfMSwKKwlQMU1TRUw2XzAsIFAxTVNFTDZfMSwKKwlQMU1TRUw1XzAsIFAxTVNFTDVfMSwKKwlQMU1TRUw0XzAsIFAxTVNFTDRfMSwKKwlQMU1TRUwzXzAsIFAxTVNFTDNfMSwKKwlQMU1TRUwyXzAsIFAxTVNFTDJfMSwKKwlQMU1TRUwxXzAsIFAxTVNFTDFfMSwKKwlQMU1TRUwwXzAsIFAxTVNFTDBfMSwKKworCVAyTVNFTDE1XzAsIFAyTVNFTDE1XzEsCisJUDJNU0VMMTRfMCwgUDJNU0VMMTRfMSwKKwlQMk1TRUwxM18wLCBQMk1TRUwxM18xLAorCVAyTVNFTDEyXzAsIFAyTVNFTDEyXzEsCisJUDJNU0VMMTFfMCwgUDJNU0VMMTFfMSwKKwlQMk1TRUwxMF8wLCBQMk1TRUwxMF8xLAorCVAyTVNFTDlfMCwgUDJNU0VMOV8xLAorCVAyTVNFTDhfMCwgUDJNU0VMOF8xLAorCVAyTVNFTDdfMCwgUDJNU0VMN18xLAorCVAyTVNFTDZfMCwgUDJNU0VMNl8xLAorCVAyTVNFTDVfMCwgUDJNU0VMNV8xLAorCVAyTVNFTDRfMCwgUDJNU0VMNF8xLAorCVAyTVNFTDNfMCwgUDJNU0VMM18xLAorCVAyTVNFTDJfMCwgUDJNU0VMMl8xLAorCVAyTVNFTDFfMCwgUDJNU0VMMV8xLAorCVAyTVNFTDBfMCwgUDJNU0VMMF8xLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlDREVfTUFSSywKKwlFVEhfTUFHSUNfTUFSSywKKwlESVNQX01BUkssCisJRVRIX0xJTktfTUFSSywKKwlEUjVfTUFSSywKKwlFVEhfVFhfRVJfTUFSSywKKwlEUjRfTUFSSywKKwlFVEhfVFhfRU5fTUFSSywKKwlEUjNfTUFSSywKKwlFVEhfVFhEM19NQVJLLAorCURSMl9NQVJLLAorCUVUSF9UWEQyX01BUkssCisJRFIxX01BUkssCisJRVRIX1RYRDFfTUFSSywKKwlEUjBfTUFSSywKKwlFVEhfVFhEMF9NQVJLLAorCisJVlNZTkNfTUFSSywKKwlIU1BJX0NMS19NQVJLLAorCU9EREZfTUFSSywKKwlIU1BJX0NTX01BUkssCisJREc1X01BUkssCisJRVRIX01ESU9fTUFSSywKKwlERzRfTUFSSywKKwlFVEhfUlhfQ0xLX01BUkssCisJREczX01BUkssCisJRVRIX01EQ19NQVJLLAorCURHMl9NQVJLLAorCUVUSF9DT0xfTUFSSywKKwlERzFfTUFSSywKKwlFVEhfVFhfQ0xLX01BUkssCisJREcwX01BUkssCisJRVRIX0NSU19NQVJLLAorCisJRENMS0lOX01BUkssCisJSFNQSV9SWF9NQVJLLAorCUhTWU5DX01BUkssCisJSFNQSV9UWF9NQVJLLAorCURCNV9NQVJLLAorCUVUSF9SWEQzX01BUkssCisJREI0X01BUkssCisJRVRIX1JYRDJfTUFSSywKKwlEQjNfTUFSSywKKwlFVEhfUlhEMV9NQVJLLAorCURCMl9NQVJLLAorCUVUSF9SWEQwX01BUkssCisJREIxX01BUkssCisJRVRIX1JYX0RWX01BUkssCisJREIwX01BUkssCisJRVRIX1JYX0VSX01BUkssCisKKwlEQ0xLT1VUX01BUkssCisJU0NJRjFfU0xLX01BUkssCisJU0NJRjFfUlhEX01BUkssCisJU0NJRjFfVFhEX01BUkssCisJREFDSzFfTUFSSywKKwlCQUNLX01BUkssCisJRkFMRV9NQVJLLAorCURBQ0swX01BUkssCisJRkNMRV9NQVJLLAorCURSRVExX01BUkssCisJQlJFUV9NQVJLLAorCVVTQl9PVkMxX01BUkssCisJRFJFUTBfTUFSSywKKwlVU0JfT1ZDMF9NQVJLLAorCisJVVNCX1BFTkMxX01BUkssCisJVVNCX1BFTkMwX01BUkssCisKKwlIQUMxX1NET1VUX01BUkssCisJU1NJMV9TREFUQV9NQVJLLAorCVNESUYxQ01EX01BUkssCisJSEFDMV9TRElOX01BUkssCisJU1NJMV9TQ0tfTUFSSywKKwlTRElGMUNEX01BUkssCisJSEFDMV9TWU5DX01BUkssCisJU1NJMV9XU19NQVJLLAorCVNESUYxV1BfTUFSSywKKwlIQUMxX0JJVENMS19NQVJLLAorCVNTSTFfQ0xLX01BUkssCisJU0RJRjFDTEtfTUFSSywKKwlIQUMwX1NET1VUX01BUkssCisJU1NJMF9TREFUQV9NQVJLLAorCVNESUYxRDNfTUFSSywKKwlIQUMwX1NESU5fTUFSSywKKwlTU0kwX1NDS19NQVJLLAorCVNESUYxRDJfTUFSSywKKwlIQUMwX1NZTkNfTUFSSywKKwlTU0kwX1dTX01BUkssCisJU0RJRjFEMV9NQVJLLAorCUhBQzBfQklUQ0xLX01BUkssCisJU1NJMF9DTEtfTUFSSywKKwlTRElGMUQwX01BUkssCisKKwlTQ0lGM19TQ0tfTUFSSywKKwlTU0kyX1NEQVRBX01BUkssCisJU0NJRjNfUlhEX01BUkssCisJVENMS19NQVJLLAorCVNTSTJfU0NLX01BUkssCisJU0NJRjNfVFhEX01BUkssCisJSEFDX1JFU19NQVJLLAorCVNTSTJfV1NfTUFSSywKKworCURBQ0szX01BUkssCisJU0RJRjBDTURfTUFSSywKKwlEQUNLMl9NQVJLLAorCVNESUYwQ0RfTUFSSywKKwlEUkVRM19NQVJLLAorCVNESUYwV1BfTUFSSywKKwlTQ0lGMF9DVFNfTUFSSywKKwlEUkVRMl9NQVJLLAorCVNESUYwQ0xLX01BUkssCisJU0NJRjBfUlRTX01BUkssCisJSVJMN19NQVJLLAorCVNESUYwRDNfTUFSSywKKwlTQ0lGMF9TQ0tfTUFSSywKKwlJUkw2X01BUkssCisJU0RJRjBEMl9NQVJLLAorCVNDSUYwX1JYRF9NQVJLLAorCUlSTDVfTUFSSywKKwlTRElGMEQxX01BUkssCisJU0NJRjBfVFhEX01BUkssCisJSVJMNF9NQVJLLAorCVNESUYwRDBfTUFSSywKKworCVNDSUY1X1NDS19NQVJLLAorCUZSQl9NQVJLLAorCVNDSUY1X1JYRF9NQVJLLAorCUlPSVMxNl9NQVJLLAorCVNDSUY1X1RYRF9NQVJLLAorCUNFMkJfTUFSSywKKwlEUkFLM19NQVJLLAorCUNFMkFfTUFSSywKKwlTQ0lGNF9TQ0tfTUFSSywKKwlEUkFLMl9NQVJLLAorCVNTSTNfV1NfTUFSSywKKwlTQ0lGNF9SWERfTUFSSywKKwlEUkFLMV9NQVJLLAorCVNTSTNfU0RBVEFfTUFSSywKKwlGU1RBVFVTX01BUkssCisJU0NJRjRfVFhEX01BUkssCisJRFJBSzBfTUFSSywKKwlTU0kzX1NDS19NQVJLLAorCUZTRV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSBHUElPICovCisJUElOTVVYX0RBVEEoUEE3X0RBVEEsIFBBN19JTiwgUEE3X09VVCwgUEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTZfREFUQSwgUEE2X0lOLCBQQTZfT1VULCBQQTZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4sIFBBNV9PVVQsIFBBNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE0X0RBVEEsIFBBNF9JTiwgUEE0X09VVCwgUEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTNfREFUQSwgUEEzX0lOLCBQQTNfT1VULCBQQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4sIFBBMl9PVVQsIFBBMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEExX0RBVEEsIFBBMV9JTiwgUEExX09VVCwgUEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTBfREFUQSwgUEEwX0lOLCBQQTBfT1VULCBQQTBfSU5fUFUpLAorCisJLyogUEIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBCN19EQVRBLCBQQjdfSU4sIFBCN19PVVQsIFBCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNl9JTiwgUEI2X09VVCwgUEI2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjVfREFUQSwgUEI1X0lOLCBQQjVfT1VULCBQQjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNF9EQVRBLCBQQjRfSU4sIFBCNF9PVVQsIFBCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM19JTiwgUEIzX09VVCwgUEIzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjJfREFUQSwgUEIyX0lOLCBQQjJfT1VULCBQQjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMV9EQVRBLCBQQjFfSU4sIFBCMV9PVVQsIFBCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCMF9JTiwgUEIwX09VVCwgUEIwX0lOX1BVKSwKKworCS8qIFBDIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQzdfREFUQSwgUEM3X0lOLCBQQzdfT1VULCBQQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNl9EQVRBLCBQQzZfSU4sIFBDNl9PVVQsIFBDNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEM1X0RBVEEsIFBDNV9JTiwgUEM1X09VVCwgUEM1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzRfREFUQSwgUEM0X0lOLCBQQzRfT1VULCBQQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNfSU4sIFBDM19PVVQsIFBDM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEMyX0RBVEEsIFBDMl9JTiwgUEMyX09VVCwgUEMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzFfREFUQSwgUEMxX0lOLCBQQzFfT1VULCBQQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMF9EQVRBLCBQQzBfSU4sIFBDMF9PVVQsIFBDMF9JTl9QVSksCisKKwkvKiBQRCBHUElPICovCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN19JTiwgUEQ3X09VVCwgUEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2X0lOLCBQRDZfT1VULCBQRDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVfSU4sIFBENV9PVVQsIFBENV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENF9JTiwgUEQ0X09VVCwgUEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDNfREFUQSwgUEQzX0lOLCBQRDNfT1VULCBQRDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMl9EQVRBLCBQRDJfSU4sIFBEMl9PVVQsIFBEMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQxX0RBVEEsIFBEMV9JTiwgUEQxX09VVCwgUEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDBfREFUQSwgUEQwX0lOLCBQRDBfT1VULCBQRDBfSU5fUFUpLAorCisJLyogUEUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBFN19EQVRBLCBQRTdfSU4sIFBFN19PVVQsIFBFN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEU2X0RBVEEsIFBFNl9JTiwgUEU2X09VVCwgUEU2X0lOX1BVKSwKKworCS8qIFBGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRjdfREFUQSwgUEY3X0lOLCBQRjdfT1VULCBQRjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNl9EQVRBLCBQRjZfSU4sIFBGNl9PVVQsIFBGNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEY1X0RBVEEsIFBGNV9JTiwgUEY1X09VVCwgUEY1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjRfREFUQSwgUEY0X0lOLCBQRjRfT1VULCBQRjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGM19EQVRBLCBQRjNfSU4sIFBGM19PVVQsIFBGM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEYyX0RBVEEsIFBGMl9JTiwgUEYyX09VVCwgUEYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjFfREFUQSwgUEYxX0lOLCBQRjFfT1VULCBQRjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMF9EQVRBLCBQRjBfSU4sIFBGMF9PVVQsIFBGMF9JTl9QVSksCisKKwkvKiBQRyBHUElPICovCisJUElOTVVYX0RBVEEoUEc3X0RBVEEsIFBHN19JTiwgUEc3X09VVCwgUEc3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRzZfREFUQSwgUEc2X0lOLCBQRzZfT1VULCBQRzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNV9EQVRBLCBQRzVfSU4sIFBHNV9PVVQsIFBHNV9JTl9QVSksCisKKwkvKiBQSCBHUElPICovCisJUElOTVVYX0RBVEEoUEg3X0RBVEEsIFBIN19JTiwgUEg3X09VVCwgUEg3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDZfREFUQSwgUEg2X0lOLCBQSDZfT1VULCBQSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINV9EQVRBLCBQSDVfSU4sIFBINV9PVVQsIFBINV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg0X0RBVEEsIFBINF9JTiwgUEg0X09VVCwgUEg0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDNfREFUQSwgUEgzX0lOLCBQSDNfT1VULCBQSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMl9EQVRBLCBQSDJfSU4sIFBIMl9PVVQsIFBIMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEgxX0RBVEEsIFBIMV9JTiwgUEgxX09VVCwgUEgxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDBfREFUQSwgUEgwX0lOLCBQSDBfT1VULCBQSDBfSU5fUFUpLAorCisJLyogUEogR1BJTyAqLworCVBJTk1VWF9EQVRBKFBKN19EQVRBLCBQSjdfSU4sIFBKN19PVVQsIFBKN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEo2X0RBVEEsIFBKNl9JTiwgUEo2X09VVCwgUEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjVfREFUQSwgUEo1X0lOLCBQSjVfT1VULCBQSjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNF9EQVRBLCBQSjRfSU4sIFBKNF9PVVQsIFBKNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEozX0RBVEEsIFBKM19JTiwgUEozX09VVCwgUEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjJfREFUQSwgUEoyX0lOLCBQSjJfT1VULCBQSjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMV9EQVRBLCBQSjFfSU4sIFBKMV9PVVQsIFBKMV9JTl9QVSksCisKKwkvKiBQQSBGTiAqLworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVBJTk1VWF9EQVRBKENERV9NQVJLLAkJUDFNU0VMMl8wLCBQQTdfRk4pLAorCVBJTk1VWF9EQVRBKERJU1BfTUFSSywJCVAxTVNFTDJfMCwgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShEUjVfTUFSSywJCVAxTVNFTDJfMCwgUEE1X0ZOKSwKKwlQSU5NVVhfREFUQShEUjRfTUFSSywJCVAxTVNFTDJfMCwgUEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEUjNfTUFSSywJCVAxTVNFTDJfMCwgUEEzX0ZOKSwKKwlQSU5NVVhfREFUQShEUjJfTUFSSywJCVAxTVNFTDJfMCwgUEEyX0ZOKSwKKwlQSU5NVVhfREFUQShEUjFfTUFSSywJCVAxTVNFTDJfMCwgUEExX0ZOKSwKKwlQSU5NVVhfREFUQShEUjBfTUFSSywJCVAxTVNFTDJfMCwgUEEwX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTUFHSUNfTUFSSywJUDFNU0VMMl8xLCBQQTdfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9MSU5LX01BUkssCVAxTVNFTDJfMSwgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhfRVJfTUFSSywJUDFNU0VMMl8xLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9FTl9NQVJLLAlQMU1TRUwyXzEsIFBBNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDNfTUFSSywJUDFNU0VMMl8xLCBQQTNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQyX01BUkssCVAxTVNFTDJfMSwgUEEyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMV9NQVJLLAlQMU1TRUwyXzEsIFBBMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDBfTUFSSywJUDFNU0VMMl8xLCBQQTBfRk4pLAorCisJLyogUEIgRk4gKi8KKwlQSU5NVVhfREFUQShWU1lOQ19NQVJLLAkJUDFNU0VMM18wLCBQQjdfRk4pLAorCVBJTk1VWF9EQVRBKE9EREZfTUFSSywJCVAxTVNFTDNfMCwgUEI2X0ZOKSwKKwlQSU5NVVhfREFUQShERzVfTUFSSywJCVAxTVNFTDJfMCwgUEI1X0ZOKSwKKwlQSU5NVVhfREFUQShERzRfTUFSSywJCVAxTVNFTDJfMCwgUEI0X0ZOKSwKKwlQSU5NVVhfREFUQShERzNfTUFSSywJCVAxTVNFTDJfMCwgUEIzX0ZOKSwKKwlQSU5NVVhfREFUQShERzJfTUFSSywJCVAxTVNFTDJfMCwgUEIyX0ZOKSwKKwlQSU5NVVhfREFUQShERzFfTUFSSywJCVAxTVNFTDJfMCwgUEIxX0ZOKSwKKwlQSU5NVVhfREFUQShERzBfTUFSSywJCVAxTVNFTDJfMCwgUEIwX0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NMS19NQVJLLAlQMU1TRUwzXzEsIFBCN19GTiksCisJUElOTVVYX0RBVEEoSFNQSV9DU19NQVJLLAlQMU1TRUwzXzEsIFBCNl9GTiksCisJUElOTVVYX0RBVEEoRVRIX01ESU9fTUFSSywJUDFNU0VMMl8xLCBQQjVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9DTEtfTUFSSywJUDFNU0VMMl8xLCBQQjRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NRENfTUFSSywJUDFNU0VMMl8xLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9DT0xfTUFSSywJUDFNU0VMMl8xLCBQQjJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9DTEtfTUFSSywJUDFNU0VMMl8xLCBQQjFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9DUlNfTUFSSywJUDFNU0VMMl8xLCBQQjBfRk4pLAorCisJLyogUEMgRk4gKi8KKwlQSU5NVVhfREFUQShEQ0xLSU5fTUFSSywJUDFNU0VMM18wLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEhTWU5DX01BUkssCQlQMU1TRUwzXzAsIFBDNl9GTiksCisJUElOTVVYX0RBVEEoREI1X01BUkssCQlQMU1TRUwyXzAsIFBDNV9GTiksCisJUElOTVVYX0RBVEEoREI0X01BUkssCQlQMU1TRUwyXzAsIFBDNF9GTiksCisJUElOTVVYX0RBVEEoREIzX01BUkssCQlQMU1TRUwyXzAsIFBDM19GTiksCisJUElOTVVYX0RBVEEoREIyX01BUkssCQlQMU1TRUwyXzAsIFBDMl9GTiksCisJUElOTVVYX0RBVEEoREIxX01BUkssCQlQMU1TRUwyXzAsIFBDMV9GTiksCisJUElOTVVYX0RBVEEoREIwX01BUkssCQlQMU1TRUwyXzAsIFBDMF9GTiksCisKKwlQSU5NVVhfREFUQShIU1BJX1JYX01BUkssCVAxTVNFTDNfMSwgUEM3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX1RYX01BUkssCVAxTVNFTDNfMSwgUEM2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEM19NQVJLLAlQMU1TRUwyXzEsIFBDNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDJfTUFSSywJUDFNU0VMMl8xLCBQQzRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQxX01BUkssCVAxTVNFTDJfMSwgUEMzX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMF9NQVJLLAlQMU1TRUwyXzEsIFBDMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0RWX01BUkssCVAxTVNFTDJfMSwgUEMxX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfRVJfTUFSSywJUDFNU0VMMl8xLCBQQzBfRk4pLAorCisJLyogUEQgRk4gKi8KKwlQSU5NVVhfREFUQShEQ0xLT1VUX01BUkssCVBEN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0xLX01BUkssCVBENl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssCVBENV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfVFhEX01BUkssCVBENF9GTiksCisJUElOTVVYX0RBVEEoREFDSzFfTUFSSywJCVAxTVNFTDEzXzEsIFAxTVNFTDEyXzAsIFBEM19GTiksCisJUElOTVVYX0RBVEEoQkFDS19NQVJLLAkJUDFNU0VMMTNfMCwgUDFNU0VMMTJfMSwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShGQUxFX01BUkssCQlQMU1TRUwxM18wLCBQMU1TRUwxMl8wLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssCQlQMU1TRUwxNF8xLCBQRDJfRk4pLAorCVBJTk1VWF9EQVRBKEZDTEVfTUFSSywJCVAxTVNFTDE0XzAsIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRFJFUTFfTUFSSywJCVAxTVNFTDEwXzAsIFAxTVNFTDlfMSwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShCUkVRX01BUkssCQlQMU1TRUwxMF8xLCBQMU1TRUw5XzAsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoVVNCX09WQzFfTUFSSywJUDFNU0VMMTBfMCwgUDFNU0VMOV8wLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssCQlQMU1TRUwxMV8xLCBQRDBfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9PVkMwX01BUkssCVAxTVNFTDExXzAsIFBEMF9GTiksCisKKwkvKiBQRSBGTiAqLworCVBJTk1VWF9EQVRBKFVTQl9QRU5DMV9NQVJLLAlQRTdfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9QRU5DMF9NQVJLLAlQRTZfRk4pLAorCisJLyogUEYgRk4gKi8KKwlQSU5NVVhfREFUQShIQUMxX1NET1VUX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGN19GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TRElOX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNl9GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TWU5DX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoSEFDMV9CSVRDTEtfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NET1VUX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGM19GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TRElOX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TWU5DX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9CSVRDTEtfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYwX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1NEQVRBX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGN19GTiksCisJUElOTVVYX0RBVEEoU1NJMV9TQ0tfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1dTX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoU1NJMV9DTEtfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NEQVRBX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGM19GTiksCisJUElOTVVYX0RBVEEoU1NJMF9TQ0tfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1dTX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoU1NJMF9DTEtfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYwX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNNRF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjdfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ0RfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMVdQX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDTEtfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQzX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGM19GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMl9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDFfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQwX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMF9GTiksCisKKwkvKiBQRyBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUYzX1NDS19NQVJLLAlQMU1TRUw4XzAsIFBHN19GTiksCisJUElOTVVYX0RBVEEoU1NJMl9TREFUQV9NQVJLLAlQMU1TRUw4XzEsIFBHN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUlhEX01BUkssCVAxTVNFTDdfMCwgUDFNU0VMNl8wLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfU0NLX01BUkssCVAxTVNFTDdfMSwgUDFNU0VMNl8wLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFRDTEtfTUFSSywJCVAxTVNFTDdfMCwgUDFNU0VMNl8xLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1RYRF9NQVJLLAlQMU1TRUw1XzAsIFAxTVNFTDRfMCwgUEc1X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1dTX01BUkssCVAxTVNFTDVfMSwgUDFNU0VMNF8wLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKEhBQ19SRVNfTUFSSywJUDFNU0VMNV8wLCBQMU1TRUw0XzEsIFBHNV9GTiksCisKKwkvKiBQSCBGTiAqLworCVBJTk1VWF9EQVRBKERBQ0szX01BUkssCQlQMk1TRUw0XzAsIFBIN19GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDTURfTUFSSywJUDJNU0VMNF8xLCBQSDdfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0syX01BUkssCQlQMk1TRUw0XzAsIFBINl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDRF9NQVJLLAlQMk1TRUw0XzEsIFBINl9GTiksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywJCVAyTVNFTDRfMCwgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMFdQX01BUkssCVAyTVNFTDRfMSwgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLAkJUDJNU0VMM18wLCBQMk1TRUwyXzEsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDTEtfTUFSSywJUDJNU0VMM18xLCBQMk1TRUwyXzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssCVAyTVNFTDNfMCwgUDJNU0VMMl8wLCBQSDRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDNfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKElSTDdfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDJfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKElSTDZfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDFfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKElSTDVfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDBfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfVFhEX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDBfRk4pLAorCVBJTk1VWF9EQVRBKElSTDRfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDBfRk4pLAorCisJLyogUEogRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGNV9TQ0tfTUFSSywJUDJNU0VMMTFfMSwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywJCVAyTVNFTDExXzAsIFBKN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUlhEX01BUkssCVAyTVNFTDEwXzAsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssCVAyTVNFTDEwXzEsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfVFhEX01BUkssCVAyTVNFTDEwXzAsIFBKNV9GTiksCisJUElOTVVYX0RBVEEoQ0UyQl9NQVJLLAkJUDJNU0VMMTBfMSwgUEo1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLM19NQVJLLAkJUDJNU0VMN18wLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKENFMkFfTUFSSywJCVAyTVNFTDdfMSwgUEo0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9TQ0tfTUFSSywJUDJNU0VMOV8wLCBQMk1TRUw4XzAsIFBKM19GTiksCisJUElOTVVYX0RBVEEoRFJBSzJfTUFSSywJCVAyTVNFTDlfMCwgUDJNU0VMOF8xLCBQSjNfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfV1NfTUFSSywJUDJNU0VMOV8xLCBQMk1TRUw4XzAsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUlhEX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8wLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKERSQUsxX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShGU1RBVFVTX01BUkssCVAyTVNFTDZfMCwgUDJNU0VMNV8wLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfU0RBVEFfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzEsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfVFhEX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8wLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKERSQUswX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMSwgUEoxX0ZOKSwKKwlQSU5NVVhfREFUQShGU0VfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8wLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfU0NLX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8xLCBQSjFfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQQSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEE3LCBQQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTYsIFBBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNSwgUEE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE0LCBQQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTMsIFBBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMiwgUEEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEExLCBQQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTAsIFBBMF9EQVRBKSwKKworCS8qIFBCICovCisJUElOTVVYX0dQSU8oR1BJT19QQjcsIFBCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNiwgUEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI1LCBQQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjQsIFBCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMywgUEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIyLCBQQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEsIFBCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMCwgUEIwX0RBVEEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BDNywgUEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM2LCBQQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzUsIFBDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNCwgUEM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMzLCBQQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzIsIFBDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMSwgUEMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMwLCBQQzBfREFUQSksCisKKwkvKiBQRCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEQ3LCBQRDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDYsIFBENl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENSwgUEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ0LCBQRDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDMsIFBEM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMiwgUEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxLCBQRDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDAsIFBEMF9EQVRBKSwKKworCS8qIFBFICovCisJUElOTVVYX0dQSU8oR1BJT19QRTUsIFBFN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNCwgUEU2X0RBVEEpLAorCisJLyogUEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEc3LCBQRzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzYsIFBHNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNSwgUEc1X0RBVEEpLAorCisJLyogUEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BINywgUEg3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg2LCBQSDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDUsIFBINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINCwgUEg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgzLCBQSDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDIsIFBIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMSwgUEgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgwLCBQSDBfREFUQSksCisKKwkvKiBQSiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEo3LCBQSjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjYsIFBKNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNSwgUEo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo0LCBQSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjMsIFBKM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMiwgUEoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEoxLCBQSjFfREFUQSksCisKKwkvKiBGTiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0RFLAkJQ0RFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01BR0lDLAkJRVRIX01BR0lDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRElTUCwJCURJU1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTElOSywJCUVUSF9MSU5LX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFI1LAkJRFI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0VSLAkJRVRIX1RYX0VSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFI0LAkJRFI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0VOLAkJRVRIX1RYX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIzLAkJRFIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDMsCQlFVEhfVFhEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMiwJCURSMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQyLAkJRVRIX1RYRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjEsCQlEUjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMSwJCUVUSF9UWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIwLAkJRFIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDAsCQlFVEhfVFhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZTWU5DLAkJVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NMSywJCUhTUElfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fT0RERiwJCU9EREZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NTLAkJSFNQSV9DU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHNSwJCURHNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NRElPLAkJRVRIX01ESU9fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzQsCQlERzRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfQ0xLLAkJRVRIX1JYX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMywJCURHM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NREMsCQlFVEhfTURDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcyLAkJREcyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0NPTCwJCUVUSF9DT0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzEsCQlERzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfQ0xLLAkJRVRIX1RYX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMCwJCURHMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9DUlMsCQlFVEhfQ1JTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRENMS0lOLAkJRENMS0lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9SWCwJCUhTUElfUlhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1lOQywJCUhTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9UWCwJCUhTUElfVFhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjUsCQlEQjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMywJCUVUSF9SWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREI0LAkJREI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDIsCQlFVEhfUlhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMywJCURCM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQxLAkJRVRIX1JYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjIsCQlEQjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMCwJCUVUSF9SWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIxLAkJREIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0RWLAkJRVRIX1JYX0RWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIwLAkJREIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0VSLAkJRVRIX1JYX0VSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRENMS09VVCwJCURDTEtPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9TTEssCQlTQ0lGMV9TTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SWEQsCQlTQ0lGMV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsCQlTQ0lGMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwJCURBQ0sxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQkFDSywJCUJBQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQUxFLAkJRkFMRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swLAkJREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0xFLAkJRkNMRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExLAkJRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUkVRLAkJQlJFUV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9PVkMxLAkJVVNCX09WQzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwJCURSRVEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX09WQzAsCQlVU0JfT1ZDMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9QRU5DMSwJCVVTQl9QRU5DMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9QRU5DMCwJCVVTQl9QRU5DMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfU0RPVVQsCQlIQUMxX1NET1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9TREFUQSwJCVNTSTFfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNNRCwJCVNESUYxQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRElOLAkJSEFDMV9TRElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9TQ0ssCQlTU0kxX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ0QsCQlTRElGMUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TWU5DLAkJSEFDMV9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9XUywJCVNTSTFfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMVdQLAkJU0RJRjFXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfQklUQ0xLLAlIQUMxX0JJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfQ0xLLAkJU1NJMV9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNMSywJCVNESUYxQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRE9VVCwJCUhBQzBfU0RPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1NEQVRBLAkJU1NJMF9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDMsCQlTRElGMUQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRElOLAkJSEFDMF9TRElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9TQ0ssCQlTU0kwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDIsCQlTRElGMUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TWU5DLAkJSEFDMF9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9XUywJCVNTSTBfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQxLAkJU0RJRjFEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzBfQklUQ0xLLAlIQUMwX0JJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfQ0xLLAkJU1NJMF9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQwLAkJU0RJRjFEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1NDSywJCVNDSUYzX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfU0RBVEEsCQlTU0kyX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUlhELAkJU0NJRjNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMSywJCVRDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1NDSywJCVNTSTJfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfVFhELAkJU0NJRjNfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDX1JFUywJCUhBQ19SRVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1dTLAkJU1NJMl9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLAkJREFDSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMENNRCwJCVNESUYwQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzIsCQlEQUNLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ0QsCQlTRElGMENEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTMsCQlEUkVRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwV1AsCQlTRElGMFdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLAkJU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTIsCQlEUkVRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ0xLLAkJU0RJRjBDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SVFMsCQlTQ0lGMF9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw3LAkJSVJMN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDMsCQlTRElGMEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfU0NLLAkJU0NJRjBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNiwJCUlSTDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQyLAkJU0RJRjBEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JYRCwJCVNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDUsCQlJUkw1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMSwJCVNESUYwRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9UWEQsCQlTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw0LAkJSVJMNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDAsCQlTRElGMEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfU0NLLAkJU0NJRjVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlJCLAkJRlJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUlhELAkJU0NJRjVfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LAkJSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfVFhELAkJU0NJRjVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwJCUNFMkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMywJCURSQUszX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQSwJCUNFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9TQ0ssCQlTQ0lGNF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMiwJCURSQUsyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19XUywJCVNTSTNfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9SWEQsCQlTQ0lGNF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMSwJCURSQUsxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19TREFUQSwJCVNTSTNfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU1RBVFVTLAkJRlNUQVRVU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1RYRCwJCVNDSUY0X1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUswLAkJRFJBSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1NDSywJCVNTSTNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNFLAkJRlNFX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhmZmNjMDAwMCwgMTYsIDIpIHsKKwkJUEE3X0ZOLCBQQTdfT1VULCBQQTdfSU4sIFBBN19JTl9QVSwKKwkJUEE2X0ZOLCBQQTZfT1VULCBQQTZfSU4sIFBBNl9JTl9QVSwKKwkJUEE1X0ZOLCBQQTVfT1VULCBQQTVfSU4sIFBBNV9JTl9QVSwKKwkJUEE0X0ZOLCBQQTRfT1VULCBQQTRfSU4sIFBBNF9JTl9QVSwKKwkJUEEzX0ZOLCBQQTNfT1VULCBQQTNfSU4sIFBBM19JTl9QVSwKKwkJUEEyX0ZOLCBQQTJfT1VULCBQQTJfSU4sIFBBMl9JTl9QVSwKKwkJUEExX0ZOLCBQQTFfT1VULCBQQTFfSU4sIFBBMV9JTl9QVSwKKwkJUEEwX0ZOLCBQQTBfT1VULCBQQTBfSU4sIFBBMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSIiwgMHhmZmNjMDAwMiwgMTYsIDIpIHsKKwkJUEI3X0ZOLCBQQjdfT1VULCBQQjdfSU4sIFBCN19JTl9QVSwKKwkJUEI2X0ZOLCBQQjZfT1VULCBQQjZfSU4sIFBCNl9JTl9QVSwKKwkJUEI1X0ZOLCBQQjVfT1VULCBQQjVfSU4sIFBCNV9JTl9QVSwKKwkJUEI0X0ZOLCBQQjRfT1VULCBQQjRfSU4sIFBCNF9JTl9QVSwKKwkJUEIzX0ZOLCBQQjNfT1VULCBQQjNfSU4sIFBCM19JTl9QVSwKKwkJUEIyX0ZOLCBQQjJfT1VULCBQQjJfSU4sIFBCMl9JTl9QVSwKKwkJUEIxX0ZOLCBQQjFfT1VULCBQQjFfSU4sIFBCMV9JTl9QVSwKKwkJUEIwX0ZOLCBQQjBfT1VULCBQQjBfSU4sIFBCMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhmZmNjMDAwNCwgMTYsIDIpIHsKKwkJUEM3X0ZOLCBQQzdfT1VULCBQQzdfSU4sIFBDN19JTl9QVSwKKwkJUEM2X0ZOLCBQQzZfT1VULCBQQzZfSU4sIFBDNl9JTl9QVSwKKwkJUEM1X0ZOLCBQQzVfT1VULCBQQzVfSU4sIFBDNV9JTl9QVSwKKwkJUEM0X0ZOLCBQQzRfT1VULCBQQzRfSU4sIFBDNF9JTl9QVSwKKwkJUEMzX0ZOLCBQQzNfT1VULCBQQzNfSU4sIFBDM19JTl9QVSwKKwkJUEMyX0ZOLCBQQzJfT1VULCBQQzJfSU4sIFBDMl9JTl9QVSwKKwkJUEMxX0ZOLCBQQzFfT1VULCBQQzFfSU4sIFBDMV9JTl9QVSwKKwkJUEMwX0ZOLCBQQzBfT1VULCBQQzBfSU4sIFBDMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhmZmNjMDAwNiwgMTYsIDIpIHsKKwkJUEQ3X0ZOLCBQRDdfT1VULCBQRDdfSU4sIFBEN19JTl9QVSwKKwkJUEQ2X0ZOLCBQRDZfT1VULCBQRDZfSU4sIFBENl9JTl9QVSwKKwkJUEQ1X0ZOLCBQRDVfT1VULCBQRDVfSU4sIFBENV9JTl9QVSwKKwkJUEQ0X0ZOLCBQRDRfT1VULCBQRDRfSU4sIFBENF9JTl9QVSwKKwkJUEQzX0ZOLCBQRDNfT1VULCBQRDNfSU4sIFBEM19JTl9QVSwKKwkJUEQyX0ZOLCBQRDJfT1VULCBQRDJfSU4sIFBEMl9JTl9QVSwKKwkJUEQxX0ZOLCBQRDFfT1VULCBQRDFfSU4sIFBEMV9JTl9QVSwKKwkJUEQwX0ZOLCBQRDBfT1VULCBQRDBfSU4sIFBEMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSIiwgMHhmZmNjMDAwOCwgMTYsIDIpIHsKKwkJUEU3X0ZOLCBQRTdfT1VULCBQRTdfSU4sIFBFN19JTl9QVSwKKwkJUEU2X0ZOLCBQRTZfT1VULCBQRTZfSU4sIFBFNl9JTl9QVSwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4ZmZjYzAwMGEsIDE2LCAyKSB7CisJCVBGN19GTiwgUEY3X09VVCwgUEY3X0lOLCBQRjdfSU5fUFUsCisJCVBGNl9GTiwgUEY2X09VVCwgUEY2X0lOLCBQRjZfSU5fUFUsCisJCVBGNV9GTiwgUEY1X09VVCwgUEY1X0lOLCBQRjVfSU5fUFUsCisJCVBGNF9GTiwgUEY0X09VVCwgUEY0X0lOLCBQRjRfSU5fUFUsCisJCVBGM19GTiwgUEYzX09VVCwgUEYzX0lOLCBQRjNfSU5fUFUsCisJCVBGMl9GTiwgUEYyX09VVCwgUEYyX0lOLCBQRjJfSU5fUFUsCisJCVBGMV9GTiwgUEYxX09VVCwgUEYxX0lOLCBQRjFfSU5fUFUsCisJCVBGMF9GTiwgUEYwX09VVCwgUEYwX0lOLCBQRjBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4ZmZjYzAwMGMsIDE2LCAyKSB7CisJCVBHN19GTiwgUEc3X09VVCwgUEc3X0lOLCBQRzdfSU5fUFUsCisJCVBHNl9GTiwgUEc2X09VVCwgUEc2X0lOLCBQRzZfSU5fUFUsCisJCVBHNV9GTiwgUEc1X09VVCwgUEc1X0lOLCBQRzVfSU5fUFUsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGZmY2MwMDBlLCAxNiwgMikgeworCQlQSDdfRk4sIFBIN19PVVQsIFBIN19JTiwgUEg3X0lOX1BVLAorCQlQSDZfRk4sIFBINl9PVVQsIFBINl9JTiwgUEg2X0lOX1BVLAorCQlQSDVfRk4sIFBINV9PVVQsIFBINV9JTiwgUEg1X0lOX1BVLAorCQlQSDRfRk4sIFBINF9PVVQsIFBINF9JTiwgUEg0X0lOX1BVLAorCQlQSDNfRk4sIFBIM19PVVQsIFBIM19JTiwgUEgzX0lOX1BVLAorCQlQSDJfRk4sIFBIMl9PVVQsIFBIMl9JTiwgUEgyX0lOX1BVLAorCQlQSDFfRk4sIFBIMV9PVVQsIFBIMV9JTiwgUEgxX0lOX1BVLAorCQlQSDBfRk4sIFBIMF9PVVQsIFBIMF9JTiwgUEgwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGZmY2MwMDEwLCAxNiwgMikgeworCQlQSjdfRk4sIFBKN19PVVQsIFBKN19JTiwgUEo3X0lOX1BVLAorCQlQSjZfRk4sIFBKNl9PVVQsIFBKNl9JTiwgUEo2X0lOX1BVLAorCQlQSjVfRk4sIFBKNV9PVVQsIFBKNV9JTiwgUEo1X0lOX1BVLAorCQlQSjRfRk4sIFBKNF9PVVQsIFBKNF9JTiwgUEo0X0lOX1BVLAorCQlQSjNfRk4sIFBKM19PVVQsIFBKM19JTiwgUEozX0lOX1BVLAorCQlQSjJfRk4sIFBKMl9PVVQsIFBKMl9JTiwgUEoyX0lOX1BVLAorCQlQSjFfRk4sIFBKMV9PVVQsIFBKMV9JTiwgUEoxX0lOX1BVLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQMU1TRUxSIiwgMHhmZmNjMDA4MCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUDFNU0VMMTRfMCwgUDFNU0VMMTRfMSwKKwkJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwkJUDFNU0VMMTJfMCwgUDFNU0VMMTJfMSwKKwkJUDFNU0VMMTFfMCwgUDFNU0VMMTFfMSwKKwkJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwkJUDFNU0VMOV8wLCAgUDFNU0VMOV8xLAorCQlQMU1TRUw4XzAsICBQMU1TRUw4XzEsCisJCVAxTVNFTDdfMCwgIFAxTVNFTDdfMSwKKwkJUDFNU0VMNl8wLCAgUDFNU0VMNl8xLAorCQlQMU1TRUw1XzAsICBQMU1TRUw1XzEsCisJCVAxTVNFTDRfMCwgIFAxTVNFTDRfMSwKKwkJUDFNU0VMM18wLCAgUDFNU0VMM18xLAorCQlQMU1TRUwyXzAsICBQMU1TRUwyXzEsCisJCVAxTVNFTDFfMCwgIFAxTVNFTDFfMSwKKwkJUDFNU0VMMF8wLCAgUDFNU0VMMF8xIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAyTVNFTFIiLCAweGZmY2MwMDgyLCAxNiwgMSkgeworCQlQMk1TRUwxNV8wLCBQMk1TRUwxNV8xLAorCQlQMk1TRUwxNF8wLCBQMk1TRUwxNF8xLAorCQlQMk1TRUwxM18wLCBQMk1TRUwxM18xLAorCQlQMk1TRUwxMl8wLCBQMk1TRUwxMl8xLAorCQlQMk1TRUwxMV8wLCBQMk1TRUwxMV8xLAorCQlQMk1TRUwxMF8wLCBQMk1TRUwxMF8xLAorCQlQMk1TRUw5XzAsICBQMk1TRUw5XzEsCisJCVAyTVNFTDhfMCwgIFAyTVNFTDhfMSwKKwkJUDJNU0VMN18wLCAgUDJNU0VMN18xLAorCQlQMk1TRUw2XzAsICBQMk1TRUw2XzEsCisJCVAyTVNFTDVfMCwgIFAyTVNFTDVfMSwKKwkJUDJNU0VMNF8wLCAgUDJNU0VMNF8xLAorCQlQMk1TRUwzXzAsICBQMk1TRUwzXzEsCisJCVAyTVNFTDJfMCwgIFAyTVNFTDJfMSwKKwkJUDJNU0VMMV8wLCAgUDJNU0VMMV8xLAorCQlQMk1TRUwwXzAsICBQMk1TRUwwXzEgfQorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHBpbm11eF9kYXRhX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEFEUiIsIDB4ZmZjYzAwMjAsIDgpIHsKKwkJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhmZmNjMDAyMiwgOCkgeworCQlQQjdfREFUQSwgUEI2X0RBVEEsIFBCNV9EQVRBLCBQQjRfREFUQSwKKwkJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGZmY2MwMDI0LCA4KSB7CisJCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCQlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4ZmZjYzAwMjYsIDgpIHsKKwkJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRURSIiwgMHhmZmNjMDAyOCwgOCkgeworCQlQRTdfREFUQSwgUEU2X0RBVEEsCisJCTAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGZmY2MwMDJhLCA4KSB7CisJCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCQlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEdEUiIsIDB4ZmZjYzAwMmMsIDgpIHsKKwkJUEc3X0RBVEEsIFBHNl9EQVRBLCBQRzVfREFUQSwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4ZmZjYzAwMmUsIDgpIHsKKwkJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhmZmNjMDAzMCwgOCkgeworCQlQSjdfREFUQSwgUEo2X0RBVEEsIFBKNV9EQVRBLCBQSjRfREFUQSwKKwkJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwgMCB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzc4Nl9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3ODZfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fRlNFLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3Nzg2X3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCmluZGV4IDRmZjRkYzYuLmMxNTQ5MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpaWMwX3Jlc291cmNlc1tdID0gewpAQCAtMTQwLDYgKzE0MSwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShqcHVfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTE3NSw2ICsyMDgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM0M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLAogCSZzY2lfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwppbmRleCA4MzlhZTk3Li45M2VjZjhlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWljX3Jlc291cmNlc1tdID0gewpAQCAtMTQ3LDYgKzE0OCwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2ZXUxX3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0xNjcsNiArMjAwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNjZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJmlpY19kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiAJJnVzYl9ob3N0X2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggNTE0NmFmYy4uMGU1ZDIwNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCkBAIC0xNzYsNiArMTc3LDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGpwdV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMjA5LDYgKzI0Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZ1c2JmX2RldmljZSwKIAkmaWljX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKaW5kZXggODQ5NzcwZC4uNTMzOGRhYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCkBAIC0xMDAsNiArMTAxLDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZldTFfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMDAwMDAsCkBAIC0yMjEsNiArMjU0LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJmlpY19kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDNjNWI2MjkuLmJkZjBmNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFlvc2hpaGlybyBTaGltb2RhCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBOb2J1aGlybyBJd2FtYXRzdQorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgTm9idWhpcm8gSXdhbWF0c3UKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMjIsMTggKzIyLDggQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLwotCQkuc3RhcnQJPSAyMCwKKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KKwkJLnN0YXJ0ICA9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTUwLDE3ICs0MCwxNyBAQAogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmUwODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNzYsIDc3LCA3OSwgNzggfSwKKwkJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxMDQsIDEwNSwgMTA3LCAxMDYgfSwKKwkJLmlycXMJCT0geyAxMDQsIDEwNCwgMTA0LCAxMDQgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMTQ4LDkzICsxMzgsNjUgQEAKIAlJUkxfSEhMTCwgSVJMX0hITEgsIElSTF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLCBMQ0RDLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsCi0JSUlDMCwgSUlDMSwKLQlDTVQsCi0JR0VJTlQwLCBHRUlOVDEsIEdFSU5UMiwKLQlIQUMsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU1RJRjAsIFNUSUYxLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTSU9GMCwgU0lPRjEsIFNJT0YyLAotCVVTQkgsIFVTQkZJMCwgVVNCRkkxLAotCVRQVSwgUENDLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQsCisJUlRDLCBXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgTENEQywgRE1BQywgU0NJRjAsIElJQzAsIElJQzEsIENNVCwgR0VUSEVSLCBIQUMsCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU1RJRjAsIFNUSUYxLCBTQ0lGMSwgU0lPRjAsIFNJT0YxLCBTSU9GMiwKKwlVU0JILCBVU0JGLCBUUFUsIFBDQywgTU1DSUYsIFNJTSwKIAlUTVUzLCBUTVU0LCBUTVU1LCBBREMsIFNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJLAotCUdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzLAorCVNDSUYyLCBHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JVE1VMDEyLCBUTVUzNDUsIFJUQywgRE1BQywgU0NJRjAsIEdFVEhFUiwgUENJQzUsCi0JU0NJRjEsIFVTQkYsIE1NQ0lGLCBTSU0sIFNDSUYyLCBHUElPLAorCVRNVTAxMiwgVE1VMzQ1LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksIElOVENfVkVDVChUTVUwLCAweDU4MCksCiAJSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwKIAlJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLCBJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAogCUlOVENfVkVDVChMQ0RDLCAweDYyMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDc4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChETUFDLCAweDc4MCksIElOVENfVkVDVChETUFDLCAweDdhMCksCiAJSU5UQ19WRUNUKElJQzAsIDB4OEEwKSwgSU5UQ19WRUNUKElJQzEsIDB4OEMwKSwKLQlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChHRUlOVDAsIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoR0VJTlQxLCAweDk0MCksIElOVENfVkVDVChHRUlOVDIsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChHRVRIRVIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoR0VUSEVSLCAweDk0MCksIElOVENfVkVDVChHRVRIRVIsIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoSEFDLCAweDk4MCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKIAlJTlRDX1ZFQ1QoU1RJRjAsIDB4YjQwKSwgSU5UQ19WRUNUKFNUSUYxLCAweGI2MCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweGJhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweGJlMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGI4MCksIElOVENfVkVDVChTQ0lGMSwgMHhiYTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmUwKSwKIAlJTlRDX1ZFQ1QoU0lPRjAsIDB4YzAwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGMyMCksCi0JSU5UQ19WRUNUKFVTQkgsIDB4YzYwKSwgSU5UQ19WRUNUKFVTQkZJMCwgMHhjODApLAotCUlOVENfVkVDVChVU0JGSTEsIDB4Y2EwKSwKKwlJTlRDX1ZFQ1QoVVNCSCwgMHhjNjApLCBJTlRDX1ZFQ1QoVVNCRiwgMHhjODApLAorCUlOVENfVkVDVChVU0JGLCAweGNhMCksCiAJSU5UQ19WRUNUKFRQVSwgMHhjYzApLCBJTlRDX1ZFQ1QoUENDLCAweGNlMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAotCUlOVENfVkVDVChTSU1fRVJJLCAweGQ4MCksIElOVENfVkVDVChTSU1fUlhJLCAweGRhMCksCi0JSU5UQ19WRUNUKFNJTV9UWEksIDB4ZGMwKSwgSU5UQ19WRUNUKFNJTV9URU5ELCAweGRlMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweGQ4MCksIElOVENfVkVDVChTSU0sIDB4ZGEwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweGRjMCksIElOVENfVkVDVChTSU0sIDB4ZGUwKSwKIAlJTlRDX1ZFQ1QoVE1VMywgMHhlMDApLCBJTlRDX1ZFQ1QoVE1VNCwgMHhlMjApLAogCUlOVENfVkVDVChUTVU1LCAweGU0MCksIElOVENfVkVDVChBREMsIDB4ZTYwKSwKIAlJTlRDX1ZFQ1QoU1NJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhlYTApLAogCUlOVENfVkVDVChTU0kyLCAweGVjMCksIElOVENfVkVDVChTU0kzLCAweGVlMCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHhmMDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweGYyMCksCi0JSU5UQ19WRUNUKFNDSUYyX0JSSSwgMHhmNDApLCBJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9fQ0gwLCAweGY4MCksIElOVENfVkVDVChHUElPX0NIMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPX0NIMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT19DSDMsIDB4ZmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjAwKSwgSU5UQ19WRUNUKFNDSUYyLCAweGYyMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweGY0MCksIElOVENfVkVDVChTQ0lGMiwgMHhmNjApLAorCUlOVENfVkVDVChHUElPLCAweGY4MCksIElOVENfVkVDVChHUElPLCAweGZhMCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmUwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoRE1BQywgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKEdFVEhFUiwgR0VJTlQwLCBHRUlOVDEsIEdFSU5UMiksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoVVNCRiwgVVNCRkkwLCBVU0JGSTEpLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAotCUlOVENfR1JPVVAoU0lNLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmluZGV4IGZiODIwMGMuLjZmNzIyN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCkBAIC0yMCwxNyArMjAsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtNDgsMTIgKzM4LDEyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTkwLDgyICs4MCw1NSBAQAogCUlSTF9ISExMLCBJUkxfSEhMSCwgSVJMX0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCi0JSFVESSwKLQlETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLCBETUFDMF9ETUlOVDMsIERNQUMwX0RNQUUsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywKLQlDTVQsIEhBQywKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JU0lPRiwgSFNQSSwKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCURNQUMxX0RNSU5UOCwgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLAotCVRNVTMsIFRNVTQsIFRNVTUsCi0JU1NJLAotCUZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEsCi0JR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzLAorCVJUQywgV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIERNQUMwLCBTQ0lGMCwgRE1BQzEsIENNVCwgSEFDLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNDSUYxLCBTSU9GLCBIU1BJLCBNTUNJRiwgVE1VMywgVE1VNCwgVE1VNSwgU1NJLCBGTENUTCwJR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVJUQywgVE1VMDEyLCBETUFDMCwgU0NJRjAsIERNQUM0NSwgRE1BQzEsCi0JUENJQzUsIFNDSUYxLCBNTUNJRiwgVE1VMzQ1LCBGTENUTCwgR1BJTywKKwlUTVUwMTIsCVRNVTM0NSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChUTVUwLCAweDU4MCksIElOVENfVkVDVChUTVUxLCAweDVhMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZjMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UNCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ1LCAweDdhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UNiwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ3LCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY0MCksIElOVENfVkVDVChETUFDMCwgMHg2NjApLAorCUlOVENfVkVDVChETUFDMCwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChETUFDMCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUMxLCAweDdlMCksCiAJSU5UQ19WRUNUKENNVCwgMHg5MDApLCBJTlRDX1ZFQ1QoSEFDLCAweDk4MCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweGJhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweGJlMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGJjMCksIElOVENfVkVDVChTQ0lGMSwgMHhiZTApLAogCUlOVENfVkVDVChTSU9GLCAweGMwMCksIElOVENfVkVDVChIU1BJLCAweGM4MCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDgsIDB4ZDgwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UOSwgMHhkYTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDEwLCAweGRjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDExLCAweGRlMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ZDgwKSwgSU5UQ19WRUNUKERNQUMxLCAweGRhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweGRjMCksIElOVENfVkVDVChETUFDMSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwKIAlJTlRDX1ZFQ1QoU1NJLCAweGU4MCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMU1RFLCAweGYwMCksIElOVENfVkVDVChGTENUTF9GTEVORCwgMHhmMjApLAotCUlOVENfVkVDVChGTENUTF9GTFRSUTAsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPSTAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9JMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPSTIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9JMywgMHhmZTApLAorCUlOVENfVkVDVChGTENUTCwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsCi0JCSAgIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsCi0JCSAgIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCAzMGJhYTYzLi5kODA4MDJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMjAsMTggKzIwLDEzIEBACiAJCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZWIwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0NCwgNDUsIDQ3LCA0NiB9LAotCX0sCi0KLQkvKgotCSAqIFRoZSByZXN0IG9mIHRoZXNlIGFsbCBoYXZlIG11bHRpcGxleGVkIElSUXMKLQkgKi8KLQl7CisJCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKKwl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmVjMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCkBAIC05MSwzMyArODYsMTkgQEAKIAlJUkw0X0hITEwsIElSTDRfSEhMSCwgSVJMNF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlXRFQsCi0JVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCURNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsIERNQUMxX0RNSU5UOSwKLQlETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLCBETUFDMV9ETUFFLAotCUhTUEksCisJV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIERNQUMwLCBTQ0lGMCwgU0NJRjEsIERNQUMxLCBIU1BJLAogCVNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNJT0YsCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlEVSwKLQlHRFRBX0dBQ0xJLCBHRFRBX0dBTUNJLCBHRFRBX0dBRVJJLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNJT0YsIE1NQ0lGLCBEVSwgR0RUQSwKIAlUTVUzLCBUTVU0LCBUTVU1LAogCVNTSTAsIFNTSTEsCiAJSEFDMCwgSEFDMSwKLQlGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExLAotCUdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMywKKwlGTENUTCwgR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVRNVTAxMiwgRE1BQzAsIFNDSUYwLCBTQ0lGMSwgRE1BQzEsCi0JUENJQzUsIE1NQ0lGLCBHRFRBLCBUTVUzNDUsIEZMQ1RMLCBHUElPCisJVE1VMDEyLAlUTVUzNDUKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTI1LDU3ICsxMDYsNDUgQEAKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg1ODApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLAogCUlOVENfVkVDVChUTVUyLCAweDVjMCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksCiAJSU5UQ19WRUNUKEhVREksIDB4NjAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDYyMCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjQwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY2MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NjgwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDZhMCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2ZTApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4NzgwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHg3YTApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4N2MwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHg3ZTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDYsIDB4ODgwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UNywgMHg4YTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDgsIDB4OGMwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UOSwgMHg4ZTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDEwLCAweDkwMCksIElOVENfVkVDVChETUFDMV9ETUlOVDExLCAweDkyMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNQUUsIDB4OTQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY0MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY2MCksIElOVENfVkVDVChETUFDMCwgMHg2ODApLAorCUlOVENfVkVDVChETUFDMCwgMHg2YTApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3ODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4N2MwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg4MCksIElOVENfVkVDVChETUFDMSwgMHg4YTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4YzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OTAwKSwgSU5UQ19WRUNUKERNQUMxLCAweDkyMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDk0MCksCiAJSU5UQ19WRUNUKEhTUEksIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTgwKSwgSU5UQ19WRUNUKFNDSUYzLCAweDlhMCksCiAJSU5UQ19WRUNUKFNDSUY0LCAweDljMCksIElOVENfVkVDVChTQ0lGNSwgMHg5ZTApLAogCUlOVENfVkVDVChQQ0lTRVJSLCAweGEwMCksIElOVENfVkVDVChQQ0lJTlRBLCAweGEyMCksCiAJSU5UQ19WRUNUKFBDSUlOVEIsIDB4YTQwKSwgSU5UQ19WRUNUKFBDSUlOVEMsIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJRVJSLCAweGFhMCksCi0JSU5UQ19WRUNUKFBDSVBXRDMsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSVBXRDIsIDB4YWUwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJUFdEMCwgMHhiMjApLAorCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lDNSwgMHhhYTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhhYzApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWUwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGIyMCksCiAJSU5UQ19WRUNUKFNJT0YsIDB4YzAwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKIAlJTlRDX1ZFQ1QoRFUsIDB4ZDgwKSwKLQlJTlRDX1ZFQ1QoR0RUQV9HQUNMSSwgMHhkYTApLCBJTlRDX1ZFQ1QoR0RUQV9HQU1DSSwgMHhkYzApLAotCUlOVENfVkVDVChHRFRBX0dBRVJJLCAweGRlMCksCisJSU5UQ19WRUNUKEdEVEEsIDB4ZGEwKSwgSU5UQ19WRUNUKEdEVEEsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoR0RUQSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwKIAlJTlRDX1ZFQ1QoU1NJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhlYTApLAogCUlOVENfVkVDVChIQUMwLCAweGVjMCksIElOVENfVkVDVChIQUMxLCAweGVlMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMU1RFLCAweGYwMCksIElOVENfVkVDVChGTENUTF9GTEVORCwgMHhmMjApLAotCUlOVENfVkVDVChGTENUTF9GTFRSUTAsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPSTAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9JMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPSTIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9JMywgMHhmZTApLAorCUlOVENfVkVDVChGTENUTCwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywgRE1BQzFfRE1JTlQ4LAotCQkgICBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsIERNQUMxX0RNQUUpLAotCUlOVENfR1JPVVAoUENJQzUsIFBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCi0JSU5UQ19HUk9VUChHRFRBLCBHRFRBX0dBQ0xJLCBHRFRBX0dBTUNJLCBHRFRBX0dBRVJJKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELAotCQkgICBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSksCi0JSU5UQ19HUk9VUChHUElPLCBHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0N2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogU0g3Nzg2IFNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIFNINzc4NSBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwl9LAorCS8qCisJICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcworCSAqLworCXsKKwkJLm1hcGJhc2UJPSAweGZmZWIwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0NCwgNDQsIDQ0LCA0NCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MCwgNTAsIDUwLCA1MCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWQwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MSwgNTEsIDUxLCA1MSB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWUwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWYwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MywgNTMsIDUzLCA1MyB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2Jfb2hjaV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4ZmZlNzA0MDAsCisJCS5lbmQJPSAweGZmZTcwNGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gNzcsCisJCS5lbmQJPSA3NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgdXNiX29oY2lfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX29oY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZ1c2Jfb2hjaV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2Jfb2hjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVzYl9vaGNpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaV9kZXZpY2UsCisJJnVzYl9vaGNpX2RldmljZSwKK307CisKKworLyoKKyAqIFBsZWFzZSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91ciBwbGF0Zm9ybSBib2FyZAorICogdXNlIGV4dGVybmFsIGNsb2NrIGZvciBVU0IKKyAqICovCisjZGVmaW5lIFVTQkNUTDAJCTB4ZmZlNzA4NTgKKyNkZWZpbmUgQ0xPQ0tfTU9ERV9NQVNLIDB4ZmZmZmZmN2YKKyNkZWZpbmUgRVhUX0NMT0NLX01PREUgIDB4MDAwMDAwODAKK3ZvaWQgX19pbml0IHNoNzc4Nl91c2JfdXNlX2V4Y2xvY2sodm9pZCkKK3sKKwl1MzIgdmFsID0gX19yYXdfcmVhZGwoVVNCQ1RMMCkgJiBDTE9DS19NT0RFX01BU0s7CisJX19yYXdfd3JpdGVsKHZhbCB8IEVYVF9DTE9DS19NT0RFLCBVU0JDVEwwKTsKK30KKworI2RlZmluZSBVU0JJTklUUkVHMQkweGZmZTcwMDk0CisjZGVmaW5lIFVTQklOSVRSRUcyCTB4ZmZlNzAwOWMKKyNkZWZpbmUgVVNCSU5JVFZBTDEJMHgwMGZmMDA0MAorI2RlZmluZSBVU0JJTklUVkFMMgkweDAwMDAwMDAxCisKKyNkZWZpbmUgVVNCUENUTDEJMHhmZmU3MDgwNAorI2RlZmluZSBVU0JTVAkJMHhmZmU3MDgwOAorI2RlZmluZSBQSFlfRU5CCQkweDAwMDAwMDAxCisjZGVmaW5lIFBMTF9FTkIJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEhZX1JTVAkJMHgwMDAwMDAwNAorI2RlZmluZSBBQ1RfUExMX1NUQVRVUwkweGMwMDAwMDAwCitzdGF0aWMgdm9pZCBfX2luaXQgc2g3Nzg2X3VzYl9zZXR1cCh2b2lkKQoreworCWludCBpID0gMTAwMDAwMDsKKworCS8qCisJICogVVNCIGluaXRpYWwgc2V0dGluZ3MKKwkgKgorCSAqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIG5lY2Vzc2FyeQorCSAqIGZvciB1c2luZyB0aGUgVVNCIG1vZHVsZXMuCisJICoKKwkgKiBzZWUgIlVTQiBJbml0YWwgU2V0dGluZ3MiIGZvciBkZXRhaWwKKwkgKi8KKwlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDEsIFVTQklOSVRSRUcxKTsKKwlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDIsIFVTQklOSVRSRUcyKTsKKworCS8qCisJICogU2V0IHRoZSBQSFkgYW5kIFBMTCBlbmFibGUgYml0CisJICovCisJX19yYXdfd3JpdGVsKFBIWV9FTkIgfCBQTExfRU5CLCBVU0JQQ1RMMSk7CisJd2hpbGUgKGktLSAmJgorCSAgICAgICAoKF9fcmF3X3JlYWRsKFVTQlNUKSAmIEFDVF9QTExfU1RBVFVTKSAhPSBBQ1RfUExMX1NUQVRVUykpCisJCWNwdV9yZWxheCgpOworCisJaWYgKGkpIHsKKwkJLyogU2V0IHRoZSBQSFkgUlNUIGJpdCAqLworCQlfX3Jhd193cml0ZWwoUEhZX0VOQiB8IFBMTF9FTkIgfCBQSFlfUlNULCBVU0JQQ1RMMSk7CisJCXByaW50ayhLRVJOX0lORk8gInNoNzc4NiB1c2Igc2V0dXAgZG9uZVxuIik7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODZfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXNoNzc4Nl91c2Jfc2V0dXAoKTsKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3Nzg2X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3Nzg2X2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChzaDc3ODZfZGV2aWNlc19zZXR1cCk7CisKK2VudW0geworCVVOVVNFRCA9IDAsCisKKwkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLworCisJSVJMMF9MTExMLCBJUkwwX0xMTEgsIElSTDBfTExITCwgSVJMMF9MTEhILAorCUlSTDBfTEhMTCwgSVJMMF9MSExILCBJUkwwX0xISEwsIElSTDBfTEhISCwKKwlJUkwwX0hMTEwsIElSTDBfSExMSCwgSVJMMF9ITEhMLCBJUkwwX0hMSEgsCisJSVJMMF9ISExMLCBJUkwwX0hITEgsIElSTDBfSEhITCwKKworCUlSTDRfTExMTCwgSVJMNF9MTExILCBJUkw0X0xMSEwsIElSTDRfTExISCwKKwlJUkw0X0xITEwsIElSTDRfTEhMSCwgSVJMNF9MSEhMLCBJUkw0X0xISEgsCisJSVJMNF9ITExMLCBJUkw0X0hMTEgsIElSTDRfSExITCwgSVJMNF9ITEhILAorCUlSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsCisKKwlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAorCVdEVCwKKwlUTVUwXzAsIFRNVTBfMSwgVE1VMF8yLCBUTVUwXzMsCisJVE1VMV8wLCBUTVUxXzEsIFRNVTFfMiwKKwlETUFDMF8wLCBETUFDMF8xLCBETUFDMF8yLCBETUFDMF8zLCBETUFDMF80LCBETUFDMF81LCBETUFDMF82LAorCUhVREkxLCBIVURJMCwKKwlETUFDMV8wLCBETUFDMV8xLCBETUFDMV8yLCBETUFDMV8zLAorCUhQQl8wLCBIUEJfMSwgSFBCXzIsCisJU0NJRjBfMCwgU0NJRjBfMSwgU0NJRjBfMiwgU0NJRjBfMywKKwlTQ0lGMSwKKwlUTVUyLCBUTVUzLAorCVNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAorCUV0aF8wLCBFdGhfMSwKKwlQQ0llQzBfMCwgUENJZUMwXzEsIFBDSWVDMF8yLAorCVBDSWVDMV8wLCBQQ0llQzFfMSwgUENJZUMxXzIsCisJVVNCLAorCUkyQzAsIEkyQzEsCisJRFUsCisJU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKKwlQQ0llQzJfMCwgUENJZUMyXzEsIFBDSWVDMl8yLAorCUhBQzAsIEhBQzEsCisJRkxDVEwsCisJSFNQSSwKKwlHUElPMCwgR1BJTzEsCisJVGhlcm1hbCwKKwlJTlRDMCwgSU5UQzEsIElOVEMyLCBJTlRDMywgSU5UQzQsIElOVEM1LCBJTlRDNiwgSU5UQzcsCisKKwkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoV0RULCAweDNlMCksCisJSU5UQ19WRUNUKFRNVTBfMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMF8xLCAweDQyMCksCisJSU5UQ19WRUNUKFRNVTBfMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMF8zLCAweDQ2MCksCisJSU5UQ19WRUNUKFRNVTFfMCwgMHg0ODApLCBJTlRDX1ZFQ1QoVE1VMV8xLCAweDRhMCksCisJSU5UQ19WRUNUKFRNVTFfMiwgMHg0YzApLAorCUlOVENfVkVDVChETUFDMF8wLCAweDUwMCksIElOVENfVkVDVChETUFDMF8xLCAweDUyMCksCisJSU5UQ19WRUNUKERNQUMwXzIsIDB4NTQwKSwgSU5UQ19WRUNUKERNQUMwXzMsIDB4NTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfNCwgMHg1ODApLCBJTlRDX1ZFQ1QoRE1BQzBfNSwgMHg1YTApLAorCUlOVENfVkVDVChETUFDMF82LCAweDVjMCksCisJSU5UQ19WRUNUKEhVREkxLCAweDVlMCksIElOVENfVkVDVChIVURJMCwgMHg2MDApLAorCUlOVENfVkVDVChETUFDMV8wLCAweDYyMCksIElOVENfVkVDVChETUFDMV8xLCAweDY0MCksCisJSU5UQ19WRUNUKERNQUMxXzIsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMxXzMsIDB4NjgwKSwKKwlJTlRDX1ZFQ1QoSFBCXzAsIDB4NmEwKSwgSU5UQ19WRUNUKEhQQl8xLCAweDZjMCksCisJSU5UQ19WRUNUKEhQQl8yLCAweDZlMCksCisJSU5UQ19WRUNUKFNDSUYwXzAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwXzEsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjBfMiwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfMywgMHg3NjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3ODApLAorCUlOVENfVkVDVChUTVUyLCAweDdhMCksIElOVENfVkVDVChUTVUzLCAweDdjMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDg0MCksIElOVENfVkVDVChTQ0lGMywgMHg4NjApLAorCUlOVENfVkVDVChTQ0lGNCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjUsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoRXRoXzAsIDB4OGMwKSwgSU5UQ19WRUNUKEV0aF8xLCAweDhlMCksCisJSU5UQ19WRUNUKFBDSWVDMF8wLCAweGFlMCksIElOVENfVkVDVChQQ0llQzBfMSwgMHhiMDApLAorCUlOVENfVkVDVChQQ0llQzBfMiwgMHhiMjApLAorCUlOVENfVkVDVChQQ0llQzFfMCwgMHhiNDApLCBJTlRDX1ZFQ1QoUENJZUMxXzEsIDB4YjYwKSwKKwlJTlRDX1ZFQ1QoUENJZUMxXzIsIDB4YjgwKSwKKwlJTlRDX1ZFQ1QoVVNCLCAweGJhMCksCisJSU5UQ19WRUNUKEkyQzAsIDB4Y2MwKSwgSU5UQ19WRUNUKEkyQzEsIDB4Y2UwKSwKKwlJTlRDX1ZFQ1QoRFUsIDB4ZDAwKSwKKwlJTlRDX1ZFQ1QoU1NJMCwgMHhkMjApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhkNDApLAorCUlOVENfVkVDVChTU0kyLCAweGQ2MCksIElOVENfVkVDVChTU0kzLCAweGQ4MCksCisJSU5UQ19WRUNUKFBDSWVDMl8wLCAweGRhMCksIElOVENfVkVDVChQQ0llQzJfMSwgMHhkYzApLAorCUlOVENfVkVDVChQQ0llQzJfMiwgMHhkZTApLAorCUlOVENfVkVDVChIQUMwLCAweGUwMCksIElOVENfVkVDVChIQUMxLCAweGUyMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGU0MCksCisJSU5UQ19WRUNUKEhTUEksIDB4ZTgwKSwKKwlJTlRDX1ZFQ1QoR1BJTzAsIDB4ZWEwKSwgSU5UQ19WRUNUKEdQSU8xLCAweGVjMCksCisJSU5UQ19WRUNUKFRoZXJtYWwsIDB4ZWUwKSwKK307CisKKy8qIEZJWE1FOiBNYWluIENQVSBzdXBwb3J0IG9ubHkgbm93ICovCisjaWYgMSAvKiBNYWluIENQVSAqLworI2RlZmluZSBDbklOVE1TSzAJMHhmZTQxMDAzMAorI2RlZmluZSBDbklOVE1TSzEJMHhmZTQxMDA0MAorI2RlZmluZSBDbklOVE1TS0NMUjAJMHhmZTQxMDA1MAorI2RlZmluZSBDbklOVE1TS0NMUjEJMHhmZTQxMDA2MAorI2RlZmluZSBDbklOVDJNU0tSMAkweGZlNDEwYTIwCisjZGVmaW5lIENuSU5UMk1TS1IxCTB4ZmU0MTBhMjQKKyNkZWZpbmUgQ25JTlQyTVNLUjIJMHhmZTQxMGEyOAorI2RlZmluZSBDbklOVDJNU0tSMwkweGZlNDEwYTJjCisjZGVmaW5lIENuSU5UMk1TS0NSMAkweGZlNDEwYTMwCisjZGVmaW5lIENuSU5UMk1TS0NSMQkweGZlNDEwYTM0CisjZGVmaW5lIENuSU5UMk1TS0NSMgkweGZlNDEwYTM4CisjZGVmaW5lIENuSU5UMk1TS0NSMwkweGZlNDEwYTNjCisjZWxzZSAvKiBTdWIgQ1BVICovCisjZGVmaW5lIENuSU5UTVNLMAkweGZlNDEwMDM0CisjZGVmaW5lIENuSU5UTVNLMQkweGZlNDEwMDQ0CisjZGVmaW5lIENuSU5UTVNLQ0xSMAkweGZlNDEwMDU0CisjZGVmaW5lIENuSU5UTVNLQ0xSMQkweGZlNDEwMDY0CisjZGVmaW5lIENuSU5UMk1TS1IwCTB4ZmU0MTBiMjAKKyNkZWZpbmUgQ25JTlQyTVNLUjEJMHhmZTQxMGIyNAorI2RlZmluZSBDbklOVDJNU0tSMgkweGZlNDEwYjI4CisjZGVmaW5lIENuSU5UMk1TS1IzCTB4ZmU0MTBiMmMKKyNkZWZpbmUgQ25JTlQyTVNLQ1IwCTB4ZmU0MTBiMzAKKyNkZWZpbmUgQ25JTlQyTVNLQ1IxCTB4ZmU0MTBiMzQKKyNkZWZpbmUgQ25JTlQyTVNLQ1IyCTB4ZmU0MTBiMzgKKyNkZWZpbmUgQ25JTlQyTVNLQ1IzCTB4ZmU0MTBiM2MKKyNlbmRpZgorCisjZGVmaW5lIElOVE1TSzIJCTB4ZmU0MTAwNjgKKyNkZWZpbmUgSU5UTVNLQ0xSMgkweGZlNDEwMDZjCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyBDbklOVE1TSzAsIENuSU5UTVNLQ0xSMCwgMzIsCisJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorCXsgSU5UTVNLMiwgSU5UTVNLQ0xSMiwgMzIsCisJICB7IElSTDBfTExMTCwgSVJMMF9MTExILCBJUkwwX0xMSEwsIElSTDBfTExISCwKKwkgICAgSVJMMF9MSExMLCBJUkwwX0xITEgsIElSTDBfTEhITCwgSVJMMF9MSEhILAorCSAgICBJUkwwX0hMTEwsIElSTDBfSExMSCwgSVJMMF9ITEhMLCBJUkwwX0hMSEgsCisJICAgIElSTDBfSEhMTCwgSVJMMF9ISExILCBJUkwwX0hISEwsIDAsCisJICAgIElSTDRfTExMTCwgSVJMNF9MTExILCBJUkw0X0xMSEwsIElSTDRfTExISCwKKwkgICAgSVJMNF9MSExMLCBJUkw0X0xITEgsIElSTDRfTEhITCwgSVJMNF9MSEhILAorCSAgICBJUkw0X0hMTEwsIElSTDRfSExMSCwgSVJMNF9ITEhMLCBJUkw0X0hMSEgsCisJICAgIElSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsIDAsIH0gfSwKKwl7IENuSU5UMk1TS1IwLCBDbklOVDJNU0tDUjAgLCAzMiwKKwkgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgV0RUIH0gfSwKKwl7IENuSU5UMk1TS1IxLCBDbklOVDJNU0tDUjEsIDMyLAorCSAgeyBUTVUwXzAsIFRNVTBfMSwgVE1VMF8yLCBUTVUwXzMsIFRNVTFfMCwgVE1VMV8xLCBUTVUxXzIsIDAsCisJICAgIERNQUMwXzAsIERNQUMwXzEsIERNQUMwXzIsIERNQUMwXzMsIERNQUMwXzQsIERNQUMwXzUsIERNQUMwXzYsCisJICAgIEhVREkxLCBIVURJMCwKKwkgICAgRE1BQzFfMCwgRE1BQzFfMSwgRE1BQzFfMiwgRE1BQzFfMywKKwkgICAgSFBCXzAsIEhQQl8xLCBIUEJfMiwKKwkgICAgU0NJRjBfMCwgU0NJRjBfMSwgU0NJRjBfMiwgU0NJRjBfMywKKwkgICAgU0NJRjEsCisJICAgIFRNVTIsIFRNVTMsIDAsIH0gfSwKKwl7IENuSU5UMk1TS1IyLCBDbklOVDJNU0tDUjIsIDMyLAorCSAgeyAwLCAwLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwKKwkgICAgRXRoXzAsIEV0aF8xLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICBQQ0llQzBfMCwgUENJZUMwXzEsIFBDSWVDMF8yLAorCSAgICBQQ0llQzFfMCwgUENJZUMxXzEsIFBDSWVDMV8yLAorCSAgICBVU0IsIDAsIDAgfSB9LAorCXsgQ25JTlQyTVNLUjMsIENuSU5UMk1TS0NSMywgMzIsCisJICB7IDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIEkyQzAsIEkyQzEsCisJICAgIERVLCBTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAorCSAgICBQQ0llQzJfMCwgUENJZUMyXzEsIFBDSWVDMl8yLAorCSAgICBIQUMwLCBIQUMxLAorCSAgICBGTENUTCwgMCwKKwkgICAgSFNQSSwgR1BJTzAsIEdQSU8xLCBUaGVybWFsLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDEwLCAwLCAzMiwgNCwgLyogSU5UUFJJICovICAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAorCQkJCQkJIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorCXsgMHhmZTQxMDgwMCwgMCwgMzIsIDgsIC8qIElOVDJQUkkwICovIHsgMCwgMCwgMCwgV0RUIH0gfSwKKwl7IDB4ZmU0MTA4MDQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMSAqLyB7IFRNVTBfMCwgVE1VMF8xLAorCQkJCQkJIFRNVTBfMiwgVE1VMF8zIH0gfSwKKwl7IDB4ZmU0MTA4MDgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMiAqLyB7IFRNVTFfMCwgVE1VMV8xLAorCQkJCQkJIFRNVTFfMiwgMCB9IH0sCisJeyAweGZlNDEwODBjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTMgKi8geyBETUFDMF8wLCBETUFDMF8xLAorCQkJCQkJIERNQUMwXzIsIERNQUMwXzMgfSB9LAorCXsgMHhmZTQxMDgxMCwgMCwgMzIsIDgsIC8qIElOVDJQUkk0ICovIHsgRE1BQzBfNCwgRE1BQzBfNSwKKwkJCQkJCSBETUFDMF82LCBIVURJMSB9IH0sCisJeyAweGZlNDEwODE0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTUgKi8geyBIVURJMCwgRE1BQzFfMCwKKwkJCQkJCSBETUFDMV8xLCBETUFDMV8yIH0gfSwKKwl7IDB4ZmU0MTA4MTgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNiAqLyB7IERNQUMxXzMsIEhQQl8wLAorCQkJCQkJIEhQQl8xLCBIUEJfMiB9IH0sCisJeyAweGZlNDEwODFjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTcgKi8geyBTQ0lGMF8wLCBTQ0lGMF8xLAorCQkJCQkJIFNDSUYwXzIsIFNDSUYwXzMgfSB9LAorCXsgMHhmZTQxMDgyMCwgMCwgMzIsIDgsIC8qIElOVDJQUkk4ICovIHsgU0NJRjEsIFRNVTIsIFRNVTMsIDAgfSB9LAorCXsgMHhmZTQxMDgyNCwgMCwgMzIsIDgsIC8qIElOVDJQUkk5ICovIHsgMCwgMCwgU0NJRjIsIFNDSUYzIH0gfSwKKwl7IDB4ZmU0MTA4MjgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTAgKi8geyBTQ0lGNCwgU0NJRjUsCisJCQkJCQkgIEV0aF8wLCBFdGhfMSB9IH0sCisJeyAweGZlNDEwODJjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTExICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODMwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTEyICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODM0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTEzICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODM4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTE0ICovIHsgMCwgMCwgMCwgUENJZUMwXzAgfSB9LAorCXsgMHhmZTQxMDgzYywgMCwgMzIsIDgsIC8qIElOVDJQUkkxNSAqLyB7IFBDSWVDMF8xLCBQQ0llQzBfMiwKKwkJCQkJCSAgUENJZUMxXzAsIFBDSWVDMV8xIH0gfSwKKwl7IDB4ZmU0MTA4NDAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTYgKi8geyBQQ0llQzFfMiwgVVNCLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NDQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTcgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NDgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTggKi8geyAwLCAwLCBJMkMwLCBJMkMxIH0gfSwKKwl7IDB4ZmU0MTA4NGMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTkgKi8geyBEVSwgU1NJMCwgU1NJMSwgU1NJMiB9IH0sCisJeyAweGZlNDEwODUwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTIwICovIHsgU1NJMywgUENJZUMyXzAsCisJCQkJCQkgIFBDSWVDMl8xLCBQQ0llQzJfMiB9IH0sCisJeyAweGZlNDEwODU0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIxICovIHsgSEFDMCwgSEFDMSwgRkxDVEwsIDAgfSB9LAorCXsgMHhmZTQxMDg1OCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyMiAqLyB7IEhTUEksIEdQSU8wLAorCQkJCQkJICBHUElPMSwgVGhlcm1hbCB9IH0sCisJeyAweGZlNDEwODVjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTIzICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODYwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTI0ICovIHsgMCwgMCwgMCwgMCB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3Nzg2IiwgdmVjdG9ycywgTlVMTCwKKwkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOworCisvKiBTdXBwb3J0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucyBpbiBJUlEgbW9kZSAqLworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lycTAxMjNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUlEwLCAweDIwMCksIElOVENfVkVDVChJUlExLCAweDI0MCksCisJSU5UQ19WRUNUKElSUTIsIDB4MjgwKSwgSU5UQ19WRUNUKElSUTMsIDB4MmMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJxNDU2N1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTQsIDB4MzAwKSwgSU5UQ19WRUNUKElSUTUsIDB4MzQwKSwKKwlJTlRDX1ZFQ1QoSVJRNiwgMHgzODApLCBJTlRDX1ZFQ1QoSVJRNywgMHgzYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3NlbnNlX3JlZyBzZW5zZV9yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAxYywgMzIsIDIsIC8qIElDUjEgKi8gICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsCisJCQkJCSAgICBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBhY2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMjQsIDAsIDMyLCAvKiBJTlRSRVEgKi8KKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzY19pcnEwMTIzLCAic2g3Nzg2LWlycTAxMjMiLAorCQkJICAgICB2ZWN0b3JzX2lycTAxMjMsIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2NfaXJxNDU2NywgInNoNzc4Ni1pcnE0NTY3IiwKKwkJCSAgICAgdmVjdG9yc19pcnE0NTY3LCBOVUxMLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyk7CisKKy8qIEV4dGVybmFsIGludGVycnVwdCBwaW5zIGluIElSTCBtb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJsMDEyM1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSTDBfTExMTCwgMHgyMDApLCBJTlRDX1ZFQ1QoSVJMMF9MTExILCAweDIyMCksCisJSU5UQ19WRUNUKElSTDBfTExITCwgMHgyNDApLCBJTlRDX1ZFQ1QoSVJMMF9MTEhILCAweDI2MCksCisJSU5UQ19WRUNUKElSTDBfTEhMTCwgMHgyODApLCBJTlRDX1ZFQ1QoSVJMMF9MSExILCAweDJhMCksCisJSU5UQ19WRUNUKElSTDBfTEhITCwgMHgyYzApLCBJTlRDX1ZFQ1QoSVJMMF9MSEhILCAweDJlMCksCisJSU5UQ19WRUNUKElSTDBfSExMTCwgMHgzMDApLCBJTlRDX1ZFQ1QoSVJMMF9ITExILCAweDMyMCksCisJSU5UQ19WRUNUKElSTDBfSExITCwgMHgzNDApLCBJTlRDX1ZFQ1QoSVJMMF9ITEhILCAweDM2MCksCisJSU5UQ19WRUNUKElSTDBfSEhMTCwgMHgzODApLCBJTlRDX1ZFQ1QoSVJMMF9ISExILCAweDNhMCksCisJSU5UQ19WRUNUKElSTDBfSEhITCwgMHgzYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcmw0NTY3W10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJMNF9MTExMLCAweDkwMCksIElOVENfVkVDVChJUkw0X0xMTEgsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MTEhMLCAweDk0MCksIElOVENfVkVDVChJUkw0X0xMSEgsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MSExMLCAweDk4MCksIElOVENfVkVDVChJUkw0X0xITEgsIDB4OWEwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MSEhMLCAweDljMCksIElOVENfVkVDVChJUkw0X0xISEgsIDB4OWUwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ITExMLCAweGEwMCksIElOVENfVkVDVChJUkw0X0hMTEgsIDB4YTIwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ITEhMLCAweGE0MCksIElOVENfVkVDVChJUkw0X0hMSEgsIDB4YTYwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ISExMLCAweGE4MCksIElOVENfVkVDVChJUkw0X0hITEgsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ISEhMLCAweGFjMCksCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2lybDAxMjMsICJzaDc3ODYtaXJsMDEyMyIsIHZlY3RvcnNfaXJsMDEyMywKKwkJCSBOVUxMLCBtYXNrX3JlZ2lzdGVycywgTlVMTCwgTlVMTCk7CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfaXJsNDU2NywgInNoNzc4Ni1pcmw0NTY3IiwgdmVjdG9yc19pcmw0NTY3LAorCQkJIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLCBOVUxMLCBOVUxMKTsKKworI2RlZmluZSBJTlRDX0lDUjAJMHhmZTQxMDAwMAorI2RlZmluZSBJTlRDX0lOVE1TSzAJQ25JTlRNU0swCisjZGVmaW5lIElOVENfSU5UTVNLMQlDbklOVE1TSzEKKyNkZWZpbmUgSU5UQ19JTlRNU0syCUlOVE1TSzIKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIxCUNuSU5UTVNLQ0xSMQorI2RlZmluZSBJTlRDX0lOVE1TS0NMUjIJSU5UTVNLQ0xSMgorCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQoreworCS8qIGRpc2FibGUgSVJRMy0wICsgSVJRNy00ICovCisJY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisKKwkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLworCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCisJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KKwljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOworfQorCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQoreworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgSVJRX01PREVfSVJRNzY1NDoKKwkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkw3LTQgKi8KKwkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgorCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLworCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CisJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KKwkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDMyMTA6CisJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KKwkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKKwkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCisJCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmw0NTY3KTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CisJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLworCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKwordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGJmYTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1N1cGVySCBTSC1Nb2JpbGUgYmFja2VuZHMuCisjCisKKyMgUG93ZXIgTWFuYWdlbWVudCAmIFNsZWVwIG1vZGUKK29iai0kKENPTkZJR19QTSkJKz0gcG0ubyBzbGVlcC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDY3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcG0tc2hfbW9iaWxlLmMKKyAqCisgKiBQb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgY29kZSBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBTbGVlcCBtb2RlcyBhdmFpbGFibGUgb24gU3VwZXJIIE1vYmlsZToKKyAqCisgKiBTbGVlcCBtb2RlIGlzIGp1c3QgcGxhaW4gInNsZWVwIiBpbnN0cnVjdGlvbgorICogU2xlZXAgU2VsZi1SZWZyZXNoIG1vZGUgaXMgYWJvdmUgcGx1cyBSQU0gcHV0IGluIFNlbGYtUmVmcmVzaAorICogU3RhbmRieSBTZWxmLVJlZnJlc2ggbW9kZSBpcyBhYm92ZSBwbHVzIHN0b3BwZWQgY2xvY2tzCisgKi8KKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBub3QgdGhlcmUgeWV0OgorICoKKyAqIFItc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkLCBidXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisgKiBVLXN0YW5kYnkgbW9kZSBpcyBsb3cgcHJpb3JpdHkgc2luY2UgaXQgbmVlZHMgYm9vdGxvYWRlciBoYWNrcworICoKKyAqIEFsbCBtb2RlcyBzaG91bGQgYmUgdGllZCBpbiB3aXRoIGNwdWlkbGUuIEJ1dCBiZWZvcmUgdGhhdCBjYW4KKyAqIGhhcHBlbiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgZW5hYmxlZCBoYXJkd2FyZSBibG9ja3Mgc28gd2UKKyAqIGNhbiBhdm9pZCBlbnRlcmluZyBzbGVlcCBtb2RlcyB0aGF0IHN0b3AgY2xvY2tzIHRvIGhhcmR3YXJlCisgKiBibG9ja3MgdGhhdCBhcmUgaW4gdXNlIGV2ZW4gdGhvdWdoIHRoZSBjcHUgY29yZSBpcyBpZGxlLgorICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHNoX21vYmlsZV9zdGFuZGJ5W107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHNoX21vYmlsZV9zdGFuZGJ5X3NpemU7CisKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jYWxsX3N0YW5kYnkodW5zaWduZWQgbG9uZyBtb2RlKQoreworCWV4dGVybiB2b2lkICp2YnJfYmFzZTsKKwl2b2lkICpvbmNoaXBfbWVtID0gKHZvaWQgKikweGU1MjAwMDAwOyAvKiBJTFJBTSAqLworCXZvaWQgKCpzdGFuZGJ5X29uY2hpcF9tZW0pKHVuc2lnbmVkIGxvbmcpID0gb25jaGlwX21lbTsKKworCS8qIE5vdGU6IFdha2UgdXAgZnJvbSBzbGVlcCBtYXkgZ2VuZXJhdGUgZXhjZXB0aW9ucyEKKwkgKiBTZXR1cCBWQlIgdG8gcG9pbnQgdG8gb24tY2hpcCByYW0gaWYgc2VsZi1yZWZyZXNoIGlzCisJICogZ29pbmcgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKG9uY2hpcF9tZW0pIDogIm1lbW9yeSIpOworCisJLyogQ29weSB0aGUgYXNzZW1ibHkgc25pcHBldCB0byB0aGUgb3RoZXJ3aXNlIHVudW5zZWQgSUxSQU0gKi8KKwltZW1jcHkob25jaGlwX21lbSwgc2hfbW9iaWxlX3N0YW5kYnksIHNoX21vYmlsZV9zdGFuZGJ5X3NpemUpOworCXdtYigpOworCWN0cmxfYmFycmllcigpOworCisJLyogTGV0IGFzc2VtYmx5IHNuaXBwZXQgaW4gb24tY2hpcCBtZW1vcnkgaGFuZGxlIHRoZSByZXN0ICovCisJc3RhbmRieV9vbmNoaXBfbWVtKG1vZGUpOworCisJLyogUHV0IFZCUiBiYWNrIGluIFN5c3RlbSBSQU0gYWdhaW4gKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbnQgc2hfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc2V0X2JsX2JpdCgpOworCXNoX21vYmlsZV9jYWxsX3N0YW5kYnkoU1VTUF9NT0RFX1NUQU5EQllfU0YpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJY2xlYXJfYmxfYml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgc2hfcG1fb3BzID0geworCS5lbnRlciAgICAgICAgICA9IHNoX3BtX2VudGVyLAorCS52YWxpZCAgICAgICAgICA9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9wbV9pbml0KHZvaWQpCit7CisJc3VzcGVuZF9zZXRfb3BzKCZzaF9wbV9vcHMpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHNoX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg4OGVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbGVlcC1zaF9tb2JpbGUuUworICoKKyAqIFNsZWVwIG1vZGUgYW5kIFN0YW5kYnkgbW9kZXMgc3VwcG9ydCBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKworLyogbWFuYWdlIHNlbGYtcmVmcmVzaCBhbmQgZW50ZXIgc3RhbmRieSBtb2RlLgorICogdGhpcyBjb2RlIHdpbGwgYmUgY29waWVkIHRvIG9uLWNoaXAgbWVtb3J5IGFuZCBleGVjdXRlZCBmcm9tIHRoZXJlLgorICovCisKKwkuYmFsaWduIAk0MDk2LDAsNDA5NgorRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnkpCisJbW92CXI0LCByMAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfc2V0X3NmCisKKwkvKiBTRFJBTTogZGlzYWJsZSBwb3dlciBkb3duIGFuZCBwdXQgaW4gc2VsZi1yZWZyZXNoIG1vZGUgKi8KKwltb3YubAkxZiwgcjQKKwltb3YubAkyZiwgcjEKKwltb3YubAlAcjQsIHIyCisJb3IJcjEsIHIyCisJbW92LmwgICAzZiwgcjMKKwlhbmQJcjMsIHIyCisJbW92LmwJcjIsIEByNAorCitza2lwX3NldF9zZjoKKwl0c3QJI1NVU1BfU0hfU0xFRVAsIHIwCisJYnQJdGVzdF9zdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAic2xlZXAgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDAwLCByMQorCit0ZXN0X3N0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1NUQU5EQlksIHIwCisJYnQJdGVzdF9yc3RhbmRieQorCisJLyogc2V0IG1vZGUgdG8gInNvZnR3YXJlIHN0YW5kYnkgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDgwLCByMQorCit0ZXN0X3JzdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwlidAl0ZXN0X3VzdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAici1zdGFuZGJ5IG1vZGUiICovCisJYnJhCWRvX3NsZWVwCisJIG1vdgkjMHgyMCwgcjEKKwordGVzdF91c3RhbmRieToKKwl0c3QJI1NVU1BfU0hfVVNUQU5EQlksIHIwCisJYnQJZG9uZV9zbGVlcAorCisJLyogc2V0IG1vZGUgdG8gInUtc3RhbmRieSBtb2RlIiAqLworCW1vdgkjMHgxMCwgcjEKKworCS8qIGZhbGwtdGhyb3VnaCAqLworCitkb19zbGVlcDoKKwkvKiBzZXR1cCBhbmQgZW50ZXIgc2VsZWN0ZWQgc3RhbmRieSBtb2RlICovCisJbW92LmwJNWYsIHI0CisJbW92LmwJcjEsIEByNAorCXNsZWVwCisKK2RvbmVfc2xlZXA6CisJLyogcmVzZXQgc3RhbmRieSBtb2RlIHRvIHNsZWVwIG1vZGUgKi8KKwltb3YubAk1ZiwgcjQKKwltb3YJIzB4MDAsIHIxCisJbW92LmwJcjEsIEByNAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfcmVzdG9yZV9zZgorCisJLyogU0RSQU06IHNldCBhdXRvLXJlZnJlc2ggbW9kZSAqLworCW1vdi5sCTFmLCByNAorCW1vdi5sCUByNCwgcjIKKwltb3YubCAgIDRmLCByMworCWFuZAlyMywgcjIKKwltb3YubAlyMiwgQHI0CisJbW92LmwJNmYsIHI0CisJbW92LmwJN2YsIHIxCisJbW92LmwJOGYsIHIyCisJbW92LmwJQHI0LCByMworCW1vdgkjLTEsIHI0CisJYWRkCXI0LCByMworCW9yCXIyLCByMworCW1vdi5sCXIzLCBAcjEKK3NraXBfcmVzdG9yZV9zZjoKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKKzE6CS5sb25nCTB4ZmU0MDAwMDggLyogU0RDUjAgKi8KKzI6CS5sb25nCTB4MDAwMDA0MDAKKzM6CS5sb25nCTB4ZmZmZjdmZmYKKzQ6CS5sb25nCTB4ZmZmZmZiZmYKKzU6CS5sb25nCTB4YTQxNTAwMjAgLyogU1RCQ1IgKi8KKzY6CS5sb25nICAgMHhmZTQwMDAxYyAvKiBSVENPUiAqLworNzoJLmxvbmcgICAweGZlNDAwMDE4IC8qIFJUQ05UICovCis4OgkubG9uZyAgIDB4YTU1YTAwMDAKKworLyogaW50ZXJydXB0IHZlY3RvciBAIDB4NjAwICovCisJLmJhbGlnbiAJMHg0MDAsMCwweDQwMAorCS5sb25nCTB4ZGVhZGJlZWYKKwkuYmFsaWduIAkweDIwMCwwLDB4MjAwCisJLyogc2g3NzIyIHdpbGwgZW5kIHVwIGhlcmUgaW4gc2xlZXAgbW9kZSAqLworCXJ0ZQorCSBub3AKK3NoX21vYmlsZV9zdGFuZGJ5X2VuZDoKKworRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZSkKKwkubG9uZyBzaF9tb2JpbGVfc3RhbmRieV9lbmQgLSBzaF9tb2JpbGVfc3RhbmRieQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCmluZGV4IGQzNzE2NTMuLmQyMmU1YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2dwaW8uYworKysgYi9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKQEAgLTE5LDIyICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi1zdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87Ci0KLXN0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQotewotCWlmICghcmVnaXN0ZXJlZF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKLX0KLQogc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKIHsKIAlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQpAQCAtNDYsOSArMzAsNjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCByZWFkX3dyaXRlX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAotCQkJICB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZG9fd3JpdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3JlYWRfcmF3X3JlZyh1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgpCit7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCXJldHVybiBjdHJsX2luYihyZWcpOworCWNhc2UgMTY6CisJCXJldHVybiBjdHJsX2ludyhyZWcpOworCWNhc2UgMzI6CisJCXJldHVybiBjdHJsX2lubChyZWcpOworCX0KKworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX3Jhd19yZWcodW5zaWduZWQgbG9uZyByZWcsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQljdHJsX291dGIoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCWNhc2UgMTY6CisJCWN0cmxfb3V0dyhkYXRhLCByZWcpOworCQlyZXR1cm47CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwl9CisKKwlCVUcoKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9iaXQoc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGluX3BvcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBvczsKKworCXBvcyA9IGRyLT5yZWdfd2lkdGggLSAoaW5fcG9zICsgMSk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX2JpdCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkXG4iLAorCQlkci0+cmVnLCAhIXZhbHVlLCBwb3MsIGRyLT5yZWdfd2lkdGgpOworI2VuZGlmCisKKwlpZiAodmFsdWUpCisJCXNldF9iaXQocG9zLCAmZHItPnJlZ19zaGFkb3cpOworCWVsc2UKKwkJY2xlYXJfYml0KHBvcywgJmRyLT5yZWdfc2hhZG93KTsKKworCWdwaW9fd3JpdGVfcmF3X3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLCBkci0+cmVnX3NoYWRvdyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZWFkX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhLCBtYXNrLCBwb3M7CiAKQEAgLTU3LDUyICs5Niw1MyBAQAogCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CiAKICNpZmRlZiBERUJVRwotCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJcHJfaW5mbygicmVhZF9yZWc6IGFkZHIgPSAlbHgsIHBvcyA9ICVsZCwgIgogCQkicl93aWR0aCA9ICVsZCwgZl93aWR0aCA9ICVsZFxuIiwKLQkJZG9fd3JpdGUgPyAid3JpdGUiIDogInJlYWQiLCByZWcsIHZhbHVlLCBwb3MsCi0JCXJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworCQlyZWcsIHBvcywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CiAjZW5kaWYKIAotCXN3aXRjaCAocmVnX3dpZHRoKSB7Ci0JY2FzZSA4OgotCQlkYXRhID0gY3RybF9pbmIocmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZGF0YSA9IGN0cmxfaW53KHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWRhdGEgPSBjdHJsX2lubChyZWcpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoIWRvX3dyaXRlKQotCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7Ci0KLQlkYXRhICY9IH4obWFzayA8PCBwb3MpOwotCWRhdGEgfD0gdmFsdWUgPDwgcG9zOwotCi0Jc3dpdGNoIChyZWdfd2lkdGgpIHsKLQljYXNlIDg6Ci0JCWN0cmxfb3V0YihkYXRhLCByZWcpOwotCQlicmVhazsKLQljYXNlIDE2OgotCQljdHJsX291dHcoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJY3RybF9vdXRsKGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKKwlkYXRhID0gZ3Bpb19yZWFkX3Jhd19yZWcocmVnLCByZWdfd2lkdGgpOworCXJldHVybiAoZGF0YSA+PiBwb3MpICYgbWFzazsKIH0KIAotc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKLQkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAorCQkJICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHBvczsKKworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX3JlZyBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlyZWcsIHZhbHVlLCBwb3MsIHJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworI2VuZGlmCisKKwltYXNrID0gfihtYXNrIDw8IHBvcyk7CisJdmFsdWUgPSB2YWx1ZSA8PCBwb3M7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJY3RybF9vdXRiKChjdHJsX2luYihyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY3RybF9vdXR3KChjdHJsX2ludyhyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKChjdHJsX2lubChyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNldHVwX2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvcCA9ICZncGlvYy0+Z3Bpb3NbZ3Bpb107CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWc7CiAJaW50IGssIG47CiAKLQlpZiAoIWVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKKwlpZiAoIWVudW1faW5fcmFuZ2UoZ3Bpb3AtPmVudW1faWQsICZncGlvYy0+ZGF0YSkpCiAJCXJldHVybiAtMTsKIAogCWsgPSAwOwpAQCAtMTEzLDE5ICsxNTMsNTggQEAKIAkJCWJyZWFrOwogCiAJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKLQkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgewotCQkJCSpkcnAgPSBkYXRhX3JlZzsKLQkJCQkqYml0cCA9IG47CisJCQlpZiAoZGF0YV9yZWctPmVudW1faWRzW25dID09IGdwaW9wLT5lbnVtX2lkKSB7CisJCQkJZ3Bpb3AtPmZsYWdzICY9IH5QSU5NVVhfRkxBR19EUkVHOworCQkJCWdwaW9wLT5mbGFncyB8PSAoayA8PCBQSU5NVVhfRkxBR19EUkVHX1NISUZUKTsKKwkJCQlncGlvcC0+ZmxhZ3MgJj0gflBJTk1VWF9GTEFHX0RCSVQ7CisJCQkJZ3Bpb3AtPmZsYWdzIHw9IChuIDw8IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQpOwogCQkJCXJldHVybiAwOwotCiAJCQl9CiAJCX0KIAkJaysrOwogCX0KIAorCUJVRygpOworCiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9kYXRhX3JlZ3Moc3RydWN0IHBpbm11eF9pbmZvICpncGlvYykKK3sKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkcnA7CisJaW50IGs7CisKKwlmb3IgKGsgPSBncGlvYy0+Zmlyc3RfZ3BpbzsgayA8PSBncGlvYy0+bGFzdF9ncGlvOyBrKyspCisJCXNldHVwX2RhdGFfcmVnKGdwaW9jLCBrKTsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWRycCA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZHJwLT5yZWdfd2lkdGgpCisJCQlicmVhazsKKworCQlkcnAtPnJlZ19zaGFkb3cgPSBncGlvX3JlYWRfcmF3X3JlZyhkcnAtPnJlZywgZHJwLT5yZWdfd2lkdGgpOworCQlrKys7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqKmRycCwgaW50ICpiaXRwKQoreworCXN0cnVjdCBwaW5tdXhfZ3BpbyAqZ3Bpb3AgPSAmZ3Bpb2MtPmdwaW9zW2dwaW9dOworCWludCBrLCBuOworCisJaWYgKCFlbnVtX2luX3JhbmdlKGdwaW9wLT5lbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gKGdwaW9wLT5mbGFncyAmIFBJTk1VWF9GTEFHX0RSRUcpID4+IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQ7CisJbiA9IChncGlvcC0+ZmxhZ3MgJiBQSU5NVVhfRkxBR19EQklUKSA+PiBQSU5NVVhfRkxBR19EQklUX1NISUZUOworCSpkcnAgPSBncGlvYy0+ZGF0YV9yZWdzICsgazsKKwkqYml0cCA9IG47CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgcGlubXV4X2VudW1fdCBlbnVtX2lkLAogCQkJICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKipjcnAsIGludCAqaW5kZXhwLAogCQkJICB1bnNpZ25lZCBsb25nICoqY250cCkKQEAgLTE4Nyw5ICsyNjYsOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCi0JCQkgICAgc3RydWN0IHBpbm11eF9jZmdfcmVnICpjcnAsCi0JCQkgICAgaW50IGluZGV4KQorc3RhdGljIHZvaWQgd3JpdGVfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICAgaW50IGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgbmNvbWIsIHBvcywgdmFsdWU7CiAKQEAgLTE5Nyw4ICsyNzYsNyBAQAogCXBvcyA9IGluZGV4IC8gbmNvbWI7CiAJdmFsdWUgPSBpbmRleCAlIG5jb21iOwogCi0JcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKLQkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworCWdwaW9fd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwgY3JwLT5maWVsZF93aWR0aCwgcG9zLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLApAQCAtMjExLDggKzI4OSw4IEBACiAJcG9zID0gaW5kZXggLyBuY29tYjsKIAl2YWx1ZSA9IGluZGV4ICUgbmNvbWI7CiAKLQlpZiAocmVhZF93cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAotCQkJICAgY3JwLT5maWVsZF93aWR0aCwgcG9zLCAwLCAwKSA9PSB2YWx1ZSkKKwlpZiAoZ3Bpb19yZWFkX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCisJCQkgIGNycC0+ZmllbGRfd2lkdGgsIHBvcykgPT0gdmFsdWUpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC0xOwpAQCAtMjIwLDggKzI5OCw4IEBACiAKIGVudW0geyBHUElPX0NGR19EUllSVU4sIEdQSU9fQ0ZHX1JFUSwgR1BJT19DRkdfRlJFRSB9OwogCi1pbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCi0JCSAgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKK3N0YXRpYyBpbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKIHsKIAlzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNyID0gTlVMTDsKIAlwaW5tdXhfZW51bV90IGVudW1faWQ7CkBAIC0yODcsOCArMzY1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgR1BJT19DRkdfUkVROgotCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKLQkJCQlnb3RvIG91dF9lcnI7CisJCQl3cml0ZV9jb25maWdfcmVnKGdwaW9jLCBjciwgaW5kZXgpOwogCQkJKmNudHAgPSAqY250cCArIDE7CiAJCQlicmVhazsKIApAQCAtMzA1LDkgKzM4MiwxNCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CiAKLWludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKQorc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqY2hpcF90b19waW5tdXgoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBpbm11eF9pbmZvLCBjaGlwKTsKK30KKworc3RhdGljIGludCBzaF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCByZXQsIHBpbm11eF90eXBlOwpAQCAtMzE5LDI5ICs0MDEsMzAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCWlmICgoZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKKwlpZiAoKGdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJLyogc2V0dXAgcGluIGZ1bmN0aW9uIGhlcmUgaWYgbm8gZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggcGluICovCiAKLQlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHVtbXksICZpKSAhPSAwKQorCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIG9mZnNldCwgJmR1bW15LCAmaSkgIT0gMCkKIAkJcGlubXV4X3R5cGUgPSBQSU5NVVhfVFlQRV9GVU5DVElPTjsKIAllbHNlCiAJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfR1BJTzsKIAogCWlmIChwaW5tdXhfdHlwZSA9PSBQSU5NVVhfVFlQRV9GVU5DVElPTikgewotCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsCiAJCQkJICAgICAgIHBpbm11eF90eXBlLAogCQkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCiAJCQlnb3RvIGVycl91bmxvY2s7CiAKLQkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LAogCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKIAkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQkJQlVHKCk7CiAJfQogCi0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gcGlubXV4X3R5cGU7CiAKIAlyZXQgPSAwOwogIGVycl91bmxvY2s6CkBAIC0zNDksMTEgKzQzMiwxMCBAQAogIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19ncGlvX3JlcXVlc3QpOwogCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIHZvaWQgc2hfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwaW5tdXhfdHlwZTsKIApAQCAtMzYyLDIwICs0NDQsMjMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKLQlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOworCXBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gUElOTVVYX1RZUEVfTk9ORTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOwogCiBzdGF0aWMgaW50IHBpbm11eF9kaXJlY3Rpb24oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKIAkJCSAgICB1bnNpZ25lZCBncGlvLCBpbnQgbmV3X3Bpbm11eF90eXBlKQogewotCWludCByZXQsIHBpbm11eF90eXBlOworCWludCBwaW5tdXhfdHlwZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCXJldCA9IC1FSU5WQUw7CisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCiAJcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOwogCiAJc3dpdGNoIChwaW5tdXhfdHlwZSkgewpAQCAtNDAxLDEwMiArNDg2LDk5IEBACiAJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQlCVUcoKTsKIAotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IG5ld19waW5tdXhfdHlwZTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzIHw9IG5ld19waW5tdXhfdHlwZTsKIAogCXJldCA9IDA7CiAgZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIWdwaW9jKQotCQlnb3RvIGVycl9vdXQ7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9JTlBVVCk7CisJcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgb2Zmc2V0LCBQSU5NVVhfVFlQRV9JTlBVVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0gZXJyX291dDoKKwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKIAotc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAotCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKLQkJCQlpbnQgZG9fd3JpdGUpCitzdGF0aWMgdm9pZCBzaF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOwogCWludCBiaXQgPSAwOwogCi0JaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCWlmICghZ3Bpb2MgfHwgZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApCiAJCUJVRygpOwogCWVsc2UKLQkJdmFsdWUgPSByZWFkX3dyaXRlX3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLAotCQkJCSAgICAgICAxLCBiaXQsICEhdmFsdWUsIGRvX3dyaXRlKTsKLQotCXJldHVybiB2YWx1ZTsKKwkJZ3Bpb193cml0ZV9iaXQoZHIsIGJpdCwgdmFsdWUpOwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJaW50IHJldDsKIAotCWlmICghZ3Bpb2MpCi0JCWdvdG8gZXJyX291dDsKLQorCXNoX2dwaW9fc2V0X3ZhbHVlKGdwaW9jLCBvZmZzZXQsIHZhbHVlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIG9mZnNldCwgUElOTVVYX1RZUEVfT1VUUFVUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLSBlcnJfb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKIAotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB2YWx1ZSA9IDA7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOwogCi0JaWYgKCFncGlvYykKKwlpZiAoIWdwaW9jIHx8IGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKSB7CiAJCUJVRygpOwotCWVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCXZhbHVlID0gX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIDAsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHZhbHVlOworCXJldHVybiBncGlvX3JlYWRfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsIDEsIGJpdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZ2V0X3ZhbHVlKTsKIAotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWdwaW9jKQotCQlCVUcoKTsKLQllbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQl9CisJcmV0dXJuIHNoX2dwaW9fZ2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX3NldF92YWx1ZSk7CisKK3N0YXRpYyB2b2lkIHNoX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXNoX2dwaW9fc2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQsIHZhbHVlKTsKK30KIAogaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCkKIHsKLQlyZWdpc3RlcmVkX2dwaW8gPSBwaXA7Ci0JcHJfaW5mbygicGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAorCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSAmcGlwLT5jaGlwOworCisJcHJfaW5mbygic2ggcGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAogCQlwaXAtPm5hbWUsIHBpcC0+Zmlyc3RfZ3BpbywgcGlwLT5sYXN0X2dwaW8pOwogCi0JcmV0dXJuIDA7CisJc2V0dXBfZGF0YV9yZWdzKHBpcCk7CisKKwljaGlwLT5yZXF1ZXN0ID0gc2hfZ3Bpb19yZXF1ZXN0OworCWNoaXAtPmZyZWUgPSBzaF9ncGlvX2ZyZWU7CisJY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJY2hpcC0+Z2V0ID0gc2hfZ3Bpb19nZXQ7CisJY2hpcC0+ZGlyZWN0aW9uX291dHB1dCA9IHNoX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwljaGlwLT5zZXQgPSBzaF9ncGlvX3NldDsKKworCVdBUk5fT04ocGlwLT5maXJzdF9ncGlvICE9IDApOyAvKiBuZWVkcyB0ZXN0aW5nICovCisKKwljaGlwLT5sYWJlbCA9IHBpcC0+bmFtZTsKKwljaGlwLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNoaXAtPmJhc2UgPSBwaXAtPmZpcnN0X2dwaW87CisJY2hpcC0+bmdwaW8gPSAocGlwLT5sYXN0X2dwaW8gLSBwaXAtPmZpcnN0X2dwaW8pICsgMTsKKworCXJldHVybiBncGlvY2hpcF9hZGQoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDY0Yjc2OTAuLjNmMTM3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC01MSw3ICs1MSw3IEBACiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCX0KICNlbmRpZgogCi0JaXJxID0gaXJxX2RlbXV4KGV2dDJpcnEoaXJxKSk7CisJaXJxID0gaXJxX2RlbXV4KGludGNfZXZ0MmlycShpcnEpKTsKIAogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIAljdXJjdHggPSAodW5pb24gaXJxX2N0eCAqKWN1cnJlbnRfdGhyZWFkX2luZm8oKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA5NGRmNTZiLi43ZWEyNzA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xNCwyMSArMTQsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXR5cGVkZWYgTk9SRVRfVFlQRSB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSgKLQkJCQl1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCi0JCQkJdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCi0JCQkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAotCQkJCXVuc2lnbmVkIGxvbmcgdmJyX3JlZykgQVRUUklCX05PUkVUOwordHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKTsKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CiBleHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CitleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKIHZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQogewpAQCAtNDUsNiArNDYsMTIgQEAKICAqLwogaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKKwkvKiBvbGRlciB2ZXJzaW9ucyBvZiBrZXhlYy10b29scyBhcmUgcGFzc2luZworCSAqIHRoZSB6SW1hZ2UgZW50cnkgcG9pbnQgYXMgYSB2aXJ0dWFsIGFkZHJlc3MuCisJICovCisJaWYgKGltYWdlLT5zdGFydCAhPSBQSFlTQUREUihpbWFnZS0+c3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogdXBncmFkZSB5b3VyIGtleGVjLXRvb2xzICovCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzMsMTcgKzgwLDMzIEBACiAgKi8KIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKLQogCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0OwogCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgdmJyX3JlZzsKIAlyZWxvY2F0ZV9uZXdfa2VybmVsX3Qgcm5rOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisJdW5zaWduZWQgbG9uZyAqcHRyOworCWludCBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLQl2YnJfcmVnID0gKCh1bnNpZ25lZCBsb25nIClnZGJfdmJyX3ZlY3RvcikgLSAweDEwMDsKLSNlbHNlCi0JdmJyX3JlZyA9IDB4ODAwMDAwMDA7ICAvLyBkdW1teQorCS8qCisJICogTmlja2VkIGZyb20gdGhlIG1pcHMgdmVyc2lvbiBvZiBtYWNoaW5lX2tleGVjKCk6CisJICogVGhlIGdlbmVyaWMga2V4ZWMgY29kZSBidWlsZHMgYSBwYWdlIGxpc3Qgd2l0aCBwaHlzaWNhbAorCSAqIGFkZHJlc3Nlcy4gVXNlIHBoeXNfdG9fdmlydCgpIHRvIGNvbnZlcnQgdGhlbSB0byB2aXJ0dWFsLgorCSAqLworCWZvciAocHRyID0gJmltYWdlLT5oZWFkOyAoZW50cnkgPSAqcHRyKSAmJiAhKGVudHJ5ICYgSU5EX0RPTkUpOworCSAgICAgcHRyID0gKGVudHJ5ICYgSU5EX0lORElSRUNUSU9OKSA/CisJICAgICAgIHBoeXNfdG9fdmlydChlbnRyeSAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9ICh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoKnB0cik7CisJfQorCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAjZW5kaWYKKworCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKKwogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApAQCAtOTcsMTIgKzEyMCwzNyBAQAogCW1lbWNweSgodm9pZCAqKXJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfbmV3X2tlcm5lbCwKIAkJCQkJCXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CiAKLSAgICAgICAga2V4ZWNfaW5mbyhpbWFnZSk7CisJa2V4ZWNfaW5mbyhpbWFnZSk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDoKKwkJICAgICA6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKKwkJICAgICA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCiAJLyogbm93IGNhbGwgaXQgKi8KIAlybmsgPSAocmVsb2NhdGVfbmV3X2tlcm5lbF90KSByZWJvb3RfY29kZV9idWZmZXI7Ci0JKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLCBQMlNFR0FERFIoaW1hZ2UtPnN0YXJ0KSwgdmJyX3JlZyk7CisJKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoaW1hZ2UtPnN0YXJ0KSk7CisKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7CisKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CisKKwkvKiBDb252ZXJ0IHBhZ2UgbGlzdCBiYWNrIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcywgd2hhdCBhIG1lc3MuICovCisJZm9yIChwdHIgPSAmaW1hZ2UtPmhlYWQ7IChlbnRyeSA9ICpwdHIpICYmICEoZW50cnkgJiBJTkRfRE9ORSk7CisJICAgICBwdHIgPSAoKnB0ciAmIElORF9JTkRJUkVDVElPTikgPworCSAgICAgICBwaHlzX3RvX3ZpcnQoKnB0ciAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9IHZpcnRfdG9fcGh5cygqcHRyKTsKKwl9CisjZW5kaWYKKworCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBjNjZjYjMyLi5mY2M5OTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtNCw2ICs0LDggQEAKICAqCiAgKiBMQU5ESVNLL3NoNCBpcyBzdXBwb3J0ZWQuIE1heWJlLCBTSCBhcmNodGVjdHVyZSB3b3JrcyB3ZWxsLgogICoKKyAqIDIwMDktMDMtMTggTWFnbnVzIERhbW0gLSBBZGRlZCBLZXhlYyBKdW1wIHN1cHBvcnQKKyAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKICAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KQEAgLTE2LDIzICsxOCwxNDEgQEAKIAkvKiByNCA9IGluZGlyZWN0aW9uX3BhZ2UgICAqLwogCS8qIHI1ID0gcmVib290X2NvZGVfYnVmZmVyICovCiAJLyogcjYgPSBzdGFydF9hZGRyZXNzICAgICAgKi8KLQkvKiByNyA9IHZicl9yZWcgICAgICAgICAgICAqLwogCi0JbW92LmwJMTBmLHI4CSAgLyogUEFHRV9TSVpFICovCi0JbW92LmwJMTFmLHI5ICAgIC8qIFAyU0VHICovCisJbW92LmwJMTBmLCByMAkJLyogUEFHRV9TSVpFICovCisJYWRkCXI1LCByMAkJLyogc2V0dXAgbmV3IHN0YWNrIGF0IGVuZCBvZiBjb250cm9sIHBhZ2UgKi8KIAotCS8qICBzdGFjayBzZXR0aW5nICovCi0JYWRkCXI4LHI1Ci0JbW92CXI1LHIxNQorCS8qIHNhdmUgcjE1LT5yOCB0byBuZXcgc3RhY2sgKi8KKwltb3YubAlyMTUsIEAtcjAKKwltb3YJcjAsIHIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CiAKKwkvKiBzYXZlIG90aGVyIHJhbmRvbSByZWdpc3RlcnMgKi8KKwlzdHMubAltYWNsLCBALXIxNQorCXN0cy5sCW1hY2gsIEAtcjE1CisJc3RjLmwJZ2JyLCBALXIxNQorCXN0Yy5sCXNzciwgQC1yMTUKKwlzdGMubAlzciwgQC1yMTUKKwlzdHMubAlwciwgQC1yMTUKKwlzdGMubAlzcGMsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCXN0YwlzciwgcjgKKwlvcglyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJcjcsIEAtcjE1CisJbW92LmwJcjYsIEAtcjE1CisJbW92LmwJcjUsIEAtcjE1CisJbW92LmwJcjQsIEAtcjE1CisJbW92LmwJcjMsIEAtcjE1CisJbW92LmwJcjIsIEAtcjE1CisJbW92LmwJcjEsIEAtcjE1CisJbW92LmwJcjAsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwltb3YubAlyMCwgQC1yMTUKKworCW1vdi5sCXI0LCBALXIxNQkvKiBzYXZlIGluZGlyZWN0aW9uIHBhZ2UgYWdhaW4gKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmVmb3JlIGp1bXBpbmcgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdmEJMTFmLCByMAorCW1vdi5sCXIxNSwgQHIwCS8qIHNhdmUgcG9pbnRlciB0byBzdGFjayAqLworCisJanNyCUByNgkJLyogaGFuZCBvdmVyIGNvbnRyb2wgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdi5sCTExZiwgcjE1CS8qIGdldCBwb2ludGVyIHRvIHN0YWNrICovCisJbW92LmwJQHIxNSssIHI0CS8qIHJlc3RvcmUgcjQgdG8gZ2V0IGluZGlyZWN0aW9uIHBhZ2UgKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmFjayB0byBwcmV2aW91cyBzdGF0ZSAqLworCSBub3AKKworCS8qIG1ha2Ugc3VyZSBiYW5rMCBpcyBhY3RpdmUgYW5kIHJlc3RvcmUgcjAtPnI3ICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCB0byBiYW5rMSBhbmQgcmVzdG9yZSByMC0+cjcgKi8KKwltb3YubAkxMmYsIHI5CisJc3RjCXNyLCByOAorCW9yCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCBiYWNrIHRvIGJhbmswICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKworCS8qIHJlc3RvcmUgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyAqLworCWxkYy5sCUByMTUrLCBzcGMKKwlsZHMubAlAcjE1KywgcHIKKwlsZGMubAlAcjE1Kywgc3IKKwlsZGMubAlAcjE1Kywgc3NyCisJbGRjLmwJQHIxNSssIGdicgorCWxkcy5sCUByMTUrLCBtYWNoCisJbGRzLmwJQHIxNSssIG1hY2wKKworCS8qIHJlc3RvcmUgcjgtPnIxNSAqLworCW1vdi5sCUByMTUrLCByOAorCW1vdi5sCUByMTUrLCByOQorCW1vdi5sCUByMTUrLCByMTAKKwltb3YubAlAcjE1KywgcjExCisJbW92LmwJQHIxNSssIHIxMgorCW1vdi5sCUByMTUrLCByMTMKKwltb3YubAlAcjE1KywgcjE0CisJbW92LmwJQHIxNSssIHIxNQorCXJ0cworCSBub3AKKworc3dhcF9wYWdlczoKIAlicmEJMWYKLQltb3YJcjQscjAJICAvKiBjbWQgPSBpbmRpcmVjdGlvbl9wYWdlICovCisJIG1vdglyNCxyMAkgIC8qIGNtZCA9IGluZGlyZWN0aW9uX3BhZ2UgKi8KIDA6CiAJbW92LmwJQHI0KyxyMAkgIC8qIGNtZCA9ICppbmQrKyAqLwogCi0xOgkvKiBhZGRyID0gKGNtZCB8IFAyU0VHKSAmIDB4ZmZmZmZmZjAgKi8KKzE6CS8qIGFkZHIgPSBjbWQgJiAweGZmZmZmZmYwICovCiAJbW92CXIwLHIyCi0Jb3IJcjkscjIKIAltb3YJIy0xNixyMQogCWFuZAlyMSxyMgogCkBAIC00MCw1NyArMTYwLDcwIEBACiAJdHN0CSMxLHIwCiAJYnQJMmYKIAlicmEJMGIKLQltb3YJcjIscjUKKwkgbW92CXIyLHI1CiAKIDI6CS8qIGVsc2UgaWYoY21kICYgSU5EX0lORElSRUNUSU9OKSBpbmQgPSBhZGRyICAqLwogCXRzdAkjMixyMAogCWJ0CTNmCiAJYnJhCTBiCi0JbW92CXIyLHI0CisJIG1vdglyMixyNAogCi0zOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSBnb3RvIDYgICovCiszOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSByZXR1cm4gKi8KIAl0c3QJIzQscjAKIAlidAk0ZgotCWJyYQk2ZgotCW5vcAorCXJ0cworCSBub3AKIAogNDoJLyogZWxzZSBpZihjbWQgJiBJTkRfU09VUkNFKSBtZW1jcHkoZHN0LGFkZHIsUEFHRV9TSVpFKSAqLwogCXRzdAkjOCxyMAogCWJ0CTBiCiAKLQltb3YJcjgscjMKKwltb3YubAkxMGYscjMJICAvKiBQQUdFX1NJWkUgKi8KIAlzaGxyMglyMwogCXNobHIyCXIzCiA1OgogCWR0CXIzCi0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEJICAvKiAgMTZuKzQgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxICAgLyogIDE2bis4ICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMTIgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKKworCS8qIHJlZ3VsYXIga2V4ZWMganVzdCBvdmVyd3JpdGVzIHRoZSBkZXN0aW5hdGlvbiBwYWdlCisJICogd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZSBwYWdlLgorCSAqIGZvciB0aGUga2V4ZWMganVtcCBjYXNlIHdlIG5lZWQgdG8gc3dhcCB0aGUgY29udGVudHMKKwkgKiBvZiB0aGUgcGFnZXMuCisJICogdG8ga2VlcCBpdCBzaW1wbGUgc3dhcCB0aGUgY29udGVudHMgZm9yIGJvdGggY2FzZXMuCisJICovCisJbW92LmwJQCgwLCByMiksIHI4CisJbW92LmwJQCgwLCByNSksIHIxCisJbW92LmwJcjgsIEAoMCwgcjUpCisJbW92LmwJcjEsIEAoMCwgcjIpCisKKwltb3YubAlAKDQsIHIyKSwgcjgKKwltb3YubAlAKDQsIHI1KSwgcjEKKwltb3YubAlyOCwgQCg0LCByNSkKKwltb3YubAlyMSwgQCg0LCByMikKKworCW1vdi5sCUAoOCwgcjIpLCByOAorCW1vdi5sCUAoOCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDgsIHI1KQorCW1vdi5sCXIxLCBAKDgsIHIyKQorCisJbW92LmwJQCgxMiwgcjIpLCByOAorCW1vdi5sCUAoMTIsIHI1KSwgcjEKKwltb3YubAlyOCwgQCgxMiwgcjUpCisJbW92LmwJcjEsIEAoMTIsIHIyKQorCisJYWRkCSMxNixyNQorCWFkZAkjMTYscjIKIAliZgk1YgogCiAJYnJhCTBiCi0Jbm9wCi02OgotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JbGRjICAgcjcsIHZicgotI2VuZGlmCi0Jam1wIEByNgotCW5vcAorCSBub3AKIAogCS5hbGlnbiAyCiAxMDoKIAkubG9uZwlQQUdFX1NJWkUKIDExOgotCS5sb25nCVAyU0VHCisJLmxvbmcJMAorMTI6CisJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKIAogcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM3MGQyY2YuLjI0YzYwMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDMyLDYgKzQzMiw3IEBACiAJW0NQVV9TSDc3NjNdCT0gIlNINzc2MyIsCVtDUFVfU0g3NzcwXQk9ICJTSDc3NzAiLAogCVtDUFVfU0g3NzgwXQk9ICJTSDc3ODAiLAlbQ1BVX1NINzc4MV0JPSAiU0g3NzgxIiwKIAlbQ1BVX1NINzM0M10JPSAiU0g3MzQzIiwJW0NQVV9TSDc3ODVdCT0gIlNINzc4NSIsCisJW0NQVV9TSDc3ODZdCT0gIlNINzc4NiIsCiAJW0NQVV9TSDc3MjJdCT0gIlNINzcyMiIsCVtDUFVfU0hYM10JPSAiU0gtWDMiLAogCVtDUFVfU0g1XzEwMV0JPSAiU0g1LTEwMSIsCVtDUFVfU0g1XzEwM10JPSAiU0g1LTEwMyIsCiAJW0NQVV9NWEddCT0gIk1YLUciLAlbQ1BVX1NINzcyM10JPSAiU0g3NzIzIiwKQEAgLTQ0OCw3ICs0NDksNyBAQAogLyogU3ltYm9saWMgQ1BVIGZsYWdzLCBrZWVwIGluIHN5bmMgd2l0aCBhc20vY3B1LWZlYXR1cmVzLmggKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjcHVfZmxhZ3NbXSA9IHsKIAkibm9uZSIsICJmcHUiLCAicDJmbHVzaCIsICJtbXVhc3NvYyIsICJkc3AiLCAicGVyZmN0ciIsCi0JInB0ZWEiLCAibGxzYyIsICJsMiIsICJvcDMyIiwgTlVMTAorCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsICJwdGVhZXgiLCBOVUxMCiB9OwogCiBzdGF0aWMgdm9pZCBzaG93X2NwdWZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNoX2NwdWluZm8gKmMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYyBiL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjY0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogc3dzdXNwLmMgLSBTdXBlckggaGliZXJuYXRpb24gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKK3N0cnVjdCBzd3N1c3BfYXJjaF9yZWdzIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MDsKKworaW50IHBmbl9pc19ub3NhdmUodW5zaWduZWQgbG9uZyBwZm4pCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbl9wZm4gPSBfX3BhKCZfX25vc2F2ZV9iZWdpbikgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQQUdFX0FMSUdOKF9fcGEoJl9fbm9zYXZlX2VuZCkpID4+IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gKHBmbiA+PSBiZWdpbl9wZm4pICYmIChwZm4gPCBlbmRfcGZuKTsKK30KKwordm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworCWluaXRfZnB1KGN1cnJlbnQpOworfQorCit2b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDg0NTdmODMuLmMzNGUxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKQEAgLTQxLDE0ICs0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBOdWxsIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGZ1bmN0aW9ucyBmb3Igc3lzdGVtcyBsYWNraW5nIG9uZS4KLSAqLwotc3RhdGljIGN5Y2xlX3QgbnVsbF9ocHRfcmVhZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKikgPSBudWxsX3J0Y19nZXRfdGltZTsKIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IG51bGxfcnRjX3NldF90aW1lOwogCkBAIC0xMTIsNyArMTA0LDYgQEAKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKICNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfVElNRSAqLwogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKiBsYXN0IHRpbWUgdGhlIFJUQyBjbG9jayBnb3QgdXBkYXRlZCAqLwogc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlOwogCkBAIC0xNTYsNyArMTQ3LDYgQEAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgogfQotI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgdGltZXJfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0xODksNyArMTc5LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRpbWVyX2luaXRfc3lzZnModm9pZCkKIHsKLQlpbnQgcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7CisJaW50IHJldDsKKworCWlmICghc3lzX3RpbWVyKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjAwLDQyICsxOTUsMjEgQEAKIAogdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiAKLS8qCi0gKiBTaGFtZWxlc3NseSBiYXNlZCBvbiB0aGUgTUlQUyBhbmQgU3BhcmM2NCB3b3JrLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCBfX3JlYWRfbW9zdGx5OwotdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5ID0gMDsKLQotI2RlZmluZSBOU0VDX1BFUl9DWUNfU0hJRlQJMTAKLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKK3N0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKIAkubmFtZQkJPSAiU3VwZXJIIiwKLQkucmF0aW5nCQk9IDIwMCwKLQkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkucmVhZAkJPSBudWxsX2hwdF9yZWFkLAotCS5zaGlmdAkJPSAxNiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zaF9jbG9ja3NvdXJjZSh2b2lkKQotewotCWlmICghc2hfaHB0X2ZyZXF1ZW5jeSB8fCBjbG9ja3NvdXJjZV9zaC5yZWFkID09IG51bGxfaHB0X3JlYWQpCi0JCXJldHVybjsKLQotCWNsb2Nrc291cmNlX3NoLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNoX2hwdF9mcmVxdWVuY3ksCi0JCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKLQotCXRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChzaF9ocHRfZnJlcXVlbmN5LCBOU0VDX1BFUl9DWUNfU0hJRlQpOwotCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NoKTsKLX0KLQogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrcyA9IGNsb2Nrc291cmNlX3NoLnJlYWQoKTsKLQlyZXR1cm4gKHRpY2tzICogdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQpID4+IE5TRUNfUEVSX0NZQ19TSElGVDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzOworCisJLyogamlmZmllcyBiYXNlZCBzY2hlZF9jbG9jayBpZiBubyBjbG9ja3NvdXJjZSBpcyBpbnN0YWxsZWQgKi8KKwlpZiAoIWNsb2Nrc291cmNlX3NoLnJhdGluZykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqIChOU0VDX1BFUl9TRUMgLyBIWik7CisKKwljeWNsZXMgPSBjbG9ja3NvdXJjZV9zaC5yZWFkKCk7CisJcmV0dXJuIGN5YzJucygmY2xvY2tzb3VyY2Vfc2gsIGN5Y2xlcyk7CiB9CiAjZW5kaWYKIApAQCAtMjU5LDE3ICsyMzMsOCBAQAogCSAqIGluaXRpYWxpemVkIGZvciB1cy4KIAkgKi8KIAlzeXNfdGltZXIgPSBnZXRfc3lzX3RpbWVyKCk7CisJaWYgKHVubGlrZWx5KCFzeXNfdGltZXIpKQorCQlwYW5pYygiU3lzdGVtIHRpbWVyIG1pc3NpbmcuXG4iKTsKKwogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIGZvciBzeXN0ZW0gdGltZXJcbiIsIHN5c190aW1lci0+bmFtZSk7Ci0KLQotCWlmIChzeXNfdGltZXItPm9wcy0+cmVhZCkKLQkJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHN5c190aW1lci0+b3BzLT5yZWFkOwotCi0JaW5pdF9zaF9jbG9ja3NvdXJjZSgpOwotCi0JaWYgKHNoX2hwdF9mcmVxdWVuY3kpCi0JCXByaW50aygiVXNpbmcgJWx1LiUwM2x1IE1IeiBoaWdoIHByZWNpc2lvbiB0aW1lci5cbiIsCi0JCSAgICAgICAoKHNoX2hwdF9mcmVxdWVuY3kgKyA1MDApIC8gMTAwMCkgLyAxMDAwLAotCQkgICAgICAgKChzaF9ocHRfZnJlcXVlbmN5ICsgNTAwKSAvIDEwMDApICUgMTAwMCk7Ci0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCmluZGV4IGMzZDIzN2UuLjlhNzdhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwpAQCAtMzUsNyArMzUsOCBAQAogI2RlZmluZSBNVFUyX1RTUl8xCTB4ZmZmZTQzODUKICNkZWZpbmUgTVRVMl9UQ05UXzEJMHhmZmZlNDM4NgkvKiAxNi1iaXQgY291bnRlciAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMykKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4OAogI2Vsc2UKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4YQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCmluZGV4IDBkYjNmOTUuLjEwYjVhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKQEAgLTE0Niw3ICsxNDYsMTQgQEAKIAlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKIAlfdG11X3NldF9pcnEoVE1VMCx0bXUwX2Nsb2NrZXZlbnQubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKIAotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCXN3aXRjaCAodG11MF9jbG9ja2V2ZW50Lm1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIzNyw2ICsyNDQsNyBAQAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIAljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOwogI2VuZGlmCkBAIC0yNTQsNyArMjYyLDE0IEBACiAKIAlfdG11X3N0YXJ0KFRNVTEpOwogCi0Jc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOworCWNsb2Nrc291cmNlX3NoLnJhdGluZyA9IDIwMDsKKwljbG9ja3NvdXJjZV9zaC5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMik7CisJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHRtdV90aW1lcl9yZWFkOworCWNsb2Nrc291cmNlX3NoLnNoaWZ0ID0gMTA7CisJY2xvY2tzb3VyY2Vfc2gubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY2xrX2dldF9yYXRlKCZ0bXUxX2NsayksCisJCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9zaC5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zaCk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhmcmVxdWVuY3ksIE5TRUNfUEVSX1NFQywKIAkJCQkgICAgICB0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOwpAQCAtMjY0LDYgKzI3OSw3IEBACiAJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZ0bXUwX2Nsb2NrZXZlbnQpOwogCiAJdG11MF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCXRtdTBfY2xvY2tldmVudC5yYXRpbmcgPSAxMDA7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnRtdTBfY2xvY2tldmVudCk7CiAKQEAgLTI3NCw3ICsyOTAsNiBAQAogCS5pbml0CQk9IHRtdV90aW1lcl9pbml0LAogCS5zdGFydAkJPSB0bXVfdGltZXJfc3RhcnQsCiAJLnN0b3AJCT0gdG11X3RpbWVyX3N0b3AsCi0JLnJlYWQJCT0gdG11X3RpbWVyX3JlYWQsCiB9OwogCiBzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCmluZGV4IDdiNGI4MmJkLi5kMGIyYTcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKQEAgLTE1LDcgKzE1LDEwIEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19QTUJfRklYRUQKKwkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgKENPTkZJR19NRU1PUllfU1RBUlQgJiAweDFmZmZmZmZmKSArCisJICAgIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOworI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCiAJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwogI2Vsc2UKIAkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDU1NWVjOTcuLjEwYzI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTU3LDcgKzU3LDcgQEAKIAlib29sCiAJZGVmYXVsdCB5IGlmIENQVV9TSDUKIAotY29uZmlnIFBNQgorY29uZmlnIFBNQl9FTkFCTEUKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgogCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKIAlzZWxlY3QgMzJCSVQKQEAgLTY3LDYgKzY3LDMzIEBACiAJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKIAkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KIAorY2hvaWNlCisJcHJvbXB0ICJQTUIgaGFuZGxpbmcgdHlwZSIKKwlkZXBlbmRzIG9uIFBNQl9FTkFCTEUKKwlkZWZhdWx0IFBNQl9GSVhFRAorCitjb25maWcgUE1CCisJYm9vbCAiUE1CIgorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCisJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKKwkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KKworY29uZmlnIFBNQl9GSVhFRAorCWJvb2wgImZpeGVkIFBNQiIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBcCisJCQkJCSAgIENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBmaXhlZCBQTUIgbWFwcGluZ3MgYXJlIGluaGVyaXRlZAorCSAgZnJvbSB0aGUgYm9vdCBsb2FkZXIsIGFuZCB0aGUga2VybmVsIGRvZXMgbm90IGF0dGVtcHQgZHluYW1pYworCSAgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgY2xvc2VzdCB0byBsZWdhY3kgMjktYml0IHBoeXNpY2FsIG1vZGUsCisJICBhbmQgYWxsb3dzIHN5c3RlbXMgdG8gc3VwcG9ydCB1cCB0byA1MTJNaUIgb2Ygc3lzdGVtIG1lbW9yeS4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBYMlRMQgogCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBUTEIgbW9kZSIKIAlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMiBiL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKaW5kZXggY2IyZjNmMi4uOTg2YTFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL21tL01ha2VmaWxlXzMyCkBAIC0yNSw4ICsyNSwxMCBAQAogZW5kaWYKIAogaWZkZWYgQ09ORklHX01NVQotb2JqLSQoQ09ORklHX0NQVV9TSDMpCSs9IHRsYi1zaDMubwotb2JqLSQoQ09ORklHX0NQVV9TSDQpCSs9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9TSDMpCQk6PSB0bGItc2gzLm8KK3RsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vCit0bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubworb2JqLXkJCQkJKz0gJCh0bGIteSkKIGlmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCiBvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHBnLXNoNC5vCiBvYmotJChDT05GSUdfU0g3NzA1X0NBQ0hFXzMyS0IpCSs9IHBnLXNoNzcwNS5vCkBAIC0zNSw2ICszNyw3IEBACiAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KIG9iai0kKENPTkZJR19QTUIpCQkrPSBwbWIubworb2JqLSQoQ09ORklHX1BNQl9GSVhFRCkJCSs9IHBtYi1maXhlZC5vCiBvYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWEubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYwppbmRleCA4ZTkxMmExLi5jZDhjM2JmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKQEAgLTM3LDEwICszNyw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocC0+bW0pCi0JCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAlMDJseFxuIiwgcGlkLAorCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogJTA0bHhcbiIsIHBpZCwKIAkJCQkgICBjcHVfYXNpZChzbXBfcHJvY2Vzc29yX2lkKCksIHAtPm1tKSk7Ci0JCWVsc2UKLQkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6IChub25lKVxuIiwgcGlkKTsKIAl9CiAKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IDMyOTQ2ZmIuLjYwY2M0ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC01OSwxMSArNTksMTMgQEAKIAlpZiAoaXNfcGNpX21lbWFkZHIocGh5c19hZGRyKSAmJiBpc19wY2lfbWVtYWRkcihsYXN0X2FkZHIpKQogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfYWRkcjsKIAorI2lmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJaWYgKHBoeXNfYWRkciA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpCiAJCXJldHVybiBOVUxMOworI2VuZGlmCiAKIAkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCkBAIC04MSw3ICs4Myw3IEBACiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCW9yaWdfYWRkciA9IGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWZkZWYgQ09ORklHX1BNQgogCS8qCiAJICogRmlyc3QgdHJ5IHRvIHJlbWFwIHRocm91Z2ggdGhlIFBNQiBvbmNlIGEgdmFsaWQgVk1BIGhhcyBiZWVuCiAJICogZXN0YWJsaXNoZWQuIFNtYWxsZXIgYWxsb2NhdGlvbnMgKG9yIHRoZSByZXN0IG9mIHRoZSBzaXplCkBAIC0xMTksMTAgKzEyMSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgc2VnID0gUFhTRUcodmFkZHIpOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoc2VnIDwgUDNTRUcgfHwgc2VnID49IFAzX0FERFJfTUFYIHx8IGlzX3BjaV9tZW1hZGRyKHZhZGRyKSkKKwlpZiAoc2VnIDwgUDNTRUcgfHwgdmFkZHIgPj0gUDNfQUREUl9NQVggfHwgaXNfcGNpX21lbWFkZHIodmFkZHIpKQogCQlyZXR1cm47CiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CCiAJLyoKIAkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCiAJICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLWZpeGVkLmMgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzhlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBhcmNoL3NoL21tL2ZpeGVkX3BtYi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKK3N0YXRpYyBpbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZml4ZWRfcG1iX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1CX0VOVFJZX01BWDsgaSsrKSB7CisJCWFkZHIgPSBQTUJfREFUQSArIChpIDw8IFBNQl9FX1NISUZUKTsKKwkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQlpZiAoIShkYXRhICYgUE1CX1YpKQorCQkJY29udGludWU7CisKKwkJaWYgKGRhdGEgJiBQTUJfQykgeworI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKKwkJCWRhdGEgfD0gUE1CX1dUOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCQkJZGF0YSAmPSB+UE1CX1dUOworI2Vsc2UKKwkJCWRhdGEgJj0gfihQTUJfQyB8IFBNQl9XVCk7CisjZW5kaWYKKwkJfQorCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJfQorCisJYmFja190b19jYWNoZWQoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChmaXhlZF9wbWJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCA4NDI0MTY3Li5iMWE3MTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC00MDIsMyArNDA0LDM5IEBACiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChwbWJfZGVidWdmc19pbml0KTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbWJfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0YXRpYyBwbV9tZXNzYWdlX3QgcHJldl9zdGF0ZTsKKworCS8qIFJlc3RvcmUgdGhlIFBNQiBhZnRlciBhIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uICovCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OICYmCisJICAgIHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJCXNwaW5fbG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCQlmb3IgKHBtYmUgPSBwbWJfbGlzdDsgcG1iZTsgcG1iZSA9IHBtYmUtPm5leHQpCisJCQlzZXRfcG1iX2VudHJ5KHBtYmUpOworCQlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCX0KKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1iX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcG1iX3N5c2Rldl9zdXNwZW5kKGRldiwgUE1TR19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBwbWJfc3lzZGV2X2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IHBtYl9zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gcG1iX3N5c2Rldl9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbWJfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJnBtYl9zeXNkZXZfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHBtYl9zeXNkZXZfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYjNlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBhcmNoL3NoL21tL3RsYi1wdGVhZXguYworICoKKyAqIFRMQiBvcGVyYXRpb25zIGZvciBTSC1YMyBDUFVzIGZlYXR1cmluZyBQVEUgQVNJRCBFeHRlbnNpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBwdGV2YWw7CisJdW5zaWduZWQgbG9uZyB2cG47CisKKwkvKiBQdHJhY2UgbWF5IGNhbGwgdGhpcyByb3V0aW5lLiAqLworCWlmICh2bWEgJiYgY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCisJCXJldHVybjsKKworI2lmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCisJeworCQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKworCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCQkJaWYgKCF0ZXN0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncykpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwdGVfdmFsKHB0ZSkgJiBQVEVfUEhZU19NQVNLOworCQkJCV9fZmx1c2hfd2JhY2tfcmVnaW9uKCh2b2lkICopUDFTRUdBRERSKHBoeXMpLAorCQkJCQkJICAgICBQQUdFX1NJWkUpOworCQkJCV9fc2V0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCisJdnBuID0gYWRkcmVzcyAmIE1NVV9WUE5fTUFTSzsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CisKKwkvKiBTZXQgUFRFQUVYICovCisJX19yYXdfd3JpdGVsKGdldF9hc2lkKCksIE1NVV9QVEVBRVgpOworCisJcHRldmFsID0gcHRlLnB0ZV9sb3c7CisKKwkvKiBTZXQgUFRFQSByZWdpc3RlciAqLworI2lmZGVmIENPTkZJR19YMlRMQgorCS8qCisJICogRm9yIHRoZSBleHRlbmRlZCBtb2RlIFRMQiB0aGlzIGlzIHRyaXZpYWwsIG9ubHkgdGhlIEVTWiBhbmQKKwkgKiBFUFIgYml0cyBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIFBURUEsIHdpdGggdGhlIHJlbWFpbmRlciBvZgorCSAqIHRoZSBwcm90ZWN0aW9uIGJpdHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgY29tcGF0LW1vZGUgU1oKKwkgKiBhbmQgUFIgYml0cywgd2hpY2ggYXJlIGNsZWFyZWQpIGJlaW5nIHdyaXR0ZW4gb3V0IGluIFBURUwuCisJICovCisJX19yYXdfd3JpdGVsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOworI2VuZGlmCisKKwkvKiBTZXQgUFRFTCByZWdpc3RlciAqLworCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCisjaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSAorCXB0ZXZhbCB8PSBfUEFHRV9XVDsKKyNlbmRpZgorCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOworCisJLyogTG9hZCB0aGUgVExCICovCisJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFdoaWxlIFNILVgyIGV4dGVuZGVkIFRMQiBtb2RlIHNwbGl0cyBvdXQgdGhlIG1lbW9yeS1tYXBwZWQgSS9VVExCCisgKiBkYXRhIGFycmF5cywgU0gtWDMgY29yZXMgd2l0aCBQVEVBRVggc3BsaXQgb3V0IHRoZSBtZW1vcnktbWFwcGVkCisgKiBhZGRyZXNzIGFycmF5cy4gSW4gY29tcGF0IG1vZGUgdGhlIHNlY29uZCBhcnJheSBpcyBpbmFjY2Vzc2libGUsIHdoaWxlCisgKiBpbiBleHRlbmRlZCBtb2RlLCB0aGUgbGVnYWN5IDgtYml0IEFTSUQgZmllbGQgaW4gYWRkcmVzcyBhcnJheSAxIGhhcworICogdW5kZWZpbmVkIGJlaGF2aW91ci4KKyAqLwordm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJanVtcF90b191bmNhY2hlZCgpOworCV9fcmF3X3dyaXRlbChwYWdlLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKKwlfX3Jhd193cml0ZWwoYXNpZCwgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIgfCBNTVVfUEFHRV9BU1NPQ19CSVQpOworCWJhY2tfdG9fY2FjaGVkKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYwppbmRleCAxZDk3ZDY0Li4xYjlkNDMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCWNhc2UgQ1BVX1NINzc4MDoKIAljYXNlIENQVV9TSDc3ODE6CiAJY2FzZSBDUFVfU0g3Nzg1OgorCWNhc2UgQ1BVX1NINzc4NjoKIAljYXNlIENQVV9TSDc3MjM6CiAJY2FzZSBDUFVfU0hYMzoKIAkJbG1vZGVsID0gJm9wX21vZGVsX3NoNGFfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDI4NGI3ZTguLjg0NzdiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTUyLDMgKzUyLDYgQEAKIEFQMzI1UlhBCQlTSF9BUDMyNVJYQQogU0g3NzYzUkRQCQlTSF9TSDc3NjNSRFAKIFNINzc4NUxDUgkJU0hfU0g3Nzg1TENSCitVUlFVRUxMCQkJU0hfVVJRVUVMTAorRVNQVAkJCVNIX0VTUFQKK1BPTEFSSVMJCQlTSF9QT0xBUklTCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBiZjUwZDBjLi45ODJhMTJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTUwLDYgKzUwLDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMHgwMDIyCiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkweDAwMjMKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KICNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTB4NTAwMQogI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkweDUwMDIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCmluZGV4IGVjODFjZGUuLmVlMzhlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaApAQCAtNTcsNiArNTcsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqbXApCiB7CisJaWYgKCFtcC0+ZnVsbG1tKQorCQlmbHVzaF90bGJfcGVuZGluZygpOwogCWlmIChtcC0+bmVlZF9mbHVzaCkgewogCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKG1wLT5wYWdlcywgbXAtPnBhZ2VzX25yKTsKIAkJbXAtPnBhZ2VzX25yID0gMDsKQEAgLTc4LDggKzgwLDYgQEAKIAogCWlmIChtcC0+ZnVsbG1tKQogCQltcC0+ZnVsbG1tID0gMDsKLQllbHNlCi0JCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiAKIAkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KIAljaGVja19wZ3RfY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKaW5kZXggMWMzNzhkOC4uZDBkNmE1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTlzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKQEAgLTI1Miw5ICsyNTIsMTAgQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKIHsKLQljcHVtYXNrX3QgbWFzayA9IGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eTsKKwljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1aWQ7CiAKKwljcHVtYXNrX2NvcHkoJm1hc2ssIGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eSk7CiAJaWYgKGNwdXNfZXF1YWwobWFzaywgQ1BVX01BU0tfQUxMKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CkBAIC04MDUsNyArODA2LDcgQEAKIAkJICAgICEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfUEVSX0NQVSkpIHsKIAkJCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSkKIAkJCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsCi0JCQkJCSZpcnFfZGVzY1tpcnFdLmFmZmluaXR5KTsKKwkJCQkJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaXJxXS5sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCA2Y2QxYTViLi43OTQ1N2Y2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAKICAqICAgIElmIHRoZSBhZGRyZXNzIHNwYWNlIGlzIG5vbi1zaGFyZWQgKGllLiBtbS0+Y291bnQgPT0gMSkgd2UgYXZvaWQKICAqICAgIGNyb3NzIGNhbGxzIHdoZW4gd2Ugd2FudCB0byBmbHVzaCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcydzCiAgKiAgICB0bGIgc3RhdGUuICBUaGlzIGlzIGRvbmUgYnkgY2xlYXJpbmcgYWxsIGNwdSBiaXRzIGV4Y2VwdCB0aGUgY3VycmVudAotICogICAgcHJvY2Vzc29yJ3MgaW4gY3VycmVudC0+YWN0aXZlX21tLT5jcHVfdm1fbWFzayBhbmQgcGVyZm9ybWluZyB0aGUKKyAqICAgIHByb2Nlc3NvcidzIGluIGN1cnJlbnQtPm1tLT5jcHVfdm1fbWFzayBhbmQgcGVyZm9ybWluZyB0aGUKICAqICAgIGZsdXNoIGxvY2FsbHkgb25seS4gIFRoaXMgd2lsbCBmb3JjZSBhbnkgc3Vic2VxdWVudCBjcHVzIHdoaWNoIHJ1bgogICogICAgdGhpcyB0YXNrIHRvIGZsdXNoIHRoZSBjb250ZXh0IGZyb20gdGhlIGxvY2FsIHRsYiBpZiB0aGUgcHJvY2VzcwogICogICAgbWlncmF0ZXMgdG8gYW5vdGhlciBjcHUgKGFnYWluKS4KQEAgLTEwNzQsNyArMTA3NCw3IEBACiAJdTMyIGN0eCA9IENUWF9IV0JJVFMobW0tPmNvbnRleHQpOwogCWludCBjcHUgPSBnZXRfY3B1KCk7CiAKLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tICYmIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEpCisJaWYgKG1tID09IGN1cnJlbnQtPm1tICYmIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEpCiAJCW1tLT5jcHVfdm1fbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAJZWxzZQogCQlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoJnhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCmluZGV4IGY5M2M0MmEuLmE4MDAwYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKQEAgLTUxLDcgKzUxLDcgQEAKIC8qMTUwKi8JLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfaW5vdGlmeV9pbml0LCBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gsIHN5c19wb2xsLCBzeXNfZ2V0ZGVudHM2NAogCS53b3JkIGNvbXBhdF9zeXNfZmNudGw2NCwgc3lzX2lub3RpZnlfcm1fd2F0Y2gsIGNvbXBhdF9zeXNfc3RhdGZzLCBjb21wYXRfc3lzX2ZzdGF0ZnMsIHN5c19vbGR1bW91bnQKIC8qMTYwKi8JLndvcmQgY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0eSwgY29tcGF0X3N5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzMzJfZ2V0ZG9tYWlubmFtZSwgc3lzMzJfc2V0ZG9tYWlubmFtZSwgc3lzX25pc19zeXNjYWxsCi0JLndvcmQgc3lzX3F1b3RhY3RsLCBzeXNfc2V0X3RpZF9hZGRyZXNzLCBjb21wYXRfc3lzX21vdW50LCBzeXNfdXN0YXQsIHN5czMyX3NldHhhdHRyCisJLndvcmQgc3lzX3F1b3RhY3RsLCBzeXNfc2V0X3RpZF9hZGRyZXNzLCBjb21wYXRfc3lzX21vdW50LCBjb21wYXRfc3lzX3VzdGF0LCBzeXMzMl9zZXR4YXR0cgogLyoxNzAqLwkud29yZCBzeXMzMl9sc2V0eGF0dHIsIHN5czMyX2ZzZXR4YXR0ciwgc3lzX2dldHhhdHRyLCBzeXNfbGdldHhhdHRyLCBjb21wYXRfc3lzX2dldGRlbnRzCiAJLndvcmQgc3lzX3NldHNpZCwgc3lzX2ZjaGRpciwgc3lzMzJfZmdldHhhdHRyLCBzeXNfbGlzdHhhdHRyLCBzeXNfbGxpc3R4YXR0cgogLyoxODAqLwkud29yZCBzeXMzMl9mbGlzdHhhdHRyLCBzeXNfcmVtb3ZleGF0dHIsIHN5c19scmVtb3ZleGF0dHIsIGNvbXBhdF9zeXNfc2lncGVuZGluZywgc3lzX25pX3N5c2NhbGwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwppbmRleCAyZGIzYzIyLi5kYjMxMGFhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCkBAIC03MjksNyArNzI5LDcgQEAKIAogCWlycV9lbnRlcigpOwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1swXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdSgwLCBpcnFfdG9fZGVzYygwKSk7CiAKIAlpZiAodW5saWtlbHkoIWV2dC0+ZXZlbnRfaGFuZGxlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCBmZGU1MTBiLi40MzQyMjRlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtODYsNyArODYsNyBAQAogCQlkcm9wX3NrYi0+ZGV2ID0gZGV2OwogCQkvKiBSZWFkIGEgcGFja2V0IGludG8gZHJvcF9za2IgYW5kIGRvbid0IGRvIGFueXRoaW5nIHdpdGggaXQuICovCiAJCSgqbHAtPnJlYWQpKGxwLT5mZCwgZHJvcF9za2IsIGxwKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTksOCArOTksOCBAQAogCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwogCQlza2ItPnByb3RvY29sID0gKCpscC0+cHJvdG9jb2wpKHNrYik7CiAKLQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQlscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcmV0dXJuIHBrdF9sZW47CiAJfQpAQCAtMjI0LDggKzIyNCw4IEBACiAJbGVuID0gKCpscC0+d3JpdGUpKGxwLT5mZCwgc2tiLCBscCk7CiAKIAlpZiAobGVuID09IHNrYi0+bGVuKSB7Ci0JCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl9CiAJZWxzZSBpZiAobGVuID09IDApIHsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJbHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJfQogCWVsc2UgewogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwpAQCAtMjQ4LDEyICsyNDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnVtbF9uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmbHAtPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCB1bWxfbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybjsKQEAgLTM3Nyw2ICszNzEsMTggQEAKIAlmcmVlX25ldGRldihuZXRkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVtbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gdW1sX25ldF9vcGVuLAorCS5uZG9fc3RvcCAJCT0gdW1sX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gdW1sX25ldF9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdW1sX25ldF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0IAk9IHVtbF9uZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHVtbF9uZXRfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUgCT0gdW1sX25ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBFbnN1cmVzIHRoYXQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyIGlzIGNhbGxlZCBvbmx5IG9uY2UgYnkKICAqIGV0aF9jb25maWd1cmUuICBXaWxsIGJlIHNldCBpbiBhbiBpbml0Y2FsbC4KQEAgLTQ3MywxNCArNDc5LDcgQEAKIAogCXNldF9ldGhlcl9tYWMoZGV2LCBkZXZpY2UtPm1hYyk7CiAJZGV2LT5tdHUgPSB0cmFuc3BvcnQtPnVzZXItPm10dTsKLQlkZXYtPm9wZW4gPSB1bWxfbmV0X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB1bWxfbmV0X3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gdW1sX25ldF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IHVtbF9uZXRfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdW1sX25ldF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gdW1sX25ldF90eF90aW1lb3V0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gdW1sX25ldF9zZXRfbWFjOwotCWRldi0+Y2hhbmdlX210dSA9IHVtbF9uZXRfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdW1sX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ1bWxfbmV0X2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoSFogPj4gMSk7CiAJZGV2LT5pcnEgPSBVTV9FVEhfSVJROwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oCmluZGV4IGQ4NDNjNzkuLjVjMzY3ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbmV0X2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF9rZXJuLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0bDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCWludCBmZDsKIAl1bnNpZ25lZCBjaGFyIG1hY1tFVEhfQUxFTl07CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IDNkN2FhZDAuLjMzNmI2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC00Miw3ICs0Miw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJjMmZiYWQuLjA2YzAyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIGNvbmZpZyA2NEJJVAogCWJvb2wgIjY0LWJpdCBrZXJuZWwiIGlmIEFSQ0ggPSAieDg2IgogCWRlZmF1bHQgQVJDSCA9ICJ4ODZfNjQiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNheSB5ZXMgdG8gYnVpbGQgYSA2NC1iaXQga2VybmVsIC0gZm9ybWVybHkga25vd24gYXMgeDg2XzY0CiAJICBTYXkgbm8gdG8gYnVpbGQgYSAzMi1iaXQga2VybmVsIC0gZm9ybWVybHkga25vd24gYXMgaTM4NgogCkBAIC0zNCwxMiArMzQsMTUgQEAKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCXNlbGVjdCBIQVZFX0tWTSBpZiAoKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIgJiYgIVg4Nl9WSVNXUyAmJiAhWDg2X05VTUFRKSB8fCBYODZfNjQpCi0Jc2VsZWN0IEhBVkVfQVJDSF9LR0RCIGlmICFYODZfVk9ZQUdFUgorCXNlbGVjdCBIQVZFX0tWTQorCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaWYgWDg2XzMyCiAJc2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAlzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQKKwlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAorCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0cmluZwpAQCAtMTMzLDE4ICsxMzYsMTkgQEAKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQotCWRlZl9ib29sIFg4Nl82NF9TTVAgfHwgKFg4Nl9TTVAgJiYgIVg4Nl9WT1lBR0VSKQorCWRlZl9ib29sIHkKKworY29uZmlnIEhBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBIQVZFX0NQVU1BU0tfT0ZfQ1BVX01BUAogCWRlZl9ib29sIFg4Nl82NF9TTVAKIAogY29uZmlnIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAhU01QIHx8ICFYODZfVk9ZQUdFUgogCiBjb25maWcgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCiAKIGNvbmZpZyBaT05FX0RNQTMyCiAJYm9vbApAQCAtMTY1LDYgKzE2OSw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xNzQsMTEgKzE4MSw2IEBACiAJZGVwZW5kcyBvbiBHRU5FUklDX0hBUkRJUlFTICYmIFNNUAogCWRlZmF1bHQgeQogCi1jb25maWcgWDg2X1NNUAotCWJvb2wKLQlkZXBlbmRzIG9uIFNNUCAmJiAoKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIpIHx8IFg4Nl82NCkKLQlkZWZhdWx0IHkKLQogY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU01QCkBAIC0xOTQsMTkgKzE5NiwxNyBAQAogY29uZmlnIFg4Nl9IVAogCWJvb2wKIAlkZXBlbmRzIG9uIFNNUAotCWRlcGVuZHMgb24gKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIpIHx8IFg4Nl82NAotCWRlZmF1bHQgeQotCi1jb25maWcgWDg2X0JJT1NfUkVCT09UCi0JYm9vbAotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBYODZfVFJBTVBPTElORQogCWJvb2wKLQlkZXBlbmRzIG9uIFg4Nl9TTVAgfHwgKFg4Nl9WT1lBR0VSICYmIFNNUCkgfHwgKDY0QklUICYmIEFDUElfU0xFRVApCisJZGVwZW5kcyBvbiBTTVAgfHwgKDY0QklUICYmIEFDUElfU0xFRVApCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBYODZfMzJfTEFaWV9HUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhQ0NfU1RBQ0tQUk9URUNUT1IKKwogY29uZmlnIEtUSU1FX1NDQUxBUgogCWRlZl9ib29sIFg4Nl8zMgogc291cmNlICJpbml0L0tjb25maWciCkBAIC0yNDQsMTQgKzI0NCwyNCBAQAogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCi1jb25maWcgWDg2X0hBU19CT09UX0NQVV9JRAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl9WT1lBR0VSCitjb25maWcgWDg2X1gyQVBJQworCWJvb2wgIlN1cHBvcnQgeDJhcGljIgorCWRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUMgJiYgWDg2XzY0CisJLS0taGVscC0tLQorCSAgVGhpcyBlbmFibGVzIHgyYXBpYyBzdXBwb3J0IG9uIENQVXMgdGhhdCBoYXZlIHRoaXMgZmVhdHVyZS4KKworCSAgVGhpcyBhbGxvd3MgMzItYml0IGFwaWMgSURzIChzbyBpdCBjYW4gc3VwcG9ydCB2ZXJ5IGxhcmdlIHN5c3RlbXMpLAorCSAgYW5kIGFjY2Vzc2VzIHRoZSBsb2NhbCBhcGljIHZpYSBNU1JzIG5vdCB2aWEgbW1pby4KKworCSAgKCBPbiBjZXJ0YWluIENQVSBtb2RlbHMgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBJTlRSX1JFTUFQIHRvbywKKwkgICAgdG8gZ2V0IGZ1bmN0aW9uYWwgeDJhcGljIG1vZGUuICkKKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAogY29uZmlnIFNQQVJTRV9JUlEKIAlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgogCWRlcGVuZHMgb24gUENJX01TSSB8fCBIVF9JUlEKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHNwYXJzZSBpcnFzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzdHJvCiAJICBrZXJuZWxzIHRoYXQgd2FudCB0byBkZWZpbmUgYSBoaWdoIENPTkZJR19OUl9DUFVTIHZhbHVlIGJ1dCBzdGlsbAogCSAgd2FudCB0byBoYXZlIGxvdyBrZXJuZWwgbWVtb3J5IGZvb3RwcmludCBvbiBzbWFsbGVyIG1hY2hpbmVzLgpAQCAtMjY1LDExNCArMjc1LDE0MCBAQAogCWJvb2wgIk1vdmUgaXJxIGRlc2Mgd2hlbiBjaGFuZ2luZyBpcnEgc21wX2FmZmluaXR5IgogCWRlcGVuZHMgb24gU1BBUlNFX0lSUSAmJiBOVU1BCiAJZGVmYXVsdCBuCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBtb3ZpbmcgaXJxX2Rlc2MgdG8gY3B1L25vZGUgdGhhdCBpcnEgd2lsbCB1c2UgaGFuZGxlZC4KIAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAotY29uZmlnIFg4Nl9GSU5EX1NNUF9DT05GSUcKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfTVBQQVJTRSB8fCBYODZfVk9ZQUdFUgotCiBjb25maWcgWDg2X01QUEFSU0UKIAlib29sICJFbmFibGUgTVBTIHRhYmxlIiBpZiBBQ1BJCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBGb3Igb2xkIHNtcCBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyIGFjcGkgc3VwcG9ydC4gTmV3ZXIgc3lzdGVtcwogCSAgKGVzcCB3aXRoIDY0Yml0IGNwdXMpIHdpdGggYWNwaSBzdXBwb3J0LCBNQURUIGFuZCBEU0RUIHdpbGwgb3ZlcnJpZGUgaXQKIAotY2hvaWNlCi0JcHJvbXB0ICJTdWJhcmNoaXRlY3R1cmUgVHlwZSIKLQlkZWZhdWx0IFg4Nl9QQworY29uZmlnIFg4Nl9CSUdTTVAKKwlib29sICJTdXBwb3J0IGZvciBiaWcgU01QIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gOCBDUFVzIgorCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGlzIG5lZWRlZCBmb3IgdGhlIHN5c3RlbXMgdGhhdCBoYXZlIG1vcmUgdGhhbiA4IENQVXMKIAotY29uZmlnIFg4Nl9QQwotCWJvb2wgIlBDLWNvbXBhdGlibGUiCi0JaGVscAotCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdXIgY29tcHV0ZXIgaXMgYSBzdGFuZGFyZCBQQyBvciBjb21wYXRpYmxlLgoraWYgWDg2XzMyCitjb25maWcgWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJYm9vbCAiU3VwcG9ydCBmb3IgZXh0ZW5kZWQgKG5vbi1QQykgeDg2IHBsYXRmb3JtcyIKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBJZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbiB0aGVuIHRoZSBrZXJuZWwgd2lsbCBvbmx5IHN1cHBvcnQKKwkgIHN0YW5kYXJkIFBDIHBsYXRmb3Jtcy4gKHdoaWNoIGNvdmVycyB0aGUgdmFzdCBtYWpvcml0eSBvZgorCSAgc3lzdGVtcyBvdXQgdGhlcmUuKQorCisJICBJZiB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uIHRoZW4geW91J2xsIGJlIGFibGUgdG8gc2VsZWN0IHN1cHBvcnQKKwkgIGZvciB0aGUgZm9sbG93aW5nIChub24tUEMpIDMyIGJpdCB4ODYgcGxhdGZvcm1zOgorCQlBTUQgRWxhbgorCQlOVU1BUSAoSUJNL1NlcXVlbnQpCisJCVJEQyBSLTMyMXggU29DCisJCVNHSSAzMjAvNTQwIChWaXN1YWwgV29ya3N0YXRpb24pCisJCVN1bW1pdC9FWEEgKElCTSB4NDQwKQorCQlVbmlzeXMgRVM3MDAwIElBMzIgc2VyaWVzCisKKwkgIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBzeXN0ZW1zLCBvciBpZiB5b3Ugd2FudCB0byBidWlsZCBhCisJICBnZW5lcmljIGRpc3RyaWJ1dGlvbiBrZXJuZWwsIHNheSBZIGhlcmUgLSBvdGhlcndpc2Ugc2F5IE4uCitlbmRpZgorCitpZiBYODZfNjQKK2NvbmZpZyBYODZfRVhURU5ERURfUExBVEZPUk0KKwlib29sICJTdXBwb3J0IGZvciBleHRlbmRlZCAobm9uLVBDKSB4ODYgcGxhdGZvcm1zIgorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uIHRoZW4gdGhlIGtlcm5lbCB3aWxsIG9ubHkgc3VwcG9ydAorCSAgc3RhbmRhcmQgUEMgcGxhdGZvcm1zLiAod2hpY2ggY292ZXJzIHRoZSB2YXN0IG1ham9yaXR5IG9mCisJICBzeXN0ZW1zIG91dCB0aGVyZS4pCisKKwkgIElmIHlvdSBlbmFibGUgdGhpcyBvcHRpb24gdGhlbiB5b3UnbGwgYmUgYWJsZSB0byBzZWxlY3Qgc3VwcG9ydAorCSAgZm9yIHRoZSBmb2xsb3dpbmcgKG5vbi1QQykgNjQgYml0IHg4NiBwbGF0Zm9ybXM6CisJCVNjYWxlTVAgdlNNUAorCQlTR0kgVWx0cmF2aW9sZXQKKworCSAgSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIHN5c3RlbXMsIG9yIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEKKwkgIGdlbmVyaWMgZGlzdHJpYnV0aW9uIGtlcm5lbCwgc2F5IFkgaGVyZSAtIG90aGVyd2lzZSBzYXkgTi4KK2VuZGlmCisjIFRoaXMgaXMgYW4gYWxwaGFiZXRpY2FsbHkgc29ydGVkIGxpc3Qgb2YgNjQgYml0IGV4dGVuZGVkIHBsYXRmb3JtcworIyBQbGVhc2UgbWFpbnRhaW4gdGhlIGFscGhhYmV0aWMgb3JkZXIgaWYgYW5kIHdoZW4gdGhlcmUgYXJlIGFkZGl0aW9ucworCitjb25maWcgWDg2X1ZTTVAKKwlib29sICJTY2FsZU1QIHZTTVAiCisJc2VsZWN0IFBBUkFWSVJUCisJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJCisJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBTY2FsZU1QIHZTTVAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcworCSAgc3VwcG9zZWQgdG8gcnVuIG9uIHRoZXNlIEVNNjRULWJhc2VkIG1hY2hpbmVzLiAgT25seSBjaG9vc2UgdGhpcyBvcHRpb24KKwkgIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYWNoaW5lcy4KKworY29uZmlnIFg4Nl9VVgorCWJvb2wgIlNHSSBVbHRyYXZpb2xldCIKKwlkZXBlbmRzIG9uIFg4Nl82NAorCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJc2VsZWN0IFg4Nl9YMkFQSUMKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBTR0kgVWx0cmF2aW9sZXQgc3lzdGVtcy4KKwkgIElmIHlvdSBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSwgeW91IHNob3VsZCBzYXkgTiBoZXJlLgorCisjIEZvbGxvd2luZyBpcyBhbiBhbHBoYWJldGljYWxseSBzb3J0ZWQgbGlzdCBvZiAzMiBiaXQgZXh0ZW5kZWQgcGxhdGZvcm1zCisjIFBsZWFzZSBtYWludGFpbiB0aGUgYWxwaGFiZXRpYyBvcmRlciBpZiBhbmQgd2hlbiB0aGVyZSBhcmUgYWRkaXRpb25zCiAKIGNvbmZpZyBYODZfRUxBTgogCWJvb2wgIkFNRCBFbGFuIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGFuIEFNRCBFbGFuIHByb2Nlc3Nvci4KIAogCSAgRG8gbm90IHVzZSB0aGlzIG9wdGlvbiBmb3IgSzYvQXRobG9uL09wdGVyb24gcHJvY2Vzc29ycyEKIAogCSAgSWYgdW5zdXJlLCBjaG9vc2UgIlBDLWNvbXBhdGlibGUiIGluc3RlYWQuCiAKLWNvbmZpZyBYODZfVk9ZQUdFUgotCWJvb2wgIlZveWFnZXIgKE5DUikiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgKFNNUCB8fCBCUk9LRU4pICYmICFQQ0kKLQloZWxwCi0JICBWb3lhZ2VyIGlzIGFuIE1DQS1iYXNlZCAzMi13YXkgY2FwYWJsZSBTTVAgYXJjaGl0ZWN0dXJlIHByb3ByaWV0YXJ5Ci0JICB0byBOQ1IgQ29ycC4gIE1hY2hpbmUgY2xhc3NlcyAzNDV4LzM1eHgvNDEwMC81MXh4IGFyZSBWb3lhZ2VyLWJhc2VkLgotCi0JICAqKiogV0FSTklORyAqKioKLQotCSAgSWYgeW91IGRvIG5vdCBzcGVjaWZpY2FsbHkga25vdyB5b3UgaGF2ZSBhIFZveWFnZXIgYmFzZWQgbWFjaGluZSwKLQkgIHNheSBOIGhlcmUsIG90aGVyd2lzZSB0aGUga2VybmVsIHlvdSBidWlsZCB3aWxsIG5vdCBiZSBib290YWJsZS4KLQotY29uZmlnIFg4Nl9HRU5FUklDQVJDSAotICAgICAgIGJvb2wgIkdlbmVyaWMgYXJjaGl0ZWN0dXJlIgorY29uZmlnIFg4Nl9SREMzMjFYCisJYm9vbCAiUkRDIFItMzIxeCBTb0MiCiAJZGVwZW5kcyBvbiBYODZfMzIKLSAgICAgICBoZWxwCi0gICAgICAgICAgVGhpcyBvcHRpb24gY29tcGlsZXMgaW4gdGhlIE5VTUFRLCBTdW1taXQsIGJpZ3NtcCwgRVM3MDAwLCBkZWZhdWx0CisJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwlzZWxlY3QgTTQ4NgorCXNlbGVjdCBYODZfUkVCT09URklYVVBTCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaXMgbmVlZGVkIGZvciBSREMgUi0zMjF4IHN5c3RlbS1vbi1jaGlwLCBhbHNvIGtub3duCisJICBhcyBSLTg2MTAtKEcpLgorCSAgSWYgeW91IGRvbid0IGhhdmUgb25lIG9mIHRoZXNlIGNoaXBzLCB5b3Ugc2hvdWxkIHNheSBOIGhlcmUuCisKK2NvbmZpZyBYODZfMzJfTk9OX1NUQU5EQVJECisJYm9vbCAiU3VwcG9ydCBub24tc3RhbmRhcmQgMzItYml0IFNNUCBhcmNoaXRlY3R1cmVzIgorCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUAorCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gY29tcGlsZXMgaW4gdGhlIE5VTUFRLCBTdW1taXQsIGJpZ3NtcCwgRVM3MDAwLCBkZWZhdWx0CiAJICBzdWJhcmNoaXRlY3R1cmVzLiAgSXQgaXMgaW50ZW5kZWQgZm9yIGEgZ2VuZXJpYyBiaW5hcnkga2VybmVsLgogCSAgaWYgeW91IHNlbGVjdCB0aGVtIGFsbCwga2VybmVsIHdpbGwgcHJvYmUgaXQgb25lIGJ5IG9uZS4gYW5kIHdpbGwKIAkgIGZhbGxiYWNrIHRvIGRlZmF1bHQuCiAKLWlmIFg4Nl9HRU5FUklDQVJDSAorIyBBbHBoYWJldGljYWxseSBzb3J0ZWQgbGlzdCBvZiBOb24gc3RhbmRhcmQgMzIgYml0IHBsYXRmb3JtcwogCiBjb25maWcgWDg2X05VTUFRCiAJYm9vbCAiTlVNQVEgKElCTS9TZXF1ZW50KSIKLQlkZXBlbmRzIG9uIFNNUCAmJiBYODZfMzIgJiYgUENJICYmIFg4Nl9NUFBBUlNFCisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECiAJc2VsZWN0IE5VTUEKLQloZWxwCisJc2VsZWN0IFg4Nl9NUFBBUlNFCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgZ2V0dGluZyBMaW51eCB0byBydW4gb24gYSBOVU1BUSAoSUJNL1NlcXVlbnQpCiAJICBOVU1BIG11bHRpcXVhZCBib3guIFRoaXMgY2hhbmdlcyB0aGUgd2F5IHRoYXQgcHJvY2Vzc29ycyBhcmUKIAkgIGJvb3RzdHJhcHBlZCwgYW5kIHVzZXMgQ2x1c3RlcmVkIExvZ2ljYWwgQVBJQyBhZGRyZXNzaW5nIG1vZGUgaW5zdGVhZAogCSAgb2YgRmxhdCBMb2dpY2FsLiAgWW91IHdpbGwgbmVlZCBhIG5ldyBseW54ZXIuZWxmIGZpbGUgdG8gZmxhc2ggeW91cgogCSAgZmlybXdhcmUgd2l0aCAtIHNlbmQgZW1haWwgdG8gPE1hcnRpbi5CbGlnaEB1cy5pYm0uY29tPi4KIAotY29uZmlnIFg4Nl9TVU1NSVQKLQlib29sICJTdW1taXQvRVhBIChJQk0geDQ0MCkiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgU01QCi0JaGVscAotCSAgVGhpcyBvcHRpb24gaXMgbmVlZGVkIGZvciBJQk0gc3lzdGVtcyB0aGF0IHVzZSB0aGUgU3VtbWl0L0VYQSBjaGlwc2V0LgotCSAgSW4gcGFydGljdWxhciwgaXQgaXMgbmVlZGVkIGZvciB0aGUgeDQ0MC4KLQotY29uZmlnIFg4Nl9FUzcwMDAKLQlib29sICJTdXBwb3J0IGZvciBVbmlzeXMgRVM3MDAwIElBMzIgc2VyaWVzIgotCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFVuaXN5cyBFUzcwMDAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcwotCSAgc3VwcG9zZWQgdG8gcnVuIG9uIGFuIElBMzItYmFzZWQgVW5pc3lzIEVTNzAwMCBzeXN0ZW0uCi0KLWNvbmZpZyBYODZfQklHU01QCi0JYm9vbCAiU3VwcG9ydCBmb3IgYmlnIFNNUCBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDggQ1BVcyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBTTVAKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBpcyBuZWVkZWQgZm9yIHRoZSBzeXN0ZW1zIHRoYXQgaGF2ZSBtb3JlIHRoYW4gOCBDUFVzCi0JICBhbmQgaWYgdGhlIHN5c3RlbSBpcyBub3Qgb2YgYW55IHN1Yi1hcmNoIHR5cGUgYWJvdmUuCi0KLWVuZGlmCi0KLWNvbmZpZyBYODZfVlNNUAotCWJvb2wgIlN1cHBvcnQgZm9yIFNjYWxlTVAgdlNNUCIKLQlzZWxlY3QgUEFSQVZJUlQKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0kKLQloZWxwCi0JICBTdXBwb3J0IGZvciBTY2FsZU1QIHZTTVAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcwotCSAgc3VwcG9zZWQgdG8gcnVuIG9uIHRoZXNlIEVNNjRULWJhc2VkIG1hY2hpbmVzLiAgT25seSBjaG9vc2UgdGhpcyBvcHRpb24KLQkgIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYWNoaW5lcy4KLQotZW5kY2hvaWNlCi0KIGNvbmZpZyBYODZfVklTV1MKIAlib29sICJTR0kgMzIwLzU0MCAoVmlzdWFsIFdvcmtzdGF0aW9uKSIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgIVg4Nl9WT1lBR0VSICYmIFg4Nl9NUFBBUlNFICYmIFBDSV9HT0RJUkVDVAotCWhlbHAKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgWDg2X01QUEFSU0UgJiYgUENJX0dPRElSRUNUCisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECisJLS0taGVscC0tLQogCSAgVGhlIFNHSSBWaXN1YWwgV29ya3N0YXRpb24gc2VyaWVzIGlzIGFuIElBMzItYmFzZWQgd29ya3N0YXRpb24KIAkgIGJhc2VkIG9uIFNHSSBzeXN0ZW1zIGNoaXBzIHdpdGggc29tZSBsZWdhY3kgUEMgaGFyZHdhcmUgYXR0YWNoZWQuCiAKQEAgLTM4MSwyMSArNDE3LDI1IEBACiAJICBBIGtlcm5lbCBjb21waWxlZCBmb3IgdGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiB3aWxsIHJ1biBvbiBnZW5lcmFsCiAJICBQQ3MgYXMgd2VsbC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc2dpLXZpc3dzLnR4dD4gZm9yIGRldGFpbHMuCiAKLWNvbmZpZyBYODZfUkRDMzIxWAotCWJvb2wgIlJEQyBSLTMyMXggU29DIgotCWRlcGVuZHMgb24gWDg2XzMyCi0Jc2VsZWN0IE00ODYKLQlzZWxlY3QgWDg2X1JFQk9PVEZJWFVQUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGlzIG5lZWRlZCBmb3IgUkRDIFItMzIxeCBzeXN0ZW0tb24tY2hpcCwgYWxzbyBrbm93bgotCSAgYXMgUi04NjEwLShHKS4KLQkgIElmIHlvdSBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSBjaGlwcywgeW91IHNob3VsZCBzYXkgTiBoZXJlLgorY29uZmlnIFg4Nl9TVU1NSVQKKwlib29sICJTdW1taXQvRVhBIChJQk0geDQ0MCkiCisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaXMgbmVlZGVkIGZvciBJQk0gc3lzdGVtcyB0aGF0IHVzZSB0aGUgU3VtbWl0L0VYQSBjaGlwc2V0LgorCSAgSW4gcGFydGljdWxhciwgaXQgaXMgbmVlZGVkIGZvciB0aGUgeDQ0MC4KKworY29uZmlnIFg4Nl9FUzcwMDAKKwlib29sICJVbmlzeXMgRVM3MDAwIElBMzIgc2VyaWVzIgorCWRlcGVuZHMgb24gWDg2XzMyX05PTl9TVEFOREFSRCAmJiBYODZfQklHU01QCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgVW5pc3lzIEVTNzAwMCBzeXN0ZW1zLiAgU2F5ICdZJyBoZXJlIGlmIHRoaXMga2VybmVsIGlzCisJICBzdXBwb3NlZCB0byBydW4gb24gYW4gSUEzMi1iYXNlZCBVbmlzeXMgRVM3MDAwIHN5c3RlbS4KIAogY29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUgogCWRlZl9ib29sIHkKIAlwcm9tcHQgIlNpbmdsZS1kZXB0aCBXQ0hBTiBvdXRwdXQiCiAJZGVwZW5kcyBvbiBYODYKLQloZWxwCisJLS0taGVscC0tLQogCSAgQ2FsY3VsYXRlIHNpbXBsZXIgL3Byb2MvPFBJRD4vd2NoYW4gdmFsdWVzLiBJZiB0aGlzIG9wdGlvbgogCSAgaXMgZGlzYWJsZWQgdGhlbiB3Y2hhbiB2YWx1ZXMgd2lsbCByZWN1cnNlIGJhY2sgdG8gdGhlCiAJICBjYWxsZXIgZnVuY3Rpb24uIFRoaXMgcHJvdmlkZXMgbW9yZSBhY2N1cmF0ZSB3Y2hhbiB2YWx1ZXMsCkBAIC00MDUsNyArNDQ1LDcgQEAKIAogbWVudWNvbmZpZyBQQVJBVklSVF9HVUVTVAogCWJvb2wgIlBhcmF2aXJ0dWFsaXplZCBndWVzdCBzdXBwb3J0IgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyByZWxhdGVkIHRvIHJ1bm5pbmcgTGludXggdW5kZXIKIAkgIHZhcmlvdXMgaHlwZXJ2aXNvcnMuICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLgogCkBAIC00MTksOCArNDU5LDcgQEAKIAlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCIKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFZNSSBwcm92aWRlcyBhIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2UgdG8gdGhlIFZNd2FyZSBFU1ggc2VydmVyCiAJICAoaXQgY291bGQgYmUgdXNlZCBieSBvdGhlciBoeXBlcnZpc29ycyBpbiB0aGVvcnkgdG9vLCBidXQgaXMgbm90CiAJICBhdCB0aGUgbW9tZW50KSwgYnkgbGlua2luZyB0aGUga2VybmVsIHRvIGEgR1BMLWVkIFJPTSBtb2R1bGUKQEAgLTQzMCw4ICs0NjksNyBAQAogCWJvb2wgIktWTSBwYXJhdmlydHVhbGl6ZWQgY2xvY2siCiAJc2VsZWN0IFBBUkFWSVJUCiAJc2VsZWN0IFBBUkFWSVJUX0NMT0NLCi0JZGVwZW5kcyBvbiAhWDg2X1ZPWUFHRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVHVybmluZyBvbiB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IHlvdSB0byBydW4gYSBwYXJhdmlydHVhbGl6ZWQgY2xvY2sKIAkgIHdoZW4gcnVubmluZyBvdmVyIHRoZSBLVk0gaHlwZXJ2aXNvci4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgUElUCiAJICAob3IgcHJvYmFibHkgb3RoZXIpIGVtdWxhdGlvbiBieSB0aGUgdW5kZXJseWluZyBkZXZpY2UgbW9kZWwsIHRoZSBob3N0CkBAIC00NDEsMTcgKzQ3OSwxNSBAQAogY29uZmlnIEtWTV9HVUVTVAogCWJvb2wgIktWTSBHdWVzdCBzdXBwb3J0IgogCXNlbGVjdCBQQVJBVklSVAotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCi0JaGVscAotCSBUaGlzIG9wdGlvbiBlbmFibGVzIHZhcmlvdXMgb3B0aW1pemF0aW9ucyBmb3IgcnVubmluZyB1bmRlciB0aGUgS1ZNCi0JIGh5cGVydmlzb3IuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB2YXJpb3VzIG9wdGltaXphdGlvbnMgZm9yIHJ1bm5pbmcgdW5kZXIgdGhlIEtWTQorCSAgaHlwZXJ2aXNvci4KIAogc291cmNlICJhcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZyIKIAogY29uZmlnIFBBUkFWSVJUCiAJYm9vbCAiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlIgotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgY2hhbmdlcyB0aGUga2VybmVsIHNvIGl0IGNhbiBtb2RpZnkgaXRzZWxmIHdoZW4gaXQgaXMgcnVuCiAJICB1bmRlciBhIGh5cGVydmlzb3IsIHBvdGVudGlhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSBzaWduaWZpY2FudGx5CiAJICBvdmVyIGZ1bGwgdmlydHVhbGl6YXRpb24uICBIb3dldmVyLCB3aGVuIHJ1biB3aXRob3V0IGEgaHlwZXJ2aXNvcgpAQCAtNDY0LDUxICs1MDAsNTEgQEAKIGVuZGlmCiAKIGNvbmZpZyBQQVJBVklSVF9ERUJVRwotICAgICAgIGJvb2wgInBhcmF2aXJ0LW9wcyBkZWJ1Z2dpbmciCi0gICAgICAgZGVwZW5kcyBvbiBQQVJBVklSVCAmJiBERUJVR19LRVJORUwKLSAgICAgICBoZWxwCi0gICAgICAgICBFbmFibGUgdG8gZGVidWcgcGFyYXZpcnRfb3BzIGludGVybmFscy4gIFNwZWNpZmljYWxseSwgQlVHIGlmCi0JIGEgcGFyYXZpcnRfb3AgaXMgbWlzc2luZyB3aGVuIGl0IGlzIGNhbGxlZC4KKwlib29sICJwYXJhdmlydC1vcHMgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gUEFSQVZJUlQgJiYgREVCVUdfS0VSTkVMCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHRvIGRlYnVnIHBhcmF2aXJ0X29wcyBpbnRlcm5hbHMuICBTcGVjaWZpY2FsbHksIEJVRyBpZgorCSAgYSBwYXJhdmlydF9vcCBpcyBtaXNzaW5nIHdoZW4gaXQgaXMgY2FsbGVkLgogCiBjb25maWcgTUVNVEVTVAogCWJvb2wgIk1lbXRlc3QiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICdtZW10ZXN0Jywgd2hpY2ggYWxsb3dzIG1lbXRlc3QKIAkgIHRvIGJlIHNldC4KLQkJbWVtdGVzdD0wLCBtZWFuIGRpc2FibGVkOyAtLSBkZWZhdWx0Ci0JCW1lbXRlc3Q9MSwgbWVhbiBkbyAxIHRlc3QgcGF0dGVybjsKLQkJLi4uCi0JCW1lbXRlc3Q9NCwgbWVhbiBkbyA0IHRlc3QgcGF0dGVybnMuCisJICAgICAgICBtZW10ZXN0PTAsIG1lYW4gZGlzYWJsZWQ7IC0tIGRlZmF1bHQKKwkgICAgICAgIG1lbXRlc3Q9MSwgbWVhbiBkbyAxIHRlc3QgcGF0dGVybjsKKwkgICAgICAgIC4uLgorCSAgICAgICAgbWVtdGVzdD00LCBtZWFuIGRvIDQgdGVzdCBwYXR0ZXJucy4KIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKIGNvbmZpZyBYODZfU1VNTUlUX05VTUEKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfMzIgJiYgTlVNQSAmJiBYODZfR0VORVJJQ0FSQ0gKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBOVU1BICYmIFg4Nl8zMl9OT05fU1RBTkRBUkQKIAogY29uZmlnIFg4Nl9DWUNMT05FX1RJTUVSCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2X0dFTkVSSUNBUkNICisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECiAKIHNvdXJjZSAiYXJjaC94ODYvS2NvbmZpZy5jcHUiCiAKIGNvbmZpZyBIUEVUX1RJTUVSCiAJZGVmX2Jvb2wgWDg2XzY0CiAJcHJvbXB0ICJIUEVUIFRpbWVyIFN1cHBvcnQiIGlmIFg4Nl8zMgotCWhlbHAKLSAgICAgICAgIFVzZSB0aGUgSUEtUEMgSFBFVCAoSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIpIHRvIG1hbmFnZQotICAgICAgICAgdGltZSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBQSVQgYW5kIFJUQywgaWYgYSBIUEVUIGlzCi0gICAgICAgICBwcmVzZW50LgotICAgICAgICAgSFBFVCBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIHRpbWVyIHJlcGxhY2luZyBsZWdhY3kgODI1NHMuCi0gICAgICAgICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QCi0gICAgICAgICBzeXN0ZW1zLCB1bmxpa2UgdGhlIFRTQywgYnV0IGl0IGlzIG1vcmUgZXhwZW5zaXZlIHRvIGFjY2VzcywKLSAgICAgICAgIGFzIGl0IGlzIG9mZi1jaGlwLiAgWW91IGNhbiBmaW5kIHRoZSBIUEVUIHNwZWMgYXQKLSAgICAgICAgIDxodHRwOi8vd3d3LmludGVsLmNvbS9oYXJkd2FyZWRlc2lnbi9ocGV0c3BlY18xLnBkZj4uCisJLS0taGVscC0tLQorCSAgVXNlIHRoZSBJQS1QQyBIUEVUIChIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lcikgdG8gbWFuYWdlCisJICB0aW1lIGluIHByZWZlcmVuY2UgdG8gdGhlIFBJVCBhbmQgUlRDLCBpZiBhIEhQRVQgaXMKKwkgIHByZXNlbnQuCisJICBIUEVUIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gdGltZXIgcmVwbGFjaW5nIGxlZ2FjeSA4MjU0cy4KKwkgIFRoZSBIUEVUIHByb3ZpZGVzIGEgc3RhYmxlIHRpbWUgYmFzZSBvbiBTTVAKKwkgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLAorCSAgYXMgaXQgaXMgb2ZmLWNoaXAuICBZb3UgY2FuIGZpbmQgdGhlIEhQRVQgc3BlYyBhdAorCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjXzEucGRmPi4KIAotICAgICAgICAgWW91IGNhbiBzYWZlbHkgY2hvb3NlIFkgaGVyZS4gIEhvd2V2ZXIsIEhQRVQgd2lsbCBvbmx5IGJlCi0gICAgICAgICBhY3RpdmF0ZWQgaWYgdGhlIHBsYXRmb3JtIGFuZCB0aGUgQklPUyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KLSAgICAgICAgIE90aGVyd2lzZSB0aGUgODI1NCB3aWxsIGJlIHVzZWQgZm9yIHRpbWluZyBzZXJ2aWNlcy4KKwkgIFlvdSBjYW4gc2FmZWx5IGNob29zZSBZIGhlcmUuICBIb3dldmVyLCBIUEVUIHdpbGwgb25seSBiZQorCSAgYWN0aXZhdGVkIGlmIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIEJJT1Mgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisJICBPdGhlcndpc2UgdGhlIDgyNTQgd2lsbCBiZSB1c2VkIGZvciB0aW1pbmcgc2VydmljZXMuCiAKLSAgICAgICAgIENob29zZSBOIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBsZWdhY3kgODI1NCB0aW1lci4KKwkgIENob29zZSBOIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBsZWdhY3kgODI1NCB0aW1lci4KIAogY29uZmlnIEhQRVRfRU1VTEFURV9SVEMKIAlkZWZfYm9vbCB5CkBAIC01MTksNyArNTU1LDcgQEAKIGNvbmZpZyBETUkKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgRE1JIHNjYW5uaW5nIiBpZiBFTUJFRERFRAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGVkIHNjYW5uaW5nIG9mIERNSSB0byBpZGVudGlmeSBtYWNoaW5lIHF1aXJrcy4gU2F5IFkKIAkgIGhlcmUgdW5sZXNzIHlvdSBoYXZlIHZlcmlmaWVkIHRoYXQgeW91ciBzZXR1cCBpcyBub3QKIAkgIGFmZmVjdGVkIGJ5IGVudHJpZXMgaW4gdGhlIERNSSBibGFja2xpc3QuIFJlcXVpcmVkIGJ5IFBOUApAQCAtNTMxLDcgKzU2Nyw3IEBACiAJc2VsZWN0IFNXSU9UTEIKIAlzZWxlY3QgQUdQCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIGZ1bGwgRE1BIGFjY2VzcyBvZiBkZXZpY2VzIHdpdGggMzJiaXQgbWVtb3J5IGFjY2VzcyBvbmx5CiAJICBvbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDNHQi4gVGhpcyBpcyB1c3VhbGx5IG5lZWRlZCBmb3IgVVNCLAogCSAgc291bmQsIG1hbnkgSURFL1NBVEEgY2hpcHNldHMgYW5kIHNvbWUgb3RoZXIgZGV2aWNlcy4KQEAgLTU0Niw3ICs1ODIsNyBAQAogCWJvb2wgIklCTSBDYWxnYXJ5IElPTU1VIHN1cHBvcnQiCiAJc2VsZWN0IFNXSU9UTEIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIGhhcmR3YXJlIElPTU1VcyBpbiBJQk0ncyB4U2VyaWVzIHgzNjYgYW5kIHg0NjAKIAkgIHN5c3RlbXMuIE5lZWRlZCB0byBydW4gc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiAzR0Igb2YgbWVtb3J5CiAJICBwcm9wZXJseSB3aXRoIDMyLWJpdCBQQ0kgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IERBQwpAQCAtNTY0LDcgKzYwMCw3IEBACiAJZGVmX2Jvb2wgeQogCXByb21wdCAiU2hvdWxkIENhbGdhcnkgYmUgZW5hYmxlZCBieSBkZWZhdWx0PyIKIAlkZXBlbmRzIG9uIENBTEdBUllfSU9NTVUKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2hvdWxkIENhbGdhcnkgYmUgZW5hYmxlZCBieSBkZWZhdWx0PyBpZiB5b3UgY2hvb3NlICd5JywgQ2FsZ2FyeQogCSAgd2lsbCBiZSB1c2VkIChpZiBpdCBleGlzdHMpLiBJZiB5b3UgY2hvb3NlICduJywgQ2FsZ2FyeSB3aWxsIG5vdCBiZQogCSAgdXNlZCBldmVuIGlmIGl0IGV4aXN0cy4gSWYgeW91IGNob29zZSAnbicgYW5kIHdvdWxkIGxpa2UgdG8gdXNlCkBAIC01NzYsNyArNjEyLDcgQEAKIAlzZWxlY3QgU1dJT1RMQgogCXNlbGVjdCBQQ0lfTVNJCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJICYmIEFDUEkKLQloZWxwCisJLS0taGVscC0tLQogCSAgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIGVuYWJsZSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgaGFyZHdhcmUgaW4KIAkgIHlvdXIgc3lzdGVtLiBBbiBJT01NVSBpcyBhIGhhcmR3YXJlIGNvbXBvbmVudCB3aGljaCBwcm92aWRlcwogCSAgcmVtYXBwaW5nIG9mIERNQSBtZW1vcnkgYWNjZXNzZXMgZnJvbSBkZXZpY2VzLiBXaXRoIGFuIEFNRCBJT01NVSB5b3UKQEAgLTU5MSw3ICs2MjcsNyBAQAogCWJvb2wgIkV4cG9ydCBBTUQgSU9NTVUgc3RhdGlzdGljcyB0byBkZWJ1Z2ZzIgogCWRlcGVuZHMgb24gQU1EX0lPTU1VCiAJc2VsZWN0IERFQlVHX0ZTCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY29kZSBpbiB0aGUgQU1EIElPTU1VIGRyaXZlciB0byBjb2xsZWN0IHZhcmlvdXMKIAkgIHN0YXRpc3RpY3MgYWJvdXQgd2hhdHMgaGFwcGVuaW5nIGluIHRoZSBkcml2ZXIgYW5kIGV4cG9ydHMgdGhhdAogCSAgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzLgpAQCAtNjAwLDcgKzYzNiw3IEBACiAjIG5lZWQgdGhpcyBhbHdheXMgc2VsZWN0ZWQgYnkgSU9NTVUgZm9yIHRoZSBWSUEgd29ya2Fyb3VuZAogY29uZmlnIFNXSU9UTEIKIAlkZWZfYm9vbCB5IGlmIFg4Nl82NAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBzb2Z0d2FyZSBib3VuY2UgYnVmZmVycyB1c2VkIG9uIHg4Ni02NCBzeXN0ZW1zCiAJICB3aGljaCBkb24ndCBoYXZlIGEgaGFyZHdhcmUgSU9NTVUgKGUuZy4gdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbgogCSAgb2YgSW50ZWwncyB4ODYtNjQgQ1BVcykuIFVzaW5nIHRoaXMgUENJIGRldmljZXMgd2hpY2ggY2FuIG9ubHkKQEAgLTYxOCw3ICs2NTQsNyBAQAogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFNNUCAmJiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IENQVU1BU0tfT0ZGU1RBQ0sKIAlkZWZhdWx0IG4KLQloZWxwCisJLS0taGVscC0tLQogCSAgQ29uZmlndXJlIG1heGltdW0gbnVtYmVyIG9mIENQVVMgYW5kIE5VTUEgTm9kZXMgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNjI5LDcgKzY2NSw3IEBACiAJZGVmYXVsdCAiNDA5NiIgaWYgTUFYU01QCiAJZGVmYXVsdCAiMzIiIGlmIFNNUCAmJiAoWDg2X05VTUFRIHx8IFg4Nl9TVU1NSVQgfHwgWDg2X0JJR1NNUCB8fCBYODZfRVM3MDAwKQogCWRlZmF1bHQgIjgiIGlmIFNNUAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyB3aGljaCB0aGlzCiAJICBrZXJuZWwgd2lsbCBzdXBwb3J0LiAgVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIDUxMiBhbmQgdGhlCiAJICBtaW5pbXVtIHZhbHVlIHdoaWNoIG1ha2VzIHNlbnNlIGlzIDIuCkBAIC02NDAsNyArNjc2LDcgQEAKIGNvbmZpZyBTQ0hFRF9TTVQKIAlib29sICJTTVQgKEh5cGVydGhyZWFkaW5nKSBzY2hlZHVsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl9IVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTTVQgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbiBtYWtpbmcKIAkgIHdoZW4gZGVhbGluZyB3aXRoIEludGVsIFBlbnRpdW0gNCBjaGlwcyB3aXRoIEh5cGVyVGhyZWFkaW5nIGF0IGEKIAkgIGNvc3Qgb2Ygc2xpZ2h0bHkgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5CkBAIC02NTAsNyArNjg2LDcgQEAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJNdWx0aS1jb3JlIHNjaGVkdWxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gWDg2X0hUCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIE11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbgogCSAgbWFraW5nIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWNvcmUgQ1BVIGNoaXBzIGF0IGEgY29zdCBvZiBzbGlnaHRseQogCSAgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KQEAgLTY1OSw4ICs2OTUsOCBAQAogCiBjb25maWcgWDg2X1VQX0FQSUMKIAlib29sICJMb2NhbCBBUElDIHN1cHBvcnQgb24gdW5pcHJvY2Vzc29ycyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhU01QICYmICEoWDg2X1ZPWUFHRVIgfHwgWDg2X0dFTkVSSUNBUkNIKQotCWhlbHAKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhU01QICYmICFYODZfMzJfTk9OX1NUQU5EQVJECisJLS0taGVscC0tLQogCSAgQSBsb2NhbCBBUElDIChBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIpIGlzIGFuCiAJICBpbnRlZ3JhdGVkIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSBDUFUuIElmIHlvdSBoYXZlIGEgc2luZ2xlLUNQVQogCSAgc3lzdGVtIHdoaWNoIGhhcyBhIHByb2Nlc3NvciB3aXRoIGEgbG9jYWwgQVBJQywgeW91IGNhbiBzYXkgWSBoZXJlIHRvCkBAIC02NzMsNyArNzA5LDcgQEAKIGNvbmZpZyBYODZfVVBfSU9BUElDCiAJYm9vbCAiSU8tQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMiCiAJZGVwZW5kcyBvbiBYODZfVVBfQVBJQwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBbiBJTy1BUElDIChJL08gQWR2YW5jZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyKSBpcyBhbgogCSAgU01QLWNhcGFibGUgcmVwbGFjZW1lbnQgZm9yIFBDLXN0eWxlIGludGVycnVwdCBjb250cm9sbGVycy4gTW9zdAogCSAgU01QIHN5c3RlbXMgYW5kIG1hbnkgcmVjZW50IHVuaXByb2Nlc3NvciBzeXN0ZW1zIGhhdmUgb25lLgpAQCAtNjg0LDExICs3MjAsMTEgQEAKIAogY29uZmlnIFg4Nl9MT0NBTF9BUElDCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2XzY0IHx8IChYODZfMzIgJiYgKFg4Nl9VUF9BUElDIHx8IChTTVAgJiYgIVg4Nl9WT1lBR0VSKSB8fCBYODZfR0VORVJJQ0FSQ0gpKQorCWRlcGVuZHMgb24gWDg2XzY0IHx8IFNNUCB8fCBYODZfMzJfTk9OX1NUQU5EQVJEIHx8IFg4Nl9VUF9BUElDCiAKIGNvbmZpZyBYODZfSU9fQVBJQwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIChYODZfVVBfSU9BUElDIHx8IChTTVAgJiYgIVg4Nl9WT1lBR0VSKSB8fCBYODZfR0VORVJJQ0FSQ0gpKQorCWRlcGVuZHMgb24gWDg2XzY0IHx8IFNNUCB8fCBYODZfMzJfTk9OX1NUQU5EQVJEIHx8IFg4Nl9VUF9BUElDCiAKIGNvbmZpZyBYODZfVklTV1NfQVBJQwogCWRlZl9ib29sIHkKQEAgLTY5OCw3ICs3MzQsNyBAQAogCWJvb2wgIlJlcm91dGUgZm9yIGJyb2tlbiBib290IElSUXMiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBYODZfSU9fQVBJQwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgd29ya2Fyb3VuZCB0aGF0IGZpeGVzIGEgc291cmNlIG9mCiAJICBzcHVyaW91cyBpbnRlcnJ1cHRzLiBUaGlzIGlzIHJlY29tbWVuZGVkIHdoZW4gdGhyZWFkZWQKIAkgIGludGVycnVwdCBoYW5kbGluZyBpcyB1c2VkIG9uIHN5c3RlbXMgd2hlcmUgdGhlIGdlbmVyYXRpb24gb2YKQEAgLTcyMCw3ICs3NTYsNiBAQAogCiBjb25maWcgWDg2X01DRQogCWJvb2wgIk1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIgotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCiAJLS0taGVscC0tLQogCSAgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gc3VwcG9ydCBhbGxvd3MgdGhlIHByb2Nlc3NvciB0byBub3RpZnkgdGhlCiAJICBrZXJuZWwgaWYgaXQgZGV0ZWN0cyBhIHByb2JsZW0gKGUuZy4gb3ZlcmhlYXRpbmcsIGNvbXBvbmVudCBmYWlsdXJlKS4KQEAgLTczOSw3ICs3NzQsNyBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkludGVsIE1DRSBmZWF0dXJlcyIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBYODZfTUNFICYmIFg4Nl9MT0NBTF9BUElDCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgICBBZGRpdGlvbmFsIHN1cHBvcnQgZm9yIGludGVsIHNwZWNpZmljIE1DRSBmZWF0dXJlcyBzdWNoIGFzCiAJICAgdGhlIHRoZXJtYWwgbW9uaXRvci4KIApAQCAtNzQ3LDE0ICs3ODIsMTQgQEAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJBTUQgTUNFIGZlYXR1cmVzIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFg4Nl9NQ0UgJiYgWDg2X0xPQ0FMX0FQSUMKLQloZWxwCisJLS0taGVscC0tLQogCSAgIEFkZGl0aW9uYWwgc3VwcG9ydCBmb3IgQU1EIHNwZWNpZmljIE1DRSBmZWF0dXJlcyBzdWNoIGFzCiAJICAgdGhlIERSQU0gRXJyb3IgVGhyZXNob2xkLgogCiBjb25maWcgWDg2X01DRV9OT05GQVRBTAogCXRyaXN0YXRlICJDaGVjayBmb3Igbm9uLWZhdGFsIGVycm9ycyBvbiBBTUQgQXRobG9uL0R1cm9uIC8gSW50ZWwgUGVudGl1bSA0IgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFg4Nl9NQ0UKLQloZWxwCisJLS0taGVscC0tLQogCSAgRW5hYmxpbmcgdGhpcyBmZWF0dXJlIHN0YXJ0cyBhIHRpbWVyIHRoYXQgdHJpZ2dlcnMgZXZlcnkgNSBzZWNvbmRzIHdoaWNoCiAJICB3aWxsIGxvb2sgYXQgdGhlIG1hY2hpbmUgY2hlY2sgcmVnaXN0ZXJzIHRvIHNlZSBpZiBhbnl0aGluZyBoYXBwZW5lZC4KIAkgIE5vbi1mYXRhbCBwcm9ibGVtcyBhdXRvbWF0aWNhbGx5IGdldCBjb3JyZWN0ZWQgKGJ1dCBzdGlsbCBsb2dnZWQpLgpAQCAtNzY3LDcgKzgwMiw3IEBACiBjb25maWcgWDg2X01DRV9QNFRIRVJNQUwKIAlib29sICJjaGVjayBmb3IgUDQgdGhlcm1hbCB0aHJvdHRsaW5nIGludGVycnVwdC4iCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgWDg2X01DRSAmJiAoWDg2X1VQX0FQSUMgfHwgU01QKQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGluZyB0aGlzIGZlYXR1cmUgd2lsbCBjYXVzZSBhIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZCB3aGVuIHRoZSBQNAogCSAgZW50ZXJzIHRoZXJtYWwgdGhyb3R0bGluZy4KIApAQCAtNzc1LDExICs4MTAsMTEgQEAKIAlib29sICJFbmFibGUgVk04NiBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAotICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IHByb2dyYW1zIGxpa2UgRE9TRU1VIHRvIHJ1biAxNi1iaXQgbGVnYWN5CisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYnkgcHJvZ3JhbXMgbGlrZSBET1NFTVUgdG8gcnVuIDE2LWJpdCBsZWdhY3kKIAkgIGNvZGUgb24gWDg2IHByb2Nlc3NvcnMuIEl0IGFsc28gbWF5IGJlIG5lZWRlZCBieSBzb2Z0d2FyZSBsaWtlCi0gICAgICAgICAgWEZyZWU4NiB0byBpbml0aWFsaXplIHNvbWUgdmlkZW8gY2FyZHMgdmlhIEJJT1MuIERpc2FibGluZyB0aGlzCi0gICAgICAgICAgb3B0aW9uIHNhdmVzIGFib3V0IDZrLgorCSAgWEZyZWU4NiB0byBpbml0aWFsaXplIHNvbWUgdmlkZW8gY2FyZHMgdmlhIEJJT1MuIERpc2FibGluZyB0aGlzCisJICBvcHRpb24gc2F2ZXMgYWJvdXQgNmsuCiAKIGNvbmZpZyBUT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIHN1cHBvcnQiCkBAIC04NTMsMzMgKzg4OCwzMyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1pY3JvY29kZS4KIAogY29uZmlnIE1JQ1JPQ09ERV9JTlRFTAotICAgICAgIGJvb2wgIkludGVsIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQiCi0gICAgICAgZGVwZW5kcyBvbiBNSUNST0NPREUKLSAgICAgICBkZWZhdWx0IE1JQ1JPQ09ERQotICAgICAgIHNlbGVjdCBGV19MT0FERVIKLSAgICAgICAtLWhlbHAtLS0KLSAgICAgICAgIFRoaXMgb3B0aW9ucyBlbmFibGVzIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQgZm9yIEludGVsCi0gICAgICAgICBwcm9jZXNzb3JzLgorCWJvb2wgIkludGVsIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNSUNST0NPREUKKwlkZWZhdWx0IE1JQ1JPQ09ERQorCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbnMgZW5hYmxlcyBtaWNyb2NvZGUgcGF0Y2ggbG9hZGluZyBzdXBwb3J0IGZvciBJbnRlbAorCSAgcHJvY2Vzc29ycy4KIAotICAgICAgICAgRm9yIGxhdGVzdCBuZXdzIGFuZCBpbmZvcm1hdGlvbiBvbiBvYnRhaW5pbmcgYWxsIHRoZSByZXF1aXJlZAotICAgICAgICAgSW50ZWwgaW5ncmVkaWVudHMgZm9yIHRoaXMgZHJpdmVyLCBjaGVjazoKLSAgICAgICAgIDxodHRwOi8vd3d3LnVyYmFubXl0aC5vcmcvbWljcm9jb2RlLz4uCisJICBGb3IgbGF0ZXN0IG5ld3MgYW5kIGluZm9ybWF0aW9uIG9uIG9idGFpbmluZyBhbGwgdGhlIHJlcXVpcmVkCisJICBJbnRlbCBpbmdyZWRpZW50cyBmb3IgdGhpcyBkcml2ZXIsIGNoZWNrOgorCSAgPGh0dHA6Ly93d3cudXJiYW5teXRoLm9yZy9taWNyb2NvZGUvPi4KIAogY29uZmlnIE1JQ1JPQ09ERV9BTUQKLSAgICAgICBib29sICJBTUQgbWljcm9jb2RlIHBhdGNoIGxvYWRpbmcgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIE1JQ1JPQ09ERQotICAgICAgIHNlbGVjdCBGV19MT0FERVIKLSAgICAgICAtLWhlbHAtLS0KLSAgICAgICAgIElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24sIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQgZm9yIEFNRAotCSBwcm9jZXNzb3JzIHdpbGwgYmUgZW5hYmxlZC4KKwlib29sICJBTUQgbWljcm9jb2RlIHBhdGNoIGxvYWRpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1JQ1JPQ09ERQorCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uLCBtaWNyb2NvZGUgcGF0Y2ggbG9hZGluZyBzdXBwb3J0IGZvciBBTUQKKwkgIHByb2Nlc3NvcnMgd2lsbCBiZSBlbmFibGVkLgogCi0gICBjb25maWcgTUlDUk9DT0RFX09MRF9JTlRFUkZBQ0UKK2NvbmZpZyBNSUNST0NPREVfT0xEX0lOVEVSRkFDRQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1JQ1JPQ09ERQogCiBjb25maWcgWDg2X01TUgogCXRyaXN0YXRlICIvZGV2L2NwdS8qL21zciAtIE1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyIHN1cHBvcnQiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgZGV2aWNlIGdpdmVzIHByaXZpbGVnZWQgcHJvY2Vzc2VzIGFjY2VzcyB0byB0aGUgeDg2CiAJICBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpLiAgSXQgaXMgYSBjaGFyYWN0ZXIgZGV2aWNlIHdpdGgKIAkgIG1ham9yIDIwMiBhbmQgbWlub3JzIDAgdG8gMzEgZm9yIC9kZXYvY3B1LzAvbXNyIHRvIC9kZXYvY3B1LzMxL21zci4KQEAgLTg4OCw3ICs5MjMsNyBAQAogCiBjb25maWcgWDg2X0NQVUlECiAJdHJpc3RhdGUgIi9kZXYvY3B1LyovY3B1aWQgLSBDUFUgaW5mb3JtYXRpb24gc3VwcG9ydCIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBkZXZpY2UgZ2l2ZXMgcHJvY2Vzc2VzIGFjY2VzcyB0byB0aGUgeDg2IENQVUlEIGluc3RydWN0aW9uIHRvCiAJICBiZSBleGVjdXRlZCBvbiBhIHNwZWNpZmljIHByb2Nlc3Nvci4gIEl0IGlzIGEgY2hhcmFjdGVyIGRldmljZQogCSAgd2l0aCBtYWpvciAyMDMgYW5kIG1pbm9ycyAwIHRvIDMxIGZvciAvZGV2L2NwdS8wL2NwdWlkIHRvCkBAIC05NDAsNyArOTc1LDcgQEAKIGNvbmZpZyBISUdITUVNNEcKIAlib29sICI0R0IiCiAJZGVwZW5kcyBvbiAhWDg2X05VTUFRCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBoYXZlIGEgMzItYml0IHByb2Nlc3NvciBhbmQgYmV0d2VlbiAxIGFuZCA0CiAJICBnaWdhYnl0ZXMgb2YgcGh5c2ljYWwgUkFNLgogCkBAIC05NDgsNyArOTgzLDcgQEAKIAlib29sICI2NEdCIgogCWRlcGVuZHMgb24gIU0zODYgJiYgIU00ODYKIAlzZWxlY3QgWDg2X1BBRQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBpZiB5b3UgaGF2ZSBhIDMyLWJpdCBwcm9jZXNzb3IgYW5kIG1vcmUgdGhhbiA0CiAJICBnaWdhYnl0ZXMgb2YgcGh5c2ljYWwgUkFNLgogCkBAIC05NTksNyArOTk0LDcgQEAKIAlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IFZNU1BMSVRfM0cKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhlIGRlc2lyZWQgc3BsaXQgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgbWVtb3J5LgogCiAJICBJZiB0aGUgYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbCBpcyBsZXNzIHRoYW4gdGhlCkBAIC0xMDA1LDIwICsxMDQwLDIwIEBACiBjb25maWcgWDg2X1BBRQogCWJvb2wgIlBBRSAoUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb24pIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgIUhJR0hNRU00RwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBQQUUgaXMgcmVxdWlyZWQgZm9yIE5YIHN1cHBvcnQsIGFuZCBmdXJ0aGVybW9yZSBlbmFibGVzCiAJICBsYXJnZXIgc3dhcHNwYWNlIHN1cHBvcnQgZm9yIG5vbi1vdmVyY29tbWl0IHB1cnBvc2VzLiBJdAogCSAgaGFzIHRoZSBjb3N0IG9mIG1vcmUgcGFnZXRhYmxlIGxvb2t1cCBvdmVyaGVhZCwgYW5kIGFsc28KIAkgIGNvbnN1bWVzIG1vcmUgcGFnZXRhYmxlIHNwYWNlIHBlciBwcm9jZXNzLgogCiBjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAotICAgICAgIGRlZl9ib29sIFg4Nl82NCB8fCBYODZfUEFFCisJZGVmX2Jvb2wgWDg2XzY0IHx8IFg4Nl9QQUUKIAogY29uZmlnIERJUkVDVF9HQlBBR0VTCiAJYm9vbCAiRW5hYmxlIDFHQiBwYWdlcyBmb3Iga2VybmVsIHBhZ2V0YWJsZXMiIGlmIEVNQkVEREVECiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYODZfNjQKLQloZWxwCisJLS0taGVscC0tLQogCSAgQWxsb3cgdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyB0byB1c2UgMUdCIHBhZ2VzIG9uIENQVXMgdGhhdAogCSAgc3VwcG9ydCBpdC4gVGhpcyBjYW4gaW1wcm92ZSB0aGUga2VybmVsJ3MgcGVyZm9ybWFuY2UgYSB0aW55IGJpdCBieQogCSAgcmVkdWNpbmcgVExCIHByZXNzdXJlLiBJZiBpbiBkb3VidCwgc2F5ICJZIi4KQEAgLTEwMjgsOSArMTA2Myw4IEBACiAJYm9vbCAiTnVtYSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTTVAKIAlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIEhJR0hNRU02NEcgJiYgKFg4Nl9OVU1BUSB8fCBYODZfQklHU01QIHx8IFg4Nl9TVU1NSVQgJiYgQUNQSSkgJiYgRVhQRVJJTUVOVEFMKQotCWRlZmF1bHQgbiBpZiBYODZfUEMKIAlkZWZhdWx0IHkgaWYgKFg4Nl9OVU1BUSB8fCBYODZfU1VNTUlUIHx8IFg4Nl9CSUdTTVApCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBOVU1BIChOb24gVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBzdXBwb3J0LgogCiAJICBUaGUga2VybmVsIHdpbGwgdHJ5IHRvIGFsbG9jYXRlIG1lbW9yeSB1c2VkIGJ5IGEgQ1BVIG9uIHRoZQpAQCAtMTA1MywxOSArMTA4NywxOSBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIk9sZCBzdHlsZSBBTUQgT3B0ZXJvbiBOVU1BIGRldGVjdGlvbiIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBOVU1BICYmIFBDSQotCWhlbHAKLQkgRW5hYmxlIEs4IE5VTUEgbm9kZSB0b3BvbG9neSBkZXRlY3Rpb24uICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYKLQkgeW91IGhhdmUgYSBtdWx0aSBwcm9jZXNzb3IgQU1EIEs4IHN5c3RlbS4gVGhpcyB1c2VzIGFuIG9sZAotCSBtZXRob2QgdG8gcmVhZCB0aGUgTlVNQSBjb25maWd1cmF0aW9uIGRpcmVjdGx5IGZyb20gdGhlIGJ1aWx0aW4KLQkgTm9ydGhicmlkZ2Ugb2YgT3B0ZXJvbi4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFg4Nl82NF9BQ1BJX05VTUEKLQkgaW5zdGVhZCwgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4KKwktLS1oZWxwLS0tCisJICBFbmFibGUgSzggTlVNQSBub2RlIHRvcG9sb2d5IGRldGVjdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZgorCSAgeW91IGhhdmUgYSBtdWx0aSBwcm9jZXNzb3IgQU1EIEs4IHN5c3RlbS4gVGhpcyB1c2VzIGFuIG9sZAorCSAgbWV0aG9kIHRvIHJlYWQgdGhlIE5VTUEgY29uZmlndXJhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBidWlsdGluCisJICBOb3J0aGJyaWRnZSBvZiBPcHRlcm9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWDg2XzY0X0FDUElfTlVNQQorCSAgaW5zdGVhZCwgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4KIAogY29uZmlnIFg4Nl82NF9BQ1BJX05VTUEKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJBQ1BJIE5VTUEgZGV0ZWN0aW9uIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIE5VTUEgJiYgQUNQSSAmJiBQQ0kKIAlzZWxlY3QgQUNQSV9OVU1BCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBBQ1BJIFNSQVQgYmFzZWQgbm9kZSB0b3BvbG9neSBkZXRlY3Rpb24uCiAKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KQEAgLTEwODAsNyArMTExNCw3IEBACiBjb25maWcgTlVNQV9FTVUKIAlib29sICJOVU1BIGVtdWxhdGlvbiIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBOVU1BCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBOVU1BIGVtdWxhdGlvbi4gQSBmbGF0IG1hY2hpbmUgd2lsbCBiZSBzcGxpdAogCSAgaW50byB2aXJ0dWFsIG5vZGVzIHdoZW4gYm9vdGVkIHdpdGggIm51bWE9ZmFrZT1OIiwgd2hlcmUgTiBpcyB0aGUKIAkgIG51bWJlciBvZiBub2Rlcy4gVGhpcyBpcyBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLgpAQCAtMTA5MywxMSArMTEyNywxMSBAQAogCWRlZmF1bHQgIjQiIGlmIFg4Nl9OVU1BUQogCWRlZmF1bHQgIjMiCiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIE5VTUEgTm9kZXMgYXZhaWxhYmxlIG9uIHRoZSB0YXJnZXQKIAkgIHN5c3RlbS4gIEluY3JlYXNlcyBtZW1vcnkgcmVzZXJ2ZWQgdG8gYWNjb21vZGF0ZSB2YXJpb3VzIHRhYmxlcy4KIAotY29uZmlnIEhBVkVfQVJDSF9CT09UTUVNX05PREUKK2NvbmZpZyBIQVZFX0FSQ0hfQk9PVE1FTQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBOVU1BCiAKQEAgLTExMzEsNyArMTE2NSw3IEBACiAKIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfNjQgfHwgTlVNQSB8fCAoRVhQRVJJTUVOVEFMICYmIFg4Nl9QQykgfHwgWDg2X0dFTkVSSUNBUkNICisJZGVwZW5kcyBvbiBYODZfNjQgfHwgTlVNQSB8fCAoRVhQRVJJTUVOVEFMICYmIFg4Nl8zMikgfHwgWDg2XzMyX05PTl9TVEFOREFSRAogCXNlbGVjdCBTUEFSU0VNRU1fU1RBVElDIGlmIFg4Nl8zMgogCXNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaWYgWDg2XzY0CiAKQEAgLTExNDgsNjEgKzExODIsNjEgQEAKIGNvbmZpZyBISUdIUFRFCiAJYm9vbCAiQWxsb2NhdGUgM3JkLWxldmVsIHBhZ2V0YWJsZXMgZnJvbSBoaWdobWVtIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIChISUdITUVNNEcgfHwgSElHSE1FTTY0RykKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhlIFZNIHVzZXMgb25lIHBhZ2UgdGFibGUgZW50cnkgZm9yIGVhY2ggcGFnZSBvZiBwaHlzaWNhbCBtZW1vcnkuCiAJICBGb3Igc3lzdGVtcyB3aXRoIGEgbG90IG9mIFJBTSwgdGhpcyBjYW4gYmUgd2FzdGVmdWwgb2YgcHJlY2lvdXMKIAkgIGxvdyBtZW1vcnkuICBTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGwgcHV0IHVzZXItc3BhY2UgcGFnZSB0YWJsZQogCSAgZW50cmllcyBpbiBoaWdoIG1lbW9yeS4KIAogY29uZmlnIFg4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04KLSAgICAgICAgYm9vbCAiQ2hlY2sgZm9yIGxvdyBtZW1vcnkgY29ycnVwdGlvbiIKLQloZWxwCi0JIFBlcmlvZGljYWxseSBjaGVjayBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gaW4gbG93IG1lbW9yeSwgd2hpY2gKLQkgaXMgc3VzcGVjdGVkIHRvIGJlIGNhdXNlZCBieSBCSU9TLiAgRXZlbiB3aGVuIGVuYWJsZWQgaW4gdGhlCi0JIGNvbmZpZ3VyYXRpb24sIGl0IGlzIGRpc2FibGVkIGF0IHJ1bnRpbWUuICBFbmFibGUgaXQgYnkKLQkgc2V0dGluZyAibWVtb3J5X2NvcnJ1cHRpb25fY2hlY2s9MSIgb24gdGhlIGtlcm5lbCBjb21tYW5kCi0JIGxpbmUuICBCeSBkZWZhdWx0IGl0IHNjYW5zIHRoZSBsb3cgNjRrIG9mIG1lbW9yeSBldmVyeSA2MAotCSBzZWNvbmRzOyBzZWUgdGhlIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrX3NpemUgYW5kCi0JIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrX3BlcmlvZCBwYXJhbWV0ZXJzIGluCi0JIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IHRvIGFkanVzdCB0aGlzLgorCWJvb2wgIkNoZWNrIGZvciBsb3cgbWVtb3J5IGNvcnJ1cHRpb24iCisJLS0taGVscC0tLQorCSAgUGVyaW9kaWNhbGx5IGNoZWNrIGZvciBtZW1vcnkgY29ycnVwdGlvbiBpbiBsb3cgbWVtb3J5LCB3aGljaAorCSAgaXMgc3VzcGVjdGVkIHRvIGJlIGNhdXNlZCBieSBCSU9TLiAgRXZlbiB3aGVuIGVuYWJsZWQgaW4gdGhlCisJICBjb25maWd1cmF0aW9uLCBpdCBpcyBkaXNhYmxlZCBhdCBydW50aW1lLiAgRW5hYmxlIGl0IGJ5CisJICBzZXR0aW5nICJtZW1vcnlfY29ycnVwdGlvbl9jaGVjaz0xIiBvbiB0aGUga2VybmVsIGNvbW1hbmQKKwkgIGxpbmUuICBCeSBkZWZhdWx0IGl0IHNjYW5zIHRoZSBsb3cgNjRrIG9mIG1lbW9yeSBldmVyeSA2MAorCSAgc2Vjb25kczsgc2VlIHRoZSBtZW1vcnlfY29ycnVwdGlvbl9jaGVja19zaXplIGFuZAorCSAgbWVtb3J5X2NvcnJ1cHRpb25fY2hlY2tfcGVyaW9kIHBhcmFtZXRlcnMgaW4KKwkgIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IHRvIGFkanVzdCB0aGlzLgogCi0JIFdoZW4gZW5hYmxlZCB3aXRoIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMsIHRoaXMgb3B0aW9uIGhhcwotCSBhbG1vc3Qgbm8gb3ZlcmhlYWQsIGFzIGl0IHJlc2VydmVzIGEgcmVsYXRpdmVseSBzbWFsbCBhbW91bnQKLQkgb2YgbWVtb3J5IGFuZCBzY2FucyBpdCBpbmZyZXF1ZW50bHkuICBJdCBib3RoIGRldGVjdHMgY29ycnVwdGlvbgotCSBhbmQgcHJldmVudHMgaXQgZnJvbSBhZmZlY3RpbmcgdGhlIHJ1bm5pbmcgc3lzdGVtLgorCSAgV2hlbiBlbmFibGVkIHdpdGggdGhlIGRlZmF1bHQgcGFyYW1ldGVycywgdGhpcyBvcHRpb24gaGFzCisJICBhbG1vc3Qgbm8gb3ZlcmhlYWQsIGFzIGl0IHJlc2VydmVzIGEgcmVsYXRpdmVseSBzbWFsbCBhbW91bnQKKwkgIG9mIG1lbW9yeSBhbmQgc2NhbnMgaXQgaW5mcmVxdWVudGx5LiAgSXQgYm90aCBkZXRlY3RzIGNvcnJ1cHRpb24KKwkgIGFuZCBwcmV2ZW50cyBpdCBmcm9tIGFmZmVjdGluZyB0aGUgcnVubmluZyBzeXN0ZW0uCiAKLQkgSXQgaXMsIGhvd2V2ZXIsIGludGVuZGVkIGFzIGEgZGlhZ25vc3RpYyB0b29sOyBpZiByZXBlYXRhYmxlCi0JIEJJT1Mtb3JpZ2luYXRlZCBjb3JydXB0aW9uIGFsd2F5cyBhZmZlY3RzIHRoZSBzYW1lIG1lbW9yeSwKLQkgeW91IGNhbiB1c2UgbWVtbWFwPSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSB1c2luZyB0aGF0Ci0JIG1lbW9yeS4KKwkgIEl0IGlzLCBob3dldmVyLCBpbnRlbmRlZCBhcyBhIGRpYWdub3N0aWMgdG9vbDsgaWYgcmVwZWF0YWJsZQorCSAgQklPUy1vcmlnaW5hdGVkIGNvcnJ1cHRpb24gYWx3YXlzIGFmZmVjdHMgdGhlIHNhbWUgbWVtb3J5LAorCSAgeW91IGNhbiB1c2UgbWVtbWFwPSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSB1c2luZyB0aGF0CisJICBtZW1vcnkuCiAKIGNvbmZpZyBYODZfQk9PVFBBUkFNX01FTU9SWV9DT1JSVVBUSU9OX0NIRUNLCi0gICAgICAgIGJvb2wgIlNldCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrIgorCWJvb2wgIlNldCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrIgogCWRlcGVuZHMgb24gWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTgogCWRlZmF1bHQgeQotCWhlbHAKLQkgU2V0IHdoZXRoZXIgdGhlIGRlZmF1bHQgc3RhdGUgb2YgbWVtb3J5X2NvcnJ1cHRpb25fY2hlY2sgaXMKLQkgb24gb3Igb2ZmLgorCS0tLWhlbHAtLS0KKwkgIFNldCB3aGV0aGVyIHRoZSBkZWZhdWx0IHN0YXRlIG9mIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrIGlzCisJICBvbiBvciBvZmYuCiAKIGNvbmZpZyBYODZfUkVTRVJWRV9MT1dfNjRLCi0gICAgICAgIGJvb2wgIlJlc2VydmUgbG93IDY0SyBvZiBSQU0gb24gQU1JL1Bob2VuaXggQklPU2VuIgorCWJvb2wgIlJlc2VydmUgbG93IDY0SyBvZiBSQU0gb24gQU1JL1Bob2VuaXggQklPU2VuIgogCWRlZmF1bHQgeQotCWhlbHAKLQkgUmVzZXJ2ZSB0aGUgZmlyc3QgNjRLIG9mIHBoeXNpY2FsIFJBTSBvbiBCSU9TZXMgdGhhdCBhcmUga25vd24KLQkgdG8gcG90ZW50aWFsbHkgY29ycnVwdCB0aGF0IG1lbW9yeSByYW5nZS4gQSBudW1iZXJzIG9mIEJJT1NlcyBhcmUKLQkga25vd24gdG8gdXRpbGl6ZSB0aGlzIGFyZWEgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLCBzbyBpdCBtdXN0IG5vdAotCSBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwuCisJLS0taGVscC0tLQorCSAgUmVzZXJ2ZSB0aGUgZmlyc3QgNjRLIG9mIHBoeXNpY2FsIFJBTSBvbiBCSU9TZXMgdGhhdCBhcmUga25vd24KKwkgIHRvIHBvdGVudGlhbGx5IGNvcnJ1cHQgdGhhdCBtZW1vcnkgcmFuZ2UuIEEgbnVtYmVycyBvZiBCSU9TZXMgYXJlCisJICBrbm93biB0byB1dGlsaXplIHRoaXMgYXJlYSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUsIHNvIGl0IG11c3Qgbm90CisJICBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwuCiAKLQkgU2V0IHRoaXMgdG8gTiBpZiB5b3UgYXJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHlvdSB0cnVzdCB0aGUgQklPUwotCSB0byBnZXQgYWxsIGl0cyBtZW1vcnkgcmVzZXJ2YXRpb25zIGFuZCB1c2FnZXMgcmlnaHQuCisJICBTZXQgdGhpcyB0byBOIGlmIHlvdSBhcmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgeW91IHRydXN0IHRoZSBCSU9TCisJICB0byBnZXQgYWxsIGl0cyBtZW1vcnkgcmVzZXJ2YXRpb25zIGFuZCB1c2FnZXMgcmlnaHQuCiAKLQkgSWYgeW91IGhhdmUgZG91YnRzIGFib3V0IHRoZSBCSU9TIChlLmcuIHN1c3BlbmQvcmVzdW1lIGRvZXMgbm90Ci0JIHdvcmsgb3IgdGhlcmUncyBrZXJuZWwgY3Jhc2hlcyBhZnRlciBjZXJ0YWluIGhhcmR3YXJlIGhvdHBsdWcKLQkgZXZlbnRzKSBhbmQgaXQncyBub3QgQU1JIG9yIFBob2VuaXgsIHRoZW4geW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlCi0JIFg4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT049eSB0byBhbGxvdyB0aGUga2VybmVsIHRvIGNoZWNrIHR5cGljYWwKLQkgY29ycnVwdGlvbiBwYXR0ZXJucy4KKwkgIElmIHlvdSBoYXZlIGRvdWJ0cyBhYm91dCB0aGUgQklPUyAoZS5nLiBzdXNwZW5kL3Jlc3VtZSBkb2VzIG5vdAorCSAgd29yayBvciB0aGVyZSdzIGtlcm5lbCBjcmFzaGVzIGFmdGVyIGNlcnRhaW4gaGFyZHdhcmUgaG90cGx1ZworCSAgZXZlbnRzKSBhbmQgaXQncyBub3QgQU1JIG9yIFBob2VuaXgsIHRoZW4geW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlCisJICBYODZfQ0hFQ0tfQklPU19DT1JSVVBUSU9OPXkgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBjaGVjayB0eXBpY2FsCisJICBjb3JydXB0aW9uIHBhdHRlcm5zLgogCi0JIFNheSBZIGlmIHVuc3VyZS4KKwkgIFNheSBZIGlmIHVuc3VyZS4KIAogY29uZmlnIE1BVEhfRU1VTEFUSU9OCiAJYm9vbApAQCAtMTI2OCw3ICsxMzAyLDcgQEAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJNVFJSIGNsZWFudXAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1UUlIKLQloZWxwCisJLS0taGVscC0tLQogCSAgQ29udmVydCBNVFJSIGxheW91dCBmcm9tIGNvbnRpbnVvdXMgdG8gZGlzY3JldGUsIHNvIFggZHJpdmVycyBjYW4KIAkgIGFkZCB3cml0ZWJhY2sgZW50cmllcy4KIApAQCAtMTI4Myw3ICsxMzE3LDcgQEAKIAlyYW5nZSAwIDEKIAlkZWZhdWx0ICIwIgogCWRlcGVuZHMgb24gTVRSUl9TQU5JVElaRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgRW5hYmxlIG10cnIgY2xlYW51cCBkZWZhdWx0IHZhbHVlCiAKIGNvbmZpZyBNVFJSX1NBTklUSVpFUl9TUEFSRV9SRUdfTlJfREVGQVVMVApAQCAtMTI5MSw3ICsxMzI1LDcgQEAKIAlyYW5nZSAwIDcKIAlkZWZhdWx0ICIxIgogCWRlcGVuZHMgb24gTVRSUl9TQU5JVElaRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgbXRyciBjbGVhbnVwIHNwYXJlIGVudHJpZXMgZGVmYXVsdCwgaXQgY2FuIGJlIGNoYW5nZWQgdmlhCiAJICBtdHJyX3NwYXJlX3JlZ19ucj1OIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgogCkBAIC0xMjk5LDcgKzEzMzMsNyBAQAogCWJvb2wKIAlwcm9tcHQgIng4NiBQQVQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1UUlIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVXNlIFBBVCBhdHRyaWJ1dGVzIHRvIHNldHVwIHBhZ2UgbGV2ZWwgY2FjaGUgY29udHJvbC4KIAogCSAgUEFUcyBhcmUgdGhlIG1vZGVybiBlcXVpdmFsZW50cyBvZiBNVFJScyBhbmQgYXJlIG11Y2ggbW9yZQpAQCAtMTMxNCwyMCArMTM0OCwyMCBAQAogCWJvb2wgIkVGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFDUEkKIAktLS1oZWxwLS0tCi0JVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8gdXNlIEVGSSBydW50aW1lIHNlcnZpY2VzIHRoYXQgYXJlCi0JYXZhaWxhYmxlIChzdWNoIGFzIHRoZSBFRkkgdmFyaWFibGUgc2VydmljZXMpLgorCSAgVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8gdXNlIEVGSSBydW50aW1lIHNlcnZpY2VzIHRoYXQgYXJlCisJICBhdmFpbGFibGUgKHN1Y2ggYXMgdGhlIEVGSSB2YXJpYWJsZSBzZXJ2aWNlcykuCiAKLQlUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBFRkkgZmlybXdhcmUuCi0gIAlJbiBhZGRpdGlvbiwgeW91IHNob3VsZCB1c2UgdGhlIGxhdGVzdCBFTElMTyBsb2FkZXIgYXZhaWxhYmxlCi0gIAlhdCA8aHR0cDovL2VsaWxvLnNvdXJjZWZvcmdlLm5ldD4gaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2UKLSAgCW9mIEVGSSBydW50aW1lIHNlcnZpY2VzLiBIb3dldmVyLCBldmVuIHdpdGggdGhpcyBvcHRpb24sIHRoZQotICAJcmVzdWx0YW50IGtlcm5lbCBzaG91bGQgY29udGludWUgdG8gYm9vdCBvbiBleGlzdGluZyBub24tRUZJCi0gIAlwbGF0Zm9ybXMuCisJICBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBFRkkgZmlybXdhcmUuCisJICBJbiBhZGRpdGlvbiwgeW91IHNob3VsZCB1c2UgdGhlIGxhdGVzdCBFTElMTyBsb2FkZXIgYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL2VsaWxvLnNvdXJjZWZvcmdlLm5ldD4gaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2UKKwkgIG9mIEVGSSBydW50aW1lIHNlcnZpY2VzLiBIb3dldmVyLCBldmVuIHdpdGggdGhpcyBvcHRpb24sIHRoZQorCSAgcmVzdWx0YW50IGtlcm5lbCBzaG91bGQgY29udGludWUgdG8gYm9vdCBvbiBleGlzdGluZyBub24tRUZJCisJICBwbGF0Zm9ybXMuCiAKIGNvbmZpZyBTRUNDT01QCiAJZGVmX2Jvb2wgeQogCXByb21wdCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKIAkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCiAJICBleGVjdXRpb24uIEJ5IHVzaW5nIHBpcGVzIG9yIG90aGVyIHRyYW5zcG9ydHMgbWFkZSBhdmFpbGFibGUgdG8KQEAgLTEzNDAsMTMgKzEzNzQsMTYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KIAorY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SX0FMTAorCWJvb2wKKwogY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SCiAJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBYODZfNjQgJiYgRVhQRVJJTUVOVEFMICYmIEJST0tFTgotCWhlbHAKLSAgICAgICAgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSAtZnN0YWNrLXByb3RlY3RvciBHQ0MgZmVhdHVyZS4gVGhpcwotCSAgZmVhdHVyZSBwdXRzLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucywgYSBjYW5hcnkKLQkgIHZhbHVlIG9uIHRoZSBzdGFjayBqdXN0IGJlZm9yZSB0aGUgcmV0dXJuIGFkZHJlc3MsIGFuZCB2YWxpZGF0ZXMKKwlzZWxlY3QgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIC1mc3RhY2stcHJvdGVjdG9yIEdDQyBmZWF0dXJlLiBUaGlzCisJICBmZWF0dXJlIHB1dHMsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZnVuY3Rpb25zLCBhIGNhbmFyeSB2YWx1ZSBvbgorCSAgdGhlIHN0YWNrIGp1c3QgYmVmb3JlIHRoZSByZXR1cm4gYWRkcmVzcywgYW5kIHZhbGlkYXRlcwogCSAgdGhlIHZhbHVlIGp1c3QgYmVmb3JlIGFjdHVhbGx5IHJldHVybmluZy4gIFN0YWNrIGJhc2VkIGJ1ZmZlcgogCSAgb3ZlcmZsb3dzICh0aGF0IG5lZWQgdG8gb3ZlcndyaXRlIHRoaXMgcmV0dXJuIGFkZHJlc3MpIG5vdyBhbHNvCiAJICBvdmVyd3JpdGUgdGhlIGNhbmFyeSwgd2hpY2ggZ2V0cyBkZXRlY3RlZCBhbmQgdGhlIGF0dGFjayBpcyB0aGVuCkBAIC0xMzU0LDIyICsxMzkxLDE0IEBACiAKIAkgIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBnY2MgdmVyc2lvbiA0LjIgb3IgYWJvdmUsIG9yIGEgZGlzdHJpYnV0aW9uCiAJICBnY2Mgd2l0aCB0aGUgZmVhdHVyZSBiYWNrcG9ydGVkLiBPbGRlciB2ZXJzaW9ucyBhcmUgYXV0b21hdGljYWxseQotCSAgZGV0ZWN0ZWQgYW5kIGZvciB0aG9zZSB2ZXJzaW9ucywgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpZ25vcmVkLgotCi1jb25maWcgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCi0JYm9vbCAiVXNlIHN0YWNrLXByb3RlY3RvciBmb3IgYWxsIGZ1bmN0aW9ucyIKLQlkZXBlbmRzIG9uIENDX1NUQUNLUFJPVEVDVE9SCi0JaGVscAotCSAgTm9ybWFsbHksIEdDQyBvbmx5IGluc2VydHMgdGhlIGNhbmFyeSB2YWx1ZSBwcm90ZWN0aW9uIGZvcgotCSAgZnVuY3Rpb25zIHRoYXQgdXNlIGxhcmdlLWlzaCBvbi1zdGFjayBidWZmZXJzLiBCeSBlbmFibGluZwotCSAgdGhpcyBvcHRpb24sIEdDQyB3aWxsIGJlIGFza2VkIHRvIGRvIHRoaXMgZm9yIEFMTCBmdW5jdGlvbnMuCisJICBkZXRlY3RlZCBhbmQgZm9yIHRob3NlIHZlcnNpb25zLCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzCisJICBpZ25vcmVkLiAoYW5kIGEgd2FybmluZyBpcyBwcmludGVkIGR1cmluZyBib290dXApCiAKIHNvdXJjZSBrZXJuZWwvS2NvbmZpZy5oegogCiBjb25maWcgS0VYRUMKIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCIKLQlkZXBlbmRzIG9uIFg4Nl9CSU9TX1JFQk9PVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCiAJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdAogCSAgYnV0IGl0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKQEAgLTEzODYsNyArMTQxNSw3IEBACiBjb25maWcgQ1JBU0hfRFVNUAogCWJvb2wgImtlcm5lbCBjcmFzaCBkdW1wcyIKIAlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIEhJR0hNRU0pCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEdlbmVyYXRlIGNyYXNoIGR1bXAgYWZ0ZXIgYmVpbmcgc3RhcnRlZCBieSBrZXhlYy4KIAkgIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzCiAJICB3aGljaCBhcmUgbG9hZGVkIGluIHRoZSBtYWluIGtlcm5lbCB3aXRoIGtleGVjLXRvb2xzIGludG8KQEAgLTE0MDEsNyArMTQzMCw3IEBACiAJYm9vbCAia2V4ZWMganVtcCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlcGVuZHMgb24gS0VYRUMgJiYgSElCRVJOQVRJT04gJiYgWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEp1bXAgYmV0d2VlbiBvcmlnaW5hbCBrZXJuZWwgYW5kIGtleGVjZWQga2VybmVsIGFuZCBpbnZva2UKIAkgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQwogCkBAIC0xNDEwLDcgKzE0MzksNyBAQAogCWRlZmF1bHQgIjB4MTAwMDAwMCIgaWYgWDg2X05VTUFRCiAJZGVmYXVsdCAiMHgyMDAwMDAiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjB4MTAwMDAwIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGdpdmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBrZXJuZWwgaXMgbG9hZGVkLgogCiAJICBJZiBrZXJuZWwgaXMgYSBub3QgcmVsb2NhdGFibGUgKENPTkZJR19SRUxPQ0FUQUJMRT1uKSB0aGVuCkBAIC0xNDUxLDcgKzE0ODAsNyBAQAogY29uZmlnIFJFTE9DQVRBQkxFCiAJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBidWlsZHMgYSBrZXJuZWwgaW1hZ2UgdGhhdCByZXRhaW5zIHJlbG9jYXRpb24gaW5mb3JtYXRpb24KIAkgIHNvIGl0IGNhbiBiZSBsb2FkZWQgc29tZXBsYWNlIGJlc2lkZXMgdGhlIGRlZmF1bHQgMU1CLgogCSAgVGhlIHJlbG9jYXRpb25zIHRlbmQgdG8gbWFrZSB0aGUga2VybmVsIGJpbmFyeSBhYm91dCAxMCUgbGFyZ2VyLApAQCAtMTQ3MSw3ICsxNTAwLDcgQEAKIAlkZWZhdWx0ICIweDEwMDAwMCIgaWYgWDg2XzMyCiAJZGVmYXVsdCAiMHgyMDAwMDAiIGlmIFg4Nl82NAogCXJhbmdlIDB4MjAwMCAweDQwMDAwMAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIHZhbHVlIHB1dHMgdGhlIGFsaWdubWVudCByZXN0cmljdGlvbnMgb24gcGh5c2ljYWwgYWRkcmVzcwogCSAgd2hlcmUga2VybmVsIGlzIGxvYWRlZCBhbmQgcnVuIGZyb20uIEtlcm5lbCBpcyBjb21waWxlZCBmb3IgYW4KIAkgIGFkZHJlc3Mgd2hpY2ggbWVldHMgYWJvdmUgYWxpZ25tZW50IHJlc3RyaWN0aW9uLgpAQCAtMTQ5Miw3ICsxNTIxLDcgQEAKIAogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIgotCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgIVg4Nl9WT1lBR0VSCisJZGVwZW5kcyBvbiBTTVAgJiYgSE9UUExVRwogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHVybmluZyBDUFVzIG9mZiBhbmQgb24uIENQVXMgY2FuIGJlCiAJICBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUuCkBAIC0xNTA0LDcgKzE1MzMsNyBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkNvbXBhdCBWRFNPIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYODZfMzIgfHwgSUEzMl9FTVVMQVRJT04KLQloZWxwCisJLS0taGVscC0tLQogCSAgTWFwIHRoZSAzMi1iaXQgVkRTTyB0byB0aGUgcHJlZGljdGFibGUgb2xkLXN0eWxlIGFkZHJlc3MgdG9vLgogCS0tLWhlbHAtLS0KIAkgIFNheSBOIGhlcmUgaWYgeW91IGFyZSBydW5uaW5nIGEgc3VmZmljaWVudGx5IHJlY2VudCBnbGliYwpAQCAtMTUxNiw3ICsxNTQ1LDcgQEAKIGNvbmZpZyBDTURMSU5FX0JPT0wKIAlib29sICJCdWlsdC1pbiBrZXJuZWwgY29tbWFuZCBsaW5lIgogCWRlZmF1bHQgbgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBbGxvdyBmb3Igc3BlY2lmeWluZyBib290IGFyZ3VtZW50cyB0byB0aGUga2VybmVsIGF0CiAJICBidWlsZCB0aW1lLiAgT24gc29tZSBzeXN0ZW1zIChlLmcuIGVtYmVkZGVkIG9uZXMpLCBpdCBpcwogCSAgbmVjZXNzYXJ5IG9yIGNvbnZlbmllbnQgdG8gcHJvdmlkZSBzb21lIG9yIGFsbCBvZiB0aGUKQEAgLTE1MzQsNyArMTU2Myw3IEBACiAJc3RyaW5nICJCdWlsdC1pbiBrZXJuZWwgY29tbWFuZCBzdHJpbmciCiAJZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKIAlkZWZhdWx0ICIiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVudGVyIGFyZ3VtZW50cyBoZXJlIHRoYXQgc2hvdWxkIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAogCSAgaW1hZ2UgYW5kIHVzZWQgYXQgYm9vdCB0aW1lLiAgSWYgdGhlIGJvb3QgbG9hZGVyIHByb3ZpZGVzIGEKIAkgIGNvbW1hbmQgbGluZSBhdCBib290IHRpbWUsIGl0IGlzIGFwcGVuZGVkIHRvIHRoaXMgc3RyaW5nIHRvCkBAIC0xNTUxLDcgKzE1ODAsNyBAQAogCWJvb2wgIkJ1aWx0LWluIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgYm9vdCBsb2FkZXIgYXJndW1lbnRzIgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gQ01ETElORV9CT09MCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNldCB0aGlzIG9wdGlvbiB0byAnWScgdG8gaGF2ZSB0aGUga2VybmVsIGlnbm9yZSB0aGUgYm9vdCBsb2FkZXIKIAkgIGNvbW1hbmQgbGluZSwgYW5kIHVzZSBPTkxZIHRoZSBidWlsdC1pbiBjb21tYW5kIGxpbmUuCiAKQEAgLTE1NzMsNyArMTYwMiw2IEBACiAJZGVwZW5kcyBvbiBOVU1BCiAKIG1lbnUgIlBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucyIKLQlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgogCiBjb25maWcgQVJDSF9ISUJFUk5BVElPTl9IRUFERVIKIAlkZWZfYm9vbCB5CkBAIC0xNjUxLDcgKzE2NzksNyBAQAogCiBjb25maWcgQVBNX0lHTk9SRV9VU0VSX1NVU1BFTkQKIAlib29sICJJZ25vcmUgVVNFUiBTVVNQRU5EIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGlnbm9yZSBVU0VSIFNVU1BFTkQgcmVxdWVzdHMuIE9uIG1hY2hpbmVzIHdpdGggYQogCSAgY29tcGxpYW50IEFQTSBCSU9TLCB5b3Ugd2FudCB0byBzYXkgTi4gSG93ZXZlciwgb24gdGhlIE5FQyBWZXJzYSBNCiAJICBzZXJpZXMgbm90ZWJvb2tzLCBpdCBpcyBuZWNlc3NhcnkgdG8gc2F5IFkgYmVjYXVzZSBvZiBhIEJJT1MgYnVnLgpAQCAtMTY3NSw3ICsxNzAzLDcgQEAKIAogY29uZmlnIEFQTV9DUFVfSURMRQogCWJvb2wgIk1ha2UgQ1BVIElkbGUgY2FsbHMgd2hlbiBpZGxlIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGUgY2FsbHMgdG8gQVBNIENQVSBJZGxlL0NQVSBCdXN5IGluc2lkZSB0aGUga2VybmVsJ3MgaWRsZSBsb29wLgogCSAgT24gc29tZSBtYWNoaW5lcywgdGhpcyBjYW4gYWN0aXZhdGUgaW1wcm92ZWQgcG93ZXIgc2F2aW5ncywgc3VjaCBhcwogCSAgYSBzbG93ZWQgQ1BVIGNsb2NrIHJhdGUsIHdoZW4gdGhlIG1hY2hpbmUgaXMgaWRsZS4gVGhlc2UgaWRsZSBjYWxscwpAQCAtMTY4Niw3ICsxNzE0LDcgQEAKIAogY29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LCiAJYm9vbCAiRW5hYmxlIGNvbnNvbGUgYmxhbmtpbmcgdXNpbmcgQVBNIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGUgY29uc29sZSBibGFua2luZyB1c2luZyB0aGUgQVBNLiBTb21lIGxhcHRvcHMgY2FuIHVzZSB0aGlzIHRvCiAJICB0dXJuIG9mZiB0aGUgTENEIGJhY2tsaWdodCB3aGVuIHRoZSBzY3JlZW4gYmxhbmtlciBvZiB0aGUgTGludXgKIAkgIHZpcnR1YWwgY29uc29sZSBibGFua3MgdGhlIHNjcmVlbi4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSB1c2VkIGJ5CkBAIC0xNjk5LDcgKzE3MjcsNyBAQAogCiBjb25maWcgQVBNX0FMTE9XX0lOVFMKIAlib29sICJBbGxvdyBpbnRlcnJ1cHRzIGR1cmluZyBBUE0gQklPUyBjYWxscyIKLQloZWxwCisJLS0taGVscC0tLQogCSAgTm9ybWFsbHkgd2UgZGlzYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHRzIHdoaWxlIHdlIGFyZSBtYWtpbmcgY2FsbHMgdG8KIAkgIHRoZSBBUE0gQklPUyBhcyBhIG1lYXN1cmUgdG8gbGVzc2VuIHRoZSBlZmZlY3RzIG9mIGEgYmFkbHkgYmVoYXZpbmcKIAkgIEJJT1MgaW1wbGVtZW50YXRpb24uICBUaGUgQklPUyBzaG91bGQgcmVlbmFibGUgaW50ZXJydXB0cyBpZiBpdApAQCAtMTcyNCw3ICsxNzUyLDcgQEAKIAlib29sICJQQ0kgc3VwcG9ydCIKIAlkZWZhdWx0IHkKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kgaWYgKFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDKQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQogCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQogCSAgeW91ciBib3guIE90aGVyIGJ1cyBzeXN0ZW1zIGFyZSBJU0EsIEVJU0EsIE1pY3JvQ2hhbm5lbCAoTUNBKSBvcgpAQCAtMTc5NSw3ICsxODIzLDcgQEAKIGNvbmZpZyBETUFSCiAJYm9vbCAiU3VwcG9ydCBmb3IgRE1BIFJlbWFwcGluZyBEZXZpY2VzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBDSV9NU0kgJiYgQUNQSSAmJiBFWFBFUklNRU5UQUwKLQloZWxwCisJLS0taGVscC0tLQogCSAgRE1BIHJlbWFwcGluZyAoRE1BUikgZGV2aWNlcyBzdXBwb3J0IGVuYWJsZXMgaW5kZXBlbmRlbnQgYWRkcmVzcwogCSAgdHJhbnNsYXRpb25zIGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBmcm9tIGRldmljZXMuCiAJICBUaGVzZSBETUEgcmVtYXBwaW5nIGRldmljZXMgYXJlIHJlcG9ydGVkIHZpYSBBQ1BJIHRhYmxlcwpAQCAtMTgxNywyOSArMTg0NSwzMCBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIlN1cHBvcnQgZm9yIEdyYXBoaWNzIHdvcmthcm91bmQiCiAJZGVwZW5kcyBvbiBETUFSCi0JaGVscAotCSBDdXJyZW50IEdyYXBoaWNzIGRyaXZlcnMgdGVuZCB0byB1c2UgcGh5c2ljYWwgYWRkcmVzcwotCSBmb3IgRE1BIGFuZCBhdm9pZCB1c2luZyBETUEgQVBJcy4gU2V0dGluZyB0aGlzIGNvbmZpZwotCSBvcHRpb24gcGVybWl0cyB0aGUgSU9NTVUgZHJpdmVyIHRvIHNldCBhIHVuaXR5IG1hcCBmb3IKLQkgYWxsIHRoZSBPUy12aXNpYmxlIG1lbW9yeS4gSGVuY2UgdGhlIGRyaXZlciBjYW4gY29udGludWUKLQkgdG8gdXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgRE1BLgorCS0tLWhlbHAtLS0KKwkgIEN1cnJlbnQgR3JhcGhpY3MgZHJpdmVycyB0ZW5kIHRvIHVzZSBwaHlzaWNhbCBhZGRyZXNzCisJICBmb3IgRE1BIGFuZCBhdm9pZCB1c2luZyBETUEgQVBJcy4gU2V0dGluZyB0aGlzIGNvbmZpZworCSAgb3B0aW9uIHBlcm1pdHMgdGhlIElPTU1VIGRyaXZlciB0byBzZXQgYSB1bml0eSBtYXAgZm9yCisJICBhbGwgdGhlIE9TLXZpc2libGUgbWVtb3J5LiBIZW5jZSB0aGUgZHJpdmVyIGNhbiBjb250aW51ZQorCSAgdG8gdXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgRE1BLgogCiBjb25maWcgRE1BUl9GTE9QUFlfV0EKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBETUFSCi0JaGVscAotCSBGbG9wcHkgZGlzayBkcml2ZXJzIGFyZSBrbm93IHRvIGJ5cGFzcyBETUEgQVBJIGNhbGxzCi0JIHRoZXJlYnkgZmFpbGluZyB0byB3b3JrIHdoZW4gSU9NTVUgaXMgZW5hYmxlZC4gVGhpcwotCSB3b3JrYXJvdW5kIHdpbGwgc2V0dXAgYSAxOjEgbWFwcGluZyBmb3IgdGhlIGZpcnN0Ci0JIDE2TSB0byBtYWtlIGZsb3BweSAoYW4gSVNBIGRldmljZSkgd29yay4KKwktLS1oZWxwLS0tCisJICBGbG9wcHkgZGlzayBkcml2ZXJzIGFyZSBrbm93IHRvIGJ5cGFzcyBETUEgQVBJIGNhbGxzCisJICB0aGVyZWJ5IGZhaWxpbmcgdG8gd29yayB3aGVuIElPTU1VIGlzIGVuYWJsZWQuIFRoaXMKKwkgIHdvcmthcm91bmQgd2lsbCBzZXR1cCBhIDE6MSBtYXBwaW5nIGZvciB0aGUgZmlyc3QKKwkgIDE2TSB0byBtYWtlIGZsb3BweSAoYW4gSVNBIGRldmljZSkgd29yay4KIAogY29uZmlnIElOVFJfUkVNQVAKIAlib29sICJTdXBwb3J0IGZvciBJbnRlcnJ1cHQgUmVtYXBwaW5nIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFg4Nl9JT19BUElDICYmIFBDSV9NU0kgJiYgQUNQSSAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JIFN1cHBvcnRzIEludGVycnVwdCByZW1hcHBpbmcgZm9yIElPLUFQSUMgYW5kIE1TSSBkZXZpY2VzLgotCSBUbyB1c2UgeDJhcGljIG1vZGUgaW4gdGhlIENQVSdzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvcgotCSB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSdzIGhhdmluZyA+IDggYml0IEFQSUMgSUQsIHNheSBZLgorCXNlbGVjdCBYODZfWDJBUElDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydHMgSW50ZXJydXB0IHJlbWFwcGluZyBmb3IgSU8tQVBJQyBhbmQgTVNJIGRldmljZXMuCisJICBUbyB1c2UgeDJhcGljIG1vZGUgaW4gdGhlIENQVSdzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvcgorCSAgdG8gc3VwcG9ydCBwbGF0Zm9ybXMgd2l0aCBDUFUncyBoYXZpbmcgPiA4IGJpdCBBUElDIElELCBzYXkgWS4KIAogc291cmNlICJkcml2ZXJzL3BjaS9wY2llL0tjb25maWciCiAKQEAgLTE4NTMsOCArMTg4Miw3IEBACiAKIGNvbmZpZyBJU0EKIAlib29sICJJU0Egc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIElTQSBzbG90cyBvbiB5b3VyIG1vdGhlcmJvYXJkLiAgSVNBIGlzIHRoZQogCSAgbmFtZSBvZiBhIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZgogCSAgaW5zaWRlIHlvdXIgYm94LiAgT3RoZXIgYnVzIHN5c3RlbXMgYXJlIFBDSSwgRUlTQSwgTWljcm9DaGFubmVsCkBAIC0xODgwLDkgKzE5MDgsOCBAQAogc291cmNlICJkcml2ZXJzL2Vpc2EvS2NvbmZpZyIKIAogY29uZmlnIE1DQQotCWJvb2wgIk1DQSBzdXBwb3J0IiBpZiAhWDg2X1ZPWUFHRVIKLQlkZWZhdWx0IHkgaWYgWDg2X1ZPWUFHRVIKLQloZWxwCisJYm9vbCAiTUNBIHN1cHBvcnQiCisJLS0taGVscC0tLQogCSAgTWljcm9DaGFubmVsIEFyY2hpdGVjdHVyZSBpcyBmb3VuZCBpbiBzb21lIElCTSBQUy8yIG1hY2hpbmVzIGFuZAogCSAgbGFwdG9wcy4gIEl0IGlzIGEgYnVzIHN5c3RlbSBzaW1pbGFyIHRvIFBDSSBvciBJU0EuIFNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tY2EudHh0PiAoYW5kIGVzcGVjaWFsbHkgdGhlIHdlYiBwYWdlIGdpdmVuCkBAIC0xODkyLDggKzE5MTksNyBAQAogCiBjb25maWcgU0N4MjAwCiAJdHJpc3RhdGUgIk5hdFNlbWkgU0N4MjAwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhWDg2X1ZPWUFHRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yJ3MKIAkgIChub3cgQU1EJ3MpIEdlb2RlIHByb2Nlc3NvcnMuICBUaGUgZHJpdmVyIHByb2JlcyBmb3IgdGhlCiAJICBQQ0ktSURzIG9mIHNldmVyYWwgb24tY2hpcCBkZXZpY2VzLCBzbyBpdHMgYSBnb29kIGRlcGVuZGVuY3kKQEAgLTE5MDUsNyArMTkzMSw3IEBACiAJdHJpc3RhdGUgIk5hdFNlbWkgU0N4MjAwIDI3TUh6IEhpZ2gtUmVzb2x1dGlvbiBUaW1lciBTdXBwb3J0IgogCWRlcGVuZHMgb24gU0N4MjAwICYmIEdFTkVSSUNfVElNRQogCWRlZmF1bHQgeQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2Nrc291cmNlIGJ1aWx0IHVwb24gdGhlIG9uLWNoaXAKIAkgIDI3TUh6IGhpZ2gtcmVzb2x1dGlvbiB0aW1lci4gIEl0cyBhbHNvIGEgd29ya2Fyb3VuZCBmb3IKIAkgIE5TQyBHZW9kZSBTQy0xMTAwJ3MgYnVnZ3kgVFNDLCB3aGljaCBsb3NlcyB0aW1lIHdoZW4gdGhlCkBAIC0xOTE2LDcgKzE5NDIsNyBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkdlb2RlIE11bHRpLUZ1bmN0aW9uIEdlbmVyYWwgUHVycG9zZSBUaW1lciAoTUZHUFQpIGV2ZW50cyIKIAlkZXBlbmRzIG9uIE1HRU9ERV9MWCAmJiBHRU5FUklDX1RJTUUgJiYgR0VORVJJQ19DTE9DS0VWRU5UUwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2NrIGV2ZW50IHNvdXJjZSBiYXNlZCBvbiB0aGUgTUZHUFQKIAkgIHRpbWVyKHMpIGluIHRoZSBDUzU1MzUgYW5kIENTNTUzNiBjb21wYW5pb24gY2hpcCBmb3IgdGhlIGdlb2RlLgogCSAgTUZHUFRzIGhhdmUgYSBiZXR0ZXIgcmVzb2x1dGlvbiBhbmQgbWF4IGludGVydmFsIHRoYW4gdGhlCkBAIC0xOTI1LDcgKzE5NTEsNyBAQAogY29uZmlnIE9MUEMKIAlib29sICJPbmUgTGFwdG9wIFBlciBDaGlsZCBzdXBwb3J0IgogCWRlZmF1bHQgbgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBZGQgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIHRoZSB1bmlxdWUgZmVhdHVyZXMgb2YgdGhlIE9MUEMKIAkgIFhPIGhhcmR3YXJlLgogCkBAIC0xOTUwLDE2ICsxOTc2LDE2IEBACiAJYm9vbCAiSUEzMiBFbXVsYXRpb24iCiAJZGVwZW5kcyBvbiBYODZfNjQKIAlzZWxlY3QgQ09NUEFUX0JJTkZNVF9FTEYKLQloZWxwCisJLS0taGVscC0tLQogCSAgSW5jbHVkZSBjb2RlIHRvIHJ1biAzMi1iaXQgcHJvZ3JhbXMgdW5kZXIgYSA2NC1iaXQga2VybmVsLiBZb3Ugc2hvdWxkCiAJICBsaWtlbHkgdHVybiB0aGlzIG9uLCB1bmxlc3MgeW91J3JlIDEwMCUgc3VyZSB0aGF0IHlvdSBkb24ndCBoYXZlIGFueQogCSAgMzItYml0IHByb2dyYW1zIGxlZnQuCiAKIGNvbmZpZyBJQTMyX0FPVVQKLSAgICAgICB0cmlzdGF0ZSAiSUEzMiBhLm91dCBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gSUEzMl9FTVVMQVRJT04KLSAgICAgICBoZWxwCi0gICAgICAgICBTdXBwb3J0IG9sZCBhLm91dCBiaW5hcmllcyBpbiB0aGUgMzJiaXQgZW11bGF0aW9uLgorCXRyaXN0YXRlICJJQTMyIGEub3V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTgorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgb2xkIGEub3V0IGJpbmFyaWVzIGluIHRoZSAzMmJpdCBlbXVsYXRpb24uCiAKIGNvbmZpZyBDT01QQVQKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGM5OGQ1MmU4Li5hOTVlYWYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNTAsNyArNTAsNyBAQAogY29uZmlnIE00ODYKIAlib29sICI0ODYiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgNDg2IHNlcmllcyBwcm9jZXNzb3IsIGVpdGhlciBJbnRlbCBvciBvbmUgb2YgdGhlCiAJICBjb21wYXRpYmxlIHByb2Nlc3NvcnMgZnJvbSBBTUQsIEN5cml4LCBJQk0sIG9yIEludGVsLiAgSW5jbHVkZXMgRFgsCiAJICBEWDIsIGFuZCBEWDQgdmFyaWFudHM7IGFsc28gU0wvU0xDL1NMQzIvU0xDMy9TWC9TWDIgYW5kIFVNQyBVNUQgb3IKQEAgLTU5LDcgKzU5LDcgQEAKIGNvbmZpZyBNNTg2CiAJYm9vbCAiNTg2L0s1LzV4ODYvNng4Ni82eDg2TVgiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGFuIDU4NiBvciA2ODYgc2VyaWVzIHByb2Nlc3NvciBzdWNoIGFzIHRoZSBBTUQgSzUsCiAJICB0aGUgQ3lyaXggNXg4NiwgNng4NiBhbmQgNng4Nk1YLiAgVGhpcyBjaG9pY2UgZG9lcyBub3QKIAkgIGFzc3VtZSB0aGUgUkRUU0MgKFJlYWQgVGltZSBTdGFtcCBDb3VudGVyKSBpbnN0cnVjdGlvbi4KQEAgLTY3LDIxICs2NywyMSBAQAogY29uZmlnIE01ODZUU0MKIAlib29sICJQZW50aXVtLUNsYXNzaWMiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgUGVudGl1bSBDbGFzc2ljIHByb2Nlc3NvciB3aXRoIHRoZSBSRFRTQyAoUmVhZAogCSAgVGltZSBTdGFtcCBDb3VudGVyKSBpbnN0cnVjdGlvbiBmb3IgYmVuY2htYXJraW5nLgogCiBjb25maWcgTTU4Nk1NWAogCWJvb2wgIlBlbnRpdW0tTU1YIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhIFBlbnRpdW0gd2l0aCB0aGUgTU1YIGdyYXBoaWNzL211bHRpbWVkaWEKIAkgIGV4dGVuZGVkIGluc3RydWN0aW9ucy4KIAogY29uZmlnIE02ODYKIAlib29sICJQZW50aXVtLVBybyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgSW50ZWwgUGVudGl1bSBQcm8gY2hpcHMuICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZgogCSAgUGVudGl1bSBQcm8gZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zLCBhbmQgZGlzYWJsZXMgdGhlIGluaXQtdGltZSBndWFyZAogCSAgYWdhaW5zdCB0aGUgZjAwZiBidWcgZm91bmQgaW4gZWFybGllciBQZW50aXVtcy4KQEAgLTg5LDcgKzg5LDcgQEAKIGNvbmZpZyBNUEVOVElVTUlJCiAJYm9vbCAiUGVudGl1bS1JSS9DZWxlcm9uKHByZS1Db3BwZXJtaW5lKSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgSW50ZWwgY2hpcHMgYmFzZWQgb24gdGhlIFBlbnRpdW0tSUkgYW5kCiAJICBwcmUtQ29wcGVybWluZSBDZWxlcm9uIGNvcmUuICBUaGlzIG9wdGlvbiBlbmFibGVzIGFuIHVuYWxpZ25lZAogCSAgY29weSBvcHRpbWl6YXRpb24sIGNvbXBpbGVzIHRoZSBrZXJuZWwgd2l0aCBvcHRpbWl6YXRpb24gZmxhZ3MKQEAgLTk5LDcgKzk5LDcgQEAKIGNvbmZpZyBNUEVOVElVTUlJSQogCWJvb2wgIlBlbnRpdW0tSUlJL0NlbGVyb24oQ29wcGVybWluZSkvUGVudGl1bS1JSUkgWGVvbiIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgSW50ZWwgY2hpcHMgYmFzZWQgb24gdGhlIFBlbnRpdW0tSUlJIGFuZAogCSAgQ2VsZXJvbi1Db3BwZXJtaW5lIGNvcmUuICBUaGlzIG9wdGlvbiBlbmFibGVzIHVzZSBvZiBzb21lCiAJICBleHRlbmRlZCBwcmVmZXRjaCBpbnN0cnVjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlIFBlbnRpdW0gSUkKQEAgLTEwOCwxNCArMTA4LDE0IEBACiBjb25maWcgTVBFTlRJVU1NCiAJYm9vbCAiUGVudGl1bSBNIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBJbnRlbCBQZW50aXVtIE0gKG5vdCBQZW50aXVtLTQgTSkKIAkgIG5vdGVib29rIGNoaXBzLgogCiBjb25maWcgTVBFTlRJVU00CiAJYm9vbCAiUGVudGl1bS00L0NlbGVyb24oUDQtYmFzZWQpL1BlbnRpdW0tNCBNL29sZGVyIFhlb24iCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIEludGVsIFBlbnRpdW0gNCBjaGlwcy4gIFRoaXMgaW5jbHVkZXMgdGhlCiAJICBQZW50aXVtIDQsIFBlbnRpdW0gRCwgUDQtYmFzZWQgQ2VsZXJvbiBhbmQgWGVvbiwgYW5kCiAJICBQZW50aXVtLTQgTSAobm90IFBlbnRpdW0gTSkgY2hpcHMuICBUaGlzIG9wdGlvbiBlbmFibGVzIGNvbXBpbGUKQEAgLTE1MSw3ICsxNTEsNyBAQAogY29uZmlnIE1LNgogCWJvb2wgIks2L0s2LUlJL0s2LUlJSSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYW4gQU1EIEs2LWZhbWlseSBwcm9jZXNzb3IuICBFbmFibGVzIHVzZSBvZgogCSAgc29tZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMsIGFuZCBwYXNzZXMgYXBwcm9wcmlhdGUgb3B0aW1pemF0aW9uCiAJICBmbGFncyB0byBHQ0MuCkBAIC0xNTksMTQgKzE1OSwxNCBAQAogY29uZmlnIE1LNwogCWJvb2wgIkF0aGxvbi9EdXJvbi9LNyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYW4gQU1EIEF0aGxvbiBLNy1mYW1pbHkgcHJvY2Vzc29yLiAgRW5hYmxlcyB1c2Ugb2YKIAkgIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zLCBhbmQgcGFzc2VzIGFwcHJvcHJpYXRlIG9wdGltaXphdGlvbgogCSAgZmxhZ3MgdG8gR0NDLgogCiBjb25maWcgTUs4CiAJYm9vbCAiT3B0ZXJvbi9BdGhsb242NC9IYW1tZXIvSzgiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhbiBBTUQgT3B0ZXJvbiBvciBBdGhsb242NCBIYW1tZXItZmFtaWx5IHByb2Nlc3Nvci4KIAkgIEVuYWJsZXMgdXNlIG9mIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zLCBhbmQgcGFzc2VzIGFwcHJvcHJpYXRlCiAJICBvcHRpbWl6YXRpb24gZmxhZ3MgdG8gR0NDLgpAQCAtMTc0LDcgKzE3NCw3IEBACiBjb25maWcgTUNSVVNPRQogCWJvb2wgIkNydXNvZSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYSBUcmFuc21ldGEgQ3J1c29lIHByb2Nlc3Nvci4gIFRyZWF0cyB0aGUgcHJvY2Vzc29yCiAJICBsaWtlIGEgNTg2IHdpdGggVFNDLCBhbmQgc2V0cyBzb21lIEdDQyBvcHRpbWl6YXRpb24gZmxhZ3MgKGxpa2UgYQogCSAgUGVudGl1bSBQcm8gd2l0aCBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzKS4KQEAgLTE4MiwxMyArMTgyLDEzIEBACiBjb25maWcgTUVGRklDRU9OCiAJYm9vbCAiRWZmaWNlb24iCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgVHJhbnNtZXRhIEVmZmljZW9uIHByb2Nlc3Nvci4KIAogY29uZmlnIE1XSU5DSElQQzYKIAlib29sICJXaW5jaGlwLUM2IgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhbiBJRFQgV2luY2hpcCBDNiBjaGlwLiAgTGludXggYW5kIEdDQwogCSAgdHJlYXQgdGhpcyBjaGlwIGFzIGEgNTg2VFNDIHdpdGggc29tZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMKIAkgIGFuZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgpAQCAtMTk2LDcgKzE5Niw3IEBACiBjb25maWcgTVdJTkNISVAzRAogCWJvb2wgIldpbmNoaXAtMi9XaW5jaGlwLTJBL1dpbmNoaXAtMyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYW4gSURUIFdpbmNoaXAtMiwgMkEgb3IgMy4gIExpbnV4IGFuZCBHQ0MKIAkgIHRyZWF0IHRoaXMgY2hpcCBhcyBhIDU4NlRTQyB3aXRoIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zCiAJICBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gIEFsc28gZW5hYmxlIG91dCBvZiBvcmRlciBtZW1vcnkKQEAgLTIwNiwxOSArMjA2LDE5IEBACiBjb25maWcgTUdFT0RFR1gxCiAJYm9vbCAiR2VvZGVHWDEiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgR2VvZGUgR1gxIChDeXJpeCBNZWRpYUdYKSBjaGlwLgogCiBjb25maWcgTUdFT0RFX0xYCiAJYm9vbCAiR2VvZGUgR1gvTFgiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIEFNRCBHZW9kZSBHWCBhbmQgTFggcHJvY2Vzc29ycy4KIAogY29uZmlnIE1DWVJJWElJSQogCWJvb2wgIkN5cml4SUlJL1ZJQS1DMyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYSBDeXJpeCBJSUkgb3IgQzMgY2hpcC4gIFByZXNlbnRseSBMaW51eCBhbmQgR0NDCiAJICB0cmVhdCB0aGlzIGNoaXAgYXMgYSBnZW5lcmljIDU4Ni4gV2hpbHN0IHRoZSBDUFUgaXMgNjg2IGNsYXNzLAogCSAgaXQgbGFja3MgdGhlIGNtb3YgZXh0ZW5zaW9uIHdoaWNoIGdjYyBhc3N1bWVzIGlzIHByZXNlbnQgd2hlbgpAQCAtMjMwLDcgKzIzMCw3IEBACiBjb25maWcgTVZJQUMzXzIKIAlib29sICJWSUEgQzMtMiAoTmVoZW1pYWgpIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhIFZJQSBDMyAiTmVoZW1pYWgiLiBTZWxlY3RpbmcgdGhpcyBlbmFibGVzIHVzYWdlCiAJICBvZiBTU0UgYW5kIHRlbGxzIGdjYyB0byB0cmVhdCB0aGUgQ1BVIGFzIGEgNjg2LgogCSAgTm90ZSwgdGhpcyBrZXJuZWwgd2lsbCBub3QgYm9vdCBvbiBvbGRlciAocHJlIG1vZGVsIDkpIEMzcy4KQEAgLTIzOCwxNCArMjM4LDE0IEBACiBjb25maWcgTVZJQUM3CiAJYm9vbCAiVklBIEM3IgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhIFZJQSBDNy4gIFNlbGVjdGluZyB0aGlzIHVzZXMgdGhlIGNvcnJlY3QgY2FjaGUKIAkgIHNoaWZ0IGFuZCB0ZWxscyBnY2MgdG8gdHJlYXQgdGhlIENQVSBhcyBhIDY4Ni4KIAogY29uZmlnIE1QU0MKIAlib29sICJJbnRlbCBQNCAvIG9sZGVyIE5ldGJ1cnN0IGJhc2VkIFhlb24iCiAJZGVwZW5kcyBvbiBYODZfNjQKLQloZWxwCisJLS0taGVscC0tLQogCSAgT3B0aW1pemUgZm9yIEludGVsIFBlbnRpdW0gNCwgUGVudGl1bSBEIGFuZCBvbGRlciBOb2NvbmEvRGVtcHNleQogCSAgWGVvbiBDUFVzIHdpdGggSW50ZWwgNjRiaXQgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIHg4Ni02NC4KIAkgIE5vdGUgdGhhdCB0aGUgbGF0ZXN0IFhlb25zIChYZW9uIDUxeHggYW5kIDUzeHgpIGFyZSBub3QgYmFzZWQgb24gdGhlCkBAIC0yNTUsNyArMjU1LDcgQEAKIAogY29uZmlnIE1DT1JFMgogCWJvb2wgIkNvcmUgMi9uZXdlciBYZW9uIgotCWhlbHAKKwktLS1oZWxwLS0tCiAKIAkgIFNlbGVjdCB0aGlzIGZvciBJbnRlbCBDb3JlIDIgYW5kIG5ld2VyIENvcmUgMiBYZW9ucyAoWGVvbiA1MXh4IGFuZAogCSAgNTN4eCkgQ1BVcy4gWW91IGNhbiBkaXN0aW5ndWlzaCBuZXdlciBmcm9tIG9sZGVyIFhlb25zIGJ5IHRoZSBDUFUKQEAgLTI2NSw3ICsyNjUsNyBAQAogY29uZmlnIEdFTkVSSUNfQ1BVCiAJYm9vbCAiR2VuZXJpYy14ODYtNjQiCiAJZGVwZW5kcyBvbiBYODZfNjQKLQloZWxwCisJLS0taGVscC0tLQogCSAgR2VuZXJpYyB4ODYtNjQgQ1BVLgogCSAgUnVuIGVxdWFsbHkgd2VsbCBvbiBhbGwgeDg2LTY0IENQVXMuCiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogY29uZmlnIFg4Nl9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyB4ODYgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBJbnN0ZWFkIG9mIGp1c3QgaW5jbHVkaW5nIG9wdGltaXphdGlvbnMgZm9yIHRoZSBzZWxlY3RlZAogCSAgeDg2IHZhcmlhbnQgKGUuZy4gUElJLCBDcnVzb2Ugb3IgQXRobG9uKSwgaW5jbHVkZSBzb21lIG1vcmUKIAkgIGdlbmVyaWMgb3B0aW1pemF0aW9ucyBhcyB3ZWxsLiBUaGlzIHdpbGwgbWFrZSB0aGUga2VybmVsCkBAIC0yOTQsMjUgKzI5NCwyMyBAQAogIyBEZWZpbmUgaW1wbGllZCBvcHRpb25zIGZyb20gdGhlIENQVSBzZWxlY3Rpb24gaGVyZQogY29uZmlnIFg4Nl9MMV9DQUNIRV9CWVRFUwogCWludAotCWRlZmF1bHQgIjEyOCIgaWYgR0VORVJJQ19DUFUgfHwgTVBTQwotCWRlZmF1bHQgIjY0IiBpZiBNSzggfHwgTUNPUkUyCi0JZGVwZW5kcyBvbiBYODZfNjQKKwlkZWZhdWx0ICIxMjgiIGlmIE1QU0MKKwlkZWZhdWx0ICI2NCIgaWYgR0VORVJJQ19DUFUgfHwgTUs4IHx8IE1DT1JFMiB8fCBYODZfMzIKIAogY29uZmlnIFg4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMKIAlpbnQKIAlkZWZhdWx0ICI0MDk2IiBpZiBYODZfVlNNUAogCWRlZmF1bHQgWDg2X0wxX0NBQ0hFX0JZVEVTIGlmICFYODZfVlNNUAotCWRlcGVuZHMgb24gWDg2XzY0CiAKIGNvbmZpZyBYODZfQ01QWENIRwogCWRlZl9ib29sIFg4Nl82NCB8fCAoWDg2XzMyICYmICFNMzg2KQogCiBjb25maWcgWDg2X0wxX0NBQ0hFX1NISUZUCiAJaW50Ci0JZGVmYXVsdCAiNyIgaWYgTVBFTlRJVU00IHx8IFg4Nl9HRU5FUklDIHx8IEdFTkVSSUNfQ1BVIHx8IE1QU0MKKwlkZWZhdWx0ICI3IiBpZiBNUEVOVElVTTQgfHwgTVBTQwogCWRlZmF1bHQgIjQiIGlmIFg4Nl9FTEFOIHx8IE00ODYgfHwgTTM4NiB8fCBNR0VPREVHWDEKIAlkZWZhdWx0ICI1IiBpZiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQQzYgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNiB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTVZJQUMzXzIgfHwgTUdFT0RFX0xYCi0JZGVmYXVsdCAiNiIgaWYgTUs3IHx8IE1LOCB8fCBNUEVOVElVTU0gfHwgTUNPUkUyIHx8IE1WSUFDNworCWRlZmF1bHQgIjYiIGlmIE1LNyB8fCBNSzggfHwgTVBFTlRJVU1NIHx8IE1DT1JFMiB8fCBNVklBQzcgfHwgWDg2X0dFTkVSSUMgfHwgR0VORVJJQ19DUFUKIAogY29uZmlnIFg4Nl9YQURECiAJZGVmX2Jvb2wgeQpAQCAtMzIxLDcgKzMxOSw3IEBACiBjb25maWcgWDg2X1BQUk9fRkVOQ0UKIAlib29sICJQZW50aXVtUHJvIG1lbW9yeSBvcmRlcmluZyBlcnJhdGEgd29ya2Fyb3VuZCIKIAlkZXBlbmRzIG9uIE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNMzg2IHx8IE1HRU9ERUdYMQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBPbGQgUGVudGl1bVBybyBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zIGhhZCBlcnJhdGEgdGhhdCBjb3VsZCBjYXVzZQogCSAgbWVtb3J5IG9wZXJhdGlvbnMgdG8gdmlvbGF0ZSB0aGUgeDg2IG9yZGVyaW5nIHN0YW5kYXJkIGluIHJhcmUgY2FzZXMuCiAJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGF0dGVtcHQgdG8gd29yayBhcm91bmQgc29tZSAoYnV0IG5vdCBhbGwpCkBAIC00MTQsMTQgKzQxMiwxNCBAQAogCiBtZW51Y29uZmlnIFBST0NFU1NPUl9TRUxFQ1QKIAlib29sICJTdXBwb3J0ZWQgcHJvY2Vzc29yIHZlbmRvcnMiIGlmIEVNQkVEREVECi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgbGV0cyB5b3UgY2hvb3NlIHdoYXQgeDg2IHZlbmRvciBzdXBwb3J0IGNvZGUgeW91ciBrZXJuZWwKIAkgIHdpbGwgaW5jbHVkZS4KIAogY29uZmlnIENQVV9TVVBfSU5URUwKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IEludGVsIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBJbnRlbCBwcm9jZXNzb3JzCiAKIAkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYW4KQEAgLTQzNSw3ICs0MzMsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgQ3lyaXggcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAogCWRlcGVuZHMgb24gITY0QklUCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBkZXRlY3Rpb24sIHR1bmluZ3MgYW5kIHF1aXJrcyBmb3IgQ3lyaXggcHJvY2Vzc29ycwogCiAJICBZb3UgbmVlZCB0aGlzIGVuYWJsZWQgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIGEKQEAgLTQ0OCw3ICs0NDYsNyBAQAogY29uZmlnIENQVV9TVVBfQU1ECiAJZGVmYXVsdCB5CiAJYm9vbCAiU3VwcG9ydCBBTUQgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIEFNRCBwcm9jZXNzb3JzCiAKIAkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYW4KQEAgLTQ2Miw3ICs0NjAsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgQ2VudGF1ciBwcm9jZXNzb3JzIiBpZiBQUk9DRVNTT1JfU0VMRUNUCiAJZGVwZW5kcyBvbiAhNjRCSVQKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBDZW50YXVyIHByb2Nlc3NvcnMKIAogCSAgWW91IG5lZWQgdGhpcyBlbmFibGVkIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiBhCkBAIC00NzYsNyArNDc0LDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IENlbnRhdXIgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAogCWRlcGVuZHMgb24gNjRCSVQKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBDZW50YXVyIHByb2Nlc3NvcnMKIAogCSAgWW91IG5lZWQgdGhpcyBlbmFibGVkIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiBhCkBAIC00OTAsNyArNDg4LDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IFRyYW5zbWV0YSBwcm9jZXNzb3JzIiBpZiBQUk9DRVNTT1JfU0VMRUNUCiAJZGVwZW5kcyBvbiAhNjRCSVQKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBUcmFuc21ldGEgcHJvY2Vzc29ycwogCiAJICBZb3UgbmVlZCB0aGlzIGVuYWJsZWQgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIGEKQEAgLTUwNCw3ICs1MDIsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgVU1DIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKIAlkZXBlbmRzIG9uICE2NEJJVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIFVNQyBwcm9jZXNzb3JzCiAKIAkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYQpAQCAtNTIzLDcgKzUyMSw3IEBACiAJYm9vbCAiQnJhbmNoIFRyYWNlIFN0b3JlIgogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWDg2X0RFQlVHQ1RMTVNSCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBhIHB0cmFjZSBpbnRlcmZhY2UgdG8gdGhlIGhhcmR3YXJlJ3MgYnJhbmNoIHRyYWNlIHN0b3JlLgogCiAJICBEZWJ1Z2dlcnMgbWF5IHVzZSBpdCB0byBjb2xsZWN0IGFuIGV4ZWN1dGlvbiB0cmFjZSBvZiB0aGUgZGVidWdnZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IGUxOTgzZmEuLmZkYjQ1ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtNyw3ICs3LDcgQEAKIAogY29uZmlnIFNUUklDVF9ERVZNRU0KIAlib29sICJGaWx0ZXIgYWNjZXNzIHRvIC9kZXYvbWVtIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgeW91IGFsbG93IHVzZXJzcGFjZSAocm9vdCkgYWNjZXNzIHRvIGFsbAogCSAgb2YgbWVtb3J5LCBpbmNsdWRpbmcga2VybmVsIGFuZCB1c2Vyc3BhY2UgbWVtb3J5LiBBY2NpZGVudGFsCiAJICBhY2Nlc3MgdG8gdGhpcyBpcyBvYnZpb3VzbHkgZGlzYXN0cm91cywgYnV0IHNwZWNpZmljIGFjY2VzcyBjYW4KQEAgLTI1LDcgKzI1LDcgQEAKIGNvbmZpZyBYODZfVkVSQk9TRV9CT09UVVAKIAlib29sICJFbmFibGUgdmVyYm9zZSB4ODYgYm9vdHVwIGluZm8gbWVzc2FnZXMiCiAJZGVmYXVsdCB5Ci0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZXMgdGhlIGluZm9ybWF0aW9uYWwgb3V0cHV0IGZyb20gdGhlIGRlY29tcHJlc3Npb24gc3RhZ2UKIAkgIChlLmcuIGJ6SW1hZ2UpIG9mIHRoZSBib290LiBJZiB5b3UgZGlzYWJsZSB0aGlzIHlvdSB3aWxsIHN0aWxsCiAJICBzZWUgZXJyb3JzLiBEaXNhYmxlIHRoaXMgaWYgeW91IHdhbnQgc2lsZW50IGJvb3R1cC4KQEAgLTMzLDcgKzMzLDcgQEAKIGNvbmZpZyBFQVJMWV9QUklOVEsKIAlib29sICJFYXJseSBwcmludGsiIGlmIEVNQkVEREVECiAJZGVmYXVsdCB5Ci0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFdyaXRlIGtlcm5lbCBsb2cgb3V0cHV0IGRpcmVjdGx5IGludG8gdGhlIFZHQSBidWZmZXIgb3IgdG8gYSBzZXJpYWwKIAkgIHBvcnQuCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlib29sICJFYXJseSBwcmludGsgdmlhIEVIQ0kgZGVidWcgcG9ydCIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIEVBUkxZX1BSSU5USyAmJiBQQ0kKLQloZWxwCisJLS0taGVscC0tLQogCSAgV3JpdGUga2VybmVsIGxvZyBvdXRwdXQgZGlyZWN0bHkgaW50byB0aGUgRUhDSSBkZWJ1ZyBwb3J0LgogCiAJICBUaGlzIGlzIHVzZWZ1bCBmb3Iga2VybmVsIGRlYnVnZ2luZyB3aGVuIHlvdXIgbWFjaGluZSBjcmFzaGVzIHZlcnkKQEAgLTU5LDE0ICs1OSwxNCBAQAogY29uZmlnIERFQlVHX1NUQUNLT1ZFUkZMT1cKIAlib29sICJDaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3dzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgbWVzc2FnZXMgdG8gYmUgcHJpbnRlZCBpZiBmcmVlIHN0YWNrIHNwYWNlCiAJICBkcm9wcyBiZWxvdyBhIGNlcnRhaW4gbGltaXQuCiAKIGNvbmZpZyBERUJVR19TVEFDS19VU0FHRQogCWJvb2wgIlN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGVzIHRoZSBkaXNwbGF5IG9mIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBmcmVlIHN0YWNrIHdoaWNoIGVhY2gKIAkgIHRhc2sgaGFzIGV2ZXIgaGFkIGF2YWlsYWJsZSBpbiB0aGUgc3lzcnEtVCBhbmQgc3lzcnEtUCBkZWJ1ZyBvdXRwdXQuCiAKQEAgLTc1LDcgKzc1LDcgQEAKIGNvbmZpZyBERUJVR19QQUdFQUxMT0MKIAlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgogCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKIAkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KQEAgLTgzLDkgKzgzLDkgQEAKIGNvbmZpZyBERUJVR19QRVJfQ1BVX01BUFMKIAlib29sICJEZWJ1ZyBhY2Nlc3MgdG8gcGVyX2NwdSBtYXBzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JZGVwZW5kcyBvbiBYODZfU01QCisJZGVwZW5kcyBvbiBTTVAKIAlkZWZhdWx0IG4KLQloZWxwCisJLS0taGVscC0tLQogCSAgU2F5IFkgdG8gdmVyaWZ5IHRoYXQgdGhlIHBlcl9jcHUgbWFwIGJlaW5nIGFjY2Vzc2VkIGhhcwogCSAgYmVlbiBzZXR1cC4gIEFkZHMgYSBmYWlyIGFtb3VudCBvZiBjb2RlIHRvIGtlcm5lbCBtZW1vcnkKIAkgIGFuZCBkZWNyZWFzZXMgcGVyZm9ybWFuY2UuCkBAIC05Niw3ICs5Niw3IEBACiAJYm9vbCAiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmcyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBERUJVR19GUwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IGluIGEKIAkgIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnMKIAkgIHdobyBhcmUgd29ya2luZyBpbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGtlcm5lbC4KQEAgLTEwOCw3ICsxMDgsNyBAQAogCWJvb2wgIldyaXRlIHByb3RlY3Qga2VybmVsIHJlYWQtb25seSBkYXRhIHN0cnVjdHVyZXMiCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQloZWxwCisJLS0taGVscC0tLQogCSAgTWFyayB0aGUga2VybmVsIHJlYWQtb25seSBkYXRhIGFzIHdyaXRlLXByb3RlY3RlZCBpbiB0aGUgcGFnZXRhYmxlcywKIAkgIGluIG9yZGVyIHRvIGNhdGNoIGFjY2lkZW50YWwgKGFuZCBpbmNvcnJlY3QpIHdyaXRlcyB0byBzdWNoIGNvbnN0CiAJICBkYXRhLiBUaGlzIGlzIHJlY29tbWVuZGVkIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGtlcm5lbCBidWdzIHNvb25lci4KQEAgLTExNyw3ICsxMTcsOCBAQAogY29uZmlnIERFQlVHX1JPREFUQV9URVNUCiAJYm9vbCAiVGVzdGNhc2UgZm9yIHRoZSBERUJVR19ST0RBVEEgZmVhdHVyZSIKIAlkZXBlbmRzIG9uIERFQlVHX1JPREFUQQotCWhlbHAKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgdGVzdGNhc2UgZm9yIHRoZSBERUJVR19ST0RBVEEKIAkgIGZlYXR1cmUgYXMgd2VsbCBhcyBmb3IgdGhlIGNoYW5nZV9wYWdlX2F0dHIoKSBpbmZyYXN0cnVjdHVyZS4KIAkgIElmIGluIGRvdWJ0LCBzYXkgIk4iCkBAIC0xMjUsNyArMTI2LDcgQEAKIGNvbmZpZyBERUJVR19OWF9URVNUCiAJdHJpc3RhdGUgIlRlc3RjYXNlIGZvciB0aGUgTlggbm9uLWV4ZWN1dGFibGUgc3RhY2sgZmVhdHVyZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBtCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSB0ZXN0Y2FzZSBmb3IgdGhlIENQVSBOWCBjYXBhYmlsaXR5CiAJICBhbmQgdGhlIHNvZnR3YXJlIHNldHVwIG9mIHRoaXMgZmVhdHVyZS4KIAkgIElmIGluIGRvdWJ0LCBzYXkgIk4iCkBAIC0xMzMsNyArMTM0LDcgQEAKIGNvbmZpZyA0S1NUQUNLUwogCWJvb2wgIlVzZSA0S2IgZm9yIGtlcm5lbCBzdGFja3MgaW5zdGVhZCBvZiA4S2IiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIGtlcm5lbCB3aWxsIHVzZSBhIDRLYiBzdGFja3NpemUgZm9yIHRoZQogCSAga2VybmVsIHN0YWNrIGF0dGFjaGVkIHRvIGVhY2ggcHJvY2Vzcy90aHJlYWQuIFRoaXMgZmFjaWxpdGF0ZXMKIAkgIHJ1bm5pbmcgbW9yZSB0aHJlYWRzIG9uIGEgc3lzdGVtIGFuZCBhbHNvIHJlZHVjZXMgdGhlIHByZXNzdXJlCkBAIC0xNDQsNyArMTQ1LDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgZG91YmxlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gYWxsb3dzIHRyYXBwaW5nIG9mIHJhcmUgZG91YmxlZmF1bHQgZXhjZXB0aW9ucyB0aGF0CiAJICB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYSBzeXN0ZW0gdG8gc2lsZW50bHkgcmVib290LiBEaXNhYmxpbmcgdGhpcwogCSAgb3B0aW9uIHNhdmVzIGFib3V0IDRrIGFuZCBtaWdodCBjYXVzZSB5b3UgbXVjaCBhZGRpdGlvbmFsIGdyZXkKQEAgLTE1NCw3ICsxNTUsNyBAQAogCWJvb2wgIkVuYWJsZSBJT01NVSBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBHQVJUX0lPTU1VICYmIERFQlVHX0tFUk5FTAogCWRlcGVuZHMgb24gWDg2XzY0Ci0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEZvcmNlIHRoZSBJT01NVSB0byBvbiBldmVuIHdoZW4geW91IGhhdmUgbGVzcyB0aGFuIDRHQiBvZgogCSAgbWVtb3J5IGFuZCBhZGQgZGVidWdnaW5nIGNvZGUuIE9uIG92ZXJmbG93IGFsd2F5cyBwYW5pYy4gQW5kCiAJICBhbGxvdyB0byBlbmFibGUgSU9NTVUgbGVhayB0cmFjaW5nLiBDYW4gYmUgZGlzYWJsZWQgYXQgYm9vdApAQCAtMTcwLDcgKzE3MSw3IEBACiAJYm9vbCAiSU9NTVUgbGVhayB0cmFjaW5nIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVwZW5kcyBvbiBJT01NVV9ERUJVRwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBZGQgYSBzaW1wbGUgbGVhayB0cmFjZXIgdG8gdGhlIElPTU1VIGNvZGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91CiAJICBhcmUgZGVidWdnaW5nIGEgYnVnZ3kgZGV2aWNlIGRyaXZlciB0aGF0IGxlYWtzIElPTU1VIG1hcHBpbmdzLgogCkBAIC0yMDMsMjUgKzIwNCwyNSBAQAogCiBjb25maWcgSU9fREVMQVlfMFg4MAogCWJvb2wgInBvcnQgMHg4MCBiYXNlZCBwb3J0LUlPIGRlbGF5IFtyZWNvbW1lbmRlZF0iCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIExpbnV4IElPIGRlbGF5IHVzZWQgZm9yIGluL291dF9wLgogCSAgSXQgaXMgdGhlIG1vc3QgdGVzdGVkIGhlbmNlIHNhZmVzdCBzZWxlY3Rpb24gaGVyZS4KIAogY29uZmlnIElPX0RFTEFZXzBYRUQKIAlib29sICJwb3J0IDB4ZWQgYmFzZWQgcG9ydC1JTyBkZWxheSIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVXNlIHBvcnQgMHhlZCBhcyB0aGUgSU8gZGVsYXkuIFRoaXMgZnJlZXMgdXAgcG9ydCAweDgwIHdoaWNoIGlzCiAJICBvZnRlbiB1c2VkIGFzIGEgaGFyZHdhcmUtZGVidWcgcG9ydC4KIAogY29uZmlnIElPX0RFTEFZX1VERUxBWQogCWJvb2wgInVkZWxheSBiYXNlZCBwb3J0LUlPIGRlbGF5IgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBVc2UgdWRlbGF5KDIpIGFzIHRoZSBJTyBkZWxheSBtZXRob2QuIFRoaXMgcHJvdmlkZXMgdGhlIGRlbGF5CiAJICB3aGlsZSBub3QgaGF2aW5nIGFueSBzaWRlLWVmZmVjdCBvbiB0aGUgSU8gcG9ydCBzcGFjZS4KIAogY29uZmlnIElPX0RFTEFZX05PTkUKIAlib29sICJubyBwb3J0LUlPIGRlbGF5IgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBObyBwb3J0LUlPIGRlbGF5LiBXaWxsIGJyZWFrIG9uIG9sZCBib3hlcyB0aGF0IHJlcXVpcmUgcG9ydC1JTwogCSAgZGVsYXkgZm9yIGNlcnRhaW4gb3BlcmF0aW9ucy4gU2hvdWxkIHdvcmsgb24gbW9zdCBuZXcgbWFjaGluZXMuCiAKQEAgLTI1NSwxOCArMjU2LDE4IEBACiAJYm9vbCAiRGVidWcgYm9vdCBwYXJhbWV0ZXJzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVwZW5kcyBvbiBERUJVR19GUwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0cnVjdCBib290X3BhcmFtcyB0byBiZSBleHBvcnRlZCB2aWEgZGVidWdmcy4KIAogY29uZmlnIENQQV9ERUJVRwogCWJvb2wgIkNQQSBzZWxmLXRlc3QgY29kZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBEbyBjaGFuZ2VfcGFnZV9hdHRyKCkgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLgogCiBjb25maWcgT1BUSU1JWkVfSU5MSU5JTkcKIAlib29sICJBbGxvdyBnY2MgdG8gdW5pbmxpbmUgZnVuY3Rpb25zIG1hcmtlZCAnaW5saW5lJyIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyBpZiB0aGUga2VybmVsIGZvcmNlcyBnY2MgdG8gaW5saW5lIHRoZSBmdW5jdGlvbnMKIAkgIGRldmVsb3BlcnMgaGF2ZSBtYXJrZWQgJ2lubGluZScuIERvaW5nIHNvIHRha2VzIGF3YXkgZnJlZWRvbSBmcm9tIGdjYyB0bwogCSAgZG8gd2hhdCBpdCB0aGlua3MgaXMgYmVzdCwgd2hpY2ggaXMgZGVzaXJhYmxlIGZvciB0aGUgZ2NjIDMueCBzZXJpZXMgb2YKQEAgLTI3OSw0ICsyODAsMyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogZW5kbWVudQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IGQxYTQ3YWQuLjE4MzYxOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC03MCwxNCArNzAsMTcgQEAKICAgICAgICAgIyB0aGlzIHdvcmtzIGFyb3VuZCBzb21lIGlzc3VlcyB3aXRoIGdlbmVyYXRpbmcgdW53aW5kIHRhYmxlcyBpbiBvbGRlciBnY2NzCiAgICAgICAgICMgbmV3ZXIgZ2NjcyBkbyBpdCBieSBkZWZhdWx0CiAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MKK2VuZGlmCiAKLSAgICAgICAgc3RhY2twIDo9ICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCi0gICAgICAgIHN0YWNrcC0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgOj0gJChzaGVsbCAkKHN0YWNrcCkgXAotICAgICAgICAgICAgICAgICIkKENDKSIgLWZzdGFjay1wcm90ZWN0b3IgKQotICAgICAgICBzdGFja3AtJChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfQUxMKSArPSAkKHNoZWxsICQoc3RhY2twKSBcCi0gICAgICAgICAgICAgICAgIiQoQ0MpIiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgKQotCi0gICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzdGFja3AteSkKK2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorCWNjX2hhc19zcCA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl8kKEJJVFMpLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKKyAgICAgICAgaWZlcSAoJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjY19oYXNfc3ApICQoQ0MpKSx5KQorICAgICAgICAgICAgICAgIHN0YWNrcC15IDo9IC1mc3RhY2stcHJvdGVjdG9yCisgICAgICAgICAgICAgICAgc3RhY2twLSQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX0FMTCkgKz0gLWZzdGFjay1wcm90ZWN0b3ItYWxsCisgICAgICAgICAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAkKHN0YWNrcC15KQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgJCh3YXJuaW5nIHN0YWNrIHByb3RlY3RvciBlbmFibGVkIGJ1dCBubyBjb21waWxlciBzdXBwb3J0KQorICAgICAgICBlbmRpZgogZW5kaWYKIAogIyBTdGFja3BvaW50ZXIgaXMgYWRkcmVzc2VkIGRpZmZlcmVudCBmb3IgMzIgYml0IGFuZCA2NCBiaXQgeDg2CkBAIC0xMDIsMjkgKzEwNSw2IEBACiAjIHByZXZlbnQgZ2NjIGZyb20gZ2VuZXJhdGluZyBhbnkgRlAgY29kZSBieSBtaXN0YWtlCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQogCi0jIyMKLSMgU3ViIGFyY2hpdGVjdHVyZSBzdXBwb3J0Ci0jIGZjb3JlLXkgaXMgbGlua2VkIGJlZm9yZSBtY29yZS15IGZpbGVzLgotCi0jIERlZmF1bHQgc3ViYXJjaCAuYyBmaWxlcwotbWNvcmUteSAgOj0gYXJjaC94ODYvbWFjaC1kZWZhdWx0LwotCi0jIFZveWFnZXIgc3ViYXJjaCBzdXBwb3J0Ci1tZmxhZ3MtJChDT05GSUdfWDg2X1ZPWUFHRVIpCTo9IC1JYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyCi1tY29yZS0kKENPTkZJR19YODZfVk9ZQUdFUikJOj0gYXJjaC94ODYvbWFjaC12b3lhZ2VyLwotCi0jIGdlbmVyaWMgc3ViYXJjaGl0ZWN0dXJlCi1tZmxhZ3MtJChDT05GSUdfWDg2X0dFTkVSSUNBUkNIKTo9IC1JYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljCi1mY29yZS0kKENPTkZJR19YODZfR0VORVJJQ0FSQ0gpCSs9IGFyY2gveDg2L21hY2gtZ2VuZXJpYy8KLW1jb3JlLSQoQ09ORklHX1g4Nl9HRU5FUklDQVJDSCkJOj0gYXJjaC94ODYvbWFjaC1kZWZhdWx0LwotCi0jIGRlZmF1bHQgc3ViYXJjaCAuaCBmaWxlcwotbWZsYWdzLXkgKz0gLUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQKLQotIyA2NCBiaXQgZG9lcyBub3Qgc3VwcG9ydCBzdWJhcmNoIHN1cHBvcnQgLSBjbGVhciBzdWIgYXJjaCB2YXJpYWJsZXMKLWZjb3JlLSQoQ09ORklHX1g4Nl82NCkgIDo9Ci1tY29yZS0kKENPTkZJR19YODZfNjQpICA6PQotCiBLQlVJTERfQ0ZMQUdTICs9ICQobWZsYWdzLXkpCiBLQlVJTERfQUZMQUdTICs9ICQobWZsYWdzLXkpCiAKQEAgLTE1MCw5ICsxMzAsNiBAQAogY29yZS15ICs9IGFyY2gveDg2L2tlcm5lbC8KIGNvcmUteSArPSBhcmNoL3g4Ni9tbS8KIAotIyBSZW1haW5pbmcgc3ViIGFyY2hpdGVjdHVyZSBmaWxlcwotY29yZS15ICs9ICQobWNvcmUteSkKLQogY29yZS15ICs9IGFyY2gveDg2L2NyeXB0by8KIGNvcmUteSArPSBhcmNoL3g4Ni92ZHNvLwogY29yZS0kKENPTkZJR19JQTMyX0VNVUxBVElPTikgKz0gYXJjaC94ODYvaWEzMi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IGNkNDhjNzIuLmM3MGVmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtMzIsNyArMzIsNiBAQAogc2V0dXAteQkJKz0gaGVhZGVyLm8gbWFpbi5vIG1jYS5vIG1lbW9yeS5vIHBtLm8gcG1qdW1wLm8KIHNldHVwLXkJCSs9IHByaW50Zi5vIHN0cmluZy5vIHR0eS5vIHZpZGVvLm8gdmlkZW8tbW9kZS5vIHZlcnNpb24ubwogc2V0dXAtJChDT05GSUdfWDg2X0FQTV9CT09UKSArPSBhcG0ubwotc2V0dXAtJChDT05GSUdfWDg2X1ZPWUFHRVIpICs9IHZveWFnZXIubwogCiAjIFRoZSBsaW5rIG9yZGVyIG9mIHRoZSB2aWRlby0qLm8gbW9kdWxlcyBjYW4gbWF0dGVyLiAgSW4gcGFydGljdWxhciwKICMgdmlkZW8tdmdhLm8gKm11c3QqIGJlIGxpc3RlZCBmaXJzdCwgZm9sbG93ZWQgYnkgdmlkZW8tdmVzYS5vLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9hMjAuYyBiL2FyY2gveDg2L2Jvb3QvYTIwLmMKaW5kZXggNDA2M2Q2My4uN2MxOWNlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9hMjAuYworKysgYi9hcmNoL3g4Ni9ib290L2EyMC5jCkBAIC0yLDYgKzIsNyBAQAogICoKICAqICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCiAgKiAgIENvcHlyaWdodCAyMDA3LTIwMDggclBhdGgsIEluYy4gLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgIENvcHlyaWdodCAyMDA5IEludGVsIENvcnBvcmF0aW9uCiAgKgogICogICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKICAqICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCkBAIC0xNSwxNiArMTYsMjMgQEAKICNpbmNsdWRlICJib290LmgiCiAKICNkZWZpbmUgTUFYXzgwNDJfTE9PUFMJMTAwMDAwCisjZGVmaW5lIE1BWF84MDQyX0ZGCTMyCiAKIHN0YXRpYyBpbnQgZW1wdHlfODA0Mih2b2lkKQogewogCXU4IHN0YXR1czsKIAlpbnQgbG9vcHMgPSBNQVhfODA0Ml9MT09QUzsKKwlpbnQgZmZzICAgPSBNQVhfODA0Ml9GRjsKIAogCXdoaWxlIChsb29wcy0tKSB7CiAJCWlvX2RlbGF5KCk7CiAKIAkJc3RhdHVzID0gaW5iKDB4NjQpOworCQlpZiAoc3RhdHVzID09IDB4ZmYpIHsKKwkJCS8qIEZGIGlzIGEgcGxhdXNpYmxlLCBidXQgdmVyeSB1bmxpa2VseSBzdGF0dXMgKi8KKwkJCWlmICghLS1mZnMpCisJCQkJcmV0dXJuIC0xOyAvKiBBc3N1bWUgbm8gS0JDIHByZXNlbnQgKi8KKwkJfQogCQlpZiAoc3RhdHVzICYgMSkgewogCQkJLyogUmVhZCBhbmQgZGlzY2FyZCBpbnB1dCBkYXRhICovCiAJCQlpb19kZWxheSgpOwpAQCAtMTE4LDQ0ICsxMjYsMzcgQEAKIAogaW50IGVuYWJsZV9hMjAodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfRUxBTikKLQkvKiBFbGFuIGNyb2FrcyBpZiB3ZSB0cnkgdG8gdG91Y2ggdGhlIEtCQyAqLwotCWVuYWJsZV9hMjBfZmFzdCgpOwotCXdoaWxlICghYTIwX3Rlc3RfbG9uZygpKQotCQk7Ci0JcmV0dXJuIDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19YODZfVk9ZQUdFUikKLQkvKiBPbiBWb3lhZ2VyLCBhMjBfdGVzdCgpIGlzIHVuc2FmZT8gKi8KLQllbmFibGVfYTIwX2tiYygpOwotCXJldHVybiAwOwotI2Vsc2UKICAgICAgICBpbnQgbG9vcHMgPSBBMjBfRU5BQkxFX0xPT1BTOwotCXdoaWxlIChsb29wcy0tKSB7Ci0JCS8qIEZpcnN0LCBjaGVjayB0byBzZWUgaWYgQTIwIGlzIGFscmVhZHkgZW5hYmxlZAotCQkgICAobGVnYWN5IGZyZWUsIGV0Yy4pICovCi0JCWlmIChhMjBfdGVzdF9zaG9ydCgpKQotCQkJcmV0dXJuIDA7CisgICAgICAgaW50IGtiY19lcnI7CiAKLQkJLyogTmV4dCwgdHJ5IHRoZSBCSU9TIChJTlQgMHgxNSwgQVg9MHgyNDAxKSAqLwotCQllbmFibGVfYTIwX2Jpb3MoKTsKLQkJaWYgKGEyMF90ZXN0X3Nob3J0KCkpCi0JCQlyZXR1cm4gMDsKKyAgICAgICB3aGlsZSAobG9vcHMtLSkgeworCSAgICAgICAvKiBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIEEyMCBpcyBhbHJlYWR5IGVuYWJsZWQKKwkJICAobGVnYWN5IGZyZWUsIGV0Yy4pICovCisJICAgICAgIGlmIChhMjBfdGVzdF9zaG9ydCgpKQorCQkgICAgICAgcmV0dXJuIDA7CisJICAgICAgIAorCSAgICAgICAvKiBOZXh0LCB0cnkgdGhlIEJJT1MgKElOVCAweDE1LCBBWD0weDI0MDEpICovCisJICAgICAgIGVuYWJsZV9hMjBfYmlvcygpOworCSAgICAgICBpZiAoYTIwX3Rlc3Rfc2hvcnQoKSkKKwkJICAgICAgIHJldHVybiAwOworCSAgICAgICAKKwkgICAgICAgLyogVHJ5IGVuYWJsaW5nIEEyMCB0aHJvdWdoIHRoZSBrZXlib2FyZCBjb250cm9sbGVyICovCisJICAgICAgIGtiY19lcnIgPSBlbXB0eV84MDQyKCk7CiAKLQkJLyogVHJ5IGVuYWJsaW5nIEEyMCB0aHJvdWdoIHRoZSBrZXlib2FyZCBjb250cm9sbGVyICovCi0JCWVtcHR5XzgwNDIoKTsKLQkJaWYgKGEyMF90ZXN0X3Nob3J0KCkpCi0JCQlyZXR1cm4gMDsgLyogQklPUyB3b3JrZWQsIGJ1dCB3aXRoIGRlbGF5ZWQgcmVhY3Rpb24gKi8KLQotCQllbmFibGVfYTIwX2tiYygpOwotCQlpZiAoYTIwX3Rlc3RfbG9uZygpKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogRmluYWxseSwgdHJ5IGVuYWJsaW5nIHRoZSAiZmFzdCBBMjAgZ2F0ZSIgKi8KLQkJZW5hYmxlX2EyMF9mYXN0KCk7Ci0JCWlmIChhMjBfdGVzdF9sb25nKCkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLTE7Ci0jZW5kaWYKKwkgICAgICAgaWYgKGEyMF90ZXN0X3Nob3J0KCkpCisJCSAgICAgICByZXR1cm4gMDsgLyogQklPUyB3b3JrZWQsIGJ1dCB3aXRoIGRlbGF5ZWQgcmVhY3Rpb24gKi8KKwkKKwkgICAgICAgaWYgKCFrYmNfZXJyKSB7CisJCSAgICAgICBlbmFibGVfYTIwX2tiYygpOworCQkgICAgICAgaWYgKGEyMF90ZXN0X2xvbmcoKSkKKwkJCSAgICAgICByZXR1cm4gMDsKKwkgICAgICAgfQorCSAgICAgICAKKwkgICAgICAgLyogRmluYWxseSwgdHJ5IGVuYWJsaW5nIHRoZSAiZmFzdCBBMjAgZ2F0ZSIgKi8KKwkgICAgICAgZW5hYmxlX2EyMF9mYXN0KCk7CisJICAgICAgIGlmIChhMjBfdGVzdF9sb25nKCkpCisJCSAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisgICAgICAgCisgICAgICAgcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9ib290LmggYi9hcmNoL3g4Ni9ib290L2Jvb3QuaAppbmRleCBjYzBlZjEzLi43YjI2OTJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2Jvb3QuaAorKysgYi9hcmNoL3g4Ni9ib290L2Jvb3QuaApAQCAtMzAyLDkgKzMwMiw2IEBACiAvKiB2aWRlby12ZXNhLmMgKi8KIHZvaWQgdmVzYV9zdG9yZV9lZGlkKHZvaWQpOwogCi0vKiB2b3lhZ2VyLmMgKi8KLWludCBxdWVyeV92b3lhZ2VyKHZvaWQpOwotCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBCT09UX0JPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDE3NzFjODAuLjNjYTRjMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMgOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiBoZWFkXyQoQklUUykubyBtaXNjLm8gcGlnZ3kubwordGFyZ2V0cyA6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIEtCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgogS0JVSUxEX0NGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZlBJQwpAQCAtNDcsMTggKzQ3LDM1IEBACiBpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKICQob2JqKS92bWxpbnV4LmJpbi5nejogJChvYmopL3ZtbGludXguYmluLmFsbCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4uYWxsIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiskKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluLmFsbCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiBlbHNlCiAkKG9iaikvdm1saW51eC5iaW4uZ3o6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKyQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogZW5kaWYKIExERkxBR1NfcGlnZ3kubyA6PSAtciAtLWZvcm1hdCBiaW5hcnkgLS1vZm9ybWF0IGVsZjMyLWkzODYgLVQKIAogZWxzZQorCiAkKG9iaikvdm1saW51eC5iaW4uZ3o6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKyQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogCiBMREZMQUdTX3BpZ2d5Lm8gOj0gLXIgLS1mb3JtYXQgYmluYXJ5IC0tb2Zvcm1hdCBlbGY2NC14ODYtNjQgLVQKIGVuZGlmCiAKLSQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLmd6IEZPUkNFCitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0daSVApICA9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKSA9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKSAgPSBsem1hCisKKyQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLiQoc3VmZml4X3kpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwppbmRleCAyOWM1ZmJmLi4zYThhODY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKQEAgLTI1LDE0ICsyNSwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKIC5zZWN0aW9uICIudGV4dC5oZWFkIiwiYXgiLEBwcm9nYml0cwotCS5nbG9ibCBzdGFydHVwXzMyCi0KLXN0YXJ0dXBfMzI6CitFTlRSWShzdGFydHVwXzMyKQogCWNsZAogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkgKiB1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCkBAIC0xMTMsNiArMTExLDggQEAKICAqLwogCWxlYWwgcmVsb2NhdGVkKCVlYngpLCAlZWF4CiAJam1wIColZWF4CitFTkRQUk9DKHN0YXJ0dXBfMzIpCisKIC5zZWN0aW9uICIudGV4dCIKIHJlbG9jYXRlZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggMWQ1ZGZmNC4uZWQ0YTgyOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KQEAgLTM1LDkgKzM1LDcgQEAKIAogLnNlY3Rpb24gIi50ZXh0LmhlYWQiCiAJLmNvZGUzMgotCS5nbG9ibCBzdGFydHVwXzMyCi0KLXN0YXJ0dXBfMzI6CitFTlRSWShzdGFydHVwXzMyKQogCWNsZAogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkgKiB1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCkBAIC0xNzYsNiArMTc0LDcgQEAKIAogCS8qIEp1bXAgZnJvbSAzMmJpdCBjb21wYXRpYmlsaXR5IG1vZGUgaW50byA2NGJpdCBtb2RlLiAqLwogCWxyZXQKK0VORFBST0Moc3RhcnR1cF8zMikKIAogbm9fbG9uZ21vZGU6CiAJLyogVGhpcyBpc24ndCBhbiB4ODYtNjQgQ1BVIHNvIGhhbmcgKi8KQEAgLTI5NSw3ICsyOTQsNiBAQAogCWNhbGwJZGVjb21wcmVzc19rZXJuZWwKIAlwb3BxCSVyc2kKIAotCiAvKgogICogSnVtcCB0byB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZGEwNjIyMS4uZTQ1YmU3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xMTYsNzEgKzExNiwxMyBAQAogLyoKICAqIGd6aXAgZGVjbGFyYXRpb25zCiAgKi8KLQotI2RlZmluZSBPRihhcmdzKQlhcmdzCiAjZGVmaW5lIFNUQVRJQwkJc3RhdGljCiAKICN1bmRlZiBtZW1zZXQKICN1bmRlZiBtZW1jcHkKICNkZWZpbmUgbWVtemVybyhzLCBuKQltZW1zZXQoKHMpLCAwLCAobikpCiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhcgl1Y2g7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CXVzaDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwl1bGc7CiAKLS8qCi0gKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgYW5kIGEgcG93ZXIgb2YgdHdvLgotICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIHdpbmRvdyBqdXN0IGEgaHVnZSBvdXRwdXQgYnVmZmVyLAotICogc28gd2UgcmVwb3J0IGEgMkcgd2luZG93IHNpemUsIGFzIHRoYXQgc2hvdWxkIGFsd2F5cyBiZQotICogbGFyZ2VyIHRoYW4gb3VyIG91dHB1dCBidWZmZXI6Ci0gKi8KLSNkZWZpbmUgV1NJWkUJCTB4ODAwMDAwMDAKLQotLyogSW5wdXQgYnVmZmVyOiAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIJKmluYnVmOwotCi0vKiBTbGlkaW5nIHdpbmRvdyBidWZmZXIgKGFuZCBmaW5hbCBvdXRwdXQgYnVmZmVyKTogKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyCSp3aW5kb3c7Ci0KLS8qIFZhbGlkIGJ5dGVzIGluIGluYnVmOiAqLwotc3RhdGljIHVuc2lnbmVkCQlpbnNpemU7Ci0KLS8qIEluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWY6ICovCi1zdGF0aWMgdW5zaWduZWQJCWlucHRyOwotCi0vKiBCeXRlcyBpbiBvdXRwdXQgYnVmZmVyOiAqLwotc3RhdGljIHVuc2lnbmVkCQlvdXRjbnQ7Ci0KLS8qIGd6aXAgZmxhZyBieXRlICovCi0jZGVmaW5lIEFTQ0lJX0ZMQUcJMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgQVNDSUkgdGV4dCAqLwotI2RlZmluZSBDT05USU5VQVRJT04JMHgwMiAvKiBiaXQgMSBzZXQ6IGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1wYXJ0IGd6IGZpbGUgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQJMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU0JMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQJCTB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLwotI2RlZmluZSBFTkNSWVBURUQJMHgyMCAvKiBiaXQgNSBzZXQ6IGZpbGUgaXMgZW5jcnlwdGVkICovCi0jZGVmaW5lIFJFU0VSVkVECTB4QzAgLyogYml0IDYsIDc6ICByZXNlcnZlZCAqLwotCi0jZGVmaW5lIGdldF9ieXRlKCkJKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiBmaWxsX2luYnVmKCkpCi0KLS8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKLSMgIGRlZmluZSBBc3NlcnQoY29uZCwgbXNnKSBkbyB7IGlmICghKGNvbmQpKSBlcnJvcihtc2cpOyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNlKHgpCWRvIHsgZnByaW50ZiB4OyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNldih4KQlkbyB7IGlmICh2ZXJib3NlKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNldnYoeCkJZG8geyBpZiAodmVyYm9zZSA+IDEpIGZwcmludGYgeCA7IH0gd2hpbGUgKDApCi0jICBkZWZpbmUgVHJhY2VjKGMsIHgpCWRvIHsgaWYgKHZlcmJvc2UgJiYgKGMpKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNlY3YoYywgeCkJZG8geyBpZiAodmVyYm9zZSA+IDEgJiYgKGMpKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQotI2Vsc2UKLSMgIGRlZmluZSBBc3NlcnQoY29uZCwgbXNnKQotIyAgZGVmaW5lIFRyYWNlKHgpCi0jICBkZWZpbmUgVHJhY2V2KHgpCi0jICBkZWZpbmUgVHJhY2V2dih4KQotIyAgZGVmaW5lIFRyYWNlYyhjLCB4KQotIyAgZGVmaW5lIFRyYWNlY3YoYywgeCkKLSNlbmRpZgotCi1zdGF0aWMgaW50ICBmaWxsX2luYnVmKHZvaWQpOwotc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpOwogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CiAKIC8qCkBAIC0xODksMTMgKzEzMSw4IEBACiBzdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCiBzdGF0aWMgaW50IHF1aWV0OwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBpbnB1dF9kYXRhW107Ci1leHRlcm4gaW50IGlucHV0X2xlbjsKLQotc3RhdGljIGxvbmcgYnl0ZXNfb3V0OwotCiBzdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCB1bnNpZ25lZCBuKTsKLXN0YXRpYyB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKTsKK3ZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pOwogCiBzdGF0aWMgdm9pZCBfX3B1dHN0cihpbnQsIGNvbnN0IGNoYXIgKik7CiAjZGVmaW5lIHB1dHN0cihfX3gpICBfX3B1dHN0cigwLCBfX3gpCkBAIC0yMTMsNyArMTUwLDE3IEBACiBzdGF0aWMgaW50IHZpZHBvcnQ7CiBzdGF0aWMgaW50IGxpbmVzLCBjb2xzOwogCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2luZmxhdGUuYyIKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHNjcm9sbCh2b2lkKQogewpAQCAtMjgyLDcgKzIyOSw3IEBACiAJcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKQordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbikKIHsKIAlpbnQgaTsKIAljb25zdCBjaGFyICpzID0gc3JjOwpAQCAtMjkzLDM4ICsyNDAsNiBAQAogCXJldHVybiBkZXN0OwogfQogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkKLSAqIGFuZCBhdCBsZWFzdCBvbmUgYnl0ZSBpcyByZWFsbHkgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IGZpbGxfaW5idWYodm9pZCkKLXsKLQllcnJvcigicmFuIG91dCBvZiBpbnB1dCBkYXRhIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgdGhlIG91dHB1dCB3aW5kb3cgd2luZG93WzAuLm91dGNudC0xXSBhbmQgdXBkYXRlIGNyYyBhbmQgYnl0ZXNfb3V0LgotICogKFVzZWQgZm9yIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvbmx5LikKLSAqLwotc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpCi17Ci0JLyogV2l0aCBteSB3aW5kb3cgZXF1YWwgdG8gbXkgb3V0cHV0IGJ1ZmZlcgotCSAqIEkgb25seSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNyYyBoZXJlLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLQl1bnNpZ25lZCBuOwotCXVuc2lnbmVkIGNoYXIgKmluLCBjaDsKLQotCWluID0gd2luZG93OwotCWZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCQljaCA9ICppbisrOwotCQljID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLQl9Ci0JY3JjID0gYzsKLQlieXRlc19vdXQgKz0gKHVuc2lnbmVkIGxvbmcpb3V0Y250OwotCW91dGNudCA9IDA7Ci19CiAKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKngpCiB7CkBAIC00MDcsMTIgKzMyMiw4IEBACiAJbGluZXMgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXM7CiAJY29scyA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19jb2xzOwogCi0Jd2luZG93ID0gb3V0cHV0OwkJLyogT3V0cHV0IGJ1ZmZlciAoTm9ybWFsbHkgYXQgMU0pICovCiAJZnJlZV9tZW1fcHRyICAgICA9IGhlYXA7CS8qIEhlYXAgKi8KIAlmcmVlX21lbV9lbmRfcHRyID0gaGVhcCArIEJPT1RfSEVBUF9TSVpFOwotCWluYnVmICA9IGlucHV0X2RhdGE7CQkvKiBJbnB1dCBidWZmZXIgKi8KLQlpbnNpemUgPSBpbnB1dF9sZW47Ci0JaW5wdHIgID0gMDsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoKHVuc2lnbmVkIGxvbmcpb3V0cHV0ICYgKF9fS0VSTkVMX0FMSUdOIC0gMSkpCkBAIC00MzAsMTAgKzM0MSw5IEBACiAjZW5kaWYKICNlbmRpZgogCi0JbWFrZWNyYygpOwogCWlmICghcXVpZXQpCiAJCXB1dHN0cigiXG5EZWNvbXByZXNzaW5nIExpbnV4Li4uICIpOwotCWd1bnppcCgpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXQsIE5VTEwsIGVycm9yKTsKIAlwYXJzZV9lbGYob3V0cHV0KTsKIAlpZiAoIXF1aWV0KQogCQlwdXRzdHIoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29weS5TIGIvYXJjaC94ODYvYm9vdC9jb3B5LlMKaW5kZXggZWY1MGM4NC4uMTFmMjcyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb3B5LlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb3B5LlMKQEAgLTgsNiArOCw4IEBACiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKwogLyoKICAqIE1lbW9yeSBjb3B5IHJvdXRpbmVzCiAgKi8KQEAgLTE1LDkgKzE3LDcgQEAKIAkuY29kZTE2Z2NjCiAJLnRleHQKIAotCS5nbG9ibAltZW1jcHkKLQkudHlwZQltZW1jcHksIEBmdW5jdGlvbgotbWVtY3B5OgorR0xPQkFMKG1lbWNweSkKIAlwdXNodwklc2kKIAlwdXNodwklZGkKIAltb3Z3CSVheCwgJWRpCkBAIC0zMSwxMSArMzEsOSBAQAogCXBvcHcJJWRpCiAJcG9wdwklc2kKIAlyZXQKLQkuc2l6ZQltZW1jcHksIC4tbWVtY3B5CitFTkRQUk9DKG1lbWNweSkKIAotCS5nbG9ibAltZW1zZXQKLQkudHlwZQltZW1zZXQsIEBmdW5jdGlvbgotbWVtc2V0OgorR0xPQkFMKG1lbXNldCkKIAlwdXNodwklZGkKIAltb3Z3CSVheCwgJWRpCiAJbW92emJsCSVkbCwgJWVheApAQCAtNDgsNTIgKzQ2LDQyIEBACiAJcmVwOyBzdG9zYgogCXBvcHcJJWRpCiAJcmV0Ci0JLnNpemUJbWVtc2V0LCAuLW1lbXNldAorRU5EUFJPQyhtZW1zZXQpCiAKLQkuZ2xvYmwJY29weV9mcm9tX2ZzCi0JLnR5cGUJY29weV9mcm9tX2ZzLCBAZnVuY3Rpb24KLWNvcHlfZnJvbV9mczoKK0dMT0JBTChjb3B5X2Zyb21fZnMpCiAJcHVzaHcJJWRzCiAJcHVzaHcJJWZzCiAJcG9wdwklZHMKIAljYWxsCW1lbWNweQogCXBvcHcJJWRzCiAJcmV0Ci0JLnNpemUJY29weV9mcm9tX2ZzLCAuLWNvcHlfZnJvbV9mcworRU5EUFJPQyhjb3B5X2Zyb21fZnMpCiAKLQkuZ2xvYmwJY29weV90b19mcwotCS50eXBlCWNvcHlfdG9fZnMsIEBmdW5jdGlvbgotY29weV90b19mczoKK0dMT0JBTChjb3B5X3RvX2ZzKQogCXB1c2h3CSVlcwogCXB1c2h3CSVmcwogCXBvcHcJJWVzCiAJY2FsbAltZW1jcHkKIAlwb3B3CSVlcwogCXJldAotCS5zaXplCWNvcHlfdG9fZnMsIC4tY29weV90b19mcworRU5EUFJPQyhjb3B5X3RvX2ZzKQogCiAjaWYgMCAvKiBOb3QgY3VycmVudGx5IHVzZWQsIGJ1dCBjYW4gYmUgZW5hYmxlZCBhcyBuZWVkZWQgKi8KLQotCS5nbG9ibAljb3B5X2Zyb21fZ3MKLQkudHlwZQljb3B5X2Zyb21fZ3MsIEBmdW5jdGlvbgotY29weV9mcm9tX2dzOgorR0xPQkFMKGNvcHlfZnJvbV9ncykKIAlwdXNodwklZHMKIAlwdXNodwklZ3MKIAlwb3B3CSVkcwogCWNhbGwJbWVtY3B5CiAJcG9wdwklZHMKIAlyZXQKLQkuc2l6ZQljb3B5X2Zyb21fZ3MsIC4tY29weV9mcm9tX2dzCi0JLmdsb2JsCWNvcHlfdG9fZ3MKK0VORFBST0MoY29weV9mcm9tX2dzKQogCi0JLnR5cGUJY29weV90b19ncywgQGZ1bmN0aW9uCi1jb3B5X3RvX2dzOgorR0xPQkFMKGNvcHlfdG9fZ3MpCiAJcHVzaHcJJWVzCiAJcHVzaHcJJWdzCiAJcG9wdwklZXMKIAljYWxsCW1lbWNweQogCXBvcHcJJWVzCiAJcmV0Ci0JLnNpemUJY29weV90b19ncywgLi1jb3B5X3RvX2dzCi0KK0VORFBST0MoY29weV90b19ncykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUyBiL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKaW5kZXggYjk5MzA2Mi4uN2NjZmY0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUworKysgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSAiYm9vdC5oIgogI2luY2x1ZGUgIm9mZnNldHMuaCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWFpbi5jIGIvYXJjaC94ODYvYm9vdC9tYWluLmMKaW5kZXggMTk3NDIxZC4uNThmMDQxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9tYWluLmMKKysrIGIvYXJjaC94ODYvYm9vdC9tYWluLmMKQEAgLTE0OSwxMSArMTQ5LDYgQEAKIAkvKiBRdWVyeSBNQ0EgaW5mb3JtYXRpb24gKi8KIAlxdWVyeV9tY2EoKTsKIAotCS8qIFZveWFnZXIgKi8KLSNpZmRlZiBDT05GSUdfWDg2X1ZPWUFHRVIKLQlxdWVyeV92b3lhZ2VyKCk7Ci0jZW5kaWYKLQogCS8qIFF1ZXJ5IEludGVsIFNwZWVkU3RlcCAoSVNUKSBpbmZvcm1hdGlvbiAqLwogCXF1ZXJ5X2lzdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3BtanVtcC5TIGIvYXJjaC94ODYvYm9vdC9wbWp1bXAuUwppbmRleCAxNDFiNmUyLi4wMTljMTdhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3BtanVtcC5TCisrKyBiL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKQEAgLTE1LDE4ICsxNSwxNSBAQAogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAJLnRleHQKLQotCS5nbG9ibAlwcm90ZWN0ZWRfbW9kZV9qdW1wCi0JLnR5cGUJcHJvdGVjdGVkX21vZGVfanVtcCwgQGZ1bmN0aW9uCi0KIAkuY29kZTE2CiAKIC8qCiAgKiB2b2lkIHByb3RlY3RlZF9tb2RlX2p1bXAodTMyIGVudHJ5cG9pbnQsIHUzMiBib290cGFyYW1zKTsKICAqLwotcHJvdGVjdGVkX21vZGVfanVtcDoKK0dMT0JBTChwcm90ZWN0ZWRfbW9kZV9qdW1wKQogCW1vdmwJJWVkeCwgJWVzaQkJIyBQb2ludGVyIHRvIGJvb3RfcGFyYW1zIHRhYmxlCiAKIAl4b3JsCSVlYngsICVlYngKQEAgLTQ3LDEyICs0NCwxMCBAQAogCS5ieXRlCTB4NjYsIDB4ZWEJCSMgbGptcGwgb3Bjb2RlCiAyOgkubG9uZwlpbl9wbTMyCQkJIyBvZmZzZXQKIAkud29yZAlfX0JPT1RfQ1MJCSMgc2VnbWVudAotCi0JLnNpemUJcHJvdGVjdGVkX21vZGVfanVtcCwgLi1wcm90ZWN0ZWRfbW9kZV9qdW1wCitFTkRQUk9DKHByb3RlY3RlZF9tb2RlX2p1bXApCiAKIAkuY29kZTMyCi0JLnR5cGUJaW5fcG0zMiwgQGZ1bmN0aW9uCi1pbl9wbTMyOgorR0xPQkFMKGluX3BtMzIpCiAJIyBTZXQgdXAgZGF0YSBzZWdtZW50cyBmb3IgZmxhdCAzMi1iaXQgbW9kZQogCW1vdmwJJWVjeCwgJWRzCiAJbW92bAklZWN4LCAlZXMKQEAgLTc4LDUgKzczLDQgQEAKIAlsbGR0CSVjeAogCiAJam1wbAkqJWVheAkJCSMgSnVtcCB0byB0aGUgMzItYml0IGVudHJ5cG9pbnQKLQotCS5zaXplCWluX3BtMzIsIC4taW5fcG0zMgorRU5EUFJPQyhpbl9wbTMyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92b3lhZ2VyLmMgYi9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzOTA5ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKLSAqCi0gKiAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcwotICogICBDb3B5cmlnaHQgMjAwNyByUGF0aCwgSW5jLiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSAqCi0gKiAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgotICogICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogR2V0IHRoZSBWb3lhZ2VyIGNvbmZpZyBpbmZvcm1hdGlvbgotICovCi0KLSNpbmNsdWRlICJib290LmgiCi0KLWludCBxdWVyeV92b3lhZ2VyKHZvaWQpCi17Ci0JdTggZXJyOwotCXUxNiBlcywgZGk7Ci0JLyogQWJ1c2UgdGhlIGFwbV9iaW9zX2luZm8gYXJlYSBmb3IgdGhpcyAqLwotCXU4ICpkYXRhX3B0ciA9ICh1OCAqKSZib290X3BhcmFtcy5hcG1fYmlvc19pbmZvOwotCi0JZGF0YV9wdHJbMF0gPSAweGZmOwkvKiBGbGFnIG9uIGNvbmZpZyBub3QgZm91bmQoPykgKi8KLQotCWFzbSgicHVzaHcgJSVlcyA7ICIKLQkgICAgImludCAkMHgxNSA7ICIKLQkgICAgInNldGMgJTAgOyAiCi0JICAgICJtb3Z3ICUlZXMsICUxIDsgIgotCSAgICAicG9wdyAlJWVzIgotCSAgICA6ICI9cSIgKGVyciksICI9ciIgKGVzKSwgIj1EIiAoZGkpCi0JICAgIDogImEiICgweGZmYzApKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiAtMTsJLyogTm90IFZveWFnZXIgKi8KLQotCXNldF9mcyhlcyk7Ci0JY29weV9mcm9tX2ZzKGRhdGFfcHRyLCBkaSwgNyk7CS8qIFRhYmxlIGlzIDcgYnl0ZXMgYXBwYXJlbnRseSAqLwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKaW5kZXggZWRiYTAwZC4uMjM1YjgxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZworKysgYi9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM1Ci0jIFdlZCBTZXAgIDMgMTc6MjM6MDkgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBUdWUgRmViIDI0IDE1OjUwOjU4IDIwMDkKICMKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19YODZfMzI9eQogIyBDT05GSUdfWDg2XzY0IGlzIG5vdCBzZXQKIENPTkZJR19YODY9eQogQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIgotIyBDT05GSUdfR0VORVJJQ19MT0NLQlJFQUsgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0c9eQpAQCAtMjQsMTYgKzIzLDE0IEBACiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKICMgQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9IQVNfQ1BVX1JFTEFYPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRT15CiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogIyBDT05GSUdfSEFWRV9DUFVNQVNLX09GX0NQVV9NQVAgaXMgbm90IHNldApAQCAtNDIsMTIgKzM5LDEyIEBACiAjIENPTkZJR19aT05FX0RNQTMyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiAjIENPTkZJR19BVURJVF9BUkNIIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1JWkVEX0lOTElOSU5HPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15CiBDT05GSUdfWDg2X1NNUD15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX1g4Nl8zMl9TTVA9eQogQ09ORklHX1g4Nl9IVD15CiBDT05GSUdfWDg2X0JJT1NfUkVCT09UPXkKQEAgLTc2LDMwICs3Myw0NCBAQAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0FVRElUX1RSRUU9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLUNPTkZJR19DR1JPVVBTPXkKLSMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0dST1VQX05TPXkKLSMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0s9eQogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9TQ0hFRD15CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9OUz15CitDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eQorIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15CiBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlM9eQogIyBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQogQ09ORklHX1JFTEFZPXkKIENPTkZJR19OQU1FU1BBQ0VTPXkKIENPTkZJR19VVFNfTlM9eQogQ09ORklHX0lQQ19OUz15CiBDT05GSUdfVVNFUl9OUz15CiBDT05GSUdfUElEX05TPXkKK0NPTkZJR19ORVRfTlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtMTI0LDEyICsxMzUsMTUgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX01BUktFUlM9eQogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQpAQCAtMTM5LDE1ICsxNTMsMTAgQEAKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTE1NSwxMiArMTY0LDEwIEBACiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX1NUT1BfTUFDSElORT15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNyArMTgzLDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTE4NiwxNSArMTkzLDE0IEBACiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQorQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1g4Nl9GSU5EX1NNUF9DT05GSUc9eQogQ09ORklHX1g4Nl9NUFBBUlNFPXkKLUNPTkZJR19YODZfUEM9eQogIyBDT05GSUdfWDg2X0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfWDg2X1ZPWUFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWDg2X0dFTkVSSUNBUkNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9WU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9SREMzMjFYIGlzIG5vdCBzZXQKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19QQVJBVklSVF9HVUVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX00zODYgaXMgbm90IHNldApAQCAtMjM4LDEwICsyNDQsMTkgQEAKIENPTkZJR19YODZfQ01PVj15CiBDT05GSUdfWDg2X01JTklNVU1fQ1BVX0ZBTUlMWT00CiBDT05GSUdfWDg2X0RFQlVHQ1RMTVNSPXkKK0NPTkZJR19DUFVfU1VQX0lOVEVMPXkKK0NPTkZJR19DUFVfU1VQX0NZUklYXzMyPXkKK0NPTkZJR19DUFVfU1VQX0FNRD15CitDT05GSUdfQ1BVX1NVUF9DRU5UQVVSXzMyPXkKK0NPTkZJR19DUFVfU1VQX1RSQU5TTUVUQV8zMj15CitDT05GSUdfQ1BVX1NVUF9VTUNfMzI9eQorQ09ORklHX1g4Nl9EUz15CitDT05GSUdfWDg2X1BUUkFDRV9CVFM9eQogQ09ORklHX0hQRVRfVElNRVI9eQogQ09ORklHX0hQRVRfRU1VTEFURV9SVEM9eQogQ09ORklHX0RNST15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfQVBJIGlzIG5vdCBzZXQKIENPTkZJR19OUl9DUFVTPTY0CiBDT05GSUdfU0NIRURfU01UPXkKIENPTkZJR19TQ0hFRF9NQz15CkBAIC0yNTAsMTIgKzI2NSwxNyBAQAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfWDg2X0xPQ0FMX0FQSUM9eQogQ09ORklHX1g4Nl9JT19BUElDPXkKLSMgQ09ORklHX1g4Nl9NQ0UgaXMgbm90IHNldAorQ09ORklHX1g4Nl9SRVJPVVRFX0ZPUl9CUk9LRU5fQk9PVF9JUlFTPXkKK0NPTkZJR19YODZfTUNFPXkKK0NPTkZJR19YODZfTUNFX05PTkZBVEFMPXkKK0NPTkZJR19YODZfTUNFX1A0VEhFUk1BTD15CiBDT05GSUdfVk04Nj15CiAjIENPTkZJR19UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX0k4SyBpcyBub3Qgc2V0CiBDT05GSUdfWDg2X1JFQk9PVEZJWFVQUz15CiBDT05GSUdfTUlDUk9DT0RFPXkKK0NPTkZJR19NSUNST0NPREVfSU5URUw9eQorQ09ORklHX01JQ1JPQ09ERV9BTUQ9eQogQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFPXkKIENPTkZJR19YODZfTVNSPXkKIENPTkZJR19YODZfQ1BVSUQ9eQpAQCAtMjY0LDYgKzI4NCw3IEBACiAjIENPTkZJR19ISUdITUVNNjRHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfSElHSE1FTT15CisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsMTQgKzI5NSwxNyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hJR0hQVEU9eQorQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT049eQorQ09ORklHX1g4Nl9CT09UUEFSQU1fTUVNT1JZX0NPUlJVUFRJT05fQ0hFQ0s9eQorQ09ORklHX1g4Nl9SRVNFUlZFX0xPV182NEs9eQogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX01UUlI9eQogIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldApAQCAtMzAyLDEwICszMjYsMTEgQEAKIENPTkZJR19QSFlTSUNBTF9BTElHTj0weDIwMDAwMAogQ09ORklHX0hPVFBMVUdfQ1BVPXkKICMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogCiAjCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIyBQb3dlciBtYW5hZ2VtZW50IGFuZCBBQ1BJIG9wdGlvbnMKICMKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQpAQCAtMzMxLDE5ICszNTYsMTMgQEAKIENPTkZJR19BQ1BJX0JVVFRPTj15CiBDT05GSUdfQUNQSV9GQU49eQogQ09ORklHX0FDUElfRE9DSz15Ci0jIENPTkZJR19BQ1BJX0JBWSBpcyBub3Qgc2V0CiBDT05GSUdfQUNQSV9QUk9DRVNTT1I9eQogQ09ORklHX0FDUElfSE9UUExVR19DUFU9eQogQ09ORklHX0FDUElfVEhFUk1BTD15Ci0jIENPTkZJR19BQ1BJX1dNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ1BJX0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfQUNQSV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFQgaXMgbm90IHNldAogQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAogIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9FQz15CiAjIENPTkZJR19BQ1BJX1BDSV9TTE9UIGlzIG5vdCBzZXQKLUNPTkZJR19BQ1BJX1BPV0VSPXkKIENPTkZJR19BQ1BJX1NZU1RFTT15CiBDT05GSUdfWDg2X1BNX1RJTUVSPXkKIENPTkZJR19BQ1BJX0NPTlRBSU5FUj15CkBAIC0zODgsNyArNDA3LDYgQEAKICMKICMgc2hhcmVkIG9wdGlvbnMKICMKLSMgQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVFfUFJPQ19JTlRGIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CkBAIC00MTUsNiArNDMzLDcgQEAKIENPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19IVF9JUlE9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKICMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CkBAIC00NTIsMTMgKzQ3MSwxNyBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cyAvIEVtdWxhdGlvbnMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15CitDT05GSUdfSEFWRV9BVE9NSUNfSU9NQVA9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTUxOSw3ICs1NDIsNiBAQAogIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKIENPTkZJR19UQ1BfTUQ1U0lHPXkKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTU1NywxOSArNTc5LDIxIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD15CiBDT05GSUdfTkZfQ1RfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT15CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9eQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PXkKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKQEAgLTU5NSw4ICs2MTksOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PXkKIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9eQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPXkKLUNPTkZJR19JUDZfTkZfRklMVEVSPXkKIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz15CitDT05GSUdfSVA2X05GX0ZJTFRFUj15CiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9eQogQ09ORklHX0lQNl9ORl9NQU5HTEU9eQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC02MDQsNiArNjI4LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9eQpAQCAtNjIzLDYgKzY0OCw3IEBACiAjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CkBAIC02MzAsNiArNjU2LDcgQEAKICMgQ09ORklHX05FVF9TQ0hfR1JFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0RTTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX05FVEVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfSU5HUkVTUyBpcyBub3Qgc2V0CiAKICMKQEAgLTY0NCw2ICs2NzEsNyBAQAogIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9DTFNfUlNWUDYgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQ0dST1VQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRU1BVENIPXkKIENPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCiAjIENPTkZJR19ORVRfRU1BVENIX0NNUCBpcyBub3Qgc2V0CkBAIC02NTksNyArNjg3LDkgQEAKICMgQ09ORklHX05FVF9BQ1RfTkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9BQ1RfUEVESVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0FDVF9TSU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfU0tCRURJVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC02NzYsMjkgKzcwNiwzMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKK0NPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKIAogIwogIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgogIwotQ09ORklHX01BQzgwMjExX1JDX1BJRD15Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCiAjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKICMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTEw9eQorIyBDT05GSUdfUkZLSUxMX0lOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTExfTEVEUz15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC03MjIsNyArNzU2LDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19QTlA9eQotIyBDT05GSUdfUE5QX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTlBfREVCVUdfTUVTU0FHRVM9eQogCiAjCiAjIFByb3RvY29scwpAQCAtNzUwLDIwICs3ODQsMTkgQEAKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfSUJNX0FTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUNFUl9XTUkgaXMgbm90IHNldAotIyBDT05GSUdfQVNVU19MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfRlVKSVRTVV9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfVEMxMTAwX1dNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBTF9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU09OWV9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfVEhJTktQQURfQUNQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlRFTF9NRU5MT1cgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC04MDIsNyArODM1LDcgQEAKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKQEAgLTg3NSw2ICs5MDgsNyBAQAogQ09ORklHX1BBVEFfU0NIPXkKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiAjIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDAgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDEgaXMgbm90IHNldApAQCAtOTMwLDYgKzk2NCw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTk1Myw2ICs5OTAsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTk2MCw3ICsxMDAwLDYgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VERVRIPXkKICMgQ09ORklHX0ZPUkNFREVUSF9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTk3NCwxNSArMTAxMywxNiBAQAogIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogQ09ORklHX0UxMDAwRT15CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKQEAgLTEwMDAsMTggKzEwNDAsMjMgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogQ09ORklHX1RSPXkKICMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKQEAgLTEwMjUsOSArMTA3MCw4IEBACiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOXzgwMjExPXkKICMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAogIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldApAQCAtMTA0NCw2ICsxMDg4LDggQEAKIENPTkZJR19BVEg1Sz15CiAjIENPTkZJR19BVEg1S19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAogIyBDT05GSUdfSVdMQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSVdMQUdOIGlzIG5vdCBzZXQKQEAgLTEwNTUsNiArMTEwMSwxMCBAQAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKIAogIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTEwNjIsNiArMTExMiw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAogQ09ORklHX05FVF9QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CkBAIC0xMTIzLDYgKzExNzQsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC0xMTYwLDE1ICsxMjEyLDE2IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CiAjIENPTkZJR19JTlBVVF9QQ1NQS1IgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQVBBTkVMIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTIzMiw3IEBACiAjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjQ1LDYgKzEyOTksNyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CkBAIC0xMjc5LDYgKzEzMzQsNyBAQAogQ09ORklHX0kyQ19CT0FSRElORk89eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydApAQCAtMTMzMSw4ICsxMzg3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldApAQCAtMTM1MSw4ICsxNDA1LDc4IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19LOFRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSE1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19DT1JFVEVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hEQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVBQTEVTTUMgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEzNzIsNiArMTQ5Niw3IEBACiAjIENPTkZJR19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVRDT19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVQ4NzEyRl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfSVQ4N19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSFBfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfU0MxMjAwX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQzg3NDEzX1dEVCBpcyBub3Qgc2V0CkBAIC0xMzc5LDkgKzE1MDQsMTEgQEAKICMgQ09ORklHX1NCQzgzNjBfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NCQzcyNDBfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVTVfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfU0NIMzExWF9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfU01TQzM3Qjc4N19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzNjI3SEZfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4MzY5N0hGX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19XODM2OTdVR19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzODc3Rl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzOTc3Rl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSFpfV0RUIGlzIG5vdCBzZXQKQEAgLTEzOTcsMTEgKzE1MjQsMTEgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCkBAIC0xNDEwLDcgKzE1MzcsMTMgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtMTQ1MCw2ICsxNTgzLDcgQEAKICMgQ09ORklHX0RSTV9JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9JODMwIGlzIG5vdCBzZXQKIENPTkZJR19EUk1fSTkxNT15CisjIENPTkZJR19EUk1fSTkxNV9LTVMgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldApAQCAtMTQ1OSw2ICsxNTkzLDcgQEAKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtMTQ4Nyw3ICsxNjIyLDYgQEAKICMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZFU0EgaXMgbm90IHNldAogQ09ORklHX0ZCX0VGST15Ci0jIENPTkZJR19GQl9JTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX040MTEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSEdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKQEAgLTE1MDMsNiArMTYzNyw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtMTUxNSwxMiArMTY1MCwxNSBAQAogIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9HRU9ERSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKICMgQ09ORklHX0JBQ0tMSUdIVF9QUk9HRUFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9NQlBfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEgaXMgbm90IHNldAogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTE1NDAsMTAgKzE2NzgsMTIgQEAKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CiBDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfSkFDSz15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15CiBDT05GSUdfU05EX1NFUV9EVU1NWT15CiBDT05GSUdfU05EX09TU0VNVUw9eQpAQCAtMTU1MSw2ICsxNjkxLDggQEAKIENPTkZJR19TTkRfUENNX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorQ09ORklHX1NORF9IUlRJTUVSPXkKK0NPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CiBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQpAQCAtMTYwNSwxMSArMTc0NywxNiBAQAogIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfSERBX0lOVEVMPXkKIENPTkZJR19TTkRfSERBX0hXREVQPXkKKyMgQ09ORklHX1NORF9IREFfUkVDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfSERBX0NPREVDX1JFQUxURUs9eQogQ09ORklHX1NORF9IREFfQ09ERUNfQU5BTE9HPXkKIENPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMPXkKIENPTkZJR19TTkRfSERBX0NPREVDX1ZJQT15CiBDT05GSUdfU05EX0hEQV9DT0RFQ19BVElIRE1JPXkKK0NPTkZJR19TTkRfSERBX0NPREVDX05WSERNST15CitDT05GSUdfU05EX0hEQV9DT0RFQ19JTlRFTEhETUk9eQorQ09ORklHX1NORF9IREFfRUxEPXkKIENPTkZJR19TTkRfSERBX0NPREVDX0NPTkVYQU5UPXkKIENPTkZJR19TTkRfSERBX0NPREVDX0NNRURJQT15CiBDT05GSUdfU05EX0hEQV9DT0RFQ19TSTMwNTQ9eQpAQCAtMTY0Myw2ICsxNzkwLDcgQEAKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVMxMjJMIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfUENNQ0lBPXkKICMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKQEAgLTE2NTcsMTUgKzE4MDUsMzcgQEAKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLUNPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LPXkKLUNPTkZJR19ISURfRkY9eQogQ09ORklHX0hJRF9QSUQ9eQorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CiBDT05GSUdfTE9HSVRFQ0hfRkY9eQogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX1BBTlRIRVJMT1JEX0ZGPXkKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPXkKIENPTkZJR19aRVJPUExVU19GRj15Ci1DT05GSUdfVVNCX0hJRERFVj15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTE2ODMsNiArMTg1Myw4IEBACiBDT05GSUdfVVNCX1NVU1BFTkQ9eQogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKQEAgLTE2OTEsNiArMTg2Myw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKQEAgLTE3MDAsNiArMTg3Myw4IEBACiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTcwNywyMCArMTg4MiwyMCBAQAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9eQogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTE3MjgsNyArMTkwMyw2IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogQ09ORklHX1VTQl9MSUJVU1VBTD15CiAKQEAgLTE3NDksNiArMTkyMyw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xNzY2LDcgKzE5NDEsMTMgQEAKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CkBAIC0xNzc1LDYgKzE5NTYsNyBAQAogIwogIyBMRUQgZHJpdmVycwogIworIyBDT05GSUdfTEVEU19BTElYMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19DTEVWT19NQUlMIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CkBAIC0xNzg1LDYgKzE5NjcsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtMTgyNCw2ICsyMDA3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xODMzLDEyICsyMDE3LDE1IEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE4NTEsNiArMjAzOCwyMiBAQAogIwogIyBDT05GSUdfSU5URUxfSU9BVERNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CitDT05GSUdfWDg2X1BMQVRGT1JNX0RFVklDRVM9eQorIyBDT05GSUdfQUNFUl9XTUkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRlVKSVRTVV9MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfVEMxMTAwX1dNSSBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkFTT05JQ19MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFMX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TT05ZX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19USElOS1BBRF9BQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01FTkxPVyBpcyBub3Qgc2V0CitDT05GSUdfRUVFUENfTEFQVE9QPXkKKyMgQ09ORklHX0FDUElfV01JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1RPU0hJQkEgaXMgbm90IHNldAogCiAjCiAjIEZpcm13YXJlIERyaXZlcnMKQEAgLTE4NjEsOCArMjA2NCw3IEBACiAjIENPTkZJR19ERUxMX1JCVSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0RCQVMgaXMgbm90IHNldAogQ09ORklHX0RNSUlEPXkKLUNPTkZJR19JU0NTSV9JQkZUX0ZJTkQ9eQotQ09ORklHX0lTQ1NJX0lCRlQ9eQorIyBDT05GSUdfSVNDU0lfSUJGVF9GSU5EIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE4NzIsMjEgKzIwNzQsMjQgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQogQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKICMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAorQ09ORklHX1FVT1RBX1RSRUU9eQogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiBDT05GSUdfUUZNVF9WMj15CiBDT05GSUdfUVVPVEFDVEw9eQpAQCAtMTkyMCwxNiArMjEyNSwxNCBAQAogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfVk1DT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CkBAIC0xOTM5LDYgKzIxNDIsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE5NjAsNiArMjE2NCw3IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTIwMzYsNyArMjI0MSw3IEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKQEAgLTIwNjYsMzMgKzIyNzEsNTQgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfSFdfQlJBTkNIX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1BST0ZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQ9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVFJJQ1RfREVWTUVNIGlzIG5vdCBzZXQKIENPTkZJR19YODZfVkVSQk9TRV9CT09UVVA9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0yMTIzLDggKzIzNDksMTAgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVM9eQogIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj02NTUzNgpAQCAtMjEzNSw3ICsyMzYzLDYgQEAKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1A9eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0NIRUNLUkVRUFJPVF9WQUxVRT0xCi0jIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKQEAgLTIxNDMsMTEgKzIzNzAsMTggQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CkBAIC0yMTgyLDYgKzI0MTYsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQ19JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0yMjIyLDYgKzI0NTcsMTEgQEAKICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX1BBRExPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFVl9HRU9ERSBpcyBub3Qgc2V0CkBAIC0yMjM5LDYgKzI0NzksNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKaW5kZXggMzIyZGQyNy4uOWZlNWQyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNQotIyBXZWQgU2VwICAzIDE3OjEzOjM5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgVHVlIEZlYiAyNCAxNTo0NDoxNiAyMDA5CiAjCiBDT05GSUdfNjRCSVQ9eQogIyBDT05GSUdfWDg2XzMyIGlzIG5vdCBzZXQKIENPTkZJR19YODZfNjQ9eQogQ09ORklHX1g4Nj15CiBDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyIKLSMgQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HPXkKQEAgLTIzLDE3ICsyMiwxNiBAQAogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0hBU19DUFVfUkVMQVg9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFPXkKIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSEFWRV9DUFVNQVNLX09GX0NQVV9NQVA9eQpAQCAtNDIsMTIgKzQwLDEyIEBACiBDT05GSUdfWk9ORV9ETUEzMj15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19PUFRJTUlaRURfSU5MSU5JTkc9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKIENPTkZJR19YODZfU01QPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CiBDT05GSUdfWDg2XzY0X1NNUD15CiBDT05GSUdfWDg2X0hUPXkKIENPTkZJR19YODZfQklPU19SRUJPT1Q9eQpAQCAtNzYsMzAgKzc0LDQ0IEBACiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0FVRElUU1lTQ0FMTD15CiBDT05GSUdfQVVESVRfVFJFRT15CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOAotQ09ORklHX0NHUk9VUFM9eQotIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DR1JPVVBfTlM9eQotIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSz15CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX1NDSEVEPXkKK0NPTkZJR19DR1JPVVBTPXkKKyMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQX05TPXkKK0NPTkZJR19DR1JPVVBfRlJFRVpFUj15CisjIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQogQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CiAjIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotQ09ORklHX1BST0NfUElEX0NQVVNFVD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX05BTUVTUEFDRVM9eQogQ09ORklHX1VUU19OUz15CiBDT05GSUdfSVBDX05TPXkKIENPTkZJR19VU0VSX05TPXkKIENPTkZJR19QSURfTlM9eQorQ09ORklHX05FVF9OUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC0xMjQsMTIgKzEzNiwxNSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfTUFSS0VSUz15CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CkBAIC0xMzksMTUgKzE1NCwxMCBAQAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xNTUsNyArMTY1LDYgQEAKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15CiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CkBAIC0xNzUsNyArMTg0LDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTE4NSwxMyArMTk0LDE0IEBACiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorIyBDT05GSUdfTlVNQV9NSUdSQVRFX0lSUV9ERVNDIGlzIG5vdCBzZXQKIENPTkZJR19YODZfRklORF9TTVBfQ09ORklHPXkKIENPTkZJR19YODZfTVBQQVJTRT15Ci1DT05GSUdfWDg2X1BDPXkKICMgQ09ORklHX1g4Nl9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1g4Nl9WT1lBR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9HRU5FUklDQVJDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19YODZfVlNNUCBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1BBUkFWSVJUX0dVRVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTTM4NiBpcyBub3Qgc2V0CkBAIC0yMzAsNiArMjQwLDExIEBACiBDT05GSUdfWDg2X0NNT1Y9eQogQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NjQKIENPTkZJR19YODZfREVCVUdDVExNU1I9eQorQ09ORklHX0NQVV9TVVBfSU5URUw9eQorQ09ORklHX0NQVV9TVVBfQU1EPXkKK0NPTkZJR19DUFVfU1VQX0NFTlRBVVJfNjQ9eQorQ09ORklHX1g4Nl9EUz15CitDT05GSUdfWDg2X1BUUkFDRV9CVFM9eQogQ09ORklHX0hQRVRfVElNRVI9eQogQ09ORklHX0hQRVRfRU1VTEFURV9SVEM9eQogQ09ORklHX0RNST15CkBAIC0yMzcsOCArMjUyLDExIEBACiBDT05GSUdfQ0FMR0FSWV9JT01NVT15CiBDT05GSUdfQ0FMR0FSWV9JT01NVV9FTkFCTEVEX0JZX0RFRkFVTFQ9eQogQ09ORklHX0FNRF9JT01NVT15CitDT05GSUdfQU1EX0lPTU1VX1NUQVRTPXkKIENPTkZJR19TV0lPVExCPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQorQ09ORklHX0lPTU1VX0FQST15CisjIENPTkZJR19NQVhTTVAgaXMgbm90IHNldAogQ09ORklHX05SX0NQVVM9NjQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1NDSEVEX01DPXkKQEAgLTI0NywxMiArMjY1LDE5IEBACiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19YODZfTE9DQUxfQVBJQz15CiBDT05GSUdfWDg2X0lPX0FQSUM9eQotIyBDT05GSUdfWDg2X01DRSBpcyBub3Qgc2V0CitDT05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVM9eQorQ09ORklHX1g4Nl9NQ0U9eQorQ09ORklHX1g4Nl9NQ0VfSU5URUw9eQorQ09ORklHX1g4Nl9NQ0VfQU1EPXkKICMgQ09ORklHX0k4SyBpcyBub3Qgc2V0CiBDT05GSUdfTUlDUk9DT0RFPXkKK0NPTkZJR19NSUNST0NPREVfSU5URUw9eQorQ09ORklHX01JQ1JPQ09ERV9BTUQ9eQogQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFPXkKIENPTkZJR19YODZfTVNSPXkKIENPTkZJR19YODZfQ1BVSUQ9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX0RJUkVDVF9HQlBBR0VTPXkKIENPTkZJR19OVU1BPXkKIENPTkZJR19LOF9OVU1BPXkKIENPTkZJR19YODZfNjRfQUNQSV9OVU1BPXkKQEAgLTI2OSw3ICsyOTQsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CkBAIC0yODAsMTAgKzMwNCwxNCBAQAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19YODZfQ0hFQ0tfQklPU19DT1JSVVBUSU9OPXkKK0NPTkZJR19YODZfQk9PVFBBUkFNX01FTU9SWV9DT1JSVVBUSU9OX0NIRUNLPXkKK0NPTkZJR19YODZfUkVTRVJWRV9MT1dfNjRLPXkKIENPTkZJR19NVFJSPXkKICMgQ09ORklHX01UUlJfU0FOSVRJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19YODZfUEFUPXkKQEAgLTMwMiwxMSArMzMwLDEyIEBACiBDT05GSUdfUEhZU0lDQUxfQUxJR049MHgyMDAwMDAKIENPTkZJR19IT1RQTFVHX0NQVT15CiAjIENPTkZJR19DT01QQVRfVkRTTyBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRD15CiAKICMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwogIwogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fSEVBREVSPXkKIENPTkZJR19QTT15CkBAIC0zMzMsMjAgKzM2MiwxNCBAQAogQ09ORklHX0FDUElfQlVUVE9OPXkKIENPTkZJR19BQ1BJX0ZBTj15CiBDT05GSUdfQUNQSV9ET0NLPXkKLSMgQ09ORklHX0FDUElfQkFZIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX1BST0NFU1NPUj15CiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVT15CiBDT05GSUdfQUNQSV9USEVSTUFMPXkKIENPTkZJR19BQ1BJX05VTUE9eQotIyBDT05GSUdfQUNQSV9XTUkgaXMgbm90IHNldAotIyBDT05GSUdfQUNQSV9BU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDUElfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKICMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FDUElfRUM9eQogIyBDT05GSUdfQUNQSV9QQ0lfU0xPVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9QT1dFUj15CiBDT05GSUdfQUNQSV9TWVNURU09eQogQ09ORklHX1g4Nl9QTV9USU1FUj15CiBDT05GSUdfQUNQSV9DT05UQUlORVI9eQpAQCAtMzgxLDEzICs0MDQsMTcgQEAKICMKICMgc2hhcmVkIG9wdGlvbnMKICMKLSMgQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVFfUFJPQ19JTlRGIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQogCiAjCisjIE1lbW9yeSBwb3dlciBzYXZpbmdzCisjCisjIENPTkZJR19JNzMwMF9JRExFIGlzIG5vdCBzZXQKKworIwogIyBCdXMgb3B0aW9ucyAoUENJIGV0Yy4pCiAjCiBDT05GSUdfUENJPXkKQEAgLTM5NSw4ICs0MjIsMTAgQEAKIENPTkZJR19QQ0lfTU1DT05GSUc9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKIENPTkZJR19ETUFSPXkKKyMgQ09ORklHX0RNQVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiBDT05GSUdfRE1BUl9HRlhfV0E9eQogQ09ORklHX0RNQVJfRkxPUFBZX1dBPXkKKyMgQ09ORklHX0lOVFJfUkVNQVAgaXMgbm90IHNldAogQ09ORklHX1BDSUVQT1JUQlVTPXkKICMgQ09ORklHX0hPVFBMVUdfUENJX1BDSUUgaXMgbm90IHNldAogQ09ORklHX1BDSUVBRVI9eQpAQCAtNDA1LDYgKzQzNCw3IEBACiBDT05GSUdfUENJX01TST15CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiBDT05GSUdfSFRfSVJRPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiBDT05GSUdfSzhfTkI9eQpAQCAtNDM4LDYgKzQ2OCw4IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX0lBMzJfRU1VTEFUSU9OPXkKICMgQ09ORklHX0lBMzJfQU9VVCBpcyBub3Qgc2V0CkBAIC00NDksNiArNDgxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTUwOSw3ICs1NDIsNiBAQAogIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKIENPTkZJR19UQ1BfTUQ1U0lHPXkKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTU0NywxOSArNTc5LDIxIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD15CiBDT05GSUdfTkZfQ1RfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT15CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9eQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PXkKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKQEAgLTU4NSw4ICs2MTksOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PXkKIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9eQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPXkKLUNPTkZJR19JUDZfTkZfRklMVEVSPXkKIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz15CitDT05GSUdfSVA2X05GX0ZJTFRFUj15CiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9eQogQ09ORklHX0lQNl9ORl9NQU5HTEU9eQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC01OTQsNiArNjI4LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9eQpAQCAtNjEzLDYgKzY0OCw3IEBACiAjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CkBAIC02MjAsNiArNjU2LDcgQEAKICMgQ09ORklHX05FVF9TQ0hfR1JFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0RTTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX05FVEVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfSU5HUkVTUyBpcyBub3Qgc2V0CiAKICMKQEAgLTYzNCw2ICs2NzEsNyBAQAogIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9DTFNfUlNWUDYgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQ0dST1VQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRU1BVENIPXkKIENPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCiAjIENPTkZJR19ORVRfRU1BVENIX0NNUCBpcyBub3Qgc2V0CkBAIC02NDksNyArNjg3LDkgQEAKICMgQ09ORklHX05FVF9BQ1RfTkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9BQ1RfUEVESVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0FDVF9TSU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfU0tCRURJVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC02NjYsMjkgKzcwNiwzMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKK0NPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKIAogIwogIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgogIwotQ09ORklHX01BQzgwMjExX1JDX1BJRD15Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCiAjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKICMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTEw9eQorIyBDT05GSUdfUkZLSUxMX0lOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTExfTEVEUz15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC03MTIsNyArNzU2LDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19QTlA9eQotIyBDT05GSUdfUE5QX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTlBfREVCVUdfTUVTU0FHRVM9eQogCiAjCiAjIFByb3RvY29scwpAQCAtNzQwLDIxICs3ODQsMjEgQEAKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfSUJNX0FTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUNFUl9XTUkgaXMgbm90IHNldAotIyBDT05GSUdfQVNVU19MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfRlVKSVRTVV9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0xBUFRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT01QQUxfTEFQVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTllfTEFQVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RISU5LUEFEX0FDUEkgaXMgbm90IHNldAotIyBDT05GSUdfSU5URUxfTUVOTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9YUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0dSVSBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNzkzLDcgKzgzNyw3IEBACiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9JU0NTSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CkBAIC04NjQsNiArOTA4LDcgQEAKIENPTkZJR19QQVRBX1NDSD15CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogIyBDT05GSUdfTURfTElORUFSIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX1JBSUQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX1JBSUQxIGlzIG5vdCBzZXQKQEAgLTkxOSw2ICs5NjQsOSBAQAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC05NDIsNiArOTkwLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC05NDksNyArMTAwMCw2IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFREVUSD15CiAjIENPTkZJR19GT1JDRURFVEhfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC05NjMsMTUgKzEwMTMsMTYgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKQEAgLTk4OSwxOCArMTA0MCwyMyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiBDT05GSUdfVFI9eQogIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldApAQCAtMTAxMyw5ICsxMDY5LDggQEAKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CkBAIC0xMDMyLDYgKzEwODcsOCBAQAogQ09ORklHX0FUSDVLPXkKICMgQ09ORklHX0FUSDVLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUSDlLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xDT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xBR04gaXMgbm90IHNldApAQCAtMTA0Myw2ICsxMTAwLDEwIEBACiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtMTA1MCw2ICsxMTExLDcgQEAKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hTTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDTUNJQT15CiAjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKQEAgLTEwNTksNiArMTEyMSw3IEBACiAjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9JQk1UUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX0ZEREk9eQogIyBDT05GSUdfREVGWFggaXMgbm90IHNldApAQCAtMTExMCw2ICsxMTczLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtMTE0NywxNSArMTIxMSwxNiBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogIyBDT05GSUdfSU5QVVRfUENTUEtSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FQQU5FTCBpcyBub3Qgc2V0CkBAIC0xMTY1LDYgKzEyMzAsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIzMSw2ICsxMjk3LDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQpAQCAtMTI2MCw2ICsxMzI3LDcgQEAKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKQEAgLTEzMTEsOCArMTM3OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKQEAgLTEzMzEsOCArMTM5Nyw3OCBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSzhURU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQ09SRVRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19IREFQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNMVjAyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FQUExFU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMzUyLDE1ICsxNDg4LDE4IEBACiAjIENPTkZJR19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVRDT19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVQ4NzEyRl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfSVQ4N19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSFBfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfU0MxMjAwX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQzg3NDEzX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR182MFhYX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQkM4MzYwX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFU1X1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1NDSDMxMVhfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0MzN0I3ODdfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4MzYyN0hGX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XODM2OTdIRl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfVzgzNjk3VUdfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4Mzg3N0ZfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4Mzk3N0ZfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0haX1dEVCBpcyBub3Qgc2V0CkBAIC0xMzc2LDExICsxNTE1LDExIEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM4OSw3ICsxNTI4LDEzIEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTE0MjMsNiArMTU2OCw3IEBACiAjIENPTkZJR19EUk1fSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fSTgzMCBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX0k5MTU9eQorQ09ORklHX0RSTV9JOTE1X0tNUz15CiAjIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CkBAIC0xNDMyLDYgKzE1NzgsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC0xNDYwLDcgKzE2MDcsNiBAQAogIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVkVTQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfRUZJPXkKLSMgQ09ORklHX0ZCX0lNQUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTjQxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9IR0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtMTQ3NSw2ICsxNjIxLDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC0xNDg2LDEyICsxNjMzLDE1IEBACiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0dFT0RFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQogIyBDT05GSUdfQkFDS0xJR0hUX1BST0dFQVIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX01CUF9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX1NBSEFSQSBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtMTUxMSwxMCArMTY2MSwxMiBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKIENPTkZJR19TTkRfSFdERVA9eQorQ09ORklHX1NORF9KQUNLPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSPXkKIENPTkZJR19TTkRfU0VRX0RVTU1ZPXkKIENPTkZJR19TTkRfT1NTRU1VTD15CkBAIC0xNTIyLDYgKzE2NzQsOCBAQAogQ09ORklHX1NORF9QQ01fT1NTPXkKIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9eQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CkBAIC0xNTc1LDExICsxNzI5LDE2IEBACiAjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAogQ09ORklHX1NORF9IREFfSU5URUw9eQogQ09ORklHX1NORF9IREFfSFdERVA9eQorIyBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAgaXMgbm90IHNldAogQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSz15CiBDT05GSUdfU05EX0hEQV9DT0RFQ19BTkFMT0c9eQogQ09ORklHX1NORF9IREFfQ09ERUNfU0lHTUFURUw9eQogQ09ORklHX1NORF9IREFfQ09ERUNfVklBPXkKIENPTkZJR19TTkRfSERBX0NPREVDX0FUSUhETUk9eQorQ09ORklHX1NORF9IREFfQ09ERUNfTlZIRE1JPXkKK0NPTkZJR19TTkRfSERBX0NPREVDX0lOVEVMSERNST15CitDT05GSUdfU05EX0hEQV9FTEQ9eQogQ09ORklHX1NORF9IREFfQ09ERUNfQ09ORVhBTlQ9eQogQ09ORklHX1NORF9IREFfQ09ERUNfQ01FRElBPXkKIENPTkZJR19TTkRfSERBX0NPREVDX1NJMzA1ND15CkBAIC0xNjEyLDYgKzE3NzEsNyBAQAogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VUzEyMkwgaXMgbm90IHNldAogQ09ORklHX1NORF9QQ01DSUE9eQogIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldApAQCAtMTYyNiwxNSArMTc4NiwzNyBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0s9eQotQ09ORklHX0hJRF9GRj15CiBDT05GSUdfSElEX1BJRD15CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKIENPTkZJR19MT0dJVEVDSF9GRj15CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiBDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKIENPTkZJR19USFJVU1RNQVNURVJfRkY9eQogQ09ORklHX1pFUk9QTFVTX0ZGPXkKLUNPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTY1Miw2ICsxODM0LDggQEAKIENPTkZJR19VU0JfU1VTUEVORD15CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtMTY2MCw2ICsxODQ0LDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTY2OSw2ICsxODU0LDggQEAKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xNjc2LDIwICsxODYzLDIwIEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFJJTlRFUj15CiAjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTY5Nyw3ICsxODg0LDYgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKIApAQCAtMTcxOCw2ICsxOTA0LDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTE3MzUsNyArMTkyMiwxMyBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKQEAgLTE3NDQsNiArMTkzNyw3IEBACiAjCiAjIExFRCBkcml2ZXJzCiAjCisjIENPTkZJR19MRURTX0FMSVgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0NMRVZPX01BSUwgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKQEAgLTE3NTQsNiArMTk0OCw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSUz15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkBAIC0xNzkzLDYgKzE5ODgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE4MDIsMTIgKzE5OTgsMTUgQEAKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKIENPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTgyMCw2ICsyMDE5LDIxIEBACiAjCiAjIENPTkZJR19JTlRFTF9JT0FURE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19YODZfUExBVEZPUk1fREVWSUNFUz15CisjIENPTkZJR19BQ0VSX1dNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1VTX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19GVUpJVFNVX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkFTT05JQ19MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFMX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TT05ZX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19USElOS1BBRF9BQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01FTkxPVyBpcyBub3Qgc2V0CitDT05GSUdfRUVFUENfTEFQVE9QPXkKKyMgQ09ORklHX0FDUElfV01JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1RPU0hJQkEgaXMgbm90IHNldAogCiAjCiAjIEZpcm13YXJlIERyaXZlcnMKQEAgLTE4MzAsOCArMjA0NCw3IEBACiAjIENPTkZJR19ERUxMX1JCVSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0RCQVMgaXMgbm90IHNldAogQ09ORklHX0RNSUlEPXkKLUNPTkZJR19JU0NTSV9JQkZUX0ZJTkQ9eQotQ09ORklHX0lTQ1NJX0lCRlQ9eQorIyBDT05GSUdfSVNDU0lfSUJGVF9GSU5EIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE4NDEsMjIgKzIwNTQsMjUgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQogIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFfVFJFRT15CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKIENPTkZJR19RVU9UQUNUTD15CkBAIC0xODkwLDE2ICsyMTA2LDE0IEBACiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19WTUNPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKQEAgLTE5MDksNiArMjEyMyw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTkzMCw2ICsyMTQ1LDcgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMjAwNiw3ICsyMjIyLDcgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQpAQCAtMjAzNSw0MCArMjI1MSw2MCBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlM9eQogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9IV19CUkFOQ0hfVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTUFJPRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVD15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUUklDVF9ERVZNRU0gaXMgbm90IHNldAogQ09ORklHX1g4Nl9WRVJCT1NFX0JPT1RVUD15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19FQVJMWV9QUklOVEtfREJHUD15CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19YODZfUFREVU1QIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19ST0RBVEE9eQotIyBDT05GSUdfRElSRUNUX0dCUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUk9EQVRBX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX05YX1RFU1Q9bQogIyBDT05GSUdfSU9NTVVfREVCVUcgaXMgbm90IHNldApAQCAtMjA5Miw4ICsyMzI4LDEwIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTPXkKICMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9NjU1MzYKQEAgLTIxMDQsNyArMjM0Miw2IEBACiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUUz15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9DSEVDS1JFUVBST1RfVkFMVUU9MQotIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9FTkFCTEVfU0VDTUFSS19ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfUE9MSUNZREJfVkVSU0lPTl9NQVggaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CkBAIC0yMTEyLDExICsyMzQ5LDE4IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApAQCAtMjE1MSw2ICsyMzk1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkNfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMjE5MSw2ICsyNDM2LDExIEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1ZNPXkKQEAgLTIyMDUsNiArMjQ1NSw3IEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVD15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZSBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQppbmRleCA5MDNkZTRhLi5lYmU3ZGVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19BRVNfWDg2XzY0KSArPSBhZXMteDg2XzY0Lm8KIG9iai0kKENPTkZJR19DUllQVE9fVFdPRklTSF9YODZfNjQpICs9IHR3b2Zpc2gteDg2XzY0Lm8KIG9iai0kKENPTkZJR19DUllQVE9fU0FMU0EyMF9YODZfNjQpICs9IHNhbHNhMjAteDg2XzY0Lm8KK29iai0kKENPTkZJR19DUllQVE9fQUVTX05JX0lOVEVMKSArPSBhZXNuaS1pbnRlbC5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJDX0lOVEVMKSArPSBjcmMzMmMtaW50ZWwubwogCkBAIC0xOSwzICsyMCw1IEBACiBhZXMteDg2XzY0LXkgOj0gYWVzLXg4Nl82NC1hc21fNjQubyBhZXNfZ2x1ZS5vCiB0d29maXNoLXg4Nl82NC15IDo9IHR3b2Zpc2gteDg2XzY0LWFzbV82NC5vIHR3b2Zpc2hfZ2x1ZS5vCiBzYWxzYTIwLXg4Nl82NC15IDo9IHNhbHNhMjAteDg2XzY0LWFzbV82NC5vIHNhbHNhMjBfZ2x1ZS5vCisKK2Flc25pLWludGVsLXkgOj0gYWVzbmktaW50ZWxfYXNtLm8gYWVzbmktaW50ZWxfZ2x1ZS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKaW5kZXggZTQxYjE0Ny4uYjk0OWVjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUwpAQCAtNDEsMTQgKzQxLDE0IEBACiAjZGVmaW5lIHRsZW4gMTAyNCAgIC8vIGxlbmd0aCBvZiBlYWNoIG9mIDQgJ3hvcicgYXJyYXlzICgyNTYgMzItYml0IHdvcmRzKQogCiAvKiBvZmZzZXRzIHRvIHBhcmFtZXRlcnMgd2l0aCBvbmUgcmVnaXN0ZXIgcHVzaGVkIG9udG8gc3RhY2sgKi8KLSNkZWZpbmUgdGZtIDgKKyNkZWZpbmUgY3R4IDgKICNkZWZpbmUgb3V0X2JsayAxMgogI2RlZmluZSBpbl9ibGsgMTYKIAotLyogb2Zmc2V0cyBpbiBjcnlwdG9fdGZtIHN0cnVjdHVyZSAqLwotI2RlZmluZSBrbGVuIChjcnlwdG9fdGZtX2N0eF9vZmZzZXQgKyAwKQotI2RlZmluZSBla2V5IChjcnlwdG9fdGZtX2N0eF9vZmZzZXQgKyA0KQotI2RlZmluZSBka2V5IChjcnlwdG9fdGZtX2N0eF9vZmZzZXQgKyAyNDQpCisvKiBvZmZzZXRzIGluIGNyeXB0b19hZXNfY3R4IHN0cnVjdHVyZSAqLworI2RlZmluZSBrbGVuICg0ODApCisjZGVmaW5lIGVrZXkgKDApCisjZGVmaW5lIGRrZXkgKDI0MCkKIAogLy8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgZW5jcnlwdCBhbmQgZGVjcnlwdCBzdWJyb3V0aW5lcwogCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlkb19jb2wgKHRhYmxlLCByNSxyMCxyMSxyNCwgcjIscjMpOwkJLyogaWR4PXI1ICovCiAKIC8vIEFFUyAoUmlqbmRhZWwpIEVuY3J5cHRpb24gU3Vicm91dGluZQotLyogdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KKy8qIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLwogCiAuZ2xvYmFsICBhZXNfZW5jX2JsawogCkBAIC0yMjgsNyArMjI4LDcgQEAKIAogYWVzX2VuY19ibGs6CiAJcHVzaCAgICAlZWJwCi0JbW92ICAgICB0Zm0oJWVzcCksJWVicAorCW1vdiAgICAgY3R4KCVlc3ApLCVlYnAKIAogLy8gQ0FVVElPTjogdGhlIG9yZGVyIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlc2UgYXNzaWducyAKIC8vIHJlbHkgb24gdGhlIHJlZ2lzdGVyIG1hcHBpbmdzCkBAIC0yOTIsNyArMjkyLDcgQEAKIAlyZXQKIAogLy8gQUVTIChSaWpuZGFlbCkgRGVjcnlwdGlvbiBTdWJyb3V0aW5lCi0vKiB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLworLyogdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCiAKIC5nbG9iYWwgIGFlc19kZWNfYmxrCiAKQEAgLTMwMyw3ICszMDMsNyBAQAogCiBhZXNfZGVjX2JsazoKIAlwdXNoICAgICVlYnAKLQltb3YgICAgIHRmbSglZXNwKSwlZWJwCisJbW92ICAgICBjdHgoJWVzcCksJWVicAogCiAvLyBDQVVUSU9OOiB0aGUgb3JkZXIgYW5kIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGVzZSBhc3NpZ25zIAogLy8gcmVseSBvbiB0aGUgcmVnaXN0ZXIgbWFwcGluZ3MKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TIGIvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMKaW5kZXggYTEyMGY1Mi4uNWI1NzdkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMKQEAgLTE3LDggKzE3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCi0jZGVmaW5lIEJBU0UgY3J5cHRvX3RmbV9jdHhfb2Zmc2V0Ci0KICNkZWZpbmUgUjEJJXJheAogI2RlZmluZSBSMUUJJWVheAogI2RlZmluZSBSMVgJJWF4CkBAIC01NiwxMyArNTQsMTMgQEAKIAkuYWxpZ24JODsJCQlcCiBGVU5DOgltb3ZxCXIxLHIyOwkJCVwKIAltb3ZxCXIzLHI0OwkJCVwKLQlsZWFxCUJBU0UrS0VZKzQ4KzQocjgpLHI5OwlcCisJbGVhcQlLRVkrNDgocjgpLHI5OwkJXAogCW1vdnEJcjEwLHIxMTsJCVwKIAltb3ZsCShyNykscjUgIyMgRTsJCVwKIAltb3ZsCTQocjcpLHIxICMjIEU7CQlcCiAJbW92bAk4KHI3KSxyNiAjIyBFOwkJXAogCW1vdmwJMTIocjcpLHI3ICMjIEU7CQlcCi0JbW92bAlCQVNFKzAocjgpLHIxMCAjIyBFOwlcCisJbW92bAk0ODAocjgpLHIxMCAjIyBFOwlcCiAJeG9ybAktNDgocjkpLHI1ICMjIEU7CVwKIAl4b3JsCS00NChyOSkscjEgIyMgRTsJXAogCXhvcmwJLTQwKHI5KSxyNiAjIyBFOwlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jCmluZGV4IDcxZjQ1NzguLjQ5YWU5ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jCkBAIC01LDE3ICs1LDI5IEBACiAKICNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CiAKLWFzbWxpbmthZ2Ugdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOwotYXNtbGlua2FnZSB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7CisKK3ZvaWQgY3J5cHRvX2Flc19lbmNyeXB0X3g4NihzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlhZXNfZW5jX2JsayhjdHgsIGRzdCwgc3JjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hZXNfZW5jcnlwdF94ODYpOworCit2b2lkIGNyeXB0b19hZXNfZGVjcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJYWVzX2RlY19ibGsoY3R4LCBkc3QsIHNyYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KTsKIAogc3RhdGljIHZvaWQgYWVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKLQlhZXNfZW5jX2Jsayh0Zm0sIGRzdCwgc3JjKTsKKwlhZXNfZW5jX2JsayhjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIHNyYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFlc19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0JYWVzX2RlY19ibGsodGZtLCBkc3QsIHNyYyk7CisJYWVzX2RlY19ibGsoY3J5cHRvX3RmbV9jdHgodGZtKSwgZHN0LCBzcmMpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJhOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TCkBAIC0wLDAgKzEsODk2IEBACisvKgorICogSW1wbGVtZW50IEFFUyBhbGdvcml0aG0gaW4gSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucy4KKyAqCisgKiBUaGUgd2hpdGUgcGFwZXIgb2YgQUVTLU5JIGluc3RydWN0aW9ucyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgorICogICBodHRwOi8vc29mdHdhcmVjb21tdW5pdHkuaW50ZWwuY29tL2lzbi9kb3dubG9hZHMvaW50ZWxhdngvQUVTLUluc3RydWN0aW9ucy1TZXRfV1AucGRmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBJbnRlbCBDb3JwLgorICogICAgQXV0aG9yOiBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgVmlub2RoIEdvcGFsIDx2aW5vZGguZ29wYWxAaW50ZWwuY29tPgorICogICAgICAgICAgICBLYWhyYW1hbiBBa2RlbWlyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisudGV4dAorCisjZGVmaW5lIFNUQVRFMQkleG1tMAorI2RlZmluZSBTVEFURTIJJXhtbTQKKyNkZWZpbmUgU1RBVEUzCSV4bW01CisjZGVmaW5lIFNUQVRFNAkleG1tNgorI2RlZmluZSBTVEFURQlTVEFURTEKKyNkZWZpbmUgSU4xCSV4bW0xCisjZGVmaW5lIElOMgkleG1tNworI2RlZmluZSBJTjMJJXhtbTgKKyNkZWZpbmUgSU40CSV4bW05CisjZGVmaW5lIElOCUlOMQorI2RlZmluZSBLRVkJJXhtbTIKKyNkZWZpbmUgSVYJJXhtbTMKKworI2RlZmluZSBLRVlQCSVyZGkKKyNkZWZpbmUgT1VUUAklcnNpCisjZGVmaW5lIElOUAklcmR4CisjZGVmaW5lIExFTgklcmN4CisjZGVmaW5lIElWUAklcjgKKyNkZWZpbmUgS0xFTgklcjlkCisjZGVmaW5lIFQxCSVyMTAKKyNkZWZpbmUgVEtFWVAJVDEKKyNkZWZpbmUgVDIJJXIxMQorCitfa2V5X2V4cGFuc2lvbl8xMjg6Citfa2V5X2V4cGFuc2lvbl8yNTZhOgorCXBzaHVmZCAkMGIxMTExMTExMSwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlweG9yICV4bW0xLCAleG1tMAorCW1vdmFwcyAleG1tMCwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJcmV0CisKK19rZXlfZXhwYW5zaW9uXzE5MmE6CisJcHNodWZkICQwYjAxMDEwMTAxLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXB4b3IgJXhtbTEsICV4bW0wCisKKwltb3ZhcHMgJXhtbTIsICV4bW01CisJbW92YXBzICV4bW0yLCAleG1tNgorCXBzbGxkcSAkNCwgJXhtbTUKKwlwc2h1ZmQgJDBiMTExMTExMTEsICV4bW0wLCAleG1tMworCXB4b3IgJXhtbTMsICV4bW0yCisJcHhvciAleG1tNSwgJXhtbTIKKworCW1vdmFwcyAleG1tMCwgJXhtbTEKKwlzaHVmcHMgJDBiMDEwMDAxMDAsICV4bW0wLCAleG1tNgorCW1vdmFwcyAleG1tNiwgKCVyY3gpCisJc2h1ZnBzICQwYjAxMDAxMTEwLCAleG1tMiwgJXhtbTEKKwltb3ZhcHMgJXhtbTEsIDE2KCVyY3gpCisJYWRkICQweDIwLCAlcmN4CisJcmV0CisKK19rZXlfZXhwYW5zaW9uXzE5MmI6CisJcHNodWZkICQwYjAxMDEwMTAxLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXB4b3IgJXhtbTEsICV4bW0wCisKKwltb3ZhcHMgJXhtbTIsICV4bW01CisJcHNsbGRxICQ0LCAleG1tNQorCXBzaHVmZCAkMGIxMTExMTExMSwgJXhtbTAsICV4bW0zCisJcHhvciAleG1tMywgJXhtbTIKKwlweG9yICV4bW01LCAleG1tMgorCisJbW92YXBzICV4bW0wLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwlyZXQKKworX2tleV9leHBhbnNpb25fMjU2YjoKKwlwc2h1ZmQgJDBiMTAxMDEwMTAsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTIsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTIKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0yLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0yCisJcHhvciAleG1tMSwgJXhtbTIKKwltb3ZhcHMgJXhtbTIsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCXJldAorCisvKgorICogaW50IGFlc25pX3NldF9rZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisgKiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKKyAqLworRU5UUlkoYWVzbmlfc2V0X2tleSkKKwltb3Z1cHMgKCVyc2kpLCAleG1tMAkJIyB1c2VyIGtleSAoZmlyc3QgMTYgYnl0ZXMpCisJbW92YXBzICV4bW0wLCAoJXJkaSkKKwlsZWEgMHgxMCglcmRpKSwgJXJjeAkJIyBrZXkgYWRkcgorCW1vdmwgJWVkeCwgNDgwKCVyZGkpCisJcHhvciAleG1tNCwgJXhtbTQJCSMgeG1tNCBpcyBhc3N1bWVkIDAgaW4gX2tleV9leHBhbnNpb25feAorCWNtcCAkMjQsICVkbAorCWpiIC5MZW5jX2tleTEyOAorCWplIC5MZW5jX2tleTE5MgorCW1vdnVwcyAweDEwKCVyc2kpLCAleG1tMgkjIG90aGVyIHVzZXIga2V5CisJbW92YXBzICV4bW0yLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMiwgJXhtbTEJIyByb3VuZCAxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMiwgJXhtbTEJIyByb3VuZCAyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMiwgJXhtbTEJIyByb3VuZCAzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMiwgJXhtbTEJIyByb3VuZCA0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA2CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NDAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDcKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDQwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJam1wIC5MZGVjX2tleQorLkxlbmNfa2V5MTkyOgorCW1vdnEgMHgxMCglcnNpKSwgJXhtbTIJCSMgb3RoZXIgdXNlciBrZXkKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMiwgJXhtbTEJIyByb3VuZCAxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0yLCAleG1tMQkjIHJvdW5kIDIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTIsICV4bW0xCSMgcm91bmQgMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMiwgJXhtbTEJIyByb3VuZCA0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA1CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA2CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA3CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHg0MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA4CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHg4MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCWptcCAuTGRlY19rZXkKKy5MZW5jX2tleTEyODoKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMCwgJXhtbTEJIyByb3VuZCAxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTAsICV4bW0xCSMgcm91bmQgMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0wLCAleG1tMQkjIHJvdW5kIDMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMCwgJXhtbTEJIyByb3VuZCA0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA3CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHg0MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4ODAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDgKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDgwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxYiwgJXhtbTAsICV4bW0xCSMgcm91bmQgOQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MWIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDM2LCAleG1tMCwgJXhtbTEJIyByb3VuZCAxMAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MzYKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorLkxkZWNfa2V5OgorCXN1YiAkMHgxMCwgJXJjeAorCW1vdmFwcyAoJXJkaSksICV4bW0wCisJbW92YXBzICglcmN4KSwgJXhtbTEKKwltb3ZhcHMgJXhtbTAsIDI0MCglcmN4KQorCW1vdmFwcyAleG1tMSwgMjQwKCVyZGkpCisJYWRkICQweDEwLCAlcmRpCisJbGVhIDI0MC0xNiglcmN4KSwgJXJzaQorLmFsaWduIDQKKy5MZGVjX2tleV9sb29wOgorCW1vdmFwcyAoJXJkaSksICV4bW0wCisJIyBhZXNpbWMgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYiwgMHhjOAorCW1vdmFwcyAleG1tMSwgKCVyc2kpCisJYWRkICQweDEwLCAlcmRpCisJc3ViICQweDEwLCAlcnNpCisJY21wICVyY3gsICVyZGkKKwlqYiAuTGRlY19rZXlfbG9vcAorCXhvciAlcmF4LCAlcmF4CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKKyAqLworRU5UUlkoYWVzbmlfZW5jKQorCW1vdmwgNDgwKEtFWVApLCBLTEVOCQkjIGtleSBsZW5ndGgKKwltb3Z1cHMgKElOUCksIFNUQVRFCQkjIGlucHV0CisJY2FsbCBfYWVzbmlfZW5jMQorCW1vdnVwcyBTVEFURSwgKE9VVFApCQkjIG91dHB1dAorCXJldAorCisvKgorICogX2Flc25pX2VuYzE6CQlpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCXJvdW5kIGNvdW50CisgKglTVEFURToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICogb3V0cHV0OgorICoJU1RBVEU6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2VuYzE6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURQkJIyByb3VuZCAwCisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTGVuYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTGVuYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisuYWxpZ24gNAorLkxlbmMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorLmFsaWduIDQKKy5MZW5jMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzIKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9lbmM0OglpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCXJvdW5kIGNvdW50CisgKglTVEFURTE6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIG91dHB1dDoKKyAqCVNUQVRFMToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZW5jNDoKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFMQkJIyByb3VuZCAwCisJcHhvciBLRVksIFNUQVRFMgorCXB4b3IgS0VZLCBTVEFURTMKKwlweG9yIEtFWSwgU1RBVEU0CisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTDRlbmMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkw0ZW5jMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorIy5hbGlnbiA0CisuTDRlbmMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisjLmFsaWduIDQKKy5MNGVuYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTEJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhjMgorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZTIKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGVhCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhmMgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9kZWMgKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQorICovCitFTlRSWShhZXNuaV9kZWMpCisJbW92IDQ4MChLRVlQKSwgS0xFTgkJIyBrZXkgbGVuZ3RoCisJYWRkICQyNDAsIEtFWVAKKwltb3Z1cHMgKElOUCksIFNUQVRFCQkjIGlucHV0CisJY2FsbCBfYWVzbmlfZGVjMQorCW1vdnVwcyBTVEFURSwgKE9VVFApCQkjb3V0cHV0CisJcmV0CisKKy8qCisgKiBfYWVzbmlfZGVjMToJCWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJa2V5IGxlbmd0aAorICoJU1RBVEU6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqIG91dHB1dDoKKyAqCVNUQVRFOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9kZWMxOgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUJCSMgcm91bmQgMAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkxkZWMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkxkZWMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorLmFsaWduIDQKKy5MZGVjMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKy5hbGlnbiA0CisuTGRlYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURQkJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhjMgorCXJldAorCisvKgorICogX2Flc25pX2RlYzQ6CWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJa2V5IGxlbmd0aAorICoJU1RBVEUxOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBvdXRwdXQ6CisgKglTVEFURTE6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2RlYzQ6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURTEJCSMgcm91bmQgMAorCXB4b3IgS0VZLCBTVEFURTIKKwlweG9yIEtFWSwgU1RBVEUzCisJcHhvciBLRVksIFNUQVRFNAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkw0ZGVjMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MNGRlYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKy5hbGlnbiA0CisuTDRkZWMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisuYWxpZ24gNAorLkw0ZGVjMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFMQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGMyCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhlMgorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZWEKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGYyCisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2VjYl9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbikKKyAqLworRU5UUlkoYWVzbmlfZWNiX2VuYykKKwl0ZXN0IExFTiwgTEVOCQkjIGNoZWNrIGxlbmd0aAorCWp6IC5MZWNiX2VuY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZW5jX3JldAorCWNtcCAkNjQsIExFTgorCWpiIC5MZWNiX2VuY19sb29wMQorLmFsaWduIDQKKy5MZWNiX2VuY19sb29wNDoKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCW1vdnVwcyAweDEwKElOUCksIFNUQVRFMgorCW1vdnVwcyAweDIwKElOUCksIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIFNUQVRFNAorCWNhbGwgX2Flc25pX2VuYzQKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCisJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQorCW1vdnVwcyBTVEFURTQsIDB4MzAoT1VUUCkKKwlzdWIgJDY0LCBMRU4KKwlhZGQgJDY0LCBJTlAKKwlhZGQgJDY0LCBPVVRQCisJY21wICQ2NCwgTEVOCisJamdlIC5MZWNiX2VuY19sb29wNAorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2VuY19yZXQKKy5hbGlnbiA0CisuTGVjYl9lbmNfbG9vcDE6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwljYWxsIF9hZXNuaV9lbmMxCisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGVjYl9lbmNfbG9vcDEKKy5MZWNiX2VuY19yZXQ6CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2VjYl9kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbik7CisgKi8KK0VOVFJZKGFlc25pX2VjYl9kZWMpCisJdGVzdCBMRU4sIExFTgorCWp6IC5MZWNiX2RlY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJYWRkICQyNDAsIEtFWVAKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9kZWNfcmV0CisJY21wICQ2NCwgTEVOCisJamIgLkxlY2JfZGVjX2xvb3AxCisuYWxpZ24gNAorLkxlY2JfZGVjX2xvb3A0OgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJbW92dXBzIDB4MTAoSU5QKSwgU1RBVEUyCisJbW92dXBzIDB4MjAoSU5QKSwgU1RBVEUzCisJbW92dXBzIDB4MzAoSU5QKSwgU1RBVEU0CisJY2FsbCBfYWVzbmlfZGVjNAorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCW1vdnVwcyBTVEFURTIsIDB4MTAoT1VUUCkKKwltb3Z1cHMgU1RBVEUzLCAweDIwKE9VVFApCisJbW92dXBzIFNUQVRFNCwgMHgzMChPVVRQKQorCXN1YiAkNjQsIExFTgorCWFkZCAkNjQsIElOUAorCWFkZCAkNjQsIE9VVFAKKwljbXAgJDY0LCBMRU4KKwlqZ2UgLkxlY2JfZGVjX2xvb3A0CisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZGVjX3JldAorLmFsaWduIDQKKy5MZWNiX2RlY19sb29wMToKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCWNhbGwgX2Flc25pX2RlYzEKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MZWNiX2RlY19sb29wMQorLkxlY2JfZGVjX3JldDoKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfY2JjX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuLCB1OCAqaXYpCisgKi8KK0VOVFJZKGFlc25pX2NiY19lbmMpCisJY21wICQxNiwgTEVOCisJamIgLkxjYmNfZW5jX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwltb3Z1cHMgKElWUCksIFNUQVRFCSMgbG9hZCBpdiBhcyBpbml0aWFsIHN0YXRlCisuYWxpZ24gNAorLkxjYmNfZW5jX2xvb3A6CisJbW92dXBzIChJTlApLCBJTgkjIGxvYWQgaW5wdXQKKwlweG9yIElOLCBTVEFURQorCWNhbGwgX2Flc25pX2VuYzEKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQkjIHN0b3JlIG91dHB1dAorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxjYmNfZW5jX2xvb3AKKwltb3Z1cHMgU1RBVEUsIChJVlApCisuTGNiY19lbmNfcmV0OgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9jYmNfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4sIHU4ICppdikKKyAqLworRU5UUlkoYWVzbmlfY2JjX2RlYykKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGNiY19kZWNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCWFkZCAkMjQwLCBLRVlQCisJbW92dXBzIChJVlApLCBJVgorCWNtcCAkNjQsIExFTgorCWpiIC5MY2JjX2RlY19sb29wMQorLmFsaWduIDQKKy5MY2JjX2RlY19sb29wNDoKKwltb3Z1cHMgKElOUCksIElOMQorCW1vdmFwcyBJTjEsIFNUQVRFMQorCW1vdnVwcyAweDEwKElOUCksIElOMgorCW1vdmFwcyBJTjIsIFNUQVRFMgorCW1vdnVwcyAweDIwKElOUCksIElOMworCW1vdmFwcyBJTjMsIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIElONAorCW1vdmFwcyBJTjQsIFNUQVRFNAorCWNhbGwgX2Flc25pX2RlYzQKKwlweG9yIElWLCBTVEFURTEKKwlweG9yIElOMSwgU1RBVEUyCisJcHhvciBJTjIsIFNUQVRFMworCXB4b3IgSU4zLCBTVEFURTQKKwltb3ZhcHMgSU40LCBJVgorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCW1vdnVwcyBTVEFURTIsIDB4MTAoT1VUUCkKKwltb3Z1cHMgU1RBVEUzLCAweDIwKE9VVFApCisJbW92dXBzIFNUQVRFNCwgMHgzMChPVVRQKQorCXN1YiAkNjQsIExFTgorCWFkZCAkNjQsIElOUAorCWFkZCAkNjQsIE9VVFAKKwljbXAgJDY0LCBMRU4KKwlqZ2UgLkxjYmNfZGVjX2xvb3A0CisJY21wICQxNiwgTEVOCisJamIgLkxjYmNfZGVjX3JldAorLmFsaWduIDQKKy5MY2JjX2RlY19sb29wMToKKwltb3Z1cHMgKElOUCksIElOCisJbW92YXBzIElOLCBTVEFURQorCWNhbGwgX2Flc25pX2RlYzEKKwlweG9yIElWLCBTVEFURQorCW1vdnVwcyBTVEFURSwgKE9VVFApCisJbW92YXBzIElOLCBJVgorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxjYmNfZGVjX2xvb3AxCisJbW92dXBzIElWLCAoSVZQKQorLkxjYmNfZGVjX3JldDoKKwlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYWYwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC0wLDAgKzEsNDYxIEBACisvKgorICogU3VwcG9ydCBmb3IgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucy4gVGhpcyBmaWxlIGNvbnRhaW5zIGdsdWUKKyAqIGNvZGUsIHRoZSByZWFsIEFFUyBpbXBsZW1lbnRhdGlvbiBpcyBpbiBpbnRlbC1hZXNfYXNtLlMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBJbnRlbCBDb3JwLgorICogICAgQXV0aG9yOiBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdGQuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9hZXMuaD4KKworc3RydWN0IGFzeW5jX2Flc19jdHggeworCXN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbTsKK307CisKKyNkZWZpbmUgQUVTTklfQUxJR04JMTYKKyNkZWZpbmUgQUVTX0JMT0NLX01BU0sJKH4oQUVTX0JMT0NLX1NJWkUtMSkpCisKK2FzbWxpbmthZ2UgaW50IGFlc25pX3NldF9rZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisJCQkgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2VjYl9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2VjYl9kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfY2JjX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKKworc3RhdGljIGlubGluZSBpbnQga2VybmVsX2ZwdV91c2luZyh2b2lkKQoreworCWlmIChpbl9pbnRlcnJ1cHQoKSAmJiAhKHJlYWRfY3IwKCkgJiBYODZfQ1IwX1RTKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19hZXNfY3R4ICphZXNfY3R4KHZvaWQgKnJhd19jdHgpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmF3X2N0eDsKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gQUVTTklfQUxJR047CisKKwlpZiAoYWxpZ24gPD0gY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpCisJCWFsaWduID0gMTsKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqKUFMSUdOKGFkZHIsIGFsaWduKTsKK30KKworc3RhdGljIGludCBhZXNfc2V0X2tleV9jb21tb24oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdm9pZCAqcmF3X2N0eCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbl9rZXksIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChyYXdfY3R4KTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOworCWludCBlcnI7CisKKwlpZiAoa2V5X2xlbiAhPSBBRVNfS0VZU0laRV8xMjggJiYga2V5X2xlbiAhPSBBRVNfS0VZU0laRV8xOTIgJiYKKwkgICAga2V5X2xlbiAhPSBBRVNfS0VZU0laRV8yNTYpIHsKKwkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKQorCQllcnIgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWVyciA9IGFlc25pX3NldF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXJldHVybiBhZXNfc2V0X2tleV9jb21tb24odGZtLCBjcnlwdG9fdGZtX2N0eCh0Zm0pLCBpbl9rZXksIGtleV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJCWNyeXB0b19hZXNfZW5jcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CisJZWxzZSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJYWVzbmlfZW5jKGN0eCwgZHN0LCBzcmMpOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KK30KKworc3RhdGljIHZvaWQgYWVzX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKQorCQljcnlwdG9fYWVzX2RlY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWFlc25pX2RlYyhjdHgsIGRzdCwgc3JjKTsKKwkJa2VybmVsX2ZwdV9lbmQoKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNuaV9hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJhZXMiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDMwMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2Flc19jdHgpK0FFU05JX0FMSUdOLTEsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYWVzbmlfYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UJPSB7CisJCS5jaXBoZXIJPSB7CisJCQkuY2lhX21pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5jaWFfbWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLmNpYV9zZXRrZXkJCT0gYWVzX3NldF9rZXksCisJCQkuY2lhX2VuY3J5cHQJCT0gYWVzX2VuY3J5cHQsCisJCQkuY2lhX2RlY3J5cHQJCT0gYWVzX2RlY3J5cHQKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgZWNiX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2VjYl9lbmMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLKTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZWNiX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2VjYl9kZWMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLKTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBibGtfZWNiX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gIl9fZWNiLWFlcy1hZXNuaSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGNyeXB0b19hZXNfY3R4KStBRVNOSV9BTElHTi0xLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGJsa19lY2JfYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UgPSB7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGVjYl9lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBlY2JfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBjYmNfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfY2JjX2VuYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0ssIHdhbGsuaXYpOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYmNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfY2JjX2RlYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0ssIHdhbGsuaXYpOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGJsa19jYmNfYWxnID0geworCS5jcmFfbmFtZQkJPSAiX19jYmMtYWVzLWFlc25pIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gIl9fZHJpdmVyLWNiYy1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2Flc19jdHgpK0FFU05JX0FMSUdOLTEsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYmxrX2NiY19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdSA9IHsKKwkJLmJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBhZXNfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gY2JjX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGNiY19kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IGFibGtfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKwkJCXVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKworCXJldHVybiBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoJmN0eC0+Y3J5cHRkX3RmbS0+YmFzZSwga2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIGludCBhYmxrX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkgeworCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KKwkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oY3J5cHRkX3JlcSwgJmN0eC0+Y3J5cHRkX3RmbS0+YmFzZSk7CisJCXJldHVybiBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KGNyeXB0ZF9yZXEpOworCX0gZWxzZSB7CisJCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjOworCQlkZXNjLnRmbSA9IGNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisJCWRlc2MuaW5mbyA9IHJlcS0+aW5mbzsKKwkJZGVzYy5mbGFncyA9IDA7CisJCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLnRmbSktPmVuY3J5cHQoCisJCQkmZGVzYywgcmVxLT5kc3QsIHJlcS0+c3JjLCByZXEtPm5ieXRlcyk7CisJfQorfQorCitzdGF0aWMgaW50IGFibGtfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKSB7CisJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQorCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOworCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShjcnlwdGRfcmVxLCAmY3R4LT5jcnlwdGRfdGZtLT5iYXNlKTsKKwkJcmV0dXJuIGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQoY3J5cHRkX3JlcSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisJCWRlc2MudGZtID0gY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoY3R4LT5jcnlwdGRfdGZtKTsKKwkJZGVzYy5pbmZvID0gcmVxLT5pbmZvOworCQlkZXNjLmZsYWdzID0gMDsKKwkJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfY3J0KGRlc2MudGZtKS0+ZGVjcnlwdCgKKwkJCSZkZXNjLCByZXEtPmRzdCwgcmVxLT5zcmMsIHJlcS0+bmJ5dGVzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFibGtfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihjdHgtPmNyeXB0ZF90Zm0pOworfQorCitzdGF0aWMgdm9pZCBhYmxrX2luaXRfY29tbW9uKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkgICAgIHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbSkKK3sKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWN0eC0+Y3J5cHRkX3RmbSA9IGNyeXB0ZF90Zm07CisJdGZtLT5jcnRfYWJsa2NpcGhlci5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QpICsKKwkJY3J5cHRvX2FibGtjaXBoZXJfcmVxc2l6ZSgmY3J5cHRkX3RmbS0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgYWJsa19lY2JfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbTsKKworCWNyeXB0ZF90Zm0gPSBjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcigiX19kcml2ZXItZWNiLWFlcy1hZXNuaSIsIDAsIDApOworCWlmIChJU19FUlIoY3J5cHRkX3RmbSkpCisJCXJldHVybiBQVFJfRVJSKGNyeXB0ZF90Zm0pOworCWFibGtfaW5pdF9jb21tb24odGZtLCBjcnlwdGRfdGZtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFibGtfZWNiX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gImVjYihhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gImVjYi1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gNDAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVJ8Q1JZUFRPX0FMR19BU1lOQywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBhc3luY19hZXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYWJsa19lY2JfYWxnLmNyYV9saXN0KSwKKwkuY3JhX2luaXQJCT0gYWJsa19lY2JfaW5pdCwKKwkuY3JhX2V4aXQJCT0gYWJsa19leGl0LAorCS5jcmFfdSA9IHsKKwkJLmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWJsa19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBhYmxrX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGFibGtfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBhYmxrX2NiY19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOworCisJY3J5cHRkX3RmbSA9IGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKCJfX2RyaXZlci1jYmMtYWVzLWFlc25pIiwgMCwgMCk7CisJaWYgKElTX0VSUihjcnlwdGRfdGZtKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J5cHRkX3RmbSk7CisJYWJsa19pbml0X2NvbW1vbih0Zm0sIGNyeXB0ZF90Zm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWJsa19jYmNfYWxnID0geworCS5jcmFfbmFtZQkJPSAiY2JjKGFlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiY2JjLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSA0MDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUnxDUllQVE9fQUxHX0FTWU5DLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGFzeW5jX2Flc19jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChhYmxrX2NiY19hbGcuY3JhX2xpc3QpLAorCS5jcmFfaW5pdAkJPSBhYmxrX2NiY19pbml0LAorCS5jcmFfZXhpdAkJPSBhYmxrX2V4aXQsCisJLmNyYV91ID0geworCQkuYWJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWJsa19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBhYmxrX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGFibGtfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWVzbmlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlpZiAoIWNwdV9oYXNfYWVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBhcmUgbm90IGRldGVjdGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZykpKQorCQlnb3RvIGFlc19lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZykpKQorCQlnb3RvIGJsa19lY2JfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpKSkKKwkJZ290byBibGtfY2JjX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZykpKQorCQlnb3RvIGFibGtfZWNiX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfY2JjX2FsZykpKQorCQlnb3RvIGFibGtfY2JjX2VycjsKKworCXJldHVybiBlcnI7CisKK2FibGtfY2JjX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZyk7CithYmxrX2VjYl9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZyk7CitibGtfY2JjX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKTsKK2Jsa19lY2JfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKTsKK2Flc19lcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFlc25pX2V4aXQodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfY2JjX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKTsKK30KKworbW9kdWxlX2luaXQoYWVzbmlfaW5pdCk7Cittb2R1bGVfZXhpdChhZXNuaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWpuZGFlbCAoQUVTKSBDaXBoZXIgQWxnb3JpdGhtLCBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zIG9wdGltaXplZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJhZXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9zaWduYWwuYyBiL2FyY2gveDg2L2lhMzIvaWEzMl9zaWduYWwuYwppbmRleCA5ZGFiZDAwLi41ODhhN2FhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJfc2lnbmFsLmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX3NpZ25hbC5jCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSA8YXNtL3NpZ2ZyYW1lLmg+CiAjaW5jbHVkZSA8YXNtL3N5c19pYTMyLmg+CiAKLSNkZWZpbmUgREVCVUdfU0lHIDAKLQogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAogI2RlZmluZSBGSVhfRUZMQUdTCShYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19PRiB8IFwKQEAgLTQ2LDc4ICs0NCw4MyBAQAogCiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIzMihjb21wYXRfc2lnaW5mb190IF9fdXNlciAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgc2l6ZW9mKGNvbXBhdF9zaWdpbmZvX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdAotCSAgIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS4KLQkgICBJdCBzaG91bGQgbmV2ZXIgY29weSBhbnkgcGFkIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlCi0JICAgdG8gYXZvaWQgc2VjdXJpdHkgbGVha3MsIGJ1dCBtdXN0IGNvcHkgdGhlIGdlbmVyaWMKLQkgICAzIGludHMgcGx1cyB0aGUgcmVsZXZhbnQgdW5pb24gbWVtYmVyLiAgKi8KLQllcnIgPSBfX3B1dF91c2VyKGZyb20tPnNpX3NpZ25vLCAmdG8tPnNpX3NpZ25vKTsKLQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9lcnJubywgJnRvLT5zaV9lcnJubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHNob3J0KWZyb20tPnNpX2NvZGUsICZ0by0+c2lfY29kZSk7CisJcHV0X3VzZXJfdHJ5IHsKKwkJLyogSWYgeW91IGNoYW5nZSBzaWdpbmZvX3Qgc3RydWN0dXJlLCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQKKwkJICAgdGhpcyBjb2RlIGlzIGZpeGVkIGFjY29yZGluZ2x5LgorCQkgICBJdCBzaG91bGQgbmV2ZXIgY29weSBhbnkgcGFkIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlCisJCSAgIHRvIGF2b2lkIHNlY3VyaXR5IGxlYWtzLCBidXQgbXVzdCBjb3B5IHRoZSBnZW5lcmljCisJCSAgIDMgaW50cyBwbHVzIHRoZSByZWxldmFudCB1bmlvbiBtZW1iZXIuICAqLworCQlwdXRfdXNlcl9leChmcm9tLT5zaV9zaWdubywgJnRvLT5zaV9zaWdubyk7CisJCXB1dF91c2VyX2V4KGZyb20tPnNpX2Vycm5vLCAmdG8tPnNpX2Vycm5vKTsKKwkJcHV0X3VzZXJfZXgoKHNob3J0KWZyb20tPnNpX2NvZGUsICZ0by0+c2lfY29kZSk7CiAKLQlpZiAoZnJvbS0+c2lfY29kZSA8IDApIHsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwotCQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KGZyb20tPnNpX3B0ciksICZ0by0+c2lfcHRyKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBGaXJzdCAzMmJpdHMgb2YgdW5pb25zIGFyZSBhbHdheXMgcHJlc2VudDoKLQkJICogc2lfcGlkID09PSBzaV9iYW5kID09PSBzaV90aWQgPT09IHNpX2FkZHIoTFMgaGFsZikKLQkJICovCi0JCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPl9zaWZpZWxkcy5fcGFkWzBdLAotCQkJCSAgJnRvLT5fc2lmaWVsZHMuX3BhZFswXSk7Ci0JCXN3aXRjaCAoZnJvbS0+c2lfY29kZSA+PiAxNikgewotCQljYXNlIF9fU0lfRkFVTFQgPj4gMTY6Ci0JCQlicmVhazsKLQkJY2FzZSBfX1NJX0NITEQgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91dGltZSwgJnRvLT5zaV91dGltZSk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9zdGltZSwgJnRvLT5zaV9zdGltZSk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9zdGF0dXMsICZ0by0+c2lfc3RhdHVzKTsKLQkJCS8qIEZBTEwgVEhST1VHSCAqLwotCQlkZWZhdWx0OgotCQljYXNlIF9fU0lfS0lMTCA+PiAxNjoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgX19TSV9QT0xMID4+IDE2OgotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfZmQsICZ0by0+c2lfZmQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgX19TSV9USU1FUiA+PiAxNjoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX292ZXJydW4sICZ0by0+c2lfb3ZlcnJ1bik7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KGZyb20tPnNpX3B0ciksCi0JCQkJCSAgJnRvLT5zaV9wdHIpOwotCQkJYnJlYWs7Ci0JCQkgLyogVGhpcyBpcyBub3QgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgYXMgb2Ygbm93LiAgKi8KLQkJY2FzZSBfX1NJX1JUID4+IDE2OgotCQljYXNlIF9fU0lfTUVTR1EgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91aWQsICZ0by0+c2lfdWlkKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2ludCwgJnRvLT5zaV9pbnQpOwotCQkJYnJlYWs7CisJCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkgeworCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7CisJCQlwdXRfdXNlcl9leChmcm9tLT5zaV91aWQsICZ0by0+c2lfdWlkKTsKKwkJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoZnJvbS0+c2lfcHRyKSwgJnRvLT5zaV9wdHIpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZpcnN0IDMyYml0cyBvZiB1bmlvbnMgYXJlIGFsd2F5cyBwcmVzZW50OgorCQkJICogc2lfcGlkID09PSBzaV9iYW5kID09PSBzaV90aWQgPT09IHNpX2FkZHIoTFMgaGFsZikKKwkJCSAqLworCQkJcHV0X3VzZXJfZXgoZnJvbS0+X3NpZmllbGRzLl9wYWRbMF0sCisJCQkJCSAgJnRvLT5fc2lmaWVsZHMuX3BhZFswXSk7CisJCQlzd2l0Y2ggKGZyb20tPnNpX2NvZGUgPj4gMTYpIHsKKwkJCWNhc2UgX19TSV9GQVVMVCA+PiAxNjoKKwkJCQlicmVhazsKKwkJCWNhc2UgX19TSV9DSExEID4+IDE2OgorCQkJCXB1dF91c2VyX2V4KGZyb20tPnNpX3V0aW1lLCAmdG8tPnNpX3V0aW1lKTsKKwkJCQlwdXRfdXNlcl9leChmcm9tLT5zaV9zdGltZSwgJnRvLT5zaV9zdGltZSk7CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfc3RhdHVzLCAmdG8tPnNpX3N0YXR1cyk7CisJCQkJLyogRkFMTCBUSFJPVUdIICovCisJCQlkZWZhdWx0OgorCQkJY2FzZSBfX1NJX0tJTEwgPj4gMTY6CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIF9fU0lfUE9MTCA+PiAxNjoKKwkJCQlwdXRfdXNlcl9leChmcm9tLT5zaV9mZCwgJnRvLT5zaV9mZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIF9fU0lfVElNRVIgPj4gMTY6CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfb3ZlcnJ1biwgJnRvLT5zaV9vdmVycnVuKTsKKwkJCQlwdXRfdXNlcl9leChwdHJfdG9fY29tcGF0KGZyb20tPnNpX3B0ciksCisJCQkJCSAgICAmdG8tPnNpX3B0cik7CisJCQkJYnJlYWs7CisJCQkJIC8qIFRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSB0aGUga2VybmVsIGFzIG9mIG5vdy4gICovCisJCQljYXNlIF9fU0lfUlQgPj4gMTY6CisJCQljYXNlIF9fU0lfTUVTR1EgPj4gMTY6CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfaW50LCAmdG8tPnNpX2ludCk7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KLQl9CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOworCiAJcmV0dXJuIGVycjsKIH0KIAogaW50IGNvcHlfc2lnaW5mb19mcm9tX3VzZXIzMihzaWdpbmZvX3QgKnRvLCBjb21wYXRfc2lnaW5mb190IF9fdXNlciAqZnJvbSkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXUzMiBwdHIzMjsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBzaXplb2YoY29tcGF0X3NpZ2luZm9fdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IF9fZ2V0X3VzZXIodG8tPnNpX3NpZ25vLCAmZnJvbS0+c2lfc2lnbm8pOwotCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9lcnJubywgJmZyb20tPnNpX2Vycm5vKTsKLQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfY29kZSwgJmZyb20tPnNpX2NvZGUpOworCWdldF91c2VyX3RyeSB7CisJCWdldF91c2VyX2V4KHRvLT5zaV9zaWdubywgJmZyb20tPnNpX3NpZ25vKTsKKwkJZ2V0X3VzZXJfZXgodG8tPnNpX2Vycm5vLCAmZnJvbS0+c2lfZXJybm8pOworCQlnZXRfdXNlcl9leCh0by0+c2lfY29kZSwgJmZyb20tPnNpX2NvZGUpOwogCi0JZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3BpZCwgJmZyb20tPnNpX3BpZCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3VpZCwgJmZyb20tPnNpX3VpZCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIocHRyMzIsICZmcm9tLT5zaV9wdHIpOwotCXRvLT5zaV9wdHIgPSBjb21wYXRfcHRyKHB0cjMyKTsKKwkJZ2V0X3VzZXJfZXgodG8tPnNpX3BpZCwgJmZyb20tPnNpX3BpZCk7CisJCWdldF91c2VyX2V4KHRvLT5zaV91aWQsICZmcm9tLT5zaV91aWQpOworCQlnZXRfdXNlcl9leChwdHIzMiwgJmZyb20tPnNpX3B0cik7CisJCXRvLT5zaV9wdHIgPSBjb21wYXRfcHRyKHB0cjMyKTsKKwl9IGdldF91c2VyX2NhdGNoKGVycik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTQyLDE3ICsxNDUsMjMgQEAKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YWNrX3QgdXNzLCB1b3NzOwotCWludCByZXQ7CisJaW50IHJldCwgZXJyID0gMDsKIAltbV9zZWdtZW50X3Qgc2VnOwogCiAJaWYgKHVzc19wdHIpIHsKIAkJdTMyIHB0cjsKIAogCQltZW1zZXQoJnVzcywgMCwgc2l6ZW9mKHN0YWNrX3QpKTsKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzc19wdHIsIHNpemVvZihzdGFja19pYTMyX3QpKSB8fAotCQkJICAgIF9fZ2V0X3VzZXIocHRyLCAmdXNzX3B0ci0+c3Nfc3ApIHx8Ci0JCQkgICAgX19nZXRfdXNlcih1c3Muc3NfZmxhZ3MsICZ1c3NfcHRyLT5zc19mbGFncykgfHwKLQkJCSAgICBfX2dldF91c2VyKHVzcy5zc19zaXplLCAmdXNzX3B0ci0+c3Nfc2l6ZSkpCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c3NfcHRyLCBzaXplb2Yoc3RhY2tfaWEzMl90KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlnZXRfdXNlcl90cnkgeworCQkJZ2V0X3VzZXJfZXgocHRyLCAmdXNzX3B0ci0+c3Nfc3ApOworCQkJZ2V0X3VzZXJfZXgodXNzLnNzX2ZsYWdzLCAmdXNzX3B0ci0+c3NfZmxhZ3MpOworCQkJZ2V0X3VzZXJfZXgodXNzLnNzX3NpemUsICZ1c3NfcHRyLT5zc19zaXplKTsKKwkJfSBnZXRfdXNlcl9jYXRjaChlcnIpOworCisJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJdXNzLnNzX3NwID0gY29tcGF0X3B0cihwdHIpOwogCX0KQEAgLTE2MSwxMCArMTcwLDE2IEBACiAJcmV0ID0gZG9fc2lnYWx0c3RhY2sodXNzX3B0ciA/ICZ1c3MgOiBOVUxMLCAmdW9zcywgcmVncy0+c3ApOwogCXNldF9mcyhzZWcpOwogCWlmIChyZXQgPj0gMCAmJiB1b3NzX3B0cikgIHsKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1b3NzX3B0ciwgc2l6ZW9mKHN0YWNrX2lhMzJfdCkpIHx8Ci0JCSAgICBfX3B1dF91c2VyKHB0cl90b19jb21wYXQodW9zcy5zc19zcCksICZ1b3NzX3B0ci0+c3Nfc3ApIHx8Ci0JCSAgICBfX3B1dF91c2VyKHVvc3Muc3NfZmxhZ3MsICZ1b3NzX3B0ci0+c3NfZmxhZ3MpIHx8Ci0JCSAgICBfX3B1dF91c2VyKHVvc3Muc3Nfc2l6ZSwgJnVvc3NfcHRyLT5zc19zaXplKSkKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1b3NzX3B0ciwgc2l6ZW9mKHN0YWNrX2lhMzJfdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcHV0X3VzZXJfdHJ5IHsKKwkJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQodW9zcy5zc19zcCksICZ1b3NzX3B0ci0+c3Nfc3ApOworCQkJcHV0X3VzZXJfZXgodW9zcy5zc19mbGFncywgJnVvc3NfcHRyLT5zc19mbGFncyk7CisJCQlwdXRfdXNlcl9leCh1b3NzLnNzX3NpemUsICZ1b3NzX3B0ci0+c3Nfc2l6ZSk7CisJCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKKworCQlpZiAoZXJyKQogCQkJcmV0ID0gLUVGQVVMVDsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE3Myw3NSArMTg4LDc4IEBACiAvKgogICogRG8gYSBzaWduYWwgcmV0dXJuOyB1bmRvIHRoZSBzaWduYWwgc3RhY2suCiAgKi8KKyNkZWZpbmUgbG9hZHNlZ21lbnRfZ3ModikJbG9hZF9nc19pbmRleCh2KQorI2RlZmluZSBsb2Fkc2VnbWVudF9mcyh2KQlsb2Fkc2VnbWVudChmcywgdikKKyNkZWZpbmUgbG9hZHNlZ21lbnRfZHModikJbG9hZHNlZ21lbnQoZHMsIHYpCisjZGVmaW5lIGxvYWRzZWdtZW50X2VzKHYpCWxvYWRzZWdtZW50KGVzLCB2KQorCisjZGVmaW5lIGdldF91c2VyX3NlZyhzZWcpCSh7IHVuc2lnbmVkIGludCB2OyBzYXZlc2VnbWVudChzZWcsIHYpOyB2OyB9KQorI2RlZmluZSBzZXRfdXNlcl9zZWcoc2VnLCB2KQlsb2Fkc2VnbWVudF8jI3NlZyh2KQorCiAjZGVmaW5lIENPUFkoeCkJCQl7CQlcCi0JZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+eCwgJnNjLT54KTsJXAorCWdldF91c2VyX2V4KHJlZ3MtPngsICZzYy0+eCk7CQlcCiB9CiAKLSNkZWZpbmUgQ09QWV9TRUdfQ1BMMyhzZWcpCXsJCQlcCi0JCXVuc2lnbmVkIHNob3J0IHRtcDsJCQlcCi0JCWVyciB8PSBfX2dldF91c2VyKHRtcCwgJnNjLT5zZWcpOwlcCi0JCXJlZ3MtPnNlZyA9IHRtcCB8IDM7CQkJXAotfQorI2RlZmluZSBHRVRfU0VHKHNlZykJCSh7CQkJXAorCXVuc2lnbmVkIHNob3J0IHRtcDsJCQkJXAorCWdldF91c2VyX2V4KHRtcCwgJnNjLT5zZWcpOwkJCVwKKwl0bXA7CQkJCQkJXAorfSkKKworI2RlZmluZSBDT1BZX1NFR19DUEwzKHNlZykJZG8gewkJCVwKKwlyZWdzLT5zZWcgPSBHRVRfU0VHKHNlZykgfCAzOwkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVMT0FEX1NFRyhzZWcpCQl7CQlcCi0JdW5zaWduZWQgaW50IGN1ciwgcHJlOwkJCVwKLQllcnIgfD0gX19nZXRfdXNlcihwcmUsICZzYy0+c2VnKTsJXAotCXNhdmVzZWdtZW50KHNlZywgY3VyKTsJCQlcCisJdW5zaWduZWQgaW50IHByZSA9IEdFVF9TRUcoc2VnKTsJXAorCXVuc2lnbmVkIGludCBjdXIgPSBnZXRfdXNlcl9zZWcoc2VnKTsJXAogCXByZSB8PSAzOwkJCQlcCiAJaWYgKHByZSAhPSBjdXIpCQkJCVwKLQkJbG9hZHNlZ21lbnQoc2VnLCBwcmUpOwkJXAorCQlzZXRfdXNlcl9zZWcoc2VnLCBwcmUpOwkJXAogfQogCiBzdGF0aWMgaW50IGlhMzJfcmVzdG9yZV9zaWdjb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCSAgIHN0cnVjdCBzaWdjb250ZXh0X2lhMzIgX191c2VyICpzYywKIAkJCQkgICB1bnNpZ25lZCBpbnQgKnBheCkKIHsKLQl1bnNpZ25lZCBpbnQgdG1wZmxhZ3MsIGdzLCBvbGRncywgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wZmxhZ3MsIGVyciA9IDA7CiAJdm9pZCBfX3VzZXIgKmJ1ZjsKIAl1MzIgdG1wOwogCiAJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCi0jaWYgREVCVUdfU0lHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlNJRyByZXN0b3JlX3NpZ2NvbnRleHQ6ICIKLQkgICAgICAgInNjPSVwIGVycigleCkgZWlwKCV4KSBjcygleCkgZmxnKCV4KVxuIiwKLQkgICAgICAgc2MsIHNjLT5lcnIsIHNjLT5pcCwgc2MtPmNzLCBzYy0+ZmxhZ3MpOwotI2VuZGlmCisJZ2V0X3VzZXJfdHJ5IHsKKwkJLyoKKwkJICogUmVsb2FkIGZzIGFuZCBncyBpZiB0aGV5IGhhdmUgY2hhbmdlZCBpbiB0aGUgc2lnbmFsCisJCSAqIGhhbmRsZXIuICBUaGlzIGRvZXMgbm90IGhhbmRsZSBsb25nIGZzL2dzIGJhc2UgY2hhbmdlcyBpbgorCQkgKiB0aGUgaGFuZGxlciwgYnV0IGRvZXMgbm90IGNsb2JiZXIgdGhlbSBhdCBsZWFzdCBpbiB0aGUKKwkJICogbm9ybWFsIGNhc2UuCisJCSAqLworCQlSRUxPQURfU0VHKGdzKTsKKwkJUkVMT0FEX1NFRyhmcyk7CisJCVJFTE9BRF9TRUcoZHMpOworCQlSRUxPQURfU0VHKGVzKTsKIAotCS8qCi0JICogUmVsb2FkIGZzIGFuZCBncyBpZiB0aGV5IGhhdmUgY2hhbmdlZCBpbiB0aGUgc2lnbmFsCi0JICogaGFuZGxlci4gIFRoaXMgZG9lcyBub3QgaGFuZGxlIGxvbmcgZnMvZ3MgYmFzZSBjaGFuZ2VzIGluCi0JICogdGhlIGhhbmRsZXIsIGJ1dCBkb2VzIG5vdCBjbG9iYmVyIHRoZW0gYXQgbGVhc3QgaW4gdGhlCi0JICogbm9ybWFsIGNhc2UuCi0JICovCi0JZXJyIHw9IF9fZ2V0X3VzZXIoZ3MsICZzYy0+Z3MpOwotCWdzIHw9IDM7Ci0Jc2F2ZXNlZ21lbnQoZ3MsIG9sZGdzKTsKLQlpZiAoZ3MgIT0gb2xkZ3MpCi0JCWxvYWRfZ3NfaW5kZXgoZ3MpOworCQlDT1BZKGRpKTsgQ09QWShzaSk7IENPUFkoYnApOyBDT1BZKHNwKTsgQ09QWShieCk7CisJCUNPUFkoZHgpOyBDT1BZKGN4KTsgQ09QWShpcCk7CisJCS8qIERvbid0IHRvdWNoIGV4dGVuZGVkIHJlZ2lzdGVycyAqLwogCi0JUkVMT0FEX1NFRyhmcyk7Ci0JUkVMT0FEX1NFRyhkcyk7Ci0JUkVMT0FEX1NFRyhlcyk7CisJCUNPUFlfU0VHX0NQTDMoY3MpOworCQlDT1BZX1NFR19DUEwzKHNzKTsKIAotCUNPUFkoZGkpOyBDT1BZKHNpKTsgQ09QWShicCk7IENPUFkoc3ApOyBDT1BZKGJ4KTsKLQlDT1BZKGR4KTsgQ09QWShjeCk7IENPUFkoaXApOwotCS8qIERvbid0IHRvdWNoIGV4dGVuZGVkIHJlZ2lzdGVycyAqLworCQlnZXRfdXNlcl9leCh0bXBmbGFncywgJnNjLT5mbGFncyk7CisJCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgfkZJWF9FRkxBR1MpIHwgKHRtcGZsYWdzICYgRklYX0VGTEFHUyk7CisJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KKwkJcmVncy0+b3JpZ19heCA9IC0xOwogCi0JQ09QWV9TRUdfQ1BMMyhjcyk7Ci0JQ09QWV9TRUdfQ1BMMyhzcyk7CisJCWdldF91c2VyX2V4KHRtcCwgJnNjLT5mcHN0YXRlKTsKKwkJYnVmID0gY29tcGF0X3B0cih0bXApOworCQllcnIgfD0gcmVzdG9yZV9pMzg3X3hzdGF0ZV9pYTMyKGJ1Zik7CiAKLQllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5mbGFncyk7Ci0JcmVncy0+ZmxhZ3MgPSAocmVncy0+ZmxhZ3MgJiB+RklYX0VGTEFHUykgfCAodG1wZmxhZ3MgJiBGSVhfRUZMQUdTKTsKLQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCi0JcmVncy0+b3JpZ19heCA9IC0xOworCQlnZXRfdXNlcl9leCgqcGF4LCAmc2MtPmF4KTsKKwl9IGdldF91c2VyX2NhdGNoKGVycik7CiAKLQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+ZnBzdGF0ZSk7Ci0JYnVmID0gY29tcGF0X3B0cih0bXApOwotCWVyciB8PSByZXN0b3JlX2kzODdfeHN0YXRlX2lhMzIoYnVmKTsKLQotCWVyciB8PSBfX2dldF91c2VyKCpwYXgsICZzYy0+YXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMxNywzOCArMzM1LDM2IEBACiAJCQkJIHZvaWQgX191c2VyICpmcHN0YXRlLAogCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG1hc2spCiB7Ci0JaW50IHRtcCwgZXJyID0gMDsKKwlpbnQgZXJyID0gMDsKIAotCXNhdmVzZWdtZW50KGdzLCB0bXApOwotCWVyciB8PSBfX3B1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKLQlzYXZlc2VnbWVudChmcywgdG1wKTsKLQllcnIgfD0gX19wdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5mcyk7Ci0Jc2F2ZXNlZ21lbnQoZHMsIHRtcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIodG1wLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOwotCXNhdmVzZWdtZW50KGVzLCB0bXApOwotCWVyciB8PSBfX3B1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmVzKTsKKwlwdXRfdXNlcl90cnkgeworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZ3MpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+Z3MpOworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZnMpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZnMpOworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZHMpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZXMpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZXMpOwogCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZGksICZzYy0+ZGkpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNpLCAmc2MtPnNpKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5icCwgJnNjLT5icCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c3AsICZzYy0+c3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmJ4LCAmc2MtPmJ4KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5keCwgJnNjLT5keCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+Y3gsICZzYy0+Y3gpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmF4LCAmc2MtPmF4KTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQudHJhcF9ubywgJnNjLT50cmFwbm8pOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5lcnJvcl9jb2RlLCAmc2MtPmVycik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+aXAsICZzYy0+aXApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+Y3MpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmZsYWdzLCAmc2MtPmZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zcCwgJnNjLT5zcF9hdF9zaWduYWwpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+c3MpOworCQlwdXRfdXNlcl9leChyZWdzLT5kaSwgJnNjLT5kaSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnNpLCAmc2MtPnNpKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+YnAsICZzYy0+YnApOworCQlwdXRfdXNlcl9leChyZWdzLT5zcCwgJnNjLT5zcCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmJ4LCAmc2MtPmJ4KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZHgsICZzYy0+ZHgpOworCQlwdXRfdXNlcl9leChyZWdzLT5jeCwgJnNjLT5jeCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmF4LCAmc2MtPmF4KTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sICZzYy0+dHJhcG5vKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLmVycm9yX2NvZGUsICZzYy0+ZXJyKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+aXAsICZzYy0+aXApOworCQlwdXRfdXNlcl9leChyZWdzLT5jcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmNzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZmxhZ3MsICZzYy0+ZmxhZ3MpOworCQlwdXRfdXNlcl9leChyZWdzLT5zcCwgJnNjLT5zcF9hdF9zaWduYWwpOworCQlwdXRfdXNlcl9leChyZWdzLT5zcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPnNzKTsKIAotCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoZnBzdGF0ZSksICZzYy0+ZnBzdGF0ZSk7CisJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoZnBzdGF0ZSksICZzYy0+ZnBzdGF0ZSk7CiAKLQkvKiBub24taUJDUzIgZXh0ZW5zaW9ucy4uICovCi0JZXJyIHw9IF9fcHV0X3VzZXIobWFzaywgJnNjLT5vbGRtYXNrKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuY3IyLCAmc2MtPmNyMik7CisJCS8qIG5vbi1pQkNTMiBleHRlbnNpb25zLi4gKi8KKwkJcHV0X3VzZXJfZXgobWFzaywgJnNjLT5vbGRtYXNrKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLmNyMiwgJnNjLT5jcjIpOworCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC00MzcsMTMgKzQ1MywxNyBAQAogCQllbHNlCiAJCQlyZXN0b3JlciA9ICZmcmFtZS0+cmV0Y29kZTsKIAl9Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdChyZXN0b3JlciksICZmcmFtZS0+cHJldGNvZGUpOwogCi0JLyoKLQkgKiBUaGVzZSBhcmUgYWN0dWFsbHkgbm90IHVzZWQgYW55bW9yZSwgYnV0IGxlZnQgYmVjYXVzZSBzb21lCi0JICogZ2RiIHZlcnNpb25zIGRlcGVuZCBvbiB0aGVtIGFzIGEgbWFya2VyLgotCSAqLwotCWVyciB8PSBfX3B1dF91c2VyKCooKHU2NCAqKSZjb2RlKSwgKHU2NCAqKWZyYW1lLT5yZXRjb2RlKTsKKwlwdXRfdXNlcl90cnkgeworCQlwdXRfdXNlcl9leChwdHJfdG9fY29tcGF0KHJlc3RvcmVyKSwgJmZyYW1lLT5wcmV0Y29kZSk7CisKKwkJLyoKKwkJICogVGhlc2UgYXJlIGFjdHVhbGx5IG5vdCB1c2VkIGFueW1vcmUsIGJ1dCBsZWZ0IGJlY2F1c2Ugc29tZQorCQkgKiBnZGIgdmVyc2lvbnMgZGVwZW5kIG9uIHRoZW0gYXMgYSBtYXJrZXIuCisJCSAqLworCQlwdXRfdXNlcl9leCgqKCh1NjQgKikmY29kZSksICh1NjQgKilmcmFtZS0+cmV0Y29kZSk7CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOworCiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTQ2MiwxMSArNDgyLDYgQEAKIAlyZWdzLT5jcyA9IF9fVVNFUjMyX0NTOwogCXJlZ3MtPnNzID0gX19VU0VSMzJfRFM7CiAKLSNpZiBERUJVR19TSUcKLQlwcmludGsoS0VSTl9ERUJVRyAiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JWx4IHJhPSV1XG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGZyYW1lLCByZWdzLT5pcCwgZnJhbWUtPnByZXRjb2RlKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Niw0MSArNTExLDQwIEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciB8PSBfX3B1dF91c2VyKHNpZywgJmZyYW1lLT5zaWcpOwotCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoJmZyYW1lLT5pbmZvKSwgJmZyYW1lLT5waW5mbyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdCgmZnJhbWUtPnVjKSwgJmZyYW1lLT5wdWMpOwotCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKCZmcmFtZS0+aW5mbywgaW5mbyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FRkFVTFQ7CisJcHV0X3VzZXJfdHJ5IHsKKwkJcHV0X3VzZXJfZXgoc2lnLCAmZnJhbWUtPnNpZyk7CisJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoJmZyYW1lLT5pbmZvKSwgJmZyYW1lLT5waW5mbyk7CisJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoJmZyYW1lLT51YyksICZmcmFtZS0+cHVjKTsKKwkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyMzIoJmZyYW1lLT5pbmZvLCBpbmZvKTsKIAotCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwotCWlmIChjcHVfaGFzX3hzYXZlKQotCQllcnIgfD0gX19wdXRfdXNlcihVQ19GUF9YU1RBVEUsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVsc2UKLQkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5zcCksCi0JCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwotCWVyciB8PSBpYTMyX3NldHVwX3NpZ2NvbnRleHQoJmZyYW1lLT51Yy51Y19tY29udGV4dCwgZnBzdGF0ZSwKLQkJCQkgICAgIHJlZ3MsIHNldC0+c2lnWzBdKTsKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLworCQlpZiAoY3B1X2hhc194c2F2ZSkKKwkJCXB1dF91c2VyX2V4KFVDX0ZQX1hTVEFURSwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJCWVsc2UKKwkJCXB1dF91c2VyX2V4KDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCQlwdXRfdXNlcl9leCgwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCQlwdXRfdXNlcl9leChjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOworCQlwdXRfdXNlcl9leChzYXNfc3NfZmxhZ3MocmVncy0+c3ApLAorCQkJICAgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOworCQlwdXRfdXNlcl9leChjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zaXplKTsKKwkJZXJyIHw9IGlhMzJfc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnVjLnVjX21jb250ZXh0LCBmcHN0YXRlLAorCQkJCQkgICAgIHJlZ3MsIHNldC0+c2lnWzBdKTsKKwkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwogCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKQotCQlyZXN0b3JlciA9IGthLT5zYS5zYV9yZXN0b3JlcjsKLQllbHNlCi0JCXJlc3RvcmVyID0gVkRTTzMyX1NZTUJPTChjdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvLAotCQkJCQkgcnRfc2lncmV0dXJuKTsKLQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KHJlc3RvcmVyKSwgJmZyYW1lLT5wcmV0Y29kZSk7CisJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKKwkJCXJlc3RvcmVyID0ga2EtPnNhLnNhX3Jlc3RvcmVyOworCQllbHNlCisJCQlyZXN0b3JlciA9IFZEU08zMl9TWU1CT0woY3VycmVudC0+bW0tPmNvbnRleHQudmRzbywKKwkJCQkJCSBydF9zaWdyZXR1cm4pOworCQlwdXRfdXNlcl9leChwdHJfdG9fY29tcGF0KHJlc3RvcmVyKSwgJmZyYW1lLT5wcmV0Y29kZSk7CiAKLQkvKgotCSAqIE5vdCBhY3R1YWxseSB1c2VkIGFueW1vcmUsIGJ1dCBsZWZ0IGJlY2F1c2Ugc29tZSBnZGIKLQkgKiB2ZXJzaW9ucyBuZWVkIGl0LgotCSAqLwotCWVyciB8PSBfX3B1dF91c2VyKCooKHU2NCAqKSZjb2RlKSwgKHU2NCAqKWZyYW1lLT5yZXRjb2RlKTsKKwkJLyoKKwkJICogTm90IGFjdHVhbGx5IHVzZWQgYW55bW9yZSwgYnV0IGxlZnQgYmVjYXVzZSBzb21lIGdkYgorCQkgKiB2ZXJzaW9ucyBuZWVkIGl0LgorCQkgKi8KKwkJcHV0X3VzZXJfZXgoKigodTY0ICopJmNvZGUpLCAodTY0ICopZnJhbWUtPnJldGNvZGUpOworCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKKwogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC01NDksMTAgKzU2Myw1IEBACiAJcmVncy0+Y3MgPSBfX1VTRVIzMl9DUzsKIAlyZWdzLT5zcyA9IF9fVVNFUjMyX0RTOwogCi0jaWYgREVCVUdfU0lHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVseCByYT0ldVxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+aXAsIGZyYW1lLT5wcmV0Y29kZSk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggNWEwZDc2ZC4uZGIwYzgwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC0xMTIsOCArMTEyLDggQEAKIAlDRklfREVGX0NGQQlyc3AsMAogCUNGSV9SRUdJU1RFUglyc3AscmJwCiAJU1dBUEdTX1VOU0FGRV9TVEFDSwotCW1vdnEJJWdzOnBkYV9rZXJuZWxzdGFjaywgJXJzcAotCWFkZHEJJChQREFfU1RBQ0tPRkZTRVQpLCVyc3AJCisJbW92cQlQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCAlcnNwCisJYWRkcQkkKEtFUk5FTF9TVEFDS19PRkZTRVQpLCVyc3AKIAkvKgogCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvbi9vZmYgc2VjdGlvbjogdGhlIHN5c2NhbGwKIAkgKiBkaXNhYmxlZCBpcnFzLCBoZXJlIHdlIGVuYWJsZSBpdCBzdHJhaWdodCBhZnRlciBlbnRyeToKQEAgLTI3MywxMyArMjczLDEzIEBACiBFTlRSWShpYTMyX2NzdGFyX3RhcmdldCkKIAlDRklfU1RBUlRQUk9DMzIJc2ltcGxlCiAJQ0ZJX1NJR05BTF9GUkFNRQotCUNGSV9ERUZfQ0ZBCXJzcCxQREFfU1RBQ0tPRkZTRVQKKwlDRklfREVGX0NGQQlyc3AsS0VSTkVMX1NUQUNLX09GRlNFVAogCUNGSV9SRUdJU1RFUglyaXAscmN4CiAJLypDRklfUkVHSVNURVIJcmZsYWdzLHIxMSovCiAJU1dBUEdTX1VOU0FGRV9TVEFDSwogCW1vdmwJJWVzcCwlcjhkCiAJQ0ZJX1JFR0lTVEVSCXJzcCxyOAotCW1vdnEJJWdzOnBkYV9rZXJuZWxzdGFjaywlcnNwCisJbW92cQlQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCVyc3AKIAkvKgogCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvbi9vZmYgc2VjdGlvbjogdGhlIHN5c2NhbGwKIAkgKiBkaXNhYmxlZCBpcnFzIGFuZCBoZXJlIHdlIGVuYWJsZSBpdCBzdHJhaWdodCBhZnRlciBlbnRyeToKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCS5xdWFkIHN5czMyX29sZHVuYW1lCiAJLnF1YWQgc3lzX3VtYXNrCQkvKiA2MCAqLwogCS5xdWFkIHN5c19jaHJvb3QKLQkucXVhZCBzeXMzMl91c3RhdAorCS5xdWFkIGNvbXBhdF9zeXNfdXN0YXQKIAkucXVhZCBzeXNfZHVwMgogCS5xdWFkIHN5c19nZXRwcGlkCiAJLnF1YWQgc3lzX2dldHBncnAJCS8qIDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKaW5kZXggNmMwZDdmNi4uZWZhYzkyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwpAQCAtNjM4LDI4ICs2MzgsNiBAQAogCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KIAotbG9uZyBzeXMzMl91c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCB1c3RhdDMyIF9fdXNlciAqdTMycCkKLXsKLQlzdHJ1Y3QgdXN0YXQgdTsKLQltbV9zZWdtZW50X3Qgc2VnOwotCWludCByZXQ7Ci0KLQlzZWcgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfdXN0YXQoZGV2LCAoc3RydWN0IHVzdGF0IF9fdXNlciAqKSZ1KTsKLQlzZXRfZnMoc2VnKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdTMycCwgc2l6ZW9mKHN0cnVjdCB1c3RhdDMyKSkgfHwKLQkgICAgX19wdXRfdXNlcigoX191MzIpIHUuZl90ZnJlZSwgJnUzMnAtPmZfdGZyZWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoKF9fdTMyKSB1LmZfdGlub2RlLCAmdTMycC0+Zl90ZnJlZSkgfHwKLQkgICAgX19jb3B5X3RvX3VzZXIoJnUzMnAtPmZfZm5hbWUsIHUuZl9mbmFtZSwgc2l6ZW9mKHUuZl9mbmFtZSkpIHx8Ci0JICAgIF9fY29weV90b191c2VyKCZ1MzJwLT5mX2ZwYWNrLCB1LmZfZnBhY2ssIHNpemVvZih1LmZfZnBhY2spKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQlyZXR1cm4gcmV0OwotfQotCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfZXhlY3ZlKGNoYXIgX191c2VyICpuYW1lLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKIAkJCSAgICAgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYS5vdXQtY29yZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYS5vdXQtY29yZS5oCmluZGV4IDNjNjAxZjguLmJiNzBlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LWNvcmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAlkdW1wLT5yZWdzLmRzID0gKHUxNilyZWdzLT5kczsKIAlkdW1wLT5yZWdzLmVzID0gKHUxNilyZWdzLT5lczsKIAlkdW1wLT5yZWdzLmZzID0gKHUxNilyZWdzLT5mczsKLQlzYXZlc2VnbWVudChncywgZHVtcC0+cmVncy5ncyk7CisJZHVtcC0+cmVncy5ncyA9IGdldF91c2VyX2dzKHJlZ3MpOwogCWR1bXAtPnJlZ3Mub3JpZ19heCA9IHJlZ3MtPm9yaWdfYXg7CiAJZHVtcC0+cmVncy5pcCA9IHJlZ3MtPmlwOwogCWR1bXAtPnJlZ3MuY3MgPSAodTE2KXJlZ3MtPmNzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDk4MzA2ODEuLjQ1MThkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTEwMiw5ICsxMDIsNiBAQAogCWFjcGlfbm9pcnEgPSAxOwogfQogCi0vKiBGaXhtYXAgcGFnZXMgdG8gcmVzZXJ2ZSBmb3IgQUNQSSBib290LXRpbWUgdGFibGVzIChzZWUgZml4bWFwLmgpICovCi0jZGVmaW5lIEZJWF9BQ1BJX1BBR0VTIDQKLQogZXh0ZXJuIGludCBhY3BpX2dzaV90b19pcnEodTMyIGdzaSwgdW5zaWduZWQgaW50ICppcnEpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyBhY3BpX25vaXJxID0gMTsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU0NWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBBU01fWDg2X0FFU19ICisjZGVmaW5lIEFTTV9YODZfQUVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKwordm9pZCBjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LAorCQkJICAgIGNvbnN0IHU4ICpzcmMpOwordm9pZCBjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LAorCQkJICAgIGNvbnN0IHU4ICpzcmMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggYWIxZDUxYS4uNGVmOTQ5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMSwxNSArMSwxOCBAQAogI2lmbmRlZiBfQVNNX1g4Nl9BUElDX0gKICNkZWZpbmUgX0FTTV9YODZfQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2RlZmluZSBBUkNIX0FQSUNUSU1FUl9TVE9QU19PTl9DMwkxCkBAIC0zMyw3ICszNiwxMyBAQAogCX0gd2hpbGUgKDApCiAKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCiBleHRlcm4gdm9pZCBnZW5lcmljX2FwaWNfcHJvYmUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfYXBpY19wcm9iZSh2b2lkKQoreworfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIApAQCAtNDEsNiArNTAsMjEgQEAKIGV4dGVybiBpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKIAogZXh0ZXJuIGludCBkaXNhYmxlX2FwaWM7CisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBfX2lucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCk7CisjZWxzZSAvKiBDT05GSUdfU01QICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVmYXVsdF9pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCit7CisJaWYgKGFwaWNfdmVyYm9zaXR5ID49IEFQSUNfREVCVUcpCisJCV9faW5xdWlyZV9yZW1vdGVfYXBpYyhhcGljaWQpOworfQorCiAvKgogICogQmFzaWMgZnVuY3Rpb25zIGFjY2Vzc2luZyBBUElDcy4KICAqLwpAQCAtNTEsNyArNzUsMTQgQEAKICNkZWZpbmUgc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19YODZfVlNNUAogZXh0ZXJuIGludCBpc192c21wX2JveCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpc192c21wX2JveCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiBleHRlcm4gdm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpOwogZXh0ZXJuIHUzMiBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCB4YXBpY19pY3Jfd3JpdGUodTMyLCB1MzIpOwpAQCAtNzEsNiArMTAyLDEyIEBACiAJcmV0dXJuICooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpKTsKIH0KIAorZXh0ZXJuIHZvaWQgbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKTsKK2V4dGVybiB1MzIgbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgbmF0aXZlX2FwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCk7CitleHRlcm4gdTY0IG5hdGl2ZV9hcGljX2ljcl9yZWFkKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfYXBpY19tc3Jfd3JpdGUodTMyIHJlZywgdTMyIHYpCiB7CiAJaWYgKHJlZyA9PSBBUElDX0RGUiB8fCByZWcgPT0gQVBJQ19JRCB8fCByZWcgPT0gQVBJQ19MRFIgfHwKQEAgLTkxLDggKzEyOCwzMiBAQAogCXJldHVybiBsb3c7CiB9CiAKLSNpZm5kZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIGludCB4MmFwaWM7CitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3gyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG5hdGl2ZV9zYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV94MmFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKK3sKKwl3cm1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgKChfX3U2NCkgaWQpIDw8IDMyIHwgbG93KTsKK30KKworc3RhdGljIGlubGluZSB1NjQgbmF0aXZlX3gyYXBpY19pY3JfcmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJcmRtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworZXh0ZXJuIGludCB4MmFwaWMsIHgyYXBpY19waHlzOwogZXh0ZXJuIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCk7CkBAIC0xMTAsMzAgKzE3MSwyNCBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLSNkZWZpbmUgeDJhcGljX2VuYWJsZWQoKQkwCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHgyYXBpY19lbmFibGVkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAotc3RydWN0IGFwaWNfb3BzIHsKLQl1MzIgKCpyZWFkKSh1MzIgcmVnKTsKLQl2b2lkICgqd3JpdGUpKHUzMiByZWcsIHUzMiB2KTsKLQl1NjQgKCppY3JfcmVhZCkodm9pZCk7Ci0Jdm9pZCAoKmljcl93cml0ZSkodTMyIGxvdywgdTMyIGhpZ2gpOwotCXZvaWQgKCp3YWl0X2ljcl9pZGxlKSh2b2lkKTsKLQl1MzIgKCpzYWZlX3dhaXRfaWNyX2lkbGUpKHZvaWQpOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBhcGljX29wcyAqYXBpY19vcHM7Ci0KLSNkZWZpbmUgYXBpY19yZWFkIChhcGljX29wcy0+cmVhZCkKLSNkZWZpbmUgYXBpY193cml0ZSAoYXBpY19vcHMtPndyaXRlKQotI2RlZmluZSBhcGljX2ljcl9yZWFkIChhcGljX29wcy0+aWNyX3JlYWQpCi0jZGVmaW5lIGFwaWNfaWNyX3dyaXRlIChhcGljX29wcy0+aWNyX3dyaXRlKQotI2RlZmluZSBhcGljX3dhaXRfaWNyX2lkbGUgKGFwaWNfb3BzLT53YWl0X2ljcl9pZGxlKQotI2RlZmluZSBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSAoYXBpY19vcHMtPnNhZmVfd2FpdF9pY3JfaWRsZSkKLQogZXh0ZXJuIGludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAorI2lmZGVmIENPTkZJR19YODZfWDJBUElDCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNrX3gyQVBJQ19pcnEodm9pZCkKIHsKIAkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KQEAgLTE0MSwxOCArMTk2LDYgQEAKIH0KICNlbmRpZgogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfQVBJQ19pcnEodm9pZCkKLXsKLQkvKgotCSAqIGFja19BUElDX2lycSgpIGFjdHVhbGx5IGdldHMgY29tcGlsZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24KLQkgKiAuLi4geXVtbWllLgotCSAqLwotCi0JLyogRG9jcyBzYXkgdXNlIDAgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCi0JYXBpY193cml0ZShBUElDX0VPSSwgMCk7Ci19Ci0KIGV4dGVybiBpbnQgbGFwaWNfZ2V0X21heGx2dCh2b2lkKTsKIGV4dGVybiB2b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBjb25uZWN0X2JzcF9BUElDKHZvaWQpOwpAQCAtMTk2LDQgKzIzOSwzMjcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KIAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUJU0VUX0FQSUNfSUQoeCkJCShhcGljLT5zZXRfYXBpY19pZCh4KSkKKyNlbHNlCisKKyNlbmRpZgorCisvKgorICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEdlbmVyaWMgQVBJQyBzdWItYXJjaCBkYXRhIHN0cnVjdC4KKyAqCisgKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5CisgKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAorICogSmFtZXMgQ2xldmVyZG9uLgorICovCitzdHJ1Y3QgYXBpYyB7CisJY2hhciAqbmFtZTsKKworCWludCAoKnByb2JlKSh2b2lkKTsKKwlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7CisJaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKKworCXUzMiBpcnFfZGVsaXZlcnlfbW9kZTsKKwl1MzIgaXJxX2Rlc3RfbW9kZTsKKworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICooKnRhcmdldF9jcHVzKSh2b2lkKTsKKworCWludCBkaXNhYmxlX2VzcjsKKworCWludCBkZXN0X2xvZ2ljYWw7CisJdW5zaWduZWQgbG9uZyAoKmNoZWNrX2FwaWNpZF91c2VkKShwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCk7CisJdW5zaWduZWQgbG9uZyAoKmNoZWNrX2FwaWNpZF9wcmVzZW50KShpbnQgYXBpY2lkKTsKKworCXZvaWQgKCp2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKTsKKwl2b2lkICgqaW5pdF9hcGljX2xkcikodm9pZCk7CisKKwlwaHlzaWRfbWFza190ICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190IG1hcCk7CisKKwl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKKwlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOworCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOworCWludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7CisJaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7CisJcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKKwl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKKwlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7CisJaW50ICgqcGh5c19wa2dfaWQpKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKKworCS8qCisJICogV2hlbiBvbmUgb2YgdGhlIG5leHQgdHdvIGhvb2tzIHJldHVybnMgMSB0aGUgYXBpYworCSAqIGlzIHN3aXRjaGVkIHRvIHRoaXMuIEVzc2VudGlhbGx5IHRoZXkgYXJlIGFkZGl0aW9uYWwKKwkgKiBwcm9iZSBmdW5jdGlvbnM6CisJICovCisJaW50ICgqbXBzX29lbV9jaGVjaykoc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCk7CisKKwl1bnNpZ25lZCBpbnQgKCpnZXRfYXBpY19pZCkodW5zaWduZWQgbG9uZyB4KTsKKwl1bnNpZ25lZCBsb25nICgqc2V0X2FwaWNfaWQpKHVuc2lnbmVkIGludCBpZCk7CisJdW5zaWduZWQgbG9uZyBhcGljX2lkX21hc2s7CisKKwl1bnNpZ25lZCBpbnQgKCpjcHVfbWFza190b19hcGljaWQpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKTsKKwl1bnNpZ25lZCBpbnQgKCpjcHVfbWFza190b19hcGljaWRfYW5kKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKTsKKworCS8qIGlwaSAqLworCXZvaWQgKCpzZW5kX0lQSV9tYXNrKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZikoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCSBpbnQgdmVjdG9yKTsKKwl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX3NlbGYpKGludCB2ZWN0b3IpOworCisJLyogd2FrZXVwX3NlY29uZGFyeV9jcHUgKi8KKwlpbnQgKCp3YWtldXBfc2Vjb25kYXJ5X2NwdSkoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOworCisJaW50IHRyYW1wb2xpbmVfcGh5c19sb3c7CisJaW50IHRyYW1wb2xpbmVfcGh5c19oaWdoOworCisJdm9pZCAoKndhaXRfZm9yX2luaXRfZGVhc3NlcnQpKGF0b21pY190ICpkZWFzc2VydCk7CisJdm9pZCAoKnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYykodm9pZCk7CisJdm9pZCAoKmlucXVpcmVfcmVtb3RlX2FwaWMpKGludCBhcGljaWQpOworCisJLyogYXBpYyBvcHMgKi8KKwl1MzIgKCpyZWFkKSh1MzIgcmVnKTsKKwl2b2lkICgqd3JpdGUpKHUzMiByZWcsIHUzMiB2KTsKKwl1NjQgKCppY3JfcmVhZCkodm9pZCk7CisJdm9pZCAoKmljcl93cml0ZSkodTMyIGxvdywgdTMyIGhpZ2gpOworCXZvaWQgKCp3YWl0X2ljcl9pZGxlKSh2b2lkKTsKKwl1MzIgKCpzYWZlX3dhaXRfaWNyX2lkbGUpKHZvaWQpOworfTsKKworLyoKKyAqIFBvaW50ZXIgdG8gdGhlIGxvY2FsIEFQSUMgZHJpdmVyIGluIHVzZSBvbiB0aGlzIHN5c3RlbSAodGhlcmUncworICogYWx3YXlzIGp1c3Qgb25lIHN1Y2ggZHJpdmVyIGluIHVzZSAtIHRoZSBrZXJuZWwgZGVjaWRlcyB2aWEgYW4KKyAqIGVhcmx5IHByb2JpbmcgcHJvY2VzcyB3aGljaCBvbmUgaXQgcGlja3MgLSBhbmQgdGhlbiBzdGlja3MgdG8gaXQpOgorICovCitleHRlcm4gc3RydWN0IGFwaWMgKmFwaWM7CisKKy8qCisgKiBBUElDIGZ1bmN0aW9uYWxpdHkgdG8gYm9vdCBvdGhlciBDUFVzIC0gb25seSB1c2VkIG9uIFNNUDoKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQ7CitleHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9ubWkoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFwaWNfcmVhZCh1MzIgcmVnKQoreworCXJldHVybiBhcGljLT5yZWFkKHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX3dyaXRlKHUzMiByZWcsIHUzMiB2YWwpCit7CisJYXBpYy0+d3JpdGUocmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhcGljX2ljcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuIGFwaWMtPmljcl9yZWFkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlhcGljLT5pY3Jfd3JpdGUobG93LCBoaWdoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCWFwaWMtPndhaXRfaWNyX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwlyZXR1cm4gYXBpYy0+c2FmZV93YWl0X2ljcl9pZGxlKCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGFja19BUElDX2lycSh2b2lkKQoreworCS8qCisJICogYWNrX0FQSUNfaXJxKCkgYWN0dWFsbHkgZ2V0cyBjb21waWxlZCBhcyBhIHNpbmdsZSBpbnN0cnVjdGlvbgorCSAqIC4uLiB5dW1taWUuCisJICovCisKKwkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KKwlhcGljX3dyaXRlKEFQSUNfRU9JLCAwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBkZWZhdWx0X2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBpbnQgdmVyID0gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKKworCWlmIChBUElDX1hBUElDKHZlcikpCisJCXJldHVybiAoeCA+PiAyNCkgJiAweEZGOworCWVsc2UKKwkJcmV0dXJuICh4ID4+IDI0KSAmIDB4MEY7Cit9CisKKy8qCisgKiBXYXJtIHJlc2V0IHZlY3RvciBkZWZhdWx0IHBvc2l0aW9uOgorICovCisjZGVmaW5lIERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVwkJMHg0NjcKKyNkZWZpbmUgREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSAkJMHg0NjkKKworI2lmZGVmIENPTkZJR19YODZfNjQKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX2ZsYXQ7CitleHRlcm4gc3RydWN0IGFwaWMgYXBpY19waHlzZmxhdDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX3gyYXBpY19jbHVzdGVyOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfeDJhcGljX3BoeXM7CitleHRlcm4gaW50IGRlZmF1bHRfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7CisKK2V4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKKworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfeDJhcGljX3V2X3g7CitERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CisKK2V4dGVybiBpbnQgZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpOworZXh0ZXJuIGludCBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGRlZmF1bHRfd2FpdF9mb3JfaW5pdF9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnQpCit7CisJd2hpbGUgKCFhdG9taWNfcmVhZChkZWFzc2VydCkpCisJCWNwdV9yZWxheCgpOworCXJldHVybjsKK30KKworZXh0ZXJuIHZvaWQgZ2VuZXJpY19iaWdzbXBfcHJvYmUodm9pZCk7CisKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9GTEFUKQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZWZhdWx0X3RhcmdldF9jcHVzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBjcHVfb25saW5lX21hc2s7CisjZWxzZQorCXJldHVybiBjcHVtYXNrX29mKDApOworI2VuZGlmCit9CisKK0RFQ0xBUkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfYXBpY19pZCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBhcGljX3JlYWQoQVBJQ19JRCk7CisKKwlyZXR1cm4gYXBpYy0+Z2V0X2FwaWNfaWQocmVnKTsKK30KKworZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgorICoKKyAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCisgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAorICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KKyAqLworZXh0ZXJuIHZvaWQgZGVmYXVsdF9pbml0X2FwaWNfbGRyKHZvaWQpOworCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF9hcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2RlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitkZWZhdWx0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBtYXNrMSA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKKwl1bnNpZ25lZCBsb25nIG1hc2syID0gY3B1bWFza19iaXRzKGFuZG1hc2spWzBdOworCXVuc2lnbmVkIGxvbmcgbWFzazMgPSBjcHVtYXNrX2JpdHMoY3B1X29ubGluZV9tYXNrKVswXTsKKworCXJldHVybiAodW5zaWduZWQgaW50KShtYXNrMSAmIG1hc2syICYgbWFzazMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworZXh0ZXJuIGludCBkZWZhdWx0X2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCk7CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRlZmF1bHRfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgZGVmYXVsdF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwlyZXR1cm4gcGh5c19tYXA7Cit9CisKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X2NwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworCXJldHVybiAxIDw8IGNwdTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlpZiAobXBzX2NwdSA8IG5yX2NwdV9pZHMgJiYgY3B1X3ByZXNlbnQobXBzX2NwdSkpCisJCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChib290X2NwdV9waHlzaWNhbF9hcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBpbmxpbmUgaW50IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCXJldHVybiBfX2RlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKG1wc19jcHUpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIF9fZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Cit9CisjZWxzZQorZXh0ZXJuIGludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSk7CitleHRlcm4gaW50IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgZGVmYXVsdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQoreworCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c19hcGljaWQpOworfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitleHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbTlJfQ1BVU107CisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fWDg2X0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY251bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY251bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjYxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljbnVtLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BUElDTlVNX0gKKyNkZWZpbmUgX0FTTV9YODZfQVBJQ05VTV9ICisKKy8qIGRlZmluZSBNQVhfSU9fQVBJQ1MgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBNQVhfSU9fQVBJQ1MgNjQKKyNlbHNlCisjIGRlZmluZSBNQVhfSU9fQVBJQ1MgMTI4CisjIGRlZmluZSBNQVhfTE9DQUxfQVBJQyAzMjc2OAorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BUElDTlVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9hcG0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvYXBtLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2FwbS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZDQ5NTcuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXJjaF9ob29rcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9BUkNIX0hPT0tTX0gKLSNkZWZpbmUgX0FTTV9YODZfQVJDSF9IT09LU19ICi0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotLyoKLSAqCWxpbnV4L2luY2x1ZGUvYXNtL2FyY2hfaG9va3MuaAotICoKLSAqCWRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGhvb2tzCi0gKi8KLQotLyogdGhlc2UgYXJlbid0IGFyY2ggaG9va3MsIHRoZXkgYXJlIGdlbmVyaWMgcm91dGluZXMKLSAqIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGhvb2tzICovCi1leHRlcm4gdm9pZCBpbml0X0lTQV9pcnFzKHZvaWQpOwotZXh0ZXJuIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotCi0vKiB0aGVzZSBhcmUgdGhlIGRlZmluZWQgaG9va3MgKi8KLWV4dGVybiB2b2lkIGludHJfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJlX2ludHJfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJlX3NldHVwX2FyY2hfaG9vayh2b2lkKTsKLWV4dGVybiB2b2lkIHRyYXBfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJlX3RpbWVfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGltZV9pbml0X2hvb2sodm9pZCk7Ci1leHRlcm4gdm9pZCBtY2Ffbm1pX2hvb2sodm9pZCk7Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BUkNIX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGRkOWY1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NQUNIX0FQSUNfSAotI2RlZmluZSBfX0FTTV9NQUNIX0FQSUNfSAotCi0jZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIChwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkpCi0jZGVmaW5lIGVzcl9kaXNhYmxlICgxKQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JcmV0dXJuICZjcHVfb25saW5lX21hcDsKLSNlbHNlCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKLSNlbmRpZgotfQotCi0jdW5kZWYgQVBJQ19ERVNUX0xPR0lDQUwKLSNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwJMAotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkJKEFQSUNfREZSX0ZMQVQpCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFCShkZXN0X0ZpeGVkKQotI2RlZmluZSBJTlRfREVTVF9NT0RFCQkoMCkgICAgLyogcGh5cyBkZWxpdmVyeSB0byB0YXJnZXQgcHJvYyAqLwotI2RlZmluZSBOT19CQUxBTkNFX0lSUQkJKDApCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2xkcihpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBpZDsKLQl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7Ci0JaWQgPSB4YXBpY19waHlzX3RvX2xvZ19hcGljaWQoY3B1KTsKLQl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KLSAqCi0gKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKLSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKLQl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCSJQaHlzZmxhdCIsIG5yX2lvYXBpY3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuIGFwaWNpZF8yX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCi17Ci0JaWYgKG1wc19jcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gKGludCkgcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKLX0KLQotZXh0ZXJuIHU4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW107Ci0vKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCi17Ci0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQlyZXR1cm4gY3B1X3BoeXNpY2FsX2lkKGNwdSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKLXsKLQkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KLQlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4RkZMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuICgxKTsKLX0KLQotLyogQXMgd2UgYXJlIHVzaW5nIHNpbmdsZSBDUFUgYXMgZGVzdGluYXRpb24sIHBpY2sgb25seSBvbmUgQ1BVIGhlcmUgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCi17Ci0JaW50IGNwdTsKLQlpbnQgYXBpY2lkOwkKLQotCWNwdSA9IGZpcnN0X2NwdSgqY3B1bWFzayk7Ci0JYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCWJyZWFrOwotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTJjM2Y1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICi0KLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4RkY8PDI0KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlyZXR1cm4gKCgoeCk+PjI0KSYweEZGKTsKLX0KLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZmNkMDFiLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9pcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgX19BU01fTUFDSF9JUElfSAotI2RlZmluZSBfX0FTTV9NQUNIX0lQSV9ICi0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKaW5kZXggZGQ2MTYxNi4uNjUyNmNmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaApAQCAtMTAsMTcgKzEwLDMxIEBACiAjZGVmaW5lIEVYVEVOREVEX1ZHQQkweGZmZmUJCS8qIDgweDUwIG1vZGUgKi8KICNkZWZpbmUgQVNLX1ZHQQkJMHhmZmZkCQkvKiBhc2sgZm9yIGl0IGF0IGJvb3R1cCAqLwogCisjaWZkZWYgX19LRVJORUxfXworCiAvKiBQaHlzaWNhbCBhZGRyZXNzIHdoZXJlIGtlcm5lbCBzaG91bGQgYmUgbG9hZGVkLiAqLwogI2RlZmluZSBMT0FEX1BIWVNJQ0FMX0FERFIgKChDT05GSUdfUEhZU0lDQUxfU1RBUlQgXAogCQkJCSsgKENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKSBcCiAJCQkJJiB+KENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKQogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDQwMDAwMAorI2Vsc2UgLyogIUNPTkZJR19LRVJORUxfQlpJUDIgKi8KKwogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgQk9PVF9IRUFQX1NJWkUJMHg3MDAwCi0jZGVmaW5lIEJPT1RfU1RBQ0tfU0laRQkweDQwMDAKICNlbHNlCiAjZGVmaW5lIEJPT1RfSEVBUF9TSVpFCTB4NDAwMAorI2VuZGlmCisKKyNlbmRpZiAvKiAhQ09ORklHX0tFUk5FTF9CWklQMiAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBCT09UX1NUQUNLX1NJWkUJMHg0MDAwCisjZWxzZQogI2RlZmluZSBCT09UX1NUQUNLX1NJWkUJMHgxMDAwCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X0JPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDJmODQ2NjUuLjViMzAxYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTUsMjQgKzUsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIGludGVsLiAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBnKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBnLCBhZHIsIGxlbikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZtYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsZW4pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3ZtYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3Z1bm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KIAotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQlcCi0JbWVtY3B5KChkc3QpLCAoc3JjKSwgKGxlbikpCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJXAotCW1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJICAgICB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCW1lbWNweShkc3QsIHNyYywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCSAgICAgICB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworfQogCiAjZGVmaW5lIFBHX25vbl9XQgkJCQlQR19hcmNoXzEKIFBBR0VGTEFHKE5vbldCLCBub25fV0IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxsaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxsaW5nLmgKaW5kZXggMmJjMTYyZS4uMGU2M2M5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FsbGluZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGxpbmcuaApAQCAtMSw1ICsxLDU1IEBACiAvKgotICogU29tZSBtYWNyb3MgdG8gaGFuZGxlIHN0YWNrIGZyYW1lcyBpbiBhc3NlbWJseS4KKworIHg4NiBmdW5jdGlvbiBjYWxsIGNvbnZlbnRpb24sIDY0LWJpdDoKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGFyZ3VtZW50cyAgICAgICAgICAgfCAgY2FsbGVlLXNhdmVkICAgICAgfCBleHRyYSBjYWxsZXItc2F2ZWQgfCByZXR1cm4KKyBbY2FsbGVlLWNsb2JiZXJlZF0gICB8ICAgICAgICAgICAgICAgICAgICB8IFtjYWxsZWUtY2xvYmJlcmVkXSB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmRpIHJzaSByZHggcmN4IHI4LTkgfCByYnggcmJwIFsqXSByMTItMTUgfCByMTAtMTEgICAgICAgICAgICAgfCByYXgsIHJkeCBbKipdCisKKyAoIHJzcCBpcyBvYnZpb3VzbHkgaW52YXJpYW50IGFjcm9zcyBub3JtYWwgZnVuY3Rpb24gY2FsbHMuIChnY2MgY2FuICdtZXJnZScKKyAgIGZ1bmN0aW9ucyB3aGVuIGl0IHNlZXMgdGFpbC1jYWxsIG9wdGltaXphdGlvbiBwb3NzaWJpbGl0aWVzKSByZmxhZ3MgaXMKKyAgIGNsb2JiZXJlZC4gTGVmdG92ZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgb3ZlciB0aGUgc3RhY2sgZnJhbWUuKQorCisgWypdICBJbiB0aGUgZnJhbWUtcG9pbnRlcnMgY2FzZSByYnAgaXMgZml4ZWQgdG8gdGhlIHN0YWNrIGZyYW1lLgorCisgWyoqXSBmb3Igc3RydWN0IHJldHVybiB2YWx1ZXMgd2lkZXIgdGhhbiA2NCBiaXRzIHRoZSByZXR1cm4gY29udmVudGlvbiBpcyBhCisgICAgICBiaXQgbW9yZSBjb21wbGV4OiB1cCB0byAxMjggYml0cyB3aWR0aCB3ZSByZXR1cm4gc21hbGwgc3RydWN0dXJlcworICAgICAgc3RyYWlnaHQgaW4gcmF4LCByZHguIEZvciBzdHJ1Y3R1cmVzIGxhcmdlciB0aGFuIHRoYXQgKDMgd29yZHMgb3IKKyAgICAgIGxhcmdlcikgdGhlIGNhbGxlciBwdXRzIGEgcG9pbnRlciB0byBhbiBvbi1zdGFjayByZXR1cm4gc3RydWN0CisgICAgICBbYWxsb2NhdGVkIGluIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZV0gaW50byB0aGUgZmlyc3QgYXJndW1lbnQgLSBpLmUuCisgICAgICBpbnRvIHJkaS4gQWxsIG90aGVyIGFyZ3VtZW50cyBzaGlmdCB1cCBieSBvbmUgaW4gdGhpcyBjYXNlLgorICAgICAgRm9ydHVuYXRlbHkgdGhpcyBjYXNlIGlzIHJhcmUgaW4gdGhlIGtlcm5lbC4KKworRm9yIDMyLWJpdCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgLSBrZXJuZWwgaXMgYnVpbHQgd2l0aAorLW1yZWdwYXJtPTMgYW5kIC1mcmVnLXN0cnVjdC1yZXR1cm46CisKKyB4ODYgZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9uLCAzMi1iaXQ6CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBhcmd1bWVudHMgICAgICAgICB8IGNhbGxlZS1zYXZlZCAgICAgICAgfCBleHRyYSBjYWxsZXItc2F2ZWQgfCByZXR1cm4KKyBbY2FsbGVlLWNsb2JiZXJlZF0gfCAgICAgICAgICAgICAgICAgICAgIHwgW2NhbGxlZS1jbG9iYmVyZWRdIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZWF4IGVkeCBlY3ggICAgICAgIHwgZWJ4IGVkaSBlc2kgZWJwIFsqXSB8IDxub25lPiAgICAgICAgICAgICB8IGVheCwgZWR4IFsqKl0KKworICggaGVyZSB0b28gZXNwIGlzIG9idmlvdXNseSBpbnZhcmlhbnQgYWNyb3NzIG5vcm1hbCBmdW5jdGlvbiBjYWxscy4gZWZsYWdzCisgICBpcyBjbG9iYmVyZWQuIExlZnRvdmVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG92ZXIgdGhlIHN0YWNrIGZyYW1lLiApCisKKyBbKl0gIEluIHRoZSBmcmFtZS1wb2ludGVycyBjYXNlIGVicCBpcyBmaXhlZCB0byB0aGUgc3RhY2sgZnJhbWUuCisKKyBbKipdIFdlIGJ1aWxkIHdpdGggLWZyZWctc3RydWN0LXJldHVybiwgd2hpY2ggb24gMzItYml0IG1lYW5zIHNpbWlsYXIKKyAgICAgIHNlbWFudGljcyBhcyBvbiA2NC1iaXQ6IGVkeCBjYW4gYmUgdXNlZCBmb3IgYSBzZWNvbmQgcmV0dXJuIHZhbHVlCisgICAgICAoaS5lLiBjb3ZlcmluZyBpbnRlZ2VyIGFuZCBzdHJ1Y3R1cmUgc2l6ZXMgdXAgdG8gNjQgYml0cykgLSBhZnRlciB0aGF0CisgICAgICBpdCBnZXRzIG1vcmUgY29tcGxleCBhbmQgbW9yZSBleHBlbnNpdmU6IDMtd29yZCBvciBsYXJnZXIgc3RydWN0IHJldHVybnMKKyAgICAgIGdldCBkb25lIGluIHRoZSBjYWxsZXIncyBmcmFtZSBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIHJldHVybiBzdHJ1Y3QgZ29lcworICAgICAgaW50byByZWdwYXJtMCwgaS5lLiBlYXggLSB0aGUgb3RoZXIgYXJndW1lbnRzIHNoaWZ0IHVwIGFuZCB0aGUKKyAgICAgIGZ1bmN0aW9uJ3MgcmVnaXN0ZXIgcGFyYW1ldGVycyBkZWdlbmVyYXRlIHRvIHJlZ3Bhcm09MiBpbiBlc3NlbmNlLgorCisqLworCisKKy8qCisgKiA2NC1iaXQgc3lzdGVtIGNhbGwgc3RhY2sgZnJhbWUgbGF5b3V0IGRlZmluZXMgYW5kIGhlbHBlcnMsCisgKiBmb3IgYXNzZW1ibHkgY29kZToKICAqLwogCiAjZGVmaW5lIFIxNQkJICAwCkBAIC05LDcgKzU5LDcgQEAKICNkZWZpbmUgUkJQCQkgMzIKICNkZWZpbmUgUkJYCQkgNDAKIAotLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLworLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cCB0byBoZXJlOiAqLwogI2RlZmluZSBSMTEJCSA0OAogI2RlZmluZSBSMTAJCSA1NgogI2RlZmluZSBSOQkJIDY0CkBAIC0yMiw3ICs3Miw3IEBACiAjZGVmaW5lIE9SSUdfUkFYCTEyMCAgICAgICAvKiArIGVycm9yX2NvZGUgKi8KIC8qIGVuZCBvZiBhcmd1bWVudHMgKi8KIAotLyogY3B1IGV4Y2VwdGlvbiBmcmFtZSBvciB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYXN0IHN5c2NhbGwuICovCisvKiBjcHUgZXhjZXB0aW9uIGZyYW1lIG9yIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhc3Qgc3lzY2FsbDogKi8KICNkZWZpbmUgUklQCQkxMjgKICNkZWZpbmUgQ1MJCTEzNgogI2RlZmluZSBFRkxBR1MJCTE0NApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBiYWU0ODJkLi5iMTg1MDkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaApAQCAtNyw2ICs3LDIwIEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAorI2lmZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIHZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCk7CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpIHt9CisKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQKKyNkZWZpbmUgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkJCQkwCisjZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCiBzdHJ1Y3QgeDg2X2NwdSB7CiAJc3RydWN0IGNwdSBjcHU7CiB9OwpAQCAtMTcsNCArMzEsNyBAQAogI2VuZGlmCiAKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQ7CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDczMDFlNjAuLjBiZWJhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTIxMyw2ICsyMTMsNyBAQAogI2RlZmluZSBjcHVfaGFzX3htbQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTSkKICNkZWZpbmUgY3B1X2hhc194bW0yCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMikKICNkZWZpbmUgY3B1X2hhc194bW0zCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKKyNkZWZpbmUgY3B1X2hhc19hZXMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BRVMpCiAjZGVmaW5lIGNwdV9oYXNfaHQJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVCkKICNkZWZpbmUgY3B1X2hhc19tcAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01QKQogI2RlZmluZSBjcHVfaGFzX254CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmM2M3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdW1hc2suaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9BU01fWDg2X0NQVU1BU0tfSAorI2RlZmluZSBfQVNNX1g4Nl9DUFVNQVNLX0gKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCitleHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbGluX21hc2s7CitleHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOworZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7CitleHRlcm4gY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOworCitleHRlcm4gdm9pZCBzZXR1cF9jcHVfbG9jYWxfbWFza3Modm9pZCk7CisKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQ7CitleHRlcm4gY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKKworI2RlZmluZSBjcHVfY2FsbGluX21hc2sJCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxpbl9tYXApCisjZGVmaW5lIGNwdV9jYWxsb3V0X21hc2sJKChzdHJ1Y3QgY3B1bWFzayAqKSZjcHVfY2FsbG91dF9tYXApCisjZGVmaW5lIGNwdV9pbml0aWFsaXplZF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2luaXRpYWxpemVkKQorI2RlZmluZSBjcHVfc2libGluZ19zZXR1cF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X3NpYmxpbmdfc2V0dXBfbWFwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX0FTTV9YODZfQ1BVTUFTS19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmgKaW5kZXggMDkzMGI0Zi4uYzY4YzM2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaApAQCAtMSwzOSArMSwyMSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9DVVJSRU5UX0gKICNkZWZpbmUgX0FTTV9YODZfQ1VSUkVOVF9ICiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3VycmVudF90YXNrKTsKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQotewotCXJldHVybiB4ODZfcmVhZF9wZXJjcHUoY3VycmVudF90YXNrKTsKLX0KLQotI2Vsc2UgLyogWDg2XzMyICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQogewotCXJldHVybiByZWFkX3BkYShwY3VycmVudCk7CisJcmV0dXJuIHBlcmNwdV9yZWFkKGN1cnJlbnRfdGFzayk7CiB9CiAKLSNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jZGVmaW5lIEdFVF9DVVJSRU5UKHJlZykgbW92cSAlZ3M6KHBkYV9wY3VycmVudCkscmVnCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIFg4Nl8zMiAqLwotCiAjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9kb190aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG9fdGltZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2RvX3RpbWVyLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZjUxYTNkZC4uODNjMWJjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTExMiw3ICsxMTIsNyBAQAogICogbm93IHN0cnVjdF91c2VyX3JlZ3MsIHRoZXkgYXJlIGRpZmZlcmVudCkKICAqLwogCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCVwKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTX0NPTU1PTihwcl9yZWcsIHJlZ3MpCVwKIGRvIHsJCQkJCQlcCiAJcHJfcmVnWzBdID0gcmVncy0+Yng7CQkJXAogCXByX3JlZ1sxXSA9IHJlZ3MtPmN4OwkJCVwKQEAgLTEyNCw3ICsxMjQsNiBAQAogCXByX3JlZ1s3XSA9IHJlZ3MtPmRzICYgMHhmZmZmOwkJXAogCXByX3JlZ1s4XSA9IHJlZ3MtPmVzICYgMHhmZmZmOwkJXAogCXByX3JlZ1s5XSA9IHJlZ3MtPmZzICYgMHhmZmZmOwkJXAotCXNhdmVzZWdtZW50KGdzLCBwcl9yZWdbMTBdKTsJCVwKIAlwcl9yZWdbMTFdID0gcmVncy0+b3JpZ19heDsJCVwKIAlwcl9yZWdbMTJdID0gcmVncy0+aXA7CQkJXAogCXByX3JlZ1sxM10gPSByZWdzLT5jcyAmIDB4ZmZmZjsJCVwKQEAgLTEzMyw2ICsxMzIsMTggQEAKIAlwcl9yZWdbMTZdID0gcmVncy0+c3MgJiAweGZmZmY7CQlcCiB9IHdoaWxlICgwKTsKIAorI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQlcCitkbyB7CQkJCQkJXAorCUVMRl9DT1JFX0NPUFlfUkVHU19DT01NT04ocHJfcmVnLCByZWdzKTtcCisJcHJfcmVnWzEwXSA9IGdldF91c2VyX2dzKHJlZ3MpOwkJXAorfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9LRVJORUxfUkVHUyhwcl9yZWcsIHJlZ3MpCVwKK2RvIHsJCQkJCQlcCisJRUxGX0NPUkVfQ09QWV9SRUdTX0NPTU1PTihwcl9yZWcsIHJlZ3MpO1wKKwlzYXZlc2VnbWVudChncywgcHJfcmVnWzEwXSk7CQlcCit9IHdoaWxlICgwKTsKKwogI2RlZmluZSBFTEZfUExBVEZPUk0JKHV0c25hbWUoKS0+bWFjaGluZSkKICNkZWZpbmUgc2V0X3BlcnNvbmFsaXR5XzY0Yml0KCkJZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0ZDUzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaApAQCAtMCwwICsxLDU3IEBACisvKgorICogVGhpcyBmaWxlIGlzIGRlc2lnbmVkIHRvIGNvbnRhaW4gdGhlIEJVSUxEX0lOVEVSUlVQVCBzcGVjaWZpY2F0aW9ucyBmb3IKKyAqIGFsbCBvZiB0aGUgZXh0cmEgbmFtZWQgaW50ZXJydXB0IHZlY3RvcnMgdXNlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLgorICogVXN1YWxseSB0aGlzIGlzIHRoZSBJbnRlciBQcm9jZXNzIEludGVycnVwdHMgKElQSXMpCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgcGFydCBvZiB0aGUgTGludXggYXJjaGl0ZWN0dXJlLCB0aGVyZQorICogaXMgbm8gaGFyZHdhcmUgSVJRIHBpbiBlcXVpdmFsZW50IGZvciB0aGVtLCB0aGV5IGFyZSB0cmlnZ2VyZWQKKyAqIHRocm91Z2ggdGhlIElDQyBieSB1cyAoSVBJcykKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK0JVSUxEX0lOVEVSUlVQVChyZXNjaGVkdWxlX2ludGVycnVwdCxSRVNDSEVEVUxFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX2ludGVycnVwdCxDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SKQorQlVJTERfSU5URVJSVVBUKGlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0LElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKQorCitCVUlMRF9JTlRFUlJVUFQzKGludmFsaWRhdGVfaW50ZXJydXB0MCxJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMCwKKwkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKK0JVSUxEX0lOVEVSUlVQVDMoaW52YWxpZGF0ZV9pbnRlcnJ1cHQxLElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCsxLAorCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQorQlVJTERfSU5URVJSVVBUMyhpbnZhbGlkYXRlX2ludGVycnVwdDIsSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzIsCisJCSBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQpCitCVUlMRF9JTlRFUlJVUFQzKGludmFsaWRhdGVfaW50ZXJydXB0MyxJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMywKKwkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKK0JVSUxEX0lOVEVSUlVQVDMoaW52YWxpZGF0ZV9pbnRlcnJ1cHQ0LElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCs0LAorCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQorQlVJTERfSU5URVJSVVBUMyhpbnZhbGlkYXRlX2ludGVycnVwdDUsSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzUsCisJCSBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQpCitCVUlMRF9JTlRFUlJVUFQzKGludmFsaWRhdGVfaW50ZXJydXB0NixJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrNiwKKwkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKK0JVSUxEX0lOVEVSUlVQVDMoaW52YWxpZGF0ZV9pbnRlcnJ1cHQ3LElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCs3LAorCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQorI2VuZGlmCisKKy8qCisgKiBldmVyeSBwZW50aXVtIGxvY2FsIEFQSUMgaGFzIHR3byAnbG9jYWwgaW50ZXJydXB0cycsIHdpdGggYQorICogc29mdC1kZWZpbmFibGUgdmVjdG9yIGF0dGFjaGVkIHRvIGJvdGggaW50ZXJydXB0cywgb25lIG9mCisgKiB3aGljaCBpcyBhIHRpbWVyIGludGVycnVwdCwgdGhlIG90aGVyIG9uZSBpcyBlcnJvciBjb3VudGVyCisgKiBvdmVyZmxvdy4gTGludXggdXNlcyB0aGUgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQgdG8gZ2V0CisgKiBhIG11Y2ggc2ltcGxlciBTTVAgdGltZSBhcmNoaXRlY3R1cmU6CisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKworQlVJTERfSU5URVJSVVBUKGFwaWNfdGltZXJfaW50ZXJydXB0LExPQ0FMX1RJTUVSX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChlcnJvcl9pbnRlcnJ1cHQsRVJST1JfQVBJQ19WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoc3B1cmlvdXNfaW50ZXJydXB0LFNQVVJJT1VTX0FQSUNfVkVDVE9SKQorCisjaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKK0JVSUxEX0lOVEVSUlVQVChwZXJmX2NvdW50ZXJfaW50ZXJydXB0LCBMT0NBTF9QRVJGX1ZFQ1RPUikKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMCitCVUlMRF9JTlRFUlJVUFQodGhlcm1hbF9pbnRlcnJ1cHQsVEhFUk1BTF9BUElDX1ZFQ1RPUikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNThiOWNjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9FUzcwMDBfQVBJQ19ICi0jZGVmaW5lIF9fQVNNX0VTNzAwMF9BUElDX0gKLQotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotCi0jZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKLQotc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JICAgICAgICByZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXNfY2x1c3Rlcih2b2lkKQotewotCXJldHVybiAmQ1BVX01BU0tfQUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci19Ci0KLSNkZWZpbmUgQVBJQ19ERlJfVkFMVUVfQ0xVU1RFUgkJKEFQSUNfREZSX0NMVVNURVIpCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFX0NMVVNURVIJKGRlc3RfTG93ZXN0UHJpbykKLSNkZWZpbmUgSU5UX0RFU1RfTU9ERV9DTFVTVEVSCQkoMSkgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRX0NMVVNURVIJCSgxKQotCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfRkxBVCkKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfRml4ZWQpCi0jZGVmaW5lIElOVF9ERVNUX01PREUJCSgwKSAgICAvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBwcm9jcyAqLwotI2RlZmluZSBOT19CQUxBTkNFX0lSUQkJKDApCi0jdW5kZWYgIEFQSUNfREVTVF9MT0dJQ0FMCi0jZGVmaW5lIEFQSUNfREVTVF9MT0dJQ0FMCTB4MAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCi0jZGVmaW5lIGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgKGFwaWNpZCAmIDB4RjApCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbGRyKGludCBjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyBpZDsKLQlpZCA9IHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpOwotCXJldHVybiAoU0VUX0FQSUNfTE9HSUNBTF9JRChpZCkpOwotfQotCi0vKgotICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgotICoKLSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTGRSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCi0gKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAotICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHJfY2x1c3Rlcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRV9DTFVTVEVSKTsKLQl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOwotCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKLQlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOwotfQotCi1leHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKLXsKLQlpbnQgYXBpYyA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiBVc2luZyAlZCBJL08gQVBJQ3MsIHRhcmdldCBjcHVzICVseFxuIiwKLQkJKGFwaWNfdmVyc2lvblthcGljXSA9PSAweDE0KSA/Ci0JCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwKLQkJCW5yX2lvYXBpY3MsIGNwdXNfYWRkcigqdGFyZ2V0X2NwdXMoKSlbMF0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKLXsKLQlpZiAoIW1wc19jcHUpCi0JCXJldHVybiBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7Ci0JZWxzZSBpZiAobXBzX2NwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiAoaW50KSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOwotCWVsc2UKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQotewotCXN0YXRpYyBpbnQgaWQgPSAwOwotCXBoeXNpZF9tYXNrX3QgbWFzazsKLQltYXNrID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGlkKTsKLQkrK2lkOwotCXJldHVybiBtYXNrOwotfQotCi1leHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKLS8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQlyZXR1cm4gKGludCljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdOwotI2Vsc2UKLQlyZXR1cm4gbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQotewotCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhmZik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotfQotCi1leHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGNwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNwdV9tYXNrX3RvX2FwaWNpZF9jbHVzdGVyKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQotewotCWludCBudW1fYml0c19zZXQ7Ci0JaW50IGNwdXNfZm91bmQgPSAwOwotCWludCBjcHU7Ci0JaW50IGFwaWNpZDsKLQotCW51bV9iaXRzX3NldCA9IGNwdW1hc2tfd2VpZ2h0KGNwdW1hc2spOwotCS8qIFJldHVybiBpZCB0byBhbGwgKi8KLQlpZiAobnVtX2JpdHNfc2V0ID09IG5yX2NwdV9pZHMpCi0JCXJldHVybiAweEZGOwotCS8qCi0JICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4gIElmIGFyZSBub3QKLQkgKiBvbiB0aGUgc2FtZSBhcGljaWQgY2x1c3RlciByZXR1cm4gZGVmYXVsdCB2YWx1ZSBvZiBUQVJHRVRfQ1BVUy4KLQkgKi8KLQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOwotCWFwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCXdoaWxlIChjcHVzX2ZvdW5kIDwgbnVtX2JpdHNfc2V0KSB7Ci0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1bWFzaykpIHsKLQkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQotCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7Ci0JCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIDB4RkY7Ci0JCQl9Ci0JCQlhcGljaWQgPSBuZXdfYXBpY2lkOwotCQkJY3B1c19mb3VuZCsrOwotCQl9Ci0JCWNwdSsrOwotCX0KLQlyZXR1cm4gYXBpY2lkOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQotewotCWludCBudW1fYml0c19zZXQ7Ci0JaW50IGNwdXNfZm91bmQgPSAwOwotCWludCBjcHU7Ci0JaW50IGFwaWNpZDsKLQotCW51bV9iaXRzX3NldCA9IGNwdXNfd2VpZ2h0KCpjcHVtYXNrKTsKLQkvKiBSZXR1cm4gaWQgdG8gYWxsICovCi0JaWYgKG51bV9iaXRzX3NldCA9PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOwotCS8qCi0JICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4gIElmIGFyZSBub3QKLQkgKiBvbiB0aGUgc2FtZSBhcGljaWQgY2x1c3RlciByZXR1cm4gZGVmYXVsdCB2YWx1ZSBvZiBUQVJHRVRfQ1BVUy4KLQkgKi8KLQljcHUgPSBmaXJzdF9jcHUoKmNwdW1hc2spOwotCWFwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCXdoaWxlIChjcHVzX2ZvdW5kIDwgbnVtX2JpdHNfc2V0KSB7Ci0JCWlmIChjcHVfaXNzZXQoY3B1LCAqY3B1bWFzaykpIHsKLQkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQotCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7Ci0JCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIGNwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKLQkJCX0KLQkJCWFwaWNpZCA9IG5ld19hcGljaWQ7Ci0JCQljcHVzX2ZvdW5kKys7Ci0JCX0KLQkJY3B1Kys7Ci0JfQotCXJldHVybiBhcGljaWQ7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqaW5tYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlpbnQgYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOwotCWNwdW1hc2tfdmFyX3QgY3B1bWFzazsKLQotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmNwdW1hc2ssIEdGUF9BVE9NSUMpKQotCQlyZXR1cm4gYXBpY2lkOwotCi0JY3B1bWFza19hbmQoY3B1bWFzaywgaW5tYXNrLCBhbmRtYXNrKTsKLQljcHVtYXNrX2FuZChjcHVtYXNrLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwotCWFwaWNpZCA9IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrKTsKLQotCWZyZWVfY3B1bWFza192YXIoY3B1bWFzayk7Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fRVM3MDAwX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjM0YTMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2FwaWNkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNpZm5kZWYgX19BU01fRVM3MDAwX0FQSUNERUZfSAotI2RlZmluZSBfX0FTTV9FUzcwMDBfQVBJQ0RFRl9ICi0KLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4RkY8PDI0KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlyZXR1cm4gKCgoeCk+PjI0KSYweEZGKTsKLX0KLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOGVkMjQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9FUzcwMDBfSVBJX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX0lQSV9ICi0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9FUzcwMDBfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvbXBwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTYyOWIwLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9tcHBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0VTNzAwMF9NUFBBUlNFX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX01QUEFSU0VfSAotCi0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi1leHRlcm4gaW50IHBhcnNlX3VuaXN5c19vZW0gKGNoYXIgKm9lbXB0cik7Ci1leHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKTsKLWV4dGVybiB2b2lkIHVubWFwX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nIG9lbV9hZGRyKTsKLWV4dGVybiB2b2lkIHNldHVwX3VuaXN5cyh2b2lkKTsKLQotI2lmbmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICi1leHRlcm4gaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwotZXh0ZXJuIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQUNQSQotCi1zdGF0aWMgaW5saW5lIGludCBlczcwMDBfY2hlY2tfZHNkdCh2b2lkKQotewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7Ci0KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X3RhYmxlX2hlYWRlcihBQ1BJX1NJR19EU0RULCAwLCAmaGVhZGVyKSkgJiYKLQkgICAgIXN0cm5jbXAoaGVhZGVyLm9lbV9pZCwgIlVOSVNZUyIsIDYpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU01fTUFDSF9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvd2FrZWNwdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGYwZGFhLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC93YWtlY3B1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0VTNzAwMF9XQUtFQ1BVX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX1dBS0VDUFVfSAotCi0jZGVmaW5lIFRSQU1QT0xJTkVfUEhZU19MT1cJMHg0NjcKLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0hJR0gJMHg0NjkKLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2luaXRfZGVhc3NlcnQoYXRvbWljX3QgKmRlYXNzZXJ0KQotewotI2lmbmRlZiBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCi0Jd2hpbGUgKCFhdG9taWNfcmVhZChkZWFzc2VydCkpCi0JCWNwdV9yZWxheCgpOwotI2VuZGlmCi0JcmV0dXJuOwotfQotCi0vKiBOb3RoaW5nIHRvIGRvIGZvciBtb3N0IHBsYXRmb3Jtcywgc2luY2UgY2xlYXJlZCBieSB0aGUgSU5JVCBjeWNsZSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYyh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKLXsKLX0KLQotZXh0ZXJuIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5xdWlyZV9yZW1vdGVfYXBpYyhpbnQgYXBpY2lkKQotewotCWlmIChhcGljX3ZlcmJvc2l0eSA+PSBBUElDX0RFQlVHKQotCQlfX2lucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfV0FLRUNQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDIzNjk2ZDQuLjYzYTc5YzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xLDEyICsxLDE0NiBAQAorLyoKKyAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgorICoKKyAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5CisgKiB4ODZfMzIgYW5kIHg4Nl82NCBpbnRlZ3JhdGlvbiBieSBHdXN0YXZvIEYuIFBhZG92YW4sIEZlYnJ1YXJ5IDIwMDkKKyAqLworCiAjaWZuZGVmIF9BU01fWDg2X0ZJWE1BUF9ICiAjZGVmaW5lIF9BU01fWDg2X0ZJWE1BUF9ICiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJmaXhtYXBfMzIuaCIKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KICNlbHNlCi0jIGluY2x1ZGUgImZpeG1hcF82NC5oIgorI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgogI2VuZGlmCiAKKy8qCisgKiBXZSBjYW4ndCBkZWNsYXJlIEZJWEFERFJfVE9QIGFzIHZhcmlhYmxlIGZvciB4ODZfNjQgYmVjYXVzZSB2c3lzY2FsbAorICogdXNlcyBmaXhtYXBzIHRoYXQgcmVsaWVzIG9uIEZJWEFERFJfVE9QIGZvciBwcm9wZXIgYWRkcmVzcyBjYWxjdWxhdGlvbi4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgRklYQUREUl9UT1AgeDg2IGludGVncmF0aW9uIHdhcyBsZWZ0IGFzIGxhdGVyIHdvcmsuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKiB1c2VkIGJ5IHZtYWxsb2MuYywgdnN5c2NhbGwubGRzLlMuCisgKgorICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAorICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fRklYQUREUl9UT1A7CisjZGVmaW5lIEZJWEFERFJfVE9QCSgodW5zaWduZWQgbG9uZylfX0ZJWEFERFJfVE9QKQorCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVCAgICAgX19maXhfdG9fdmlydChGSVhfVkRTTykKKyNkZWZpbmUgRklYQUREUl9VU0VSX0VORCAgICAgICBfX2ZpeF90b192aXJ0KEZJWF9WRFNPIC0gMSkKKyNlbHNlCisjZGVmaW5lIEZJWEFERFJfVE9QCShWU1lTQ0FMTF9FTkQtUEFHRV9TSVpFKQorCisvKiBPbmx5IGNvdmVycyAzMmJpdCB2c3lzY2FsbHMgY3VycmVudGx5LiBOZWVkIGFub3RoZXIgc2V0IGZvciA2NGJpdC4gKi8KKyNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUCSgodW5zaWduZWQgbG9uZylWU1lTQ0FMTDMyX1ZTWVNDQUxMKQorI2RlZmluZSBGSVhBRERSX1VTRVJfRU5ECShGSVhBRERSX1VTRVJfU1RBUlQgKyBQQUdFX1NJWkUpCisjZW5kaWYKKworCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4KKyAqIGZvciB4ODZfMzI6IFdlIGFsbG9jYXRlIHRoZXNlIHNwZWNpYWwgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogVGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcyAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKKyAqIGhpZ2hlciB0aGFuIDEpLiBVc2Ugc2V0X2ZpeG1hcChpZHgscGh5cykgdG8gYXNzb2NpYXRlCisgKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KKyAqCisgKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKKyAqIHRhc2sgc3dpdGNoZXMuCisgKi8KK2VudW0gZml4ZWRfYWRkcmVzc2VzIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJRklYX0hPTEUsCisJRklYX1ZEU08sCisjZWxzZQorCVZTWVNDQUxMX0xBU1RfUEFHRSwKKwlWU1lTQ0FMTF9GSVJTVF9QQUdFID0gVlNZU0NBTExfTEFTVF9QQUdFCisJCQkgICAgKyAoKFZTWVNDQUxMX0VORC1WU1lTQ0FMTF9TVEFSVCkgPj4gUEFHRV9TSElGVCkgLSAxLAorCVZTWVNDQUxMX0hQRVQsCisjZW5kaWYKKwlGSVhfREJHUF9CQVNFLAorCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJRklYX0lPX0FQSUNfQkFTRV8wLAorCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTIC0gMSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfVklTV1NfQVBJQworCUZJWF9DT19DUFUsCS8qIENvYmFsdCB0aW1lciAqLworCUZJWF9DT19BUElDLAkvKiBDb2JhbHQgQVBJQyBSZWRpcmVjdGlvbiBUYWJsZSAqLworCUZJWF9MSV9QQ0lBLAkvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQSAqLworCUZJWF9MSV9QQ0lCLAkvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQiAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9GMDBGX0JVRworCUZJWF9GMDBGX0lEVCwJLyogVmlydHVhbCBtYXBwaW5nIGZvciBJRFQgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfQ1lDTE9ORV9USU1FUgorCUZJWF9DWUNMT05FX1RJTUVSLCAvKmN5Y2xvbmUgdGltZXIgcmVnaXN0ZXIqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLworCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCisjaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRworCUZJWF9QQ0lFX01DRkcsCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQVJBVklSVAorCUZJWF9QQVJBVklSVF9CT09UTUFQLAorI2VuZGlmCisJX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKKyNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAorCUZJWF9PSENJMTM5NF9CQVNFLAorI2VuZGlmCisJLyoKKwkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCisJICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgorCSAqCisJICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKKwkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKKwkgKi8KKyNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKKyNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0CisJRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQorCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAorI2lmZGVmIENPTkZJR19YODZfMzIKKwlGSVhfV1BfVEVTVCwKKyNlbmRpZgorCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworfTsKKworCitleHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7CisKKyNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIEZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQorI2RlZmluZSBGSVhBRERSX0JPT1RfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9CT09UX1NJWkUpCisKIGV4dGVybiBpbnQgZml4bWFwc19zZXQ7CiAKIGV4dGVybiBwdGVfdCAqa21hcF9wdGU7CkBAIC02OSw0ICsyMDMsNSBAQAogCUJVR19PTih2YWRkciA+PSBGSVhBRERSX1RPUCB8fCB2YWRkciA8IEZJWEFERFJfU1RBUlQpOwogCXJldHVybiBfX3ZpcnRfdG9fZml4KHZhZGRyKTsKIH0KKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0FTTV9YODZfRklYTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MTE1YzEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgotICoKLSAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5Ci0gKi8KLQotI2lmbmRlZiBfQVNNX1g4Nl9GSVhNQVBfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9GSVhNQVBfMzJfSAotCi0KLS8qIHVzZWQgYnkgdm1hbGxvYy5jLCB2c3lzY2FsbC5sZHMuUy4KLSAqCi0gKiBMZWF2ZSBvbmUgZW1wdHkgcGFnZSBiZXR3ZWVuIHZtYWxsb2MnZWQgYXJlYXMgYW5kCi0gKiB0aGUgc3RhcnQgb2YgdGhlIGZpeG1hcC4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19GSVhBRERSX1RPUDsKLSNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUICAgICBfX2ZpeF90b192aXJ0KEZJWF9WRFNPKQotI2RlZmluZSBGSVhBRERSX1VTRVJfRU5EICAgICAgIF9fZml4X3RvX3ZpcnQoRklYX1ZEU08gLSAxKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKLSAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0Ci0gKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQotICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMKLSAqIGZyb20gdGhlIGVuZCBvZiB2aXJ0dWFsIG1lbW9yeSAoMHhmZmZmZjAwMCkgYmFja3dhcmRzLgotICogQWxzbyB0aGlzIGxldHMgdXMgZG8gZmFpbC1zYWZlIHZtYWxsb2MoKSwgd2UKLSAqIGNhbiBndWFyYW50ZWUgdGhhdCB0aGVzZSBzcGVjaWFsIGFkZHJlc3NlcyBhbmQKLSAqIHZtYWxsb2MoKS1lZCBhZGRyZXNzZXMgbmV2ZXIgb3ZlcmxhcC4KLSAqCi0gKiB0aGVzZSAnY29tcGlsZS10aW1lIGFsbG9jYXRlZCcgbWVtb3J5IGJ1ZmZlcnMgYXJlCi0gKiBmaXhlZC1zaXplIDRrIHBhZ2VzLiAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKLSAqIGhpZ2hnZXIgdGhhbiAxKSB1c2UgZml4bWFwX3NldChpZHgscGh5cykgdG8gYXNzb2NpYXRlCi0gKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KLSAqCi0gKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKLSAqIHRhc2sgc3dpdGNoZXMuCi0gKi8KLWVudW0gZml4ZWRfYWRkcmVzc2VzIHsKLQlGSVhfSE9MRSwKLQlGSVhfVkRTTywKLQlGSVhfREJHUF9CQVNFLAotCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JRklYX0lPX0FQSUNfQkFTRV8wLAotCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTLTEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X1ZJU1dTX0FQSUMKLQlGSVhfQ09fQ1BVLAkvKiBDb2JhbHQgdGltZXIgKi8KLQlGSVhfQ09fQVBJQywJLyogQ29iYWx0IEFQSUMgUmVkaXJlY3Rpb24gVGFibGUgKi8KLQlGSVhfTElfUENJQSwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEEgKi8KLQlGSVhfTElfUENJQiwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEIgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfRjAwRl9CVUcKLQlGSVhfRjAwRl9JRFQsCS8qIFZpcnR1YWwgbWFwcGluZyBmb3IgSURUICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIKLQlGSVhfQ1lDTE9ORV9USU1FUiwgLypjeWNsb25lIHRpbWVyIHJlZ2lzdGVyKi8KLSNlbmRpZgotCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwotCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCi0jaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRwotCUZJWF9QQ0lFX01DRkcsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLQlGSVhfUEFSQVZJUlRfQk9PVE1BUCwKLSNlbmRpZgotCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCi0JLyoKLQkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCi0JICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgotCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKLQkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKLQkgKi8KLSNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKLSNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0Ci0JRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQotCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAotCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAotCUZJWF9XUF9URVNULAotI2lmZGVmIENPTkZJR19BQ1BJCi0JRklYX0FDUElfQkVHSU4sCi0JRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyBGSVhfQUNQSV9QQUdFUyAtIDEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAotCUZJWF9PSENJMTM5NF9CQVNFLAotI2VuZGlmCi0JX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCi19OwotCi1leHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7Ci0KLQotI2RlZmluZSBGSVhBRERSX1RPUAkoKHVuc2lnbmVkIGxvbmcpX19GSVhBRERSX1RPUCkKLQotI2RlZmluZSBfX0ZJWEFERFJfU0laRQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQotI2RlZmluZSBfX0ZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gX19GSVhBRERSX1NJWkUpCi0jZGVmaW5lIEZJWEFERFJfQk9PVF9TVEFSVAkoRklYQUREUl9UT1AgLSBfX0ZJWEFERFJfQk9PVF9TSVpFKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9BU01fWDg2X0ZJWE1BUF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXBfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmU3NDA5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgotICovCi0KLSNpZm5kZWYgX0FTTV9YODZfRklYTUFQXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfRklYTUFQXzY0X0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKLSAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0Ci0gKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQotICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4KLSAqCi0gKiBUaGVzZSAnY29tcGlsZS10aW1lIGFsbG9jYXRlZCcgbWVtb3J5IGJ1ZmZlcnMgYXJlCi0gKiBmaXhlZC1zaXplIDRrIHBhZ2VzIChvciBsYXJnZXIgaWYgdXNlZCB3aXRoIGFuIGluY3JlbWVudAotICogaGlnaGVyIHRoYW4gMSkuIFVzZSBzZXRfZml4bWFwKGlkeCxwaHlzKSB0byBhc3NvY2lhdGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB3aXRoIGZpeG1hcCBpbmRpY2VzLgotICoKLSAqIFRMQiBlbnRyaWVzIG9mIHN1Y2ggYnVmZmVycyB3aWxsIG5vdCBiZSBmbHVzaGVkIGFjcm9zcwotICogdGFzayBzd2l0Y2hlcy4KLSAqLwotCi1lbnVtIGZpeGVkX2FkZHJlc3NlcyB7Ci0JVlNZU0NBTExfTEFTVF9QQUdFLAotCVZTWVNDQUxMX0ZJUlNUX1BBR0UgPSBWU1lTQ0FMTF9MQVNUX1BBR0UKLQkJCSAgICArICgoVlNZU0NBTExfRU5ELVZTWVNDQUxMX1NUQVJUKSA+PiBQQUdFX1NISUZUKSAtIDEsCi0JVlNZU0NBTExfSFBFVCwKLQlGSVhfREJHUF9CQVNFLAotCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKLQlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLwotCUZJWF9JT19BUElDX0JBU0VfMCwKLQlGSVhfSU9fQVBJQ19CQVNFX0VORCA9IEZJWF9JT19BUElDX0JBU0VfMCArIE1BWF9JT19BUElDUyAtIDEsCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0JRklYX1BBUkFWSVJUX0JPT1RNQVAsCi0jZW5kaWYKLQlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAotI2lmZGVmIENPTkZJR19BQ1BJCi0JRklYX0FDUElfQkVHSU4sCi0JRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyBGSVhfQUNQSV9QQUdFUyAtIDEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAotCUZJWF9PSENJMTM5NF9CQVNFLAotI2VuZGlmCi0JLyoKLQkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCi0JICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgotCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKLQkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKLQkgKi8KLSNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKLSNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0Ci0JRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQotCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAotCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAotCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcwotfTsKLQotI2RlZmluZSBGSVhBRERSX1RPUAkoVlNZU0NBTExfRU5ELVBBR0VfU0laRSkKLSNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgRklYQUREUl9TVEFSVAkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NJWkUpCi0KLS8qIE9ubHkgY292ZXJzIDMyYml0IHZzeXNjYWxscyBjdXJyZW50bHkuIE5lZWQgYW5vdGhlciBzZXQgZm9yIDY0Yml0LiAqLwotI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQJKCh1bnNpZ25lZCBsb25nKVZTWVNDQUxMMzJfVlNZU0NBTEwpCi0jZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQJKEZJWEFERFJfVVNFUl9TVEFSVCArIFBBR0VfU0laRSkKLQotI2VuZGlmIC8qIF9BU01fWDg2X0ZJWE1BUF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljLmgKaW5kZXggZDQ4YmVlNi4uNGI4Yjk4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWMuaApAQCAtMSw1ICsxIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJnZW5hcGljXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJnZW5hcGljXzY0LmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA1YjczLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWNfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0dFTkFQSUNfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9HRU5BUElDXzMyX0gKLQotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLS8qCi0gKiBHZW5lcmljIEFQSUMgZHJpdmVyIGludGVyZmFjZS4KLSAqCi0gKiBBbiBzdHJhaWdodCBmb3J3YXJkIG1hcHBpbmcgb2YgdGhlIEFQSUMgcmVsYXRlZCBwYXJ0cyBvZiB0aGUKLSAqIHg4NiBzdWJhcmNoaXRlY3R1cmUgaW50ZXJmYWNlIHRvIGEgZHluYW1pYyBvYmplY3QuCi0gKgotICogVGhpcyBpcyB1c2VkIGJ5IHRoZSAiZ2VuZXJpYyIgeDg2IHN1YmFyY2hpdGVjdHVyZS4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCi0gKi8KLQotc3RydWN0IG1wY19idXM7Ci1zdHJ1Y3QgbXBjX3RhYmxlOwotc3RydWN0IG1wY19jcHU7Ci0KLXN0cnVjdCBnZW5hcGljIHsKLQljaGFyICpuYW1lOwotCWludCAoKnByb2JlKSh2b2lkKTsKLQotCWludCAoKmFwaWNfaWRfcmVnaXN0ZXJlZCkodm9pZCk7Ci0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKigqdGFyZ2V0X2NwdXMpKHZvaWQpOwotCWludCBpbnRfZGVsaXZlcnlfbW9kZTsKLQlpbnQgaW50X2Rlc3RfbW9kZTsKLQlpbnQgRVNSX0RJU0FCTEU7Ci0JaW50IGFwaWNfZGVzdGluYXRpb25fbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3VzZWQpKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKTsKLQl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3ByZXNlbnQpKGludCBhcGljaWQpOwotCWludCBub19iYWxhbmNlX2lycTsKLQlpbnQgbm9faW9hcGljX2NoZWNrOwotCXZvaWQgKCppbml0X2FwaWNfbGRyKSh2b2lkKTsKLQlwaHlzaWRfbWFza190ICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190IG1hcCk7Ci0KLQl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKLQlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOwotCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOwotCWludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7Ci0JaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7Ci0JcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKLQl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKLQlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7Ci0JdTMyICgqcGh5c19wa2dfaWQpKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKLQotCS8qIG1wcGFyc2UgKi8KLQkvKiBXaGVuIG9uZSBvZiB0aGUgbmV4dCB0d28gaG9va3MgcmV0dXJucyAxIHRoZSBnZW5hcGljCi0JICAgaXMgc3dpdGNoZWQgdG8gdGhpcy4gRXNzZW50aWFsbHkgdGhleSBhcmUgYWRkaXRpb25hbCBwcm9iZQotCSAgIGZ1bmN0aW9ucy4gKi8KLQlpbnQgKCptcHNfb2VtX2NoZWNrKShzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJCSAgICAgY2hhciAqcHJvZHVjdGlkKTsKLQlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7Ci0KLQl1bnNpZ25lZCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwotCXVuc2lnbmVkIGxvbmcgYXBpY19pZF9tYXNrOwotCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spOwotCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spOwotCXZvaWQgKCp2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBpcGkgKi8KLQl2b2lkICgqc2VuZF9JUElfbWFzaykoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpOwotCXZvaWQgKCpzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAotCQkJCQkgaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX2FsbGJ1dHNlbGYpKGludCB2ZWN0b3IpOwotCXZvaWQgKCpzZW5kX0lQSV9hbGwpKGludCB2ZWN0b3IpOwotI2VuZGlmCi0JaW50ICgqd2FrZXVwX2NwdSkoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOwotCWludCB0cmFtcG9saW5lX3BoeXNfbG93OwotCWludCB0cmFtcG9saW5lX3BoeXNfaGlnaDsKLQl2b2lkICgqd2FpdF9mb3JfaW5pdF9kZWFzc2VydCkoYXRvbWljX3QgKmRlYXNzZXJ0KTsKLQl2b2lkICgqc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKSh2b2lkKTsKLQl2b2lkICgqc3RvcmVfTk1JX3ZlY3RvcikodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpOwotCXZvaWQgKCpyZXN0b3JlX05NSV92ZWN0b3IpKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KTsKLQl2b2lkICgqaW5xdWlyZV9yZW1vdGVfYXBpYykoaW50IGFwaWNpZCk7Ci19OwotCi0jZGVmaW5lIEFQSUNGVU5DKHgpIC54ID0geCwKLQotLyogTW9yZSBmdW5jdGlvbnMgY291bGQgYmUgcHJvYmFibHkgbWFya2VkIElQSUZVTkMgYW5kIHNhdmUgc29tZSBzcGFjZQotICAgaW4gVVAgR0VORVJJQ0FSQ0gga2VybmVscywgYnV0IEkgZG9uJ3QgaGF2ZSB0aGUgbmVydmUgcmlnaHQgbm93Ci0gICB0byB1bnRhbmdsZSB0aGlzIG1lc3MuIC1BSyAgKi8KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElQSUZVTkMoeCkgQVBJQ0ZVTkMoeCkKLSNlbHNlCi0jZGVmaW5lIElQSUZVTkMoeCkKLSNlbmRpZgotCi0jZGVmaW5lIEFQSUNfSU5JVChhbmFtZSwgYXByb2JlKQkJCVwKLXsJCQkJCQkJXAotCS5uYW1lID0gYW5hbWUsCQkJCQlcCi0JLnByb2JlID0gYXByb2JlLAkJCQlcCi0JLmludF9kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREUsCQlcCi0JLmludF9kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFLAkJCVwKLQkubm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUSwJCVwKLQkuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwJCQlcCi0JLmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCA9IEFQSUNfREVTVF9MT0dJQ0FMLAlcCi0JQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKQkJCVwKLQlBUElDRlVOQyh0YXJnZXRfY3B1cykJCQkJXAotCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKQkJCVwKLQlBUElDRlVOQyhjaGVja19hcGljaWRfcHJlc2VudCkJCQlcCi0JQVBJQ0ZVTkMoaW5pdF9hcGljX2xkcikJCQkJXAotCUFQSUNGVU5DKGlvYXBpY19waHlzX2lkX21hcCkJCQlcCi0JQVBJQ0ZVTkMoc2V0dXBfYXBpY19yb3V0aW5nKQkJCVwKLQlBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykJCQlcCi0JQVBJQ0ZVTkMoYXBpY2lkX3RvX25vZGUpCQkJXAotCUFQSUNGVU5DKGNwdV90b19sb2dpY2FsX2FwaWNpZCkJCQlcCi0JQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKQkJCVwKLQlBUElDRlVOQyhhcGljaWRfdG9fY3B1X3ByZXNlbnQpCQkJXAotCUFQSUNGVU5DKHNldHVwX3BvcnRpb19yZW1hcCkJCQlcCi0JQVBJQ0ZVTkMoY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkJCVwKLQlBUElDRlVOQyhtcHNfb2VtX2NoZWNrKQkJCQlcCi0JQVBJQ0ZVTkMoZ2V0X2FwaWNfaWQpCQkJCVwKLQkuYXBpY19pZF9tYXNrID0gQVBJQ19JRF9NQVNLLAkJCVwKLQlBUElDRlVOQyhjcHVfbWFza190b19hcGljaWQpCQkJXAotCUFQSUNGVU5DKGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQpCQlcCi0JQVBJQ0ZVTkModmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQkJXAotCUFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spCQkJXAotCUlQSUZVTkMoc2VuZF9JUElfbWFzaykJCQkJXAotCUlQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikJCQlcCi0JSVBJRlVOQyhzZW5kX0lQSV9hbGwpCQkJCVwKLQlBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKQkJCVwKLQlBUElDRlVOQyhwaHlzX3BrZ19pZCkJCQkJXAotCS50cmFtcG9saW5lX3BoeXNfbG93ID0gVFJBTVBPTElORV9QSFlTX0xPVywJCVwKLQkudHJhbXBvbGluZV9waHlzX2hpZ2ggPSBUUkFNUE9MSU5FX1BIWVNfSElHSCwJCVwKLQlBUElDRlVOQyh3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KQkJXAotCUFQSUNGVU5DKHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYykJCVwKLQlBUElDRlVOQyhzdG9yZV9OTUlfdmVjdG9yKQkJCVwKLQlBUElDRlVOQyhyZXN0b3JlX05NSV92ZWN0b3IpCQkJXAotCUFQSUNGVU5DKGlucXVpcmVfcmVtb3RlX2FwaWMpCQkJXAotfQotCi1leHRlcm4gc3RydWN0IGdlbmFwaWMgKmdlbmFwaWM7Ci1leHRlcm4gdm9pZCBlczcwMDBfdXBkYXRlX2dlbmFwaWNfdG9fY2x1c3Rlcih2b2lkKTsKLQotZW51bSB1dl9zeXN0ZW1fdHlwZSB7VVZfTk9ORSwgVVZfTEVHQUNZX0FQSUMsIFVWX1gyQVBJQywgVVZfTk9OX1VOSVFVRV9BUElDfTsKLSNkZWZpbmUgZ2V0X3V2X3N5c3RlbV90eXBlKCkJCVVWX05PTkUKLSNkZWZpbmUgaXNfdXZfc3lzdGVtKCkJCQkwCi0jZGVmaW5lIHV2X3dha2V1cF9zZWNvbmRhcnkoYSwgYikJMQotI2RlZmluZSB1dl9zeXN0ZW1faW5pdCgpCQlkbyB7fSB3aGlsZSAoMCkKLQotCi0jZW5kaWYgLyogX0FTTV9YODZfR0VOQVBJQ18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZjMyZmIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9HRU5BUElDXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfR0VOQVBJQ182NF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0KLS8qCi0gKiBDb3B5cmlnaHQgMjAwNCBKYW1lcyBDbGV2ZXJkb24sIElCTS4KLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCi0gKgotICogR2VuZXJpYyBBUElDIHN1Yi1hcmNoIGRhdGEgc3RydWN0LgotICoKLSAqIEhhY2tlZCBmb3IgeDg2LTY0IGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tIGkzODYgYXJjaGl0ZWN0dXJlIGNvZGUgYnkKLSAqIE1hcnRpbiBCbGlnaCwgQW5kaSBLbGVlbiwgSmFtZXMgQm90dG9tbGV5LCBKb2huIFN0dWx0eiwgYW5kCi0gKiBKYW1lcyBDbGV2ZXJkb24uCi0gKi8KLQotc3RydWN0IGdlbmFwaWMgewotCWNoYXIgKm5hbWU7Ci0JaW50ICgqYWNwaV9tYWR0X29lbV9jaGVjaykoY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwotCXUzMiBpbnRfZGVsaXZlcnlfbW9kZTsKLQl1MzIgaW50X2Rlc3RfbW9kZTsKLQlpbnQgKCphcGljX2lkX3JlZ2lzdGVyZWQpKHZvaWQpOwotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICooKnRhcmdldF9jcHVzKSh2b2lkKTsKLQl2b2lkICgqdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKShpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzayk7Ci0Jdm9pZCAoKmluaXRfYXBpY19sZHIpKHZvaWQpOwotCS8qIGlwaSAqLwotCXZvaWQgKCpzZW5kX0lQSV9tYXNrKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZikoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkJCSBpbnQgdmVjdG9yKTsKLQl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX3NlbGYpKGludCB2ZWN0b3IpOwotCS8qICovCi0JdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzayk7Ci0JdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkX2FuZCkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzayk7Ci0JdW5zaWduZWQgaW50ICgqcGh5c19wa2dfaWQpKGludCBpbmRleF9tc2IpOwotCXVuc2lnbmVkIGludCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwotCXVuc2lnbmVkIGxvbmcgKCpzZXRfYXBpY19pZCkodW5zaWduZWQgaW50IGlkKTsKLQl1bnNpZ25lZCBsb25nIGFwaWNfaWRfbWFzazsKLQkvKiB3YWtldXBfc2Vjb25kYXJ5X2NwdSAqLwotCWludCAoKndha2V1cF9jcHUpKGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyAqZ2VuYXBpYzsKLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZmxhdDsKLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3BoeXNmbGF0OwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX2NsdXN0ZXI7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfcGh5czsKLWV4dGVybiBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7Ci0KLWV4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKLWVudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307Ci1leHRlcm4gZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCk7Ci1leHRlcm4gaW50IGlzX3V2X3N5c3RlbSh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3V2X3g7Ci1ERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7Ci1leHRlcm4gdm9pZCB1dl9jcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X0dFTkFQSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDAwMDc4N2RmLi4xNzZmMDU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xLDExICsxLDUyIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJoYXJkaXJxXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJoYXJkaXJxXzY0LmgiCisjaWZuZGVmIF9BU01fWDg2X0hBUkRJUlFfSAorI2RlZmluZSBfQVNNX1g4Nl9IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CS8qIGFyY2ggZGVwZW5kZW50ICovCisJdW5zaWduZWQgaW50IGlycTBfaXJxczsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwl1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLworCXVuc2lnbmVkIGludCBpcnFfc3B1cmlvdXNfY291bnQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgaW50IGlycV9yZXNjaGVkX2NvdW50OworCXVuc2lnbmVkIGludCBpcnFfY2FsbF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX3RsYl9jb3VudDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTUNFCisJdW5zaWduZWQgaW50IGlycV90aGVybWFsX2NvdW50OworIyBpZmRlZiBDT05GSUdfWDg2XzY0CisJdW5zaWduZWQgaW50IGlycV90aHJlc2hvbGRfY291bnQ7CisjIGVuZGlmCisjZW5kaWYKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKK0RFQ0xBUkVfUEVSX0NQVShpcnFfY3B1c3RhdF90LCBpcnFfc3RhdCk7CisKKy8qIFdlIGNhbiBoYXZlIGF0IG1vc3QgTlJfVkVDVE9SUyBpcnFzIHJvdXRlZCB0byBhIGNwdSBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgTUFYX0hBUkRJUlFTX1BFUl9DUFUgTlJfVkVDVE9SUworCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVAorCisjZGVmaW5lIGluY19pcnFfc3RhdChtZW1iZXIpCXBlcmNwdV9hZGQoaXJxX3N0YXQubWVtYmVyLCAxKQorCisjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpCXBlcmNwdV9yZWFkKGlycV9zdGF0Ll9fc29mdGlycV9wZW5kaW5nKQorCisjZGVmaW5lIF9fQVJDSF9TRVRfU09GVElSUV9QRU5ESU5HCisKKyNkZWZpbmUgc2V0X3NvZnRpcnFfcGVuZGluZyh4KQlwZXJjcHVfd3JpdGUoaXJxX3N0YXQuX19zb2Z0aXJxX3BlbmRpbmcsICh4KSkKKyNkZWZpbmUgb3Jfc29mdGlycV9wZW5kaW5nKHgpCXBlcmNwdV9vcihpcnFfc3RhdC5fX3NvZnRpcnFfcGVuZGluZywgKHgpKQorCitleHRlcm4gdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogZXh0ZXJuIHU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsKICNkZWZpbmUgYXJjaF9pcnFfc3RhdF9jcHUJYXJjaF9pcnFfc3RhdF9jcHUKIAogZXh0ZXJuIHU2NCBhcmNoX2lycV9zdGF0KHZvaWQpOwogI2RlZmluZSBhcmNoX2lycV9zdGF0CQlhcmNoX2lycV9zdGF0CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3OTU0ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0hBUkRJUlFfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9IQVJESVJRXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLQl1bnNpZ25lZCBsb25nIGlkbGVfdGltZXN0YW1wOwotCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsJLyogYXJjaCBkZXBlbmRlbnQgKi8KLQl1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLwotCXVuc2lnbmVkIGludCBpcnEwX2lycXM7Ci0JdW5zaWduZWQgaW50IGlycV9yZXNjaGVkX2NvdW50OwotCXVuc2lnbmVkIGludCBpcnFfY2FsbF9jb3VudDsKLQl1bnNpZ25lZCBpbnQgaXJxX3RsYl9jb3VudDsKLQl1bnNpZ25lZCBpbnQgaXJxX3RoZXJtYWxfY291bnQ7Ci0JdW5zaWduZWQgaW50IGlycV9zcHVyaW91c19jb3VudDsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLURFQ0xBUkVfUEVSX0NQVShpcnFfY3B1c3RhdF90LCBpcnFfc3RhdCk7Ci0KLSNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCi0jZGVmaW5lIF9fSVJRX1NUQVQoY3B1LCBtZW1iZXIpIChwZXJfY3B1KGlycV9zdGF0LCBjcHUpLm1lbWJlcikKLQotI2RlZmluZSBpbmNfaXJxX3N0YXQobWVtYmVyKQkoX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkubWVtYmVyKyspCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4KLQotI2VuZGlmIC8qIF9BU01fWDg2X0hBUkRJUlFfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWE2YjVkLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfSEFSRElSUV82NF9ICi0jZGVmaW5lIF9BU01fWDg2X0hBUkRJUlFfNjRfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9wZGEuaD4KLSNpbmNsdWRlIDxhc20vYXBpYy5oPgotCi0vKiBXZSBjYW4gaGF2ZSBhdCBtb3N0IE5SX1ZFQ1RPUlMgaXJxcyByb3V0ZWQgdG8gYSBjcHUgYXQgYSB0aW1lICovCi0jZGVmaW5lIE1BWF9IQVJESVJRU19QRVJfQ1BVIE5SX1ZFQ1RPUlMKLQotI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQgMQotCi0jZGVmaW5lIGluY19pcnFfc3RhdChtZW1iZXIpCWFkZF9wZGEobWVtYmVyLCAxKQotCi0jZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpIHJlYWRfcGRhKF9fc29mdGlycV9wZW5kaW5nKQotCi0jZGVmaW5lIF9fQVJDSF9TRVRfU09GVElSUV9QRU5ESU5HIDEKLQotI2RlZmluZSBzZXRfc29mdGlycV9wZW5kaW5nKHgpIHdyaXRlX3BkYShfX3NvZnRpcnFfcGVuZGluZywgKHgpKQotI2RlZmluZSBvcl9zb2Z0aXJxX3BlbmRpbmcoeCkgIG9yX3BkYShfX3NvZnRpcnFfcGVuZGluZywgKHgpKQotCi1leHRlcm4gdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X0hBUkRJUlFfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCA4ZGU2NDRiNi4uMzcwZTFjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKLSNkZWZpbmUgcGxhdGZvcm1fbGVnYWN5X2lycShpcnEpCSgoaXJxKSA8IDE2KQotCiAvKiBJbnRlcnJ1cHQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBkdXJpbmcgaW5pdF9JUlEgKi8KIGV4dGVybiB2b2lkIGFwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZXJyb3JfaW50ZXJydXB0KHZvaWQpOwpAQCAtNTgsNyArNTYsNyBAQAogZXh0ZXJuIHZvaWQgaW5pdF84MjU5QShpbnQgYWVvaSk7CiAKIC8qIElPQVBJQyAqLwotI2RlZmluZSBJT19BUElDX0lSUSh4KSAoKCh4KSA+PSAxNikgfHwgKCgxPDwoeCkpICYgaW9fYXBpY19pcnFzKSkKKyNkZWZpbmUgSU9fQVBJQ19JUlEoeCkgKCgoeCkgPj0gTlJfSVJRU19MRUdBQ1kpIHx8ICgoMTw8KHgpKSAmIGlvX2FwaWNfaXJxcykpCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpb19hcGljX2lycXM7CiAKIGV4dGVybiB2b2lkIGluaXRfVklTV1NfQVBJQ19pcnFzKHZvaWQpOwpAQCAtNjcsMTUgKzY1LDcgQEAKIGV4dGVybiBpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBmbik7CiBleHRlcm4gdm9pZCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKIGV4dGVybiB2b2lkIGVuYWJsZV9JT19BUElDKHZvaWQpOwotI2VuZGlmCi0KLS8qIElQSSBmdW5jdGlvbnMgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1leHRlcm4gdm9pZCBzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpOwotI2VuZGlmCi1leHRlcm4gdm9pZCBzZW5kX0lQSShpbnQgZGVzdCwgaW50IHZlY3Rvcik7CiAKIC8qIFN0YXRpc3RpY3MgKi8KIGV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwpAQCAtODQsMjEgKzc0LDExIEBACiAvKiBFSVNBICovCiBleHRlcm4gdm9pZCBlaXNhX3NldF9sZXZlbF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKLS8qIFZveWFnZXIgZnVuY3Rpb25zICovCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHZpY19jcGlfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB2aWNfc3lzX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgdmljX2Ntbl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY190aW1lcl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19pbnZhbGlkYXRlX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX3Jlc2NoZWR1bGVfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfZW5hYmxlX2lycV9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKLQogLyogU01QICovCiBleHRlcm4gdm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLSNpZmRlZiBDT05GSUdfWDg2X1NNUAorI2lmZGVmIENPTkZJR19TTVAKIGV4dGVybiB2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaAppbmRleCA1OGQ3MDkxLi4xYTk5ZTZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmgKQEAgLTYwLDQgKzYwLDggQEAKIGV4dGVybiB2b2lkIG1hc2tfODI1OUEodm9pZCk7CiBleHRlcm4gdm9pZCB1bm1hc2tfODI1OUEodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitleHRlcm4gdm9pZCBpbml0X0lTQV9pcnFzKHZvaWQpOworI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9JODI1OV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmgKaW5kZXggNTBjYTQ4Ni4uMWY3ZTYyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaWEzMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lhMzIuaApAQCAtMTI5LDEzICsxMjksNiBAQAogCX0gX3NpZmllbGRzOwogfSBjb21wYXRfc2lnaW5mb190OwogCi1zdHJ1Y3QgdXN0YXQzMiB7Ci0JX191MzIJCQlmX3RmcmVlOwotCWNvbXBhdF9pbm9fdAkJZl90aW5vZGU7Ci0JY2hhcgkJCWZfZm5hbWVbNl07Ci0JY2hhcgkJCWZfZnBhY2tbNl07Ci19OwotCiAjZGVmaW5lIElBMzJfU1RBQ0tfVE9QIElBMzJfUEFHRV9PRkZTRVQKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDFkYmJkZjQuLmU1MzgzZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaApAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjZGVmaW5lIGJ1aWxkX21taW9fcmVhZChuYW1lLCBzaXplLCB0eXBlLCByZWcsIGJhcnJpZXIpIFwKIHN0YXRpYyBpbmxpbmUgdHlwZSBuYW1lKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikgXApAQCAtODAsNiArODEsOTggQEAKICNkZWZpbmUgcmVhZHEJCQlyZWFkcQogI2RlZmluZSB3cml0ZXEJCQl3cml0ZXEKIAorLyoqCisgKgl2aXJ0X3RvX3BoeXMJLQltYXAgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwKKyAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICoJVGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgaXMgdGhlIHBoeXNpY2FsIChDUFUpIG1hcHBpbmcgZm9yCisgKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KKyAqCWFkZHJlc3NlcyBkaXJlY3RseSBtYXBwZWQgb3IgYWxsb2NhdGVkIHZpYSBrbWFsbG9jLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZSBidXMgbWFwcGluZ3MgZm9yIERNQSB0cmFuc2ZlcnMuIEluCisgKglhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCisgKgl0aGlzIGZ1bmN0aW9uCisgKi8KKworc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKK3sKKwlyZXR1cm4gX19wYShhZGRyZXNzKTsKK30KKworLyoqCisgKglwaHlzX3RvX3ZpcnQJLQltYXAgcGh5c2ljYWwgYWRkcmVzcyB0byB2aXJ0dWFsCisgKglAYWRkcmVzczogYWRkcmVzcyB0byByZW1hcAorICoKKyAqCVRoZSByZXR1cm5lZCB2aXJ0dWFsIGFkZHJlc3MgaXMgYSBjdXJyZW50IENQVSBtYXBwaW5nIGZvcgorICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCisgKglhZGRyZXNzZXMgdGhhdCBoYXZlIGEga2VybmVsIG1hcHBpbmcKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBidXMgbWFwcGluZ3MgZm9yIERNQSB0cmFuc2ZlcnMuIEluCisgKglhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCisgKgl0aGlzIGZ1bmN0aW9uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQocGh5c19hZGRyX3QgYWRkcmVzcykKK3sKKwlyZXR1cm4gX192YShhZGRyZXNzKTsKK30KKworLyoKKyAqIENoYW5nZSAic3RydWN0IHBhZ2UiIHRvIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpICAgICgoZG1hX2FkZHJfdClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorCisvKgorICogSVNBIEkvTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MuCisgKiBIb3dldmVyLCB3ZSB0cnVuY2F0ZSB0aGUgYWRkcmVzcyB0byB1bnNpZ25lZCBpbnQgdG8gYXZvaWQgdW5kZXNpcmFibGUKKyAqIHByb21pdGlvbnMgaW4gbGVnYWN5IGRyaXZlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzYV92aXJ0X3RvX2J1cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQoreworCXJldHVybiAodW5zaWduZWQgaW50KXZpcnRfdG9fcGh5cyhhZGRyZXNzKTsKK30KKyNkZWZpbmUgaXNhX3BhZ2VfdG9fYnVzKHBhZ2UpCSgodW5zaWduZWQgaW50KXBhZ2VfdG9fcGh5cyhwYWdlKSkKKyNkZWZpbmUgaXNhX2J1c190b192aXJ0CQlwaHlzX3RvX3ZpcnQKKworLyoKKyAqIEhvd2V2ZXIgUENJIG9uZXMgYXJlIG5vdCBuZWNlc3NhcmlseSAxOjEgYW5kIHRoZXJlZm9yZSB0aGVzZSBpbnRlcmZhY2VzCisgKiBhcmUgZm9yYmlkZGVuIGluIHBvcnRhYmxlIFBDSSBkcml2ZXJzLgorICoKKyAqIEFsbG93IHRoZW0gb24geDg2IGZvciBsZWdhY3kgZHJpdmVycywgdGhvdWdoLgorICovCisjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cworI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKKworLyoqCisgKiBpb3JlbWFwICAgICAtICAgbWFwIGJ1cyBtZW1vcnkgaW50byBDUFUgc3BhY2UKKyAqIEBvZmZzZXQ6ICAgIGJ1cyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKyAqIEBzaXplOiAgICAgIHNpemUgb2YgdGhlIHJlc291cmNlIHRvIG1hcAorICoKKyAqIGlvcmVtYXAgcGVyZm9ybXMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHRvCisgKiBtYWtlIGJ1cyBtZW1vcnkgQ1BVIGFjY2Vzc2libGUgdmlhIHRoZSByZWFkYi9yZWFkdy9yZWFkbC93cml0ZWIvCisgKiB3cml0ZXcvd3JpdGVsIGZ1bmN0aW9ucyBhbmQgdGhlIG90aGVyIG1taW8gaGVscGVycy4gVGhlIHJldHVybmVkCisgKiBhZGRyZXNzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVzYWJsZSBkaXJlY3RseSBhcyBhIHZpcnR1YWwKKyAqIGFkZHJlc3MuCisgKgorICogSWYgdGhlIGFyZWEgeW91IGFyZSB0cnlpbmcgdG8gbWFwIGlzIGEgUENJIEJBUiB5b3Ugc2hvdWxkIGhhdmUgYQorICogbG9vayBhdCBwY2lfaW9tYXAoKS4KKyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgcHJvdF92YWwpOworCisvKgorICogVGhlIGRlZmF1bHQgaW9yZW1hcCgpIGJlaGF2aW9yIGlzIG5vbi1jYWNoZWQ6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7Cit9CisKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKworCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogIyBpbmNsdWRlICJpb18zMi5oIgogI2Vsc2UKQEAgLTkxLDcgKzE4NCw3IEBACiAKIGV4dGVybiBpbnQgaW9yZW1hcF9jaGFuZ2VfYXR0cih1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3djKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF93YyhyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKgogICogZWFybHlfaW9yZW1hcCgpIGFuZCBlYXJseV9pb3VubWFwKCkgYXJlIGZvciB0ZW1wb3JhcnkgZWFybHkgYm9vdC10aW1lCkBAIC0xMDMsNyArMTk2LDcgQEAKIGV4dGVybiB2b2lkIF9faW9tZW0gKmVhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX2lvbWVtICplYXJseV9tZW1yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIGVhcmx5X2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqZml4X2lvcmVtYXAodW5zaWduZWQgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMpOwogCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgogCiAjZW5kaWYgLyogX0FTTV9YODZfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKaW5kZXggZDhlMjQyZS4uYTI5OTkwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb18zMi5oCkBAIC0zNyw4ICszNyw2IEBACiAgICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAgICovCiAKLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCi0KICNkZWZpbmUgWFFVQURfUE9SVElPX0JBU0UgMHhmZTQwMDAwMAogI2RlZmluZSBYUVVBRF9QT1JUSU9fUVVBRCAweDQwMDAwICAvKiAyNTZrIHBlciBxdWFkLiAqLwogCkBAIC01Myw5MiArNTEsNiBAQAogICovCiAjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCiAKLS8qKgotICoJdmlydF90b19waHlzCS0JbWFwIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsCi0gKglAYWRkcmVzczogYWRkcmVzcyB0byByZW1hcAotICoKLSAqCVRoZSByZXR1cm5lZCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBwaHlzaWNhbCAoQ1BVKSBtYXBwaW5nIGZvcgotICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCi0gKglhZGRyZXNzZXMgZGlyZWN0bHkgbWFwcGVkIG9yIGFsbG9jYXRlZCB2aWEga21hbGxvYy4KLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGdpdmUgYnVzIG1hcHBpbmdzIGZvciBETUEgdHJhbnNmZXJzLiBJbgotICoJYWxtb3N0IGFsbCBjb25jZWl2YWJsZSBjYXNlcyBhIGRldmljZSBkcml2ZXIgc2hvdWxkIG5vdCBiZSB1c2luZwotICoJdGhpcyBmdW5jdGlvbgotICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKLXsKLQlyZXR1cm4gX19wYShhZGRyZXNzKTsKLX0KLQotLyoqCi0gKglwaHlzX3RvX3ZpcnQJLQltYXAgcGh5c2ljYWwgYWRkcmVzcyB0byB2aXJ0dWFsCi0gKglAYWRkcmVzczogYWRkcmVzcyB0byByZW1hcAotICoKLSAqCVRoZSByZXR1cm5lZCB2aXJ0dWFsIGFkZHJlc3MgaXMgYSBjdXJyZW50IENQVSBtYXBwaW5nIGZvcgotICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCi0gKglhZGRyZXNzZXMgdGhhdCBoYXZlIGEga2VybmVsIG1hcHBpbmcKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBidXMgbWFwcGluZ3MgZm9yIERNQSB0cmFuc2ZlcnMuIEluCi0gKglhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCi0gKgl0aGlzIGZ1bmN0aW9uCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXJldHVybiBfX3ZhKGFkZHJlc3MpOwotfQotCi0vKgotICogQ2hhbmdlICJzdHJ1Y3QgcGFnZSIgdG8gcGh5c2ljYWwgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgICAgKChkbWFfYWRkcl90KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCi0KLS8qKgotICogaW9yZW1hcCAgICAgLSAgIG1hcCBidXMgbWVtb3J5IGludG8gQ1BVIHNwYWNlCi0gKiBAb2Zmc2V0OiAgICBidXMgYWRkcmVzcyBvZiB0aGUgbWVtb3J5Ci0gKiBAc2l6ZTogICAgICBzaXplIG9mIHRoZSByZXNvdXJjZSB0byBtYXAKLSAqCi0gKiBpb3JlbWFwIHBlcmZvcm1zIGEgcGxhdGZvcm0gc3BlY2lmaWMgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB0bwotICogbWFrZSBidXMgbWVtb3J5IENQVSBhY2Nlc3NpYmxlIHZpYSB0aGUgcmVhZGIvcmVhZHcvcmVhZGwvd3JpdGViLwotICogd3JpdGV3L3dyaXRlbCBmdW5jdGlvbnMgYW5kIHRoZSBvdGhlciBtbWlvIGhlbHBlcnMuIFRoZSByZXR1cm5lZAotICogYWRkcmVzcyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB1c2FibGUgZGlyZWN0bHkgYXMgYSB2aXJ0dWFsCi0gKiBhZGRyZXNzLgotICoKLSAqIElmIHRoZSBhcmVhIHlvdSBhcmUgdHJ5aW5nIHRvIG1hcCBpcyBhIFBDSSBCQVIgeW91IHNob3VsZCBoYXZlIGEKLSAqIGxvb2sgYXQgcGNpX2lvbWFwKCkuCi0gKi8KLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfbm9jYWNoZShyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9jYWNoZShyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9wcm90KHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKTsKLQotLyoKLSAqIFRoZSBkZWZhdWx0IGlvcmVtYXAoKSBiZWhhdmlvciBpcyBub24tY2FjaGVkOgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JcmV0dXJuIGlvcmVtYXBfbm9jYWNoZShvZmZzZXQsIHNpemUpOwotfQotCi1leHRlcm4gdm9pZCBpb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7Ci0KLS8qCi0gKiBJU0EgSS9PIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBpc2FfdmlydF90b19idXMgdmlydF90b19waHlzCi0jZGVmaW5lIGlzYV9wYWdlX3RvX2J1cyBwYWdlX3RvX3BoeXMKLSNkZWZpbmUgaXNhX2J1c190b192aXJ0IHBoeXNfdG9fdmlydAotCi0vKgotICogSG93ZXZlciBQQ0kgb25lcyBhcmUgbm90IG5lY2Vzc2FyaWx5IDE6MSBhbmQgdGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMKLSAqIGFyZSBmb3JiaWRkZW4gaW4gcG9ydGFibGUgUENJIGRyaXZlcnMuCi0gKgotICogQWxsb3cgdGhlbSBvbiB4ODYgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aG91Z2guCi0gKi8KLSNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCi0jZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAotCiBzdGF0aWMgaW5saW5lIHZvaWQKIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsLCBpbnQgY291bnQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaAppbmRleCA1NjNjMTYyLi4yNDQwNjc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb182NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKQEAgLTEzNiw3MyArMTM2LDEyIEBACiBfX09VVFModykKIF9fT1VUUyhsKQogCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZgotCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKLSNpZm5kZWYgX19pMzg2X18KLS8qCi0gKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KLSAqIFRoZXNlIGFyZSBwcmV0dHkgdHJpdmlhbAotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCi17Ci0JcmV0dXJuIF9fcGEoYWRkcmVzcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gX192YShhZGRyZXNzKTsKLX0KLSNlbmRpZgotCi0vKgotICogQ2hhbmdlICJzdHJ1Y3QgcGFnZSIgdG8gcGh5c2ljYWwgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgICAgKChkbWFfYWRkcl90KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgogCi0vKgotICogVGhpcyBvbmUgbWFwcyBoaWdoIGFkZHJlc3MgZGV2aWNlIG1lbW9yeSBhbmQgdHVybnMgb2ZmIGNhY2hpbmcgZm9yIHRoYXQgYXJlYS4KLSAqIGl0J3MgdXNlZnVsIGlmIHNvbWUgY29udHJvbCByZWdpc3RlcnMgYXJlIGluIHN1Y2ggYW4gYXJlYSBhbmQgd3JpdGUgY29tYmluaW5nCi0gKiBvciByZWFkIGNhY2hpbmcgaXMgbm90IGRlc2lyYWJsZToKLSAqLwotZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCXVuc2lnbmVkIGxvbmcgcHJvdF92YWwpOwotCi0vKgotICogVGhlIGRlZmF1bHQgaW9yZW1hcCgpIGJlaGF2aW9yIGlzIG5vbi1jYWNoZWQ6Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7Ci19Ci0KLWV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKLQotZXh0ZXJuIHZvaWQgX19pb21lbSAqZml4X2lvcmVtYXAodW5zaWduZWQgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMpOwotCi0vKgotICogSVNBIEkvTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMToxIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgaXNhX3ZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwotI2RlZmluZSBpc2FfcGFnZV90b19idXMgcGFnZV90b19waHlzCi0jZGVmaW5lIGlzYV9idXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKLQotLyoKLSAqIEhvd2V2ZXIgUENJIG9uZXMgYXJlIG5vdCBuZWNlc3NhcmlseSAxOjEgYW5kIHRoZXJlZm9yZSB0aGVzZSBpbnRlcmZhY2VzCi0gKiBhcmUgZm9yYmlkZGVuIGluIHBvcnRhYmxlIFBDSSBkcml2ZXJzLgotICoKLSAqIEFsbG93IHRoZW0gb24geDg2IGZvciBsZWdhY3kgZHJpdmVycywgdGhvdWdoLgotICovCi0jZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwotI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKLQogdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7CiB2b2lkIF9fbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCA3YTFmNDRhLi41OWNiNGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xMTQsMzggKzExNCwxNiBAQAogZXh0ZXJuIGludCBucl9pb2FwaWNzOwogZXh0ZXJuIGludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107CiAKLS8qCi0gKiBNUC1CSU9TIGlycSBjb25maWd1cmF0aW9uIHRhYmxlIHN0cnVjdHVyZXM6Ci0gKi8KLQogI2RlZmluZSBNUF9NQVhfSU9BUElDX1BJTiAxMjcKIAotc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgewotCXVuc2lnbmVkIGxvbmcgbXBfYXBpY2FkZHI7Ci0JdW5zaWduZWQgaW50IG1wX2FwaWNpZDsKLQl1bnNpZ25lZCBjaGFyIG1wX3R5cGU7Ci0JdW5zaWduZWQgY2hhciBtcF9hcGljdmVyOwotCXVuc2lnbmVkIGNoYXIgbXBfZmxhZ3M7Ci19OwotCi1zdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyB7Ci0JdW5zaWduZWQgaW50IG1wX2RzdGFwaWM7Ci0JdW5zaWduZWQgY2hhciBtcF90eXBlOwotCXVuc2lnbmVkIGNoYXIgbXBfaXJxdHlwZTsKLQl1bnNpZ25lZCBzaG9ydCBtcF9pcnFmbGFnOwotCXVuc2lnbmVkIGNoYXIgbXBfc3JjYnVzOwotCXVuc2lnbmVkIGNoYXIgbXBfc3JjYnVzaXJxOwotCXVuc2lnbmVkIGNoYXIgbXBfZHN0aXJxOwotfTsKLQogLyogSS9PIEFQSUMgZW50cmllcyAqLwotZXh0ZXJuIHN0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKK2V4dGVybiBzdHJ1Y3QgbXBjX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CiAKIC8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCiBleHRlcm4gaW50IG1wX2lycV9lbnRyaWVzOwogCiAvKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLWV4dGVybiBzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CitleHRlcm4gc3RydWN0IG1wY19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwogCiAvKiBub24tMCBpZiBkZWZhdWx0ICh0YWJsZS1sZXNzKSBNUCBjb25maWd1cmF0aW9uICovCiBleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CkBAIC0xNjUsMTUgKzE0Myw2IEBACiAvKiAxIGlmIHRoZSB0aW1lciBJUlEgdXNlcyB0aGUgJzgyNTlBIFZpcnR1YWwgV2lyZScgbW9kZSAqLwogZXh0ZXJuIGludCB0aW1lcl90aHJvdWdoXzgyNTk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2lvYXBpY19zZXR1cCh2b2lkKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlub2lvYXBpY3F1aXJrID0gMTsKLQlub2lvYXBpY3Jlcm91dGUgPSAtMTsKLSNlbmRpZgotCXNraXBfaW9hcGljX3NldHVwID0gMTsKLX0KLQogLyoKICAqIElmIHdlIHVzZSB0aGUgSU8tQVBJQyBmb3IgSVJRIHJvdXRpbmcsIGRpc2FibGUgYXV0b21hdGljCiAgKiBhc3NpZ25tZW50IG9mIFBDSSBJUlEncy4KQEAgLTIwMCw2ICsxNjksMTIgQEAKIAogZXh0ZXJuIHZvaWQgcHJvYmVfbnJfaXJxc19nc2kodm9pZCk7CiAKK2V4dGVybiBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljLCBpbnQgaXJxLAorCQkJICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAorCQkJICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKKwkJCSAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBpb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sCisJCQkgICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSk7CiAjZWxzZSAgLyogIUNPTkZJR19YODZfSU9fQVBJQyAqLwogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAwCiBzdGF0aWMgY29uc3QgaW50IHRpbWVyX3Rocm91Z2hfODI1OSA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwaS5oCmluZGV4IGM3NDVhMzAuLjBiNzIyODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwaS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfQVNNX1g4Nl9JUElfSAogI2RlZmluZSBfQVNNX1g4Nl9JUElfSAogCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNCBKYW1lcyBDbGV2ZXJkb24sIElCTS4KICAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCkBAIC01NSw4ICs1Nyw4IEBACiAJCWNwdV9yZWxheCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBkZXN0KQorc3RhdGljIGlubGluZSB2b2lkCitfX2RlZmF1bHRfc2VuZF9JUElfc2hvcnRjdXQodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCkKIHsKIAkvKgogCSAqIFN1YnRsZS4gSW4gdGhlIGNhc2Ugb2YgdGhlICduZXZlciBkbyBkb3VibGUgd3JpdGVzJyB3b3JrYXJvdW5kCkBAIC04Nyw4ICs4OSw4IEBACiAgKiBUaGlzIGlzIHVzZWQgdG8gc2VuZCBhbiBJUEkgd2l0aCBubyBzaG9ydGhhbmQgbm90YXRpb24gKHRoZSBkZXN0aW5hdGlvbiBpcwogICogc3BlY2lmaWVkIGluIGJpdHMgNTYgdG8gNjMgb2YgdGhlIElDUikuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NlbmRfSVBJX2Rlc3RfZmllbGQodW5zaWduZWQgaW50IG1hc2ssIGludCB2ZWN0b3IsCi0JCQkJCSB1bnNpZ25lZCBpbnQgZGVzdCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorIF9fZGVmYXVsdF9zZW5kX0lQSV9kZXN0X2ZpZWxkKHVuc2lnbmVkIGludCBtYXNrLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCkKIHsKIAl1bnNpZ25lZCBsb25nIGNmZzsKIApAQCAtMTE3LDQxICsxMTksNDQgQEAKIAluYXRpdmVfYXBpY19tZW1fd3JpdGUoQVBJQ19JQ1IsIGNmZyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrX3NlcXVlbmNlKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAotCQkJCQkgIGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9waHlzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJIGludCB2ZWN0b3IpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfcGh5cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJCQkgaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfbG9naWNhbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJCQkgaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9sb2dpY2FsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJCSBpbnQgdmVjdG9yKTsKIAotCS8qCi0JICogSGFjay4gVGhlIGNsdXN0ZXJlZCBBUElDIGFkZHJlc3NpbmcgbW9kZSBkb2Vzbid0IGFsbG93IHVzIHRvIHNlbmQKLQkgKiB0byBhbiBhcmJpdHJhcnkgbWFzaywgc28gSSBkbyBhIHVuaWNhc3QgdG8gZWFjaCBDUFUgaW5zdGVhZC4KLQkgKiAtIG1ibGlnaAotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7Ci0JCV9fc2VuZF9JUElfZGVzdF9maWVsZChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJCSAgICAgIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworLyogQXZvaWQgaW5jbHVkZSBoZWxsICovCisjZGVmaW5lIE5NSV9WRUNUT1IgMHgwMgorCitleHRlcm4gaW50IG5vX2Jyb2FkY2FzdDsKKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVmYXVsdF9sb2NhbF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJaWYgKG5vX2Jyb2FkY2FzdCB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKKwkJYXBpYy0+c2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKKwllbHNlCisJCV9fZGVmYXVsdF9zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMQlVULCB2ZWN0b3IsIGFwaWMtPmRlc3RfbG9naWNhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkJCSAgICBpbnQgdmVjdG9yKQorc3RhdGljIGlubGluZSB2b2lkIF9fZGVmYXVsdF9sb2NhbF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBxdWVyeV9jcHU7Ci0JdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JLyogU2VlIEhhY2sgY29tbWVudCBhYm92ZSAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spCi0JCWlmIChxdWVyeV9jcHUgIT0gdGhpc19jcHUpCi0JCQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQoCi0JCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKLQkJCQl2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmIChub19icm9hZGNhc3QgfHwgdmVjdG9yID09IE5NSV9WRUNUT1IpCisJCWFwaWMtPnNlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworCWVsc2UKKwkJX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExJTkMsIHZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfMzIKK2V4dGVybiB2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19sb2dpY2FsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJIGludCB2ZWN0b3IpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZW5kX0lQSV9hbGwoaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBkZWZhdWx0X3NlbmRfSVBJX3NlbGYoaW50IHZlY3Rvcik7CisjZW5kaWYKKworI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCA1OTI2ODhlLi4xMDdlYjIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMzYsOSArMzYsMTEgQEAKIGV4dGVybiB2b2lkIGZpeHVwX2lycXModm9pZCk7CiAjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBuYXRpdmVfaW5pdF9JUlEodm9pZCk7CitleHRlcm4gYm9vbCBoYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitleHRlcm4gdW5zaWduZWQgaW50IGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qIEludGVycnVwdCB2ZWN0b3IgbWFuYWdlbWVudCAqLwogZXh0ZXJuIERFQ0xBUkVfQklUTUFQKHVzZWRfdmVjdG9ycywgTlJfVkVDVE9SUyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVncy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaAppbmRleCA4OWM4OThhLi43Nzg0MzIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVncy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzLmgKQEAgLTEsNSArMSwzMSBAQAotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgaW5jbHVkZSAiaXJxX3JlZ3NfMzIuaCIKLSNlbHNlCi0jIGluY2x1ZGUgImlycV9yZWdzXzY0LmgiCi0jZW5kaWYKKy8qCisgKiBQZXItY3B1IGN1cnJlbnQgZnJhbWUgcG9pbnRlciAtIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdCBleGNlcHRpb24gZnJhbWUgb24KKyAqIHRoZSBzdGFjaywgc3RvcmVkIGluIHRoZSBwZXItY3B1IGFyZWEuCisgKgorICogSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QGdvb3Aub3JnPgorICovCisjaWZuZGVmIF9BU01fWDg2X0lSUV9SRUdTX0gKKyNkZWZpbmUgX0FTTV9YODZfSVJRX1JFR1NfSAorCisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorCisjZGVmaW5lIEFSQ0hfSEFTX09XTl9JUlFfUkVHUworCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MgKiwgaXJxX3JlZ3MpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpnZXRfaXJxX3JlZ3Modm9pZCkKK3sKKwlyZXR1cm4gcGVyY3B1X3JlYWQoaXJxX3JlZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpzZXRfaXJxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKm5ld19yZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKKworCW9sZF9yZWdzID0gZ2V0X2lycV9yZWdzKCk7CisJcGVyY3B1X3dyaXRlKGlycV9yZWdzLCBuZXdfcmVncyk7CisKKwlyZXR1cm4gb2xkX3JlZ3M7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JUlFfUkVHU18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3NfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhZmQ3NC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIFBlci1jcHUgY3VycmVudCBmcmFtZSBwb2ludGVyIC0gdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbiBmcmFtZSBvbgotICogdGhlIHN0YWNrLCBzdG9yZWQgaW4gdGhlIHBlci1jcHUgYXJlYS4KLSAqCi0gKiBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAZ29vcC5vcmc+Ci0gKi8KLSNpZm5kZWYgX0FTTV9YODZfSVJRX1JFR1NfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9JUlFfUkVHU18zMl9ICi0KLSNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+Ci0KLSNkZWZpbmUgQVJDSF9IQVNfT1dOX0lSUV9SRUdTCi0KLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcHRfcmVncyAqLCBpcnFfcmVncyk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHB0X3JlZ3MgKmdldF9pcnFfcmVncyh2b2lkKQotewotCXJldHVybiB4ODZfcmVhZF9wZXJjcHUoaXJxX3JlZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpzZXRfaXJxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKm5ld19yZWdzKQotewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKLQotCW9sZF9yZWdzID0gZ2V0X2lycV9yZWdzKCk7Ci0JeDg2X3dyaXRlX3BlcmNwdShpcnFfcmVncywgbmV3X3JlZ3MpOwotCi0JcmV0dXJuIG9sZF9yZWdzOwotfQotCi0jZW5kaWYgLyogX0FTTV9YODZfSVJRX1JFR1NfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZDljMGIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3NfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnFfcmVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKaW5kZXggZjdmZjY1MC4uOGEyODVmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCkBAIC0xLDQ3ICsxLDY5IEBACiAjaWZuZGVmIF9BU01fWDg2X0lSUV9WRUNUT1JTX0gKICNkZWZpbmUgX0FTTV9YODZfSVJRX1ZFQ1RPUlNfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorLyoKKyAqIExpbnV4IElSUSB2ZWN0b3IgbGF5b3V0LgorICoKKyAqIFRoZXJlIGFyZSAyNTYgSURUIGVudHJpZXMgKHBlciBDUFUgLSBlYWNoIGVudHJ5IGlzIDggYnl0ZXMpIHdoaWNoIGNhbgorICogYmUgZGVmaW5lZCBieSBMaW51eC4gVGhleSBhcmUgdXNlZCBhcyBhIGp1bXAgdGFibGUgYnkgdGhlIENQVSB3aGVuIGEKKyAqIGdpdmVuIHZlY3RvciBpcyB0cmlnZ2VyZWQgLSBieSBhIENQVS1leHRlcm5hbCwgQ1BVLWludGVybmFsIG9yCisgKiBzb2Z0d2FyZS10cmlnZ2VyZWQgZXZlbnQuCisgKgorICogTGludXggc2V0cyB0aGUga2VybmVsIGNvZGUgYWRkcmVzcyBlYWNoIGVudHJ5IGp1bXBzIHRvIGVhcmx5IGR1cmluZworICogYm9vdHVwLCBhbmQgbmV2ZXIgY2hhbmdlcyB0aGVtLiBUaGlzIGlzIHRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUKKyAqIElEVCBlbnRyaWVzOgorICoKKyAqICBWZWN0b3JzICAgMCAuLi4gIDMxIDogc3lzdGVtIHRyYXBzIGFuZCBleGNlcHRpb25zIC0gaGFyZGNvZGVkIGV2ZW50cworICogIFZlY3RvcnMgIDMyIC4uLiAxMjcgOiBkZXZpY2UgaW50ZXJydXB0cworICogIFZlY3RvciAgMTI4ICAgICAgICAgOiBsZWdhY3kgaW50ODAgc3lzY2FsbCBpbnRlcmZhY2UKKyAqICBWZWN0b3JzIDEyOSAuLi4gMjM3IDogZGV2aWNlIGludGVycnVwdHMKKyAqICBWZWN0b3JzIDIzOCAuLi4gMjU1IDogc3BlY2lhbCBpbnRlcnJ1cHRzCisgKgorICogNjQtYml0IHg4NiBoYXMgcGVyIENQVSBJRFQgdGFibGVzLCAzMi1iaXQgaGFzIG9uZSBzaGFyZWQgSURUIHRhYmxlLgorICoKKyAqIFRoaXMgZmlsZSBlbnVtZXJhdGVzIHRoZSBleGFjdCBsYXlvdXQgb2YgdGhlbToKKyAqLwogCi0jZGVmaW5lIE5NSV9WRUNUT1IJCTB4MDIKKyNkZWZpbmUgTk1JX1ZFQ1RPUgkJCTB4MDIKIAogLyoKICAqIElEVCB2ZWN0b3JzIHVzYWJsZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgc3RhcnQKICAqIGF0IDB4MjA6CiAgKi8KLSNkZWZpbmUgRklSU1RfRVhURVJOQUxfVkVDVE9SCTB4MjAKKyNkZWZpbmUgRklSU1RfRVhURVJOQUxfVkVDVE9SCQkweDIwCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJMHg4MAorIyBkZWZpbmUgU1lTQ0FMTF9WRUNUT1IJCQkweDgwCiAjZWxzZQotIyBkZWZpbmUgSUEzMl9TWVNDQUxMX1ZFQ1RPUgkweDgwCisjIGRlZmluZSBJQTMyX1NZU0NBTExfVkVDVE9SCQkweDgwCiAjZW5kaWYKIAogLyoKICAqIFJlc2VydmUgdGhlIGxvd2VzdCB1c2FibGUgcHJpb3JpdHkgbGV2ZWwgMHgyMCAtIDB4MmYgZm9yIHRyaWdnZXJpbmcKICAqIGNsZWFudXAgYWZ0ZXIgaXJxIG1pZ3JhdGlvbi4KICAqLwotI2RlZmluZSBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUglGSVJTVF9FWFRFUk5BTF9WRUNUT1IKKyNkZWZpbmUgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IJCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgogCiAvKgogICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgogICovCi0jZGVmaW5lIElSUTBfVkVDVE9SCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgMHgxMCkKLSNkZWZpbmUgSVJRMV9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDEpCi0jZGVmaW5lIElSUTJfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAyKQotI2RlZmluZSBJUlEzX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMykKLSNkZWZpbmUgSVJRNF9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDQpCi0jZGVmaW5lIElSUTVfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA1KQotI2RlZmluZSBJUlE2X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgNikKLSNkZWZpbmUgSVJRN19WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDcpCi0jZGVmaW5lIElSUThfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA4KQotI2RlZmluZSBJUlE5X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgOSkKLSNkZWZpbmUgSVJRMTBfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMCkKLSNkZWZpbmUgSVJRMTFfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMSkKLSNkZWZpbmUgSVJRMTJfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMikKLSNkZWZpbmUgSVJRMTNfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxMykKLSNkZWZpbmUgSVJRMTRfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxNCkKLSNkZWZpbmUgSVJRMTVfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxNSkKKyNkZWZpbmUgSVJRMF9WRUNUT1IJCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgMHgxMCkKKworI2RlZmluZSBJUlExX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICAxKQorI2RlZmluZSBJUlEyX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICAyKQorI2RlZmluZSBJUlEzX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICAzKQorI2RlZmluZSBJUlE0X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICA0KQorI2RlZmluZSBJUlE1X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICA1KQorI2RlZmluZSBJUlE2X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICA2KQorI2RlZmluZSBJUlE3X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICA3KQorI2RlZmluZSBJUlE4X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICA4KQorI2RlZmluZSBJUlE5X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArICA5KQorI2RlZmluZSBJUlExMF9WRUNUT1IJCQkoSVJRMF9WRUNUT1IgKyAxMCkKKyNkZWZpbmUgSVJRMTFfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgMTEpCisjZGVmaW5lIElSUTEyX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArIDEyKQorI2RlZmluZSBJUlExM19WRUNUT1IJCQkoSVJRMF9WRUNUT1IgKyAxMykKKyNkZWZpbmUgSVJRMTRfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgMTQpCisjZGVmaW5lIElSUTE1X1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArIDE1KQogCiAvKgogICogU3BlY2lhbCBJUlEgdmVjdG9ycyB1c2VkIGJ5IHRoZSBTTVAgYXJjaGl0ZWN0dXJlLCAweGYwLTB4ZmYKQEAgLTQ5LDExOSArNzEsOTggQEAKICAqICBzb21lIG9mIHRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgJ3JhcmUnLCB0aGV5IGFyZSBtZXJnZWQKICAqICBpbnRvIGEgc2luZ2xlIHZlY3RvciAoQ0FMTF9GVU5DVElPTl9WRUNUT1IpIHRvIHNhdmUgdmVjdG9yIHNwYWNlLgogICogIFRMQiwgcmVzY2hlZHVsZSBhbmQgbG9jYWwgQVBJQyB2ZWN0b3JzIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbC4KLSAqCi0gKiAgVmVjdG9ycyAweGYwLTB4ZmEgYXJlIGZyZWUgKHJlc2VydmVkIGZvciBmdXR1cmUgTGludXggdXNlKS4KICAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLQotIyBkZWZpbmUgU1BVUklPVVNfQVBJQ19WRUNUT1IJCTB4ZmYKLSMgZGVmaW5lIEVSUk9SX0FQSUNfVkVDVE9SCQkweGZlCi0jIGRlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1IJCTB4ZmQKLSMgZGVmaW5lIFJFU0NIRURVTEVfVkVDVE9SCQkweGZjCi0jIGRlZmluZSBDQUxMX0ZVTkNUSU9OX1ZFQ1RPUgkJMHhmYgotIyBkZWZpbmUgQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SCTB4ZmEKLSMgZGVmaW5lIFRIRVJNQUxfQVBJQ19WRUNUT1IJCTB4ZjAKLQotI2Vsc2UKIAogI2RlZmluZSBTUFVSSU9VU19BUElDX1ZFQ1RPUgkJMHhmZgorLyoKKyAqIFNhbml0eSBjaGVjaworICovCisjaWYgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MEYpICE9IDB4MEYpCisjIGVycm9yIFNQVVJJT1VTX0FQSUNfVkVDVE9SIGRlZmluaXRpb24gZXJyb3IKKyNlbmRpZgorCiAjZGVmaW5lIEVSUk9SX0FQSUNfVkVDVE9SCQkweGZlCiAjZGVmaW5lIFJFU0NIRURVTEVfVkVDVE9SCQkweGZkCiAjZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCQkweGZjCiAjZGVmaW5lIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUgkweGZiCiAjZGVmaW5lIFRIRVJNQUxfQVBJQ19WRUNUT1IJCTB4ZmEKLSNkZWZpbmUgVEhSRVNIT0xEX0FQSUNfVkVDVE9SCQkweGY5Ci0jZGVmaW5lIFVWX0JBVV9NRVNTQUdFCQkJMHhmOAotI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfRU5ECTB4ZjcKLSNkZWZpbmUgSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUCTB4ZjAJLyogZjAtZjcgdXNlZCBmb3IgVExCIGZsdXNoICovCiAKLSNkZWZpbmUgTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMJOAotCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyogMHhmOCAtIDB4ZjkgOiBmcmVlICovCisjZWxzZQorIyBkZWZpbmUgVEhSRVNIT0xEX0FQSUNfVkVDVE9SCQkweGY5CisjIGRlZmluZSBVVl9CQVVfTUVTU0FHRQkJCTB4ZjgKICNlbmRpZgogCisvKiBmMC1mNyB1c2VkIGZvciBzcHJlYWRpbmcgb3V0IFRMQiBmbHVzaGVzOiAqLworI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfRU5ECTB4ZjcKKyNkZWZpbmUgSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUCTB4ZjAKKyNkZWZpbmUgTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMJICAgOAorCiAvKgogICogTG9jYWwgQVBJQyB0aW1lciBJUlEgdmVjdG9yIGlzIG9uIGEgZGlmZmVyZW50IHByaW9yaXR5IGxldmVsLAogICogdG8gd29yayBhcm91bmQgdGhlICdsb3N0IGxvY2FsIGludGVycnVwdCBpZiBtb3JlIHRoYW4gMiBJUlEKICAqIHNvdXJjZXMgcGVyIGxldmVsJyBlcnJhdGEuCiAgKi8KLSNkZWZpbmUgTE9DQUxfVElNRVJfVkVDVE9SCTB4ZWYKKyNkZWZpbmUgTE9DQUxfVElNRVJfVkVDVE9SCQkweGVmCisKKy8qCisgKiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdCB2ZWN0b3I6CisgKi8KKyNkZWZpbmUgTE9DQUxfUEVSRl9WRUNUT1IJCTB4ZWUKIAogLyoKICAqIEZpcnN0IEFQSUMgdmVjdG9yIGF2YWlsYWJsZSB0byBkcml2ZXJzOiAodmVjdG9ycyAweDMwLTB4ZWUpIHdlCiAgKiBzdGFydCBhdCAweDMxKDB4NDEpIHRvIHNwcmVhZCBvdXQgdmVjdG9ycyBldmVubHkgYmV0d2VlbiBwcmlvcml0eQogICogbGV2ZWxzLiAoMHg4MCBpcyB0aGUgc3lzY2FsbCB2ZWN0b3IpCiAgKi8KLSNkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkoSVJRMTVfVkVDVE9SICsgMikKKyNkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkJKElSUTE1X1ZFQ1RPUiArIDIpCiAKLSNkZWZpbmUgTlJfVkVDVE9SUwkJMjU2CisjZGVmaW5lIE5SX1ZFQ1RPUlMJCQkgMjU2CiAKLSNkZWZpbmUgRlBVX0lSUQkJCTEzCisjZGVmaW5lIEZQVV9JUlEJCQkJICAxMwogCi0jZGVmaW5lCUZJUlNUX1ZNODZfSVJRCQkzCi0jZGVmaW5lIExBU1RfVk04Nl9JUlEJCTE1Ci0jZGVmaW5lIGludmFsaWRfdm04Nl9pcnEoaXJxKQkoKGlycSkgPCAzIHx8IChpcnEpID4gMTUpCisjZGVmaW5lCUZJUlNUX1ZNODZfSVJRCQkJICAgMworI2RlZmluZSBMQVNUX1ZNODZfSVJRCQkJICAxNQogCi0jZGVmaW5lIE5SX0lSUVNfTEVHQUNZCQkxNgotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpICYmICFkZWZpbmVkKENPTkZJR19YODZfVk9ZQUdFUikKLQotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQotIyBpZiBOUl9DUFVTIDwgTUFYX0lPX0FQSUNTCi0jICBkZWZpbmUgTlJfSVJRUyAoTlJfVkVDVE9SUyArICgzMiAqIE5SX0NQVVMpKQotIyBlbHNlCi0jICBkZWZpbmUgTlJfSVJRUyAoTlJfVkVDVE9SUyArICgzMiAqIE1BWF9JT19BUElDUykpCi0jIGVuZGlmCi0jZWxzZQotIyBpZiAoOCAqIE5SX0NQVVMpID4gKDMyICogTUFYX0lPX0FQSUNTKQotIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoOCAqIE5SX0NQVVMpKQotIyBlbHNlCi0jICBkZWZpbmUgTlJfSVJRUyAoTlJfVkVDVE9SUyArICgzMiAqIE1BWF9JT19BUElDUykpCi0jIGVuZGlmCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RhdGljIGlubGluZSBpbnQgaW52YWxpZF92bTg2X2lycShpbnQgaXJxKQoreworCXJldHVybiBpcnEgPCBGSVJTVF9WTTg2X0lSUSB8fCBpcnEgPiBMQVNUX1ZNODZfSVJROworfQogI2VuZGlmCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl9WT1lBR0VSKQorLyoKKyAqIFNpemUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdHMuCisgKgorICogSWYgdGhlIGlycV9kZXNjW10gYXJyYXkgaGFzIGEgc3BhcnNlIGxheW91dCwgd2UgY2FuIHNpemUgdGhpbmdzCisgKiBnZW5lcm91c2x5IC0gaXQgc2NhbGVzIHVwIGxpbmVhcmx5IHdpdGggdGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMsCisgKiBhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIElPLUFQSUNzLCB3aGljaGV2ZXIgaXMgaGlnaGVyLgorICoKKyAqIEluIG90aGVyIGNhc2VzIHdlIHNpemUgbW9yZSBjb25zZXJ2YXRpdmVseSwgdG8gbm90IGNyZWF0ZSB0b28gbGFyZ2UKKyAqIHN0YXRpYyBhcnJheXMuCisgKi8KIAotIyBkZWZpbmUgTlJfSVJRUwkJMjI0CisjZGVmaW5lIE5SX0lSUVNfTEVHQUNZCQkJICAxNgogCi0jZWxzZSAvKiBJT19BUElDIHx8IFZPWUFHRVIgKi8KKyNkZWZpbmUgQ1BVX1ZFQ1RPUl9MSU1JVAkJKCAgOCAqIE5SX0NQVVMgICAgICApCisjZGVmaW5lIElPX0FQSUNfVkVDVE9SX0xJTUlUCQkoIDMyICogTUFYX0lPX0FQSUNTICkKIAotIyBkZWZpbmUgTlJfSVJRUwkJMTYKLQorI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworIyBpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorIyAgZGVmaW5lIE5SX0lSUVMJCQkJCVwKKwkoQ1BVX1ZFQ1RPUl9MSU1JVCA+IElPX0FQSUNfVkVDVE9SX0xJTUlUID8JXAorCQkoTlJfVkVDVE9SUyArIENQVV9WRUNUT1JfTElNSVQpICA6CVwKKwkJKE5SX1ZFQ1RPUlMgKyBJT19BUElDX1ZFQ1RPUl9MSU1JVCkpCisjIGVsc2UKKyMgIGlmIE5SX0NQVVMgPCBNQVhfSU9fQVBJQ1MKKyMgICBkZWZpbmUgTlJfSVJRUyAJCQkoTlJfVkVDVE9SUyArIDQqQ1BVX1ZFQ1RPUl9MSU1JVCkKKyMgIGVsc2UKKyMgICBkZWZpbmUgTlJfSVJRUwkJCShOUl9WRUNUT1JTICsgSU9fQVBJQ19WRUNUT1JfTElNSVQpCisjICBlbmRpZgorIyBlbmRpZgorI2Vsc2UgLyogIUNPTkZJR19YODZfSU9fQVBJQzogKi8KKyMgZGVmaW5lIE5SX0lSUVMJCQlOUl9JUlFTX0xFR0FDWQogI2VuZGlmCiAKLS8qIFZveWFnZXIgc3BlY2lmaWMgZGVmaW5lcyAqLwotLyogVGhlc2UgZGVmaW5lIHRoZSBDUElzIHdlIHVzZSBpbiBsaW51eCAqLwotI2RlZmluZSBWSUNfQ1BJX0xFVkVMMAkJCTAKLSNkZWZpbmUgVklDX0NQSV9MRVZFTDEJCQkxCi0vKiBub3cgdGhlIGZha2UgQ1BJcyAqLwotI2RlZmluZSBWSUNfVElNRVJfQ1BJCQkJMgotI2RlZmluZSBWSUNfSU5WQUxJREFURV9DUEkJCTMKLSNkZWZpbmUgVklDX1JFU0NIRURVTEVfQ1BJCQk0Ci0jZGVmaW5lIFZJQ19FTkFCTEVfSVJRX0NQSQkJNQotI2RlZmluZSBWSUNfQ0FMTF9GVU5DVElPTl9DUEkJCTYKLSNkZWZpbmUgVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSQk3Ci0KLS8qIE5vdyB0aGUgUUlDIENQSXM6ICBTaW5jZSB3ZSBkb24ndCBuZWVkIHRoZSB0d28gaW5pdGlhbCBsZXZlbHMsCi0gKiB0aGVzZSBhcmUgMiBsZXNzIHRoYW4gdGhlIFZJQyBDUElzICovCi0jZGVmaW5lIFFJQ19DUElfT0ZGU0VUCQkJMQotI2RlZmluZSBRSUNfVElNRVJfQ1BJCQkJKFZJQ19USU1FUl9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLSNkZWZpbmUgUUlDX0lOVkFMSURBVEVfQ1BJCQkoVklDX0lOVkFMSURBVEVfQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCi0jZGVmaW5lIFFJQ19SRVNDSEVEVUxFX0NQSQkJKFZJQ19SRVNDSEVEVUxFX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQotI2RlZmluZSBRSUNfRU5BQkxFX0lSUV9DUEkJCShWSUNfRU5BQkxFX0lSUV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLSNkZWZpbmUgUUlDX0NBTExfRlVOQ1RJT05fQ1BJCQkoVklDX0NBTExfRlVOQ1RJT05fQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCi0jZGVmaW5lIFFJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkJKFZJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLQotI2RlZmluZSBWSUNfU1RBUlRfRkFLRV9DUEkJCVZJQ19USU1FUl9DUEkKLSNkZWZpbmUgVklDX0VORF9GQUtFX0NQSQkJVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSQotCi0vKiB0aGlzIGlzIHRoZSBTWVNfSU5UIENQSS4gKi8KLSNkZWZpbmUgVklDX1NZU19JTlQJCQk4Ci0jZGVmaW5lIFZJQ19DTU5fSU5UCQkJMTUKLQotLyogVGhpcyBpcyB0aGUgYm9vdCBDUEkgZm9yIGFsdGVybmF0ZSBwcm9jZXNzb3JzLiAgSXQgZ2V0cyBvdmVyd3JpdHRlbgotICogYnkgdGhlIGFib3ZlIG9uY2UgdGhlIHN5c3RlbSBoYXMgYWN0aXZhdGVkIGFsbCBhdmFpbGFibGUgcHJvY2Vzc29ycyAqLwotI2RlZmluZSBWSUNfQ1BVX0JPT1RfQ1BJCQlWSUNfQ1BJX0xFVkVMMAotI2RlZmluZSBWSUNfQ1BVX0JPT1RfRVJSQVRBX0NQSQkJKFZJQ19DUElfTEVWRUwwICsgOCkKLQotCiAjZW5kaWYgLyogX0FTTV9YODZfSVJRX1ZFQ1RPUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmgKaW5kZXggYzYxZDhiMi4uMGNlYjZkMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oCkBAIC05LDIzICs5LDggQEAKICMgZGVmaW5lIFBBR0VTX05SCQk0CiAjZWxzZQogIyBkZWZpbmUgUEFfQ09OVFJPTF9QQUdFCTAKLSMgZGVmaW5lIFZBX0NPTlRST0xfUEFHRQkxCi0jIGRlZmluZSBQQV9QR0QJCQkyCi0jIGRlZmluZSBWQV9QR0QJCQkzCi0jIGRlZmluZSBQQV9QVURfMAkJNAotIyBkZWZpbmUgVkFfUFVEXzAJCTUKLSMgZGVmaW5lIFBBX1BNRF8wCQk2Ci0jIGRlZmluZSBWQV9QTURfMAkJNwotIyBkZWZpbmUgUEFfUFRFXzAJCTgKLSMgZGVmaW5lIFZBX1BURV8wCQk5Ci0jIGRlZmluZSBQQV9QVURfMQkJMTAKLSMgZGVmaW5lIFZBX1BVRF8xCQkxMQotIyBkZWZpbmUgUEFfUE1EXzEJCTEyCi0jIGRlZmluZSBWQV9QTURfMQkJMTMKLSMgZGVmaW5lIFBBX1BURV8xCQkxNAotIyBkZWZpbmUgVkFfUFRFXzEJCTE1Ci0jIGRlZmluZSBQQV9UQUJMRV9QQUdFCQkxNgotIyBkZWZpbmUgUEFHRVNfTlIJCTE3CisjIGRlZmluZSBQQV9UQUJMRV9QQUdFCQkxCisjIGRlZmluZSBQQUdFU19OUgkJMgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC0xNTcsOSArMTQyLDkgQEAKIAkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKSBBVFRSSUJfTk9SRVQ7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfMzIKICNkZWZpbmUgQVJDSF9IQVNfS0lNQUdFX0FSQ0gKIAorI2lmZGVmIENPTkZJR19YODZfMzIKIHN0cnVjdCBraW1hZ2VfYXJjaCB7CiAJcGdkX3QgKnBnZDsKICNpZmRlZiBDT05GSUdfWDg2X1BBRQpAQCAtMTY5LDYgKzE1NCwxMiBAQAogCXB0ZV90ICpwdGUwOwogCXB0ZV90ICpwdGUxOwogfTsKKyNlbHNlCitzdHJ1Y3Qga2ltYWdlX2FyY2ggeworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworfTsKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IDg4NmM5NDAuLmRjM2Y2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIF9fS1ZNX0hBVkVfREVWSUNFX0FTU0lHTk1FTlQKICNkZWZpbmUgX19LVk1fSEFWRV9NU0kKICNkZWZpbmUgX19LVk1fSEFWRV9VU0VSX05NSQorI2RlZmluZSBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCiAKIC8qIEFyY2hpdGVjdHVyYWwgaW50ZXJydXB0IGxpbmUgY291bnQuICovCiAjZGVmaW5lIEtWTV9OUl9JTlRFUlJVUFRTIDI1NgpAQCAtMjEyLDcgKzIxMywzMCBAQAogCV9fczY0IGNvdW50X2xvYWRfdGltZTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKKwlfX3UzMiBleGNlcHRpb247CisJX191MzIgcGFkOworCV9fdTY0IHBjOworCV9fdTY0IGRyNjsKKwlfX3U2NCBkcjc7Cit9OworCisjZGVmaW5lIEtWTV9HVUVTVERCR19VU0VfU1dfQlAJCTB4MDAwMTAwMDAKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1VTRV9IV19CUAkJMHgwMDAyMDAwMAorI2RlZmluZSBLVk1fR1VFU1REQkdfSU5KRUNUX0RCCQkweDAwMDQwMDAwCisjZGVmaW5lIEtWTV9HVUVTVERCR19JTkpFQ1RfQlAJCTB4MDAwODAwMDAKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CisJX191NjQgZGVidWdyZWdbOF07Cit9OworCiBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSB7CiAJc3RydWN0IGt2bV9waXRfY2hhbm5lbF9zdGF0ZSBjaGFubmVsc1szXTsKIH07CisKK3N0cnVjdCBrdm1fcmVpbmplY3RfY29udHJvbCB7CisJX191OCBwaXRfcmVpbmplY3Q7CisJX191OCByZXNlcnZlZFszMV07Cit9OwogI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3MzA4NDNkLi5mMGZhZjU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vcHZjbG9jay1hYmkuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21zci1pbmRleC5oPgogCiAjZGVmaW5lIEtWTV9NQVhfVkNQVVMgMTYKICNkZWZpbmUgS1ZNX01FTU9SWV9TTE9UUyAzMgpAQCAtMTM0LDExICsxMzUsMTggQEAKIAogI2RlZmluZSBLVk1fTlJfTUVNX09CSlMgNDAKIAotc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgbG9uZyBicFs0XTsKLQlpbnQgc2luZ2xlc3RlcDsKLX07CisjZGVmaW5lIEtWTV9OUl9EQl9SRUdTCTQKKworI2RlZmluZSBEUjZfQkQJCSgxIDw8IDEzKQorI2RlZmluZSBEUjZfQlMJCSgxIDw8IDE0KQorI2RlZmluZSBEUjZfRklYRURfMQkweGZmZmYwZmYwCisjZGVmaW5lIERSNl9WT0xBVElMRQkweDAwMDBlMDBmCisKKyNkZWZpbmUgRFI3X0JQX0VOX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSBEUjdfR0UJCSgxIDw8IDkpCisjZGVmaW5lIERSN19HRAkJKDEgPDwgMTMpCisjZGVmaW5lIERSN19GSVhFRF8xCTB4MDAwMDA0MDAKKyNkZWZpbmUgRFI3X1ZPTEFUSUxFCTB4ZmZmZjIzZmYKIAogLyoKICAqIFdlIGRvbid0IHdhbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoaW4gdGhlIG1tdSBjb2RlLCBzbyB3ZSBwcmVhbGxvY2F0ZQpAQCAtMTYyLDcgKzE3MCw4IEBACiAgKiAgIGJpdHMgMDozIC0gdG90YWwgZ3Vlc3QgcGFnaW5nIGxldmVscyAoMi00LCBvciB6ZXJvIGZvciByZWFsIG1vZGUpCiAgKiAgIGJpdHMgNDo3IC0gcGFnZSB0YWJsZSBsZXZlbCBmb3IgdGhpcyBzaGFkb3cgKDEtNCkKICAqICAgYml0cyA4OjkgLSBwYWdlIHRhYmxlIHF1YWRyYW50IGZvciAyLWxldmVsIGd1ZXN0cwotICogICBiaXQgICAxNiAtICJtZXRhcGh5c2ljYWwiIC0gZ2ZuIGlzIG5vdCBhIHJlYWwgcGFnZSAoaHVnZSBwYWdlL3JlYWwgbW9kZSkKKyAqICAgYml0ICAgMTYgLSBkaXJlY3QgbWFwcGluZyBvZiB2aXJ0dWFsIHRvIHBoeXNpY2FsIG1hcHBpbmcgYXQgZ2ZuCisgKiAgICAgICAgICAgICAgdXNlZCBmb3IgcmVhbCBtb2RlIGFuZCB0d28tZGltZW5zaW9uYWwgcGFnaW5nCiAgKiAgIGJpdHMgMTc6MTkgLSBjb21tb24gYWNjZXNzIHBlcm1pc3Npb25zIGZvciBhbGwgcHRlcyBpbiB0aGlzIHNoYWRvdyBwYWdlCiAgKi8KIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHsKQEAgLTE3Miw5ICsxODEsMTAgQEAKIAkJdW5zaWduZWQgbGV2ZWw6NDsKIAkJdW5zaWduZWQgcXVhZHJhbnQ6MjsKIAkJdW5zaWduZWQgcGFkX2Zvcl9uaWNlX2hleF9vdXRwdXQ6NjsKLQkJdW5zaWduZWQgbWV0YXBoeXNpY2FsOjE7CisJCXVuc2lnbmVkIGRpcmVjdDoxOwogCQl1bnNpZ25lZCBhY2Nlc3M6MzsKIAkJdW5zaWduZWQgaW52YWxpZDoxOworCQl1bnNpZ25lZCBjcjRfcGdlOjE7CiAJfTsKIH07CiAKQEAgLTIxOCw2ICsyMjgsMTggQEAKIAljaGFyIGJ1Zls1MTJdIF9fYWxpZ25lZChzaXplb2YobG9uZykpOwogfTsKIAorc3RydWN0IGt2bV9waW9fcmVxdWVzdCB7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwlpbnQgY3VyX2NvdW50OworCWd2YV90IGd1ZXN0X2d2YTsKKwlpbnQgaW47CisJaW50IHBvcnQ7CisJaW50IHNpemU7CisJaW50IHN0cmluZzsKKwlpbnQgZG93bjsKKwlpbnQgcmVwOworfTsKKwogLyoKICAqIHg4NiBzdXBwb3J0cyAzIHBhZ2luZyBtb2RlcyAoNC1sZXZlbCA2NC1iaXQsIDMtbGV2ZWwgNjQtYml0LCBhbmQgMi1sZXZlbAogICogMzItYml0KS4gIFRoZSBrdm1fbW11IHN0cnVjdHVyZSBhYnN0cmFjdHMgdGhlIGRldGFpbHMgb2YgdGhlIGN1cnJlbnQgbW11CkBAIC0yMzYsNiArMjU4LDcgQEAKIAlocGFfdCByb290X2hwYTsKIAlpbnQgcm9vdF9sZXZlbDsKIAlpbnQgc2hhZG93X3Jvb3RfbGV2ZWw7CisJdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgYmFzZV9yb2xlOwogCiAJdTY0ICpwYWVfcm9vdDsKIH07CkBAIC0yNTgsNiArMjgxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGNyMzsKIAl1bnNpZ25lZCBsb25nIGNyNDsKIAl1bnNpZ25lZCBsb25nIGNyODsKKwl1MzIgaGZsYWdzOwogCXU2NCBwZHB0cnNbNF07IC8qIHBhZSAqLwogCXU2NCBzaGFkb3dfZWZlcjsKIAl1NjQgYXBpY19iYXNlOwpAQCAtMzM4LDYgKzM2MiwxNSBAQAogCiAJc3RydWN0IG10cnJfc3RhdGVfdHlwZSBtdHJyX3N0YXRlOwogCXUzMiBwYXQ7CisKKwlpbnQgc3dpdGNoX2RiX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBob3N0X2RiW0tWTV9OUl9EQl9SRUdTXTsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OworCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CisJdW5zaWduZWQgbG9uZyBkYltLVk1fTlJfREJfUkVHU107CisJdW5zaWduZWQgbG9uZyBkcjY7CisJdW5zaWduZWQgbG9uZyBkcjc7CisJdW5zaWduZWQgbG9uZyBlZmZfZGJbS1ZNX05SX0RCX1JFR1NdOwogfTsKIAogc3RydWN0IGt2bV9tZW1fYWxpYXMgewpAQCAtMzc4LDYgKzQxMSw3IEBACiAKIAl1bnNpZ25lZCBsb25nIGlycV9zb3VyY2VzX2JpdG1hcDsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0ZXNbS1ZNX0lPQVBJQ19OVU1fUElOU107CisJdTY0IHZtX2luaXRfdHNjOwogfTsKIAogc3RydWN0IGt2bV92bV9zdGF0IHsKQEAgLTQ0Niw4ICs0ODAsNyBAQAogCXZvaWQgKCp2Y3B1X3B1dCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCWludCAoKnNldF9ndWVzdF9kZWJ1Zykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZyk7Ci0Jdm9pZCAoKmd1ZXN0X2RlYnVnX3ByZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpOwogCWludCAoKmdldF9tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0ICpwZGF0YSk7CiAJaW50ICgqc2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgZGF0YSk7CiAJdTY0ICgqZ2V0X3NlZ21lbnRfYmFzZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKTsKQEAgLTU4MywxNiArNjE2LDEyIEBACiB2b2lkIGt2bV9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IyLAogCQkJICAgdTMyIGVycm9yX2NvZGUpOwogCi12b2lkIGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCk7CitpbnQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKIAogdm9pZCBrdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB2b2lkIGZ4X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotaW50IGVtdWxhdG9yX3JlYWRfc3RkKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgdm9pZCAqdmFsLAotCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgIGNvbnN0IHZvaWQgKnZhbCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCkBAIC03MzcsNiArNzY2LDEwIEBACiAJVEFTS19TV0lUQ0hfR0FURSA9IDMsCiB9OwogCisjZGVmaW5lIEhGX0dJRl9NQVNLCQkoMSA8PCAwKQorI2RlZmluZSBIRl9ISUZfTUFTSwkJKDEgPDwgMSkKKyNkZWZpbmUgSEZfVklOVFJfTUFTSwkJKDEgPDwgMikKKwogLyoKICAqIEhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgbWF5IGZhdWx0IGlmIGEKICAqIHJlYm9vdCB0dXJucyBvZmYgdmlydHVhbGl6YXRpb24gd2hpbGUgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCmluZGV4IDVkOThkMGI2Li45MzIwZTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCkBAIC01Miw3MCArNTIsMTQgQEAKIAogI2VuZGlmCiAKKyNkZWZpbmUgR0xPQkFMKG5hbWUpCVwKKwkuZ2xvYmwgbmFtZTsJXAorCW5hbWU6CisKICNpZmRlZiBDT05GSUdfWDg2X0FMSUdOTUVOVF8xNgogI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAxNiwweDkwCiAjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMTYsMHg5MCIKICNlbmRpZgogCi0vKgotICogdG8gY2hlY2sgRU5UUllfWDg2L0VORF9YODYgYW5kCi0gKiBLUFJPQkVfRU5UUllfWDg2L0tQUk9CRV9FTkRfWDg2Ci0gKiB1bmJhbGFuY2VkLW1pc3NlZC1taXhlZCBhcHBlYXJhbmNlCi0gKi8KLSNkZWZpbmUgX19zZXRfZW50cnlfeDg2CQkuc2V0IEVOVFJZX1g4Nl9JTiwgMAotI2RlZmluZSBfX3Vuc2V0X2VudHJ5X3g4Ngkuc2V0IEVOVFJZX1g4Nl9JTiwgMQotI2RlZmluZSBfX3NldF9rcHJvYmVfeDg2CS5zZXQgS1BST0JFX1g4Nl9JTiwgMAotI2RlZmluZSBfX3Vuc2V0X2twcm9iZV94ODYJLnNldCBLUFJPQkVfWDg2X0lOLCAxCi0KLSNkZWZpbmUgX19tYWNyb19lcnJfeDg2IC5lcnJvciAiRU5UUllfWDg2L0tQUk9CRV9YODYgdW5iYWxhbmNlZCxtaXNzZWQsbWl4ZWQiCi0KLSNkZWZpbmUgX19jaGVja19lbnRyeV94ODYJXAotCS5pZmRlZiBFTlRSWV9YODZfSU47CVwKLQkuaWZlcSBFTlRSWV9YODZfSU47CVwKLQlfX21hY3JvX2Vycl94ODY7CVwKLQkuYWJvcnQ7CQkJXAotCS5lbmRpZjsJCQlcCi0JLmVuZGlmCi0KLSNkZWZpbmUgX19jaGVja19rcHJvYmVfeDg2CVwKLQkuaWZkZWYgS1BST0JFX1g4Nl9JTjsJXAotCS5pZmVxIEtQUk9CRV9YODZfSU47CVwKLQlfX21hY3JvX2Vycl94ODY7CVwKLQkuYWJvcnQ7CQkJXAotCS5lbmRpZjsJCQlcCi0JLmVuZGlmCi0KLSNkZWZpbmUgX19jaGVja19lbnRyeV9rcHJvYmVfeDg2CVwKLQlfX2NoZWNrX2VudHJ5X3g4NjsJCVwKLQlfX2NoZWNrX2twcm9iZV94ODYKLQotI2RlZmluZSBFTlRSWV9LUFJPQkVfRklOQUxfWDg2IF9fY2hlY2tfZW50cnlfa3Byb2JlX3g4NgotCi0jZGVmaW5lIEVOVFJZX1g4NihuYW1lKQkJCVwKLQlfX2NoZWNrX2VudHJ5X2twcm9iZV94ODY7CVwKLQlfX3NldF9lbnRyeV94ODY7CQlcCi0JLmdsb2JsIG5hbWU7CQkJXAotCV9fQUxJR047CQkJXAotCW5hbWU6Ci0KLSNkZWZpbmUgRU5EX1g4NihuYW1lKQkJCVwKLQlfX3Vuc2V0X2VudHJ5X3g4NjsJCVwKLQlfX2NoZWNrX2VudHJ5X2twcm9iZV94ODY7CVwKLQkuc2l6ZSBuYW1lLCAuLW5hbWUKLQotI2RlZmluZSBLUFJPQkVfRU5UUllfWDg2KG5hbWUpCQlcCi0JX19jaGVja19lbnRyeV9rcHJvYmVfeDg2OwlcCi0JX19zZXRfa3Byb2JlX3g4NjsJCVwKLQkucHVzaHNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IjsgXAotCS5nbG9ibCBuYW1lOwkJCVwKLQlfX0FMSUdOOwkJCVwKLQluYW1lOgotCi0jZGVmaW5lIEtQUk9CRV9FTkRfWDg2KG5hbWUpCQlcCi0JX191bnNldF9rcHJvYmVfeDg2OwkJXAotCV9fY2hlY2tfZW50cnlfa3Byb2JlX3g4NjsJXAotCS5zaXplIG5hbWUsIC4tbmFtZTsJCVwKLQkucG9wc2VjdGlvbgotCiAjZW5kaWYgLyogX0FTTV9YODZfTElOS0FHRV9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjFhZGQ4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIGRlc2lnbmVkIHRvIGNvbnRhaW4gdGhlIEJVSUxEX0lOVEVSUlVQVCBzcGVjaWZpY2F0aW9ucyBmb3IKLSAqIGFsbCBvZiB0aGUgZXh0cmEgbmFtZWQgaW50ZXJydXB0IHZlY3RvcnMgdXNlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLgotICogVXN1YWxseSB0aGlzIGlzIHRoZSBJbnRlciBQcm9jZXNzIEludGVycnVwdHMgKElQSXMpCi0gKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgcGFydCBvZiB0aGUgTGludXggYXJjaGl0ZWN0dXJlLCB0aGVyZQotICogaXMgbm8gaGFyZHdhcmUgSVJRIHBpbiBlcXVpdmFsZW50IGZvciB0aGVtLCB0aGV5IGFyZSB0cmlnZ2VyZWQKLSAqIHRocm91Z2ggdGhlIElDQyBieSB1cyAoSVBJcykKLSAqLwotI2lmZGVmIENPTkZJR19YODZfU01QCi1CVUlMRF9JTlRFUlJVUFQocmVzY2hlZHVsZV9pbnRlcnJ1cHQsUkVTQ0hFRFVMRV9WRUNUT1IpCi1CVUlMRF9JTlRFUlJVUFQoaW52YWxpZGF0ZV9pbnRlcnJ1cHQsSU5WQUxJREFURV9UTEJfVkVDVE9SKQotQlVJTERfSU5URVJSVVBUKGNhbGxfZnVuY3Rpb25faW50ZXJydXB0LENBTExfRlVOQ1RJT05fVkVDVE9SKQotQlVJTERfSU5URVJSVVBUKGNhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCxDQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IpCi1CVUlMRF9JTlRFUlJVUFQoaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQsSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpCi0jZW5kaWYKLQotLyoKLSAqIGV2ZXJ5IHBlbnRpdW0gbG9jYWwgQVBJQyBoYXMgdHdvICdsb2NhbCBpbnRlcnJ1cHRzJywgd2l0aCBhCi0gKiBzb2Z0LWRlZmluYWJsZSB2ZWN0b3IgYXR0YWNoZWQgdG8gYm90aCBpbnRlcnJ1cHRzLCBvbmUgb2YKLSAqIHdoaWNoIGlzIGEgdGltZXIgaW50ZXJydXB0LCB0aGUgb3RoZXIgb25lIGlzIGVycm9yIGNvdW50ZXIKLSAqIG92ZXJmbG93LiBMaW51eCB1c2VzIHRoZSBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdCB0byBnZXQKLSAqIGEgbXVjaCBzaW1wbGVyIFNNUCB0aW1lIGFyY2hpdGVjdHVyZToKLSAqLwotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotQlVJTERfSU5URVJSVVBUKGFwaWNfdGltZXJfaW50ZXJydXB0LExPQ0FMX1RJTUVSX1ZFQ1RPUikKLUJVSUxEX0lOVEVSUlVQVChlcnJvcl9pbnRlcnJ1cHQsRVJST1JfQVBJQ19WRUNUT1IpCi1CVUlMRF9JTlRFUlJVUFQoc3B1cmlvdXNfaW50ZXJydXB0LFNQVVJJT1VTX0FQSUNfVkVDVE9SKQotCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMCi1CVUlMRF9JTlRFUlJVUFQodGhlcm1hbF9pbnRlcnJ1cHQsVEhFUk1BTF9BUElDX1ZFQ1RPUikKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MwOWNiYi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfQVBJQ19ICi0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLQotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfRkxBVCkKLQotc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdGFyZ2V0X2NwdXModm9pZCkKLXsgCi0jaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiBjcHVfb25saW5lX21hc2s7Ci0jZWxzZQotCXJldHVybiBjcHVtYXNrX29mKDApOwotI2VuZGlmCi19IAotCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgwKQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMCkKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUpCi0jZGVmaW5lIElOVF9ERVNUX01PREUgKGdlbmFwaWMtPmludF9kZXN0X21vZGUpCi0jZGVmaW5lIFRBUkdFVF9DUFVTCSAgKGdlbmFwaWMtPnRhcmdldF9jcHVzKCkpCi0jZGVmaW5lIGFwaWNfaWRfcmVnaXN0ZXJlZCAoZ2VuYXBpYy0+YXBpY19pZF9yZWdpc3RlcmVkKQotI2RlZmluZSBpbml0X2FwaWNfbGRyIChnZW5hcGljLT5pbml0X2FwaWNfbGRyKQotI2RlZmluZSBjcHVfbWFza190b19hcGljaWQgKGdlbmFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZCkKLSNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkX2FuZCAoZ2VuYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZCkKLSNkZWZpbmUgcGh5c19wa2dfaWQJKGdlbmFwaWMtPnBoeXNfcGtnX2lkKQotI2RlZmluZSB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gICAgKGdlbmFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikKLSNkZWZpbmUgcmVhZF9hcGljX2lkKCkgIChHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpKQotI2RlZmluZSBzZW5kX0lQSV9zZWxmIChnZW5hcGljLT5zZW5kX0lQSV9zZWxmKQotI2RlZmluZSB3YWtldXBfc2Vjb25kYXJ5X2NwdSAoZ2VuYXBpYy0+d2FrZXVwX2NwdSkKLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKLSNlbHNlCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIGRlc3RfTG93ZXN0UHJpbwotI2RlZmluZSBJTlRfREVTVF9NT0RFIDEgICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLwotI2RlZmluZSBUQVJHRVRfQ1BVUyAodGFyZ2V0X2NwdXMoKSkKLSNkZWZpbmUgd2FrZXVwX3NlY29uZGFyeV9jcHUgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX2luaXQKLS8qCi0gKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCi0gKgotICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0gKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOwotCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKLQl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRCgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KHJlYWRfYXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKLXsKLQlyZXR1cm4gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2sxID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOwotCXVuc2lnbmVkIGxvbmcgbWFzazIgPSBjcHVtYXNrX2JpdHMoYW5kbWFzaylbMF07Ci0JdW5zaWduZWQgbG9uZyBtYXNrMyA9IGNwdW1hc2tfYml0cyhjcHVfb25saW5lX21hc2spWzBdOwotCi0JcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1hc2sxICYgbWFzazIgJiBtYXNrMyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCQkJCSJGbGF0IiwgbnJfaW9hcGljcyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCi17Ci0gICAgICAgIC8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCi0gICAgICAgICAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0Ci0gICAgICAgICAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgotICAgICAgICAgKgotICAgICAgICAgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bwotICAgICAgICAgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKLSAgICAgICAgICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KLSAgICAgICAgICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUyB9IH07Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCi17Ci0JcmV0dXJuIHBoeXNfbWFwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQotewotCXJldHVybiAxIDw8IGNwdTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmIChtcHNfY3B1IDwgbnJfY3B1X2lkcyAmJiBjcHVfcHJlc2VudChtcHNfY3B1KSkKLQkJcmV0dXJuIChpbnQpcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuIHBoeXNpZF9pc3NldChib290X2NwdV9waHlzaWNhbF9hcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWNkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxNzk5My4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0FQSUNERUZfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDREVGX0gKLQotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lCUFQSUNfSURfTUFTSwkJKGdlbmFwaWMtPmFwaWNfaWRfbWFzaykKLSNkZWZpbmUgR0VUX0FQSUNfSUQoeCkJCShnZW5hcGljLT5nZXRfYXBpY19pZCh4KSkKLSNkZWZpbmUJU0VUX0FQSUNfSUQoeCkJCShnZW5hcGljLT5zZXRfYXBpY19pZCh4KSkKLSNlbHNlCi0jZGVmaW5lCQlBUElDX0lEX01BU0sJCSgweEY8PDI0KQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpIAotewotCXVuc2lnbmVkIGludCB2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotCWlmIChBUElDX1hBUElDKHZlcikpCi0JCXJldHVybiAoKCh4KT4+MjQpJjB4RkYpOwotCWVsc2UKLQkJcmV0dXJuICgoKHgpPj4yNCkmMHhGKTsKLX0gCi0KLSNkZWZpbmUJCUdFVF9BUElDX0lEKHgpCWdldF9hcGljX2lkKHgpCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0FQSUNERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxMzEyZC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfSVBJX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfSVBJX0gKLQotLyogQXZvaWQgaW5jbHVkZSBoZWxsICovCi0jZGVmaW5lIE5NSV9WRUNUT1IgMHgwMgotCi12b2lkIHNlbmRfSVBJX21hc2tfYml0bWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIF9fc2VuZF9JUElfc2hvcnRjdXQodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKTsKLQotZXh0ZXJuIGludCBub19icm9hZGNhc3Q7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKLSNkZWZpbmUgc2VuZF9JUElfbWFza19hbGxidXRzZWxmIChnZW5hcGljLT5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYpCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFza19iaXRtYXNrKG1hc2ssIHZlY3Rvcik7Ci19Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9fbG9jYWxfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCWlmIChub19icm9hZGNhc3QgfHwgdmVjdG9yID09IE5NSV9WRUNUT1IpCi0JCXNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci0JZWxzZQotCQlfX3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExCVVQsIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2xvY2FsX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCWlmIChub19icm9hZGNhc3QgfHwgdmVjdG9yID09IE5NSV9WRUNUT1IpCi0JCXNlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotCWVsc2UKLQkJX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMSU5DLCB2ZWN0b3IpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBzZW5kX0lQSV9hbGxidXRzZWxmIChnZW5hcGljLT5zZW5kX0lQSV9hbGxidXRzZWxmKQotI2RlZmluZSBzZW5kX0lQSV9hbGwgKGdlbmFwaWMtPnNlbmRfSVBJX2FsbCkKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCS8qCi0JICogaWYgdGhlcmUgYXJlIG5vIG90aGVyIENQVXMgaW4gdGhlIHN5c3RlbSB0aGVuIHdlIGdldCBhbiBBUElDIHNlbmQgCi0JICogZXJyb3IgaWYgd2UgdHJ5IHRvIGJyb2FkY2FzdCwgdGh1cyBhdm9pZCBzZW5kaW5nIElQSXMgaW4gdGhpcyBjYXNlLgotCSAqLwotCWlmICghKG51bV9vbmxpbmVfY3B1cygpID4gMSkpCi0JCXJldHVybjsKLQotCV9fbG9jYWxfc2VuZF9JUElfYWxsYnV0c2VsZih2ZWN0b3IpOwotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCV9fbG9jYWxfc2VuZF9JUElfYWxsKHZlY3Rvcik7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MGEyNjMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9NUFBBUlNFX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBQQVJTRV9ICi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfbXBzcGVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1ZWRlNi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBTUEVDX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBTUEVDX0gKLQotI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2Ci0KLSNpZiBDT05GSUdfQkFTRV9TTUFMTCA9PSAwCi0jZGVmaW5lIE1BWF9NUF9CVVNTRVMgMjU2Ci0jZWxzZQotI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODk3YTYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9XQUtFQ1BVX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfV0FLRUNQVV9ICi0KLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0xPVyAoMHg0NjcpCi0jZGVmaW5lIFRSQU1QT0xJTkVfUEhZU19ISUdIICgweDQ2OSkKLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2luaXRfZGVhc3NlcnQoYXRvbWljX3QgKmRlYXNzZXJ0KQotewotCXdoaWxlICghYXRvbWljX3JlYWQoZGVhc3NlcnQpKQotCQljcHVfcmVsYXgoKTsKLQlyZXR1cm47Ci19Ci0KLS8qIE5vdGhpbmcgdG8gZG8gZm9yIG1vc3QgcGxhdGZvcm1zLCBzaW5jZSBjbGVhcmVkIGJ5IHRoZSBJTklUIGN5Y2xlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZV9OTUlfdmVjdG9yKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9OTUlfdmVjdG9yKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KQotewotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpOwotI2Vsc2UgLyogQ09ORklHX1NNUCAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5xdWlyZV9yZW1vdGVfYXBpYyhpbnQgYXBpY2lkKQotewotfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGlucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCkKLXsKLQlpZiAoYXBpY192ZXJib3NpdHkgPj0gQVBJQ19ERUJVRykKLQkJX19pbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCk7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9XQUtFQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2JmNTIxLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiB0d28gYWJzdHJhY3Rpb25zIHNwZWNpZmljIHRvIGtlcm5lbC9zbXBib290LmMsIG1haW5seSB0byBjYXRlciB0byB2aXN3cwotICogd2hpY2ggbmVlZHMgdG8gYWx0ZXIgdGhlbS4gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfY2xlYXJfaW9fYXBpY19pcnFzKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JaW9fYXBpY19pcnFzID0gMDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wYm9vdF9zZXR1cF93YXJtX3Jlc2V0X3ZlY3Rvcih1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCkKLXsKLQlDTU9TX1dSSVRFKDB4YSwgMHhmKTsKLQlsb2NhbF9mbHVzaF90bGIoKTsKLQlwcl9kZWJ1ZygiMS5cbiIpOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19ISUdIKSkgPQotCQkJCQkJCQkgc3RhcnRfZWlwID4+IDQ7Ci0JcHJfZGVidWcoIjIuXG4iKTsKLQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChUUkFNUE9MSU5FX1BIWVNfTE9XKSkgPQotCQkJCQkJCSBzdGFydF9laXAgJiAweGY7Ci0JcHJfZGVidWcoIjMuXG4iKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfcmVzdG9yZV93YXJtX3Jlc2V0X3ZlY3Rvcih2b2lkKQotewotCS8qCi0JICogSW5zdGFsbCB3cml0YWJsZSBwYWdlIDAgZW50cnkgdG8gc2V0IEJJT1MgZGF0YSBhcmVhLgotCSAqLwotCWxvY2FsX2ZsdXNoX3RsYigpOwotCi0JLyoKLQkgKiBQYXJhbm9pZDogIFNldCB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3RvciBoZXJlIGJhY2sKLQkgKiB0byBkZWZhdWx0IHZhbHVlcy4KLQkgKi8KLQlDTU9TX1dSSVRFKDAsIDB4Zik7Ci0KLQkqKCh2b2xhdGlsZSBsb25nICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19MT1cpKSA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc21wYm9vdF9zZXR1cF9pb19hcGljKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JLyoKLQkgKiBIZXJlIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gSU8tQVBJQyBpbiB0aGUgc3lzdGVtLiBMZXQncwotCSAqIGdvIGFuZCBzZXQgaXQgdXA6Ci0JICovCi0JaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQlzZXR1cF9JT19BUElDKCk7Ci0JZWxzZSB7Ci0JCW5yX2lvYXBpY3MgPSAwOwotCQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfY2xlYXJfaW9fYXBpYyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCW5yX2lvYXBpY3MgPSAwOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvZ3Bpby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2dwaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1YzQ1ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfR1BJT19ICi0jZGVmaW5lIF9BU01fWDg2X01BQ0hfR0VORVJJQ19HUElPX0gKLQotaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCk7Ci12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKLXZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKLWludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpOwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPiAgICAgICAgICAgLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1NTNlOS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDX0gKLQotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0KLSNkZWZpbmUgZXNyX2Rpc2FibGUgKGdlbmFwaWMtPkVTUl9ESVNBQkxFKQotI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoZ2VuYXBpYy0+bm9fYmFsYW5jZV9pcnEpCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChnZW5hcGljLT5pbnRfZGVsaXZlcnlfbW9kZSkKLSNkZWZpbmUgSU5UX0RFU1RfTU9ERSAoZ2VuYXBpYy0+aW50X2Rlc3RfbW9kZSkKLSN1bmRlZiBBUElDX0RFU1RfTE9HSUNBTAotI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTCAoZ2VuYXBpYy0+YXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsKQotI2RlZmluZSBUQVJHRVRfQ1BVUwkgIChnZW5hcGljLT50YXJnZXRfY3B1cygpKQotI2RlZmluZSBhcGljX2lkX3JlZ2lzdGVyZWQgKGdlbmFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCkKLSNkZWZpbmUgaW5pdF9hcGljX2xkciAoZ2VuYXBpYy0+aW5pdF9hcGljX2xkcikKLSNkZWZpbmUgaW9hcGljX3BoeXNfaWRfbWFwIChnZW5hcGljLT5pb2FwaWNfcGh5c19pZF9tYXApCi0jZGVmaW5lIHNldHVwX2FwaWNfcm91dGluZyAoZ2VuYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKQotI2RlZmluZSBtdWx0aV90aW1lcl9jaGVjayAoZ2VuYXBpYy0+bXVsdGlfdGltZXJfY2hlY2spCi0jZGVmaW5lIGFwaWNpZF90b19ub2RlIChnZW5hcGljLT5hcGljaWRfdG9fbm9kZSkKLSNkZWZpbmUgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkIChnZW5hcGljLT5jcHVfdG9fbG9naWNhbF9hcGljaWQpIAotI2RlZmluZSBjcHVfcHJlc2VudF90b19hcGljaWQgKGdlbmFwaWMtPmNwdV9wcmVzZW50X3RvX2FwaWNpZCkKLSNkZWZpbmUgYXBpY2lkX3RvX2NwdV9wcmVzZW50IChnZW5hcGljLT5hcGljaWRfdG9fY3B1X3ByZXNlbnQpCi0jZGVmaW5lIHNldHVwX3BvcnRpb19yZW1hcCAoZ2VuYXBpYy0+c2V0dXBfcG9ydGlvX3JlbWFwKQotI2RlZmluZSBjaGVja19hcGljaWRfcHJlc2VudCAoZ2VuYXBpYy0+Y2hlY2tfYXBpY2lkX3ByZXNlbnQpCi0jZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCi0jZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKLSNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCi0jZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQgKGdlbmFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQpCi0jZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiAoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQotI2RlZmluZSBlbmFibGVfYXBpY19tb2RlIChnZW5hcGljLT5lbmFibGVfYXBpY19tb2RlKQotI2RlZmluZSBwaHlzX3BrZ19pZCAoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCi0jZGVmaW5lIHdha2V1cF9zZWNvbmRhcnlfY3B1IChnZW5hcGljLT53YWtldXBfY3B1KQotCi1leHRlcm4gdm9pZCBnZW5lcmljX2JpZ3NtcF9wcm9iZSh2b2lkKTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA0MWYzLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfQVBJQ0RFRl9ICi0jZGVmaW5lIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNERUZfSAotCi0jaWZuZGVmIEFQSUNfREVGSU5JVElPTgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0KLSNkZWZpbmUgR0VUX0FQSUNfSUQgKGdlbmFwaWMtPmdldF9hcGljX2lkKQotI2RlZmluZSBBUElDX0lEX01BU0sgKGdlbmFwaWMtPmFwaWNfaWRfbWFzaykKLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfQVBJQ0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2lwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQ2MzdlLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9JUElfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9JUElfSAotCi0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLQotI2RlZmluZSBzZW5kX0lQSV9tYXNrIChnZW5hcGljLT5zZW5kX0lQSV9tYXNrKQotI2RlZmluZSBzZW5kX0lQSV9hbGxidXRzZWxmIChnZW5hcGljLT5zZW5kX0lQSV9hbGxidXRzZWxmKQotI2RlZmluZSBzZW5kX0lQSV9hbGwgKGdlbmFwaWMtPnNlbmRfSVBJX2FsbCkKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NDRhYjguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBwYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QUEFSU0VfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFBBUlNFX0gKLQotCi1leHRlcm4gaW50IG1wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqLCBjaGFyICosIGNoYXIgKik7Ci0KLWV4dGVybiBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX21wc3BlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYzQwNzIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBzcGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QU1BFQ19ICi0jZGVmaW5lIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QU1BFQ19ICi0KLSNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTIDI1NgotCi0vKiBTdW1taXQgb3IgZ2VuZXJpYyAoaS5lLiBpbnN0YWxsZXIpIGtlcm5lbHMgbmVlZCBsb3RzIG9mIGJ1cyBlbnRyaWVzLiAqLwotLyogTWF4aW11bSAyNTYgUENJIGJ1c3NlcywgcGx1cyAxIElTQSBidXMgaW4gZWFjaCBvZiA0IGNhYmluZXRzLiAqLwotI2RlZmluZSBNQVhfTVBfQlVTU0VTIDI2MAotCi1leHRlcm4gdm9pZCBudW1hcV9tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKiwgY2hhciAqLCBjaGFyICopOwotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfTVBTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX3dha2VjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX3dha2VjcHUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFiMTZiMS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF93YWtlY3B1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX1dBS0VDUFVfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9XQUtFQ1BVX0gKLQotI2RlZmluZSBUUkFNUE9MSU5FX1BIWVNfTE9XIChnZW5hcGljLT50cmFtcG9saW5lX3BoeXNfbG93KQotI2RlZmluZSBUUkFNUE9MSU5FX1BIWVNfSElHSCAoZ2VuYXBpYy0+dHJhbXBvbGluZV9waHlzX2hpZ2gpCi0jZGVmaW5lIHdhaXRfZm9yX2luaXRfZGVhc3NlcnQgKGdlbmFwaWMtPndhaXRfZm9yX2luaXRfZGVhc3NlcnQpCi0jZGVmaW5lIHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYyAoZ2VuYXBpYy0+c21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKQotI2RlZmluZSBzdG9yZV9OTUlfdmVjdG9yIChnZW5hcGljLT5zdG9yZV9OTUlfdmVjdG9yKQotI2RlZmluZSByZXN0b3JlX05NSV92ZWN0b3IgKGdlbmFwaWMtPnJlc3RvcmVfTk1JX3ZlY3RvcikKLSNkZWZpbmUgaW5xdWlyZV9yZW1vdGVfYXBpYyAoZ2VuYXBpYy0+aW5xdWlyZV9yZW1vdGVfYXBpYykKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1yZGMzMjF4L2dwaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtcmRjMzIxeC9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMTBhYjUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1yZGMzMjF4L2dwaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9SREMzMjFYX0dQSU9fSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX1JEQzMyMVhfR1BJT19ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotZXh0ZXJuIGludCByZGNfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCByZGNfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgcmRjX2dwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwotZXh0ZXJuIGludCByZGNfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IHJkY19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwotZXh0ZXJuIHZvaWQgcmRjX2dwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiB2b2lkIF9faW5pdCByZGMzMjF4X2dwaW9fc2V0dXAodm9pZCk7Ci0KLS8qIFdyYXBwZXJzIGZvciB0aGUgYXJjaC1uZXV0cmFsIEdQSU8gQVBJICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlyZXR1cm4gcmRjX2dwaW9fcmVxdWVzdChncGlvLCBsYWJlbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKLXsKLQltaWdodF9zbGVlcCgpOwotCXJkY19ncGlvX2ZyZWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIHJkY19ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlyZXR1cm4gcmRjX2dwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIHJkY19ncGlvX2dldF92YWx1ZShncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlyZGNfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBncGlvOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JcmV0dXJuIGlycTsKLX0KLQotLyogRm9yIGNhbnNsZWVwICovCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9SREMzMjFYX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXZveWFnZXIvZG9fdGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1YTQ1OS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXZveWFnZXIvZG9fdGltZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIGRlZmluZXMgZm9yIGlubGluZSBhcmNoIHNldHVwIGZ1bmN0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLQotI2luY2x1ZGUgPGFzbS92b3lhZ2VyLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjUzLmg+Ci0KLS8qKgotICogZG9fdGltZXJfaW50ZXJydXB0X2hvb2sgLSBob29rIGludG8gdGltZXIgdGljawotICoKLSAqIENhbGwgdGhlIHBpdCBjbG9jayBldmVudCBoYW5kbGVyLiBzZWUgYXNtL2k4MjUzLmgKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb190aW1lcl9pbnRlcnJ1cHRfaG9vayh2b2lkKQotewotCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlcihnbG9iYWxfY2xvY2tfZXZlbnQpOwotCXZveWFnZXJfdGltZXJfaW50ZXJydXB0KCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXZveWFnZXIvZW50cnlfYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTUyNjI0Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0KLS8qIENvcHlyaWdodCAoQykgMjAwMgotICoKLSAqIEF1dGhvcjogSmFtZXMuQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQotICoKLSAqIGxpbnV4L2FyY2gvaTM4Ni92b3lhZ2VyL2VudHJ5X2FyY2guaAotICoKLSAqIFRoaXMgZmlsZSBidWlsZHMgdGhlIFZJQyBhbmQgUUlDIENQSSBnYXRlcwotICovCi0KLS8qIGluaXRpYWxpc2UgdGhlIHZveWFnZXIgaW50ZXJydXB0IGdhdGVzIAotICoKLSAqIFRoaXMgdXNlcyB0aGUgbWFjcm9zIGluIGlycS5oIHRvIHNldCB1cCBhc3NlbWJseSBqdW1wIGdhdGVzLiAgVGhlCi0gKiBjYWxscyBhcmUgdGhlbiByZWRpcmVjdGVkIHRvIHRoZSBzYW1lIHJvdXRpbmUgd2l0aCBzbXBfIHByZWZpeGVkICovCi1CVUlMRF9JTlRFUlJVUFQodmljX3N5c19pbnRlcnJ1cHQsIFZJQ19TWVNfSU5UKQotQlVJTERfSU5URVJSVVBUKHZpY19jbW5faW50ZXJydXB0LCBWSUNfQ01OX0lOVCkKLUJVSUxEX0lOVEVSUlVQVCh2aWNfY3BpX2ludGVycnVwdCwgVklDX0NQSV9MRVZFTDApOwotCi0vKiBkbyBhbGwgdGhlIFFJQyBpbnRlcnJ1cHRzICovCi1CVUlMRF9JTlRFUlJVUFQocWljX3RpbWVyX2ludGVycnVwdCwgUUlDX1RJTUVSX0NQSSk7Ci1CVUlMRF9JTlRFUlJVUFQocWljX2ludmFsaWRhdGVfaW50ZXJydXB0LCBRSUNfSU5WQUxJREFURV9DUEkpOwotQlVJTERfSU5URVJSVVBUKHFpY19yZXNjaGVkdWxlX2ludGVycnVwdCwgUUlDX1JFU0NIRURVTEVfQ1BJKTsKLUJVSUxEX0lOVEVSUlVQVChxaWNfZW5hYmxlX2lycV9pbnRlcnJ1cHQsIFFJQ19FTkFCTEVfSVJRX0NQSSk7Ci1CVUlMRF9JTlRFUlJVUFQocWljX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0LCBRSUNfQ0FMTF9GVU5DVElPTl9DUEkpOwotQlVJTERfSU5URVJSVVBUKHFpY19jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQsIFFJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL3NldHVwX2FyY2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9zZXR1cF9hcmNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNzI5Y2EuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL3NldHVwX2FyY2guaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpbmNsdWRlIDxhc20vdm95YWdlci5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2RlZmluZSBWT1lBR0VSX0JJT1NfSU5GTyAoKHN0cnVjdCB2b3lhZ2VyX2Jpb3NfaW5mbyAqKSBcCi0JCQkoJmJvb3RfcGFyYW1zLmFwbV9iaW9zX2luZm8pKQotCi0vKiBIb29rIHRvIGNhbGwgQklPUyBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbiAqLwotCi0vKiBmb3Igdm95YWdlciwgcGFzcyB0aGUgdm95YWdlciBCSU9TL1NVUyBpbmZvIGFyZWEgdG8gdGhlIGRldGVjdGlvbgotICogcm91dGluZXMgKi8KLQotI2RlZmluZSBBUkNIX1NFVFVQCXZveWFnZXJfZGV0ZWN0KFZPWUFHRVJfQklPU19JTkZPKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2hfdGltZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfdGltZXIuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaF90aW1lci5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaF90cmFwcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoX3RyYXBzLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDhhZWViM2YuLmY5MjMyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMjEsMTEgKzIxLDU0IEBACiBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJtbXVfY29udGV4dF8zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAibW11X2NvbnRleHRfNjQuaCIKKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfT0spCisJCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX0xBWlkpOwogI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CisJCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCisJCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKKyNpZmRlZiBDT05GSUdfU01QCisJCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX09LKTsKKwkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0sIG5leHQpOworI2VuZGlmCisJCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7CisKKwkJLyogUmUtbG9hZCBwYWdlIHRhYmxlcyAqLworCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOworCisJCS8qCisJCSAqIGxvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6CisJCSAqLworCQlpZiAodW5saWtlbHkocHJldi0+Y29udGV4dC5sZHQgIT0gbmV4dC0+Y29udGV4dC5sZHQpKQorCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKKwl9CisjaWZkZWYgQ09ORklHX1NNUAorCWVsc2UgeworCQlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLnN0YXRlLCBUTEJTVEFURV9PSyk7CisJCUJVR19PTihwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuYWN0aXZlX21tKSAhPSBuZXh0KTsKKworCQlpZiAoIWNwdV90ZXN0X2FuZF9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzaykpIHsKKwkJCS8qIFdlIHdlcmUgaW4gbGF6eSB0bGIgbW9kZSBhbmQgbGVhdmVfbW0gZGlzYWJsZWQKKwkJCSAqIHRsYiBmbHVzaCBJUEkgZGVsaXZlcnkuIFdlIG11c3QgcmVsb2FkIENSMworCQkJICogdG8gbWFrZSBzdXJlIHRvIHVzZSBubyBmcmVlZCBwYWdlIHRhYmxlcy4KKwkJCSAqLworCQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKKwkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7CisJCX0KKwl9CisjZW5kaWYKK30KIAogI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LCBuZXh0KQkJCVwKIGRvIHsJCQkJCQlcCkBAIC0zMyw1ICs3NiwxNyBAQAogCXN3aXRjaF9tbSgocHJldiksIChuZXh0KSwgTlVMTCk7CVwKIH0gd2hpbGUgKDApOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzaywgbW0pCQkJXAorZG8gewkJCQkJCVwKKwlsYXp5X2xvYWRfZ3MoMCk7CQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCitkbyB7CQkJCQkJXAorCWxvYWRfZ3NfaW5kZXgoMCk7CQkJXAorCWxvYWRzZWdtZW50KGZzLCAwKTsJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5OGNlMS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF8zMl9ICi0jZGVmaW5lIF9BU01fWDg2X01NVV9DT05URVhUXzMyX0gKLQotc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHg4Nl9yZWFkX3BlcmNwdShjcHVfdGxic3RhdGUuc3RhdGUpID09IFRMQlNUQVRFX09LKQotCQl4ODZfd3JpdGVfcGVyY3B1KGNwdV90bGJzdGF0ZS5zdGF0ZSwgVExCU1RBVEVfTEFaWSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAotCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAotCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7Ci0JCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCi0JCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXg4Nl93cml0ZV9wZXJjcHUoY3B1X3RsYnN0YXRlLnN0YXRlLCBUTEJTVEFURV9PSyk7Ci0JCXg4Nl93cml0ZV9wZXJjcHUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSwgbmV4dCk7Ci0jZW5kaWYKLQkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKLQotCQkvKiBSZS1sb2FkIHBhZ2UgdGFibGVzICovCi0JCWxvYWRfY3IzKG5leHQtPnBnZCk7Ci0KLQkJLyoKLQkJICogbG9hZCB0aGUgTERULCBpZiB0aGUgTERUIGlzIGRpZmZlcmVudDoKLQkJICovCi0JCWlmICh1bmxpa2VseShwcmV2LT5jb250ZXh0LmxkdCAhPSBuZXh0LT5jb250ZXh0LmxkdCkpCi0JCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwotCX0KLSNpZmRlZiBDT05GSUdfU01QCi0JZWxzZSB7Ci0JCXg4Nl93cml0ZV9wZXJjcHUoY3B1X3RsYnN0YXRlLnN0YXRlLCBUTEJTVEFURV9PSyk7Ci0JCUJVR19PTih4ODZfcmVhZF9wZXJjcHUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSkgIT0gbmV4dCk7Ci0KLQkJaWYgKCFjcHVfdGVzdF9hbmRfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spKSB7Ci0JCQkvKiBXZSB3ZXJlIGluIGxhenkgdGxiIG1vZGUgYW5kIGxlYXZlX21tIGRpc2FibGVkCi0JCQkgKiB0bGIgZmx1c2ggSVBJIGRlbGl2ZXJ5LiBXZSBtdXN0IHJlbG9hZCAlY3IzLgotCQkJICovCi0JCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOwotCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKLQkJfQotCX0KLSNlbmRpZgotfQotCi0jZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCi0JYXNtKCJtb3ZsICUwLCUlZ3MiOiA6InIiICgwKSk7Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3ZDM2ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF82NF9ICi0jZGVmaW5lIF9BU01fWDg2X01NVV9DT05URVhUXzY0X0gKLQotI2luY2x1ZGUgPGFzbS9wZGEuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfT0spCi0JCXdyaXRlX3BkYShtbXVfc3RhdGUsIFRMQlNUQVRFX0xBWlkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKLQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewotCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwotCQljcHVfY2xlYXIoY3B1LCBwcmV2LT5jcHVfdm1fbWFzayk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7Ci0JCXdyaXRlX3BkYShhY3RpdmVfbW0sIG5leHQpOwotI2VuZGlmCi0JCWNwdV9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzayk7Ci0JCWxvYWRfY3IzKG5leHQtPnBnZCk7Ci0KLQkJaWYgKHVubGlrZWx5KG5leHQtPmNvbnRleHQubGR0ICE9IHByZXYtPmNvbnRleHQubGR0KSkKLQkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7Ci0JfQotI2lmZGVmIENPTkZJR19TTVAKLQllbHNlIHsKLQkJd3JpdGVfcGRhKG1tdV9zdGF0ZSwgVExCU1RBVEVfT0spOwotCQlpZiAocmVhZF9wZGEoYWN0aXZlX21tKSAhPSBuZXh0KQotCQkJQlVHKCk7Ci0JCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKSkgewotCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFuZCBsZWF2ZV9tbSBkaXNhYmxlZAotCQkJICogdGxiIGZsdXNoIElQSSBkZWxpdmVyeS4gV2UgbXVzdCByZWxvYWQgQ1IzCi0JCQkgKiB0byBtYWtlIHN1cmUgdG8gdXNlIG5vIGZyZWVkIHBhZ2UgdGFibGVzLgotCQkJICovCi0JCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOwotCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKLQkJfQotCX0KLSNlbmRpZgotfQotCi0jZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCi1kbyB7CQkJCQkJXAotCWxvYWRfZ3NfaW5kZXgoMCk7CQkJXAotCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWZzIjo6InIiKDApKTsJXAotfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIF9BU01fWDg2X01NVV9DT05URVhUXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzMyLmgKaW5kZXggMTA1ZmI5MC4uZWRlNjk5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzMyLmgKQEAgLTkxLDQ2ICs5MSw5IEBACiAjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLQotLyoKLSAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMgbnVtYSBwbGF0Zm9ybS4KLSAqLwotI2RlZmluZSByZXNlcnZlX2Jvb3RtZW0oYWRkciwgc2l6ZSwgZmxhZ3MpIFwKLQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIChhZGRyKSwgKHNpemUpLCAoZmxhZ3MpKQotI2RlZmluZSBhbGxvY19ib290bWVtKHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCBcCi0JCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKQotI2RlZmluZSBhbGxvY19ib290bWVtX2xvdyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFNNUF9DQUNIRV9CWVRFUywgMCkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9wYWdlcyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKQotI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vcGFuaWMoeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgXAotCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXN0cnVjdCBwZ2xpc3RfZGF0YSAgX19tYXliZV91bnVzZWQJCQlcCi0JCQkJKl9fYWxsb2NfYm9vdG1lbV9ub2RlX19wZ2RhdCA9IChwZ2RhdCk7CVwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLAlcCi0JCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwlcCi19KQotI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpCQkJCVwKLSh7CQkJCQkJCQkJXAotCXN0cnVjdCBwZ2xpc3RfZGF0YSAgX19tYXliZV91bnVzZWQJCQlcCi0JCQkJKl9fYWxsb2NfYm9vdG1lbV9ub2RlX19wZ2RhdCA9IChwZ2RhdCk7CVwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLAkJXAotCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsJXAotfSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShwZ2RhdCwgeCkJCQkJXAotKHsJCQkJCQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKLQkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApOwkJXAotfSkKKy8qIGFsd2F5cyB1c2Ugbm9kZSAwIGZvciBib290bWVtIG9uIHRoaXMgbnVtYSBwbGF0Zm9ybSAqLworI2RlZmluZSBib290bWVtX2FyY2hfcHJlZmVycmVkX25vZGUoX19iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIGxpbWl0KQlcCisJKE5PREVfREFUQSgwKS0+YmRhdGEpCiAjZW5kaWYgLyogQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIAogI2VuZGlmIC8qIF9BU01fWDg2X01NWk9ORV8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oCmluZGV4IGJkMjJmMmEuLjY0MmZjN2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oCkBAIC05LDcgKzksMTggQEAKIGV4dGVybiBpbnQgcGljX21vZGU7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jaW5jbHVkZSA8bWFjaF9tcHNwZWMuaD4KKworLyoKKyAqIFN1bW1pdCBvciBnZW5lcmljIChpLmUuIGluc3RhbGxlcikga2VybmVscyBuZWVkIGxvdHMgb2YgYnVzIGVudHJpZXMuCisgKiBNYXhpbXVtIDI1NiBQQ0kgYnVzc2VzLCBwbHVzIDEgSVNBIGJ1cyBpbiBlYWNoIG9mIDQgY2FiaW5ldHMuCisgKi8KKyNpZiBDT05GSUdfQkFTRV9TTUFMTCA9PSAwCisjIGRlZmluZSBNQVhfTVBfQlVTU0VTCQkyNjAKKyNlbHNlCisjIGRlZmluZSBNQVhfTVBfQlVTU0VTCQkzMgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTCQkyNTYKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZfdG9fYmlnc21wOwogZXh0ZXJuIHU4IGFwaWNpZF8yX25vZGVbXTsKQEAgLTIwLDE1ICszMSwxNSBAQAogZXh0ZXJuIGludCBxdWFkX2xvY2FsX3RvX21wX2J1c19pZCBbTlJfQ1BVUy80XVs0XTsKICNlbmRpZgogCi0jZGVmaW5lIE1BWF9BUElDSUQgMjU2CisjZGVmaW5lIE1BWF9BUElDSUQJCTI1NgogCi0jZWxzZQorI2Vsc2UgLyogQ09ORklHX1g4Nl82NDogKi8KIAotI2RlZmluZSBNQVhfTVBfQlVTU0VTIDI1NgorI2RlZmluZSBNQVhfTVBfQlVTU0VTCQkyNTYKIC8qIEVhY2ggUENJIHNsb3QgbWF5IGJlIGEgY29tYm8gY2FyZCB3aXRoIGl0cyBvd24gYnVzLiAgNCBJUlEgcGlucyBwZXIgc2xvdC4gKi8KLSNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTIChNQVhfTVBfQlVTU0VTICogNCkKKyNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTCQkoTUFYX01QX0JVU1NFUyAqIDQpCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogZXh0ZXJuIHZvaWQgZWFybHlfZmluZF9zbXBfY29uZmlnKHZvaWQpOwogZXh0ZXJuIHZvaWQgZWFybHlfZ2V0X3NtcF9jb25maWcodm9pZCk7CkBAIC00NSwxMSArNTYsMTMgQEAKIGV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7CiAKLWV4dGVybiB2b2lkIGZpbmRfc21wX2NvbmZpZyh2b2lkKTsKIGV4dGVybiB2b2lkIGdldF9zbXBfY29uZmlnKHZvaWQpOworCiAjaWZkZWYgQ09ORklHX1g4Nl9NUFBBUlNFCitleHRlcm4gdm9pZCBmaW5kX3NtcF9jb25maWcodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9yZXNlcnZlX2U4MjBfbXBjX25ldyh2b2lkKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZmluZF9zbXBfY29uZmlnKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3Jlc2VydmVfZTgyMF9tcGNfbmV3KHZvaWQpIHsgfQogI2VuZGlmCiAKQEAgLTY0LDYgKzc3LDggQEAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIGV4dGVybiBpbnQgbXBfY29uZmlnX2FjcGlfZ3NpKHVuc2lnbmVkIGNoYXIgbnVtYmVyLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBpbiwKIAkJCQl1MzIgZ3NpLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KTsKK2V4dGVybiBpbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSk7CitleHRlcm4gaW50IG1wX2ZpbmRfaW9hcGljX3BpbihpbnQgaW9hcGljLCBpbnQgZ3NpKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludAogbXBfY29uZmlnX2FjcGlfZ3NpKHVuc2lnbmVkIGNoYXIgbnVtYmVyLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBpbiwKQEAgLTE0OCw0ICsxNjMsOCBAQAogCiBleHRlcm4gcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKIAorZXh0ZXJuIGludCBnZW5lcmljX21wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqLCBjaGFyICosIGNoYXIgKik7CisKK2V4dGVybiBpbnQgZGVmYXVsdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKiwgY2hhciAqKTsKKwogI2VuZGlmIC8qIF9BU01fWDg2X01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWNfZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWNfZGVmLmgKaW5kZXggNTk1NjhiYy4uNGE3Zjk2ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjX2RlZi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlY19kZWYuaApAQCAtMjQsMTcgKzI0LDE4IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotc3RydWN0IGludGVsX21wX2Zsb2F0aW5nIHsKLQljaGFyIG1wZl9zaWduYXR1cmVbNF07CQkvKiAiX01QXyIJCQkqLwotCXVuc2lnbmVkIGludCBtcGZfcGh5c3B0cjsJLyogQ29uZmlndXJhdGlvbiB0YWJsZSBhZGRyZXNzCSovCi0JdW5zaWduZWQgY2hhciBtcGZfbGVuZ3RoOwkvKiBPdXIgbGVuZ3RoIChwYXJhZ3JhcGhzKQkqLwotCXVuc2lnbmVkIGNoYXIgbXBmX3NwZWNpZmljYXRpb247LyogU3BlY2lmaWNhdGlvbiB2ZXJzaW9uCSovCi0JdW5zaWduZWQgY2hhciBtcGZfY2hlY2tzdW07CS8qIENoZWNrc3VtIChtYWtlcyBzdW0gMCkJKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMTsJLyogU3RhbmRhcmQgb3IgY29uZmlndXJhdGlvbiA/CSovCi0JdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTI7CS8qIEJpdDcgc2V0IGZvciBJTUNSfFBJQwkqLwotCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmUzOwkvKiBVbnVzZWQgKDApCQkJKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNDsJLyogVW51c2VkICgwKQkJCSovCi0JdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTU7CS8qIFVudXNlZCAoMCkJCQkqLworLyogSW50ZWwgTVAgRmxvYXRpbmcgUG9pbnRlciBTdHJ1Y3R1cmUgKi8KK3N0cnVjdCBtcGZfaW50ZWwgeworCWNoYXIgc2lnbmF0dXJlWzRdOwkJLyogIl9NUF8iCQkJKi8KKwl1bnNpZ25lZCBpbnQgcGh5c3B0cjsJCS8qIENvbmZpZ3VyYXRpb24gdGFibGUgYWRkcmVzcwkqLworCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOwkJLyogT3VyIGxlbmd0aCAocGFyYWdyYXBocykJKi8KKwl1bnNpZ25lZCBjaGFyIHNwZWNpZmljYXRpb247CS8qIFNwZWNpZmljYXRpb24gdmVyc2lvbgkqLworCXVuc2lnbmVkIGNoYXIgY2hlY2tzdW07CQkvKiBDaGVja3N1bSAobWFrZXMgc3VtIDApCSovCisJdW5zaWduZWQgY2hhciBmZWF0dXJlMTsJCS8qIFN0YW5kYXJkIG9yIGNvbmZpZ3VyYXRpb24gPwkqLworCXVuc2lnbmVkIGNoYXIgZmVhdHVyZTI7CQkvKiBCaXQ3IHNldCBmb3IgSU1DUnxQSUMJKi8KKwl1bnNpZ25lZCBjaGFyIGZlYXR1cmUzOwkJLyogVW51c2VkICgwKQkJCSovCisJdW5zaWduZWQgY2hhciBmZWF0dXJlNDsJCS8qIFVudXNlZCAoMCkJCQkqLworCXVuc2lnbmVkIGNoYXIgZmVhdHVyZTU7CQkvKiBVbnVzZWQgKDApCQkJKi8KIH07CiAKICNkZWZpbmUgTVBDX1NJR05BVFVSRSAiUENNUCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggMzU4YWNjNS4uZjRlNTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTE4LDExICsxOCwxNSBAQAogI2RlZmluZSBfRUZFUl9MTUUJCTggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8KICNkZWZpbmUgX0VGRVJfTE1BCQkxMCAvKiBMb25nIG1vZGUgYWN0aXZlIChyZWFkLW9ubHkpICovCiAjZGVmaW5lIF9FRkVSX05YCQkxMSAvKiBObyBleGVjdXRlIGVuYWJsZSAqLworI2RlZmluZSBfRUZFUl9TVk1FCQkxMiAvKiBFbmFibGUgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgX0VGRVJfRkZYU1IJCTE0IC8qIEVuYWJsZSBGYXN0IEZYU0FWRS9GWFJTVE9SICovCiAKICNkZWZpbmUgRUZFUl9TQ0UJCSgxPDxfRUZFUl9TQ0UpCiAjZGVmaW5lIEVGRVJfTE1FCQkoMTw8X0VGRVJfTE1FKQogI2RlZmluZSBFRkVSX0xNQQkJKDE8PF9FRkVSX0xNQSkKICNkZWZpbmUgRUZFUl9OWAkJCSgxPDxfRUZFUl9OWCkKKyNkZWZpbmUgRUZFUl9TVk1FCQkoMTw8X0VGRVJfU1ZNRSkKKyNkZWZpbmUgRUZFUl9GRlhTUgkJKDE8PF9FRkVSX0ZGWFNSKQogCiAvKiBJbnRlbCBNU1JzLiBTb21lIGFsc28gYXZhaWxhYmxlIG9uIG90aGVyIENQVXMgKi8KICNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjAJCTB4MDAwMDAwYzEKQEAgLTM2MCw0ICszNjQsOSBAQAogI2RlZmluZSBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMyICAgIDB4MDAwMDA0OGIKICNkZWZpbmUgTVNSX0lBMzJfVk1YX0VQVF9WUElEX0NBUCAgICAgICAweDAwMDAwNDhjCiAKKy8qIEFNRC1WIE1TUnMgKi8KKworI2RlZmluZSBNU1JfVk1fQ1IgICAgICAgICAgICAgICAgICAgICAgIDB4YzAwMTAxMTQKKyNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBICAgICAgICAgICAgICAgICAweGMwMDEwMTE3CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9NU1JfSU5ERVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oCmluZGV4IGU5ZjVkYjcuLmEzNzIyOTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzMyLmgKQEAgLTQsOCArNCwxMiBAQAogZXh0ZXJuIGludCBweG1fdG9fbmlkKGludCBweG0pOwogZXh0ZXJuIHZvaWQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpOwogCi0jaWZkZWYgQ09ORklHX05VTUEKKyNpZmRlZiBDT05GSUdfSElHSE1FTQogZXh0ZXJuIHZvaWQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9OVU1BXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCmluZGV4IDFlOGJkMzAuLjlmMGE1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaApAQCAtMzEsNiArMzEsOCBAQAogZXh0ZXJuIGludCBmb3VuZF9udW1hcTsKIGV4dGVybiBpbnQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKTsKIAorZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsKKwogLyoKICAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzdiYzQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLSNpZm5kZWYgX19BU01fTlVNQVFfQVBJQ19ICi0jZGVmaW5lIF9fQVNNX05VTUFRX0FQSUNfSAotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW16b25lLmg+Ci0jaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLQotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKLQotc3RhdGljIGlubGluZSBjb25zdCBjcHVtYXNrX3QgKnRhcmdldF9jcHVzKHZvaWQpCi17Ci0JcmV0dXJuICZDUFVfTUFTS19BTEw7Ci19Ci0KLSNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDEpCi0jZGVmaW5lIGVzcl9kaXNhYmxlICgxKQotCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIGRlc3RfTG93ZXN0UHJpbwotI2RlZmluZSBJTlRfREVTVF9NT0RFIDAgICAgIC8qIHBoeXNpY2FsIGRlbGl2ZXJ5IG9uIExPQ0FMIHF1YWQgKi8KLSAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKLX0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYml0LCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci19Ci0jZGVmaW5lIGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgKGFwaWNpZCAmIDB4RjApCi0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQotewotCS8qIEFscmVhZHkgZG9uZSBpbiBOVU1BLVEgZmlybXdhcmUgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCSJOVU1BLVEiLCBucl9pb2FwaWNzKTsKLX0KLQotLyoKLSAqIFNraXAgYWRkaW5nIHRoZSB0aW1lciBpbnQgb24gc2Vjb25kYXJ5IG5vZGVzLCB3aGljaCBjYXVzZXMKLSAqIGEgc21hbGwgYnV0IHBhaW5mdWwgcmlmdCBpbiB0aGUgdGltZS1zcGFjZSBjb250aW51dW0uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQotewotCXJldHVybiBhcGljICE9IDAgJiYgaXJxID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKLXsKLQkvKiBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCi0JcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweEZVTCk7Ci19Ci0KLS8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCi1leHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQotewotCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci0JcmV0dXJuIChpbnQpY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKLX0KLQotLyoKLSAqIFN1cHBvcnRpbmcgb3ZlciA2MCBjcHVzIG9uIE5VTUEtUSByZXF1aXJlcyBhIGxvY2FsaXR5LWRlcGVuZGVudAotICogY3B1IHRvIEFQSUMgSUQgcmVsYXRpb24gdG8gcHJvcGVybHkgaW50ZXJhY3Qgd2l0aCB0aGUgaW50ZWxsaWdlbnQKLSAqIG1vZGUgb2YgdGhlIGNsdXN0ZXIgY29udHJvbGxlci4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmIChtcHNfY3B1IDwgNjApCi0JCXJldHVybiAoKG1wc19jcHUgPj4gMikgPDwgNCkgfCAoMSA8PCAobXBzX2NwdSAmIDB4MykpOwotCWVsc2UKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkgCi17Ci0JcmV0dXJuIGxvZ2ljYWxfYXBpY2lkID4+IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotCWludCBub2RlID0gYXBpY2lkX3RvX25vZGUobG9naWNhbF9hcGljaWQpOwotCWludCBjcHUgPSBfX2Zmcyhsb2dpY2FsX2FwaWNpZCAmIDB4Zik7Ci0KLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGNwdSArIDQqbm9kZSk7Ci19Ci0KLWV4dGVybiB2b2lkICp4cXVhZF9wb3J0aW87Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKLXsKLQlpbnQgbnVtX3F1YWRzID0gbnVtX29ubGluZV9ub2RlcygpOwotCi0JaWYgKG51bV9xdWFkcyA8PSAxKQotICAgICAgIAkJcmV0dXJuOwotCi0JcHJpbnRrKCJSZW1hcHBpbmcgY3Jvc3MtcXVhZCBwb3J0IEkvTyBmb3IgJWQgcXVhZHNcbiIsIG51bV9xdWFkcyk7Ci0JeHF1YWRfcG9ydGlvID0gaW9yZW1hcChYUVVBRF9QT1JUSU9fQkFTRSwgbnVtX3F1YWRzKlhRVUFEX1BPUlRJT19RVUFEKTsKLQlwcmludGsoInhxdWFkX3BvcnRpbyB2YWRkciAweCUwOGx4LCBsZW4gJTA4bHhcbiIsCi0JCSh1X2xvbmcpIHhxdWFkX3BvcnRpbywgKHVfbG9uZykgbnVtX3F1YWRzKlhRVUFEX1BPUlRJT19RVUFEKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQotewotCXJldHVybiAoMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCi17Ci19Ci0KLS8qCi0gKiBXZSB1c2UgcGh5c2ljYWwgYXBpY2lkcyBoZXJlLCBub3QgbG9naWNhbCwgc28ganVzdCByZXR1cm4gdGhlIGRlZmF1bHQKLSAqIHBoeXNpY2FsIGJyb2FkY2FzdCB0byBzdG9wIHBlb3BsZSBmcm9tIGJyZWFraW5nIHVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCi17Ci0JcmV0dXJuIChpbnQpIDB4RjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JcmV0dXJuIChpbnQpIDB4RjsKLX0KLQotLyogTm8gTlVNQS1RIGJveCBoYXMgYSBIVCBDUFUsIGJ1dCBpdCBjYW4ndCBodXJ0IHRvIHVzZSB0aGUgZGVmYXVsdCBjb2RlLiAqLwotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fTlVNQVFfQVBJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMTJhNDYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvYXBpY2RlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9OVU1BUV9BUElDREVGX0gKLSNkZWZpbmUgX19BU01fTlVNQVFfQVBJQ0RFRl9ICi0KLQotI2RlZmluZSBBUElDX0lEX01BU0sgKDB4Rjw8MjQpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQotewotCSAgICAgICAgcmV0dXJuICgoKHgpPj4yNCkmMHgwRik7Ci19Ci0KLSNkZWZpbmUgICAgICAgICBHRVRfQVBJQ19JRCh4KSAgZ2V0X2FwaWNfaWQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2lwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODM3NGM2Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9OVU1BUV9JUElfSAotI2RlZmluZSBfX0FTTV9OVU1BUV9JUElfSAotCi12b2lkIHNlbmRfSVBJX21hc2tfc2VxdWVuY2UoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpOwotdm9pZCBzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX3NlcXVlbmNlKG1hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi0jZW5kaWYgLyogX19BU01fTlVNQVFfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL21wcGFyc2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL21wcGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJlZWVmYy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9tcHBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19BU01fTlVNQVFfTVBQQVJTRV9ICi0jZGVmaW5lIF9fQVNNX05VTUFRX01QUEFSU0VfSAotCi1leHRlcm4gdm9pZCBudW1hcV9tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKiwgY2hhciAqLCBjaGFyICopOwotCi0jZW5kaWYgLyogX19BU01fTlVNQVFfTVBQQVJTRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS93YWtlY3B1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDk5ZGYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvd2FrZWNwdS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9OVU1BUV9XQUtFQ1BVX0gKLSNkZWZpbmUgX19BU01fTlVNQVFfV0FLRUNQVV9ICi0KLS8qIFRoaXMgZmlsZSBjb3BlcyB3aXRoIG1hY2hpbmVzIHRoYXQgd2FrZXVwIHNlY29uZGFyeSBDUFVzIGJ5IE5NSXMgKi8KLQotI2RlZmluZSBUUkFNUE9MSU5FX1BIWVNfTE9XICgweDgpCi0jZGVmaW5lIFRSQU1QT0xJTkVfUEhZU19ISUdIICgweGEpCi0KLS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmUgYmVjYXVzZSB3ZSB1c2UgTk1JJ3MgdG8gYm9vdCBpbnN0ZWFkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfaW5pdF9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnQpCi17Ci19Ci0KLS8qCi0gKiBCZWNhdXNlIHdlIHVzZSBOTUlzIHJhdGhlciB0aGFuIHRoZSBJTklULVNUQVJUVVAgc2VxdWVuY2UgdG8KLSAqIGJvb3RzdHJhcCB0aGUgQ1BVcywgdGhlIEFQSUMgbWF5IGJlIGluIGEgd2VpcmQgc3RhdGUuIEtpY2sgaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWModm9pZCkKLXsKLQljbGVhcl9sb2NhbF9BUElDKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZV9OTUlfdmVjdG9yKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KQotewotCXByaW50aygiU3RvcmluZyBOTUkgdmVjdG9yXG4iKTsKLQkqaGlnaCA9Ci0JICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChUUkFNUE9MSU5FX1BIWVNfSElHSCkpOwotCSpsb3cgPQotCSAgKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoVFJBTVBPTElORV9QSFlTX0xPVykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9OTUlfdmVjdG9yKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KQotewotCXByaW50aygiUmVzdG9yaW5nIE5NSSB2ZWN0b3JcbiIpOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19ISUdIKSkgPQotCQkJCQkJCQkgKmhpZ2g7Ci0JKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoVFJBTVBPTElORV9QSFlTX0xPVykpID0KLQkJCQkJCQkJICpsb3c7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCi17Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9OVU1BUV9XQUtFQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA3NzY1NzkxLi44OWVkOWQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xLDQyICsxLDExIEBACiAjaWZuZGVmIF9BU01fWDg2X1BBR0VfSAogI2RlZmluZSBfQVNNX1g4Nl9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+Ci0KLS8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCi0jZGVmaW5lIFBBR0VfU0hJRlQJMTIKLSNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSxVTCkgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIF9fUEhZU0lDQUxfTUFTSwkJKChwaHlzX2FkZHJfdCkoMVVMTCA8PCBfX1BIWVNJQ0FMX01BU0tfU0hJRlQpIC0gMSkKLSNkZWZpbmUgX19WSVJUVUFMX01BU0sJCSgoMVVMIDw8IF9fVklSVFVBTF9NQVNLX1NISUZUKSAtIDEpCi0KLS8qIENhc3QgUEFHRV9NQVNLIHRvIGEgc2lnbmVkIHR5cGUgc28gdGhhdCBpdCBpcyBzaWduLWV4dGVuZGVkIGlmCi0gICB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgMzItYml0cyBidXQgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBsYXJnZXIKLSAgIChpZSwgMzItYml0IFBBRSkuICovCi0jZGVmaW5lIFBIWVNJQ0FMX1BBR0VfTUFTSwkoKChzaWduZWQgbG9uZylQQUdFX01BU0spICYgX19QSFlTSUNBTF9NQVNLKQotCi0vKiBQVEVfUEZOX01BU0sgZXh0cmFjdHMgdGhlIFBGTiBmcm9tIGEgKHB0ZXxwbWR8cHVkfHBnZCl2YWxfdCAqLwotI2RlZmluZSBQVEVfUEZOX01BU0sJCSgocHRldmFsX3QpUEhZU0lDQUxfUEFHRV9NQVNLKQotCi0vKiBQVEVfRkxBR1NfTUFTSyBleHRyYWN0cyB0aGUgZmxhZ3MgZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KLSNkZWZpbmUgUFRFX0ZMQUdTX01BU0sJCSh+UFRFX1BGTl9NQVNLKQotCi0jZGVmaW5lIFBNRF9QQUdFX1NJWkUJCShfQUMoMSwgVUwpIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX1BBR0VfTUFTSwkJKH4oUE1EX1BBR0VfU0laRS0xKSkKLQotI2RlZmluZSBIUEFHRV9TSElGVAkJUE1EX1NISUZUCi0jZGVmaW5lIEhQQUdFX1NJWkUJCShfQUMoMSxVTCkgPDwgSFBBR0VfU0hJRlQpCi0jZGVmaW5lIEhQQUdFX01BU0sJCSh+KEhQQUdFX1NJWkUgLSAxKSkKLSNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpCi0KLSNkZWZpbmUgSFVHRV9NQVhfSFNUQVRFIDIKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlIDxhc20vcGFnZV82NC5oPgpAQCAtNDQsMzggKzEzLDE4IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2VfMzIuaD4KICNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCiAKLSNkZWZpbmUgUEFHRV9PRkZTRVQJCSgodW5zaWduZWQgbG9uZylfX1BBR0VfT0ZGU0VUKQotCi0jZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUyBcCi0JKCgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAotCSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQotCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLXR5cGVkZWYgc3RydWN0IHsgcGdkdmFsX3QgcGdkOyB9IHBnZF90OwotdHlwZWRlZiBzdHJ1Y3QgeyBwZ3Byb3R2YWxfdCBwZ3Byb3Q7IH0gcGdwcm90X3Q7Ci0KLWV4dGVybiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpOwotZXh0ZXJuIGludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2Vucik7Ci1leHRlcm4gdm9pZCBtYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgICBwZ3Byb3RfdCB2bWFfcHJvdCk7Ci1leHRlcm4gdm9pZCB1bm1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSBwZ3Byb3RfdCB2bWFfcHJvdCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwotCiBzdHJ1Y3QgcGFnZTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLAotCQkJCXN0cnVjdCBwYWdlICpwZykKKwkJCQkgICBzdHJ1Y3QgcGFnZSAqcGcpCiB7CiAJY2xlYXJfcGFnZShwYWdlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLAotCQkJCXN0cnVjdCBwYWdlICp0b3BhZ2UpCisJCQkJICBzdHJ1Y3QgcGFnZSAqdG9wYWdlKQogewogCWNvcHlfcGFnZSh0bywgZnJvbSk7CiB9CkBAIC04NCw5OSArMzMsNiBAQAogCWFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1pFUk8gfCBtb3ZhYmxlZmxhZ3MsIHZtYSwgdmFkZHIpCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCiAKLXN0YXRpYyBpbmxpbmUgcGdkX3QgbmF0aXZlX21ha2VfcGdkKHBnZHZhbF90IHZhbCkKLXsKLQlyZXR1cm4gKHBnZF90KSB7IHZhbCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHBnZHZhbF90IG5hdGl2ZV9wZ2RfdmFsKHBnZF90IHBnZCkKLXsKLQlyZXR1cm4gcGdkLnBnZDsKLX0KLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMwotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotdHlwZWRlZiBzdHJ1Y3QgeyBwdWR2YWxfdCBwdWQ7IH0gcHVkX3Q7Ci0KLXN0YXRpYyBpbmxpbmUgcHVkX3QgbmF0aXZlX21ha2VfcHVkKHBtZHZhbF90IHZhbCkKLXsKLQlyZXR1cm4gKHB1ZF90KSB7IHZhbCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHB1ZHZhbF90IG5hdGl2ZV9wdWRfdmFsKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gcHVkLnB1ZDsKLX0KLSNlbHNlCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gMyAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KLQotc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCi17Ci0JcmV0dXJuIG5hdGl2ZV9wZ2RfdmFsKHB1ZC5wZ2QpOwotfQotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLwotCi10eXBlZGVmIHN0cnVjdCB7IHBtZHZhbF90IHBtZDsgfSBwbWRfdDsKLQotc3RhdGljIGlubGluZSBwbWRfdCBuYXRpdmVfbWFrZV9wbWQocG1kdmFsX3QgdmFsKQotewotCXJldHVybiAocG1kX3QpIHsgdmFsIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcG1kdmFsX3QgbmF0aXZlX3BtZF92YWwocG1kX3QgcG1kKQotewotCXJldHVybiBwbWQucG1kOwotfQotI2Vsc2UgIC8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gMiAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KLQotc3RhdGljIGlubGluZSBwbWR2YWxfdCBuYXRpdmVfcG1kX3ZhbChwbWRfdCBwbWQpCi17Ci0JcmV0dXJuIG5hdGl2ZV9wZ2RfdmFsKHBtZC5wdWQucGdkKTsKLX0KLSNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID49IDMgKi8KLQotc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbWFrZV9wdGUocHRldmFsX3QgdmFsKQotewotCXJldHVybiAocHRlX3QpIHsgLnB0ZSA9IHZhbCB9OwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZXZhbF90IG5hdGl2ZV9wdGVfdmFsKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlLnB0ZTsKLX0KLQotc3RhdGljIGlubGluZSBwdGV2YWxfdCBuYXRpdmVfcHRlX2ZsYWdzKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gbmF0aXZlX3B0ZV92YWwocHRlKSAmIFBURV9GTEFHU19NQVNLOwotfQotCi0jZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCi0jZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLwotCi0jZGVmaW5lIHBnZF92YWwoeCkJbmF0aXZlX3BnZF92YWwoeCkKLSNkZWZpbmUgX19wZ2QoeCkJbmF0aXZlX21ha2VfcGdkKHgpCi0KLSNpZm5kZWYgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAotI2RlZmluZSBwdWRfdmFsKHgpCW5hdGl2ZV9wdWRfdmFsKHgpCi0jZGVmaW5lIF9fcHVkKHgpCW5hdGl2ZV9tYWtlX3B1ZCh4KQotI2VuZGlmCi0KLSNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAotI2RlZmluZSBwbWRfdmFsKHgpCW5hdGl2ZV9wbWRfdmFsKHgpCi0jZGVmaW5lIF9fcG1kKHgpCW5hdGl2ZV9tYWtlX3BtZCh4KQotI2VuZGlmCi0KLSNkZWZpbmUgcHRlX3ZhbCh4KQluYXRpdmVfcHRlX3ZhbCh4KQotI2RlZmluZSBwdGVfZmxhZ3MoeCkJbmF0aXZlX3B0ZV9mbGFncyh4KQotI2RlZmluZSBfX3B0ZSh4KQluYXRpdmVfbWFrZV9wdGUoeCkKLQotI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwotCiAjZGVmaW5lIF9fcGEoeCkJCV9fcGh5c19hZGRyKCh1bnNpZ25lZCBsb25nKSh4KSkKICNkZWZpbmUgX19wYV9ub2RlYnVnKHgpCV9fcGh5c19hZGRyX25vZGVidWcoKHVuc2lnbmVkIGxvbmcpKHgpKQogLyogX19wYV9zeW1ib2wgc2hvdWxkIGJlIHVzZWQgZm9yIEMgdmlzaWJsZSBzeW1ib2xzLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMi5oCmluZGV4IGJjZGUwZDcuLmRhNGU3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKQEAgLTEsODIgKzEsMTQgQEAKICNpZm5kZWYgX0FTTV9YODZfUEFHRV8zMl9ICiAjZGVmaW5lIF9BU01fWDg2X1BBR0VfMzJfSAogCi0vKgotICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLgotICoKLSAqIEEgX19QQUdFX09GRlNFVCBvZiAweEMwMDAwMDAwIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMKLSAqIGEgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIG9uZSBnaWdhYnl0ZSwgd2hpY2ggbGltaXRzIHRoZQotICogYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSB5b3UgY2FuIHVzZSB0byBhYm91dCA5NTBNQi4KLSAqCi0gKiBJZiB5b3Ugd2FudCBtb3JlIHBoeXNpY2FsIG1lbW9yeSB0aGFuIHRoaXMgdGhlbiBzZWUgdGhlIENPTkZJR19ISUdITUVNNEcKLSAqIGFuZCBDT05GSUdfSElHSE1FTTY0RyBvcHRpb25zIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KLSAqLwotI2RlZmluZSBfX1BBR0VfT0ZGU0VUCQlfQUMoQ09ORklHX1BBR0VfT0ZGU0VULCBVTCkKLQotI2lmZGVmIENPTkZJR180S1NUQUNLUwotI2RlZmluZSBUSFJFQURfT1JERVIJMAotI2Vsc2UKLSNkZWZpbmUgVEhSRUFEX09SREVSCTEKLSNlbmRpZgotI2RlZmluZSBUSFJFQURfU0laRSAJKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCi0KLSNkZWZpbmUgU1RBQ0tGQVVMVF9TVEFDSyAwCi0jZGVmaW5lIERPVUJMRUZBVUxUX1NUQUNLIDEKLSNkZWZpbmUgTk1JX1NUQUNLIDAKLSNkZWZpbmUgREVCVUdfU1RBQ0sgMAotI2RlZmluZSBNQ0VfU1RBQ0sgMAotI2RlZmluZSBOX0VYQ0VQVElPTl9TVEFDS1MgMQotCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLS8qIDQ0PTMyKzEyLCB0aGUgbGltaXQgd2UgY2FuIGZpdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcgcGZuICovCi0jZGVmaW5lIF9fUEhZU0lDQUxfTUFTS19TSElGVAk0NAotI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgotI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTMKKyNpbmNsdWRlIDxhc20vcGFnZV8zMl90eXBlcy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiB1NjQJcHRldmFsX3Q7Ci10eXBlZGVmIHU2NAlwbWR2YWxfdDsKLXR5cGVkZWYgdTY0CXB1ZHZhbF90OwotdHlwZWRlZiB1NjQJcGdkdmFsX3Q7Ci10eXBlZGVmIHU2NAlwZ3Byb3R2YWxfdDsKLQotdHlwZWRlZiB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsKLQl9OwotCXB0ZXZhbF90IHB0ZTsKLX0gcHRlX3Q7Ci0jZW5kaWYJLyogX19BU1NFTUJMWV9fCi0gKi8KLSNlbHNlICAvKiAhQ09ORklHX1g4Nl9QQUUgKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTMyCi0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCi0jZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB0ZXZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBtZHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB1ZHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBnZHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBncHJvdHZhbF90OwotCi10eXBlZGVmIHVuaW9uIHsKLQlwdGV2YWxfdCBwdGU7Ci0JcHRldmFsX3QgcHRlX2xvdzsKLX0gcHRlX3Q7Ci0KLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAjZGVmaW5lIEhBVkVfQVJDSF9IVUdFVExCX1VOTUFQUEVEX0FSRUEKICNlbmRpZgogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBfX3BoeXNfYWRkcl9ub2RlYnVnKHgpCSgoeCkgLSBQQUdFX09GRlNFVCkKICNpZmRlZiBDT05GSUdfREVCVUdfVklSVFVBTAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyk7CkBAIC04OSwyMyArMjEsNiBAQAogI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbWF4X21hcG5yKQogI2VuZGlmIC8qIENPTkZJR19GTEFUTUVNICovCiAKLWV4dGVybiBpbnQgbnhfZW5hYmxlZDsKLQotLyoKLSAqIFRoaXMgbXVjaCBhZGRyZXNzIHNwYWNlIGlzIHJlc2VydmVkIGZvciB2bWFsbG9jKCkgYW5kIGlvbWFwKCkKLSAqIGFzIHdlbGwgYXMgZml4bWFwIG1hcHBpbmdzLgotICovCi1leHRlcm4gdW5zaWduZWQgaW50IF9fVk1BTExPQ19SRVNFUlZFOwotZXh0ZXJuIGludCBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKLQotZXh0ZXJuIHZvaWQgZmluZF9sb3dfcGZuX3JhbmdlKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOwotZXh0ZXJuIHZvaWQgaW5pdG1lbV9pbml0KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdG1lbV9hbGxvY2F0b3Iodm9pZCk7Ci0KLQogI2lmZGVmIENPTkZJR19YODZfVVNFXzNETk9XCiAjaW5jbHVkZSA8YXNtL21teC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlNGE3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIF9BU01fWDg2X1BBR0VfMzJfREVGU19ICisjZGVmaW5lIF9BU01fWDg2X1BBR0VfMzJfREVGU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCisvKgorICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLgorICoKKyAqIEEgX19QQUdFX09GRlNFVCBvZiAweEMwMDAwMDAwIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMKKyAqIGEgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIG9uZSBnaWdhYnl0ZSwgd2hpY2ggbGltaXRzIHRoZQorICogYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSB5b3UgY2FuIHVzZSB0byBhYm91dCA5NTBNQi4KKyAqCisgKiBJZiB5b3Ugd2FudCBtb3JlIHBoeXNpY2FsIG1lbW9yeSB0aGFuIHRoaXMgdGhlbiBzZWUgdGhlIENPTkZJR19ISUdITUVNNEcKKyAqIGFuZCBDT05GSUdfSElHSE1FTTY0RyBvcHRpb25zIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBfX1BBR0VfT0ZGU0VUCQlfQUMoQ09ORklHX1BBR0VfT0ZGU0VULCBVTCkKKworI2lmZGVmIENPTkZJR180S1NUQUNLUworI2RlZmluZSBUSFJFQURfT1JERVIJMAorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX09SREVSCTEKKyNlbmRpZgorI2RlZmluZSBUSFJFQURfU0laRSAJKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCisKKyNkZWZpbmUgU1RBQ0tGQVVMVF9TVEFDSyAwCisjZGVmaW5lIERPVUJMRUZBVUxUX1NUQUNLIDEKKyNkZWZpbmUgTk1JX1NUQUNLIDAKKyNkZWZpbmUgREVCVUdfU1RBQ0sgMAorI2RlZmluZSBNQ0VfU1RBQ0sgMAorI2RlZmluZSBOX0VYQ0VQVElPTl9TVEFDS1MgMQorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKy8qIDQ0PTMyKzEyLCB0aGUgbGltaXQgd2UgY2FuIGZpdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcgcGZuICovCisjZGVmaW5lIF9fUEhZU0lDQUxfTUFTS19TSElGVAk0NAorI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgorCisjZWxzZSAgLyogIUNPTkZJR19YODZfUEFFICovCisjZGVmaW5lIF9fUEhZU0lDQUxfTUFTS19TSElGVAkzMgorI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgorI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBUaGlzIG11Y2ggYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBmb3Igdm1hbGxvYygpIGFuZCBpb21hcCgpCisgKiBhcyB3ZWxsIGFzIGZpeG1hcCBtYXBwaW5ncy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX1ZNQUxMT0NfUkVTRVJWRTsKK2V4dGVybiBpbnQgc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7CisKK2V4dGVybiB2b2lkIGZpbmRfbG93X3Bmbl9yYW5nZSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfbWVtb3J5X21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKHZvaWQpOworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9YODZfUEFHRV8zMl9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaAppbmRleCA1ZWJjYTI5Li4wNzI2OTRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCkBAIC0xLDEwNSArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X1BBR0VfNjRfSAogI2RlZmluZSBfQVNNX1g4Nl9QQUdFXzY0X0gKIAotI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTQKLQotI2RlZmluZSBUSFJFQURfT1JERVIJMQotI2RlZmluZSBUSFJFQURfU0laRSAgKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCi0jZGVmaW5lIENVUlJFTlRfTUFTSyAofihUSFJFQURfU0laRSAtIDEpKQotCi0jZGVmaW5lIEVYQ0VQVElPTl9TVEFDS19PUkRFUiAwCi0jZGVmaW5lIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFIDw8IEVYQ0VQVElPTl9TVEFDS19PUkRFUikKLQotI2RlZmluZSBERUJVR19TVEFDS19PUkRFUiAoRVhDRVBUSU9OX1NUQUNLX09SREVSICsgMSkKLSNkZWZpbmUgREVCVUdfU1RLU1ogKFBBR0VfU0laRSA8PCBERUJVR19TVEFDS19PUkRFUikKLQotI2RlZmluZSBJUlFTVEFDS19PUkRFUiAyCi0jZGVmaW5lIElSUVNUQUNLU0laRSAoUEFHRV9TSVpFIDw8IElSUVNUQUNLX09SREVSKQotCi0jZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQotI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCi0jZGVmaW5lIE5NSV9TVEFDSyAzCi0jZGVmaW5lIERFQlVHX1NUQUNLIDQKLSNkZWZpbmUgTUNFX1NUQUNLIDUKLSNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCi0KLSNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQotCi0vKgotICogU2V0IF9fUEFHRV9PRkZTRVQgdG8gdGhlIG1vc3QgbmVnYXRpdmUgcG9zc2libGUgYWRkcmVzcyArCi0gKiBQR0RJUl9TSVpFKjE2IChwZ2Qgc2xvdCAyNzIpLiAgVGhlIGdhcCBpcyB0byBhbGxvdyBhIHNwYWNlIGZvciBhCi0gKiBoeXBlcnZpc29yIHRvIGZpdC4gIENob29zaW5nIDE2IHNsb3RzIGhlcmUgaXMgYXJiaXRyYXJ5LCBidXQgaXQncwotICogd2hhdCBYZW4gcmVxdWlyZXMuCi0gKi8KLSNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgX0FDKDB4ZmZmZjg4MDAwMDAwMDAwMCwgVUwpCi0KLSNkZWZpbmUgX19QSFlTSUNBTF9TVEFSVAlDT05GSUdfUEhZU0lDQUxfU1RBUlQKLSNkZWZpbmUgX19LRVJORUxfQUxJR04JCTB4MjAwMDAwCi0KLS8qCi0gKiBNYWtlIHN1cmUga2VybmVsIGlzIGFsaWduZWQgdG8gMk1CIGFkZHJlc3MuIENhdGNoaW5nIGl0IGF0IGNvbXBpbGUKLSAqIHRpbWUgaXMgYmV0dGVyLiBDaGFuZ2UgeW91ciBjb25maWcgZmlsZSBhbmQgY29tcGlsZSB0aGUga2VybmVsCi0gKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCi0gKi8KLSNpZiAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUICUgX19LRVJORUxfQUxJR04pICE9IDAKLSNlcnJvciAiQ09ORklHX1BIWVNJQ0FMX1NUQVJUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyTUIiCi0jZW5kaWYKLQotI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJKF9fU1RBUlRfS0VSTkVMX21hcCArIF9fUEhZU0lDQUxfU1RBUlQpCi0jZGVmaW5lIF9fU1RBUlRfS0VSTkVMX21hcAlfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKLQotLyogU2VlIERvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5IG1hcC4gKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ2Ci0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTQ4Ci0KLS8qCi0gKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCi0gKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgotICovCi0jZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwotdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwotCi0vKiBkdXBsaWNhdGVkIHRvIHRoZSBvbmUgaW4gYm9vdG1lbS5oICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKLSNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJKHgpCi0KLS8qCi0gKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgotICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgeyBwdGV2YWxfdCBwdGU7IH0gcHRlX3Q7Ci0KLSNkZWZpbmUgdm1lbW1hcCAoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCkKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOwotCi1leHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7Ci1leHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7Ci0KLWV4dGVybiB2b2lkIGluaXRfZXh0cmFfbWFwcGluZ191Yyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jaWZkZWYgQ09ORklHX0ZMQVRNRU0KLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgICAgICAgICAgKChwZm4pIDwgbWF4X3BmbikKLSNlbmRpZgotCisjaW5jbHVkZSA8YXNtL3BhZ2VfNjRfdHlwZXMuaD4KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBR0VfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGM5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0X3R5cGVzLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QQUdFXzY0X0RFRlNfSAorI2RlZmluZSBfQVNNX1g4Nl9QQUdFXzY0X0RFRlNfSAorCisjZGVmaW5lIFRIUkVBRF9PUkRFUgkxCisjZGVmaW5lIFRIUkVBRF9TSVpFICAoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKKyNkZWZpbmUgQ1VSUkVOVF9NQVNLICh+KFRIUkVBRF9TSVpFIC0gMSkpCisKKyNkZWZpbmUgRVhDRVBUSU9OX1NUQUNLX09SREVSIDAKKyNkZWZpbmUgRVhDRVBUSU9OX1NUS1NaIChQQUdFX1NJWkUgPDwgRVhDRVBUSU9OX1NUQUNLX09SREVSKQorCisjZGVmaW5lIERFQlVHX1NUQUNLX09SREVSIChFWENFUFRJT05fU1RBQ0tfT1JERVIgKyAxKQorI2RlZmluZSBERUJVR19TVEtTWiAoUEFHRV9TSVpFIDw8IERFQlVHX1NUQUNLX09SREVSKQorCisjZGVmaW5lIElSUV9TVEFDS19PUkRFUiAyCisjZGVmaW5lIElSUV9TVEFDS19TSVpFIChQQUdFX1NJWkUgPDwgSVJRX1NUQUNLX09SREVSKQorCisjZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQorI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCisjZGVmaW5lIE5NSV9TVEFDSyAzCisjZGVmaW5lIERFQlVHX1NUQUNLIDQKKyNkZWZpbmUgTUNFX1NUQUNLIDUKKyNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCisKKyNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQorI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQorCisvKgorICogU2V0IF9fUEFHRV9PRkZTRVQgdG8gdGhlIG1vc3QgbmVnYXRpdmUgcG9zc2libGUgYWRkcmVzcyArCisgKiBQR0RJUl9TSVpFKjE2IChwZ2Qgc2xvdCAyNzIpLiAgVGhlIGdhcCBpcyB0byBhbGxvdyBhIHNwYWNlIGZvciBhCisgKiBoeXBlcnZpc29yIHRvIGZpdC4gIENob29zaW5nIDE2IHNsb3RzIGhlcmUgaXMgYXJiaXRyYXJ5LCBidXQgaXQncworICogd2hhdCBYZW4gcmVxdWlyZXMuCisgKi8KKyNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgX0FDKDB4ZmZmZjg4MDAwMDAwMDAwMCwgVUwpCisKKyNkZWZpbmUgX19QSFlTSUNBTF9TVEFSVAlDT05GSUdfUEhZU0lDQUxfU1RBUlQKKyNkZWZpbmUgX19LRVJORUxfQUxJR04JCTB4MjAwMDAwCisKKy8qCisgKiBNYWtlIHN1cmUga2VybmVsIGlzIGFsaWduZWQgdG8gMk1CIGFkZHJlc3MuIENhdGNoaW5nIGl0IGF0IGNvbXBpbGUKKyAqIHRpbWUgaXMgYmV0dGVyLiBDaGFuZ2UgeW91ciBjb25maWcgZmlsZSBhbmQgY29tcGlsZSB0aGUga2VybmVsCisgKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCisgKi8KKyNpZiAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUICUgX19LRVJORUxfQUxJR04pICE9IDAKKyNlcnJvciAiQ09ORklHX1BIWVNJQ0FMX1NUQVJUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyTUIiCisjZW5kaWYKKworI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJKF9fU1RBUlRfS0VSTkVMX21hcCArIF9fUEhZU0lDQUxfU1RBUlQpCisjZGVmaW5lIF9fU1RBUlRfS0VSTkVMX21hcAlfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKKworLyogU2VlIERvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5IG1hcC4gKi8KKyNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ2CisjZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTQ4CisKKy8qCisgKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCisgKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgorICovCisjZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwordm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOworCisvKiBkdXBsaWNhdGVkIHRvIHRoZSBvbmUgaW4gYm9vdG1lbS5oICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKKyNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJKHgpCisKKyNkZWZpbmUgdm1lbW1hcCAoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOworCitleHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CisKK2V4dGVybiB2b2lkIGluaXRfZXh0cmFfbWFwcGluZ191Yyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgICAgICAgICAgKChwZm4pIDwgbWF4X3BmbikKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfUEFHRV82NF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDYyNWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFHRV9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEFHRV9ERUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSxVTCkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2RlZmluZSBfX1BIWVNJQ0FMX01BU0sJCSgocGh5c19hZGRyX3QpKDFVTEwgPDwgX19QSFlTSUNBTF9NQVNLX1NISUZUKSAtIDEpCisjZGVmaW5lIF9fVklSVFVBTF9NQVNLCQkoKDFVTCA8PCBfX1ZJUlRVQUxfTUFTS19TSElGVCkgLSAxKQorCisvKiBDYXN0IFBBR0VfTUFTSyB0byBhIHNpZ25lZCB0eXBlIHNvIHRoYXQgaXQgaXMgc2lnbi1leHRlbmRlZCBpZgorICAgdmlydHVhbCBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgYnV0IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgbGFyZ2VyCisgICAoaWUsIDMyLWJpdCBQQUUpLiAqLworI2RlZmluZSBQSFlTSUNBTF9QQUdFX01BU0sJKCgoc2lnbmVkIGxvbmcpUEFHRV9NQVNLKSAmIF9fUEhZU0lDQUxfTUFTSykKKworI2RlZmluZSBQTURfUEFHRV9TSVpFCQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9QQUdFX01BU0sJCSh+KFBNRF9QQUdFX1NJWkUtMSkpCisKKyNkZWZpbmUgSFBBR0VfU0hJRlQJCVBNRF9TSElGVAorI2RlZmluZSBIUEFHRV9TSVpFCQkoX0FDKDEsVUwpIDw8IEhQQUdFX1NISUZUKQorI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMSkpCisjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjZGVmaW5lIEhVR0VfTUFYX0hTVEFURSAyCisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgodW5zaWduZWQgbG9uZylfX1BBR0VfT0ZGU0VUKQorCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUyBcCisJKCgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2luY2x1ZGUgPGFzbS9wYWdlXzY0X3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wYWdlXzMyX3R5cGVzLmg+CisjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcGdwcm90OworCitleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKK2V4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOworZXh0ZXJuIHZvaWQgbWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7CitleHRlcm4gdm9pZCB1bm1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkvKiBfQVNNX1g4Nl9QQUdFX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggZTI5OTI4Ny4uMDYxN2Q1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC00LDcgKzQsNyBAQAogICogcGFyYS12aXJ0dWFsaXphdGlvbjogdGhvc2UgaG9va3MgYXJlIGRlZmluZWQgaGVyZS4gKi8KIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAKIC8qIEJpdG1hc2sgb2Ygd2hhdCBjYW4gYmUgY2xvYmJlcmVkOiB1c3VhbGx5IGF0IGxlYXN0IGVheC4gKi8KQEAgLTEyLDIxICsxMiwzOCBAQAogI2RlZmluZSBDTEJSX0VBWCAgKDEgPDwgMCkKICNkZWZpbmUgQ0xCUl9FQ1ggICgxIDw8IDEpCiAjZGVmaW5lIENMQlJfRURYICAoMSA8PCAyKQorI2RlZmluZSBDTEJSX0VESSAgKDEgPDwgMykKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgQ0xCUl9SU0kgICgxIDw8IDMpCi0jZGVmaW5lIENMQlJfUkRJICAoMSA8PCA0KQorI2lmZGVmIENPTkZJR19YODZfMzIKKy8qIENMQlJfQU5ZIHNob3VsZCBtYXRjaCBhbGwgcmVncyBwbGF0Zm9ybSBoYXMuIEZvciBpMzg2LCB0aGF0J3MganVzdCBpdCAqLworI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDQpIC0gMSkKKworI2RlZmluZSBDTEJSX0FSR19SRUdTCShDTEJSX0VBWCB8IENMQlJfRURYIHwgQ0xCUl9FQ1gpCisjZGVmaW5lIENMQlJfUkVUX1JFRwkoQ0xCUl9FQVggfCBDTEJSX0VEWCkKKyNkZWZpbmUgQ0xCUl9TQ1JBVENICSgwKQorI2Vsc2UKKyNkZWZpbmUgQ0xCUl9SQVggIENMQlJfRUFYCisjZGVmaW5lIENMQlJfUkNYICBDTEJSX0VDWAorI2RlZmluZSBDTEJSX1JEWCAgQ0xCUl9FRFgKKyNkZWZpbmUgQ0xCUl9SREkgIENMQlJfRURJCisjZGVmaW5lIENMQlJfUlNJICAoMSA8PCA0KQogI2RlZmluZSBDTEJSX1I4ICAgKDEgPDwgNSkKICNkZWZpbmUgQ0xCUl9SOSAgICgxIDw8IDYpCiAjZGVmaW5lIENMQlJfUjEwICAoMSA8PCA3KQogI2RlZmluZSBDTEJSX1IxMSAgKDEgPDwgOCkKKwogI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDkpIC0gMSkKKworI2RlZmluZSBDTEJSX0FSR19SRUdTCShDTEJSX1JESSB8IENMQlJfUlNJIHwgQ0xCUl9SRFggfCBcCisJCQkgQ0xCUl9SQ1ggfCBDTEJSX1I4IHwgQ0xCUl9SOSkKKyNkZWZpbmUgQ0xCUl9SRVRfUkVHCShDTEJSX1JBWCkKKyNkZWZpbmUgQ0xCUl9TQ1JBVENICShDTEJSX1IxMCB8IENMQlJfUjExKQorCiAjaW5jbHVkZSA8YXNtL2Rlc2NfZGVmcy5oPgotI2Vsc2UKLS8qIENMQlJfQU5ZIHNob3VsZCBtYXRjaCBhbGwgcmVncyBwbGF0Zm9ybSBoYXMuIEZvciBpMzg2LCB0aGF0J3MganVzdCBpdCAqLwotI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDMpIC0gMSkKICNlbmRpZiAvKiBYODZfNjQgKi8KIAorI2RlZmluZSBDTEJSX0NBTExFRV9TQVZFICgoQ0xCUl9BUkdfUkVHUyB8IENMQlJfU0NSQVRDSCkgJiB+Q0xCUl9SRVRfUkVHKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgpAQCAtNDAsNiArNTcsMTQgQEAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiBzdHJ1Y3QgZGVzY19zdHJ1Y3Q7CiAKKy8qCisgKiBXcmFwcGVyIHR5cGUgZm9yIHBvaW50ZXJzIHRvIGNvZGUgd2hpY2ggdXNlcyB0aGUgbm9uLXN0YW5kYXJkCisgKiBjYWxsaW5nIGNvbnZlbnRpb24uICBTZWUgUFZfQ0FMTF9TQVZFX1JFR1NfVEhVTksgYmVsb3cuCisgKi8KK3N0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSB7CisJdm9pZCAqZnVuYzsKK307CisKIC8qIGdlbmVyYWwgaW5mbyAqLwogc3RydWN0IHB2X2luZm8gewogCXVuc2lnbmVkIGludCBrZXJuZWxfcnBsOwpAQCAtMTg5LDExICsyMTQsMTUgQEAKIAkgKiBleHBlY3RlZCB0byB1c2UgWDg2X0VGTEFHU19JRjsgYWxsIG90aGVyIGJpdHMKIAkgKiByZXR1cm5lZCBmcm9tIHNhdmVfZmwgYXJlIHVuZGVmaW5lZCwgYW5kIG1heSBiZSBpZ25vcmVkIGJ5CiAJICogcmVzdG9yZV9mbC4KKwkgKgorCSAqIE5PVEU6IFRoZXNlIGZ1bmN0aW9ucyBjYWxsZXJzIGV4cGVjdCB0aGUgY2FsbGVlIHRvIHByZXNlcnZlCisJICogbW9yZSByZWdpc3RlcnMgdGhhbiB0aGUgc3RhbmRhcmQgQyBjYWxsaW5nIGNvbnZlbnRpb24uCiAJICovCi0JdW5zaWduZWQgbG9uZyAoKnNhdmVfZmwpKHZvaWQpOwotCXZvaWQgKCpyZXN0b3JlX2ZsKSh1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqaXJxX2Rpc2FibGUpKHZvaWQpOwotCXZvaWQgKCppcnFfZW5hYmxlKSh2b2lkKTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgc2F2ZV9mbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcmVzdG9yZV9mbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgaXJxX2Rpc2FibGU7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIGlycV9lbmFibGU7CisKIAl2b2lkICgqc2FmZV9oYWx0KSh2b2lkKTsKIAl2b2lkICgqaGFsdCkodm9pZCk7CiAKQEAgLTI0NCw3ICsyNzMsOCBAQAogCXZvaWQgKCpmbHVzaF90bGJfdXNlcikodm9pZCk7CiAJdm9pZCAoKmZsdXNoX3RsYl9rZXJuZWwpKHZvaWQpOwogCXZvaWQgKCpmbHVzaF90bGJfc2luZ2xlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwotCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBjcHVtYXNrX3QgKmNwdXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJIHVuc2lnbmVkIGxvbmcgdmEpOwogCiAJLyogSG9va3MgZm9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwYWdldGFibGUgdG9wLWxldmVsICovCkBAIC0yNzgsMTIgKzMwOCwxMSBAQAogCXZvaWQgKCpwdGVwX21vZGlmeV9wcm90X2NvbW1pdCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CiAKLQlwdGV2YWxfdCAoKnB0ZV92YWwpKHB0ZV90KTsKLQlwdGV2YWxfdCAoKnB0ZV9mbGFncykocHRlX3QpOwotCXB0ZV90ICgqbWFrZV9wdGUpKHB0ZXZhbF90IHB0ZSk7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHB0ZV92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcHRlOwogCi0JcGdkdmFsX3QgKCpwZ2RfdmFsKShwZ2RfdCk7Ci0JcGdkX3QgKCptYWtlX3BnZCkocGdkdmFsX3QgcGdkKTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcGdkX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wZ2Q7CiAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQpAQCAtMjk4LDEyICszMjcsMTIgQEAKIAogCXZvaWQgKCpzZXRfcHVkKShwdWRfdCAqcHVkcCwgcHVkX3QgcHVkdmFsKTsKIAotCXBtZHZhbF90ICgqcG1kX3ZhbCkocG1kX3QpOwotCXBtZF90ICgqbWFrZV9wbWQpKHBtZHZhbF90IHBtZCk7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHBtZF92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcG1kOwogCiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0Ci0JcHVkdmFsX3QgKCpwdWRfdmFsKShwdWRfdCk7Ci0JcHVkX3QgKCptYWtlX3B1ZCkocHVkdmFsX3QgcHVkKTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcHVkX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wdWQ7CiAKIAl2b2lkICgqc2V0X3BnZCkocGdkX3QgKnB1ZHAsIHBnZF90IHBnZHZhbCk7CiAjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCkBAIC0zODgsNiArNDE3LDggQEAKIAlhc20oInN0YXJ0XyIgI29wcyAiXyIgI25hbWUgIjogIiBjb2RlICI7IGVuZF8iICNvcHMgIl8iICNuYW1lICI6IikKIAogdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfbm9wKHZvaWQpOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfMzIodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lkZW50XzY0KHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbik7CiB1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZ25vcmUodW5zaWduZWQgbGVuKTsKIHVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2NhbGwodm9pZCAqaW5zbmJ1ZiwKIAkJCSAgICAgY29uc3Qgdm9pZCAqdGFyZ2V0LCB1MTYgdGd0X2Nsb2JiZXJzLApAQCAtNDc5LDI1ICs1MTAsNDUgQEAKICAqIG1ha2VzIHN1cmUgdGhlIGluY29taW5nIGFuZCBvdXRnb2luZyB0eXBlcyBhcmUgYWx3YXlzIGNvcnJlY3QuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCXVuc2lnbmVkIGxvbmcgX19lYXgsIF9fZWR4LCBfX2VjeAorI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19lYXggPSBfX2VheCwgX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAogI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJCVBWT1BfVkNBTExfQVJHUworCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiYSIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJkIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImMiICgodW5zaWduZWQgbG9uZykoeCkpCisKICNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCksCVwKIAkJCQkJIj1jIiAoX19lY3gpCiAjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwkJUFZPUF9WQ0FMTF9DTE9CQkVSUworCisjZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCkKKyNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJCVBWT1BfVkNBTExFRV9DTE9CQkVSUworCiAjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCiAjZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwotI2Vsc2UKLSNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQl1bnNpZ25lZCBsb25nIF9fZWRpLCBfX2VzaSwgX19lZHgsIF9fZWN4CisjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLworI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZWRpID0gX19lZGksIF9fZXNpID0gX19lc2ksCVwKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAogI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTLCBfX2VheAorCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiRCIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJTIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImQiICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkc0KHgpCQkiYyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKwogI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCSI9RCIgKF9fZWRpKSwJCQkJXAogCQkJCSI9UyIgKF9fZXNpKSwgIj1kIiAoX19lZHgpLAkJXAogCQkJCSI9YyIgKF9fZWN4KQotCiAjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwlQVk9QX1ZDQUxMX0NMT0JCRVJTLCAiPWEiIChfX2VheCkKIAorI2RlZmluZSBQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMJIj1hIiAoX19lYXgpCisjZGVmaW5lIFBWT1BfQ0FMTEVFX0NMT0JCRVJTCVBWT1BfVkNBTExFRV9DTE9CQkVSUworCiAjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCSAsICJyOCIsICJyOSIsICJyMTAiLCAicjExIgogI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMJICwgInJheCIsICJyOCIsICJyOSIsICJyMTAiLCAicjExIgotI2VuZGlmCisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0RFQlVHCiAjZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQlCVUdfT04ob3AgPT0gTlVMTCkKQEAgLTUwNSwxMCArNTU2LDExIEBACiAjZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQkoKHZvaWQpb3ApCiAjZW5kaWYKIAotI2RlZmluZSBfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorI2RlZmluZSBfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBjbGJyLCBjYWxsX2NsYnIsIGV4dHJhX2NsYnIsCQlcCisJCSAgICAgIHByZSwgcG9zdCwgLi4uKQkJCQkJXAogCSh7CQkJCQkJCQlcCiAJCXJldHR5cGUgX19yZXQ7CQkJCQkJXAotCQlQVk9QX0NBTExfQVJHUzsJCQkJCVwKKwkJUFZPUF9DQUxMX0FSR1M7CQkJCQkJXAogCQlQVk9QX1RFU1RfTlVMTChvcCk7CQkJCQlcCiAJCS8qIFRoaXMgaXMgMzItYml0IHNwZWNpZmljLCBidXQgaXMgb2theSBpbiA2NC1iaXQgKi8JXAogCQkvKiBzaW5jZSB0aGlzIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGhvbGQgKi8JCVwKQEAgLTUxNiw3MCArNTY4LDExMyBAQAogCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCiAJCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAogCQkJCSAgICAgcG9zdAkJCQlcCi0JCQkJICAgICA6IFBWT1BfQ0FMTF9DTE9CQkVSUwkJXAorCQkJCSAgICAgOiBjYWxsX2NsYnIJCQlcCiAJCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAotCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfQU5ZKSwJXAorCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKGNsYnIpLAkJXAogCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAotCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBFWFRSQV9DTE9CQkVSUyk7CVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKIAkJCV9fcmV0ID0gKHJldHR5cGUpKCgoKHU2NClfX2VkeCkgPDwgMzIpIHwgX19lYXgpOyBcCiAJCX0gZWxzZSB7CQkJCQkJXAogCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCiAJCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAogCQkJCSAgICAgcG9zdAkJCQlcCi0JCQkJICAgICA6IFBWT1BfQ0FMTF9DTE9CQkVSUwkJXAorCQkJCSAgICAgOiBjYWxsX2NsYnIJCQlcCiAJCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAotCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfQU5ZKSwJXAorCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKGNsYnIpLAkJXAogCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAotCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBFWFRSQV9DTE9CQkVSUyk7CVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKIAkJCV9fcmV0ID0gKHJldHR5cGUpX19lYXg7CQkJCVwKIAkJfQkJCQkJCQlcCiAJCV9fcmV0OwkJCQkJCQlcCiAJfSkKLSNkZWZpbmUgX19QVk9QX1ZDQUxMKG9wLCBwcmUsIHBvc3QsIC4uLikJCQkJXAorCisjZGVmaW5lIF9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCisJX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgQ0xCUl9BTlksIFBWT1BfQ0FMTF9DTE9CQkVSUywJXAorCQkgICAgICBFWFRSQV9DTE9CQkVSUywgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIF9fUFZPUF9DQUxMRUVTQVZFKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCisJX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJXAorCQkgICAgICBQVk9QX0NBTExFRV9DTE9CQkVSUywgLAkJCQlcCisJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKKworCisjZGVmaW5lIF9fX19QVk9QX1ZDQUxMKG9wLCBjbGJyLCBjYWxsX2NsYnIsIGV4dHJhX2NsYnIsIHByZSwgcG9zdCwgLi4uKQlcCiAJKHsJCQkJCQkJCVwKIAkJUFZPUF9WQ0FMTF9BUkdTOwkJCQkJXAogCQlQVk9QX1RFU1RfTlVMTChvcCk7CQkJCQlcCiAJCWFzbSB2b2xhdGlsZShwcmUJCQkJCVwKIAkJCSAgICAgcGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCQlcCiAJCQkgICAgIHBvc3QJCQkJCVwKLQkJCSAgICAgOiBQVk9QX1ZDQUxMX0NMT0JCRVJTCQkJXAorCQkJICAgICA6IGNhbGxfY2xicgkJCQlcCiAJCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQkJXAotCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9BTlkpLAkJXAorCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoY2xiciksCQkJXAogCQkJICAgICAgICMjX19WQV9BUkdTX18JCQkJXAotCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFZFWFRSQV9DTE9CQkVSUyk7CQlcCisJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CQlcCiAJfSkKIAorI2RlZmluZSBfX1BWT1BfVkNBTEwob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AsIENMQlJfQU5ZLCBQVk9QX1ZDQUxMX0NMT0JCRVJTLAkJXAorCQkgICAgICAgVkVYVFJBX0NMT0JCRVJTLAkJCQkJXAorCQkgICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKKwkJICAgICAgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKKwkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisKKwogI2RlZmluZSBQVk9QX0NBTEwwKHJldHR5cGUsIG9wKQkJCQkJCVwKIAlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiKQogI2RlZmluZSBQVk9QX1ZDQUxMMChvcCkJCQkJCQkJXAogCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiKQogCisjZGVmaW5lIFBWT1BfQ0FMTEVFMChyZXR0eXBlLCBvcCkJCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiKQorI2RlZmluZSBQVk9QX1ZDQUxMRUUwKG9wKQkJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIikKKworCiAjZGVmaW5lIFBWT1BfQ0FMTDEocmV0dHlwZSwgb3AsIGFyZzEpCQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpKQorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQogI2RlZmluZSBQVk9QX1ZDQUxMMShvcCwgYXJnMSkJCQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSkKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisKKyNkZWZpbmUgUFZPUF9DQUxMRUUxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAorCV9fUFZPUF9DQUxMRUVTQVZFKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQorI2RlZmluZSBQVk9QX1ZDQUxMRUUxKG9wLCBhcmcxKQkJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisKIAogI2RlZmluZSBQVk9QX0NBTEwyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLCAJXAotCSIxIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSkKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpKQogI2RlZmluZSBQVk9QX1ZDQUxMMihvcCwgYXJnMSwgYXJnMikJCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLCAJCVwKLQkiMSIgKCh1bnNpZ25lZCBsb25nKShhcmcyKSkpCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJCVwKKwkJICAgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKworI2RlZmluZSBQVk9QX0NBTExFRTIocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIpCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJXAorCQkJICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFMihvcCwgYXJnMSwgYXJnMikJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQlcCisJCQkgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKwogCiAjZGVmaW5lIFBWT1BfQ0FMTDMocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSkKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKICNkZWZpbmUgUFZPUF9WQ0FMTDMob3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLAkJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSkKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQkJXAorCQkgICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKIAogLyogVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGluIHg4Nl82NC4gV2UgY2FuIG1ha2UgaXQgbXVjaCBzaW1wbGVyICovCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKIAlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwJCQkJCVwKIAkJICAgICJwdXNoICVbX2FyZzRdOyIsICJsZWEgNCglJWVzcCksJSVlc3A7IiwJCVwKLQkJICAgICIwIiAoKHUzMikoYXJnMSkpLCAiMSIgKCh1MzIpKGFyZzIpKSwJCVwKLQkJICAgICIyIiAoKHUzMikoYXJnMykpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKKwkJICAgIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLCBQVk9QX0NBTExfQVJHMihhcmcyKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkczKGFyZzMpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKICNkZWZpbmUgUFZPUF9WQ0FMTDQob3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJCVwKIAlfX1BWT1BfVkNBTEwob3AsCQkJCQkJXAogCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXApAQCAtNTg3LDEzICs2ODIsMTMgQEAKIAkJICAgICIyIiAoKHUzMikoYXJnMykpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKICNlbHNlCiAjZGVmaW5lIFBWT1BfQ0FMTDQocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSwJCVwKLQkiMyIoKHVuc2lnbmVkIGxvbmcpKGFyZzQpKSkKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLAkJCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMShhcmcxKSwgUFZPUF9DQUxMX0FSRzIoYXJnMiksCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMyhhcmczKSwgUFZPUF9DQUxMX0FSRzQoYXJnNCkpCiAjZGVmaW5lIFBWT1BfVkNBTEw0KG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJCVwKLQkiMSIoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSwgIjIiKCh1bnNpZ25lZCBsb25nKShhcmczKSksCQlcCi0JIjMiKCh1bnNpZ25lZCBsb25nKShhcmc0KSkpCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsCQkJCQlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFBWT1BfQ0FMTF9BUkc0KGFyZzQpKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X2VuYWJsZWQodm9pZCkKQEAgLTk4NCwxMCArMTA3OSwxMSBAQAogCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMuZmx1c2hfdGxiX3NpbmdsZSwgYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCBjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCSAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB2YSkKIHsKLQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLmZsdXNoX3RsYl9vdGhlcnMsICZjcHVtYXNrLCBtbSwgdmEpOworCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMuZmx1c2hfdGxiX290aGVycywgY3B1bWFzaywgbW0sIHZhKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtMTA1OSwxMyArMTE1NSwxMyBAQAogCXB0ZXZhbF90IHJldDsKIAogCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LAotCQkJCSBwdl9tbXVfb3BzLm1ha2VfcHRlLAotCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUyKHB0ZXZhbF90LAorCQkJCSAgIHB2X21tdV9vcHMubWFrZV9wdGUsCisJCQkJICAgdmFsLCAodTY0KXZhbCA+PiAzMik7CiAJZWxzZQotCQlyZXQgPSBQVk9QX0NBTEwxKHB0ZXZhbF90LAotCQkJCSBwdl9tbXVfb3BzLm1ha2VfcHRlLAotCQkJCSB2YWwpOworCQlyZXQgPSBQVk9QX0NBTExFRTEocHRldmFsX3QsCisJCQkJICAgcHZfbW11X29wcy5tYWtlX3B0ZSwKKwkJCQkgICB2YWwpOwogCiAJcmV0dXJuIChwdGVfdCkgeyAucHRlID0gcmV0IH07CiB9CkBAIC0xMDc1LDQyICsxMTcxLDI1IEBACiAJcHRldmFsX3QgcmV0OwogCiAJaWYgKHNpemVvZihwdGV2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9IFBWT1BfQ0FMTDIocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX3ZhbCwKLQkJCQkgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUyKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV92YWwsCisJCQkJICAgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKIAllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX3ZhbCwKLQkJCQkgcHRlLnB0ZSk7CisJCXJldCA9IFBWT1BfQ0FMTEVFMShwdGV2YWxfdCwgcHZfbW11X29wcy5wdGVfdmFsLAorCQkJCSAgIHB0ZS5wdGUpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfZmxhZ3MocHRlX3QgcHRlKQotewotCXB0ZXZhbF90IHJldDsKLQotCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV9mbGFncywKLQkJCQkgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKLQllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX2ZsYWdzLAotCQkJCSBwdGUucHRlKTsKLQotI2lmZGVmIENPTkZJR19QQVJBVklSVF9ERUJVRwotCUJVR19PTihyZXQgJiBQVEVfUEZOX01BU0spOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSBwZ2RfdCBfX3BnZChwZ2R2YWxfdCB2YWwpCiB7CiAJcGdkdmFsX3QgcmV0OwogCiAJaWYgKHNpemVvZihwZ2R2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9IFBWT1BfQ0FMTDIocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCi0JCQkJIHZhbCwgKHU2NCl2YWwgPj4gMzIpOworCQlyZXQgPSBQVk9QX0NBTExFRTIocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCisJCQkJICAgdmFsLCAodTY0KXZhbCA+PiAzMik7CiAJZWxzZQotCQlyZXQgPSBQVk9QX0NBTEwxKHBnZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcGdkLAotCQkJCSB2YWwpOworCQlyZXQgPSBQVk9QX0NBTExFRTEocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCisJCQkJICAgdmFsKTsKIAogCXJldHVybiAocGdkX3QpIHsgcmV0IH07CiB9CkBAIC0xMTIwLDExICsxMTk5LDExIEBACiAJcGdkdmFsX3QgcmV0OwogCiAJaWYgKHNpemVvZihwZ2R2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9ICBQVk9QX0NBTEwyKHBnZHZhbF90LCBwdl9tbXVfb3BzLnBnZF92YWwsCi0JCQkJICBwZ2QucGdkLCAodTY0KXBnZC5wZ2QgPj4gMzIpOworCQlyZXQgPSAgUFZPUF9DQUxMRUUyKHBnZHZhbF90LCBwdl9tbXVfb3BzLnBnZF92YWwsCisJCQkJICAgIHBnZC5wZ2QsICh1NjQpcGdkLnBnZCA+PiAzMik7CiAJZWxzZQotCQlyZXQgPSAgUFZPUF9DQUxMMShwZ2R2YWxfdCwgcHZfbW11X29wcy5wZ2RfdmFsLAotCQkJCSAgcGdkLnBnZCk7CisJCXJldCA9ICBQVk9QX0NBTExFRTEocGdkdmFsX3QsIHB2X21tdV9vcHMucGdkX3ZhbCwKKwkJCQkgICAgcGdkLnBnZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE4OCwxMSArMTI2NywxMSBAQAogCXBtZHZhbF90IHJldDsKIAogCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAotCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUyKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAorCQkJCSAgIHZhbCwgKHU2NCl2YWwgPj4gMzIpOwogCWVsc2UKLQkJcmV0ID0gUFZPUF9DQUxMMShwbWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3BtZCwKLQkJCQkgdmFsKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUxKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAorCQkJCSAgIHZhbCk7CiAKIAlyZXR1cm4gKHBtZF90KSB7IHJldCB9OwogfQpAQCAtMTIwMiwxMSArMTI4MSwxMSBAQAogCXBtZHZhbF90IHJldDsKIAogCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSAgUFZPUF9DQUxMMihwbWR2YWxfdCwgcHZfbW11X29wcy5wbWRfdmFsLAotCQkJCSAgcG1kLnBtZCwgKHU2NClwbWQucG1kID4+IDMyKTsKKwkJcmV0ID0gIFBWT1BfQ0FMTEVFMihwbWR2YWxfdCwgcHZfbW11X29wcy5wbWRfdmFsLAorCQkJCSAgICBwbWQucG1kLCAodTY0KXBtZC5wbWQgPj4gMzIpOwogCWVsc2UKLQkJcmV0ID0gIFBWT1BfQ0FMTDEocG1kdmFsX3QsIHB2X21tdV9vcHMucG1kX3ZhbCwKLQkJCQkgIHBtZC5wbWQpOworCQlyZXQgPSAgUFZPUF9DQUxMRUUxKHBtZHZhbF90LCBwdl9tbXVfb3BzLnBtZF92YWwsCisJCQkJICAgIHBtZC5wbWQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyMjgsMTEgKzEzMDcsMTEgQEAKIAlwdWR2YWxfdCByZXQ7CiAKIAlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKLQkJcmV0ID0gUFZPUF9DQUxMMihwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKLQkJCQkgdmFsLCAodTY0KXZhbCA+PiAzMik7CisJCXJldCA9IFBWT1BfQ0FMTEVFMihwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKKwkJCQkgICB2YWwsICh1NjQpdmFsID4+IDMyKTsKIAllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHVkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wdWQsCi0JCQkJIHZhbCk7CisJCXJldCA9IFBWT1BfQ0FMTEVFMShwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKKwkJCQkgICB2YWwpOwogCiAJcmV0dXJuIChwdWRfdCkgeyByZXQgfTsKIH0KQEAgLTEyNDIsMTEgKzEzMjEsMTEgQEAKIAlwdWR2YWxfdCByZXQ7CiAKIAlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKLQkJcmV0ID0gIFBWT1BfQ0FMTDIocHVkdmFsX3QsIHB2X21tdV9vcHMucHVkX3ZhbCwKLQkJCQkgIHB1ZC5wdWQsICh1NjQpcHVkLnB1ZCA+PiAzMik7CisJCXJldCA9ICBQVk9QX0NBTExFRTIocHVkdmFsX3QsIHB2X21tdV9vcHMucHVkX3ZhbCwKKwkJCQkgICAgcHVkLnB1ZCwgKHU2NClwdWQucHVkID4+IDMyKTsKIAllbHNlCi0JCXJldCA9ICBQVk9QX0NBTEwxKHB1ZHZhbF90LCBwdl9tbXVfb3BzLnB1ZF92YWwsCi0JCQkJICBwdWQucHVkKTsKKwkJcmV0ID0gIFBWT1BfQ0FMTEVFMShwdWR2YWxfdCwgcHZfbW11X29wcy5wdWRfdmFsLAorCQkJCSAgICBwdWQucHVkKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzc0LDkgKzE0NTMsMTAgQEAKIH0KIAogdm9pZCBfcGFyYXZpcnRfbm9wKHZvaWQpOwotI2RlZmluZSBwYXJhdmlydF9ub3AJKCh2b2lkICopX3BhcmF2aXJ0X25vcCkKK3UzMiBfcGFyYXZpcnRfaWRlbnRfMzIodTMyKTsKK3U2NCBfcGFyYXZpcnRfaWRlbnRfNjQodTY0KTsKIAotdm9pZCBwYXJhdmlydF91c2VfYnl0ZWxvY2tzKHZvaWQpOworI2RlZmluZSBwYXJhdmlydF9ub3AJKCh2b2lkICopX3BhcmF2aXJ0X25vcCkKIAogI2lmZGVmIENPTkZJR19TTVAKIApAQCAtMTQyNiwxMiArMTUwNiwzNyBAQAogCV9fcGFyYWluc3RydWN0aW9uc19lbmRbXTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLSNkZWZpbmUgUFZfU0FWRV9SRUdTICJwdXNobCAlJWVjeDsgcHVzaGwgJSVlZHg7IgotI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgInBvcGwgJSVlZHg7IHBvcGwgJSVlY3giCisjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaGwgJWVjeDsgcHVzaGwgJWVkeDsiCisjZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyAicG9wbCAlZWR4OyBwb3BsICVlY3g7IgorCisvKiBzYXZlIGFuZCByZXN0b3JlIGFsbCBjYWxsZXItc2F2ZSByZWdpc3RlcnMsIGV4Y2VwdCByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgUFZfU0FWRV9BTExfQ0FMTEVSX1JFR1MJCSJwdXNobCAlZWN4OyIKKyNkZWZpbmUgUFZfUkVTVE9SRV9BTExfQ0FMTEVSX1JFR1MJInBvcGwgICVlY3g7IgorCiAjZGVmaW5lIFBWX0ZMQUdTX0FSRyAiMCIKICNkZWZpbmUgUFZfRVhUUkFfQ0xPQkJFUlMKICNkZWZpbmUgUFZfVkVYVFJBX0NMT0JCRVJTCiAjZWxzZQorLyogc2F2ZSBhbmQgcmVzdG9yZSBhbGwgY2FsbGVyLXNhdmUgcmVnaXN0ZXJzLCBleGNlcHQgcmV0dXJuIHZhbHVlICovCisjZGVmaW5lIFBWX1NBVkVfQUxMX0NBTExFUl9SRUdTCQkJCQkJXAorCSJwdXNoICVyY3g7IgkJCQkJCQlcCisJInB1c2ggJXJkeDsiCQkJCQkJCVwKKwkicHVzaCAlcnNpOyIJCQkJCQkJXAorCSJwdXNoICVyZGk7IgkJCQkJCQlcCisJInB1c2ggJXI4OyIJCQkJCQkJXAorCSJwdXNoICVyOTsiCQkJCQkJCVwKKwkicHVzaCAlcjEwOyIJCQkJCQkJXAorCSJwdXNoICVyMTE7IgorI2RlZmluZSBQVl9SRVNUT1JFX0FMTF9DQUxMRVJfUkVHUwkJCQkJXAorCSJwb3AgJXIxMTsiCQkJCQkJCVwKKwkicG9wICVyMTA7IgkJCQkJCQlcCisJInBvcCAlcjk7IgkJCQkJCQlcCisJInBvcCAlcjg7IgkJCQkJCQlcCisJInBvcCAlcmRpOyIJCQkJCQkJXAorCSJwb3AgJXJzaTsiCQkJCQkJCVwKKwkicG9wICVyZHg7IgkJCQkJCQlcCisJInBvcCAlcmN4OyIKKwogLyogV2Ugc2F2ZSBzb21lIHJlZ2lzdGVycywgYnV0IGFsbCBvZiB0aGVtLCB0aGF0J3MgdG9vIG11Y2guIFdlIGNsb2JiZXIgYWxsCiAgKiBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzIGJ1dCB0aGUgYXJndW1lbnQgcGFyYW1ldGVyICovCiAjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaHEgJSVyZGk7IgpAQCAtMTQ0MSw1MiArMTU0Niw3NiBAQAogI2RlZmluZSBQVl9GTEFHU19BUkcgIkQiCiAjZW5kaWYKIAorLyoKKyAqIEdlbmVyYXRlIGEgdGh1bmsgYXJvdW5kIGEgZnVuY3Rpb24gd2hpY2ggc2F2ZXMgYWxsIGNhbGxlci1zYXZlCisgKiByZWdpc3RlcnMgZXhjZXB0IGZvciB0aGUgcmV0dXJuIHZhbHVlLiAgVGhpcyBhbGxvd3MgQyBmdW5jdGlvbnMgdG8KKyAqIGJlIGNhbGxlZCBmcm9tIGFzc2VtYmxlciBjb2RlIHdoZXJlIGZld2VyIHRoYW4gbm9ybWFsIHJlZ2lzdGVycyBhcmUKKyAqIGF2YWlsYWJsZS4gIEl0IG1heSBhbHNvIGhlbHAgY29kZSBnZW5lcmF0aW9uIGFyb3VuZCBjYWxscyBmcm9tIEMKKyAqIGNvZGUgaWYgdGhlIGNvbW1vbiBjYXNlIGRvZXNuJ3QgdXNlIG1hbnkgcmVnaXN0ZXJzLgorICoKKyAqIFdoZW4gYSBjYWxsZWUgaXMgd3JhcHBlZCBpbiBhIHRodW5rLCB0aGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCBhbGwKKyAqIGFyZyByZWdzIGFuZCBhbGwgc2NyYXRjaCByZWdpc3RlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgdGhlCisgKiBjYWxsLiBUaGUgcmV0dXJuIHZhbHVlIGluIHJheC9lYXggd2lsbCBub3QgYmUgc2F2ZWQsIGV2ZW4gZm9yIHZvaWQKKyAqIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKGZ1bmMpCQkJCQlcCisJZXh0ZXJuIHR5cGVvZihmdW5jKSBfX3Jhd19jYWxsZWVfc2F2ZV8jI2Z1bmM7CQkJXAorCXN0YXRpYyB2b2lkICpfXyMjZnVuYyMjX18gX191c2VkID0gZnVuYzsJCQlcCisJCQkJCQkJCQlcCisJYXNtKCIucHVzaHNlY3Rpb24gLnRleHQ7IgkJCQkJXAorCSAgICAiX19yYXdfY2FsbGVlX3NhdmVfIiAjZnVuYyAiOiAiCQkJCVwKKwkgICAgUFZfU0FWRV9BTExfQ0FMTEVSX1JFR1MJCQkJCVwKKwkgICAgImNhbGwgIiAjZnVuYyAiOyIJCQkJCQlcCisJICAgIFBWX1JFU1RPUkVfQUxMX0NBTExFUl9SRUdTCQkJCQlcCisJICAgICJyZXQ7IgkJCQkJCQlcCisJICAgICIucG9wc2VjdGlvbiIpCisKKy8qIEdldCBhIHJlZmVyZW5jZSB0byBhIGNhbGxlZS1zYXZlIGZ1bmN0aW9uICovCisjZGVmaW5lIFBWX0NBTExFRV9TQVZFKGZ1bmMpCQkJCQkJXAorCSgoc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlKSB7IF9fcmF3X2NhbGxlZV9zYXZlXyMjZnVuYyB9KQorCisvKiBQcm9taXNlIHRoYXQgImZ1bmMiIGFscmVhZHkgdXNlcyB0aGUgcmlnaHQgY2FsbGluZyBjb252ZW50aW9uICovCisjZGVmaW5lIF9fUFZfSVNfQ0FMTEVFX1NBVkUoZnVuYykJCQlcCisJKChzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUpIHsgZnVuYyB9KQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZjsKIAotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDogIj1hIihmKQogCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnNhdmVfZmwpLAogCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFBWX1ZFWFRSQV9DTE9CQkVSUyk7CisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiAJcmV0dXJuIGY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDogIj1hIihmKQogCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAogCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAogCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFBWX0VYVFJBX0NMT0JCRVJTKTsKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDoKIAkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZGlzYWJsZSksCiAJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiIFBWX0VYVFJBX0NMT0JCRVJTKTsKKwkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDoKIAkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZW5hYmxlKSwKIAkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIgUFZfRVhUUkFfQ0xPQkJFUlMpOworCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX2lycV9zYXZlKHZvaWQpCkBAIC0xNTI5LDMzICsxNjU4LDQ5IEBACiAJLnBvcHNlY3Rpb24KIAogCisjZGVmaW5lIENPTkRfUFVTSChzZXQsIG1hc2ssIHJlZykJCQlcCisJLmlmICgofihzZXQpKSAmIG1hc2spOyBwdXNoICVyZWc7IC5lbmRpZgorI2RlZmluZSBDT05EX1BPUChzZXQsIG1hc2ssIHJlZykJCQlcCisJLmlmICgofihzZXQpKSAmIG1hc2spOyBwb3AgJXJlZzsgLmVuZGlmCisKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFBWX1NBVkVfUkVHUwkJCQlcCi0JcHVzaCAlcmF4OwkJCQlcCi0JcHVzaCAlcmN4OwkJCQlcCi0JcHVzaCAlcmR4OwkJCQlcCi0JcHVzaCAlcnNpOwkJCQlcCi0JcHVzaCAlcmRpOwkJCQlcCi0JcHVzaCAlcjg7CQkJCVwKLQlwdXNoICVyOTsJCQkJXAotCXB1c2ggJXIxMDsJCQkJXAotCXB1c2ggJXIxMQotI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MJCQkJXAotCXBvcCAlcjExOwkJCQlcCi0JcG9wICVyMTA7CQkJCVwKLQlwb3AgJXI5OwkJCQlcCi0JcG9wICVyODsJCQkJXAotCXBvcCAlcmRpOwkJCQlcCi0JcG9wICVyc2k7CQkJCVwKLQlwb3AgJXJkeDsJCQkJXAotCXBvcCAlcmN4OwkJCQlcCi0JcG9wICVyYXgKKworI2RlZmluZSBQVl9TQVZFX1JFR1Moc2V0KQkJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JBWCwgcmF4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JDWCwgcmN4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JEWCwgcmR4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JTSSwgcnNpKTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JESSwgcmRpKTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1I4LCByOCk7CQlcCisJQ09ORF9QVVNIKHNldCwgQ0xCUl9SOSwgcjkpOwkJXAorCUNPTkRfUFVTSChzZXQsIENMQlJfUjEwLCByMTApOwkJXAorCUNPTkRfUFVTSChzZXQsIENMQlJfUjExLCByMTEpCisjZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyhzZXQpCQkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9SMTEsIHIxMSk7CQlcCisJQ09ORF9QT1Aoc2V0LCBDTEJSX1IxMCwgcjEwKTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUjksIHI5KTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUjgsIHI4KTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUkRJLCByZGkpOwkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9SU0ksIHJzaSk7CQlcCisJQ09ORF9QT1Aoc2V0LCBDTEJSX1JEWCwgcmR4KTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUkNYLCByY3gpOwkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9SQVgsIHJheCkKKwogI2RlZmluZSBQQVJBX1BBVENIKHN0cnVjdCwgb2ZmKSAgICAgICAgKChQQVJBVklSVF9QQVRDSF8jI3N0cnVjdCArIChvZmYpKSAvIDgpCiAjZGVmaW5lIFBBUkFfU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcykgX1BWU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcywgLnF1YWQsIDgpCiAjZGVmaW5lIFBBUkFfSU5ESVJFQ1QoYWRkcikJKmFkZHIoJXJpcCkKICNlbHNlCi0jZGVmaW5lIFBWX1NBVkVfUkVHUyAgIHB1c2hsICVlYXg7IHB1c2hsICVlZGk7IHB1c2hsICVlY3g7IHB1c2hsICVlZHgKLSNkZWZpbmUgUFZfUkVTVE9SRV9SRUdTIHBvcGwgJWVkeDsgcG9wbCAlZWN4OyBwb3BsICVlZGk7IHBvcGwgJWVheAorI2RlZmluZSBQVl9TQVZFX1JFR1Moc2V0KQkJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VBWCwgZWF4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VESSwgZWRpKTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VDWCwgZWN4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VEWCwgZWR4KQorI2RlZmluZSBQVl9SRVNUT1JFX1JFR1Moc2V0KQkJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfRURYLCBlZHgpOwkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9FQ1gsIGVjeCk7CQlcCisJQ09ORF9QT1Aoc2V0LCBDTEJSX0VESSwgZWRpKTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfRUFYLCBlYXgpCisKICNkZWZpbmUgUEFSQV9QQVRDSChzdHJ1Y3QsIG9mZikgICAgICAgICgoUEFSQVZJUlRfUEFUQ0hfIyNzdHJ1Y3QgKyAob2ZmKSkgLyA0KQogI2RlZmluZSBQQVJBX1NJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMpIF9QVlNJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMsIC5sb25nLCA0KQogI2RlZmluZSBQQVJBX0lORElSRUNUKGFkZHIpCSolY3M6YWRkcgpAQCAtMTU2NywxNSArMTcxMiwxNSBAQAogCiAjZGVmaW5lIERJU0FCTEVfSU5URVJSVVBUUyhjbG9iYmVycykJCQkJCVwKIAlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9pcnFfb3BzLCBQVl9JUlFfaXJxX2Rpc2FibGUpLCBjbG9iYmVycywgXAotCQkgIFBWX1NBVkVfUkVHUzsJCQkJCQlcCisJCSAgUFZfU0FWRV9SRUdTKGNsb2JiZXJzIHwgQ0xCUl9DQUxMRUVfU0FWRSk7CQlcCiAJCSAgY2FsbCBQQVJBX0lORElSRUNUKHB2X2lycV9vcHMrUFZfSVJRX2lycV9kaXNhYmxlKTsJXAotCQkgIFBWX1JFU1RPUkVfUkVHUzspCQkJXAorCQkgIFBWX1JFU1RPUkVfUkVHUyhjbG9iYmVycyB8IENMQlJfQ0FMTEVFX1NBVkUpOykKIAogI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUUyhjbG9iYmVycykJCQkJCVwKIAlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9pcnFfb3BzLCBQVl9JUlFfaXJxX2VuYWJsZSksIGNsb2JiZXJzLAlcCi0JCSAgUFZfU0FWRV9SRUdTOwkJCQkJCVwKKwkJICBQVl9TQVZFX1JFR1MoY2xvYmJlcnMgfCBDTEJSX0NBTExFRV9TQVZFKTsJCVwKIAkJICBjYWxsIFBBUkFfSU5ESVJFQ1QocHZfaXJxX29wcytQVl9JUlFfaXJxX2VuYWJsZSk7CVwKLQkJICBQVl9SRVNUT1JFX1JFR1M7KQorCQkgIFBWX1JFU1RPUkVfUkVHUyhjbG9iYmVycyB8IENMQlJfQ0FMTEVFX1NBVkUpOykKIAogI2RlZmluZSBVU0VSR1NfU1lTUkVUMzIJCQkJCQkJXAogCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV91c2VyZ3Nfc3lzcmV0MzIpLAlcCkBAIC0xNjA1LDExICsxNzUwLDE1IEBACiAJUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX3N3YXBncyksIENMQlJfTk9ORSwJXAogCQkgIHN3YXBncykKIAorLyoKKyAqIE5vdGU6IHN3YXBncyBpcyB2ZXJ5IHNwZWNpYWwsIGFuZCBpbiBwcmFjdGlzZSBpcyBlaXRoZXIgZ29pbmcgdG8gYmUKKyAqIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgInN3YXBncyIgaW5zdHJ1Y3Rpb24gb3Igc29tZXRoaW5nIHZlcnkKKyAqIHNwZWNpYWwuICBFaXRoZXIgd2F5LCB3ZSBkb24ndCBuZWVkIHRvIHNhdmUgYW55IHJlZ2lzdGVycyBmb3IKKyAqIGl0LgorICovCiAjZGVmaW5lIFNXQVBHUwkJCQkJCQkJXAogCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV9zd2FwZ3MpLCBDTEJSX05PTkUsCVwKLQkJICBQVl9TQVZFX1JFR1M7CQkJCQkJXAotCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9zd2FwZ3MpOwkJXAotCQkgIFBWX1JFU1RPUkVfUkVHUwkJCQkJXAorCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9zd2FwZ3MpCQlcCiAJCSApCiAKICNkZWZpbmUgR0VUX0NSMl9JTlRPX1JDWAkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGI4NDkzYjMuLmIwZTcwMDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC01LDEwICs1LDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfUEFUCiBleHRlcm4gaW50IHBhdF9lbmFibGVkOwotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfcGF0X3N1cHBvcnQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKICNlbHNlCiBzdGF0aWMgY29uc3QgaW50IHBhdF9lbmFibGVkOwotc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX3BhdF9zdXBwb3J0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9CiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgcGF0X2luaXQodm9pZCk7CkBAIC0xNyw2ICsxNSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcmVxX3R5cGUsIHVuc2lnbmVkIGxvbmcgKnJldF90eXBlKTsKIGV4dGVybiBpbnQgZnJlZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCk7CiAKLWV4dGVybiB2b2lkIHBhdF9kaXNhYmxlKGNoYXIgKnJlYXNvbik7CitleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCXVuc2lnbmVkIGxvbmcgZmxhZyk7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS1mdW5jdGlvbnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLWZ1bmN0aW9ucy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BkYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmJmZmY4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BkYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfUERBX0gKLSNkZWZpbmUgX0FTTV9YODZfUERBX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotLyogUGVyIHByb2Nlc3NvciBkYXRhc3RydWN0dXJlLiAlZ3MgcG9pbnRzIHRvIGl0IHdoaWxlIHRoZSBrZXJuZWwgcnVucyAqLwotc3RydWN0IHg4NjY0X3BkYSB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwY3VycmVudDsJLyogMCAgQ3VycmVudCBwcm9jZXNzICovCi0JdW5zaWduZWQgbG9uZyBkYXRhX29mZnNldDsJLyogOCBQZXIgY3B1IGRhdGEgb2Zmc2V0IGZyb20gbGlua2VyCi0JCQkJCSAgIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIGtlcm5lbHN0YWNrOwkvKiAxNiB0b3Agb2Yga2VybmVsIHN0YWNrIGZvciBjdXJyZW50ICovCi0JdW5zaWduZWQgbG9uZyBvbGRyc3A7CQkvKiAyNCB1c2VyIHJzcCBmb3Igc3lzdGVtIGNhbGwgKi8KLQlpbnQgaXJxY291bnQ7CQkJLyogMzIgSXJxIG5lc3RpbmcgY291bnRlci4gU3RhcnRzIC0xICovCi0JdW5zaWduZWQgaW50IGNwdW51bWJlcjsJCS8qIDM2IExvZ2ljYWwgQ1BVIG51bWJlciAqLwotI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgotCXVuc2lnbmVkIGxvbmcgc3RhY2tfY2FuYXJ5OwkvKiA0MCBzdGFjayBjYW5hcnkgdmFsdWUgKi8KLQkJCQkJLyogZ2NjLUFCSTogdGhpcyBjYW5hcnkgTVVTVCBiZSBhdAotCQkJCQkgICBvZmZzZXQgNDAhISEgKi8KLSNlbmRpZgotCWNoYXIgKmlycXN0YWNrcHRyOwotCXNob3J0IG5vZGVudW1iZXI7CQkvKiBudW1iZXIgb2YgY3VycmVudCBub2RlICgzMmsgbWF4KSAqLwotCXNob3J0IGluX2Jvb3RtZW07CQkvKiBwZGEgbGl2ZXMgaW4gYm9vdG1lbSAqLwotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLQl1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CS8qIG51bWJlciBvZiBOTUkgb24gdGhpcyBDUFVzICovCi0Jc2hvcnQgbW11X3N0YXRlOwotCXNob3J0IGlzaWRsZTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07Ci0JdW5zaWduZWQgYXBpY190aW1lcl9pcnFzOwotCXVuc2lnbmVkIGlycTBfaXJxczsKLQl1bnNpZ25lZCBpcnFfcmVzY2hlZF9jb3VudDsKLQl1bnNpZ25lZCBpcnFfY2FsbF9jb3VudDsKLQl1bnNpZ25lZCBpcnFfdGxiX2NvdW50OwotCXVuc2lnbmVkIGlycV90aGVybWFsX2NvdW50OwotCXVuc2lnbmVkIGlycV90aHJlc2hvbGRfY291bnQ7Ci0JdW5zaWduZWQgaXJxX3NwdXJpb3VzX2NvdW50OwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCi1leHRlcm4gc3RydWN0IHg4NjY0X3BkYSAqKl9jcHVfcGRhOwotZXh0ZXJuIHZvaWQgcGRhX2luaXQoaW50KTsKLQotI2RlZmluZSBjcHVfcGRhKGkpIChfY3B1X3BkYVtpXSkKLQotLyoKLSAqIFRoZXJlIGlzIG5vIGZhc3Qgd2F5IHRvIGdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBQREEsIGFsbCB0aGUgYWNjZXNzZXMKLSAqIGhhdmUgdG8gbWVudGlvbiAlZnMvJWdzLiAgU28gaXQgbmVlZHMgdG8gYmUgZG9uZSB0aGlzIFRvcnZhbGRpYW4gd2F5LgotICovCi1leHRlcm4gdm9pZCBfX2JhZF9wZGFfZmllbGQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLQotLyoKLSAqIHByb3h5X3BkYSBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LCBidXQgdGVsbCBnY2MgaXQgaXMgYWNjZXNzZWQgZm9yCi0gKiBhbGwgUERBIGFjY2Vzc2VzIHNvIGl0IGdldHMgcmVhZC93cml0ZSBkZXBlbmRlbmNpZXMgcmlnaHQuCi0gKi8KLWV4dGVybiBzdHJ1Y3QgeDg2NjRfcGRhIF9wcm94eV9wZGE7Ci0KLSNkZWZpbmUgcGRhX29mZnNldChmaWVsZCkgb2Zmc2V0b2Yoc3RydWN0IHg4NjY0X3BkYSwgZmllbGQpCi0KLSNkZWZpbmUgcGRhX3RvX29wKG9wLCBmaWVsZCwgdmFsKQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl0eXBlZGVmIHR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSBUX187CQkJCVwKLQlpZiAoMCkgeyBUX18gdG1wX187IHRtcF9fID0gKHZhbCk7IH0JLyogdHlwZSBjaGVja2luZyAqLwlcCi0Jc3dpdGNoIChzaXplb2YoX3Byb3h5X3BkYS5maWVsZCkpIHsJCQkJXAotCWNhc2UgMjoJCQkJCQkJCVwKLQkJYXNtKG9wICJ3ICUxLCUlZ3M6JWMyIiA6CQkJCVwKLQkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAotCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAotCQkgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbShvcCAibCAlMSwlJWdzOiVjMiIgOgkJCQlcCi0JCSAgICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6CQkJCVwKLQkJICAgICJyaSIgKChUX18pdmFsKSwJCQkJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgODoJCQkJCQkJCVwKLQkJYXNtKG9wICJxICUxLCUlZ3M6JWMyIjoJCQkJCVwKLQkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAotCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAotCQkgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQlkZWZhdWx0OgkJCQkJCQlcCi0JCV9fYmFkX3BkYV9maWVsZCgpOwkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgcGRhX2Zyb21fb3Aob3AsIGZpZWxkKQkJCVwKLSh7CQkJCQkJXAotCXR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSByZXRfXzsJCVwKLQlzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgewlcCi0JY2FzZSAyOgkJCQkJXAotCQlhc20ob3AgIncgJSVnczolYzEsJTAiIDoJXAotCQkgICAgIj1yIiAocmV0X18pIDoJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCi0JCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQlicmVhazsJCQkJXAotCWNhc2UgNDoJCQkJCVwKLQkJYXNtKG9wICJsICUlZ3M6JWMxLCUwIjoJCVwKLQkJICAgICI9ciIgKHJldF9fKToJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCi0JCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQlicmVhazsJCQkJXAotCWNhc2UgODoJCQkJCVwKLQkJYXNtKG9wICJxICUlZ3M6JWMxLCUwIjoJCVwKLQkJICAgICI9ciIgKHJldF9fKSA6CQlcCi0JCSAgICAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSwJXAotCQkgICAgIm0iIChfcHJveHlfcGRhLmZpZWxkKSk7CVwKLQkJYnJlYWs7CQkJCVwKLQlkZWZhdWx0OgkJCQlcCi0JCV9fYmFkX3BkYV9maWVsZCgpOwkJXAotCX0JCQkJCVwKLQlyZXRfXzsJCQkJCVwKLX0pCi0KLSNkZWZpbmUgcmVhZF9wZGEoZmllbGQpCQlwZGFfZnJvbV9vcCgibW92IiwgZmllbGQpCi0jZGVmaW5lIHdyaXRlX3BkYShmaWVsZCwgdmFsKQlwZGFfdG9fb3AoIm1vdiIsIGZpZWxkLCB2YWwpCi0jZGVmaW5lIGFkZF9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJhZGQiLCBmaWVsZCwgdmFsKQotI2RlZmluZSBzdWJfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgic3ViIiwgZmllbGQsIHZhbCkKLSNkZWZpbmUgb3JfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgib3IiLCBmaWVsZCwgdmFsKQotCi0vKiBUaGlzIGlzIG5vdCBhdG9taWMgYWdhaW5zdCBvdGhlciBDUFVzIC0tIENQVSBwcmVlbXB0aW9uIG5lZWRzIHRvIGJlIG9mZiAqLwotI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXRfcGRhKGJpdCwgZmllbGQpCQkJCVwKLSh7CQkJCQkJCQkJXAotCWludCBvbGRfXzsJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiYnRyICUyLCUlZ3M6JWMzXG5cdHNiYmwgJTAsJTAiCQkJXAotCQkgICAgIDogIj1yIiAob2xkX18pLCAiK20iIChfcHJveHlfcGRhLmZpZWxkKQkJXAotCQkgICAgIDogImRJciIgKGJpdCksICJpIiAocGRhX29mZnNldChmaWVsZCkpIDogIm1lbW9yeSIpO1wKLQlvbGRfXzsJCQkJCQkJCVwKLX0pCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBEQV9TVEFDS09GRlNFVCAoNSo4KQotCi0jZW5kaWYgLyogX0FTTV9YODZfUERBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggZWNlNzIwNS4uYWVlMTAzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTIsNTMgKzIsMTIgQEAKICNkZWZpbmUgX0FTTV9YODZfUEVSQ1BVX0gKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0vKiBTYW1lIGFzIGFzbS1nZW5lcmljL3BlcmNwdS5oLCBleGNlcHQgdGhhdCB3ZSBzdG9yZSB0aGUgcGVyIGNwdSBvZmZzZXQKLSAgIGluIHRoZSBQREEuIExvbmdlciB0ZXJtIHRoZSBQREEgYW5kIGV2ZXJ5IHBlciBjcHUgdmFyaWFibGUKLSAgIHNob3VsZCBiZSBqdXN0IHB1dCBpbnRvIGEgc2luZ2xlIHNlY3Rpb24gYW5kIHJlZmVyZW5jZWQgZGlyZWN0bHkKLSAgIGZyb20gJWdzICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgotCi0jZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAoY3B1X3BkYShjcHUpLT5kYXRhX29mZnNldCkKLSNkZWZpbmUgX19teV9jcHVfb2Zmc2V0IHJlYWRfcGRhKGRhdGFfb2Zmc2V0KQotCi0jZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQotCisjZGVmaW5lIF9fcGVyY3B1X3NlZwkJZ3MKKyNkZWZpbmUgX19wZXJjcHVfbW92X29wCQltb3ZxCisjZWxzZQorI2RlZmluZSBfX3BlcmNwdV9zZWcJCWZzCisjZGVmaW5lIF9fcGVyY3B1X21vdl9vcAkJbW92bAogI2VuZGlmCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+Ci0KLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeDg2NjRfcGRhLCBwZGEpOwotCi0vKgotICogVGhlc2UgYXJlIHN1cHBvc2VkIHRvIGJlIGltcGxlbWVudGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uIHdoaWNoCi0gKiBvcGVyYXRlcyBvbiB0aGUgcGVyLWNwdSBkYXRhIGJhc2Ugc2VnbWVudC4gIHg4Ni02NCBkb2Vzbid0IGhhdmUKLSAqIHRoYXQgeWV0LCBzbyB0aGlzIGlzIGEgZmFpcmx5IGluZWZmaWNpZW50IHdvcmthcm91bmQgZm9yIHRoZQotICogbWVhbnRpbWUuICBUaGUgc2luZ2xlIGluc3RydWN0aW9uIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KLSAqIHByZWVtcHRpb24gYW5kIGludGVycnVwdHMsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBkaXNhYmxlCi0gKiBpbnRlcnJ1cHRzIGhlcmUgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuICBIb3dldmVyLCBiZWNhdXNlIGl0Ci0gKiBjYW4gYmUgdXNlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQtZGlzYWJsZS9lbmFibGUsIHdlIGNhbid0IGFjdHVhbGx5Ci0gKiBkaXNhYmxlIGludGVycnVwdHM7IGRpc2FibGluZyBwcmVlbXB0aW9uIGlzIGVub3VnaC4KLSAqLwotI2RlZmluZSB4ODZfcmVhZF9wZXJjcHUodmFyKQkJCQkJCVwKLQkoewkJCQkJCQkJXAotCQl0eXBlb2YocGVyX2NwdV92YXIodmFyKSkgX190bXA7CQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCV9fdG1wID0gX19nZXRfY3B1X3Zhcih2YXIpOwkJCQlcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JCV9fdG1wOwkJCQkJCQlcCi0JfSkKLQotI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCV9fZ2V0X2NwdV92YXIodmFyKSA9ICh2YWwpOwkJCQlcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JfSB3aGlsZSgwKQotCi0jZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNjUsNDcgKzI0LDQ4IEBACiAgKiAgICBQRVJfQ1BVKGNwdV9nZHRfZGVzY3IsICVlYngpCiAgKi8KICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCVwKLQltb3ZsICVmczpwZXJfY3B1X18jI3RoaXNfY3B1X29mZiwgcmVnOwkJXAorI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCQkJCVwKKwlfX3BlcmNwdV9tb3Zfb3AgJV9fcGVyY3B1X3NlZzpwZXJfY3B1X190aGlzX2NwdV9vZmYsIHJlZzsJXAogCWxlYSBwZXJfY3B1X18jI3ZhcihyZWcpLCByZWcKLSNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQklZnM6cGVyX2NwdV9fIyN2YXIKKyNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQklX19wZXJjcHVfc2VnOnBlcl9jcHVfXyMjdmFyCiAjZWxzZSAvKiAhIFNNUCAqLwotI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCVwKLQltb3ZsICRwZXJfY3B1X18jI3ZhciwgcmVnCisjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCQkJXAorCV9fcGVyY3B1X21vdl9vcCAkcGVyX2NwdV9fIyN2YXIsIHJlZwogI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCXBlcl9jcHVfXyMjdmFyCiAjZW5kaWYJLyogU01QICovCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0X1NNUAorI2RlZmluZSBJTklUX1BFUl9DUFVfVkFSKHZhcikgIGluaXRfcGVyX2NwdV9fIyN2YXIKKyNlbHNlCisjZGVmaW5lIElOSVRfUEVSX0NQVV9WQVIodmFyKSAgcGVyX2NwdV9fIyN2YXIKKyNlbmRpZgorCiAjZWxzZSAvKiAuLi4hQVNTRU1CTFkgKi8KIAotLyoKLSAqIFBFUl9DUFUgZmluZHMgYW4gYWRkcmVzcyBvZiBhIHBlci1jcHUgdmFyaWFibGUuCi0gKgotICogQXJnczoKLSAqICAgIHZhciAtIHZhcmlhYmxlIG5hbWUKLSAqICAgIGNwdSAtIDMyYml0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgQ1BVIG51bWJlcgotICoKLSAqIFRoZSByZXN1bHRpbmcgYWRkcmVzcyBpcyBzdG9yZWQgaW4gdGhlICJjcHUiIGFyZ3VtZW50LgotICoKLSAqIEV4YW1wbGU6Ci0gKiAgICBQRVJfQ1BVKGNwdV9nZHRfZGVzY3IsICVlYngpCi0gKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKwogI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX19wZXJjcHVfYXJnKHgpCQkiJSUiX19zdHJpbmdpZnkoX19wZXJjcHVfc2VnKSI6JVAiICN4CisjZGVmaW5lIF9fbXlfY3B1X29mZnNldAkJcGVyY3B1X3JlYWQodGhpc19jcHVfb2ZmKQorI2Vsc2UKKyNkZWZpbmUgX19wZXJjcHVfYXJnKHgpCQkiJSIgI3gKKyNlbmRpZgogCi0jZGVmaW5lIF9fbXlfY3B1X29mZnNldCB4ODZfcmVhZF9wZXJjcHUodGhpc19jcHVfb2ZmKQorLyoKKyAqIEluaXRpYWxpemVkIHBvaW50ZXJzIHRvIHBlci1jcHUgdmFyaWFibGVzIG5lZWRlZCBmb3IgdGhlIGJvb3QKKyAqIHByb2Nlc3NvciBuZWVkIHRvIHVzZSB0aGVzZSBtYWNyb3MgdG8gZ2V0IHRoZSBwcm9wZXIgYWRkcmVzcworICogb2Zmc2V0IGZyb20gX19wZXJfY3B1X2xvYWQgb24gU01QLgorICoKKyAqIFRoZXJlIGFsc28gbXVzdCBiZSBhbiBlbnRyeSBpbiB2bWxpbnV4XzY0Lmxkcy5TCisgKi8KKyNkZWZpbmUgREVDTEFSRV9JTklUX1BFUl9DUFUodmFyKSBcCisgICAgICAgZXh0ZXJuIHR5cGVvZihwZXJfY3B1X3Zhcih2YXIpKSBpbml0X3Blcl9jcHVfdmFyKHZhcikKIAotLyogZnMgc2VnbWVudCBzdGFydHMgYXQgKHBvc2l0aXZlKSBvZmZzZXQgPT0gX19wZXJfY3B1X29mZnNldFtjcHVdICovCi0jZGVmaW5lIF9fcGVyY3B1X3NlZyAiJSVmczoiCi0KLSNlbHNlICAvKiAhU01QICovCi0KLSNkZWZpbmUgX19wZXJjcHVfc2VnICIiCi0KLSNlbmRpZgkvKiBTTVAgKi8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgotCi0vKiBXZSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yIGxvY2FsIENQVSAoZmFzdGVyKS4gKi8KLURFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOworI2lmZGVmIENPTkZJR19YODZfNjRfU01QCisjZGVmaW5lIGluaXRfcGVyX2NwdV92YXIodmFyKSAgaW5pdF9wZXJfY3B1X18jI3ZhcgorI2Vsc2UKKyNkZWZpbmUgaW5pdF9wZXJfY3B1X3Zhcih2YXIpICBwZXJfY3B1X3Zhcih2YXIpCisjZW5kaWYKIAogLyogRm9yIGFyY2gtc3BlY2lmaWMgY29kZSwgd2UgY2FuIHVzZSBkaXJlY3Qgc2luZ2xlLWluc24gb3BzICh0aGV5CiAgKiBkb24ndCBnaXZlIGFuIGx2YWx1ZSB0aG91Z2gpLiAqLwpAQCAtMTIwLDIwICs4MCwyNSBAQAogCX0JCQkJCQlcCiAJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCiAJY2FzZSAxOgkJCQkJCVwKLQkJYXNtKG9wICJiICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCisJCWFzbShvcCAiYiAlMSwiX19wZXJjcHVfYXJnKDApCQlcCiAJCSAgICA6ICIrbSIgKHZhcikJCQlcCiAJCSAgICA6ICJyaSIgKChUX18pdmFsKSk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDI6CQkJCQkJXAotCQlhc20ob3AgIncgJTEsIl9fcGVyY3B1X3NlZyIlMCIJCVwKKwkJYXNtKG9wICJ3ICUxLCJfX3BlcmNwdV9hcmcoMCkJCVwKIAkJICAgIDogIittIiAodmFyKQkJCVwKIAkJICAgIDogInJpIiAoKFRfXyl2YWwpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShvcCAibCAlMSwiX19wZXJjcHVfc2VnIiUwIgkJXAorCQlhc20ob3AgImwgJTEsIl9fcGVyY3B1X2FyZygwKQkJXAogCQkgICAgOiAiK20iICh2YXIpCQkJXAogCQkgICAgOiAicmkiICgoVF9fKXZhbCkpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCisJY2FzZSA4OgkJCQkJCVwKKwkJYXNtKG9wICJxICUxLCJfX3BlcmNwdV9hcmcoMCkJCVwKKwkJICAgIDogIittIiAodmFyKQkJCVwKKwkJICAgIDogInJlIiAoKFRfXyl2YWwpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAogCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAogCX0JCQkJCQlcCiB9IHdoaWxlICgwKQpAQCAtMTQzLDE3ICsxMDgsMjIgQEAKIAl0eXBlb2YodmFyKSByZXRfXzsJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAogCWNhc2UgMToJCQkJCQlcCi0JCWFzbShvcCAiYiAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKIAkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCi0JCWFzbShvcCAidyAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQlhc20ob3AgIncgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKIAkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShvcCAibCAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQlhc20ob3AgImwgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCisJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgODoJCQkJCQlcCisJCWFzbShvcCAicSAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocmV0X18pCQkJXAogCQkgICAgOiAibSIgKHZhcikpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCkBAIC0xNjIsMTMgKzEzMiwzMCBAQAogCXJldF9fOwkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgeDg2X3JlYWRfcGVyY3B1KHZhcikgcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyKQotI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9hZGRfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9zdWJfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoInN1YiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9vcl9wZXJjcHUodmFyLCB2YWwpIHBlcmNwdV90b19vcCgib3IiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfcmVhZCh2YXIpCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhcikKKyNkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV9hZGQodmFyLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKyNkZWZpbmUgcGVyY3B1X3N1Yih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfYW5kKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV9vcih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV94b3IodmFyLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKworLyogVGhpcyBpcyBub3QgYXRvbWljIGFnYWluc3Qgb3RoZXIgQ1BVcyAtLSBDUFUgcHJlZW1wdGlvbiBuZWVkcyB0byBiZSBvZmYgKi8KKyNkZWZpbmUgeDg2X3Rlc3RfYW5kX2NsZWFyX2JpdF9wZXJjcHUoYml0LCB2YXIpCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBvbGRfXzsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiYnRyICUyLCJfX3BlcmNwdV9hcmcoMSkiXG5cdHNiYmwgJTAsJTAiCQlcCisJCSAgICAgOiAiPXIiIChvbGRfXyksICIrbSIgKHBlcl9jcHVfXyMjdmFyKQkJXAorCQkgICAgIDogImRJciIgKGJpdCkpOwkJCQkJXAorCW9sZF9fOwkJCQkJCQkJXAorfSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisvKiBXZSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yIGxvY2FsIENQVSAoZmFzdGVyKS4gKi8KK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qICFDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBDT05GSUdfU01QCiAKQEAgLTE5NSw5ICsxODIsOSBAQAogI2RlZmluZQllYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgKF9uYW1lIyNfZWFybHlfcHRyKQogI2RlZmluZQllYXJseV9wZXJfY3B1X21hcChfbmFtZSwgX2lkeCkgKF9uYW1lIyNfZWFybHlfbWFwW19pZHhdKQogI2RlZmluZQllYXJseV9wZXJfY3B1KF9uYW1lLCBfY3B1KSAJCQkJXAotCShlYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgPwkJCQlcCi0JCWVhcmx5X3Blcl9jcHVfcHRyKF9uYW1lKVtfY3B1XSA6CQlcCi0JCXBlcl9jcHUoX25hbWUsIF9jcHUpKQorCSooZWFybHlfcGVyX2NwdV9wdHIoX25hbWUpID8JCQkJXAorCQkmZWFybHlfcGVyX2NwdV9wdHIoX25hbWUpW19jcHVdIDoJCVwKKwkJJnBlcl9jcHUoX25hbWUsIF9jcHUpKQogCiAjZWxzZQkvKiAhQ09ORklHX1NNUCAqLwogI2RlZmluZQlERUZJTkVfRUFSTFlfUEVSX0NQVShfdHlwZSwgX25hbWUsIF9pbml0dmFsdWUpCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3N2RiODkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzJMRVZFTF9ERUZTX0gKLSNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICi0KLSNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMAotCi0vKgotICogdHJhZGl0aW9uYWwgaTM4NiB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZToKLSAqLwotCi0jZGVmaW5lIFBHRElSX1NISUZUCTIyCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkxMDI0Ci0KLS8qCi0gKiB0aGUgaTM4NiBpcyB0d28tbGV2ZWwsIHNvIHdlIGRvbid0IHJlYWxseSBoYXZlIGFueQotICogUE1EIGRpcmVjdG9yeSBwaHlzaWNhbGx5LgotICovCi0KLSNkZWZpbmUgUFRSU19QRVJfUFRFCTEwMjQKLQotI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfMkxFVkVMX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKaW5kZXggZTBkMTk5Zi4uYzE3NzRhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC01Myw4ICs1Myw2IEBACiAjZGVmaW5lIG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIoeHApCiAjZW5kaWYKIAotI2RlZmluZSBwdGVfbm9uZSh4KQkJKCEoeCkucHRlX2xvdykKLQogLyoKICAqIEJpdHMgX1BBR0VfQklUX1BSRVNFTlQsIF9QQUdFX0JJVF9GSUxFIGFuZCBfUEFHRV9CSVRfUFJPVE5PTkUgYXJlIHRha2VuLAogICogc3BsaXQgdXAgdGhlIDI5IGJpdHMgb2Ygb2Zmc2V0IGludG8gdGhpcyByYW5nZToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYWNjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbF90eXBlcy5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICisjZGVmaW5lIF9BU01fWDg2X1BHVEFCTEVfMkxFVkVMX0RFRlNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwdGV2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwbWR2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwdWR2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ2R2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ3Byb3R2YWxfdDsKKwordHlwZWRlZiB1bmlvbiB7CisJcHRldmFsX3QgcHRlOworCXB0ZXZhbF90IHB0ZV9sb3c7Cit9IHB0ZV90OworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBTSEFSRURfS0VSTkVMX1BNRAkwCisjZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMgorCisvKgorICogdHJhZGl0aW9uYWwgaTM4NiB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZToKKyAqLworCisjZGVmaW5lIFBHRElSX1NISUZUCTIyCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkxMDI0CisKKworLyoKKyAqIHRoZSBpMzg2IGlzIHR3by1sZXZlbCwgc28gd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55CisgKiBQTUQgZGlyZWN0b3J5IHBoeXNpY2FsbHkuCisgKi8KKworI2RlZmluZSBQVFJTX1BFUl9QVEUJMTAyNAorCisjZW5kaWYgLyogX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNTYxMzYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwtZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzNMRVZFTF9ERUZTX0gKLSNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8zTEVWRUxfREVGU19ICi0KLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLSNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJKHB2X2luZm8uc2hhcmVkX2tlcm5lbF9wbWQpCi0jZWxzZQotI2RlZmluZSBTSEFSRURfS0VSTkVMX1BNRAkxCi0jZW5kaWYKLQotLyoKLSAqIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRvcC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAKLSAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkzMAotI2RlZmluZSBQVFJTX1BFUl9QR0QJNAotCi0vKgotICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBtaWRkbGUtbGV2ZWwKLSAqIHBhZ2UgdGFibGUgY2FuIG1hcAotICovCi0jZGVmaW5lIFBNRF9TSElGVAkyMQotI2RlZmluZSBQVFJTX1BFUl9QTUQJNTEyCi0KLS8qCi0gKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbAotICovCi0jZGVmaW5lIFBUUlNfUEVSX1BURQk1MTIKLQotI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfM0xFVkVMX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKaW5kZXggNDQ3ZGE0My4uM2YxM2NkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0xOCwyMSArMTgsNiBAQAogCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJXAoJTAxNkx4KS5cbiIsCQkJCVwKIAkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQogCi1zdGF0aWMgaW5saW5lIGludCBwdWRfbm9uZShwdWRfdCBwdWQpCi17Ci0JcmV0dXJuIHB1ZF92YWwocHVkKSA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHVkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIpKSAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpCi17Ci0JcmV0dXJuIHB1ZF92YWwocHVkKSAmIF9QQUdFX1BSRVNFTlQ7Ci19Ci0KIC8qIFJ1bGVzIGZvciB1c2luZyBzZXRfcHRlOiB0aGUgcHRlIGJlaW5nIGFzc2lnbmVkICptdXN0KiBiZQogICogZWl0aGVyIG5vdCBwcmVzZW50IG9yIGluIGEgc3RhdGUgd2hlcmUgdGhlIGhhcmR3YXJlIHdpbGwKICAqIG5vdCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgcHRlLiAgSW4gcGxhY2VzIHdoZXJlIHRoaXMgaXMKQEAgLTEyMCwxNSArMTA1LDYgQEAKIAkJd3JpdGVfY3IzKHBnZCk7CiB9CiAKLSNkZWZpbmUgcHVkX3BhZ2UocHVkKSBwZm5fdG9fcGFnZShwdWRfdmFsKHB1ZCkgPj4gUEFHRV9TSElGVCkKLQotI2RlZmluZSBwdWRfcGFnZV92YWRkcihwdWQpICgodW5zaWduZWQgbG9uZykgX192YShwdWRfdmFsKHB1ZCkgJiBQVEVfUEZOX01BU0spKQotCi0KLS8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KLSNkZWZpbmUgcG1kX29mZnNldChwdWQsIGFkZHJlc3MpICgocG1kX3QgKilwdWRfcGFnZV92YWRkcigqKHB1ZCkpICsJXAotCQkJCSAgcG1kX2luZGV4KGFkZHJlc3MpKQotCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfcHRlcF9nZXRfYW5kX2NsZWFyKHB0ZV90ICpwdGVwKQogewpAQCAtMTQ1LDE3ICsxMjEsNiBAQAogI2RlZmluZSBuYXRpdmVfcHRlcF9nZXRfYW5kX2NsZWFyKHhwKSBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyKHhwKQogI2VuZGlmCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zYW1lKHB0ZV90IGEsIHB0ZV90IGIpCi17Ci0JcmV0dXJuIGEucHRlX2xvdyA9PSBiLnB0ZV9sb3cgJiYgYS5wdGVfaGlnaCA9PSBiLnB0ZV9oaWdoOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuICFwdGUucHRlX2xvdyAmJiAhcHRlLnB0ZV9oaWdoOwotfQotCiAvKgogICogQml0cyAwLCA2IGFuZCA3IGFyZSB0YWtlbiBpbiB0aGUgbG93IHBhcnQgb2YgdGhlIHB0ZSwKICAqIHB1dCB0aGUgMzIgYml0cyBvZiBvZmZzZXQgaW50byB0aGUgaGlnaCBwYXJ0LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWxfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkNTg3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsX3R5cGVzLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzNMRVZFTF9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8zTEVWRUxfREVGU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1NjQJcHRldmFsX3Q7Cit0eXBlZGVmIHU2NAlwbWR2YWxfdDsKK3R5cGVkZWYgdTY0CXB1ZHZhbF90OwordHlwZWRlZiB1NjQJcGdkdmFsX3Q7Cit0eXBlZGVmIHU2NAlwZ3Byb3R2YWxfdDsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsKKwl9OworCXB0ZXZhbF90IHB0ZTsKK30gcHRlX3Q7CisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECShwdl9pbmZvLnNoYXJlZF9rZXJuZWxfcG1kKQorI2Vsc2UKKyNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMQorI2VuZGlmCisKKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwkzCisKKy8qCisgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJMzAKKyNkZWZpbmUgUFRSU19QRVJfUEdECTQKKworLyoKKyAqIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgbWlkZGxlLWxldmVsCisgKiBwYWdlIHRhYmxlIGNhbiBtYXAKKyAqLworI2RlZmluZSBQTURfU0hJRlQJMjEKKyNkZWZpbmUgUFRSU19QRVJfUE1ECTUxMgorCisvKgorICogZW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwKKyAqLworI2RlZmluZSBQVFJTX1BFUl9QVEUJNTEyCisKKworI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfM0xFVkVMX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDRmNWFmODQuLmQwODEyZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEsMTY0ICsxLDkgQEAKICNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV9ICiAjZGVmaW5lIF9BU01fWDg2X1BHVEFCTEVfSAogCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkwCS8qIGlzIHByZXNlbnQgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1JXCQkxCS8qIHdyaXRlYWJsZSAqLwotI2RlZmluZSBfUEFHRV9CSVRfVVNFUgkJMgkvKiB1c2Vyc3BhY2UgYWRkcmVzc2FibGUgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1BXVAkJMwkvKiBwYWdlIHdyaXRlIHRocm91Z2ggKi8KLSNkZWZpbmUgX1BBR0VfQklUX1BDRAkJNAkvKiBwYWdlIGNhY2hlIGRpc2FibGVkICovCi0jZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAk1CS8qIHdhcyBhY2Nlc3NlZCAocmFpc2VkIGJ5IENQVSkgKi8KLSNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQk2CS8qIHdhcyB3cml0dGVuIHRvIChyYWlzZWQgYnkgQ1BVKSAqLwotI2RlZmluZSBfUEFHRV9CSVRfUFNFCQk3CS8qIDQgTUIgKG9yIDJNQikgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9CSVRfUEFUCQk3CS8qIG9uIDRLQiBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV9CSVRfR0xPQkFMCTgJLyogR2xvYmFsIFRMQiBlbnRyeSBQUHJvKyAqLwotI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMQk5CS8qIGF2YWlsYWJsZSBmb3IgcHJvZ3JhbW1lciAqLwotI2RlZmluZSBfUEFHRV9CSVRfSU9NQVAJCTEwCS8qIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSBJTyBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQzCTExCi0jZGVmaW5lIF9QQUdFX0JJVF9QQVRfTEFSR0UJMTIJLyogT24gMk1CIG9yIDFHQiBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV9CSVRfU1BFQ0lBTAlfUEFHRV9CSVRfVU5VU0VEMQotI2RlZmluZSBfUEFHRV9CSVRfQ1BBX1RFU1QJX1BBR0VfQklUX1VOVVNFRDEKLSNkZWZpbmUgX1BBR0VfQklUX05YICAgICAgICAgICA2MyAgICAgICAvKiBObyBleGVjdXRlOiBvbmx5IHZhbGlkIGFmdGVyIGNwdWlkIGNoZWNrICovCi0KLS8qIElmIF9QQUdFX0JJVF9QUkVTRU5UIGlzIGNsZWFyLCB3ZSB1c2UgdGhlc2U6ICovCi0vKiAtIGlmIHRoZSB1c2VyIG1hcHBlZCBpdCB3aXRoIFBST1RfTk9ORTsgcHRlX3ByZXNlbnQgZ2l2ZXMgdHJ1ZSAqLwotI2RlZmluZSBfUEFHRV9CSVRfUFJPVE5PTkUJX1BBR0VfQklUX0dMT0JBTAotLyogLSBzZXQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcsIHNhdmVkIFBURTsgdW5zZXQ6c3dhcCAqLwotI2RlZmluZSBfUEFHRV9CSVRfRklMRQkJX1BBR0VfQklUX0RJUlRZCi0KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFJFU0VOVCkKLSNkZWZpbmUgX1BBR0VfUlcJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1JXKQotI2RlZmluZSBfUEFHRV9VU0VSCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9VU0VSKQotI2RlZmluZSBfUEFHRV9QV1QJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BXVCkKLSNkZWZpbmUgX1BBR0VfUENECShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQ0QpCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9BQ0NFU1NFRCkKLSNkZWZpbmUgX1BBR0VfRElSVFkJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0RJUlRZKQotI2RlZmluZSBfUEFHRV9QU0UJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BTRSkKLSNkZWZpbmUgX1BBR0VfR0xPQkFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9HTE9CQUwpCi0jZGVmaW5lIF9QQUdFX1VOVVNFRDEJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VOVVNFRDEpCi0jZGVmaW5lIF9QQUdFX0lPTUFQCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9JT01BUCkKLSNkZWZpbmUgX1BBR0VfVU5VU0VEMwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVU5VU0VEMykKLSNkZWZpbmUgX1BBR0VfUEFUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQVQpCi0jZGVmaW5lIF9QQUdFX1BBVF9MQVJHRSAoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUEFUX0xBUkdFKQotI2RlZmluZSBfUEFHRV9TUEVDSUFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9TUEVDSUFMKQotI2RlZmluZSBfUEFHRV9DUEFfVEVTVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfQ1BBX1RFU1QpCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCi0jZGVmaW5lIF9QQUdFX05YCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9OWCkKLSNlbHNlCi0jZGVmaW5lIF9QQUdFX05YCShfQVQocHRldmFsX3QsIDApKQotI2VuZGlmCi0KLSNkZWZpbmUgX1BBR0VfRklMRQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfRklMRSkKLSNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BST1ROT05FKQotCi0jZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwJXAotCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCi0jZGVmaW5lIF9LRVJOUEdfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwJXAotCQkJIF9QQUdFX0RJUlRZKQotCi0vKiBTZXQgb2YgYml0cyBub3QgY2hhbmdlZCBpbiBwdGVfbW9kaWZ5ICovCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfUEZOX01BU0sgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QgfAkJXAotCQkJIF9QQUdFX1NQRUNJQUwgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQotCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX01BU0sJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfV0IJCSgwKQotI2RlZmluZSBfUEFHRV9DQUNIRV9XQwkJKF9QQUdFX1BXVCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfVUNfTUlOVVMJKF9QQUdFX1BDRCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfVUMJCShfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBcCi0JCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCi0KLSNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfAlcCi0JCQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCi0JCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQotI2RlZmluZSBQQUdFX0NPUFlfRVhFQwkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCi0JCQkJCSBfUEFHRV9BQ0NFU1NFRCkKLSNkZWZpbmUgUEFHRV9DT1BZCQlQQUdFX0NPUFlfTk9FWEVDCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAotCQkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKLSNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAotCQkJCQkgX1BBR0VfQUNDRVNTRUQpCi0KLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDCQkJCQkJXAotCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfR0xPQkFMKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMCQkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfTlgpCi0KLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9STwkJKF9fUEFHRV9LRVJORUwgJiB+X1BBR0VfUlcpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfUlgJCShfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfV0MJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfV0MpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfVUNfTUlOVVMJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMCQkoX19QQUdFX0tFUk5FTF9SWCB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QU0UpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0NBQ0hFX1VDIHwgX1BBR0VfUFNFKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BTRSkKLQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0lPTUFQKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfTk9DQUNIRSB8IF9QQUdFX0lPTUFQKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTCShfX1BBR0VfS0VSTkVMX1VDX01JTlVTIHwgX1BBR0VfSU9NQVApCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fV0MJCShfX1BBR0VfS0VSTkVMX1dDIHwgX1BBR0VfSU9NQVApCi0KLSNkZWZpbmUgUEFHRV9LRVJORUwJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMKQotI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfUk8pCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQykKLSNkZWZpbmUgUEFHRV9LRVJORUxfUlgJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JYKQotI2RlZmluZSBQQUdFX0tFUk5FTF9XQwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfV0MpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0UJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0UpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMKQotI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRSkKLQotI2RlZmluZSBQQUdFX0tFUk5FTF9JTwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU8pCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1dDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1dDKQotCi0vKiAgICAgICAgIHh3ciAqLwotI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9FWEVDCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX0VYRUMKLSNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9FWEVDCi0jZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfRVhFQwotCi0jZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9FWEVDCi0jZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0VYRUMKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0VYRUMKLSNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0VYRUMKLQotLyoKLSAqIGVhcmx5IGlkZW50aXR5IG1hcHBpbmcgIHB0ZSBhdHRyaWIgbWFjcm9zLgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lERU5UX0xBUkdFX0VYRUMJX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDCi0jZWxzZQotLyoKLSAqIEZvciBQREVfSURFTlRfQVRUUiBpbmNsdWRlIFVTRVIgYml0LiBBcyB0aGUgUERFIGFuZCBQVEUgcHJvdGVjdGlvbgotICogYml0cyBhcmUgY29tYmluZWQsIHRoaXMgd2lsbCBhbG93IHVzZXIgdG8gYWNjZXNzIHRoZSBoaWdoIGFkZHJlc3MgbWFwcGVkCi0gKiBWRFNPIGluIHRoZSBwcmVzZW5jZSBvZiBDT05GSUdfQ09NUEFUX1ZEU08KLSAqLwotI2RlZmluZSBQVEVfSURFTlRfQVRUUgkgMHgwMDMJCS8qIFBSRVNFTlQrUlcgKi8KLSNkZWZpbmUgUERFX0lERU5UX0FUVFIJIDB4MDY3CQkvKiBQUkVTRU5UK1JXK1VTRVIrRElSVFkrQUNDRVNTRUQgKi8KLSNkZWZpbmUgUEdEX0lERU5UX0FUVFIJIDB4MDAxCQkvKiBQUkVTRU5UIChubyBvdGhlciBhdHRyaWJ1dGVzKSAqLwotI2VuZGlmCisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KIAogLyoKICAqIE1hY3JvIHRvIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgVUMtCkBAIC0xNzAsOSArMTUsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUJcGdwcm90X3dyaXRlY29tYmluZQotZXh0ZXJuIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7Ci0KIC8qCiAgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAogICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgpAQCAtMTgzLDYgKzI1LDY2IEBACiBleHRlcm4gc3BpbmxvY2tfdCBwZ2RfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBnZF9saXN0OwogCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLworI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQluYXRpdmVfc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQorCisjZGVmaW5lIHNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQkJCQlcCisJbmF0aXZlX3NldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQorI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCQkJCQlcCisJbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkKKworI2RlZmluZSBzZXRfcG1kKHBtZHAsIHBtZCkJCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIHBtZCkKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECisjZGVmaW5lIHNldF9wZ2QocGdkcCwgcGdkKQkJbmF0aXZlX3NldF9wZ2QocGdkcCwgcGdkKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkKQkJCW5hdGl2ZV9wZ2RfY2xlYXIocGdkKQorI2VuZGlmCisKKyNpZm5kZWYgc2V0X3B1ZAorIyBkZWZpbmUgc2V0X3B1ZChwdWRwLCBwdWQpCQluYXRpdmVfc2V0X3B1ZChwdWRwLCBwdWQpCisjZW5kaWYKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisjZGVmaW5lIHB1ZF9jbGVhcihwdWQpCQkJbmF0aXZlX3B1ZF9jbGVhcihwdWQpCisjZW5kaWYKKworI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCW5hdGl2ZV9wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCisjZGVmaW5lIHBtZF9jbGVhcihwbWQpCQkJbmF0aXZlX3BtZF9jbGVhcihwbWQpCisKKyNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VwZGF0ZV9kZWZlcihtbSwgYWRkciwgcHRlcCkgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCit7CisJbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChiYXNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKK3sKKwluYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUoYmFzZSk7Cit9CisKKyNkZWZpbmUgcGdkX3ZhbCh4KQluYXRpdmVfcGdkX3ZhbCh4KQorI2RlZmluZSBfX3BnZCh4KQluYXRpdmVfbWFrZV9wZ2QoeCkKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECisjZGVmaW5lIHB1ZF92YWwoeCkJbmF0aXZlX3B1ZF92YWwoeCkKKyNkZWZpbmUgX19wdWQoeCkJbmF0aXZlX21ha2VfcHVkKHgpCisjZW5kaWYKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisjZGVmaW5lIHBtZF92YWwoeCkJbmF0aXZlX3BtZF92YWwoeCkKKyNkZWZpbmUgX19wbWQoeCkJbmF0aXZlX21ha2VfcG1kKHgpCisjZW5kaWYKKworI2RlZmluZSBwdGVfdmFsKHgpCW5hdGl2ZV9wdGVfdmFsKHgpCisjZGVmaW5lIF9fcHRlKHgpCW5hdGl2ZV9tYWtlX3B0ZSh4KQorCisjZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCisKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCiAgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCkBAIC0yMzYsNzIgKzEzOCw4NCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBwbWRfbGFyZ2UocG1kX3QgcHRlKQogewotCXJldHVybiAocG1kX3ZhbChwdGUpICYgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpKSA9PQorCXJldHVybiAocG1kX2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCkpID09CiAJCShfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKTsKIH0KIAorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc2V0X2ZsYWdzKHB0ZV90IHB0ZSwgcHRldmFsX3Qgc2V0KQoreworCXB0ZXZhbF90IHYgPSBuYXRpdmVfcHRlX3ZhbChwdGUpOworCisJcmV0dXJuIG5hdGl2ZV9tYWtlX3B0ZSh2IHwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfY2xlYXJfZmxhZ3MocHRlX3QgcHRlLCBwdGV2YWxfdCBjbGVhcikKK3sKKwlwdGV2YWxfdCB2ID0gbmF0aXZlX3B0ZV92YWwocHRlKTsKKworCXJldHVybiBuYXRpdmVfbWFrZV9wdGUodiAmIH5jbGVhcik7Cit9CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRElSVFkpOworCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9ESVJUWSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0FDQ0VTU0VEKTsKKwlyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUlcpOworCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9SVyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9OWCk7CisJcmV0dXJuIHB0ZV9jbGVhcl9mbGFncyhwdGUsIF9QQUdFX05YKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0RJUlRZKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX0RJUlRZKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FDQ0VTU0VEKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX0FDQ0VTU0VEKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX1JXKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUFNFKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX1BTRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2Nscmh1Z2UocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUFNFKTsKKwlyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfUFNFKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtnbG9iYWwocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9HTE9CQUwpOworCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BBR0VfR0xPQkFMKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfY2xyZ2xvYmFsKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0dMT0JBTCk7CisJcmV0dXJuIHB0ZV9jbGVhcl9mbGFncyhwdGUsIF9QQUdFX0dMT0JBTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1NQRUNJQUwpOworCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BBR0VfU1BFQ0lBTCk7CiB9CiAKLWV4dGVybiBwdGV2YWxfdCBfX3N1cHBvcnRlZF9wdGVfbWFzazsKLQogLyoKICAqIE1hc2sgb3V0IHVuc3VwcG9ydGVkIGJpdHMgaW4gYSBwcmVzZW50IHBncHJvdC4gIE5vbi1wcmVzZW50IHBncHJvdHMKICAqIGNhbiB1c2UgdGhvc2UgYml0cyBmb3Igb3RoZXIgcHVycG9zZXMsIHNvIGxlYXZlIHRoZW0gYmUuCkBAIC0zNzQsNzUgKzI4OCw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBJbmRpY2F0ZSB0aGF0IHg4NiBoYXMgaXRzIG93biB0cmFjayBhbmQgdW50cmFjayBwZm4gdm1hIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBfX0hBVkVfUEZOTUFQX1RSQUNLSU5HCi0KLSNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCi1zdHJ1Y3QgZmlsZTsKLXBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3Qgdm1hX3Byb3QpOwotaW50IHBoeXNfbWVtX2FjY2Vzc19wcm90X2FsbG93ZWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqdm1hX3Byb3QpOwotI2VuZGlmCi0KLS8qIEluc3RhbGwgYSBwdGUgZm9yIGEgcGFydGljdWxhciB2YWRkciBpbiBrZXJuZWwgc3BhY2UuICovCi12b2lkIHNldF9wdGVfdmFkZHIodW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgcHRlKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpOwotZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpIHt9Ci0jZW5kaWYKLQotc3RydWN0IHNlcV9maWxlOwotZXh0ZXJuIHZvaWQgYXJjaF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLwotI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKLSNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQluYXRpdmVfc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQotCi0jZGVmaW5lIHNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQkJCQlcCi0JbmF0aXZlX3NldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQotI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCQkJCQlcCi0JbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkKLQotI2RlZmluZSBzZXRfcG1kKHBtZHAsIHBtZCkJCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIHBtZCkKLQotI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECi0jZGVmaW5lIHNldF9wZ2QocGdkcCwgcGdkKQkJbmF0aXZlX3NldF9wZ2QocGdkcCwgcGdkKQotI2RlZmluZSBwZ2RfY2xlYXIocGdkKQkJCW5hdGl2ZV9wZ2RfY2xlYXIocGdkKQotI2VuZGlmCi0KLSNpZm5kZWYgc2V0X3B1ZAotIyBkZWZpbmUgc2V0X3B1ZChwdWRwLCBwdWQpCQluYXRpdmVfc2V0X3B1ZChwdWRwLCBwdWQpCi0jZW5kaWYKLQotI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECi0jZGVmaW5lIHB1ZF9jbGVhcihwdWQpCQkJbmF0aXZlX3B1ZF9jbGVhcihwdWQpCi0jZW5kaWYKLQotI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCW5hdGl2ZV9wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCi0jZGVmaW5lIHBtZF9jbGVhcihwbWQpCQkJbmF0aXZlX3BtZF9jbGVhcihwbWQpCi0KLSNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHRlX3VwZGF0ZV9kZWZlcihtbSwgYWRkciwgcHRlcCkgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCi17Ci0JbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChiYXNlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKLXsKLQluYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUoYmFzZSk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCi0KK3BtZF90ICpwb3B1bGF0ZV9leHRyYV9wbWQodW5zaWduZWQgbG9uZyB2YWRkcik7CitwdGVfdCAqcG9wdWxhdGVfZXh0cmFfcHRlKHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtNDUxLDYgKzI5OCwxODggQEAKICMgaW5jbHVkZSAicGd0YWJsZV82NC5oIgogI2VuZGlmCiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KKworc3RhdGljIGlubGluZSBpbnQgcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiAhcHRlLnB0ZTsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQorc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgYSwgcHRlX3QgYikKK3sKKwlyZXR1cm4gYS5wdGUgPT0gYi5wdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IGEpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhhKSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpCit7CisJcmV0dXJuIHBtZF9mbGFncyhwbWQpICYgX1BBR0VfUFJFU0VOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKQoreworCS8qIE9ubHkgY2hlY2sgbG93IHdvcmQgb24gMzItYml0IHBsYXRmb3Jtcywgc2luY2UgaXQgbWlnaHQgYmUKKwkgICBvdXQgb2Ygc3luYyB3aXRoIHVwcGVyIGhhbGYuICovCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKW5hdGl2ZV9wbWRfdmFsKHBtZCkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX192YShwbWRfdmFsKHBtZCkgJiBQVEVfUEZOX01BU0spOworfQorCisvKgorICogQ3VycmVudGx5IHN0dWNrIGFzIGEgbWFjcm8gZHVlIHRvIGluZGlyZWN0IGZvcndhcmQgcmVmZXJlbmNlIHRvCisgKiBsaW51eC9tbXpvbmUuaCdzIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoKSBkZWZpbml0aW9uOgorICovCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJcGZuX3RvX3BhZ2UocG1kX3ZhbChwbWQpID4+IFBBR0VfU0hJRlQpCisKKy8qCisgKiB0aGUgcG1kIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwbWRfdFtQVFJTX1BFUl9QTURdCisgKgorICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHBtZCBwYWdlIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwbWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAoYWRkcmVzcyA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpOworfQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKgorICogKEN1cnJlbnRseSBzdHVjayBhcyBhIG1hY3JvIGJlY2F1c2Ugb2YgaW5kaXJlY3QgZm9yd2FyZCByZWZlcmVuY2UKKyAqIHRvIGxpbnV4L21tLmg6cGFnZV90b19uaWQoKSkKKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSAgIHBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCisvKgorICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQorICoKKyAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHRlX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9vZmZzZXRfa2VybmVsKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB0ZV90ICopcG1kX3BhZ2VfdmFkZHIoKnBtZCkgKyBwdGVfaW5kZXgoYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX2ZsYWdzKHBtZCkgJiB+X1BBR0VfVVNFUikgIT0gX0tFUk5QR19UQUJMRTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX21iKHVuc2lnbmVkIGxvbmcgbnBnKQoreworCXJldHVybiBucGcgPj4gKDIwIC0gUEFHRV9TSElGVCk7Cit9CisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAorCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgorc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKQoreworCXJldHVybiBuYXRpdmVfcHVkX3ZhbChwdWQpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9wcmVzZW50KHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gcHVkX2ZsYWdzKHB1ZCkgJiBfUEFHRV9QUkVTRU5UOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX3BhZ2VfdmFkZHIocHVkX3QgcHVkKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKCh1bnNpZ25lZCBsb25nKXB1ZF92YWwocHVkKSAmIFBURV9QRk5fTUFTSyk7Cit9CisKKy8qCisgKiBDdXJyZW50bHkgc3R1Y2sgYXMgYSBtYWNybyBkdWUgdG8gaW5kaXJlY3QgZm9yd2FyZCByZWZlcmVuY2UgdG8KKyAqIGxpbnV4L21tem9uZS5oJ3MgX19zZWN0aW9uX21lbV9tYXBfYWRkcigpIGRlZmluaXRpb246CisgKi8KKyNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJcGZuX3RvX3BhZ2UocHVkX3ZhbChwdWQpID4+IFBBR0VfU0hJRlQpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wZm4ocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX3ZhbChwbWQpICYgUFRFX1BGTl9NQVNLKSA+PiBQQUdFX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHVkKQoreworCXJldHVybiAocHVkX3ZhbChwdWQpICYgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpKSA9PQorCQkoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKQoreworCXJldHVybiAocHVkX2ZsYWdzKHB1ZCkgJiB+KF9LRVJOUEdfVEFCTEUgfCBfUEFHRV9VU0VSKSkgIT0gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHVkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPiAyICovCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMworc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQoreworCXJldHVybiBwZ2RfZmxhZ3MocGdkKSAmIF9QQUdFX1BSRVNFTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZ2RfcGFnZV92YWRkcihwZ2RfdCBwZ2QpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKV9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbChwZ2QpICYgUFRFX1BGTl9NQVNLKTsKK30KKworLyoKKyAqIEN1cnJlbnRseSBzdHVjayBhcyBhIG1hY3JvIGR1ZSB0byBpbmRpcmVjdCBmb3J3YXJkIHJlZmVyZW5jZSB0bworICogbGludXgvbW16b25lLmgncyBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKCkgZGVmaW5pdGlvbjoKKyAqLworI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQlwZm5fdG9fcGFnZShwZ2RfdmFsKHBnZCkgPj4gUEFHRV9TSElGVCkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwdWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAoYWRkcmVzcyA+PiBQVURfU0hJRlQpICYgKFBUUlNfUEVSX1BVRCAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfb2Zmc2V0KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB1ZF90ICopcGdkX3BhZ2VfdmFkZHIoKnBnZCkgKyBwdWRfaW5kZXgoYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQoreworCXJldHVybiAocGdkX2ZsYWdzKHBnZCkgJiB+X1BBR0VfVVNFUikgIT0gX0tFUk5QR19UQUJMRTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQoreworCXJldHVybiAhbmF0aXZlX3BnZF92YWwocGdkKTsKK30KKyNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID4gMyAqLworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKIC8qCiAgKiB0aGUgcGdkIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwZ2RfdFtQVFJTX1BFUl9QR0RdCiAgKgpAQCAtNDc2LDI4ICs1MDUsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1lbnVtIHsKLQlQR19MRVZFTF9OT05FLAotCVBHX0xFVkVMXzRLLAotCVBHX0xFVkVMXzJNLAotCVBHX0xFVkVMXzFHLAotCVBHX0xFVkVMX05VTQotfTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gdm9pZCB1cGRhdGVfcGFnZV9jb3VudChpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcGFnZXMpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcGFnZV9jb3VudChpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcGFnZXMpIHsgfQotI2VuZGlmCi0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBrZXJuZWwgcGFnZXRhYmxlIGVudHJ5IGNvbnRyb2xsaW5nCi0gKiB0aGUgdmlydHVhbCBhZGRyZXNzICdhZGRyZXNzJy4gTlVMTCBtZWFucyBubyBwYWdldGFibGUgZW50cnkgcHJlc2VudC4KLSAqIE5PVEU6IHRoZSByZXR1cm4gdHlwZSBpcyBwdGVfdCBidXQgaWYgdGhlIHBtZCBpcyBQU0UgdGhlbiB3ZSByZXR1cm4gaXQKLSAqIGFzIGEgcHRlIHRvby4KLSAqLwotZXh0ZXJuIHB0ZV90ICpsb29rdXBfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqbGV2ZWwpOwotCiAvKiBsb2NhbCBwdGUgdXBkYXRlcyBuZWVkIG5vdCB1c2UgeGNoZyBmb3IgbG9ja2luZyAqLwogc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyKHB0ZV90ICpwdGVwKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDcyYjAyMGQuLjk3NjEyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fWDg2X1BHVEFCTEVfMzJfSAogI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzMyX0gKIAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlXzMyX3R5cGVzLmg+CiAKIC8qCiAgKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCkBAIC0zMyw0NyArMzQsNiBAQAogCiBleHRlcm4gdm9pZCBzZXRfcG1kX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CiAKLS8qCi0gKiBUaGUgTGludXggeDg2IHBhZ2luZyBhcmNoaXRlY3R1cmUgaXMgJ2NvbXBpbGUtdGltZSBkdWFsLW1vZGUnLCBpdAotICogaW1wbGVtZW50cyBib3RoIHRoZSB0cmFkaXRpb25hbCAyLWxldmVsIHg4NiBwYWdlIHRhYmxlcyBhbmQgdGhlCi0gKiBuZXdlciAzLWxldmVsIFBBRS1tb2RlIHBhZ2UgdGFibGVzLgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLWRlZnMuaD4KLSMgZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQotIyBkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKLSNlbHNlCi0jIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRSAtIDEpKQotCi0vKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSg4ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSNkZWZpbmUgTEFTVF9QS01BUCA1MTIKLSNlbHNlCi0jZGVmaW5lIExBU1RfUEtNQVAgMTAyNAotI2VuZGlmCi0KLSNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfQk9PVF9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKLQkJICAgICYgUE1EX01BU0spCi0KLSNpZmRlZiBDT05GSUdfSElHSE1FTQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKFBLTUFQX0JBU0UgLSAyICogUEFHRV9TSVpFKQotI2Vsc2UKLSMgZGVmaW5lIFZNQUxMT0NfRU5ECShGSVhBRERSX1NUQVJUIC0gMiAqIFBBR0VfU0laRSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWE1FTQkoVk1BTExPQ19FTkQgLSBQQUdFX09GRlNFVCAtIF9fVk1BTExPQ19SRVNFUlZFKQogCiAvKgogICogRGVmaW5lIHRoaXMgaWYgdGhpbmdzIHdvcmsgZGlmZmVyZW50bHkgb24gYW4gaTM4NiBhbmQgYW4gaTQ4NjoKQEAgLTg1LDU1ICs0NSwxMiBAQAogLyogVGhlIGJvb3QgcGFnZSB0YWJsZXMgKGFsbCBjcmVhdGVkIGFzIGEgc2luZ2xlIGFycmF5KSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGcwW107CiAKLSNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKCh4KS5wdGVfbG93ICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCi0KLS8qIFRvIGF2b2lkIGhhcm1mdWwgcmFjZXMsIHBtZF9ub25lKHgpIHNob3VsZCBjaGVjayBvbmx5IHRoZSBsb3dlciB3aGVuIFBBRSAqLwotI2RlZmluZSBwbWRfbm9uZSh4KQkoISh1bnNpZ25lZCBsb25nKXBtZF92YWwoKHgpKSkKLSNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoKHgpKSAmIF9QQUdFX1BSRVNFTlQpCi0jZGVmaW5lIHBtZF9iYWQoeCkgKChwbWRfdmFsKHgpICYgKFBURV9GTEFHU19NQVNLICYgfl9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFKQotCi0jZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQotCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CiAjZWxzZQogIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KICNlbmRpZgogCi0vKgotICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKLSAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCi0gKi8KLSNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCi0KLQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB1ZCkgeyByZXR1cm4gMDsgfQotCi0vKgotICogdGhlIHBtZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcG1kX3RbUFRSU19QRVJfUE1EXQotICoKLSAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwbWQgcGFnZSB3aGljaCB3b3VsZAotICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCQkJCVwKLQkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKQotCi0vKgotICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQotICoKLSAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAotICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpCQkJCQlcCi0JKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykJCQkJXAotCSgocHRlX3QgKilwbWRfcGFnZV92YWRkcigqKGRpcikpICsgIHB0ZV9pbmRleCgoYWRkcmVzcykpKQotCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF92YWwoKHBtZCkpID4+IFBBR0VfU0hJRlQpKQotCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkJCQkJCVwKLQkoKHVuc2lnbmVkIGxvbmcpX192YShwbWRfdmFsKChwbWQpKSAmIFBURV9QRk5fTUFTSykpCi0KICNpZiBkZWZpbmVkKENPTkZJR19ISUdIUFRFKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCQkJCQlcCiAJKChwdGVfdCAqKWttYXBfYXRvbWljX3B0ZShwbWRfcGFnZSgqKGRpcikpLCBLTV9QVEUwKSArCQlcCkBAIC0xNzYsNyArOTMsNCBAQAogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoa2FkZHIpCSgwKQogI2VuZGlmCiAKLSNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhkZjNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV8zMl9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8zMl9ERUZTX0gKKworLyoKKyAqIFRoZSBMaW51eCB4ODYgcGFnaW5nIGFyY2hpdGVjdHVyZSBpcyAnY29tcGlsZS10aW1lIGR1YWwtbW9kZScsIGl0CisgKiBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIDItbGV2ZWwgeDg2IHBhZ2UgdGFibGVzIGFuZCB0aGUKKyAqIG5ld2VyIDMtbGV2ZWwgUEFFLW1vZGUgcGFnZSB0YWJsZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWxfdHlwZXMuaD4KKyMgZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorIyBkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKKyNlbHNlCisjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbF90eXBlcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUgLSAxKSkKKworLyogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkoOCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKQorI2lmZGVmIENPTkZJR19YODZfUEFFCisjZGVmaW5lIExBU1RfUEtNQVAgNTEyCisjZWxzZQorI2RlZmluZSBMQVNUX1BLTUFQIDEwMjQKKyNlbmRpZgorCisjZGVmaW5lIFBLTUFQX0JBU0UgKChGSVhBRERSX0JPT1RfU1RBUlQgLSBQQUdFX1NJWkUgKiAoTEFTVF9QS01BUCArIDEpKQlcCisJCSAgICAmIFBNRF9NQVNLKQorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShQS01BUF9CQVNFIC0gMiAqIFBBR0VfU0laRSkKKyNlbHNlCisjIGRlZmluZSBWTUFMTE9DX0VORAkoRklYQUREUl9TVEFSVCAtIDIgKiBQQUdFX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBNQVhNRU0JKFZNQUxMT0NfRU5EIC0gUEFHRV9PRkZTRVQgLSBfX1ZNQUxMT0NfUkVTRVJWRSkKKworI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfMzJfREVGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggYmEwOTI4OS4uNmI4N2JjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtMiw2ICsyLDggQEAKICNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV82NF9ICiAKICNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlXzY0X3R5cGVzLmg+CisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCkBAIC0xMSw3ICsxMyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAKIGV4dGVybiBwdWRfdCBsZXZlbDNfa2VybmVsX3BndFs1MTJdOwogZXh0ZXJuIHB1ZF90IGxldmVsM19pZGVudF9wZ3RbNTEyXTsKQEAgLTI2LDMyICsyNyw2IEBACiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMAotCi0vKgotICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdG9wLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcAotICovCi0jZGVmaW5lIFBHRElSX1NISUZUCTM5Ci0jZGVmaW5lIFBUUlNfUEVSX1BHRAk1MTIKLQotLyoKLSAqIDNyZCBsZXZlbCBwYWdlCi0gKi8KLSNkZWZpbmUgUFVEX1NISUZUCTMwCi0jZGVmaW5lIFBUUlNfUEVSX1BVRAk1MTIKLQotLyoKLSAqIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgbWlkZGxlLWxldmVsCi0gKiBwYWdlIHRhYmxlIGNhbiBtYXAKLSAqLwotI2RlZmluZSBQTURfU0hJRlQJMjEKLSNkZWZpbmUgUFRSU19QRVJfUE1ECTUxMgotCi0vKgotICogZW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwKLSAqLwotI2RlZmluZSBQVFJTX1BFUl9QVEUJNTEyCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpCQkJCQlcCkBAIC02Nyw5ICs0Miw2IEBACiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlcCglMDE2bHgpLlxuIiwJCVwKIAkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQogCi0jZGVmaW5lIHBnZF9ub25lKHgpCSghcGdkX3ZhbCh4KSkKLSNkZWZpbmUgcHVkX25vbmUoeCkJKCFwdWRfdmFsKHgpKQotCiBzdHJ1Y3QgbW1fc3RydWN0OwogCiB2b2lkIHNldF9wdGVfdmFkZHJfcHVkKHB1ZF90ICpwdWRfcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgbmV3X3B0ZSk7CkBAIC0xMzQsNDggKzEwNiw2IEBACiAJbmF0aXZlX3NldF9wZ2QocGdkLCBuYXRpdmVfbWFrZV9wZ2QoMCkpOwogfQogCi0jZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkoKGEpLnB0ZSA9PSAoYikucHRlKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFBNRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKLSNkZWZpbmUgUFVEX1NJWkUJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfTUFTSwkofihQVURfU0laRSAtIDEpKQotI2RlZmluZSBQR0RJUl9TSVpFCShfQUMoMSwgVUwpIDw8IFBHRElSX1NISUZUKQotI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUgLSAxKSkKLQotCi0jZGVmaW5lIE1BWE1FTQkJIF9BQyhfX0FDKDEsIFVMKSA8PCBNQVhfUEhZU01FTV9CSVRTLCBVTCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICBfQUMoMHhmZmZmYzIwMDAwMDAwMDAwLCBVTCkKLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICBfQUMoMHhmZmZmZTFmZmZmZmZmZmZmLCBVTCkKLSNkZWZpbmUgVk1FTU1BUF9TVEFSVAkgX0FDKDB4ZmZmZmUyMDAwMDAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfVkFERFIgICAgX0FDKDB4ZmZmZmZmZmZhMDAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfRU5EICAgICAgX0FDKDB4ZmZmZmZmZmZmZjAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfTEVOICAgKE1PRFVMRVNfRU5EIC0gTU9EVUxFU19WQUREUikKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCi17Ci0JcmV0dXJuIChwZ2RfdmFsKHBnZCkgJiB+KFBURV9QRk5fTUFTSyB8IF9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHVkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQotewotCXJldHVybiAocG1kX3ZhbChwbWQpICYgfihQVEVfUEZOX01BU0sgfCBfUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRTsKLX0KLQotI2RlZmluZSBwdGVfbm9uZSh4KQkoIXB0ZV92YWwoKHgpKSkKLSNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKHB0ZV92YWwoKHgpKSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQotCi0jZGVmaW5lIHBhZ2VzX3RvX21iKHgpCSgoeCkgPj4gKDIwIC0gUEFHRV9TSElGVCkpICAgLyogRklYTUU6IGlzIHRoaXMgcmlnaHQ/ICovCi0KIC8qCiAgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAogICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KQEAgLTE4NCw0MSArMTE0LDEyIEBACiAvKgogICogTGV2ZWwgNCBhY2Nlc3MuCiAgKi8KLSNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkJCQkJCVwKLQkoKHVuc2lnbmVkIGxvbmcpX192YSgodW5zaWduZWQgbG9uZylwZ2RfdmFsKChwZ2QpKSAmIFBURV9QRk5fTUFTSykpCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCShwZm5fdG9fcGFnZShwZ2RfdmFsKChwZ2QpKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKSAocGdkX3ZhbChwZ2QpICYgX1BBR0VfUFJFU0VOVCkKIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9sYXJnZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KICNkZWZpbmUgbWtfa2VybmVsX3BnZChhZGRyZXNzKSBfX3BnZCgoYWRkcmVzcykgfCBfS0VSTlBHX1RBQkxFKQogCiAvKiBQVUQgLSBMZXZlbDMgYWNjZXNzICovCi0vKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkJCQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKV9fdmEocHVkX3ZhbCgocHVkKSkgJiBQSFlTSUNBTF9QQUdFX01BU0spKQotI2RlZmluZSBwdWRfcGFnZShwdWQpCShwZm5fdG9fcGFnZShwdWRfdmFsKChwdWQpKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcHVkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpCi0jZGVmaW5lIHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKQkJCQkJXAotCSgocHVkX3QgKilwZ2RfcGFnZV92YWRkcigqKHBnZCkpICsgcHVkX2luZGV4KChhZGRyZXNzKSkpCi0jZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkgKHB1ZF92YWwoKHB1ZCkpICYgX1BBR0VfUFJFU0VOVCkKLQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB0ZSkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHRlKSAmIChfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKSkgPT0KLQkJKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpOwotfQogCiAvKiBQTUQgIC0gTGV2ZWwgMiBhY2Nlc3MgKi8KLSNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfUEZOX01BU0spKQotI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3ZhbCgocG1kKSkgPj4gUEFHRV9TSElGVCkpCi0KLSNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpCi0jZGVmaW5lIHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopcHVkX3BhZ2VfdmFkZHIoKihkaXIpKSArIFwKLQkJCQkgIHBtZF9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKCh4KSkpCi0jZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKCh4KSkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZSBwZm5fcG1kKG5yLCBwcm90KSAoX19wbWQoKChucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKChwcm90KSkpKQotI2RlZmluZSBwbWRfcGZuKHgpICAoKHBtZF92YWwoKHgpKSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKLQogI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwoKHB0ZSkpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IC5wdGUgPSAoKG9mZikgPDwgUEFHRV9TSElGVCkgfAlcCiAJCQkJCSAgICBfUEFHRV9GSUxFIH0pCkBAIC0yMjYsMTMgKzEyNyw2IEBACiAKIC8qIFBURSAtIExldmVsIDEgYWNjZXNzLiAqLwogCi0vKiBwYWdlLCBwcm90ZWN0aW9uIC0+IHB0ZSAqLwotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKChwYWdlKSksIChwZ3Byb3QpKQotCi0jZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKLSNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSAoKHB0ZV90ICopIHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBcCi0JCQkJCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKLQogLyogeDg2LTY0IGFsd2F5cyBoYXMgYWxsIHBhZ2UgdGFibGVzIG1hcHBlZC4gKi8KICNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHJlc3MpKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHJlc3MpKQpAQCAtMjY2LDkgKzE2MCw2IEBACiBleHRlcm4gaW50IGtlcm5fYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIHZvaWQgY2xlYW51cF9oaWdobWFwKHZvaWQpOwogCi0jZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKLQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQotCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBX1RPUERPV04KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjQyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0X3R5cGVzLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzY0X0RFRlNfSAorI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzY0X0RFRlNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcHRlOyB9IHB0ZV90OworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTAKKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwk0CisKKy8qCisgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJMzkKKyNkZWZpbmUgUFRSU19QRVJfUEdECTUxMgorCisvKgorICogM3JkIGxldmVsIHBhZ2UKKyAqLworI2RlZmluZSBQVURfU0hJRlQJMzAKKyNkZWZpbmUgUFRSU19QRVJfUFVECTUxMgorCisvKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBtaWRkbGUtbGV2ZWwKKyAqIHBhZ2UgdGFibGUgY2FuIG1hcAorICovCisjZGVmaW5lIFBNRF9TSElGVAkyMQorI2RlZmluZSBQVFJTX1BFUl9QTUQJNTEyCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbAorICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQk1MTIKKworI2RlZmluZSBQTURfU0laRQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFIC0gMSkpCisjZGVmaW5lIFBVRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBVRF9TSElGVCkKKyNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUgLSAxKSkKKyNkZWZpbmUgUEdESVJfU0laRQkoX0FDKDEsIFVMKSA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFIC0gMSkpCisKKworI2RlZmluZSBNQVhNRU0JCSBfQUMoX19BQygxLCBVTCkgPDwgTUFYX1BIWVNNRU1fQklUUywgVUwpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAgX0FDKDB4ZmZmZmMyMDAwMDAwMDAwMCwgVUwpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgX0FDKDB4ZmZmZmUxZmZmZmZmZmZmZiwgVUwpCisjZGVmaW5lIFZNRU1NQVBfU1RBUlQJIF9BQygweGZmZmZlMjAwMDAwMDAwMDAsIFVMKQorI2RlZmluZSBNT0RVTEVTX1ZBRERSICAgIF9BQygweGZmZmZmZmZmYTAwMDAwMDAsIFVMKQorI2RlZmluZSBNT0RVTEVTX0VORCAgICAgIF9BQygweGZmZmZmZmZmZmYwMDAwMDAsIFVMKQorI2RlZmluZSBNT0RVTEVTX0xFTiAgIChNT0RVTEVTX0VORCAtIE1PRFVMRVNfVkFERFIpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzY0X0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjU4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTAsMCArMSwzMjggQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV9ERUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KKworI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorCisjZGVmaW5lIF9QQUdFX0JJVF9QUkVTRU5UCTAJLyogaXMgcHJlc2VudCAqLworI2RlZmluZSBfUEFHRV9CSVRfUlcJCTEJLyogd3JpdGVhYmxlICovCisjZGVmaW5lIF9QQUdFX0JJVF9VU0VSCQkyCS8qIHVzZXJzcGFjZSBhZGRyZXNzYWJsZSAqLworI2RlZmluZSBfUEFHRV9CSVRfUFdUCQkzCS8qIHBhZ2Ugd3JpdGUgdGhyb3VnaCAqLworI2RlZmluZSBfUEFHRV9CSVRfUENECQk0CS8qIHBhZ2UgY2FjaGUgZGlzYWJsZWQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX0FDQ0VTU0VECTUJLyogd2FzIGFjY2Vzc2VkIChyYWlzZWQgYnkgQ1BVKSAqLworI2RlZmluZSBfUEFHRV9CSVRfRElSVFkJCTYJLyogd2FzIHdyaXR0ZW4gdG8gKHJhaXNlZCBieSBDUFUpICovCisjZGVmaW5lIF9QQUdFX0JJVF9QU0UJCTcJLyogNCBNQiAob3IgMk1CKSBwYWdlICovCisjZGVmaW5lIF9QQUdFX0JJVF9QQVQJCTcJLyogb24gNEtCIHBhZ2VzICovCisjZGVmaW5lIF9QQUdFX0JJVF9HTE9CQUwJOAkvKiBHbG9iYWwgVExCIGVudHJ5IFBQcm8rICovCisjZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQxCTkJLyogYXZhaWxhYmxlIGZvciBwcm9ncmFtbWVyICovCisjZGVmaW5lIF9QQUdFX0JJVF9JT01BUAkJMTAJLyogZmxhZyB1c2VkIHRvIGluZGljYXRlIElPIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDMJMTEKKyNkZWZpbmUgX1BBR0VfQklUX1BBVF9MQVJHRQkxMgkvKiBPbiAyTUIgb3IgMUdCIHBhZ2VzICovCisjZGVmaW5lIF9QQUdFX0JJVF9TUEVDSUFMCV9QQUdFX0JJVF9VTlVTRUQxCisjZGVmaW5lIF9QQUdFX0JJVF9DUEFfVEVTVAlfUEFHRV9CSVRfVU5VU0VEMQorI2RlZmluZSBfUEFHRV9CSVRfTlggICAgICAgICAgIDYzICAgICAgIC8qIE5vIGV4ZWN1dGU6IG9ubHkgdmFsaWQgYWZ0ZXIgY3B1aWQgY2hlY2sgKi8KKworLyogSWYgX1BBR0VfQklUX1BSRVNFTlQgaXMgY2xlYXIsIHdlIHVzZSB0aGVzZTogKi8KKy8qIC0gaWYgdGhlIHVzZXIgbWFwcGVkIGl0IHdpdGggUFJPVF9OT05FOyBwdGVfcHJlc2VudCBnaXZlcyB0cnVlICovCisjZGVmaW5lIF9QQUdFX0JJVF9QUk9UTk9ORQlfUEFHRV9CSVRfR0xPQkFMCisvKiAtIHNldDogbm9ubGluZWFyIGZpbGUgbWFwcGluZywgc2F2ZWQgUFRFOyB1bnNldDpzd2FwICovCisjZGVmaW5lIF9QQUdFX0JJVF9GSUxFCQlfUEFHRV9CSVRfRElSVFkKKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QUkVTRU5UKQorI2RlZmluZSBfUEFHRV9SVwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUlcpCisjZGVmaW5lIF9QQUdFX1VTRVIJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VTRVIpCisjZGVmaW5lIF9QQUdFX1BXVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFdUKQorI2RlZmluZSBfUEFHRV9QQ0QJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BDRCkKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0FDQ0VTU0VEKQorI2RlZmluZSBfUEFHRV9ESVJUWQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfRElSVFkpCisjZGVmaW5lIF9QQUdFX1BTRQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFNFKQorI2RlZmluZSBfUEFHRV9HTE9CQUwJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0dMT0JBTCkKKyNkZWZpbmUgX1BBR0VfVU5VU0VEMQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVU5VU0VEMSkKKyNkZWZpbmUgX1BBR0VfSU9NQVAJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0lPTUFQKQorI2RlZmluZSBfUEFHRV9VTlVTRUQzCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9VTlVTRUQzKQorI2RlZmluZSBfUEFHRV9QQVQJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BBVCkKKyNkZWZpbmUgX1BBR0VfUEFUX0xBUkdFIChfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQVRfTEFSR0UpCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1NQRUNJQUwpCisjZGVmaW5lIF9QQUdFX0NQQV9URVNUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9DUEFfVEVTVCkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKKyNkZWZpbmUgX1BBR0VfTlgJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX05YKQorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfTlgJKF9BVChwdGV2YWxfdCwgMCkpCisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9GSUxFCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9GSUxFKQorI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFJPVE5PTkUpCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfAlcCisJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX0tFUk5QR19UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfQUNDRVNTRUQgfAlcCisJCQkgX1BBR0VfRElSVFkpCisKKy8qIFNldCBvZiBiaXRzIG5vdCBjaGFuZ2VkIGluIHB0ZV9tb2RpZnkgKi8KKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9QRk5fTUFTSyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCB8CQlcCisJCQkgX1BBR0VfU1BFQ0lBTCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfTUFTSwkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQorI2RlZmluZSBfUEFHRV9DQUNIRV9XQgkJKDApCisjZGVmaW5lIF9QQUdFX0NBQ0hFX1dDCQkoX1BBR0VfUFdUKQorI2RlZmluZSBfUEFHRV9DQUNIRV9VQ19NSU5VUwkoX1BBR0VfUENEKQorI2RlZmluZSBfUEFHRV9DQUNIRV9VQwkJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IFwKKwkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKworI2RlZmluZSBQQUdFX1NIQVJFRF9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8CVwKKwkJCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZX05PRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJIF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFkJCVBBR0VfQ09QWV9OT0VYRUMKKyNkZWZpbmUgUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMX0VYRUMJCQkJCQlcCisJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9HTE9CQUwpCisjZGVmaW5lIF9fUEFHRV9LRVJORUwJCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9OWCkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPCQkoX19QQUdFX0tFUk5FTCAmIH5fUEFHRV9SVykKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9SWAkJKF9fUEFHRV9LRVJORUxfRVhFQyAmIH5fUEFHRV9SVykKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9XQwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9DQUNIRV9XQykKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9OT0NBQ0hFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9VQ19NSU5VUwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTEwJCShfX1BBR0VfS0VSTkVMX1JYIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfVUMgfCBfUEFHRV9QU0UpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfUFNFKQorCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU8JCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9OT0NBQ0hFIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJKF9fUEFHRV9LRVJORUxfVUNfTUlOVVMgfCBfUEFHRV9JT01BUCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19XQwkJKF9fUEFHRV9LRVJORUxfV0MgfCBfUEFHRV9JT01BUCkKKworI2RlZmluZSBQQUdFX0tFUk5FTAkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9STykKKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDKQorI2RlZmluZSBQQUdFX0tFUk5FTF9SWAkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfUlgpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1dDCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9XQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfTk9DQUNIRQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9VQ19NSU5VUwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9VQ19NSU5VUykKKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX0VYRUMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfVlNZU0NBTEwJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVlNZU0NBTEwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFKQorCisjZGVmaW5lIFBBR0VfS0VSTkVMX0lPCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JTykKKyNkZWZpbmUgUEFHRV9LRVJORUxfSU9fTk9DQUNIRQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9JT19VQ19NSU5VUwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19VQ19NSU5VUykKKyNkZWZpbmUgUEFHRV9LRVJORUxfSU9fV0MJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fV0MpCisKKy8qICAgICAgICAgeHdyICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfRVhFQworI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX0VYRUMKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9FWEVDCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfRVhFQworI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRURfRVhFQworI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfRVhFQworCisvKgorICogZWFybHkgaWRlbnRpdHkgbWFwcGluZyAgcHRlIGF0dHJpYiBtYWNyb3MuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSURFTlRfTEFSR0VfRVhFQwlfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMKKyNlbHNlCisvKgorICogRm9yIFBERV9JREVOVF9BVFRSIGluY2x1ZGUgVVNFUiBiaXQuIEFzIHRoZSBQREUgYW5kIFBURSBwcm90ZWN0aW9uCisgKiBiaXRzIGFyZSBjb21iaW5lZCwgdGhpcyB3aWxsIGFsb3cgdXNlciB0byBhY2Nlc3MgdGhlIGhpZ2ggYWRkcmVzcyBtYXBwZWQKKyAqIFZEU08gaW4gdGhlIHByZXNlbmNlIG9mIENPTkZJR19DT01QQVRfVkRTTworICovCisjZGVmaW5lIFBURV9JREVOVF9BVFRSCSAweDAwMwkJLyogUFJFU0VOVCtSVyAqLworI2RlZmluZSBQREVfSURFTlRfQVRUUgkgMHgwNjcJCS8qIFBSRVNFTlQrUlcrVVNFUitESVJUWStBQ0NFU1NFRCAqLworI2RlZmluZSBQR0RfSURFTlRfQVRUUgkgMHgwMDEJCS8qIFBSRVNFTlQgKG5vIG90aGVyIGF0dHJpYnV0ZXMpICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgaW5jbHVkZSAicGd0YWJsZV8zMl90eXBlcy5oIgorI2Vsc2UKKyMgaW5jbHVkZSAicGd0YWJsZV82NF90eXBlcy5oIgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBQVEVfUEZOX01BU0sgZXh0cmFjdHMgdGhlIFBGTiBmcm9tIGEgKHB0ZXxwbWR8cHVkfHBnZCl2YWxfdCAqLworI2RlZmluZSBQVEVfUEZOX01BU0sJCSgocHRldmFsX3QpUEhZU0lDQUxfUEFHRV9NQVNLKQorCisvKiBQVEVfRkxBR1NfTUFTSyBleHRyYWN0cyB0aGUgZmxhZ3MgZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KKyNkZWZpbmUgUFRFX0ZMQUdTX01BU0sJCSh+UFRFX1BGTl9NQVNLKQorCit0eXBlZGVmIHN0cnVjdCBwZ3Byb3QgeyBwZ3Byb3R2YWxfdCBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsgcGdkdmFsX3QgcGdkOyB9IHBnZF90OworCitzdGF0aWMgaW5saW5lIHBnZF90IG5hdGl2ZV9tYWtlX3BnZChwZ2R2YWxfdCB2YWwpCit7CisJcmV0dXJuIChwZ2RfdCkgeyB2YWwgfTsKK30KKworc3RhdGljIGlubGluZSBwZ2R2YWxfdCBuYXRpdmVfcGdkX3ZhbChwZ2RfdCBwZ2QpCit7CisJcmV0dXJuIHBnZC5wZ2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkdmFsX3QgcGdkX2ZsYWdzKHBnZF90IHBnZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3BnZF92YWwocGdkKSAmIFBURV9GTEFHU19NQVNLOworfQorCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDMKK3R5cGVkZWYgc3RydWN0IHsgcHVkdmFsX3QgcHVkOyB9IHB1ZF90OworCitzdGF0aWMgaW5saW5lIHB1ZF90IG5hdGl2ZV9tYWtlX3B1ZChwbWR2YWxfdCB2YWwpCit7CisJcmV0dXJuIChwdWRfdCkgeyB2YWwgfTsKK30KKworc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCit7CisJcmV0dXJuIHB1ZC5wdWQ7Cit9CisjZWxzZQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCit7CisJcmV0dXJuIG5hdGl2ZV9wZ2RfdmFsKHB1ZC5wZ2QpOworfQorI2VuZGlmCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgordHlwZWRlZiBzdHJ1Y3QgeyBwbWR2YWxfdCBwbWQ7IH0gcG1kX3Q7CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgbmF0aXZlX21ha2VfcG1kKHBtZHZhbF90IHZhbCkKK3sKKwlyZXR1cm4gKHBtZF90KSB7IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHBtZHZhbF90IG5hdGl2ZV9wbWRfdmFsKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kLnBtZDsKK30KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorCitzdGF0aWMgaW5saW5lIHBtZHZhbF90IG5hdGl2ZV9wbWRfdmFsKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3BnZF92YWwocG1kLnB1ZC5wZ2QpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgcHVkdmFsX3QgcHVkX2ZsYWdzKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3B1ZF92YWwocHVkKSAmIFBURV9GTEFHU19NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHBtZHZhbF90IHBtZF9mbGFncyhwbWRfdCBwbWQpCit7CisJcmV0dXJuIG5hdGl2ZV9wbWRfdmFsKHBtZCkgJiBQVEVfRkxBR1NfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbWFrZV9wdGUocHRldmFsX3QgdmFsKQoreworCXJldHVybiAocHRlX3QpIHsgLnB0ZSA9IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHB0ZXZhbF90IG5hdGl2ZV9wdGVfdmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlLnB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfZmxhZ3MocHRlX3QgcHRlKQoreworCXJldHVybiBuYXRpdmVfcHRlX3ZhbChwdGUpICYgUFRFX0ZMQUdTX01BU0s7Cit9CisKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKwordHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OworCitleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CitleHRlcm4gaW50IG54X2VuYWJsZWQ7CisKKyNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZQlwZ3Byb3Rfd3JpdGVjb21iaW5lCitleHRlcm4gcGdwcm90X3QgcGdwcm90X3dyaXRlY29tYmluZShwZ3Byb3RfdCBwcm90KTsKKworLyogSW5kaWNhdGUgdGhhdCB4ODYgaGFzIGl0cyBvd24gdHJhY2sgYW5kIHVudHJhY2sgcGZuIHZtYSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgX19IQVZFX1BGTk1BUF9UUkFDS0lORworCisjZGVmaW5lIF9fSEFWRV9QSFlTX01FTV9BQ0NFU1NfUFJPVAorc3RydWN0IGZpbGU7CitwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKK2ludCBwaHlzX21lbV9hY2Nlc3NfcHJvdF9hbGxvd2VkKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnZtYV9wcm90KTsKKworLyogSW5zdGFsbCBhIHB0ZSBmb3IgYSBwYXJ0aWN1bGFyIHZhZGRyIGluIGtlcm5lbCBzcGFjZS4gKi8KK3ZvaWQgc2V0X3B0ZV92YWRkcih1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCBwdGUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7CitleHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkge30KKyNlbmRpZgorCitzdHJ1Y3Qgc2VxX2ZpbGU7CitleHRlcm4gdm9pZCBhcmNoX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSk7CisKK2VudW0geworCVBHX0xFVkVMX05PTkUsCisJUEdfTEVWRUxfNEssCisJUEdfTEVWRUxfMk0sCisJUEdfTEVWRUxfMUcsCisJUEdfTEVWRUxfTlVNCit9OworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBwYWdlcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBwYWdlcykgeyB9CisjZW5kaWYKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGtlcm5lbCBwYWdldGFibGUgZW50cnkgY29udHJvbGxpbmcKKyAqIHRoZSB2aXJ0dWFsIGFkZHJlc3MgJ2FkZHJlc3MnLiBOVUxMIG1lYW5zIG5vIHBhZ2V0YWJsZSBlbnRyeSBwcmVzZW50LgorICogTk9URTogdGhlIHJldHVybiB0eXBlIGlzIHB0ZV90IGJ1dCBpZiB0aGUgcG1kIGlzIFBTRSB0aGVuIHdlIHJldHVybiBpdAorICogYXMgYSBwdGUgdG9vLgorICovCitleHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50ICpsZXZlbCk7CisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmgKaW5kZXggYTg4OTQ2NC4uM2FjNTAzMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCkBAIC02LDggKzYsNCBAQAogI2RlZmluZSBBUkNIX0dFVF9GUyAweDEwMDMKICNkZWZpbmUgQVJDSF9HRVRfR1MgMHgxMDA0CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1leHRlcm4gbG9uZyBzeXNfYXJjaF9wcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcpOwotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQogI2VuZGlmIC8qIF9BU01fWDg2X1BSQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggM2JmZDUyMy4uNzYxMzk1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CkBAIC03Myw3ICs3NCw3IEBACiAJY2hhcgkJCXBhZDA7CiAjZWxzZQogCS8qIE51bWJlciBvZiA0SyBwYWdlcyBpbiBEVExCL0lUTEIgY29tYmluZWQoaW4gcGFnZXMpOiAqLwotCWludAkJCSB4ODZfdGxic2l6ZTsKKwlpbnQJCQl4ODZfdGxic2l6ZTsKIAlfX3U4CQkJeDg2X3ZpcnRfYml0czsKIAlfX3U4CQkJeDg2X3BoeXNfYml0czsKICNlbmRpZgpAQCAtMjQ3LDcgKzI0OCw2IEBACiAjZGVmaW5lIElPX0JJVE1BUF9MT05HUwkJCShJT19CSVRNQVBfQllURVMvc2l6ZW9mKGxvbmcpKQogI2RlZmluZSBJT19CSVRNQVBfT0ZGU0VUCQlvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaW9fYml0bWFwKQogI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQJMHg4MDAwCi0jZGVmaW5lIElOVkFMSURfSU9fQklUTUFQX09GRlNFVF9MQVpZCTB4OTAwMAogCiBzdHJ1Y3QgdHNzX3N0cnVjdCB7CiAJLyoKQEAgLTI2MiwxMSArMjYyLDYgQEAKIAkgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgogCSAqLwogCXVuc2lnbmVkIGxvbmcJCWlvX2JpdG1hcFtJT19CSVRNQVBfTE9OR1MgKyAxXTsKLQkvKgotCSAqIENhY2hlIHRoZSBjdXJyZW50IG1heGltdW0gYW5kIHRoZSBsYXN0IHRhc2sgdGhhdCB1c2VkIHRoZSBiaXRtYXA6Ci0JICovCi0JdW5zaWduZWQgbG9uZwkJaW9fYml0bWFwX21heDsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdAkqaW9fYml0bWFwX293bmVyOwogCiAJLyoKIAkgKiAuLiBhbmQgdGhlbiBhbm90aGVyIDB4MTAwIGJ5dGVzIGZvciB0aGUgZW1lcmdlbmN5IGtlcm5lbCBzdGFjazoKQEAgLTM3OCw5ICszNzMsMzAgQEAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgb3JpZ19pc3QsIG9yaWdfaXN0KTsKLSNlbmRpZgogCi1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7Cit1bmlvbiBpcnFfc3RhY2tfdW5pb24geworCWNoYXIgaXJxX3N0YWNrW0lSUV9TVEFDS19TSVpFXTsKKwkvKgorCSAqIEdDQyBoYXJkY29kZXMgdGhlIHN0YWNrIGNhbmFyeSBhcyAlZ3M6NDAuICBTaW5jZSB0aGUKKwkgKiBpcnFfc3RhY2sgaXMgdGhlIG9iamVjdCBhdCAlZ3M6MCwgd2UgcmVzZXJ2ZSB0aGUgYm90dG9tCisJICogNDggYnl0ZXMgb2YgdGhlIGlycSBzdGFjayBmb3IgdGhlIGNhbmFyeS4KKwkgKi8KKwlzdHJ1Y3QgeworCQljaGFyIGdzX2Jhc2VbNDBdOworCQl1bnNpZ25lZCBsb25nIHN0YWNrX2NhbmFyeTsKKwl9OworfTsKKworREVDTEFSRV9QRVJfQ1BVKHVuaW9uIGlycV9zdGFja191bmlvbiwgaXJxX3N0YWNrX3VuaW9uKTsKK0RFQ0xBUkVfSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CisKK0RFQ0xBUkVfUEVSX0NQVShjaGFyICosIGlycV9zdGFja19wdHIpOworI2Vsc2UJLyogWDg2XzY0ICovCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc3RhY2tfY2FuYXJ5KTsKKyNlbmRpZgorI2VuZGlmCS8qIFg4Nl82NCAqLworCiBleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOwogZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOwpAQCAtNzUyLDkgKzc2OCw5IEBACiBleHRlcm4gc3RydWN0IGRlc2NfcHRyCQllYXJseV9nZHRfZGVzY3I7CiAKIGV4dGVybiB2b2lkIGNwdV9zZXRfZ2R0KGludCk7Ci1leHRlcm4gdm9pZCBzd2l0Y2hfdG9fbmV3X2dkdCh2b2lkKTsKK2V4dGVybiB2b2lkIHN3aXRjaF90b19uZXdfZ2R0KGludCk7CitleHRlcm4gdm9pZCBsb2FkX3BlcmNwdV9zZWdtZW50KGludCk7CiBleHRlcm4gdm9pZCBjcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfZ2R0KGludCBjcHUpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2RlYnVnY3RsbXNyKHZvaWQpCiB7CkBAIC04MzksNiArODU1LDcgQEAKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAzR0IgKGRlZmF1bHQpLgogICovCiAjZGVmaW5lIFRBU0tfU0laRQkJUEFHRV9PRkZTRVQKKyNkZWZpbmUgVEFTS19TSVpFX01BWAkJVEFTS19TSVpFCiAjZGVmaW5lIFNUQUNLX1RPUAkJVEFTS19TSVpFCiAjZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVNUQUNLX1RPUAogCkBAIC04OTgsNyArOTE1LDcgQEAKIC8qCiAgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZS4gNDdiaXRzIG1pbnVzIG9uZSBndWFyZCBwYWdlLgogICovCi0jZGVmaW5lIFRBU0tfU0laRTY0CSgoMVVMIDw8IDQ3KSAtIFBBR0VfU0laRSkKKyNkZWZpbmUgVEFTS19TSVpFX01BWAkoKDFVTCA8PCA0NykgLSBQQUdFX1NJWkUpCiAKIC8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KICAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuCkBAIC05MDcsMTIgKzkyNCwxMiBAQAogCQkJCQkweGMwMDAwMDAwIDogMHhGRkZGZTAwMCkKIAogI2RlZmluZSBUQVNLX1NJWkUJCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IFwKLQkJCQkJSUEzMl9QQUdFX09GRlNFVCA6IFRBU0tfU0laRTY0KQorCQkJCQlJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFX01BWCkKICNkZWZpbmUgVEFTS19TSVpFX09GKGNoaWxkKQkoKHRlc3RfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfSUEzMikpID8gXAotCQkJCQlJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFNjQpCisJCQkJCUlBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkVfTUFYKQogCiAjZGVmaW5lIFNUQUNLX1RPUAkJVEFTS19TSVpFCi0jZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVRBU0tfU0laRTY0CisjZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVRBU0tfU0laRV9NQVgKIAogI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCiAJLnNwMCA9ICh1bnNpZ25lZCBsb25nKSZpbml0X3N0YWNrICsgc2l6ZW9mKGluaXRfc3RhY2spIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm90by5oCmluZGV4IGQ2YTIyZjkuLjQ5ZmIzZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvdG8uaApAQCAtMTgsMTEgKzE4LDcgQEAKIAogZXh0ZXJuIHZvaWQgY2hlY2tfZWZlcih2b2lkKTsKIAotI2lmZGVmIENPTkZJR19YODZfQklPU19SRUJPT1QKIGV4dGVybiBpbnQgcmVib290X2ZvcmNlOwotI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgcmVib290X2ZvcmNlID0gMDsKLSNlbmRpZgogCiBsb25nIGRvX2FyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA2ZDM0ZDk1Li5lMzA0YjY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjgsNyArMjgsNyBAQAogCWludCAgeGRzOwogCWludCAgeGVzOwogCWludCAgeGZzOwotCS8qIGludCAgZ3M7ICovCisJaW50ICB4Z3M7CiAJbG9uZyBvcmlnX2VheDsKIAlsb25nIGVpcDsKIAlpbnQgIHhjczsKQEAgLTUwLDcgKzUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGRzOwogCXVuc2lnbmVkIGxvbmcgZXM7CiAJdW5zaWduZWQgbG9uZyBmczsKLQkvKiBpbnQgIGdzOyAqLworCXVuc2lnbmVkIGxvbmcgZ3M7CiAJdW5zaWduZWQgbG9uZyBvcmlnX2F4OwogCXVuc2lnbmVkIGxvbmcgaXA7CiAJdW5zaWduZWQgbG9uZyBjczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JkYzMyMXhfZGVmcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3JkYzMyMXhfZGVmcy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWdtZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWdtZW50LmgKaW5kZXggMWRjMWI1MS4uMTRlMGVkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlZ21lbnQuaApAQCAtNjEsNyArNjEsNyBAQAogICoKICAqICAyNiAtIEVTUEZJWCBzbWFsbCBTUwogICogIDI3IC0gcGVyLWNwdQkJCVsgb2Zmc2V0IHRvIHBlci1jcHUgZGF0YSBhcmVhIF0KLSAqICAyOCAtIHVudXNlZAorICogIDI4IC0gc3RhY2tfY2FuYXJ5LTIwCQlbIGZvciBzdGFjayBwcm90ZWN0b3IgXQogICogIDI5IC0gdW51c2VkCiAgKiAgMzAgLSB1bnVzZWQKICAqICAzMSAtIFRTUyBmb3IgZG91YmxlIGZhdWx0IGhhbmRsZXIKQEAgLTk1LDYgKzk1LDEzIEBACiAjZGVmaW5lIF9fS0VSTkVMX1BFUkNQVSAwCiAjZW5kaWYKIAorI2RlZmluZSBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMTYpCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisjZGVmaW5lIF9fS0VSTkVMX1NUQUNLX0NBTkFSWQkJKEdEVF9FTlRSWV9TVEFDS19DQU5BUlkgKiA4KQorI2Vsc2UKKyNkZWZpbmUgX19LRVJORUxfU1RBQ0tfQ0FOQVJZCQkwCisjZW5kaWYKKwogI2RlZmluZSBHRFRfRU5UUllfRE9VQkxFRkFVTFRfVFNTCTMxCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlYmU4NThjLi4wNWM2ZjZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsMzMgKzEsMTkgQEAKICNpZm5kZWYgX0FTTV9YODZfU0VUVVBfSAogI2RlZmluZSBfQVNNX1g4Nl9TRVRVUF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjA0OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotdm9pZCB2c21wX2luaXQodm9pZCk7Ci0KLQotdm9pZCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZCk7Ci0KLQotI2lmZGVmIENPTkZJR19YODZfVklTV1MKLWV4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKLWV4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLWV4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7Ci1leHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKIC8qCiAgKiBBbnkgc2V0dXAgcXVpcmtzIHRvIGJlIHBlcmZvcm1lZD8KICAqLwogc3RydWN0IG1wY19jcHU7CiBzdHJ1Y3QgbXBjX2J1czsKIHN0cnVjdCBtcGNfb2VtdGFibGU7CisKIHN0cnVjdCB4ODZfcXVpcmtzIHsKIAlpbnQgKCphcmNoX3ByZV90aW1lX2luaXQpKHZvaWQpOwogCWludCAoKmFyY2hfdGltZV9pbml0KSh2b2lkKTsKQEAgLTQzLDIxICsyOSwyMCBAQAogCXZvaWQgKCptcGNfb2VtX2J1c19pbmZvKShzdHJ1Y3QgbXBjX2J1cyAqbSwgY2hhciAqbmFtZSk7CiAJdm9pZCAoKm1wY19vZW1fcGNpX2J1cykoc3RydWN0IG1wY19idXMgKm0pOwogCXZvaWQgKCpzbXBfcmVhZF9tcGNfb2VtKShzdHJ1Y3QgbXBjX29lbXRhYmxlICpvZW10YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9lbXNpemUpOworCQkJCXVuc2lnbmVkIHNob3J0IG9lbXNpemUpOwogCWludCAoKnNldHVwX2lvYXBpY19pZHMpKHZvaWQpOwotCWludCAoKnVwZGF0ZV9nZW5hcGljKSh2b2lkKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgeDg2X3F1aXJrcyAqeDg2X3F1aXJrczsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7CitleHRlcm4gdm9pZCB4ODZfcXVpcmtfcHJlX2ludHJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHg4Nl9xdWlya19pbnRyX2luaXQodm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgorZXh0ZXJuIHZvaWQgeDg2X3F1aXJrX3RyYXBfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgeDg2X3F1aXJrX3ByZV90aW1lX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4ODZfcXVpcmtfdGltZV9pbml0KHZvaWQpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpZmRlZiBfX2kzODZfXwogCiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CkBAIC03OCw2ICs2MywzMCBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAKKy8qIEludGVycnVwdCBjb250cm9sIGZvciB2U01Qb3dlcmVkIHg4Nl82NCBzeXN0ZW1zICovCisjaWZkZWYgQ09ORklHX1g4Nl9WU01QCit2b2lkIHZzbXBfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdnNtcF9pbml0KHZvaWQpIHsgfQorI2VuZGlmCisKK3ZvaWQgc2V0dXBfYmlvc19jb3JydXB0aW9uX2NoZWNrKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9WSVNXUworZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOworZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCB4ODZfcXVpcmtzICp4ODZfcXVpcmtzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmlkZW9fbW9kZTsKKworI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKyNkZWZpbmUgcGFyYXZpcnRfcG9zdF9hbGxvY2F0b3JfaW5pdCgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZm5kZWYgX1NFVFVQCiAKIC8qCkBAIC0xMDAsNyArMTA5LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcGdfdGFibGVzX2VuZDsKIAogI2Vsc2UKLXZvaWQgX19pbml0IHg4Nl82NF9pbml0X3BkYSh2b2lkKTsKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9rZXJuZWwoY2hhciAqcmVhbF9tb2RlKTsKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMoY2hhciAqcmVhbF9tb2RlX2RhdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXBfYXJjaC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaC5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cF9hcmNoLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMTk5NTNkZi4uNDdkMGUyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKQEAgLTE1LDM0ICsxNSw4IEBACiAjICBpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogIyBlbmRpZgogI2VuZGlmCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi1leHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbGluX21hc2s7Ci1leHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOwotZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7Ci1leHRlcm4gY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOwotCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLSNkZWZpbmUgY3B1X2NhbGxpbl9tYXNrCQkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9jYWxsaW5fbWFwKQotI2RlZmluZSBjcHVfY2FsbG91dF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxvdXRfbWFwKQotI2RlZmluZSBjcHVfaW5pdGlhbGl6ZWRfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9pbml0aWFsaXplZCkKLSNkZWZpbmUgY3B1X3NpYmxpbmdfc2V0dXBfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9zaWJsaW5nX3NldHVwX21hcCkKLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQotZXh0ZXJuIHZvaWQgKCptdHJyX2hvb2spKHZvaWQpOwotZXh0ZXJuIHZvaWQgemFwX2xvd19tYXBwaW5ncyh2b2lkKTsKLQotZXh0ZXJuIGludCBfX2NwdWluaXQgZ2V0X2xvY2FsX3BkYShpbnQgY3B1KTsKKyNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgogCiBleHRlcm4gaW50IHNtcF9udW1fc2libGluZ3M7CiBleHRlcm4gdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwpAQCAtNTAsOSArMjQsNyBAQAogREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X3NpYmxpbmdfbWFwKTsKIERFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7CiBERUNMQVJFX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfbnVtYmVyKTsKLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVtYXNrICpjcHVfc2libGluZ19tYXNrKGludCBjcHUpCiB7CkBAIC0xNjcsOCArMTM5LDYgQEAKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiB2b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19zaW5nbGVfaXBpKGludCBjcHUpOwogCi1leHRlcm4gdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKTsKLQogdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKTsKICNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KQogCkBAIC0xNzcsMTAgKzE0Nyw2IEBACiB7CiAJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9jYWxsb3V0X21hc2spOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKQotewotfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGRpc2FibGVkX2NwdXMgX19jcHVpbml0ZGF0YTsKQEAgLTE5MSwxMSArMTU3LDExIEBACiAgKiBmcm9tIHRoZSBpbml0aWFsIHN0YXJ0dXAuIFdlIG1hcCBBUElDX0JBU0UgdmVyeSBlYXJseSBpbiBwYWdlX3NldHVwKCksCiAgKiBzbyB0aGlzIGlzIGNvcnJlY3QgaW4gdGhlIHg4NiBjYXNlLgogICovCi0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKHg4Nl9yZWFkX3BlcmNwdShjcHVfbnVtYmVyKSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAocGVyY3B1X3JlYWQoY3B1X251bWJlcikpCiBleHRlcm4gaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0X1NNUCkKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQlyZWFkX3BkYShjcHVudW1iZXIpCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKHBlcmNwdV9yZWFkKGNwdV9udW1iZXIpKQogCiAjZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKQkJCQkJXAogKHsJCQkJCQkJCVwKQEAgLTIwNSwxMCArMTcxLDYgQEAKIH0pCiAjZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQlzbXBfcHJvY2Vzc29yX2lkKCkKIAotI2Vsc2UgLyogIUNPTkZJR19YODZfMzJfU01QICYmICFDT05GSUdfWDg2XzY0X1NNUCAqLwotI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0jZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCi0jZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKSAJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKQEAgLTIyMCwyOCArMTgyLDkgQEAKIAlyZXR1cm4gR0VUX0FQSUNfTE9HSUNBTF9JRCgqKHUzMiAqKShBUElDX0JBU0UgKyBBUElDX0xEUikpOwogfQogCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX2FwaWNfaWQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gKih1MzIgKikoQVBJQ19CQVNFICsgQVBJQ19JRCk7Ci0KLQlyZXR1cm4gR0VUX0FQSUNfSUQocmVnKTsKLX0KICNlbmRpZgogCi0KLSMgaWYgZGVmaW5lZChBUElDX0RFRklOSVRJT04pIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKIGV4dGVybiBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwotIyBlbHNlCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCi0JcmV0dXJuIHJlYWRfYXBpY19pZCgpOwotfQotIyBlbmRpZiAvKiBBUElDX0RFRklOSVRJT04gKi8KIAogI2Vsc2UgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCiAKQEAgLTI1MSwxMSArMTk0LDUgQEAKIAogI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwogCi0jaWZkZWYgQ09ORklHX1g4Nl9IQVNfQk9PVF9DUFVfSUQKLWV4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwotI2Vsc2UKLSNkZWZpbmUgYm9vdF9jcHVfaWQJMAotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wYm9vdF9ob29rcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wYm9vdF9ob29rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZWY2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKQEAgLTAsMCArMSw2MSBAQAorLyogdHdvIGFic3RyYWN0aW9ucyBzcGVjaWZpYyB0byBrZXJuZWwvc21wYm9vdC5jLCBtYWlubHkgdG8gY2F0ZXIgdG8gdmlzd3MKKyAqIHdoaWNoIG5lZWRzIHRvIGFsdGVyIHRoZW0uICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X2NsZWFyX2lvX2FwaWNfaXJxcyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCWlvX2FwaWNfaXJxcyA9IDA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3Rfc2V0dXBfd2FybV9yZXNldF92ZWN0b3IodW5zaWduZWQgbG9uZyBzdGFydF9laXApCit7CisJQ01PU19XUklURSgweGEsIDB4Zik7CisJbG9jYWxfZmx1c2hfdGxiKCk7CisJcHJfZGVidWcoIjEuXG4iKTsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChhcGljLT50cmFtcG9saW5lX3BoeXNfaGlnaCkpID0KKwkJCQkJCQkJIHN0YXJ0X2VpcCA+PiA0OworCXByX2RlYnVnKCIyLlxuIik7CisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0KKwkJCQkJCQkgc3RhcnRfZWlwICYgMHhmOworCXByX2RlYnVnKCIzLlxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3Jlc3RvcmVfd2FybV9yZXNldF92ZWN0b3Iodm9pZCkKK3sKKwkvKgorCSAqIEluc3RhbGwgd3JpdGFibGUgcGFnZSAwIGVudHJ5IHRvIHNldCBCSU9TIGRhdGEgYXJlYS4KKwkgKi8KKwlsb2NhbF9mbHVzaF90bGIoKTsKKworCS8qCisJICogUGFyYW5vaWQ6ICBTZXQgd2FybSByZXNldCBjb2RlIGFuZCB2ZWN0b3IgaGVyZSBiYWNrCisJICogdG8gZGVmYXVsdCB2YWx1ZXMuCisJICovCisJQ01PU19XUklURSgwLCAweGYpOworCisJKigodm9sYXRpbGUgbG9uZyAqKXBoeXNfdG9fdmlydChhcGljLT50cmFtcG9saW5lX3BoeXNfbG93KSkgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNtcGJvb3Rfc2V0dXBfaW9fYXBpYyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCS8qCisJICogSGVyZSB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoZXJlIGlzIGFuIElPLUFQSUMgaW4gdGhlIHN5c3RlbS4gTGV0J3MKKwkgKiBnbyBhbmQgc2V0IGl0IHVwOgorCSAqLworCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKKwkJc2V0dXBfSU9fQVBJQygpOworCWVsc2UgeworCQlucl9pb2FwaWNzID0gMDsKKwkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X2NsZWFyX2lvX2FwaWModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlucl9pb2FwaWNzID0gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA4YWI5Y2M4Li5jYThiZjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fWDg2X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA4MjQ3ZTk0Li4zYTU2OTY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE3Miw3MCArMTcyLDggQEAKIAlyZXR1cm4gKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgLSB0bXApICYgKCgxIDw8IFRJQ0tFVF9TSElGVCkgLSAxKSkgPiAxOwogfQogCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0vKgotICogRGVmaW5lIHZpcnR1YWxpemF0aW9uLWZyaWVuZGx5IG9sZC1zdHlsZSBsb2NrIGJ5dGUgbG9jaywgZm9yIHVzZSBpbgotICogcHZfbG9ja19vcHMgaWYgZGVzaXJlZC4KLSAqCi0gKiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgcHJlLTIuNi4yNCBzcGlubG9jayBieSBhbHdheXMgdXNpbmcgeGNoZ2IKLSAqIHJhdGhlciB0aGFuIGRlY2IgdG8gdGFrZSB0aGUgbG9jazsgdGhpcyBhbGxvd3MgaXQgdG8gdXNlIGEKLSAqIHplcm8taW5pdGlhbGl6ZWQgbG9jayBzdHJ1Y3R1cmUuICBJdCBhbHNvIG1haW50YWlucyBhIDEtYnl0ZQotICogY29udGVudGlvbiBjb3VudGVyLCBzbyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQKLSAqIF9fYnl0ZV9zcGluX2lzX2NvbnRlbmRlZC4KLSAqLwotc3RydWN0IF9fYnl0ZV9zcGlubG9jayB7Ci0JczggbG9jazsKLQlzOCBzcGlubmVyczsKLX07CisjaWZuZGVmIENPTkZJR19QQVJBVklSVAogCi1zdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0Jc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqYmwgPSAoc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqKWxvY2s7Ci0JcmV0dXJuIGJsLT5sb2NrICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fYnl0ZV9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKLQlyZXR1cm4gYmwtPnNwaW5uZXJzICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2J5dGVfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXM4IHZhbCA9IDE7Ci0KLQlhc20oIjE6IHhjaGdiICUxLCAlMFxuIgotCSAgICAiICAgdGVzdCAlMSwlMVxuIgotCSAgICAiICAganogM2ZcbiIKLQkgICAgIiAgICIgTE9DS19QUkVGSVggImluY2IgJTJcbiIKLQkgICAgIjI6IHJlcDtub3BcbiIKLQkgICAgIiAgIGNtcGIgJDEsICUwXG4iCi0JICAgICIgICBqZSAyYlxuIgotCSAgICAiICAgIiBMT0NLX1BSRUZJWCAiZGVjYiAlMlxuIgotCSAgICAiICAgam1wIDFiXG4iCi0JICAgICIzOiIKLQkgICAgOiAiK20iIChibC0+bG9jayksICIrcSIgKHZhbCksICIrbSIgKGJsLT5zcGlubmVycyk6IDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXU4IG9sZCA9IDE7Ci0KLQlhc20oInhjaGdiICUxLCUwIgotCSAgICA6ICIrbSIgKGJsLT5sb2NrKSwgIitxIiAob2xkKSA6IDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIG9sZCA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19ieXRlX3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXNtcF93bWIoKTsKLQlibC0+bG9jayA9IDA7Ci19Ci0jZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLwogc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKGxvY2spOwpAQCAtMjY4LDcgKzIwNiw3IEBACiAJX19yYXdfc3Bpbl9sb2NrKGxvY2spOwogfQogCi0jZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CkBAIC0zMzAsOCArMjY4LDcgQEAKIHsKIAlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOwogCi0JYXRvbWljX2RlYyhjb3VudCk7Ci0JaWYgKGF0b21pY19yZWFkKGNvdW50KSA+PSAwKQorCWlmIChhdG9taWNfZGVjX3JldHVybihjb3VudCkgPj0gMCkKIAkJcmV0dXJuIDE7CiAJYXRvbWljX2luYyhjb3VudCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ3NDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIEdDQyBzdGFjayBwcm90ZWN0b3Igc3VwcG9ydC4KKyAqCisgKiBTdGFjayBwcm90ZWN0b3Igd29ya3MgYnkgcHV0dGluZyBwcmVkZWZpbmVkIHBhdHRlcm4gYXQgdGhlIHN0YXJ0IG9mCisgKiB0aGUgc3RhY2sgZnJhbWUgYW5kIHZlcmlmeWluZyB0aGF0IGl0IGhhc24ndCBiZWVuIG92ZXJ3cml0dGVuIHdoZW4KKyAqIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbi4gIFRoZSBwYXR0ZXJuIGlzIGNhbGxlZCBzdGFjayBjYW5hcnkKKyAqIGFuZCB1bmZvcnR1bmF0ZWx5IGdjYyByZXF1aXJlcyBpdCB0byBiZSBhdCBhIGZpeGVkIG9mZnNldCBmcm9tICVncy4KKyAqIE9uIHg4Nl82NCwgdGhlIG9mZnNldCBpcyA0MCBieXRlcyBhbmQgb24geDg2XzMyIDIwIGJ5dGVzLiAgeDg2XzY0CisgKiBhbmQgeDg2XzMyIHVzZSBzZWdtZW50IHJlZ2lzdGVycyBkaWZmZXJlbnRseSBhbmQgdGh1cyBoYW5kbGVzIHRoaXMKKyAqIHJlcXVpcmVtZW50IGRpZmZlcmVudGx5LgorICoKKyAqIE9uIHg4Nl82NCwgJWdzIGlzIHNoYXJlZCBieSBwZXJjcHUgYXJlYSBhbmQgc3RhY2sgY2FuYXJ5LiAgQWxsCisgKiBwZXJjcHUgc3ltYm9scyBhcmUgemVybyBiYXNlZCBhbmQgJWdzIHBvaW50cyB0byB0aGUgYmFzZSBvZiBwZXJjcHUKKyAqIGFyZWEuICBUaGUgZmlyc3Qgb2NjdXBhbnQgb2YgdGhlIHBlcmNwdSBhcmVhIGlzIGFsd2F5cworICogaXJxX3N0YWNrX3VuaW9uIHdoaWNoIGNvbnRhaW5zIHN0YWNrX2NhbmFyeSBhdCBvZmZzZXQgNDAuICBVc2VybGFuZAorICogJWdzIGlzIGFsd2F5cyBzYXZlZCBhbmQgcmVzdG9yZWQgb24ga2VybmVsIGVudHJ5IGFuZCBleGl0IHVzaW5nCisgKiBzd2FwZ3MsIHNvIHN0YWNrIHByb3RlY3RvciBkb2Vzbid0IGFkZCBhbnkgY29tcGxleGl0eSB0aGVyZS4KKyAqCisgKiBPbiB4ODZfMzIsIGl0J3Mgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZC4gIEFzIGluIHg4Nl82NCwgJWdzIGlzCisgKiB1c2VkIGZvciB1c2VybGFuZCBUTFMuICBVbmZvcnR1bmF0ZWx5LCBzb21lIHByb2Nlc3NvcnMgYXJlIG11Y2gKKyAqIHNsb3dlciBhdCBsb2FkaW5nIHNlZ21lbnQgcmVnaXN0ZXJzIHdpdGggZGlmZmVyZW50IHZhbHVlIHdoZW4KKyAqIGVudGVyaW5nIGFuZCBsZWF2aW5nIHRoZSBrZXJuZWwsIHNvIHRoZSBrZXJuZWwgdXNlcyAlZnMgZm9yIHBlcmNwdQorICogYXJlYSBhbmQgbWFuYWdlcyAlZ3MgbGF6aWx5IHNvIHRoYXQgJWdzIGlzIHN3aXRjaGVkIG9ubHkgd2hlbgorICogbmVjZXNzYXJ5LCB1c3VhbGx5IGR1cmluZyB0YXNrIHN3aXRjaC4KKyAqCisgKiBBcyBnY2MgcmVxdWlyZXMgdGhlIHN0YWNrIGNhbmFyeSBhdCAlZ3M6MjAsICVncyBjYW4ndCBiZSBtYW5hZ2VkCisgKiBsYXppbHkgaWYgc3RhY2sgcHJvdGVjdG9yIGlzIGVuYWJsZWQsIHNvIHRoZSBrZXJuZWwgc2F2ZXMgYW5kCisgKiByZXN0b3JlcyB1c2VybGFuZCAlZ3Mgb24ga2VybmVsIGVudHJ5IGFuZCBleGl0LiAgVGhpcyBiZWhhdmlvciBpcworICogY29udHJvbGxlZCBieSBDT05GSUdfWDg2XzMyX0xBWllfR1MgYW5kIGFjY2Vzc29ycyBhcmUgZGVmaW5lZCBpbgorICogc3lzdGVtLmggdG8gaGlkZSB0aGUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fU1RBQ0tQUk9URUNUT1JfSAorI2RlZmluZSBfQVNNX1NUQUNLUFJPVEVDVE9SX0ggMQorCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisKKyNpbmNsdWRlIDxhc20vdHNjLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworLyoKKyAqIDI0IGJ5dGUgcmVhZC1vbmx5IHNlZ21lbnQgaW5pdGlhbGl6ZXIgZm9yIHN0YWNrIGNhbmFyeS4gIExpbmtlcgorICogY2FuJ3QgaGFuZGxlIHRoZSBhZGRyZXNzIGJpdCBzaGlmdGluZy4gIEFkZHJlc3Mgd2lsbCBiZSBzZXQgaW4KKyAqIGhlYWRfMzIgZm9yIGJvb3QgQ1BVIGFuZCBzZXR1cF9wZXJfY3B1X2FyZWFzKCkgZm9yIG90aGVycy4KKyAqLworI2RlZmluZSBHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQJCQkJCQlcCisJW0dEVF9FTlRSWV9TVEFDS19DQU5BUlldID0geyB7IHsgMHgwMDAwMDAxOCwgMHgwMDQwOTAwMCB9IH0gfSwKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHN0YWNrcHJvdGVjdG9yIGNhbmFyeSB2YWx1ZS4KKyAqCisgKiBOT1RFOiB0aGlzIG11c3Qgb25seSBiZSBjYWxsZWQgZnJvbSBmdW5jdGlvbnMgdGhhdCBuZXZlciByZXR1cm4sCisgKiBhbmQgaXQgbXVzdCBhbHdheXMgYmUgaW5saW5lZC4KKyAqLworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJvb3RfaW5pdF9zdGFja19jYW5hcnkodm9pZCkKK3sKKwl1NjQgY2FuYXJ5OworCXU2NCB0c2M7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJQlVJTERfQlVHX09OKG9mZnNldG9mKHVuaW9uIGlycV9zdGFja191bmlvbiwgc3RhY2tfY2FuYXJ5KSAhPSA0MCk7CisjZW5kaWYKKwkvKgorCSAqIFdlIGJvdGggdXNlIHRoZSByYW5kb20gcG9vbCBhbmQgdGhlIGN1cnJlbnQgVFNDIGFzIGEgc291cmNlCisJICogb2YgcmFuZG9tbmVzcy4gVGhlIFRTQyBvbmx5IG1hdHRlcnMgZm9yIHZlcnkgZWFybHkgaW5pdCwKKwkgKiB0aGVyZSBpdCBhbHJlYWR5IGhhcyBzb21lIHJhbmRvbW5lc3Mgb24gbW9zdCBzeXN0ZW1zLiBMYXRlcgorCSAqIG9uIGR1cmluZyB0aGUgYm9vdHVwIHRoZSByYW5kb20gcG9vbCBoYXMgdHJ1ZSBlbnRyb3B5IHRvby4KKwkgKi8KKwlnZXRfcmFuZG9tX2J5dGVzKCZjYW5hcnksIHNpemVvZihjYW5hcnkpKTsKKwl0c2MgPSBfX25hdGl2ZV9yZWFkX3RzYygpOworCWNhbmFyeSArPSB0c2MgKyAodHNjIDw8IDMyVUwpOworCisJY3VycmVudC0+c3RhY2tfY2FuYXJ5ID0gY2FuYXJ5OworI2lmZGVmIENPTkZJR19YODZfNjQKKwlwZXJjcHVfd3JpdGUoaXJxX3N0YWNrX3VuaW9uLnN0YWNrX2NhbmFyeSwgY2FuYXJ5KTsKKyNlbHNlCisJcGVyY3B1X3dyaXRlKHN0YWNrX2NhbmFyeSwgY2FuYXJ5KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfc3RhY2tfY2FuYXJ5X3NlZ21lbnQoaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJdW5zaWduZWQgbG9uZyBjYW5hcnkgPSAodW5zaWduZWQgbG9uZykmcGVyX2NwdShzdGFja19jYW5hcnksIGNwdSkgLSAyMDsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdF90YWJsZSA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CisJc3RydWN0IGRlc2Nfc3RydWN0IGRlc2M7CisKKwlkZXNjID0gZ2R0X3RhYmxlW0dEVF9FTlRSWV9TVEFDS19DQU5BUlldOworCWRlc2MuYmFzZTAgPSBjYW5hcnkgJiAweGZmZmY7CisJZGVzYy5iYXNlMSA9IChjYW5hcnkgPj4gMTYpICYgMHhmZjsKKwlkZXNjLmJhc2UyID0gKGNhbmFyeSA+PiAyNCkgJiAweGZmOworCXdyaXRlX2dkdF9lbnRyeShnZHRfdGFibGUsIEdEVF9FTlRSWV9TVEFDS19DQU5BUlksICZkZXNjLCBERVNDVFlQRV9TKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9zdGFja19jYW5hcnlfc2VnbWVudCh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlhc20oIm1vdiAlMCwgJSVncyIgOiA6ICJyIiAoX19LRVJORUxfU1RBQ0tfQ0FOQVJZKSA6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisjZWxzZQkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLworCisjZGVmaW5lIEdEVF9TVEFDS19DQU5BUllfSU5JVAorCisvKiBkdW1teSBib290X2luaXRfc3RhY2tfY2FuYXJ5KCkgaXMgZGVmaW5lZCBpbiBsaW51eC9zdGFja3Byb3RlY3Rvci5oICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zdGFja19jYW5hcnlfc2VnbWVudChpbnQgY3B1KQoreyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX3N0YWNrX2NhbmFyeV9zZWdtZW50KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVncyIgOiA6ICJyIiAoMCkpOworI2VuZGlmCit9CisKKyNlbmRpZgkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLworI2VuZGlmCS8qIF9BU01fU1RBQ0tQUk9URUNUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZDJjODYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NVTU1JVF9BUElDX0gKLSNkZWZpbmUgX19BU01fU1VNTUlUX0FQSUNfSAotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotCi0jZGVmaW5lIGVzcl9kaXNhYmxlICgxKQotI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoMCkKLQotLyogSW4gY2x1c3RlcmVkIG1vZGUsIHRoZSBoaWdoIG5pYmJsZSBvZiBBUElDIElEIGlzIGEgY2x1c3RlciBudW1iZXIuCi0gKiBUaGUgbG93IG5pYmJsZSBpcyBhIDQtYml0IGJpdG1hcC4gKi8KLSNkZWZpbmUgWEFQSUNfREVTVF9DUFVTX1NISUZUCTQKLSNkZWZpbmUgWEFQSUNfREVTVF9DUFVTX01BU0sJKCgxdSA8PCBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpIC0gMSkKLSNkZWZpbmUgWEFQSUNfREVTVF9DTFVTVEVSX01BU0sJKFhBUElDX0RFU1RfQ1BVU19NQVNLIDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkKLQotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKLQotc3RhdGljIGlubGluZSBjb25zdCBjcHVtYXNrX3QgKnRhcmdldF9jcHVzKHZvaWQpCi17Ci0JLyogQ1BVX01BU0tfQUxMICgweGZmKSBoYXMgdW5kZWZpbmVkIGJlaGF2aW91ciB3aXRoCi0JICogZGVzdF9Mb3dlc3RQcmlvIG1vZGUgbG9naWNhbCBjbHVzdGVyZWQgYXBpYyBpbnRlcnJ1cHQgcm91dGluZwotCSAqIEp1c3Qgc3RhcnQgb24gY3B1IDAuICBJUlEgYmFsYW5jaW5nIHdpbGwgc3ByZWFkIGxvYWQKLQkgKi8KLQlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KDApOwotfQotCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChkZXN0X0xvd2VzdFByaW8pCi0jZGVmaW5lIElOVF9ERVNUX01PREUgMSAgICAgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogd2UgZG9uJ3QgdXNlIHRoZSBwaHlzX2NwdV9wcmVzZW50X21hcCB0byBpbmRpY2F0ZSBhcGljaWQgcHJlc2VuY2UgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KQotewotCXJldHVybiAxOwotfQotCi0jZGVmaW5lIGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgKChhcGljaWQpICYgWEFQSUNfREVTVF9DTFVTVEVSX01BU0spCi0KLWV4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBpZDsKLQlpbnQgY291bnQgPSAwOwotCXU4IG15X2lkID0gKHU4KWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXU4IG15X2NsdXN0ZXIgPSAodTgpYXBpY2lkX2NsdXN0ZXIobXlfaWQpOwotI2lmZGVmIENPTkZJR19TTVAKLQl1OCBsaWQ7Ci0JaW50IGk7Ci0KLQkvKiBDcmVhdGUgbG9naWNhbCBBUElDIElEcyBieSBjb3VudGluZyBDUFVzIGFscmVhZHkgaW4gY2x1c3Rlci4gKi8KLQlmb3IgKGNvdW50ID0gMCwgaSA9IG5yX2NwdV9pZHM7IC0taSA+PSAwOyApIHsKLQkJbGlkID0gY3B1XzJfbG9naWNhbF9hcGljaWRbaV07Ci0JCWlmIChsaWQgIT0gQkFEX0FQSUNJRCAmJiBhcGljaWRfY2x1c3RlcihsaWQpID09IG15X2NsdXN0ZXIpCi0JCQkrK2NvdW50OwotCX0KLSNlbmRpZgotCS8qIFdlIG9ubHkgaGF2ZSBhIDQgd2lkZSBiaXRtYXAgaW4gY2x1c3RlciBtb2RlLiAgSWYgYSBkZXJhbmdlZAotCSAqIEJJT1MgcHV0cyA1IENQVXMgaW4gb25lIEFQSUMgY2x1c3Rlciwgd2UncmUgaG9zZWQuICovCi0JQlVHX09OKGNvdW50ID49IFhBUElDX0RFU1RfQ1BVU19TSElGVCk7Ci0JaWQgPSBteV9jbHVzdGVyIHwgKDFVTCA8PCBjb3VudCk7Ci0JYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOwotCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKLQl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXVsdGlfdGltZXJfY2hlY2soaW50IGFwaWMsIGludCBpcnEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCi17Ci0JcHJpbnRrKCJFbmFibGluZyBBUElDIG1vZGU6ICBTdW1taXQuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCQkJCQlucl9pb2FwaWNzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KLS8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQlyZXR1cm4gKGludCljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdOwotI2Vsc2UKLQlyZXR1cm4gbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmIChtcHNfY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIChpbnQpcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19pZF9tYXApCi17Ci0JLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCi0JcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweDBGKTsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGFwaWNpZF90b19jcHVfcHJlc2VudChpbnQgYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQotewotCWludCBudW1fYml0c19zZXQ7Ci0JaW50IGNwdXNfZm91bmQgPSAwOwotCWludCBjcHU7Ci0JaW50IGFwaWNpZDsKLQotCW51bV9iaXRzX3NldCA9IGNwdXNfd2VpZ2h0KCpjcHVtYXNrKTsKLQkvKiBSZXR1cm4gaWQgdG8gYWxsICovCi0JaWYgKG51bV9iaXRzX3NldCA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gKGludCkgMHhGRjsKLQkvKgotCSAqIFRoZSBjcHVzIGluIHRoZSBtYXNrIG11c3QgYWxsIGJlIG9uIHRoZSBhcGljIGNsdXN0ZXIuICBJZiBhcmUgbm90Ci0JICogb24gdGhlIHNhbWUgYXBpY2lkIGNsdXN0ZXIgcmV0dXJuIGRlZmF1bHQgdmFsdWUgb2YgVEFSR0VUX0NQVVMuCi0JICovCi0JY3B1ID0gZmlyc3RfY3B1KCpjcHVtYXNrKTsKLQlhcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKLQl3aGlsZSAoY3B1c19mb3VuZCA8IG51bV9iaXRzX3NldCkgewotCQlpZiAoY3B1X2lzc2V0KGNwdSwgKmNwdW1hc2spKSB7Ci0JCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0KLQkJCQkJYXBpY2lkX2NsdXN0ZXIobmV3X2FwaWNpZCkpewotCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIiwgX19mdW5jX18pOwotCQkJCXJldHVybiAweEZGOwotCQkJfQotCQkJYXBpY2lkID0gYXBpY2lkIHwgbmV3X2FwaWNpZDsKLQkJCWNwdXNfZm91bmQrKzsKLQkJfQotCQljcHUrKzsKLQl9Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqaW5tYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlpbnQgYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOwotCWNwdW1hc2tfdmFyX3QgY3B1bWFzazsKLQotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmNwdW1hc2ssIEdGUF9BVE9NSUMpKQotCQlyZXR1cm4gYXBpY2lkOwotCi0JY3B1bWFza19hbmQoY3B1bWFzaywgaW5tYXNrLCBhbmRtYXNrKTsKLQljcHVtYXNrX2FuZChjcHVtYXNrLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwotCWFwaWNpZCA9IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrKTsKLQotCWZyZWVfY3B1bWFza192YXIoY3B1bWFzayk7Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotLyogY3B1aWQgcmV0dXJucyB0aGUgdmFsdWUgbGF0Y2hlZCBpbiB0aGUgSFcgYXQgcmVzZXQsIG5vdCB0aGUgQVBJQyBJRAotICogcmVnaXN0ZXIncyB2YWx1ZS4gIEZvciBhbnkgYm94IHdob3NlIEJJT1MgY2hhbmdlcyBBUElDIElEcywgbGlrZQotICogY2x1c3RlcmVkIEFQSUMgc3lzdGVtcywgd2UgbXVzdCB1c2UgaGFyZF9zbXBfcHJvY2Vzc29yX2lkLgotICoKLSAqIFNlZSBJbnRlbCdzIElBLTMyIFNXIERldidzIE1hbnVhbCBWb2wyIHVuZGVyIENQVUlELgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBwaHlzX3BrZ19pZCh1MzIgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fU1VNTUlUX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZmJjYTEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2FwaWNkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNpZm5kZWYgX19BU01fU1VNTUlUX0FQSUNERUZfSAotI2RlZmluZSBfX0FTTV9TVU1NSVRfQVBJQ0RFRl9ICi0KLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4RkY8PDI0KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlyZXR1cm4gKHg+PjI0KSYweEZGOwotfQotCi0jZGVmaW5lCQlHRVRfQVBJQ19JRCh4KQlnZXRfYXBpY19pZCh4KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9pcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhMmMyNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvaXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NVTU1JVF9JUElfSAotI2RlZmluZSBfX0FTTV9TVU1NSVRfSVBJX0gKLQotdm9pZCBzZW5kX0lQSV9tYXNrX3NlcXVlbmNlKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBjcHVtYXNrX3QgKm1hc2ssIGludCB2ZWN0b3IpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFzayhjb25zdCBjcHVtYXNrX3QgKm1hc2ssIGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFza19zZXF1ZW5jZShtYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0KLQlpZiAoIWNwdXNfZW1wdHkobWFzaykpCi0JCXNlbmRfSVBJX21hc2soJm1hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrKCZjcHVfb25saW5lX21hcCwgdmVjdG9yKTsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX1NVTU1JVF9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L21wcGFyc2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9tcHBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MGU4NmMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L21wcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NVTU1JVF9NUFBBUlNFX0gKLSNkZWZpbmUgX19BU01fU1VNTUlUX01QUEFSU0VfSAotCi0jaW5jbHVkZSA8YXNtL3RzYy5oPgotCi1leHRlcm4gaW50IHVzZV9jeWNsb25lOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVRfTlVNQQotZXh0ZXJuIHZvaWQgc2V0dXBfc3VtbWl0KHZvaWQpOwotI2Vsc2UKLSNkZWZpbmUgc2V0dXBfc3VtbWl0KCkJe30KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLAotCQljaGFyICpwcm9kdWN0aWQpCi17Ci0JaWYgKCFzdHJuY21wKG9lbSwgIklCTSBFTlNXIiwgOCkgJiYKLQkJCSghc3RybmNtcChwcm9kdWN0aWQsICJWSUdJTCBTTVAiLCA5KQotCQkJIHx8ICFzdHJuY21wKHByb2R1Y3RpZCwgIkVYQSIsIDMpCi0JCQkgfHwgIXN0cm5jbXAocHJvZHVjdGlkLCAiUlVUSExFU1MgU01QIiwgMTIpKSl7Ci0JCW1hcmtfdHNjX3Vuc3RhYmxlKCJTdW1taXQgYmFzZWQgc3lzdGVtIik7Ci0JCXVzZV9jeWNsb25lID0gMTsgLyplbmFibGUgY3ljbG9uZS10aW1lciovCi0JCXNldHVwX3N1bW1pdCgpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JaWYgKCFzdHJuY21wKG9lbV9pZCwgIklCTSIsIDMpICYmCi0JICAgICghc3RybmNtcChvZW1fdGFibGVfaWQsICJTRVJWSUdJTCIsIDgpCi0JICAgICB8fCAhc3RybmNtcChvZW1fdGFibGVfaWQsICJFWEEiLCAzKSkpewotCQltYXJrX3RzY191bnN0YWJsZSgiU3VtbWl0IGJhc2VkIHN5c3RlbSIpOwotCQl1c2VfY3ljbG9uZSA9IDE7IC8qZW5hYmxlIGN5Y2xvbmUtdGltZXIqLwotCQlzZXR1cF9zdW1taXQoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgcmlvX3RhYmxlX2hkciB7Ci0JdW5zaWduZWQgY2hhciB2ZXJzaW9uOyAgICAgIC8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICAgICAgICAgICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gMyBhZGRzIGNoYXNzaXNfbnVtICYgV1BfaW5kZXggICAgICAgICAgICovCi0JdW5zaWduZWQgY2hhciBudW1fc2NhbF9kZXY7IC8qICMgb2YgU2NhbGFiaWxpdHkgZGV2aWNlcyAoVHdpc3RlcnMgZm9yIFZpZ2lsKSAgICovCi0JdW5zaWduZWQgY2hhciBudW1fcmlvX2RldjsgIC8qICMgb2YgUklPIEkvTyBkZXZpY2VzIChDeWNsb25lcyBhbmQgV2lubmlwZWdzKSAgICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc2NhbF9kZXRhaWwgewotCXVuc2lnbmVkIGNoYXIgbm9kZV9pZDsgICAgICAvKiBTY2FsYWJpbGl0eSBOb2RlIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcgQ0JBUjsgICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDBwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGID0gTm9uZSAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDFwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDJub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGID0gTm9uZSAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDJwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLwotCXVuc2lnbmVkIGNoYXIgY2hhc3Npc19udW07ICAvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICgxID0gYm9vdCBub2RlKSAgICAgICAgICAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IHJpb19kZXRhaWwgewotCXVuc2lnbmVkIGNoYXIgbm9kZV9pZDsgICAgICAvKiBSSU8gTm9kZSBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcgQkJBUjsgICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgdHlwZTsgICAgICAgICAvKiBUeXBlIG9mIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgb3duZXJfaWQ7ICAgICAvKiBGb3IgV1BFRzogTm9kZSBJRCBvZiBDeWNsb25lIHRoYXQgb3ducyB0aGlzIFdQRUcqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgTm9kZSBJRCBvZiBUd2lzdGVyIHRoYXQgb3ducyB0aGlzIENZQyAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDBwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgcG9ydDFwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLwotCXVuc2lnbmVkIGNoYXIgZmlyc3Rfc2xvdDsgICAvKiBGb3IgV1BFRzogTG93ZXN0IHNsb3QgbnVtYmVyIGJlbG93IHRoaXMgV1BFRyAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgc3RhdHVzOyAgICAgICAvKiBGb3IgV1BFRzogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgPSAwIDogdGhlIFhBUElDIGlzIG5vdCB1c2VkLCBpZToqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgIGludHMgZndkZWQgdG8gYW5vdGhlciBYQVBJQyAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgQml0czE6NyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgQml0czA6NyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgV1BfaW5kZXg7ICAgICAvKiBGb3IgV1BFRzogV1BFRyBpbnN0YW5jZSBpbmRleCAtIGxvd2VyIG9uZXMgaGF2ZSAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgbG93ZXIgc2xvdCBudW1iZXJzL1BDSSBidXMgbnVtYmVycyAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgTm8gbWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgY2hhc3Npc19udW07ICAvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgTG9va091dCBXUEVHcyB0aGlzIGZpZWxkIGluZGljYXRlcyB0aGUgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBhbnNpb24gQ2hhc3NpcyAjLCBlbnVtZXJhdGVkIGZyb20gQm9vdCAgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb2RlIFdQRUcgZXh0ZXJuYWwgcG9ydCwgdGhlbiBCb290IE5vZGUgQ1lDICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlcm5hbCBwb3J0LCB0aGVuIE5leHQgVmlnaWwgY2hhc3NpcyBXUEVHICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlcm5hbCBwb3J0LCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGFyZWQgTG9va291dHMgaGF2ZSBvbmx5IDEgY2hhc3NpcyBudW1iZXIgKHRoZSAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBvbmUgYXNzaWduZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotCi10eXBlZGVmIGVudW0gewotCUNvbXBhdFR3aXN0ZXIgPSAwLCAgLyogQ29tcGF0aWJpbGl0eSBUd2lzdGVyICAgICAgICAgICAgICAgKi8KLQlBbHRUd2lzdGVyICAgID0gMSwgIC8qIEFsdGVybmF0ZSBUd2lzdGVyIG9mIGludGVybmFsIDgtd2F5ICovCi0JQ29tcGF0Q3ljbG9uZSA9IDIsICAvKiBDb21wYXRpYmlsaXR5IEN5Y2xvbmUgICAgICAgICAgICAgICAqLwotCUFsdEN5Y2xvbmUgICAgPSAzLCAgLyogQWx0ZXJuYXRlIEN5Y2xvbmUgb2YgaW50ZXJuYWwgOC13YXkgKi8KLQlDb21wYXRXUEVHICAgID0gNCwgIC8qIENvbXBhdGliaWxpdHkgV1BFRyAgICAgICAgICAgICAgICAgICovCi0JQWx0V1BFRyAgICAgICA9IDUsICAvKiBTZWNvbmQgUGxhbmFyIFdQRUcgICAgICAgICAgICAgICAgICAqLwotCUxvb2tPdXRBV1BFRyAgPSA2LCAgLyogTG9va091dCBXUEVHICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlMb29rT3V0QldQRUcgID0gNywgIC8qIExvb2tPdXQgV1BFRyAgICAgICAgICAgICAgICAgICAgICAgICovCi19IG5vZGVfdHlwZTsKLQotc3RhdGljIGlubGluZSBpbnQgaXNfV1BFRyhzdHJ1Y3QgcmlvX2RldGFpbCAqcmlvKXsKLQlyZXR1cm4gKHJpby0+dHlwZSA9PSBDb21wYXRXUEVHIHx8IHJpby0+dHlwZSA9PSBBbHRXUEVHIHx8Ci0JCXJpby0+dHlwZSA9PSBMb29rT3V0QVdQRUcgfHwgcmlvLT50eXBlID09IExvb2tPdXRCV1BFRyk7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9TVU1NSVRfTVBQQVJTRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCmluZGV4IDFiOGFmYTcuLjgyYWRhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0xNzQsMTAgKzE3NCw2IEBACiAjZGVmaW5lIFNWTV9DUFVJRF9GRUFUVVJFX1NISUZUIDIKICNkZWZpbmUgU1ZNX0NQVUlEX0ZVTkMgMHg4MDAwMDAwYQogCi0jZGVmaW5lIE1TUl9FRkVSX1NWTUVfTUFTSyAoMVVMTCA8PCAxMikKLSNkZWZpbmUgTVNSX1ZNX0NSICAgICAgIDB4YzAwMTAxMTQKLSNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBIDB4YzAwMTAxMTdVTEwKLQogI2RlZmluZSBTVk1fVk1fQ1JfU1ZNX0RJU0FCTEUgNAogCiAjZGVmaW5lIFNWTV9TRUxFQ1RPUl9TX1NISUZUIDQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCmluZGV4IGZmYjA4YmUuLjcyYTZkY2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzX2lhMzIuaApAQCAtNzAsOCArNzAsNiBAQAogYXNtbGlua2FnZSBsb25nIHN5czMyX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiBsb25nIHN5czMyX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiAKLWxvbmcgc3lzMzJfdXN0YXQodW5zaWduZWQsIHN0cnVjdCB1c3RhdDMyIF9fdXNlciAqKTsKLQogYXNtbGlua2FnZSBsb25nIHN5czMyX2V4ZWN2ZShjaGFyIF9fdXNlciAqLCBjb21wYXRfdXB0cl90IF9fdXNlciAqLAogCQkJICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9jbG9uZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAppbmRleCBjMGIwYmRhLi43MDQzNDA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTI5LDIxICsyOSwyMSBAQAogLyogWDg2XzMyIG9ubHkgKi8KICNpZmRlZiBDT05GSUdfWDg2XzMyCiAvKiBrZXJuZWwvcHJvY2Vzc18zMi5jICovCi1hc21saW5rYWdlIGludCBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyk7Ci1hc21saW5rYWdlIGludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MpOwotYXNtbGlua2FnZSBpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzKTsKLWFzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MpOworaW50IHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzICopOworaW50IHN5c19jbG9uZShzdHJ1Y3QgcHRfcmVncyAqKTsKK2ludCBzeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgKik7CitpbnQgc3lzX2V4ZWN2ZShzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL3NpZ25hbF8zMi5jICovCiBhc21saW5rYWdlIGludCBzeXNfc2lnc3VzcGVuZChpbnQsIGludCwgb2xkX3NpZ3NldF90KTsKIGFzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50LCBjb25zdCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKiwKIAkJCSAgICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICopOwotYXNtbGlua2FnZSBpbnQgc3lzX3NpZ2FsdHN0YWNrKHVuc2lnbmVkIGxvbmcpOwotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19zaWdyZXR1cm4odW5zaWduZWQgbG9uZyk7Ci1hc21saW5rYWdlIGludCBzeXNfcnRfc2lncmV0dXJuKHVuc2lnbmVkIGxvbmcpOworaW50IHN5c19zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqKTsKK3Vuc2lnbmVkIGxvbmcgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqKTsKK2xvbmcgc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL2lvcG9ydC5jICovCi1hc21saW5rYWdlIGxvbmcgc3lzX2lvcGwodW5zaWduZWQgbG9uZyk7Citsb25nIHN5c19pb3BsKHN0cnVjdCBwdF9yZWdzICopOwogCiAvKiBrZXJuZWwvc3lzX2kzODZfMzIuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLApAQCAtNTksOCArNTksOCBAQAogYXNtbGlua2FnZSBpbnQgc3lzX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiAKIC8qIGtlcm5lbC92bTg2XzMyLmMgKi8KLWFzbWxpbmthZ2UgaW50IHN5c192bTg2b2xkKHN0cnVjdCBwdF9yZWdzKTsKLWFzbWxpbmthZ2UgaW50IHN5c192bTg2KHN0cnVjdCBwdF9yZWdzKTsKK2ludCBzeXNfdm04Nm9sZChzdHJ1Y3QgcHRfcmVncyAqKTsKK2ludCBzeXNfdm04NihzdHJ1Y3QgcHRfcmVncyAqKTsKIAogI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwogCkBAIC03NCw2ICs3NCw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLAogCQkJICAgY2hhciBfX3VzZXIgKiBfX3VzZXIgKiwKIAkJCSAgIHN0cnVjdCBwdF9yZWdzICopOworbG9uZyBzeXNfYXJjaF9wcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBrZXJuZWwvaW9wb3J0LmMgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICopOwpAQCAtODEsNyArODIsNyBAQAogLyoga2VybmVsL3NpZ25hbF82NC5jICovCiBhc21saW5rYWdlIGxvbmcgc3lzX3NpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QgX191c2VyICosIHN0YWNrX3QgX191c2VyICosCiAJCQkJc3RydWN0IHB0X3JlZ3MgKik7Ci1hc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqKTsKK2xvbmcgc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL3N5c194ODZfNjQuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5c19tbWFwKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDhlNjI2ZWEuLjY0M2M1OWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0yMCw5ICsyMCwyNiBAQAogc3RydWN0IHRhc2tfc3RydWN0OyAvKiBvbmUgb2YgdGhlIHN0cmFuZ2VyIGFzcGVjdHMgb2YgQyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwogc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKK3N0cnVjdCB0c3Nfc3RydWN0Owordm9pZCBfX3N3aXRjaF90b194dHJhKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldl9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfcCwKKwkJICAgICAgc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAKKyNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5CQkJCQkJCVwKKwkibW92bCAlUFt0YXNrX2NhbmFyeV0oJVtuZXh0XSksICUlZWJ4XG5cdCIJCQlcCisJIm1vdmwgJSVlYngsICJfX3BlcmNwdV9hcmcoW3N0YWNrX2NhbmFyeV0pIlxuXHQiCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0JCQkJCQlcCisJLCBbc3RhY2tfY2FuYXJ5XSAiPW0iIChwZXJfY3B1X3ZhcihzdGFja19jYW5hcnkpKQorI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCQkJCQkJXAorCSwgW3Rhc2tfY2FuYXJ5XSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2tfY2FuYXJ5KSkKKyNlbHNlCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeQorI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfb3BhcmFtCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9pcGFyYW0KKyNlbmRpZgkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLworCiAvKgogICogU2F2aW5nIGVmbGFncyBpcyBpbXBvcnRhbnQuIEl0IHN3aXRjaGVzIG5vdCBvbmx5IElPUEwgYmV0d2VlbiB0YXNrcywKICAqIGl0IGFsc28gcHJvdGVjdHMgb3RoZXIgdGFza3MgZnJvbSBOVCBsZWFraW5nIHRocm91Z2ggc3lzZW50ZXIgZXRjLgpAQCAtNDQsNiArNjEsNyBAQAogCQkgICAgICJtb3ZsICVbbmV4dF9zcF0sJSVlc3Bcblx0IgkvKiByZXN0b3JlIEVTUCAgICovIFwKIAkJICAgICAibW92bCAkMWYsJVtwcmV2X2lwXVxuXHQiCS8qIHNhdmUgICAgRUlQICAgKi8JXAogCQkgICAgICJwdXNobCAlW25leHRfaXBdXG5cdCIJLyogcmVzdG9yZSBFSVAgICAqLwlcCisJCSAgICAgX19zd2l0Y2hfY2FuYXJ5CQkJCQlcCiAJCSAgICAgImptcCBfX3N3aXRjaF90b1xuIgkvKiByZWdwYXJtIGNhbGwgICovCVwKIAkJICAgICAiMTpcdCIJCQkJCQlcCiAJCSAgICAgInBvcGwgJSVlYnBcblx0IgkJLyogcmVzdG9yZSBFQlAgICAqLwlcCkBAIC01OCw2ICs3Niw4IEBACiAJCSAgICAgICAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpLAkJXAogCQkgICAgICAgIj1TIiAoZXNpKSwgIj1EIiAoZWRpKQkJCQlcCiAJCSAgICAgICAJCQkJCQkJXAorCQkgICAgICAgX19zd2l0Y2hfY2FuYXJ5X29wYXJhbQkJCQlcCisJCQkJCQkJCQlcCiAJCSAgICAgICAvKiBpbnB1dCBwYXJhbWV0ZXJzOiAqLwkJCQlcCiAJCSAgICAgOiBbbmV4dF9zcF0gICJtIiAobmV4dC0+dGhyZWFkLnNwKSwJCVwKIAkJICAgICAgIFtuZXh0X2lwXSAgIm0iIChuZXh0LT50aHJlYWQuaXApLAkJXApAQCAtNjYsNiArODYsOCBAQAogCQkgICAgICAgW3ByZXZdICAgICAiYSIgKHByZXYpLAkJCQlcCiAJCSAgICAgICBbbmV4dF0gICAgICJkIiAobmV4dCkJCQkJXAogCQkJCQkJCQkJXAorCQkgICAgICAgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQkJCQlcCisJCQkJCQkJCQlcCiAJCSAgICAgOiAvKiByZWxvYWRlZCBzZWdtZW50IHJlZ2lzdGVycyAqLwkJCVwKIAkJCSJtZW1vcnkiKTsJCQkJCVwKIH0gd2hpbGUgKDApCkBAIC04NiwyNyArMTA4LDQ0IEBACiAJLCAicmN4IiwgInJieCIsICJyZHgiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsIFwKIAkgICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiCiAKKyNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5CQkJCQkJCSAgXAorCSJtb3ZxICVQW3Rhc2tfY2FuYXJ5XSglJXJzaSksJSVyOFxuXHQiCQkJCSAgXAorCSJtb3ZxICUlcjgsIl9fcGVyY3B1X2FyZyhbZ3NfY2FuYXJ5XSkiXG5cdCIKKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X29wYXJhbQkJCQkJCSAgXAorCSwgW2dzX2NhbmFyeV0gIj1tIiAocGVyX2NwdV92YXIoaXJxX3N0YWNrX3VuaW9uLnN0YWNrX2NhbmFyeSkpCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9pcGFyYW0JCQkJCQkgIFwKKwksIFt0YXNrX2NhbmFyeV0gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrX2NhbmFyeSkpCisjZWxzZQkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLworI2RlZmluZSBfX3N3aXRjaF9jYW5hcnkKKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X29wYXJhbQorI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCisjZW5kaWYJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KKwogLyogU2F2ZSByZXN0b3JlIGZsYWdzIHRvIGNsZWFyIGhhbmRsZSBsZWFraW5nIE5UICovCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBcCi0JYXNtIHZvbGF0aWxlKFNBVkVfQ09OVEVYVAkJCQkJCSAgICBcCisJYXNtIHZvbGF0aWxlKFNBVkVfQ09OVEVYVAkJCQkJICBcCiAJICAgICAibW92cSAlJXJzcCwlUFt0aHJlYWRyc3BdKCVbcHJldl0pXG5cdCIgLyogc2F2ZSBSU1AgKi8JICBcCiAJICAgICAibW92cSAlUFt0aHJlYWRyc3BdKCVbbmV4dF0pLCUlcnNwXG5cdCIgLyogcmVzdG9yZSBSU1AgKi8JICBcCiAJICAgICAiY2FsbCBfX3N3aXRjaF90b1xuXHQiCQkJCQkgIFwKIAkgICAgICIuZ2xvYmwgdGhyZWFkX3JldHVyblxuIgkJCQkJICBcCiAJICAgICAidGhyZWFkX3JldHVybjpcblx0IgkJCQkJICBcCi0JICAgICAibW92cSAlJWdzOiVQW3BkYV9wY3VycmVudF0sJSVyc2lcblx0IgkJCSAgXAorCSAgICAgIm1vdnEgIl9fcGVyY3B1X2FyZyhbY3VycmVudF90YXNrXSkiLCUlcnNpXG5cdCIJCSAgXAorCSAgICAgX19zd2l0Y2hfY2FuYXJ5CQkJCQkJICBcCiAJICAgICAibW92cSAlUFt0aHJlYWRfaW5mb10oJSVyc2kpLCUlcjhcblx0IgkJCSAgXAotCSAgICAgTE9DS19QUkVGSVggImJ0ciAgJVt0aWZfZm9ya10sJVBbdGlfZmxhZ3NdKCUlcjgpXG5cdCIJICBcCiAJICAgICAibW92cSAlJXJheCwlJXJkaVxuXHQiIAkJCQkJICBcCi0JICAgICAiamMgICByZXRfZnJvbV9mb3JrXG5cdCIJCQkJCSAgXAorCSAgICAgInRlc3RsICAlW190aWZfZm9ya10sJVBbdGlfZmxhZ3NdKCUlcjgpXG5cdCIJICBcCisJICAgICAiam56ICAgcmV0X2Zyb21fZm9ya1xuXHQiCQkJCQkgIFwKIAkgICAgIFJFU1RPUkVfQ09OVEVYVAkJCQkJCSAgXAogCSAgICAgOiAiPWEiIChsYXN0KQkJCQkJICAJICBcCisJICAgICAgIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0JCQkJCSAgXAogCSAgICAgOiBbbmV4dF0gIlMiIChuZXh0KSwgW3ByZXZdICJEIiAocHJldiksCQkJICBcCiAJICAgICAgIFt0aHJlYWRyc3BdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuc3ApKSwgXAogCSAgICAgICBbdGlfZmxhZ3NdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpLAkgIFwKLQkgICAgICAgW3RpZl9mb3JrXSAiaSIgKFRJRl9GT1JLKSwJCQkgIAkgIFwKKwkgICAgICAgW190aWZfZm9ya10gImkiIChfVElGX0ZPUkspLAkJCSAgCSAgXAogCSAgICAgICBbdGhyZWFkX2luZm9dICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpLCAgIFwKLQkgICAgICAgW3BkYV9wY3VycmVudF0gImkiIChvZmZzZXRvZihzdHJ1Y3QgeDg2NjRfcGRhLCBwY3VycmVudCkpICBcCisJICAgICAgIFtjdXJyZW50X3Rhc2tdICJtIiAocGVyX2NwdV92YXIoY3VycmVudF90YXNrKSkJCSAgXAorCSAgICAgICBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCQkJCQkgIFwKIAkgICAgIDogIm1lbW9yeSIsICJjYyIgX19FWFRSQV9DTE9CQkVSKQogI2VuZGlmCiAKQEAgLTE2NSw2ICsyMDQsMjUgQEAKICNkZWZpbmUgc2F2ZXNlZ21lbnQoc2VnLCB2YWx1ZSkJCQkJXAogCWFzbSgibW92ICUlIiAjc2VnICIsJTAiOiI9ciIgKHZhbHVlKSA6IDogIm1lbW9yeSIpCiAKKy8qCisgKiB4ODZfMzIgdXNlciBncyBhY2Nlc3NvcnMuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjaWZkZWYgQ09ORklHX1g4Nl8zMl9MQVpZX0dTCisjZGVmaW5lIGdldF91c2VyX2dzKHJlZ3MpCSh1MTYpKHt1bnNpZ25lZCBsb25nIHY7IHNhdmVzZWdtZW50KGdzLCB2KTsgdjt9KQorI2RlZmluZSBzZXRfdXNlcl9ncyhyZWdzLCB2KQlsb2Fkc2VnbWVudChncywgKHVuc2lnbmVkIGxvbmcpKHYpKQorI2RlZmluZSB0YXNrX3VzZXJfZ3ModHNrKQkoKHRzayktPnRocmVhZC5ncykKKyNkZWZpbmUgbGF6eV9zYXZlX2dzKHYpCQlzYXZlc2VnbWVudChncywgKHYpKQorI2RlZmluZSBsYXp5X2xvYWRfZ3ModikJCWxvYWRzZWdtZW50KGdzLCAodikpCisjZWxzZQkvKiBYODZfMzJfTEFaWV9HUyAqLworI2RlZmluZSBnZXRfdXNlcl9ncyhyZWdzKQkodTE2KSgocmVncyktPmdzKQorI2RlZmluZSBzZXRfdXNlcl9ncyhyZWdzLCB2KQlkbyB7IChyZWdzKS0+Z3MgPSAodik7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRhc2tfdXNlcl9ncyh0c2spCSh0YXNrX3B0X3JlZ3ModHNrKS0+Z3MpCisjZGVmaW5lIGxhenlfc2F2ZV9ncyh2KQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBsYXp5X2xvYWRfZ3ModikJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkvKiBYODZfMzJfTEFaWV9HUyAqLworI2VuZGlmCS8qIFg4Nl8zMiAqLworCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2xpbWl0KHVuc2lnbmVkIGxvbmcgc2VnbWVudCkKIHsKIAl1bnNpZ25lZCBsb25nIF9fbGltaXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA5ODc4OTY0Li5kZjlkNWY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAkJCQkJCSovCiAJX191OAkJCXN1cGVydmlzb3Jfc3RhY2tbMF07CiAjZW5kaWYKKwlpbnQJCQl1YWNjZXNzX2VycjsKIH07CiAKICNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXApAQCAtMTk0LDI1ICsxOTUsMjEgQEAKIAogI2Vsc2UgLyogWDg2XzMyICovCiAKLSNpbmNsdWRlIDxhc20vcGRhLmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorI2RlZmluZSBLRVJORUxfU1RBQ0tfT0ZGU0VUICg1KjgpCiAKIC8qCiAgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQogICogcHJlZW1wdF9jb3VudCBuZWVkcyB0byBiZSAxIGluaXRpYWxseSwgdW50aWwgdGhlIHNjaGVkdWxlciBpcyBmdW5jdGlvbmFsLgogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGtlcm5lbF9zdGFjayk7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKLQl0aSA9ICh2b2lkICopKHJlYWRfcGRhKGtlcm5lbHN0YWNrKSArIFBEQV9TVEFDS09GRlNFVCAtIFRIUkVBRF9TSVpFKTsKLQlyZXR1cm4gdGk7Ci19Ci0KLS8qIGRvIG5vdCB1c2UgaW4gaW50ZXJydXB0IGNvbnRleHQgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpzdGFja190aHJlYWRfaW5mbyh2b2lkKQotewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7Ci0JYXNtKCJhbmRxICUlcnNwLCUwOyAiIDogIj1yIiAodGkpIDogIjAiICh+KFRIUkVBRF9TSVpFIC0gMSkpKTsKKwl0aSA9ICh2b2lkICopKHBlcmNwdV9yZWFkKGtlcm5lbF9zdGFjaykgKworCQkgICAgICBLRVJORUxfU1RBQ0tfT0ZGU0VUIC0gVEhSRUFEX1NJWkUpOwogCXJldHVybiB0aTsKIH0KIApAQCAtMjIwLDggKzIxNyw4IEBACiAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KICNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykgXAotCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjayxyZWcgOyBcCi0Jc3VicSAkKFRIUkVBRF9TSVpFLVBEQV9TVEFDS09GRlNFVCkscmVnCisJbW92cSBQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLHJlZyA7IFwKKwlzdWJxICQoVEhSRUFEX1NJWkUtS0VSTkVMX1NUQUNLX09GRlNFVCkscmVnCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCAyYmI2YTgzLi5hODExOTVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCkBAIC0xMiw2ICsxMyw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIGludCB0aW1lcl9hY2s7CiBleHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggMGU3YmJiNS4uZDM1MzlmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJX19mbHVzaF90bGIoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaywKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKIAkJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmEpCiB7CkBAIC0xNDIsMzEgKzE0MiwyOCBAQAogCWZsdXNoX3RsYl9tbSh2bWEtPnZtX21tKTsKIH0KIAotdm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHZhKTsKK3ZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZhKTsKIAogI2RlZmluZSBUTEJTVEFURV9PSwkxCiAjZGVmaW5lIFRMQlNUQVRFX0xBWlkJMgogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogc3RydWN0IHRsYl9zdGF0ZSB7CiAJc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwogCWludCBzdGF0ZTsKLQljaGFyIF9fY2FjaGVsaW5lX3BhZGRpbmdbTDFfQ0FDSEVfQllURVMtOF07CiB9OwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB0bGJfc3RhdGUsIGNwdV90bGJzdGF0ZSk7CiAKLXZvaWQgcmVzZXRfbGF6eV90bGJzdGF0ZSh2b2lkKTsKLSNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfbGF6eV90bGJzdGF0ZSh2b2lkKQogeworCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuc3RhdGUsIDApOworCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuYWN0aXZlX21tLCAmaW5pdF9tbSk7CiB9Ci0jZW5kaWYKIAogI2VuZGlmCS8qIFNNUCAqLwogCiAjaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBmbHVzaF90bGJfb3RoZXJzKG1hc2ssIG1tLCB2YSkJbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoJm1hc2ssIG1tLCB2YSkKKyNkZWZpbmUgZmx1c2hfdGxiX290aGVycyhtYXNrLCBtbSwgdmEpCW5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKG1hc2ssIG1tLCB2YSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LApAQCAtMTc1LDQgKzE3Miw2IEBACiAJZmx1c2hfdGxiX2FsbCgpOwogfQogCitleHRlcm4gdm9pZCB6YXBfbG93X21hcHBpbmdzKHZvaWQpOworCiAjZW5kaWYgLyogX0FTTV9YODZfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggNGUyZjJlMC4uNzdjZmIyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC03NCw2ICs3NCw4IEBACiAJcmV0dXJuICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KKwogI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwogCiAvKiBNYXBwaW5ncyBiZXR3ZWVuIG5vZGUgbnVtYmVyIGFuZCBjcHVzIG9uIHRoYXQgbm9kZS4gKi8KQEAgLTgzLDcgKzg1LDggQEAKIERFQ0xBUkVfRUFSTFlfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXApOwogCiAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTm9kZS4gKi8KLSNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCXJlYWRfcGRhKG5vZGVudW1iZXIpCitERUNMQVJFX1BFUl9DUFUoaW50LCBub2RlX251bWJlcik7CisjZGVmaW5lIG51bWFfbm9kZV9pZCgpCQlwZXJjcHVfcmVhZChub2RlX251bWJlcikKIAogI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKIGV4dGVybiBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSk7CkBAIC0xMDIsMTAgKzEwNSw3IEBACiAvKiBTYW1lIGZ1bmN0aW9uIGJ1dCB1c2VkIGlmIGNhbGxlZCBiZWZvcmUgcGVyX2NwdSBhcmVhcyBhcmUgc2V0dXAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCiB7Ci0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApKQotCQlyZXR1cm4gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcClbY3B1XTsKLQotCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CisJcmV0dXJuIGVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKIH0KIAogLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNwdW1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4gKi8KQEAgLTEyMiw2ICsxMjIsOCBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KIAorZXh0ZXJuIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKTsKKwogLyoKICAqIFJlcGxhY2UgZGVmYXVsdCBub2RlX3RvX2NwdW1hc2tfcHRyIHdpdGggb3B0aW1pemVkIHZlcnNpb24KICAqIERlcHJlY2F0ZWQ6IHVzZSAiY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mX25vZGUobm9kZSkiCkBAIC0xOTIsOSArMTk0LDIwIEBACiAKICNlbHNlIC8qICFDT05GSUdfTlVNQSAqLwogCi0jZGVmaW5lIG51bWFfbm9kZV9pZCgpCQkwCi0jZGVmaW5lCWNwdV90b19ub2RlKGNwdSkJMAotI2RlZmluZQllYXJseV9jcHVfdG9fbm9kZShjcHUpCTAKK3N0YXRpYyBpbmxpbmUgaW50IG51bWFfbm9kZV9pZCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQoreworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQogewpAQCAtMjA5LDYgKzIyMiw4IEBACiAJcmV0dXJuIGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpIHsgfQorCiAvKgogICogUmVwbGFjZSBkZWZhdWx0IG5vZGVfdG9fY3B1bWFza19wdHIgd2l0aCBvcHRpbWl6ZWQgdmVyc2lvbgogICogRGVwcmVjYXRlZDogdXNlICJjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKSIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYW1wb2xpbmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYW1wb2xpbmUuaAppbmRleCA3ODBiYTBhLi45MGYwNmMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFtcG9saW5lLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhbXBvbGluZS5oCkBAIC0xMyw2ICsxMyw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcnNwOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdGlhbF9jb2RlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdGlhbF9nczsKIAogI2RlZmluZSBUUkFNUE9MSU5FX1NJWkUgcm91bmR1cCh0cmFtcG9saW5lX2VuZCAtIHRyYW1wb2xpbmVfZGF0YSwgUEFHRV9TSVpFKQogI2RlZmluZSBUUkFNUE9MSU5FX0JBU0UgMHg2MDAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCBjZjNiYjA1Li4wZDUzNDI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTQxLDcgKzQxLDcgQEAKIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19vdmVyZmxvdyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19ib3VuZHMoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9faW52YWxpZF9vcChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLWRvdHJhcGxpbmthZ2Ugdm9pZCBkb19kZXZpY2Vfbm90X2F2YWlsYWJsZShzdHJ1Y3QgcHRfcmVncyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfVFNTKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogZG90cmFwbGlua2FnZSB2b2lkIGRvX3NlZ21lbnRfbm90X3ByZXNlbnQoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNDM0MDA1NS4uYjY4NWVjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMTIxLDcgKzEyMSw3IEBACiAKICNkZWZpbmUgX19nZXRfdXNlcl94KHNpemUsIHJldCwgeCwgcHRyKQkJICAgICAgXAogCWFzbSB2b2xhdGlsZSgiY2FsbCBfX2dldF91c2VyXyIgI3NpemUJICAgICAgXAotCQkgICAgIDogIj1hIiAocmV0KSwiPWQiICh4KQkgICAgICBcCisJCSAgICAgOiAiPWEiIChyZXQpLCAiPWQiICh4KQkgICAgICBcCiAJCSAgICAgOiAiMCIgKHB0cikpCQkgICAgICBcCiAKIC8qIENhcmVmdWw6IHdlIGhhdmUgdG8gY2FzdCB0aGUgcmVzdWx0IHRvIHRoZSB0eXBlIG9mIHRoZSBwb2ludGVyCkBAIC0xODEsMTIgKzE4MSwxMiBAQAogCiAjZGVmaW5lIF9fcHV0X3VzZXJfeChzaXplLCB4LCBwdHIsIF9fcmV0X3B1KQkJCVwKIAlhc20gdm9sYXRpbGUoImNhbGwgX19wdXRfdXNlcl8iICNzaXplIDogIj1hIiAoX19yZXRfcHUpCVwKLQkJICAgICA6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCisJCSAgICAgOiAiMCIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikgOiAiZWJ4IikKIAogCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIGFkZHIsIGVycikJCQkJCVwKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fdTY0KHgsIGFkZHIsIGVyciwgZXJycmV0KQkJCVwKIAlhc20gdm9sYXRpbGUoIjE6CW1vdmwgJSVlYXgsMCglMilcbiIJCQlcCiAJCSAgICAgIjI6CW1vdmwgJSVlZHgsNCglMilcbiIJCQlcCiAJCSAgICAgIjM6XG4iCQkJCQkJXApAQCAtMTk3LDE0ICsxOTcsMjQgQEAKIAkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDRiKQkJCQlcCiAJCSAgICAgX0FTTV9FWFRBQkxFKDJiLCA0YikJCQkJXAogCQkgICAgIDogIj1yIiAoZXJyKQkJCQkJXAotCQkgICAgIDogIkEiICh4KSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpKQorCQkgICAgIDogIkEiICh4KSwgInIiIChhZGRyKSwgImkiIChlcnJyZXQpLCAiMCIgKGVycikpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fZXhfdTY0KHgsIGFkZHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCIxOgltb3ZsICUlZWF4LDAoJTEpXG4iCQkJXAorCQkgICAgICIyOgltb3ZsICUlZWR4LDQoJTEpXG4iCQkJXAorCQkgICAgICIzOlxuIgkJCQkJCVwKKwkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDJiIC0gMWIpCQkJCVwKKwkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDNiIC0gMmIpCQkJCVwKKwkJICAgICA6IDogIkEiICh4KSwgInIiIChhZGRyKSkKIAogI2RlZmluZSBfX3B1dF91c2VyX3g4KHgsIHB0ciwgX19yZXRfcHUpCQkJCVwKIAlhc20gdm9sYXRpbGUoImNhbGwgX19wdXRfdXNlcl84IiA6ICI9YSIgKF9fcmV0X3B1KQlcCiAJCSAgICAgOiAiQSIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikgOiAiZWJ4IikKICNlbHNlCi0jZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIHB0ciwgcmV0dmFsKSBcCi0JX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJxIiwgIiIsICJaciIsIC1FRkFVTFQpCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX3U2NCh4LCBwdHIsIHJldHZhbCwgZXJycmV0KSBcCisJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJxIiwgIiIsICJaciIsIGVycnJldCkKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fZXhfdTY0KHgsIGFkZHIpCVwKKwlfX3B1dF91c2VyX2FzbV9leCh4LCBhZGRyLCAicSIsICIiLCAiWnIiKQogI2RlZmluZSBfX3B1dF91c2VyX3g4KHgsIHB0ciwgX19yZXRfcHUpIF9fcHV0X3VzZXJfeCg4LCB4LCBwdHIsIF9fcmV0X3B1KQogI2VuZGlmCiAKQEAgLTI3NiwxMCArMjg2LDMyIEBACiAJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAidyIsICJ3IiwgImlyIiwgZXJycmV0KTsJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKLQkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJsIiwgImsiLCAgImlyIiwgZXJycmV0KTtcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAibCIsICJrIiwgImlyIiwgZXJycmV0KTsJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgODoJCQkJCQkJCVwKLQkJX19wdXRfdXNlcl91NjQoKF9fdHlwZW9mX18oKnB0cikpKHgpLCBwdHIsIHJldHZhbCk7CVwKKwkJX19wdXRfdXNlcl9hc21fdTY0KChfX3R5cGVvZl9fKCpwdHIpKSh4KSwgcHRyLCByZXR2YWwsCVwKKwkJCQkgICBlcnJyZXQpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX3B1dF91c2VyX2JhZCgpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19wdXRfdXNlcl9zaXplX2V4KHgsIHB0ciwgc2l6ZSkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc21fZXgoeCwgcHRyLCAiYiIsICJiIiwgImlxIik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbV9leCh4LCBwdHIsICJ3IiwgInciLCAiaXIiKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtX2V4KHgsIHB0ciwgImwiLCAiayIsICJpciIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc21fZXhfdTY0KChfX3R5cGVvZl9fKCpwdHIpKSh4KSwgcHRyKTsJXAogCQlicmVhazsJCQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJCVwKIAkJX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKQEAgLTMxMSw5ICszNDMsMTIgQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKICNkZWZpbmUgX19nZXRfdXNlcl9hc21fdTY0KHgsIHB0ciwgcmV0dmFsLCBlcnJyZXQpCSh4KSA9IF9fZ2V0X3VzZXJfYmFkKCkKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fZXhfdTY0KHgsIHB0cikJCQkoeCkgPSBfX2dldF91c2VyX2JhZCgpCiAjZWxzZQogI2RlZmluZSBfX2dldF91c2VyX2FzbV91NjQoeCwgcHRyLCByZXR2YWwsIGVycnJldCkgXAogCSBfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInEiLCAiIiwgIj1yIiwgZXJycmV0KQorI2RlZmluZSBfX2dldF91c2VyX2FzbV9leF91NjQoeCwgcHRyKSBcCisJIF9fZ2V0X3VzZXJfYXNtX2V4KHgsIHB0ciwgInEiLCAiIiwgIj1yIikKICNlbmRpZgogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKQEAgLTM1MCw2ICszODUsMzMgQEAKIAkJICAgICA6ICI9ciIgKGVyciksIGx0eXBlKHgpCQkJCVwKIAkJICAgICA6ICJtIiAoX19tKGFkZHIpKSwgImkiIChlcnJyZXQpLCAiMCIgKGVycikpCiAKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplX2V4KHgsIHB0ciwgc2l6ZSkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc21fZXgoeCwgcHRyLCAiYiIsICJiIiwgIj1xIik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbV9leCh4LCBwdHIsICJ3IiwgInciLCAiPXIiKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtX2V4KHgsIHB0ciwgImwiLCAiayIsICI9ciIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc21fZXhfdTY0KHgsIHB0cik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCSh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2FzbV9leCh4LCBhZGRyLCBpdHlwZSwgcnR5cGUsIGx0eXBlKQkJCVwKKwlhc20gdm9sYXRpbGUoIjE6CW1vdiJpdHlwZSIgJTEsJSJydHlwZSIwXG4iCQlcCisJCSAgICAgIjI6XG4iCQkJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgMmIgLSAxYikJCQkJXAorCQkgICAgIDogbHR5cGUoeCkgOiAibSIgKF9fbShhZGRyKSkpCisKICNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQlcCiAoewkJCQkJCQkJXAogCWludCBfX3B1X2VycjsJCQkJCQlcCkBAIC0zODUsNiArNDQ3LDI2IEBACiAJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikJCQkJXAogCQkgICAgIDogIj1yIihlcnIpCQkJCQlcCiAJCSAgICAgOiBsdHlwZSh4KSwgIm0iIChfX20oYWRkcikpLCAiaSIgKGVycnJldCksICIwIiAoZXJyKSkKKworI2RlZmluZSBfX3B1dF91c2VyX2FzbV9leCh4LCBhZGRyLCBpdHlwZSwgcnR5cGUsIGx0eXBlKQkJCVwKKwlhc20gdm9sYXRpbGUoIjE6CW1vdiJpdHlwZSIgJSJydHlwZSIwLCUxXG4iCQlcCisJCSAgICAgIjI6XG4iCQkJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgMmIgLSAxYikJCQkJXAorCQkgICAgIDogOiBsdHlwZSh4KSwgIm0iIChfX20oYWRkcikpKQorCisvKgorICogdWFjY2Vzc190cnkgYW5kIGNhdGNoCisgKi8KKyNkZWZpbmUgdWFjY2Vzc190cnkJZG8gewkJCQkJCVwKKwlpbnQgcHJldl9lcnIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnVhY2Nlc3NfZXJyOwkJXAorCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dWFjY2Vzc19lcnIgPSAwOwkJCQlcCisJYmFycmllcigpOworCisjZGVmaW5lIHVhY2Nlc3NfY2F0Y2goZXJyKQkJCQkJCVwKKwkoZXJyKSB8PSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnVhY2Nlc3NfZXJyOwkJCVwKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnVhY2Nlc3NfZXJyID0gcHJldl9lcnI7CQkJXAorfSB3aGlsZSAoMCkKKwogLyoqCiAgKiBfX2dldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KICAqIEB4OiAgIFZhcmlhYmxlIHRvIHN0b3JlIHJlc3VsdC4KQEAgLTQwOCw2ICs0OTAsNyBAQAogCiAjZGVmaW5lIF9fZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKIAlfX2dldF91c2VyX25vY2hlY2soKHgpLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpCisKIC8qKgogICogX19wdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KICAqIEB4OiAgIFZhbHVlIHRvIGNvcHkgdG8gdXNlciBzcGFjZS4KQEAgLTQzNSw2ICs1MTgsNDUgQEAKICNkZWZpbmUgX19wdXRfdXNlcl91bmFsaWduZWQgX19wdXRfdXNlcgogCiAvKgorICoge2dldHxwdXR9X3VzZXJfdHJ5IGFuZCBjYXRjaAorICoKKyAqIGdldF91c2VyX3RyeSB7CisgKglnZXRfdXNlcl9leCguLi4pOworICogfSBnZXRfdXNlcl9jYXRjaChlcnIpCisgKi8KKyNkZWZpbmUgZ2V0X3VzZXJfdHJ5CQl1YWNjZXNzX3RyeQorI2RlZmluZSBnZXRfdXNlcl9jYXRjaChlcnIpCXVhY2Nlc3NfY2F0Y2goZXJyKQorCisjZGVmaW5lIGdldF91c2VyX2V4KHgsIHB0cikJZG8gewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndWVfdmFsOwkJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZV9leCgoX19ndWVfdmFsKSwgKHB0ciksIChzaXplb2YoKihwdHIpKSkpOwlcCisJKHgpID0gKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpKV9fZ3VlX3ZhbDsJCQlcCit9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX1g4Nl9XUF9XT1JLU19PSworCisjZGVmaW5lIHB1dF91c2VyX3RyeQkJdWFjY2Vzc190cnkKKyNkZWZpbmUgcHV0X3VzZXJfY2F0Y2goZXJyKQl1YWNjZXNzX2NhdGNoKGVycikKKworI2RlZmluZSBwdXRfdXNlcl9leCh4LCBwdHIpCQkJCQkJXAorCV9fcHV0X3VzZXJfc2l6ZV9leCgoX190eXBlb2ZfXygqKHB0cikpKSh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorCisjZWxzZSAvKiAhQ09ORklHX1g4Nl9XUF9XT1JLU19PSyAqLworCisjZGVmaW5lIHB1dF91c2VyX3RyeQkJZG8gewkJXAorCWludCBfX3VhY2Nlc3NfZXJyID0gMDsKKworI2RlZmluZSBwdXRfdXNlcl9jYXRjaChlcnIpCQkJXAorCShlcnIpIHw9IF9fdWFjY2Vzc19lcnI7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBwdXRfdXNlcl9leCh4LCBwdHIpCWRvIHsJCVwKKwlfX3VhY2Nlc3NfZXJyIHw9IF9fcHV0X3VzZXIoeCwgcHRyKTsJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIENPTkZJR19YODZfV1BfV09SS1NfT0sgKi8KKworLyoKICAqIG1vdnNsIGNhbiBiZSBzbG93IHdoZW4gc291cmNlIGFuZCBkZXN0IGFyZSBub3QgYm90aCA4LWJ5dGUgYWxpZ25lZAogICovCiAjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9VU0VSQ09QWQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDg0MjEwYzQuLjhjYzY4NzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKQEAgLTE4OCwxNiArMTg4LDE2IEBACiBleHRlcm4gbG9uZyBfX2NvcHlfdXNlcl9ub2NhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKIAkJCQl1bnNpZ25lZCBzaXplLCBpbnQgemVyb3Jlc3QpOwogCi1zdGF0aWMgaW5saW5lIGludCBfX2NvcHlfZnJvbV91c2VyX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJCQkgICB1bnNpZ25lZCBzaXplKQorc3RhdGljIGlubGluZSBpbnQKK19fY29weV9mcm9tX3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCiB7CiAJbWlnaHRfc2xlZXAoKTsKIAlyZXR1cm4gX19jb3B5X3VzZXJfbm9jYWNoZShkc3QsIHNyYywgc2l6ZSwgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZSh2b2lkICpkc3QsCi0JCQkJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKLQkJCQkJCSAgICB1bnNpZ25lZCBzaXplKQorc3RhdGljIGlubGluZSBpbnQKK19fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJICB1bnNpZ25lZCBzaXplKQogewogCXJldHVybiBfX2NvcHlfdXNlcl9ub2NhY2hlKGRzdCwgc3JjLCBzaXplLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTAxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX0FTTV9YODZfVVZfVVZfSAorI2RlZmluZSBfQVNNX1g4Nl9VVl9VVl9ICisKK2VudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307CisKK3N0cnVjdCBjcHVtYXNrOworc3RydWN0IG1tX3N0cnVjdDsKKworI2lmZGVmIENPTkZJR19YODZfVVYKKworZXh0ZXJuIGVudW0gdXZfc3lzdGVtX3R5cGUgZ2V0X3V2X3N5c3RlbV90eXBlKHZvaWQpOworZXh0ZXJuIGludCBpc191dl9zeXN0ZW0odm9pZCk7CitleHRlcm4gdm9pZCB1dl9jcHVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp1dl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgdmEsCisJCQkJCQkgdW5zaWduZWQgaW50IGNwdSk7CisKKyNlbHNlCS8qIFg4Nl9VViAqLworCitzdGF0aWMgaW5saW5lIGVudW0gdXZfc3lzdGVtX3R5cGUgZ2V0X3V2X3N5c3RlbV90eXBlKHZvaWQpIHsgcmV0dXJuIFVWX05PTkU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3V2X3N5c3RlbSh2b2lkKQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdXZfY3B1X2luaXQodm9pZCkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdXZfc3lzdGVtX2luaXQodm9pZCkJeyB9CitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICoKK3V2X2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgaW50IGNwdSkKK3sgcmV0dXJuIGNwdW1hc2s7IH0KKworI2VuZGlmCS8qIFg4Nl9VViAqLworCisjZW5kaWYJLyogX0FTTV9YODZfVVZfVVZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaAppbmRleCA1MDQyM2M3Li45YjBlNjFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaApAQCAtMzI1LDcgKzMyNSw2IEBACiAjZGVmaW5lIGNwdWJpdF9pc3NldChjcHUsIGJhdV9sb2NhbF9jcHVtYXNrKSBcCiAJdGVzdF9iaXQoKGNwdSksIChiYXVfbG9jYWxfY3B1bWFzaykuYml0cykKIAotZXh0ZXJuIGludCB1dl9mbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgdXZfYmF1X21lc3NhZ2VfaW50cjEodm9pZCk7CiBleHRlcm4gdm9pZCB1dl9iYXVfdGltZW91dF9pbnRyMSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxMDBmMy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qIENvcHlyaWdodCAoQykgMTk5OSwyMDAxCi0gKgotICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCi0gKgotICogU3RhbmRhcmQgaW5jbHVkZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5DUiBWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyICovCi0KLS8qIFRoZSBlaWdodCBDUEkgdmVjdG9ycy4gIFRvIGFjdGl2YXRlIGEgQ1BJLCB5b3Ugd3JpdGUgYSBiaXQgbWFzawotICogY29ycmVzcG9uZGluZyB0byB0aGUgcHJvY2Vzc29yIHNldCB0byBiZSBpbnRlcnJ1cHRlZCBpbnRvIHRoZQotICogcmVsZXZhbnQgcmVnaXN0ZXIuICBUaGF0IHNldCBvZiBDUFVzIHdpbGwgdGhlbiBiZSBpbnRlcnJ1cHRlZCB3aXRoCi0gKiB0aGUgQ1BJICovCi1zdGF0aWMgY29uc3QgaW50IFZJQ19DUElfUmVnaXN0ZXJzW10gPQotCXsweEZDMDAsIDB4RkMwMSwgMHhGQzA4LCAweEZDMDksCi0JIDB4RkMxMCwgMHhGQzExLCAweEZDMTgsIDB4RkMxOSB9OwotCi0jZGVmaW5lIFZJQ19QUk9DX1dIT19BTV9JCQkweGZjMjkKLSMJZGVmaW5lCVFVQURfSURFTlRJRklFUgkJMHhDMAotIwlkZWZpbmUgIEVJR0hUX1NMT1RfSURFTlRJRklFUgkweEUwCi0jZGVmaW5lIFFJQ19FWFRFTkRFRF9QUk9DRVNTT1JfU0VMRUNUCTB4RkM3MgotI2RlZmluZSBWSUNfQ1BJX0JBU0VfUkVHSVNURVIJCTB4RkM0MQotI2RlZmluZSBWSUNfUFJPQ0VTU09SX0lECQkweEZDMjEKLSMJZGVmaW5lIFZJQ19DUFVfTUFTUVVFUkFERV9FTkFCTEUgMHg4Ci0KLSNkZWZpbmUgVklDX0NMQUlNX1JFR0lTVEVSXzAJCTB4RkMzOAotI2RlZmluZSBWSUNfQ0xBSU1fUkVHSVNURVJfMQkJMHhGQzM5Ci0jZGVmaW5lIFZJQ19SRURJUkVDVF9SRUdJU1RFUl8wCQkweEZDNjAKLSNkZWZpbmUgVklDX1JFRElSRUNUX1JFR0lTVEVSXzEJCTB4RkM2MQotI2RlZmluZSBWSUNfUFJJT1JJVFlfUkVHSVNURVIJCTB4RkMyMAotCi0jZGVmaW5lIFZJQ19QUklNQVJZX01DX0JBU0UJCTB4RkM0OAotI2RlZmluZSBWSUNfU0VDT05EQVJZX01DX0JBU0UJCTB4RkM0OQotCi0jZGVmaW5lIFFJQ19QUk9DRVNTT1JfSUQJCTB4RkM3MQotIwlkZWZpbmUJUUlDX0NQVUlEX0VOQUJMRQkweDA4Ci0KLSNkZWZpbmUgUUlDX1ZJQ19DUElfQkFTRV9SRUdJU1RFUgkweEZDNzkKLSNkZWZpbmUgUUlDX0NQSV9CQVNFX1JFR0lTVEVSCQkweEZDN0EKLQotI2RlZmluZSBRSUNfTUFTS19SRUdJU1RFUjAJCTB4RkM4MAotLyogTk9URTogdGhlc2UgYXJlIG1hc2tlZCBoaWdoLCBlbmFibGVkIGxvdyAqLwotIwlkZWZpbmUgUUlDX1BFUkZfVElNRVIJCTB4MDEKLSMJZGVmaW5lIFFJQ19MUEUJCQkweDAyCi0jCWRlZmluZSBRSUNfU1lTX0lOVAkJMHgwNAotIwlkZWZpbmUgUUlDX0NNTl9JTlQJCTB4MDgKLS8qIGF0IHRoZSBtb21lbnQsIGp1c3QgZW5hYmxlIENNTl9JTlQsIGRpc2FibGUgU1lTX0lOVCAqLwotIwlkZWZpbmUgUUlDX0RFRkFVTFRfTUFTSzAJKH4oUUlDX0NNTl9JTlQgLyogfCBWSUNfU1lTX0lOVCAqLykpCi0jZGVmaW5lIFFJQ19NQVNLX1JFR0lTVEVSMQkJMHhGQzgxCi0jCWRlZmluZSBRSUNfQk9PVF9DUElfTUFTSwkweEZFCi0vKiBFbmFibGUgQ1BJJ3MgMS02IGluY2x1c2l2ZSAqLwotIwlkZWZpbmUgUUlDX0NQSV9FTkFCTEUJCTB4ODEKLQotI2RlZmluZSBRSUNfSU5URVJSVVBUX0NMRUFSMAkJMHhGQzhBCi0jZGVmaW5lIFFJQ19JTlRFUlJVUFRfQ0xFQVIxCQkweEZDOEIKLQotLyogdGhpcyBpcyB3aGVyZSB3ZSBwbGFjZSB0aGUgQ1BJIHZlY3RvcnMgKi8KLSNkZWZpbmUgVklDX0RFRkFVTFRfQ1BJX0JBU0UJCTB4QzAKLS8qIHRoaXMgaXMgd2hlcmUgd2UgcGxhY2UgdGhlIFFJQyBDUEkgdmVjdG9ycyAqLwotI2RlZmluZSBRSUNfREVGQVVMVF9DUElfQkFTRQkJMHhEMAotCi0jZGVmaW5lIFZJQ19CT09UX0lOVEVSUlVQVF9NQVNLCQkweGZlCi0KLWV4dGVybiB2b2lkIHNtcF92aWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oCmluZGV4IDU5MzYzNjIuLmUwZjlhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmgKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAJd3Jtc3JsKE1TUl9WTV9IU0FWRV9QQSwgMCk7CiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgJiB+TVNSX0VGRVJfU1ZNRV9NQVNLKTsKKwl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgJiB+RUZFUl9TVk1FKTsKIH0KIAogLyoqIE1ha2VzIHN1cmUgU1ZNIGlzIGRpc2FibGVkLCBpZiBpdCBpcyBzdXBwb3J0ZWQgb24gdGhlIENQVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAppbmRleCBkMDIzOGU2Li40OThmOTQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaApAQCAtMjcwLDggKzI3MCw5IEBACiAKICNkZWZpbmUgSU5UUl9UWVBFX0VYVF9JTlRSICAgICAgICAgICAgICAoMCA8PCA4KSAvKiBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgSU5UUl9UWVBFX05NSV9JTlRSCQkoMiA8PCA4KSAvKiBOTUkgKi8KLSNkZWZpbmUgSU5UUl9UWVBFX0VYQ0VQVElPTiAgICAgICAgICAgICAoMyA8PCA4KSAvKiBwcm9jZXNzb3IgZXhjZXB0aW9uICovCisjZGVmaW5lIElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTgkoMyA8PCA4KSAvKiBwcm9jZXNzb3IgZXhjZXB0aW9uICovCiAjZGVmaW5lIElOVFJfVFlQRV9TT0ZUX0lOVFIgICAgICAgICAgICAgKDQgPDwgOCkgLyogc29mdHdhcmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVFJfVFlQRV9TT0ZUX0VYQ0VQVElPTgkoNiA8PCA4KSAvKiBzb2Z0d2FyZSBleGNlcHRpb24gKi8KIAogLyogR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPIGZsYWdzLiAqLwogI2RlZmluZSBHVUVTVF9JTlRSX1NUQVRFX1NUSQkJMHgwMDAwMDAwMQpAQCAtMzExLDcgKzMxMiw3IEBACiAjZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfVFlQRSAgICAgICAgICAgMHgxMCAgICAvKiA0LCBkaXJlY3Rpb24gb2YgYWNjZXNzICovCiAjZGVmaW5lIFRZUEVfTU9WX1RPX0RSICAgICAgICAgICAgICAgICAgKDAgPDwgNCkKICNkZWZpbmUgVFlQRV9NT1ZfRlJPTV9EUiAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX1JFRyAgICAgICAgICAgIDB4ZjAwICAgLyogMTE6OCwgZ2VuZXJhbCBwdXJwb3NlIHJlZy4gKi8KKyNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19SRUcoZXEpICAgICAgICAoKChlcSkgPj4gOCkgJiAweGYpIC8qIDExOjgsIGdlbmVyYWwgcHVycG9zZSByZWcuICovCiAKIAogLyogc2VnbWVudCBBUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm95YWdlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm95YWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2U2NDczLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZveWFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyOSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMQotICoKLSAqIEF1dGhvcjogSi5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQotICoKLSAqIFN0YW5kYXJkIGluY2x1ZGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOQ1IgVm95YWdlciBzeXN0ZW0gKi8KLQotI3VuZGVmCVZPWUFHRVJfREVCVUcKLSN1bmRlZglWT1lBR0VSX0NBVF9ERUJVRwotCi0jaWZkZWYgVk9ZQUdFUl9ERUJVRwotI2RlZmluZSBWREVCVUcoeCkJcHJpbnRrIHgKLSNlbHNlCi0jZGVmaW5lIFZERUJVRyh4KQotI2VuZGlmCi0KLS8qIFRoZXJlIGFyZSB0aHJlZSBsZXZlbHMgb2Ygdm95YWdlciBtYWNoaW5lOiAzLDQgYW5kIDUuIFRoZSBydWxlIGlzCi0gKiBpZiBpdCdzIGxlc3MgdGhhbiAzNDM1IGl0J3MgYSBMZXZlbCAzIGV4Y2VwdCBmb3IgYSAzMzYwIHdoaWNoIGlzCi0gKiBhIGxldmVsIDQuICBBIDM0MzUgb3IgYWJvdmUgaXMgYSBMZXZlbCA1ICovCi0jZGVmaW5lIFZPWUFHRVJfTEVWRUw1X0FORF9BQk9WRQkweDM0MzUKLSNkZWZpbmUgVk9ZQUdFUl9MRVZFTDQJCQkweDMzNjAKLQotLyogVGhlIEw0IERJTk8gQVNJQyAqLwotI2RlZmluZSBWT1lBR0VSX0RJTk8JCQkweDQzCi0KLS8qIHZveWFnZXIgcG9ydHMgaW4gc3RhbmRhcmQgSS9PIHNwYWNlICovCi0jZGVmaW5lIFZPWUFHRVJfTUNfU0VUVVAJMHg5NgotCi0KLSNkZWZpbmUJVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQJCQkweDk3Ci0jCWRlZmluZSBWT1lBR0VSX0NBVF9ERVNFTEVDVAkJMHhmZgotI2RlZmluZSBWT1lBR0VSX1NTUEJfUkVMT0NBVElPTl9QT1JUCQkweDk4Ci0KLS8qIFZhbGlkIENBVCBjb250cm9sbGVyIGNvbW1hbmRzICovCi0vKiBzdGFydCBpbnN0cnVjdGlvbiByZWdpc3RlciBjeWNsZSAqLwotI2RlZmluZSBWT1lBR0VSX0NBVF9JUkNZQwkJCTB4MDEKLS8qIHN0YXJ0IGRhdGEgcmVnaXN0ZXIgY3ljbGUgKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfRFJDWUMJCQkweDAyCi0vKiBtb3ZlIHRvIGV4ZWN1dGUgc3RhdGUgKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfUlVOCQkJCTB4MEYKLS8qIGVuZCBvcGVyYXRpb24gKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfRU5ECQkJCTB4ODAKLS8qIGhvbGQgaW4gaWRsZSBzdGF0ZSAqLwotI2RlZmluZSBWT1lBR0VSX0NBVF9IT0xECQkJMHg5MAotLyogc2luZ2xlIHN0ZXAgYW4gImludGVzdCIgdmVjdG9yICovCi0jZGVmaW5lIFZPWUFHRVJfQ0FUX1NURVAJCQkweEUwCi0vKiByZXR1cm4gY2F0IGNvbnRyb2xsZXIgdG8gQ0xFTVNPTiBtb2RlICovCi0jZGVmaW5lIFZPWUFHRVJfQ0FUX0NMRU1TT04JCQkweEZGCi0KLS8qIHRoZSBkZWZhdWx0IGNhdCBjb21tYW5kIGhlYWRlciAqLwotI2RlZmluZSBWT1lBR0VSX0NBVF9IRUFERVIJCQkweDdGCi0KLS8qIHRoZSByYW5nZSBvZiBwb3NzaWJsZSBDQVQgbW9kdWxlIGlkcyBpbiB0aGUgc3lzdGVtICovCi0jZGVmaW5lIFZPWUFHRVJfTUlOX01PRFVMRQkJCTB4MTAKLSNkZWZpbmUgVk9ZQUdFUl9NQVhfTU9EVUxFCQkJMHgxZgotCi0vKiBUaGUgdm95YWdlciByZWdpc3RlcnMgcGVyIGFzaWMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9BU0lDX0lEX1JFRwkJCTB4MDAKLSNkZWZpbmUgVk9ZQUdFUl9BU0lDX1RZUEVfUkVHCQkJMHgwMQotLyogdGhlIHN1YiBhZGRyZXNzIHJlZ2lzdGVycyBjYW4gYmUgbWFkZSBhdXRvIGluY3JlbWVudGluZyBvbiByZWFkcyAqLwotI2RlZmluZSBWT1lBR0VSX0FVVE9fSU5DX1JFRwkJCTB4MDIKLSMJZGVmaW5lIFZPWUFHRVJfQVVUT19JTkMJCQkweDA0Ci0jCWRlZmluZSBWT1lBR0VSX05PX0FVVE9fSU5DCQkweGZiCi0jZGVmaW5lIFZPWUFHRVJfU1VCQUREUkRBVEEJCQkweDAzCi0jZGVmaW5lIFZPWUFHRVJfU0NBTlBBVEgJCQkweDA1Ci0jCWRlZmluZSBWT1lBR0VSX0NPTk5FQ1RfQVNJQwkJMHgwMQotIwlkZWZpbmUgVk9ZQUdFUl9ESVNDT05ORUNUX0FTSUMJCTB4ZmUKLSNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSTE8JCQkweDA2Ci0jZGVmaW5lIFZPWUFHRVJfU1VCQUREUkhJCQkJMHgwNwotI2RlZmluZSBWT1lBR0VSX1NVQk1PRFNFTEVDVAkJCTB4MDgKLSNkZWZpbmUgVk9ZQUdFUl9TVUJNT0RQUkVTRU5UCQkJMHgwOQotCi0jZGVmaW5lIFZPWUFHRVJfU1VCQUREUl9MTwkJCTB4ZmYKLSNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSX0hJCQkJMHhmZmZmCi0KLS8qIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBzY2FuIHBhdGggLS0gdXNlZCB0byBmb3JtIGluc3RydWN0aW9ucyAqLwotI2RlZmluZSBWT1lBR0VSX01BWF9TQ0FOX1BBVEgJCQkweDEwMAotLyogdGhlIGJpZ2dlc3QgcG9zc2libGUgcmVnaXN0ZXIgc2l6ZSAoaW4gYnl0ZXMpICovCi0jZGVmaW5lIFZPWUFHRVJfTUFYX1JFR19TSVpFCQkJNAotCi0vKiBUb3RhbCBudW1iZXIgb2YgcG9zc2libGUgbW9kdWxlcyAoaW5jbHVkaW5nIHN1Ym1vZHVsZXMpICovCi0jZGVmaW5lIFZPWUFHRVJfTUFYX01PRFVMRVMJCQkxNgotLyogTGFyZ2VzdCBudW1iZXIgb2YgYXNpY3MgcGVyIG1vZHVsZSAqLwotI2RlZmluZSBWT1lBR0VSX01BWF9BU0lDU19QRVJfTU9EVUxFCQk3Ci0KLS8qIHRoZSBDQVQgYXNpYyBvZiBlYWNoIG1vZHVsZSBpcyBhbHdheXMgdGhlIGZpcnN0IG9uZSAqLwotI2RlZmluZSBWT1lBR0VSX0NBVF9JRAkJCQkwCi0jZGVmaW5lIFZPWUFHRVJfUFNJCQkJCTB4MWEKLQotLyogdm95YWdlciBpbnN0cnVjdGlvbiBvcGVyYXRpb25zIGFuZCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9SRUFEX0NPTkZJRwkJCTB4MQotI2RlZmluZSBWT1lBR0VSX1dSSVRFX0NPTkZJRwkJCTB4MgotI2RlZmluZSBWT1lBR0VSX0JZUEFTUwkJCQkweGZmCi0KLXR5cGVkZWYgc3RydWN0IHZveWFnZXJfYXNpYyB7Ci0JX191OAlhc2ljX2FkZHI7CS8qIEFTSUMgYWRkcmVzczsgTGV2ZWwgNCAqLwotCV9fdTgJYXNpY190eXBlOyAgICAgIC8qIEFTSUMgdHlwZSAqLwotCV9fdTgJYXNpY19pZDsJLyogQVNJQyBpZCAqLwotCV9fdTgJanRhZ19pZFs0XTsJLyogSlRBRyBpZCAqLwotCV9fdTgJYXNpY19sb2NhdGlvbjsJLyogTG9jYXRpb24gd2l0aGluIHNjYW4gcGF0aDsgc3RhcnQgdy8gMCAqLwotCV9fdTgJYml0X2xvY2F0aW9uOwkvKiBMb2NhdGlvbiB3aXRoaW4gYml0IHN0cmVhbTsgc3RhcnQgdy8gMCAqLwotCV9fdTgJaXJlZ19sZW5ndGg7CS8qIEluc3RydWN0aW9uIHJlZ2lzdGVyIGxlbmd0aCAqLwotCV9fdTE2CXN1YmFkZHI7CS8qIEFtb3VudCBvZiBzdWIgYWRkcmVzcyBzcGFjZSAqLwotCXN0cnVjdCB2b3lhZ2VyX2FzaWMgKm5leHQ7CS8qIE5leHQgYXNpYyBpbiBsaW5rZWQgbGlzdCAqLwotfSB2b3lhZ2VyX2FzaWNfdDsKLQotdHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9tb2R1bGUgewotCV9fdTgJbW9kdWxlX2FkZHI7CQkvKiBNb2R1bGUgYWRkcmVzcyAqLwotCV9fdTgJc2Nhbl9wYXRoX2Nvbm5lY3RlZDsJLyogU2NhbiBwYXRoIGNvbm5lY3RlZCAqLwotCV9fdTE2ICAgZWVfc2l6ZTsJCS8qIFNpemUgb2YgdGhlIEVFUFJPTSAqLwotCV9fdTE2ICAgbnVtX2FzaWNzOwkJLyogTnVtYmVyIG9mIEFzaWNzICovCi0JX191MTYgICBpbnN0X2JpdHM7CQkvKiBJbnN0cnVjdGlvbiBiaXRzIGluIHRoZSBzY2FuIHBhdGggKi8KLQlfX3UxNiAgIGxhcmdlc3RfcmVnOwkJLyogTGFyZ2VzdCByZWdpc3RlciBpbiB0aGUgc2NhbiBwYXRoICovCi0JX191MTYgICBzbWFsbGVzdF9yZWc7CQkvKiBTbWFsbGVzdCByZWdpc3RlciBpbiB0aGUgc2NhbiBwYXRoICovCi0Jdm95YWdlcl9hc2ljX3QgICAqYXNpYzsJCS8qIEZpcnN0IEFTSUMgaW4gc2NhbiBwYXRoIChDQVRfSSkgKi8KLQlzdHJ1Y3QgICB2b3lhZ2VyX21vZHVsZSAqc3VibW9kdWxlOwkvKiBTdWJtb2R1bGUgcG9pbnRlciAqLwotCXN0cnVjdCAgIHZveWFnZXJfbW9kdWxlICpuZXh0OwkJLyogTmV4dCBtb2R1bGUgaW4gbGlua2VkIGxpc3QgKi8KLX0gdm95YWdlcl9tb2R1bGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9lZXByb21faGRyIHsKLQkgX191OCAgbW9kdWxlX2lkWzRdOwotCSBfX3U4ICB2ZXJzaW9uX2lkOwotCSBfX3U4ICBjb25maWdfaWQ7Ci0JIF9fdTE2IGJvdW5kcnlfaWQ7CS8qIGJvdW5kYXJ5IHNjYW4gaWQgKi8KLQkgX191MTYgZWVfc2l6ZTsJCS8qIHNpemUgb2YgRUVQUk9NICovCi0JIF9fdTggIGFzc2VtYmx5WzExXTsJLyogYXNzZW1ibHkgIyAqLwotCSBfX3U4ICBhc3NlbWJseV9yZXY7CS8qIGFzc2VtYmx5IHJldiAqLwotCSBfX3U4ICB0cmFjZXJbNF07CS8qIHRyYWNlciBudW1iZXIgKi8KLQkgX191MTYgYXNzZW1ibHlfY2tzdW07CS8qIGFzbSBjaGVja3N1bSAqLwotCSBfX3UxNiBwb3dlcl9jb25zdW1wOwkvKiBwd3IgcmVxdWlyZW1lbnRzICovCi0JIF9fdTE2IG51bV9hc2ljczsJLyogbnVtYmVyIG9mIGFzaWNzICovCi0JIF9fdTE2IGJpc3RfdGltZTsJLyogbWluLiBiaXN0IHRpbWUgKi8KLQkgX191MTYgZXJyX2xvZ19vZmZzZXQ7CS8qIGVycm9yIGxvZyBvZmZzZXQgKi8KLQkgX191MTYgc2Nhbl9wYXRoX29mZnNldDsvKiBzY2FuIHBhdGggb2Zmc2V0ICovCi0JIF9fdTE2IGNjdF9vZmZzZXQ7Ci0JIF9fdTE2IGxvZ19sZW5ndGg7CS8qIGxlbmd0aCBvZiBlcnIgbG9nICovCi0JIF9fdTE2IHhzdW1fZW5kOwkvKiBvZmZzZXQgdG8gZW5kIG9mCi0JCQkJICAgY2hlY2tzdW0gKi8KLQkgX191OCAgcmVzZXJ2ZWRbNF07Ci0JIF9fdTggIHNmbGFnOwkJLyogc3RhcnRpbmcgc2VudGluYWwgKi8KLQkgX191OCAgcGFydF9udW1iZXJbMTNdOwkvKiBwcm9tIHBhcnQgbnVtYmVyICovCi0JIF9fdTggIHZlcnNpb25bMTBdOwkvKiB2ZXJzaW9uIG51bWJlciAqLwotCSBfX3U4ICBzaWduYXR1cmVbOF07Ci0JIF9fdTE2IGVlcHJvbV9jaGtzdW07Ci0JIF9fdTMyICBkYXRhX3N0YW1wX29mZnNldDsKLQkgX191OCAgZWZsYWcgOwkJIC8qIGVuZGluZyBzZW50aW5hbCAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2b3lhZ2VyX2Vwcm9tX2hkcl90OwotCi0KLQotI2RlZmluZSBWT1lBR0VSX0VQUk9NX1NJWkVfT0ZGU0VUCQkJCVwKLQkoKF9fdTE2KSgmKCgodm95YWdlcl9lcHJvbV9oZHJfdCAqKTApLT5lZV9zaXplKSkpCi0jZGVmaW5lIFZPWUFHRVJfWFNVTV9FTkRfT0ZGU0VUCQkweDJhCi0KLS8qIHRoZSBmb2xsb3dpbmcgdGhyZWUgZGVmaW5pdGlvbnMgYXJlIGZvciBpbnRlcm5hbCB0YWJsZSBsYXlvdXRzCi0gKiBpbiB0aGUgbW9kdWxlIEVQUk9Ncy4gIFdlIHJlYWxseSBvbmx5IGNhcmUgYWJvdXQgdGhlIElEcyBhbmQKLSAqIG9mZnNldHMgKi8KLXR5cGVkZWYgc3RydWN0IHZveWFnZXJfc3BfdGFibGUgewotCV9fdTggYXNpY19pZDsKLQlfX3U4IGJ5cGFzc19mbGFnOwotCV9fdTE2IGFzaWNfZGF0YV9vZmZzZXQ7Ci0JX191MTYgY29uZmlnX2RhdGFfb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2b3lhZ2VyX3NwX3RhYmxlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHZveWFnZXJfanRhZ190YWJsZSB7Ci0JX191OCBpY29kZVs0XTsKLQlfX3U4IHJ1bmJpc3RbNF07Ci0JX191OCBpbnRlc3RbNF07Ci0JX191OCBzYW1wX3ByZWxkWzRdOwotCV9fdTggaXJlZ19sZW47Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZveWFnZXJfanR0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHZveWFnZXJfYXNpY19kYXRhX3RhYmxlIHsKLQlfX3U4IGp0YWdfaWRbNF07Ci0JX191MTYgbGVuZ3RoX2JzcjsKLQlfX3UxNiBsZW5ndGhfYmlzdF9yZWc7Ci0JX191MzIgYmlzdF9jbGs7Ci0JX191MTYgc3ViYWRkcl9iaXRzOwotCV9fdTE2IHNlZWRfYml0czsKLQlfX3UxNiBzaWdfYml0czsKLQlfX3UxNiBqdGFnX29mZnNldDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdm95YWdlcl9hdF90OwotCi0vKiBWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIChWSUMpIHJlZ2lzdGVycyAqLwotCi0vKiBCYXNlIHRvIGFkZCB0byBDcm9zcyBQcm9jZXNzb3IgSW50ZXJydXB0cyAoQ1BJcykgd2hlbiB0cmlnZ2VyaW5nCi0gKiB0aGUgQ1BVIElSUSBsaW5lICovCi0vKiByZWdpc3RlciBkZWZpbmVzIGZvciB0aGUgV0NCSUNzIChvbmUgcGVyIHByb2Nlc3NvcikgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzAJMHg0MQkJLyogYnVzIEEgbm9kZSBQMSBwcm9jZXNzb3IgMCAqLwotI2RlZmluZSBWT1lBR0VSX1dDQklDMQkweDQ5CQkvKiBidXMgQSBub2RlIFAxIHByb2Nlc3NvciAxICovCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUMyCTB4NTEJCS8qIGJ1cyBBIG5vZGUgUDIgcHJvY2Vzc29yIDAgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzMJMHg1OQkJLyogYnVzIEEgbm9kZSBQMiBwcm9jZXNzb3IgMSAqLwotI2RlZmluZSBWT1lBR0VSX1dDQklDNAkweDYxCQkvKiBidXMgQiBub2RlIFAxIHByb2Nlc3NvciAwICovCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUM1CTB4NjkJCS8qIGJ1cyBCIG5vZGUgUDEgcHJvY2Vzc29yIDEgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzYJMHg3MQkJLyogYnVzIEIgbm9kZSBQMiBwcm9jZXNzb3IgMCAqLwotI2RlZmluZSBWT1lBR0VSX1dDQklDNwkweDc5CQkvKiBidXMgQiBub2RlIFAyIHByb2Nlc3NvciAxICovCi0KLQotLyogdG9wIG9mIG1lbW9yeSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQ19UT01fTAkweDQKLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQ19UT01fSAkweDUKLQotLyogcmVnaXN0ZXIgZGVmaW5lcyBmb3IgVm95YWdlciBNZW1vcnkgQ29udG9sIChWTUMpCi0gKiB0aGVzZSBhcmUgcHJlc2VudCBvbiBMNCBtYWNoaW5lcyBvbmx5ICovCi0jZGVmaW5lCVZPWUFHRVJfVk1DMQkJMHg4MQotI2RlZmluZSBWT1lBR0VSX1ZNQzIJCTB4OTEKLSNkZWZpbmUgVk9ZQUdFUl9WTUMzCQkweGExCi0jZGVmaW5lIFZPWUFHRVJfVk1DNAkJMHhiMQotCi0vKiBWTUMgUG9ydHMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9WTUNfTUVNT1JZX1NFVFVQCTB4OQotIwlkZWZpbmUgVk1DX0ludGVybGVhdmluZwkJMHgwMQotIwlkZWZpbmUgVk1DXzRXYXkJCQkweDAyCi0jCWRlZmluZSBWTUNfRXZlbkNhY2hlTGluZXMJMHgwNAotIwlkZWZpbmUgVk1DX0hpZ2hMaW5lCQkweDA4Ci0jCWRlZmluZSBWTUNfU3RhcnQwX0VuYWJsZQkweDIwCi0jCWRlZmluZSBWTUNfU3RhcnQxX0VuYWJsZQkweDQwCi0jCWRlZmluZSBWTUNfVnJlbWFwCQkweDgwCi0jZGVmaW5lIFZPWUFHRVJfVk1DX0JBTktfREVOU0lUWQkweGEKLSMJZGVmaW5lCVZNQ19CQU5LX0VNUFRZCQkwCi0jCWRlZmluZQlWTUNfQkFOS180TUIJCTEKLSMJZGVmaW5lCVZNQ19CQU5LXzE2TUIJCTIKLSMJZGVmaW5lCVZNQ19CQU5LXzY0TUIJCTMKLSMJZGVmaW5lCVZNQ19CQU5LMF9NQVNLCQkweDAzCi0jCWRlZmluZQlWTUNfQkFOSzFfTUFTSwkJMHgwQwotIwlkZWZpbmUJVk1DX0JBTksyX01BU0sJCTB4MzAKLSMJZGVmaW5lCVZNQ19CQU5LM19NQVNLCQkweEMwCi0KLS8qIE1hZ2VsbGFuIE1lbW9yeSBDb250cm9sbGVyIChNTUMpIGRlZmluZXMgLSBwcmVzZW50IG9uIEw1ICovCi0jZGVmaW5lIFZPWUFHRVJfTU1DX0FTSUNfSUQJCTEKLS8qIHRoZSB0d28gbWVtb3J5IG1vZHVsZXMgY29ycmVzcG9uZGluZyB0byBtZW1vcnkgY2FyZHMgaW4gdGhlIHN5c3RlbSAqLwotI2RlZmluZSBWT1lBR0VSX01NQ19NRU1PUlkwX01PRFVMRQkweDE0Ci0jZGVmaW5lIFZPWUFHRVJfTU1DX01FTU9SWTFfTU9EVUxFCTB4MTUKLS8qIHRoZSBNYWdlbGxhbiBNZW1vcnkgQWRkcmVzcyAoTU1BKSBkZWZpbmVzICovCi0jZGVmaW5lIFZPWUFHRVJfTU1BX0FTSUNfSUQJCTIKLQotLyogU3VibW9kdWxlIG51bWJlciBmb3IgdGhlIFF1YWQgQmFzZWJvYXJkICovCi0jZGVmaW5lIFZPWUFHRVJfUVVBRF9CQVNFQk9BUkQJCTEKLQotLyogQVNJQyBkZWZpbmVzIGZvciB0aGUgUXVhZCBCYXNlYm9hcmQgKi8KLSNkZWZpbmUgVk9ZQUdFUl9RVUFEX1FEQVRBMAkJMQotI2RlZmluZSBWT1lBR0VSX1FVQURfUURBVEExCQkyCi0jZGVmaW5lIFZPWUFHRVJfUVVBRF9RQUJDCQkzCi0KLS8qIFVzZWZ1bCBhcmVhcyBpbiBleHRlbmRlZCBDTU9TICovCi0jZGVmaW5lIFZPWUFHRVJfUFJPQ0VTU09SX1BSRVNFTlRfTUFTSwkweDg4YQotI2RlZmluZSBWT1lBR0VSX01FTU9SWV9DTElDS01BUAkJMHhhMjMKLSNkZWZpbmUgVk9ZQUdFUl9EVU1QX0xPQ0FUSU9OCQkweGIxYQotCi0vKiBTVVMgSW4gQ29udHJvbCBiaXQgLSB1c2VkIHRvIHRlbGwgU1VTIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBiZQotICogYmFieXNhdCBhbnltb3JlICovCi0jZGVmaW5lIFZPWUFHRVJfU1VTX0lOX0NPTlRST0xfUE9SVAkweDNmZgotIwlkZWZpbmUgVk9ZQUdFUl9JTl9DT05UUk9MX0ZMQUcJMHg4MAotCi0vKiBWb3lhZ2VyIFBTSSBkZWZpbmVzICovCi0jZGVmaW5lIFZPWUFHRVJfUFNJX1NUQVRVU19SRUcJCTB4MDgKLSMJZGVmaW5lIFBTSV9EQ19GQUlMCQkweDAxCi0jCWRlZmluZSBQU0lfTU9OCQkJMHgwMgotIwlkZWZpbmUgUFNJX0ZBVUxUCQkweDA0Ci0jCWRlZmluZSBQU0lfQUxBUk0JCTB4MDgKLSMJZGVmaW5lIFBTSV9DVVJSRU5UCQkweDEwCi0jCWRlZmluZSBQU0lfRFZNCQkJMHgyMAotIwlkZWZpbmUgUFNJX1BTQ0ZBVUxUCQkweDQwCi0jCWRlZmluZSBQU0lfU1RBVF9DSEcJCTB4ODAKLQotI2RlZmluZSBWT1lBR0VSX1BTSV9TVVBQTFlfUkVHCQkweDgwMDAKLQkvKiByZWFkICovCi0jCWRlZmluZSBQU0lfRkFJTF9EQwkJMHgwMQotIwlkZWZpbmUgUFNJX0ZBSUxfQUMJCTB4MDIKLSMJZGVmaW5lIFBTSV9NT05fSU5UCQkweDA0Ci0jCWRlZmluZSBQU0lfU1dJVENIX09GRgkJMHgwOAotIwlkZWZpbmUgUFNJX0hYX09GRgkJMHgxMAotIwlkZWZpbmUgUFNJX1NFQ1VSSVRZCQkweDIwCi0jCWRlZmluZSBQU0lfQ01PU19CQVRUX0xPVwkweDQwCi0jCWRlZmluZSBQU0lfQ01PU19CQVRUX0ZBSUwJMHg4MAotCS8qIHdyaXRlICovCi0jCWRlZmluZSBQU0lfQ0xSX1NXSVRDSF9PRkYJMHgxMwotIwlkZWZpbmUgUFNJX0NMUl9IWF9PRkYJCTB4MTQKLSMJZGVmaW5lIFBTSV9DTFJfQ01PU19CQVRUX0ZBSUwJMHgxNwotCi0jZGVmaW5lIFZPWUFHRVJfUFNJX01BU0sJCTB4ODAwMQotIwlkZWZpbmUgUFNJX01BU0tfTUFTSwkJMHgxMAotCi0jZGVmaW5lIFZPWUFHRVJfUFNJX0FDX0ZBSUxfUkVHCQkweDgwMDQKLSNkZWZpbmUJQUNfRkFJTF9TVEFUX0NIQU5HRQkJMHg4MAotCi0jZGVmaW5lIFZPWUFHRVJfUFNJX0dFTkVSQUxfUkVHCQkweDgwMDcKLQkvKiByZWFkICovCi0jCWRlZmluZSBQU0lfU1dJVENIX09OCQkweDAxCi0jCWRlZmluZSBQU0lfU1dJVENIX0VOQUJMRUQJMHgwMgotIwlkZWZpbmUgUFNJX0FMQVJNX0VOQUJMRUQJMHgwOAotIwlkZWZpbmUgUFNJX1NFQ1VSRV9FTkFCTEVECTB4MTAKLSMJZGVmaW5lIFBTSV9DT0xEX1JFU0VUCQkweDIwCi0jCWRlZmluZSBQU0lfQ09MRF9TVEFSVAkJMHg4MAotCS8qIHdyaXRlICovCi0jCWRlZmluZSBQU0lfUE9XRVJfRE9XTgkJMHgxMAotIwlkZWZpbmUgUFNJX1NXSVRDSF9ESVNBQkxFCTB4MDEKLSMJZGVmaW5lIFBTSV9TV0lUQ0hfRU5BQkxFCTB4MTEKLSMJZGVmaW5lIFBTSV9DTEVBUgkJMHgxMgotIwlkZWZpbmUgUFNJX0FMQVJNX0RJU0FCTEUJMHgwMwotIwlkZWZpbmUgUFNJX0FMQVJNX0VOQUJMRQkJMHgxMwotIwlkZWZpbmUgUFNJX0NMRUFSX0NPTERfUkVTRVQJMHgwNQotIwlkZWZpbmUgUFNJX1NFVF9DT0xEX1JFU0VUCTB4MTUKLSMJZGVmaW5lIFBTSV9DTEVBUl9DT0xEX1NUQVJUCTB4MDcKLSMJZGVmaW5lIFBTSV9TRVRfQ09MRF9TVEFSVAkweDE3Ci0KLQotCi1zdHJ1Y3Qgdm95YWdlcl9iaW9zX2luZm8gewotCV9fdTgJbGVuOwotCV9fdTgJbWFqb3I7Ci0JX191OAltaW5vcjsKLQlfX3U4CWRlYnVnOwotCV9fdTgJbnVtX2NsYXNzZXM7Ci0JX191OAljbGFzc18xOwotCV9fdTgJY2xhc3NfMjsKLX07Ci0KLS8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgYXJlIGZvciB0aGUgS2VybmVsL1NVUwotICogaW50ZXJmYWNlIHRoZXNlIGFyZSBuZWVkZWQgdG8gZmluZCBvdXQgaG93IFNVUyBpbml0aWFsaXNlZCBhbnkgUXVhZAotICogYm9hcmRzIGluIHRoZSBzeXN0ZW0gKi8KLQotI2RlZmluZQlOVU1CRVJfT0ZfTUNfQlVTU0VTCTIKLSNkZWZpbmUgU0xPVFNfUEVSX01DX0JVUwk4Ci0jZGVmaW5lIE1BWF9DUFVTICAgICAgICAgICAgICAgIDE2ICAgICAgLyogMTYgd2F5IENQVSBzeXN0ZW0gKi8KLSNkZWZpbmUgTUFYX1BST0NFU1NPUl9CT0FSRFMJNAkvKiA0IHByb2Nlc3NvciBzbG90IHN5c3RlbSAqLwotI2RlZmluZSBNQVhfQ0FDSEVfTEVWRUxTCTQJLyogIyBvZiBjYWNoZSBsZXZlbHMgc3VwcG9ydGVkICovCi0jZGVmaW5lIE1BWF9TSEFSRURfQ1BVUwkJNAkvKiAjIG9mIENQVXMgdGhhdCBjYW4gc2hhcmUgYSBMQVJDICovCi0jZGVmaW5lIE5VTUJFUl9PRl9QT1NfUkVHUwk4Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlfX3U4CU1DX1Nsb3Q7Ci0JX191OAlQT1NfVmFsdWVzW05VTUJFUl9PRl9QT1NfUkVHU107Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIE1DX1Nsb3RJbmZvcm1hdGlvbl90OwotCi1zdHJ1Y3QgUXVhZERlc2NyaXB0aW9uIHsKLQlfX3U4ICBUeXBlOwkvKiBmb3IgdHlwZSAwIChEWUFESUMgb3IgTU9OQURJQykgYWxsIGZpZWxkcwotCQkJICogd2lsbCBiZSB6ZXJvIGV4Y2VwdCBmb3Igc2xvdCAqLwotCV9fdTggU3RydWN0dXJlVmVyc2lvbjsKLQlfX3UzMiBDUElfQmFzZUFkZHJlc3M7Ci0JX191MzIgIExBUkNfQmFua1NpemU7Ci0JX191MzIgTG9jYWxNZW1vcnlTdGF0ZUJpdHM7Ci0JX191OCAgU2xvdDsgLyogUHJvY2Vzc29yIHNsb3RzIDEgLSA0ICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgUHJvY0JvYXJkSW5mbyB7Ci0JX191OCBUeXBlOwotCV9fdTggU3RydWN0dXJlVmVyc2lvbjsKLQlfX3U4IE51bWJlck9mQm9hcmRzOwotCXN0cnVjdCBRdWFkRGVzY3JpcHRpb24gUXVhZERhdGFbTUFYX1BST0NFU1NPUl9CT0FSRFNdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IENhY2hlRGVzY3JpcHRpb24gewotCV9fdTggTGV2ZWw7Ci0JX191MzIgVG90YWxTaXplOwotCV9fdTE2IExpbmVTaXplOwotCV9fdTggIEFzc29jaWF0aXZpdHk7Ci0JX191OCAgQ2FjaGVUeXBlOwotCV9fdTggIFdyaXRlVHlwZTsKLQlfX3U4ICBOdW1iZXJfQ1BVc19TaGFyZWRCeTsKLQlfX3U4ICBTaGFyZWRfQ1BVc19IYXJkd2FyZV9JRHNbTUFYX1NIQVJFRF9DUFVTXTsKLQotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IENQVV9EZXNjcmlwdGlvbiB7Ci0JX191OCBDUFVfSGFyZHdhcmVJZDsKLQljaGFyICpGUlVfU3RyaW5nOwotCV9fdTggTnVtYmVyT2ZDYWNoZUxldmVsczsKLQlzdHJ1Y3QgQ2FjaGVEZXNjcmlwdGlvbiBDYWNoZUxldmVsRGF0YVtNQVhfQ0FDSEVfTEVWRUxTXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBDUFVfSW5mbyB7Ci0JX191OCBUeXBlOwotCV9fdTggU3RydWN0dXJlVmVyc2lvbjsKLQlfX3U4IE51bWJlck9mX0NQVXM7Ci0Jc3RydWN0IENQVV9EZXNjcmlwdGlvbiBDUFVfRGF0YVtNQVhfQ1BVU107Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSB3aWxsIGJlIHVzZWQgYnkgU1VTIGFuZCB0aGUgT1MuCi0gKiBUaGUgYXNzdW1wdGlvbiBhYm91dCB0aGlzIHN0cnVjdHVyZSBpcyB0aGF0IG5vIGJsYW5rIHNwYWNlIGlzCi0gKiBwYWNrZWQgaW4gaXQgYnkgb3VyIGZyaWVuZCB0aGUgY29tcGlsZXIuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlfX3U4CU1haWxib3hfU1VTOwkJLyogV3JpdHRlbiB0byBieSBTVVMgdG8gZ2l2ZQotCQkJCQkgICBjb21tYW5kcy9yZXNwb25zZSB0byB0aGUgT1MgKi8KLQlfX3U4CU1haWxib3hfT1M7CQkvKiBXcml0dGVuIHRvIGJ5IHRoZSBPUyB0byBnaXZlCi0JCQkJCSAgIGNvbW1hbmRzL3Jlc3BvbnNlIHRvIFNVUyAqLwotCV9fdTgJU1VTX01haWxib3hWZXJzaW9uOwkvKiBUZWxscyB0aGUgT1Mgd2hpY2ggaXRlcmF0aW9uIG9mIHRoZQotCQkJCQkgICBpbnRlcmZhY2UgU1VTIHN1cHBvcnRzICovCi0JX191OAlPU19NYWlsYm94VmVyc2lvbjsJLyogVGVsbHMgU1VTIHdoaWNoIGl0ZXJhdGlvbiBvZiB0aGUKLQkJCQkJICAgaW50ZXJmYWNlIHRoZSBPUyBzdXBwb3J0cyAqLwotCV9fdTMyCU9TX0ZsYWdzOwkJLyogRmxhZ3Mgc2V0IGJ5IHRoZSBPUyBhcyBpbmZvIGZvcgotCQkJCQkgICBTVVMgKi8KLQlfX3UzMglTVVNfRmxhZ3M7CQkvKiBGbGFncyBzZXQgYnkgU1VTIGFzIGluZm8KLQkJCQkJICAgZm9yIHRoZSBPUyAqLwotCV9fdTMyCVdhdGNoRG9nUGVyaW9kOwkJLyogV2F0Y2hkb2cgcGVyaW9kIChpbiBzZWNvbmRzKSB3aGljaAotCQkJCQkgICB0aGUgRFAgdXNlcyB0byBzZWUgaWYgdGhlIE9TCi0JCQkJCSAgIGlzIGRlYWQgKi8KLQlfX3UzMglXYXRjaERvZ0NvdW50OwkJLyogVXBkYXRlZCBieSB0aGUgT1Mgb24gZXZlcnkgdGljLiAqLwotCV9fdTMyCU1lbW9yeUZvcl9TVVNfRXJyb3JMb2c7CS8qIEZsYXQgMzIgYml0IGFkZHJlc3Mgd2hpY2ggdGVsbHMgU1VTCi0JCQkJCSAgIHdoZXJlIHRvIHN0dWZmIHRoZSBTVVMgZXJyb3IgbG9nCi0JCQkJCSAgIG9uIGEgZHVtcCAqLwotCU1DX1Nsb3RJbmZvcm1hdGlvbl90IE1DX1Nsb3RJbmZvW05VTUJFUl9PRl9NQ19CVVNTRVMqU0xPVFNfUEVSX01DX0JVU107Ci0JCQkJCS8qIFN0b3JhZ2UgZm9yIE1DQSBQT1MgZGF0YSAqLwotCS8qIEFsbCBuZXcgU0VDT05EX1BBU1NfSU5URVJGQUNFIGZpZWxkcyBhZGRlZCBmcm9tIHRoaXMgcG9pbnQgKi8KLQlzdHJ1Y3QgUHJvY0JvYXJkSW5mbyAgICAqQm9hcmREYXRhOwotCXN0cnVjdCBDUFVfSW5mbyAgICAgICAgICpDUFVfRGF0YTsKLQkvKiBBbGwgbmV3IGZpZWxkcyBtdXN0IGJlIGFkZGVkIGZyb20gdGhpcyBwb2ludCAqLwotfSBWb3lhZ2VyX0tlcm5lbFNVU19NYm94X3Q7Ci0KLS8qIHN0cnVjdHVyZSBmb3IgZmluZGluZyB0aGUgcmlnaHQgbWVtb3J5IGFkZHJlc3MgdG8gc2VuZCBhIFFJQyBDUEkgdG8gKi8KLXN0cnVjdCB2b3lhZ2VyX3FpY19jcGkgewotCS8qIEVhY2ggY2FjaGUgbGluZSAoMzIgYnl0ZXMpIGNhbiB0cmlnZ2VyIGEgY3BpLiAgVGhlIGNwaQotCSAqIHJlYWQvd3JpdGUgbWF5IG9jY3VyIGFueXdoZXJlIGluIHRoZSBjYWNoZSBsaW5lLS0tcGljayB0aGUKLQkgKiBtaWRkbGUgdG8gYmUgc2FmZSAqLwotCXN0cnVjdCAgewotCQlfX3UzMiBwYWQxWzNdOwotCQlfX3UzMiBjcGk7Ci0JCV9fdTMyIHBhZDJbNF07Ci0JfSBxaWNfY3BpWzhdOwotfTsKLQotc3RydWN0IHZveWFnZXJfc3RhdHVzIHsKLQlfX3UzMglwb3dlcl9mYWlsOjE7Ci0JX191MzIJc3dpdGNoX29mZjoxOwotCV9fdTMyCXJlcXVlc3RfZnJvbV9rZXJuZWw6MTsKLX07Ci0KLXN0cnVjdCB2b3lhZ2VyX3BzaV9yZWdzIHsKLQlfX3U4IGNhdF9pZDsKLQlfX3U4IGNhdF9kZXY7Ci0JX191OCBjYXRfY29udHJvbDsKLQlfX3U4IHN1YmFkZHI7Ci0JX191OCBkdW1teTQ7Ci0JX191OCBjaGVja2JpdDsKLQlfX3U4IHN1YmFkZHJfbG93OwotCV9fdTggc3ViYWRkcl9oaWdoOwotCV9fdTggaW50c3RhdHVzOwotCV9fdTggc3RhdDE7Ci0JX191OCBzdGF0MzsKLQlfX3U4IGZhdWx0OwotCV9fdTggdG1zOwotCV9fdTggZ2VuOwotCV9fdTggc3lzY29uZjsKLQlfX3U4IGR1bW15MTU7Ci19OwotCi1zdHJ1Y3Qgdm95YWdlcl9wc2lfc3VicmVncyB7Ci0JX191OCBzdXBwbHk7Ci0JX191OCBtYXNrOwotCV9fdTggcHJlc2VudDsKLQlfX3U4IERDZmFpbDsKLQlfX3U4IEFDZmFpbDsKLQlfX3U4IGZhaWw7Ci0JX191OCBVUFNmYWlsOwotCV9fdTggZ2Vuc3RhdHVzOwotfTsKLQotc3RydWN0IHZveWFnZXJfcHNpIHsKLQlzdHJ1Y3Qgdm95YWdlcl9wc2lfcmVncyByZWdzOwotCXN0cnVjdCB2b3lhZ2VyX3BzaV9zdWJyZWdzIHN1YnJlZ3M7Ci19OwotCi1zdHJ1Y3Qgdm95YWdlcl9TVVMgewotI2RlZmluZQlWT1lBR0VSX0RVTVBfQlVUVE9OX05NSQkJMHgxCi0jZGVmaW5lIFZPWUFHRVJfU1VTX1ZBTElECQkweDIKLSNkZWZpbmUgVk9ZQUdFUl9TWVNJTlRfQ09NUExFVEUJCTB4MwotCV9fdTgJU1VTX21ib3g7Ci0jZGVmaW5lIFZPWUFHRVJfTk9fQ09NTUFORAkJMHgwCi0jZGVmaW5lIFZPWUFHRVJfSUdOT1JFX0RVTVAJCTB4MQotI2RlZmluZSBWT1lBR0VSX0RPX0RVTVAJCQkweDIKLSNkZWZpbmUgVk9ZQUdFUl9TWVNJTlRfSEFORFNIQUtFCTB4MwotI2RlZmluZSBWT1lBR0VSX0RPX01FTV9EVU1QCQkweDQKLSNkZWZpbmUgVk9ZQUdFUl9TWVNJTlRfV0FTX1JFQ09WRVJFRAkweDUKLQlfX3U4CWtlcm5lbF9tYm94OwotI2RlZmluZQlWT1lBR0VSX01BSUxCT1hfVkVSU0lPTgkJMHgxMAotCV9fdTgJU1VTX3ZlcnNpb247Ci0JX191OAlrZXJuZWxfdmVyc2lvbjsKLSNkZWZpbmUgVk9ZQUdFUl9PU19IQVNfU1lTSU5UCQkweDEKLSNkZWZpbmUgVk9ZQUdFUl9PU19JTl9QUk9HUkVTUwkJMHgyCi0jZGVmaW5lIFZPWUFHRVJfVVBEQVRJTkdfV0RQRVJJT0QJMHg0Ci0JX191MzIJa2VybmVsX2ZsYWdzOwotI2RlZmluZSBWT1lBR0VSX1NVU19CT09USU5HCQkweDEKLSNkZWZpbmUgVk9ZQUdFUl9TVVNfSU5fUFJPR1JFU1MJCTB4MgotCV9fdTMyCVNVU19mbGFnczsKLQlfX3UzMgl3YXRjaGRvZ19wZXJpb2Q7Ci0JX191MzIJd2F0Y2hkb2dfY291bnQ7Ci0JX191MzIJU1VTX2Vycm9ybG9nOwotCS8qIGxvdHMgb2Ygc3lzdGVtIGNvbmZpZ3VyYXRpb24gc3R1ZmYgdW5kZXIgaGVyZSAqLwotfTsKLQotLyogVmFyaWFibGVzIGV4cG9ydGVkIGJ5IHZveWFnZXJfc21wICovCi1leHRlcm4gX191MzIgdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29yczsKLWV4dGVybiBfX3UzMiB2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzOwotZXh0ZXJuIF9fdTMyIHZveWFnZXJfcXVhZF9wcm9jZXNzb3JzOwotZXh0ZXJuIHN0cnVjdCB2b3lhZ2VyX3FpY19jcGkgKnZveWFnZXJfcXVhZF9jcGlfYWRkcltOUl9DUFVTXTsKLWV4dGVybiBzdHJ1Y3Qgdm95YWdlcl9TVVMgKnZveWFnZXJfU1VTOwotCi0vKiB2YXJpYWJsZXMgZXhwb3J0ZWQgYWx3YXlzICovCi1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICp2b3lhZ2VyX3RocmVhZDsKLWV4dGVybiBpbnQgdm95YWdlcl9sZXZlbDsKLWV4dGVybiBzdHJ1Y3Qgdm95YWdlcl9zdGF0dXMgdm95YWdlcl9zdGF0dXM7Ci0KLS8qIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUgdm95YWdlciBhbmQgdm95YWdlcl9zbXAgbW9kdWxlcyAqLwotZXh0ZXJuIGludCB2b3lhZ2VyX2NhdF9yZWFkYihfX3U4IG1vZHVsZSwgX191OCBhc2ljLCBpbnQgcmVnKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfY2F0X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX2RldGVjdChzdHJ1Y3Qgdm95YWdlcl9iaW9zX2luZm8gKik7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX3RyYXBfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfc2V0dXBfaXJxcyh2b2lkKTsKLWV4dGVybiBpbnQgdm95YWdlcl9tZW1vcnlfZGV0ZWN0KGludCByZWdpb24sIF9fdTMyICphZGRyLCBfX3UzMiAqbGVuZ3RoKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfc21wX2ludHJfaW5pdCh2b2lkKTsKLWV4dGVybiBfX3U4IHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKF9fdTE2IGNtb3NfYWRkcmVzcyk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX3NtcF9kdW1wKHZvaWQpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl90aW1lcl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl9wb3dlcl9vZmYodm9pZCk7Ci1leHRlcm4gdm9pZCBzbXBfdm95YWdlcl9wb3dlcl9vZmYodm9pZCAqZHVtbXkpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl9yZXN0YXJ0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl9jYXRfcG93ZXJfb2ZmKHZvaWQpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl9jYXRfZG9fY29tbW9uX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfaGFuZGxlX25taSh2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfc21wX2ludHJfaW5pdCh2b2lkKTsKLS8qIENvbW1hbmRzIGZvciB0aGUgZm9sbG93aW5nIGFyZSAqLwotI2RlZmluZQlWT1lBR0VSX1BTSV9SRUFECTAKLSNkZWZpbmUgVk9ZQUdFUl9QU0lfV1JJVEUJMQotI2RlZmluZSBWT1lBR0VSX1BTSV9TVUJSRUFECTIKLSNkZWZpbmUgVk9ZQUdFUl9QU0lfU1VCV1JJVEUJMwotZXh0ZXJuIHZvaWQgdm95YWdlcl9jYXRfcHNpKF9fdTgsIF9fdTE2LCBfX3U4ICopOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oCmluZGV4IDE5MTQ0MTguLjFkZjM1NDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKQEAgLTE1LDEwICsxNSw0IEBACiAJcmV0dXJuIHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHJlZ3MtPmZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHhlbl9kb19JUlEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmVncy0+b3JpZ19heCA9IH5pcnE7Ci0JZG9fSVJRKHJlZ3MpOwotfQotCiAjZW5kaWYgLyogX0FTTV9YODZfWEVOX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaAppbmRleCA4MWZiZDczLi5kNWI3ZTkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmgKQEAgLTM4LDIyICszOCwzMCBAQAogZXh0ZXJuIHN0cnVjdCBzdGFydF9pbmZvICp4ZW5fc3RhcnRfaW5mbzsKIAogZW51bSB4ZW5fZG9tYWluX3R5cGUgewotCVhFTl9OQVRJVkUsCi0JWEVOX1BWX0RPTUFJTiwKLQlYRU5fSFZNX0RPTUFJTiwKKwlYRU5fTkFUSVZFLAkJLyogcnVubmluZyBvbiBiYXJlIGhhcmR3YXJlICAgICovCisJWEVOX1BWX0RPTUFJTiwJCS8qIHJ1bm5pbmcgaW4gYSBQViBkb21haW4gICAgICAqLworCVhFTl9IVk1fRE9NQUlOLAkJLyogcnVubmluZyBpbiBhIFhlbiBodm0gZG9tYWluICovCiB9OwogCi1leHRlcm4gZW51bSB4ZW5fZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlOwotCiAjaWZkZWYgQ09ORklHX1hFTgotI2RlZmluZSB4ZW5fZG9tYWluKCkJCSh4ZW5fZG9tYWluX3R5cGUgIT0gWEVOX05BVElWRSkKK2V4dGVybiBlbnVtIHhlbl9kb21haW5fdHlwZSB4ZW5fZG9tYWluX3R5cGU7CiAjZWxzZQotI2RlZmluZSB4ZW5fZG9tYWluKCkJCSgwKQorI2RlZmluZSB4ZW5fZG9tYWluX3R5cGUJCVhFTl9OQVRJVkUKICNlbmRpZgogCi0jZGVmaW5lIHhlbl9wdl9kb21haW4oKQkJKHhlbl9kb21haW4oKSAmJiB4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX1BWX0RPTUFJTikKLSNkZWZpbmUgeGVuX2h2bV9kb21haW4oKQkoeGVuX2RvbWFpbigpICYmIHhlbl9kb21haW5fdHlwZSA9PSBYRU5fSFZNX0RPTUFJTikKKyNkZWZpbmUgeGVuX2RvbWFpbigpCQkoeGVuX2RvbWFpbl90eXBlICE9IFhFTl9OQVRJVkUpCisjZGVmaW5lIHhlbl9wdl9kb21haW4oKQkJKHhlbl9kb21haW4oKSAmJgkJCVwKKwkJCQkgeGVuX2RvbWFpbl90eXBlID09IFhFTl9QVl9ET01BSU4pCisjZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKHhlbl9kb21haW4oKSAmJgkJCVwKKwkJCQkgeGVuX2RvbWFpbl90eXBlID09IFhFTl9IVk1fRE9NQUlOKQogCi0jZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpCSh4ZW5fcHZfZG9tYWluKCkgJiYgeGVuX3N0YXJ0X2luZm8tPmZsYWdzICYgU0lGX0lOSVRET01BSU4pCisjaWZkZWYgQ09ORklHX1hFTl9ET00wCisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKworI2RlZmluZSB4ZW5faW5pdGlhbF9kb21haW4oKQkoeGVuX3B2X2RvbWFpbigpICYmIFwKKwkJCQkgeGVuX3N0YXJ0X2luZm8tPmZsYWdzICYgU0lGX0lOSVRET01BSU4pCisjZWxzZSAgLyogIUNPTkZJR19YRU5fRE9NMCAqLworI2RlZmluZSB4ZW5faW5pdGlhbF9kb21haW4oKQkoMCkKKyNlbmRpZgkvKiBDT05GSUdfWEVOX0RPTTAgKi8KIAogI2VuZGlmIC8qIF9BU01fWDg2X1hFTl9IWVBFUlZJU09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCmluZGV4IDRiZDk5MGUuLjFhOTE4ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaApAQCAtMTY0LDYgKzE2NCw3IEBACiAKIAogeG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICphZGRyZXNzKTsKK3Vuc2lnbmVkIGxvbmcgYXJiaXRyYXJ5X3ZpcnRfdG9fbWZuKHZvaWQgKnZhZGRyKTsKIHZvaWQgbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seSh2b2lkICp2YWRkcik7CiB2b2lkIG1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKHZvaWQgKnZhZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGQzNjRkZjAuLjk1ZjIxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTIzLDExICsyMywxMiBAQAogQ0ZMQUdTX3ZzeXNjYWxsXzY0Lm8JOj0gJChQUk9GSUxJTkcpIC1nMCAkKG5vc3RhY2twKQogQ0ZMQUdTX2hwZXQubwkJOj0gJChub3N0YWNrcCkKIENGTEFHU190c2MubwkJOj0gJChub3N0YWNrcCkKK0NGTEFHU19wYXJhdmlydC5vCTo9ICQobm9zdGFja3ApCiAKIG9iai15CQkJOj0gcHJvY2Vzc18kKEJJVFMpLm8gc2lnbmFsLm8gZW50cnlfJChCSVRTKS5vCiBvYmoteQkJCSs9IHRyYXBzLm8gaXJxLm8gaXJxXyQoQklUUykubyBkdW1wc3RhY2tfJChCSVRTKS5vCiBvYmoteQkJCSs9IHRpbWVfJChCSVRTKS5vIGlvcG9ydC5vIGxkdC5vIGR1bXBzdGFjay5vCi1vYmoteQkJCSs9IHNldHVwLm8gaTgyNTkubyBpcnFpbml0XyQoQklUUykubyBzZXR1cF9wZXJjcHUubworb2JqLXkJCQkrPSBzZXR1cC5vIGk4MjU5Lm8gaXJxaW5pdF8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19YODZfVklTV1MpCSs9IHZpc3dzX3F1aXJrcy5vCiBvYmotJChDT05GSUdfWDg2XzMyKQkrPSBwcm9iZV9yb21zXzMyLm8KIG9iai0kKENPTkZJR19YODZfMzIpCSs9IHN5c19pMzg2XzMyLm8gaTM4Nl9rc3ltc18zMi5vCkBAIC00OSwzMSArNTAsMjcgQEAKIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KIG9iai15CQkJCSs9IGNwdS8KIG9iai15CQkJCSs9IGFjcGkvCi1vYmotJChDT05GSUdfWDg2X0JJT1NfUkVCT09UKQkrPSByZWJvb3Qubworb2JqLXkJCQkJKz0gcmVib290Lm8KIG9iai0kKENPTkZJR19NQ0EpCQkrPSBtY2FfMzIubwogb2JqLSQoQ09ORklHX1g4Nl9NU1IpCQkrPSBtc3Iubwogb2JqLSQoQ09ORklHX1g4Nl9DUFVJRCkJCSs9IGNwdWlkLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBlYXJseS1xdWlya3MubwogYXBtLXkJCQkJOj0gYXBtXzMyLm8KIG9iai0kKENPTkZJR19BUE0pCQkrPSBhcG0ubwotb2JqLSQoQ09ORklHX1g4Nl9TTVApCQkrPSBzbXAubwotb2JqLSQoQ09ORklHX1g4Nl9TTVApCQkrPSBzbXBib290Lm8gdHNjX3N5bmMubyBpcGkubyB0bGJfJChCSVRTKS5vCi1vYmotJChDT05GSUdfWDg2XzMyX1NNUCkJKz0gc21wY29tbW9uLm8KLW9iai0kKENPTkZJR19YODZfNjRfU01QKQkrPSB0c2Nfc3luYy5vIHNtcGNvbW1vbi5vCitvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBzbXBib290Lm8gdHNjX3N5bmMubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNldHVwX3BlcmNwdS5vCitvYmotJChDT05GSUdfWDg2XzY0X1NNUCkJKz0gdHNjX3N5bmMubwogb2JqLSQoQ09ORklHX1g4Nl9UUkFNUE9MSU5FKQkrPSB0cmFtcG9saW5lXyQoQklUUykubwogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KLW9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCi1vYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubworb2JqLXkJCQkJKz0gYXBpYy8KIG9iai0kKENPTkZJR19YODZfUkVCT09URklYVVBTKQkrPSByZWJvb3RfZml4dXBzXzMyLm8KIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjXyQoQklUUykubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gcmVsb2NhdGVfa2VybmVsXyQoQklUUykubyBjcmFzaC5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcF8kKEJJVFMpLm8KLW9iai0kKENPTkZJR19YODZfTlVNQVEpCQkrPSBudW1hcV8zMi5vCi1vYmotJChDT05GSUdfWDg2X0VTNzAwMCkJKz0gZXM3MDAwXzMyLm8KLW9iai0kKENPTkZJR19YODZfU1VNTUlUX05VTUEpCSs9IHN1bW1pdF8zMi5vCi1vYmoteQkJCQkrPSB2c21wXzY0Lm8KK29iai0kKENPTkZJR19YODZfVlNNUCkJCSs9IHZzbXBfNjQubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlXyQoQklUUykubwogb2JqLSQoQ09ORklHX0VGSSkgCQkrPSBlZmkubyBlZmlfJChCSVRTKS5vIGVmaV9zdHViXyQoQklUUykubwpAQCAtMTE0LDE2ICsxMTEsMTMgQEAKICMjIwogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKLSAgICAgICAgb2JqLXkJCQkJKz0gZ2VuYXBpY182NC5vIGdlbmFwaWNfZmxhdF82NC5vIGdlbngyYXBpY191dl94Lm8gdGxiX3V2Lm8KLQlvYmoteQkJCQkrPSBiaW9zX3V2Lm8gdXZfaXJxLm8gdXZfc3lzZnMubwotICAgICAgICBvYmoteQkJCQkrPSBnZW54MmFwaWNfY2x1c3Rlci5vCi0gICAgICAgIG9iai15CQkJCSs9IGdlbngyYXBpY19waHlzLm8KLSAgICAgICAgb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCi0gICAgICAgIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0XzY0Lm8KKwlvYmotJChDT05GSUdfWDg2X1VWKQkJKz0gdGxiX3V2Lm8gYmlvc191di5vIHV2X2lycS5vIHV2X3N5c2ZzLm8KKwlvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBwbXRpbWVyXzY0Lm8KKwlvYmotJChDT05GSUdfQVVESVQpCQkrPSBhdWRpdF82NC5vCiAKLSAgICAgICAgb2JqLSQoQ09ORklHX0dBUlRfSU9NTVUpCSs9IHBjaS1nYXJ0XzY0Lm8gYXBlcnR1cmVfNjQubwotICAgICAgICBvYmotJChDT05GSUdfQ0FMR0FSWV9JT01NVSkJKz0gcGNpLWNhbGdhcnlfNjQubyB0Y2VfNjQubwotICAgICAgICBvYmotJChDT05GSUdfQU1EX0lPTU1VKQkJKz0gYW1kX2lvbW11X2luaXQubyBhbWRfaW9tbXUubworCW9iai0kKENPTkZJR19HQVJUX0lPTU1VKQkrPSBwY2ktZ2FydF82NC5vIGFwZXJ0dXJlXzY0Lm8KKwlvYmotJChDT05GSUdfQ0FMR0FSWV9JT01NVSkJKz0gcGNpLWNhbGdhcnlfNjQubyB0Y2VfNjQubworCW9iai0kKENPTkZJR19BTURfSU9NTVUpCQkrPSBhbWRfaW9tbXVfaW5pdC5vIGFtZF9pb21tdS5vCiAKLSAgICAgICAgb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykJKz0gbW1jb25mLWZhbTEwaF82NC5vCisJb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykJKz0gbW1jb25mLWZhbTEwaF82NC5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IDc2NzhmMTAuLmExOGViN2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTM3LDE1ICszNywxMCBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotIyBpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgYWNwaV9mb3JjZSA9IDA7CiB1MzIgYWNwaV9yc2R0X2ZvcmNlZDsKICNpZmRlZglDT05GSUdfQUNQSQpAQCAtNTYsMTYgKzUxLDcgQEAKIEVYUE9SVF9TWU1CT0woYWNwaV9kaXNhYmxlZCk7CiAKICNpZmRlZglDT05GSUdfWDg2XzY0Ci0KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLQotI2Vsc2UJCQkJLyogWDg2ICovCi0KLSNpZmRlZglDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX21wcGFyc2UuaD4KLSNlbmRpZgkJCQkvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KLQorIyBpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNlbmRpZgkJCQkvKiBYODYgKi8KIAogI2RlZmluZSBCQURfTUFEVF9FTlRSWShlbnRyeSwgZW5kKSAoCQkJCQkgICAgXApAQCAtMTIxLDM1ICsxMDcsMTggQEAKICAqLwogY2hhciAqX19pbml0IF9fYWNwaV9tYXBfdGFibGUodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBiYXNlLCBvZmZzZXQsIG1hcHBlZF9zaXplOwotCWludCBpZHg7CiAKIAlpZiAoIXBoeXMgfHwgIXNpemUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHBoeXMrc2l6ZSA8PSAobWF4X2xvd19wZm5fbWFwcGVkIDw8IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gX192YShwaHlzKTsKKwlyZXR1cm4gZWFybHlfaW9yZW1hcChwaHlzLCBzaXplKTsKK30KK3ZvaWQgX19pbml0IF9fYWNwaV91bm1hcF90YWJsZShjaGFyICptYXAsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoIW1hcCB8fCAhc2l6ZSkKKwkJcmV0dXJuOwogCi0Jb2Zmc2V0ID0gcGh5cyAmIChQQUdFX1NJWkUgLSAxKTsKLQltYXBwZWRfc2l6ZSA9IFBBR0VfU0laRSAtIG9mZnNldDsKLQljbGVhcl9maXhtYXAoRklYX0FDUElfRU5EKTsKLQlzZXRfZml4bWFwKEZJWF9BQ1BJX0VORCwgcGh5cyk7Ci0JYmFzZSA9IGZpeF90b192aXJ0KEZJWF9BQ1BJX0VORCk7Ci0KLQkvKgotCSAqIE1vc3QgY2FzZXMgY2FuIGJlIGNvdmVyZWQgYnkgdGhlIGJlbG93LgotCSAqLwotCWlkeCA9IEZJWF9BQ1BJX0VORDsKLQl3aGlsZSAobWFwcGVkX3NpemUgPCBzaXplKSB7Ci0JCWlmICgtLWlkeCA8IEZJWF9BQ1BJX0JFR0lOKQotCQkJcmV0dXJuIE5VTEw7CS8qIGNhbm5vdCBoYW5kbGUgdGhpcyAqLwotCQlwaHlzICs9IFBBR0VfU0laRTsKLQkJY2xlYXJfZml4bWFwKGlkeCk7Ci0JCXNldF9maXhtYXAoaWR4LCBwaHlzKTsKLQkJbWFwcGVkX3NpemUgKz0gUEFHRV9TSVpFOwotCX0KLQotCXJldHVybiAoKHVuc2lnbmVkIGNoYXIgKiliYXNlICsgb2Zmc2V0KTsKKwllYXJseV9pb3VubWFwKG1hcCwgc2l6ZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfUENJX01NQ09ORklHCkBAIC0yMzksNyArMjA4LDggQEAKIAkJICAgICAgIG1hZHQtPmFkZHJlc3MpOwogCX0KIAotCWFjcGlfbWFkdF9vZW1fY2hlY2sobWFkdC0+aGVhZGVyLm9lbV9pZCwgbWFkdC0+aGVhZGVyLm9lbV90YWJsZV9pZCk7CisJZGVmYXVsdF9hY3BpX21hZHRfb2VtX2NoZWNrKG1hZHQtPmhlYWRlci5vZW1faWQsCisJCQkJICAgIG1hZHQtPmhlYWRlci5vZW1fdGFibGVfaWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODQsNyArODU0LDcgQEAKIAlERUNMQVJFX0JJVE1BUChwaW5fcHJvZ3JhbW1lZCwgTVBfTUFYX0lPQVBJQ19QSU4gKyAxKTsKIH0gbXBfaW9hcGljX3JvdXRpbmdbTUFYX0lPX0FQSUNTXTsKIAotc3RhdGljIGludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKQoraW50IG1wX2ZpbmRfaW9hcGljKGludCBnc2kpCiB7CiAJaW50IGkgPSAwOwogCkBAIC04OTksNiArODY5LDE2IEBACiAJcmV0dXJuIC0xOwogfQogCitpbnQgbXBfZmluZF9pb2FwaWNfcGluKGludCBpb2FwaWMsIGludCBnc2kpCit7CisJaWYgKFdBUk5fT04oaW9hcGljID09IC0xKSkKKwkJcmV0dXJuIC0xOworCWlmIChXQVJOX09OKGdzaSA+IG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uZ3NpX2VuZCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBnc2kgLSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmdzaV9iYXNlOworfQorCiBzdGF0aWMgdTggX19pbml0IHVuaXFfaW9hcGljX2lkKHU4IGlkKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTkxMiw4ICs4OTIsOCBAQAogCURFQ0xBUkVfQklUTUFQKHVzZWQsIDI1Nik7CiAJYml0bWFwX3plcm8odXNlZCwgMjU2KTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCXN0cnVjdCBtcF9jb25maWdfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOwotCQlfX3NldF9iaXQoaWEtPm1wX2FwaWNpZCwgdXNlZCk7CisJCXN0cnVjdCBtcGNfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOworCQlfX3NldF9iaXQoaWEtPmFwaWNpZCwgdXNlZCk7CiAJfQogCWlmICghdGVzdF9iaXQoaWQsIHVzZWQpKQogCQlyZXR1cm4gaWQ7CkBAIC05NDUsMjkgKzkyNSwyOSBAQAogCiAJaWR4ID0gbnJfaW9hcGljczsKIAotCW1wX2lvYXBpY3NbaWR4XS5tcF90eXBlID0gTVBfSU9BUElDOwotCW1wX2lvYXBpY3NbaWR4XS5tcF9mbGFncyA9IE1QQ19BUElDX1VTQUJMRTsKLQltcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2FkZHIgPSBhZGRyZXNzOworCW1wX2lvYXBpY3NbaWR4XS50eXBlID0gTVBfSU9BUElDOworCW1wX2lvYXBpY3NbaWR4XS5mbGFncyA9IE1QQ19BUElDX1VTQUJMRTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIgPSBhZGRyZXNzOwogCiAJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCwgYWRkcmVzcyk7Ci0JbXBfaW9hcGljc1tpZHhdLm1wX2FwaWNpZCA9IHVuaXFfaW9hcGljX2lkKGlkKTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY2lkID0gdW5pcV9pb2FwaWNfaWQoaWQpOwogI2lmZGVmIENPTkZJR19YODZfMzIKLQltcF9pb2FwaWNzW2lkeF0ubXBfYXBpY3ZlciA9IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaWR4KTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciA9IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaWR4KTsKICNlbHNlCi0JbXBfaW9hcGljc1tpZHhdLm1wX2FwaWN2ZXIgPSAwOworCW1wX2lvYXBpY3NbaWR4XS5hcGljdmVyID0gMDsKICNlbmRpZgogCS8qCiAJICogQnVpbGQgYmFzaWMgR1NJIGxvb2t1cCB0YWJsZSB0byBmYWNpbGl0YXRlIGdzaS0+aW9fYXBpYyBsb29rdXBzCiAJICogYW5kIHRvIHByZXZlbnQgcmVwcm9ncmFtbWluZyBvZiBJT0FQSUMgcGlucyAoUENJIEdTSXMpLgogCSAqLwotCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uYXBpY19pZCA9IG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljaWQ7CisJbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5hcGljX2lkID0gbXBfaW9hcGljc1tpZHhdLmFwaWNpZDsKIAltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9iYXNlID0gZ3NpX2Jhc2U7CiAJbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfZW5kID0gZ3NpX2Jhc2UgKwogCSAgICBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGlkeCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJJT0FQSUNbJWRdOiBhcGljX2lkICVkLCB2ZXJzaW9uICVkLCBhZGRyZXNzIDB4JWx4LCAiCi0JICAgICAgICJHU0kgJWQtJWRcbiIsIGlkeCwgbXBfaW9hcGljc1tpZHhdLm1wX2FwaWNpZCwKLQkgICAgICAgbXBfaW9hcGljc1tpZHhdLm1wX2FwaWN2ZXIsIG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljYWRkciwKKwlwcmludGsoS0VSTl9JTkZPICJJT0FQSUNbJWRdOiBhcGljX2lkICVkLCB2ZXJzaW9uICVkLCBhZGRyZXNzIDB4JXgsICIKKwkgICAgICAgIkdTSSAlZC0lZFxuIiwgaWR4LCBtcF9pb2FwaWNzW2lkeF0uYXBpY2lkLAorCSAgICAgICBtcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciwgbXBfaW9hcGljc1tpZHhdLmFwaWNhZGRyLAogCSAgICAgICBtcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9iYXNlLCBtcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9lbmQpOwogCiAJbnJfaW9hcGljcysrOwpAQCAtOTk2LDE5ICs5NzYsMTkgQEAKIAlyZXR1cm4gbWF4X2dzaSArIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFzc2lnbl90b19tcF9pcnEoc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgKm0sCi0JCQkJICAgIHN0cnVjdCBtcF9jb25maWdfaW50c3JjICptcF9pcnEpCitzdGF0aWMgdm9pZCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptLAorCQkJCSAgICBzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQogewotCW1lbWNweShtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYykpOworCW1lbWNweShtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOwogfQogCi1zdGF0aWMgaW50IG1wX2lycV9jbXAoc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgKm1wX2lycSwKLQkJCQlzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqbSkKK3N0YXRpYyBpbnQgbXBfaXJxX2NtcChzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxLAorCQkJCXN0cnVjdCBtcGNfaW50c3JjICptKQogewotCXJldHVybiBtZW1jbXAobXBfaXJxLCBtLCBzaXplb2Yoc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMpKTsKKwlyZXR1cm4gbWVtY21wKG1wX2lycSwgbSwgc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVfbXBfaXJxKHN0cnVjdCBtcF9jb25maWdfaW50c3JjICptKQorc3RhdGljIHZvaWQgc2F2ZV9tcF9pcnEoc3RydWN0IG1wY19pbnRzcmMgKm0pCiB7CiAJaW50IGk7CiAKQEAgLTEwMjYsNyArMTAwNiw3IEBACiB7CiAJaW50IGlvYXBpYzsKIAlpbnQgcGluOwotCXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycTsKKwlzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnE7CiAKIAkvKgogCSAqIENvbnZlcnQgJ2dzaScgdG8gJ2lvYXBpYy5waW4nLgpAQCAtMTAzNCw3ICsxMDE0LDcgQEAKIAlpb2FwaWMgPSBtcF9maW5kX2lvYXBpYyhnc2kpOwogCWlmIChpb2FwaWMgPCAwKQogCQlyZXR1cm47Ci0JcGluID0gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKKwlwaW4gPSBtcF9maW5kX2lvYXBpY19waW4oaW9hcGljLCBnc2kpOwogCiAJLyoKIAkgKiBUQkQ6IFRoaXMgY2hlY2sgaXMgZm9yIGZhdWx0eSB0aW1lciBlbnRyaWVzLCB3aGVyZSB0aGUgb3ZlcnJpZGUKQEAgLTEwNDQsMTMgKzEwMjQsMTMgQEAKIAlpZiAoKGJ1c19pcnEgPT0gMCkgJiYgKHRyaWdnZXIgPT0gMykpCiAJCXRyaWdnZXIgPSAxOwogCi0JbXBfaXJxLm1wX3R5cGUgPSBNUF9JTlRTUkM7Ci0JbXBfaXJxLm1wX2lycXR5cGUgPSBtcF9JTlQ7Ci0JbXBfaXJxLm1wX2lycWZsYWcgPSAodHJpZ2dlciA8PCAyKSB8IHBvbGFyaXR5OwotCW1wX2lycS5tcF9zcmNidXMgPSBNUF9JU0FfQlVTOwotCW1wX2lycS5tcF9zcmNidXNpcnEgPSBidXNfaXJxOwkvKiBJUlEgKi8KLQltcF9pcnEubXBfZHN0YXBpYyA9IG1wX2lvYXBpY3NbaW9hcGljXS5tcF9hcGljaWQ7IC8qIEFQSUMgSUQgKi8KLQltcF9pcnEubXBfZHN0aXJxID0gcGluOwkvKiBJTlRJTiMgKi8KKwltcF9pcnEudHlwZSA9IE1QX0lOVFNSQzsKKwltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKKwltcF9pcnEuaXJxZmxhZyA9ICh0cmlnZ2VyIDw8IDIpIHwgcG9sYXJpdHk7CisJbXBfaXJxLnNyY2J1cyA9IE1QX0lTQV9CVVM7CisJbXBfaXJxLnNyY2J1c2lycSA9IGJ1c19pcnE7CS8qIElSUSAqLworCW1wX2lycS5kc3RhcGljID0gbXBfaW9hcGljc1tpb2FwaWNdLmFwaWNpZDsgLyogQVBJQyBJRCAqLworCW1wX2lycS5kc3RpcnEgPSBwaW47CS8qIElOVElOIyAqLwogCiAJc2F2ZV9tcF9pcnEoJm1wX2lycSk7CiB9CkBAIC0xMDYwLDcgKzEwNDAsNyBAQAogCWludCBpOwogCWludCBpb2FwaWM7CiAJdW5zaWduZWQgaW50IGRzdGFwaWM7Ci0Jc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgbXBfaXJxOworCXN0cnVjdCBtcGNfaW50c3JjIG1wX2lycTsKIAogI2lmIGRlZmluZWQgKENPTkZJR19NQ0EpIHx8IGRlZmluZWQgKENPTkZJR19FSVNBKQogCS8qCkBAIC0xMDg1LDcgKzEwNjUsNyBAQAogCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKDApOwogCWlmIChpb2FwaWMgPCAwKQogCQlyZXR1cm47Ci0JZHN0YXBpYyA9IG1wX2lvYXBpY3NbaW9hcGljXS5tcF9hcGljaWQ7CisJZHN0YXBpYyA9IG1wX2lvYXBpY3NbaW9hcGljXS5hcGljaWQ7CiAKIAkvKgogCSAqIFVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgSVJRcyAwLTE1LiAgVW5sZXNzCkBAIC0xMDk1LDE2ICsxMDc1LDE0IEBACiAJCWludCBpZHg7CiAKIAkJZm9yIChpZHggPSAwOyBpZHggPCBtcF9pcnFfZW50cmllczsgaWR4KyspIHsKLQkJCXN0cnVjdCBtcF9jb25maWdfaW50c3JjICppcnEgPSBtcF9pcnFzICsgaWR4OworCQkJc3RydWN0IG1wY19pbnRzcmMgKmlycSA9IG1wX2lycXMgKyBpZHg7CiAKIAkJCS8qIERvIHdlIGFscmVhZHkgaGF2ZSBhIG1hcHBpbmcgZm9yIHRoaXMgSVNBIElSUT8gKi8KLQkJCWlmIChpcnEtPm1wX3NyY2J1cyA9PSBNUF9JU0FfQlVTCi0JCQkgICAgJiYgaXJxLT5tcF9zcmNidXNpcnEgPT0gaSkKKwkJCWlmIChpcnEtPnNyY2J1cyA9PSBNUF9JU0FfQlVTICYmIGlycS0+c3JjYnVzaXJxID09IGkpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIERvIHdlIGFscmVhZHkgaGF2ZSBhIG1hcHBpbmcgZm9yIHRoaXMgSU9BUElDIHBpbiAqLwotCQkJaWYgKGlycS0+bXBfZHN0YXBpYyA9PSBkc3RhcGljICYmCi0JCQkgICAgaXJxLT5tcF9kc3RpcnEgPT0gaSkKKwkJCWlmIChpcnEtPmRzdGFwaWMgPT0gZHN0YXBpYyAmJiBpcnEtPmRzdGlycSA9PSBpKQogCQkJCWJyZWFrOwogCQl9CiAKQEAgLTExMTMsMTMgKzEwOTEsMTMgQEAKIAkJCWNvbnRpbnVlOwkvKiBJUlEgYWxyZWFkeSB1c2VkICovCiAJCX0KIAotCQltcF9pcnEubXBfdHlwZSA9IE1QX0lOVFNSQzsKLQkJbXBfaXJxLm1wX2lycWZsYWcgPSAwOwkvKiBDb25mb3JtaW5nICovCi0JCW1wX2lycS5tcF9zcmNidXMgPSBNUF9JU0FfQlVTOwotCQltcF9pcnEubXBfZHN0YXBpYyA9IGRzdGFwaWM7Ci0JCW1wX2lycS5tcF9pcnF0eXBlID0gbXBfSU5UOwotCQltcF9pcnEubXBfc3JjYnVzaXJxID0gaTsgLyogSWRlbnRpdHkgbWFwcGVkICovCi0JCW1wX2lycS5tcF9kc3RpcnEgPSBpOworCQltcF9pcnEudHlwZSA9IE1QX0lOVFNSQzsKKwkJbXBfaXJxLmlycWZsYWcgPSAwOwkvKiBDb25mb3JtaW5nICovCisJCW1wX2lycS5zcmNidXMgPSBNUF9JU0FfQlVTOworCQltcF9pcnEuZHN0YXBpYyA9IGRzdGFwaWM7CisJCW1wX2lycS5pcnF0eXBlID0gbXBfSU5UOworCQltcF9pcnEuc3JjYnVzaXJxID0gaTsgLyogSWRlbnRpdHkgbWFwcGVkICovCisJCW1wX2lycS5kc3RpcnEgPSBpOwogCiAJCXNhdmVfbXBfaXJxKCZtcF9pcnEpOwogCX0KQEAgLTExNTYsNyArMTEzNCw3IEBACiAJCXJldHVybiBnc2k7CiAJfQogCi0JaW9hcGljX3BpbiA9IGdzaSAtIG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uZ3NpX2Jhc2U7CisJaW9hcGljX3BpbiA9IG1wX2ZpbmRfaW9hcGljX3Bpbihpb2FwaWMsIGdzaSk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCkBAIC0xMjMwLDIyICsxMjA4LDIyIEBACiAJCQl1MzIgZ3NpLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KQogewogI2lmZGVmIENPTkZJR19YODZfTVBQQVJTRQotCXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycTsKKwlzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnE7CiAJaW50IGlvYXBpYzsKIAogCWlmICghYWNwaV9pb2FwaWMpCiAJCXJldHVybiAwOwogCiAJLyogcHJpbnQgdGhlIGVudHJ5IHNob3VsZCBoYXBwZW4gb24gbXB0YWJsZSBpZGVudGljYWxseSAqLwotCW1wX2lycS5tcF90eXBlID0gTVBfSU5UU1JDOwotCW1wX2lycS5tcF9pcnF0eXBlID0gbXBfSU5UOwotCW1wX2lycS5tcF9pcnFmbGFnID0gKHRyaWdnZXJpbmcgPT0gQUNQSV9FREdFX1NFTlNJVElWRSA/IDQgOiAweDBjKSB8CisJbXBfaXJxLnR5cGUgPSBNUF9JTlRTUkM7CisJbXBfaXJxLmlycXR5cGUgPSBtcF9JTlQ7CisJbXBfaXJxLmlycWZsYWcgPSAodHJpZ2dlcmluZyA9PSBBQ1BJX0VER0VfU0VOU0lUSVZFID8gNCA6IDB4MGMpIHwKIAkJCQkocG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfSElHSCA/IDEgOiAzKTsKLQltcF9pcnEubXBfc3JjYnVzID0gbnVtYmVyOwotCW1wX2lycS5tcF9zcmNidXNpcnEgPSAoKChkZXZmbiA+PiAzKSAmIDB4MWYpIDw8IDIpIHwgKChwaW4gLSAxKSAmIDMpOworCW1wX2lycS5zcmNidXMgPSBudW1iZXI7CisJbXBfaXJxLnNyY2J1c2lycSA9ICgoKGRldmZuID4+IDMpICYgMHgxZikgPDwgMikgfCAoKHBpbiAtIDEpICYgMyk7CiAJaW9hcGljID0gbXBfZmluZF9pb2FwaWMoZ3NpKTsKLQltcF9pcnEubXBfZHN0YXBpYyA9IG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uYXBpY19pZDsKLQltcF9pcnEubXBfZHN0aXJxID0gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKKwltcF9pcnEuZHN0YXBpYyA9IG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uYXBpY19pZDsKKwltcF9pcnEuZHN0aXJxID0gbXBfZmluZF9pb2FwaWNfcGluKGlvYXBpYywgZ3NpKTsKIAogCXNhdmVfbXBfaXJxKCZtcF9pcnEpOwogI2VuZGlmCkBAIC0xMzcyLDcgKzEzNTAsNyBAQAogCQlpZiAoIWVycm9yKSB7CiAJCQlhY3BpX2xhcGljID0gMTsKIAotI2lmZGVmIENPTkZJR19YODZfR0VORVJJQ0FSQ0gKKyNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAogCQkJZ2VuZXJpY19iaWdzbXBfcHJvYmUoKTsKICNlbmRpZgogCQkJLyoKQEAgLTEzODQsOSArMTM2Miw4IEBACiAJCQkJYWNwaV9pb2FwaWMgPSAxOwogCiAJCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDE7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCQkJCXNldHVwX2FwaWNfcm91dGluZygpOwotI2VuZGlmCisJCQkJaWYgKGFwaWMtPnNldHVwX2FwaWNfcm91dGluZykKKwkJCQkJYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKCk7CiAJCQl9CiAJCX0KIAkJaWYgKGVycm9yID09IC1FSU5WQUwpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKaW5kZXggMzM1NTk3My4uNTgwYjRlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKQEAgLTMsOCArMyw4IEBACiAgKi8KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAogCS5jb2RlMTYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IGE2MGMxZjMuLjdjMjQzYTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTAxLDYgKzEwMSw3IEBACiAJc3RhY2tfc3RhcnQuc3AgPSB0ZW1wX3N0YWNrICsgc2l6ZW9mKHRlbXBfc3RhY2spOwogCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0KIAkJCSh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaW5pdGlhbF9ncyA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYKIAlpbml0aWFsX2NvZGUgPSAodW5zaWduZWQgbG9uZyl3YWtldXBfbG9uZzY0OwogCXNhdmVkX21hZ2ljID0gMHgxMjM0NTY3ODlhYmNkZWYwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfMzIuUwppbmRleCBhMTJlNmE5Li44ZGVkNDE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfMzIuUwpAQCAtMSw3ICsxLDcgQEAKIAkuc2VjdGlvbiAudGV4dC5wYWdlX2FsaWduZWQKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAKICMgQ29weXJpZ2h0IDIwMDMsIDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PiwgZGlzdHJpYnV0ZSB1bmRlciBHUEx2MgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCmluZGV4IDk2MjU4ZDkuLjhlYTUxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCkBAIC0xLDggKzEsOCBAQAogLnRleHQKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCBhODRhYzdiLi42OTA3YjhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNDk4LDEyICs0OTgsMTIgQEAKICAqLwogdm9pZCAqX19rcHJvYmVzIHRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyICp2YWRkcjsKIAlpbnQgbnJfcGFnZXMgPSAyOwogCXN0cnVjdCBwYWdlICpwYWdlc1syXTsKIAlpbnQgaTsKIAorCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKCFjb3JlX2tlcm5lbF90ZXh0KCh1bnNpZ25lZCBsb25nKWFkZHIpKSB7CiAJCXBhZ2VzWzBdID0gdm1hbGxvY190b19wYWdlKGFkZHIpOwogCQlwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTsKQEAgLTUxNyw5ICs1MTcsOSBAQAogCQlucl9wYWdlcyA9IDE7CiAJdmFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7CiAJQlVHX09OKCF2YWRkcik7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJbWVtY3B5KCZ2YWRkclsodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTS10sIG9wY29kZSwgbGVuKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXZ1bm1hcCh2YWRkcik7CiAJc3luY19jb3JlKCk7CiAJLyogQ291bGQgYWxzbyBkbyBhIENMRkxVU0ggaGVyZSB0byBzcGVlZCB1cCBDUFUgcmVjb3Zlcnk7IGJ1dApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MGYzNmUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMjMgKzAsMCBAQAotLyoKLSAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCi0gKgotICoJKGMpIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkuCi0gKglNYWNpZWogVy4gUm96eWNraQk6CVZhcmlvdXMgdXBkYXRlcyBhbmQgZml4ZXMuCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBvd2VyIE1hbmFnZW1lbnQgZm9yIFVQLUFQSUMuCi0gKglQYXZlbCBNYWNoZWsgYW5kCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L25taS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTMuaD4KLSNpbmNsdWRlIDxhc20vaWRsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLQotLyoKLSAqIFNhbml0eSBjaGVjawotICovCi0jaWYgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MEYpICE9IDB4MEYpCi0jIGVycm9yIFNQVVJJT1VTX0FQSUNfVkVDVE9SIGRlZmluaXRpb24gZXJyb3IKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotLyoKLSAqIEtub2IgdG8gY29udHJvbCBvdXIgd2lsbGluZ25lc3MgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDLgotICoKLSAqICsxPWZvcmNlLWVuYWJsZQotICovCi1zdGF0aWMgaW50IGZvcmNlX2VuYWJsZV9sb2NhbF9hcGljOwotLyoKLSAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKLSAqLwotc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWMoY2hhciAqYXJnKQotewotCWZvcmNlX2VuYWJsZV9sb2NhbF9hcGljID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJsYXBpYyIsIHBhcnNlX2xhcGljKTsKLS8qIExvY2FsIEFQSUMgd2FzIGRpc2FibGVkIGJ5IHRoZSBCSU9TIGFuZCBlbmFibGVkIGJ5IHRoZSBrZXJuZWwgKi8KLXN0YXRpYyBpbnQgZW5hYmxlZF92aWFfYXBpY2Jhc2U7Ci0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGludCBhcGljX2NhbGlicmF0ZV9wbXRtciBfX2luaXRkYXRhOwotc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfYXBpY3BtdGltZXIoY2hhciAqcykKLXsKLQlhcGljX2NhbGlicmF0ZV9wbXRtciA9IDE7Ci0Jbm90c2Nfc2V0dXAoTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci1fX3NldHVwKCJhcGljcG10aW1lciIsIHNldHVwX2FwaWNwbXRpbWVyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBIQVZFX1gyQVBJQwotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1gyQVBJQwotaW50IHgyYXBpYzsKLS8qIHgyYXBpYyBlbmFibGVkIGJlZm9yZSBPUyBoYW5kb3ZlciAqLwotc3RhdGljIGludCB4MmFwaWNfcHJlZW5hYmxlZDsKLXN0YXRpYyBpbnQgZGlzYWJsZV94MmFwaWM7Ci1zdGF0aWMgX19pbml0IGludCBzZXR1cF9ub3gyYXBpYyhjaGFyICpzdHIpCi17Ci0JZGlzYWJsZV94MmFwaWMgPSAxOwotCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWDJBUElDKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub3gyYXBpYyIsIHNldHVwX25veDJhcGljKTsKLSNlbmRpZgotCi11bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7Ci1pbnQgZGlzYWJsZV9hcGljOwotLyogRGlzYWJsZSBsb2NhbCBBUElDIHRpbWVyIGZyb20gdGhlIGtlcm5lbCBjb21tYW5kbGluZSBvciB2aWEgZG1pIHF1aXJrICovCi1zdGF0aWMgaW50IGRpc2FibGVfYXBpY190aW1lciBfX2NwdWluaXRkYXRhOwotLyogTG9jYWwgQVBJQyB0aW1lciB3b3JrcyBpbiBDMiAqLwotaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7Ci1FWFBPUlRfU1lNQk9MX0dQTChsb2NhbF9hcGljX3RpbWVyX2MyX29rKTsKLQotaW50IGZpcnN0X3N5c3RlbV92ZWN0b3IgPSAweGZlOwotCi0vKgotICogRGVidWcgbGV2ZWwsIGV4cG9ydGVkIGZvciBpb19hcGljLmMKLSAqLwotdW5zaWduZWQgaW50IGFwaWNfdmVyYm9zaXR5OwotCi1pbnQgcGljX21vZGU7Ci0KLS8qIEhhdmUgd2UgZm91bmQgYW4gTVAgdGFibGUgKi8KLWludCBzbXBfZm91bmRfY29uZmlnOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxhcGljX3Jlc291cmNlID0gewotCS5uYW1lID0gIkxvY2FsIEFQSUMiLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBjYWxpYnJhdGlvbl9yZXN1bHQ7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwotc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTsKLQotLyoKLSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSB1c2VkIGZvciBhbnkgZnVuY3Rpb24gd2hpY2ggaXMgQ1BVIGxvY2FsLgotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBsYXBpY19jbG9ja2V2ZW50ID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9UCi0JCQl8IENMT0NLX0VWVF9GRUFUX0MzU1RPUCB8IENMT0NLX0VWVF9GRUFUX0RVTU1ZLAotCS5zaGlmdAkJPSAzMiwKLQkuc2V0X21vZGUJPSBsYXBpY190aW1lcl9zZXR1cCwKLQkuc2V0X25leHRfZXZlbnQJPSBsYXBpY19uZXh0X2V2ZW50LAotCS5icm9hZGNhc3QJPSBsYXBpY190aW1lcl9icm9hZGNhc3QsCi0JLnJhdGluZwkJPSAxMDAsCi0JLmlycQkJPSAtMSwKLX07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGFwaWNfZXZlbnRzKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBpY19waHlzOwotCi0vKgotICogR2V0IHRoZSBMQVBJQyB2ZXJzaW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhcGljX2dldF92ZXJzaW9uKHZvaWQpCi17Ci0JcmV0dXJuIEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci19Ci0KLS8qCi0gKiBDaGVjaywgaWYgdGhlIEFQSUMgaXMgaW50ZWdyYXRlZCBvciBhIHNlcGFyYXRlIGNoaXAKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbGFwaWNfaXNfaW50ZWdyYXRlZCh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gMTsKLSNlbHNlCi0JcmV0dXJuIEFQSUNfSU5URUdSQVRFRChsYXBpY19nZXRfdmVyc2lvbigpKTsKLSNlbmRpZgotfQotCi0vKgotICogQ2hlY2ssIHdoZXRoZXIgdGhpcyBpcyBhIG1vZGVybiBvciBhIGZpcnN0IGdlbmVyYXRpb24gQVBJQwotICovCi1zdGF0aWMgaW50IG1vZGVybl9hcGljKHZvaWQpCi17Ci0JLyogQU1EIHN5c3RlbXMgdXNlIG9sZCBBUElDIHZlcnNpb25zLCBzbyBjaGVjayB0aGUgQ1BVICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgotCSAgICBib290X2NwdV9kYXRhLng4NiA+PSAweGYpCi0JCXJldHVybiAxOwotCXJldHVybiBsYXBpY19nZXRfdmVyc2lvbigpID49IDB4MTQ7Ci19Ci0KLS8qCi0gKiBQYXJhdmlydCBrZXJuZWxzIGFsc28gbWlnaHQgYmUgdXNpbmcgdGhlc2UgYmVsb3cgb3BzLiBTbyB3ZSBzdGlsbAotICogdXNlIGdlbmVyaWMgYXBpY19yZWFkKCkvYXBpY193cml0ZSgpLCB3aGljaCBtaWdodCBiZSBwb2ludGluZyB0byBkaWZmZXJlbnQKLSAqIG9wcyBpbiBQQVJBVklSVCBjYXNlLgotICovCi12b2lkIHhhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQl3aGlsZSAoYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotfQotCi11MzIgc2FmZV94YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JdTMyIHNlbmRfc3RhdHVzOwotCWludCB0aW1lb3V0OwotCi0JdGltZW91dCA9IDA7Ci0JZG8gewotCQlzZW5kX3N0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZOwotCQlpZiAoIXNlbmRfc3RhdHVzKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMDApOwotCX0gd2hpbGUgKHRpbWVvdXQrKyA8IDEwMDApOwotCi0JcmV0dXJuIHNlbmRfc3RhdHVzOwotfQotCi12b2lkIHhhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCi17Ci0JYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQoaWQpKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBsb3cpOwotfQotCi1zdGF0aWMgdTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpCi17Ci0JdTMyIGljcjEsIGljcjI7Ci0KLQlpY3IyID0gYXBpY19yZWFkKEFQSUNfSUNSMik7Ci0JaWNyMSA9IGFwaWNfcmVhZChBUElDX0lDUik7Ci0KLQlyZXR1cm4gaWNyMSB8ICgodTY0KWljcjIgPDwgMzIpOwotfQotCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIHhhcGljX29wcyA9IHsKLQkucmVhZCA9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAotCS53cml0ZSA9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKLQkuaWNyX3JlYWQgPSB4YXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0geGFwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0geGFwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94YXBpY193YWl0X2ljcl9pZGxlLAotfTsKLQotc3RydWN0IGFwaWNfb3BzIF9fcmVhZF9tb3N0bHkgKmFwaWNfb3BzID0gJnhhcGljX29wczsKLUVYUE9SVF9TWU1CT0xfR1BMKGFwaWNfb3BzKTsKLQotI2lmZGVmIEhBVkVfWDJBUElDCi1zdGF0aWMgdm9pZCB4MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdTMyIHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQkvKiBubyBuZWVkIHRvIHdhaXQgZm9yIGljciBpZGxlIGluIHgyYXBpYyAqLwotCXJldHVybiAwOwotfQotCi12b2lkIHgyYXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQotewotCXdybXNybChBUElDX0JBU0VfTVNSICsgKEFQSUNfSUNSID4+IDQpLCAoKF9fdTY0KSBpZCkgPDwgMzIgfCBsb3cpOwotfQotCi1zdGF0aWMgdTY0IHgyYXBpY19pY3JfcmVhZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JcmRtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksIHZhbCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBhcGljX29wcyB4MmFwaWNfb3BzID0gewotCS5yZWFkID0gbmF0aXZlX2FwaWNfbXNyX3JlYWQsCi0JLndyaXRlID0gbmF0aXZlX2FwaWNfbXNyX3dyaXRlLAotCS5pY3JfcmVhZCA9IHgyYXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0geDJhcGljX2ljcl93cml0ZSwKLQkud2FpdF9pY3JfaWRsZSA9IHgyYXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSBzYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAotfTsKLSNlbmRpZgotCi0vKioKLSAqIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwIC0gZW5hYmxlIE5NSSB0aHJvdWdoIGxvY2FsIHZlY3RvciB0YWJsZSAwCi0gKi8KLXZvaWQgX19jcHVpbml0IGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKiB1bm1hc2sgYW5kIHNldCB0byBOTUkgKi8KLQl2ID0gQVBJQ19ETV9OTUk7Ci0KLQkvKiBMZXZlbCB0cmlnZ2VyZWQgZm9yIDgyNDg5RFggKDMyYml0IG1vZGUpICovCi0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCi0JCXYgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2KTsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qKgotICogZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCAtIEdldCBudW1iZXIgb2YgcGh5c2ljYWwgYnJvYWRjYXN0IElEcwotICovCi1pbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKQotewotCXJldHVybiBtb2Rlcm5fYXBpYygpID8gMHhmZiA6IDB4ZjsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGxhcGljX2dldF9tYXhsdnQgLSBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHZlY3RvciB0YWJsZSBlbnRyaWVzCi0gKi8KLWludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQkvKgotCSAqIC0gd2UgYWx3YXlzIGhhdmUgQVBJQyBpbnRlZ3JhdGVkIG9uIDY0Yml0IG1vZGUKLQkgKiAtIDgyNDg5RFhzIGRvIG5vdCByZXBvcnQgIyBvZiBMVlQgZW50cmllcwotCSAqLwotCXJldHVybiBBUElDX0lOVEVHUkFURUQoR0VUX0FQSUNfVkVSU0lPTih2KSkgPyBHRVRfQVBJQ19NQVhMVlQodikgOiAyOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lcgotICovCi0KLS8qIENsb2NrIGRpdmlzb3IgKi8KLSNkZWZpbmUgQVBJQ19ESVZJU09SIDE2Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGxvY2FsIEFQSUMgdGltZXIsIHdpdGggYSB0aW1lb3V0IG9mCi0gKiAnY2xvY2tzJyBBUElDIGJ1cyBjbG9jay4gRHVyaW5nIGNhbGlicmF0aW9uIHdlIGFjdHVhbGx5IGNhbGwKLSAqIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIGJvb3QgQ1BVLCBvbmNlIHdpdGggYSBib2d1cyB0aW1lb3V0Ci0gKiB2YWx1ZSwgc2Vjb25kIHRpbWUgZm9yIHJlYWwuIFRoZSBvdGhlciAobm9uY2FsaWJyYXRpbmcpIENQVXMKLSAqIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UsIHdpdGggdGhlIHJlYWwsIGNhbGlicmF0ZWQgdmFsdWUuCi0gKgotICogV2UgZG8gcmVhZHMgYmVmb3JlIHdyaXRlcyBldmVuIGlmIHVubmVjZXNzYXJ5LCB0byBnZXQgYXJvdW5kIHRoZQotICogUDUgQVBJQyBkb3VibGUgd3JpdGUgYnVnLgotICovCi1zdGF0aWMgdm9pZCBfX3NldHVwX0FQSUNfTFZUVCh1bnNpZ25lZCBpbnQgY2xvY2tzLCBpbnQgb25lc2hvdCwgaW50IGlycWVuKQotewotCXVuc2lnbmVkIGludCBsdnR0X3ZhbHVlLCB0bXBfdmFsdWU7Ci0KLQlsdnR0X3ZhbHVlID0gTE9DQUxfVElNRVJfVkVDVE9SOwotCWlmICghb25lc2hvdCkKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9USU1FUl9QRVJJT0RJQzsKLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKLQkJbHZ0dF92YWx1ZSB8PSBTRVRfQVBJQ19USU1FUl9CQVNFKEFQSUNfVElNRVJfQkFTRV9ESVYpOwotCi0JaWYgKCFpcnFlbikKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7Ci0KLQkvKgotCSAqIERpdmlkZSBQSUNMSyBieSAxNgotCSAqLwotCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLAotCQkodG1wX3ZhbHVlICYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKSB8Ci0JCUFQSUNfVERSX0RJVl8xNik7Ci0KLQlpZiAoIW9uZXNob3QpCi0JCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgY2xvY2tzIC8gQVBJQ19ESVZJU09SKTsKLX0KLQotLyoKLSAqIFNldHVwIGV4dGVuZGVkIExWVCwgQU1EIHNwZWNpZmljIChLOCwgZmFtaWx5IDEwaCkKLSAqCi0gKiBWZWN0b3IgbWFwcGluZ3MgYXJlIGhhcmQgY29kZWQuIE9uIEs4IG9ubHkgb2Zmc2V0IDAgKEFQSUM1MDApIGFuZAotICogTUNFIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZC4gVGh1cyBNQ0Ugb2Zmc2V0IG11c3QgYmUgc2V0IHRvIDAuCi0gKgotICogSWYgbWFzaz0xLCB0aGUgTFZUIGVudHJ5IGRvZXMgbm90IGdlbmVyYXRlIGludGVycnVwdHMgd2hpbGUgbWFzaz0wCi0gKiBlbmFibGVzIHRoZSB2ZWN0b3IuIFNlZSBhbHNvIHRoZSBCS0RHcy4KLSAqLwotCi0jZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX01DRSAwCi0jZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUyAxCi0KLXN0YXRpYyB2b2lkIHNldHVwX0FQSUNfZWlsdnQodTggbHZ0X29mZiwgdTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IChsdnRfb2ZmIDw8IDQpICsgQVBJQ19FSUxWVDA7Ci0JdW5zaWduZWQgaW50ICB2ICAgPSAobWFzayA8PCAxNikgfCAobXNnX3R5cGUgPDwgOCkgfCB2ZWN0b3I7Ci0KLQlhcGljX3dyaXRlKHJlZywgdik7Ci19Ci0KLXU4IHNldHVwX0FQSUNfZWlsdnRfbWNlKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0Jc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9NQ0UsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOwotCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9NQ0U7Ci19Ci0KLXU4IHNldHVwX0FQSUNfZWlsdnRfaWJzKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0Jc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9JQlMsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOwotCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9JQlM7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9BUElDX2VpbHZ0X2licyk7Ci0KLS8qCi0gKiBQcm9ncmFtIHRoZSBuZXh0IGV2ZW50LCByZWxhdGl2ZSB0byBub3cKLSAqLwotc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCi0JCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgZGVsdGEpOwotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0dXAgdGhlIGxhcGljIHRpbWVyIGluIHBlcmlvZGljIG9yIG9uZXNob3QgbW9kZQotICovCi1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCB2OwotCi0JLyogTGFwaWMgdXNlZCBhcyBkdW1teSBmb3IgYnJvYWRjYXN0ID8gKi8KLQlpZiAoZXZ0LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0RVTU1ZKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQkJX19zZXR1cF9BUElDX0xWVFQoY2FsaWJyYXRpb25fcmVzdWx0LAotCQkJCSAgbW9kZSAhPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgMSk7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJdiB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFQsIHYpOwotCQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIDB4ZmZmZmZmZmYpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCi0JCWJyZWFrOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgYnJvYWRjYXN0IGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc2VuZF9JUElfbWFzayhtYXNrLCBMT0NBTF9USU1FUl9WRUNUT1IpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciBmb3IgdGhpcyBDUFUuIENvcHkgdGhlIGluaXRpbGl6ZWQgdmFsdWVzCi0gKiBvZiB0aGUgYm9vdCBDUFUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBpbiB0aGUgZnJhbWV3b3JrLgotICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgc2V0dXBfQVBJQ190aW1lcih2b2lkKQotewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOwotCi0JbWVtY3B5KGxldnQsICZsYXBpY19jbG9ja2V2ZW50LCBzaXplb2YoKmxldnQpKTsKLQlsZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGxldnQpOwotfQotCi0vKgotICogSW4gdGhpcyBmdW5jdGlvbnMgd2UgY2FsaWJyYXRlIEFQSUMgYnVzIGNsb2NrcyB0byB0aGUgZXh0ZXJuYWwgdGltZXIuCi0gKgotICogV2Ugd2FudCB0byBkbyB0aGUgY2FsaWJyYXRpb24gb25seSBvbmNlIHNpbmNlIHdlIHdhbnQgdG8gaGF2ZSBsb2NhbCB0aW1lcgotICogaXJxcyBzeW5jcm9uLiBDUFVzIGNvbm5lY3RlZCBieSB0aGUgc2FtZSBBUElDIGJ1cyBoYXZlIHRoZSB2ZXJ5IHNhbWUgYnVzCi0gKiBmcmVxdWVuY3kuCi0gKgotICogVGhpcyB3YXMgcHJldmlvdXNseSBkb25lIGJ5IHJlYWRpbmcgdGhlIFBJVC9IUEVUIGFuZCB3YWl0aW5nIGZvciBhIHdyYXAKLSAqIGFyb3VuZCB0byBmaW5kIG91dCwgdGhhdCBhIHRpY2sgaGFzIGVsYXBzZWQuIEkgaGF2ZSBhIGJveCwgd2hlcmUgdGhlIFBJVAotICogcmVhZG91dCBpcyBicm9rZW4sIHNvIGl0IG5ldmVyIGdldHMgb3V0IG9mIHRoZSB3YWl0IGxvb3AgYWdhaW4uIFRoaXMgd2FzCi0gKiBhbHNvIHJlcG9ydGVkIGJ5IG90aGVycy4KLSAqCi0gKiBNb25pdG9yaW5nIHRoZSBqaWZmaWVzIHZhbHVlIGlzIGluYWNjdXJhdGUgYW5kIHRoZSBjbG9ja2V2ZW50cwotICogaW5mcmFzdHJ1Y3R1cmUgYWxsb3dzIHVzIHRvIGRvIGEgc2ltcGxlIHN1YnN0aXR1dGlvbiBvZiB0aGUgaW50ZXJydXB0Ci0gKiBoYW5kbGVyLgotICoKLSAqIFRoZSBjYWxpYnJhdGlvbiByb3V0aW5lIGFsc28gdXNlcyB0aGUgcG1fdGltZXIgd2hlbiBwb3NzaWJsZSwgYXMgdGhlIFBJVAotICogaGFwcGVucyB0byBydW4gd2F5IHRvbyBzbG93IChmYWN0b3IgMi4zIG9uIG15IFZBSU8gQ29yZUR1bywgd2hpY2ggZ29lcwotICogYmFjayB0byBub3JtYWwgbGF0ZXIgaW4gdGhlIGJvb3QgcHJvY2VzcykuCi0gKi8KLQotI2RlZmluZSBMQVBJQ19DQUxfTE9PUFMJCShIWi8xMCkKLQotc3RhdGljIF9faW5pdGRhdGEgaW50IGxhcGljX2NhbF9sb29wcyA9IC0xOwotc3RhdGljIF9faW5pdGRhdGEgbG9uZyBsYXBpY19jYWxfdDEsIGxhcGljX2NhbF90MjsKLXN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXBpY19jYWxfdHNjMSwgbGFwaWNfY2FsX3RzYzI7Ci1zdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxhcGljX2NhbF9wbTEsIGxhcGljX2NhbF9wbTI7Ci1zdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxhcGljX2NhbF9qMSwgbGFwaWNfY2FsX2oyOwotCi0vKgotICogVGVtcG9yYXJ5IGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbGFwaWNfY2FsX2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0c2MgPSAwOwotCWxvbmcgdGFwaWMgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0JdW5zaWduZWQgbG9uZyBwbSA9IGFjcGlfcG1fcmVhZF9lYXJseSgpOwotCi0JaWYgKGNwdV9oYXNfdHNjKQotCQlyZHRzY2xsKHRzYyk7Ci0KLQlzd2l0Y2ggKGxhcGljX2NhbF9sb29wcysrKSB7Ci0JY2FzZSAwOgotCQlsYXBpY19jYWxfdDEgPSB0YXBpYzsKLQkJbGFwaWNfY2FsX3RzYzEgPSB0c2M7Ci0JCWxhcGljX2NhbF9wbTEgPSBwbTsKLQkJbGFwaWNfY2FsX2oxID0gamlmZmllczsKLQkJYnJlYWs7Ci0KLQljYXNlIExBUElDX0NBTF9MT09QUzoKLQkJbGFwaWNfY2FsX3QyID0gdGFwaWM7Ci0JCWxhcGljX2NhbF90c2MyID0gdHNjOwotCQlpZiAocG0gPCBsYXBpY19jYWxfcG0xKQotCQkJcG0gKz0gQUNQSV9QTV9PVlJSVU47Ci0JCWxhcGljX2NhbF9wbTIgPSBwbTsKLQkJbGFwaWNfY2FsX2oyID0gamlmZmllczsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfYnlfcG10aW1lcihsb25nIGRlbHRhcG0sIGxvbmcgKmRlbHRhKQotewotCWNvbnN0IGxvbmcgcG1fMTAwbXMgPSBQTVRNUl9USUNLU19QRVJfU0VDIC8gMTA7Ci0JY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcyAvIDEwMDsKLQl1bnNpZ25lZCBsb25nIG11bHQ7Ci0JdTY0IHJlczsKLQotI2lmbmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCi0JcmV0dXJuIC0xOwotI2VuZGlmCi0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOwotCi0JLyogQ2hlY2ssIGlmIHRoZSBQTSB0aW1lciBpcyBhdmFpbGFibGUgKi8KLQlpZiAoIWRlbHRhcG0pCi0JCXJldHVybiAtMTsKLQotCW11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsIDIyKTsKLQotCWlmIChkZWx0YXBtID4gKHBtXzEwMG1zIC0gcG1fdGhyZXNoKSAmJgotCSAgICBkZWx0YXBtIDwgKHBtXzEwMG1zICsgcG1fdGhyZXNoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKLQl9IGVsc2UgewotCQlyZXMgPSAoKCh1NjQpZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7Ci0JCWRvX2RpdihyZXMsIDEwMDAwMDApOwotCQlwcl93YXJuaW5nKCJBUElDIGNhbGlicmF0aW9uIG5vdCBjb25zaXN0ZW50ICIKLQkJCSJ3aXRoIFBNIFRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLAotCQkJKGxvbmcpcmVzKTsKLQkJLyogQ29ycmVjdCB0aGUgbGFwaWMgY291bnRlciB2YWx1ZSAqLwotCQlyZXMgPSAoKCh1NjQpKCpkZWx0YSkpICogcG1fMTAwbXMpOwotCQlkb19kaXYocmVzLCBkZWx0YXBtKTsKLQkJcHJfaW5mbygiQVBJQyBkZWx0YSBhZGp1c3RlZCB0byBQTS1UaW1lcjogIgotCQkJIiVsdSAoJWxkKVxuIiwgKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGEpOwotCQkqZGVsdGEgPSAobG9uZylyZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7Ci0Jdm9pZCAoKnJlYWxfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKLQl1bnNpZ25lZCBsb25nIGRlbHRhajsKLQlsb25nIGRlbHRhOwotCWludCBwbV9yZWZlcmVuY2VkID0gMDsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkvKiBSZXBsYWNlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlyZWFsX2hhbmRsZXIgPSBnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXI7Ci0JZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7Ci0KLQkvKgotCSAqIFNldHVwIHRoZSBBUElDIGNvdW50ZXIgdG8gbWF4aW11bS4gVGhlcmUgaXMgbm8gd2F5IHRoZSBsYXBpYwotCSAqIGNhbiB1bmRlcmZsb3cgaW4gdGhlIDEwMG1zIGRldGVjdGlvbiB0aW1lIGZyYW1lCi0JICovCi0JX19zZXR1cF9BUElDX0xWVFQoMHhmZmZmZmZmZiwgMCwgMCk7Ci0KLQkvKiBMZXQgdGhlIGludGVycnVwdHMgcnVuICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0Jd2hpbGUgKGxhcGljX2NhbF9sb29wcyA8PSBMQVBJQ19DQUxfTE9PUFMpCi0JCWNwdV9yZWxheCgpOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCS8qIFJlc3RvcmUgdGhlIHJlYWwgZXZlbnQgaGFuZGxlciAqLwotCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlciA9IHJlYWxfaGFuZGxlcjsKLQotCS8qIEJ1aWxkIGRlbHRhIHQxLXQyIGFzIGFwaWMgdGltZXIgY291bnRzIGRvd24gKi8KLQlkZWx0YSA9IGxhcGljX2NhbF90MSAtIGxhcGljX2NhbF90MjsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gbGFwaWMgZGVsdGEgPSAlbGRcbiIsIGRlbHRhKTsKLQotCS8qIHdlIHRydXN0IHRoZSBQTSBiYXNlZCBjYWxpYnJhdGlvbiBpZiBwb3NzaWJsZSAqLwotCXBtX3JlZmVyZW5jZWQgPSAhY2FsaWJyYXRlX2J5X3BtdGltZXIobGFwaWNfY2FsX3BtMiAtIGxhcGljX2NhbF9wbTEsCi0JCQkJCSZkZWx0YSk7Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLwotCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhkZWx0YSwgVElDS19OU0VDICogTEFQSUNfQ0FMX0xPT1BTLAotCQkJCSAgICAgICBsYXBpY19jbG9ja2V2ZW50LnNoaWZ0KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkYsICZsYXBpY19jbG9ja2V2ZW50KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmbGFwaWNfY2xvY2tldmVudCk7Ci0KLQljYWxpYnJhdGlvbl9yZXN1bHQgPSAoZGVsdGEgKiBBUElDX0RJVklTT1IpIC8gTEFQSUNfQ0FMX0xPT1BTOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gZGVsdGEgJWxkXG4iLCBkZWx0YSk7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gbXVsdDogJWxkXG4iLCBsYXBpY19jbG9ja2V2ZW50Lm11bHQpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGNhbGlicmF0aW9uIHJlc3VsdDogJXVcbiIsCi0JCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQpOwotCi0JaWYgKGNwdV9oYXNfdHNjKSB7Ci0JCWRlbHRhID0gKGxvbmcpKGxhcGljX2NhbF90c2MyIC0gbGFwaWNfY2FsX3RzYzEpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBDUFUgY2xvY2sgc3BlZWQgaXMgIgotCQkJICAgICIlbGQuJTA0bGQgTUh6LlxuIiwKLQkJCSAgICAoZGVsdGEgLyBMQVBJQ19DQUxfTE9PUFMpIC8gKDEwMDAwMDAgLyBIWiksCi0JCQkgICAgKGRlbHRhIC8gTEFQSUNfQ0FMX0xPT1BTKSAlICgxMDAwMDAwIC8gSFopKTsKLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBob3N0IGJ1cyBjbG9jayBzcGVlZCBpcyAiCi0JCSAgICAiJXUuJTA0dSBNSHouXG4iLAotCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0IC8gKDEwMDAwMDAgLyBIWiksCi0JCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQgJSAoMTAwMDAwMCAvIEhaKSk7Ci0KLQkvKgotCSAqIERvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBBUElDIGNhbGlicmF0aW9uIHJlc3VsdAotCSAqLwotCWlmIChjYWxpYnJhdGlvbl9yZXN1bHQgPCAoMTAwMDAwMCAvIEhaKSkgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXByX3dhcm5pbmcoIkFQSUMgZnJlcXVlbmN5IHRvbyBzbG93LCBkaXNhYmxpbmcgYXBpYyB0aW1lclxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlsZXZ0LT5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7Ci0KLQkvKgotCSAqIFBNIHRpbWVyIGNhbGlicmF0aW9uIGZhaWxlZCBvciBub3QgdHVybmVkIG9uCi0JICogc28gbGV0cyB0cnkgQVBJQyB0aW1lciBiYXNlZCBjYWxpYnJhdGlvbgotCSAqLwotCWlmICghcG1fcmVmZXJlbmNlZCkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gdmVyaWZ5IEFQSUMgdGltZXJcbiIpOwotCi0JCS8qCi0JCSAqIFNldHVwIHRoZSBhcGljIHRpbWVyIG1hbnVhbGx5Ci0JCSAqLwotCQlsZXZ0LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7Ci0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCBsZXZ0KTsKLQkJbGFwaWNfY2FsX2xvb3BzID0gLTE7Ci0KLQkJLyogTGV0IHRoZSBpbnRlcnJ1cHRzIHJ1biAqLwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkJd2hpbGUgKGxhcGljX2NhbF9sb29wcyA8PSBMQVBJQ19DQUxfTE9PUFMpCi0JCQljcHVfcmVsYXgoKTsKLQotCQkvKiBTdG9wIHRoZSBsYXBpYyB0aW1lciAqLwotCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgbGV2dCk7Ci0KLQkJLyogSmlmZmllcyBkZWx0YSAqLwotCQlkZWx0YWogPSBsYXBpY19jYWxfajIgLSBsYXBpY19jYWxfajE7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBqaWZmaWVzIGRlbHRhID0gJWx1XG4iLCBkZWx0YWopOwotCi0JCS8qIENoZWNrLCBpZiB0aGUgamlmZmllcyByZXN1bHQgaXMgY29uc2lzdGVudCAqLwotCQlpZiAoZGVsdGFqID49IExBUElDX0NBTF9MT09QUy0yICYmIGRlbHRhaiA8PSBMQVBJQ19DQUxfTE9PUFMrMikKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBqaWZmaWVzIHJlc3VsdCBva1xuIik7Ci0JCWVsc2UKLQkJCWxldnQtPmZlYXR1cmVzIHw9IENMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCX0gZWxzZQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQlpZiAobGV2dC0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9EVU1NWSkgewotCQlwcl93YXJuaW5nKCJBUElDIHRpbWVyIGRpc2FibGVkIGR1ZSB0byB2ZXJpZmljYXRpb24gZmFpbHVyZVxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgYm9vdCBBUElDCi0gKgotICogQ2FsaWJyYXRlIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdC4KLSAqLwotdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSBrZXJuZWwKLQkgKiBjb21tYW5kbGluZSBvciBmcm9tIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUuIFJlZ2lzdGVyIHRoZSBsYXBpYwotCSAqIHRpbWVyIGFzIGEgZHVtbXkgY2xvY2sgZXZlbnQgc291cmNlIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUKLQkgKiBicm9hZGNhc3QgbWVjaGFuaXNtIGlzIHVzZWQuIE9uIFVQIHN5c3RlbXMgc2ltcGx5IGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZGlzYWJsZV9hcGljX3RpbWVyKSB7Ci0JCXByX2luZm8oIkRpc2FibGluZyBBUElDIHRpbWVyXG4iKTsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSB7Ci0JCQlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSAxOwotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJVc2luZyBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdHMuXG4iCi0JCSAgICAiY2FsaWJyYXRpbmcgQVBJQyB0aW1lciAuLi5cbiIpOwotCi0JaWYgKGNhbGlicmF0ZV9BUElDX2Nsb2NrKCkpIHsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiBubWlfd2F0Y2hkb2cgaXMgc2V0IHRvIElPX0FQSUMsIHdlIG5lZWQgdGhlCi0JICogUElUL0hQRVQgZ29pbmcuICBPdGhlcndpc2UgcmVnaXN0ZXIgbGFwaWMgYXMgYSBkdW1teQotCSAqIGRldmljZS4KLQkgKi8KLQlpZiAobm1pX3dhdGNoZG9nICE9IE5NSV9JT19BUElDKQotCQlsYXBpY19jbG9ja2V2ZW50LmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9EVU1NWTsKLQllbHNlCi0JCXByX3dhcm5pbmcoIkFQSUMgdGltZXIgcmVnaXN0ZXJlZCBhcyBkdW1teSwiCi0JCQkiIGR1ZSB0byBubWlfd2F0Y2hkb2c9JWQhXG4iLCBubWlfd2F0Y2hkb2cpOwotCi0JLyogU2V0dXAgdGhlIGxhcGljIG9yIHJlcXVlc3QgdGhlIGJyb2FkY2FzdCAqLwotCXNldHVwX0FQSUNfdGltZXIoKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCkKLXsKLQlzZXR1cF9BUElDX3RpbWVyKCk7Ci19Ci0KLS8qCi0gKiBUaGUgZ3V0cyBvZiB0aGUgYXBpYyB0aW1lciBpbnRlcnJ1cHQKLSAqLwotc3RhdGljIHZvaWQgbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZwZXJfY3B1KGxhcGljX2V2ZW50cywgY3B1KTsKLQotCS8qCi0JICogTm9ybWFsbHkgd2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHRpbGwgTEFQSUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnV0Ci0JICogaW4gc29tZSBjYXNlcyBsaWtlIGtkdW1wLCBpdHMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBhIHBlbmRpbmcgTEFQSUMKLQkgKiB0aW1lciBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwncyBjb250ZXh0IGFuZCBpcyBkZWxpdmVyZWQgaW4KLQkgKiBuZXcga2VybmVsIHRoZSBtb21lbnQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KLQkgKgotCSAqIEludGVycnVwdHMgYXJlIGVuYWJsZWQgZWFybHkgYW5kIExBUElDIGlzIHNldHVwIG11Y2ggbGF0ZXIsIGhlbmNlCi0JICogaXRzIHBvc3NpYmxlIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSBldnQtPmV2ZW50X2hhbmRsZXIgaXMgTlVMTC4KLQkgKiBDaGVjayBmb3IgZXZlbnRfaGFuZGxlciBiZWluZyBOVUxMIGFuZCBkaXNjYXJkIHRoZSBpbnRlcnJ1cHQgYXMKLQkgKiBzcHVyaW91cy4KLQkgKi8KLQlpZiAoIWV2dC0+ZXZlbnRfaGFuZGxlcikgewotCQlwcl93YXJuaW5nKCJTcHVyaW91cyBMQVBJQyB0aW1lciBpbnRlcnJ1cHQgb24gY3B1ICVkXG4iLCBjcHUpOwotCQkvKiBTd2l0Y2ggaXQgb2ZmICovCi0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1NIVVRET1dOLCBldnQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiB0aGUgTk1JIGRlYWRsb2NrLWRldGVjdG9yIHVzZXMgdGhpcy4KLQkgKi8KLQlpbmNfaXJxX3N0YXQoYXBpY190aW1lcl9pcnFzKTsKLQotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQuIFRoaXMgaXMgdGhlIG1vc3QgbmF0dXJhbCB3YXkgZm9yIGRvaW5nCi0gKiBsb2NhbCBpbnRlcnJ1cHRzLCBidXQgbG9jYWwgdGltZXIgaW50ZXJydXB0cyBjYW4gYmUgZW11bGF0ZWQgYnkKLSAqIGJyb2FkY2FzdCBpbnRlcnJ1cHRzIHRvby4gW2luIGNhc2UgdGhlIGh3IGRvZXNuJ3Qgc3VwcG9ydCBBUElDIHRpbWVyc10KLSAqCi0gKiBbIGlmIGEgc2luZ2xlLUNQVSBzeXN0ZW0gcnVucyBhbiBTTVAga2VybmVsIHRoZW4gd2UgY2FsbCB0aGUgbG9jYWwKLSAqICAgaW50ZXJydXB0IGFzIHdlbGwuIFRodXMgd2UgY2Fubm90IGlubGluZSB0aGUgbG9jYWwgaXJxIC4uLiBdCi0gKi8KLXZvaWQgX19pcnFfZW50cnkgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKLQotCS8qCi0JICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCi0JICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQkvKgotCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgZXhwZWN0cyB1cyB0byBoYXZlIGRvbmUgaXJxX2VudGVyKCkuCi0JICogQmVzaWRlcywgaWYgd2UgZG9uJ3QgdGltZXIgaW50ZXJydXB0cyBpZ25vcmUgdGhlIGdsb2JhbAotCSAqIGludGVycnVwdCBsb2NrLCB3aGljaCBpcyB0aGUgV3JvbmdUaGluZyAodG0pIHRvIGRvLgotCSAqLwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCWxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KCk7Ci0JaXJxX2V4aXQoKTsKLQotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLWludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHN0YXJ0IGFuZCBzaHV0ZG93bgotICovCi0KLS8qKgotICogY2xlYXJfbG9jYWxfQVBJQyAtIHNodXRkb3duIHRoZSBsb2NhbCBBUElDCi0gKgotICogVGhpcyBpcyBjYWxsZWQsIHdoZW4gYSBDUFUgaXMgZGlzYWJsZWQgYW5kIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoZSBzdGF0ZSBvZgotICogdGhlIGxvY2FsIEFQSUMgaGFzIG5vIGRhbmdsaW5nIGxlZnRvdmVycy4gQWxzbyB1c2VkIHRvIGNsZWFub3V0IGFueSBCSU9TCi0gKiBsZWZ0b3ZlcnMgZHVyaW5nIGJvb3QuCi0gKi8KLXZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKQotewotCWludCBtYXhsdnQ7Ci0JdTMyIHY7Ci0KLQkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCS8qCi0JICogTWFza2luZyBhbiBMVlQgZW50cnkgY2FuIHRyaWdnZXIgYSBsb2NhbCBBUElDIGVycm9yCi0JICogaWYgdGhlIHZlY3RvciBpcyB6ZXJvLiBNYXNrIExWVEVSUiBmaXJzdCB0byBwcmV2ZW50IHRoaXMuCi0JICovCi0JaWYgKG1heGx2dCA+PSAzKSB7Ci0JCXYgPSBFUlJPUl9BUElDX1ZFQ1RPUjsgLyogYW55IG5vbi16ZXJvIHZlY3RvciB3aWxsIGRvICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQkvKgotCSAqIENhcmVmdWw6IHdlIGhhdmUgdG8gc2V0IG1hc2tzIG9ubHkgZmlyc3QgdG8gZGVhc3NlcnQKLQkgKiBhbnkgbGV2ZWwtdHJpZ2dlcmVkIHNvdXJjZXMuCi0JICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkgewotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0jZW5kaWYKLQkvKgotCSAqIENsZWFuIEFQSUMgc3RhdGUgZm9yIG90aGVyIE9TczoKLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDMpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfTFZUX01BU0tFRCk7Ci0KLQkvKiBJbnRlZ3JhdGVkIEFQSUMgKCE4MjQ4OURYKSA/ICovCi0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSkgewotCQlpZiAobWF4bHZ0ID4gMykKLQkJCS8qIENsZWFyIEVTUiBkdWUgdG8gUGVudGl1bSBlcnJhdGEgM0FQIGFuZCAxMUFQICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKLQl9Ci19Ci0KLS8qKgotICogZGlzYWJsZV9sb2NhbF9BUElDIC0gY2xlYXIgYW5kIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMKLSAqLwotdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuOwotCi0JY2xlYXJfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBEaXNhYmxlIEFQSUMgKGltcGxpZXMgY2xlYXJpbmcgb2YgcmVnaXN0ZXJzCi0JICogZm9yIDgyNDg5RFghKS4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXaGVuIExBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsLAotCSAqIHJlc3RvcmUgdGhlIGRpc2FibGVkIHN0YXRlLgotCSAqLwotCWlmIChlbmFibGVkX3ZpYV9hcGljYmFzZSkgewotCQl1bnNpZ25lZCBpbnQgbCwgaDsKLQotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCX0KLSNlbmRpZgotfQotCi0vKgotICogSWYgTGludXggZW5hYmxlZCB0aGUgTEFQSUMgYWdhaW5zdCB0aGUgQklPUyBkZWZhdWx0IGRpc2FibGUgaXQgZG93biBiZWZvcmUKLSAqIHJlLWVudGVyaW5nIHRoZSBCSU9TIG9uIHNodXRkb3duLiAgT3RoZXJ3aXNlIHRoZSBCSU9TIG1heSBnZXQgY29uZnVzZWQgYW5kCi0gKiBub3QgcG93ZXItb2ZmLiAgQWRkaXRpb25hbGx5IGNsZWFyIGFsbCBMVlQgZW50cmllcyBiZWZvcmUgZGlzYWJsZV9sb2NhbF9BUElDCi0gKiBmb3IgdGhlIGNhc2Ugd2hlcmUgTGludXggZGlkbid0IGVuYWJsZSB0aGUgTEFQSUMuCi0gKi8KLXZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjcHVfaGFzX2FwaWMpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAoIWVuYWJsZWRfdmlhX2FwaWNiYXNlKQotCQljbGVhcl9sb2NhbF9BUElDKCk7Ci0JZWxzZQotI2VuZGlmCi0JCWRpc2FibGVfbG9jYWxfQVBJQygpOwotCi0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSByZWFsIGxvY2FsIEFQSUMuCi0gKiBDaGVjayB0aGVzZSBhZ2FpbnN0IHlvdXIgYm9hcmQgaWYgdGhlIENQVXMgYXJlbid0IGdldHRpbmcKLSAqIHN0YXJ0ZWQgZm9yIG5vIGFwcGFyZW50IHJlYXNvbi4KLSAqLwotaW50IF9faW5pdCB2ZXJpZnlfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCByZWcwLCByZWcxOwotCi0JLyoKLQkgKiBUaGUgdmVyc2lvbiByZWdpc3RlciBpcyByZWFkLW9ubHkgaW4gYSByZWFsIEFQSUMuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlIsIHJlZzAgXiBBUElDX0xWUl9NQVNLKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBWRVJTSU9OOiAleFxuIiwgcmVnMSk7Ci0KLQkvKgotCSAqIFRoZSB0d28gdmVyc2lvbiByZWFkcyBhYm92ZSBzaG91bGQgcHJpbnQgdGhlIHNhbWUKLQkgKiBudW1iZXJzLiAgSWYgdGhlIHNlY29uZCBvbmUgaXMgZGlmZmVyZW50LCB0aGVuIHdlCi0JICogcG9rZSBhdCBhIG5vbi1BUElDLgotCSAqLwotCWlmIChyZWcxICE9IHJlZzApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgdmVyc2lvbiBsb29rcyByZWFzb25hYmx5LgotCSAqLwotCXJlZzEgPSBHRVRfQVBJQ19WRVJTSU9OKHJlZzApOwotCWlmIChyZWcxID09IDB4MDAgfHwgcmVnMSA9PSAweGZmKQotCQlyZXR1cm4gMDsKLQlyZWcxID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCWlmIChyZWcxIDwgMHgwMiB8fCByZWcxID09IDB4ZmYpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGUgSUQgcmVnaXN0ZXIgaXMgcmVhZC93cml0ZSBpbiBhIHJlYWwgQVBJQy4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMCk7Ci0JYXBpY193cml0ZShBUElDX0lELCByZWcwIF4gQVBJQ19JRF9NQVNLKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMSk7Ci0JYXBpY193cml0ZShBUElDX0lELCByZWcwKTsKLQlpZiAocmVnMSAhPSAocmVnMCBeIEFQSUNfSURfTUFTSykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGUgbmV4dCB0d28gYXJlIGp1c3QgdG8gc2VlIGlmIHdlIGhhdmUgc2FuZSB2YWx1ZXMuCi0JICogVGhleSdyZSBvbmx5IHJlYWxseSByZWxldmFudCBpZiB3ZSdyZSBpbiBWaXJ0dWFsIFdpcmUKLQkgKiBjb21wYXRpYmlsaXR5IG1vZGUsIGJ1dCBtb3N0IGJveGVzIGFyZSBhbnltb3JlLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQwOiAleFxuIiwgcmVnMCk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIExWVDE6ICV4XG4iLCByZWcxKTsKLQotCXJldHVybiAxOwotfQotCi0vKioKLSAqIHN5bmNfQXJiX0lEcyAtIHN5bmNocm9uaXplIEFQSUMgYnVzIGFyYml0cmF0aW9uIElEcwotICovCi12b2lkIF9faW5pdCBzeW5jX0FyYl9JRHModm9pZCkKLXsKLQkvKgotCSAqIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xIEFuZCBub3QKLQkgKiBuZWVkZWQgb24gQU1ELgotCSAqLwotCWlmIChtb2Rlcm5fYXBpYygpIHx8IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCi0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIlN5bmNocm9uaXppbmcgQXJiIElEcy5cbiIpOwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfREVTVF9BTExJTkMgfAotCQkJQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19ETV9JTklUKTsKLX0KLQotLyoKLSAqIEFuIGluaXRpYWwgc2V0dXAgb2YgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgotICovCi12b2lkIF9faW5pdCBpbml0X2JzcF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JLyoKLQkgKiBEb24ndCBkbyB0aGUgc2V0dXAgbm93IGlmIHdlIGhhdmUgYSBTTVAgQklPUyBhcyB0aGUKLQkgKiB0aHJvdWdoLUkvTy1BUElDIHZpcnR1YWwgd2lyZSBtb2RlIG1pZ2h0IGJlIGFjdGl2ZS4KLQkgKi8KLQlpZiAoc21wX2ZvdW5kX2NvbmZpZyB8fCAhY3B1X2hhc19hcGljKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCi0JICovCi0JY2xlYXJfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBFbmFibGUgQVBJQy4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogVGhpcyBiaXQgaXMgcmVzZXJ2ZWQgb24gUDQvWGVvbiBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJgotCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQotCQl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCWVsc2UKLSNlbmRpZgotCQl2YWx1ZSB8PSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0JdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCS8qCi0JICogU2V0IHVwIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOwotCXZhbHVlID0gQVBJQ19ETV9OTUk7Ci0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCQkvKiA4MjQ4OURYICovCi0JCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGxhcGljX3NldHVwX2Vzcih2b2lkKQotewotCXVuc2lnbmVkIGludCBvbGR2YWx1ZSwgdmFsdWUsIG1heGx2dDsKLQotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7Ci0JCXByX2luZm8oIk5vIEVTUiBmb3IgODI0ODlEWC5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGVzcl9kaXNhYmxlKSB7Ci0JCS8qCi0JCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgotCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQotCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKLQkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAotCQkgKi8KLQkJcHJfaW5mbygiTGVhdmluZyBFU1IgZGlzYWJsZWQuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0Jb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JLyogZW5hYmxlcyBzZW5kaW5nIGVycm9ycyAqLwotCXZhbHVlID0gRVJST1JfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOwotCi0JLyoKLQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KLQkgKi8KLQlpZiAobWF4bHZ0ID4gMykKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCi0JCQkidmVjdG9yOiAweCUwOHggIGFmdGVyOiAweCUwOHhcbiIsCi0JCQlvbGR2YWx1ZSwgdmFsdWUpOwotfQotCi0KLS8qKgotICogc2V0dXBfbG9jYWxfQVBJQyAtIHNldHVwIHRoZSBsb2NhbCBBUElDCi0gKi8KLXZvaWQgX19jcHVpbml0IHNldHVwX2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JaW50IGksIGo7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogUG91bmQgdGhlIEVTUiByZWFsbHkgaGFyZCBvdmVyIHRoZSBoZWFkIHdpdGggYSBiaWcgaGFtbWVyIC0gbWJsaWdoICovCi0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSAmJiBlc3JfZGlzYWJsZSkgewotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQl9Ci0jZW5kaWYKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCi0JLyoKLQkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCi0JICogVGhpcyBpcyBtZWFuaW5nbGVzcyBpbiBjbHVzdGVyZWQgYXBpYyBtb2RlLCBzbyB3ZSBza2lwIGl0LgotCSAqLwotCWlmICghYXBpY19pZF9yZWdpc3RlcmVkKCkpCi0JCUJVRygpOwotCi0JLyoKLQkgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotCSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0JICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KLQkgKi8KLQlpbml0X2FwaWNfbGRyKCk7Ci0KLQkvKgotCSAqIFNldCBUYXNrIFByaW9yaXR5IHRvICdhY2NlcHQgYWxsJy4gV2UgbmV2ZXIgY2hhbmdlIHRoaXMKLQkgKiBsYXRlciBvbi4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCXZhbHVlICY9IH5BUElDX1RQUklfTUFTSzsKLQlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgdmFsdWUpOwotCi0JLyoKLQkgKiBBZnRlciBhIGNyYXNoLCB3ZSBubyBsb25nZXIgc2VydmljZSB0aGUgaW50ZXJydXB0cyBhbmQgYSBwZW5kaW5nCi0JICogaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsIG1pZ2h0IHN0aWxsIGhhdmUgSVNSIGJpdCBzZXQuCi0JICoKLQkgKiBNb3N0IHByb2JhYmx5IGJ5IG5vdyBDUFUgaGFzIHNlcnZpY2VkIHRoYXQgcGVuZGluZyBpbnRlcnJ1cHQgYW5kCi0JICogaXQgbWlnaHQgbm90IGhhdmUgZG9uZSB0aGUgYWNrX0FQSUNfaXJxKCkgYmVjYXVzZSBpdCB0aG91Z2h0LAotCSAqIGludGVycnVwdCBjYW1lIGZyb20gaTgyNTkgYXMgRXh0SW50LiBMQVBJQyBkaWQgbm90IGdldCBFT0kgc28gaXQKLQkgKiBkb2VzIG5vdCBjbGVhciB0aGUgSVNSIGJpdCBhbmQgY3B1IHRoaW5rcyBpdCBoYXMgYWxyZWFkeSBzZXJpdmNlZAotCSAqIHRoZSBpbnRlcnJ1cHQuIEhlbmNlIGEgdmVjdG9yIG1pZ2h0IGdldCBsb2NrZWQuIEl0IHdhcyBub3RpY2VkCi0JICogZm9yIHRpbWVyIGlycSAodmVjdG9yIDB4MzEpLiBJc3N1ZSBhbiBleHRyYSBFT0kgdG8gY2xlYXIgSVNSLgotCSAqLwotCWZvciAoaSA9IEFQSUNfSVNSX05SIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyBpKjB4MTApOwotCQlmb3IgKGogPSAzMTsgaiA+PSAwOyBqLS0pIHsKLQkJCWlmICh2YWx1ZSAmICgxPDxqKSkKLQkJCQlhY2tfQVBJQ19pcnEoKTsKLQkJfQotCX0KLQotCS8qCi0JICogTm93IHRoYXQgd2UgYXJlIGFsbCBzZXQgdXAsIGVuYWJsZSB0aGUgQVBJQwotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JLyoKLQkgKiBFbmFibGUgQVBJQwotCSAqLwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBTb21lIHVua25vd24gSW50ZWwgSU8vQVBJQyAob3IgQVBJQykgZXJyYXRhIGlzIGJpdGluZyB1cyB3aXRoCi0JICogY2VydGFpbiBuZXR3b3JraW5nIGNhcmRzLiBJZiBoaWdoIGZyZXF1ZW5jeSBpbnRlcnJ1cHRzIGFyZQotCSAqIGhhcHBlbmluZyBvbiBhIHBhcnRpY3VsYXIgSU9BUElDIHBpbiwgcGx1cyB0aGUgSU9BUElDIHJvdXRpbmcKLQkgKiBlbnRyeSBpcyBtYXNrZWQvdW5tYXNrZWQgYXQgYSBoaWdoIHJhdGUgYXMgd2VsbCB0aGVuIHNvb25lciBvcgotCSAqIGxhdGVyIElPQVBJQyBsaW5lIGdldHMgJ3N0dWNrJywgbm8gbW9yZSBpbnRlcnJ1cHRzIGFyZSByZWNlaXZlZAotCSAqIGZyb20gdGhlIGRldmljZS4gSWYgZm9jdXMgQ1BVIGlzIGRpc2FibGVkIHRoZW4gdGhlIGhhbmcgZ29lcwotCSAqIGF3YXksIG9oIHdlbGwgOi0oCi0JICoKLQkgKiBbIFRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkIGVhc2lseSB3aXRoIGEgbGV2ZWwtdHJpZ2dlcmVkCi0JICogICBQQ0kgTmUyMDAwIG5ldHdvcmtpbmcgY2FyZHMgYW5kIFBJSS9QSUlJIHByb2Nlc3NvcnMsIGR1YWwKLQkgKiAgIEJYIGNoaXBzZXQuIF0KLQkgKi8KLQkvKgotCSAqIEFjdHVhbGx5IGRpc2FibGluZyB0aGUgZm9jdXMgQ1BVIGNoZWNrIGp1c3QgbWFrZXMgdGhlIGhhbmcgbGVzcwotCSAqIGZyZXF1ZW50IGFzIGl0IG1ha2VzIHRoZSBpbnRlcnJ1cHQgZGlzdHJpYnV0b24gbW9kZWwgYmUgbW9yZQotCSAqIGxpa2UgTFJVIHRoYW4gTVJVICh0aGUgc2hvcnQtdGVybSBsb2FkIGlzIG1vcmUgZXZlbiBhY3Jvc3MgQ1BVcykuCi0JICogU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gZW5kX2xldmVsX2lvYXBpY19pcnEoKS4gIC0tbWFjcm8KLQkgKi8KLQotCS8qCi0JICogLSBlbmFibGUgZm9jdXMgcHJvY2Vzc29yIChiaXQ9PTApCi0JICogLSA2NGJpdCBtb2RlIGFsd2F5cyB1c2UgcHJvY2Vzc29yIGZvY3VzCi0JICogICBzbyBubyBuZWVkIHRvIHNldCBpdAotCSAqLwotCXZhbHVlICY9IH5BUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0jZW5kaWYKLQotCS8qCi0JICogU2V0IHNwdXJpb3VzIElSUSB2ZWN0b3IKLQkgKi8KLQl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JLyoKLQkgKiBTZXQgdXAgTFZUMCwgTFZUMToKLQkgKgotCSAqIHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgb24gdGhlIEJQJ3MgTElOVDAuIFRoaXMgaXMgbm90Ci0JICogc3RyaWN0bHkgbmVjZXNzYXJ5IGluIHB1cmUgc3ltbWV0cmljLUlPIG1vZGUsIGJ1dCBzb21ldGltZXMKLQkgKiB3ZSBkZWxlZ2F0ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4KLQkgKi8KLQkvKgotCSAqIFRPRE86IHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgZnJvbSB0aHJvdWdoLUkvTy1BUElDPyAtLW1hY3JvCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKSAmIEFQSUNfTFZUX01BU0tFRDsKLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAocGljX21vZGUgfHwgIXZhbHVlKSkgewotCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJlbmFibGVkIEV4dElOVCBvbiBDUFUjJWRcbiIsCi0JCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9IGVsc2UgewotCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UIHwgQVBJQ19MVlRfTUFTS0VEOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKLQkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOwotCX0KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwotCi0JLyoKLQkgKiBvbmx5IHRoZSBCUCBzaG91bGQgc2VlIHRoZSBMSU5UMSBOTUkgc2lnbmFsLCBvYnZpb3VzbHkuCi0JICovCi0JaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCXZhbHVlID0gQVBJQ19ETV9OTUk7Ci0JZWxzZQotCQl2YWx1ZSA9IEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEOwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLwotCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQotewotCWxhcGljX3NldHVwX2VzcigpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXsKLQkJdW5zaWduZWQgaW50IHZhbHVlOwotCQkvKiBEaXNhYmxlIHRoZSBsb2NhbCBhcGljIHRpbWVyICovCi0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCXZhbHVlIHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdmFsdWUpOwotCX0KLSNlbmRpZgotCi0Jc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7Ci0JYXBpY19wbV9hY3RpdmF0ZSgpOwotfQotCi0jaWZkZWYgSEFWRV9YMkFQSUMKLXZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCi17Ci0JaW50IG1zciwgbXNyMjsKLQotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOwotCi0JaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpIHsKLQkJcHJfaW5mbygieDJhcGljIGVuYWJsZWQgYnkgQklPUywgc3dpdGNoaW5nIHRvIHgyYXBpYyBvcHNcbiIpOwotCQl4MmFwaWNfcHJlZW5hYmxlZCA9IHgyYXBpYyA9IDE7Ci0JCWFwaWNfb3BzID0gJngyYXBpY19vcHM7Ci0JfQotfQotCi12b2lkIGVuYWJsZV94MmFwaWModm9pZCkKLXsKLQlpbnQgbXNyLCBtc3IyOwotCi0JcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7Ci0JaWYgKCEobXNyICYgWDJBUElDX0VOQUJMRSkpIHsKLQkJcHJfaW5mbygiRW5hYmxpbmcgeDJhcGljXG4iKTsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciB8IFgyQVBJQ19FTkFCTEUsIDApOwotCX0KLX0KLQotdm9pZCBfX2luaXQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQotewotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuOwotCi0JaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykgewotCQlwcl9pbmZvKCJTa2lwcGVkIGVuYWJsaW5nIHgyYXBpYyBhbmQgSW50ZXJydXB0LXJlbWFwcGluZyAiCi0JCQkiYmVjYXVzZSBvZiBub3gyYXBpY1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoeDJhcGljX3ByZWVuYWJsZWQgJiYgZGlzYWJsZV94MmFwaWMpCi0JCXBhbmljKCJCaW9zIGFscmVhZHkgZW5hYmxlZCB4MmFwaWMsIGNhbid0IGVuZm9yY2Ugbm94MmFwaWMiKTsKLQotCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgc2tpcF9pb2FwaWNfc2V0dXApIHsKLQkJcHJfaW5mbygiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgotCQkJImJlY2F1c2Ugb2Ygc2tpcHBpbmcgaW8tYXBpYyBzZXR1cFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXQgPSBkbWFyX3RhYmxlX2luaXQoKTsKLQlpZiAocmV0KSB7Ci0JCXByX2luZm8oImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKLQotCQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCQlwYW5pYygieDJhcGljIGVuYWJsZWQgYnkgYmlvcy4gQnV0IElSIGVuYWJsaW5nIGZhaWxlZCIpOwotCQllbHNlCi0JCQlwcl9pbmZvKCJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXNrXzgyNTlBKCk7Ci0KLQlyZXQgPSBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOwotCWlmIChyZXQpIHsKLQkJcHJfaW5mbygiU2F2aW5nIElPLUFQSUMgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOwotCi0JaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7Ci0JfQotCi0JaWYgKHJldCkKLQkJZ290byBlbmRfcmVzdG9yZTsKLQotCWlmICgheDJhcGljKSB7Ci0JCXgyYXBpYyA9IDE7Ci0JCWFwaWNfb3BzID0gJngyYXBpY19vcHM7Ci0JCWVuYWJsZV94MmFwaWMoKTsKLQl9Ci0KLWVuZF9yZXN0b3JlOgotCWlmIChyZXQpCi0JCS8qCi0JCSAqIElSIGVuYWJsaW5nIGZhaWxlZAotCQkgKi8KLQkJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7Ci0JZWxzZQotCQlyZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKHgyYXBpY19wcmVlbmFibGVkKTsKLQotZW5kOgotCXVubWFza184MjU5QSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICghcmV0KSB7Ci0JCWlmICgheDJhcGljX3ByZWVuYWJsZWQpCi0JCQlwcl9pbmZvKCJFbmFibGVkIHgyYXBpYyBhbmQgaW50ZXJydXB0LXJlbWFwcGluZ1xuIik7Ci0JCWVsc2UKLQkJCXByX2luZm8oIkVuYWJsZWQgSW50ZXJydXB0LXJlbWFwcGluZ1xuIik7Ci0JfSBlbHNlCi0JCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSBJbnRlcnJ1cHQtcmVtYXBwaW5nIGFuZCB4MmFwaWNcbiIpOwotI2Vsc2UKLQlpZiAoIWNwdV9oYXNfeDJhcGljKQotCQlyZXR1cm47Ci0KLQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBwcmlvciBPUyBoYW5kb3ZlciwiCi0JCSAgICAgICIgZW5hYmxlIENPTkZJR19JTlRSX1JFTUFQIik7Ci0KLQlwcl9pbmZvKCJFbmFibGUgQ09ORklHX0lOVFJfUkVNQVAgZm9yIGVuYWJsaW5nIGludHItcmVtYXBwaW5nICIKLQkJIiBhbmQgeDJhcGljXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuOwotfQotI2VuZGlmIC8qIEhBVkVfWDJBUElDICovCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0vKgotICogRGV0ZWN0IGFuZCBlbmFibGUgbG9jYWwgQVBJQ3Mgb24gbm9uLVNNUCBib2FyZHMuCi0gKiBPcmlnaW5hbCBjb2RlIHdyaXR0ZW4gYnkgS2VpciBGcmFzZXIuCi0gKiBPbiBBTUQ2NCB3ZSB0cnVzdCB0aGUgQklPUyAtIGlmIGl0IHNheXMgbm8gQVBJQyBpdCBpcyBsaWtlbHkKLSAqIG5vdCBjb3JyZWN0bHkgc2V0IHVwICh1c3VhbGx5IHRoZSBBUElDIHRpbWVyIHdvbid0IHdvcmsgZXRjLikKLSAqLwotc3RhdGljIGludCBfX2luaXQgZGV0ZWN0X2luaXRfQVBJQyh2b2lkKQotewotCWlmICghY3B1X2hhc19hcGljKSB7Ci0JCXByX2luZm8oIk5vIGxvY2FsIEFQSUMgcHJlc2VudFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQltcF9sYXBpY19hZGRyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSAwOwotCXJldHVybiAwOwotfQotI2Vsc2UKLS8qCi0gKiBEZXRlY3QgYW5kIGluaXRpYWxpemUgQVBJQwotICovCi1zdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCi17Ci0JdTMyIGgsIGwsIGZlYXR1cmVzOwotCi0JLyogRGlzYWJsZWQgYnkga2VybmVsIG9wdGlvbj8gKi8KLQlpZiAoZGlzYWJsZV9hcGljKQotCQlyZXR1cm4gLTE7Ci0KLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDEpIHx8Ci0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMTUpKQotCQkJYnJlYWs7Ci0JCWdvdG8gbm9fYXBpYzsKLQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2IHx8IGJvb3RfY3B1X2RhdGEueDg2ID09IDE1IHx8Ci0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJiBjcHVfaGFzX2FwaWMpKQotCQkJYnJlYWs7Ci0JCWdvdG8gbm9fYXBpYzsKLQlkZWZhdWx0OgotCQlnb3RvIG5vX2FwaWM7Ci0JfQotCi0JaWYgKCFjcHVfaGFzX2FwaWMpIHsKLQkJLyoKLQkJICogT3Zlci1yaWRlIEJJT1MgYW5kIHRyeSB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMgb25seSBpZgotCQkgKiAibGFwaWMiIHNwZWNpZmllZC4KLQkJICovCi0JCWlmICghZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWMpIHsKLQkJCXByX2luZm8oIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSAiCi0JCQkJInlvdSBjYW4gZW5hYmxlIGl0IHdpdGggXCJsYXBpY1wiXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQkvKgotCQkgKiBTb21lIEJJT1NlcyBkaXNhYmxlIHRoZSBsb2NhbCBBUElDIGluIHRoZSBBUElDX0JBU0UKLQkJICogTVNSLiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgaW4gc29mdHdhcmUgZm9yIEludGVsIFA2IG9yIGxhdGVyCi0JCSAqIGFuZCBBTUQgSzcgKE1vZGVsID4gMSkgb3IgbGF0ZXIuCi0JCSAqLwotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWlmICghKGwgJiBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpKSB7Ci0JCQlwcl9pbmZvKCJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gcmVlbmFibGluZy5cbiIpOwotCQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKLQkJCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKLQkJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJCWVuYWJsZWRfdmlhX2FwaWNiYXNlID0gMTsKLQkJfQotCX0KLQkvKgotCSAqIFRoZSBBUElDIGZlYXR1cmUgYml0IHNob3VsZCBub3cgYmUgZW5hYmxlZAotCSAqIGluIGBjcHVpZCcKLQkgKi8KLQlmZWF0dXJlcyA9IGNwdWlkX2VkeCgxKTsKLQlpZiAoIShmZWF0dXJlcyAmICgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpKSkgewotCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlzZXRfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7Ci0JbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0KLQkvKiBUaGUgQklPUyBtYXkgaGF2ZSBzZXQgdXAgdGhlIEFQSUMgYXQgc29tZSBvdGhlciBhZGRyZXNzICovCi0JcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCWlmIChsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKQotCQltcF9sYXBpY19hZGRyID0gbCAmIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0KLQlwcl9pbmZvKCJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7Ci0KLQlhcGljX3BtX2FjdGl2YXRlKCk7Ci0KLQlyZXR1cm4gMDsKLQotbm9fYXBpYzoKLQlwcl9pbmZvKCJObyBsb2NhbCBBUElDIHByZXNlbnQgb3IgaGFyZHdhcmUgZGlzYWJsZWRcbiIpOwotCXJldHVybiAtMTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotdm9pZCBfX2luaXQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Ci0KLQkvKgotCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0Ci0JICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZykKLQkJcmV0dXJuOwotCi0JcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCi0JCSAgICBBUElDX0JBU0UsIHBoeXNfYWRkcik7Ci0KLQkvKgotCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKLQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgotCSAqLwotCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotfQotI2VuZGlmCi0KLS8qKgotICogaW5pdF9hcGljX21hcHBpbmdzIC0gaW5pdGlhbGl6ZSBBUElDIG1hcHBpbmdzCi0gKi8KLXZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQotewotI2lmZGVmIEhBVkVfWDJBUElDCi0JaWYgKHgyYXBpYykgewotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCi0JLyoKLQkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCi0JICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKLQkgKiBvbmUgZm9yIHRoZSBJTy1BUElDLgotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiBkZXRlY3RfaW5pdF9BUElDKCkpIHsKLQkJYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJYXBpY19waHlzID0gX19wYShhcGljX3BoeXMpOwotCX0gZWxzZQotCQlhcGljX3BoeXMgPSBtcF9sYXBpY19hZGRyOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFwaWNfcGh5cyk7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIEFQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKLQkJCQlBUElDX0JBU0UsIGFwaWNfcGh5cyk7Ci0KLQkvKgotCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKLQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgotCSAqLwotCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoKLSAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcwotICogYSBVUCBrZXJuZWwuCi0gKi8KLWludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKLQotaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmIChkaXNhYmxlX2FwaWMpIHsKLQkJcHJfaW5mbygiQXBpYyBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCFjcHVfaGFzX2FwaWMpIHsKLQkJZGlzYWJsZV9hcGljID0gMTsKLQkJcHJfaW5mbygiQXBpYyBkaXNhYmxlZCBieSBCSU9TXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLSNlbHNlCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogQ29tcGxhaW4gaWYgdGhlIEJJT1MgcHJldGVuZHMgdGhlcmUgaXMgb25lLgotCSAqLwotCWlmICghY3B1X2hhc19hcGljICYmCi0JICAgIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKLQkJcHJfZXJyKCJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAweCV4IG5vdCBkZXRlY3RlZCEuLi5cbiIsCi0JCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwotCQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKLQkJcmV0dXJuIC0xOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9YMkFQSUMKLQllbmFibGVfSVJfeDJhcGljKCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0Jc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0jZW5kaWYKLQotCXZlcmlmeV9sb2NhbF9BUElDKCk7Ci0JY29ubmVjdF9ic3BfQVBJQygpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7Ci0jZWxzZQotCS8qCi0JICogSGFjazogSW4gY2FzZSBvZiBrZHVtcCwgYWZ0ZXIgYSBjcmFzaCwga2VybmVsIG1pZ2h0IGJlIGJvb3RpbmcKLQkgKiBvbiBhIGNwdSB3aXRoIG5vbi16ZXJvIGxhcGljIGlkLiBCdXQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0JICogbWlnaHQgYmUgemVybyBpZiByZWFkIGZyb20gTVAgdGFibGVzLiBHZXQgaXQgZnJvbSBMQVBJQy4KLQkgKi8KLSMgaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLSMgZW5kaWYKLSNlbmRpZgotCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOwotCXNldHVwX2xvY2FsX0FQSUMoKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQkvKgotCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQwotCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgdmVjdG9yIG9uIEJQCi0JICovCi0JaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQllbmFibGVfSU9fQVBJQygpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgfHwgc2tpcF9pb2FwaWNfc2V0dXAgfHwgIW5yX2lvYXBpY3MpCi0jZW5kaWYKLQkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7Ci0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCWlmIChzbXBfZm91bmRfY29uZmlnICYmICFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQlzZXR1cF9JT19BUElDKCk7Ci0jIGlmZGVmIENPTkZJR19YODZfNjQKLQllbHNlCi0JCW5yX2lvYXBpY3MgPSAwOwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0Jc2V0dXBfYm9vdF9BUElDX2Nsb2NrKCk7Ci0JY2hlY2tfbm1pX3dhdGNoZG9nKCk7Ci0jZWxzZQotCXNldHVwX2Jvb3RfY2xvY2soKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIGludGVycnVwdHMKLSAqLwotCi0vKgotICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIF9uZXZlcl8gaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi12b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdTMyIHY7Ci0KLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQkvKgotCSAqIENoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgc3B1cmlvdXMgaW50ZXJydXB0IGFuZCBBQ0sgaXQKLQkgKiBpZiBpdCBpcyBhIHZlY3RvcmVkIG9uZS4gIEp1c3QgaW4gY2FzZS4uLgotCSAqIFNwdXJpb3VzIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBBQ0tlZC4KLQkgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfSVNSICsgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIH4weDFmKSA+PiAxKSk7Ci0JaWYgKHYgJiAoMSA8PCAoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDFmKSkpCi0JCWFja19BUElDX2lycSgpOwotCi0JaW5jX2lycV9zdGF0KGlycV9zcHVyaW91c19jb3VudCk7Ci0KLQkvKiBzZWUgc3ctZGV2LW1hbiB2b2wgMywgY2hhcHRlciA3LjQuMTMuNSAqLwotCXByX2luZm8oInNwdXJpb3VzIEFQSUMgaW50ZXJydXB0IG9uIENQVSMlZCwgIgotCQkic2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaXJxX2V4aXQoKTsKLX0KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBuZXZlciBoYXBwZW4gd2l0aCBvdXIgQVBJQy9TTVAgYXJjaGl0ZWN0dXJlCi0gKi8KLXZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1MzIgdiwgdjE7Ci0KLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQkvKiBGaXJzdCB0aWNrbGUgdGhlIGhhcmR3YXJlLCBvbmx5IHRoZW4gcmVwb3J0IHdoYXQgd2VudCBvbi4gLS0gUkVXICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JdjEgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFja19BUElDX2lycSgpOwotCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOwotCi0JLyoKLQkgKiBIZXJlIGlzIHdoYXQgdGhlIEFQSUMgZXJyb3IgYml0cyBtZWFuOgotCSAqIDA6IFNlbmQgQ1MgZXJyb3IKLQkgKiAxOiBSZWNlaXZlIENTIGVycm9yCi0JICogMjogU2VuZCBhY2NlcHQgZXJyb3IKLQkgKiAzOiBSZWNlaXZlIGFjY2VwdCBlcnJvcgotCSAqIDQ6IFJlc2VydmVkCi0JICogNTogU2VuZCBpbGxlZ2FsIHZlY3RvcgotCSAqIDY6IFJlY2VpdmVkIGlsbGVnYWwgdmVjdG9yCi0JICogNzogSWxsZWdhbCByZWdpc3RlciBhZGRyZXNzCi0JICovCi0JcHJfZGVidWcoIkFQSUMgZXJyb3Igb24gQ1BVJWQ6ICUwMngoJTAyeClcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKLQlpcnFfZXhpdCgpOwotfQotCi0vKioKLSAqIGNvbm5lY3RfYnNwX0FQSUMgLSBhdHRhY2ggdGhlIEFQSUMgdG8gdGhlIGludGVycnVwdCBzeXN0ZW0KLSAqLwotdm9pZCBfX2luaXQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAocGljX21vZGUpIHsKLQkJLyoKLQkJICogRG8gbm90IHRydXN0IHRoZSBsb2NhbCBBUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cC4KLQkJICovCi0JCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQkJLyoKLQkJICogUElDIG1vZGUsIGVuYWJsZSBBUElDIG1vZGUgaW4gdGhlIElNQ1IsIGkuZS4gIGNvbm5lY3QgQlNQJ3MKLQkJICogbG9jYWwgQVBJQyB0byBJTlQgYW5kIE5NSSBsaW5lcy4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImxlYXZpbmcgUElDIG1vZGUsICIKLQkJCQkiZW5hYmxpbmcgQVBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMSwgMHgyMyk7Ci0JfQotI2VuZGlmCi0JZW5hYmxlX2FwaWNfbW9kZSgpOwotfQotCi0vKioKLSAqIGRpc2Nvbm5lY3RfYnNwX0FQSUMgLSBkZXRhY2ggdGhlIEFQSUMgZnJvbSB0aGUgaW50ZXJydXB0IHN5c3RlbQotICogQHZpcnRfd2lyZV9zZXR1cDoJaW5kaWNhdGVzLCB3aGV0aGVyIHZpcnR1YWwgd2lyZSBtb2RlIGlzIHNlbGVjdGVkCi0gKgotICogVmlydHVhbCB3aXJlIG1vZGUgaXMgbmVjZXNzYXJ5IHRvIGRlbGl2ZXIgbGVnYWN5IGludGVycnVwdHMgZXZlbiB3aGVuIHRoZQotICogQVBJQyBpcyBkaXNhYmxlZC4KLSAqLwotdm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBQdXQgdGhlIGJvYXJkIGJhY2sgaW50byBQSUMgbW9kZSAoaGFzIGFuIGVmZmVjdCBvbmx5IG9uCi0JCSAqIGNlcnRhaW4gb2xkZXIgYm9hcmRzKS4gIE5vdGUgdGhhdCBBUElDIGludGVycnVwdHMsIGluY2x1ZGluZwotCQkgKiBJUElzLCB3b24ndCB3b3JrIGJleW9uZCB0aGlzIHBvaW50ISAgVGhlIG9ubHkgZXhjZXB0aW9uIGFyZQotCQkgKiBJTklUIElQSXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJkaXNhYmxpbmcgQVBJQyBtb2RlLCAiCi0JCQkJImVudGVyaW5nIFBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMCwgMHgyMyk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQotCS8qIEdvIGJhY2sgdG8gVmlydHVhbCBXaXJlIGNvbXBhdGliaWxpdHkgbW9kZSAqLwotCi0JLyogRm9yIHRoZSBzcHVyaW91cyBpbnRlcnJ1cHQgdXNlIHZlY3RvciBGLCBhbmQgZW5hYmxlIGl0ICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCXZhbHVlIHw9IDB4ZjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JaWYgKCF2aXJ0X3dpcmVfc2V0dXApIHsKLQkJLyoKLQkJICogRm9yIExWVDAgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCi0JCSAqIGV4dGVybmFsIGFuZCBlbmFibGVkCi0JCSAqLwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAotCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAotCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQkJdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfRVhUSU5UKTsKLQkJYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIExWVDAgKi8KLQkJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyoKLQkgKiBGb3IgTFZUMSBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKLQkgKiBubWkgYW5kIGVuYWJsZWQKLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7Ci0JdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfTk1JKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotfQotCi12b2lkIF9fY3B1aW5pdCBnZW5lcmljX3Byb2Nlc3Nvcl9pbmZvKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCWludCBjcHU7Ci0KLQkvKgotCSAqIFZhbGlkYXRlIHZlcnNpb24KLQkgKi8KLQlpZiAodmVyc2lvbiA9PSAweDApIHsKLQkJcHJfd2FybmluZygiQklPUyBidWcsIEFQSUMgdmVyc2lvbiBpcyAwIGZvciBDUFUjJWQhICIKLQkJCSAgICJmaXhpbmcgdXAgdG8gMHgxMC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCXZlcnNpb24pOwotCQl2ZXJzaW9uID0gMHgxMDsKLQl9Ci0JYXBpY192ZXJzaW9uW2FwaWNpZF0gPSB2ZXJzaW9uOwotCi0JaWYgKG51bV9wcm9jZXNzb3JzID49IG5yX2NwdV9pZHMpIHsKLQkJaW50IG1heCA9IG5yX2NwdV9pZHM7Ci0JCWludCB0aGlzY3B1ID0gbWF4ICsgZGlzYWJsZWRfY3B1czsKLQotCQlwcl93YXJuaW5nKAotCQkJIkFDUEk6IE5SX0NQVVMvcG9zc2libGVfY3B1cyBsaW1pdCBvZiAlaSByZWFjaGVkLiIKLQkJCSIgIFByb2Nlc3NvciAlZC8weCV4IGlnbm9yZWQuXG4iLCBtYXgsIHRoaXNjcHUsIGFwaWNpZCk7Ci0KLQkJZGlzYWJsZWRfY3B1cysrOwotCQlyZXR1cm47Ci0JfQotCi0JbnVtX3Byb2Nlc3NvcnMrKzsKLQljcHUgPSBjcHVtYXNrX25leHRfemVybygtMSwgY3B1X3ByZXNlbnRfbWFzayk7Ci0KLQlpZiAodmVyc2lvbiAhPSBhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkKLQkJV0FSTl9PTkNFKDEsCi0JCQkiQUNQSTogYXBpYyB2ZXJzaW9uIG1pc21hdGNoLCBib290Y3B1OiAleCBjcHUgJWQ6ICV4XG4iLAotCQkJYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0sIGNwdSwgdmVyc2lvbik7Ci0KLQlwaHlzaWRfc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCWlmIChhcGljaWQgPT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSB7Ci0JCS8qCi0JCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBwcm9jZXNzb3JzIGxpc3RlZAotCQkgKiBpbiBzYW1lIG9yZGVyIGFzIGxvZ2ljYWwgY3B1IG51bWJlcnMuIEhlbmNlIHRoZSBmaXJzdAotCQkgKiBlbnRyeSBpcyBCU1AsIGFuZCBzbyBvbi4KLQkJICovCi0JCWNwdSA9IDA7Ci0JfQotCWlmIChhcGljaWQgPiBtYXhfcGh5c2ljYWxfYXBpY2lkKQotCQltYXhfcGh5c2ljYWxfYXBpY2lkID0gYXBpY2lkOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogV291bGQgYmUgcHJlZmVyYWJsZSB0byBzd2l0Y2ggdG8gYmlnc21wIHdoZW4gQ09ORklHX0hPVFBMVUdfQ1BVPXkKLQkgKiBidXQgd2UgbmVlZCB0byB3b3JrIG90aGVyIGRlcGVuZGVuY2llcyBsaWtlIFNNUF9TVVNQRU5EIGV0YwotCSAqIGJlZm9yZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgc29tZSBjb25mdXNpb24uCi0JICogaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgbnVtX3Byb2Nlc3NvcnMgPiA4KQotCSAqICAgICAgIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgotCSAqLwotCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpIHsKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKLQkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgotCQkJaWYgKCFBUElDX1hBUElDKHZlcnNpb24pKSB7Ci0JCQkJZGVmX3RvX2JpZ3NtcCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCQlkZWZfdG9fYmlnc21wID0gMTsKLQkJfQotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X1NNUCkgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCi0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKSkgewotCQl1MTYgKmNwdV90b19hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCk7Ci0JCXUxNiAqYmlvc19jcHVfYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0KLQkJY3B1X3RvX2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCQliaW9zX2NwdV9hcGljaWRbY3B1XSA9IGFwaWNpZDsKLQl9IGVsc2UgewotCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JfQotI2VuZGlmCi0KLQlzZXRfY3B1X3Bvc3NpYmxlKGNwdSwgdHJ1ZSk7Ci0Jc2V0X2NwdV9wcmVzZW50KGNwdSwgdHJ1ZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1pbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JcmV0dXJuIHJlYWRfYXBpY19pZCgpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBQb3dlciBtYW5hZ2VtZW50Ci0gKi8KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHN0cnVjdCB7Ci0JLyoKLQkgKiAnYWN0aXZlJyBpcyB0cnVlIGlmIHRoZSBsb2NhbCBBUElDIHdhcyBlbmFibGVkIGJ5IHVzIGFuZAotCSAqIG5vdCB0aGUgQklPUzsgdGhpcyBzaWduaWZpZXMgdGhhdCB3ZSBhcmUgYWxzbyByZXNwb25zaWJsZQotCSAqIGZvciBkaXNhYmxpbmcgaXQgYmVmb3JlIGVudGVyaW5nIGFwbS9hY3BpIHN1c3BlbmQKLQkgKi8KLQlpbnQgYWN0aXZlOwotCS8qIHIvdyBhcGljIGZpZWxkcyAqLwotCXVuc2lnbmVkIGludCBhcGljX2lkOwotCXVuc2lnbmVkIGludCBhcGljX3Rhc2twcmk7Ci0JdW5zaWduZWQgaW50IGFwaWNfbGRyOwotCXVuc2lnbmVkIGludCBhcGljX2RmcjsKLQl1bnNpZ25lZCBpbnQgYXBpY19zcGl2OwotCXVuc2lnbmVkIGludCBhcGljX2x2dHQ7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0cGM7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0MDsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnQxOwotCXVuc2lnbmVkIGludCBhcGljX2x2dGVycjsKLQl1bnNpZ25lZCBpbnQgYXBpY190bWljdDsKLQl1bnNpZ25lZCBpbnQgYXBpY190ZGNyOwotCXVuc2lnbmVkIGludCBhcGljX3RobXI7Ci19IGFwaWNfcG1fc3RhdGU7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbWF4bHZ0OwotCi0JaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQlhcGljX3BtX3N0YXRlLmFwaWNfaWQgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbGRyID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfZGZyID0gYXBpY19yZWFkKEFQSUNfREZSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfc3BpdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnR0ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dDAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190bWljdCA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdGRjciA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkKLQkJYXBpY19wbV9zdGF0ZS5hcGljX3RobXIgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLSNlbmRpZgotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRpc2FibGVfbG9jYWxfQVBJQygpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgbCwgaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXhsdnQ7Ci0KLQlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmZGVmIEhBVkVfWDJBUElDCi0JaWYgKHgyYXBpYykKLQkJZW5hYmxlX3gyYXBpYygpOwotCWVsc2UKLSNlbmRpZgotCXsKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoZSBBUElDQkFTRSBwb2ludHMgdG8gdGhlIHJpZ2h0IGFkZHJlc3MKLQkJICoKLQkJICogRklYTUUhIFRoaXMgd2lsbCBiZSB3cm9uZyBpZiB3ZSBldmVyIHN1cHBvcnQgc3VzcGVuZCBvbgotCQkgKiBTTVAhIFdlJ2xsIG5lZWQgdG8gZG8gdGhpcyBhcyBwYXJ0IG9mIHRoZSBDUFUgcmVzdG9yZSEKLQkJICovCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKLQkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBtcF9sYXBpY19hZGRyOwotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JfQotCi0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgRVJST1JfQVBJQ19WRUNUT1IgfCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgYXBpY19wbV9zdGF0ZS5hcGljX2lkKTsKLQlhcGljX3dyaXRlKEFQSUNfREZSLCBhcGljX3BtX3N0YXRlLmFwaWNfZGZyKTsKLQlhcGljX3dyaXRlKEFQSUNfTERSLCBhcGljX3BtX3N0YXRlLmFwaWNfbGRyKTsKLQlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkpOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCBhcGljX3BtX3N0YXRlLmFwaWNfc3Bpdik7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkKLQkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIGFwaWNfcG1fc3RhdGUuYXBpY190aG1yKTsKLSNlbmRpZgotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCk7Ci0JYXBpY193cml0ZShBUElDX1REQ1IsIGFwaWNfcG1fc3RhdGUuYXBpY190ZGNyKTsKLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGFwaWNfcG1fc3RhdGUuYXBpY190bWljdCk7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyKTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIGRldmljZSBoYXMgbm8gc2h1dGRvd24gbWV0aG9kIC0gZnVsbHkgZnVuY3Rpb25pbmcgbG9jYWwgQVBJQ3MKLSAqIGFyZSBuZWVkZWQgb24gZXZlcnkgQ1BVIHVwIHVudGlsIG1hY2hpbmVfaGFsdC9yZXN0YXJ0L3Bvd2Vyb2ZmLgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxhcGljX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLnJlc3VtZQkJPSBsYXBpY19yZXN1bWUsCi0JLnN1c3BlbmQJPSBsYXBpY19zdXNwZW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9sYXBpYyA9IHsKLQkuaWQJPSAwLAotCS5jbHMJPSAmbGFwaWNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKQotewotCWFwaWNfcG1fc3RhdGUuYWN0aXZlID0gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sYXBpY19zeXNmcyh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWlmICghY3B1X2hhc19hcGljKQotCQlyZXR1cm4gMDsKLQkvKiBYWFg6IHJlbW92ZSBzdXNwZW5kL3Jlc3VtZSBwcm9jcyBpZiAhYXBpY19wbV9zdGF0ZS5hY3RpdmU/ICovCi0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGFwaWNfc3lzY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfbGFwaWMpOwotCXJldHVybiBlcnJvcjsKLX0KLWRldmljZV9pbml0Y2FsbChpbml0X2xhcGljX3N5c2ZzKTsKLQotI2Vsc2UJLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCkgeyB9Ci0KLSNlbmRpZgkvKiBDT05GSUdfUE0gKi8KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLS8qCi0gKiBhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSAtLSBDaGVjayBpZiB3ZSBjYW4gZXhwZWN0IGdvb2QgVFNDCi0gKgotICogVGh1cyBmYXIsIHRoZSBtYWpvciB1c2VyIG9mIHRoaXMgaXMgSUJNJ3MgU3VtbWl0MiBzZXJpZXM6Ci0gKgotICogQ2x1c3RlcmVkIGJveGVzIG1heSBoYXZlIHVuc3luY2VkIFRTQyBwcm9ibGVtcyBpZiB0aGV5IGFyZQotICogbXVsdGktY2hhc3Npcy4gVXNlIGF2YWlsYWJsZSBkYXRhIHRvIHRha2UgYSBnb29kIGd1ZXNzLgotICogSWYgaW4gZG91YnQsIGdvIEhQRVQuCi0gKi8KLV9fY3B1aW5pdCBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpCi17Ci0JaW50IGksIGNsdXN0ZXJzLCB6ZXJvczsKLQl1bnNpZ25lZCBpZDsKLQl1MTYgKmJpb3NfY3B1X2FwaWNpZDsKLQlERUNMQVJFX0JJVE1BUChjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7Ci0KLQkvKgotCSAqIHRoZXJlIGlzIG5vdCB0aGlzIGtpbmQgb2YgYm94IHdpdGggQU1EIENQVSB5ZXQuCi0JICogU29tZSBBTUQgYm94IHdpdGggcXVhZGNvcmUgY3B1IGFuZCA4IHNvY2tldHMgYXBpY2lkCi0JICogd2lsbCBiZSBbNCwgMHgyM10gb3IgWzgsIDB4MjddIGNvdWxkIGJlIHRob3VnaHQgdG8KLQkgKiB2c21wIGJveCBzdGlsbCBuZWVkIGNoZWNraW5nLi4uCi0JICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmICFpc192c21wX2JveCgpKQotCQlyZXR1cm4gMDsKLQotCWJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCWJpdG1hcF96ZXJvKGNsdXN0ZXJtYXAsIE5VTV9BUElDX0NMVVNURVJTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspIHsKLQkJLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQkJaWYgKGJpb3NfY3B1X2FwaWNpZCkgewotCQkJaWQgPSBiaW9zX2NwdV9hcGljaWRbaV07Ci0JCX0gZWxzZSBpZiAoaSA8IG5yX2NwdV9pZHMpIHsKLQkJCWlmIChjcHVfcHJlc2VudChpKSkKLQkJCQlpZCA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgaSk7Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0KLQkJaWYgKGlkICE9IEJBRF9BUElDSUQpCi0JCQlfX3NldF9iaXQoQVBJQ19DTFVTVEVSSUQoaWQpLCBjbHVzdGVybWFwKTsKLQl9Ci0KLQkvKiBQcm9ibGVtOiAgUGFydGlhbGx5IHBvcHVsYXRlZCBjaGFzc2lzIG1heSBub3QgaGF2ZSBDUFVzIGluIHNvbWUgb2YKLQkgKiB0aGUgQVBJQyBjbHVzdGVycyB0aGV5IGhhdmUgYmVlbiBhbGxvY2F0ZWQuICBPbmx5IHByZXNlbnQgQ1BVcyBoYXZlCi0JICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBlbnRyaWVzLCB0aHVzIGNhdXNpbmcgemVyb2VzIGluIHRoZSBiaXRtYXAuCi0JICogU2luY2UgY2x1c3RlcnMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIGNvdW50IHplcm9zIG9ubHkgaWYKLQkgKiB0aGV5IGFyZSBib3VuZGVkIGJ5IG9uZXMuCi0JICovCi0JY2x1c3RlcnMgPSAwOwotCXplcm9zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0FQSUNfQ0xVU1RFUlM7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgY2x1c3Rlcm1hcCkpIHsKLQkJCWNsdXN0ZXJzICs9IDEgKyB6ZXJvczsKLQkJCXplcm9zID0gMDsKLQkJfSBlbHNlCi0JCQkrK3plcm9zOwotCX0KLQotCS8qIFNjYWxlTVAgdlNNUG93ZXJlZCBib3hlcyBoYXZlIG9uZSBjbHVzdGVyIHBlciBib2FyZCBhbmQgVFNDcyBhcmUKLQkgKiBub3QgZ3VhcmFudGVlZCB0byBiZSBzeW5jZWQgYmV0d2VlbiBib2FyZHMKLQkgKi8KLQlpZiAoaXNfdnNtcF9ib3goKSAmJiBjbHVzdGVycyA+IDEpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBJZiBjbHVzdGVycyA+IDIsIHRoZW4gc2hvdWxkIGJlIG11bHRpLWNoYXNzaXMuCi0JICogTWF5IGhhdmUgdG8gcmV2aXNpdCB0aGlzIHdoZW4gbXVsdGktY29yZSArIGh5cGVydGhyZWFkZWQgQ1BVcyBjb21lCi0JICogb3V0LCBidXQgQUZBSUsgdGhpcyB3aWxsIHdvcmsgZXZlbiBmb3IgdGhlbS4KLQkgKi8KLQlyZXR1cm4gKGNsdXN0ZXJzID4gMik7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKLSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZGlzYWJsZWFwaWMoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpYyA9IDE7Ci0Jc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9BUElDKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlYXBpYyIsIHNldHVwX2Rpc2FibGVhcGljKTsKLQotLyogc2FtZSBhcyBkaXNhYmxlYXBpYywgZm9yIGNvbXBhdGliaWxpdHkgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX25vbGFwaWMoY2hhciAqYXJnKQotewotCXJldHVybiBzZXR1cF9kaXNhYmxlYXBpYyhhcmcpOwotfQotZWFybHlfcGFyYW0oIm5vbGFwaWMiLCBzZXR1cF9ub2xhcGljKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2soY2hhciAqYXJnKQotewotCWxvY2FsX2FwaWNfdGltZXJfYzJfb2sgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImxhcGljX3RpbWVyX2MyX29rIiwgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2spOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9hcGljdGltZXIiLCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2xhcGljX3RpbWVyKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vbGFwaWNfdGltZXIiLCBwYXJzZV9ub2xhcGljX3RpbWVyKTsKLQotc3RhdGljIGludCBfX2luaXQgYXBpY19zZXRfdmVyYm9zaXR5KGNoYXIgKmFyZykKLXsKLQlpZiAoIWFyZykgIHsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCXNraXBfaW9hcGljX3NldHVwID0gMDsKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHN0cmNtcCgiZGVidWciLCBhcmcpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKLQllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBhcmcpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOwotCWVsc2UgewotCQlwcl93YXJuaW5nKCJBUElDIFZlcmJvc2l0eSBsZXZlbCAlcyBub3QgcmVjb2duaXNlZCIKLQkJCSIgdXNlIGFwaWM9dmVyYm9zZSBvciBhcGljPWRlYnVnXG4iLCBhcmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJhcGljIiwgYXBpY19zZXRfdmVyYm9zaXR5KTsKLQotc3RhdGljIGludCBfX2luaXQgbGFwaWNfaW5zZXJ0X3Jlc291cmNlKHZvaWQpCi17Ci0JaWYgKCFhcGljX3BoeXMpCi0JCXJldHVybiAtMTsKLQotCS8qIFB1dCBsb2NhbCBBUElDIGludG8gdGhlIHJlc291cmNlIG1hcC4gKi8KLQlsYXBpY19yZXNvdXJjZS5zdGFydCA9IGFwaWNfcGh5czsKLQlsYXBpY19yZXNvdXJjZS5lbmQgPSBsYXBpY19yZXNvdXJjZS5zdGFydCArIFBBR0VfU0laRSAtIDE7Ci0JaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmxhcGljX3Jlc291cmNlKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogbmVlZCBjYWxsIGluc2VydCBhZnRlciBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKCkKLSAqIHRoYXQgaXMgdXNpbmcgcmVxdWVzdF9yZXNvdXJjZQotICovCi1sYXRlX2luaXRjYWxsKGxhcGljX2luc2VydF9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9hcGljL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhN2I3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACisjCisjIE1ha2VmaWxlIGZvciBsb2NhbCBBUElDIGRyaXZlcnMgYW5kIGZvciB0aGUgSU8tQVBJQyBjb2RlCisjCisKK29iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIHByb2JlXyQoQklUUykubyBpcGkubyBubWkubworb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBpb19hcGljLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBpcGkubworCitpZmVxICgkKENPTkZJR19YODZfNjQpLHkpCitvYmoteQkJCQkrPSBhcGljX2ZsYXRfNjQubworb2JqLSQoQ09ORklHX1g4Nl9YMkFQSUMpCSs9IHgyYXBpY19jbHVzdGVyLm8KK29iai0kKENPTkZJR19YODZfWDJBUElDKQkrPSB4MmFwaWNfcGh5cy5vCitvYmotJChDT05GSUdfWDg2X1VWKQkJKz0geDJhcGljX3V2X3gubworZW5kaWYKKworb2JqLSQoQ09ORklHX1g4Nl9CSUdTTVApCSs9IGJpZ3NtcF8zMi5vCitvYmotJChDT05GSUdfWDg2X05VTUFRKQkJKz0gbnVtYXFfMzIubworb2JqLSQoQ09ORklHX1g4Nl9FUzcwMDApCSs9IGVzNzAwMF8zMi5vCitvYmotJChDT05GSUdfWDg2X1NVTU1JVCkJKz0gc3VtbWl0XzMyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNlY2RmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC0wLDAgKzEsMjIwNCBAQAorLyoKKyAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCisgKgorICoJKGMpIDE5OTksIDIwMDAsIDIwMDkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICoJRml4ZXMKKyAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOworICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKKyAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCisgKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkuCisgKglNYWNpZWogVy4gUm96eWNraQk6CVZhcmlvdXMgdXBkYXRlcyBhbmQgZml4ZXMuCisgKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBvd2VyIE1hbmFnZW1lbnQgZm9yIFVQLUFQSUMuCisgKglQYXZlbCBNYWNoZWsgYW5kCisgKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9pODI1My5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKK3Vuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKKwordW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOworCisvKiBQcm9jZXNzb3IgdGhhdCBpcyBkb2luZyB0aGUgYm9vdCB1cCAqLwordW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IC0xVTsKKworLyoKKyAqIFRoZSBoaWdoZXN0IEFQSUMgSUQgc2VlbiBkdXJpbmcgZW51bWVyYXRpb24uCisgKgorICogVGhpcyBkZXRlcm1pbmVzIHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgd2UgY2FuIHVzZTogaWYgYWxsIEFQSUMgSURzCisgKiBhcmUgaW4gdGhlIDAgLi4uIDcgcmFuZ2UsIHRoZW4gd2UgY2FuIHVzZSBsb2dpY2FsIGFkZHJlc3Npbmcgd2hpY2gKKyAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMgKGJldHRlciBicm9hZGNhc3RpbmcpLgorICoKKyAqIElmIHRoZXJlJ3MgYW4gQVBJQyBJRCBhYm92ZSA4LCB3ZSB1c2UgcGh5c2ljYWwgYWRkcmVzc2luZy4KKyAqLwordW5zaWduZWQgaW50IG1heF9waHlzaWNhbF9hcGljaWQ7CisKKy8qCisgKiBCaXRtYXNrIG9mIHBoeXNpY2FsbHkgZXhpc3RpbmcgQ1BVczoKKyAqLworcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKKworLyoKKyAqIE1hcCBjcHUgaW5kZXggdG8gcGh5c2ljYWwgQVBJQyBJRAorICovCitERUZJTkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9jcHVfdG9fYXBpY2lkLCBCQURfQVBJQ0lEKTsKK0RFRklORV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2Jpb3NfY3B1X2FwaWNpZCwgQkFEX0FQSUNJRCk7CitFWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOworRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIEtub2IgdG8gY29udHJvbCBvdXIgd2lsbGluZ25lc3MgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDLgorICoKKyAqICsxPWZvcmNlLWVuYWJsZQorICovCitzdGF0aWMgaW50IGZvcmNlX2VuYWJsZV9sb2NhbF9hcGljOworLyoKKyAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWMoY2hhciAqYXJnKQoreworCWZvcmNlX2VuYWJsZV9sb2NhbF9hcGljID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJsYXBpYyIsIHBhcnNlX2xhcGljKTsKKy8qIExvY2FsIEFQSUMgd2FzIGRpc2FibGVkIGJ5IHRoZSBCSU9TIGFuZCBlbmFibGVkIGJ5IHRoZSBrZXJuZWwgKi8KK3N0YXRpYyBpbnQgZW5hYmxlZF92aWFfYXBpY2Jhc2U7CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIGludCBhcGljX2NhbGlicmF0ZV9wbXRtciBfX2luaXRkYXRhOworc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfYXBpY3BtdGltZXIoY2hhciAqcykKK3sKKwlhcGljX2NhbGlicmF0ZV9wbXRtciA9IDE7CisJbm90c2Nfc2V0dXAoTlVMTCk7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJhcGljcG10aW1lciIsIHNldHVwX2FwaWNwbXRpbWVyKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKK2ludCB4MmFwaWM7CisvKiB4MmFwaWMgZW5hYmxlZCBiZWZvcmUgT1MgaGFuZG92ZXIgKi8KK3N0YXRpYyBpbnQgeDJhcGljX3ByZWVuYWJsZWQ7CitzdGF0aWMgaW50IGRpc2FibGVfeDJhcGljOworc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfbm94MmFwaWMoY2hhciAqc3RyKQoreworCWRpc2FibGVfeDJhcGljID0gMTsKKwlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1gyQVBJQyk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm94MmFwaWMiLCBzZXR1cF9ub3gyYXBpYyk7CisjZW5kaWYKKwordW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOworaW50IGRpc2FibGVfYXBpYzsKKy8qIERpc2FibGUgbG9jYWwgQVBJQyB0aW1lciBmcm9tIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUgb3IgdmlhIGRtaSBxdWlyayAqLworc3RhdGljIGludCBkaXNhYmxlX2FwaWNfdGltZXIgX19jcHVpbml0ZGF0YTsKKy8qIExvY2FsIEFQSUMgdGltZXIgd29ya3MgaW4gQzIgKi8KK2ludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOworRVhQT1JUX1NZTUJPTF9HUEwobG9jYWxfYXBpY190aW1lcl9jMl9vayk7CisKK2ludCBmaXJzdF9zeXN0ZW1fdmVjdG9yID0gMHhmZTsKKworLyoKKyAqIERlYnVnIGxldmVsLCBleHBvcnRlZCBmb3IgaW9fYXBpYy5jCisgKi8KK3Vuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKKworaW50IHBpY19tb2RlOworCisvKiBIYXZlIHdlIGZvdW5kIGFuIE1QIHRhYmxlICovCitpbnQgc21wX2ZvdW5kX2NvbmZpZzsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKKwkubmFtZSA9ICJMb2NhbCBBUElDIiwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsaWJyYXRpb25fcmVzdWx0OworCitzdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOworc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOworc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKK3N0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCk7CisKKy8qCisgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgdXNlZCBmb3IgYW55IGZ1bmN0aW9uIHdoaWNoIGlzIENQVSBsb2NhbC4KKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbGFwaWNfY2xvY2tldmVudCA9IHsKKwkubmFtZQkJPSAibGFwaWMiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVAorCQkJfCBDTE9DS19FVlRfRkVBVF9DM1NUT1AgfCBDTE9DS19FVlRfRkVBVF9EVU1NWSwKKwkuc2hpZnQJCT0gMzIsCisJLnNldF9tb2RlCT0gbGFwaWNfdGltZXJfc2V0dXAsCisJLnNldF9uZXh0X2V2ZW50CT0gbGFwaWNfbmV4dF9ldmVudCwKKwkuYnJvYWRjYXN0CT0gbGFwaWNfdGltZXJfYnJvYWRjYXN0LAorCS5yYXRpbmcJCT0gMTAwLAorCS5pcnEJCT0gLTEsCit9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxhcGljX2V2ZW50cyk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFwaWNfcGh5czsKKworLyoKKyAqIEdldCB0aGUgTEFQSUMgdmVyc2lvbgorICovCitzdGF0aWMgaW5saW5lIGludCBsYXBpY19nZXRfdmVyc2lvbih2b2lkKQoreworCXJldHVybiBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOworfQorCisvKgorICogQ2hlY2ssIGlmIHRoZSBBUElDIGlzIGludGVncmF0ZWQgb3IgYSBzZXBhcmF0ZSBjaGlwCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxhcGljX2lzX2ludGVncmF0ZWQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcmV0dXJuIDE7CisjZWxzZQorCXJldHVybiBBUElDX0lOVEVHUkFURUQobGFwaWNfZ2V0X3ZlcnNpb24oKSk7CisjZW5kaWYKK30KKworLyoKKyAqIENoZWNrLCB3aGV0aGVyIHRoaXMgaXMgYSBtb2Rlcm4gb3IgYSBmaXJzdCBnZW5lcmF0aW9uIEFQSUMKKyAqLworc3RhdGljIGludCBtb2Rlcm5fYXBpYyh2b2lkKQoreworCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbGFwaWNfZ2V0X3ZlcnNpb24oKSA+PSAweDE0OworfQorCit2b2lkIG5hdGl2ZV9hcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwl3aGlsZSAoYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1kpCisJCWNwdV9yZWxheCgpOworfQorCit1MzIgbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJdTMyIHNlbmRfc3RhdHVzOworCWludCB0aW1lb3V0OworCisJdGltZW91dCA9IDA7CisJZG8geworCQlzZW5kX3N0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZOworCQlpZiAoIXNlbmRfc3RhdHVzKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKHRpbWVvdXQrKyA8IDEwMDApOworCisJcmV0dXJuIHNlbmRfc3RhdHVzOworfQorCit2b2lkIG5hdGl2ZV9hcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCit7CisJYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQoaWQpKTsKKwlhcGljX3dyaXRlKEFQSUNfSUNSLCBsb3cpOworfQorCit1NjQgbmF0aXZlX2FwaWNfaWNyX3JlYWQodm9pZCkKK3sKKwl1MzIgaWNyMSwgaWNyMjsKKworCWljcjIgPSBhcGljX3JlYWQoQVBJQ19JQ1IyKTsKKwlpY3IxID0gYXBpY19yZWFkKEFQSUNfSUNSKTsKKworCXJldHVybiBpY3IxIHwgKCh1NjQpaWNyMiA8PCAzMik7Cit9CisKKy8qKgorICogZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgLSBlbmFibGUgTk1JIHRocm91Z2ggbG9jYWwgdmVjdG9yIHRhYmxlIDAKKyAqLwordm9pZCBfX2NwdWluaXQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCS8qIHVubWFzayBhbmQgc2V0IHRvIE5NSSAqLworCXYgPSBBUElDX0RNX05NSTsKKworCS8qIExldmVsIHRyaWdnZXJlZCBmb3IgODI0ODlEWCAoMzJiaXQgbW9kZSkgKi8KKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKKwkJdiB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOworCisJYXBpY193cml0ZShBUElDX0xWVDAsIHYpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoqCisgKiBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0IC0gR2V0IG51bWJlciBvZiBwaHlzaWNhbCBicm9hZGNhc3QgSURzCisgKi8KK2ludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpCit7CisJcmV0dXJuIG1vZGVybl9hcGljKCkgPyAweGZmIDogMHhmOworfQorI2VuZGlmCisKKy8qKgorICogbGFwaWNfZ2V0X21heGx2dCAtIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbG9jYWwgdmVjdG9yIHRhYmxlIGVudHJpZXMKKyAqLworaW50IGxhcGljX2dldF9tYXhsdnQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCS8qCisJICogLSB3ZSBhbHdheXMgaGF2ZSBBUElDIGludGVncmF0ZWQgb24gNjRiaXQgbW9kZQorCSAqIC0gODI0ODlEWHMgZG8gbm90IHJlcG9ydCAjIG9mIExWVCBlbnRyaWVzCisJICovCisJcmV0dXJuIEFQSUNfSU5URUdSQVRFRChHRVRfQVBJQ19WRVJTSU9OKHYpKSA/IEdFVF9BUElDX01BWExWVCh2KSA6IDI7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIHRpbWVyCisgKi8KKworLyogQ2xvY2sgZGl2aXNvciAqLworI2RlZmluZSBBUElDX0RJVklTT1IgMTYKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciwgd2l0aCBhIHRpbWVvdXQgb2YKKyAqICdjbG9ja3MnIEFQSUMgYnVzIGNsb2NrLiBEdXJpbmcgY2FsaWJyYXRpb24gd2UgYWN0dWFsbHkgY2FsbAorICogdGhpcyBmdW5jdGlvbiB0d2ljZSBvbiB0aGUgYm9vdCBDUFUsIG9uY2Ugd2l0aCBhIGJvZ3VzIHRpbWVvdXQKKyAqIHZhbHVlLCBzZWNvbmQgdGltZSBmb3IgcmVhbC4gVGhlIG90aGVyIChub25jYWxpYnJhdGluZykgQ1BVcworICogY2FsbCB0aGlzIGZ1bmN0aW9uIG9ubHkgb25jZSwgd2l0aCB0aGUgcmVhbCwgY2FsaWJyYXRlZCB2YWx1ZS4KKyAqCisgKiBXZSBkbyByZWFkcyBiZWZvcmUgd3JpdGVzIGV2ZW4gaWYgdW5uZWNlc3NhcnksIHRvIGdldCBhcm91bmQgdGhlCisgKiBQNSBBUElDIGRvdWJsZSB3cml0ZSBidWcuCisgKi8KK3N0YXRpYyB2b2lkIF9fc2V0dXBfQVBJQ19MVlRUKHVuc2lnbmVkIGludCBjbG9ja3MsIGludCBvbmVzaG90LCBpbnQgaXJxZW4pCit7CisJdW5zaWduZWQgaW50IGx2dHRfdmFsdWUsIHRtcF92YWx1ZTsKKworCWx2dHRfdmFsdWUgPSBMT0NBTF9USU1FUl9WRUNUT1I7CisJaWYgKCFvbmVzaG90KQorCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX1RJTUVSX1BFUklPRElDOworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQorCQlsdnR0X3ZhbHVlIHw9IFNFVF9BUElDX1RJTUVSX0JBU0UoQVBJQ19USU1FUl9CQVNFX0RJVik7CisKKwlpZiAoIWlycWVuKQorCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX01BU0tFRDsKKworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBsdnR0X3ZhbHVlKTsKKworCS8qCisJICogRGl2aWRlIFBJQ0xLIGJ5IDE2CisJICovCisJdG1wX3ZhbHVlID0gYXBpY19yZWFkKEFQSUNfVERDUik7CisJYXBpY193cml0ZShBUElDX1REQ1IsCisJCSh0bXBfdmFsdWUgJiB+KEFQSUNfVERSX0RJVl8xIHwgQVBJQ19URFJfRElWX1RNQkFTRSkpIHwKKwkJQVBJQ19URFJfRElWXzE2KTsKKworCWlmICghb25lc2hvdCkKKwkJYXBpY193cml0ZShBUElDX1RNSUNULCBjbG9ja3MgLyBBUElDX0RJVklTT1IpOworfQorCisvKgorICogU2V0dXAgZXh0ZW5kZWQgTFZULCBBTUQgc3BlY2lmaWMgKEs4LCBmYW1pbHkgMTBoKQorICoKKyAqIFZlY3RvciBtYXBwaW5ncyBhcmUgaGFyZCBjb2RlZC4gT24gSzggb25seSBvZmZzZXQgMCAoQVBJQzUwMCkgYW5kCisgKiBNQ0UgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkLiBUaHVzIE1DRSBvZmZzZXQgbXVzdCBiZSBzZXQgdG8gMC4KKyAqCisgKiBJZiBtYXNrPTEsIHRoZSBMVlQgZW50cnkgZG9lcyBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyB3aGlsZSBtYXNrPTAKKyAqIGVuYWJsZXMgdGhlIHZlY3Rvci4gU2VlIGFsc28gdGhlIEJLREdzLgorICovCisKKyNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfTUNFIDAKKyNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfSUJTIDEKKworc3RhdGljIHZvaWQgc2V0dXBfQVBJQ19laWx2dCh1OCBsdnRfb2ZmLCB1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gKGx2dF9vZmYgPDwgNCkgKyBBUElDX0VJTFZUMDsKKwl1bnNpZ25lZCBpbnQgIHYgICA9IChtYXNrIDw8IDE2KSB8IChtc2dfdHlwZSA8PCA4KSB8IHZlY3RvcjsKKworCWFwaWNfd3JpdGUocmVnLCB2KTsKK30KKwordTggc2V0dXBfQVBJQ19laWx2dF9tY2UodTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKK3sKKwlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX01DRSwgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7CisJcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX01DRTsKK30KKwordTggc2V0dXBfQVBJQ19laWx2dF9pYnModTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKK3sKKwlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX0lCUywgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7CisJcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNldHVwX0FQSUNfZWlsdnRfaWJzKTsKKworLyoKKyAqIFByb2dyYW0gdGhlIG5leHQgZXZlbnQsIHJlbGF0aXZlIHRvIG5vdworICovCitzdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJYXBpY193cml0ZShBUElDX1RNSUNULCBkZWx0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgbGFwaWMgdGltZXIgaW4gcGVyaW9kaWMgb3Igb25lc2hvdCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHY7CisKKwkvKiBMYXBpYyB1c2VkIGFzIGR1bW15IGZvciBicm9hZGNhc3QgPyAqLworCWlmIChldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlfX3NldHVwX0FQSUNfTFZUVChjYWxpYnJhdGlvbl9yZXN1bHQsCisJCQkJICBtb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCQl2IHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdik7CisJCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgMHhmZmZmZmZmZik7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogTG9jYWwgQVBJQyB0aW1lciBicm9hZGNhc3QgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlhcGljLT5zZW5kX0lQSV9tYXNrKG1hc2ssIExPQ0FMX1RJTUVSX1ZFQ1RPUik7CisjZW5kaWYKK30KKworLyoKKyAqIFNldHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyIGZvciB0aGlzIENQVS4gQ29weSB0aGUgaW5pdGlsaXplZCB2YWx1ZXMKKyAqIG9mIHRoZSBib290IENQVSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGluIHRoZSBmcmFtZXdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBzZXR1cF9BUElDX3RpbWVyKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CisKKwltZW1jcHkobGV2dCwgJmxhcGljX2Nsb2NrZXZlbnQsIHNpemVvZigqbGV2dCkpOworCWxldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UobGV2dCk7Cit9CisKKy8qCisgKiBJbiB0aGlzIGZ1bmN0aW9ucyB3ZSBjYWxpYnJhdGUgQVBJQyBidXMgY2xvY2tzIHRvIHRoZSBleHRlcm5hbCB0aW1lci4KKyAqCisgKiBXZSB3YW50IHRvIGRvIHRoZSBjYWxpYnJhdGlvbiBvbmx5IG9uY2Ugc2luY2Ugd2Ugd2FudCB0byBoYXZlIGxvY2FsIHRpbWVyCisgKiBpcnFzIHN5bmNyb24uIENQVXMgY29ubmVjdGVkIGJ5IHRoZSBzYW1lIEFQSUMgYnVzIGhhdmUgdGhlIHZlcnkgc2FtZSBidXMKKyAqIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgYnkgcmVhZGluZyB0aGUgUElUL0hQRVQgYW5kIHdhaXRpbmcgZm9yIGEgd3JhcAorICogYXJvdW5kIHRvIGZpbmQgb3V0LCB0aGF0IGEgdGljayBoYXMgZWxhcHNlZC4gSSBoYXZlIGEgYm94LCB3aGVyZSB0aGUgUElUCisgKiByZWFkb3V0IGlzIGJyb2tlbiwgc28gaXQgbmV2ZXIgZ2V0cyBvdXQgb2YgdGhlIHdhaXQgbG9vcCBhZ2Fpbi4gVGhpcyB3YXMKKyAqIGFsc28gcmVwb3J0ZWQgYnkgb3RoZXJzLgorICoKKyAqIE1vbml0b3JpbmcgdGhlIGppZmZpZXMgdmFsdWUgaXMgaW5hY2N1cmF0ZSBhbmQgdGhlIGNsb2NrZXZlbnRzCisgKiBpbmZyYXN0cnVjdHVyZSBhbGxvd3MgdXMgdG8gZG8gYSBzaW1wbGUgc3Vic3RpdHV0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuCisgKgorICogVGhlIGNhbGlicmF0aW9uIHJvdXRpbmUgYWxzbyB1c2VzIHRoZSBwbV90aW1lciB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgUElUCisgKiBoYXBwZW5zIHRvIHJ1biB3YXkgdG9vIHNsb3cgKGZhY3RvciAyLjMgb24gbXkgVkFJTyBDb3JlRHVvLCB3aGljaCBnb2VzCisgKiBiYWNrIHRvIG5vcm1hbCBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzKS4KKyAqLworCisjZGVmaW5lIExBUElDX0NBTF9MT09QUwkJKEhaLzEwKQorCitzdGF0aWMgX19pbml0ZGF0YSBpbnQgbGFwaWNfY2FsX2xvb3BzID0gLTE7CitzdGF0aWMgX19pbml0ZGF0YSBsb25nIGxhcGljX2NhbF90MSwgbGFwaWNfY2FsX3QyOworc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsb25nIGxhcGljX2NhbF90c2MxLCBsYXBpY19jYWxfdHNjMjsKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbGFwaWNfY2FsX3BtMSwgbGFwaWNfY2FsX3BtMjsKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbGFwaWNfY2FsX2oxLCBsYXBpY19jYWxfajI7CisKKy8qCisgKiBUZW1wb3JhcnkgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBsYXBpY19jYWxfaGFuZGxlcihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRzYyA9IDA7CisJbG9uZyB0YXBpYyA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKKwl1bnNpZ25lZCBsb25nIHBtID0gYWNwaV9wbV9yZWFkX2Vhcmx5KCk7CisKKwlpZiAoY3B1X2hhc190c2MpCisJCXJkdHNjbGwodHNjKTsKKworCXN3aXRjaCAobGFwaWNfY2FsX2xvb3BzKyspIHsKKwljYXNlIDA6CisJCWxhcGljX2NhbF90MSA9IHRhcGljOworCQlsYXBpY19jYWxfdHNjMSA9IHRzYzsKKwkJbGFwaWNfY2FsX3BtMSA9IHBtOworCQlsYXBpY19jYWxfajEgPSBqaWZmaWVzOworCQlicmVhazsKKworCWNhc2UgTEFQSUNfQ0FMX0xPT1BTOgorCQlsYXBpY19jYWxfdDIgPSB0YXBpYzsKKwkJbGFwaWNfY2FsX3RzYzIgPSB0c2M7CisJCWlmIChwbSA8IGxhcGljX2NhbF9wbTEpCisJCQlwbSArPSBBQ1BJX1BNX09WUlJVTjsKKwkJbGFwaWNfY2FsX3BtMiA9IHBtOworCQlsYXBpY19jYWxfajIgPSBqaWZmaWVzOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitjYWxpYnJhdGVfYnlfcG10aW1lcihsb25nIGRlbHRhcG0sIGxvbmcgKmRlbHRhLCBsb25nICpkZWx0YXRzYykKK3sKKwljb25zdCBsb25nIHBtXzEwMG1zID0gUE1UTVJfVElDS1NfUEVSX1NFQyAvIDEwOworCWNvbnN0IGxvbmcgcG1fdGhyZXNoID0gcG1fMTAwbXMgLyAxMDA7CisJdW5zaWduZWQgbG9uZyBtdWx0OworCXU2NCByZXM7CisKKyNpZm5kZWYgQ09ORklHX1g4Nl9QTV9USU1FUgorCXJldHVybiAtMTsKKyNlbmRpZgorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNLVRpbWVyIGRlbHRhID0gJWxkXG4iLCBkZWx0YXBtKTsKKworCS8qIENoZWNrLCBpZiB0aGUgUE0gdGltZXIgaXMgYXZhaWxhYmxlICovCisJaWYgKCFkZWx0YXBtKQorCQlyZXR1cm4gLTE7CisKKwltdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChQTVRNUl9USUNLU19QRVJfU0VDLCAyMik7CisKKwlpZiAoZGVsdGFwbSA+IChwbV8xMDBtcyAtIHBtX3RocmVzaCkgJiYKKwkgICAgZGVsdGFwbSA8IChwbV8xMDBtcyArIHBtX3RocmVzaCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNLVRpbWVyIHJlc3VsdCBva1xuIik7CisJCXJldHVybiAwOworCX0KKworCXJlcyA9ICgoKHU2NClkZWx0YXBtKSAqICBtdWx0KSA+PiAyMjsKKwlkb19kaXYocmVzLCAxMDAwMDAwKTsKKwlwcl93YXJuaW5nKCJBUElDIGNhbGlicmF0aW9uIG5vdCBjb25zaXN0ZW50ICIKKwkJICAgIndpdGggUE0tVGltZXI6ICVsZG1zIGluc3RlYWQgb2YgMTAwbXNcbiIsKGxvbmcpcmVzKTsKKworCS8qIENvcnJlY3QgdGhlIGxhcGljIGNvdW50ZXIgdmFsdWUgKi8KKwlyZXMgPSAoKCh1NjQpKCpkZWx0YSkpICogcG1fMTAwbXMpOworCWRvX2RpdihyZXMsIGRlbHRhcG0pOworCXByX2luZm8oIkFQSUMgZGVsdGEgYWRqdXN0ZWQgdG8gUE0tVGltZXI6ICIKKwkJIiVsdSAoJWxkKVxuIiwgKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGEpOworCSpkZWx0YSA9IChsb25nKXJlczsKKworCS8qIENvcnJlY3QgdGhlIHRzYyBjb3VudGVyIHZhbHVlICovCisJaWYgKGNwdV9oYXNfdHNjKSB7CisJCXJlcyA9ICgoKHU2NCkoKmRlbHRhdHNjKSkgKiBwbV8xMDBtcyk7CisJCWRvX2RpdihyZXMsIGRlbHRhcG0pOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJUU0MgZGVsdGEgYWRqdXN0ZWQgdG8gIgorCQkJCQkgICJQTS1UaW1lcjogJWx1ICglbGQpIFxuIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGF0c2MpOworCQkqZGVsdGF0c2MgPSAobG9uZylyZXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CisJdm9pZCAoKnJlYWxfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKKwl1bnNpZ25lZCBsb25nIGRlbHRhajsKKwlsb25nIGRlbHRhLCBkZWx0YXRzYzsKKwlpbnQgcG1fcmVmZXJlbmNlZCA9IDA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogUmVwbGFjZSB0aGUgZ2xvYmFsIGludGVycnVwdCBoYW5kbGVyICovCisJcmVhbF9oYW5kbGVyID0gZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyOworCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlciA9IGxhcGljX2NhbF9oYW5kbGVyOworCisJLyoKKwkgKiBTZXR1cCB0aGUgQVBJQyBjb3VudGVyIHRvIG1heGltdW0uIFRoZXJlIGlzIG5vIHdheSB0aGUgbGFwaWMKKwkgKiBjYW4gdW5kZXJmbG93IGluIHRoZSAxMDBtcyBkZXRlY3Rpb24gdGltZSBmcmFtZQorCSAqLworCV9fc2V0dXBfQVBJQ19MVlRUKDB4ZmZmZmZmZmYsIDAsIDApOworCisJLyogTGV0IHRoZSBpbnRlcnJ1cHRzIHJ1biAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXdoaWxlIChsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKQorCQljcHVfcmVsYXgoKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZXN0b3JlIHRoZSByZWFsIGV2ZW50IGhhbmRsZXIgKi8KKwlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIgPSByZWFsX2hhbmRsZXI7CisKKwkvKiBCdWlsZCBkZWx0YSB0MS10MiBhcyBhcGljIHRpbWVyIGNvdW50cyBkb3duICovCisJZGVsdGEgPSBsYXBpY19jYWxfdDEgLSBsYXBpY19jYWxfdDI7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGxhcGljIGRlbHRhID0gJWxkXG4iLCBkZWx0YSk7CisKKwlkZWx0YXRzYyA9IChsb25nKShsYXBpY19jYWxfdHNjMiAtIGxhcGljX2NhbF90c2MxKTsKKworCS8qIHdlIHRydXN0IHRoZSBQTSBiYXNlZCBjYWxpYnJhdGlvbiBpZiBwb3NzaWJsZSAqLworCXBtX3JlZmVyZW5jZWQgPSAhY2FsaWJyYXRlX2J5X3BtdGltZXIobGFwaWNfY2FsX3BtMiAtIGxhcGljX2NhbF9wbTEsCisJCQkJCSZkZWx0YSwgJmRlbHRhdHNjKTsKKworCS8qIENhbGN1bGF0ZSB0aGUgc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yICovCisJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGRlbHRhLCBUSUNLX05TRUMgKiBMQVBJQ19DQUxfTE9PUFMsCisJCQkJICAgICAgIGxhcGljX2Nsb2NrZXZlbnQuc2hpZnQpOworCWxhcGljX2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRiwgJmxhcGljX2Nsb2NrZXZlbnQpOworCWxhcGljX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZsYXBpY19jbG9ja2V2ZW50KTsKKworCWNhbGlicmF0aW9uX3Jlc3VsdCA9IChkZWx0YSAqIEFQSUNfRElWSVNPUikgLyBMQVBJQ19DQUxfTE9PUFM7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBkZWx0YSAlbGRcbiIsIGRlbHRhKTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBtdWx0OiAlbGRcbiIsIGxhcGljX2Nsb2NrZXZlbnQubXVsdCk7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gY2FsaWJyYXRpb24gcmVzdWx0OiAldVxuIiwKKwkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCk7CisKKwlpZiAoY3B1X2hhc190c2MpIHsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gQ1BVIGNsb2NrIHNwZWVkIGlzICIKKwkJCSAgICAiJWxkLiUwNGxkIE1Iei5cbiIsCisJCQkgICAgKGRlbHRhdHNjIC8gTEFQSUNfQ0FMX0xPT1BTKSAvICgxMDAwMDAwIC8gSFopLAorCQkJICAgIChkZWx0YXRzYyAvIExBUElDX0NBTF9MT09QUykgJSAoMTAwMDAwMCAvIEhaKSk7CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gaG9zdCBidXMgY2xvY2sgc3BlZWQgaXMgIgorCQkgICAgIiV1LiUwNHUgTUh6LlxuIiwKKwkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCAvICgxMDAwMDAwIC8gSFopLAorCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0ICUgKDEwMDAwMDAgLyBIWikpOworCisJLyoKKwkgKiBEbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgQVBJQyBjYWxpYnJhdGlvbiByZXN1bHQKKwkgKi8KKwlpZiAoY2FsaWJyYXRpb25fcmVzdWx0IDwgKDEwMDAwMDAgLyBIWikpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlwcl93YXJuaW5nKCJBUElDIGZyZXF1ZW5jeSB0b28gc2xvdywgZGlzYWJsaW5nIGFwaWMgdGltZXJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbGV2dC0+ZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOworCisJLyoKKwkgKiBQTSB0aW1lciBjYWxpYnJhdGlvbiBmYWlsZWQgb3Igbm90IHR1cm5lZCBvbgorCSAqIHNvIGxldHMgdHJ5IEFQSUMgdGltZXIgYmFzZWQgY2FsaWJyYXRpb24KKwkgKi8KKwlpZiAoIXBtX3JlZmVyZW5jZWQpIHsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIHZlcmlmeSBBUElDIHRpbWVyXG4iKTsKKworCQkvKgorCQkgKiBTZXR1cCB0aGUgYXBpYyB0aW1lciBtYW51YWxseQorCQkgKi8KKwkJbGV2dC0+ZXZlbnRfaGFuZGxlciA9IGxhcGljX2NhbF9oYW5kbGVyOworCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgbGV2dCk7CisJCWxhcGljX2NhbF9sb29wcyA9IC0xOworCisJCS8qIExldCB0aGUgaW50ZXJydXB0cyBydW4gKi8KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCXdoaWxlIChsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKQorCQkJY3B1X3JlbGF4KCk7CisKKwkJLyogU3RvcCB0aGUgbGFwaWMgdGltZXIgKi8KKwkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGxldnQpOworCisJCS8qIEppZmZpZXMgZGVsdGEgKi8KKwkJZGVsdGFqID0gbGFwaWNfY2FsX2oyIC0gbGFwaWNfY2FsX2oxOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyBkZWx0YSA9ICVsdVxuIiwgZGVsdGFqKTsKKworCQkvKiBDaGVjaywgaWYgdGhlIGppZmZpZXMgcmVzdWx0IGlzIGNvbnNpc3RlbnQgKi8KKwkJaWYgKGRlbHRhaiA+PSBMQVBJQ19DQUxfTE9PUFMtMiAmJiBkZWx0YWogPD0gTEFQSUNfQ0FMX0xPT1BTKzIpCisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyByZXN1bHQgb2tcbiIpOworCQllbHNlCisJCQlsZXZ0LT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKKwl9IGVsc2UKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJaWYgKGxldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpIHsKKwkJcHJfd2FybmluZygiQVBJQyB0aW1lciBkaXNhYmxlZCBkdWUgdG8gdmVyaWZpY2F0aW9uIGZhaWx1cmVcbiIpOworCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0dXAgdGhlIGJvb3QgQVBJQworICoKKyAqIENhbGlicmF0ZSBhbmQgdmVyaWZ5IHRoZSByZXN1bHQuCisgKi8KK3ZvaWQgX19pbml0IHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKQoreworCS8qCisJICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUga2VybmVsCisJICogY29tbWFuZGxpbmUgb3IgZnJvbSB0aGUgQ1BVIGRldGVjdGlvbiBjb2RlLiBSZWdpc3RlciB0aGUgbGFwaWMKKwkgKiB0aW1lciBhcyBhIGR1bW15IGNsb2NrIGV2ZW50IHNvdXJjZSBvbiBTTVAgc3lzdGVtcywgc28gdGhlCisJICogYnJvYWRjYXN0IG1lY2hhbmlzbSBpcyB1c2VkLiBPbiBVUCBzeXN0ZW1zIHNpbXBseSBpZ25vcmUgaXQuCisJICovCisJaWYgKGRpc2FibGVfYXBpY190aW1lcikgeworCQlwcl9pbmZvKCJEaXNhYmxpbmcgQVBJQyB0aW1lclxuIik7CisJCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCisJCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgeworCQkJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gMTsKKwkJCXNldHVwX0FQSUNfdGltZXIoKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIgorCQkgICAgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKKworCWlmIChjYWxpYnJhdGVfQVBJQ19jbG9jaygpKSB7CisJCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCisJCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkKKwkJCXNldHVwX0FQSUNfdGltZXIoKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgbm1pX3dhdGNoZG9nIGlzIHNldCB0byBJT19BUElDLCB3ZSBuZWVkIHRoZQorCSAqIFBJVC9IUEVUIGdvaW5nLiAgT3RoZXJ3aXNlIHJlZ2lzdGVyIGxhcGljIGFzIGEgZHVtbXkKKwkgKiBkZXZpY2UuCisJICovCisJaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfSU9fQVBJQykKKwkJbGFwaWNfY2xvY2tldmVudC5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CisJZWxzZQorCQlwcl93YXJuaW5nKCJBUElDIHRpbWVyIHJlZ2lzdGVyZWQgYXMgZHVtbXksIgorCQkJIiBkdWUgdG8gbm1pX3dhdGNoZG9nPSVkIVxuIiwgbm1pX3dhdGNoZG9nKTsKKworCS8qIFNldHVwIHRoZSBsYXBpYyBvciByZXF1ZXN0IHRoZSBicm9hZGNhc3QgKi8KKwlzZXR1cF9BUElDX3RpbWVyKCk7Cit9CisKK3ZvaWQgX19jcHVpbml0IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpCit7CisJc2V0dXBfQVBJQ190aW1lcigpOworfQorCisvKgorICogVGhlIGd1dHMgb2YgdGhlIGFwaWMgdGltZXIgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShsYXBpY19ldmVudHMsIGNwdSk7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIHNob3VsZCBub3QgYmUgaGVyZSB0aWxsIExBUElDIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dAorCSAqIGluIHNvbWUgY2FzZXMgbGlrZSBrZHVtcCwgaXRzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBwZW5kaW5nIExBUElDCisJICogdGltZXIgaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsJ3MgY29udGV4dCBhbmQgaXMgZGVsaXZlcmVkIGluCisJICogbmV3IGtlcm5lbCB0aGUgbW9tZW50IGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisJICoKKwkgKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGVhcmx5IGFuZCBMQVBJQyBpcyBzZXR1cCBtdWNoIGxhdGVyLCBoZW5jZQorCSAqIGl0cyBwb3NzaWJsZSB0aGF0IHdoZW4gd2UgZ2V0IGhlcmUgZXZ0LT5ldmVudF9oYW5kbGVyIGlzIE5VTEwuCisJICogQ2hlY2sgZm9yIGV2ZW50X2hhbmRsZXIgYmVpbmcgTlVMTCBhbmQgZGlzY2FyZCB0aGUgaW50ZXJydXB0IGFzCisJICogc3B1cmlvdXMuCisJICovCisJaWYgKCFldnQtPmV2ZW50X2hhbmRsZXIpIHsKKwkJcHJfd2FybmluZygiU3B1cmlvdXMgTEFQSUMgdGltZXIgaW50ZXJydXB0IG9uIGNwdSAlZFxuIiwgY3B1KTsKKwkJLyogU3dpdGNoIGl0IG9mZiAqLworCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgZXZ0KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogdGhlIE5NSSBkZWFkbG9jay1kZXRlY3RvciB1c2VzIHRoaXMuCisJICovCisJaW5jX2lycV9zdGF0KGFwaWNfdGltZXJfaXJxcyk7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKK30KKworLyoKKyAqIExvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0LiBUaGlzIGlzIHRoZSBtb3N0IG5hdHVyYWwgd2F5IGZvciBkb2luZworICogbG9jYWwgaW50ZXJydXB0cywgYnV0IGxvY2FsIHRpbWVyIGludGVycnVwdHMgY2FuIGJlIGVtdWxhdGVkIGJ5CisgKiBicm9hZGNhc3QgaW50ZXJydXB0cyB0b28uIFtpbiBjYXNlIHRoZSBodyBkb2Vzbid0IHN1cHBvcnQgQVBJQyB0aW1lcnNdCisgKgorICogWyBpZiBhIHNpbmdsZS1DUFUgc3lzdGVtIHJ1bnMgYW4gU01QIGtlcm5lbCB0aGVuIHdlIGNhbGwgdGhlIGxvY2FsCisgKiAgIGludGVycnVwdCBhcyB3ZWxsLiBUaHVzIHdlIGNhbm5vdCBpbmxpbmUgdGhlIGxvY2FsIGlycSAuLi4gXQorICovCit2b2lkIF9faXJxX2VudHJ5IHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CisKKwkvKgorCSAqIE5PVEUhIFdlJ2QgYmV0dGVyIEFDSyB0aGUgaXJxIGltbWVkaWF0ZWx5LAorCSAqIGJlY2F1c2UgdGltZXIgaGFuZGxpbmcgY2FuIGJlIHNsb3cuCisJICovCisJYWNrX0FQSUNfaXJxKCk7CisJLyoKKwkgKiB1cGRhdGVfcHJvY2Vzc190aW1lcygpIGV4cGVjdHMgdXMgdG8gaGF2ZSBkb25lIGlycV9lbnRlcigpLgorCSAqIEJlc2lkZXMsIGlmIHdlIGRvbid0IHRpbWVyIGludGVycnVwdHMgaWdub3JlIHRoZSBnbG9iYWwKKwkgKiBpbnRlcnJ1cHQgbG9jaywgd2hpY2ggaXMgdGhlIFdyb25nVGhpbmcgKHRtKSB0byBkby4KKwkgKi8KKwlleGl0X2lkbGUoKTsKKwlpcnFfZW50ZXIoKTsKKwlsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCgpOworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCitpbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogTG9jYWwgQVBJQyBzdGFydCBhbmQgc2h1dGRvd24KKyAqLworCisvKioKKyAqIGNsZWFyX2xvY2FsX0FQSUMgLSBzaHV0ZG93biB0aGUgbG9jYWwgQVBJQworICoKKyAqIFRoaXMgaXMgY2FsbGVkLCB3aGVuIGEgQ1BVIGlzIGRpc2FibGVkIGFuZCBiZWZvcmUgcmVib290aW5nLCBzbyB0aGUgc3RhdGUgb2YKKyAqIHRoZSBsb2NhbCBBUElDIGhhcyBubyBkYW5nbGluZyBsZWZ0b3ZlcnMuIEFsc28gdXNlZCB0byBjbGVhbm91dCBhbnkgQklPUworICogbGVmdG92ZXJzIGR1cmluZyBib290LgorICovCit2b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCkKK3sKKwlpbnQgbWF4bHZ0OworCXUzMiB2OworCisJLyogQVBJQyBoYXNuJ3QgYmVlbiBtYXBwZWQgeWV0ICovCisJaWYgKCFhcGljX3BoeXMpCisJCXJldHVybjsKKworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKwkvKgorCSAqIE1hc2tpbmcgYW4gTFZUIGVudHJ5IGNhbiB0cmlnZ2VyIGEgbG9jYWwgQVBJQyBlcnJvcgorCSAqIGlmIHRoZSB2ZWN0b3IgaXMgemVyby4gTWFzayBMVlRFUlIgZmlyc3QgdG8gcHJldmVudCB0aGlzLgorCSAqLworCWlmIChtYXhsdnQgPj0gMykgeworCQl2ID0gRVJST1JfQVBJQ19WRUNUT1I7IC8qIGFueSBub24temVybyB2ZWN0b3Igd2lsbCBkbyAqLworCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl9CisJLyoKKwkgKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIHNldCBtYXNrcyBvbmx5IGZpcnN0IHRvIGRlYXNzZXJ0CisJICogYW55IGxldmVsLXRyaWdnZXJlZCBzb3VyY2VzLgorCSAqLworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCWlmIChtYXhsdnQgPj0gNCkgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCX0KKworCS8qIGxldHMgbm90IHRvdWNoIHRoaXMgaWYgd2UgZGlkbid0IGZyb2IgaXQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKKwlpZiAobWF4bHZ0ID49IDUpIHsKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJfQorI2VuZGlmCisJLyoKKwkgKiBDbGVhbiBBUElDIHN0YXRlIGZvciBvdGhlciBPU3M6CisJICovCisJYXBpY193cml0ZShBUElDX0xWVFQsIEFQSUNfTFZUX01BU0tFRCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIEFQSUNfTFZUX01BU0tFRCk7CisJaWYgKG1heGx2dCA+PSAzKQorCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBBUElDX0xWVF9NQVNLRUQpOworCWlmIChtYXhsdnQgPj0gNCkKKwkJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0xWVF9NQVNLRUQpOworCisJLyogSW50ZWdyYXRlZCBBUElDICghODI0ODlEWCkgPyAqLworCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkpIHsKKwkJaWYgKG1heGx2dCA+IDMpCisJCQkvKiBDbGVhciBFU1IgZHVlIHRvIFBlbnRpdW0gZXJyYXRhIDNBUCBhbmQgMTFBUCAqLworCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFwaWNfcmVhZChBUElDX0VTUik7CisJfQorfQorCisvKioKKyAqIGRpc2FibGVfbG9jYWxfQVBJQyAtIGNsZWFyIGFuZCBkaXNhYmxlIHRoZSBsb2NhbCBBUElDCisgKi8KK3ZvaWQgZGlzYWJsZV9sb2NhbF9BUElDKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyogQVBJQyBoYXNuJ3QgYmVlbiBtYXBwZWQgeWV0ICovCisJaWYgKCFhcGljX3BoeXMpCisJCXJldHVybjsKKworCWNsZWFyX2xvY2FsX0FQSUMoKTsKKworCS8qCisJICogRGlzYWJsZSBBUElDIChpbXBsaWVzIGNsZWFyaW5nIG9mIHJlZ2lzdGVycworCSAqIGZvciA4MjQ4OURYISkuCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwl2YWx1ZSAmPSB+QVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogV2hlbiBMQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCwKKwkgKiByZXN0b3JlIHRoZSBkaXNhYmxlZCBzdGF0ZS4KKwkgKi8KKwlpZiAoZW5hYmxlZF92aWFfYXBpY2Jhc2UpIHsKKwkJdW5zaWduZWQgaW50IGwsIGg7CisKKwkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7CisJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIElmIExpbnV4IGVuYWJsZWQgdGhlIExBUElDIGFnYWluc3QgdGhlIEJJT1MgZGVmYXVsdCBkaXNhYmxlIGl0IGRvd24gYmVmb3JlCisgKiByZS1lbnRlcmluZyB0aGUgQklPUyBvbiBzaHV0ZG93bi4gIE90aGVyd2lzZSB0aGUgQklPUyBtYXkgZ2V0IGNvbmZ1c2VkIGFuZAorICogbm90IHBvd2VyLW9mZi4gIEFkZGl0aW9uYWxseSBjbGVhciBhbGwgTFZUIGVudHJpZXMgYmVmb3JlIGRpc2FibGVfbG9jYWxfQVBJQworICogZm9yIHRoZSBjYXNlIHdoZXJlIExpbnV4IGRpZG4ndCBlbmFibGUgdGhlIExBUElDLgorICovCit2b2lkIGxhcGljX3NodXRkb3duKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1X2hhc19hcGljKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCFlbmFibGVkX3ZpYV9hcGljYmFzZSkKKwkJY2xlYXJfbG9jYWxfQVBJQygpOworCWVsc2UKKyNlbmRpZgorCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKKworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcmVhbCBsb2NhbCBBUElDLgorICogQ2hlY2sgdGhlc2UgYWdhaW5zdCB5b3VyIGJvYXJkIGlmIHRoZSBDUFVzIGFyZW4ndCBnZXR0aW5nCisgKiBzdGFydGVkIGZvciBubyBhcHBhcmVudCByZWFzb24uCisgKi8KK2ludCBfX2luaXQgdmVyaWZ5X2xvY2FsX0FQSUModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnMCwgcmVnMTsKKworCS8qCisJICogVGhlIHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IGluIGEgcmVhbCBBUElDLgorCSAqLworCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZSLCByZWcwIF4gQVBJQ19MVlJfTUFTSyk7CisJcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzEpOworCisJLyoKKwkgKiBUaGUgdHdvIHZlcnNpb24gcmVhZHMgYWJvdmUgc2hvdWxkIHByaW50IHRoZSBzYW1lCisJICogbnVtYmVycy4gIElmIHRoZSBzZWNvbmQgb25lIGlzIGRpZmZlcmVudCwgdGhlbiB3ZQorCSAqIHBva2UgYXQgYSBub24tQVBJQy4KKwkgKi8KKwlpZiAocmVnMSAhPSByZWcwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHZlcnNpb24gbG9va3MgcmVhc29uYWJseS4KKwkgKi8KKwlyZWcxID0gR0VUX0FQSUNfVkVSU0lPTihyZWcwKTsKKwlpZiAocmVnMSA9PSAweDAwIHx8IHJlZzEgPT0gMHhmZikKKwkJcmV0dXJuIDA7CisJcmVnMSA9IGxhcGljX2dldF9tYXhsdnQoKTsKKwlpZiAocmVnMSA8IDB4MDIgfHwgcmVnMSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIElEIHJlZ2lzdGVyIGlzIHJlYWQvd3JpdGUgaW4gYSByZWFsIEFQSUMuCisJICovCisJcmVnMCA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOworCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIGFwaWMtPmFwaWNfaWRfbWFzayk7CisJcmVnMSA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzEpOworCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCk7CisJaWYgKHJlZzEgIT0gKHJlZzAgXiBhcGljLT5hcGljX2lkX21hc2spKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIG5leHQgdHdvIGFyZSBqdXN0IHRvIHNlZSBpZiB3ZSBoYXZlIHNhbmUgdmFsdWVzLgorCSAqIFRoZXkncmUgb25seSByZWFsbHkgcmVsZXZhbnQgaWYgd2UncmUgaW4gVmlydHVhbCBXaXJlCisJICogY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgbW9zdCBib3hlcyBhcmUgYW55bW9yZS4KKwkgKi8KKwlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMDogJXhcbiIsIHJlZzApOworCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQxOiAleFxuIiwgcmVnMSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBzeW5jX0FyYl9JRHMgLSBzeW5jaHJvbml6ZSBBUElDIGJ1cyBhcmJpdHJhdGlvbiBJRHMKKyAqLwordm9pZCBfX2luaXQgc3luY19BcmJfSURzKHZvaWQpCit7CisJLyoKKwkgKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMSBBbmQgbm90CisJICogbmVlZGVkIG9uIEFNRC4KKwkgKi8KKwlpZiAobW9kZXJuX2FwaWMoKSB8fCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCisJCXJldHVybjsKKworCS8qCisJICogV2FpdCBmb3IgaWRsZS4KKwkgKi8KKwlhcGljX3dhaXRfaWNyX2lkbGUoKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJTeW5jaHJvbml6aW5nIEFyYiBJRHMuXG4iKTsKKwlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0RFU1RfQUxMSU5DIHwKKwkJCUFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7Cit9CisKKy8qCisgKiBBbiBpbml0aWFsIHNldHVwIG9mIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KKyAqLwordm9pZCBfX2luaXQgaW5pdF9ic3BfQVBJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCS8qCisJICogRG9uJ3QgZG8gdGhlIHNldHVwIG5vdyBpZiB3ZSBoYXZlIGEgU01QIEJJT1MgYXMgdGhlCisJICogdGhyb3VnaC1JL08tQVBJQyB2aXJ0dWFsIHdpcmUgbW9kZSBtaWdodCBiZSBhY3RpdmUuCisJICovCisJaWYgKHNtcF9mb3VuZF9jb25maWcgfHwgIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgorCSAqLworCWNsZWFyX2xvY2FsX0FQSUMoKTsKKworCS8qCisJICogRW5hYmxlIEFQSUMuCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKKwl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIFRoaXMgYml0IGlzIHJlc2VydmVkIG9uIFA0L1hlb24gYW5kIHNob3VsZCBiZSBjbGVhcmVkICovCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKKwkJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKKwllbHNlCisjZW5kaWYKKwkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOworCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKKwl2YWx1ZSA9IEFQSUNfRE1fTk1JOworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLworCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgb2xkdmFsdWUsIHZhbHVlLCBtYXhsdnQ7CisKKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkgeworCQlwcl9pbmZvKCJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcGljLT5kaXNhYmxlX2VzcikgeworCQkvKgorCQkgKiBTb21ldGhpbmcgdW50cmFjZWFibGUgaXMgY3JlYXRpbmcgYmFkIGludGVycnVwdHMgb24KKwkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKKwkJICogRVNSIGRpc2FibGVkIC0gd2UgY2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlCisJCSAqIGVycm9ycyBhbnl3YXkgLSBtYmxpZ2gKKwkJICovCisJCXByX2luZm8oIkxlYXZpbmcgRVNSIGRpc2FibGVkLlxuIik7CisJCXJldHVybjsKKwl9CisKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCW9sZHZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKworCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KKwl2YWx1ZSA9IEVSUk9SX0FQSUNfVkVDVE9SOworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHZhbHVlKTsKKworCS8qCisJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCisJICovCisJaWYgKG1heGx2dCA+IDMpCisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKwlpZiAodmFsdWUgIT0gb2xkdmFsdWUpCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVTUiB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgIgorCQkJInZlY3RvcjogMHglMDh4ICBhZnRlcjogMHglMDh4XG4iLAorCQkJb2xkdmFsdWUsIHZhbHVlKTsKK30KKworCisvKioKKyAqIHNldHVwX2xvY2FsX0FQSUMgLSBzZXR1cCB0aGUgbG9jYWwgQVBJQworICovCit2b2lkIF9fY3B1aW5pdCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCBpLCBqOworCisJaWYgKGRpc2FibGVfYXBpYykgeworCQlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKiBQb3VuZCB0aGUgRVNSIHJlYWxseSBoYXJkIG92ZXIgdGhlIGhlYWQgd2l0aCBhIGJpZyBoYW1tZXIgLSBtYmxpZ2ggKi8KKwlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpICYmIGFwaWMtPmRpc2FibGVfZXNyKSB7CisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCX0KKyNlbmRpZgorCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwkvKgorCSAqIERvdWJsZS1jaGVjayB3aGV0aGVyIHRoaXMgQVBJQyBpcyByZWFsbHkgcmVnaXN0ZXJlZC4KKwkgKiBUaGlzIGlzIG1lYW5pbmdsZXNzIGluIGNsdXN0ZXJlZCBhcGljIG1vZGUsIHNvIHdlIHNraXAgaXQuCisJICovCisJaWYgKCFhcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQoKSkKKwkJQlVHKCk7CisKKwkvKgorCSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCisJICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKKwkgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorCSAqLworCWFwaWMtPmluaXRfYXBpY19sZHIoKTsKKworCS8qCisJICogU2V0IFRhc2sgUHJpb3JpdHkgdG8gJ2FjY2VwdCBhbGwnLiBXZSBuZXZlciBjaGFuZ2UgdGhpcworCSAqIGxhdGVyIG9uLgorCSAqLworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7CisJdmFsdWUgJj0gfkFQSUNfVFBSSV9NQVNLOworCWFwaWNfd3JpdGUoQVBJQ19UQVNLUFJJLCB2YWx1ZSk7CisKKwkvKgorCSAqIEFmdGVyIGEgY3Jhc2gsIHdlIG5vIGxvbmdlciBzZXJ2aWNlIHRoZSBpbnRlcnJ1cHRzIGFuZCBhIHBlbmRpbmcKKwkgKiBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwgbWlnaHQgc3RpbGwgaGF2ZSBJU1IgYml0IHNldC4KKwkgKgorCSAqIE1vc3QgcHJvYmFibHkgYnkgbm93IENQVSBoYXMgc2VydmljZWQgdGhhdCBwZW5kaW5nIGludGVycnVwdCBhbmQKKwkgKiBpdCBtaWdodCBub3QgaGF2ZSBkb25lIHRoZSBhY2tfQVBJQ19pcnEoKSBiZWNhdXNlIGl0IHRob3VnaHQsCisJICogaW50ZXJydXB0IGNhbWUgZnJvbSBpODI1OSBhcyBFeHRJbnQuIExBUElDIGRpZCBub3QgZ2V0IEVPSSBzbyBpdAorCSAqIGRvZXMgbm90IGNsZWFyIHRoZSBJU1IgYml0IGFuZCBjcHUgdGhpbmtzIGl0IGhhcyBhbHJlYWR5IHNlcml2Y2VkCisJICogdGhlIGludGVycnVwdC4gSGVuY2UgYSB2ZWN0b3IgbWlnaHQgZ2V0IGxvY2tlZC4gSXQgd2FzIG5vdGljZWQKKwkgKiBmb3IgdGltZXIgaXJxICh2ZWN0b3IgMHgzMSkuIElzc3VlIGFuIGV4dHJhIEVPSSB0byBjbGVhciBJU1IuCisJICovCisJZm9yIChpID0gQVBJQ19JU1JfTlIgLSAxOyBpID49IDA7IGktLSkgeworCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0lTUiArIGkqMHgxMCk7CisJCWZvciAoaiA9IDMxOyBqID49IDA7IGotLSkgeworCQkJaWYgKHZhbHVlICYgKDE8PGopKQorCQkJCWFja19BUElDX2lycSgpOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBhcmUgYWxsIHNldCB1cCwgZW5hYmxlIHRoZSBBUElDCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKKwkvKgorCSAqIEVuYWJsZSBBUElDCisJICovCisJdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIFNvbWUgdW5rbm93biBJbnRlbCBJTy9BUElDIChvciBBUElDKSBlcnJhdGEgaXMgYml0aW5nIHVzIHdpdGgKKwkgKiBjZXJ0YWluIG5ldHdvcmtpbmcgY2FyZHMuIElmIGhpZ2ggZnJlcXVlbmN5IGludGVycnVwdHMgYXJlCisJICogaGFwcGVuaW5nIG9uIGEgcGFydGljdWxhciBJT0FQSUMgcGluLCBwbHVzIHRoZSBJT0FQSUMgcm91dGluZworCSAqIGVudHJ5IGlzIG1hc2tlZC91bm1hc2tlZCBhdCBhIGhpZ2ggcmF0ZSBhcyB3ZWxsIHRoZW4gc29vbmVyIG9yCisJICogbGF0ZXIgSU9BUElDIGxpbmUgZ2V0cyAnc3R1Y2snLCBubyBtb3JlIGludGVycnVwdHMgYXJlIHJlY2VpdmVkCisJICogZnJvbSB0aGUgZGV2aWNlLiBJZiBmb2N1cyBDUFUgaXMgZGlzYWJsZWQgdGhlbiB0aGUgaGFuZyBnb2VzCisJICogYXdheSwgb2ggd2VsbCA6LSgKKwkgKgorCSAqIFsgVGhpcyBidWcgY2FuIGJlIHJlcHJvZHVjZWQgZWFzaWx5IHdpdGggYSBsZXZlbC10cmlnZ2VyZWQKKwkgKiAgIFBDSSBOZTIwMDAgbmV0d29ya2luZyBjYXJkcyBhbmQgUElJL1BJSUkgcHJvY2Vzc29ycywgZHVhbAorCSAqICAgQlggY2hpcHNldC4gXQorCSAqLworCS8qCisJICogQWN0dWFsbHkgZGlzYWJsaW5nIHRoZSBmb2N1cyBDUFUgY2hlY2sganVzdCBtYWtlcyB0aGUgaGFuZyBsZXNzCisJICogZnJlcXVlbnQgYXMgaXQgbWFrZXMgdGhlIGludGVycnVwdCBkaXN0cmlidXRvbiBtb2RlbCBiZSBtb3JlCisJICogbGlrZSBMUlUgdGhhbiBNUlUgKHRoZSBzaG9ydC10ZXJtIGxvYWQgaXMgbW9yZSBldmVuIGFjcm9zcyBDUFVzKS4KKwkgKiBTZWUgYWxzbyB0aGUgY29tbWVudCBpbiBlbmRfbGV2ZWxfaW9hcGljX2lycSgpLiAgLS1tYWNybworCSAqLworCisJLyoKKwkgKiAtIGVuYWJsZSBmb2N1cyBwcm9jZXNzb3IgKGJpdD09MCkKKwkgKiAtIDY0Yml0IG1vZGUgYWx3YXlzIHVzZSBwcm9jZXNzb3IgZm9jdXMKKwkgKiAgIHNvIG5vIG5lZWQgdG8gc2V0IGl0CisJICovCisJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKKyNlbmRpZgorCisJLyoKKwkgKiBTZXQgc3B1cmlvdXMgSVJRIHZlY3RvcgorCSAqLworCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7CisKKwkvKgorCSAqIFNldCB1cCBMVlQwLCBMVlQxOgorCSAqCisJICogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBvbiB0aGUgQlAncyBMSU5UMC4gVGhpcyBpcyBub3QKKwkgKiBzdHJpY3RseSBuZWNlc3NhcnkgaW4gcHVyZSBzeW1tZXRyaWMtSU8gbW9kZSwgYnV0IHNvbWV0aW1lcworCSAqIHdlIGRlbGVnYXRlIGludGVycnVwdHMgdG8gdGhlIDgyNTlBLgorCSAqLworCS8qCisJICogVE9ETzogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBmcm9tIHRocm91Z2gtSS9PLUFQSUM/IC0tbWFjcm8KKwkgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApICYgQVBJQ19MVlRfTUFTS0VEOworCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpICYmIChwaWNfbW9kZSB8fCAhdmFsdWUpKSB7CisJCXZhbHVlID0gQVBJQ19ETV9FWFRJTlQ7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImVuYWJsZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKKwkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0gZWxzZSB7CisJCXZhbHVlID0gQVBJQ19ETV9FWFRJTlQgfCBBUElDX0xWVF9NQVNLRUQ7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hc2tlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAorCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7CisKKwkvKgorCSAqIG9ubHkgdGhlIEJQIHNob3VsZCBzZWUgdGhlIExJTlQxIE5NSSBzaWduYWwsIG9idmlvdXNseS4KKwkgKi8KKwlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJdmFsdWUgPSBBUElDX0RNX05NSTsKKwllbHNlCisJCXZhbHVlID0gQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQ7CisJaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCQkvKiA4MjQ4OURYICovCisJCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3ZvaWQgX19jcHVpbml0IGVuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpCit7CisJbGFwaWNfc2V0dXBfZXNyKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJeworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisJCS8qIERpc2FibGUgdGhlIGxvY2FsIGFwaWMgdGltZXIgKi8KKwkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwkJdmFsdWUgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7CisJCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2YWx1ZSk7CisJfQorI2VuZGlmCisKKwlzZXR1cF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKKwlhcGljX3BtX2FjdGl2YXRlKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwordm9pZCBjaGVja194MmFwaWModm9pZCkKK3sKKwlpZiAoeDJhcGljX2VuYWJsZWQoKSkgeworCQlwcl9pbmZvKCJ4MmFwaWMgZW5hYmxlZCBieSBCSU9TLCBzd2l0Y2hpbmcgdG8geDJhcGljIG9wc1xuIik7CisJCXgyYXBpY19wcmVlbmFibGVkID0geDJhcGljID0gMTsKKwl9Cit9CisKK3ZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKQoreworCWludCBtc3IsIG1zcjI7CisKKwlpZiAoIXgyYXBpYykKKwkJcmV0dXJuOworCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7CisJaWYgKCEobXNyICYgWDJBUElDX0VOQUJMRSkpIHsKKwkJcHJfaW5mbygiRW5hYmxpbmcgeDJhcGljXG4iKTsKKwkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciB8IFgyQVBJQ19FTkFCTEUsIDApOworCX0KK30KKwordm9pZCBfX2luaXQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQoreworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjcHVfaGFzX3gyYXBpYykKKwkJcmV0dXJuOworCisJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykgeworCQlwcl9pbmZvKCJTa2lwcGVkIGVuYWJsaW5nIHgyYXBpYyBhbmQgSW50ZXJydXB0LXJlbWFwcGluZyAiCisJCQkiYmVjYXVzZSBvZiBub3gyYXBpY1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoeDJhcGljX3ByZWVuYWJsZWQgJiYgZGlzYWJsZV94MmFwaWMpCisJCXBhbmljKCJCaW9zIGFscmVhZHkgZW5hYmxlZCB4MmFwaWMsIGNhbid0IGVuZm9yY2Ugbm94MmFwaWMiKTsKKworCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgc2tpcF9pb2FwaWNfc2V0dXApIHsKKwkJcHJfaW5mbygiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgorCQkJImJlY2F1c2Ugb2Ygc2tpcHBpbmcgaW8tYXBpYyBzZXR1cFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBkbWFyX3RhYmxlX2luaXQoKTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKKworCQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCisJCQlwYW5pYygieDJhcGljIGVuYWJsZWQgYnkgYmlvcy4gQnV0IElSIGVuYWJsaW5nIGZhaWxlZCIpOworCQllbHNlCisJCQlwcl9pbmZvKCJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltYXNrXzgyNTlBKCk7CisKKwlyZXQgPSBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiU2F2aW5nIElPLUFQSUMgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlbmQ7CisJfQorCisJcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOworCisJaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7CisJfQorCisJaWYgKHJldCkKKwkJZ290byBlbmRfcmVzdG9yZTsKKworCWlmICgheDJhcGljKSB7CisJCXgyYXBpYyA9IDE7CisJCWVuYWJsZV94MmFwaWMoKTsKKwl9CisKK2VuZF9yZXN0b3JlOgorCWlmIChyZXQpCisJCS8qCisJCSAqIElSIGVuYWJsaW5nIGZhaWxlZAorCQkgKi8KKwkJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7CisJZWxzZQorCQlyZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKHgyYXBpY19wcmVlbmFibGVkKTsKKworZW5kOgorCXVubWFza184MjU5QSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlmICghcmV0KSB7CisJCWlmICgheDJhcGljX3ByZWVuYWJsZWQpCisJCQlwcl9pbmZvKCJFbmFibGVkIHgyYXBpYyBhbmQgaW50ZXJydXB0LXJlbWFwcGluZ1xuIik7CisJCWVsc2UKKwkJCXByX2luZm8oIkVuYWJsZWQgSW50ZXJydXB0LXJlbWFwcGluZ1xuIik7CisJfSBlbHNlCisJCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSBJbnRlcnJ1cHQtcmVtYXBwaW5nIGFuZCB4MmFwaWNcbiIpOworI2Vsc2UKKwlpZiAoIWNwdV9oYXNfeDJhcGljKQorCQlyZXR1cm47CisKKwlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCisJCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBwcmlvciBPUyBoYW5kb3ZlciwiCisJCSAgICAgICIgZW5hYmxlIENPTkZJR19JTlRSX1JFTUFQIik7CisKKwlwcl9pbmZvKCJFbmFibGUgQ09ORklHX0lOVFJfUkVNQVAgZm9yIGVuYWJsaW5nIGludHItcmVtYXBwaW5nICIKKwkJIiBhbmQgeDJhcGljXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19YODZfWDJBUElDICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogRGV0ZWN0IGFuZCBlbmFibGUgbG9jYWwgQVBJQ3Mgb24gbm9uLVNNUCBib2FyZHMuCisgKiBPcmlnaW5hbCBjb2RlIHdyaXR0ZW4gYnkgS2VpciBGcmFzZXIuCisgKiBPbiBBTUQ2NCB3ZSB0cnVzdCB0aGUgQklPUyAtIGlmIGl0IHNheXMgbm8gQVBJQyBpdCBpcyBsaWtlbHkKKyAqIG5vdCBjb3JyZWN0bHkgc2V0IHVwICh1c3VhbGx5IHRoZSBBUElDIHRpbWVyIHdvbid0IHdvcmsgZXRjLikKKyAqLworc3RhdGljIGludCBfX2luaXQgZGV0ZWN0X2luaXRfQVBJQyh2b2lkKQoreworCWlmICghY3B1X2hhc19hcGljKSB7CisJCXByX2luZm8oIk5vIGxvY2FsIEFQSUMgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwltcF9sYXBpY19hZGRyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSAwOworCXJldHVybiAwOworfQorI2Vsc2UKKy8qCisgKiBEZXRlY3QgYW5kIGluaXRpYWxpemUgQVBJQworICovCitzdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCit7CisJdTMyIGgsIGwsIGZlYXR1cmVzOworCisJLyogRGlzYWJsZWQgYnkga2VybmVsIG9wdGlvbj8gKi8KKwlpZiAoZGlzYWJsZV9hcGljKQorCQlyZXR1cm4gLTE7CisKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDEpIHx8CisJCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMTUpKQorCQkJYnJlYWs7CisJCWdvdG8gbm9fYXBpYzsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2IHx8IGJvb3RfY3B1X2RhdGEueDg2ID09IDE1IHx8CisJCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJiBjcHVfaGFzX2FwaWMpKQorCQkJYnJlYWs7CisJCWdvdG8gbm9fYXBpYzsKKwlkZWZhdWx0OgorCQlnb3RvIG5vX2FwaWM7CisJfQorCisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJLyoKKwkJICogT3Zlci1yaWRlIEJJT1MgYW5kIHRyeSB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMgb25seSBpZgorCQkgKiAibGFwaWMiIHNwZWNpZmllZC4KKwkJICovCisJCWlmICghZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWMpIHsKKwkJCXByX2luZm8oIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSAiCisJCQkJInlvdSBjYW4gZW5hYmxlIGl0IHdpdGggXCJsYXBpY1wiXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKgorCQkgKiBTb21lIEJJT1NlcyBkaXNhYmxlIHRoZSBsb2NhbCBBUElDIGluIHRoZSBBUElDX0JBU0UKKwkJICogTVNSLiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgaW4gc29mdHdhcmUgZm9yIEludGVsIFA2IG9yIGxhdGVyCisJCSAqIGFuZCBBTUQgSzcgKE1vZGVsID4gMSkgb3IgbGF0ZXIuCisJCSAqLworCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CisJCWlmICghKGwgJiBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpKSB7CisJCQlwcl9pbmZvKCJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gcmVlbmFibGluZy5cbiIpOworCQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKKwkJCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKKwkJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwkJCWVuYWJsZWRfdmlhX2FwaWNiYXNlID0gMTsKKwkJfQorCX0KKwkvKgorCSAqIFRoZSBBUElDIGZlYXR1cmUgYml0IHNob3VsZCBub3cgYmUgZW5hYmxlZAorCSAqIGluIGBjcHVpZCcKKwkgKi8KKwlmZWF0dXJlcyA9IGNwdWlkX2VkeCgxKTsKKwlpZiAoIShmZWF0dXJlcyAmICgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpKSkgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZXRfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7CisJbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisKKwkvKiBUaGUgQklPUyBtYXkgaGF2ZSBzZXQgdXAgdGhlIEFQSUMgYXQgc29tZSBvdGhlciBhZGRyZXNzICovCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCWlmIChsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKQorCQltcF9sYXBpY19hZGRyID0gbCAmIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CisKKwlwcl9pbmZvKCJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7CisKKwlhcGljX3BtX2FjdGl2YXRlKCk7CisKKwlyZXR1cm4gMDsKKworbm9fYXBpYzoKKwlwcl9pbmZvKCJObyBsb2NhbCBBUElDIHByZXNlbnQgb3IgaGFyZHdhcmUgZGlzYWJsZWRcbiIpOworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CisKKwkvKgorCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0CisJICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZykKKwkJcmV0dXJuOworCisJcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKKworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCisJCSAgICBBUElDX0JBU0UsIHBoeXNfYWRkcik7CisKKwkvKgorCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKKwkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgorCSAqLworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOworfQorI2VuZGlmCisKKy8qKgorICogaW5pdF9hcGljX21hcHBpbmdzIC0gaW5pdGlhbGl6ZSBBUElDIG1hcHBpbmdzCisgKi8KK3ZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfWDJBUElDCisJaWYgKHgyYXBpYykgeworCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCisJICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKKwkgKiBvbmUgZm9yIHRoZSBJTy1BUElDLgorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiBkZXRlY3RfaW5pdF9BUElDKCkpIHsKKwkJYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKKwkJYXBpY19waHlzID0gX19wYShhcGljX3BoeXMpOworCX0gZWxzZQorCQlhcGljX3BoeXMgPSBtcF9sYXBpY19hZGRyOworCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFwaWNfcGh5cyk7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIEFQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKKwkJCQlBUElDX0JBU0UsIGFwaWNfcGh5cyk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKKwkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgorCSAqLworCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQorCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKK30KKworLyoKKyAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcworICogYSBVUCBrZXJuZWwuCisgKi8KK2ludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKKworaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCit7CisJaWYgKGRpc2FibGVfYXBpYykgeworCQlwcl9pbmZvKCJBcGljIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJZGlzYWJsZV9hcGljID0gMTsKKwkJcHJfaW5mbygiQXBpYyBkaXNhYmxlZCBieSBCSU9TXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbHNlCisJaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtMTsKKworCS8qCisJICogQ29tcGxhaW4gaWYgdGhlIEJJT1MgcHJldGVuZHMgdGhlcmUgaXMgb25lLgorCSAqLworCWlmICghY3B1X2hhc19hcGljICYmCisJICAgIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKKwkJcHJfZXJyKCJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAweCV4IG5vdCBkZXRlY3RlZCEuLi5cbiIsCisJCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbmRpZgorCisJZW5hYmxlX0lSX3gyYXBpYygpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZygpOworI2VuZGlmCisKKwl2ZXJpZnlfbG9jYWxfQVBJQygpOworCWNvbm5lY3RfYnNwX0FQSUMoKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlhcGljX3dyaXRlKEFQSUNfSUQsIFNFVF9BUElDX0lEKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkpOworI2Vsc2UKKwkvKgorCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCisJICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCisJICovCisjIGlmZGVmIENPTkZJR19DUkFTSF9EVU1QCisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CisjIGVuZGlmCisjZW5kaWYKKwlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwlzZXR1cF9sb2NhbF9BUElDKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwkvKgorCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQworCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgZXJyb3IgdmVjdG9yCisJICovCisJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQorCQllbmFibGVfSU9fQVBJQygpOworI2VuZGlmCisKKwllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCisJCXNldHVwX0lPX0FQSUMoKTsKKwllbHNlIHsKKwkJbnJfaW9hcGljcyA9IDA7CisJCWxvY2FsaXNlX25taV93YXRjaGRvZygpOworCX0KKyNlbHNlCisJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7CisjZW5kaWYKKworCXNldHVwX2Jvb3RfY2xvY2soKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorICogTG9jYWwgQVBJQyBpbnRlcnJ1cHRzCisgKi8KKworLyoKKyAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKKyAqLwordm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiB2OworCisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIHNwdXJpb3VzIGludGVycnVwdCBhbmQgQUNLIGl0CisJICogaWYgaXQgaXMgYSB2ZWN0b3JlZCBvbmUuICBKdXN0IGluIGNhc2UuLi4KKwkgKiBTcHVyaW91cyBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgQUNLZWQuCisJICovCisJdiA9IGFwaWNfcmVhZChBUElDX0lTUiArICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiB+MHgxZikgPj4gMSkpOworCWlmICh2ICYgKDEgPDwgKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgxZikpKQorCQlhY2tfQVBJQ19pcnEoKTsKKworCWluY19pcnFfc3RhdChpcnFfc3B1cmlvdXNfY291bnQpOworCisJLyogc2VlIHN3LWRldi1tYW4gdm9sIDMsIGNoYXB0ZXIgNy40LjEzLjUgKi8KKwlwcl9pbmZvKCJzcHVyaW91cyBBUElDIGludGVycnVwdCBvbiBDUFUjJWQsICIKKwkJInNob3VsZCBuZXZlciBoYXBwZW4uXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlycV9leGl0KCk7Cit9CisKKy8qCisgKiBUaGlzIGludGVycnVwdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQorICovCit2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIHYsIHYxOworCisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisJLyogRmlyc3QgdGlja2xlIHRoZSBoYXJkd2FyZSwgb25seSB0aGVuIHJlcG9ydCB3aGF0IHdlbnQgb24uIC0tIFJFVyAqLworCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCXYxID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKwlhY2tfQVBJQ19pcnEoKTsKKwlhdG9taWNfaW5jKCZpcnFfZXJyX2NvdW50KTsKKworCS8qCisJICogSGVyZSBpcyB3aGF0IHRoZSBBUElDIGVycm9yIGJpdHMgbWVhbjoKKwkgKiAwOiBTZW5kIENTIGVycm9yCisJICogMTogUmVjZWl2ZSBDUyBlcnJvcgorCSAqIDI6IFNlbmQgYWNjZXB0IGVycm9yCisJICogMzogUmVjZWl2ZSBhY2NlcHQgZXJyb3IKKwkgKiA0OiBSZXNlcnZlZAorCSAqIDU6IFNlbmQgaWxsZWdhbCB2ZWN0b3IKKwkgKiA2OiBSZWNlaXZlZCBpbGxlZ2FsIHZlY3RvcgorCSAqIDc6IElsbGVnYWwgcmVnaXN0ZXIgYWRkcmVzcworCSAqLworCXByX2RlYnVnKCJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJ4KCUwMngpXG4iLAorCQlzbXBfcHJvY2Vzc29yX2lkKCksIHYgLCB2MSk7CisJaXJxX2V4aXQoKTsKK30KKworLyoqCisgKiBjb25uZWN0X2JzcF9BUElDIC0gYXR0YWNoIHRoZSBBUElDIHRvIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCisgKi8KK3ZvaWQgX19pbml0IGNvbm5lY3RfYnNwX0FQSUModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKHBpY19tb2RlKSB7CisJCS8qCisJCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCisJCSAqLworCQljbGVhcl9sb2NhbF9BUElDKCk7CisJCS8qCisJCSAqIFBJQyBtb2RlLCBlbmFibGUgQVBJQyBtb2RlIGluIHRoZSBJTUNSLCBpLmUuICBjb25uZWN0IEJTUCdzCisJCSAqIGxvY2FsIEFQSUMgdG8gSU5UIGFuZCBOTUkgbGluZXMuCisJCSAqLworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJsZWF2aW5nIFBJQyBtb2RlLCAiCisJCQkJImVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOworCQlvdXRiKDB4NzAsIDB4MjIpOworCQlvdXRiKDB4MDEsIDB4MjMpOworCX0KKyNlbmRpZgorCWlmIChhcGljLT5lbmFibGVfYXBpY19tb2RlKQorCQlhcGljLT5lbmFibGVfYXBpY19tb2RlKCk7Cit9CisKKy8qKgorICogZGlzY29ubmVjdF9ic3BfQVBJQyAtIGRldGFjaCB0aGUgQVBJQyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCisgKiBAdmlydF93aXJlX3NldHVwOglpbmRpY2F0ZXMsIHdoZXRoZXIgdmlydHVhbCB3aXJlIG1vZGUgaXMgc2VsZWN0ZWQKKyAqCisgKiBWaXJ0dWFsIHdpcmUgbW9kZSBpcyBuZWNlc3NhcnkgdG8gZGVsaXZlciBsZWdhY3kgaW50ZXJydXB0cyBldmVuIHdoZW4gdGhlCisgKiBBUElDIGlzIGRpc2FibGVkLgorICovCit2b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMoaW50IHZpcnRfd2lyZV9zZXR1cCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKHBpY19tb2RlKSB7CisJCS8qCisJCSAqIFB1dCB0aGUgYm9hcmQgYmFjayBpbnRvIFBJQyBtb2RlIChoYXMgYW4gZWZmZWN0IG9ubHkgb24KKwkJICogY2VydGFpbiBvbGRlciBib2FyZHMpLiAgTm90ZSB0aGF0IEFQSUMgaW50ZXJydXB0cywgaW5jbHVkaW5nCisJCSAqIElQSXMsIHdvbid0IHdvcmsgYmV5b25kIHRoaXMgcG9pbnQhICBUaGUgb25seSBleGNlcHRpb24gYXJlCisJCSAqIElOSVQgSVBJcy4KKwkJICovCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImRpc2FibGluZyBBUElDIG1vZGUsICIKKwkJCQkiZW50ZXJpbmcgUElDIG1vZGUuXG4iKTsKKwkJb3V0YigweDcwLCAweDIyKTsKKwkJb3V0YigweDAwLCAweDIzKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJLyogR28gYmFjayB0byBWaXJ0dWFsIFdpcmUgY29tcGF0aWJpbGl0eSBtb2RlICovCisKKwkvKiBGb3IgdGhlIHNwdXJpb3VzIGludGVycnVwdCB1c2UgdmVjdG9yIEYsIGFuZCBlbmFibGUgaXQgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOworCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CisJdmFsdWUgfD0gMHhmOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7CisKKwlpZiAoIXZpcnRfd2lyZV9zZXR1cCkgeworCQkvKgorCQkgKiBGb3IgTFZUMCBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKKwkJICogZXh0ZXJuYWwgYW5kIGVuYWJsZWQKKwkJICovCisJCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8CisJCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8CisJCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKKwkJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOworCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9FWFRJTlQpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOworCX0gZWxzZSB7CisJCS8qIERpc2FibGUgTFZUMCAqLworCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKKwl9CisKKwkvKgorCSAqIEZvciBMVlQxIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAorCSAqIG5taSBhbmQgZW5hYmxlZAorCSAqLworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7CisJdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKKwkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKKwkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOworCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKKwl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9OTUkpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Cit9CisKK3ZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCit7CisJaW50IGNwdTsKKworCS8qCisJICogVmFsaWRhdGUgdmVyc2lvbgorCSAqLworCWlmICh2ZXJzaW9uID09IDB4MCkgeworCQlwcl93YXJuaW5nKCJCSU9TIGJ1ZywgQVBJQyB2ZXJzaW9uIGlzIDAgZm9yIENQVSMlZCEgIgorCQkJICAgImZpeGluZyB1cCB0byAweDEwLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCisJCQkJdmVyc2lvbik7CisJCXZlcnNpb24gPSAweDEwOworCX0KKwlhcGljX3ZlcnNpb25bYXBpY2lkXSA9IHZlcnNpb247CisKKwlpZiAobnVtX3Byb2Nlc3NvcnMgPj0gbnJfY3B1X2lkcykgeworCQlpbnQgbWF4ID0gbnJfY3B1X2lkczsKKwkJaW50IHRoaXNjcHUgPSBtYXggKyBkaXNhYmxlZF9jcHVzOworCisJCXByX3dhcm5pbmcoCisJCQkiQUNQSTogTlJfQ1BVUy9wb3NzaWJsZV9jcHVzIGxpbWl0IG9mICVpIHJlYWNoZWQuIgorCQkJIiAgUHJvY2Vzc29yICVkLzB4JXggaWdub3JlZC5cbiIsIG1heCwgdGhpc2NwdSwgYXBpY2lkKTsKKworCQlkaXNhYmxlZF9jcHVzKys7CisJCXJldHVybjsKKwl9CisKKwludW1fcHJvY2Vzc29ycysrOworCWNwdSA9IGNwdW1hc2tfbmV4dF96ZXJvKC0xLCBjcHVfcHJlc2VudF9tYXNrKTsKKworCWlmICh2ZXJzaW9uICE9IGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKQorCQlXQVJOX09OQ0UoMSwKKwkJCSJBQ1BJOiBhcGljIHZlcnNpb24gbWlzbWF0Y2gsIGJvb3RjcHU6ICV4IGNwdSAlZDogJXhcbiIsCisJCQlhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSwgY3B1LCB2ZXJzaW9uKTsKKworCXBoeXNpZF9zZXQoYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJaWYgKGFwaWNpZCA9PSBib290X2NwdV9waHlzaWNhbF9hcGljaWQpIHsKKwkJLyoKKwkJICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBpcyByZXF1aXJlZCB0byBoYXZlIHByb2Nlc3NvcnMgbGlzdGVkCisJCSAqIGluIHNhbWUgb3JkZXIgYXMgbG9naWNhbCBjcHUgbnVtYmVycy4gSGVuY2UgdGhlIGZpcnN0CisJCSAqIGVudHJ5IGlzIEJTUCwgYW5kIHNvIG9uLgorCQkgKi8KKwkJY3B1ID0gMDsKKwl9CisJaWYgKGFwaWNpZCA+IG1heF9waHlzaWNhbF9hcGljaWQpCisJCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQorCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCisJICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KKwkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCisJICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+CisJICovCisJaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkgeworCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKKwkJCQlkZWZfdG9fYmlnc21wID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJCWRlZl90b19iaWdzbXAgPSAxOworCQl9CisJfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwllYXJseV9wZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOworCWVhcmx5X3Blcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKKyNlbmRpZgorCisJc2V0X2NwdV9wb3NzaWJsZShjcHUsIHRydWUpOworCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOworfQorCitpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfYXBpY19pZCgpOworfQorCit2b2lkIGRlZmF1bHRfaW5pdF9hcGljX2xkcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOworCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKKwl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRCgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgoraW50IGRlZmF1bHRfYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQKKyAqLworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgc3RydWN0IHsKKwkvKgorCSAqICdhY3RpdmUnIGlzIHRydWUgaWYgdGhlIGxvY2FsIEFQSUMgd2FzIGVuYWJsZWQgYnkgdXMgYW5kCisJICogbm90IHRoZSBCSU9TOyB0aGlzIHNpZ25pZmllcyB0aGF0IHdlIGFyZSBhbHNvIHJlc3BvbnNpYmxlCisJICogZm9yIGRpc2FibGluZyBpdCBiZWZvcmUgZW50ZXJpbmcgYXBtL2FjcGkgc3VzcGVuZAorCSAqLworCWludCBhY3RpdmU7CisJLyogci93IGFwaWMgZmllbGRzICovCisJdW5zaWduZWQgaW50IGFwaWNfaWQ7CisJdW5zaWduZWQgaW50IGFwaWNfdGFza3ByaTsKKwl1bnNpZ25lZCBpbnQgYXBpY19sZHI7CisJdW5zaWduZWQgaW50IGFwaWNfZGZyOworCXVuc2lnbmVkIGludCBhcGljX3NwaXY7CisJdW5zaWduZWQgaW50IGFwaWNfbHZ0dDsKKwl1bnNpZ25lZCBpbnQgYXBpY19sdnRwYzsKKwl1bnNpZ25lZCBpbnQgYXBpY19sdnQwOworCXVuc2lnbmVkIGludCBhcGljX2x2dDE7CisJdW5zaWduZWQgaW50IGFwaWNfbHZ0ZXJyOworCXVuc2lnbmVkIGludCBhcGljX3RtaWN0OworCXVuc2lnbmVkIGludCBhcGljX3RkY3I7CisJdW5zaWduZWQgaW50IGFwaWNfdGhtcjsKK30gYXBpY19wbV9zdGF0ZTsKKworc3RhdGljIGludCBsYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtYXhsdnQ7CisKKwlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKworCWFwaWNfcG1fc3RhdGUuYXBpY19pZCA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOworCWFwaWNfcG1fc3RhdGUuYXBpY19sZHIgPSBhcGljX3JlYWQoQVBJQ19MRFIpOworCWFwaWNfcG1fc3RhdGUuYXBpY19kZnIgPSBhcGljX3JlYWQoQVBJQ19ERlIpOworCWFwaWNfcG1fc3RhdGUuYXBpY19zcGl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7CisJYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwlpZiAobWF4bHZ0ID49IDQpCisJCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCA9IGFwaWNfcmVhZChBUElDX0xWVDApOworCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQxID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7CisJYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVyciA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7CisJYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOworCWFwaWNfcG1fc3RhdGUuYXBpY190ZGNyID0gYXBpY19yZWFkKEFQSUNfVERDUik7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCisJaWYgKG1heGx2dCA+PSA1KQorCQlhcGljX3BtX3N0YXRlLmFwaWNfdGhtciA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOworI2VuZGlmCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZGlzYWJsZV9sb2NhbF9BUElDKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGludCBsLCBoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG1heGx2dDsKKworCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCisJCXJldHVybiAwOworCisJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKKwlpZiAoeDJhcGljKQorCQllbmFibGVfeDJhcGljKCk7CisJZWxzZQorI2VuZGlmCisJeworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIEFQSUNCQVNFIHBvaW50cyB0byB0aGUgcmlnaHQgYWRkcmVzcworCQkgKgorCQkgKiBGSVhNRSEgVGhpcyB3aWxsIGJlIHdyb25nIGlmIHdlIGV2ZXIgc3VwcG9ydCBzdXNwZW5kIG9uCisJCSAqIFNNUCEgV2UnbGwgbmVlZCB0byBkbyB0aGlzIGFzIHBhcnQgb2YgdGhlIENQVSByZXN0b3JlIQorCQkgKi8KKwkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOworCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IG1wX2xhcGljX2FkZHI7CisJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwl9CisKKwlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBFUlJPUl9BUElDX1ZFQ1RPUiB8IEFQSUNfTFZUX01BU0tFRCk7CisJYXBpY193cml0ZShBUElDX0lELCBhcGljX3BtX3N0YXRlLmFwaWNfaWQpOworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIGFwaWNfcG1fc3RhdGUuYXBpY19kZnIpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIGFwaWNfcG1fc3RhdGUuYXBpY19sZHIpOworCWFwaWNfd3JpdGUoQVBJQ19UQVNLUFJJLCBhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSk7CisJYXBpY193cml0ZShBUElDX1NQSVYsIGFwaWNfcG1fc3RhdGUuYXBpY19zcGl2KTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSk7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCisJaWYgKG1heGx2dCA+PSA1KQorCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgYXBpY19wbV9zdGF0ZS5hcGljX3RobXIpOworI2VuZGlmCisJaWYgKG1heGx2dCA+PSA0KQorCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyk7CisJYXBpY193cml0ZShBUElDX0xWVFQsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnR0KTsKKwlhcGljX3dyaXRlKEFQSUNfVERDUiwgYXBpY19wbV9zdGF0ZS5hcGljX3RkY3IpOworCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0KTsKKwlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwlhcGljX3JlYWQoQVBJQ19FU1IpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIpOworCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCWFwaWNfcmVhZChBUElDX0VTUik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZGV2aWNlIGhhcyBubyBzaHV0ZG93biBtZXRob2QgLSBmdWxseSBmdW5jdGlvbmluZyBsb2NhbCBBUElDcworICogYXJlIG5lZWRlZCBvbiBldmVyeSBDUFUgdXAgdW50aWwgbWFjaGluZV9oYWx0L3Jlc3RhcnQvcG93ZXJvZmYuCisgKi8KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGFwaWNfc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gImxhcGljIiwKKwkucmVzdW1lCQk9IGxhcGljX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IGxhcGljX3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX2xhcGljID0geworCS5pZAk9IDAsCisJLmNscwk9ICZsYXBpY19zeXNjbGFzcywKK307CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpCit7CisJYXBpY19wbV9zdGF0ZS5hY3RpdmUgPSAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2xhcGljX3N5c2ZzKHZvaWQpCit7CisJaW50IGVycm9yOworCisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAwOworCS8qIFhYWDogcmVtb3ZlIHN1c3BlbmQvcmVzdW1lIHByb2NzIGlmICFhcGljX3BtX3N0YXRlLmFjdGl2ZT8gKi8KKworCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZsYXBpY19zeXNjbGFzcyk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9sYXBpYyk7CisJcmV0dXJuIGVycm9yOworfQorZGV2aWNlX2luaXRjYWxsKGluaXRfbGFwaWNfc3lzZnMpOworCisjZWxzZQkvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKSB7IH0KKworI2VuZGlmCS8qIENPTkZJR19QTSAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorLyoKKyAqIGFwaWNfaXNfY2x1c3RlcmVkX2JveCgpIC0tIENoZWNrIGlmIHdlIGNhbiBleHBlY3QgZ29vZCBUU0MKKyAqCisgKiBUaHVzIGZhciwgdGhlIG1ham9yIHVzZXIgb2YgdGhpcyBpcyBJQk0ncyBTdW1taXQyIHNlcmllczoKKyAqCisgKiBDbHVzdGVyZWQgYm94ZXMgbWF5IGhhdmUgdW5zeW5jZWQgVFNDIHByb2JsZW1zIGlmIHRoZXkgYXJlCisgKiBtdWx0aS1jaGFzc2lzLiBVc2UgYXZhaWxhYmxlIGRhdGEgdG8gdGFrZSBhIGdvb2QgZ3Vlc3MuCisgKiBJZiBpbiBkb3VidCwgZ28gSFBFVC4KKyAqLworX19jcHVpbml0IGludCBhcGljX2lzX2NsdXN0ZXJlZF9ib3godm9pZCkKK3sKKwlpbnQgaSwgY2x1c3RlcnMsIHplcm9zOworCXVuc2lnbmVkIGlkOworCXUxNiAqYmlvc19jcHVfYXBpY2lkOworCURFQ0xBUkVfQklUTUFQKGNsdXN0ZXJtYXAsIE5VTV9BUElDX0NMVVNURVJTKTsKKworCS8qCisJICogdGhlcmUgaXMgbm90IHRoaXMga2luZCBvZiBib3ggd2l0aCBBTUQgQ1BVIHlldC4KKwkgKiBTb21lIEFNRCBib3ggd2l0aCBxdWFkY29yZSBjcHUgYW5kIDggc29ja2V0cyBhcGljaWQKKwkgKiB3aWxsIGJlIFs0LCAweDIzXSBvciBbOCwgMHgyN10gY291bGQgYmUgdGhvdWdodCB0bworCSAqIHZzbXAgYm94IHN0aWxsIG5lZWQgY2hlY2tpbmcuLi4KKwkgKi8KKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYgIWlzX3ZzbXBfYm94KCkpCisJCXJldHVybiAwOworCisJYmlvc19jcHVfYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCk7CisJYml0bWFwX3plcm8oY2x1c3Rlcm1hcCwgTlVNX0FQSUNfQ0xVU1RFUlMpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykgeworCQkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLworCQlpZiAoYmlvc19jcHVfYXBpY2lkKSB7CisJCQlpZCA9IGJpb3NfY3B1X2FwaWNpZFtpXTsKKwkJfSBlbHNlIGlmIChpIDwgbnJfY3B1X2lkcykgeworCQkJaWYgKGNwdV9wcmVzZW50KGkpKQorCQkJCWlkID0gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBpKTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlCisJCQlicmVhazsKKworCQlpZiAoaWQgIT0gQkFEX0FQSUNJRCkKKwkJCV9fc2V0X2JpdChBUElDX0NMVVNURVJJRChpZCksIGNsdXN0ZXJtYXApOworCX0KKworCS8qIFByb2JsZW06ICBQYXJ0aWFsbHkgcG9wdWxhdGVkIGNoYXNzaXMgbWF5IG5vdCBoYXZlIENQVXMgaW4gc29tZSBvZgorCSAqIHRoZSBBUElDIGNsdXN0ZXJzIHRoZXkgaGF2ZSBiZWVuIGFsbG9jYXRlZC4gIE9ubHkgcHJlc2VudCBDUFVzIGhhdmUKKwkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGVudHJpZXMsIHRodXMgY2F1c2luZyB6ZXJvZXMgaW4gdGhlIGJpdG1hcC4KKwkgKiBTaW5jZSBjbHVzdGVycyBhcmUgYWxsb2NhdGVkIHNlcXVlbnRpYWxseSwgY291bnQgemVyb3Mgb25seSBpZgorCSAqIHRoZXkgYXJlIGJvdW5kZWQgYnkgb25lcy4KKwkgKi8KKwljbHVzdGVycyA9IDA7CisJemVyb3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQVBJQ19DTFVTVEVSUzsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChpLCBjbHVzdGVybWFwKSkgeworCQkJY2x1c3RlcnMgKz0gMSArIHplcm9zOworCQkJemVyb3MgPSAwOworCQl9IGVsc2UKKwkJCSsremVyb3M7CisJfQorCisJLyogU2NhbGVNUCB2U01Qb3dlcmVkIGJveGVzIGhhdmUgb25lIGNsdXN0ZXIgcGVyIGJvYXJkIGFuZCBUU0NzIGFyZQorCSAqIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN5bmNlZCBiZXR3ZWVuIGJvYXJkcworCSAqLworCWlmIChpc192c21wX2JveCgpICYmIGNsdXN0ZXJzID4gMSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElmIGNsdXN0ZXJzID4gMiwgdGhlbiBzaG91bGQgYmUgbXVsdGktY2hhc3Npcy4KKwkgKiBNYXkgaGF2ZSB0byByZXZpc2l0IHRoaXMgd2hlbiBtdWx0aS1jb3JlICsgaHlwZXJ0aHJlYWRlZCBDUFVzIGNvbWUKKwkgKiBvdXQsIGJ1dCBBRkFJSyB0aGlzIHdpbGwgd29yayBldmVuIGZvciB0aGVtLgorCSAqLworCXJldHVybiAoY2x1c3RlcnMgPiAyKTsKK30KKyNlbmRpZgorCisvKgorICogQVBJQyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworICovCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9kaXNhYmxlYXBpYyhjaGFyICphcmcpCit7CisJZGlzYWJsZV9hcGljID0gMTsKKwlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0FQSUMpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImRpc2FibGVhcGljIiwgc2V0dXBfZGlzYWJsZWFwaWMpOworCisvKiBzYW1lIGFzIGRpc2FibGVhcGljLCBmb3IgY29tcGF0aWJpbGl0eSAqLworc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm9sYXBpYyhjaGFyICphcmcpCit7CisJcmV0dXJuIHNldHVwX2Rpc2FibGVhcGljKGFyZyk7Cit9CitlYXJseV9wYXJhbSgibm9sYXBpYyIsIHNldHVwX25vbGFwaWMpOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayhjaGFyICphcmcpCit7CisJbG9jYWxfYXBpY190aW1lcl9jMl9vayA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibGFwaWNfdGltZXJfYzJfb2siLCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcihjaGFyICphcmcpCit7CisJZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub2FwaWN0aW1lciIsIHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcik7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vbGFwaWNfdGltZXIoY2hhciAqYXJnKQoreworCWRpc2FibGVfYXBpY190aW1lciA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9sYXBpY190aW1lciIsIHBhcnNlX25vbGFwaWNfdGltZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBhcGljX3NldF92ZXJib3NpdHkoY2hhciAqYXJnKQoreworCWlmICghYXJnKSAgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJc2tpcF9pb2FwaWNfc2V0dXAgPSAwOworCQlyZXR1cm4gMDsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RyY21wKCJkZWJ1ZyIsIGFyZykgPT0gMCkKKwkJYXBpY192ZXJib3NpdHkgPSBBUElDX0RFQlVHOworCWVsc2UgaWYgKHN0cmNtcCgidmVyYm9zZSIsIGFyZykgPT0gMCkKKwkJYXBpY192ZXJib3NpdHkgPSBBUElDX1ZFUkJPU0U7CisJZWxzZSB7CisJCXByX3dhcm5pbmcoIkFQSUMgVmVyYm9zaXR5IGxldmVsICVzIG5vdCByZWNvZ25pc2VkIgorCQkJIiB1c2UgYXBpYz12ZXJib3NlIG9yIGFwaWM9ZGVidWdcbiIsIGFyZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImFwaWMiLCBhcGljX3NldF92ZXJib3NpdHkpOworCitzdGF0aWMgaW50IF9faW5pdCBsYXBpY19pbnNlcnRfcmVzb3VyY2Uodm9pZCkKK3sKKwlpZiAoIWFwaWNfcGh5cykKKwkJcmV0dXJuIC0xOworCisJLyogUHV0IGxvY2FsIEFQSUMgaW50byB0aGUgcmVzb3VyY2UgbWFwLiAqLworCWxhcGljX3Jlc291cmNlLnN0YXJ0ID0gYXBpY19waHlzOworCWxhcGljX3Jlc291cmNlLmVuZCA9IGxhcGljX3Jlc291cmNlLnN0YXJ0ICsgUEFHRV9TSVpFIC0gMTsKKwlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmbGFwaWNfcmVzb3VyY2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBuZWVkIGNhbGwgaW5zZXJ0IGFmdGVyIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoKQorICogdGhhdCBpcyB1c2luZyByZXF1ZXN0X3Jlc291cmNlCisgKi8KK2xhdGVfaW5pdGNhbGwobGFwaWNfaW5zZXJ0X3Jlc291cmNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzMzgyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEZsYXQgQVBJQyBzdWJhcmNoIGNvZGUuCisgKgorICogSGFja2VkIGZvciB4ODYtNjQgYnkgSmFtZXMgQ2xldmVyZG9uIGZyb20gaTM4NiBhcmNoaXRlY3R1cmUgY29kZSBieQorICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKKyAqIEphbWVzIENsZXZlcmRvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCisjaWZkZWYgQ09ORklHX0FDUEkKKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjZW5kaWYKKworc3RhdGljIGludCBmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZmxhdF90YXJnZXRfY3B1cyh2b2lkKQoreworCXJldHVybiBjcHVfb25saW5lX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQoreworCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCisJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKKwkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KKwkgKi8KKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfYml0cyhyZXRtYXNrKVswXSA9IEFQSUNfQUxMX0NQVVM7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCisgKgorICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKyAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorICovCitzdGF0aWMgdm9pZCBmbGF0X2luaXRfYXBpY19sZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIG51bSwgaWQ7CisKKwludW0gPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWQgPSAxVUwgPDwgbnVtOworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX0ZMQVQpOworCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKKwl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9mbGF0X3NlbmRfSVBJX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19kZWZhdWx0X3NlbmRfSVBJX2Rlc3RfZmllbGQobWFzaywgdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZmxhdF9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKKworCV9mbGF0X3NlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQKKyBmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChjcHUgPCBCSVRTX1BFUl9MT05HKQorCQljbGVhcl9iaXQoY3B1LCAmbWFzayk7CisKKwlfZmxhdF9zZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIGZsYXRfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisjaWZkZWYJQ09ORklHX0hPVFBMVUdfQ1BVCisJaW50IGhvdHBsdWcgPSAxOworI2Vsc2UKKwlpbnQgaG90cGx1ZyA9IDA7CisjZW5kaWYKKwlpZiAoaG90cGx1ZyB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikgeworCQlpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVtYXNrX29mKGNwdSkpKSB7CisJCQl1bnNpZ25lZCBsb25nIG1hc2sgPSBjcHVtYXNrX2JpdHMoY3B1X29ubGluZV9tYXNrKVswXTsKKworCQkJaWYgKGNwdSA8IEJJVFNfUEVSX0xPTkcpCisJCQkJY2xlYXJfYml0KGNwdSwgJm1hc2spOworCisJCQlfZmxhdF9zZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7CisJCX0KKwl9IGVsc2UgaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkgeworCQlfX2RlZmF1bHRfc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTEJVVCwKKwkJCQkJICAgIHZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsYXRfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJaWYgKHZlY3RvciA9PSBOTUlfVkVDVE9SKSB7CisJCWZsYXRfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7CisJfSBlbHNlIHsKKwkJX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExJTkMsCisJCQkJCSAgICB2ZWN0b3IsIGFwaWMtPmRlc3RfbG9naWNhbCk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZsYXRfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXVuc2lnbmVkIGludCBpZDsKKworCWlkID0gKCgoeCk+PjI0KSAmIDB4RkZ1KTsKKworCXJldHVybiBpZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGxvbmcgeDsKKworCXggPSAoKGlkICYgMHhGRnUpPDwyNCk7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF94YXBpY19pZCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpZDsKKworCWlkID0gZmxhdF9nZXRfYXBpY19pZChhcGljX3JlYWQoQVBJQ19JRCkpOworCXJldHVybiBpZDsKK30KKworc3RhdGljIGludCBmbGF0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF94YXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJcmV0dXJuIGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBtYXNrMSA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7CisJdW5zaWduZWQgbG9uZyBtYXNrMiA9IGNwdW1hc2tfYml0cyhhbmRtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7CisKKwlyZXR1cm4gbWFzazEgJiBtYXNrMjsKK30KKworc3RhdGljIGludCBmbGF0X3BoeXNfcGtnX2lkKGludCBpbml0aWFsX2FwaWNfaWQsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKK30KKworc3RydWN0IGFwaWMgYXBpY19mbGF0ID0gIHsKKwkubmFtZQkJCQk9ICJmbGF0IiwKKwkucHJvYmUJCQkJPSBOVUxMLAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IGZsYXRfYWNwaV9tYWR0X29lbV9jaGVjaywKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IGZsYXRfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfTG93ZXN0UHJpbywKKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMSwgLyogbG9naWNhbCAqLworCisJLnRhcmdldF9jcHVzCQkJPSBmbGF0X3RhcmdldF9jcHVzLAorCS5kaXNhYmxlX2VzcgkJCT0gMCwKKwkuZGVzdF9sb2dpY2FsCQkJPSBBUElDX0RFU1RfTE9HSUNBTCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gTlVMTCwKKwkuY2hlY2tfYXBpY2lkX3ByZXNlbnQJCT0gTlVMTCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gZmxhdF9pbml0X2FwaWNfbGRyLAorCisJLmlvYXBpY19waHlzX2lkX21hcAkJPSBOVUxMLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gTlVMTCwKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gTlVMTCwKKwkuYXBpY2lkX3RvX25vZGUJCQk9IE5VTEwsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBOVUxMLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBOVUxMLAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKKwkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLAorCS5waHlzX3BrZ19pZAkJCT0gZmxhdF9waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0gZmxhdF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IHNldF9hcGljX2lkLAorCS5hcGljX2lkX21hc2sJCQk9IDB4RkZ1IDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0gZmxhdF9zZW5kX0lQSV9tYXNrLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSBmbGF0X3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0gZmxhdF9zZW5kX0lQSV9hbGwsCisJLnNlbmRfSVBJX3NlbGYJCQk9IGFwaWNfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBOVUxMLAorCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CisKKy8qCisgKiBQaHlzZmxhdCBtb2RlIGlzIHVzZWQgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIDggQ1BVcyBvbiBhIEFNRCBzeXN0ZW0uCisgKiBXZSBjYW5ub3QgdXNlIGxvZ2ljYWwgZGVsaXZlcnkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgdGhlIG1hc2sKKyAqIG92ZXJmbG93cywgc28gdXNlIHBoeXNpY2FsIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgcGh5c2ZsYXRfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQUNQSQorCS8qCisJICogUXVpcms6IHNvbWUgeDg2XzY0IG1hY2hpbmVzIGNhbiBvbmx5IHVzZSBwaHlzaWNhbCBBUElDIG1vZGUKKwkgKiByZWdhcmRsZXNzIG9mIGhvdyBtYW55IHByb2Nlc3NvcnMgYXJlIHByZXNlbnQgKHg4Nl82NCBFUzcwMDAKKwkgKiBpcyBhbiBleGFtcGxlKS4KKwkgKi8KKwlpZiAoYWNwaV9nYmxfRkFEVC5oZWFkZXIucmV2aXNpb24gPiBGQURUMl9SRVZJU0lPTl9JRCAmJgorCQkoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9BUElDX1BIWVNJQ0FMKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAic3lzdGVtIEFQSUMgb25seSBjYW4gdXNlIHBoeXNpY2FsIGZsYXQiKTsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpwaHlzZmxhdF90YXJnZXRfY3B1cyh2b2lkKQoreworCXJldHVybiBjcHVfb25saW5lX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHBoeXNmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldG1hc2spOworfQorCitzdGF0aWMgdm9pZCBwaHlzZmxhdF9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLCBpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9waHlzKGNwdW1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkJICAgICAgaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9waHlzKGNwdW1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9waHlzKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQgcGh5c2ZsYXRfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJcGh5c2ZsYXRfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGh5c2ZsYXRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCWludCBjcHU7CisKKwkvKgorCSAqIFdlJ3JlIHVzaW5nIGZpeGVkIElSUSBkZWxpdmVyeSwgY2FuIG9ubHkgcmV0dXJuIG9uZSBwaHlzIEFQSUMgSUQuCisJICogTWF5IGFzIHdlbGwgYmUgdGhlIGZpcnN0LgorCSAqLworCWNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1bWFzayk7CisJaWYgKCh1bnNpZ25lZCljcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitwaHlzZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQoreworCWludCBjcHU7CisKKwkvKgorCSAqIFdlJ3JlIHVzaW5nIGZpeGVkIElSUSBkZWxpdmVyeSwgY2FuIG9ubHkgcmV0dXJuIG9uZSBwaHlzIEFQSUMgSUQuCisJICogTWF5IGFzIHdlbGwgYmUgdGhlIGZpcnN0LgorCSAqLworCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBjcHVtYXNrLCBhbmRtYXNrKSB7CisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisKKwlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RydWN0IGFwaWMgYXBpY19waHlzZmxhdCA9ICB7CisKKwkubmFtZQkJCQk9ICJwaHlzaWNhbCBmbGF0IiwKKwkucHJvYmUJCQkJPSBOVUxMLAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IHBoeXNmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2ssCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBmbGF0X2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0ZpeGVkLAorCS5pcnFfZGVzdF9tb2RlCQkJPSAwLCAvKiBwaHlzaWNhbCAqLworCisJLnRhcmdldF9jcHVzCQkJPSBwaHlzZmxhdF90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDAsCisJLmRlc3RfbG9naWNhbAkJCT0gMCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gTlVMTCwKKwkuY2hlY2tfYXBpY2lkX3ByZXNlbnQJCT0gTlVMTCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBwaHlzZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLyogbm90IG5lZWRlZCwgYnV0IHNob3VsZG4ndCBodXJ0OiAqLworCS5pbml0X2FwaWNfbGRyCQkJPSBmbGF0X2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IE5VTEwsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBOVUxMLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAorCS5hcGljaWRfdG9fbm9kZQkJCT0gTlVMTCwKKwkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IE5VTEwsCisJLmNwdV9wcmVzZW50X3RvX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IE5VTEwsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IE5VTEwsCisJLnBoeXNfcGtnX2lkCQkJPSBmbGF0X3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBOVUxMLAorCisJLmdldF9hcGljX2lkCQkJPSBmbGF0X2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gc2V0X2FwaWNfaWQsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRnUgPDwgMjQsCisKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IHBoeXNmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSBwaHlzZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IHBoeXNmbGF0X3NlbmRfSVBJX21hc2ssCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IHBoeXNmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSBwaHlzZmxhdF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IHBoeXNmbGF0X3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0gYXBpY19zZW5kX0lQSV9zZWxmLAorCisJLnRyYW1wb2xpbmVfcGh5c19sb3cJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfTE9XLAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19ISUdILAorCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IE5VTEwsCisJLnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYwk9IE5VTEwsCisJLmlucXVpcmVfcmVtb3RlX2FwaWMJCT0gTlVMTCwKKworCS5yZWFkCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCisJLndyaXRlCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAorCS5pY3JfcmVhZAkJCT0gbmF0aXZlX2FwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX2FwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBuYXRpdmVfYXBpY193YWl0X2ljcl9pZGxlLAorCS5zYWZlX3dhaXRfaWNyX2lkbGUJCT0gbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNmVjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQVBJQyBkcml2ZXIgZm9yICJiaWdzbXAiIHhBUElDIG1hY2hpbmVzIHdpdGggbW9yZSB0aGFuIDggdmlydHVhbCBDUFVzLgorICoKKyAqIERyaXZlcyB0aGUgbG9jYWwgQVBJQyBpbiAiY2x1c3RlcmVkIG1vZGUiLgorICovCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBiaWdzbXBfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAoeCA+PiAyNCkgJiAweEZGOworfQorCitzdGF0aWMgaW50IGJpZ3NtcF9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqYmlnc21wX3RhcmdldF9jcHVzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiAmY3B1X29ubGluZV9tYXA7CisjZWxzZQorCXJldHVybiAmY3B1bWFza19vZl9jcHUoMCk7CisjZW5kaWYKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmlnc21wX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiaWdzbXBfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9sZHIoaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7CisKKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CisJaWQgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSk7CisJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOworCisJcmV0dXJuIHZhbDsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KKyAqCisgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZworICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKKyAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCisgKi8KK3N0YXRpYyB2b2lkIGJpZ3NtcF9pbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX0ZMQVQpOworCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBiaWdzbXBfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTworCQkiRW5hYmxpbmcgQVBJQyBtb2RlOiAgUGh5c2ZsYXQuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCisJCW5yX2lvYXBpY3MpOworfQorCitzdGF0aWMgaW50IGJpZ3NtcF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisJcmV0dXJuIGFwaWNpZF8yX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOworfQorCitzdGF0aWMgaW50IGJpZ3NtcF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gKGludCkgcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKKworCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgcGh5c2lkX21hc2tfdCBiaWdzbXBfYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKK30KKworLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKK3sKKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBjcHVfcGh5c2ljYWxfaWQoY3B1KTsKK30KKworc3RhdGljIHBoeXNpZF9tYXNrX3QgYmlnc21wX2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQoreworCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLworCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhGRkwpOworfQorCitzdGF0aWMgaW50IGJpZ3NtcF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qIEFzIHdlIGFyZSB1c2luZyBzaW5nbGUgQ1BVIGFzIGRlc3RpbmF0aW9uLCBwaWNrIG9ubHkgb25lIENQVSBoZXJlICovCitzdGF0aWMgdW5zaWduZWQgaW50IGJpZ3NtcF9jcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQoreworCXJldHVybiBiaWdzbXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGZpcnN0X2NwdSgqY3B1bWFzaykpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGJpZ3NtcF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJaW50IGNwdTsKKworCS8qCisJICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KKwkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCisJICovCisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spIHsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQorCQkJYnJlYWs7CisJfQorCWlmIChjcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gYmlnc21wX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworCisJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbnQgYmlnc21wX3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJpZ3NtcF9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9waHlzKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIGJpZ3NtcF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfcGh5cyhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIGJpZ3NtcF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwliaWdzbXBfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgZG1pX2JpZ3NtcDsgLyogY2FuIGJlIHNldCBieSBkbWkgc2Nhbm5lcnMgKi8KKworc3RhdGljIGludCBocF9odF9iaWdzbXAoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBkZXRlY3RlZDogZm9yY2UgdXNlIG9mIGFwaWM9Ymlnc21wXG4iLCBkLT5pZGVudCk7CisJZG1pX2JpZ3NtcCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgYmlnc21wX2RtaV90YWJsZVtdID0geworCXsgaHBfaHRfYmlnc21wLCAiSFAgUHJvTGlhbnQgREw3NjAgRzIiLAorCQl7CURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9CSU9TX1ZFUlNJT04sICJQNDQtIiksCisJCX0KKwl9LAorCisJeyBocF9odF9iaWdzbXAsICJIUCBQcm9MaWFudCBETDc0MCIsCisJCXsJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkhQIiksCisJCQlETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwgIlA0Ny0iKSwKKwkJfQorCX0sCisJeyB9IC8qIE5VTEwgZW50cnkgc3RvcHMgRE1JIHNjYW5uaW5nICovCit9OworCitzdGF0aWMgdm9pZCBiaWdzbXBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3sKKwljcHVzX2NsZWFyKCpyZXRtYXNrKTsKKwljcHVfc2V0KGNwdSwgKnJldG1hc2spOworfQorCitzdGF0aWMgaW50IHByb2JlX2JpZ3NtcCh2b2lkKQoreworCWlmIChkZWZfdG9fYmlnc21wKQorCQlkbWlfYmlnc21wID0gMTsKKwllbHNlCisJCWRtaV9jaGVja19zeXN0ZW0oYmlnc21wX2RtaV90YWJsZSk7CisKKwlyZXR1cm4gZG1pX2JpZ3NtcDsKK30KKworc3RydWN0IGFwaWMgYXBpY19iaWdzbXAgPSB7CisKKwkubmFtZQkJCQk9ICJiaWdzbXAiLAorCS5wcm9iZQkJCQk9IHByb2JlX2JpZ3NtcCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSBOVUxMLAorCS5hcGljX2lkX3JlZ2lzdGVyZWQJCT0gYmlnc21wX2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0ZpeGVkLAorCS8qIHBoeXMgZGVsaXZlcnkgdG8gdGFyZ2V0IENQVTogKi8KKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMCwKKworCS50YXJnZXRfY3B1cwkJCT0gYmlnc21wX3RhcmdldF9jcHVzLAorCS5kaXNhYmxlX2VzcgkJCT0gMSwKKwkuZGVzdF9sb2dpY2FsCQkJPSAwLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBiaWdzbXBfY2hlY2tfYXBpY2lkX3VzZWQsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IGJpZ3NtcF9jaGVja19hcGljaWRfcHJlc2VudCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBiaWdzbXBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS5pbml0X2FwaWNfbGRyCQkJPSBiaWdzbXBfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gYmlnc21wX2lvYXBpY19waHlzX2lkX21hcCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IGJpZ3NtcF9zZXR1cF9hcGljX3JvdXRpbmcsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBiaWdzbXBfYXBpY2lkX3RvX25vZGUsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBiaWdzbXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gYmlnc21wX2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IGJpZ3NtcF9hcGljaWRfdG9fY3B1X3ByZXNlbnQsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gYmlnc21wX2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IGJpZ3NtcF9waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0gYmlnc21wX2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gTlVMTCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGIDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBiaWdzbXBfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IGJpZ3NtcF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IGJpZ3NtcF9zZW5kX0lQSV9tYXNrLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBOVUxMLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmCQk9IGJpZ3NtcF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IGJpZ3NtcF9zZW5kX0lQSV9hbGwsCisJLnNlbmRfSVBJX3NlbGYJCQk9IGRlZmF1bHRfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKworCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IGRlZmF1bHRfd2FpdF9mb3JfaW5pdF9kZWFzc2VydCwKKworCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IGRlZmF1bHRfaW5xdWlyZV9yZW1vdGVfYXBpYywKKworCS5yZWFkCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCisJLndyaXRlCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAorCS5pY3JfcmVhZAkJCT0gbmF0aXZlX2FwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX2FwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBuYXRpdmVfYXBpY193YWl0X2ljcl9pZGxlLAorCS5zYWZlX3dhaXRfaWNyX2lkbGUJCT0gbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1ODhmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCkBAIC0wLDAgKzEsNzgwIEBACisvKgorICogV3JpdHRlbiBieTogR2FycnkgRm9yc2dyZW4sIFVuaXN5cyBDb3Jwb3JhdGlvbgorICogICAgICAgICAgICAgTmF0YWxpZSBQcm90YXNldmljaCwgVW5pc3lzIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIHRvIGNvbmZpZ3VyZSBhbmQgaW50ZXJmYWNlCisgKiB3aXRoIFVuaXN5cyBFUzcwMDAgc2VyaWVzIGhhcmR3YXJlIHN5c3RlbSBtYW5hZ2VyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBVbmlzeXMgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKgorICogICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb250YWN0IGluZm9ybWF0aW9uOiBVbmlzeXMgQ29ycG9yYXRpb24sIFRvd25zaGlwIExpbmUgJiBVbmlvbiBNZWV0aW5nCisgKiBSb2Fkcy1BLCBVbmlzeXMgV2F5LCBCbHVlIEJlbGwsIFBlbm5zeWx2YW5pYSwgMTk0MjQsIG9yOgorICoKKyAqIGh0dHA6Ly93d3cudW5pc3lzLmNvbQorICovCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisKKy8qCisgKiBFUzcwMDAgY2hpcHNldHMKKyAqLworCisjZGVmaW5lIE5PTl9VTklTWVMJCQkwCisjZGVmaW5lIEVTNzAwMF9DTEFTU0lDCQkJMQorI2RlZmluZSBFUzcwMDBfWk9SUk8JCQkyCisKKyNkZWZpbmUJTUlQX1JFRwkJCQkxCisjZGVmaW5lCU1JUF9QU0FJX1JFRwkJCTQKKworI2RlZmluZQlNSVBfQlVTWQkJCTEKKyNkZWZpbmUJTUlQX1NQSU4JCQkweGYwMDAwCisjZGVmaW5lCU1JUF9WQUxJRAkJCTB4MDEwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZQlNSVBfU1dfQVBJQwkJCTB4MTAyMGIKKworI2RlZmluZQlNSVBfUE9SVCh2YWwpCQkJKCh2YWwgPj4gMzIpICYgMHhmZmZmKQorCisjZGVmaW5lCU1JUF9SRF9MTyh2YWwpCQkJKHZhbCAmIDB4ZmZmZmZmZmYpCisKK3N0cnVjdCBtaXBfcmVnIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW9mZl8weDAwOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJb2ZmXzB4MDg7CisJdW5zaWduZWQgbG9uZyBsb25nCQlvZmZfMHgxMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW9mZl8weDE4OworCXVuc2lnbmVkIGxvbmcgbG9uZwkJb2ZmXzB4MjA7CisJdW5zaWduZWQgbG9uZyBsb25nCQlvZmZfMHgyODsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW9mZl8weDMwOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJb2ZmXzB4Mzg7Cit9OworCitzdHJ1Y3QgbWlwX3JlZ19pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW1pcF9pbmZvOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJZGVsaXZlcnlfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCWhvc3RfcmVnOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJbWlwX3JlZzsKK307CisKK3N0cnVjdCBwc2FpIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCWVudHJ5X3R5cGU7CisJdW5zaWduZWQgbG9uZyBsb25nCQlhZGRyOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJYmVwX2FkZHI7Cit9OworCisjaWZkZWYgQ09ORklHX0FDUEkKKworc3RydWN0IGVzNzAwMF9vZW1fdGFibGUgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcglIZWFkZXI7CisJdTMyCQkJCU9FTVRhYmxlQWRkcjsKKwl1MzIJCQkJT0VNVGFibGVTaXplOworfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCQlvZW1fYWRkclg7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJCW9lbV9zaXplOworCisjZW5kaWYKKworLyoKKyAqIEVTNzAwMCBHbG9iYWxzCisgKi8KKworc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJCSpwc2FpOworc3RhdGljIHN0cnVjdCBtaXBfcmVnCQkJKm1pcF9yZWc7CitzdGF0aWMgc3RydWN0IG1pcF9yZWcJCQkqaG9zdF9yZWc7CitzdGF0aWMgaW50IAkJCQltaXBfcG9ydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQkJbWlwX2FkZHI7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJCWhvc3RfYWRkcjsKKworaW50CQkJCQllczcwMDBfcGxhdDsKKworLyoKKyAqIEdTSSBvdmVycmlkZSBmb3IgRVM3MDAwIHBsYXRmb3Jtcy4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CQkJYmFzZTsKKworc3RhdGljIGludAorZXM3MDAwX3JlbmFtZV9nc2koaW50IGlvYXBpYywgaW50IGdzaSkKK3sKKwlpZiAoZXM3MDAwX3BsYXQgPT0gRVM3MDAwX1pPUlJPKQorCQlyZXR1cm4gZ3NpOworCisJaWYgKCFiYXNlKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQorCQkJYmFzZSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldOworCX0KKworCWlmICghaW9hcGljICYmIChnc2kgPCAxNikpCisJCWdzaSArPSBiYXNlOworCisJcmV0dXJuIGdzaTsKK30KKworc3RhdGljIGludCB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbWlwKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZWlwKQoreworCXVuc2lnbmVkIGxvbmcgdmVjdCA9IDAsIHBzYWl2YWwgPSAwOworCisJaWYgKHBzYWkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJdmVjdCA9ICgodW5zaWduZWQgbG9uZylfX3BhKGVpcCkvMHgxMDAwKSA8PCAxNjsKKwlwc2FpdmFsID0gKDB4MTAwMDAwMCB8IHZlY3QgfCBjcHUpOworCisJd2hpbGUgKCpwc2FpICYgMHgxMDAwMDAwKQorCQk7CisKKwkqcHNhaSA9IHBzYWl2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlczcwMDBfYXBpY19pc19jbHVzdGVyKHZvaWQpCit7CisJLyogTVBFTlRJVU1JSUkgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJgorCSAgICAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPj0gNyB8fCBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PSAxMSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3VuaXN5cyh2b2lkKQoreworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBFUzcwMDAgY3VycmVudGx5IHJ1bm5pbmcuCisJICoKKwkgKiBlczcwMDBfcGxhdCA9IDEgaWYgdGhlIG1hY2hpbmUgaXMgYSA1eHggRVM3MDAwIGJveAorCSAqIGVzNzAwMF9wbGF0ID0gMiBpZiB0aGUgbWFjaGluZSBpcyBhIHg4Nl82NCBFUzcwMDAgYm94CisJICoKKwkgKi8KKwlpZiAoIShib290X2NwdV9kYXRhLng4NiA8PSAxNSAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PSAyKSkKKwkJZXM3MDAwX3BsYXQgPSBFUzcwMDBfWk9SUk87CisJZWxzZQorCQllczcwMDBfcGxhdCA9IEVTNzAwMF9DTEFTU0lDOworCWlvYXBpY19yZW51bWJlcl9pcnEgPSBlczcwMDBfcmVuYW1lX2dzaTsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBPRU0gVGFibGU6CisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfdW5pc3lzX29lbShjaGFyICpvZW1wdHIpCit7CisJaW50CQkJaTsKKwlpbnQgCQkJc3VjY2VzcyA9IDA7CisJdW5zaWduZWQgY2hhcgkJdHlwZSwgc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQl2YWw7CisJY2hhcgkJCSp0cCA9IE5VTEw7CisJc3RydWN0IHBzYWkJCSpwc2FpcCA9IE5VTEw7CisJc3RydWN0IG1pcF9yZWdfaW5mbyAJKm1pOworCXN0cnVjdCBtaXBfcmVnCQkqaG9zdCwgKm1pcDsKKworCXRwID0gb2VtcHRyOworCisJdHAgKz0gODsKKworCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKSB7CisJCXR5cGUgPSAqdHArKzsKKwkJc2l6ZSA9ICp0cCsrOworCQl0cCAtPSAyOworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBNSVBfUkVHOgorCQkJbWkgPSAoc3RydWN0IG1pcF9yZWdfaW5mbyAqKXRwOworCQkJdmFsID0gTUlQX1JEX0xPKG1pLT5ob3N0X3JlZyk7CisJCQlob3N0X2FkZHIgPSB2YWw7CisJCQlob3N0ID0gKHN0cnVjdCBtaXBfcmVnICopdmFsOworCQkJaG9zdF9yZWcgPSBfX3ZhKGhvc3QpOworCQkJdmFsID0gTUlQX1JEX0xPKG1pLT5taXBfcmVnKTsKKwkJCW1pcF9wb3J0ID0gTUlQX1BPUlQobWktPm1pcF9pbmZvKTsKKwkJCW1pcF9hZGRyID0gdmFsOworCQkJbWlwID0gKHN0cnVjdCBtaXBfcmVnICopdmFsOworCQkJbWlwX3JlZyA9IF9fdmEobWlwKTsKKwkJCXByX2RlYnVnKCJlczcwMDBfbWlwY2ZnOiBob3N0X3JlZyA9IDB4JWx4IFxuIiwKKwkJCQkgKHVuc2lnbmVkIGxvbmcpaG9zdF9yZWcpOworCQkJcHJfZGVidWcoImVzNzAwMF9taXBjZmc6IG1pcF9yZWcgPSAweCVseCBcbiIsCisJCQkJICh1bnNpZ25lZCBsb25nKW1pcF9yZWcpOworCQkJc3VjY2VzcysrOworCQkJYnJlYWs7CisJCWNhc2UgTUlQX1BTQUlfUkVHOgorCQkJcHNhaXAgPSAoc3RydWN0IHBzYWkgKil0cDsKKwkJCWlmICh0cCAhPSBOVUxMKSB7CisJCQkJaWYgKHBzYWlwLT5hZGRyKQorCQkJCQlwc2FpID0gX192YShwc2FpcC0+YWRkcik7CisJCQkJZWxzZQorCQkJCQlwc2FpID0gTlVMTDsKKwkJCQlzdWNjZXNzKys7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXRwICs9IHNpemU7CisJfQorCisJaWYgKHN1Y2Nlc3MgPCAyKQorCQllczcwMDBfcGxhdCA9IE5PTl9VTklTWVM7CisJZWxzZQorCQlzZXR1cF91bmlzeXMoKTsKKworCXJldHVybiBlczcwMDBfcGxhdDsKK30KKworI2lmZGVmIENPTkZJR19BQ1BJCitzdGF0aWMgaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKQoreworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKKwlzdHJ1Y3QgZXM3MDAwX29lbV90YWJsZSAqdGFibGU7CisJYWNwaV9zaXplIHRibF9zaXplOworCWFjcGlfc3RhdHVzIHJldDsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKDs7KSB7CisJCXJldCA9IGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZSgiT0VNMSIsIGkrKywgJmhlYWRlciwgJnRibF9zaXplKTsKKwkJaWYgKCFBQ1BJX1NVQ0NFU1MocmV0KSkKKwkJCXJldHVybiAtMTsKKworCQlpZiAoIW1lbWNtcCgoY2hhciAqKSAmaGVhZGVyLT5vZW1faWQsICJVTklTWVMiLCA2KSkKKwkJCWJyZWFrOworCisJCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KGhlYWRlciwgdGJsX3NpemUpOworCX0KKworCXRhYmxlID0gKHZvaWQgKiloZWFkZXI7CisKKwlvZW1fYWRkclgJPSB0YWJsZS0+T0VNVGFibGVBZGRyOworCW9lbV9zaXplCT0gdGFibGUtPk9FTVRhYmxlU2l6ZTsKKworCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KGhlYWRlciwgdGJsX3NpemUpOworCisJKm9lbV9hZGRyCT0gKHVuc2lnbmVkIGxvbmcpX19hY3BpX21hcF90YWJsZShvZW1fYWRkclgsIG9lbV9zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1bm1hcF91bmlzeXNfYWNwaV9vZW1fdGFibGUodW5zaWduZWQgbG9uZyBvZW1fYWRkcikKK3sKKwlpZiAoIW9lbV9hZGRyKQorCQlyZXR1cm47CisKKwlfX2FjcGlfdW5tYXBfdGFibGUoKGNoYXIgKilvZW1fYWRkciwgb2VtX3NpemUpOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9jaGVja19kc2R0KHZvaWQpCit7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsKKworCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfdGFibGVfaGVhZGVyKEFDUElfU0lHX0RTRFQsIDAsICZoZWFkZXIpKSAmJgorCSAgICAhc3RybmNtcChoZWFkZXIub2VtX2lkLCAiVU5JU1lTIiwgNikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9hY3BpX3JldDsKKworLyogSG9vayBmcm9tIGdlbmVyaWMgQUNQSSB0YWJsZXMuYyAqLworc3RhdGljIGludCBlczcwMDBfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9lbV9hZGRyID0gMDsKKwlpbnQgY2hlY2tfZHNkdDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNoZWNrIGRzZHQgYXQgZmlyc3QgdG8gYXZvaWQgY2xlYXIgZml4X21hcCBmb3Igb2VtX2FkZHIgKi8KKwljaGVja19kc2R0ID0gZXM3MDAwX2NoZWNrX2RzZHQoKTsKKworCWlmICghZmluZF91bmlzeXNfYWNwaV9vZW1fdGFibGUoJm9lbV9hZGRyKSkgeworCQlpZiAoY2hlY2tfZHNkdCkgeworCQkJcmV0ID0gcGFyc2VfdW5pc3lzX29lbSgoY2hhciAqKW9lbV9hZGRyKTsKKwkJfSBlbHNlIHsKKwkJCXNldHVwX3VuaXN5cygpOworCQkJcmV0ID0gMTsKKwkJfQorCQkvKgorCQkgKiB3ZSBuZWVkIHRvIHVubWFwIGl0CisJCSAqLworCQl1bm1hcF91bmlzeXNfYWNwaV9vZW1fdGFibGUob2VtX2FkZHIpOworCX0KKworCWVzNzAwMF9hY3BpX3JldCA9IHJldDsKKworCXJldHVybiByZXQgJiYgIWVzNzAwMF9hcGljX2lzX2NsdXN0ZXIoKTsKK30KKworc3RhdGljIGludCBlczcwMDBfYWNwaV9tYWR0X29lbV9jaGVja19jbHVzdGVyKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCWludCByZXQgPSBlczcwMDBfYWNwaV9yZXQ7CisKKwlyZXR1cm4gcmV0ICYmIGVzNzAwMF9hcGljX2lzX2NsdXN0ZXIoKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19BQ1BJOiAqLworc3RhdGljIGludCBlczcwMDBfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlczcwMDBfYWNwaV9tYWR0X29lbV9jaGVja19jbHVzdGVyKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qICFDT05GSUdfQUNQSSAqLworCitzdGF0aWMgdm9pZCBlczcwMDBfc3BpbihpbnQgbikKK3sKKwlpbnQgaSA9IDA7CisKKwl3aGlsZSAoaSsrIDwgbikKKwkJcmVwX25vcCgpOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9taXBfd3JpdGUoc3RydWN0IG1pcF9yZWcgKm1pcF9yZWcpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHNwaW47CisKKwlzcGluID0gTUlQX1NQSU47CisJd2hpbGUgKChob3N0X3JlZy0+b2ZmXzB4MzggJiBNSVBfVkFMSUQpICE9IDApIHsKKwkJaWYgKC0tc3BpbiA8PSAwKSB7CisJCQlXQVJOKDEsCSJUaW1lb3V0IHdhaXRpbmcgZm9yIEhvc3QgVmFsaWQgRmxhZ1xuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZXM3MDAwX3NwaW4oTUlQX1NQSU4pOworCX0KKworCW1lbWNweShob3N0X3JlZywgbWlwX3JlZywgc2l6ZW9mKHN0cnVjdCBtaXBfcmVnKSk7CisJb3V0YigxLCBtaXBfcG9ydCk7CisKKwlzcGluID0gTUlQX1NQSU47CisKKwl3aGlsZSAoKG1pcF9yZWctPm9mZl8weDM4ICYgTUlQX1ZBTElEKSA9PSAwKSB7CisJCWlmICgtLXNwaW4gPD0gMCkgeworCQkJV0FSTigxLAkiVGltZW91dCB3YWl0aW5nIGZvciBNSVAgVmFsaWQgRmxhZ1xuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZXM3MDAwX3NwaW4oTUlQX1NQSU4pOworCX0KKworCXN0YXR1cyA9IChtaXBfcmVnLT5vZmZfMHgwMCAmIDB4ZmZmZjAwMDAwMDAwMDBVTEwpID4+IDQ4OworCW1pcF9yZWctPm9mZl8weDM4ICY9IH5NSVBfVkFMSUQ7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQoreworCXN0cnVjdCBtaXBfcmVnIGVzNzAwMF9taXBfcmVnOworCWludCBtaXBfc3RhdHVzOworCisJaWYgKCFlczcwMDBfcGxhdCkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRVM3MDAwOiBFbmFibGluZyBBUElDIG1vZGUuXG4iKTsKKwltZW1zZXQoJmVzNzAwMF9taXBfcmVnLCAwLCBzaXplb2Yoc3RydWN0IG1pcF9yZWcpKTsKKwllczcwMDBfbWlwX3JlZy5vZmZfMHgwMCA9IE1JUF9TV19BUElDOworCWVzNzAwMF9taXBfcmVnLm9mZl8weDM4ID0gTUlQX1ZBTElEOworCisJd2hpbGUgKChtaXBfc3RhdHVzID0gZXM3MDAwX21pcF93cml0ZSgmZXM3MDAwX21pcF9yZWcpKSAhPSAwKQorCQlXQVJOKDEsICJDb21tYW5kIGZhaWxlZCwgc3RhdHVzID0gJXhcbiIsIG1pcF9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07Cit9CisKKworc3RhdGljIHZvaWQgZXM3MDAwX3dhaXRfZm9yX2luaXRfZGVhc3NlcnQoYXRvbWljX3QgKmRlYXNzZXJ0KQoreworCXdoaWxlICghYXRvbWljX3JlYWQoZGVhc3NlcnQpKQorCQljcHVfcmVsYXgoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlczcwMDBfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAoeCA+PiAyNCkgJiAweEZGOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfcGh5cyhtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX3BoeXMoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJZXM3MDAwX3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXNfY2x1c3Rlcih2b2lkKQoreworCXJldHVybiAmQ1BVX01BU0tfQUxMOworfQorCitzdGF0aWMgY29uc3QgY3B1bWFza190ICplczcwMDBfdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitlczcwMDBfY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdW5zaWduZWQgbG9uZyBlczcwMDBfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbGRyKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBpZCA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KTsKKworCXJldHVybiBTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKTsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KKyAqCisgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExkUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZworICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKKyAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCisgKi8KK3N0YXRpYyB2b2lkIGVzNzAwMF9pbml0X2FwaWNfbGRyX2NsdXN0ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfQ0xVU1RFUik7CisJdmFsID0gY2FsY3VsYXRlX2xkcihjcHUpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGVzNzAwMF9pbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX0ZMQVQpOworCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisJaW50IGFwaWMgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAorCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8KKwkJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLAorCQlucl9pb2FwaWNzLCBjcHVzX2FkZHIoKmVzNzAwMF90YXJnZXRfY3B1cygpKVswXSk7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGVzNzAwMF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKCFtcHNfY3B1KQorCQlyZXR1cm4gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOworCWVsc2UgaWYgKG1wc19jcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgaW50IGNwdV9pZDsKKworc3RhdGljIHBoeXNpZF9tYXNrX3QgZXM3MDAwX2FwaWNpZF90b19jcHVfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCit7CisJcGh5c2lkX21hc2tfdCBtYXNrOworCisJbWFzayA9IHBoeXNpZF9tYXNrX29mX3BoeXNpZChjcHVfaWQpOworCSsrY3B1X2lkOworCisJcmV0dXJuIG1hc2s7Cit9CisKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitzdGF0aWMgaW50IGVzNzAwMF9jcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKKyNlbHNlCisJcmV0dXJuIGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOworI2VuZGlmCit9CisKK3N0YXRpYyBwaHlzaWRfbWFza190IGVzNzAwMF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4ZmYpOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBjcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVzNzAwMF9jcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQoreworCXVuc2lnbmVkIGludCByb3VuZCA9IDA7CisJaW50IGNwdSwgdW5pbml0aWFsaXplZF92YXIoYXBpY2lkKTsKKworCS8qCisJICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4KKwkgKi8KKwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVtYXNrKSB7CisJCWludCBuZXdfYXBpY2lkID0gZXM3MDAwX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworCisJCWlmIChyb3VuZCAmJiBBUElDX0NMVVNURVIoYXBpY2lkKSAhPSBBUElDX0NMVVNURVIobmV3X2FwaWNpZCkpIHsKKwkJCVdBUk4oMSwgIk5vdCBhIHZhbGlkIG1hc2shIik7CisKKwkJCXJldHVybiBCQURfQVBJQ0lEOworCQl9CisJCWFwaWNpZCA9IG5ld19hcGljaWQ7CisJCXJvdW5kKys7CisJfQorCXJldHVybiBhcGljaWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2VzNzAwMF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICppbm1hc2ssCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlpbnQgYXBpY2lkID0gZXM3MDAwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKKwljcHVtYXNrX3Zhcl90IGNwdW1hc2s7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVtYXNrLCBHRlBfQVRPTUlDKSkKKwkJcmV0dXJuIGFwaWNpZDsKKworCWNwdW1hc2tfYW5kKGNwdW1hc2ssIGlubWFzaywgYW5kbWFzayk7CisJY3B1bWFza19hbmQoY3B1bWFzaywgY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwlhcGljaWQgPSBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2spOworCisJZnJlZV9jcHVtYXNrX3ZhcihjcHVtYXNrKTsKKworCXJldHVybiBhcGljaWQ7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIGludCBwcm9iZV9lczcwMDAodm9pZCkKK3sKKwkvKiBwcm9iZWQgbGF0ZXIgaW4gbXB0YWJsZS9BQ1BJIGhvb2tzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX21wc19yZXQ7CitzdGF0aWMgaW50IGVzNzAwMF9tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLAorCQljaGFyICpwcm9kdWN0aWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAobXBjLT5vZW1wdHIpIHsKKwkJc3RydWN0IG1wY19vZW10YWJsZSAqb2VtX3RhYmxlID0KKwkJCShzdHJ1Y3QgbXBjX29lbXRhYmxlICopbXBjLT5vZW1wdHI7CisKKwkJaWYgKCFzdHJuY21wKG9lbSwgIlVOSVNZUyIsIDYpKQorCQkJcmV0ID0gcGFyc2VfdW5pc3lzX29lbSgoY2hhciAqKW9lbV90YWJsZSk7CisJfQorCisJZXM3MDAwX21wc19yZXQgPSByZXQ7CisKKwlyZXR1cm4gcmV0ICYmICFlczcwMDBfYXBpY19pc19jbHVzdGVyKCk7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX21wc19vZW1fY2hlY2tfY2x1c3RlcihzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJY2hhciAqcHJvZHVjdGlkKQoreworCWludCByZXQgPSBlczcwMDBfbXBzX3JldDsKKworCXJldHVybiByZXQgJiYgZXM3MDAwX2FwaWNfaXNfY2x1c3RlcigpOworfQorCitzdHJ1Y3QgYXBpYyBhcGljX2VzNzAwMF9jbHVzdGVyID0geworCisJLm5hbWUJCQkJPSAiZXM3MDAwIiwKKwkucHJvYmUJCQkJPSBwcm9iZV9lczcwMDAsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0gZXM3MDAwX2FjcGlfbWFkdF9vZW1fY2hlY2tfY2x1c3RlciwKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IGVzNzAwMF9hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9Mb3dlc3RQcmlvLAorCS8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jczogKi8KKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMSwKKworCS50YXJnZXRfY3B1cwkJCT0gdGFyZ2V0X2NwdXNfY2x1c3RlciwKKwkuZGlzYWJsZV9lc3IJCQk9IDEsCisJLmRlc3RfbG9naWNhbAkJCT0gMCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gZXM3MDAwX2NoZWNrX2FwaWNpZF91c2VkLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBlczcwMDBfY2hlY2tfYXBpY2lkX3ByZXNlbnQsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZXM3MDAwX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gZXM3MDAwX2luaXRfYXBpY19sZHJfY2x1c3RlciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gZXM3MDAwX2lvYXBpY19waHlzX2lkX21hcCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IGVzNzAwMF9zZXR1cF9hcGljX3JvdXRpbmcsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBlczcwMDBfYXBpY2lkX3RvX25vZGUsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBlczcwMDBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gZXM3MDAwX2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IGVzNzAwMF9hcGljaWRfdG9fY3B1X3ByZXNlbnQsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZXM3MDAwX2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gZXM3MDAwX2VuYWJsZV9hcGljX21vZGUsCisJLnBoeXNfcGtnX2lkCQkJPSBlczcwMDBfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IGVzNzAwMF9tcHNfb2VtX2NoZWNrX2NsdXN0ZXIsCisKKwkuZ2V0X2FwaWNfaWQJCQk9IGVzNzAwMF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRiA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSBlczcwMDBfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gTlVMTCwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSBlczcwMDBfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSBlczcwMDBfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBkZWZhdWx0X3NlbmRfSVBJX3NlbGYsCisKKwkud2FrZXVwX3NlY29uZGFyeV9jcHUJCT0gd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX21pcCwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IDB4NDY3LAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSAweDQ2OSwKKworCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IE5VTEwsCisKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciBtb3N0IHBsYXRmb3Jtcywgc2luY2UgY2xlYXJlZCBieSB0aGUgSU5JVCBjeWNsZTogKi8KKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBkZWZhdWx0X2lucXVpcmVfcmVtb3RlX2FwaWMsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CisKK3N0cnVjdCBhcGljIGFwaWNfZXM3MDAwID0geworCisJLm5hbWUJCQkJPSAiZXM3MDAwIiwKKwkucHJvYmUJCQkJPSBwcm9iZV9lczcwMDAsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0gZXM3MDAwX2FjcGlfbWFkdF9vZW1fY2hlY2ssCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBlczcwMDBfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfRml4ZWQsCisJLyogcGh5cyBkZWxpdmVyeSB0byB0YXJnZXQgQ1BVczogKi8KKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMCwKKworCS50YXJnZXRfY3B1cwkJCT0gZXM3MDAwX3RhcmdldF9jcHVzLAorCS5kaXNhYmxlX2VzcgkJCT0gMSwKKwkuZGVzdF9sb2dpY2FsCQkJPSAwLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBlczcwMDBfY2hlY2tfYXBpY2lkX3VzZWQsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IGVzNzAwMF9jaGVja19hcGljaWRfcHJlc2VudCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBlczcwMDBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS5pbml0X2FwaWNfbGRyCQkJPSBlczcwMDBfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gZXM3MDAwX2lvYXBpY19waHlzX2lkX21hcCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IGVzNzAwMF9zZXR1cF9hcGljX3JvdXRpbmcsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBlczcwMDBfYXBpY2lkX3RvX25vZGUsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBlczcwMDBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gZXM3MDAwX2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IGVzNzAwMF9hcGljaWRfdG9fY3B1X3ByZXNlbnQsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZXM3MDAwX2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gZXM3MDAwX2VuYWJsZV9hcGljX21vZGUsCisJLnBoeXNfcGtnX2lkCQkJPSBlczcwMDBfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IGVzNzAwMF9tcHNfb2VtX2NoZWNrLAorCisJLmdldF9hcGljX2lkCQkJPSBlczcwMDBfZ2V0X2FwaWNfaWQsCisJLnNldF9hcGljX2lkCQkJPSBOVUxMLAorCS5hcGljX2lkX21hc2sJCQk9IDB4RkYgPDwgMjQsCisKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGVzNzAwMF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0gZXM3MDAwX3NlbmRfSVBJX21hc2ssCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IE5VTEwsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0gZXM3MDAwX3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0gZXM3MDAwX3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0gZGVmYXVsdF9zZW5kX0lQSV9zZWxmLAorCisJLnRyYW1wb2xpbmVfcGh5c19sb3cJCT0gMHg0NjcsCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IDB4NDY5LAorCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gZXM3MDAwX3dhaXRfZm9yX2luaXRfZGVhc3NlcnQsCisKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciBtb3N0IHBsYXRmb3Jtcywgc2luY2UgY2xlYXJlZCBieSB0aGUgSU5JVCBjeWNsZTogKi8KKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBkZWZhdWx0X2lucXVpcmVfcmVtb3RlX2FwaWMsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlNjA3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMCwwICsxLDQxNjAgQEAKKy8qCisgKglJbnRlbCBJTy1BUElDIHN1cHBvcnQgZm9yIG11bHRpLVBlbnRpdW0gaG9zdHMuCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDA5IEluZ28gTW9sbmFyLCBIYWpuYWxrYSBTemFibworICoKKyAqCU1hbnkgdGhhbmtzIHRvIFN0aWcgVmVuYWFzIGZvciB0cnlpbmcgb3V0IGNvdW50bGVzcyBleHBlcmltZW50YWwKKyAqCXBhdGNoZXMgYW5kIHJlcG9ydGluZy9kZWJ1Z2dpbmcgcHJvYmxlbXMgcGF0aWVudGx5IQorICoKKyAqCShjKSAxOTk5LCBNdWx0aXBsZSBJTy1BUElDIHN1cHBvcnQsIGRldmVsb3BlZCBieQorICoJS2VuLWljaGkgWWFrdSA8eWFrdUBjc3MxLmtibmVzLm5lYy5jby5qcD4gYW5kCisgKiAgICAgIEhpZGVtaSBLaXNoaW1vdG8gPGtpc2ltb3RvQGNzczEua2JuZXMubmVjLmNvLmpwPiwKKyAqCWZ1cnRoZXIgdGVzdGVkIGFuZCBjbGVhbmVkIHVwIGJ5IFphY2ggQnJvd24gPHphYkByZWRoYXQuY29tPgorICoJYW5kIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoKKyAqCUZpeGVzCisgKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKKyAqCQkJCQl0aGFua3MgdG8gRXJpYyBHaWxtb3JlCisgKgkJCQkJYW5kIFJvbGYgRy4gVGV3cworICoJCQkJCWZvciB0ZXN0aW5nIHRoZXNlIGV4dGVuc2l2ZWx5CisgKglQYXVsIERpZWZlbmJhdWdoCToJQWRkZWQgZnVsbCBBQ1BJIHN1cHBvcnQKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpICovCisjaWZkZWYgQ09ORklHX0FDUEkKKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KKworI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lycV9yZW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXZfaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisjZGVmaW5lIF9fYXBpY2RlYnVnaW5pdCh0eXBlKSBzdGF0aWMgdHlwZSBfX2luaXQKKworLyoKKyAqICAgICAgSXMgdGhlIFNpUyBBUElDIHJtdyBidWcgcHJlc2VudCA/CisgKiAgICAgIC0xID0gZG9uJ3Qga25vdywgMCA9IG5vLCAxID0geWVzCisgKi8KK2ludCBzaXNfYXBpY19idWcgPSAtMTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKKworLyoKKyAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCisgKi8KK2ludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107CisKKy8qIEkvTyBBUElDIGVudHJpZXMgKi8KK3N0cnVjdCBtcGNfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKK2ludCBucl9pb2FwaWNzOworCisvKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK3N0cnVjdCBtcGNfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKKworLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2ludCBtcF9pcnFfZW50cmllczsKKworI2lmIGRlZmluZWQgKENPTkZJR19NQ0EpIHx8IGRlZmluZWQgKENPTkZJR19FSVNBKQoraW50IG1wX2J1c19pZF90b190eXBlW01BWF9NUF9CVVNTRVNdOworI2VuZGlmCisKK0RFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKKworaW50IHNraXBfaW9hcGljX3NldHVwOworCit2b2lkIGFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlub2lvYXBpY3F1aXJrID0gMTsKKwlub2lvYXBpY3Jlcm91dGUgPSAtMTsKKyNlbmRpZgorCXNraXBfaW9hcGljX3NldHVwID0gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKnN0cikKK3sKKwkvKiBkaXNhYmxlIElPLUFQSUMgKi8KKwlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOworCitzdHJ1Y3QgaXJxX3Bpbl9saXN0OworCisvKgorICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCisgKgorICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncworICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgorICovCisKK3N0cnVjdCBpcnFfcGluX2xpc3QgeworCWludCBhcGljLCBwaW47CisJc3RydWN0IGlycV9waW5fbGlzdCAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpnZXRfb25lX2ZyZWVfaXJxXzJfcGluKGludCBjcHUpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqcGluOworCWludCBub2RlOworCisJbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisKKwlwaW4gPSBremFsbG9jX25vZGUoc2l6ZW9mKCpwaW4pLCBHRlBfQVRPTUlDLCBub2RlKTsKKworCXJldHVybiBwaW47Cit9CisKK3N0cnVjdCBpcnFfY2ZnIHsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW47CisJY3B1bWFza192YXJfdCBkb21haW47CisJY3B1bWFza192YXJfdCBvbGRfZG9tYWluOworCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKKwl1OCB2ZWN0b3I7CisJdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7CisjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQworCXU4IG1vdmVfZGVzY19wZW5kaW5nIDogMTsKKyNlbmRpZgorfTsKKworLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W10gPSB7CisjZWxzZQorc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdID0geworI2VuZGlmCisJWzBdICA9IHsgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKKwlbMV0gID0geyAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAorCVsyXSAgPSB7IC52ZWN0b3IgPSBJUlEyX1ZFQ1RPUiwgIH0sCisJWzNdICA9IHsgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKKwlbNF0gID0geyAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAorCVs1XSAgPSB7IC52ZWN0b3IgPSBJUlE1X1ZFQ1RPUiwgIH0sCisJWzZdICA9IHsgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKKwlbN10gID0geyAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAorCVs4XSAgPSB7IC52ZWN0b3IgPSBJUlE4X1ZFQ1RPUiwgIH0sCisJWzldICA9IHsgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKKwlbMTBdID0geyAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAorCVsxMV0gPSB7IC52ZWN0b3IgPSBJUlExMV9WRUNUT1IsIH0sCisJWzEyXSA9IHsgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKKwlbMTNdID0geyAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAorCVsxNF0gPSB7IC52ZWN0b3IgPSBJUlExNF9WRUNUT1IsIH0sCisJWzE1XSA9IHsgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKK307CisKK2ludCBfX2luaXQgYXJjaF9lYXJseV9pcnFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBjb3VudDsKKwlpbnQgaTsKKworCWNmZyA9IGlycV9jZmd4OworCWNvdW50ID0gQVJSQVlfU0laRShpcnFfY2ZneCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisJCWRlc2MtPmNoaXBfZGF0YSA9ICZjZmdbaV07CisJCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNmZ1tpXS5kb21haW4pOworCQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjZmdbaV0ub2xkX2RvbWFpbik7CisJCWlmIChpIDwgTlJfSVJRU19MRUdBQ1kpCisJCQljcHVtYXNrX3NldGFsbChjZmdbaV0uZG9tYWluKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCitzdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gTlVMTDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAoZGVzYykKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCisJcmV0dXJuIGNmZzsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2ZnICpnZXRfb25lX2ZyZWVfaXJxX2NmZyhpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IG5vZGU7CisKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKworCWNmZyA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmNmZyksIEdGUF9BVE9NSUMsIG5vZGUpOworCWlmIChjZmcpIHsKKwkJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcl9ub2RlKCZjZmctPmRvbWFpbiwgR0ZQX0FUT01JQywgbm9kZSkpIHsKKwkJCWtmcmVlKGNmZyk7CisJCQljZmcgPSBOVUxMOworCQl9IGVsc2UgaWYgKCFhbGxvY19jcHVtYXNrX3Zhcl9ub2RlKCZjZmctPm9sZF9kb21haW4sCisJCQkJCQkJICBHRlBfQVRPTUlDLCBub2RlKSkgeworCQkJZnJlZV9jcHVtYXNrX3ZhcihjZmctPmRvbWFpbik7CisJCQlrZnJlZShjZmcpOworCQkJY2ZnID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWNwdW1hc2tfY2xlYXIoY2ZnLT5kb21haW4pOworCQkJY3B1bWFza19jbGVhcihjZmctPm9sZF9kb21haW4pOworCQl9CisJfQorCisJcmV0dXJuIGNmZzsKK30KKworaW50IGFyY2hfaW5pdF9jaGlwX2RhdGEoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJaWYgKCFjZmcpIHsKKwkJZGVzYy0+Y2hpcF9kYXRhID0gZ2V0X29uZV9mcmVlX2lycV9jZmcoY3B1KTsKKwkJaWYgKCFkZXNjLT5jaGlwX2RhdGEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfY2ZnXG4iKTsKKwkJCUJVR19PTigxKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQworCitzdGF0aWMgdm9pZAoraW5pdF9jb3B5X2lycV8yX3BpbihzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZywgc3RydWN0IGlycV9jZmcgKmNmZywgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpvbGRfZW50cnksICpoZWFkLCAqdGFpbCwgKmVudHJ5OworCisJY2ZnLT5pcnFfMl9waW4gPSBOVUxMOworCW9sZF9lbnRyeSA9IG9sZF9jZmctPmlycV8yX3BpbjsKKwlpZiAoIW9sZF9lbnRyeSkKKwkJcmV0dXJuOworCisJZW50cnkgPSBnZXRfb25lX2ZyZWVfaXJxXzJfcGluKGNwdSk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCisJZW50cnktPmFwaWMJPSBvbGRfZW50cnktPmFwaWM7CisJZW50cnktPnBpbgk9IG9sZF9lbnRyeS0+cGluOworCWhlYWQJCT0gZW50cnk7CisJdGFpbAkJPSBlbnRyeTsKKwlvbGRfZW50cnkJPSBvbGRfZW50cnktPm5leHQ7CisJd2hpbGUgKG9sZF9lbnRyeSkgeworCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oY3B1KTsKKwkJaWYgKCFlbnRyeSkgeworCQkJZW50cnkgPSBoZWFkOworCQkJd2hpbGUgKGVudHJ5KSB7CisJCQkJaGVhZCA9IGVudHJ5LT5uZXh0OworCQkJCWtmcmVlKGVudHJ5KTsKKwkJCQllbnRyeSA9IGhlYWQ7CisJCQl9CisJCQkvKiBzdGlsbCB1c2UgdGhlIG9sZCBvbmUgKi8KKwkJCXJldHVybjsKKwkJfQorCQllbnRyeS0+YXBpYwk9IG9sZF9lbnRyeS0+YXBpYzsKKwkJZW50cnktPnBpbgk9IG9sZF9lbnRyeS0+cGluOworCQl0YWlsLT5uZXh0CT0gZW50cnk7CisJCXRhaWwJCT0gZW50cnk7CisJCW9sZF9lbnRyeQk9IG9sZF9lbnRyeS0+bmV4dDsKKwl9CisKKwl0YWlsLT5uZXh0ID0gTlVMTDsKKwljZmctPmlycV8yX3BpbiA9IGhlYWQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfaXJxXzJfcGluKHN0cnVjdCBpcnFfY2ZnICpvbGRfY2ZnLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQoreworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5LCAqbmV4dDsKKworCWlmIChvbGRfY2ZnLT5pcnFfMl9waW4gPT0gY2ZnLT5pcnFfMl9waW4pCisJCXJldHVybjsKKworCWVudHJ5ID0gb2xkX2NmZy0+aXJxXzJfcGluOworCisJd2hpbGUgKGVudHJ5KSB7CisJCW5leHQgPSBlbnRyeS0+bmV4dDsKKwkJa2ZyZWUoZW50cnkpOworCQllbnRyeSA9IG5leHQ7CisJfQorCW9sZF9jZmctPmlycV8yX3BpbiA9IE5VTEw7Cit9CisKK3ZvaWQgYXJjaF9pbml0X2NvcHlfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCisJCQkJIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfY2ZnICpvbGRfY2ZnOworCisJY2ZnID0gZ2V0X29uZV9mcmVlX2lycV9jZmcoY3B1KTsKKworCWlmICghY2ZnKQorCQlyZXR1cm47CisKKwlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CisKKwlvbGRfY2ZnID0gb2xkX2Rlc2MtPmNoaXBfZGF0YTsKKworCW1lbWNweShjZmcsIG9sZF9jZmcsIHNpemVvZihzdHJ1Y3QgaXJxX2NmZykpOworCisJaW5pdF9jb3B5X2lycV8yX3BpbihvbGRfY2ZnLCBjZmcsIGNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfaXJxX2NmZyhzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZykKK3sKKwlrZnJlZShvbGRfY2ZnKTsKK30KKwordm9pZCBhcmNoX2ZyZWVfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZywgKmNmZzsKKworCW9sZF9jZmcgPSBvbGRfZGVzYy0+Y2hpcF9kYXRhOworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCWlmIChvbGRfY2ZnID09IGNmZykKKwkJcmV0dXJuOworCisJaWYgKG9sZF9jZmcpIHsKKwkJZnJlZV9pcnFfMl9waW4ob2xkX2NmZywgY2ZnKTsKKwkJZnJlZV9pcnFfY2ZnKG9sZF9jZmcpOworCQlvbGRfZGVzYy0+Y2hpcF9kYXRhID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfZXh0cmFfbW92ZV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCWlmICghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7CisJCS8qIGl0IG1lYW5zIHRoYXQgZG9tYWluIGlzIG5vdCBjaGFuZ2VkICovCisJCWlmICghY3B1bWFza19pbnRlcnNlY3RzKGRlc2MtPmFmZmluaXR5LCBtYXNrKSkKKwkJCWNmZy0+bW92ZV9kZXNjX3BlbmRpbmcgPSAxOworCX0KK30KKyNlbmRpZgorCisjZWxzZQorc3RhdGljIHN0cnVjdCBpcnFfY2ZnICppcnFfY2ZnKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGlycSA8IG5yX2lycXMgPyBpcnFfY2ZneCArIGlycSA6IE5VTEw7Cit9CisKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2V4dHJhX21vdmVfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworfQorI2VuZGlmCisKK3N0cnVjdCBpb19hcGljIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHVudXNlZFszXTsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKK307CisKK3N0YXRpYyBfX2F0dHJpYnV0ZV9jb25zdF9fIHN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWNfYmFzZShpbnQgaWR4KQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopIF9fZml4X3RvX3ZpcnQoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4KQorCQkrIChtcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIgJiB+UEFHRV9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKKwlyZXR1cm4gcmVhZGwoJmlvX2FwaWMtPmRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKKwl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKK30KKworLyoKKyAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCisgKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgorICoKKyAqIE9sZGVyIFNpUyBBUElDIHJlcXVpcmVzIHdlIHJld3JpdGUgdGhlIGluZGV4IHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisKKwlpZiAoc2lzX2FwaWNfYnVnKQorCQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOworfQorCitzdGF0aWMgYm9vbCBpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKHN0cnVjdCBpcnFfY2ZnICpjZmcpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBpbnQgcmVnOworCQlpbnQgcGluOworCisJCWlmICghZW50cnkpCisJCQlicmVhazsKKwkJcGluID0gZW50cnktPnBpbjsKKwkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgcGluKjIpOworCQkvKiBJcyB0aGUgcmVtb3RlIElSUiBiaXQgc2V0PyAqLworCQlpZiAocmVnICYgSU9fQVBJQ19SRURJUl9SRU1PVEVfSVJSKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKCFlbnRyeS0+bmV4dCkKKwkJCWJyZWFrOworCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGZhbHNlOworfQorCit1bmlvbiBlbnRyeV91bmlvbiB7CisJc3RydWN0IHsgdTMyIHcxLCB3MjsgfTsKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBpb2FwaWNfcmVhZF9lbnRyeShpbnQgYXBpYywgaW50IHBpbikKK3sKKwl1bmlvbiBlbnRyeV91bmlvbiBldTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWV1LncxID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyAyICogcGluKTsKKwlldS53MiA9IGlvX2FwaWNfcmVhZChhcGljLCAweDExICsgMiAqIHBpbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXUuZW50cnk7Cit9CisKKy8qCisgKiBXaGVuIHdlIHdyaXRlIGEgbmV3IElPIEFQSUMgcm91dGluZyBlbnRyeSwgd2UgbmVlZCB0byB3cml0ZSB0aGUgaGlnaAorICogd29yZCBmaXJzdCEgSWYgdGhlIG1hc2sgYml0IGluIHRoZSBsb3cgd29yZCBpcyBjbGVhciwgd2Ugd2lsbCBlbmFibGUKKyAqIHRoZSBpbnRlcnJ1cHQsIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW50cnkgaXMgZnVsbHkgcG9wdWxhdGVkCisgKiBiZWZvcmUgdGhhdCBoYXBwZW5zLgorICovCitzdGF0aWMgdm9pZAorX19pb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCit7CisJdW5pb24gZW50cnlfdW5pb24gZXU7CisJZXUuZW50cnkgPSBlOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7CisJaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKK30KKwordm9pZCBpb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX2lvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBXaGVuIHdlIG1hc2sgYW4gSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsb3cKKyAqIHdvcmQgZmlyc3QsIGluIG9yZGVyIHRvIHNldCB0aGUgbWFzayBiaXQgYmVmb3JlIHdlIGNoYW5nZSB0aGUKKyAqIGhpZ2ggYml0cyEKKyAqLworc3RhdGljIHZvaWQgaW9hcGljX21hc2tfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bmlvbiBlbnRyeV91bmlvbiBldSA9IHsgLmVudHJ5Lm1hc2sgPSAxIH07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIHNlbmRfY2xlYW51cF92ZWN0b3Ioc3RydWN0IGlycV9jZmcgKmNmZykKK3sKKwljcHVtYXNrX3Zhcl90IGNsZWFudXBfbWFzazsKKworCWlmICh1bmxpa2VseSghYWxsb2NfY3B1bWFza192YXIoJmNsZWFudXBfbWFzaywgR0ZQX0FUT01JQykpKSB7CisJCXVuc2lnbmVkIGludCBpOworCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IDA7CisJCWZvcl9lYWNoX2NwdV9hbmQoaSwgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spCisJCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCsrOworCQlmb3JfZWFjaF9jcHVfYW5kKGksIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXNrKQorCQkJYXBpYy0+c2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGkpLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CisJfSBlbHNlIHsKKwkJY3B1bWFza19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFzayk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1bWFza193ZWlnaHQoY2xlYW51cF9tYXNrKTsKKwkJYXBpYy0+c2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJZnJlZV9jcHVtYXNrX3ZhcihjbGVhbnVwX21hc2spOworCX0KKwljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBfX3RhcmdldF9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZGVzdCwgc3RydWN0IGlycV9jZmcgKmNmZykKK3sKKwlpbnQgYXBpYywgcGluOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OworCXU4IHZlY3RvciA9IGNmZy0+dmVjdG9yOworCisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGludCByZWc7CisKKwkJaWYgKCFlbnRyeSkKKwkJCWJyZWFrOworCisJCWFwaWMgPSBlbnRyeS0+YXBpYzsKKwkJcGluID0gZW50cnktPnBpbjsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQkvKgorCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCisJCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KKwkJICovCisJCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCisJCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7CisjZWxzZQorCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7CisjZW5kaWYKKwkJcmVnID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyBwaW4qMik7CisJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKKwkJcmVnIHw9IHZlY3RvcjsKKwkJaW9fYXBpY19tb2RpZnkoYXBpYywgMHgxMCArIHBpbioyLCByZWcpOworCQlpZiAoIWVudHJ5LT5uZXh0KQorCQkJYnJlYWs7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW50Cithc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CisKKy8qCisgKiBFaXRoZXIgc2V0cyBkZXNjLT5hZmZpbml0eSB0byBhIHZhbGlkIHZhbHVlLCBhbmQgcmV0dXJucworICogLT5jcHVfbWFza190b19hcGljaWQgb2YgdGhhdCwgb3IgcmV0dXJucyBCQURfQVBJQ0lEIGFuZAorICogbGVhdmVzIGRlc2MtPmFmZmluaXR5IHVudG91Y2hlZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludAorc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhtYXNrLCBjcHVfb25saW5lX21hc2spKQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKKworCWlycSA9IGRlc2MtPmlycTsKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKSkKKwkJcmV0dXJuIEJBRF9BUElDSUQ7CisKKwljcHVtYXNrX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4sIG1hc2spOworCXNldF9leHRyYV9tb3ZlX2Rlc2MoZGVzYywgbWFzayk7CisKKwlyZXR1cm4gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKTsKK30KKworc3RhdGljIHZvaWQKK3NldF9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlycSA9IGRlc2MtPmlycTsKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7CisJaWYgKGRlc3QgIT0gQkFEX0FQSUNJRCkgeworCQkvKiBPbmx5IHRoZSBoaWdoIDggYml0cyBhcmUgdmFsaWQuICovCisJCWRlc3QgPSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGRlc3QpOworCQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2MoZGVzYywgbWFzayk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKgorICogVGhlIGNvbW1vbiBjYXNlIGlzIDE6MSBJUlE8LT5waW4gbWFwcGluZ3MuIFNvbWV0aW1lcyB0aGVyZSBhcmUKKyAqIHNoYXJlZCBJU0Etc3BhY2UgSVJRcywgc28gd2UgaGF2ZSB0byBzdXBwb3J0IHRoZW0uIFdlIGFyZSBzdXBlcgorICogZmFzdCBpbiB0aGUgY29tbW9uIGNhc2UsIGFuZCBmYXN0IGZvciBzaGFyZWQgSVNBLXNwYWNlIElSUXMuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9waW5fdG9faXJxX2NwdShzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBpbnQgY3B1LCBpbnQgYXBpYywgaW50IHBpbikKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJaWYgKCFlbnRyeSkgeworCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oY3B1KTsKKwkJaWYgKCFlbnRyeSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jIGlycV8yX3BpbiB0byBhZGQgJWQgLSAlZFxuIiwKKwkJCQkJYXBpYywgcGluKTsKKwkJCXJldHVybjsKKwkJfQorCQljZmctPmlycV8yX3BpbiA9IGVudHJ5OworCQllbnRyeS0+YXBpYyA9IGFwaWM7CisJCWVudHJ5LT5waW4gPSBwaW47CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoZW50cnktPm5leHQpIHsKKwkJLyogbm90IGFnYWluLCBwbGVhc2UgKi8KKwkJaWYgKGVudHJ5LT5hcGljID09IGFwaWMgJiYgZW50cnktPnBpbiA9PSBwaW4pCisJCQlyZXR1cm47CisKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisKKwllbnRyeS0+bmV4dCA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oY3B1KTsKKwllbnRyeSA9IGVudHJ5LT5uZXh0OworCWVudHJ5LT5hcGljID0gYXBpYzsKKwllbnRyeS0+cGluID0gcGluOworfQorCisvKgorICogUmVyb3V0ZSBhbiBJUlEgdG8gYSBkaWZmZXJlbnQgcGluLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcmVwbGFjZV9waW5fYXRfaXJxX2NwdShzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBpbnQgY3B1LAorCQkJCSAgICAgIGludCBvbGRhcGljLCBpbnQgb2xkcGluLAorCQkJCSAgICAgIGludCBuZXdhcGljLCBpbnQgbmV3cGluKQoreworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJaW50IHJlcGxhY2VkID0gMDsKKworCXdoaWxlIChlbnRyeSkgeworCQlpZiAoZW50cnktPmFwaWMgPT0gb2xkYXBpYyAmJiBlbnRyeS0+cGluID09IG9sZHBpbikgeworCQkJZW50cnktPmFwaWMgPSBuZXdhcGljOworCQkJZW50cnktPnBpbiA9IG5ld3BpbjsKKwkJCXJlcGxhY2VkID0gMTsKKwkJCS8qIGV2ZXJ5IG9uZSBpcyBkaWZmZXJlbnQsIHJpZ2h0PyAqLworCQkJYnJlYWs7CisJCX0KKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisKKwkvKiB3aHk/IGNhbGwgcmVwbGFjZSBiZWZvcmUgYWRkPyAqLworCWlmICghcmVwbGFjZWQpCisJCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgbmV3YXBpYywgbmV3cGluKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5X2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnLAorCQkJCWludCBtYXNrX2FuZCwgaW50IG1hc2tfb3IsCisJCQkJdm9pZCAoKmZpbmFsKShzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkpCit7CisJaW50IHBpbjsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCWZvciAoZW50cnkgPSBjZmctPmlycV8yX3BpbjsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworCQl1bnNpZ25lZCBpbnQgcmVnOworCQlwaW4gPSBlbnRyeS0+cGluOworCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4gKiAyKTsKKwkJcmVnICY9IG1hc2tfYW5kOworCQlyZWcgfD0gbWFza19vcjsKKwkJaW9fYXBpY19tb2RpZnkoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4gKiAyLCByZWcpOworCQlpZiAoZmluYWwpCisJCQlmaW5hbChlbnRyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX3VubWFza19JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH5JT19BUElDX1JFRElSX01BU0tFRCwgMCwgTlVMTCk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgdm9pZCBpb19hcGljX3N5bmMoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpCit7CisJLyoKKwkgKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZworCSAqIGEgZHVtbXkgcmVhZCBmcm9tIHRoZSBJTy1BUElDCisJICovCisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYzsKKwlpb19hcGljID0gaW9fYXBpY19iYXNlKGVudHJ5LT5hcGljKTsKKwlyZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7Cit9CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCitzdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoY2ZnLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoY2ZnLCB+SU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLAorCQkJSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoY2ZnLCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsCisJCQlJT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsIE5VTEwpOworfQorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworc3RhdGljIHZvaWQgbWFza19JT19BUElDX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oIWNmZyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX21hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJX191bm1hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCW1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKK30KK3N0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQ19waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4pCit7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkvKiBDaGVjayBkZWxpdmVyeV9tb2RlIHRvIGJlIHN1cmUgd2UncmUgbm90IGNsZWFyaW5nIGFuIFNNSSBwaW4gKi8KKwllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7CisJaWYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9TTUkpCisJCXJldHVybjsKKwkvKgorCSAqIERpc2FibGUgaXQgaW4gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CisJICovCisJaW9hcGljX21hc2tfZW50cnkoYXBpYywgcGluKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQyAodm9pZCkKK3sKKwlpbnQgYXBpYywgcGluOworCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKKwkJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogc3VwcG9ydCBmb3IgYnJva2VuIE1QIEJJT1NzLCBlbmFibGVzIGhhbmQtcmVkaXJlY3Rpb24gb2YgUElSUTAtNyB0bworICogc3BlY2lmaWMgQ1BVLXNpZGUgSVJRcy4KKyAqLworCisjZGVmaW5lIE1BWF9QSVJRUyA4CitzdGF0aWMgaW50IHBpcnFfZW50cmllc1tNQVhfUElSUVNdID0geworCVswIC4uLiBNQVhfUElSUVMgLSAxXSA9IC0xCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfcGlycV9zZXR1cChjaGFyICpzdHIpCit7CisJaW50IGksIG1heDsKKwlpbnQgaW50c1tNQVhfUElSUVMrMV07CisKKwlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSJQSVJRIHJlZGlyZWN0aW9uLCB3b3JraW5nIGFyb3VuZCBicm9rZW4gTVAtQklPUy5cbiIpOworCW1heCA9IE1BWF9QSVJRUzsKKwlpZiAoaW50c1swXSA8IE1BWF9QSVJRUykKKwkJbWF4ID0gaW50c1swXTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKKwkJCQkiLi4uIFBJUlElZCAtPiBJUlEgJWRcbiIsIGksIGludHNbaSsxXSk7CisJCS8qCisJCSAqIFBJUlFzIGFyZSBtYXBwZWQgdXBzaWRlIGRvd24sIHVzdWFsbHkuCisJCSAqLworCQlwaXJxX2VudHJpZXNbTUFYX1BJUlFTLWktMV0gPSBpbnRzW2krMV07CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJwaXJxPSIsIGlvYXBpY19waXJxX3NldHVwKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyogSS9PIEFQSUMgUlRFIGNvbnRlbnRzIGF0IHRoZSBPUyBib290IHVwICovCitzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107CisKKy8qCisgKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCisgKi8KK2ludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBhcGljLCBwaW47CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6CisJICovCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKKwl9CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KSAqCisJCQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCisJCQlnb3RvIG5vbWVtOworCX0KKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisJCQllbnRyeSA9IGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQorCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7CisJCQlpZiAoIWVudHJ5Lm1hc2spIHsKKwkJCQllbnRyeS5tYXNrID0gMTsKKwkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CisJCQl9CisJCX0KKworCXJldHVybiAwOworCitub21lbToKKwl3aGlsZSAoYXBpYyA+PSAwKQorCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljLS1dKTsKKwltZW1zZXQoZWFybHlfaW9hcGljX2VudHJpZXMsIDAsCisJCUFSUkFZX1NJWkUoZWFybHlfaW9hcGljX2VudHJpZXMpKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKQoreworCWludCBhcGljLCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCisJCQlicmVhazsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKKwkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sCisJCQkJCSAgIGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0pOworCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSk7CisJCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyhpbnQgaW50cl9yZW1hcHBpbmcpCit7CisJLyoKKwkgKiBmb3Igbm93IHBsYWluIHJlc3RvcmUgb2YgcHJldmlvdXMgc2V0dGluZ3MuCisJICogVEJEOiBJbiB0aGUgY2FzZSBvZiBPUyBlbmFibGluZyBpbnRlcnJ1cHQtcmVtYXBwaW5nLAorCSAqIElPLUFQSUMgUlRFJ3MgbmVlZCB0byBiZSBzZXR1cCB0byBwb2ludCB0byBpbnRlcnJ1cHQtcmVtYXBwaW5nCisJICogdGFibGUgZW50cmllcy4gZm9yIG5vdywgZG8gYSBwbGFpbiByZXN0b3JlLCBhbmQgd2FpdCBmb3IKKwkgKiB0aGUgc2V0dXBfSU9fQVBJQ19pcnFzKCkgdG8gZG8gcHJvcGVyIGluaXRpYWxpemF0aW9uLgorCSAqLworCXJlc3RvcmVfSU9fQVBJQ19zZXR1cCgpOworfQorI2VuZGlmCisKKy8qCisgKiBGaW5kIHRoZSBJUlEgZW50cnkgbnVtYmVyIG9mIGEgY2VydGFpbiBwaW4uCisgKi8KK3N0YXRpYyBpbnQgZmluZF9pcnFfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIGludCB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCisJCWlmIChtcF9pcnFzW2ldLmlycXR5cGUgPT0gdHlwZSAmJgorCQkgICAgKG1wX2lycXNbaV0uZHN0YXBpYyA9PSBtcF9pb2FwaWNzW2FwaWNdLmFwaWNpZCB8fAorCQkgICAgIG1wX2lycXNbaV0uZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkgJiYKKwkJICAgIG1wX2lycXNbaV0uZHN0aXJxID09IHBpbikKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogRmluZCB0aGUgcGluIHRvIHdoaWNoIElSUVtpcnFdIChJU0EpIGlzIGNvbm5lY3RlZAorICovCitzdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfcGluKGludCBpcnEsIGludCB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKKwkJaW50IGxidXMgPSBtcF9pcnFzW2ldLnNyY2J1czsKKworCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCisJCSAgICAobXBfaXJxc1tpXS5pcnF0eXBlID09IHR5cGUpICYmCisJCSAgICAobXBfaXJxc1tpXS5zcmNidXNpcnEgPT0gaXJxKSkKKworCQkJcmV0dXJuIG1wX2lycXNbaV0uZHN0aXJxOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9hcGljKGludCBpcnEsIGludCB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKKwkJaW50IGxidXMgPSBtcF9pcnFzW2ldLnNyY2J1czsKKworCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCisJCSAgICAobXBfaXJxc1tpXS5pcnF0eXBlID09IHR5cGUpICYmCisJCSAgICAobXBfaXJxc1tpXS5zcmNidXNpcnEgPT0gaXJxKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA8IG1wX2lycV9lbnRyaWVzKSB7CisJCWludCBhcGljOworCQlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLmFwaWNpZCA9PSBtcF9pcnFzW2ldLmRzdGFwaWMpCisJCQkJcmV0dXJuIGFwaWM7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBGaW5kIGEgc3BlY2lmaWMgUENJIElSUSBlbnRyeS4KKyAqIE5vdCBhbiBfX2luaXQsIHBvc3NpYmx5IG5lZWRlZCBieSBtb2R1bGVzCisgKi8KK3N0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKTsKKworaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBzbG90LCBpbnQgcGluKQoreworCWludCBhcGljLCBpLCBiZXN0X2d1ZXNzID0gLTE7CisKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAicXVlcnlpbmcgUENJIC0+IElSUSBtYXBwaW5nIGJ1czolZCwgc2xvdDolZCwgcGluOiVkLlxuIiwKKwkJYnVzLCBzbG90LCBwaW4pOworCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJQQ0kgQklPUyBwYXNzZWQgbm9uZXhpc3RlbnQgUENJIGJ1cyAlZCFcbiIsIGJ1cyk7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKKwkJaW50IGxidXMgPSBtcF9pcnFzW2ldLnNyY2J1czsKKworCQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQorCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10uYXBpY2lkID09IG1wX2lycXNbaV0uZHN0YXBpYyB8fAorCQkJICAgIG1wX2lycXNbaV0uZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkKKwkJCQlicmVhazsKKworCQlpZiAoIXRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgorCQkgICAgIW1wX2lycXNbaV0uaXJxdHlwZSAmJgorCQkgICAgKGJ1cyA9PSBsYnVzKSAmJgorCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLnNyY2J1c2lycSA+PiAyKSAmIDB4MWYpKSkgeworCQkJaW50IGlycSA9IHBpbl8yX2lycShpLCBhcGljLCBtcF9pcnFzW2ldLmRzdGlycSk7CisKKwkJCWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0uc3JjYnVzaXJxICYgMykpCisJCQkJcmV0dXJuIGlycTsKKwkJCS8qCisJCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKKwkJCSAqIGJlc3QtZ3Vlc3MgZnV6enkgcmVzdWx0IGZvciBicm9rZW4gbXB0YWJsZXMuCisJCQkgKi8KKwkJCWlmIChiZXN0X2d1ZXNzIDwgMCkKKwkJCQliZXN0X2d1ZXNzID0gaXJxOworCQl9CisJfQorCXJldHVybiBiZXN0X2d1ZXNzOworfQorCitFWFBPUlRfU1lNQk9MKElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKKy8qCisgKiBFSVNBIEVkZ2UvTGV2ZWwgY29udHJvbCByZWdpc3RlciwgRUxDUgorICovCitzdGF0aWMgaW50IEVJU0FfRUxDUih1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPCBOUl9JUlFTX0xFR0FDWSkgeworCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDB4NGQwICsgKGlycSA+PiAzKTsKKwkJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7CisJfQorCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiQnJva2VuIE1QdGFibGUgcmVwb3J0cyBJU0EgaXJxICVkXG4iLCBpcnEpOworCXJldHVybiAwOworfQorCisjZW5kaWYKKworLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAorICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCisKKyNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQorI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQorCisvKiBFSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGFuZCBjYW4gYmUgZWRnZSBvciBsZXZlbAorICogdHJpZ2dlciBkZXBlbmRpbmcgb24gdGhlIEVMQ1IgdmFsdWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbGlzdGVkIGFzCisgKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAorICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCisKKyNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5zcmNidXNpcnEpKQorI2RlZmluZSBkZWZhdWx0X0VJU0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKKy8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKKworLyogTUNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKK3N0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCit7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5zcmNidXM7CisJaW50IHBvbGFyaXR5OworCisJLyoKKwkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOgorCSAqLworCXN3aXRjaCAobXBfaXJxc1tpZHhdLmlycWZsYWcgJiAzKQorCXsKKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0eSAqLworCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KTsKKwkJCWVsc2UKKwkJCQlwb2xhcml0eSA9IGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCk7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLworCQl7CisJCQlwb2xhcml0eSA9IDA7CisJCQlicmVhazsKKwkJfQorCQljYXNlIDI6IC8qIHJlc2VydmVkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJcG9sYXJpdHkgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAzOiAvKiBsb3cgYWN0aXZlICovCisJCXsKKwkJCXBvbGFyaXR5ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6IC8qIGludmFsaWQgKi8KKwkJeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQlwb2xhcml0eSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcG9sYXJpdHk7Cit9CisKK3N0YXRpYyBpbnQgTVBCSU9TX3RyaWdnZXIoaW50IGlkeCkKK3sKKwlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLnNyY2J1czsKKwlpbnQgdHJpZ2dlcjsKKworCS8qCisJICogRGV0ZXJtaW5lIElSUSB0cmlnZ2VyIG1vZGUgKGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlKToKKwkgKi8KKwlzd2l0Y2ggKChtcF9pcnFzW2lkeF0uaXJxZmxhZz4+MikgJiAzKQorCXsKKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCAqLworCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCk7CisJCQllbHNlCisJCQkJdHJpZ2dlciA9IGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KTsKKyNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCisJCQlzd2l0Y2ggKG1wX2J1c19pZF90b190eXBlW2J1c10pIHsKKwkJCQljYXNlIE1QX0JVU19JU0E6IC8qIElTQSBwaW4gKi8KKwkJCQl7CisJCQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfRUlTQTogLyogRUlTQSBwaW4gKi8KKwkJCQl7CisJCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGluICovCisJCQkJeworCQkJCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNhc2UgTVBfQlVTX01DQTogLyogTUNBIHBpbiAqLworCQkJCXsKKwkJCQkJdHJpZ2dlciA9IGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKKwkJCQkJdHJpZ2dlciA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgMTogLyogZWRnZSAqLworCQl7CisJCQl0cmlnZ2VyID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KKwkJeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQl0cmlnZ2VyID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMzogLyogbGV2ZWwgKi8KKwkJeworCQkJdHJpZ2dlciA9IDE7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJdHJpZ2dlciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3BvbGFyaXR5KGludCBpZHgpCit7CisJcmV0dXJuIE1QQklPU19wb2xhcml0eShpZHgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdHJpZ2dlcihpbnQgaWR4KQoreworCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOworfQorCitpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKK3N0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQoreworCWludCBpcnEsIGk7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5zcmNidXM7CisKKwkvKgorCSAqIERlYnVnZ2luZyBjaGVjaywgd2UgYXJlIGluIGJpZyB0cm91YmxlIGlmIHRoaXMgbWVzc2FnZSBwb3BzIHVwIQorCSAqLworCWlmIChtcF9pcnFzW2lkeF0uZHN0aXJxICE9IHBpbikKKwkJcHJpbnRrKEtFUk5fRVJSICJicm9rZW4gQklPUyBvciBNUFRBQkxFIHBhcnNlciwgYXlpZWUhIVxuIik7CisKKwlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpIHsKKwkJaXJxID0gbXBfaXJxc1tpZHhdLnNyY2J1c2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQQ0kgSVJRcyBhcmUgbWFwcGVkIGluIG9yZGVyCisJCSAqLworCQlpID0gaXJxID0gMDsKKwkJd2hpbGUgKGkgPCBhcGljKQorCQkJaXJxICs9IG5yX2lvYXBpY19yZWdpc3RlcnNbaSsrXTsKKwkJaXJxICs9IHBpbjsKKwkJLyoKKyAgICAgICAgICAgICAgICAgKiBGb3IgTVBTIG1vZGUsIHNvIGZhciBvbmx5IG5lZWRlZCBieSBFUzcwMDAgcGxhdGZvcm0KKyAgICAgICAgICAgICAgICAgKi8KKwkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCisJCQlpcnEgPSBpb2FwaWNfcmVudW1iZXJfaXJxKGFwaWMsIGlycSk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogUENJIElSUSBjb21tYW5kIGxpbmUgcmVkaXJlY3Rpb24uIFllcywgbGltaXRzIGFyZSBoYXJkY29kZWQuCisJICovCisJaWYgKChwaW4gPj0gMTYpICYmIChwaW4gPD0gMjMpKSB7CisJCWlmIChwaXJxX2VudHJpZXNbcGluLTE2XSAhPSAtMSkgeworCQkJaWYgKCFwaXJxX2VudHJpZXNbcGluLTE2XSkgeworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJImRpc2FibGluZyBQSVJRJWRcbiIsIHBpbi0xNik7CisJCQl9IGVsc2UgeworCQkJCWlycSA9IHBpcnFfZW50cmllc1twaW4tMTZdOworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJInVzaW5nIFBJUlElZCAtPiBJUlEgJWRcbiIsCisJCQkJCQlwaW4tMTYsIGlycSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiBpcnE7Cit9CisKK3ZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKQoreworCS8qIFVzZWQgdG8gdGhlIG9ubGluZSBzZXQgb2YgY3B1cyBkb2VzIG5vdCBjaGFuZ2UKKwkgKiBkdXJpbmcgYXNzaWduX2lycV92ZWN0b3IuCisJICovCisJc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7Cit9CisKK3ZvaWQgdW5sb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCit7CisJc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKK30KKworc3RhdGljIGludAorX19hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwkvKgorCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZworCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgorCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCisJICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQorCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKKwkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCisJICoKKwkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQorCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQorCSAqLworCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SLCBjdXJyZW50X29mZnNldCA9IDA7CisJdW5zaWduZWQgaW50IG9sZF92ZWN0b3I7CisJaW50IGNwdSwgZXJyOworCWNwdW1hc2tfdmFyX3QgdG1wX21hc2s7CisKKwlpZiAoKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgfHwgY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXBfbWFzaywgR0ZQX0FUT01JQykpCisJCXJldHVybiAtRU5PTUVNOworCisJb2xkX3ZlY3RvciA9IGNmZy0+dmVjdG9yOworCWlmIChvbGRfdmVjdG9yKSB7CisJCWNwdW1hc2tfYW5kKHRtcF9tYXNrLCBtYXNrLCBjcHVfb25saW5lX21hc2spOworCQljcHVtYXNrX2FuZCh0bXBfbWFzaywgY2ZnLT5kb21haW4sIHRtcF9tYXNrKTsKKwkJaWYgKCFjcHVtYXNrX2VtcHR5KHRtcF9tYXNrKSkgeworCQkJZnJlZV9jcHVtYXNrX3Zhcih0bXBfbWFzayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIE9ubHkgdHJ5IGFuZCBhbGxvY2F0ZSBpcnFzIG9uIGNwdXMgdGhhdCBhcmUgcHJlc2VudCAqLworCWVyciA9IC1FTk9TUEM7CisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIG1hc2ssIGNwdV9vbmxpbmVfbWFzaykgeworCQlpbnQgbmV3X2NwdTsKKwkJaW50IHZlY3Rvciwgb2Zmc2V0OworCisJCWFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUsIHRtcF9tYXNrKTsKKworCQl2ZWN0b3IgPSBjdXJyZW50X3ZlY3RvcjsKKwkJb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQ7CituZXh0OgorCQl2ZWN0b3IgKz0gODsKKwkJaWYgKHZlY3RvciA+PSBmaXJzdF9zeXN0ZW1fdmVjdG9yKSB7CisJCQkvKiBJZiBvdXQgb2YgdmVjdG9ycyBvbiBsYXJnZSBib3hlbiwgbXVzdCBzaGFyZSB0aGVtLiAqLworCQkJb2Zmc2V0ID0gKG9mZnNldCArIDEpICUgODsKKwkJCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KGN1cnJlbnRfdmVjdG9yID09IHZlY3RvcikpCisJCQljb250aW51ZTsKKworCQlpZiAodGVzdF9iaXQodmVjdG9yLCB1c2VkX3ZlY3RvcnMpKQorCQkJZ290byBuZXh0OworCisJCWZvcl9lYWNoX2NwdV9hbmQobmV3X2NwdSwgdG1wX21hc2ssIGNwdV9vbmxpbmVfbWFzaykKKwkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gIT0gLTEpCisJCQkJZ290byBuZXh0OworCQkvKiBGb3VuZCBvbmUhICovCisJCWN1cnJlbnRfdmVjdG9yID0gdmVjdG9yOworCQljdXJyZW50X29mZnNldCA9IG9mZnNldDsKKwkJaWYgKG9sZF92ZWN0b3IpIHsKKwkJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDE7CisJCQljcHVtYXNrX2NvcHkoY2ZnLT5vbGRfZG9tYWluLCBjZmctPmRvbWFpbik7CisJCX0KKwkJZm9yX2VhY2hfY3B1X2FuZChuZXdfY3B1LCB0bXBfbWFzaywgY3B1X29ubGluZV9tYXNrKQorCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdID0gaXJxOworCQljZmctPnZlY3RvciA9IHZlY3RvcjsKKwkJY3B1bWFza19jb3B5KGNmZy0+ZG9tYWluLCB0bXBfbWFzayk7CisJCWVyciA9IDA7CisJCWJyZWFrOworCX0KKwlmcmVlX2NwdW1hc2tfdmFyKHRtcF9tYXNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Cithc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwllcnIgPSBfX2Fzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fY2xlYXJfaXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQoreworCWludCBjcHUsIHZlY3RvcjsKKworCUJVR19PTighY2ZnLT52ZWN0b3IpOworCisJdmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNmZy0+ZG9tYWluLCBjcHVfb25saW5lX21hc2spCisJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7CisKKwljZmctPnZlY3RvciA9IDA7CisJY3B1bWFza19jbGVhcihjZmctPmRvbWFpbik7CisKKwlpZiAobGlrZWx5KCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpKQorCQlyZXR1cm47CisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXNrKSB7CisJCWZvciAodmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOworCQkJCQkJCQl2ZWN0b3IrKykgeworCQkJaWYgKHBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdICE9IGlycSkKKwkJCQljb250aW51ZTsKKwkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KKwljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOworfQorCit2b2lkIF9fc2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KQoreworCS8qIEluaXRpYWxpemUgdmVjdG9yX2lycSBvbiBhIG5ldyBjcHUgKi8KKwkvKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdmVjdG9yX2xvY2sgaGVsZCAqLworCWludCBpcnEsIHZlY3RvcjsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCS8qIE1hcmsgdGhlIGludXNlIHZlY3RvcnMgKi8KKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjZmctPmRvbWFpbikpCisJCQljb250aW51ZTsKKwkJdmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gaXJxOworCX0KKwkvKiBNYXJrIHRoZSBmcmVlIHZlY3RvcnMgKi8KKwlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7ICsrdmVjdG9yKSB7CisJCWlycSA9IHBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdOworCQlpZiAoaXJxIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWNmZyA9IGlycV9jZmcoaXJxKTsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY2ZnLT5kb21haW4pKQorCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXA7CisjZW5kaWYKKworI2RlZmluZSBJT0FQSUNfQVVUTyAgICAgLTEKKyNkZWZpbmUgSU9BUElDX0VER0UgICAgIDAKKyNkZWZpbmUgSU9BUElDX0xFVkVMICAgIDEKKworI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBpbmxpbmUgaW50IElPX0FQSUNfaXJxX3RyaWdnZXIoaW50IGlycSkKK3sKKwlpbnQgYXBpYywgaWR4LCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCWlkeCA9IGZpbmRfaXJxX2VudHJ5KGFwaWMsIHBpbiwgbXBfSU5UKTsKKwkJCWlmICgoaWR4ICE9IC0xKSAmJiAoaXJxID09IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbikpKQorCQkJCXJldHVybiBpcnFfdHJpZ2dlcihpZHgpOworCQl9CisJfQorCS8qCisgICAgICAgICAqIG5vbmV4aXN0ZW50IElSUXMgYXJlIGVkZ2UgZGVmYXVsdAorICAgICAgICAgKi8KKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaW9hcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCit7CisKKwlpZiAoKHRyaWdnZXIgPT0gSU9BUElDX0FVVE8gJiYgSU9fQVBJQ19pcnFfdHJpZ2dlcihpcnEpKSB8fAorCSAgICB0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwllbHNlCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0xFVkVMOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKKwkJaWYgKHRyaWdnZXIpCisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcl9pb2FwaWNfY2hpcCwKKwkJCQkJCSAgICAgIGhhbmRsZV9mYXN0ZW9pX2lycSwKKwkJCQkJCSAgICAgImZhc3Rlb2kiKTsKKwkJZWxzZQorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaXJfaW9hcGljX2NoaXAsCisJCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoKHRyaWdnZXIgPT0gSU9BUElDX0FVVE8gJiYgSU9fQVBJQ19pcnFfdHJpZ2dlcihpcnEpKSB8fAorCSAgICB0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCisJCQkJCSAgICAgIGhhbmRsZV9mYXN0ZW9pX2lycSwKKwkJCQkJICAgICAgImZhc3Rlb2kiKTsKKwllbHNlCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAorCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Cit9CisKK2ludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWNfaWQsIGludCBpcnEsCisJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAorCQkgICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQoreworCS8qCisJICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCSAqLworCW1lbXNldChlbnRyeSwwLHNpemVvZigqZW50cnkpKTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKKwkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IG1hcF9pb2FwaWNfdG9faXIoYXBpY19pZCk7CisJCXN0cnVjdCBpcnRlIGlydGU7CisJCXN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5ICppcl9lbnRyeSA9CisJCQkoc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKikgZW50cnk7CisJCWludCBpbmRleDsKKworCQlpZiAoIWlvbW11KQorCQkJcGFuaWMoIk5vIG1hcHBpbmcgaW9tbXUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpY19pZCk7CisKKwkJaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIDEpOworCQlpZiAoaW5kZXggPCAwKQorCQkJcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBJUlRFIGZvciBpb2FwaWMgJWRcbiIsIGFwaWNfaWQpOworCisJCW1lbXNldCgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKKworCQlpcnRlLnByZXNlbnQgPSAxOworCQlpcnRlLmRzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKKwkJaXJ0ZS50cmlnZ2VyX21vZGUgPSB0cmlnZ2VyOworCQlpcnRlLmRsdnJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKKwkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7CisJCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7CisKKwkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwkJaXJfZW50cnktPmluZGV4MiA9IChpbmRleCA+PiAxNSkgJiAweDE7CisJCWlyX2VudHJ5LT56ZXJvID0gMDsKKwkJaXJfZW50cnktPmZvcm1hdCA9IDE7CisJCWlyX2VudHJ5LT5pbmRleCA9IChpbmRleCAmIDB4N2ZmZik7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CisJCWVudHJ5LT5kZXN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOworCQllbnRyeS0+ZGVzdCA9IGRlc3RpbmF0aW9uOworCX0KKworCWVudHJ5LT5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLworCWVudHJ5LT50cmlnZ2VyID0gdHJpZ2dlcjsKKwllbnRyeS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKKwllbnRyeS0+dmVjdG9yID0gdmVjdG9yOworCisJLyogTWFzayBsZXZlbCB0cmlnZ2VyZWQgaXJxcy4KKwkgKiBVc2UgSVJRX0RFTEFZRURfRElTQUJMRSBmb3IgZWRnZSB0cmlnZ2VyZWQgaXJxcy4KKwkgKi8KKwlpZiAodHJpZ2dlcikKKwkJZW50cnktPm1hc2sgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9JT19BUElDX2lycShpbnQgYXBpY19pZCwgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJICAgICAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCXVuc2lnbmVkIGludCBkZXN0OworCisJaWYgKCFJT19BUElDX0lSUShpcnEpKQorCQlyZXR1cm47CisKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpKQorCQlyZXR1cm47CisKKwlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsS0VSTl9ERUJVRworCQkgICAgIklPQVBJQ1slZF06IFNldCByb3V0aW5nIGVudHJ5ICglZC0lZCAtPiAweCV4IC0+ICIKKwkJICAgICJJUlEgJWQgTW9kZTolaSBBY3RpdmU6JWkpXG4iLAorCQkgICAgYXBpY19pZCwgbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIHBpbiwgY2ZnLT52ZWN0b3IsCisJCSAgICBpcnEsIHRyaWdnZXIsIHBvbGFyaXR5KTsKKworCisJaWYgKHNldHVwX2lvYXBpY19lbnRyeShtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCwgaXJxLCAmZW50cnksCisJCQkgICAgICAgZGVzdCwgdHJpZ2dlciwgcG9sYXJpdHksIGNmZy0+dmVjdG9yKSkgeworCQlwcmludGsoIkZhaWxlZCB0byBzZXR1cCBpb2FwaWMgZW50cnkgZm9yIGlvYXBpYyAgJWQsIHBpbiAlZFxuIiwKKwkJICAgICAgIG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBwaW4pOworCQlfX2NsZWFyX2lycV92ZWN0b3IoaXJxLCBjZmcpOworCQlyZXR1cm47CisJfQorCisJaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCBkZXNjLCB0cmlnZ2VyKTsKKwlpZiAoaXJxIDwgTlJfSVJRU19MRUdBQ1kpCisJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CisKKwlpb2FwaWNfd3JpdGVfZW50cnkoYXBpY19pZCwgcGluLCBlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDX2lycXModm9pZCkKK3sKKwlpbnQgYXBpY19pZCwgcGluLCBpZHgsIGlycTsKKwlpbnQgbm90Y29uID0gMDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlpbnQgY3B1ID0gYm9vdF9jcHVfaWQ7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKKworCWZvciAoYXBpY19pZCA9IDA7IGFwaWNfaWQgPCBucl9pb2FwaWNzOyBhcGljX2lkKyspIHsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNfaWRdOyBwaW4rKykgeworCisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljX2lkLCBwaW4sIG1wX0lOVCk7CisJCQlpZiAoaWR4ID09IC0xKSB7CisJCQkJaWYgKCFub3Rjb24pIHsKKwkJCQkJbm90Y29uID0gMTsKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJCQkJS0VSTl9ERUJVRyAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBwaW4pOworCQkJCX0gZWxzZQorCQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgJWQtJWQiLAorCQkJCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIHBpbik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobm90Y29uKSB7CisJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJCQkiIChhcGljaWQtcGluKSBub3QgY29ubmVjdGVkXG4iKTsKKwkJCQlub3Rjb24gPSAwOworCQkJfQorCisJCQlpcnEgPSBwaW5fMl9pcnEoaWR4LCBhcGljX2lkLCBwaW4pOworCisJCQkvKgorCQkJICogU2tpcCB0aGUgdGltZXIgSVJRIGlmIHRoZXJlJ3MgYSBxdWlyayBoYW5kbGVyCisJCQkgKiBpbnN0YWxsZWQgYW5kIGlmIGl0IHJldHVybnMgMToKKwkJCSAqLworCQkJaWYgKGFwaWMtPm11bHRpX3RpbWVyX2NoZWNrICYmCisJCQkJCWFwaWMtPm11bHRpX3RpbWVyX2NoZWNrKGFwaWNfaWQsIGlycSkpCisJCQkJY29udGludWU7CisKKwkJCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19jcHUoaXJxLCBjcHUpOworCQkJaWYgKCFkZXNjKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBpcnEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBhcGljX2lkLCBwaW4pOworCisJCQlzZXR1cF9JT19BUElDX2lycShhcGljX2lkLCBwaW4sIGlycSwgZGVzYywKKwkJCQkJaXJxX3RyaWdnZXIoaWR4KSwgaXJxX3BvbGFyaXR5KGlkeCkpOworCQl9CisJfQorCisJaWYgKG5vdGNvbikKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJIiAoYXBpY2lkLXBpbikgbm90IGNvbm5lY3RlZFxuIik7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIHRpbWVyIHBpbiwgcG9zc2libHkgd2l0aCB0aGUgODI1OUEtbWFzdGVyIGJlaGluZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RpbWVyX0lSUTBfcGluKHVuc2lnbmVkIGludCBhcGljX2lkLCB1bnNpZ25lZCBpbnQgcGluLAorCQkJCQlpbnQgdmVjdG9yKQoreworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJcmV0dXJuOworI2VuZGlmCisKKwltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKKworCS8qCisJICogV2UgdXNlIGxvZ2ljYWwgZGVsaXZlcnkgdG8gZ2V0IHRoZSB0aW1lciBJUlEKKwkgKiB0byB0aGUgZmlyc3QgQ1BVLgorCSAqLworCWVudHJ5LmRlc3RfbW9kZSA9IGFwaWMtPmlycV9kZXN0X21vZGU7CisJZW50cnkubWFzayA9IDA7CQkJLyogZG9uJ3QgbWFzayBJUlEgZm9yIGVkZ2UgKi8KKwllbnRyeS5kZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKGFwaWMtPnRhcmdldF9jcHVzKCkpOworCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKKwllbnRyeS5wb2xhcml0eSA9IDA7CisJZW50cnkudHJpZ2dlciA9IDA7CisJZW50cnkudmVjdG9yID0gdmVjdG9yOworCisJLyoKKwkgKiBUaGUgdGltZXIgSVJRIGRvZXNuJ3QgaGF2ZSB0byBrbm93IHRoYXQgYmVoaW5kIHRoZQorCSAqIHNjZW5lIHdlIG1heSBoYXZlIGEgODI1OUEtbWFzdGVyIGluIEFFT0kgbW9kZSAuLi4KKwkgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZSgwLCAmaW9hcGljX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKworCS8qCisJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCSAqLworCWlvYXBpY193cml0ZV9lbnRyeShhcGljX2lkLCBwaW4sIGVudHJ5KTsKK30KKworCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfSU9fQVBJQyh2b2lkKQoreworCWludCBhcGljLCBpOworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7CisJdW5pb24gSU9fQVBJQ19yZWdfMDIgcmVnXzAyOworCXVuaW9uIElPX0FQSUNfcmVnXzAzIHJlZ18wMzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBNUCBJUlEgc291cmNlczogJWQuXG4iLCBtcF9pcnFfZW50cmllcyk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBJTy1BUElDICMlZCByZWdpc3RlcnM6ICVkLlxuIiwKKwkJICAgICAgIG1wX2lvYXBpY3NbaV0uYXBpY2lkLCBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldKTsKKworCS8qCisJICogV2UgYXJlIGEgYml0IGNvbnNlcnZhdGl2ZSBhYm91dCB3aGF0IHdlIGV4cGVjdC4gIFdlIGhhdmUgdG8KKwkgKiBrbm93IGFib3V0IGV2ZXJ5IGhhcmR3YXJlIGNoYW5nZSBBU0FQLgorCSAqLworCXByaW50ayhLRVJOX0lORk8gInRlc3RpbmcgdGhlIElPIEFQSUMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuIik7CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOworCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7CisJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCkKKwkJcmVnXzAyLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAyKTsKKwlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDIwKQorCQlyZWdfMDMucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIklPIEFQSUMgIyVkLi4uLi4uXG4iLCBtcF9pb2FwaWNzW2FwaWNdLmFwaWNpZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAwOiAlMDhYXG4iLCByZWdfMDAucmF3KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IHBoeXNpY2FsIEFQSUMgaWQ6ICUwMlhcbiIsIHJlZ18wMC5iaXRzLklEKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IERlbGl2ZXJ5IFR5cGU6ICVYXG4iLCByZWdfMDAuYml0cy5kZWxpdmVyeV90eXBlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IExUUyAgICAgICAgICA6ICVYXG4iLCByZWdfMDAuYml0cy5MVFMpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAxOiAlMDhYXG4iLCAqKGludCAqKSZyZWdfMDEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IG1heCByZWRpcmVjdGlvbiBlbnRyaWVzOiAlMDRYXG4iLCByZWdfMDEuYml0cy5lbnRyaWVzKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IFBSUSBpbXBsZW1lbnRlZDogJVhcbiIsIHJlZ18wMS5iaXRzLlBSUSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogSU8gQVBJQyB2ZXJzaW9uOiAlMDRYXG4iLCByZWdfMDEuYml0cy52ZXJzaW9uKTsKKworCS8qCisJICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDE/IGRvbid0IGhhdmUgcmVnXzAyLAorCSAqIGJ1dCB0aGUgdmFsdWUgb2YgcmVnXzAyIGlzIHJlYWQgYXMgdGhlIHByZXZpb3VzIHJlYWQgcmVnaXN0ZXIKKwkgKiB2YWx1ZSwgc28gaWdub3JlIGl0IGlmIHJlZ18wMiA9PSByZWdfMDEuCisJICovCisJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCAmJiByZWdfMDIucmF3ICE9IHJlZ18wMS5yYXcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAyOiAlMDhYXG4iLCByZWdfMDIucmF3KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogYXJiaXRyYXRpb246ICUwMlhcbiIsIHJlZ18wMi5iaXRzLmFyYml0cmF0aW9uKTsKKwl9CisKKwkvKgorCSAqIFNvbWUgSW50ZWwgY2hpcHNldHMgd2l0aCBJTyBBUElDIFZFUlNJT04gb2YgMHgyPyBkb24ndCBoYXZlIHJlZ18wMgorCSAqIG9yIHJlZ18wMywgYnV0IHRoZSB2YWx1ZSBvZiByZWdfMFsyM10gaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZAorCSAqIHJlZ2lzdGVyIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAzID09IHJlZ18wWzEyXS4KKwkgKi8KKwlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDIwICYmIHJlZ18wMy5yYXcgIT0gcmVnXzAyLnJhdyAmJgorCSAgICByZWdfMDMucmF3ICE9IHJlZ18wMS5yYXcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAzOiAlMDhYXG4iLCByZWdfMDMucmF3KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogQm9vdCBEVCAgICA6ICVYXG4iLCByZWdfMDMuYml0cy5ib290X0RUKTsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiBJUlEgcmVkaXJlY3Rpb24gdGFibGU6XG4iKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIgTlIgRHN0IE1hc2sgVHJpZyBJUlIgUG9sIgorCQkJICAiIFN0YXQgRG1vZCBEZWxpIFZlY3Q6ICAgXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPD0gcmVnXzAxLmJpdHMuZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisJCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgaSk7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDJ4ICUwM1ggIiwKKwkJCWksCisJCQllbnRyeS5kZXN0CisJCSk7CisKKwkJcHJpbnRrKCIlMWQgICAgJTFkICAgICUxZCAgICUxZCAgICUxZCAgICAlMWQgICAgJTFkICAgICUwMlhcbiIsCisJCQllbnRyeS5tYXNrLAorCQkJZW50cnkudHJpZ2dlciwKKwkJCWVudHJ5LmlyciwKKwkJCWVudHJ5LnBvbGFyaXR5LAorCQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzLAorCQkJZW50cnkuZGVzdF9tb2RlLAorCQkJZW50cnkuZGVsaXZlcnlfbW9kZSwKKwkJCWVudHJ5LnZlY3RvcgorCQkpOworCX0KKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIklSUSB0byBwaW4gbWFwcGluZ3M6XG4iKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQllbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCQlpZiAoIWVudHJ5KQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpcnEpOworCQlmb3IgKDs7KSB7CisJCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOworCQkJaWYgKCFlbnRyeS0+bmV4dCkKKwkJCQlicmVhazsKKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBkb25lLlxuIik7CisKKwlyZXR1cm47Cit9CisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9BUElDX2JpdGZpZWxkKGludCBiYXNlKQoreworCXVuc2lnbmVkIGludCB2OworCWludCBpLCBqOworCisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZlxuIiBLRVJOX0RFQlVHKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXYgPSBhcGljX3JlYWQoYmFzZSArIGkqMHgxMCk7CisJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQlpZiAodiAmICgxPDxqKSkKKwkJCQlwcmludGsoIjEiKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoIjAiKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorfQorCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQyh2b2lkICpkdW1teSkKK3sKKwl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7CisJdTY0IGljcjsKKworCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQorCQlyZXR1cm47CisKKwlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOworCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsIHJlYWRfYXBpY19pZCgpKTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKKwl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVEFTS1BSSTogJTA4eCAoJTAyeClcbiIsIHYsIHYgJiBBUElDX1RQUklfTUFTSyk7CisKKwlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsgICAgICAgICAgICAgICAgICAgICAvKiAhODI0ODlEWCAqLworCQlpZiAoIUFQSUNfWEFQSUModmVyKSkgeworCQkJdiA9IGFwaWNfcmVhZChBUElDX0FSQlBSSSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKKwkJCSAgICAgICB2ICYgQVBJQ19BUkJQUklfTUFTSyk7CisJCX0KKwkJdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7CisJfQorCisJLyoKKwkgKiBSZW1vdGUgcmVhZCBzdXBwb3J0ZWQgb25seSBpbiB0aGUgODI0ODlEWCBhbmQgbG9jYWwgQVBJQyBmb3IKKwkgKiBQZW50aXVtIHByb2Nlc3NvcnMuCisJICovCisJaWYgKCFBUElDX0lOVEVHUkFURUQodmVyKSB8fCBtYXhsdnQgPT0gMykgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7CisJfQorCisJdiA9IGFwaWNfcmVhZChBUElDX0xEUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7CisJaWYgKCF4MmFwaWNfZW5hYmxlZCgpKSB7CisJCXYgPSBhcGljX3JlYWQoQVBJQ19ERlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJU1IgZmllbGQ6XG4iKTsKKwlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVNSKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1SIGZpZWxkOlxuIik7CisJcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX1RNUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOworCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOworCisJaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7ICAgICAgICAgICAgIC8qICE4MjQ4OURYICovCisJCWlmIChtYXhsdnQgPiAzKSAgICAgICAgIC8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCisJCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKKwl9CisKKwlpY3IgPSBhcGljX2ljcl9yZWFkKCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjogJTA4eFxuIiwgKHUzMilpY3IpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1IyOiAlMDh4XG4iLCAodTMyKShpY3IgPj4gMzIpKTsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUVDogJTA4eFxuIiwgdik7CisKKwlpZiAobWF4bHZ0ID4gMykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgaXMgTFZUIzQuICovCisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRQQzogJTA4eFxuIiwgdik7CisJfQorCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMDogJTA4eFxuIiwgdik7CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQxOiAlMDh4XG4iLCB2KTsKKworCWlmIChtYXhsdnQgPiAyKSB7CQkJLyogRVJSIGlzIExWVCMzLiAqLworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVEVSUjogJTA4eFxuIiwgdik7CisJfQorCisJdiA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1JQ1Q6ICUwOHhcbiIsIHYpOworCXYgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNQ0NUOiAlMDh4XG4iLCB2KTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfVERDUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFREQ1I6ICUwOHhcbiIsIHYpOworCXByaW50aygiXG4iKTsKK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2FsbF9sb2NhbF9BUElDcyh2b2lkKQoreworCWludCBjcHU7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgcHJpbnRfbG9jYWxfQVBJQywgTlVMTCwgMSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X1BJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCisJdiA9IGluYigweGExKSA8PCA4IHwgaW5iKDB4MjEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJTVI6ICUwNHhcbiIsIHYpOworCisJdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJUlI6ICUwNHhcbiIsIHYpOworCisJb3V0YigweDBiLDB4YTApOworCW91dGIoMHgwYiwweDIwKTsKKwl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7CisJb3V0YigweDBhLDB4YTApOworCW91dGIoMHgwYSwweDIwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVNSOiAlMDR4XG4iLCB2KTsKKworCXYgPSBpbmIoMHg0ZDEpIDw8IDggfCBpbmIoMHg0ZDApOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDIEVMQ1I6ICUwNHhcbiIsIHYpOworfQorCitfX2FwaWNkZWJ1Z2luaXQoaW50KSBwcmludF9hbGxfSUNzKHZvaWQpCit7CisJcHJpbnRfUElDKCk7CisJcHJpbnRfYWxsX2xvY2FsX0FQSUNzKCk7CisJcHJpbnRfSU9fQVBJQygpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKHByaW50X2FsbF9JQ3MpOworCisKKy8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCitzdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OworCit2b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOworCWludCBhcGljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6CisJICovCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKKwl9CisJZm9yKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWludCBwaW47CisJCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHBpbnMgaXMgaW4gRXh0SU5UIG1vZGUgKi8KKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisJCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7CisKKwkJCS8qIElmIHRoZSBpbnRlcnJ1cHQgbGluZSBpcyBlbmFibGVkIGFuZCBpbiBFeHRJbnQgbW9kZQorCQkJICogSSBoYXZlIGZvdW5kIHRoZSBwaW4gd2hlcmUgdGhlIGk4MjU5IGlzIGNvbm5lY3RlZC4KKwkJCSAqLworCQkJaWYgKChlbnRyeS5tYXNrID09IDApICYmIChlbnRyeS5kZWxpdmVyeV9tb2RlID09IGRlc3RfRXh0SU5UKSkgeworCQkJCWlvYXBpY19pODI1OS5hcGljID0gYXBpYzsKKwkJCQlpb2FwaWNfaTgyNTkucGluICA9IHBpbjsKKwkJCQlnb3RvIGZvdW5kX2k4MjU5OworCQkJfQorCQl9CisJfQorIGZvdW5kX2k4MjU5OgorCS8qIExvb2sgdG8gc2VlIHdoYXQgaWYgdGhlIE1QIHRhYmxlIGhhcyByZXBvcnRlZCB0aGUgRXh0SU5UICovCisJLyogSWYgd2UgY291bGQgbm90IGZpbmQgdGhlIGFwcHJvcHJpYXRlIHBpbiBieSBsb29raW5nIGF0IHRoZSBpb2FwaWMKKwkgKiB0aGUgaTgyNTkgcHJvYmFibHkgaXMgbm90IGNvbm5lY3RlZCB0aGUgaW9hcGljIGJ1dCBnaXZlIHRoZQorCSAqIG1wdGFibGUgYSBjaGFuY2UgYW55d2F5LgorCSAqLworCWk4MjU5X3BpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0V4dElOVCk7CisJaTgyNTlfYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0V4dElOVCk7CisJLyogVHJ1c3QgdGhlIE1QIHRhYmxlIGlmIG5vdGhpbmcgaXMgc2V0dXAgaW4gdGhlIGhhcmR3YXJlICovCisJaWYgKChpb2FwaWNfaTgyNTkucGluID09IC0xKSAmJiAoaTgyNTlfcGluID49IDApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBub3Qgc2V0dXAgaW4gaGFyZHdhcmUgYnV0IHJlcG9ydGVkIGJ5IE1QIHRhYmxlXG4iKTsKKwkJaW9hcGljX2k4MjU5LnBpbiAgPSBpODI1OV9waW47CisJCWlvYXBpY19pODI1OS5hcGljID0gaTgyNTlfYXBpYzsKKwl9CisJLyogQ29tcGxhaW4gaWYgdGhlIE1QIHRhYmxlIGFuZCB0aGUgaGFyZHdhcmUgZGlzYWdyZWUgKi8KKwlpZiAoKChpb2FwaWNfaTgyNTkuYXBpYyAhPSBpODI1OV9hcGljKSB8fCAoaW9hcGljX2k4MjU5LnBpbiAhPSBpODI1OV9waW4pKSAmJgorCQkoaTgyNTlfcGluID49IDApICYmIChpb2FwaWNfaTgyNTkucGluID49IDApKQorCXsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIGluIGhhcmR3YXJlIGFuZCBNUCB0YWJsZSBkaWZmZXJcbiIpOworCX0KKworCS8qCisJICogRG8gbm90IHRydXN0IHRoZSBJTy1BUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cAorCSAqLworCWNsZWFyX0lPX0FQSUMoKTsKK30KKworLyoKKyAqIE5vdCBhbiBfX2luaXQsIG5lZWRlZCBieSB0aGUgcmVib290IGNvZGUKKyAqLwordm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCkKK3sKKwkvKgorCSAqIENsZWFyIHRoZSBJTy1BUElDIGJlZm9yZSByZWJvb3Rpbmc6CisJICovCisJY2xlYXJfSU9fQVBJQygpOworCisJLyoKKwkgKiBJZiB0aGUgaTgyNTkgaXMgcm91dGVkIHRocm91Z2ggYW4gSU9BUElDCisJICogUHV0IHRoYXQgSU9BUElDIGluIHZpcnR1YWwgd2lyZSBtb2RlCisJICogc28gbGVnYWN5IGludGVycnVwdHMgY2FuIGJlIGRlbGl2ZXJlZC4KKwkgKi8KKwlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgeworCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKKwkJZW50cnkubWFzayAgICAgICAgICAgID0gMDsgLyogRW5hYmxlZCAqLworCQllbnRyeS50cmlnZ2VyICAgICAgICAgPSAwOyAvKiBFZGdlICovCisJCWVudHJ5LmlyciAgICAgICAgICAgICA9IDA7CisJCWVudHJ5LnBvbGFyaXR5ICAgICAgICA9IDA7IC8qIEhpZ2ggKi8KKwkJZW50cnkuZGVsaXZlcnlfc3RhdHVzID0gMDsKKwkJZW50cnkuZGVzdF9tb2RlICAgICAgID0gMDsgLyogUGh5c2ljYWwgKi8KKwkJZW50cnkuZGVsaXZlcnlfbW9kZSAgID0gZGVzdF9FeHRJTlQ7IC8qIEV4dEludCAqLworCQllbnRyeS52ZWN0b3IgICAgICAgICAgPSAwOworCQllbnRyeS5kZXN0ICAgICAgICAgICAgPSByZWFkX2FwaWNfaWQoKTsKKworCQkvKgorCQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CisJCSAqLworCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKKwl9CisKKwlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIGZ1bmN0aW9uIHRvIHNldCB0aGUgSU8tQVBJQyBwaHlzaWNhbCBJRHMgYmFzZWQgb24gdGhlCisgKiB2YWx1ZXMgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCisgKgorICogYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiAgVHVlIERlYyAyMSAxMjoyNTowNSBDU1QgMTk5OQorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKHZvaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXBoeXNpZF9tYXNrX3QgcGh5c19pZF9wcmVzZW50X21hcDsKKwlpbnQgYXBpY19pZDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG9sZF9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMgJiYgeDg2X3F1aXJrcy0+c2V0dXBfaW9hcGljX2lkcygpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERvbid0IGNoZWNrIEkvTyBBUElDIElEcyBmb3IgeEFQSUMgc3lzdGVtcy4gIFRoZXkgaGF2ZQorCSAqIG5vIG1lYW5pbmcgd2l0aG91dCB0aGUgc2VyaWFsIEFQSUMgYnVzLgorCSAqLworCWlmICghKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQorCQl8fCBBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKKwkJcmV0dXJuOworCS8qCisJICogVGhpcyBpcyBicm9rZW47IGFueXRoaW5nIHdpdGggYSByZWFsIGNwdSBjb3VudCBoYXMgdG8KKwkgKiBjaXJjdW12ZW50IHRoaXMgaWRpb2N5IHJlZ2FyZGxlc3MuCisJICovCisJcGh5c19pZF9wcmVzZW50X21hcCA9IGFwaWMtPmlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7CisKKwkvKgorCSAqIFNldCB0aGUgSU9BUElDIElEIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIE1QQyB0YWJsZS4KKwkgKi8KKwlmb3IgKGFwaWNfaWQgPSAwOyBhcGljX2lkIDwgbnJfaW9hcGljczsgYXBpY19pZCsrKSB7CisKKwkJLyogUmVhZCB0aGUgcmVnaXN0ZXIgMCB2YWx1ZSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljX2lkLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCQlvbGRfaWQgPSBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZDsKKworCQlpZiAobXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEIGlzICVkIGluIHRoZSBNUEMgdGFibGUhLi4uXG4iLAorCQkJCWFwaWNfaWQsIG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAorCQkJCXJlZ18wMC5iaXRzLklEKTsKKwkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkID0gcmVnXzAwLmJpdHMuSUQ7CisJCX0KKworCQkvKgorCQkgKiBTYW5pdHkgY2hlY2ssIGlzIHRoZSBJRCByZWFsbHkgZnJlZT8gRXZlcnkgQVBJQyBpbiBhCisJCSAqIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQorCQkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KKwkJICovCisJCWlmIChhcGljLT5jaGVja19hcGljaWRfdXNlZChwaHlzX2lkX3ByZXNlbnRfbWFwLAorCQkJCQltcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIElPLUFQSUMjJWQgSUQgJWQgaXMgYWxyZWFkeSB1c2VkIS4uLlxuIiwKKwkJCQlhcGljX2lkLCBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspCisJCQkJaWYgKCFwaHlzaWRfaXNzZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCkpCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQorCQkJCXBhbmljKCJNYXggQVBJQyBJRCBleGNlZWRlZCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCisJCQkJaSk7CisJCQlwaHlzaWRfc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApOworCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQgPSBpOworCQl9IGVsc2UgeworCQkJcGh5c2lkX21hc2tfdCB0bXA7CisJCQl0bXAgPSBhcGljLT5hcGljaWRfdG9fY3B1X3ByZXNlbnQobXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOworCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiU2V0dGluZyAlZCBpbiB0aGUgIgorCQkJCQkicGh5c19pZF9wcmVzZW50X21hcFxuIiwKKwkJCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOworCQkJcGh5c2lkc19vcihwaHlzX2lkX3ByZXNlbnRfbWFwLCBwaHlzX2lkX3ByZXNlbnRfbWFwLCB0bXApOworCQl9CisKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGFkanVzdCB0aGUgSVJRIHJvdXRpbmcgdGFibGUKKwkJICogaWYgdGhlIElEIGNoYW5nZWQuCisJCSAqLworCQlpZiAob2xkX2lkICE9IG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKQorCQkJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCisJCQkJaWYgKG1wX2lycXNbaV0uZHN0YXBpYyA9PSBvbGRfaWQpCisJCQkJCW1wX2lycXNbaV0uZHN0YXBpYworCQkJCQkJPSBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZDsKKworCQkvKgorCQkgKiBSZWFkIHRoZSByaWdodCB2YWx1ZSBmcm9tIHRoZSBNUEMgdGFibGUgYW5kCisJCSAqIHdyaXRlIGl0IGludG8gdGhlIElEIHJlZ2lzdGVyLgorCQkgKi8KKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSIuLi5jaGFuZ2luZyBJTy1BUElDIHBoeXNpY2FsIEFQSUMgSUQgdG8gJWQgLi4uIiwKKwkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKTsKKworCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJaW9fYXBpY193cml0ZShhcGljX2lkLCAwLCByZWdfMDAucmF3KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCQkvKgorCQkgKiBTYW5pdHkgY2hlY2sKKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWNfaWQsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpCisJCQlwcmludGsoImNvdWxkIG5vdCBzZXQgSUQhXG4iKTsKKwkJZWxzZQorCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG9rLlxuIik7CisJfQorfQorI2VuZGlmCisKK2ludCBub190aW1lcl9jaGVjayBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hlY2soY2hhciAqcykKK3sKKwlub190aW1lcl9jaGVjayA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub190aW1lcl9jaGVjayIsIG5vdGltZXJjaGVjayk7CisKKy8qCisgKiBUaGVyZSBpcyBhIG5hc3R5IGJ1ZyBpbiBzb21lIG9sZGVyIFNNUCBib2FyZHMsIHRoZWlyIG1wdGFibGUgbGllcworICogYWJvdXQgdGhlIHRpbWVyIElSUS4gV2UgZG8gdGhlIGZvbGxvd2luZyB0byB3b3JrIGFyb3VuZCB0aGUgc2l0dWF0aW9uOgorICoKKyAqCS0gdGltZXIgSVJRIGRlZmF1bHRzIHRvIElPLUFQSUMgSVJRCisgKgktIGlmIHRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB0aGF0IHRpbWVyIElSUXMgYXJlIGRlZnVuY3QsIHRoZW4gd2UgZmFsbAorICoJICBiYWNrIHRvIElTQSB0aW1lciBJUlFzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyX2lycV93b3Jrcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdDEgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobm9fdGltZXJfY2hlY2spCisJCXJldHVybiAxOworCisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCS8qIExldCB0ZW4gdGlja3MgcGFzcy4uLiAqLworCW1kZWxheSgoMTAgKiAxMDAwKSAvIEhaKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkvKgorCSAqIEV4cGVjdCBhIGZldyB0aWNrcyBhdCBsZWFzdCwgdG8gYmUgc3VyZSBzb21lIHBvc3NpYmxlCisJICogZ2x1ZSBsb2dpYyBkb2VzIG5vdCBsb2NrIHVwIGFmdGVyIG9uZSBvciB0d28gZmlyc3QKKwkgKiB0aWNrcyBpbiBhIG5vbi1FeHRJTlQgbW9kZS4gIEFsc28gdGhlIGxvY2FsIEFQSUMKKwkgKiBtaWdodCBoYXZlIGNhY2hlZCBvbmUgRXh0SU5UIGludGVycnVwdC4gIEZpbmFsbHksIGF0CisJICogbGVhc3Qgb25lIHRpY2sgbWF5IGJlIGxvc3QgZHVlIHRvIGRlbGF5cy4KKwkgKi8KKworCS8qIGppZmZpZXMgd3JhcD8gKi8KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0MSArIDQpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluIHRoZSBTTVArSU9BUElDIGNhc2UgaXQgbWlnaHQgaGFwcGVuIHRoYXQgdGhlcmUgYXJlIGFuIHVuc3BlY2lmaWVkCisgKiBudW1iZXIgb2YgcGVuZGluZyBJUlEgZXZlbnRzIHVuaGFuZGxlZC4gVGhlc2UgY2FzZXMgYXJlIHZlcnkgcmFyZSwKKyAqIHNvIHdlICdyZXNlbmQnIHRoZXNlIElSUXMgdmlhIElQSXMsIHRvIHRoZSBzYW1lIENQVS4gSXQncyBtdWNoCisgKiBiZXR0ZXIgdG8gZG8gaXQgdGhpcyB3YXkgYXMgdGh1cyB3ZSBkbyBub3QgaGF2ZSB0byBiZSBhd2FyZSBvZgorICogJ3BlbmRpbmcnIGludGVycnVwdHMgaW4gdGhlIElSUSBwYXRoLCBleGNlcHQgYXQgdGhpcyBwb2ludC4KKyAqLworLyoKKyAqIEVkZ2UgdHJpZ2dlcmVkIG5lZWRzIHRvIHJlc2VuZCBhbnkgaW50ZXJydXB0CisgKiB0aGF0IHdhcyBkZWxheWVkIGJ1dCB0aGlzIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBkZXZpY2UKKyAqIGluZGVwZW5kZW50IGNvZGUuCisgKi8KKworLyoKKyAqIFN0YXJ0aW5nIHVwIGEgZWRnZS10cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHQgaXMKKyAqIG5hc3R5IC0gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgdGhlIGVkZ2UuCisgKiBJZiBpdCBpcyBhbHJlYWR5IGFzc2VydGVkIGZvciBzb21lIHJlYXNvbiwgd2UgbmVlZAorICogcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCBpcyB3YXMgcGVuZGluZy4KKyAqCisgKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAtIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZha2UKKyAqIGFuIGVkZ2UgZXZlbiBpZiBpdCBpc24ndCBvbiB0aGUgODI1OUEuLi4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCB3YXNfcGVuZGluZyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKSB7CisJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CisJCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKKwkJCXdhc19wZW5kaW5nID0gMTsKKwl9CisJY2ZnID0gaXJxX2NmZyhpcnEpOworCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGNmZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB3YXNfcGVuZGluZzsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCWFwaWMtPnNlbmRfSVBJX21hc2soY3B1bWFza19vZihjcHVtYXNrX2ZpcnN0KGNmZy0+ZG9tYWluKSksIGNmZy0+dmVjdG9yKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDE7Cit9CisjZWxzZQorc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFwaWMtPnNlbmRfSVBJX3NlbGYoaXJxX2NmZyhpcnEpLT52ZWN0b3IpOworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworLyoKKyAqIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdHMgbmVlZCBkaWZmZXJlbnQgaGFuZGxpbmcsCisgKiBzbyB3ZSB1c2UgdHdvIHNlcGFyYXRlIElSUSBkZXNjcmlwdG9ycy4gRWRnZSB0cmlnZ2VyZWQgSVJRcyBjYW4gYmUKKyAqIGhhbmRsZWQgd2l0aCB0aGUgbGV2ZWwtdHJpZ2dlcmVkIGRlc2NyaXB0b3IsIGJ1dCB0aGF0IG9uZSBoYXMgc2xpZ2h0bHkKKyAqIG1vcmUgb3ZlcmhlYWQuIExldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGNhbm5vdCBiZSBoYW5kbGVkIHdpdGggdGhlCisgKiBlZGdlLXRyaWdnZXJlZCBoYW5kbGVyLCB3aXRob3V0IHJpc2tpbmcgSVJRIHN0b3JtcyBhbmQgb3RoZXIgdWdseQorICogcmFjZXMuCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhpcl9taWdyYXRpb25fd29yaywgaXJfaXJxX21pZ3JhdGlvbik7CisKKy8qCisgKiBNaWdyYXRlIHRoZSBJTy1BUElDIGlycSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ci1yZW1hcHBpbmcuCisgKgorICogRm9yIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUob2YgdmVjdG9yCisgKiBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCisgKgorICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgbmVlZCB0byBtb2RpZnkgdGhlIGlvLWFwaWMgUlRFIGFzd2VsbCB3aXRoIHRoZSB1cGRhdGUKKyAqIHZlY3RvciBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCBtb2RpZnlpbmcgSVJURSB3aXRoIHZlY3RvciBhbmQgZGVzdGluYXRpb24uCisgKiBTbyBpcnEgbWlncmF0aW9uIGZvciBsZXZlbCB0cmlnZ2VyZWQgaXMgbGl0dGxlICBiaXQgbW9yZSBjb21wbGV4IGNvbXBhcmVkIHRvCisgKiBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24uIEJ1dCB0aGUgZ29vZCBuZXdzIGlzLCB3ZSB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtCisgKiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhcyB3ZSBoYXZlIHRvZGF5LCBvbmx5IGRpZmZlcmVuY2UgYmVpbmcsCisgKiB3ZSBub3cgaW5pdGlhdGUgdGhlIGlycSBtaWdyYXRpb24gZnJvbSBwcm9jZXNzIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUKKyAqIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIEluIGZ1dHVyZSwgd2hlbiB3ZSBkbyBhIGRpcmVjdGVkIEVPSSAoY29tYmluZWQgd2l0aCBjcHUgRU9JIGJyb2FkY2FzdAorICogc3VwcHJlc3Npb24pIHRvIHRoZSBJTy1BUElDLCBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbiB3aWxsIGFsc28gYmUKKyAqIGFzIHNpbXBsZSBhcyBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24gYW5kIHdlIGNhbiBkbyB0aGUgaXJxIG1pZ3JhdGlvbgorICogd2l0aCBhIHNpbXBsZSBhdG9taWMgdXBkYXRlIHRvIElPLUFQSUMgUlRFLgorICovCitzdGF0aWMgdm9pZAorbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnRlIGlydGU7CisJaW50IG1vZGlmeV9pb2FwaWNfcnRlOworCXVuc2lnbmVkIGludCBkZXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG1hc2ssIGNwdV9vbmxpbmVfbWFzaykpCisJCXJldHVybjsKKworCWlycSA9IGRlc2MtPmlycTsKKwlpZiAoZ2V0X2lydGUoaXJxLCAmaXJ0ZSkpCisJCXJldHVybjsKKworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQorCQlyZXR1cm47CisKKwlzZXRfZXh0cmFfbW92ZV9kZXNjKGRlc2MsIG1hc2spOworCisJZGVzdCA9IGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIG1hc2spOworCisJbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7CisJaWYgKG1vZGlmeV9pb2FwaWNfcnRlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJfQorCisJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CisKKwkvKgorCSAqIE1vZGlmaWVkIHRoZSBJUlRFIGFuZCBmbHVzaGVzIHRoZSBJbnRlcnJ1cHQgZW50cnkgY2FjaGUuCisJICovCisJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKQorCQlzZW5kX2NsZWFudXBfdmVjdG9yKGNmZyk7CisKKwljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIG1hc2spOworfQorCitzdGF0aWMgaW50IG1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWludCByZXQgPSAtMTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCisJbWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOworCisJaWYgKGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoY2ZnKSkgeworCQkvKgorCQkgKiBJbnRlcnJ1cHQgaW4gcHJvZ3Jlc3MuIE1pZ3JhdGluZyBpcnEgbm93IHdpbGwgY2hhbmdlIHRoZQorCQkgKiB2ZWN0b3IgaW5mb3JtYXRpb24gaW4gdGhlIElPLUFQSUMgUlRFIGFuZCB0aGF0IHdpbGwgY29uZnVzZQorCQkgKiB0aGUgRU9JIGJyb2FkY2FzdCBwZXJmb3JtZWQgYnkgY3B1LgorCQkgKiBTbywgZGVsYXkgdGhlIGlycSBtaWdyYXRpb24gdG8gdGhlIG5leHQgaW5zdGFuY2UuCisJCSAqLworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyX21pZ3JhdGlvbl93b3JrLCAxKTsKKwkJZ290byB1bm1hc2s7CisJfQorCisJLyogZXZlcnRoaW5nIGlzIGNsZWFyLiB3ZSBoYXZlIHJpZ2h0IG9mIHdheSAqLworCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIGRlc2MtPnBlbmRpbmdfbWFzayk7CisKKwlyZXQgPSAwOworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKKwljcHVtYXNrX2NsZWFyKGRlc2MtPnBlbmRpbmdfbWFzayk7CisKK3VubWFzazoKKwl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQkJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkgfHwKKwkJCSAgICAhKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7CisJCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgZGVzYy0+cGVuZGluZ19tYXNrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIE1pZ3JhdGVzIHRoZSBJUlEgZGVzdGluYXRpb24gaW4gdGhlIHByb2Nlc3MgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSB7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOworCQljcHVtYXNrX2NvcHkoZGVzYy0+cGVuZGluZ19tYXNrLCBtYXNrKTsKKwkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhkZXNjKTsKKwkJcmV0dXJuOworCX0KKworCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIG1hc2spOworfQorc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCXNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2MoZGVzYywgbWFzayk7Cit9CisjZW5kaWYKKworYXNtbGlua2FnZSB2b2lkIHNtcF9pcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCh2b2lkKQoreworCXVuc2lnbmVkIHZlY3RvciwgbWU7CisKKwlhY2tfQVBJQ19pcnEoKTsKKwlleGl0X2lkbGUoKTsKKwlpcnFfZW50ZXIoKTsKKworCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWZvciAodmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyB2ZWN0b3IrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKworCQlpZiAoaXJxID09IC0xKQorCQkJY29udGludWU7CisKKwkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCisJCWNmZyA9IGlycV9jZmcoaXJxKTsKKwkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkJaWYgKCFjZmctPm1vdmVfY2xlYW51cF9jb3VudCkKKwkJCWdvdG8gdW5sb2NrOworCisJCWlmICh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IgJiYgY3B1bWFza190ZXN0X2NwdShtZSwgY2ZnLT5kb21haW4pKQorCQkJZ290byB1bmxvY2s7CisKKwkJX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdID0gLTE7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50LS07Cit1bmxvY2s6CisJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwl9CisKKwlpcnFfZXhpdCgpOworfQorCitzdGF0aWMgdm9pZCBpcnFfY29tcGxldGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKipkZXNjcCkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSAqZGVzY3A7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwl1bnNpZ25lZCB2ZWN0b3IsIG1lOworCisJaWYgKGxpa2VseSghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSkgeworI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MKKwkJaWYgKGxpa2VseSghY2ZnLT5tb3ZlX2Rlc2NfcGVuZGluZykpCisJCQlyZXR1cm47CisKKwkJLyogZG9tYWluIGhhcyBub3QgY2hhbmdlZCwgYnV0IGFmZmluaXR5IGRpZCAqLworCQltZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUobWUsIGRlc2MtPmFmZmluaXR5KSkgeworCQkJKmRlc2NwID0gZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbWUpOworCQkJLyogZ2V0IHRoZSBuZXcgb25lICovCisJCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJCQljZmctPm1vdmVfZGVzY19wZW5kaW5nID0gMDsKKwkJfQorI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwl2ZWN0b3IgPSB+Z2V0X2lycV9yZWdzKCktPm9yaWdfYXg7CisJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAodmVjdG9yID09IGNmZy0+dmVjdG9yICYmIGNwdW1hc2tfdGVzdF9jcHUobWUsIGNmZy0+ZG9tYWluKSkgeworI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MKKwkJKmRlc2NwID0gZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbWUpOworCQkvKiBnZXQgdGhlIG5ldyBvbmUgKi8KKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworI2VuZGlmCisJCXNlbmRfY2xlYW51cF92ZWN0b3IoY2ZnKTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHN0cnVjdCBpcnFfZGVzYyAqKmRlc2NwKSB7fQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgYWNrX3gyYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja194MkFQSUNfaXJxKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFja194MmFwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja194MkFQSUNfaXJxKCk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhY2tfYXBpY19lZGdlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlycV9jb21wbGV0ZV9tb3ZlKCZkZXNjKTsKKwltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKKwlhY2tfQVBJQ19pcnEoKTsKK30KKworYXRvbWljX3QgaXJxX21pc19jb3VudDsKKworc3RhdGljIHZvaWQgYWNrX2FwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXVuc2lnbmVkIGxvbmcgdjsKKwlpbnQgaTsKKyNlbmRpZgorCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IGRvX3VubWFza19pcnEgPSAwOworCisJaXJxX2NvbXBsZXRlX21vdmUoJmRlc2MpOworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJLyogSWYgd2UgYXJlIG1vdmluZyB0aGUgaXJxIHdlIG5lZWQgdG8gbWFzayBpdCAqLworCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkgeworCQlkb191bm1hc2tfaXJxID0gMTsKKwkJbWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJKiBJdCBhcHBlYXJzIHRoZXJlIGlzIGFuIGVycmF0dW0gd2hpY2ggYWZmZWN0cyBhdCBsZWFzdCB2ZXJzaW9uIDB4MTEKKwkqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCisJKiBjaGlwc2V0cykuICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGlzCisJKiBlcnJvbmVvdXNseSBkZWxpdmVyZWQgYXMgZWRnZS10cmlnZ2VyZWQgb25lIGJ1dCB0aGUgcmVzcGVjdGl2ZSBJUlIKKwkqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKKwkqIG1lc3NhZ2UgYnV0IGl0IHdpbGwgbmV2ZXIgYXJyaXZlIGFuZCBmdXJ0aGVyIGludGVycnVwdHMgYXJlIGJsb2NrZWQKKwkqIGZyb20gdGhlIHNvdXJjZS4gIFRoZSBleGFjdCByZWFzb24gaXMgc28gZmFyIHVua25vd24sIGJ1dCB0aGUKKwkqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cworCSogZnJvbSBhIGdpdmVuIHNvdXJjZSBnZXQgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIENQVSBhbmQgdGhlIHNvdXJjZSBpcworCSogdGVtcG9yYXJpbHkgZGlzYWJsZWQgaW4gYmV0d2Vlbi4KKwkqCisJKiBBIHdvcmthcm91bmQgaXMgdG8gc2ltdWxhdGUgYW4gRU9JIG1lc3NhZ2UgbWFudWFsbHkuICBXZSBhY2hpZXZlIGl0CisJKiBieSBzZXR0aW5nIHRoZSB0cmlnZ2VyIG1vZGUgdG8gZWRnZSBhbmQgdGhlbiB0byBsZXZlbCB3aGVuIHRoZSBlZGdlCisJKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQorCSogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4gIFdlIG1hc2sgdGhlIHNvdXJjZSBmb3IgdGhlIHRpbWUgb2YgdGhlCisJKiBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZXNjYXBpbmcgbWVhbndoaWxlLgorCSogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KKwkqLworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwlpID0gY2ZnLT52ZWN0b3I7CisKKwl2ID0gYXBpY19yZWFkKEFQSUNfVE1SICsgKChpICYgfjB4MWYpID4+IDEpKTsKKyNlbmRpZgorCisJLyoKKwkgKiBXZSBtdXN0IGFja25vd2xlZGdlIHRoZSBpcnEgYmVmb3JlIHdlIG1vdmUgaXQgb3IgdGhlIGFja25vd2xlZGdlIHdpbGwKKwkgKiBub3QgcHJvcGFnYXRlIHByb3Blcmx5LgorCSAqLworCWFja19BUElDX2lycSgpOworCisJLyogTm93IHdlIGNhbiBtb3ZlIGFuZCByZW5hYmxlIHRoZSBpcnEgKi8KKwlpZiAodW5saWtlbHkoZG9fdW5tYXNrX2lycSkpIHsKKwkJLyogT25seSBtaWdyYXRlIHRoZSBpcnEgaWYgdGhlIGFjayBoYXMgYmVlbiByZWNlaXZlZC4KKwkJICoKKwkJICogT24gcmFyZSBvY2Nhc2lvbnMgdGhlIGJyb2FkY2FzdCBsZXZlbCB0cmlnZ2VyZWQgYWNrIGdldHMKKwkJICogZGVsYXllZCBnb2luZyB0byBpb2FwaWNzLCBhbmQgaWYgd2UgcmVwcm9ncmFtIHRoZQorCQkgKiB2ZWN0b3Igd2hpbGUgUmVtb3RlIElSUiBpcyBzdGlsbCBzZXQgdGhlIGlycSB3aWxsIG5ldmVyCisJCSAqIGZpcmUgYWdhaW4uCisJCSAqCisJCSAqIFRvIHByZXZlbnQgdGhpcyBzY2VuYXJpbyB3ZSByZWFkIHRoZSBSZW1vdGUgSVJSIGJpdAorCQkgKiBvZiB0aGUgaW9hcGljLiAgVGhpcyBoYXMgdHdvIGVmZmVjdHMuCisJCSAqIC0gT24gYW55IHNhbmUgc3lzdGVtIHRoZSByZWFkIG9mIHRoZSBpb2FwaWMgd2lsbAorCQkgKiAgIGZsdXNoIHdyaXRlcyAoYW5kIGFja3MpIGdvaW5nIHRvIHRoZSBpb2FwaWMgZnJvbQorCQkgKiAgIHRoaXMgY3B1LgorCQkgKiAtIFdlIGdldCB0byBzZWUgaWYgdGhlIEFDSyBoYXMgYWN0dWFsbHkgYmVlbiBkZWxpdmVyZWQuCisJCSAqCisJCSAqIEJhc2VkIG9uIGZhaWxlZCBleHBlcmltZW50cyBvZiByZXByb2dyYW1taW5nIHRoZQorCQkgKiBpb2FwaWMgZW50cnkgZnJvbSBvdXRzaWRlIG9mIGlycSBjb250ZXh0IHN0YXJ0aW5nCisJCSAqIHdpdGggbWFza2luZyB0aGUgaW9hcGljIGVudHJ5IGFuZCB0aGVuIHBvbGxpbmcgdW50aWwKKwkJICogUmVtb3RlIElSUiB3YXMgY2xlYXIgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgdGhlCisJCSAqIGlvYXBpYyBJIGRvbid0IHRydXN0IHRoZSBSZW1vdGUgSVJSIGJpdCB0byBiZQorCQkgKiBjb21wbGV0ZXkgYWNjdXJhdGUuCisJCSAqCisJCSAqIEhvd2V2ZXIgdGhlcmUgYXBwZWFycyB0byBiZSBubyBvdGhlciB3YXkgdG8gcGx1ZworCQkgKiB0aGlzIHJhY2UsIHNvIGlmIHRoZSBSZW1vdGUgSVJSIGJpdCBpcyBub3QKKwkJICogYWNjdXJhdGUgYW5kIGlzIGNhdXNpbmcgcHJvYmxlbXMgdGhlbiBpdCBpcyBhIGhhcmR3YXJlIGJ1ZworCQkgKiBhbmQgeW91IGNhbiBnbyB0YWxrIHRvIHRoZSBjaGlwc2V0IHZlbmRvciBhYm91dCBpdC4KKwkJICovCisJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwkJaWYgKCFpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGNmZykpCisJCQltb3ZlX21hc2tlZF9pcnEoaXJxKTsKKwkJdW5tYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmICghKHYgJiAoMSA8PCAoaSAmIDB4MWYpKSkpIHsKKwkJYXRvbWljX2luYygmaXJxX21pc19jb3VudCk7CisJCXNwaW5fbG9jaygmaW9hcGljX2xvY2spOworCQlfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoY2ZnKTsKKwkJX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKGNmZyk7CisJCXNwaW5fdW5sb2NrKCZpb2FwaWNfbG9jayk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiSU8tQVBJQyIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCisJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKKwkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKwkuYWNrCQk9IGFja19hcGljX2VkZ2UsCisJLmVvaQkJPSBhY2tfYXBpY19sZXZlbCwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eQk9IHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxLAorI2VuZGlmCisJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gIklSLUlPLUFQSUMiLAorCS5zdGFydHVwCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAorCS5tYXNrCQk9IG1hc2tfSU9fQVBJQ19pcnEsCisJLnVubWFzawkJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCisJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCisJLmVvaQkJPSBhY2tfeDJhcGljX2xldmVsLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEsCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKK3sKKwlpbnQgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCisJLyoKKwkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKKwkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KKwkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQorCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKKwkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0CisJICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgorCSAqCisJICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKKwkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKKwkgKi8KKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQlpZiAoSU9fQVBJQ19JUlEoaXJxKSAmJiBjZmcgJiYgIWNmZy0+dmVjdG9yKSB7CisJCQkvKgorCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKKwkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5CisJCQkgKiBpbnRlcnJ1cHQgaWYgd2UgY2FuLi4KKwkJCSAqLworCQkJaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKQorCQkJCW1ha2VfODI1OUFfaXJxKGlycSk7CisJCQllbHNlCisJCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLworCQkJCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGUgbG9jYWwgQVBJQyBpcnEtY2hpcCBpbXBsZW1lbnRhdGlvbjoKKyAqLworCitzdGF0aWMgdm9pZCBtYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHVubWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIHY7CisKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIHYgJiB+QVBJQ19MVlRfTUFTS0VEKTsKK30KKworc3RhdGljIHZvaWQgYWNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja19BUElDX2lycSgpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxhcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAibG9jYWwtQVBJQyIsCisJLm1hc2sJCT0gbWFza19sYXBpY19pcnEsCisJLnVubWFzawkJPSB1bm1hc2tfbGFwaWNfaXJxLAorCS5hY2sJCT0gYWNrX2xhcGljX2lycSwKK307CisKK3N0YXRpYyB2b2lkIGxhcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmxhcGljX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwKKwkJCQkgICAgICAiZWRnZSIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbm1pKHZvaWQpCit7CisJLyoKKwkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KKwkgKiBXZSBwdXQgdGhlIDgyNTlBIG1hc3RlciBpbnRvIEFFT0kgbW9kZSBhbmQKKwkgKiB1bm1hc2sgb24gYWxsIGxvY2FsIEFQSUNzIExWVDAgYXMgTk1JLgorCSAqCisJICogVGhlIGlkZWEgdG8gdXNlIHRoZSA4MjU5QSBpbiBBRU9JIG1vZGUgKCc4MjU5QSBWaXJ0dWFsIFdpcmUnKQorCSAqIGlzIGZyb20gTWFjaWVqIFcuIFJvenlja2kgLSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBFT0kgZnJvbQorCSAqIHRoZSBOTUkgaGFuZGxlciBvciB0aGUgdGltZXIgaW50ZXJydXB0LgorCSAqLworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPICJhY3RpdmF0aW5nIE5NSSBXYXRjaGRvZyAuLi4iKTsKKworCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgZG9uZS5cbiIpOworfQorCisvKgorICogVGhpcyBsb29rcyBhIGJpdCBoYWNraXNoIGJ1dCBpdCdzIGFib3V0IHRoZSBvbmx5IG9uZSB3YXkgb2Ygc2VuZGluZworICogYSBmZXcgSU5UQSBjeWNsZXMgdG8gODI1OUFzIGFuZCBhbnkgYXNzb2NpYXRlZCBnbHVlIGxvZ2ljLiAgSUNSIGRvZXMKKyAqIG5vdCBzdXBwb3J0IHRoZSBFeHRJTlQgbW9kZSwgdW5mb3J0dW5hdGVseS4gIFdlIG5lZWQgdG8gc2VuZCB0aGVzZQorICogY3ljbGVzIGFzIHNvbWUgaTgyNDg5RFgtYmFzZWQgYm9hcmRzIGhhdmUgZ2x1ZSBsb2dpYyB0aGF0IGtlZXBzIHRoZQorICogODI1OUEgaW50ZXJydXB0IGxpbmUgYXNzZXJ0ZWQgdW50aWwgSU5UQS4gIC0tbWFjcm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1bmxvY2tfRXh0SU5UX2xvZ2ljKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbiwgaTsKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTAsIGVudHJ5MTsKKwl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKKworCXBpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDgsIG1wX0lOVCk7CisJaWYgKHBpbiA9PSAtMSkgeworCQlXQVJOX09OX09OQ0UoMSk7CisJCXJldHVybjsKKwl9CisJYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDgsIG1wX0lOVCk7CisJaWYgKGFwaWMgPT0gLTEpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCisJZW50cnkwID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKKwljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOworCisJbWVtc2V0KCZlbnRyeTEsIDAsIHNpemVvZihlbnRyeTEpKTsKKworCWVudHJ5MS5kZXN0X21vZGUgPSAwOwkJCS8qIHBoeXNpY2FsIGRlbGl2ZXJ5ICovCisJZW50cnkxLm1hc2sgPSAwOwkJCS8qIHVubWFzayBJUlEgbm93ICovCisJZW50cnkxLmRlc3QgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwllbnRyeTEuZGVsaXZlcnlfbW9kZSA9IGRlc3RfRXh0SU5UOworCWVudHJ5MS5wb2xhcml0eSA9IGVudHJ5MC5wb2xhcml0eTsKKwllbnRyeTEudHJpZ2dlciA9IDA7CisJZW50cnkxLnZlY3RvciA9IDA7CisKKwlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTEpOworCisJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKKwlzYXZlX2ZyZXFfc2VsZWN0ID0gQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCk7CisJQ01PU19XUklURSgoc2F2ZV9mcmVxX3NlbGVjdCAmIH5SVENfUkFURV9TRUxFQ1QpIHwgMHg2LAorCQkgICBSVENfRlJFUV9TRUxFQ1QpOworCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sIHwgUlRDX1BJRSwgUlRDX0NPTlRST0wpOworCisJaSA9IDEwMDsKKwl3aGlsZSAoaS0tID4gMCkgeworCQltZGVsYXkoMTApOworCQlpZiAoKENNT1NfUkVBRChSVENfSU5UUl9GTEFHUykgJiBSVENfUEYpID09IFJUQ19QRikKKwkJCWkgLT0gMTA7CisJfQorCisJQ01PU19XUklURShzYXZlX2NvbnRyb2wsIFJUQ19DT05UUk9MKTsKKwlDTU9TX1dSSVRFKHNhdmVfZnJlcV9zZWxlY3QsIFJUQ19GUkVRX1NFTEVDVCk7CisJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKKworCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MCk7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZV90aW1lcl9waW5fMSBfX2luaXRkYXRhOworLyogQWN0dWFsbHkgdGhlIG5leHQgaXMgb2Jzb2xldGUsIGJ1dCBrZWVwIGl0IGZvciBwYXJhbm9pZCByZWFzb25zIC1BSyAqLworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV90aW1lcl9waW5fc2V0dXAoY2hhciAqYXJnKQoreworCWRpc2FibGVfdGltZXJfcGluXzEgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImRpc2FibGVfdGltZXJfcGluXzEiLCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cCk7CisKK2ludCB0aW1lcl90aHJvdWdoXzgyNTkgX19pbml0ZGF0YTsKKworLyoKKyAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKKyAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQorICogaXMgc28gc2NyZXd5LiAgVGhhbmtzIHRvIEJyaWFuIFBlcmtpbnMgZm9yIHRlc3RpbmcvaGFja2luZyB0aGlzIGJlYXN0CisgKiBmYW5hdGljYWxseSBvbiBoaXMgdHJ1bHkgYnVnZ3kgYm9hcmQuCisgKgorICogRklYTUU6IHJlYWxseSBuZWVkIHRvIHJldmFtcCB0aGlzIGZvciBhbGwgcGxhdGZvcm1zLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3RpbWVyKHZvaWQpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoMCk7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwlpbnQgY3B1ID0gYm9vdF9jcHVfaWQ7CisJaW50IGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBub19waW4xID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qCisJICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKKwkgKi8KKwlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwlhc3NpZ25faXJxX3ZlY3RvcigwLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpOworCisJLyoKKwkgKiBBcyBJUlEwIGlzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIDgyNTlBLCB0aGUgdmlydHVhbAorCSAqIHdpcmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIHRoZSBsb2NhbCBBUElDLiAgQWxzbworCSAqIHRpbWVyIGludGVycnVwdHMgbmVlZCB0byBiZSBhY2tub3dsZWRnZWQgbWFudWFsbHkgaW4KKwkgKiB0aGUgODI1OUEgZm9yIHRoZSBpODI0ODlEWCB3aGVuIHVzaW5nIHRoZSBOTUkKKwkgKiB3YXRjaGRvZyBhcyB0aGF0IEFQSUMgdHJlYXRzIE5NSXMgYXMgbGV2ZWwtdHJpZ2dlcmVkLgorCSAqIFRoZSBBRU9JIG1vZGUgd2lsbCBmaW5pc2ggdGhlbSBpbiB0aGUgODI1OUEKKwkgKiBhdXRvbWF0aWNhbGx5LgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7CisJaW5pdF84MjU5QSgxKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJeworCQl1bnNpZ25lZCBpbnQgdmVyOworCisJCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odmVyKTsKKwkJdGltZXJfYWNrID0gKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQyAmJiAhQVBJQ19JTlRFR1JBVEVEKHZlcikpOworCX0KKyNlbmRpZgorCisJcGluMSAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0lOVCk7CisJYXBpYzEgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9JTlQpOworCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKKwlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOworCisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYICIKKwkJICAgICJhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCisJCSAgICBjZmctPnZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKKworCS8qCisJICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKKwkgKiBJL08gQVBJQyBpbnB1dCBmcm9tIHRoZSBjYXNjYWRlZCA4MjU5QSBhcyB0aGUgdGltZXIKKwkgKiBpbnRlcnJ1cHQgaW5wdXQuICBTbyBqdXN0IGluIGNhc2UsIGlmIG9ubHkgb25lIHBpbgorCSAqIHdhcyBmb3VuZCBhYm92ZSwgdHJ5IGl0IGJvdGggZGlyZWN0bHkgYW5kIHRocm91Z2ggdGhlCisJICogODI1OUEuCisJICovCisJaWYgKHBpbjEgPT0gLTEpIHsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7CisjZW5kaWYKKwkJcGluMSA9IHBpbjI7CisJCWFwaWMxID0gYXBpYzI7CisJCW5vX3BpbjEgPSAxOworCX0gZWxzZSBpZiAocGluMiA9PSAtMSkgeworCQlwaW4yID0gcGluMTsKKwkJYXBpYzIgPSBhcGljMTsKKwl9CisKKwlpZiAocGluMSAhPSAtMSkgeworCQkvKgorCQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPworCQkgKi8KKwkJaWYgKG5vX3BpbjEpIHsKKwkJCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgYXBpYzEsIHBpbjEpOworCQkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzEsIHBpbjEsIGNmZy0+dmVjdG9yKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGZvciBlZGdlIHRyaWdnZXIsIHNldHVwX0lPX0FQSUNfaXJxIGFscmVhZHkKKwkJCSAqIGxlYXZlIGl0IHVubWFza2VkLgorCQkJICogc28gb25seSBuZWVkIHRvIHVubWFzayBpZiBpdCBpcyBsZXZlbC10cmlnZ2VyCisJCQkgKiBkbyB3ZSByZWFsbHkgaGF2ZSBsZXZlbCB0cmlnZ2VyIHRpbWVyPworCQkJICovCisJCQlpbnQgaWR4OworCQkJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpYzEsIHBpbjEsIG1wX0lOVCk7CisJCQlpZiAoaWR4ICE9IC0xICYmIGlycV90cmlnZ2VyKGlkeCkpCisJCQkJdW5tYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7CisJCX0KKwkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCQkJc2V0dXBfbm1pKCk7CisJCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJCX0KKwkJCWlmIChkaXNhYmxlX3RpbWVyX3Bpbl8xID4gMCkKKwkJCQljbGVhcl9JT19BUElDX3BpbigwLCBwaW4xKTsKKwkJCWdvdG8gb3V0OworCQl9CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQlwYW5pYygidGltZXIgZG9lc24ndCB3b3JrIHRocm91Z2ggSW50ZXJydXB0LXJlbWFwcGVkIElPLUFQSUMiKTsKKyNlbmRpZgorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7CisJCWlmICghbm9fcGluMSkKKwkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiAiCisJCQkJICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7CisKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyICIKKwkJCSAgICAiKElSUTApIHRocm91Z2ggdGhlIDgyNTlBIC4uLlxuIik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkJICAgICIuLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLlxuIiwgYXBpYzIsIHBpbjIpOworCQkvKgorCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKKwkJICovCisJCXJlcGxhY2VfcGluX2F0X2lycV9jcHUoY2ZnLCBjcHUsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CisJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMyLCBwaW4yLCBjZmctPnZlY3Rvcik7CisJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgeworCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7CisJCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOworCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgeworCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOworCQkJCXNldHVwX25taSgpOworCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKgorCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCisJCSAqLworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7CisJfQorCisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgeworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCisJCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7CisJCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOworCX0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJdGltZXJfYWNrID0gMDsKKyNlbmRpZgorCisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCisJCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKKworCWxhcGljX3JlZ2lzdGVyX2ludHIoMCwgZGVzYyk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CS8qIEZpeGVkIG1vZGUgKi8KKwllbmFibGVfODI1OUFfaXJxKDApOworCisJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZGlzYWJsZV84MjU5QV9pcnEoMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQuXG4iKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLlxuIik7CisKKwlpbml0XzgyNTlBKDApOworCW1ha2VfODI1OUFfaXJxKDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CisKKwl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7CisKKwlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOworCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCisJCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbi5cbiIpOworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFRyYWRpdGlvbmFsbHkgSVNBIElSUTIgaXMgdGhlIGNhc2NhZGUgSVJRLCBhbmQgaXMgbm90IGF2YWlsYWJsZQorICogdG8gZGV2aWNlcy4gIEhvd2V2ZXIgdGhlcmUgbWF5IGJlIGFuIEkvTyBBUElDIHBpbiBhdmFpbGFibGUgZm9yCisgKiB0aGlzIGludGVycnVwdCByZWdhcmRsZXNzLiAgVGhlIHBpbiBtYXkgYmUgbGVmdCB1bmNvbm5lY3RlZCwgYnV0CisgKiB0eXBpY2FsbHkgaXQgd2lsbCBiZSByZXVzZWQgYXMgYW4gRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IGZvcgorICogdGhlIG1hc3RlciA4MjU5QS4gIEluIHRoZSBNUFMgY2FzZSBzdWNoIGEgcGluIHdpbGwgbm9ybWFsbHkgYmUKKyAqIHJlcG9ydGVkIGFzIGFuIEV4dElOVCBpbnRlcnJ1cHQgaW4gdGhlIE1QIHRhYmxlLiAgV2l0aCBBQ1BJCisgKiB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIEV4dElOVCBpbnRlcnJ1cHRzLCBhbmQgaW4gdGhlIGFic2VuY2UKKyAqIG9mIGFuIG92ZXJyaWRlIGl0IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgSVNBIEkvTyBBUElDCisgKiBpbnRlcnJ1cHQsIHRoYXQgaXMgZWRnZS10cmlnZ2VyZWQgYW5kIHVubWFza2VkIGJ5IGRlZmF1bHQuICBXZQorICogdXNlZCB0byBkbyB0aGlzLCBidXQgaXQgY2F1c2VkIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcyBiZWNhdXNlCisgKiBvZiB0aGUgTk1JIHdhdGNoZG9nIGFuZCBzb21ldGltZXMgSVJRMCBvZiB0aGUgODI1NCB0aW1lciB1c2luZworICogdGhlIHNhbWUgRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IHRvIGRyaXZlIHRoZSBsb2NhbCBBUElDIG9mIHRoZQorICogYm9vdHN0cmFwIHByb2Nlc3Nvci4gIFRoZXJlZm9yZSB3ZSByZWZyYWluIGZyb20gcm91dGluZyBJUlEyIHRvCisgKiB0aGUgSS9PIEFQSUMgaW4gYWxsIGNhc2VzIG5vdy4gIE5vIGFjdHVhbCBkZXZpY2Ugc2hvdWxkIHJlcXVlc3QKKyAqIGl0IGFueXdheS4gIC0tbWFjcm8KKyAqLworI2RlZmluZSBQSUNfSVJRUwkoMSA8PCBQSUNfQ0FTQ0FERV9JUikKKwordm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQyh2b2lkKQoreworCisJLyoKKwkgKiBjYWxsaW5nIGVuYWJsZV9JT19BUElDKCkgaXMgbW92ZWQgdG8gc2V0dXBfbG9jYWxfQVBJQyBmb3IgQlAKKwkgKi8KKworCWlvX2FwaWNfaXJxcyA9IH5QSUNfSVJRUzsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7CisJLyoKKyAgICAgICAgICogU2V0IHVwIElPLUFQSUMgSVJRIHJvdXRpbmcuCisgICAgICAgICAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoIWFjcGlfaW9hcGljKQorCQlzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKCk7CisjZW5kaWYKKwlzeW5jX0FyYl9JRHMoKTsKKwlzZXR1cF9JT19BUElDX2lycXMoKTsKKwlpbml0X0lPX0FQSUNfdHJhcHMoKTsKKwljaGVja190aW1lcigpOworfQorCisvKgorICogICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lLiBJZiB3ZSBkaWRudCBmaW5kIGFueQorICogICAgICBBUElDIGJ1Z3MgdGhlbiB3ZSBjYW4gYWxsb3cgdGhlIG1vZGlmeSBmYXN0IHBhdGgKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBpb19hcGljX2J1Z19maW5hbGl6ZSh2b2lkKQoreworCWlmIChzaXNfYXBpY19idWcgPT0gLTEpCisJCXNpc19hcGljX2J1ZyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW9fYXBpY19idWdfZmluYWxpemUpOworCitzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgeworCXN0cnVjdCBzeXNfZGV2aWNlIGRldjsKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeVswXTsKK307CitzdGF0aWMgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICogbXBfaW9hcGljX2RhdGFbTUFYX0lPX0FQSUNTXTsKKworc3RhdGljIGludCBpb2FwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqZGF0YTsKKwlpbnQgaTsKKworCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7CisJZW50cnkgPSBkYXRhLT5lbnRyeTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSArKywgZW50cnkgKysgKQorCQkqZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShkZXYtPmlkLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlvYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCWludCBpOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKKwllbnRyeSA9IGRhdGEtPmVudHJ5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChkZXYtPmlkLCAwKTsKKwlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1tkZXYtPmlkXS5hcGljaWQpIHsKKwkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2Rldi0+aWRdLmFwaWNpZDsKKwkJaW9fYXBpY193cml0ZShkZXYtPmlkLCAwLCByZWdfMDAucmF3KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSsrKQorCQlpb2FwaWNfd3JpdGVfZW50cnkoZGV2LT5pZCwgaSwgZW50cnlbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGlvYXBpY19zeXNkZXZfY2xhc3MgPSB7CisJLm5hbWUgPSAiaW9hcGljIiwKKwkuc3VzcGVuZCA9IGlvYXBpY19zdXNwZW5kLAorCS5yZXN1bWUgPSBpb2FwaWNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luaXRfc3lzZnModm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldjsKKwlpbnQgaSwgc2l6ZSwgZXJyb3I7CisKKwllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmaW9hcGljX3N5c2Rldl9jbGFzcyk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrICkgeworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBzeXNfZGV2aWNlKSArIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0KKwkJCSogc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KTsKKwkJbXBfaW9hcGljX2RhdGFbaV0gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIW1wX2lvYXBpY19kYXRhW2ldKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlkZXYgPSAmbXBfaW9hcGljX2RhdGFbaV0tPmRldjsKKwkJZGV2LT5pZCA9IGk7CisJCWRldi0+Y2xzID0gJmlvYXBpY19zeXNkZXZfY2xhc3M7CisJCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKGRldik7CisJCWlmIChlcnJvcikgeworCQkJa2ZyZWUobXBfaW9hcGljX2RhdGFbaV0pOworCQkJbXBfaW9hcGljX2RhdGFbaV0gPSBOVUxMOworCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXNwZW5kL3Jlc3VtZSBJT0FQSUMgJWRcbiIsIGkpOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKGlvYXBpY19pbml0X3N5c2ZzKTsKKworc3RhdGljIGludCBucl9pcnFzX2dzaSA9IE5SX0lSUVNfTEVHQUNZOworLyoKKyAqIER5bmFtaWMgaXJxIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRpb24KKyAqLwordW5zaWduZWQgaW50IGNyZWF0ZV9pcnFfbnIodW5zaWduZWQgaW50IGlycV93YW50KQoreworCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGludCBuZXc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnX25ldyA9IE5VTEw7CisJaW50IGNwdSA9IGJvb3RfY3B1X2lkOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzY19uZXcgPSBOVUxMOworCisJaXJxID0gMDsKKwlpZiAoaXJxX3dhbnQgPCBucl9pcnFzX2dzaSkKKwkJaXJxX3dhbnQgPSBucl9pcnFzX2dzaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCWZvciAobmV3ID0gaXJxX3dhbnQ7IG5ldyA8IG5yX2lycXM7IG5ldysrKSB7CisJCWRlc2NfbmV3ID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KG5ldywgY3B1KTsKKwkJaWYgKCFkZXNjX25ldykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOworCQkJY29udGludWU7CisJCX0KKwkJY2ZnX25ldyA9IGRlc2NfbmV3LT5jaGlwX2RhdGE7CisKKwkJaWYgKGNmZ19uZXctPnZlY3RvciAhPSAwKQorCQkJY29udGludWU7CisJCWlmIChfX2Fzc2lnbl9pcnFfdmVjdG9yKG5ldywgY2ZnX25ldywgYXBpYy0+dGFyZ2V0X2NwdXMoKSkgPT0gMCkKKwkJCWlycSA9IG5ldzsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoaXJxID4gMCkgeworCQlkeW5hbWljX2lycV9pbml0KGlycSk7CisJCS8qIHJlc3RvcmUgaXQsIGluIGNhc2UgZHluYW1pY19pcnFfaW5pdCBjbGVhciBpdCAqLworCQlpZiAoZGVzY19uZXcpCisJCQlkZXNjX25ldy0+Y2hpcF9kYXRhID0gY2ZnX25ldzsKKwl9CisJcmV0dXJuIGlycTsKK30KKworaW50IGNyZWF0ZV9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7CisJaW50IGlycTsKKworCWlycV93YW50ID0gbnJfaXJxc19nc2k7CisJaXJxID0gY3JlYXRlX2lycV9ucihpcnFfd2FudCk7CisKKwlpZiAoaXJxID09IDApCisJCWlycSA9IC0xOworCisJcmV0dXJuIGlycTsKK30KKwordm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwkvKiBzdG9yZSBpdCwgaW4gY2FzZSBkeW5hbWljX2lycV9jbGVhbnVwIGNsZWFyIGl0ICovCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWR5bmFtaWNfaXJxX2NsZWFudXAoaXJxKTsKKwkvKiBjb25uZWN0IGJhY2sgaXJxX2NmZyAqLworCWlmIChkZXNjKQorCQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWZyZWVfaXJ0ZShpcnEpOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogTVNJIG1lc3NhZ2UgY29tcG9zaXRpb24KKyAqLworI2lmZGVmIENPTkZJR19QQ0lfTVNJCitzdGF0aWMgaW50IG1zaV9jb21wb3NlX21zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBlcnI7CisJdW5zaWduZWQgZGVzdDsKKworCWlmIChkaXNhYmxlX2FwaWMpCisJCXJldHVybiAtRU5YSU87CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgeworCQlzdHJ1Y3QgaXJ0ZSBpcnRlOworCQlpbnQgaXJfaW5kZXg7CisJCXUxNiBzdWJfaGFuZGxlOworCisJCWlyX2luZGV4ID0gbWFwX2lycV90b19pcnRlX2hhbmRsZShpcnEsICZzdWJfaGFuZGxlKTsKKwkJQlVHX09OKGlyX2luZGV4ID09IC0xKTsKKworCQltZW1zZXQgKCZpcnRlLCAwLCBzaXplb2YoaXJ0ZSkpOworCisJCWlydGUucHJlc2VudCA9IDE7CisJCWlydGUuZHN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOworCQlpcnRlLnRyaWdnZXJfbW9kZSA9IDA7IC8qIGVkZ2UgKi8KKwkJaXJ0ZS5kbHZyeV9tb2RlID0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CisJCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0KTsKKworCQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKKworCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOworCQltc2ctPmRhdGEgPSBzdWJfaGFuZGxlOworCQltc2ctPmFkZHJlc3NfbG8gPSBNU0lfQUREUl9CQVNFX0xPIHwgTVNJX0FERFJfSVJfRVhUX0lOVCB8CisJCQkJICBNU0lfQUREUl9JUl9TSFYgfAorCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgxKGlyX2luZGV4KSB8CisJCQkJICBNU0lfQUREUl9JUl9JTkRFWDIoaXJfaW5kZXgpOworCX0gZWxzZQorI2VuZGlmCisJeworCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOworCQltc2ctPmFkZHJlc3NfbG8gPQorCQkJTVNJX0FERFJfQkFTRV9MTyB8CisJCQkoKGFwaWMtPmlycV9kZXN0X21vZGUgPT0gMCkgPworCQkJCU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTSUNBTDoKKwkJCQlNU0lfQUREUl9ERVNUX01PREVfTE9HSUNBTCkgfAorCQkJKChhcGljLT5pcnFfZGVsaXZlcnlfbW9kZSAhPSBkZXN0X0xvd2VzdFByaW8pID8KKwkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFU6CisJCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJKSB8CisJCQlNU0lfQUREUl9ERVNUX0lEKGRlc3QpOworCisJCW1zZy0+ZGF0YSA9CisJCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfAorCQkJTVNJX0RBVEFfTEVWRUxfQVNTRVJUIHwKKwkJCSgoYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/CisJCQkJTVNJX0RBVEFfREVMSVZFUllfRklYRUQ6CisJCQkJTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJKSB8CisJCQlNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCX0KKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQgc2V0X21zaV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKworCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKKwlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCQlyZXR1cm47CisKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwlyZWFkX21zaV9tc2dfZGVzYyhkZXNjLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCXdyaXRlX21zaV9tc2dfZGVzYyhkZXNjLCAmbXNnKTsKK30KKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyoKKyAqIE1pZ3JhdGUgdGhlIE1TSSBpcnEgdG8gYW5vdGhlciBjcHVtYXNrLiBUaGlzIG1pZ3JhdGlvbiBpcworICogZG9uZSBpbiB0aGUgcHJvY2VzcyBjb250ZXh0IHVzaW5nIGludGVycnVwdC1yZW1hcHBpbmcgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitpcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJc3RydWN0IGlydGUgaXJ0ZTsKKworCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKKwkJcmV0dXJuOworCisJZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOworCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCisJCXJldHVybjsKKworCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOworCisJLyoKKwkgKiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgSVJURSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24gYW5kIHZlY3Rvci4KKwkgKi8KKwltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKKworCS8qCisJICogQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHRoZSBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgYXJyaXZpbmcKKwkgKiBhdCB0aGUgbmV3IGRlc3RpbmF0aW9uLiBTbywgdGltZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cworCSAqIHZlY3RvciBhbGxvY2F0aW9uLgorCSAqLworCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpCisJCXNlbmRfY2xlYW51cF92ZWN0b3IoY2ZnKTsKK30KKworI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKgorICogSVJRIENoaXAgZm9yIE1TSSBQQ0kvUENJLVgvUENJLUV4cHJlc3MgRGV2aWNlcywKKyAqIHdoaWNoIGltcGxlbWVudCB0aGUgTVNJIG9yIE1TSS1YIENhcGFiaWxpdHkgU3RydWN0dXJlLgorICovCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0geworCS5uYW1lCQk9ICJQQ0ktTVNJIiwKKwkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAorCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKKwkuYWNrCQk9IGFja19hcGljX2VkZ2UsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkJPSBzZXRfbXNpX2lycV9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJfY2hpcCA9IHsKKwkubmFtZQkJPSAiSVItUENJLU1TSSIsCisJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKKwkubWFzawkJPSBtYXNrX21zaV9pcnEsCisJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkJPSBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKKy8qCisgKiBNYXAgdGhlIFBDSSBkZXYgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVtYXBwaW5nIGhhcmR3YXJlIHVuaXQKKyAqIGFuZCBhbGxvY2F0ZSAnbnZlYycgY29uc2VjdXRpdmUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyaWVzCisgKiBpbiBpdC4KKyAqLworc3RhdGljIGludCBtc2lfYWxsb2NfaXJ0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxLCBpbnQgbnZlYykKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCWludCBpbmRleDsKKworCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOworCWlmICghaW9tbXUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiVW5hYmxlIHRvIG1hcCBQQ0kgJXMgdG8gaW9tbXVcbiIsIHBjaV9uYW1lKGRldikpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgbnZlYyk7CisJaWYgKGluZGV4IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgJWQgSVJURSBmb3IgUENJICVzXG4iLCBudmVjLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwlyZXR1cm4gaW5kZXg7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYywgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKworCXJldCA9IG1zaV9jb21wb3NlX21zZyhkZXYsIGlycSwgJm1zZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzZXRfaXJxX21zaShpcnEsIG1zaWRlc2MpOworCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJCS8qCisJCSAqIGlycSBtaWdyYXRpb24gaW4gcHJvY2VzcyBjb250ZXh0CisJCSAqLworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfaXJfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCX0gZWxzZQorI2VuZGlmCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CisKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImlycSAlZCBmb3IgTVNJL01TSS1YXG4iLCBpcnEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhcmNoX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXQsIHN1Yl9oYW5kbGU7CisJc3RydWN0IG1zaV9kZXNjICptc2lkZXNjOworCXVuc2lnbmVkIGludCBpcnFfd2FudDsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IDA7CisJaW50IGluZGV4ID0gMDsKKyNlbmRpZgorCisJaXJxX3dhbnQgPSBucl9pcnFzX2dzaTsKKwlzdWJfaGFuZGxlID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zaWRlc2MsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQpOworCQlpZiAoaXJxID09IDApCisJCQlyZXR1cm4gLTE7CisJCWlycV93YW50ID0gaXJxICsgMTsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQlnb3RvIG5vX2lyOworCisJCWlmICghc3ViX2hhbmRsZSkgeworCQkJLyoKKwkJCSAqIGFsbG9jYXRlIHRoZSBjb25zZWN1dGl2ZSBibG9jayBvZiBJUlRFJ3MKKwkJCSAqIGZvciAnbnZlYycKKwkJCSAqLworCQkJaW5kZXggPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgbnZlYyk7CisJCQlpZiAoaW5kZXggPCAwKSB7CisJCQkJcmV0ID0gaW5kZXg7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOworCQkJaWYgKCFpb21tdSkgeworCQkJCXJldCA9IC1FTk9FTlQ7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCS8qCisJCQkgKiBzZXR1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBpcnEgYW5kIHRoZSBJUlRFCisJCQkgKiBiYXNlIGluZGV4LCB0aGUgc3ViX2hhbmRsZSBwb2ludGluZyB0byB0aGUKKwkJCSAqIGFwcHJvcHJpYXRlIGludGVycnVwdCByZW1hcCB0YWJsZSBlbnRyeS4KKwkJCSAqLworCQkJc2V0X2lydGVfaXJxKGlycSwgaW9tbXUsIGluZGV4LCBzdWJfaGFuZGxlKTsKKwkJfQorbm9faXI6CisjZW5kaWYKKwkJcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIG1zaWRlc2MsIGlycSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3ViX2hhbmRsZSsrOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZGVzdHJveV9pcnEoaXJxKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRlc3Ryb3lfaXJxKGlycSk7Cit9CisKKyNpZmRlZiBDT05GSUdfRE1BUgorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCisJZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOworCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCisJCXJldHVybjsKKworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCWRtYXJfbXNpX3JlYWQoaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0cnVjdCBpcnFfY2hpcCBkbWFyX21zaV90eXBlID0geworCS5uYW1lID0gIkRNQVJfTVNJIiwKKwkudW5tYXNrID0gZG1hcl9tc2lfdW5tYXNrLAorCS5tYXNrID0gZG1hcl9tc2lfbWFzaywKKwkuYWNrID0gYWNrX2FwaWNfZWRnZSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IGRtYXJfbXNpX3NldF9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIgPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKK2ludCBhcmNoX3NldHVwX2RtYXJfbXNpKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwlyZXQgPSBtc2lfY29tcG9zZV9tc2coTlVMTCwgaXJxLCAmbXNnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmRtYXJfbXNpX3R5cGUsIGhhbmRsZV9lZGdlX2lycSwKKwkJImVkZ2UiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hQRVRfVElNRVIKKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGhwZXRfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCisJZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOworCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCisJCXJldHVybjsKKworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCWhwZXRfbXNpX3JlYWQoaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCWhwZXRfbXNpX3dyaXRlKGlycSwgJm1zZyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0cnVjdCBpcnFfY2hpcCBocGV0X21zaV90eXBlID0geworCS5uYW1lID0gIkhQRVRfTVNJIiwKKwkudW5tYXNrID0gaHBldF9tc2lfdW5tYXNrLAorCS5tYXNrID0gaHBldF9tc2lfbWFzaywKKwkuYWNrID0gYWNrX2FwaWNfZWRnZSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IGhwZXRfbXNpX3NldF9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIgPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKK2ludCBhcmNoX3NldHVwX2hwZXRfbXNpKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwlyZXQgPSBtc2lfY29tcG9zZV9tc2coTlVMTCwgaXJxLCAmbXNnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWhwZXRfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaHBldF9tc2lfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLAorCQkiZWRnZSIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCisvKgorICogSHlwZXJ0cmFuc3BvcnQgaW50ZXJydXB0IHN1cHBvcnQKKyAqLworI2lmZGVmIENPTkZJR19IVF9JUlEKKworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIHZvaWQgdGFyZ2V0X2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZGVzdCwgdTggdmVjdG9yKQoreworCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKKwlmZXRjaF9odF9pcnFfbXNnKGlycSwgJm1zZyk7CisKKwltc2cuYWRkcmVzc19sbyAmPSB+KEhUX0lSUV9MT1dfVkVDVE9SX01BU0sgfCBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7CisJbXNnLmFkZHJlc3NfaGkgJj0gfihIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spOworCisJbXNnLmFkZHJlc3NfbG8gfD0gSFRfSVJRX0xPV19WRUNUT1IodmVjdG9yKSB8IEhUX0lSUV9MT1dfREVTVF9JRChkZXN0KTsKKwltc2cuYWRkcmVzc19oaSB8PSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOworCisJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOworfQorCitzdGF0aWMgdm9pZCBzZXRfaHRfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKworCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKKwlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCQlyZXR1cm47CisKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwl0YXJnZXRfaHRfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOworfQorCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBodF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiUENJLUhUIiwKKwkubWFzawkJPSBtYXNrX2h0X2lycSwKKwkudW5tYXNrCQk9IHVubWFza19odF9pcnEsCisJLmFjawkJPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKK2ludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IGVycjsKKworCWlmIChkaXNhYmxlX2FwaWMpCisJCXJldHVybiAtRU5YSU87CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpOworCWlmICghZXJyKSB7CisJCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKKwkJdW5zaWduZWQgZGVzdDsKKworCQlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwKKwkJCQkJCSAgICBhcGljLT50YXJnZXRfY3B1cygpKTsKKworCQltc2cuYWRkcmVzc19oaSA9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CisKKwkJbXNnLmFkZHJlc3NfbG8gPQorCQkJSFRfSVJRX0xPV19CQVNFIHwKKwkJCUhUX0lSUV9MT1dfREVTVF9JRChkZXN0KSB8CisJCQlIVF9JUlFfTE9XX1ZFQ1RPUihjZmctPnZlY3RvcikgfAorCQkJKChhcGljLT5pcnFfZGVzdF9tb2RlID09IDApID8KKwkJCQlIVF9JUlFfTE9XX0RNX1BIWVNJQ0FMIDoKKwkJCQlIVF9JUlFfTE9XX0RNX0xPR0lDQUwpIHwKKwkJCUhUX0lSUV9MT1dfUlFFT0lfRURHRSB8CisJCQkoKGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgorCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCkgfAorCQkJSFRfSVJRX0xPV19JUlFfTUFTS0VEOworCisJCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZodF9pcnFfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiaXJxICVkIGZvciBIVFxuIiwgaXJxKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZiAvKiBDT05GSUdfSFRfSVJRICovCisKKyNpZmRlZiBDT05GSUdfWDg2X1VWCisvKgorICogUmUtdGFyZ2V0IHRoZSBpcnEgdG8gdGhlIHNwZWNpZmllZCBDUFUgYW5kIGVuYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkCisgKiBvbiB0aGUgc3BlY2lmaWVkIGJsYWRlIHRvIGFsbG93IHRoZSBzZW5kaW5nIG9mIE1TSXMgdG8gdGhlIHNwZWNpZmllZCBDUFUuCisgKi8KK2ludCBhcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqaXJxX25hbWUsIHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUsIGludCBtbXJfYmxhZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmVsaWdpYmxlX2NwdSA9IGNwdW1hc2tfb2YoY3B1KTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBtbXJfcG5vZGU7CisJdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7CisJc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKworCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBlbGlnaWJsZV9jcHUpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnV2X2lycV9jaGlwLCBoYW5kbGVfcGVyY3B1X2lycSwKKwkJCQkgICAgICBpcnFfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCW1tcl92YWx1ZSA9IDA7CisJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOworCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwllbnRyeS0+dmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKKwllbnRyeS0+ZGVzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKKwllbnRyeS0+cG9sYXJpdHkgPSAwOworCWVudHJ5LT50cmlnZ2VyID0gMDsKKwllbnRyeS0+bWFzayA9IDA7CisJZW50cnktPmRlc3QgPSBhcGljLT5jcHVfbWFza190b19hcGljaWQoZWxpZ2libGVfY3B1KTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKKworCXJldHVybiBpcnE7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgTU1SIGxvY2F0ZWQgb24gdGhlIHNwZWNpZmllZCBibGFkZSBzbyB0aGF0IE1TSXMgYXJlCisgKiBsb25nZXIgYWxsb3dlZCB0byBiZSBzZW50LgorICovCit2b2lkIGFyY2hfZGlzYWJsZV91dl9pcnEoaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgbW1yX3Bub2RlOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSkgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWVudHJ5LT5tYXNrID0gMTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyAoaW50IGlvYXBpYykKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7Cit9CisKK3ZvaWQgX19pbml0IHByb2JlX25yX2lycXNfZ3NpKHZvaWQpCit7CisJaW50IG5yID0gMDsKKworCW5yID0gYWNwaV9wcm9iZV9nc2koKTsKKwlpZiAobnIgPiBucl9pcnFzX2dzaSkgeworCQlucl9pcnFzX2dzaSA9IG5yOworCX0gZWxzZSB7CisJCS8qIGZvciBhY3BpPW9mZiBvciBhY3BpIGlzIG5vdCBjb21waWxlZCBpbiAqLworCQlpbnQgaWR4OworCisJCW5yID0gMDsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBucl9pb2FwaWNzOyBpZHgrKykKKwkJCW5yICs9IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KSArIDE7CisKKwkJaWYgKG5yID4gbnJfaXJxc19nc2kpCisJCQlucl9pcnFzX2dzaSA9IG5yOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJucl9pcnFzX2dzaTogJWRcbiIsIG5yX2lycXNfZ3NpKTsKK30KKworI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCitpbnQgX19pbml0IGFyY2hfcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCWludCBucjsKKworCWlmIChucl9pcnFzID4gKE5SX1ZFQ1RPUlMgKiBucl9jcHVfaWRzKSkKKwkJbnJfaXJxcyA9IE5SX1ZFQ1RPUlMgKiBucl9jcHVfaWRzOworCisJbnIgPSBucl9pcnFzX2dzaSArIDggKiBucl9jcHVfaWRzOworI2lmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpIHx8IGRlZmluZWQoQ09ORklHX0hUX0lSUSkKKwkvKgorCSAqIGZvciBNU0kgYW5kIEhUIGR5biBpcnEKKwkgKi8KKwluciArPSBucl9pcnFzX2dzaSAqIDE2OworI2VuZGlmCisJaWYgKG5yIDwgbnJfaXJxcykKKwkJbnJfaXJxcyA9IG5yOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSS1iYXNlZCBJT0FQSUMgQ29uZmlndXJhdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19BQ1BJCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitpbnQgX19pbml0IGlvX2FwaWNfZ2V0X3VuaXF1ZV9pZChpbnQgaW9hcGljLCBpbnQgYXBpY19pZCkKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7CisJc3RhdGljIHBoeXNpZF9tYXNrX3QgYXBpY19pZF9tYXAgPSBQSFlTSURfTUFTS19OT05FOworCXBoeXNpZF9tYXNrX3QgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGkgPSAwOworCisJLyoKKwkgKiBUaGUgUDQgcGxhdGZvcm0gc3VwcG9ydHMgdXAgdG8gMjU2IEFQSUMgSURzIG9uIHR3byBzZXBhcmF0ZSBBUElDCisJICogYnVzZXMgKG9uZSBmb3IgTEFQSUNzLCBvbmUgZm9yIElPQVBJQ3MpLCB3aGVyZSBwcmVkZWNlc3NvcnMgb25seQorCSAqIHN1cHBvcnRzIHVwIHRvIDE2IG9uIG9uZSBzaGFyZWQgQVBJQyBidXMuCisJICoKKwkgKiBUQkQ6IEV4cGFuZCBMQVBJQy9JT0FQSUMgc3VwcG9ydCBvbiBQNC1jbGFzcyBzeXN0ZW1zIHRvIHRha2UgZnVsbAorCSAqICAgICAgYWR2YW50YWdlIG9mIG5ldyBBUElDIGJ1cyBhcmNoaXRlY3R1cmUuCisJICovCisKKwlpZiAocGh5c2lkc19lbXB0eShhcGljX2lkX21hcCkpCisJCWFwaWNfaWRfbWFwID0gYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJaWYgKGFwaWNfaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIklPQVBJQ1slZF06IEludmFsaWQgYXBpY19pZCAlZCwgdHJ5aW5nICIKKwkJCSIlZFxuIiwgaW9hcGljLCBhcGljX2lkLCByZWdfMDAuYml0cy5JRCk7CisJCWFwaWNfaWQgPSByZWdfMDAuYml0cy5JRDsKKwl9CisKKwkvKgorCSAqIEV2ZXJ5IEFQSUMgaW4gYSBzeXN0ZW0gbXVzdCBoYXZlIGEgdW5pcXVlIElEIG9yIHdlIGdldCBsb3RzIG9mIG5pY2UKKwkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoYXBpYy0+Y2hlY2tfYXBpY2lkX3VzZWQoYXBpY19pZF9tYXAsIGFwaWNfaWQpKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKSB7CisJCQlpZiAoIWFwaWMtPmNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBpKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpID09IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkKKwkJCXBhbmljKCJNYXggYXBpY19pZCBleGNlZWRlZCFcbiIpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIklPQVBJQ1slZF06IGFwaWNfaWQgJWQgYWxyZWFkeSB1c2VkLCAiCisJCQkidHJ5aW5nICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQsIGkpOworCisJCWFwaWNfaWQgPSBpOworCX0KKworCXRtcCA9IGFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudChhcGljX2lkKTsKKwlwaHlzaWRzX29yKGFwaWNfaWRfbWFwLCBhcGljX2lkX21hcCwgdG1wKTsKKworCWlmIChyZWdfMDAuYml0cy5JRCAhPSBhcGljX2lkKSB7CisJCXJlZ18wMC5iaXRzLklEID0gYXBpY19pZDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJaW9fYXBpY193cml0ZShpb2FwaWMsIDAsIHJlZ18wMC5yYXcpOworCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmIChyZWdfMDAuYml0cy5JRCAhPSBhcGljX2lkKSB7CisJCQlwcmludGsoIklPQVBJQ1slZF06IFVuYWJsZSB0byBjaGFuZ2UgYXBpY19pZCFcbiIsIGlvYXBpYyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTworCQkJIklPQVBJQ1slZF06IEFzc2lnbmVkIGFwaWNfaWQgJWRcbiIsIGlvYXBpYywgYXBpY19pZCk7CisKKwlyZXR1cm4gYXBpY19pZDsKK30KKworaW50IF9faW5pdCBpb19hcGljX2dldF92ZXJzaW9uKGludCBpb2FwaWMpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZWdfMDEuYml0cy52ZXJzaW9uOworfQorI2VuZGlmCisKK2ludCBpb19hcGljX3NldF9wY2lfcm91dGluZyAoaW50IGlvYXBpYywgaW50IHBpbiwgaW50IGlycSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlpbnQgY3B1ID0gYm9vdF9jcHVfaWQ7CisKKwlpZiAoIUlPX0FQSUNfSVJRKGlycSkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCxLRVJOX0VSUiAiSU9BUElDWyVkXTogSW52YWxpZCByZWZlcmVuY2UgdG8gSVJRIDBcbiIsCisJCQlpb2FwaWMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KGlycSwgY3B1KTsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgJWRcbiIsIGlycSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSVJRcyA8IDE2IGFyZSBhbHJlYWR5IGluIHRoZSBpcnFfMl9waW5bXSBtYXAKKwkgKi8KKwlpZiAoaXJxID49IE5SX0lSUVNfTEVHQUNZKSB7CisJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBpb2FwaWMsIHBpbik7CisJfQorCisJc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwgZGVzYywgdHJpZ2dlcmluZywgcG9sYXJpdHkpOworCisJcmV0dXJuIDA7Cit9CisKKworaW50IGFjcGlfZ2V0X292ZXJyaWRlX2lycShpbnQgYnVzX2lycSwgaW50ICp0cmlnZ2VyLCBpbnQgKnBvbGFyaXR5KQoreworCWludCBpOworCisJaWYgKHNraXBfaW9hcGljX3NldHVwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKKwkJaWYgKG1wX2lycXNbaV0uaXJxdHlwZSA9PSBtcF9JTlQgJiYKKwkJICAgIG1wX2lycXNbaV0uc3JjYnVzaXJxID09IGJ1c19pcnEpCisJCQlicmVhazsKKwlpZiAoaSA+PSBtcF9pcnFfZW50cmllcykKKwkJcmV0dXJuIC0xOworCisJKnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpKTsKKwkqcG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgaXMgb25seSBhIGhlbHBlciBmb3IgdGhlIGkzODYgc21wIGJvb3QgcHJvY2VzcyB3aGVyZQorICogd2UgbmVlZCB0byByZXByb2dyYW0gdGhlIGlvcmVkdGJscyB0byBjYXRlciBmb3IgdGhlIGNwdXMgd2hpY2ggaGF2ZSBjb21lIG9ubGluZQorICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBhcGljLT50YXJnZXRfY3B1cygpCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQoreworCWludCBwaW4sIGlvYXBpYywgaXJxLCBpcnFfZW50cnk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7CisKKwlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKKwkJcmV0dXJuOworCisJZm9yIChpb2FwaWMgPSAwOyBpb2FwaWMgPCBucl9pb2FwaWNzOyBpb2FwaWMrKykgeworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbaW9hcGljXTsgcGluKyspIHsKKwkJCWlycV9lbnRyeSA9IGZpbmRfaXJxX2VudHJ5KGlvYXBpYywgcGluLCBtcF9JTlQpOworCQkJaWYgKGlycV9lbnRyeSA9PSAtMSkKKwkJCQljb250aW51ZTsKKwkJCWlycSA9IHBpbl8yX2lycShpcnFfZW50cnksIGlvYXBpYywgcGluKTsKKworCQkJLyogc2V0dXBfSU9fQVBJQ19pcnFzIGNvdWxkIGZhaWwgdG8gZ2V0IHZlY3RvciBmb3Igc29tZSBkZXZpY2UKKwkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290CisJCQkgKiBjcHUgaXMgb25saW5lLgorCQkJICovCisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwkJCWlmICghY2ZnLT52ZWN0b3IpIHsKKwkJCQlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLCBkZXNjLAorCQkJCQkJICBpcnFfdHJpZ2dlcihpcnFfZW50cnkpLAorCQkJCQkJICBpcnFfcG9sYXJpdHkoaXJxX2VudHJ5KSk7CisJCQkJY29udGludWU7CisKKwkJCX0KKworCQkJLyoKKwkJCSAqIEhvbm91ciBhZmZpbml0aWVzIHdoaWNoIGhhdmUgYmVlbiBzZXQgaW4gZWFybHkgYm9vdAorCQkJICovCisJCQlpZiAoZGVzYy0+c3RhdHVzICYKKwkJCSAgICAoSVJRX05PX0JBTEFOQ0lORyB8IElSUV9BRkZJTklUWV9TRVQpKQorCQkJCW1hc2sgPSBkZXNjLT5hZmZpbml0eTsKKwkJCWVsc2UKKwkJCQltYXNrID0gYXBpYy0+dGFyZ2V0X2NwdXMoKTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCQlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOworCQkJZWxzZQorI2VuZGlmCisJCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKKwkJfQorCisJfQorfQorI2VuZGlmCisKKyNkZWZpbmUgSU9BUElDX1JFU09VUkNFX05BTUVfU0laRSAxMQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzb3VyY2VzOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlICogX19pbml0IGlvYXBpY19zZXR1cF9yZXNvdXJjZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG47CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY2hhciAqbWVtOworCWludCBpOworCisJaWYgKG5yX2lvYXBpY3MgPD0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwluID0gSU9BUElDX1JFU09VUkNFX05BTUVfU0laRSArIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpOworCW4gKj0gbnJfaW9hcGljczsKKworCW1lbSA9IGFsbG9jX2Jvb3RtZW0obik7CisJcmVzID0gKHZvaWQgKiltZW07CisKKwlpZiAobWVtICE9IE5VTEwpIHsKKwkJbWVtICs9IHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogbnJfaW9hcGljczsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCQlyZXNbaV0ubmFtZSA9IG1lbTsKKwkJCXJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCQkJc3ByaW50ZihtZW0sICAiSU9BUElDICV1IiwgaSk7CisJCQltZW0gKz0gSU9BUElDX1JFU09VUkNFX05BTUVfU0laRTsKKwkJfQorCX0KKworCWlvYXBpY19yZXNvdXJjZXMgPSByZXM7CisKKwlyZXR1cm4gcmVzOworfQorCit2b2lkIF9faW5pdCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaW9hcGljX3BoeXMsIGlkeCA9IEZJWF9JT19BUElDX0JBU0VfMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXM7CisJaW50IGk7CisKKwlpb2FwaWNfcmVzID0gaW9hcGljX3NldHVwX3Jlc291cmNlcygpOworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJaWYgKHNtcF9mb3VuZF9jb25maWcpIHsKKwkJCWlvYXBpY19waHlzID0gbXBfaW9hcGljc1tpXS5hcGljYWRkcjsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCQlpZiAoIWlvYXBpY19waHlzKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJXQVJOSU5HOiBib2d1cyB6ZXJvIElPLUFQSUMgIgorCQkJCSAgICAgICAiYWRkcmVzcyBmb3VuZCBpbiBNUFRBQkxFLCAiCisJCQkJICAgICAgICJkaXNhYmxpbmcgSU8vQVBJQyBzdXBwb3J0IVxuIik7CisJCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7CisJCQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAxOworCQkJCWdvdG8gZmFrZV9pb2FwaWNfcGFnZTsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19YODZfMzIKK2Zha2VfaW9hcGljX3BhZ2U6CisjZW5kaWYKKwkJCWlvYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOworCQkJaW9hcGljX3BoeXMgPSBfX3BhKGlvYXBpY19waHlzKTsKKwkJfQorCQlzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBpb2FwaWNfcGh5cyk7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKKwkJCSAgICAibWFwcGVkIElPQVBJQyB0byAlMDhseCAoJTA4bHgpXG4iLAorCQkJICAgIF9fZml4X3RvX3ZpcnQoaWR4KSwgaW9hcGljX3BoeXMpOworCQlpZHgrKzsKKworCQlpZiAoaW9hcGljX3JlcyAhPSBOVUxMKSB7CisJCQlpb2FwaWNfcmVzLT5zdGFydCA9IGlvYXBpY19waHlzOworCQkJaW9hcGljX3Jlcy0+ZW5kID0gaW9hcGljX3BoeXMgKyAoNCAqIDEwMjQpIC0gMTsKKwkJCWlvYXBpY19yZXMrKzsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBpb2FwaWNfcmVzb3VyY2VzOworCisJaWYgKCFyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIklPIEFQSUMgcmVzb3VyY2VzIGNvdWxkIGJlIG5vdCBiZSBhbGxvY2F0ZWQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcik7CisJCXIrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogSW5zZXJ0IHRoZSBJTyBBUElDIHJlc291cmNlcyBhZnRlciBQQ0kgaW5pdGlhbGl6YXRpb24gaGFzIG9jY3VyZWQgdG8gaGFuZGxlCisgKiBJTyBBUElDUyB0aGF0IGFyZSBtYXBwZWQgaW4gb24gYSBCQVIgaW4gUENJIHNwYWNlLiAqLworbGF0ZV9pbml0Y2FsbChpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pcGkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjU0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pcGkuYwpAQCAtMCwwICsxLDE2NCBAQAorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCit2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9waHlzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIEhhY2suIFRoZSBjbHVzdGVyZWQgQVBJQyBhZGRyZXNzaW5nIG1vZGUgZG9lc24ndCBhbGxvdyB1cyB0byBzZW5kCisJICogdG8gYW4gYXJiaXRyYXJ5IG1hc2ssIHNvIEkgZG8gYSB1bmljYXN0IHRvIGVhY2ggQ1BVIGluc3RlYWQuCisJICogLSBtYmxpZ2gKKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlfX2RlZmF1bHRfc2VuZF9JUElfZGVzdF9maWVsZChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLAorCQkJCXF1ZXJ5X2NwdSksIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX3BoeXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCQkgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IHF1ZXJ5X2NwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogU2VlIEhhY2sgY29tbWVudCBhYm92ZSAqLworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKKwkJaWYgKHF1ZXJ5X2NwdSA9PSB0aGlzX2NwdSkKKwkJCWNvbnRpbnVlOworCQlfX2RlZmF1bHRfc2VuZF9JUElfZGVzdF9maWVsZChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLAorCQkJCSBxdWVyeV9jcHUpLCB2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfbG9naWNhbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJCSBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHF1ZXJ5X2NwdTsKKworCS8qCisJICogSGFjay4gVGhlIGNsdXN0ZXJlZCBBUElDIGFkZHJlc3NpbmcgbW9kZSBkb2Vzbid0IGFsbG93IHVzIHRvIHNlbmQKKwkgKiB0byBhbiBhcmJpdHJhcnkgbWFzaywgc28gSSBkbyBhIHVuaWNhc3RzIHRvIGVhY2ggQ1BVIGluc3RlYWQuIFRoaXMKKwkgKiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZG8gMSBtZXNzYWdlIHBlciBjbHVzdGVyIElEIC0gbWJsaWdoCisJICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykKKwkJX19kZWZhdWx0X3NlbmRfSVBJX2Rlc3RfZmllbGQoCisJCQlhcGljLT5jcHVfdG9fbG9naWNhbF9hcGljaWQocXVlcnlfY3B1KSwgdmVjdG9yLAorCQkJYXBpYy0+ZGVzdF9sb2dpY2FsKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfbG9naWNhbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJCSBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHF1ZXJ5X2NwdTsKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKiBTZWUgSGFjayBjb21tZW50IGFib3ZlICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQorCQkJY29udGludWU7CisJCV9fZGVmYXVsdF9zZW5kX0lQSV9kZXN0X2ZpZWxkKAorCQkJYXBpYy0+Y3B1X3RvX2xvZ2ljYWxfYXBpY2lkKHF1ZXJ5X2NwdSksIHZlY3RvciwKKwkJCWFwaWMtPmRlc3RfbG9naWNhbCk7CisJCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisKKy8qCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBvbiBzbWFsbGVyIG1hY2hpbmVzLgorICovCit2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19sb2dpY2FsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCVdBUk5fT04obWFzayAmIH5jcHVtYXNrX2JpdHMoY3B1X29ubGluZV9tYXNrKVswXSk7CisJX19kZWZhdWx0X3NlbmRfSVBJX2Rlc3RfZmllbGQobWFzaywgdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBkZWZhdWx0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwkvKgorCSAqIGlmIHRoZXJlIGFyZSBubyBvdGhlciBDUFVzIGluIHRoZSBzeXN0ZW0gdGhlbiB3ZSBnZXQgYW4gQVBJQyBzZW5kCisJICogZXJyb3IgaWYgd2UgdHJ5IHRvIGJyb2FkY2FzdCwgdGh1cyBhdm9pZCBzZW5kaW5nIElQSXMgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghKG51bV9vbmxpbmVfY3B1cygpID4gMSkpCisJCXJldHVybjsKKworCV9fZGVmYXVsdF9sb2NhbF9zZW5kX0lQSV9hbGxidXRzZWxmKHZlY3Rvcik7Cit9CisKK3ZvaWQgZGVmYXVsdF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwlfX2RlZmF1bHRfbG9jYWxfc2VuZF9JUElfYWxsKHZlY3Rvcik7Cit9CisKK3ZvaWQgZGVmYXVsdF9zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCit7CisJX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9TRUxGLCB2ZWN0b3IsIGFwaWMtPmRlc3RfbG9naWNhbCk7Cit9CisKKy8qIG11c3QgY29tZSBhZnRlciB0aGUgc2VuZF9JUEkgZnVuY3Rpb25zIGFib3ZlIGZvciBpbmxpbmluZyAqLworc3RhdGljIGludCBjb252ZXJ0X2FwaWNpZF90b19jcHUoaW50IGFwaWNfaWQpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQlpZiAocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgaSkgPT0gYXBpY19pZCkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlpbnQgYXBpY2lkLCBjcHVpZDsKKworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpKQorCQlyZXR1cm4gMDsKKworCWFwaWNpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkKKwkJcmV0dXJuIDA7CisKKwljcHVpZCA9IGNvbnZlcnRfYXBpY2lkX3RvX2NwdShhcGljaWQpOworCisJcmV0dXJuIGNwdWlkID49IDAgPyBjcHVpZCA6IDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmYWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC0wLDAgKzEsNTY0IEBACisvKgorICogIE5NSSB3YXRjaGRvZyBzdXBwb3J0IG9uIEFQSUMgc3lzdGVtcworICoKKyAqICBTdGFydGVkIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoKKyAqICBGaXhlczoKKyAqICBNaWthZWwgUGV0dGVyc3Nvbgk6IEFNRCBLNyBzdXBwb3J0IGZvciBsb2NhbCBBUElDIE5NSSB3YXRjaGRvZy4KKyAqICBNaWthZWwgUGV0dGVyc3Nvbgk6IFBvd2VyIE1hbmFnZW1lbnQgZm9yIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLgorICogIE1pa2FlbCBQZXR0ZXJzc29uCTogUGVudGl1bSA0IHN1cHBvcnQgZm9yIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLgorICogIFBhdmVsIE1hY2hlayBhbmQKKyAqICBNaWthZWwgUGV0dGVyc3Nvbgk6IFBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuIERpc2FibGUvZW5hYmxlIEFQSS4KKyAqLworCisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorCisjaW5jbHVkZSA8YXNtL21jZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hfdHJhcHMuaD4KKworaW50IHVua25vd25fbm1pX3BhbmljOworaW50IG5taV93YXRjaGRvZ19lbmFibGVkOworCitzdGF0aWMgY3B1bWFza190IGJhY2t0cmFjZV9tYXNrID0gQ1BVX01BU0tfTk9ORTsKKworLyogbm1pX2FjdGl2ZToKKyAqID4wOiB0aGUgbGFwaWMgTk1JIHdhdGNoZG9nIGlzIGFjdGl2ZSwgYnV0IGNhbiBiZSBkaXNhYmxlZAorICogPDA6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaGFzIG5vdCBiZWVuIHNldCB1cCwgYW5kIGNhbm5vdAorICogICAgIGJlIGVuYWJsZWQKKyAqICAwOiB0aGUgbGFwaWMgTk1JIHdhdGNoZG9nIGlzIGRpc2FibGVkLCBidXQgY2FuIGJlIGVuYWJsZWQKKyAqLworYXRvbWljX3Qgbm1pX2FjdGl2ZSA9IEFUT01JQ19JTklUKDApOwkJLyogb3Byb2ZpbGUgdXNlcyB0aGlzICovCitFWFBPUlRfU1lNQk9MKG5taV9hY3RpdmUpOworCit1bnNpZ25lZCBpbnQgbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7CitFWFBPUlRfU1lNQk9MKG5taV93YXRjaGRvZyk7CisKK3N0YXRpYyBpbnQgcGFuaWNfb25fdGltZW91dDsKKworc3RhdGljIHVuc2lnbmVkIGludCBubWlfaHogPSBIWjsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzaG9ydCwgd2RfZW5hYmxlZCk7CitzdGF0aWMgaW50IGVuZGZsYWcgX19pbml0ZGF0YTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X25taV9jb3VudChpbnQgY3B1KQoreworCXJldHVybiBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLl9fbm1pX2NvdW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBtY2VfaW5fcHJvZ3Jlc3Modm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0UpCisJcmV0dXJuIGF0b21pY19yZWFkKCZtY2VfZW50cnkpID4gMDsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKgorICogVGFrZSB0aGUgbG9jYWwgYXBpYyB0aW1lciBhbmQgUElUL0hQRVQgaW50byBhY2NvdW50LiBXZSBkb24ndAorICoga25vdyB3aGljaCBvbmUgaXMgYWN0aXZlLCB3aGVuIHdlIGhhdmUgaGlnaHJlcy9keW50aWNrIG9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90aW1lcl9pcnFzKGludCBjcHUpCit7CisJcmV0dXJuIHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzICsKKwkJcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnEwX2lycXM7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHVzZWQgYnkgTk1JX0xPQ0FMX0FQSUMgZG9uJ3QgdHJpZ2dlciB3aGVuCisgKiB0aGUgQ1BVIGlzIGlkbGUuIFRvIG1ha2Ugc3VyZSB0aGUgTk1JIHdhdGNoZG9nIHJlYWxseSB0aWNrcyBvbiBhbGwKKyAqIENQVXMgZHVyaW5nIHRoZSB0ZXN0IG1ha2UgdGhlbSBidXN5LgorICovCitzdGF0aWMgX19pbml0IHZvaWQgbm1pX2NwdV9idXN5KHZvaWQgKmRhdGEpCit7CisJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CisJLyoKKwkgKiBJbnRlbnRpb25hbGx5IGRvbid0IHVzZSBjcHVfcmVsYXggaGVyZS4gVGhpcyBpcworCSAqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlYWxseSB0aWNrcywKKwkgKiBldmVuIGlmIHRoZXJlIGlzIGEgc2ltdWxhdG9yIG9yIHNpbWlsYXIgdGhhdCBjYXRjaGVzIHRoZQorCSAqIHBhdXNlIGluc3RydWN0aW9uLiBPbiBhIHJlYWwgSFQgbWFjaGluZSB0aGlzIGlzIGZpbmUgYmVjYXVzZQorCSAqIGFsbCBvdGhlciBDUFVzIGFyZSBidXN5IHdpdGggInVzZWxlc3MiIGRlbGF5IGxvb3BzIGFuZCBkb24ndAorCSAqIGNhcmUgaWYgdGhleSBnZXQgc29tZXdoYXQgbGVzcyBjeWNsZXMuCisJICovCisJd2hpbGUgKGVuZGZsYWcgPT0gMCkKKwkJbWIoKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCByZXBvcnRfYnJva2VuX25taShpbnQgY3B1LCBpbnQgKnByZXZfbm1pX2NvdW50KQoreworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HCisJCSJXQVJOSU5HOiBDUFUjJWQ6IE5NSSBhcHBlYXJzIHRvIGJlIHN0dWNrICglZC0+JWQpIVxuIiwKKwkJCWNwdSwgcHJldl9ubWlfY291bnRbY3B1XSwgZ2V0X25taV9jb3VudChjcHUpKTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byBidWd6aWxsYS5rZXJuZWwub3JnLFxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORworCQkiYW5kIGF0dGFjaCB0aGUgb3V0cHV0IG9mIHRoZSAnZG1lc2cnIGNvbW1hbmQuXG4iKTsKKworCXBlcl9jcHUod2RfZW5hYmxlZCwgY3B1KSA9IDA7CisJYXRvbWljX2RlYygmbm1pX2FjdGl2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYWNwaV9ubWlfZGlzYWJsZSh2b2lkICpfX3VudXNlZCkKK3sKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQpOworfQorCitpbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKQoreworCXVuc2lnbmVkIGludCAqcHJldl9ubWlfY291bnQ7CisJaW50IGNwdTsKKworCWlmICghbm1pX3dhdGNoZG9nX2FjdGl2ZSgpIHx8ICFhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkpCisJCXJldHVybiAwOworCisJcHJldl9ubWlfY291bnQgPSBrbWFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmV2X25taV9jb3VudCkKKwkJZ290byBlcnJvcjsKKworCXByaW50ayhLRVJOX0lORk8gIlRlc3RpbmcgTk1JIHdhdGNoZG9nIC4uLiAiKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQorCQlzbXBfY2FsbF9mdW5jdGlvbihubWlfY3B1X2J1c3ksICh2b2lkICopJmVuZGZsYWcsIDApOworI2VuZGlmCisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlwcmV2X25taV9jb3VudFtjcHVdID0gZ2V0X25taV9jb3VudChjcHUpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwltZGVsYXkoKDIwICogMTAwMCkgLyBubWlfaHopOyAvKiB3YWl0IDIwIHRpY2tzICovCisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoIXBlcl9jcHUod2RfZW5hYmxlZCwgY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ2V0X25taV9jb3VudChjcHUpIC0gcHJldl9ubWlfY291bnRbY3B1XSA8PSA1KQorCQkJcmVwb3J0X2Jyb2tlbl9ubWkoY3B1LCBwcmV2X25taV9jb3VudCk7CisJfQorCWVuZGZsYWcgPSAxOworCWlmICghYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKSB7CisJCWtmcmVlKHByZXZfbm1pX2NvdW50KTsKKwkJYXRvbWljX3NldCgmbm1pX2FjdGl2ZSwgLTEpOworCQlnb3RvIGVycm9yOworCX0KKwlwcmludGsoIk9LLlxuIik7CisKKwkvKgorCSAqIG5vdyB0aGF0IHdlIGtub3cgaXQgd29ya3Mgd2UgY2FuIHJlZHVjZSBOTUkgZnJlcXVlbmN5IHRvCisJICogc29tZXRoaW5nIG1vcmUgcmVhc29uYWJsZTsgbWFrZXMgYSBkaWZmZXJlbmNlIGluIHNvbWUgY29uZmlncworCSAqLworCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCisJCW5taV9oeiA9IGxhcGljX2FkanVzdF9ubWlfaHooMSk7CisKKwlrZnJlZShwcmV2X25taV9jb3VudCk7CisJcmV0dXJuIDA7CitlcnJvcjoKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCWlmICghdGltZXJfdGhyb3VnaF84MjU5KQorCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7CisJCW9uX2VhY2hfY3B1KF9fYWNwaV9ubWlfZGlzYWJsZSwgTlVMTCwgMSk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXRpbWVyX2FjayA9IDA7CisjZW5kaWYKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX25taV93YXRjaGRvZyhjaGFyICpzdHIpCit7CisJdW5zaWduZWQgaW50IG5taTsKKworCWlmICghc3RybmNtcChzdHIsICJwYW5pYyIsIDUpKSB7CisJCXBhbmljX29uX3RpbWVvdXQgPSAxOworCQlzdHIgPSBzdHJjaHIoc3RyLCAnLCcpOworCQlpZiAoIXN0cikKKwkJCXJldHVybiAxOworCQkrK3N0cjsKKwl9CisKKwlpZiAoIXN0cm5jbXAoc3RyLCAibGFwaWMiLCA1KSkKKwkJbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7CisJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiaW9hcGljIiwgNikpCisJCW5taV93YXRjaGRvZyA9IE5NSV9JT19BUElDOworCWVsc2UgeworCQlnZXRfb3B0aW9uKCZzdHIsICZubWkpOworCQlpZiAobm1pID49IE5NSV9JTlZBTElEKQorCQkJcmV0dXJuIDA7CisJCW5taV93YXRjaGRvZyA9IG5taTsKKwl9CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5taV93YXRjaGRvZz0iLCBzZXR1cF9ubWlfd2F0Y2hkb2cpOworCisvKgorICogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydAorICovCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgbm1pX3BtX2FjdGl2ZTsgLyogbm1pX2FjdGl2ZSBiZWZvcmUgc3VzcGVuZCAqLworCitzdGF0aWMgaW50IGxhcGljX25taV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkvKiBvbmx5IENQVTAgZ29lcyBoZXJlLCBvdGhlciBDUFVzIHNob3VsZCBiZSBvZmZsaW5lICovCisJbm1pX3BtX2FjdGl2ZSA9IGF0b21pY19yZWFkKCZubWlfYWN0aXZlKTsKKwlzdG9wX2FwaWNfbm1pX3dhdGNoZG9nKE5VTEwpOworCUJVR19PTihhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgIT0gMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFwaWNfbm1pX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCS8qIG9ubHkgQ1BVMCBnb2VzIGhlcmUsIG90aGVyIENQVXMgc2hvdWxkIGJlIG9mZmxpbmUgKi8KKwlpZiAobm1pX3BtX2FjdGl2ZSA+IDApIHsKKwkJc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7CisJCXRvdWNoX25taV93YXRjaGRvZygpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgbm1pX3N5c2NsYXNzID0geworCS5uYW1lCQk9ICJsYXBpY19ubWkiLAorCS5yZXN1bWUJCT0gbGFwaWNfbm1pX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IGxhcGljX25taV9zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9sYXBpY19ubWkgPSB7CisJLmlkCT0gMCwKKwkuY2xzCT0gJm5taV9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbGFwaWNfbm1pX3N5c2ZzKHZvaWQpCit7CisJaW50IGVycm9yOworCisJLyoKKwkgKiBzaG91bGQgcmVhbGx5IGJlIGEgQlVHX09OIGJ1dCBiL2MgdGhpcyBpcyBhbgorCSAqIGluaXQgY2FsbCwgaXQganVzdCBkb2Vzbid0IHdvcmsuICAtZGN6CisJICovCisJaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfTE9DQUxfQVBJQykKKwkJcmV0dXJuIDA7CisKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3Rlcigmbm1pX3N5c2NsYXNzKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2xhcGljX25taSk7CisJcmV0dXJuIGVycm9yOworfQorCisvKiBtdXN0IGNvbWUgYWZ0ZXIgdGhlIGxvY2FsIEFQSUMncyBkZXZpY2VfaW5pdGNhbGwoKSAqLworbGF0ZV9pbml0Y2FsbChpbml0X2xhcGljX25taV9zeXNmcyk7CisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHZvaWQgX19hY3BpX25taV9lbmFibGUodm9pZCAqX191bnVzZWQpCit7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fTk1JKTsKK30KKworLyoKKyAqIEVuYWJsZSB0aW1lciBiYXNlZCBOTUlzIG9uIGFsbCBDUFVzOgorICovCit2b2lkIGFjcGlfbm1pX2VuYWJsZSh2b2lkKQoreworCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgJiYgbm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKQorCQlvbl9lYWNoX2NwdShfX2FjcGlfbm1pX2VuYWJsZSwgTlVMTCwgMSk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRpbWVyIGJhc2VkIE5NSXMgb24gYWxsIENQVXM6CisgKi8KK3ZvaWQgYWNwaV9ubWlfZGlzYWJsZSh2b2lkKQoreworCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgJiYgbm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKQorCQlvbl9lYWNoX2NwdShfX2FjcGlfbm1pX2Rpc2FibGUsIE5VTEwsIDEpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgc29vbiB0aGUgTEFQSUMgTk1JIHdhdGNoZG9nIGRyaXZlciBoYXMgZXZlcnl0aGluZworICogaW4gcGxhY2UgYW5kIGl0J3MgcmVhZHkgdG8gY2hlY2sgaWYgdGhlIE5NSXMgYmVsb25nIHRvIHRoZSBOTUkgd2F0Y2hkb2cKKyAqLwordm9pZCBjcHVfbm1pX3NldF93ZF9lbmFibGVkKHZvaWQpCit7CisJX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9IDE7Cit9CisKK3ZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2codm9pZCAqdW51c2VkKQoreworCWlmIChfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwkvKiBjaGVhcCBoYWNrIHRvIHN1cHBvcnQgc3VzcGVuZC9yZXN1bWUgKi8KKwkvKiBpZiBjcHUwIGlzIG5vdCBhY3RpdmUgbmVpdGhlciBzaG91bGQgdGhlIG90aGVyIGNwdXMgKi8KKwlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDAgJiYgYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDw9IDApCisJCXJldHVybjsKKworCXN3aXRjaCAobm1pX3dhdGNoZG9nKSB7CisJY2FzZSBOTUlfTE9DQUxfQVBJQzoKKwkJaWYgKGxhcGljX3dhdGNoZG9nX2luaXQobm1pX2h6KSA8IDApIHsKKwkJCV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPSAwOworCQkJcmV0dXJuOworCQl9CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgTk1JX0lPX0FQSUM6CisJCV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPSAxOworCQlhdG9taWNfaW5jKCZubWlfYWN0aXZlKTsKKwl9Cit9CisKK3ZvaWQgc3RvcF9hcGljX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCit7CisJLyogb25seSBzdXBwb3J0IExPQ0FMIGFuZCBJTyBBUElDcyBmb3Igbm93ICovCisJaWYgKCFubWlfd2F0Y2hkb2dfYWN0aXZlKCkpCisJCXJldHVybjsKKwlpZiAoX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9PSAwKQorCQlyZXR1cm47CisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykKKwkJbGFwaWNfd2F0Y2hkb2dfc3RvcCgpOworCWVsc2UKKwkJX19hY3BpX25taV9kaXNhYmxlKE5VTEwpOworCV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPSAwOworCWF0b21pY19kZWMoJm5taV9hY3RpdmUpOworfQorCisvKgorICogdGhlIGJlc3Qgd2F5IHRvIGRldGVjdCB3aGV0aGVyIGEgQ1BVIGhhcyBhICdoYXJkIGxvY2t1cCcgcHJvYmxlbQorICogaXMgdG8gY2hlY2sgaXQncyBsb2NhbCBBUElDIHRpbWVyIElSUSBjb3VudHMuIElmIHRoZXkgYXJlIG5vdAorICogY2hhbmdpbmcgdGhlbiB0aGF0IENQVSBoYXMgc29tZSBwcm9ibGVtLgorICoKKyAqIGFzIHRoZXNlIHdhdGNoZG9nIE5NSSBJUlFzIGFyZSBnZW5lcmF0ZWQgb24gZXZlcnkgQ1BVLCB3ZSBvbmx5CisgKiBoYXZlIHRvIGNoZWNrIHRoZSBjdXJyZW50IHByb2Nlc3Nvci4KKyAqCisgKiBzaW5jZSBOTUlzIGRvbid0IGxpc3RlbiB0byBfYW55XyBsb2Nrcywgd2UgaGF2ZSB0byBiZSBleHRyZW1lbHkKKyAqIGNhcmVmdWwgbm90IHRvIHJlbHkgb24gdW5zYWZlIHZhcmlhYmxlcy4gVGhlIHByaW50ayBtaWdodCBsb2NrCisgKiB1cCB0aG91Z2gsIHNvIHdlIGhhdmUgdG8gYnJlYWsgdXAgYW55IGNvbnNvbGUgbG9ja3MgZmlyc3QgLi4uCisgKiBbd2hlbiB0aGVyZSB3aWxsIGJlIG1vcmUgdHR5LXJlbGF0ZWQgbG9ja3MsIGJyZWFrIHRoZW0gdXAgaGVyZSB0b28hXQorICovCisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgbGFzdF9pcnFfc3VtKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBhbGVydF9jb3VudGVyKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIG5taV90b3VjaCk7CisKK3ZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpCit7CisJaWYgKG5taV93YXRjaGRvZ19hY3RpdmUoKSkgeworCQl1bnNpZ25lZCBjcHU7CisKKwkJLyoKKwkJICogVGVsbCBvdGhlciBDUFVzIHRvIHJlc2V0IHRoZWlyIGFsZXJ0IGNvdW50ZXJzLiBXZSBjYW5ub3QKKwkJICogZG8gaXQgb3Vyc2VsdmVzIGJlY2F1c2UgdGhlIGFsZXJ0IGNvdW50IGluY3JlYXNlIGlzIG5vdAorCQkgKiBhdG9taWMuCisJCSAqLworCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJCWlmIChwZXJfY3B1KG5taV90b3VjaCwgY3B1KSAhPSAxKQorCQkJCXBlcl9jcHUobm1pX3RvdWNoLCBjcHUpID0gMTsKKwkJfQorCX0KKworCS8qCisJICogVGlja2xlIHRoZSBzb2Z0bG9ja3VwIGRldGVjdG9yIHRvbzoKKwkgKi8KKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Cit9CitFWFBPUlRfU1lNQk9MKHRvdWNoX25taV93YXRjaGRvZyk7CisKK25vdHJhY2UgX19rcHJvYmVzIGludAorbm1pX3dhdGNoZG9nX3RpY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIHJlYXNvbikKK3sKKwkvKgorCSAqIFNpbmNlIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+IGlzIGFsd2F5cyBvbiB0aGUgc3RhY2ssIGFuZCB3ZQorCSAqIGFsd2F5cyBzd2l0Y2ggdGhlIHN0YWNrIE5NSS1hdG9taWNhbGx5LCBpdCdzIHNhZmUgdG8gdXNlCisJICogc21wX3Byb2Nlc3Nvcl9pZCgpLgorCSAqLworCXVuc2lnbmVkIGludCBzdW07CisJaW50IHRvdWNoZWQgPSAwOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IHJjID0gMDsKKworCS8qIGNoZWNrIGZvciBvdGhlciB1c2VycyBmaXJzdCAqLworCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkKKwkJCT09IE5PVElGWV9TVE9QKSB7CisJCXJjID0gMTsKKwkJdG91Y2hlZCA9IDE7CisJfQorCisJc3VtID0gZ2V0X3RpbWVyX2lycXMoY3B1KTsKKworCWlmIChfX2dldF9jcHVfdmFyKG5taV90b3VjaCkpIHsKKwkJX19nZXRfY3B1X3ZhcihubWlfdG91Y2gpID0gMDsKKwkJdG91Y2hlZCA9IDE7CisJfQorCisJaWYgKGNwdV9pc3NldChjcHUsIGJhY2t0cmFjZV9tYXNrKSkgeworCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwkvKiBTZXJpYWxpc2UgdGhlIHByaW50a3MgKi8KKworCQlzcGluX2xvY2soJmxvY2spOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJOTUkgYmFja3RyYWNlIGZvciBjcHUgJWRcbiIsIGNwdSk7CisJCWR1bXBfc3RhY2soKTsKKwkJc3Bpbl91bmxvY2soJmxvY2spOworCQljcHVfY2xlYXIoY3B1LCBiYWNrdHJhY2VfbWFzayk7CisJfQorCisJLyogQ291bGQgY2hlY2sgb29wc19pbl9wcm9ncmVzcyBoZXJlIHRvbywgYnV0IGl0J3Mgc2FmZXIgbm90IHRvICovCisJaWYgKG1jZV9pbl9wcm9ncmVzcygpKQorCQl0b3VjaGVkID0gMTsKKworCS8qIGlmIHRoZSBub25lIG9mIHRoZSB0aW1lcnMgaXNuJ3QgZmlyaW5nLCB0aGlzIGNwdSBpc24ndCBkb2luZyBtdWNoICovCisJaWYgKCF0b3VjaGVkICYmIF9fZ2V0X2NwdV92YXIobGFzdF9pcnFfc3VtKSA9PSBzdW0pIHsKKwkJLyoKKwkJICogQXlpZWUsIGxvb2tzIGxpa2UgdGhpcyBDUFUgaXMgc3R1Y2sgLi4uCisJCSAqIHdhaXQgYSBmZXcgSVJRcyAoNSBzZWNvbmRzKSBiZWZvcmUgZG9pbmcgdGhlIG9vcHMgLi4uCisJCSAqLworCQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlcikpOworCQlpZiAobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihhbGVydF9jb3VudGVyKSkgPT0gNSAqIG5taV9oeikKKwkJCS8qCisJCQkgKiBkaWVfbm1pIHdpbGwgcmV0dXJuIE9OTFkgaWYgTk9USUZZX1NUT1AgaGFwcGVucy4uCisJCQkgKi8KKwkJCWRpZV9ubWkoIkJVRzogTk1JIFdhdGNoZG9nIGRldGVjdGVkIExPQ0tVUCIsCisJCQkJcmVncywgcGFuaWNfb25fdGltZW91dCk7CisJfSBlbHNlIHsKKwkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOworCQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOworCX0KKworCS8qIHNlZSBpZiB0aGUgbm1pIHdhdGNoZG9nIHdlbnQgb2ZmICovCisJaWYgKCFfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpKQorCQlyZXR1cm4gcmM7CisJc3dpdGNoIChubWlfd2F0Y2hkb2cpIHsKKwljYXNlIE5NSV9MT0NBTF9BUElDOgorCQlyYyB8PSBsYXBpY193ZF9ldmVudChubWlfaHopOworCQlicmVhazsKKwljYXNlIE5NSV9JT19BUElDOgorCQkvKgorCQkgKiBkb24ndCBrbm93IGhvdyB0byBhY2N1cmF0ZWx5IGNoZWNrIGZvciB0aGlzLgorCQkgKiBqdXN0IGFzc3VtZSBpdCB3YXMgYSB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQKKwkJICogVGhpcyBtYXRjaGVzIHRoZSBvbGQgYmVoYXZpb3VyLgorCQkgKi8KKwkJcmMgPSAxOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCitzdGF0aWMgdm9pZCBlbmFibGVfaW9hcGljX25taV93YXRjaGRvZ19zaW5nbGUodm9pZCAqdW51c2VkKQoreworCV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPSAxOworCWF0b21pY19pbmMoJm5taV9hY3RpdmUpOworCV9fYWNwaV9ubWlfZW5hYmxlKE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfaW9hcGljX25taV93YXRjaGRvZyh2b2lkKQoreworCW9uX2VhY2hfY3B1KGVuYWJsZV9pb2FwaWNfbm1pX3dhdGNoZG9nX3NpbmdsZSwgTlVMTCwgMSk7CisJdG91Y2hfbm1pX3dhdGNoZG9nKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfaW9hcGljX25taV93YXRjaGRvZyh2b2lkKQoreworCW9uX2VhY2hfY3B1KHN0b3BfYXBpY19ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF91bmtub3duX25taV9wYW5pYyhjaGFyICpzdHIpCit7CisJdW5rbm93bl9ubWlfcGFuaWMgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgidW5rbm93bl9ubWlfcGFuaWMiLCBzZXR1cF91bmtub3duX25taV9wYW5pYyk7CisKK3N0YXRpYyBpbnQgdW5rbm93bl9ubWlfcGFuaWNfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpCit7CisJdW5zaWduZWQgY2hhciByZWFzb24gPSBnZXRfbm1pX3JlYXNvbigpOworCWNoYXIgYnVmWzY0XTsKKworCXNwcmludGYoYnVmLCAiTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4XG4iLCByZWFzb24pOworCWRpZV9ubWkoYnVmLCByZWdzLCAxKTsgLyogQWx3YXlzIHBhbmljIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHByb2MgaGFuZGxlciBmb3IgL3Byb2Mvc3lzL2tlcm5lbC9ubWkKKyAqLworaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQoreworCWludCBvbGRfc3RhdGU7CisKKwlubWlfd2F0Y2hkb2dfZW5hYmxlZCA9IChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPiAwKSA/IDEgOiAwOworCW9sZF9zdGF0ZSA9IG5taV93YXRjaGRvZ19lbmFibGVkOworCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CisJaWYgKCEhb2xkX3N0YXRlID09ICEhbm1pX3dhdGNoZG9nX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA8IDAgfHwgIW5taV93YXRjaGRvZ19hY3RpdmUoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiTk1JIHdhdGNoZG9nIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykgeworCQlpZiAobm1pX3dhdGNoZG9nX2VuYWJsZWQpCisJCQllbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisJCWVsc2UKKwkJCWRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisJfSBlbHNlIGlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKKwkJaWYgKG5taV93YXRjaGRvZ19lbmFibGVkKQorCQkJZW5hYmxlX2lvYXBpY19ubWlfd2F0Y2hkb2coKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pb2FwaWNfbm1pX3dhdGNoZG9nKCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIk5NSSB3YXRjaGRvZyBkb2Vzbid0IGtub3cgd2hhdCBoYXJkd2FyZSB0byB0b3VjaFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworaW50IGRvX25taV9jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJaWYgKHVua25vd25fbm1pX3BhbmljKQorCQlyZXR1cm4gdW5rbm93bl9ubWlfcGFuaWNfY2FsbGJhY2socmVncywgY3B1KTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCit2b2lkIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQoreworCWludCBpOworCisJYmFja3RyYWNlX21hc2sgPSBjcHVfb25saW5lX21hcDsKKwkvKiBXYWl0IGZvciB1cCB0byAxMCBzZWNvbmRzIGZvciBhbGwgQ1BVcyB0byBkbyB0aGUgYmFja3RyYWNlICovCisJZm9yIChpID0gMDsgaSA8IDEwICogMTAwMDsgaSsrKSB7CisJCWlmIChjcHVzX2VtcHR5KGJhY2t0cmFjZV9tYXNrKSkKKwkJCWJyZWFrOworCQltZGVsYXkoMSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyZmM2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKQEAgLTAsMCArMSw1NTcgQEAKKy8qCisgKiBXcml0dGVuIGJ5OiBQYXRyaWNpYSBHYXVnaGVuLCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElCTSBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8Z29uZUB1cy5pYm0uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL251bWFxLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vZTgyMC5oPgorI2luY2x1ZGUgPGFzbS9pcGkuaD4KKworI2RlZmluZQlNQl9UT19QQUdFUyhhZGRyKQkJKChhZGRyKSA8PCAoMjAgLSBQQUdFX1NISUZUKSkKKworaW50IGZvdW5kX251bWFxOworCisvKgorICogSGF2ZSB0byBtYXRjaCB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyaWVzIHRvIG1haW4gdGFibGUgZW50cmllcyBieSBjb3VudGVyCisgKiBoZW5jZSB0aGUgbXBjX3JlY29yZCB2YXJpYWJsZSAuLi4uIGNhbid0IHNlZSBhIGxlc3MgZGlzZ3VzdGluZyB3YXkgb2YKKyAqIGRvaW5nIHRoaXMgLi4uLgorICovCitzdHJ1Y3QgbXBjX3RyYW5zIHsKKwl1bnNpZ25lZCBjaGFyCQkJbXBjX3R5cGU7CisJdW5zaWduZWQgY2hhcgkJCXRyYW5zX2xlbjsKKwl1bnNpZ25lZCBjaGFyCQkJdHJhbnNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyCQkJdHJhbnNfcXVhZDsKKwl1bnNpZ25lZCBjaGFyCQkJdHJhbnNfZ2xvYmFsOworCXVuc2lnbmVkIGNoYXIJCQl0cmFuc19sb2NhbDsKKwl1bnNpZ25lZCBzaG9ydAkJCXRyYW5zX3Jlc2VydmVkOworfTsKKworLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KK3N0YXRpYyBpbnQJCQkJbXBjX3JlY29yZDsKKworc3RhdGljIHN0cnVjdCBtcGNfdHJhbnMJCQkqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV07CisKK2ludAkJCQkJbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU107CitpbnQJCQkJCW1wX2J1c19pZF90b19sb2NhbFtNQVhfTVBfQlVTU0VTXTsKK2ludAkJCQkJcXVhZF9sb2NhbF90b19tcF9idXNfaWRbTlJfQ1BVUy80XVs0XTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfcmVnaXN0ZXJfbm9kZShpbnQgbm9kZSwgc3RydWN0IHN5c19jZmdfZGF0YSAqc2NkKQoreworCXN0cnVjdCBlYWNocXVhZG1lbSAqZXEgPSBzY2QtPmVxICsgbm9kZTsKKworCW5vZGVfc2V0X29ubGluZShub2RlKTsKKworCS8qIENvbnZlcnQgdG8gcGFnZXMgKi8KKwlub2RlX3N0YXJ0X3Bmbltub2RlXSA9CisJCSBNQl9UT19QQUdFUyhlcS0+aGlfc2hyZF9tZW1fc3RhcnQgLSBlcS0+cHJpdl9tZW1fc2l6ZSk7CisKKwlub2RlX2VuZF9wZm5bbm9kZV0gPQorCQkgTUJfVE9fUEFHRVMoZXEtPmhpX3NocmRfbWVtX3N0YXJ0ICsgZXEtPmhpX3NocmRfbWVtX3NpemUpOworCisJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhub2RlLCBub2RlX3N0YXJ0X3Bmbltub2RlXSwKKwkJCQkJCW5vZGVfZW5kX3Bmbltub2RlXSk7CisKKwltZW1vcnlfcHJlc2VudChub2RlLCBub2RlX3N0YXJ0X3Bmbltub2RlXSwgbm9kZV9lbmRfcGZuW25vZGVdKTsKKworCW5vZGVfcmVtYXBfc2l6ZVtub2RlXSA9IG5vZGVfbWVtbWFwX3NpemVfYnl0ZXMobm9kZSwKKwkJCQkJbm9kZV9zdGFydF9wZm5bbm9kZV0sCisJCQkJCW5vZGVfZW5kX3Bmbltub2RlXSk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogc21wX2R1bXBfcWN0KCkKKyAqCisgKiBEZXNjcmlwdGlvbjogZ2V0cyBtZW1vcnkgbGF5b3V0IGZyb20gdGhlIHF1YWQgY29uZmlnIHRhYmxlLiAgVGhpcworICogZnVuY3Rpb24gYWxzbyB1cGRhdGVzIG5vZGVfb25saW5lX21hcCB3aXRoIHRoZSBub2RlcyAocXVhZHMpIHByZXNlbnQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfZHVtcF9xY3Qodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzX2NmZ19kYXRhICpzY2Q7CisJaW50IG5vZGU7CisKKwlzY2QgPSAodm9pZCAqKV9fdmEoU1lTX0NGR19EQVRBX1BSSVZfQUREUik7CisKKwlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOworCWZvcl9lYWNoX25vZGUobm9kZSkgeworCQlpZiAoc2NkLT5xdWFkc19wcmVzZW50MzFfMCAmICgxIDw8IG5vZGUpKQorCQkJbnVtYXFfcmVnaXN0ZXJfbm9kZShub2RlLCBzY2QpOworCX0KK30KKwordm9pZCBfX2NwdWluaXQgbnVtYXFfdHNjX2Rpc2FibGUodm9pZCkKK3sKKwlpZiAoIWZvdW5kX251bWFxKQorCQlyZXR1cm47CisKKwlpZiAobnVtX29ubGluZV9ub2RlcygpID4gMSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiTlVNQVE6IGRpc2FibGluZyBUU0NcbiIpOworCQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQyk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBudW1hcV9wcmVfdGltZV9pbml0KHZvaWQpCit7CisJbnVtYXFfdHNjX2Rpc2FibGUoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2VuZXJhdGVfbG9naWNhbF9hcGljaWQoaW50IHF1YWQsIGludCBwaHlzX2FwaWNpZCkKK3sKKwlyZXR1cm4gKHF1YWQgPDwgNCkgKyAocGh5c19hcGljaWQgPyBwaHlzX2FwaWNpZCA8PCAxIDogMSk7Cit9CisKKy8qIHg4Nl9xdWlya3MgbWVtYmVyICovCitzdGF0aWMgaW50IG1wY19hcGljX2lkKHN0cnVjdCBtcGNfY3B1ICptKQoreworCWludCBxdWFkID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX3F1YWQ7CisJaW50IGxvZ2ljYWxfYXBpY2lkID0gZ2VuZXJhdGVfbG9naWNhbF9hcGljaWQocXVhZCwgbS0+YXBpY2lkKTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJQcm9jZXNzb3IgIyVkICV1OiV1IEFQSUMgdmVyc2lvbiAlZCAocXVhZCAlZCwgYXBpYyAlZClcbiIsCisJCSBtLT5hcGljaWQsIChtLT5jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAorCQkobS0+Y3B1ZmVhdHVyZSAmIENQVV9NT0RFTF9NQVNLKSA+PiA0LAorCQkgbS0+YXBpY3ZlciwgcXVhZCwgbG9naWNhbF9hcGljaWQpOworCisJcmV0dXJuIGxvZ2ljYWxfYXBpY2lkOworfQorCisvKiB4ODZfcXVpcmtzIG1lbWJlciAqLworc3RhdGljIHZvaWQgbXBjX29lbV9idXNfaW5mbyhzdHJ1Y3QgbXBjX2J1cyAqbSwgY2hhciAqbmFtZSkKK3sKKwlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19xdWFkOworCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19sb2NhbDsKKworCW1wX2J1c19pZF90b19ub2RlW20tPmJ1c2lkXSA9IHF1YWQ7CisJbXBfYnVzX2lkX3RvX2xvY2FsW20tPmJ1c2lkXSA9IGxvY2FsOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQnVzICMlZCBpcyAlcyAobm9kZSAlZClcbiIsIG0tPmJ1c2lkLCBuYW1lLCBxdWFkKTsKK30KKworLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KK3N0YXRpYyB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2J1cyAqbSkKK3sKKwlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19xdWFkOworCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19sb2NhbDsKKworCXF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkW3F1YWRdW2xvY2FsXSA9IG0tPmJ1c2lkOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgTVBfdHJhbnNsYXRpb25faW5mbyhzdHJ1Y3QgbXBjX3RyYW5zICptKQoreworCXByaW50ayhLRVJOX0lORk8KKwkgICAgIlRyYW5zbGF0aW9uOiByZWNvcmQgJWQsIHR5cGUgJWQsIHF1YWQgJWQsIGdsb2JhbCAlZCwgbG9jYWwgJWRcbiIsCisJICAgICAgIG1wY19yZWNvcmQsIG0tPnRyYW5zX3R5cGUsIG0tPnRyYW5zX3F1YWQsIG0tPnRyYW5zX2dsb2JhbCwKKwkgICAgICAgbS0+dHJhbnNfbG9jYWwpOworCisJaWYgKG1wY19yZWNvcmQgPj0gTUFYX01QQ19FTlRSWSkKKwkJcHJpbnRrKEtFUk5fRVJSICJNQVhfTVBDX0VOVFJZIGV4Y2VlZGVkIVxuIik7CisJZWxzZQorCQl0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSA9IG07IC8qIHN0YXNoIHRoaXMgZm9yIGxhdGVyICovCisKKwlpZiAobS0+dHJhbnNfcXVhZCA8IE1BWF9OVU1OT0RFUyAmJiAhbm9kZV9vbmxpbmUobS0+dHJhbnNfcXVhZCkpCisJCW5vZGVfc2V0X29ubGluZShtLT50cmFuc19xdWFkKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbXBmX2NoZWNrc3VtKHVuc2lnbmVkIGNoYXIgKm1wLCBpbnQgbGVuKQoreworCWludCBzdW0gPSAwOworCisJd2hpbGUgKGxlbi0tKQorCQlzdW0gKz0gKm1wKys7CisKKwlyZXR1cm4gc3VtICYgMHhGRjsKK30KKworLyoKKyAqIFJlYWQvcGFyc2UgdGhlIE1QQyBvZW0gdGFibGVzCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdAorIHNtcF9yZWFkX21wY19vZW0oc3RydWN0IG1wY19vZW10YWJsZSAqb2VtdGFibGUsIHVuc2lnbmVkIHNob3J0IG9lbXNpemUpCit7CisJaW50IGNvdW50ID0gc2l6ZW9mKCpvZW10YWJsZSk7CS8qIHRoZSBoZWFkZXIgc2l6ZSAqLworCXVuc2lnbmVkIGNoYXIgKm9lbXB0ciA9ICgodW5zaWduZWQgY2hhciAqKW9lbXRhYmxlKSArIGNvdW50OworCisJbXBjX3JlY29yZCA9IDA7CisJcHJpbnRrKEtFUk5fSU5GTworCQkiRm91bmQgYW4gT0VNIE1QQyB0YWJsZSBhdCAlOHAgLSBwYXJzaW5nIGl0IC4uLiBcbiIsIG9lbXRhYmxlKTsKKworCWlmIChtZW1jbXAob2VtdGFibGUtPnNpZ25hdHVyZSwgTVBDX09FTV9TSUdOQVRVUkUsIDQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJTTVAgbXBjIG9lbXRhYmxlOiBiYWQgc2lnbmF0dXJlIFslYyVjJWMlY10hXG4iLAorCQkgICAgICAgb2VtdGFibGUtPnNpZ25hdHVyZVswXSwgb2VtdGFibGUtPnNpZ25hdHVyZVsxXSwKKwkJICAgICAgIG9lbXRhYmxlLT5zaWduYXR1cmVbMl0sIG9lbXRhYmxlLT5zaWduYXR1cmVbM10pOworCQlyZXR1cm47CisJfQorCisJaWYgKG1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKW9lbXRhYmxlLCBvZW10YWJsZS0+bGVuZ3RoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgb2VtIG1wdGFibGU6IGNoZWNrc3VtIGVycm9yIVxuIik7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoY291bnQgPCBvZW10YWJsZS0+bGVuZ3RoKSB7CisJCXN3aXRjaCAoKm9lbXB0cikgeworCQljYXNlIE1QX1RSQU5TTEFUSU9OOgorCQkJeworCQkJCXN0cnVjdCBtcGNfdHJhbnMgKm0gPSAodm9pZCAqKW9lbXB0cjsKKworCQkJCU1QX3RyYW5zbGF0aW9uX2luZm8obSk7CisJCQkJb2VtcHRyICs9IHNpemVvZigqbSk7CisJCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKKwkJCQkrK21wY19yZWNvcmQ7CisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIlVucmVjb2duaXNlZCBPRU0gdGFibGUgZW50cnkgdHlwZSEgLSAlZFxuIiwKKwkJCSAgICAgICAoaW50KSpvZW1wdHIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBudW1hcV9zZXR1cF9pb2FwaWNfaWRzKHZvaWQpCit7CisJLyogc28gY2FuIHNraXAgaXQgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4ODZfcXVpcmtzIG51bWFxX3g4Nl9xdWlya3MgX19pbml0ZGF0YSA9IHsKKwkuYXJjaF9wcmVfdGltZV9pbml0CQk9IG51bWFxX3ByZV90aW1lX2luaXQsCisJLmFyY2hfdGltZV9pbml0CQkJPSBOVUxMLAorCS5hcmNoX3ByZV9pbnRyX2luaXQJCT0gTlVMTCwKKwkuYXJjaF9tZW1vcnlfc2V0dXAJCT0gTlVMTCwKKwkuYXJjaF9pbnRyX2luaXQJCQk9IE5VTEwsCisJLmFyY2hfdHJhcF9pbml0CQkJPSBOVUxMLAorCS5tYWNoX2dldF9zbXBfY29uZmlnCQk9IE5VTEwsCisJLm1hY2hfZmluZF9zbXBfY29uZmlnCQk9IE5VTEwsCisJLm1wY19yZWNvcmQJCQk9ICZtcGNfcmVjb3JkLAorCS5tcGNfYXBpY19pZAkJCT0gbXBjX2FwaWNfaWQsCisJLm1wY19vZW1fYnVzX2luZm8JCT0gbXBjX29lbV9idXNfaW5mbywKKwkubXBjX29lbV9wY2lfYnVzCQk9IG1wY19vZW1fcGNpX2J1cywKKwkuc21wX3JlYWRfbXBjX29lbQkJPSBzbXBfcmVhZF9tcGNfb2VtLAorCS5zZXR1cF9pb2FwaWNfaWRzCQk9IG51bWFxX3NldHVwX2lvYXBpY19pZHMsCit9OworCitzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfY2hlY2tfbnVtYXEodm9pZCkKK3sKKwkvKgorCSAqIEZpbmQgcG9zc2libGUgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgorCSAqLworCWVhcmx5X2ZpbmRfc21wX2NvbmZpZygpOworCisJLyoKKwkgKiBnZXQgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgorCSAqLworCWlmIChzbXBfZm91bmRfY29uZmlnKQorCQllYXJseV9nZXRfc21wX2NvbmZpZygpOworCisJaWYgKGZvdW5kX251bWFxKQorCQl4ODZfcXVpcmtzID0gJm51bWFxX3g4Nl9xdWlya3M7Cit9CisKK2ludCBfX2luaXQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKQoreworCWVhcmx5X2NoZWNrX251bWFxKCk7CisJaWYgKCFmb3VuZF9udW1hcSkKKwkJcmV0dXJuIDA7CisJc21wX2R1bXBfcWN0KCk7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBOVU1BUV9BUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtYXFfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAoeCA+PiAyNCkgJiAweDBGOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfbG9naWNhbChtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX2xvZ2ljYWwoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJbnVtYXFfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKKyNkZWZpbmUgTlVNQVFfVFJBTVBPTElORV9QSFlTX0xPVwkoMHg4KQorI2RlZmluZSBOVU1BUV9UUkFNUE9MSU5FX1BIWVNfSElHSAkoMHhhKQorCisvKgorICogQmVjYXVzZSB3ZSB1c2UgTk1JcyByYXRoZXIgdGhhbiB0aGUgSU5JVC1TVEFSVFVQIHNlcXVlbmNlIHRvCisgKiBib290c3RyYXAgdGhlIENQVXMsIHRoZSBBUElDIG1heSBiZSBpbiBhIHdlaXJkIHN0YXRlLiBLaWNrIGl0OgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKHZvaWQpCit7CisJY2xlYXJfbG9jYWxfQVBJQygpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqbnVtYXFfdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gJkNQVV9NQVNLX0FMTDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitudW1hcV9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG51bWFxX2NoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbnVtYXFfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9pbml0X2FwaWNfbGRyKHZvaWQpCit7CisJLyogQWxyZWFkeSBkb25lIGluIE5VTUEtUSBmaXJtd2FyZSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTworCQkiRW5hYmxpbmcgQVBJQyBtb2RlOiAgTlVNQS1RLiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQlucl9pb2FwaWNzKTsKK30KKworLyoKKyAqIFNraXAgYWRkaW5nIHRoZSB0aW1lciBpbnQgb24gc2Vjb25kYXJ5IG5vZGVzLCB3aGljaCBjYXVzZXMKKyAqIGEgc21hbGwgYnV0IHBhaW5mdWwgcmlmdCBpbiB0aGUgdGltZS1zcGFjZSBjb250aW51dW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG51bWFxX211bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQoreworCXJldHVybiBhcGljICE9IDAgJiYgaXJxID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBudW1hcV9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwkvKiBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCisJcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweEZVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bWFxX2NwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIGNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07Cit9CisKKy8qCisgKiBTdXBwb3J0aW5nIG92ZXIgNjAgY3B1cyBvbiBOVU1BLVEgcmVxdWlyZXMgYSBsb2NhbGl0eS1kZXBlbmRlbnQKKyAqIGNwdSB0byBBUElDIElEIHJlbGF0aW9uIHRvIHByb3Blcmx5IGludGVyYWN0IHdpdGggdGhlIGludGVsbGlnZW50CisgKiBtb2RlIG9mIHRoZSBjbHVzdGVyIGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG51bWFxX2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlpZiAobXBzX2NwdSA8IDYwKQorCQlyZXR1cm4gKChtcHNfY3B1ID4+IDIpIDw8IDQpIHwgKDEgPDwgKG1wc19jcHUgJiAweDMpKTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgaW5saW5lIGludCBudW1hcV9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisJcmV0dXJuIGxvZ2ljYWxfYXBpY2lkID4+IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBudW1hcV9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworCWludCBub2RlID0gbnVtYXFfYXBpY2lkX3RvX25vZGUobG9naWNhbF9hcGljaWQpOworCWludCBjcHUgPSBfX2Zmcyhsb2dpY2FsX2FwaWNpZCAmIDB4Zik7CisKKwlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGNwdSArIDQqbm9kZSk7Cit9CisKKy8qIFdoZXJlIHRoZSBJTyBhcmVhIHdhcyBtYXBwZWQgb24gbXVsdGlxdWFkLCBhbHdheXMgMCBvdGhlcndpc2UgKi8KK3ZvaWQgKnhxdWFkX3BvcnRpbzsKKworc3RhdGljIGlubGluZSBpbnQgbnVtYXFfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiAxOworfQorCisvKgorICogV2UgdXNlIHBoeXNpY2FsIGFwaWNpZHMgaGVyZSwgbm90IGxvZ2ljYWwsIHNvIGp1c3QgcmV0dXJuIHRoZSBkZWZhdWx0CisgKiBwaHlzaWNhbCBicm9hZGNhc3QgdG8gc3RvcCBwZW9wbGUgZnJvbSBicmVha2luZyB1cworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1hcV9jcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQoreworCXJldHVybiAweDBGOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJcmV0dXJuIDB4MEY7Cit9CisKKy8qIE5vIE5VTUEtUSBib3ggaGFzIGEgSFQgQ1BVLCBidXQgaXQgY2FuJ3QgaHVydCB0byB1c2UgdGhlIGRlZmF1bHQgY29kZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG51bWFxX3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIGludAorbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgY2hhciAqcHJvZHVjdGlkKQoreworCWlmIChzdHJuY21wKG9lbSwgIklCTSBOVU1BIiwgOCkpCisJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZyEgTm90IGEgTlVNQS1RIHN5c3RlbSFcbiIpOworCWVsc2UKKwkJZm91bmRfbnVtYXEgPSAxOworCisJcmV0dXJuIGZvdW5kX251bWFxOworfQorCitzdGF0aWMgaW50IHByb2JlX251bWFxKHZvaWQpCit7CisJLyogYWxyZWFkeSBrbm93IGZyb20gZ2V0X21lbWNmZ19udW1hcSgpICovCisJcmV0dXJuIGZvdW5kX251bWFxOworfQorCitzdGF0aWMgdm9pZCBudW1hcV92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgY3B1bWFza190ICpyZXRtYXNrKQoreworCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCisJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKKwkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KKwkgKi8KKwkqcmV0bWFzayA9IChjcHVtYXNrX3QpeyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKK30KKworc3RhdGljIHZvaWQgbnVtYXFfc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCit7CisJaW50IG51bV9xdWFkcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKKworCWlmIChudW1fcXVhZHMgPD0gMSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTworCQkiUmVtYXBwaW5nIGNyb3NzLXF1YWQgcG9ydCBJL08gZm9yICVkIHF1YWRzXG4iLCBudW1fcXVhZHMpOworCisJeHF1YWRfcG9ydGlvID0gaW9yZW1hcChYUVVBRF9QT1JUSU9fQkFTRSwgbnVtX3F1YWRzKlhRVUFEX1BPUlRJT19RVUFEKTsKKworCXByaW50ayhLRVJOX0lORk8KKwkJInhxdWFkX3BvcnRpbyB2YWRkciAweCUwOGx4LCBsZW4gJTA4bHhcbiIsCisJCSh1X2xvbmcpIHhxdWFkX3BvcnRpbywgKHVfbG9uZykgbnVtX3F1YWRzKlhRVUFEX1BPUlRJT19RVUFEKTsKK30KKworc3RydWN0IGFwaWMgYXBpY19udW1hcSA9IHsKKworCS5uYW1lCQkJCT0gIk5VTUFRIiwKKwkucHJvYmUJCQkJPSBwcm9iZV9udW1hcSwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSBOVUxMLAorCS5hcGljX2lkX3JlZ2lzdGVyZWQJCT0gbnVtYXFfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfTG93ZXN0UHJpbywKKwkvKiBwaHlzaWNhbCBkZWxpdmVyeSBvbiBMT0NBTCBxdWFkOiAqLworCS5pcnFfZGVzdF9tb2RlCQkJPSAwLAorCisJLnRhcmdldF9jcHVzCQkJPSBudW1hcV90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDEsCisJLmRlc3RfbG9naWNhbAkJCT0gQVBJQ19ERVNUX0xPR0lDQUwsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IG51bWFxX2NoZWNrX2FwaWNpZF91c2VkLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBudW1hcV9jaGVja19hcGljaWRfcHJlc2VudCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBudW1hcV92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IG51bWFxX2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IG51bWFxX2lvYXBpY19waHlzX2lkX21hcCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IG51bWFxX3NldHVwX2FwaWNfcm91dGluZywKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gbnVtYXFfbXVsdGlfdGltZXJfY2hlY2ssCisJLmFwaWNpZF90b19ub2RlCQkJPSBudW1hcV9hcGljaWRfdG9fbm9kZSwKKwkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IG51bWFxX2NwdV90b19sb2dpY2FsX2FwaWNpZCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IG51bWFxX2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IG51bWFxX2FwaWNpZF90b19jcHVfcHJlc2VudCwKKwkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IG51bWFxX3NldHVwX3BvcnRpb19yZW1hcCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IG51bWFxX2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IG51bWFxX3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBudW1hcV9tcHNfb2VtX2NoZWNrLAorCisJLmdldF9hcGljX2lkCQkJPSBudW1hcV9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCisJLmFwaWNfaWRfbWFzawkJCT0gMHgwRiA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IG51bWFxX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0gbnVtYXFfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gTlVMTCwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSBudW1hcV9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IG51bWFxX3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0gZGVmYXVsdF9zZW5kX0lQSV9zZWxmLAorCisJLndha2V1cF9zZWNvbmRhcnlfY3B1CQk9IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9ubWksCisJLnRyYW1wb2xpbmVfcGh5c19sb3cJCT0gTlVNQVFfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gTlVNQVFfVFJBTVBPTElORV9QSFlTX0hJR0gsCisKKwkvKiBXZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlIGJlY2F1c2Ugd2UgdXNlIE5NSSdzIHRvIGJvb3QgaW5zdGVhZCAqLworCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IE5VTEwsCisKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gbnVtYXFfc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDFjOTlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIERlZmF1bHQgZ2VuZXJpYyBBUElDIGRyaXZlci4gVGhpcyBoYW5kbGVzIHVwIHRvIDggQ1BVcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEdlbmVyaWMgeDg2IEFQSUMgZHJpdmVyIHByb2JlIGxheWVyLgorICovCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9pcGkuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKyNkZWZpbmUgREVGQVVMVF9TRU5EX0lQSQkoMSkKKyNlbHNlCisjZGVmaW5lIERFRkFVTFRfU0VORF9JUEkJKDApCisjZW5kaWYKKworaW50IG5vX2Jyb2FkY2FzdCA9IERFRkFVTFRfU0VORF9JUEk7CisKK3N0YXRpYyBfX2luaXQgaW50IG5vX2lwaV9icm9hZGNhc3QoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJm5vX2Jyb2FkY2FzdCk7CisJcHJfaW5mbygiVXNpbmcgJXMgbW9kZVxuIiwKKwkJbm9fYnJvYWRjYXN0ID8gIk5vIElQSSBCcm9hZGNhc3QiIDogIklQSSBCcm9hZGNhc3QiKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5vX2lwaV9icm9hZGNhc3Q9Iiwgbm9faXBpX2Jyb2FkY2FzdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHByaW50X2lwaV9tb2RlKHZvaWQpCit7CisJcHJfaW5mbygiVXNpbmcgSVBJICVzIG1vZGVcbiIsCisJCW5vX2Jyb2FkY2FzdCA/ICJOby1TaG9ydGN1dCIgOiAiU2hvcnRjdXQiKTsKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwocHJpbnRfaXBpX21vZGUpOworCit2b2lkIGRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJcHJpbnRrKEtFUk5fSU5GTworCQkiRW5hYmxpbmcgQVBJQyBtb2RlOiAgRmxhdC4gIFVzaW5nICVkIEkvTyBBUElDc1xuIiwKKwkJbnJfaW9hcGljcyk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZGVmYXVsdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCit7CisJLyoKKwkgKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJKnJldG1hc2sgPSAoY3B1bWFza190KSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUyB9IH07Cit9CisKKy8qIHNob3VsZCBiZSBjYWxsZWQgbGFzdC4gKi8KK3N0YXRpYyBpbnQgcHJvYmVfZGVmYXVsdCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdHJ1Y3QgYXBpYyBhcGljX2RlZmF1bHQgPSB7CisKKwkubmFtZQkJCQk9ICJkZWZhdWx0IiwKKwkucHJvYmUJCQkJPSBwcm9iZV9kZWZhdWx0LAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBkZWZhdWx0X2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0xvd2VzdFByaW8sCisJLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIENQVXM6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDEsCisKKwkudGFyZ2V0X2NwdXMJCQk9IGRlZmF1bHRfdGFyZ2V0X2NwdXMsCisJLmRpc2FibGVfZXNyCQkJPSAwLAorCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBkZWZhdWx0X2NoZWNrX2FwaWNpZF91c2VkLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBkZWZhdWx0X2NoZWNrX2FwaWNpZF9wcmVzZW50LAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IGRlZmF1bHRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS5pbml0X2FwaWNfbGRyCQkJPSBkZWZhdWx0X2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGRlZmF1bHRfaW9hcGljX3BoeXNfaWRfbWFwLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBkZWZhdWx0X2FwaWNpZF90b19ub2RlLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gZGVmYXVsdF9jcHVfdG9fbG9naWNhbF9hcGljaWQsCisJLmNwdV9wcmVzZW50X3RvX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IGRlZmF1bHRfYXBpY2lkX3RvX2NwdV9wcmVzZW50LAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKKwkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLAorCS5waHlzX3BrZ19pZAkJCT0gZGVmYXVsdF9waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0gZGVmYXVsdF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCisJLmFwaWNfaWRfbWFzawkJCT0gMHgwRiA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IGRlZmF1bHRfc2VuZF9JUElfbWFza19sb2dpY2FsLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9sb2dpY2FsLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmCQk9IGRlZmF1bHRfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSBkZWZhdWx0X3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0gZGVmYXVsdF9zZW5kX0lQSV9zZWxmLAorCisJLnRyYW1wb2xpbmVfcGh5c19sb3cJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfTE9XLAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19ISUdILAorCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gZGVmYXVsdF93YWl0X2Zvcl9pbml0X2RlYXNzZXJ0LAorCisJLnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYwk9IE5VTEwsCisJLmlucXVpcmVfcmVtb3RlX2FwaWMJCT0gZGVmYXVsdF9pbnF1aXJlX3JlbW90ZV9hcGljLAorCisJLnJlYWQJCQkJPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKKwkud3JpdGUJCQkJPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCisJLmljcl9yZWFkCQkJPSBuYXRpdmVfYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlCQkJPSBuYXRpdmVfYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV9hcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCit9OworCitleHRlcm4gc3RydWN0IGFwaWMgYXBpY19udW1hcTsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX3N1bW1pdDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX2JpZ3NtcDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX2VzNzAwMDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX2VzNzAwMF9jbHVzdGVyOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfZGVmYXVsdDsKKworc3RydWN0IGFwaWMgKmFwaWMgPSAmYXBpY19kZWZhdWx0OworRVhQT1JUX1NZTUJPTF9HUEwoYXBpYyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXBpYyAqYXBpY19wcm9iZVtdIF9faW5pdGRhdGEgPSB7CisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQorCSZhcGljX251bWFxLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVQKKwkmYXBpY19zdW1taXQsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAorCSZhcGljX2JpZ3NtcCwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfRVM3MDAwCisJJmFwaWNfZXM3MDAwLAorCSZhcGljX2VzNzAwMF9jbHVzdGVyLAorI2VuZGlmCisJJmFwaWNfZGVmYXVsdCwJLyogbXVzdCBiZSBsYXN0ICovCisJTlVMTCwKK307CisKK3N0YXRpYyBpbnQgY21kbGluZV9hcGljIF9faW5pdGRhdGE7CitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hcGljKGNoYXIgKmFyZykKK3sKKwlpbnQgaTsKKworCWlmICghYXJnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07IGkrKykgeworCQlpZiAoIXN0cmNtcChhcGljX3Byb2JlW2ldLT5uYW1lLCBhcmcpKSB7CisJCQlhcGljID0gYXBpY19wcm9iZVtpXTsKKwkJCWNtZGxpbmVfYXBpYyA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIFBhcnNlZCBhZ2FpbiBieSBfX3NldHVwIGZvciBkZWJ1Zy92ZXJib3NlICovCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiYXBpYyIsIHBhcnNlX2FwaWMpOworCit2b2lkIF9faW5pdCBnZW5lcmljX2JpZ3NtcF9wcm9iZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfQklHU01QCisJLyoKKwkgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzd2l0Y2ggdG8gYmlnc21wIG1vZGUgd2hlbgorCSAqIC0gVGhlcmUgaXMgbm8gYXBpYz0gb3B0aW9uIHNwZWNpZmllZCBieSB0aGUgdXNlcgorCSAqIC0gZ2VuZXJpY19hcGljX3Byb2JlKCkgaGFzIGNob3NlbiBhcGljX2RlZmF1bHQgYXMgdGhlIHN1Yl9hcmNoCisJICogLSB3ZSBmaW5kIG1vcmUgdGhhbiA4IENQVXMgaW4gYWNwaSBMQVBJQyBsaXN0aW5nIHdpdGggeEFQSUMgc3VwcG9ydAorCSAqLworCisJaWYgKCFjbWRsaW5lX2FwaWMgJiYgYXBpYyA9PSAmYXBpY19kZWZhdWx0KSB7CisJCWlmIChhcGljX2JpZ3NtcC5wcm9iZSgpKSB7CisJCQlhcGljID0gJmFwaWNfYmlnc21wOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiT3ZlcnJpZGluZyBBUElDIGRyaXZlciB3aXRoICVzXG4iLAorCQkJICAgICAgIGFwaWMtPm5hbWUpOworCQl9CisJfQorI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IGdlbmVyaWNfYXBpY19wcm9iZSh2b2lkKQoreworCWlmICghY21kbGluZV9hcGljKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyBpKyspIHsKKwkJCWlmIChhcGljX3Byb2JlW2ldLT5wcm9iZSgpKSB7CisJCQkJYXBpYyA9IGFwaWNfcHJvYmVbaV07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogTm90IHZpc2libGUgd2l0aG91dCBlYXJseSBjb25zb2xlICovCisJCWlmICghYXBpY19wcm9iZVtpXSkKKwkJCXBhbmljKCJEaWRuJ3QgZmluZCBhbiBBUElDIGRyaXZlciIpOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyBBUElDIGRyaXZlciAlc1xuIiwgYXBpYy0+bmFtZSk7Cit9CisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc3dpdGNoIHRoZSBBUElDIGV2ZW4gYWZ0ZXIgdGhlIGluaXRpYWwgLT5wcm9iZSgpICovCisKK2ludCBfX2luaXQKK2dlbmVyaWNfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgY2hhciAqcHJvZHVjdGlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7CisJCWlmICghYXBpY19wcm9iZVtpXS0+bXBzX29lbV9jaGVjaykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWFwaWNfcHJvYmVbaV0tPm1wc19vZW1fY2hlY2sobXBjLCBvZW0sIHByb2R1Y3RpZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNtZGxpbmVfYXBpYykgeworCQkJYXBpYyA9IGFwaWNfcHJvYmVbaV07CisJCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBBUElDIGRyaXZlciBgJXMnLlxuIiwKKwkJCSAgICAgICBhcGljLT5uYW1lKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgZGVmYXVsdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7CisJCWlmICghYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjaykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWFwaWNfcHJvYmVbaV0tPmFjcGlfbWFkdF9vZW1fY2hlY2sob2VtX2lkLCBvZW1fdGFibGVfaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFjbWRsaW5lX2FwaWMpIHsKKwkJCWFwaWMgPSBhcGljX3Byb2JlW2ldOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gQVBJQyBkcml2ZXIgYCVzJy5cbiIsCisJCQkgICAgICAgYXBpYy0+bmFtZSk7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3NzQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqCisgKiBHZW5lcmljIEFQSUMgc3ViLWFyY2ggcHJvYmUgbGF5ZXIuCisgKgorICogSGFja2VkIGZvciB4ODYtNjQgYnkgSmFtZXMgQ2xldmVyZG9uIGZyb20gaTM4NiBhcmNoaXRlY3R1cmUgY29kZSBieQorICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKKyAqIEphbWVzIENsZXZlcmRvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9pcGkuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfZmxhdDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX3BoeXNmbGF0OworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfeDJ4cGljX3V2X3g7CitleHRlcm4gc3RydWN0IGFwaWMgYXBpY194MmFwaWNfcGh5czsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX3gyYXBpY19jbHVzdGVyOworCitzdHJ1Y3QgYXBpYyBfX3JlYWRfbW9zdGx5ICphcGljID0gJmFwaWNfZmxhdDsKK0VYUE9SVF9TWU1CT0xfR1BMKGFwaWMpOworCitzdGF0aWMgc3RydWN0IGFwaWMgKmFwaWNfcHJvYmVbXSBfX2luaXRkYXRhID0geworI2lmZGVmIENPTkZJR19YODZfVVYKKwkmYXBpY194MmFwaWNfdXZfeCwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfWDJBUElDCisJJmFwaWNfeDJhcGljX3BoeXMsCisJJmFwaWNfeDJhcGljX2NsdXN0ZXIsCisjZW5kaWYKKwkmYXBpY19waHlzZmxhdCwKKwlOVUxMLAorfTsKKworLyoKKyAqIENoZWNrIHRoZSBBUElDIElEcyBpbiBiaW9zX2NwdV9hcGljaWQgYW5kIGNob29zZSB0aGUgQVBJQyBtb2RlLgorICovCit2b2lkIF9faW5pdCBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfWDJBUElDCisJaWYgKHgyYXBpYyAmJiAoYXBpYyAhPSAmYXBpY194MmFwaWNfcGh5cyAmJgorI2lmZGVmIENPTkZJR19YODZfVVYKKwkJICAgICAgIGFwaWMgIT0gJmFwaWNfeDJhcGljX3V2X3ggJiYKKyNlbmRpZgorCQkgICAgICAgYXBpYyAhPSAmYXBpY194MmFwaWNfY2x1c3RlcikpIHsKKwkJaWYgKHgyYXBpY19waHlzKQorCQkJYXBpYyA9ICZhcGljX3gyYXBpY19waHlzOworCQllbHNlCisJCQlhcGljID0gJmFwaWNfeDJhcGljX2NsdXN0ZXI7CisJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBhcGljLT5uYW1lKTsKKwl9CisjZW5kaWYKKworCWlmIChhcGljID09ICZhcGljX2ZsYXQpIHsKKwkJaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkKKwkJCWFwaWMgPSAmYXBpY19waHlzZmxhdDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOworCX0KK30KKworLyogU2FtZSBmb3IgYm90aCBmbGF0IGFuZCBwaHlzaWNhbC4gKi8KKwordm9pZCBhcGljX3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKK3sKKwlfX2RlZmF1bHRfc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX1NFTEYsIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKK30KKworaW50IF9faW5pdCBkZWZhdWx0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKKwkJaWYgKGFwaWNfcHJvYmVbaV0tPmFjcGlfbWFkdF9vZW1fY2hlY2sob2VtX2lkLCBvZW1fdGFibGVfaWQpKSB7CisJCQlhcGljID0gYXBpY19wcm9iZVtpXTsKKwkJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzLlxuIiwKKwkJCQlhcGljLT5uYW1lKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvc3VtbWl0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWM1MmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvc3VtbWl0XzMyLmMKQEAgLTAsMCArMSw1NzkgQEAKKy8qCisgKiBJQk0gU3VtbWl0LVNwZWNpZmljIENvZGUKKyAqCisgKiBXcml0dGVuIEJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3JwLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogU2VuZCBmZWVkYmFjayB0byA8Y29scGF0Y2hAdXMuaWJtLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KKworLyoKKyAqIEFQSUMgZHJpdmVyIGZvciB0aGUgSUJNICJTdW1taXQiIGNoaXBzZXQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCitzdGF0aWMgdW5zaWduZWQgc3VtbWl0X2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlyZXR1cm4gKHggPj4gMjQpICYgMHhGRjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1bW1pdF9zZW5kX0lQSV9tYXNrKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfbG9naWNhbChtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBzdW1taXRfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7CisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7CisKKwlpZiAoIWNwdXNfZW1wdHkobWFzaykpCisJCXN1bW1pdF9zZW5kX0lQSV9tYXNrKCZtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBzdW1taXRfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJc3VtbWl0X3NlbmRfSVBJX21hc2soJmNwdV9vbmxpbmVfbWFwLCB2ZWN0b3IpOworfQorCisjaW5jbHVkZSA8YXNtL3RzYy5oPgorCitleHRlcm4gaW50IHVzZV9jeWNsb25lOworCisjaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVRfTlVNQQorc3RhdGljIHZvaWQgc2V0dXBfc3VtbWl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zdW1taXQodm9pZCkge30KKyNlbmRpZgorCitzdGF0aWMgaW50IHN1bW1pdF9tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLAorCQljaGFyICpwcm9kdWN0aWQpCit7CisJaWYgKCFzdHJuY21wKG9lbSwgIklCTSBFTlNXIiwgOCkgJiYKKwkJCSghc3RybmNtcChwcm9kdWN0aWQsICJWSUdJTCBTTVAiLCA5KQorCQkJIHx8ICFzdHJuY21wKHByb2R1Y3RpZCwgIkVYQSIsIDMpCisJCQkgfHwgIXN0cm5jbXAocHJvZHVjdGlkLCAiUlVUSExFU1MgU01QIiwgMTIpKSl7CisJCW1hcmtfdHNjX3Vuc3RhYmxlKCJTdW1taXQgYmFzZWQgc3lzdGVtIik7CisJCXVzZV9jeWNsb25lID0gMTsgLyplbmFibGUgY3ljbG9uZS10aW1lciovCisJCXNldHVwX3N1bW1pdCgpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KK3N0YXRpYyBpbnQgc3VtbWl0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJaWYgKCFzdHJuY21wKG9lbV9pZCwgIklCTSIsIDMpICYmCisJICAgICghc3RybmNtcChvZW1fdGFibGVfaWQsICJTRVJWSUdJTCIsIDgpCisJICAgICB8fCAhc3RybmNtcChvZW1fdGFibGVfaWQsICJFWEEiLCAzKSkpeworCQltYXJrX3RzY191bnN0YWJsZSgiU3VtbWl0IGJhc2VkIHN5c3RlbSIpOworCQl1c2VfY3ljbG9uZSA9IDE7IC8qZW5hYmxlIGN5Y2xvbmUtdGltZXIqLworCQlzZXR1cF9zdW1taXQoKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmlvX3RhYmxlX2hkciB7CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uOyAgICAgIC8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gMyBhZGRzIGNoYXNzaXNfbnVtICYgV1BfaW5kZXggICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBudW1fc2NhbF9kZXY7IC8qICMgb2YgU2NhbGFiaWxpdHkgZGV2aWNlcyAoVHdpc3RlcnMgZm9yIFZpZ2lsKSAgICovCisJdW5zaWduZWQgY2hhciBudW1fcmlvX2RldjsgIC8qICMgb2YgUklPIEkvTyBkZXZpY2VzIChDeWNsb25lcyBhbmQgV2lubmlwZWdzKSAgICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2NhbF9kZXRhaWwgeworCXVuc2lnbmVkIGNoYXIgbm9kZV9pZDsgICAgICAvKiBTY2FsYWJpbGl0eSBOb2RlIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgQ0JBUjsgICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGID0gTm9uZSAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDJub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGID0gTm9uZSAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDJwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgY2hhc3Npc19udW07ICAvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICgxID0gYm9vdCBub2RlKSAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJpb19kZXRhaWwgeworCXVuc2lnbmVkIGNoYXIgbm9kZV9pZDsgICAgICAvKiBSSU8gTm9kZSBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgQkJBUjsgICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgdHlwZTsgICAgICAgICAvKiBUeXBlIG9mIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgb3duZXJfaWQ7ICAgICAvKiBGb3IgV1BFRzogTm9kZSBJRCBvZiBDeWNsb25lIHRoYXQgb3ducyB0aGlzIFdQRUcqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgTm9kZSBJRCBvZiBUd2lzdGVyIHRoYXQgb3ducyB0aGlzIENZQyAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDBwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgcG9ydDFwb3J0OyAgICAvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yIDB4RkY9Tm9uZSAqLworCXVuc2lnbmVkIGNoYXIgZmlyc3Rfc2xvdDsgICAvKiBGb3IgV1BFRzogTG93ZXN0IHNsb3QgbnVtYmVyIGJlbG93IHRoaXMgV1BFRyAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOyAgICAgICAvKiBGb3IgV1BFRzogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgPSAwIDogdGhlIFhBUElDIGlzIG5vdCB1c2VkLCBpZToqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgIGludHMgZndkZWQgdG8gYW5vdGhlciBYQVBJQyAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgQml0czE6NyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgQml0czA6NyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgV1BfaW5kZXg7ICAgICAvKiBGb3IgV1BFRzogV1BFRyBpbnN0YW5jZSBpbmRleCAtIGxvd2VyIG9uZXMgaGF2ZSAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgbG93ZXIgc2xvdCBudW1iZXJzL1BDSSBidXMgbnVtYmVycyAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQ1lDOiAgTm8gbWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgY2hhc3Npc19udW07ICAvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgTG9va091dCBXUEVHcyB0aGlzIGZpZWxkIGluZGljYXRlcyB0aGUgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBhbnNpb24gQ2hhc3NpcyAjLCBlbnVtZXJhdGVkIGZyb20gQm9vdCAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb2RlIFdQRUcgZXh0ZXJuYWwgcG9ydCwgdGhlbiBCb290IE5vZGUgQ1lDICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlcm5hbCBwb3J0LCB0aGVuIE5leHQgVmlnaWwgY2hhc3NpcyBXUEVHICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlcm5hbCBwb3J0LCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGFyZWQgTG9va291dHMgaGF2ZSBvbmx5IDEgY2hhc3NpcyBudW1iZXIgKHRoZSAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBvbmUgYXNzaWduZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCit0eXBlZGVmIGVudW0geworCUNvbXBhdFR3aXN0ZXIgPSAwLCAgLyogQ29tcGF0aWJpbGl0eSBUd2lzdGVyICAgICAgICAgICAgICAgKi8KKwlBbHRUd2lzdGVyICAgID0gMSwgIC8qIEFsdGVybmF0ZSBUd2lzdGVyIG9mIGludGVybmFsIDgtd2F5ICovCisJQ29tcGF0Q3ljbG9uZSA9IDIsICAvKiBDb21wYXRpYmlsaXR5IEN5Y2xvbmUgICAgICAgICAgICAgICAqLworCUFsdEN5Y2xvbmUgICAgPSAzLCAgLyogQWx0ZXJuYXRlIEN5Y2xvbmUgb2YgaW50ZXJuYWwgOC13YXkgKi8KKwlDb21wYXRXUEVHICAgID0gNCwgIC8qIENvbXBhdGliaWxpdHkgV1BFRyAgICAgICAgICAgICAgICAgICovCisJQWx0V1BFRyAgICAgICA9IDUsICAvKiBTZWNvbmQgUGxhbmFyIFdQRUcgICAgICAgICAgICAgICAgICAqLworCUxvb2tPdXRBV1BFRyAgPSA2LCAgLyogTG9va091dCBXUEVHICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlMb29rT3V0QldQRUcgID0gNywgIC8qIExvb2tPdXQgV1BFRyAgICAgICAgICAgICAgICAgICAgICAgICovCit9IG5vZGVfdHlwZTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfV1BFRyhzdHJ1Y3QgcmlvX2RldGFpbCAqcmlvKXsKKwlyZXR1cm4gKHJpby0+dHlwZSA9PSBDb21wYXRXUEVHIHx8IHJpby0+dHlwZSA9PSBBbHRXUEVHIHx8CisJCXJpby0+dHlwZSA9PSBMb29rT3V0QVdQRUcgfHwgcmlvLT50eXBlID09IExvb2tPdXRCV1BFRyk7Cit9CisKKworLyogSW4gY2x1c3RlcmVkIG1vZGUsIHRoZSBoaWdoIG5pYmJsZSBvZiBBUElDIElEIGlzIGEgY2x1c3RlciBudW1iZXIuCisgKiBUaGUgbG93IG5pYmJsZSBpcyBhIDQtYml0IGJpdG1hcC4gKi8KKyNkZWZpbmUgWEFQSUNfREVTVF9DUFVTX1NISUZUCTQKKyNkZWZpbmUgWEFQSUNfREVTVF9DUFVTX01BU0sJKCgxdSA8PCBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpIC0gMSkKKyNkZWZpbmUgWEFQSUNfREVTVF9DTFVTVEVSX01BU0sJKFhBUElDX0RFU1RfQ1BVU19NQVNLIDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkKKworI2RlZmluZSBTVU1NSVRfQVBJQ19ERlJfVkFMVUUJKEFQSUNfREZSX0NMVVNURVIpCisKK3N0YXRpYyBjb25zdCBjcHVtYXNrX3QgKnN1bW1pdF90YXJnZXRfY3B1cyh2b2lkKQoreworCS8qIENQVV9NQVNLX0FMTCAoMHhmZikgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAorCSAqIGRlc3RfTG93ZXN0UHJpbyBtb2RlIGxvZ2ljYWwgY2x1c3RlcmVkIGFwaWMgaW50ZXJydXB0IHJvdXRpbmcKKwkgKiBKdXN0IHN0YXJ0IG9uIGNwdSAwLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNwcmVhZCBsb2FkCisJICovCisJcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VtbWl0X2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiAwOworfQorCisvKiB3ZSBkb24ndCB1c2UgdGhlIHBoeXNfY3B1X3ByZXNlbnRfbWFwIHRvIGluZGljYXRlIGFwaWNpZCBwcmVzZW5jZSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VtbWl0X2NoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHN1bW1pdF9pbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIGlkOworCWludCBjb3VudCA9IDA7CisJdTggbXlfaWQgPSAodTgpaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdTggbXlfY2x1c3RlciA9IEFQSUNfQ0xVU1RFUihteV9pZCk7CisjaWZkZWYgQ09ORklHX1NNUAorCXU4IGxpZDsKKwlpbnQgaTsKKworCS8qIENyZWF0ZSBsb2dpY2FsIEFQSUMgSURzIGJ5IGNvdW50aW5nIENQVXMgYWxyZWFkeSBpbiBjbHVzdGVyLiAqLworCWZvciAoY291bnQgPSAwLCBpID0gbnJfY3B1X2lkczsgLS1pID49IDA7ICkgeworCQlsaWQgPSBjcHVfMl9sb2dpY2FsX2FwaWNpZFtpXTsKKwkJaWYgKGxpZCAhPSBCQURfQVBJQ0lEICYmIEFQSUNfQ0xVU1RFUihsaWQpID09IG15X2NsdXN0ZXIpCisJCQkrK2NvdW50OworCX0KKyNlbmRpZgorCS8qIFdlIG9ubHkgaGF2ZSBhIDQgd2lkZSBiaXRtYXAgaW4gY2x1c3RlciBtb2RlLiAgSWYgYSBkZXJhbmdlZAorCSAqIEJJT1MgcHV0cyA1IENQVXMgaW4gb25lIEFQSUMgY2x1c3Rlciwgd2UncmUgaG9zZWQuICovCisJQlVHX09OKGNvdW50ID49IFhBUElDX0RFU1RfQ1BVU19TSElGVCk7CisJaWQgPSBteV9jbHVzdGVyIHwgKDFVTCA8PCBjb3VudCk7CisJYXBpY193cml0ZShBUElDX0RGUiwgU1VNTUlUX0FQSUNfREZSX1ZBTFVFKTsKKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CisJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc3VtbWl0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzdW1taXRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisJcHJpbnRrKCJFbmFibGluZyBBUElDIG1vZGU6ICBTdW1taXQuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCisJCQkJCQlucl9pb2FwaWNzKTsKK30KKworc3RhdGljIGludCBzdW1taXRfYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gYXBpY2lkXzJfbm9kZVtoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKV07CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitzdGF0aWMgaW5saW5lIGludCBzdW1taXRfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIGNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07CisjZWxzZQorCXJldHVybiBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHN1bW1pdF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJaWYgKG1wc19jcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gKGludClwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBwaHlzaWRfbWFza190IHN1bW1pdF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX2lkX21hcCkKK3sKKwkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4MEYpOworfQorCitzdGF0aWMgcGh5c2lkX21hc2tfdCBzdW1taXRfYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBhcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZCgwKTsKK30KKworc3RhdGljIGludCBzdW1taXRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bW1pdF9jcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQoreworCXVuc2lnbmVkIGludCByb3VuZCA9IDA7CisJaW50IGNwdSwgYXBpY2lkID0gMDsKKworCS8qCisJICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4KKwkgKi8KKwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVtYXNrKSB7CisJCWludCBuZXdfYXBpY2lkID0gc3VtbWl0X2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworCisJCWlmIChyb3VuZCAmJiBBUElDX0NMVVNURVIoYXBpY2lkKSAhPSBBUElDX0NMVVNURVIobmV3X2FwaWNpZCkpIHsKKwkJCXByaW50aygiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwkJfQorCQlhcGljaWQgfD0gbmV3X2FwaWNpZDsKKwkJcm91bmQrKzsKKwl9CisJcmV0dXJuIGFwaWNpZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzdW1taXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqaW5tYXNrLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJaW50IGFwaWNpZCA9IHN1bW1pdF9jcHVfdG9fbG9naWNhbF9hcGljaWQoMCk7CisJY3B1bWFza192YXJfdCBjcHVtYXNrOworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmY3B1bWFzaywgR0ZQX0FUT01JQykpCisJCXJldHVybiBhcGljaWQ7CisKKwljcHVtYXNrX2FuZChjcHVtYXNrLCBpbm1hc2ssIGFuZG1hc2spOworCWNwdW1hc2tfYW5kKGNwdW1hc2ssIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJYXBpY2lkID0gc3VtbWl0X2NwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrKTsKKworCWZyZWVfY3B1bWFza192YXIoY3B1bWFzayk7CisKKwlyZXR1cm4gYXBpY2lkOworfQorCisvKgorICogY3B1aWQgcmV0dXJucyB0aGUgdmFsdWUgbGF0Y2hlZCBpbiB0aGUgSFcgYXQgcmVzZXQsIG5vdCB0aGUgQVBJQyBJRAorICogcmVnaXN0ZXIncyB2YWx1ZS4gIEZvciBhbnkgYm94IHdob3NlIEJJT1MgY2hhbmdlcyBBUElDIElEcywgbGlrZQorICogY2x1c3RlcmVkIEFQSUMgc3lzdGVtcywgd2UgbXVzdCB1c2UgaGFyZF9zbXBfcHJvY2Vzc29yX2lkLgorICoKKyAqIFNlZSBJbnRlbCdzIElBLTMyIFNXIERldidzIE1hbnVhbCBWb2wyIHVuZGVyIENQVUlELgorICovCitzdGF0aWMgaW50IHN1bW1pdF9waHlzX3BrZ19pZChpbnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKK3sKKwlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj4gaW5kZXhfbXNiOworfQorCitzdGF0aWMgaW50IHByb2JlX3N1bW1pdCh2b2lkKQoreworCS8qIHByb2JlZCBsYXRlciBpbiBtcHRhYmxlL0FDUEkgaG9va3MgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3VtbWl0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworfQorCisjaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVRfTlVNQQorc3RhdGljIHN0cnVjdCByaW9fdGFibGVfaGRyICpyaW9fdGFibGVfaGRyOworc3RhdGljIHN0cnVjdCBzY2FsX2RldGFpbCAgICpzY2FsX2RldnNbTUFYX05VTU5PREVTXTsKK3N0YXRpYyBzdHJ1Y3QgcmlvX2RldGFpbCAgICAqcmlvX2RldnNbTUFYX05VTU5PREVTKjRdOworCisjaWZuZGVmIENPTkZJR19YODZfTlVNQVEKK3N0YXRpYyBpbnQgbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU107CisjZW5kaWYKKworc3RhdGljIGludCBzZXR1cF9wY2lfbm9kZV9tYXBfZm9yX3dwZWcoaW50IHdwZWdfbnVtLCBpbnQgbGFzdF9idXMpCit7CisJaW50IHR3aXN0ZXIgPSAwLCBub2RlID0gMDsKKwlpbnQgaSwgYnVzLCBudW1fYnVzZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKykgeworCQlpZiAocmlvX2RldnNbaV0tPm5vZGVfaWQgPT0gcmlvX2RldnNbd3BlZ19udW1dLT5vd25lcl9pZCkgeworCQkJdHdpc3RlciA9IHJpb19kZXZzW2ldLT5vd25lcl9pZDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkbid0IGZpbmQgb3duZXIgQ3ljbG9uZSBmb3IgV2lubmlwZWchXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBsYXN0X2J1czsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2OyBpKyspIHsKKwkJaWYgKHNjYWxfZGV2c1tpXS0+bm9kZV9pZCA9PSB0d2lzdGVyKSB7CisJCQlub2RlID0gc2NhbF9kZXZzW2ldLT5ub2RlX2lkOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkbid0IGZpbmQgb3duZXIgVHdpc3RlciBmb3IgQ3ljbG9uZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGxhc3RfYnVzOworCX0KKworCXN3aXRjaCAocmlvX2RldnNbd3BlZ19udW1dLT50eXBlKSB7CisJY2FzZSBDb21wYXRXUEVHOgorCQkvKgorCQkgKiBUaGUgQ29tcGF0aWJpbGl0eSBXaW5uaXBlZyBjb250cm9scyB0aGUgMiBsZWdhY3kgYnVzZXMsCisJCSAqIHRoZSA2Nk1IeiBQQ0kgYnVzIFsyIHNsb3RzXSBhbmQgdGhlIDIgImV4dHJhIiBidXNlcyBpbiBjYXNlCisJCSAqIGEgUENJLVBDSSBicmlkZ2UgY2FyZCBpcyB1c2VkIGluIGVpdGhlciBzbG90OiB0b3RhbCA1IGJ1c2VzLgorCQkgKi8KKwkJbnVtX2J1c2VzID0gNTsKKwkJYnJlYWs7CisJY2FzZSBBbHRXUEVHOgorCQkvKgorCQkgKiBUaGUgQWx0ZXJuYXRlIFdpbm5pcGVnIGNvbnRyb2xzIHRoZSAyIDEzM01IeiBidXNlcyBbMSBzbG90CisJCSAqIGVhY2hdLCB0aGVpciAyICJleHRyYSIgYnVzZXMsIHRoZSAxMDBNSHogYnVzIFsyIHNsb3RzXSBhbmQKKwkJICogdGhlICJleHRyYSIgYnVzZXMgZm9yIGVhY2ggb2YgdGhvc2Ugc2xvdHM6IHRvdGFsIDcgYnVzZXMuCisJCSAqLworCQludW1fYnVzZXMgPSA3OworCQlicmVhazsKKwljYXNlIExvb2tPdXRBV1BFRzoKKwljYXNlIExvb2tPdXRCV1BFRzoKKwkJLyoKKwkJICogQSBMb29rb3V0IFdpbm5pcGVnIGNvbnRyb2xzIDMgMTAwTUh6IGJ1c2VzIFsyIHNsb3RzIGVhY2hdCisJCSAqICYgdGhlICJleHRyYSIgYnVzZXMgZm9yIGVhY2ggb2YgdGhvc2Ugc2xvdHM6IHRvdGFsIDkgYnVzZXMuCisJCSAqLworCQludW1fYnVzZXMgPSA5OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5zdXBwb3J0ZWQgV2lubmlwZWcgdHlwZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGxhc3RfYnVzOworCX0KKworCWZvciAoYnVzID0gbGFzdF9idXM7IGJ1cyA8IGxhc3RfYnVzICsgbnVtX2J1c2VzOyBidXMrKykKKwkJbXBfYnVzX2lkX3RvX25vZGVbYnVzXSA9IG5vZGU7CisJcmV0dXJuIGJ1czsKK30KKworc3RhdGljIGludCBidWlsZF9kZXRhaWxfYXJyYXlzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwdHI7CisJaW50IGksIHNjYWxfZGV0YWlsX3NpemUsIHJpb19kZXRhaWxfc2l6ZTsKKworCWlmIChyaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXYgPiBNQVhfTlVNTk9ERVMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1BWF9OVU1OT0RFUyB0b28gbG93ISAgRGVmaW5lZCBhcyAlZCwgYnV0IHN5c3RlbSBoYXMgJWQgbm9kZXMuXG4iLCBfX2Z1bmNfXywgTUFYX05VTU5PREVTLCByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHJpb190YWJsZV9oZHItPnZlcnNpb24pIHsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBSaW8gR3JhbmRlIFRhYmxlIFZlcnNpb246ICVkXG4iLCBfX2Z1bmNfXywgcmlvX3RhYmxlX2hkci0+dmVyc2lvbik7CisJCXJldHVybiAwOworCWNhc2UgMjoKKwkJc2NhbF9kZXRhaWxfc2l6ZSA9IDExOworCQlyaW9fZGV0YWlsX3NpemUgPSAxMzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzY2FsX2RldGFpbF9zaXplID0gMTI7CisJCXJpb19kZXRhaWxfc2l6ZSA9IDE1OworCQlicmVhazsKKwl9CisKKwlwdHIgPSAodW5zaWduZWQgbG9uZylyaW9fdGFibGVfaGRyICsgMzsKKwlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2OyBpKyssIHB0ciArPSBzY2FsX2RldGFpbF9zaXplKQorCQlzY2FsX2RldnNbaV0gPSAoc3RydWN0IHNjYWxfZGV0YWlsICopcHRyOworCisJZm9yIChpID0gMDsgaSA8IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2OyBpKyssIHB0ciArPSByaW9fZGV0YWlsX3NpemUpCisJCXJpb19kZXZzW2ldID0gKHN0cnVjdCByaW9fZGV0YWlsICopcHRyOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgc2V0dXBfc3VtbWl0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZwkJcHRyOworCXVuc2lnbmVkIHNob3J0CQlvZmZzZXQ7CisJaW50CQkJaSwgbmV4dF93cGVnLCBuZXh0X2J1cyA9IDA7CisKKwkvKiBUaGUgcG9pbnRlciB0byB0aGUgRUJEQSBpcyBzdG9yZWQgaW4gdGhlIHdvcmQgQCBwaHlzIDB4NDBFKDQwOjBFKSAqLworCXB0ciA9IGdldF9iaW9zX2ViZGEoKTsKKwlwdHIgPSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQocHRyKTsKKworCXJpb190YWJsZV9oZHIgPSBOVUxMOworCW9mZnNldCA9IDB4MTgwOworCXdoaWxlIChvZmZzZXQpIHsKKwkJLyogVGhlIGJsb2NrIGlkIGlzIHN0b3JlZCBpbiB0aGUgMm5kIHdvcmQgKi8KKwkJaWYgKCooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCArIDIpKSA9PSAweDQ3NTIpIHsKKwkJCS8qIHNldCB0aGUgcG9pbnRlciBwYXN0IHRoZSBvZmZzZXQgJiBibG9jayBpZCAqLworCQkJcmlvX3RhYmxlX2hkciA9IChzdHJ1Y3QgcmlvX3RhYmxlX2hkciAqKShwdHIgKyBvZmZzZXQgKyA0KTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFRoZSBuZXh0IG9mZnNldCBpcyBzdG9yZWQgaW4gdGhlIDFzdCB3b3JkLiAgMCBtZWFucyBubyBtb3JlICovCisJCW9mZnNldCA9ICooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCkpOworCX0KKwlpZiAoIXJpb190YWJsZV9oZHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGxvY2F0ZSBSaW8gR3JhbmRlIFRhYmxlIGluIEVCREEgLSBiYWlsaW5nIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKCFidWlsZF9kZXRhaWxfYXJyYXlzKCkpCisJCXJldHVybjsKKworCS8qIFRoZSBmaXJzdCBXaW5uaXBlZyB3ZSdyZSBsb29raW5nIGZvciBoYXMgYW4gaW5kZXggb2YgMCAqLworCW5leHRfd3BlZyA9IDA7CisJZG8geworCQlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKykgeworCQkJaWYgKGlzX1dQRUcocmlvX2RldnNbaV0pICYmIHJpb19kZXZzW2ldLT5XUF9pbmRleCA9PSBuZXh0X3dwZWcpIHsKKwkJCQkvKiBJdCdzIHRoZSBXaW5uaXBlZyB3ZSdyZSBsb29raW5nIGZvciEgKi8KKwkJCQluZXh0X2J1cyA9IHNldHVwX3BjaV9ub2RlX21hcF9mb3Jfd3BlZyhpLCBuZXh0X2J1cyk7CisJCQkJbmV4dF93cGVnKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyoKKwkJICogSWYgd2UgZ28gdGhyb3VnaCBhbGwgUmlvIGRldmljZXMgYW5kIGRvbid0IGZpbmQgb25lIHdpdGgKKwkJICogdGhlIG5leHQgaW5kZXgsIGl0IG1lYW5zIHdlJ3ZlIGZvdW5kIGFsbCB0aGUgV2lubmlwZWdzLAorCQkgKiBhbmQgdGh1cyBhbGwgdGhlIFBDSSBidXNlcy4KKwkJICovCisJCWlmIChpID09IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2KQorCQkJbmV4dF93cGVnID0gMDsKKwl9IHdoaWxlIChuZXh0X3dwZWcgIT0gMCk7Cit9CisjZW5kaWYKKworc3RydWN0IGFwaWMgYXBpY19zdW1taXQgPSB7CisKKwkubmFtZQkJCQk9ICJzdW1taXQiLAorCS5wcm9iZQkJCQk9IHByb2JlX3N1bW1pdCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSBzdW1taXRfYWNwaV9tYWR0X29lbV9jaGVjaywKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IHN1bW1pdF9hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9Mb3dlc3RQcmlvLAorCS8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBDUFVzOiAqLworCS5pcnFfZGVzdF9tb2RlCQkJPSAxLAorCisJLnRhcmdldF9jcHVzCQkJPSBzdW1taXRfdGFyZ2V0X2NwdXMsCisJLmRpc2FibGVfZXNyCQkJPSAxLAorCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBzdW1taXRfY2hlY2tfYXBpY2lkX3VzZWQsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IHN1bW1pdF9jaGVja19hcGljaWRfcHJlc2VudCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBzdW1taXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS5pbml0X2FwaWNfbGRyCQkJPSBzdW1taXRfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gc3VtbWl0X2lvYXBpY19waHlzX2lkX21hcCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IHN1bW1pdF9zZXR1cF9hcGljX3JvdXRpbmcsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBzdW1taXRfYXBpY2lkX3RvX25vZGUsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBzdW1taXRfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gc3VtbWl0X2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IHN1bW1pdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gc3VtbWl0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IHN1bW1pdF9waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gc3VtbWl0X21wc19vZW1fY2hlY2ssCisKKwkuZ2V0X2FwaWNfaWQJCQk9IHN1bW1pdF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRiA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gc3VtbWl0X2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSBzdW1taXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSBzdW1taXRfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gTlVMTCwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSBzdW1taXRfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSBzdW1taXRfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBkZWZhdWx0X3NlbmRfSVBJX3NlbGYsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19MT1csCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0hJR0gsCisKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBkZWZhdWx0X3dhaXRfZm9yX2luaXRfZGVhc3NlcnQsCisKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBkZWZhdWx0X2lucXVpcmVfcmVtb3RlX2FwaWMsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI4N2I2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwpAQCAtMCwwICsxLDIzOSBAQAorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCitERUZJTkVfUEVSX0NQVSh1MzIsIHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQpOworCitzdGF0aWMgaW50IHgyYXBpY19hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCXJldHVybiB4MmFwaWNfZW5hYmxlZCgpOworfQorCisvKiBTdGFydCB3aXRoIGFsbCBJUlFzIHBvaW50aW5nIHRvIGJvb3QgQ1BVLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNoaWZ0IHRoZW0uICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqeDJhcGljX3RhcmdldF9jcHVzKHZvaWQpCit7CisJcmV0dXJuIGNwdW1hc2tfb2YoMCk7Cit9CisKKy8qCisgKiBmb3Igbm93IGVhY2ggbG9naWNhbCBjcHUgaXMgaW4gaXRzIG93biB2ZWN0b3IgYWxsb2NhdGlvbiBkb21haW4uCisgKi8KK3N0YXRpYyB2b2lkIHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCit7CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKK30KKworc3RhdGljIHZvaWQKKyBfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHVuc2lnbmVkIGludCBhcGljaWQsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGludCBkZXN0KQoreworCXVuc2lnbmVkIGxvbmcgY2ZnOworCisJY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IsIGRlc3QpOworCisJLyoKKwkgKiBzZW5kIHRoZSBJUEkuCisJICovCisJbmF0aXZlX3gyYXBpY19pY3Jfd3JpdGUoY2ZnLCBhcGljaWQpOworfQorCisvKgorICogZm9yIG5vdywgd2Ugc2VuZCB0aGUgSVBJJ3Mgb25lIGJ5IG9uZSBpbiB0aGUgY3B1bWFzay4KKyAqIFRCRDogQmFzZWQgb24gdGhlIGNwdSBtYXNrLCB3ZSBjYW4gc2VuZCB0aGUgSVBJJ3MgdG8gdGhlIGNsdXN0ZXIgZ3JvdXAKKyAqIGF0IG9uY2UuIFdlIGhhdmUgMTYgY3B1J3MgaW4gYSBjbHVzdGVyLiBUaGlzIHdpbGwgbWluaW1pemUgSVBJIHJlZ2lzdGVyCisgKiB3cml0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KAorCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBxdWVyeV9jcHUpLAorCQkJdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCisgeDJhcGljX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQorCQkJY29udGludWU7CisJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCisJCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBxdWVyeV9jcHUpLAorCQkJCXZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KHF1ZXJ5X2NwdSkgeworCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQorCQkJY29udGludWU7CisJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCisJCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBxdWVyeV9jcHUpLAorCQkJCXZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJeDJhcGljX3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW50IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCS8qCisJICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIGxvZ2ljYWwgQVBJQyBJRC4KKwkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCisJICovCisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1bWFzayk7CisKKwlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoreDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgbG9naWNhbCBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykgeworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCisJCQlicmVhazsKKwl9CisKKwlpZiAoY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KTsKKworCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jbHVzdGVyX3BoeXNfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXVuc2lnbmVkIGludCBpZDsKKworCWlkID0geDsKKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKK3sKKwl1bnNpZ25lZCBsb25nIHg7CisKKwl4ID0gaWQ7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBpbnQgeDJhcGljX2NsdXN0ZXJfcGh5c19wa2dfaWQoaW50IGluaXRpYWxfYXBpY2lkLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjdXJyZW50X2NwdV9kYXRhLmluaXRpYWxfYXBpY2lkID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKK3sKKwlhcGljX3dyaXRlKEFQSUNfU0VMRl9JUEksIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfeDJhcGljX2xkcih2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSkgPSBhcGljX3JlYWQoQVBJQ19MRFIpOworfQorCitzdHJ1Y3QgYXBpYyBhcGljX3gyYXBpY19jbHVzdGVyID0geworCisJLm5hbWUJCQkJPSAiY2x1c3RlciB4MmFwaWMiLAorCS5wcm9iZQkJCQk9IE5VTEwsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0geDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2ssCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSB4MmFwaWNfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfTG93ZXN0UHJpbywKKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMSwgLyogbG9naWNhbCAqLworCisJLnRhcmdldF9jcHVzCQkJPSB4MmFwaWNfdGFyZ2V0X2NwdXMsCisJLmRpc2FibGVfZXNyCQkJPSAwLAorCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBOVUxMLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBOVUxMLAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IGluaXRfeDJhcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gTlVMTCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IE5VTEwsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBOVUxMLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gTlVMTCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gTlVMTCwKKwkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IE5VTEwsCisJLmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQJPSBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IHgyYXBpY19jbHVzdGVyX3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBOVUxMLAorCisJLmdldF9hcGljX2lkCQkJPSB4MmFwaWNfY2x1c3Rlcl9waHlzX2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gc2V0X2FwaWNfaWQsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRkZGRkZGRnUsCisKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IHgyYXBpY19jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0geDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0geDJhcGljX3NlbmRfSVBJX21hc2ssCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IHgyYXBpY19zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0geDJhcGljX3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0geDJhcGljX3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0geDJhcGljX3NlbmRfSVBJX3NlbGYsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19MT1csCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0hJR0gsCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gTlVMTCwKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBOVUxMLAorCisJLnJlYWQJCQkJPSBuYXRpdmVfYXBpY19tc3JfcmVhZCwKKwkud3JpdGUJCQkJPSBuYXRpdmVfYXBpY19tc3Jfd3JpdGUsCisJLmljcl9yZWFkCQkJPSBuYXRpdmVfeDJhcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV94MmFwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBuYXRpdmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYyNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYwpAQCAtMCwwICsxLDIyOCBAQAorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCitpbnQgeDJhcGljX3BoeXM7CisKK3N0YXRpYyBpbnQgc2V0X3gyYXBpY19waHlzX21vZGUoY2hhciAqYXJnKQoreworCXgyYXBpY19waHlzID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJ4MmFwaWNfcGh5cyIsIHNldF94MmFwaWNfcGh5c19tb2RlKTsKKworc3RhdGljIGludCB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlpZiAoeDJhcGljX3BoeXMpCisJCXJldHVybiB4MmFwaWNfZW5hYmxlZCgpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIFN0YXJ0IHdpdGggYWxsIElSUXMgcG9pbnRpbmcgdG8gYm9vdCBDUFUuICBJUlEgYmFsYW5jaW5nIHdpbGwgc2hpZnQgdGhlbS4gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp4MmFwaWNfdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKK30KKworc3RhdGljIHZvaWQgeDJhcGljX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldG1hc2spOworfQorCitzdGF0aWMgdm9pZCBfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHVuc2lnbmVkIGludCBhcGljaWQsIGludCB2ZWN0b3IsCisJCQkJICAgdW5zaWduZWQgaW50IGRlc3QpCit7CisJdW5zaWduZWQgbG9uZyBjZmc7CisKKwljZmcgPSBfX3ByZXBhcmVfSUNSKDAsIHZlY3RvciwgZGVzdCk7CisKKwkvKgorCSAqIHNlbmQgdGhlIElQSS4KKwkgKi8KKwluYXRpdmVfeDJhcGljX2ljcl93cml0ZShjZmcsIGFwaWNpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCisJCQkJICAgICAgIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorIHgyYXBpY19zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKKwkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKKwkJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCisJCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKKwkJCQl2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfb25saW5lX2NwdShxdWVyeV9jcHUpIHsKKwkJaWYgKHF1ZXJ5X2NwdSA9PSB0aGlzX2NwdSkKKwkJCWNvbnRpbnVlOworCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCisJCQkJICAgICAgIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJeDJhcGljX3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW50IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCS8qCisJICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KKwkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCisJICovCisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1bWFzayk7CisKKwlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3gyYXBpY19jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJaW50IGNwdTsKKworCS8qCisJICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KKwkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCisJICovCisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spIHsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGNwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCisJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX3BoeXNfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiB4OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZXRfYXBpY19pZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgaW50IHgyYXBpY19waHlzX3BrZ19pZChpbnQgaW5pdGlhbF9hcGljaWQsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGN1cnJlbnRfY3B1X2RhdGEuaW5pdGlhbF9hcGljaWQgPj4gaW5kZXhfbXNiOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF94MmFwaWNfbGRyKHZvaWQpCit7Cit9CisKK3N0cnVjdCBhcGljIGFwaWNfeDJhcGljX3BoeXMgPSB7CisKKwkubmFtZQkJCQk9ICJwaHlzaWNhbCB4MmFwaWMiLAorCS5wcm9iZQkJCQk9IE5VTEwsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0geDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2ssCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSB4MmFwaWNfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfRml4ZWQsCisJLmlycV9kZXN0X21vZGUJCQk9IDAsIC8qIHBoeXNpY2FsICovCisKKwkudGFyZ2V0X2NwdXMJCQk9IHgyYXBpY190YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDAsCisJLmRlc3RfbG9naWNhbAkJCT0gMCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gTlVMTCwKKwkuY2hlY2tfYXBpY2lkX3ByZXNlbnQJCT0gTlVMTCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSB4MmFwaWNfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS5pbml0X2FwaWNfbGRyCQkJPSBpbml0X3gyYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IE5VTEwsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBOVUxMLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAorCS5hcGljaWRfdG9fbm9kZQkJCT0gTlVMTCwKKwkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IE5VTEwsCisJLmNwdV9wcmVzZW50X3RvX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IE5VTEwsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IE5VTEwsCisJLnBoeXNfcGtnX2lkCQkJPSB4MmFwaWNfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IE5VTEwsCisKKwkuZ2V0X2FwaWNfaWQJCQk9IHgyYXBpY19waHlzX2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gc2V0X2FwaWNfaWQsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRkZGRkZGRnUsCisKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IHgyYXBpY19jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0geDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0geDJhcGljX3NlbmRfSVBJX21hc2ssCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IHgyYXBpY19zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0geDJhcGljX3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0geDJhcGljX3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0geDJhcGljX3NlbmRfSVBJX3NlbGYsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19MT1csCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0hJR0gsCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gTlVMTCwKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBOVUxMLAorCisJLnJlYWQJCQkJPSBuYXRpdmVfYXBpY19tc3JfcmVhZCwKKwkud3JpdGUJCQkJPSBuYXRpdmVfYXBpY19tc3Jfd3JpdGUsCisJLmljcl9yZWFkCQkJPSBuYXRpdmVfeDJhcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV94MmFwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBuYXRpdmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQ2ZGExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMCwwICsxLDY0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFNHSSBVViBBUElDIGZ1bmN0aW9ucyAobm90ZTogbm90IGFuIEludGVsIGNvbXBhdGlibGUgQVBJQykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCitERUZJTkVfUEVSX0NQVShpbnQsIHgyYXBpY19leHRyYV9iaXRzKTsKKworc3RhdGljIGVudW0gdXZfc3lzdGVtX3R5cGUgdXZfc3lzdGVtX3R5cGU7CisKK3N0YXRpYyBpbnQgdXZfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlpZiAoIXN0cmNtcChvZW1faWQsICJTR0kiKSkgeworCQlpZiAoIXN0cmNtcChvZW1fdGFibGVfaWQsICJVVkwiKSkKKwkJCXV2X3N5c3RlbV90eXBlID0gVVZfTEVHQUNZX0FQSUM7CisJCWVsc2UgaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZYIikpCisJCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX1gyQVBJQzsKKwkJZWxzZSBpZiAoIXN0cmNtcChvZW1fdGFibGVfaWQsICJVVkgiKSkgeworCQkJdXZfc3lzdGVtX3R5cGUgPSBVVl9OT05fVU5JUVVFX0FQSUM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gdXZfc3lzdGVtX3R5cGU7Cit9CisKK2ludCBpc191dl9zeXN0ZW0odm9pZCkKK3sKKwlyZXR1cm4gdXZfc3lzdGVtX3R5cGUgIT0gVVZfTk9ORTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzX3V2X3N5c3RlbSk7CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCB1dl9odWJfaW5mb19zLCBfX3V2X2h1Yl9pbmZvKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoX191dl9odWJfaW5mbyk7CisKK3N0cnVjdCB1dl9ibGFkZV9pbmZvICp1dl9ibGFkZV9pbmZvOworRVhQT1JUX1NZTUJPTF9HUEwodXZfYmxhZGVfaW5mbyk7CisKK3Nob3J0ICp1dl9ub2RlX3RvX2JsYWRlOworRVhQT1JUX1NZTUJPTF9HUEwodXZfbm9kZV90b19ibGFkZSk7CisKK3Nob3J0ICp1dl9jcHVfdG9fYmxhZGU7CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9jcHVfdG9fYmxhZGUpOworCitzaG9ydCB1dl9wb3NzaWJsZV9ibGFkZXM7CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9wb3NzaWJsZV9ibGFkZXMpOworCit1bnNpZ25lZCBsb25nIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZDsKK0VYUE9SVF9TWU1CT0woc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kKTsKKworLyogU3RhcnQgd2l0aCBhbGwgSVJRcyBwb2ludGluZyB0byBib290IENQVS4gIElSUSBiYWxhbmNpbmcgd2lsbCBzaGlmdCB0aGVtLiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnV2X3RhcmdldF9jcHVzKHZvaWQpCit7CisJcmV0dXJuIGNwdW1hc2tfb2YoMCk7Cit9CisKK3N0YXRpYyB2b2lkIHV2X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldG1hc2spOworfQorCitzdGF0aWMgaW50IHV2X3dha2V1cF9zZWNvbmRhcnkoaW50IHBoeXNfYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3JpcCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHBub2RlOworCisJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUocGh5c19hcGljaWQpOworCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CisJICAgIChwaHlzX2FwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkgICAgKChzdGFydF9yaXAgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpID4+IDEyKSB8CisJICAgIEFQSUNfRE1fSU5JVDsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOworCW1kZWxheSgxMCk7CisKKwl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAorCSAgICAocGh5c19hcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJICAgICgoc3RhcnRfcmlwIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKSA+PiAxMikgfAorCSAgICBBUElDX0RNX1NUQVJUVVA7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKKworCWF0b21pY19zZXQoJmluaXRfZGVhc3NlcnRlZCwgMSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfb25lKGludCBjcHUsIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIGFwaWNpZDsKKwlpbnQgcG5vZGU7CisKKwlhcGljaWQgPSBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCXBub2RlID0gdXZfYXBpY2lkX3RvX3Bub2RlKGFwaWNpZCk7CisKKwl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAorCSAgICAgIChhcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJICAgICAgKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CisKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOworfQorCitzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBjcHU7CisKKwlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKQorCQl1dl9zZW5kX0lQSV9vbmUoY3B1LCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKSB7CisJCWlmIChjcHUgIT0gdGhpc19jcHUpCisJCQl1dl9zZW5kX0lQSV9vbmUoY3B1LCB2ZWN0b3IpOworCX0KK30KKworc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdSAhPSB0aGlzX2NwdSkKKwkJCXV2X3NlbmRfSVBJX29uZShjcHUsIHZlY3Rvcik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwl1dl9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIGludCB1dl9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdXZfaW5pdF9hcGljX2xkcih2b2lkKQoreworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHV2X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKK3sKKwkvKgorCSAqIFdlJ3JlIHVzaW5nIGZpeGVkIElSUSBkZWxpdmVyeSwgY2FuIG9ubHkgcmV0dXJuIG9uZSBwaHlzIEFQSUMgSUQuCisJICogTWF5IGFzIHdlbGwgYmUgdGhlIGZpcnN0LgorCSAqLworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOworCisJaWYgKCh1bnNpZ25lZCljcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Cit1dl9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykgeworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCisJCQlicmVhazsKKwl9CisJaWYgKGNwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCisJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwlXQVJOX09OKHByZWVtcHRpYmxlKCkgJiYgbnVtX29ubGluZV9jcHVzKCkgPiAxKTsKKwlpZCA9IHggfCBfX2dldF9jcHVfdmFyKHgyYXBpY19leHRyYV9iaXRzKTsKKworCXJldHVybiBpZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGxvbmcgeDsKKworCS8qIG1hc2tvdXQgeDJhcGljX2V4dHJhX2JpdHMgPyAqLworCXggPSBpZDsKKwlyZXR1cm4geDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB1dl9yZWFkX2FwaWNfaWQodm9pZCkKK3sKKworCXJldHVybiB4MmFwaWNfZ2V0X2FwaWNfaWQoYXBpY19yZWFkKEFQSUNfSUQpKTsKK30KKworc3RhdGljIGludCB1dl9waHlzX3BrZ19pZChpbnQgaW5pdGlhbF9hcGljaWQsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIHV2X3JlYWRfYXBpY19pZCgpID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKK30KKworc3RydWN0IGFwaWMgYXBpY194MmFwaWNfdXZfeCA9IHsKKworCS5uYW1lCQkJCT0gIlVWIGxhcmdlIHN5c3RlbSIsCisJLnByb2JlCQkJCT0gTlVMTCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSB1dl9hY3BpX21hZHRfb2VtX2NoZWNrLAorCS5hcGljX2lkX3JlZ2lzdGVyZWQJCT0gdXZfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfRml4ZWQsCisJLmlycV9kZXN0X21vZGUJCQk9IDEsIC8qIGxvZ2ljYWwgKi8KKworCS50YXJnZXRfY3B1cwkJCT0gdXZfdGFyZ2V0X2NwdXMsCisJLmRpc2FibGVfZXNyCQkJPSAwLAorCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBOVUxMLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBOVUxMLAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IHV2X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gdXZfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gTlVMTCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IE5VTEwsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBOVUxMLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gTlVMTCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gTlVMTCwKKwkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IE5VTEwsCisJLmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQJPSBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IHV2X3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBOVUxMLAorCisJLmdldF9hcGljX2lkCQkJPSB4MmFwaWNfZ2V0X2FwaWNfaWQsCisJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGRkZGRkZGdSwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gdXZfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IHV2X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0gdXZfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gdXZfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmCQk9IHV2X3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0gdXZfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSB1dl9zZW5kX0lQSV9zZWxmLAorCisJLndha2V1cF9zZWNvbmRhcnlfY3B1CQk9IHV2X3dha2V1cF9zZWNvbmRhcnksCisJLnRyYW1wb2xpbmVfcGh5c19sb3cJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfTE9XLAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19ISUdILAorCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IE5VTEwsCisJLnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYwk9IE5VTEwsCisJLmlucXVpcmVfcmVtb3RlX2FwaWMJCT0gTlVMTCwKKworCS5yZWFkCQkJCT0gbmF0aXZlX2FwaWNfbXNyX3JlYWQsCisJLndyaXRlCQkJCT0gbmF0aXZlX2FwaWNfbXNyX3dyaXRlLAorCS5pY3JfcmVhZAkJCT0gbmF0aXZlX3gyYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlCQkJPSBuYXRpdmVfeDJhcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAorCS5zYWZlX3dhaXRfaWNyX2lkbGUJCT0gbmF0aXZlX3NhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCit9OworCitzdGF0aWMgX19jcHVpbml0IHZvaWQgc2V0X3gyYXBpY19leHRyYV9iaXRzKGludCBwbm9kZSkKK3sKKwlfX2dldF9jcHVfdmFyKHgyYXBpY19leHRyYV9iaXRzKSA9IChwbm9kZSA8PCA2KTsKK30KKworLyoKKyAqIENhbGxlZCBvbiBib290IGNwdS4KKyAqLworc3RhdGljIF9faW5pdCBpbnQgYm9vdF9wbm9kZV90b19ibGFkZShpbnQgcG5vZGUpCit7CisJaW50IGJsYWRlOworCisJZm9yIChibGFkZSA9IDA7IGJsYWRlIDwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOyBibGFkZSsrKQorCQlpZiAocG5vZGUgPT0gdXZfYmxhZGVfaW5mb1tibGFkZV0ucG5vZGUpCisJCQlyZXR1cm4gYmxhZGU7CisJQlVHKCk7Cit9CisKK3N0cnVjdCByZWRpcl9hZGRyIHsKKwl1bnNpZ25lZCBsb25nIHJlZGlyZWN0OworCXVuc2lnbmVkIGxvbmcgYWxpYXM7Cit9OworCisjZGVmaW5lIERFU1RfU0hJRlQgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMF9NTVJfREVTVF9CQVNFX1NIRlQKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IHJlZGlyX2FkZHIgcmVkaXJfYWRkcnNbXSA9IHsKKwl7VVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMF9NTVIsIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUd9LAorCXtVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18xX01NUiwgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR30sCisJe1VWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzJfTU1SLCBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHfSwKK307CisKK3N0YXRpYyBfX2luaXQgdm9pZCBnZXRfbG93bWVtX3JlZGlyZWN0KHVuc2lnbmVkIGxvbmcgKmJhc2UsIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJdW5pb24gdXZoX3NpX2FsaWFzMF9vdmVybGF5X2NvbmZpZ191IGFsaWFzOworCXVuaW9uIHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzJfbW1yX3UgcmVkaXJlY3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWRpcl9hZGRycyk7IGkrKykgeworCQlhbGlhcy52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0uYWxpYXMpOworCQlpZiAoYWxpYXMucy5iYXNlID09IDApIHsKKwkJCSpzaXplID0gKDFVTCA8PCBhbGlhcy5zLm1fYWxpYXMpOworCQkJcmVkaXJlY3QudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLnJlZGlyZWN0KTsKKwkJCSpiYXNlID0gKHVuc2lnbmVkIGxvbmcpcmVkaXJlY3Qucy5kZXN0X2Jhc2UgPDwgREVTVF9TSElGVDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlCVUcoKTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIG1hcF9sb3dfbW1ycyh2b2lkKQoreworCWluaXRfZXh0cmFfbWFwcGluZ191YyhVVl9HTE9CQUxfTU1SMzJfQkFTRSwgVVZfR0xPQkFMX01NUjMyX1NJWkUpOworCWluaXRfZXh0cmFfbWFwcGluZ191YyhVVl9MT0NBTF9NTVJfQkFTRSwgVVZfTE9DQUxfTU1SX1NJWkUpOworfQorCitlbnVtIG1hcF90eXBlIHttYXBfd2IsIG1hcF91Y307CisKK3N0YXRpYyBfX2luaXQgdm9pZCBtYXBfaGlnaChjaGFyICppZCwgdW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgc2hpZnQsCisJCQkgICAgaW50IG1heF9wbm9kZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJ5dGVzLCBwYWRkcjsKKworCXBhZGRyID0gYmFzZSA8PCBzaGlmdDsKKwlieXRlcyA9ICgxVUwgPDwgc2hpZnQpICogKG1heF9wbm9kZSArIDEpOworCXByaW50ayhLRVJOX0lORk8gIlVWOiBNYXAgJXNfSEkgMHglbHggLSAweCVseFxuIiwgaWQsIHBhZGRyLAorCQkJCQkJcGFkZHIgKyBieXRlcyk7CisJaWYgKG1hcF90eXBlID09IG1hcF91YykKKwkJaW5pdF9leHRyYV9tYXBwaW5nX3VjKHBhZGRyLCBieXRlcyk7CisJZWxzZQorCQlpbml0X2V4dHJhX21hcHBpbmdfd2IocGFkZHIsIGJ5dGVzKTsKKworfQorc3RhdGljIF9faW5pdCB2b2lkIG1hcF9ncnVfaGlnaChpbnQgbWF4X3Bub2RlKQoreworCXVuaW9uIHV2aF9yaF9nYW1fZ3J1X292ZXJsYXlfY29uZmlnX21tcl91IGdydTsKKwlpbnQgc2hpZnQgPSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUOworCisJZ3J1LnYgPSB1dl9yZWFkX2xvY2FsX21tcihVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVIpOworCWlmIChncnUucy5lbmFibGUpCisJCW1hcF9oaWdoKCJHUlUiLCBncnUucy5iYXNlLCBzaGlmdCwgbWF4X3Bub2RlLCBtYXBfd2IpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgbWFwX2NvbmZpZ19oaWdoKGludCBtYXhfcG5vZGUpCit7CisJdW5pb24gdXZoX3JoX2dhbV9jZmdfb3ZlcmxheV9jb25maWdfbW1yX3UgY2ZnOworCWludCBzaGlmdCA9IFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQ7CisKKwljZmcudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUik7CisJaWYgKGNmZy5zLmVuYWJsZSkKKwkJbWFwX2hpZ2goIkNPTkZJRyIsIGNmZy5zLmJhc2UsIHNoaWZ0LCBtYXhfcG5vZGUsIG1hcF91Yyk7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBtYXBfbW1yX2hpZ2goaW50IG1heF9wbm9kZSkKK3sKKwl1bmlvbiB1dmhfcmhfZ2FtX21tcl9vdmVybGF5X2NvbmZpZ19tbXJfdSBtbXI7CisJaW50IHNoaWZ0ID0gVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfU0hGVDsKKworCW1tci52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SKTsKKwlpZiAobW1yLnMuZW5hYmxlKQorCQltYXBfaGlnaCgiTU1SIiwgbW1yLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIG1hcF9tbWlvaF9oaWdoKGludCBtYXhfcG5vZGUpCit7CisJdW5pb24gdXZoX3JoX2dhbV9tbWlvaF9vdmVybGF5X2NvbmZpZ19tbXJfdSBtbWlvaDsKKwlpbnQgc2hpZnQgPSBVVkhfUkhfR0FNX01NSU9IX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQ7CisKKwltbWlvaC52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVIpOworCWlmIChtbWlvaC5zLmVuYWJsZSkKKwkJbWFwX2hpZ2goIk1NSU9IIiwgbW1pb2gucy5iYXNlLCBzaGlmdCwgbWF4X3Bub2RlLCBtYXBfdWMpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgdXZfcnRjX2luaXQodm9pZCkKK3sKKwlsb25nIHN0YXR1czsKKwl1NjQgdGlja3NfcGVyX3NlYzsKKworCXN0YXR1cyA9IHV2X2Jpb3NfZnJlcV9iYXNlKEJJT1NfRlJFUV9CQVNFX1JFQUxUSU1FX0NMT0NLLAorCQkJCQkmdGlja3NfcGVyX3NlYyk7CisJaWYgKHN0YXR1cyAhPSBCSU9TX1NUQVRVU19TVUNDRVNTIHx8IHRpY2tzX3Blcl9zZWMgPCAxMDAwMDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInVuYWJsZSB0byBkZXRlcm1pbmUgcGxhdGZvcm0gUlRDIGNsb2NrIGZyZXF1ZW5jeSwgIgorCQkJImd1ZXNzaW5nLlxuIik7CisJCS8qIEJJT1MgZ2l2ZXMgd3JvbmcgdmFsdWUgZm9yIGNsb2NrIGZyZXEuIHNvIGd1ZXNzICovCisJCXNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCA9IDEwMDAwMDAwMDAwMDBVTCAvIDMwMDAwVUw7CisJfSBlbHNlCisJCXNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCA9IHRpY2tzX3Blcl9zZWM7Cit9CisKKy8qCisgKiBwZXJjcHUgaGVhcnRiZWF0IHRpbWVyCisgKi8KK3N0YXRpYyB2b2lkIHV2X2hlYXJ0YmVhdCh1bnNpZ25lZCBsb25nIGlnbm9yZWQpCit7CisJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyID0gJnV2X2h1Yl9pbmZvLT5zY2lyLnRpbWVyOworCXVuc2lnbmVkIGNoYXIgYml0cyA9IHV2X2h1Yl9pbmZvLT5zY2lyLnN0YXRlOworCisJLyogZmxpcCBoZWFydGJlYXQgYml0ICovCisJYml0cyBePSBTQ0lSX0NQVV9IRUFSVEJFQVQ7CisKKwkvKiBpcyB0aGlzIGNwdSBpZGxlPyAqLworCWlmIChpZGxlX2NwdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKwkJYml0cyAmPSB+U0NJUl9DUFVfQUNUSVZJVFk7CisJZWxzZQorCQliaXRzIHw9IFNDSVJfQ1BVX0FDVElWSVRZOworCisJLyogdXBkYXRlIHN5c3RlbSBjb250cm9sbGVyIGludGVyZmFjZSByZWcgKi8KKwl1dl9zZXRfc2Npcl9iaXRzKGJpdHMpOworCisJLyogZW5hYmxlIG5leHQgdGltZXIgcGVyaW9kICovCisJbW9kX3RpbWVyKHRpbWVyLCBqaWZmaWVzICsgU0NJUl9DUFVfSEJfSU5URVJWQUwpOworfQorCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgdXZfaGVhcnRiZWF0X2VuYWJsZShpbnQgY3B1KQoreworCWlmICghdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIuZW5hYmxlZCkgeworCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIudGltZXI7CisKKwkJdXZfc2V0X2NwdV9zY2lyX2JpdHMoY3B1LCBTQ0lSX0NQVV9IRUFSVEJFQVR8U0NJUl9DUFVfQUNUSVZJVFkpOworCQlzZXR1cF90aW1lcih0aW1lciwgdXZfaGVhcnRiZWF0LCBjcHUpOworCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBTQ0lSX0NQVV9IQl9JTlRFUlZBTDsKKwkJYWRkX3RpbWVyX29uKHRpbWVyLCBjcHUpOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkID0gMTsKKwl9CisKKwkvKiBjaGVjayBib290IGNwdSAqLworCWlmICghdXZfY3B1X2h1Yl9pbmZvKDApLT5zY2lyLmVuYWJsZWQpCisJCXV2X2hlYXJ0YmVhdF9lbmFibGUoMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB1dl9oZWFydGJlYXRfZGlzYWJsZShpbnQgY3B1KQoreworCWlmICh1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLmVuYWJsZWQgPSAwOworCQlkZWxfdGltZXIoJnV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLnRpbWVyKTsKKwl9CisJdXZfc2V0X2NwdV9zY2lyX2JpdHMoY3B1LCAweGZmKTsKK30KKworLyoKKyAqIGNwdSBob3RwbHVnIG5vdGlmaWVyCisgKi8KK3N0YXRpYyBfX2NwdWluaXQgaW50IHV2X3NjaXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCQl1dl9oZWFydGJlYXRfZW5hYmxlKGNwdSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJdXZfaGVhcnRiZWF0X2Rpc2FibGUoY3B1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9zY2lyX3JlZ2lzdGVyX2NwdV9ub3RpZmllcih2b2lkKQoreworCWhvdGNwdV9ub3RpZmllcih1dl9zY2lyX2NwdV9ub3RpZnksIDApOworfQorCisjZWxzZSAvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCisKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9zY2lyX3JlZ2lzdGVyX2NwdV9ub3RpZmllcih2b2lkKQoreworfQorCitzdGF0aWMgX19pbml0IGludCB1dl9pbml0X2hlYXJ0YmVhdCh2b2lkKQoreworCWludCBjcHU7CisKKwlpZiAoaXNfdXZfc3lzdGVtKCkpCisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQkJdXZfaGVhcnRiZWF0X2VuYWJsZShjcHUpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHV2X2luaXRfaGVhcnRiZWF0KTsKKworI2VuZGlmIC8qICFDT05GSUdfSE9UUExVR19DUFUgKi8KKworLyoKKyAqIENhbGxlZCBvbiBlYWNoIGNwdSB0byBpbml0aWFsaXplIHRoZSBwZXJfY3B1IFVWIGRhdGEgYXJlYS4KKyAqIEZJWE1FOiBob3RwbHVnIG5vdCBzdXBwb3J0ZWQgeWV0CisgKi8KK3ZvaWQgX19jcHVpbml0IHV2X2NwdV9pbml0KHZvaWQpCit7CisJLyogQ1BVIDAgaW5pdGlsaXphdGlvbiB3aWxsIGJlIGRvbmUgdmlhIHV2X3N5c3RlbV9pbml0LiAqLworCWlmICghdXZfYmxhZGVfaW5mbykKKwkJcmV0dXJuOworCisJdXZfYmxhZGVfaW5mb1t1dl9udW1hX2JsYWRlX2lkKCldLm5yX29ubGluZV9jcHVzKys7CisKKwlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgPT0gVVZfTk9OX1VOSVFVRV9BUElDKQorCQlzZXRfeDJhcGljX2V4dHJhX2JpdHModXZfaHViX2luZm8tPnBub2RlKTsKK30KKworCit2b2lkIF9faW5pdCB1dl9zeXN0ZW1faW5pdCh2b2lkKQoreworCXVuaW9uIHV2aF9zaV9hZGRyX21hcF9jb25maWdfdSBtX25fY29uZmlnOworCXVuaW9uIHV2aF9ub2RlX2lkX3Ugbm9kZV9pZDsKKwl1bnNpZ25lZCBsb25nIGdub2RlX3VwcGVyLCBsb3dtZW1fcmVkaXJfYmFzZSwgbG93bWVtX3JlZGlyX3NpemU7CisJaW50IGJ5dGVzLCBuaWQsIGNwdSwgbGNwdSwgcG5vZGUsIGJsYWRlLCBpLCBqLCBtX3ZhbCwgbl92YWw7CisJaW50IG1heF9wbm9kZSA9IDA7CisJdW5zaWduZWQgbG9uZyBtbXJfYmFzZSwgcHJlc2VudDsKKworCW1hcF9sb3dfbW1ycygpOworCisJbV9uX2NvbmZpZy52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1NJX0FERFJfTUFQX0NPTkZJRyk7CisJbV92YWwgPSBtX25fY29uZmlnLnMubV9za3Q7CisJbl92YWwgPSBtX25fY29uZmlnLnMubl9za3Q7CisJbW1yX2Jhc2UgPQorCSAgICB1dl9yZWFkX2xvY2FsX21tcihVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVIpICYKKwkgICAgflVWX01NUl9FTkFCTEU7CisJcHJpbnRrKEtFUk5fREVCVUcgIlVWOiBnbG9iYWwgTU1SIGJhc2UgMHglbHhcbiIsIG1tcl9iYXNlKTsKKworCWZvcihpID0gMDsgaSA8IFVWSF9OT0RFX1BSRVNFTlRfVEFCTEVfREVQVEg7IGkrKykKKwkJdXZfcG9zc2libGVfYmxhZGVzICs9CisJCSAgaHdlaWdodDY0KHV2X3JlYWRfbG9jYWxfbW1yKCBVVkhfTk9ERV9QUkVTRU5UX1RBQkxFICsgaSAqIDgpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVVY6IEZvdW5kICVkIGJsYWRlc1xuIiwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpKTsKKworCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCB1dl9ibGFkZV9pbmZvKSAqIHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKKwl1dl9ibGFkZV9pbmZvID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisKKwlnZXRfbG93bWVtX3JlZGlyZWN0KCZsb3dtZW1fcmVkaXJfYmFzZSwgJmxvd21lbV9yZWRpcl9zaXplKTsKKworCWJ5dGVzID0gc2l6ZW9mKHV2X25vZGVfdG9fYmxhZGVbMF0pICogbnVtX3Bvc3NpYmxlX25vZGVzKCk7CisJdXZfbm9kZV90b19ibGFkZSA9IGttYWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOworCW1lbXNldCh1dl9ub2RlX3RvX2JsYWRlLCAyNTUsIGJ5dGVzKTsKKworCWJ5dGVzID0gc2l6ZW9mKHV2X2NwdV90b19ibGFkZVswXSkgKiBudW1fcG9zc2libGVfY3B1cygpOworCXV2X2NwdV90b19ibGFkZSA9IGttYWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOworCW1lbXNldCh1dl9jcHVfdG9fYmxhZGUsIDI1NSwgYnl0ZXMpOworCisJYmxhZGUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBVVkhfTk9ERV9QUkVTRU5UX1RBQkxFX0RFUFRIOyBpKyspIHsKKwkJcHJlc2VudCA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9OT0RFX1BSRVNFTlRfVEFCTEUgKyBpICogOCk7CisJCWZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7CisJCQlpZiAoIXRlc3RfYml0KGosICZwcmVzZW50KSkKKwkJCQljb250aW51ZTsKKwkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLnBub2RlID0gKGkgKiA2NCArIGopOworCQkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubnJfcG9zc2libGVfY3B1cyA9IDA7CisJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9vbmxpbmVfY3B1cyA9IDA7CisJCQlibGFkZSsrOworCQl9CisJfQorCisJbm9kZV9pZC52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX05PREVfSUQpOworCWdub2RlX3VwcGVyID0gKCgodW5zaWduZWQgbG9uZylub2RlX2lkLnMubm9kZV9pZCkgJgorCQkgICAgICAgfigoMSA8PCBuX3ZhbCkgLSAxKSkgPDwgbV92YWw7CisKKwl1dl9iaW9zX2luaXQoKTsKKwl1dl9iaW9zX2dldF9zbl9pbmZvKDAsICZ1dl90eXBlLCAmc25fcGFydGl0aW9uX2lkLAorCQkJICAgICZzbl9jb2hlcmVuY3lfaWQsICZzbl9yZWdpb25fc2l6ZSk7CisJdXZfcnRjX2luaXQoKTsKKworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgeworCQluaWQgPSBjcHVfdG9fbm9kZShjcHUpOworCQlwbm9kZSA9IHV2X2FwaWNpZF90b19wbm9kZShwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpKTsKKwkJYmxhZGUgPSBib290X3Bub2RlX3RvX2JsYWRlKHBub2RlKTsKKwkJbGNwdSA9IHV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX3Bvc3NpYmxlX2NwdXM7CisJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX3Bvc3NpYmxlX2NwdXMrKzsKKworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX2Jhc2UgPSBsb3dtZW1fcmVkaXJfYmFzZTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF90b3AgPSBsb3dtZW1fcmVkaXJfc2l6ZTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm1fdmFsID0gbV92YWw7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG1fdmFsOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bnVtYV9ibGFkZV9pZCA9IGJsYWRlOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkID0gbGNwdTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlID0gcG5vZGU7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZV9tYXNrID0gKDEgPDwgbl92YWwpIC0gMTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDEgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV91cHBlciA9IGdub2RlX3VwcGVyOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5jb2hlcmVuY3lfZG9tYWluX251bWJlciA9IHNuX2NvaGVyZW5jeV9pZDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIub2Zmc2V0ID0gU0NJUl9MT0NBTF9NTVJfQkFTRSArIGxjcHU7CisJCXV2X25vZGVfdG9fYmxhZGVbbmlkXSA9IGJsYWRlOworCQl1dl9jcHVfdG9fYmxhZGVbY3B1XSA9IGJsYWRlOworCQltYXhfcG5vZGUgPSBtYXgocG5vZGUsIG1heF9wbm9kZSk7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlVWOiBjcHUgJWQsIGFwaWNpZCAweCV4LCBwbm9kZSAlZCwgbmlkICVkLCAiCisJCQkibGNwdSAlZCwgYmxhZGUgJWRcbiIsCisJCQljcHUsIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSksIHBub2RlLCBuaWQsCisJCQlsY3B1LCBibGFkZSk7CisJfQorCisJbWFwX2dydV9oaWdoKG1heF9wbm9kZSk7CisJbWFwX21tcl9oaWdoKG1heF9wbm9kZSk7CisJbWFwX2NvbmZpZ19oaWdoKG1heF9wbm9kZSk7CisJbWFwX21taW9oX2hpZ2gobWF4X3Bub2RlKTsKKworCXV2X2NwdV9pbml0KCk7CisJdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIoKTsKKwlwcm9jX21rZGlyKCJzZ2lfdXYiLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCAyNjZlYzZjLi4xMDAzM2ZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0zMDEsNyArMzAxLDcgQEAKICAqLwogI2RlZmluZSBBUE1fWkVST19TRUdTCiAKLSNpbmNsdWRlICJhcG0uaCIKKyNpbmNsdWRlIDxhc20vYXBtLmg+CiAKIC8qCiAgKiBEZWZpbmUgdG8gcmUtaW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IDAgdGltZXIgdG8gMTAwIEh6IGFmdGVyIGEgc3VzcGVuZC4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKaW5kZXggZWU0ZGYwOC4uZmJmMmYzMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAlPRkZTRVQoUFRfRFMsICBwdF9yZWdzLCBkcyk7CiAJT0ZGU0VUKFBUX0VTLCAgcHRfcmVncywgZXMpOwogCU9GRlNFVChQVF9GUywgIHB0X3JlZ3MsIGZzKTsKKwlPRkZTRVQoUFRfR1MsICBwdF9yZWdzLCBncyk7CiAJT0ZGU0VUKFBUX09SSUdfRUFYLCBwdF9yZWdzLCBvcmlnX2F4KTsKIAlPRkZTRVQoUFRfRUlQLCBwdF9yZWdzLCBpcCk7CiAJT0ZGU0VUKFBUX0NTLCAgcHRfcmVncywgY3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCAxZDQxZDNmLi44NzkzYWIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgva2J1aWxkLmg+Ci0jaW5jbHVkZSA8YXNtL3BkYS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpAQCAtNDgsMTYgKzQ3LDYgQEAKICNlbmRpZgogCUJMQU5LKCk7CiAjdW5kZWYgRU5UUlkKLSNkZWZpbmUgRU5UUlkoZW50cnkpIERFRklORShwZGFfICMjIGVudHJ5LCBvZmZzZXRvZihzdHJ1Y3QgeDg2NjRfcGRhLCBlbnRyeSkpCi0JRU5UUlkoa2VybmVsc3RhY2spOyAKLQlFTlRSWShvbGRyc3ApOyAKLQlFTlRSWShwY3VycmVudCk7IAotCUVOVFJZKGlycWNvdW50KTsKLQlFTlRSWShjcHVudW1iZXIpOwotCUVOVFJZKGlycXN0YWNrcHRyKTsKLQlFTlRSWShkYXRhX29mZnNldCk7Ci0JQkxBTksoKTsKLSN1bmRlZiBFTlRSWQogI2lmZGVmIENPTkZJR19QQVJBVklSVAogCUJMQU5LKCk7CiAJT0ZGU0VUKFBBUkFWSVJUX2VuYWJsZWQsIHB2X2luZm8sIHBhcmF2aXJ0X2VuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCmluZGV4IDJjZjIzNjMuLjY4ODJhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8YXNtL3BhdC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKIHN0cnVjdCBjcHVpZF9iaXQgewogCXUxNiBmZWF0dXJlOwpAQCAtNjksNyArNjksNyBAQAogICovCiB2b2lkIF9fY3B1aW5pdCBkZXRlY3RfZXh0ZW5kZWRfdG9wb2xvZ3koc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotI2lmZGVmIENPTkZJR19YODZfU01QCisjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHgsIHN1Yl9pbmRleDsKIAl1bnNpZ25lZCBpbnQgaHRfbWFza193aWR0aCwgY29yZV9wbHVzX21hc2tfd2lkdGg7CiAJdW5zaWduZWQgaW50IGNvcmVfc2VsZWN0X21hc2ssIGNvcmVfbGV2ZWxfc2libGluZ3M7CkBAIC0xMTYsMjIgKzExNiwxNCBAQAogCiAJY29yZV9zZWxlY3RfbWFzayA9ICh+KC0xIDw8IGNvcmVfcGx1c19tYXNrX3dpZHRoKSkgPj4gaHRfbWFza193aWR0aDsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQljLT5jcHVfY29yZV9pZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBodF9tYXNrX3dpZHRoKQorCWMtPmNwdV9jb3JlX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGh0X21hc2tfd2lkdGgpCiAJCQkJCQkgJiBjb3JlX3NlbGVjdF9tYXNrOwotCWMtPnBoeXNfcHJvY19pZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBjb3JlX3BsdXNfbWFza193aWR0aCk7CisJYy0+cGh5c19wcm9jX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGNvcmVfcGx1c19tYXNrX3dpZHRoKTsKIAkvKgogCSAqIFJlaW5pdCB0aGUgYXBpY2lkLCBub3cgdGhhdCB3ZSBoYXZlIGV4dGVuZGVkIGluaXRpYWxfYXBpY2lkLgogCSAqLwotCWMtPmFwaWNpZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKLSNlbHNlCi0JYy0+Y3B1X2NvcmVfaWQgPSBwaHlzX3BrZ19pZChodF9tYXNrX3dpZHRoKSAmIGNvcmVfc2VsZWN0X21hc2s7Ci0JYy0+cGh5c19wcm9jX2lkID0gcGh5c19wa2dfaWQoY29yZV9wbHVzX21hc2tfd2lkdGgpOwotCS8qCi0JICogUmVpbml0IHRoZSBhcGljaWQsIG5vdyB0aGF0IHdlIGhhdmUgZXh0ZW5kZWQgaW5pdGlhbF9hcGljaWQuCi0JICovCi0JYy0+YXBpY2lkID0gcGh5c19wa2dfaWQoMCk7Ci0jZW5kaWYKKwljLT5hcGljaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgMCk7CisKIAljLT54ODZfbWF4X2NvcmVzID0gKGNvcmVfbGV2ZWxfc2libGluZ3MgLyBzbXBfbnVtX3NpYmxpbmdzKTsKIAogCkBAIC0xNDMsMzcgKzEzNSwzIEBACiAJcmV0dXJuOwogI2VuZGlmCiB9Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1BBVAotdm9pZCBfX2NwdWluaXQgdmFsaWRhdGVfcGF0X3N1cHBvcnQoc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCWlmICghY3B1X2hhc19wYXQpCi0JCXBhdF9kaXNhYmxlKCJQQVQgbm90IHN1cHBvcnRlZCBieSBDUFUuIik7Ci0KLQlzd2l0Y2ggKGMtPng4Nl92ZW5kb3IpIHsKLQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCS8qCi0JCSAqIFRoZXJlIGlzIGEga25vd24gZXJyYXR1bSBvbiBQZW50aXVtIElJSSBhbmQgQ29yZSBTb2xvCi0JCSAqIGFuZCBDb3JlIER1byBDUFVzLgotCQkgKiAiIFBhZ2Ugd2l0aCBQQVQgc2V0IHRvIFdDIHdoaWxlIGFzc29jaWF0ZWQgTVRSUiBpcyBVQwotCQkgKiAgIG1heSBjb25zb2xpZGF0ZSB0byBVQyAiCi0JCSAqIEJlY2F1c2Ugb2YgdGhpcyBlcnJhdHVtLCBpdCBpcyBiZXR0ZXIgdG8gc3RpY2sgd2l0aAotCQkgKiBzZXR0aW5nIFdDIGluIE1UUlIgcmF0aGVyIHRoYW4gdXNpbmcgUEFUIG9uIHRoZXNlIENQVXMuCi0JCSAqCi0JCSAqIEVuYWJsZSBQQVQgV0Mgb25seSBvbiBQNCwgQ29yZSAyIG9yIGxhdGVyIENQVXMuCi0JCSAqLwotCQlpZiAoYy0+eDg2ID4gMHg2IHx8IChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPj0gMTUpKQotCQkJcmV0dXJuOwotCi0JCXBhdF9kaXNhYmxlKCJQQVQgV0MgZGlzYWJsZWQgZHVlIHRvIGtub3duIENQVSBlcnJhdHVtLiIpOwotCQlyZXR1cm47Ci0KLQljYXNlIFg4Nl9WRU5ET1JfQU1EOgotCWNhc2UgWDg2X1ZFTkRPUl9DRU5UQVVSOgotCWNhc2UgWDg2X1ZFTkRPUl9UUkFOU01FVEE6Ci0JCXJldHVybjsKLQl9Ci0KLQlwYXRfZGlzYWJsZSgiUEFUIGRpc2FibGVkLiBOb3QgeWV0IHZlcmlmaWVkIG9uIHRoaXMgQ1BVIHR5cGUuIik7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDdjODc4ZjYuLjI1NDIzYTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMTIsOCArMTIsNiBAQAogIyBpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLQogI2luY2x1ZGUgImNwdS5oIgogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggODM0OTJiMS4uODI2ZDVjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0yMSwxNCArMjEsMTQgQEAKICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworI2luY2x1ZGUgPGFzbS91di91di5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgogCiAjaW5jbHVkZSAiY3B1LmgiCiAKQEAgLTUwLDYgKzUxLDE1IEBACiAvKiByZXByZXNlbnRpbmcgY3B1cyBmb3Igd2hpY2ggc2libGluZyBtYXBzIGNhbiBiZSBjb21wdXRlZCAqLwogY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOwogCisvKiBjb3JyZWN0bHkgc2l6ZSB0aGUgbG9jYWwgY3B1IG1hc2tzICovCit2b2lkIF9faW5pdCBzZXR1cF9jcHVfbG9jYWxfbWFza3Modm9pZCkKK3sKKwlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfaW5pdGlhbGl6ZWRfbWFzayk7CisJYWxsb2NfYm9vdG1lbV9jcHVtYXNrX3ZhcigmY3B1X2NhbGxpbl9tYXNrKTsKKwlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfY2FsbG91dF9tYXNrKTsKKwlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfc2libGluZ19zZXR1cF9tYXNrKTsKK30KKwogI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CkBAIC02MiwyMyArNzIsMjMgQEAKIAogc3RhdGljIHN0cnVjdCBjcHVfZGV2ICp0aGlzX2NwdSBfX2NwdWluaXRkYXRhOwogCitERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQoc3RydWN0IGdkdF9wYWdlLCBnZHRfcGFnZSkgPSB7IC5nZHQgPSB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotLyogV2UgbmVlZCB2YWxpZCBrZXJuZWwgc2VnbWVudHMgZm9yIGRhdGEgYW5kIGNvZGUgaW4gbG9uZyBtb2RlIHRvbwotICogSVJFVCB3aWxsIGNoZWNrIHRoZSBzZWdtZW50IHR5cGVzICBra2VpbCAyMDAwLzEwLzI4Ci0gKiBBbHNvIHN5c3JldCBtYW5kYXRlcyBhIHNwZWNpYWwgR0RUIGxheW91dAotICovCi0vKiBUaGUgVExTIGRlc2NyaXB0b3JzIGFyZSBjdXJyZW50bHkgYXQgYSBkaWZmZXJlbnQgcGxhY2UgY29tcGFyZWQgdG8gaTM4Ni4KLSAgIEhvcGVmdWxseSBub2JvZHkgZXhwZWN0cyB0aGVtIGF0IGEgZml4ZWQgcGxhY2UgKFdpbmU/KSAqLwotREVGSU5FX1BFUl9DUFUoc3RydWN0IGdkdF9wYWdlLCBnZHRfcGFnZSkgPSB7IC5nZHQgPSB7CisJLyoKKwkgKiBXZSBuZWVkIHZhbGlkIGtlcm5lbCBzZWdtZW50cyBmb3IgZGF0YSBhbmQgY29kZSBpbiBsb25nIG1vZGUgdG9vCisJICogSVJFVCB3aWxsIGNoZWNrIHRoZSBzZWdtZW50IHR5cGVzICBra2VpbCAyMDAwLzEwLzI4CisJICogQWxzbyBzeXNyZXQgbWFuZGF0ZXMgYSBzcGVjaWFsIEdEVCBsYXlvdXQKKwkgKgorCSAqIFRoZSBUTFMgZGVzY3JpcHRvcnMgYXJlIGN1cnJlbnRseSBhdCBhIGRpZmZlcmVudCBwbGFjZSBjb21wYXJlZCB0byBpMzg2LgorCSAqIEhvcGVmdWxseSBub2JvZHkgZXhwZWN0cyB0aGVtIGF0IGEgZml4ZWQgcGxhY2UgKFdpbmU/KQorCSAqLwogCVtHRFRfRU5UUllfS0VSTkVMMzJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWIwMCB9IH0gfSwKIAlbR0RUX0VOVFJZX0tFUk5FTF9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWY5YjAwIH0gfSB9LAogCVtHRFRfRU5UUllfS0VSTkVMX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkzMDAgfSB9IH0sCiAJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVIzMl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmYjAwIH0gfSB9LAogCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmYzMDAgfSB9IH0sCiAJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmZmIwMCB9IH0gfSwKLX0gfTsKICNlbHNlCi1ERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQoc3RydWN0IGdkdF9wYWdlLCBnZHRfcGFnZSkgPSB7IC5nZHQgPSB7CiAJW0dEVF9FTlRSWV9LRVJORUxfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWEwMCB9IH0gfSwKIAlbR0RUX0VOVFJZX0tFUk5FTF9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MjAwIH0gfSB9LAogCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZhMDAgfSB9IH0sCkBAIC0xMTAsOSArMTIwLDEwIEBACiAJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMl0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5MjAwIH0gfSB9LAogCiAJW0dEVF9FTlRSWV9FU1BGSVhfU1NdID0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMGMwOTIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX1BFUkNQVV0gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSB9LAotfSB9OworCVtHRFRfRU5UUllfUEVSQ1BVXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCisJR0RUX1NUQUNLX0NBTkFSWV9JTklUCiAjZW5kaWYKK30gfTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoZ2R0X3BhZ2UpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtMjEzLDYgKzIyNCw0OSBAQAogI2VuZGlmCiAKIC8qCisgKiBTb21lIENQVSBmZWF0dXJlcyBkZXBlbmQgb24gaGlnaGVyIENQVUlEIGxldmVscywgd2hpY2ggbWF5IG5vdCBhbHdheXMKKyAqIGJlIGF2YWlsYWJsZSBkdWUgdG8gQ1BVSUQgbGV2ZWwgY2FwcGluZyBvciBicm9rZW4gdmlydHVhbGl6YXRpb24KKyAqIHNvZnR3YXJlLiAgQWRkIHRob3NlIGZlYXR1cmVzIHRvIHRoaXMgdGFibGUgdG8gYXV0by1kaXNhYmxlIHRoZW0uCisgKi8KK3N0cnVjdCBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZSB7CisJdTMyIGZlYXR1cmU7CisJdTMyIGxldmVsOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmUgX19jcHVpbml0Y29uc3QKK2NwdWlkX2RlcGVuZGVudF9mZWF0dXJlc1tdID0geworCXsgWDg2X0ZFQVRVUkVfTVdBSVQsCQkweDAwMDAwMDA1IH0sCisJeyBYODZfRkVBVFVSRV9EQ0EsCQkweDAwMDAwMDA5IH0sCisJeyBYODZfRkVBVFVSRV9YU0FWRSwJCTB4MDAwMDAwMGQgfSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIHZvaWQgX19jcHVpbml0IGZpbHRlcl9jcHVpZF9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIGJvb2wgd2FybikKK3sKKwljb25zdCBzdHJ1Y3QgY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmUgKmRmOworCWZvciAoZGYgPSBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZXM7IGRmLT5mZWF0dXJlOyBkZisrKSB7CisJCS8qCisJCSAqIE5vdGU6IGNwdWlkX2xldmVsIGlzIHNldCB0byAtMSBpZiB1bmF2YWlsYWJsZSwgYnV0CisJCSAqIGV4dGVuZGVkX2V4dGVuZGVkX2xldmVsIGlzIHNldCB0byAwIGlmIHVuYXZhaWxhYmxlCisJCSAqIGFuZCB0aGUgbGVnaXRpbWF0ZSBleHRlbmRlZCBsZXZlbHMgYXJlIGFsbCBuZWdhdGl2ZQorCQkgKiB3aGVuIHNpZ25lZDsgaGVuY2UgdGhlIHdlaXJkIG1lc3NpbmcgYXJvdW5kIHdpdGgKKwkJICogc2lnbnMgaGVyZS4uLgorCQkgKi8KKwkJaWYgKGNwdV9oYXMoYywgZGYtPmZlYXR1cmUpICYmCisJCSAgICAoKHMzMilkZi0+bGV2ZWwgPCAwID8KKwkJICAgICAodTMyKWRmLT5sZXZlbCA+ICh1MzIpYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgOgorCQkgICAgIChzMzIpZGYtPmxldmVsID4gKHMzMiljLT5jcHVpZF9sZXZlbCkpIHsKKwkJCWNsZWFyX2NwdV9jYXAoYywgZGYtPmZlYXR1cmUpOworCQkJaWYgKHdhcm4pCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiQ1BVOiBDUFUgZmVhdHVyZSAlcyBkaXNhYmxlZCAiCisJCQkJICAgICAgICJkdWUgdG8gbGFjayBvZiBDUFVJRCBsZXZlbCAweCV4XG4iLAorCQkJCSAgICAgICB4ODZfY2FwX2ZsYWdzW2RmLT5mZWF0dXJlXSwKKwkJCQkgICAgICAgZGYtPmxldmVsKTsKKwkJfQorCX0KK30KKworLyoKICAqIE5hbWluZyBjb252ZW50aW9uIHNob3VsZCBiZTogPE5hbWU+IFsoPENvZGVuYW1lPildCiAgKiBUaGlzIHRhYmxlIG9ubHkgaXMgdXNlZCB1bmxlc3MgaW5pdF88dmVuZG9yPigpIGJlbG93IGRvZXNuJ3Qgc2V0IGl0OwogICogaW4gcGFydGljdWxhciwgaWYgQ1BVSUQgbGV2ZWxzIDB4ODAwMDAwMDIuLjQgYXJlIHN1cHBvcnRlZCwgdGhpcyBpc24ndCB1c2VkCkBAIC0yNDIsMTggKzI5NiwyOSBAQAogCiBfX3UzMiBjbGVhcmVkX2NwdV9jYXBzW05DQVBJTlRTXSBfX2NwdWluaXRkYXRhOwogCit2b2lkIGxvYWRfcGVyY3B1X3NlZ21lbnQoaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJbG9hZHNlZ21lbnQoZnMsIF9fS0VSTkVMX1BFUkNQVSk7CisjZWxzZQorCWxvYWRzZWdtZW50KGdzLCAwKTsKKwl3cm1zcmwoTVNSX0dTX0JBU0UsICh1bnNpZ25lZCBsb25nKXBlcl9jcHUoaXJxX3N0YWNrX3VuaW9uLmdzX2Jhc2UsIGNwdSkpOworI2VuZGlmCisJbG9hZF9zdGFja19jYW5hcnlfc2VnbWVudCgpOworfQorCiAvKiBDdXJyZW50IGdkdCBwb2ludHMgJWZzIGF0IHRoZSAibWFzdGVyIiBwZXItY3B1IGFyZWE6IGFmdGVyIHRoaXMsCiAgKiBpdCdzIG9uIHRoZSByZWFsIG9uZS4gKi8KLXZvaWQgc3dpdGNoX3RvX25ld19nZHQodm9pZCkKK3ZvaWQgc3dpdGNoX3RvX25ld19nZHQoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgZGVzY19wdHIgZ2R0X2Rlc2NyOwogCi0JZ2R0X2Rlc2NyLmFkZHJlc3MgPSAobG9uZylnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCWdkdF9kZXNjci5hZGRyZXNzID0gKGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKIAlnZHRfZGVzY3Iuc2l6ZSA9IEdEVF9TSVpFIC0gMTsKIAlsb2FkX2dkdCgmZ2R0X2Rlc2NyKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JYXNtKCJtb3YgJTAsICUlZnMiIDogOiAiciIgKF9fS0VSTkVMX1BFUkNQVSkgOiAibWVtb3J5Iik7Ci0jZW5kaWYKKwkvKiBSZWxvYWQgdGhlIHBlci1jcHUgYmFzZSAqLworCisJbG9hZF9wZXJjcHVfc2VnbWVudChjcHUpOwogfQogCiBzdGF0aWMgc3RydWN0IGNwdV9kZXYgKmNwdV9kZXZzW1g4Nl9WRU5ET1JfTlVNXSA9IHt9OwpAQCAtMzgzLDExICs0NDgsNyBAQAogCQl9CiAKIAkJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJYy0+cGh5c19wcm9jX2lkID0gcGh5c19wa2dfaWQoaW5kZXhfbXNiKTsKLSNlbHNlCi0JCWMtPnBoeXNfcHJvY19pZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpOwotI2VuZGlmCisJCWMtPnBoeXNfcHJvY19pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpOwogCiAJCXNtcF9udW1fc2libGluZ3MgPSBzbXBfbnVtX3NpYmxpbmdzIC8gYy0+eDg2X21heF9jb3JlczsKIApAQCAtMzk1LDEzICs0NTYsOCBAQAogCiAJCWNvcmVfYml0cyA9IGdldF9jb3VudF9vcmRlcihjLT54ODZfbWF4X2NvcmVzKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJYy0+Y3B1X2NvcmVfaWQgPSBwaHlzX3BrZ19pZChpbmRleF9tc2IpICYKKwkJYy0+Y3B1X2NvcmVfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKSAmCiAJCQkJCSAgICAgICAoKDEgPDwgY29yZV9iaXRzKSAtIDEpOwotI2Vsc2UKLQkJYy0+Y3B1X2NvcmVfaWQgPSBwaHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKSAmCi0JCQkJCSAgICAgICAoKDEgPDwgY29yZV9iaXRzKSAtIDEpOwotI2VuZGlmCiAJfQogCiBvdXQ6CkBAIC01NzAsMTEgKzYyNiwxMCBAQAogCWlmICh0aGlzX2NwdS0+Y19lYXJseV9pbml0KQogCQl0aGlzX2NwdS0+Y19lYXJseV9pbml0KGMpOwogCi0JdmFsaWRhdGVfcGF0X3N1cHBvcnQoYyk7Ci0KICNpZmRlZiBDT05GSUdfU01QCiAJYy0+Y3B1X2luZGV4ID0gYm9vdF9jcHVfaWQ7CiAjZW5kaWYKKwlmaWx0ZXJfY3B1aWRfZmVhdHVyZXMoYywgZmFsc2UpOwogfQogCiB2b2lkIF9faW5pdCBlYXJseV9jcHVfaW5pdCh2b2lkKQpAQCAtNjM3LDcgKzY5Miw3IEBACiAJCWMtPmluaXRpYWxfYXBpY2lkID0gKGNwdWlkX2VieCgxKSA+PiAyNCkgJiAweEZGOwogI2lmZGVmIENPTkZJR19YODZfMzIKICMgaWZkZWYgQ09ORklHX1g4Nl9IVAotCQljLT5hcGljaWQgPSBwaHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgMCk7CisJCWMtPmFwaWNpZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKICMgZWxzZQogCQljLT5hcGljaWQgPSBjLT5pbml0aWFsX2FwaWNpZDsKICMgZW5kaWYKQEAgLTY4NCw3ICs3MzksNyBAQAogCQl0aGlzX2NwdS0+Y19pZGVudGlmeShjKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLQljLT5hcGljaWQgPSBwaHlzX3BrZ19pZCgwKTsKKwljLT5hcGljaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgMCk7CiAjZW5kaWYKIAogCS8qCkBAIC03MDgsNiArNzYzLDkgQEAKIAkgKiB3ZSBkbyAiZ2VuZXJpYyBjaGFuZ2VzLiIKIAkgKi8KIAorCS8qIEZpbHRlciBvdXQgYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIENQVUlEIGxldmVscyB3ZSBkb24ndCBoYXZlICovCisJZmlsdGVyX2NwdWlkX2ZlYXR1cmVzKGMsIHRydWUpOworCiAJLyogSWYgdGhlIG1vZGVsIG5hbWUgaXMgc3RpbGwgdW5zZXQsIGRvIHRhYmxlIGxvb2t1cC4gKi8KIAlpZiAoIWMtPng4Nl9tb2RlbF9pZFswXSkgewogCQljaGFyICpwOwpAQCAtODc3LDU0ICs5MzUsMjIgQEAKIF9fc2V0dXAoImNsZWFyY3B1aWQ9Iiwgc2V0dXBfZGlzYWJsZWNwdWlkKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLXN0cnVjdCB4ODY2NF9wZGEgKipfY3B1X3BkYSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChfY3B1X3BkYSk7Ci0KIHN0cnVjdCBkZXNjX3B0ciBpZHRfZGVzY3IgPSB7IDI1NiAqIDE2IC0gMSwgKHVuc2lnbmVkIGxvbmcpIGlkdF90YWJsZSB9OwogCi1zdGF0aWMgY2hhciBib290X2NwdV9zdGFja1tJUlFTVEFDS1NJWkVdIF9fcGFnZV9hbGlnbmVkX2JzczsKK0RFRklORV9QRVJfQ1BVX0ZJUlNUKHVuaW9uIGlycV9zdGFja191bmlvbiwKKwkJICAgICBpcnFfc3RhY2tfdW5pb24pIF9fYWxpZ25lZChQQUdFX1NJWkUpOworREVGSU5FX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKSA9CisJaW5pdF9wZXJfY3B1X3ZhcihpcnFfc3RhY2tfdW5pb24uaXJxX3N0YWNrKSArIElSUV9TVEFDS19TSVpFIC0gNjQ7CiAKLXZvaWQgX19jcHVpbml0IHBkYV9pbml0KGludCBjcHUpCi17Ci0Jc3RydWN0IHg4NjY0X3BkYSAqcGRhID0gY3B1X3BkYShjcHUpOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywga2VybmVsX3N0YWNrKSA9CisJKHVuc2lnbmVkIGxvbmcpJmluaXRfdGhyZWFkX3VuaW9uIC0gS0VSTkVMX1NUQUNLX09GRlNFVCArIFRIUkVBRF9TSVpFOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGtlcm5lbF9zdGFjayk7CiAKLQkvKiBTZXR1cCB1cCBkYXRhIHRoYXQgbWF5IGJlIG5lZWRlZCBpbiBfX2dldF9mcmVlX3BhZ2VzIGVhcmx5ICovCi0JbG9hZHNlZ21lbnQoZnMsIDApOwotCWxvYWRzZWdtZW50KGdzLCAwKTsKLQkvKiBNZW1vcnkgY2xvYmJlcnMgdXNlZCB0byBvcmRlciBQREEgYWNjZXNzZWQgKi8KLQltYigpOwotCXdybXNybChNU1JfR1NfQkFTRSwgcGRhKTsKLQltYigpOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBpcnFfY291bnQpID0gLTE7CiAKLQlwZGEtPmNwdW51bWJlciA9IGNwdTsKLQlwZGEtPmlycWNvdW50ID0gLTE7Ci0JcGRhLT5rZXJuZWxzdGFjayA9ICh1bnNpZ25lZCBsb25nKXN0YWNrX3RocmVhZF9pbmZvKCkgLQotCQkJCSBQREFfU1RBQ0tPRkZTRVQgKyBUSFJFQURfU0laRTsKLQlwZGEtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotCXBkYS0+bW11X3N0YXRlID0gMDsKLQotCWlmIChjcHUgPT0gMCkgewotCQkvKiBvdGhlcnMgYXJlIGluaXRpYWxpemVkIGluIHNtcGJvb3QuYyAqLwotCQlwZGEtPnBjdXJyZW50ID0gJmluaXRfdGFzazsKLQkJcGRhLT5pcnFzdGFja3B0ciA9IGJvb3RfY3B1X3N0YWNrOwotCQlwZGEtPmlycXN0YWNrcHRyICs9IElSUVNUQUNLU0laRSAtIDY0OwotCX0gZWxzZSB7Ci0JCWlmICghcGRhLT5pcnFzdGFja3B0cikgewotCQkJcGRhLT5pcnFzdGFja3B0ciA9IChjaGFyICopCi0JCQkJX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBJUlFTVEFDS19PUkRFUik7Ci0JCQlpZiAoIXBkYS0+aXJxc3RhY2twdHIpCi0JCQkJcGFuaWMoImNhbm5vdCBhbGxvY2F0ZSBpcnFzdGFjayBmb3IgY3B1ICVkIiwKLQkJCQkgICAgICBjcHUpOwotCQkJcGRhLT5pcnFzdGFja3B0ciArPSBJUlFTVEFDS1NJWkUgLSA2NDsKLQkJfQotCi0JCWlmIChwZGEtPm5vZGVudW1iZXIgPT0gMCAmJiBjcHVfdG9fbm9kZShjcHUpICE9IE5VTUFfTk9fTk9ERSkKLQkJCXBkYS0+bm9kZW51bWJlciA9IGNwdV90b19ub2RlKGNwdSk7Ci0JfQotfQotCi1zdGF0aWMgY2hhciBib290X2V4Y2VwdGlvbl9zdGFja3NbKE5fRVhDRVBUSU9OX1NUQUNLUyAtIDEpICogRVhDRVBUSU9OX1NUS1NaICsKLQkJCQkgIERFQlVHX1NUS1NaXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKGNoYXIsIGV4Y2VwdGlvbl9zdGFja3MKKwlbKE5fRVhDRVBUSU9OX1NUQUNLUyAtIDEpICogRVhDRVBUSU9OX1NUS1NaICsgREVCVUdfU1RLU1pdKQorCV9fYWxpZ25lZChQQUdFX1NJWkUpOwogCiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGlnbm9yZV9zeXNyZXQodm9pZCk7CiAKQEAgLTk1NywxNiArOTgzLDIxIEBACiAgKi8KIERFRklORV9QRVJfQ1BVKHN0cnVjdCBvcmlnX2lzdCwgb3JpZ19pc3QpOwogCi0jZWxzZQorI2Vsc2UJLyogeDg2XzY0ICovCiAKLS8qIE1ha2Ugc3VyZSAlZnMgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkgaW4gaWRsZSB0aHJlYWRzICovCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzdGFja19jYW5hcnkpOworI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSAlZnMgYW5kICVncyBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgaW4gaWRsZSB0aHJlYWRzICovCiBzdHJ1Y3QgcHRfcmVncyAqIF9fY3B1aW5pdCBpZGxlX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogCXJlZ3MtPmZzID0gX19LRVJORUxfUEVSQ1BVOworCXJlZ3MtPmdzID0gX19LRVJORUxfU1RBQ0tfQ0FOQVJZOwogCXJldHVybiByZWdzOwogfQotI2VuZGlmCisjZW5kaWYJLyogeDg2XzY0ICovCiAKIC8qCiAgKiBjcHVfaW5pdCgpIGluaXRpYWxpemVzIHN0YXRlIHRoYXQgaXMgcGVyLUNQVS4gU29tZSBkYXRhIGlzIGFscmVhZHkKQEAgLTk4MiwxNSArMTAxMywxNCBAQAogCXN0cnVjdCB0c3Nfc3RydWN0ICp0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CiAJc3RydWN0IG9yaWdfaXN0ICpvcmlnX2lzdCA9ICZwZXJfY3B1KG9yaWdfaXN0LCBjcHUpOwogCXVuc2lnbmVkIGxvbmcgdjsKLQljaGFyICplc3RhY2tzID0gTlVMTDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lOwogCWludCBpOwogCi0JLyogQ1BVIDAgaXMgaW5pdGlhbGlzZWQgaW4gaGVhZDY0LmMgKi8KLQlpZiAoY3B1ICE9IDApCi0JCXBkYV9pbml0KGNwdSk7Ci0JZWxzZQotCQllc3RhY2tzID0gYm9vdF9leGNlcHRpb25fc3RhY2tzOworI2lmZGVmIENPTkZJR19OVU1BCisJaWYgKGNwdSAhPSAwICYmIHBlcmNwdV9yZWFkKG5vZGVfbnVtYmVyKSA9PSAwICYmCisJICAgIGNwdV90b19ub2RlKGNwdSkgIT0gTlVNQV9OT19OT0RFKQorCQlwZXJjcHVfd3JpdGUobm9kZV9udW1iZXIsIGNwdV90b19ub2RlKGNwdSkpOworI2VuZGlmCiAKIAltZSA9IGN1cnJlbnQ7CiAKQEAgLTEwMDYsNyArMTAzNiw5IEBACiAJICogYW5kIHNldCB1cCB0aGUgR0RUIGRlc2NyaXB0b3I6CiAJICovCiAKLQlzd2l0Y2hfdG9fbmV3X2dkdCgpOworCXN3aXRjaF90b19uZXdfZ2R0KGNwdSk7CisJbG9hZHNlZ21lbnQoZnMsIDApOworCiAJbG9hZF9pZHQoKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKSZpZHRfZGVzY3IpOwogCiAJbWVtc2V0KG1lLT50aHJlYWQudGxzX2FycmF5LCAwLCBHRFRfRU5UUllfVExTX0VOVFJJRVMgKiA4KTsKQEAgLTEwMTcsMjUgKzEwNDksMjAgQEAKIAliYXJyaWVyKCk7CiAKIAljaGVja19lZmVyKCk7Ci0JaWYgKGNwdSAhPSAwICYmIHgyYXBpYykKKwlpZiAoY3B1ICE9IDApCiAJCWVuYWJsZV94MmFwaWMoKTsKIAogCS8qCiAJICogc2V0IHVwIGFuZCBsb2FkIHRoZSBwZXItQ1BVIFRTUwogCSAqLwogCWlmICghb3JpZ19pc3QtPmlzdFswXSkgewotCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9yZGVyW05fRVhDRVBUSU9OX1NUQUNLU10gPSB7Ci0JCSAgWzAgLi4uIE5fRVhDRVBUSU9OX1NUQUNLUyAtIDFdID0gRVhDRVBUSU9OX1NUQUNLX09SREVSLAotCQkgIFtERUJVR19TVEFDSyAtIDFdID0gREVCVUdfU1RBQ0tfT1JERVIKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzaXplc1tOX0VYQ0VQVElPTl9TVEFDS1NdID0geworCQkgIFswIC4uLiBOX0VYQ0VQVElPTl9TVEFDS1MgLSAxXSA9IEVYQ0VQVElPTl9TVEtTWiwKKwkJICBbREVCVUdfU1RBQ0sgLSAxXSA9IERFQlVHX1NUS1NaCiAJCX07CisJCWNoYXIgKmVzdGFja3MgPSBwZXJfY3B1KGV4Y2VwdGlvbl9zdGFja3MsIGNwdSk7CiAJCWZvciAodiA9IDA7IHYgPCBOX0VYQ0VQVElPTl9TVEFDS1M7IHYrKykgewotCQkJaWYgKGNwdSkgewotCQkJCWVzdGFja3MgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgb3JkZXJbdl0pOwotCQkJCWlmICghZXN0YWNrcykKLQkJCQkJcGFuaWMoIkNhbm5vdCBhbGxvY2F0ZSBleGNlcHRpb24gIgotCQkJCQkgICAgICAic3RhY2sgJWxkICVkXG4iLCB2LCBjcHUpOwotCQkJfQotCQkJZXN0YWNrcyArPSBQQUdFX1NJWkUgPDwgb3JkZXJbdl07CisJCQllc3RhY2tzICs9IHNpemVzW3ZdOwogCQkJb3JpZ19pc3QtPmlzdFt2XSA9IHQtPng4Nl90c3MuaXN0W3ZdID0KIAkJCQkJKHVuc2lnbmVkIGxvbmcpZXN0YWNrczsKIAkJfQpAQCAtMTA2OSwyMiArMTA5NiwxOSBAQAogCSAqLwogCWlmIChrZ2RiX2Nvbm5lY3RlZCAmJiBhcmNoX2tnZGJfb3BzLmNvcnJlY3RfaHdfYnJlYWspCiAJCWFyY2hfa2dkYl9vcHMuY29ycmVjdF9od19icmVhaygpOwotCWVsc2UgeworCWVsc2UKICNlbmRpZgotCS8qCi0JICogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOgotCSAqLwotCi0Jc2V0X2RlYnVncmVnKDBVTCwgMCk7Ci0Jc2V0X2RlYnVncmVnKDBVTCwgMSk7Ci0Jc2V0X2RlYnVncmVnKDBVTCwgMik7Ci0Jc2V0X2RlYnVncmVnKDBVTCwgMyk7Ci0Jc2V0X2RlYnVncmVnKDBVTCwgNik7Ci0Jc2V0X2RlYnVncmVnKDBVTCwgNyk7Ci0jaWZkZWYgQ09ORklHX0tHREIKLQkvKiBJZiB0aGUga2dkYiBpcyBjb25uZWN0ZWQgbm8gZGVidWcgcmVncyBzaG91bGQgYmUgYWx0ZXJlZC4gKi8KKwl7CisJCS8qCisJCSAqIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczoKKwkJICovCisJCXNldF9kZWJ1Z3JlZygwVUwsIDApOworCQlzZXRfZGVidWdyZWcoMFVMLCAxKTsKKwkJc2V0X2RlYnVncmVnKDBVTCwgMik7CisJCXNldF9kZWJ1Z3JlZygwVUwsIDMpOworCQlzZXRfZGVidWdyZWcoMFVMLCA2KTsKKwkJc2V0X2RlYnVncmVnKDBVTCwgNyk7CiAJfQotI2VuZGlmCiAKIAlmcHVfaW5pdCgpOwogCkBAIC0xMTE0LDcgKzExMzgsNyBAQAogCQljbGVhcl9pbl9jcjQoWDg2X0NSNF9WTUV8WDg2X0NSNF9QVkl8WDg2X0NSNF9UU0R8WDg2X0NSNF9ERSk7CiAKIAlsb2FkX2lkdCgmaWR0X2Rlc2NyKTsKLQlzd2l0Y2hfdG9fbmV3X2dkdCgpOworCXN3aXRjaF90b19uZXdfZ2R0KGNwdSk7CiAKIAkvKgogCSAqIFNldCB1cCBhbmQgbG9hZCB0aGUgcGVyLUNQVSBUU1MgYW5kIExEVApAQCAtMTEzNSw5ICsxMTU5LDYgQEAKIAlfX3NldF90c3NfZGVzYyhjcHUsIEdEVF9FTlRSWV9ET1VCTEVGQVVMVF9UU1MsICZkb3VibGVmYXVsdF90c3MpOwogI2VuZGlmCiAKLQkvKiBDbGVhciAlZ3MuICovCi0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWdzIiA6IDogInIiICgwKSk7Ci0KIAkvKiBDbGVhciBhbGwgNiBkZWJ1ZyByZWdpc3RlcnM6ICovCiAJc2V0X2RlYnVncmVnKDAsIDApOwogCXNldF9kZWJ1Z3JlZygwLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKaW5kZXggNjU3OTJjMi4uNTJjODM5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKQEAgLTg3LDMwICs4NywxNSBAQAogY29uZmlnIFg4Nl9QT1dFUk5PV19LOAogCXRyaXN0YXRlICJBTUQgT3B0ZXJvbi9BdGhsb242NCBQb3dlck5vdyEiCiAJc2VsZWN0IENQVV9GUkVRX1RBQkxFCisJZGVwZW5kcyBvbiBBQ1BJICYmIEFDUElfUFJPQ0VTU09SCiAJaGVscAotCSAgVGhpcyBhZGRzIHRoZSBDUFVGcmVxIGRyaXZlciBmb3IgbW9iaWxlIEFNRCBPcHRlcm9uL0F0aGxvbjY0IHByb2Nlc3NvcnMuCisJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBLOC9LMTAgT3B0ZXJvbi9BdGhsb242NCBwcm9jZXNzb3JzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm5vdy1rOC4KIAogCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXEvPi4KIAotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCi1jb25maWcgWDg2X1BPV0VSTk9XX0s4X0FDUEkKLQlib29sCi0JcHJvbXB0ICJBQ1BJIFN1cHBvcnQiIGlmIFg4Nl8zMgotCWRlcGVuZHMgb24gQUNQSSAmJiBYODZfUE9XRVJOT1dfSzggJiYgQUNQSV9QUk9DRVNTT1IKLQlkZXBlbmRzIG9uICEoWDg2X1BPV0VSTk9XX0s4ID0geSAmJiBBQ1BJX1BST0NFU1NPUiA9IG0pCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEs4cyBQcm9jZXNzb3IgUGVyZm9ybWFuY2UgU3RhdGVzIHZpYSBBQ1BJLgotCSAgVGhpcyBkcml2ZXIgaXMgcHJvYmFibHkgcmVxdWlyZWQgZm9yIENQVUZyZXEgdG8gd29yayB3aXRoIG11bHRpLXNvY2tldCBhbmQKLQkgIFNNUCBzeXN0ZW1zLiAgSXQgaXMgbm90IHJlcXVpcmVkIG9uIGF0IGxlYXN0IHNvbWUgc2luZ2xlLXNvY2tldCB5ZXQKLQkgIG11bHRpLWNvcmUgc3lzdGVtcywgZXZlbiBpZiBTTVAgaXMgZW5hYmxlZC4KLQotCSAgSXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLgotCiBjb25maWcgWDg2X0dYX1NVU1BNT0QKIAl0cmlzdGF0ZSAiQ3lyaXggTWVkaWFHWC9OYXRTZW1pIEdlb2RlIFN1c3BlbmQgTW9kdWxhdGlvbiIKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCA1NjBmNzc2Li41MDkyOTZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCkBAIC0xLDYgKzEsMTEgQEAKKyMgTGluayBvcmRlciBtYXR0ZXJzLiBLOCBpcyBwcmVmZXJyZWQgdG8gQUNQSSBiZWNhdXNlIG9mIGZpcm13YXJlIGJ1Z3MgaW4gZWFybHkKKyMgSzggc3lzdGVtcy4gQUNQSSBpcyBwcmVmZXJyZWQgdG8gYWxsIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuCisjIHNwZWVkc3RlcC0qIGlzIHByZWZlcnJlZCBvdmVyIHA0LWNsb2NrbW9kLgorCitvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubworb2JqLSQoQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVEpCQkrPSBhY3BpLWNwdWZyZXEubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNikJCSs9IHBvd2Vybm93LWs2Lm8KIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzcpCQkrPSBwb3dlcm5vdy1rNy5vCi1vYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubwogb2JqLSQoQ09ORklHX1g4Nl9MT05HSEFVTCkJCSs9IGxvbmdoYXVsLm8KIG9iai0kKENPTkZJR19YODZfRV9QT1dFUlNBVkVSKQkJKz0gZV9wb3dlcnNhdmVyLm8KIG9iai0kKENPTkZJR19FTEFOX0NQVUZSRVEpCQkrPSBlbGFuZnJlcS5vCkBAIC0xMCw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9JQ0gpCQkrPSBzcGVlZHN0ZXAtaWNoLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0xJQikJCSs9IHNwZWVkc3RlcC1saWIubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfU01JKQkJKz0gc3BlZWRzdGVwLXNtaS5vCi1vYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTykJKz0gc3BlZWRzdGVwLWNlbnRyaW5vLm8KIG9iai0kKENPTkZJR19YODZfUDRfQ0xPQ0tNT0QpCQkrPSBwNC1jbG9ja21vZC5vCiBvYmotJChDT05GSUdfWDg2X0NQVUZSRVFfTkZPUkNFMikJKz0gY3B1ZnJlcS1uZm9yY2UyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCA0YjFjMzE5Li4yM2RhOTZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFjcGktY3B1ZnJlcS5jIC0gQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyICgkUmV2aXNpb246IDEuNCAkKQorICogYWNwaS1jcHVmcmVxLmMgLSBBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KQEAgLTM2LDE2ICszNiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiYWNwaS1jcHVmcmVxIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImFjcGktY3B1ZnJlcSIsIG1zZykKIAogTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCwgRG9taW5payBCcm9kb3dza2kiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyIik7CkBAIC05NSw3ICs5Nyw3IEBACiAKIAlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCi0JZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CiAJCWlmICh2YWx1ZSA9PSBwZXJmLT5zdGF0ZXNbaV0uc3RhdHVzKQogCQkJcmV0dXJuIGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5OwogCX0KQEAgLTExMCw3ICsxMTIsNyBAQAogCW1zciAmPSBJTlRFTF9NU1JfUkFOR0U7CiAJcGVyZiA9IGRhdGEtPmFjcGlfZGF0YTsKIAotCWZvciAoaT0wOyBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CisJZm9yIChpID0gMDsgZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgewogCQlpZiAobXNyID09IHBlcmYtPnN0YXRlc1tkYXRhLT5mcmVxX3RhYmxlW2ldLmluZGV4XS5zdGF0dXMpCiAJCQlyZXR1cm4gZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3k7CiAJfQpAQCAtMTM4LDE1ICsxNDAsMTMgQEAKIAl1OCBiaXRfd2lkdGg7CiB9OwogCi10eXBlZGVmIHVuaW9uIHsKLQlzdHJ1Y3QgbXNyX2FkZHIgbXNyOwotCXN0cnVjdCBpb19hZGRyIGlvOwotfSBkcnZfYWRkcl91bmlvbjsKLQogc3RydWN0IGRydl9jbWQgewogCXVuc2lnbmVkIGludCB0eXBlOwogCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrOwotCWRydl9hZGRyX3VuaW9uIGFkZHI7CisJdW5pb24geworCQlzdHJ1Y3QgbXNyX2FkZHIgbXNyOworCQlzdHJ1Y3QgaW9fYWRkciBpbzsKKwl9IGFkZHI7CiAJdTMyIHZhbDsKIH07CiAKQEAgLTM2OSw3ICszNjksNyBAQAogCXVuc2lnbmVkIGludCBjdXJfZnJlcTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaT0wOyBpPDEwMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAJCWN1cl9mcmVxID0gZXh0cmFjdF9mcmVxKGdldF9jdXJfdmFsKG1hc2spLCBkYXRhKTsKIAkJaWYgKGN1cl9mcmVxID09IGZyZXEpCiAJCQlyZXR1cm4gMTsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCQl1bnNpZ25lZCBsb25nIGZyZXE7CiAJCXVuc2lnbmVkIGxvbmcgZnJlcW4gPSBwZXJmLT5zdGF0ZXNbMF0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCi0JCWZvciAoaT0wOyBpPChwZXJmLT5zdGF0ZV9jb3VudC0xKTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAocGVyZi0+c3RhdGVfY291bnQtMSk7IGkrKykgewogCQkJZnJlcSA9IGZyZXFuOwogCQkJZnJlcW4gPSBwZXJmLT5zdGF0ZXNbaSsxXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJCQlpZiAoKDIgKiBjcHVfa2h6KSA+IChmcmVxbiArIGZyZXEpKSB7CkBAIC02MDEsNyArNjAxLDcgQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGF0YS0+YWNwaV9kYXRhID0gcGVyY3B1X3B0cihhY3BpX3BlcmZfZGF0YSwgY3B1KTsKKwlkYXRhLT5hY3BpX2RhdGEgPSBwZXJfY3B1X3B0cihhY3BpX3BlcmZfZGF0YSwgY3B1KTsKIAlwZXJfY3B1KGRydl9kYXRhLCBjcHUpID0gZGF0YTsKIAogCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpCkBAIC02NzMsNyArNjczLDcgQEAKIAogCS8qIGRldGVjdCB0cmFuc2l0aW9uIGxhdGVuY3kgKi8KIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMDsKLQlmb3IgKGk9MDsgaTxwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKIAkJaWYgKChwZXJmLT5zdGF0ZXNbaV0udHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwMCkgPgogCQkgICAgcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSkKIAkJCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPQpAQCAtNjgyLDggKzY4Miw4IEBACiAKIAlkYXRhLT5tYXhfZnJlcSA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJLyogdGFibGUgaW5pdCAqLwotCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKLQkJaWYgKGk+MCAmJiBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgPj0KKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykgeworCQlpZiAoaSA+IDAgJiYgcGVyZi0+c3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ID49CiAJCSAgICBkYXRhLT5mcmVxX3RhYmxlW3ZhbGlkX3N0YXRlcy0xXS5mcmVxdWVuY3kgLyAxMDAwKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwppbmRleCA5NjVlYTUyLi43MzMwOTNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiBuZm9yY2UyX2NoaXBzZXQ6CiAgKiBGU0IgaXMgY2hhbmdlZCB1c2luZyB0aGUgY2hpcHNldAogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5mb3JjZTJfY2hpcHNldF9kZXY7CitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5mb3JjZTJfZGV2OwogCiAvKiBmaWQ6CiAgKiBtdWx0aXBsaWVyICogMTAKQEAgLTU2LDcgKzU2LDkgQEAKIE1PRFVMRV9QQVJNX0RFU0MobWluX2ZzYiwKIAkJIk1pbmltdW0gRlNCIHRvIHVzZSwgaWYgbm90IGRlZmluZWQ6IGN1cnJlbnQgRlNCIC0gNTAiKTsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJjcHVmcmVxLW5mb3JjZTIiLCBtc2cpCisjZGVmaW5lIFBGWCAiY3B1ZnJlcS1uZm9yY2UyOiAiCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiY3B1ZnJlcS1uZm9yY2UyIiwgbXNnKQogCiAvKioKICAqIG5mb3JjZTJfY2FsY19mc2IgLSBjYWxjdWxhdGUgRlNCCkBAIC0xMTgsMTEgKzEyMCwxMSBAQAogCWludCB0ZW1wOwogCiAJLyogU2V0IHRoZSBwbGwgYWRkci4gdG8gMHgwMCAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExBRFIsIDApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMQURSLCAwKTsKIAogCS8qIE5vdyB3cml0ZSB0aGUgdmFsdWUgaW4gYWxsIDY0IHJlZ2lzdGVycyAqLwogCWZvciAodGVtcCA9IDA7IHRlbXAgPD0gMHgzZjsgdGVtcCsrKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMUkVHLCBwbGwpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTFJFRywgcGxsKTsKIAogCXJldHVybjsKIH0KQEAgLTEzOSw4ICsxNDEsOCBAQAogCXUzMiBmc2IsIHRlbXAgPSAwOwogCiAJLyogR2V0IGNoaXBzZXQgYm9vdCBGU0IgZnJvbSBzdWJkZXZpY2UgNSAoRlNCIGF0IGJvb3QtdGltZSkgKi8KLQluZm9yY2UyX3N1YjUgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwKLQkJCQkJCTB4MDFFRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJbmZvcmNlMl9zdWI1ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsIDB4MDFFRiwKKwkJCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKIAlpZiAoIW5mb3JjZTJfc3ViNSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE0OCwxMyArMTUwLDEzIEBACiAJZnNiIC89IDEwMDAwMDA7CiAKIAkvKiBDaGVjayBpZiBQTEwgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZXQgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOwogCiAJaWYgKGJvb3Rmc2IgfHwgIXRlbXApCiAJCXJldHVybiBmc2I7CiAKIAkvKiBVc2UgUExMIHJlZ2lzdGVyIEZTQiB2YWx1ZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTFJFRywgJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExSRUcsICZ0ZW1wKTsKIAlmc2IgPSBuZm9yY2UyX2NhbGNfZnNiKHRlbXApOwogCiAJcmV0dXJuIGZzYjsKQEAgLTE3NCwxOCArMTc2LDE4IEBACiAJaW50IHBsbCA9IDA7CiAKIAlpZiAoKGZzYiA+IG1heF9mc2IpIHx8IChmc2IgPCBORk9SQ0UyX01JTl9GU0IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogRlNCICVkIGlzIG91dCBvZiByYW5nZSFcbiIsIGZzYik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkZTQiAlZCBpcyBvdXQgb2YgcmFuZ2UhXG4iLCBmc2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAl0ZnNiID0gbmZvcmNlMl9mc2JfcmVhZCgwKTsKIAlpZiAoIXRmc2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBGU0JcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBGU0JcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBGaXJzdCB3cml0ZT8gVGhlbiBzZXQgYWN0dWFsIHZhbHVlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCAqKSZ0ZW1wKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCAqKSZ0ZW1wKTsKIAlpZiAoIXRlbXApIHsKIAkJcGxsID0gbmZvcmNlMl9jYWxjX3BsbCh0ZnNiKTsKIApAQCAtMTk3LDcgKzE5OSw3IEBACiAKIAkvKiBFbmFibGUgd3JpdGUgYWNjZXNzICovCiAJdGVtcCA9IDB4MDE7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTgpdGVtcCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4KXRlbXApOwogCiAJZGlmZiA9IHRmc2IgLSBmc2I7CiAKQEAgLTIyMiw3ICsyMjQsNyBAQAogCX0KIAogCXRlbXAgPSAweDQwOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEFEUiwgKHU4KXRlbXApOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExBRFIsICh1OCl0ZW1wKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ0LDcgKzI0Niw4IEBACiAgKiBuZm9yY2UyX3RhcmdldCAtIHNldCBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICogIChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIFNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kuCiAgKi8KQEAgLTI3Niw3ICsyNzksNyBAQAogCS8qIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgKi8KIAogCWlmIChuZm9yY2UyX3NldF9mc2IodGFyZ2V0X2ZzYikgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IENoYW5naW5nIEZTQiB0byAlZCBmYWlsZWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNoYW5naW5nIEZTQiB0byAlZCBmYWlsZWRcbiIsCiAJCQl0YXJnZXRfZnNiKTsKIAllbHNlCiAJCWRwcmludGsoIkNoYW5nZWQgRlNCIHN1Y2Nlc3NmdWxseSB0byAlZFxuIiwKQEAgLTMyNyw4ICszMzAsOCBAQAogCS8qIEZJWDogR2V0IEZJRCBmcm9tIENQVSAqLwogCWlmICghZmlkKSB7CiAJCWlmICghY3B1X2toeikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjcHVmcmVxOiBjcHVfa2h6IG5vdCBzZXQsIGNhbid0IGNhbGN1bGF0ZSBtdWx0aXBsaWVyIVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJImNwdV9raHogbm90IHNldCwgY2FuJ3QgY2FsY3VsYXRlIG11bHRpcGxpZXIhXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKQEAgLTM0Myw3ICszNDYsNyBAQAogCQl9CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3B1ZnJlcTogRlNCIGN1cnJlbnRseSBhdCAlaSBNSHosIEZJRCAlZC4lZFxuIiwgZnNiLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJGU0IgY3VycmVudGx5IGF0ICVpIE1IeiwgRklEICVkLiVkXG4iLCBmc2IsCiAJICAgICAgIGZpZCAvIDEwLCBmaWQgJSAxMCk7CiAKIAkvKiBTZXQgbWF4aW11bSBGU0IgdG8gRlNCIGF0IGJvb3QgdGltZSAqLwpAQCAtMzkyLDE3ICszOTUsMTggQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBuZm9yY2UyX2RldGVjdF9jaGlwc2V0KHZvaWQpCiB7Ci0JbmZvcmNlMl9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLAorCW5mb3JjZTJfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsCiAJCQkJCVBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTIsCiAJCQkJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwogCi0JaWYgKG5mb3JjZTJfY2hpcHNldF9kZXYgPT0gTlVMTCkKKwlpZiAobmZvcmNlMl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiBEZXRlY3RlZCBuRm9yY2UyIGNoaXBzZXQgcmV2aXNpb24gJVhcbiIsCi0JICAgICAgIG5mb3JjZTJfY2hpcHNldF9kZXYtPnJldmlzaW9uKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJjcHVmcmVxOiBGU0IgY2hhbmdpbmcgaXMgbWF5YmUgdW5zdGFibGUgYW5kIGNhbiBsZWFkIHRvIGNyYXNoZXMgYW5kIGRhdGEgbG9zcy5cbiIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJEZXRlY3RlZCBuRm9yY2UyIGNoaXBzZXQgcmV2aXNpb24gJVhcbiIsCisJICAgICAgIG5mb3JjZTJfZGV2LT5yZXZpc2lvbik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkgICAgICAgIkZTQiBjaGFuZ2luZyBpcyBtYXliZSB1bnN0YWJsZSBhbmQgY2FuIGxlYWQgdG8gIgorCSAgICAgICAiY3Jhc2hlcyBhbmQgZGF0YSBsb3NzLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMCw3ICs0MjQsNyBAQAogCiAJLyogZGV0ZWN0IGNoaXBzZXQgKi8KIAlpZiAobmZvcmNlMl9kZXRlY3RfY2hpcHNldCgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogTm8gbkZvcmNlMiBjaGlwc2V0LlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBuRm9yY2UyIGNoaXBzZXQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKaW5kZXggYzJmOTMwZC4uMzVhMjU3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpAQCAtMTIsMTIgKzEyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vdHNjLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKICNkZWZpbmUgRVBTX0JSQU5EX0M3TQkwCiAjZGVmaW5lIEVQU19CUkFORF9DNwkxCkBAIC0xODQsNyArMTg0LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0Jc3dpdGNoKGJyYW5kKSB7CisJc3dpdGNoIChicmFuZCkgewogCWNhc2UgRVBTX0JSQU5EX0M3TToKIAkJcHJpbnRrKEtFUk5fQ09OVCAiQzctTVxuIik7CiAJCWJyZWFrOwpAQCAtMjA0LDEyICsyMDQsMTIgQEAKIAl9CiAJLyogRW5hYmxlIEVuaGFuY2VkIFBvd2VyU2F2ZXIgKi8KIAlyZG1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIHZhbCk7Ci0JaWYgKCEodmFsICYgMSA8PCAxNikpIHsKLQkJdmFsIHw9IDEgPDwgMTY7CisJaWYgKCEodmFsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQKSkgeworCQl2YWwgfD0gTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQOwogCQl3cm1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIHZhbCk7CiAJCS8qIENhbiBiZSBsb2NrZWQgYXQgMCAqLwogCQlyZG1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIHZhbCk7Ci0JCWlmICghKHZhbCAmIDEgPDwgMTYpKSB7CisJCWlmICghKHZhbCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX0VOSEFOQ0VEX1NQRUVEU1RFUCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImVwczogQ2FuJ3QgZW5hYmxlIEVuaGFuY2VkIFBvd2VyU2F2ZXJcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTIxOCwxNyArMjE4LDIwIEBACiAJLyogUHJpbnQgdm9sdGFnZSBhbmQgbXVsdGlwbGllciAqLwogCXJkbXNyKE1TUl9JQTMyX1BFUkZfU1RBVFVTLCBsbywgaGkpOwogCWN1cnJlbnRfdm9sdGFnZSA9IGxvICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgdm9sdGFnZSA9ICVkbVZcbiIsIGN1cnJlbnRfdm9sdGFnZSAqIDE2ICsgNzAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgdm9sdGFnZSA9ICVkbVZcbiIsCisJCQljdXJyZW50X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CiAJY3VycmVudF9tdWx0aXBsaWVyID0gKGxvID4+IDgpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgbXVsdGlwbGllciA9ICVkXG4iLCBjdXJyZW50X211bHRpcGxpZXIpOwogCiAJLyogUHJpbnQgbGltaXRzICovCiAJbWF4X3ZvbHRhZ2UgPSBoaSAmIDB4ZmY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBIaWdoZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLCBtYXhfdm9sdGFnZSAqIDE2ICsgNzAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJlcHM6IEhpZ2hlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsCisJCQltYXhfdm9sdGFnZSAqIDE2ICsgNzAwKTsKIAltYXhfbXVsdGlwbGllciA9IChoaSA+PiA4KSAmIDB4ZmY7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBIaWdoZXN0IG11bHRpcGxpZXIgPSAlZFxuIiwgbWF4X211bHRpcGxpZXIpOwogCW1pbl92b2x0YWdlID0gKGhpID4+IDE2KSAmIDB4ZmY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBMb3dlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsIG1pbl92b2x0YWdlICogMTYgKyA3MDApOworCXByaW50ayhLRVJOX0lORk8gImVwczogTG93ZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLAorCQkJbWluX3ZvbHRhZ2UgKiAxNiArIDcwMCk7CiAJbWluX211bHRpcGxpZXIgPSAoaGkgPj4gMjQpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IExvd2VzdCBtdWx0aXBsaWVyID0gJWRcbiIsIG1pbl9tdWx0aXBsaWVyKTsKIApAQCAtMzE4LDcgKzMyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBlcHNfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKmVwc19hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMzU2LDcgKzM1OSw3IEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmZXBzX2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlJhZmGzIEJpbHNraSA8cmFmYWxiaWxza2lAaW50ZXJpYS5wbD4iKTsKK01PRFVMRV9BVVRIT1IoIlJhZmFsIEJpbHNraSA8cmFmYWxiaWxza2lAaW50ZXJpYS5wbD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRW5oYW5jZWQgUG93ZXJTYXZlciBkcml2ZXIgZm9yIFZJQSBDNyBDUFUncy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYwppbmRleCBmZTYxM2M5Li4wMDZiMjc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYwpAQCAtMTg0LDcgKzE4NCw4IEBACiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlID0gMDsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmZWxhbmZyZXFfdGFibGVbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmVsYW5mcmVxX3RhYmxlWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllbGFuZnJlcV9zZXRfY3B1X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTMwMSw3ICszMDIsOCBAQAogbW9kdWxlX3BhcmFtKG1heF9mcmVxLCBpbnQsIDA0NDQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBTdmVuIEdlZ2d1cyA8c3ZlbkBnZWdndXMubmV0PiIpOworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgIgorCQkiU3ZlbiBHZWdndXMgPHN2ZW5AZ2VnZ3VzLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiY3B1ZnJlcSBkcml2ZXIgZm9yIEFNRCdzIEVsYW4gQ1BVcyIpOwogCiBtb2R1bGVfaW5pdChlbGFuZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCmluZGV4IDlkOWVhZTguLmFjMjdlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYwpAQCAtNzksOCArNzksOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCiAvKiBQQ0kgY29uZmlnIHJlZ2lzdGVycywgYWxsIGF0IEYwICovCiAjZGVmaW5lIFBDSV9QTUVSMQkweDgwCS8qIHBvd2VyIG1hbmFnZW1lbnQgZW5hYmxlIHJlZ2lzdGVyIDEgKi8KQEAgLTEyMiw4ICsxMjMsOCBAQAogc3RhdGljIGludCBzdG9ja19mcmVxOwogCiAvKiBQQ0kgYnVzIGNsb2NrIC0gZGVmYXVsdHMgdG8gMzAuMDAwIGlmIGNwdV9raHogaXMgbm90IGF2YWlsYWJsZSAqLwotc3RhdGljIGludCBwY2lfYnVzY2xrID0gMDsKLW1vZHVsZV9wYXJhbSAocGNpX2J1c2NsaywgaW50LCAwNDQ0KTsKK3N0YXRpYyBpbnQgcGNpX2J1c2NsazsKK21vZHVsZV9wYXJhbShwY2lfYnVzY2xrLCBpbnQsIDA0NDQpOwogCiAvKiBtYXhpbXVtIGR1cmF0aW9uIGZvciB3aGljaCB0aGUgY3B1IG1heSBiZSBzdXNwZW5kZWQKICAqICgzMnVzICogTUFYX0RVUkFUSU9OKS4gSWYgbm8gcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGlzIGRlZmF1bHRzCkBAIC0xMzIsNyArMTMzLDcgQEAKICAqIGlzIHN1c3BlbmRlZCAtLSBwcm9jZXNzaW5nIHBvd2VyIGlzIGp1c3QgMC4zOSUgb2Ygd2hhdCBpdCB1c2VkIHRvIGJlLAogICogdGhvdWdoLiA3ODEuMjUga0h6KCEpIGZvciBhIDIwMCBNSHogcHJvY2Vzc29yIC0tIHdvdy4gKi8KIHN0YXRpYyBpbnQgbWF4X2R1cmF0aW9uID0gMjU1OwotbW9kdWxlX3BhcmFtIChtYXhfZHVyYXRpb24sIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0obWF4X2R1cmF0aW9uLCBpbnQsIDA0NDQpOwogCiAvKiBGb3IgdGhlIGRlZmF1bHQgcG9saWN5LCB3ZSB3YW50IGF0IGxlYXN0IHNvbWUgcHJvY2Vzc2luZyBwb3dlcgogICogLSBsZXQncyBzYXkgNSUuIChtaW4gPSBtYXhmcmVxIC8gUE9MSUNZX01JTl9ESVYpCkBAIC0xNDAsNyArMTQxLDggQEAKICNkZWZpbmUgUE9MSUNZX01JTl9ESVYgMjAKIAogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImd4LXN1c3Btb2QiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiZ3gtc3VzcG1vZCIsIG1zZykKIAogLyoqCiAgKiB3ZSBjYW4gZGV0ZWN0IGEgY29yZSBtdWx0aXBpbGVyIGZyb20gZGlyMF9sc2IKQEAgLTE2NiwxMiArMTY4LDIwIEBACiAgKglMb3cgTGV2ZWwgY2hpcHNldCBpbnRlcmZhY2UJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZ3hfY2hpcHNldF90YmxbXSBfX2luaXRkYXRhID0gewotCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1ksCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTEwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyAwLCB9LAogfTsKIAorc3RhdGljIHZvaWQgZ3hfd3JpdGVfYnl0ZShpbnQgcmVnLCBpbnQgdmFsdWUpCit7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCByZWcsIHZhbHVlKTsKK30KKwogLyoqCiAgKiBneF9kZXRlY3RfY2hpcHNldDoKICAqCkBAIC0yMDAsNyArMjEwLDggQEAKIC8qKgogICogZ3hfZ2V0X2NwdXNwZWVkOgogICoKLSAqIEZpbmRzIG91dCBhdCB3aGljaCBlZmZpY2llbnQgZnJlcXVlbmN5IHRoZSBDeXJpeCBNZWRpYUdYL05hdFNlbWkgR2VvZGUgQ1BVIHJ1bnMuCisgKiBGaW5kcyBvdXQgYXQgd2hpY2ggZWZmaWNpZW50IGZyZXF1ZW5jeSB0aGUgQ3lyaXggTWVkaWFHWC9OYXRTZW1pCisgKiBHZW9kZSBDUFUgcnVucy4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBneF9nZXRfY3B1c3BlZWQodW5zaWduZWQgaW50IGNwdSkKIHsKQEAgLTIxNywxNyArMjI4LDE4IEBACiAgKgogICoqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGd4X3ZhbGlkYXRlX3NwZWVkKHVuc2lnbmVkIGludCBraHosIHU4ICpvbl9kdXJhdGlvbiwgdTggKm9mZl9kdXJhdGlvbikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3hfdmFsaWRhdGVfc3BlZWQodW5zaWduZWQgaW50IGtoeiwgdTggKm9uX2R1cmF0aW9uLAorCQl1OCAqb2ZmX2R1cmF0aW9uKQogewogCXVuc2lnbmVkIGludCBpOwogCXU4IHRtcF9vbiwgdG1wX29mZjsKIAlpbnQgb2xkX3RtcF9mcmVxID0gc3RvY2tfZnJlcTsKIAlpbnQgdG1wX2ZyZXE7CiAKLQkqb2ZmX2R1cmF0aW9uPTE7Ci0JKm9uX2R1cmF0aW9uPTA7CisJKm9mZl9kdXJhdGlvbiA9IDE7CisJKm9uX2R1cmF0aW9uID0gMDsKIAotCWZvciAoaT1tYXhfZHVyYXRpb247IGk+MDsgaS0tKSB7CisJZm9yIChpID0gbWF4X2R1cmF0aW9uOyBpID4gMDsgaS0tKSB7CiAJCXRtcF9vZmYgPSAoKGtoeiAqIGkpIC8gc3RvY2tfZnJlcSkgJiAweGZmOwogCQl0bXBfb24gPSBpIC0gdG1wX29mZjsKIAkJdG1wX2ZyZXEgPSAoc3RvY2tfZnJlcSAqIHRtcF9vZmYpIC8gaTsKQEAgLTI1OSwyNiArMjcxLDM0IEBACiAJZnJlcXMuY3B1ID0gMDsKIAlmcmVxcy5vbGQgPSBneF9nZXRfY3B1c3BlZWQoMCk7CiAKLQluZXdfa2h6ID0gZ3hfdmFsaWRhdGVfc3BlZWQoa2h6LCAmZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiwgJmd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKKwluZXdfa2h6ID0gZ3hfdmFsaWRhdGVfc3BlZWQoa2h6LCAmZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiwKKwkJCSZneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CiAKIAlmcmVxcy5uZXcgPSBuZXdfa2h6OwogCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlpZiAobmV3X2toeiAhPSBzdG9ja19mcmVxKSB7ICAvKiBpZiBuZXcga2h6ID09IDEwMCUgb2YgQ1BVIHNwZWVkLCBpdCBpcyBzcGVjaWFsIGNhc2UgKi8KKworCisJaWYgKG5ld19raHogIT0gc3RvY2tfZnJlcSkgeworCQkvKiBpZiBuZXcga2h6ID09IDEwMCUgb2YgQ1BVIHNwZWVkLCBpdCBpcyBzcGVjaWFsIGNhc2UgKi8KIAkJc3dpdGNoIChneF9wYXJhbXMtPmNzNTV4MC0+ZGV2aWNlKSB7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWToKIAkJCXBtZXIxID0gZ3hfcGFyYW1zLT5wY2lfcG1lcjEgfCBJUlFfU1BEVVAgfCBWSURfU1BEVVA7CiAJCQkvKiBGSVhNRTogbmVlZCB0byB0ZXN0IG90aGVyIHZhbHVlcyAtLSBad2FuZSxNaXVyYSAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfSVJRVEMsIDQpOyAvKiB0eXBpY2FsIDIgdG8gNG1zICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9WSURUQywgMTAwKTsvKiB0eXBpY2FsIDUwIHRvIDEwMG1zICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9QTUVSMSwgcG1lcjEpOworCQkJLyogdHlwaWNhbCAyIHRvIDRtcyAqLworCQkJZ3hfd3JpdGVfYnl0ZShQQ0lfSVJRVEMsIDQpOworCQkJLyogdHlwaWNhbCA1MCB0byAxMDBtcyAqLworCQkJZ3hfd3JpdGVfYnl0ZShQQ0lfVklEVEMsIDEwMCk7CisJCQlneF93cml0ZV9ieXRlKFBDSV9QTUVSMSwgcG1lcjEpOwogCi0JCQlpZiAoZ3hfcGFyYW1zLT5jczU1eDAtPnJldmlzaW9uIDwgMHgxMCkgeyAgIC8qIENTNTUzMChyZXYgMS4yLCAxLjMpICovCi0JCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnIHwgU1VTTU9EOwotCQkJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDUzU1MzBBLEIuLiAqLwotCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyB8IFNVU01PRCB8IFBXUlNWRTsKKwkJCWlmIChneF9wYXJhbXMtPmNzNTV4MC0+cmV2aXNpb24gPCAweDEwKSB7CisJCQkJLyogQ1M1NTMwKHJldiAxLjIsIDEuMykgKi8KKwkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmd8U1VTTU9EOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDUzU1MzBBLEIuLiAqLworCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZ3xTVVNNT0R8UFdSU1ZFOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwOgpAQCAtMjk0LDEzICszMTQsMTMgQEAKIAkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnICYgfihTVVNNT0QpOwogCQlneF9wYXJhbXMtPm9mZl9kdXJhdGlvbiA9IDA7CiAJCWd4X3BhcmFtcy0+b25fZHVyYXRpb24gPSAwOwotCQlkcHJpbnRrKCJzdXNwZW5kIG1vZHVsYXRpb24gZGlzYWJsZWQ6IGNwdSBydW5zIDEwMCBwZXJjZW50IHNwZWVkLlxuIik7CisJCWRwcmludGsoInN1c3BlbmQgbW9kdWxhdGlvbiBkaXNhYmxlZDogY3B1IHJ1bnMgMTAwJSUgc3BlZWQuXG4iKTsKIAl9CiAKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPRkYsIGd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPTiwgZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbik7CisJZ3hfd3JpdGVfYnl0ZShQQ0lfTU9ET0ZGLCBneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CisJZ3hfd3JpdGVfYnl0ZShQQ0lfTU9ET04sIGd4X3BhcmFtcy0+b25fZHVyYXRpb24pOwogCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfU1VTQ0ZHLCBzdXNjZmcpOworCWd4X3dyaXRlX2J5dGUoUENJX1NVU0NGRywgc3VzY2ZnKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1NVU0NGRywgJnN1c2NmZyk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0zMzQsNyArMzU0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwb2xpY3ktPmNwdSA9IDA7Ci0JY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwgc3RvY2tfZnJlcSk7CisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwKKwkJCXN0b2NrX2ZyZXEpOwogCiAJLyogaXQgbmVlZHMgdG8gYmUgYXNzdXJlZCB0aGF0IGF0IGxlYXN0IG9uZSBzdXBwb3J0ZWQgZnJlcXVlbmN5IGlzCiAJICogd2l0aGluIHBvbGljeS0+bWluIGFuZCBwb2xpY3ktPm1heC4gSWYgaXQgaXMgbm90LCBwb2xpY3ktPm1heApAQCAtMzU0LDcgKzM3NSw4IEBACiAJcG9saWN5LT5tYXggPSB0bXBfZnJlcTsKIAlpZiAocG9saWN5LT5tYXggPCBwb2xpY3ktPm1pbikKIAkJcG9saWN5LT5tYXggPSBwb2xpY3ktPm1pbjsKLQljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLCBzdG9ja19mcmVxKTsKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLAorCQkJc3RvY2tfZnJlcSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5OCwxOCArNDIwLDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogZGV0ZXJtaW5lIG1heGltdW0gZnJlcXVlbmN5ICovCi0JaWYgKHBjaV9idXNjbGspIHsKKwlpZiAocGNpX2J1c2NsaykKIAkJbWF4ZnJlcSA9IHBjaV9idXNjbGsgKiBneF9mcmVxX211bHRbZ2V0Q3g4NihDWDg2X0RJUjEpICYgMHgwZl07Ci0JfSBlbHNlIGlmIChjcHVfa2h6KSB7CisJZWxzZSBpZiAoY3B1X2toeikKIAkJbWF4ZnJlcSA9IGNwdV9raHo7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1heGZyZXEgPSAzMDAwMCAqIGd4X2ZyZXFfbXVsdFtnZXRDeDg2KENYODZfRElSMSkgJiAweDBmXTsKLQl9CisKIAlzdG9ja19mcmVxID0gbWF4ZnJlcTsKIAljdXJmcmVxID0gZ3hfZ2V0X2NwdXNwZWVkKDApOwogCiAJZHByaW50aygiY3B1IG1heCBmcmVxdWVuY3kgaXMgJWQuXG4iLCBtYXhmcmVxKTsKLQlkcHJpbnRrKCJjcHUgY3VycmVudCBmcmVxdWVuY3kgaXMgJWRrSHouXG4iLGN1cmZyZXEpOworCWRwcmludGsoImNwdSBjdXJyZW50IGZyZXF1ZW5jeSBpcyAlZGtIei5cbiIsIGN1cmZyZXEpOwogCiAJLyogc2V0dXAgYmFzaWMgc3RydWN0IGZvciBjcHVmcmVxIEFQSSAqLwogCXBvbGljeS0+Y3B1ID0gMDsKQEAgLTQ0Nyw3ICs0NjksOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpneF9wY2k7CiAKIAkvKiBUZXN0IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IGhhcmR3YXJlICovCi0JaWYgKChneF9wY2kgPSBneF9kZXRlY3RfY2hpcHNldCgpKSA9PSBOVUxMKQorCWd4X3BjaSA9IGd4X2RldGVjdF9jaGlwc2V0KCk7CisJaWYgKGd4X3BjaSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGNoZWNrIHdoZXRoZXIgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIHNhbmUgKi8KQEAgLTQ2OCw5ICs0OTEsMTEgQEAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX1BNRVIxLCAmKHBhcmFtcy0+cGNpX3BtZXIxKSk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9QTUVSMiwgJihwYXJhbXMtPnBjaV9wbWVyMikpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET04sICYocGFyYW1zLT5vbl9kdXJhdGlvbikpOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET0ZGLCAmKHBhcmFtcy0+b2ZmX2R1cmF0aW9uKSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPRkYsCisJCQkmKHBhcmFtcy0+b2ZmX2R1cmF0aW9uKSk7CiAKLQlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZneF9zdXNwbW9kX2RyaXZlcikpKSB7CisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmd4X3N1c3Btb2RfZHJpdmVyKTsKKwlpZiAocmV0KSB7CiAJCWtmcmVlKHBhcmFtcyk7CiAJCXJldHVybiByZXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIGVycm9yISAqLwogCX0KQEAgLTQ4NSw5ICs1MTAsOSBAQAogCWtmcmVlKGd4X3BhcmFtcyk7CiB9CiAKLU1PRFVMRV9BVVRIT1IgKCJIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQ3B1ZnJlcSBkcml2ZXIgZm9yIEN5cml4IE1lZGlhR1ggYW5kIE5hdFNlbWkgR2VvZGUiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDcHVmcmVxIGRyaXZlciBmb3IgQ3lyaXggTWVkaWFHWCBhbmQgTmF0U2VtaSBHZW9kZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChjcHVmcmVxX2d4X2luaXQpOwogbW9kdWxlX2V4aXQoY3B1ZnJlcV9neF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggYTRjZmY1ZC4uZjFjNTFhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTMwLDEyICszMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgImxvbmdoYXVsLmgiCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIFVTRV9OT1JUSEJSSURHRQkJKDEgPDwgMikKIAogc3RhdGljIGludCBjcHVfbW9kZWw7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG51bXNjYWxlcz0xNjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtc2NhbGVzID0gMTY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZzYjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtVl9wb3MgKnZybV9tVl90YWJsZTsKQEAgLTY3LDggKzY3LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGlnaGVzdF9zcGVlZCwgbG93ZXN0X3NwZWVkOyAvKiBrSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWlubXVsdCwgbWF4bXVsdDsKIHN0YXRpYyBpbnQgY2FuX3NjYWxlX3ZvbHRhZ2U7Ci1zdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4Owogc3RhdGljIHUzMiBhY3BpX3JlZ3NfYWRkcjsKIHN0YXRpYyB1OCBsb25naGF1bF9mbGFnczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG9uZ2hhdWxfaW5kZXg7CkBAIC03OCwxMiArNzgsMTMgQEAKIHN0YXRpYyBpbnQgZGlzYWJsZV9hY3BpX2MzOwogc3RhdGljIGludCByZXZpZF9lcnJhdGE7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAibG9uZ2hhdWwiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkibG9uZ2hhdWwiLCBtc2cpCiAKIAogLyogQ2xvY2sgcmF0aW9zIG11bHRpcGxpZWQgYnkgMTAgKi8KLXN0YXRpYyBpbnQgY2xvY2tfcmF0aW9bMzJdOwotc3RhdGljIGludCBlYmxjcl90YWJsZVszMl07CitzdGF0aWMgaW50IG11bHRzWzMyXTsKK3N0YXRpYyBpbnQgZWJsY3JbMzJdOwogc3RhdGljIGludCBsb25naGF1bF92ZXJzaW9uOwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqbG9uZ2hhdWxfdGFibGU7CiAKQEAgLTkzLDcgKzk0LDcgQEAKIHN0YXRpYyBjaGFyICpwcmludF9zcGVlZChpbnQgc3BlZWQpCiB7CiAJaWYgKHNwZWVkIDwgMTAwMCkgewotCQlzbnByaW50ZihzcGVlZGJ1ZmZlciwgc2l6ZW9mKHNwZWVkYnVmZmVyKSwiJWRNSHoiLCBzcGVlZCk7CisJCXNucHJpbnRmKHNwZWVkYnVmZmVyLCBzaXplb2Yoc3BlZWRidWZmZXIpLCAiJWRNSHoiLCBzcGVlZCk7CiAJCXJldHVybiBzcGVlZGJ1ZmZlcjsKIAl9CiAKQEAgLTEyMiwyNyArMTIzLDI4IEBACiAKIHN0YXRpYyBpbnQgbG9uZ2hhdWxfZ2V0X2NwdV9tdWx0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBpbnZhbHVlPTAsbG8sIGhpOworCXVuc2lnbmVkIGxvbmcgaW52YWx1ZSA9IDAsIGxvLCBoaTsKIAotCXJkbXNyIChNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbG8sIGhpKTsKLQlpbnZhbHVlID0gKGxvICYgKDE8PDIyfDE8PDIzfDE8PDI0fDE8PDI1KSkgPj4yMjsKLQlpZiAobG9uZ2hhdWxfdmVyc2lvbj09VFlQRV9MT05HSEFVTF9WMiB8fCBsb25naGF1bF92ZXJzaW9uPT1UWVBFX1BPV0VSU0FWRVIpIHsKKwlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbG8sIGhpKTsKKwlpbnZhbHVlID0gKGxvICYgKDE8PDIyfDE8PDIzfDE8PDI0fDE8PDI1KSk+PjIyOworCWlmIChsb25naGF1bF92ZXJzaW9uID09IFRZUEVfTE9OR0hBVUxfVjIgfHwKKwkgICAgbG9uZ2hhdWxfdmVyc2lvbiA9PSBUWVBFX1BPV0VSU0FWRVIpIHsKIAkJaWYgKGxvICYgKDE8PDI3KSkKLQkJCWludmFsdWUrPTE2OworCQkJaW52YWx1ZSArPSAxNjsKIAl9Ci0JcmV0dXJuIGVibGNyX3RhYmxlW2ludmFsdWVdOworCXJldHVybiBlYmxjcltpbnZhbHVlXTsKIH0KIAogLyogRm9yIHByb2Nlc3NvciB3aXRoIEJDUjIgTVNSICovCiAKLXN0YXRpYyB2b2lkIGRvX2xvbmdoYXVsMSh1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXgpCitzdGF0aWMgdm9pZCBkb19sb25naGF1bDEodW5zaWduZWQgaW50IG11bHRzX2luZGV4KQogewogCXVuaW9uIG1zcl9iY3IyIGJjcjI7CiAKIAlyZG1zcmwoTVNSX1ZJQV9CQ1IyLCBiY3IyLnZhbCk7CiAJLyogRW5hYmxlIHNvZnR3YXJlIGNsb2NrIG11bHRpcGxpZXIgKi8KIAliY3IyLmJpdHMuRVNPRlRCRiA9IDE7Ci0JYmNyMi5iaXRzLkNMT0NLTVVMID0gY2xvY2tfcmF0aW9faW5kZXggJiAweGZmOworCWJjcjIuYml0cy5DTE9DS01VTCA9IG11bHRzX2luZGV4ICYgMHhmZjsKIAogCS8qIFN5bmMgdG8gdGltZXIgdGljayAqLwogCXNhZmVfaGFsdCgpOwpAQCAtMTYxLDcgKzE2Myw3IEBACiAKIC8qIEZvciBwcm9jZXNzb3Igd2l0aCBMb25naGF1bCBNU1IgKi8KIAotc3RhdGljIHZvaWQgZG9fcG93ZXJzYXZlcihpbnQgY3hfYWRkcmVzcywgdW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4LAorc3RhdGljIHZvaWQgZG9fcG93ZXJzYXZlcihpbnQgY3hfYWRkcmVzcywgdW5zaWduZWQgaW50IG11bHRzX2luZGV4LAogCQkJICB1bnNpZ25lZCBpbnQgZGlyKQogewogCXVuaW9uIG1zcl9sb25naGF1bCBsb25naGF1bDsKQEAgLTE3MywxMSArMTc1LDExIEBACiAJCWxvbmdoYXVsLmJpdHMuUmV2aXNpb25LZXkgPSBsb25naGF1bC5iaXRzLlJldmlzaW9uSUQ7CiAJZWxzZQogCQlsb25naGF1bC5iaXRzLlJldmlzaW9uS2V5ID0gMDsKLQlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbyA9IGNsb2NrX3JhdGlvX2luZGV4ICYgMHhmOwotCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvNCA9IChjbG9ja19yYXRpb19pbmRleCAmIDB4MTApID4+IDQ7CisJbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW8gPSBtdWx0c19pbmRleCAmIDB4ZjsKKwlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbzQgPSAobXVsdHNfaW5kZXggJiAweDEwKSA+PiA0OwogCS8qIFNldHVwIG5ldyB2b2x0YWdlICovCiAJaWYgKGNhbl9zY2FsZV92b2x0YWdlKQotCQlsb25naGF1bC5iaXRzLlNvZnRWSUQgPSAoY2xvY2tfcmF0aW9faW5kZXggPj4gOCkgJiAweDFmOworCQlsb25naGF1bC5iaXRzLlNvZnRWSUQgPSAobXVsdHNfaW5kZXggPj4gOCkgJiAweDFmOwogCS8qIFN5bmMgdG8gdGltZXIgdGljayAqLwogCXNhZmVfaGFsdCgpOwogCS8qIFJhaXNlIHZvbHRhZ2UgaWYgbmVjZXNzYXJ5ICovCkBAIC0yNDAsMTQgKzI0MiwxNCBAQAogCiAvKioKICAqIGxvbmdoYXVsX3NldF9jcHVfZnJlcXVlbmN5KCkKLSAqIEBjbG9ja19yYXRpb19pbmRleCA6IGJpdHBhdHRlcm4gb2YgdGhlIG5ldyBtdWx0aXBsaWVyLgorICogQG11bHRzX2luZGV4IDogYml0cGF0dGVybiBvZiB0aGUgbmV3IG11bHRpcGxpZXIuCiAgKgogICogU2V0cyBhIG5ldyBjbG9jayByYXRpby4KICAqLwogCiBzdGF0aWMgdm9pZCBsb25naGF1bF9zZXRzdGF0ZSh1bnNpZ25lZCBpbnQgdGFibGVfaW5kZXgpCiB7Ci0JdW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4OworCXVuc2lnbmVkIGludCBtdWx0c19pbmRleDsKIAlpbnQgc3BlZWQsIG11bHQ7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1Niw5ICsyNTgsOSBAQAogCXUzMiBibV90aW1lb3V0ID0gMTAwMDsKIAl1bnNpZ25lZCBpbnQgZGlyID0gMDsKIAotCWNsb2NrX3JhdGlvX2luZGV4ID0gbG9uZ2hhdWxfdGFibGVbdGFibGVfaW5kZXhdLmluZGV4OworCW11bHRzX2luZGV4ID0gbG9uZ2hhdWxfdGFibGVbdGFibGVfaW5kZXhdLmluZGV4OwogCS8qIFNhZmV0eSBwcmVjYXV0aW9ucyAqLwotCW11bHQgPSBjbG9ja19yYXRpb1tjbG9ja19yYXRpb19pbmRleCAmIDB4MWZdOworCW11bHQgPSBtdWx0c1ttdWx0c19pbmRleCAmIDB4MWZdOwogCWlmIChtdWx0ID09IC0xKQogCQlyZXR1cm47CiAJc3BlZWQgPSBjYWxjX3NwZWVkKG11bHQpOwpAQCAtMjc0LDcgKzI3Niw3IEBACiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCi0JZHByaW50ayAoIlNldHRpbmcgdG8gRlNCOiVkTUh6IE11bHQ6JWQuJWR4ICglcylcbiIsCisJZHByaW50aygiU2V0dGluZyB0byBGU0I6JWRNSHogTXVsdDolZC4lZHggKCVzKVxuIiwKIAkJCWZzYiwgbXVsdC8xMCwgbXVsdCUxMCwgcHJpbnRfc3BlZWQoc3BlZWQvMTAwMCkpOwogcmV0cnlfbG9vcDoKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTI4Miw4ICsyODQsOCBAQAogCiAJcGljMl9tYXNrID0gaW5iKDB4QTEpOwogCXBpYzFfbWFzayA9IGluYigweDIxKTsJLyogd29ya3Mgb24gQzMuIHNhdmUgbWFzay4gKi8KLQlvdXRiKDB4RkYsMHhBMSk7CS8qIE92ZXJraWxsICovCi0Jb3V0YigweEZFLDB4MjEpOwkvKiBUTVIwIG9ubHkgKi8KKwlvdXRiKDB4RkYsIDB4QTEpOwkvKiBPdmVya2lsbCAqLworCW91dGIoMHhGRSwgMHgyMSk7CS8qIFRNUjAgb25seSAqLwogCiAJLyogV2FpdCB3aGlsZSBQQ0kgYnVzIGlzIGJ1c3kuICovCiAJaWYgKGFjcGlfcmVnc19hZGRyICYmIChsb25naGF1bF9mbGFncyAmIFVTRV9OT1JUSEJSSURHRQpAQCAtMzEyLDcgKzMxNCw3IEBACiAJICogU29mdHdhcmUgY29udHJvbGxlZCBtdWx0aXBsaWVycyBvbmx5LgogCSAqLwogCWNhc2UgVFlQRV9MT05HSEFVTF9WMToKLQkJZG9fbG9uZ2hhdWwxKGNsb2NrX3JhdGlvX2luZGV4KTsKKwkJZG9fbG9uZ2hhdWwxKG11bHRzX2luZGV4KTsKIAkJYnJlYWs7CiAKIAkvKgpAQCAtMzI3LDkgKzMyOSw5IEBACiAJCWlmIChsb25naGF1bF9mbGFncyAmIFVTRV9BQ1BJX0MzKSB7CiAJCQkvKiBEb24ndCBhbGxvdyB3YWtldXAgKi8KIAkJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfUkxELCAwKTsKLQkJCWRvX3Bvd2Vyc2F2ZXIoY3gtPmFkZHJlc3MsIGNsb2NrX3JhdGlvX2luZGV4LCBkaXIpOworCQkJZG9fcG93ZXJzYXZlcihjeC0+YWRkcmVzcywgbXVsdHNfaW5kZXgsIGRpcik7CiAJCX0gZWxzZSB7Ci0JCQlkb19wb3dlcnNhdmVyKDAsIGNsb2NrX3JhdGlvX2luZGV4LCBkaXIpOworCQkJZG9fcG93ZXJzYXZlcigwLCBtdWx0c19pbmRleCwgZGlyKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0zNDEsOCArMzQzLDggQEAKIAkJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KIAkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDApOwogCX0KLQlvdXRiKHBpYzJfbWFzaywweEExKTsJLyogcmVzdG9yZSBtYXNrICovCi0Jb3V0YihwaWMxX21hc2ssMHgyMSk7CisJb3V0YihwaWMyX21hc2ssIDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KKwlvdXRiKHBpYzFfbWFzaywgMHgyMSk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTM5Miw3ICszOTQsOCBAQAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCiAJaWYgKCFibV90aW1lb3V0KQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2FybmluZzogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBpZGxlIFBDSSBidXMuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhcm5pbmc6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgIgorCQkJCSJpZGxlIFBDSSBidXMuXG4iKTsKIH0KIAogLyoKQEAgLTQ1OCwzMSArNDYxLDMyIEBACiAJCWJyZWFrOwogCX0KIAotCWRwcmludGsgKCJNaW5NdWx0OiVkLiVkeCBNYXhNdWx0OiVkLiVkeFxuIiwKKwlkcHJpbnRrKCJNaW5NdWx0OiVkLiVkeCBNYXhNdWx0OiVkLiVkeFxuIiwKIAkJIG1pbm11bHQvMTAsIG1pbm11bHQlMTAsIG1heG11bHQvMTAsIG1heG11bHQlMTApOwogCiAJaGlnaGVzdF9zcGVlZCA9IGNhbGNfc3BlZWQobWF4bXVsdCk7CiAJbG93ZXN0X3NwZWVkID0gY2FsY19zcGVlZChtaW5tdWx0KTsKLQlkcHJpbnRrICgiRlNCOiVkTUh6ICBMb3dlc3Qgc3BlZWQ6ICVzICAgSGlnaGVzdCBzcGVlZDolc1xuIiwgZnNiLAorCWRwcmludGsoIkZTQjolZE1IeiAgTG93ZXN0IHNwZWVkOiAlcyAgIEhpZ2hlc3Qgc3BlZWQ6JXNcbiIsIGZzYiwKIAkJIHByaW50X3NwZWVkKGxvd2VzdF9zcGVlZC8xMDAwKSwKIAkJIHByaW50X3NwZWVkKGhpZ2hlc3Rfc3BlZWQvMTAwMCkpOwogCiAJaWYgKGxvd2VzdF9zcGVlZCA9PSBoaWdoZXN0X3NwZWVkKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiaGlnaGVzdHNwZWVkID09IGxvd2VzdCwgYWJvcnRpbmcuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhpZ2hlc3RzcGVlZCA9PSBsb3dlc3QsIGFib3J0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobG93ZXN0X3NwZWVkID4gaGlnaGVzdF9zcGVlZCkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIm5vbnNlbnNlISBsb3dlc3QgKCVkID4gJWQpICFcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJub25zZW5zZSEgbG93ZXN0ICglZCA+ICVkKSAhXG4iLAogCQkJbG93ZXN0X3NwZWVkLCBoaWdoZXN0X3NwZWVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbG9uZ2hhdWxfdGFibGUgPSBrbWFsbG9jKChudW1zY2FsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpLCBHRlBfS0VSTkVMKTsKLQlpZighbG9uZ2hhdWxfdGFibGUpCisJbG9uZ2hhdWxfdGFibGUgPSBrbWFsbG9jKChudW1zY2FsZXMgKyAxKSAqIHNpemVvZigqbG9uZ2hhdWxfdGFibGUpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFsb25naGF1bF90YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGogPSAwOyBqIDwgbnVtc2NhbGVzOyBqKyspIHsKLQkJcmF0aW8gPSBjbG9ja19yYXRpb1tqXTsKKwkJcmF0aW8gPSBtdWx0c1tqXTsKIAkJaWYgKHJhdGlvID09IC0xKQogCQkJY29udGludWU7CiAJCWlmIChyYXRpbyA+IG1heG11bHQgfHwgcmF0aW8gPCBtaW5tdWx0KQpAQCAtNTA3LDEzICs1MTEsMTAgQEAKIAkJCX0KIAkJfQogCQlpZiAobWluX2kgIT0gaikgewotCQkJdW5zaWduZWQgaW50IHRlbXA7Ci0JCQl0ZW1wID0gbG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5OwotCQkJbG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5ID0gbG9uZ2hhdWxfdGFibGVbbWluX2ldLmZyZXF1ZW5jeTsKLQkJCWxvbmdoYXVsX3RhYmxlW21pbl9pXS5mcmVxdWVuY3kgPSB0ZW1wOwotCQkJdGVtcCA9IGxvbmdoYXVsX3RhYmxlW2pdLmluZGV4OwotCQkJbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggPSBsb25naGF1bF90YWJsZVttaW5faV0uaW5kZXg7Ci0JCQlsb25naGF1bF90YWJsZVttaW5faV0uaW5kZXggPSB0ZW1wOworCQkJc3dhcChsb25naGF1bF90YWJsZVtqXS5mcmVxdWVuY3ksCisJCQkgICAgIGxvbmdoYXVsX3RhYmxlW21pbl9pXS5mcmVxdWVuY3kpOworCQkJc3dhcChsb25naGF1bF90YWJsZVtqXS5pbmRleCwKKwkJCSAgICAgbG9uZ2hhdWxfdGFibGVbbWluX2ldLmluZGV4KTsKIAkJfQogCX0KIApAQCAtNTIxLDcgKzUyMiw3IEBACiAKIAkvKiBGaW5kIGluZGV4IHdlIGFyZSBydW5uaW5nIG9uICovCiAJZm9yIChqID0gMDsgaiA8IGs7IGorKykgewotCQlpZiAoY2xvY2tfcmF0aW9bbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggJiAweDFmXSA9PSBtdWx0KSB7CisJCWlmIChtdWx0c1tsb25naGF1bF90YWJsZVtqXS5pbmRleCAmIDB4MWZdID09IG11bHQpIHsKIAkJCWxvbmdoYXVsX2luZGV4ID0gajsKIAkJCWJyZWFrOwogCQl9CkBAIC01NTksMjAgKzU2MCwyMiBAQAogCW1heHZpZCA9IHZybV9tVl90YWJsZVtsb25naGF1bC5iaXRzLk1heGltdW1WSURdOwogCiAJaWYgKG1pbnZpZC5tViA9PSAwIHx8IG1heHZpZC5tViA9PSAwIHx8IG1pbnZpZC5tViA+IG1heHZpZC5tVikgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkJvZ3VzIHZhbHVlcyBNaW46JWQuJTAzZCBNYXg6JWQuJTAzZC4gIgorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQm9ndXMgdmFsdWVzIE1pbjolZC4lMDNkIE1heDolZC4lMDNkLiAiCiAJCQkJCSJWb2x0YWdlIHNjYWxpbmcgZGlzYWJsZWQuXG4iLAotCQkJCQltaW52aWQubVYvMTAwMCwgbWludmlkLm1WJTEwMDAsIG1heHZpZC5tVi8xMDAwLCBtYXh2aWQubVYlMTAwMCk7CisJCQkJCW1pbnZpZC5tVi8xMDAwLCBtaW52aWQubVYlMTAwMCwKKwkJCQkJbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChtaW52aWQubVYgPT0gbWF4dmlkLm1WKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiQ2xhaW1zIHRvIHN1cHBvcnQgdm9sdGFnZSBzY2FsaW5nIGJ1dCBtaW4gJiBtYXggYXJlICIKLQkJCQkiYm90aCAlZC4lMDNkLiBWb2x0YWdlIHNjYWxpbmcgZGlzYWJsZWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJDbGFpbXMgdG8gc3VwcG9ydCB2b2x0YWdlIHNjYWxpbmcgYnV0ICIKKwkJCQkibWluICYgbWF4IGFyZSBib3RoICVkLiUwM2QuICIKKwkJCQkiVm9sdGFnZSBzY2FsaW5nIGRpc2FibGVkXG4iLAogCQkJCW1heHZpZC5tVi8xMDAwLCBtYXh2aWQubVYlMTAwMCk7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBIb3cgbWFueSB2b2x0YWdlIHN0ZXBzICovCisJLyogSG93IG1hbnkgdm9sdGFnZSBzdGVwcyovCiAJbnVtdnNjYWxlcyA9IG1heHZpZC5wb3MgLSBtaW52aWQucG9zICsgMTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWAogCQkiTWF4IFZJRD0lZC4lMDNkICAiCkBAIC01ODYsNyArNTg5LDcgQEAKIAlqID0gbG9uZ2hhdWwuYml0cy5NaW5NSHpCUjsKIAlpZiAobG9uZ2hhdWwuYml0cy5NaW5NSHpCUjQpCiAJCWogKz0gMTY7Ci0JbWluX3ZpZF9zcGVlZCA9IGVibGNyX3RhYmxlW2pdOworCW1pbl92aWRfc3BlZWQgPSBlYmxjcltqXTsKIAlpZiAobWluX3ZpZF9zcGVlZCA9PSAtMSkKIAkJcmV0dXJuOwogCXN3aXRjaCAobG9uZ2hhdWwuYml0cy5NaW5NSHpGU0IpIHsKQEAgLTYxNyw3ICs2MjAsOCBAQAogCQkJcG9zID0gbWludmlkLnBvczsKIAkJbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggfD0gbVZfdnJtX3RhYmxlW3Bvc10gPDwgODsKIAkJdmlkID0gdnJtX21WX3RhYmxlW21WX3ZybV90YWJsZVtwb3NdXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImY6ICVkIGtIeiwgaW5kZXg6ICVkLCB2aWQ6ICVkIG1WXG4iLCBzcGVlZCwgaiwgdmlkLm1WKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImY6ICVkIGtIeiwgaW5kZXg6ICVkLCB2aWQ6ICVkIG1WXG4iLAorCQkJCXNwZWVkLCBqLCB2aWQubVYpOwogCQlqKys7CiAJfQogCkBAIC02NDAsNyArNjQ0LDggQEAKIAl1bnNpZ25lZCBpbnQgZGlyID0gMDsKIAl1OCB2aWQsIGN1cnJlbnRfdmlkOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGxvbmdoYXVsX3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZ0YWJsZV9pbmRleCkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGxvbmdoYXVsX3RhYmxlLCB0YXJnZXRfZnJlcSwKKwkJCQlyZWxhdGlvbiwgJnRhYmxlX2luZGV4KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEb24ndCBzZXQgc2FtZSBmcmVxdWVuY3kgYWdhaW4gKi8KQEAgLTY1Niw3ICs2NjEsOCBAQAogCQkgKiB0aGlzIGluIGhhcmR3YXJlLCBDMyBpcyBvbGQgYW5kIHdlIG5lZWQgdG8gZG8gdGhpcwogCQkgKiBpbiBzb2Z0d2FyZS4gKi8KIAkJaSA9IGxvbmdoYXVsX2luZGV4OwotCQljdXJyZW50X3ZpZCA9IChsb25naGF1bF90YWJsZVtsb25naGF1bF9pbmRleF0uaW5kZXggPj4gOCkgJiAweDFmOworCQljdXJyZW50X3ZpZCA9IChsb25naGF1bF90YWJsZVtsb25naGF1bF9pbmRleF0uaW5kZXggPj4gOCk7CisJCWN1cnJlbnRfdmlkICY9IDB4MWY7CiAJCWlmICh0YWJsZV9pbmRleCA+IGxvbmdoYXVsX2luZGV4KQogCQkJZGlyID0gMTsKIAkJd2hpbGUgKGkgIT0gdGFibGVfaW5kZXgpIHsKQEAgLTY5MSw5ICs2OTcsOSBAQAogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZDsKIAotCWlmICggYWNwaV9idXNfZ2V0X2RldmljZShvYmpfaGFuZGxlLCAmZCkgKSB7CisJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2Uob2JqX2hhbmRsZSwgJmQpKQogCQlyZXR1cm4gMDsKLQl9CisKIAkqcmV0dXJuX3ZhbHVlID0gYWNwaV9kcml2ZXJfZGF0YShkKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTc1MCw3ICs3NTYsNyBAQAogCS8qIEZpbmQgVlQ4MjM1IHNvdXRoYnJpZGdlICovCiAJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyMzUsIE5VTEwpOwogCWlmIChkZXYgPT0gTlVMTCkKLQkvKiBGaW5kIFZUODIzNyBzb3V0aGJyaWRnZSAqLworCQkvKiBGaW5kIFZUODIzNyBzb3V0aGJyaWRnZSAqLwogCQlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwKIAkJCQkgICAgIFBDSV9ERVZJQ0VfSURfVklBXzgyMzcsIE5VTEwpOwogCWlmIChkZXYgIT0gTlVMTCkgewpAQCAtNzY5LDcgKzc3NSw4IEBACiAJCWlmIChwY2lfY21kICYgMSA8PCA3KSB7CiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDg4LCAmYWNwaV9yZWdzX2FkZHIpOwogCQkJYWNwaV9yZWdzX2FkZHIgJj0gMHhmZjAwOwotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFDUEkgSS9PIGF0IDB4JXhcbiIsIGFjcGlfcmVnc19hZGRyKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJBQ1BJIEkvTyBhdCAweCV4XG4iLAorCQkJCQlhY3BpX3JlZ3NfYWRkcik7CiAJCX0KIAogCQlwY2lfZGV2X3B1dChkZXYpOwpAQCAtNzgxLDcgKzc4OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBsb25naGF1bF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7Ci0JY2hhciAqY3B1bmFtZT1OVUxMOworCWNoYXIgKmNwdW5hbWUgPSBOVUxMOwogCWludCByZXQ7CiAJdTMyIGxvLCBoaTsKIApAQCAtNzkxLDggKzc5OCw4IEBACiAJCWNwdV9tb2RlbCA9IENQVV9TQU1VRUw7CiAJCWNwdW5hbWUgPSAiQzMgJ1NhbXVlbCcgW0M1QV0iOwogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKLQkJbWVtY3B5IChjbG9ja19yYXRpbywgc2FtdWVsMV9jbG9ja19yYXRpbywgc2l6ZW9mKHNhbXVlbDFfY2xvY2tfcmF0aW8pKTsKLQkJbWVtY3B5IChlYmxjcl90YWJsZSwgc2FtdWVsMV9lYmxjciwgc2l6ZW9mKHNhbXVlbDFfZWJsY3IpKTsKKwkJbWVtY3B5KG11bHRzLCBzYW11ZWwxX211bHRzLCBzaXplb2Yoc2FtdWVsMV9tdWx0cykpOworCQltZW1jcHkoZWJsY3IsIHNhbXVlbDFfZWJsY3IsIHNpemVvZihzYW11ZWwxX2VibGNyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSA3OgpAQCAtODAzLDEwICs4MTAsOCBAQAogCQkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsIDInIFtDNUJdIjsKIAkJCS8qIE5vdGUsIHRoaXMgaXMgbm90IGEgdHlwbywgZWFybHkgU2FtdWVsMidzIGhhZAogCQkJICogU2FtdWVsMSByYXRpb3MuICovCi0JCQltZW1jcHkoY2xvY2tfcmF0aW8sIHNhbXVlbDFfY2xvY2tfcmF0aW8sCi0JCQkJc2l6ZW9mKHNhbXVlbDFfY2xvY2tfcmF0aW8pKTsKLQkJCW1lbWNweShlYmxjcl90YWJsZSwgc2FtdWVsMl9lYmxjciwKLQkJCQlzaXplb2Yoc2FtdWVsMl9lYmxjcikpOworCQkJbWVtY3B5KG11bHRzLCBzYW11ZWwxX211bHRzLCBzaXplb2Yoc2FtdWVsMV9tdWx0cykpOworCQkJbWVtY3B5KGVibGNyLCBzYW11ZWwyX2VibGNyLCBzaXplb2Yoc2FtdWVsMl9lYmxjcikpOwogCQkJYnJlYWs7CiAJCWNhc2UgMSAuLi4gMTU6CiAJCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKQEAgLTgxNywxMCArODIyLDggQEAKIAkJCQljcHVfbW9kZWwgPSBDUFVfRVpSQTsKIAkJCQljcHVuYW1lID0gIkMzICdFenJhJyBbQzVDXSI7CiAJCQl9Ci0JCQltZW1jcHkoY2xvY2tfcmF0aW8sIGV6cmFfY2xvY2tfcmF0aW8sCi0JCQkJc2l6ZW9mKGV6cmFfY2xvY2tfcmF0aW8pKTsKLQkJCW1lbWNweShlYmxjcl90YWJsZSwgZXpyYV9lYmxjciwKLQkJCQlzaXplb2YoZXpyYV9lYmxjcikpOworCQkJbWVtY3B5KG11bHRzLCBlenJhX211bHRzLCBzaXplb2YoZXpyYV9tdWx0cykpOworCQkJbWVtY3B5KGVibGNyLCBlenJhX2VibGNyLCBzaXplb2YoZXpyYV9lYmxjcikpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC04MjksMTggKzgzMiwxNiBAQAogCQljcHVfbW9kZWwgPSBDUFVfRVpSQV9UOwogCQljcHVuYW1lID0gIkMzICdFenJhLVQnIFtDNU1dIjsKIAkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfUE9XRVJTQVZFUjsKLQkJbnVtc2NhbGVzPTMyOwotCQltZW1jcHkgKGNsb2NrX3JhdGlvLCBlenJhdF9jbG9ja19yYXRpbywgc2l6ZW9mKGV6cmF0X2Nsb2NrX3JhdGlvKSk7Ci0JCW1lbWNweSAoZWJsY3JfdGFibGUsIGV6cmF0X2VibGNyLCBzaXplb2YoZXpyYXRfZWJsY3IpKTsKKwkJbnVtc2NhbGVzID0gMzI7CisJCW1lbWNweShtdWx0cywgZXpyYXRfbXVsdHMsIHNpemVvZihlenJhdF9tdWx0cykpOworCQltZW1jcHkoZWJsY3IsIGV6cmF0X2VibGNyLCBzaXplb2YoZXpyYXRfZWJsY3IpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDk6CiAJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX1BPV0VSU0FWRVI7CiAJCW51bXNjYWxlcyA9IDMyOwotCQltZW1jcHkoY2xvY2tfcmF0aW8sCi0JCSAgICAgICBuZWhlbWlhaF9jbG9ja19yYXRpbywKLQkJICAgICAgIHNpemVvZihuZWhlbWlhaF9jbG9ja19yYXRpbykpOwotCQltZW1jcHkoZWJsY3JfdGFibGUsIG5laGVtaWFoX2VibGNyLCBzaXplb2YobmVoZW1pYWhfZWJsY3IpKTsKKwkJbWVtY3B5KG11bHRzLCBuZWhlbWlhaF9tdWx0cywgc2l6ZW9mKG5laGVtaWFoX211bHRzKSk7CisJCW1lbWNweShlYmxjciwgbmVoZW1pYWhfZWJsY3IsIHNpemVvZihuZWhlbWlhaF9lYmxjcikpOwogCQlzd2l0Y2ggKGMtPng4Nl9tYXNrKSB7CiAJCWNhc2UgMCAuLi4gMToKIAkJCWNwdV9tb2RlbCA9IENQVV9ORUhFTUlBSDsKQEAgLTg2OSwxNCArODcwLDE0IEBACiAJCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKIAl9CiAKLQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlZJQSAlcyBDUFUgZGV0ZWN0ZWQuICAiLCBjcHVuYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiVklBICVzIENQVSBkZXRlY3RlZC4gICIsIGNwdW5hbWUpOwogCXN3aXRjaCAobG9uZ2hhdWxfdmVyc2lvbikgewogCWNhc2UgVFlQRV9MT05HSEFVTF9WMToKIAljYXNlIFRZUEVfTE9OR0hBVUxfVjI6Ci0JCXByaW50ayAoIkxvbmdoYXVsIHYlZCBzdXBwb3J0ZWQuXG4iLCBsb25naGF1bF92ZXJzaW9uKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiTG9uZ2hhdWwgdiVkIHN1cHBvcnRlZC5cbiIsIGxvbmdoYXVsX3ZlcnNpb24pOwogCQlicmVhazsKIAljYXNlIFRZUEVfUE9XRVJTQVZFUjoKLQkJcHJpbnRrICgiUG93ZXJzYXZlciBzdXBwb3J0ZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiUG93ZXJzYXZlciBzdXBwb3J0ZWQuXG4iKTsKIAkJYnJlYWs7CiAJfTsKIApAQCAtOTQwLDcgKzk0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBsb25naGF1bF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqbG9uZ2hhdWxfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTk2NiwxMyArOTY3LDE1IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNb3JlIHRoYW4gMSBDUFUgZGV0ZWN0ZWQsIGxvbmdoYXVsIGRpc2FibGVkLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIk1vcmUgdGhhbiAxIENQVSBkZXRlY3RlZCwgIgorCQkJCSJsb25naGF1bCBkaXNhYmxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAoY3B1X2hhc19hcGljKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkFQSUMgZGV0ZWN0ZWQuIExvbmdoYXVsIGlzIGN1cnJlbnRseSBicm9rZW4gaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkFQSUMgZGV0ZWN0ZWQuIExvbmdoYXVsIGlzIGN1cnJlbnRseSAiCisJCQkJImJyb2tlbiBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2VuZGlmCkBAIC05OTMsOCArOTk2LDggQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgbnVtc2NhbGVzOyBpKyspIHsKLQkJaWYgKGNsb2NrX3JhdGlvW2ldID09IG1heG11bHQpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtc2NhbGVzOyBpKyspIHsKKwkJaWYgKG11bHRzW2ldID09IG1heG11bHQpIHsKIAkJCWxvbmdoYXVsX3NldHN0YXRlKGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEwMDcsMTEgKzEwMTAsMTEgQEAKIC8qIEV2ZW4gaWYgQklPUyBpcyBleHBvcnRpbmcgQUNQSSBDMyBzdGF0ZSwgYW5kIGl0IGlzIHVzZWQKICAqIHdpdGggc3VjY2VzcyB3aGVuIENQVSBpcyBpZGxlLCB0aGlzIHN0YXRlIGRvZXNuJ3QKICAqIHRyaWdnZXIgZnJlcXVlbmN5IHRyYW5zaXRpb24gaW4gc29tZSBjYXNlcy4gKi8KLW1vZHVsZV9wYXJhbSAoZGlzYWJsZV9hY3BpX2MzLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGRpc2FibGVfYWNwaV9jMywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9hY3BpX2MzLCAiRG9uJ3QgdXNlIEFDUEkgQzMgc3VwcG9ydCIpOwogLyogQ2hhbmdlIENQVSB2b2x0YWdlIHdpdGggZnJlcXVlbmN5LiBWZXJ5IHVzZWZ1bGwgdG8gc2F2ZQogICogcG93ZXIsIGJ1dCBtb3N0IFZJQSBDMyBwcm9jZXNzb3JzIGFyZW4ndCBzdXBwb3J0aW5nIGl0LiAqLwotbW9kdWxlX3BhcmFtIChzY2FsZV92b2x0YWdlLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHNjYWxlX3ZvbHRhZ2UsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNjYWxlX3ZvbHRhZ2UsICJTY2FsZSB2b2x0YWdlIG9mIHByb2Nlc3NvciIpOwogLyogRm9yY2UgcmV2aXNpb24ga2V5IHRvIDAgZm9yIHByb2Nlc3NvcnMgd2hpY2ggZG9lc24ndAogICogc3VwcG9ydCB2b2x0YWdlIHNjYWxpbmcsIGJ1dCBhcmUgaW50cm9kdWNpbmcgaXRzZWxmIGFzCkBAIC0xMDE5LDkgKzEwMjIsOSBAQAogbW9kdWxlX3BhcmFtKHJldmlkX2VycmF0YSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmV2aWRfZXJyYXRhLCAiSWdub3JlIENQVSBSZXZpc2lvbiBJRCIpOwogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTG9uZ2hhdWwgZHJpdmVyIGZvciBWSUEgQ3lyaXggcHJvY2Vzc29ycy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbGF0ZV9pbml0Y2FsbChsb25naGF1bF9pbml0KTsKIG1vZHVsZV9leGl0KGxvbmdoYXVsX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaAppbmRleCA0ZmNjMzIwLi5lMjM2MGE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaApAQCAtNDksMTQgKzQ5LDE0IEBACiAKIC8qCiAgKiBDbG9jayByYXRpbyB0YWJsZXMuIERpdi9Nb2QgYnkgMTAgdG8gZ2V0IHJhdGlvLgotICogVGhlIGVibGNyIG9uZXMgc3BlY2lmeSB0aGUgcmF0aW8gcmVhZCBmcm9tIHRoZSBDUFUuCi0gKiBUaGUgY2xvY2tfcmF0aW8gb25lcyBzcGVjaWZ5IHdoYXQgdG8gd3JpdGUgdG8gdGhlIENQVS4KKyAqIFRoZSBlYmxjciB2YWx1ZXMgc3BlY2lmeSB0aGUgcmF0aW8gcmVhZCBmcm9tIHRoZSBDUFUuCisgKiBUaGUgbXVsdHMgdmFsdWVzIHNwZWNpZnkgd2hhdCB0byB3cml0ZSB0byB0aGUgQ1BVLgogICovCiAKIC8qCiAgKiBWSUEgQzMgU2FtdWVsIDEgICYgU2FtdWVsIDIgKHN0ZXBwaW5nIDApCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBzYW11ZWwxX2Nsb2NrX3JhdGlvWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBzYW11ZWwxX211bHRzWzE2XSA9IHsKIAktMSwgLyogMDAwMCAtPiBSRVNFUlZFRCAqLwogCTMwLCAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTExOSw3ICsxMTksNyBAQAogLyoKICAqIFZJQSBDMyBFenJhCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhX2Nsb2NrX3JhdGlvWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhX211bHRzWzE2XSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTE2MCw3ICsxNjAsNyBAQAogLyoKICAqIFZJQSBDMyAoRXpyYS1UKSBbQzVNXS4KICAqLwotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmF0X2Nsb2NrX3JhdGlvWzMyXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhdF9tdWx0c1szMl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJMzAsICAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qCiAgKiBWSUEgQzMgTmVoZW1pYWggKi8KIAotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhICBuZWhlbWlhaF9jbG9ja19yYXRpb1szMl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgIG5laGVtaWFoX211bHRzWzMyXSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAktMSwgLyogMDAwMSAtPiAxNi4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKaW5kZXggNzc3YTdmZi4uZGE1ZjcwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCkBAIC0xMSwxMiArMTEsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJsb25ncnVuIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImxvbmdydW4iLCBtc2cpCiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIJbG9uZ3J1bl9kcml2ZXI7CiAKQEAgLTUxLDcgKzUyLDcgQEAKIAltc3JfbG8gJj0gMHgwMDAwMDA3RjsKIAltc3JfaGkgJj0gMHgwMDAwMDA3RjsKIAotCWlmICggbG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSApIHsKKwlpZiAobG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSkgewogCQkvKiBBc3N1bWUgZGVnZW5lcmF0ZSBMb25ncnVuIHRhYmxlICovCiAJCXBvbGljeS0+bWluID0gcG9saWN5LT5tYXggPSBsb25ncnVuX2hpZ2hfZnJlcTsKIAl9IGVsc2UgewpAQCAtNzksNyArODAsNyBAQAogCWlmICghcG9saWN5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggbG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSApIHsKKwlpZiAobG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSkgewogCQkvKiBBc3N1bWUgZGVnZW5lcmF0ZSBMb25ncnVuIHRhYmxlICovCiAJCXBjdGdfbG8gPSBwY3RnX2hpID0gMTAwOwogCX0gZWxzZSB7CkBAIC0xNTIsNyArMTUzLDcgQEAKIAljcHVpZCgweDgwODYwMDA3LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAlkcHJpbnRrKCJjcHVpZCBlYXggaXMgJXVcbiIsIGVheCk7CiAKLQlyZXR1cm4gKGVheCAqIDEwMDApOworCXJldHVybiBlYXggKiAxMDAwOwogfQogCiAvKioKQEAgLTE5Niw3ICsxOTcsOCBAQAogCQlyZG1zcihNU1JfVE1UQV9MUlRJX1ZPTFRfTUhaLCBtc3JfbG8sIG1zcl9oaSk7CiAJCSpoaWdoX2ZyZXEgPSBtc3JfbG8gKiAxMDAwOyAvKiB0byBrSHogKi8KIAotCQlkcHJpbnRrKCJsb25ncnVuIHRhYmxlIGludGVyZmFjZSB0b2xkICV1IC0gJXUga0h6XG4iLCAqbG93X2ZyZXEsICpoaWdoX2ZyZXEpOworCQlkcHJpbnRrKCJsb25ncnVuIHRhYmxlIGludGVyZmFjZSB0b2xkICV1IC0gJXUga0h6XG4iLAorCQkJCSpsb3dfZnJlcSwgKmhpZ2hfZnJlcSk7CiAKIAkJaWYgKCpsb3dfZnJlcSA+ICpoaWdoX2ZyZXEpCiAJCQkqbG93X2ZyZXEgPSAqaGlnaF9mcmVxOwpAQCAtMjE5LDcgKzIyMSw3IEBACiAJY3B1aWQoMHg4MDg2MDAwNywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CiAJLyogdHJ5IGRlY3JlYXNpbmcgaW4gMTAlIHN0ZXBzLCBzb21lIHByb2Nlc3NvcnMgcmVhY3Qgb25seQogCSAqIG9uIHNvbWUgYmFycmllciB2YWx1ZXMgKi8KLQlmb3IgKHRyeV9oaSA9IDgwOyB0cnlfaGkgPiAwICYmIGVjeCA+IDkwOyB0cnlfaGkgLT0xMCkgeworCWZvciAodHJ5X2hpID0gODA7IHRyeV9oaSA+IDAgJiYgZWN4ID4gOTA7IHRyeV9oaSAtPSAxMCkgewogCQkvKiBzZXQgdG8gMCB0byB0cnlfaGkgcGVyZl9wY3RnICovCiAJCW1zcl9sbyAmPSAweEZGRkZGRjgwOwogCQltc3JfaGkgJj0gMHhGRkZGRkY4MDsKQEAgLTIzNiw3ICsyMzgsNyBAQAogCiAJLyogcGVyZm9ybWFuY2VfcGN0ZyA9IChjdXJyZW50X2ZyZXEgLSBsb3dfZnJlcSkvKGhpZ2hfZnJlcSAtIGxvd19mcmVxKQogCSAqIGVxYWxzCi0JICogbG93X2ZyZXEgKiAoIDEgLSBwZXJmX3BjdGcpID0gKGN1cl9mcmVxIC0gaGlnaF9mcmVxICogcGVyZl9wY3RnKQorCSAqIGxvd19mcmVxICogKDEgLSBwZXJmX3BjdGcpID0gKGN1cl9mcmVxIC0gaGlnaF9mcmVxICogcGVyZl9wY3RnKQogCSAqCiAJICogaGlnaF9mcmVxICogcGVyZl9wY3RnIGlzIHN0b3JlZCB0ZW1wb2FyaWx5IGludG8gImVieCIuCiAJICovCkBAIC0zMTcsOSArMzE5LDEwIEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdSdW4gZHJpdmVyIGZvciBUcmFuc21ldGEgQ3J1c29lIGFuZCBFZmZpY2VvbiBwcm9jZXNzb3JzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTG9uZ1J1biBkcml2ZXIgZm9yIFRyYW5zbWV0YSBDcnVzb2UgYW5kICIKKwkJIkVmZmljZW9uIHByb2Nlc3NvcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGxvbmdydW5faW5pdCk7CiBtb2R1bGVfZXhpdChsb25ncnVuX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwppbmRleCAzMTc4YzNhLi40MWVkOTQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwpAQCAtMjcsMTUgKzI3LDE3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKICNkZWZpbmUgUEZYCSJwNC1jbG9ja21vZDogIgotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJwNC1jbG9ja21vZCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJwNC1jbG9ja21vZCIsIG1zZykKIAogLyoKICAqIER1dHkgQ3ljbGUgKDNiaXRzKSwgbm90ZSBEQ19ESVNBQkxFIGlzIG5vdCBzcGVjaWZpZWQgaW4KQEAgLTU4LDcgKzYwLDggQEAKIHsKIAl1MzIgbCwgaDsKIAotCWlmICghY3B1X29ubGluZShjcHUpIHx8IChuZXdzdGF0ZSA+IERDX0RJU0FCTEUpIHx8IChuZXdzdGF0ZSA9PSBEQ19SRVNWKSkKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSB8fAorCSAgICAobmV3c3RhdGUgPiBEQ19ESVNBQkxFKSB8fCAobmV3c3RhdGUgPT0gRENfUkVTVikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCAmbCwgJmgpOwpAQCAtNjYsNyArNjksOCBAQAogCWlmIChsICYgMHgwMSkKIAkJZHByaW50aygiQ1BVIyVkIGN1cnJlbnRseSB0aGVybWFsIHRocm90dGxlZFxuIiwgY3B1KTsKIAotCWlmIChoYXNfTjQ0X08xN19lcnJhdGFbY3B1XSAmJiAobmV3c3RhdGUgPT0gRENfMjVQVCB8fCBuZXdzdGF0ZSA9PSBEQ19ERkxUKSkKKwlpZiAoaGFzX040NF9PMTdfZXJyYXRhW2NwdV0gJiYKKwkgICAgKG5ld3N0YXRlID09IERDXzI1UFQgfHwgbmV3c3RhdGUgPT0gRENfREZMVCkpCiAJCW5ld3N0YXRlID0gRENfMzhQVDsKIAogCXJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wsICZsLCAmaCk7CkBAIC0xMTIsNyArMTE2LDggQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAlpbnQgaTsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmcDRjbG9ja21vZF90YWJsZVswXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmcDRjbG9ja21vZF90YWJsZVswXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gY3B1ZnJlcV9wNF9nZXQocG9saWN5LT5jcHUpOwpAQCAtMTI3LDcgKzEzMiw4IEBACiAJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAJfQogCi0JLyogcnVuIG9uIGVhY2ggbG9naWNhbCBDUFUsIHNlZSBzZWN0aW9uIDEzLjE1LjMgb2YgSUEzMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUKKwkvKiBydW4gb24gZWFjaCBsb2dpY2FsIENQVSwKKwkgKiBzZWUgc2VjdGlvbiAxMy4xNS4zIG9mIElBMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlCiAJICogRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2x1bWUgMwogCSAqLwogCWZvcl9lYWNoX2NwdShpLCBwb2xpY3ktPmNwdXMpCkBAIC0xNTMsMjggKzE1OSwzMCBAQAogewogCWlmIChjLT54ODYgPT0gMHgwNikgewogCQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlIENQVSBkZXRlY3RlZC4gIgotCQkJICAgICAgICJUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgdm9sdGFnZSBzY2FsaW5nIgotCQkJICAgICAgICIgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5IHNjYWxpbmcuIFlvdSBzaG91bGQgdXNlICIKLQkJCSAgICAgICAidGhhdCBpbnN0ZWFkIG9mIHA0LWNsb2NrbW9kLCBpZiBwb3NzaWJsZS5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlIENQVSAiCisJCQkgICAgICAgImRldGVjdGVkLiBUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgIgorCQkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5ICIKKwkJCSAgICAgICAic2NhbGluZy4gWW91IHNob3VsZCB1c2UgdGhhdCBpbnN0ZWFkIG9mICIKKwkJCSAgICAgICAicDQtY2xvY2ttb2QsIGlmIHBvc3NpYmxlLlxuIik7CiAJCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJCWNhc2UgMHgwRTogLyogQ29yZSAqLwogCQljYXNlIDB4MEY6IC8qIENvcmUgRHVvICovCiAJCWNhc2UgMHgxNjogLyogQ2VsZXJvbiBDb3JlICovCiAJCQlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwotCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFKTsKKwkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1BDT1JFKTsKIAkJY2FzZSAweDBEOiAvKiBQZW50aXVtIE0gKERvdGhhbikgKi8KIAkJCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSAweDA5OiAvKiBQZW50aXVtIE0gKEJhbmlhcykgKi8KLQkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koU1BFRURTVEVQX1BST0NFU1NPUl9QTSk7CisJCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QTSk7CiAJCX0KIAl9CiAKIAlpZiAoYy0+eDg2ICE9IDB4RikgewogCQlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmtub3duIHA0LWNsb2NrbW9kLWNhcGFibGUgQ1BVLiAiCi0JCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8Y3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmtub3duIENQVS4gIgorCQkJCSJQbGVhc2Ugc2VuZCBhbiBlLW1haWwgdG8gIgorCQkJCSI8Y3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODIsMTYgKzE5MCwxNiBAQAogCSAqIHRocm90dGxpbmcgaXMgYWN0aXZlIG9yIG5vdC4gKi8KIAlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwogCi0JaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX1BST0NFU1NPUl9QNE0pIHsKKwlpZiAoc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKSA9PSBTUEVFRFNURVBfQ1BVX1A0TSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogUGVudGl1bSA0LU0gZGV0ZWN0ZWQuICIKIAkJICAgICAgICJUaGUgc3BlZWRzdGVwLWljaCBvciBhY3BpIGNwdWZyZXEgbW9kdWxlcyBvZmZlciAiCiAJCSAgICAgICAidm9sdGFnZSBzY2FsaW5nIGluIGFkZGl0aW9uIG9mIGZyZXF1ZW5jeSBzY2FsaW5nLiAiCiAJCSAgICAgICAiWW91IHNob3VsZCB1c2UgZWl0aGVyIG9uZSBpbnN0ZWFkIG9mIHA0LWNsb2NrbW9kLCAiCiAJCSAgICAgICAiaWYgcG9zc2libGUuXG4iKTsKLQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1A0TSk7CisJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1A0TSk7CiAJfQogCi0JcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1A0RCk7CisJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUDREKTsKIH0KIAogCkBAIC0yMTcsMTQgKzIyNSwyMCBAQAogCQlkcHJpbnRrKCJoYXMgZXJyYXRhIC0tIGRpc2FibGluZyBsb3cgZnJlcXVlbmNpZXNcbiIpOwogCX0KIAorCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9DUFVfUDREICYmCisJICAgIGMtPng4Nl9tb2RlbCA8IDIpIHsKKwkJLyogc3dpdGNoIHRvIG1heGltdW0gZnJlcXVlbmN5IGFuZCBtZWFzdXJlIHJlc3VsdCAqLworCQljcHVmcmVxX3A0X3NldGRjKHBvbGljeS0+Y3B1LCBEQ19ESVNBQkxFKTsKKwkJcmVjYWxpYnJhdGVfY3B1X2toeigpOworCX0KIAkvKiBnZXQgbWF4IGZyZXF1ZW5jeSAqLwogCXN0b2NrX2ZyZXEgPSBjcHVmcmVxX3A0X2dldF9mcmVxdWVuY3koYyk7CiAJaWYgKCFzdG9ja19mcmVxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHRhYmxlIGluaXQgKi8KLQlmb3IgKGk9MTsgKHA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7Ci0JCWlmICgoaTwyKSAmJiAoaGFzX040NF9PMTdfZXJyYXRhW3BvbGljeS0+Y3B1XSkpCisJZm9yIChpID0gMTsgKHA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJCWlmICgoaSA8IDIpICYmIChoYXNfTjQ0X08xN19lcnJhdGFbcG9saWN5LT5jcHVdKSkKIAkJCXA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOwogCQllbHNlCiAJCQlwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IChzdG9ja19mcmVxICogaSkvODsKQEAgLTIzMiw3ICsyNDYsMTAgQEAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihwNGNsb2NrbW9kX3RhYmxlLCBwb2xpY3ktPmNwdSk7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDsgLyogYXNzdW1lZCAqLworCisJLyogdGhlIHRyYW5zaXRpb24gbGF0ZW5jeSBpcyBzZXQgdG8gYmUgMSBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bQorCSAqIHRyYW5zaXRpb24gbGF0ZW5jeSBvZiB0aGUgb25kZW1hbmQgZ292ZXJub3IgKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDE7CiAJcG9saWN5LT5jdXIgPSBzdG9ja19mcmVxOwogCiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCAmcDRjbG9ja21vZF90YWJsZVswXSk7CkBAIC0yNTgsMTIgKzI3NSwxMiBAQAogCQlsID0gRENfRElTQUJMRTsKIAogCWlmIChsICE9IERDX0RJU0FCTEUpCi0JCXJldHVybiAoc3RvY2tfZnJlcSAqIGwgLyA4KTsKKwkJcmV0dXJuIHN0b2NrX2ZyZXEgKiBsIC8gODsKIAogCXJldHVybiBzdG9ja19mcmVxOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcDRjbG9ja21vZF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcDRjbG9ja21vZF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMjk4LDkgKzMxNSwxMCBAQAogCiAJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnA0Y2xvY2ttb2RfZHJpdmVyKTsKIAlpZiAoIXJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlA0L1hlb24oVE0pIENQVSBPbi1EZW1hbmQgQ2xvY2sgTW9kdWxhdGlvbiBhdmFpbGFibGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUDQvWGVvbihUTSkgQ1BVIE9uLURlbWFuZCBDbG9jayAiCisJCQkJIk1vZHVsYXRpb24gYXZhaWxhYmxlXG4iKTsKIAotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTMxMCw5ICszMjgsOSBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiY3B1ZnJlcSBkcml2ZXIgZm9yIFBlbnRpdW0oVE0pIDQvWGVvbihUTSkiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjcHVmcmVxIGRyaXZlciBmb3IgUGVudGl1bShUTSkgNC9YZW9uKFRNKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKGNwdWZyZXFfcDRfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX3A0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwppbmRleCBjMWFjNTc5Li5mMTBkZWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgVGhpcyBmaWxlIHdhcyBiYXNlZCB1cG9uIGNvZGUgaW4gUG93ZXJ0d2VhayBMaW51eCAoaHR0cDovL3Bvd2VydHdlYWsuc2YubmV0KQotICogIChDKSAyMDAwLTIwMDMgIERhdmUgSm9uZXMsIEFyamFuIHZhbiBkZSBWZW4sIEphbm5lIFDDpG5rw6Rsw6QsIERvbWluaWsgQnJvZG93c2tpLgorICogIChDKSAyMDAwLTIwMDMgIERhdmUgSm9uZXMsIEFyamFuIHZhbiBkZSBWZW4sIEphbm5lIFDDpG5rw6Rsw6QsCisgKiAgICAgICAgICAgICAgICAgRG9taW5payBCcm9kb3dza2kuCiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KICAqCkBAIC0xMywxNCArMTQsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKwogI2RlZmluZSBQT1dFUk5PV19JT1BPUlQgMHhmZmYwICAgICAgICAgIC8qIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlLCBhcyBsb25nCiAJCQkJCSAgIGFzIGl0IGlzIHVudXNlZCAqLwogCisjZGVmaW5lIFBGWCAicG93ZXJub3ctazY6ICIKIHN0YXRpYyB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBidXNmcmVxOyAgIC8qIEZTQiwgaW4gMTAga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgbWF4X211bHRpcGxpZXI7CiAKQEAgLTQ3LDggKzQ5LDggQEAKICAqLwogc3RhdGljIGludCBwb3dlcm5vd19rNl9nZXRfY3B1X211bHRpcGxpZXIodm9pZCkKIHsKLQl1NjQgICAgICAgICAgICAgaW52YWx1ZSA9IDA7Ci0JdTMyICAgICAgICAgICAgIG1zcnZhbDsKKwl1NjQgaW52YWx1ZSA9IDA7CisJdTMyIG1zcnZhbDsKIAogCW1zcnZhbCA9IFBPV0VSTk9XX0lPUE9SVCArIDB4MTsKIAl3cm1zcihNU1JfSzZfRVBNUiwgbXNydmFsLCAwKTsgLyogZW5hYmxlIHRoZSBQb3dlck5vdyBwb3J0ICovCkBAIC02OCwxMiArNzAsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgcG93ZXJub3dfazZfc2V0X3N0YXRlKHVuc2lnbmVkIGludCBiZXN0X2kpCiB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgb3V0dmFsdWUgPSAwLCBpbnZhbHVlID0gMDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICBtc3J2YWw7Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXMgICAgZnJlcXM7CisJdW5zaWduZWQgbG9uZyBvdXR2YWx1ZSA9IDAsIGludmFsdWUgPSAwOworCXVuc2lnbmVkIGxvbmcgbXNydmFsOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCiAJaWYgKGNsb2NrX3JhdGlvW2Jlc3RfaV0uaW5kZXggPiBtYXhfbXVsdGlwbGllcikgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGludmFsaWQgdGFyZ2V0IGZyZXF1ZW5jeVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgdGFyZ2V0IGZyZXF1ZW5jeVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExOSw3ICsxMjEsOCBAQAogICogcG93ZXJub3dfazZfc2V0cG9saWN5IC0gc2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICogIChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIHNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqLwpAQCAtMTI3LDkgKzEzMCwxMCBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7Ci0JdW5zaWduZWQgaW50ICAgIG5ld3N0YXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZjbG9ja19yYXRpb1swXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmY2xvY2tfcmF0aW9bMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBvd2Vybm93X2s2X3NldF9zdGF0ZShuZXdzdGF0ZSk7CkBAIC0xNDAsNyArMTQ0LDcgQEAKIAogc3RhdGljIGludCBwb3dlcm5vd19rNl9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaSwgZjsKIAlpbnQgcmVzdWx0OwogCiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCkBAIC0xNTIsMTAgKzE1NiwxMSBAQAogCiAJLyogdGFibGUgaW5pdCAqLwogCWZvciAoaSA9IDA7IChjbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKLQkJaWYgKGNsb2NrX3JhdGlvW2ldLmluZGV4ID4gbWF4X211bHRpcGxpZXIpCisJCWYgPSBjbG9ja19yYXRpb1tpXS5pbmRleDsKKwkJaWYgKGYgPiBtYXhfbXVsdGlwbGllcikKIAkJCWNsb2NrX3JhdGlvW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKIAkJZWxzZQotCQkJY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ID0gYnVzZnJlcSAqIGNsb2NrX3JhdGlvW2ldLmluZGV4OworCQkJY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ID0gYnVzZnJlcSAqIGY7CiAJfQogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCkBAIC0xODUsNyArMTkwLDkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm5vd19rNl9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gYnVzZnJlcSAqIHBvd2Vybm93X2s2X2dldF9jcHVfbXVsdGlwbGllcigpOworCXVuc2lnbmVkIGludCByZXQ7CisJcmV0ID0gKGJ1c2ZyZXEgKiBwb3dlcm5vd19rNl9nZXRfY3B1X211bHRpcGxpZXIoKSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X2s2X2F0dHJbXSA9IHsKQEAgLTIyMSw3ICsyMjgsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oUE9XRVJOT1dfSU9QT1JULCAxNiwgIlBvd2VyTm93ISIpKSB7Ci0JCXByaW50aygiY3B1ZnJlcTogUG93ZXJOb3cgSU9QT1JUIHJlZ2lvbiBhbHJlYWR5IHVzZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvd2VyTm93IElPUE9SVCByZWdpb24gYWxyZWFkeSB1c2VkLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ2LDcgKzI1Myw4IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4sIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCAiCisJCSJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyTm93ISBkcml2ZXIgZm9yIEFNRCBLNi0yKyAvIEs2LTMrIHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggMWI0NDZkNy4uM2MyOGNjZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTYsMTAgKzYsMTIgQEAKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKiAgQmFzZWQgdXBvbiBkYXRhc2hlZXRzICYgc2FtcGxlIENQVXMga2luZGx5IHByb3ZpZGVkIGJ5IEFNRC4KICAqCi0gKiBFcnJhdGEgNTogUHJvY2Vzc29yIG1heSBmYWlsIHRvIGV4ZWN1dGUgYSBGSUQvVklEIGNoYW5nZSBpbiBwcmVzZW5jZSBvZiBpbnRlcnJ1cHQuCi0gKiAtIFdlIGNsaS9zdGkgb24gc3RlcHBpbmcgQTAgQ1BVcyBhcm91bmQgdGhlIEZJRC9WSUQgdHJhbnNpdGlvbi4KLSAqIEVycmF0YSAxNTogUHJvY2Vzc29ycyB3aXRoIGhhbGYgZnJlcXVlbmN5IG11bHRpcGxpZXJzIG1heSBoYW5nIHVwb24gd2FrZXVwIGZyb20gZGlzY29ubmVjdC4KLSAqIC0gV2UgZGlzYWJsZSBoYWxmIG11bHRpcGxpZXJzIGlmIEFDUEkgaXMgdXNlZCBvbiBBMCBzdGVwcGluZyBDUFVzLgorICogRXJyYXRhIDU6CisgKiAgQ1BVIG1heSBmYWlsIHRvIGV4ZWN1dGUgYSBGSUQvVklEIGNoYW5nZSBpbiBwcmVzZW5jZSBvZiBpbnRlcnJ1cHQuCisgKiAgLSBXZSBjbGkvc3RpIG9uIHN0ZXBwaW5nIEEwIENQVXMgYXJvdW5kIHRoZSBGSUQvVklEIHRyYW5zaXRpb24uCisgKiBFcnJhdGEgMTU6CisgKiAgQ1BVIHdpdGggaGFsZiBmcmVxdWVuY3kgbXVsdGlwbGllcnMgbWF5IGhhbmcgdXBvbiB3YWtldXAgZnJvbSBkaXNjb25uZWN0LgorICogIC0gV2UgZGlzYWJsZSBoYWxmIG11bHRpcGxpZXJzIGlmIEFDUEkgaXMgdXNlZCBvbiBBMCBzdGVwcGluZyBDUFVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIwLDExICsyMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vdGltZXIuaD4JCS8qIE5lZWRlZCBmb3IgcmVjYWxpYnJhdGVfY3B1X2toeigpICovCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzdfQUNQSQpAQCAtNTgsOSArNjAsOSBAQAogdW5pb24gcG93ZXJub3dfYWNwaV9jb250cm9sX3QgewogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGxvbmcgZmlkOjUsCi0JCXZpZDo1LAotCQlzZ3RjOjIwLAotCQlyZXMxOjI7CisJCQl2aWQ6NSwKKwkJCXNndGM6MjAsCisJCQlyZXMxOjI7CiAJfSBiaXRzOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogfTsKQEAgLTk0LDE0ICs5NiwxNSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbl9zY2FsZV9idXM7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbl9zY2FsZV92aWQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc3BlZWQ9LTE7CitzdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc3BlZWQgPSAtMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4aW11bV9zcGVlZDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtYmVyX3NjYWxlczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnNiOwogc3RhdGljIHVuc2lnbmVkIGludCBsYXRlbmN5Owogc3RhdGljIGNoYXIgaGF2ZV9hMDsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJwb3dlcm5vdy1rNyIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJwb3dlcm5vdy1rNyIsIG1zZykKIAogc3RhdGljIGludCBjaGVja19mc2IodW5zaWduZWQgaW50IGZzYnNwZWVkKQogewpAQCAtMTA5LDcgKzExMiw3IEBACiAJdW5zaWduZWQgaW50IGYgPSBmc2IgLyAxMDAwOwogCiAJZGVsdGEgPSAoZnNic3BlZWQgPiBmKSA/IGZzYnNwZWVkIC0gZiA6IGYgLSBmc2JzcGVlZDsKLQlyZXR1cm4gKGRlbHRhIDwgNSk7CisJcmV0dXJuIGRlbHRhIDwgNTsKIH0KIAogc3RhdGljIGludCBjaGVja19wb3dlcm5vdyh2b2lkKQpAQCAtMTE3LDI0ICsxMjAsMjYgQEAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAJdW5zaWduZWQgaW50IG1heGVpLCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKLQlpZiAoKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpIHx8IChjLT54ODYgIT02KSkgeworCWlmICgoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkgfHwgKGMtPng4NiAhPSA2KSkgewogI2lmZGVmIE1PRFVMRQotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgd2l0aCBBTUQgSzcgQ1BVc1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIHdpdGggIgorCQkJCSJBTUQgSzcgQ1BVc1xuIik7CiAjZW5kaWYKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogR2V0IG1heGltdW0gY2FwYWJpbGl0aWVzICovCi0JbWF4ZWkgPSBjcHVpZF9lYXggKDB4ODAwMDAwMDApOworCW1heGVpID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwogCWlmIChtYXhlaSA8IDB4ODAwMDAwMDcpIHsJLyogQW55IHBvd2Vybm93IGluZm8gPyAqLwogI2lmZGVmIE1PRFVMRQotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIk5vIHBvd2Vybm93IGNhcGFiaWxpdGllcyBkZXRlY3RlZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBwb3dlcm5vdyBjYXBhYmlsaXRpZXMgZGV0ZWN0ZWRcbiIpOwogI2VuZGlmCiAJCXJldHVybiAwOwogCX0KIAogCWlmICgoYy0+eDg2X21vZGVsID09IDYpICYmIChjLT54ODZfbWFzayA9PSAwKSkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIks3IDY2MFtBMF0gY29yZSBkZXRlY3RlZCwgZW5hYmxpbmcgZXJyYXRhIHdvcmthcm91bmRzXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIks3IDY2MFtBMF0gY29yZSBkZXRlY3RlZCwgIgorCQkJCSJlbmFibGluZyBlcnJhdGEgd29ya2Fyb3VuZHNcbiIpOwogCQloYXZlX2EwID0gMTsKIAl9CiAKQEAgLTE0NCwzNyArMTQ5LDQyIEBACiAJaWYgKCEoZWR4ICYgKDEgPDwgMSB8IDEgPDwgMikpKQogCQlyZXR1cm4gMDsKIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiUG93ZXJOT1chIFRlY2hub2xvZ3kgcHJlc2VudC4gQ2FuIHNjYWxlOiAiKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXJOT1chIFRlY2hub2xvZ3kgcHJlc2VudC4gQ2FuIHNjYWxlOiAiKTsKIAogCWlmIChlZHggJiAxIDw8IDEpIHsKLQkJcHJpbnRrICgiZnJlcXVlbmN5Iik7Ci0JCWNhbl9zY2FsZV9idXM9MTsKKwkJcHJpbnRrKCJmcmVxdWVuY3kiKTsKKwkJY2FuX3NjYWxlX2J1cyA9IDE7CiAJfQogCiAJaWYgKChlZHggJiAoMSA8PCAxIHwgMSA8PCAyKSkgPT0gMHg2KQotCQlwcmludGsgKCIgYW5kICIpOworCQlwcmludGsoIiBhbmQgIik7CiAKIAlpZiAoZWR4ICYgMSA8PCAyKSB7Ci0JCXByaW50ayAoInZvbHRhZ2UiKTsKLQkJY2FuX3NjYWxlX3ZpZD0xOworCQlwcmludGsoInZvbHRhZ2UiKTsKKwkJY2FuX3NjYWxlX3ZpZCA9IDE7CiAJfQogCi0JcHJpbnRrICgiLlxuIik7CisJcHJpbnRrKCIuXG4iKTsKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9lbnRyeSh1bnNpZ25lZCBpbnQgZW50cnkpCit7CisJcG93ZXJub3dfdGFibGVbZW50cnldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKK30KIAotc3RhdGljIGludCBnZXRfcmFuZ2VzICh1bnNpZ25lZCBjaGFyICpwc3QpCitzdGF0aWMgaW50IGdldF9yYW5nZXModW5zaWduZWQgY2hhciAqcHN0KQogewogCXVuc2lnbmVkIGludCBqOwogCXVuc2lnbmVkIGludCBzcGVlZDsKIAl1OCBmaWQsIHZpZDsKIAotCXBvd2Vybm93X3RhYmxlID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKiAobnVtYmVyX3NjYWxlcyArIDEpKSwgR0ZQX0tFUk5FTCk7CisJcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqCisJCQkJKG51bWJlcl9zY2FsZXMgKyAxKSksIEdGUF9LRVJORUwpOwogCWlmICghcG93ZXJub3dfdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChqPTAgOyBqIDwgbnVtYmVyX3NjYWxlczsgaisrKSB7CisJZm9yIChqID0gMCA7IGogPCBudW1iZXJfc2NhbGVzOyBqKyspIHsKIAkJZmlkID0gKnBzdCsrOwogCiAJCXBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSA9IChmc2IgKiBmaWRfY29kZXNbZmlkXSkgLyAxMDsKQEAgLTE4MiwxMCArMTkyLDEwIEBACiAKIAkJc3BlZWQgPSBwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3k7CiAKLQkJaWYgKChmaWRfY29kZXNbZmlkXSAlIDEwKT09NSkgeworCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApID09IDUpIHsKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s3X0FDUEkKIAkJCWlmIChoYXZlX2EwID09IDEpCi0JCQkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJCWludmFsaWRhdGVfZW50cnkoaik7CiAjZW5kaWYKIAkJfQogCkBAIC0xOTcsNyArMjA3LDcgQEAKIAkJdmlkID0gKnBzdCsrOwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCB8PSAodmlkIDw8IDgpOyAvKiB1cHBlciA4IGJpdHMgKi8KIAotCQlkcHJpbnRrICgiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKKwkJZHByaW50aygiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKIAkJCSAiVklEOiAweCV4ICglZC4lMDNkVilcbiIsIGZpZCwgZmlkX2NvZGVzW2ZpZF0gLyAxMCwKIAkJCSBmaWRfY29kZXNbZmlkXSAlIDEwLCBzcGVlZC8xMDAwLCB2aWQsCiAJCQkgbW9iaWxlX3ZpZF90YWJsZVt2aWRdLzEwMDAsCkBAIC0yMTQsMTMgKzIyNCwxMyBAQAogewogCXVuaW9uIG1zcl9maWR2aWRjdGwgZmlkdmlkY3RsOwogCi0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCWlmIChmaWR2aWRjdGwuYml0cy5GSUQgIT0gZmlkKSB7CiAJCWZpZHZpZGN0bC5iaXRzLlNHVEMgPSBsYXRlbmN5OwogCQlmaWR2aWRjdGwuYml0cy5GSUQgPSBmaWQ7CiAJCWZpZHZpZGN0bC5iaXRzLlZJREMgPSAwOwogCQlmaWR2aWRjdGwuYml0cy5GSURDID0gMTsKLQkJd3Jtc3JsIChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOworCQl3cm1zcmwoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKIAl9CiB9CiAKQEAgLTIyOSwxOCArMjM5LDE4IEBACiB7CiAJdW5pb24gbXNyX2ZpZHZpZGN0bCBmaWR2aWRjdGw7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJaWYgKGZpZHZpZGN0bC5iaXRzLlZJRCAhPSB2aWQpIHsKIAkJZmlkdmlkY3RsLmJpdHMuU0dUQyA9IGxhdGVuY3k7CiAJCWZpZHZpZGN0bC5iaXRzLlZJRCA9IHZpZDsKIAkJZmlkdmlkY3RsLmJpdHMuRklEQyA9IDA7CiAJCWZpZHZpZGN0bC5iaXRzLlZJREMgPSAxOwotCQl3cm1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJCXdybXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCX0KIH0KIAogCi1zdGF0aWMgdm9pZCBjaGFuZ2Vfc3BlZWQgKHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIGNoYW5nZV9zcGVlZCh1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJdTggZmlkLCB2aWQ7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CkBAIC0yNTcsNyArMjY3LDcgQEAKIAogCWZyZXFzLmNwdSA9IDA7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CiAJY2ZpZCA9IGZpZHZpZHN0YXR1cy5iaXRzLkNGSUQ7CiAJZnJlcXMub2xkID0gZnNiICogZmlkX2NvZGVzW2NmaWRdIC8gMTA7CiAKQEAgLTMyMSwxMiArMzMxLDE0IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlpZiAoYWNwaV9wcm9jZXNzb3JfcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgeworCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9CisJCQlBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycjI7CiAJfQogCi0JaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgeworCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQgIT0KKwkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMjsKIAl9CkBAIC0zMzgsNyArMzUwLDggQEAKIAkJZ290byBlcnIyOwogCX0KIAotCXBvd2Vybm93X3RhYmxlID0ga3phbGxvYygobnVtYmVyX3NjYWxlcyArIDEpICogKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpKSwgR0ZQX0tFUk5FTCk7CisJcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqCisJCQkJKG51bWJlcl9zY2FsZXMgKyAxKSksIEdGUF9LRVJORUwpOwogCWlmICghcG93ZXJub3dfdGFibGUpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnIyOwpAQCAtMzUyLDcgKzM2NSw3IEBACiAJCXVuc2lnbmVkIGludCBzcGVlZCwgc3BlZWRfbWh6OwogCiAJCXBjLnZhbCA9ICh1bnNpZ25lZCBsb25nKSBzdGF0ZS0+Y29udHJvbDsKLQkJZHByaW50ayAoImFjcGk6ICBQJWQ6ICVkIE1IeiAlZCBtVyAlZCB1UyBjb250cm9sICUwOHggU0dUQyAlZFxuIiwKKwkJZHByaW50aygiYWNwaTogIFAlZDogJWQgTUh6ICVkIG1XICVkIHVTIGNvbnRyb2wgJTA4eCBTR1RDICVkXG4iLAogCQkJIGksCiAJCQkgKHUzMikgc3RhdGUtPmNvcmVfZnJlcXVlbmN5LAogCQkJICh1MzIpIHN0YXRlLT5wb3dlciwKQEAgLTM4MSwxMiArMzk0LDEyIEBACiAJCWlmIChzcGVlZCAlIDEwMDAgPiAwKQogCQkJc3BlZWRfbWh6Kys7CiAKLQkJaWYgKChmaWRfY29kZXNbZmlkXSAlIDEwKT09NSkgeworCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApID09IDUpIHsKIAkJCWlmIChoYXZlX2EwID09IDEpCi0JCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJCWludmFsaWRhdGVfZW50cnkoaSk7CiAJCX0KIAotCQlkcHJpbnRrICgiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKKwkJZHByaW50aygiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKIAkJCSAiVklEOiAweCV4ICglZC4lMDNkVilcbiIsIGZpZCwgZmlkX2NvZGVzW2ZpZF0gLyAxMCwKIAkJCSBmaWRfY29kZXNbZmlkXSAlIDEwLCBzcGVlZF9taHosIHZpZCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0vMTAwMCwKQEAgLTQyMiw3ICs0MzUsOCBAQAogZXJyMDU6CiAJa2ZyZWUoYWNwaV9wcm9jZXNzb3JfcGVyZik7CiBlcnIwOgotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJBQ1BJIHBlcmZsaWIgY2FuIG5vdCBiZSB1c2VkIGluIHRoaXMgcGxhdGZvcm1cbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJBQ1BJIHBlcmZsaWIgY2FuIG5vdCBiZSB1c2VkIG9uICIKKwkJCSJ0aGlzIHBsYXRmb3JtXG4iKTsKIAlhY3BpX3Byb2Nlc3Nvcl9wZXJmID0gTlVMTDsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDM1LDcgKzQ0OSwxNCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfZGVjb2RlX2Jpb3MgKGludCBtYXhmaWQsIGludCBzdGFydHZpZCkKK3N0YXRpYyB2b2lkIHByaW50X3BzdF9lbnRyeShzdHJ1Y3QgcHN0X3MgKnBzdCwgdW5zaWduZWQgaW50IGopCit7CisJZHByaW50aygiUFNUOiVkIChAJXApXG4iLCBqLCBwc3QpOworCWRwcmludGsoIiBjcHVpZDogMHgleCAgZnNiOiAlZCAgbWF4RklEOiAweCV4ICBzdGFydHZpZDogMHgleFxuIiwKKwkJcHN0LT5jcHVpZCwgcHN0LT5mc2JzcGVlZCwgcHN0LT5tYXhmaWQsIHBzdC0+c3RhcnR2aWQpOworfQorCitzdGF0aWMgaW50IHBvd2Vybm93X2RlY29kZV9iaW9zKGludCBtYXhmaWQsIGludCBzdGFydHZpZCkKIHsKIAlzdHJ1Y3QgcHNiX3MgKnBzYjsKIAlzdHJ1Y3QgcHN0X3MgKnBzdDsKQEAgLTQ0Niw2MSArNDY3LDY3IEBACiAKIAlldHVwbGUgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMSk7CiAKLQlmb3IgKGk9MHhDMDAwMDsgaSA8IDB4ZmZmZjAgOyBpKz0xNikgeworCWZvciAoaSA9IDB4QzAwMDA7IGkgPCAweGZmZmYwIDsgaSArPSAxNikgewogCiAJCXAgPSBwaHlzX3RvX3ZpcnQoaSk7CiAKLQkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsICAxMCkgPT0gMCl7Ci0JCQlkcHJpbnRrICgiRm91bmQgUFNCIGhlYWRlciBhdCAlcFxuIiwgcCk7CisJCWlmIChtZW1jbXAocCwgIkFNREs3UE5PVyEiLCAgMTApID09IDApIHsKKwkJCWRwcmludGsoIkZvdW5kIFBTQiBoZWFkZXIgYXQgJXBcbiIsIHApOwogCQkJcHNiID0gKHN0cnVjdCBwc2JfcyAqKSBwOwotCQkJZHByaW50ayAoIlRhYmxlIHZlcnNpb246IDB4JXhcbiIsIHBzYi0+dGFibGV2ZXJzaW9uKTsKKwkJCWRwcmludGsoIlRhYmxlIHZlcnNpb246IDB4JXhcbiIsIHBzYi0+dGFibGV2ZXJzaW9uKTsKIAkJCWlmIChwc2ItPnRhYmxldmVyc2lvbiAhPSAweDEyKSB7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJTb3JyeSwgb25seSB2MS4yIHRhYmxlcyBzdXBwb3J0ZWQgcmlnaHQgbm93XG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiU29ycnksIG9ubHkgdjEuMiB0YWJsZXMiCisJCQkJCQkiIHN1cHBvcnRlZCByaWdodCBub3dcbiIpOwogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQogCi0JCQlkcHJpbnRrICgiRmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MpOwotCQkJaWYgKChwc2ItPmZsYWdzICYgMSk9PTApIHsKLQkJCQlkcHJpbnRrICgiTW9iaWxlIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZHByaW50ayAoIkRlc2t0b3Agdm9sdGFnZSByZWd1bGF0b3JcbiIpOwotCQkJfQorCQkJZHByaW50aygiRmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MpOworCQkJaWYgKChwc2ItPmZsYWdzICYgMSkgPT0gMCkKKwkJCQlkcHJpbnRrKCJNb2JpbGUgdm9sdGFnZSByZWd1bGF0b3JcbiIpOworCQkJZWxzZQorCQkJCWRwcmludGsoIkRlc2t0b3Agdm9sdGFnZSByZWd1bGF0b3JcbiIpOwogCiAJCQlsYXRlbmN5ID0gcHNiLT5zZXR0bGluZ3RpbWU7CiAJCQlpZiAobGF0ZW5jeSA8IDEwMCkgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJCSU9TIHNldCBzZXR0bGluZyB0aW1lIHRvICVkIG1pY3Jvc2Vjb25kcy4gIgotCQkJCQkJIlNob3VsZCBiZSBhdCBsZWFzdCAxMDAuIENvcnJlY3RpbmcuXG4iLCBsYXRlbmN5KTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQklPUyBzZXQgc2V0dGxpbmcgdGltZSAiCisJCQkJCQkidG8gJWQgbWljcm9zZWNvbmRzLiAiCisJCQkJCQkiU2hvdWxkIGJlIGF0IGxlYXN0IDEwMC4gIgorCQkJCQkJIkNvcnJlY3RpbmcuXG4iLCBsYXRlbmN5KTsKIAkJCQlsYXRlbmN5ID0gMTAwOwogCQkJfQotCQkJZHByaW50ayAoIlNldHRsaW5nIFRpbWU6ICVkIG1pY3Jvc2Vjb25kcy5cbiIsIHBzYi0+c2V0dGxpbmd0aW1lKTsKLQkJCWRwcmludGsgKCJIYXMgJWQgUFNUIHRhYmxlcy4gKE9ubHkgZHVtcGluZyBvbmVzIHJlbGV2YW50IHRvIHRoaXMgQ1BVKS5cbiIsIHBzYi0+bnVtcHN0KTsKKwkJCWRwcmludGsoIlNldHRsaW5nIFRpbWU6ICVkIG1pY3Jvc2Vjb25kcy5cbiIsCisJCQkJCXBzYi0+c2V0dGxpbmd0aW1lKTsKKwkJCWRwcmludGsoIkhhcyAlZCBQU1QgdGFibGVzLiAoT25seSBkdW1waW5nIG9uZXMgIgorCQkJCQkicmVsZXZhbnQgdG8gdGhpcyBDUFUpLlxuIiwKKwkJCQkJcHNiLT5udW1wc3QpOwogCi0JCQlwICs9IHNpemVvZiAoc3RydWN0IHBzYl9zKTsKKwkJCXAgKz0gc2l6ZW9mKHN0cnVjdCBwc2Jfcyk7CiAKIAkJCXBzdCA9IChzdHJ1Y3QgcHN0X3MgKikgcDsKIAotCQkJZm9yIChqPTA7IGo8cHNiLT5udW1wc3Q7IGorKykgeworCQkJZm9yIChqID0gMDsgaiA8IHBzYi0+bnVtcHN0OyBqKyspIHsKIAkJCQlwc3QgPSAoc3RydWN0IHBzdF9zICopIHA7CiAJCQkJbnVtYmVyX3NjYWxlcyA9IHBzdC0+bnVtcHN0YXRlczsKIAotCQkJCWlmICgoZXR1cGxlID09IHBzdC0+Y3B1aWQpICYmIGNoZWNrX2ZzYihwc3QtPmZzYnNwZWVkKSAmJgotCQkJCSAgICAobWF4ZmlkPT1wc3QtPm1heGZpZCkgJiYgKHN0YXJ0dmlkPT1wc3QtPnN0YXJ0dmlkKSkKLQkJCQl7Ci0JCQkJCWRwcmludGsgKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7Ci0JCQkJCWRwcmludGsgKCIgY3B1aWQ6IDB4JXggIGZzYjogJWQgIG1heEZJRDogMHgleCAgc3RhcnR2aWQ6IDB4JXhcbiIsCi0JCQkJCQkgcHN0LT5jcHVpZCwgcHN0LT5mc2JzcGVlZCwgcHN0LT5tYXhmaWQsIHBzdC0+c3RhcnR2aWQpOwotCi0JCQkJCXJldCA9IGdldF9yYW5nZXMgKChjaGFyICopIHBzdCArIHNpemVvZiAoc3RydWN0IHBzdF9zKSk7CisJCQkJaWYgKChldHVwbGUgPT0gcHN0LT5jcHVpZCkgJiYKKwkJCQkgICAgY2hlY2tfZnNiKHBzdC0+ZnNic3BlZWQpICYmCisJCQkJICAgIChtYXhmaWQgPT0gcHN0LT5tYXhmaWQpICYmCisJCQkJICAgIChzdGFydHZpZCA9PSBwc3QtPnN0YXJ0dmlkKSkgeworCQkJCQlwcmludF9wc3RfZW50cnkocHN0LCBqKTsKKwkJCQkJcCA9IChjaGFyICopcHN0ICsgc2l6ZW9mKHN0cnVjdCBwc3Rfcyk7CisJCQkJCXJldCA9IGdldF9yYW5nZXMocCk7CiAJCQkJCXJldHVybiByZXQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJdW5zaWduZWQgaW50IGs7Ci0JCQkJCXAgPSAoY2hhciAqKSBwc3QgKyBzaXplb2YgKHN0cnVjdCBwc3Rfcyk7Ci0JCQkJCWZvciAoaz0wOyBrPG51bWJlcl9zY2FsZXM7IGsrKykKLQkJCQkJCXArPTI7CisJCQkJCXAgPSAoY2hhciAqKXBzdCArIHNpemVvZihzdHJ1Y3QgcHN0X3MpOworCQkJCQlmb3IgKGsgPSAwOyBrIDwgbnVtYmVyX3NjYWxlczsgaysrKQorCQkJCQkJcCArPSAyOwogCQkJCX0KIAkJCX0KLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTm8gUFNUIHRhYmxlcyBtYXRjaCB0aGlzIGNwdWlkICgweCV4KVxuIiwgZXR1cGxlKTsKLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVGhpcyBpcyBpbmRpY2F0aXZlIG9mIGEgYnJva2VuIEJJT1MuXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBQU1QgdGFibGVzIG1hdGNoIHRoaXMgY3B1aWQgIgorCQkJCQkiKDB4JXgpXG4iLCBldHVwbGUpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRoaXMgaXMgaW5kaWNhdGl2ZSBvZiBhIGJyb2tlbiAiCisJCQkJCSJCSU9TLlxuIik7CiAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC01MTEsMTMgKzUzOCwxNCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgcG93ZXJub3dfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHBvd2Vybm93X3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHBvd2Vybm93X3RhYmxlLCB0YXJnZXRfZnJlcSwKKwkJCQlyZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljaGFuZ2Vfc3BlZWQobmV3c3RhdGUpOwpAQCAtNTI2LDcgKzU1NCw3IEBACiB9CiAKIAotc3RhdGljIGludCBwb3dlcm5vd192ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBwb3dlcm5vd192ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIHBvd2Vybm93X3RhYmxlKTsKIH0KQEAgLTU2NiwxOCArNTk0LDIzIEBACiAKIAlpZiAoY3B1KQogCQlyZXR1cm4gMDsKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CiAJY2ZpZCA9IGZpZHZpZHN0YXR1cy5iaXRzLkNGSUQ7CiAKLQlyZXR1cm4gKGZzYiAqIGZpZF9jb2Rlc1tjZmlkXSAvIDEwKTsKKwlyZXR1cm4gZnNiICogZmlkX2NvZGVzW2NmaWRdIC8gMTA7CiB9CiAKIAogc3RhdGljIGludCBfX2luaXQgYWNlcl9jcHVmcmVxX3BzdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBsYXB0b3Agd2l0aCBicm9rZW4gUFNUIHRhYmxlcyBpbiBCSU9TIGRldGVjdGVkLlxuIiwgZC0+aWRlbnQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIllvdSBuZWVkIHRvIGRvd25ncmFkZSB0byAzQTIxICgwOS8wOS8yMDAyKSwgb3IgdHJ5IGEgbmV3ZXIgQklPUyB0aGFuIDNBNzEgKDAxLzIwLzIwMDMpXG4iKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJjcHVmcmVxIHNjYWxpbmcgaGFzIGJlZW4gZGlzYWJsZWQgYXMgYSByZXN1bHQgb2YgdGhpcy5cbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSIlcyBsYXB0b3Agd2l0aCBicm9rZW4gUFNUIHRhYmxlcyBpbiBCSU9TIGRldGVjdGVkLlxuIiwKKwkJZC0+aWRlbnQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSJZb3UgbmVlZCB0byBkb3duZ3JhZGUgdG8gM0EyMSAoMDkvMDkvMjAwMiksIG9yIHRyeSBhIG5ld2VyICIKKwkJIkJJT1MgdGhhbiAzQTcxICgwMS8yMC8yMDAzKVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJImNwdWZyZXEgc2NhbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBhcyBhIHJlc3VsdCBvZiB0aGlzLlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5OCw3ICs2MzEsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJdW5pb24gbXNyX2ZpZHZpZHN0YXR1cyBmaWR2aWRzdGF0dXM7CiAJaW50IHJlc3VsdDsKQEAgLTYwNiw3ICs2MzksNyBAQAogCWlmIChwb2xpY3ktPmNwdSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAogCXJlY2FsaWJyYXRlX2NwdV9raHooKTsKIApAQCAtNjE4LDE5ICs2NTEsMjEgQEAKIAlkcHJpbnRrKCJGU0I6ICUzZE1IelxuIiwgZnNiLzEwMDApOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0ocG93ZXJub3dfZG1pX3RhYmxlKSB8fCBhY3BpX2ZvcmNlKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiUFNCL1BTVCBrbm93biB0byBiZSBicm9rZW4uICBUcnlpbmcgQUNQSSBpbnN0ZWFkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBTQi9QU1Qga25vd24gdG8gYmUgYnJva2VuLiAgIgorCQkJCSJUcnlpbmcgQUNQSSBpbnN0ZWFkXG4iKTsKIAkJcmVzdWx0ID0gcG93ZXJub3dfYWNwaV9pbml0KCk7CiAJfSBlbHNlIHsKLQkJcmVzdWx0ID0gcG93ZXJub3dfZGVjb2RlX2Jpb3MoZmlkdmlkc3RhdHVzLmJpdHMuTUZJRCwgZmlkdmlkc3RhdHVzLmJpdHMuU1ZJRCk7CisJCXJlc3VsdCA9IHBvd2Vybm93X2RlY29kZV9iaW9zKGZpZHZpZHN0YXR1cy5iaXRzLk1GSUQsCisJCQkJZmlkdmlkc3RhdHVzLmJpdHMuU1ZJRCk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIEFDUEkgcGVyZmxpYlxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIEFDUEkgcGVyZmxpYlxuIik7CiAJCQltYXhpbXVtX3NwZWVkID0gMDsKIAkJCW1pbmltdW1fc3BlZWQgPSAtMTsKIAkJCWxhdGVuY3kgPSAwOwogCQkJcmVzdWx0ID0gcG93ZXJub3dfYWNwaV9pbml0KCk7CiAJCQlpZiAocmVzdWx0KSB7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJBQ1BJIGFuZCBsZWdhY3kgbWV0aG9kcyBmYWlsZWRcbiIpOwotCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiU2VlIGh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvY3B1ZnJlcS9wb3dlcm5vdy1rNy5odG1sXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiQUNQSSBhbmQgbGVnYWN5IG1ldGhvZHMgZmFpbGVkXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIFNHVEMgdXNlIHRoZSBidXMgY2xvY2sgYXMgdGltZXIgKi8KQEAgLTY0MiwxMCArNjc3LDExIEBACiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTWluaW11bSBzcGVlZCAlZCBNSHouIE1heGltdW0gc3BlZWQgJWQgTUh6LlxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiTWluaW11bSBzcGVlZCAlZCBNSHouIE1heGltdW0gc3BlZWQgJWQgTUh6LlxuIiwKIAkJCQltaW5pbXVtX3NwZWVkLzEwMDAsIG1heGltdW1fc3BlZWQvMTAwMCk7CiAKLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gY3B1ZnJlcV9zY2FsZSgyMDAwMDAwVUwsIGZzYiwgbGF0ZW5jeSk7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CisJCWNwdWZyZXFfc2NhbGUoMjAwMDAwMFVMLCBmc2IsIGxhdGVuY3kpOwogCiAJcG9saWN5LT5jdXIgPSBwb3dlcm5vd19nZXQoMCk7CiAKQEAgLTY1NCw3ICs2OTAsOCBAQAogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgcG93ZXJub3dfdGFibGUpOwogfQogCi1zdGF0aWMgaW50IHBvd2Vybm93X2NwdV9leGl0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkgeworc3RhdGljIGludCBwb3dlcm5vd19jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cihwb2xpY3ktPmNwdSk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s3X0FDUEkKQEAgLTY2OSw3ICs3MDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcG93ZXJub3dfdGFibGVfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X3RhYmxlX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC02ODUsMTUgKzcyMiwxNSBAQAogCS5hdHRyCT0gcG93ZXJub3dfdGFibGVfYXR0ciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19pbml0KHZvaWQpCiB7Ci0JaWYgKGNoZWNrX3Bvd2Vybm93KCk9PTApCisJaWYgKGNoZWNrX3Bvd2Vybm93KCkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwb3dlcm5vd19kcml2ZXIpOwogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBwb3dlcm5vd19leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBvd2Vybm93X2V4aXQodm9pZCkKIHsKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZwb3dlcm5vd19kcml2ZXIpOwogfQpAQCAtNzAxLDkgKzczOCw5IEBACiBtb2R1bGVfcGFyYW0oYWNwaV9mb3JjZSwgIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZm9yY2UsICJGb3JjZSBBQ1BJIHRvIGJlIHVzZWQuIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiUG93ZXJub3cgZHJpdmVyIGZvciBBTUQgSzcgcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlcm5vdyBkcml2ZXIgZm9yIEFNRCBLNyBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKHBvd2Vybm93X2luaXQpOwogbW9kdWxlX2V4aXQocG93ZXJub3dfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDY0MjhhYTEuLmExNWFjOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0zMywxNiArMzMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIGN1cnJlbnQgLyBzZXRfY3B1c19hbGxvd2VkKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgotI2VuZGlmCiAKICNkZWZpbmUgUEZYICJwb3dlcm5vdy1rODogIgogI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDIuMjAuMDAiCkBAIC03MSw3ICs2OSw4IEBACiAJcmV0dXJuIDEwMDAgKiBmaW5kX2ZyZXFfZnJvbV9maWQoZmlkKTsKIH0KIAotc3RhdGljIHUzMiBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZGF0YSwgdTMyIHBzdGF0ZSkKK3N0YXRpYyB1MzIgZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmRhdGEsCisJCXUzMiBwc3RhdGUpCiB7CiAJcmV0dXJuIGRhdGFbcHN0YXRlXS5mcmVxdWVuY3k7CiB9CkBAIC0xODYsNyArMTg1LDkgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JbG8gPSBmaWQgfCAoZGF0YS0+Y3VycnZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpIHwgTVNSX0NfTE9fSU5JVF9GSURfVklEOworCWxvID0gZmlkOworCWxvIHw9IChkYXRhLT5jdXJydmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCk7CisJbG8gfD0gTVNSX0NfTE9fSU5JVF9GSURfVklEOwogCiAJZHByaW50aygid3JpdGluZyBmaWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKIAkJZmlkLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwpAQCAtMTk0LDcgKzE5NSw5IEBACiAJZG8gewogCQl3cm1zcihNU1JfRklEVklEX0NUTCwgbG8sIGRhdGEtPnBsbGxvY2sgKiBQTExfTE9DS19DT05WRVJTSU9OKTsKIAkJaWYgKGkrKyA+IDEwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSGFyZHdhcmUgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkhhcmR3YXJlIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtICIKKwkJCQkibm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gd2hpbGUgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKTsKQEAgLTIwMiwxNCArMjA1LDE2IEBACiAJY291bnRfb2ZmX2lydChkYXRhKTsKIAogCWlmIChzYXZldmlkICE9IGRhdGEtPmN1cnJ2aWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidmlkIGNoYW5nZSBvbiBmaWQgdHJhbnMsIG9sZCAweCV4LCBuZXcgMHgleFxuIiwKLQkJICAgICAgIHNhdmV2aWQsIGRhdGEtPmN1cnJ2aWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkidmlkIGNoYW5nZSBvbiBmaWQgdHJhbnMsIG9sZCAweCV4LCBuZXcgMHgleFxuIiwKKwkJCXNhdmV2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmlkIHRyYW5zIGZhaWxlZCwgZmlkIDB4JXgsIGN1cnIgMHgleFxuIiwgZmlkLAotCQkgICAgICAgIGRhdGEtPmN1cnJmaWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiZmlkIHRyYW5zIGZhaWxlZCwgZmlkIDB4JXgsIGN1cnIgMHgleFxuIiwgZmlkLAorCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjI4LDcgKzIzMyw5IEBACiAJCXJldHVybiAxOwogCX0KIAotCWxvID0gZGF0YS0+Y3VycmZpZCB8ICh2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKSB8IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKKwlsbyA9IGRhdGEtPmN1cnJmaWQ7CisJbG8gfD0gKHZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpOworCWxvIHw9IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKIAogCWRwcmludGsoIndyaXRpbmcgdmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCiAJCXZpZCwgbG8sIFNUT1BfR1JBTlRfNU5TKTsKQEAgLTIzNiwyMCArMjQzLDI0IEBACiAJZG8gewogCQl3cm1zcihNU1JfRklEVklEX0NUTCwgbG8sIFNUT1BfR1JBTlRfNU5TKTsKIAkJaWYgKGkrKyA+IDEwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW50ZXJuYWwgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnRlcm5hbCBlcnJvciAtIHBlbmRpbmcgYml0ICIKKwkJCQkJInZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSAiCisJCQkJCSJjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpOwogCiAJaWYgKHNhdmVmaWQgIT0gZGF0YS0+Y3VycmZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmaWQgY2hhbmdlZCBvbiB2aWQgdHJhbnMsIG9sZCAweCV4IG5ldyAweCV4XG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJmaWQgY2hhbmdlZCBvbiB2aWQgdHJhbnMsIG9sZCAiCisJCQkiMHgleCBuZXcgMHgleFxuIiwKIAkJICAgICAgIHNhdmVmaWQsIGRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAodmlkICE9IGRhdGEtPmN1cnJ2aWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidmlkIHRyYW5zIGZhaWxlZCwgdmlkIDB4JXgsIGN1cnIgMHgleFxuIiwgdmlkLAotCQkJCWRhdGEtPmN1cnJ2aWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2aWQgdHJhbnMgZmFpbGVkLCB2aWQgMHgleCwgIgorCQkJCSJjdXJyIDB4JXhcbiIsCisJCQkJdmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yNjEsNyArMjcyLDggQEAKICAqIERlY3JlYXNpbmcgdmlkIGNvZGVzIHJlcHJlc2VudCBpbmNyZWFzaW5nIHZvbHRhZ2VzOgogICogdmlkIG9mIDAgaXMgMS41NTBWLCB2aWQgb2YgMHgxZSBpcyAwLjgwMFYsIHZpZCBvZiBWSURfT0ZGIGlzIG9mZi4KICAqLwotc3RhdGljIGludCBkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxdmlkLCB1MzIgc3RlcCkKK3N0YXRpYyBpbnQgZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcXZpZCwgdTMyIHN0ZXApCiB7CiAJaWYgKChkYXRhLT5jdXJydmlkIC0gcmVxdmlkKSA+IHN0ZXApCiAJCXJlcXZpZCA9IGRhdGEtPmN1cnJ2aWQgLSBzdGVwOwpAQCAtMjgzLDcgKzI5NSw4IEBACiB9CiAKIC8qIENoYW5nZSBPcHRlcm9uL0F0aGxvbjY0IGZpZCBhbmQgdmlkLCBieSB0aGUgMyBwaGFzZXMuICovCi1zdGF0aWMgaW50IHRyYW5zaXRpb25fZmlkX3ZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcWZpZCwgdTMyIHJlcXZpZCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9maWRfdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1MzIgcmVxZmlkLCB1MzIgcmVxdmlkKQogewogCWlmIChjb3JlX3ZvbHRhZ2VfcHJlX3RyYW5zaXRpb24oZGF0YSwgcmVxdmlkKSkKIAkJcmV0dXJuIDE7CkBAIC0yOTgsNyArMzExLDggQEAKIAkJcmV0dXJuIDE7CiAKIAlpZiAoKHJlcWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB8fCAocmVxdmlkICE9IGRhdGEtPmN1cnJ2aWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCAoY3B1JWQpOiByZXEgMHgleCAweCV4LCBjdXJyIDB4JXggMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIChjcHUlZCk6IHJlcSAweCV4IDB4JXgsICIKKwkJCQkiY3VyciAweCV4IDB4JXhcbiIsCiAJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkJCXJlcWZpZCwgcmVxdmlkLCBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJcmV0dXJuIDE7CkBAIC0zMTEsMTMgKzMyNSwxNSBAQAogfQogCiAvKiBQaGFzZSAxIC0gY29yZSB2b2x0YWdlIHRyYW5zaXRpb24gLi4uIHNldHVwIHZvbHRhZ2UgKi8KLXN0YXRpYyBpbnQgY29yZV92b2x0YWdlX3ByZV90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxdmlkKQorc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcHJlX3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXF2aWQpCiB7CiAJdTMyIHJ2b3N0ZXBzID0gZGF0YS0+cnZvOwogCXUzMiBzYXZlZmlkID0gZGF0YS0+Y3VycmZpZDsKIAl1MzIgbWF4dmlkLCBsbzsKIAotCWRwcmludGsoInBoMSAoY3B1JWQpOiBzdGFydCwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsIHJlcXZpZCAweCV4LCBydm8gMHgleFxuIiwKKwlkcHJpbnRrKCJwaDEgKGNwdSVkKTogc3RhcnQsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCisJCSJyZXF2aWQgMHgleCwgcnZvIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCwgcmVxdmlkLCBkYXRhLT5ydm8pOwogCkBAIC0zNDAsNyArMzU2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoInBoMTogY2hhbmdpbmcgdmlkIGZvciBydm8sIHJlcSAweCV4XG4iLAogCQkJCWRhdGEtPmN1cnJ2aWQgLSAxKTsKLQkJCWlmIChkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKGRhdGEsIGRhdGEtPmN1cnJ2aWQgLSAxLCAxKSkKKwkJCWlmIChkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKGRhdGEsIGRhdGEtPmN1cnJ2aWQtMSwgMSkpCiAJCQkJcmV0dXJuIDE7CiAJCQlydm9zdGVwcy0tOwogCQl9CkBAIC0zNTAsNyArMzY2LDggQEAKIAkJcmV0dXJuIDE7CiAKIAlpZiAoc2F2ZWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInBoMSBlcnIsIGN1cnJmaWQgY2hhbmdlZCAweCV4XG4iLCBkYXRhLT5jdXJyZmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgxIGVyciwgY3VycmZpZCBjaGFuZ2VkIDB4JXhcbiIsCisJCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMzYzLDIwICszODAsMjQgQEAKIC8qIFBoYXNlIDIgLSBjb3JlIGZyZXF1ZW5jeSB0cmFuc2l0aW9uICovCiBzdGF0aWMgaW50IGNvcmVfZnJlcXVlbmN5X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXFmaWQpCiB7Ci0JdTMyIHZjb3JlcWZpZCwgdmNvY3VycmZpZCwgdmNvZmlkZGlmZiwgZmlkX2ludGVydmFsLCBzYXZldmlkID0gZGF0YS0+Y3VycnZpZDsKKwl1MzIgdmNvcmVxZmlkLCB2Y29jdXJyZmlkLCB2Y29maWRkaWZmOworCXUzMiBmaWRfaW50ZXJ2YWwsIHNhdmV2aWQgPSBkYXRhLT5jdXJydmlkOwogCi0JaWYgKChyZXFmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSAmJiAoZGF0YS0+Y3VycmZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInBoMjogaWxsZWdhbCBsby1sbyB0cmFuc2l0aW9uIDB4JXggMHgleFxuIiwKLQkJCXJlcWZpZCwgZGF0YS0+Y3VycmZpZCk7CisJaWYgKChyZXFmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSAmJgorCSAgICAoZGF0YS0+Y3VycmZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBoMjogaWxsZWdhbCBsby1sbyB0cmFuc2l0aW9uICIKKwkJCQkiMHgleCAweCV4XG4iLCByZXFmaWQsIGRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoZGF0YS0+Y3VycmZpZCA9PSByZXFmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyIG51bGwgZmlkIHRyYW5zaXRpb24gMHgleFxuIiwgZGF0YS0+Y3VycmZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBoMiBudWxsIGZpZCB0cmFuc2l0aW9uIDB4JXhcbiIsCisJCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAwOwogCX0KIAotCWRwcmludGsoInBoMiAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsIHJlcWZpZCAweCV4XG4iLAorCWRwcmludGsoInBoMiAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsICIKKwkJInJlcWZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQsIHJlcWZpZCk7CiAKQEAgLTM5MCwxNCArNDExLDE0IEBACiAKIAkJaWYgKHJlcWZpZCA+IGRhdGEtPmN1cnJmaWQpIHsKIAkJCWlmIChkYXRhLT5jdXJyZmlkID4gTE9fRklEX1RBQkxFX1RPUCkgewotCQkJCWlmICh3cml0ZV9uZXdfZmlkKGRhdGEsIGRhdGEtPmN1cnJmaWQgKyBmaWRfaW50ZXJ2YWwpKSB7CisJCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwKKwkJCQkJCWRhdGEtPmN1cnJmaWQgKyBmaWRfaW50ZXJ2YWwpKQogCQkJCQlyZXR1cm4gMTsKLQkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWlmICh3cml0ZV9uZXdfZmlkCi0JCQkJICAgIChkYXRhLCAyICsgY29udmVydF9maWRfdG9fdmNvX2ZpZChkYXRhLT5jdXJyZmlkKSkpIHsKKwkJCQkgICAgKGRhdGEsCisJCQkJICAgICAyICsgY29udmVydF9maWRfdG9fdmNvX2ZpZChkYXRhLT5jdXJyZmlkKSkpCiAJCQkJCXJldHVybiAxOwotCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICh3cml0ZV9uZXdfZmlkKGRhdGEsIGRhdGEtPmN1cnJmaWQgLSBmaWRfaW50ZXJ2YWwpKQpAQCAtNDE3LDcgKzQzOCw4IEBACiAKIAlpZiAoZGF0YS0+Y3VycmZpZCAhPSByZXFmaWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJInBoMjogbWlzbWF0Y2gsIGZhaWxlZCBmaWQgdHJhbnNpdGlvbiwgY3VyciAweCV4LCByZXEgMHgleFxuIiwKKwkJCSJwaDI6IG1pc21hdGNoLCBmYWlsZWQgZmlkIHRyYW5zaXRpb24sICIKKwkJCSJjdXJyIDB4JXgsIHJlcSAweCV4XG4iLAogCQkJZGF0YS0+Y3VycmZpZCwgcmVxZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDM1LDcgKzQ1Nyw4IEBACiB9CiAKIC8qIFBoYXNlIDMgLSBjb3JlIHZvbHRhZ2UgdHJhbnNpdGlvbiBmbG93IC4uLiBqdW1wIHRvIHRoZSBmaW5hbCB2aWQuICovCi1zdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wb3N0X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXF2aWQpCitzdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wb3N0X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXF2aWQpCiB7CiAJdTMyIHNhdmVmaWQgPSBkYXRhLT5jdXJyZmlkOwogCXUzMiBzYXZlcmVxdmlkID0gcmVxdmlkOwpAQCAtNDU3LDcgKzQ4MCw4IEBACiAKIAkJaWYgKGRhdGEtPmN1cnJ2aWQgIT0gcmVxdmlkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgInBoMzogZmFpbGVkIHZpZCB0cmFuc2l0aW9uXG4sIHJlcSAweCV4LCBjdXJyIDB4JXgiLAorCQkJICAgICAgICJwaDM6IGZhaWxlZCB2aWQgdHJhbnNpdGlvblxuLCAiCisJCQkgICAgICAgInJlcSAweCV4LCBjdXJyIDB4JXgiLAogCQkJICAgICAgIHJlcXZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNTA4LDcgKzUzMiw4IEBACiAJaWYgKChlYXggJiBDUFVJRF9YRkFNKSA9PSBDUFVJRF9YRkFNX0s4KSB7CiAJCWlmICgoKGVheCAmIENQVUlEX1VTRV9YRkFNX1hNT0QpICE9IENQVUlEX1VTRV9YRkFNX1hNT0QpIHx8CiAJCSAgICAoKGVheCAmIENQVUlEX1hNT0QpID4gQ1BVSURfWE1PRF9SRVZfTUFTSykpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJIlByb2Nlc3NvciBjcHVpZCAleCBub3Qgc3VwcG9ydGVkXG4iLCBlYXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtNTIwLDggKzU0NSwxMCBAQAogCQl9CiAKIAkJY3B1aWQoQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JCWlmICgoZWR4ICYgUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpICE9IFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXIgc3RhdGUgdHJhbnNpdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7CisJCWlmICgoZWR4ICYgUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpCisJCQkhPSBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkiUG93ZXIgc3RhdGUgdHJhbnNpdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7IC8qIG11c3QgYmUgYSBIVyBQc3RhdGUgY2FwYWJsZSBwcm9jZXNzb3IgKi8KQEAgLTUzOSw3ICs1NjYsOCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBjaGVja19wc3RfdGFibGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBwc3RfcyAqcHN0LCB1OCBtYXh2aWQpCitzdGF0aWMgaW50IGNoZWNrX3BzdF90YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IHBzdF9zICpwc3QsCisJCXU4IG1heHZpZCkKIHsKIAl1bnNpZ25lZCBpbnQgajsKIAl1OCBsYXN0ZmlkID0gMHhmZjsKQEAgLTU1MCwxMiArNTc4LDE0IEBACiAJCQkgICAgICAgaiwgcHN0W2pdLnZpZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAocHN0W2pdLnZpZCA8IGRhdGEtPnJ2bykgewkvKiB2aWQgKyBydm8gPj0gMCAqLworCQlpZiAocHN0W2pdLnZpZCA8IGRhdGEtPnJ2bykgeworCQkJLyogdmlkICsgcnZvID49IDAgKi8KIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICIwIHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSIKIAkJCSAgICAgICAiICVkXG4iLCBqKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmIChwc3Rbal0udmlkIDwgbWF4dmlkICsgZGF0YS0+cnZvKSB7CS8qIHZpZCArIHJ2byA+PSBtYXh2aWQgKi8KKwkJaWYgKHBzdFtqXS52aWQgPCBtYXh2aWQgKyBkYXRhLT5ydm8pIHsKKwkJCS8qIHZpZCArIHJ2byA+PSBtYXh2aWQgKi8KIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJtYXh2aWQgZXhjZWVkZWQgd2l0aCBwc3RhdGUiCiAJCQkgICAgICAgIiAlZFxuIiwgaik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU3OSwyMyArNjA5LDMxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobGFzdGZpZCA+IExPX0ZJRF9UQUJMRV9UT1ApCi0JCXByaW50ayhLRVJOX0lORk8gRldfQlVHIFBGWCAgImZpcnN0IGZpZCBub3QgZnJvbSBsbyBmcmVxIHRhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBGV19CVUcgUEZYCisJCQkiZmlyc3QgZmlkIG5vdCBmcm9tIGxvIGZyZXEgdGFibGVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfZW50cnkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBlbnRyeSkKK3sKKwlkYXRhLT5wb3dlcm5vd190YWJsZVtlbnRyeV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9iYXNpY3Moc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJaW50IGo7CiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXBzOyBqKyspIHsKLQkJaWYgKGRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpIHsKKwkJaWYgKGRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSAhPQorCQkJCUNQVUZSRVFfRU5UUllfSU5WQUxJRCkgewogCQkJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IHBzdGF0ZSAlZCAoJWQgTUh6KVxuIiwKLQkJCQkJaiwKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiICAgJWQgOiBwc3RhdGUgJWQgKCVkIE1IeilcbiIsIGosCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4LAogCQkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kvMTAwMCk7CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IGZpZCAweCV4ICglZCBNSHopLCB2aWQgMHgleFxuIiwKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiICAgJWQgOiBmaWQgMHgleCAoJWQgTUh6KSwgdmlkIDB4JXhcbiIsCiAJCQkJCWosCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4ICYgMHhmZiwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5LzEwMDAsCkBAIC02MDQsMjAgKzY0MiwyNSBAQAogCQl9CiAJfQogCWlmIChkYXRhLT5iYXRwcykKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9ubHkgJWQgcHN0YXRlcyBvbiBiYXR0ZXJ5XG4iLCBkYXRhLT5iYXRwcyk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJPbmx5ICVkIHBzdGF0ZXMgb24gYmF0dGVyeVxuIiwKKwkJCQlkYXRhLT5iYXRwcyk7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IHBzdF9zICpwc3QsIHU4IG1heHZpZCkKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJc3RydWN0IHBzdF9zICpwc3QsIHU4IG1heHZpZCkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlOwogCXVuc2lnbmVkIGludCBqOwogCi0JaWYgKGRhdGEtPmJhdHBzKSB7ICAgIC8qIHVzZSBBQ1BJIHN1cHBvcnQgdG8gZ2V0IGZ1bGwgc3BlZWQgb24gbWFpbnMgcG93ZXIgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIk9ubHkgJWQgcHN0YXRlcyB1c2FibGUgKHVzZSBBQ1BJIGRyaXZlciBmb3IgZnVsbCByYW5nZVxuIiwgZGF0YS0+YmF0cHMpOworCWlmIChkYXRhLT5iYXRwcykgeworCQkvKiB1c2UgQUNQSSBzdXBwb3J0IHRvIGdldCBmdWxsIHNwZWVkIG9uIG1haW5zIHBvd2VyICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkiT25seSAlZCBwc3RhdGVzIHVzYWJsZSAodXNlIEFDUEkgZHJpdmVyIGZvciBmdWxsICIKKwkJCSJyYW5nZVxuIiwgZGF0YS0+YmF0cHMpOwogCQlkYXRhLT5udW1wcyA9IGRhdGEtPmJhdHBzOwogCX0KIAotCWZvciAoIGo9MTsgajxkYXRhLT5udW1wczsgaisrICkgeworCWZvciAoaiA9IDE7IGogPCBkYXRhLT5udW1wczsgaisrKSB7CiAJCWlmIChwc3Rbai0xXS5maWQgPj0gcHN0W2pdLmZpZCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUFNUIG91dCBvZiBzZXF1ZW5jZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MCw5ICs2ODMsMTEgQEAKIAl9CiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykgeworCQlpbnQgZnJlcTsKIAkJcG93ZXJub3dfdGFibGVbal0uaW5kZXggPSBwc3Rbal0uZmlkOyAvKiBsb3dlciA4IGJpdHMgKi8KIAkJcG93ZXJub3dfdGFibGVbal0uaW5kZXggfD0gKHBzdFtqXS52aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwotCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKHBzdFtqXS5maWQpOworCQlmcmVxID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChwc3Rbal0uZmlkKTsKKwkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gZnJlcTsKIAl9CiAJcG93ZXJub3dfdGFibGVbZGF0YS0+bnVtcHNdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOwogCXBvd2Vybm93X3RhYmxlW2RhdGEtPm51bXBzXS5pbmRleCA9IDA7CkBAIC02NTgsNyArNzAzLDggQEAKIAkJcHJpbnRfYmFzaWNzKGRhdGEpOwogCiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXBzOyBqKyspCi0JCWlmICgocHN0W2pdLmZpZD09ZGF0YS0+Y3VycmZpZCkgJiYgKHBzdFtqXS52aWQ9PWRhdGEtPmN1cnJ2aWQpKQorCQlpZiAoKHBzdFtqXS5maWQgPT0gZGF0YS0+Y3VycmZpZCkgJiYKKwkJICAgIChwc3Rbal0udmlkID09IGRhdGEtPmN1cnJ2aWQpKQogCQkJcmV0dXJuIDA7CiAKIAlkcHJpbnRrKCJjdXJyZmlkL3ZpZCBkbyBub3QgbWF0Y2ggUFNULCBpZ25vcmluZ1xuIik7CkBAIC02OTgsNyArNzQ0LDggQEAKIAkJfQogCiAJCWRhdGEtPnZzdGFibGUgPSBwc2ItPnZzdGFibGU7Ci0JCWRwcmludGsoInZvbHRhZ2Ugc3RhYmlsaXphdGlvbiB0aW1lOiAlZCgqMjB1cylcbiIsIGRhdGEtPnZzdGFibGUpOworCQlkcHJpbnRrKCJ2b2x0YWdlIHN0YWJpbGl6YXRpb24gdGltZTogJWQoKjIwdXMpXG4iLAorCQkJCWRhdGEtPnZzdGFibGUpOwogCiAJCWRwcmludGsoImZsYWdzMjogMHgleFxuIiwgcHNiLT5mbGFnczIpOwogCQlkYXRhLT5ydm8gPSBwc2ItPmZsYWdzMiAmIDM7CkBAIC03MTMsMTEgKzc2MCwxMiBAQAogCiAJCWRwcmludGsoIm51bXBzdDogMHgleFxuIiwgcHNiLT5udW1fdGFibGVzKTsKIAkJY3BzdCA9IHBzYi0+bnVtX3RhYmxlczsKLQkJaWYgKChwc2ItPmNwdWlkID09IDB4MDAwMDBmYzApIHx8IChwc2ItPmNwdWlkID09IDB4MDAwMDBmZTApICl7CisJCWlmICgocHNiLT5jcHVpZCA9PSAweDAwMDAwZmMwKSB8fAorCQkgICAgKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZlMCkpIHsKIAkJCXRoaXNjcHVpZCA9IGNwdWlkX2VheChDUFVJRF9QUk9DRVNTT1JfU0lHTkFUVVJFKTsKLQkJCWlmICgodGhpc2NwdWlkID09IDB4MDAwMDBmYzApIHx8ICh0aGlzY3B1aWQgPT0gMHgwMDAwMGZlMCkgKSB7CisJCQlpZiAoKHRoaXNjcHVpZCA9PSAweDAwMDAwZmMwKSB8fAorCQkJICAgICh0aGlzY3B1aWQgPT0gMHgwMDAwMGZlMCkpCiAJCQkJY3BzdCA9IDE7Ci0JCQl9CiAJCX0KIAkJaWYgKGNwc3QgIT0gMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIm51bXBzdCBtdXN0IGJlIDFcbiIpOwpAQCAtNzMyLDcgKzc4MCw4IEBACiAKIAkJZGF0YS0+bnVtcHMgPSBwc2ItPm51bXBzOwogCQlkcHJpbnRrKCJudW1wc3RhdGVzOiAweCV4XG4iLCBkYXRhLT5udW1wcyk7Ci0JCXJldHVybiBmaWxsX3Bvd2Vybm93X3RhYmxlKGRhdGEsIChzdHJ1Y3QgcHN0X3MgKikocHNiKzEpLCBtYXh2aWQpOworCQlyZXR1cm4gZmlsbF9wb3dlcm5vd190YWJsZShkYXRhLAorCQkJCShzdHJ1Y3QgcHN0X3MgKikocHNiKzEpLCBtYXh2aWQpOwogCX0KIAkvKgogCSAqIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCBjb21wbGFpbiB0byBCSU9TIG1hbnVmYWN0dXJlci4gSWYKQEAgLTc0NSwyOCArNzk0LDMxIEBACiAJICogQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlLCB3aGljaCBpcyBhdmFpbGFibGUgb24KIAkgKiB3d3cuYW1kLmNvbQogCSAqLwotCXByaW50ayhLRVJOX0VSUiBQRlggIkJJT1MgZXJyb3IgLSBubyBQU0Igb3IgQUNQSSBfUFNTIG9iamVjdHNcbiIpOworCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJObyBQU0Igb3IgQUNQSSBfUFNTIG9iamVjdHNcbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCi1zdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGluZGV4KQogeworCWFjcGlfaW50ZWdlciBjb250cm9sOworCiAJaWYgKCFkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgfHwgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkpCiAJCXJldHVybjsKIAotCWRhdGEtPmlydCA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IElSVF9TSElGVCkgJiBJUlRfTUFTSzsKLQlkYXRhLT5ydm8gPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBSVk9fU0hJRlQpICYgUlZPX01BU0s7Ci0JZGF0YS0+ZXh0dHlwZSA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IEVYVF9UWVBFX1NISUZUKSAmIEVYVF9UWVBFX01BU0s7Ci0JZGF0YS0+cGxsbG9jayA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IFBMTF9MX1NISUZUKSAmIFBMTF9MX01BU0s7Ci0JZGF0YS0+dmlkbXZzID0gMSA8PCAoKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gTVZTX1NISUZUKSAmIE1WU19NQVNLKTsKLQlkYXRhLT52c3RhYmxlID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gVlNUX1NISUZUKSAmIFZTVF9NQVNLOwotfQorCWNvbnRyb2wgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sOyBkYXRhLT5pcnQgPSAoY29udHJvbAorCQkJPj4gSVJUX1NISUZUKSAmIElSVF9NQVNLOyBkYXRhLT5ydm8gPSAoY29udHJvbCA+PgorCQkJCVJWT19TSElGVCkgJiBSVk9fTUFTSzsgZGF0YS0+ZXh0dHlwZSA9IChjb250cm9sCisJCQkJCT4+IEVYVF9UWVBFX1NISUZUKSAmIEVYVF9UWVBFX01BU0s7CisJZGF0YS0+cGxsbG9jayA9IChjb250cm9sID4+IFBMTF9MX1NISUZUKSAmIFBMTF9MX01BU0s7IGRhdGEtPnZpZG12cyA9IDEKKwkJPDwgKChjb250cm9sID4+IE1WU19TSElGVCkgJiBNVlNfTUFTSyk7IGRhdGEtPnZzdGFibGUgPQorCQkoY29udHJvbCA+PiBWU1RfU0hJRlQpICYgVlNUX01BU0s7IH0KIAogc3RhdGljIGludCBwb3dlcm5vd19rOF9jcHVfaW5pdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGU7CiAJaW50IHJldF92YWwgPSAtRU5PREVWOworCWFjcGlfaW50ZWdlciBzcGFjZV9pZDsKIAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpKSB7CiAJCWRwcmludGsoInJlZ2lzdGVyIHBlcmZvcm1hbmNlIGZhaWxlZDogYmFkIEFDUEkgZGF0YVxuIik7CkBAIC03NzksMTEgKzgzMSwxMiBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKChkYXRhLT5hY3BpX2RhdGEuY29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgfHwKLQkJKGRhdGEtPmFjcGlfZGF0YS5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpKSB7CisJc3BhY2VfaWQgPSBkYXRhLT5hY3BpX2RhdGEuY29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZDsKKwlpZiAoKHNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB8fAorCQkoc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpKSB7CiAJCWRwcmludGsoIkludmFsaWQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzICgleCAtICV4KVxuIiwKIAkJCWRhdGEtPmFjcGlfZGF0YS5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkLAotCQkJZGF0YS0+YWNwaV9kYXRhLnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCk7CisJCQlzcGFjZV9pZCk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTgwMiw3ICs4NTUsOCBAQAogCWlmIChyZXRfdmFsKQogCQlnb3RvIGVycl9vdXRfbWVtOwogCi0JcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKwlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmZyZXF1ZW5jeSA9CisJCUNQVUZSRVFfVEFCTEVfRU5EOwogCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uaW5kZXggPSAwOwogCWRhdGEtPnBvd2Vybm93X3RhYmxlID0gcG93ZXJub3dfdGFibGU7CiAKQEAgLTgzMCwxMyArODg0LDE1IEBACiBlcnJfb3V0OgogCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KTsKIAotCS8qIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCBpbmZvcm1zIHVzIGF0IC0+ZXhpdCgpIHdoZXRoZXIgQUNQSSB3YXMgdXNlZCAqLworCS8qIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCBpbmZvcm1zIHVzIGF0IC0+ZXhpdCgpCisJICogd2hldGhlciBBQ1BJIHdhcyB1c2VkICovCiAJZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50ID0gMDsKIAogCXJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQorc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKIHsKIAlpbnQgaTsKIAl1MzIgaGkgPSAwLCBsbyA9IDA7CkBAIC04NDgsODQgKzkwNCwxMDEgQEAKIAogCQlpbmRleCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbCAmIEhXX1BTVEFURV9NQVNLOwogCQlpZiAoaW5kZXggPiBkYXRhLT5tYXhfaHdfcHN0YXRlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIHBzdGF0ZSAlZCAtIGJhZCB2YWx1ZSAlZC5cbiIsIGksIGluZGV4KTsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlBsZWFzZSByZXBvcnQgdG8gQklPUyBtYW51ZmFjdHVyZXJcbiIpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBwc3RhdGUgJWQgLSAiCisJCQkJCSJiYWQgdmFsdWUgJWQuXG4iLCBpLCBpbmRleCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJQbGVhc2UgcmVwb3J0IHRvIEJJT1MgIgorCQkJCQkibWFudWZhY3R1cmVyXG4iKTsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlyZG1zcihNU1JfUFNUQVRFX0RFRl9CQVNFICsgaW5kZXgsIGxvLCBoaSk7CiAJCWlmICghKGhpICYgSFdfUFNUQVRFX1ZBTElEX01BU0spKSB7CiAJCQlkcHJpbnRrKCJpbnZhbGlkIHBzdGF0ZSAlZCwgaWdub3JpbmdcbiIsIGluZGV4KTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4ID0gaW5kZXg7CiAKLQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CisJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9CisJCQlkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQogewogCWludCBpOwogCWludCBjbnRsb2ZyZXEgPSAwOworCiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudDsgaSsrKSB7CiAJCXUzMiBmaWQ7CiAJCXUzMiB2aWQ7CisJCXUzMiBmcmVxLCBpbmRleDsKKwkJYWNwaV9pbnRlZ2VyIHN0YXR1cywgY29udHJvbDsKIAogCQlpZiAoZGF0YS0+ZXh0dHlwZSkgewotCQkJZmlkID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5zdGF0dXMgJiBFWFRfRklEX01BU0s7Ci0JCQl2aWQgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5zdGF0dXMgPj4gVklEX1NISUZUKSAmIEVYVF9WSURfTUFTSzsKKwkJCXN0YXR1cyA9ICBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnN0YXR1czsKKwkJCWZpZCA9IHN0YXR1cyAmIEVYVF9GSURfTUFTSzsKKwkJCXZpZCA9IChzdGF0dXMgPj4gVklEX1NISUZUKSAmIEVYVF9WSURfTUFTSzsKIAkJfSBlbHNlIHsKLQkJCWZpZCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbCAmIEZJRF9NQVNLOwotCQkJdmlkID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbCA+PiBWSURfU0hJRlQpICYgVklEX01BU0s7CisJCQljb250cm9sID0gIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29udHJvbDsKKwkJCWZpZCA9IGNvbnRyb2wgJiBGSURfTUFTSzsKKwkJCXZpZCA9IChjb250cm9sID4+IFZJRF9TSElGVCkgJiBWSURfTUFTSzsKIAkJfQogCiAJCWRwcmludGsoIiAgICVkIDogZmlkIDB4JXgsIHZpZCAweCV4XG4iLCBpLCBmaWQsIHZpZCk7CiAKLQkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggPSBmaWQ7IC8qIGxvd2VyIDggYml0cyAqLwotCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCB8PSAodmlkIDw8IDgpOyAvKiB1cHBlciA4IGJpdHMgKi8KLQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChmaWQpOworCQlpbmRleCA9IGZpZCB8ICh2aWQ8PDgpOworCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGluZGV4OworCisJCWZyZXEgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7CisJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IGZyZXE7CiAKIAkJLyogdmVyaWZ5IGZyZXF1ZW5jeSBpcyBPSyAqLwotCQlpZiAoKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA+IChNQVhfRlJFUSAqIDEwMDApKSB8fAotCQkJKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA8IChNSU5fRlJFUSAqIDEwMDApKSkgewotCQkJZHByaW50aygiaW52YWxpZCBmcmVxICV1IGtIeiwgaWdub3JpbmdcbiIsIHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSk7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCWlmICgoZnJlcSA+IChNQVhfRlJFUSAqIDEwMDApKSB8fCAoZnJlcSA8IChNSU5fRlJFUSAqIDEwMDApKSkgeworCQkJZHByaW50aygiaW52YWxpZCBmcmVxICV1IGtIeiwgaWdub3JpbmdcbiIsIGZyZXEpOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyogdmVyaWZ5IHZvbHRhZ2UgaXMgT0sgLSBCSU9TcyBhcmUgdXNpbmcgIm9mZiIgdG8gaW5kaWNhdGUgaW52YWxpZCAqLworCQkvKiB2ZXJpZnkgdm9sdGFnZSBpcyBPSyAtCisJCSAqIEJJT1NzIGFyZSB1c2luZyAib2ZmIiB0byBpbmRpY2F0ZSBpbnZhbGlkICovCiAJCWlmICh2aWQgPT0gVklEX09GRikgewogCQkJZHByaW50aygiaW52YWxpZCB2aWQgJXUsIGlnbm9yaW5nXG4iLCB2aWQpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogdmVyaWZ5IG9ubHkgMSBlbnRyeSBmcm9tIHRoZSBsbyBmcmVxdWVuY3kgdGFibGUgKi8KIAkJaWYgKGZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pIHsKIAkJCWlmIChjbnRsb2ZyZXEpIHsKLQkJCQkvKiBpZiBib3RoIGVudHJpZXMgYXJlIHRoZSBzYW1lLCBpZ25vcmUgdGhpcyBvbmUgLi4uICovCi0JCQkJaWYgKChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5mcmVxdWVuY3kpIHx8Ci0JCQkJICAgIChwb3dlcm5vd190YWJsZVtpXS5pbmRleCAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmluZGV4KSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJUb28gbWFueSBsbyBmcmVxIHRhYmxlIGVudHJpZXNcbiIpOworCQkJCS8qIGlmIGJvdGggZW50cmllcyBhcmUgdGhlIHNhbWUsCisJCQkJICogaWdub3JlIHRoaXMgb25lIC4uLiAqLworCQkJCWlmICgoZnJlcSAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmZyZXF1ZW5jeSkgfHwKKwkJCQkgICAgKGluZGV4ICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uaW5kZXgpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkJCSJUb28gbWFueSBsbyBmcmVxIHRhYmxlICIKKwkJCQkJCSJlbnRyaWVzXG4iKTsKIAkJCQkJcmV0dXJuIDE7CiAJCQkJfQogCi0JCQkJZHByaW50aygiZG91YmxlIGxvdyBmcmVxdWVuY3kgdGFibGUgZW50cnksIGlnbm9yaW5nIGl0LlxuIik7Ci0JCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJCWRwcmludGsoImRvdWJsZSBsb3cgZnJlcXVlbmN5IHRhYmxlIGVudHJ5LCAiCisJCQkJCQkiaWdub3JpbmcgaXQuXG4iKTsKKwkJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlCiAJCQkJY250bG9mcmVxID0gaTsKIAkJfQogCi0JCWlmIChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgIT0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgZnJlcSBlbnRyaWVzICV1IGtIeiB2cy4gJXUga0h6XG4iLAotCQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSwKLQkJCQkodW5zaWduZWQgaW50KSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJaWYgKGZyZXEgIT0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgZnJlcSBlbnRyaWVzICIKKwkJCQkiJXUga0h6IHZzLiAldSBrSHpcbiIsIGZyZXEsCisJCQkJKHVuc2lnbmVkIGludCkKKwkJCQkoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeQorCQkJCSAqIDEwMDApKTsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTkzNSw3ICsxMDA4LDggQEAKIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2NwdV9leGl0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJaWYgKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCkKLQkJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpOworCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsCisJCQkJZGF0YS0+Y3B1KTsKIAlmcmVlX2NwdW1hc2tfdmFyKGRhdGEtPmFjcGlfZGF0YS5zaGFyZWRfY3B1X21hcCk7CiB9CiAKQEAgLTk1MywxNSArMTAyNyw5IEBACiAJcmV0dXJuIDEwMDAgKiBtYXhfbGF0ZW5jeTsKIH0KIAotI2Vsc2UKLXN0YXRpYyBpbnQgcG93ZXJub3dfazhfY3B1X2luaXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkgeyByZXR1cm4gLUVOT0RFVjsgfQotc3RhdGljIHZvaWQgcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkgeyByZXR1cm47IH0KLXN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KSB7IHJldHVybjsgfQotc3RhdGljIGludCBnZXRfdHJhbnNpdGlvbl9sYXRlbmN5KHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJICovCi0KIC8qIFRha2UgYSBmcmVxdWVuY3ksIGFuZCBpc3N1ZSB0aGUgZmlkL3ZpZCB0cmFuc2l0aW9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGluZGV4KQogewogCXUzMiBmaWQgPSAwOwogCXUzMiB2aWQgPSAwOwpAQCAtOTg5LDcgKzEwNTcsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKGZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKKwlpZiAoKGZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmCisJICAgIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkgICAgICAgImlnbm9yaW5nIGlsbGVnYWwgY2hhbmdlIGluIGxvIGZyZXEgdGFibGUtJXggdG8gMHgleFxuIiwKIAkJICAgICAgIGRhdGEtPmN1cnJmaWQsIGZpZCk7CkBAIC0xMDE3LDcgKzEwODYsOCBAQAogfQogCiAvKiBUYWtlIGEgZnJlcXVlbmN5LCBhbmQgaXNzdWUgdGhlIGhhcmR3YXJlIHBzdGF0ZSB0cmFuc2l0aW9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGluZGV4KQogewogCXUzMiBwc3RhdGUgPSAwOwogCWludCByZXMsIGk7CkBAIC0xMDI5LDcgKzEwOTksOCBAQAogCXBzdGF0ZSA9IGluZGV4ICYgSFdfUFNUQVRFX01BU0s7CiAJaWYgKHBzdGF0ZSA+IGRhdGEtPm1heF9od19wc3RhdGUpCiAJCXJldHVybiAwOwotCWZyZXFzLm9sZCA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIGRhdGEtPmN1cnJwc3RhdGUpOworCWZyZXFzLm9sZCA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQlkYXRhLT5jdXJycHN0YXRlKTsKIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBwc3RhdGUpOwogCiAJZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CkBAIC0xMDQ4LDcgKzExMTksOCBAQAogfQogCiAvKiBEcml2ZXIgZW50cnkgcG9pbnQgdG8gc3dpdGNoIHRvIHRoZSB0YXJnZXQgZnJlcXVlbmN5ICovCi1zdGF0aWMgaW50IHBvd2Vybm93azhfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sLCB1bnNpZ25lZCB0YXJnZnJlcSwgdW5zaWduZWQgcmVsYXRpb24pCitzdGF0aWMgaW50IHBvd2Vybm93azhfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sLAorCQl1bnNpZ25lZCB0YXJnZnJlcSwgdW5zaWduZWQgcmVsYXRpb24pCiB7CiAJY3B1bWFza190IG9sZG1hc2s7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEgPSBwZXJfY3B1KHBvd2Vybm93X2RhdGEsIHBvbC0+Y3B1KTsKQEAgLTEwODcsMTQgKzExNTksMTggQEAKIAkJZHByaW50aygidGFyZzogY3VyciBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCi0JCWlmICgoY2hlY2t2aWQgIT0gZGF0YS0+Y3VycnZpZCkgfHwgKGNoZWNrZmlkICE9IGRhdGEtPmN1cnJmaWQpKSB7CisJCWlmICgoY2hlY2t2aWQgIT0gZGF0YS0+Y3VycnZpZCkgfHwKKwkJICAgIChjaGVja2ZpZCAhPSBkYXRhLT5jdXJyZmlkKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCQkiZXJyb3IgLSBvdXQgb2Ygc3luYywgZml4IDB4JXggMHgleCwgdmlkIDB4JXggMHgleFxuIiwKLQkJCQljaGVja2ZpZCwgZGF0YS0+Y3VycmZpZCwgY2hlY2t2aWQsIGRhdGEtPmN1cnJ2aWQpOworCQkJCSJlcnJvciAtIG91dCBvZiBzeW5jLCBmaXggMHgleCAweCV4LCAiCisJCQkJInZpZCAweCV4IDB4JXhcbiIsCisJCQkJY2hlY2tmaWQsIGRhdGEtPmN1cnJmaWQsCisJCQkJY2hlY2t2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQl9CiAJfQogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlLCB0YXJnZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCXRhcmdmcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJZ290byBlcnJfb3V0OwogCiAJbXV0ZXhfbG9jaygmZmlkdmlkX211dGV4KTsKQEAgLTExMTQsNyArMTE5MCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZmaWR2aWRfbXV0ZXgpOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBuZXdzdGF0ZSk7CisJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCQluZXdzdGF0ZSk7CiAJZWxzZQogCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAJcmV0ID0gMDsKQEAgLTExNDEsNiArMTIxOCw3IEBACiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2s7CiAJaW50IHJjOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKIAogCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTE2MywzMyArMTI0MSwzMSBAQAogCQkgKiBhbiBVUCB2ZXJzaW9uLCBhbmQgaXMgZGVwcmVjYXRlZCBieSBBTUQuCiAJCSAqLwogCQlpZiAobnVtX29ubGluZV9jcHVzKCkgIT0gMSkgewotI2lmbmRlZiBDT05GSUdfQUNQSV9QUk9DRVNTT1IKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkFDUEkgUHJvY2Vzc29yIHN1cHBvcnQgaXMgcmVxdWlyZWQgIgotCQkJICAgICAgICJmb3IgU01QIHN5c3RlbXMgYnV0IGlzIGFic2VudC4gUGxlYXNlIGxvYWQgdGhlICIKLQkJCSAgICAgICAiQUNQSSBQcm9jZXNzb3IgbW9kdWxlIGJlZm9yZSBzdGFydGluZyB0aGlzICIKLQkJCSAgICAgICAiZHJpdmVyLlxuIik7Ci0jZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIllvdXIgQklPUyBkb2VzIG5vdCBwcm92aWRlIgotCQkJICAgICAgICIgQUNQSSBfUFNTIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBMaW51eCAiCi0JCQkgICAgICAgInVuZGVyc3RhbmRzLiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdGhlIExpbnV4ICIKLQkJCSAgICAgICAiQUNQSSBtYWludGFpbmVycyBhbmQgY29tcGxhaW4gdG8geW91ciBCSU9TICIKLQkJCSAgICAgICAidmVuZG9yLlxuIik7Ci0jZW5kaWYKLQkJCWtmcmVlKGRhdGEpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJCQkvKgorCQkJICogUmVwbGFjZSB0aGlzIG9uZSB3aXRoIHByaW50X29uY2UgYXMgc29vbiBhcyBzdWNoIGEKKwkJCSAqIHRoaW5nIGdldHMgaW50cm9kdWNlZAorCQkJICovCisJCQlpZiAoIXByaW50X29uY2UpIHsKKwkJCQlXQVJOX09OQ0UoMSwgS0VSTl9FUlIgRldfQlVHIFBGWCAiWW91ciBCSU9TICIKKwkJCQkJImRvZXMgbm90IHByb3ZpZGUgQUNQSSBfUFNTIG9iamVjdHMgIgorCQkJCQkiaW4gYSB3YXkgdGhhdCBMaW51eCB1bmRlcnN0YW5kcy4gIgorCQkJCQkiUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHRoZSBMaW51eCBBQ1BJIgorCQkJCQkiIG1haW50YWluZXJzIGFuZCBjb21wbGFpbiB0byB5b3VyICIKKwkJCQkJIkJJT1MgdmVuZG9yLlxuIik7CisJCQkJcHJpbnRfb25jZSsrOworCQkJfQorCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCWlmIChwb2wtPmNwdSAhPSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiTm8gQUNQSSBfUFNTIG9iamVjdHMgZm9yICIKIAkJCSAgICAgICAiQ1BVIG90aGVyIHRoYW4gQ1BVMC4gQ29tcGxhaW4gdG8geW91ciBCSU9TICIKIAkJCSAgICAgICAidmVuZG9yLlxuIik7Ci0JCQlrZnJlZShkYXRhKTsKLQkJCXJldHVybiAtRU5PREVWOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCXJjID0gZmluZF9wc2JfdGFibGUoZGF0YSk7Ci0JCWlmIChyYykgewotCQkJa2ZyZWUoZGF0YSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlpZiAocmMpCisJCQlnb3RvIGVycl9vdXQ7CisKIAkJLyogVGFrZSBhIGNydWRlIGd1ZXNzIGhlcmUuCiAJCSAqIFRoYXQgZ3Vlc3Mgd2FzIGluIG1pY3Jvc2Vjb25kcywgc28gbXVsdGlwbHkgd2l0aCAxMDAwICovCiAJCXBvbC0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAoCkBAIC0xMjA0LDE2ICsxMjgwLDE2IEBACiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImxpbWl0aW5nIHRvIGNwdSAldSBmYWlsZWRcbiIsIHBvbC0+Y3B1KTsKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCX0KIAogCWlmIChwZW5kaW5nX2JpdF9zdHVjaygpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxpbmcgaW5pdCwgY2hhbmdlIHBlbmRpbmcgYml0IHNldFxuIik7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAl9CiAKIAlpZiAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpCi0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9PUFRFUk9OKQogCQlmaWR2aWRfbXNyX2luaXQoKTsKQEAgLTEyMjgsNyArMTMwNCw4IEBACiAJZGF0YS0+YXZhaWxhYmxlX2NvcmVzID0gcG9sLT5jcHVzOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBkYXRhLT5jdXJycHN0YXRlKTsKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCWRwcmludGsoInBvbGljeSBjdXJyZW50IGZyZXF1ZW5jeSAlZCBrSHpcbiIsIHBvbC0+Y3VyKTsKQEAgLTEyNDUsNyArMTMyMiw4IEBACiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBvbC0+Y3B1KTsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCi0JCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgcHN0YXRlIDB4JXhcbiIsIGRhdGEtPmN1cnJwc3RhdGUpOworCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IHBzdGF0ZSAweCV4XG4iLAorCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKQEAgLTEyNTQsMTUgKzEzMzIsMTYgQEAKIAogCXJldHVybiAwOwogCi1lcnJfb3V0OgorZXJyX291dF91bm1hc2s6CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZG1hc2spOwogCXBvd2Vybm93X2s4X2NwdV9leGl0X2FjcGkoZGF0YSk7CiAKK2Vycl9vdXQ6CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHBvd2Vybm93azhfY3B1X2V4aXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sKQorc3RhdGljIGludCBfX2RldmV4aXQgcG93ZXJub3drOF9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCkKIHsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpOwogCkBAIC0xMjc5LDcgKzEzNTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93azhfZ2V0ICh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm5vd2s4X2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwpAQCAtMTMxNSw3ICsxMzk0LDcgQEAKIAlyZXR1cm4ga2h6OwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcG93ZXJub3dfazhfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X2s4X2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0xMzYwLDcgKzE0MzksOCBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUGF1bCBEZXZyaWVuZHQgPHBhdWwuZGV2cmllbmR0QGFtZC5jb20+IGFuZCBNYXJrIExhbmdzZG9yZiA8bWFyay5sYW5nc2RvcmZAYW1kLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgRGV2cmllbmR0IDxwYXVsLmRldnJpZW5kdEBhbWQuY29tPiBhbmQgIgorCQkiTWFyayBMYW5nc2RvcmYgPG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBBdGhsb24gNjQgYW5kIE9wdGVyb24gcHJvY2Vzc29yIGZyZXF1ZW5jeSBkcml2ZXIuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggOGVjYzc1Yi4uNmM2Njk4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKQEAgLTQ1LDExICs0NSwxMCBAQAogCSAqIGZyZXF1ZW5jeSBpcyBpbiBrSHogKi8KIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgICpwb3dlcm5vd190YWJsZTsKIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogCS8qIHRoZSBhY3BpIHRhYmxlIG5lZWRzIHRvIGJlIGtlcHQuIGl0J3Mgb25seSBhdmFpbGFibGUgaWYgQUNQSSB3YXMKIAkgKiB1c2VkIHRvIGRldGVybWluZSB2YWxpZCBmcmVxdWVuY3kvdmlkL2ZpZCBzdGF0ZXMgKi8KIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgYWNwaV9kYXRhOwotI2VuZGlmCisKIAkvKiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYXNzb2NpYXRlZCBjb3JlcywgYnV0IGxldCBjcHVmcmVxCiAJICogaGFuZGxlIGhvdHBsdWcgZXZlbnRzIC0gc28ganVzdCBwb2ludCBhdCBjcHVmcmVxIHBvbC0+Y3B1cwogCSAqIHN0cnVjdHVyZSAqLwpAQCAtMjIyLDEwICsyMjEsOCBAQAogCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKIHN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpOwogc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWZpbmVfc2libGluZ3MoaW50IGNwdSwgY3B1bWFza190IGNwdV9zaGFyZWRjb3JlX21hc2tbXSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCmluZGV4IDQyZGE5YmQuLjQzNWE5OTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwpAQCAtMTksMTcgKzE5LDE5IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgTU1DUl9CQVNFCTB4ZmZmZWYwMDAJLyogVGhlIGRlZmF1bHQgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9GRlNfQ1BVQ1RMCTB4MiAgIC8qIENQVSBDb250cm9sIFJlZ2lzdGVyICovCiAKIHN0YXRpYyBfX3U4IF9faW9tZW0gKmNwdWN0bDsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzYzUyMF9mcmVxIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNjNTIwX2ZyZXEiLCBtc2cpCisjZGVmaW5lIFBGWCAic2M1MjBfZnJlcTogIgogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHNjNTIwX2ZyZXFfdGFibGVbXSA9IHsKIAl7MHgwMSwJMTAwMDAwfSwKQEAgLTQzLDcgKzQ1LDggQEAKIAogCXN3aXRjaCAoY2xvY2tzcGVlZF9yZWcgJiAweDAzKSB7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJzYzUyMF9mcmVxOiBlcnJvcjogY3B1Y3RsIHJlZ2lzdGVyIGhhcyB1bmV4cGVjdGVkIHZhbHVlICUwMnhcbiIsIGNsb2Nrc3BlZWRfcmVnKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IGNwdWN0bCByZWdpc3RlciBoYXMgdW5leHBlY3RlZCAiCisJCQkJInZhbHVlICUwMnhcbiIsIGNsb2Nrc3BlZWRfcmVnKTsKIAljYXNlIDB4MDE6CiAJCXJldHVybiAxMDAwMDA7CiAJY2FzZSAweDAyOgpAQCAtNTEsNyArNTQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUodW5zaWduZWQgaW50IHN0YXRlKQogewogCiAJc3RydWN0IGNwdWZyZXFfZnJlcXMJZnJlcXM7CkBAIC03NiwxOCArNzksMTkgQEAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIH07CiAKLXN0YXRpYyBpbnQgc2M1MjBfZnJlcV92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzYzUyMF9mcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgJnNjNTIwX2ZyZXFfdGFibGVbMF0pOwogfQogCi1zdGF0aWMgaW50IHNjNTIwX2ZyZXFfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc2M1MjBfZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTExNiw3ICsxMjAsNyBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybiAocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNjNTIwX2ZyZXFfdGFibGUsIHBvbGljeS0+Y3B1KTsKIApAQCAtMTMxLDcgKzEzNSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNjNTIwX2ZyZXFfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnNjNTIwX2ZyZXFfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTE1NSwxMyArMTU5LDEzIEBACiAJaW50IGVycjsKIAogCS8qIFRlc3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgaGFyZHdhcmUgKi8KLQlpZihjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8Ci0JCQkJYy0+eDg2ICE9IDQgfHwgYy0+eDg2X21vZGVsICE9IDkpIHsKKwlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAorCSAgICBjLT54ODYgIT0gNCB8fCBjLT54ODZfbW9kZWwgIT0gOSkgewogCQlkcHJpbnRrKCJubyBFbGFuIFNDNTIwIHByb2Nlc3NvciBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY3B1Y3RsID0gaW9yZW1hcCgodW5zaWduZWQgbG9uZykoTU1DUl9CQVNFICsgT0ZGU19DUFVDVEwpLCAxKTsKLQlpZighY3B1Y3RsKSB7CisJaWYgKCFjcHVjdGwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzYzUyMF9mcmVxOiBlcnJvcjogZmFpbGVkIHRvIHJlbWFwIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwppbmRleCBmMDg5OTgyLi5jOWYxZmRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCkBAIC0zOTAsMTQgKzM5MCwxNCBAQAogCSAgIGVuYWJsZSBpdCBpZiBub3QuICovCiAJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwogCi0JaWYgKCEobCAmICgxPDwxNikpKSB7Ci0JCWwgfD0gKDE8PDE2KTsKKwlpZiAoIShsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQKSkgeworCQlsIHw9IE1TUl9JQTMyX01JU0NfRU5BQkxFX0VOSEFOQ0VEX1NQRUVEU1RFUDsKIAkJZHByaW50aygidHJ5aW5nIHRvIGVuYWJsZSBFbmhhbmNlZCBTcGVlZFN0ZXAgKCV4KVxuIiwgbCk7CiAJCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsLCBoKTsKIAogCQkvKiBjaGVjayB0byBzZWUgaWYgaXQgc3R1Y2sgKi8KIAkJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwotCQlpZiAoIShsICYgKDE8PDE2KSkpIHsKKwkJaWYgKCEobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX0VOSEFOQ0VEX1NQRUVEU1RFUCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYCiAJCQkJImNvdWxkbid0IGVuYWJsZSBFbmhhbmNlZCBTcGVlZFN0ZXBcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCBkZWRjMWU5Li44YmJiMTFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogLyogc3BlZWRzdGVwX3Byb2Nlc3NvcgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yOwogCiBzdGF0aWMgdTMyIHBtYmFzZTsKIApAQCAtNTQsNyArNTQsOCBAQAogfTsKIAogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1pY2giLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLWljaCIsIG1zZykKIAogCiAvKioKQEAgLTYyLDcgKzYzLDcgQEAKICAqCiAgKiBSZXR1cm5zOiAtRU5PREVWIGlmIG5vIHJlZ2lzdGVyIGNvdWxkIGJlIGZvdW5kCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9maW5kX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaWYgKCFzcGVlZHN0ZXBfY2hpcHNldF9kZXYpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtOTAsNyArOTEsNyBAQAogICoKICAqICAgVHJpZXMgdG8gY2hhbmdlIHRoZSBTcGVlZFN0ZXAgc3RhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUgKHVuc2lnbmVkIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUodW5zaWduZWQgaW50IHN0YXRlKQogewogCXU4IHBtMl9ibGs7CiAJdTggdmFsdWU7CkBAIC0xMzMsMTEgKzEzNCwxMSBAQAogCiAJZHByaW50aygicmVhZCBhdCBwbWJhc2UgMHgleCArIDB4NTAgcmV0dXJuZWQgMHgleFxuIiwgcG1iYXNlLCB2YWx1ZSk7CiAKLQlpZiAoc3RhdGUgPT0gKHZhbHVlICYgMHgxKSkgewotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZFxuIiwgKHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKSAvIDEwMDApKTsKLQl9IGVsc2UgewotCQlwcmludGsgKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgZmFpbGVkIC0gSS9PIGVycm9yXG4iKTsKLQl9CisJaWYgKHN0YXRlID09ICh2YWx1ZSAmIDB4MSkpCisJCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkXG4iLAorCQkJc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3NvcikgLyAxMDAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIGZhaWxlZCAtIEkvTyBlcnJvclxuIik7CiAKIAlyZXR1cm47CiB9CkBAIC0xNDksNyArMTUwLDcgQEAKICAqICAgVHJpZXMgdG8gYWN0aXZhdGUgdGhlIFNwZWVkU3RlcCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLgogICogUmV0dXJucyAtRUlOVkFMIG9uIGFuIHVuc3VwcG9ydGVkIGNoaXBzZXQsIGFuZCB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX2FjdGl2YXRlICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfYWN0aXZhdGUodm9pZCkKIHsKIAl1MTYgdmFsdWUgPSAwOwogCkBAIC0xNzUsMjAgKzE3NiwxOCBAQAogICogZnVuY3Rpb25zLiBSZXR1cm5zIHRoZSBTUEVFRFNURVBfQ0hJUFNFVF8tbnVtYmVyIGZvciB0aGUgZGV0ZWN0ZWQKICAqIGNoaXBzZXQsIG9yIHplcm8gb24gZmFpbHVyZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X2NoaXBzZXQgKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCh2b2lkKQogewogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KQogCQlyZXR1cm4gNDsgLyogNC1NICovCiAKIAlzcGVlZHN0ZXBfY2hpcHNldF9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAJaWYgKHNwZWVkc3RlcF9jaGlwc2V0X2RldikKIAkJcmV0dXJuIDM7IC8qIDMtTSAqLwpAQCAtMTk2LDggKzE5NSw3IEBACiAKIAlzcGVlZHN0ZXBfY2hpcHNldF9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzEwLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAJaWYgKHNwZWVkc3RlcF9jaGlwc2V0X2RldikgewogCQkvKiBzcGVlZHN0ZXAuYyBjYXVzZXMgbG9ja3VwcyBvbiBEZWxsIEluc3Bpcm9ucyA4MDAwIGFuZApAQCAtMjA4LDggKzIwNiw3IEBACiAKIAkJaG9zdGJyaWRnZSAgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxNV9NQywKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCiAJCWlmICghaG9zdGJyaWRnZSkKQEAgLTIzNiw3ICsyMzMsNyBAQAogCiAJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdXMpOwotCXNwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOworCXNwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CiAJZHByaW50aygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBzcGVlZCk7CiAJcmV0dXJuIHNwZWVkOwpAQCAtMjUxLDExICsyNDgsMTIgQEAKICAqIHNwZWVkc3RlcF90YXJnZXQgLSBzZXQgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqIEBwb2xpY3k6IG5ldyBwb2xpY3kKICAqIEB0YXJnZXRfZnJlcTogdGhlIHRhcmdldCBmcmVxdWVuY3kKLSAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5IChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQorICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kKKyAqCShDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIFNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewpAQCAtMjY0LDcgKzI2Miw4IEBACiAJY3B1bWFza190IGNwdXNfYWxsb3dlZDsKIAlpbnQgaTsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZyZXFzLm9sZCA9IF9zcGVlZHN0ZXBfZ2V0KHBvbGljeS0+Y3B1cyk7CkBAIC0zMDgsNyArMzA3LDcgQEAKICAqIExpbWl0IG11c3QgYmUgd2l0aGluIHNwZWVkc3RlcF9sb3dfZnJlcSBhbmQgc3BlZWRzdGVwX2hpZ2hfZnJlcSwgd2l0aAogICogYXQgbGVhc3Qgb25lIGJvcmRlciBpbmNsdWRlZC4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSk7CiB9CkBAIC0zNDQsNyArMzQzLDggQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlkcHJpbnRrKCJjdXJyZW50bHkgYXQgJXMgc3BlZWQgc2V0dGluZyAtICVpIE1IelxuIiwKLQkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpID8gImxvdyIgOiAiaGlnaCIsCisJCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KQorCQk/ICJsb3ciIDogImhpZ2giLAogCQkoc3BlZWQgLyAxMDAwKSk7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KQEAgLTM1Miw5ICszNTIsOSBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNwZWVkc3RlcF9mcmVxcyk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCi0gICAgICAgIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNwZWVkc3RlcF9mcmVxcywgcG9saWN5LT5jcHUpOworCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNwZWVkc3RlcF9mcmVxcywgcG9saWN5LT5jcHUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjYsNyArMzY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNwZWVkc3RlcF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc3BlZWRzdGVwX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zOTYsMTMgKzM5NiwxNSBAQAogCS8qIGRldGVjdCBwcm9jZXNzb3IgKi8KIAlzcGVlZHN0ZXBfcHJvY2Vzc29yID0gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKTsKIAlpZiAoIXNwZWVkc3RlcF9wcm9jZXNzb3IpIHsKLQkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBjYXBhYmxlIHByb2Nlc3NvciBub3QgZm91bmRcbiIpOworCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGNhcGFibGUgcHJvY2Vzc29yICIKKwkJCQkibm90IGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogZGV0ZWN0IGNoaXBzZXQgKi8KIAlpZiAoIXNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCgpKSB7Ci0JCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgZm9yIHRoaXMgY2hpcHNldCBub3QgKHlldCkgYXZhaWxhYmxlLlxuIik7CisJCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgZm9yIHRoaXMgY2hpcHNldCBub3QgIgorCQkJCSIoeWV0KSBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC00MzEsOSArNDMzLDExIEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJbnRlbCBtb2JpbGUgcHJvY2Vzc29ycyBvbiBjaGlwc2V0cyB3aXRoIElDSC1NIHNvdXRoYnJpZGdlcy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgIgorCQkiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJbnRlbCBtb2JpbGUgcHJvY2Vzc29ycyBvbiBjaGlwc2V0cyAiCisJCSJ3aXRoIElDSC1NIHNvdXRoYnJpZGdlcy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoc3BlZWRzdGVwX2luaXQpOwogbW9kdWxlX2V4aXQoc3BlZWRzdGVwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKaW5kZXggY2RhYzdkNi4uMmUzYzY4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCkBAIC0xNiwxMiArMTYsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzcGVlZHN0ZXAtbGliIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNwZWVkc3RlcC1saWIiLCBtc2cpCisKKyNkZWZpbmUgUEZYICJzcGVlZHN0ZXAtbGliOiAiCiAKICNpZmRlZiBDT05GSUdfWDg2X1NQRUVEU1RFUF9SRUxBWEVEX0NBUF9DSEVDSwotc3RhdGljIGludCByZWxheGVkX2NoZWNrID0gMDsKK3N0YXRpYyBpbnQgcmVsYXhlZF9jaGVjazsKICNlbHNlCiAjZGVmaW5lIHJlbGF4ZWRfY2hlY2sgMAogI2VuZGlmCkBAIC0zMCwxNCArMzQsMTQgQEAKICAqICAgICAgICAgICAgICAgICAgIEdFVCBQUk9DRVNTT1IgQ09SRSBTUEVFRCBJTiBLSFogICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGVudGl1bTNfZ2V0X2ZyZXF1ZW5jeSAodW5zaWduZWQgaW50IHByb2Nlc3NvcikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVudGl1bTNfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQogewotICAgICAgICAvKiBTZWUgdGFibGUgMTQgb2YgcDNfZHMucGRmIGFuZCB0YWJsZSAyMiBvZiAyOTgzNDAwMy5wZGYgKi8KKwkvKiBTZWUgdGFibGUgMTQgb2YgcDNfZHMucGRmIGFuZCB0YWJsZSAyMiBvZiAyOTgzNDAwMy5wZGYgKi8KIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCBpbnQgcmF0aW87CS8qIEZyZXF1ZW5jeSBNdWx0aXBsaWVyICh4MTApICovCiAJCXU4IGJpdG1hcDsJCS8qIHBvd2VyIG9uIGNvbmZpZ3VyYXRpb24gYml0cwogCQkJCQlbMjcsIDI1OjIyXSAoaW4gTVNSIDB4MmEpICovCi0JfSBtc3JfZGVjb2RlX211bHQgW10gPSB7CisJfSBtc3JfZGVjb2RlX211bHRbXSA9IHsKIAkJeyAzMCwgMHgwMSB9LAogCQl7IDM1LCAweDA1IH0sCiAJCXsgNDAsIDB4MDIgfSwKQEAgLTUyLDcgKzU2LDcgQEAKIAkJeyA4NSwgMHgyNiB9LAogCQl7IDkwLCAweDIwIH0sCiAJCXsgMTAwLCAweDJiIH0sCi0JCXsgMCwgMHhmZiB9ICAgICAvKiBlcnJvciBvciB1bmtub3duIHZhbHVlICovCisJCXsgMCwgMHhmZiB9CS8qIGVycm9yIG9yIHVua25vd24gdmFsdWUgKi8KIAl9OwogCiAJLyogUElJSSgtTSkgRlNCIHNldHRpbmdzOiBzZWUgdGFibGUgYjEtYiBvZiAyNDU0NzIwNi5wZGYgKi8KQEAgLTYwLDcgKzY0LDcgQEAKIAkJdW5zaWduZWQgaW50IHZhbHVlOwkvKiBGcm9udCBTaWRlIEJ1cyBzcGVlZCBpbiBNSHogKi8KIAkJdTggYml0bWFwOwkJLyogcG93ZXIgb24gY29uZmlndXJhdGlvbiBiaXRzIFsxODogMTldCiAJCQkJCShpbiBNU1IgMHgyYSkgKi8KLQl9IG1zcl9kZWNvZGVfZnNiIFtdID0geworCX0gbXNyX2RlY29kZV9mc2JbXSA9IHsKIAkJeyAgNjYsIDB4MCB9LAogCQl7IDEwMCwgMHgyIH0sCiAJCXsgMTMzLCAweDEgfSwKQEAgLTg1LDcgKzg5LDcgQEAKIAl9CiAKIAkvKiBkZWNvZGUgdGhlIG11bHRpcGxpZXIgKi8KLQlpZiAocHJvY2Vzc29yID09IFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZKSB7CisJaWYgKHByb2Nlc3NvciA9PSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWSkgewogCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIGZvciBlYXJseSBQSUlJc1xuIik7CiAJCW1zcl9sbyAmPSAweDAzYzAwMDAwOwogCX0gZWxzZQpAQCAtOTcsOSArMTAxLDEwIEBACiAJCWorKzsKIAl9CiAKLQlkcHJpbnRrKCJzcGVlZCBpcyAldVxuIiwgKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKSk7CisJZHByaW50aygic3BlZWQgaXMgJXVcbiIsCisJCShtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMCkpOwogCi0JcmV0dXJuIChtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMCk7CisJcmV0dXJuIG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwOwogfQogCiAKQEAgLTExMiwyMCArMTE3LDIzIEBACiAKIAkvKiBzZWUgdGFibGUgQi0yIG9mIDI0NTQ3MjEyLnBkZiAqLwogCWlmIChtc3JfbG8gJiAweDAwMDQwMDAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJzcGVlZHN0ZXAtbGliOiBQTSAtIGludmFsaWQgRlNCOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUE0gLSBpbnZhbGlkIEZTQjogMHgleCAweCV4XG4iLAorCQkJCW1zcl9sbywgbXNyX3RtcCk7CiAJCXJldHVybiAwOwogCX0KIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsIG1zcl90bXAsIChtc3JfdG1wICogMTAwICogMTAwMCkpOworCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLAorCQkJbXNyX3RtcCwgKG1zcl90bXAgKiAxMDAgKiAxMDAwKSk7CiAKLQlyZXR1cm4gKG1zcl90bXAgKiAxMDAgKiAxMDAwKTsKKwlyZXR1cm4gbXNyX3RtcCAqIDEwMCAqIDEwMDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGVudGl1bV9jb3JlX2dldF9mcmVxdWVuY3kodm9pZCkKIHsKIAl1MzIgZnNiID0gMDsKIAl1MzIgbXNyX2xvLCBtc3JfdG1wOworCWludCByZXQ7CiAKIAlyZG1zcihNU1JfRlNCX0ZSRVEsIG1zcl9sbywgbXNyX3RtcCk7CiAJLyogc2VlIHRhYmxlIEItMiBvZiAyNTM2NjkyMC5wZGYgKi8KQEAgLTE1MywxMiArMTYxLDE1IEBACiAJfQogCiAJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIG1zcl9sbywgbXNyX3RtcCk7Ci0JZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl90bXApOworCWRwcmludGsoIlBDT1JFIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwKKwkJCW1zcl9sbywgbXNyX3RtcCk7CiAKIAltc3JfdG1wID0gKG1zcl9sbyA+PiAyMikgJiAweDFmOwotCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLCBtc3JfdG1wLCAobXNyX3RtcCAqIGZzYikpOworCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLAorCQkJbXNyX3RtcCwgKG1zcl90bXAgKiBmc2IpKTsKIAotCXJldHVybiAobXNyX3RtcCAqIGZzYik7CisJcmV0ID0gKG1zcl90bXAgKiBmc2IpOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTY3LDYgKzE3OCwxNiBAQAogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOwogCXUzMiBtc3JfbG8sIG1zcl9oaSwgbXVsdDsKIAl1bnNpZ25lZCBpbnQgZnNiID0gMDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCXU4IGZzYl9jb2RlOworCisJLyogUGVudGl1bSA0IE1vZGVsIDAgYW5kIDEgZG8gbm90IGhhdmUgdGhlIENvcmUgQ2xvY2sgRnJlcXVlbmN5CisJICogdG8gU3lzdGVtIEJ1cyBGcmVxdWVuY3kgUmF0aW8gRmllbGQgaW4gdGhlIFByb2Nlc3NvciBGcmVxdWVuY3kKKwkgKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIG9mIHRoZSBNU1IuIFRoZXJlZm9yZSB0aGUgY3VycmVudAorCSAqIGZyZXF1ZW5jeSBjYW5ub3QgYmUgY2FsY3VsYXRlZCBhbmQgaGFzIHRvIGJlIG1lYXN1cmVkLgorCSAqLworCWlmIChjLT54ODZfbW9kZWwgPCAyKQorCQlyZXR1cm4gY3B1X2toejsKIAogCXJkbXNyKDB4MmMsIG1zcl9sbywgbXNyX2hpKTsKIApAQCAtMTc3LDYyICsxOTgsNjEgQEAKIAkgKiByZXZpc2lvbiAjMTIgaW4gVGFibGUgQi0xOiBNU1JzIGluIHRoZSBQZW50aXVtIDQgYW5kCiAJICogSW50ZWwgWGVvbiBQcm9jZXNzb3JzLCBvbiBwYWdlIEItNCBhbmQgQi01LgogCSAqLwotCWlmIChjLT54ODZfbW9kZWwgPCAyKQorCWZzYl9jb2RlID0gKG1zcl9sbyA+PiAxNikgJiAweDc7CisJc3dpdGNoIChmc2JfY29kZSkgeworCWNhc2UgMDoKIAkJZnNiID0gMTAwICogMTAwMDsKLQllbHNlIHsKLQkJdTggZnNiX2NvZGUgPSAobXNyX2xvID4+IDE2KSAmIDB4NzsKLQkJc3dpdGNoIChmc2JfY29kZSkgewotCQljYXNlIDA6Ci0JCQlmc2IgPSAxMDAgKiAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWZzYiA9IDEzMzMzICogMTA7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJZnNiID0gMjAwICogMTAwMDsKLQkJCWJyZWFrOwotCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJZnNiID0gMTMzMzMgKiAxMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmc2IgPSAyMDAgKiAxMDAwOworCQlicmVhazsKIAl9CiAKIAlpZiAoIWZzYikKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNwZWVkc3RlcC1saWI6IGNvdWxkbid0IGRldGVjdCBGU0Igc3BlZWQuIFBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8bGludXhAYnJvZG8uZGU+XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjb3VsZG4ndCBkZXRlY3QgRlNCIHNwZWVkLiAiCisJCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8bGludXhAYnJvZG8uZGU+XG4iKTsKIAogCS8qIE11bHRpcGxpZXIuICovCiAJbXVsdCA9IG1zcl9sbyA+PiAyNDsKIAotCWRwcmludGsoIlA0IC0gRlNCICV1IGtIejsgTXVsdGlwbGllciAldTsgU3BlZWQgJXUga0h6XG4iLCBmc2IsIG11bHQsIChmc2IgKiBtdWx0KSk7CisJZHByaW50aygiUDQgLSBGU0IgJXUga0h6OyBNdWx0aXBsaWVyICV1OyBTcGVlZCAldSBrSHpcbiIsCisJCQlmc2IsIG11bHQsIChmc2IgKiBtdWx0KSk7CiAKLQlyZXR1cm4gKGZzYiAqIG11bHQpOworCXJldCA9IChmc2IgKiBtdWx0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKLXVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3NvcikKK3Vuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQogewogCXN3aXRjaCAocHJvY2Vzc29yKSB7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QQ09SRToKIAkJcmV0dXJuIHBlbnRpdW1fY29yZV9nZXRfZnJlcXVlbmN5KCk7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BNOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QTToKIAkJcmV0dXJuIHBlbnRpdW1NX2dldF9mcmVxdWVuY3koKTsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDREOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNE06CisJY2FzZSBTUEVFRFNURVBfQ1BVX1A0RDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUDRNOgogCQlyZXR1cm4gcGVudGl1bTRfZ2V0X2ZyZXF1ZW5jeSgpOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1Q6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQzoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX1Q6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfQzoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOgogCQlyZXR1cm4gcGVudGl1bTNfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX07CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kpOworRVhQT1JUX1NZTUJPTF9HUEwoc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kpOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICBERVRFQ1QgU1BFRURTVEVQLUNBUEFCTEUgUFJPQ0VTU09SICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvciAodm9pZCkKK3Vuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3Nvcih2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1MzIgZWJ4LCBtc3JfbG8sIG1zcl9oaTsKQEAgLTI2MSw3ICsyODEsNyBAQAogCQkJICogc2FtcGxlIGhhcyBlYnggPSAweDBmLCBwcm9kdWN0aW9uIGhhcyAweDBlLgogCQkJICovCiAJCQlpZiAoKGVieCA9PSAweDBlKSB8fCAoZWJ4ID09IDB4MGYpKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QNE07CiAJCQlicmVhazsKIAkJY2FzZSA3OgogCQkJLyoKQEAgLTI3Miw3ICsyOTIsNyBAQAogCQkJICogc2FtcGxlcyBhcmUgb25seSBvZiBCLXN0ZXBwaW5nLi4uCiAJCQkgKi8KIAkJCWlmIChlYnggPT0gMHgwZSkKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QNE07CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUDRNOwogCQkJYnJlYWs7CiAJCWNhc2UgOToKIAkJCS8qCkBAIC0yODgsMTAgKzMwOCwxMyBAQAogCQkJICogTS1QNC1NcyBtYXkgaGF2ZSBlaXRoZXIgZWJ4PTB4ZSBvciAweGYgW3NlZSBhYm92ZV0KIAkJCSAqIE0tUDQvNTMzIGhhdmUgZWl0aGVyIGVieD0weGUgb3IgMHhmLiBbMjUzMTc2MDcucGRmXQogCQkJICogYWxzbywgTS1QNE0gSFRzIGhhdmUgZWJ4PTB4OCwgdG9vCi0JCQkgKiBGb3Igbm93LCB0aGV5IGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBtb2RlbF9pZCBzdHJpbmcKKwkJCSAqIEZvciBub3csIHRoZXkgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIG1vZGVsX2lkCisJCQkgKiBzdHJpbmcKIAkJCSAqLwotCQkJaWYgKChlYnggPT0gMHgwZSkgfHwgKHN0cnN0cihjLT54ODZfbW9kZWxfaWQsIk1vYmlsZSBJbnRlbChSKSBQZW50aXVtKFIpIDQiKSAhPSBOVUxMKSkKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QNE07CisJCQlpZiAoKGVieCA9PSAweDBlKSB8fAorCQkJCShzdHJzdHIoYy0+eDg2X21vZGVsX2lkLAorCQkJCSAgICAiTW9iaWxlIEludGVsKFIpIFBlbnRpdW0oUikgNCIpICE9IE5VTEwpKQorCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1A0TTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC0zMDEsNyArMzI0LDggQEAKIAogCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJY2FzZSAweDBCOiAvKiBJbnRlbCBQSUlJIFtUdWFsYXRpbl0gKi8KLQkJLyogY3B1aWRfZWJ4KDEpIGlzIDB4MDQgZm9yIGRlc2t0b3AgUElJSSwgMHgwNiBmb3IgbW9iaWxlIFBJSUktTSAqLworCQkvKiBjcHVpZF9lYngoMSkgaXMgMHgwNCBmb3IgZGVza3RvcCBQSUlJLAorCQkgKiAweDA2IGZvciBtb2JpbGUgUElJSS1NICovCiAJCWVieCA9IGNwdWlkX2VieCgweDAwMDAwMDAxKTsKIAkJZHByaW50aygiZWJ4IGlzICV4XG4iLCBlYngpOwogCkBAIC0zMTMsMTQgKzMzNywxNSBAQAogCQkvKiBTbyBmYXIgYWxsIFBJSUktTSBwcm9jZXNzb3JzIHN1cHBvcnQgU3BlZWRTdGVwLiBTZWUKIAkJICogSW50ZWwncyAyNDU0MDY0MC5wZGYgb2YgSnVuZSAyMDAzCiAJCSAqLwotCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1Q7CisJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfVDsKIAogCWNhc2UgMHgwODogLyogSW50ZWwgUElJSSBbQ29wcGVybWluZV0gKi8KIAogCQkvKiBhbGwgbW9iaWxlIFBJSUkgQ29wcGVybWluZXMgaGF2ZSBGU0IgMTAwIE1IegogCQkgKiA9PT4gc29ydCBvdXQgYSBmZXcgZGVza3RvcCBQSUlJcy4gKi8KIAkJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIG1zcl9sbywgbXNyX2hpKTsKLQkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfRUJMX0NSX1BPV0VST04gaXMgMHgleCwgMHgleFxuIiwgbXNyX2xvLCBtc3JfaGkpOworCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLAorCQkJCW1zcl9sbywgbXNyX2hpKTsKIAkJbXNyX2xvICY9IDB4MDBjMDAwMDsKIAkJaWYgKG1zcl9sbyAhPSAweDAwODAwMDApCiAJCQlyZXR1cm4gMDsKQEAgLTMzMiwxMyArMzU3LDE1IEBACiAJCSAqIGJpdCA1NiBvciA1NyBpcyBzZXQKIAkJICovCiAJCXJkbXNyKE1TUl9JQTMyX1BMQVRGT1JNX0lELCBtc3JfbG8sIG1zcl9oaSk7Ci0JCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX1BMQVRGT1JNIElEIGlzIDB4JXgsIDB4JXhcbiIsIG1zcl9sbywgbXNyX2hpKTsKLQkJaWYgKChtc3JfaGkgJiAoMTw8MTgpKSAmJiAocmVsYXhlZF9jaGVjayA/IDEgOiAobXNyX2hpICYgKDM8PDI0KSkpKSB7CisJCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX1BMQVRGT1JNIElEIGlzIDB4JXgsIDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfaGkpOworCQlpZiAoKG1zcl9oaSAmICgxPDwxOCkpICYmCisJCSAgICAocmVsYXhlZF9jaGVjayA/IDEgOiAobXNyX2hpICYgKDM8PDI0KSkpKSB7CiAJCQlpZiAoYy0+eDg2X21hc2sgPT0gMHgwMSkgewogCQkJCWRwcmludGsoImVhcmx5IFBJSUkgdmVyc2lvblxuIik7Ci0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWTsKIAkJCX0gZWxzZQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQzsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QSUlJX0M7CiAJCX0KIAogCWRlZmF1bHQ6CkBAIC0zNjksNyArMzk2LDcgQEAKIAlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGJvdGggc3BlZWRzXG4iKTsKIAogCS8qIGdldCBjdXJyZW50IHNwZWVkICovCi0JcHJldl9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOworCXByZXZfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWlmICghcHJldl9zcGVlZCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTM3OSw3ICs0MDYsNyBAQAogCiAJLyogc3dpdGNoIHRvIGxvdyBzdGF0ZSAqLwogCXNldF9zdGF0ZShTUEVFRFNURVBfTE9XKTsKLQkqbG93X3NwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CisJKmxvd19zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCEqbG93X3NwZWVkKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtMzk4LDcgKzQyNSw3IEBACiAJaWYgKHRyYW5zaXRpb25fbGF0ZW5jeSkKIAkJZG9fZ2V0dGltZW9mZGF5KCZ0djIpOwogCi0JKmhpZ2hfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kocHJvY2Vzc29yKTsKKwkqaGlnaF9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCEqaGlnaF9zcGVlZCkgewogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTQyNiw5ICs0NTMsMTIgQEAKIAkJLyogY2hlY2sgaWYgdGhlIGxhdGVuY3kgbWVhc3VyZW1lbnQgaXMgdG9vIGhpZ2ggb3IgdG9vIGxvdwogCQkgKiBhbmQgc2V0IGl0IHRvIGEgc2FmZSB2YWx1ZSAoNTAwdVNlYykgaW4gdGhhdCBjYXNlCiAJCSAqLwotCQlpZiAoKnRyYW5zaXRpb25fbGF0ZW5jeSA+IDEwMDAwMDAwIHx8ICp0cmFuc2l0aW9uX2xhdGVuY3kgPCA1MDAwMCkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwZWVkc3RlcDogZnJlcXVlbmN5IHRyYW5zaXRpb24gbWVhc3VyZWQgc2VlbXMgb3V0IG9mICIKLQkJCQkJInJhbmdlICgldSBuU2VjKSwgZmFsbGluZyBiYWNrIHRvIGEgc2FmZSBvbmUgb2YgJXUgblNlYy5cbiIsCisJCWlmICgqdHJhbnNpdGlvbl9sYXRlbmN5ID4gMTAwMDAwMDAgfHwKKwkJICAgICp0cmFuc2l0aW9uX2xhdGVuY3kgPCA1MDAwMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggImZyZXF1ZW5jeSB0cmFuc2l0aW9uICIKKwkJCQkJIm1lYXN1cmVkIHNlZW1zIG91dCBvZiByYW5nZSAoJXUgIgorCQkJCQkiblNlYyksIGZhbGxpbmcgYmFjayB0byBhIHNhZmUgb25lIG9mIgorCQkJCQkiJXUgblNlYy5cbiIsCiAJCQkJCSp0cmFuc2l0aW9uX2xhdGVuY3ksIDUwMDAwMCk7CiAJCQkqdHJhbnNpdGlvbl9sYXRlbmN5ID0gNTAwMDAwOwogCQl9CkBAIC00MzYsMTUgKzQ2NiwxNiBAQAogCiBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BlZWRzdGVwX2dldF9mcmVxcyk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1NQRUVEU1RFUF9SRUxBWEVEX0NBUF9DSEVDSwogbW9kdWxlX3BhcmFtKHJlbGF4ZWRfY2hlY2ssIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlbGF4ZWRfY2hlY2ssICJEb24ndCBkbyBhbGwgY2hlY2tzIGZvciBzcGVlZHN0ZXAgY2FwYWJpbGl0eS4iKTsKK01PRFVMRV9QQVJNX0RFU0MocmVsYXhlZF9jaGVjaywKKwkJIkRvbid0IGRvIGFsbCBjaGVja3MgZm9yIHNwZWVkc3RlcCBjYXBhYmlsaXR5LiIpOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJMaWJyYXJ5IGZvciBJbnRlbCBTcGVlZFN0ZXAgMSBvciAyIGNwdWZyZXEgZHJpdmVycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpYnJhcnkgZm9yIEludGVsIFNwZWVkU3RlcCAxIG9yIDIgY3B1ZnJlcSBkcml2ZXJzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKaW5kZXggYjExYmNjNi4uMmI2YzA0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCkBAIC0xMiwxNyArMTIsMTcgQEAKIAogLyogcHJvY2Vzc29ycyAqLwogCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZCTB4MDAwMDAwMDEgIC8qIENvcHBlcm1pbmUgY29yZSAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQwkJMHgwMDAwMDAwMiAgLyogQ29wcGVybWluZSBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9UCQkweDAwMDAwMDAzICAvKiBUdWFsYXRpbiBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNCQkJMHgwMDAwMDAwNCAgLyogUDQtTSAgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFkJMHgwMDAwMDAwMSAgLyogQ29wcGVybWluZSBjb3JlICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUElJSV9DCQkweDAwMDAwMDAyICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX1QJCTB4MDAwMDAwMDMgIC8qIFR1YWxhdGluIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QNE0JCTB4MDAwMDAwMDQgIC8qIFA0LU0gICovCiAKIC8qIHRoZSBmb2xsb3dpbmcgcHJvY2Vzc29ycyBhcmUgbm90IHNwZWVkc3RlcC1jYXBhYmxlIGFuZCBhcmUgbm90IGF1dG8tZGV0ZWN0ZWQKICAqIGluIHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkuIEhvd2V2ZXIsIHRoZWlyIHNwZWVkIGNhbiBiZSBkZXRlY3RlZCB1c2luZwotICogdGhlIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSgpIGNhbGwuICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUE0JCQkweEZGRkZGRjAzICAvKiBQZW50aXVtIE0gICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRECQkJMHhGRkZGRkYwNCAgLyogZGVza3RvcCBQNCAgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QQ09SRQkJMHhGRkZGRkYwNSAgLyogQ29yZSAqLworICogdGhlIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KCkgY2FsbC4gKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QTQkJMHhGRkZGRkYwMyAgLyogUGVudGl1bSBNICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1A0RAkJMHhGRkZGRkYwNCAgLyogZGVza3RvcCBQNCAgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QQ09SRQkJMHhGRkZGRkYwNSAgLyogQ29yZSAqLwogCiAvKiBzcGVlZHN0ZXAgc3RhdGVzIC0tIG9ubHkgdHdvIG9mIHRoZW0gKi8KIApAQCAtMzQsNyArMzQsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvciAodm9pZCk7CiAKIC8qIGRldGVjdCB0aGUgY3VycmVudCBzcGVlZCAoaW4ga2h6KSBvZiB0aGUgcHJvY2Vzc29yICovCi1leHRlcm4gdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3Nvcik7CiAKIAogLyogZGV0ZWN0IHRoZSBsb3cgYW5kIGhpZ2ggc3BlZWRzIG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggOGE4NWM5My4uYmVmZWEwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lzdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCkBAIC0zMCwxMiArMzAsMTIgQEAKICAqIElmIHVzZXIgZ2l2ZXMgaXQsIHRoZXNlIGFyZSB1c2VkLgogICoKICAqLwotc3RhdGljIGludCBzbWlfcG9ydCA9IDA7Ci1zdGF0aWMgaW50IHNtaV9jbWQgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBzbWlfc2lnID0gMDsKK3N0YXRpYyBpbnQgc21pX3BvcnQ7CitzdGF0aWMgaW50IHNtaV9jbWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHNtaV9zaWc7CiAKIC8qIGluZm8gYWJvdXQgdGhlIHByb2Nlc3NvciAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvcjsKIAogLyoKICAqIFRoZXJlIGFyZSBvbmx5IHR3byBmcmVxdWVuY3kgc3RhdGVzIGZvciBlYWNoIHByb2Nlc3Nvci4gVmFsdWVzCkBAIC01NiwxMiArNTYsMTMgQEAKICAqIG9mIERNQSBhY3Rpdml0eSBnb2luZyBvbj8gKi8KICNkZWZpbmUgU01JX1RSSUVTIDUKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzcGVlZHN0ZXAtc21pIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNwZWVkc3RlcC1zbWkiLCBtc2cpCiAKIC8qKgogICogc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX293bmVyc2hpcCAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAodm9pZCkKIHsKIAl1MzIgY29tbWFuZCwgcmVzdWx0LCBtYWdpYywgZHVtbXk7CiAJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9PV05FUjsKQEAgLTcwLDE2ICs3MSwxOCBAQAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAltYWdpYyA9IHZpcnRfdG9fcGh5cyhtYWdpY19kYXRhKTsKIAotCWRwcmludGsoInRyeWluZyB0byBvYnRhaW4gb3duZXJzaGlwIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIG9idGFpbiBvd25lcnNoaXAgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicFxuIgotCQk6ICI9RCIgKHJlc3VsdCksICI9YSIgKGR1bW15KSwgIj1iIiAoZHVtbXkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwKLQkJCSI9UyIgKGR1bW15KQorCQk6ICI9RCIgKHJlc3VsdCksCisJCSAgIj1hIiAoZHVtbXkpLCAiPWIiIChkdW1teSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLAorCQkgICI9UyIgKGR1bW15KQogCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLCAiZCIgKHNtaV9wb3J0KSwKLQkJCSJEIiAoMCksICJTIiAobWFnaWMpCisJCSAgIkQiICgwKSwgIlMiIChtYWdpYykKIAkJOiAibWVtb3J5IgogCSk7CiAKQEAgLTk3LDEwICsxMDAsMTAgQEAKICAqIGV2ZW4gaGFuZ3MgW2NmLiBidWdtZS5vc2RsLm9yZyAjIDE0MjJdIG9uIGVhcmxpZXIgc3lzdGVtcy4gRW1waXJpY2FsIHRlc3RpbmcKICAqIHNob3dzIHRoYXQgdGhlIGxhdHRlciBvY2N1cnMgaWYgIShpc3RfaW5mby5ldmVudCAmIDB4RkZGRikuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXMgKHVuc2lnbmVkIGludCAqbG93LCB1bnNpZ25lZCBpbnQgKmhpZ2gpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfZ2V0X2ZyZXFzKHVuc2lnbmVkIGludCAqbG93LCB1bnNpZ25lZCBpbnQgKmhpZ2gpCiB7CiAJdTMyIGNvbW1hbmQsIHJlc3VsdCA9IDAsIGVkaSwgaGlnaF9taHosIGxvd19taHosIGR1bW15OwotCXUzMiBzdGF0ZT0wOworCXUzMiBzdGF0ZSA9IDA7CiAJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9GUkVRUzsKIAogCWlmICghKGlzdF9pbmZvLmV2ZW50ICYgMHhGRkZGKSkgewpAQCAtMTEwLDE3ICsxMTMsMjUgQEAKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGZyZXF1ZW5jaWVzIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLAorCQkJY29tbWFuZCwgc21pX3BvcnQpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJwdXNoICUlZWJwXG4iCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCSJwb3AgJSVlYnAiCi0JCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoaGlnaF9taHopLCAiPWMiIChsb3dfbWh6KSwgIj1kIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPVMiIChkdW1teSkKLQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCTogIj1hIiAocmVzdWx0KSwKKwkJICAiPWIiIChoaWdoX21oeiksCisJCSAgIj1jIiAobG93X21oeiksCisJCSAgIj1kIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPVMiIChkdW1teSkKKwkJOiAiYSIgKGNvbW1hbmQpLAorCQkgICJiIiAoZnVuY3Rpb24pLAorCQkgICJjIiAoc3RhdGUpLAorCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAotCWRwcmludGsoInJlc3VsdCAleCwgbG93X2ZyZXEgJXUsIGhpZ2hfZnJlcSAldVxuIiwgcmVzdWx0LCBsb3dfbWh6LCBoaWdoX21oeik7CisJZHByaW50aygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLAorCQkJcmVzdWx0LCBsb3dfbWh6LCBoaWdoX21oeik7CiAKIAkvKiBhYm9ydCBpZiByZXN1bHRzIGFyZSBvYnZpb3VzbHkgaW5jb3JyZWN0Li4uICovCiAJaWYgKChoaWdoX21oeiArIGxvd19taHopIDwgNjAwKQpAQCAtMTM3LDI2ICsxNDgsMzAgQEAKICAqIEBzdGF0ZTogcHJvY2Vzc29yIGZyZXF1ZW5jeSBzdGF0ZSAoU1BFRURTVEVQX0xPVyBvciBTUEVFRFNURVBfSElHSCkKICAqCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX2dldF9zdGF0ZSAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX2dldF9zdGF0ZSh2b2lkKQogewotCXUzMiBmdW5jdGlvbj1HRVRfU1BFRURTVEVQX1NUQVRFOworCXUzMiBmdW5jdGlvbiA9IEdFVF9TUEVFRFNURVBfU1RBVEU7CiAJdTMyIHJlc3VsdCwgc3RhdGUsIGVkaSwgY29tbWFuZCwgZHVtbXk7CiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgc2V0dGluZyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCAiCisJCSJhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicFxuIgotCQk6ICI9YSIgKHJlc3VsdCksICI9YiIgKHN0YXRlKSwgIj1EIiAoZWRpKSwgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQorCQk6ICI9YSIgKHJlc3VsdCksCisJCSAgIj1iIiAoc3RhdGUpLCAiPUQiIChlZGkpLAorCQkgICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKKwkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiICgwKSwKKwkJICAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQogCSk7CiAKIAlkcHJpbnRrKCJzdGF0ZSBpcyAleCwgcmVzdWx0IGlzICV4XG4iLCBzdGF0ZSwgcmVzdWx0KTsKIAotCXJldHVybiAoc3RhdGUgJiAxKTsKKwlyZXR1cm4gc3RhdGUgJiAxOwogfQogCiAKQEAgLTE2NSwxMSArMTgwLDExIEBACiAgKiBAc3RhdGU6IG5ldyBwcm9jZXNzb3IgZnJlcXVlbmN5IHN0YXRlIChTUEVFRFNURVBfTE9XIG9yIFNQRUVEU1RFUF9ISUdIKQogICoKICAqLwotc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDAsIGNvbW1hbmQsIG5ld19zdGF0ZSwgZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgZnVuY3Rpb249U0VUX1NQRUVEU1RFUF9TVEFURTsKKwl1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBTRVRfU1BFRURTVEVQX1NUQVRFOwogCXVuc2lnbmVkIGludCByZXRyeSA9IDA7CiAKIAlpZiAoc3RhdGUgPiAweDEpCkBAIC0xODAsMTEgKzE5NSwxNCBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gc3RhdGUgJXUgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIHN0YXRlLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gc3RhdGUgJXUgIgorCQkid2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCXN0YXRlLCBjb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlkbyB7CiAJCWlmIChyZXRyeSkgewotCQkJZHByaW50aygicmV0cnkgJXUsIHByZXZpb3VzIHJlc3VsdCAldSwgd2FpdGluZy4uLlxuIiwgcmV0cnksIHJlc3VsdCk7CisJCQlkcHJpbnRrKCJyZXRyeSAldSwgcHJldmlvdXMgcmVzdWx0ICV1LCB3YWl0aW5nLi4uXG4iLAorCQkJCQlyZXRyeSwgcmVzdWx0KTsKIAkJCW1kZWxheShyZXRyeSAqIDUwKTsKIAkJfQogCQlyZXRyeSsrOwpAQCAtMTkyLDIwICsyMTAsMjYgQEAKIAkJCSJwdXNoICUlZWJwXG4iCiAJCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkJInBvcCAlJWVicCIKLQkJCTogIj1iIiAobmV3X3N0YXRlKSwgIj1EIiAocmVzdWx0KSwgIj1jIiAoZHVtbXkpLCAiPWEiIChkdW1teSksCi0JCQkJIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKLQkJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQorCQkJOiAiPWIiIChuZXdfc3RhdGUpLCAiPUQiIChyZXN1bHQpLAorCQkJICAiPWMiIChkdW1teSksICI9YSIgKGR1bW15KSwKKwkJCSAgIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKKwkJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLAorCQkJICAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQogCQkJKTsKIAl9IHdoaWxlICgobmV3X3N0YXRlICE9IHN0YXRlKSAmJiAocmV0cnkgPD0gU01JX1RSSUVTKSk7CiAKIAkvKiBlbmFibGUgSVJRcyAqLwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCWlmIChuZXdfc3RhdGUgPT0gc3RhdGUpIHsKLQkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWQgYWZ0ZXIgJXUgdHJpZXMgd2l0aCByZXN1bHQgJXVcbiIsIChzcGVlZHN0ZXBfZnJlcXNbbmV3X3N0YXRlXS5mcmVxdWVuY3kgLyAxMDAwKSwgcmV0cnksIHJlc3VsdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgdG8gc3RhdGUgJXUgZmFpbGVkIHdpdGggbmV3X3N0YXRlICV1IGFuZCByZXN1bHQgJXVcbiIsIHN0YXRlLCBuZXdfc3RhdGUsIHJlc3VsdCk7Ci0JfQorCWlmIChuZXdfc3RhdGUgPT0gc3RhdGUpCisJCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkIGFmdGVyICV1IHRyaWVzICIKKwkJCSJ3aXRoIHJlc3VsdCAldVxuIiwKKwkJCShzcGVlZHN0ZXBfZnJlcXNbbmV3X3N0YXRlXS5mcmVxdWVuY3kgLyAxMDAwKSwKKwkJCXJldHJ5LCByZXN1bHQpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgdG8gc3RhdGUgJXUgIgorCQkJImZhaWxlZCB3aXRoIG5ld19zdGF0ZSAldSBhbmQgcmVzdWx0ICV1XG4iLAorCQkJc3RhdGUsIG5ld19zdGF0ZSwgcmVzdWx0KTsKIAogCXJldHVybjsKIH0KQEAgLTIxOSwxMyArMjQzLDE0IEBACiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS9mcmVxLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLCB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlID0gMDsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZyZXFzLm9sZCA9IHNwZWVkc3RlcF9mcmVxc1tzcGVlZHN0ZXBfZ2V0X3N0YXRlKCldLmZyZXF1ZW5jeTsKQEAgLTI1MCw3ICsyNzUsNyBAQAogICogTGltaXQgbXVzdCBiZSB3aXRoaW4gc3BlZWRzdGVwX2xvd19mcmVxIGFuZCBzcGVlZHN0ZXBfaGlnaF9mcmVxLCB3aXRoCiAgKiBhdCBsZWFzdCBvbmUgYm9yZGVyIGluY2x1ZGVkLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdKTsKIH0KQEAgLTI1OSw3ICsyODQsOCBAQAogc3RhdGljIGludCBzcGVlZHN0ZXBfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJlc3VsdDsKLQl1bnNpZ25lZCBpbnQgc3BlZWQsc3RhdGU7CisJdW5zaWduZWQgaW50IHNwZWVkLCBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgKmxvdywgKmhpZ2g7CiAKIAkvKiBjYXBhYmlsaXR5IGNoZWNrICovCiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCkBAIC0yNzIsMTkgKzI5OCwyMyBAQAogCX0KIAogCS8qIGRldGVjdCBsb3cgYW5kIGhpZ2ggZnJlcXVlbmN5ICovCi0JcmVzdWx0ID0gc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXMoJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3ksCi0JCQkJJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5KTsKKwlsb3cgPSAmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeTsKKwloaWdoID0gJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5OworCisJcmVzdWx0ID0gc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXMobG93LCBoaWdoKTsKIAlpZiAocmVzdWx0KSB7Ci0JCS8qIGZhbGwgYmFjayB0byBzcGVlZHN0ZXBfbGliLmMgZGVjdGlvbiBtZWNoYW5pc206IHRyeSBib3RoIHN0YXRlcyBvdXQgKi8KLQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCBsb3cgYW5kIGhpZ2ggZnJlcXVlbmNpZXMgYnkgU01JIGNhbGwuXG4iKTsKKwkJLyogZmFsbCBiYWNrIHRvIHNwZWVkc3RlcF9saWIuYyBkZWN0aW9uIG1lY2hhbmlzbToKKwkJICogdHJ5IGJvdGggc3RhdGVzIG91dCAqLworCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyAiCisJCQkJImJ5IFNNSSBjYWxsLlxuIik7CiAJCXJlc3VsdCA9IHNwZWVkc3RlcF9nZXRfZnJlcXMoc3BlZWRzdGVwX3Byb2Nlc3NvciwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3ksCisJCQkJbG93LCBoaWdoLAogCQkJCU5VTEwsCiAJCQkJJnNwZWVkc3RlcF9zZXRfc3RhdGUpOwogCiAJCWlmIChyZXN1bHQpIHsKLQkJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgdHdvIGRpZmZlcmVudCBzcGVlZHMgLS0gYWJvcnRpbmcuXG4iKTsKKwkJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgdHdvIGRpZmZlcmVudCBzcGVlZHMiCisJCQkJCSIgLS0gYWJvcnRpbmcuXG4iKTsKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0gZWxzZQogCQkJZHByaW50aygid29ya2Fyb3VuZCB3b3JrZWQuXG4iKTsKQEAgLTI5NSw3ICszMjUsOCBAQAogCXNwZWVkID0gc3BlZWRzdGVwX2ZyZXFzW3N0YXRlXS5mcmVxdWVuY3k7CiAKIAlkcHJpbnRrKCJjdXJyZW50bHkgYXQgJXMgc3BlZWQgc2V0dGluZyAtICVpIE1IelxuIiwKLQkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpID8gImxvdyIgOiAiaGlnaCIsCisJCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KQorCQk/ICJsb3ciIDogImhpZ2giLAogCQkoc3BlZWQgLyAxMDAwKSk7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KQEAgLTMwNCw3ICszMzUsNyBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNwZWVkc3RlcF9mcmVxcyk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKQEAgLTMyMSw3ICszNTIsNyBAQAogewogCWlmIChjcHUpCiAJCXJldHVybiAtRU5PREVWOwotCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CisJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOwogfQogCiAKQEAgLTMzNSw3ICszNjYsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBzcGVlZHN0ZXBfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnNwZWVkc3RlcF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMzY0LDIxICszOTUsMjMgQEAKIAlzcGVlZHN0ZXBfcHJvY2Vzc29yID0gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKTsKIAogCXN3aXRjaCAoc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1Q6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQzoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX1Q6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfQzoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVlZHN0ZXBfcHJvY2Vzc29yID0gMDsKIAl9CiAKIAlpZiAoIXNwZWVkc3RlcF9wcm9jZXNzb3IpIHsKLQkJZHByaW50ayAoIk5vIHN1cHBvcnRlZCBJbnRlbCBDUFUgZGV0ZWN0ZWQuXG4iKTsKKwkJZHByaW50aygiTm8gc3VwcG9ydGVkIEludGVsIENQVSBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkcHJpbnRrKCJzaWduYXR1cmU6MHglLjhseCwgY29tbWFuZDoweCUuOGx4LCBldmVudDoweCUuOGx4LCBwZXJmX2xldmVsOjB4JS44bHguXG4iLAotCQlpc3RfaW5mby5zaWduYXR1cmUsIGlzdF9pbmZvLmNvbW1hbmQsIGlzdF9pbmZvLmV2ZW50LCBpc3RfaW5mby5wZXJmX2xldmVsKTsKKwlkcHJpbnRrKCJzaWduYXR1cmU6MHglLjhseCwgY29tbWFuZDoweCUuOGx4LCAiCisJCSJldmVudDoweCUuOGx4LCBwZXJmX2xldmVsOjB4JS44bHguXG4iLAorCQlpc3RfaW5mby5zaWduYXR1cmUsIGlzdF9pbmZvLmNvbW1hbmQsCisJCWlzdF9pbmZvLmV2ZW50LCBpc3RfaW5mby5wZXJmX2xldmVsKTsKIAogCS8qIEVycm9yIGlmIG5vIElTVC1TTUkgQklPUyBvciBubyBQQVJNCiAJCSBzaWc9ICdJU0dFJyBha2EgJ0ludGVsIFNwZWVkc3RlcCBHYXRlIEUnICovCkBAIC00MTYsMTcgKzQ0OSwyMCBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwZWVkc3RlcF9kcml2ZXIpOwogfQogCi1tb2R1bGVfcGFyYW0oc21pX3BvcnQsICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHNtaV9jbWQsICAgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShzbWlfc2lnLCAgdWludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oc21pX3BvcnQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oc21pX2NtZCwgIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oc21pX3NpZywgdWludCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0Moc21pX3BvcnQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgcG9ydCB3aXRoIHRoaXMgdmFsdWUgLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHhiMiIpOwotTU9EVUxFX1BBUk1fREVTQyhzbWlfY21kLCAiT3ZlcnJpZGUgdGhlIEJJT1MtZ2l2ZW4gSVNUIGNvbW1hbmQgd2l0aCB0aGlzIHZhbHVlIC0tIEludGVsJ3MgZGVmYXVsdCBzZXR0aW5nIGlzIDB4ODIiKTsKLU1PRFVMRV9QQVJNX0RFU0Moc21pX3NpZywgIlNldCB0byAxIHRvIGZha2UgdGhlIElTVCBzaWduYXR1cmUgd2hlbiB1c2luZyB0aGUgU01JIGludGVyZmFjZS4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc21pX3BvcnQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgcG9ydCB3aXRoIHRoaXMgdmFsdWUgIgorCQkiLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHhiMiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfY21kLCAiT3ZlcnJpZGUgdGhlIEJJT1MtZ2l2ZW4gSVNUIGNvbW1hbmQgd2l0aCB0aGlzIHZhbHVlICIKKwkJIi0tIEludGVsJ3MgZGVmYXVsdCBzZXR0aW5nIGlzIDB4ODIiKTsKK01PRFVMRV9QQVJNX0RFU0Moc21pX3NpZywgIlNldCB0byAxIHRvIGZha2UgdGhlIElTVCBzaWduYXR1cmUgd2hlbiB1c2luZyB0aGUgIgorCQkiU01JIGludGVyZmFjZS4iKTsKIAotTU9EVUxFX0FVVEhPUiAoIkhpcm9zaGkgTWl1cmEiKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIElTVCBhcHBsZXQgU01JIGludGVyZmFjZS4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIE1pdXJhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNwZWVkc3RlcCBkcml2ZXIgZm9yIElTVCBhcHBsZXQgU01JIGludGVyZmFjZS4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoc3BlZWRzdGVwX2luaXQpOwogbW9kdWxlX2V4aXQoc3BlZWRzdGVwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDI0ZmYyNmEuLjFhODlhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCkBAIC0yNCw3ICsyNSw2IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtNTYsMTMgKzU2LDMwIEBACiAKIAkvKgogCSAqIGMtPng4Nl9wb3dlciBpcyA4MDAwXzAwMDcgZWR4LiBCaXQgOCBpcyBUU0MgcnVucyBhdCBjb25zdGFudCByYXRlCi0JICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMKKwkgKiB3aXRoIFAvVCBzdGF0ZXMgYW5kIGRvZXMgbm90IHN0b3AgaW4gZGVlcCBDLXN0YXRlcy4KKwkgKgorCSAqIEl0IGlzIGFsc28gcmVsaWFibGUgYWNyb3NzIGNvcmVzIGFuZCBzb2NrZXRzLiAoYnV0IG5vdCBhY3Jvc3MKKwkgKiBjYWJpbmV0cyAtIHdlIHR1cm4gaXQgb2ZmIGluIHRoYXQgY2FzZSBleHBsaWNpdGx5LikKIAkgKi8KIAlpZiAoYy0+eDg2X3Bvd2VyICYgKDEgPDwgOCkpIHsKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpOworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOworCQlzY2hlZF9jbG9ja19zdGFibGUgPSAxOwogCX0KIAorCS8qCisJICogVGhlcmUgaXMgYSBrbm93biBlcnJhdHVtIG9uIFBlbnRpdW0gSUlJIGFuZCBDb3JlIFNvbG8KKwkgKiBhbmQgQ29yZSBEdW8gQ1BVcy4KKwkgKiAiIFBhZ2Ugd2l0aCBQQVQgc2V0IHRvIFdDIHdoaWxlIGFzc29jaWF0ZWQgTVRSUiBpcyBVQworCSAqICAgbWF5IGNvbnNvbGlkYXRlIHRvIFVDICIKKwkgKiBCZWNhdXNlIG9mIHRoaXMgZXJyYXR1bSwgaXQgaXMgYmV0dGVyIHRvIHN0aWNrIHdpdGgKKwkgKiBzZXR0aW5nIFdDIGluIE1UUlIgcmF0aGVyIHRoYW4gdXNpbmcgUEFUIG9uIHRoZXNlIENQVXMuCisJICoKKwkgKiBFbmFibGUgUEFUIFdDIG9ubHkgb24gUDQsIENvcmUgMiBvciBsYXRlciBDUFVzLgorCSAqLworCWlmIChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPCAxNSkKKwkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QQVQpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtMTM1LDEwICsxNTIsMTAgQEAKIAkgKi8KIAlpZiAoKGMtPng4NiA9PSAxNSkgJiYgKGMtPng4Nl9tb2RlbCA9PSAxKSAmJiAoYy0+eDg2X21hc2sgPT0gMSkpIHsKIAkJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGxvLCBoaSk7Ci0JCWlmICgobG8gJiAoMTw8OSkpID09IDApIHsKKwkJaWYgKChsbyAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX1BSRUZFVENIX0RJU0FCTEUpID09IDApIHsKIAkJCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IEMwIHN0ZXBwaW5nIFA0IFhlb24gZGV0ZWN0ZWQuXG4iKTsKIAkJCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IERpc2FibGluZyBoYXJkd2FyZSBwcmVmZXRjaGluZyAoRXJyYXRhIDAzNylcbiIpOwotCQkJbG8gfD0gKDE8PDkpOwkvKiBEaXNhYmxlIGh3IHByZWZldGNoaW5nICovCisJCQlsbyB8PSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9QUkVGRVRDSF9ESVNBQkxFOwogCQkJd3Jtc3IgKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsbywgaGkpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggZGEyOTllYi4uNzI5MzUwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xNDcsNyArMTQ3LDE2IEBACiAJdW5pb24gX2NwdWlkNF9sZWFmX2VjeCBlY3g7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgY2FuX2Rpc2FibGU7Ci0JY3B1bWFza190IHNoYXJlZF9jcHVfbWFwOwkvKiBmdXR1cmU/OiBvbmx5IGNwdXMvbm9kZSBpcyBuZWVkZWQgKi8KKwlERUNMQVJFX0JJVE1BUChzaGFyZWRfY3B1X21hcCwgTlJfQ1BVUyk7Cit9OworCisvKiBzdWJzZXQgb2YgYWJvdmUgX2NwdWlkNF9pbmZvIHcvbyBzaGFyZWRfY3B1X21hcCAqLworc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzIHsKKwl1bmlvbiBfY3B1aWQ0X2xlYWZfZWF4IGVheDsKKwl1bmlvbiBfY3B1aWQ0X2xlYWZfZWJ4IGVieDsKKwl1bmlvbiBfY3B1aWQ0X2xlYWZfZWN4IGVjeDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBjYW5fZGlzYWJsZTsKIH07CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC0yNzgsNyArMjg3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0Ci1hbWRfY2hlY2tfbDNfZGlzYWJsZShpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZikKK2FtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCiB7CiAJaWYgKGluZGV4IDwgMykKIAkJcmV0dXJuOwpAQCAtMjg2LDcgKzI5NSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLV9fY3B1aW5pdCBjcHVpZDRfY2FjaGVfbG9va3VwKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmKQorX19jcHVpbml0IGNwdWlkNF9jYWNoZV9sb29rdXBfcmVncyhpbnQgaW5kZXgsCisJCQkJICAgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCiB7CiAJdW5pb24gX2NwdWlkNF9sZWFmX2VheCAJZWF4OwogCXVuaW9uIF9jcHVpZDRfbGVhZl9lYnggCWVieDsKQEAgLTMxNCw2ICszMjQsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorX19jcHVpbml0IGNwdWlkNF9jYWNoZV9sb29rdXAoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYpCit7CisJc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICpsZWFmX3JlZ3MgPQorCQkoc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICopdGhpc19sZWFmOworCisJcmV0dXJuIGNwdWlkNF9jYWNoZV9sb29rdXBfcmVncyhpbmRleCwgbGVhZl9yZWdzKTsKK30KKwogc3RhdGljIGludCBfX2NwdWluaXQgZmluZF9udW1fY2FjaGVfbGVhdmVzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50CQllYXgsIGVieCwgZWN4LCBlZHg7CkBAIC0zNTMsMTEgKzM3MiwxMCBAQAogCQkgKiBwYXJhbWV0ZXJzIGNwdWlkIGxlYWYgdG8gZmluZCB0aGUgY2FjaGUgZGV0YWlscwogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IG51bV9jYWNoZV9sZWF2ZXM7IGkrKykgewotCQkJc3RydWN0IF9jcHVpZDRfaW5mbyB0aGlzX2xlYWY7Ci0KKwkJCXN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyB0aGlzX2xlYWY7CiAJCQlpbnQgcmV0dmFsOwogCi0JCQlyZXR2YWwgPSBjcHVpZDRfY2FjaGVfbG9va3VwKGksICZ0aGlzX2xlYWYpOworCQkJcmV0dmFsID0gY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGksICZ0aGlzX2xlYWYpOwogCQkJaWYgKHJldHZhbCA+PSAwKSB7CiAJCQkJc3dpdGNoKHRoaXNfbGVhZi5lYXguc3BsaXQubGV2ZWwpIHsKIAkJCQkgICAgY2FzZSAxOgpAQCAtNTA2LDE3ICs1MjQsMjAgQEAKIAludW1fdGhyZWFkc19zaGFyaW5nID0gMSArIHRoaXNfbGVhZi0+ZWF4LnNwbGl0Lm51bV90aHJlYWRzX3NoYXJpbmc7CiAKIAlpZiAobnVtX3RocmVhZHNfc2hhcmluZyA9PSAxKQotCQljcHVfc2V0KGNwdSwgdGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwogCWVsc2UgewogCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIobnVtX3RocmVhZHNfc2hhcmluZyk7CiAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CiAJCQlpZiAoY3B1X2RhdGEoaSkuYXBpY2lkID4+IGluZGV4X21zYiA9PQogCQkJICAgIGMtPmFwaWNpZCA+PiBpbmRleF9tc2IpIHsKLQkJCQljcHVfc2V0KGksIHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCQkJCWNwdW1hc2tfc2V0X2NwdShpLAorCQkJCQl0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKIAkJCQlpZiAoaSAhPSBjcHUgJiYgcGVyX2NwdShjcHVpZDRfaW5mbywgaSkpICB7Ci0JCQkJCXNpYmxpbmdfbGVhZiA9IENQVUlENF9JTkZPX0lEWChpLCBpbmRleCk7Ci0JCQkJCWNwdV9zZXQoY3B1LCBzaWJsaW5nX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKKwkJCQkJc2libGluZ19sZWFmID0KKwkJCQkJCUNQVUlENF9JTkZPX0lEWChpLCBpbmRleCk7CisJCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHRvX2NwdW1hc2soCisJCQkJCQlzaWJsaW5nX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC01MjgsOSArNTQ5LDEwIEBACiAJaW50IHNpYmxpbmc7CiAKIAl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoY3B1LCBpbmRleCk7Ci0JZm9yX2VhY2hfY3B1X21hc2tfbnIoc2libGluZywgdGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkgeworCWZvcl9lYWNoX2NwdShzaWJsaW5nLCB0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKSB7CiAJCXNpYmxpbmdfbGVhZiA9IENQVUlENF9JTkZPX0lEWChzaWJsaW5nLCBpbmRleCk7Ci0JCWNwdV9jbGVhcihjcHUsIHNpYmxpbmdfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsCisJCQkJICB0b19jcHVtYXNrKHNpYmxpbmdfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKIAl9CiB9CiAjZWxzZQpAQCAtNjM1LDggKzY1Nyw5IEBACiAJaW50IG4gPSAwOwogCiAJaWYgKGxlbiA+IDEpIHsKLQkJY3B1bWFza190ICptYXNrID0gJnRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXA7CisJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrOwogCisJCW1hc2sgPSB0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApOwogCQluID0gdHlwZT8KIAkJCWNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgbGVuLTIsIG1hc2spIDoKIAkJCWNwdW1hc2tfc2NucHJpbnRmKGJ1ZiwgbGVuLTIsIG1hc2spOwpAQCAtNjk5LDcgKzcyMiw4IEBACiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGZpcnN0X2NwdSh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSB0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1bWFza19maXJzdChtYXNrKSk7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAJc3NpemVfdCByZXQgPSAwOwogCWludCBpOwpAQCAtNzMzLDcgKzc1Nyw4IEBACiBzdG9yZV9jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY29uc3QgY2hhciAqYnVmLAogCQkgICAgc2l6ZV90IGNvdW50KQogewotCWludCBub2RlID0gY3B1X3RvX25vZGUoZmlyc3RfY3B1KHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CisJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHVtYXNrX2ZpcnN0KG1hc2spKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgcmV0LCBpbmRleCwgdmFsOwogCkBAIC04NzgsNyArOTAzLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGNwdW1hc2tfdCBjYWNoZV9kZXZfbWFwID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChjYWNoZV9kZXZfbWFwLCBOUl9DUFVTKTsKIAogLyogQWRkL1JlbW92ZSBjYWNoZSBpbnRlcmZhY2UgZm9yIENQVSBkZXZpY2UgKi8KIHN0YXRpYyBpbnQgX19jcHVpbml0IGNhY2hlX2FkZF9kZXYoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNfZGV2KQpAQCAtOTE4LDcgKzk0Myw3IEBACiAJCX0KIAkJa29iamVjdF91ZXZlbnQoJih0aGlzX29iamVjdC0+a29iaiksIEtPQkpfQUREKTsKIAl9Ci0JY3B1X3NldChjcHUsIGNhY2hlX2Rldl9tYXApOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpOwogCiAJa29iamVjdF91ZXZlbnQocGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CkBAIC05MzEsOSArOTU2LDkgQEAKIAogCWlmIChwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoIWNwdV9pc3NldChjcHUsIGNhY2hlX2Rldl9tYXApKQorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpKQogCQlyZXR1cm47Ci0JY3B1X2NsZWFyKGNwdSwgY2FjaGVfZGV2X21hcCk7CisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKGNhY2hlX2Rldl9tYXApKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2FjaGVfbGVhdmVzOyBpKyspCiAJCWtvYmplY3RfcHV0KCYoSU5ERVhfS09CSkVDVF9QVFIoY3B1LGkpLT5rb2JqKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKaW5kZXggZjJlZTBhZS4uOTgxNzUwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwpAQCAtNjcsNyArNjcsNyBAQAogc3RydWN0IHRocmVzaG9sZF9iYW5rIHsKIAlzdHJ1Y3Qga29iamVjdCAqa29iajsKIAlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICpibG9ja3M7Ci0JY3B1bWFza190IGNwdXM7CisJY3B1bWFza192YXJfdCBjcHVzOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhyZXNob2xkX2JhbmsgKiwgdGhyZXNob2xkX2JhbmtzW05SX0JBTktTXSk7CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkICYmIHNoYXJlZF9iYW5rW2JhbmtdKSB7CS8qIHN5bWxpbmsgKi8KLQkJaSA9IGZpcnN0X2NwdShwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CisJCWkgPSBjcHVtYXNrX2ZpcnN0KCZwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CiAKIAkJLyogZmlyc3QgY29yZSBub3QgdXAgeWV0ICovCiAJCWlmIChjcHVfZGF0YShpKS5jcHVfY29yZV9pZCkKQEAgLTUwMSw3ICs1MDEsNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJYi0+Y3B1cyA9IHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpOworCQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKIAkJcGVyX2NwdSh0aHJlc2hvbGRfYmFua3MsIGNwdSlbYmFua10gPSBiOwogCQlnb3RvIG91dDsKIAl9CkBAIC01MTIsMTUgKzUxMiwyMCBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmYi0+Y3B1cywgR0ZQX0tFUk5FTCkpIHsKKwkJa2ZyZWUoYik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCWItPmtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKG5hbWUsICZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSkua29iaik7CiAJaWYgKCFiLT5rb2JqKQogCQlnb3RvIG91dF9mcmVlOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLQliLT5jcHVzID0gQ1BVX01BU0tfQUxMOworCWNwdW1hc2tfc2V0YWxsKGItPmNwdXMpOwogI2Vsc2UKLQliLT5jcHVzID0gcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSk7CisJY3B1bWFza19jb3B5KGItPmNwdXMsICZwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CiAjZW5kaWYKIAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKQEAgLTUyOSw3ICs1MzQsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQlmb3JfZWFjaF9jcHVfbWFza19ucihpLCBiLT5jcHVzKSB7CisJZm9yX2VhY2hfY3B1KGksIGItPmNwdXMpIHsKIAkJaWYgKGkgPT0gY3B1KQogCQkJY29udGludWU7CiAKQEAgLTU0NSw2ICs1NTAsNyBAQAogCiBvdXRfZnJlZToKIAlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IE5VTEw7CisJZnJlZV9jcHVtYXNrX3ZhcihiLT5jcHVzKTsKIAlrZnJlZShiKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtNjE5LDcgKzYyNSw3IEBACiAjZW5kaWYKIAogCS8qIHJlbW92ZSBhbGwgc2libGluZyBzeW1saW5rcyBiZWZvcmUgdW5yZWdpc3RlcmluZyAqLwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIGItPmNwdXMpIHsKKwlmb3JfZWFjaF9jcHUoaSwgYi0+Y3B1cykgewogCQlpZiAoaSA9PSBjcHUpCiAJCQljb250aW51ZTsKIApAQCAtNjMyLDYgKzYzOCw3IEBACiBmcmVlX291dDoKIAlrb2JqZWN0X2RlbChiLT5rb2JqKTsKIAlrb2JqZWN0X3B1dChiLT5rb2JqKTsKKwlmcmVlX2NwdW1hc2tfdmFyKGItPmNwdXMpOwogCWtmcmVlKGIpOwogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKaW5kZXggZjQ0YzM2Ni4uYWE1ZTI4NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CkBAIC00OCwxMyArNDksMTMgQEAKIAkgKi8KIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7CiAJaCA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwotCWlmICgobCAmICgxIDw8IDMpKSAmJiAoaCAmIEFQSUNfRE1fU01JKSkgeworCWlmICgobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSkgJiYgKGggJiBBUElDX0RNX1NNSSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICJDUFUlZDogVGhlcm1hbCBtb25pdG9yaW5nIGhhbmRsZWQgYnkgU01JXG4iLCBjcHUpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfVE0yKSAmJiAobCAmICgxIDw8IDEzKSkpCisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfVE0yKSAmJiAobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMikpCiAJCXRtMiA9IDE7CiAKIAlpZiAoaCAmIEFQSUNfVkVDVE9SX01BU0spIHsKQEAgLTcyLDcgKzczLDcgQEAKIAl3cm1zcihNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQsIGwgfCAweDAzLCBoKTsKIAogCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsLCBoKTsKLQl3cm1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCB8ICgxIDw8IDMpLCBoKTsKKwl3cm1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCB8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSwgaCk7CiAKIAlsID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7CiAJYXBpY193cml0ZShBUElDX0xWVFRITVIsIGwgJiB+QVBJQ19MVlRfTUFTS0VEKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9wNC5jCmluZGV4IDliNjBmY2UuLmY1M2JkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDQuYwpAQCAtODUsNyArODUsNyBAQAogCSAqLwogCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsLCBoKTsKIAloID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0JaWYgKChsICYgKDE8PDMpKSAmJiAoaCAmIEFQSUNfRE1fU01JKSkgeworCWlmICgobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSkgJiYgKGggJiBBUElDX0RNX1NNSSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkNQVSVkOiBUaGVybWFsIG1vbml0b3JpbmcgaGFuZGxlZCBieSBTTUlcbiIsCiAJCQkJY3B1KTsKIAkJcmV0dXJuOyAvKiAtRUJVU1kgKi8KQEAgLTExMSw3ICsxMTEsNyBAQAogCXZlbmRvcl90aGVybWFsX2ludGVycnVwdCA9IGludGVsX3RoZXJtYWxfaW50ZXJydXB0OwogCiAJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwotCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsIHwgKDE8PDMpLCBoKTsKKwl3cm1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCB8IE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSwgaCk7CiAKIAlsID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7CiAJYXBpY193cml0ZShBUElDX0xWVFRITVIsIGwgJiB+QVBJQ19MVlRfTUFTS0VEKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggOWFiZDQ4Yi4uZjZjNzBhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAKLSNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2ludGVsX2FyY2hfcGVyZm1vbi5oPgogCiBzdHJ1Y3Qgbm1pX3dhdGNoZG9nX2N0bGJsayB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IDAxYjEyNDQuLmQ2N2UwZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCkBAIC03LDExICs3LDEwIEBACiAvKgogICoJR2V0IENQVSBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IHRoZSBwcm9jZnMuCiAgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBzdGF0aWMgdm9pZCBzaG93X2NwdWluZm9fY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcHVpbmZvX3g4NiAqYywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9IVAorI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MgPiAxKSB7CiAJCXNlcV9wcmludGYobSwgInBoeXNpY2FsIGlkXHQ6ICVkXG4iLCBjLT5waHlzX3Byb2NfaWQpOwogCQlzZXFfcHJpbnRmKG0sICJzaWJsaW5nc1x0OiAlZFxuIiwKQEAgLTI0LDYgKzIzLDcgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogc3RhdGljIHZvaWQgc2hvd19jcHVpbmZvX21pc2Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJLyoKQEAgLTUwLDIyICs1MCw2IEBACiAJCSAgIGMtPndwX3dvcmtzX29rID8gInllcyIgOiAibm8iKTsKIH0KICNlbHNlCi1zdGF0aWMgdm9pZCBzaG93X2NwdWluZm9fY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcHVpbmZvX3g4NiAqYywKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncyA+IDEpIHsKLQkJc2VxX3ByaW50ZihtLCAicGh5c2ljYWwgaWRcdDogJWRcbiIsIGMtPnBoeXNfcHJvY19pZCk7Ci0JCXNlcV9wcmludGYobSwgInNpYmxpbmdzXHQ6ICVkXG4iLAotCQkJICAgY3B1c193ZWlnaHQocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpKTsKLQkJc2VxX3ByaW50ZihtLCAiY29yZSBpZFx0XHQ6ICVkXG4iLCBjLT5jcHVfY29yZV9pZCk7Ci0JCXNlcV9wcmludGYobSwgImNwdSBjb3Jlc1x0OiAlZFxuIiwgYy0+Ym9vdGVkX2NvcmVzKTsKLQkJc2VxX3ByaW50ZihtLCAiYXBpY2lkXHRcdDogJWRcbiIsIGMtPmFwaWNpZCk7Ci0JCXNlcV9wcmludGYobSwgImluaXRpYWwgYXBpY2lkXHQ6ICVkXG4iLCBjLT5pbml0aWFsX2FwaWNpZCk7Ci0JfQotI2VuZGlmCi19Ci0KIHN0YXRpYyB2b2lkIHNob3dfY3B1aW5mb19taXNjKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXNlcV9wcmludGYobSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaC5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKaW5kZXggYzY4OWQxOS4uZmY5NTgyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKQEAgLTI0LDEyICsyNCwxMCBAQAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vdmlydGV4dC5oPgogCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLQogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCmluZGV4IDZiMWY2ZjYuLjg3ZDEwM2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJCQlmcmFtZSA9IGZyYW1lLT5uZXh0X2ZyYW1lOwogCQkJCWJwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCQkJfSBlbHNlIHsKLQkJCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkciwgYnAgPT0gMCk7CisJCQkJb3BzLT5hZGRyZXNzKGRhdGEsIGFkZHIsIDApOwogCQkJfQogCQkJcHJpbnRfZnRyYWNlX2dyYXBoX2FkZHIoYWRkciwgZGF0YSwgb3BzLCB0aW5mbywgZ3JhcGgpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggYzMwMmQwNy4uZDM1ZGI1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMTA2LDcgKzEwNiw4IEBACiAJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhKQogewogCWNvbnN0IHVuc2lnbmVkIGNwdSA9IGdldF9jcHUoKTsKLQl1bnNpZ25lZCBsb25nICppcnFzdGFja19lbmQgPSAodW5zaWduZWQgbG9uZyAqKWNwdV9wZGEoY3B1KS0+aXJxc3RhY2twdHI7CisJdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrX2VuZCA9CisJCSh1bnNpZ25lZCBsb25nICopcGVyX2NwdShpcnFfc3RhY2tfcHRyLCBjcHUpOwogCXVuc2lnbmVkIHVzZWQgPSAwOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAJaW50IGdyYXBoID0gMDsKQEAgLTE2MCwyMyArMTYxLDIzIEBACiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIGVzdGFja19lbmRbLTJdOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGlycXN0YWNrX2VuZCkgewotCQkJdW5zaWduZWQgbG9uZyAqaXJxc3RhY2s7Ci0JCQlpcnFzdGFjayA9IGlycXN0YWNrX2VuZCAtCi0JCQkJKElSUVNUQUNLU0laRSAtIDY0KSAvIHNpemVvZigqaXJxc3RhY2spOworCQlpZiAoaXJxX3N0YWNrX2VuZCkgeworCQkJdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrOworCQkJaXJxX3N0YWNrID0gaXJxX3N0YWNrX2VuZCAtCisJCQkJKElSUV9TVEFDS19TSVpFIC0gNjQpIC8gc2l6ZW9mKCppcnFfc3RhY2spOwogCi0JCQlpZiAoc3RhY2sgPj0gaXJxc3RhY2sgJiYgc3RhY2sgPCBpcnFzdGFja19lbmQpIHsKKwkJCWlmIChzdGFjayA+PSBpcnFfc3RhY2sgJiYgc3RhY2sgPCBpcnFfc3RhY2tfZW5kKSB7CiAJCQkJaWYgKG9wcy0+c3RhY2soZGF0YSwgIklSUSIpIDwgMCkKIAkJCQkJYnJlYWs7CiAJCQkJYnAgPSBwcmludF9jb250ZXh0X3N0YWNrKHRpbmZvLCBzdGFjaywgYnAsCi0JCQkJCW9wcywgZGF0YSwgaXJxc3RhY2tfZW5kLCAmZ3JhcGgpOworCQkJCQlvcHMsIGRhdGEsIGlycV9zdGFja19lbmQsICZncmFwaCk7CiAJCQkJLyoKIAkJCQkgKiBXZSBsaW5rIHRvIHRoZSBuZXh0IHN0YWNrICh3aGljaCB3b3VsZCBiZQogCQkJCSAqIHRoZSBwcm9jZXNzIHN0YWNrIG5vcm1hbGx5KSB0aGUgbGFzdAogCQkJCSAqIHBvaW50ZXIgKGluZGV4IC0xIHRvIGVuZCkgaW4gdGhlIElSUSBzdGFjazoKIAkJCQkgKi8KLQkJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIChpcnFzdGFja19lbmRbLTFdKTsKLQkJCQlpcnFzdGFja19lbmQgPSBOVUxMOworCQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgKGlycV9zdGFja19lbmRbLTFdKTsKKwkJCQlpcnFfc3RhY2tfZW5kID0gTlVMTDsKIAkJCQlvcHMtPnN0YWNrKGRhdGEsICJFT0kiKTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTE5OSwxMCArMjAwLDEwIEBACiAJdW5zaWduZWQgbG9uZyAqc3RhY2s7CiAJaW50IGk7CiAJY29uc3QgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBsb25nICppcnFzdGFja19lbmQgPQotCQkodW5zaWduZWQgbG9uZyAqKSAoY3B1X3BkYShjcHUpLT5pcnFzdGFja3B0cik7Ci0JdW5zaWduZWQgbG9uZyAqaXJxc3RhY2sgPQotCQkodW5zaWduZWQgbG9uZyAqKSAoY3B1X3BkYShjcHUpLT5pcnFzdGFja3B0ciAtIElSUVNUQUNLU0laRSk7CisJdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrX2VuZCA9CisJCSh1bnNpZ25lZCBsb25nICopKHBlcl9jcHUoaXJxX3N0YWNrX3B0ciwgY3B1KSk7CisJdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrID0KKwkJKHVuc2lnbmVkIGxvbmcgKikocGVyX2NwdShpcnFfc3RhY2tfcHRyLCBjcHUpIC0gSVJRX1NUQUNLX1NJWkUpOwogCiAJLyoKIAkgKiBkZWJ1Z2dpbmcgYWlkOiAic2hvd19zdGFjayhOVUxMLCBOVUxMKTsiIHByaW50cyB0aGUKQEAgLTIxOCw5ICsyMTksOSBAQAogCiAJc3RhY2sgPSBzcDsKIAlmb3IgKGkgPSAwOyBpIDwga3N0YWNrX2RlcHRoX3RvX3ByaW50OyBpKyspIHsKLQkJaWYgKHN0YWNrID49IGlycXN0YWNrICYmIHN0YWNrIDw9IGlycXN0YWNrX2VuZCkgewotCQkJaWYgKHN0YWNrID09IGlycXN0YWNrX2VuZCkgewotCQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgKGlycXN0YWNrX2VuZFstMV0pOworCQlpZiAoc3RhY2sgPj0gaXJxX3N0YWNrICYmIHN0YWNrIDw9IGlycV9zdGFja19lbmQpIHsKKwkJCWlmIChzdGFjayA9PSBpcnFfc3RhY2tfZW5kKSB7CisJCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSAoaXJxX3N0YWNrX2VuZFstMV0pOwogCQkJCXByaW50aygiIDxFT0k+ICIpOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjQxLDcgKzI0Miw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBzcDsKIAljb25zdCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyID0gY3B1X3BkYShjcHUpLT5wY3VycmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1ciA9IGN1cnJlbnQ7CiAKIAlzcCA9IHJlZ3MtPnNwOwogCXByaW50aygiQ1BVICVkICIsIGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCBlODU4MjY4Li41MDhiZWMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTg1OCw2ICs4NTgsOSBAQAogICovCiB2b2lkIF9faW5pdCByZXNlcnZlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSkKIHsKKwlpZiAoc3RhcnQgPj0gZW5kKQorCQlyZXR1cm47CisKIAlkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKHN0YXJ0LCBlbmQpOwogCV9fcmVzZXJ2ZV9lYXJseShzdGFydCwgZW5kLCBuYW1lLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCA1MDRhZDE5Li42MzlhZDk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0xMyw4ICsxMyw4IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8eGVuL2h2Yy1jb25zb2xlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9laGNpX2RlZi5oPgogCiAvKiBTaW1wbGUgVkdBIG91dHB1dCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGViMWVmM2IuLjE3MzZhY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTM2NiwxMCArMzY2LDEyIEBACiAJCQkJCVNNQklPU19UQUJMRV9HVUlEKSkgewogCQkJZWZpLnNtYmlvcyA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CiAJCQlwcmludGsoIiBTTUJJT1M9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CisjaWZkZWYgQ09ORklHX1g4Nl9VVgogCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChjb25maWdfdGFibGVzW2ldLmd1aWQsCiAJCQkJCVVWX1NZU1RFTV9UQUJMRV9HVUlEKSkgewogCQkJZWZpLnV2X3N5c3RhYiA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CiAJCQlwcmludGsoIiBVVnN5c3RhYj0weCVseCAiLCBjb25maWdfdGFibGVzW2ldLnRhYmxlKTsKKyNlbmRpZgogCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChjb25maWdfdGFibGVzW2ldLmd1aWQsCiAJCQkJCUhDRFBfVEFCTEVfR1VJRCkpIHsKIAkJCWVmaS5oY2RwID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmlfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmlfNjQuYwppbmRleCBjYjc4M2I5Li4yMmMzYjc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaV82NC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2VmaS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogCiBzdGF0aWMgcGdkX3Qgc2F2ZV9wZ2QgX19pbml0ZGF0YTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmaV9mbGFncyBfX2luaXRkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaV9zdHViXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfMzIuUwppbmRleCBlZjAwYmI3Li5mYmU2NmU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfMzIuUwpAQCAtNiw3ICs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KIAogLyoKICAqIGVmaV9jYWxsX3BoeXModm9pZCAqLCAuLi4pIGlzIGEgZnVuY3Rpb24gd2l0aCB2YXJpYWJsZSBwYXJhbWV0ZXJzLgpAQCAtMTEzLDYgKzExMyw3IEBACiAJbW92bAkoJWVkeCksICVlY3gKIAlwdXNobAklZWN4CiAJcmV0CitFTkRQUk9DKGVmaV9jYWxsX3BoeXMpCiAucHJldmlvdXMKIAogLmRhdGEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmlfc3R1Yl82NC5TIGIvYXJjaC94ODYva2VybmVsL2VmaV9zdHViXzY0LlMKaW5kZXggOTliNDdkNC4uNGMwN2NjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaV9zdHViXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaV9zdHViXzY0LlMKQEAgLTQxLDYgKzQxLDcgQEAKIAlhZGRxICQzMiwgJXJzcAogCVJFU1RPUkVfWE1NCiAJcmV0CitFTkRQUk9DKGVmaV9jYWxsMCkKIAogRU5UUlkoZWZpX2NhbGwxKQogCVNBVkVfWE1NCkBAIC01MCw2ICs1MSw3IEBACiAJYWRkcSAkMzIsICVyc3AKIAlSRVNUT1JFX1hNTQogCXJldAorRU5EUFJPQyhlZmlfY2FsbDEpCiAKIEVOVFJZKGVmaV9jYWxsMikKIAlTQVZFX1hNTQpAQCAtNTksNiArNjEsNyBAQAogCWFkZHEgJDMyLCAlcnNwCiAJUkVTVE9SRV9YTU0KIAlyZXQKK0VORFBST0MoZWZpX2NhbGwyKQogCiBFTlRSWShlZmlfY2FsbDMpCiAJU0FWRV9YTU0KQEAgLTY5LDYgKzcyLDcgQEAKIAlhZGRxICQzMiwgJXJzcAogCVJFU1RPUkVfWE1NCiAJcmV0CitFTkRQUk9DKGVmaV9jYWxsMykKIAogRU5UUlkoZWZpX2NhbGw0KQogCVNBVkVfWE1NCkBAIC04MCw2ICs4NCw3IEBACiAJYWRkcSAkMzIsICVyc3AKIAlSRVNUT1JFX1hNTQogCXJldAorRU5EUFJPQyhlZmlfY2FsbDQpCiAKIEVOVFJZKGVmaV9jYWxsNSkKIAlTQVZFX1hNTQpAQCAtOTIsNiArOTcsNyBAQAogCWFkZHEgJDQ4LCAlcnNwCiAJUkVTVE9SRV9YTU0KIAlyZXQKK0VORFBST0MoZWZpX2NhbGw1KQogCiBFTlRSWShlZmlfY2FsbDYpCiAJU0FWRV9YTU0KQEAgLTEwNywzICsxMTMsNCBAQAogCWFkZHEgJDQ4LCAlcnNwCiAJUkVTVE9SRV9YTU0KIAlyZXQKK0VORFBST0MoZWZpX2NhbGw2KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUwppbmRleCA0NjQ2OTAyLi44OTllODkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUwpAQCAtMzAsMTIgKzMwLDEzIEBACiAgKgkxQyglZXNwKSAtICVkcwogICoJMjAoJWVzcCkgLSAlZXMKICAqCTI0KCVlc3ApIC0gJWZzCi0gKgkyOCglZXNwKSAtIG9yaWdfZWF4Ci0gKgkyQyglZXNwKSAtICVlaXAKLSAqCTMwKCVlc3ApIC0gJWNzCi0gKgkzNCglZXNwKSAtICVlZmxhZ3MKLSAqCTM4KCVlc3ApIC0gJW9sZGVzcAotICoJM0MoJWVzcCkgLSAlb2xkc3MKKyAqCTI4KCVlc3ApIC0gJWdzCQlzYXZlZCBpZmYgIUNPTkZJR19YODZfMzJfTEFaWV9HUworICoJMkMoJWVzcCkgLSBvcmlnX2VheAorICoJMzAoJWVzcCkgLSAlZWlwCisgKgkzNCglZXNwKSAtICVjcworICoJMzgoJWVzcCkgLSAlZWZsYWdzCisgKgkzQyglZXNwKSAtICVvbGRlc3AKKyAqCTQwKCVlc3ApIC0gJW9sZHNzCiAgKgogICogImN1cnJlbnQiIGlzIGluIHJlZ2lzdGVyICVlYnggZHVyaW5nIGFueSBzbG93IGVudHJpZXMuCiAgKi8KQEAgLTQ2LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgpAQCAtMTAxLDEyMSArMTAyLDIyMSBAQAogI2RlZmluZSByZXN1bWVfdXNlcnNwYWNlX3NpZwlyZXN1bWVfdXNlcnNwYWNlCiAjZW5kaWYKIAotI2RlZmluZSBTQVZFX0FMTCBcCi0JY2xkOyBcCi0JcHVzaGwgJWZzOyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIDA7Ki9cCi0JcHVzaGwgJWVzOyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCS8qQ0ZJX1JFTF9PRkZTRVQgZXMsIDA7Ki9cCi0JcHVzaGwgJWRzOyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCS8qQ0ZJX1JFTF9PRkZTRVQgZHMsIDA7Ki9cCi0JcHVzaGwgJWVheDsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0O1wKLQlDRklfUkVMX09GRlNFVCBlYXgsIDA7XAotCXB1c2hsICVlYnA7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JQ0ZJX1JFTF9PRkZTRVQgZWJwLCAwO1wKLQlwdXNobCAlZWRpOyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCUNGSV9SRUxfT0ZGU0VUIGVkaSwgMDtcCi0JcHVzaGwgJWVzaTsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0O1wKLQlDRklfUkVMX09GRlNFVCBlc2ksIDA7XAotCXB1c2hsICVlZHg7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JQ0ZJX1JFTF9PRkZTRVQgZWR4LCAwO1wKLQlwdXNobCAlZWN4OyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCUNGSV9SRUxfT0ZGU0VUIGVjeCwgMDtcCi0JcHVzaGwgJWVieDsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0O1wKLQlDRklfUkVMX09GRlNFVCBlYngsIDA7XAotCW1vdmwgJChfX1VTRVJfRFMpLCAlZWR4OyBcCi0JbW92bCAlZWR4LCAlZHM7IFwKLQltb3ZsICVlZHgsICVlczsgXAotCW1vdmwgJChfX0tFUk5FTF9QRVJDUFUpLCAlZWR4OyBcCi0JbW92bCAlZWR4LCAlZnMKKy8qCisgKiBVc2VyIGdzIHNhdmUvcmVzdG9yZQorICoKKyAqICVncyBpcyB1c2VkIGZvciB1c2VybGFuZCBUTFMgYW5kIGtlcm5lbCBvbmx5IHVzZXMgaXQgZm9yIHN0YWNrCisgKiBjYW5hcnkgd2hpY2ggaXMgcmVxdWlyZWQgdG8gYmUgYXQgJWdzOjIwIGJ5IGdjYy4gIFJlYWQgdGhlIGNvbW1lbnQKKyAqIGF0IHRoZSB0b3Agb2Ygc3RhY2twcm90ZWN0b3IuaCBmb3IgbW9yZSBpbmZvLgorICoKKyAqIExvY2FsIGxhYmVscyA5OCBhbmQgOTkgYXJlIHVzZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyX0xBWllfR1MKIAotI2RlZmluZSBSRVNUT1JFX0lOVF9SRUdTIFwKLQlwb3BsICVlYng7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCUNGSV9SRVNUT1JFIGVieDtcCi0JcG9wbCAlZWN4OwlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQlDRklfUkVTVE9SRSBlY3g7XAotCXBvcGwgJWVkeDsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JQ0ZJX1JFU1RPUkUgZWR4O1wKLQlwb3BsICVlc2k7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCUNGSV9SRVNUT1JFIGVzaTtcCi0JcG9wbCAlZWRpOwlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQlDRklfUkVTVE9SRSBlZGk7XAotCXBvcGwgJWVicDsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JQ0ZJX1JFU1RPUkUgZWJwO1wKLQlwb3BsICVlYXg7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCUNGSV9SRVNUT1JFIGVheAorIC8qIHVuZm9ydHVuYXRlbHkgcHVzaC9wb3AgY2FuJ3QgYmUgbm8tb3AgKi8KKy5tYWNybyBQVVNIX0dTCisJcHVzaGwgJDAKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorLmVuZG0KKy5tYWNybyBQT1BfR1MgcG9wPTAKKwlhZGRsICQoNCArIFxwb3ApLCAlZXNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC0oNCArIFxwb3ApCisuZW5kbQorLm1hY3JvIFBPUF9HU19FWAorLmVuZG0KIAotI2RlZmluZSBSRVNUT1JFX1JFR1MJXAotCVJFU1RPUkVfSU5UX1JFR1M7IFwKLTE6CXBvcGwgJWRzOwlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQkvKkNGSV9SRVNUT1JFIGRzOyovXAotMjoJcG9wbCAlZXM7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCS8qQ0ZJX1JFU1RPUkUgZXM7Ki9cCi0zOglwb3BsICVmczsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JLypDRklfUkVTVE9SRSBmczsqL1wKLS5wdXNoc2VjdGlvbiAuZml4dXAsImF4IjsJXAotNDoJbW92bCAkMCwoJWVzcCk7CVwKLQlqbXAgMWI7CQlcCi01Ogltb3ZsICQwLCglZXNwKTsJXAotCWptcCAyYjsJCVwKLTY6CW1vdmwgJDAsKCVlc3ApOwlcCi0Jam1wIDNiOwkJXAotLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAotCS5hbGlnbiA0OwlcCi0JLmxvbmcgMWIsNGI7CVwKLQkubG9uZyAyYiw1YjsJXAotCS5sb25nIDNiLDZiOwlcCisgLyogYWxsIHRoZSByZXN0IGFyZSBuby1vcCAqLworLm1hY3JvIFBUR1NfVE9fR1MKKy5lbmRtCisubWFjcm8gUFRHU19UT19HU19FWAorLmVuZG0KKy5tYWNybyBHU19UT19SRUcgcmVnCisuZW5kbQorLm1hY3JvIFJFR19UT19QVEdTIHJlZworLmVuZG0KKy5tYWNybyBTRVRfS0VSTkVMX0dTIHJlZworLmVuZG0KKworI2Vsc2UJLyogQ09ORklHX1g4Nl8zMl9MQVpZX0dTICovCisKKy5tYWNybyBQVVNIX0dTCisJcHVzaGwgJWdzCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwkvKkNGSV9SRUxfT0ZGU0VUIGdzLCAwKi8KKy5lbmRtCisKKy5tYWNybyBQT1BfR1MgcG9wPTAKKzk4Oglwb3BsICVncworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCS8qQ0ZJX1JFU1RPUkUgZ3MqLworICAuaWYgXHBvcCA8PiAwCisJYWRkICRccG9wLCAlZXNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC1ccG9wCisgIC5lbmRpZgorLmVuZG0KKy5tYWNybyBQT1BfR1NfRVgKKy5wdXNoc2VjdGlvbiAuZml4dXAsICJheCIKKzk5Ogltb3ZsICQwLCAoJWVzcCkKKwlqbXAgOThiCisuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKKwkuYWxpZ24gNAorCS5sb25nIDk4YiwgOTliCiAucG9wc2VjdGlvbgorLmVuZG0KIAotI2RlZmluZSBSSU5HMF9JTlRfRlJBTUUgXAotCUNGSV9TVEFSVFBST0Mgc2ltcGxlO1wKLQlDRklfU0lHTkFMX0ZSQU1FO1wKLQlDRklfREVGX0NGQSBlc3AsIDMqNDtcCi0JLypDRklfT0ZGU0VUIGNzLCAtMio0OyovXAorLm1hY3JvIFBUR1NfVE9fR1MKKzk4Ogltb3YgUFRfR1MoJWVzcCksICVncworLmVuZG0KKy5tYWNybyBQVEdTX1RPX0dTX0VYCisucHVzaHNlY3Rpb24gLmZpeHVwLCAiYXgiCis5OToJbW92bCAkMCwgUFRfR1MoJWVzcCkKKwlqbXAgOThiCisuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKKwkuYWxpZ24gNAorCS5sb25nIDk4YiwgOTliCisucG9wc2VjdGlvbgorLmVuZG0KKworLm1hY3JvIEdTX1RPX1JFRyByZWcKKwltb3ZsICVncywgXHJlZworCS8qQ0ZJX1JFR0lTVEVSIGdzLCBccmVnKi8KKy5lbmRtCisubWFjcm8gUkVHX1RPX1BUR1MgcmVnCisJbW92bCBccmVnLCBQVF9HUyglZXNwKQorCS8qQ0ZJX1JFTF9PRkZTRVQgZ3MsIFBUX0dTKi8KKy5lbmRtCisubWFjcm8gU0VUX0tFUk5FTF9HUyByZWcKKwltb3ZsICQoX19LRVJORUxfU1RBQ0tfQ0FOQVJZKSwgXHJlZworCW1vdmwgXHJlZywgJWdzCisuZW5kbQorCisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMl9MQVpZX0dTICovCisKKy5tYWNybyBTQVZFX0FMTAorCWNsZAorCVBVU0hfR1MKKwlwdXNobCAlZnMKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIDA7Ki8KKwlwdXNobCAlZXMKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCS8qQ0ZJX1JFTF9PRkZTRVQgZXMsIDA7Ki8KKwlwdXNobCAlZHMKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCS8qQ0ZJX1JFTF9PRkZTRVQgZHMsIDA7Ki8KKwlwdXNobCAlZWF4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlYXgsIDAKKwlwdXNobCAlZWJwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlYnAsIDAKKwlwdXNobCAlZWRpCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlZGksIDAKKwlwdXNobCAlZXNpCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlc2ksIDAKKwlwdXNobCAlZWR4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlZHgsIDAKKwlwdXNobCAlZWN4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlY3gsIDAKKwlwdXNobCAlZWJ4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlDRklfUkVMX09GRlNFVCBlYngsIDAKKwltb3ZsICQoX19VU0VSX0RTKSwgJWVkeAorCW1vdmwgJWVkeCwgJWRzCisJbW92bCAlZWR4LCAlZXMKKwltb3ZsICQoX19LRVJORUxfUEVSQ1BVKSwgJWVkeAorCW1vdmwgJWVkeCwgJWZzCisJU0VUX0tFUk5FTF9HUyAlZWR4CisuZW5kbQorCisubWFjcm8gUkVTVE9SRV9JTlRfUkVHUworCXBvcGwgJWVieAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVieAorCXBvcGwgJWVjeAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVjeAorCXBvcGwgJWVkeAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVkeAorCXBvcGwgJWVzaQorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVzaQorCXBvcGwgJWVkaQorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVkaQorCXBvcGwgJWVicAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVicAorCXBvcGwgJWVheAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCUNGSV9SRVNUT1JFIGVheAorLmVuZG0KKworLm1hY3JvIFJFU1RPUkVfUkVHUyBwb3A9MAorCVJFU1RPUkVfSU5UX1JFR1MKKzE6CXBvcGwgJWRzCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJLypDRklfUkVTVE9SRSBkczsqLworMjoJcG9wbCAlZXMKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKKwkvKkNGSV9SRVNUT1JFIGVzOyovCiszOglwb3BsICVmcworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCS8qQ0ZJX1JFU1RPUkUgZnM7Ki8KKwlQT1BfR1MgXHBvcAorLnB1c2hzZWN0aW9uIC5maXh1cCwgImF4IgorNDoJbW92bCAkMCwgKCVlc3ApCisJam1wIDFiCis1Ogltb3ZsICQwLCAoJWVzcCkKKwlqbXAgMmIKKzY6CW1vdmwgJDAsICglZXNwKQorCWptcCAzYgorLnNlY3Rpb24gX19leF90YWJsZSwgImEiCisJLmFsaWduIDQKKwkubG9uZyAxYiwgNGIKKwkubG9uZyAyYiwgNWIKKwkubG9uZyAzYiwgNmIKKy5wb3BzZWN0aW9uCisJUE9QX0dTX0VYCisuZW5kbQorCisubWFjcm8gUklORzBfSU5UX0ZSQU1FCisJQ0ZJX1NUQVJUUFJPQyBzaW1wbGUKKwlDRklfU0lHTkFMX0ZSQU1FCisJQ0ZJX0RFRl9DRkEgZXNwLCAzKjQKKwkvKkNGSV9PRkZTRVQgY3MsIC0yKjQ7Ki8KIAlDRklfT0ZGU0VUIGVpcCwgLTMqNAorLmVuZG0KIAotI2RlZmluZSBSSU5HMF9FQ19GUkFNRSBcCi0JQ0ZJX1NUQVJUUFJPQyBzaW1wbGU7XAotCUNGSV9TSUdOQUxfRlJBTUU7XAotCUNGSV9ERUZfQ0ZBIGVzcCwgNCo0O1wKLQkvKkNGSV9PRkZTRVQgY3MsIC0yKjQ7Ki9cCisubWFjcm8gUklORzBfRUNfRlJBTUUKKwlDRklfU1RBUlRQUk9DIHNpbXBsZQorCUNGSV9TSUdOQUxfRlJBTUUKKwlDRklfREVGX0NGQSBlc3AsIDQqNAorCS8qQ0ZJX09GRlNFVCBjcywgLTIqNDsqLwogCUNGSV9PRkZTRVQgZWlwLCAtMyo0CisuZW5kbQogCi0jZGVmaW5lIFJJTkcwX1BUUkVHU19GUkFNRSBcCi0JQ0ZJX1NUQVJUUFJPQyBzaW1wbGU7XAotCUNGSV9TSUdOQUxfRlJBTUU7XAotCUNGSV9ERUZfQ0ZBIGVzcCwgUFRfT0xERVNQLVBUX0VCWDtcCi0JLypDRklfT0ZGU0VUIGNzLCBQVF9DUy1QVF9PTERFU1A7Ki9cCi0JQ0ZJX09GRlNFVCBlaXAsIFBUX0VJUC1QVF9PTERFU1A7XAotCS8qQ0ZJX09GRlNFVCBlcywgUFRfRVMtUFRfT0xERVNQOyovXAotCS8qQ0ZJX09GRlNFVCBkcywgUFRfRFMtUFRfT0xERVNQOyovXAotCUNGSV9PRkZTRVQgZWF4LCBQVF9FQVgtUFRfT0xERVNQO1wKLQlDRklfT0ZGU0VUIGVicCwgUFRfRUJQLVBUX09MREVTUDtcCi0JQ0ZJX09GRlNFVCBlZGksIFBUX0VESS1QVF9PTERFU1A7XAotCUNGSV9PRkZTRVQgZXNpLCBQVF9FU0ktUFRfT0xERVNQO1wKLQlDRklfT0ZGU0VUIGVkeCwgUFRfRURYLVBUX09MREVTUDtcCi0JQ0ZJX09GRlNFVCBlY3gsIFBUX0VDWC1QVF9PTERFU1A7XAorLm1hY3JvIFJJTkcwX1BUUkVHU19GUkFNRQorCUNGSV9TVEFSVFBST0Mgc2ltcGxlCisJQ0ZJX1NJR05BTF9GUkFNRQorCUNGSV9ERUZfQ0ZBIGVzcCwgUFRfT0xERVNQLVBUX0VCWAorCS8qQ0ZJX09GRlNFVCBjcywgUFRfQ1MtUFRfT0xERVNQOyovCisJQ0ZJX09GRlNFVCBlaXAsIFBUX0VJUC1QVF9PTERFU1AKKwkvKkNGSV9PRkZTRVQgZXMsIFBUX0VTLVBUX09MREVTUDsqLworCS8qQ0ZJX09GRlNFVCBkcywgUFRfRFMtUFRfT0xERVNQOyovCisJQ0ZJX09GRlNFVCBlYXgsIFBUX0VBWC1QVF9PTERFU1AKKwlDRklfT0ZGU0VUIGVicCwgUFRfRUJQLVBUX09MREVTUAorCUNGSV9PRkZTRVQgZWRpLCBQVF9FREktUFRfT0xERVNQCisJQ0ZJX09GRlNFVCBlc2ksIFBUX0VTSS1QVF9PTERFU1AKKwlDRklfT0ZGU0VUIGVkeCwgUFRfRURYLVBUX09MREVTUAorCUNGSV9PRkZTRVQgZWN4LCBQVF9FQ1gtUFRfT0xERVNQCiAJQ0ZJX09GRlNFVCBlYngsIFBUX0VCWC1QVF9PTERFU1AKKy5lbmRtCiAKIEVOVFJZKHJldF9mcm9tX2ZvcmspCiAJQ0ZJX1NUQVJUUFJPQwpAQCAtMzYyLDYgKzQ2Myw3IEBACiAJeG9ybCAlZWJwLCVlYnAKIAlUUkFDRV9JUlFTX09OCiAxOgltb3YgIFBUX0ZTKCVlc3ApLCAlZnMKKwlQVEdTX1RPX0dTCiAJRU5BQkxFX0lOVEVSUlVQVFNfU1lTRVhJVAogCiAjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTApAQCAtNDEwLDYgKzUxMiw3IEBACiAJLmFsaWduIDQKIAkubG9uZyAxYiwyYgogLnBvcHNlY3Rpb24KKwlQVEdTX1RPX0dTX0VYCiBFTkRQUk9DKGlhMzJfc3lzZW50ZXJfdGFyZ2V0KQogCiAJIyBzeXN0ZW0gY2FsbCBoYW5kbGVyIHN0dWIKQEAgLTQ1Miw4ICs1NTUsNyBAQAogcmVzdG9yZV9ub2NoZWNrOgogCVRSQUNFX0lSUVNfSVJFVAogcmVzdG9yZV9ub2NoZWNrX25vdHJhY2U6Ci0JUkVTVE9SRV9SRUdTCi0JYWRkbCAkNCwgJWVzcAkJCSMgc2tpcCBvcmlnX2VheC9lcnJvcl9jb2RlCisJUkVTVE9SRV9SRUdTIDQJCQkjIHNraXAgb3JpZ19lYXgvZXJyb3JfY29kZQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAogaXJxX3JldHVybjoKIAlJTlRFUlJVUFRfUkVUVVJOCkBAIC01OTUsMjggKzY5Nyw1MCBAQAogRU5EKHN5c2NhbGxfYmFkc3lzKQogCUNGSV9FTkRQUk9DCiAKLSNkZWZpbmUgRklYVVBfRVNQRklYX1NUQUNLIFwKLQkvKiBzaW5jZSB3ZSBhcmUgb24gYSB3cm9uZyBzdGFjaywgd2UgY2FudCBtYWtlIGl0IGEgQyBjb2RlIDooICovIFwKLQlQRVJfQ1BVKGdkdF9wYWdlLCAlZWJ4KTsgXAotCUdFVF9ERVNDX0JBU0UoR0RUX0VOVFJZX0VTUEZJWF9TUywgJWVieCwgJWVheCwgJWF4LCAlYWwsICVhaCk7IFwKLQlhZGRsICVlc3AsICVlYXg7IFwKLQlwdXNobCAkX19LRVJORUxfRFM7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDsgXAotCXB1c2hsICVlYXg7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDsgXAotCWxzcyAoJWVzcCksICVlc3A7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTg7Ci0jZGVmaW5lIFVOV0lORF9FU1BGSVhfU1RBQ0sgXAotCW1vdmwgJXNzLCAlZWF4OyBcCi0JLyogc2VlIGlmIG9uIGVzcGZpeCBzdGFjayAqLyBcCi0JY21wdyAkX19FU1BGSVhfU1MsICVheDsgXAotCWpuZSAyN2Y7IFwKLQltb3ZsICRfX0tFUk5FTF9EUywgJWVheDsgXAotCW1vdmwgJWVheCwgJWRzOyBcCi0JbW92bCAlZWF4LCAlZXM7IFwKLQkvKiBzd2l0Y2ggdG8gbm9ybWFsIHN0YWNrICovIFwKLQlGSVhVUF9FU1BGSVhfU1RBQ0s7IFwKLTI3OjsKKy8qCisgKiBTeXN0ZW0gY2FsbHMgdGhhdCBuZWVkIGEgcHRfcmVncyBwb2ludGVyLgorICovCisjZGVmaW5lIFBUUkVHU0NBTEwobmFtZSkgXAorCUFMSUdOOyBcCitwdHJlZ3NfIyNuYW1lOiBcCisJbGVhbCA0KCVlc3ApLCVlYXg7IFwKKwlqbXAgc3lzXyMjbmFtZTsKKworUFRSRUdTQ0FMTChpb3BsKQorUFRSRUdTQ0FMTChmb3JrKQorUFRSRUdTQ0FMTChjbG9uZSkKK1BUUkVHU0NBTEwodmZvcmspCitQVFJFR1NDQUxMKGV4ZWN2ZSkKK1BUUkVHU0NBTEwoc2lnYWx0c3RhY2spCitQVFJFR1NDQUxMKHNpZ3JldHVybikKK1BUUkVHU0NBTEwocnRfc2lncmV0dXJuKQorUFRSRUdTQ0FMTCh2bTg2KQorUFRSRUdTQ0FMTCh2bTg2b2xkKQorCisubWFjcm8gRklYVVBfRVNQRklYX1NUQUNLCisJLyogc2luY2Ugd2UgYXJlIG9uIGEgd3Jvbmcgc3RhY2ssIHdlIGNhbnQgbWFrZSBpdCBhIEMgY29kZSA6KCAqLworCVBFUl9DUFUoZ2R0X3BhZ2UsICVlYngpCisJR0VUX0RFU0NfQkFTRShHRFRfRU5UUllfRVNQRklYX1NTLCAlZWJ4LCAlZWF4LCAlYXgsICVhbCwgJWFoKQorCWFkZGwgJWVzcCwgJWVheAorCXB1c2hsICRfX0tFUk5FTF9EUworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJcHVzaGwgJWVheAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJbHNzICglZXNwKSwgJWVzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAorLmVuZG0KKy5tYWNybyBVTldJTkRfRVNQRklYX1NUQUNLCisJbW92bCAlc3MsICVlYXgKKwkvKiBzZWUgaWYgb24gZXNwZml4IHN0YWNrICovCisJY21wdyAkX19FU1BGSVhfU1MsICVheAorCWpuZSAyN2YKKwltb3ZsICRfX0tFUk5FTF9EUywgJWVheAorCW1vdmwgJWVheCwgJWRzCisJbW92bCAlZWF4LCAlZXMKKwkvKiBzd2l0Y2ggdG8gbm9ybWFsIHN0YWNrICovCisJRklYVVBfRVNQRklYX1NUQUNLCisyNzoKKy5lbmRtCiAKIC8qCiAgKiBCdWlsZCB0aGUgZW50cnkgc3R1YnMgYW5kIHBvaW50ZXIgdGFibGUgd2l0aCBzb21lIGFzc2VtYmxlciBtYWdpYy4KQEAgLTY3Miw3ICs3OTYsNyBAQAogRU5EUFJPQyhjb21tb25faW50ZXJydXB0KQogCUNGSV9FTkRQUk9DCiAKLSNkZWZpbmUgQlVJTERfSU5URVJSVVBUKG5hbWUsIG5yKQlcCisjZGVmaW5lIEJVSUxEX0lOVEVSUlVQVDMobmFtZSwgbnIsIGZuKQlcCiBFTlRSWShuYW1lKQkJCQlcCiAJUklORzBfSU5UX0ZSQU1FOwkJXAogCXB1c2hsICR+KG5yKTsJCQlcCkBAIC02ODAsMTMgKzgwNCwxNSBAQAogCVNBVkVfQUxMOwkJCVwKIAlUUkFDRV9JUlFTX09GRgkJCVwKIAltb3ZsICVlc3AsJWVheDsJCQlcCi0JY2FsbCBzbXBfIyNuYW1lOwkJXAorCWNhbGwgZm47CQkJXAogCWptcCByZXRfZnJvbV9pbnRyOwkJXAogCUNGSV9FTkRQUk9DOwkJCVwKIEVORFBST0MobmFtZSkKIAorI2RlZmluZSBCVUlMRF9JTlRFUlJVUFQobmFtZSwgbnIpCUJVSUxEX0lOVEVSUlVQVDMobmFtZSwgbnIsIHNtcF8jI25hbWUpCisKIC8qIFRoZSBpbmNsdWRlIGlzIHdoZXJlIGFsbCBvZiB0aGUgU01QIGV0Yy4gaW50ZXJydXB0cyBjb21lIGZyb20gKi8KLSNpbmNsdWRlICJlbnRyeV9hcmNoLmgiCisjaW5jbHVkZSA8YXNtL2VudHJ5X2FyY2guaD4KIAogRU5UUlkoY29wcm9jZXNzb3JfZXJyb3IpCiAJUklORzBfSU5UX0ZSQU1FCkBAIC0xMDY4LDcgKzExOTQsMTAgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCUFMSUdOCiBlcnJvcl9jb2RlOgotCS8qIHRoZSBmdW5jdGlvbiBhZGRyZXNzIGlzIGluICVmcydzIHNsb3Qgb24gdGhlIHN0YWNrICovCisJLyogdGhlIGZ1bmN0aW9uIGFkZHJlc3MgaXMgaW4gJWdzJ3Mgc2xvdCBvbiB0aGUgc3RhY2sgKi8KKwlwdXNobCAlZnMKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIDAqLwogCXB1c2hsICVlcwogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJLypDRklfUkVMX09GRlNFVCBlcywgMCovCkBAIC0xMDk3LDIwICsxMjI2LDE1IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlDRklfUkVMX09GRlNFVCBlYngsIDAKIAljbGQKLQlwdXNobCAlZnMKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIDAqLwogCW1vdmwgJChfX0tFUk5FTF9QRVJDUFUpLCAlZWN4CiAJbW92bCAlZWN4LCAlZnMKIAlVTldJTkRfRVNQRklYX1NUQUNLCi0JcG9wbCAlZWN4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00Ci0JLypDRklfUkVHSVNURVIgZXMsIGVjeCovCi0JbW92bCBQVF9GUyglZXNwKSwgJWVkaQkJIyBnZXQgdGhlIGZ1bmN0aW9uIGFkZHJlc3MKKwlHU19UT19SRUcgJWVjeAorCW1vdmwgUFRfR1MoJWVzcCksICVlZGkJCSMgZ2V0IHRoZSBmdW5jdGlvbiBhZGRyZXNzCiAJbW92bCBQVF9PUklHX0VBWCglZXNwKSwgJWVkeAkjIGdldCB0aGUgZXJyb3IgY29kZQogCW1vdmwgJC0xLCBQVF9PUklHX0VBWCglZXNwKQkjIG5vIHN5c2NhbGwgdG8gcmVzdGFydAotCW1vdiAgJWVjeCwgUFRfRlMoJWVzcCkKLQkvKkNGSV9SRUxfT0ZGU0VUIGZzLCBFUyovCisJUkVHX1RPX1BUR1MgJWVjeAorCVNFVF9LRVJORUxfR1MgJWVjeAogCW1vdmwgJChfX1VTRVJfRFMpLCAlZWN4CiAJbW92bCAlZWN4LCAlZHMKIAltb3ZsICVlY3gsICVlcwpAQCAtMTEzNCwyNiArMTI1OCwyNyBAQAogICogYnkgaGFuZCBvbnRvIHRoZSBuZXcgc3RhY2sgLSB3aGlsZSB1cGRhdGluZyB0aGUgcmV0dXJuIGVpcCBwYXN0CiAgKiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB3b3VsZCBoYXZlIGRvbmUgaXQgZm9yIHN5c2VudGVyLgogICovCi0jZGVmaW5lIEZJWF9TVEFDSyhvZmZzZXQsIG9rLCBsYWJlbCkJCVwKLQljbXB3ICRfX0tFUk5FTF9DUyw0KCVlc3ApOwkJXAotCWpuZSBvazsJCQkJCVwKLWxhYmVsOgkJCQkJCVwKLQltb3ZsIFRTU19zeXNlbnRlcl9zcDArb2Zmc2V0KCVlc3ApLCVlc3A7CVwKLQlDRklfREVGX0NGQSBlc3AsIDA7CQkJXAotCUNGSV9VTkRFRklORUQgZWlwOwkJCVwKLQlwdXNoZmw7CQkJCQlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7CQlcCi0JcHVzaGwgJF9fS0VSTkVMX0NTOwkJCVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDsJCVwKLQlwdXNobCAkc3lzZW50ZXJfcGFzdF9lc3A7CQlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7CQlcCisubWFjcm8gRklYX1NUQUNLIG9mZnNldCBvayBsYWJlbAorCWNtcHcgJF9fS0VSTkVMX0NTLCA0KCVlc3ApCisJam5lIFxvaworXGxhYmVsOgorCW1vdmwgVFNTX3N5c2VudGVyX3NwMCArIFxvZmZzZXQoJWVzcCksICVlc3AKKwlDRklfREVGX0NGQSBlc3AsIDAKKwlDRklfVU5ERUZJTkVEIGVpcAorCXB1c2hmbAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJcHVzaGwgJF9fS0VSTkVMX0NTCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlwdXNobCAkc3lzZW50ZXJfcGFzdF9lc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCUNGSV9SRUxfT0ZGU0VUIGVpcCwgMAorLmVuZG0KIAogRU5UUlkoZGVidWcpCiAJUklORzBfSU5UX0ZSQU1FCiAJY21wbCAkaWEzMl9zeXNlbnRlcl90YXJnZXQsKCVlc3ApCiAJam5lIGRlYnVnX3N0YWNrX2NvcnJlY3QKLQlGSVhfU1RBQ0soMTIsIGRlYnVnX3N0YWNrX2NvcnJlY3QsIGRlYnVnX2VzcF9maXhfaW5zbikKKwlGSVhfU1RBQ0sgMTIsIGRlYnVnX3N0YWNrX2NvcnJlY3QsIGRlYnVnX2VzcF9maXhfaW5zbgogZGVidWdfc3RhY2tfY29ycmVjdDoKIAlwdXNobCAkLTEJCQkjIG1hcmsgdGhpcyBhcyBhbiBpbnQKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNApAQCAtMTIxMSw3ICsxMzM2LDcgQEAKIAogbm1pX3N0YWNrX2ZpeHVwOgogCVJJTkcwX0lOVF9GUkFNRQotCUZJWF9TVEFDSygxMixubWlfc3RhY2tfY29ycmVjdCwgMSkKKwlGSVhfU1RBQ0sgMTIsIG5taV9zdGFja19jb3JyZWN0LCAxCiAJam1wIG5taV9zdGFja19jb3JyZWN0CiAKIG5taV9kZWJ1Z19zdGFja19jaGVjazoKQEAgLTEyMjIsNyArMTM0Nyw3IEBACiAJamIgbm1pX3N0YWNrX2NvcnJlY3QKIAljbXBsICRkZWJ1Z19lc3BfZml4X2luc24sKCVlc3ApCiAJamEgbm1pX3N0YWNrX2NvcnJlY3QKLQlGSVhfU1RBQ0soMjQsbm1pX3N0YWNrX2NvcnJlY3QsIDEpCisJRklYX1NUQUNLIDI0LCBubWlfc3RhY2tfY29ycmVjdCwgMQogCWptcCBubWlfc3RhY2tfY29ycmVjdAogCiBubWlfZXNwZml4X3N0YWNrOgpAQCAtMTIzNCw3ICsxMzU5LDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCXB1c2hsICVlc3AKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCWFkZHcgJDQsICglZXNwKQorCWFkZGwgJDQsICglZXNwKQogCS8qIGNvcHkgdGhlIGlyZXQgZnJhbWUgb2YgMTIgYnl0ZXMgKi8KIAkucmVwdCAzCiAJcHVzaGwgMTYoJWVzcCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggYTEzNDYyMS4uODNkMTgzNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTQ4LDEwICs0OCwxMSBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAKIC8qIEF2b2lkIF9fQVNTRU1CTEVSX18naWZ5aW5nIDxsaW51eC9hdWRpdC5oPiBqdXN0IGZvciB0aGlzLiAgKi8KICNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KQEAgLTc2LDIwICs3NywxNyBAQAogCW1vdnEgOCglcmJwKSwgJXJzaQogCXN1YnEgJE1DT1VOVF9JTlNOX1NJWkUsICVyZGkKIAotLmdsb2JsIGZ0cmFjZV9jYWxsCi1mdHJhY2VfY2FsbDoKK0dMT0JBTChmdHJhY2VfY2FsbCkKIAljYWxsIGZ0cmFjZV9zdHViCiAKIAlNQ09VTlRfUkVTVE9SRV9GUkFNRQogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCi1mdHJhY2VfZ3JhcGhfY2FsbDoKK0dMT0JBTChmdHJhY2VfZ3JhcGhfY2FsbCkKIAlqbXAgZnRyYWNlX3N0dWIKICNlbmRpZgogCi0uZ2xvYmwgZnRyYWNlX3N0dWIKLWZ0cmFjZV9zdHViOgorR0xPQkFMKGZ0cmFjZV9zdHViKQogCXJldHEKIEVORChmdHJhY2VfY2FsbGVyKQogCkBAIC0xMDksOCArMTA3LDcgQEAKIAlqbnogZnRyYWNlX2dyYXBoX2NhbGxlcgogI2VuZGlmCiAKLS5nbG9ibCBmdHJhY2Vfc3R1YgotZnRyYWNlX3N0dWI6CitHTE9CQUwoZnRyYWNlX3N0dWIpCiAJcmV0cQogCiB0cmFjZToKQEAgLTE0Nyw5ICsxNDQsNyBAQAogCXJldHEKIEVORChmdHJhY2VfZ3JhcGhfY2FsbGVyKQogCi0KLS5nbG9ibCByZXR1cm5fdG9faGFuZGxlcgotcmV0dXJuX3RvX2hhbmRsZXI6CitHTE9CQUwocmV0dXJuX3RvX2hhbmRsZXIpCiAJc3VicSAgJDgwLCAlcnNwCiAKIAltb3ZxICVyYXgsICglcnNwKQpAQCAtMTg3LDYgKzE4Miw3IEBACiBFTlRSWShuYXRpdmVfdXNlcmdzX3N5c3JldDY0KQogCXN3YXBncwogCXN5c3JldHEKK0VORFBST0MobmF0aXZlX3VzZXJnc19zeXNyZXQ2NCkKICNlbmRpZiAvKiBDT05GSUdfUEFSQVZJUlQgKi8KIAogCkBAIC0yMDksNyArMjA1LDcgQEAKIAogCS8qICVyc3A6YXQgRlJBTUVFTkQgKi8KIAkubWFjcm8gRklYVVBfVE9QX09GX1NUQUNLIHRtcCBvZmZzZXQ9MAotCW1vdnEgJWdzOnBkYV9vbGRyc3AsXHRtcAorCW1vdnEgUEVSX0NQVV9WQVIob2xkX3JzcCksXHRtcAogCW1vdnEgXHRtcCxSU1ArXG9mZnNldCglcnNwKQogCW1vdnEgJF9fVVNFUl9EUyxTUytcb2Zmc2V0KCVyc3ApCiAJbW92cSAkX19VU0VSX0NTLENTK1xvZmZzZXQoJXJzcCkKQEAgLTIyMCw3ICsyMTYsNyBAQAogCiAJLm1hY3JvIFJFU1RPUkVfVE9QX09GX1NUQUNLIHRtcCBvZmZzZXQ9MAogCW1vdnEgUlNQK1xvZmZzZXQoJXJzcCksXHRtcAotCW1vdnEgXHRtcCwlZ3M6cGRhX29sZHJzcAorCW1vdnEgXHRtcCxQRVJfQ1BVX1ZBUihvbGRfcnNwKQogCW1vdnEgRUZMQUdTK1xvZmZzZXQoJXJzcCksXHRtcAogCW1vdnEgXHRtcCxSMTErXG9mZnNldCglcnNwKQogCS5lbmRtCkBAIC0zMzYsMTUgKzMzMiwxNSBAQAogCWplIDFmCiAJU1dBUEdTCiAJLyoKLQkgKiBpcnFjb3VudCBpcyB1c2VkIHRvIGNoZWNrIGlmIGEgQ1BVIGlzIGFscmVhZHkgb24gYW4gaW50ZXJydXB0IHN0YWNrCisJICogaXJxX2NvdW50IGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBDUFUgaXMgYWxyZWFkeSBvbiBhbiBpbnRlcnJ1cHQgc3RhY2sKIAkgKiBvciBub3QuIFdoaWxlIHRoaXMgaXMgZXNzZW50aWFsbHkgcmVkdW5kYW50IHdpdGggcHJlZW1wdF9jb3VudCBpdCBpcwogCSAqIGEgbGl0dGxlIGNoZWFwZXIgdG8gdXNlIGEgc2VwYXJhdGUgY291bnRlciBpbiB0aGUgUERBIChzaG9ydCBvZgogCSAqIG1vdmluZyBpcnFfZW50ZXIgaW50byBhc3NlbWJseSwgd2hpY2ggd291bGQgYmUgdG9vIG11Y2ggd29yaykKIAkgKi8KLTE6CWluY2wgJWdzOnBkYV9pcnFjb3VudAorMToJaW5jbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCiAJam5lIDJmCiAJcG9wcV9jZmkgJXJheAkJCS8qIG1vdmUgcmV0dXJuIGFkZHJlc3MuLi4gKi8KLQltb3YgJWdzOnBkYV9pcnFzdGFja3B0ciwlcnNwCisJbW92IFBFUl9DUFVfVkFSKGlycV9zdGFja19wdHIpLCVyc3AKIAlFTVBUWV9GUkFNRSAwCiAJcHVzaHFfY2ZpICVyYnAJCQkvKiBiYWNrbGluayBmb3IgdW53aW5kZXIgKi8KIAlwdXNocV9jZmkgJXJheAkJCS8qIC4uLiB0byB0aGUgbmV3IHN0YWNrICovCkBAIC00MDksNiArNDA1LDggQEAKIEVOVFJZKHJldF9mcm9tX2ZvcmspCiAJREVGQVVMVF9GUkFNRQogCisJTE9DSyA7IGJ0ciAkVElGX0ZPUkssVElfZmxhZ3MoJXI4KQorCiAJcHVzaCBrZXJuZWxfZWZsYWdzKCVyaXApCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDgKIAlwb3BmCQkJCQkjIHJlc2V0IGtlcm5lbCBlZmxhZ3MKQEAgLTQ2OCw3ICs0NjYsNyBAQAogRU5UUlkoc3lzdGVtX2NhbGwpCiAJQ0ZJX1NUQVJUUFJPQwlzaW1wbGUKIAlDRklfU0lHTkFMX0ZSQU1FCi0JQ0ZJX0RFRl9DRkEJcnNwLFBEQV9TVEFDS09GRlNFVAorCUNGSV9ERUZfQ0ZBCXJzcCxLRVJORUxfU1RBQ0tfT0ZGU0VUCiAJQ0ZJX1JFR0lTVEVSCXJpcCxyY3gKIAkvKkNGSV9SRUdJU1RFUglyZmxhZ3MscjExKi8KIAlTV0FQR1NfVU5TQUZFX1NUQUNLCkBAIC00NzksOCArNDc3LDggQEAKIAkgKi8KIEVOVFJZKHN5c3RlbV9jYWxsX2FmdGVyX3N3YXBncykKIAotCW1vdnEJJXJzcCwlZ3M6cGRhX29sZHJzcAotCW1vdnEJJWdzOnBkYV9rZXJuZWxzdGFjaywlcnNwCisJbW92cQklcnNwLFBFUl9DUFVfVkFSKG9sZF9yc3ApCisJbW92cQlQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCVyc3AKIAkvKgogCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvZmYvb24gc2VjdGlvbiAtIGl0J3Mgc3RyYWlnaHQKIAkgKiBhbmQgc2hvcnQ6CkBAIC01MjMsNyArNTIxLDcgQEAKIAlDRklfUkVHSVNURVIJcmlwLHJjeAogCVJFU1RPUkVfQVJHUyAwLC1BUkdfU0tJUCwxCiAJLypDRklfUkVHSVNURVIJcmZsYWdzLHIxMSovCi0JbW92cQklZ3M6cGRhX29sZHJzcCwgJXJzcAorCW1vdnEJUEVSX0NQVV9WQVIob2xkX3JzcCksICVyc3AKIAlVU0VSR1NfU1lTUkVUNjQKIAogCUNGSV9SRVNUT1JFX1NUQVRFCkBAIC02MzAsMTYgKzYyOCwxNCBAQAogICogU3lzY2FsbCByZXR1cm4gcGF0aCBlbmRpbmcgd2l0aCBJUkVULgogICogSGFzIGNvcnJlY3QgdG9wIG9mIHN0YWNrLCBidXQgcGFydGlhbCBzdGFjayBmcmFtZS4KICAqLwotCS5nbG9ibCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKLQkuZ2xvYmwgaW50X3dpdGhfY2hlY2sKLWludF9yZXRfZnJvbV9zeXNfY2FsbDoKK0dMT0JBTChpbnRfcmV0X2Zyb21fc3lzX2NhbGwpCiAJRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfTk9ORSkKIAlUUkFDRV9JUlFTX09GRgogCXRlc3RsICQzLENTLUFSR09GRlNFVCglcnNwKQogCWplIHJldGludF9yZXN0b3JlX2FyZ3MKIAltb3ZsICRfVElGX0FMTFdPUktfTUFTSywlZWRpCiAJLyogZWRpOgltYXNrIHRvIGNoZWNrICovCi1pbnRfd2l0aF9jaGVjazoKK0dMT0JBTChpbnRfd2l0aF9jaGVjaykKIAlMT0NLREVQX1NZU19FWElUX0lSUQogCUdFVF9USFJFQURfSU5GTyglcmN4KQogCW1vdmwgVElfZmxhZ3MoJXJjeCksJWVkeApAQCAtODMzLDExICs4MjksMTEgQEAKIAlYQ1BUX0ZSQU1FCiAJYWRkcSAkLTB4ODAsKCVyc3ApCQkvKiBBZGp1c3QgdmVjdG9yIHRvIFstMjU2LC0xXSByYW5nZSAqLwogCWludGVycnVwdCBkb19JUlEKLQkvKiAwKCVyc3ApOiBvbGRyc3AtQVJHT0ZGU0VUICovCisJLyogMCglcnNwKTogb2xkX3JzcC1BUkdPRkZTRVQgKi8KIHJldF9mcm9tX2ludHI6CiAJRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfTk9ORSkKIAlUUkFDRV9JUlFTX09GRgotCWRlY2wgJWdzOnBkYV9pcnFjb3VudAorCWRlY2wgUEVSX0NQVV9WQVIoaXJxX2NvdW50KQogCWxlYXZlcQogCUNGSV9ERUZfQ0ZBX1JFR0lTVEVSCXJzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAktOApAQCAtOTgyLDggKzk3OCwxMCBAQAogCWlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0IHNtcF9pcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfWDg2X1VWCiBhcGljaW50ZXJydXB0IFVWX0JBVV9NRVNTQUdFIFwKIAl1dl9iYXVfbWVzc2FnZV9pbnRyMSB1dl9iYXVfbWVzc2FnZV9pbnRlcnJ1cHQKKyNlbmRpZgogYXBpY2ludGVycnVwdCBMT0NBTF9USU1FUl9WRUNUT1IgXAogCWFwaWNfdGltZXJfaW50ZXJydXB0IHNtcF9hcGljX3RpbWVyX2ludGVycnVwdAogCkBAIC0xMDczLDEwICsxMDcxLDEwIEBACiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZxICVyc3AsJXJkaQkJLyogcHRfcmVncyBwb2ludGVyICovCiAJeG9ybCAlZXNpLCVlc2kJCS8qIG5vIGVycm9yIGNvZGUgKi8KLQltb3ZxICVnczpwZGFfZGF0YV9vZmZzZXQsICVyYnAKLQlzdWJxICRFWENFUFRJT05fU1RLU1osIHBlcl9jcHVfX2luaXRfdHNzICsgVFNTX2lzdCArIChcaXN0IC0gMSkgKiA4KCVyYnApCisJUEVSX0NQVShpbml0X3RzcywgJXJicCkKKwlzdWJxICRFWENFUFRJT05fU1RLU1osIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQogCWNhbGwgXGRvX3N5bQotCWFkZHEgJEVYQ0VQVElPTl9TVEtTWiwgcGVyX2NwdV9faW5pdF90c3MgKyBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXJicCkKKwlhZGRxICRFWENFUFRJT05fU1RLU1osIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQogCWptcCBwYXJhbm9pZF9leGl0CS8qICVlYng6IG5vIHN3YXBncyBmbGFnICovCiAJQ0ZJX0VORFBST0MKIEVORChcc3ltKQpAQCAtMTEzOCw3ICsxMTM2LDcgQEAKIAlDRklfU1RBUlRQUk9DCiAJcHVzaGYKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAotCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSB8IH4oQ0xCUl9SREkpKQorCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSAmIH5DTEJSX1JESSkKIAlTV0FQR1MKIGdzX2NoYW5nZToKIAltb3ZsICVlZGksJWdzCkBAIC0xMjYwLDE0ICsxMjU4LDE0IEBACiAJQ0ZJX1JFTF9PRkZTRVQgcmJwLDAKIAltb3YgICVyc3AsJXJicAogCUNGSV9ERUZfQ0ZBX1JFR0lTVEVSIHJicAotCWluY2wgJWdzOnBkYV9pcnFjb3VudAotCWNtb3ZlICVnczpwZGFfaXJxc3RhY2twdHIsJXJzcAorCWluY2wgUEVSX0NQVV9WQVIoaXJxX2NvdW50KQorCWNtb3ZlIFBFUl9DUFVfVkFSKGlycV9zdGFja19wdHIpLCVyc3AKIAlwdXNoICAlcmJwCQkJIyBiYWNrbGluayBmb3Igb2xkIHVud2luZGVyCiAJY2FsbCBfX2RvX3NvZnRpcnEKIAlsZWF2ZXEKIAlDRklfREVGX0NGQV9SRUdJU1RFUglyc3AKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgICAtOAotCWRlY2wgJWdzOnBkYV9pcnFjb3VudAorCWRlY2wgUEVSX0NQVV9WQVIoaXJxX2NvdW50KQogCXJldAogCUNGSV9FTkRQUk9DCiBFTkQoY2FsbF9zb2Z0aXJxKQpAQCAtMTI5NywxNSArMTI5NSwxNSBAQAogCW1vdnEgJXJkaSwgJXJzcCAgICAgICAgICAgICMgd2UgZG9uJ3QgcmV0dXJuLCBhZGp1c3QgdGhlIHN0YWNrIGZyYW1lCiAJQ0ZJX0VORFBST0MKIAlERUZBVUxUX0ZSQU1FCi0xMToJaW5jbCAlZ3M6cGRhX2lycWNvdW50CisxMToJaW5jbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCiAJbW92cSAlcnNwLCVyYnAKIAlDRklfREVGX0NGQV9SRUdJU1RFUiByYnAKLQljbW92enEgJWdzOnBkYV9pcnFzdGFja3B0ciwlcnNwCisJY21vdnpxIFBFUl9DUFVfVkFSKGlycV9zdGFja19wdHIpLCVyc3AKIAlwdXNocSAlcmJwCQkJIyBiYWNrbGluayBmb3Igb2xkIHVud2luZGVyCiAJY2FsbCB4ZW5fZXZ0Y2huX2RvX3VwY2FsbAogCXBvcHEgJXJzcAogCUNGSV9ERUZfQ0ZBX1JFR0lTVEVSIHJzcAotCWRlY2wgJWdzOnBkYV9pcnFjb3VudAorCWRlY2wgUEVSX0NQVV9WQVIoaXJxX2NvdW50KQogCWptcCAgZXJyb3JfZXhpdAogCUNGSV9FTkRQUk9DCiBFTkQoZG9faHlwZXJ2aXNvcl9jYWxsYmFjaykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lczcwMDBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9lczcwMDBfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2OTljOS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZXM3MDAwXzMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnk6IEdhcnJ5IEZvcnNncmVuLCBVbmlzeXMgQ29ycG9yYXRpb24KLSAqICAgICAgICAgICAgIE5hdGFsaWUgUHJvdGFzZXZpY2gsIFVuaXN5cyBDb3Jwb3JhdGlvbgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIHRvIGNvbmZpZ3VyZSBhbmQgaW50ZXJmYWNlCi0gKiB3aXRoIFVuaXN5cyBFUzcwMDAgc2VyaWVzIGhhcmR3YXJlIHN5c3RlbSBtYW5hZ2VyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBVbmlzeXMgQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBDb250YWN0IGluZm9ybWF0aW9uOiBVbmlzeXMgQ29ycG9yYXRpb24sIFRvd25zaGlwIExpbmUgJiBVbmlvbiBNZWV0aW5nCi0gKiBSb2Fkcy1BLCBVbmlzeXMgV2F5LCBCbHVlIEJlbGwsIFBlbm5zeWx2YW5pYSwgMTk0MjQsIG9yOgotICoKLSAqIGh0dHA6Ly93d3cudW5pc3lzLmNvbQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxtYWNoX21wcGFyc2UuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0vKgotICogRVM3MDAwIGNoaXBzZXRzCi0gKi8KLQotI2RlZmluZSBOT05fVU5JU1lTCQkwCi0jZGVmaW5lIEVTNzAwMF9DTEFTU0lDCQkxCi0jZGVmaW5lIEVTNzAwMF9aT1JSTwkJMgotCi0KLSNkZWZpbmUJTUlQX1JFRwkJCTEKLSNkZWZpbmUJTUlQX1BTQUlfUkVHCQk0Ci0KLSNkZWZpbmUJTUlQX0JVU1kJCTEKLSNkZWZpbmUJTUlQX1NQSU4JCTB4ZjAwMDAKLSNkZWZpbmUJTUlQX1ZBTElECQkweDAxMDAwMDAwMDAwMDAwMDBVTEwKLSNkZWZpbmUJTUlQX1BPUlQoVkFMVUUpCSgoVkFMVUUgPj4gMzIpICYgMHhmZmZmKQotCi0jZGVmaW5lCU1JUF9SRF9MTyhWQUxVRSkJKFZBTFVFICYgMHhmZmZmZmZmZikKLQotc3RydWN0IG1pcF9yZWdfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG1pcF9pbmZvOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBkZWxpdmVyeV9pbmZvOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBob3N0X3JlZzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWlwX3JlZzsKLX07Ci0KLXN0cnVjdCBwYXJ0X2luZm8gewotCXVuc2lnbmVkIGNoYXIgdHlwZTsKLQl1bnNpZ25lZCBjaGFyIGxlbmd0aDsKLQl1bnNpZ25lZCBjaGFyIHBhcnRfaWQ7Ci0JdW5zaWduZWQgY2hhciBhcGljX21vZGU7Ci0JdW5zaWduZWQgbG9uZyBzbnVtOwotCWNoYXIgcHR5cGVbMTZdOwotCWNoYXIgc25hbWVbNjRdOwotCWNoYXIgcG5hbWVbNjRdOwotfTsKLQotc3RydWN0IHBzYWkgewotCXVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeV90eXBlOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBiZXBfYWRkcjsKLX07Ci0KLXN0cnVjdCBlczcwMDBfbWVtX2luZm8gewotCXVuc2lnbmVkIGNoYXIgdHlwZTsKLQl1bnNpZ25lZCBjaGFyIGxlbmd0aDsKLQl1bnNpZ25lZCBjaGFyIHJlc3ZbNl07Ci0JdW5zaWduZWQgbG9uZyBsb25nICBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgIHNpemU7Ci19OwotCi1zdHJ1Y3QgZXM3MDAwX29lbV90YWJsZSB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGhkcjsKLQlzdHJ1Y3QgbWlwX3JlZ19pbmZvIG1pcDsKLQlzdHJ1Y3QgcGFydF9pbmZvIHBpZjsKLQlzdHJ1Y3QgZXM3MDAwX21lbV9pbmZvIHNobTsKLQlzdHJ1Y3QgcHNhaSBwc2FpOwotfTsKLQotI2lmZGVmIENPTkZJR19BQ1BJCi0KLXN0cnVjdCBvZW1fdGFibGUgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBIZWFkZXI7Ci0JdTMyIE9FTVRhYmxlQWRkcjsKLQl1MzIgT0VNVGFibGVTaXplOwotfTsKLQotZXh0ZXJuIGludCBmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nICpvZW1fYWRkcik7Ci1leHRlcm4gdm9pZCB1bm1hcF91bmlzeXNfYWNwaV9vZW1fdGFibGUodW5zaWduZWQgbG9uZyBvZW1fYWRkcik7Ci0jZW5kaWYKLQotc3RydWN0IG1pcF9yZWcgewotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfMDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgb2ZmXzg7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9mZl8xMDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgb2ZmXzE4OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfMjA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9mZl8yODsKLQl1bnNpZ25lZCBsb25nIGxvbmcgb2ZmXzMwOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfMzg7Ci19OwotCi0jZGVmaW5lCU1JUF9TV19BUElDCQkweDEwMjBiCi0jZGVmaW5lCU1JUF9GVU5DKFZBTFVFKQkJKFZBTFVFICYgMHhmZikKLQotLyoKLSAqIEVTNzAwMCBHbG9iYWxzCi0gKi8KLQotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJKnBzYWkgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBtaXBfcmVnCQkqbWlwX3JlZzsKLXN0YXRpYyBzdHJ1Y3QgbWlwX3JlZwkJKmhvc3RfcmVnOwotc3RhdGljIGludCAJCQltaXBfcG9ydDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nCQltaXBfYWRkciwgaG9zdF9hZGRyOwotCi1pbnQgZXM3MDAwX3BsYXQ7Ci0KLS8qCi0gKiBHU0kgb3ZlcnJpZGUgZm9yIEVTNzAwMCBwbGF0Zm9ybXMuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBiYXNlOwotCi1zdGF0aWMgaW50Ci1lczcwMDBfcmVuYW1lX2dzaShpbnQgaW9hcGljLCBpbnQgZ3NpKQotewotCWlmIChlczcwMDBfcGxhdCA9PSBFUzcwMDBfWk9SUk8pCi0JCXJldHVybiBnc2k7Ci0KLQlpZiAoIWJhc2UpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspCi0JCQliYXNlICs9IG5yX2lvYXBpY19yZWdpc3RlcnNbaV07Ci0JfQotCi0JaWYgKCFpb2FwaWMgJiYgKGdzaSA8IDE2KSkKLQkJZ3NpICs9IGJhc2U7Ci0JcmV0dXJuIGdzaTsKLX0KLQotc3RhdGljIGludCB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbWlwKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZWlwKQotewotCXVuc2lnbmVkIGxvbmcgdmVjdCA9IDAsIHBzYWl2YWwgPSAwOwotCi0JaWYgKHBzYWkgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JdmVjdCA9ICgodW5zaWduZWQgbG9uZylfX3BhKGVpcCkvMHgxMDAwKSA8PCAxNjsKLQlwc2FpdmFsID0gKDB4MTAwMDAwMCB8IHZlY3QgfCBjcHUpOwotCi0Jd2hpbGUgKCpwc2FpICYgMHgxMDAwMDAwKQotCQk7Ci0KLQkqcHNhaSA9IHBzYWl2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbm9vcF93YWl0X2Zvcl9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnRfbm90X3VzZWQpCi17Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVzNzAwMF91cGRhdGVfZ2VuYXBpYyh2b2lkKQotewotCWdlbmFwaWMtPndha2V1cF9jcHUgPSB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbWlwOwotCi0JLyogTVBFTlRJVU1JSUkgKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJgotCSAgICAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPj0gNyB8fCBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PSAxMSkpIHsKLQkJZXM3MDAwX3VwZGF0ZV9nZW5hcGljX3RvX2NsdXN0ZXIoKTsKLQkJZ2VuYXBpYy0+d2FpdF9mb3JfaW5pdF9kZWFzc2VydCA9IG5vb3Bfd2FpdF9mb3JfZGVhc3NlcnQ7Ci0JCWdlbmFwaWMtPndha2V1cF9jcHUgPSB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbWlwOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdAotc2V0dXBfdW5pc3lzKHZvaWQpCi17Ci0JLyoKLQkgKiBEZXRlcm1pbmUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIEVTNzAwMCBjdXJyZW50bHkgcnVubmluZy4KLQkgKgotCSAqIGVzNzAwMF9wbGF0ID0gMSBpZiB0aGUgbWFjaGluZSBpcyBhIDV4eCBFUzcwMDAgYm94Ci0JICogZXM3MDAwX3BsYXQgPSAyIGlmIHRoZSBtYWNoaW5lIGlzIGEgeDg2XzY0IEVTNzAwMCBib3gKLQkgKgotCSAqLwotCWlmICghKGJvb3RfY3B1X2RhdGEueDg2IDw9IDE1ICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDw9IDIpKQotCQllczcwMDBfcGxhdCA9IEVTNzAwMF9aT1JSTzsKLQllbHNlCi0JCWVzNzAwMF9wbGF0ID0gRVM3MDAwX0NMQVNTSUM7Ci0JaW9hcGljX3JlbnVtYmVyX2lycSA9IGVzNzAwMF9yZW5hbWVfZ3NpOwotCi0JeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMgPSBlczcwMDBfdXBkYXRlX2dlbmFwaWM7Ci19Ci0KLS8qCi0gKiBQYXJzZSB0aGUgT0VNIFRhYmxlCi0gKi8KLQotaW50IF9faW5pdAotcGFyc2VfdW5pc3lzX29lbSAoY2hhciAqb2VtcHRyKQotewotCWludCAgICAgICAgICAgICAgICAgICAgIGk7Ci0JaW50IAkJCXN1Y2Nlc3MgPSAwOwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIHR5cGUsIHNpemU7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgdmFsOwotCWNoYXIgICAgICAgICAgICAgICAgICAgICp0cCA9IE5VTEw7Ci0Jc3RydWN0IHBzYWkgICAgICAgICAgICAgKnBzYWlwID0gTlVMTDsKLQlzdHJ1Y3QgbWlwX3JlZ19pbmZvIAkqbWk7Ci0Jc3RydWN0IG1pcF9yZWcJCSpob3N0LCAqbWlwOwotCi0JdHAgPSBvZW1wdHI7Ci0KLQl0cCArPSA4OwotCi0JZm9yIChpPTA7IGkgPD0gNjsgaSsrKSB7Ci0JCXR5cGUgPSAqdHArKzsKLQkJc2l6ZSA9ICp0cCsrOwotCQl0cCAtPSAyOwotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBNSVBfUkVHOgotCQkJbWkgPSAoc3RydWN0IG1pcF9yZWdfaW5mbyAqKXRwOwotCQkJdmFsID0gTUlQX1JEX0xPKG1pLT5ob3N0X3JlZyk7Ci0JCQlob3N0X2FkZHIgPSB2YWw7Ci0JCQlob3N0ID0gKHN0cnVjdCBtaXBfcmVnICopdmFsOwotCQkJaG9zdF9yZWcgPSBfX3ZhKGhvc3QpOwotCQkJdmFsID0gTUlQX1JEX0xPKG1pLT5taXBfcmVnKTsKLQkJCW1pcF9wb3J0ID0gTUlQX1BPUlQobWktPm1pcF9pbmZvKTsKLQkJCW1pcF9hZGRyID0gdmFsOwotCQkJbWlwID0gKHN0cnVjdCBtaXBfcmVnICopdmFsOwotCQkJbWlwX3JlZyA9IF9fdmEobWlwKTsKLQkJCXByX2RlYnVnKCJlczcwMDBfbWlwY2ZnOiBob3N0X3JlZyA9IDB4JWx4IFxuIiwKLQkJCQkgKHVuc2lnbmVkIGxvbmcpaG9zdF9yZWcpOwotCQkJcHJfZGVidWcoImVzNzAwMF9taXBjZmc6IG1pcF9yZWcgPSAweCVseCBcbiIsCi0JCQkJICh1bnNpZ25lZCBsb25nKW1pcF9yZWcpOwotCQkJc3VjY2VzcysrOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUlQX1BTQUlfUkVHOgotCQkJcHNhaXAgPSAoc3RydWN0IHBzYWkgKil0cDsKLQkJCWlmICh0cCAhPSBOVUxMKSB7Ci0JCQkJaWYgKHBzYWlwLT5hZGRyKQotCQkJCQlwc2FpID0gX192YShwc2FpcC0+YWRkcik7Ci0JCQkJZWxzZQotCQkJCQlwc2FpID0gTlVMTDsKLQkJCQlzdWNjZXNzKys7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCXRwICs9IHNpemU7Ci0JfQotCi0JaWYgKHN1Y2Nlc3MgPCAyKSB7Ci0JCWVzNzAwMF9wbGF0ID0gTk9OX1VOSVNZUzsKLQl9IGVsc2UKLQkJc2V0dXBfdW5pc3lzKCk7Ci0JcmV0dXJuIGVzNzAwMF9wbGF0OwotfQotCi0jaWZkZWYgQ09ORklHX0FDUEkKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9lbV9hZGRyWDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9lbV9zaXplOwotaW50IF9faW5pdCBmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nICpvZW1fYWRkcikKLXsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlciA9IE5VTEw7Ci0JaW50IGkgPSAwOwotCi0Jd2hpbGUgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF90YWJsZSgiT0VNMSIsIGkrKywgJmhlYWRlcikpKSB7Ci0JCWlmICghbWVtY21wKChjaGFyICopICZoZWFkZXItPm9lbV9pZCwgIlVOSVNZUyIsIDYpKSB7Ci0JCQlzdHJ1Y3Qgb2VtX3RhYmxlICp0ID0gKHN0cnVjdCBvZW1fdGFibGUgKiloZWFkZXI7Ci0KLQkJCW9lbV9hZGRyWCA9IHQtPk9FTVRhYmxlQWRkcjsKLQkJCW9lbV9zaXplID0gdC0+T0VNVGFibGVTaXplOwotCi0JCQkqb2VtX2FkZHIgPSAodW5zaWduZWQgbG9uZylfX2FjcGlfbWFwX3RhYmxlKG9lbV9hZGRyWCwKLQkJCQkJCQkJICAgIG9lbV9zaXplKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAtMTsKLX0KLQotdm9pZCBfX2luaXQgdW5tYXBfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgb2VtX2FkZHIpCi17Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQKLWVzNzAwMF9zcGluKGludCBuKQotewotCWludCBpID0gMDsKLQotCXdoaWxlIChpKysgPCBuKQotCQlyZXBfbm9wKCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1lczcwMDBfbWlwX3dyaXRlKHN0cnVjdCBtaXBfcmVnICptaXBfcmVnKQotewotCWludAkJCXN0YXR1cyA9IDA7Ci0JaW50CQkJc3BpbjsKLQotCXNwaW4gPSBNSVBfU1BJTjsKLQl3aGlsZSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpaG9zdF9yZWctPm9mZl8zOCAmCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpTUlQX1ZBTElEKSAhPSAwKSB7Ci0JCQlpZiAoLS1zcGluIDw9IDApIHsKLQkJCQlwcmludGsoImVzNzAwMF9taXBfd3JpdGU6IFRpbWVvdXQgd2FpdGluZyBmb3IgSG9zdCBWYWxpZCBGbGFnIik7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQllczcwMDBfc3BpbihNSVBfU1BJTik7Ci0JfQotCi0JbWVtY3B5KGhvc3RfcmVnLCBtaXBfcmVnLCBzaXplb2Yoc3RydWN0IG1pcF9yZWcpKTsKLQlvdXRiKDEsIG1pcF9wb3J0KTsKLQotCXNwaW4gPSBNSVBfU1BJTjsKLQotCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcgbG9uZyltaXBfcmVnLT5vZmZfMzggJgotCQkodW5zaWduZWQgbG9uZyBsb25nKU1JUF9WQUxJRCkgPT0gMCkgewotCQlpZiAoLS1zcGluIDw9IDApIHsKLQkJCXByaW50aygiZXM3MDAwX21pcF93cml0ZTogVGltZW91dCB3YWl0aW5nIGZvciBNSVAgVmFsaWQgRmxhZyIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWVzNzAwMF9zcGluKE1JUF9TUElOKTsKLQl9Ci0KLQlzdGF0dXMgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZyltaXBfcmVnLT5vZmZfMCAmCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpMHhmZmZmMDAwMDAwMDAwMFVMTCkgPj4gNDg7Ci0JbWlwX3JlZy0+b2ZmXzM4ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpbWlwX3JlZy0+b2ZmXzM4ICYKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl+TUlQX1ZBTElEKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi12b2lkIF9faW5pdAotZXM3MDAwX3N3X2FwaWModm9pZCkKLXsKLQlpZiAoZXM3MDAwX3BsYXQpIHsKLQkJaW50IG1pcF9zdGF0dXM7Ci0JCXN0cnVjdCBtaXBfcmVnIGVzNzAwMF9taXBfcmVnOwotCi0JCXByaW50aygiRVM3MDAwOiBFbmFibGluZyBBUElDIG1vZGUuXG4iKTsKLSAgICAgICAgCW1lbXNldCgmZXM3MDAwX21pcF9yZWcsIDAsIHNpemVvZihzdHJ1Y3QgbWlwX3JlZykpOwotICAgICAgICAJZXM3MDAwX21pcF9yZWcub2ZmXzAgPSBNSVBfU1dfQVBJQzsKLSAgICAgICAgCWVzNzAwMF9taXBfcmVnLm9mZl8zOCA9IChNSVBfVkFMSUQpOwotICAgICAgICAJd2hpbGUgKChtaXBfc3RhdHVzID0gZXM3MDAwX21pcF93cml0ZSgmZXM3MDAwX21pcF9yZWcpKSAhPSAwKQotICAgICAgICAgICAgICAJCXByaW50aygiZXM3MDAwX3N3X2FwaWM6IGNvbW1hbmQgZmFpbGVkLCBzdGF0dXMgPSAleFxuIiwKLQkJCQltaXBfc3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY182NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmNlZDc4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCi0gKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgotICoKLSAqIEdlbmVyaWMgQVBJQyBzdWItYXJjaCBwcm9iZSBsYXllci4KLSAqCi0gKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5Ci0gKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAotICogSmFtZXMgQ2xldmVyZG9uLgotICovCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9pcGkuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY19mbGF0OwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfcGh5c2ZsYXQ7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MnhwaWNfdXZfeDsKLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3gyYXBpY19waHlzOwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX2NsdXN0ZXI7Ci0KLXN0cnVjdCBnZW5hcGljIF9fcmVhZF9tb3N0bHkgKmdlbmFwaWMgPSAmYXBpY19mbGF0OwotCi1zdGF0aWMgc3RydWN0IGdlbmFwaWMgKmFwaWNfcHJvYmVbXSBfX2luaXRkYXRhID0gewotCSZhcGljX3gyYXBpY191dl94LAotCSZhcGljX3gyYXBpY19waHlzLAotCSZhcGljX3gyYXBpY19jbHVzdGVyLAotCSZhcGljX3BoeXNmbGF0LAotCU5VTEwsCi19OwotCi0vKgotICogQ2hlY2sgdGhlIEFQSUMgSURzIGluIGJpb3NfY3B1X2FwaWNpZCBhbmQgY2hvb3NlIHRoZSBBUElDIG1vZGUuCi0gKi8KLXZvaWQgX19pbml0IHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCWlmIChnZW5hcGljID09ICZhcGljX3gyYXBpY19waHlzIHx8IGdlbmFwaWMgPT0gJmFwaWNfeDJhcGljX2NsdXN0ZXIpIHsKLQkJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQotCQkJZ2VuYXBpYyA9ICZhcGljX2ZsYXQ7Ci0JfQotCi0JaWYgKGdlbmFwaWMgPT0gJmFwaWNfZmxhdCkgewotCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KQotCQkJZ2VuYXBpYyA9ICZhcGljX3BoeXNmbGF0OwotCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgZ2VuYXBpYy0+bmFtZSk7Ci0JfQotCi0JaWYgKHg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKQotCQl4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYygpOwotfQotCi0vKiBTYW1lIGZvciBib3RoIGZsYXQgYW5kIHBoeXNpY2FsLiAqLwotCi12b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQotewotCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX1NFTEYsIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKLX0KLQotaW50IF9faW5pdCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7Ci0JCWlmIChhcGljX3Byb2JlW2ldLT5hY3BpX21hZHRfb2VtX2NoZWNrKG9lbV9pZCwgb2VtX3RhYmxlX2lkKSkgewotCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlcy5cbiIsCi0JCQkJZ2VuYXBpYy0+bmFtZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQxODU0OC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgotICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKLSAqCi0gKiBGbGF0IEFQSUMgc3ViYXJjaCBjb2RlLgotICoKLSAqIEhhY2tlZCBmb3IgeDg2LTY0IGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tIGkzODYgYXJjaGl0ZWN0dXJlIGNvZGUgYnkKLSAqIE1hcnRpbiBCbGlnaCwgQW5kaSBLbGVlbiwgSmFtZXMgQm90dG9tbGV5LCBKb2huIFN0dWx0eiwgYW5kCi0gKiBKYW1lcyBDbGV2ZXJkb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vaXBpLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KLQotI2lmZGVmIENPTkZJR19BQ1BJCi0jaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmZsYXRfdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXNrOwotfQotCi1zdGF0aWMgdm9pZCBmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKLXsKLQkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cwotCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0Ci0JICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCi0JICoKLQkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bwotCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQotCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCi0JICovCi0JY3B1bWFza19jbGVhcihyZXRtYXNrKTsKLQljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwotfQotCi0vKgotICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgotICoKLSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCi0gKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAotICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KLSAqLwotc3RhdGljIHZvaWQgZmxhdF9pbml0X2FwaWNfbGRyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JdW5zaWduZWQgbG9uZyBudW0sIGlkOwotCi0JbnVtID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlkID0gMVVMIDw8IG51bTsKLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9GTEFUKTsKLQl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7Ci0JdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZmxhdF9zZW5kX0lQSV9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fc2VuZF9JUElfZGVzdF9maWVsZChtYXNrLCB2ZWN0b3IsIEFQSUNfREVTVF9MT0dJQ0FMKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsYXRfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07Ci0KLQlfZmxhdF9zZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsYXRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkgIGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoY3B1IDwgQklUU19QRVJfTE9ORykKLQkJY2xlYXJfYml0KGNwdSwgJm1hc2spOwotCV9mbGF0X3NlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZmxhdF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSNpZmRlZglDT05GSUdfSE9UUExVR19DUFUKLQlpbnQgaG90cGx1ZyA9IDE7Ci0jZWxzZQotCWludCBob3RwbHVnID0gMDsKLSNlbmRpZgotCWlmIChob3RwbHVnIHx8IHZlY3RvciA9PSBOTUlfVkVDVE9SKSB7Ci0JCWlmICghY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdW1hc2tfb2YoY3B1KSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNwdW1hc2tfYml0cyhjcHVfb25saW5lX21hc2spWzBdOwotCi0JCQlpZiAoY3B1IDwgQklUU19QRVJfTE9ORykKLQkJCQljbGVhcl9iaXQoY3B1LCAmbWFzayk7Ci0KLQkJCV9mbGF0X3NlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKLQkJfQotCX0gZWxzZSBpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSB7Ci0JCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTEJVVCwgdmVjdG9yLEFQSUNfREVTVF9MT0dJQ0FMKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGZsYXRfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0JaWYgKHZlY3RvciA9PSBOTUlfVkVDVE9SKQotCQlmbGF0X3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotCWVsc2UKLQkJX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMSU5DLCB2ZWN0b3IsIEFQSUNfREVTVF9MT0dJQ0FMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JdW5zaWduZWQgaW50IGlkOwotCi0JaWQgPSAoKCh4KT4+MjQpICYgMHhGRnUpOwotCXJldHVybiBpZDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQotewotCXVuc2lnbmVkIGxvbmcgeDsKLQotCXggPSAoKGlkICYgMHhGRnUpPDwyNCk7Ci0JcmV0dXJuIHg7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF94YXBpY19pZCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpZDsKLQotCWlkID0gZ2V0X2FwaWNfaWQoYXBpY19yZWFkKEFQSUNfSUQpKTsKLQlyZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQgZmxhdF9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KHJlYWRfeGFwaWNfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQotewotCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazEgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOwotCXVuc2lnbmVkIGxvbmcgbWFzazIgPSBjcHVtYXNrX2JpdHMoYW5kbWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOwotCi0JcmV0dXJuIG1hc2sxICYgbWFzazI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGh5c19wa2dfaWQoaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj4gaW5kZXhfbXNiOwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX2ZsYXQgPSAgewotCS5uYW1lID0gImZsYXQiLAotCS5hY3BpX21hZHRfb2VtX2NoZWNrID0gZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrLAotCS5pbnRfZGVsaXZlcnlfbW9kZSA9IGRlc3RfTG93ZXN0UHJpbywKLQkuaW50X2Rlc3RfbW9kZSA9IChBUElDX0RFU1RfTE9HSUNBTCAhPSAwKSwKLQkudGFyZ2V0X2NwdXMgPSBmbGF0X3RhcmdldF9jcHVzLAotCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gPSBmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKLQkuYXBpY19pZF9yZWdpc3RlcmVkID0gZmxhdF9hcGljX2lkX3JlZ2lzdGVyZWQsCi0JLmluaXRfYXBpY19sZHIgPSBmbGF0X2luaXRfYXBpY19sZHIsCi0JLnNlbmRfSVBJX2FsbCA9IGZsYXRfc2VuZF9JUElfYWxsLAotCS5zZW5kX0lQSV9hbGxidXRzZWxmID0gZmxhdF9zZW5kX0lQSV9hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9tYXNrID0gZmxhdF9zZW5kX0lQSV9tYXNrLAotCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYgPSBmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfc2VsZiA9IGFwaWNfc2VuZF9JUElfc2VsZiwKLQkuY3B1X21hc2tfdG9fYXBpY2lkID0gZmxhdF9jcHVfbWFza190b19hcGljaWQsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQgPSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCi0JLnBoeXNfcGtnX2lkID0gcGh5c19wa2dfaWQsCi0JLmdldF9hcGljX2lkID0gZ2V0X2FwaWNfaWQsCi0JLnNldF9hcGljX2lkID0gc2V0X2FwaWNfaWQsCi0JLmFwaWNfaWRfbWFzayA9ICgweEZGdTw8MjQpLAotfTsKLQotLyoKLSAqIFBoeXNmbGF0IG1vZGUgaXMgdXNlZCB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gOCBDUFVzIG9uIGEgQU1EIHN5c3RlbS4KLSAqIFdlIGNhbm5vdCB1c2UgbG9naWNhbCBkZWxpdmVyeSBpbiB0aGlzIGNhc2UgYmVjYXVzZSB0aGUgbWFzawotICogb3ZlcmZsb3dzLCBzbyB1c2UgcGh5c2ljYWwgbW9kZS4KLSAqLwotc3RhdGljIGludCBwaHlzZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotI2lmZGVmIENPTkZJR19BQ1BJCi0JLyoKLQkgKiBRdWlyazogc29tZSB4ODZfNjQgbWFjaGluZXMgY2FuIG9ubHkgdXNlIHBoeXNpY2FsIEFQSUMgbW9kZQotCSAqIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgcHJvY2Vzc29ycyBhcmUgcHJlc2VudCAoeDg2XzY0IEVTNzAwMAotCSAqIGlzIGFuIGV4YW1wbGUpLgotCSAqLwotCWlmIChhY3BpX2dibF9GQURULmhlYWRlci5yZXZpc2lvbiA+IEZBRFQyX1JFVklTSU9OX0lEICYmCi0JCShhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX0FQSUNfUEhZU0lDQUwpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJzeXN0ZW0gQVBJQyBvbmx5IGNhbiB1c2UgcGh5c2ljYWwgZmxhdCIpOwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnBoeXNmbGF0X3RhcmdldF9jcHVzKHZvaWQpCi17Ci0JcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKLX0KLQotc3RhdGljIHZvaWQgcGh5c2ZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQotewotCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7Ci0JY3B1bWFza19zZXRfY3B1KGNwdSwgcmV0bWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBwaHlzZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCSAgICAgIGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNwdW1hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBwaHlzZmxhdF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKLXsKLQlwaHlzZmxhdF9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwaHlzZmxhdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrKTsKLQlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCWVsc2UKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXBoeXNmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCWJyZWFrOwotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RydWN0IGdlbmFwaWMgYXBpY19waHlzZmxhdCA9ICB7Ci0JLm5hbWUgPSAicGh5c2ljYWwgZmxhdCIsCi0JLmFjcGlfbWFkdF9vZW1fY2hlY2sgPSBwaHlzZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrLAotCS5pbnRfZGVsaXZlcnlfbW9kZSA9IGRlc3RfRml4ZWQsCi0JLmludF9kZXN0X21vZGUgPSAoQVBJQ19ERVNUX1BIWVNJQ0FMICE9IDApLAotCS50YXJnZXRfY3B1cyA9IHBoeXNmbGF0X3RhcmdldF9jcHVzLAotCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gPSBwaHlzZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCi0JLmFwaWNfaWRfcmVnaXN0ZXJlZCA9IGZsYXRfYXBpY19pZF9yZWdpc3RlcmVkLAotCS5pbml0X2FwaWNfbGRyID0gZmxhdF9pbml0X2FwaWNfbGRyLC8qbm90IG5lZWRlZCwgYnV0IHNob3VsZG4ndCBodXJ0Ki8KLQkuc2VuZF9JUElfYWxsID0gcGh5c2ZsYXRfc2VuZF9JUElfYWxsLAotCS5zZW5kX0lQSV9hbGxidXRzZWxmID0gcGh5c2ZsYXRfc2VuZF9JUElfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfbWFzayA9IHBoeXNmbGF0X3NlbmRfSVBJX21hc2ssCi0JLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiA9IHBoeXNmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfc2VsZiA9IGFwaWNfc2VuZF9JUElfc2VsZiwKLQkuY3B1X21hc2tfdG9fYXBpY2lkID0gcGh5c2ZsYXRfY3B1X21hc2tfdG9fYXBpY2lkLAotCS5jcHVfbWFza190b19hcGljaWRfYW5kID0gcGh5c2ZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKLQkucGh5c19wa2dfaWQgPSBwaHlzX3BrZ19pZCwKLQkuZ2V0X2FwaWNfaWQgPSBnZXRfYXBpY19pZCwKLQkuc2V0X2FwaWNfaWQgPSBzZXRfYXBpY19pZCwKLQkuYXBpY19pZF9tYXNrID0gKDB4RkZ1PDwyNCksCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY19jbHVzdGVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX2NsdXN0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlNDk3Yy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX2NsdXN0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFyLmg+Ci0KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2lwaS5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0KLURFRklORV9QRVJfQ1BVKHUzMiwgeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCk7Ci0KLXN0YXRpYyBpbnQgeDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JaWYgKGNwdV9oYXNfeDJhcGljKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKiBTdGFydCB3aXRoIGFsbCBJUlFzIHBvaW50aW5nIHRvIGJvb3QgQ1BVLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNoaWZ0IHRoZW0uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqeDJhcGljX3RhcmdldF9jcHVzKHZvaWQpCi17Ci0JcmV0dXJuIGNwdW1hc2tfb2YoMCk7Ci19Ci0KLS8qCi0gKiBmb3Igbm93IGVhY2ggbG9naWNhbCBjcHUgaXMgaW4gaXRzIG93biB2ZWN0b3IgYWxsb2NhdGlvbiBkb21haW4uCi0gKi8KLXN0YXRpYyB2b2lkIHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCi17Ci0JY3B1bWFza19jbGVhcihyZXRtYXNrKTsKLQljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgX194MmFwaWNfc2VuZF9JUElfZGVzdCh1bnNpZ25lZCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yLAotCQkJCSAgIHVuc2lnbmVkIGludCBkZXN0KQotewotCXVuc2lnbmVkIGxvbmcgY2ZnOwotCi0JY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IsIGRlc3QpOwotCi0JLyoKLQkgKiBzZW5kIHRoZSBJUEkuCi0JICovCi0JeDJhcGljX2ljcl93cml0ZShjZmcsIGFwaWNpZCk7Ci19Ci0KLS8qCi0gKiBmb3Igbm93LCB3ZSBzZW5kIHRoZSBJUEkncyBvbmUgYnkgb25lIGluIHRoZSBjcHVtYXNrLgotICogVEJEOiBCYXNlZCBvbiB0aGUgY3B1IG1hc2ssIHdlIGNhbiBzZW5kIHRoZSBJUEkncyB0byB0aGUgY2x1c3RlciBncm91cAotICogYXQgb25jZS4gV2UgaGF2ZSAxNiBjcHUncyBpbiBhIGNsdXN0ZXIuIFRoaXMgd2lsbCBtaW5pbWl6ZSBJUEkgcmVnaXN0ZXIKLSAqIHdyaXRlcy4KLSAqLwotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKQotCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KAotCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJdmVjdG9yLCBBUElDX0RFU1RfTE9HSUNBTCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAotCQkJCQkgICAgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCi0JCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJCXZlY3RvciwgQVBJQ19ERVNUX0xPR0lDQUwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShxdWVyeV9jcHUpCi0JCWlmIChxdWVyeV9jcHUgIT0gdGhpc19jcHUpCi0JCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KAotCQkJCXBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgcXVlcnlfY3B1KSwKLQkJCQl2ZWN0b3IsIEFQSUNfREVTVF9MT0dJQ0FMKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKLXsKLQl4MmFwaWNfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgeDJhcGljX2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIGxvZ2ljYWwgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrKTsKLQlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIGxvZ2ljYWwgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCWJyZWFrOwotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBjcHUpOwotCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQl1bnNpZ25lZCBpbnQgaWQ7Ci0KLQlpZCA9IHg7Ci0JcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZXRfYXBpY19pZCh1bnNpZ25lZCBpbnQgaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB4OwotCi0JeCA9IGlkOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBoeXNfcGtnX2lkKGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGN1cnJlbnRfY3B1X2RhdGEuaW5pdGlhbF9hcGljaWQgPj4gaW5kZXhfbXNiOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQotewotCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF94MmFwaWNfbGRyKHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KSA9IGFwaWNfcmVhZChBUElDX0xEUik7Ci0JcmV0dXJuOwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX3gyYXBpY19jbHVzdGVyID0gewotCS5uYW1lID0gImNsdXN0ZXIgeDJhcGljIiwKLQkuYWNwaV9tYWR0X29lbV9jaGVjayA9IHgyYXBpY19hY3BpX21hZHRfb2VtX2NoZWNrLAotCS5pbnRfZGVsaXZlcnlfbW9kZSA9IGRlc3RfTG93ZXN0UHJpbywKLQkuaW50X2Rlc3RfbW9kZSA9IChBUElDX0RFU1RfTE9HSUNBTCAhPSAwKSwKLQkudGFyZ2V0X2NwdXMgPSB4MmFwaWNfdGFyZ2V0X2NwdXMsCi0JLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiA9IHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCi0JLmFwaWNfaWRfcmVnaXN0ZXJlZCA9IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQsCi0JLmluaXRfYXBpY19sZHIgPSBpbml0X3gyYXBpY19sZHIsCi0JLnNlbmRfSVBJX2FsbCA9IHgyYXBpY19zZW5kX0lQSV9hbGwsCi0JLnNlbmRfSVBJX2FsbGJ1dHNlbGYgPSB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfbWFzayA9IHgyYXBpY19zZW5kX0lQSV9tYXNrLAotCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYgPSB4MmFwaWNfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9zZWxmID0geDJhcGljX3NlbmRfSVBJX3NlbGYsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZCA9IHgyYXBpY19jcHVfbWFza190b19hcGljaWQsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQgPSB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKLQkucGh5c19wa2dfaWQgPSBwaHlzX3BrZ19pZCwKLQkuZ2V0X2FwaWNfaWQgPSBnZXRfYXBpY19pZCwKLQkuc2V0X2FwaWNfaWQgPSBzZXRfYXBpY19pZCwKLQkuYXBpY19pZF9tYXNrID0gKDB4RkZGRkZGRkZ1KSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3BoeXMuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfcGh5cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWJjYzBlLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfcGh5cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLQotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vaXBpLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLQotc3RhdGljIGludCB4MmFwaWNfcGh5czsKLQotc3RhdGljIGludCBzZXRfeDJhcGljX3BoeXNfbW9kZShjaGFyICphcmcpCi17Ci0JeDJhcGljX3BoeXMgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIngyYXBpY19waHlzIiwgc2V0X3gyYXBpY19waHlzX21vZGUpOwotCi1zdGF0aWMgaW50IHgyYXBpY19hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCWlmIChjcHVfaGFzX3gyYXBpYyAmJiB4MmFwaWNfcGh5cykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogU3RhcnQgd2l0aCBhbGwgSVJRcyBwb2ludGluZyB0byBib290IENQVS4gIElSUSBiYWxhbmNpbmcgd2lsbCBzaGlmdCB0aGVtLiAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKngyYXBpY190YXJnZXRfY3B1cyh2b2lkKQotewotCXJldHVybiBjcHVtYXNrX29mKDApOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQotewotCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7Ci0JY3B1bWFza19zZXRfY3B1KGNwdSwgcmV0bWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9feDJhcGljX3NlbmRfSVBJX2Rlc3QodW5zaWduZWQgaW50IGFwaWNpZCwgaW50IHZlY3RvciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgZGVzdCkKLXsKLQl1bnNpZ25lZCBsb25nIGNmZzsKLQotCWNmZyA9IF9fcHJlcGFyZV9JQ1IoMCwgdmVjdG9yLCBkZXN0KTsKLQotCS8qCi0JICogc2VuZCB0aGUgSVBJLgotCSAqLwotCXgyYXBpY19pY3Jfd3JpdGUoY2ZnLCBhcGljaWQpOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKLQkJX194MmFwaWNfc2VuZF9JUElfZGVzdChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJCSAgICAgICB2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKLQkJCQkJICAgIGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKLQl1bnNpZ25lZCBsb25nIHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCi0JCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKLQkJCQl2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShxdWVyeV9jcHUpCi0JCWlmIChxdWVyeV9jcHUgIT0gdGhpc19jcHUpCi0JCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KAotCQkJCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCi0JCQkJdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCXgyYXBpY19zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGludCB4MmFwaWNfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKLXsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgotCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KLQkgKi8KLQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOwotCWlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCWJyZWFrOwotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JdW5zaWduZWQgaW50IGlkOwotCi0JaWQgPSB4OwotCXJldHVybiBpZDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQotewotCXVuc2lnbmVkIGxvbmcgeDsKLQotCXggPSBpZDsKLQlyZXR1cm4geDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwaHlzX3BrZ19pZChpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjdXJyZW50X2NwdV9kYXRhLmluaXRpYWxfYXBpY2lkID4+IGluZGV4X21zYjsKLX0KLQotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQlhcGljX3dyaXRlKEFQSUNfU0VMRl9JUEksIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfeDJhcGljX2xkcih2b2lkKQotewotCXJldHVybjsKLX0KLQotc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfcGh5cyA9IHsKLQkubmFtZSA9ICJwaHlzaWNhbCB4MmFwaWMiLAotCS5hY3BpX21hZHRfb2VtX2NoZWNrID0geDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2ssCi0JLmludF9kZWxpdmVyeV9tb2RlID0gZGVzdF9GaXhlZCwKLQkuaW50X2Rlc3RfbW9kZSA9IChBUElDX0RFU1RfUEhZU0lDQUwgIT0gMCksCi0JLnRhcmdldF9jcHVzID0geDJhcGljX3RhcmdldF9jcHVzLAotCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gPSB4MmFwaWNfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAotCS5hcGljX2lkX3JlZ2lzdGVyZWQgPSB4MmFwaWNfYXBpY19pZF9yZWdpc3RlcmVkLAotCS5pbml0X2FwaWNfbGRyID0gaW5pdF94MmFwaWNfbGRyLAotCS5zZW5kX0lQSV9hbGwgPSB4MmFwaWNfc2VuZF9JUElfYWxsLAotCS5zZW5kX0lQSV9hbGxidXRzZWxmID0geDJhcGljX3NlbmRfSVBJX2FsbGJ1dHNlbGYsCi0JLnNlbmRfSVBJX21hc2sgPSB4MmFwaWNfc2VuZF9JUElfbWFzaywKLQkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmID0geDJhcGljX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfc2VsZiA9IHgyYXBpY19zZW5kX0lQSV9zZWxmLAotCS5jcHVfbWFza190b19hcGljaWQgPSB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkLAotCS5jcHVfbWFza190b19hcGljaWRfYW5kID0geDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCi0JLnBoeXNfcGtnX2lkID0gcGh5c19wa2dfaWQsCi0JLmdldF9hcGljX2lkID0gZ2V0X2FwaWNfaWQsCi0JLnNldF9hcGljX2lkID0gc2V0X2FwaWNfaWQsCi0JLmFwaWNfaWRfbWFzayA9ICgweEZGRkZGRkZGdSksCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5M2UwOC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYworKysgL2Rldi9udWxsCkBAIC0xLDYwMCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogU0dJIFVWIEFQSUMgZnVuY3Rpb25zIChub3RlOiBub3QgYW4gSW50ZWwgY29tcGF0aWJsZSBBUElDKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vaXBpLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgotI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+Ci0KLURFRklORV9QRVJfQ1BVKGludCwgeDJhcGljX2V4dHJhX2JpdHMpOwotCi1zdGF0aWMgZW51bSB1dl9zeXN0ZW1fdHlwZSB1dl9zeXN0ZW1fdHlwZTsKLQotc3RhdGljIGludCB1dl9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCWlmICghc3RyY21wKG9lbV9pZCwgIlNHSSIpKSB7Ci0JCWlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWTCIpKQotCQkJdXZfc3lzdGVtX3R5cGUgPSBVVl9MRUdBQ1lfQVBJQzsKLQkJZWxzZSBpZiAoIXN0cmNtcChvZW1fdGFibGVfaWQsICJVVlgiKSkKLQkJCXV2X3N5c3RlbV90eXBlID0gVVZfWDJBUElDOwotCQllbHNlIGlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWSCIpKSB7Ci0JCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX05PTl9VTklRVUVfQVBJQzsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1lbnVtIHV2X3N5c3RlbV90eXBlIGdldF91dl9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiB1dl9zeXN0ZW1fdHlwZTsKLX0KLQotaW50IGlzX3V2X3N5c3RlbSh2b2lkKQotewotCXJldHVybiB1dl9zeXN0ZW1fdHlwZSAhPSBVVl9OT05FOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXNfdXZfc3lzdGVtKTsKLQotREVGSU5FX1BFUl9DUFUoc3RydWN0IHV2X2h1Yl9pbmZvX3MsIF9fdXZfaHViX2luZm8pOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChfX3V2X2h1Yl9pbmZvKTsKLQotc3RydWN0IHV2X2JsYWRlX2luZm8gKnV2X2JsYWRlX2luZm87Ci1FWFBPUlRfU1lNQk9MX0dQTCh1dl9ibGFkZV9pbmZvKTsKLQotc2hvcnQgKnV2X25vZGVfdG9fYmxhZGU7Ci1FWFBPUlRfU1lNQk9MX0dQTCh1dl9ub2RlX3RvX2JsYWRlKTsKLQotc2hvcnQgKnV2X2NwdV90b19ibGFkZTsKLUVYUE9SVF9TWU1CT0xfR1BMKHV2X2NwdV90b19ibGFkZSk7Ci0KLXNob3J0IHV2X3Bvc3NpYmxlX2JsYWRlczsKLUVYUE9SVF9TWU1CT0xfR1BMKHV2X3Bvc3NpYmxlX2JsYWRlcyk7Ci0KLXVuc2lnbmVkIGxvbmcgc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kOwotRVhQT1JUX1NZTUJPTChzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQpOwotCi0vKiBTdGFydCB3aXRoIGFsbCBJUlFzIHBvaW50aW5nIHRvIGJvb3QgQ1BVLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNoaWZ0IHRoZW0uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdXZfdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gY3B1bWFza19vZigwKTsKLX0KLQotc3RhdGljIHZvaWQgdXZfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQotewotCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7Ci0JY3B1bWFza19zZXRfY3B1KGNwdSwgcmV0bWFzayk7Ci19Ci0KLWludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgcG5vZGU7Ci0KLQlwbm9kZSA9IHV2X2FwaWNpZF90b19wbm9kZShwaHlzX2FwaWNpZCk7Ci0JdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKLQkgICAgKHBoeXNfYXBpY2lkIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAotCSAgICAoKChsb25nKXN0YXJ0X3JpcCA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCkgPj4gMTIpIHwKLQkgICAgQVBJQ19ETV9JTklUOwotCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7Ci0JbWRlbGF5KDEwKTsKLQotCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8Ci0JICAgIChwaHlzX2FwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKLQkgICAgKCgobG9uZylzdGFydF9yaXAgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpID4+IDEyKSB8Ci0JICAgIEFQSUNfRE1fU1RBUlRVUDsKLQl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9vbmUoaW50IGNwdSwgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgYXBpY2lkLCBsYXBpY2lkOwotCWludCBwbm9kZTsKLQotCWFwaWNpZCA9IHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0JbGFwaWNpZCA9IGFwaWNpZCAmIDB4M2Y7CQkvKiBaWlogbWFjcm8gbmVlZGVkICovCi0JcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKLQl2YWwgPQotCSAgICAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfCAobGFwaWNpZCA8PAotCQkJCQkgICAgICBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKLQkgICAgKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7Ci0JdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCi0JZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykKLQkJdXZfc2VuZF9JUElfb25lKGNwdSwgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGludCBjcHU7Ci0JdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykKLQkJaWYgKGNwdSAhPSB0aGlzX2NwdSkKLQkJCXV2X3NlbmRfSVBJX29uZShjcHUsIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlpZiAoY3B1ICE9IHRoaXNfY3B1KQotCQkJdXZfc2VuZF9JUElfb25lKGNwdSwgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0JdXZfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgdXZfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHV2X2luaXRfYXBpY19sZHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB1dl9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrKTsKLQlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCWVsc2UKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXZfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCWJyZWFrOwotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JdW5zaWduZWQgaW50IGlkOwotCi0JV0FSTl9PTihwcmVlbXB0aWJsZSgpICYmIG51bV9vbmxpbmVfY3B1cygpID4gMSk7Ci0JaWQgPSB4IHwgX19nZXRfY3B1X3Zhcih4MmFwaWNfZXh0cmFfYml0cyk7Ci0KLQlyZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKLXsKLQl1bnNpZ25lZCBsb25nIHg7Ci0KLQkvKiBtYXNrb3V0IHgyYXBpY19leHRyYV9iaXRzID8gKi8KLQl4ID0gaWQ7Ci0JcmV0dXJuIHg7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXZfcmVhZF9hcGljX2lkKHZvaWQpCi17Ci0KLQlyZXR1cm4gZ2V0X2FwaWNfaWQoYXBpY19yZWFkKEFQSUNfSUQpKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwaHlzX3BrZ19pZChpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiB1dl9yZWFkX2FwaWNfaWQoKSA+PiBpbmRleF9tc2I7Ci19Ci0KLXN0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQlhcGljX3dyaXRlKEFQSUNfU0VMRl9JUEksIHZlY3Rvcik7Ci19Ci0KLXN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3V2X3ggPSB7Ci0JLm5hbWUgPSAiVVYgbGFyZ2Ugc3lzdGVtIiwKLQkuYWNwaV9tYWR0X29lbV9jaGVjayA9IHV2X2FjcGlfbWFkdF9vZW1fY2hlY2ssCi0JLmludF9kZWxpdmVyeV9tb2RlID0gZGVzdF9GaXhlZCwKLQkuaW50X2Rlc3RfbW9kZSA9IChBUElDX0RFU1RfUEhZU0lDQUwgIT0gMCksCi0JLnRhcmdldF9jcHVzID0gdXZfdGFyZ2V0X2NwdXMsCi0JLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiA9IHV2X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKLQkuYXBpY19pZF9yZWdpc3RlcmVkID0gdXZfYXBpY19pZF9yZWdpc3RlcmVkLAotCS5pbml0X2FwaWNfbGRyID0gdXZfaW5pdF9hcGljX2xkciwKLQkuc2VuZF9JUElfYWxsID0gdXZfc2VuZF9JUElfYWxsLAotCS5zZW5kX0lQSV9hbGxidXRzZWxmID0gdXZfc2VuZF9JUElfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfbWFzayA9IHV2X3NlbmRfSVBJX21hc2ssCi0JLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiA9IHV2X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfc2VsZiA9IHV2X3NlbmRfSVBJX3NlbGYsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZCA9IHV2X2NwdV9tYXNrX3RvX2FwaWNpZCwKLQkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZCA9IHV2X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCi0JLnBoeXNfcGtnX2lkID0gcGh5c19wa2dfaWQsCi0JLmdldF9hcGljX2lkID0gZ2V0X2FwaWNfaWQsCi0JLnNldF9hcGljX2lkID0gc2V0X2FwaWNfaWQsCi0JLmFwaWNfaWRfbWFzayA9ICgweEZGRkZGRkZGdSksCi19OwotCi1zdGF0aWMgX19jcHVpbml0IHZvaWQgc2V0X3gyYXBpY19leHRyYV9iaXRzKGludCBwbm9kZSkKLXsKLQlfX2dldF9jcHVfdmFyKHgyYXBpY19leHRyYV9iaXRzKSA9IChwbm9kZSA8PCA2KTsKLX0KLQotLyoKLSAqIENhbGxlZCBvbiBib290IGNwdS4KLSAqLwotc3RhdGljIF9faW5pdCBpbnQgYm9vdF9wbm9kZV90b19ibGFkZShpbnQgcG5vZGUpCi17Ci0JaW50IGJsYWRlOwotCi0JZm9yIChibGFkZSA9IDA7IGJsYWRlIDwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOyBibGFkZSsrKQotCQlpZiAocG5vZGUgPT0gdXZfYmxhZGVfaW5mb1tibGFkZV0ucG5vZGUpCi0JCQlyZXR1cm4gYmxhZGU7Ci0JQlVHKCk7Ci19Ci0KLXN0cnVjdCByZWRpcl9hZGRyIHsKLQl1bnNpZ25lZCBsb25nIHJlZGlyZWN0OwotCXVuc2lnbmVkIGxvbmcgYWxpYXM7Ci19OwotCi0jZGVmaW5lIERFU1RfU0hJRlQgVVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMF9NTVJfREVTVF9CQVNFX1NIRlQKLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IHJlZGlyX2FkZHIgcmVkaXJfYWRkcnNbXSA9IHsKLQl7VVZIX1JIX0dBTV9BTElBUzIxMF9SRURJUkVDVF9DT05GSUdfMF9NTVIsIFVWSF9TSV9BTElBUzBfT1ZFUkxBWV9DT05GSUd9LAotCXtVVkhfUkhfR0FNX0FMSUFTMjEwX1JFRElSRUNUX0NPTkZJR18xX01NUiwgVVZIX1NJX0FMSUFTMV9PVkVSTEFZX0NPTkZJR30sCi0Je1VWSF9SSF9HQU1fQUxJQVMyMTBfUkVESVJFQ1RfQ09ORklHXzJfTU1SLCBVVkhfU0lfQUxJQVMyX09WRVJMQVlfQ09ORklHfSwKLX07Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBnZXRfbG93bWVtX3JlZGlyZWN0KHVuc2lnbmVkIGxvbmcgKmJhc2UsIHVuc2lnbmVkIGxvbmcgKnNpemUpCi17Ci0JdW5pb24gdXZoX3NpX2FsaWFzMF9vdmVybGF5X2NvbmZpZ191IGFsaWFzOwotCXVuaW9uIHV2aF9yaF9nYW1fYWxpYXMyMTBfcmVkaXJlY3RfY29uZmlnXzJfbW1yX3UgcmVkaXJlY3Q7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWRpcl9hZGRycyk7IGkrKykgewotCQlhbGlhcy52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0uYWxpYXMpOwotCQlpZiAoYWxpYXMucy5iYXNlID09IDApIHsKLQkJCSpzaXplID0gKDFVTCA8PCBhbGlhcy5zLm1fYWxpYXMpOwotCQkJcmVkaXJlY3QudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLnJlZGlyZWN0KTsKLQkJCSpiYXNlID0gKHVuc2lnbmVkIGxvbmcpcmVkaXJlY3Qucy5kZXN0X2Jhc2UgPDwgREVTVF9TSElGVDsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlCVUcoKTsKLX0KLQotc3RhdGljIF9faW5pdCB2b2lkIG1hcF9sb3dfbW1ycyh2b2lkKQotewotCWluaXRfZXh0cmFfbWFwcGluZ191YyhVVl9HTE9CQUxfTU1SMzJfQkFTRSwgVVZfR0xPQkFMX01NUjMyX1NJWkUpOwotCWluaXRfZXh0cmFfbWFwcGluZ191YyhVVl9MT0NBTF9NTVJfQkFTRSwgVVZfTE9DQUxfTU1SX1NJWkUpOwotfQotCi1lbnVtIG1hcF90eXBlIHttYXBfd2IsIG1hcF91Y307Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBtYXBfaGlnaChjaGFyICppZCwgdW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgc2hpZnQsCi0JCQkgICAgaW50IG1heF9wbm9kZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzLCBwYWRkcjsKLQotCXBhZGRyID0gYmFzZSA8PCBzaGlmdDsKLQlieXRlcyA9ICgxVUwgPDwgc2hpZnQpICogKG1heF9wbm9kZSArIDEpOwotCXByaW50ayhLRVJOX0lORk8gIlVWOiBNYXAgJXNfSEkgMHglbHggLSAweCVseFxuIiwgaWQsIHBhZGRyLAotCSAgICAgICAJCQkJCXBhZGRyICsgYnl0ZXMpOwotCWlmIChtYXBfdHlwZSA9PSBtYXBfdWMpCi0JCWluaXRfZXh0cmFfbWFwcGluZ191YyhwYWRkciwgYnl0ZXMpOwotCWVsc2UKLQkJaW5pdF9leHRyYV9tYXBwaW5nX3diKHBhZGRyLCBieXRlcyk7Ci0KLX0KLXN0YXRpYyBfX2luaXQgdm9pZCBtYXBfZ3J1X2hpZ2goaW50IG1heF9wbm9kZSkKLXsKLQl1bmlvbiB1dmhfcmhfZ2FtX2dydV9vdmVybGF5X2NvbmZpZ19tbXJfdSBncnU7Ci0JaW50IHNoaWZ0ID0gVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfU0hGVDsKLQotCWdydS52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SKTsKLQlpZiAoZ3J1LnMuZW5hYmxlKQotCQltYXBfaGlnaCgiR1JVIiwgZ3J1LnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3diKTsKLX0KLQotc3RhdGljIF9faW5pdCB2b2lkIG1hcF9jb25maWdfaGlnaChpbnQgbWF4X3Bub2RlKQotewotCXVuaW9uIHV2aF9yaF9nYW1fY2ZnX292ZXJsYXlfY29uZmlnX21tcl91IGNmZzsKLQlpbnQgc2hpZnQgPSBVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUOwotCi0JY2ZnLnYgPSB1dl9yZWFkX2xvY2FsX21tcihVVkhfUkhfR0FNX0NGR19PVkVSTEFZX0NPTkZJR19NTVIpOwotCWlmIChjZmcucy5lbmFibGUpCi0JCW1hcF9oaWdoKCJDT05GSUciLCBjZmcucy5iYXNlLCBzaGlmdCwgbWF4X3Bub2RlLCBtYXBfdWMpOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgbWFwX21tcl9oaWdoKGludCBtYXhfcG5vZGUpCi17Ci0JdW5pb24gdXZoX3JoX2dhbV9tbXJfb3ZlcmxheV9jb25maWdfbW1yX3UgbW1yOwotCWludCBzaGlmdCA9IFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQ7Ci0KLQltbXIudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUik7Ci0JaWYgKG1tci5zLmVuYWJsZSkKLQkJbWFwX2hpZ2goIk1NUiIsIG1tci5zLmJhc2UsIHNoaWZ0LCBtYXhfcG5vZGUsIG1hcF91Yyk7Ci19Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBtYXBfbW1pb2hfaGlnaChpbnQgbWF4X3Bub2RlKQotewotCXVuaW9uIHV2aF9yaF9nYW1fbW1pb2hfb3ZlcmxheV9jb25maWdfbW1yX3UgbW1pb2g7Ci0JaW50IHNoaWZ0ID0gVVZIX1JIX0dBTV9NTUlPSF9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUOwotCi0JbW1pb2gudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SKTsKLQlpZiAobW1pb2gucy5lbmFibGUpCi0JCW1hcF9oaWdoKCJNTUlPSCIsIG1taW9oLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKLX0KLQotc3RhdGljIF9faW5pdCB2b2lkIHV2X3J0Y19pbml0KHZvaWQpCi17Ci0JbG9uZyBzdGF0dXM7Ci0JdTY0IHRpY2tzX3Blcl9zZWM7Ci0KLQlzdGF0dXMgPSB1dl9iaW9zX2ZyZXFfYmFzZShCSU9TX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSywKLQkJCQkJJnRpY2tzX3Blcl9zZWMpOwotCWlmIChzdGF0dXMgIT0gQklPU19TVEFUVVNfU1VDQ0VTUyB8fCB0aWNrc19wZXJfc2VjIDwgMTAwMDAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJ1bmFibGUgdG8gZGV0ZXJtaW5lIHBsYXRmb3JtIFJUQyBjbG9jayBmcmVxdWVuY3ksICIKLQkJCSJndWVzc2luZy5cbiIpOwotCQkvKiBCSU9TIGdpdmVzIHdyb25nIHZhbHVlIGZvciBjbG9jayBmcmVxLiBzbyBndWVzcyAqLwotCQlzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQgPSAxMDAwMDAwMDAwMDAwVUwgLyAzMDAwMFVMOwotCX0gZWxzZQotCQlzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQgPSB0aWNrc19wZXJfc2VjOwotfQotCi0vKgotICogcGVyY3B1IGhlYXJ0YmVhdCB0aW1lcgotICovCi1zdGF0aWMgdm9pZCB1dl9oZWFydGJlYXQodW5zaWduZWQgbG9uZyBpZ25vcmVkKQotewotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ1dl9odWJfaW5mby0+c2Npci50aW1lcjsKLQl1bnNpZ25lZCBjaGFyIGJpdHMgPSB1dl9odWJfaW5mby0+c2Npci5zdGF0ZTsKLQotCS8qIGZsaXAgaGVhcnRiZWF0IGJpdCAqLwotCWJpdHMgXj0gU0NJUl9DUFVfSEVBUlRCRUFUOwotCi0JLyogaXMgdGhpcyBjcHUgaWRsZT8gKi8KLQlpZiAoaWRsZV9jcHUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCWJpdHMgJj0gflNDSVJfQ1BVX0FDVElWSVRZOwotCWVsc2UKLQkJYml0cyB8PSBTQ0lSX0NQVV9BQ1RJVklUWTsKLQotCS8qIHVwZGF0ZSBzeXN0ZW0gY29udHJvbGxlciBpbnRlcmZhY2UgcmVnICovCi0JdXZfc2V0X3NjaXJfYml0cyhiaXRzKTsKLQotCS8qIGVuYWJsZSBuZXh0IHRpbWVyIHBlcmlvZCAqLwotCW1vZF90aW1lcih0aW1lciwgamlmZmllcyArIFNDSVJfQ1BVX0hCX0lOVEVSVkFMKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IHV2X2hlYXJ0YmVhdF9lbmFibGUoaW50IGNwdSkKLXsKLQlpZiAoIXV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLmVuYWJsZWQpIHsKLQkJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyID0gJnV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLnRpbWVyOwotCi0JCXV2X3NldF9jcHVfc2Npcl9iaXRzKGNwdSwgU0NJUl9DUFVfSEVBUlRCRUFUfFNDSVJfQ1BVX0FDVElWSVRZKTsKLQkJc2V0dXBfdGltZXIodGltZXIsIHV2X2hlYXJ0YmVhdCwgY3B1KTsKLQkJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgU0NJUl9DUFVfSEJfSU5URVJWQUw7Ci0JCWFkZF90aW1lcl9vbih0aW1lciwgY3B1KTsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIuZW5hYmxlZCA9IDE7Ci0JfQotCi0JLyogY2hlY2sgYm9vdCBjcHUgKi8KLQlpZiAoIXV2X2NwdV9odWJfaW5mbygwKS0+c2Npci5lbmFibGVkKQotCQl1dl9oZWFydGJlYXRfZW5hYmxlKDApOwotfQotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgdXZfaGVhcnRiZWF0X2Rpc2FibGUoaW50IGNwdSkKLXsKLQlpZiAodXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIuZW5hYmxlZCkgewotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkID0gMDsKLQkJZGVsX3RpbWVyKCZ1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci50aW1lcik7Ci0JfQotCXV2X3NldF9jcHVfc2Npcl9iaXRzKGNwdSwgMHhmZik7Ci19Ci0KLS8qCi0gKiBjcHUgaG90cGx1ZyBub3RpZmllcgotICovCi1zdGF0aWMgX19jcHVpbml0IGludCB1dl9zY2lyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKLXsKLQlsb25nIGNwdSA9IChsb25nKWhjcHU7Ci0KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgQ1BVX09OTElORToKLQkJdXZfaGVhcnRiZWF0X2VuYWJsZShjcHUpOwotCQlicmVhazsKLQljYXNlIENQVV9ET1dOX1BSRVBBUkU6Ci0JCXV2X2hlYXJ0YmVhdF9kaXNhYmxlKGNwdSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gTk9USUZZX09LOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIodm9pZCkKLXsKLQlob3RjcHVfbm90aWZpZXIodXZfc2Npcl9jcHVfbm90aWZ5LCAwKTsKLX0KLQotI2Vsc2UgLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLwotCi1zdGF0aWMgX19pbml0IHZvaWQgdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIodm9pZCkKLXsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgdXZfaW5pdF9oZWFydGJlYXQodm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JaWYgKGlzX3V2X3N5c3RlbSgpKQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCXV2X2hlYXJ0YmVhdF9lbmFibGUoY3B1KTsKLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbCh1dl9pbml0X2hlYXJ0YmVhdCk7Ci0KLSNlbmRpZiAvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCi0KLS8qCi0gKiBDYWxsZWQgb24gZWFjaCBjcHUgdG8gaW5pdGlhbGl6ZSB0aGUgcGVyX2NwdSBVViBkYXRhIGFyZWEuCi0gKiAJWlpaIGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKLSAqLwotdm9pZCBfX2NwdWluaXQgdXZfY3B1X2luaXQodm9pZCkKLXsKLQkvKiBDUFUgMCBpbml0aWxpemF0aW9uIHdpbGwgYmUgZG9uZSB2aWEgdXZfc3lzdGVtX2luaXQuICovCi0JaWYgKCF1dl9ibGFkZV9pbmZvKQotCQlyZXR1cm47Ci0KLQl1dl9ibGFkZV9pbmZvW3V2X251bWFfYmxhZGVfaWQoKV0ubnJfb25saW5lX2NwdXMrKzsKLQotCWlmIChnZXRfdXZfc3lzdGVtX3R5cGUoKSA9PSBVVl9OT05fVU5JUVVFX0FQSUMpCi0JCXNldF94MmFwaWNfZXh0cmFfYml0cyh1dl9odWJfaW5mby0+cG5vZGUpOwotfQotCi0KLXZvaWQgX19pbml0IHV2X3N5c3RlbV9pbml0KHZvaWQpCi17Ci0JdW5pb24gdXZoX3NpX2FkZHJfbWFwX2NvbmZpZ191IG1fbl9jb25maWc7Ci0JdW5pb24gdXZoX25vZGVfaWRfdSBub2RlX2lkOwotCXVuc2lnbmVkIGxvbmcgZ25vZGVfdXBwZXIsIGxvd21lbV9yZWRpcl9iYXNlLCBsb3dtZW1fcmVkaXJfc2l6ZTsKLQlpbnQgYnl0ZXMsIG5pZCwgY3B1LCBsY3B1LCBwbm9kZSwgYmxhZGUsIGksIGosIG1fdmFsLCBuX3ZhbDsKLQlpbnQgbWF4X3Bub2RlID0gMDsKLQl1bnNpZ25lZCBsb25nIG1tcl9iYXNlLCBwcmVzZW50OwotCi0JbWFwX2xvd19tbXJzKCk7Ci0KLQltX25fY29uZmlnLnYgPSB1dl9yZWFkX2xvY2FsX21tcihVVkhfU0lfQUREUl9NQVBfQ09ORklHKTsKLQltX3ZhbCA9IG1fbl9jb25maWcucy5tX3NrdDsKLQluX3ZhbCA9IG1fbl9jb25maWcucy5uX3NrdDsKLQltbXJfYmFzZSA9Ci0JICAgIHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUikgJgotCSAgICB+VVZfTU1SX0VOQUJMRTsKLQlwcmludGsoS0VSTl9ERUJVRyAiVVY6IGdsb2JhbCBNTVIgYmFzZSAweCVseFxuIiwgbW1yX2Jhc2UpOwotCi0JZm9yKGkgPSAwOyBpIDwgVVZIX05PREVfUFJFU0VOVF9UQUJMRV9ERVBUSDsgaSsrKQotCQl1dl9wb3NzaWJsZV9ibGFkZXMgKz0KLQkJICBod2VpZ2h0NjQodXZfcmVhZF9sb2NhbF9tbXIoIFVWSF9OT0RFX1BSRVNFTlRfVEFCTEUgKyBpICogOCkpOwotCXByaW50ayhLRVJOX0RFQlVHICJVVjogRm91bmQgJWQgYmxhZGVzXG4iLCB1dl9udW1fcG9zc2libGVfYmxhZGVzKCkpOwotCi0JYnl0ZXMgPSBzaXplb2Yoc3RydWN0IHV2X2JsYWRlX2luZm8pICogdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOwotCXV2X2JsYWRlX2luZm8gPSBrbWFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKLQotCWdldF9sb3dtZW1fcmVkaXJlY3QoJmxvd21lbV9yZWRpcl9iYXNlLCAmbG93bWVtX3JlZGlyX3NpemUpOwotCi0JYnl0ZXMgPSBzaXplb2YodXZfbm9kZV90b19ibGFkZVswXSkgKiBudW1fcG9zc2libGVfbm9kZXMoKTsKLQl1dl9ub2RlX3RvX2JsYWRlID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KHV2X25vZGVfdG9fYmxhZGUsIDI1NSwgYnl0ZXMpOwotCi0JYnl0ZXMgPSBzaXplb2YodXZfY3B1X3RvX2JsYWRlWzBdKSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7Ci0JdXZfY3B1X3RvX2JsYWRlID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KHV2X2NwdV90b19ibGFkZSwgMjU1LCBieXRlcyk7Ci0KLQlibGFkZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFVWSF9OT0RFX1BSRVNFTlRfVEFCTEVfREVQVEg7IGkrKykgewotCQlwcmVzZW50ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX05PREVfUFJFU0VOVF9UQUJMRSArIGkgKiA4KTsKLQkJZm9yIChqID0gMDsgaiA8IDY0OyBqKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaiwgJnByZXNlbnQpKQotCQkJCWNvbnRpbnVlOwotCQkJdXZfYmxhZGVfaW5mb1tibGFkZV0ucG5vZGUgPSAoaSAqIDY0ICsgaik7Ci0JCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9wb3NzaWJsZV9jcHVzID0gMDsKLQkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX29ubGluZV9jcHVzID0gMDsKLQkJCWJsYWRlKys7Ci0JCX0KLQl9Ci0KLQlub2RlX2lkLnYgPSB1dl9yZWFkX2xvY2FsX21tcihVVkhfTk9ERV9JRCk7Ci0JZ25vZGVfdXBwZXIgPSAoKCh1bnNpZ25lZCBsb25nKW5vZGVfaWQucy5ub2RlX2lkKSAmCi0JCSAgICAgICB+KCgxIDw8IG5fdmFsKSAtIDEpKSA8PCBtX3ZhbDsKLQotCXV2X2Jpb3NfaW5pdCgpOwotCXV2X2Jpb3NfZ2V0X3NuX2luZm8oMCwgJnV2X3R5cGUsICZzbl9wYXJ0aXRpb25faWQsCi0JCQkgICAgJnNuX2NvaGVyZW5jeV9pZCwgJnNuX3JlZ2lvbl9zaXplKTsKLQl1dl9ydGNfaW5pdCgpOwotCi0JZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7Ci0JCW5pZCA9IGNwdV90b19ub2RlKGNwdSk7Ci0JCXBub2RlID0gdXZfYXBpY2lkX3RvX3Bub2RlKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkpOwotCQlibGFkZSA9IGJvb3RfcG5vZGVfdG9fYmxhZGUocG5vZGUpOwotCQlsY3B1ID0gdXZfYmxhZGVfaW5mb1tibGFkZV0ubnJfcG9zc2libGVfY3B1czsKLQkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubnJfcG9zc2libGVfY3B1cysrOwotCi0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfYmFzZSA9IGxvd21lbV9yZWRpcl9iYXNlOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX3RvcCA9IGxvd21lbV9yZWRpcl9zaXplOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bV92YWwgPSBtX3ZhbDsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbV92YWw7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5udW1hX2JsYWRlX2lkID0gYmxhZGU7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ibGFkZV9wcm9jZXNzb3JfaWQgPSBsY3B1OwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGUgPSBwbm9kZTsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSAoMSA8PCBuX3ZhbCkgLSAxOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbG9iYWxfbW1yX2Jhc2UgPSBtbXJfYmFzZTsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmNvaGVyZW5jeV9kb21haW5fbnVtYmVyID0gc25fY29oZXJlbmN5X2lkOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5vZmZzZXQgPSBTQ0lSX0xPQ0FMX01NUl9CQVNFICsgbGNwdTsKLQkJdXZfbm9kZV90b19ibGFkZVtuaWRdID0gYmxhZGU7Ci0JCXV2X2NwdV90b19ibGFkZVtjcHVdID0gYmxhZGU7Ci0JCW1heF9wbm9kZSA9IG1heChwbm9kZSwgbWF4X3Bub2RlKTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiVVY6IGNwdSAlZCwgYXBpY2lkIDB4JXgsIHBub2RlICVkLCBuaWQgJWQsICIKLQkJCSJsY3B1ICVkLCBibGFkZSAlZFxuIiwKLQkJCWNwdSwgcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSwgcG5vZGUsIG5pZCwKLQkJCWxjcHUsIGJsYWRlKTsKLQl9Ci0KLQltYXBfZ3J1X2hpZ2gobWF4X3Bub2RlKTsKLQltYXBfbW1yX2hpZ2gobWF4X3Bub2RlKTsKLQltYXBfY29uZmlnX2hpZ2gobWF4X3Bub2RlKTsKLQltYXBfbW1pb2hfaGlnaChtYXhfcG5vZGUpOwotCi0JdXZfY3B1X2luaXQoKTsKLQl1dl9zY2lyX3JlZ2lzdGVyX2NwdV9ub3RpZmllcigpOwotCXByb2NfbWtkaXIoInNnaV91diIsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCmluZGV4IGI5YTRkOGMuLmY1YjI3MjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTI2LDI3ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgogI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CiAKLS8qIGJvb3QgY3B1IHBkYSAqLwotc3RhdGljIHN0cnVjdCB4ODY2NF9wZGEgX2Jvb3RfY3B1X3BkYTsKLQotI2lmZGVmIENPTkZJR19TTVAKLS8qCi0gKiBXZSBpbnN0YWxsIGFuIGVtcHR5IGNwdV9wZGEgcG9pbnRlciB0YWJsZSB0byBpbmRpY2F0ZSB0byBlYXJseSB1c2VycwotICogKG51bWFfc2V0X25vZGUpIHRoYXQgdGhlIGNwdV9wZGEgcG9pbnRlciB0YWJsZSBmb3IgY3B1cyBvdGhlciB0aGFuCi0gKiB0aGUgYm9vdCBjcHUgaXMgbm90IHlldCBzZXR1cC4KLSAqLwotc3RhdGljIHN0cnVjdCB4ODY2NF9wZGEgKl9fY3B1X3BkYVtOUl9DUFVTXSBfX2luaXRkYXRhOwotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgeDg2NjRfcGRhICpfX2NwdV9wZGFbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKLSNlbmRpZgotCi12b2lkIF9faW5pdCB4ODZfNjRfaW5pdF9wZGEodm9pZCkKLXsKLQlfY3B1X3BkYSA9IF9fY3B1X3BkYTsKLQljcHVfcGRhKDApID0gJl9ib290X2NwdV9wZGE7Ci0JcGRhX2luaXQoMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCB6YXBfaWRlbnRpdHlfbWFwcGluZ3Modm9pZCkKIHsKIAlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKDBVTCk7CkBAIC0xMTIsOCArOTEsNiBAQAogCWlmIChjb25zb2xlX2xvZ2xldmVsID09IDEwKQogCQllYXJseV9wcmludGsoIktlcm5lbCBhbGl2ZVxuIik7CiAKLQl4ODZfNjRfaW5pdF9wZGEoKTsKLQogCXg4Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMocmVhbF9tb2RlX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCBlODM1YjRlLi5jMzJjYTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTExLDE0ICsxMSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KIAogLyogUGh5c2ljYWwgYWRkcmVzcyAqLwogI2RlZmluZSBwYShYKSAoKFgpIC0gX19QQUdFX09GRlNFVCkKQEAgLTQyOSwxNCArNDMwLDM0IEBACiAJbGptcCAkKF9fS0VSTkVMX0NTKSwkMWYKIDE6CW1vdmwgJChfX0tFUk5FTF9EUyksJWVheAkjIHJlbG9hZCBhbGwgdGhlIHNlZ21lbnQgcmVnaXN0ZXJzCiAJbW92bCAlZWF4LCVzcwkJCSMgYWZ0ZXIgY2hhbmdpbmcgZ2R0LgotCW1vdmwgJWVheCwlZnMJCQkjIGdldHMgcmVzZXQgb25jZSB0aGVyZSdzIHJlYWwgcGVyY3B1CiAKIAltb3ZsICQoX19VU0VSX0RTKSwlZWF4CQkjIERTL0VTIGNvbnRhaW5zIGRlZmF1bHQgVVNFUiBzZWdtZW50CiAJbW92bCAlZWF4LCVkcwogCW1vdmwgJWVheCwlZXMKIAotCXhvcmwgJWVheCwlZWF4CQkJIyBDbGVhciBHUyBhbmQgTERUCisJbW92bCAkKF9fS0VSTkVMX1BFUkNQVSksICVlYXgKKwltb3ZsICVlYXgsJWZzCQkJIyBzZXQgdGhpcyBjcHUncyBwZXJjcHUKKworI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorCS8qCisJICogVGhlIGxpbmtlciBjYW4ndCBoYW5kbGUgdGhpcyBieSByZWxvY2F0aW9uLiAgTWFudWFsbHkgc2V0CisJICogYmFzZSBhZGRyZXNzIGluIHN0YWNrIGNhbmFyeSBzZWdtZW50IGRlc2NyaXB0b3IuCisJICovCisJY21wYiAkMCxyZWFkeQorCWpuZSAxZgorCW1vdmwgJHBlcl9jcHVfX2dkdF9wYWdlLCVlYXgKKwltb3ZsICRwZXJfY3B1X19zdGFja19jYW5hcnksJWVjeAorCXN1YmwgJDIwLCAlZWN4CisJbW92dyAlY3gsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgMiglZWF4KQorCXNocmwgJDE2LCAlZWN4CisJbW92YiAlY2wsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgNCglZWF4KQorCW1vdmIgJWNoLCA4ICogR0RUX0VOVFJZX1NUQUNLX0NBTkFSWSArIDcoJWVheCkKKzE6CisjZW5kaWYKKwltb3ZsICQoX19LRVJORUxfU1RBQ0tfQ0FOQVJZKSwlZWF4CiAJbW92bCAlZWF4LCVncworCisJeG9ybCAlZWF4LCVlYXgJCQkjIENsZWFyIExEVAogCWxsZHQgJWF4CiAKIAljbGQJCQkjIGdjYzIgd2FudHMgdGhlIGRpcmVjdGlvbiBmbGFnIGNsZWFyZWQgYXQgYWxsIHRpbWVzCkBAIC00NDYsOCArNDY3LDYgQEAKIAltb3ZiICQxLCByZWFkeQogCWNtcGIgJDAsJWNsCQkjIHRoZSBmaXJzdCBDUFUgY2FsbHMgc3RhcnRfa2VybmVsCiAJamUgICAxZgotCW1vdmwgJChfX0tFUk5FTF9QRVJDUFUpLCAlZWF4Ci0JbW92bCAlZWF4LCVmcwkJIyBzZXQgdGhpcyBjcHUncyBwZXJjcHUKIAltb3ZsIChzdGFja19zdGFydCksICVlc3AKIDE6CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtNTQ4LDEyICs1NjcsOCBAQAogCXB1c2hsICVlYXgKIAlwdXNobCAlZWR4CQkvKiB0cmFwbm8gKi8KIAlwdXNobCAkZmF1bHRfbXNnCi0jaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwotCWNhbGwgZWFybHlfcHJpbnRrCi0jZWxzZQogCWNhbGwgcHJpbnRrCiAjZW5kaWYKLSNlbmRpZgogCWNhbGwgZHVtcF9zdGFjawogaGx0X2xvb3A6CiAJaGx0CkBAIC01ODAsMTEgKzU5NSwxMCBAQAogCXB1c2hsIDMyKCVlc3ApCiAJcHVzaGwgNDAoJWVzcCkKIAlwdXNobCAkaW50X21zZwotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLQljYWxsIGVhcmx5X3ByaW50awotI2Vsc2UKIAljYWxsIHByaW50awotI2VuZGlmCisKKwljYWxsIGR1bXBfc3RhY2sKKwogCWFkZGwgJCg1KjQpLCVlc3AKIAlwb3BsICVkcwogCXBvcGwgJWVzCkBAIC02NjAsNyArNjc0LDcgQEAKIAkubG9uZyAwCiAKIGludF9tc2c6Ci0JLmFzY2l6ICJVbmtub3duIGludGVycnVwdCBvciBmYXVsdCBhdCBFSVAgJXAgJXAgJXBcbiIKKwkuYXNjaXogIlVua25vd24gaW50ZXJydXB0IG9yIGZhdWx0IGF0OiAlcCAlcCAlcFxuIgogCiBmYXVsdF9tc2c6CiAvKiBmYXVsdCBpbmZvOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMGUyNzVkNC4uNTRiMjliYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KQEAgLTIyNiwxMiArMjI3LDE1IEBACiAJbW92bCAlZWF4LCVmcwogCW1vdmwgJWVheCwlZ3MKIAotCS8qIAotCSAqIFNldHVwIHVwIGEgZHVtbXkgUERBLiB0aGlzIGlzIGp1c3QgZm9yIHNvbWUgZWFybHkgYm9vdHVwIGNvZGUKLQkgKiB0aGF0IGRvZXMgaW5faW50ZXJydXB0KCkgCi0JICovIAorCS8qIFNldCB1cCAlZ3MuCisJICoKKwkgKiBUaGUgYmFzZSBvZiAlZ3MgYWx3YXlzIHBvaW50cyB0byB0aGUgYm90dG9tIG9mIHRoZSBpcnFzdGFjaworCSAqIHVuaW9uLiAgSWYgdGhlIHN0YWNrIHByb3RlY3RvciBjYW5hcnkgaXMgZW5hYmxlZCwgaXQgaXMKKwkgKiBsb2NhdGVkIGF0ICVnczo0MC4gIE5vdGUgdGhhdCwgb24gU01QLCB0aGUgYm9vdCBjcHUgdXNlcworCSAqIGluaXQgZGF0YSBzZWN0aW9uIHRpbGwgcGVyIGNwdSBhcmVhcyBhcmUgc2V0IHVwLgorCSAqLwogCW1vdmwJJE1TUl9HU19CQVNFLCVlY3gKLQltb3ZxCSRlbXB0eV96ZXJvX3BhZ2UsJXJheAorCW1vdnEJaW5pdGlhbF9ncyglcmlwKSwlcmF4CiAJbW92cSAgICAlcmF4LCVyZHgKIAlzaHJxCSQzMiwlcmR4CiAJd3Jtc3IJCkBAIC0yNTcsNiArMjYxLDggQEAKIAkuYWxpZ24JOAogCUVOVFJZKGluaXRpYWxfY29kZSkKIAkucXVhZAl4ODZfNjRfc3RhcnRfa2VybmVsCisJRU5UUlkoaW5pdGlhbF9ncykKKwkucXVhZAlJTklUX1BFUl9DUFVfVkFSKGlycV9zdGFja191bmlvbikKIAlfX0ZJTklUREFUQQogCiAJRU5UUlkoc3RhY2tfc3RhcnQpCkBAIC0zMjMsOCArMzI5LDYgQEAKICNlbmRpZiAvKiBDT05GSUdfRUFSTFlfUFJJTlRLICovCiAJLnByZXZpb3VzCiAKLS5iYWxpZ24gUEFHRV9TSVpFCi0KICNkZWZpbmUgTkVYVF9QQUdFKG5hbWUpIFwKIAkuYmFsaWduCVBBR0VfU0laRTsgXAogRU5UUlkobmFtZSkKQEAgLTQwMSw3ICs0MDUsOCBAQAogCS5nbG9ibCBlYXJseV9nZHRfZGVzY3IKIGVhcmx5X2dkdF9kZXNjcjoKIAkud29yZAlHRFRfRU5UUklFUyo4LTEKLQkucXVhZCAgIHBlcl9jcHVfX2dkdF9wYWdlCitlYXJseV9nZHRfZGVzY3JfYmFzZToKKwkucXVhZAlJTklUX1BFUl9DUFVfVkFSKGdkdF9wYWdlKQogCiBFTlRSWShwaHlzX2Jhc2UpCiAJLyogVGhpcyBtdXN0IG1hdGNoIHRoZSBmaXJzdCBlbnRyeSBpbiBsZXZlbDJfa2VybmVsX3BndCAqLwpAQCAtNDEyLDcgKzQxNyw3IEBACiAJLnNlY3Rpb24gLmJzcywgImF3IiwgQG5vYml0cwogCS5hbGlnbiBMMV9DQUNIRV9CWVRFUwogRU5UUlkoaWR0X3RhYmxlKQotCS5za2lwIDI1NiAqIDE2CisJLnNraXAgSURUX0VOVFJJRVMgKiAxNgogCiAJLnNlY3Rpb24gLmJzcy5wYWdlX2FsaWduZWQsICJhdyIsIEBub2JpdHMKIAkuYWxpZ24gUEFHRV9TSVpFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwppbmRleCBhMDA1NDVmLi42NDhiM2EyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqLwogc3RhdGljIGludCBib290X2hwZXRfZGlzYWJsZTsKIGludCBocGV0X2ZvcmNlX3VzZXI7CitzdGF0aWMgaW50IGhwZXRfdmVyYm9zZTsKIAogc3RhdGljIGludCBfX2luaXQgaHBldF9zZXR1cChjaGFyICpzdHIpCiB7CkBAIC04OCw2ICs4OSw4IEBACiAJCQlib290X2hwZXRfZGlzYWJsZSA9IDE7CiAJCWlmICghc3RybmNtcCgiZm9yY2UiLCBzdHIsIDUpKQogCQkJaHBldF9mb3JjZV91c2VyID0gMTsKKwkJaWYgKCFzdHJuY21wKCJ2ZXJib3NlIiwgc3RyLCA3KSkKKwkJCWhwZXRfdmVyYm9zZSA9IDE7CiAJfQogCXJldHVybiAxOwogfQpAQCAtMTE5LDYgKzEyMiw0MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNfaHBldF9lbmFibGVkKTsKIAorc3RhdGljIHZvaWQgX2hwZXRfcHJpbnRfY29uZmlnKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgbGluZSkKK3sKKwl1MzIgaSwgdGltZXJzLCBsLCBoOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6ICVzKCVkKTpcbiIsIGZ1bmN0aW9uLCBsaW5lKTsKKwlsID0gaHBldF9yZWFkbChIUEVUX0lEKTsKKwloID0gaHBldF9yZWFkbChIUEVUX1BFUklPRCk7CisJdGltZXJzID0gKChsICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKSArIDE7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogSUQ6IDB4JXgsIFBFUklPRDogMHgleFxuIiwgbCwgaCk7CisJbCA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOworCWggPSBocGV0X3JlYWRsKEhQRVRfU1RBVFVTKTsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiBDRkc6IDB4JXgsIFNUQVRVUzogMHgleFxuIiwgbCwgaCk7CisJbCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKKwloID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIrNCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogQ09VTlRFUl9sOiAweCV4LCBDT1VOVEVSX2g6IDB4JXhcbiIsIGwsIGgpOworCisJZm9yIChpID0gMDsgaSA8IHRpbWVyczsgaSsrKSB7CisJCWwgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGkpKTsKKwkJaCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaSkrNCk7CisJCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IFQlZDogQ0ZHX2w6IDB4JXgsIENGR19oOiAweCV4XG4iLAorCQkgICAgICAgaSwgbCwgaCk7CisJCWwgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ01QKGkpKTsKKwkJaCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DTVAoaSkrNCk7CisJCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IFQlZDogQ01QX2w6IDB4JXgsIENNUF9oOiAweCV4XG4iLAorCQkgICAgICAgaSwgbCwgaCk7CisJCWwgPSBocGV0X3JlYWRsKEhQRVRfVG5fUk9VVEUoaSkpOworCQloID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGkpKzQpOworCQlwcmludGsoS0VSTl9JTkZPICJocGV0OiBUJWQgUk9VVEVfbDogMHgleCwgUk9VVEVfaDogMHgleFxuIiwKKwkJICAgICAgIGksIGwsIGgpOworCX0KK30KKworI2RlZmluZSBocGV0X3ByaW50X2NvbmZpZygpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKGhwZXRfdmVyYm9zZSkJCQkJCVwKKwkJX2hwZXRfcHJpbnRfY29uZmlnKF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwlcCit9IHdoaWxlICgwKQorCiAvKgogICogV2hlbiB0aGUgaHBldCBkcml2ZXIgKC9kZXYvaHBldCkgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byByZXNlcnZlCiAgKiB0aW1lciAwIGFuZCB0aW1lciAxIGluIGNhc2Ugb2YgUlRDIGVtdWxhdGlvbi4KQEAgLTE5MSwyNyArMjMxLDM3IEBACiAJLnJhdGluZwkJPSA1MCwKIH07CiAKLXN0YXRpYyB2b2lkIGhwZXRfc3RhcnRfY291bnRlcih2b2lkKQorc3RhdGljIHZvaWQgaHBldF9zdG9wX2NvdW50ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwotCiAJY2ZnICY9IH5IUEVUX0NGR19FTkFCTEU7CiAJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CiAJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSKTsKIAlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIgKyA0KTsKK30KKworc3RhdGljIHZvaWQgaHBldF9zdGFydF9jb3VudGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKIAljZmcgfD0gSFBFVF9DRkdfRU5BQkxFOwogCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwogfQogCitzdGF0aWMgdm9pZCBocGV0X3Jlc3RhcnRfY291bnRlcih2b2lkKQoreworCWhwZXRfc3RvcF9jb3VudGVyKCk7CisJaHBldF9zdGFydF9jb3VudGVyKCk7Cit9CisKIHN0YXRpYyB2b2lkIGhwZXRfcmVzdW1lX2RldmljZSh2b2lkKQogewogCWZvcmNlX2hwZXRfcmVzdW1lKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhwZXRfcmVzdGFydF9jb3VudGVyKHZvaWQpCitzdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9jb3VudGVyKHZvaWQpCiB7CiAJaHBldF9yZXN1bWVfZGV2aWNlKCk7Ci0JaHBldF9zdGFydF9jb3VudGVyKCk7CisJaHBldF9yZXN0YXJ0X2NvdW50ZXIoKTsKIH0KIAogc3RhdGljIHZvaWQgaHBldF9lbmFibGVfbGVnYWN5X2ludCh2b2lkKQpAQCAtMjU5LDI5ICszMDksMjMgQEAKIHN0YXRpYyB2b2lkIGhwZXRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCiAJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCwgaW50IHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgY2ZnLCBjbXAsIG5vdzsKKwl1bnNpZ25lZCBsb25nIGNmZzsKIAl1aW50NjRfdCBkZWx0YTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWhwZXRfc3RvcF9jb3VudGVyKCk7CiAJCWRlbHRhID0gKCh1aW50NjRfdCkoTlNFQ19QRVJfU0VDL0haKSkgKiBldnQtPm11bHQ7CiAJCWRlbHRhID4+PSBldnQtPnNoaWZ0OwotCQlub3cgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7Ci0JCWNtcCA9IG5vdyArICh1bnNpZ25lZCBsb25nKSBkZWx0YTsKIAkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyh0aW1lcikpOwogCQkvKiBNYWtlIHN1cmUgd2UgdXNlIGVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgKi8KIAkJY2ZnICY9IH5IUEVUX1ROX0xFVkVMOwogCQljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROX1BFUklPRElDIHwKIAkJICAgICAgIEhQRVRfVE5fU0VUVkFMIHwgSFBFVF9UTl8zMkJJVDsKIAkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwotCQkvKgotCQkgKiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgd3JpdGluZyBUTl9TRVRWQUwgdG8gdGhlCi0JCSAqIGNvbmZpZyByZWdpc3RlciBzZXRzIHRoZSBjb3VudGVyIHZhbHVlLCB0aGUgc2Vjb25kCi0JCSAqIHdyaXRlIHNldHMgdGhlIHBlcmlvZC4KLQkJICovCi0JCWhwZXRfd3JpdGVsKGNtcCwgSFBFVF9Ubl9DTVAodGltZXIpKTsKLQkJdWRlbGF5KDEpOwogCQlocGV0X3dyaXRlbCgodW5zaWduZWQgbG9uZykgZGVsdGEsIEhQRVRfVG5fQ01QKHRpbWVyKSk7CisJCWhwZXRfc3RhcnRfY291bnRlcigpOworCQlocGV0X3ByaW50X2NvbmZpZygpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKQEAgLTMwOCw2ICszNTIsNyBAQAogCQkJaXJxX3NldF9hZmZpbml0eShoZGV2LT5pcnEsIGNwdW1hc2tfb2YoaGRldi0+Y3B1KSk7CiAJCQllbmFibGVfaXJxKGhkZXYtPmlycSk7CiAJCX0KKwkJaHBldF9wcmludF9jb25maWcoKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNTI2LDYgKzU3MSw3IEBACiAKIAludW1fdGltZXJzID0gKChpZCAmIEhQRVRfSURfTlVNQkVSKSA+PiBIUEVUX0lEX05VTUJFUl9TSElGVCk7CiAJbnVtX3RpbWVycysrOyAvKiBWYWx1ZSByZWFkIG91dCBzdGFydHMgZnJvbSAwICovCisJaHBldF9wcmludF9jb25maWcoKTsKIAogCWhwZXRfZGV2cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBocGV0X2RldikgKiBudW1fdGltZXJzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhwZXRfZGV2cykKQEAgLTY5NSw3ICs3NDEsNyBAQAogCS5tYXNrCQk9IEhQRVRfTUFTSywKIAkuc2hpZnQJCT0gSFBFVF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCi0JLnJlc3VtZQkJPSBocGV0X3Jlc3RhcnRfY291bnRlciwKKwkucmVzdW1lCQk9IGhwZXRfcmVzdW1lX2NvdW50ZXIsCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCS52cmVhZAkJPSB2cmVhZF9ocGV0LAogI2VuZGlmCkBAIC03MDcsNyArNzUzLDcgQEAKIAljeWNsZV90IHQxOwogCiAJLyogU3RhcnQgdGhlIGNvdW50ZXIgKi8KLQlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKwlocGV0X3Jlc3RhcnRfY291bnRlcigpOwogCiAJLyogVmVyaWZ5IHdoZXRoZXIgaHBldCBjb3VudGVyIHdvcmtzICovCiAJdDEgPSByZWFkX2hwZXQoKTsKQEAgLTc5Myw2ICs4MzksNyBAQAogCSAqIGluZm9ybWF0aW9uIGFuZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCiAJICovCiAJaWQgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAKICNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwogCS8qCkBAIC04NDUsNiArODkyLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlocGV0X3Jlc2VydmVfcGxhdGZvcm1fdGltZXJzKGhwZXRfcmVhZGwoSFBFVF9JRCkpOworCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlocGV0X2NwdWhwX25vdGlmeShOVUxMLCBDUFVfT05MSU5FLCAodm9pZCAqKShsb25nKWNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYyBiL2FyY2gveDg2L2tlcm5lbC9pODI1OS5jCmluZGV4IDExZDUwOTMuLmRmODkxMDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pODI1OS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzdhYzRkLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTY5ICswLDAgQEAKLS8qCi0gKglJbnRlbCBJTy1BUElDIHN1cHBvcnQgZm9yIG11bHRpLVBlbnRpdW0gaG9zdHMuCi0gKgotICoJQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyLCBIYWpuYWxrYSBTemFibwotICoKLSAqCU1hbnkgdGhhbmtzIHRvIFN0aWcgVmVuYWFzIGZvciB0cnlpbmcgb3V0IGNvdW50bGVzcyBleHBlcmltZW50YWwKLSAqCXBhdGNoZXMgYW5kIHJlcG9ydGluZy9kZWJ1Z2dpbmcgcHJvYmxlbXMgcGF0aWVudGx5IQotICoKLSAqCShjKSAxOTk5LCBNdWx0aXBsZSBJTy1BUElDIHN1cHBvcnQsIGRldmVsb3BlZCBieQotICoJS2VuLWljaGkgWWFrdSA8eWFrdUBjc3MxLmtibmVzLm5lYy5jby5qcD4gYW5kCi0gKiAgICAgIEhpZGVtaSBLaXNoaW1vdG8gPGtpc2ltb3RvQGNzczEua2JuZXMubmVjLmNvLmpwPiwKLSAqCWZ1cnRoZXIgdGVzdGVkIGFuZCBjbGVhbmVkIHVwIGJ5IFphY2ggQnJvd24gPHphYkByZWRoYXQuY29tPgotICoJYW5kIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICoKLSAqCUZpeGVzCi0gKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKLSAqCQkJCQl0aGFua3MgdG8gRXJpYyBHaWxtb3JlCi0gKgkJCQkJYW5kIFJvbGYgRy4gVGV3cwotICoJCQkJCWZvciB0ZXN0aW5nIHRoZXNlIGV4dGVuc2l2ZWx5Ci0gKglQYXVsIERpZWZlbmJhdWdoCToJQWRkZWQgZnVsbCBBQ1BJIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpICovCi0jaWZkZWYgQ09ORklHX0FDUEkKLSNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KLQotI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ0cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vaXJxX3JlbWFwcGluZy5oPgotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgotI2luY2x1ZGUgPGFzbS91di91dl9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0KLSNkZWZpbmUgX19hcGljZGVidWdpbml0KHR5cGUpIHN0YXRpYyB0eXBlIF9faW5pdAotCi0vKgotICogICAgICBJcyB0aGUgU2lTIEFQSUMgcm13IGJ1ZyBwcmVzZW50ID8KLSAqICAgICAgLTEgPSBkb24ndCBrbm93LCAwID0gbm8sIDEgPSB5ZXMKLSAqLwotaW50IHNpc19hcGljX2J1ZyA9IC0xOwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvYXBpY19sb2NrKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodmVjdG9yX2xvY2spOwotCi0vKgotICogIyBvZiBJUlEgcm91dGluZyByZWdpc3RlcnMKLSAqLwotaW50IG5yX2lvYXBpY19yZWdpc3RlcnNbTUFYX0lPX0FQSUNTXTsKLQotLyogSS9PIEFQSUMgZW50cmllcyAqLwotc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOwotaW50IG5yX2lvYXBpY3M7Ci0KLS8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwotCi0vKiAjIG9mIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotaW50IG1wX2lycV9lbnRyaWVzOwotCi0jaWYgZGVmaW5lZCAoQ09ORklHX01DQSkgfHwgZGVmaW5lZCAoQ09ORklHX0VJU0EpCi1pbnQgbXBfYnVzX2lkX3RvX3R5cGVbTUFYX01QX0JVU1NFU107Ci0jZW5kaWYKLQotREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotCi1pbnQgc2tpcF9pb2FwaWNfc2V0dXA7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vYXBpYyhjaGFyICpzdHIpCi17Ci0JLyogZGlzYWJsZSBJTy1BUElDICovCi0JZGlzYWJsZV9pb2FwaWNfc2V0dXAoKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOwotCi1zdHJ1Y3QgaXJxX3Bpbl9saXN0OwotCi0vKgotICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCi0gKgotICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncwotICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgotICovCi0KLXN0cnVjdCBpcnFfcGluX2xpc3QgewotCWludCBhcGljLCBwaW47Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqbmV4dDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpnZXRfb25lX2ZyZWVfaXJxXzJfcGluKGludCBjcHUpCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqcGluOwotCWludCBub2RlOwotCi0Jbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0KLQlwaW4gPSBremFsbG9jX25vZGUoc2l6ZW9mKCpwaW4pLCBHRlBfQVRPTUlDLCBub2RlKTsKLQotCXJldHVybiBwaW47Ci19Ci0KLXN0cnVjdCBpcnFfY2ZnIHsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW47Ci0JY3B1bWFza192YXJfdCBkb21haW47Ci0JY3B1bWFza192YXJfdCBvbGRfZG9tYWluOwotCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKLQl1OCB2ZWN0b3I7Ci0JdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7Ci0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQwotCXU4IG1vdmVfZGVzY19wZW5kaW5nIDogMTsKLSNlbmRpZgotfTsKLQotLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KLSNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W10gPSB7Ci0jZWxzZQotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdID0gewotI2VuZGlmCi0JWzBdICA9IHsgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKLQlbMV0gID0geyAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAotCVsyXSAgPSB7IC52ZWN0b3IgPSBJUlEyX1ZFQ1RPUiwgIH0sCi0JWzNdICA9IHsgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKLQlbNF0gID0geyAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAotCVs1XSAgPSB7IC52ZWN0b3IgPSBJUlE1X1ZFQ1RPUiwgIH0sCi0JWzZdICA9IHsgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKLQlbN10gID0geyAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAotCVs4XSAgPSB7IC52ZWN0b3IgPSBJUlE4X1ZFQ1RPUiwgIH0sCi0JWzldICA9IHsgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKLQlbMTBdID0geyAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAotCVsxMV0gPSB7IC52ZWN0b3IgPSBJUlExMV9WRUNUT1IsIH0sCi0JWzEyXSA9IHsgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKLQlbMTNdID0geyAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAotCVsxNF0gPSB7IC52ZWN0b3IgPSBJUlExNF9WRUNUT1IsIH0sCi0JWzE1XSA9IHsgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKLX07Ci0KLWludCBfX2luaXQgYXJjaF9lYXJseV9pcnFfaW5pdCh2b2lkKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCWludCBjb3VudDsKLQlpbnQgaTsKLQotCWNmZyA9IGlycV9jZmd4OwotCWNvdW50ID0gQVJSQVlfU0laRShpcnFfY2ZneCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7Ci0JCWRlc2MtPmNoaXBfZGF0YSA9ICZjZmdbaV07Ci0JCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNmZ1tpXS5kb21haW4pOwotCQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjZmdbaV0ub2xkX2RvbWFpbik7Ci0JCWlmIChpIDwgTlJfSVJRU19MRUdBQ1kpCi0JCQljcHVtYXNrX3NldGFsbChjZmdbaV0uZG9tYWluKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCi1zdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gTlVMTDsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlpZiAoZGVzYykKLQkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCi0JcmV0dXJuIGNmZzsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2ZnICpnZXRfb25lX2ZyZWVfaXJxX2NmZyhpbnQgY3B1KQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JaW50IG5vZGU7Ci0KLQlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQotCWNmZyA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmNmZyksIEdGUF9BVE9NSUMsIG5vZGUpOwotCWlmIChjZmcpIHsKLQkJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcl9ub2RlKCZjZmctPmRvbWFpbiwgR0ZQX0FUT01JQywgbm9kZSkpIHsKLQkJCWtmcmVlKGNmZyk7Ci0JCQljZmcgPSBOVUxMOwotCQl9IGVsc2UgaWYgKCFhbGxvY19jcHVtYXNrX3Zhcl9ub2RlKCZjZmctPm9sZF9kb21haW4sCi0JCQkJCQkJICBHRlBfQVRPTUlDLCBub2RlKSkgewotCQkJZnJlZV9jcHVtYXNrX3ZhcihjZmctPmRvbWFpbik7Ci0JCQlrZnJlZShjZmcpOwotCQkJY2ZnID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWNwdW1hc2tfY2xlYXIoY2ZnLT5kb21haW4pOwotCQkJY3B1bWFza19jbGVhcihjZmctPm9sZF9kb21haW4pOwotCQl9Ci0JfQotCi0JcmV0dXJuIGNmZzsKLX0KLQotaW50IGFyY2hfaW5pdF9jaGlwX2RhdGEoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0KLQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JaWYgKCFjZmcpIHsKLQkJZGVzYy0+Y2hpcF9kYXRhID0gZ2V0X29uZV9mcmVlX2lycV9jZmcoY3B1KTsKLQkJaWYgKCFkZXNjLT5jaGlwX2RhdGEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfY2ZnXG4iKTsKLQkJCUJVR19PTigxKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQwotCi1zdGF0aWMgdm9pZAotaW5pdF9jb3B5X2lycV8yX3BpbihzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZywgc3RydWN0IGlycV9jZmcgKmNmZywgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpvbGRfZW50cnksICpoZWFkLCAqdGFpbCwgKmVudHJ5OwotCi0JY2ZnLT5pcnFfMl9waW4gPSBOVUxMOwotCW9sZF9lbnRyeSA9IG9sZF9jZmctPmlycV8yX3BpbjsKLQlpZiAoIW9sZF9lbnRyeSkKLQkJcmV0dXJuOwotCi0JZW50cnkgPSBnZXRfb25lX2ZyZWVfaXJxXzJfcGluKGNwdSk7Ci0JaWYgKCFlbnRyeSkKLQkJcmV0dXJuOwotCi0JZW50cnktPmFwaWMJPSBvbGRfZW50cnktPmFwaWM7Ci0JZW50cnktPnBpbgk9IG9sZF9lbnRyeS0+cGluOwotCWhlYWQJCT0gZW50cnk7Ci0JdGFpbAkJPSBlbnRyeTsKLQlvbGRfZW50cnkJPSBvbGRfZW50cnktPm5leHQ7Ci0Jd2hpbGUgKG9sZF9lbnRyeSkgewotCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oY3B1KTsKLQkJaWYgKCFlbnRyeSkgewotCQkJZW50cnkgPSBoZWFkOwotCQkJd2hpbGUgKGVudHJ5KSB7Ci0JCQkJaGVhZCA9IGVudHJ5LT5uZXh0OwotCQkJCWtmcmVlKGVudHJ5KTsKLQkJCQllbnRyeSA9IGhlYWQ7Ci0JCQl9Ci0JCQkvKiBzdGlsbCB1c2UgdGhlIG9sZCBvbmUgKi8KLQkJCXJldHVybjsKLQkJfQotCQllbnRyeS0+YXBpYwk9IG9sZF9lbnRyeS0+YXBpYzsKLQkJZW50cnktPnBpbgk9IG9sZF9lbnRyeS0+cGluOwotCQl0YWlsLT5uZXh0CT0gZW50cnk7Ci0JCXRhaWwJCT0gZW50cnk7Ci0JCW9sZF9lbnRyeQk9IG9sZF9lbnRyeS0+bmV4dDsKLQl9Ci0KLQl0YWlsLT5uZXh0ID0gTlVMTDsKLQljZmctPmlycV8yX3BpbiA9IGhlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfaXJxXzJfcGluKHN0cnVjdCBpcnFfY2ZnICpvbGRfY2ZnLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5LCAqbmV4dDsKLQotCWlmIChvbGRfY2ZnLT5pcnFfMl9waW4gPT0gY2ZnLT5pcnFfMl9waW4pCi0JCXJldHVybjsKLQotCWVudHJ5ID0gb2xkX2NmZy0+aXJxXzJfcGluOwotCi0Jd2hpbGUgKGVudHJ5KSB7Ci0JCW5leHQgPSBlbnRyeS0+bmV4dDsKLQkJa2ZyZWUoZW50cnkpOwotCQllbnRyeSA9IG5leHQ7Ci0JfQotCW9sZF9jZmctPmlycV8yX3BpbiA9IE5VTEw7Ci19Ci0KLXZvaWQgYXJjaF9pbml0X2NvcHlfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCi0JCQkJIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCXN0cnVjdCBpcnFfY2ZnICpvbGRfY2ZnOwotCi0JY2ZnID0gZ2V0X29uZV9mcmVlX2lycV9jZmcoY3B1KTsKLQotCWlmICghY2ZnKQotCQlyZXR1cm47Ci0KLQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7Ci0KLQlvbGRfY2ZnID0gb2xkX2Rlc2MtPmNoaXBfZGF0YTsKLQotCW1lbWNweShjZmcsIG9sZF9jZmcsIHNpemVvZihzdHJ1Y3QgaXJxX2NmZykpOwotCi0JaW5pdF9jb3B5X2lycV8yX3BpbihvbGRfY2ZnLCBjZmcsIGNwdSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfaXJxX2NmZyhzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZykKLXsKLQlrZnJlZShvbGRfY2ZnKTsKLX0KLQotdm9pZCBhcmNoX2ZyZWVfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZywgKmNmZzsKLQotCW9sZF9jZmcgPSBvbGRfZGVzYy0+Y2hpcF9kYXRhOwotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCWlmIChvbGRfY2ZnID09IGNmZykKLQkJcmV0dXJuOwotCi0JaWYgKG9sZF9jZmcpIHsKLQkJZnJlZV9pcnFfMl9waW4ob2xkX2NmZywgY2ZnKTsKLQkJZnJlZV9pcnFfY2ZnKG9sZF9jZmcpOwotCQlvbGRfZGVzYy0+Y2hpcF9kYXRhID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfZXh0cmFfbW92ZV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCWlmICghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7Ci0JCS8qIGl0IG1lYW5zIHRoYXQgZG9tYWluIGlzIG5vdCBjaGFuZ2VkICovCi0JCWlmICghY3B1bWFza19pbnRlcnNlY3RzKCZkZXNjLT5hZmZpbml0eSwgbWFzaykpCi0JCQljZmctPm1vdmVfZGVzY19wZW5kaW5nID0gMTsKLQl9Ci19Ci0jZW5kaWYKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NmZyAqaXJxX2NmZyh1bnNpZ25lZCBpbnQgaXJxKQotewotCXJldHVybiBpcnEgPCBucl9pcnFzID8gaXJxX2NmZ3ggKyBpcnEgOiBOVUxMOwotfQotCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfTlVNQV9NSUdSQVRFX0lSUV9ERVNDCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNldF9leHRyYV9tb3ZlX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLX0KLSNlbmRpZgotCi1zdHJ1Y3QgaW9fYXBpYyB7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXVuc2lnbmVkIGludCB1bnVzZWRbM107Ci0JdW5zaWduZWQgaW50IGRhdGE7Ci19OwotCi1zdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSBfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkKLQkJKyAobXBfaW9hcGljc1tpZHhdLm1wX2FwaWNhZGRyICYgflBBR0VfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX2FwaWNfcmVhZCh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZykKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0JcmV0dXJuIHJlYWRsKCZpb19hcGljLT5kYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfd3JpdGUodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0Jd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Ci19Ci0KLS8qCi0gKiBSZS13cml0ZSBhIHZhbHVlOiB0byBiZSB1c2VkIGZvciByZWFkLW1vZGlmeS13cml0ZQotICogY3ljbGVzIHdoZXJlIHRoZSByZWFkIGFscmVhZHkgc2V0IHVwIHRoZSBpbmRleCByZWdpc3Rlci4KLSAqCi0gKiBPbGRlciBTaVMgQVBJQyByZXF1aXJlcyB3ZSByZXdyaXRlIHRoZSBpbmRleCByZWdpc3RlcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnkodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCi0JaWYgKHNpc19hcGljX2J1ZykKLQkJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKLX0KLQotc3RhdGljIGJvb2wgaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQllbnRyeSA9IGNmZy0+aXJxXzJfcGluOwotCWZvciAoOzspIHsKLQkJdW5zaWduZWQgaW50IHJlZzsKLQkJaW50IHBpbjsKLQotCQlpZiAoIWVudHJ5KQotCQkJYnJlYWs7Ci0JCXBpbiA9IGVudHJ5LT5waW47Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKLQkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KLQkJaWYgKHJlZyAmIElPX0FQSUNfUkVESVJfUkVNT1RFX0lSUikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotdW5pb24gZW50cnlfdW5pb24gewotCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci19OwotCi1zdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgaW9hcGljX3JlYWRfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCi17Ci0JdW5pb24gZW50cnlfdW5pb24gZXU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7Ci0JZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGV1LmVudHJ5OwotfQotCi0vKgotICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKLSAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCi0gKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAotICogYmVmb3JlIHRoYXQgaGFwcGVucy4KLSAqLwotc3RhdGljIHZvaWQKLV9faW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQotewotCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwotCWV1LmVudHJ5ID0gZTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdwotICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQotICogaGlnaCBiaXRzIQotICovCi1zdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgc2VuZF9jbGVhbnVwX3ZlY3RvcihzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCWNwdW1hc2tfdmFyX3QgY2xlYW51cF9tYXNrOwotCi0JaWYgKHVubGlrZWx5KCFhbGxvY19jcHVtYXNrX3ZhcigmY2xlYW51cF9tYXNrLCBHRlBfQVRPTUlDKSkpIHsKLQkJdW5zaWduZWQgaW50IGk7Ci0JCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gMDsKLQkJZm9yX2VhY2hfY3B1X2FuZChpLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFzaykKLQkJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50Kys7Ci0JCWZvcl9lYWNoX2NwdV9hbmQoaSwgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spCi0JCQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoaSksIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKLQl9IGVsc2UgewotCQljcHVtYXNrX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXNrKTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVtYXNrX3dlaWdodChjbGVhbnVwX21hc2spOwotCQlzZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwotCQlmcmVlX2NwdW1hc2tfdmFyKGNsZWFudXBfbWFzayk7Ci0JfQotCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fdGFyZ2V0X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCWludCBhcGljLCBwaW47Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7Ci0JdTggdmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0KLQllbnRyeSA9IGNmZy0+aXJxXzJfcGluOwotCWZvciAoOzspIHsKLQkJdW5zaWduZWQgaW50IHJlZzsKLQotCQlpZiAoIWVudHJ5KQotCQkJYnJlYWs7Ci0KLQkJYXBpYyA9IGVudHJ5LT5hcGljOwotCQlwaW4gPSBlbnRyeS0+cGluOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JCS8qCi0JCSAqIFdpdGggaW50ZXJydXB0LXJlbWFwcGluZywgZGVzdGluYXRpb24gaW5mb3JtYXRpb24gY29tZXMKLQkJICogZnJvbSBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5LgotCQkgKi8KLQkJaWYgKCFpcnFfcmVtYXBwZWQoaXJxKSkKLQkJCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKLSNlbHNlCi0JCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKLSNlbmRpZgotCQlyZWcgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIHBpbioyKTsKLQkJcmVnICY9IH5JT19BUElDX1JFRElSX1ZFQ1RPUl9NQVNLOwotCQlyZWcgfD0gdmVjdG9yOwotCQlpb19hcGljX21vZGlmeShhcGljLCAweDEwICsgcGluKjIsIHJlZyk7Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLWFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKLQotLyoKLSAqIEVpdGhlciBzZXRzIGRlc2MtPmFmZmluaXR5IHRvIGEgdmFsaWQgdmFsdWUsIGFuZCByZXR1cm5zIGNwdV9tYXNrX3RvX2FwaWNpZAotICogb2YgdGhhdCwgb3IgcmV0dXJucyBCQURfQVBJQ0lEIGFuZCBsZWF2ZXMgZGVzYy0+YWZmaW5pdHkgdW50b3VjaGVkLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1zZXRfZGVzY19hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JdW5zaWduZWQgaW50IGlycTsKLQotCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG1hc2ssIGNwdV9vbmxpbmVfbWFzaykpCi0JCXJldHVybiBCQURfQVBJQ0lEOwotCi0JaXJxID0gZGVzYy0+aXJxOwotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQotCWNwdW1hc2tfYW5kKCZkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4sIG1hc2spOwotCXNldF9leHRyYV9tb3ZlX2Rlc2MoZGVzYywgbWFzayk7Ci0JcmV0dXJuIGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoJmRlc2MtPmFmZmluaXR5LCBjcHVfb25saW5lX21hc2spOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JaXJxID0gZGVzYy0+aXJxOwotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCAhPSBCQURfQVBJQ0lEKSB7Ci0JCS8qIE9ubHkgdGhlIGhpZ2ggOCBiaXRzIGFyZSB2YWxpZC4gKi8KLQkJZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7Ci0JCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQotCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCi0Jc2V0X2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLS8qCi0gKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQotICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCi0gKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KLSAqLwotc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnFfY3B1KHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBjcHUsIGludCBhcGljLCBpbnQgcGluKQotewotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwotCi0JZW50cnkgPSBjZmctPmlycV8yX3BpbjsKLQlpZiAoIWVudHJ5KSB7Ci0JCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3BpbihjcHUpOwotCQlpZiAoIWVudHJ5KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2MgaXJxXzJfcGluIHRvIGFkZCAlZCAtICVkXG4iLAotCQkJCQlhcGljLCBwaW4pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWNmZy0+aXJxXzJfcGluID0gZW50cnk7Ci0JCWVudHJ5LT5hcGljID0gYXBpYzsKLQkJZW50cnktPnBpbiA9IHBpbjsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChlbnRyeS0+bmV4dCkgewotCQkvKiBub3QgYWdhaW4sIHBsZWFzZSAqLwotCQlpZiAoZW50cnktPmFwaWMgPT0gYXBpYyAmJiBlbnRyeS0+cGluID09IHBpbikKLQkJCXJldHVybjsKLQotCQllbnRyeSA9IGVudHJ5LT5uZXh0OwotCX0KLQotCWVudHJ5LT5uZXh0ID0gZ2V0X29uZV9mcmVlX2lycV8yX3BpbihjcHUpOwotCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JZW50cnktPmFwaWMgPSBhcGljOwotCWVudHJ5LT5waW4gPSBwaW47Ci19Ci0KLS8qCi0gKiBSZXJvdXRlIGFuIElSUSB0byBhIGRpZmZlcmVudCBwaW4uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnFfY3B1KHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBjcHUsCi0JCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCi0JCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBjZmctPmlycV8yX3BpbjsKLQlpbnQgcmVwbGFjZWQgPSAwOwotCi0Jd2hpbGUgKGVudHJ5KSB7Ci0JCWlmIChlbnRyeS0+YXBpYyA9PSBvbGRhcGljICYmIGVudHJ5LT5waW4gPT0gb2xkcGluKSB7Ci0JCQllbnRyeS0+YXBpYyA9IG5ld2FwaWM7Ci0JCQllbnRyeS0+cGluID0gbmV3cGluOwotCQkJcmVwbGFjZWQgPSAxOwotCQkJLyogZXZlcnkgb25lIGlzIGRpZmZlcmVudCwgcmlnaHQ/ICovCi0JCQlicmVhazsKLQkJfQotCQllbnRyeSA9IGVudHJ5LT5uZXh0OwotCX0KLQotCS8qIHdoeT8gY2FsbCByZXBsYWNlIGJlZm9yZSBhZGQ/ICovCi0JaWYgKCFyZXBsYWNlZCkKLQkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBuZXdhcGljLCBuZXdwaW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcsCi0JCQkJaW50IG1hc2tfYW5kLCBpbnQgbWFza19vciwKLQkJCQl2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKLXsKLQlpbnQgcGluOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwotCi0JZm9yIChlbnRyeSA9IGNmZy0+aXJxXzJfcGluOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7Ci0JCXVuc2lnbmVkIGludCByZWc7Ci0JCXBpbiA9IGVudHJ5LT5waW47Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOwotCQlyZWcgJj0gbWFza19hbmQ7Ci0JCXJlZyB8PSBtYXNrX29yOwotCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIsIHJlZyk7Ci0JCWlmIChmaW5hbCkKLQkJCWZpbmFsKGVudHJ5KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fdW5tYXNrX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcpCi17Ci0JaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTUFTS0VELCAwLCBOVUxMKTsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLXN0YXRpYyB2b2lkIGlvX2FwaWNfc3luYyhzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkKLXsKLQkvKgotCSAqIFN5bmNocm9uaXplIHRoZSBJTy1BUElDIGFuZCB0aGUgQ1BVIGJ5IGRvaW5nCi0JICogYSBkdW1teSByZWFkIGZyb20gdGhlIElPLUFQSUMKLQkgKi8KLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljOwotCWlvX2FwaWMgPSBpb19hcGljX2Jhc2UoZW50cnktPmFwaWMpOwotCXJlYWRsKCZpb19hcGljLT5kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX19tYXNrX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcpCi17Ci0JaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfjAsIElPX0FQSUNfUkVESVJfTUFTS0VELCAmaW9fYXBpY19zeW5jKTsKLX0KLSNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KLXN0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH5JT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsCi0JCQlJT19BUElDX1JFRElSX01BU0tFRCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQotewotCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH5JT19BUElDX1JFRElSX01BU0tFRCwKLQkJCUlPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwgTlVMTCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotCi1zdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCUJVR19PTighY2ZnKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fbWFza19JT19BUElDX2lycShjZmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX3VubWFza19JT19BUElDX2lycShjZmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCi0JbWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotfQotc3RhdGljIHZvaWQgdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQotCXVubWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCS8qIENoZWNrIGRlbGl2ZXJ5X21vZGUgdG8gYmUgc3VyZSB3ZSdyZSBub3QgY2xlYXJpbmcgYW4gU01JIHBpbiAqLwotCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQlpZiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X1NNSSkKLQkJcmV0dXJuOwotCS8qCi0JICogRGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDICh2b2lkKQotewotCWludCBhcGljLCBwaW47Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQotCQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLX0KLQotI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKLXZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGludCBjZmc7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGlkbGUuCi0JICovCi0JYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0JY2ZnID0gQVBJQ19ETV9GSVhFRCB8IEFQSUNfREVTVF9TRUxGIHwgdmVjdG9yIHwgQVBJQ19ERVNUX0xPR0lDQUw7Ci0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotI2VuZGlmIC8qICFDT05GSUdfU01QICYmIENPTkZJR19YODZfMzIqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotLyoKLSAqIHN1cHBvcnQgZm9yIGJyb2tlbiBNUCBCSU9TcywgZW5hYmxlcyBoYW5kLXJlZGlyZWN0aW9uIG9mIFBJUlEwLTcgdG8KLSAqIHNwZWNpZmljIENQVS1zaWRlIElSUXMuCi0gKi8KLQotI2RlZmluZSBNQVhfUElSUVMgOAotc3RhdGljIGludCBwaXJxX2VudHJpZXMgW01BWF9QSVJRU107Ci1zdGF0aWMgaW50IHBpcnFzX2VuYWJsZWQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19waXJxX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpbnQgaSwgbWF4OwotCWludCBpbnRzW01BWF9QSVJRUysxXTsKLQotCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCi0JCXBpcnFfZW50cmllc1tpXSA9IC0xOwotCi0JcGlycXNfZW5hYmxlZCA9IDE7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSJQSVJRIHJlZGlyZWN0aW9uLCB3b3JraW5nIGFyb3VuZCBicm9rZW4gTVAtQklPUy5cbiIpOwotCW1heCA9IE1BWF9QSVJRUzsKLQlpZiAoaW50c1swXSA8IE1BWF9QSVJRUykKLQkJbWF4ID0gaW50c1swXTsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkiLi4uIFBJUlElZCAtPiBJUlEgJWRcbiIsIGksIGludHNbaSsxXSk7Ci0JCS8qCi0JCSAqIFBJUlFzIGFyZSBtYXBwZWQgdXBzaWRlIGRvd24sIHVzdWFsbHkuCi0JCSAqLwotCQlwaXJxX2VudHJpZXNbTUFYX1BJUlFTLWktMV0gPSBpbnRzW2krMV07Ci0JfQotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJwaXJxPSIsIGlvYXBpY19waXJxX3NldHVwKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCi0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotLyogSS9PIEFQSUMgUlRFIGNvbnRlbnRzIGF0IHRoZSBPUyBib290IHVwICovCi1zdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107Ci0KLS8qCi0gKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCi0gKi8KLWludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBhcGljLCBwaW47Ci0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6Ci0JICovCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKLQl9Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0KLQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KSAqCi0JCQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCi0JCQlnb3RvIG5vbWVtOwotCX0KLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JCQllbnRyeSA9IGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQotCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JCQlpZiAoIWVudHJ5Lm1hc2spIHsKLQkJCQllbnRyeS5tYXNrID0gMTsKLQkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci0JCQl9Ci0JCX0KLQotCXJldHVybiAwOwotCi1ub21lbToKLQl3aGlsZSAoYXBpYyA+PSAwKQotCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljLS1dKTsKLQltZW1zZXQoZWFybHlfaW9hcGljX2VudHJpZXMsIDAsCi0JCUFSUkFZX1NJWkUoZWFybHlfaW9hcGljX2VudHJpZXMpKTsKLQotCXJldHVybiAtRU5PTUVNOwotfQotCi12b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKQotewotCWludCBhcGljLCBwaW47Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCi0JCQlicmVhazsKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKLQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sCi0JCQkJCSAgIGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0pOwotCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSk7Ci0JCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyhpbnQgaW50cl9yZW1hcHBpbmcpCi17Ci0JLyoKLQkgKiBmb3Igbm93IHBsYWluIHJlc3RvcmUgb2YgcHJldmlvdXMgc2V0dGluZ3MuCi0JICogVEJEOiBJbiB0aGUgY2FzZSBvZiBPUyBlbmFibGluZyBpbnRlcnJ1cHQtcmVtYXBwaW5nLAotCSAqIElPLUFQSUMgUlRFJ3MgbmVlZCB0byBiZSBzZXR1cCB0byBwb2ludCB0byBpbnRlcnJ1cHQtcmVtYXBwaW5nCi0JICogdGFibGUgZW50cmllcy4gZm9yIG5vdywgZG8gYSBwbGFpbiByZXN0b3JlLCBhbmQgd2FpdCBmb3IKLQkgKiB0aGUgc2V0dXBfSU9fQVBJQ19pcnFzKCkgdG8gZG8gcHJvcGVyIGluaXRpYWxpemF0aW9uLgotCSAqLwotCXJlc3RvcmVfSU9fQVBJQ19zZXR1cCgpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBGaW5kIHRoZSBJUlEgZW50cnkgbnVtYmVyIG9mIGEgY2VydGFpbiBwaW4uCi0gKi8KLXN0YXRpYyBpbnQgZmluZF9pcnFfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCB8fAotCQkgICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkgJiYKLQkJICAgIG1wX2lycXNbaV0ubXBfZHN0aXJxID09IHBpbikKLQkJCXJldHVybiBpOwotCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogRmluZCB0aGUgcGluIHRvIHdoaWNoIElSUVtpcnFdIChJU0EpIGlzIGNvbm5lY3RlZAotICovCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfcGluKGludCBpcnEsIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKLQotCQkJcmV0dXJuIG1wX2lycXNbaV0ubXBfZHN0aXJxOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9hcGljKGludCBpcnEsIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA8IG1wX2lycV9lbnRyaWVzKSB7Ci0JCWludCBhcGljOwotCQlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMpCi0JCQkJcmV0dXJuIGFwaWM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBGaW5kIGEgc3BlY2lmaWMgUENJIElSUSBlbnRyeS4KLSAqIE5vdCBhbiBfX2luaXQsIHBvc3NpYmx5IG5lZWRlZCBieSBtb2R1bGVzCi0gKi8KLXN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKTsKLQotaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBzbG90LCBpbnQgcGluKQotewotCWludCBhcGljLCBpLCBiZXN0X2d1ZXNzID0gLTE7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAicXVlcnlpbmcgUENJIC0+IElSUSBtYXBwaW5nIGJ1czolZCwgc2xvdDolZCwgcGluOiVkLlxuIiwKLQkJYnVzLCBzbG90LCBwaW4pOwotCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJQQ0kgQklPUyBwYXNzZWQgbm9uZXhpc3RlbnQgUENJIGJ1cyAlZCFcbiIsIGJ1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYyB8fAotCQkJICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkKLQkJCQlicmVhazsKLQotCQlpZiAoIXRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgIW1wX2lycXNbaV0ubXBfaXJxdHlwZSAmJgotCQkgICAgKGJ1cyA9PSBsYnVzKSAmJgotCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA+PiAyKSAmIDB4MWYpKSkgewotCQkJaW50IGlycSA9IHBpbl8yX2lycShpLGFwaWMsbXBfaXJxc1tpXS5tcF9kc3RpcnEpOwotCi0JCQlpZiAoIShhcGljIHx8IElPX0FQSUNfSVJRKGlycSkpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocGluID09IChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSAmIDMpKQotCQkJCXJldHVybiBpcnE7Ci0JCQkvKgotCQkJICogVXNlIHRoZSBmaXJzdCBhbGwtYnV0LXBpbiBtYXRjaGluZyBlbnRyeSBhcyBhCi0JCQkgKiBiZXN0LWd1ZXNzIGZ1enp5IHJlc3VsdCBmb3IgYnJva2VuIG1wdGFibGVzLgotCQkJICovCi0JCQlpZiAoYmVzdF9ndWVzcyA8IDApCi0JCQkJYmVzdF9ndWVzcyA9IGlycTsKLQkJfQotCX0KLQlyZXR1cm4gYmVzdF9ndWVzczsKLX0KLQotRVhQT1JUX1NZTUJPTChJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3Rvcik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCi0vKgotICogRUlTQSBFZGdlL0xldmVsIGNvbnRyb2wgcmVnaXN0ZXIsIEVMQ1IKLSAqLwotc3RhdGljIGludCBFSVNBX0VMQ1IodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxIDwgTlJfSVJRU19MRUdBQ1kpIHsKLQkJdW5zaWduZWQgaW50IHBvcnQgPSAweDRkMCArIChpcnEgPj4gMyk7Ci0JCXJldHVybiAoaW5iKHBvcnQpID4+IChpcnEgJiA3KSkgJiAxOwotCX0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwotCQkJIkJyb2tlbiBNUHRhYmxlIHJlcG9ydHMgSVNBIGlycSAlZFxuIiwgaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLS8qIElTQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBlZGdlIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KQkoMCkKLSNkZWZpbmUgZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQkoMCkKLQotLyogRUlTQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBhbmQgY2FuIGJlIGVkZ2Ugb3IgbGV2ZWwKLSAqIHRyaWdnZXIgZGVwZW5kaW5nIG9uIHRoZSBFTENSIHZhbHVlLiAgSWYgYW4gaW50ZXJydXB0IGlzIGxpc3RlZCBhcwotICogRUlTQSBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZSwgdGhhdCBtZWFucyBpdHMgdHJpZ2dlciB0eXBlIG11c3QKLSAqIGJlIHJlYWQgaW4gZnJvbSB0aGUgRUxDUiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCkJKEVJU0FfRUxDUihtcF9pcnFzW2lkeF0ubXBfc3JjYnVzaXJxKSkKLSNkZWZpbmUgZGVmYXVsdF9FSVNBX3BvbGFyaXR5KGlkeCkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQotCi0vKiBQQ0kgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IG9uZSBsZXZlbCB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCkJKDEpCi0jZGVmaW5lIGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCkJKDEpCi0KLS8qIE1DQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBsZXZlbCB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCkJKDEpCi0jZGVmaW5lIGRlZmF1bHRfTUNBX3BvbGFyaXR5KGlkeCkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQotCi1zdGF0aWMgaW50IE1QQklPU19wb2xhcml0eShpbnQgaWR4KQotewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCWludCBwb2xhcml0eTsKLQotCS8qCi0JICogRGV0ZXJtaW5lIElSUSBsaW5lIHBvbGFyaXR5IChoaWdoIGFjdGl2ZSBvciBsb3cgYWN0aXZlKToKLQkgKi8KLQlzd2l0Y2ggKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnICYgMykKLQl7Ci0JCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgcG9sYXJpdHkgKi8KLQkJCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKLQkJCQlwb2xhcml0eSA9IGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCk7Ci0JCQllbHNlCi0JCQkJcG9sYXJpdHkgPSBkZWZhdWx0X1BDSV9wb2xhcml0eShpZHgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTogLyogaGlnaCBhY3RpdmUgKi8KLQkJewotCQkJcG9sYXJpdHkgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSAyOiAvKiByZXNlcnZlZCAqLwotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCXBvbGFyaXR5ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMzogLyogbG93IGFjdGl2ZSAqLwotCQl7Ci0JCQlwb2xhcml0eSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJcG9sYXJpdHkgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHBvbGFyaXR5OwotfQotCi1zdGF0aWMgaW50IE1QQklPU190cmlnZ2VyKGludCBpZHgpCi17Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0JaW50IHRyaWdnZXI7Ci0KLQkvKgotCSAqIERldGVybWluZSBJUlEgdHJpZ2dlciBtb2RlIChlZGdlIG9yIGxldmVsIHNlbnNpdGl2ZSk6Ci0JICovCi0Jc3dpdGNoICgobXBfaXJxc1tpZHhdLm1wX2lycWZsYWc+PjIpICYgMykKLQl7Ci0JCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgKi8KLQkJCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKLQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpOwotCQkJZWxzZQotCQkJCXRyaWdnZXIgPSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQotCQkJc3dpdGNoIChtcF9idXNfaWRfdG9fdHlwZVtidXNdKSB7Ci0JCQkJY2FzZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovCi0JCQkJewotCQkJCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWNhc2UgTVBfQlVTX0VJU0E6IC8qIEVJU0EgcGluICovCi0JCQkJewotCQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWNhc2UgTVBfQlVTX1BDSTogLyogUENJIHBpbiAqLwotCQkJCXsKLQkJCQkJLyogc2V0IGJlZm9yZSB0aGUgc3dpdGNoICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljYXNlIE1QX0JVU19NQ0E6IC8qIE1DQSBwaW4gKi8KLQkJCQl7Ci0JCQkJCXRyaWdnZXIgPSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlkZWZhdWx0OgotCQkJCXsKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQkJCXRyaWdnZXIgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIDE6IC8qIGVkZ2UgKi8KLQkJewotCQkJdHJpZ2dlciA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDI6IC8qIHJlc2VydmVkICovCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJdHJpZ2dlciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDM6IC8qIGxldmVsICovCi0JCXsKLQkJCXRyaWdnZXIgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDogLyogaW52YWxpZCAqLwotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCXRyaWdnZXIgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRyaWdnZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV9wb2xhcml0eShpbnQgaWR4KQotewotCXJldHVybiBNUEJJT1NfcG9sYXJpdHkoaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RyaWdnZXIoaW50IGlkeCkKLXsKLQlyZXR1cm4gTVBCSU9TX3RyaWdnZXIoaWR4KTsKLX0KLQotaW50ICgqaW9hcGljX3JlbnVtYmVyX2lycSkoaW50IGlvYXBpYywgaW50IGlycSk7Ci1zdGF0aWMgaW50IHBpbl8yX2lycShpbnQgaWR4LCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlpbnQgaXJxLCBpOwotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCi0JLyoKLQkgKiBEZWJ1Z2dpbmcgY2hlY2ssIHdlIGFyZSBpbiBiaWcgdHJvdWJsZSBpZiB0aGlzIG1lc3NhZ2UgcG9wcyB1cCEKLQkgKi8KLQlpZiAobXBfaXJxc1tpZHhdLm1wX2RzdGlycSAhPSBwaW4pCi0JCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOwotCi0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgotCQkgKi8KLQkJaSA9IGlycSA9IDA7Ci0JCXdoaWxlIChpIDwgYXBpYykKLQkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107Ci0JCWlycSArPSBwaW47Ci0JCS8qCi0gICAgICAgICAgICAgICAgICogRm9yIE1QUyBtb2RlLCBzbyBmYXIgb25seSBuZWVkZWQgYnkgRVM3MDAwIHBsYXRmb3JtCi0gICAgICAgICAgICAgICAgICovCi0JCWlmIChpb2FwaWNfcmVudW1iZXJfaXJxKQotCQkJaXJxID0gaW9hcGljX3JlbnVtYmVyX2lycShhcGljLCBpcnEpOwotCX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFBDSSBJUlEgY29tbWFuZCBsaW5lIHJlZGlyZWN0aW9uLiBZZXMsIGxpbWl0cyBhcmUgaGFyZGNvZGVkLgotCSAqLwotCWlmICgocGluID49IDE2KSAmJiAocGluIDw9IDIzKSkgewotCQlpZiAocGlycV9lbnRyaWVzW3Bpbi0xNl0gIT0gLTEpIHsKLQkJCWlmICghcGlycV9lbnRyaWVzW3Bpbi0xNl0pIHsKLQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkJCSJkaXNhYmxpbmcgUElSUSVkXG4iLCBwaW4tMTYpOwotCQkJfSBlbHNlIHsKLQkJCQlpcnEgPSBwaXJxX2VudHJpZXNbcGluLTE2XTsKLQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkJCSJ1c2luZyBQSVJRJWQgLT4gSVJRICVkXG4iLAotCQkJCQkJcGluLTE2LCBpcnEpOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmCi0KLQlyZXR1cm4gaXJxOwotfQotCi12b2lkIGxvY2tfdmVjdG9yX2xvY2sodm9pZCkKLXsKLQkvKiBVc2VkIHRvIHRoZSBvbmxpbmUgc2V0IG9mIGNwdXMgZG9lcyBub3QgY2hhbmdlCi0JICogZHVyaW5nIGFzc2lnbl9pcnFfdmVjdG9yLgotCSAqLwotCXNwaW5fbG9jaygmdmVjdG9yX2xvY2spOwotfQotCi12b2lkIHVubG9ja192ZWN0b3JfbG9jayh2b2lkKQotewotCXNwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9fYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JLyoKLQkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKLQkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQotCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKLQkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0Ci0JICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqCi0JICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKLQkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKLQkgKi8KLQlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiwgY3VycmVudF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvbGRfdmVjdG9yOwotCWludCBjcHUsIGVycjsKLQljcHVtYXNrX3Zhcl90IHRtcF9tYXNrOwotCi0JaWYgKChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHx8IGNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wX21hc2ssIEdGUF9BVE9NSUMpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW9sZF92ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQlpZiAob2xkX3ZlY3RvcikgewotCQljcHVtYXNrX2FuZCh0bXBfbWFzaywgbWFzaywgY3B1X29ubGluZV9tYXNrKTsKLQkJY3B1bWFza19hbmQodG1wX21hc2ssIGNmZy0+ZG9tYWluLCB0bXBfbWFzayk7Ci0JCWlmICghY3B1bWFza19lbXB0eSh0bXBfbWFzaykpIHsKLQkJCWZyZWVfY3B1bWFza192YXIodG1wX21hc2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBPbmx5IHRyeSBhbmQgYWxsb2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KLQllcnIgPSAtRU5PU1BDOwotCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBtYXNrLCBjcHVfb25saW5lX21hc2spIHsKLQkJaW50IG5ld19jcHU7Ci0JCWludCB2ZWN0b3IsIG9mZnNldDsKLQotCQl2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oY3B1LCB0bXBfbWFzayk7Ci0KLQkJdmVjdG9yID0gY3VycmVudF92ZWN0b3I7Ci0JCW9mZnNldCA9IGN1cnJlbnRfb2Zmc2V0OwotbmV4dDoKLQkJdmVjdG9yICs9IDg7Ci0JCWlmICh2ZWN0b3IgPj0gZmlyc3Rfc3lzdGVtX3ZlY3RvcikgewotCQkJLyogSWYgb3V0IG9mIHZlY3RvcnMgb24gbGFyZ2UgYm94ZW4sIG11c3Qgc2hhcmUgdGhlbS4gKi8KLQkJCW9mZnNldCA9IChvZmZzZXQgKyAxKSAlIDg7Ci0JCQl2ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SICsgb2Zmc2V0OwotCQl9Ci0JCWlmICh1bmxpa2VseShjdXJyZW50X3ZlY3RvciA9PSB2ZWN0b3IpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHRlc3RfYml0KHZlY3RvciwgdXNlZF92ZWN0b3JzKSkKLQkJCWdvdG8gbmV4dDsKLQotCQlmb3JfZWFjaF9jcHVfYW5kKG5ld19jcHUsIHRtcF9tYXNrLCBjcHVfb25saW5lX21hc2spCi0JCQlpZiAocGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdICE9IC0xKQotCQkJCWdvdG8gbmV4dDsKLQkJLyogRm91bmQgb25lISAqLwotCQljdXJyZW50X3ZlY3RvciA9IHZlY3RvcjsKLQkJY3VycmVudF9vZmZzZXQgPSBvZmZzZXQ7Ci0JCWlmIChvbGRfdmVjdG9yKSB7Ci0JCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAxOwotCQkJY3B1bWFza19jb3B5KGNmZy0+b2xkX2RvbWFpbiwgY2ZnLT5kb21haW4pOwotCQl9Ci0JCWZvcl9lYWNoX2NwdV9hbmQobmV3X2NwdSwgdG1wX21hc2ssIGNwdV9vbmxpbmVfbWFzaykKLQkJCXBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSA9IGlycTsKLQkJY2ZnLT52ZWN0b3IgPSB2ZWN0b3I7Ci0JCWNwdW1hc2tfY29weShjZmctPmRvbWFpbiwgdG1wX21hc2spOwotCQllcnIgPSAwOwotCQlicmVhazsKLQl9Ci0JZnJlZV9jcHVtYXNrX3Zhcih0bXBfbWFzayk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZXJyID0gX19hc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2NsZWFyX2lycV92ZWN0b3IoaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZykKLXsKLQlpbnQgY3B1LCB2ZWN0b3I7Ci0KLQlCVUdfT04oIWNmZy0+dmVjdG9yKTsKLQotCXZlY3RvciA9IGNmZy0+dmVjdG9yOwotCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBjZmctPmRvbWFpbiwgY3B1X29ubGluZV9tYXNrKQotCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IC0xOwotCi0JY2ZnLT52ZWN0b3IgPSAwOwotCWNwdW1hc2tfY2xlYXIoY2ZnLT5kb21haW4pOwotCi0JaWYgKGxpa2VseSghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSkKLQkJcmV0dXJuOwotCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFzaykgewotCQlmb3IgKHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUjsgdmVjdG9yIDwgTlJfVkVDVE9SUzsKLQkJCQkJCQkJdmVjdG9yKyspIHsKLQkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSAhPSBpcnEpCi0JCQkJY29udGludWU7Ci0JCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKLX0KLQotdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKLXsKLQkvKiBJbml0aWFsaXplIHZlY3Rvcl9pcnEgb24gYSBuZXcgY3B1ICovCi0JLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhlbGQgKi8KLQlpbnQgaXJxLCB2ZWN0b3I7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQkvKiBNYXJrIHRoZSBpbnVzZSB2ZWN0b3JzICovCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Ci0JCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY2ZnLT5kb21haW4pKQotCQkJY29udGludWU7Ci0JCXZlY3RvciA9IGNmZy0+dmVjdG9yOwotCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IGlycTsKLQl9Ci0JLyogTWFyayB0aGUgZnJlZSB2ZWN0b3JzICovCi0JZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyArK3ZlY3RvcikgewotCQlpcnEgPSBwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXTsKLQkJaWYgKGlycSA8IDApCi0JCQljb250aW51ZTsKLQotCQljZmcgPSBpcnFfY2ZnKGlycSk7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGNmZy0+ZG9tYWluKSkKLQkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwOwotI2VuZGlmCi0KLSNkZWZpbmUgSU9BUElDX0FVVE8gICAgIC0xCi0jZGVmaW5lIElPQVBJQ19FREdFICAgICAwCi0jZGVmaW5lIElPQVBJQ19MRVZFTCAgICAxCi0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1zdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCi17Ci0JaW50IGFwaWMsIGlkeCwgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7Ci0JCQlpZiAoKGlkeCAhPSAtMSkgJiYgKGlycSA9PSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pKSkKLQkJCQlyZXR1cm4gaXJxX3RyaWdnZXIoaWR4KTsKLQkJfQotCX0KLQkvKgotICAgICAgICAgKiBub25leGlzdGVudCBJUlFzIGFyZSBlZGdlIGRlZmF1bHQKLSAgICAgICAgICovCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgSU9fQVBJQ19pcnFfdHJpZ2dlcihpbnQgaXJxKQotewotCXJldHVybiAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQotewotCi0JaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKLQkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JZWxzZQotCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7Ci0JCWlmICh0cmlnZ2VyKQotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaXJfaW9hcGljX2NoaXAsCi0JCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCi0JCQkJCQkgICAgICJmYXN0ZW9pIik7Ci0JCWVsc2UKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlyX2lvYXBpY19jaGlwLAotCQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKLQkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAotCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCi0JCQkJCSAgICAgICJmYXN0ZW9pIik7Ci0JZWxzZQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotfQotCi1zdGF0aWMgaW50IHNldHVwX2lvYXBpY19lbnRyeShpbnQgYXBpYywgaW50IGlycSwKLQkJCSAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbiwgaW50IHRyaWdnZXIsCi0JCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IpCi17Ci0JLyoKLQkgKiBhZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JbWVtc2V0KGVudHJ5LDAsc2l6ZW9mKCplbnRyeSkpOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkgewotCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gbWFwX2lvYXBpY190b19pcihhcGljKTsKLQkJc3RydWN0IGlydGUgaXJ0ZTsKLQkJc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKmlyX2VudHJ5ID0KLQkJCShzdHJ1Y3QgSVJfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSBlbnRyeTsKLQkJaW50IGluZGV4OwotCi0JCWlmICghaW9tbXUpCi0JCQlwYW5pYygiTm8gbWFwcGluZyBpb21tdSBmb3IgaW9hcGljICVkXG4iLCBhcGljKTsKLQotCQlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgMSk7Ci0JCWlmIChpbmRleCA8IDApCi0JCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlIElSVEUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpYyk7Ci0KLQkJbWVtc2V0KCZpcnRlLCAwLCBzaXplb2YoaXJ0ZSkpOwotCi0JCWlydGUucHJlc2VudCA9IDE7Ci0JCWlydGUuZHN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCQlpcnRlLnRyaWdnZXJfbW9kZSA9IHRyaWdnZXI7Ci0JCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCQlpcnRlLnZlY3RvciA9IHZlY3RvcjsKLQkJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3RpbmF0aW9uKTsKLQotCQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKLQotCQlpcl9lbnRyeS0+aW5kZXgyID0gKGluZGV4ID4+IDE1KSAmIDB4MTsKLQkJaXJfZW50cnktPnplcm8gPSAwOwotCQlpcl9lbnRyeS0+Zm9ybWF0ID0gMTsKLQkJaXJfZW50cnktPmluZGV4ID0gKGluZGV4ICYgMHg3ZmZmKTsKLQl9IGVsc2UKLSNlbmRpZgotCXsKLQkJZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQkJZW50cnktPmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JCWVudHJ5LT5kZXN0ID0gZGVzdGluYXRpb247Ci0JfQotCi0JZW50cnktPm1hc2sgPSAwOwkJCQkvKiBlbmFibGUgSVJRICovCi0JZW50cnktPnRyaWdnZXIgPSB0cmlnZ2VyOwotCWVudHJ5LT5wb2xhcml0eSA9IHBvbGFyaXR5OwotCWVudHJ5LT52ZWN0b3IgPSB2ZWN0b3I7Ci0KLQkvKiBNYXNrIGxldmVsIHRyaWdnZXJlZCBpcnFzLgotCSAqIFVzZSBJUlFfREVMQVlFRF9ESVNBQkxFIGZvciBlZGdlIHRyaWdnZXJlZCBpcnFzLgotCSAqLwotCWlmICh0cmlnZ2VyKQotCQllbnRyeS0+bWFzayA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwX0lPX0FQSUNfaXJxKGludCBhcGljLCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCi0JCQkgICAgICBpbnQgdHJpZ2dlciwgaW50IHBvbGFyaXR5KQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0KLQlpZiAoIUlPX0FQSUNfSVJRKGlycSkpCi0JCXJldHVybjsKLQotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgVEFSR0VUX0NQVVMpKQotCQlyZXR1cm47Ci0KLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgVEFSR0VUX0NQVVMpOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLEtFUk5fREVCVUcKLQkJICAgICJJT0FQSUNbJWRdOiBTZXQgcm91dGluZyBlbnRyeSAoJWQtJWQgLT4gMHgleCAtPiAiCi0JCSAgICAiSVJRICVkIE1vZGU6JWkgQWN0aXZlOiVpKVxuIiwKLQkJICAgIGFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4sIGNmZy0+dmVjdG9yLAotCQkgICAgaXJxLCB0cmlnZ2VyLCBwb2xhcml0eSk7Ci0KLQotCWlmIChzZXR1cF9pb2FwaWNfZW50cnkobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIGlycSwgJmVudHJ5LAotCQkJICAgICAgIGRlc3QsIHRyaWdnZXIsIHBvbGFyaXR5LCBjZmctPnZlY3RvcikpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0dXAgaW9hcGljIGVudHJ5IGZvciBpb2FwaWMgICVkLCBwaW4gJWRcbiIsCi0JCSAgICAgICBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgZGVzYywgdHJpZ2dlcik7Ci0JaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKQotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbiwgaWR4LCBpcnE7Ci0JaW50IG5vdGNvbiA9IDA7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JaW50IGNwdSA9IGJvb3RfY3B1X2lkOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICJpbml0IElPX0FQSUMgSVJRc1xuIik7Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQotCQkJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpYywgcGluLCBtcF9JTlQpOwotCQkJaWYgKGlkeCA9PSAtMSkgewotCQkJCWlmICghbm90Y29uKSB7Ci0JCQkJCW5vdGNvbiA9IDE7Ci0JCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKLQkJCQkJCUtFUk5fREVCVUcgIiAlZC0lZCIsCi0JCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwKLQkJCQkJCXBpbik7Ci0JCQkJfSBlbHNlCi0JCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiAlZC0lZCIsCi0JCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwKLQkJCQkJCXBpbik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAobm90Y29uKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAotCQkJCQkiIChhcGljaWQtcGluKSBub3QgY29ubmVjdGVkXG4iKTsKLQkJCQlub3Rjb24gPSAwOwotCQkJfQotCi0JCQlpcnEgPSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQkJCWlmIChtdWx0aV90aW1lcl9jaGVjayhhcGljLCBpcnEpKQotCQkJCWNvbnRpbnVlOwotI2VuZGlmCi0JCQlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KGlycSwgY3B1KTsKLQkJCWlmICghZGVzYykgewotCQkJCXByaW50ayhLRVJOX0lORk8gImNhbiBub3QgZ2V0IGlycV9kZXNjIGZvciAlZFxuIiwgaXJxKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQkJCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgYXBpYywgcGluKTsKLQotCQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsIGRlc2MsCi0JCQkJCWlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKLQkJfQotCX0KLQotCWlmIChub3Rjb24pCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKLQkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOwotfQotCi0vKgotICogU2V0IHVwIHRoZSB0aW1lciBwaW4sIHBvc3NpYmx5IHdpdGggdGhlIDgyNTlBLW1hc3RlciBiZWhpbmQuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF90aW1lcl9JUlEwX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbiwKLQkJCQkJaW50IHZlY3RvcikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCXJldHVybjsKLSNlbmRpZgotCi0JbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0KLQkvKgotCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCi0JICogdG8gdGhlIGZpcnN0IENQVS4KLQkgKi8KLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCi0JZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0JZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCWVudHJ5LnBvbGFyaXR5ID0gMDsKLQllbnRyeS50cmlnZ2VyID0gMDsKLQllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7Ci0KLQkvKgotCSAqIFRoZSB0aW1lciBJUlEgZG9lc24ndCBoYXZlIHRvIGtub3cgdGhhdCBiZWhpbmQgdGhlCi0JICogc2NlbmUgd2UgbWF5IGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgotCSAqLwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCi0JLyoKLQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotfQotCi0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9JT19BUElDKHZvaWQpCi17Ci0JaW50IGFwaWMsIGk7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQl1bmlvbiBJT19BUElDX3JlZ18wMiByZWdfMDI7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDMgcmVnXzAzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0JdW5zaWduZWQgaW50IGlycTsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIE1QIElSUSBzb3VyY2VzOiAlZC5cbiIsIG1wX2lycV9lbnRyaWVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIElPLUFQSUMgIyVkIHJlZ2lzdGVyczogJWQuXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1tpXS5tcF9hcGljaWQsIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0pOwotCi0JLyoKLQkgKiBXZSBhcmUgYSBiaXQgY29uc2VydmF0aXZlIGFib3V0IHdoYXQgd2UgZXhwZWN0LiAgV2UgaGF2ZSB0bwotCSAqIGtub3cgYWJvdXQgZXZlcnkgaGFyZHdhcmUgY2hhbmdlIEFTQVAuCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyB0aGUgSU8gQVBJQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKQotCQlyZWdfMDIucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDIpOwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjApCi0JCXJlZ18wMy5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXByaW50aygiXG4iKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiSU8gQVBJQyAjJWQuLi4uLi5cbiIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDA6ICUwOFhcbiIsIHJlZ18wMC5yYXcpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogcGh5c2ljYWwgQVBJQyBpZDogJTAyWFxuIiwgcmVnXzAwLmJpdHMuSUQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogRGVsaXZlcnkgVHlwZTogJVhcbiIsIHJlZ18wMC5iaXRzLmRlbGl2ZXJ5X3R5cGUpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogTFRTICAgICAgICAgIDogJVhcbiIsIHJlZ18wMC5iaXRzLkxUUyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDE6ICUwOFhcbiIsICooaW50ICopJnJlZ18wMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogbWF4IHJlZGlyZWN0aW9uIGVudHJpZXM6ICUwNFhcbiIsIHJlZ18wMS5iaXRzLmVudHJpZXMpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogUFJRIGltcGxlbWVudGVkOiAlWFxuIiwgcmVnXzAxLmJpdHMuUFJRKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBJTyBBUElDIHZlcnNpb246ICUwNFhcbiIsIHJlZ18wMS5iaXRzLnZlcnNpb24pOwotCi0JLyoKLQkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4MT8gZG9uJ3QgaGF2ZSByZWdfMDIsCi0JICogYnV0IHRoZSB2YWx1ZSBvZiByZWdfMDIgaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZCByZWdpc3RlcgotCSAqIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAyID09IHJlZ18wMS4KLQkgKi8KLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwICYmIHJlZ18wMi5yYXcgIT0gcmVnXzAxLnJhdykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDI6ICUwOFhcbiIsIHJlZ18wMi5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBhcmJpdHJhdGlvbjogJTAyWFxuIiwgcmVnXzAyLmJpdHMuYXJiaXRyYXRpb24pOwotCX0KLQotCS8qCi0JICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDI/IGRvbid0IGhhdmUgcmVnXzAyCi0JICogb3IgcmVnXzAzLCBidXQgdGhlIHZhbHVlIG9mIHJlZ18wWzIzXSBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkCi0JICogcmVnaXN0ZXIgdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDMgPT0gcmVnXzBbMTJdLgotCSAqLwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjAgJiYgcmVnXzAzLnJhdyAhPSByZWdfMDIucmF3ICYmCi0JICAgIHJlZ18wMy5yYXcgIT0gcmVnXzAxLnJhdykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDM6ICUwOFhcbiIsIHJlZ18wMy5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBCb290IERUICAgIDogJVhcbiIsIHJlZ18wMy5iaXRzLmJvb3RfRFQpOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCi0JCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDogICBcbiIpOwotCi0JZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKLQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBpKTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMnggJTAzWCAiLAotCQkJaSwKLQkJCWVudHJ5LmRlc3QKLQkJKTsKLQotCQlwcmludGsoIiUxZCAgICAlMWQgICAgJTFkICAgJTFkICAgJTFkICAgICUxZCAgICAlMWQgICAgJTAyWFxuIiwKLQkJCWVudHJ5Lm1hc2ssCi0JCQllbnRyeS50cmlnZ2VyLAotCQkJZW50cnkuaXJyLAotCQkJZW50cnkucG9sYXJpdHksCi0JCQllbnRyeS5kZWxpdmVyeV9zdGF0dXMsCi0JCQllbnRyeS5kZXN0X21vZGUsCi0JCQllbnRyeS5kZWxpdmVyeV9tb2RlLAotCQkJZW50cnkudmVjdG9yCi0JCSk7Ci0JfQotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiSVJRIHRvIHBpbiBtYXBwaW5nczpcbiIpOwotCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykgewotCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKLQotCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JCWlmICghZW50cnkpCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIklSUSVkICIsIGlycSk7Ci0JCWZvciAoOzspIHsKLQkJCXByaW50aygiLT4gJWQ6JWQiLCBlbnRyeS0+YXBpYywgZW50cnktPnBpbik7Ci0JCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJCWJyZWFrOwotCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGRvbmUuXG4iKTsKLQotCXJldHVybjsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X0FQSUNfYml0ZmllbGQoaW50IGJhc2UpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JaW50IGksIGo7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmXG4iIEtFUk5fREVCVUcpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdiA9IGFwaWNfcmVhZChiYXNlICsgaSoweDEwKTsKLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCWlmICh2ICYgKDE8PGopKQotCQkJCXByaW50aygiMSIpOwotCQkJZWxzZQotCQkJCXByaW50aygiMCIpOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9sb2NhbF9BUElDKHZvaWQgKmR1bW15KQotewotCXVuc2lnbmVkIGludCB2LCB2ZXIsIG1heGx2dDsKLQl1NjQgaWNyOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50aygiXG4iIEtFUk5fREVCVUcgInByaW50aW5nIGxvY2FsIEFQSUMgY29udGVudHMgb24gQ1BVIyVkLyVkOlxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBJRDogICAgICAlMDh4ICglMDF4KVxuIiwgdiwgcmVhZF9hcGljX2lkKCkpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIFZFUlNJT046ICUwOHhcbiIsIHYpOwotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odik7Ci0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUQVNLUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwgdiAmIEFQSUNfVFBSSV9NQVNLKTsKLQotCWlmIChBUElDX0lOVEVHUkFURUQodmVyKSkgeyAgICAgICAgICAgICAgICAgICAgIC8qICE4MjQ4OURYICovCi0JCWlmICghQVBJQ19YQVBJQyh2ZXIpKSB7Ci0JCQl2ID0gYXBpY19yZWFkKEFQSUNfQVJCUFJJKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBBUkJQUkk6ICUwOHggKCUwMngpXG4iLCB2LAotCQkJICAgICAgIHYgJiBBUElDX0FSQlBSSV9NQVNLKTsKLQkJfQotCQl2ID0gYXBpY19yZWFkKEFQSUNfUFJPQ1BSSSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBQUk9DUFJJOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQkvKgotCSAqIFJlbW90ZSByZWFkIHN1cHBvcnRlZCBvbmx5IGluIHRoZSA4MjQ4OURYIGFuZCBsb2NhbCBBUElDIGZvcgotCSAqIFBlbnRpdW0gcHJvY2Vzc29ycy4KLQkgKi8KLQlpZiAoIUFQSUNfSU5URUdSQVRFRCh2ZXIpIHx8IG1heGx2dCA9PSAzKSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19SUlIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUlJSOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTERSOiAlMDh4XG4iLCB2KTsKLQlpZiAoIXgyYXBpY19lbmFibGVkKCkpIHsKLQkJdiA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBERlI6ICUwOHhcbiIsIHYpOwotCX0KLQl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFNQSVY6ICUwOHhcbiIsIHYpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElTUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JU1IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTVIgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfVE1SKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSVJSIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX0lSUik7Ci0KLQlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsgICAgICAgICAgICAgLyogITgyNDg5RFggKi8KLQkJaWYgKG1heGx2dCA+IDMpICAgICAgICAgLyogRHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLiAqLwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0KLQkJdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBFU1I6ICUwOHhcbiIsIHYpOwotCX0KLQotCWljciA9IGFwaWNfaWNyX3JlYWQoKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSUNSOiAlMDh4XG4iLCAodTMyKWljcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjI6ICUwOHhcbiIsICh1MzIpKGljciA+PiAzMikpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRUOiAlMDh4XG4iLCB2KTsKLQotCWlmIChtYXhsdnQgPiAzKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBpcyBMVlQjNC4gKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFBDOiAlMDh4XG4iLCB2KTsKLQl9Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQwOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDE6ICUwOHhcbiIsIHYpOwotCi0JaWYgKG1heGx2dCA+IDIpIHsJCQkvKiBFUlIgaXMgTFZUIzMuICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZURVJSOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUlDVDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1DQ1Q6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVERDUjogJTA4eFxuIiwgdik7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfYWxsX2xvY2FsX0FQSUNzKHZvaWQpCi17Ci0JaW50IGNwdTsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBwcmludF9sb2NhbF9BUElDLCBOVUxMLCAxKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG5wcmludGluZyBQSUMgY29udGVudHNcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7Ci0KLQl2ID0gaW5iKDB4YTEpIDw8IDggfCBpbmIoMHgyMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElNUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElSUjogJTA0eFxuIiwgdik7Ci0KLQlvdXRiKDB4MGIsMHhhMCk7Ci0Jb3V0YigweDBiLDB4MjApOwotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlvdXRiKDB4MGEsMHhhMCk7Ci0Jb3V0YigweDBhLDB4MjApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJU1I6ICUwNHhcbiIsIHYpOwotCi0JdiA9IGluYigweDRkMSkgPDwgOCB8IGluYigweDRkMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgRUxDUjogJTA0eFxuIiwgdik7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdChpbnQpIHByaW50X2FsbF9JQ3Modm9pZCkKLXsKLQlwcmludF9QSUMoKTsKLQlwcmludF9hbGxfbG9jYWxfQVBJQ3MoKTsKLQlwcmludF9JT19BUElDKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZnNfaW5pdGNhbGwocHJpbnRfYWxsX0lDcyk7Ci0KLQotLyogV2hlcmUgaWYgYW55d2hlcmUgaXMgdGhlIGk4MjU5IGNvbm5lY3QgaW4gZXh0ZXJuYWwgaW50IG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgeyBpbnQgcGluLCBhcGljOyB9IGlvYXBpY19pODI1OSA9IHsgLTEsIC0xIH07Ci0KLXZvaWQgX19pbml0IGVuYWJsZV9JT19BUElDKHZvaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwotCWludCBpODI1OV9hcGljLCBpODI1OV9waW47Ci0JaW50IGFwaWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpbnQgaTsKLQlpZiAoIXBpcnFzX2VuYWJsZWQpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKLQkJCXBpcnFfZW50cmllc1tpXSA9IC0xOwotI2VuZGlmCi0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6Ci0JICovCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKLQl9Ci0JZm9yKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWludCBwaW47Ci0JCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHBpbnMgaXMgaW4gRXh0SU5UIG1vZGUgKi8KLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgewotCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0KLQkJCS8qIElmIHRoZSBpbnRlcnJ1cHQgbGluZSBpcyBlbmFibGVkIGFuZCBpbiBFeHRJbnQgbW9kZQotCQkJICogSSBoYXZlIGZvdW5kIHRoZSBwaW4gd2hlcmUgdGhlIGk4MjU5IGlzIGNvbm5lY3RlZC4KLQkJCSAqLwotCQkJaWYgKChlbnRyeS5tYXNrID09IDApICYmIChlbnRyeS5kZWxpdmVyeV9tb2RlID09IGRlc3RfRXh0SU5UKSkgewotCQkJCWlvYXBpY19pODI1OS5hcGljID0gYXBpYzsKLQkJCQlpb2FwaWNfaTgyNTkucGluICA9IHBpbjsKLQkJCQlnb3RvIGZvdW5kX2k4MjU5OwotCQkJfQotCQl9Ci0JfQotIGZvdW5kX2k4MjU5OgotCS8qIExvb2sgdG8gc2VlIHdoYXQgaWYgdGhlIE1QIHRhYmxlIGhhcyByZXBvcnRlZCB0aGUgRXh0SU5UICovCi0JLyogSWYgd2UgY291bGQgbm90IGZpbmQgdGhlIGFwcHJvcHJpYXRlIHBpbiBieSBsb29raW5nIGF0IHRoZSBpb2FwaWMKLQkgKiB0aGUgaTgyNTkgcHJvYmFibHkgaXMgbm90IGNvbm5lY3RlZCB0aGUgaW9hcGljIGJ1dCBnaXZlIHRoZQotCSAqIG1wdGFibGUgYSBjaGFuY2UgYW55d2F5LgotCSAqLwotCWk4MjU5X3BpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0V4dElOVCk7Ci0JaTgyNTlfYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0V4dElOVCk7Ci0JLyogVHJ1c3QgdGhlIE1QIHRhYmxlIGlmIG5vdGhpbmcgaXMgc2V0dXAgaW4gdGhlIGhhcmR3YXJlICovCi0JaWYgKChpb2FwaWNfaTgyNTkucGluID09IC0xKSAmJiAoaTgyNTlfcGluID49IDApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBub3Qgc2V0dXAgaW4gaGFyZHdhcmUgYnV0IHJlcG9ydGVkIGJ5IE1QIHRhYmxlXG4iKTsKLQkJaW9hcGljX2k4MjU5LnBpbiAgPSBpODI1OV9waW47Ci0JCWlvYXBpY19pODI1OS5hcGljID0gaTgyNTlfYXBpYzsKLQl9Ci0JLyogQ29tcGxhaW4gaWYgdGhlIE1QIHRhYmxlIGFuZCB0aGUgaGFyZHdhcmUgZGlzYWdyZWUgKi8KLQlpZiAoKChpb2FwaWNfaTgyNTkuYXBpYyAhPSBpODI1OV9hcGljKSB8fCAoaW9hcGljX2k4MjU5LnBpbiAhPSBpODI1OV9waW4pKSAmJgotCQkoaTgyNTlfcGluID49IDApICYmIChpb2FwaWNfaTgyNTkucGluID49IDApKQotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIGluIGhhcmR3YXJlIGFuZCBNUCB0YWJsZSBkaWZmZXJcbiIpOwotCX0KLQotCS8qCi0JICogRG8gbm90IHRydXN0IHRoZSBJTy1BUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cAotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLX0KLQotLyoKLSAqIE5vdCBhbiBfX2luaXQsIG5lZWRlZCBieSB0aGUgcmVib290IGNvZGUKLSAqLwotdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCkKLXsKLQkvKgotCSAqIENsZWFyIHRoZSBJTy1BUElDIGJlZm9yZSByZWJvb3Rpbmc6Ci0JICovCi0JY2xlYXJfSU9fQVBJQygpOwotCi0JLyoKLQkgKiBJZiB0aGUgaTgyNTkgaXMgcm91dGVkIHRocm91Z2ggYW4gSU9BUElDCi0JICogUHV0IHRoYXQgSU9BUElDIGluIHZpcnR1YWwgd2lyZSBtb2RlCi0JICogc28gbGVnYWN5IGludGVycnVwdHMgY2FuIGJlIGRlbGl2ZXJlZC4KLQkgKi8KLQlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQkJZW50cnkubWFzayAgICAgICAgICAgID0gMDsgLyogRW5hYmxlZCAqLwotCQllbnRyeS50cmlnZ2VyICAgICAgICAgPSAwOyAvKiBFZGdlICovCi0JCWVudHJ5LmlyciAgICAgICAgICAgICA9IDA7Ci0JCWVudHJ5LnBvbGFyaXR5ICAgICAgICA9IDA7IC8qIEhpZ2ggKi8KLQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzID0gMDsKLQkJZW50cnkuZGVzdF9tb2RlICAgICAgID0gMDsgLyogUGh5c2ljYWwgKi8KLQkJZW50cnkuZGVsaXZlcnlfbW9kZSAgID0gZGVzdF9FeHRJTlQ7IC8qIEV4dEludCAqLwotCQllbnRyeS52ZWN0b3IgICAgICAgICAgPSAwOwotCQllbnRyeS5kZXN0ICAgICAgICAgICAgPSByZWFkX2FwaWNfaWQoKTsKLQotCQkvKgotCQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JCSAqLwotCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKLQl9Ci0KLQlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotLyoKLSAqIGZ1bmN0aW9uIHRvIHNldCB0aGUgSU8tQVBJQyBwaHlzaWNhbCBJRHMgYmFzZWQgb24gdGhlCi0gKiB2YWx1ZXMgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCi0gKgotICogYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiAgVHVlIERlYyAyMSAxMjoyNTowNSBDU1QgMTk5OQotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKHZvaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXBoeXNpZF9tYXNrX3QgcGh5c19pZF9wcmVzZW50X21hcDsKLQlpbnQgYXBpYzsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyIG9sZF9pZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMgJiYgeDg2X3F1aXJrcy0+c2V0dXBfaW9hcGljX2lkcygpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIERvbid0IGNoZWNrIEkvTyBBUElDIElEcyBmb3IgeEFQSUMgc3lzdGVtcy4gIFRoZXkgaGF2ZQotCSAqIG5vIG1lYW5pbmcgd2l0aG91dCB0aGUgc2VyaWFsIEFQSUMgYnVzLgotCSAqLwotCWlmICghKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotCQl8fCBBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKLQkJcmV0dXJuOwotCS8qCi0JICogVGhpcyBpcyBicm9rZW47IGFueXRoaW5nIHdpdGggYSByZWFsIGNwdSBjb3VudCBoYXMgdG8KLQkgKiBjaXJjdW12ZW50IHRoaXMgaWRpb2N5IHJlZ2FyZGxlc3MuCi0JICovCi0JcGh5c19pZF9wcmVzZW50X21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0KLQkvKgotCSAqIFNldCB0aGUgSU9BUElDIElEIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIE1QQyB0YWJsZS4KLQkgKi8KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0KLQkJLyogUmVhZCB0aGUgcmVnaXN0ZXIgMCB2YWx1ZSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCQlvbGRfaWQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKLQotCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEIGlzICVkIGluIHRoZSBNUEMgdGFibGUhLi4uXG4iLAotCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCXJlZ18wMC5iaXRzLklEKTsKLQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gcmVnXzAwLmJpdHMuSUQ7Ci0JCX0KLQotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2ssIGlzIHRoZSBJRCByZWFsbHkgZnJlZT8gRXZlcnkgQVBJQyBpbiBhCi0JCSAqIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQotCQkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KLQkJICovCi0JCWlmIChjaGVja19hcGljaWRfdXNlZChwaHlzX2lkX3ByZXNlbnRfbWFwLAotCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIElPLUFQSUMjJWQgSUQgJWQgaXMgYWxyZWFkeSB1c2VkIS4uLlxuIiwKLQkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspCi0JCQkJaWYgKCFwaHlzaWRfaXNzZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCkpCi0JCQkJCWJyZWFrOwotCQkJaWYgKGkgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQotCQkJCXBhbmljKCJNYXggQVBJQyBJRCBleGNlZWRlZCFcbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCi0JCQkJaSk7Ci0JCQlwaHlzaWRfc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApOwotCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPSBpOwotCQl9IGVsc2UgewotCQkJcGh5c2lkX21hc2tfdCB0bXA7Ci0JCQl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiU2V0dGluZyAlZCBpbiB0aGUgIgotCQkJCQkicGh5c19pZF9wcmVzZW50X21hcFxuIiwKLQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJcGh5c2lkc19vcihwaHlzX2lkX3ByZXNlbnRfbWFwLCBwaHlzX2lkX3ByZXNlbnRfbWFwLCB0bXApOwotCQl9Ci0KLQotCQkvKgotCQkgKiBXZSBuZWVkIHRvIGFkanVzdCB0aGUgSVJRIHJvdXRpbmcgdGFibGUKLQkJICogaWYgdGhlIElEIGNoYW5nZWQuCi0JCSAqLwotCQlpZiAob2xkX2lkICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQotCQkJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCQkJaWYgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBvbGRfaWQpCi0JCQkJCW1wX2lycXNbaV0ubXBfZHN0YXBpYwotCQkJCQkJPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKLQotCQkvKgotCQkgKiBSZWFkIHRoZSByaWdodCB2YWx1ZSBmcm9tIHRoZSBNUEMgdGFibGUgYW5kCi0JCSAqIHdyaXRlIGl0IGludG8gdGhlIElEIHJlZ2lzdGVyLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSIuLi5jaGFuZ2luZyBJTy1BUElDIHBoeXNpY2FsIEFQSUMgSUQgdG8gJWQgLi4uIiwKLQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQotCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJaW9fYXBpY193cml0ZShhcGljLCAwLCByZWdfMDAucmF3KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2sKLQkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpCi0JCQlwcmludGsoImNvdWxkIG5vdCBzZXQgSUQhXG4iKTsKLQkJZWxzZQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG9rLlxuIik7Ci0JfQotfQotI2VuZGlmCi0KLWludCBub190aW1lcl9jaGVjayBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hlY2soY2hhciAqcykKLXsKLQlub190aW1lcl9jaGVjayA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJub190aW1lcl9jaGVjayIsIG5vdGltZXJjaGVjayk7Ci0KLS8qCi0gKiBUaGVyZSBpcyBhIG5hc3R5IGJ1ZyBpbiBzb21lIG9sZGVyIFNNUCBib2FyZHMsIHRoZWlyIG1wdGFibGUgbGllcwotICogYWJvdXQgdGhlIHRpbWVyIElSUS4gV2UgZG8gdGhlIGZvbGxvd2luZyB0byB3b3JrIGFyb3VuZCB0aGUgc2l0dWF0aW9uOgotICoKLSAqCS0gdGltZXIgSVJRIGRlZmF1bHRzIHRvIElPLUFQSUMgSVJRCi0gKgktIGlmIHRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB0aGF0IHRpbWVyIElSUXMgYXJlIGRlZnVuY3QsIHRoZW4gd2UgZmFsbAotICoJICBiYWNrIHRvIElTQSB0aW1lciBJUlFzCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHRpbWVyX2lycV93b3Jrcyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdDEgPSBqaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobm9fdGltZXJfY2hlY2spCi0JCXJldHVybiAxOwotCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCS8qIExldCB0ZW4gdGlja3MgcGFzcy4uLiAqLwotCW1kZWxheSgoMTAgKiAxMDAwKSAvIEhaKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKgotCSAqIEV4cGVjdCBhIGZldyB0aWNrcyBhdCBsZWFzdCwgdG8gYmUgc3VyZSBzb21lIHBvc3NpYmxlCi0JICogZ2x1ZSBsb2dpYyBkb2VzIG5vdCBsb2NrIHVwIGFmdGVyIG9uZSBvciB0d28gZmlyc3QKLQkgKiB0aWNrcyBpbiBhIG5vbi1FeHRJTlQgbW9kZS4gIEFsc28gdGhlIGxvY2FsIEFQSUMKLQkgKiBtaWdodCBoYXZlIGNhY2hlZCBvbmUgRXh0SU5UIGludGVycnVwdC4gIEZpbmFsbHksIGF0Ci0JICogbGVhc3Qgb25lIHRpY2sgbWF5IGJlIGxvc3QgZHVlIHRvIGRlbGF5cy4KLQkgKi8KLQotCS8qIGppZmZpZXMgd3JhcD8gKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0MSArIDQpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluIHRoZSBTTVArSU9BUElDIGNhc2UgaXQgbWlnaHQgaGFwcGVuIHRoYXQgdGhlcmUgYXJlIGFuIHVuc3BlY2lmaWVkCi0gKiBudW1iZXIgb2YgcGVuZGluZyBJUlEgZXZlbnRzIHVuaGFuZGxlZC4gVGhlc2UgY2FzZXMgYXJlIHZlcnkgcmFyZSwKLSAqIHNvIHdlICdyZXNlbmQnIHRoZXNlIElSUXMgdmlhIElQSXMsIHRvIHRoZSBzYW1lIENQVS4gSXQncyBtdWNoCi0gKiBiZXR0ZXIgdG8gZG8gaXQgdGhpcyB3YXkgYXMgdGh1cyB3ZSBkbyBub3QgaGF2ZSB0byBiZSBhd2FyZSBvZgotICogJ3BlbmRpbmcnIGludGVycnVwdHMgaW4gdGhlIElSUSBwYXRoLCBleGNlcHQgYXQgdGhpcyBwb2ludC4KLSAqLwotLyoKLSAqIEVkZ2UgdHJpZ2dlcmVkIG5lZWRzIHRvIHJlc2VuZCBhbnkgaW50ZXJydXB0Ci0gKiB0aGF0IHdhcyBkZWxheWVkIGJ1dCB0aGlzIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBkZXZpY2UKLSAqIGluZGVwZW5kZW50IGNvZGUuCi0gKi8KLQotLyoKLSAqIFN0YXJ0aW5nIHVwIGEgZWRnZS10cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHQgaXMKLSAqIG5hc3R5IC0gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgdGhlIGVkZ2UuCi0gKiBJZiBpdCBpcyBhbHJlYWR5IGFzc2VydGVkIGZvciBzb21lIHJlYXNvbiwgd2UgbmVlZAotICogcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCBpcyB3YXMgcGVuZGluZy4KLSAqCi0gKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAtIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZha2UKLSAqIGFuIGVkZ2UgZXZlbiBpZiBpdCBpc24ndCBvbiB0aGUgODI1OUEuLi4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCB3YXNfcGVuZGluZyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKSB7Ci0JCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0JCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKLQkJCXdhc19wZW5kaW5nID0gMTsKLQl9Ci0JY2ZnID0gaXJxX2NmZyhpcnEpOwotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGNmZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB3YXNfcGVuZGluZzsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLXN0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCXNlbmRfSVBJX21hc2soY3B1bWFza19vZihjcHVtYXNrX2ZpcnN0KGNmZy0+ZG9tYWluKSksIGNmZy0+dmVjdG9yKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0jZWxzZQotc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXNlbmRfSVBJX3NlbGYoaXJxX2NmZyhpcnEpLT52ZWN0b3IpOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdHMgbmVlZCBkaWZmZXJlbnQgaGFuZGxpbmcsCi0gKiBzbyB3ZSB1c2UgdHdvIHNlcGFyYXRlIElSUSBkZXNjcmlwdG9ycy4gRWRnZSB0cmlnZ2VyZWQgSVJRcyBjYW4gYmUKLSAqIGhhbmRsZWQgd2l0aCB0aGUgbGV2ZWwtdHJpZ2dlcmVkIGRlc2NyaXB0b3IsIGJ1dCB0aGF0IG9uZSBoYXMgc2xpZ2h0bHkKLSAqIG1vcmUgb3ZlcmhlYWQuIExldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGNhbm5vdCBiZSBoYW5kbGVkIHdpdGggdGhlCi0gKiBlZGdlLXRyaWdnZXJlZCBoYW5kbGVyLCB3aXRob3V0IHJpc2tpbmcgSVJRIHN0b3JtcyBhbmQgb3RoZXIgdWdseQotICogcmFjZXMuCi0gKi8KLQotI2lmZGVmIENPTkZJR19TTVAKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhpcl9taWdyYXRpb25fd29yaywgaXJfaXJxX21pZ3JhdGlvbik7Ci0KLS8qCi0gKiBNaWdyYXRlIHRoZSBJTy1BUElDIGlycSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ci1yZW1hcHBpbmcuCi0gKgotICogRm9yIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUob2YgdmVjdG9yCi0gKiBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCi0gKgotICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgbmVlZCB0byBtb2RpZnkgdGhlIGlvLWFwaWMgUlRFIGFzd2VsbCB3aXRoIHRoZSB1cGRhdGUKLSAqIHZlY3RvciBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCBtb2RpZnlpbmcgSVJURSB3aXRoIHZlY3RvciBhbmQgZGVzdGluYXRpb24uCi0gKiBTbyBpcnEgbWlncmF0aW9uIGZvciBsZXZlbCB0cmlnZ2VyZWQgaXMgbGl0dGxlICBiaXQgbW9yZSBjb21wbGV4IGNvbXBhcmVkIHRvCi0gKiBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24uIEJ1dCB0aGUgZ29vZCBuZXdzIGlzLCB3ZSB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtCi0gKiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhcyB3ZSBoYXZlIHRvZGF5LCBvbmx5IGRpZmZlcmVuY2UgYmVpbmcsCi0gKiB3ZSBub3cgaW5pdGlhdGUgdGhlIGlycSBtaWdyYXRpb24gZnJvbSBwcm9jZXNzIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUKLSAqIGludGVycnVwdCBjb250ZXh0LgotICoKLSAqIEluIGZ1dHVyZSwgd2hlbiB3ZSBkbyBhIGRpcmVjdGVkIEVPSSAoY29tYmluZWQgd2l0aCBjcHUgRU9JIGJyb2FkY2FzdAotICogc3VwcHJlc3Npb24pIHRvIHRoZSBJTy1BUElDLCBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbiB3aWxsIGFsc28gYmUKLSAqIGFzIHNpbXBsZSBhcyBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24gYW5kIHdlIGNhbiBkbyB0aGUgaXJxIG1pZ3JhdGlvbgotICogd2l0aCBhIHNpbXBsZSBhdG9taWMgdXBkYXRlIHRvIElPLUFQSUMgUlRFLgotICovCi1zdGF0aWMgdm9pZAotbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCXN0cnVjdCBpcnRlIGlydGU7Ci0JaW50IG1vZGlmeV9pb2FwaWNfcnRlOwotCXVuc2lnbmVkIGludCBkZXN0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGlycTsKLQotCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG1hc2ssIGNwdV9vbmxpbmVfbWFzaykpCi0JCXJldHVybjsKLQotCWlycSA9IGRlc2MtPmlycTsKLQlpZiAoZ2V0X2lydGUoaXJxLCAmaXJ0ZSkpCi0JCXJldHVybjsKLQotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQotCQlyZXR1cm47Ci0KLQlzZXRfZXh0cmFfbW92ZV9kZXNjKGRlc2MsIG1hc2spOwotCi0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIG1hc2spOwotCi0JbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7Ci0JaWYgKG1vZGlmeV9pb2FwaWNfcnRlKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JfQotCi0JaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7Ci0KLQkvKgotCSAqIE1vZGlmaWVkIHRoZSBJUlRFIGFuZCBmbHVzaGVzIHRoZSBJbnRlcnJ1cHQgZW50cnkgY2FjaGUuCi0JICovCi0JbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKQotCQlzZW5kX2NsZWFudXBfdmVjdG9yKGNmZyk7Ci0KLQljcHVtYXNrX2NvcHkoJmRlc2MtPmFmZmluaXR5LCBtYXNrKTsKLX0KLQotc3RhdGljIGludCBtaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbF9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlpbnQgcmV0ID0gLTE7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCW1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKLQotCWlmIChpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGNmZykpIHsKLQkJLyoKLQkJICogSW50ZXJydXB0IGluIHByb2dyZXNzLiBNaWdyYXRpbmcgaXJxIG5vdyB3aWxsIGNoYW5nZSB0aGUKLQkJICogdmVjdG9yIGluZm9ybWF0aW9uIGluIHRoZSBJTy1BUElDIFJURSBhbmQgdGhhdCB3aWxsIGNvbmZ1c2UKLQkJICogdGhlIEVPSSBicm9hZGNhc3QgcGVyZm9ybWVkIGJ5IGNwdS4KLQkJICogU28sIGRlbGF5IHRoZSBpcnEgbWlncmF0aW9uIHRvIHRoZSBuZXh0IGluc3RhbmNlLgotCQkgKi8KLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpcl9taWdyYXRpb25fd29yaywgMSk7Ci0JCWdvdG8gdW5tYXNrOwotCX0KLQotCS8qIGV2ZXJ0aGluZyBpcyBjbGVhci4gd2UgaGF2ZSByaWdodCBvZiB3YXkgKi8KLQltaWdyYXRlX2lvYXBpY19pcnFfZGVzYyhkZXNjLCAmZGVzYy0+cGVuZGluZ19tYXNrKTsKLQotCXJldCA9IDA7Ci0JZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwotCWNwdW1hc2tfY2xlYXIoJmRlc2MtPnBlbmRpbmdfbWFzayk7Ci0KLXVubWFzazoKLQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Ci0JCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkgfHwKLQkJCSAgICAhKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7Ci0JCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgJmRlc2MtPnBlbmRpbmdfbWFzayk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBNaWdyYXRlcyB0aGUgSVJRIGRlc3RpbmF0aW9uIGluIHRoZSBwcm9jZXNzIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLAotCQkJCQkgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgewotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUEVORElORzsKLQkJY3B1bWFza19jb3B5KCZkZXNjLT5wZW5kaW5nX21hc2ssIG1hc2spOwotCQltaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbF9kZXNjKGRlc2MpOwotCQlyZXR1cm47Ci0JfQotCi0JbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2MoZGVzYywgbWFzayk7Ci19Ci1zdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCi0Jc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKLX0KLSNlbmRpZgotCi1hc21saW5rYWdlIHZvaWQgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KHZvaWQpCi17Ci0JdW5zaWduZWQgdmVjdG9yLCBtZTsKLQotCWFja19BUElDX2lycSgpOwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCi0JbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7Ci0JCXVuc2lnbmVkIGludCBpcnE7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQkJc3RydWN0IGlycV9jZmcgKmNmZzsKLQkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwotCi0JCWlmIChpcnEgPT0gLTEpCi0JCQljb250aW51ZTsKLQotCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQkJaWYgKCFkZXNjKQotCQkJY29udGludWU7Ci0KLQkJY2ZnID0gaXJxX2NmZyhpcnEpOwotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCQlpZiAoIWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQotCQkJZ290byB1bmxvY2s7Ci0KLQkJaWYgKHZlY3RvciA9PSBjZmctPnZlY3RvciAmJiBjcHVtYXNrX3Rlc3RfY3B1KG1lLCBjZmctPmRvbWFpbikpCi0JCQlnb3RvIHVubG9jazsKLQotCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKLXVubG9jazoKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCX0KLQotCWlycV9leGl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHN0cnVjdCBpcnFfZGVzYyAqKmRlc2NwKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9ICpkZXNjcDsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCXVuc2lnbmVkIHZlY3RvciwgbWU7Ci0KLQlpZiAobGlrZWx5KCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpKSB7Ci0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQwotCQlpZiAobGlrZWx5KCFjZmctPm1vdmVfZGVzY19wZW5kaW5nKSkKLQkJCXJldHVybjsKLQotCQkvKiBkb21haW4gaGFzIG5vdCBjaGFuZ2VkLCBidXQgYWZmaW5pdHkgZGlkICovCi0JCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlpZiAoY3B1X2lzc2V0KG1lLCBkZXNjLT5hZmZpbml0eSkpIHsKLQkJCSpkZXNjcCA9IGRlc2MgPSBtb3ZlX2lycV9kZXNjKGRlc2MsIG1lKTsKLQkJCS8qIGdldCB0aGUgbmV3IG9uZSAqLwotCQkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCQkJY2ZnLT5tb3ZlX2Rlc2NfcGVuZGluZyA9IDA7Ci0JCX0KLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0JdmVjdG9yID0gfmdldF9pcnFfcmVncygpLT5vcmlnX2F4OwotCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKHZlY3RvciA9PSBjZmctPnZlY3RvciAmJiBjcHVtYXNrX3Rlc3RfY3B1KG1lLCBjZmctPmRvbWFpbikpIHsKLSNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRFX0lSUV9ERVNDCi0JCSpkZXNjcCA9IGRlc2MgPSBtb3ZlX2lycV9kZXNjKGRlc2MsIG1lKTsKLQkJLyogZ2V0IHRoZSBuZXcgb25lICovCi0JCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLSNlbmRpZgotCQlzZW5kX2NsZWFudXBfdmVjdG9yKGNmZyk7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKipkZXNjcCkge30KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyB2b2lkIGFja194MmFwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfeDJBUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfeDJhcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfeDJBUElDX2lycSgpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgYWNrX2FwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0KLQlpcnFfY29tcGxldGVfbW92ZSgmZGVzYyk7Ci0JbW92ZV9uYXRpdmVfaXJxKGlycSk7Ci0JYWNrX0FQSUNfaXJxKCk7Ci19Ci0KLWF0b21pY190IGlycV9taXNfY291bnQ7Ci0KLXN0YXRpYyB2b2lkIGFja19hcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQl1bnNpZ25lZCBsb25nIHY7Ci0JaW50IGk7Ci0jZW5kaWYKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCWludCBkb191bm1hc2tfaXJxID0gMDsKLQotCWlycV9jb21wbGV0ZV9tb3ZlKCZkZXNjKTsKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQotCS8qIElmIHdlIGFyZSBtb3ZpbmcgdGhlIGlycSB3ZSBuZWVkIHRvIG1hc2sgaXQgKi8KLQlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKLQkJZG9fdW5tYXNrX2lycSA9IDE7Ci0JCW1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKLQl9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSogSXQgYXBwZWFycyB0aGVyZSBpcyBhbiBlcnJhdHVtIHdoaWNoIGFmZmVjdHMgYXQgbGVhc3QgdmVyc2lvbiAweDExCi0JKiBvZiBJL08gQVBJQyAodGhhdCdzIHRoZSA4MjA5M0FBIGFuZCBjb3JlcyBpbnRlZ3JhdGVkIGludG8gdmFyaW91cwotCSogY2hpcHNldHMpLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCBpcwotCSogZXJyb25lb3VzbHkgZGVsaXZlcmVkIGFzIGVkZ2UtdHJpZ2dlcmVkIG9uZSBidXQgdGhlIHJlc3BlY3RpdmUgSVJSCi0JKiBiaXQgZ2V0cyBzZXQgbmV2ZXJ0aGVsZXNzLiAgQXMgYSByZXN1bHQgdGhlIEkvTyB1bml0IGV4cGVjdHMgYW4gRU9JCi0JKiBtZXNzYWdlIGJ1dCBpdCB3aWxsIG5ldmVyIGFycml2ZSBhbmQgZnVydGhlciBpbnRlcnJ1cHRzIGFyZSBibG9ja2VkCi0JKiBmcm9tIHRoZSBzb3VyY2UuICBUaGUgZXhhY3QgcmVhc29uIGlzIHNvIGZhciB1bmtub3duLCBidXQgdGhlCi0JKiBwaGVub21lbm9uIHdhcyBvYnNlcnZlZCB3aGVuIHR3byBjb25zZWN1dGl2ZSBpbnRlcnJ1cHQgcmVxdWVzdHMKLQkqIGZyb20gYSBnaXZlbiBzb3VyY2UgZ2V0IGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBDUFUgYW5kIHRoZSBzb3VyY2UgaXMKLQkqIHRlbXBvcmFyaWx5IGRpc2FibGVkIGluIGJldHdlZW4uCi0JKgotCSogQSB3b3JrYXJvdW5kIGlzIHRvIHNpbXVsYXRlIGFuIEVPSSBtZXNzYWdlIG1hbnVhbGx5LiAgV2UgYWNoaWV2ZSBpdAotCSogYnkgc2V0dGluZyB0aGUgdHJpZ2dlciBtb2RlIHRvIGVkZ2UgYW5kIHRoZW4gdG8gbGV2ZWwgd2hlbiB0aGUgZWRnZQotCSogdHJpZ2dlciBtb2RlIGdldHMgZGV0ZWN0ZWQgaW4gdGhlIFRNUiBvZiBhIGxvY2FsIEFQSUMgZm9yIGEKLQkqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQuICBXZSBtYXNrIHRoZSBzb3VyY2UgZm9yIHRoZSB0aW1lIG9mIHRoZQotCSogb3BlcmF0aW9uIHRvIHByZXZlbnQgYW4gZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGVzY2FwaW5nIG1lYW53aGlsZS4KLQkqIFRoZSBpZGVhIGlzIGZyb20gTWFuZnJlZCBTcHJhdWwuICAtLW1hY3JvCi0JKi8KLQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JaSA9IGNmZy0+dmVjdG9yOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCi0JICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQotCS8qIE5vdyB3ZSBjYW4gbW92ZSBhbmQgcmVuYWJsZSB0aGUgaXJxICovCi0JaWYgKHVubGlrZWx5KGRvX3VubWFza19pcnEpKSB7Ci0JCS8qIE9ubHkgbWlncmF0ZSB0aGUgaXJxIGlmIHRoZSBhY2sgaGFzIGJlZW4gcmVjZWl2ZWQuCi0JCSAqCi0JCSAqIE9uIHJhcmUgb2NjYXNpb25zIHRoZSBicm9hZGNhc3QgbGV2ZWwgdHJpZ2dlcmVkIGFjayBnZXRzCi0JCSAqIGRlbGF5ZWQgZ29pbmcgdG8gaW9hcGljcywgYW5kIGlmIHdlIHJlcHJvZ3JhbSB0aGUKLQkJICogdmVjdG9yIHdoaWxlIFJlbW90ZSBJUlIgaXMgc3RpbGwgc2V0IHRoZSBpcnEgd2lsbCBuZXZlcgotCQkgKiBmaXJlIGFnYWluLgotCQkgKgotCQkgKiBUbyBwcmV2ZW50IHRoaXMgc2NlbmFyaW8gd2UgcmVhZCB0aGUgUmVtb3RlIElSUiBiaXQKLQkJICogb2YgdGhlIGlvYXBpYy4gIFRoaXMgaGFzIHR3byBlZmZlY3RzLgotCQkgKiAtIE9uIGFueSBzYW5lIHN5c3RlbSB0aGUgcmVhZCBvZiB0aGUgaW9hcGljIHdpbGwKLQkJICogICBmbHVzaCB3cml0ZXMgKGFuZCBhY2tzKSBnb2luZyB0byB0aGUgaW9hcGljIGZyb20KLQkJICogICB0aGlzIGNwdS4KLQkJICogLSBXZSBnZXQgdG8gc2VlIGlmIHRoZSBBQ0sgaGFzIGFjdHVhbGx5IGJlZW4gZGVsaXZlcmVkLgotCQkgKgotCQkgKiBCYXNlZCBvbiBmYWlsZWQgZXhwZXJpbWVudHMgb2YgcmVwcm9ncmFtbWluZyB0aGUKLQkJICogaW9hcGljIGVudHJ5IGZyb20gb3V0c2lkZSBvZiBpcnEgY29udGV4dCBzdGFydGluZwotCQkgKiB3aXRoIG1hc2tpbmcgdGhlIGlvYXBpYyBlbnRyeSBhbmQgdGhlbiBwb2xsaW5nIHVudGlsCi0JCSAqIFJlbW90ZSBJUlIgd2FzIGNsZWFyIGJlZm9yZSByZXByb2dyYW1taW5nIHRoZQotCQkgKiBpb2FwaWMgSSBkb24ndCB0cnVzdCB0aGUgUmVtb3RlIElSUiBiaXQgdG8gYmUKLQkJICogY29tcGxldGV5IGFjY3VyYXRlLgotCQkgKgotCQkgKiBIb3dldmVyIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBsdWcKLQkJICogdGhpcyByYWNlLCBzbyBpZiB0aGUgUmVtb3RlIElSUiBiaXQgaXMgbm90Ci0JCSAqIGFjY3VyYXRlIGFuZCBpcyBjYXVzaW5nIHByb2JsZW1zIHRoZW4gaXQgaXMgYSBoYXJkd2FyZSBidWcKLQkJICogYW5kIHlvdSBjYW4gZ28gdGFsayB0byB0aGUgY2hpcHNldCB2ZW5kb3IgYWJvdXQgaXQuCi0JCSAqLwotCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JCWlmICghaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhjZmcpKQotCQkJbW92ZV9tYXNrZWRfaXJxKGlycSk7Ci0JCXVubWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotCX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAoISh2ICYgKDEgPDwgKGkgJiAweDFmKSkpKSB7Ci0JCWF0b21pY19pbmMoJmlycV9taXNfY291bnQpOwotCQlzcGluX2xvY2soJmlvYXBpY19sb2NrKTsKLQkJX19tYXNrX2FuZF9lZGdlX0lPX0FQSUNfaXJxKGNmZyk7Ci0JCV9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycShjZmcpOwotCQlzcGluX3VubG9jaygmaW9hcGljX2xvY2spOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJCT0gIklPLUFQSUMiLAotCS5zdGFydHVwCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCQk9IG1hc2tfSU9fQVBJQ19pcnEsCi0JLnVubWFzawkJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCi0JLmFjawkJPSBhY2tfYXBpY19lZGdlLAotCS5lb2kJCT0gYWNrX2FwaWNfbGV2ZWwsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJJUi1JTy1BUElDIiwKLQkuc3RhcnR1cAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKLQkubWFzawkJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAotCS5hY2sJCT0gYWNrX3gyYXBpY19lZGdlLAotCS5lb2kJCT0gYWNrX3gyYXBpY19sZXZlbCwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eQk9IHNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxLAotI2VuZGlmCi0JLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9JT19BUElDX3RyYXBzKHZvaWQpCi17Ci0JaW50IGlycTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQotCS8qCi0JICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRsaW5nCi0JICogbXVsdGlwbGUgaW50ZXJydXB0cyBhdCB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICogQXMgdGhlIGludGVycnVwdCBsZXZlbCBpcyBkZXRlcm1pbmVkIGJ5IHRha2luZyB0aGUKLQkgKiB2ZWN0b3IgbnVtYmVyIGFuZCBzaGlmdGluZyB0aGF0IHJpZ2h0IGJ5IDQsIHdlCi0JICogd2FudCB0byBzcHJlYWQgdGhlc2Ugb3V0IGEgYml0IHNvIHRoYXQgdGhleSBkb24ndAotCSAqIGFsbCBmYWxsIGluIHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKgotCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCi0JICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCi0JICovCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Ci0JCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgY2ZnICYmICFjZmctPnZlY3RvcikgewotCQkJLyoKLQkJCSAqIEhtbS4uIFdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsCi0JCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQotCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCi0JCQkgKi8KLQkJCWlmIChpcnEgPCBOUl9JUlFTX0xFR0FDWSkKLQkJCQltYWtlXzgyNTlBX2lycShpcnEpOwotCQkJZWxzZQotCQkJCS8qIFN0cmFuZ2UuIE9oLCB3ZWxsLi4gKi8KLQkJCQlkZXNjLT5jaGlwID0gJm5vX2lycV9jaGlwOwotCQl9Ci0JfQotfQotCi0vKgotICogVGhlIGxvY2FsIEFQSUMgaXJxLWNoaXAgaW1wbGVtZW50YXRpb246Ci0gKi8KLQotc3RhdGljIHZvaWQgbWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2ICYgfkFQSUNfTFZUX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJCT0gImxvY2FsLUFQSUMiLAotCS5tYXNrCQk9IG1hc2tfbGFwaWNfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX2xhcGljX2lycSwKLQkuYWNrCQk9IGFja19sYXBpY19pcnEsCi19OwotCi1zdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCi0JCQkJICAgICAgImVkZ2UiKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25taSh2b2lkKQotewotCS8qCi0JICogRGlydHkgdHJpY2sgdG8gZW5hYmxlIHRoZSBOTUkgd2F0Y2hkb2cgLi4uCi0JICogV2UgcHV0IHRoZSA4MjU5QSBtYXN0ZXIgaW50byBBRU9JIG1vZGUgYW5kCi0JICogdW5tYXNrIG9uIGFsbCBsb2NhbCBBUElDcyBMVlQwIGFzIE5NSS4KLQkgKgotCSAqIFRoZSBpZGVhIHRvIHVzZSB0aGUgODI1OUEgaW4gQUVPSSBtb2RlICgnODI1OUEgVmlydHVhbCBXaXJlJykKLQkgKiBpcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIC0gc28gd2UgZG8gbm90IGhhdmUgdG8gRU9JIGZyb20KLQkgKiB0aGUgTk1JIGhhbmRsZXIgb3IgdGhlIHRpbWVyIGludGVycnVwdC4KLQkgKi8KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7Ci0KLQllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIGRvbmUuXG4iKTsKLX0KLQotLyoKLSAqIFRoaXMgbG9va3MgYSBiaXQgaGFja2lzaCBidXQgaXQncyBhYm91dCB0aGUgb25seSBvbmUgd2F5IG9mIHNlbmRpbmcKLSAqIGEgZmV3IElOVEEgY3ljbGVzIHRvIDgyNTlBcyBhbmQgYW55IGFzc29jaWF0ZWQgZ2x1ZSBsb2dpYy4gIElDUiBkb2VzCi0gKiBub3Qgc3VwcG9ydCB0aGUgRXh0SU5UIG1vZGUsIHVuZm9ydHVuYXRlbHkuICBXZSBuZWVkIHRvIHNlbmQgdGhlc2UKLSAqIGN5Y2xlcyBhcyBzb21lIGk4MjQ4OURYLWJhc2VkIGJvYXJkcyBoYXZlIGdsdWUgbG9naWMgdGhhdCBrZWVwcyB0aGUKLSAqIDgyNTlBIGludGVycnVwdCBsaW5lIGFzc2VydGVkIHVudGlsIElOVEEuICAtLW1hY3JvCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdW5sb2NrX0V4dElOVF9sb2dpYyh2b2lkKQotewotCWludCBhcGljLCBwaW4sIGk7Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnkwLCBlbnRyeTE7Ci0JdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7Ci0KLQlwaW4gID0gZmluZF9pc2FfaXJxX3Bpbig4LCBtcF9JTlQpOwotCWlmIChwaW4gPT0gLTEpIHsKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm47Ci0JfQotCWFwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYyg4LCBtcF9JTlQpOwotCWlmIChhcGljID09IC0xKSB7Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJcmV0dXJuOwotCX0KLQotCWVudHJ5MCA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLQotCW1lbXNldCgmZW50cnkxLCAwLCBzaXplb2YoZW50cnkxKSk7Ci0KLQllbnRyeTEuZGVzdF9tb2RlID0gMDsJCQkvKiBwaHlzaWNhbCBkZWxpdmVyeSAqLwotCWVudHJ5MS5tYXNrID0gMDsJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLwotCWVudHJ5MS5kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKLQllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7Ci0JZW50cnkxLnRyaWdnZXIgPSAwOwotCWVudHJ5MS52ZWN0b3IgPSAwOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkxKTsKLQotCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7Ci0Jc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOwotCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3QgJiB+UlRDX1JBVEVfU0VMRUNUKSB8IDB4NiwKLQkJICAgUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCB8IFJUQ19QSUUsIFJUQ19DT05UUk9MKTsKLQotCWkgPSAxMDA7Ci0Jd2hpbGUgKGktLSA+IDApIHsKLQkJbWRlbGF5KDEwKTsKLQkJaWYgKChDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpICYgUlRDX1BGKSA9PSBSVENfUEYpCi0JCQlpIC09IDEwOwotCX0KLQotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOwotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTApOwotfQotCi1zdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKLS8qIEFjdHVhbGx5IHRoZSBuZXh0IGlzIG9ic29sZXRlLCBidXQga2VlcCBpdCBmb3IgcGFyYW5vaWQgcmVhc29ucyAtQUsgKi8KLXN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfdGltZXJfcGluX3NldHVwKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlX3RpbWVyX3Bpbl8xIiwgZGlzYWJsZV90aW1lcl9waW5fc2V0dXApOwotCi1pbnQgdGltZXJfdGhyb3VnaF84MjU5IF9faW5pdGRhdGE7Ci0KLS8qCi0gKiBUaGlzIGNvZGUgbWF5IGxvb2sgYSBiaXQgcGFyYW5vaWQsIGJ1dCBpdCdzIHN1cHBvc2VkIHRvIGNvb3BlcmF0ZSB3aXRoCi0gKiBhIHdpZGUgcmFuZ2Ugb2YgYm9hcmRzIGFuZCBCSU9TIGJ1Z3MuICBGb3J0dW5hdGVseSBvbmx5IHRoZSB0aW1lciBJUlEKLSAqIGlzIHNvIHNjcmV3eS4gIFRoYW5rcyB0byBCcmlhbiBQZXJraW5zIGZvciB0ZXN0aW5nL2hhY2tpbmcgdGhpcyBiZWFzdAotICogZmFuYXRpY2FsbHkgb24gaGlzIHRydWx5IGJ1Z2d5IGJvYXJkLgotICoKLSAqIEZJWE1FOiByZWFsbHkgbmVlZCB0byByZXZhbXAgdGhpcyBmb3IgYWxsIHBsYXRmb3Jtcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjaGVja190aW1lcih2b2lkKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKDApOwotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JaW50IGNwdSA9IGJvb3RfY3B1X2lkOwotCWludCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgdmVyOwotCWludCBub19waW4xID0gMDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOwotCi0JLyoKLQkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgotCSAqLwotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFzc2lnbl9pcnFfdmVjdG9yKDAsIGNmZywgVEFSR0VUX0NQVVMpOwotCi0JLyoKLQkgKiBBcyBJUlEwIGlzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIDgyNTlBLCB0aGUgdmlydHVhbAotCSAqIHdpcmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIHRoZSBsb2NhbCBBUElDLiAgQWxzbwotCSAqIHRpbWVyIGludGVycnVwdHMgbmVlZCB0byBiZSBhY2tub3dsZWRnZWQgbWFudWFsbHkgaW4KLQkgKiB0aGUgODI1OUEgZm9yIHRoZSBpODI0ODlEWCB3aGVuIHVzaW5nIHRoZSBOTUkKLQkgKiB3YXRjaGRvZyBhcyB0aGF0IEFQSUMgdHJlYXRzIE5NSXMgYXMgbGV2ZWwtdHJpZ2dlcmVkLgotCSAqIFRoZSBBRU9JIG1vZGUgd2lsbCBmaW5pc2ggdGhlbSBpbiB0aGUgODI1OUEKLQkgKiBhdXRvbWF0aWNhbGx5LgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7Ci0JaW5pdF84MjU5QSgxKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdGltZXJfYWNrID0gKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQyAmJiAhQVBJQ19JTlRFR1JBVEVEKHZlcikpOwotI2VuZGlmCi0KLQlwaW4xICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfSU5UKTsKLQlhcGljMSA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0lOVCk7Ci0JcGluMiAgPSBpb2FwaWNfaTgyNTkucGluOwotCWFwaWMyID0gaW9hcGljX2k4MjU5LmFwaWM7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggIgotCQkgICAgImFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKLQkJICAgIGNmZy0+dmVjdG9yLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCi0JLyoKLQkgKiBTb21lIEJJT1Mgd3JpdGVycyBhcmUgY2x1ZWxlc3MgYW5kIHJlcG9ydCB0aGUgRXh0SU5UQQotCSAqIEkvTyBBUElDIGlucHV0IGZyb20gdGhlIGNhc2NhZGVkIDgyNTlBIGFzIHRoZSB0aW1lcgotCSAqIGludGVycnVwdCBpbnB1dC4gIFNvIGp1c3QgaW4gY2FzZSwgaWYgb25seSBvbmUgcGluCi0JICogd2FzIGZvdW5kIGFib3ZlLCB0cnkgaXQgYm90aCBkaXJlY3RseSBhbmQgdGhyb3VnaCB0aGUKLQkgKiA4MjU5QS4KLQkgKi8KLQlpZiAocGluMSA9PSAtMSkgewotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQotCQkJcGFuaWMoIkJJT1MgYnVnOiB0aW1lciBub3QgY29ubmVjdGVkIHRvIElPLUFQSUMiKTsKLSNlbmRpZgotCQlwaW4xID0gcGluMjsKLQkJYXBpYzEgPSBhcGljMjsKLQkJbm9fcGluMSA9IDE7Ci0JfSBlbHNlIGlmIChwaW4yID09IC0xKSB7Ci0JCXBpbjIgPSBwaW4xOwotCQlhcGljMiA9IGFwaWMxOwotCX0KLQotCWlmIChwaW4xICE9IC0xKSB7Ci0JCS8qCi0JCSAqIE9rLCBkb2VzIElSUTAgdGhyb3VnaCB0aGUgSU9BUElDIHdvcms/Ci0JCSAqLwotCQlpZiAobm9fcGluMSkgewotCQkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBhcGljMSwgcGluMSk7Ci0JCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOwotCQl9Ci0JCXVubWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJfQotCQkJaWYgKGRpc2FibGVfdGltZXJfcGluXzEgPiAwKQotCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOwotCQkJZ290byBvdXQ7Ci0JCX0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOwotI2VuZGlmCi0JCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKLQkJaWYgKCFub19waW4xKQotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKLQkJCQkgICAgIjgyNTQgdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDXG4iKTsKLQotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgIgotCQkJICAgICIoSVJRMCkgdGhyb3VnaCB0aGUgODI1OUEgLi4uXG4iKTsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCQkgICAgIi4uLi4uIChmb3VuZCBhcGljICVkIHBpbiAlZCkgLi4uXG4iLCBhcGljMiwgcGluMik7Ci0JCS8qCi0JCSAqIGxlZ2FjeSBkZXZpY2VzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gSU8gQVBJQyAjMAotCQkgKi8KLQkJcmVwbGFjZV9waW5fYXRfaXJxX2NwdShjZmcsIGNwdSwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKLQkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzIsIHBpbjIsIGNmZy0+dmVjdG9yKTsKLQkJdW5tYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7Ci0JCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOwotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCi0JCSAqLwotCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7Ci0JfQotCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCi0JCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7Ci0JCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwotCX0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdGltZXJfYWNrID0gMDsKLSNlbmRpZgotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKLQotCWxhcGljX3JlZ2lzdGVyX2ludHIoMCwgZGVzYyk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CS8qIEZpeGVkIG1vZGUgKi8KLQllbmFibGVfODI1OUFfaXJxKDApOwotCi0JaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkLlxuIik7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KLQkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIEV4dElOVCBJUlEuLi5cbiIpOwotCi0JaW5pdF84MjU5QSgwKTsKLQltYWtlXzgyNTlBX2lycSgwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOwotCi0JdW5sb2NrX0V4dElOVF9sb2dpYygpOwotCi0JaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkIDooLlxuIik7Ci0JcGFuaWMoIklPLUFQSUMgKyB0aW1lciBkb2Vzbid0IHdvcmshICBCb290IHdpdGggYXBpYz1kZWJ1ZyBhbmQgc2VuZCBhICIKLQkJInJlcG9ydC4gIFRoZW4gdHJ5IGJvb3Rpbmcgd2l0aCB0aGUgJ25vYXBpYycgb3B0aW9uLlxuIik7Ci1vdXQ6Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogVHJhZGl0aW9uYWxseSBJU0EgSVJRMiBpcyB0aGUgY2FzY2FkZSBJUlEsIGFuZCBpcyBub3QgYXZhaWxhYmxlCi0gKiB0byBkZXZpY2VzLiAgSG93ZXZlciB0aGVyZSBtYXkgYmUgYW4gSS9PIEFQSUMgcGluIGF2YWlsYWJsZSBmb3IKLSAqIHRoaXMgaW50ZXJydXB0IHJlZ2FyZGxlc3MuICBUaGUgcGluIG1heSBiZSBsZWZ0IHVuY29ubmVjdGVkLCBidXQKLSAqIHR5cGljYWxseSBpdCB3aWxsIGJlIHJldXNlZCBhcyBhbiBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgZm9yCi0gKiB0aGUgbWFzdGVyIDgyNTlBLiAgSW4gdGhlIE1QUyBjYXNlIHN1Y2ggYSBwaW4gd2lsbCBub3JtYWxseSBiZQotICogcmVwb3J0ZWQgYXMgYW4gRXh0SU5UIGludGVycnVwdCBpbiB0aGUgTVAgdGFibGUuICBXaXRoIEFDUEkKLSAqIHRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgRXh0SU5UIGludGVycnVwdHMsIGFuZCBpbiB0aGUgYWJzZW5jZQotICogb2YgYW4gb3ZlcnJpZGUgaXQgd291bGQgYmUgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBJU0EgSS9PIEFQSUMKLSAqIGludGVycnVwdCwgdGhhdCBpcyBlZGdlLXRyaWdnZXJlZCBhbmQgdW5tYXNrZWQgYnkgZGVmYXVsdC4gIFdlCi0gKiB1c2VkIHRvIGRvIHRoaXMsIGJ1dCBpdCBjYXVzZWQgcHJvYmxlbXMgb24gc29tZSBzeXN0ZW1zIGJlY2F1c2UKLSAqIG9mIHRoZSBOTUkgd2F0Y2hkb2cgYW5kIHNvbWV0aW1lcyBJUlEwIG9mIHRoZSA4MjU0IHRpbWVyIHVzaW5nCi0gKiB0aGUgc2FtZSBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gZHJpdmUgdGhlIGxvY2FsIEFQSUMgb2YgdGhlCi0gKiBib290c3RyYXAgcHJvY2Vzc29yLiAgVGhlcmVmb3JlIHdlIHJlZnJhaW4gZnJvbSByb3V0aW5nIElSUTIgdG8KLSAqIHRoZSBJL08gQVBJQyBpbiBhbGwgY2FzZXMgbm93LiAgTm8gYWN0dWFsIGRldmljZSBzaG91bGQgcmVxdWVzdAotICogaXQgYW55d2F5LiAgLS1tYWNybwotICovCi0jZGVmaW5lIFBJQ19JUlFTCSgxIDw8IFBJQ19DQVNDQURFX0lSKQotCi12b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCi17Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZW5hYmxlX0lPX0FQSUMoKTsKLSNlbHNlCi0JLyoKLQkgKiBjYWxsaW5nIGVuYWJsZV9JT19BUElDKCkgaXMgbW92ZWQgdG8gc2V0dXBfbG9jYWxfQVBJQyBmb3IgQlAKLQkgKi8KLSNlbmRpZgotCi0JaW9fYXBpY19pcnFzID0gflBJQ19JUlFTOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKLQkvKgotICAgICAgICAgKiBTZXQgdXAgSU8tQVBJQyBJUlEgcm91dGluZy4KLSAgICAgICAgICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmICghYWNwaV9pb2FwaWMpCi0JCXNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGMoKTsKLSNlbmRpZgotCXN5bmNfQXJiX0lEcygpOwotCXNldHVwX0lPX0FQSUNfaXJxcygpOwotCWluaXRfSU9fQVBJQ190cmFwcygpOwotCWNoZWNrX3RpbWVyKCk7Ci19Ci0KLS8qCi0gKiAgICAgIENhbGxlZCBhZnRlciBhbGwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUuIElmIHdlIGRpZG50IGZpbmQgYW55Ci0gKiAgICAgIEFQSUMgYnVncyB0aGVuIHdlIGNhbiBhbGxvdyB0aGUgbW9kaWZ5IGZhc3QgcGF0aAotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGlvX2FwaWNfYnVnX2ZpbmFsaXplKHZvaWQpCi17Ci0JaWYgKHNpc19hcGljX2J1ZyA9PSAtMSkKLQkJc2lzX2FwaWNfYnVnID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChpb19hcGljX2J1Z19maW5hbGl6ZSk7Ci0KLXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgZGV2OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5WzBdOwotfTsKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKiBtcF9pb2FwaWNfZGF0YVtNQVhfSU9fQVBJQ1NdOwotCi1zdGF0aWMgaW50IGlvYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpICsrLCBlbnRyeSArKyApCi0JCSplbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGRldi0+aWQsIGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwotCWVudHJ5ID0gZGF0YS0+ZW50cnk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGRldi0+aWQsIDApOwotCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZCkgewotCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkOwotCQlpb19hcGljX3dyaXRlKGRldi0+aWQsIDAsIHJlZ18wMC5yYXcpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCi0JCWlvYXBpY193cml0ZV9lbnRyeShkZXYtPmlkLCBpLCBlbnRyeVtpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW9hcGljX3N5c2Rldl9jbGFzcyA9IHsKLQkubmFtZSA9ICJpb2FwaWMiLAotCS5zdXNwZW5kID0gaW9hcGljX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlvYXBpY19yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfaW5pdF9zeXNmcyh2b2lkKQotewotCXN0cnVjdCBzeXNfZGV2aWNlICogZGV2OwotCWludCBpLCBzaXplLCBlcnJvcjsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpb2FwaWNfc3lzZGV2X2NsYXNzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKysgKSB7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IHN5c19kZXZpY2UpICsgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXQotCQkJKiBzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpOwotCQltcF9pb2FwaWNfZGF0YVtpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbXBfaW9hcGljX2RhdGFbaV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldiA9ICZtcF9pb2FwaWNfZGF0YVtpXS0+ZGV2OwotCQlkZXYtPmlkID0gaTsKLQkJZGV2LT5jbHMgPSAmaW9hcGljX3N5c2Rldl9jbGFzczsKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlrZnJlZShtcF9pb2FwaWNfZGF0YVtpXSk7Ci0JCQltcF9pb2FwaWNfZGF0YVtpXSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1kZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOwotCi0vKgotICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgotICovCi11bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQpCi17Ci0JLyogQWxsb2NhdGUgYW4gdW51c2VkIGlycSAqLwotCXVuc2lnbmVkIGludCBpcnE7Ci0JdW5zaWduZWQgaW50IG5ldzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpcnFfY2ZnICpjZmdfbmV3ID0gTlVMTDsKLQlpbnQgY3B1ID0gYm9vdF9jcHVfaWQ7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjX25ldyA9IE5VTEw7Ci0KLQlpcnEgPSAwOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWZvciAobmV3ID0gaXJxX3dhbnQ7IG5ldyA8IE5SX0lSUVM7IG5ldysrKSB7Ci0JCWlmIChwbGF0Zm9ybV9sZWdhY3lfaXJxKG5ldykpCi0JCQljb250aW51ZTsKLQotCQlkZXNjX25ldyA9IGlycV90b19kZXNjX2FsbG9jX2NwdShuZXcsIGNwdSk7Ci0JCWlmICghZGVzY19uZXcpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImNhbiBub3QgZ2V0IGlycV9kZXNjIGZvciAlZFxuIiwgbmV3KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNmZ19uZXcgPSBkZXNjX25ldy0+Y2hpcF9kYXRhOwotCi0JCWlmIChjZmdfbmV3LT52ZWN0b3IgIT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIGNmZ19uZXcsIFRBUkdFVF9DUFVTKSA9PSAwKQotCQkJaXJxID0gbmV3OwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCWlmIChpcnEgPiAwKSB7Ci0JCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKLQkJLyogcmVzdG9yZSBpdCwgaW4gY2FzZSBkeW5hbWljX2lycV9pbml0IGNsZWFyIGl0ICovCi0JCWlmIChkZXNjX25ldykKLQkJCWRlc2NfbmV3LT5jaGlwX2RhdGEgPSBjZmdfbmV3OwotCX0KLQlyZXR1cm4gaXJxOwotfQotCi1zdGF0aWMgaW50IG5yX2lycXNfZ3NpID0gTlJfSVJRU19MRUdBQ1k7Ci1pbnQgY3JlYXRlX2lycSh2b2lkKQotewotCXVuc2lnbmVkIGludCBpcnFfd2FudDsKLQlpbnQgaXJxOwotCi0JaXJxX3dhbnQgPSBucl9pcnFzX2dzaTsKLQlpcnEgPSBjcmVhdGVfaXJxX25yKGlycV93YW50KTsKLQotCWlmIChpcnEgPT0gMCkKLQkJaXJxID0gLTE7Ci0KLQlyZXR1cm4gaXJxOwotfQotCi12b2lkIGRlc3Ryb3lfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQotCS8qIHN0b3JlIGl0LCBpbiBjYXNlIGR5bmFtaWNfaXJxX2NsZWFudXAgY2xlYXIgaXQgKi8KLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JZHluYW1pY19pcnFfY2xlYW51cChpcnEpOwotCS8qIGNvbm5lY3QgYmFjayBpcnFfY2ZnICovCi0JaWYgKGRlc2MpCi0JCWRlc2MtPmNoaXBfZGF0YSA9IGNmZzsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JZnJlZV9pcnRlKGlycSk7Ci0jZW5kaWYKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlfX2NsZWFyX2lycV92ZWN0b3IoaXJxLCBjZmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBNU0kgbWVzc2FnZSBjb21wb3NpdGlvbgotICovCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLXN0YXRpYyBpbnQgbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBkZXN0OwotCi0JY2ZnID0gaXJxX2NmZyhpcnEpOwotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBUQVJHRVRfQ1BVUyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWRfYW5kKGNmZy0+ZG9tYWluLCBUQVJHRVRfQ1BVUyk7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewotCQlzdHJ1Y3QgaXJ0ZSBpcnRlOwotCQlpbnQgaXJfaW5kZXg7Ci0JCXUxNiBzdWJfaGFuZGxlOwotCi0JCWlyX2luZGV4ID0gbWFwX2lycV90b19pcnRlX2hhbmRsZShpcnEsICZzdWJfaGFuZGxlKTsKLQkJQlVHX09OKGlyX2luZGV4ID09IC0xKTsKLQotCQltZW1zZXQgKCZpcnRlLCAwLCBzaXplb2YoaXJ0ZSkpOwotCi0JCWlydGUucHJlc2VudCA9IDE7Ci0JCWlydGUuZHN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCQlpcnRlLnRyaWdnZXJfbW9kZSA9IDA7IC8qIGVkZ2UgKi8KLQkJaXJ0ZS5kbHZyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0KTsKLQotCQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKLQotCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOwotCQltc2ctPmRhdGEgPSBzdWJfaGFuZGxlOwotCQltc2ctPmFkZHJlc3NfbG8gPSBNU0lfQUREUl9CQVNFX0xPIHwgTVNJX0FERFJfSVJfRVhUX0lOVCB8Ci0JCQkJICBNU0lfQUREUl9JUl9TSFYgfAotCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgxKGlyX2luZGV4KSB8Ci0JCQkJICBNU0lfQUREUl9JUl9JTkRFWDIoaXJfaW5kZXgpOwotCX0gZWxzZQotI2VuZGlmCi0JewotCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOwotCQltc2ctPmFkZHJlc3NfbG8gPQotCQkJTVNJX0FERFJfQkFTRV9MTyB8Ci0JCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwotCQkJCU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTSUNBTDoKLQkJCQlNU0lfQUREUl9ERVNUX01PREVfTE9HSUNBTCkgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KLQkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFU6Ci0JCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJKSB8Ci0JCQlNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0JCW1zZy0+ZGF0YSA9Ci0JCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfAotCQkJTVNJX0RBVEFfTEVWRUxfQVNTRVJUIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJTVNJX0RBVEFfREVMSVZFUllfRklYRUQ6Ci0JCQkJTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJKSB8Ci0JCQlNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgc2V0X21zaV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQotCQlyZXR1cm47Ci0KLQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0KLQlyZWFkX21zaV9tc2dfZGVzYyhkZXNjLCAmbXNnKTsKLQotCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKLQltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOwotCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCXdyaXRlX21zaV9tc2dfZGVzYyhkZXNjLCAmbXNnKTsKLX0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotLyoKLSAqIE1pZ3JhdGUgdGhlIE1TSSBpcnEgdG8gYW5vdGhlciBjcHVtYXNrLiBUaGlzIG1pZ3JhdGlvbiBpcwotICogZG9uZSBpbiB0aGUgcHJvY2VzcyBjb250ZXh0IHVzaW5nIGludGVycnVwdC1yZW1hcHBpbmcgaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1pcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0Jc3RydWN0IGlydGUgaXJ0ZTsKLQotCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKLQkJcmV0dXJuOwotCi0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCi0JCXJldHVybjsKLQotCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOwotCi0JLyoKLQkgKiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgSVJURSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24gYW5kIHZlY3Rvci4KLQkgKi8KLQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKLQotCS8qCi0JICogQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHRoZSBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgYXJyaXZpbmcKLQkgKiBhdCB0aGUgbmV3IGRlc3RpbmF0aW9uLiBTbywgdGltZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cwotCSAqIHZlY3RvciBhbGxvY2F0aW9uLgotCSAqLwotCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpCi0JCXNlbmRfY2xlYW51cF92ZWN0b3IoY2ZnKTsKLX0KLQotI2VuZGlmCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogSVJRIENoaXAgZm9yIE1TSSBQQ0kvUENJLVgvUENJLUV4cHJlc3MgRGV2aWNlcywKLSAqIHdoaWNoIGltcGxlbWVudCB0aGUgTVNJIG9yIE1TSS1YIENhcGFiaWxpdHkgU3RydWN0dXJlLgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktTVNJIiwKLQkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAotCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuYWNrCQk9IGFja19hcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJfY2hpcCA9IHsKLQkubmFtZQkJPSAiSVItUENJLU1TSSIsCi0JLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKLQkubWFzawkJPSBtYXNrX21zaV9pcnEsCi0JLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLS8qCi0gKiBNYXAgdGhlIFBDSSBkZXYgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVtYXBwaW5nIGhhcmR3YXJlIHVuaXQKLSAqIGFuZCBhbGxvY2F0ZSAnbnZlYycgY29uc2VjdXRpdmUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyaWVzCi0gKiBpbiBpdC4KLSAqLwotc3RhdGljIGludCBtc2lfYWxsb2NfaXJ0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxLCBpbnQgbnZlYykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwotCWludCBpbmRleDsKLQotCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOwotCWlmICghaW9tbXUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVW5hYmxlIHRvIG1hcCBQQ0kgJXMgdG8gaW9tbXVcbiIsIHBjaV9uYW1lKGRldikpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgbnZlYyk7Ci0JaWYgKGluZGV4IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgJWQgSVJURSBmb3IgUENJICVzXG4iLCBudmVjLAotCQkgICAgICAgcGNpX25hbWUoZGV2KSk7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBzZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYywgaW50IGlycSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhkZXYsIGlycSwgJm1zZyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlzZXRfaXJxX21zaShpcnEsIG1zaWRlc2MpOwotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0JCS8qCi0JCSAqIGlycSBtaWdyYXRpb24gaW4gcHJvY2VzcyBjb250ZXh0Ci0JCSAqLwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOwotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfaXJfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCX0gZWxzZQotI2VuZGlmCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0KLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImlycSAlZCBmb3IgTVNJL01TSS1YXG4iLCBpcnEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICptc2lkZXNjKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7Ci0KLQlpcnFfd2FudCA9IG5yX2lycXNfZ3NpOwotCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQpOwotCWlmIChpcnEgPT0gMCkKLQkJcmV0dXJuIC0xOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCWdvdG8gbm9faXI7Ci0KLQlyZXQgPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7Ci1ub19pcjoKLSNlbmRpZgotCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBtc2lkZXNjLCBpcnEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRlc3Ryb3lfaXJxKGlycSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLWVycm9yOgotCWRlc3Ryb3lfaXJxKGlycSk7Ci0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCi1pbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQlpbnQgcmV0LCBzdWJfaGFuZGxlOwotCXN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYzsKLQl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSAwOwotCWludCBpbmRleCA9IDA7Ci0jZW5kaWYKLQotCWlycV93YW50ID0gbnJfaXJxc19nc2k7Ci0Jc3ViX2hhbmRsZSA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtc2lkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlpcnEgPSBjcmVhdGVfaXJxX25yKGlycV93YW50KTsKLQkJaXJxX3dhbnQrKzsKLQkJaWYgKGlycSA9PSAwKQotCQkJcmV0dXJuIC0xOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JCWlmICghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCWdvdG8gbm9faXI7Ci0KLQkJaWYgKCFzdWJfaGFuZGxlKSB7Ci0JCQkvKgotCQkJICogYWxsb2NhdGUgdGhlIGNvbnNlY3V0aXZlIGJsb2NrIG9mIElSVEUncwotCQkJICogZm9yICdudmVjJwotCQkJICovCi0JCQlpbmRleCA9IG1zaV9hbGxvY19pcnRlKGRldiwgaXJxLCBudmVjKTsKLQkJCWlmIChpbmRleCA8IDApIHsKLQkJCQlyZXQgPSBpbmRleDsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9IGVsc2UgewotCQkJaW9tbXUgPSBtYXBfZGV2X3RvX2lyKGRldik7Ci0JCQlpZiAoIWlvbW11KSB7Ci0JCQkJcmV0ID0gLUVOT0VOVDsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQkJLyoKLQkJCSAqIHNldHVwIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGlycSBhbmQgdGhlIElSVEUKLQkJCSAqIGJhc2UgaW5kZXgsIHRoZSBzdWJfaGFuZGxlIHBvaW50aW5nIHRvIHRoZQotCQkJICogYXBwcm9wcmlhdGUgaW50ZXJydXB0IHJlbWFwIHRhYmxlIGVudHJ5LgotCQkJICovCi0JCQlzZXRfaXJ0ZV9pcnEoaXJxLCBpb21tdSwgaW5kZXgsIHN1Yl9oYW5kbGUpOwotCQl9Ci1ub19pcjoKLSNlbmRpZgotCQlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgbXNpZGVzYywgaXJxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycm9yOwotCQlzdWJfaGFuZGxlKys7Ci0JfQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlkZXN0cm95X2lycShpcnEpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgYXJjaF90ZWFyZG93bl9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGVzdHJveV9pcnEoaXJxKTsKLX0KLQotI2lmZGVmIENPTkZJR19ETUFSCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgZG1hcl9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0KLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKLQkJcmV0dXJuOwotCi0JY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCi0JZG1hcl9tc2lfcmVhZChpcnEsICZtc2cpOwotCi0JbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwotCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7Ci0JbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0JZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotc3RydWN0IGlycV9jaGlwIGRtYXJfbXNpX3R5cGUgPSB7Ci0JLm5hbWUgPSAiRE1BUl9NU0kiLAotCS51bm1hc2sgPSBkbWFyX21zaV91bm1hc2ssCi0JLm1hc2sgPSBkbWFyX21zaV9tYXNrLAotCS5hY2sgPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5ID0gZG1hcl9tc2lfc2V0X2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfZG1hcl9tc2kodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZG1hcl9tc2lfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLAotCQkiZWRnZSIpOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgaHBldF9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0KLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKLQkJcmV0dXJuOwotCi0JY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCi0JaHBldF9tc2lfcmVhZChpcnEsICZtc2cpOwotCi0JbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwotCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7Ci0JbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0JaHBldF9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7Ci0JLm5hbWUgPSAiSFBFVF9NU0kiLAotCS51bm1hc2sgPSBocGV0X21zaV91bm1hc2ssCi0JLm1hc2sgPSBocGV0X21zaV9tYXNrLAotCS5hY2sgPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5ID0gaHBldF9tc2lfc2V0X2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaHBldF9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZocGV0X21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCi0JCSJlZGdlIik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KLS8qCi0gKiBIeXBlcnRyYW5zcG9ydCBpbnRlcnJ1cHQgc3VwcG9ydAotICovCi0jaWZkZWYgQ09ORklHX0hUX0lSUQotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdGF0aWMgdm9pZCB0YXJnZXRfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCi17Ci0Jc3RydWN0IGh0X2lycV9tc2cgbXNnOwotCWZldGNoX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLQotCW1zZy5hZGRyZXNzX2xvICY9IH4oSFRfSVJRX0xPV19WRUNUT1JfTUFTSyB8IEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKTsKLQltc2cuYWRkcmVzc19oaSAmPSB+KEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSyk7Ci0KLQltc2cuYWRkcmVzc19sbyB8PSBIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwgSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOwotCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7Ci0KLQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCXVuc2lnbmVkIGludCBkZXN0OwotCi0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCi0JCXJldHVybjsKLQotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCXRhcmdldF9odF9pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGh0X2lycV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktSFQiLAotCS5tYXNrCQk9IG1hc2tfaHRfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX2h0X2lycSwKLQkuYWNrCQk9IGFja19hcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfaHRfaXJxX2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQlpbnQgZXJyOwotCi0JY2ZnID0gaXJxX2NmZyhpcnEpOwotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBUQVJHRVRfQ1BVUyk7Ci0JaWYgKCFlcnIpIHsKLQkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwotCQl1bnNpZ25lZCBkZXN0OwotCi0JCWRlc3QgPSBjcHVfbWFza190b19hcGljaWRfYW5kKGNmZy0+ZG9tYWluLCBUQVJHRVRfQ1BVUyk7Ci0KLQkJbXNnLmFkZHJlc3NfaGkgPSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOwotCi0JCW1zZy5hZGRyZXNzX2xvID0KLQkJCUhUX0lSUV9MT1dfQkFTRSB8Ci0JCQlIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCkgfAotCQkJSFRfSVJRX0xPV19WRUNUT1IoY2ZnLT52ZWN0b3IpIHwKLQkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/Ci0JCQkJSFRfSVJRX0xPV19ETV9QSFlTSUNBTCA6Ci0JCQkJSFRfSVJRX0xPV19ETV9MT0dJQ0FMKSB8Ci0JCQlIVF9JUlFfTE9XX1JRRU9JX0VER0UgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KLQkJCQlIVF9JUlFfTE9XX01UX0ZJWEVEIDoKLQkJCQlIVF9JUlFfTE9XX01UX0FSQklUUkFURUQpIHwKLQkJCUhUX0lSUV9MT1dfSVJRX01BU0tFRDsKLQotCQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci0KLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaHRfaXJxX2NoaXAsCi0JCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImlycSAlZCBmb3IgSFRcbiIsIGlycSk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotLyoKLSAqIFJlLXRhcmdldCB0aGUgaXJxIHRvIHRoZSBzcGVjaWZpZWQgQ1BVIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZCBNTVIgbG9jYXRlZAotICogb24gdGhlIHNwZWNpZmllZCBibGFkZSB0byBhbGxvdyB0aGUgc2VuZGluZyBvZiBNU0lzIHRvIHRoZSBzcGVjaWZpZWQgQ1BVLgotICovCi1pbnQgYXJjaF9lbmFibGVfdXZfaXJxKGNoYXIgKmlycV9uYW1lLCB1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQotewotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICplbGlnaWJsZV9jcHUgPSBjcHVtYXNrX29mKGNwdSk7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQlpbnQgbW1yX3Bub2RlOwotCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOwotCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQljZmcgPSBpcnFfY2ZnKGlycSk7Ci0KLQllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgZWxpZ2libGVfY3B1KTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVybiBlcnI7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ1dl9pcnFfY2hpcCwgaGFuZGxlX3BlcmNwdV9pcnEsCi0JCQkJICAgICAgaXJxX25hbWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0KLQltbXJfdmFsdWUgPSAwOwotCWVudHJ5ID0gKHN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICopJm1tcl92YWx1ZTsKLQlCVUdfT04oc2l6ZW9mKHN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5KSAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCi0JZW50cnktPnZlY3RvciA9IGNmZy0+dmVjdG9yOwotCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JZW50cnktPmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JZW50cnktPnBvbGFyaXR5ID0gMDsKLQllbnRyeS0+dHJpZ2dlciA9IDA7Ci0JZW50cnktPm1hc2sgPSAwOwotCWVudHJ5LT5kZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKGVsaWdpYmxlX2NwdSk7Ci0KLQltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOwotCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7Ci0KLQlyZXR1cm4gaXJxOwotfQotCi0vKgotICogRGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkIG9uIHRoZSBzcGVjaWZpZWQgYmxhZGUgc28gdGhhdCBNU0lzIGFyZQotICogbG9uZ2VyIGFsbG93ZWQgdG8gYmUgc2VudC4KLSAqLwotdm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCBtbXJfYmxhZGUsIHVuc2lnbmVkIGxvbmcgbW1yX29mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsKLQlzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0JaW50IG1tcl9wbm9kZTsKLQotCW1tcl92YWx1ZSA9IDA7Ci0JZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOwotCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0KLQllbnRyeS0+bWFzayA9IDE7Ci0KLQltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOwotCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMgKGludCBpb2FwaWMpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZWdfMDEuYml0cy5lbnRyaWVzOwotfQotCi12b2lkIF9faW5pdCBwcm9iZV9ucl9pcnFzX2dzaSh2b2lkKQotewotCWludCBuciA9IDA7Ci0KLQluciA9IGFjcGlfcHJvYmVfZ3NpKCk7Ci0JaWYgKG5yID4gbnJfaXJxc19nc2kpIHsKLQkJbnJfaXJxc19nc2kgPSBucjsKLQl9IGVsc2UgewotCQkvKiBmb3IgYWNwaT1vZmYgb3IgYWNwaSBpcyBub3QgY29tcGlsZWQgaW4gKi8KLQkJaW50IGlkeDsKLQotCQluciA9IDA7Ci0JCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfaW9hcGljczsgaWR4KyspCi0JCQluciArPSBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGlkeCkgKyAxOwotCi0JCWlmIChuciA+IG5yX2lycXNfZ3NpKQotCQkJbnJfaXJxc19nc2kgPSBucjsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAibnJfaXJxc19nc2k6ICVkXG4iLCBucl9pcnFzX2dzaSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgSU9BUElDIENvbmZpZ3VyYXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQUNQSQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotaW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXN0YXRpYyBwaHlzaWRfbWFza190IGFwaWNfaWRfbWFwID0gUEhZU0lEX01BU0tfTk9ORTsKLQlwaHlzaWRfbWFza190IHRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpID0gMDsKLQotCS8qCi0JICogVGhlIFA0IHBsYXRmb3JtIHN1cHBvcnRzIHVwIHRvIDI1NiBBUElDIElEcyBvbiB0d28gc2VwYXJhdGUgQVBJQwotCSAqIGJ1c2VzIChvbmUgZm9yIExBUElDcywgb25lIGZvciBJT0FQSUNzKSwgd2hlcmUgcHJlZGVjZXNzb3JzIG9ubHkKLQkgKiBzdXBwb3J0cyB1cCB0byAxNiBvbiBvbmUgc2hhcmVkIEFQSUMgYnVzLgotCSAqCi0JICogVEJEOiBFeHBhbmQgTEFQSUMvSU9BUElDIHN1cHBvcnQgb24gUDQtY2xhc3Mgc3lzdGVtcyB0byB0YWtlIGZ1bGwKLQkgKiAgICAgIGFkdmFudGFnZSBvZiBuZXcgQVBJQyBidXMgYXJjaGl0ZWN0dXJlLgotCSAqLwotCi0JaWYgKHBoeXNpZHNfZW1wdHkoYXBpY19pZF9tYXApKQotCQlhcGljX2lkX21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCi0JCQkiJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgcmVnXzAwLmJpdHMuSUQpOwotCQlhcGljX2lkID0gcmVnXzAwLmJpdHMuSUQ7Ci0JfQotCi0JLyoKLQkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCi0JICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCi0JICovCi0JaWYgKGNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgewotCi0JCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykgewotCQkJaWYgKCFjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgaSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA9PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCi0JCQlwYW5pYygiTWF4IGFwaWNfaWQgZXhjZWVkZWQhXG4iKTsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBhcGljX2lkICVkIGFscmVhZHkgdXNlZCwgIgotCQkJInRyeWluZyAlZFxuIiwgaW9hcGljLCBhcGljX2lkLCBpKTsKLQotCQlhcGljX2lkID0gaTsKLQl9Ci0KLQl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQoYXBpY19pZCk7Ci0JcGh5c2lkc19vcihhcGljX2lkX21hcCwgYXBpY19pZF9tYXAsIHRtcCk7Ci0KLQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgewotCQlyZWdfMDAuYml0cy5JRCA9IGFwaWNfaWQ7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JCS8qIFNhbml0eSBjaGVjayAqLwotCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgewotCQkJcHJpbnRrKCJJT0FQSUNbJWRdOiBVbmFibGUgdG8gY2hhbmdlIGFwaWNfaWQhXG4iLCBpb2FwaWMpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSJJT0FQSUNbJWRdOiBBc3NpZ25lZCBhcGljX2lkICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQpOwotCi0JcmV0dXJuIGFwaWNfaWQ7Ci19Ci0KLWludCBfX2luaXQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKLX0KLSNlbmRpZgotCi1pbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCB0cmlnZ2VyaW5nLCBpbnQgcG9sYXJpdHkpCi17Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JaW50IGNwdSA9IGJvb3RfY3B1X2lkOwotCi0JaWYgKCFJT19BUElDX0lSUShpcnEpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsS0VSTl9FUlIgIklPQVBJQ1slZF06IEludmFsaWQgcmVmZXJlbmNlIHRvIElSUSAwXG4iLAotCQkJaW9hcGljKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGVzYyA9IGlycV90b19kZXNjX2FsbG9jX2NwdShpcnEsIGNwdSk7Ci0JaWYgKCFkZXNjKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImNhbiBub3QgZ2V0IGlycV9kZXNjICVkXG4iLCBpcnEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIElSUXMgPCAxNiBhcmUgYWxyZWFkeSBpbiB0aGUgaXJxXzJfcGluW10gbWFwCi0JICovCi0JaWYgKGlycSA+PSBOUl9JUlFTX0xFR0FDWSkgewotCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0JCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgaW9hcGljLCBwaW4pOwotCX0KLQotCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsIGRlc2MsIHRyaWdnZXJpbmcsIHBvbGFyaXR5KTsKLQotCXJldHVybiAwOwotfQotCi0KLWludCBhY3BpX2dldF9vdmVycmlkZV9pcnEoaW50IGJ1c19pcnEsIGludCAqdHJpZ2dlciwgaW50ICpwb2xhcml0eSkKLXsKLQlpbnQgaTsKLQotCWlmIChza2lwX2lvYXBpY19zZXR1cCkKLQkJcmV0dXJuIC0xOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gbXBfSU5UICYmCi0JCSAgICBtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBidXNfaXJxKQotCQkJYnJlYWs7Ci0JaWYgKGkgPj0gbXBfaXJxX2VudHJpZXMpCi0JCXJldHVybiAtMTsKLQotCSp0cmlnZ2VyID0gaXJxX3RyaWdnZXIoaSk7Ci0JKnBvbGFyaXR5ID0gaXJxX3BvbGFyaXR5KGkpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKLSAqIHdlIG5lZWQgdG8gcmVwcm9ncmFtIHRoZSBpb3JlZHRibHMgdG8gY2F0ZXIgZm9yIHRoZSBjcHVzIHdoaWNoIGhhdmUgY29tZSBvbmxpbmUKLSAqIHNvIG1hc2sgaW4gYWxsIGNhc2VzIHNob3VsZCBzaW1wbHkgYmUgVEFSR0VUX0NQVVMKLSAqLwotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgX19pbml0IHNldHVwX2lvYXBpY19kZXN0KHZvaWQpCi17Ci0JaW50IHBpbiwgaW9hcGljLCBpcnEsIGlycV9lbnRyeTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQotCWlmIChza2lwX2lvYXBpY19zZXR1cCA9PSAxKQotCQlyZXR1cm47Ci0KLQlmb3IgKGlvYXBpYyA9IDA7IGlvYXBpYyA8IG5yX2lvYXBpY3M7IGlvYXBpYysrKSB7Ci0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpb2FwaWNdOyBwaW4rKykgewotCQkJaXJxX2VudHJ5ID0gZmluZF9pcnFfZW50cnkoaW9hcGljLCBwaW4sIG1wX0lOVCk7Ci0JCQlpZiAoaXJxX2VudHJ5ID09IC0xKQotCQkJCWNvbnRpbnVlOwotCQkJaXJxID0gcGluXzJfaXJxKGlycV9lbnRyeSwgaW9hcGljLCBwaW4pOwotCi0JCQkvKiBzZXR1cF9JT19BUElDX2lycXMgY291bGQgZmFpbCB0byBnZXQgdmVjdG9yIGZvciBzb21lIGRldmljZQotCQkJICogd2hlbiB5b3UgaGF2ZSB0b28gbWFueSBkZXZpY2VzLCBiZWNhdXNlIGF0IHRoYXQgdGltZSBvbmx5IGJvb3QKLQkJCSAqIGNwdSBpcyBvbmxpbmUuCi0JCQkgKi8KLQkJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCQkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCQkJaWYgKCFjZmctPnZlY3RvcikgewotCQkJCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsIGRlc2MsCi0JCQkJCQkgIGlycV90cmlnZ2VyKGlycV9lbnRyeSksCi0JCQkJCQkgIGlycV9wb2xhcml0eShpcnFfZW50cnkpKTsKLQkJCQljb250aW51ZTsKLQotCQkJfQotCi0JCQkvKgotCQkJICogSG9ub3VyIGFmZmluaXRpZXMgd2hpY2ggaGF2ZSBiZWVuIHNldCBpbiBlYXJseSBib290Ci0JCQkgKi8KLQkJCWlmIChkZXNjLT5zdGF0dXMgJgotCQkJICAgIChJUlFfTk9fQkFMQU5DSU5HIHwgSVJRX0FGRklOSVRZX1NFVCkpCi0JCQkJbWFzayA9ICZkZXNjLT5hZmZpbml0eTsKLQkJCWVsc2UKLQkJCQltYXNrID0gVEFSR0VUX0NQVVM7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQkJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2MoZGVzYywgbWFzayk7Ci0JCX0KLQotCX0KLX0KLSNlbmRpZgotCi0jZGVmaW5lIElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgMTEKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3Jlc291cmNlczsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBuOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgKm1lbTsKLQlpbnQgaTsKLQotCWlmIChucl9pb2FwaWNzIDw9IDApCi0JCXJldHVybiBOVUxMOwotCi0JbiA9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgKyBzaXplb2Yoc3RydWN0IHJlc291cmNlKTsKLQluICo9IG5yX2lvYXBpY3M7Ci0KLQltZW0gPSBhbGxvY19ib290bWVtKG4pOwotCXJlcyA9ICh2b2lkICopbWVtOwotCi0JaWYgKG1lbSAhPSBOVUxMKSB7Ci0JCW1lbSArPSBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG5yX2lvYXBpY3M7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQkJcmVzW2ldLm5hbWUgPSBtZW07Ci0JCQlyZXNbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQkJCXNwcmludGYobWVtLCAgIklPQVBJQyAldSIsIGkpOwotCQkJbWVtICs9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkU7Ci0JCX0KLQl9Ci0KLQlpb2FwaWNfcmVzb3VyY2VzID0gcmVzOwotCi0JcmV0dXJuIHJlczsKLX0KLQotdm9pZCBfX2luaXQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvYXBpY19waHlzLCBpZHggPSBGSVhfSU9fQVBJQ19CQVNFXzA7Ci0Jc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzOwotCWludCBpOwotCi0JaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWlmIChzbXBfZm91bmRfY29uZmlnKSB7Ci0JCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCQkJaWYgKCFpb2FwaWNfcGh5cykgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiV0FSTklORzogYm9ndXMgemVybyBJTy1BUElDICIKLQkJCQkgICAgICAgImFkZHJlc3MgZm91bmQgaW4gTVBUQUJMRSwgIgotCQkJCSAgICAgICAiZGlzYWJsaW5nIElPL0FQSUMgc3VwcG9ydCFcbiIpOwotCQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOwotCQkJCXNraXBfaW9hcGljX3NldHVwID0gMTsKLQkJCQlnb3RvIGZha2VfaW9hcGljX3BhZ2U7Ci0JCQl9Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1mYWtlX2lvYXBpY19wYWdlOgotI2VuZGlmCi0JCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7Ci0JCX0KLQkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCi0JCQkgICAgIm1hcHBlZCBJT0FQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKLQkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKLQkJaWR4Kys7Ci0KLQkJaWYgKGlvYXBpY19yZXMgIT0gTlVMTCkgewotCQkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKLQkJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7Ci0JCQlpb2FwaWNfcmVzKys7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHJlc291cmNlICpyID0gaW9hcGljX3Jlc291cmNlczsKLQotCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJJTyBBUElDIHJlc291cmNlcyBjb3VsZCBiZSBub3QgYmUgYWxsb2NhdGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHIpOwotCQlyKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEluc2VydCB0aGUgSU8gQVBJQyByZXNvdXJjZXMgYWZ0ZXIgUENJIGluaXRpYWxpemF0aW9uIGhhcyBvY2N1cmVkIHRvIGhhbmRsZQotICogSU8gQVBJQ1MgdGhhdCBhcmUgbWFwcGVkIGluIG9uIGEgQkFSIGluIFBDSSBzcGFjZS4gKi8KLWxhdGVfaW5pdGNhbGwoaW9hcGljX2luc2VydF9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvcG9ydC5jIGIvYXJjaC94ODYva2VybmVsL2lvcG9ydC5jCmluZGV4IGIxMjIwOGYuLjk5YzRkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9wb3J0LmMKQEAgLTg1LDE5ICs4NSw4IEBACiAKIAl0LT5pb19iaXRtYXBfbWF4ID0gYnl0ZXM7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBTZXRzIHRoZSBsYXp5IHRyaWdnZXIgc28gdGhhdCB0aGUgbmV4dCBJL08gb3BlcmF0aW9uIHdpbGwKLQkgKiByZWxvYWQgdGhlIGNvcnJlY3QgYml0bWFwLgotCSAqIFJlc2V0IHRoZSBvd25lciBzbyB0aGF0IGEgcHJvY2VzcyBzd2l0Y2ggd2lsbCBub3Qgc2V0Ci0JICogdHNzLT5pb19iaXRtYXBfYmFzZSB0byBJT19CSVRNQVBfT0ZGU0VULgotCSAqLwotCXRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IElOVkFMSURfSU9fQklUTUFQX09GRlNFVF9MQVpZOwotCXRzcy0+aW9fYml0bWFwX293bmVyID0gTlVMTDsKLSNlbHNlCiAJLyogVXBkYXRlIHRoZSBUU1M6ICovCiAJbWVtY3B5KHRzcy0+aW9fYml0bWFwLCB0LT5pb19iaXRtYXBfcHRyLCBieXRlc191cGRhdGVkKTsKLSNlbmRpZgogCiAJcHV0X2NwdSgpOwogCkBAIC0xMzEsOSArMTIwLDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKLWFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBsb25nIHJlZ3NwKQorbG9uZyBzeXNfaW9wbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSZyZWdzcDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWwgPSByZWdzLT5ieDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZjdXJyZW50LT50aHJlYWQ7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lwaS5jIGIvYXJjaC94ODYva2VybmVsL2lwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODViYmY4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotCi0vKgotICogdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVhbCB3aXRoIHNlbmRpbmcgSVBJcyBiZXR3ZWVuIENQVXMuCi0gKgotICogV2UgdXNlICdicm9hZGNhc3QnLCBDUFUtPkNQVSBJUElzIGFuZCBzZWxmLUlQSXMgdG9vLgotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHJlcGFyZV9JQ1IodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGludCBpY3IgPSBzaG9ydGN1dCB8IEFQSUNfREVTVF9MT0dJQ0FMOwotCi0Jc3dpdGNoICh2ZWN0b3IpIHsKLQlkZWZhdWx0OgotCQlpY3IgfD0gQVBJQ19ETV9GSVhFRCB8IHZlY3RvcjsKLQkJYnJlYWs7Ci0JY2FzZSBOTUlfVkVDVE9SOgotCQlpY3IgfD0gQVBJQ19ETV9OTUk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gaWNyOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3ByZXBhcmVfSUNSMih1bnNpZ25lZCBpbnQgbWFzaykKLXsKLQlyZXR1cm4gU0VUX0FQSUNfREVTVF9GSUVMRChtYXNrKTsKLX0KLQotdm9pZCBfX3NlbmRfSVBJX3Nob3J0Y3V0KHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvcikKLXsKLQkvKgotCSAqIFN1YnRsZS4gSW4gdGhlIGNhc2Ugb2YgdGhlICduZXZlciBkbyBkb3VibGUgd3JpdGVzJyB3b3JrYXJvdW5kCi0JICogd2UgaGF2ZSB0byBsb2NrIG91dCBpbnRlcnJ1cHRzIHRvIGJlIHNhZmUuICBBcyB3ZSBkb24ndCBjYXJlCi0JICogb2YgdGhlIHZhbHVlIHJlYWQgd2UgdXNlIGFuIGF0b21pYyBybXcgYWNjZXNzIHRvIGF2b2lkIGNvc3RseQotCSAqIGNsaS9zdGkuICBPdGhlcndpc2Ugd2UgdXNlIGFuIGV2ZW4gY2hlYXBlciBzaW5nbGUgYXRvbWljIHdyaXRlCi0JICogdG8gdGhlIEFQSUMuCi0JICovCi0JdW5zaWduZWQgaW50IGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCS8qCi0JICogTm8gbmVlZCB0byB0b3VjaCB0aGUgdGFyZ2V0IGNoaXAgZmllbGQKLQkgKi8KLQljZmcgPSBfX3ByZXBhcmVfSUNSKHNob3J0Y3V0LCB2ZWN0b3IpOwotCi0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotCi12b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQlfX3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9TRUxGLCB2ZWN0b3IpOwotfQotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIHNlbmQgYW4gSVBJIHdpdGggbm8gc2hvcnRoYW5kIG5vdGF0aW9uICh0aGUgZGVzdGluYXRpb24gaXMKLSAqIHNwZWNpZmllZCBpbiBiaXRzIDU2IHRvIDYzIG9mIHRoZSBJQ1IpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9kZXN0X2ZpZWxkKHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlpZiAodW5saWtlbHkodmVjdG9yID09IE5NSV9WRUNUT1IpKQotCQlzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOwotCWVsc2UKLQkJYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQkvKgotCSAqIHByZXBhcmUgdGFyZ2V0IGNoaXAgZmllbGQKLQkgKi8KLQljZmcgPSBfX3ByZXBhcmVfSUNSMihtYXNrKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgY2ZnKTsKLQotCS8qCi0JICogcHJvZ3JhbSB0aGUgSUNSCi0JICovCi0JY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IpOwotCi0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotCi0vKgotICogVGhpcyBpcyBvbmx5IHVzZWQgb24gc21hbGxlciBtYWNoaW5lcy4KLSAqLwotdm9pZCBzZW5kX0lQSV9tYXNrX2JpdG1hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JV0FSTl9PTihtYXNrICYgfmNwdW1hc2tfYml0cyhjcHVfb25saW5lX21hc2spWzBdKTsKLQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQobWFzaywgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBxdWVyeV9jcHU7Ci0KLQkvKgotCSAqIEhhY2suIFRoZSBjbHVzdGVyZWQgQVBJQyBhZGRyZXNzaW5nIG1vZGUgZG9lc24ndCBhbGxvdyB1cyB0byBzZW5kCi0JICogdG8gYW4gYXJiaXRyYXJ5IG1hc2ssIHNvIEkgZG8gYSB1bmljYXN0cyB0byBlYWNoIENQVSBpbnN0ZWFkLiBUaGlzCi0JICogc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGRvIDEgbWVzc2FnZSBwZXIgY2x1c3RlciBJRCAtIG1ibGlnaAotCSAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spCi0JCV9fc2VuZF9JUElfZGVzdF9maWVsZChjcHVfdG9fbG9naWNhbF9hcGljaWQocXVlcnlfY3B1KSwgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHF1ZXJ5X2NwdTsKLQl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBTZWUgSGFjayBjb21tZW50IGFib3ZlICovCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9fc2VuZF9JUElfZGVzdF9maWVsZChjcHVfdG9fbG9naWNhbF9hcGljaWQocXVlcnlfY3B1KSwKLQkJCQkJICAgICAgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qIG11c3QgY29tZSBhZnRlciB0aGUgc2VuZF9JUEkgZnVuY3Rpb25zIGFib3ZlIGZvciBpbmxpbmluZyAqLwotc3RhdGljIGludCBjb252ZXJ0X2FwaWNpZF90b19jcHUoaW50IGFwaWNfaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlpZiAocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgaSkgPT0gYXBpY19pZCkKLQkJCXJldHVybiBpOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlpbnQgYXBpY2lkLCBjcHVpZDsKLQotCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpKQotCQlyZXR1cm4gMDsKLQotCWFwaWNpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkKLQkJcmV0dXJuIDA7Ci0KLQljcHVpZCA9IGNvbnZlcnRfYXBpY2lkX3RvX2NwdShhcGljaWQpOwotCi0JcmV0dXJuIGNwdWlkID49IDAgPyBjcHVpZCA6IDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCAzOTczZTJkLi5mMTNjYTE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC02LDEwICs2LDEyIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgogCiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCkBAIC0zNiwxMSArMzgsNyBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBpcnFfc3RhdHMoeCkJCSgmcGVyX2NwdShpcnFfc3RhdCwgeCkpCi0jZWxzZQotIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQljcHVfcGRhKHgpCi0jZW5kaWYKKyNkZWZpbmUgaXJxX3N0YXRzKHgpCQkoJnBlcl9jcHUoaXJxX3N0YXQsIHgpKQogLyoKICAqIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmc6CiAgKi8KQEAgLTE5Miw0ICsxOTAsNDAgQEAKIAlyZXR1cm4gc3VtOwogfQogCisKKy8qCisgKiBkb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlEncyAodGhlIHNwZWNpYWwKKyAqIFNNUCBjcm9zcy1DUFUgaW50ZXJydXB0cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYworICogaGFuZGxlcnMpLgorICovCit1bnNpZ25lZCBpbnQgX19pcnFfZW50cnkgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCS8qIGhpZ2ggYml0IHVzZWQgaW4gcmV0X2Zyb21fIGNvZGUgICovCisJdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7CisJdW5zaWduZWQgaXJxOworCisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisKKwlpcnEgPSBfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl07CisKKwlpZiAoIWhhbmRsZV9pcnEoaXJxLCByZWdzKSkgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJaWYgKCFkaXNhYmxlX2FwaWMpCisJCQlhY2tfQVBJQ19pcnEoKTsKKyNlbmRpZgorCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICVkLiVkIE5vIGlycSBoYW5kbGVyIGZvciB2ZWN0b3IgKGlycSAlZClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdmVjdG9yLCBpcnEpOworCX0KKworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworCXJldHVybiAxOworfQorCiBFWFBPUlRfU1lNQk9MX0dQTCh2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwppbmRleCA3NGI5ZmY3Li4zYjA5NjM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogCkBAIC01NSwxMyArNTYsMTMgQEAKIHVuaW9uIGlycV9jdHggewogCXN0cnVjdCB0aHJlYWRfaW5mbyAgICAgIHRpbmZvOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIHN0YWNrW1RIUkVBRF9TSVpFL3NpemVvZih1MzIpXTsKLX07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOwogCi1zdGF0aWMgdW5pb24gaXJxX2N0eCAqaGFyZGlycV9jdHhbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKLXN0YXRpYyB1bmlvbiBpcnFfY3R4ICpzb2Z0aXJxX2N0eFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIGlycV9jdHggKiwgaGFyZGlycV9jdHgpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIGlycV9jdHggKiwgc29mdGlycV9jdHgpOwogCi1zdGF0aWMgY2hhciBzb2Z0aXJxX3N0YWNrW05SX0NQVVMgKiBUSFJFQURfU0laRV0gX19wYWdlX2FsaWduZWRfYnNzOwotc3RhdGljIGNoYXIgaGFyZGlycV9zdGFja1tOUl9DUFVTICogVEhSRUFEX1NJWkVdIF9fcGFnZV9hbGlnbmVkX2JzczsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQodW5pb24gaXJxX2N0eCwgaGFyZGlycV9zdGFjayk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHVuaW9uIGlycV9jdHgsIHNvZnRpcnFfc3RhY2spOwogCiBzdGF0aWMgdm9pZCBjYWxsX29uX3N0YWNrKHZvaWQgKmZ1bmMsIHZvaWQgKnN0YWNrKQogewpAQCAtODEsNyArODIsNyBAQAogCXUzMiAqaXNwLCBhcmcxLCBhcmcyOwogCiAJY3VyY3R4ID0gKHVuaW9uIGlycV9jdHggKikgY3VycmVudF90aHJlYWRfaW5mbygpOwotCWlycWN0eCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaXJxY3R4ID0gX19nZXRfY3B1X3ZhcihoYXJkaXJxX2N0eCk7CiAKIAkvKgogCSAqIHRoaXMgaXMgd2hlcmUgd2Ugc3dpdGNoIHRvIHRoZSBJUlEgc3RhY2suIEhvd2V2ZXIsIGlmIHdlIGFyZQpAQCAtMTI1LDM0ICsxMjYsMzQgQEAKIHsKIAl1bmlvbiBpcnFfY3R4ICppcnFjdHg7CiAKLQlpZiAoaGFyZGlycV9jdHhbY3B1XSkKKwlpZiAocGVyX2NwdShoYXJkaXJxX2N0eCwgY3B1KSkKIAkJcmV0dXJuOwogCi0JaXJxY3R4ID0gKHVuaW9uIGlycV9jdHgqKSAmaGFyZGlycV9zdGFja1tjcHUqVEhSRUFEX1NJWkVdOworCWlycWN0eCA9ICZwZXJfY3B1KGhhcmRpcnFfc3RhY2ssIGNwdSk7CiAJaXJxY3R4LT50aW5mby50YXNrCQk9IE5VTEw7CiAJaXJxY3R4LT50aW5mby5leGVjX2RvbWFpbgk9IE5VTEw7CiAJaXJxY3R4LT50aW5mby5jcHUJCT0gY3B1OwogCWlycWN0eC0+dGluZm8ucHJlZW1wdF9jb3VudAk9IEhBUkRJUlFfT0ZGU0VUOwogCWlycWN0eC0+dGluZm8uYWRkcl9saW1pdAk9IE1BS0VfTU1fU0VHKDApOwogCi0JaGFyZGlycV9jdHhbY3B1XSA9IGlycWN0eDsKKwlwZXJfY3B1KGhhcmRpcnFfY3R4LCBjcHUpID0gaXJxY3R4OwogCi0JaXJxY3R4ID0gKHVuaW9uIGlycV9jdHggKikgJnNvZnRpcnFfc3RhY2tbY3B1KlRIUkVBRF9TSVpFXTsKKwlpcnFjdHggPSAmcGVyX2NwdShzb2Z0aXJxX3N0YWNrLCBjcHUpOwogCWlycWN0eC0+dGluZm8udGFzawkJPSBOVUxMOwogCWlycWN0eC0+dGluZm8uZXhlY19kb21haW4JPSBOVUxMOwogCWlycWN0eC0+dGluZm8uY3B1CQk9IGNwdTsKIAlpcnFjdHgtPnRpbmZvLnByZWVtcHRfY291bnQJPSAwOwogCWlycWN0eC0+dGluZm8uYWRkcl9saW1pdAk9IE1BS0VfTU1fU0VHKDApOwogCi0Jc29mdGlycV9jdHhbY3B1XSA9IGlycWN0eDsKKwlwZXJfY3B1KHNvZnRpcnFfY3R4LCBjcHUpID0gaXJxY3R4OwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIkNQVSAldSBpcnFzdGFja3MsIGhhcmQ9JXAgc29mdD0lcFxuIiwKLQkgICAgICAgY3B1LCBoYXJkaXJxX2N0eFtjcHVdLCBzb2Z0aXJxX2N0eFtjcHVdKTsKKwkgICAgICAgY3B1LCBwZXJfY3B1KGhhcmRpcnFfY3R4LCBjcHUpLCAgcGVyX2NwdShzb2Z0aXJxX2N0eCwgY3B1KSk7CiB9CiAKIHZvaWQgaXJxX2N0eF9leGl0KGludCBjcHUpCiB7Ci0JaGFyZGlycV9jdHhbY3B1XSA9IE5VTEw7CisJcGVyX2NwdShoYXJkaXJxX2N0eCwgY3B1KSA9IE5VTEw7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19zb2Z0aXJxKHZvaWQpCkBAIC0xNjksNyArMTcwLDcgQEAKIAogCWlmIChsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkgewogCQljdXJjdHggPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0JCWlycWN0eCA9IHNvZnRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJCWlycWN0eCA9IF9fZ2V0X2NwdV92YXIoc29mdGlycV9jdHgpOwogCQlpcnFjdHgtPnRpbmZvLnRhc2sgPSBjdXJjdHgtPnRhc2s7CiAJCWlycWN0eC0+dGluZm8ucHJldmlvdXNfZXNwID0gY3VycmVudF9zdGFja19wb2ludGVyOwogCkBAIC0xOTEsMzMgKzE5MiwxNiBAQAogZXhlY3V0ZV9vbl9pcnFfc3RhY2soaW50IG92ZXJmbG93LCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBpcnEpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCi0vKgotICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCi0gKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKLSAqIGhhbmRsZXJzKS4KLSAqLwotdW5zaWduZWQgaW50IGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2Jvb2wgaGFuZGxlX2lycSh1bnNpZ25lZCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKLQkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICovCi0JaW50IG92ZXJmbG93OwotCXVuc2lnbmVkIHZlY3RvciA9IH5yZWdzLT5vcmlnX2F4OwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQl1bnNpZ25lZCBpcnE7Ci0KLQotCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCWlycV9lbnRlcigpOwotCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKwlpbnQgb3ZlcmZsb3c7CiAKIAlvdmVyZmxvdyA9IGNoZWNrX3N0YWNrX292ZXJmbG93KCk7CiAKIAlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlpZiAodW5saWtlbHkoIWRlc2MpKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICIlczogY2Fubm90IGhhbmRsZSBJUlEgJWQgdmVjdG9yICUjeCBjcHUgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCBpcnEsIHZlY3Rvciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJQlVHKCk7Ci0JfQorCWlmICh1bmxpa2VseSghZGVzYykpCisJCXJldHVybiBmYWxzZTsKIAogCWlmICghZXhlY3V0ZV9vbl9pcnFfc3RhY2sob3ZlcmZsb3csIGRlc2MsIGlycSkpIHsKIAkJaWYgKHVubGlrZWx5KG92ZXJmbG93KSkKQEAgLTIyNSwxMyArMjA5LDEwIEBACiAJCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKIAl9CiAKLQlpcnFfZXhpdCgpOwotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KIAogLyogQSBjcHUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNwdV9vbmxpbmVfbWFzay4gIFJlc2V0IGlycSBhZmZpbml0aWVzLiAqLwogdm9pZCBmaXh1cF9pcnFzKHZvaWQpCkBAIC0yNDgsNyArMjI5LDcgQEAKIAkJaWYgKGlycSA9PSAyKQogCQkJY29udGludWU7CiAKLQkJYWZmaW5pdHkgPSAmZGVzYy0+YWZmaW5pdHk7CisJCWFmZmluaXR5ID0gZGVzYy0+YWZmaW5pdHk7CiAJCWlmIChjcHVtYXNrX2FueV9hbmQoYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykgPj0gbnJfY3B1X2lkcykgewogCQkJcHJpbnRrKCJCcmVha2luZyBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCQkJYWZmaW5pdHkgPSBjcHVfYWxsX21hc2s7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKaW5kZXggNjNjODhlNi4uOTc3ZDhiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYwpAQCAtMTgsNiArMTgsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKworREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoaXJxX2NwdXN0YXRfdCwgaXJxX3N0YXQpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9zdGF0KTsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MgKiwgaXJxX3JlZ3MpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9yZWdzKTsKIAogLyoKICAqIFByb2JhYmlsaXN0aWMgc3RhY2sgb3ZlcmZsb3cgY2hlY2s6CkBAIC00MSw0MiArNDgsMTggQEAKICNlbmRpZgogfQogCi0vKgotICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCi0gKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKLSAqIGhhbmRsZXJzKS4KLSAqLwotYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgX19pcnFfZW50cnkgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYm9vbCBoYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAotCS8qIGhpZ2ggYml0IHVzZWQgaW4gcmV0X2Zyb21fIGNvZGUgICovCi0JdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7Ci0JdW5zaWduZWQgaXJxOwotCi0JZXhpdF9pZGxlKCk7Ci0JaXJxX2VudGVyKCk7Ci0JaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwotCiAJc3RhY2tfb3ZlcmZsb3dfY2hlY2socmVncyk7CiAKIAlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlpZiAobGlrZWx5KGRlc2MpKQotCQlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGRlc2MpOwotCWVsc2UgewotCQlpZiAoIWRpc2FibGVfYXBpYykKLQkJCWFja19BUElDX2lycSgpOworCWlmICh1bmxpa2VseSghZGVzYykpCisJCXJldHVybiBmYWxzZTsKIAotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlZC4lZCBObyBpcnEgaGFuZGxlciBmb3IgdmVjdG9yXG4iLAotCQkJCV9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIHZlY3Rvcik7Ci0JfQotCi0JaXJxX2V4aXQoKTsKLQotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci0JcmV0dXJuIDE7CisJZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtMTAwLDcgKzgzLDcgQEAKIAkJLyogaW50ZXJydXB0J3MgYXJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnQgKi8KIAkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAotCQlhZmZpbml0eSA9ICZkZXNjLT5hZmZpbml0eTsKKwkJYWZmaW5pdHkgPSBkZXNjLT5hZmZpbml0eTsKIAkJaWYgKCFpcnFfaGFzX2FjdGlvbihpcnEpIHx8CiAJCSAgICBjcHVtYXNrX2VxdWFsKGFmZmluaXR5LCBjcHVfb25saW5lX21hc2spKSB7CiAJCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwppbmRleCAxMGEwOWMyLi41MGI4YzNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCkBAIC03OCw2ICs3OCwxNSBAQAogCX0KIH0KIAorLyoKKyAqIElSUTIgaXMgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gc2Vjb25kIGludGVycnVwdCBjb250cm9sbGVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTIgPSB7CisJLmhhbmRsZXIgPSBub19hY3Rpb24sCisJLm1hc2sgPSBDUFVfTUFTS19OT05FLAorCS5uYW1lID0gImNhc2NhZGUiLAorfTsKKwogREVGSU5FX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKSA9IHsKIAlbMCAuLi4gSVJRMF9WRUNUT1IgLSAxXSA9IC0xLAogCVtJUlEwX1ZFQ1RPUl0gPSAwLApAQCAtMTE4LDggKzEyNyw4IEBACiB7CiAJaW50IGk7CiAKLQkvKiBhbGwgdGhlIHNldCB1cCBiZWZvcmUgdGhlIGNhbGwgZ2F0ZXMgYXJlIGluaXRpYWxpc2VkICovCi0JcHJlX2ludHJfaW5pdF9ob29rKCk7CisJLyogRXhlY3V0ZSBhbnkgcXVpcmtzIGJlZm9yZSB0aGUgY2FsbCBnYXRlcyBhcmUgaW5pdGlhbGlzZWQ6ICovCisJeDg2X3F1aXJrX3ByZV9pbnRyX2luaXQoKTsKIAogCS8qCiAJICogQ292ZXIgdGhlIHdob2xlIHZlY3RvciBzcGFjZSwgbm8gdmVjdG9yIGNhbiBlc2NhcGUKQEAgLTE0MCw4ICsxNDksMTUgQEAKIAkgKi8KIAlhbGxvY19pbnRyX2dhdGUoUkVTQ0hFRFVMRV9WRUNUT1IsIHJlc2NoZWR1bGVfaW50ZXJydXB0KTsKIAotCS8qIElQSSBmb3IgaW52YWxpZGF0aW9uICovCi0JYWxsb2NfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUiwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQpOworCS8qIElQSXMgZm9yIGludmFsaWRhdGlvbiAqLworCWFsbG9jX2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMCwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQwKTsKKwlhbGxvY19pbnRyX2dhdGUoSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzEsIGludmFsaWRhdGVfaW50ZXJydXB0MSk7CisJYWxsb2NfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCsyLCBpbnZhbGlkYXRlX2ludGVycnVwdDIpOworCWFsbG9jX2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMywgaW52YWxpZGF0ZV9pbnRlcnJ1cHQzKTsKKwlhbGxvY19pbnRyX2dhdGUoSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzQsIGludmFsaWRhdGVfaW50ZXJydXB0NCk7CisJYWxsb2NfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCs1LCBpbnZhbGlkYXRlX2ludGVycnVwdDUpOworCWFsbG9jX2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrNiwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQ2KTsKKwlhbGxvY19pbnRyX2dhdGUoSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzcsIGludmFsaWRhdGVfaW50ZXJydXB0Nyk7CiAKIAkvKiBJUEkgZm9yIGdlbmVyaWMgZnVuY3Rpb24gY2FsbCAqLwogCWFsbG9jX2ludHJfZ2F0ZShDQUxMX0ZVTkNUSU9OX1ZFQ1RPUiwgY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQpOwpAQCAtMTY5LDEwICsxODUsMTQgQEAKIAlhbGxvY19pbnRyX2dhdGUoVEhFUk1BTF9BUElDX1ZFQ1RPUiwgdGhlcm1hbF9pbnRlcnJ1cHQpOwogI2VuZGlmCiAKLQkvKiBzZXR1cCBhZnRlciBjYWxsIGdhdGVzIGFyZSBpbml0aWFsaXNlZCAodXN1YWxseSBhZGQgaW4KLQkgKiB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGdhdGVzKQorCWlmICghYWNwaV9pb2FwaWMpCisJCXNldHVwX2lycSgyLCAmaXJxMik7CisKKwkvKgorCSAqIENhbGwgcXVpcmtzIGFmdGVyIGNhbGwgZ2F0ZXMgYXJlIGluaXRpYWxpc2VkICh1c3VhbGx5IGFkZCBpbgorCSAqIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZ2F0ZXMpOgogCSAqLwotCWludHJfaW5pdF9ob29rKCk7CisJeDg2X3F1aXJrX2ludHJfaW5pdCgpOwogCiAJLyoKIAkgKiBFeHRlcm5hbCBGUFU/IFNldCB1cCBpcnExMyBpZiBzbywgZm9yCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYwppbmRleCAxMDQzNWExLi5lZWRmYWViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPG1hY2hfaXBpLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAogLyoKICAqIFB1dCB0aGUgZXJyb3IgY29kZSBoZXJlIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBjYXJlczoKQEAgLTM0Nyw3ICszNDcsNyBAQAogICovCiB2b2lkIGtnZGJfcm91bmR1cF9jcHVzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc2VuZF9JUElfYWxsYnV0c2VsZihBUElDX0RNX05NSSk7CisJYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZihBUElDX0RNX05NSSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYwppbmRleCA2NTJmY2U2ZC4uMTM3ZjJlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9wYXJhLmg+CiAjaW5jbHVkZSA8YXNtL3B2Y2xvY2suaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKaW5kZXggMzdmNDIwMC4uZjVmYzhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIHN0YXRpYyB2b2lkIG1hY2hpbmVfa2V4ZWNfcHJlcGFyZV9wYWdlX3RhYmxlcyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKIAl2b2lkICpjb250cm9sX3BhZ2U7Ci0JcG1kX3QgKnBtZCA9IDA7CisJcG1kX3QgKnBtZCA9IE5VTEw7CiAKIAljb250cm9sX3BhZ2UgPSBwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKTsKICNpZmRlZiBDT05GSUdfWDg2X1BBRQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKaW5kZXggYzQzY2FhMy4uNjk5M2Q1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCkBAIC0xOCwxNSArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jZGVmaW5lIFBBR0VfQUxJR05FRCBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oUEFHRV9TSVpFKSkpCi1zdGF0aWMgdTY0IGtleGVjX3BnZFs1MTJdIFBBR0VfQUxJR05FRDsKLXN0YXRpYyB1NjQga2V4ZWNfcHVkMFs1MTJdIFBBR0VfQUxJR05FRDsKLXN0YXRpYyB1NjQga2V4ZWNfcG1kMFs1MTJdIFBBR0VfQUxJR05FRDsKLXN0YXRpYyB1NjQga2V4ZWNfcHRlMFs1MTJdIFBBR0VfQUxJR05FRDsKLXN0YXRpYyB1NjQga2V4ZWNfcHVkMVs1MTJdIFBBR0VfQUxJR05FRDsKLXN0YXRpYyB1NjQga2V4ZWNfcG1kMVs1MTJdIFBBR0VfQUxJR05FRDsKLXN0YXRpYyB1NjQga2V4ZWNfcHRlMVs1MTJdIFBBR0VfQUxJR05FRDsKLQogc3RhdGljIHZvaWQgaW5pdF9sZXZlbDJfcGFnZShwbWRfdCAqbGV2ZWwycCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHI7CkBAIC0xMDcsMTIgKzk4LDY1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV90cmFuc2l0aW9uX3BndGFibGUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWltYWdlLT5hcmNoLnB1ZCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWltYWdlLT5hcmNoLnBtZCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWltYWdlLT5hcmNoLnB0ZSk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF90cmFuc2l0aW9uX3BndGFibGUoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHBnZF90ICpwZ2QpCit7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisJdW5zaWduZWQgbG9uZyB2YWRkciwgcGFkZHI7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXJlbG9jYXRlX2tlcm5lbDsKKwlwYWRkciA9IF9fcGEocGFnZV9hZGRyZXNzKGltYWdlLT5jb250cm9sX2NvZGVfcGFnZSkrUEFHRV9TSVpFKTsKKwlwZ2QgKz0gcGdkX2luZGV4KHZhZGRyKTsKKwlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7CisJCXB1ZCA9IChwdWRfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFwdWQpCisJCQlnb3RvIGVycjsKKwkJaW1hZ2UtPmFyY2gucHVkID0gcHVkOworCQlzZXRfcGdkKHBnZCwgX19wZ2QoX19wYShwdWQpIHwgX0tFUk5QR19UQUJMRSkpOworCX0KKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgdmFkZHIpOworCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJcG1kID0gKHBtZF90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIXBtZCkKKwkJCWdvdG8gZXJyOworCQlpbWFnZS0+YXJjaC5wbWQgPSBwbWQ7CisJCXNldF9wdWQocHVkLCBfX3B1ZChfX3BhKHBtZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJfQorCXBtZCA9IHBtZF9vZmZzZXQocHVkLCB2YWRkcik7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkgeworCQlwdGUgPSAocHRlX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghcHRlKQorCQkJZ290byBlcnI7CisJCWltYWdlLT5hcmNoLnB0ZSA9IHB0ZTsKKwkJc2V0X3BtZChwbWQsIF9fcG1kKF9fcGEocHRlKSB8IF9LRVJOUEdfVEFCTEUpKTsKKwl9CisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCB2YWRkcik7CisJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGFkZHIgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUxfRVhFQykpOworCXJldHVybiAwOworZXJyOgorCWZyZWVfdHJhbnNpdGlvbl9wZ3RhYmxlKGltYWdlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiAKIHN0YXRpYyBpbnQgaW5pdF9wZ3RhYmxlKHN0cnVjdCBraW1hZ2UgKmltYWdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BndGFibGUpCiB7CiAJcGdkX3QgKmxldmVsNHA7CisJaW50IHJlc3VsdDsKIAlsZXZlbDRwID0gKHBnZF90ICopX192YShzdGFydF9wZ3RhYmxlKTsKLQlyZXR1cm4gaW5pdF9sZXZlbDRfcGFnZShpbWFnZSwgbGV2ZWw0cCwgMCwgbWF4X3BmbiA8PCBQQUdFX1NISUZUKTsKKwlyZXN1bHQgPSBpbml0X2xldmVsNF9wYWdlKGltYWdlLCBsZXZlbDRwLCAwLCBtYXhfcGZuIDw8IFBBR0VfU0hJRlQpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIGluaXRfdHJhbnNpdGlvbl9wZ3RhYmxlKGltYWdlLCBsZXZlbDRwKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2lkdCh2b2lkICpuZXdpZHQsIHUxNiBsaW1pdCkKQEAgLTE3NCw3ICsyMTgsNyBAQAogCiB2b2lkIG1hY2hpbmVfa2V4ZWNfY2xlYW51cChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKLQlyZXR1cm47CisJZnJlZV90cmFuc2l0aW9uX3BndGFibGUoaW1hZ2UpOwogfQogCiAvKgpAQCAtMTk1LDIyICsyMzksNiBAQAogCW1lbWNweShjb250cm9sX3BhZ2UsIHJlbG9jYXRlX2tlcm5lbCwgUEFHRV9TSVpFKTsKIAogCXBhZ2VfbGlzdFtQQV9DT05UUk9MX1BBR0VdID0gdmlydF90b19waHlzKGNvbnRyb2xfcGFnZSk7Ci0JcGFnZV9saXN0W1ZBX0NPTlRST0xfUEFHRV0gPSAodW5zaWduZWQgbG9uZylyZWxvY2F0ZV9rZXJuZWw7Ci0JcGFnZV9saXN0W1BBX1BHRF0gPSB2aXJ0X3RvX3BoeXMoJmtleGVjX3BnZCk7Ci0JcGFnZV9saXN0W1ZBX1BHRF0gPSAodW5zaWduZWQgbG9uZylrZXhlY19wZ2Q7Ci0JcGFnZV9saXN0W1BBX1BVRF8wXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcHVkMCk7Ci0JcGFnZV9saXN0W1ZBX1BVRF8wXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3B1ZDA7Ci0JcGFnZV9saXN0W1BBX1BNRF8wXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcG1kMCk7Ci0JcGFnZV9saXN0W1ZBX1BNRF8wXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3BtZDA7Ci0JcGFnZV9saXN0W1BBX1BURV8wXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcHRlMCk7Ci0JcGFnZV9saXN0W1ZBX1BURV8wXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3B0ZTA7Ci0JcGFnZV9saXN0W1BBX1BVRF8xXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcHVkMSk7Ci0JcGFnZV9saXN0W1ZBX1BVRF8xXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3B1ZDE7Ci0JcGFnZV9saXN0W1BBX1BNRF8xXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcG1kMSk7Ci0JcGFnZV9saXN0W1ZBX1BNRF8xXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3BtZDE7Ci0JcGFnZV9saXN0W1BBX1BURV8xXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcHRlMSk7Ci0JcGFnZV9saXN0W1ZBX1BURV8xXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3B0ZTE7Ci0KIAlwYWdlX2xpc3RbUEFfVEFCTEVfUEFHRV0gPQogCSAgKHVuc2lnbmVkIGxvbmcpX19wYShwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tY2FfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9tY2FfMzIuYwppbmRleCAyZGMxODM3Li44NDVkODBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWNhXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21jYV8zMi5jCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2hpY2hfc2NzaTsKIApAQCAtNDc0LDYgKzQ3Myw0IEBACiAJICogYWRhcHRlciB3YXMgcmVzcG9uc2libGUgZm9yIHRoZSBlcnJvci4KIAkgKi8KIAlidXNfZm9yX2VhY2hfZGV2KCZtY2FfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIG1jYV9oYW5kbGVfbm1pX2NhbGxiYWNrKTsKLQotCW1jYV9ubWlfaG9vaygpOwotfSAvKiBtY2FfaGFuZGxlX25taSAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCmluZGV4IGI3ZjRjOTIuLjVlOWY0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKQEAgLTg3LDkgKzg3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWljcm9jb2RlLmg+CiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXJldHVybiAoIXNpZ21hdGNoKHNpZywgY3NpZy0+c2lnLCBwZiwgY3NpZy0+cGYpKSA/IDAgOiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCAKK3N0YXRpYyBpbmxpbmUgaW50CiB1cGRhdGVfbWF0Y2hfcmV2aXNpb24oc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfaW50ZWwgKm1jX2hlYWRlciwJaW50IHJldikKIHsKIAlyZXR1cm4gKG1jX2hlYWRlci0+cmV2IDw9IHJldikgPyAwIDogMTsKQEAgLTQ0Miw4ICs0NDIsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGdlbmVyaWNfbG9hZF9taWNyb2NvZGUoY3B1LCAodm9pZCopZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplLAotCQkJJmdldF91Y29kZV9mdyk7CisJcmV0ID0gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsICh2b2lkICopZmlybXdhcmUtPmRhdGEsCisJCQkJICAgICBmaXJtd2FyZS0+c2l6ZSwgJmdldF91Y29kZV9mdyk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKIApAQCAtNDYwLDcgKzQ2MCw3IEBACiAJLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLwogCUJVR19PTihjcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlyZXR1cm4gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsICh2b2lkKilidWYsIHNpemUsICZnZXRfdWNvZGVfdXNlcik7CisJcmV0dXJuIGdlbmVyaWNfbG9hZF9taWNyb2NvZGUoY3B1LCAodm9pZCAqKWJ1Ziwgc2l6ZSwgJmdldF91Y29kZV91c2VyKTsKIH0KIAogc3RhdGljIHZvaWQgbWljcm9jb2RlX2ZpbmlfY3B1KGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlXzMyLmMKaW5kZXggM2RiMGE1NDQuLjBlZGQ4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlXzMyLmMKQEAgLTQyLDcgKzQyLDcgQEAKIHsKIAl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKIAkvKiBGSVhNRTogSWYgbW9kdWxlX3JlZ2lvbiA9PSBtb2QtPmluaXRfcmVnaW9uLCB0cmltIGV4Y2VwdGlvbgotICAgICAgICAgICB0YWJsZSBlbnRyaWVzLiAqLworCSAgIHRhYmxlIGVudHJpZXMuICovCiB9CiAKIC8qIFdlIGRvbid0IG5lZWQgYW55dGhpbmcgc3BlY2lhbC4gKi8KQEAgLTExMywxMyArMTEzLDEzIEBACiAJCSpwYXJhID0gTlVMTDsKIAljaGFyICpzZWNzdHJpbmdzID0gKHZvaWQgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OwogCi0JZm9yIChzID0gc2VjaGRyczsgcyA8IHNlY2hkcnMgKyBoZHItPmVfc2hudW07IHMrKykgeyAKKwlmb3IgKHMgPSBzZWNoZHJzOyBzIDwgc2VjaGRycyArIGhkci0+ZV9zaG51bTsgcysrKSB7CiAJCWlmICghc3RyY21wKCIudGV4dCIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKIAkJCXRleHQgPSBzOwogCQlpZiAoIXN0cmNtcCgiLmFsdGluc3RydWN0aW9ucyIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKIAkJCWFsdCA9IHM7CiAJCWlmICghc3RyY21wKCIuc21wX2xvY2tzIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQotCQkJbG9ja3M9IHM7CisJCQlsb2NrcyA9IHM7CiAJCWlmICghc3RyY21wKCIucGFyYWluc3RydWN0aW9ucyIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKIAkJCXBhcmEgPSBzOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA2YmE4NzgzLi5jMjM4ODBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21vZHVsZV82NC5jCkBAIC0zMCwxNCArMzAsMTQgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLSNkZWZpbmUgREVCVUdQKGZtdC4uLikgCisjZGVmaW5lIERFQlVHUChmbXQuLi4pCiAKICNpZm5kZWYgQ09ORklHX1VNTAogdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7CiAJdmZyZWUobW9kdWxlX3JlZ2lvbik7CiAJLyogRklYTUU6IElmIG1vZHVsZV9yZWdpb24gPT0gbW9kLT5pbml0X3JlZ2lvbiwgdHJpbSBleGNlcHRpb24KLSAgICAgICAgICAgdGFibGUgZW50cmllcy4gKi8KKwkgICB0YWJsZSBlbnRyaWVzLiAqLwogfQogCiB2b2lkICptb2R1bGVfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQpAQCAtNzcsNyArNzcsNyBAQAogCUVsZjY0X1JlbGEgKnJlbCA9ICh2b2lkICopc2VjaGRyc1tyZWxzZWNdLnNoX2FkZHI7CiAJRWxmNjRfU3ltICpzeW07CiAJdm9pZCAqbG9jOwotCXU2NCB2YWw7IAorCXU2NCB2YWw7CiAKIAlERUJVR1AoIkFwcGx5aW5nIHJlbG9jYXRlIHNlY3Rpb24gJXUgdG8gJXVcbiIsIHJlbHNlYywKIAkgICAgICAgc2VjaGRyc1tyZWxzZWNdLnNoX2luZm8pOwpAQCAtOTEsMTEgKzkxLDExIEBACiAJCXN5bSA9IChFbGY2NF9TeW0gKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyCiAJCQkrIEVMRjY0X1JfU1lNKHJlbFtpXS5yX2luZm8pOwogCi0JICAgICAgICBERUJVR1AoInR5cGUgJWQgc3RfdmFsdWUgJUx4IHJfYWRkZW5kICVMeCBsb2MgJUx4XG4iLAotCQkgICAgICAgKGludClFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbyksIAotCQkgICAgICAgc3ltLT5zdF92YWx1ZSwgcmVsW2ldLnJfYWRkZW5kLCAodTY0KWxvYyk7CisJCURFQlVHUCgidHlwZSAlZCBzdF92YWx1ZSAlTHggcl9hZGRlbmQgJUx4IGxvYyAlTHhcbiIsCisJCQkoaW50KUVMRjY0X1JfVFlQRShyZWxbaV0ucl9pbmZvKSwKKwkJCXN5bS0+c3RfdmFsdWUsIHJlbFtpXS5yX2FkZGVuZCwgKHU2NClsb2MpOwogCi0JCXZhbCA9IHN5bS0+c3RfdmFsdWUgKyByZWxbaV0ucl9hZGRlbmQ7IAorCQl2YWwgPSBzeW0tPnN0X3ZhbHVlICsgcmVsW2ldLnJfYWRkZW5kOwogCiAJCXN3aXRjaCAoRUxGNjRfUl9UWVBFKHJlbFtpXS5yX2luZm8pKSB7CiAJCWNhc2UgUl9YODZfNjRfTk9ORToKQEAgLTExMywxNiArMTEzLDE2IEBACiAJCQlpZiAoKHM2NCl2YWwgIT0gKihzMzIgKilsb2MpCiAJCQkJZ290byBvdmVyZmxvdzsKIAkJCWJyZWFrOwotCQljYXNlIFJfWDg2XzY0X1BDMzI6IAorCQljYXNlIFJfWDg2XzY0X1BDMzI6CiAJCQl2YWwgLT0gKHU2NClsb2M7CiAJCQkqKHUzMiAqKWxvYyA9IHZhbDsKICNpZiAwCiAJCQlpZiAoKHM2NCl2YWwgIT0gKihzMzIgKilsb2MpCi0JCQkJZ290byBvdmVyZmxvdzsgCisJCQkJZ290byBvdmVyZmxvdzsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgIm1vZHVsZSAlczogVW5rbm93biByZWxhIHJlbG9jYXRpb246ICVMdVxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBVbmtub3duIHJlbGEgcmVsb2NhdGlvbjogJWxsdVxuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwgRUxGNjRfUl9UWVBFKHJlbFtpXS5yX2luZm8pKTsKIAkJCXJldHVybiAtRU5PRVhFQzsKIAkJfQpAQCAtMTMwLDcgKzEzMCw3IEBACiAJcmV0dXJuIDA7CiAKIG92ZXJmbG93OgotCXByaW50ayhLRVJOX0VSUiAib3ZlcmZsb3cgaW4gcmVsb2NhdGlvbiB0eXBlICVkIHZhbCAlTHhcbiIsIAorCXByaW50ayhLRVJOX0VSUiAib3ZlcmZsb3cgaW4gcmVsb2NhdGlvbiB0eXBlICVkIHZhbCAlTHhcbiIsCiAJICAgICAgIChpbnQpRUxGNjRfUl9UWVBFKHJlbFtpXS5yX2luZm8pLCB2YWwpOwogCXByaW50ayhLRVJOX0VSUiAiYCVzJyBsaWtlbHkgbm90IGNvbXBpbGVkIHdpdGggLW1jbW9kZWw9a2VybmVsXG4iLAogCSAgICAgICBtZS0+bmFtZSk7CkBAIC0xNDMsMTMgKzE0MywxMyBAQAogCQkgICB1bnNpZ25lZCBpbnQgcmVsc2VjLAogCQkgICBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKLQlwcmludGsoIm5vbiBhZGQgcmVsb2NhdGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIm5vbiBhZGQgcmVsb2NhdGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKIAlyZXR1cm4gLUVOT1NZUzsKLX0gCit9CiAKIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtb2R1bGUgKm1lKQorCQkgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKIAljb25zdCBFbGZfU2hkciAqcywgKnRleHQgPSBOVUxMLCAqYWx0ID0gTlVMTCwgKmxvY2tzID0gTlVMTCwKIAkJKnBhcmEgPSBOVUxMOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJCWlmICghc3RyY21wKCIuYWx0aW5zdHJ1Y3Rpb25zIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQogCQkJYWx0ID0gczsKIAkJaWYgKCFzdHJjbXAoIi5zbXBfbG9ja3MiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkpCi0JCQlsb2Nrcz0gczsKKwkJCWxvY2tzID0gczsKIAkJaWYgKCFzdHJjbXAoIi5wYXJhaW5zdHJ1Y3Rpb25zIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQogCQkJcGFyYSA9IHM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggYTY0OWE0Yy4uMzdjYjFiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0zLDcgKzMsNyBAQAogICoJY29tcGxpYW50IE1QLXRhYmxlIHBhcnNpbmcgcm91dGluZXMuCiAgKgogICoJKGMpIDE5OTUgQWxhbiBDb3gsIEJ1aWxkaW5nICMzIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+Ci0gKgkoYykgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCShjKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICogICAgICAoYykgMjAwOCBBbGV4ZXkgU3Rhcmlrb3Zza2l5IDxhc3Rhcmlrb3Zza2l5QHN1c2UuZGU+CiAgKi8KIApAQCAtMjksMTIgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bWFjaF9tcHBhcnNlLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAvKgogICogQ2hlY2tzdW0gYW4gTVAgY29uZmlndXJhdGlvbiBibG9jay4KICAqLwpAQCAtMTQ0LDExICsxMzksMTEgQEAKIAlpZiAoYmFkX2lvYXBpYyhtLT5hcGljYWRkcikpCiAJCXJldHVybjsKIAotCW1wX2lvYXBpY3NbbnJfaW9hcGljc10ubXBfYXBpY2FkZHIgPSBtLT5hcGljYWRkcjsKLQltcF9pb2FwaWNzW25yX2lvYXBpY3NdLm1wX2FwaWNpZCA9IG0tPmFwaWNpZDsKLQltcF9pb2FwaWNzW25yX2lvYXBpY3NdLm1wX3R5cGUgPSBtLT50eXBlOwotCW1wX2lvYXBpY3NbbnJfaW9hcGljc10ubXBfYXBpY3ZlciA9IG0tPmFwaWN2ZXI7Ci0JbXBfaW9hcGljc1tucl9pb2FwaWNzXS5tcF9mbGFncyA9IG0tPmZsYWdzOworCW1wX2lvYXBpY3NbbnJfaW9hcGljc10uYXBpY2FkZHIgPSBtLT5hcGljYWRkcjsKKwltcF9pb2FwaWNzW25yX2lvYXBpY3NdLmFwaWNpZCA9IG0tPmFwaWNpZDsKKwltcF9pb2FwaWNzW25yX2lvYXBpY3NdLnR5cGUgPSBtLT50eXBlOworCW1wX2lvYXBpY3NbbnJfaW9hcGljc10uYXBpY3ZlciA9IG0tPmFwaWN2ZXI7CisJbXBfaW9hcGljc1tucl9pb2FwaWNzXS5mbGFncyA9IG0tPmZsYWdzOwogCW5yX2lvYXBpY3MrKzsKIH0KIApAQCAtMTYwLDU1ICsxNTUsNTUgQEAKIAkJbS0+c3JjYnVzaXJxLCBtLT5kc3RhcGljLCBtLT5kc3RpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfbXBfaXJxX2luZm8oc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgKm1wX2lycSkKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmludF9tcF9pcnFfaW5mbyhzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQogewogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJTAyeCwiCiAJCSIgSVJRICUwMngsIEFQSUMgSUQgJXgsIEFQSUMgSU5UICUwMnhcbiIsCi0JCW1wX2lycS0+bXBfaXJxdHlwZSwgbXBfaXJxLT5tcF9pcnFmbGFnICYgMywKLQkJKG1wX2lycS0+bXBfaXJxZmxhZyA+PiAyKSAmIDMsIG1wX2lycS0+bXBfc3JjYnVzLAotCQltcF9pcnEtPm1wX3NyY2J1c2lycSwgbXBfaXJxLT5tcF9kc3RhcGljLCBtcF9pcnEtPm1wX2RzdGlycSk7CisJCW1wX2lycS0+aXJxdHlwZSwgbXBfaXJxLT5pcnFmbGFnICYgMywKKwkJKG1wX2lycS0+aXJxZmxhZyA+PiAyKSAmIDMsIG1wX2lycS0+c3JjYnVzLAorCQltcF9pcnEtPnNyY2J1c2lycSwgbXBfaXJxLT5kc3RhcGljLCBtcF9pcnEtPmRzdGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptLAotCQkJCSAgICBzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqbXBfaXJxKQorCQkJCSAgICBzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQogewotCW1wX2lycS0+bXBfZHN0YXBpYyA9IG0tPmRzdGFwaWM7Ci0JbXBfaXJxLT5tcF90eXBlID0gbS0+dHlwZTsKLQltcF9pcnEtPm1wX2lycXR5cGUgPSBtLT5pcnF0eXBlOwotCW1wX2lycS0+bXBfaXJxZmxhZyA9IG0tPmlycWZsYWc7Ci0JbXBfaXJxLT5tcF9zcmNidXMgPSBtLT5zcmNidXM7Ci0JbXBfaXJxLT5tcF9zcmNidXNpcnEgPSBtLT5zcmNidXNpcnE7Ci0JbXBfaXJxLT5tcF9kc3RpcnEgPSBtLT5kc3RpcnE7CisJbXBfaXJxLT5kc3RhcGljID0gbS0+ZHN0YXBpYzsKKwltcF9pcnEtPnR5cGUgPSBtLT50eXBlOworCW1wX2lycS0+aXJxdHlwZSA9IG0tPmlycXR5cGU7CisJbXBfaXJxLT5pcnFmbGFnID0gbS0+aXJxZmxhZzsKKwltcF9pcnEtPnNyY2J1cyA9IG0tPnNyY2J1czsKKwltcF9pcnEtPnNyY2J1c2lycSA9IG0tPnNyY2J1c2lycTsKKwltcF9pcnEtPmRzdGlycSA9IG0tPmRzdGlycTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl90b19tcGNfaW50c3JjKHN0cnVjdCBtcF9jb25maWdfaW50c3JjICptcF9pcnEsCitzdGF0aWMgdm9pZCBfX2luaXQgYXNzaWduX3RvX21wY19pbnRzcmMoc3RydWN0IG1wY19pbnRzcmMgKm1wX2lycSwKIAkJCQkJc3RydWN0IG1wY19pbnRzcmMgKm0pCiB7Ci0JbS0+ZHN0YXBpYyA9IG1wX2lycS0+bXBfZHN0YXBpYzsKLQltLT50eXBlID0gbXBfaXJxLT5tcF90eXBlOwotCW0tPmlycXR5cGUgPSBtcF9pcnEtPm1wX2lycXR5cGU7Ci0JbS0+aXJxZmxhZyA9IG1wX2lycS0+bXBfaXJxZmxhZzsKLQltLT5zcmNidXMgPSBtcF9pcnEtPm1wX3NyY2J1czsKLQltLT5zcmNidXNpcnEgPSBtcF9pcnEtPm1wX3NyY2J1c2lycTsKLQltLT5kc3RpcnEgPSBtcF9pcnEtPm1wX2RzdGlycTsKKwltLT5kc3RhcGljID0gbXBfaXJxLT5kc3RhcGljOworCW0tPnR5cGUgPSBtcF9pcnEtPnR5cGU7CisJbS0+aXJxdHlwZSA9IG1wX2lycS0+aXJxdHlwZTsKKwltLT5pcnFmbGFnID0gbXBfaXJxLT5pcnFmbGFnOworCW0tPnNyY2J1cyA9IG1wX2lycS0+c3JjYnVzOworCW0tPnNyY2J1c2lycSA9IG1wX2lycS0+c3JjYnVzaXJxOworCW0tPmRzdGlycSA9IG1wX2lycS0+ZHN0aXJxOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtcF9pcnFfbXBjX2ludHNyY19jbXAoc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgKm1wX2lycSwKK3N0YXRpYyBpbnQgX19pbml0IG1wX2lycV9tcGNfaW50c3JjX2NtcChzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxLAogCQkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKIHsKLQlpZiAobXBfaXJxLT5tcF9kc3RhcGljICE9IG0tPmRzdGFwaWMpCisJaWYgKG1wX2lycS0+ZHN0YXBpYyAhPSBtLT5kc3RhcGljKQogCQlyZXR1cm4gMTsKLQlpZiAobXBfaXJxLT5tcF90eXBlICE9IG0tPnR5cGUpCisJaWYgKG1wX2lycS0+dHlwZSAhPSBtLT50eXBlKQogCQlyZXR1cm4gMjsKLQlpZiAobXBfaXJxLT5tcF9pcnF0eXBlICE9IG0tPmlycXR5cGUpCisJaWYgKG1wX2lycS0+aXJxdHlwZSAhPSBtLT5pcnF0eXBlKQogCQlyZXR1cm4gMzsKLQlpZiAobXBfaXJxLT5tcF9pcnFmbGFnICE9IG0tPmlycWZsYWcpCisJaWYgKG1wX2lycS0+aXJxZmxhZyAhPSBtLT5pcnFmbGFnKQogCQlyZXR1cm4gNDsKLQlpZiAobXBfaXJxLT5tcF9zcmNidXMgIT0gbS0+c3JjYnVzKQorCWlmIChtcF9pcnEtPnNyY2J1cyAhPSBtLT5zcmNidXMpCiAJCXJldHVybiA1OwotCWlmIChtcF9pcnEtPm1wX3NyY2J1c2lycSAhPSBtLT5zcmNidXNpcnEpCisJaWYgKG1wX2lycS0+c3JjYnVzaXJxICE9IG0tPnNyY2J1c2lycSkKIAkJcmV0dXJuIDY7Ci0JaWYgKG1wX2lycS0+bXBfZHN0aXJxICE9IG0tPmRzdGlycSkKKwlpZiAobXBfaXJxLT5kc3RpcnEgIT0gbS0+ZHN0aXJxKQogCQlyZXR1cm4gNzsKIAogCXJldHVybiAwOwpAQCAtMjkyLDE2ICsyODcsNyBAQAogCQlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIG5lZWQgdG8gbWFrZSBzdXJlIHN1bW1pdCBhbmQgZXM3MDAwJ3MgbXBzX29lbV9jaGVjayBpcyBzYWZlIHRvIGJlCi0JICogY2FsbGVkIGVhcmx5IHZpYSBnZW5lcmljYXJjaCAncyBtcHNfb2VtX2NoZWNrCi0JICovCi0JaWYgKGVhcmx5KSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotCQludW1hcV9tcHNfb2VtX2NoZWNrKG1wYywgb2VtLCBzdHIpOwotI2VuZGlmCi0JfSBlbHNlCi0JCW1wc19vZW1fY2hlY2sobXBjLCBvZW0sIHN0cik7CisJZ2VuZXJpY19tcHNfb2VtX2NoZWNrKG1wYywgb2VtLCBzdHIpOwogI2VuZGlmCiAJLyogc2F2ZSB0aGUgbG9jYWwgQVBJQyBhZGRyZXNzLCBpdCBtaWdodCBiZSBub24tZGVmYXVsdCAqLwogCWlmICghYWNwaV9sYXBpYykKQEAgLTM4NiwxMyArMzcyLDEzIEBACiAJCQkoKng4Nl9xdWlya3MtPm1wY19yZWNvcmQpKys7CiAJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9HRU5FUklDQVJDSAotICAgICAgIGdlbmVyaWNfYmlnc21wX3Byb2JlKCk7CisjaWZkZWYgQ09ORklHX1g4Nl9CSUdTTVAKKwlnZW5lcmljX2JpZ3NtcF9wcm9iZSgpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0Jc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0jZW5kaWYKKwlpZiAoYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKQorCQlhcGljLT5zZXR1cF9hcGljX3JvdXRpbmcoKTsKKwogCWlmICghbnVtX3Byb2Nlc3NvcnMpCiAJCXByaW50ayhLRVJOX0VSUiAiTVBUQUJMRTogbm8gcHJvY2Vzc29ycyByZWdpc3RlcmVkIVxuIik7CiAJcmV0dXJuIG51bV9wcm9jZXNzb3JzOwpAQCAtNDE3LDcgKzQwMyw3IEBACiAJaW50c3JjLnR5cGUgPSBNUF9JTlRTUkM7CiAJaW50c3JjLmlycWZsYWcgPSAwOwkvKiBjb25mb3JtaW5nICovCiAJaW50c3JjLnNyY2J1cyA9IDA7Ci0JaW50c3JjLmRzdGFwaWMgPSBtcF9pb2FwaWNzWzBdLm1wX2FwaWNpZDsKKwlpbnRzcmMuZHN0YXBpYyA9IG1wX2lvYXBpY3NbMF0uYXBpY2lkOwogCiAJaW50c3JjLmlycXR5cGUgPSBtcF9JTlQ7CiAKQEAgLTU3MCwxNCArNTU2LDE0IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGZfZm91bmQ7CitzdGF0aWMgc3RydWN0IG1wZl9pbnRlbCAqbXBmX2ZvdW5kOwogCiAvKgogICogU2NhbiB0aGUgbWVtb3J5IGJsb2NrcyBmb3IgYW4gU01QIGNvbmZpZ3VyYXRpb24gYmxvY2suCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBfX2dldF9zbXBfY29uZmlnKHVuc2lnbmVkIGludCBlYXJseSkKIHsKLQlzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZiA9IG1wZl9mb3VuZDsKKwlzdHJ1Y3QgbXBmX2ludGVsICptcGYgPSBtcGZfZm91bmQ7CiAKIAlpZiAoIW1wZikKIAkJcmV0dXJuOwpAQCAtNTk4LDkgKzU4NCw5IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSW50ZWwgTXVsdGlQcm9jZXNzb3IgU3BlY2lmaWNhdGlvbiB2MS4lZFxuIiwKLQkgICAgICAgbXBmLT5tcGZfc3BlY2lmaWNhdGlvbik7CisJICAgICAgIG1wZi0+c3BlY2lmaWNhdGlvbik7CiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKLQlpZiAobXBmLT5tcGZfZmVhdHVyZTIgJiAoMSA8PCA3KSkgeworCWlmIChtcGYtPmZlYXR1cmUyICYgKDEgPDwgNykpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiICAgIElNQ1IgYW5kIFBJQyBjb21wYXRpYmlsaXR5IG1vZGUuXG4iKTsKIAkJcGljX21vZGUgPSAxOwogCX0gZWxzZSB7CkBAIC02MTEsNyArNTk3LDcgQEAKIAkvKgogCSAqIE5vdyBzZWUgaWYgd2UgbmVlZCB0byByZWFkIGZ1cnRoZXIuCiAJICovCi0JaWYgKG1wZi0+bXBmX2ZlYXR1cmUxICE9IDApIHsKKwlpZiAobXBmLT5mZWF0dXJlMSAhPSAwKSB7CiAJCWlmIChlYXJseSkgewogCQkJLyoKIAkJCSAqIGxvY2FsIEFQSUMgaGFzIGRlZmF1bHQgYWRkcmVzcwpAQCAtNjIxLDE2ICs2MDcsMTYgQEAKIAkJfQogCiAJCXByaW50ayhLRVJOX0lORk8gIkRlZmF1bHQgTVAgY29uZmlndXJhdGlvbiAjJWRcbiIsCi0JCSAgICAgICBtcGYtPm1wZl9mZWF0dXJlMSk7Ci0JCWNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+bXBmX2ZlYXR1cmUxKTsKKwkJICAgICAgIG1wZi0+ZmVhdHVyZTEpOworCQljb25zdHJ1Y3RfZGVmYXVsdF9JU0FfbXB0YWJsZShtcGYtPmZlYXR1cmUxKTsKIAotCX0gZWxzZSBpZiAobXBmLT5tcGZfcGh5c3B0cikgeworCX0gZWxzZSBpZiAobXBmLT5waHlzcHRyKSB7CiAKIAkJLyoKIAkJICogUmVhZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdGFibGUuICBBbnl0aGluZyBoZXJlIHdpbGwKIAkJICogb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgogCQkgKi8KLQkJaWYgKCFzbXBfcmVhZF9tcGMocGh5c190b192aXJ0KG1wZi0+bXBmX3BoeXNwdHIpLCBlYXJseSkpIHsKKwkJaWYgKCFzbXBfcmVhZF9tcGMocGh5c190b192aXJ0KG1wZi0+cGh5c3B0ciksIGVhcmx5KSkgewogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7CiAjZW5kaWYKQEAgLTY4OCwzMiArNjc0LDMyIEBACiAJCQkJICB1bnNpZ25lZCByZXNlcnZlKQogewogCXVuc2lnbmVkIGludCAqYnAgPSBwaHlzX3RvX3ZpcnQoYmFzZSk7Ci0Jc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGY7CisJc3RydWN0IG1wZl9pbnRlbCAqbXBmOwogCiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiU2NhbiBTTVAgZnJvbSAlcCBmb3IgJWxkIGJ5dGVzLlxuIiwKIAkJCWJwLCBsZW5ndGgpOwogCUJVSUxEX0JVR19PTihzaXplb2YoKm1wZikgIT0gMTYpOwogCiAJd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJbXBmID0gKHN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqKWJwOworCQltcGYgPSAoc3RydWN0IG1wZl9pbnRlbCAqKWJwOwogCQlpZiAoKCpicCA9PSBTTVBfTUFHSUNfSURFTlQpICYmCi0JCSAgICAobXBmLT5tcGZfbGVuZ3RoID09IDEpICYmCisJCSAgICAobXBmLT5sZW5ndGggPT0gMSkgJiYKIAkJICAgICFtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKilicCwgMTYpICYmCi0JCSAgICAoKG1wZi0+bXBmX3NwZWNpZmljYXRpb24gPT0gMSkKLQkJICAgICB8fCAobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSA0KSkpIHsKKwkJICAgICgobXBmLT5zcGVjaWZpY2F0aW9uID09IDEpCisJCSAgICAgfHwgKG1wZi0+c3BlY2lmaWNhdGlvbiA9PSA0KSkpIHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkJCXNtcF9mb3VuZF9jb25maWcgPSAxOwogI2VuZGlmCiAJCQltcGZfZm91bmQgPSBtcGY7CiAKLQkJCXByaW50ayhLRVJOX0lORk8gImZvdW5kIFNNUCBNUC10YWJsZSBhdCBbJXBdICUwOGx4XG4iLAotCQkJICAgICAgIG1wZiwgdmlydF90b19waHlzKG1wZikpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm91bmQgU01QIE1QLXRhYmxlIGF0IFslcF0gJWxseFxuIiwKKwkJCSAgICAgICBtcGYsICh1NjQpdmlydF90b19waHlzKG1wZikpOwogCiAJCQlpZiAoIXJlc2VydmUpCiAJCQkJcmV0dXJuIDE7CiAJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh2aXJ0X3RvX3BoeXMobXBmKSwgUEFHRV9TSVpFLAogCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIpIHsKKwkJCWlmIChtcGYtPnBoeXNwdHIpIHsKIAkJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCQkJCS8qCkBAIC03MjIsMTUgKzcwOCwyNCBAQAogCQkJCSAqIHRoZSBib3R0b20gaXMgbWFwcGVkIG5vdy4KIAkJCQkgKiBQQy05ODAwJ3MgTVBDIHRhYmxlIHBsYWNlcyBvbiB0aGUgdmVyeSBsYXN0CiAJCQkJICogb2YgcGh5c2ljYWwgbWVtb3J5OyBzbyB0aGF0IHNpbXBseSByZXNlcnZpbmcKLQkJCQkgKiBQQUdFX1NJWkUgZnJvbSBtcGctPm1wZl9waHlzcHRyIHlpZWxkcyBCVUcoKQorCQkJCSAqIFBBR0VfU0laRSBmcm9tIG1wZi0+cGh5c3B0ciB5aWVsZHMgQlVHKCkKIAkJCQkgKiBpbiByZXNlcnZlX2Jvb3RtZW0uCisJCQkJICogYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBwaHlzcHRyIGlzIGJlbG93IHRoYW4KKwkJCQkgKiBtYXhfbG93X3BmbgorCQkJCSAqIHdlIGRvbid0IG5lZWQgcmVzZXJ2ZSB0aGUgYXJlYSBhYm92ZSBtYXhfbG93X3BmbgogCQkJCSAqLwogCQkJCXVuc2lnbmVkIGxvbmcgZW5kID0gbWF4X2xvd19wZm4gKiBQQUdFX1NJWkU7Ci0JCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIgKyBzaXplID4gZW5kKQotCQkJCQlzaXplID0gZW5kIC0gbXBmLT5tcGZfcGh5c3B0cjsKLSNlbmRpZgotCQkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+bXBmX3BoeXNwdHIsIHNpemUsCisKKwkJCQlpZiAobXBmLT5waHlzcHRyIDwgZW5kKSB7CisJCQkJCWlmIChtcGYtPnBoeXNwdHIgKyBzaXplID4gZW5kKQorCQkJCQkJc2l6ZSA9IGVuZCAtIG1wZi0+cGh5c3B0cjsKKwkJCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5waHlzcHRyLCBzaXplLAorCQkJCQkJCUJPT1RNRU1fREVGQVVMVCk7CisJCQkJfQorI2Vsc2UKKwkJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsCiAJCQkJCQlCT09UTUVNX0RFRkFVTFQpOworI2VuZGlmCiAJCQl9CiAKIAkJCXJldHVybiAxOwpAQCAtODA5LDE1ICs4MDQsMTUgQEAKIAkvKiBub3QgbGVnYWN5ICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlICE9IG1wX0lOVCkKKwkJaWYgKG1wX2lycXNbaV0uaXJxdHlwZSAhPSBtcF9JTlQpCiAJCQljb250aW51ZTsKIAotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnFmbGFnICE9IDB4MGYpCisJCWlmIChtcF9pcnFzW2ldLmlycWZsYWcgIT0gMHgwZikKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChtcF9pcnFzW2ldLm1wX3NyY2J1cyAhPSBtLT5zcmNidXMpCisJCWlmIChtcF9pcnFzW2ldLnNyY2J1cyAhPSBtLT5zcmNidXMpCiAJCQljb250aW51ZTsKLQkJaWYgKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxICE9IG0tPnNyY2J1c2lycSkKKwkJaWYgKG1wX2lycXNbaV0uc3JjYnVzaXJxICE9IG0tPnNyY2J1c2lycSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXJxX3VzZWRbaV0pIHsKIAkJCS8qIGFscmVhZHkgY2xhaW1lZCAqLwpAQCAtOTIyLDEwICs5MTcsMTAgQEAKIAkJaWYgKGlycV91c2VkW2ldKQogCQkJY29udGludWU7CiAKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSAhPSBtcF9JTlQpCisJCWlmIChtcF9pcnFzW2ldLmlycXR5cGUgIT0gbXBfSU5UKQogCQkJY29udGludWU7CiAKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxZmxhZyAhPSAweDBmKQorCQlpZiAobXBfaXJxc1tpXS5pcnFmbGFnICE9IDB4MGYpCiAJCQljb250aW51ZTsKIAogCQlpZiAobnJfbV9zcGFyZSA+IDApIHsKQEAgLTEwMDEsNyArOTk2LDcgQEAKIHsKIAljaGFyIHN0clsxNl07CiAJY2hhciBvZW1bMTBdOwotCXN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqbXBmOworCXN0cnVjdCBtcGZfaW50ZWwgKm1wZjsKIAlzdHJ1Y3QgbXBjX3RhYmxlICptcGMsICptcGNfbmV3OwogCiAJaWYgKCFlbmFibGVfdXBkYXRlX21wdGFibGUpCkBAIC0xMDE0LDE5ICsxMDA5LDE5IEBACiAJLyoKIAkgKiBOb3cgc2VlIGlmIHdlIG5lZWQgdG8gZ28gZnVydGhlci4KIAkgKi8KLQlpZiAobXBmLT5tcGZfZmVhdHVyZTEgIT0gMCkKKwlpZiAobXBmLT5mZWF0dXJlMSAhPSAwKQogCQlyZXR1cm4gMDsKIAotCWlmICghbXBmLT5tcGZfcGh5c3B0cikKKwlpZiAoIW1wZi0+cGh5c3B0cikKIAkJcmV0dXJuIDA7CiAKLQltcGMgPSBwaHlzX3RvX3ZpcnQobXBmLT5tcGZfcGh5c3B0cik7CisJbXBjID0gcGh5c190b192aXJ0KG1wZi0+cGh5c3B0cik7CiAKIAlpZiAoIXNtcF9jaGVja19tcGMobXBjLCBvZW0sIHN0cikpCiAJCXJldHVybiAwOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAibXBmOiAlbHhcbiIsIHZpcnRfdG9fcGh5cyhtcGYpKTsKLQlwcmludGsoS0VSTl9JTkZPICJtcGZfcGh5c3B0cjogJXhcbiIsIG1wZi0+bXBmX3BoeXNwdHIpOworCXByaW50ayhLRVJOX0lORk8gIm1wZjogJWxseFxuIiwgKHU2NCl2aXJ0X3RvX3BoeXMobXBmKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicGh5c3B0cjogJXhcbiIsIG1wZi0+cGh5c3B0cik7CiAKIAlpZiAobXBjX25ld19waHlzICYmIG1wYy0+bGVuZ3RoID4gbXBjX25ld19sZW5ndGgpIHsKIAkJbXBjX25ld19waHlzID0gMDsKQEAgLTEwNDcsMjMgKzEwNDIsMjMgQEAKIAkJfQogCQlwcmludGsoS0VSTl9JTkZPICJ1c2UgaW4tcG9zaXRvbiByZXBsYWNpbmdcbiIpOwogCX0gZWxzZSB7Ci0JCW1wZi0+bXBmX3BoeXNwdHIgPSBtcGNfbmV3X3BoeXM7CisJCW1wZi0+cGh5c3B0ciA9IG1wY19uZXdfcGh5czsKIAkJbXBjX25ldyA9IHBoeXNfdG9fdmlydChtcGNfbmV3X3BoeXMpOwogCQltZW1jcHkobXBjX25ldywgbXBjLCBtcGMtPmxlbmd0aCk7CiAJCW1wYyA9IG1wY19uZXc7CiAJCS8qIGNoZWNrIGlmIHdlIGNhbiBtb2RpZnkgdGhhdCAqLwotCQlpZiAobXBjX25ld19waHlzIC0gbXBmLT5tcGZfcGh5c3B0cikgewotCQkJc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGZfbmV3OworCQlpZiAobXBjX25ld19waHlzIC0gbXBmLT5waHlzcHRyKSB7CisJCQlzdHJ1Y3QgbXBmX2ludGVsICptcGZfbmV3OwogCQkJLyogc3RlYWwgMTYgYnl0ZXMgZnJvbSBbMCwgMWspICovCiAJCQlwcmludGsoS0VSTl9JTkZPICJtcGYgbmV3OiAleFxuIiwgMHg0MDAgLSAxNik7CiAJCQltcGZfbmV3ID0gcGh5c190b192aXJ0KDB4NDAwIC0gMTYpOwogCQkJbWVtY3B5KG1wZl9uZXcsIG1wZiwgMTYpOwogCQkJbXBmID0gbXBmX25ldzsKLQkJCW1wZi0+bXBmX3BoeXNwdHIgPSBtcGNfbmV3X3BoeXM7CisJCQltcGYtPnBoeXNwdHIgPSBtcGNfbmV3X3BoeXM7CiAJCX0KLQkJbXBmLT5tcGZfY2hlY2tzdW0gPSAwOwotCQltcGYtPm1wZl9jaGVja3N1bSAtPSBtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKiltcGYsIDE2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibXBmX3BoeXNwdHIgbmV3OiAleFxuIiwgbXBmLT5tcGZfcGh5c3B0cik7CisJCW1wZi0+Y2hlY2tzdW0gPSAwOworCQltcGYtPmNoZWNrc3VtIC09IG1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKW1wZiwgMTYpOworCQlwcmludGsoS0VSTl9JTkZPICJwaHlzcHRyIG5ldzogJXhcbiIsIG1wZi0+cGh5c3B0cik7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCA3MjYyNjY2Li4zY2YzNDEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0zNSwxMCArMzUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKm1zcl9jbGFzczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9ubWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIyODk3OS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbm1pLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzIgKzAsMCBAQAotLyoKLSAqICBOTUkgd2F0Y2hkb2cgc3VwcG9ydCBvbiBBUElDIHN5c3RlbXMKLSAqCi0gKiAgU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLSAqCi0gKiAgRml4ZXM6Ci0gKiAgTWlrYWVsIFBldHRlcnNzb24JOiBBTUQgSzcgc3VwcG9ydCBmb3IgbG9jYWwgQVBJQyBOTUkgd2F0Y2hkb2cuCi0gKiAgTWlrYWVsIFBldHRlcnNzb24JOiBQb3dlciBNYW5hZ2VtZW50IGZvciBsb2NhbCBBUElDIE5NSSB3YXRjaGRvZy4KLSAqICBNaWthZWwgUGV0dGVyc3Nvbgk6IFBlbnRpdW0gNCBzdXBwb3J0IGZvciBsb2NhbCBBUElDIE5NSSB3YXRjaGRvZy4KLSAqICBQYXZlbCBNYWNoZWsgYW5kCi0gKiAgTWlrYWVsIFBldHRlcnNzb24JOiBQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLiBEaXNhYmxlL2VuYWJsZSBBUEkuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotCi0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vdGltZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9tY2UuaD4KLQotI2luY2x1ZGUgPG1hY2hfdHJhcHMuaD4KLQotaW50IHVua25vd25fbm1pX3BhbmljOwotaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwotCi1zdGF0aWMgY3B1bWFza190IGJhY2t0cmFjZV9tYXNrID0gQ1BVX01BU0tfTk9ORTsKLQotLyogbm1pX2FjdGl2ZToKLSAqID4wOiB0aGUgbGFwaWMgTk1JIHdhdGNoZG9nIGlzIGFjdGl2ZSwgYnV0IGNhbiBiZSBkaXNhYmxlZAotICogPDA6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaGFzIG5vdCBiZWVuIHNldCB1cCwgYW5kIGNhbm5vdAotICogICAgIGJlIGVuYWJsZWQKLSAqICAwOiB0aGUgbGFwaWMgTk1JIHdhdGNoZG9nIGlzIGRpc2FibGVkLCBidXQgY2FuIGJlIGVuYWJsZWQKLSAqLwotYXRvbWljX3Qgbm1pX2FjdGl2ZSA9IEFUT01JQ19JTklUKDApOwkJLyogb3Byb2ZpbGUgdXNlcyB0aGlzICovCi1FWFBPUlRfU1lNQk9MKG5taV9hY3RpdmUpOwotCi11bnNpZ25lZCBpbnQgbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7Ci1FWFBPUlRfU1lNQk9MKG5taV93YXRjaGRvZyk7Ci0KLXN0YXRpYyBpbnQgcGFuaWNfb25fdGltZW91dDsKLQotc3RhdGljIHVuc2lnbmVkIGludCBubWlfaHogPSBIWjsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzaG9ydCwgd2RfZW5hYmxlZCk7Ci1zdGF0aWMgaW50IGVuZGZsYWcgX19pbml0ZGF0YTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X25taV9jb3VudChpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gY3B1X3BkYShjcHUpLT5fX25taV9jb3VudDsKLSNlbHNlCi0JcmV0dXJuIG5taV9jb3VudChjcHUpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1jZV9pbl9wcm9ncmVzcyh2b2lkKQotewotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChDT05GSUdfWDg2X01DRSkKLQlyZXR1cm4gYXRvbWljX3JlYWQoJm1jZV9lbnRyeSkgPiAwOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUYWtlIHRoZSBsb2NhbCBhcGljIHRpbWVyIGFuZCBQSVQvSFBFVCBpbnRvIGFjY291bnQuIFdlIGRvbid0Ci0gKiBrbm93IHdoaWNoIG9uZSBpcyBhY3RpdmUsIHdoZW4gd2UgaGF2ZSBoaWdocmVzL2R5bnRpY2sgb24KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RpbWVyX2lycXMoaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmV0dXJuIHJlYWRfcGRhKGFwaWNfdGltZXJfaXJxcykgKyByZWFkX3BkYShpcnEwX2lycXMpOwotI2Vsc2UKLQlyZXR1cm4gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5hcGljX3RpbWVyX2lycXMgKwotCQlwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycTBfaXJxczsKLSNlbmRpZgotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotLyoKLSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyB1c2VkIGJ5IE5NSV9MT0NBTF9BUElDIGRvbid0IHRyaWdnZXIgd2hlbgotICogdGhlIENQVSBpcyBpZGxlLiBUbyBtYWtlIHN1cmUgdGhlIE5NSSB3YXRjaGRvZyByZWFsbHkgdGlja3Mgb24gYWxsCi0gKiBDUFVzIGR1cmluZyB0aGUgdGVzdCBtYWtlIHRoZW0gYnVzeS4KLSAqLwotc3RhdGljIF9faW5pdCB2b2lkIG5taV9jcHVfYnVzeSh2b2lkICpkYXRhKQotewotCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCS8qCi0JICogSW50ZW50aW9uYWxseSBkb24ndCB1c2UgY3B1X3JlbGF4IGhlcmUuIFRoaXMgaXMKLQkgKiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWFsbHkgdGlja3MsCi0JICogZXZlbiBpZiB0aGVyZSBpcyBhIHNpbXVsYXRvciBvciBzaW1pbGFyIHRoYXQgY2F0Y2hlcyB0aGUKLQkgKiBwYXVzZSBpbnN0cnVjdGlvbi4gT24gYSByZWFsIEhUIG1hY2hpbmUgdGhpcyBpcyBmaW5lIGJlY2F1c2UKLQkgKiBhbGwgb3RoZXIgQ1BVcyBhcmUgYnVzeSB3aXRoICJ1c2VsZXNzIiBkZWxheSBsb29wcyBhbmQgZG9uJ3QKLQkgKiBjYXJlIGlmIHRoZXkgZ2V0IHNvbWV3aGF0IGxlc3MgY3ljbGVzLgotCSAqLwotCXdoaWxlIChlbmRmbGFnID09IDApCi0JCW1iKCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgcmVwb3J0X2Jyb2tlbl9ubWkoaW50IGNwdSwgaW50ICpwcmV2X25taV9jb3VudCkKLXsKLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORwotCQkiV0FSTklORzogQ1BVIyVkOiBOTUkgYXBwZWFycyB0byBiZSBzdHVjayAoJWQtPiVkKSFcbiIsCi0JCQljcHUsIHByZXZfbm1pX2NvdW50W2NwdV0sIGdldF9ubWlfY291bnQoY3B1KSk7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gYnVnemlsbGEua2VybmVsLm9yZyxcbiIpOwotCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJImFuZCBhdHRhY2ggdGhlIG91dHB1dCBvZiB0aGUgJ2RtZXNnJyBjb21tYW5kLlxuIik7Ci0KLQlwZXJfY3B1KHdkX2VuYWJsZWQsIGNwdSkgPSAwOwotCWF0b21pY19kZWMoJm5taV9hY3RpdmUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2FjcGlfbm1pX2Rpc2FibGUodm9pZCAqX191bnVzZWQpCi17Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEKTsKLX0KLQotaW50IF9faW5pdCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgKnByZXZfbm1pX2NvdW50OwotCWludCBjcHU7Ci0KLQlpZiAoIW5taV93YXRjaGRvZ19hY3RpdmUoKSB8fCAhYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKQotCQlyZXR1cm4gMDsKLQotCXByZXZfbm1pX2NvdW50ID0ga21hbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCWlmICghcHJldl9ubWlfY291bnQpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykKLQkJc21wX2NhbGxfZnVuY3Rpb24obm1pX2NwdV9idXN5LCAodm9pZCAqKSZlbmRmbGFnLCAwKTsKLSNlbmRpZgotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJcHJldl9ubWlfY291bnRbY3B1XSA9IGdldF9ubWlfY291bnQoY3B1KTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbWRlbGF5KCgyMCAqIDEwMDApIC8gbm1pX2h6KTsgLyogd2FpdCAyMCB0aWNrcyAqLwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKCFwZXJfY3B1KHdkX2VuYWJsZWQsIGNwdSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGdldF9ubWlfY291bnQoY3B1KSAtIHByZXZfbm1pX2NvdW50W2NwdV0gPD0gNSkKLQkJCXJlcG9ydF9icm9rZW5fbm1pKGNwdSwgcHJldl9ubWlfY291bnQpOwotCX0KLQllbmRmbGFnID0gMTsKLQlpZiAoIWF0b21pY19yZWFkKCZubWlfYWN0aXZlKSkgewotCQlrZnJlZShwcmV2X25taV9jb3VudCk7Ci0JCWF0b21pY19zZXQoJm5taV9hY3RpdmUsIC0xKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJpbnRrKCJPSy5cbiIpOwotCi0JLyoKLQkgKiBub3cgdGhhdCB3ZSBrbm93IGl0IHdvcmtzIHdlIGNhbiByZWR1Y2UgTk1JIGZyZXF1ZW5jeSB0bwotCSAqIHNvbWV0aGluZyBtb3JlIHJlYXNvbmFibGU7IG1ha2VzIGEgZGlmZmVyZW5jZSBpbiBzb21lIGNvbmZpZ3MKLQkgKi8KLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQlubWlfaHogPSBsYXBpY19hZGp1c3Rfbm1pX2h6KDEpOwotCi0Ja2ZyZWUocHJldl9ubWlfY291bnQpOwotCXJldHVybiAwOwotZXJyb3I6Ci0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlpZiAoIXRpbWVyX3Rocm91Z2hfODI1OSkKLQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQlvbl9lYWNoX2NwdShfX2FjcGlfbm1pX2Rpc2FibGUsIE5VTEwsIDEpOwotCX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQl0aW1lcl9hY2sgPSAwOwotI2VuZGlmCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ubWlfd2F0Y2hkb2coY2hhciAqc3RyKQotewotCXVuc2lnbmVkIGludCBubWk7Ci0KLQlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkgewotCQlwYW5pY19vbl90aW1lb3V0ID0gMTsKLQkJc3RyID0gc3RyY2hyKHN0ciwgJywnKTsKLQkJaWYgKCFzdHIpCi0JCQlyZXR1cm4gMTsKLQkJKytzdHI7Ci0JfQotCi0JaWYgKCFzdHJuY21wKHN0ciwgImxhcGljIiwgNSkpCi0JCW5taV93YXRjaGRvZyA9IE5NSV9MT0NBTF9BUElDOwotCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgImlvYXBpYyIsIDYpKQotCQlubWlfd2F0Y2hkb2cgPSBOTUlfSU9fQVBJQzsKLQllbHNlIHsKLQkJZ2V0X29wdGlvbigmc3RyLCAmbm1pKTsKLQkJaWYgKG5taSA+PSBOTUlfSU5WQUxJRCkKLQkJCXJldHVybiAwOwotCQlubWlfd2F0Y2hkb2cgPSBubWk7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJubWlfd2F0Y2hkb2c9Iiwgc2V0dXBfbm1pX3dhdGNoZG9nKTsKLQotLyoKLSAqIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQKLSAqLwotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IG5taV9wbV9hY3RpdmU7IC8qIG5taV9hY3RpdmUgYmVmb3JlIHN1c3BlbmQgKi8KLQotc3RhdGljIGludCBsYXBpY19ubWlfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JLyogb25seSBDUFUwIGdvZXMgaGVyZSwgb3RoZXIgQ1BVcyBzaG91bGQgYmUgb2ZmbGluZSAqLwotCW5taV9wbV9hY3RpdmUgPSBhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSk7Ci0Jc3RvcF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxhcGljX25taV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQkvKiBvbmx5IENQVTAgZ29lcyBoZXJlLCBvdGhlciBDUFVzIHNob3VsZCBiZSBvZmZsaW5lICovCi0JaWYgKG5taV9wbV9hY3RpdmUgPiAwKSB7Ci0JCXNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKE5VTEwpOwotCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG5taV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGFwaWNfbm1pIiwKLQkucmVzdW1lCQk9IGxhcGljX25taV9yZXN1bWUsCi0JLnN1c3BlbmQJPSBsYXBpY19ubWlfc3VzcGVuZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfbGFwaWNfbm1pID0gewotCS5pZAk9IDAsCi0JLmNscwk9ICZubWlfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xhcGljX25taV9zeXNmcyh2b2lkKQotewotCWludCBlcnJvcjsKLQotCS8qCi0JICogc2hvdWxkIHJlYWxseSBiZSBhIEJVR19PTiBidXQgYi9jIHRoaXMgaXMgYW4KLQkgKiBpbml0IGNhbGwsIGl0IGp1c3QgZG9lc24ndCB3b3JrLiAgLWRjegotCSAqLwotCWlmIChubWlfd2F0Y2hkb2cgIT0gTk1JX0xPQ0FMX0FQSUMpCi0JCXJldHVybiAwOwotCi0JaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA8IDApCi0JCXJldHVybiAwOwotCi0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm5taV9zeXNjbGFzcyk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9sYXBpY19ubWkpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyogbXVzdCBjb21lIGFmdGVyIHRoZSBsb2NhbCBBUElDJ3MgZGV2aWNlX2luaXRjYWxsKCkgKi8KLWxhdGVfaW5pdGNhbGwoaW5pdF9sYXBpY19ubWlfc3lzZnMpOwotCi0jZW5kaWYJLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyB2b2lkIF9fYWNwaV9ubWlfZW5hYmxlKHZvaWQgKl9fdW51c2VkKQotewotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX05NSSk7Ci19Ci0KLS8qCi0gKiBFbmFibGUgdGltZXIgYmFzZWQgTk1JcyBvbiBhbGwgQ1BVczoKLSAqLwotdm9pZCBhY3BpX25taV9lbmFibGUodm9pZCkKLXsKLQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICYmIG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykKLQkJb25fZWFjaF9jcHUoX19hY3BpX25taV9lbmFibGUsIE5VTEwsIDEpOwotfQotCi0vKgotICogRGlzYWJsZSB0aW1lciBiYXNlZCBOTUlzIG9uIGFsbCBDUFVzOgotICovCi12b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCkKLXsKLQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICYmIG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykKLQkJb25fZWFjaF9jcHUoX19hY3BpX25taV9kaXNhYmxlLCBOVUxMLCAxKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHNvb24gdGhlIExBUElDIE5NSSB3YXRjaGRvZyBkcml2ZXIgaGFzIGV2ZXJ5dGhpbmcKLSAqIGluIHBsYWNlIGFuZCBpdCdzIHJlYWR5IHRvIGNoZWNrIGlmIHRoZSBOTUlzIGJlbG9uZyB0byB0aGUgTk1JIHdhdGNoZG9nCi0gKi8KLXZvaWQgY3B1X25taV9zZXRfd2RfZW5hYmxlZCh2b2lkKQotewotCV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPSAxOwotfQotCi12b2lkIHNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKnVudXNlZCkKLXsKLQlpZiAoX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSkKLQkJcmV0dXJuOwotCi0JLyogY2hlYXAgaGFjayB0byBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lICovCi0JLyogaWYgY3B1MCBpcyBub3QgYWN0aXZlIG5laXRoZXIgc2hvdWxkIHRoZSBvdGhlciBjcHVzICovCi0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwICYmIGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA8PSAwKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKG5taV93YXRjaGRvZykgewotCWNhc2UgTk1JX0xPQ0FMX0FQSUM6Ci0JCWlmIChsYXBpY193YXRjaGRvZ19pbml0KG5taV9oeikgPCAwKSB7Ci0JCQlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMDsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBGQUxMIFRIUk9VR0ggKi8KLQljYXNlIE5NSV9JT19BUElDOgotCQlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMTsKLQkJYXRvbWljX2luYygmbm1pX2FjdGl2ZSk7Ci0JfQotfQotCi12b2lkIHN0b3BfYXBpY19ubWlfd2F0Y2hkb2codm9pZCAqdW51c2VkKQotewotCS8qIG9ubHkgc3VwcG9ydCBMT0NBTCBhbmQgSU8gQVBJQ3MgZm9yIG5vdyAqLwotCWlmICghbm1pX3dhdGNoZG9nX2FjdGl2ZSgpKQotCQlyZXR1cm47Ci0JaWYgKF9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPT0gMCkKLQkJcmV0dXJuOwotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCi0JCWxhcGljX3dhdGNoZG9nX3N0b3AoKTsKLQllbHNlCi0JCV9fYWNwaV9ubWlfZGlzYWJsZShOVUxMKTsKLQlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMDsKLQlhdG9taWNfZGVjKCZubWlfYWN0aXZlKTsKLX0KLQotLyoKLSAqIHRoZSBiZXN0IHdheSB0byBkZXRlY3Qgd2hldGhlciBhIENQVSBoYXMgYSAnaGFyZCBsb2NrdXAnIHByb2JsZW0KLSAqIGlzIHRvIGNoZWNrIGl0J3MgbG9jYWwgQVBJQyB0aW1lciBJUlEgY291bnRzLiBJZiB0aGV5IGFyZSBub3QKLSAqIGNoYW5naW5nIHRoZW4gdGhhdCBDUFUgaGFzIHNvbWUgcHJvYmxlbS4KLSAqCi0gKiBhcyB0aGVzZSB3YXRjaGRvZyBOTUkgSVJRcyBhcmUgZ2VuZXJhdGVkIG9uIGV2ZXJ5IENQVSwgd2Ugb25seQotICogaGF2ZSB0byBjaGVjayB0aGUgY3VycmVudCBwcm9jZXNzb3IuCi0gKgotICogc2luY2UgTk1JcyBkb24ndCBsaXN0ZW4gdG8gX2FueV8gbG9ja3MsIHdlIGhhdmUgdG8gYmUgZXh0cmVtZWx5Ci0gKiBjYXJlZnVsIG5vdCB0byByZWx5IG9uIHVuc2FmZSB2YXJpYWJsZXMuIFRoZSBwcmludGsgbWlnaHQgbG9jawotICogdXAgdGhvdWdoLCBzbyB3ZSBoYXZlIHRvIGJyZWFrIHVwIGFueSBjb25zb2xlIGxvY2tzIGZpcnN0IC4uLgotICogW3doZW4gdGhlcmUgd2lsbCBiZSBtb3JlIHR0eS1yZWxhdGVkIGxvY2tzLCBicmVhayB0aGVtIHVwIGhlcmUgdG9vIV0KLSAqLwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIGxhc3RfaXJxX3N1bSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUobG9jYWxfdCwgYWxlcnRfY291bnRlcik7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBubWlfdG91Y2gpOwotCi12b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKQotewotCWlmIChubWlfd2F0Y2hkb2dfYWN0aXZlKCkpIHsKLQkJdW5zaWduZWQgY3B1OwotCi0JCS8qCi0JCSAqIFRlbGwgb3RoZXIgQ1BVcyB0byByZXNldCB0aGVpciBhbGVydCBjb3VudGVycy4gV2UgY2Fubm90Ci0JCSAqIGRvIGl0IG91cnNlbHZlcyBiZWNhdXNlIHRoZSBhbGVydCBjb3VudCBpbmNyZWFzZSBpcyBub3QKLQkJICogYXRvbWljLgotCQkgKi8KLQkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7Ci0JCQlpZiAocGVyX2NwdShubWlfdG91Y2gsIGNwdSkgIT0gMSkKLQkJCQlwZXJfY3B1KG5taV90b3VjaCwgY3B1KSA9IDE7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFRpY2tsZSB0aGUgc29mdGxvY2t1cCBkZXRlY3RvciB0b286Ci0JICovCi0JdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwotfQotRVhQT1JUX1NZTUJPTCh0b3VjaF9ubWlfd2F0Y2hkb2cpOwotCi1ub3RyYWNlIF9fa3Byb2JlcyBpbnQKLW5taV93YXRjaGRvZ190aWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCByZWFzb24pCi17Ci0JLyoKLQkgKiBTaW5jZSBjdXJyZW50X3RocmVhZF9pbmZvKCktPiBpcyBhbHdheXMgb24gdGhlIHN0YWNrLCBhbmQgd2UKLQkgKiBhbHdheXMgc3dpdGNoIHRoZSBzdGFjayBOTUktYXRvbWljYWxseSwgaXQncyBzYWZlIHRvIHVzZQotCSAqIHNtcF9wcm9jZXNzb3JfaWQoKS4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgc3VtOwotCWludCB0b3VjaGVkID0gMDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCByYyA9IDA7Ci0KLQkvKiBjaGVjayBmb3Igb3RoZXIgdXNlcnMgZmlyc3QgKi8KLQlpZiAobm90aWZ5X2RpZShESUVfTk1JLCAibm1pIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpCi0JCQk9PSBOT1RJRllfU1RPUCkgewotCQlyYyA9IDE7Ci0JCXRvdWNoZWQgPSAxOwotCX0KLQotCXN1bSA9IGdldF90aW1lcl9pcnFzKGNwdSk7Ci0KLQlpZiAoX19nZXRfY3B1X3ZhcihubWlfdG91Y2gpKSB7Ci0JCV9fZ2V0X2NwdV92YXIobm1pX3RvdWNoKSA9IDA7Ci0JCXRvdWNoZWQgPSAxOwotCX0KLQotCWlmIChjcHVfaXNzZXQoY3B1LCBiYWNrdHJhY2VfbWFzaykpIHsKLQkJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsJLyogU2VyaWFsaXNlIHRoZSBwcmludGtzICovCi0KLQkJc3Bpbl9sb2NrKCZsb2NrKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIGJhY2t0cmFjZSBmb3IgY3B1ICVkXG4iLCBjcHUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQkJY3B1X2NsZWFyKGNwdSwgYmFja3RyYWNlX21hc2spOwotCX0KLQotCS8qIENvdWxkIGNoZWNrIG9vcHNfaW5fcHJvZ3Jlc3MgaGVyZSB0b28sIGJ1dCBpdCdzIHNhZmVyIG5vdCB0byAqLwotCWlmIChtY2VfaW5fcHJvZ3Jlc3MoKSkKLQkJdG91Y2hlZCA9IDE7Ci0KLQkvKiBpZiB0aGUgbm9uZSBvZiB0aGUgdGltZXJzIGlzbid0IGZpcmluZywgdGhpcyBjcHUgaXNuJ3QgZG9pbmcgbXVjaCAqLwotCWlmICghdG91Y2hlZCAmJiBfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPT0gc3VtKSB7Ci0JCS8qCi0JCSAqIEF5aWVlLCBsb29rcyBsaWtlIHRoaXMgQ1BVIGlzIHN0dWNrIC4uLgotCQkgKiB3YWl0IGEgZmV3IElSUXMgKDUgc2Vjb25kcykgYmVmb3JlIGRvaW5nIHRoZSBvb3BzIC4uLgotCQkgKi8KLQkJbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpKTsKLQkJaWYgKGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlcikpID09IDUgKiBubWlfaHopCi0JCQkvKgotCQkJICogZGllX25taSB3aWxsIHJldHVybiBPTkxZIGlmIE5PVElGWV9TVE9QIGhhcHBlbnMuLgotCQkJICovCi0JCQlkaWVfbm1pKCJCVUc6IE5NSSBXYXRjaGRvZyBkZXRlY3RlZCBMT0NLVVAiLAotCQkJCXJlZ3MsIHBhbmljX29uX3RpbWVvdXQpOwotCX0gZWxzZSB7Ci0JCV9fZ2V0X2NwdV92YXIobGFzdF9pcnFfc3VtKSA9IHN1bTsKLQkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpLCAwKTsKLQl9Ci0KLQkvKiBzZWUgaWYgdGhlIG5taSB3YXRjaGRvZyB3ZW50IG9mZiAqLwotCWlmICghX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSkKLQkJcmV0dXJuIHJjOwotCXN3aXRjaCAobm1pX3dhdGNoZG9nKSB7Ci0JY2FzZSBOTUlfTE9DQUxfQVBJQzoKLQkJcmMgfD0gbGFwaWNfd2RfZXZlbnQobm1pX2h6KTsKLQkJYnJlYWs7Ci0JY2FzZSBOTUlfSU9fQVBJQzoKLQkJLyoKLQkJICogZG9uJ3Qga25vdyBob3cgdG8gYWNjdXJhdGVseSBjaGVjayBmb3IgdGhpcy4KLQkJICoganVzdCBhc3N1bWUgaXQgd2FzIGEgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0Ci0JCSAqIFRoaXMgbWF0Y2hlcyB0aGUgb2xkIGJlaGF2aW91ci4KLQkJICovCi0JCXJjID0gMTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByYzsKLX0KLQotI2lmZGVmIENPTkZJR19TWVNDVEwKLQotc3RhdGljIHZvaWQgZW5hYmxlX2lvYXBpY19ubWlfd2F0Y2hkb2dfc2luZ2xlKHZvaWQgKnVudXNlZCkKLXsKLQlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMTsKLQlhdG9taWNfaW5jKCZubWlfYWN0aXZlKTsKLQlfX2FjcGlfbm1pX2VuYWJsZShOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgZW5hYmxlX2lvYXBpY19ubWlfd2F0Y2hkb2codm9pZCkKLXsKLQlvbl9lYWNoX2NwdShlbmFibGVfaW9hcGljX25taV93YXRjaGRvZ19zaW5nbGUsIE5VTEwsIDEpOwotCXRvdWNoX25taV93YXRjaGRvZygpOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2lvYXBpY19ubWlfd2F0Y2hkb2codm9pZCkKLXsKLQlvbl9lYWNoX2NwdShzdG9wX2FwaWNfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfdW5rbm93bl9ubWlfcGFuaWMoY2hhciAqc3RyKQotewotCXVua25vd25fbm1pX3BhbmljID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoInVua25vd25fbm1pX3BhbmljIiwgc2V0dXBfdW5rbm93bl9ubWlfcGFuaWMpOwotCi1zdGF0aWMgaW50IHVua25vd25fbm1pX3BhbmljX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGNoYXIgcmVhc29uID0gZ2V0X25taV9yZWFzb24oKTsKLQljaGFyIGJ1Zls2NF07Ci0KLQlzcHJpbnRmKGJ1ZiwgIk5NSSByZWNlaXZlZCBmb3IgdW5rbm93biByZWFzb24gJTAyeFxuIiwgcmVhc29uKTsKLQlkaWVfbm1pKGJ1ZiwgcmVncywgMSk7IC8qIEFsd2F5cyBwYW5pYyBoZXJlICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBwcm9jIGhhbmRsZXIgZm9yIC9wcm9jL3N5cy9rZXJuZWwvbm1pCi0gKi8KLWludCBwcm9jX25taV9lbmFibGVkKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgb2xkX3N0YXRlOwotCi0Jbm1pX3dhdGNoZG9nX2VuYWJsZWQgPSAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpID4gMCkgPyAxIDogMDsKLQlvbGRfc3RhdGUgPSBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKLQlwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOwotCWlmICghIW9sZF9zdGF0ZSA9PSAhIW5taV93YXRjaGRvZ19lbmFibGVkKQotCQlyZXR1cm4gMDsKLQotCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPCAwIHx8ICFubWlfd2F0Y2hkb2dfYWN0aXZlKCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIk5NSSB3YXRjaGRvZyBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpIHsKLQkJaWYgKG5taV93YXRjaGRvZ19lbmFibGVkKQotCQkJZW5hYmxlX2xhcGljX25taV93YXRjaGRvZygpOwotCQllbHNlCi0JCQlkaXNhYmxlX2xhcGljX25taV93YXRjaGRvZygpOwotCX0gZWxzZSBpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCWlmIChubWlfd2F0Y2hkb2dfZW5hYmxlZCkKLQkJCWVuYWJsZV9pb2FwaWNfbm1pX3dhdGNoZG9nKCk7Ci0JCWVsc2UKLQkJCWRpc2FibGVfaW9hcGljX25taV93YXRjaGRvZygpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJOTUkgd2F0Y2hkb2cgZG9lc24ndCBrbm93IHdoYXQgaGFyZHdhcmUgdG8gdG91Y2hcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCi0KLWludCBkb19ubWlfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotCWlmICh1bmtub3duX25taV9wYW5pYykKLQkJcmV0dXJuIHVua25vd25fbm1pX3BhbmljX2NhbGxiYWNrKHJlZ3MsIGNwdSk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKLXsKLQlpbnQgaTsKLQotCWJhY2t0cmFjZV9tYXNrID0gY3B1X29ubGluZV9tYXA7Ci0JLyogV2FpdCBmb3IgdXAgdG8gMTAgc2Vjb25kcyBmb3IgYWxsIENQVXMgdG8gZG8gdGhlIGJhY2t0cmFjZSAqLwotCWZvciAoaSA9IDA7IGkgPCAxMCAqIDEwMDA7IGkrKykgewotCQlpZiAoY3B1c19lbXB0eShiYWNrdHJhY2VfbWFzaykpCi0JCQlicmVhazsKLQkJbWRlbGF5KDEpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL251bWFxXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMTkxZDQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL251bWFxXzMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnk6IFBhdHJpY2lhIEdhdWdoZW4sIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKLSAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKiBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogU2VuZCBmZWVkYmFjayB0byA8Z29uZUB1cy5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotI2luY2x1ZGUgPGFzbS9udW1hcS5oPgotI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9lODIwLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLSNkZWZpbmUJTUJfVE9fUEFHRVMoYWRkcikgKChhZGRyKSA8PCAoMjAgLSBQQUdFX1NISUZUKSkKLQotLyoKLSAqIEZ1bmN0aW9uOiBzbXBfZHVtcF9xY3QoKQotICoKLSAqIERlc2NyaXB0aW9uOiBnZXRzIG1lbW9yeSBsYXlvdXQgZnJvbSB0aGUgcXVhZCBjb25maWcgdGFibGUuICBUaGlzCi0gKiBmdW5jdGlvbiBhbHNvIHVwZGF0ZXMgbm9kZV9vbmxpbmVfbWFwIHdpdGggdGhlIG5vZGVzIChxdWFkcykgcHJlc2VudC4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNtcF9kdW1wX3FjdCh2b2lkKQotewotCWludCBub2RlOwotCXN0cnVjdCBlYWNocXVhZG1lbSAqZXE7Ci0Jc3RydWN0IHN5c19jZmdfZGF0YSAqc2NkID0KLQkJKHN0cnVjdCBzeXNfY2ZnX2RhdGEgKilfX3ZhKFNZU19DRkdfREFUQV9QUklWX0FERFIpOwotCi0Jbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJaWYgKHNjZC0+cXVhZHNfcHJlc2VudDMxXzAgJiAoMSA8PCBub2RlKSkgewotCQkJbm9kZV9zZXRfb25saW5lKG5vZGUpOwotCQkJZXEgPSAmc2NkLT5lcVtub2RlXTsKLQkJCS8qIENvbnZlcnQgdG8gcGFnZXMgKi8KLQkJCW5vZGVfc3RhcnRfcGZuW25vZGVdID0gTUJfVE9fUEFHRVMoCi0JCQkJZXEtPmhpX3NocmRfbWVtX3N0YXJ0IC0gZXEtPnByaXZfbWVtX3NpemUpOwotCQkJbm9kZV9lbmRfcGZuW25vZGVdID0gTUJfVE9fUEFHRVMoCi0JCQkJZXEtPmhpX3NocmRfbWVtX3N0YXJ0ICsgZXEtPmhpX3NocmRfbWVtX3NpemUpOwotCi0JCQllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKG5vZGUsIG5vZGVfc3RhcnRfcGZuW25vZGVdLAotCQkJCQkJCW5vZGVfZW5kX3Bmbltub2RlXSk7Ci0JCQltZW1vcnlfcHJlc2VudChub2RlLAotCQkJCW5vZGVfc3RhcnRfcGZuW25vZGVdLCBub2RlX2VuZF9wZm5bbm9kZV0pOwotCQkJbm9kZV9yZW1hcF9zaXplW25vZGVdID0gbm9kZV9tZW1tYXBfc2l6ZV9ieXRlcyhub2RlLAotCQkJCQkJCW5vZGVfc3RhcnRfcGZuW25vZGVdLAotCQkJCQkJCW5vZGVfZW5kX3Bmbltub2RlXSk7Ci0JCX0KLQl9Ci19Ci0KLQotdm9pZCBfX2NwdWluaXQgbnVtYXFfdHNjX2Rpc2FibGUodm9pZCkKLXsKLQlpZiAoIWZvdW5kX251bWFxKQotCQlyZXR1cm47Ci0KLQlpZiAobnVtX29ubGluZV9ub2RlcygpID4gMSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiTlVNQVE6IGRpc2FibGluZyBUU0NcbiIpOwotCQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBudW1hcV9wcmVfdGltZV9pbml0KHZvaWQpCi17Ci0JbnVtYXFfdHNjX2Rpc2FibGUoKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGZvdW5kX251bWFxOwotLyoKLSAqIEhhdmUgdG8gbWF0Y2ggdHJhbnNsYXRpb24gdGFibGUgZW50cmllcyB0byBtYWluIHRhYmxlIGVudHJpZXMgYnkgY291bnRlcgotICogaGVuY2UgdGhlIG1wY19yZWNvcmQgdmFyaWFibGUgLi4uLiBjYW4ndCBzZWUgYSBsZXNzIGRpc2d1c3Rpbmcgd2F5IG9mCi0gKiBkb2luZyB0aGlzIC4uLi4KLSAqLwotc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gewotCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7Ci0JdW5zaWduZWQgY2hhciB0cmFuc19sZW47Ci0JdW5zaWduZWQgY2hhciB0cmFuc190eXBlOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNfcXVhZDsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX2dsb2JhbDsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX2xvY2FsOwotCXVuc2lnbmVkIHNob3J0IHRyYW5zX3Jlc2VydmVkOwotfTsKLQotLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KLXN0YXRpYyBpbnQgbXBjX3JlY29yZDsKLXN0YXRpYyBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV0KLSAgICBfX2NwdWluaXRkYXRhOwotCi1zdGF0aWMgaW5saW5lIGludCBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChpbnQgcXVhZCwgaW50IHBoeXNfYXBpY2lkKQotewotCXJldHVybiAocXVhZCA8PCA0KSArIChwaHlzX2FwaWNpZCA/IHBoeXNfYXBpY2lkIDw8IDEgOiAxKTsKLX0KLQotLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KLXN0YXRpYyBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jcHUgKm0pCi17Ci0JaW50IHF1YWQgPSB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXS0+dHJhbnNfcXVhZDsKLQlpbnQgbG9naWNhbF9hcGljaWQgPSBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChxdWFkLCBtLT5hcGljaWQpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIlByb2Nlc3NvciAjJWQgJXU6JXUgQVBJQyB2ZXJzaW9uICVkIChxdWFkICVkLCBhcGljICVkKVxuIiwKLQkgICAgICAgbS0+YXBpY2lkLCAobS0+Y3B1ZmVhdHVyZSAmIENQVV9GQU1JTFlfTUFTSykgPj4gOCwKLQkgICAgICAgKG0tPmNwdWZlYXR1cmUgJiBDUFVfTU9ERUxfTUFTSykgPj4gNCwKLQkgICAgICAgbS0+YXBpY3ZlciwgcXVhZCwgbG9naWNhbF9hcGljaWQpOwotCXJldHVybiBsb2dpY2FsX2FwaWNpZDsKLX0KLQotaW50IG1wX2J1c19pZF90b19ub2RlW01BWF9NUF9CVVNTRVNdOwotCi1pbnQgbXBfYnVzX2lkX3RvX2xvY2FsW01BWF9NUF9CVVNTRVNdOwotCi0vKiB4ODZfcXVpcmtzIG1lbWJlciAqLwotc3RhdGljIHZvaWQgbXBjX29lbV9idXNfaW5mbyhzdHJ1Y3QgbXBjX2J1cyAqbSwgY2hhciAqbmFtZSkKLXsKLQlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19xdWFkOwotCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19sb2NhbDsKLQotCW1wX2J1c19pZF90b19ub2RlW20tPmJ1c2lkXSA9IHF1YWQ7Ci0JbXBfYnVzX2lkX3RvX2xvY2FsW20tPmJ1c2lkXSA9IGxvY2FsOwotCXByaW50ayhLRVJOX0lORk8gIkJ1cyAjJWQgaXMgJXMgKG5vZGUgJWQpXG4iLAotCSAgICAgICBtLT5idXNpZCwgbmFtZSwgcXVhZCk7Ci19Ci0KLWludCBxdWFkX2xvY2FsX3RvX21wX2J1c19pZCBbTlJfQ1BVUy80XVs0XTsKLQotLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KLXN0YXRpYyB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2J1cyAqbSkKLXsKLQlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19xdWFkOwotCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19sb2NhbDsKLQotCXF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkW3F1YWRdW2xvY2FsXSA9IG0tPmJ1c2lkOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgTVBfdHJhbnNsYXRpb25faW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqbSkKLXsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJUcmFuc2xhdGlvbjogcmVjb3JkICVkLCB0eXBlICVkLCBxdWFkICVkLCBnbG9iYWwgJWQsIGxvY2FsICVkXG4iLAotCSAgICAgICBtcGNfcmVjb3JkLCBtLT50cmFuc190eXBlLCBtLT50cmFuc19xdWFkLCBtLT50cmFuc19nbG9iYWwsCi0JICAgICAgIG0tPnRyYW5zX2xvY2FsKTsKLQotCWlmIChtcGNfcmVjb3JkID49IE1BWF9NUENfRU5UUlkpCi0JCXByaW50ayhLRVJOX0VSUiAiTUFYX01QQ19FTlRSWSBleGNlZWRlZCFcbiIpOwotCWVsc2UKLQkJdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0gPSBtOwkvKiBzdGFzaCB0aGlzIGZvciBsYXRlciAqLwotCWlmIChtLT50cmFuc19xdWFkIDwgTUFYX05VTU5PREVTICYmICFub2RlX29ubGluZShtLT50cmFuc19xdWFkKSkKLQkJbm9kZV9zZXRfb25saW5lKG0tPnRyYW5zX3F1YWQpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtcGZfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqbXAsIGludCBsZW4pCi17Ci0JaW50IHN1bSA9IDA7Ci0KLQl3aGlsZSAobGVuLS0pCi0JCXN1bSArPSAqbXArKzsKLQotCXJldHVybiBzdW0gJiAweEZGOwotfQotCi0vKgotICogUmVhZC9wYXJzZSB0aGUgTVBDIG9lbSB0YWJsZXMKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc21wX3JlYWRfbXBjX29lbShzdHJ1Y3QgbXBjX29lbXRhYmxlICpvZW10YWJsZSwKLQkJCQkgICAgdW5zaWduZWQgc2hvcnQgb2Vtc2l6ZSkKLXsKLQlpbnQgY291bnQgPSBzaXplb2YoKm9lbXRhYmxlKTsJLyogdGhlIGhlYWRlciBzaXplICovCi0JdW5zaWduZWQgY2hhciAqb2VtcHRyID0gKCh1bnNpZ25lZCBjaGFyICopb2VtdGFibGUpICsgY291bnQ7Ci0KLQltcGNfcmVjb3JkID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBhbiBPRU0gTVBDIHRhYmxlIGF0ICU4cCAtIHBhcnNpbmcgaXQgLi4uIFxuIiwKLQkgICAgICAgb2VtdGFibGUpOwotCWlmIChtZW1jbXAob2VtdGFibGUtPnNpZ25hdHVyZSwgTVBDX09FTV9TSUdOQVRVUkUsIDQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJTTVAgbXBjIG9lbXRhYmxlOiBiYWQgc2lnbmF0dXJlIFslYyVjJWMlY10hXG4iLAotCQkgICAgICAgb2VtdGFibGUtPnNpZ25hdHVyZVswXSwgb2VtdGFibGUtPnNpZ25hdHVyZVsxXSwKLQkJICAgICAgIG9lbXRhYmxlLT5zaWduYXR1cmVbMl0sIG9lbXRhYmxlLT5zaWduYXR1cmVbM10pOwotCQlyZXR1cm47Ci0JfQotCWlmIChtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKilvZW10YWJsZSwgb2VtdGFibGUtPmxlbmd0aCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU01QIG9lbSBtcHRhYmxlOiBjaGVja3N1bSBlcnJvciFcbiIpOwotCQlyZXR1cm47Ci0JfQotCXdoaWxlIChjb3VudCA8IG9lbXRhYmxlLT5sZW5ndGgpIHsKLQkJc3dpdGNoICgqb2VtcHRyKSB7Ci0JCWNhc2UgTVBfVFJBTlNMQVRJT046Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKm0gPQotCQkJCSAgICAoc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKilvZW1wdHI7Ci0JCQkJTVBfdHJhbnNsYXRpb25faW5mbyhtKTsKLQkJCQlvZW1wdHIgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCSsrbXBjX3JlY29yZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJVbnJlY29nbmlzZWQgT0VNIHRhYmxlIGVudHJ5IHR5cGUhIC0gJWRcbiIsCi0JCQkJICAgICAgIChpbnQpKm9lbXB0cik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBudW1hcV9zZXR1cF9pb2FwaWNfaWRzKHZvaWQpCi17Ci0JLyogc28gY2FuIHNraXAgaXQgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbnVtYXFfdXBkYXRlX2dlbmFwaWModm9pZCkKLXsKLQlnZW5hcGljLT53YWtldXBfY3B1ID0gd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHg4Nl9xdWlya3MgbnVtYXFfeDg2X3F1aXJrcyBfX2luaXRkYXRhID0gewotCS5hcmNoX3ByZV90aW1lX2luaXQJPSBudW1hcV9wcmVfdGltZV9pbml0LAotCS5hcmNoX3RpbWVfaW5pdAkJPSBOVUxMLAotCS5hcmNoX3ByZV9pbnRyX2luaXQJPSBOVUxMLAotCS5hcmNoX21lbW9yeV9zZXR1cAk9IE5VTEwsCi0JLmFyY2hfaW50cl9pbml0CQk9IE5VTEwsCi0JLmFyY2hfdHJhcF9pbml0CQk9IE5VTEwsCi0JLm1hY2hfZ2V0X3NtcF9jb25maWcJPSBOVUxMLAotCS5tYWNoX2ZpbmRfc21wX2NvbmZpZwk9IE5VTEwsCi0JLm1wY19yZWNvcmQJCT0gJm1wY19yZWNvcmQsCi0JLm1wY19hcGljX2lkCQk9IG1wY19hcGljX2lkLAotCS5tcGNfb2VtX2J1c19pbmZvCT0gbXBjX29lbV9idXNfaW5mbywKLQkubXBjX29lbV9wY2lfYnVzCT0gbXBjX29lbV9wY2lfYnVzLAotCS5zbXBfcmVhZF9tcGNfb2VtCT0gc21wX3JlYWRfbXBjX29lbSwKLQkuc2V0dXBfaW9hcGljX2lkcwk9IG51bWFxX3NldHVwX2lvYXBpY19pZHMsCi0JLnVwZGF0ZV9nZW5hcGljCQk9IG51bWFxX3VwZGF0ZV9nZW5hcGljLAotfTsKLQotdm9pZCBudW1hcV9tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCi17Ci0JaWYgKHN0cm5jbXAob2VtLCAiSUJNIE5VTUEiLCA4KSkKLQkJcHJpbnRrKCJXYXJuaW5nISAgTm90IGEgTlVNQS1RIHN5c3RlbSFcbiIpOwotCWVsc2UKLQkJZm91bmRfbnVtYXEgPSAxOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgZWFybHlfY2hlY2tfbnVtYXEodm9pZCkKLXsKLQkvKgotCSAqIEZpbmQgcG9zc2libGUgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgotCSAqLwotCWVhcmx5X2ZpbmRfc21wX2NvbmZpZygpOwotCS8qCi0JICogZ2V0IGJvb3QtdGltZSBTTVAgY29uZmlndXJhdGlvbjoKLQkgKi8KLQlpZiAoc21wX2ZvdW5kX2NvbmZpZykKLQkJZWFybHlfZ2V0X3NtcF9jb25maWcoKTsKLQotCWlmIChmb3VuZF9udW1hcSkKLQkJeDg2X3F1aXJrcyA9ICZudW1hcV94ODZfcXVpcmtzOwotfQotCi1pbnQgX19pbml0IGdldF9tZW1jZmdfbnVtYXEodm9pZCkKLXsKLQllYXJseV9jaGVja19udW1hcSgpOwotCWlmICghZm91bmRfbnVtYXEpCi0JCXJldHVybiAwOwotCXNtcF9kdW1wX3FjdCgpOwotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jCmluZGV4IDk1Nzc3YjAuLjNhN2M1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMKQEAgLTI2LDEzICsyNiwzIEBACiB9OwogRVhQT1JUX1NZTUJPTChwdl9sb2NrX29wcyk7CiAKLXZvaWQgX19pbml0IHBhcmF2aXJ0X3VzZV9ieXRlbG9ja3Modm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JcHZfbG9ja19vcHMuc3Bpbl9pc19sb2NrZWQgPSBfX2J5dGVfc3Bpbl9pc19sb2NrZWQ7Ci0JcHZfbG9ja19vcHMuc3Bpbl9pc19jb250ZW5kZWQgPSBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQ7Ci0JcHZfbG9ja19vcHMuc3Bpbl9sb2NrID0gX19ieXRlX3NwaW5fbG9jazsKLQlwdl9sb2NrX29wcy5zcGluX3RyeWxvY2sgPSBfX2J5dGVfc3Bpbl90cnlsb2NrOwotCXB2X2xvY2tfb3BzLnNwaW5fdW5sb2NrID0gX19ieXRlX3NwaW5fdW5sb2NrOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCmluZGV4IGM2NTIwYTQuLjYzZGQzNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtNDQsNiArNDMsMTcgQEAKIHsKIH0KIAorLyogaWRlbnRpdHkgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSBpbmxpbmVkICovCit1MzIgX3BhcmF2aXJ0X2lkZW50XzMyKHUzMiB4KQoreworCXJldHVybiB4OworfQorCit1NjQgX3BhcmF2aXJ0X2lkZW50XzY0KHU2NCB4KQoreworCXJldHVybiB4OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgZGVmYXVsdF9iYW5uZXIodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJCb290aW5nIHBhcmF2aXJ0dWFsaXplZCBrZXJuZWwgb24gJXNcbiIsCkBAIC0xMzgsOSArMTQ4LDE2IEBACiAJaWYgKG9wZnVuYyA9PSBOVUxMKQogCQkvKiBJZiB0aGVyZSdzIG5vIGZ1bmN0aW9uLCBwYXRjaCBpdCB3aXRoIGEgdWQyYSAoQlVHKSAqLwogCQlyZXQgPSBwYXJhdmlydF9wYXRjaF9pbnNucyhpbnNuYnVmLCBsZW4sIHVkMmEsIHVkMmErc2l6ZW9mKHVkMmEpKTsKLQllbHNlIGlmIChvcGZ1bmMgPT0gcGFyYXZpcnRfbm9wKQorCWVsc2UgaWYgKG9wZnVuYyA9PSBfcGFyYXZpcnRfbm9wKQogCQkvKiBJZiB0aGUgb3BlcmF0aW9uIGlzIGEgbm9wLCB0aGVuIG5vcCB0aGUgY2FsbHNpdGUgKi8KIAkJcmV0ID0gcGFyYXZpcnRfcGF0Y2hfbm9wKCk7CisKKwkvKiBpZGVudGl0eSBmdW5jdGlvbnMganVzdCByZXR1cm4gdGhlaXIgc2luZ2xlIGFyZ3VtZW50ICovCisJZWxzZSBpZiAob3BmdW5jID09IF9wYXJhdmlydF9pZGVudF8zMikKKwkJcmV0ID0gcGFyYXZpcnRfcGF0Y2hfaWRlbnRfMzIoaW5zbmJ1ZiwgbGVuKTsKKwllbHNlIGlmIChvcGZ1bmMgPT0gX3BhcmF2aXJ0X2lkZW50XzY0KQorCQlyZXQgPSBwYXJhdmlydF9wYXRjaF9pZGVudF82NChpbnNuYnVmLCBsZW4pOworCiAJZWxzZSBpZiAodHlwZSA9PSBQQVJBVklSVF9QQVRDSChwdl9jcHVfb3BzLmlyZXQpIHx8CiAJCSB0eXBlID09IFBBUkFWSVJUX1BBVENIKHB2X2NwdV9vcHMuaXJxX2VuYWJsZV9zeXNleGl0KSB8fAogCQkgdHlwZSA9PSBQQVJBVklSVF9QQVRDSChwdl9jcHVfb3BzLnVzZXJnc19zeXNyZXQzMikgfHwKQEAgLTMxOCwxMCArMzM1LDEwIEBACiAKIHN0cnVjdCBwdl9pcnFfb3BzIHB2X2lycV9vcHMgPSB7CiAJLmluaXRfSVJRID0gbmF0aXZlX2luaXRfSVJRLAotCS5zYXZlX2ZsID0gbmF0aXZlX3NhdmVfZmwsCi0JLnJlc3RvcmVfZmwgPSBuYXRpdmVfcmVzdG9yZV9mbCwKLQkuaXJxX2Rpc2FibGUgPSBuYXRpdmVfaXJxX2Rpc2FibGUsCi0JLmlycV9lbmFibGUgPSBuYXRpdmVfaXJxX2VuYWJsZSwKKwkuc2F2ZV9mbCA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUobmF0aXZlX3NhdmVfZmwpLAorCS5yZXN0b3JlX2ZsID0gX19QVl9JU19DQUxMRUVfU0FWRShuYXRpdmVfcmVzdG9yZV9mbCksCisJLmlycV9kaXNhYmxlID0gX19QVl9JU19DQUxMRUVfU0FWRShuYXRpdmVfaXJxX2Rpc2FibGUpLAorCS5pcnFfZW5hYmxlID0gX19QVl9JU19DQUxMRUVfU0FWRShuYXRpdmVfaXJxX2VuYWJsZSksCiAJLnNhZmVfaGFsdCA9IG5hdGl2ZV9zYWZlX2hhbHQsCiAJLmhhbHQgPSBuYXRpdmVfaGFsdCwKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC0zOTksNiArNDE2LDE0IEBACiAjZW5kaWYKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZfUEFFKQorLyogMzItYml0IHBhZ2V0YWJsZSBlbnRyaWVzICovCisjZGVmaW5lIFBURV9JREVOVAlfX1BWX0lTX0NBTExFRV9TQVZFKF9wYXJhdmlydF9pZGVudF8zMikKKyNlbHNlCisvKiA2NC1iaXQgcGFnZXRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgUFRFX0lERU5UCV9fUFZfSVNfQ0FMTEVFX1NBVkUoX3BhcmF2aXJ0X2lkZW50XzY0KQorI2VuZGlmCisKIHN0cnVjdCBwdl9tbXVfb3BzIHB2X21tdV9vcHMgPSB7CiAjaWZuZGVmIENPTkZJR19YODZfNjQKIAkucGFnZXRhYmxlX3NldHVwX3N0YXJ0ID0gbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydCwKQEAgLTQ1MCwyMiArNDc1LDIzIEBACiAJLnBtZF9jbGVhciA9IG5hdGl2ZV9wbWRfY2xlYXIsCiAjZW5kaWYKIAkuc2V0X3B1ZCA9IG5hdGl2ZV9zZXRfcHVkLAotCS5wbWRfdmFsID0gbmF0aXZlX3BtZF92YWwsCi0JLm1ha2VfcG1kID0gbmF0aXZlX21ha2VfcG1kLAorCisJLnBtZF92YWwgPSBQVEVfSURFTlQsCisJLm1ha2VfcG1kID0gUFRFX0lERU5ULAogCiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0Ci0JLnB1ZF92YWwgPSBuYXRpdmVfcHVkX3ZhbCwKLQkubWFrZV9wdWQgPSBuYXRpdmVfbWFrZV9wdWQsCisJLnB1ZF92YWwgPSBQVEVfSURFTlQsCisJLm1ha2VfcHVkID0gUFRFX0lERU5ULAorCiAJLnNldF9wZ2QgPSBuYXRpdmVfc2V0X3BnZCwKICNlbmRpZgogI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgPj0gMyAqLwogCi0JLnB0ZV92YWwgPSBuYXRpdmVfcHRlX3ZhbCwKLQkucHRlX2ZsYWdzID0gbmF0aXZlX3B0ZV9mbGFncywKLQkucGdkX3ZhbCA9IG5hdGl2ZV9wZ2RfdmFsLAorCS5wdGVfdmFsID0gUFRFX0lERU5ULAorCS5wZ2RfdmFsID0gUFRFX0lERU5ULAogCi0JLm1ha2VfcHRlID0gbmF0aXZlX21ha2VfcHRlLAotCS5tYWtlX3BnZCA9IG5hdGl2ZV9tYWtlX3BnZCwKKwkubWFrZV9wdGUgPSBQVEVfSURFTlQsCisJLm1ha2VfcGdkID0gUFRFX0lERU5ULAogCiAJLmR1cF9tbWFwID0gcGFyYXZpcnRfbm9wLAogCS5leGl0X21tYXAgPSBwYXJhdmlydF9ub3AsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnRfcGF0Y2hfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF8zMi5jCmluZGV4IDlmZTY0NGYuLmQ5ZjMyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF8zMi5jCkBAIC0xMiw2ICsxMiwxOCBAQAogREVGX05BVElWRShwdl9jcHVfb3BzLCBjbHRzLCAiY2x0cyIpOwogREVGX05BVElWRShwdl9jcHVfb3BzLCByZWFkX3RzYywgInJkdHNjIik7CiAKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lkZW50XzMyKHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbikKK3sKKwkvKiBhcmcgaW4gJWVheCwgcmV0dXJuIGluICVlYXggKi8KKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfNjQodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCS8qIGFyZyBpbiAlZWR4OiVlYXgsIHJldHVybiBpbiAlZWR4OiVlYXggKi8KKwlyZXR1cm4gMDsKK30KKwogdW5zaWduZWQgbmF0aXZlX3BhdGNoKHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaWJ1ZiwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnRfcGF0Y2hfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF82NC5jCmluZGV4IDA2MWQwMWQuLjNmMDhmMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF82NC5jCkBAIC0xOSw2ICsxOSwyMSBAQAogREVGX05BVElWRShwdl9jcHVfb3BzLCB1c2VyZ3Nfc3lzcmV0MzIsICJzd2FwZ3M7IHN5c3JldGwiKTsKIERFRl9OQVRJVkUocHZfY3B1X29wcywgc3dhcGdzLCAic3dhcGdzIik7CiAKK0RFRl9OQVRJVkUoLCBtb3YzMiwgIm1vdiAlZWRpLCAlZWF4Iik7CitERUZfTkFUSVZFKCwgbW92NjQsICJtb3YgJXJkaSwgJXJheCIpOworCit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZGVudF8zMih2b2lkICppbnNuYnVmLCB1bnNpZ25lZCBsZW4pCit7CisJcmV0dXJuIHBhcmF2aXJ0X3BhdGNoX2luc25zKGluc25idWYsIGxlbiwKKwkJCQkgICAgc3RhcnRfX21vdjMyLCBlbmRfX21vdjMyKTsKK30KKwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfNjQodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCXJldHVybiBwYXJhdmlydF9wYXRjaF9pbnNucyhpbnNuYnVmLCBsZW4sCisJCQkJICAgIHN0YXJ0X19tb3Y2NCwgZW5kX19tb3Y2NCk7Cit9CisKIHVuc2lnbmVkIG5hdGl2ZV9wYXRjaCh1OCB0eXBlLCB1MTYgY2xvYmJlcnMsIHZvaWQgKmlidWYsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2JlX3JvbXNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9iZV9yb21zXzMyLmMKaW5kZXggNjc1YTQ4Yy4uMDcxZTdmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2JlX3JvbXNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvYmVfcm9tc18zMi5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8c2V0dXBfYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cF9hcmNoLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3lzdGVtX3JvbV9yZXNvdXJjZSA9IHsKIAkubmFtZQk9ICJTeXN0ZW0gUk9NIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDZkMTJmN2UuLjZhZmE1MjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtMSw4ICsxLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgogCiB1bnNpZ25lZCBsb25nIGlkbGVfaGFsdDsKIEVYUE9SVF9TWU1CT0woaWRsZV9oYWx0KTsKQEAgLTU2LDYgKzU5LDE5MiBAQAogfQogCiAvKgorICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KKyAqLwordm9pZCBleGl0X3RocmVhZCh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJm1lLT50aHJlYWQ7CisKKwlpZiAobWUtPnRocmVhZC5pb19iaXRtYXBfcHRyKSB7CisJCXN0cnVjdCB0c3Nfc3RydWN0ICp0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgZ2V0X2NwdSgpKTsKKworCQlrZnJlZSh0LT5pb19iaXRtYXBfcHRyKTsKKwkJdC0+aW9fYml0bWFwX3B0ciA9IE5VTEw7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JT19CSVRNQVApOworCQkvKgorCQkgKiBDYXJlZnVsLCBjbGVhciB0aGlzIGluIHRoZSBUU1MgdG9vOgorCQkgKi8KKwkJbWVtc2V0KHRzcy0+aW9fYml0bWFwLCAweGZmLCB0LT5pb19iaXRtYXBfbWF4KTsKKwkJdC0+aW9fYml0bWFwX21heCA9IDA7CisJCXB1dF9jcHUoKTsKKwl9CisKKwlkc19leGl0X3RocmVhZChjdXJyZW50KTsKK30KKwordm9pZCBmbHVzaF90aHJlYWQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0FCSV9QRU5ESU5HKSkgeworCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfQUJJX1BFTkRJTkcpOworCQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfSUEzMikpIHsKKwkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JQTMyKTsKKwkJfSBlbHNlIHsKKwkJCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfSUEzMik7CisJCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19DT01QQVQ7CisJCX0KKwl9CisjZW5kaWYKKworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9ERUJVRyk7CisKKwl0c2stPnRocmVhZC5kZWJ1Z3JlZzAgPSAwOworCXRzay0+dGhyZWFkLmRlYnVncmVnMSA9IDA7CisJdHNrLT50aHJlYWQuZGVidWdyZWcyID0gMDsKKwl0c2stPnRocmVhZC5kZWJ1Z3JlZzMgPSAwOworCXRzay0+dGhyZWFkLmRlYnVncmVnNiA9IDA7CisJdHNrLT50aHJlYWQuZGVidWdyZWc3ID0gMDsKKwltZW1zZXQodHNrLT50aHJlYWQudGxzX2FycmF5LCAwLCBzaXplb2YodHNrLT50aHJlYWQudGxzX2FycmF5KSk7CisJLyoKKwkgKiBGb3JnZXQgY29wcm9jZXNzb3Igc3RhdGUuLgorCSAqLworCXRzay0+ZnB1X2NvdW50ZXIgPSAwOworCWNsZWFyX2ZwdSh0c2spOworCWNsZWFyX3VzZWRfbWF0aCgpOworfQorCitzdGF0aWMgdm9pZCBoYXJkX2Rpc2FibGVfVFNDKHZvaWQpCit7CisJd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1RTRCk7Cit9CisKK3ZvaWQgZGlzYWJsZV9UU0Modm9pZCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAoIXRlc3RfYW5kX3NldF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQorCQkvKgorCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKKwkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KKwkJICovCisJCWhhcmRfZGlzYWJsZV9UU0MoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBoYXJkX2VuYWJsZV9UU0Modm9pZCkKK3sKKwl3cml0ZV9jcjQocmVhZF9jcjQoKSAmIH5YODZfQ1I0X1RTRCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9UU0Modm9pZCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKKwkJLyoKKwkJICogTXVzdCBmbGlwIHRoZSBDUFUgc3RhdGUgc3luY2hyb25vdXNseSB3aXRoCisJCSAqIFRJRl9OT1RTQyBpbiB0aGUgY3VycmVudCBydW5uaW5nIGNvbnRleHQuCisJCSAqLworCQloYXJkX2VuYWJsZV9UU0MoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitpbnQgZ2V0X3RzY19tb2RlKHVuc2lnbmVkIGxvbmcgYWRyKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQorCQl2YWwgPSBQUl9UU0NfU0lHU0VHVjsKKwllbHNlCisJCXZhbCA9IFBSX1RTQ19FTkFCTEU7CisKKwlyZXR1cm4gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFkcik7Cit9CisKK2ludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCkKK3sKKwlpZiAodmFsID09IFBSX1RTQ19TSUdTRUdWKQorCQlkaXNhYmxlX1RTQygpOworCWVsc2UgaWYgKHZhbCA9PSBQUl9UU0NfRU5BQkxFKQorCQllbmFibGVfVFNDKCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCit2b2lkIF9fc3dpdGNoX3RvX3h0cmEoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2X3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF9wLAorCQkgICAgICBzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2LCAqbmV4dDsKKworCXByZXYgPSAmcHJldl9wLT50aHJlYWQ7CisJbmV4dCA9ICZuZXh0X3AtPnRocmVhZDsKKworCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9EU19BUkVBX01TUikgfHwKKwkgICAgdGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfRFNfQVJFQV9NU1IpKQorCQlkc19zd2l0Y2hfdG8ocHJldl9wLCBuZXh0X3ApOworCWVsc2UgaWYgKG5leHQtPmRlYnVnY3RsbXNyICE9IHByZXYtPmRlYnVnY3RsbXNyKQorCQl1cGRhdGVfZGVidWdjdGxtc3IobmV4dC0+ZGVidWdjdGxtc3IpOworCisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RFQlVHKSkgeworCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWcwLCAwKTsKKwkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMSwgMSk7CisJCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzIsIDIpOworCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWczLCAzKTsKKwkJLyogbm8gNCBhbmQgNSAqLworCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWc2LCA2KTsKKwkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnNywgNyk7CisJfQorCisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX05PVFNDKSBeCisJICAgIHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX05PVFNDKSkgeworCQkvKiBwcmV2IGFuZCBuZXh0IGFyZSBkaWZmZXJlbnQgKi8KKwkJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX05PVFNDKSkKKwkJCWhhcmRfZGlzYWJsZV9UU0MoKTsKKwkJZWxzZQorCQkJaGFyZF9lbmFibGVfVFNDKCk7CisJfQorCisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0lPX0JJVE1BUCkpIHsKKwkJLyoKKwkJICogQ29weSB0aGUgcmVsZXZhbnQgcmFuZ2Ugb2YgdGhlIElPIGJpdG1hcC4KKwkJICogTm9ybWFsbHkgdGhpcyBpcyAxMjggYnl0ZXMgb3IgbGVzczoKKwkJICovCisJCW1lbWNweSh0c3MtPmlvX2JpdG1hcCwgbmV4dC0+aW9fYml0bWFwX3B0ciwKKwkJICAgICAgIG1heChwcmV2LT5pb19iaXRtYXBfbWF4LCBuZXh0LT5pb19iaXRtYXBfbWF4KSk7CisJfSBlbHNlIGlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9JT19CSVRNQVApKSB7CisJCS8qCisJCSAqIENsZWFyIGFueSBwb3NzaWJsZSBsZWZ0b3ZlciBiaXRzOgorCQkgKi8KKwkJbWVtc2V0KHRzcy0+aW9fYml0bWFwLCAweGZmLCBwcmV2LT5pb19iaXRtYXBfbWF4KTsKKwl9Cit9CisKK2ludCBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gZG9fZm9yayhTSUdDSExELCByZWdzLT5zcCwgcmVncywgMCwgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRyaXZpYWwsIGFuZCBvbiB0aGUgZmFjZSBvZiBpdCBsb29rcyBsaWtlIGl0CisgKiBjb3VsZCBlcXVhbGx5IHdlbGwgYmUgZG9uZSBpbiB1c2VyIG1vZGUuCisgKgorICogTm90IHNvLCBmb3IgcXVpdGUgdW5vYnZpb3VzIHJlYXNvbnMgLSByZWdpc3RlciBwcmVzc3VyZS4KKyAqIEluIHVzZXIgbW9kZSB2Zm9yaygpIGNhbm5vdCBoYXZlIGEgc3RhY2sgZnJhbWUsIGFuZCBpZgorICogZG9uZSBieSBjYWxsaW5nIHRoZSAiY2xvbmUoKSIgc3lzdGVtIGNhbGwgZGlyZWN0bHksIHlvdQorICogZG8gbm90IGhhdmUgZW5vdWdoIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVycyB0byBob2xkIGFsbAorICogdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkLgorICovCitpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBkb19mb3JrKENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0gfCBTSUdDSExELCByZWdzLT5zcCwgcmVncywgMCwKKwkJICAgICAgIE5VTEwsIE5VTEwpOworfQorCisKKy8qCiAgKiBJZGxlIHJlbGF0ZWQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMKICAqLwogdW5zaWduZWQgbG9uZyBib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gMDsKQEAgLTM1MCw3ICs1MzksNyBAQAogCiB2b2lkIF9fY3B1aW5pdCBzZWxlY3RfaWRsZV9yb3V0aW5lKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLSNpZmRlZiBDT05GSUdfWDg2X1NNUAorI2lmZGVmIENPTkZJR19TTVAKIAlpZiAocG1faWRsZSA9PSBwb2xsX2lkbGUgJiYgc21wX251bV9zaWJsaW5ncyA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogcG9sbGluZyBpZGxlIGFuZCBIVCBlbmFibGVkLCIKIAkJCSIgcGVyZm9ybWFuY2UgbWF5IGRlZ3JhZGUuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IGJkNGRhMmEuLjE0MDE0ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9zdGFja3Byb3RlY3Rvci5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTY2LDkgKzY3LDYgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjdXJyZW50X3Rhc2spID0gJmluaXRfdGFzazsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjdXJyZW50X3Rhc2spOwogCi1ERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9udW1iZXIpOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9udW1iZXIpOwotCiAvKgogICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuCiAgKi8KQEAgLTk0LDYgKzkyLDE1IEBACiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorCS8qCisJICogSWYgd2UncmUgdGhlIG5vbi1ib290IENQVSwgbm90aGluZyBzZXQgdGhlIHN0YWNrIGNhbmFyeSB1cAorCSAqIGZvciB1cy4gIENQVTAgYWxyZWFkeSBoYXMgaXQgaW5pdGlhbGl6ZWQgYnV0IG5vIGhhcm0gaW4KKwkgKiBkb2luZyBpdCBhZ2Fpbi4gIFRoaXMgaXMgYSBnb29kIHBsYWNlIGZvciB1cGRhdGluZyBpdCwgYXMKKwkgKiB3ZSB3b250IGV2ZXIgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiAoc28gdGhlIGludmFsaWQKKwkgKiBjYW5hcmllcyBhbHJlYWR5IG9uIHRoZSBzdGFjayB3b250IGV2ZXIgdHJpZ2dlcikuCisJICovCisJYm9vdF9pbml0X3N0YWNrX2NhbmFyeSgpOworCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKIAogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCkBAIC0xMDgsNyArMTE1LDYgQEAKIAkJCQlwbGF5X2RlYWQoKTsKIAogCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlkbGVfdGltZXN0YW1wID0gamlmZmllczsKIAkJCS8qIERvbid0IHRyYWNlIGlycXMgb2ZmIGZvciBpZGxlICovCiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJCXBtX2lkbGUoKTsKQEAgLTEzMiw3ICsxMzgsNyBAQAogCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKIAkJc3AgPSByZWdzLT5zcDsKIAkJc3MgPSByZWdzLT5zcyAmIDB4ZmZmZjsKLQkJc2F2ZXNlZ21lbnQoZ3MsIGdzKTsKKwkJZ3MgPSBnZXRfdXNlcl9ncyhyZWdzKTsKIAl9IGVsc2UgewogCQlzcCA9ICh1bnNpZ25lZCBsb25nKSAoJnJlZ3MtPnNwKTsKIAkJc2F2ZXNlZ21lbnQoc3MsIHNzKTsKQEAgLTIxMyw2ICsyMTksNyBAQAogCXJlZ3MuZHMgPSBfX1VTRVJfRFM7CiAJcmVncy5lcyA9IF9fVVNFUl9EUzsKIAlyZWdzLmZzID0gX19LRVJORUxfUEVSQ1BVOworCXJlZ3MuZ3MgPSBfX0tFUk5FTF9TVEFDS19DQU5BUlk7CiAJcmVncy5vcmlnX2F4ID0gLTE7CiAJcmVncy5pcCA9ICh1bnNpZ25lZCBsb25nKSBrZXJuZWxfdGhyZWFkX2hlbHBlcjsKIAlyZWdzLmNzID0gX19LRVJORUxfQ1MgfCBnZXRfa2VybmVsX3JwbCgpOwpAQCAtMjIzLDU1ICsyMzAsNiBAQAogfQogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIAotLyoKLSAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCi0gKi8KLXZvaWQgZXhpdF90aHJlYWQodm9pZCkKLXsKLQkvKiBUaGUgcHJvY2VzcyBtYXkgaGF2ZSBhbGxvY2F0ZWQgYW4gaW8gcG9ydCBiaXRtYXAuLi4gbnVrZSBpdC4gKi8KLQlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfSU9fQklUTUFQKSkpIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKLQkJaW50IGNwdSA9IGdldF9jcHUoKTsKLQkJc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOwotCi0JCWtmcmVlKHQtPmlvX2JpdG1hcF9wdHIpOwotCQl0LT5pb19iaXRtYXBfcHRyID0gTlVMTDsKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lPX0JJVE1BUCk7Ci0JCS8qCi0JCSAqIENhcmVmdWwsIGNsZWFyIHRoaXMgaW4gdGhlIFRTUyB0b286Ci0JCSAqLwotCQltZW1zZXQodHNzLT5pb19iaXRtYXAsIDB4ZmYsIHRzcy0+aW9fYml0bWFwX21heCk7Ci0JCXQtPmlvX2JpdG1hcF9tYXggPSAwOwotCQl0c3MtPmlvX2JpdG1hcF9vd25lciA9IE5VTEw7Ci0JCXRzcy0+aW9fYml0bWFwX21heCA9IDA7Ci0JCXRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IElOVkFMSURfSU9fQklUTUFQX09GRlNFVDsKLQkJcHV0X2NwdSgpOwotCX0KLQotCWRzX2V4aXRfdGhyZWFkKGN1cnJlbnQpOwotfQotCi12b2lkIGZsdXNoX3RocmVhZCh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCXRzay0+dGhyZWFkLmRlYnVncmVnMCA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWcxID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzIgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnMyA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWc2ID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzcgPSAwOwotCW1lbXNldCh0c2stPnRocmVhZC50bHNfYXJyYXksIDAsIHNpemVvZih0c2stPnRocmVhZC50bHNfYXJyYXkpKTsKLQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfREVCVUcpOwotCS8qCi0JICogRm9yZ2V0IGNvcHJvY2Vzc29yIHN0YXRlLi4KLQkgKi8KLQl0c2stPmZwdV9jb3VudGVyID0gMDsKLQljbGVhcl9mcHUodHNrKTsKLQljbGVhcl91c2VkX21hdGgoKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlCVUdfT04oZGVhZF90YXNrLT5tbSk7CkBAIC0zMDUsNyArMjYzLDcgQEAKIAogCXAtPnRocmVhZC5pcCA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0Jc2F2ZXNlZ21lbnQoZ3MsIHAtPnRocmVhZC5ncyk7CisJdGFza191c2VyX2dzKHApID0gZ2V0X3VzZXJfZ3MocmVncyk7CiAKIAl0c2sgPSBjdXJyZW50OwogCWlmICh1bmxpa2VseSh0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JT19CSVRNQVApKSkgewpAQCAtMzQzLDcgKzMwMSw3IEBACiB2b2lkCiBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X2lwLCB1bnNpZ25lZCBsb25nIG5ld19zcCkKIHsKLQlfX2FzbV9fKCJtb3ZsICUwLCAlJWdzIiA6IDogInIiKDApKTsKKwlzZXRfdXNlcl9ncyhyZWdzLCAwKTsKIAlyZWdzLT5mcwkJPSAwOwogCXNldF9mcyhVU0VSX0RTKTsKIAlyZWdzLT5kcwkJPSBfX1VTRVJfRFM7CkBAIC0zNTksMTI3ICszMTcsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfdGhyZWFkKTsKIAotc3RhdGljIHZvaWQgaGFyZF9kaXNhYmxlX1RTQyh2b2lkKQotewotCXdyaXRlX2NyNChyZWFkX2NyNCgpIHwgWDg2X0NSNF9UU0QpOwotfQotCi12b2lkIGRpc2FibGVfVFNDKHZvaWQpCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKLQkJLyoKLQkJICogTXVzdCBmbGlwIHRoZSBDUFUgc3RhdGUgc3luY2hyb25vdXNseSB3aXRoCi0JCSAqIFRJRl9OT1RTQyBpbiB0aGUgY3VycmVudCBydW5uaW5nIGNvbnRleHQuCi0JCSAqLwotCQloYXJkX2Rpc2FibGVfVFNDKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgaGFyZF9lbmFibGVfVFNDKHZvaWQpCi17Ci0Jd3JpdGVfY3I0KHJlYWRfY3I0KCkgJiB+WDg2X0NSNF9UU0QpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfVFNDKHZvaWQpCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RTQykpCi0JCS8qCi0JCSAqIE11c3QgZmxpcCB0aGUgQ1BVIHN0YXRlIHN5bmNocm9ub3VzbHkgd2l0aAotCQkgKiBUSUZfTk9UU0MgaW4gdGhlIGN1cnJlbnQgcnVubmluZyBjb250ZXh0LgotCQkgKi8KLQkJaGFyZF9lbmFibGVfVFNDKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotaW50IGdldF90c2NfbW9kZSh1bnNpZ25lZCBsb25nIGFkcikKLXsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCi0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKLQkJdmFsID0gUFJfVFNDX1NJR1NFR1Y7Ci0JZWxzZQotCQl2YWwgPSBQUl9UU0NfRU5BQkxFOwotCi0JcmV0dXJuIHB1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhZHIpOwotfQotCi1pbnQgc2V0X3RzY19tb2RlKHVuc2lnbmVkIGludCB2YWwpCi17Ci0JaWYgKHZhbCA9PSBQUl9UU0NfU0lHU0VHVikKLQkJZGlzYWJsZV9UU0MoKTsKLQllbHNlIGlmICh2YWwgPT0gUFJfVFNDX0VOQUJMRSkKLQkJZW5hYmxlX1RTQygpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIG5vaW5saW5lIHZvaWQKLV9fc3dpdGNoX3RvX3h0cmEoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2X3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF9wLAotCQkgc3RydWN0IHRzc19zdHJ1Y3QgKnRzcykKLXsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldiwgKm5leHQ7Ci0KLQlwcmV2ID0gJnByZXZfcC0+dGhyZWFkOwotCW5leHQgPSAmbmV4dF9wLT50aHJlYWQ7Ci0KLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfRFNfQVJFQV9NU1IpIHx8Ci0JICAgIHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX0RTX0FSRUFfTVNSKSkKLQkJZHNfc3dpdGNoX3RvKHByZXZfcCwgbmV4dF9wKTsKLQllbHNlIGlmIChuZXh0LT5kZWJ1Z2N0bG1zciAhPSBwcmV2LT5kZWJ1Z2N0bG1zcikKLQkJdXBkYXRlX2RlYnVnY3RsbXNyKG5leHQtPmRlYnVnY3RsbXNyKTsKLQotCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9ERUJVRykpIHsKLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMCwgMCk7Ci0JCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzEsIDEpOwotCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWcyLCAyKTsKLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMywgMyk7Ci0JCS8qIG5vIDQgYW5kIDUgKi8KLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnNiwgNik7Ci0JCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzcsIDcpOwotCX0KLQotCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9OT1RTQykgXgotCSAgICB0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9OT1RTQykpIHsKLQkJLyogcHJldiBhbmQgbmV4dCBhcmUgZGlmZmVyZW50ICovCi0JCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9OT1RTQykpCi0JCQloYXJkX2Rpc2FibGVfVFNDKCk7Ci0JCWVsc2UKLQkJCWhhcmRfZW5hYmxlX1RTQygpOwotCX0KLQotCWlmICghdGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfSU9fQklUTUFQKSkgewotCQkvKgotCQkgKiBEaXNhYmxlIHRoZSBiaXRtYXAgdmlhIGFuIGludmFsaWQgb2Zmc2V0LiBXZSBzdGlsbCBjYWNoZQotCQkgKiB0aGUgcHJldmlvdXMgYml0bWFwIG93bmVyIGFuZCB0aGUgSU8gYml0bWFwIGNvbnRlbnRzOgotCQkgKi8KLQkJdHNzLT54ODZfdHNzLmlvX2JpdG1hcF9iYXNlID0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxpa2VseShuZXh0ID09IHRzcy0+aW9fYml0bWFwX293bmVyKSkgewotCQkvKgotCQkgKiBQcmV2aW91cyBvd25lciBvZiB0aGUgYml0bWFwIChoZW5jZSB0aGUgYml0bWFwIGNvbnRlbnQpCi0JCSAqIG1hdGNoZXMgdGhlIG5leHQgdGFzaywgd2UgZG9udCBoYXZlIHRvIGRvIGFueXRoaW5nIGJ1dAotCQkgKiB0byBzZXQgYSB2YWxpZCBvZmZzZXQgaW4gdGhlIFRTUzoKLQkJICovCi0JCXRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IElPX0JJVE1BUF9PRkZTRVQ7Ci0JCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBMYXp5IFRTUydzIEkvTyBiaXRtYXAgY29weS4gV2Ugc2V0IGFuIGludmFsaWQgb2Zmc2V0IGhlcmUKLQkgKiBhbmQgd2UgbGV0IHRoZSB0YXNrIHRvIGdldCBhIEdQRiBpbiBjYXNlIGFuIEkvTyBpbnN0cnVjdGlvbgotCSAqIGlzIHBlcmZvcm1lZC4gIFRoZSBoYW5kbGVyIG9mIHRoZSBHUEYgd2lsbCB2ZXJpZnkgdGhhdCB0aGUKLQkgKiBmYXVsdGluZyB0YXNrIGhhcyBhIHZhbGlkIEkvTyBiaXRtYXAgYW5kLCBpdCB0cnVlLCBkb2VzIHRoZQotCSAqIHJlYWwgY29weSBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24uICBUaGlzIHdpbGwgc2F2ZSB1cwotCSAqIHJlZHVuZGFudCBjb3BpZXMgd2hlbiB0aGUgY3VycmVudGx5IHN3aXRjaGVkIHRhc2sgZG9lcyBub3QKLQkgKiBwZXJmb3JtIGFueSBJL08gZHVyaW5nIGl0cyB0aW1lc2xpY2UuCi0JICovCi0JdHNzLT54ODZfdHNzLmlvX2JpdG1hcF9iYXNlID0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUX0xBWlk7Ci19CiAKIC8qCiAgKglzd2l0Y2hfdG8oeCx5bikgc2hvdWxkIHN3aXRjaCB0YXNrcyBmcm9tIHggdG8geS4KQEAgLTU0MCw3ICszNzcsNyBAQAogCSAqIHVzZWQgJWZzIG9yICVncyAoaXQgZG9lcyBub3QgdG9kYXkpLCBvciBpZiB0aGUga2VybmVsIGlzCiAJICogcnVubmluZyBpbnNpZGUgb2YgYSBoeXBlcnZpc29yIGxheWVyLgogCSAqLwotCXNhdmVzZWdtZW50KGdzLCBwcmV2LT5ncyk7CisJbGF6eV9zYXZlX2dzKHByZXYtPmdzKTsKIAogCS8qCiAJICogTG9hZCB0aGUgcGVyLXRocmVhZCBUaHJlYWQtTG9jYWwgU3RvcmFnZSBkZXNjcmlwdG9yLgpAQCAtNTg2LDY0ICs0MjMsNDQgQEAKIAkgKiBSZXN0b3JlICVncyBpZiBuZWVkZWQgKHdoaWNoIGlzIGNvbW1vbikKIAkgKi8KIAlpZiAocHJldi0+Z3MgfCBuZXh0LT5ncykKLQkJbG9hZHNlZ21lbnQoZ3MsIG5leHQtPmdzKTsKKwkJbGF6eV9sb2FkX2dzKG5leHQtPmdzKTsKIAotCXg4Nl93cml0ZV9wZXJjcHUoY3VycmVudF90YXNrLCBuZXh0X3ApOworCXBlcmNwdV93cml0ZShjdXJyZW50X3Rhc2ssIG5leHRfcCk7CiAKIAlyZXR1cm4gcHJldl9wOwogfQogCi1hc21saW5rYWdlIGludCBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyByZWdzKQotewotCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3Muc3AsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCitpbnQgc3lzX2Nsb25lKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBuZXdzcDsKIAlpbnQgX191c2VyICpwYXJlbnRfdGlkcHRyLCAqY2hpbGRfdGlkcHRyOwogCi0JY2xvbmVfZmxhZ3MgPSByZWdzLmJ4OwotCW5ld3NwID0gcmVncy5jeDsKLQlwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLmR4OwotCWNoaWxkX3RpZHB0ciA9IChpbnQgX191c2VyICopcmVncy5kaTsKKwljbG9uZV9mbGFncyA9IHJlZ3MtPmJ4OworCW5ld3NwID0gcmVncy0+Y3g7CisJcGFyZW50X3RpZHB0ciA9IChpbnQgX191c2VyICopcmVncy0+ZHg7CisJY2hpbGRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5kaTsKIAlpZiAoIW5ld3NwKQotCQluZXdzcCA9IHJlZ3Muc3A7Ci0JcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCAmcmVncywgMCwgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdHJpdmlhbCwgYW5kIG9uIHRoZSBmYWNlIG9mIGl0IGxvb2tzIGxpa2UgaXQKLSAqIGNvdWxkIGVxdWFsbHkgd2VsbCBiZSBkb25lIGluIHVzZXIgbW9kZS4KLSAqCi0gKiBOb3Qgc28sIGZvciBxdWl0ZSB1bm9idmlvdXMgcmVhc29ucyAtIHJlZ2lzdGVyIHByZXNzdXJlLgotICogSW4gdXNlciBtb2RlIHZmb3JrKCkgY2Fubm90IGhhdmUgYSBzdGFjayBmcmFtZSwgYW5kIGlmCi0gKiBkb25lIGJ5IGNhbGxpbmcgdGhlICJjbG9uZSgpIiBzeXN0ZW0gY2FsbCBkaXJlY3RseSwgeW91Ci0gKiBkbyBub3QgaGF2ZSBlbm91Z2ggY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXJzIHRvIGhvbGQgYWxsCi0gKiB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQuCi0gKi8KLWFzbWxpbmthZ2UgaW50IHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyByZWdzKQotewotCXJldHVybiBkb19mb3JrKENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0gfCBTSUdDSExELCByZWdzLnNwLCAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJCW5ld3NwID0gcmVncy0+c3A7CisJcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLCBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOwogfQogCiAvKgogICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCiAgKi8KLWFzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MgcmVncykKK2ludCBzeXNfZXhlY3ZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBlcnJvcjsKIAljaGFyICpmaWxlbmFtZTsKIAotCWZpbGVuYW1lID0gZ2V0bmFtZSgoY2hhciBfX3VzZXIgKikgcmVncy5ieCk7CisJZmlsZW5hbWUgPSBnZXRuYW1lKChjaGFyIF9fdXNlciAqKSByZWdzLT5ieCk7CiAJZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKIAlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKIAkJZ290byBvdXQ7CiAJZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsCi0JCQkoY2hhciBfX3VzZXIgKiBfX3VzZXIgKikgcmVncy5jeCwKLQkJCShjaGFyIF9fdXNlciAqIF9fdXNlciAqKSByZWdzLmR4LAotCQkJJnJlZ3MpOworCQkJKGNoYXIgX191c2VyICogX191c2VyICopIHJlZ3MtPmN4LAorCQkJKGNoYXIgX191c2VyICogX191c2VyICopIHJlZ3MtPmR4LAorCQkJcmVncyk7CiAJaWYgKGVycm9yID09IDApIHsKIAkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHJldHVybiB1c2luZyBzeXNlbnRlci4uICovCiAJCXNldF90aHJlYWRfZmxhZyhUSUZfSVJFVCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCA4NWI0Y2I1Li5hYmI3ZTZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCisjaW5jbHVkZSA8bGludXgvc3RhY2twcm90ZWN0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC00Nyw3ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3BkYS5oPgogI2luY2x1ZGUgPGFzbS9wcmN0bC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CkBAIC01OCw2ICs1OCwxMiBAQAogCiBhc21saW5rYWdlIGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjdXJyZW50X3Rhc2spID0gJmluaXRfdGFzazsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjdXJyZW50X3Rhc2spOworCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBvbGRfcnNwKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBjaGFyLCBpc19pZGxlKTsKKwogdW5zaWduZWQgbG9uZyBrZXJuZWxfdGhyZWFkX2ZsYWdzID0gQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRDsKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKGlkbGVfbm90aWZpZXIpOwpAQCAtNzYsMTMgKzgyLDEzIEBACiAKIHZvaWQgZW50ZXJfaWRsZSh2b2lkKQogewotCXdyaXRlX3BkYShpc2lkbGUsIDEpOworCXBlcmNwdV93cml0ZShpc19pZGxlLCAxKTsKIAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaWRsZV9ub3RpZmllciwgSURMRV9TVEFSVCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdF9pZGxlKHZvaWQpCiB7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdF9wZGEoMCwgaXNpZGxlKSA9PSAwKQorCWlmICh4ODZfdGVzdF9hbmRfY2xlYXJfYml0X3BlcmNwdSgwLCBpc19pZGxlKSA9PSAwKQogCQlyZXR1cm47CiAJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmlkbGVfbm90aWZpZXIsIElETEVfRU5ELCBOVUxMKTsKIH0KQEAgLTExMiw2ICsxMTgsMTYgQEAKIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOworCisJLyoKKwkgKiBJZiB3ZSdyZSB0aGUgbm9uLWJvb3QgQ1BVLCBub3RoaW5nIHNldCB0aGUgc3RhY2sgY2FuYXJ5IHVwCisJICogZm9yIHVzLiAgQ1BVMCBhbHJlYWR5IGhhcyBpdCBpbml0aWFsaXplZCBidXQgbm8gaGFybSBpbgorCSAqIGRvaW5nIGl0IGFnYWluLiAgVGhpcyBpcyBhIGdvb2QgcGxhY2UgZm9yIHVwZGF0aW5nIGl0LCBhcworCSAqIHdlIHdvbnQgZXZlciByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uIChzbyB0aGUgaW52YWxpZAorCSAqIGNhbmFyaWVzIGFscmVhZHkgb24gdGhlIHN0YWNrIHdvbnQgZXZlciB0cmlnZ2VyKS4KKwkgKi8KKwlib290X2luaXRfc3RhY2tfY2FuYXJ5KCk7CisKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CiAJCXRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soMSk7CkBAIC0yMjEsNjEgKzIzNyw2IEBACiAJc2hvd190cmFjZShOVUxMLCByZWdzLCAodm9pZCAqKShyZWdzICsgMSksIHJlZ3MtPmJwKTsKIH0KIAotLyoKLSAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCi0gKi8KLXZvaWQgZXhpdF90aHJlYWQodm9pZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZtZS0+dGhyZWFkOwotCi0JaWYgKG1lLT50aHJlYWQuaW9fYml0bWFwX3B0cikgewotCQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGdldF9jcHUoKSk7Ci0KLQkJa2ZyZWUodC0+aW9fYml0bWFwX3B0cik7Ci0JCXQtPmlvX2JpdG1hcF9wdHIgPSBOVUxMOwotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfSU9fQklUTUFQKTsKLQkJLyoKLQkJICogQ2FyZWZ1bCwgY2xlYXIgdGhpcyBpbiB0aGUgVFNTIHRvbzoKLQkJICovCi0JCW1lbXNldCh0c3MtPmlvX2JpdG1hcCwgMHhmZiwgdC0+aW9fYml0bWFwX21heCk7Ci0JCXQtPmlvX2JpdG1hcF9tYXggPSAwOwotCQlwdXRfY3B1KCk7Ci0JfQotCi0JZHNfZXhpdF90aHJlYWQoY3VycmVudCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0FCSV9QRU5ESU5HKSkgewotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfQUJJX1BFTkRJTkcpOwotCQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfSUEzMikpIHsKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JQTMyKTsKLQkJfSBlbHNlIHsKLQkJCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfSUEzMik7Ci0JCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19DT01QQVQ7Ci0JCX0KLQl9Ci0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0RFQlVHKTsKLQotCXRzay0+dGhyZWFkLmRlYnVncmVnMCA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWcxID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzIgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnMyA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWc2ID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzcgPSAwOwotCW1lbXNldCh0c2stPnRocmVhZC50bHNfYXJyYXksIDAsIHNpemVvZih0c2stPnRocmVhZC50bHNfYXJyYXkpKTsKLQkvKgotCSAqIEZvcmdldCBjb3Byb2Nlc3NvciBzdGF0ZS4uCi0JICovCi0JdHNrLT5mcHVfY291bnRlciA9IDA7Ci0JY2xlYXJfZnB1KHRzayk7Ci0JY2xlYXJfdXNlZF9tYXRoKCk7Ci19Ci0KIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCiB7CiAJaWYgKGRlYWRfdGFzay0+bW0pIHsKQEAgLTM5Nyw3ICszNTgsNyBAQAogCWxvYWRfZ3NfaW5kZXgoMCk7CiAJcmVncy0+aXAJCT0gbmV3X2lwOwogCXJlZ3MtPnNwCQk9IG5ld19zcDsKLQl3cml0ZV9wZGEob2xkcnNwLCBuZXdfc3ApOworCXBlcmNwdV93cml0ZShvbGRfcnNwLCBuZXdfc3ApOwogCXJlZ3MtPmNzCQk9IF9fVVNFUl9DUzsKIAlyZWdzLT5zcwkJPSBfX1VTRVJfRFM7CiAJcmVncy0+ZmxhZ3MJCT0gMHgyMDA7CkBAIC00MDksMTE4ICszNzAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfdGhyZWFkKTsKIAotc3RhdGljIHZvaWQgaGFyZF9kaXNhYmxlX1RTQyh2b2lkKQotewotCXdyaXRlX2NyNChyZWFkX2NyNCgpIHwgWDg2X0NSNF9UU0QpOwotfQotCi12b2lkIGRpc2FibGVfVFNDKHZvaWQpCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKLQkJLyoKLQkJICogTXVzdCBmbGlwIHRoZSBDUFUgc3RhdGUgc3luY2hyb25vdXNseSB3aXRoCi0JCSAqIFRJRl9OT1RTQyBpbiB0aGUgY3VycmVudCBydW5uaW5nIGNvbnRleHQuCi0JCSAqLwotCQloYXJkX2Rpc2FibGVfVFNDKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgaGFyZF9lbmFibGVfVFNDKHZvaWQpCi17Ci0Jd3JpdGVfY3I0KHJlYWRfY3I0KCkgJiB+WDg2X0NSNF9UU0QpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfVFNDKHZvaWQpCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RTQykpCi0JCS8qCi0JCSAqIE11c3QgZmxpcCB0aGUgQ1BVIHN0YXRlIHN5bmNocm9ub3VzbHkgd2l0aAotCQkgKiBUSUZfTk9UU0MgaW4gdGhlIGN1cnJlbnQgcnVubmluZyBjb250ZXh0LgotCQkgKi8KLQkJaGFyZF9lbmFibGVfVFNDKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotaW50IGdldF90c2NfbW9kZSh1bnNpZ25lZCBsb25nIGFkcikKLXsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCi0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKLQkJdmFsID0gUFJfVFNDX1NJR1NFR1Y7Ci0JZWxzZQotCQl2YWwgPSBQUl9UU0NfRU5BQkxFOwotCi0JcmV0dXJuIHB1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhZHIpOwotfQotCi1pbnQgc2V0X3RzY19tb2RlKHVuc2lnbmVkIGludCB2YWwpCi17Ci0JaWYgKHZhbCA9PSBQUl9UU0NfU0lHU0VHVikKLQkJZGlzYWJsZV9UU0MoKTsKLQllbHNlIGlmICh2YWwgPT0gUFJfVFNDX0VOQUJMRSkKLQkJZW5hYmxlX1RTQygpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgc3BlY2lhbCBtYWNybyBjYW4gYmUgdXNlZCB0byBsb2FkIGEgZGVidWdnaW5nIHJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgbG9hZGRlYnVnKHRocmVhZCwgcikgc2V0X2RlYnVncmVnKHRocmVhZC0+ZGVidWdyZWcgIyMgciwgcikKLQotc3RhdGljIGlubGluZSB2b2lkIF9fc3dpdGNoX3RvX3h0cmEoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2X3AsCi0JCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF9wLAotCQkJCSAgICBzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzKQotewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2LCAqbmV4dDsKLQotCXByZXYgPSAmcHJldl9wLT50aHJlYWQsCi0JbmV4dCA9ICZuZXh0X3AtPnRocmVhZDsKLQotCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9EU19BUkVBX01TUikgfHwKLQkgICAgdGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfRFNfQVJFQV9NU1IpKQotCQlkc19zd2l0Y2hfdG8ocHJldl9wLCBuZXh0X3ApOwotCWVsc2UgaWYgKG5leHQtPmRlYnVnY3RsbXNyICE9IHByZXYtPmRlYnVnY3RsbXNyKQotCQl1cGRhdGVfZGVidWdjdGxtc3IobmV4dC0+ZGVidWdjdGxtc3IpOwotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RFQlVHKSkgewotCQlsb2FkZGVidWcobmV4dCwgMCk7Ci0JCWxvYWRkZWJ1ZyhuZXh0LCAxKTsKLQkJbG9hZGRlYnVnKG5leHQsIDIpOwotCQlsb2FkZGVidWcobmV4dCwgMyk7Ci0JCS8qIG5vIDQgYW5kIDUgKi8KLQkJbG9hZGRlYnVnKG5leHQsIDYpOwotCQlsb2FkZGVidWcobmV4dCwgNyk7Ci0JfQotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX05PVFNDKSBeCi0JICAgIHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX05PVFNDKSkgewotCQkvKiBwcmV2IGFuZCBuZXh0IGFyZSBkaWZmZXJlbnQgKi8KLQkJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX05PVFNDKSkKLQkJCWhhcmRfZGlzYWJsZV9UU0MoKTsKLQkJZWxzZQotCQkJaGFyZF9lbmFibGVfVFNDKCk7Ci0JfQotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0lPX0JJVE1BUCkpIHsKLQkJLyoKLQkJICogQ29weSB0aGUgcmVsZXZhbnQgcmFuZ2Ugb2YgdGhlIElPIGJpdG1hcC4KLQkJICogTm9ybWFsbHkgdGhpcyBpcyAxMjggYnl0ZXMgb3IgbGVzczoKLQkJICovCi0JCW1lbWNweSh0c3MtPmlvX2JpdG1hcCwgbmV4dC0+aW9fYml0bWFwX3B0ciwKLQkJICAgICAgIG1heChwcmV2LT5pb19iaXRtYXBfbWF4LCBuZXh0LT5pb19iaXRtYXBfbWF4KSk7Ci0JfSBlbHNlIGlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9JT19CSVRNQVApKSB7Ci0JCS8qCi0JCSAqIENsZWFyIGFueSBwb3NzaWJsZSBsZWZ0b3ZlciBiaXRzOgotCQkgKi8KLQkJbWVtc2V0KHRzcy0+aW9fYml0bWFwLCAweGZmLCBwcmV2LT5pb19iaXRtYXBfbWF4KTsKLQl9Ci19Ci0KIC8qCiAgKglzd2l0Y2hfdG8oeCx5KSBzaG91bGQgc3dpdGNoIHRhc2tzIGZyb20geCB0byB5LgogICoKQEAgLTYxOCwyMSArNDY3LDEzIEBACiAJLyoKIAkgKiBTd2l0Y2ggdGhlIFBEQSBhbmQgRlBVIGNvbnRleHRzLgogCSAqLwotCXByZXYtPnVzZXJzcCA9IHJlYWRfcGRhKG9sZHJzcCk7Ci0Jd3JpdGVfcGRhKG9sZHJzcCwgbmV4dC0+dXNlcnNwKTsKLQl3cml0ZV9wZGEocGN1cnJlbnQsIG5leHRfcCk7CisJcHJldi0+dXNlcnNwID0gcGVyY3B1X3JlYWQob2xkX3JzcCk7CisJcGVyY3B1X3dyaXRlKG9sZF9yc3AsIG5leHQtPnVzZXJzcCk7CisJcGVyY3B1X3dyaXRlKGN1cnJlbnRfdGFzaywgbmV4dF9wKTsKIAotCXdyaXRlX3BkYShrZXJuZWxzdGFjaywKKwlwZXJjcHVfd3JpdGUoa2VybmVsX3N0YWNrLAogCQkgICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShuZXh0X3ApICsKLQkJICBUSFJFQURfU0laRSAtIFBEQV9TVEFDS09GRlNFVCk7Ci0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCi0Jd3JpdGVfcGRhKHN0YWNrX2NhbmFyeSwgbmV4dF9wLT5zdGFja19jYW5hcnkpOwotCS8qCi0JICogQnVpbGQgdGltZSBvbmx5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhY2tfY2FuYXJ5IGlzIGF0Ci0JICogb2Zmc2V0IDQwIGluIHRoZSBwZGE7IHRoaXMgaXMgYSBnY2MgQUJJIHJlcXVpcmVtZW50Ci0JICovCi0JQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB4ODY2NF9wZGEsIHN0YWNrX2NhbmFyeSkgIT0gNDApOwotI2VuZGlmCisJCSAgVEhSRUFEX1NJWkUgLSBLRVJORUxfU1RBQ0tfT0ZGU0VUKTsKIAogCS8qCiAJICogTm93IG1heWJlIHJlbG9hZCB0aGUgZGVidWcgcmVnaXN0ZXJzIGFuZCBoYW5kbGUgSS9PIGJpdG1hcHMKQEAgLTY4NiwxMSArNTI3LDYgQEAKIAljdXJyZW50LT5wZXJzb25hbGl0eSAmPSB+UkVBRF9JTVBMSUVTX0VYRUM7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gZG9fZm9yayhTSUdDSExELCByZWdzLT5zcCwgcmVncywgMCwgTlVMTCwgTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZwogc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCiAJICB2b2lkIF9fdXNlciAqcGFyZW50X3RpZCwgdm9pZCBfX3VzZXIgKmNoaWxkX3RpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC03MDAsMjIgKzUzNiw2IEBACiAJcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLCBwYXJlbnRfdGlkLCBjaGlsZF90aWQpOwogfQogCi0vKgotICogVGhpcyBpcyB0cml2aWFsLCBhbmQgb24gdGhlIGZhY2Ugb2YgaXQgbG9va3MgbGlrZSBpdAotICogY291bGQgZXF1YWxseSB3ZWxsIGJlIGRvbmUgaW4gdXNlciBtb2RlLgotICoKLSAqIE5vdCBzbywgZm9yIHF1aXRlIHVub2J2aW91cyByZWFzb25zIC0gcmVnaXN0ZXIgcHJlc3N1cmUuCi0gKiBJbiB1c2VyIG1vZGUgdmZvcmsoKSBjYW5ub3QgaGF2ZSBhIHN0YWNrIGZyYW1lLCBhbmQgaWYKLSAqIGRvbmUgYnkgY2FsbGluZyB0aGUgImNsb25lKCkiIHN5c3RlbSBjYWxsIGRpcmVjdGx5LCB5b3UKLSAqIGRvIG5vdCBoYXZlIGVub3VnaCBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcnMgdG8gaG9sZCBhbGwKLSAqIHRoZSBpbmZvcm1hdGlvbiB5b3UgbmVlZC4KLSAqLwotYXNtbGlua2FnZSBsb25nIHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gZG9fZm9yayhDTE9ORV9WRk9SSyB8IENMT05FX1ZNIHwgU0lHQ0hMRCwgcmVncy0+c3AsIHJlZ3MsIDAsCi0JCSAgICBOVUxMLCBOVUxMKTsKLX0KLQogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXVuc2lnbmVkIGxvbmcgc3RhY2s7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMDZjYTA3Zi4uM2Q5NjcyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtNzUsMTAgKzc1LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpwdF9yZWdzX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyByZWdubykKIHsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJ4KSAhPSAwKTsKLQlyZWdubyA+Pj0gMjsKLQlpZiAocmVnbm8gPiBGUykKLQkJLS1yZWdubzsKLQlyZXR1cm4gJnJlZ3MtPmJ4ICsgcmVnbm87CisJcmV0dXJuICZyZWdzLT5ieCArIChyZWdubyA+PiAyKTsKIH0KIAogc3RhdGljIHUxNiBnZXRfc2VnbWVudF9yZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKQEAgLTkwLDkgKzg3LDEwIEBACiAJaWYgKG9mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCwgZ3MpKQogCQlyZXR2YWwgPSAqcHRfcmVnc19hY2Nlc3ModGFza19wdF9yZWdzKHRhc2spLCBvZmZzZXQpOwogCWVsc2UgewotCQlyZXR2YWwgPSB0YXNrLT50aHJlYWQuZ3M7CiAJCWlmICh0YXNrID09IGN1cnJlbnQpCi0JCQlzYXZlc2VnbWVudChncywgcmV0dmFsKTsKKwkJCXJldHZhbCA9IGdldF91c2VyX2dzKHRhc2tfcHRfcmVncyh0YXNrKSk7CisJCWVsc2UKKwkJCXJldHZhbCA9IHRhc2tfdXNlcl9ncyh0YXNrKTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTEyNiwxMyArMTI0LDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCwgZ3MpOgotCQl0YXNrLT50aHJlYWQuZ3MgPSB2YWx1ZTsKIAkJaWYgKHRhc2sgPT0gY3VycmVudCkKLQkJCS8qCi0JCQkgKiBUaGUgdXNlci1tb2RlICVncyBpcyBub3QgYWZmZWN0ZWQgYnkKLQkJCSAqIGtlcm5lbCBlbnRyeSwgc28gd2UgbXVzdCB1cGRhdGUgdGhlIENQVS4KLQkJCSAqLwotCQkJbG9hZHNlZ21lbnQoZ3MsIHZhbHVlKTsKKwkJCXNldF91c2VyX2dzKHRhc2tfcHRfcmVncyh0YXNrKSwgdmFsdWUpOworCQllbHNlCisJCQl0YXNrX3VzZXJfZ3ModGFzaykgPSB2YWx1ZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3Myw3ICsyNjgsNyBAQAogCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfSUEzMikpCiAJCXJldHVybiBJQTMyX1BBR0VfT0ZGU0VUIC0gMzsKICNlbmRpZgotCXJldHVybiBUQVNLX1NJWkU2NCAtIDc7CisJcmV0dXJuIFRBU0tfU0laRV9NQVggLSA3OwogfQogCiAjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IDMwOTk0OWUuLjY5N2QxYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTE3Miw3ICsxNzIsOCBAQAogCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzcsCiAJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKLQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2ExNiwJLyogSUNIMTAgKi8KKwkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmNhY2hlZF9kZXY7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCA0NTI2YjNhLi4yYWVmMzZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGluY2x1ZGUgPGxpbnV4L2RtaS5oPgpAQCAtMjMsOCArMjQsNiBAQAogIyBpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLQogLyoKICAqIFBvd2VyIG9mZiBmdW5jdGlvbiwgaWYgYW55CiAgKi8KQEAgLTY1OCw3ICs2NTcsNyBAQAogCiBzdGF0aWMgdm9pZCBzbXBfc2VuZF9ubWlfYWxsYnV0c2VsZih2b2lkKQogewotCXNlbmRfSVBJX2FsbGJ1dHNlbGYoTk1JX1ZFQ1RPUik7CisJYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZihOTUlfVkVDVE9SKTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcmFzaF9ubWlfbmIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKaW5kZXggYTE2MGYzMS4uMjA2NGQwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwpAQCAtNyw3ICs3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUwppbmRleCBmNWFmZTY2Li5kMzJjZmIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCkBAIC03LDEwICs3LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KIAogLyoKICAqIE11c3QgYmUgcmVsb2NhdGFibGUgUElDIGNvZGUgY2FsbGFibGUgYXMgYSBDIGZ1bmN0aW9uCkBAIC0yOSwxMjIgKzI5LDYgQEAKIAkgKiAlcmR4IHN0YXJ0IGFkZHJlc3MKIAkgKi8KIAotCS8qIG1hcCB0aGUgY29udHJvbCBwYWdlIGF0IGl0cyB2aXJ0dWFsIGFkZHJlc3MgKi8KLQotCW1vdnEJJDB4MDAwMGZmODAwMDAwMDAwMCwgJXIxMCAgICAgICAgLyogbWFzayAqLwotCW1vdgkkKDM5IC0gMyksICVjbCAgICAgICAgICAgICAgICAgICAvKiBiaXRzIHRvIHNoaWZ0ICovCi0JbW92cQlQVFIoVkFfQ09OVFJPTF9QQUdFKSglcnNpKSwgJXIxMSAvKiBhZGRyZXNzIHRvIG1hcCAqLwotCi0JbW92cQklcjExLCAlcjkKLQlhbmRxCSVyMTAsICVyOQotCXNocnEJJWNsLCAlcjkKLQotCW1vdnEJUFRSKFZBX1BHRCkoJXJzaSksICVyOAotCWFkZHEJJXI4LCAlcjkKLQltb3ZxCVBUUihQQV9QVURfMCkoJXJzaSksICVyOAotCW9ycQkkUEFHRV9BVFRSLCAlcjgKLQltb3ZxCSVyOCwgKCVyOSkKLQotCXNocnEJJDksICVyMTAKLQlzdWIJJDksICVjbAotCi0JbW92cQklcjExLCAlcjkKLQlhbmRxCSVyMTAsICVyOQotCXNocnEJJWNsLCAlcjkKLQotCW1vdnEJUFRSKFZBX1BVRF8wKSglcnNpKSwgJXI4Ci0JYWRkcQklcjgsICVyOQotCW1vdnEJUFRSKFBBX1BNRF8wKSglcnNpKSwgJXI4Ci0Jb3JxCSRQQUdFX0FUVFIsICVyOAotCW1vdnEJJXI4LCAoJXI5KQotCi0Jc2hycQkkOSwgJXIxMAotCXN1YgkkOSwgJWNsCi0KLQltb3ZxCSVyMTEsICVyOQotCWFuZHEJJXIxMCwgJXI5Ci0Jc2hycQklY2wsICVyOQotCi0JbW92cQlQVFIoVkFfUE1EXzApKCVyc2kpLCAlcjgKLQlhZGRxCSVyOCwgJXI5Ci0JbW92cQlQVFIoUEFfUFRFXzApKCVyc2kpLCAlcjgKLQlvcnEJJFBBR0VfQVRUUiwgJXI4Ci0JbW92cQklcjgsICglcjkpCi0KLQlzaHJxCSQ5LCAlcjEwCi0Jc3ViCSQ5LCAlY2wKLQotCW1vdnEJJXIxMSwgJXI5Ci0JYW5kcQklcjEwLCAlcjkKLQlzaHJxCSVjbCwgJXI5Ci0KLQltb3ZxCVBUUihWQV9QVEVfMCkoJXJzaSksICVyOAotCWFkZHEJJXI4LCAlcjkKLQltb3ZxCVBUUihQQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjgKLQlvcnEJJFBBR0VfQVRUUiwgJXI4Ci0JbW92cQklcjgsICglcjkpCi0KLQkvKiBpZGVudGl0eSBtYXAgdGhlIGNvbnRyb2wgcGFnZSBhdCBpdHMgcGh5c2ljYWwgYWRkcmVzcyAqLwotCi0JbW92cQkkMHgwMDAwZmY4MDAwMDAwMDAwLCAlcjEwICAgICAgICAvKiBtYXNrICovCi0JbW92CSQoMzkgLSAzKSwgJWNsICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgdG8gc2hpZnQgKi8KLQltb3ZxCVBUUihQQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjExIC8qIGFkZHJlc3MgdG8gbWFwICovCi0KLQltb3ZxCSVyMTEsICVyOQotCWFuZHEJJXIxMCwgJXI5Ci0Jc2hycQklY2wsICVyOQotCi0JbW92cQlQVFIoVkFfUEdEKSglcnNpKSwgJXI4Ci0JYWRkcQklcjgsICVyOQotCW1vdnEJUFRSKFBBX1BVRF8xKSglcnNpKSwgJXI4Ci0Jb3JxCSRQQUdFX0FUVFIsICVyOAotCW1vdnEJJXI4LCAoJXI5KQotCi0Jc2hycQkkOSwgJXIxMAotCXN1YgkkOSwgJWNsCi0KLQltb3ZxCSVyMTEsICVyOQotCWFuZHEJJXIxMCwgJXI5Ci0Jc2hycQklY2wsICVyOQotCi0JbW92cQlQVFIoVkFfUFVEXzEpKCVyc2kpLCAlcjgKLQlhZGRxCSVyOCwgJXI5Ci0JbW92cQlQVFIoUEFfUE1EXzEpKCVyc2kpLCAlcjgKLQlvcnEJJFBBR0VfQVRUUiwgJXI4Ci0JbW92cQklcjgsICglcjkpCi0KLQlzaHJxCSQ5LCAlcjEwCi0Jc3ViCSQ5LCAlY2wKLQotCW1vdnEJJXIxMSwgJXI5Ci0JYW5kcQklcjEwLCAlcjkKLQlzaHJxCSVjbCwgJXI5Ci0KLQltb3ZxCVBUUihWQV9QTURfMSkoJXJzaSksICVyOAotCWFkZHEJJXI4LCAlcjkKLQltb3ZxCVBUUihQQV9QVEVfMSkoJXJzaSksICVyOAotCW9ycQkkUEFHRV9BVFRSLCAlcjgKLQltb3ZxCSVyOCwgKCVyOSkKLQotCXNocnEJJDksICVyMTAKLQlzdWIJJDksICVjbAotCi0JbW92cQklcjExLCAlcjkKLQlhbmRxCSVyMTAsICVyOQotCXNocnEJJWNsLCAlcjkKLQotCW1vdnEJUFRSKFZBX1BURV8xKSglcnNpKSwgJXI4Ci0JYWRkcQklcjgsICVyOQotCW1vdnEJUFRSKFBBX0NPTlRST0xfUEFHRSkoJXJzaSksICVyOAotCW9ycQkkUEFHRV9BVFRSLCAlcjgKLQltb3ZxCSVyOCwgKCVyOSkKLQotcmVsb2NhdGVfbmV3X2tlcm5lbDoKLQkvKiAlcmRpIGluZGlyZWN0aW9uX3BhZ2UKLQkgKiAlcnNpIHBhZ2VfbGlzdAotCSAqICVyZHggc3RhcnQgYWRkcmVzcwotCSAqLwotCiAJLyogemVybyBvdXQgZmxhZ3MsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlwdXNocSAkMAogCXBvcGZxCkBAIC0xNTYsOSArNDAsOCBAQAogCS8qIGdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIHBhZ2UgdGFibGUgbm93IHRvbyAqLwogCW1vdnEJUFRSKFBBX1RBQkxFX1BBR0UpKCVyc2kpLCAlcmN4CiAKLQkvKiBzd2l0Y2ggdG8gbmV3IHNldCBvZiBwYWdlIHRhYmxlcyAqLwotCW1vdnEJUFRSKFBBX1BHRCkoJXJzaSksICVyOQotCW1vdnEJJXI5LCAlY3IzCisJLyogU3dpdGNoIHRvIHRoZSBpZGVudGl0eSBtYXBwZWQgcGFnZSB0YWJsZXMgKi8KKwltb3ZxCSVyY3gsICVjcjMKIAogCS8qIHNldHVwIGEgbmV3IHN0YWNrIGF0IHRoZSBlbmQgb2YgdGhlIHBoeXNpY2FsIGNvbnRyb2wgcGFnZSAqLwogCWxlYQlQQUdFX1NJWkUoJXI4KSwgJXJzcApAQCAtMTk0LDkgKzc3LDcgQEAKIAlqbXAgMWYKIDE6CiAKLQkvKiBTd2l0Y2ggdG8gdGhlIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcywKLQkgKiBhbmQgZmx1c2ggdGhlIFRMQi4KLQkqLworCS8qIEZsdXNoIHRoZSBUTEIgKG5lZWRlZD8pICovCiAJbW92cQklcmN4LCAlY3IzCiAKIAkvKiBEbyB0aGUgY29waWVzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDZhODgxMWEuLmI3NDZkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC03NCwxNCArNzQsMTUgQEAKICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9lZmkuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vZG1pLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3ZtaS5oPgotI2luY2x1ZGUgPHNldHVwX2FyY2guaD4KKyNpbmNsdWRlIDxhc20vc2V0dXBfYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTg5LDcgKzkwLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgpAQCAtOTcsNyArOTgsNiBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KIApAQCAtMTEyLDYgKzExMiwyMCBAQAogI2RlZmluZSBBUkNIX1NFVFVQCiAjZW5kaWYKIAordW5zaWduZWQgaW50IGJvb3RfY3B1X2lkIF9fcmVhZF9tb3N0bHk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitpbnQgZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCit7CisJcmV0dXJuIF9fZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQobXBzX2NwdSk7Cit9CisKK2ludCBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gX19kZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKK30KKyNlbmRpZgorCiAjaWZuZGVmIENPTkZJR19ERUJVR19CT09UX1BBUkFNUwogc3RydWN0IGJvb3RfcGFyYW1zIF9faW5pdGRhdGEgYm9vdF9wYXJhbXM7CiAjZWxzZQpAQCAtNTg2LDIwICs2MDAsNyBAQAogZWFybHlfcGFyYW0oImVsZmNvcmVoZHIiLCBzZXR1cF9lbGZjb3JlaGRyKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBkZWZhdWx0X3VwZGF0ZV9nZW5hcGljKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9TTVAKLSMgaWYgZGVmaW5lZChDT05GSUdfWDg2X0dFTkVSSUNBUkNIKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0JZ2VuYXBpYy0+d2FrZXVwX2NwdSA9IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0OwotIyBlbmRpZgotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB4ODZfcXVpcmtzIGRlZmF1bHRfeDg2X3F1aXJrcyBfX2luaXRkYXRhID0gewotCS51cGRhdGVfZ2VuYXBpYyAgICAgICAgID0gZGVmYXVsdF91cGRhdGVfZ2VuYXBpYywKLX07CitzdGF0aWMgc3RydWN0IHg4Nl9xdWlya3MgZGVmYXVsdF94ODZfcXVpcmtzIF9faW5pdGRhdGE7CiAKIHN0cnVjdCB4ODZfcXVpcmtzICp4ODZfcXVpcmtzIF9faW5pdGRhdGEgPSAmZGVmYXVsdF94ODZfcXVpcmtzOwogCkBAIC02NTYsNyArNjU3LDYgQEAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJbWVtY3B5KCZib290X2NwdV9kYXRhLCAmbmV3X2NwdV9kYXRhLCBzaXplb2YobmV3X2NwdV9kYXRhKSk7CiAJdmlzd3NfZWFybHlfZGV0ZWN0KCk7Ci0JcHJlX3NldHVwX2FyY2hfaG9vaygpOwogI2Vsc2UKIAlwcmludGsoS0VSTl9JTkZPICJDb21tYW5kIGxpbmU6ICVzXG4iLCBib290X2NvbW1hbmRfbGluZSk7CiAjZW5kaWYKQEAgLTgyNCw4ICs4MjQsNyBAQAogI2Vsc2UKIAludW1fcGh5c3BhZ2VzID0gbWF4X3BmbjsKIAotIAlpZiAoY3B1X2hhc194MmFwaWMpCi0gCQljaGVja194MmFwaWMoKTsKKwljaGVja194MmFwaWMoKTsKIAogCS8qIEhvdyBtYW55IGVuZC1vZi1tZW1vcnkgdmFyaWFibGVzIHlvdSBoYXZlLCBncmFuZG1hISAqLwogCS8qIG5lZWQgdGhpcyBiZWZvcmUgY2FsbGluZyByZXNlcnZlX2luaXRyZCAqLwpAQCAtODY1LDkgKzg2NCw3IEBACiAKIAlyZXNlcnZlX2luaXRyZCgpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCXZzbXBfaW5pdCgpOwotI2VuZGlmCiAKIAlpb19kZWxheV9pbml0KCk7CiAKQEAgLTg5MywxMiArODkwLDExIEBACiAJICovCiAJYWNwaV9yZXNlcnZlX2Jvb3RtZW0oKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfRklORF9TTVBfQ09ORklHCiAJLyoKIAkgKiBGaW5kIGFuZCByZXNlcnZlIHBvc3NpYmxlIGJvb3QtdGltZSBTTVAgY29uZmlndXJhdGlvbjoKIAkgKi8KIAlmaW5kX3NtcF9jb25maWcoKTsKLSNlbmRpZgorCiAJcmVzZXJ2ZV9jcmFzaGtlcm5lbCgpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtOTI1LDkgKzkyMSw3IEBACiAJbWFwX3ZzeXNjYWxsKCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfR0VORVJJQ0FSQ0gKIAlnZW5lcmljX2FwaWNfcHJvYmUoKTsKLSNlbmRpZgogCiAJZWFybHlfcXVpcmtzKCk7CiAKQEAgLTk3OCw0ICs5NzIsOTUgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCisvKioKKyAqIHg4Nl9xdWlya19wcmVfaW50cl9pbml0IC0gaW5pdGlhbGlzYXRpb24gcHJpb3IgdG8gc2V0dGluZyB1cCBpbnRlcnJ1cHQgdmVjdG9ycworICoKKyAqIERlc2NyaXB0aW9uOgorICoJUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGludGVycnVwdCBpbml0aWFsaXNhdGlvbiBwcmlvciB0byBzZXR0aW5nIHVwCisgKgl0aGUgIm9yZGluYXJ5IiBpbnRlcnJ1cHQgY2FsbCBnYXRlcy4gIEZvciBsZWdhY3kgcmVhc29ucywgdGhlIElTQQorICoJaW50ZXJydXB0cyBzaG91bGQgYmUgaW5pdGlhbGlzZWQgaGVyZSBpZiB0aGUgbWFjaGluZSBlbXVsYXRlcyBhIFBDCisgKglpbiBhbnkgd2F5LgorICoqLwordm9pZCBfX2luaXQgeDg2X3F1aXJrX3ByZV9pbnRyX2luaXQodm9pZCkKK3sKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfaW50cl9pbml0KSB7CisJCWlmICh4ODZfcXVpcmtzLT5hcmNoX3ByZV9pbnRyX2luaXQoKSkKKwkJCXJldHVybjsKKwl9CisJaW5pdF9JU0FfaXJxcygpOworfQorCisvKioKKyAqIHg4Nl9xdWlya19pbnRyX2luaXQgLSBwb3N0IGdhdGUgc2V0dXAgaW50ZXJydXB0IGluaXRpYWxpc2F0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKglGaWxsIGluIGFueSBpbnRlcnJ1cHRzIHRoYXQgbWF5IGhhdmUgYmVlbiBsZWZ0IG91dCBieSB0aGUgZ2VuZXJhbAorICoJaW5pdF9JUlEoKSByb3V0aW5lLiAgaW50ZXJydXB0cyBoYXZpbmcgdG8gZG8gd2l0aCB0aGUgbWFjaGluZSByYXRoZXIKKyAqCXRoYW4gdGhlIGRldmljZXMgb24gdGhlIEkvTyBidXMgKGxpa2UgQVBJQyBpbnRlcnJ1cHRzIGluIGludGVsIE1QCisgKglzeXN0ZW1zKSBhcmUgc3RhcnRlZCBoZXJlLgorICoqLwordm9pZCBfX2luaXQgeDg2X3F1aXJrX2ludHJfaW5pdCh2b2lkKQoreworCWlmICh4ODZfcXVpcmtzLT5hcmNoX2ludHJfaW5pdCkgeworCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9pbnRyX2luaXQoKSkKKwkJCXJldHVybjsKKwl9Cit9CisKKy8qKgorICogeDg2X3F1aXJrX3RyYXBfaW5pdCAtIGluaXRpYWxpc2Ugc3lzdGVtIHNwZWNpZmljIHRyYXBzCisgKgorICogRGVzY3JpcHRpb246CisgKglDYWxsZWQgYXMgdGhlIGZpbmFsIGFjdCBvZiB0cmFwX2luaXQoKS4gIFVzZWQgaW4gVklTV1MgdG8gaW5pdGlhbGlzZQorICoJdGhlIHZhcmlvdXMgYm9hcmQgc3BlY2lmaWMgQVBJQyB0cmFwcy4KKyAqKi8KK3ZvaWQgX19pbml0IHg4Nl9xdWlya190cmFwX2luaXQodm9pZCkKK3sKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF90cmFwX2luaXQpIHsKKwkJaWYgKHg4Nl9xdWlya3MtPmFyY2hfdHJhcF9pbml0KCkpCisJCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKKwkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfSVJRUE9MTCB8IElSUUZfVElNRVIsCisJLm1hc2sgPSBDUFVfTUFTS19OT05FLAorCS5uYW1lID0gInRpbWVyIgorfTsKKworLyoqCisgKiB4ODZfcXVpcmtfcHJlX3RpbWVfaW5pdCAtIGRvIGFueSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbnMgYmVmb3JlLgorICoKKyAqKi8KK3ZvaWQgX19pbml0IHg4Nl9xdWlya19wcmVfdGltZV9pbml0KHZvaWQpCit7CisJaWYgKHg4Nl9xdWlya3MtPmFyY2hfcHJlX3RpbWVfaW5pdCkKKwkJeDg2X3F1aXJrcy0+YXJjaF9wcmVfdGltZV9pbml0KCk7Cit9CisKKy8qKgorICogeDg2X3F1aXJrX3RpbWVfaW5pdCAtIGRvIGFueSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0gdGltZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKglNdXN0IHBsdWcgdGhlIHN5c3RlbSB0aW1lciBpbnRlcnJ1cHQgc291cmNlIGF0IEhaIGludG8gdGhlIElSUSBsaXN0ZWQKKyAqCWluIGlycV92ZWN0b3JzLmg6VElNRVJfSVJRCisgKiovCit2b2lkIF9faW5pdCB4ODZfcXVpcmtfdGltZV9pbml0KHZvaWQpCit7CisJaWYgKHg4Nl9xdWlya3MtPmFyY2hfdGltZV9pbml0KSB7CisJCS8qCisJCSAqIEEgbm9uemVybyByZXR1cm4gY29kZSBkb2VzIG5vdCBtZWFuIGZhaWx1cmUsIGl0IG1lYW5zCisJCSAqIHRoYXQgdGhlIGFyY2hpdGVjdHVyZSBxdWlyayBkb2VzIG5vdCB3YW50IGFueQorCQkgKiBnZW5lcmljICh0aW1lcikgc2V0dXAgdG8gYmUgcGVyZm9ybWVkIGFmdGVyIHRoaXM6CisJCSAqLworCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF90aW1lX2luaXQoKSkKKwkJCXJldHVybjsKKwl9CisKKwlpcnEwLm1hc2sgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwlzZXR1cF9pcnEoMCwgJmlycTApOworfQorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwppbmRleCAwMTE2MTA3Li40MDAzMzFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCkBAIC03LDE1MCArNywzNTYgQEAKICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwotdW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOwotLyogUHJvY2Vzc29yIHRoYXQgaXMgZG9pbmcgdGhlIGJvb3QgdXAgKi8KLXVuc2lnbmVkIGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSAtMVU7Ci1FWFBPUlRfU1lNQk9MKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci11bnNpZ25lZCBpbnQgbWF4X3BoeXNpY2FsX2FwaWNpZDsKLQotLyogQml0bWFzayBvZiBwaHlzaWNhbGx5IGV4aXN0aW5nIENQVXMgKi8KLXBoeXNpZF9tYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7Ci0jZW5kaWYKLQotLyogbWFwIGNwdSBpbmRleCB0byBwaHlzaWNhbCBBUElDIElEICovCi1ERUZJTkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9jcHVfdG9fYXBpY2lkLCBCQURfQVBJQ0lEKTsKLURFRklORV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2Jpb3NfY3B1X2FwaWNpZCwgQkFEX0FQSUNJRCk7Ci1FWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOwotRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotI2RlZmluZQlYODZfNjRfTlVNQQkxCi0KLS8qIG1hcCBjcHUgaW5kZXggdG8gbm9kZSBpbmRleCAqLwotREVGSU5FX0VBUkxZX1BFUl9DUFUoaW50LCB4ODZfY3B1X3RvX25vZGVfbWFwLCBOVU1BX05PX05PREUpOwotRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9jcHVfdG9fbm9kZV9tYXApOwotCi0vKiB3aGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNoIG5vZGVzICovCi1jcHVtYXNrX3QgKm5vZGVfdG9fY3B1bWFza19tYXA7Ci1FWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOwotCi0vKiBzZXR1cCBub2RlX3RvX2NwdW1hc2tfbWFwICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKTsKLQorI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKyMgZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpIHsgfQorIyBkZWZpbmUgREJHKHguLi4pCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBKSAmJiBkZWZpbmVkKENPTkZJR19YODZfU01QKQotLyoKLSAqIENvcHkgZGF0YSB1c2VkIGluIGVhcmx5IGluaXQgcm91dGluZXMgZnJvbSB0aGUgaW5pdGlhbCBhcnJheXMgdG8gdGhlCi0gKiBwZXIgY3B1IGRhdGEgYXJlYXMuICBUaGVzZSBhcnJheXMgdGhlbiBiZWNvbWUgZXhwZW5kYWJsZSBhbmQgdGhlCi0gKiAqX2Vhcmx5X3B0cidzIGFyZSB6ZXJvZWQgaW5kaWNhdGluZyB0aGF0IHRoZSBzdGF0aWMgYXJyYXlzIGFyZSBnb25lLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9tYXBzKHZvaWQpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9Ci0JCQkJZWFybHlfcGVyX2NwdV9tYXAoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0JCXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9Ci0JCQkJZWFybHlfcGVyX2NwdV9tYXAoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KTsKLSNpZmRlZiBYODZfNjRfTlVNQQotCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSkgPQotCQkJCWVhcmx5X3Blcl9jcHVfbWFwKHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Ci0jZW5kaWYKLQl9Ci0KLQkvKiBpbmRpY2F0ZSB0aGUgZWFybHkgc3RhdGljIGFycmF5cyB3aWxsIHNvb24gYmUgZ29uZSAqLwotCWVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKSA9IE5VTEw7Ci0JZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCkgPSBOVUxMOwotI2lmZGVmIFg4Nl82NF9OVU1BCi0JZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCkgPSBOVUxMOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0vKgotICogR3JlYXQgZnV0dXJlIG5vdC1zby1mdXR1cmlzdGljIHBsYW46IG1ha2UgaTM4NiBhbmQgeDg2XzY0IGRvIGl0Ci0gKiB0aGUgc2FtZSB3YXkKLSAqLwotdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOwotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2NwdV9wZGFfbWFwKHZvaWQpIHsgfQotCi0jZWxpZiAhZGVmaW5lZChDT05GSUdfU01QKQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2NwdV9wZGFfbWFwKHZvaWQpIHsgfQotCi0jZWxzZSAvKiBDT05GSUdfU01QICYmIENPTkZJR19YODZfNjQgKi8KLQotLyoKLSAqIEFsbG9jYXRlIGNwdV9wZGEgcG9pbnRlciB0YWJsZSBhbmQgYXJyYXkgdmlhIGFsbG9jX2Jvb3RtZW0uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9jcHVfcGRhX21hcCh2b2lkKQotewotCWNoYXIgKnBkYTsKLQlzdHJ1Y3QgeDg2NjRfcGRhICoqbmV3X2NwdV9wZGE7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBjcHU7Ci0KLQlzaXplID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHg4NjY0X3BkYSksIGNhY2hlX2xpbmVfc2l6ZSgpKTsKLQotCS8qIGFsbG9jYXRlIGNwdV9wZGEgYXJyYXkgYW5kIHBvaW50ZXIgdGFibGUgKi8KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgdHNpemUgPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKik7Ci0JCXVuc2lnbmVkIGxvbmcgYXNpemUgPSBzaXplICogKG5yX2NwdV9pZHMgLSAxKTsKLQotCQl0c2l6ZSA9IHJvdW5kdXAodHNpemUsIGNhY2hlX2xpbmVfc2l6ZSgpKTsKLQkJbmV3X2NwdV9wZGEgPSBhbGxvY19ib290bWVtKHRzaXplICsgYXNpemUpOwotCQlwZGEgPSAoY2hhciAqKW5ld19jcHVfcGRhICsgdHNpemU7Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBwb2ludGVyIHRhYmxlIHRvIHN0YXRpYyBwZGEncyAqLwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSAwKSB7Ci0JCQkvKiBsZWF2ZSBib290IGNwdSBwZGEgaW4gcGxhY2UgKi8KLQkJCW5ld19jcHVfcGRhWzBdID0gY3B1X3BkYSgwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW5ld19jcHVfcGRhW2NwdV0gPSAoc3RydWN0IHg4NjY0X3BkYSAqKXBkYTsKLQkJbmV3X2NwdV9wZGFbY3B1XS0+aW5fYm9vdG1lbSA9IDE7Ci0JCXBkYSArPSBzaXplOwotCX0KLQotCS8qIHBvaW50IHRvIG5ldyBwb2ludGVyIHRhYmxlICovCi0JX2NwdV9wZGEgPSBuZXdfY3B1X3BkYTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19TTVAgJiYgQ09ORklHX1g4Nl82NCAqLworREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfbnVtYmVyKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfbnVtYmVyKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUICgodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfbG9hZCkKKyNlbHNlCisjZGVmaW5lIEJPT1RfUEVSQ1BVX09GRlNFVCAwCisjZW5kaWYKIAotLyogY29ycmVjdGx5IHNpemUgdGhlIGxvY2FsIGNwdSBtYXNrcyAqLwotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NwdV9sb2NhbF9tYXNrcyh2b2lkKQorREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKSA9IEJPT1RfUEVSQ1BVX09GRlNFVDsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOworCit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHsKKwlbMCAuLi4gTlJfQ1BVUy0xXSA9IEJPT1RfUEVSQ1BVX09GRlNFVCwKK307CitFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOworCisvKgorICogT24geDg2XzY0IHN5bWJvbHMgcmVmZXJlbmNlZCBmcm9tIGNvZGUgc2hvdWxkIGJlIHJlYWNoYWJsZSB1c2luZworICogMzJiaXQgcmVsb2NhdGlvbnMuICBSZXNlcnZlIHNwYWNlIGZvciBzdGF0aWMgcGVyY3B1IHZhcmlhYmxlcyBpbgorICogbW9kdWxlcyBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBzZXJ2ZWQgZnJvbSB0aGUgZmlyc3QgY2h1bmsgd2hpY2gKKyAqIGlzIGxvY2F0ZWQgYXQgdGhlIHBlcmNwdSBzZWdtZW50IGJhc2UuICBPbiB4ODZfMzIsIGFueXRoaW5nIGNhbgorICogYWRkcmVzcyBhbnl3aGVyZS4gIE5vIG5lZWQgdG8gcmVzZXJ2ZSBzcGFjZSBpbiB0aGUgZmlyc3QgY2h1bmsuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFBFUkNQVV9GSVJTVF9DSFVOS19SRVNFUlZFCVBFUkNQVV9NT0RVTEVfUkVTRVJWRQorI2Vsc2UKKyNkZWZpbmUgUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUJMAorI2VuZGlmCisKKy8qKgorICogcGNwdV9uZWVkX251bWEgLSBkZXRlcm1pbmUgcGVyY3B1IGFsbG9jYXRpb24gbmVlZHMgdG8gY29uc2lkZXIgTlVNQQorICoKKyAqIElmIE5VTUEgaXMgbm90IGNvbmZpZ3VyZWQgb3IgdGhlcmUgaXMgb25seSBvbmUgTlVNQSBub2RlIGF2YWlsYWJsZSwKKyAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBjb25zaWRlciBOVU1BLiAgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzCisgKiB3aGV0aGVyIHBlcmNwdSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBOVU1BIG9yIG5vdC4KKyAqCisgKiBSRVRVUk5TOgorICogdHJ1ZSBpZiBOVU1BIHNob3VsZCBiZSBjb25zaWRlcmVkOyBvdGhlcndpc2UsIGZhbHNlLgorICovCitzdGF0aWMgYm9vbCBfX2luaXQgcGNwdV9uZWVkX251bWEodm9pZCkKIHsKLQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfaW5pdGlhbGl6ZWRfbWFzayk7Ci0JYWxsb2NfYm9vdG1lbV9jcHVtYXNrX3ZhcigmY3B1X2NhbGxpbl9tYXNrKTsKLQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfY2FsbG91dF9tYXNrKTsKLQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfc2libGluZ19zZXR1cF9tYXNrKTsKKyNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUworCXBnX2RhdGFfdCAqbGFzdCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOworCisJCWlmIChub2RlX29ubGluZShub2RlKSAmJiBOT0RFX0RBVEEobm9kZSkgJiYKKwkJICAgIGxhc3QgJiYgbGFzdCAhPSBOT0RFX0RBVEEobm9kZSkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlsYXN0ID0gTk9ERV9EQVRBKG5vZGUpOworCX0KKyNlbmRpZgorCXJldHVybiBmYWxzZTsKIH0KIAotI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpCisvKioKKyAqIHBjcHVfYWxsb2NfYm9vdG1lbSAtIE5VTUEgZnJpZW5kbHkgYWxsb2NfYm9vdG1lbSB3cmFwcGVyIGZvciBwZXJjcHUKKyAqIEBjcHU6IGNwdSB0byBhbGxvY2F0ZSBmb3IKKyAqIEBzaXplOiBzaXplIGFsbG9jYXRpb24gaW4gYnl0ZXMKKyAqIEBhbGlnbjogYWxpZ25tZW50CisgKgorICogQWxsb2NhdGUgQHNpemUgYnl0ZXMgYWxpZ25lZCBhdCBAYWxpZ24gZm9yIGNwdSBAY3B1LiAgVGhpcyB3cmFwcGVyCisgKiBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IgTlVNQSByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50CisgKiBjb25maWd1cmF0aW9uLgorICoKKyAqIFJFVFVSTlM6CisgKiBQb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkICogX19pbml0IHBjcHVfYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CisJY29uc3QgdW5zaWduZWQgbG9uZyBnb2FsID0gX19wYShNQVhfRE1BX0FERFJFU1MpOworI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCisJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOworCXZvaWQgKnB0cjsKKworCWlmICghbm9kZV9vbmxpbmUobm9kZSkgfHwgIU5PREVfREFUQShub2RlKSkgeworCQlwdHIgPSBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLCBhbGlnbiwgZ29hbCk7CisJCXByX2luZm8oImNwdSAlZCBoYXMgbm8gbm9kZSAlZCBvciBub2RlLWxvY2FsIG1lbW9yeVxuIiwKKwkJCWNwdSwgbm9kZSk7CisJCXByX2RlYnVnKCJwZXIgY3B1IGRhdGEgZm9yIGNwdSVkICVsdSBieXRlcyBhdCAlMDE2bHhcbiIsCisJCQkgY3B1LCBzaXplLCBfX3BhKHB0cikpOworCX0gZWxzZSB7CisJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKG5vZGUpLAorCQkJCQkJICAgc2l6ZSwgYWxpZ24sIGdvYWwpOworCQlwcl9kZWJ1ZygicGVyIGNwdSBkYXRhIGZvciBjcHUlZCAlbHUgYnl0ZXMgb24gbm9kZSVkIGF0ICIKKwkJCSAiJTAxNmx4XG4iLCBjcHUsIHNpemUsIG5vZGUsIF9fcGEocHRyKSk7CisJfQorCXJldHVybiBwdHI7CisjZWxzZQorCXJldHVybiBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLCBhbGlnbiwgZ29hbCk7CisjZW5kaWYKIH0KIAotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKy8qCisgKiBSZW1hcCBhbGxvY2F0b3IKKyAqCisgKiBUaGlzIGFsbG9jYXRvciB1c2VzIFBNRCBwYWdlIGFzIHVuaXQuICBBIFBNRCBwYWdlIGlzIGFsbG9jYXRlZCBmb3IKKyAqIGVhY2ggY3B1IGFuZCBlYWNoIGlzIHJlbWFwcGVkIGludG8gdm1hbGxvYyBhcmVhIHVzaW5nIFBNRCBtYXBwaW5nLgorICogQXMgUE1EIHBhZ2UgaXMgcXVpdGUgbGFyZ2UsIG9ubHkgcGFydCBvZiBpdCBpcyB1c2VkIGZvciB0aGUgZmlyc3QKKyAqIGNodW5rLiAgVW51c2VkIHBhcnQgaXMgcmV0dXJuZWQgdG8gdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgorICoKKyAqIFNvLCB0aGUgUE1EIHBhZ2VzIGFyZSBtYXBwZWQgdHdpY2UgLSBvbmNlIHRvIHRoZSBwaHlzaWNhbCBtYXBwaW5nCisgKiBhbmQgdG8gdGhlIHZtYWxsb2MgYXJlYSBmb3IgdGhlIGZpcnN0IHBlcmNwdSBjaHVuay4gIFRoZSBkb3VibGUKKyAqIG1hcHBpbmcgZG9lcyBhZGQgb25lIG1vcmUgUE1EIFRMQiBlbnRyeSBwcmVzc3VyZSBidXQgc3RpbGwgaXMgbXVjaAorICogYmV0dGVyIHRoYW4gb25seSB1c2luZyA0ayBtYXBwaW5ncyB3aGlsZSBzdGlsbCBiZWluZyBOVU1BIGZyaWVuZGx5LgorICovCisjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKK3N0YXRpYyBzaXplX3QgcGNwdXJfc2l6ZSBfX2luaXRkYXRhOworc3RhdGljIHZvaWQgKipwY3B1cl9wdHJzIF9faW5pdGRhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqIF9faW5pdCBwY3B1cl9nZXRfcGFnZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgcGFnZW5vKQoreworCXNpemVfdCBvZmYgPSAoc2l6ZV90KXBhZ2VubyA8PCBQQUdFX1NISUZUOworCisJaWYgKG9mZiA+PSBwY3B1cl9zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB2aXJ0X3RvX3BhZ2UocGNwdXJfcHRyc1tjcHVdICsgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgX19pbml0IHNldHVwX3BjcHVfcmVtYXAoc2l6ZV90IHN0YXRpY19zaXplKQoreworCXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHZtOworCXBnX2RhdGFfdCAqbGFzdDsKKwlzaXplX3QgcHRyc19zaXplLCBkeW5fc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXNzaXplX3QgcmV0OworCisJLyoKKwkgKiBJZiBsYXJnZSBwYWdlIGlzbid0IHN1cHBvcnRlZCwgdGhlcmUncyBubyBiZW5lZml0IGluIGRvaW5nCisJICogdGhpcy4gIEFsc28sIG9uIG5vbi1OVU1BLCBlbWJlZGRpbmcgaXMgYmV0dGVyLgorCSAqLworCWlmICghY3B1X2hhc19wc2UgfHwgcGNwdV9uZWVkX251bWEoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsYXN0ID0gTlVMTDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKKworCQlpZiAobm9kZV9vbmxpbmUobm9kZSkgJiYgTk9ERV9EQVRBKG5vZGUpICYmCisJCSAgICBsYXN0ICYmIGxhc3QgIT0gTk9ERV9EQVRBKG5vZGUpKQorCQkJZ290byBwcm9jZWVkOworCisJCWxhc3QgPSBOT0RFX0RBVEEobm9kZSk7CisJfQorCXJldHVybiAtRUlOVkFMOworCitwcm9jZWVkOgorCS8qCisJICogQ3VycmVudGx5IHN1cHBvcnRzIG9ubHkgc2luZ2xlIHBhZ2UuICBTdXBwb3J0aW5nIG11bHRpcGxlCisJICogcGFnZXMgd29uJ3QgYmUgdG9vIGRpZmZpY3VsdCBpZiBpdCBldmVyIGJlY29tZXMgbmVjZXNzYXJ5LgorCSAqLworCXBjcHVyX3NpemUgPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgKworCQkJICAgICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUpOworCWlmIChwY3B1cl9zaXplID4gUE1EX1NJWkUpIHsKKwkJcHJfd2FybmluZygiUEVSQ1BVOiBzdGF0aWMgZGF0YSBpcyBsYXJnZXIgdGhhbiBsYXJnZSBwYWdlLCAiCisJCQkgICAiY2FuJ3QgdXNlIGxhcmdlIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHluX3NpemUgPSBwY3B1cl9zaXplIC0gc3RhdGljX3NpemUgLSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRTsKKworCS8qIGFsbG9jYXRlIHBvaW50ZXIgYXJyYXkgYW5kIGFsbG9jIGxhcmdlIHBhZ2VzICovCisJcHRyc19zaXplID0gUEZOX0FMSUdOKG51bV9wb3NzaWJsZV9jcHVzKCkgKiBzaXplb2YocGNwdXJfcHRyc1swXSkpOworCXBjcHVyX3B0cnMgPSBhbGxvY19ib290bWVtKHB0cnNfc2l6ZSk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXBjcHVyX3B0cnNbY3B1XSA9IHBjcHVfYWxsb2NfYm9vdG1lbShjcHUsIFBNRF9TSVpFLCBQTURfU0laRSk7CisJCWlmICghcGNwdXJfcHRyc1tjcHVdKQorCQkJZ290byBlbm9tZW07CisKKwkJLyoKKwkJICogT25seSB1c2UgcGNwdXJfc2l6ZSBieXRlcyBhbmQgZ2l2ZSBiYWNrIHRoZSByZXN0LgorCQkgKgorCQkgKiBJbmdvOiBUaGUgMk1CIHVwLXJvdW5kaW5nIGJvb3RtZW0gaXMgbmVlZGVkIHRvIG1ha2UKKwkJICogc3VyZSB0aGUgcGFydGlhbCAyTUIgcGFnZSBpcyBzdGlsbCBmdWxseSBSQU0gLSBpdCdzCisJCSAqIG5vdCB3ZWxsLXNwZWNpZmllZCB0byBoYXZlIGEgUEFULWluY29tcGF0aWJsZSBhcmVhCisJCSAqICh1bm1hcHBlZCBSQU0sIGRldmljZSBtZW1vcnksIGV0Yy4pIGluIHRoYXQgaG9sZS4KKwkJICovCisJCWZyZWVfYm9vdG1lbShfX3BhKHBjcHVyX3B0cnNbY3B1XSArIHBjcHVyX3NpemUpLAorCQkJICAgICBQTURfU0laRSAtIHBjcHVyX3NpemUpOworCisJCW1lbWNweShwY3B1cl9wdHJzW2NwdV0sIF9fcGVyX2NwdV9sb2FkLCBzdGF0aWNfc2l6ZSk7CisJfQorCisJLyogYWxsb2NhdGUgYWRkcmVzcyBhbmQgbWFwICovCisJdm0uZmxhZ3MgPSBWTV9BTExPQzsKKwl2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIFBNRF9TSVpFOworCXZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoJnZtLCBQTURfU0laRSk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXBtZF90ICpwbWQ7CisKKwkJcG1kID0gcG9wdWxhdGVfZXh0cmFfcG1kKCh1bnNpZ25lZCBsb25nKXZtLmFkZHIKKwkJCQkJICsgY3B1ICogUE1EX1NJWkUpOworCQlzZXRfcG1kKHBtZCwgcGZuX3BtZChwYWdlX3RvX3Bmbih2aXJ0X3RvX3BhZ2UocGNwdXJfcHRyc1tjcHVdKSksCisJCQkJICAgICBQQUdFX0tFUk5FTF9MQVJHRSkpOworCX0KKworCS8qIHdlJ3JlIHJlYWR5LCBjb21taXQgKi8KKwlwcl9pbmZvKCJQRVJDUFU6IFJlbWFwcGVkIGF0ICVwIHdpdGggbGFyZ2UgcGFnZXMsIHN0YXRpYyBkYXRhICIKKwkJIiV6dSBieXRlc1xuIiwgdm0uYWRkciwgc3RhdGljX3NpemUpOworCisJcmV0ID0gcGNwdV9zZXR1cF9maXJzdF9jaHVuayhwY3B1cl9nZXRfcGFnZSwgc3RhdGljX3NpemUsCisJCQkJICAgICBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRSwgZHluX3NpemUsCisJCQkJICAgICBQTURfU0laRSwgdm0uYWRkciwgTlVMTCk7CisJZ290byBvdXRfZnJlZV9hcjsKKworZW5vbWVtOgorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCWlmIChwY3B1cl9wdHJzW2NwdV0pCisJCQlmcmVlX2Jvb3RtZW0oX19wYShwY3B1cl9wdHJzW2NwdV0pLCBQTURfU0laRSk7CisJcmV0ID0gLUVOT01FTTsKK291dF9mcmVlX2FyOgorCWZyZWVfYm9vdG1lbShfX3BhKHBjcHVyX3B0cnMpLCBwdHJzX3NpemUpOworCXJldHVybiByZXQ7Cit9CisjZWxzZQorc3RhdGljIHNzaXplX3QgX19pbml0IHNldHVwX3BjcHVfcmVtYXAoc2l6ZV90IHN0YXRpY19zaXplKQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKKy8qCisgKiBFbWJlZGRpbmcgYWxsb2NhdG9yCisgKgorICogVGhlIGZpcnN0IGNodW5rIGlzIHNpemVkIHRvIGp1c3QgY29udGFpbiB0aGUgc3RhdGljIGFyZWEgcGx1cworICogbW9kdWxlIGFuZCBkeW5hbWljIHJlc2VydmVzIGFuZCBlbWJlZGRlZCBpbnRvIGxpbmVhciBwaHlzaWNhbAorICogbWFwcGluZyBzbyB0aGF0IGl0IGNhbiB1c2UgUE1EIG1hcHBpbmcgd2l0aG91dCBhZGRpdGlvbmFsIFRMQgorICogcHJlc3N1cmUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IF9faW5pdCBzZXR1cF9wY3B1X2VtYmVkKHNpemVfdCBzdGF0aWNfc2l6ZSkKK3sKKwlzaXplX3QgcmVzZXJ2ZSA9IFBFUkNQVV9NT0RVTEVfUkVTRVJWRSArIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkU7CisKKwkvKgorCSAqIElmIGxhcmdlIHBhZ2UgaXNuJ3Qgc3VwcG9ydGVkLCB0aGVyZSdzIG5vIGJlbmVmaXQgaW4gZG9pbmcKKwkgKiB0aGlzLiAgQWxzbywgZW1iZWRkaW5nIGFsbG9jYXRpb24gZG9lc24ndCBwbGF5IHdlbGwgd2l0aAorCSAqIE5VTUEuCisJICovCisJaWYgKCFjcHVfaGFzX3BzZSB8fCBwY3B1X25lZWRfbnVtYSgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKHN0YXRpY19zaXplLCBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRSwKKwkJCQkgICAgICByZXNlcnZlIC0gUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUsIC0xKTsKK30KKworLyoKKyAqIDRrIHBhZ2UgYWxsb2NhdG9yCisgKgorICogVGhpcyBpcyB0aGUgYmFzaWMgYWxsb2NhdG9yLiAgU3RhdGljIHBlcmNwdSBhcmVhIGlzIGFsbG9jYXRlZAorICogcGFnZS1ieS1wYWdlIGFuZCBtb3N0IG9mIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgYnkgdGhlIGdlbmVyaWMKKyAqIHNldHVwIGZ1bmN0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKipwY3B1NGtfcGFnZXMgX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgcGNwdTRrX25yX3N0YXRpY19wYWdlcyBfX2luaXRkYXRhOworCitzdGF0aWMgc3RydWN0IHBhZ2UgKiBfX2luaXQgcGNwdTRrX2dldF9wYWdlKHVuc2lnbmVkIGludCBjcHUsIGludCBwYWdlbm8pCit7CisJaWYgKHBhZ2VubyA8IHBjcHU0a19ucl9zdGF0aWNfcGFnZXMpCisJCXJldHVybiBwY3B1NGtfcGFnZXNbY3B1ICogcGNwdTRrX25yX3N0YXRpY19wYWdlcyArIHBhZ2Vub107CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1NGtfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwb3B1bGF0ZV9leHRyYV9wdGUoYWRkcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IF9faW5pdCBzZXR1cF9wY3B1XzRrKHNpemVfdCBzdGF0aWNfc2l6ZSkKK3sKKwlzaXplX3QgcGFnZXNfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCWludCBpLCBqOworCXNzaXplX3QgcmV0OworCisJcGNwdTRrX25yX3N0YXRpY19wYWdlcyA9IFBGTl9VUChzdGF0aWNfc2l6ZSk7CisKKwkvKiB1bmFsaWduZWQgYWxsb2NhdGlvbnMgY2FuJ3QgYmUgZnJlZWQsIHJvdW5kIHVwIHRvIHBhZ2Ugc2l6ZSAqLworCXBhZ2VzX3NpemUgPSBQRk5fQUxJR04ocGNwdTRrX25yX3N0YXRpY19wYWdlcyAqIG51bV9wb3NzaWJsZV9jcHVzKCkKKwkJCSAgICAgICAqIHNpemVvZihwY3B1NGtfcGFnZXNbMF0pKTsKKwlwY3B1NGtfcGFnZXMgPSBhbGxvY19ib290bWVtKHBhZ2VzX3NpemUpOworCisJLyogYWxsb2NhdGUgYW5kIGNvcHkgKi8KKwlqID0gMDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlmb3IgKGkgPSAwOyBpIDwgcGNwdTRrX25yX3N0YXRpY19wYWdlczsgaSsrKSB7CisJCQl2b2lkICpwdHI7CisKKwkJCXB0ciA9IHBjcHVfYWxsb2NfYm9vdG1lbShjcHUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJCWlmICghcHRyKQorCQkJCWdvdG8gZW5vbWVtOworCisJCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfbG9hZCArIGkgKiBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJCQlwY3B1NGtfcGFnZXNbaisrXSA9IHZpcnRfdG9fcGFnZShwdHIpOworCQl9CisKKwkvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovCisJcHJfaW5mbygiUEVSQ1BVOiBBbGxvY2F0ZWQgJWQgNGsgcGFnZXMsIHN0YXRpYyBkYXRhICV6dSBieXRlc1xuIiwKKwkJcGNwdTRrX25yX3N0YXRpY19wYWdlcywgc3RhdGljX3NpemUpOworCisJcmV0ID0gcGNwdV9zZXR1cF9maXJzdF9jaHVuayhwY3B1NGtfZ2V0X3BhZ2UsIHN0YXRpY19zaXplLAorCQkJCSAgICAgUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUsIC0xLAorCQkJCSAgICAgLTEsIE5VTEwsIHBjcHU0a19wb3B1bGF0ZV9wdGUpOworCWdvdG8gb3V0X2ZyZWVfYXI7CisKK2Vub21lbToKKwl3aGlsZSAoLS1qID49IDApCisJCWZyZWVfYm9vdG1lbShfX3BhKHBhZ2VfYWRkcmVzcyhwY3B1NGtfcGFnZXNbal0pKSwgUEFHRV9TSVpFKTsKKwlyZXQgPSAtRU5PTUVNOworb3V0X2ZyZWVfYXI6CisJZnJlZV9ib290bWVtKF9fcGEocGNwdTRrX3BhZ2VzKSwgcGFnZXNfc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BlcmNwdV9zZWdtZW50KGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXN0cnVjdCBkZXNjX3N0cnVjdCBnZHQ7CisKKwlwYWNrX2Rlc2NyaXB0b3IoJmdkdCwgcGVyX2NwdV9vZmZzZXQoY3B1KSwgMHhGRkZGRiwKKwkJCTB4MiB8IERFU0NUWVBFX1MsIDB4OCk7CisJZ2R0LnMgPSAxOworCXdyaXRlX2dkdF9lbnRyeShnZXRfY3B1X2dkdF90YWJsZShjcHUpLAorCQkJR0RUX0VOVFJZX1BFUkNQVSwgJmdkdCwgREVTQ1RZUEVfUyk7CisjZW5kaWYKK30KIAogLyoKICAqIEdyZWF0IGZ1dHVyZSBwbGFuOgpAQCAtMTU5LDUwICszNjUsNzcgQEAKICAqLwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewotCXNzaXplX3Qgc2l6ZSwgb2xkX3NpemU7Ci0JY2hhciAqcHRyOwotCWludCBjcHU7Ci0JdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7Ci0KLQkvKiBTZXR1cCBjcHVfcGRhIG1hcCAqLwotCXNldHVwX2NwdV9wZGFfbWFwKCk7Ci0KLQkvKiBDb3B5IHNlY3Rpb24gZm9yIGVhY2ggQ1BVICh3ZSBkaXNjYXJkIHRoZSBvcmlnaW5hbCkgKi8KLQlvbGRfc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKLQlhbGlnbiA9IG1heF90KHVuc2lnbmVkIGxvbmcsIFBBR0VfU0laRSwgYWxpZ24pOwotCXNpemUgPSByb3VuZHVwKG9sZF9zaXplLCBhbGlnbik7CisJc2l6ZV90IHN0YXRpY19zaXplID0gX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgZGVsdGE7CisJc2l6ZV90IHBjcHVfdW5pdF9zaXplOworCXNzaXplX3QgcmV0OwogCiAJcHJfaW5mbygiTlJfQ1BVUzolZCBucl9jcHVtYXNrX2JpdHM6JWQgbnJfY3B1X2lkczolZCBucl9ub2RlX2lkczolZFxuIiwKIAkJTlJfQ1BVUywgbnJfY3B1bWFza19iaXRzLCBucl9jcHVfaWRzLCBucl9ub2RlX2lkcyk7CiAKLQlwcl9pbmZvKCJQRVJDUFU6IEFsbG9jYXRpbmcgJXpkIGJ5dGVzIG9mIHBlciBjcHUgZGF0YVxuIiwgc2l6ZSk7CisJLyoKKwkgKiBBbGxvY2F0ZSBwZXJjcHUgYXJlYS4gIElmIFBTRSBpcyBzdXBwb3J0ZWQsIHRyeSB0byBtYWtlIHVzZQorCSAqIG9mIGxhcmdlIHBhZ2UgbWFwcGluZ3MuICBQbGVhc2UgcmVhZCBjb21tZW50cyBvbiB0b3Agb2YKKwkgKiBlYWNoIGFsbG9jYXRvciBmb3IgZGV0YWlscy4KKwkgKi8KKwlyZXQgPSBzZXR1cF9wY3B1X3JlbWFwKHN0YXRpY19zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0ID0gc2V0dXBfcGNwdV9lbWJlZChzdGF0aWNfc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCXJldCA9IHNldHVwX3BjcHVfNGsoc3RhdGljX3NpemUpOworCWlmIChyZXQgPCAwKQorCQlwYW5pYygiY2Fubm90IGFsbG9jYXRlIHN0YXRpYyBwZXJjcHUgYXJlYSAoJXp1IGJ5dGVzLCBlcnI9JXpkKSIsCisJCSAgICAgIHN0YXRpY19zaXplLCByZXQpOwogCisJcGNwdV91bml0X3NpemUgPSByZXQ7CisKKwkvKiBhbHJpZ2h0eSwgcGVyY3B1IGFyZWFzIHVwIGFuZCBydW5uaW5nICovCisJZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0jaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi0JCXB0ciA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwKLQkJCQkgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKLSNlbHNlCi0JCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKLQkJaWYgKCFub2RlX29ubGluZShub2RlKSB8fCAhTk9ERV9EQVRBKG5vZGUpKSB7Ci0JCQlwdHIgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgYWxpZ24sCi0JCQkJCSBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwotCQkJcHJfaW5mbygiY3B1ICVkIGhhcyBubyBub2RlICVkIG9yIG5vZGUtbG9jYWwgbWVtb3J5XG4iLAotCQkJCWNwdSwgbm9kZSk7Ci0JCQlwcl9kZWJ1ZygicGVyIGNwdSBkYXRhIGZvciBjcHUlZCBhdCAlMDE2bHhcbiIsCi0JCQkJIGNwdSwgX19wYShwdHIpKTsKLQkJfSBlbHNlIHsKLQkJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlKSwgc2l6ZSwgYWxpZ24sCi0JCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsKLQkJCXByX2RlYnVnKCJwZXIgY3B1IGRhdGEgZm9yIGNwdSVkIG9uIG5vZGUlZCBhdCAlMDE2bHhcbiIsCi0JCQkJY3B1LCBub2RlLCBfX3BhKHB0cikpOwotCQl9CisJCXBlcl9jcHVfb2Zmc2V0KGNwdSkgPSBkZWx0YSArIGNwdSAqIHBjcHVfdW5pdF9zaXplOworCQlwZXJfY3B1KHRoaXNfY3B1X29mZiwgY3B1KSA9IHBlcl9jcHVfb2Zmc2V0KGNwdSk7CisJCXBlcl9jcHUoY3B1X251bWJlciwgY3B1KSA9IGNwdTsKKwkJc2V0dXBfcGVyY3B1X3NlZ21lbnQoY3B1KTsKKwkJc2V0dXBfc3RhY2tfY2FuYXJ5X3NlZ21lbnQoY3B1KTsKKwkJLyoKKwkJICogQ29weSBkYXRhIHVzZWQgaW4gZWFybHkgaW5pdCByb3V0aW5lcyBmcm9tIHRoZQorCQkgKiBpbml0aWFsIGFycmF5cyB0byB0aGUgcGVyIGNwdSBkYXRhIGFyZWFzLiAgVGhlc2UKKwkJICogYXJyYXlzIHRoZW4gYmVjb21lIGV4cGVuZGFibGUgYW5kIHRoZSAqX2Vhcmx5X3B0cidzCisJCSAqIGFyZSB6ZXJvZWQgaW5kaWNhdGluZyB0aGF0IHRoZSBzdGF0aWMgYXJyYXlzIGFyZQorCQkgKiBnb25lLgorCQkgKi8KKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9CisJCQllYXJseV9wZXJfY3B1X21hcCh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKKwkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0KKwkJCWVhcmx5X3Blcl9jcHVfbWFwKHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSk7CiAjZW5kaWYKLQkJcGVyX2NwdV9vZmZzZXQoY3B1KSA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKLQkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X3N0YXJ0LCBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCXBlcl9jcHUoaXJxX3N0YWNrX3B0ciwgY3B1KSA9CisJCQlwZXJfY3B1KGlycV9zdGFja191bmlvbi5pcnFfc3RhY2ssIGNwdSkgKworCQkJSVJRX1NUQUNLX1NJWkUgLSA2NDsKKyNpZmRlZiBDT05GSUdfTlVNQQorCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSkgPQorCQkJZWFybHlfcGVyX2NwdV9tYXAoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKKyNlbmRpZgorI2VuZGlmCisJCS8qCisJCSAqIFVwIHRvIHRoaXMgcG9pbnQsIHRoZSBib290IENQVSBoYXMgYmVlbiB1c2luZyAuZGF0YS5pbml0CisJCSAqIGFyZWEuICBSZWxvYWQgYW55IGNoYW5nZWQgc3RhdGUgZm9yIHRoZSBib290IENQVS4KKwkJICovCisJCWlmIChjcHUgPT0gYm9vdF9jcHVfaWQpCisJCQlzd2l0Y2hfdG9fbmV3X2dkdChjcHUpOwogCX0KIAotCS8qIFNldHVwIHBlcmNwdSBkYXRhIG1hcHMgKi8KLQlzZXR1cF9wZXJfY3B1X21hcHMoKTsKKwkvKiBpbmRpY2F0ZSB0aGUgZWFybHkgc3RhdGljIGFycmF5cyB3aWxsIHNvb24gYmUgZ29uZSAqLworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCWVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKSA9IE5VTEw7CisJZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCkgPSBOVUxMOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSAmJiBkZWZpbmVkKENPTkZJR19OVU1BKQorCWVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApID0gTlVMTDsKKyNlbmRpZgogCiAJLyogU2V0dXAgbm9kZSB0byBjcHVtYXNrIG1hcCAqLwogCXNldHVwX25vZGVfdG9fY3B1bWFza19tYXAoKTsKQEAgLTIxMCwxOTkgKzQ0MywzIEBACiAJLyogU2V0dXAgY3B1IGluaXRpYWxpemVkLCBjYWxsaW4sIGNhbGxvdXQgbWFza3MgKi8KIAlzZXR1cF9jcHVfbG9jYWxfbWFza3MoKTsKIH0KLQotI2VuZGlmCi0KLSNpZmRlZiBYODZfNjRfTlVNQQotCi0vKgotICogQWxsb2NhdGUgbm9kZV90b19jcHVtYXNrX21hcCBiYXNlZCBvbiBudW1iZXIgb2YgYXZhaWxhYmxlIG5vZGVzCi0gKiBSZXF1aXJlcyBub2RlX3Bvc3NpYmxlX21hcCB0byBiZSB2YWxpZC4KLSAqCi0gKiBOb3RlOiBub2RlX3RvX2NwdW1hc2soKSBpcyBub3QgdmFsaWQgdW50aWwgYWZ0ZXIgdGhpcyBpcyBkb25lLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKQotewotCXVuc2lnbmVkIGludCBub2RlLCBudW0gPSAwOwotCWNwdW1hc2tfdCAqbWFwOwotCi0JLyogc2V0dXAgbnJfbm9kZV9pZHMgaWYgbm90IGRvbmUgeWV0ICovCi0JaWYgKG5yX25vZGVfaWRzID09IE1BWF9OVU1OT0RFUykgewotCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZV9wb3NzaWJsZV9tYXApCi0JCQludW0gPSBub2RlOwotCQlucl9ub2RlX2lkcyA9IG51bSArIDE7Ci0JfQotCi0JLyogYWxsb2NhdGUgdGhlIG1hcCAqLwotCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbG93KG5yX25vZGVfaWRzICogc2l6ZW9mKGNwdW1hc2tfdCkpOwotCi0JcHJfZGVidWcoIk5vZGUgdG8gY3B1bWFzayBtYXAgYXQgJXAgZm9yICVkIG5vZGVzXG4iLAotCQkgbWFwLCBucl9ub2RlX2lkcyk7Ci0KLQkvKiBub2RlX3RvX2NwdW1hc2soKSB3aWxsIG5vdyB3b3JrICovCi0Jbm9kZV90b19jcHVtYXNrX21hcCA9IG1hcDsKLX0KLQotdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKLXsKLQlpbnQgKmNwdV90b19ub2RlX21hcCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApOwotCi0JaWYgKGNwdV9wZGEoY3B1KSAmJiBub2RlICE9IE5VTUFfTk9fTk9ERSkKLQkJY3B1X3BkYShjcHUpLT5ub2RlbnVtYmVyID0gbm9kZTsKLQotCWlmIChjcHVfdG9fbm9kZV9tYXApCi0JCWNwdV90b19ub2RlX21hcFtjcHVdID0gbm9kZTsKLQotCWVsc2UgaWYgKHBlcl9jcHVfb2Zmc2V0KGNwdSkpCi0JCXBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KSA9IG5vZGU7Ci0KLQllbHNlCi0JCXByX2RlYnVnKCJTZXR0aW5nIG5vZGUgZm9yIG5vbi1wcmVzZW50IGNwdSAlZFxuIiwgY3B1KTsKLX0KLQotdm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpCi17Ci0JbnVtYV9zZXRfbm9kZShjcHUsIE5VTUFfTk9fTk9ERSk7Ci19Ci0KLSNpZm5kZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwotCi12b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKLXsKLQljcHVfc2V0KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQotewotCWNwdV9jbGVhcihjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbY3B1X3RvX25vZGUoY3B1KV0pOwotfQotCi0jZWxzZSAvKiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCi0KLS8qCi0gKiAtLS0tLS0tLS0gZGVidWcgdmVyc2lvbnMgb2YgdGhlIG51bWEgZnVuY3Rpb25zIC0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQotewotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQljcHVtYXNrX3QgKm1hc2s7Ci0JY2hhciBidWZbNjRdOwotCi0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vZGVfdG9fY3B1bWFza19tYXAgTlVMTFxuIik7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCW1hc2sgPSAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKLQlpZiAoZW5hYmxlKQotCQljcHVfc2V0KGNwdSwgKm1hc2spOwotCWVsc2UKLQkJY3B1X2NsZWFyKGNwdSwgKm1hc2spOwotCi0JY3B1bGlzdF9zY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgbWFzayk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNwdSAlZCBub2RlICVkOiBtYXNrIG5vdyAlc1xuIiwKLQkJZW5hYmxlID8gIm51bWFfYWRkX2NwdSIgOiAibnVtYV9yZW1vdmVfY3B1IiwgY3B1LCBub2RlLCBidWYpOwotfQotCi12b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKLXsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMSk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQotewotCW51bWFfc2V0X2NwdW1hc2soY3B1LCAwKTsKLX0KLQotaW50IGNwdV90b19ub2RlKGludCBjcHUpCi17Ci0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjcHVfdG9fbm9kZSglZCk6IHVzYWdlIHRvbyBlYXJseSFcbiIsIGNwdSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApW2NwdV07Ci0JfQotCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNwdV90b19ub2RlKTsKLQotLyoKLSAqIFNhbWUgZnVuY3Rpb24gYXMgY3B1X3RvX25vZGUoKSBidXQgdXNlZCBpZiBjYWxsZWQgYmVmb3JlIHRoZQotICogcGVyX2NwdSBhcmVhcyBhcmUgc2V0dXAuCi0gKi8KLWludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQotewotCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKSkKLQkJcmV0dXJuIGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApW2NwdV07Ci0KLQlpZiAoIXBlcl9jcHVfb2Zmc2V0KGNwdSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImVhcmx5X2NwdV90b19ub2RlKCVkKTogbm8gcGVyX2NwdSBhcmVhIVxuIiwgY3B1KTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gTlVNQV9OT19OT0RFOwotCX0KLQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOwotfQotCi0KLS8qIGVtcHR5IGNwdW1hc2sgKi8KLXN0YXRpYyBjb25zdCBjcHVtYXNrX3QgY3B1X21hc2tfbm9uZTsKLQotLyoKLSAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCi0gKi8KLWNvbnN0IGNwdW1hc2tfdCAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQotewotCWlmIChub2RlX3RvX2NwdW1hc2tfbWFwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vIG5vZGVfdG9fY3B1bWFza19tYXAhXG4iLAotCQkJbm9kZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIChjb25zdCBjcHVtYXNrX3QgKikmY3B1X29ubGluZV9tYXA7Ci0JfQotCWlmIChub2RlID49IG5yX25vZGVfaWRzKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBub2RlID4gbnJfbm9kZV9pZHMoJWQpXG4iLAotCQkJbm9kZSwgbnJfbm9kZV9pZHMpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiAmY3B1X21hc2tfbm9uZTsKLQl9Ci0JcmV0dXJuICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotRVhQT1JUX1NZTUJPTChjcHVtYXNrX29mX25vZGUpOwotCi0vKgotICogUmV0dXJucyBhIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4KLSAqCi0gKiBTaWRlIG5vdGU6IHRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgcmV0dXJuZWQgY3B1bWFzayBvbiB0aGUgc3RhY2sKLSAqIHNvIHdpdGggYSBoaWdoIE5SX0NQVVMgY291bnQsIGV4Y2Vzc2l2ZSBzdGFjayBzcGFjZSBpcyB1c2VkLiAgVGhlCi0gKiBub2RlX3RvX2NwdW1hc2tfcHRyIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLgotICovCi1jcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCWlmIChub2RlX3RvX2NwdW1hc2tfbWFwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIm5vZGVfdG9fY3B1bWFzayglZCk6IG5vIG5vZGVfdG9fY3B1bWFza19tYXAhXG4iLCBub2RlKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gY3B1X29ubGluZV9tYXA7Ci0JfQotCWlmIChub2RlID49IG5yX25vZGVfaWRzKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJub2RlX3RvX2NwdW1hc2soJWQpOiBub2RlID4gbnJfbm9kZV9pZHMoJWQpXG4iLAotCQkJbm9kZSwgbnJfbm9kZV9pZHMpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBjcHVfbWFza19ub25lOwotCX0KLQlyZXR1cm4gbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKLX0KLUVYUE9SVF9TWU1CT0wobm9kZV90b19jcHVtYXNrKTsKLQotLyoKLSAqIC0tLS0tLS0tLSBlbmQgb2YgZGVidWcgdmVyc2lvbnMgb2YgdGhlIG51bWEgZnVuY3Rpb25zIC0tLS0tLS0tLQotICovCi0KLSNlbmRpZiAvKiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCi0KLSNlbmRpZiAvKiBYODZfNjRfTlVNQSAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZGYwNTg3Zi4uZDJjYzY0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwpAQCAtNTAsMjcgKzUwLDIzIEBACiAjIGRlZmluZSBGSVhfRUZMQUdTCV9fRklYX0VGTEFHUwogI2VuZGlmCiAKLSNkZWZpbmUgQ09QWSh4KQkJCXsJCVwKLQllcnIgfD0gX19nZXRfdXNlcihyZWdzLT54LCAmc2MtPngpOwlcCi19CisjZGVmaW5lIENPUFkoeCkJCQlkbyB7CQkJXAorCWdldF91c2VyX2V4KHJlZ3MtPngsICZzYy0+eCk7CQkJXAorfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDT1BZX1NFRyhzZWcpCQl7CQkJXAotCQl1bnNpZ25lZCBzaG9ydCB0bXA7CQkJXAotCQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+c2VnKTsJXAotCQlyZWdzLT5zZWcgPSB0bXA7CQkJXAotfQorI2RlZmluZSBHRVRfU0VHKHNlZykJCSh7CQkJXAorCXVuc2lnbmVkIHNob3J0IHRtcDsJCQkJXAorCWdldF91c2VyX2V4KHRtcCwgJnNjLT5zZWcpOwkJCVwKKwl0bXA7CQkJCQkJXAorfSkKIAotI2RlZmluZSBDT1BZX1NFR19DUEwzKHNlZykJewkJCVwKLQkJdW5zaWduZWQgc2hvcnQgdG1wOwkJCVwKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodG1wLCAmc2MtPnNlZyk7CVwKLQkJcmVncy0+c2VnID0gdG1wIHwgMzsJCQlcCi19CisjZGVmaW5lIENPUFlfU0VHKHNlZykJCWRvIHsJCQlcCisJcmVncy0+c2VnID0gR0VUX1NFRyhzZWcpOwkJCVwKK30gd2hpbGUgKDApCiAKLSNkZWZpbmUgR0VUX1NFRyhzZWcpCQl7CQkJXAotCQl1bnNpZ25lZCBzaG9ydCB0bXA7CQkJXAotCQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+c2VnKTsJXAotCQlsb2Fkc2VnbWVudChzZWcsIHRtcCk7CQkJXAotfQorI2RlZmluZSBDT1BZX1NFR19DUEwzKHNlZykJZG8gewkJCVwKKwlyZWdzLT5zZWcgPSBHRVRfU0VHKHNlZykgfCAzOwkJCVwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbnQKIHJlc3RvcmVfc2lnY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYywKQEAgLTgzLDQ1ICs3OSw0OSBAQAogCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLwogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKIAorCWdldF91c2VyX3RyeSB7CisKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JR0VUX1NFRyhncyk7Ci0JQ09QWV9TRUcoZnMpOwotCUNPUFlfU0VHKGVzKTsKLQlDT1BZX1NFRyhkcyk7CisJCXNldF91c2VyX2dzKHJlZ3MsIEdFVF9TRUcoZ3MpKTsKKwkJQ09QWV9TRUcoZnMpOworCQlDT1BZX1NFRyhlcyk7CisJCUNPUFlfU0VHKGRzKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKLQlDT1BZKGRpKTsgQ09QWShzaSk7IENPUFkoYnApOyBDT1BZKHNwKTsgQ09QWShieCk7Ci0JQ09QWShkeCk7IENPUFkoY3gpOyBDT1BZKGlwKTsKKwkJQ09QWShkaSk7IENPUFkoc2kpOyBDT1BZKGJwKTsgQ09QWShzcCk7IENPUFkoYngpOworCQlDT1BZKGR4KTsgQ09QWShjeCk7IENPUFkoaXApOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCUNPUFkocjgpOwotCUNPUFkocjkpOwotCUNPUFkocjEwKTsKLQlDT1BZKHIxMSk7Ci0JQ09QWShyMTIpOwotCUNPUFkocjEzKTsKLQlDT1BZKHIxNCk7Ci0JQ09QWShyMTUpOworCQlDT1BZKHI4KTsKKwkJQ09QWShyOSk7CisJCUNPUFkocjEwKTsKKwkJQ09QWShyMTEpOworCQlDT1BZKHIxMik7CisJCUNPUFkocjEzKTsKKwkJQ09QWShyMTQpOworCQlDT1BZKHIxNSk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCUNPUFlfU0VHX0NQTDMoY3MpOwotCUNPUFlfU0VHX0NQTDMoc3MpOworCQlDT1BZX1NFR19DUEwzKGNzKTsKKwkJQ09QWV9TRUdfQ1BMMyhzcyk7CiAjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMiAqLwotCS8qIEtlcm5lbCBzYXZlcyBhbmQgcmVzdG9yZXMgb25seSB0aGUgQ1Mgc2VnbWVudCByZWdpc3RlciBvbiBzaWduYWxzLAotCSAqIHdoaWNoIGlzIHRoZSBiYXJlIG1pbmltdW0gbmVlZGVkIHRvIGFsbG93IG1peGVkIDMyLzY0LWJpdCBjb2RlLgotCSAqIEFwcCdzIHNpZ25hbCBoYW5kbGVyIGNhbiBzYXZlL3Jlc3RvcmUgb3RoZXIgc2VnbWVudHMgaWYgbmVlZGVkLiAqLwotCUNPUFlfU0VHX0NQTDMoY3MpOworCQkvKiBLZXJuZWwgc2F2ZXMgYW5kIHJlc3RvcmVzIG9ubHkgdGhlIENTIHNlZ21lbnQgcmVnaXN0ZXIgb24gc2lnbmFscywKKwkJICogd2hpY2ggaXMgdGhlIGJhcmUgbWluaW11bSBuZWVkZWQgdG8gYWxsb3cgbWl4ZWQgMzIvNjQtYml0IGNvZGUuCisJCSAqIEFwcCdzIHNpZ25hbCBoYW5kbGVyIGNhbiBzYXZlL3Jlc3RvcmUgb3RoZXIgc2VnbWVudHMgaWYgbmVlZGVkLiAqLworCQlDT1BZX1NFR19DUEwzKGNzKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKLQllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5mbGFncyk7Ci0JcmVncy0+ZmxhZ3MgPSAocmVncy0+ZmxhZ3MgJiB+RklYX0VGTEFHUykgfCAodG1wZmxhZ3MgJiBGSVhfRUZMQUdTKTsKLQlyZWdzLT5vcmlnX2F4ID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCisJCWdldF91c2VyX2V4KHRtcGZsYWdzLCAmc2MtPmZsYWdzKTsKKwkJcmVncy0+ZmxhZ3MgPSAocmVncy0+ZmxhZ3MgJiB+RklYX0VGTEFHUykgfCAodG1wZmxhZ3MgJiBGSVhfRUZMQUdTKTsKKwkJcmVncy0+b3JpZ19heCA9IC0xOwkJLyogZGlzYWJsZSBzeXNjYWxsIGNoZWNrcyAqLwogCi0JZXJyIHw9IF9fZ2V0X3VzZXIoYnVmLCAmc2MtPmZwc3RhdGUpOwotCWVyciB8PSByZXN0b3JlX2kzODdfeHN0YXRlKGJ1Zik7CisJCWdldF91c2VyX2V4KGJ1ZiwgJnNjLT5mcHN0YXRlKTsKKwkJZXJyIHw9IHJlc3RvcmVfaTM4N194c3RhdGUoYnVmKTsKIAotCWVyciB8PSBfX2dldF91c2VyKCpwYXgsICZzYy0+YXgpOworCQlnZXRfdXNlcl9leCgqcGF4LCAmc2MtPmF4KTsKKwl9IGdldF91c2VyX2NhdGNoKGVycik7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzEsNTcgKzEzMSw1NSBAQAogewogCWludCBlcnIgPSAwOwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXsKLQkJdW5zaWduZWQgaW50IHRtcDsKKwlwdXRfdXNlcl90cnkgewogCi0JCXNhdmVzZWdtZW50KGdzLCB0bXApOwotCQllcnIgfD0gX19wdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5ncyk7Ci0JfQotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmZzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZnMpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZXMpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmRzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJcHV0X3VzZXJfZXgoZ2V0X3VzZXJfZ3MocmVncyksICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5ncyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmZzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZnMpOworCQlwdXRfdXNlcl9leChyZWdzLT5lcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmVzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZHMsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5kcyk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZGksICZzYy0+ZGkpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNpLCAmc2MtPnNpKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5icCwgJnNjLT5icCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c3AsICZzYy0+c3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmJ4LCAmc2MtPmJ4KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5keCwgJnNjLT5keCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+Y3gsICZzYy0+Y3gpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmF4LCAmc2MtPmF4KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZGksICZzYy0+ZGkpOworCQlwdXRfdXNlcl9leChyZWdzLT5zaSwgJnNjLT5zaSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmJwLCAmc2MtPmJwKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+c3AsICZzYy0+c3ApOworCQlwdXRfdXNlcl9leChyZWdzLT5ieCwgJnNjLT5ieCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmR4LCAmc2MtPmR4KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+Y3gsICZzYy0+Y3gpOworCQlwdXRfdXNlcl9leChyZWdzLT5heCwgJnNjLT5heCk7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnI4LCAmc2MtPnI4KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yOSwgJnNjLT5yOSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEwLCAmc2MtPnIxMCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjExLCAmc2MtPnIxMSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEyLCAmc2MtPnIxMik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjEzLCAmc2MtPnIxMyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE0LCAmc2MtPnIxNCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE1LCAmc2MtPnIxNSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnI4LCAmc2MtPnI4KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+cjksICZzYy0+cjkpOworCQlwdXRfdXNlcl9leChyZWdzLT5yMTAsICZzYy0+cjEwKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+cjExLCAmc2MtPnIxMSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnIxMiwgJnNjLT5yMTIpOworCQlwdXRfdXNlcl9leChyZWdzLT5yMTMsICZzYy0+cjEzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+cjE0LCAmc2MtPnIxNCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnIxNSwgJnNjLT5yMTUpOwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC50cmFwX25vLCAmc2MtPnRyYXBubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmVycm9yX2NvZGUsICZzYy0+ZXJyKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5pcCwgJnNjLT5pcCk7CisJCXB1dF91c2VyX2V4KGN1cnJlbnQtPnRocmVhZC50cmFwX25vLCAmc2MtPnRyYXBubyk7CisJCXB1dF91c2VyX2V4KGN1cnJlbnQtPnRocmVhZC5lcnJvcl9jb2RlLCAmc2MtPmVycik7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmlwLCAmc2MtPmlwKTsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+Y3MsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5jcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZmxhZ3MsICZzYy0+ZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNwLCAmc2MtPnNwX2F0X3NpZ25hbCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c3MsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5zcyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+Y3MpOworCQlwdXRfdXNlcl9leChyZWdzLT5mbGFncywgJnNjLT5mbGFncyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnNwLCAmc2MtPnNwX2F0X3NpZ25hbCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+c3MpOwogI2Vsc2UgLyogIUNPTkZJR19YODZfMzIgKi8KLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5mbGFncywgJnNjLT5mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+Y3MsICZzYy0+Y3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZzYy0+Z3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZzYy0+ZnMpOworCQlwdXRfdXNlcl9leChyZWdzLT5mbGFncywgJnNjLT5mbGFncyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmNzLCAmc2MtPmNzKTsKKwkJcHV0X3VzZXJfZXgoMCwgJnNjLT5ncyk7CisJCXB1dF91c2VyX2V4KDAsICZzYy0+ZnMpOwogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAotCWVyciB8PSBfX3B1dF91c2VyKGZwc3RhdGUsICZzYy0+ZnBzdGF0ZSk7CisJCXB1dF91c2VyX2V4KGZwc3RhdGUsICZzYy0+ZnBzdGF0ZSk7CiAKLQkvKiBub24taUJDUzIgZXh0ZW5zaW9ucy4uICovCi0JZXJyIHw9IF9fcHV0X3VzZXIobWFzaywgJnNjLT5vbGRtYXNrKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuY3IyLCAmc2MtPmNyMik7CisJCS8qIG5vbi1pQkNTMiBleHRlbnNpb25zLi4gKi8KKwkJcHV0X3VzZXJfZXgobWFzaywgJnNjLT5vbGRtYXNrKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLmNyMiwgJnNjLT5jcjIpOworCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODksNiArMTg3LDcxIEBACiAvKgogICogU2V0IHVwIGEgc2lnbmFsIGZyYW1lLgogICovCisKKy8qCisgKiBEZXRlcm1pbmUgd2hpY2ggc3RhY2sgdG8gdXNlLi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxpZ25fc2lnZnJhbWUodW5zaWduZWQgbG9uZyBzcCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvcmRpbmcgdG8gdGhlIGkzODYgQUJJLAorCSAqIGkuZS4gc28gdGhhdCBvbiBmdW5jdGlvbiBlbnRyeSAoKHNwICsgNCkgJiAxNSkgPT0gMC4KKwkgKi8KKwlzcCA9ICgoc3AgKyA0KSAmIC0xNnVsKSAtIDQ7CisjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMiAqLworCXNwID0gcm91bmRfZG93bihzcCwgMTYpIC0gODsKKyNlbmRpZgorCXJldHVybiBzcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqCitnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHNpemVfdCBmcmFtZV9zaXplLAorCSAgICAgdm9pZCBfX3VzZXIgKipmcHN0YXRlKQoreworCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrICovCisJdW5zaWduZWQgbG9uZyBzcCA9IHJlZ3MtPnNwOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIHJlZHpvbmUgKi8KKwlzcCAtPSAxMjg7CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCisJLyoKKwkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93IGl0LCBkb24ndC4KKwkgKiBSZXR1cm4gYW4gYWx3YXlzLWJvZ3VzIGFkZHJlc3MgaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCisJICovCisJaWYgKG9uX3NpZ19zdGFjayhzcCkgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3AgLSBmcmFtZV9zaXplKSkpCisJCXJldHVybiAodm9pZCBfX3VzZXIgKikgLTFMOworCisJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKKwkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKKwkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCS8qIFRoaXMgaXMgdGhlIGxlZ2FjeSBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAqLworCQlpZiAoKHJlZ3MtPnNzICYgMHhmZmZmKSAhPSBfX1VTRVJfRFMgJiYKKwkJCSEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCisJCQkJa2EtPnNhLnNhX3Jlc3RvcmVyKQorCQkJc3AgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOworI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKwl9CisKKwlpZiAodXNlZF9tYXRoKCkpIHsKKwkJc3AgLT0gc2lnX3hzdGF0ZV9zaXplOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJc3AgPSByb3VuZF9kb3duKHNwLCA2NCk7CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCQkqZnBzdGF0ZSA9ICh2b2lkIF9fdXNlciAqKXNwOworCisJCWlmIChzYXZlX2kzODdfeHN0YXRlKCpmcHN0YXRlKSA8IDApCisJCQlyZXR1cm4gKHZvaWQgX191c2VyICopLTFMOworCX0KKworCXJldHVybiAodm9pZCBfX3VzZXIgKilhbGlnbl9zaWdmcmFtZShzcCAtIGZyYW1lX3NpemUpOworfQorCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTE2IHBvcGxtb3ZsOwpAQCAtMjEyLDU0ICsyNzUsNiBAQAogCTAKIH07CiAKLS8qCi0gKiBEZXRlcm1pbmUgd2hpY2ggc3RhY2sgdG8gdXNlLi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqCi1nZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHNpemVfdCBmcmFtZV9zaXplLAotCSAgICAgdm9pZCAqKmZwc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBzcDsKLQotCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrICovCi0Jc3AgPSByZWdzLT5zcDsKLQotCS8qCi0JICogSWYgd2UgYXJlIG9uIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGFuZCB3b3VsZCBvdmVyZmxvdyBpdCwgZG9uJ3QuCi0JICogUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzIGluc3RlYWQgc28gd2Ugd2lsbCBkaWUgd2l0aCBTSUdTRUdWLgotCSAqLwotCWlmIChvbl9zaWdfc3RhY2soc3ApICYmICFsaWtlbHkob25fc2lnX3N0YWNrKHNwIC0gZnJhbWVfc2l6ZSkpKQotCQlyZXR1cm4gKHZvaWQgX191c2VyICopIC0xTDsKLQotCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWlmIChzYXNfc3NfZmxhZ3Moc3ApID09IDApCi0JCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgaXMgdGhlIGxlZ2FjeSBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAqLwotCQlpZiAoKHJlZ3MtPnNzICYgMHhmZmZmKSAhPSBfX1VTRVJfRFMgJiYKLQkJCSEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCi0JCQkJa2EtPnNhLnNhX3Jlc3RvcmVyKQotCQkJc3AgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOwotCX0KLQotCWlmICh1c2VkX21hdGgoKSkgewotCQlzcCA9IHNwIC0gc2lnX3hzdGF0ZV9zaXplOwotCQkqZnBzdGF0ZSA9IChzdHJ1Y3QgX2Zwc3RhdGUgKikgc3A7Ci0JCWlmIChzYXZlX2kzODdfeHN0YXRlKCpmcHN0YXRlKSA8IDApCi0JCQlyZXR1cm4gKHZvaWQgX191c2VyICopLTFMOwotCX0KLQotCXNwIC09IGZyYW1lX3NpemU7Ci0JLyoKLQkgKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvcmRpbmcgdG8gdGhlIGkzODYgQUJJLAotCSAqIGkuZS4gc28gdGhhdCBvbiBmdW5jdGlvbiBlbnRyeSAoKHNwICsgNCkgJiAxNSkgPT0gMC4KLQkgKi8KLQlzcCA9ICgoc3AgKyA0KSAmIC0xNnVsKSAtIDQ7Ci0KLQlyZXR1cm4gKHZvaWQgX191c2VyICopIHNwOwotfQotCiBzdGF0aWMgaW50CiBfX3NldHVwX2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ3NldF90ICpzZXQsCiAJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0zMzYsNDMgKzM1MSw0MSBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgfD0gX19wdXRfdXNlcihzaWcsICZmcmFtZS0+c2lnKTsKLQllcnIgfD0gX19wdXRfdXNlcigmZnJhbWUtPmluZm8sICZmcmFtZS0+cGluZm8pOwotCWVyciB8PSBfX3B1dF91c2VyKCZmcmFtZS0+dWMsICZmcmFtZS0+cHVjKTsKLQllcnIgfD0gY29weV9zaWdpbmZvX3RvX3VzZXIoJmZyYW1lLT5pbmZvLCBpbmZvKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlwdXRfdXNlcl90cnkgeworCQlwdXRfdXNlcl9leChzaWcsICZmcmFtZS0+c2lnKTsKKwkJcHV0X3VzZXJfZXgoJmZyYW1lLT5pbmZvLCAmZnJhbWUtPnBpbmZvKTsKKwkJcHV0X3VzZXJfZXgoJmZyYW1lLT51YywgJmZyYW1lLT5wdWMpOworCQllcnIgfD0gY29weV9zaWdpbmZvX3RvX3VzZXIoJmZyYW1lLT5pbmZvLCBpbmZvKTsKIAotCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwotCWlmIChjcHVfaGFzX3hzYXZlKQotCQllcnIgfD0gX19wdXRfdXNlcihVQ19GUF9YU1RBVEUsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVsc2UKLQkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5zcCksCi0JCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwotCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIGZwc3RhdGUsCi0JCQkJcmVncywgc2V0LT5zaWdbMF0pOwotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVGQVVMVDsKKwkJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCisJCWlmIChjcHVfaGFzX3hzYXZlKQorCQkJcHV0X3VzZXJfZXgoVUNfRlBfWFNUQVRFLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwkJZWxzZQorCQkJcHV0X3VzZXJfZXgoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJCXB1dF91c2VyX2V4KDAsICZmcmFtZS0+dWMudWNfbGluayk7CisJCXB1dF91c2VyX2V4KGN1cnJlbnQtPnNhc19zc19zcCwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7CisJCXB1dF91c2VyX2V4KHNhc19zc19mbGFncyhyZWdzLT5zcCksCisJCQkgICAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CisJCXB1dF91c2VyX2V4KGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOworCQllcnIgfD0gc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnVjLnVjX21jb250ZXh0LCBmcHN0YXRlLAorCQkJCQlyZWdzLCBzZXQtPnNpZ1swXSk7CisJCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKIAotCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICAqLwotCXJlc3RvcmVyID0gVkRTTzMyX1NZTUJPTChjdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvLCBydF9zaWdyZXR1cm4pOwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKLQkJcmVzdG9yZXIgPSBrYS0+c2Euc2FfcmVzdG9yZXI7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVzdG9yZXIsICZmcmFtZS0+cHJldGNvZGUpOworCQkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgKi8KKwkJcmVzdG9yZXIgPSBWRFNPMzJfU1lNQk9MKGN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc28sIHJ0X3NpZ3JldHVybik7CisJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKKwkJCXJlc3RvcmVyID0ga2EtPnNhLnNhX3Jlc3RvcmVyOworCQlwdXRfdXNlcl9leChyZXN0b3JlciwgJmZyYW1lLT5wcmV0Y29kZSk7CiAKLQkvKgotCSAqIFRoaXMgaXMgbW92bCAkX19OUl9ydF9zaWdyZXR1cm4sICVheCA7IGludCAkMHg4MAotCSAqCi0JICogV0UgRE8gTk9UIFVTRSBJVCBBTlkgTU9SRSEgSXQncyBvbmx5IGxlZnQgaGVyZSBmb3IgaGlzdG9yaWNhbAotCSAqIHJlYXNvbnMgYW5kIGJlY2F1c2UgZ2RiIHVzZXMgaXQgYXMgYSBzaWduYXR1cmUgdG8gbm90aWNlCi0JICogc2lnbmFsIGhhbmRsZXIgc3RhY2sgZnJhbWVzLgotCSAqLwotCWVyciB8PSBfX3B1dF91c2VyKCooKHU2NCAqKSZydF9yZXRjb2RlKSwgKHU2NCAqKWZyYW1lLT5yZXRjb2RlKTsKKwkJLyoKKwkJICogVGhpcyBpcyBtb3ZsICRfX05SX3J0X3NpZ3JldHVybiwgJWF4IDsgaW50ICQweDgwCisJCSAqCisJCSAqIFdFIERPIE5PVCBVU0UgSVQgQU5ZIE1PUkUhIEl0J3Mgb25seSBsZWZ0IGhlcmUgZm9yIGhpc3RvcmljYWwKKwkJICogcmVhc29ucyBhbmQgYmVjYXVzZSBnZGIgdXNlcyBpdCBhcyBhIHNpZ25hdHVyZSB0byBub3RpY2UKKwkJICogc2lnbmFsIGhhbmRsZXIgc3RhY2sgZnJhbWVzLgorCQkgKi8KKwkJcHV0X3VzZXJfZXgoKigodTY0ICopJnJ0X3JldGNvZGUpLCAodTY0ICopZnJhbWUtPnJldGNvZGUpOworCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMzkyLDI0ICs0MDUsNiBAQAogCXJldHVybiAwOwogfQogI2Vsc2UgLyogIUNPTkZJR19YODZfMzIgKi8KLS8qCi0gKiBEZXRlcm1pbmUgd2hpY2ggc3RhY2sgdG8gdXNlLi4KLSAqLwotc3RhdGljIHZvaWQgX191c2VyICoKLWdldF9zdGFjayhzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgLSByZWR6b25lKi8KLQlzcCAtPSAxMjg7Ci0KLQkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KLQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgewotCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQotCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKLQl9Ci0KLQlyZXR1cm4gKHZvaWQgX191c2VyICopcm91bmRfZG93bihzcCAtIHNpemUsIDY0KTsKLX0KLQogc3RhdGljIGludCBfX3NldHVwX3J0X2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywKIAkJCSAgICBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTQxOCwxNSArNDEzLDcgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKIAotCWlmICh1c2VkX21hdGgoKSkgewotCQlmcCA9IGdldF9zdGFjayhrYSwgcmVncy0+c3AsIHNpZ194c3RhdGVfc2l6ZSk7Ci0JCWZyYW1lID0gKHZvaWQgX191c2VyICopcm91bmRfZG93bigKLQkJCSh1bnNpZ25lZCBsb25nKWZwIC0gc2l6ZW9mKHN0cnVjdCBydF9zaWdmcmFtZSksIDE2KSAtIDg7Ci0KLQkJaWYgKHNhdmVfaTM4N194c3RhdGUoZnApIDwgMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0gZWxzZQotCQlmcmFtZSA9IGdldF9zdGFjayhrYSwgcmVncy0+c3AsIHNpemVvZihzdHJ1Y3QgcnRfc2lnZnJhbWUpKSAtIDg7CisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZihzdHJ1Y3QgcnRfc2lnZnJhbWUpLCAmZnApOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQzNiwyOCArNDIzLDMwIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KLQlpZiAoY3B1X2hhc194c2F2ZSkKLQkJZXJyIHw9IF9fcHV0X3VzZXIoVUNfRlBfWFNUQVRFLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKLQllbHNlCi0JCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIobWUtPnNhc19zc19zcCwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc2FzX3NzX2ZsYWdzKHJlZ3MtPnNwKSwKLQkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIobWUtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwotCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIGZwLCByZWdzLCBzZXQtPnNpZ1swXSk7Ci0JZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOworCXB1dF91c2VyX3RyeSB7CisJCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLworCQlpZiAoY3B1X2hhc194c2F2ZSkKKwkJCXB1dF91c2VyX2V4KFVDX0ZQX1hTVEFURSwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJCWVsc2UKKwkJCXB1dF91c2VyX2V4KDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCQlwdXRfdXNlcl9leCgwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCQlwdXRfdXNlcl9leChtZS0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKKwkJcHV0X3VzZXJfZXgoc2FzX3NzX2ZsYWdzKHJlZ3MtPnNwKSwKKwkJCSAgICAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKKwkJcHV0X3VzZXJfZXgobWUtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOworCQllcnIgfD0gc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnVjLnVjX21jb250ZXh0LCBmcCwgcmVncywgc2V0LT5zaWdbMF0pOworCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7CiAKLQkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgSWYgcHJvdmlkZWQsIHVzZSBhIHN0dWIKLQkgICBhbHJlYWR5IGluIHVzZXJzcGFjZS4gICovCi0JLyogeDg2LTY0IHNob3VsZCBhbHdheXMgdXNlIFNBX1JFU1RPUkVSLiAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgewotCQllcnIgfD0gX19wdXRfdXNlcihrYS0+c2Euc2FfcmVzdG9yZXIsICZmcmFtZS0+cHJldGNvZGUpOwotCX0gZWxzZSB7Ci0JCS8qIGNvdWxkIHVzZSBhIHZzdHViIGhlcmUgKi8KLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQorCQkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgSWYgcHJvdmlkZWQsIHVzZSBhIHN0dWIKKwkJICAgYWxyZWFkeSBpbiB1c2Vyc3BhY2UuICAqLworCQkvKiB4ODYtNjQgc2hvdWxkIGFsd2F5cyB1c2UgU0FfUkVTVE9SRVIuICovCisJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgeworCQkJcHV0X3VzZXJfZXgoa2EtPnNhLnNhX3Jlc3RvcmVyLCAmZnJhbWUtPnByZXRjb2RlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGNvdWxkIHVzZSBhIHZzdHViIGhlcmUgKi8KKwkJCWVyciB8PSAtRUZBVUxUOworCQl9CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01MDksMzEgKzQ5OCw0MSBAQAogCSAgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCkKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChhY3QpIHsKIAkJb2xkX3NpZ3NldF90IG1hc2s7CiAKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGFjdCwgc2l6ZW9mKCphY3QpKSB8fAotCQkgICAgX19nZXRfdXNlcihuZXdfa2Euc2Euc2FfaGFuZGxlciwgJmFjdC0+c2FfaGFuZGxlcikgfHwKLQkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX3Jlc3RvcmVyLCAmYWN0LT5zYV9yZXN0b3JlcikpCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBhY3QsIHNpemVvZigqYWN0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlfX2dldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpOwotCQlfX2dldF91c2VyKG1hc2ssICZhY3QtPnNhX21hc2spOworCQlnZXRfdXNlcl90cnkgeworCQkJZ2V0X3VzZXJfZXgobmV3X2thLnNhLnNhX2hhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpOworCQkJZ2V0X3VzZXJfZXgobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncyk7CisJCQlnZXRfdXNlcl9leChtYXNrLCAmYWN0LT5zYV9tYXNrKTsKKwkJCWdldF91c2VyX2V4KG5ld19rYS5zYS5zYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpOworCQl9IGdldF91c2VyX2NhdGNoKHJldCk7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlzaWdpbml0c2V0KCZuZXdfa2Euc2Euc2FfbWFzaywgbWFzayk7CiAJfQogCiAJcmV0ID0gZG9fc2lnYWN0aW9uKHNpZywgYWN0ID8gJm5ld19rYSA6IE5VTEwsIG9hY3QgPyAmb2xkX2thIDogTlVMTCk7CiAKIAlpZiAoIXJldCAmJiBvYWN0KSB7Ci0JCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgb2FjdCwgc2l6ZW9mKCpvYWN0KSkgfHwKLQkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2hhbmRsZXIsICZvYWN0LT5zYV9oYW5kbGVyKSB8fAotCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfcmVzdG9yZXIsICZvYWN0LT5zYV9yZXN0b3JlcikpCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgb2FjdCwgc2l6ZW9mKCpvYWN0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKTsKLQkJX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfbWFzay5zaWdbMF0sICZvYWN0LT5zYV9tYXNrKTsKKwkJcHV0X3VzZXJfdHJ5IHsKKwkJCXB1dF91c2VyX2V4KG9sZF9rYS5zYS5zYV9oYW5kbGVyLCAmb2FjdC0+c2FfaGFuZGxlcik7CisJCQlwdXRfdXNlcl9leChvbGRfa2Euc2Euc2FfZmxhZ3MsICZvYWN0LT5zYV9mbGFncyk7CisJCQlwdXRfdXNlcl9leChvbGRfa2Euc2Euc2FfbWFzay5zaWdbMF0sICZvYWN0LT5zYV9tYXNrKTsKKwkJCXB1dF91c2VyX2V4KG9sZF9rYS5zYS5zYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKTsKKwkJfSBwdXRfdXNlcl9jYXRjaChyZXQpOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTQxLDE0ICs1NDAsOSBAQAogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogI2lmZGVmIENPTkZJR19YODZfMzIKLWFzbWxpbmthZ2UgaW50IHN5c19zaWdhbHRzdGFjayh1bnNpZ25lZCBsb25nIGJ4KQoraW50IHN5c19zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQkvKgotCSAqIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgZ2NjIHJlYWxpemUgaXQgZG9lc24ndCBvd24gdGhlCi0JICogInN0cnVjdCBwdF9yZWdzIgotCSAqLwotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopJmJ4OwotCWNvbnN0IHN0YWNrX3QgX191c2VyICp1c3MgPSAoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKilieDsKKwljb25zdCBzdGFja190IF9fdXNlciAqdXNzID0gKGNvbnN0IHN0YWNrX3QgX191c2VyICopcmVncy0+Yng7CiAJc3RhY2tfdCBfX3VzZXIgKnVvc3MgPSAoc3RhY2tfdCBfX3VzZXIgKilyZWdzLT5jeDsKIAogCXJldHVybiBkb19zaWdhbHRzdGFjayh1c3MsIHVvc3MsIHJlZ3MtPnNwKTsKQEAgLTU2NiwxNCArNTYwLDEyIEBACiAgKiBEbyBhIHNpZ25hbCByZXR1cm47IHVuZG8gdGhlIHNpZ25hbCBzdGFjay4KICAqLwogI2lmZGVmIENPTkZJR19YODZfMzIKLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfc2lncmV0dXJuKHVuc2lnbmVkIGxvbmcgX191bnVzZWQpCit1bnNpZ25lZCBsb25nIHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHNpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJdW5zaWduZWQgbG9uZyBheDsKIAlzaWdzZXRfdCBzZXQ7CiAKLQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopICZfX3VudXNlZDsKIAlmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICopKHJlZ3MtPnNwIC0gOCk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKQEAgLTYwMCw3ICs1OTIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAotc3RhdGljIGxvbmcgZG9fcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorbG9uZyBzeXNfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lOwogCXVuc2lnbmVkIGxvbmcgYXg7CkBAIC02MzEsMjUgKzYyMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0vKgotICogTm90ZTogZG8gbm90IHBhc3MgaW4gcHRfcmVncyBkaXJlY3RseSBhcyB3aXRoIHRhaWwtY2FsbCBvcHRpbWl6YXRpb24KLSAqIEdDQyB3aWxsIGluY29ycmVjdGx5IHN0b21wIG9uIHRoZSBjYWxsZXIncyBmcmFtZSBhbmQgY29ycnVwdCB1c2VyLXNwYWNlCi0gKiByZWdpc3RlciBzdGF0ZToKLSAqLwotYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIF9fdW51c2VkKQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopJl9fdW51c2VkOwotCi0JcmV0dXJuIGRvX3J0X3NpZ3JldHVybihyZWdzKTsKLX0KLSNlbHNlIC8qICFDT05GSUdfWDg2XzMyICovCi1hc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gZG9fcnRfc2lncmV0dXJuKHJlZ3MpOwotfQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQogLyoKICAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXI6CiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXAuYwppbmRleCBlNmZhYTMzLi4xM2YzM2VhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcC5jCkBAIC0yLDcgKzIsNyBAQAogICoJSW50ZWwgU01QIHN1cHBvcnQgcm91dGluZXMuCiAgKgogICoJKGMpIDE5OTUgQWxhbiBDb3gsIEJ1aWxkaW5nICMzIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+Ci0gKgkoYykgMTk5OC05OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCShjKSAxOTk4LTk5LCAyMDAwLCAyMDA5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICogICAgICAoYykgMjAwMiwyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KICAqCiAgKglpMzg2IGFuZCB4ODZfNjQgaW50ZWdyYXRpb24gYnkgR2xhdWJlciBDb3N0YSA8Z2Nvc3RhQHJlZGhhdC5jb20+CkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogLyoKICAqCVNvbWUgbm90ZXMgb24geDg2IHByb2Nlc3NvciBidWdzIGFmZmVjdGluZyBTTVAgb3BlcmF0aW9uOgogICoKQEAgLTExOCwxMiArMTE3LDEyIEBACiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKIAl9Ci0Jc2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdSksIFJFU0NIRURVTEVfVkVDVE9SKTsKKwlhcGljLT5zZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoY3B1KSwgUkVTQ0hFRFVMRV9WRUNUT1IpOwogfQogCiB2b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19zaW5nbGVfaXBpKGludCBjcHUpCiB7Ci0Jc2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdSksIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUik7CisJYXBpYy0+c2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdSksIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUik7CiB9CiAKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKQEAgLTEzMSw3ICsxMzAsNyBAQAogCWNwdW1hc2tfdmFyX3QgYWxsYnV0c2VsZjsKIAogCWlmICghYWxsb2NfY3B1bWFza192YXIoJmFsbGJ1dHNlbGYsIEdGUF9BVE9NSUMpKSB7Ci0JCXNlbmRfSVBJX21hc2sobWFzaywgQ0FMTF9GVU5DVElPTl9WRUNUT1IpOworCQlhcGljLT5zZW5kX0lQSV9tYXNrKG1hc2ssIENBTExfRlVOQ1RJT05fVkVDVE9SKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTQwLDkgKzEzOSw5IEBACiAKIAlpZiAoY3B1bWFza19lcXVhbChtYXNrLCBhbGxidXRzZWxmKSAmJgogCSAgICBjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X2NhbGxvdXRfbWFzaykpCi0JCXNlbmRfSVBJX2FsbGJ1dHNlbGYoQ0FMTF9GVU5DVElPTl9WRUNUT1IpOworCQlhcGljLT5zZW5kX0lQSV9hbGxidXRzZWxmKENBTExfRlVOQ1RJT05fVkVDVE9SKTsKIAllbHNlCi0JCXNlbmRfSVBJX21hc2sobWFzaywgQ0FMTF9GVU5DVElPTl9WRUNUT1IpOworCQlhcGljLT5zZW5kX0lQSV9tYXNrKG1hc2ssIENBTExfRlVOQ1RJT05fVkVDVE9SKTsKIAogCWZyZWVfY3B1bWFza192YXIoYWxsYnV0c2VsZik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCBiYjFhM2IxLi4yNDkzMzRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTIsNyArMiw3IEBACiAgKgl4ODYgU01QIGJvb3RpbmcgZnVuY3Rpb25zCiAgKgogICoJKGMpIDE5OTUgQWxhbiBDb3gsIEJ1aWxkaW5nICMzIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+Ci0gKgkoYykgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCShjKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICoJQ29weXJpZ2h0IDIwMDEgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgogICoKICAqCU11Y2ggb2YgdGhlIGNvcmUgU01QIHdvcmsgaXMgYmFzZWQgb24gcHJldmlvdXMgd29yayBieSBUaG9tYXMgUmFka2UsIHRvCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaWRsZS5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vdHJhbXBvbGluZS5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgpAQCAtNjEsMTMgKzYwLDEyIEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vdm1pLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS91di91di5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX3dha2VjcHUuaD4KLSNpbmNsdWRlIDxzbXBib290X2hvb2tzLmg+CisjaW5jbHVkZSA8YXNtL3NtcGJvb3RfaG9va3MuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKIHU4IGFwaWNpZF8yX25vZGVbTUFYX0FQSUNJRF07CkBAIC0xMTQsNyArMTEyLDcgQEAKIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjcHVpbmZvX3g4NiwgY3B1X2luZm8pOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9pbmZvKTsKIAotc3RhdGljIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKK2F0b21pY190IGluaXRfZGVhc3NlcnRlZDsKIAogCiAvKiBTZXQgaWYgd2UgZmluZCBhIEIgc3RlcHBpbmcgQ1BVICovCkBAIC0xNjMsNyArMTYxLDcgQEAKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBhcGljaWQgPSBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGFwaWNpZCk7CisJaW50IG5vZGUgPSBhcGljLT5hcGljaWRfdG9fbm9kZShhcGljaWQpOwogCiAJaWYgKCFub2RlX29ubGluZShub2RlKSkKIAkJbm9kZSA9IGZpcnN0X29ubGluZV9ub2RlOwpAQCAtMTk2LDcgKzE5NCw4IEBACiAJICogb3VyIGxvY2FsIEFQSUMuICBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBJUEkgb3Igd2UnbGwKIAkgKiBsb2NrIHVwIG9uIGFuIEFQSUMgYWNjZXNzLgogCSAqLwotCXdhaXRfZm9yX2luaXRfZGVhc3NlcnQoJmluaXRfZGVhc3NlcnRlZCk7CisJaWYgKGFwaWMtPndhaXRfZm9yX2luaXRfZGVhc3NlcnQpCisJCWFwaWMtPndhaXRfZm9yX2luaXRfZGVhc3NlcnQoJmluaXRfZGVhc3NlcnRlZCk7CiAKIAkvKgogCSAqIChUaGlzIHdvcmtzIGV2ZW4gaWYgdGhlIEFQSUMgaXMgbm90IGVuYWJsZWQuKQpAQCAtMjQzLDcgKzI0Miw4IEBACiAJICovCiAKIAlwcl9kZWJ1ZygiQ0FMTElOLCBiZWZvcmUgc2V0dXBfbG9jYWxfQVBJQygpLlxuIik7Ci0Jc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKCk7CisJaWYgKGFwaWMtPnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYykKKwkJYXBpYy0+c21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKCk7CiAJc2V0dXBfbG9jYWxfQVBJQygpOwogCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAJbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgpOwpAQCAtNTgzLDcgKzU4Myw3IEBACiAJLyogVGFyZ2V0IGNoaXAgKi8KIAkvKiBCb290IG9uIHRoZSBzdGFjayAqLwogCS8qIEtpY2sgdGhlIHNlY29uZCAqLwotCWFwaWNfaWNyX3dyaXRlKEFQSUNfRE1fTk1JIHwgQVBJQ19ERVNUX0xPR0lDQUwsIGxvZ2ljYWxfYXBpY2lkKTsKKwlhcGljX2ljcl93cml0ZShBUElDX0RNX05NSSB8IGFwaWMtPmRlc3RfbG9naWNhbCwgbG9naWNhbF9hcGljaWQpOwogCiAJcHJfZGVidWcoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKIAlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CkBAIC02MTQsMTIgKzYxNCw2IEBACiAJdW5zaWduZWQgbG9uZyBzZW5kX3N0YXR1cywgYWNjZXB0X3N0YXR1cyA9IDA7CiAJaW50IG1heGx2dCwgbnVtX3N0YXJ0cywgajsKIAotCWlmIChnZXRfdXZfc3lzdGVtX3R5cGUoKSA9PSBVVl9OT05fVU5JUVVFX0FQSUMpIHsKLQkJc2VuZF9zdGF0dXMgPSB1dl93YWtldXBfc2Vjb25kYXJ5KHBoeXNfYXBpY2lkLCBzdGFydF9laXApOwotCQlhdG9taWNfc2V0KCZpbml0X2RlYXNzZXJ0ZWQsIDEpOwotCQlyZXR1cm4gc2VuZF9zdGF0dXM7Ci0JfQotCiAJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwogCiAJLyoKQEAgLTc0NSw3OCArNzM5LDIzIEBACiAJY29tcGxldGUoJmNfaWRsZS0+ZG9uZSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KLS8qIF9fcmVmIGJlY2F1c2UgaXQncyBzYWZlIHRvIGNhbGwgZnJlZV9ib290bWVtIHdoZW4gYWZ0ZXJfYm9vdG1lbSA9PSAwLiAqLwotc3RhdGljIHZvaWQgX19yZWYgZnJlZV9ib290bWVtX3BkYShzdHJ1Y3QgeDg2NjRfcGRhICpvbGRwZGEpCi17Ci0JaWYgKCFhZnRlcl9ib290bWVtKQotCQlmcmVlX2Jvb3RtZW0oKHVuc2lnbmVkIGxvbmcpb2xkcGRhLCBzaXplb2YoKm9sZHBkYSkpOwotfQotCi0vKgotICogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIHRoZSBBUCBwZGEuCi0gKgotICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIF9jcHVfcGRhIHBvaW50ZXIgdGFibGUgaXMgaW5pdGlhbGl6ZWQuCi0gKi8KLWludCBfX2NwdWluaXQgZ2V0X2xvY2FsX3BkYShpbnQgY3B1KQotewotCXN0cnVjdCB4ODY2NF9wZGEgKm9sZHBkYSwgKm5ld3BkYTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSBzaXplb2Yoc3RydWN0IHg4NjY0X3BkYSk7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCi0JaWYgKGNwdV9wZGEoY3B1KSAmJiAhY3B1X3BkYShjcHUpLT5pbl9ib290bWVtKQotCQlyZXR1cm4gMDsKLQotCW9sZHBkYSA9IGNwdV9wZGEoY3B1KTsKLQluZXdwZGEgPSBrbWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0FUT01JQywgbm9kZSk7Ci0JaWYgKCFuZXdwZGEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgYWxsb2NhdGUgbm9kZSBsb2NhbCBQREEgIgotCQkJImZvciBDUFUgJWQgb24gbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKLQotCQlpZiAob2xkcGRhKQotCQkJcmV0dXJuIDA7CS8qIGhhdmUgYSB1c2FibGUgcGRhICovCi0JCWVsc2UKLQkJCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAob2xkcGRhKSB7Ci0JCW1lbWNweShuZXdwZGEsIG9sZHBkYSwgc2l6ZSk7Ci0JCWZyZWVfYm9vdG1lbV9wZGEob2xkcGRhKTsKLQl9Ci0KLQluZXdwZGEtPmluX2Jvb3RtZW0gPSAwOwotCWNwdV9wZGEoY3B1KSA9IG5ld3BkYTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KLXN0YXRpYyBpbnQgX19jcHVpbml0IGRvX2Jvb3RfY3B1KGludCBhcGljaWQsIGludCBjcHUpCiAvKgogICogTk9URSAtIG9uIG1vc3Qgc3lzdGVtcyB0aGlzIGlzIGEgUEhZU0lDQUwgYXBpYyBJRCwgYnV0IG9uIG11bHRpcXVhZAogICogKGllIGNsdXN0ZXJlZCBhcGljIGFkZHJlc3NpbmcgbW9kZSksIHRoaXMgaXMgYSBMT0dJQ0FMIGFwaWMgSUQuCi0gKiBSZXR1cm5zIHplcm8gaWYgQ1BVIGJvb3RlZCBPSywgZWxzZSBlcnJvciBjb2RlIGZyb20gd2FrZXVwX3NlY29uZGFyeV9jcHUuCisgKiBSZXR1cm5zIHplcm8gaWYgQ1BVIGJvb3RlZCBPSywgZWxzZSBlcnJvciBjb2RlIGZyb20KKyAqIC0+d2FrZXVwX3NlY29uZGFyeV9jcHUuCiAgKi8KK3N0YXRpYyBpbnQgX19jcHVpbml0IGRvX2Jvb3RfY3B1KGludCBhcGljaWQsIGludCBjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBib290X2Vycm9yID0gMDsKLQlpbnQgdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2lwOwotCXVuc2lnbmVkIHNob3J0IG5taV9oaWdoID0gMCwgbm1pX2xvdyA9IDA7CisJaW50IHRpbWVvdXQ7CiAJc3RydWN0IGNyZWF0ZV9pZGxlIGNfaWRsZSA9IHsKLQkJLmNwdSA9IGNwdSwKLQkJLmRvbmUgPSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSX09OU1RBQ0soY19pZGxlLmRvbmUpLAorCQkuY3B1CT0gY3B1LAorCQkuZG9uZQk9IENPTVBMRVRJT05fSU5JVElBTElaRVJfT05TVEFDSyhjX2lkbGUuZG9uZSksCiAJfTsKLQlJTklUX1dPUksoJmNfaWRsZS53b3JrLCBkb19mb3JrX2lkbGUpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qIEFsbG9jYXRlIG5vZGUgbG9jYWwgbWVtb3J5IGZvciBBUCBwZGFzICovCi0JaWYgKGNwdSA+IDApIHsKLQkJYm9vdF9lcnJvciA9IGdldF9sb2NhbF9wZGEoY3B1KTsKLQkJaWYgKGJvb3RfZXJyb3IpCi0JCQlnb3RvIHJlc3RvcmVfc3RhdGU7Ci0JCQkvKiBpZiBjYW4ndCBnZXQgcGRhIG1lbW9yeSwgY2FuJ3Qgc3RhcnQgY3B1ICovCi0JfQotI2VuZGlmCisJSU5JVF9XT1JLKCZjX2lkbGUud29yaywgZG9fZm9ya19pZGxlKTsKIAogCWFsdGVybmF0aXZlc19zbXBfc3dpdGNoKDEpOwogCkBAIC04NDcsMTQgKzc4NiwxNiBAQAogCiAJc2V0X2lkbGVfZm9yX2NwdShjcHUsIGNfaWRsZS5pZGxlKTsKIGRvX3Jlc3Q6Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgogCXBlcl9jcHUoY3VycmVudF90YXNrLCBjcHUpID0gY19pZGxlLmlkbGU7Ci0JaW5pdF9nZHQoY3B1KTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogU3RhY2sgZm9yIHN0YXJ0dXBfMzIgY2FuIGJlIGp1c3QgYXMgZm9yIHN0YXJ0X3NlY29uZGFyeSBvbndhcmRzICovCiAJaXJxX2N0eF9pbml0KGNwdSk7CiAjZWxzZQotCWNwdV9wZGEoY3B1KS0+cGN1cnJlbnQgPSBjX2lkbGUuaWRsZTsKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY19pZGxlLmlkbGUsIFRJRl9GT1JLKTsKKwlpbml0aWFsX2dzID0gcGVyX2NwdV9vZmZzZXQoY3B1KTsKKwlwZXJfY3B1KGtlcm5lbF9zdGFjaywgY3B1KSA9CisJCSh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShjX2lkbGUuaWRsZSkgLQorCQlLRVJORUxfU1RBQ0tfT0ZGU0VUICsgVEhSRUFEX1NJWkU7CiAjZW5kaWYKIAllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CiAJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpc3RhcnRfc2Vjb25kYXJ5OwpAQCAtODc4LDggKzgxOSw2IEBACiAKIAkJcHJfZGVidWcoIlNldHRpbmcgd2FybSByZXNldCBjb2RlIGFuZCB2ZWN0b3IuXG4iKTsKIAotCQlzdG9yZV9OTUlfdmVjdG9yKCZubWlfaGlnaCwgJm5taV9sb3cpOwotCiAJCXNtcGJvb3Rfc2V0dXBfd2FybV9yZXNldF92ZWN0b3Ioc3RhcnRfaXApOwogCQkvKgogCQkgKiBCZSBwYXJhbm9pZCBhYm91dCBjbGVhcmluZyBBUElDIGVycm9ycy4KQEAgLTg5MSw5ICs4MzAsMTMgQEAKIAl9CiAKIAkvKgotCSAqIFN0YXJ0aW5nIGFjdHVhbCBJUEkgc2VxdWVuY2UuLi4KKwkgKiBLaWNrIHRoZSBzZWNvbmRhcnkgQ1BVLiBVc2UgdGhlIG1ldGhvZCBpbiB0aGUgQVBJQyBkcml2ZXIKKwkgKiBpZiBpdCdzIGRlZmluZWQgLSBvciB1c2UgYW4gSU5JVCBib290IEFQSUMgbWVzc2FnZSBvdGhlcndpc2U6CiAJICovCi0JYm9vdF9lcnJvciA9IHdha2V1cF9zZWNvbmRhcnlfY3B1KGFwaWNpZCwgc3RhcnRfaXApOworCWlmIChhcGljLT53YWtldXBfc2Vjb25kYXJ5X2NwdSkKKwkJYm9vdF9lcnJvciA9IGFwaWMtPndha2V1cF9zZWNvbmRhcnlfY3B1KGFwaWNpZCwgc3RhcnRfaXApOworCWVsc2UKKwkJYm9vdF9lcnJvciA9IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGFwaWNpZCwgc3RhcnRfaXApOwogCiAJaWYgKCFib290X2Vycm9yKSB7CiAJCS8qCkBAIC05MjcsMTMgKzg3MCwxMSBAQAogCQkJZWxzZQogCQkJCS8qIHRyYW1wb2xpbmUgY29kZSBub3QgcnVuICovCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJOb3QgcmVzcG9uZGluZy5cbiIpOwotCQkJaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpICE9IFVWX05PTl9VTklRVUVfQVBJQykKLQkJCQlpbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCk7CisJCQlpZiAoYXBpYy0+aW5xdWlyZV9yZW1vdGVfYXBpYykKKwkJCQlhcGljLT5pbnF1aXJlX3JlbW90ZV9hcGljKGFwaWNpZCk7CiAJCX0KIAl9Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotcmVzdG9yZV9zdGF0ZToKLSNlbmRpZgorCiAJaWYgKGJvb3RfZXJyb3IpIHsKIAkJLyogVHJ5IHRvIHB1dCB0aGluZ3MgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSBiZWZvcmUgLi4uICovCiAJCW51bWFfcmVtb3ZlX2NwdShjcHUpOyAvKiB3YXMgc2V0IGJ5IG51bWFfYWRkX2NwdSAqLwpAQCAtOTYxLDcgKzkwMiw3IEBACiAKIGludCBfX2NwdWluaXQgbmF0aXZlX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewotCWludCBhcGljaWQgPSBjcHVfcHJlc2VudF90b19hcGljaWQoY3B1KTsKKwlpbnQgYXBpY2lkID0gYXBpYy0+Y3B1X3ByZXNlbnRfdG9fYXBpY2lkKGNwdSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCkBAIC0xMDU0LDE0ICs5OTUsMTQgQEAKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9QQykgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQorI2lmICFkZWZpbmVkKENPTkZJR19YODZfQklHU01QKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCiAJaWYgKGRlZl90b19iaWdzbXAgJiYgbnJfY3B1X2lkcyA+IDgpIHsKIAkJdW5zaWduZWQgaW50IGNwdTsKIAkJdW5zaWduZWQgbnI7CiAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIk1vcmUgdGhhbiA4IENQVXMgZGV0ZWN0ZWQgLSBza2lwcGluZyB0aGVtLlxuIgotCQkgICAgICAgIlVzZSBDT05GSUdfWDg2X0dFTkVSSUNBUkNIIGFuZCBDT05GSUdfWDg2X0JJR1NNUC5cbiIpOworCQkgICAgICAgIlVzZSBDT05GSUdfWDg2X0JJR1NNUC5cbiIpOwogCiAJCW5yID0gMDsKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CkBAIC0xMTA3LDcgKzEwNDgsNyBAQAogCSAqIFNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE1QIHRhYmxlIHNob3VsZCBsaXN0IHRoZSBib290CiAJICogQ1BVIHRvbywgYnV0IHdlIGRvIGl0IGZvciB0aGUgc2FrZSBvZiByb2J1c3RuZXNzIGFueXdheS4KIAkgKi8KLQlpZiAoIWNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSkgeworCWlmICghYXBpYy0+Y2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChib290X2NwdV9waHlzaWNhbF9hcGljaWQpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRQogCQkJIndlaXJkLCBib290IENQVSAoIyVkKSBub3QgbGlzdGVkIGJ5IHRoZSBCSU9TLlxuIiwKIAkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CkBAIC0xMTI1LDYgKzEwNjYsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbi4iCiAJCQkJIih0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CiAJCXNtcGJvb3RfY2xlYXJfaW9fYXBpYygpOworCQlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTE4MSw5ICsxMTIzLDkgQEAKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IDA7ICAvKiBuZWVkZWQ/ICovCiAJc2V0X2NwdV9zaWJsaW5nX21hcCgwKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKIAllbmFibGVfSVJfeDJhcGljKCk7Ci0Jc2V0dXBfYXBpY19yb3V0aW5nKCk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKCk7CiAjZW5kaWYKIAogCWlmIChzbXBfc2FuaXR5X2NoZWNrKG1heF9jcHVzKSA8IDApIHsKQEAgLTEyMDcsMTggKzExNDksMTggQEAKIAkgKi8KIAlzZXR1cF9sb2NhbF9BUElDKCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLyoKIAkgKiBFbmFibGUgSU8gQVBJQyBiZWZvcmUgc2V0dGluZyB1cCBlcnJvciB2ZWN0b3IKIAkgKi8KIAlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCiAJCWVuYWJsZV9JT19BUElDKCk7Ci0jZW5kaWYKKwogCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAKIAltYXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKCk7CiAKLQlzZXR1cF9wb3J0aW9fcmVtYXAoKTsKKwlpZiAoYXBpYy0+c2V0dXBfcG9ydGlvX3JlbWFwKQorCQlhcGljLT5zZXR1cF9wb3J0aW9fcmVtYXAoKTsKIAogCXNtcGJvb3Rfc2V0dXBfaW9fYXBpYygpOwogCS8qCkBAIC0xMjQwLDEwICsxMTgyLDcgQEAKIHZvaWQgX19pbml0IG5hdGl2ZV9zbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQogewogCWludCBtZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaW5pdF9nZHQobWUpOwotI2VuZGlmCi0Jc3dpdGNoX3RvX25ld19nZHQoKTsKKwlzd2l0Y2hfdG9fbmV3X2dkdChtZSk7CiAJLyogYWxyZWFkeSBzZXQgbWUgaW4gY3B1X29ubGluZV9tYXNrIGluIGJvb3RfY3B1X2luaXQoKSAqLwogCWNwdW1hc2tfc2V0X2NwdShtZSwgY3B1X2NhbGxvdXRfbWFzayk7CiAJcGVyX2NwdShjcHVfc3RhdGUsIG1lKSA9IENQVV9PTkxJTkU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5N2UzMDkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGNvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIFNNUCBzdHVmZiB3aGljaCBpcyBjb21tb24gdG8gYWxsIHN1Yi1hcmNoaXRlY3R1cmVzLgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOwotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgQ1BVJ3MgR0RULiAgVGhpcyBpcyBlaXRoZXIgdGhlIGJvb3QgQ1BVIGRvaW5nIGl0c2VsZgotICogKHN0aWxsIHVzaW5nIHRoZSBtYXN0ZXIgcGVyLWNwdSBhcmVhKSwgb3IgYSBDUFUgZG9pbmcgaXQgZm9yIGEKLSAqIHNlY29uZGFyeSB3aGljaCB3aWxsIHNvb24gY29tZSB1cC4KLSAqLwotX19jcHVpbml0IHZvaWQgaW5pdF9nZHQoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZ2R0OwotCi0JcGFja19kZXNjcmlwdG9yKCZnZHQsIF9fcGVyX2NwdV9vZmZzZXRbY3B1XSwgMHhGRkZGRiwKLQkJCTB4MiB8IERFU0NUWVBFX1MsIDB4OCk7Ci0JZ2R0LnMgPSAxOwotCi0Jd3JpdGVfZ2R0X2VudHJ5KGdldF9jcHVfZ2R0X3RhYmxlKGNwdSksCi0JCQlHRFRfRU5UUllfUEVSQ1BVLCAmZ2R0LCBERVNDVFlQRV9TKTsKLQotCXBlcl9jcHUodGhpc19jcHVfb2ZmLCBjcHUpID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwotCXBlcl9jcHUoY3B1X251bWJlciwgY3B1KSA9IGNwdTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggMTA3ODZhZi4uZjdiZGRjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN0YWNrIHRyYWNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N1bW1pdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL3N1bW1pdF8zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk4Nzg1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zdW1taXRfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICogSUJNIFN1bW1pdC1TcGVjaWZpYyBDb2RlCi0gKgotICogV3JpdHRlbiBCeTogTWF0dGhldyBEb2Jzb24sIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJQk0gQ29ycC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGNvbHBhdGNoQHVzLmlibS5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYmlvc19lYmRhLmg+Ci0jaW5jbHVkZSA8YXNtL3N1bW1pdC9tcHBhcnNlLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcmlvX3RhYmxlX2hkciAqcmlvX3RhYmxlX2hkciBfX2luaXRkYXRhOwotc3RhdGljIHN0cnVjdCBzY2FsX2RldGFpbCAgICpzY2FsX2RldnNbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOwotc3RhdGljIHN0cnVjdCByaW9fZGV0YWlsICAgICpyaW9fZGV2c1tNQVhfTlVNTk9ERVMqNF0gX19pbml0ZGF0YTsKLQotI2lmbmRlZiBDT05GSUdfWDg2X05VTUFRCi1zdGF0aWMgaW50IG1wX2J1c19pZF90b19ub2RlW01BWF9NUF9CVVNTRVNdIF9faW5pdGRhdGE7Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfcGNpX25vZGVfbWFwX2Zvcl93cGVnKGludCB3cGVnX251bSwgaW50IGxhc3RfYnVzKQotewotCWludCB0d2lzdGVyID0gMCwgbm9kZSA9IDA7Ci0JaW50IGksIGJ1cywgbnVtX2J1c2VzOwotCi0JZm9yIChpID0gMDsgaSA8IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2OyBpKyspIHsKLQkJaWYgKHJpb19kZXZzW2ldLT5ub2RlX2lkID09IHJpb19kZXZzW3dwZWdfbnVtXS0+b3duZXJfaWQpIHsKLQkJCXR3aXN0ZXIgPSByaW9fZGV2c1tpXS0+b3duZXJfaWQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZG4ndCBmaW5kIG93bmVyIEN5Y2xvbmUgZm9yIFdpbm5pcGVnIVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gbGFzdF9idXM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldjsgaSsrKSB7Ci0JCWlmIChzY2FsX2RldnNbaV0tPm5vZGVfaWQgPT0gdHdpc3RlcikgewotCQkJbm9kZSA9IHNjYWxfZGV2c1tpXS0+bm9kZV9pZDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpID09IHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZG4ndCBmaW5kIG93bmVyIFR3aXN0ZXIgZm9yIEN5Y2xvbmUhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBsYXN0X2J1czsKLQl9Ci0KLQlzd2l0Y2ggKHJpb19kZXZzW3dwZWdfbnVtXS0+dHlwZSkgewotCWNhc2UgQ29tcGF0V1BFRzoKLQkJLyoKLQkJICogVGhlIENvbXBhdGliaWxpdHkgV2lubmlwZWcgY29udHJvbHMgdGhlIDIgbGVnYWN5IGJ1c2VzLAotCQkgKiB0aGUgNjZNSHogUENJIGJ1cyBbMiBzbG90c10gYW5kIHRoZSAyICJleHRyYSIgYnVzZXMgaW4gY2FzZQotCQkgKiBhIFBDSS1QQ0kgYnJpZGdlIGNhcmQgaXMgdXNlZCBpbiBlaXRoZXIgc2xvdDogdG90YWwgNSBidXNlcy4KLQkJICovCi0JCW51bV9idXNlcyA9IDU7Ci0JCWJyZWFrOwotCWNhc2UgQWx0V1BFRzoKLQkJLyoKLQkJICogVGhlIEFsdGVybmF0ZSBXaW5uaXBlZyBjb250cm9scyB0aGUgMiAxMzNNSHogYnVzZXMgWzEgc2xvdAotCQkgKiBlYWNoXSwgdGhlaXIgMiAiZXh0cmEiIGJ1c2VzLCB0aGUgMTAwTUh6IGJ1cyBbMiBzbG90c10gYW5kCi0JCSAqIHRoZSAiZXh0cmEiIGJ1c2VzIGZvciBlYWNoIG9mIHRob3NlIHNsb3RzOiB0b3RhbCA3IGJ1c2VzLgotCQkgKi8KLQkJbnVtX2J1c2VzID0gNzsKLQkJYnJlYWs7Ci0JY2FzZSBMb29rT3V0QVdQRUc6Ci0JY2FzZSBMb29rT3V0QldQRUc6Ci0JCS8qCi0JCSAqIEEgTG9va291dCBXaW5uaXBlZyBjb250cm9scyAzIDEwME1IeiBidXNlcyBbMiBzbG90cyBlYWNoXQotCQkgKiAmIHRoZSAiZXh0cmEiIGJ1c2VzIGZvciBlYWNoIG9mIHRob3NlIHNsb3RzOiB0b3RhbCA5IGJ1c2VzLgotCQkgKi8KLQkJbnVtX2J1c2VzID0gOTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuc3VwcG9ydGVkIFdpbm5pcGVnIHR5cGUhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBsYXN0X2J1czsKLQl9Ci0KLQlmb3IgKGJ1cyA9IGxhc3RfYnVzOyBidXMgPCBsYXN0X2J1cyArIG51bV9idXNlczsgYnVzKyspCi0JCW1wX2J1c19pZF90b19ub2RlW2J1c10gPSBub2RlOwotCXJldHVybiBidXM7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJ1aWxkX2RldGFpbF9hcnJheXModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHB0cjsKLQlpbnQgaSwgc2NhbF9kZXRhaWxfc2l6ZSwgcmlvX2RldGFpbF9zaXplOwotCi0JaWYgKHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldiA+IE1BWF9OVU1OT0RFUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTUFYX05VTU5PREVTIHRvbyBsb3chICBEZWZpbmVkIGFzICVkLCBidXQgc3lzdGVtIGhhcyAlZCBub2Rlcy5cbiIsIF9fZnVuY19fLCBNQVhfTlVNTk9ERVMsIHJpb190YWJsZV9oZHItPm51bV9zY2FsX2Rldik7Ci0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAocmlvX3RhYmxlX2hkci0+dmVyc2lvbikgewotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIFJpbyBHcmFuZGUgVGFibGUgVmVyc2lvbjogJWRcbiIsIF9fZnVuY19fLCByaW9fdGFibGVfaGRyLT52ZXJzaW9uKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSAyOgotCQlzY2FsX2RldGFpbF9zaXplID0gMTE7Ci0JCXJpb19kZXRhaWxfc2l6ZSA9IDEzOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXNjYWxfZGV0YWlsX3NpemUgPSAxMjsKLQkJcmlvX2RldGFpbF9zaXplID0gMTU7Ci0JCWJyZWFrOwotCX0KLQotCXB0ciA9ICh1bnNpZ25lZCBsb25nKXJpb190YWJsZV9oZHIgKyAzOwotCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXY7IGkrKywgcHRyICs9IHNjYWxfZGV0YWlsX3NpemUpCi0JCXNjYWxfZGV2c1tpXSA9IChzdHJ1Y3Qgc2NhbF9kZXRhaWwgKilwdHI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKywgcHRyICs9IHJpb19kZXRhaWxfc2l6ZSkKLQkJcmlvX2RldnNbaV0gPSAoc3RydWN0IHJpb19kZXRhaWwgKilwdHI7Ci0KLQlyZXR1cm4gMTsKLX0KLQotdm9pZCBfX2luaXQgc2V0dXBfc3VtbWl0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZwkJcHRyOwotCXVuc2lnbmVkIHNob3J0CQlvZmZzZXQ7Ci0JaW50CQkJaSwgbmV4dF93cGVnLCBuZXh0X2J1cyA9IDA7Ci0KLQkvKiBUaGUgcG9pbnRlciB0byB0aGUgRUJEQSBpcyBzdG9yZWQgaW4gdGhlIHdvcmQgQCBwaHlzIDB4NDBFKDQwOjBFKSAqLwotCXB0ciA9IGdldF9iaW9zX2ViZGEoKTsKLQlwdHIgPSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQocHRyKTsKLQotCXJpb190YWJsZV9oZHIgPSBOVUxMOwotCW9mZnNldCA9IDB4MTgwOwotCXdoaWxlIChvZmZzZXQpIHsKLQkJLyogVGhlIGJsb2NrIGlkIGlzIHN0b3JlZCBpbiB0aGUgMm5kIHdvcmQgKi8KLQkJaWYgKCooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCArIDIpKSA9PSAweDQ3NTIpIHsKLQkJCS8qIHNldCB0aGUgcG9pbnRlciBwYXN0IHRoZSBvZmZzZXQgJiBibG9jayBpZCAqLwotCQkJcmlvX3RhYmxlX2hkciA9IChzdHJ1Y3QgcmlvX3RhYmxlX2hkciAqKShwdHIgKyBvZmZzZXQgKyA0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIFRoZSBuZXh0IG9mZnNldCBpcyBzdG9yZWQgaW4gdGhlIDFzdCB3b3JkLiAgMCBtZWFucyBubyBtb3JlICovCi0JCW9mZnNldCA9ICooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCkpOwotCX0KLQlpZiAoIXJpb190YWJsZV9oZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGxvY2F0ZSBSaW8gR3JhbmRlIFRhYmxlIGluIEVCREEgLSBiYWlsaW5nIVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFidWlsZF9kZXRhaWxfYXJyYXlzKCkpCi0JCXJldHVybjsKLQotCS8qIFRoZSBmaXJzdCBXaW5uaXBlZyB3ZSdyZSBsb29raW5nIGZvciBoYXMgYW4gaW5kZXggb2YgMCAqLwotCW5leHRfd3BlZyA9IDA7Ci0JZG8gewotCQlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKykgewotCQkJaWYgKGlzX1dQRUcocmlvX2RldnNbaV0pICYmIHJpb19kZXZzW2ldLT5XUF9pbmRleCA9PSBuZXh0X3dwZWcpIHsKLQkJCQkvKiBJdCdzIHRoZSBXaW5uaXBlZyB3ZSdyZSBsb29raW5nIGZvciEgKi8KLQkJCQluZXh0X2J1cyA9IHNldHVwX3BjaV9ub2RlX21hcF9mb3Jfd3BlZyhpLCBuZXh0X2J1cyk7Ci0JCQkJbmV4dF93cGVnKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogSWYgd2UgZ28gdGhyb3VnaCBhbGwgUmlvIGRldmljZXMgYW5kIGRvbid0IGZpbmQgb25lIHdpdGgKLQkJICogdGhlIG5leHQgaW5kZXgsIGl0IG1lYW5zIHdlJ3ZlIGZvdW5kIGFsbCB0aGUgV2lubmlwZWdzLAotCQkgKiBhbmQgdGh1cyBhbGwgdGhlIFBDSSBidXNlcy4KLQkJICovCi0JCWlmIChpID09IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2KQotCQkJbmV4dF93cGVnID0gMDsKLQl9IHdoaWxlIChuZXh0X3dwZWcgIT0gMCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwppbmRleCBlMmU4NmEwLi4zYmRiNjQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKQEAgLTEsNyArMSw3IEBACiBFTlRSWShzeXNfY2FsbF90YWJsZSkKIAkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgLSBvbGQgInNldHVwKCkiIHN5c3RlbSBjYWxsLCB1c2VkIGZvciByZXN0YXJ0aW5nICovCiAJLmxvbmcgc3lzX2V4aXQKLQkubG9uZyBzeXNfZm9yaworCS5sb25nIHB0cmVnc19mb3JrCiAJLmxvbmcgc3lzX3JlYWQKIAkubG9uZyBzeXNfd3JpdGUKIAkubG9uZyBzeXNfb3BlbgkJLyogNSAqLwpAQCAtMTAsNyArMTAsNyBAQAogCS5sb25nIHN5c19jcmVhdAogCS5sb25nIHN5c19saW5rCiAJLmxvbmcgc3lzX3VubGluawkvKiAxMCAqLwotCS5sb25nIHN5c19leGVjdmUKKwkubG9uZyBwdHJlZ3NfZXhlY3ZlCiAJLmxvbmcgc3lzX2NoZGlyCiAJLmxvbmcgc3lzX3RpbWUKIAkubG9uZyBzeXNfbWtub2QKQEAgLTEwOSwxNyArMTA5LDE3IEBACiAJLmxvbmcgc3lzX25ld2xzdGF0CiAJLmxvbmcgc3lzX25ld2ZzdGF0CiAJLmxvbmcgc3lzX3VuYW1lCi0JLmxvbmcgc3lzX2lvcGwJCS8qIDExMCAqLworCS5sb25nIHB0cmVnc19pb3BsCS8qIDExMCAqLwogCS5sb25nIHN5c192aGFuZ3VwCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJpZGxlIiBzeXN0ZW0gY2FsbCAqLwotCS5sb25nIHN5c192bTg2b2xkCisJLmxvbmcgcHRyZWdzX3ZtODZvbGQKIAkubG9uZyBzeXNfd2FpdDQKIAkubG9uZyBzeXNfc3dhcG9mZgkvKiAxMTUgKi8KIAkubG9uZyBzeXNfc3lzaW5mbwogCS5sb25nIHN5c19pcGMKIAkubG9uZyBzeXNfZnN5bmMKLQkubG9uZyBzeXNfc2lncmV0dXJuCi0JLmxvbmcgc3lzX2Nsb25lCQkvKiAxMjAgKi8KKwkubG9uZyBwdHJlZ3Nfc2lncmV0dXJuCisJLmxvbmcgcHRyZWdzX2Nsb25lCS8qIDEyMCAqLwogCS5sb25nIHN5c19zZXRkb21haW5uYW1lCiAJLmxvbmcgc3lzX25ld3VuYW1lCiAJLmxvbmcgc3lzX21vZGlmeV9sZHQKQEAgLTE2NSwxNCArMTY1LDE0IEBACiAJLmxvbmcgc3lzX21yZW1hcAogCS5sb25nIHN5c19zZXRyZXN1aWQxNgogCS5sb25nIHN5c19nZXRyZXN1aWQxNgkvKiAxNjUgKi8KLQkubG9uZyBzeXNfdm04NgorCS5sb25nIHB0cmVnc192bTg2CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogT2xkIHN5c19xdWVyeV9tb2R1bGUgKi8KIAkubG9uZyBzeXNfcG9sbAogCS5sb25nIHN5c19uZnNzZXJ2Y3RsCiAJLmxvbmcgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLwogCS5sb25nIHN5c19nZXRyZXNnaWQxNgogCS5sb25nIHN5c19wcmN0bAotCS5sb25nIHN5c19ydF9zaWdyZXR1cm4KKwkubG9uZyBwdHJlZ3NfcnRfc2lncmV0dXJuCiAJLmxvbmcgc3lzX3J0X3NpZ2FjdGlvbgogCS5sb25nIHN5c19ydF9zaWdwcm9jbWFzawkvKiAxNzUgKi8KIAkubG9uZyBzeXNfcnRfc2lncGVuZGluZwpAQCAtMTg1LDExICsxODUsMTEgQEAKIAkubG9uZyBzeXNfZ2V0Y3dkCiAJLmxvbmcgc3lzX2NhcGdldAogCS5sb25nIHN5c19jYXBzZXQJLyogMTg1ICovCi0JLmxvbmcgc3lzX3NpZ2FsdHN0YWNrCisJLmxvbmcgcHRyZWdzX3NpZ2FsdHN0YWNrCiAJLmxvbmcgc3lzX3NlbmRmaWxlCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIHN0cmVhbXMxICovCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIHN0cmVhbXMyICovCi0JLmxvbmcgc3lzX3Zmb3JrCQkvKiAxOTAgKi8KKwkubG9uZyBwdHJlZ3NfdmZvcmsJLyogMTkwICovCiAJLmxvbmcgc3lzX2dldHJsaW1pdAogCS5sb25nIHN5c19tbWFwMgogCS5sb25nIHN5c190cnVuY2F0ZTY0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL3RpbWVfMzIuYwppbmRleCAzOTg1Y2FjLi41YzVkODdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzMyLmMKQEAgLTMzLDEyICszMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tY2EuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogCi0jaW5jbHVkZSAiZG9fdGltZXIuaCIKKyNpbmNsdWRlIDxhc20vZG9fdGltZXIuaD4KIAogaW50IHRpbWVyX2FjazsKIApAQCAtMTE4LDcgKzExOCw3IEBACiB7CiAJaWYgKCFocGV0X2VuYWJsZSgpKQogCQlzZXR1cF9waXRfdGltZXIoKTsKLQl0aW1lX2luaXRfaG9vaygpOworCXg4Nl9xdWlya190aW1lX2luaXQoKTsKIH0KIAogLyoKQEAgLTEzMSw3ICsxMzEsNyBAQAogICovCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKLQlwcmVfdGltZV9pbml0X2hvb2soKTsKKwl4ODZfcXVpcmtfcHJlX3RpbWVfaW5pdCgpOwogCXRzY19pbml0KCk7CiAJbGF0ZV90aW1lX2luaXQgPSBjaG9vc2VfdGltZV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNTA1NDYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0KLURFRklORV9QRVJfQ1BVKHN0cnVjdCB0bGJfc3RhdGUsIGNwdV90bGJzdGF0ZSkKLQkJCV9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsgJmluaXRfbW0sIDAsIH07Ci0KLS8qIG11c3QgY29tZSBhZnRlciB0aGUgc2VuZF9JUEkgZnVuY3Rpb25zIGFib3ZlIGZvciBpbmxpbmluZyAqLwotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0KLS8qCi0gKglTbWFydGVyIFNNUCBmbHVzaGluZyBtYWNyb3MuCi0gKgkJYy9vIExpbnVzIFRvcnZhbGRzLgotICoKLSAqCVRoZXNlIG1lYW4geW91IGNhbiByZWFsbHkgZGVmaW5pdGVseSB1dHRlcmx5IGZvcmdldCBhYm91dAotICoJd3JpdGluZyB0byB1c2VyIHNwYWNlIGZyb20gaW50ZXJydXB0cy4gKEl0cyBub3QgYWxsb3dlZCBhbnl3YXkpLgotICoKLSAqCU9wdGltaXphdGlvbnMgTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KLSAqLwotCi1zdGF0aWMgY3B1bWFza190IGZsdXNoX2NwdW1hc2s7Ci1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZmx1c2hfbW07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBmbHVzaF92YTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxic3RhdGVfbG9jayk7Ci0KLS8qCi0gKiBXZSBjYW5ub3QgY2FsbCBtbWRyb3AoKSBiZWNhdXNlIHdlIGFyZSBpbiBpbnRlcnJ1cHQgY29udGV4dCwKLSAqIGluc3RlYWQgdXBkYXRlIG1tLT5jcHVfdm1fbWFzay4KLSAqCi0gKiBXZSBuZWVkIHRvIHJlbG9hZCAlY3IzIHNpbmNlIHRoZSBwYWdlIHRhYmxlcyBtYXkgYmUgZ29pbmcKLSAqIGF3YXkgZnJvbSB1bmRlciB1cy4uCi0gKi8KLXZvaWQgbGVhdmVfbW0oaW50IGNwdSkKLXsKLQlCVUdfT04oeDg2X3JlYWRfcGVyY3B1KGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfT0spOwotCWNwdV9jbGVhcihjcHUsIHg4Nl9yZWFkX3BlcmNwdShjcHVfdGxic3RhdGUuYWN0aXZlX21tKS0+Y3B1X3ZtX21hc2spOwotCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGxlYXZlX21tKTsKLQotLyoKLSAqCi0gKiBUaGUgZmx1c2ggSVBJIGFzc3VtZXMgdGhhdCBhIHRocmVhZCBzd2l0Y2ggaGFwcGVucyBpbiB0aGlzIG9yZGVyOgotICogW2NwdTA6IHRoZSBjcHUgdGhhdCBzd2l0Y2hlc10KLSAqIDEpIHN3aXRjaF9tbSgpIGVpdGhlciAxYSkgb3IgMWIpCi0gKiAxYSkgdGhyZWFkIHN3aXRjaCB0byBhIGRpZmZlcmVudCBtbQotICogMWExKSBjcHVfY2xlYXIoY3B1LCBvbGRfbW0tPmNwdV92bV9tYXNrKTsKLSAqIAlTdG9wIGlwaSBkZWxpdmVyeSBmb3IgdGhlIG9sZCBtbS4gVGhpcyBpcyBub3Qgc3luY2hyb25pemVkIHdpdGgKLSAqIAl0aGUgb3RoZXIgY3B1cywgYnV0IHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCBpZ25vcmUgZmx1c2ggaXBpcwotICogCWZvciB0aGUgd3JvbmcgbW0sIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBwZXJmb3JtIGEgc3VwZXJmbHVvdXMKLSAqIAl0bGIgZmx1c2guCi0gKiAxYTIpIHNldCBjcHVfdGxic3RhdGUgdG8gVExCU1RBVEVfT0sKLSAqIAlOb3cgdGhlIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCB3b24ndCBjYWxsIGxlYXZlX21tIGlmIGNwdTAKLSAqCXdhcyBpbiBsYXp5IHRsYiBtb2RlLgotICogMWEzKSB1cGRhdGUgY3B1X3RsYnN0YXRlW10uYWN0aXZlX21tCi0gKiAJTm93IGNwdTAgYWNjZXB0cyB0bGIgZmx1c2hlcyBmb3IgdGhlIG5ldyBtbS4KLSAqIDFhNCkgY3B1X3NldChjcHUsIG5ld19tbS0+Y3B1X3ZtX21hc2spOwotICogCU5vdyB0aGUgb3RoZXIgY3B1cyB3aWxsIHNlbmQgdGxiIGZsdXNoIGlwaXMuCi0gKiAxYTQpIGNoYW5nZSBjcjMuCi0gKiAxYikgdGhyZWFkIHN3aXRjaCB3aXRob3V0IG1tIGNoYW5nZQotICoJY3B1X3RsYnN0YXRlW10uYWN0aXZlX21tIGlzIGNvcnJlY3QsIGNwdTAgYWxyZWFkeSBoYW5kbGVzCi0gKglmbHVzaCBpcGlzLgotICogMWIxKSBzZXQgY3B1X3RsYnN0YXRlIHRvIFRMQlNUQVRFX09LCi0gKiAxYjIpIHRlc3RfYW5kX3NldCB0aGUgY3B1IGJpdCBpbiBjcHVfdm1fbWFzay4KLSAqIAlBdG9taWNhbGx5IHNldCB0aGUgYml0IFtvdGhlciBjcHVzIHdpbGwgc3RhcnQgc2VuZGluZyBmbHVzaCBpcGlzXSwKLSAqIAlhbmQgdGVzdCB0aGUgYml0LgotICogMWIzKSBpZiB0aGUgYml0IHdhcyAwOiBsZWF2ZV9tbSB3YXMgY2FsbGVkLCBmbHVzaCB0aGUgdGxiLgotICogMikgc3dpdGNoICUlZXNwLCBpZSBjdXJyZW50Ci0gKgotICogVGhlIGludGVycnVwdCBtdXN0IGhhbmRsZSAyIHNwZWNpYWwgY2FzZXM6Ci0gKiAtIGNyMyBpcyBjaGFuZ2VkIGJlZm9yZSAlJWVzcCwgaWUuIGl0IGNhbm5vdCB1c2UgY3VycmVudC0+e2FjdGl2ZV8sfW1tLgotICogLSB0aGUgY3B1IHBlcmZvcm1zIHNwZWN1bGF0aXZlIHRsYiByZWFkcywgaS5lLiBldmVuIGlmIHRoZSBjcHUgb25seQotICogICBydW5zIGluIGtlcm5lbCBzcGFjZSwgdGhlIGNwdSBjb3VsZCBsb2FkIHRsYiBlbnRyaWVzIGZvciB1c2VyIHNwYWNlCi0gKiAgIHBhZ2VzLgotICoKLSAqIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBjcHVfdGxic3RhdGUgaXMgbG9jYWwgdG8gZWFjaCBjcHUsIG5vCi0gKiB3cml0ZS9yZWFkIG9yZGVyaW5nIHByb2JsZW1zLgotICovCi0KLS8qCi0gKiBUTEIgZmx1c2ggSVBJOgotICoKLSAqIDEpIEZsdXNoIHRoZSB0bGIgZW50cmllcyBpZiB0aGUgY3B1IHVzZXMgdGhlIG1tIHRoYXQncyBiZWluZyBmbHVzaGVkLgotICogMikgTGVhdmUgdGhlIG1tIGlmIHdlIGFyZSBpbiB0aGUgbGF6eSB0bGIgbW9kZS4KLSAqLwotCi12b2lkIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGNwdTsKLQotCWNwdSA9IGdldF9jcHUoKTsKLQotCWlmICghY3B1X2lzc2V0KGNwdSwgZmx1c2hfY3B1bWFzaykpCi0JCWdvdG8gb3V0OwotCQkvKgotCQkgKiBUaGlzIHdhcyBhIEJVRygpIGJ1dCB1bnRpbCBzb21lb25lIGNhbiBxdW90ZSBtZSB0aGUKLQkJICogbGluZSBmcm9tIHRoZSBpbnRlbCBtYW51YWwgdGhhdCBndWFyYW50ZWVzIGFuIElQSSB0bwotCQkgKiBtdWx0aXBsZSBDUFVzIGlzIHJldHJpZWQgX29ubHlfIG9uIHRoZSBlcnJvcmluZyBDUFVzCi0JCSAqIGl0cyBzdGF5aW5nIGFzIGEgcmV0dXJuCi0JCSAqCi0JCSAqIEJVRygpOwotCQkgKi8KLQotCWlmIChmbHVzaF9tbSA9PSB4ODZfcmVhZF9wZXJjcHUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSkpIHsKLQkJaWYgKHg4Nl9yZWFkX3BlcmNwdShjcHVfdGxic3RhdGUuc3RhdGUpID09IFRMQlNUQVRFX09LKSB7Ci0JCQlpZiAoZmx1c2hfdmEgPT0gVExCX0ZMVVNIX0FMTCkKLQkJCQlsb2NhbF9mbHVzaF90bGIoKTsKLQkJCWVsc2UKLQkJCQlfX2ZsdXNoX3RsYl9vbmUoZmx1c2hfdmEpOwotCQl9IGVsc2UKLQkJCWxlYXZlX21tKGNwdSk7Ci0JfQotCWFja19BUElDX2lycSgpOwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNwdV9jbGVhcihjcHUsIGZsdXNoX2NwdW1hc2spOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci1vdXQ6Ci0JcHV0X2NwdV9ub19yZXNjaGVkKCk7Ci0JaW5jX2lycV9zdGF0KGlycV90bGJfY291bnQpOwotfQotCi12b2lkIG5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFza3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHZhKQotewotCWNwdW1hc2tfdCBjcHVtYXNrID0gKmNwdW1hc2twOwotCi0JLyoKLQkgKiBBIGNvdXBsZSBvZiAodG8gYmUgcmVtb3ZlZCkgc2FuaXR5IGNoZWNrczoKLQkgKgotCSAqIC0gY3VycmVudCBDUFUgbXVzdCBub3QgYmUgaW4gbWFzawotCSAqIC0gbWFzayBtdXN0IGV4aXN0IDopCi0JICovCi0JQlVHX09OKGNwdXNfZW1wdHkoY3B1bWFzaykpOwotCUJVR19PTihjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVtYXNrKSk7Ci0JQlVHX09OKCFtbSk7Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQkvKiBJZiBhIENQVSB3aGljaCB3ZSByYW4gb24gaGFzIGdvbmUgZG93biwgT0suICovCi0JY3B1c19hbmQoY3B1bWFzaywgY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KGNwdW1hc2spKSkKLQkJcmV0dXJuOwotI2VuZGlmCi0KLQkvKgotCSAqIGknbSBub3QgaGFwcHkgYWJvdXQgdGhpcyBnbG9iYWwgc2hhcmVkIHNwaW5sb2NrIGluIHRoZQotCSAqIE1NIGhvdCBwYXRoLCBidXQgd2UnbGwgc2VlIGhvdyBjb250ZW5kZWQgaXQgaXMuCi0JICogQUs6IHg4Ni02NCBoYXMgYSBmYXN0ZXIgbWV0aG9kIHRoYXQgY291bGQgYmUgcG9ydGVkLgotCSAqLwotCXNwaW5fbG9jaygmdGxic3RhdGVfbG9jayk7Ci0KLQlmbHVzaF9tbSA9IG1tOwotCWZsdXNoX3ZhID0gdmE7Ci0JY3B1c19vcihmbHVzaF9jcHVtYXNrLCBjcHVtYXNrLCBmbHVzaF9jcHVtYXNrKTsKLQotCS8qCi0JICogTWFrZSB0aGUgYWJvdmUgbWVtb3J5IG9wZXJhdGlvbnMgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUKLQkgKiBzZW5kaW5nIHRoZSBJUEkuCi0JICovCi0Jc21wX21iKCk7Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIElQSSBvbmx5IHRvCi0JICogQ1BVcyBhZmZlY3RlZC4KLQkgKi8KLQlzZW5kX0lQSV9tYXNrKCZjcHVtYXNrLCBJTlZBTElEQVRFX1RMQl9WRUNUT1IpOwotCi0Jd2hpbGUgKCFjcHVzX2VtcHR5KGZsdXNoX2NwdW1hc2spKQotCQkvKiBub3RoaW5nLiBsb2NrdXAgZGV0ZWN0aW9uIGRvZXMgbm90IGJlbG9uZyBoZXJlICovCi0JCWNwdV9yZWxheCgpOwotCi0JZmx1c2hfbW0gPSBOVUxMOwotCWZsdXNoX3ZhID0gMDsKLQlzcGluX3VubG9jaygmdGxic3RhdGVfbG9jayk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWNwdW1hc2tfdCBjcHVfbWFzazsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJbG9jYWxfZmx1c2hfdGxiKCk7Ci0JCWVsc2UKLQkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCi0JCWZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCWNwdW1hc2tfdCBjcHVfbWFzazsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJX19mbHVzaF90bGJfb25lKHZhKTsKLQkJIGVsc2UKLQkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCi0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKLQotc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkICppbmZvKQotewotCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JX19mbHVzaF90bGJfYWxsKCk7Ci0JaWYgKHg4Nl9yZWFkX3BlcmNwdShjcHVfdGxic3RhdGUuc3RhdGUpID09IFRMQlNUQVRFX0xBWlkpCi0JCWxlYXZlX21tKGNwdSk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCW9uX2VhY2hfY3B1KGRvX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEpOwotfQotCi12b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCkKLXsKLQlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID0gMDsKLQlwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl82NC5jIGIvYXJjaC94ODYva2VybmVsL3RsYl82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGJlNmYxLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL2lkbGUuaD4KLSNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2X2JhdS5oPgotCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLS8qCi0gKglTbWFydGVyIFNNUCBmbHVzaGluZyBtYWNyb3MuCi0gKgkJYy9vIExpbnVzIFRvcnZhbGRzLgotICoKLSAqCVRoZXNlIG1lYW4geW91IGNhbiByZWFsbHkgZGVmaW5pdGVseSB1dHRlcmx5IGZvcmdldCBhYm91dAotICoJd3JpdGluZyB0byB1c2VyIHNwYWNlIGZyb20gaW50ZXJydXB0cy4gKEl0cyBub3QgYWxsb3dlZCBhbnl3YXkpLgotICoKLSAqCU9wdGltaXphdGlvbnMgTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KLSAqCi0gKglNb3JlIHNjYWxhYmxlIGZsdXNoLCBmcm9tIEFuZGkgS2xlZW4KLSAqCi0gKglUbyBhdm9pZCBnbG9iYWwgc3RhdGUgdXNlIDggZGlmZmVyZW50IGNhbGwgdmVjdG9ycy4KLSAqCUVhY2ggQ1BVIHVzZXMgYSBzcGVjaWZpYyB2ZWN0b3IgdG8gdHJpZ2dlciBmbHVzaGVzIG9uIG90aGVyCi0gKglDUFVzLiBEZXBlbmRpbmcgb24gdGhlIHJlY2VpdmVkIHZlY3RvciB0aGUgdGFyZ2V0IENQVXMgbG9vayBpbnRvCi0gKgl0aGUgcmlnaHQgcGVyIGNwdSB2YXJpYWJsZSBmb3IgdGhlIGZsdXNoIGRhdGEuCi0gKgotICoJV2l0aCBtb3JlIHRoYW4gOCBDUFVzIHRoZXkgYXJlIGhhc2hlZCB0byB0aGUgOCBhdmFpbGFibGUKLSAqCXZlY3RvcnMuIFRoZSBsaW1pdGVkIGdsb2JhbCB2ZWN0b3Igc3BhY2UgZm9yY2VzIHVzIHRvIHRoaXMgcmlnaHQgbm93LgotICoJSW4gZnV0dXJlIHdoZW4gaW50ZXJydXB0cyBhcmUgc3BsaXQgaW50byBwZXIgQ1BVIGRvbWFpbnMgdGhpcyBjb3VsZCBiZQotICoJZml4ZWQsIGF0IHRoZSBjb3N0IG9mIHRyaWdnZXJpbmcgbXVsdGlwbGUgSVBJcyBpbiBzb21lIGNhc2VzLgotICovCi0KLXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSB7Ci0Jc3RydWN0IHsKLQkJY3B1bWFza190IGZsdXNoX2NwdW1hc2s7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKmZsdXNoX21tOwotCQl1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwotCQlzcGlubG9ja190IHRsYnN0YXRlX2xvY2s7Ci0JfTsKLQljaGFyIHBhZFtTTVBfQ0FDSEVfQllURVNdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLS8qIFN0YXRlIGlzIHB1dCBpbnRvIHRoZSBwZXIgQ1BVIGRhdGEgc2VjdGlvbiwgYnV0IHBhZGRlZAotICAgdG8gYSBmdWxsIGNhY2hlIGxpbmUgYmVjYXVzZSBvdGhlciBDUFVzIGNhbiBhY2Nlc3MgaXQgYW5kIHdlIGRvbid0Ci0gICB3YW50IGZhbHNlIHNoYXJpbmcgaW4gdGhlIHBlciBjcHUgZGF0YSBzZWdtZW50LiAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIHNtcF9mbHVzaF9zdGF0ZSwgZmx1c2hfc3RhdGUpOwotCi0vKgotICogV2UgY2Fubm90IGNhbGwgbW1kcm9wKCkgYmVjYXVzZSB3ZSBhcmUgaW4gaW50ZXJydXB0IGNvbnRleHQsCi0gKiBpbnN0ZWFkIHVwZGF0ZSBtbS0+Y3B1X3ZtX21hc2suCi0gKi8KLXZvaWQgbGVhdmVfbW0oaW50IGNwdSkKLXsKLQlpZiAocmVhZF9wZGEobW11X3N0YXRlKSA9PSBUTEJTVEFURV9PSykKLQkJQlVHKCk7Ci0JY3B1X2NsZWFyKGNwdSwgcmVhZF9wZGEoYWN0aXZlX21tKS0+Y3B1X3ZtX21hc2spOwotCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGxlYXZlX21tKTsKLQotLyoKLSAqCi0gKiBUaGUgZmx1c2ggSVBJIGFzc3VtZXMgdGhhdCBhIHRocmVhZCBzd2l0Y2ggaGFwcGVucyBpbiB0aGlzIG9yZGVyOgotICogW2NwdTA6IHRoZSBjcHUgdGhhdCBzd2l0Y2hlc10KLSAqIDEpIHN3aXRjaF9tbSgpIGVpdGhlciAxYSkgb3IgMWIpCi0gKiAxYSkgdGhyZWFkIHN3aXRjaCB0byBhIGRpZmZlcmVudCBtbQotICogMWExKSBjcHVfY2xlYXIoY3B1LCBvbGRfbW0tPmNwdV92bV9tYXNrKTsKLSAqCVN0b3AgaXBpIGRlbGl2ZXJ5IGZvciB0aGUgb2xkIG1tLiBUaGlzIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAotICoJdGhlIG90aGVyIGNwdXMsIGJ1dCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQgaWdub3JlIGZsdXNoIGlwaXMKLSAqCWZvciB0aGUgd3JvbmcgbW0sIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBwZXJmb3JtIGEgc3VwZXJmbHVvdXMKLSAqCXRsYiBmbHVzaC4KLSAqIDFhMikgc2V0IGNwdSBtbXVfc3RhdGUgdG8gVExCU1RBVEVfT0sKLSAqCU5vdyB0aGUgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IHdvbid0IGNhbGwgbGVhdmVfbW0gaWYgY3B1MAotICoJd2FzIGluIGxhenkgdGxiIG1vZGUuCi0gKiAxYTMpIHVwZGF0ZSBjcHUgYWN0aXZlX21tCi0gKglOb3cgY3B1MCBhY2NlcHRzIHRsYiBmbHVzaGVzIGZvciB0aGUgbmV3IG1tLgotICogMWE0KSBjcHVfc2V0KGNwdSwgbmV3X21tLT5jcHVfdm1fbWFzayk7Ci0gKglOb3cgdGhlIG90aGVyIGNwdXMgd2lsbCBzZW5kIHRsYiBmbHVzaCBpcGlzLgotICogMWE0KSBjaGFuZ2UgY3IzLgotICogMWIpIHRocmVhZCBzd2l0Y2ggd2l0aG91dCBtbSBjaGFuZ2UKLSAqCWNwdSBhY3RpdmVfbW0gaXMgY29ycmVjdCwgY3B1MCBhbHJlYWR5IGhhbmRsZXMKLSAqCWZsdXNoIGlwaXMuCi0gKiAxYjEpIHNldCBjcHUgbW11X3N0YXRlIHRvIFRMQlNUQVRFX09LCi0gKiAxYjIpIHRlc3RfYW5kX3NldCB0aGUgY3B1IGJpdCBpbiBjcHVfdm1fbWFzay4KLSAqCUF0b21pY2FsbHkgc2V0IHRoZSBiaXQgW290aGVyIGNwdXMgd2lsbCBzdGFydCBzZW5kaW5nIGZsdXNoIGlwaXNdLAotICoJYW5kIHRlc3QgdGhlIGJpdC4KLSAqIDFiMykgaWYgdGhlIGJpdCB3YXMgMDogbGVhdmVfbW0gd2FzIGNhbGxlZCwgZmx1c2ggdGhlIHRsYi4KLSAqIDIpIHN3aXRjaCAlJWVzcCwgaWUgY3VycmVudAotICoKLSAqIFRoZSBpbnRlcnJ1cHQgbXVzdCBoYW5kbGUgMiBzcGVjaWFsIGNhc2VzOgotICogLSBjcjMgaXMgY2hhbmdlZCBiZWZvcmUgJSVlc3AsIGllLiBpdCBjYW5ub3QgdXNlIGN1cnJlbnQtPnthY3RpdmVfLH1tbS4KLSAqIC0gdGhlIGNwdSBwZXJmb3JtcyBzcGVjdWxhdGl2ZSB0bGIgcmVhZHMsIGkuZS4gZXZlbiBpZiB0aGUgY3B1IG9ubHkKLSAqICAgcnVucyBpbiBrZXJuZWwgc3BhY2UsIHRoZSBjcHUgY291bGQgbG9hZCB0bGIgZW50cmllcyBmb3IgdXNlciBzcGFjZQotICogICBwYWdlcy4KLSAqCi0gKiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgY3B1IG1tdV9zdGF0ZSBpcyBsb2NhbCB0byBlYWNoIGNwdSwgbm8KLSAqIHdyaXRlL3JlYWQgb3JkZXJpbmcgcHJvYmxlbXMuCi0gKi8KLQotLyoKLSAqIFRMQiBmbHVzaCBJUEk6Ci0gKgotICogMSkgRmx1c2ggdGhlIHRsYiBlbnRyaWVzIGlmIHRoZSBjcHUgdXNlcyB0aGUgbW0gdGhhdCdzIGJlaW5nIGZsdXNoZWQuCi0gKiAyKSBMZWF2ZSB0aGUgbW0gaWYgd2UgYXJlIGluIHRoZSBsYXp5IHRsYiBtb2RlLgotICoKLSAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkLgotICovCi0KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IGNwdTsKLQlpbnQgc2VuZGVyOwotCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkvKgotCSAqIG9yaWdfcmF4IGNvbnRhaW5zIHRoZSBuZWdhdGVkIGludGVycnVwdCB2ZWN0b3IuCi0JICogVXNlIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzZW5kZXIgcHV0IHRoZSBkYXRhLgotCSAqLwotCXNlbmRlciA9IH5yZWdzLT5vcmlnX2F4IC0gSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUOwotCWYgPSAmcGVyX2NwdShmbHVzaF9zdGF0ZSwgc2VuZGVyKTsKLQotCWlmICghY3B1X2lzc2V0KGNwdSwgZi0+Zmx1c2hfY3B1bWFzaykpCi0JCWdvdG8gb3V0OwotCQkvKgotCQkgKiBUaGlzIHdhcyBhIEJVRygpIGJ1dCB1bnRpbCBzb21lb25lIGNhbiBxdW90ZSBtZSB0aGUKLQkJICogbGluZSBmcm9tIHRoZSBpbnRlbCBtYW51YWwgdGhhdCBndWFyYW50ZWVzIGFuIElQSSB0bwotCQkgKiBtdWx0aXBsZSBDUFVzIGlzIHJldHJpZWQgX29ubHlfIG9uIHRoZSBlcnJvcmluZyBDUFVzCi0JCSAqIGl0cyBzdGF5aW5nIGFzIGEgcmV0dXJuCi0JCSAqCi0JCSAqIEJVRygpOwotCQkgKi8KLQotCWlmIChmLT5mbHVzaF9tbSA9PSByZWFkX3BkYShhY3RpdmVfbW0pKSB7Ci0JCWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX09LKSB7Ci0JCQlpZiAoZi0+Zmx1c2hfdmEgPT0gVExCX0ZMVVNIX0FMTCkKLQkJCQlsb2NhbF9mbHVzaF90bGIoKTsKLQkJCWVsc2UKLQkJCQlfX2ZsdXNoX3RsYl9vbmUoZi0+Zmx1c2hfdmEpOwotCQl9IGVsc2UKLQkJCWxlYXZlX21tKGNwdSk7Ci0JfQotb3V0OgotCWFja19BUElDX2lycSgpOwotCWNwdV9jbGVhcihjcHUsIGYtPmZsdXNoX2NwdW1hc2spOwotCWluY19pcnFfc3RhdChpcnFfdGxiX2NvdW50KTsKLX0KLQotdm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2twLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSkKLXsKLQlpbnQgc2VuZGVyOwotCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKLQljcHVtYXNrX3QgY3B1bWFzayA9ICpjcHVtYXNrcDsKLQotCWlmIChpc191dl9zeXN0ZW0oKSAmJiB1dl9mbHVzaF90bGJfb3RoZXJzKCZjcHVtYXNrLCBtbSwgdmEpKQotCQlyZXR1cm47Ci0KLQkvKiBDYWxsZXIgaGFzIGRpc2FibGVkIHByZWVtcHRpb24gKi8KLQlzZW5kZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCkgJSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUzsKLQlmID0gJnBlcl9jcHUoZmx1c2hfc3RhdGUsIHNlbmRlcik7Ci0KLQkvKgotCSAqIENvdWxkIGF2b2lkIHRoaXMgbG9jayB3aGVuCi0JICogbnVtX29ubGluZV9jcHVzKCkgPD0gTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMsIGJ1dCBpdCBpcwotCSAqIHByb2JhYmx5IG5vdCB3b3J0aCBjaGVja2luZyB0aGlzIGZvciBhIGNhY2hlLWhvdCBsb2NrLgotCSAqLwotCXNwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7Ci0KLQlmLT5mbHVzaF9tbSA9IG1tOwotCWYtPmZsdXNoX3ZhID0gdmE7Ci0JY3B1c19vcihmLT5mbHVzaF9jcHVtYXNrLCBjcHVtYXNrLCBmLT5mbHVzaF9jcHVtYXNrKTsKLQotCS8qCi0JICogTWFrZSB0aGUgYWJvdmUgbWVtb3J5IG9wZXJhdGlvbnMgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUKLQkgKiBzZW5kaW5nIHRoZSBJUEkuCi0JICovCi0Jc21wX21iKCk7Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIElQSSBvbmx5IHRvCi0JICogQ1BVcyBhZmZlY3RlZC4KLQkgKi8KLQlzZW5kX0lQSV9tYXNrKCZjcHVtYXNrLCBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQgKyBzZW5kZXIpOwotCi0Jd2hpbGUgKCFjcHVzX2VtcHR5KGYtPmZsdXNoX2NwdW1hc2spKQotCQljcHVfcmVsYXgoKTsKLQotCWYtPmZsdXNoX21tID0gTlVMTDsKLQlmLT5mbHVzaF92YSA9IDA7Ci0Jc3Bpbl91bmxvY2soJmYtPnRsYnN0YXRlX2xvY2spOwotfQotCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBpbml0X3NtcF9mbHVzaCh2b2lkKQotewotCWludCBpOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCi0JCXNwaW5fbG9ja19pbml0KCZwZXJfY3B1KGZsdXNoX3N0YXRlLCBpKS50bGJzdGF0ZV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotY29yZV9pbml0Y2FsbChpbml0X3NtcF9mbHVzaCk7Ci0KLXZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWNwdW1hc2tfdCBjcHVfbWFzazsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJbG9jYWxfZmx1c2hfdGxiKCk7Ci0JCWVsc2UKLQkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCi0JCWZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCWNwdW1hc2tfdCBjcHVfbWFzazsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJX19mbHVzaF90bGJfb25lKHZhKTsKLQkJZWxzZQotCQkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0KLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQotCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgdmEpOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkICppbmZvKQotewotCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JX19mbHVzaF90bGJfYWxsKCk7Ci0JaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfTEFaWSkKLQkJbGVhdmVfbW0oY3B1KTsKLX0KLQotdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0Jb25fZWFjaF9jcHUoZG9fZmx1c2hfdGxiX2FsbCwgTlVMTCwgMSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKaW5kZXggNjgxMmI4Mi4uZDAzOGI5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwpAQCAtMTEsMTYgKzExLDE1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXYuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgogI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfYmF1Lmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgogCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0KIHN0YXRpYyBzdHJ1Y3QgYmF1X2NvbnRyb2wJKip1dl9iYXVfdGFibGVfYmFzZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQl1dl9iYXVfcmV0cnlfbGltaXQgX19yZWFkX21vc3RseTsKIApAQCAtMjEwLDE0ICsyMDksMTUgQEAKICAqCiAgKiBTZW5kIGEgYnJvYWRjYXN0IGFuZCB3YWl0IGZvciBhIGJyb2FkY2FzdCBtZXNzYWdlIHRvIGNvbXBsZXRlLgogICoKLSAqIFRoZSBjcHVtYXNrcCBtYXNrIGNvbnRhaW5zIHRoZSBjcHVzIHRoZSBicm9hZGNhc3Qgd2FzIHNlbnQgdG8uCisgKiBUaGUgZmx1c2hfbWFzayBjb250YWlucyB0aGUgY3B1cyB0aGUgYnJvYWRjYXN0IHdhcyBzZW50IHRvLgogICoKLSAqIFJldHVybnMgMSBpZiBhbGwgcmVtb3RlIGZsdXNoaW5nIHdhcyBkb25lLiBUaGUgbWFzayBpcyB6ZXJvZWQuCi0gKiBSZXR1cm5zIDAgaWYgc29tZSByZW1vdGUgZmx1c2hpbmcgcmVtYWlucyB0byBiZSBkb25lLiBUaGUgbWFzayBpcyBsZWZ0Ci0gKiB1bmNoYW5nZWQuCisgKiBSZXR1cm5zIE5VTEwgaWYgYWxsIHJlbW90ZSBmbHVzaGluZyB3YXMgZG9uZS4gVGhlIG1hc2sgaXMgemVyb2VkLgorICogUmV0dXJucyBAZmx1c2hfbWFzayBpZiBzb21lIHJlbW90ZSBmbHVzaGluZyByZW1haW5zIHRvIGJlIGRvbmUuIFRoZQorICogbWFzayB3aWxsIGhhdmUgc29tZSBiaXRzIHN0aWxsIHNldC4KICAqLwotaW50IHV2X2ZsdXNoX3NlbmRfYW5kX3dhaXQoaW50IGNwdSwgaW50IHRoaXNfYmxhZGUsIHN0cnVjdCBiYXVfZGVzYyAqYmF1X2Rlc2MsCi0JCQkgICBjcHVtYXNrX3QgKmNwdW1hc2twKQorY29uc3Qgc3RydWN0IGNwdW1hc2sgKnV2X2ZsdXNoX3NlbmRfYW5kX3dhaXQoaW50IGNwdSwgaW50IHRoaXNfYmxhZGUsCisJCQkJCSAgICAgc3RydWN0IGJhdV9kZXNjICpiYXVfZGVzYywKKwkJCQkJICAgICBzdHJ1Y3QgY3B1bWFzayAqZmx1c2hfbWFzaykKIHsKIAlpbnQgY29tcGxldGlvbl9zdGF0dXMgPSAwOwogCWludCByaWdodF9zaGlmdDsKQEAgLTI1Nyw2NiArMjU3LDc0IEBACiAJCSAqIHRoZSBjcHUncywgYWxsIG9mIHdoaWNoIGFyZSBzdGlsbCBpbiB0aGUgbWFzay4KIAkJICovCiAJCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnB0Y19pKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZmx1c2hfbWFzazsKIAl9CiAKIAkvKgogCSAqIFN1Y2Nlc3MsIHNvIGNsZWFyIHRoZSByZW1vdGUgY3B1J3MgZnJvbSB0aGUgbWFzayBzbyB3ZSBkb24ndAogCSAqIHVzZSB0aGUgSVBJIG1ldGhvZCBvZiBzaG9vdGRvd24gb24gdGhlbS4KIAkgKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhiaXQsICpjcHVtYXNrcCkgeworCWZvcl9lYWNoX2NwdShiaXQsIGZsdXNoX21hc2spIHsKIAkJYmxhZGUgPSB1dl9jcHVfdG9fYmxhZGVfaWQoYml0KTsKIAkJaWYgKGJsYWRlID09IHRoaXNfYmxhZGUpCiAJCQljb250aW51ZTsKLQkJY3B1X2NsZWFyKGJpdCwgKmNwdW1hc2twKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoYml0LCBmbHVzaF9tYXNrKTsKIAl9Ci0JaWYgKCFjcHVzX2VtcHR5KCpjcHVtYXNrcCkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOworCWlmICghY3B1bWFza19lbXB0eShmbHVzaF9tYXNrKSkKKwkJcmV0dXJuIGZsdXNoX21hc2s7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgogICogdXZfZmx1c2hfdGxiX290aGVycyAtIGdsb2JhbGx5IHB1cmdlIHRyYW5zbGF0aW9uIGNhY2hlIG9mIGEgdmlydHVhbAogICogYWRkcmVzcyBvciBhbGwgVExCJ3MKLSAqIEBjcHVtYXNrcDogbWFzayBvZiBhbGwgY3B1J3MgaW4gd2hpY2ggdGhlIGFkZHJlc3MgaXMgdG8gYmUgcmVtb3ZlZAorICogQGNwdW1hc2s6IG1hc2sgb2YgYWxsIGNwdSdzIGluIHdoaWNoIHRoZSBhZGRyZXNzIGlzIHRvIGJlIHJlbW92ZWQKICAqIEBtbTogbW1fc3RydWN0IGNvbnRhaW5pbmcgdmlydHVhbCBhZGRyZXNzIHJhbmdlCiAgKiBAdmE6IHZpcnR1YWwgYWRkcmVzcyB0byBiZSByZW1vdmVkIChvciBUTEJfRkxVU0hfQUxMIGZvciBhbGwgVExCJ3Mgb24gY3B1KQorICogQGNwdTogdGhlIGN1cnJlbnQgY3B1CiAgKgogICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGluaXRpYXRpbmcgYW55IFVWIGdsb2JhbCBUTEIgc2hvb3Rkb3duLgogICoKICAqIFB1cmdlcyB0aGUgdHJhbnNsYXRpb24gY2FjaGVzIG9mIGFsbCBzcGVjaWZpZWQgcHJvY2Vzc29ycyBvZiB0aGUgZ2l2ZW4KICAqIHZpcnR1YWwgYWRkcmVzcywgb3IgcHVyZ2VzIGFsbCBUTEIncyBvbiBzcGVjaWZpZWQgcHJvY2Vzc29ycy4KICAqCi0gKiBUaGUgY2FsbGVyIGhhcyBkZXJpdmVkIHRoZSBjcHVtYXNrcCBmcm9tIHRoZSBtbV9zdHJ1Y3QgYW5kIGhhcyBzdWJ0cmFjdGVkCi0gKiB0aGUgbG9jYWwgY3B1IGZyb20gdGhlIG1hc2suICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGlmIHRoZXJlCi0gKiBhcmUgYml0cyBzZXQgaW4gdGhlIG1hc2suIChlLmcuIGZsdXNoX3RsYl9wYWdlKCkpCisgKiBUaGUgY2FsbGVyIGhhcyBkZXJpdmVkIHRoZSBjcHVtYXNrIGZyb20gdGhlIG1tX3N0cnVjdC4gIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBvbmx5IGlmIHRoZXJlIGFyZSBiaXRzIHNldCBpbiB0aGUgbWFzay4gKGUuZy4gZmx1c2hfdGxiX3BhZ2UoKSkKICAqCi0gKiBUaGUgY3B1bWFza3AgaXMgY29udmVydGVkIGludG8gYSBub2RlbWFzayBvZiB0aGUgbm9kZXMgY29udGFpbmluZworICogVGhlIGNwdW1hc2sgaXMgY29udmVydGVkIGludG8gYSBub2RlbWFzayBvZiB0aGUgbm9kZXMgY29udGFpbmluZwogICogdGhlIGNwdXMuCiAgKgotICogUmV0dXJucyAxIGlmIGFsbCByZW1vdGUgZmx1c2hpbmcgd2FzIGRvbmUuCi0gKiBSZXR1cm5zIDAgaWYgc29tZSByZW1vdGUgZmx1c2hpbmcgcmVtYWlucyB0byBiZSBkb25lLgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCisgKgorICogUmV0dXJucyBOVUxMIGlmIGFsbCByZW1vdGUgZmx1c2hpbmcgd2FzIGRvbmUuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gY3B1bWFzayBpZiBzb21lIHJlbW90ZSBmbHVzaGluZyByZW1haW5zIHRvIGJlCisgKiBkb25lLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgdmFsaWQgdGlsbCBwcmVlbXB0aW9uIGlzIHJlLWVuYWJsZWQuCiAgKi8KLWludCB1dl9mbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCAqY3B1bWFza3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJdW5zaWduZWQgbG9uZyB2YSkKK2NvbnN0IHN0cnVjdCBjcHVtYXNrICp1dl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGludCBjcHUpCiB7CisJc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgZmx1c2hfdGxiX21hc2spOworCXN0cnVjdCBjcHVtYXNrICpmbHVzaF9tYXNrID0gJl9fZ2V0X2NwdV92YXIoZmx1c2hfdGxiX21hc2spOwogCWludCBpOwogCWludCBiaXQ7CiAJaW50IGJsYWRlOwotCWludCBjcHU7CisJaW50IHV2X2NwdTsKIAlpbnQgdGhpc19ibGFkZTsKIAlpbnQgbG9jYWxzID0gMDsKIAlzdHJ1Y3QgYmF1X2Rlc2MgKmJhdV9kZXNjOwogCi0JY3B1ID0gdXZfYmxhZGVfcHJvY2Vzc29yX2lkKCk7CisJY3B1bWFza19hbmRub3QoZmx1c2hfbWFzaywgY3B1bWFzaywgY3B1bWFza19vZihjcHUpKTsKKworCXV2X2NwdSA9IHV2X2JsYWRlX3Byb2Nlc3Nvcl9pZCgpOwogCXRoaXNfYmxhZGUgPSB1dl9udW1hX2JsYWRlX2lkKCk7CiAJYmF1X2Rlc2MgPSBfX2dldF9jcHVfdmFyKGJhdV9jb250cm9sKS5kZXNjcmlwdG9yX2Jhc2U7Ci0JYmF1X2Rlc2MgKz0gVVZfSVRFTVNfUEVSX0RFU0NSSVBUT1IgKiBjcHU7CisJYmF1X2Rlc2MgKz0gVVZfSVRFTVNfUEVSX0RFU0NSSVBUT1IgKiB1dl9jcHU7CiAKIAliYXVfbm9kZXNfY2xlYXIoJmJhdV9kZXNjLT5kaXN0cmlidXRpb24sIFVWX0RJU1RSSUJVVElPTl9TSVpFKTsKIAogCWkgPSAwOwotCWZvcl9lYWNoX2NwdV9tYXNrKGJpdCwgKmNwdW1hc2twKSB7CisJZm9yX2VhY2hfY3B1KGJpdCwgZmx1c2hfbWFzaykgewogCQlibGFkZSA9IHV2X2NwdV90b19ibGFkZV9pZChiaXQpOwogCQlCVUdfT04oYmxhZGUgPiAoVVZfRElTVFJJQlVUSU9OX1NJWkUgLSAxKSk7CiAJCWlmIChibGFkZSA9PSB0aGlzX2JsYWRlKSB7CkBAIC0zMzEsMTcgKzMzOSwxNyBAQAogCQkgKiBubyBvZmZfbm9kZSBmbHVzaGluZzsgcmV0dXJuIHN0YXR1cyBmb3IgbG9jYWwgbm9kZQogCQkgKi8KIAkJaWYgKGxvY2FscykKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZsdXNoX21hc2s7CiAJCWVsc2UKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIE5VTEw7CiAJfQogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnJlcXVlc3RvcisrOwogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLm50YXJnZXRlZCArPSBpOwogCiAJYmF1X2Rlc2MtPnBheWxvYWQuYWRkcmVzcyA9IHZhOwotCWJhdV9kZXNjLT5wYXlsb2FkLnNlbmRpbmdfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWJhdV9kZXNjLT5wYXlsb2FkLnNlbmRpbmdfY3B1ID0gY3B1OwogCi0JcmV0dXJuIHV2X2ZsdXNoX3NlbmRfYW5kX3dhaXQoY3B1LCB0aGlzX2JsYWRlLCBiYXVfZGVzYywgY3B1bWFza3ApOworCXJldHVybiB1dl9mbHVzaF9zZW5kX2FuZF93YWl0KHV2X2NwdSwgdGhpc19ibGFkZSwgYmF1X2Rlc2MsIGZsdXNoX21hc2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzMyLlMKaW5kZXggZDhjY2MzYy4uNjZkODc0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV8zMi5TCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAKIC8qIFdlIGNhbiBmcmVlIHVwIHRyYW1wb2xpbmUgYWZ0ZXIgYm9vdHVwIGlmIGNwdSBob3RwbHVnIGlzIG5vdCBzdXBwb3J0ZWQuICovCiAjaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKaW5kZXggODk0MjkzYy4uY2RkZmI4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCkBAIC0yNSwxMCArMjUsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogCiAuc2VjdGlvbiAucm9kYXRhLCAiYSIsIEBwcm9nYml0cwogCkBAIC0zNyw3ICszOCw3IEBACiBFTlRSWSh0cmFtcG9saW5lX2RhdGEpCiByX2Jhc2UgPSAuCiAJY2xpCQkJIyBXZSBzaG91bGQgYmUgc2FmZSBhbnl3YXkKLQl3YmludmQJCisJd2JpbnZkCiAJbW92CSVjcywgJWF4CSMgQ29kZSBhbmQgZGF0YSBpbiB0aGUgc2FtZSBwbGFjZQogCW1vdgklYXgsICVkcwogCW1vdgklYXgsICVlcwpAQCAtNzMsOSArNzQsOCBAQAogCWxpZHRsCXRpZHQgLSByX2Jhc2UJIyBsb2FkIGlkdCB3aXRoIDAsIDAKIAlsZ2R0bAl0Z2R0IC0gcl9iYXNlCSMgbG9hZCBnZHQgd2l0aCB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZQogCi0JeG9yCSVheCwgJWF4Ci0JaW5jCSVheAkJIyBwcm90ZWN0ZWQgbW9kZSAoUEUpIGJpdAotCWxtc3cJJWF4CQkjIGludG8gcHJvdGVjdGVkIG1vZGUKKwltb3YJJFg4Nl9DUjBfUEUsICVheAkjIHByb3RlY3RlZCBtb2RlIChQRSkgYml0CisJbG1zdwklYXgJCQkjIGludG8gcHJvdGVjdGVkIG1vZGUKIAogCSMgZmx1c2ggcHJlZmV0Y2ggYW5kIGp1bXAgdG8gc3RhcnR1cF8zMgogCWxqbXBsCSooc3RhcnR1cF8zMl92ZWN0b3IgLSByX2Jhc2UpCkBAIC04Niw5ICs4Niw4IEBACiAJbW92bAkkX19LRVJORUxfRFMsICVlYXgJIyBJbml0aWFsaXplIHRoZSAlZHMgc2VnbWVudCByZWdpc3RlcgogCW1vdmwJJWVheCwgJWRzCiAKLQl4b3JsCSVlYXgsICVlYXgKLQlidHNsCSQ1LCAlZWF4CQkjIEVuYWJsZSBQQUUgbW9kZQotCW1vdmwJJWVheCwgJWNyNAorCW1vdmwJJFg4Nl9DUjRfUEFFLCAlZWF4CisJbW92bAklZWF4LCAlY3I0CQkjIEVuYWJsZSBQQUUgbW9kZQogCiAJCQkJCSMgU2V0dXAgdHJhbXBvbGluZSA0IGxldmVsIHBhZ2V0YWJsZXMKIAlsZWFsCSh0cmFtcG9saW5lX2xldmVsNF9wZ3QgLSByX2Jhc2UpKCVlc2kpLCAlZWF4CkBAIC05OSw5ICs5OCw5IEBACiAJeG9ybAklZWR4LCAlZWR4CiAJd3Jtc3IKIAotCXhvcmwJJWVheCwgJWVheAotCWJ0c2wJJDMxLCAlZWF4CQkjIEVuYWJsZSBwYWdpbmcgYW5kIGluIHR1cm4gYWN0aXZhdGUgTG9uZyBNb2RlCi0JYnRzbAkkMCwgJWVheAkJIyBFbmFibGUgcHJvdGVjdGVkIG1vZGUKKwkjIEVuYWJsZSBwYWdpbmcgYW5kIGluIHR1cm4gYWN0aXZhdGUgTG9uZyBNb2RlCisJIyBFbmFibGUgcHJvdGVjdGVkIG1vZGUKKwltb3ZsCSQoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpLCAlZWF4CiAJbW92bAklZWF4LCAlY3IwCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBhOWU3NTQ4Li5hMWQyODgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNTQsMTUgKzU0LDE0IEBACiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogCi0jaW5jbHVkZSA8bWFjaF90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoX3RyYXBzLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiAjaW5jbHVkZSAiY3B1L21jaGVjay9tY2UuaCIKQEAgLTExOSw0NyArMTE4LDYgQEAKIAlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkKIAkJZGllKHN0ciwgcmVncywgZXJyKTsKIH0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGxhenkgVFNTJ3MgSS9PIGJpdG1hcCBjb3B5LiBJZiB0aGUgVFNTIGhhcyBhbgotICogaW52YWxpZCBvZmZzZXQgc2V0ICh0aGUgTEFaWSBvbmUpIGFuZCB0aGUgZmF1bHRpbmcgdGhyZWFkIGhhcwotICogYSB2YWxpZCBJL08gYml0bWFwIHBvaW50ZXIsIHdlIGNvcHkgdGhlIEkvTyBiaXRtYXAgaW4gdGhlIFRTUywKLSAqIHdlIHNldCB0aGUgb2Zmc2V0IGZpZWxkIGNvcnJlY3RseSBhbmQgcmV0dXJuIDEuCi0gKi8KLXN0YXRpYyBpbnQgbGF6eV9pb2JpdG1hcF9jb3B5KHZvaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZDsKLQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzOwotCWludCBjcHU7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0JdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKLQotCWlmICh0c3MtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPT0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUX0xBWlkgJiYKLQkgICAgdGhyZWFkLT5pb19iaXRtYXBfcHRyKSB7Ci0JCW1lbWNweSh0c3MtPmlvX2JpdG1hcCwgdGhyZWFkLT5pb19iaXRtYXBfcHRyLAotCQkgICAgICAgdGhyZWFkLT5pb19iaXRtYXBfbWF4KTsKLQkJLyoKLQkJICogSWYgdGhlIHByZXZpb3VzbHkgc2V0IG1hcCB3YXMgZXh0ZW5kaW5nIHRvIGhpZ2hlciBwb3J0cwotCQkgKiB0aGFuIHRoZSBjdXJyZW50IG9uZSwgcGFkIGV4dHJhIHNwYWNlIHdpdGggMHhmZiAobm8gYWNjZXNzKS4KLQkJICovCi0JCWlmICh0aHJlYWQtPmlvX2JpdG1hcF9tYXggPCB0c3MtPmlvX2JpdG1hcF9tYXgpIHsKLQkJCW1lbXNldCgoY2hhciAqKSB0c3MtPmlvX2JpdG1hcCArCi0JCQkJdGhyZWFkLT5pb19iaXRtYXBfbWF4LCAweGZmLAotCQkJCXRzcy0+aW9fYml0bWFwX21heCAtIHRocmVhZC0+aW9fYml0bWFwX21heCk7Ci0JCX0KLQkJdHNzLT5pb19iaXRtYXBfbWF4ID0gdGhyZWFkLT5pb19iaXRtYXBfbWF4OwotCQl0c3MtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPSBJT19CSVRNQVBfT0ZGU0VUOwotCQl0c3MtPmlvX2JpdG1hcF9vd25lciA9IHRocmVhZDsKLQkJcHV0X2NwdSgpOwotCi0JCXJldHVybiAxOwotCX0KLQlwdXRfY3B1KCk7Ci0KLQlyZXR1cm4gMDsKLX0KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMKQEAgLTMxMCwxMSArMjY4LDYgQEAKIAljb25kaXRpb25hbF9zdGkocmVncyk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKGxhenlfaW9iaXRtYXBfY29weSgpKSB7Ci0JCS8qIHJlc3RhcnQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uICovCi0JCXJldHVybjsKLQl9Ci0KIAlpZiAocmVncy0+ZmxhZ3MgJiBYODZfVk1fTUFTSykKIAkJZ290byBncF9pbl92bTg2OwogI2VuZGlmCkBAIC05MTQsMTkgKzg2NywyMCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NQVRIX0VNVUxBVElPTiAqLwogCi1kb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX2RldmljZV9ub3RfYXZhaWxhYmxlKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCitkb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzCitkb19kZXZpY2Vfbm90X2F2YWlsYWJsZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKIAlpZiAocmVhZF9jcjAoKSAmIFg4Nl9DUjBfRU0pIHsKIAkJc3RydWN0IG1hdGhfZW11X2luZm8gaW5mbyA9IHsgfTsKIAotCQljb25kaXRpb25hbF9zdGkoJnJlZ3MpOworCQljb25kaXRpb25hbF9zdGkocmVncyk7CiAKLQkJaW5mby5yZWdzID0gJnJlZ3M7CisJCWluZm8ucmVncyA9IHJlZ3M7CiAJCW1hdGhfZW11bGF0ZSgmaW5mbyk7CiAJfSBlbHNlIHsKIAkJbWF0aF9zdGF0ZV9yZXN0b3JlKCk7IC8qIGludGVycnVwdHMgc3RpbGwgb2ZmICovCi0JCWNvbmRpdGlvbmFsX3N0aSgmcmVncyk7CisJCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKIAl9CiAjZWxzZQogCW1hdGhfc3RhdGVfcmVzdG9yZSgpOwpAQCAtOTQyLDcgKzg5Niw3IEBACiAJaW5mby5zaV9zaWdubyA9IFNJR0lMTDsKIAlpbmZvLnNpX2Vycm5vID0gMDsKIAlpbmZvLnNpX2NvZGUgPSBJTExfQkFEU1RLOwotCWluZm8uc2lfYWRkciA9IDA7CisJaW5mby5zaV9hZGRyID0gTlVMTDsKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImlyZXQgZXhjZXB0aW9uIiwKIAkJCXJlZ3MsIGVycm9yX2NvZGUsIDMyLCBTSUdJTEwpID09IE5PVElGWV9TVE9QKQogCQlyZXR1cm47CkBAIC0xMDI2LDYgKzk4MCw2IEBACiAJY3B1X2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLQl0cmFwX2luaXRfaG9vaygpOworCXg4Nl9xdWlya190cmFwX2luaXQoKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IGQ1Y2ViYjUuLjdhNTY3ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKQEAgLTE3LDIwICsxNywyMSBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAKLXVuc2lnbmVkIGludCBjcHVfa2h6OyAgICAgICAgICAgLyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi8KK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IGNwdV9raHo7CS8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovCiBFWFBPUlRfU1lNQk9MKGNwdV9raHopOwotdW5zaWduZWQgaW50IHRzY19raHo7CisKK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHRzY19raHo7CiBFWFBPUlRfU1lNQk9MKHRzY19raHopOwogCiAvKgogICogVFNDIGNhbiBiZSB1bnN0YWJsZSBkdWUgdG8gY3B1ZnJlcSBvciBkdWUgdG8gdW5zeW5jZWQgVFNDcwogICovCi1zdGF0aWMgaW50IHRzY191bnN0YWJsZTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0c2NfdW5zdGFibGU7CiAKIC8qIG5hdGl2ZV9zY2hlZF9jbG9jaygpIGlzIGNhbGxlZCBiZWZvcmUgdHNjX2luaXQoKSwgc28KICAgIHdlIG11c3Qgc3RhcnQgd2l0aCB0aGUgVFNDIHNvZnQgZGlzYWJsZWQgdG8gcHJldmVudAogICAgZXJyb25lb3VzIHJkdHNjIHVzYWdlIG9uICFjcHVfaGFzX3RzYyBwcm9jZXNzb3JzICovCi1zdGF0aWMgaW50IHRzY19kaXNhYmxlZCA9IC0xOworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHRzY19kaXNhYmxlZCA9IC0xOwogCiBzdGF0aWMgaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTsKIC8qCkBAIC01NDMsOCArNTQ0LDYgQEAKIAlyZXR1cm4gdHNjX3BpdF9taW47CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0vKiBPbmx5IGNhbGxlZCBmcm9tIHRoZSBQb3dlcm5vdyBLNyBjcHUgZnJlcSBkcml2ZXIgKi8KIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpCiB7CiAjaWZuZGVmIENPTkZJR19TTVAKQEAgLTU2Niw3ICs1NjUsNiBAQAogCiBFWFBPUlRfU1lNQk9MKHJlY2FsaWJyYXRlX2NwdV9raHopOwogCi0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiAvKiBBY2NlbGVyYXRvcnMgZm9yIHNjaGVkX2Nsb2NrKCkKICAqIGNvbnZlcnQgZnJvbSBjeWNsZXMoNjRiaXRzKSA9PiBuYW5vc2Vjb25kcyAoNjRiaXRzKQpAQCAtNzkzLDcgKzc5MSw3IEBACiAJaWYgKCFjcHVfaGFzX3RzYyB8fCB0c2NfdW5zdGFibGUpCiAJCXJldHVybiAxOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9TTVAKKyNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGFwaWNfaXNfY2x1c3RlcmVkX2JveCgpKQogCQlyZXR1cm4gMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCmluZGV4IGQ4MDFkMDYuLjE5MWE4NzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKQEAgLTI0LDE4ICsyNCwxNCBAQAogCiAjaW5jbHVkZSA8YXNtL3Zpc3dzL2NvYmFsdC5oPgogI2luY2x1ZGUgPGFzbS92aXN3cy9waWl4NC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0KLSNpbmNsdWRlICJtYWNoX2FwaWMuaCIKLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KQEAgLTQ5LDggKzQ1LDYgQEAKIAogZXh0ZXJuIGludCBub19icm9hZGNhc3Q7CiAKLSNpbmNsdWRlIDxhc20vYXBpYy5oPgotCiBjaGFyIHZpc3dzX2JvYXJkX3R5cGUJPSAtMTsKIGNoYXIgdmlzd3NfYm9hcmRfcmV2CT0gLTE7CiAKQEAgLTIwMCw3ICsxOTQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JYXBpY19jcHVzID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KG0tPmFwaWNpZCk7CisJYXBpY19jcHVzID0gYXBpYy0+YXBpY2lkX3RvX2NwdV9wcmVzZW50KG0tPmFwaWNpZCk7CiAJcGh5c2lkc19vcihwaHlzX2NwdV9wcmVzZW50X21hcCwgcGh5c19jcHVfcHJlc2VudF9tYXAsIGFwaWNfY3B1cyk7CiAJLyoKIAkgKiBWYWxpZGF0ZSB2ZXJzaW9uCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm04Nl8zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtODZfMzIuYwppbmRleCA0ZWViNWNmLi5kN2FjODRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm04Nl8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bTg2XzMyLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXJldCA9IEtWTTg2LT5yZWdzMzI7CiAKIAlyZXQtPmZzID0gY3VycmVudC0+dGhyZWFkLnNhdmVkX2ZzOwotCWxvYWRzZWdtZW50KGdzLCBjdXJyZW50LT50aHJlYWQuc2F2ZWRfZ3MpOworCXNldF91c2VyX2dzKHJldCwgY3VycmVudC0+dGhyZWFkLnNhdmVkX2dzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xOTcsOSArMTk3LDkgQEAKIHN0YXRpYyBpbnQgZG9fdm04Nl9pcnFfaGFuZGxpbmcoaW50IHN1YmZ1bmN0aW9uLCBpbnQgaXJxbnVtYmVyKTsKIHN0YXRpYyB2b2lkIGRvX3N5c192bTg2KHN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAotYXNtbGlua2FnZSBpbnQgc3lzX3ZtODZvbGQoc3RydWN0IHB0X3JlZ3MgcmVncykKK2ludCBzeXNfdm04Nm9sZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICp2ODYgPSAoc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqKXJlZ3MuYng7CisJc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqdjg2ID0gKHN0cnVjdCB2bTg2X3N0cnVjdCBfX3VzZXIgKilyZWdzLT5ieDsKIAlzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0IGluZm87IC8qIGRlY2xhcmUgdGhpcyBfb24gdG9wXywKIAkJCQkJICogdGhpcyBhdm9pZHMgd2FzdGluZyBvZiBzdGFjayBzcGFjZS4KIAkJCQkJICogVGhpcyByZW1haW5zIG9uIHRoZSBzdGFjayB1bnRpbCB3ZQpAQCAtMjE4LDcgKzIxOCw3IEBACiAJaWYgKHRtcCkKIAkJZ290byBvdXQ7CiAJbWVtc2V0KCZpbmZvLnZtODZwbHVzLCAwLCAoaW50KSZpbmZvLnJlZ3MzMiAtIChpbnQpJmluZm8udm04NnBsdXMpOwotCWluZm8ucmVnczMyID0gJnJlZ3M7CisJaW5mby5yZWdzMzIgPSByZWdzOwogCXRzay0+dGhyZWFkLnZtODZfaW5mbyA9IHY4NjsKIAlkb19zeXNfdm04NigmaW5mbywgdHNrKTsKIAlyZXQgPSAwOwkvKiB3ZSBuZXZlciByZXR1cm4gaGVyZSAqLwpAQCAtMjI3LDcgKzIyNyw3IEBACiB9CiAKIAotYXNtbGlua2FnZSBpbnQgc3lzX3ZtODYoc3RydWN0IHB0X3JlZ3MgcmVncykKK2ludCBzeXNfdm04NihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0IGluZm87IC8qIGRlY2xhcmUgdGhpcyBfb24gdG9wXywKIAkJCQkJICogdGhpcyBhdm9pZHMgd2FzdGluZyBvZiBzdGFjayBzcGFjZS4KQEAgLTIzOSwxMiArMjM5LDEyIEBACiAJc3RydWN0IHZtODZwbHVzX3N0cnVjdCBfX3VzZXIgKnY4NjsKIAogCXRzayA9IGN1cnJlbnQ7Ci0Jc3dpdGNoIChyZWdzLmJ4KSB7CisJc3dpdGNoIChyZWdzLT5ieCkgewogCWNhc2UgVk04Nl9SRVFVRVNUX0lSUToKIAljYXNlIFZNODZfRlJFRV9JUlE6CiAJY2FzZSBWTTg2X0dFVF9JUlFfQklUUzoKIAljYXNlIFZNODZfR0VUX0FORF9SRVNFVF9JUlE6Ci0JCXJldCA9IGRvX3ZtODZfaXJxX2hhbmRsaW5nKHJlZ3MuYngsIChpbnQpcmVncy5jeCk7CisJCXJldCA9IGRvX3ZtODZfaXJxX2hhbmRsaW5nKHJlZ3MtPmJ4LCAoaW50KXJlZ3MtPmN4KTsKIAkJZ290byBvdXQ7CiAJY2FzZSBWTTg2X1BMVVNfSU5TVEFMTF9DSEVDSzoKIAkJLyoKQEAgLTI2MSwxNCArMjYxLDE0IEBACiAJcmV0ID0gLUVQRVJNOwogCWlmICh0c2stPnRocmVhZC5zYXZlZF9zcDApCiAJCWdvdG8gb3V0OwotCXY4NiA9IChzdHJ1Y3Qgdm04NnBsdXNfc3RydWN0IF9fdXNlciAqKXJlZ3MuY3g7CisJdjg2ID0gKHN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgX191c2VyICopcmVncy0+Y3g7CiAJdG1wID0gY29weV92bTg2X3JlZ3NfZnJvbV91c2VyKCZpbmZvLnJlZ3MsICZ2ODYtPnJlZ3MsCiAJCQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QsIHJlZ3MzMikgLQogCQkJCSAgICAgICBzaXplb2YoaW5mby5yZWdzKSk7CiAJcmV0ID0gLUVGQVVMVDsKIAlpZiAodG1wKQogCQlnb3RvIG91dDsKLQlpbmZvLnJlZ3MzMiA9ICZyZWdzOworCWluZm8ucmVnczMyID0gcmVnczsKIAlpbmZvLnZtODZwbHVzLmlzX3ZtODZwdXMgPSAxOwogCXRzay0+dGhyZWFkLnZtODZfaW5mbyA9IChzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICopdjg2OwogCWRvX3N5c192bTg2KCZpbmZvLCB0c2spOwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJaW5mby0+cmVnczMyLT5heCA9IDA7CiAJdHNrLT50aHJlYWQuc2F2ZWRfc3AwID0gdHNrLT50aHJlYWQuc3AwOwogCXRzay0+dGhyZWFkLnNhdmVkX2ZzID0gaW5mby0+cmVnczMyLT5mczsKLQlzYXZlc2VnbWVudChncywgdHNrLT50aHJlYWQuc2F2ZWRfZ3MpOworCXRzay0+dGhyZWFkLnNhdmVkX2dzID0gZ2V0X3VzZXJfZ3MoaW5mby0+cmVnczMyKTsKIAogCXRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBnZXRfY3B1KCkpOwogCXRzay0+dGhyZWFkLnNwMCA9ICh1bnNpZ25lZCBsb25nKSAmaW5mby0+Vk04Nl9UU1NfRVNQMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCBiZWY1OGI0Li4yY2M0YTkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC02ODAsMTAgKzY4MCwxMSBAQAogCXBhcmFfZmlsbChwdl9tbXVfb3BzLndyaXRlX2NyMiwgU2V0Q1IyKTsKIAlwYXJhX2ZpbGwocHZfbW11X29wcy53cml0ZV9jcjMsIFNldENSMyk7CiAJcGFyYV9maWxsKHB2X2NwdV9vcHMud3JpdGVfY3I0LCBTZXRDUjQpOwotCXBhcmFfZmlsbChwdl9pcnFfb3BzLnNhdmVfZmwsIEdldEludGVycnVwdE1hc2spOwotCXBhcmFfZmlsbChwdl9pcnFfb3BzLnJlc3RvcmVfZmwsIFNldEludGVycnVwdE1hc2spOwotCXBhcmFfZmlsbChwdl9pcnFfb3BzLmlycV9kaXNhYmxlLCBEaXNhYmxlSW50ZXJydXB0cyk7Ci0JcGFyYV9maWxsKHB2X2lycV9vcHMuaXJxX2VuYWJsZSwgRW5hYmxlSW50ZXJydXB0cyk7CisKKwlwYXJhX2ZpbGwocHZfaXJxX29wcy5zYXZlX2ZsLmZ1bmMsIEdldEludGVycnVwdE1hc2spOworCXBhcmFfZmlsbChwdl9pcnFfb3BzLnJlc3RvcmVfZmwuZnVuYywgU2V0SW50ZXJydXB0TWFzayk7CisJcGFyYV9maWxsKHB2X2lycV9vcHMuaXJxX2Rpc2FibGUuZnVuYywgRGlzYWJsZUludGVycnVwdHMpOworCXBhcmFfZmlsbChwdl9pcnFfb3BzLmlycV9lbmFibGUuZnVuYywgRW5hYmxlSW50ZXJydXB0cyk7CiAKIAlwYXJhX2ZpbGwocHZfY3B1X29wcy53YmludmQsIFdCSU5WRCk7CiAJcGFyYV9maWxsKHB2X2NwdV9vcHMucmVhZF90c2MsIFJEVFNDKTsKQEAgLTc5Nyw4ICs3OTgsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSAgICAgICBwYXJhX2ZpbGwoYXBpY19vcHMtPnJlYWQsIEFQSUNSZWFkKTsKLSAgICAgICBwYXJhX2ZpbGwoYXBpY19vcHMtPndyaXRlLCBBUElDV3JpdGUpOworICAgICAgIHBhcmFfZmlsbChhcGljLT5yZWFkLCBBUElDUmVhZCk7CisgICAgICAgcGFyYV9maWxsKGFwaWMtPndyaXRlLCBBUElDV3JpdGUpOwogI2VuZGlmCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYwppbmRleCBlNWIwODhmLi4zM2E3ODhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYwpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3ZtaS5oPgogI2luY2x1ZGUgPGFzbS92bWlfdGltZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgpAQCAtMjU2LDcgKzI1NSw3IEBACiAJICovCiAJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfU1VTUEVORCwgTlVMTCk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLSNpZmRlZiBDT05GSUdfWDg2X1NNUAorI2lmZGVmIENPTkZJR19TTVAKIAkvKgogCSAqIFhYWCBoYW5kbGVfcGVyY3B1X2lycSBvbmx5IGRlZmluZWQgZm9yIFNNUDsgd2UgbmVlZCB0byBzd2l0Y2ggb3ZlcgogCSAqIHRvIHVzaW5nIGl0LCBzaW5jZSB0aGlzIGlzIGEgbG9jYWwgaW50ZXJydXB0LCB3aGljaCBlYWNoIENQVSBtdXN0CkBAIC0yODgsOCArMjg3LDcgQEAKIHN0YXRpYyBjeWNsZV90IHJlYWRfcmVhbF9jeWNsZXModm9pZCkKIHsKIAljeWNsZV90IHJldCA9IChjeWNsZV90KXZtaV90aW1lcl9vcHMuZ2V0X2N5Y2xlX2NvdW50ZXIoVk1JX0NZQ0xFU19SRUFMKTsKLQlyZXR1cm4gcmV0ID49IGNsb2Nrc291cmNlX3ZtaS5jeWNsZV9sYXN0ID8KLQkJcmV0IDogY2xvY2tzb3VyY2Vfdm1pLmN5Y2xlX2xhc3Q7CisJcmV0dXJuIG1heChyZXQsIGNsb2Nrc291cmNlX3ZtaS5jeWNsZV9sYXN0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV92bWkgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCmluZGV4IDgyYzY3NTUuLjBkODYwOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCkBAIC0xMiw3ICsxMiw3IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vYm9vdC5oPgogCkBAIC0xNzgsMTQgKzE3OCw3IEBACiAJX19pbml0cmFtZnNfZW5kID0gLjsKICAgfQogI2VuZGlmCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICAuZGF0YS5wZXJjcHUgIDogQVQoQUREUiguZGF0YS5wZXJjcHUpIC0gTE9BRF9PRkZTRVQpIHsKLQlfX3Blcl9jcHVfc3RhcnQgPSAuOwotCSooLmRhdGEucGVyY3B1LnBhZ2VfYWxpZ25lZCkKLQkqKC5kYXRhLnBlcmNwdSkKLQkqKC5kYXRhLnBlcmNwdS5zaGFyZWRfYWxpZ25lZCkKLQlfX3Blcl9jcHVfZW5kID0gLjsKLSAgfQorICBQRVJDUFUoUEFHRV9TSVpFKQogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgLyogZnJlZWQgYWZ0ZXIgaW5pdCBlbmRzIGhlcmUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUwppbmRleCAxYTYxNGMwLi5mYmZjZWQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUwpAQCAtNSw3ICs1LDggQEAKICNkZWZpbmUgTE9BRF9PRkZTRVQgX19TVEFSVF9LRVJORUxfbWFwCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KIAogI3VuZGVmIGkzODYJLyogaW4gY2FzZSB0aGUgcHJlcHJvY2Vzc29yIGlzIGEgMzJiaXQgb25lICovCiAKQEAgLTEzLDEyICsxNCwxNSBAQAogT1VUUFVUX0FSQ0goaTM4Njp4ODYtNjQpCiBFTlRSWShwaHlzX3N0YXJ0dXBfNjQpCiBqaWZmaWVzXzY0ID0gamlmZmllczsKLV9wcm94eV9wZGEgPSAxOwogUEhEUlMgewogCXRleHQgUFRfTE9BRCBGTEFHUyg1KTsJLyogUl9FICovCiAJZGF0YSBQVF9MT0FEIEZMQUdTKDcpOwkvKiBSV0UgKi8KIAl1c2VyIFBUX0xPQUQgRkxBR1MoNyk7CS8qIFJXRSAqLwogCWRhdGEuaW5pdCBQVF9MT0FEIEZMQUdTKDcpOwkvKiBSV0UgKi8KKyNpZmRlZiBDT05GSUdfU01QCisJcGVyY3B1IFBUX0xPQUQgRkxBR1MoNyk7CS8qIFJXRSAqLworI2VuZGlmCisJZGF0YS5pbml0MiBQVF9MT0FEIEZMQUdTKDcpOwkvKiBSV0UgKi8KIAlub3RlIFBUX05PVEUgRkxBR1MoMCk7CS8qIF9fXyAqLwogfQogU0VDVElPTlMKQEAgLTIwOCwxNCArMjEyLDI4IEBACiAgIF9faW5pdHJhbWZzX2VuZCA9IC47CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTVAKKyAgLyoKKyAgICogcGVyY3B1IG9mZnNldHMgYXJlIHplcm8tYmFzZWQgb24gU01QLiAgUEVSQ1BVX1ZBRERSKCkgY2hhbmdlcyB0aGUKKyAgICogb3V0cHV0IFBIRFIsIHNvIHRoZSBuZXh0IG91dHB1dCBzZWN0aW9uIC0gX19kYXRhX25vc2F2ZSAtIHNob3VsZAorICAgKiBzdGFydCBhbm90aGVyIHNlY3Rpb24gZGF0YS5pbml0Mi4gIEFsc28sIHBkYSBzaG91bGQgYmUgYXQgdGhlIGhlYWQgb2YKKyAgICogcGVyY3B1IGFyZWEuICBQcmVhbGxvY2F0ZSBpdCBhbmQgZGVmaW5lIHRoZSBwZXJjcHUgb2Zmc2V0IHN5bWJvbAorICAgKiBzbyB0aGF0IGl0IGNhbiBiZSBhY2Nlc3NlZCBhcyBhIHBlcmNwdSB2YXJpYWJsZS4KKyAgICovCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOworICBQRVJDUFVfVkFERFIoMCwgOnBlcmNwdSkKKyNlbHNlCiAgIFBFUkNQVShQQUdFX1NJWkUpCisjZW5kaWYKIAogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9fbm9zYXZlX2JlZ2luID0gLjsKLSAgLmRhdGFfbm9zYXZlIDogQVQoQUREUiguZGF0YV9ub3NhdmUpIC0gTE9BRF9PRkZTRVQpIHsgKiguZGF0YS5ub3NhdmUpIH0KKyAgLmRhdGFfbm9zYXZlIDogQVQoQUREUiguZGF0YV9ub3NhdmUpIC0gTE9BRF9PRkZTRVQpIHsKKyAgICAgICooLmRhdGEubm9zYXZlKQorICB9IDpkYXRhLmluaXQyIC8qIHVzZSBhbm90aGVyIHNlY3Rpb24gZGF0YS5pbml0Miwgc2VlIFBFUkNQVV9WQUREUigpIGFib3ZlICovCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX25vc2F2ZV9lbmQgPSAuOwogCkBAIC0yMzksOCArMjU3LDIxIEBACiAgIERXQVJGX0RFQlVHCiB9CiAKKyAvKgorICAqIFBlci1jcHUgc3ltYm9scyB3aGljaCBuZWVkIHRvIGJlIG9mZnNldCBmcm9tIF9fcGVyX2NwdV9sb2FkCisgICogZm9yIHRoZSBib290IHByb2Nlc3Nvci4KKyAgKi8KKyNkZWZpbmUgSU5JVF9QRVJfQ1BVKHgpIGluaXRfcGVyX2NwdV9fIyN4ID0gcGVyX2NwdV9fIyN4ICsgX19wZXJfY3B1X2xvYWQKK0lOSVRfUEVSX0NQVShnZHRfcGFnZSk7CitJTklUX1BFUl9DUFUoaXJxX3N0YWNrX3VuaW9uKTsKKwogLyoKICAqIEJ1aWxkLXRpbWUgY2hlY2sgb24gdGhlIGltYWdlIHNpemU6CiAgKi8KIEFTU0VSVCgoX2VuZCAtIF90ZXh0IDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKIAkia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIikKKworI2lmZGVmIENPTkZJR19TTVAKK0FTU0VSVCgocGVyX2NwdV9faXJxX3N0YWNrX3VuaW9uID09IDApLAorICAgICAgICAiaXJxX3N0YWNrX3VuaW9uIGlzIG5vdCBhdCBzdGFydCBvZiBwZXItY3B1IGFyZWEiKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKaW5kZXggYTY4OGYzYi4uNzRkZTU2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKLSNpZiBkZWZpbmVkIENPTkZJR19QQ0kgJiYgZGVmaW5lZCBDT05GSUdfUEFSQVZJUlQKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKIC8qCiAgKiBJbnRlcnJ1cHQgY29udHJvbCBvbiB2U01Qb3dlcmVkIHN5c3RlbXM6CiAgKiB+QUMgaXMgYSBzaGFkb3cgb2YgSUYuICBJZiBJRiBpcyAnb24nIEFDIHNob3VsZCBiZSAnb2ZmJwpAQCAtMzcsNiArMzcsNyBAQAogCQlmbGFncyAmPSB+WDg2X0VGTEFHU19JRjsKIAlyZXR1cm4gZmxhZ3M7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHZzbXBfc2F2ZV9mbCk7CiAKIHN0YXRpYyB2b2lkIHZzbXBfcmVzdG9yZV9mbCh1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtNDYsNiArNDcsNyBAQAogCQlmbGFncyB8PSBYODZfRUZMQUdTX0FDOwogCW5hdGl2ZV9yZXN0b3JlX2ZsKGZsYWdzKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksodnNtcF9yZXN0b3JlX2ZsKTsKIAogc3RhdGljIHZvaWQgdnNtcF9pcnFfZGlzYWJsZSh2b2lkKQogewpAQCAtNTMsNiArNTUsNyBAQAogCiAJbmF0aXZlX3Jlc3RvcmVfZmwoKGZsYWdzICYgflg4Nl9FRkxBR1NfSUYpIHwgWDg2X0VGTEFHU19BQyk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHZzbXBfaXJxX2Rpc2FibGUpOwogCiBzdGF0aWMgdm9pZCB2c21wX2lycV9lbmFibGUodm9pZCkKIHsKQEAgLTYwLDYgKzYzLDcgQEAKIAogCW5hdGl2ZV9yZXN0b3JlX2ZsKChmbGFncyB8IFg4Nl9FRkxBR1NfSUYpICYgKH5YODZfRUZMQUdTX0FDKSk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHZzbXBfaXJxX2VuYWJsZSk7CiAKIHN0YXRpYyB1bnNpZ25lZCBfX2luaXRfb3JfbW9kdWxlIHZzbXBfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppYnVmLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pCkBAIC05MCwxMCArOTQsMTAgQEAKIAkgICAgICAgY2FwLCBjdGwpOwogCWlmIChjYXAgJiBjdGwgJiAoMSA8PCA0KSkgewogCQkvKiBTZXR1cCBpcnEgb3BzIGFuZCB0dXJuIG9uIHZTTVAgIElSUSBmYXN0cGF0aCBoYW5kbGluZyAqLwotCQlwdl9pcnFfb3BzLmlycV9kaXNhYmxlID0gdnNtcF9pcnFfZGlzYWJsZTsKLQkJcHZfaXJxX29wcy5pcnFfZW5hYmxlICA9IHZzbXBfaXJxX2VuYWJsZTsKLQkJcHZfaXJxX29wcy5zYXZlX2ZsICA9IHZzbXBfc2F2ZV9mbDsKLQkJcHZfaXJxX29wcy5yZXN0b3JlX2ZsICA9IHZzbXBfcmVzdG9yZV9mbDsKKwkJcHZfaXJxX29wcy5pcnFfZGlzYWJsZSA9IFBWX0NBTExFRV9TQVZFKHZzbXBfaXJxX2Rpc2FibGUpOworCQlwdl9pcnFfb3BzLmlycV9lbmFibGUgID0gUFZfQ0FMTEVFX1NBVkUodnNtcF9pcnFfZW5hYmxlKTsKKwkJcHZfaXJxX29wcy5zYXZlX2ZsICA9IFBWX0NBTExFRV9TQVZFKHZzbXBfc2F2ZV9mbCk7CisJCXB2X2lycV9vcHMucmVzdG9yZV9mbCAgPSBQVl9DQUxMRUVfU0FWRSh2c21wX3Jlc3RvcmVfZmwpOwogCQlwdl9pbml0X29wcy5wYXRjaCA9IHZzbXBfcGF0Y2g7CiAKIAkJY3RsICY9IH4oMSA8PCA0KTsKQEAgLTExMCw3ICsxMTQsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IGlzX3ZzbXAgPSAtMTsKIAogc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF92c21wX2JveCh2b2lkKQpAQCAtMTM1LDE1ICsxMzgsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF92c21wX2JveCh2b2lkKQotewotfQotaW50IGlzX3ZzbXBfYm94KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKIAogdm9pZCBfX2luaXQgdnNtcF9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jCmluZGV4IDY5NWU0MjYuLjM5MDllM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jCkBAIC01OCw1ICs1OCwzIEBACiBFWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGluaXRfbGV2ZWw0X3BndCk7CiBFWFBPUlRfU1lNQk9MKGxvYWRfZ3NfaW5kZXgpOwotCi1FWFBPUlRfU1lNQk9MKF9wcm94eV9wZGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCBiODExMjVmLi4wYTMwM2MzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtNCw2ICs0LDEwIEBACiBjb25maWcgSEFWRV9LVk0KICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgeQorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVwZW5kcyBvbiBIQVZFX0tWTSB8fCBYODYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggNzJiZDI3NS4uYzEzYmI5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTIwMSw2ICsyMDEsOSBAQAogCWlmICghYXRvbWljX2luY19hbmRfdGVzdCgmcHQtPnBlbmRpbmcpKQogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJnZjcHUwLT5yZXF1ZXN0cyk7CiAKKwlpZiAoIXB0LT5yZWluamVjdCkKKwkJYXRvbWljX3NldCgmcHQtPnBlbmRpbmcsIDEpOworCiAJaWYgKHZjcHUwICYmIHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUwLT53cSkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdTAtPndxKTsKIApAQCAtNTM2LDYgKzUzOSwxNiBAQAogCXBpdC0+cGl0X3N0YXRlLmlycV9hY2sgPSAxOwogfQogCitzdGF0aWMgdm9pZCBwaXRfbWFza19ub3RpZmVyKHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4sIGJvb2wgbWFzaykKK3sKKwlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gY29udGFpbmVyX29mKGtpbW4sIHN0cnVjdCBrdm1fcGl0LCBtYXNrX25vdGlmaWVyKTsKKworCWlmICghbWFzaykgeworCQlhdG9taWNfc2V0KCZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIucGVuZGluZywgMCk7CisJCXBpdC0+cGl0X3N0YXRlLmlycV9hY2sgPSAxOworCX0KK30KKwogc3RydWN0IGt2bV9waXQgKmt2bV9jcmVhdGVfcGl0KHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX3BpdCAqcGl0OwpAQCAtNTQ1LDkgKzU1OCw3IEBACiAJaWYgKCFwaXQpCiAJCXJldHVybiBOVUxMOwogCi0JbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKIAlwaXQtPmlycV9zb3VyY2VfaWQgPSBrdm1fcmVxdWVzdF9pcnFfc291cmNlX2lkKGt2bSk7Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCWlmIChwaXQtPmlycV9zb3VyY2VfaWQgPCAwKSB7CiAJCWtmcmVlKHBpdCk7CiAJCXJldHVybiBOVUxMOwpAQCAtNTgwLDEwICs1OTEsMTQgQEAKIAlwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIuZ3NpID0gMDsKIAlwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIuaXJxX2Fja2VkID0ga3ZtX3BpdF9hY2tfaXJxOwogCWt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJnBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllcik7CisJcGl0X3N0YXRlLT5waXRfdGltZXIucmVpbmplY3QgPSB0cnVlOwogCW11dGV4X3VubG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CiAKIAlrdm1fcGl0X3Jlc2V0KHBpdCk7CiAKKwlwaXQtPm1hc2tfbm90aWZpZXIuZnVuYyA9IHBpdF9tYXNrX25vdGlmZXI7CisJa3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKGt2bSwgMCwgJnBpdC0+bWFza19ub3RpZmllcik7CisKIAlyZXR1cm4gcGl0OwogfQogCkBAIC01OTIsNiArNjA3LDggQEAKIAlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CiAKIAlpZiAoa3ZtLT5hcmNoLnZwaXQpIHsKKwkJa3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLAorCQkJCQkgICAgICAgJmt2bS0+YXJjaC52cGl0LT5tYXNrX25vdGlmaWVyKTsKIAkJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAkJdGltZXIgPSAma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIudGltZXI7CiAJCWhydGltZXJfY2FuY2VsKHRpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5oIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKaW5kZXggNDE3ODAyMi4uNmFjYmU0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmgKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKQEAgLTksNiArOSw3IEBACiAJczY0IHBlcmlvZDsgLyogdW5pdDogbnMgKi8KIAlzNjQgc2NoZWR1bGVkOwogCWF0b21pY190IHBlbmRpbmc7CisJYm9vbCByZWluamVjdDsKIH07CiAKIHN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlIHsKQEAgLTQ1LDYgKzQ2LDcgQEAKIAlzdHJ1Y3Qga3ZtICprdm07CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlIHBpdF9zdGF0ZTsKIAlpbnQgaXJxX3NvdXJjZV9pZDsKKwlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyIG1hc2tfbm90aWZpZXI7CiB9OwogCiAjZGVmaW5lIEtWTV9QSVRfQkFTRV9BRERSRVNTCSAgICAweDQwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCmluZGV4IDE3OWRjYjAuLjFjY2I1MGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1OS5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCkBAIC0zMiwxMSArMzIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogCiBzdGF0aWMgdm9pZCBwaWNfbG9jayhzdHJ1Y3Qga3ZtX3BpYyAqcykKKwlfX2FjcXVpcmVzKCZzLT5sb2NrKQogewogCXNwaW5fbG9jaygmcy0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHBpY191bmxvY2soc3RydWN0IGt2bV9waWMgKnMpCisJX19yZWxlYXNlcygmcy0+bG9jaykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBzLT5rdm07CiAJdW5zaWduZWQgYWNrcyA9IHMtPnBlbmRpbmdfYWNrczsKQEAgLTQ5LDcgKzUxLDggQEAKIAlzcGluX3VubG9jaygmcy0+bG9jayk7CiAKIAl3aGlsZSAoYWNrcykgewotCQlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIF9fZmZzKGFja3MpKTsKKwkJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBTRUxFQ1RfUElDKF9fZmZzKGFja3MpKSwKKwkJCQkgICAgIF9fZmZzKGFja3MpKTsKIAkJYWNrcyAmPSBhY2tzIC0gMTsKIAl9CiAKQEAgLTc2LDEyICs3OSwxMyBAQAogLyoKICAqIHNldCBpcnEgbGV2ZWwuIElmIGFuIGVkZ2UgaXMgZGV0ZWN0ZWQsIHRoZW4gdGhlIElSUiBpcyBzZXQgdG8gMQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGljX3NldF9pcnExKHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcywgaW50IGlycSwgaW50IGxldmVsKQorc3RhdGljIGlubGluZSBpbnQgcGljX3NldF9pcnExKHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcywgaW50IGlycSwgaW50IGxldmVsKQogewotCWludCBtYXNrOworCWludCBtYXNrLCByZXQgPSAxOwogCW1hc2sgPSAxIDw8IGlycTsKIAlpZiAocy0+ZWxjciAmIG1hc2spCS8qIGxldmVsIHRyaWdnZXJlZCAqLwogCQlpZiAobGV2ZWwpIHsKKwkJCXJldCA9ICEocy0+aXJyICYgbWFzayk7CiAJCQlzLT5pcnIgfD0gbWFzazsKIAkJCXMtPmxhc3RfaXJyIHw9IG1hc2s7CiAJCX0gZWxzZSB7CkBAIC05MCwxMSArOTQsMTUgQEAKIAkJfQogCWVsc2UJLyogZWRnZSB0cmlnZ2VyZWQgKi8KIAkJaWYgKGxldmVsKSB7Ci0JCQlpZiAoKHMtPmxhc3RfaXJyICYgbWFzaykgPT0gMCkKKwkJCWlmICgocy0+bGFzdF9pcnIgJiBtYXNrKSA9PSAwKSB7CisJCQkJcmV0ID0gIShzLT5pcnIgJiBtYXNrKTsKIAkJCQlzLT5pcnIgfD0gbWFzazsKKwkJCX0KIAkJCXMtPmxhc3RfaXJyIHw9IG1hc2s7CiAJCX0gZWxzZQogCQkJcy0+bGFzdF9pcnIgJj0gfm1hc2s7CisKKwlyZXR1cm4gKHMtPmltciAmIG1hc2spID8gLTEgOiByZXQ7CiB9CiAKIC8qCkBAIC0xNzEsMTYgKzE3OSwxOSBAQAogCXBpY191bmxvY2socyk7CiB9CiAKLXZvaWQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQoraW50IGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCkKIHsKIAlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IG9wYXF1ZTsKKwlpbnQgcmV0ID0gLTE7CiAKIAlwaWNfbG9jayhzKTsKIAlpZiAoaXJxID49IDAgJiYgaXJxIDwgUElDX05VTV9QSU5TKSB7Ci0JCXBpY19zZXRfaXJxMSgmcy0+cGljc1tpcnEgPj4gM10sIGlycSAmIDcsIGxldmVsKTsKKwkJcmV0ID0gcGljX3NldF9pcnExKCZzLT5waWNzW2lycSA+PiAzXSwgaXJxICYgNywgbGV2ZWwpOwogCQlwaWNfdXBkYXRlX2lycShzKTsKIAl9CiAJcGljX3VubG9jayhzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0yMzIsNyArMjQzLDcgQEAKIAl9CiAJcGljX3VwZGF0ZV9pcnEocyk7CiAJcGljX3VubG9jayhzKTsKLQlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIGlycSk7CisJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBTRUxFQ1RfUElDKGlycSksIGlycSk7CiAKIAlyZXR1cm4gaW50bm87CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggODI1NzllZS4uOWY1OTMxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgImxhcGljLmgiCiAKICNkZWZpbmUgUElDX05VTV9QSU5TIDE2CisjZGVmaW5lIFNFTEVDVF9QSUMoaXJxKSBcCisJKChpcnEpIDwgOCA/IEtWTV9JUlFDSElQX1BJQ19NQVNURVIgOiBLVk1fSVJRQ0hJUF9QSUNfU0xBVkUpCiAKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oIGIvYXJjaC94ODYva3ZtL2t2bV9zdm0uaAppbmRleCA4ZTVlZTk5Li5lZDY2ZTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCisrKyBiL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKQEAgLTE4LDcgKzE4LDYgQEAKIH07CiAKICNkZWZpbmUgTlJfSE9TVF9TQVZFX1VTRVJfTVNSUyBBUlJBWV9TSVpFKGhvc3Rfc2F2ZV91c2VyX21zcnMpCi0jZGVmaW5lIE5VTV9EQl9SRUdTIDQKIAogc3RydWN0IGt2bV92Y3B1OwogCkBAIC0yOSwxOCArMjgsMjMgQEAKIAlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YTsKIAl1aW50NjRfdCBhc2lkX2dlbmVyYXRpb247CiAKLQl1bnNpZ25lZCBsb25nIGRiX3JlZ3NbTlVNX0RCX1JFR1NdOwotCiAJdTY0IG5leHRfcmlwOwogCiAJdTY0IGhvc3RfdXNlcl9tc3JzW05SX0hPU1RfU0FWRV9VU0VSX01TUlNdOwogCXU2NCBob3N0X2dzX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBob3N0X2NyMjsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZGJfcmVnc1tOVU1fREJfUkVHU107Ci0JdW5zaWduZWQgbG9uZyBob3N0X2RyNjsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZHI3OwogCiAJdTMyICptc3JwbTsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmU7CisJdTY0IGhzYXZlX21zcjsKKworCXU2NCBuZXN0ZWRfdm1jYjsKKworCS8qIFRoZXNlIGFyZSB0aGUgbWVyZ2VkIHZlY3RvcnMgKi8KKwl1MzIgKm5lc3RlZF9tc3JwbTsKKworCS8qIGdwYSBwb2ludGVycyB0byB0aGUgcmVhbCB2ZWN0b3JzICovCisJdTY0IG5lc3RlZF92bWNiX21zcnBtOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggMmQ0NDc3Yy4uMmEzNmY3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtMTQ1LDExICsxNDUsMjAgQEAKIAlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqbW9yZTsKIH07CiAKLXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgewotCWludCAoKmVudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICp3YWxrLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCSAgICAgdTY0IGFkZHIsIHU2NCAqc3B0ZSwgaW50IGxldmVsKTsKK3N0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgeworCXU2NCBhZGRyOworCWhwYV90IHNoYWRvd19hZGRyOworCWludCBsZXZlbDsKKwl1NjQgKnNwdGVwOworCXVuc2lnbmVkIGluZGV4OwogfTsKIAorI2RlZmluZSBmb3JfZWFjaF9zaGFkb3dfZW50cnkoX3ZjcHUsIF9hZGRyLCBfd2Fsa2VyKSAgICBcCisJZm9yIChzaGFkb3dfd2Fsa19pbml0KCYoX3dhbGtlciksIF92Y3B1LCBfYWRkcik7CVwKKwkgICAgIHNoYWRvd193YWxrX29rYXkoJihfd2Fsa2VyKSk7CQkJXAorCSAgICAgc2hhZG93X3dhbGtfbmV4dCgmKF93YWxrZXIpKSkKKworCiBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrIHsKIAlpbnQgKCplbnRyeSkgKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrKTsKIH07CkBAIC0zNDMsNyArMzUyLDYgQEAKIAogCUJVR19PTighbWMtPm5vYmpzKTsKIAlwID0gbWMtPm9iamVjdHNbLS1tYy0+bm9ianNdOwotCW1lbXNldChwLCAwLCBzaXplKTsKIAlyZXR1cm4gcDsKIH0KIApAQCAtNzk0LDEwICs4MDIsOCBAQAogCXNldF9wYWdlX3ByaXZhdGUodmlydF90b19wYWdlKHNwLT5zcHQpLCAodW5zaWduZWQgbG9uZylzcCk7CiAJbGlzdF9hZGQoJnNwLT5saW5rLCAmdmNwdS0+a3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpOwogCUlOSVRfTElTVF9IRUFEKCZzcC0+b29zX2xpbmspOwotCUFTU0VSVChpc19lbXB0eV9zaGFkb3dfcGFnZShzcC0+c3B0KSk7CiAJYml0bWFwX3plcm8oc3AtPnNsb3RfYml0bWFwLCBLVk1fTUVNT1JZX1NMT1RTICsgS1ZNX1BSSVZBVEVfTUVNX1NMT1RTKTsKIAlzcC0+bXVsdGltYXBwZWQgPSAwOwotCXNwLT5nbG9iYWwgPSAxOwogCXNwLT5wYXJlbnRfcHRlID0gcGFyZW50X3B0ZTsKIAktLXZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzOwogCXJldHVybiBzcDsKQEAgLTk4Myw4ICs5ODksOCBAQAogCSAgICAgaWR4IDwgNTEyOwkJCQkJXAogCSAgICAgaWR4ID0gZmluZF9uZXh0X2JpdChiaXRtYXAsIDUxMiwgaWR4KzEpKQogCi1pbnQgbW11X3BhZ2VzX2FkZChzdHJ1Y3Qga3ZtX21tdV9wYWdlcyAqcHZlYywgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCi0JCSAgIGludCBpZHgpCitzdGF0aWMgaW50IG1tdV9wYWdlc19hZGQoc3RydWN0IGt2bV9tbXVfcGFnZXMgKnB2ZWMsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAorCQkJIGludCBpZHgpCiB7CiAJaW50IGk7CiAKQEAgLTEwNTksNyArMTA2NSw3IEBACiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAma3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCBub2RlLCBidWNrZXQsIGhhc2hfbGluaykKLQkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5tZXRhcGh5c2ljYWwKKwkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5kaXJlY3QKIAkJICAgICYmICFzcC0+cm9sZS5pbnZhbGlkKSB7CiAJCQlwZ3ByaW50aygiJXM6IGZvdW5kIHJvbGUgJXhcbiIsCiAJCQkJIF9fZnVuY19fLCBzcC0+cm9sZS53b3JkKTsKQEAgLTExMTUsOCArMTEyMSw5IEBACiAJCQlpIDwgcHZlYy5uciAmJiAoeyBzcCA9IHB2ZWMucGFnZVtpXS5zcDsgMTt9KTsJXAogCQkJaSA9IG1tdV9wYWdlc19uZXh0KCZwdmVjLCAmcGFyZW50cywgaSkpCiAKLWludCBtbXVfcGFnZXNfbmV4dChzdHJ1Y3Qga3ZtX21tdV9wYWdlcyAqcHZlYywgc3RydWN0IG1tdV9wYWdlX3BhdGggKnBhcmVudHMsCi0JCSAgIGludCBpKQorc3RhdGljIGludCBtbXVfcGFnZXNfbmV4dChzdHJ1Y3Qga3ZtX21tdV9wYWdlcyAqcHZlYywKKwkJCSAgc3RydWN0IG1tdV9wYWdlX3BhdGggKnBhcmVudHMsCisJCQkgIGludCBpKQogewogCWludCBuOwogCkBAIC0xMTM1LDcgKzExNDIsNyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIG1tdV9wYWdlc19jbGVhcl9wYXJlbnRzKHN0cnVjdCBtbXVfcGFnZV9wYXRoICpwYXJlbnRzKQorc3RhdGljIHZvaWQgbW11X3BhZ2VzX2NsZWFyX3BhcmVudHMoc3RydWN0IG1tdV9wYWdlX3BhdGggKnBhcmVudHMpCiB7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJdW5zaWduZWQgaW50IGxldmVsID0gMDsKQEAgLTExOTMsNyArMTIwMCw3IEBACiAJCQkJCSAgICAgZ2ZuX3QgZ2ZuLAogCQkJCQkgICAgIGd2YV90IGdhZGRyLAogCQkJCQkgICAgIHVuc2lnbmVkIGxldmVsLAotCQkJCQkgICAgIGludCBtZXRhcGh5c2ljYWwsCisJCQkJCSAgICAgaW50IGRpcmVjdCwKIAkJCQkJICAgICB1bnNpZ25lZCBhY2Nlc3MsCiAJCQkJCSAgICAgdTY0ICpwYXJlbnRfcHRlKQogewpAQCAtMTIwNCwxMCArMTIxMSw5IEBACiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CiAKLQlyb2xlLndvcmQgPSAwOwotCXJvbGUuZ2xldmVscyA9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWw7CisJcm9sZSA9IHZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZTsKIAlyb2xlLmxldmVsID0gbGV2ZWw7Ci0Jcm9sZS5tZXRhcGh5c2ljYWwgPSBtZXRhcGh5c2ljYWw7CisJcm9sZS5kaXJlY3QgPSBkaXJlY3Q7CiAJcm9sZS5hY2Nlc3MgPSBhY2Nlc3M7CiAJaWYgKHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwgPD0gUFQzMl9ST09UX0xFVkVMKSB7CiAJCXF1YWRyYW50ID0gZ2FkZHIgPj4gKFBBR0VfU0hJRlQgKyAoUFQ2NF9QVF9CSVRTICogbGV2ZWwpKTsKQEAgLTEyNDIsOCArMTI0OCw5IEBACiAJcGdwcmludGsoIiVzOiBhZGRpbmcgZ2ZuICVseCByb2xlICV4XG4iLCBfX2Z1bmNfXywgZ2ZuLCByb2xlLndvcmQpOwogCXNwLT5nZm4gPSBnZm47CiAJc3AtPnJvbGUgPSByb2xlOworCXNwLT5nbG9iYWwgPSByb2xlLmNyNF9wZ2U7CiAJaGxpc3RfYWRkX2hlYWQoJnNwLT5oYXNoX2xpbmssIGJ1Y2tldCk7Ci0JaWYgKCFtZXRhcGh5c2ljYWwpIHsKKwlpZiAoIWRpcmVjdCkgewogCQlpZiAocm1hcF93cml0ZV9wcm90ZWN0KHZjcHUtPmt2bSwgZ2ZuKSkKIAkJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogCQlhY2NvdW50X3NoYWRvd2VkKHZjcHUtPmt2bSwgZ2ZuKTsKQEAgLTEyNTUsMzUgKzEyNjIsMzUgQEAKIAlyZXR1cm4gc3A7CiB9CiAKLXN0YXRpYyBpbnQgd2Fsa19zaGFkb3coc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqd2Fsa2VyLAotCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkcikKK3N0YXRpYyB2b2lkIHNoYWRvd193YWxrX2luaXQoc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciAqaXRlcmF0b3IsCisJCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIpCiB7Ci0JaHBhX3Qgc2hhZG93X2FkZHI7Ci0JaW50IGxldmVsOwotCWludCByOwotCXU2NCAqc3B0ZXA7Ci0JdW5zaWduZWQgaW5kZXg7Ci0KLQlzaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOwotCWxldmVsID0gdmNwdS0+YXJjaC5tbXUuc2hhZG93X3Jvb3RfbGV2ZWw7Ci0JaWYgKGxldmVsID09IFBUMzJFX1JPT1RfTEVWRUwpIHsKLQkJc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFsoYWRkciA+PiAzMCkgJiAzXTsKLQkJc2hhZG93X2FkZHIgJj0gUFQ2NF9CQVNFX0FERFJfTUFTSzsKLQkJaWYgKCFzaGFkb3dfYWRkcikKLQkJCXJldHVybiAxOwotCQktLWxldmVsOworCWl0ZXJhdG9yLT5hZGRyID0gYWRkcjsKKwlpdGVyYXRvci0+c2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKKwlpdGVyYXRvci0+bGV2ZWwgPSB2Y3B1LT5hcmNoLm1tdS5zaGFkb3dfcm9vdF9sZXZlbDsKKwlpZiAoaXRlcmF0b3ItPmxldmVsID09IFBUMzJFX1JPT1RfTEVWRUwpIHsKKwkJaXRlcmF0b3ItPnNoYWRvd19hZGRyCisJCQk9IHZjcHUtPmFyY2gubW11LnBhZV9yb290WyhhZGRyID4+IDMwKSAmIDNdOworCQlpdGVyYXRvci0+c2hhZG93X2FkZHIgJj0gUFQ2NF9CQVNFX0FERFJfTUFTSzsKKwkJLS1pdGVyYXRvci0+bGV2ZWw7CisJCWlmICghaXRlcmF0b3ItPnNoYWRvd19hZGRyKQorCQkJaXRlcmF0b3ItPmxldmVsID0gMDsKIAl9Cit9CiAKLQl3aGlsZSAobGV2ZWwgPj0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgewotCQlpbmRleCA9IFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCk7Ci0JCXNwdGVwID0gKCh1NjQgKilfX3ZhKHNoYWRvd19hZGRyKSkgKyBpbmRleDsKLQkJciA9IHdhbGtlci0+ZW50cnkod2Fsa2VyLCB2Y3B1LCBhZGRyLCBzcHRlcCwgbGV2ZWwpOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCQlzaGFkb3dfYWRkciA9ICpzcHRlcCAmIFBUNjRfQkFTRV9BRERSX01BU0s7Ci0JCS0tbGV2ZWw7Ci0JfQotCXJldHVybiAwOworc3RhdGljIGJvb2wgc2hhZG93X3dhbGtfb2theShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yICppdGVyYXRvcikKK3sKKwlpZiAoaXRlcmF0b3ItPmxldmVsIDwgUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJcmV0dXJuIGZhbHNlOworCWl0ZXJhdG9yLT5pbmRleCA9IFNIQURPV19QVF9JTkRFWChpdGVyYXRvci0+YWRkciwgaXRlcmF0b3ItPmxldmVsKTsKKwlpdGVyYXRvci0+c3B0ZXAJPSAoKHU2NCAqKV9fdmEoaXRlcmF0b3ItPnNoYWRvd19hZGRyKSkgKyBpdGVyYXRvci0+aW5kZXg7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNoYWRvd193YWxrX25leHQoc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciAqaXRlcmF0b3IpCit7CisJaXRlcmF0b3ItPnNoYWRvd19hZGRyID0gKml0ZXJhdG9yLT5zcHRlcCAmIFBUNjRfQkFTRV9BRERSX01BU0s7CisJLS1pdGVyYXRvci0+bGV2ZWw7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oc3RydWN0IGt2bSAqa3ZtLApAQCAtMTM4OCw3ICsxMzk1LDcgQEAKIAlrdm1fbW11X3BhZ2VfdW5saW5rX2NoaWxkcmVuKGt2bSwgc3ApOwogCWt2bV9tbXVfdW5saW5rX3BhcmVudHMoa3ZtLCBzcCk7CiAJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7Ci0JaWYgKCFzcC0+cm9sZS5pbnZhbGlkICYmICFzcC0+cm9sZS5tZXRhcGh5c2ljYWwpCisJaWYgKCFzcC0+cm9sZS5pbnZhbGlkICYmICFzcC0+cm9sZS5kaXJlY3QpCiAJCXVuYWNjb3VudF9zaGFkb3dlZChrdm0sIHNwLT5nZm4pOwogCWlmIChzcC0+dW5zeW5jKQogCQlrdm1fdW5saW5rX3Vuc3luY19wYWdlKGt2bSwgc3ApOwpAQCAtMTQ1MSw3ICsxNDU4LDcgQEAKIAlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwogCWJ1Y2tldCA9ICZrdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspCi0JCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUubWV0YXBoeXNpY2FsKSB7CisJCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUuZGlyZWN0KSB7CiAJCQlwZ3ByaW50aygiJXM6IGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwKIAkJCQkgc3AtPnJvbGUud29yZCk7CiAJCQlyID0gMTsKQEAgLTE0NjMsMTEgKzE0NzAsMjAgQEAKIAogc3RhdGljIHZvaWQgbW11X3Vuc2hhZG93KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogeworCXVuc2lnbmVkIGluZGV4OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpubjsKIAotCXdoaWxlICgoc3AgPSBrdm1fbW11X2xvb2t1cF9wYWdlKGt2bSwgZ2ZuKSkgIT0gTlVMTCkgewotCQlwZ3ByaW50aygiJXM6IHphcCAlbHggJXhcbiIsIF9fZnVuY19fLCBnZm4sIHNwLT5yb2xlLndvcmQpOwotCQlrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApOworCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CisJYnVja2V0ID0gJmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCBubiwgYnVja2V0LCBoYXNoX2xpbmspIHsKKwkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5kaXJlY3QKKwkJICAgICYmICFzcC0+cm9sZS5pbnZhbGlkKSB7CisJCQlwZ3ByaW50aygiJXM6IHphcCAlbHggJXhcbiIsCisJCQkJIF9fZnVuY19fLCBnZm4sIHNwLT5yb2xlLndvcmQpOworCQkJa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKTsKKwkJfQogCX0KIH0KIApAQCAtMTYyMiw3ICsxNjM4LDcgQEAKIAlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwogCS8qIGRvbid0IHVuc3luYyBpZiBwYWdldGFibGUgaXMgc2hhZG93ZWQgd2l0aCBtdWx0aXBsZSByb2xlcyAqLwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspIHsKLQkJaWYgKHMtPmdmbiAhPSBzcC0+Z2ZuIHx8IHMtPnJvbGUubWV0YXBoeXNpY2FsKQorCQlpZiAocy0+Z2ZuICE9IHNwLT5nZm4gfHwgcy0+cm9sZS5kaXJlY3QpCiAJCQljb250aW51ZTsKIAkJaWYgKHMtPnJvbGUud29yZCAhPSBzcC0+cm9sZS53b3JkKQogCQkJcmV0dXJuIDE7CkBAIC0xNjY5LDggKzE2ODUsNiBAQAogCXU2NCBtdF9tYXNrID0gc2hhZG93X210X21hc2s7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNoYWRvd19wdGUpKTsKIAotCWlmICghKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9QR0UpKQotCQlnbG9iYWwgPSAwOwogCWlmICghZ2xvYmFsICYmIHNwLT5nbG9iYWwpIHsKIAkJc3AtPmdsb2JhbCA9IDA7CiAJCWlmIChzcC0+dW5zeW5jKSB7CkBAIC0xNzc3LDEyICsxNzkxLDggQEAKIAkJCXBncHJpbnRrKCJoZm4gb2xkICVseCBuZXcgJWx4XG4iLAogCQkJCSBzcHRlX3RvX3Bmbigqc2hhZG93X3B0ZSksIHBmbik7CiAJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNoYWRvd19wdGUpOwotCQl9IGVsc2UgewotCQkJaWYgKGxhcmdlcGFnZSkKLQkJCQl3YXNfcm1hcHBlZCA9IGlzX2xhcmdlX3B0ZSgqc2hhZG93X3B0ZSk7Ci0JCQllbHNlCi0JCQkJd2FzX3JtYXBwZWQgPSAxOwotCQl9CisJCX0gZWxzZQorCQkJd2FzX3JtYXBwZWQgPSAxOwogCX0KIAlpZiAoc2V0X3NwdGUodmNwdSwgc2hhZG93X3B0ZSwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCiAJCSAgICAgIGRpcnR5LCBsYXJnZXBhZ2UsIGdsb2JhbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlKSkgewpAQCAtMTgyMCw2NyArMTgzMCw0MiBAQAogewogfQogCi1zdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHsKLQlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHdhbGtlcjsKLQlwZm5fdCBwZm47Ci0JaW50IHdyaXRlOwotCWludCBsYXJnZXBhZ2U7Ci0JaW50IHB0X3dyaXRlOwotfTsKLQotc3RhdGljIGludCBkaXJlY3RfbWFwX2VudHJ5KHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl93YWxrLAotCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgICB1NjQgYWRkciwgdTY0ICpzcHRlcCwgaW50IGxldmVsKQotewotCXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgKndhbGsgPQotCQljb250YWluZXJfb2YoX3dhbGssIHN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGssIHdhbGtlcik7Ci0Jc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7Ci0JZ2ZuX3QgcHNldWRvX2dmbjsKLQlnZm5fdCBnZm4gPSBhZGRyID4+IFBBR0VfU0hJRlQ7Ci0KLQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAotCSAgICB8fCAod2Fsay0+bGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKLQkJbW11X3NldF9zcHRlKHZjcHUsIHNwdGVwLCBBQ0NfQUxMLCBBQ0NfQUxMLAotCQkJICAgICAwLCB3YWxrLT53cml0ZSwgMSwgJndhbGstPnB0X3dyaXRlLAotCQkJICAgICB3YWxrLT5sYXJnZXBhZ2UsIDAsIGdmbiwgd2Fsay0+cGZuLCBmYWxzZSk7Ci0JCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKCpzcHRlcCA9PSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSkgewotCQlwc2V1ZG9fZ2ZuID0gKGFkZHIgJiBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKLQkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sIChndmFfdClhZGRyLCBsZXZlbCAtIDEsCi0JCQkJICAgICAgMSwgQUNDX0FMTCwgc3B0ZXApOwotCQlpZiAoIXNwKSB7Ci0JCQlwZ3ByaW50aygibm9ucGFnaW5nX21hcDogRU5PTUVNXG4iKTsKLQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbih3YWxrLT5wZm4pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwKLQkJCSAgICAgICBfX3BhKHNwLT5zcHQpCi0JCQkgICAgICAgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9XUklUQUJMRV9NQVNLCi0JCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9fZGlyZWN0X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHYsIGludCB3cml0ZSwKIAkJCWludCBsYXJnZXBhZ2UsIGdmbl90IGdmbiwgcGZuX3QgcGZuKQogewotCWludCByOwotCXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgd2Fsa2VyID0gewotCQkud2Fsa2VyID0geyAuZW50cnkgPSBkaXJlY3RfbWFwX2VudHJ5LCB9LAotCQkucGZuID0gcGZuLAotCQkubGFyZ2VwYWdlID0gbGFyZ2VwYWdlLAotCQkud3JpdGUgPSB3cml0ZSwKLQkJLnB0X3dyaXRlID0gMCwKLQl9OworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgaXRlcmF0b3I7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisJaW50IHB0X3dyaXRlID0gMDsKKwlnZm5fdCBwc2V1ZG9fZ2ZuOwogCi0JciA9IHdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBnZm4gPDwgUEFHRV9TSElGVCk7Ci0JaWYgKHIgPCAwKQotCQlyZXR1cm4gcjsKLQlyZXR1cm4gd2Fsa2VyLnB0X3dyaXRlOworCWZvcl9lYWNoX3NoYWRvd19lbnRyeSh2Y3B1LCAodTY0KWdmbiA8PCBQQUdFX1NISUZULCBpdGVyYXRvcikgeworCQlpZiAoaXRlcmF0b3IubGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAorCQkgICAgfHwgKGxhcmdlcGFnZSAmJiBpdGVyYXRvci5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCisJCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLAorCQkJCSAgICAgbGFyZ2VwYWdlLCAwLCBnZm4sIHBmbiwgZmFsc2UpOworCQkJKyt2Y3B1LT5zdGF0LnBmX2ZpeGVkOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKml0ZXJhdG9yLnNwdGVwID09IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKSB7CisJCQlwc2V1ZG9fZ2ZuID0gKGl0ZXJhdG9yLmFkZHIgJiBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKKwkJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCBwc2V1ZG9fZ2ZuLCBpdGVyYXRvci5hZGRyLAorCQkJCQkgICAgICBpdGVyYXRvci5sZXZlbCAtIDEsCisJCQkJCSAgICAgIDEsIEFDQ19BTEwsIGl0ZXJhdG9yLnNwdGVwKTsKKwkJCWlmICghc3ApIHsKKwkJCQlwZ3ByaW50aygibm9ucGFnaW5nX21hcDogRU5PTUVNXG4iKTsKKwkJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKworCQkJc2V0X3NoYWRvd19wdGUoaXRlcmF0b3Iuc3B0ZXAsCisJCQkJICAgICAgIF9fcGEoc3AtPnNwdCkKKwkJCQkgICAgICAgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9XUklUQUJMRV9NQVNLCisJCQkJICAgICAgIHwgc2hhZG93X3VzZXJfbWFzayB8IHNoYWRvd194X21hc2spOworCQl9CisJfQorCXJldHVybiBwdF93cml0ZTsKIH0KIAogc3RhdGljIGludCBub25wYWdpbmdfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdiwgaW50IHdyaXRlLCBnZm5fdCBnZm4pCkBAIC0xOTYyLDcgKzE5NDcsNyBAQAogCWludCBpOwogCWdmbl90IHJvb3RfZ2ZuOwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwotCWludCBtZXRhcGh5c2ljYWwgPSAwOworCWludCBkaXJlY3QgPSAwOwogCiAJcm9vdF9nZm4gPSB2Y3B1LT5hcmNoLmNyMyA+PiBQQUdFX1NISUZUOwogCkBAIC0xOTcxLDE4ICsxOTU2LDE4IEBACiAKIAkJQVNTRVJUKCFWQUxJRF9QQUdFKHJvb3QpKTsKIAkJaWYgKHRkcF9lbmFibGVkKQotCQkJbWV0YXBoeXNpY2FsID0gMTsKKwkJCWRpcmVjdCA9IDE7CiAJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCByb290X2dmbiwgMCwKLQkJCQkgICAgICBQVDY0X1JPT1RfTEVWRUwsIG1ldGFwaHlzaWNhbCwKKwkJCQkgICAgICBQVDY0X1JPT1RfTEVWRUwsIGRpcmVjdCwKIAkJCQkgICAgICBBQ0NfQUxMLCBOVUxMKTsKIAkJcm9vdCA9IF9fcGEoc3AtPnNwdCk7CiAJCSsrc3AtPnJvb3RfY291bnQ7CiAJCXZjcHUtPmFyY2gubW11LnJvb3RfaHBhID0gcm9vdDsKIAkJcmV0dXJuOwogCX0KLQltZXRhcGh5c2ljYWwgPSAhaXNfcGFnaW5nKHZjcHUpOworCWRpcmVjdCA9ICFpc19wYWdpbmcodmNwdSk7CiAJaWYgKHRkcF9lbmFibGVkKQotCQltZXRhcGh5c2ljYWwgPSAxOworCQlkaXJlY3QgPSAxOwogCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKIAkJaHBhX3Qgcm9vdCA9IHZjcHUtPmFyY2gubW11LnBhZV9yb290W2ldOwogCkBAIC0xOTk2LDcgKzE5ODEsNyBAQAogCQl9IGVsc2UgaWYgKHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwgPT0gMCkKIAkJCXJvb3RfZ2ZuID0gMDsKIAkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHJvb3RfZ2ZuLCBpIDw8IDMwLAotCQkJCSAgICAgIFBUMzJfUk9PVF9MRVZFTCwgbWV0YXBoeXNpY2FsLAorCQkJCSAgICAgIFBUMzJfUk9PVF9MRVZFTCwgZGlyZWN0LAogCQkJCSAgICAgIEFDQ19BTEwsIE5VTEwpOwogCQlyb290ID0gX19wYShzcC0+c3B0KTsKIAkJKytzcC0+cm9vdF9jb3VudDsKQEAgLTIyNTEsMTcgKzIyMzYsMjMgQEAKIAogc3RhdGljIGludCBpbml0X2t2bV9zb2Z0bW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlpbnQgcjsKKwogCUFTU0VSVCh2Y3B1KTsKIAlBU1NFUlQoIVZBTElEX1BBR0UodmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpKTsKIAogCWlmICghaXNfcGFnaW5nKHZjcHUpKQotCQlyZXR1cm4gbm9ucGFnaW5nX2luaXRfY29udGV4dCh2Y3B1KTsKKwkJciA9IG5vbnBhZ2luZ19pbml0X2NvbnRleHQodmNwdSk7CiAJZWxzZSBpZiAoaXNfbG9uZ19tb2RlKHZjcHUpKQotCQlyZXR1cm4gcGFnaW5nNjRfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gcGFnaW5nNjRfaW5pdF9jb250ZXh0KHZjcHUpOwogCWVsc2UgaWYgKGlzX3BhZSh2Y3B1KSkKLQkJcmV0dXJuIHBhZ2luZzMyRV9pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBwYWdpbmczMkVfaW5pdF9jb250ZXh0KHZjcHUpOwogCWVsc2UKLQkJcmV0dXJuIHBhZ2luZzMyX2luaXRfY29udGV4dCh2Y3B1KTsKKwkJciA9IHBhZ2luZzMyX2luaXRfY29udGV4dCh2Y3B1KTsKKworCXZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZS5nbGV2ZWxzID0gdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbDsKKworCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IGluaXRfa3ZtX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDkyLDcgKzI0ODMsNyBAQAogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgewotCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUubWV0YXBoeXNpY2FsIHx8IHNwLT5yb2xlLmludmFsaWQpCisJCWlmIChzcC0+Z2ZuICE9IGdmbiB8fCBzcC0+cm9sZS5kaXJlY3QgfHwgc3AtPnJvbGUuaW52YWxpZCkKIAkJCWNvbnRpbnVlOwogCQlwdGVfc2l6ZSA9IHNwLT5yb2xlLmdsZXZlbHMgPT0gUFQzMl9ST09UX0xFVkVMID8gNCA6IDg7CiAJCW1pc2FsaWduZWQgPSAob2Zmc2V0IF4gKG9mZnNldCArIGJ5dGVzIC0gMSkpICYgfihwdGVfc2l6ZSAtIDEpOwpAQCAtMzEzMCw3ICszMTIxLDcgQEAKIAlnZm5fdCBnZm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCAmdmNwdS0+a3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMsIGxpbmspIHsKLQkJaWYgKHNwLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwkJaWYgKHNwLT5yb2xlLmRpcmVjdCkKIAkJCWNvbnRpbnVlOwogCiAJCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgc3AtPmdmbik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmgKaW5kZXggMjU4ZTVkNS4uZWFhYjIxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuaApAQCAtNTQsNyArNTQsNyBAQAogc3RhdGljIGlubGluZSBpbnQgaXNfbG9uZ19tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmV0dXJuIHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX0xNRTsKKwlyZXR1cm4gdmNwdS0+YXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfTE1BOwogI2Vsc2UKIAlyZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmggYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAppbmRleCA5ZmQ3OGI2Li42YmQ3MDIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAorKysgYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmIFBUVFlQRSA9PSA2NAogCSNkZWZpbmUgcHRfZWxlbWVudF90IHU2NAogCSNkZWZpbmUgZ3Vlc3Rfd2Fsa2VyIGd1ZXN0X3dhbGtlcjY0Ci0JI2RlZmluZSBzaGFkb3dfd2Fsa2VyIHNoYWRvd193YWxrZXI2NAogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyM2NF8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUNjRfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSwpAQCAtNDIsNyArNDEsNiBAQAogI2VsaWYgUFRUWVBFID09IDMyCiAJI2RlZmluZSBwdF9lbGVtZW50X3QgdTMyCiAJI2RlZmluZSBndWVzdF93YWxrZXIgZ3Vlc3Rfd2Fsa2VyMzIKLQkjZGVmaW5lIHNoYWRvd193YWxrZXIgc2hhZG93X3dhbGtlcjMyCiAJI2RlZmluZSBGTkFNRShuYW1lKSBwYWdpbmcjIzMyXyMjbmFtZQogCSNkZWZpbmUgUFRfQkFTRV9BRERSX01BU0sgUFQzMl9CQVNFX0FERFJfTUFTSwogCSNkZWZpbmUgUFRfRElSX0JBU0VfQUREUl9NQVNLIFBUMzJfRElSX0JBU0VfQUREUl9NQVNLCkBAIC03MywxOCArNzEsNiBAQAogCXUzMiBlcnJvcl9jb2RlOwogfTsKIAotc3RydWN0IHNoYWRvd193YWxrZXIgewotCXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgd2Fsa2VyOwotCXN0cnVjdCBndWVzdF93YWxrZXIgKmd1ZXN0X3dhbGtlcjsKLQlpbnQgdXNlcl9mYXVsdDsKLQlpbnQgd3JpdGVfZmF1bHQ7Ci0JaW50IGxhcmdlcGFnZTsKLQlpbnQgKnB0d3JpdGU7Ci0JcGZuX3QgcGZuOwotCXU2NCAqc3B0ZXA7Ci0JZ3BhX3QgcHRlX2dwYTsKLX07Ci0KIHN0YXRpYyBnZm5fdCBncHRlX3RvX2dmbihwdF9lbGVtZW50X3QgZ3B0ZSkKIHsKIAlyZXR1cm4gKGdwdGUgJiBQVF9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKQEAgLTI4Myw5MSArMjY5LDc5IEBACiAvKgogICogRmV0Y2ggYSBzaGFkb3cgcHRlIGZvciBhIHNwZWNpZmljIGxldmVsIGluIHRoZSBwYWdpbmcgaGllcmFyY2h5LgogICovCi1zdGF0aWMgaW50IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfc3csCi0JCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCi0JCQkJICAgIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3Qgc2hhZG93X3dhbGtlciAqc3cgPQotCQljb250YWluZXJfb2YoX3N3LCBzdHJ1Y3Qgc2hhZG93X3dhbGtlciwgd2Fsa2VyKTsKLQlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndyA9IHN3LT5ndWVzdF93YWxrZXI7Ci0JdW5zaWduZWQgYWNjZXNzID0gZ3ctPnB0X2FjY2VzczsKLQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKLQl1NjQgc3B0ZTsKLQlpbnQgbWV0YXBoeXNpY2FsOwotCWdmbl90IHRhYmxlX2dmbjsKLQlpbnQgcjsKLQlwdF9lbGVtZW50X3QgY3Vycl9wdGU7Ci0KLQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAotCSAgICB8fCAoc3ctPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7Ci0JCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgYWNjZXNzLCBndy0+cHRlX2FjY2VzcyAmIGFjY2VzcywKLQkJCSAgICAgc3ctPnVzZXJfZmF1bHQsIHN3LT53cml0ZV9mYXVsdCwKLQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfRElSVFlfTUFTSywKLQkJCSAgICAgc3ctPnB0d3JpdGUsIHN3LT5sYXJnZXBhZ2UsCi0JCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0dMT0JBTF9NQVNLLAotCQkJICAgICBndy0+Z2ZuLCBzdy0+cGZuLCBmYWxzZSk7Ci0JCXN3LT5zcHRlcCA9IHNwdGVwOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkgJiYgIWlzX2xhcmdlX3B0ZSgqc3B0ZXApKQotCQlyZXR1cm4gMDsKLQotCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkgewotCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwotCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKLQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7Ci0JfQotCi0JaWYgKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCAmJiBndy0+bGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7Ci0JCW1ldGFwaHlzaWNhbCA9IDE7Ci0JCWlmICghaXNfZGlydHlfcHRlKGd3LT5wdGVzW2xldmVsIC0gMV0pKQotCQkJYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4oZ3ctPnB0ZXNbbGV2ZWwgLSAxXSk7Ci0JfSBlbHNlIHsKLQkJbWV0YXBoeXNpY2FsID0gMDsKLQkJdGFibGVfZ2ZuID0gZ3ctPnRhYmxlX2dmbltsZXZlbCAtIDJdOwotCX0KLQlzaGFkb3dfcGFnZSA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgdGFibGVfZ2ZuLCAoZ3ZhX3QpYWRkciwgbGV2ZWwtMSwKLQkJCQkgICAgICAgbWV0YXBoeXNpY2FsLCBhY2Nlc3MsIHNwdGVwKTsKLQlpZiAoIW1ldGFwaHlzaWNhbCkgewotCQlyID0ga3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgZ3ctPnB0ZV9ncGFbbGV2ZWwgLSAyXSwKLQkJCQkJICAmY3Vycl9wdGUsIHNpemVvZihjdXJyX3B0ZSkpOwotCQlpZiAociB8fCBjdXJyX3B0ZSAhPSBndy0+cHRlc1tsZXZlbCAtIDJdKSB7Ci0JCQlrdm1fbW11X3B1dF9wYWdlKHNoYWRvd19wYWdlLCBzcHRlcCk7Ci0JCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4oc3ctPnBmbik7Ci0JCQlzdy0+c3B0ZXAgPSBOVUxMOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlzcHRlID0gX19wYShzaGFkb3dfcGFnZS0+c3B0KSB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX0FDQ0VTU0VEX01BU0sKLQkJfCBQVF9XUklUQUJMRV9NQVNLIHwgUFRfVVNFUl9NQVNLOwotCSpzcHRlcCA9IHNwdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1NjQgKkZOQU1FKGZldGNoKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGFkZHIsCi0JCQkgc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3Vlc3Rfd2Fsa2VyLAorCQkJIHN0cnVjdCBndWVzdF93YWxrZXIgKmd3LAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBsYXJnZXBhZ2UsCiAJCQkgaW50ICpwdHdyaXRlLCBwZm5fdCBwZm4pCiB7Ci0Jc3RydWN0IHNoYWRvd193YWxrZXIgd2Fsa2VyID0gewotCQkud2Fsa2VyID0geyAuZW50cnkgPSBGTkFNRShzaGFkb3dfd2Fsa19lbnRyeSksIH0sCi0JCS5ndWVzdF93YWxrZXIgPSBndWVzdF93YWxrZXIsCi0JCS51c2VyX2ZhdWx0ID0gdXNlcl9mYXVsdCwKLQkJLndyaXRlX2ZhdWx0ID0gd3JpdGVfZmF1bHQsCi0JCS5sYXJnZXBhZ2UgPSBsYXJnZXBhZ2UsCi0JCS5wdHdyaXRlID0gcHR3cml0ZSwKLQkJLnBmbiA9IHBmbiwKLQl9OworCXVuc2lnbmVkIGFjY2VzcyA9IGd3LT5wdF9hY2Nlc3M7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93X3BhZ2U7CisJdTY0IHNwdGUsICpzcHRlcDsKKwlpbnQgZGlyZWN0OworCWdmbl90IHRhYmxlX2dmbjsKKwlpbnQgcjsKKwlpbnQgbGV2ZWw7CisJcHRfZWxlbWVudF90IGN1cnJfcHRlOworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgaXRlcmF0b3I7CiAKLQlpZiAoIWlzX3ByZXNlbnRfcHRlKGd1ZXN0X3dhbGtlci0+cHRlc1tndWVzdF93YWxrZXItPmxldmVsIC0gMV0pKQorCWlmICghaXNfcHJlc2VudF9wdGUoZ3ctPnB0ZXNbZ3ctPmxldmVsIC0gMV0pKQogCQlyZXR1cm4gTlVMTDsKIAotCXdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBhZGRyKTsKKwlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgYWRkciwgaXRlcmF0b3IpIHsKKwkJbGV2ZWwgPSBpdGVyYXRvci5sZXZlbDsKKwkJc3B0ZXAgPSBpdGVyYXRvci5zcHRlcDsKKwkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKKwkJICAgIHx8IChsYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgeworCQkJbW11X3NldF9zcHRlKHZjcHUsIHNwdGVwLCBhY2Nlc3MsCisJCQkJICAgICBndy0+cHRlX2FjY2VzcyAmIGFjY2VzcywKKwkJCQkgICAgIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAorCQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfRElSVFlfTUFTSywKKwkJCQkgICAgIHB0d3JpdGUsIGxhcmdlcGFnZSwKKwkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0dMT0JBTF9NQVNLLAorCQkJCSAgICAgZ3ctPmdmbiwgcGZuLCBmYWxzZSk7CisJCQlicmVhazsKKwkJfQogCi0JcmV0dXJuIHdhbGtlci5zcHRlcDsKKwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApICYmICFpc19sYXJnZV9wdGUoKnNwdGVwKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkgeworCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CisJCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CisJCX0KKworCQlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMCisJCSAgICAmJiBndy0+bGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CisJCQlkaXJlY3QgPSAxOworCQkJaWYgKCFpc19kaXJ0eV9wdGUoZ3ctPnB0ZXNbbGV2ZWwgLSAxXSkpCisJCQkJYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKKwkJCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKGd3LT5wdGVzW2xldmVsIC0gMV0pOworCQl9IGVsc2UgeworCQkJZGlyZWN0ID0gMDsKKwkJCXRhYmxlX2dmbiA9IGd3LT50YWJsZV9nZm5bbGV2ZWwgLSAyXTsKKwkJfQorCQlzaGFkb3dfcGFnZSA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgdGFibGVfZ2ZuLCBhZGRyLCBsZXZlbC0xLAorCQkJCQkgICAgICAgZGlyZWN0LCBhY2Nlc3MsIHNwdGVwKTsKKwkJaWYgKCFkaXJlY3QpIHsKKwkJCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLAorCQkJCQkJICBndy0+cHRlX2dwYVtsZXZlbCAtIDJdLAorCQkJCQkJICAmY3Vycl9wdGUsIHNpemVvZihjdXJyX3B0ZSkpOworCQkJaWYgKHIgfHwgY3Vycl9wdGUgIT0gZ3ctPnB0ZXNbbGV2ZWwgLSAyXSkgeworCQkJCWt2bV9tbXVfcHV0X3BhZ2Uoc2hhZG93X3BhZ2UsIHNwdGVwKTsKKwkJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJCQlzcHRlcCA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlzcHRlID0gX19wYShzaGFkb3dfcGFnZS0+c3B0KQorCQkJfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCisJCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7CisJCSpzcHRlcCA9IHNwdGU7CisJfQorCisJcmV0dXJuIHNwdGVwOwogfQogCiAvKgpAQCAtNDY1LDU0ICs0MzksNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBGTkFNRShzaGFkb3dfaW52bHBnX2VudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfc3csCi0JCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwKLQkJCQkgICAgICB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IHNoYWRvd193YWxrZXIgKnN3ID0KLQkJY29udGFpbmVyX29mKF9zdywgc3RydWN0IHNoYWRvd193YWxrZXIsIHdhbGtlcik7Ci0KLQkvKiBGSVhNRTogcHJvcGVybHkgaGFuZGxlIGludmxwZyBvbiBsYXJnZSBndWVzdCBwYWdlcyAqLwotCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMIHx8Ci0JICAgICgobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSAmJiBpc19sYXJnZV9wdGUoKnNwdGVwKSkpIHsKLQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGVwKSk7Ci0KLQkJc3ctPnB0ZV9ncGEgPSAoc3AtPmdmbiA8PCBQQUdFX1NISUZUKTsKLQkJc3ctPnB0ZV9ncGEgKz0gKHNwdGVwIC0gc3AtPnNwdCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKLQotCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpIHsKLQkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOwotCQkJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKQotCQkJCS0tdmNwdS0+a3ZtLT5zdGF0LmxwYWdlczsKLQkJfQotCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIEZOQU1FKGludmxwZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCiB7CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAlwdF9lbGVtZW50X3QgZ3B0ZTsKLQlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7Ci0JCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd19pbnZscGdfZW50cnkpLCB9LAotCQkucHRlX2dwYSA9IC0xLAotCX07CisJZ3BhX3QgcHRlX2dwYSA9IC0xOworCWludCBsZXZlbDsKKwl1NjQgKnNwdGVwOworCWludCBuZWVkX2ZsdXNoID0gMDsKIAogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Ci0Jd2Fsa19zaGFkb3coJndhbGtlci53YWxrZXIsIHZjcHUsIGd2YSk7CisKKwlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgZ3ZhLCBpdGVyYXRvcikgeworCQlsZXZlbCA9IGl0ZXJhdG9yLmxldmVsOworCQlzcHRlcCA9IGl0ZXJhdG9yLnNwdGVwOworCisJCS8qIEZJWE1FOiBwcm9wZXJseSBoYW5kbGUgaW52bHBnIG9uIGxhcmdlIGd1ZXN0IHBhZ2VzICovCisJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMIHx8CisJCSAgICAoKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB7CisJCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKTsKKworCQkJcHRlX2dwYSA9IChzcC0+Z2ZuIDw8IFBBR0VfU0hJRlQpOworCQkJcHRlX2dwYSArPSAoc3B0ZXAgLSBzcC0+c3B0KSAqIHNpemVvZihwdF9lbGVtZW50X3QpOworCisJCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpIHsKKwkJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKKwkJCQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCisJCQkJCS0tdmNwdS0+a3ZtLT5zdGF0LmxwYWdlczsKKwkJCQluZWVkX2ZsdXNoID0gMTsKKwkJCX0KKwkJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAobmVlZF9mbHVzaCkKKwkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwotCWlmICh3YWxrZXIucHRlX2dwYSA9PSAtMSkKKworCWlmIChwdGVfZ3BhID09IC0xKQogCQlyZXR1cm47Ci0JaWYgKGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHdhbGtlci5wdGVfZ3BhLCAmZ3B0ZSwKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgcHRlX2dwYSwgJmdwdGUsCiAJCQkJICBzaXplb2YocHRfZWxlbWVudF90KSkpCiAJCXJldHVybjsKIAlpZiAoaXNfcHJlc2VudF9wdGUoZ3B0ZSkgJiYgKGdwdGUgJiBQVF9BQ0NFU1NFRF9NQVNLKSkgewogCQlpZiAobW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSkpCiAJCQlyZXR1cm47Ci0JCWt2bV9tbXVfcHRlX3dyaXRlKHZjcHUsIHdhbGtlci5wdGVfZ3BhLCAoY29uc3QgdTggKikmZ3B0ZSwKKwkJa3ZtX21tdV9wdGVfd3JpdGUodmNwdSwgcHRlX2dwYSwgKGNvbnN0IHU4ICopJmdwdGUsCiAJCQkJICBzaXplb2YocHRfZWxlbWVudF90KSwgMCk7CiAJfQogfQpAQCAtNTQwLDcgKzUxNiw3IEBACiAJcHRfZWxlbWVudF90IHB0WzI1NiAvIHNpemVvZihwdF9lbGVtZW50X3QpXTsKIAlncGFfdCBwdGVfZ3BhOwogCi0JaWYgKHNwLT5yb2xlLm1ldGFwaHlzaWNhbAorCWlmIChzcC0+cm9sZS5kaXJlY3QKIAkgICAgfHwgKFBUVFlQRSA9PSAzMiAmJiBzcC0+cm9sZS5sZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwpKSB7CiAJCW5vbnBhZ2luZ19wcmVmZXRjaF9wYWdlKHZjcHUsIHNwKTsKIAkJcmV0dXJuOwpAQCAtNjE5LDcgKzU5NSw2IEBACiAKICN1bmRlZiBwdF9lbGVtZW50X3QKICN1bmRlZiBndWVzdF93YWxrZXIKLSN1bmRlZiBzaGFkb3dfd2Fsa2VyCiAjdW5kZWYgRk5BTUUKICN1bmRlZiBQVF9CQVNFX0FERFJfTUFTSwogI3VuZGVmIFBUX0lOREVYCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggYTllNzY5ZS4uMTgyMWMyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtMzgsOSArMzgsNiBAQAogI2RlZmluZSBJT1BNX0FMTE9DX09SREVSIDIKICNkZWZpbmUgTVNSUE1fQUxMT0NfT1JERVIgMQogCi0jZGVmaW5lIERSN19HRF9NQVNLICgxIDw8IDEzKQotI2RlZmluZSBEUjZfQkRfTUFTSyAoMSA8PCAxMykKLQogI2RlZmluZSBTRUdfVFlQRV9MRFQgMgogI2RlZmluZSBTRUdfVFlQRV9CVVNZX1RTUzE2IDMKIApAQCAtNTAsNiArNDcsMTUgQEAKIAogI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+KDB4M2ZVTEwpKQogCisvKiBUdXJuIG9uIHRvIGdldCBkZWJ1Z2dpbmcgb3V0cHV0Ki8KKy8qICNkZWZpbmUgTkVTVEVEX0RFQlVHICovCisKKyNpZmRlZiBORVNURURfREVCVUcKKyNkZWZpbmUgbnN2bV9wcmludGsoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9JTkZPIGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIG5zdm1fcHJpbnRrKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCiAvKiBlbmFibGUgTlBUIGZvciBBTUQ2NCBhbmQgWDg2IHdpdGggUEFFICovCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQogc3RhdGljIGJvb2wgbnB0X2VuYWJsZWQgPSB0cnVlOwpAQCAtNjAsMTQgKzY2LDI5IEBACiAKIG1vZHVsZV9wYXJhbShucHQsIGludCwgU19JUlVHTyk7CiAKK3N0YXRpYyBpbnQgbmVzdGVkID0gMDsKK21vZHVsZV9wYXJhbShuZXN0ZWQsIGludCwgU19JUlVHTyk7CisKIHN0YXRpYyB2b2lkIGt2bV9yZXB1dF9pcnEoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogc3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIGt2bV9vdmVycmlkZSk7CitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXNhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKm5lc3RlZF92bWNiLAorCQkJICAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpOworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdW5zaWduZWQgbnIsCisJCQkJICAgICAgYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2Y3B1X3N2bSAqdG9fc3ZtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3N2bSwgdmNwdSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJcmV0dXJuIHN2bS0+bmVzdGVkX3ZtY2I7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvcG1fYmFzZTsKIAogc3RydWN0IGt2bV9sZHR0c3NfZGVzYyB7CkBAIC0xNTcsMzIgKzE3OCw2IEBACiAJYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWNyMiIgOjogInIiICh2YWwpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZHI2KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBkcjY7Ci0KLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjYsICUwIiA6ICI9ciIgKGRyNikpOwotCXJldHVybiBkcjY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9kcjYodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWRyNiIgOjogInIiICh2YWwpKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZHI3KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBkcjc7Ci0KLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjcsICUwIiA6ICI9ciIgKGRyNykpOwotCXJldHVybiBkcjc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9kcjcodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWRyNyIgOjogInIiICh2YWwpKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGZvcmNlX25ld19hc2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl0b19zdm0odmNwdSktPmFzaWRfZ2VuZXJhdGlvbi0tOwpAQCAtMTk4LDcgKzE5Myw3IEBACiAJaWYgKCFucHRfZW5hYmxlZCAmJiAhKGVmZXIgJiBFRkVSX0xNQSkpCiAJCWVmZXIgJj0gfkVGRVJfTE1FOwogCi0JdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLmVmZXIgPSBlZmVyIHwgTVNSX0VGRVJfU1ZNRV9NQVNLOworCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5lZmVyID0gZWZlciB8IEVGRVJfU1ZNRTsKIAl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyID0gZWZlcjsKIH0KIApAQCAtMjA3LDYgKzIwMiwxMSBAQAogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCisJLyogSWYgd2UgYXJlIHdpdGhpbiBhIG5lc3RlZCBWTSB3ZSdkIGJldHRlciAjVk1FWElUIGFuZCBsZXQgdGhlCisJICAgZ3Vlc3QgaGFuZGxlIHRoZSBleGNlcHRpb24gKi8KKwlpZiAobmVzdGVkX3N2bV9jaGVja19leGNlcHRpb24oc3ZtLCBuciwgaGFzX2Vycm9yX2NvZGUsIGVycm9yX2NvZGUpKQorCQlyZXR1cm47CisKIAlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gbnIKIAkJfCBTVk1fRVZUSU5KX1ZBTElECiAJCXwgKGhhc19lcnJvcl9jb2RlID8gU1ZNX0VWVElOSl9WQUxJRF9FUlIgOiAwKQpAQCAtMjQyLDcgKzI0Miw3IEBACiAJa3ZtX3JpcF93cml0ZSh2Y3B1LCBzdm0tPm5leHRfcmlwKTsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICY9IH5TVk1fSU5URVJSVVBUX1NIQURPV19NQVNLOwogCi0JdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPSAxOworCXZjcHUtPmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0gKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0dJRl9NQVNLKTsKIH0KIAogc3RhdGljIGludCBoYXNfc3ZtKHZvaWQpCkBAIC0yNTAsNyArMjUwLDcgQEAKIAljb25zdCBjaGFyICptc2c7CiAKIAlpZiAoIWNwdV9oYXNfc3ZtKCZtc2cpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImhhc19zdm46ICVzXG4iLCBtc2cpOworCQlwcmludGsoS0VSTl9JTkZPICJoYXNfc3ZtOiAlc1xuIiwgbXNnKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yOTIsNyArMjkyLDcgQEAKIAlzdm1fZGF0YS0+dHNzX2Rlc2MgPSAoc3RydWN0IGt2bV9sZHR0c3NfZGVzYyAqKShnZHQgKyBHRFRfRU5UUllfVFNTKTsKIAogCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0Jd3Jtc3JsKE1TUl9FRkVSLCBlZmVyIHwgTVNSX0VGRVJfU1ZNRV9NQVNLKTsKKwl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgfCBFRkVSX1NWTUUpOwogCiAJd3Jtc3JsKE1TUl9WTV9IU0FWRV9QQSwKIAkgICAgICAgcGFnZV90b19wZm4oc3ZtX2RhdGEtPnNhdmVfYXJlYSkgPDwgUEFHRV9TSElGVCk7CkBAIC00MTcsNiArNDE3LDE0IEBACiAJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OWCkpCiAJCWt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfTlgpOwogCisJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9GWFNSX09QVCkpCisJCWt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfRkZYU1IpOworCisJaWYgKG5lc3RlZCkgeworCQlwcmludGsoS0VSTl9JTkZPICJrdm06IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBlbmFibGVkXG4iKTsKKwkJa3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9TVk1FKTsKKwl9CisKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlyID0gc3ZtX2NwdV9pbml0KGNwdSk7CiAJCWlmIChyKQpAQCAtNTU5LDcgKzU2Nyw3IEBACiAJaW5pdF9zeXNfc2VnKCZzYXZlLT5sZHRyLCBTRUdfVFlQRV9MRFQpOwogCWluaXRfc3lzX3NlZygmc2F2ZS0+dHIsIFNFR19UWVBFX0JVU1lfVFNTMTYpOwogCi0Jc2F2ZS0+ZWZlciA9IE1TUl9FRkVSX1NWTUVfTUFTSzsKKwlzYXZlLT5lZmVyID0gRUZFUl9TVk1FOwogCXNhdmUtPmRyNiA9IDB4ZmZmZjBmZjA7CiAJc2F2ZS0+ZHI3ID0gMHg0MDA7CiAJc2F2ZS0+cmZsYWdzID0gMjsKQEAgLTU5MSw2ICs1OTksOSBAQAogCQlzYXZlLT5jcjQgPSAwOwogCX0KIAlmb3JjZV9uZXdfYXNpZCgmc3ZtLT52Y3B1KTsKKworCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyA9IEhGX0dJRl9NQVNLOwogfQogCiBzdGF0aWMgaW50IHN2bV92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTYxNSw2ICs2MjYsOCBAQAogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBwYWdlICptc3JwbV9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqaHNhdmVfcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqbmVzdGVkX21zcnBtX3BhZ2VzOwogCWludCBlcnI7CiAKIAlzdm0gPSBrbWVtX2NhY2hlX3phbGxvYyhrdm1fdmNwdV9jYWNoZSwgR0ZQX0tFUk5FTCk7CkBAIC02MzcsMTQgKzY1MCwyNSBAQAogCW1zcnBtX3BhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgTVNSUE1fQUxMT0NfT1JERVIpOwogCWlmICghbXNycG1fcGFnZXMpCiAJCWdvdG8gdW5pbml0OworCisJbmVzdGVkX21zcnBtX3BhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgTVNSUE1fQUxMT0NfT1JERVIpOworCWlmICghbmVzdGVkX21zcnBtX3BhZ2VzKQorCQlnb3RvIHVuaW5pdDsKKwogCXN2bS0+bXNycG0gPSBwYWdlX2FkZHJlc3MobXNycG1fcGFnZXMpOwogCXN2bV92Y3B1X2luaXRfbXNycG0oc3ZtLT5tc3JwbSk7CiAKKwloc2F2ZV9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWhzYXZlX3BhZ2UpCisJCWdvdG8gdW5pbml0OworCXN2bS0+aHNhdmUgPSBwYWdlX2FkZHJlc3MoaHNhdmVfcGFnZSk7CisKKwlzdm0tPm5lc3RlZF9tc3JwbSA9IHBhZ2VfYWRkcmVzcyhuZXN0ZWRfbXNycG1fcGFnZXMpOworCiAJc3ZtLT52bWNiID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWNsZWFyX3BhZ2Uoc3ZtLT52bWNiKTsKIAlzdm0tPnZtY2JfcGEgPSBwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUOwogCXN2bS0+YXNpZF9nZW5lcmF0aW9uID0gMDsKLQltZW1zZXQoc3ZtLT5kYl9yZWdzLCAwLCBzaXplb2Yoc3ZtLT5kYl9yZWdzKSk7CiAJaW5pdF92bWNiKHN2bSk7CiAKIAlmeF9pbml0KCZzdm0tPnZjcHUpOwpAQCAtNjY5LDYgKzY5Myw4IEBACiAKIAlfX2ZyZWVfcGFnZShwZm5fdG9fcGFnZShzdm0tPnZtY2JfcGEgPj4gUEFHRV9TSElGVCkpOwogCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3BhZ2Uoc3ZtLT5tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKKwlfX2ZyZWVfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3ZtLT5oc2F2ZSkpOworCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3BhZ2Uoc3ZtLT5uZXN0ZWRfbXNycG0pLCBNU1JQTV9BTExPQ19PUkRFUik7CiAJa3ZtX3ZjcHVfdW5pbml0KHZjcHUpOwogCWttZW1fY2FjaGVfZnJlZShrdm1fdmNwdV9jYWNoZSwgc3ZtKTsKIH0KQEAgLTcxOCw2ICs3NDQsMTYgQEAKIAl0b19zdm0odmNwdSktPnZtY2ItPnNhdmUucmZsYWdzID0gcmZsYWdzOwogfQogCitzdGF0aWMgdm9pZCBzdm1fc2V0X3ZpbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgfD0gMVVMTCA8PCBJTlRFUkNFUFRfVklOVFI7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9jbGVhcl92aW50cihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOworfQorCiBzdGF0aWMgc3RydWN0IHZtY2Jfc2VnICpzdm1fc2VnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKIHsKIAlzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNhdmUgPSAmdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlOwpAQCAtNzYwLDIwICs3OTYsMzcgQEAKIAl2YXItPmRiID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfREJfU0hJRlQpICYgMTsKIAl2YXItPmcgPSAocy0+YXR0cmliID4+IFNWTV9TRUxFQ1RPUl9HX1NISUZUKSAmIDE7CiAKLQkvKgotCSAqIFNWTSBhbHdheXMgc3RvcmVzIDAgZm9yIHRoZSAnRycgYml0IGluIHRoZSBDUyBzZWxlY3RvciBpbgotCSAqIHRoZSBWTUNCIG9uIGEgVk1FWElULiBUaGlzIGh1cnRzIGNyb3NzLXZlbmRvciBtaWdyYXRpb246Ci0JICogSW50ZWwncyBWTUVOVFJZIGhhcyBhIGNoZWNrIG9uIHRoZSAnRycgYml0LgotCSAqLwotCWlmIChzZWcgPT0gVkNQVV9TUkVHX0NTKQorCXN3aXRjaCAoc2VnKSB7CisJY2FzZSBWQ1BVX1NSRUdfQ1M6CisJCS8qCisJCSAqIFNWTSBhbHdheXMgc3RvcmVzIDAgZm9yIHRoZSAnRycgYml0IGluIHRoZSBDUyBzZWxlY3RvciBpbgorCQkgKiB0aGUgVk1DQiBvbiBhIFZNRVhJVC4gVGhpcyBodXJ0cyBjcm9zcy12ZW5kb3IgbWlncmF0aW9uOgorCQkgKiBJbnRlbCdzIFZNRU5UUlkgaGFzIGEgY2hlY2sgb24gdGhlICdHJyBiaXQuCisJCSAqLwogCQl2YXItPmcgPSBzLT5saW1pdCA+IDB4ZmZmZmY7Ci0KLQkvKgotCSAqIFdvcmsgYXJvdW5kIGEgYnVnIHdoZXJlIHRoZSBidXN5IGZsYWcgaW4gdGhlIHRyIHNlbGVjdG9yCi0JICogaXNuJ3QgZXhwb3NlZAotCSAqLwotCWlmIChzZWcgPT0gVkNQVV9TUkVHX1RSKQorCQlicmVhazsKKwljYXNlIFZDUFVfU1JFR19UUjoKKwkJLyoKKwkJICogV29yayBhcm91bmQgYSBidWcgd2hlcmUgdGhlIGJ1c3kgZmxhZyBpbiB0aGUgdHIgc2VsZWN0b3IKKwkJICogaXNuJ3QgZXhwb3NlZAorCQkgKi8KIAkJdmFyLT50eXBlIHw9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBWQ1BVX1NSRUdfRFM6CisJY2FzZSBWQ1BVX1NSRUdfRVM6CisJY2FzZSBWQ1BVX1NSRUdfRlM6CisJY2FzZSBWQ1BVX1NSRUdfR1M6CisJCS8qCisJCSAqIFRoZSBhY2Nlc3NlZCBiaXQgbXVzdCBhbHdheXMgYmUgc2V0IGluIHRoZSBzZWdtZW50CisJCSAqIGRlc2NyaXB0b3IgY2FjaGUsIGFsdGhvdWdoIGl0IGNhbiBiZSBjbGVhcmVkIGluIHRoZQorCQkgKiBkZXNjcmlwdG9yLCB0aGUgY2FjaGVkIGJpdCBhbHdheXMgcmVtYWlucyBhdCAxLiBTaW5jZQorCQkgKiBJbnRlbCBoYXMgYSBjaGVjayBvbiB0aGlzLCBzZXQgaXQgaGVyZSB0byBzdXBwb3J0CisJCSAqIGNyb3NzLXZlbmRvciBtaWdyYXRpb24uCisJCSAqLworCQlpZiAoIXZhci0+dW51c2FibGUpCisJCQl2YXItPnR5cGUgfD0gMHgxOworCQlicmVhazsKKwl9CiAKIAl2YXItPnVudXNhYmxlID0gIXZhci0+cHJlc2VudDsKIH0KQEAgLTkwNSw5ICs5NTgsMzcgQEAKIAogfQogCi1zdGF0aWMgaW50IHN2bV9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK3N0YXRpYyBpbnQgc3ZtX2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpbnQgb2xkX2RlYnVnID0gdmNwdS0+Z3Vlc3RfZGVidWc7CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisKKwl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IGRiZy0+Y29udHJvbDsKKworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyAmPQorCQl+KCgxIDw8IERCX1ZFQ1RPUikgfCAoMSA8PCBCUF9WRUNUT1IpKTsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfRU5BQkxFKSB7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PQorCQkJCTEgPDwgREJfVkVDVE9SOworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKQorCQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9CisJCQkJMSA8PCBCUF9WRUNUT1I7CisJfSBlbHNlCisJCXZjcHUtPmd1ZXN0X2RlYnVnID0gMDsKKworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApCisJCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSBkYmctPmFyY2guZGVidWdyZWdbN107CisJZWxzZQorCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gdmNwdS0+YXJjaC5kcjc7CisKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJc3ZtLT52bWNiLT5zYXZlLnJmbGFncyB8PSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRjsKKwllbHNlIGlmIChvbGRfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHN2bV9nZXRfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTk0OSw3ICsxMDMwLDI5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN2bV9nZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSB0b19zdm0odmNwdSktPmRiX3JlZ3NbZHJdOworCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJc3dpdGNoIChkcikgeworCWNhc2UgMCAuLi4gMzoKKwkJdmFsID0gdmNwdS0+YXJjaC5kYltkcl07CisJCWJyZWFrOworCWNhc2UgNjoKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJCXZhbCA9IHZjcHUtPmFyY2guZHI2OworCQllbHNlCisJCQl2YWwgPSBzdm0tPnZtY2ItPnNhdmUuZHI2OworCQlicmVhazsKKwljYXNlIDc6CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApCisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNzsKKwkJZWxzZQorCQkJdmFsID0gc3ZtLT52bWNiLT5zYXZlLmRyNzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsID0gMDsKKwl9CisKIAlLVk1UUkFDRV8yRChEUl9SRUFELCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTk1OSwzMyArMTA2Miw0MCBAQAogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCi0JKmV4Y2VwdGlvbiA9IDA7CisJS1ZNVFJBQ0VfMkQoRFJfV1JJVEUsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsdWUsIGhhbmRsZXIpOwogCi0JaWYgKHN2bS0+dm1jYi0+c2F2ZS5kcjcgJiBEUjdfR0RfTUFTSykgewotCQlzdm0tPnZtY2ItPnNhdmUuZHI3ICY9IH5EUjdfR0RfTUFTSzsKLQkJc3ZtLT52bWNiLT5zYXZlLmRyNiB8PSBEUjZfQkRfTUFTSzsKLQkJKmV4Y2VwdGlvbiA9IERCX1ZFQ1RPUjsKLQkJcmV0dXJuOwotCX0KKwkqZXhjZXB0aW9uID0gMDsKIAogCXN3aXRjaCAoZHIpIHsKIAljYXNlIDAgLi4uIDM6Ci0JCXN2bS0+ZGJfcmVnc1tkcl0gPSB2YWx1ZTsKKwkJdmNwdS0+YXJjaC5kYltkcl0gPSB2YWx1ZTsKKwkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCXZjcHUtPmFyY2guZWZmX2RiW2RyXSA9IHZhbHVlOwogCQlyZXR1cm47CiAJY2FzZSA0IC4uLiA1OgotCQlpZiAodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X0RFKSB7CisJCWlmICh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfREUpCiAJCQkqZXhjZXB0aW9uID0gVURfVkVDVE9SOwotCQkJcmV0dXJuOwotCQl9Ci0JY2FzZSA3OiB7Ci0JCWlmICh2YWx1ZSAmIH4oKDFVTEwgPDwgMzIpIC0gMSkpIHsKKwkJcmV0dXJuOworCWNhc2UgNjoKKwkJaWYgKHZhbHVlICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7CiAJCQkqZXhjZXB0aW9uID0gR1BfVkVDVE9SOwogCQkJcmV0dXJuOwogCQl9Ci0JCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2YWx1ZTsKKwkJdmNwdS0+YXJjaC5kcjYgPSAodmFsdWUgJiBEUjZfVk9MQVRJTEUpIHwgRFI2X0ZJWEVEXzE7CiAJCXJldHVybjsKLQl9CisJY2FzZSA3OgorCQlpZiAodmFsdWUgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKKwkJCSpleGNlcHRpb24gPSBHUF9WRUNUT1I7CisJCQlyZXR1cm47CisJCX0KKwkJdmNwdS0+YXJjaC5kcjcgPSAodmFsdWUgJiBEUjdfVk9MQVRJTEUpIHwgRFI3X0ZJWEVEXzE7CisJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpIHsKKwkJCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2Y3B1LT5hcmNoLmRyNzsKKwkJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPSAodmFsdWUgJiBEUjdfQlBfRU5fTUFTSyk7CisJCX0KKwkJcmV0dXJuOwogCWRlZmF1bHQ6CisJCS8qIEZJWE1FOiBQb3NzaWJsZSBjYXNlPyAqLwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuZXhwZWN0ZWQgZHIgJXVcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgZHIpOwogCQkqZXhjZXB0aW9uID0gVURfVkVDVE9SOwpAQCAtMTAzMSw2ICsxMTQxLDI3IEBACiAJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlKTsKIH0KIAorc3RhdGljIGludCBkYl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmICghKHN2bS0+dmNwdS5ndWVzdF9kZWJ1ZyAmCisJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24oJnN2bS0+dmNwdSwgREJfVkVDVE9SKTsKKwkJcmV0dXJuIDE7CisJfQorCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7CisJa3ZtX3J1bi0+ZGVidWcuYXJjaC5wYyA9IHN2bS0+dm1jYi0+c2F2ZS5jcy5iYXNlICsgc3ZtLT52bWNiLT5zYXZlLnJpcDsKKwlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IERCX1ZFQ1RPUjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicF9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7CisJa3ZtX3J1bi0+ZGVidWcuYXJjaC5wYyA9IHN2bS0+dm1jYi0+c2F2ZS5jcy5iYXNlICsgc3ZtLT52bWNiLT5zYXZlLnJpcDsKKwlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IEJQX1ZFQ1RPUjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB1ZF9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCWludCBlcjsKQEAgLTEwODAsNyArMTIxMSw3IEBACiBzdGF0aWMgaW50IGlvX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTMyIGlvX2luZm8gPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzE7IC8qIGFkZHJlc3Mgc2l6ZSBidWc/ICovCi0JaW50IHNpemUsIGRvd24sIGluLCBzdHJpbmcsIHJlcDsKKwlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCiAJKytzdm0tPnZjcHUuc3RhdC5pb19leGl0czsKQEAgLTEwOTksOCArMTIzMCw2IEBACiAJaW4gPSAoaW9faW5mbyAmIFNWTV9JT0lPX1RZUEVfTUFTSykgIT0gMDsKIAlwb3J0ID0gaW9faW5mbyA+PiAxNjsKIAlzaXplID0gKGlvX2luZm8gJiBTVk1fSU9JT19TSVpFX01BU0spID4+IFNWTV9JT0lPX1NJWkVfU0hJRlQ7Ci0JcmVwID0gKGlvX2luZm8gJiBTVk1fSU9JT19SRVBfTUFTSykgIT0gMDsKLQlkb3duID0gKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0RGKSAhPSAwOwogCiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKIAlyZXR1cm4ga3ZtX2VtdWxhdGVfcGlvKCZzdm0tPnZjcHUsIGt2bV9ydW4sIGluLCBzaXplLCBwb3J0KTsKQEAgLTExMzksNiArMTI2OCw1NjcgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCWlmICghKHN2bS0+dmNwdS5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9TVk1FKQorCSAgICB8fCAhaXNfcGFnaW5nKCZzdm0tPnZjcHUpKSB7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24oJnN2bS0+dmNwdSwgVURfVkVDVE9SKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHN2bS0+dm1jYi0+c2F2ZS5jcGwpIHsKKwkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHVuc2lnbmVkIG5yLAorCQkJCSAgICAgIGJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKQoreworCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID0gU1ZNX0VYSVRfRVhDUF9CQVNFICsgbnI7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGVfaGkgPSAwOworCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgPSBlcnJvcl9jb2RlOworCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzIgPSBzdm0tPnZjcHUuYXJjaC5jcjI7CisJCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIGZhbHNlKSkgeworCQkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBFWENQIDB4JXhcbiIsIG5yKTsKKworCQkJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5lc3RlZF9zdm1faW50cihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJaWYgKCEoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9ISUZfTUFTSykpCisJCQlyZXR1cm4gMDsKKworCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID0gU1ZNX0VYSVRfSU5UUjsKKworCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCBmYWxzZSkpIHsKKwkJCW5zdm1fcHJpbnRrKCJWTWV4aXQgLT4gSU5UUlxuIik7CisJCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpuZXN0ZWRfc3ZtX2dldF9wYWdlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZ3BhKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXBhZ2UgPSBnZm5fdG9fcGFnZShzdm0tPnZjcHUua3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCWlmIChpc19lcnJvcl9wYWdlKHBhZ2UpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb3VsZCBub3QgZmluZCBwYWdlIGF0IDB4JWxseFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBncGEpOworCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOworCQlrdm1faW5qZWN0X2dwKCZzdm0tPnZjcHUsIDApOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9kbyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCSB1NjQgYXJnMV9ncGEsIHU2NCBhcmcyX2dwYSwgdm9pZCAqb3BhcXVlLAorCQkJIGludCAoKmhhbmRsZXIpKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAorCQkJCQl2b2lkICphcmcxLAorCQkJCQl2b2lkICphcmcyLAorCQkJCQl2b2lkICpvcGFxdWUpKQoreworCXN0cnVjdCBwYWdlICphcmcxX3BhZ2U7CisJc3RydWN0IHBhZ2UgKmFyZzJfcGFnZSA9IE5VTEw7CisJdm9pZCAqYXJnMTsKKwl2b2lkICphcmcyID0gTlVMTDsKKwlpbnQgcmV0dmFsOworCisJYXJnMV9wYWdlID0gbmVzdGVkX3N2bV9nZXRfcGFnZShzdm0sIGFyZzFfZ3BhKTsKKwlpZihhcmcxX3BhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoYXJnMl9ncGEpIHsKKwkJYXJnMl9wYWdlID0gbmVzdGVkX3N2bV9nZXRfcGFnZShzdm0sIGFyZzJfZ3BhKTsKKwkJaWYoYXJnMl9wYWdlID09IE5VTEwpIHsKKwkJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4oYXJnMV9wYWdlKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJYXJnMSA9IGttYXBfYXRvbWljKGFyZzFfcGFnZSwgS01fVVNFUjApOworCWlmIChhcmcyX2dwYSkKKwkJYXJnMiA9IGttYXBfYXRvbWljKGFyZzJfcGFnZSwgS01fVVNFUjEpOworCisJcmV0dmFsID0gaGFuZGxlcihzdm0sIGFyZzEsIGFyZzIsIG9wYXF1ZSk7CisKKwlrdW5tYXBfYXRvbWljKGFyZzEsIEtNX1VTRVIwKTsKKwlpZiAoYXJnMl9ncGEpCisJCWt1bm1hcF9hdG9taWMoYXJnMiwgS01fVVNFUjEpOworCisJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShhcmcxX3BhZ2UpOworCWlmIChhcmcyX2dwYSkKKwkJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShhcmcyX3BhZ2UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9yZWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAorCQkJCQl2b2lkICphcmcxLAorCQkJCQl2b2lkICphcmcyLAorCQkJCQl2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKKwlib29sIGt2bV9vdmVycmlkZXMgPSAqKGJvb2wgKilvcGFxdWU7CisJdTMyIGV4aXRfY29kZSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGU7CisKKwlpZiAoa3ZtX292ZXJyaWRlcykgeworCQlzd2l0Y2ggKGV4aXRfY29kZSkgeworCQljYXNlIFNWTV9FWElUX0lOVFI6CisJCWNhc2UgU1ZNX0VYSVRfTk1JOgorCQkJcmV0dXJuIDA7CisJCS8qIEZvciBub3cgd2UgYXJlIGFsd2F5cyBoYW5kbGluZyBOUEZzIHdoZW4gdXNpbmcgdGhlbSAqLworCQljYXNlIFNWTV9FWElUX05QRjoKKwkJCWlmIChucHRfZW5hYmxlZCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQkvKiBXaGVuIHdlJ3JlIHNoYWRvd2luZywgdHJhcCBQRnMgKi8KKwkJY2FzZSBTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1I6CisJCQlpZiAoIW5wdF9lbmFibGVkKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXN3aXRjaCAoZXhpdF9jb2RlKSB7CisJY2FzZSBTVk1fRVhJVF9SRUFEX0NSMCAuLi4gU1ZNX0VYSVRfUkVBRF9DUjg6IHsKKwkJdTMyIGNyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9SRUFEX0NSMCk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCAmIGNyX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfV1JJVEVfQ1IwIC4uLiBTVk1fRVhJVF9XUklURV9DUjg6IHsKKwkJdTMyIGNyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9XUklURV9DUjApOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlICYgY3JfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9SRUFEX0RSMCAuLi4gU1ZNX0VYSVRfUkVBRF9EUjc6IHsKKwkJdTMyIGRyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9SRUFEX0RSMCk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZCAmIGRyX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfV1JJVEVfRFIwIC4uLiBTVk1fRVhJVF9XUklURV9EUjc6IHsKKwkJdTMyIGRyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9XUklURV9EUjApOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlICYgZHJfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9FWENQX0JBU0UgLi4uIFNWTV9FWElUX0VYQ1BfQkFTRSArIDB4MWY6IHsKKwkJdTMyIGV4Y3BfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0VYQ1BfQkFTRSk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyAmIGV4Y3BfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJZGVmYXVsdDogeworCQl1NjQgZXhpdF9iaXRzID0gMVVMTCA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfSU5UUik7CisJCW5zdm1fcHJpbnRrKCJleGl0IGNvZGU6IDB4JXhcbiIsIGV4aXRfY29kZSk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJiBleGl0X2JpdHMpCisJCQlyZXR1cm4gMTsKKwl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAorCQkJCSAgICAgICB2b2lkICphcmcxLCB2b2lkICphcmcyLAorCQkJCSAgICAgICB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKKwl1OCAqbXNycG0gPSAodTggKilhcmcyOworICAgICAgICB1MzIgdDAsIHQxOworCXUzMiBtc3IgPSBzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdOworCXUzMiBwYXJhbSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSAmIDE7CisKKwlpZiAoIShuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJiAoMVVMTCA8PCBJTlRFUkNFUFRfTVNSX1BST1QpKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2gobXNyKSB7CisJY2FzZSAwIC4uLiAweDFmZmY6CisJCXQwID0gKG1zciAqIDIpICUgODsKKwkJdDEgPSBtc3IgLyA4OworCQlicmVhazsKKwljYXNlIDB4YzAwMDAwMDAgLi4uIDB4YzAwMDFmZmY6CisJCXQwID0gKDgxOTIgKyBtc3IgLSAweGMwMDAwMDAwKSAqIDI7CisJCXQxID0gKHQwIC8gOCk7CisJCXQwICU9IDg7CisJCWJyZWFrOworCWNhc2UgMHhjMDAxMDAwMCAuLi4gMHhjMDAxMWZmZjoKKwkJdDAgPSAoMTYzODQgKyBtc3IgLSAweGMwMDEwMDAwKSAqIDI7CisJCXQxID0gKHQwIC8gOCk7CisJCXQwICU9IDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJaWYgKG1zcnBtW3QxXSAmICgoMSA8PCBwYXJhbSkgPDwgdDApKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIGt2bV9vdmVycmlkZSkKK3sKKwlib29sIGsgPSBrdm1fb3ZlcnJpZGU7CisKKwlzd2l0Y2ggKHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUpIHsKKwljYXNlIFNWTV9FWElUX01TUjoKKwkJcmV0dXJuIG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLAorCQkJCSAgICAgc3ZtLT5uZXN0ZWRfdm1jYl9tc3JwbSwgTlVMTCwKKwkJCQkgICAgIG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX21zcik7CisJZGVmYXVsdDogYnJlYWs7CisJfQorCisJcmV0dXJuIG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLCAmaywKKwkJCSAgICAgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbCk7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqYXJnMSwKKwkJCQkgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCXN0cnVjdCB2bWNiICpoc2F2ZSA9IHN2bS0+aHNhdmU7CisJdTY0IG5lc3RlZF9zYXZlW10gPSB7IG5lc3RlZF92bWNiLT5zYXZlLmNyMCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmNyMywKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmNyNCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmVmZXIsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW9wbV9iYXNlX3BhLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wudHNjX29mZnNldCB9OworCisJLyogR2l2ZSB0aGUgY3VycmVudCB2bWNiIHRvIHRoZSBndWVzdCAqLworCW1lbWNweShuZXN0ZWRfdm1jYiwgc3ZtLT52bWNiLCBzaXplb2Yoc3RydWN0IHZtY2IpKTsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5jcjAgPSBuZXN0ZWRfc2F2ZVswXTsKKwlpZiAoIW5wdF9lbmFibGVkKQorCQluZXN0ZWRfdm1jYi0+c2F2ZS5jcjMgPSBuZXN0ZWRfc2F2ZVsxXTsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5jcjQgPSBuZXN0ZWRfc2F2ZVsyXTsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5lZmVyID0gbmVzdGVkX3NhdmVbM107CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgPSBuZXN0ZWRfc2F2ZVs0XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgPSBuZXN0ZWRfc2F2ZVs1XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZCA9IG5lc3RlZF9zYXZlWzZdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSA9IG5lc3RlZF9zYXZlWzddOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zID0gbmVzdGVkX3NhdmVbOF07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ID0gbmVzdGVkX3NhdmVbOV07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYSA9IG5lc3RlZF9zYXZlWzEwXTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pb3BtX2Jhc2VfcGEgPSBuZXN0ZWRfc2F2ZVsxMV07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wudHNjX29mZnNldCA9IG5lc3RlZF9zYXZlWzEyXTsKKworCS8qIFdlIGFsd2F5cyBzZXQgVl9JTlRSX01BU0tJTkcgYW5kIHJlbWVtYmVyIHRoZSBvbGQgdmFsdWUgaW4gaGZsYWdzICovCisJaWYgKCEoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpCisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSU5UUl9NQVNLSU5HX01BU0s7CisKKwlpZiAoKG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgJiBWX0lSUV9NQVNLKSAmJgorCSAgICAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X3ZlY3RvcikpIHsKKwkJbnN2bV9wcmludGsoIldBUk5JTkc6IElSUSAweCV4IHN0aWxsIGVuYWJsZWQgb24gI1ZNRVhJVFxuIiwKKwkJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yKTsKKwl9CisKKwkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjb250cm9sIGVudHJpZXMgKi8KKwlzdm0tPnZtY2ItPmNvbnRyb2wgPSBoc2F2ZS0+Y29udHJvbDsKKworCS8qIEtpbGwgYW55IHBlbmRpbmcgZXhjZXB0aW9ucyAqLworCWlmIChzdm0tPnZjcHUuYXJjaC5leGNlcHRpb24ucGVuZGluZyA9PSB0cnVlKQorCQluc3ZtX3ByaW50aygiV0FSTklORzogUGVuZGluZyBFeGNlcHRpb25cbiIpOworCXN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7CisKKwkvKiBSZXN0b3JlIHNlbGVjdGVkIHNhdmUgZW50cmllcyAqLworCXN2bS0+dm1jYi0+c2F2ZS5lcyA9IGhzYXZlLT5zYXZlLmVzOworCXN2bS0+dm1jYi0+c2F2ZS5jcyA9IGhzYXZlLT5zYXZlLmNzOworCXN2bS0+dm1jYi0+c2F2ZS5zcyA9IGhzYXZlLT5zYXZlLnNzOworCXN2bS0+dm1jYi0+c2F2ZS5kcyA9IGhzYXZlLT5zYXZlLmRzOworCXN2bS0+dm1jYi0+c2F2ZS5nZHRyID0gaHNhdmUtPnNhdmUuZ2R0cjsKKwlzdm0tPnZtY2ItPnNhdmUuaWR0ciA9IGhzYXZlLT5zYXZlLmlkdHI7CisJc3ZtLT52bWNiLT5zYXZlLnJmbGFncyA9IGhzYXZlLT5zYXZlLnJmbGFnczsKKwlzdm1fc2V0X2VmZXIoJnN2bS0+dmNwdSwgaHNhdmUtPnNhdmUuZWZlcik7CisJc3ZtX3NldF9jcjAoJnN2bS0+dmNwdSwgaHNhdmUtPnNhdmUuY3IwIHwgWDg2X0NSMF9QRSk7CisJc3ZtX3NldF9jcjQoJnN2bS0+dmNwdSwgaHNhdmUtPnNhdmUuY3I0KTsKKwlpZiAobnB0X2VuYWJsZWQpIHsKKwkJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IGhzYXZlLT5zYXZlLmNyMzsKKwkJc3ZtLT52Y3B1LmFyY2guY3IzID0gaHNhdmUtPnNhdmUuY3IzOworCX0gZWxzZSB7CisJCWt2bV9zZXRfY3IzKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyMyk7CisJfQorCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUkFYLCBoc2F2ZS0+c2F2ZS5yYXgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUlNQLCBoc2F2ZS0+c2F2ZS5yc3ApOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUklQLCBoc2F2ZS0+c2F2ZS5yaXApOworCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSAwOworCXN2bS0+dm1jYi0+c2F2ZS5jcGwgPSAwOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvID0gMDsKKworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfR0lGX01BU0s7CisJLyogRXhpdCBuZXN0ZWQgU1ZNIG1vZGUgKi8KKwlzdm0tPm5lc3RlZF92bWNiID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCW5zdm1fcHJpbnRrKCJWTWV4aXRcbiIpOworCWlmIChuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwgMCwKKwkJCSAgTlVMTCwgbmVzdGVkX3N2bV92bWV4aXRfcmVhbCkpCisJCXJldHVybiAxOworCisJa3ZtX21tdV9yZXNldF9jb250ZXh0KCZzdm0tPnZjcHUpOworCWt2bV9tbXVfbG9hZCgmc3ZtLT52Y3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1ydW5fbXNycG0oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKmFyZzEsCisJCQkJICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJaW50IGk7CisJdTMyICpuZXN0ZWRfbXNycG0gPSAodTMyKilhcmcxOworCWZvciAoaT0wOyBpPCBQQUdFX1NJWkUgKiAoMSA8PCBNU1JQTV9BTExPQ19PUkRFUikgLyA0OyBpKyspCisJCXN2bS0+bmVzdGVkX21zcnBtW2ldID0gc3ZtLT5tc3JwbVtpXSB8IG5lc3RlZF9tc3JwbVtpXTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYSA9IF9fcGEoc3ZtLT5uZXN0ZWRfbXNycG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXJ1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqYXJnMSwKKwkJCSAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPmhzYXZlOworCisJLyogbmVzdGVkX3ZtY2IgaXMgb3VyIGluZGljYXRvciBpZiBuZXN0ZWQgU1ZNIGlzIGFjdGl2YXRlZCAqLworCXN2bS0+bmVzdGVkX3ZtY2IgPSBzdm0tPnZtY2ItPnNhdmUucmF4OworCisJLyogQ2xlYXIgaW50ZXJuYWwgc3RhdHVzICovCisJc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKworCS8qIFNhdmUgdGhlIG9sZCB2bWNiLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHBpY2sgd2hhdCB3ZSBzYXZlLCBidXQKKwkgICBjYW4gcmVzdG9yZSBldmVyeXRoaW5nIHdoZW4gYSBWTUVYSVQgb2NjdXJzICovCisJbWVtY3B5KGhzYXZlLCBzdm0tPnZtY2IsIHNpemVvZihzdHJ1Y3Qgdm1jYikpOworCS8qIFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG9yaWdpbmFsIENSMyBpbiB0aGUgU1BUIGNhc2UgKi8KKwlpZiAoIW5wdF9lbmFibGVkKQorCQloc2F2ZS0+c2F2ZS5jcjMgPSBzdm0tPnZjcHUuYXJjaC5jcjM7CisJaHNhdmUtPnNhdmUuY3I0ID0gc3ZtLT52Y3B1LmFyY2guY3I0OworCWhzYXZlLT5zYXZlLnJpcCA9IHN2bS0+bmV4dF9yaXA7CisKKwlpZiAoc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpCisJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9ISUZfTUFTSzsKKwllbHNlCisJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfSElGX01BU0s7CisKKwkvKiBMb2FkIHRoZSBuZXN0ZWQgZ3Vlc3Qgc3RhdGUgKi8KKwlzdm0tPnZtY2ItPnNhdmUuZXMgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5lczsKKwlzdm0tPnZtY2ItPnNhdmUuY3MgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jczsKKwlzdm0tPnZtY2ItPnNhdmUuc3MgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5zczsKKwlzdm0tPnZtY2ItPnNhdmUuZHMgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5kczsKKwlzdm0tPnZtY2ItPnNhdmUuZ2R0ciA9IG5lc3RlZF92bWNiLT5zYXZlLmdkdHI7CisJc3ZtLT52bWNiLT5zYXZlLmlkdHIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5pZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5yZmxhZ3M7CisJc3ZtX3NldF9lZmVyKCZzdm0tPnZjcHUsIG5lc3RlZF92bWNiLT5zYXZlLmVmZXIpOworCXN2bV9zZXRfY3IwKCZzdm0tPnZjcHUsIG5lc3RlZF92bWNiLT5zYXZlLmNyMCk7CisJc3ZtX3NldF9jcjQoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuY3I0KTsKKwlpZiAobnB0X2VuYWJsZWQpIHsKKwkJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMzsKKwkJc3ZtLT52Y3B1LmFyY2guY3IzID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3IzOworCX0gZWxzZSB7CisJCWt2bV9zZXRfY3IzKCZzdm0tPnZjcHUsIG5lc3RlZF92bWNiLT5zYXZlLmNyMyk7CisJCWt2bV9tbXVfcmVzZXRfY29udGV4dCgmc3ZtLT52Y3B1KTsKKwl9CisJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMjsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JBWCwgbmVzdGVkX3ZtY2ItPnNhdmUucmF4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JTUCwgbmVzdGVkX3ZtY2ItPnNhdmUucnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JJUCwgbmVzdGVkX3ZtY2ItPnNhdmUucmlwKTsKKwkvKiBJbiBjYXNlIHdlIGRvbid0IGV2ZW4gcmVhY2ggdmNwdV9ydW4sIHRoZSBmaWVsZHMgYXJlIG5vdCB1cGRhdGVkICovCisJc3ZtLT52bWNiLT5zYXZlLnJheCA9IG5lc3RlZF92bWNiLT5zYXZlLnJheDsKKwlzdm0tPnZtY2ItPnNhdmUucnNwID0gbmVzdGVkX3ZtY2ItPnNhdmUucnNwOworCXN2bS0+dm1jYi0+c2F2ZS5yaXAgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5yaXA7CisJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IG5lc3RlZF92bWNiLT5zYXZlLmRyNzsKKwlzdm0tPnZtY2ItPnNhdmUuZHI2ID0gbmVzdGVkX3ZtY2ItPnNhdmUuZHI2OworCXN2bS0+dm1jYi0+c2F2ZS5jcGwgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcGw7CisKKwkvKiBXZSBkb24ndCB3YW50IGEgbmVzdGVkIGd1ZXN0IHRvIGJlIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgZ3Vlc3QsCisJICAgc28gYWxsIGludGVyY2VwdHMgYXJlIE9SZWQgKi8KKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQ7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGU7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9uczsKKworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgfD0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0OworCisJc3ZtLT5uZXN0ZWRfdm1jYl9tc3JwbSA9IG5lc3RlZF92bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGE7CisKKwlmb3JjZV9uZXdfYXNpZCgmc3ZtLT52Y3B1KTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbyA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm87CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm9fZXJyID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnI7CisJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsIHwgVl9JTlRSX01BU0tJTkdfTUFTSzsKKwlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSVJRX01BU0spIHsKKwkJbnN2bV9wcmludGsoIm5TVk0gSW5qZWN0aW5nIEludGVycnVwdDogMHgleFxuIiwKKwkJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsKTsKKwl9CisJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgJiBWX0lOVFJfTUFTS0lOR19NQVNLKQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfVklOVFJfTUFTSzsKKwllbHNlCisJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfVklOVFJfTUFTSzsKKworCW5zdm1fcHJpbnRrKCJuU1ZNIGV4aXRfaW50X2luZm86IDB4JXggfCBpbnRfc3RhdGU6IDB4JXhcbiIsCisJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvLAorCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X3N0YXRlKTsKKworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X3ZlY3RvcjsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3N0YXRlID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X3N0YXRlOworCXN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICs9IG5lc3RlZF92bWNiLT5jb250cm9sLnRzY19vZmZzZXQ7CisJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2luaiAmIFNWTV9FVlRJTkpfVkFMSUQpCisJCW5zdm1fcHJpbnRrKCJJbmplY3RpbmcgRXZlbnQ6IDB4JXhcbiIsCisJCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qKTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qOworCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmpfZXJyID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VycjsKKworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1sb2Fkc2F2ZShzdHJ1Y3Qgdm1jYiAqZnJvbV92bWNiLCBzdHJ1Y3Qgdm1jYiAqdG9fdm1jYikKK3sKKwl0b192bWNiLT5zYXZlLmZzID0gZnJvbV92bWNiLT5zYXZlLmZzOworCXRvX3ZtY2ItPnNhdmUuZ3MgPSBmcm9tX3ZtY2ItPnNhdmUuZ3M7CisJdG9fdm1jYi0+c2F2ZS50ciA9IGZyb21fdm1jYi0+c2F2ZS50cjsKKwl0b192bWNiLT5zYXZlLmxkdHIgPSBmcm9tX3ZtY2ItPnNhdmUubGR0cjsKKwl0b192bWNiLT5zYXZlLmtlcm5lbF9nc19iYXNlID0gZnJvbV92bWNiLT5zYXZlLmtlcm5lbF9nc19iYXNlOworCXRvX3ZtY2ItPnNhdmUuc3RhciA9IGZyb21fdm1jYi0+c2F2ZS5zdGFyOworCXRvX3ZtY2ItPnNhdmUubHN0YXIgPSBmcm9tX3ZtY2ItPnNhdmUubHN0YXI7CisJdG9fdm1jYi0+c2F2ZS5jc3RhciA9IGZyb21fdm1jYi0+c2F2ZS5jc3RhcjsKKwl0b192bWNiLT5zYXZlLnNmbWFzayA9IGZyb21fdm1jYi0+c2F2ZS5zZm1hc2s7CisJdG9fdm1jYi0+c2F2ZS5zeXNlbnRlcl9jcyA9IGZyb21fdm1jYi0+c2F2ZS5zeXNlbnRlcl9jczsKKwl0b192bWNiLT5zYXZlLnN5c2VudGVyX2VzcCA9IGZyb21fdm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3A7CisJdG9fdm1jYi0+c2F2ZS5zeXNlbnRlcl9laXAgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWxvYWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKm5lc3RlZF92bWNiLAorCQkJICAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJcmV0dXJuIG5lc3RlZF9zdm1fdm1sb2Fkc2F2ZSgoc3RydWN0IHZtY2IgKiluZXN0ZWRfdm1jYiwgc3ZtLT52bWNiKTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3Ztc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqbmVzdGVkX3ZtY2IsCisJCQkgICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlyZXR1cm4gbmVzdGVkX3N2bV92bWxvYWRzYXZlKHN2bS0+dm1jYiwgKHN0cnVjdCB2bWNiICopbmVzdGVkX3ZtY2IpOworfQorCitzdGF0aWMgaW50IHZtbG9hZF9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCW5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCAwLCBOVUxMLCBuZXN0ZWRfc3ZtX3ZtbG9hZCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwluZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgMCwgTlVMTCwgbmVzdGVkX3N2bV92bXNhdmUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdm1ydW5faW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwluc3ZtX3ByaW50aygiVk1ydW5cbiIpOworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCWlmIChuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgMCwKKwkJCSAgTlVMTCwgbmVzdGVkX3N2bV92bXJ1bikpCisJCXJldHVybiAxOworCisJaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiX21zcnBtLCAwLAorCQkgICAgICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtcnVuX21zcnBtKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzdGdpX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0dJRl9NQVNLOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2xnaV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfR0lGX01BU0s7CisKKwkvKiBBZnRlciBhIENMR0kgbm8gaW50ZXJydXB0cyBzaG91bGQgY29tZSAqLworCXN2bV9jbGVhcl92aW50cihzdm0pOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsICY9IH5WX0lSUV9NQVNLOworCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgaW52YWxpZF9vcF9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sCiAJCQkJICAgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CkBAIC0xMjUwLDYgKzE5NDAsMTUgQEAKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOgogCQkqZGF0YSA9IHN2bS0+dm1jYi0+c2F2ZS5sYXN0X2V4Y3BfdG87CiAJCWJyZWFrOworCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgorCQkqZGF0YSA9IHN2bS0+aHNhdmVfbXNyOworCQlicmVhazsKKwljYXNlIE1TUl9WTV9DUjoKKwkJKmRhdGEgPSAwOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKKwkJKmRhdGEgPSAweDAxMDAwMDY1OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4ga3ZtX2dldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CiAJfQpAQCAtMTM0NCw2ICsyMDQzLDkgQEAKIAkJcHJfdW5pbXBsKHZjcHUsICJ1bmltcGxlbWVudGVkIHBlcmZjdHIgd3Jtc3I6IDB4JXggZGF0YSAweCVsbHhcbiIsIGVjeCwgZGF0YSk7CiAKIAkJYnJlYWs7CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CisJCXN2bS0+aHNhdmVfbXNyID0gZGF0YTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGt2bV9zZXRfbXNyX2NvbW1vbih2Y3B1LCBlY3gsIGRhdGEpOwogCX0KQEAgLTEzODAsNyArMjA4Miw3IEBACiB7CiAJS1ZNVFJBQ0VfMEQoUEVORF9JTlRSLCAmc3ZtLT52Y3B1LCBoYW5kbGVyKTsKIAotCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7CisJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CiAJLyoKIAkgKiBJZiB0aGUgdXNlciBzcGFjZSB3YWl0cyB0byBpbmplY3QgaW50ZXJydXB0cywgZXhpdCBhcyBzb29uIGFzCkBAIC0xNDE3LDYgKzIxMTksOCBAQAogCVtTVk1fRVhJVF9XUklURV9EUjNdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfRFI1XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0RSN10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBEQl9WRUNUT1JdCT0gZGJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBCUF9WRUNUT1JdCT0gYnBfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBVRF9WRUNUT1JdCT0gdWRfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1JdIAk9IHBmX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgTk1fVkVDVE9SXSAJPSBubV9pbnRlcmNlcHRpb24sCkBAIC0xNDM2LDEyICsyMTQwLDEyIEBACiAJW1NWTV9FWElUX01TUl0JCQkJPSBtc3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9UQVNLX1NXSVRDSF0JCQk9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfU0hVVERPV05dCQkJPSBzaHV0ZG93bl9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1ZNUlVOXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1ZNUlVOXQkJCT0gdm1ydW5faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9WTU1DQUxMXQkJCT0gdm1tY2FsbF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1ZNTE9BRF0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9WTVNBVkVdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfU1RHSV0JCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfQ0xHSV0JCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1MT0FEXQkJCT0gdm1sb2FkX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1TQVZFXQkJCT0gdm1zYXZlX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfU1RHSV0JCQkJPSBzdGdpX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfQ0xHSV0JCQkJPSBjbGdpX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfU0tJTklUXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dCSU5WRF0gICAgICAgICAgICAgICAgICAgICAgID0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX01PTklUT1JdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKQEAgLTE0NTcsNiArMjE2MSwxNyBAQAogCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9jb2RlLCAodTMyKXN2bS0+dm1jYi0+c2F2ZS5yaXAsCiAJCSAgICAodTMyKSgodTY0KXN2bS0+dm1jYi0+c2F2ZS5yaXAgPj4gMzIpLCBlbnRyeWV4aXQpOwogCisJaWYgKGlzX25lc3RlZChzdm0pKSB7CisJCW5zdm1fcHJpbnRrKCJuZXN0ZWQgaGFuZGxlX2V4aXQ6IDB4JXggfCAweCVseCB8IDB4JWx4IHwgMHglbHhcbiIsCisJCQkgICAgZXhpdF9jb2RlLCBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEsCisJCQkgICAgc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yLCBzdm0tPnZtY2ItPnNhdmUucmlwKTsKKwkJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSwgdHJ1ZSkpIHsKKwkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7CisJCQluc3ZtX3ByaW50aygiLT4gI1ZNRVhJVFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwogCWlmIChucHRfZW5hYmxlZCkgewogCQlpbnQgbW11X3JlbG9hZCA9IDA7CiAJCWlmICgodmNwdS0+YXJjaC5jcjAgXiBzdm0tPnZtY2ItPnNhdmUuY3IwKSAmIFg4Nl9DUjBfUEcpIHsKQEAgLTE1NDQsNiArMjI1OSw4IEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKKwluZXN0ZWRfc3ZtX2ludHIoc3ZtKTsKKwogCXN2bV9pbmplY3RfaXJxKHN2bSwgaXJxKTsKIH0KIApAQCAtMTU4OSwxMSArMjMwNiwxNyBAQAogCWlmICgha3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpKQogCQlnb3RvIG91dDsKIAorCWlmIChuZXN0ZWRfc3ZtX2ludHIoc3ZtKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSykpCisJCWdvdG8gb3V0OworCiAJaWYgKCEodm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSB8fAogCSAgICAodm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgJiBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLKSB8fAogCSAgICAodm1jYi0+Y29udHJvbC5ldmVudF9pbmogJiBTVk1fRVZUSU5KX1ZBTElEKSkgewogCQkvKiB1bmFibGUgdG8gZGVsaXZlciBpcnEsIHNldCBwZW5kaW5nIGlycSAqLwotCQl2bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSAoMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOworCQlzdm1fc2V0X3ZpbnRyKHN2bSk7CiAJCXN2bV9pbmplY3RfaXJxKHN2bSwgMHgwKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTYxNSw3ICsyMzM4LDggQEAKIAl9CiAKIAlzdm0tPnZjcHUuYXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPQotCQkhKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spOworCQkhKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spICYmCisJCSAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fZG9faW5qZWN0X3ZlY3RvcihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTE2MzcsOSArMjM2MSwxMyBAQAogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZzdm0tPnZtY2ItPmNvbnRyb2w7CiAKKwlpZiAobmVzdGVkX3N2bV9pbnRyKHN2bSkpCisJCXJldHVybjsKKwogCXN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9CiAJCSghKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spICYmCi0JCSAoc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpKTsKKwkJIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikgJiYKKwkJIChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSykpOwogCiAJaWYgKHN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiAmJiBzdm0tPnZjcHUuYXJjaC5pcnFfc3VtbWFyeSkKIAkJLyoKQEAgLTE2NTIsOSArMjM4MCw5IEBACiAJICovCiAJaWYgKCFzdm0tPnZjcHUuYXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKIAkgICAgKHN2bS0+dmNwdS5hcmNoLmlycV9zdW1tYXJ5IHx8IGt2bV9ydW4tPnJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdykpCi0JCWNvbnRyb2wtPmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKLQkgZWxzZQotCQljb250cm9sLT5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7CisJCXN2bV9zZXRfdmludHIoc3ZtKTsKKwllbHNlCisJCXN2bV9jbGVhcl92aW50cihzdm0pOwogfQogCiBzdGF0aWMgaW50IHN2bV9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcikKQEAgLTE2NjIsMjIgKzIzOTAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYXZlX2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZGJfcmVncykKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjAsICUwIiA6ICI9ciIoZGJfcmVnc1swXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMSwgJTAiIDogIj1yIihkYl9yZWdzWzFdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUlZHIyLCAlMCIgOiAiPXIiKGRiX3JlZ3NbMl0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjMsICUwIiA6ICI9ciIoZGJfcmVnc1szXSkpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZGJfcmVncykKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIwIiA6IDogInIiKGRiX3JlZ3NbMF0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIxIiA6IDogInIiKGRiX3JlZ3NbMV0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIyIiA6IDogInIiKGRiX3JlZ3NbMl0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHIzIiA6IDogInIiKGRiX3JlZ3NbM10pKTsKLX0KLQogc3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZm9yY2VfbmV3X2FzaWQodmNwdSk7CkBAIC0xNzM2LDE5ICsyNDQ4LDEyIEBACiAJZ3Nfc2VsZWN0b3IgPSBrdm1fcmVhZF9ncygpOwogCWxkdF9zZWxlY3RvciA9IGt2bV9yZWFkX2xkdCgpOwogCXN2bS0+aG9zdF9jcjIgPSBrdm1fcmVhZF9jcjIoKTsKLQlzdm0tPmhvc3RfZHI2ID0gcmVhZF9kcjYoKTsKLQlzdm0tPmhvc3RfZHI3ID0gcmVhZF9kcjcoKTsKLQlzdm0tPnZtY2ItPnNhdmUuY3IyID0gdmNwdS0+YXJjaC5jcjI7CisJaWYgKCFpc19uZXN0ZWQoc3ZtKSkKKwkJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHZjcHUtPmFyY2guY3IyOwogCS8qIHJlcXVpcmVkIGZvciBsaXZlIG1pZ3JhdGlvbiB3aXRoIE5QVCAqLwogCWlmIChucHRfZW5hYmxlZCkKIAkJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IHZjcHUtPmFyY2guY3IzOwogCi0JaWYgKHN2bS0+dm1jYi0+c2F2ZS5kcjcgJiAweGZmKSB7Ci0JCXdyaXRlX2RyNygwKTsKLQkJc2F2ZV9kYl9yZWdzKHN2bS0+aG9zdF9kYl9yZWdzKTsKLQkJbG9hZF9kYl9yZWdzKHN2bS0+ZGJfcmVncyk7Ci0JfQotCiAJY2xnaSgpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMTgyNCwxNiArMjUyOSwxMSBAQAogI2VuZGlmCiAJCSk7CiAKLQlpZiAoKHN2bS0+dm1jYi0+c2F2ZS5kcjcgJiAweGZmKSkKLQkJbG9hZF9kYl9yZWdzKHN2bS0+aG9zdF9kYl9yZWdzKTsKLQogCXZjcHUtPmFyY2guY3IyID0gc3ZtLT52bWNiLT5zYXZlLmNyMjsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OwogCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7CiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gc3ZtLT52bWNiLT5zYXZlLnJpcDsKIAotCXdyaXRlX2RyNihzdm0tPmhvc3RfZHI2KTsKLQl3cml0ZV9kcjcoc3ZtLT5ob3N0X2RyNyk7CiAJa3ZtX3dyaXRlX2NyMihzdm0tPmhvc3RfY3IyKTsKIAogCWt2bV9sb2FkX2ZzKGZzX3NlbGVjdG9yKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCA3NjExYWY1Li5iYjQ4MTMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC05MSw2ICs5MSw3IEBACiAJfSBybW9kZTsKIAlpbnQgdnBpZDsKIAlib29sIGVtdWxhdGlvbl9yZXF1aXJlZDsKKwllbnVtIGVtdWxhdGlvbl9yZXN1bHQgaW52YWxpZF9zdGF0ZV9lbXVsYXRpb25fcmVzdWx0OwogCiAJLyogU3VwcG9ydCBmb3Igdm5taS1sZXNzIENQVXMgKi8KIAlpbnQgc29mdF92bm1pX2Jsb2NrZWQ7CkBAIC0xODksMjEgKzE5MCwyMSBAQAogewogCXJldHVybiAoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSyB8CiAJCQkgICAgIElOVFJfSU5GT19WQUxJRF9NQVNLKSkgPT0KLQkJKElOVFJfVFlQRV9FWENFUFRJT04gfCBQRl9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCShJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfCBQRl9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX25vX2RldmljZSh1MzIgaW50cl9pbmZvKQogewogCXJldHVybiAoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSyB8CiAJCQkgICAgIElOVFJfSU5GT19WQUxJRF9NQVNLKSkgPT0KLQkJKElOVFJfVFlQRV9FWENFUFRJT04gfCBOTV9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCShJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfCBOTV9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2ludmFsaWRfb3Bjb2RlKHUzMiBpbnRyX2luZm8pCiB7CiAJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKIAkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQotCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IFVEX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJKElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8IFVEX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfZXh0ZXJuYWxfaW50ZXJydXB0KHUzMiBpbnRyX2luZm8pCkBAIC00ODAsOCArNDgxLDEzIEBACiAJZWIgPSAoMXUgPDwgUEZfVkVDVE9SKSB8ICgxdSA8PCBVRF9WRUNUT1IpOwogCWlmICghdmNwdS0+ZnB1X2FjdGl2ZSkKIAkJZWIgfD0gMXUgPDwgTk1fVkVDVE9SOwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgeworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCisJCQllYiB8PSAxdSA8PCBCUF9WRUNUT1I7CisJfQogCWlmICh2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkKIAkJZWIgPSB+MDsKIAlpZiAodm1fbmVlZF9lcHQoKSkKQEAgLTc0NywyOSArNzUzLDMzIEBACiAJCQkJYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisJdTMyIGludHJfaW5mbyA9IG5yIHwgSU5UUl9JTkZPX1ZBTElEX01BU0s7CiAKLQlpZiAoaGFzX2Vycm9yX2NvZGUpCisJaWYgKGhhc19lcnJvcl9jb2RlKSB7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwgZXJyb3JfY29kZSk7CisJCWludHJfaW5mbyB8PSBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0s7CisJfQogCiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKSB7CiAJCXZteC0+cm1vZGUuaXJxLnBlbmRpbmcgPSB0cnVlOwogCQl2bXgtPnJtb2RlLmlycS52ZWN0b3IgPSBucjsKIAkJdm14LT5ybW9kZS5pcnEucmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwotCQlpZiAobnIgPT0gQlBfVkVDVE9SKQorCQlpZiAobnIgPT0gQlBfVkVDVE9SIHx8IG5yID09IE9GX1ZFQ1RPUikKIAkJCXZteC0+cm1vZGUuaXJxLnJpcCsrOwotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAotCQkJICAgICBuciB8IElOVFJfVFlQRV9TT0ZUX0lOVFIKLQkJCSAgICAgfCAoaGFzX2Vycm9yX2NvZGUgPyBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0sgOiAwKQotCQkJICAgICB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9TT0ZUX0lOVFI7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIGludHJfaW5mbyk7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOwogCQlrdm1fcmlwX3dyaXRlKHZjcHUsIHZteC0+cm1vZGUuaXJxLnJpcCAtIDEpOwogCQlyZXR1cm47CiAJfQogCi0Jdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKLQkJICAgICBuciB8IElOVFJfVFlQRV9FWENFUFRJT04KLQkJICAgICB8IChoYXNfZXJyb3JfY29kZSA/IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSyA6IDApCi0JCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJaWYgKG5yID09IEJQX1ZFQ1RPUiB8fCBuciA9PSBPRl9WRUNUT1IpIHsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CisJCWludHJfaW5mbyB8PSBJTlRSX1RZUEVfU09GVF9FWENFUFRJT047CisJfSBlbHNlCisJCWludHJfaW5mbyB8PSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT047CisKKwl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpbnRyX2luZm8pOwogfQogCiBzdGF0aWMgYm9vbCB2bXhfZXhjZXB0aW9uX2luamVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTg1NiwxMSArODY2LDggQEAKICAqIHdyaXRlcyAnZ3Vlc3RfdHNjJyBpbnRvIGd1ZXN0J3MgdGltZXN0YW1wIGNvdW50ZXIgInJlZ2lzdGVyIgogICogZ3Vlc3RfdHNjID0gaG9zdF90c2MgKyB0c2Nfb2Zmc2V0ID09PiB0c2Nfb2Zmc2V0ID0gZ3Vlc3RfdHNjIC0gaG9zdF90c2MKICAqLwotc3RhdGljIHZvaWQgZ3Vlc3Rfd3JpdGVfdHNjKHU2NCBndWVzdF90c2MpCitzdGF0aWMgdm9pZCBndWVzdF93cml0ZV90c2ModTY0IGd1ZXN0X3RzYywgdTY0IGhvc3RfdHNjKQogewotCXU2NCBob3N0X3RzYzsKLQotCXJkdHNjbGwoaG9zdF90c2MpOwogCXZtY3Nfd3JpdGU2NChUU0NfT0ZGU0VULCBndWVzdF90c2MgLSBob3N0X3RzYyk7CiB9CiAKQEAgLTkyNSwxNCArOTMyLDE1IEBACiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IGt2bV9tc3JfZW50cnkgKm1zcjsKKwl1NjQgaG9zdF90c2M7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKG1zcl9pbmRleCkgewotI2lmZGVmIENPTkZJR19YODZfNjQKIAljYXNlIE1TUl9FRkVSOgogCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHZteCk7CiAJCXJldCA9IGt2bV9zZXRfbXNyX2NvbW1vbih2Y3B1LCBtc3JfaW5kZXgsIGRhdGEpOwogCQlicmVhazsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJY2FzZSBNU1JfRlNfQkFTRToKIAkJdm1jc193cml0ZWwoR1VFU1RfRlNfQkFTRSwgZGF0YSk7CiAJCWJyZWFrOwpAQCAtOTUwLDcgKzk1OCw4IEBACiAJCXZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VTUCwgZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOgotCQlndWVzdF93cml0ZV90c2MoZGF0YSk7CisJCXJkdHNjbGwoaG9zdF90c2MpOworCQlndWVzdF93cml0ZV90c2MoZGF0YSwgaG9zdF90c2MpOwogCQlicmVhazsKIAljYXNlIE1TUl9QNl9QRVJGQ1RSMDoKIAljYXNlIE1TUl9QNl9QRVJGQ1RSMToKQEAgLTk5OSw0MCArMTAwOCwyOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBzZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitzdGF0aWMgaW50IHNldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQl1bnNpZ25lZCBsb25nIGRyNyA9IDB4NDAwOwotCWludCBvbGRfc2luZ2xlc3RlcDsKKwlpbnQgb2xkX2RlYnVnID0gdmNwdS0+Z3Vlc3RfZGVidWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW9sZF9zaW5nbGVzdGVwID0gdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcDsKKwl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IGRiZy0+Y29udHJvbDsKKwlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19FTkFCTEUpKQorCQl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IDA7CiAKLQl2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkID0gZGJnLT5lbmFibGVkOwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKSB7Ci0JCWludCBpOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApCisJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgZGJnLT5hcmNoLmRlYnVncmVnWzddKTsKKwllbHNlCisJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdmNwdS0+YXJjaC5kcjcpOwogCi0JCWRyNyB8PSAweDIwMDsgIC8qIGV4YWN0ICovCi0JCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKLQkJCWlmICghZGJnLT5icmVha3BvaW50c1tpXS5lbmFibGVkKQotCQkJCWNvbnRpbnVlOwotCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7Ci0JCQlkcjcgfD0gMiA8PCAoaSoyKTsgICAgLyogZ2xvYmFsIGVuYWJsZSAqLwotCQkJZHI3IHw9IDAgPDwgKGkqNCsxNik7IC8qIGV4ZWN1dGlvbiBicmVha3BvaW50ICovCi0JCX0KLQotCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwID0gZGJnLT5zaW5nbGVzdGVwOwotCX0gZWxzZQotCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwID0gMDsKLQotCWlmIChvbGRfc2luZ2xlc3RlcCAmJiAhdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCWZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQlmbGFncyB8PSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRjsKKwllbHNlIGlmIChvbGRfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKIAkJZmxhZ3MgJj0gfihYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRik7Ci0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwotCX0KKwl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIGZsYWdzKTsKIAogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOwotCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgZHI3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQzMyw2ICsxNDMwLDI5IEBACiAJaW5pdF9ybW9kZSh2Y3B1LT5rdm0pOwogfQogCitzdGF0aWMgdm9pZCB2bXhfc2V0X2VmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcikKK3sKKwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKKwlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSAqbXNyID0gZmluZF9tc3JfZW50cnkodm14LCBNU1JfRUZFUik7CisKKwl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyID0gZWZlcjsKKwlpZiAoIW1zcikKKwkJcmV0dXJuOworCWlmIChlZmVyICYgRUZFUl9MTUEpIHsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAorCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgfAorCQkJICAgICBWTV9FTlRSWV9JQTMyRV9NT0RFKTsKKwkJbXNyLT5kYXRhID0gZWZlcjsKKwl9IGVsc2UgeworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCisJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSAmCisJCQkgICAgIH5WTV9FTlRSWV9JQTMyRV9NT0RFKTsKKworCQltc3ItPmRhdGEgPSBlZmVyICYgfkVGRVJfTE1FOworCX0KKwlzZXR1cF9tc3JzKHZteCk7Cit9CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKIHN0YXRpYyB2b2lkIGVudGVyX2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE0NDcsMTMgKzE0NjcsOCBAQAogCQkJICAgICAoZ3Vlc3RfdHJfYXIgJiB+QVJfVFlQRV9NQVNLKQogCQkJICAgICB8IEFSX1RZUEVfQlVTWV82NF9UU1MpOwogCX0KLQogCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgfD0gRUZFUl9MTUE7Ci0KLQlmaW5kX21zcl9lbnRyeSh0b192bXgodmNwdSksIE1TUl9FRkVSKS0+ZGF0YSB8PSBFRkVSX0xNQSB8IEVGRVJfTE1FOwotCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKLQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykKLQkJICAgICB8IFZNX0VOVFJZX0lBMzJFX01PREUpOworCXZteF9zZXRfZWZlcih2Y3B1LCB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgZXhpdF9sbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xNjEyLDMwICsxNjI3LDYgQEAKIAl2bWNzX3dyaXRlbChHVUVTVF9DUjQsIGh3X2NyNCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZteF9zZXRfZWZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKQotewotCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXN0cnVjdCBrdm1fbXNyX2VudHJ5ICptc3IgPSBmaW5kX21zcl9lbnRyeSh2bXgsIE1TUl9FRkVSKTsKLQotCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOwotCWlmICghbXNyKQotCQlyZXR1cm47Ci0JaWYgKGVmZXIgJiBFRkVSX0xNQSkgewotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCi0JCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgfAotCQkJCSAgICAgVk1fRU5UUllfSUEzMkVfTU9ERSk7Ci0JCW1zci0+ZGF0YSA9IGVmZXI7Ci0KLQl9IGVsc2UgewotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCi0JCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgJgotCQkJCSAgICAgflZNX0VOVFJZX0lBMzJFX01PREUpOwotCi0JCW1zci0+ZGF0YSA9IGVmZXIgJiB+RUZFUl9MTUU7Ci0JfQotCXNldHVwX21zcnModm14KTsKLX0KLQogc3RhdGljIHU2NCB2bXhfZ2V0X3NlZ21lbnRfYmFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOwpAQCAtMTY1Myw3ICsxNjQ0LDcgQEAKIAl2YXItPmxpbWl0ID0gdm1jc19yZWFkMzIoc2YtPmxpbWl0KTsKIAl2YXItPnNlbGVjdG9yID0gdm1jc19yZWFkMTYoc2YtPnNlbGVjdG9yKTsKIAlhciA9IHZtY3NfcmVhZDMyKHNmLT5hcl9ieXRlcyk7Ci0JaWYgKGFyICYgQVJfVU5VU0FCTEVfTUFTSykKKwlpZiAoKGFyICYgQVJfVU5VU0FCTEVfTUFTSykgJiYgIWVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKIAkJYXIgPSAwOwogCXZhci0+dHlwZSA9IGFyICYgMTU7CiAJdmFyLT5zID0gKGFyID4+IDQpICYgMTsKQEAgLTE3ODgsMTQgKzE3NzksMTYgQEAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOwogCWNzX3JwbCA9IGNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CiAKKwlpZiAoY3MudW51c2FibGUpCisJCXJldHVybiBmYWxzZTsKIAlpZiAofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9BQ0NFU1NFU19NQVNLKSkKIAkJcmV0dXJuIGZhbHNlOwogCWlmICghY3MucykKIAkJcmV0dXJuIGZhbHNlOwotCWlmICghKH5jcy50eXBlICYgKEFSX1RZUEVfQ09ERV9NQVNLfEFSX1RZUEVfV1JJVEVBQkxFX01BU0spKSkgeworCWlmIChjcy50eXBlICYgQVJfVFlQRV9XUklURUFCTEVfTUFTSykgewogCQlpZiAoY3MuZHBsID4gY3NfcnBsKQogCQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSBpZiAoY3MudHlwZSAmIEFSX1RZUEVfQ09ERV9NQVNLKSB7CisJfSBlbHNlIHsKIAkJaWYgKGNzLmRwbCAhPSBjc19ycGwpCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTgxNCw3ICsxODA3LDkgQEAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOwogCXNzX3JwbCA9IHNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CiAKLQlpZiAoKHNzLnR5cGUgIT0gMykgfHwgKHNzLnR5cGUgIT0gNykpCisJaWYgKHNzLnVudXNhYmxlKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoc3MudHlwZSAhPSAzICYmIHNzLnR5cGUgIT0gNykKIAkJcmV0dXJuIGZhbHNlOwogCWlmICghc3MucykKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTgzNCw2ICsxODI5LDggQEAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnZhciwgc2VnKTsKIAlycGwgPSB2YXIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKIAorCWlmICh2YXIudW51c2FibGUpCisJCXJldHVybiB0cnVlOwogCWlmICghdmFyLnMpCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXZhci5wcmVzZW50KQpAQCAtMTg1NSw5ICsxODUyLDExIEBACiAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnRyLCBWQ1BVX1NSRUdfVFIpOwogCisJaWYgKHRyLnVudXNhYmxlKQorCQlyZXR1cm4gZmFsc2U7CiAJaWYgKHRyLnNlbGVjdG9yICYgU0VMRUNUT1JfVElfTUFTSykJLyogVEkgPSAxICovCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoKHRyLnR5cGUgIT0gMykgfHwgKHRyLnR5cGUgIT0gMTEpKSAvKiBUT0RPOiBDaGVjayBpZiBndWVzdCBpcyBpbiBJQTMyZSBtb2RlICovCisJaWYgKHRyLnR5cGUgIT0gMyAmJiB0ci50eXBlICE9IDExKSAvKiBUT0RPOiBDaGVjayBpZiBndWVzdCBpcyBpbiBJQTMyZSBtb2RlICovCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXRyLnByZXNlbnQpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE4NzEsNiArMTg3MCw4IEBACiAKIAl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmxkdHIsIFZDUFVfU1JFR19MRFRSKTsKIAorCWlmIChsZHRyLnVudXNhYmxlKQorCQlyZXR1cm4gdHJ1ZTsKIAlpZiAobGR0ci5zZWxlY3RvciAmIFNFTEVDVE9SX1RJX01BU0spCS8qIFRJID0gMSAqLwogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGxkdHIudHlwZSAhPSAyKQpAQCAtMjExMiw3ICsyMTEzLDcgQEAKIHsKIAl1MzIgaG9zdF9zeXNlbnRlcl9jcywgbXNyX2xvdywgbXNyX2hpZ2g7CiAJdTMyIGp1bms7Ci0JdTY0IGhvc3RfcGF0OworCXU2NCBob3N0X3BhdCwgdHNjX3RoaXMsIHRzY19iYXNlOwogCXVuc2lnbmVkIGxvbmcgYTsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdDsKIAlpbnQgaTsKQEAgLTIyNDAsNiArMjI0MSwxMiBAQAogCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH4wVUwpOwogCXZtY3Nfd3JpdGVsKENSNF9HVUVTVF9IT1NUX01BU0ssIEtWTV9HVUVTVF9DUjRfTUFTSyk7CiAKKwl0c2NfYmFzZSA9IHZteC0+dmNwdS5rdm0tPmFyY2gudm1faW5pdF90c2M7CisJcmR0c2NsbCh0c2NfdGhpcyk7CisJaWYgKHRzY190aGlzIDwgdm14LT52Y3B1Lmt2bS0+YXJjaC52bV9pbml0X3RzYykKKwkJdHNjX2Jhc2UgPSB0c2NfdGhpczsKKworCWd1ZXN0X3dyaXRlX3RzYygwLCB0c2NfYmFzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMTksNyArMjMyNiw2IEBACiAJCWt2bV9yaXBfd3JpdGUodmNwdSwgMCk7CiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIDApOwogCi0JLyogdG9kbzogZHIwID0gZHIxID0gZHIyID0gZHIzID0gMDsgZHI2ID0gMHhmZmZmMGZmMCAqLwogCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgMHg0MDApOwogCiAJdm1jc193cml0ZWwoR1VFU1RfR0RUUl9CQVNFLCAwKTsKQEAgLTIzMzIsOCArMjMzOCw2IEBACiAJdm1jc193cml0ZTMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywgMCk7CiAJdm1jc193cml0ZTMyKEdVRVNUX1BFTkRJTkdfREJHX0VYQ0VQVElPTlMsIDApOwogCi0JZ3Vlc3Rfd3JpdGVfdHNjKDApOwotCiAJLyogU3BlY2lhbCByZWdpc3RlcnMgKi8KIAl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9ERUJVR0NUTCwgMCk7CiAKQEAgLTI0ODYsNiArMjQ5MCwxMSBAQAogewogCXZteF91cGRhdGVfd2luZG93X3N0YXRlcyh2Y3B1KTsKIAorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQl2bWNzX2NsZWFyX2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfU1RJIHwKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX01PVl9TUyk7CisKIAlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZyAmJiAhdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKIAkJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcpIHsKIAkJCWVuYWJsZV9ubWlfd2luZG93KHZjcHUpOwpAQCAtMjUzNiwyNCArMjU0NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9ndWVzdF9kZWJ1Z19wcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyA9ICZ2Y3B1LT5ndWVzdF9kZWJ1ZzsKLQotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzBdLCAwKTsKLQlzZXRfZGVidWdyZWcoZGJnLT5icFsxXSwgMSk7Ci0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbMl0sIDIpOwotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzNdLCAzKTsKLQotCWlmIChkYmctPnNpbmdsZXN0ZXApIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKLQkJZmxhZ3MgfD0gWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkY7Ci0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwotCX0KLX0KLQogc3RhdGljIGludCBoYW5kbGVfcm1vZGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgIGludCB2ZWMsIHUzMiBlcnJfY29kZSkKIHsKQEAgLTI1NzAsOSArMjU2MSwxNyBAQAogCSAqICAgICAgICB0aGUgcmVxdWlyZWQgZGVidWdnaW5nIGluZnJhc3RydWN0dXJlIHJld29yay4KIAkgKi8KIAlzd2l0Y2ggKHZlYykgewotCWNhc2UgREVfVkVDVE9SOgogCWNhc2UgREJfVkVDVE9SOgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQlyZXR1cm4gMDsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCB2ZWMpOworCQlyZXR1cm4gMTsKIAljYXNlIEJQX1ZFQ1RPUjoKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIERFX1ZFQ1RPUjoKIAljYXNlIE9GX1ZFQ1RPUjoKIAljYXNlIEJSX1ZFQ1RPUjoKIAljYXNlIFVEX1ZFQ1RPUjoKQEAgLTI1ODksOCArMjU4OCw4IEBACiBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1MzIgaW50cl9pbmZvLCBlcnJvcl9jb2RlOwotCXVuc2lnbmVkIGxvbmcgY3IyLCByaXA7CisJdTMyIGludHJfaW5mbywgZXhfbm8sIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBjcjIsIHJpcCwgZHI2OwogCXUzMiB2ZWN0X2luZm87CiAJZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOwogCkBAIC0yNjQ5LDE0ICsyNjQ4LDMwIEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmICgoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSykpID09Ci0JICAgIChJTlRSX1RZUEVfRVhDRVBUSU9OIHwgMSkpIHsKKwlleF9ubyA9IGludHJfaW5mbyAmIElOVFJfSU5GT19WRUNUT1JfTUFTSzsKKwlzd2l0Y2ggKGV4X25vKSB7CisJY2FzZSBEQl9WRUNUT1I6CisJCWRyNiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKKwkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkpIHsKKwkJCXZjcHUtPmFyY2guZHI2ID0gZHI2IHwgRFI2X0ZJWEVEXzE7CisJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIERCX1ZFQ1RPUik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNiA9IGRyNiB8IERSNl9GSVhFRF8xOworCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNyA9IHZtY3NfcmVhZGwoR1VFU1RfRFI3KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBCUF9WRUNUT1I6CiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7Ci0JCXJldHVybiAwOworCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gdm1jc19yZWFkbChHVUVTVF9DU19CQVNFKSArIHJpcDsKKwkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBleF9ubzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9FWENFUFRJT047CisJCWt2bV9ydW4tPmV4LmV4Y2VwdGlvbiA9IGV4X25vOworCQlrdm1fcnVuLT5leC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwkJYnJlYWs7CiAJfQotCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRVhDRVBUSU9OOwotCWt2bV9ydW4tPmV4LmV4Y2VwdGlvbiA9IGludHJfaW5mbyAmIElOVFJfSU5GT19WRUNUT1JfTUFTSzsKLQlrdm1fcnVuLT5leC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY3Nyw3ICsyNjkyLDcgQEAKIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb247Ci0JaW50IHNpemUsIGRvd24sIGluLCBzdHJpbmcsIHJlcDsKKwlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCiAJKyt2Y3B1LT5zdGF0LmlvX2V4aXRzOwpAQCAtMjY5Myw4ICsyNzA4LDYgQEAKIAogCXNpemUgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgNykgKyAxOwogCWluID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDgpICE9IDA7Ci0JZG93biA9ICh2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUykgJiBYODZfRUZMQUdTX0RGKSAhPSAwOwotCXJlcCA9IChleGl0X3F1YWxpZmljYXRpb24gJiAzMikgIT0gMDsKIAlwb3J0ID0gZXhpdF9xdWFsaWZpY2F0aW9uID4+IDE2OwogCiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKQEAgLTI3OTUsMjEgKzI4MDgsNDQgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgZHIsIHJlZzsKIAotCS8qCi0JICogRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBob3N0IGlzIGRlYnVnZ2luZyB0aGUgZ3Vlc3QuCi0JICogICAgICAgIG5lZWQgdG8gZGVhbCB3aXRoIGd1ZXN0IGRlYnVnZ2luZyBpdHNlbGYgdG9vLgotCSAqLworCWRyID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOworCWlmIChkciAmIERSN19HRCkgeworCQkvKgorCQkgKiBBcyB0aGUgdm0tZXhpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGRlYnVnIHRyYXAsIHdlCisJCSAqIG5lZWQgdG8gZW11bGF0ZSB0aGUgbGF0dGVyLCBlaXRoZXIgZm9yIHRoZSBob3N0IG9yIHRoZQorCQkgKiBndWVzdCBkZWJ1Z2dpbmcgaXRzZWxmLgorCQkgKi8KKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkgeworCQkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5kcjYgPSB2Y3B1LT5hcmNoLmRyNjsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI3ID0gZHI7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0KKwkJCQl2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpICsKKwkJCQl2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IERCX1ZFQ1RPUjsKKwkJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXZjcHUtPmFyY2guZHI3ICY9IH5EUjdfR0Q7CisJCQl2Y3B1LT5hcmNoLmRyNiB8PSBEUjZfQkQ7CisJCQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZjcHUtPmFyY2guZHI3KTsKKwkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCiAJZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwotCWRyID0gZXhpdF9xdWFsaWZpY2F0aW9uICYgNzsKLQlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uID4+IDgpICYgMTU7Ci0JaWYgKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDE2KSB7Ci0JCS8qIG1vdiBmcm9tIGRyICovCisJZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiBERUJVR19SRUdfQUNDRVNTX05VTTsKKwlyZWcgPSBERUJVR19SRUdfQUNDRVNTX1JFRyhleGl0X3F1YWxpZmljYXRpb24pOworCWlmIChleGl0X3F1YWxpZmljYXRpb24gJiBUWVBFX01PVl9GUk9NX0RSKSB7CiAJCXN3aXRjaCAoZHIpIHsKKwkJY2FzZSAwIC4uLiAzOgorCQkJdmFsID0gdmNwdS0+YXJjaC5kYltkcl07CisJCQlicmVhazsKIAkJY2FzZSA2OgotCQkJdmFsID0gMHhmZmZmMGZmMDsKKwkJCXZhbCA9IHZjcHUtPmFyY2guZHI2OwogCQkJYnJlYWs7CiAJCWNhc2UgNzoKLQkJCXZhbCA9IDB4NDAwOworCQkJdmFsID0gdmNwdS0+YXJjaC5kcjc7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXZhbCA9IDA7CkBAIC0yODE3LDcgKzI4NTMsMzggQEAKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKIAkJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0gZWxzZSB7Ci0JCS8qIG1vdiB0byBkciAqLworCQl2YWwgPSB2Y3B1LT5hcmNoLnJlZ3NbcmVnXTsKKwkJc3dpdGNoIChkcikgeworCQljYXNlIDAgLi4uIDM6CisJCQl2Y3B1LT5hcmNoLmRiW2RyXSA9IHZhbDsKKwkJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQkJdmNwdS0+YXJjaC5lZmZfZGJbZHJdID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgNCAuLi4gNToKKwkJCWlmICh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfREUpCisJCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmICh2YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKKwkJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEdQX1ZFQ1RPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQl2Y3B1LT5hcmNoLmRyNiA9ICh2YWwgJiBEUjZfVk9MQVRJTEUpIHwgRFI2X0ZJWEVEXzE7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgeworCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgR1BfVkVDVE9SKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZjcHUtPmFyY2guZHI3ID0gKHZhbCAmIERSN19WT0xBVElMRSkgfCBEUjdfRklYRURfMTsKKwkJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpIHsKKwkJCQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZjcHUtPmFyY2guZHI3KTsKKwkJCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0KKwkJCQkJKHZhbCAmIERSN19CUF9FTl9NQVNLKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCUtWTVRSQUNFXzJEKERSX1dSSVRFLCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CiAJfQogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJcmV0dXJuIDE7CkBAIC0yOTY4LDE3ICszMDM1LDI1IEBACiAJfQogCXRzc19zZWxlY3RvciA9IGV4aXRfcXVhbGlmaWNhdGlvbjsKIAotCXJldHVybiBrdm1fdGFza19zd2l0Y2godmNwdSwgdHNzX3NlbGVjdG9yLCByZWFzb24pOworCWlmICgha3ZtX3Rhc2tfc3dpdGNoKHZjcHUsIHRzc19zZWxlY3RvciwgcmVhc29uKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjbGVhciBhbGwgbG9jYWwgYnJlYWtwb2ludCBlbmFibGUgZmxhZ3MgKi8KKwl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZtY3NfcmVhZGwoR1VFU1RfRFI3KSAmIH41NSk7CisKKwkvKgorCSAqIFRPRE86IFdoYXQgYWJvdXQgZGVidWcgdHJhcHMgb24gdHNzIHN3aXRjaD8KKwkgKiAgICAgICBBcmUgd2Ugc3VwcG9zZWQgdG8gaW5qZWN0IHRoZW0gYW5kIHVwZGF0ZSBkcjY/CisJICovCisKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXU2NCBleGl0X3F1YWxpZmljYXRpb247Ci0JZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOwogCWdwYV90IGdwYTsKLQl1bnNpZ25lZCBsb25nIGh2YTsKIAlpbnQgZ2xhX3ZhbGlkaXR5OwotCWludCByOwogCiAJZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkNjQoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKIApAQCAtMzAwMSwzMiArMzA3Niw3IEBACiAJfQogCiAJZ3BhID0gdm1jc19yZWFkNjQoR1VFU1RfUEhZU0lDQUxfQUREUkVTUyk7Ci0JaHZhID0gZ2ZuX3RvX2h2YSh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKLQlpZiAoIWt2bV9pc19lcnJvcl9odmEoaHZhKSkgewotCQlyID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSAmIFBBR0VfTUFTSywgMCk7Ci0JCWlmIChyIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IE5vdCBlbm91Z2ggbWVtb3J5IVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQkvKiBtdXN0IGJlIE1NSU8gKi8KLQkJZXIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGt2bV9ydW4sIDAsIDAsIDApOwotCi0JCWlmIChlciA9PSBFTVVMQVRFX0ZBSUwpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICJFUFQ6IEZhaWwgdG8gaGFuZGxlIEVQVCB2aW9sYXRpb24gdm1leGl0IWVyIGlzICVkXG4iLAotCQkJIGVyKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBHUEE6IDB4JWx4LCBHVkE6IDB4JWx4XG4iLAotCQkJIChsb25nIHVuc2lnbmVkIGludCl2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKSwKLQkJCSAobG9uZyB1bnNpZ25lZCBpbnQpdm1jc19yZWFkNjQoR1VFU1RfTElORUFSX0FERFJFU1MpKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBFeGl0IHF1YWxpZmljYXRpb24gaXMgMHglbHhcbiIsCi0JCQkJKGxvbmcgdW5zaWduZWQgaW50KWV4aXRfcXVhbGlmaWNhdGlvbik7Ci0JCQlyZXR1cm4gLUVOT1RTVVBQOwotCQl9IGVsc2UgaWYgKGVyID09IEVNVUxBVEVfRE9fTU1JTykKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSAmIFBBR0VfTUFTSywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKQEAgLTMwNDYsNyArMzA5Niw3IEBACiAJCQkJc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JaW50IGVycjsKKwllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXJyID0gRU1VTEFURV9ET05FOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0zMDcxLDEwICszMTIxLDcgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCi0JLyogR3Vlc3Qgc3RhdGUgc2hvdWxkIGJlIHZhbGlkIG5vdyBleGNlcHQgaWYgd2UgbmVlZCB0bwotCSAqIGVtdWxhdGUgYW4gTU1JTyAqLwotCWlmIChndWVzdF9zdGF0ZV92YWxpZCh2Y3B1KSkKLQkJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAwOworCXZteC0+aW52YWxpZF9zdGF0ZV9lbXVsYXRpb25fcmVzdWx0ID0gZXJyOwogfQogCiAvKgpAQCAtMzEyMyw4ICszMTcwLDExIEBACiAKIAkvKiBJZiB3ZSBuZWVkIHRvIGVtdWxhdGUgYW4gTU1JTyBmcm9tIGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlCiAJICogd2UganVzdCByZXR1cm4gMCAqLwotCWlmICh2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCAmJiBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpCi0JCXJldHVybiAwOworCWlmICh2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCAmJiBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpIHsKKwkJaWYgKGd1ZXN0X3N0YXRlX3ZhbGlkKHZjcHUpKQorCQkJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAwOworCQlyZXR1cm4gdm14LT5pbnZhbGlkX3N0YXRlX2VtdWxhdGlvbl9yZXN1bHQgIT0gRU1VTEFURV9ET19NTUlPOworCX0KIAogCS8qIEFjY2VzcyBDUjMgZG9uJ3QgY2F1c2UgVk1FeGl0IGluIHBhZ2luZyBtb2RlLCBzbyB3ZSBuZWVkCiAJICogdG8gc3luYyB3aXRoIGd1ZXN0IHJlYWwgQ1IzLiAqLwpAQCAtMzIzOCw3ICszMjg4LDggQEAKIAkJCXZteC0+dmNwdS5hcmNoLm5taV9pbmplY3RlZCA9IGZhbHNlOwogCX0KIAlrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKCZ2bXgtPnZjcHUpOwotCWlmIChpZHR2X2luZm9fdmFsaWQgJiYgdHlwZSA9PSBJTlRSX1RZUEVfRVhDRVBUSU9OKSB7CisJaWYgKGlkdHZfaW5mb192YWxpZCAmJiAodHlwZSA9PSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfHwKKwkJCQl0eXBlID09IElOVFJfVFlQRV9TT0ZUX0VYQ0VQVElPTikpIHsKIAkJaWYgKGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSB7CiAJCQllcnJvciA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSk7CiAJCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UoJnZteC0+dmNwdSwgdmVjdG9yLCBlcnJvcik7CkBAIC0zMjU5LDYgKzMzMTAsMTEgQEAKIAogCXZteF91cGRhdGVfd2luZG93X3N0YXRlcyh2Y3B1KTsKIAorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQl2bWNzX2NsZWFyX2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfU1RJIHwKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX01PVl9TUyk7CisKIAlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZyAmJiAhdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKIAkJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcpIHsKIAkJCWVuYWJsZV9ubWlfd2luZG93KHZjcHUpOwpAQCAtMzM0Nyw2ICszNDAzLDggQEAKIAkgKi8KIAl2bWNzX3dyaXRlbChIT1NUX0NSMCwgcmVhZF9jcjAoKSk7CiAKKwlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5kcjYsIDYpOworCiAJYXNtKAogCQkvKiBTdG9yZSBob3N0IHJlZ2lzdGVycyAqLwogCQkicHVzaCAlJSJSImR4OyBwdXNoICUlIlIiYnA7IgpAQCAtMzQ0MSw2ICszNDk5LDggQEAKIAl2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwgPSB+KCgxIDw8IFZDUFVfUkVHU19SSVApIHwgKDEgPDwgVkNQVV9SRUdTX1JTUCkpOwogCXZjcHUtPmFyY2gucmVnc19kaXJ0eSA9IDA7CiAKKwlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5kcjYsIDYpOworCiAJdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwogCWlmICh2bXgtPnJtb2RlLmlycS5wZW5kaW5nKQogCQlmaXh1cF9ybW9kZV9pcnEodm14KTsKQEAgLTM1OTUsNyArMzY1NSw2IEBACiAJLnZjcHVfcHV0ID0gdm14X3ZjcHVfcHV0LAogCiAJLnNldF9ndWVzdF9kZWJ1ZyA9IHNldF9ndWVzdF9kZWJ1ZywKLQkuZ3Vlc3RfZGVidWdfcHJlID0ga3ZtX2d1ZXN0X2RlYnVnX3ByZSwKIAkuZ2V0X21zciA9IHZteF9nZXRfbXNyLAogCS5zZXRfbXNyID0gdm14X3NldF9tc3IsCiAJLmdldF9zZWdtZW50X2Jhc2UgPSB2bXhfZ2V0X3NlZ21lbnRfYmFzZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3NThiN2ExLi44Y2ExMDBhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KQEAgLTY5LDYgKzcwLDggQEAKIAogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2dldF9zdXBwb3J0ZWRfY3B1aWQoc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAogCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpOworc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmt2bV9maW5kX2NwdWlkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICAgICAgdTMyIGZ1bmN0aW9uLCB1MzIgaW5kZXgpOwogCiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKmt2bV94ODZfb3BzOwogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3g4Nl9vcHMpOwpAQCAtMTczLDYgKzE3Niw3IEBACiAJCQkgICB1MzIgZXJyb3JfY29kZSkKIHsKIAkrK3ZjcHUtPnN0YXQucGZfZ3Vlc3Q7CisKIAlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykgewogCQlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPT0gUEZfVkVDVE9SKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAia3ZtOiBpbmplY3RfcGFnZV9mYXVsdDoiCkBAIC0zNjEsNiArMzY1LDcgQEAKIAl9CiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjQodmNwdSwgY3I0KTsKIAl2Y3B1LT5hcmNoLmNyNCA9IGNyNDsKKwl2Y3B1LT5hcmNoLm1tdS5iYXNlX3JvbGUuY3I0X3BnZSA9IChjcjQgJiBYODZfQ1I0X1BHRSkgJiYgIXRkcF9lbmFibGVkOwogCWt2bV9tbXVfc3luY19nbG9iYWwodmNwdSk7CiAJa3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpOwogfQpAQCAtNDQyLDYgKzQ0NywxMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9jcjgpOwogCitzdGF0aWMgaW5saW5lIHUzMiBiaXQoaW50IGJpdG5vKQoreworCXJldHVybiAxIDw8IChiaXRubyAmIDMxKTsKK30KKwogLyoKICAqIExpc3Qgb2YgbXNyIG51bWJlcnMgd2hpY2ggd2UgZXhwb3NlIHRvIHVzZXJzcGFjZSB0aHJvdWdoIEtWTV9HRVRfTVNSUwogICogYW5kIEtWTV9TRVRfTVNSUywgYW5kIEtWTV9HRVRfTVNSX0lOREVYX0xJU1QuCkBAIC00NTYsNyArNDY2LDcgQEAKIAlNU1JfQ1NUQVIsIE1TUl9LRVJORUxfR1NfQkFTRSwgTVNSX1NZU0NBTExfTUFTSywgTVNSX0xTVEFSLAogI2VuZGlmCiAJTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSLCBNU1JfS1ZNX1NZU1RFTV9USU1FLCBNU1JfS1ZNX1dBTExfQ0xPQ0ssCi0JTVNSX0lBMzJfUEVSRl9TVEFUVVMsIE1TUl9JQTMyX0NSX1BBVAorCU1TUl9JQTMyX1BFUkZfU1RBVFVTLCBNU1JfSUEzMl9DUl9QQVQsIE1TUl9WTV9IU0FWRV9QQQogfTsKIAogc3RhdGljIHVuc2lnbmVkIG51bV9tc3JzX3RvX3NhdmU7CkBAIC00ODEsNiArNDkxLDI4IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoZWZlciAmIEVGRVJfRkZYU1IpIHsKKwkJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmZlYXQ7CisKKwkJZmVhdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDEsIDApOworCQlpZiAoIWZlYXQgfHwgIShmZWF0LT5lZHggJiBiaXQoWDg2X0ZFQVRVUkVfRlhTUl9PUFQpKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9lZmVyOiAjR1AsIGVuYWJsZSBGRlhTUiB3L28gQ1BVSUQgY2FwYWJpbGl0eVxuIik7CisJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGVmZXIgJiBFRkVSX1NWTUUpIHsKKwkJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmZlYXQ7CisKKwkJZmVhdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDEsIDApOworCQlpZiAoIWZlYXQgfHwgIShmZWF0LT5lY3ggJiBiaXQoWDg2X0ZFQVRVUkVfU1ZNKSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfZWZlcjogI0dQLCBlbmFibGUgU1ZNIHcvbyBTVk1cbiIpOworCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwogCWt2bV94ODZfb3BzLT5zZXRfZWZlcih2Y3B1LCBlZmVyKTsKIAogCWVmZXIgJj0gfkVGRVJfTE1BOwpAQCAtNTg2LDYgKzYxOCw4IEBACiAJCSBodl9jbG9jay0+dHNjX3RvX3N5c3RlbV9tdWwpOwogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgY3B1X3RzY19raHopOworCiBzdGF0aWMgdm9pZCBrdm1fd3JpdGVfZ3Vlc3RfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwpAQCAtNTk2LDkgKzYzMCw5IEBACiAJaWYgKCghdmNwdS0+dGltZV9wYWdlKSkKIAkJcmV0dXJuOwogCi0JaWYgKHVubGlrZWx5KHZjcHUtPmh2X2Nsb2NrX3RzY19raHogIT0gdHNjX2toeikpIHsKLQkJa3ZtX3NldF90aW1lX3NjYWxlKHRzY19raHosICZ2Y3B1LT5odl9jbG9jayk7Ci0JCXZjcHUtPmh2X2Nsb2NrX3RzY19raHogPSB0c2Nfa2h6OworCWlmICh1bmxpa2VseSh2Y3B1LT5odl9jbG9ja190c2Nfa2h6ICE9IF9fZ2V0X2NwdV92YXIoY3B1X3RzY19raHopKSkgeworCQlrdm1fc2V0X3RpbWVfc2NhbGUoX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeiksICZ2Y3B1LT5odl9jbG9jayk7CisJCXZjcHUtPmh2X2Nsb2NrX3RzY19raHogPSBfX2dldF9jcHVfdmFyKGNwdV90c2Nfa2h6KTsKIAl9CiAKIAkvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovCkBAIC02MjksNiArNjYzLDE2IEBACiAJbWFya19wYWdlX2RpcnR5KHYtPmt2bSwgdmNwdS0+dGltZSA+PiBQQUdFX1NISUZUKTsKIH0KIAorc3RhdGljIGludCBrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCit7CisJc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZjcHUgPSAmdi0+YXJjaDsKKworCWlmICghdmNwdS0+dGltZV9wYWdlKQorCQlyZXR1cm4gMDsKKwlzZXRfYml0KEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFLCAmdi0+cmVxdWVzdHMpOworCXJldHVybiAxOworfQorCiBzdGF0aWMgYm9vbCBtc3JfbXRycl92YWxpZCh1bnNpZ25lZCBtc3IpCiB7CiAJc3dpdGNoIChtc3IpIHsKQEAgLTcyMiw2ICs3NjYsNyBAQAogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1dSSVRFOgorCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgogCQlicmVhazsKIAljYXNlIDB4MjAwIC4uLiAweDJmZjoKIAkJcmV0dXJuIHNldF9tc3JfbXRycih2Y3B1LCBtc3IsIGRhdGEpOwpAQCAtNzU4LDcgKzgwMyw3IEBACiAJCQl2Y3B1LT5hcmNoLnRpbWVfcGFnZSA9IE5VTEw7CiAJCX0KIAotCQlrdm1fd3JpdGVfZ3Vlc3RfdGltZSh2Y3B1KTsKKwkJa3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUodmNwdSk7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpAQCAtODQzLDYgKzg4OCw3IEBACiAJY2FzZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUDoKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRGUk9NSVA6CiAJY2FzZSBNU1JfSUEzMl9MQVNUSU5UVE9JUDoKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKIAkJZGF0YSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTVNSX01UUlJjYXA6CkBAIC05NjcsMTAgKzEwMTMsMTMgQEAKIAljYXNlIEtWTV9DQVBfTU1VX1NIQURPV19DQUNIRV9DT05UUk9MOgogCWNhc2UgS1ZNX0NBUF9TRVRfVFNTX0FERFI6CiAJY2FzZSBLVk1fQ0FQX0VYVF9DUFVJRDoKKwljYXNlIEtWTV9DQVBfQ0xPQ0tTT1VSQ0U6CiAJY2FzZSBLVk1fQ0FQX1BJVDoKIAljYXNlIEtWTV9DQVBfTk9QX0lPX0RFTEFZOgogCWNhc2UgS1ZNX0NBUF9NUF9TVEFURToKIAljYXNlIEtWTV9DQVBfU1lOQ19NTVU6CisJY2FzZSBLVk1fQ0FQX1JFSU5KRUNUX0NPTlRST0w6CisJY2FzZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgpAQCAtOTkxLDkgKzEwNDAsNiBAQAogCWNhc2UgS1ZNX0NBUF9JT01NVToKIAkJciA9IGlvbW11X2ZvdW5kKCk7CiAJCWJyZWFrOwotCWNhc2UgS1ZNX0NBUF9DTE9DS1NPVVJDRToKLQkJciA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gMDsKIAkJYnJlYWs7CkBAIC0xMDQ0LDcgKzEwOTAsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNwdWlkLCBjcHVpZF9hcmcsIHNpemVvZiBjcHVpZCkpCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZCgmY3B1aWQsCi0JCQljcHVpZF9hcmctPmVudHJpZXMpOworCQkJCQkJICAgICAgY3B1aWRfYXJnLT5lbnRyaWVzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIApAQCAtMTA2NCw3ICsxMTEwLDcgQEAKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlrdm1feDg2X29wcy0+dmNwdV9sb2FkKHZjcHUsIGNwdSk7Ci0Ja3ZtX3dyaXRlX2d1ZXN0X3RpbWUodmNwdSk7CisJa3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUodmNwdSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTE0Miw4ICsxMTg4LDggQEAKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9zZXRfY3B1aWQyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJaW50IHI7CiAKQEAgLTExNjIsOCArMTIwOCw4IEBACiB9CiAKIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X2NwdWlkMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQogewogCWludCByOwogCkBAIC0xMTcyLDcgKzEyMTgsNyBAQAogCQlnb3RvIG91dDsKIAlyID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKGVudHJpZXMsICZ2Y3B1LT5hcmNoLmNwdWlkX2VudHJpZXMsCi0JCQkgICB2Y3B1LT5hcmNoLmNwdWlkX25lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKKwkJCSB2Y3B1LT5hcmNoLmNwdWlkX25lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKIAkJZ290byBvdXQ7CiAJcmV0dXJuIDA7CiAKQEAgLTExODEsMTggKzEyMjcsMTMgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgYml0KGludCBiaXRubykKLXsKLQlyZXR1cm4gMSA8PCAoYml0bm8gJiAzMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvX2NwdWlkXzFfZW50KHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplbnRyeSwgdTMyIGZ1bmN0aW9uLAotCQkJICB1MzIgaW5kZXgpCisJCQkgICB1MzIgaW5kZXgpCiB7CiAJZW50cnktPmZ1bmN0aW9uID0gZnVuY3Rpb247CiAJZW50cnktPmluZGV4ID0gaW5kZXg7CiAJY3B1aWRfY291bnQoZW50cnktPmZ1bmN0aW9uLCBlbnRyeS0+aW5kZXgsCi0JCSZlbnRyeS0+ZWF4LCAmZW50cnktPmVieCwgJmVudHJ5LT5lY3gsICZlbnRyeS0+ZWR4KTsKKwkJICAgICZlbnRyeS0+ZWF4LCAmZW50cnktPmVieCwgJmVudHJ5LT5lY3gsICZlbnRyeS0+ZWR4KTsKIAllbnRyeS0+ZmxhZ3MgPSAwOwogfQogCkBAIC0xMjIyLDE1ICsxMjYzLDE3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCQliaXQoWDg2X0ZFQVRVUkVfTE0pIHwKICNlbmRpZgorCQliaXQoWDg2X0ZFQVRVUkVfRlhTUl9PUFQpIHwKIAkJYml0KFg4Nl9GRUFUVVJFX01NWEVYVCkgfAogCQliaXQoWDg2X0ZFQVRVUkVfM0ROT1dFWFQpIHwKIAkJYml0KFg4Nl9GRUFUVVJFXzNETk9XKTsKIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkM194ODZfZmVhdHVyZXMgPQogCQliaXQoWDg2X0ZFQVRVUkVfWE1NMykgfCBiaXQoWDg2X0ZFQVRVUkVfQ1gxNik7CiAJY29uc3QgdTMyIGt2bV9zdXBwb3J0ZWRfd29yZDZfeDg2X2ZlYXR1cmVzID0KLQkJYml0KFg4Nl9GRUFUVVJFX0xBSEZfTE0pIHwgYml0KFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kpOworCQliaXQoWDg2X0ZFQVRVUkVfTEFIRl9MTSkgfCBiaXQoWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWSkgfAorCQliaXQoWDg2X0ZFQVRVUkVfU1ZNKTsKIAotCS8qIGFsbCBmdW5jIDIgY3B1aWRfY291bnQoKSBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBzYW1lIGNwdSAqLworCS8qIGFsbCBjYWxscyB0byBjcHVpZF9jb3VudCgpIHNob3VsZCBiZSBtYWRlIG9uIHRoZSBzYW1lIGNwdSAqLwogCWdldF9jcHUoKTsKIAlkb19jcHVpZF8xX2VudChlbnRyeSwgZnVuY3Rpb24sIGluZGV4KTsKIAkrKypuZW50OwpAQCAtMTMwNCw3ICsxMzQ3LDcgQEAKIH0KIAogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2dldF9zdXBwb3J0ZWRfY3B1aWQoc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmNwdWlkX2VudHJpZXM7CiAJaW50IGxpbWl0LCBuZW50ID0gMCwgciA9IC1FMkJJRzsKQEAgLTEzMjEsNyArMTM2NCw3IEBACiAJbGltaXQgPSBjcHVpZF9lbnRyaWVzWzBdLmVheDsKIAlmb3IgKGZ1bmMgPSAxOyBmdW5jIDw9IGxpbWl0ICYmIG5lbnQgPCBjcHVpZC0+bmVudDsgKytmdW5jKQogCQlkb19jcHVpZF9lbnQoJmNwdWlkX2VudHJpZXNbbmVudF0sIGZ1bmMsIDAsCi0JCQkJJm5lbnQsIGNwdWlkLT5uZW50KTsKKwkJCSAgICAgJm5lbnQsIGNwdWlkLT5uZW50KTsKIAlyID0gLUUyQklHOwogCWlmIChuZW50ID49IGNwdWlkLT5uZW50KQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMTMzMCwxMCArMTM3MywxMCBAQAogCWxpbWl0ID0gY3B1aWRfZW50cmllc1tuZW50IC0gMV0uZWF4OwogCWZvciAoZnVuYyA9IDB4ODAwMDAwMDE7IGZ1bmMgPD0gbGltaXQgJiYgbmVudCA8IGNwdWlkLT5uZW50OyArK2Z1bmMpCiAJCWRvX2NwdWlkX2VudCgmY3B1aWRfZW50cmllc1tuZW50XSwgZnVuYywgMCwKLQkJCSAgICAgICAmbmVudCwgY3B1aWQtPm5lbnQpOworCQkJICAgICAmbmVudCwgY3B1aWQtPm5lbnQpOwogCXIgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoZW50cmllcywgY3B1aWRfZW50cmllcywKLQkJCW5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKKwkJCSBuZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJY3B1aWQtPm5lbnQgPSBuZW50OwogCXIgPSAwOwpAQCAtMTQ3Nyw3ICsxNTIwLDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjcHVpZCwgY3B1aWRfYXJnLCBzaXplb2YgY3B1aWQpKQogCQkJZ290byBvdXQ7CiAJCXIgPSBrdm1fdmNwdV9pb2N0bF9zZXRfY3B1aWQyKHZjcHUsICZjcHVpZCwKLQkJCQljcHVpZF9hcmctPmVudHJpZXMpOworCQkJCQkgICAgICBjcHVpZF9hcmctPmVudHJpZXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKQEAgLTE0OTAsNyArMTUzMyw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY3B1aWQsIGNwdWlkX2FyZywgc2l6ZW9mIGNwdWlkKSkKIAkJCWdvdG8gb3V0OwogCQlyID0ga3ZtX3ZjcHVfaW9jdGxfZ2V0X2NwdWlkMih2Y3B1LCAmY3B1aWQsCi0JCQkJY3B1aWRfYXJnLT5lbnRyaWVzKTsKKwkJCQkJICAgICAgY3B1aWRfYXJnLT5lbnRyaWVzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FRkFVTFQ7CkBAIC0xNzEwLDYgKzE3NTMsMTUgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCBrdm1fdm1faW9jdGxfcmVpbmplY3Qoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSBzdHJ1Y3Qga3ZtX3JlaW5qZWN0X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJaWYgKCFrdm0tPmFyY2gudnBpdCkKKwkJcmV0dXJuIC1FTlhJTzsKKwlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5yZWluamVjdCA9IGNvbnRyb2wtPnBpdF9yZWluamVjdDsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEdldCAoYW5kIGNsZWFyKSB0aGUgZGlydHkgbWVtb3J5IGxvZyBmb3IgYSBtZW1vcnkgc2xvdC4KICAqLwpAQCAtMTgwNywxMyArMTg1OSwyNiBAQAogCQkJfQogCQl9IGVsc2UKIAkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoa3ZtKTsKKwkJaWYgKHIpIHsKKwkJCWtmcmVlKGt2bS0+YXJjaC52cGljKTsKKwkJCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NSRUFURV9QSVQ6CisJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCXIgPSAtRUVYSVNUOworCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCisJCQlnb3RvIGNyZWF0ZV9waXRfdW5sb2NrOwogCQlyID0gLUVOT01FTTsKIAkJa3ZtLT5hcmNoLnZwaXQgPSBrdm1fY3JlYXRlX3BpdChrdm0pOwogCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCiAJCQlyID0gMDsKKwljcmVhdGVfcGl0X3VubG9jazoKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCQlicmVhazsKKwljYXNlIEtWTV9JUlFfTElORV9TVEFUVVM6CiAJY2FzZSBLVk1fSVJRX0xJTkU6IHsKIAkJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxX2V2ZW50OwogCkBAIC0xODIxLDEwICsxODg2LDE3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxX2V2ZW50LCBhcmdwLCBzaXplb2YgaXJxX2V2ZW50KSkKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQkJX19zMzIgc3RhdHVzOwogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAotCQkJCSAgICBpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOworCQkJc3RhdHVzID0ga3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCisJCQkJCWlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCQlpZiAoaW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUykgeworCQkJCWlycV9ldmVudC5zdGF0dXMgPSBzdGF0dXM7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaXJxX2V2ZW50LAorCQkJCQkJCXNpemVvZiBpcnFfZXZlbnQpKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCXIgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMTkwNyw2ICsxOTc5LDE3IEBACiAJCXIgPSAwOwogCQlicmVhazsKIAl9CisJY2FzZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTDogeworCQlzdHJ1Y3Qga3ZtX3JlaW5qZWN0X2NvbnRyb2wgY29udHJvbDsKKwkJciA9ICAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbnRyb2wsIGFyZ3AsIHNpemVvZihjb250cm9sKSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92bV9pb2N0bF9yZWluamVjdChrdm0sICZjb250cm9sKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQk7CiAJfQpAQCAtMTk2MCwxMCArMjA0Myw4IEBACiAJcmV0dXJuIGRldjsKIH0KIAotaW50IGVtdWxhdG9yX3JlYWRfc3RkKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgdm9pZCAqdmFsLAotCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbnQga3ZtX3JlYWRfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdm9pZCAqZGF0YSA9IHZhbDsKIAlpbnQgciA9IFg4NkVNVUxfQ09OVElOVUU7CkBAIC0xOTcxLDI3ICsyMDUyLDU3IEBACiAJd2hpbGUgKGJ5dGVzKSB7CiAJCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CiAJCXVuc2lnbmVkIG9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFLTEpOwotCQl1bnNpZ25lZCB0b2NvcHkgPSBtaW4oYnl0ZXMsICh1bnNpZ25lZClQQUdFX1NJWkUgLSBvZmZzZXQpOworCQl1bnNpZ25lZCB0b3JlYWQgPSBtaW4oYnl0ZXMsICh1bnNpZ25lZClQQUdFX1NJWkUgLSBvZmZzZXQpOwogCQlpbnQgcmV0OwogCiAJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKSB7CiAJCQlyID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlyZXQgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgdG9jb3B5KTsKKwkJcmV0ID0ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIHRvcmVhZCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlyID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWJ5dGVzIC09IHRvY29weTsKLQkJZGF0YSArPSB0b2NvcHk7Ci0JCWFkZHIgKz0gdG9jb3B5OworCQlieXRlcyAtPSB0b3JlYWQ7CisJCWRhdGEgKz0gdG9yZWFkOworCQlhZGRyICs9IHRvcmVhZDsKIAl9CiBvdXQ6CiAJcmV0dXJuIHI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlbXVsYXRvcl9yZWFkX3N0ZCk7CisKK3N0YXRpYyBpbnQga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZvaWQgKmRhdGEgPSB2YWw7CisJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOworCisJd2hpbGUgKGJ5dGVzKSB7CisJCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CisJCXVuc2lnbmVkIG9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFLTEpOworCQl1bnNpZ25lZCB0b3dyaXRlID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJaW50IHJldDsKKworCQlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgeworCQkJciA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0ga3ZtX3dyaXRlX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b3dyaXRlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXIgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYnl0ZXMgLT0gdG93cml0ZTsKKwkJZGF0YSArPSB0b3dyaXRlOworCQlhZGRyICs9IHRvd3JpdGU7CisJfQorb3V0OgorCXJldHVybiByOworfQorCiAKIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICB2b2lkICp2YWwsCkBAIC0yMDEzLDggKzIxMjQsOCBAQAogCWlmICgoZ3BhICYgUEFHRV9NQVNLKSA9PSBBUElDX0RFRkFVTFRfUEhZU19CQVNFKQogCQlnb3RvIG1taW87CiAKLQlpZiAoZW11bGF0b3JfcmVhZF9zdGQoYWRkciwgdmFsLCBieXRlcywgdmNwdSkKLQkJCT09IFg4NkVNVUxfQ09OVElOVUUpCisJaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQoYWRkciwgdmFsLCBieXRlcywgdmNwdSkKKwkJCQk9PSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwpAQCAtMjIxNyw3ICsyMzI4LDcgQEAKIAogCXJpcF9saW5lYXIgPSByaXAgKyBnZXRfc2VnbWVudF9iYXNlKHZjcHUsIFZDUFVfU1JFR19DUyk7CiAKLQllbXVsYXRvcl9yZWFkX3N0ZChyaXBfbGluZWFyLCAodm9pZCAqKW9wY29kZXMsIDQsIHZjcHUpOworCWt2bV9yZWFkX2d1ZXN0X3ZpcnQocmlwX2xpbmVhciwgKHZvaWQgKilvcGNvZGVzLCA0LCB2Y3B1KTsKIAogCXByaW50ayhLRVJOX0VSUiAiZW11bGF0aW9uIGZhaWxlZCAoJXMpIHJpcCAlbHggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkgICAgICAgY29udGV4dCwgcmlwLCBvcGNvZGVzWzBdLCBvcGNvZGVzWzFdLCBvcGNvZGVzWzJdLCBvcGNvZGVzWzNdKTsKQEAgLTIyMjUsNyArMjMzNiw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKTsKIAogc3RhdGljIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7Ci0JLnJlYWRfc3RkICAgICAgICAgICAgPSBlbXVsYXRvcl9yZWFkX3N0ZCwKKwkucmVhZF9zdGQgICAgICAgICAgICA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQsCiAJLnJlYWRfZW11bGF0ZWQgICAgICAgPSBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkLAogCS53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsCiAJLmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLApAQCAtMjMyNyw0MCArMjQzOCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW11bGF0ZV9pbnN0cnVjdGlvbik7CiAKLXN0YXRpYyB2b2lkIGZyZWVfcGlvX2d1ZXN0X3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzKTsgKytpKQotCQlpZiAodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0pIHsKLQkJCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0pOwotCQkJdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0gPSBOVUxMOwotCQl9Ci19Ci0KIHN0YXRpYyBpbnQgcGlvX2NvcHlfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdm9pZCAqcCA9IHZjcHUtPmFyY2gucGlvX2RhdGE7Ci0Jdm9pZCAqcTsKKwlndmFfdCBxID0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfZ3ZhOwogCXVuc2lnbmVkIGJ5dGVzOwotCWludCBucl9wYWdlcyA9IHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzWzFdID8gMiA6IDE7CisJaW50IHJldDsKIAotCXEgPSB2bWFwKHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzLCBucl9wYWdlcywgVk1fUkVBRHxWTV9XUklURSwKLQkJIFBBR0VfS0VSTkVMKTsKLQlpZiAoIXEpIHsKLQkJZnJlZV9waW9fZ3Vlc3RfcGFnZXModmNwdSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlxICs9IHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0OwogCWJ5dGVzID0gdmNwdS0+YXJjaC5waW8uc2l6ZSAqIHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudDsKIAlpZiAodmNwdS0+YXJjaC5waW8uaW4pCi0JCW1lbWNweShxLCBwLCBieXRlcyk7CisJCXJldCA9IGt2bV93cml0ZV9ndWVzdF92aXJ0KHEsIHAsIGJ5dGVzLCB2Y3B1KTsKIAllbHNlCi0JCW1lbWNweShwLCBxLCBieXRlcyk7Ci0JcSAtPSB2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldDsKLQl2dW5tYXAocSk7Ci0JZnJlZV9waW9fZ3Vlc3RfcGFnZXModmNwdSk7Ci0JcmV0dXJuIDA7CisJCXJldCA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQocSwgcCwgYnl0ZXMsIHZjcHUpOworCXJldHVybiByZXQ7CiB9CiAKIGludCBjb21wbGV0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjQ3MSw3ICsyNTYxLDYgQEAKIAl2Y3B1LT5hcmNoLnBpby5pbiA9IGluOwogCXZjcHUtPmFyY2gucGlvLnN0cmluZyA9IDA7CiAJdmNwdS0+YXJjaC5waW8uZG93biA9IDA7Ci0JdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZV9vZmZzZXQgPSAwOwogCXZjcHUtPmFyY2gucGlvLnJlcCA9IDA7CiAKIAlpZiAodmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fSU4pCkBAIC0yNDk5LDkgKzI1ODgsNyBAQAogCQkgIGd2YV90IGFkZHJlc3MsIGludCByZXAsIHVuc2lnbmVkIHBvcnQpCiB7CiAJdW5zaWduZWQgbm93LCBpbl9wYWdlOwotCWludCBpLCByZXQgPSAwOwotCWludCBucl9wYWdlcyA9IDE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldCA9IDA7CiAJc3RydWN0IGt2bV9pb19kZXZpY2UgKnBpb19kZXY7CiAKIAl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU87CkBAIC0yNTEzLDcgKzI2MDAsNiBAQAogCXZjcHUtPmFyY2gucGlvLmluID0gaW47CiAJdmNwdS0+YXJjaC5waW8uc3RyaW5nID0gMTsKIAl2Y3B1LT5hcmNoLnBpby5kb3duID0gZG93bjsKLQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKGFkZHJlc3MpOwogCXZjcHUtPmFyY2gucGlvLnJlcCA9IHJlcDsKIAogCWlmICh2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9PSBLVk1fRVhJVF9JT19JTikKQEAgLTI1MzMsMTUgKzI2MTksOCBAQAogCWVsc2UKIAkJaW5fcGFnZSA9IG9mZnNldF9pbl9wYWdlKGFkZHJlc3MpICsgc2l6ZTsKIAlub3cgPSBtaW4oY291bnQsICh1bnNpZ25lZCBsb25nKWluX3BhZ2UgLyBzaXplKTsKLQlpZiAoIW5vdykgewotCQkvKgotCQkgKiBTdHJpbmcgSS9PIHN0cmFkZGxlcyBwYWdlIGJvdW5kYXJ5LiAgUGluIHR3byBndWVzdCBwYWdlcwotCQkgKiBzbyB0aGF0IHdlIHNhdGlzZnkgYXRvbWljaXR5IGNvbnN0cmFpbnRzLiAgRG8ganVzdCBvbmUKLQkJICogdHJhbnNhY3Rpb24gdG8gYXZvaWQgY29tcGxleGl0eS4KLQkJICovCi0JCW5yX3BhZ2VzID0gMjsKKwlpZiAoIW5vdykKIAkJbm93ID0gMTsKLQl9CiAJaWYgKGRvd24pIHsKIAkJLyoKIAkJICogU3RyaW5nIEkvTyBpbiByZXZlcnNlLiAgWXVjay4gIEtpbGwgdGhlIGd1ZXN0LCBmaXggbGF0ZXIuCkBAIC0yNTU2LDE1ICsyNjM1LDcgQEAKIAlpZiAodmNwdS0+YXJjaC5waW8uY3VyX2NvdW50ID09IHZjcHUtPmFyY2gucGlvLmNvdW50KQogCQlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgKytpKSB7Ci0JCXBhZ2UgPSBndmFfdG9fcGFnZSh2Y3B1LCBhZGRyZXNzICsgaSAqIFBBR0VfU0laRSk7Ci0JCXZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzW2ldID0gcGFnZTsKLQkJaWYgKCFwYWdlKSB7Ci0JCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotCQkJZnJlZV9waW9fZ3Vlc3RfcGFnZXModmNwdSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KKwl2Y3B1LT5hcmNoLnBpby5ndWVzdF9ndmEgPSBhZGRyZXNzOwogCiAJcGlvX2RldiA9IHZjcHVfZmluZF9waW9fZGV2KHZjcHUsIHBvcnQsCiAJCQkJICAgIHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudCwKQEAgLTI1NzIsNyArMjY0MywxMSBAQAogCWlmICghdmNwdS0+YXJjaC5waW8uaW4pIHsKIAkJLyogc3RyaW5nIFBJTyB3cml0ZSAqLwogCQlyZXQgPSBwaW9fY29weV9kYXRhKHZjcHUpOwotCQlpZiAocmV0ID49IDAgJiYgcGlvX2RldikgeworCQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKSB7CisJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHJldCA9PSAwICYmIHBpb19kZXYpIHsKIAkJCXBpb19zdHJpbmdfd3JpdGUocGlvX2RldiwgdmNwdSk7CiAJCQljb21wbGV0ZV9waW8odmNwdSk7CiAJCQlpZiAodmNwdS0+YXJjaC5waW8uY291bnQgPT0gMCkKQEAgLTI1ODcsOSArMjY2Miw3MiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2VtdWxhdGVfcGlvX3N0cmluZyk7CiAKK3N0YXRpYyB2b2lkIGJvdW5jZV9vZmYodm9pZCAqaW5mbykKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgIHJlZl9mcmVxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHNjX2toel9yZWY7CisKK3N0YXRpYyBpbnQga3ZtY2xvY2tfY3B1ZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOworCXN0cnVjdCBrdm0gKmt2bTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IGksIHNlbmRfaXBpID0gMDsKKworCWlmICghcmVmX2ZyZXEpCisJCXJlZl9mcmVxID0gZnJlcS0+b2xkOworCisJaWYgKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAmJiBmcmVxLT5vbGQgPiBmcmVxLT5uZXcpCisJCXJldHVybiAwOworCWlmICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA8IGZyZXEtPm5ldykKKwkJcmV0dXJuIDA7CisJcGVyX2NwdShjcHVfdHNjX2toeiwgZnJlcS0+Y3B1KSA9IGNwdWZyZXFfc2NhbGUodHNjX2toel9yZWYsIHJlZl9mcmVxLCBmcmVxLT5uZXcpOworCisJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShrdm0sICZ2bV9saXN0LCB2bV9saXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKKwkJCXZjcHUgPSBrdm0tPnZjcHVzW2ldOworCQkJaWYgKCF2Y3B1KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZjcHUtPmNwdSAhPSBmcmVxLT5jcHUpCisJCQkJY29udGludWU7CisJCQlpZiAoIWt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHZjcHUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZjcHUtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQkJc2VuZF9pcGkrKzsKKwkJfQorCX0KKwlzcGluX3VubG9jaygma3ZtX2xvY2spOworCisJaWYgKGZyZXEtPm9sZCA8IGZyZXEtPm5ldyAmJiBzZW5kX2lwaSkgeworCQkvKgorCQkgKiBXZSB1cHNjYWxlIHRoZSBmcmVxdWVuY3kuICBNdXN0IG1ha2UgdGhlIGd1ZXN0CisJCSAqIGRvZXNuJ3Qgc2VlIG9sZCBrdm1jbG9jayB2YWx1ZXMgd2hpbGUgcnVubmluZyB3aXRoCisJCSAqIHRoZSBuZXcgZnJlcXVlbmN5LCBvdGhlcndpc2Ugd2UgcmlzayB0aGUgZ3Vlc3Qgc2VlcworCQkgKiB0aW1lIGdvIGJhY2t3YXJkcy4KKwkJICoKKwkJICogSW4gY2FzZSB3ZSB1cGRhdGUgdGhlIGZyZXF1ZW5jeSBmb3IgYW5vdGhlciBjcHUKKwkJICogKHdoaWNoIG1pZ2h0IGJlIGluIGd1ZXN0IGNvbnRleHQpIHNlbmQgYW4gaW50ZXJydXB0CisJCSAqIHRvIGtpY2sgdGhlIGNwdSBvdXQgb2YgZ3Vlc3QgY29udGV4dC4gIE5leHQgdGltZQorCQkgKiBndWVzdCBjb250ZXh0IGlzIGVudGVyZWQga3ZtY2xvY2sgd2lsbCBiZSB1cGRhdGVkLAorCQkgKiBzbyB0aGUgZ3Vlc3Qgd2lsbCBub3Qgc2VlIHN0YWxlIHZhbHVlcy4KKwkJICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShmcmVxLT5jcHUsIGJvdW5jZV9vZmYsIE5VTEwsIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrID0geworICAgICAgICAubm90aWZpZXJfY2FsbCAgPSBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyCit9OworCiBpbnQga3ZtX2FyY2hfaW5pdCh2b2lkICpvcGFxdWUpCiB7Ci0JaW50IHI7CisJaW50IHIsIGNwdTsKIAlzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKm9wcyA9IChzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKilvcGFxdWU7CiAKIAlpZiAoa3ZtX3g4Nl9vcHMpIHsKQEAgLTI2MjAsNiArMjc1OCwxNSBAQAogCWt2bV9tbXVfc2V0X2Jhc2VfcHRlcyhQVF9QUkVTRU5UX01BU0spOwogCWt2bV9tbXVfc2V0X21hc2tfcHRlcyhQVF9VU0VSX01BU0ssIFBUX0FDQ0VTU0VEX01BU0ssCiAJCQlQVF9ESVJUWV9NQVNLLCBQVDY0X05YX01BU0ssIDAsIDApOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdShjcHVfdHNjX2toeiwgY3B1KSA9IHRzY19raHo7CisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkgeworCQl0c2Nfa2h6X3JlZiA9IHRzY19raHo7CisJCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJmt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCisJCQkJCSAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKwl9CisKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMjgyNywyNSArMjk3NCwyMCBAQAogCWlmICgoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYKSAmJiBlLT5pbmRleCAhPSBpbmRleCkKIAkJcmV0dXJuIDA7CiAJaWYgKChlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMpICYmCi0JCSEoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQpKQorCSAgICAhKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVfUkVBRF9ORVhUKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmt2bV9maW5kX2NwdWlkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICAgICAgdTMyIGZ1bmN0aW9uLCB1MzIgaW5kZXgpCiB7CiAJaW50IGk7Ci0JdTMyIGZ1bmN0aW9uLCBpbmRleDsKLQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZSwgKmJlc3Q7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3QgPSBOVUxMOwogCi0JZnVuY3Rpb24gPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKLQlpbmRleCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCAwKTsKLQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgMCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIDApOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCAwKTsKLQliZXN0ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgdmNwdS0+YXJjaC5jcHVpZF9uZW50OyArK2kpIHsKKwkJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmU7CisKIAkJZSA9ICZ2Y3B1LT5hcmNoLmNwdWlkX2VudHJpZXNbaV07CiAJCWlmIChpc19tYXRjaGluZ19jcHVpZF9lbnRyeShlLCBmdW5jdGlvbiwgaW5kZXgpKSB7CiAJCQlpZiAoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURUZVTF9GVU5DKQpAQCAtMjg2MCw2ICszMDAyLDIxIEBACiAJCQlpZiAoIWJlc3QgfHwgZS0+ZnVuY3Rpb24gPiBiZXN0LT5mdW5jdGlvbikKIAkJCQliZXN0ID0gZTsKIAl9CisJcmV0dXJuIGJlc3Q7Cit9CisKK3ZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXUzMiBmdW5jdGlvbiwgaW5kZXg7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7CisKKwlmdW5jdGlvbiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCWluZGV4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOworCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCBmdW5jdGlvbiwgaW5kZXgpOwogCWlmIChiZXN0KSB7CiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCBiZXN0LT5lYXgpOwogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgYmVzdC0+ZWJ4KTsKQEAgLTI5NDUsNiArMzEwMiw4IEBACiAJaWYgKHZjcHUtPnJlcXVlc3RzKSB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NSUdSQVRFX1RJTUVSLCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJX19rdm1fbWlncmF0ZV90aW1lcnModmNwdSk7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9LVk1DTE9DS19VUERBVEUsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQlrdm1fd3JpdGVfZ3Vlc3RfdGltZSh2Y3B1KTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX01NVV9TWU5DLCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJa3ZtX21tdV9zeW5jX3Jvb3RzKHZjcHUpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfVExCX0ZMVVNILCAmdmNwdS0+cmVxdWVzdHMpKQpAQCAtMjk3OSw5ICszMTM4LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bV94ODZfb3BzLT5ndWVzdF9kZWJ1Z19wcmUodmNwdSk7Ci0KIAl2Y3B1LT5ndWVzdF9tb2RlID0gMTsKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IGd1ZXN0X21vZGUgYXNzaWdubWVudCB3b24ndCBoYXBwZW4gYWZ0ZXIKQEAgLTMwMDIsMTAgKzMxNTgsMzQgQEAKIAogCWt2bV9ndWVzdF9lbnRlcigpOwogCisJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjYsIDYpOworCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI3LCA3KTsKKwlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykpIHsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlswXSwgMCk7CisJCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMV0sIDEpOworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzJdLCAyKTsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlszXSwgMyk7CisKKwkJc2V0X2RlYnVncmVnKDAsIDcpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbMF0sIDApOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbMV0sIDEpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbMl0sIDIpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5lZmZfZGJbM10sIDMpOworCX0KIAogCUtWTVRSQUNFXzBEKFZNRU5UUlksIHZjcHUsIGVudHJ5ZXhpdCk7CiAJa3ZtX3g4Nl9vcHMtPnJ1bih2Y3B1LCBrdm1fcnVuKTsKIAorCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKSkgeworCQlzZXRfZGVidWdyZWcoMCwgNyk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMF0sIDApOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzFdLCAxKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsyXSwgMik7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbM10sIDMpOworCX0KKwlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNiwgNik7CisJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjcsIDcpOworCiAJdmNwdS0+Z3Vlc3RfbW9kZSA9IDA7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCkBAIC0zMTkyLDcgKzMzNzIsNyBAQAogCS8qCiAJICogRG9uJ3QgbGVhayBkZWJ1ZyBmbGFncyBpbiBjYXNlIHRoZXkgd2VyZSBzZXQgZm9yIGd1ZXN0IGRlYnVnZ2luZwogCSAqLwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkICYmIHZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXApCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCiAJCXJlZ3MtPnJmbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGKTsKIAogCXZjcHVfcHV0KHZjcHUpOwpAQCAtMzgxMSwxNSArMzk5MSwzMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQlpbnQgcjsKKwlpbnQgaSwgcjsKIAogCXZjcHVfbG9hZCh2Y3B1KTsKIAorCWlmICgoZGJnLT5jb250cm9sICYgKEtWTV9HVUVTVERCR19FTkFCTEUgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgPT0KKwkgICAgKEtWTV9HVUVTVERCR19FTkFCTEUgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0RCX1JFR1M7ICsraSkKKwkJCXZjcHUtPmFyY2guZWZmX2RiW2ldID0gZGJnLT5hcmNoLmRlYnVncmVnW2ldOworCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0KKwkJCShkYmctPmFyY2guZGVidWdyZWdbN10gJiBEUjdfQlBfRU5fTUFTSyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9EQl9SRUdTOyBpKyspCisJCQl2Y3B1LT5hcmNoLmVmZl9kYltpXSA9IHZjcHUtPmFyY2guZGJbaV07CisJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPSAodmNwdS0+YXJjaC5kcjcgJiBEUjdfQlBfRU5fTUFTSyk7CisJfQorCiAJciA9IGt2bV94ODZfb3BzLT5zZXRfZ3Vlc3RfZGVidWcodmNwdSwgZGJnKTsKIAorCWlmIChkYmctPmNvbnRyb2wgJiBLVk1fR1VFU1REQkdfSU5KRUNUX0RCKQorCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIERCX1ZFQ1RPUik7CisJZWxzZSBpZiAoZGJnLT5jb250cm9sICYgS1ZNX0dVRVNUREJHX0lOSkVDVF9CUCkKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBCUF9WRUNUT1IpOworCiAJdmNwdV9wdXQodmNwdSk7CiAKIAlyZXR1cm4gcjsKQEAgLTQwMDcsNiArNDIwNCwxMSBAQAogCXZjcHUtPmFyY2gubm1pX3BlbmRpbmcgPSBmYWxzZTsKIAl2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCA9IGZhbHNlOwogCisJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9IDA7CisJbWVtc2V0KHZjcHUtPmFyY2guZGIsIDAsIHNpemVvZih2Y3B1LT5hcmNoLmRiKSk7CisJdmNwdS0+YXJjaC5kcjYgPSBEUjZfRklYRURfMTsKKwl2Y3B1LT5hcmNoLmRyNyA9IERSN19GSVhFRF8xOworCiAJcmV0dXJuIGt2bV94ODZfb3BzLT52Y3B1X3Jlc2V0KHZjcHUpOwogfQogCkBAIC00MTAwLDYgKzQzMDIsOCBAQAogCS8qIFJlc2VydmUgYml0IDAgb2YgaXJxX3NvdXJjZXNfYml0bWFwIGZvciB1c2Vyc3BhY2UgaXJxIHNvdXJjZSAqLwogCXNldF9iaXQoS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7CiAKKwlyZHRzY2xsKGt2bS0+YXJjaC52bV9pbml0X3RzYyk7CisKIAlyZXR1cm4ga3ZtOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCmluZGV4IGQxNzRkYjcuLmNhOTE3NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCisrKyBiL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAkwLCBJbXBsaWNpdE9wcyB8IFN0YWNrLCAwLCAwLAogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE1vdiwKIAkvKiAweEM4IC0gMHhDRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwgMCwgMCwKIAkvKiAweEQwIC0gMHhENyAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwKQEAgLTExMzYsMTggKzExMzYsMTkgQEAKIH0KIAogc3RhdGljIGludCBlbXVsYXRlX3BvcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKKwkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKKwkJICAgICAgIHZvaWQgKmRlc3QsIGludCBsZW4pCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJjOwogCiAJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQocmVnaXN0ZXJfYWRkcmVzcyhjLCBzc19iYXNlKGN0eHQpLAogCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pLAotCQkJCSZjLT5zcmMudmFsLCBjLT5zcmMuYnl0ZXMsIGN0eHQtPnZjcHUpOworCQkJCWRlc3QsIGxlbiwgY3R4dC0+dmNwdSk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKIAotCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCBjLT5zcmMuYnl0ZXMpOworCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCBsZW4pOwogCXJldHVybiByYzsKIH0KIApAQCAtMTE1NywxMSArMTE1OCw5IEBACiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJjOwogCi0JYy0+c3JjLmJ5dGVzID0gYy0+ZHN0LmJ5dGVzOwotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcyk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKLQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI3OSw2ICsxMjc4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZW11bGF0ZV9yZXRfZmFyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGNzOworCisJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5laXAsIGMtPm9wX2J5dGVzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlpZiAoYy0+b3BfYnl0ZXMgPT0gNCkKKwkJYy0+ZWlwID0gKHUzMiljLT5laXA7CisJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjcywgYy0+b3BfYnl0ZXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0ga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQtPnZjcHUsICh1MTYpY3MsIDEsIFZDUFVfU1JFR19DUyk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW5saW5lIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCQkgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQogewpAQCAtMTQ2NywxMSArMTQ4NSw5IEBACiAJCWJyZWFrOwogCWNhc2UgMHg1OCAuLi4gMHg1ZjogLyogcG9wIHJlZyAqLwogCXBvcF9pbnN0cnVjdGlvbjoKLQkJYy0+c3JjLmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzKTsKKwkJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5kc3QudmFsLCBjLT5vcF9ieXRlcyk7CiAJCWlmIChyYyAhPSAwKQogCQkJZ290byBkb25lOwotCQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAkJYnJlYWs7CiAJY2FzZSAweDYzOgkJLyogbW92c3hkICovCiAJCWlmIChjdHh0LT5tb2RlICE9IFg4NkVNVUxfTU9ERV9QUk9UNjQpCkBAIC0xNzM4LDYgKzE3NTQsMTEgQEAKIAltb3Y6CiAJCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCQlicmVhazsKKwljYXNlIDB4Y2I6CQkvKiByZXQgZmFyICovCisJCXJjID0gZW11bGF0ZV9yZXRfZmFyKGN0eHQsIG9wcyk7CisJCWlmIChyYykKKwkJCWdvdG8gZG9uZTsKKwkJYnJlYWs7CiAJY2FzZSAweGQwIC4uLiAweGQxOgkvKiBHcnAyICovCiAJCWMtPnNyYy52YWwgPSAxOwogCQllbXVsYXRlX2dycDIoY3R4dCk7CkBAIC0xOTA4LDExICsxOTI5LDE2IEBACiAJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCQlicmVhazsKIAkJY2FzZSAzOiAvKiBsaWR0L3ZtbWNhbGwgKi8KLQkJCWlmIChjLT5tb2RybV9tb2QgPT0gMyAmJiBjLT5tb2RybV9ybSA9PSAxKSB7Ci0JCQkJcmMgPSBrdm1fZml4X2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gZG9uZTsKLQkJCQlrdm1fZW11bGF0ZV9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7CisJCQlpZiAoYy0+bW9kcm1fbW9kID09IDMpIHsKKwkJCQlzd2l0Y2ggKGMtPm1vZHJtX3JtKSB7CisJCQkJY2FzZSAxOgorCQkJCQlyYyA9IGt2bV9maXhfaHlwZXJjYWxsKGN0eHQtPnZjcHUpOworCQkJCQlpZiAocmMpCisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlyYyA9IHJlYWRfZGVzY3JpcHRvcihjdHh0LCBvcHMsIGMtPnNyYy5wdHIsCiAJCQkJCQkgICAgICZzaXplLCAmYWRkcmVzcywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9LY29uZmlnIGIvYXJjaC94ODYvbGd1ZXN0L0tjb25maWcKaW5kZXggYzcwZTEyYi4uOGRhYjhmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L0tjb25maWcKKysrIGIvYXJjaC94ODYvbGd1ZXN0L0tjb25maWcKQEAgLTMsNyArMyw2IEBACiAJc2VsZWN0IFBBUkFWSVJUCiAJZGVwZW5kcyBvbiBYODZfMzIKIAlkZXBlbmRzIG9uICFYODZfUEFFCi0JZGVwZW5kcyBvbiAhWDg2X1ZPWUFHRVIKIAlzZWxlY3QgVklSVElPCiAJc2VsZWN0IFZJUlRJT19SSU5HCiAJc2VsZWN0IFZJUlRJT19DT05TT0xFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwppbmRleCA5NjBhOGQ5Li45ZmU0ZGRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKQEAgLTE3MywyNCArMTczLDI5IEBACiB7CiAJcmV0dXJuIGxndWVzdF9kYXRhLmlycV9lbmFibGVkOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhzYXZlX2ZsKTsKIAogLyogcmVzdG9yZV9mbGFncygpIGp1c3Qgc2V0cyB0aGUgZmxhZ3MgYmFjayB0byB0aGUgdmFsdWUgZ2l2ZW4uICovCiBzdGF0aWMgdm9pZCByZXN0b3JlX2ZsKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJbGd1ZXN0X2RhdGEuaXJxX2VuYWJsZWQgPSBmbGFnczsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksocmVzdG9yZV9mbCk7CiAKIC8qIEludGVycnVwdHMgZ28gb2ZmLi4uICovCiBzdGF0aWMgdm9pZCBpcnFfZGlzYWJsZSh2b2lkKQogewogCWxndWVzdF9kYXRhLmlycV9lbmFibGVkID0gMDsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoaXJxX2Rpc2FibGUpOwogCiAvKiBJbnRlcnJ1cHRzIGdvIG9uLi4uICovCiBzdGF0aWMgdm9pZCBpcnFfZW5hYmxlKHZvaWQpCiB7CiAJbGd1ZXN0X2RhdGEuaXJxX2VuYWJsZWQgPSBYODZfRUZMQUdTX0lGOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhpcnFfZW5hYmxlKTsKKwogLyo6Ki8KIC8qTTowMDMgTm90ZSB0aGF0IHdlIGRvbid0IGNoZWNrIGZvciBvdXRzdGFuZGluZyBpbnRlcnJ1cHRzIHdoZW4gd2UgcmUtZW5hYmxlCiAgKiB0aGVtIChvciB3aGVuIHdlIHVubWFzayBhbiBpbnRlcnJ1cHQpLiAgVGhpcyBzZWVtcyB0byB3b3JrIGZvciB0aGUgbW9tZW50LApAQCAtMjc4LDcgKzI4Myw3IEBACiAJLyogVGhlcmUncyBvbmUgcHJvYmxlbSB3aGljaCBub3JtYWwgaGFyZHdhcmUgZG9lc24ndCBoYXZlOiB0aGUgSG9zdAogCSAqIGNhbid0IGhhbmRsZSB1cyByZW1vdmluZyBlbnRyaWVzIHdlJ3JlIGN1cnJlbnRseSB1c2luZy4gIFNvIHdlIGNsZWFyCiAJICogdGhlIEdTIHJlZ2lzdGVyIGhlcmU6IGlmIGl0J3MgbmVlZGVkIGl0J2xsIGJlIHJlbG9hZGVkIGFueXdheS4gKi8KLQlsb2Fkc2VnbWVudChncywgMCk7CisJbGF6eV9sb2FkX2dzKDApOwogCWxhenlfaGNhbGwoTEhDQUxMX0xPQURfVExTLCBfX3BhKCZ0LT50bHNfYXJyYXkpLCBjcHUsIDApOwogfQogCkBAIC04MzAsMTMgKzgzNSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIGxndWVzdF9iYXNpY19hcGljX29wcyA9IHsKLQkucmVhZCA9IGxndWVzdF9hcGljX3JlYWQsCi0JLndyaXRlID0gbGd1ZXN0X2FwaWNfd3JpdGUsCi0JLmljcl9yZWFkID0gbGd1ZXN0X2FwaWNfaWNyX3JlYWQsCi0JLmljcl93cml0ZSA9IGxndWVzdF9hcGljX2ljcl93cml0ZSwKLQkud2FpdF9pY3JfaWRsZSA9IGxndWVzdF9hcGljX3dhaXRfaWNyX2lkbGUsCi0JLnNhZmVfd2FpdF9pY3JfaWRsZSA9IGxndWVzdF9hcGljX3NhZmVfd2FpdF9pY3JfaWRsZSwKK3N0YXRpYyB2b2lkIHNldF9sZ3Vlc3RfYmFzaWNfYXBpY19vcHModm9pZCkKK3sKKwlhcGljLT5yZWFkID0gbGd1ZXN0X2FwaWNfcmVhZDsKKwlhcGljLT53cml0ZSA9IGxndWVzdF9hcGljX3dyaXRlOworCWFwaWMtPmljcl9yZWFkID0gbGd1ZXN0X2FwaWNfaWNyX3JlYWQ7CisJYXBpYy0+aWNyX3dyaXRlID0gbGd1ZXN0X2FwaWNfaWNyX3dyaXRlOworCWFwaWMtPndhaXRfaWNyX2lkbGUgPSBsZ3Vlc3RfYXBpY193YWl0X2ljcl9pZGxlOworCWFwaWMtPnNhZmVfd2FpdF9pY3JfaWRsZSA9IGxndWVzdF9hcGljX3NhZmVfd2FpdF9pY3JfaWRsZTsKIH07CiAjZW5kaWYKIApAQCAtOTkxLDEwICs5OTcsMTAgQEAKIAogCS8qIGludGVycnVwdC1yZWxhdGVkIG9wZXJhdGlvbnMgKi8KIAlwdl9pcnFfb3BzLmluaXRfSVJRID0gbGd1ZXN0X2luaXRfSVJROwotCXB2X2lycV9vcHMuc2F2ZV9mbCA9IHNhdmVfZmw7Ci0JcHZfaXJxX29wcy5yZXN0b3JlX2ZsID0gcmVzdG9yZV9mbDsKLQlwdl9pcnFfb3BzLmlycV9kaXNhYmxlID0gaXJxX2Rpc2FibGU7Ci0JcHZfaXJxX29wcy5pcnFfZW5hYmxlID0gaXJxX2VuYWJsZTsKKwlwdl9pcnFfb3BzLnNhdmVfZmwgPSBQVl9DQUxMRUVfU0FWRShzYXZlX2ZsKTsKKwlwdl9pcnFfb3BzLnJlc3RvcmVfZmwgPSBQVl9DQUxMRUVfU0FWRShyZXN0b3JlX2ZsKTsKKwlwdl9pcnFfb3BzLmlycV9kaXNhYmxlID0gUFZfQ0FMTEVFX1NBVkUoaXJxX2Rpc2FibGUpOworCXB2X2lycV9vcHMuaXJxX2VuYWJsZSA9IFBWX0NBTExFRV9TQVZFKGlycV9lbmFibGUpOwogCXB2X2lycV9vcHMuc2FmZV9oYWx0ID0gbGd1ZXN0X3NhZmVfaGFsdDsKIAogCS8qIGluaXQtdGltZSBvcGVyYXRpb25zICovCkBAIC0xMDM3LDcgKzEwNDMsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJLyogYXBpYyByZWFkL3dyaXRlIGludGVyY2VwdHMgKi8KLQlhcGljX29wcyA9ICZsZ3Vlc3RfYmFzaWNfYXBpY19vcHM7CisJc2V0X2xndWVzdF9iYXNpY19hcGljX29wcygpOwogI2VuZGlmCiAKIAkvKiB0aW1lIG9wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9nZXR1c2VyLlMgYi9hcmNoL3g4Ni9saWIvZ2V0dXNlci5TCmluZGV4IGFkMzc0MDAuLjUxZjE1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9nZXR1c2VyLlMKKysrIGIvYXJjaC94ODYvbGliL2dldHVzZXIuUwpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWRlZmF1bHQvTWFrZWZpbGUgYi9hcmNoL3g4Ni9tYWNoLWRlZmF1bHQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMmZlMzQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1kZWZhdWx0L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgotIwotCi1vYmoteQkJCQk6PSBzZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYyBiL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGI1OTE4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKglNYWNoaW5lIHNwZWNpZmljIHNldHVwIGZvciBnZW5lcmljCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLSNkZWZpbmUgREVGQVVMVF9TRU5EX0lQSQkoMSkKLSNlbHNlCi0jZGVmaW5lIERFRkFVTFRfU0VORF9JUEkJKDApCi0jZW5kaWYKLQotaW50IG5vX2Jyb2FkY2FzdCA9IERFRkFVTFRfU0VORF9JUEk7Ci0KLS8qKgotICogcHJlX2ludHJfaW5pdF9ob29rIC0gaW5pdGlhbGlzYXRpb24gcHJpb3IgdG8gc2V0dGluZyB1cCBpbnRlcnJ1cHQgdmVjdG9ycwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGludGVycnVwdCBpbml0aWFsaXNhdGlvbiBwcmlvciB0byBzZXR0aW5nIHVwCi0gKgl0aGUgIm9yZGluYXJ5IiBpbnRlcnJ1cHQgY2FsbCBnYXRlcy4gIEZvciBsZWdhY3kgcmVhc29ucywgdGhlIElTQQotICoJaW50ZXJydXB0cyBzaG91bGQgYmUgaW5pdGlhbGlzZWQgaGVyZSBpZiB0aGUgbWFjaGluZSBlbXVsYXRlcyBhIFBDCi0gKglpbiBhbnkgd2F5LgotICoqLwotdm9pZCBfX2luaXQgcHJlX2ludHJfaW5pdF9ob29rKHZvaWQpCi17Ci0JaWYgKHg4Nl9xdWlya3MtPmFyY2hfcHJlX2ludHJfaW5pdCkgewotCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfaW50cl9pbml0KCkpCi0JCQlyZXR1cm47Ci0JfQotCWluaXRfSVNBX2lycXMoKTsKLX0KLQotLyoKLSAqIElSUTIgaXMgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gc2Vjb25kIGludGVycnVwdCBjb250cm9sbGVyCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTIgPSB7Ci0JLmhhbmRsZXIgPSBub19hY3Rpb24sCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAotCS5uYW1lID0gImNhc2NhZGUiLAotfTsKLQotLyoqCi0gKiBpbnRyX2luaXRfaG9vayAtIHBvc3QgZ2F0ZSBzZXR1cCBpbnRlcnJ1cHQgaW5pdGlhbGlzYXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUZpbGwgaW4gYW55IGludGVycnVwdHMgdGhhdCBtYXkgaGF2ZSBiZWVuIGxlZnQgb3V0IGJ5IHRoZSBnZW5lcmFsCi0gKglpbml0X0lSUSgpIHJvdXRpbmUuICBpbnRlcnJ1cHRzIGhhdmluZyB0byBkbyB3aXRoIHRoZSBtYWNoaW5lIHJhdGhlcgotICoJdGhhbiB0aGUgZGV2aWNlcyBvbiB0aGUgSS9PIGJ1cyAobGlrZSBBUElDIGludGVycnVwdHMgaW4gaW50ZWwgTVAKLSAqCXN5c3RlbXMpIGFyZSBzdGFydGVkIGhlcmUuCi0gKiovCi12b2lkIF9faW5pdCBpbnRyX2luaXRfaG9vayh2b2lkKQotewotCWlmICh4ODZfcXVpcmtzLT5hcmNoX2ludHJfaW5pdCkgewotCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9pbnRyX2luaXQoKSkKLQkJCXJldHVybjsKLQl9Ci0JaWYgKCFhY3BpX2lvYXBpYykKLQkJc2V0dXBfaXJxKDIsICZpcnEyKTsKLQotfQotCi0vKioKLSAqIHByZV9zZXR1cF9hcmNoX2hvb2sgLSBob29rIGNhbGxlZCBwcmlvciB0byBhbnkgc2V0dXBfYXJjaCgpIGV4ZWN1dGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJZ2VuZXJhbGx5IHVzZWQgdG8gYWN0aXZhdGUgYW55IG1hY2hpbmUgc3BlY2lmaWMgaWRlbnRpZmljYXRpb24KLSAqCXJvdXRpbmVzIHRoYXQgbWF5IGJlIG5lZWRlZCBiZWZvcmUgc2V0dXBfYXJjaCgpIHJ1bnMuICBPbiBWb3lhZ2VyCi0gKgl0aGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBib2FyZCByZXZpc2lvbiBhbmQgdHlwZS4KLSAqKi8KLXZvaWQgX19pbml0IHByZV9zZXR1cF9hcmNoX2hvb2sodm9pZCkKLXsKLX0KLQotLyoqCi0gKiB0cmFwX2luaXRfaG9vayAtIGluaXRpYWxpc2Ugc3lzdGVtIHNwZWNpZmljIHRyYXBzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglDYWxsZWQgYXMgdGhlIGZpbmFsIGFjdCBvZiB0cmFwX2luaXQoKS4gIFVzZWQgaW4gVklTV1MgdG8gaW5pdGlhbGlzZQotICoJdGhlIHZhcmlvdXMgYm9hcmQgc3BlY2lmaWMgQVBJQyB0cmFwcy4KLSAqKi8KLXZvaWQgX19pbml0IHRyYXBfaW5pdF9ob29rKHZvaWQpCi17Ci0JaWYgKHg4Nl9xdWlya3MtPmFyY2hfdHJhcF9pbml0KSB7Ci0JCWlmICh4ODZfcXVpcmtzLT5hcmNoX3RyYXBfaW5pdCgpKQotCQkJcmV0dXJuOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7Ci0JLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX0lSUVBPTEwgfCBJUlFGX1RJTUVSLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKLQkubmFtZSA9ICJ0aW1lciIKLX07Ci0KLS8qKgotICogcHJlX3RpbWVfaW5pdF9ob29rIC0gZG8gYW55IHNwZWNpZmljIGluaXRpYWxpc2F0aW9ucyBiZWZvcmUuCi0gKgotICoqLwotdm9pZCBfX2luaXQgcHJlX3RpbWVfaW5pdF9ob29rKHZvaWQpCi17Ci0JaWYgKHg4Nl9xdWlya3MtPmFyY2hfcHJlX3RpbWVfaW5pdCkKLQkJeDg2X3F1aXJrcy0+YXJjaF9wcmVfdGltZV9pbml0KCk7Ci19Ci0KLS8qKgotICogdGltZV9pbml0X2hvb2sgLSBkbyBhbnkgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb25zIGZvciB0aGUgc3lzdGVtIHRpbWVyLgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJTXVzdCBwbHVnIHRoZSBzeXN0ZW0gdGltZXIgaW50ZXJydXB0IHNvdXJjZSBhdCBIWiBpbnRvIHRoZSBJUlEgbGlzdGVkCi0gKglpbiBpcnFfdmVjdG9ycy5oOlRJTUVSX0lSUQotICoqLwotdm9pZCBfX2luaXQgdGltZV9pbml0X2hvb2sodm9pZCkKLXsKLQlpZiAoeDg2X3F1aXJrcy0+YXJjaF90aW1lX2luaXQpIHsKLQkJLyoKLQkJICogQSBub256ZXJvIHJldHVybiBjb2RlIGRvZXMgbm90IG1lYW4gZmFpbHVyZSwgaXQgbWVhbnMKLQkJICogdGhhdCB0aGUgYXJjaGl0ZWN0dXJlIHF1aXJrIGRvZXMgbm90IHdhbnQgYW55Ci0JCSAqIGdlbmVyaWMgKHRpbWVyKSBzZXR1cCB0byBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhpczoKLQkJICovCi0JCWlmICh4ODZfcXVpcmtzLT5hcmNoX3RpbWVfaW5pdCgpKQotCQkJcmV0dXJuOwotCX0KLQotCWlycTAubWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOwotCXNldHVwX2lycSgwLCAmaXJxMCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTUNBCi0vKioKLSAqIG1jYV9ubWlfaG9vayAtIGhvb2sgaW50byBNQ0Egc3BlY2lmaWMgTk1JIGNoYWluCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgTUNBIChNaWNyb2NoYW5uZWwgQXJjaGl0ZWN0dXJlKSBoYXMgYW4gTk1JIGNoYWluIGZvciBOTUkgc291cmNlcwotICoJYWxvbmcgdGhlIE1DQSBidXMuICBVc2UgdGhpcyB0byBob29rIGludG8gdGhhdCBjaGFpbiBpZiB5b3Ugd2lsbCBuZWVkCi0gKglpdC4KLSAqKi8KLXZvaWQgbWNhX25taV9ob29rKHZvaWQpCi17Ci0JLyoKLQkgKiBJZiBJIHJlY2FsbCBjb3JyZWN0bHksIHRoZXJlJ3MgYSB3aG9sZSBidW5jaCBvZiBvdGhlciB0aGluZ3MgdGhhdAotCSAqIHdlIGNhbiBkbyB0byBjaGVjayBmb3IgTk1JIHByb2JsZW1zLCBidXQgdGhhdCdzIGFsbCBJIGtub3cgYWJvdXQKLQkgKiBhdCB0aGUgbW9tZW50LgotCSAqLwotCXByX3dhcm5pbmcoIk5NSSBnZW5lcmF0ZWQgZnJvbSB1bmtub3duIHNvdXJjZSFcbiIpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBfX2luaXQgaW50IG5vX2lwaV9icm9hZGNhc3QoY2hhciAqc3RyKQotewotCWdldF9vcHRpb24oJnN0ciwgJm5vX2Jyb2FkY2FzdCk7Ci0JcHJfaW5mbygiVXNpbmcgJXMgbW9kZVxuIiwKLQkJbm9fYnJvYWRjYXN0ID8gIk5vIElQSSBCcm9hZGNhc3QiIDogIklQSSBCcm9hZGNhc3QiKTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm5vX2lwaV9icm9hZGNhc3Q9Iiwgbm9faXBpX2Jyb2FkY2FzdCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHByaW50X2lwaV9tb2RlKHZvaWQpCi17Ci0JcHJfaW5mbygiVXNpbmcgSVBJICVzIG1vZGVcbiIsCi0JCW5vX2Jyb2FkY2FzdCA/ICJOby1TaG9ydGN1dCIgOiAiU2hvcnRjdXQiKTsKLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChwcmludF9pcGlfbW9kZSk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9NYWtlZmlsZSBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjczMGY0ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgZ2VuZXJpYyBhcmNoaXRlY3R1cmUKLSMKLQotRVhUUkFfQ0ZMQUdTCQkJOj0gLUlhcmNoL3g4Ni9rZXJuZWwKLQotb2JqLXkJCQkJOj0gcHJvYmUubyBkZWZhdWx0Lm8KLW9iai0kKENPTkZJR19YODZfTlVNQVEpCQkrPSBudW1hcS5vCi1vYmotJChDT05GSUdfWDg2X1NVTU1JVCkJKz0gc3VtbWl0Lm8KLW9iai0kKENPTkZJR19YODZfQklHU01QKQkrPSBiaWdzbXAubwotb2JqLSQoQ09ORklHX1g4Nl9FUzcwMDApCSs9IGVzNzAwMC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNGM3ODQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIEFQSUMgZHJpdmVyIGZvciAiYmlnc21wIiBYQVBJQyBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiA4IHZpcnR1YWwgQ1BVcy4KLSAqIERyaXZlcyB0aGUgbG9jYWwgQVBJQyBpbiAiY2x1c3RlcmVkIG1vZGUiLgotICovCi0jZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8YXNtL2JpZ3NtcC9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2JpZ3NtcC9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2JpZ3NtcC9pcGkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1Lmg+Ci0KLXN0YXRpYyBpbnQgZG1pX2JpZ3NtcDsgLyogY2FuIGJlIHNldCBieSBkbWkgc2Nhbm5lcnMgKi8KLQotc3RhdGljIGludCBocF9odF9iaWdzbXAoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCi17Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIlcyBkZXRlY3RlZDogZm9yY2UgdXNlIG9mIGFwaWM9Ymlnc21wXG4iLCBkLT5pZGVudCk7Ci0JZG1pX2JpZ3NtcCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGJpZ3NtcF9kbWlfdGFibGVbXSA9IHsKLQl7IGhwX2h0X2JpZ3NtcCwgIkhQIFByb0xpYW50IERMNzYwIEcyIiwKLQl7IERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAotCURNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCAiUDQ0LSIpLH0KLQl9LAotCi0JeyBocF9odF9iaWdzbXAsICJIUCBQcm9MaWFudCBETDc0MCIsCi0JeyBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiSFAiKSwKLQlETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwgIlA0Ny0iKSx9Ci0JfSwKLQkgeyB9Ci19OwotCi1zdGF0aWMgdm9pZCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgY3B1bWFza190ICpyZXRtYXNrKQotewotCWNwdXNfY2xlYXIoKnJldG1hc2spOwotCWNwdV9zZXQoY3B1LCAqcmV0bWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvYmVfYmlnc21wKHZvaWQpCi17Ci0JaWYgKGRlZl90b19iaWdzbXApCi0JCWRtaV9iaWdzbXAgPSAxOwotCWVsc2UKLQkJZG1pX2NoZWNrX3N5c3RlbShiaWdzbXBfZG1pX3RhYmxlKTsKLQlyZXR1cm4gZG1pX2JpZ3NtcDsKLX0KLQotc3RydWN0IGdlbmFwaWMgYXBpY19iaWdzbXAgPSBBUElDX0lOSVQoImJpZ3NtcCIsIHByb2JlX2JpZ3NtcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2RlZmF1bHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYzYTRhNy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIERlZmF1bHQgZ2VuZXJpYyBBUElDIGRyaXZlci4gVGhpcyBoYW5kbGVzIHVwIHRvIDggQ1BVcy4KLSAqLwotI2RlZmluZSBBUElDX0RFRklOSVRJT04gMQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfaXBpLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9tYWNoX21wcGFyc2UuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oPgotCi0vKiBzaG91bGQgYmUgY2FsbGVkIGxhc3QuICovCi1zdGF0aWMgaW50IHByb2JlX2RlZmF1bHQodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RydWN0IGdlbmFwaWMgYXBpY19kZWZhdWx0ID0gQVBJQ19JTklUKCJkZWZhdWx0IiwgcHJvYmVfZGVmYXVsdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZGVkMTQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBBUElDIGRyaXZlciBmb3IgdGhlIFVuaXN5cyBFUzcwMDAgY2hpcHNldC4KLSAqLwotI2RlZmluZSBBUElDX0RFRklOSVRJT04gMQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgotI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9lczcwMDAvYXBpY2RlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGFzbS9lczcwMDAvYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9lczcwMDAvaXBpLmg+Ci0jaW5jbHVkZSA8YXNtL2VzNzAwMC9tcHBhcnNlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaD4KLQotdm9pZCBfX2luaXQgZXM3MDAwX3VwZGF0ZV9nZW5hcGljX3RvX2NsdXN0ZXIodm9pZCkKLXsKLQlnZW5hcGljLT50YXJnZXRfY3B1cyA9IHRhcmdldF9jcHVzX2NsdXN0ZXI7Ci0JZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERV9DTFVTVEVSOwotCWdlbmFwaWMtPmludF9kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFX0NMVVNURVI7Ci0JZ2VuYXBpYy0+bm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUV9DTFVTVEVSOwotCi0JZ2VuYXBpYy0+aW5pdF9hcGljX2xkciA9IGluaXRfYXBpY19sZHJfY2x1c3RlcjsKLQotCWdlbmFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZCA9IGNwdV9tYXNrX3RvX2FwaWNpZF9jbHVzdGVyOwotfQotCi1zdGF0aWMgaW50IHByb2JlX2VzNzAwMCh2b2lkKQotewotCS8qIHByb2JlZCBsYXRlciBpbiBtcHRhYmxlL0FDUEkgaG9va3MgKi8KLQlyZXR1cm4gMDsKLX0KLQotZXh0ZXJuIHZvaWQgZXM3MDAwX3N3X2FwaWModm9pZCk7Ci1zdGF0aWMgdm9pZCBfX2luaXQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQotewotCWVzNzAwMF9zd19hcGljKCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgX19pbml0IGludAotbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgY2hhciAqcHJvZHVjdGlkKQotewotCWlmIChtcGMtPm9lbXB0cikgewotCQlzdHJ1Y3QgbXBjX29lbXRhYmxlICpvZW1fdGFibGUgPQotCQkJKHN0cnVjdCBtcGNfb2VtdGFibGUgKiltcGMtPm9lbXB0cjsKLQkJaWYgKCFzdHJuY21wKG9lbSwgIlVOSVNZUyIsIDYpKQotCQkJcmV0dXJuIHBhcnNlX3VuaXN5c19vZW0oKGNoYXIgKilvZW1fdGFibGUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19BQ1BJCi0vKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCXVuc2lnbmVkIGxvbmcgb2VtX2FkZHIgPSAwOwotCWludCBjaGVja19kc2R0OwotCWludCByZXQgPSAwOwotCi0JLyogY2hlY2sgZHNkdCBhdCBmaXJzdCB0byBhdm9pZCBjbGVhciBmaXhfbWFwIGZvciBvZW1fYWRkciAqLwotCWNoZWNrX2RzZHQgPSBlczcwMDBfY2hlY2tfZHNkdCgpOwotCi0JaWYgKCFmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSgmb2VtX2FkZHIpKSB7Ci0JCWlmIChjaGVja19kc2R0KQotCQkJcmV0ID0gcGFyc2VfdW5pc3lzX29lbSgoY2hhciAqKW9lbV9hZGRyKTsKLQkJZWxzZSB7Ci0JCQlzZXR1cF91bmlzeXMoKTsKLQkJCXJldCA9IDE7Ci0JCX0KLQkJLyoKLQkJICogd2UgbmVlZCB0byB1bm1hcCBpdAotCQkgKi8KLQkJdW5tYXBfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKG9lbV9hZGRyKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCi17Ci0JLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKLQkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAotCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgotCSAqCi0JICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KLQkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKLQkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgotCSAqLwotCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBfX2luaXRkYXRhX3JlZm9rIGFwaWNfZXM3MDAwID0gQVBJQ19JTklUKCJlczcwMDAiLCBwcm9iZV9lczcwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3OWUyMi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBBUElDIGRyaXZlciBmb3IgdGhlIElCTSBOVU1BUSBjaGlwc2V0LgotICovCi0jZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL251bWFxL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxhc20vbnVtYXEvYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9udW1hcS9pcGkuaD4KLSNpbmNsdWRlIDxhc20vbnVtYXEvbXBwYXJzZS5oPgotI2luY2x1ZGUgPGFzbS9udW1hcS93YWtlY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL251bWFxLmg+Ci0KLXN0YXRpYyBpbnQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgY2hhciAqcHJvZHVjdGlkKQotewotCW51bWFxX21wc19vZW1fY2hlY2sobXBjLCBvZW0sIHByb2R1Y3RpZCk7Ci0JcmV0dXJuIGZvdW5kX251bWFxOwotfQotCi1zdGF0aWMgaW50IHByb2JlX251bWFxKHZvaWQpCi17Ci0JLyogYWxyZWFkeSBrbm93IGZyb20gZ2V0X21lbWNmZ19udW1hcSgpICovCi0JcmV0dXJuIGZvdW5kX251bWFxOwotfQotCi0vKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCi1zdGF0aWMgaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCi17Ci0JLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKLQkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAotCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgotCSAqCi0JICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KLQkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKLQkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgotCSAqLwotCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX251bWFxID0gQVBJQ19JTklUKCJOVU1BUSIsIHByb2JlX251bWFxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YTM4ZGEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCi0gKgotICogR2VuZXJpYyB4ODYgQVBJQyBkcml2ZXIgcHJvYmUgbGF5ZXIuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX251bWFxOwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfc3VtbWl0OwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfYmlnc21wOwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZXM3MDAwOwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZGVmYXVsdDsKLQotc3RydWN0IGdlbmFwaWMgKmdlbmFwaWMgPSAmYXBpY19kZWZhdWx0OwotCi1zdGF0aWMgc3RydWN0IGdlbmFwaWMgKmFwaWNfcHJvYmVbXSBfX2luaXRkYXRhID0gewotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQkmYXBpY19udW1hcSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfU1VNTUlUCi0JJmFwaWNfc3VtbWl0LAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9CSUdTTVAKLQkmYXBpY19iaWdzbXAsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0VTNzAwMAotCSZhcGljX2VzNzAwMCwKLSNlbmRpZgotCSZhcGljX2RlZmF1bHQsCS8qIG11c3QgYmUgbGFzdCAqLwotCU5VTEwsCi19OwotCi1zdGF0aWMgaW50IGNtZGxpbmVfYXBpYyBfX2luaXRkYXRhOwotc3RhdGljIGludCBfX2luaXQgcGFyc2VfYXBpYyhjaGFyICphcmcpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoYXBpY19wcm9iZVtpXS0+bmFtZSwgYXJnKSkgewotCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQljbWRsaW5lX2FwaWMgPSAxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMpCi0JCXg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKCk7Ci0KLQkvKiBQYXJzZWQgYWdhaW4gYnkgX19zZXR1cCBmb3IgZGVidWcvdmVyYm9zZSAqLwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImFwaWMiLCBwYXJzZV9hcGljKTsKLQotdm9pZCBfX2luaXQgZ2VuZXJpY19iaWdzbXBfcHJvYmUodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAotCS8qCi0JICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gc3dpdGNoIHRvIGJpZ3NtcCBtb2RlIHdoZW4KLQkgKiAtIFRoZXJlIGlzIG5vIGFwaWM9IG9wdGlvbiBzcGVjaWZpZWQgYnkgdGhlIHVzZXIKLQkgKiAtIGdlbmVyaWNfYXBpY19wcm9iZSgpIGhhcyBjaG9zZW4gYXBpY19kZWZhdWx0IGFzIHRoZSBzdWJfYXJjaAotCSAqIC0gd2UgZmluZCBtb3JlIHRoYW4gOCBDUFVzIGluIGFjcGkgTEFQSUMgbGlzdGluZyB3aXRoIHhBUElDIHN1cHBvcnQKLQkgKi8KLQotCWlmICghY21kbGluZV9hcGljICYmIGdlbmFwaWMgPT0gJmFwaWNfZGVmYXVsdCkgewotCQlpZiAoYXBpY19iaWdzbXAucHJvYmUoKSkgewotCQkJZ2VuYXBpYyA9ICZhcGljX2JpZ3NtcDsKLQkJCWlmICh4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYykKLQkJCQl4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYygpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiT3ZlcnJpZGluZyBBUElDIGRyaXZlciB3aXRoICVzXG4iLAotCQkJICAgICAgIGdlbmFwaWMtPm5hbWUpOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLXZvaWQgX19pbml0IGdlbmVyaWNfYXBpY19wcm9iZSh2b2lkKQotewotCWlmICghY21kbGluZV9hcGljKSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyBpKyspIHsKLQkJCWlmIChhcGljX3Byb2JlW2ldLT5wcm9iZSgpKSB7Ci0JCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLyogTm90IHZpc2libGUgd2l0aG91dCBlYXJseSBjb25zb2xlICovCi0JCWlmICghYXBpY19wcm9iZVtpXSkKLQkJCXBhbmljKCJEaWRuJ3QgZmluZCBhbiBBUElDIGRyaXZlciIpOwotCi0JCWlmICh4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYykKLQkJCXg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKCk7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEFQSUMgZHJpdmVyICVzXG4iLCBnZW5hcGljLT5uYW1lKTsKLX0KLQotLyogVGhlc2UgZnVuY3Rpb25zIGNhbiBzd2l0Y2ggdGhlIEFQSUMgZXZlbiBhZnRlciB0aGUgaW5pdGlhbCAtPnByb2JlKCkgKi8KLQotaW50IF9faW5pdCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7Ci0JCWlmIChhcGljX3Byb2JlW2ldLT5tcHNfb2VtX2NoZWNrKG1wYywgb2VtLCBwcm9kdWN0aWQpKSB7Ci0JCQlpZiAoIWNtZGxpbmVfYXBpYykgewotCQkJCWdlbmFwaWMgPSBhcGljX3Byb2JlW2ldOwotCQkJCWlmICh4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYykKLQkJCQkJeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMoKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBBUElDIGRyaXZlciBgJXMnLlxuIiwKLQkJCQkgICAgICAgZ2VuYXBpYy0+bmFtZSk7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9faW5pdCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07ICsraSkgewotCQlpZiAoYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjayhvZW1faWQsIG9lbV90YWJsZV9pZCkpIHsKLQkJCWlmICghY21kbGluZV9hcGljKSB7Ci0JCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQkJaWYgKHg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKQotCQkJCQl4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYygpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAotCQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JcmV0dXJuIGdlbmFwaWMtPmdldF9hcGljX2lkKCoodW5zaWduZWQgbG9uZyAqKShBUElDX0JBU0UrQVBJQ19JRCkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODIxZmZjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBBUElDIGRyaXZlciBmb3IgdGhlIElCTSAiU3VtbWl0IiBjaGlwc2V0LgotICovCi0jZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3N1bW1pdC9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8YXNtL3N1bW1pdC9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL3N1bW1pdC9pcGkuaD4KLSNpbmNsdWRlIDxhc20vc3VtbWl0L21wcGFyc2UuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oPgotCi1zdGF0aWMgaW50IHByb2JlX3N1bW1pdCh2b2lkKQotewotCS8qIHByb2JlZCBsYXRlciBpbiBtcHRhYmxlL0FDUEkgaG9va3MgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKLXsKLQkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cwotCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0Ci0JICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCi0JICoKLQkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bwotCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQotCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCi0JICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07Ci19Ci0KLXN0cnVjdCBnZW5hcGljIGFwaWNfc3VtbWl0ID0gQVBJQ19JTklUKCJzdW1taXQiLCBwcm9iZV9zdW1taXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L01ha2VmaWxlIGIvYXJjaC94ODYvbWFjaC1yZGMzMjF4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzI1YjRjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtcmRjMzIxeC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIFJEQzMyMXggc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotb2JqLSQoQ09ORklHX1g4Nl9SREMzMjFYKSAgICAgICAgOj0gZ3Bpby5vIHBsYXRmb3JtLm8KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L2dwaW8uYyBiL2FyY2gveDg2L21hY2gtcmRjMzIxeC9ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0N2YzM2QuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L2dwaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogIEdQSU8gc3VwcG9ydCBmb3IgUkRDIFNvQyBSMzIxMC9SODYxMAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCBWb2xrZXIgV2Vpc3MgPGRldkB0aW50dWMuZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1yZGMzMjF4L3JkYzMyMXhfZGVmcy5oPgotCi0KLS8qIHNwaW4gbG9jayB0byBwcm90ZWN0IG91ciBwcml2YXRlIGNvcHkgb2YgR1BJTyBkYXRhIHJlZ2lzdGVyIHBsdXMKLSAgIHRoZSBhY2Nlc3MgdG8gUENJIGNvbmYgcmVnaXN0ZXJzLiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOwotCi0vKiBjb3B5IG9mIEdQSU8gZGF0YSByZWdpc3RlcnMgKi8KLXN0YXRpYyB1MzIgZ3Bpb19kYXRhX3JlZzE7Ci1zdGF0aWMgdTMyIGdwaW9fZGF0YV9yZWcyOwotCi1zdGF0aWMgdTMyIGdwaW9fcmVxdWVzdF9kYXRhWzJdOwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZGMzMjF4X2NvbmZfd3JpdGUodW5zaWduZWQgYWRkciwgdTMyIHZhbHVlKQotewotCW91dGwoKDEgPDwgMzEpIHwgKDcgPDwgMTEpIHwgYWRkciwgUkRDMzIxMF9DRkdSRUdfQUREUik7Ci0Jb3V0bCh2YWx1ZSwgUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZGMzMjF4X2NvbmZfb3IodW5zaWduZWQgYWRkciwgdTMyIHZhbHVlKQotewotCW91dGwoKDEgPDwgMzEpIHwgKDcgPDwgMTEpIHwgYWRkciwgUkRDMzIxMF9DRkdSRUdfQUREUik7Ci0JdmFsdWUgfD0gaW5sKFJEQzMyMTBfQ0ZHUkVHX0RBVEEpOwotCW91dGwodmFsdWUsIFJEQzMyMTBfQ0ZHUkVHX0RBVEEpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiByZGMzMjF4X2NvbmZfcmVhZCh1bnNpZ25lZCBhZGRyKQotewotCW91dGwoKDEgPDwgMzEpIHwgKDcgPDwgMTEpIHwgYWRkciwgUkRDMzIxMF9DRkdSRUdfQUREUik7Ci0KLQlyZXR1cm4gaW5sKFJEQzMyMTBfQ0ZHUkVHX0RBVEEpOwotfQotCi0vKiBjb25maWd1cmUgcGluIGFzIEdQSU8gKi8KLXN0YXRpYyB2b2lkIHJkYzMyMXhfY29uZmlndXJlX2dwaW8odW5zaWduZWQgZ3BpbykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCXJkYzMyMXhfY29uZl9vcihncGlvIDwgMzIKLQkJPyBSREMzMjFYX0dQSU9fQ1RSTF9SRUcxIDogUkRDMzIxWF9HUElPX0NUUkxfUkVHMiwKLQkJMSA8PCAoZ3BpbyAmIDB4MWYpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLX0KLQotLyogaW5pdGlhbGx5IHNldHVwIHRoZSAyIGNvcGllcyBvZiB0aGUgZ3BpbyBkYXRhIHJlZ2lzdGVycy4KLSAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIHNldHVwIGNvZGUuICovCi12b2lkIF9faW5pdCByZGMzMjF4X2dwaW9fc2V0dXAoKQotewotCS8qIHRoaXMgbWlnaHQgbm90IGJlLCB3aGF0IG90aGVycyAoQklPUywgYm9vdGxvYWRlciwgZXRjLikKLQkgICB3cm90ZSB0byB0aGVzZSByZWdpc3RlcnMgYmVmb3JlLCBidXQgaXQncyBhIGdvb2QgZ3Vlc3MuIFN0aWxsCi0JICAgYmV0dGVyIHRoYW4ganVzdCB1c2luZyAweGZmZmZmZmZmLiAqLwotCi0JZ3Bpb19kYXRhX3JlZzEgPSByZGMzMjF4X2NvbmZfcmVhZChSREMzMjFYX0dQSU9fREFUQV9SRUcxKTsKLQlncGlvX2RhdGFfcmVnMiA9IHJkYzMyMXhfY29uZl9yZWFkKFJEQzMyMVhfR1BJT19EQVRBX1JFRzIpOwotfQotCi0vKiBkZXRlcm1pbmUsIGlmIGdwaW8gbnVtYmVyIGlzIHZhbGlkICovCi1zdGF0aWMgaW5saW5lIGludCByZGMzMjF4X2lzX2dwaW8odW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gZ3BpbyA8PSBSREMzMjFYX01BWF9HUElPOwotfQotCi0vKiByZXF1ZXN0IEdQSU8gKi8KLWludCByZGNfZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXJkYzMyMXhfaXNfZ3BpbyhncGlvKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JaWYgKGdwaW9fcmVxdWVzdF9kYXRhWyhncGlvICYgMHgyMCkgPyAxIDogMF0gJiAoMSA8PCAoZ3BpbyAmIDB4MWYpKSkKLQkJZ290byBpbnVzZTsKLQlncGlvX3JlcXVlc3RfZGF0YVsoZ3BpbyAmIDB4MjApID8gMSA6IDBdIHw9ICgxIDw8IChncGlvICYgMHgxZikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci1pbnVzZToKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLUVYUE9SVF9TWU1CT0wocmRjX2dwaW9fcmVxdWVzdCk7Ci0KLS8qIHJlbGVhc2UgcHJldmlvdXNseS1jbGFpbWVkIEdQSU8gKi8KLXZvaWQgcmRjX2dwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXJkYzMyMXhfaXNfZ3BpbyhncGlvKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCWdwaW9fcmVxdWVzdF9kYXRhWyhncGlvICYgMHgyMCkgPyAxIDogMF0gJj0gfigxIDw8IChncGlvICYgMHgxZikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChyZGNfZ3Bpb19mcmVlKTsKLQotLyogcmVhZCBHUElPIHBpbiAqLwotaW50IHJkY19ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXUzMiByZWc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZWcgPSByZGMzMjF4X2NvbmZfcmVhZChncGlvIDwgMzIKLQkJPyBSREMzMjFYX0dQSU9fREFUQV9SRUcxIDogUkRDMzIxWF9HUElPX0RBVEFfUkVHMik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gKDEgPDwgKGdwaW8gJiAweDFmKSkgJiByZWcgPyAxIDogMDsKLX0KLUVYUE9SVF9TWU1CT0wocmRjX2dwaW9fZ2V0X3ZhbHVlKTsKLQotLyogc2V0IEdQSU8gcGluIHRvIHZhbHVlICovCi12b2lkIHJkY19ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgcmVnOwotCi0JcmVnID0gMSA8PCAoZ3BpbyAmIDB4MWYpOwotCWlmIChncGlvIDwgMzIpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlpZiAodmFsdWUpCi0JCQlncGlvX2RhdGFfcmVnMSB8PSByZWc7Ci0JCWVsc2UKLQkJCWdwaW9fZGF0YV9yZWcxICY9IH5yZWc7Ci0JCXJkYzMyMXhfY29uZl93cml0ZShSREMzMjFYX0dQSU9fREFUQV9SRUcxLCBncGlvX2RhdGFfcmVnMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHZhbHVlKQotCQkJZ3Bpb19kYXRhX3JlZzIgfD0gcmVnOwotCQllbHNlCi0JCQlncGlvX2RhdGFfcmVnMiAmPSB+cmVnOwotCQlyZGMzMjF4X2NvbmZfd3JpdGUoUkRDMzIxWF9HUElPX0RBVEFfUkVHMiwgZ3Bpb19kYXRhX3JlZzIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKHJkY19ncGlvX3NldF92YWx1ZSk7Ci0KLS8qIGNvbmZpZ3VyZSBHUElPIHBpbiBhcyBpbnB1dCAqLwotaW50IHJkY19ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCWlmICghcmRjMzIxeF9pc19ncGlvKGdwaW8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJkYzMyMXhfY29uZmlndXJlX2dwaW8oZ3Bpbyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocmRjX2dwaW9fZGlyZWN0aW9uX2lucHV0KTsKLQotLyogY29uZmlndXJlIEdQSU8gcGluIGFzIG91dHB1dCBhbmQgc2V0IHZhbHVlICovCi1pbnQgcmRjX2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JaWYgKCFyZGMzMjF4X2lzX2dwaW8oZ3BpbykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotCXJkYzMyMXhfY29uZmlndXJlX2dwaW8oZ3Bpbyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocmRjX2dwaW9fZGlyZWN0aW9uX291dHB1dCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvcGxhdGZvcm0uYyBiL2FyY2gveDg2L21hY2gtcmRjMzIxeC9wbGF0Zm9ybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjRlNTBjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtcmRjMzIxeC9wbGF0Zm9ybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqICBHZW5lcmljIFJEQzMyMXggcGxhdGZvcm0gZGV2aWNlcwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotCi0vKiBMRURTICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRlZmF1bHRfbGVkc1tdID0gewotCXsgLm5hbWUgPSAicmRjOmRteiIsIC5ncGlvID0gMSwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSByZGMzMjF4X2xlZF9kYXRhID0gewotCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoZGVmYXVsdF9sZWRzKSwKLQkubGVkcyA9IGRlZmF1bHRfbGVkcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJkYzMyMXhfbGVkcyA9IHsKLQkubmFtZSA9ICJsZWRzLWdwaW8iLAotCS5pZCA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnJkYzMyMXhfbGVkX2RhdGEsCi0JfQotfTsKLQotLyogV2F0Y2hkb2cgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJkYzMyMXhfd2R0ID0gewotCS5uYW1lID0gInJkYzMyMXgtd2R0IiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcmRjMzIxeF9kZXZzW10gPSB7Ci0JJnJkYzMyMXhfbGVkcywKLQkmcmRjMzIxeF93ZHQKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHJkY19ib2FyZF9zZXR1cCh2b2lkKQotewotCXJkYzMyMXhfZ3Bpb19zZXR1cCgpOwotCi0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHJkYzMyMXhfZGV2cywgQVJSQVlfU0laRShyZGMzMjF4X2RldnMpKTsKLX0KLQotYXJjaF9pbml0Y2FsbChyZGNfYm9hcmRfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL01ha2VmaWxlIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWMyNTBiLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtdm95YWdlci9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KLSMKLQotRVhUUkFfQ0ZMQUdTCTo9IC1JYXJjaC94ODYva2VybmVsCi1vYmoteQkJCTo9IHNldHVwLm8gdm95YWdlcl9iYXNpYy5vIHZveWFnZXJfdGhyZWFkLm8KLQotb2JqLSQoQ09ORklHX1NNUCkJKz0gdm95YWdlcl9zbXAubyB2b3lhZ2VyX2NhdC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTUxMTgzLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtdm95YWdlci9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKglNYWNoaW5lIHNwZWNpZmljIHNldHVwIGZvciBnZW5lcmljCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS92b3lhZ2VyLmg+Ci0jaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotdm9pZCBfX2luaXQgcHJlX2ludHJfaW5pdF9ob29rKHZvaWQpCi17Ci0JaW5pdF9JU0FfaXJxcygpOwotfQotCi0vKgotICogSVJRMiBpcyBjYXNjYWRlIGludGVycnVwdCB0byBzZWNvbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIKLSAqLwotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMiA9IHsKLQkuaGFuZGxlciA9IG5vX2FjdGlvbiwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCi0JLm5hbWUgPSAiY2FzY2FkZSIsCi19OwotCi12b2lkIF9faW5pdCBpbnRyX2luaXRfaG9vayh2b2lkKQotewotI2lmZGVmIENPTkZJR19TTVAKLQl2b3lhZ2VyX3NtcF9pbnRyX2luaXQoKTsKLSNlbmRpZgotCi0Jc2V0dXBfaXJxKDIsICZpcnEyKTsKLX0KLQotc3RhdGljIHZvaWQgdm95YWdlcl9kaXNhYmxlX3RzYyh2b2lkKQotewotCS8qIFZveWFnZXJzIHJ1biB0aGVpciBDUFVzIGZyb20gaW5kZXBlbmRlbnQgY2xvY2tzLCBzbyBkaXNhYmxlCi0JICogdGhlIFRTQyBjb2RlIGJlY2F1c2Ugd2UgY2FuJ3Qgc3luYyB0aGVtICovCi0Jc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9UU0MpOwotfQotCi12b2lkIF9faW5pdCBwcmVfc2V0dXBfYXJjaF9ob29rKHZvaWQpCi17Ci0Jdm95YWdlcl9kaXNhYmxlX3RzYygpOwotfQotCi12b2lkIF9faW5pdCBwcmVfdGltZV9pbml0X2hvb2sodm9pZCkKLXsKLQl2b3lhZ2VyX2Rpc2FibGVfdHNjKCk7Ci19Ci0KLXZvaWQgX19pbml0IHRyYXBfaW5pdF9ob29rKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7Ci0JLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX0lSUVBPTEwgfCBJUlFGX1RJTUVSLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKLQkubmFtZSA9ICJ0aW1lciIKLX07Ci0KLXZvaWQgX19pbml0IHRpbWVfaW5pdF9ob29rKHZvaWQpCi17Ci0JaXJxMC5tYXNrID0gY3B1bWFza19vZl9jcHUoc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXNldHVwX2lycSgwLCAmaXJxMCk7Ci19Ci0KLS8qIEhvb2sgZm9yIG1hY2hpbmUgc3BlY2lmaWMgbWVtb3J5IHNldHVwLiAqLwotCi1jaGFyICpfX2luaXQgbWFjaGluZV9zcGVjaWZpY19tZW1vcnlfc2V0dXAodm9pZCkKLXsKLQljaGFyICp3aG87Ci0JaW50IG5ld19ucjsKLQotCXdobyA9ICJOT1QgVk9ZQUdFUiI7Ci0KLQlpZiAodm95YWdlcl9sZXZlbCA9PSA1KSB7Ci0JCV9fdTMyIGFkZHIsIGxlbmd0aDsKLQkJaW50IGk7Ci0KLQkJd2hvID0gIlZveWFnZXItU1VTIjsKLQotCQllODIwLm5yX21hcCA9IDA7Ci0JCWZvciAoaSA9IDA7IHZveWFnZXJfbWVtb3J5X2RldGVjdChpLCAmYWRkciwgJmxlbmd0aCk7IGkrKykgewotCQkJZTgyMF9hZGRfcmVnaW9uKGFkZHIsIGxlbmd0aCwgRTgyMF9SQU0pOwotCQl9Ci0JCXJldHVybiB3aG87Ci0JfSBlbHNlIGlmICh2b3lhZ2VyX2xldmVsID09IDQpIHsKLQkJX191MzIgdG9tOwotCQlfX3UxNiBjYXRiYXNlID0gaW5iKFZPWUFHRVJfU1NQQl9SRUxPQ0FUSU9OX1BPUlQpIDw8IDg7Ci0JCS8qIHNlbGVjdCB0aGUgRElOTyBjb25maWcgc3BhY2UgKi8KLQkJb3V0YihWT1lBR0VSX0RJTk8sIFZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUKTsKLQkJLyogUmVhZCBESU5PIHRvcCBvZiBtZW1vcnkgcmVnaXN0ZXIgKi8KLQkJdG9tID0gKChpbmIoY2F0YmFzZSArIDB4NCkgJiAweGYwKSA8PCAxNikKLQkJICAgICsgKChpbmIoY2F0YmFzZSArIDB4NSkgJiAweDdmKSA8PCAyNCk7Ci0KLQkJaWYgKGluYihjYXRiYXNlKSAhPSBWT1lBR0VSX0RJTk8pIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJWb3lhZ2VyOiBGYWlsZWQgdG8gZ2V0IERJTk8gZm9yIEw0LCBzZXR0aW5nIHRvbSB0byBFWFRfTUVNX0tcbiIpOwotCQkJdG9tID0gKGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLmV4dF9tZW1faykgPDwgMTA7Ci0JCX0KLQkJd2hvID0gIlZveWFnZXItVE9NIjsKLQkJZTgyMF9hZGRfcmVnaW9uKDAsIDB4OWYwMDAsIEU4MjBfUkFNKTsKLQkJLyogbWFwIGZyb20gMU0gdG8gdG9wIG9mIG1lbW9yeSAqLwotCQllODIwX2FkZF9yZWdpb24oMSAqIDEwMjQgKiAxMDI0LCB0b20gLSAxICogMTAyNCAqIDEwMjQsCi0JCQkJICBFODIwX1JBTSk7Ci0JCS8qIEZJWE1FOiBTaG91bGQgY2hlY2sgdGhlIEFTSUNzIHRvIHNlZSBpZiBJIG5lZWQgdG8KLQkJICogdGFrZSBvdXQgdGhlIDhNIHdpbmRvdy4gIEp1c3QgZG8gaXQgYXQgdGhlIG1vbWVudAotCQkgKiAqLwotCQllODIwX2FkZF9yZWdpb24oOCAqIDEwMjQgKiAxMDI0LCA4ICogMTAyNCAqIDEwMjQsCi0JCQkJICBFODIwX1JFU0VSVkVEKTsKLQkJcmV0dXJuIHdobzsKLQl9Ci0KLQlyZXR1cm4gZGVmYXVsdF9tYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZDZmODAuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMSAKLSAqCi0gKiBBdXRob3I6IEouRS5KLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSB2b3lhZ2VyIHNwZWNpZmljIHJvdXRpbmVzIGZvciBnZXR0aW5nCi0gKiBpbml0aWFsaXNhdGlvbiBvZiB0aGUgYXJjaGl0ZWN0dXJlIHRvIGZ1bmN0aW9uLiAgRm9yIGFkZGl0aW9uYWwKLSAqIGZlYXR1cmVzIHNlZToKLSAqCi0gKgl2b3lhZ2VyX2NhdC5jIC0gVm95YWdlciBDQVQgYnVzIGludGVyZmFjZQotICoJdm95YWdlcl9zbXAuYyAtIFZveWFnZXIgU01QIGhhbCAoZW11bGF0ZXMgbGludXggc21wLmMpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KLSNpbmNsdWRlIDxhc20vdmljLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS9pODI1My5oPgotCi0vKgotICogUG93ZXIgb2ZmIGZ1bmN0aW9uLCBpZiBhbnkKLSAqLwotdm9pZCAoKnBtX3Bvd2VyX29mZikgKHZvaWQpOwotRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOwotCi1pbnQgdm95YWdlcl9sZXZlbCA9IDA7Ci0KLXN0cnVjdCB2b3lhZ2VyX1NVUyAqdm95YWdlcl9TVVMgPSBOVUxMOwotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgdm95YWdlcl9kdW1wKGludCBkdW1teTEsIHN0cnVjdCB0dHlfc3RydWN0ICpkdW1teTMpCi17Ci0JLyogZ2V0IGhlcmUgdmlhIGEgc3lzcnEgKi8KLQl2b3lhZ2VyX3NtcF9kdW1wKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3ZveWFnZXJfZHVtcF9vcCA9IHsKLQkuaGFuZGxlciA9IHZveWFnZXJfZHVtcCwKLQkuaGVscF9tc2cgPSAiVm95YWdlciIsCi0JLmFjdGlvbl9tc2cgPSAiRHVtcCBWb3lhZ2VyIFN0YXR1cyIsCi19OwotI2VuZGlmCi0KLXZvaWQgdm95YWdlcl9kZXRlY3Qoc3RydWN0IHZveWFnZXJfYmlvc19pbmZvICpiaW9zKQotewotCWlmIChiaW9zLT5sZW4gIT0gMHhmZikgewotCQlpbnQgY2xhc3MgPSAoYmlvcy0+Y2xhc3NfMSA8PCA4KQotCQkgICAgfCAoYmlvcy0+Y2xhc3NfMiAmIDB4ZmYpOwotCi0JCXByaW50aygiVm95YWdlciBTeXN0ZW0gZGV0ZWN0ZWQuXG4iCi0JCSAgICAgICAiICAgICAgICBDbGFzcyAleCwgUmV2aXNpb24gJWQuJWRcbiIsCi0JCSAgICAgICBjbGFzcywgYmlvcy0+bWFqb3IsIGJpb3MtPm1pbm9yKTsKLQkJaWYgKGNsYXNzID09IFZPWUFHRVJfTEVWRUw0KQotCQkJdm95YWdlcl9sZXZlbCA9IDQ7Ci0JCWVsc2UgaWYgKGNsYXNzIDwgVk9ZQUdFUl9MRVZFTDVfQU5EX0FCT1ZFKQotCQkJdm95YWdlcl9sZXZlbCA9IDM7Ci0JCWVsc2UKLQkJCXZveWFnZXJfbGV2ZWwgPSA1OwotCQlwcmludGsoIiAgICAgICAgQXJjaGl0ZWN0dXJlIExldmVsICVkXG4iLCB2b3lhZ2VyX2xldmVsKTsKLQkJaWYgKHZveWFnZXJfbGV2ZWwgPCA0KQotCQkJcHJpbnRrCi0JCQkgICAgKCJcbioqV0FSTklORyoqOiBWb3lhZ2VyIEhBTCBvbmx5IHN1cHBvcnRzIExldmVscyA0IGFuZCA1IEFyY2hpdGVjdHVyZXMgYXQgdGhlIG1vbWVudFxuXG4iKTsKLQkJLyogaW5zdGFsbCB0aGUgcG93ZXIgb2ZmIGhhbmRsZXIgKi8KLQkJcG1fcG93ZXJfb2ZmID0gdm95YWdlcl9wb3dlcl9vZmY7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3YnLCAmc3lzcnFfdm95YWdlcl9kdW1wX29wKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXByaW50aygiXG5cbioqV0FSTklORyoqOiBObyBWb3lhZ2VyIFN1YnN5c3RlbSBGb3VuZFxuIik7Ci0JfQotfQotCi12b2lkIHZveWFnZXJfc3lzdGVtX2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCi17Ci0JcHJpbnRrKCJWb3lhZ2VyOiBkZXRlY3RlZCBzeXN0ZW0gaW50ZXJydXB0XG4iKTsKLX0KLQotLyogUm91dGluZSB0byByZWFkIGluZm9ybWF0aW9uIGZyb20gdGhlIGV4dGVuZGVkIENNT1MgYXJlYSAqLwotX191OCB2b3lhZ2VyX2V4dGVuZGVkX2Ntb3NfcmVhZChfX3UxNiBhZGRyKQotewotCW91dGIoYWRkciAmIDB4ZmYsIDB4NzQpOwotCW91dGIoKGFkZHIgPj4gOCkgJiAweGZmLCAweDc1KTsKLQlyZXR1cm4gaW5iKDB4NzYpOwotfQotCi0vKiBpbnRlcm5hbCBkZWZpbml0aW9ucyBmb3IgdGhlIFNVUyBDbGljayBNYXAgb2YgbWVtb3J5ICovCi0KLSNkZWZpbmUgQ0xJQ0tfRU5UUklFUwkxNgotI2RlZmluZSBDTElDS19TSVpFCTQwOTYJLyogY2xpY2sgdG8gYnl0ZSBjb252ZXJzaW9uIGZvciBMZW5ndGggKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQ2xpY2tNYXAgewotCXN0cnVjdCBFbnRyeSB7Ci0JCV9fdTMyIEFkZHJlc3M7Ci0JCV9fdTMyIExlbmd0aDsKLQl9IEVudHJ5W0NMSUNLX0VOVFJJRVNdOwotfSBDbGlja01hcF90OwotCi0vKiBUaGlzIHJvdXRpbmUgaXMgcHJldHR5IG11Y2ggYW4gYXdmdWwgaGFjayB0byByZWFkIHRoZSBiaW9zIGNsaWNrbWFwIGJ5Ci0gKiBtYXBwaW5nIGl0IGludG8gcGFnZSAwLiAgVGhlcmUgYXJlIHVzdWFsbHkgdGhyZWUgcmVnaW9ucyBpbiB0aGUgbWFwOgotICogCUJhc2UgTWVtb3J5Ci0gKiAJRXh0ZW5kZWQgTWVtb3J5Ci0gKgl6ZXJvIGxlbmd0aCBtYXJrZXIgZm9yIGVuZCBvZiBtYXAKLSAqCi0gKiBSZXR1cm5zIGFyZSAwIGZvciBmYWlsdXJlIGFuZCAxIGZvciBzdWNjZXNzIG9uIGV4dHJhY3RpbmcgcmVnaW9uLgotICovCi1pbnQgX19pbml0IHZveWFnZXJfbWVtb3J5X2RldGVjdChpbnQgcmVnaW9uLCBfX3UzMiAqIHN0YXJ0LCBfX3UzMiAqIGxlbmd0aCkKLXsKLQlpbnQgaTsKLQlpbnQgcmV0dmFsID0gMDsKLQlfX3U4IGNtb3NbNF07Ci0JQ2xpY2tNYXBfdCAqbWFwOwotCXVuc2lnbmVkIGxvbmcgbWFwX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBvbGQ7Ci0KLQlpZiAocmVnaW9uID49IENMSUNLX0VOVFJJRVMpIHsKLQkJcHJpbnRrKCJWb3lhZ2VyOiBJbGxlZ2FsIENsaWNrTWFwIHJlZ2lvbiAlZFxuIiwgcmVnaW9uKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihjbW9zKTsgaSsrKQotCQljbW9zW2ldID0KLQkJICAgIHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKFZPWUFHRVJfTUVNT1JZX0NMSUNLTUFQICsgaSk7Ci0KLQltYXBfYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKWNtb3M7Ci0KLQkvKiBzdGVhbCBwYWdlIDAgZm9yIHRoaXMgKi8KLQlvbGQgPSBwZzBbMF07Ci0JcGcwWzBdID0gKChtYXBfYWRkciAmIFBBR0VfTUFTSykgfCBfUEFHRV9SVyB8IF9QQUdFX1BSRVNFTlQpOwotCWxvY2FsX2ZsdXNoX3RsYigpOwotCS8qIG5vdyBjbGVhciBldmVyeXRoaW5nIG91dCBidXQgcGFnZSAwICovCi0JbWFwID0gKENsaWNrTWFwX3QgKikgKG1hcF9hZGRyICYgKH5QQUdFX01BU0spKTsKLQotCS8qIHplcm8gbGVuZ3RoIGlzIHRoZSBlbmQgb2YgdGhlIGNsaWNrbWFwICovCi0JaWYgKG1hcC0+RW50cnlbcmVnaW9uXS5MZW5ndGggIT0gMCkgewotCQkqbGVuZ3RoID0gbWFwLT5FbnRyeVtyZWdpb25dLkxlbmd0aCAqIENMSUNLX1NJWkU7Ci0JCSpzdGFydCA9IG1hcC0+RW50cnlbcmVnaW9uXS5BZGRyZXNzOwotCQlyZXR2YWwgPSAxOwotCX0KLQotCS8qIHJlcGxhY2UgdGhlIG1hcHBpbmcgKi8KLQlwZzBbMF0gPSBvbGQ7Ci0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyogdm95YWdlciBzcGVjaWZpYyBoYW5kbGluZyBjb2RlIGZvciB0aW1lciBpbnRlcnJ1cHRzLiAgVXNlZCB0byBoYW5kCi0gKiBvZmYgdGhlIHRpbWVyIHRpY2sgdG8gdGhlIFNNUCBjb2RlLCBzaW5jZSB0aGUgVklDIGRvZXNuJ3QgaGF2ZSBhbgotICogaW50ZXJuYWwgdGltZXIgKFRoZSBRSUMgZG9lcywgYnV0IHRoYXQncyBhbm90aGVyIHN0b3J5KS4gKi8KLXZvaWQgdm95YWdlcl90aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpZiAoKGppZmZpZXMgJiAweDNmZikgPT0gMCkgewotCi0JCS8qIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWV0aGluZyBmbGFreSBpbiBlaXRoZXIKLQkJICogaGFyZHdhcmUgb3Igc29mdHdhcmUgdGhhdCBpcyByZXNldHRpbmcgdGhlIHRpbWVyIDAKLQkJICogY291bnQgdG8gc29tZXRoaW5nIG11Y2ggaGlnaGVyIHRoYW4gaXQgc2hvdWxkIGJlCi0JCSAqIFRoaXMgc2VlbXMgdG8gb2NjdXIgaW4gdGhlIGJvb3Qgc2VxdWVuY2UsIGp1c3QKLQkJICogYmVmb3JlIHJvb3QgaXMgbW91bnRlZC4gIFRoZXJlZm9yZSwgZXZlcnkgMTAKLQkJICogc2Vjb25kcyBvciBzbywgd2Ugc2FuaXR5IGNoZWNrIHRoZSB0aW1lciB6ZXJvIGNvdW50Ci0JCSAqIGFuZCBraWNrIGl0IGJhY2sgdG8gd2hlcmUgaXQgc2hvdWxkIGJlLgotCQkgKgotCQkgKiBGSVhNRTogVGhpcyBpcyB0aGUgbW9zdCBhd2Z1bCBoYWNrIHlldCBzZWVuLiAgSQotCQkgKiBzaG91bGQgd29yayBvdXQgZXhhY3RseSB3aGF0IGlzIGludGVyZmVyaW5nIHdpdGgKLQkJICogdGhlIHRpbWVyIGNvdW50IHNldHRpbmdzIGVhcmx5IGluIHRoZSBib290IHNlcXVlbmNlCi0JCSAqIGFuZCBzd2lmdGx5IGludHJvZHVjZSBpdCB0byBzb21ldGhpbmcgc2hhcnAgYW5kCi0JCSAqIHBvaW50eS4gICovCi0JCV9fdTE2IHZhbDsKLQotCQlzcGluX2xvY2soJmk4MjUzX2xvY2spOwotCi0JCW91dGJfcCgweDAwLCAweDQzKTsKLQkJdmFsID0gaW5iX3AoMHg0MCk7Ci0JCXZhbCB8PSBpbmIoMHg0MCkgPDwgODsKLQkJc3Bpbl91bmxvY2soJmk4MjUzX2xvY2spOwotCi0JCWlmICh2YWwgPiBMQVRDSCkgewotCQkJcHJpbnRrCi0JCQkgICAgKCJcblZPWUFHRVI6IGNvdW50ZG93biB0aW1lciB2YWx1ZSB0b28gaGlnaCAoJWQpLCByZXNldHRpbmdcblxuIiwKLQkJCSAgICAgdmFsKTsKLQkJCXNwaW5fbG9jaygmaTgyNTNfbG9jayk7Ci0JCQlvdXRiKDB4MzQsIDB4NDMpOwotCQkJb3V0Yl9wKExBVENIICYgMHhmZiwgMHg0MCk7CS8qIExTQiAqLwotCQkJb3V0YihMQVRDSCA+PiA4LCAweDQwKTsJLyogTVNCICovCi0JCQlzcGluX3VubG9jaygmaTgyNTNfbG9jayk7Ci0JCX0KLQl9Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNtcF92aWNfdGltZXJfaW50ZXJydXB0KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCB2b3lhZ2VyX3Bvd2VyX29mZih2b2lkKQotewotCXByaW50aygiVk9ZQUdFUiBQb3dlciBPZmZcbiIpOwotCi0JaWYgKHZveWFnZXJfbGV2ZWwgPT0gNSkgewotCQl2b3lhZ2VyX2NhdF9wb3dlcl9vZmYoKTsKLQl9IGVsc2UgaWYgKHZveWFnZXJfbGV2ZWwgPT0gNCkgewotCQkvKiBUaGlzIGRvZXNuJ3QgYXBwYXJlbnRseSB3b3JrIG9uIG1vc3QgTDQgbWFjaGluZXMsCi0JCSAqIGJ1dCB0aGUgc3BlY3Mgc2F5IHRvIGRvIHRoaXMgdG8gZ2V0IGF1dG9tYXRpYyBwb3dlcgotCQkgKiBvZmYuICBVbmZvcnR1bmF0ZWx5LCBpZiBpdCBkb2Vzbid0IHBvd2VyIG9mZiB0aGUKLQkJICogbWFjaGluZSwgaXQgZW5kcyB1cCBkb2luZyBhIGNvbGQgcmVzdGFydCwgd2hpY2gKLQkJICogaXNuJ3QgcmVhbGx5IGludGVuZGVkLCBzbyBjb21tZW50IG91dCB0aGUgY29kZSAqLwotI2lmIDAKLQkJaW50IHBvcnQ7Ci0KLQkJLyogZW5hYmxlIHRoZSB2b3lhZ2VyIENvbmZpZ3VyYXRpb24gU3BhY2UgKi8KLQkJb3V0YigoaW5iKFZPWUFHRVJfTUNfU0VUVVApICYgMHhmMCkgfCAweDgsIFZPWUFHRVJfTUNfU0VUVVApOwotCQkvKiB0aGUgcG9ydCBmb3IgdGhlIHBvd2VyIG9mZiBmbGFnIGlzIGFuIG9mZnNldCBmcm9tIHRoZQotCQkgICBmbG9hdGluZyBiYXNlICovCi0JCXBvcnQgPSAoaW5iKFZPWUFHRVJfU1NQQl9SRUxPQ0FUSU9OX1BPUlQpIDw8IDgpICsgMHgyMTsKLQkJLyogc2V0IHRoZSBwb3dlciBvZmYgZmxhZyAqLwotCQlvdXRiKGluYihwb3J0KSB8IDB4MSwgcG9ydCk7Ci0jZW5kaWYKLQl9Ci0JLyogYW5kIHdhaXQgZm9yIGl0IHRvIGhhcHBlbiAqLwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JZm9yICg7OykKLQkJaGFsdCgpOwotfQotCi0vKiBjb3BpZWQgZnJvbSBwcm9jZXNzLmMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBrYl93YWl0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKQotCQlpZiAoKGluYl9wKDB4NjQpICYgMHgwMikgPT0gMCkKLQkJCWJyZWFrOwotfQotCi12b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCkKLXsKLQkvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgc2h1dGRvd24gbmVlZGVkIGJlZm9yZSBhIGtleGVjICovCi19Ci0KLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNtZCkKLXsKLQlwcmludGsoIlZveWFnZXIgV2FybSBSZXN0YXJ0XG4iKTsKLQlrYl93YWl0KCk7Ci0KLQlpZiAodm95YWdlcl9sZXZlbCA9PSA1KSB7Ci0JCS8qIHdyaXRlIG1hZ2ljIHZhbHVlcyB0byB0aGUgUlRDIHRvIGluZm9ybSBzeXN0ZW0gdGhhdAotCQkgKiBzaHV0ZG93biBpcyBiZWdpbm5pbmcgKi8KLQkJb3V0YigweDhmLCAweDcwKTsKLQkJb3V0YigweDUsIDB4NzEpOwotCi0JCXVkZWxheSg1MCk7Ci0JCW91dGIoMHhmZSwgMHg2NCk7CS8qIHB1bGwgcmVzZXQgbG93ICovCi0JfSBlbHNlIGlmICh2b3lhZ2VyX2xldmVsID09IDQpIHsKLQkJX191MTYgY2F0YmFzZSA9IGluYihWT1lBR0VSX1NTUEJfUkVMT0NBVElPTl9QT1JUKSA8PCA4OwotCQlfX3U4IGJhc2ViZCA9IGluYihWT1lBR0VSX01DX1NFVFVQKTsKLQotCQlvdXRiKGJhc2ViZCB8IDB4MDgsIFZPWUFHRVJfTUNfU0VUVVApOwotCQlvdXRiKDB4MDIsIGNhdGJhc2UgKyAweDIxKTsKLQl9Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlmb3IgKDs7KQotCQloYWx0KCk7Ci19Ci0KLXZvaWQgbWFjaGluZV9lbWVyZ2VuY3lfcmVzdGFydCh2b2lkKQotewotCS8qZm9yIG5vdywganVzdCBob29rIHRoaXMgdG8gYSB3YXJtIHJlc3RhcnQgKi8KLQltYWNoaW5lX3Jlc3RhcnQoTlVMTCk7Ci19Ci0KLXZvaWQgbWNhX25taV9ob29rKHZvaWQpCi17Ci0JX191OCBkdW1wdmFsIF9fbWF5YmVfdW51c2VkID0gaW5iKDB4ZjgyMyk7Ci0JX191OCBzd25taSBfX21heWJlX3VudXNlZCA9IGluYigweGY4MTMpOwotCi0JLyogRklYTUU6IGFzc3VtZSBkdW1wIHN3aXRjaCBwcmVzc2VkICovCi0JLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBkdW1wIHN3aXRjaCB3YXMgcHJlc3NlZCAqLwotCVZERUJVRygoIlZPWUFHRVI6IGR1bXB2YWwgPSAweCV4LCBzd25taSA9IDB4JXhcbiIsIGR1bXB2YWwsIHN3bm1pKSk7Ci0JLyogY2xlYXIgc3dubWkgKi8KLQlvdXRiKDB4ZmYsIDB4ZjgxMyk7Ci0JLyogdGVsbCBTVVMgdG8gaWdub3JlIGR1bXAgKi8KLQlpZiAodm95YWdlcl9sZXZlbCA9PSA1ICYmIHZveWFnZXJfU1VTICE9IE5VTEwpIHsKLQkJaWYgKHZveWFnZXJfU1VTLT5TVVNfbWJveCA9PSBWT1lBR0VSX0RVTVBfQlVUVE9OX05NSSkgewotCQkJdm95YWdlcl9TVVMtPmtlcm5lbF9tYm94ID0gVk9ZQUdFUl9OT19DT01NQU5EOwotCQkJdm95YWdlcl9TVVMtPmtlcm5lbF9mbGFncyB8PSBWT1lBR0VSX09TX0lOX1BST0dSRVNTOwotCQkJdWRlbGF5KDEwMDApOwotCQkJdm95YWdlcl9TVVMtPmtlcm5lbF9tYm94ID0gVk9ZQUdFUl9JR05PUkVfRFVNUDsKLQkJCXZveWFnZXJfU1VTLT5rZXJuZWxfZmxhZ3MgJj0gflZPWUFHRVJfT1NfSU5fUFJPR1JFU1M7Ci0JCX0KLQl9Ci0JcHJpbnRrKEtFUk5fRVJSCi0JICAgICAgICJWT1lBR0VSOiBEdW1wIHN3aXRjaCBwcmVzc2VkLCBwcmludGluZyBDUFUlZCB0cmFjZWJhY2tzXG4iLAotCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXNob3dfc3RhY2soTlVMTCwgTlVMTCk7Ci0Jc2hvd19zdGF0ZSgpOwotfQotCi12b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQotewotCS8qIHRyZWF0IGEgaGFsdCBsaWtlIGEgcG93ZXIgb2ZmICovCi0JbWFjaGluZV9wb3dlcl9vZmYoKTsKLX0KLQotdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQotewotCWlmIChwbV9wb3dlcl9vZmYpCi0JCXBtX3Bvd2VyX29mZigpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkNTk4Yy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDExOTcgKzAsMCBAQAotLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMQotICoKLSAqIEF1dGhvcjogSi5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGxvZ2ljIGZvciBtYW5pcHVsYXRpbmcgdGhlIENBVCBidXMKLSAqIGluIGEgbGV2ZWwgNSBtYWNoaW5lLgotICoKLSAqIFRoZSBDQVQgYnVzIGlzIGEgc2VyaWFsIGNvbmZpZ3VyYXRpb24gYW5kIHRlc3QgYnVzLiAgSXRzIHByaW1hcnkKLSAqIHVzZXMgYXJlIHRvIHByb2JlIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSBhbmQgdG8KLSAqIGRpYWdub3NlIGVycm9yIGNvbmRpdGlvbnMgd2hlbiBhIHN5c3RlbSBpbnRlcnJ1cHQgb2NjdXJzLiAgVGhlIGxvdwotICogbGV2ZWwgaW50ZXJmYWNlIGlzIGZhaXJseSBwcmltaXRpdmUsIHNvIG1vc3Qgb2YgdGhpcyBmaWxlIGNvbnNpc3RzCi0gKiBvZiBiaXQgc2hpZnQgbWFuaXB1bGF0aW9ucyB0byBzZW5kIGFuZCByZWNlaXZlIHBhY2tldHMgb24gdGhlCi0gKiBzZXJpYWwgYnVzICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS92b3lhZ2VyLmg+Ci0jaW5jbHVkZSA8YXNtL3ZpYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2lmZGVmIFZPWUFHRVJfQ0FUX0RFQlVHCi0jZGVmaW5lIENERUJVRyh4KQlwcmludGsgeAotI2Vsc2UKLSNkZWZpbmUgQ0RFQlVHKHgpCi0jZW5kaWYKLQotLyogdGhlIENBVCBjb21tYW5kIHBvcnQgKi8KLSNkZWZpbmUgQ0FUX0NNRAkJKHNzcGIgKyAweGUpCi0vKiB0aGUgQ0FUIGRhdGEgcG9ydCAqLwotI2RlZmluZSBDQVRfREFUQQkoc3NwYiArIDB4ZCkKLQotLyogdGhlIGludGVybmFsIGNhdCBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGNhdF9wYWNrKF9fdTggKiBtc2csIF9fdTE2IHN0YXJ0X2JpdCwgX191OCAqIGRhdGEsIF9fdTE2IG51bV9iaXRzKTsKLXN0YXRpYyB2b2lkIGNhdF91bnBhY2soX191OCAqIG1zZywgX191MTYgc3RhcnRfYml0LCBfX3U4ICogZGF0YSwKLQkJICAgICAgIF9fdTE2IG51bV9iaXRzKTsKLXN0YXRpYyB2b2lkIGNhdF9idWlsZF9oZWFkZXIoX191OCAqIGhlYWRlciwgY29uc3QgX191MTYgbGVuLAotCQkJICAgICBjb25zdCBfX3UxNiBzbWFsbGVzdF9yZWdfYml0cywKLQkJCSAgICAgY29uc3QgX191MTYgbG9uZ2VzdF9yZWdfYml0cyk7Ci1zdGF0aWMgaW50IGNhdF9zZW5kaW5zdCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwKLQkJCV9fdTggcmVnLCBfX3U4IG9wKTsKLXN0YXRpYyBpbnQgY2F0X2dldGRhdGEodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsCi0JCSAgICAgICBfX3U4IHJlZywgX191OCAqIHZhbHVlKTsKLXN0YXRpYyBpbnQgY2F0X3NoaWZ0b3V0KF9fdTggKiBkYXRhLCBfX3UxNiBkYXRhX2J5dGVzLCBfX3UxNiBoZWFkZXJfYnl0ZXMsCi0JCQlfX3U4IHBhZF9iaXRzKTsKLXN0YXRpYyBpbnQgY2F0X3dyaXRlKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3U4IHJlZywKLQkJICAgICBfX3U4IHZhbHVlKTsKLXN0YXRpYyBpbnQgY2F0X3JlYWQodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsIF9fdTggcmVnLAotCQkgICAgX191OCAqIHZhbHVlKTsKLXN0YXRpYyBpbnQgY2F0X3N1YnJlYWQodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsCi0JCSAgICAgICBfX3UxNiBvZmZzZXQsIF9fdTE2IGxlbiwgdm9pZCAqYnVmKTsKLXN0YXRpYyBpbnQgY2F0X3NlbmRkYXRhKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLAotCQkJX191OCByZWcsIF9fdTggdmFsdWUpOwotc3RhdGljIGludCBjYXRfZGlzY29ubmVjdCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCk7Ci1zdGF0aWMgaW50IGNhdF9jb25uZWN0KHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwKTsKLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjYXRfbW9kdWxlX25hbWUoaW50IG1vZHVsZV9pZCkKLXsKLQlzd2l0Y2ggKG1vZHVsZV9pZCkgewotCWNhc2UgMHgxMDoKLQkJcmV0dXJuICJQcm9jZXNzb3IgU2xvdCAwIjsKLQljYXNlIDB4MTE6Ci0JCXJldHVybiAiUHJvY2Vzc29yIFNsb3QgMSI7Ci0JY2FzZSAweDEyOgotCQlyZXR1cm4gIlByb2Nlc3NvciBTbG90IDIiOwotCWNhc2UgMHgxMzoKLQkJcmV0dXJuICJQcm9jZXNzb3IgU2xvdCA0IjsKLQljYXNlIDB4MTQ6Ci0JCXJldHVybiAiTWVtb3J5IFNsb3QgMCI7Ci0JY2FzZSAweDE1OgotCQlyZXR1cm4gIk1lbW9yeSBTbG90IDEiOwotCWNhc2UgMHgxODoKLQkJcmV0dXJuICJQcmltYXJ5IE1pY3JvY2hhbm5lbCI7Ci0JY2FzZSAweDE5OgotCQlyZXR1cm4gIlNlY29uZGFyeSBNaWNyb2NoYW5uZWwiOwotCWNhc2UgMHgxYToKLQkJcmV0dXJuICJQb3dlciBTdXBwbHkgSW50ZXJmYWNlIjsKLQljYXNlIDB4MWM6Ci0JCXJldHVybiAiUHJvY2Vzc29yIFNsb3QgNSI7Ci0JY2FzZSAweDFkOgotCQlyZXR1cm4gIlByb2Nlc3NvciBTbG90IDYiOwotCWNhc2UgMHgxZToKLQkJcmV0dXJuICJQcm9jZXNzb3IgU2xvdCA3IjsKLQljYXNlIDB4MWY6Ci0JCXJldHVybiAiUHJvY2Vzc29yIFNsb3QgOCI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJVbmtub3duIE1vZHVsZSI7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNzcGIgPSAwOwkJLyogc3RvcmVzIHRoZSBzdXBlciBwb3J0IGxvY2F0aW9uICovCi1pbnQgdm95YWdlcl84c2xvdCA9IDA7CQkvKiBzZXQgdG8gdHJ1ZSBpZiBhIDUxeHggbW9uc3RlciAqLwotCi12b3lhZ2VyX21vZHVsZV90ICp2b3lhZ2VyX2NhdF9saXN0OwotCi0vKiB0aGUgSS9PIHBvcnQgYXNzaWdubWVudHMgZm9yIHRoZSBWSUMgYW5kIFFJQyAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2aWNfcmVzID0gewotCS5uYW1lID0gIlZveWFnZXIgSW50ZXJydXB0IENvbnRyb2xsZXIiLAotCS5zdGFydCA9IDB4RkMwMCwKLQkuZW5kID0gMHhGQzZGCi19Owotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBxaWNfcmVzID0gewotCS5uYW1lID0gIlF1YWQgSW50ZXJydXB0IENvbnRyb2xsZXIiLAotCS5zdGFydCA9IDB4RkM3MCwKLQkuZW5kID0gMHhGQ0ZGCi19OwotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFjayBhIGRhdGEgYml0IHN0cmVhbSBpbnNpZGUgYSBtZXNzYWdlLgotICogSXQgd3JpdGVzIG51bV9iaXRzIG9mIHRoZSBkYXRhIGJ1ZmZlciBpbiBtc2cgc3RhcnRpbmcgYXQgc3RhcnRfYml0LgotICogTm90ZTogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYW55IHVudXNlZCBiaXQgaW4gdGhlIGRhdGEgc3RyZWFtCi0gKiBpcyBzZXQgdG8gemVybyBzbyB0aGF0IHRoZSBvcnMgd2lsbCB3b3JrIGNvcnJlY3RseSAqLwotc3RhdGljIHZvaWQKLWNhdF9wYWNrKF9fdTggKiBtc2csIGNvbnN0IF9fdTE2IHN0YXJ0X2JpdCwgX191OCAqIGRhdGEsIGNvbnN0IF9fdTE2IG51bV9iaXRzKQotewotCS8qIGNvbXB1dGUgaW5pdGlhbCBzaGlmdCBuZWVkZWQgKi8KLQljb25zdCBfX3UxNiBvZmZzZXQgPSBzdGFydF9iaXQgJSBCSVRTX1BFUl9CWVRFOwotCV9fdTE2IGxlbiA9IG51bV9iaXRzIC8gQklUU19QRVJfQllURTsKLQlfX3UxNiBieXRlID0gc3RhcnRfYml0IC8gQklUU19QRVJfQllURTsKLQlfX3UxNiByZXNpZHVlID0gKG51bV9iaXRzICUgQklUU19QRVJfQllURSkgKyBvZmZzZXQ7Ci0JaW50IGk7Ci0KLQkvKiBhZGp1c3QgaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBieXRlIG9mIHJlc2lkdWUgKi8KLQlpZiAocmVzaWR1ZSA+PSBCSVRTX1BFUl9CWVRFKSB7Ci0JCXJlc2lkdWUgLT0gQklUU19QRVJfQllURTsKLQkJbGVuKys7Ci0JfQotCi0JLyogY2xlYXIgb3V0IHRoZSBiaXRzLiAgV2UgYXNzdW1lIGhlcmUgdGhhdCBpZiBsZW49PTAgdGhlbgotCSAqIHJlc2lkdWUgPj0gb2Zmc2V0LiAgVGhpcyBpcyBhbHdheXMgdHJ1ZSBmb3IgdGhlIGNhdGJ1cwotCSAqIG9wZXJhdGlvbnMgKi8KLQltc2dbYnl0ZV0gJj0gMHhmZiA8PCAoQklUU19QRVJfQllURSAtIG9mZnNldCk7Ci0JbXNnW2J5dGUrK10gfD0gZGF0YVswXSA+PiBvZmZzZXQ7Ci0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm47Ci0JZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQotCQltc2dbYnl0ZSsrXSA9IChkYXRhW2kgLSAxXSA8PCAoQklUU19QRVJfQllURSAtIG9mZnNldCkpCi0JCSAgICB8IChkYXRhW2ldID4+IG9mZnNldCk7Ci0JaWYgKHJlc2lkdWUgIT0gMCkgewotCQlfX3U4IG1hc2sgPSAweGZmID4+IHJlc2lkdWU7Ci0JCV9fdTggbGFzdF9ieXRlID0gZGF0YVtpIC0gMV0gPDwgKEJJVFNfUEVSX0JZVEUgLSBvZmZzZXQpCi0JCSAgICB8IChkYXRhW2ldID4+IG9mZnNldCk7Ci0KLQkJbGFzdF9ieXRlICY9IH5tYXNrOwotCQltc2dbYnl0ZV0gJj0gbWFzazsKLQkJbXNnW2J5dGVdIHw9IGxhc3RfYnl0ZTsKLQl9Ci0JcmV0dXJuOwotfQotCi0vKiB1bnBhY2sgdGhlIGRhdGEgYWdhaW4gKHNhbWUgYXJndW1lbnRzIGFzIGNhdF9wYWNrKCkpLiBkYXRhIGJ1ZmZlcgotICogbXVzdCBiZSB6ZXJvIHBvcHVsYXRlZC4KLSAqCi0gKiBGdW5jdGlvbjogZ2l2ZW4gYSBtZXNzYWdlIHN0cmluZyBtb3ZlIHRvIHN0YXJ0X2JpdCBhbmQgY29weSBudW1fYml0cyBpbnRvCi0gKiBkYXRhIChzdGFydGluZyBhdCBiaXQgMCBpbiBkYXRhKS4KLSAqLwotc3RhdGljIHZvaWQKLWNhdF91bnBhY2soX191OCAqIG1zZywgY29uc3QgX191MTYgc3RhcnRfYml0LCBfX3U4ICogZGF0YSwgY29uc3QgX191MTYgbnVtX2JpdHMpCi17Ci0JLyogY29tcHV0ZSBpbml0aWFsIHNoaWZ0IG5lZWRlZCAqLwotCWNvbnN0IF9fdTE2IG9mZnNldCA9IHN0YXJ0X2JpdCAlIEJJVFNfUEVSX0JZVEU7Ci0JX191MTYgbGVuID0gbnVtX2JpdHMgLyBCSVRTX1BFUl9CWVRFOwotCWNvbnN0IF9fdTggbGFzdF9iaXRzID0gbnVtX2JpdHMgJSBCSVRTX1BFUl9CWVRFOwotCV9fdTE2IGJ5dGUgPSBzdGFydF9iaXQgLyBCSVRTX1BFUl9CWVRFOwotCWludCBpOwotCi0JaWYgKGxhc3RfYml0cyAhPSAwKQotCQlsZW4rKzsKLQotCS8qIHNwZWNpYWwgY2FzZTogd2FudCA8IDggYml0cyBmcm9tIG1zZyBhbmQgd2UgY2FuIGdldCBpdCBmcm9tCi0JICogYSBzaW5nbGUgYnl0ZSBvZiB0aGUgbXNnICovCi0JaWYgKGxlbiA9PSAwICYmIEJJVFNfUEVSX0JZVEUgLSBvZmZzZXQgPj0gbnVtX2JpdHMpIHsKLQkJZGF0YVswXSA9IG1zZ1tieXRlXSA8PCBvZmZzZXQ7Ci0JCWRhdGFbMF0gJj0gMHhmZiA+PiAoQklUU19QRVJfQllURSAtIG51bV9iaXRzKTsKLQkJcmV0dXJuOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJLyogdGhpcyBhbm5veWluZyBpZiBoYXMgdG8gYmUgZG9uZSBqdXN0IGluIGNhc2UgYSByZWFkIG9mCi0JCSAqIG1zZyBvbmUgYmV5b25kIHRoZSBhcnJheSBjYXVzZXMgYSBwYW5pYyAqLwotCQlpZiAob2Zmc2V0ICE9IDApIHsKLQkJCWRhdGFbaV0gPSBtc2dbYnl0ZSsrXSA8PCBvZmZzZXQ7Ci0JCQlkYXRhW2ldIHw9IG1zZ1tieXRlXSA+PiAoQklUU19QRVJfQllURSAtIG9mZnNldCk7Ci0JCX0gZWxzZSB7Ci0JCQlkYXRhW2ldID0gbXNnW2J5dGUrK107Ci0JCX0KLQl9Ci0JLyogZG8gd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgZmluYWwgYnl0ZSAqLwotCWlmIChsYXN0X2JpdHMgIT0gMCkgewotCQlkYXRhW2kgLSAxXSAmPSAweGZmIDw8IChCSVRTX1BFUl9CWVRFIC0gbGFzdF9iaXRzKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotY2F0X2J1aWxkX2hlYWRlcihfX3U4ICogaGVhZGVyLCBjb25zdCBfX3UxNiBsZW4sIGNvbnN0IF9fdTE2IHNtYWxsZXN0X3JlZ19iaXRzLAotCQkgY29uc3QgX191MTYgbG9uZ2VzdF9yZWdfYml0cykKLXsKLQlpbnQgaTsKLQlfX3UxNiBzdGFydF9iaXQgPSAoc21hbGxlc3RfcmVnX2JpdHMgLSAxKSAlIEJJVFNfUEVSX0JZVEU7Ci0JX191OCAqbGFzdF9ieXRlID0gJmhlYWRlcltsZW4gLSAxXTsKLQotCWlmIChzdGFydF9iaXQgPT0gMCkKLQkJc3RhcnRfYml0ID0gMTsJLyogbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBiaXQgaW4gdGhlIGhkciAqLwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQloZWFkZXJbaV0gPSAwOwotCi0JZm9yIChpID0gc3RhcnRfYml0OyBpID4gMDsgaS0tKQotCQkqbGFzdF9ieXRlID0gKCgqbGFzdF9ieXRlKSA8PCAxKSArIDE7Ci0KLX0KLQotc3RhdGljIGludAotY2F0X3NlbmRpbnN0KHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3U4IHJlZywgX191OCBvcCkKLXsKLQlfX3U4IHBhcml0eSwgaW5zdCwgaW5zdF9idWZbNF0gPSB7IDAgfTsKLQlfX3U4IGlzZXFbVk9ZQUdFUl9NQVhfU0NBTl9QQVRIXSwgaHNlcVtWT1lBR0VSX01BWF9SRUdfU0laRV07Ci0JX191MTYgaWJ5dGVzLCBoYnl0ZXMsIHBhZGJpdHM7Ci0JaW50IGk7Ci0KLQkvKiAKLQkgKiBQYXJpdHkgaXMgdGhlIHBhcml0eSBvZiB0aGUgcmVnaXN0ZXIgbnVtYmVyICsgMSAoUkVBRF9SRUdJU1RFUgotCSAqIGFuZCBXUklURV9SRUdJU1RFUiBhbHdheXMgYWRkICcxJyB0byB0aGUgbnVtYmVyIG9mIGJpdHMgPT0gMSkKLQkgKi8KLQlwYXJpdHkgPSAoX191OCkgKDEgKyAocmVnICYgMHgwMSkgKwotCQkJICgoX191OCkgKHJlZyAmIDB4MDIpID4+IDEpICsKLQkJCSAoKF9fdTgpIChyZWcgJiAweDA0KSA+PiAyKSArCi0JCQkgKChfX3U4KSAocmVnICYgMHgwOCkgPj4gMykpICUgMjsKLQotCWluc3QgPSAoKHBhcml0eSA8PCA3KSB8IChyZWcgPDwgMikgfCBvcCk7Ci0KLQlvdXRiKFZPWUFHRVJfQ0FUX0lSQ1lDLCBDQVRfQ01EKTsKLQlpZiAoIW1vZHAtPnNjYW5fcGF0aF9jb25uZWN0ZWQpIHsKLQkJaWYgKGFzaWNwLT5hc2ljX2lkICE9IFZPWUFHRVJfQ0FUX0lEKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIioqV0FSTklORyoqKjogY2F0X3NlbmRpbnN0IGhhcyBkaXNjb25uZWN0ZWQgc2NhbiBwYXRoIG5vdCB0byBDQVQgYXNpY1xuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlvdXRiKFZPWUFHRVJfQ0FUX0hFQURFUiwgQ0FUX0RBVEEpOwotCQlvdXRiKGluc3QsIENBVF9EQVRBKTsKLQkJaWYgKGluYihDQVRfREFUQSkgIT0gVk9ZQUdFUl9DQVRfSEVBREVSKSB7Ci0JCQlDREVCVUcoKCJWT1lBR0VSIENBVDogY2F0X3NlbmRpbnN0IGZhaWxlZCB0byBnZXQgQ0FUX0hFQURFUlxuIikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCWlieXRlcyA9IG1vZHAtPmluc3RfYml0cyAvIEJJVFNfUEVSX0JZVEU7Ci0JaWYgKChwYWRiaXRzID0gbW9kcC0+aW5zdF9iaXRzICUgQklUU19QRVJfQllURSkgIT0gMCkgewotCQlwYWRiaXRzID0gQklUU19QRVJfQllURSAtIHBhZGJpdHM7Ci0JCWlieXRlcysrOwotCX0KLQloYnl0ZXMgPSBtb2RwLT5sYXJnZXN0X3JlZyAvIEJJVFNfUEVSX0JZVEU7Ci0JaWYgKG1vZHAtPmxhcmdlc3RfcmVnICUgQklUU19QRVJfQllURSkKLQkJaGJ5dGVzKys7Ci0JQ0RFQlVHKCgiY2F0X3NlbmRpbnN0OiBpYnl0ZXM9JWQsIGhieXRlcz0lZFxuIiwgaWJ5dGVzLCBoYnl0ZXMpKTsKLQkvKiBpbml0aWFsaXNlIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0byAweGZmICovCi0JZm9yIChpID0gMDsgaSA8IGlieXRlcyArIGhieXRlczsgaSsrKQotCQlpc2VxW2ldID0gMHhmZjsKLQljYXRfYnVpbGRfaGVhZGVyKGhzZXEsIGhieXRlcywgbW9kcC0+c21hbGxlc3RfcmVnLCBtb2RwLT5sYXJnZXN0X3JlZyk7Ci0JY2F0X3BhY2soaXNlcSwgbW9kcC0+aW5zdF9iaXRzLCBoc2VxLCBoYnl0ZXMgKiBCSVRTX1BFUl9CWVRFKTsKLQlpbnN0X2J1ZlswXSA9IGluc3Q7Ci0JaW5zdF9idWZbMV0gPSAweEZGID4+IChtb2RwLT5sYXJnZXN0X3JlZyAlIEJJVFNfUEVSX0JZVEUpOwotCWNhdF9wYWNrKGlzZXEsIGFzaWNwLT5iaXRfbG9jYXRpb24sIGluc3RfYnVmLCBhc2ljcC0+aXJlZ19sZW5ndGgpOwotI2lmZGVmIFZPWUFHRVJfQ0FUX0RFQlVHCi0JcHJpbnRrKCJpbnMgPSAweCV4LCBpc2VxOiAiLCBpbnN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgaWJ5dGVzICsgaGJ5dGVzOyBpKyspCi0JCXByaW50aygiMHgleCAiLCBpc2VxW2ldKTsKLQlwcmludGsoIlxuIik7Ci0jZW5kaWYKLQlpZiAoY2F0X3NoaWZ0b3V0KGlzZXEsIGlieXRlcywgaGJ5dGVzLCBwYWRiaXRzKSkgewotCQlDREVCVUcoKCJWT1lBR0VSIENBVDogY2F0X3NlbmRpbnN0OiBjYXRfc2hpZnRvdXQgZmFpbGVkXG4iKSk7Ci0JCXJldHVybiAxOwotCX0KLQlDREVCVUcoKCJDQVQgU0hJRlRPVVQgRE9ORVxuIikpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jYXRfZ2V0ZGF0YSh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwgX191OCByZWcsCi0JICAgIF9fdTggKiB2YWx1ZSkKLXsKLQlpZiAoIW1vZHAtPnNjYW5fcGF0aF9jb25uZWN0ZWQpIHsKLQkJaWYgKGFzaWNwLT5hc2ljX2lkICE9IFZPWUFHRVJfQ0FUX0lEKSB7Ci0JCQlDREVCVUcoKCJWT1lBR0VSIENBVDogRVJST1I6IGNhdF9nZXRkYXRhIHRvIENBVCBhc2ljIHdpdGggc2NhbiBwYXRoIGNvbm5lY3RlZFxuIikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKHJlZyA+IFZPWUFHRVJfU1VCQUREUkhJKQotCQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQlvdXRiKFZPWUFHRVJfQ0FUX0RSQ1lDLCBDQVRfQ01EKTsKLQkJb3V0YihWT1lBR0VSX0NBVF9IRUFERVIsIENBVF9EQVRBKTsKLQkJKnZhbHVlID0gaW5iKENBVF9EQVRBKTsKLQkJb3V0YigweEFBLCBDQVRfREFUQSk7Ci0JCWlmIChpbmIoQ0FUX0RBVEEpICE9IFZPWUFHRVJfQ0FUX0hFQURFUikgewotCQkJQ0RFQlVHKCgiY2F0X2dldGRhdGE6IGZhaWxlZCB0byBnZXQgVk9ZQUdFUl9DQVRfSEVBREVSXG4iKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlfX3UxNiBzYml0cyA9IG1vZHAtPm51bV9hc2ljcyAtIDEgKyBhc2ljcC0+aXJlZ19sZW5ndGg7Ci0JCV9fdTE2IHNieXRlcyA9IHNiaXRzIC8gQklUU19QRVJfQllURTsKLQkJX191MTYgdGJ5dGVzOwotCQlfX3U4IHN0cmluZ1tWT1lBR0VSX01BWF9TQ0FOX1BBVEhdLAotCQkgICAgdHJhaWxlcltWT1lBR0VSX01BWF9SRUdfU0laRV07Ci0JCV9fdTggcGFkYml0czsKLQkJaW50IGk7Ci0KLQkJb3V0YihWT1lBR0VSX0NBVF9EUkNZQywgQ0FUX0NNRCk7Ci0KLQkJaWYgKChwYWRiaXRzID0gc2JpdHMgJSBCSVRTX1BFUl9CWVRFKSAhPSAwKSB7Ci0JCQlwYWRiaXRzID0gQklUU19QRVJfQllURSAtIHBhZGJpdHM7Ci0JCQlzYnl0ZXMrKzsKLQkJfQotCQl0Ynl0ZXMgPSBhc2ljcC0+aXJlZ19sZW5ndGggLyBCSVRTX1BFUl9CWVRFOwotCQlpZiAoYXNpY3AtPmlyZWdfbGVuZ3RoICUgQklUU19QRVJfQllURSkKLQkJCXRieXRlcysrOwotCQlDREVCVUcoKCJjYXRfZ2V0ZGF0YTogdGJ5dGVzID0gJWQsIHNieXRlcyA9ICVkLCBwYWRiaXRzID0gJWRcbiIsCi0JCQl0Ynl0ZXMsIHNieXRlcywgcGFkYml0cykpOwotCQljYXRfYnVpbGRfaGVhZGVyKHRyYWlsZXIsIHRieXRlcywgMSwgYXNpY3AtPmlyZWdfbGVuZ3RoKTsKLQotCQlmb3IgKGkgPSB0Ynl0ZXMgLSAxOyBpID49IDA7IGktLSkgewotCQkJb3V0Yih0cmFpbGVyW2ldLCBDQVRfREFUQSk7Ci0JCQlzdHJpbmdbc2J5dGVzICsgaV0gPSBpbmIoQ0FUX0RBVEEpOwotCQl9Ci0KLQkJZm9yIChpID0gc2J5dGVzIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCW91dGIoMHhhYSwgQ0FUX0RBVEEpOwotCQkJc3RyaW5nW2ldID0gaW5iKENBVF9EQVRBKTsKLQkJfQotCQkqdmFsdWUgPSAwOwotCQljYXRfdW5wYWNrKHN0cmluZywKLQkJCSAgIHBhZGJpdHMgKyAodGJ5dGVzICogQklUU19QRVJfQllURSkgKwotCQkJICAgYXNpY3AtPmFzaWNfbG9jYXRpb24sIHZhbHVlLCBhc2ljcC0+aXJlZ19sZW5ndGgpOwotI2lmZGVmIFZPWUFHRVJfQ0FUX0RFQlVHCi0JCXByaW50aygidmFsdWU9MHgleCwgc3RyaW5nOiAiLCAqdmFsdWUpOwotCQlmb3IgKGkgPSAwOyBpIDwgdGJ5dGVzICsgc2J5dGVzOyBpKyspCi0JCQlwcmludGsoIjB4JXggIiwgc3RyaW5nW2ldKTsKLQkJcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0KLQkJLyogc2FuaXR5IGNoZWNrIHRoZSByZXN0IG9mIHRoZSByZXR1cm4gKi8KLQkJZm9yIChpID0gMDsgaSA8IHRieXRlczsgaSsrKSB7Ci0JCQlfX3U4IGlucHV0ID0gMDsKLQotCQkJY2F0X3VucGFjayhzdHJpbmcsIHBhZGJpdHMgKyAoaSAqIEJJVFNfUEVSX0JZVEUpLAotCQkJCSAgICZpbnB1dCwgQklUU19QRVJfQllURSk7Ci0JCQlpZiAodHJhaWxlcltpXSAhPSBpbnB1dCkgewotCQkJCUNERUJVRygoImNhdF9nZXRkYXRhOiBmYWlsZWQgdG8gc2FuaXR5IGNoZWNrIHJlc3Qgb2YgcmV0KCVkKSAweCV4ICE9IDB4JXhcbiIsIGksIGlucHV0LCB0cmFpbGVyW2ldKSk7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCX0KLQkJQ0RFQlVHKCgiY2F0X2dldGRhdGEgRE9ORVxuIikpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLWNhdF9zaGlmdG91dChfX3U4ICogZGF0YSwgX191MTYgZGF0YV9ieXRlcywgX191MTYgaGVhZGVyX2J5dGVzLCBfX3U4IHBhZF9iaXRzKQotewotCWludCBpOwotCi0JZm9yIChpID0gZGF0YV9ieXRlcyArIGhlYWRlcl9ieXRlcyAtIDE7IGkgPj0gaGVhZGVyX2J5dGVzOyBpLS0pCi0JCW91dGIoZGF0YVtpXSwgQ0FUX0RBVEEpOwotCi0JZm9yIChpID0gaGVhZGVyX2J5dGVzIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJX191OCBoZWFkZXIgPSAwOwotCQlfX3U4IGlucHV0OwotCi0JCW91dGIoZGF0YVtpXSwgQ0FUX0RBVEEpOwotCQlpbnB1dCA9IGluYihDQVRfREFUQSk7Ci0JCUNERUJVRygoImNhdF9zaGlmdG91dDogcmV0dXJuZWQgMHgleFxuIiwgaW5wdXQpKTsKLQkJY2F0X3VucGFjayhkYXRhLCAoKGRhdGFfYnl0ZXMgKyBpKSAqIEJJVFNfUEVSX0JZVEUpIC0gcGFkX2JpdHMsCi0JCQkgICAmaGVhZGVyLCBCSVRTX1BFUl9CWVRFKTsKLQkJaWYgKGlucHV0ICE9IGhlYWRlcikgewotCQkJQ0RFQlVHKCgiVk9ZQUdFUiBDQVQ6IGNhdF9zaGlmdG91dCBmYWlsZWQgdG8gcmV0dXJuIGhlYWRlciAweCV4ICE9IDB4JXhcbiIsIGlucHV0LCBoZWFkZXIpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jYXRfc2VuZGRhdGEodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsCi0JICAgICBfX3U4IHJlZywgX191OCB2YWx1ZSkKLXsKLQlvdXRiKFZPWUFHRVJfQ0FUX0RSQ1lDLCBDQVRfQ01EKTsKLQlpZiAoIW1vZHAtPnNjYW5fcGF0aF9jb25uZWN0ZWQpIHsKLQkJaWYgKGFzaWNwLT5hc2ljX2lkICE9IFZPWUFHRVJfQ0FUX0lEKSB7Ci0JCQlDREVCVUcoKCJWT1lBR0VSIENBVDogRVJST1I6IHNjYW4gcGF0aCBkaXNjb25uZWN0ZWQgd2hlbiBhc2ljICE9IENBVFxuIikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJb3V0YihWT1lBR0VSX0NBVF9IRUFERVIsIENBVF9EQVRBKTsKLQkJb3V0Yih2YWx1ZSwgQ0FUX0RBVEEpOwotCQlpZiAoaW5iKENBVF9EQVRBKSAhPSBWT1lBR0VSX0NBVF9IRUFERVIpIHsKLQkJCUNERUJVRygoImNhdF9zZW5kZGF0YTogZmFpbGVkIHRvIGdldCBjb3JyZWN0IGhlYWRlciByZXNwb25zZSB0byBzZW50IGRhdGFcbiIpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChyZWcgPiBWT1lBR0VSX1NVQkFERFJISSkgewotCQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJX191MTYgaGJ5dGVzID0gYXNpY3AtPmlyZWdfbGVuZ3RoIC8gQklUU19QRVJfQllURTsKLQkJX191MTYgZGJ5dGVzID0KLQkJICAgIChtb2RwLT5udW1fYXNpY3MgLSAxICsgYXNpY3AtPmlyZWdfbGVuZ3RoKSAvIEJJVFNfUEVSX0JZVEU7Ci0JCV9fdTggcGFkYml0cywgZHNlcVtWT1lBR0VSX01BWF9TQ0FOX1BBVEhdLAotCQkgICAgaHNlcVtWT1lBR0VSX01BWF9SRUdfU0laRV07Ci0JCWludCBpOwotCi0JCWlmICgocGFkYml0cyA9IChtb2RwLT5udW1fYXNpY3MgLSAxCi0JCQkJKyBhc2ljcC0+aXJlZ19sZW5ndGgpICUgQklUU19QRVJfQllURSkgIT0gMCkgewotCQkJcGFkYml0cyA9IEJJVFNfUEVSX0JZVEUgLSBwYWRiaXRzOwotCQkJZGJ5dGVzKys7Ci0JCX0KLQkJaWYgKGFzaWNwLT5pcmVnX2xlbmd0aCAlIEJJVFNfUEVSX0JZVEUpCi0JCQloYnl0ZXMrKzsKLQotCQljYXRfYnVpbGRfaGVhZGVyKGhzZXEsIGhieXRlcywgMSwgYXNpY3AtPmlyZWdfbGVuZ3RoKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZGJ5dGVzICsgaGJ5dGVzOyBpKyspCi0JCQlkc2VxW2ldID0gMHhmZjsKLQkJQ0RFQlVHKCgiY2F0X3NlbmRkYXRhOiBkYnl0ZXM9JWQsIGhieXRlcz0lZCwgcGFkYml0cz0lZFxuIiwKLQkJCWRieXRlcywgaGJ5dGVzLCBwYWRiaXRzKSk7Ci0JCWNhdF9wYWNrKGRzZXEsIG1vZHAtPm51bV9hc2ljcyAtIDEgKyBhc2ljcC0+aXJlZ19sZW5ndGgsCi0JCQkgaHNlcSwgaGJ5dGVzICogQklUU19QRVJfQllURSk7Ci0JCWNhdF9wYWNrKGRzZXEsIGFzaWNwLT5hc2ljX2xvY2F0aW9uLCAmdmFsdWUsCi0JCQkgYXNpY3AtPmlyZWdfbGVuZ3RoKTsKLSNpZmRlZiBWT1lBR0VSX0NBVF9ERUJVRwotCQlwcmludGsoImRzZXEgIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBoYnl0ZXMgKyBkYnl0ZXM7IGkrKykgewotCQkJcHJpbnRrKCIweCV4ICIsIGRzZXFbaV0pOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLSNlbmRpZgotCQlyZXR1cm4gY2F0X3NoaWZ0b3V0KGRzZXEsIGRieXRlcywgaGJ5dGVzLCBwYWRiaXRzKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLWNhdF93cml0ZSh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwgX191OCByZWcsIF9fdTggdmFsdWUpCi17Ci0JaWYgKGNhdF9zZW5kaW5zdChtb2RwLCBhc2ljcCwgcmVnLCBWT1lBR0VSX1dSSVRFX0NPTkZJRykpCi0JCXJldHVybiAxOwotCXJldHVybiBjYXRfc2VuZGRhdGEobW9kcCwgYXNpY3AsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50Ci1jYXRfcmVhZCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwgX191OCByZWcsCi0JIF9fdTggKiB2YWx1ZSkKLXsKLQlpZiAoY2F0X3NlbmRpbnN0KG1vZHAsIGFzaWNwLCByZWcsIFZPWUFHRVJfUkVBRF9DT05GSUcpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gY2F0X2dldGRhdGEobW9kcCwgYXNpY3AsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50Ci1jYXRfc3ViYWRkcnNldHVwKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3UxNiBvZmZzZXQsCi0JCSBfX3UxNiBsZW4pCi17Ci0JX191OCB2YWw7Ci0KLQlpZiAobGVuID4gMSkgewotCQkvKiBzZXQgYXV0byBpbmNyZW1lbnQgKi8KLQkJX191OCBuZXd2YWw7Ci0KLQkJaWYgKGNhdF9yZWFkKG1vZHAsIGFzaWNwLCBWT1lBR0VSX0FVVE9fSU5DX1JFRywgJnZhbCkpIHsKLQkJCUNERUJVRygoImNhdF9zdWJhZGRyc2V0dXA6IHJlYWQgb2YgVk9ZQUdFUl9BVVRPX0lOQ19SRUcgZmFpbGVkXG4iKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlDREVCVUcoKCJjYXRfc3ViYWRkcnNldHVwOiBWT1lBR0VSX0FVVE9fSU5DX1JFRyA9IDB4JXhcbiIsCi0JCQl2YWwpKTsKLQkJbmV3dmFsID0gdmFsIHwgVk9ZQUdFUl9BVVRPX0lOQzsKLQkJaWYgKG5ld3ZhbCAhPSB2YWwpIHsKLQkJCWlmIChjYXRfd3JpdGUobW9kcCwgYXNpY3AsIFZPWUFHRVJfQVVUT19JTkNfUkVHLCB2YWwpKSB7Ci0JCQkJQ0RFQlVHKCgiY2F0X3N1YmFkZHJzZXR1cDogd3JpdGUgdG8gVk9ZQUdFUl9BVVRPX0lOQ19SRUcgZmFpbGVkXG4iKSk7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGNhdF93cml0ZShtb2RwLCBhc2ljcCwgVk9ZQUdFUl9TVUJBRERSTE8sIChfX3U4KSAob2Zmc2V0ICYgMHhmZikpKSB7Ci0JCUNERUJVRygoImNhdF9zdWJhZGRyc2V0dXA6IHdyaXRlIHRvIFNVQkFERFJMTyBmYWlsZWRcbiIpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmIChhc2ljcC0+c3ViYWRkciA+IFZPWUFHRVJfU1VCQUREUl9MTykgewotCQlpZiAoY2F0X3dyaXRlCi0JCSAgICAobW9kcCwgYXNpY3AsIFZPWUFHRVJfU1VCQUREUkhJLCAoX191OCkgKG9mZnNldCA+PiA4KSkpIHsKLQkJCUNERUJVRygoImNhdF9zdWJhZGRyc2V0dXA6IHdyaXRlIHRvIFNVQkFERFJISSBmYWlsZWRcbiIpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWNhdF9yZWFkKG1vZHAsIGFzaWNwLCBWT1lBR0VSX1NVQkFERFJISSwgJnZhbCk7Ci0JCUNERUJVRygoImNhdF9zdWJhZGRyc2V0dXA6IG9mZnNldCA9ICVkLCBoaSA9ICVkXG4iLCBvZmZzZXQsCi0JCQl2YWwpKTsKLQl9Ci0JY2F0X3JlYWQobW9kcCwgYXNpY3AsIFZPWUFHRVJfU1VCQUREUkxPLCAmdmFsKTsKLQlDREVCVUcoKCJjYXRfc3ViYWRkcnNldHVwOiBvZmZzZXQgPSAlZCwgbG8gPSAlZFxuIiwgb2Zmc2V0LCB2YWwpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotY2F0X3N1YndyaXRlKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3UxNiBvZmZzZXQsCi0JICAgICBfX3UxNiBsZW4sIHZvaWQgKmJ1ZikKLXsKLQlpbnQgaSwgcmV0dmFsOwotCi0JLyogRklYTUU6IG5lZWQgc3BlY2lhbCBhY3Rpb25zIGZvciBWT1lBR0VSX0NBVF9JRCBoZXJlICovCi0JaWYgKGFzaWNwLT5hc2ljX2lkID09IFZPWUFHRVJfQ0FUX0lEKSB7Ci0JCUNERUJVRygoImNhdF9zdWJ3cml0ZTogQVRURU1QVCBUTyBXUklURSBUTyBDQVQgQVNJQ1xuIikpOwotCQkvKiBGSVhNRSAtLSBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGhhbmRsZWQgYmV0dGVyCi0JCSAqIFRoZXJlIGlzIGEgcHJvYmxlbSB3cml0aW5nIHRvIHRoZSBjYXQgYXNpYyBpbiB0aGUKLQkJICogUFNJLiAgVGhlIDMwdXMgZGVsYXkgc2VlbXMgdG8gd29yaywgdGhvdWdoICovCi0JCXVkZWxheSgzMCk7Ci0JfQotCi0JaWYgKChyZXR2YWwgPSBjYXRfc3ViYWRkcnNldHVwKG1vZHAsIGFzaWNwLCBvZmZzZXQsIGxlbikpICE9IDApIHsKLQkJcHJpbnRrKCJjYXRfc3Vid3JpdGU6IGNhdF9zdWJhZGRyc2V0dXAgRkFJTEVEXG4iKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoY2F0X3NlbmRpbnN0Ci0JICAgIChtb2RwLCBhc2ljcCwgVk9ZQUdFUl9TVUJBRERSREFUQSwgVk9ZQUdFUl9XUklURV9DT05GSUcpKSB7Ci0JCXByaW50aygiY2F0X3N1YndyaXRlOiBjYXRfc2VuZGluc3QgRkFJTEVEXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAoY2F0X3NlbmRkYXRhKG1vZHAsIGFzaWNwLCAweEZGLCAoKF9fdTggKikgYnVmKVtpXSkpIHsKLQkJCXByaW50awotCQkJICAgICgiY2F0X3N1YndyaXRlOiBjYXRfc2VuZGF0YSBlbGVtZW50IGF0ICVkIEZBSUxFRFxuIiwKLQkJCSAgICAgaSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQKLWNhdF9zdWJyZWFkKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3UxNiBvZmZzZXQsCi0JICAgIF9fdTE2IGxlbiwgdm9pZCAqYnVmKQotewotCWludCBpLCByZXR2YWw7Ci0KLQlpZiAoKHJldHZhbCA9IGNhdF9zdWJhZGRyc2V0dXAobW9kcCwgYXNpY3AsIG9mZnNldCwgbGVuKSkgIT0gMCkgewotCQlDREVCVUcoKCJjYXRfc3VicmVhZDogY2F0X3N1YmFkZHJzZXR1cCBGQUlMRURcbiIpKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoY2F0X3NlbmRpbnN0KG1vZHAsIGFzaWNwLCBWT1lBR0VSX1NVQkFERFJEQVRBLCBWT1lBR0VSX1JFQURfQ09ORklHKSkgewotCQlDREVCVUcoKCJjYXRfc3VicmVhZDogY2F0X3NlbmRpbnN0IGZhaWxlZFxuIikpOwotCQlyZXR1cm4gMTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChjYXRfZ2V0ZGF0YShtb2RwLCBhc2ljcCwgMHhGRiwgJigoX191OCAqKSBidWYpW2ldKSkgewotCQkJQ0RFQlVHKCgiY2F0X3N1YnJlYWQ6IGNhdF9nZXRkYXRhIGVsZW1lbnQgJWQgZmFpbGVkXG4iLAotCQkJCWkpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBidWZmZXIgZm9yIHN0b3JpbmcgRVBST00gZGF0YSByZWFkIGluIGR1cmluZyBpbml0aWFsaXNhdGlvbiAqLwotc3RhdGljIF9faW5pdGRhdGEgX191OCBlcHJvbV9idWZbMHhGRkZGXTsKLXN0YXRpYyB2b3lhZ2VyX21vZHVsZV90ICp2b3lhZ2VyX2luaXRpYWxfbW9kdWxlOwotCi0vKiBJbml0aWFsaXNlIHRoZSBjYXQgYnVzIGNvbXBvbmVudHMuICBXZSBhc3N1bWUgdGhpcyBpcyBjYWxsZWQgYnkgdGhlCi0gKiBib290IGNwdSAqYWZ0ZXIqIGFsbCBtZW1vcnkgaW5pdGlhbGlzYXRpb24gaGFzIGJlZW4gZG9uZSAoc28gd2UgY2FuCi0gKiB1c2Uga21hbGxvYykgYnV0IGJlZm9yZSBzbXAgaW5pdGlhbGlzYXRpb24sIHNvIHdlIGNhbiBwcm9iZSB0aGUgU01QCi0gKiBjb25maWd1cmF0aW9uIGFuZCBwaWNrIHVwIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4gICovCi12b2lkIF9faW5pdCB2b3lhZ2VyX2NhdF9pbml0KHZvaWQpCi17Ci0Jdm95YWdlcl9tb2R1bGVfdCAqKm1vZHBwID0gJnZveWFnZXJfaW5pdGlhbF9tb2R1bGU7Ci0Jdm95YWdlcl9hc2ljX3QgKiphc2ljcHA7Ci0Jdm95YWdlcl9hc2ljX3QgKnFhYmNfYXNpYyA9IE5VTEw7Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgbG9uZyBxaWNfYWRkciA9IDA7Ci0JX191OCBxYWJjX2RhdGFbMHgyMF07Ci0JX191OCBudW1fc3VibW9kdWxlcywgdmFsOwotCXZveWFnZXJfZXByb21faGRyX3QgKmVwcm9tX2hkciA9ICh2b3lhZ2VyX2Vwcm9tX2hkcl90ICopICYgZXByb21fYnVmWzBdOwotCi0JX191OCBjbW9zWzRdOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCS8qIGluaXRpYWxsaXNlIHRoZSBTVVMgbWFpbGJveCAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY21vcyk7IGkrKykKLQkJY21vc1tpXSA9IHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKFZPWUFHRVJfRFVNUF9MT0NBVElPTiArIGkpOwotCWFkZHIgPSAqKHVuc2lnbmVkIGxvbmcgKiljbW9zOwotCWlmICgoYWRkciAmIDB4ZmYwMDAwMDApICE9IDB4ZmYwMDAwMDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVm95YWdlciBmYWlsZWQgdG8gZ2V0IFNVUyBtYWlsYm94IChhZGRyID0gMHglbHhcbiIsCi0JCSAgICAgICBhZGRyKTsKLQl9IGVsc2UgewotCQlzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlczsKLQotCQlyZXMubmFtZSA9ICJ2b3lhZ2VyIFNVUyI7Ci0JCXJlcy5zdGFydCA9IGFkZHI7Ci0JCXJlcy5lbmQgPSBhZGRyICsgMHgzZmY7Ci0KLQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXMpOwotCQl2b3lhZ2VyX1NVUyA9IChzdHJ1Y3Qgdm95YWdlcl9TVVMgKikKLQkJICAgIGlvcmVtYXAoYWRkciwgMHg0MDApOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlZveWFnZXIgU1VTIG1haWxib3ggdmVyc2lvbiAweCV4XG4iLAotCQkgICAgICAgdm95YWdlcl9TVVMtPlNVU192ZXJzaW9uKTsKLQkJdm95YWdlcl9TVVMtPmtlcm5lbF92ZXJzaW9uID0gVk9ZQUdFUl9NQUlMQk9YX1ZFUlNJT047Ci0JCXZveWFnZXJfU1VTLT5rZXJuZWxfZmxhZ3MgPSBWT1lBR0VSX09TX0hBU19TWVNJTlQ7Ci0JfQotCi0JLyogY2xlYXIgdGhlIHByb2Nlc3NvciBjb3VudHMgKi8KLQl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzID0gMDsKLQl2b3lhZ2VyX3F1YWRfcHJvY2Vzc29ycyA9IDA7Ci0KLQlwcmludGsoIlZPWUFHRVI6IGJlZ2lubmluZyBDQVQgYnVzIHByb2JlXG4iKTsKLQkvKiBzZXQgdXAgdGhlIFN1cGVyU2V0IFBvcnQgQmxvY2sgd2hpY2ggdGVsbHMgdXMgd2hlcmUgdGhlCi0JICogQ0FUIGNvbW11bmljYXRpb24gcG9ydCBpcyAqLwotCXNzcGIgPSBpbmIoVk9ZQUdFUl9TU1BCX1JFTE9DQVRJT05fUE9SVCkgKiAweDEwMDsKLQlWREVCVUcoKCJWT1lBR0VSIERFQlVHOiBzc3BiID0gMHgleFxuIiwgc3NwYikpOwotCi0JLyogbm93IGZpbmQgb3V0IGlmIHdlcmUgOCBzbG90IG9yIG5vcm1hbCAqLwotCWlmICgoaW5iKFZJQ19QUk9DX1dIT19BTV9JKSAmIEVJR0hUX1NMT1RfSURFTlRJRklFUikKLQkgICAgPT0gRUlHSFRfU0xPVF9JREVOVElGSUVSKSB7Ci0JCXZveWFnZXJfOHNsb3QgPSAxOwotCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJICAgICAgICJWb3lhZ2VyOiBFaWdodCBzbG90IDUxeHggY29uZmlndXJhdGlvbiBkZXRlY3RlZFxuIik7Ci0JfQotCi0JZm9yIChpID0gVk9ZQUdFUl9NSU5fTU9EVUxFOyBpIDw9IFZPWUFHRVJfTUFYX01PRFVMRTsgaSsrKSB7Ci0JCV9fdTggaW5wdXQ7Ci0JCWludCBhc2ljOwotCQlfX3UxNiBlcHJvbV9zaXplOwotCQlfX3UxNiBzcF9vZmZzZXQ7Ci0KLQkJb3V0YihWT1lBR0VSX0NBVF9ERVNFTEVDVCwgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCQlvdXRiKGksIFZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUKTsKLQotCQkvKiBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhlIG1vZHVsZSAqLwotCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfSVJDWUMsIENBVF9DTUQpOwotCQlvdXRiKFZPWUFHRVJfQ0FUX0hFQURFUiwgQ0FUX0RBVEEpOwotCQkvKiBzdHJlYW0gc2VyaWVzIG9mIGFsdGVybmF0aW5nIDEncyBhbmQgMCdzIHRvIHN0aW11bGF0ZQotCQkgKiByZXNwb25zZSAqLwotCQlvdXRiKDB4QUEsIENBVF9EQVRBKTsKLQkJaW5wdXQgPSBpbmIoQ0FUX0RBVEEpOwotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCWlmIChpbnB1dCAhPSBWT1lBR0VSX0NBVF9IRUFERVIpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUNERUJVRygoIlZPWUFHRVIgREVCVUc6IGZvdW5kIG1vZHVsZSBpZCAweCV4LCAlc1xuIiwgaSwKLQkJCWNhdF9tb2R1bGVfbmFtZShpKSkpOwotCQkqbW9kcHAgPSBrbWFsbG9jKHNpemVvZih2b3lhZ2VyX21vZHVsZV90KSwgR0ZQX0tFUk5FTCk7CS8qJnZveWFnZXJfbW9kdWxlX3N0b3JhZ2VbY2F0X2NvdW50KytdOyAqLwotCQlpZiAoKm1vZHBwID09IE5VTEwpIHsKLQkJCXByaW50aygiKipXQVJOSU5HKioga21hbGxvYyBmYWlsdXJlIGluIGNhdF9pbml0XG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW1lbXNldCgqbW9kcHAsIDAsIHNpemVvZih2b3lhZ2VyX21vZHVsZV90KSk7Ci0JCS8qIG5lZWQgdGVtcG9yYXJ5IGFzaWMgZm9yIGNhdF9zdWJyZWFkLiAgSXQgd2lsbCBiZQotCQkgKiBmaWxsZWQgaW4gY29ycmVjdGx5IGxhdGVyICovCi0JCSgqbW9kcHApLT5hc2ljID0ga21hbGxvYyhzaXplb2Yodm95YWdlcl9hc2ljX3QpLCBHRlBfS0VSTkVMKTsJLyomdm95YWdlcl9hc2ljX3N0b3JhZ2VbYXNpY19jb3VudF07ICovCi0JCWlmICgoKm1vZHBwKS0+YXNpYyA9PSBOVUxMKSB7Ci0JCQlwcmludGsoIioqV0FSTklORyoqIGttYWxsb2MgZmFpbHVyZSBpbiBjYXRfaW5pdFxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCQltZW1zZXQoKCptb2RwcCktPmFzaWMsIDAsIHNpemVvZih2b3lhZ2VyX2FzaWNfdCkpOwotCQkoKm1vZHBwKS0+YXNpYy0+YXNpY19pZCA9IFZPWUFHRVJfQ0FUX0lEOwotCQkoKm1vZHBwKS0+YXNpYy0+c3ViYWRkciA9IFZPWUFHRVJfU1VCQUREUl9ISTsKLQkJKCptb2RwcCktPm1vZHVsZV9hZGRyID0gaTsKLQkJKCptb2RwcCktPnNjYW5fcGF0aF9jb25uZWN0ZWQgPSAwOwotCQlpZiAoaSA9PSBWT1lBR0VSX1BTSSkgewotCQkJLyogRXhjZXB0aW9uIGxlZyBmb3IgbW9kdWxlcyB3aXRoIG5vIEVFUFJPTSAqLwotCQkJcHJpbnRrKCJNb2R1bGUgXCIlc1wiXG4iLCBjYXRfbW9kdWxlX25hbWUoaSkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlDREVCVUcoKCJjYXRfaW5pdDogUmVhZGluZyBlZXByb20gZm9yIG1vZHVsZSAweCV4IGF0IG9mZnNldCAlZFxuIiwgaSwgVk9ZQUdFUl9YU1VNX0VORF9PRkZTRVQpKTsKLQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQljYXRfZGlzY29ubmVjdCgqbW9kcHAsICgqbW9kcHApLT5hc2ljKTsKLQkJaWYgKGNhdF9zdWJyZWFkKCptb2RwcCwgKCptb2RwcCktPmFzaWMsCi0JCQkJVk9ZQUdFUl9YU1VNX0VORF9PRkZTRVQsIHNpemVvZihlcHJvbV9zaXplKSwKLQkJCQkmZXByb21fc2l6ZSkpIHsKLQkJCXByaW50awotCQkJICAgICgiKipXQVJOSU5HKio6IFZveWFnZXIgY291bGRuJ3QgcmVhZCBFUFJPTSBzaXplIGZvciBtb2R1bGUgMHgleFxuIiwKLQkJCSAgICAgaSk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoZXByb21fc2l6ZSA+IHNpemVvZihlcHJvbV9idWYpKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIioqV0FSTklORyoqOiBWb3lhZ2VyIGluc3VmZmljaWVudCBzaXplIHRvIHJlYWQgRVBST00gZGF0YSwgbW9kdWxlIDB4JXguICBOZWVkICVkXG4iLAotCQkJICAgICBpLCBlcHJvbV9zaXplKTsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQlDREVCVUcoKCJjYXRfaW5pdDogbW9kdWxlIDB4JXgsIGVlcHJvbV9zaXplICVkXG4iLCBpLAotCQkJZXByb21fc2l6ZSkpOwotCQlpZiAoY2F0X3N1YnJlYWQKLQkJICAgICgqbW9kcHAsICgqbW9kcHApLT5hc2ljLCAwLCBlcHJvbV9zaXplLCBlcHJvbV9idWYpKSB7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCXByaW50aygiTW9kdWxlIFwiJXNcIiwgdmVyc2lvbiAweCV4LCB0cmFjZXIgMHgleCwgYXNpY3MgJWRcbiIsCi0JCSAgICAgICBjYXRfbW9kdWxlX25hbWUoaSksIGVwcm9tX2hkci0+dmVyc2lvbl9pZCwKLQkJICAgICAgICooKF9fdTMyICopIGVwcm9tX2hkci0+dHJhY2VyKSwgZXByb21faGRyLT5udW1fYXNpY3MpOwotCQkoKm1vZHBwKS0+ZWVfc2l6ZSA9IGVwcm9tX2hkci0+ZWVfc2l6ZTsKLQkJKCptb2RwcCktPm51bV9hc2ljcyA9IGVwcm9tX2hkci0+bnVtX2FzaWNzOwotCQlhc2ljcHAgPSAmKCgqbW9kcHApLT5hc2ljKTsKLQkJc3Bfb2Zmc2V0ID0gZXByb21faGRyLT5zY2FuX3BhdGhfb2Zmc2V0OwotCQkvKiBBbGwgd2UgcmVhbGx5IGNhcmUgYWJvdXQgYXJlIHRoZSBRdWFkIGNhcmRzLiAgV2UKLQkJICogaWRlbnRpZnkgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGluIGEgcHJvY2Vzc29yIHNsb3QKLQkJICogYW5kIGhhdmUgb25seSBmb3VyIGFzaWNzICovCi0JCWlmICgoaSA8IDB4MTAgfHwgKGkgPj0gMHgxNCAmJiBpIDwgMHgxYykgfHwgaSA+IDB4MWYpKSB7Ci0JCQltb2RwcCA9ICYoKCptb2RwcCktPm5leHQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJLyogTm93IHdlIGtub3cgaXQncyBpbiBhIHByb2Nlc3NvciBzbG90LCBkb2VzIGl0IGhhdmUKLQkJICogYSBxdWFkIGJhc2Vib2FyZCBzdWJtb2R1bGUgKi8KLQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQljYXRfcmVhZCgqbW9kcHAsICgqbW9kcHApLT5hc2ljLCBWT1lBR0VSX1NVQk1PRFBSRVNFTlQsCi0JCQkgJm51bV9zdWJtb2R1bGVzKTsKLQkJLyogbG93ZXN0IHR3byBiaXRzLCBhY3RpdmUgbG93ICovCi0JCW51bV9zdWJtb2R1bGVzID0gfigweGZjIHwgbnVtX3N1Ym1vZHVsZXMpOwotCQlDREVCVUcoKCJWT1lBR0VSIENBVDogJWQgc3VibW9kdWxlcyBwcmVzZW50XG4iLAotCQkJbnVtX3N1Ym1vZHVsZXMpKTsKLQkJaWYgKG51bV9zdWJtb2R1bGVzID09IDApIHsKLQkJCS8qIGZpbGwgaW4gdGhlIGR5YWRpYyBleHRlbmRlZCBwcm9jZXNzb3JzICovCi0JCQlfX3U4IGNwdSA9IGkgJiAweDA3OwotCi0JCQlwcmludGsoIk1vZHVsZSBcIiVzXCI6IER5YWRpYyBQcm9jZXNzb3IgQ2FyZFxuIiwKLQkJCSAgICAgICBjYXRfbW9kdWxlX25hbWUoaSkpOwotCQkJdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyB8PSAoMSA8PCBjcHUpOwotCQkJY3B1ICs9IDQ7Ci0JCQl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzIHw9ICgxIDw8IGNwdSk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIG5vdyB3ZSB3YW50IHRvIHJlYWQgdGhlIGFzaWNzIG9uIHRoZSBmaXJzdCBzdWJtb2R1bGUsCi0JCSAqIHdoaWNoIHNob3VsZCBiZSB0aGUgcXVhZCBiYXNlIGJvYXJkICovCi0KLQkJY2F0X3JlYWQoKm1vZHBwLCAoKm1vZHBwKS0+YXNpYywgVk9ZQUdFUl9TVUJNT0RTRUxFQ1QsICZ2YWwpOwotCQlDREVCVUcoKCJjYXRfaW5pdDogU1VCTU9EU0VMRUNUIHZhbHVlID0gMHgleFxuIiwgdmFsKSk7Ci0JCXZhbCA9ICh2YWwgJiAweDdjKSB8IFZPWUFHRVJfUVVBRF9CQVNFQk9BUkQ7Ci0JCWNhdF93cml0ZSgqbW9kcHAsICgqbW9kcHApLT5hc2ljLCBWT1lBR0VSX1NVQk1PRFNFTEVDVCwgdmFsKTsKLQotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0KLQkJQ0RFQlVHKCgiY2F0X2luaXQ6IFJlYWRpbmcgZWVwcm9tIGZvciBtb2R1bGUgMHgleCBhdCBvZmZzZXQgJWRcbiIsIGksIFZPWUFHRVJfWFNVTV9FTkRfT0ZGU0VUKSk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJY2F0X2Rpc2Nvbm5lY3QoKm1vZHBwLCAoKm1vZHBwKS0+YXNpYyk7Ci0JCWlmIChjYXRfc3VicmVhZCgqbW9kcHAsICgqbW9kcHApLT5hc2ljLAotCQkJCVZPWUFHRVJfWFNVTV9FTkRfT0ZGU0VULCBzaXplb2YoZXByb21fc2l6ZSksCi0JCQkJJmVwcm9tX3NpemUpKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIioqV0FSTklORyoqOiBWb3lhZ2VyIGNvdWxkbid0IHJlYWQgRVBST00gc2l6ZSBmb3IgbW9kdWxlIDB4JXhcbiIsCi0JCQkgICAgIGkpOwotCQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGVwcm9tX3NpemUgPiBzaXplb2YoZXByb21fYnVmKSkgewotCQkJcHJpbnRrCi0JCQkgICAgKCIqKldBUk5JTkcqKjogVm95YWdlciBpbnN1ZmZpY2llbnQgc2l6ZSB0byByZWFkIEVQUk9NIGRhdGEsIG1vZHVsZSAweCV4LiAgTmVlZCAlZFxuIiwKLQkJCSAgICAgaSwgZXByb21fc2l6ZSk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJQ0RFQlVHKCgiY2F0X2luaXQ6IG1vZHVsZSAweCV4LCBlZXByb21fc2l6ZSAlZFxuIiwgaSwKLQkJCWVwcm9tX3NpemUpKTsKLQkJaWYgKGNhdF9zdWJyZWFkCi0JCSAgICAoKm1vZHBwLCAoKm1vZHBwKS0+YXNpYywgMCwgZXByb21fc2l6ZSwgZXByb21fYnVmKSkgewotCQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkvKiBOb3cgZG8gZXZlcnl0aGluZyBmb3IgdGhlIFFCQiBzdWJtb2R1bGUgMSAqLwotCQkoKm1vZHBwKS0+ZWVfc2l6ZSA9IGVwcm9tX2hkci0+ZWVfc2l6ZTsKLQkJKCptb2RwcCktPm51bV9hc2ljcyA9IGVwcm9tX2hkci0+bnVtX2FzaWNzOwotCQlhc2ljcHAgPSAmKCgqbW9kcHApLT5hc2ljKTsKLQkJc3Bfb2Zmc2V0ID0gZXByb21faGRyLT5zY2FuX3BhdGhfb2Zmc2V0OwotCQkvKiBnZXQgcmlkIG9mIHRoZSBkdW1teSBDQVQgYXNpYyBhbmQgcmVhZCB0aGUgcmVhbCBvbmUgKi8KLQkJa2ZyZWUoKCptb2RwcCktPmFzaWMpOwotCQlmb3IgKGFzaWMgPSAwOyBhc2ljIDwgKCptb2RwcCktPm51bV9hc2ljczsgYXNpYysrKSB7Ci0JCQlpbnQgajsKLQkJCXZveWFnZXJfYXNpY190ICphc2ljcCA9ICphc2ljcHAgPSBremFsbG9jKHNpemVvZih2b3lhZ2VyX2FzaWNfdCksIEdGUF9LRVJORUwpOwkvKiZ2b3lhZ2VyX2FzaWNfc3RvcmFnZVthc2ljX2NvdW50KytdOyAqLwotCQkJdm95YWdlcl9zcF90YWJsZV90ICpzcF90YWJsZTsKLQkJCXZveWFnZXJfYXRfdCAqYXNpY190YWJsZTsKLQkJCXZveWFnZXJfanR0X3QgKmp0YWdfdGFibGU7Ci0KLQkJCWlmIChhc2ljcCA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrCi0JCQkJICAgICgiKipXQVJOSU5HKioga21hbGxvYyBmYWlsdXJlIGluIGNhdF9pbml0XG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWFzaWNwcCA9ICYoYXNpY3AtPm5leHQpOwotCQkJYXNpY3AtPmFzaWNfbG9jYXRpb24gPSBhc2ljOwotCQkJc3BfdGFibGUgPQotCQkJICAgICh2b3lhZ2VyX3NwX3RhYmxlX3QgKikgKGVwcm9tX2J1ZiArIHNwX29mZnNldCk7Ci0JCQlhc2ljcC0+YXNpY19pZCA9IHNwX3RhYmxlLT5hc2ljX2lkOwotCQkJYXNpY190YWJsZSA9Ci0JCQkgICAgKHZveWFnZXJfYXRfdCAqKSAoZXByb21fYnVmICsKLQkJCQkJICAgICAgc3BfdGFibGUtPmFzaWNfZGF0YV9vZmZzZXQpOwotCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLQkJCQlhc2ljcC0+anRhZ19pZFtqXSA9IGFzaWNfdGFibGUtPmp0YWdfaWRbal07Ci0JCQlqdGFnX3RhYmxlID0KLQkJCSAgICAodm95YWdlcl9qdHRfdCAqKSAoZXByb21fYnVmICsKLQkJCQkJICAgICAgIGFzaWNfdGFibGUtPmp0YWdfb2Zmc2V0KTsKLQkJCWFzaWNwLT5pcmVnX2xlbmd0aCA9IGp0YWdfdGFibGUtPmlyZWdfbGVuOwotCQkJYXNpY3AtPmJpdF9sb2NhdGlvbiA9ICgqbW9kcHApLT5pbnN0X2JpdHM7Ci0JCQkoKm1vZHBwKS0+aW5zdF9iaXRzICs9IGFzaWNwLT5pcmVnX2xlbmd0aDsKLQkJCWlmIChhc2ljcC0+aXJlZ19sZW5ndGggPiAoKm1vZHBwKS0+bGFyZ2VzdF9yZWcpCi0JCQkJKCptb2RwcCktPmxhcmdlc3RfcmVnID0gYXNpY3AtPmlyZWdfbGVuZ3RoOwotCQkJaWYgKGFzaWNwLT5pcmVnX2xlbmd0aCA8ICgqbW9kcHApLT5zbWFsbGVzdF9yZWcgfHwKLQkJCSAgICAoKm1vZHBwKS0+c21hbGxlc3RfcmVnID09IDApCi0JCQkJKCptb2RwcCktPnNtYWxsZXN0X3JlZyA9IGFzaWNwLT5pcmVnX2xlbmd0aDsKLQkJCUNERUJVRygoImFzaWMgMHgleCwgaXJlZ19sZW5ndGg9JWQsIGJpdF9sb2NhdGlvbj0lZFxuIiwKLQkJCQlhc2ljcC0+YXNpY19pZCwgYXNpY3AtPmlyZWdfbGVuZ3RoLAotCQkJCWFzaWNwLT5iaXRfbG9jYXRpb24pKTsKLQkJCWlmIChhc2ljcC0+YXNpY19pZCA9PSBWT1lBR0VSX1FVQURfUUFCQykgewotCQkJCUNERUJVRygoIlZPWUFHRVIgQ0FUOiBRQUJDIEFTSUMgZm91bmRcbiIpKTsKLQkJCQlxYWJjX2FzaWMgPSBhc2ljcDsKLQkJCX0KLQkJCXNwX29mZnNldCArPSBzaXplb2Yodm95YWdlcl9zcF90YWJsZV90KTsKLQkJfQotCQlDREVCVUcoKCJNb2R1bGUgaW5zdF9iaXRzID0gJWQsIGxhcmdlc3RfcmVnID0gJWQsIHNtYWxsZXN0X3JlZz0lZFxuIiwgKCptb2RwcCktPmluc3RfYml0cywgKCptb2RwcCktPmxhcmdlc3RfcmVnLCAoKm1vZHBwKS0+c21hbGxlc3RfcmVnKSk7Ci0JCS8qIE9LLCBub3cgd2UgaGF2ZSB0aGUgUVVBRCBBU0lDcyBzZXQgdXAsIHVzZSB0aGVtLgotCQkgKiB3ZSBuZWVkIHRvOgotCQkgKgotCQkgKiAxLiBGaW5kIHRoZSBNZW1vcnkgYXJlYSBmb3IgdGhlIFF1YWQgQ1BJcy4KLQkJICogMi4gRmluZCB0aGUgRXh0ZW5kZWQgVklDIHByb2Nlc3NvcgotCQkgKiAzLiBDb25maWd1cmUgYSBzZWNvbmQgZXh0ZW5kZWQgVklDIHByb2Nlc3NvciAoVGhpcwotCQkgKiAgICBjYW5ub3QgYmUgZG9uZSBmb3IgdGhlIDUxeHguCi0JCSAqICovCi0JCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJY2F0X2Nvbm5lY3QoKm1vZHBwLCAoKm1vZHBwKS0+YXNpYyk7Ci0JCUNERUJVRygoIkNBVCBDT05ORUNURUQhIVxuIikpOwotCQljYXRfc3VicmVhZCgqbW9kcHAsIHFhYmNfYXNpYywgMCwgc2l6ZW9mKHFhYmNfZGF0YSksIHFhYmNfZGF0YSk7Ci0JCXFpY19hZGRyID0gcWFiY19kYXRhWzVdIDw8IDg7Ci0JCXFpY19hZGRyID0gKHFpY19hZGRyIHwgcWFiY19kYXRhWzZdKSA8PCA4OwotCQlxaWNfYWRkciA9IChxaWNfYWRkciB8IHFhYmNfZGF0YVs3XSkgPDwgODsKLQkJcHJpbnRrCi0JCSAgICAoIk1vZHVsZSBcIiVzXCI6IFF1YWQgUHJvY2Vzc29yIENhcmQ7IENQSSAweCVseCwgU0VUPTB4JXhcbiIsCi0JCSAgICAgY2F0X21vZHVsZV9uYW1lKGkpLCBxaWNfYWRkciwgcWFiY19kYXRhWzhdKTsKLSNpZiAwCQkJCS8qIHBsdW1iaW5nIGZhaWxzLS0tRklYTUUgKi8KLQkJaWYgKChxYWJjX2RhdGFbOF0gJiAweGYwKSA9PSAwKSB7Ci0JCQkvKiBGSVhNRTogMzIgd2F5IDggQ1BVIHNsb3QgbW9uc3RlciBjYW5ub3QgYmUKLQkJCSAqIHBsdW1iZWQgdGhpcyB3YXktLS1uZWVkIHRvIGNoZWNrIGZvciBpdCAqLwotCi0JCQlwcmludGsoIlBsdW1iaW5nIHNlY29uZCBFeHRlbmRlZCBRdWFkIFByb2Nlc3NvclxuIik7Ci0JCQkvKiBzZWNvbmQgVklDIGxpbmUgaGFyZHdpcmVkIHRvIFF1YWQgQ1BVIDEgKi8KLQkJCXFhYmNfZGF0YVs4XSB8PSAweDIwOwotCQkJY2F0X3N1YndyaXRlKCptb2RwcCwgcWFiY19hc2ljLCA4LCAxLCAmcWFiY19kYXRhWzhdKTsKLSNpZmRlZiBWT1lBR0VSX0NBVF9ERUJVRwotCQkJLyogdmVyaWZ5IHBsdW1iaW5nICovCi0JCQljYXRfc3VicmVhZCgqbW9kcHAsIHFhYmNfYXNpYywgOCwgMSwgJnFhYmNfZGF0YVs4XSk7Ci0JCQlpZiAoKHFhYmNfZGF0YVs4XSAmIDB4ZjApID09IDApIHsKLQkJCQlDREVCVUcoKCJQTFVNQklORyBGQUlMRUQ6IDB4JXhcbiIsCi0JCQkJCXFhYmNfZGF0YVs4XSkpOwotCQkJfQotI2VuZGlmCi0JCX0KLSNlbmRpZgotCi0JCXsKLQkJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0KLQkJCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCXJlcy0+bmFtZSA9IGttYWxsb2MoMTI4LCBHRlBfS0VSTkVMKTsKLQkJCXNwcmludGYoKGNoYXIgKilyZXMtPm5hbWUsICJWb3lhZ2VyICVzIFF1YWQgQ1BJIiwKLQkJCQljYXRfbW9kdWxlX25hbWUoaSkpOwotCQkJcmVzLT5zdGFydCA9IHFpY19hZGRyOwotCQkJcmVzLT5lbmQgPSBxaWNfYWRkciArIDB4M2ZmOwotCQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcyk7Ci0JCX0KLQotCQlxaWNfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXBfY2FjaGUocWljX2FkZHIsIDB4NDAwKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7Ci0JCQlfX3U4IGNwdTsKLQotCQkJaWYgKHZveWFnZXJfOHNsb3QpIHsKLQkJCQkvKiA4IHNsb3QgaGFzIGEgZGlmZmVyZW50IG1hcHBpbmcsCi0JCQkJICogZWFjaCBzbG90IGhhcyBvbmx5IG9uZSB2aWMgbGluZSwgc28KLQkJCQkgKiAxIGNwdSBpbiBlYWNoIHNsb3QgbXVzdCBiZSA8IDggKi8KLQkJCQljcHUgPSAoaSAmIDB4MDcpICsgaiAqIDg7Ci0JCQl9IGVsc2UgewotCQkJCWNwdSA9IChpICYgMHgwMykgKyBqICogNDsKLQkJCX0KLQkJCWlmICgocWFiY19kYXRhWzhdICYgKDEgPDwgaikpKSB7Ci0JCQkJdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyB8PSAoMSA8PCBjcHUpOwotCQkJfQotCQkJaWYgKHFhYmNfZGF0YVs4XSAmICgxIDw8IChqICsgNCkpKSB7Ci0JCQkJLyogU2Vjb25kIFNFVCByZWdpc3RlciBwbHVtYmVkOiBRdWFkCi0JCQkJICogY2FyZCBoYXMgdHdvIFZJQyBjb25uZWN0ZWQgQ1BVcy4KLQkJCQkgKiBTZWNvbmRhcnkgY2Fubm90IGJlIGJvb3RlZCBhcyBhIFZJQwotCQkJCSAqIENQVSAqLwotCQkJCXZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgfD0gKDEgPDwgY3B1KTsKLQkJCQl2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzICY9Ci0JCQkJICAgICh+KDEgPDwgY3B1KSk7Ci0JCQl9Ci0KLQkJCXZveWFnZXJfcXVhZF9wcm9jZXNzb3JzIHw9ICgxIDw8IGNwdSk7Ci0JCQl2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbY3B1XSA9IChzdHJ1Y3Qgdm95YWdlcl9xaWNfY3BpICopCi0JCQkgICAgKHFpY19hZGRyICsgKGogPDwgOCkpOwotCQkJQ0RFQlVHKCgiQ1BVJWQ6IENQSSBhZGRyZXNzIDB4JWx4XG4iLCBjcHUsCi0JCQkJKHVuc2lnbmVkIGxvbmcpdm95YWdlcl9xdWFkX2NwaV9hZGRyW2NwdV0pKTsKLQkJfQotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0KLQkJKmFzaWNwcCA9IE5VTEw7Ci0JCW1vZHBwID0gJigoKm1vZHBwKS0+bmV4dCk7Ci0JfQotCSptb2RwcCA9IE5VTEw7Ci0JcHJpbnRrCi0JICAgICgiQ0FUIEJ1cyBJbml0aWFsaXNhdGlvbiBmaW5pc2hlZDogZXh0ZW5kZWQgcHJvY3MgMHgleCwgcXVhZCBwcm9jcyAweCV4LCBhbGxvd2VkIHZpYyBib290ID0gMHgleFxuIiwKLQkgICAgIHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMsIHZveWFnZXJfcXVhZF9wcm9jZXNzb3JzLAotCSAgICAgdm95YWdlcl9hbGxvd2VkX2Jvb3RfcHJvY2Vzc29ycyk7Ci0JcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmdmljX3Jlcyk7Ci0JaWYgKHZveWFnZXJfcXVhZF9wcm9jZXNzb3JzKQotCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZxaWNfcmVzKTsKLQkvKiBzZXQgdXAgdGhlIGZyb250IHBvd2VyIHN3aXRjaCAqLwotfQotCi1pbnQgdm95YWdlcl9jYXRfcmVhZGIoX191OCBtb2R1bGUsIF9fdTggYXNpYywgaW50IHJlZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYXRfZGlzY29ubmVjdCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCkKLXsKLQlfX3U4IHZhbDsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghbW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGFzaWNwLT5hc2ljX2lkICE9IFZPWUFHRVJfQ0FUX0lEKSB7Ci0JCUNERUJVRygoImNhdF9kaXNjb25uZWN0OiBBU0lDIGlzIG5vdCBDQVRcbiIpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWVyciA9IGNhdF9yZWFkKG1vZHAsIGFzaWNwLCBWT1lBR0VSX1NDQU5QQVRILCAmdmFsKTsKLQlpZiAoZXJyKSB7Ci0JCUNERUJVRygoImNhdF9kaXNjb25uZWN0OiBmYWlsZWQgdG8gcmVhZCBTQ0FOUEFUSFxuIikpOwotCQlyZXR1cm4gZXJyOwotCX0KLQl2YWwgJj0gVk9ZQUdFUl9ESVNDT05ORUNUX0FTSUM7Ci0JZXJyID0gY2F0X3dyaXRlKG1vZHAsIGFzaWNwLCBWT1lBR0VSX1NDQU5QQVRILCB2YWwpOwotCWlmIChlcnIpIHsKLQkJQ0RFQlVHKCgiY2F0X2Rpc2Nvbm5lY3Q6IGZhaWxlZCB0byB3cml0ZSBTQ0FOUEFUSFxuIikpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0Jb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCW1vZHAtPnNjYW5fcGF0aF9jb25uZWN0ZWQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2F0X2Nvbm5lY3Qodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3ApCi17Ci0JX191OCB2YWw7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAobW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGFzaWNwLT5hc2ljX2lkICE9IFZPWUFHRVJfQ0FUX0lEKSB7Ci0JCUNERUJVRygoImNhdF9jb25uZWN0OiBBU0lDIGlzIG5vdCBDQVRcbiIpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JZXJyID0gY2F0X3JlYWQobW9kcCwgYXNpY3AsIFZPWUFHRVJfU0NBTlBBVEgsICZ2YWwpOwotCWlmIChlcnIpIHsKLQkJQ0RFQlVHKCgiY2F0X2Nvbm5lY3Q6IGZhaWxlZCB0byByZWFkIFNDQU5QQVRIXG4iKSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXZhbCB8PSBWT1lBR0VSX0NPTk5FQ1RfQVNJQzsKLQllcnIgPSBjYXRfd3JpdGUobW9kcCwgYXNpY3AsIFZPWUFHRVJfU0NBTlBBVEgsIHZhbCk7Ci0JaWYgKGVycikgewotCQlDREVCVUcoKCJjYXRfY29ubmVjdDogZmFpbGVkIHRvIHdyaXRlIFNDQU5QQVRIXG4iKSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JbW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB2b3lhZ2VyX2NhdF9wb3dlcl9vZmYodm9pZCkKLXsKLQkvKiBQb3dlciB0aGUgbWFjaGluZSBvZmYgYnkgd3JpdGluZyB0byB0aGUgUFNJIG92ZXIgdGhlIENBVAotCSAqIGJ1cyAqLwotCV9fdTggZGF0YTsKLQl2b3lhZ2VyX21vZHVsZV90IHBzaSA9IHsgMCB9OwotCXZveWFnZXJfYXNpY190IHBzaV9hc2ljID0geyAwIH07Ci0KLQlwc2kuYXNpYyA9ICZwc2lfYXNpYzsKLQlwc2kuYXNpYy0+YXNpY19pZCA9IFZPWUFHRVJfQ0FUX0lEOwotCXBzaS5hc2ljLT5zdWJhZGRyID0gVk9ZQUdFUl9TVUJBRERSX0hJOwotCXBzaS5tb2R1bGVfYWRkciA9IFZPWUFHRVJfUFNJOwotCXBzaS5zY2FuX3BhdGhfY29ubmVjdGVkID0gMDsKLQotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkvKiBDb25uZWN0IHRoZSBQU0kgdG8gdGhlIENBVCBCdXMgKi8KLQlvdXRiKFZPWUFHRVJfQ0FUX0RFU0VMRUNULCBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCk7Ci0Jb3V0YihWT1lBR0VSX1BTSSwgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQljYXRfZGlzY29ubmVjdCgmcHNpLCAmcHNpX2FzaWMpOwotCS8qIFJlYWQgdGhlIHN0YXR1cyAqLwotCWNhdF9zdWJyZWFkKCZwc2ksICZwc2lfYXNpYywgVk9ZQUdFUl9QU0lfR0VORVJBTF9SRUcsIDEsICZkYXRhKTsKLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JQ0RFQlVHKCgiUFNJIFNUQVRVUyAweCV4XG4iLCBkYXRhKSk7Ci0JLyogVGhlc2UgdHdvIHdyaXRlcyBhcmUgcG93ZXIgb2ZmIHByZXAgYW5kIHBlcmZvcm0gKi8KLQlkYXRhID0gUFNJX0NMRUFSOwotCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQljYXRfc3Vid3JpdGUoJnBzaSwgJnBzaV9hc2ljLCBWT1lBR0VSX1BTSV9HRU5FUkFMX1JFRywgMSwgJmRhdGEpOwotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQlkYXRhID0gUFNJX1BPV0VSX0RPV047Ci0Jb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCWNhdF9zdWJ3cml0ZSgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX0dFTkVSQUxfUkVHLCAxLCAmZGF0YSk7Ci0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotfQotCi1zdHJ1Y3Qgdm95YWdlcl9zdGF0dXMgdm95YWdlcl9zdGF0dXMgPSB7IDAgfTsKLQotdm9pZCB2b3lhZ2VyX2NhdF9wc2koX191OCBjbWQsIF9fdTE2IHJlZywgX191OCAqIGRhdGEpCi17Ci0Jdm95YWdlcl9tb2R1bGVfdCBwc2kgPSB7IDAgfTsKLQl2b3lhZ2VyX2FzaWNfdCBwc2lfYXNpYyA9IHsgMCB9OwotCi0JcHNpLmFzaWMgPSAmcHNpX2FzaWM7Ci0JcHNpLmFzaWMtPmFzaWNfaWQgPSBWT1lBR0VSX0NBVF9JRDsKLQlwc2kuYXNpYy0+c3ViYWRkciA9IFZPWUFHRVJfU1VCQUREUl9ISTsKLQlwc2kubW9kdWxlX2FkZHIgPSBWT1lBR0VSX1BTSTsKLQlwc2kuc2Nhbl9wYXRoX2Nvbm5lY3RlZCA9IDA7Ci0KLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JLyogQ29ubmVjdCB0aGUgUFNJIHRvIHRoZSBDQVQgQnVzICovCi0Jb3V0YihWT1lBR0VSX0NBVF9ERVNFTEVDVCwgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCW91dGIoVk9ZQUdFUl9QU0ksIFZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUKTsKLQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JY2F0X2Rpc2Nvbm5lY3QoJnBzaSwgJnBzaV9hc2ljKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVk9ZQUdFUl9QU0lfUkVBRDoKLQkJY2F0X3JlYWQoJnBzaSwgJnBzaV9hc2ljLCByZWcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFZPWUFHRVJfUFNJX1dSSVRFOgotCQljYXRfd3JpdGUoJnBzaSwgJnBzaV9hc2ljLCByZWcsICpkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBWT1lBR0VSX1BTSV9TVUJSRUFEOgotCQljYXRfc3VicmVhZCgmcHNpLCAmcHNpX2FzaWMsIHJlZywgMSwgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgVk9ZQUdFUl9QU0lfU1VCV1JJVEU6Ci0JCWNhdF9zdWJ3cml0ZSgmcHNpLCAmcHNpX2FzaWMsIHJlZywgMSwgZGF0YSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVm95YWdlciBQU0ksIHVucmVjb2duaXNlZCBjb21tYW5kICVkXG4iLCBjbWQpOwotCQlicmVhazsKLQl9Ci0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotfQotCi12b2lkIHZveWFnZXJfY2F0X2RvX2NvbW1vbl9pbnRlcnJ1cHQodm9pZCkKLXsKLQkvKiBUaGlzIGlzIGNhdXNlZCBlaXRoZXIgYnkgYSBtZW1vcnkgcGFyaXR5IGVycm9yIG9yIHNvbWV0aGluZwotCSAqIGluIHRoZSBQU0kgKi8KLQlfX3U4IGRhdGE7Ci0Jdm95YWdlcl9tb2R1bGVfdCBwc2kgPSB7IDAgfTsKLQl2b3lhZ2VyX2FzaWNfdCBwc2lfYXNpYyA9IHsgMCB9OwotCXN0cnVjdCB2b3lhZ2VyX3BzaSBwc2lfcmVnOwotCWludCBpOwotICAgICAgcmVfcmVhZDoKLQlwc2kuYXNpYyA9ICZwc2lfYXNpYzsKLQlwc2kuYXNpYy0+YXNpY19pZCA9IFZPWUFHRVJfQ0FUX0lEOwotCXBzaS5hc2ljLT5zdWJhZGRyID0gVk9ZQUdFUl9TVUJBRERSX0hJOwotCXBzaS5tb2R1bGVfYWRkciA9IFZPWUFHRVJfUFNJOwotCXBzaS5zY2FuX3BhdGhfY29ubmVjdGVkID0gMDsKLQotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkvKiBDb25uZWN0IHRoZSBQU0kgdG8gdGhlIENBVCBCdXMgKi8KLQlvdXRiKFZPWUFHRVJfQ0FUX0RFU0VMRUNULCBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCk7Ci0Jb3V0YihWT1lBR0VSX1BTSSwgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQljYXRfZGlzY29ubmVjdCgmcHNpLCAmcHNpX2FzaWMpOwotCS8qIFJlYWQgdGhlIHN0YXR1cy4gIE5PVEU6IE5lZWQgdG8gcmVhZCAqYWxsKiB0aGUgUFNJIHJlZ3MgaGVyZQotCSAqIG90aGVyd2lzZSB0aGUgY21uIGludCB3aWxsIGJlIHJlYXNzZXJ0ZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBzaV9yZWcucmVncyk7IGkrKykgewotCQljYXRfcmVhZCgmcHNpLCAmcHNpX2FzaWMsIGksICYoKF9fdTggKikgJiBwc2lfcmVnLnJlZ3MpW2ldKTsKLQl9Ci0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCWlmICgocHNpX3JlZy5yZWdzLmNoZWNrYml0ICYgMHgwMikgPT0gMCkgewotCQlwc2lfcmVnLnJlZ3MuY2hlY2tiaXQgfD0gMHgwMjsKLQkJY2F0X3dyaXRlKCZwc2ksICZwc2lfYXNpYywgNSwgcHNpX3JlZy5yZWdzLmNoZWNrYml0KTsKLQkJcHJpbnRrKCJWT1lBR0VSIFJFLVJFQUQgUFNJXG4iKTsKLQkJZ290byByZV9yZWFkOwotCX0KLQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihwc2lfcmVnLnN1YnJlZ3MpOyBpKyspIHsKLQkJLyogVGhpcyBsb29rcyBzdHJhbmdlLCBidXQgdGhlIFBTSSBkb2Vzbid0IGRvIGF1dG8gaW5jcmVtZW50Ci0JCSAqIGNvcnJlY3RseSAqLwotCQljYXRfc3VicmVhZCgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX1NVUFBMWV9SRUcgKyBpLAotCQkJICAgIDEsICYoKF9fdTggKikgJiBwc2lfcmVnLnN1YnJlZ3MpW2ldKTsKLQl9Ci0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotI2lmZGVmIFZPWUFHRVJfQ0FUX0RFQlVHCi0JcHJpbnRrKCJWT1lBR0VSIFBTSTogIik7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihwc2lfcmVnLnJlZ3MpOyBpKyspCi0JCXByaW50aygiJTAyeCAiLCAoKF9fdTggKikgJiBwc2lfcmVnLnJlZ3MpW2ldKTsKLQlwcmludGsoIlxuICAgICAgICAgICAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBzaV9yZWcuc3VicmVncyk7IGkrKykKLQkJcHJpbnRrKCIlMDJ4ICIsICgoX191OCAqKSAmIHBzaV9yZWcuc3VicmVncylbaV0pOwotCXByaW50aygiXG4iKTsKLSNlbmRpZgotCWlmIChwc2lfcmVnLnJlZ3MuaW50c3RhdHVzICYgUFNJX01PTikgewotCQkvKiBzd2l0Y2ggb2ZmIG9yIHBvd2VyIGZhaWwgKi8KLQotCQlpZiAocHNpX3JlZy5zdWJyZWdzLnN1cHBseSAmIFBTSV9TV0lUQ0hfT0ZGKSB7Ci0JCQlpZiAodm95YWdlcl9zdGF0dXMuc3dpdGNoX29mZikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiVm95YWdlciBmcm9udCBwYW5lbCBzd2l0Y2ggdHVybmVkIG9mZiBhZ2Fpbi0tLUltbWVkaWF0ZSBwb3dlciBvZmYhXG4iKTsKLQkJCQl2b3lhZ2VyX2NhdF9wb3dlcl9vZmYoKTsKLQkJCQkvKiBub3QgcmVhY2hlZCAqLwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIlZveWFnZXIgZnJvbnQgcGFuZWwgc3dpdGNoIHR1cm5lZCBvZmZcbiIpOwotCQkJCXZveWFnZXJfc3RhdHVzLnN3aXRjaF9vZmYgPSAxOwotCQkJCXZveWFnZXJfc3RhdHVzLnJlcXVlc3RfZnJvbV9rZXJuZWwgPSAxOwotCQkJCXdha2VfdXBfcHJvY2Vzcyh2b3lhZ2VyX3RocmVhZCk7Ci0JCQl9Ci0JCQkvKiBUZWxsIHRoZSBoYXJkd2FyZSB3ZSdyZSB0YWtpbmcgY2FyZSBvZiB0aGUKLQkJCSAqIHNodXRkb3duLCBvdGhlcndpc2UgaXQgd2lsbCBwb3dlciB0aGUgYm94IG9mZgotCQkJICogd2l0aGluIDMgc2Vjb25kcyBvZiB0aGUgc3dpdGNoIGJlaW5nIHByZXNzZWQgYW5kLAotCQkJICogd2hpY2ggaXMgbXVjaCBtb3JlIGltcG9ydGFudCB0byB1cywgY29udGludWUgdG8gCi0JCQkgKiBhc3NlcnQgdGhlIGNvbW1vbiBpbnRlcnJ1cHQgKi8KLQkJCWRhdGEgPSBQU0lfQ0xSX1NXSVRDSF9PRkY7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCQljYXRfc3Vid3JpdGUoJnBzaSwgJnBzaV9hc2ljLCBWT1lBR0VSX1BTSV9TVVBQTFlfUkVHLAotCQkJCSAgICAgMSwgJmRhdGEpOwotCQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQl9IGVsc2UgewotCi0JCQlWREVCVUcoKCJWb3lhZ2VyIGFjIGZhaWwgcmVnIDB4JXhcbiIsCi0JCQkJcHNpX3JlZy5zdWJyZWdzLkFDZmFpbCkpOwotCQkJaWYgKChwc2lfcmVnLnN1YnJlZ3MuQUNmYWlsICYgQUNfRkFJTF9TVEFUX0NIQU5HRSkgPT0gMCkgewotCQkJCS8qIE5vIGZ1cnRoZXIgdXBkYXRlICovCi0JCQkJcmV0dXJuOwotCQkJfQotI2lmIDAKLQkJCS8qIERvbid0IGJvdGhlciB0cnlpbmcgdG8gZmluZCBvdXQgd2hvIGZhaWxlZC4KLQkJCSAqIEZJWE1FOiBUaGlzIHByb2JhYmx5IG1ha2VzIHRoZSBjb2RlIGluY29ycmVjdCBvbgotCQkJICogYW55dGhpbmcgb3RoZXIgdGhhbiBhIDM0NXggKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCQlpZiAocHNpX3JlZy5zdWJyZWdzLkFDZmFpbCAmICgxIDw8IGkpKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCXByaW50ayhLRVJOX05PVElDRSAiQUMgRkFJTCBJTiBTVVBQTFkgJWRcbiIsIGkpOwotI2VuZGlmCi0JCQkvKiBET04nVCBkbyB0aGlzOiBpdCBzaHV0cyBkb3duIHRoZSBBQyBQU0kgCi0JCQkgICBvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCQkgICBkYXRhID0gUFNJX01BU0tfTUFTSyB8IGk7Ci0JCQkgICBjYXRfc3Vid3JpdGUoJnBzaSwgJnBzaV9hc2ljLCBWT1lBR0VSX1BTSV9NQVNLLAotCQkJICAgMSwgJmRhdGEpOwotCQkJICAgb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkJICovCi0JCQlwcmludGsoS0VSTl9FUlIgIlZveWFnZXIgQUMgcG93ZXIgZmFpbHVyZVxuIik7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCQlkYXRhID0gUFNJX0NPTERfU1RBUlQ7Ci0JCQljYXRfc3Vid3JpdGUoJnBzaSwgJnBzaV9hc2ljLCBWT1lBR0VSX1BTSV9HRU5FUkFMX1JFRywKLQkJCQkgICAgIDEsICZkYXRhKTsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJCXZveWFnZXJfc3RhdHVzLnBvd2VyX2ZhaWwgPSAxOwotCQkJdm95YWdlcl9zdGF0dXMucmVxdWVzdF9mcm9tX2tlcm5lbCA9IDE7Ci0JCQl3YWtlX3VwX3Byb2Nlc3Modm95YWdlcl90aHJlYWQpOwotCQl9Ci0KLQl9IGVsc2UgaWYgKHBzaV9yZWcucmVncy5pbnRzdGF0dXMgJiBQU0lfRkFVTFQpIHsKLQkJLyogTWFqb3IgZmF1bHQhICovCi0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIlZveWFnZXIgUFNJIERldGVjdGVkIG1ham9yIGZhdWx0LCBpbW1lZGlhdGUgcG93ZXIgb2ZmIVxuIik7Ci0JCXZveWFnZXJfY2F0X3Bvd2VyX29mZigpOwotCQkvKiBub3QgcmVhY2hlZCAqLwotCX0gZWxzZSBpZiAocHNpX3JlZy5yZWdzLmludHN0YXR1cyAmIChQU0lfRENfRkFJTCB8IFBTSV9BTEFSTQotCQkJCQkgICAgIHwgUFNJX0NVUlJFTlQgfCBQU0lfRFZNCi0JCQkJCSAgICAgfCBQU0lfUFNDRkFVTFQgfCBQU0lfU1RBVF9DSEcpKSB7Ci0JCS8qIG90aGVyIHBzaSBmYXVsdCAqLwotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZveWFnZXIgUFNJIHN0YXR1cyAweCV4XG4iLCBkYXRhKTsKLQkJLyogY2xlYXIgdGhlIFBTSSBmYXVsdCAqLwotCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCWNhdF93cml0ZSgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX1NUQVRVU19SRUcsIDApOwotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljYzg0YS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MDcgKzAsMCBAQAotLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMQotICoKLSAqIEF1dGhvcjogSi5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQotICoKLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBhbGwgdGhlIHNhbWUgZXh0ZXJuYWwgZW50cmllcyBhcyBzbXAuYyBidXQgdXNlcwotICogdGhlIHZveWFnZXIgaGFsIHRvIHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS92b3lhZ2VyLmg+Ci0jaW5jbHVkZSA8YXNtL3ZpYy5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+Ci0KLS8qIFRMQiBzdGF0ZSAtLSB2aXNpYmxlIGV4dGVybmFsbHksIGluZGV4ZWQgcGh5c2ljYWxseSAqLwotREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHRsYl9zdGF0ZSwgY3B1X3RsYnN0YXRlKSA9IHsgJmluaXRfbW0sIDAgfTsKLQotLyogQ1BVIElSUSBhZmZpbml0eSAtLSBzZXQgdG8gYWxsIG9uZXMgaW5pdGlhbGx5ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfaXJxX2FmZmluaXR5W05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQgPQotCXtbMCAuLi4gTlJfQ1BVUy0xXSAgPSB+MFVMIH07Ci0KLS8qIHBlciBDUFUgZGF0YSBzdHJ1Y3R1cmUgKGZvciAvcHJvYy9jcHVpbmZvIGV0IGFsKSwgdmlzaWJsZSBleHRlcm5hbGx5Ci0gKiBpbmRleGVkIHBoeXNpY2FsbHkgKi8KLURFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjcHVpbmZvX3g4NiwgY3B1X2luZm8pOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9pbmZvKTsKLQotLyogcGh5c2ljYWwgSUQgb2YgdGhlIENQVSB1c2VkIHRvIGJvb3QgdGhlIHN5c3RlbSAqLwotdW5zaWduZWQgY2hhciBib290X2NwdV9pZDsKLQotLyogVGhlIG1lbW9yeSBsaW5lIGFkZHJlc3NlcyBmb3IgdGhlIFF1YWQgQ1BJcyAqLwotc3RydWN0IHZveWFnZXJfcWljX2NwaSAqdm95YWdlcl9xdWFkX2NwaV9hZGRyW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLS8qIFRoZSBtYXNrcyBmb3IgdGhlIEV4dGVuZGVkIFZJQyBwcm9jZXNzb3JzLCBmaWxsZWQgaW4gYnkgY2F0X2luaXQgKi8KLV9fdTMyIHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgPSAwOwotCi0vKiBNYXNrcyBmb3IgdGhlIGV4dGVuZGVkIFF1YWQgcHJvY2Vzc29ycyB3aGljaCBjYW5ub3QgYmUgVklDIGJvb3RlZCAqLwotX191MzIgdm95YWdlcl9hbGxvd2VkX2Jvb3RfcHJvY2Vzc29ycyA9IDA7Ci0KLS8qIFRoZSBtYXNrIGZvciB0aGUgUXVhZCBQcm9jZXNzb3JzIChib3RoIGV4dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQpICovCi1fX3UzMiB2b3lhZ2VyX3F1YWRfcHJvY2Vzc29ycyA9IDA7Ci0KLS8qIFRvdGFsIGNvdW50IG9mIGxpdmUgQ1BVcywgdXNlZCBpbiBwcm9jZXNzLmMgdG8gZGlzcGxheQotICogdGhlIENQVSBpbmZvcm1hdGlvbiBhbmQgaW4gaXJxLmMgZm9yIHRoZSBwZXIgQ1BVIGlycQotICogYWN0aXZpdHkgY291bnQuICBGaW5hbGx5IGV4cG9ydGVkIGJ5IGkzODZfa3N5bXMuYyAqLwotc3RhdGljIGludCB2b3lhZ2VyX2V4dGVuZGVkX2NwdXMgPSAxOwotCi0vKiBVc2VkIGZvciB0aGUgaW52YWxpZGF0ZSBtYXAgdGhhdCdzIGFsc28gY2hlY2tlZCBpbiB0aGUgc3BpbmxvY2sgKi8KLXN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHNtcF9pbnZhbGlkYXRlX25lZWRlZDsKLQotLyogQml0bWFzayBvZiBDUFVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSAtIGV4cG9ydGVkIGJ5IGkzODZfc3ltcy5jLCB1c2VkCi0gKiBieSBzY2hlZHVsZXIgYnV0IGluZGV4ZWQgcGh5c2ljYWxseSAqLwotc3RhdGljIGNwdW1hc2tfdCB2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwID0gQ1BVX01BU0tfTk9ORTsKLQotLyogVGhlIGludGVybmFsIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgc2VuZF9DUEkoX191MzIgY3B1c2V0LCBfX3U4IGNwaSk7Ci1zdGF0aWMgdm9pZCBhY2tfQ1BJKF9fdTggY3BpKTsKLXN0YXRpYyBpbnQgYWNrX1FJQ19DUEkoX191OCBjcGkpOwotc3RhdGljIHZvaWQgYWNrX3NwZWNpYWxfUUlDX0NQSShfX3U4IGNwaSk7Ci1zdGF0aWMgdm9pZCBhY2tfVklDX0NQSShfX3U4IGNwaSk7Ci1zdGF0aWMgdm9pZCBzZW5kX0NQSV9hbGxidXRzZWxmKF9fdTggY3BpKTsKLXN0YXRpYyB2b2lkIG1hc2tfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIHVubWFza192aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBlbmFibGVfbG9jYWxfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfbG9jYWxfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGJlZm9yZV9oYW5kbGVfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGFmdGVyX2hhbmRsZV92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgc2V0X3ZpY19pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwotc3RhdGljIHZvaWQgYWNrX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCB2aWNfZW5hYmxlX2NwaSh2b2lkKTsKLXN0YXRpYyB2b2lkIGRvX2Jvb3RfY3B1KF9fdTggY3B1aWQpOwotc3RhdGljIHZvaWQgZG9fcXVhZF9ib290c3RyYXAodm9pZCk7Ci1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKTsKLQotaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKLWludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7Ci0KLS8qIElubGluZSBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX29uZV9RSUNfQ1BJKF9fdTggY3B1LCBfX3U4IGNwaSkKLXsKLQl2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbY3B1XS0+cWljX2NwaVtjcGldLmNwaSA9Ci0JICAgIChzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMTYpICsgY3BpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9RSUNfQ1BJKF9fdTMyIGNwdXNldCwgX191OCBjcGkpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHVzZXQgJiAoMSA8PCBjcHUpKSB7Ci0jaWZkZWYgVk9ZQUdFUl9ERUJVRwotCQkJaWYgKCFjcHVfb25saW5lKGNwdSkpCi0JCQkJVkRFQlVHKCgiQ1BVJWQgc2VuZGluZyBjcGkgJWQgdG8gQ1BVJWQgbm90IGluICIKLQkJCQkJImNwdV9vbmxpbmVfbWFwXG4iLAotCQkJCQloYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwgY3BpLCBjcHUpKTsKLSNlbmRpZgotCQkJc2VuZF9vbmVfUUlDX0NQSShjcHUsIGNwaSAtIFFJQ19DUElfT0ZGU0VUKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyYXBwZXJfc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCWlycV9lbnRlcigpOwotCXNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoKTsKLQlpcnFfZXhpdCgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9vbmVfQ1BJKF9fdTggY3B1LCBfX3U4IGNwaSkKLXsKLQlpZiAodm95YWdlcl9xdWFkX3Byb2Nlc3NvcnMgJiAoMSA8PCBjcHUpKQotCQlzZW5kX29uZV9RSUNfQ1BJKGNwdSwgY3BpIC0gUUlDX0NQSV9PRkZTRVQpOwotCWVsc2UKLQkJc2VuZF9DUEkoMSA8PCBjcHUsIGNwaSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0NQSV9hbGxidXRzZWxmKF9fdTggY3BpKQotewotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCV9fdTMyIG1hc2sgPSBjcHVzX2FkZHIoY3B1X29ubGluZV9tYXApWzBdICYgfigxIDw8IGNwdSk7Ci0Jc2VuZF9DUEkobWFzaywgY3BpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY3B1X3F1YWQodm9pZCkKLXsKLQlfX3U4IGNwdW1hc2sgPSBpbmIoVklDX1BST0NfV0hPX0FNX0kpOwotCXJldHVybiAoKGNwdW1hc2sgJiBRVUFEX0lERU5USUZJRVIpID09IFFVQURfSURFTlRJRklFUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NwdV9leHRlbmRlZCh2b2lkKQotewotCV9fdTggY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlyZXR1cm4gKHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgJiAoMSA8PCBjcHUpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY3B1X3ZpY19ib290KHZvaWQpCi17Ci0JX191OCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXJldHVybiAodm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycwotCQkmIHZveWFnZXJfYWxsb3dlZF9ib290X3Byb2Nlc3NvcnMgJiAoMSA8PCBjcHUpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFja19DUEkoX191OCBjcGkpCi17Ci0Jc3dpdGNoIChjcGkpIHsKLQljYXNlIFZJQ19DUFVfQk9PVF9DUEk6Ci0JCWlmIChpc19jcHVfcXVhZCgpICYmICFpc19jcHVfdmljX2Jvb3QoKSkKLQkJCWFja19RSUNfQ1BJKGNwaSk7Ci0JCWVsc2UKLQkJCWFja19WSUNfQ1BJKGNwaSk7Ci0JCWJyZWFrOwotCWNhc2UgVklDX1NZU19JTlQ6Ci0JY2FzZSBWSUNfQ01OX0lOVDoKLQkJLyogVGhlc2UgYXJlIHNsaWdodGx5IHN0cmFuZ2UuICBFdmVuIG9uIHRoZSBRdWFkIGNhcmQsCi0JCSAqIFRoZXkgYXJlIHZlY3RvcmVkIGFzIFZJQyBDUElzICovCi0JCWlmIChpc19jcHVfcXVhZCgpKQotCQkJYWNrX3NwZWNpYWxfUUlDX0NQSShjcGkpOwotCQllbHNlCi0JCQlhY2tfVklDX0NQSShjcGkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIlZPWUFHRVIgRVJST1I6IENQSSVkIGlzIGluIGNvbW1vbiBDUEkgY29kZVxuIiwgY3BpKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiBsb2NhbCB2YXJpYWJsZXMgKi8KLQotLyogVGhlIFZJQyBJUlEgZGVzY3JpcHRvcnMgLS0gdGhlc2UgbG9vayBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZQotICogODI1OSBJUlFzIGV4Y2VwdCB0aGF0IG1hc2tzIGFuZCB0aGluZ3MgbXVzdCBiZSBrZXB0IHBlciBwcm9jZXNzb3IKLSAqLwotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB2aWNfY2hpcCA9IHsKLQkubmFtZSA9ICJWSUMiLAotCS5zdGFydHVwID0gc3RhcnR1cF92aWNfaXJxLAotCS5tYXNrID0gbWFza192aWNfaXJxLAotCS51bm1hc2sgPSB1bm1hc2tfdmljX2lycSwKLQkuc2V0X2FmZmluaXR5ID0gc2V0X3ZpY19pcnFfYWZmaW5pdHksCi19OwotCi0vKiB1c2VkIHRvIGNvdW50IHVwIGFzIENQVXMgYXJlIGJyb3VnaHQgb24gbGluZSAoc3RhcnRzIGF0IDApICovCi1zdGF0aWMgaW50IGNwdWNvdW50ID0gMDsKLQotLyogVGhlIHBlciBjcHUgcHJvZmlsZSBzdHVmZiAtIHVzZWQgaW4gc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcHJvZl9tdWx0aXBsaWVyKSA9IDE7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwcm9mX29sZF9tdWx0aXBsaWVyKSA9IDE7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwcm9mX2NvdW50ZXIpID0gMTsKLQotLyogdGhlIG1hcCB1c2VkIHRvIGNoZWNrIGlmIGEgQ1BVIGhhcyBib290ZWQgKi8KLXN0YXRpYyBfX3UzMiBjcHVfYm9vdGVkX21hcDsKLQotLyogdGhlIHN5bmNocm9uaXplIGZsYWcgdXNlZCB0byBob2xkIGFsbCBzZWNvbmRhcnkgQ1BVcyBzcGlubmluZyBpbgotICogYSB0aWdodCBsb29wIHVudGlsIHRoZSBib290IHNlcXVlbmNlIGlzIHJlYWR5IGZvciB0aGVtICovCi1zdGF0aWMgY3B1bWFza190IHNtcF9jb21tZW5jZWRfbWFzayA9IENQVV9NQVNLX05PTkU7Ci0KLS8qIFRoaXMgaXMgZm9yIHRoZSBuZXcgZHluYW1pYyBDUFUgYm9vdCBjb2RlICovCi0KLS8qIFRoZSBwZXIgcHJvY2Vzc29yIElSUSBtYXNrcyAodGhlc2UgYXJlIHVzdWFsbHkga2VwdCBpbiBzeW5jKSAqLwotc3RhdGljIF9fdTE2IHZpY19pcnFfbWFza1tOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwotCi0vKiB0aGUgbGlzdCBvZiBJUlFzIHRvIGJlIGVuYWJsZWQgYnkgdGhlIFZJQ19FTkFCTEVfSVJRX0NQSSAqLwotc3RhdGljIF9fdTE2IHZpY19pcnFfZW5hYmxlX21hc2tbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsgMCB9OwotCi0vKiBMb2NrIGZvciBlbmFibGUvZGlzYWJsZSBvZiBWSUMgaW50ZXJydXB0cyAqLwotc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWQgREVGSU5FX1NQSU5MT0NLKHZpY19pcnFfbG9jayk7Ci0KLS8qIFRoZSBib290IHByb2Nlc3NvciBpcyBjb3JyZWN0bHkgc2V0IHVwIGluIFBDIG1vZGUgd2hlbiBpdAotICogY29tZXMgdXAsIGJ1dCB0aGUgc2Vjb25kYXJpZXMgbmVlZCB0aGVpciBtYXN0ZXIvc2xhdmUgODI1OQotICogcGFpcnMgaW5pdGlhbGl6aW5nIGNvcnJlY3RseSAqLwotCi0vKiBJbnRlcnJ1cHQgY291bnRlcnMgKHBlciBjcHUpIGFuZCB0b3RhbCAtIHVzZWQgdG8gdHJ5IHRvCi0gKiBldmVuIHVwIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMgKi8KLXN0YXRpYyBsb25nIHZpY19pbnRyX3RvdGFsID0gMDsKLXN0YXRpYyBsb25nIHZpY19pbnRyX2NvdW50W05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7IDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZpY190aWNrW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7IDAgfTsKLQotLyogU2luY2Ugd2UgY2FuIG9ubHkgdXNlIENQSTAsIHdlIGZha2UgYWxsIHRoZSBvdGhlciBDUElzICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB2aWNfY3BpX21haWxib3hbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotLyogZGVidWdnaW5nIHJvdXRpbmUgdG8gcmVhZCB0aGUgaXNyIG9mIHRoZSBjcHUncyBwaWMgKi8KLXN0YXRpYyBpbmxpbmUgX191MTYgdmljX3JlYWRfaXNyKHZvaWQpCi17Ci0JX191MTYgaXNyOwotCi0Jb3V0YigweDBiLCAweGEwKTsKLQlpc3IgPSBpbmIoMHhhMCkgPDwgODsKLQlvdXRiKDB4MGIsIDB4MjApOwotCWlzciB8PSBpbmIoMHgyMCk7Ci0KLQlyZXR1cm4gaXNyOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgcWljX3NldHVwKHZvaWQpCi17Ci0JaWYgKCFpc19jcHVfcXVhZCgpKSB7Ci0JCS8qIG5vdCBhIHF1YWQsIG5vIHNldHVwICovCi0JCXJldHVybjsKLQl9Ci0Jb3V0YihRSUNfREVGQVVMVF9NQVNLMCwgUUlDX01BU0tfUkVHSVNURVIwKTsKLQlvdXRiKFFJQ19DUElfRU5BQkxFLCBRSUNfTUFTS19SRUdJU1RFUjEpOwotCi0JaWYgKGlzX2NwdV9leHRlbmRlZCgpKSB7Ci0JCS8qIHRoZSBRSUMgZHVwbGljYXRlIG9mIHRoZSBWSUMgYmFzZSByZWdpc3RlciAqLwotCQlvdXRiKFZJQ19ERUZBVUxUX0NQSV9CQVNFLCBRSUNfVklDX0NQSV9CQVNFX1JFR0lTVEVSKTsKLQkJb3V0YihRSUNfREVGQVVMVF9DUElfQkFTRSwgUUlDX0NQSV9CQVNFX1JFR0lTVEVSKTsKLQotCQkvKiBGSVhNRTogc2hvdWxkIHNldCB1cCB0aGUgUUlDIHRpbWVyIGFuZCBtZW1vcnkgcGFyaXR5Ci0JCSAqIGVycm9yIHZlY3RvcnMgaGVyZSAqLwotCX0KLX0KLQotc3RhdGljIF9faW5pdCB2b2lkIHZpY19zZXR1cF9waWModm9pZCkKLXsKLQlvdXRiKDEsIFZJQ19SRURJUkVDVF9SRUdJU1RFUl8xKTsKLQkvKiBjbGVhciB0aGUgY2xhaW0gcmVnaXN0ZXJzIGZvciBkeW5hbWljIHJvdXRpbmcgKi8KLQlvdXRiKDAsIFZJQ19DTEFJTV9SRUdJU1RFUl8wKTsKLQlvdXRiKDAsIFZJQ19DTEFJTV9SRUdJU1RFUl8xKTsKLQotCW91dGIoMCwgVklDX1BSSU9SSVRZX1JFR0lTVEVSKTsKLQkvKiBTZXQgdGhlIFByaW1hcnkgYW5kIFNlY29uZGFyeSBNaWNyb2NoYW5uZWwgdmVjdG9yCi0JICogYmFzZXMgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9yZGluYXJ5IGludGVycnVwdHMKLQkgKgotCSAqIEZJWE1FOiBUaGlzIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHVzaW5nIHNlcGFyYXRlCi0JICogdmVjdG9ycy4gKi8KLQlvdXRiKEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiwgVklDX1BSSU1BUllfTUNfQkFTRSk7Ci0Jb3V0YihGSVJTVF9FWFRFUk5BTF9WRUNUT1IsIFZJQ19TRUNPTkRBUllfTUNfQkFTRSk7Ci0JLyogTm93IGluaXRpYWxsaXNlIHRoZSBtYXN0ZXIgUElDIGJlbG9uZ2luZyB0byB0aGlzIENQVSBieQotCSAqIHNlbmRpbmcgdGhlIGZvdXIgSUNXcyAqLwotCi0JLyogSUNXMTogbGV2ZWwgdHJpZ2dlcmVkLCBJQ1c0IG5lZWRlZCAqLwotCW91dGIoMHgxOSwgMHgyMCk7Ci0KLQkvKiBJQ1cyOiB2ZWN0b3IgYmFzZSAqLwotCW91dGIoRklSU1RfRVhURVJOQUxfVkVDVE9SLCAweDIxKTsKLQotCS8qIElDVzM6IHNsYXZlIGF0IGxpbmUgMiAqLwotCW91dGIoMHgwNCwgMHgyMSk7Ci0KLQkvKiBJQ1c0OiA4MDg2IG1vZGUgKi8KLQlvdXRiKDB4MDEsIDB4MjEpOwotCi0JLyogbm93IHRoZSBzYW1lIGZvciB0aGUgc2xhdmUgUElDICovCi0KLQkvKiBJQ1cxOiBsZXZlbCB0cmlnZ2VyLCBJQ1c0IG5lZWRlZCAqLwotCW91dGIoMHgxOSwgMHhBMCk7Ci0KLQkvKiBJQ1cyOiBzbGF2ZSB2ZWN0b3IgYmFzZSAqLwotCW91dGIoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgOCwgMHhBMSk7Ci0KLQkvKiBJQ1czOiBzbGF2ZSBJRCAqLwotCW91dGIoMHgwMiwgMHhBMSk7Ci0KLQkvKiBJQ1c0OiA4MDg2IG1vZGUgKi8KLQlvdXRiKDB4MDEsIDB4QTEpOwotfQotCi1zdGF0aWMgdm9pZCBkb19xdWFkX2Jvb3RzdHJhcCh2b2lkKQotewotCWlmIChpc19jcHVfcXVhZCgpICYmIGlzX2NwdV92aWNfYm9vdCgpKSB7Ci0JCWludCBpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlfX3U4IGNwdWlkID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCS8qIEZJWE1FOiB0aGlzIHdvdWxkIGJlID4+MyAmMHg3IG9uIHRoZSAzMiB3YXkgKi8KLQkJCWlmICgoKGNwdWlkID4+IDIpICYgMHgwMykgPT0gaSkKLQkJCQkvKiBkb24ndCBsb3dlciBvdXIgb3duIG1hc2shICovCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIG1hc3F1ZXJhZGUgYXMgbG9jYWwgUXVhZCBDUFUgKi8KLQkJCW91dGIoUUlDX0NQVUlEX0VOQUJMRSB8IGksIFFJQ19QUk9DRVNTT1JfSUQpOwotCQkJLyogZW5hYmxlIHRoZSBzdGFydHVwIENQSSAqLwotCQkJb3V0YihRSUNfQk9PVF9DUElfTUFTSywgUUlDX01BU0tfUkVHSVNURVIxKTsKLQkJCS8qIHJlc3RvcmUgY3B1IGlkICovCi0JCQlvdXRiKDAsIFFJQ19QUk9DRVNTT1JfSUQpOwotCQl9Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci19Ci0KLXZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCkKLXsKLQkvKiBUaGlzIGlzIGVtcHR5IG9uIHZveWFnZXIgYmVjYXVzZSB3ZSBuZWVkIGEgbXVjaAotCSAqIGVhcmxpZXIgZGV0ZWN0aW9uIHdoaWNoIGlzIGRvbmUgaW4gZmluZF9zbXBfY29uZmlnICovCi19Ci0KLS8qIFNldCB1cCBhbGwgdGhlIGJhc2ljIHN0dWZmOiByZWFkIHRoZSBTTVAgY29uZmlnIGFuZCBtYWtlIGFsbCB0aGUKLSAqIFNNUCBpbmZvcm1hdGlvbiByZWZsZWN0IG9ubHkgdGhlIGJvb3QgY3B1LiAgQWxsIG90aGVycyB3aWxsIGJlCi0gKiBicm91Z2h0IG9uLWxpbmUgbGF0ZXIuICovCi12b2lkIF9faW5pdCBmaW5kX3NtcF9jb25maWcodm9pZCkKLXsKLQlpbnQgaTsKLQotCWJvb3RfY3B1X2lkID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlwcmludGsoIlZPWUFHRVIgU01QOiBCb290IGNwdSBpcyAlZFxuIiwgYm9vdF9jcHVfaWQpOwotCi0JLyogaW5pdGlhbGl6ZSB0aGUgQ1BVIHN0cnVjdHVyZXMgKG1vdmVkIGZyb20gc21wX2Jvb3RfY3B1cykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1X2lkczsgaSsrKQotCQljcHVfaXJxX2FmZmluaXR5W2ldID0gfjA7Ci0JY3B1X29ubGluZV9tYXAgPSBjcHVtYXNrX29mX2NwdShib290X2NwdV9pZCk7Ci0KLQkvKiBUaGUgYm9vdCBDUFUgbXVzdCBiZSBleHRlbmRlZCAqLwotCXZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgPSAxIDw8IGJvb3RfY3B1X2lkOwotCS8qIGluaXRpYWxseSwgYWxsIG9mIHRoZSBmaXJzdCA4IENQVXMgY2FuIGJvb3QgKi8KLQl2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzID0gMHhmZjsKLQkvKiBzZXQgdXAgZXZlcnl0aGluZyBmb3IganVzdCB0aGlzIENQVSwgd2UgY2FuIGFsdGVyCi0JICogdGhpcyBhcyB3ZSBzdGFydCB0aGUgb3RoZXIgQ1BVcyBsYXRlciAqLwotCS8qIG5vdyBnZXQgdGhlIENQVSBkaXNwb3NpdGlvbiBmcm9tIHRoZSBleHRlbmRlZCBDTU9TICovCi0JY3B1c19hZGRyKHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApWzBdID0KLQkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLKTsKLQljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KLQkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsgMSkgPDwgODsKLQljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KLQkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsKLQkJCQkgICAgICAgMikgPDwgMTY7Ci0JY3B1c19hZGRyKHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApWzBdIHw9Ci0JICAgIHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKFZPWUFHRVJfUFJPQ0VTU09SX1BSRVNFTlRfTUFTSyArCi0JCQkJICAgICAgIDMpIDw8IDI0OwotCWluaXRfY3B1X3Bvc3NpYmxlKCZ2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQlwcmludGsoIlZPWUFHRVIgU01QOiB2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwID0gMHglbHhcbiIsCi0JICAgICAgIGNwdXNfYWRkcih2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwKVswXSk7Ci0JLyogSGVyZSB3ZSBzZXQgdXAgdGhlIFZJQyB0byBlbmFibGUgU01QICovCi0JLyogZW5hYmxlIHRoZSBDUElzIGJ5IHdyaXRpbmcgdGhlIGJhc2UgdmVjdG9yIHRvIHRoZWlyIHJlZ2lzdGVyICovCi0Jb3V0YihWSUNfREVGQVVMVF9DUElfQkFTRSwgVklDX0NQSV9CQVNFX1JFR0lTVEVSKTsKLQlvdXRiKDEsIFZJQ19SRURJUkVDVF9SRUdJU1RFUl8xKTsKLQkvKiBzZXQgdGhlIGNsYWltIHJlZ2lzdGVycyBmb3Igc3RhdGljIHJvdXRpbmcgLS0tIEJvb3QgQ1BVIGdldHMKLQkgKiBhbGwgaW50ZXJydXB0cyB1bnRpbGwgYWxsIG90aGVyIENQVXMgc3RhcnRlZCAqLwotCW91dGIoMHhmZiwgVklDX0NMQUlNX1JFR0lTVEVSXzApOwotCW91dGIoMHhmZiwgVklDX0NMQUlNX1JFR0lTVEVSXzEpOwotCS8qIFNldCB0aGUgUHJpbWFyeSBhbmQgU2Vjb25kYXJ5IE1pY3JvY2hhbm5lbCB2ZWN0b3IKLQkgKiBiYXNlcyB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb3JkaW5hcnkgaW50ZXJydXB0cwotCSAqCi0JICogRklYTUU6IFRoaXMgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgdXNpbmcgc2VwYXJhdGUKLQkgKiB2ZWN0b3JzLiAqLwotCW91dGIoRklSU1RfRVhURVJOQUxfVkVDVE9SLCBWSUNfUFJJTUFSWV9NQ19CQVNFKTsKLQlvdXRiKEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiwgVklDX1NFQ09OREFSWV9NQ19CQVNFKTsKLQotCS8qIEZpbmFsbHkgdGVsbCB0aGUgZmlybXdhcmUgdGhhdCB3ZSdyZSBkcml2aW5nICovCi0Jb3V0YihpbmIoVk9ZQUdFUl9TVVNfSU5fQ09OVFJPTF9QT1JUKSB8IFZPWUFHRVJfSU5fQ09OVFJPTF9GTEFHLAotCSAgICAgVk9ZQUdFUl9TVVNfSU5fQ09OVFJPTF9QT1JUKTsKLQotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gYm9vdF9jcHVfaWQ7Ci0JeDg2X3dyaXRlX3BlcmNwdShjcHVfbnVtYmVyLCBib290X2NwdV9pZCk7Ci19Ci0KLS8qCi0gKglUaGUgYm9vdHN0cmFwIGtlcm5lbCBlbnRyeSBjb2RlIGhhcyBzZXQgdGhlc2UgdXAuIFNhdmUgdGhlbQotICoJZm9yIGEgZ2l2ZW4gQ1BVLCBpZCBpcyBwaHlzaWNhbCAqLwotdm9pZCBfX2luaXQgc21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCkKLXsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoaWQpOwotCi0JKmMgPSBib290X2NwdV9kYXRhOwotCWMtPmNwdV9pbmRleCA9IGlkOwotCi0JaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShjKTsKLX0KLQotLyogUm91dGluZSBpbml0aWFsbHkgY2FsbGVkIHdoZW4gYSBub24tYm9vdCBDUFUgaXMgYnJvdWdodCBvbmxpbmUgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzdGFydF9zZWNvbmRhcnkodm9pZCAqdW51c2VkKQotewotCV9fdTggY3B1aWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWNwdV9pbml0KCk7Ci0KLQkvKiBPSywgd2UncmUgaW4gdGhlIHJvdXRpbmUgKi8KLQlhY2tfQ1BJKFZJQ19DUFVfQk9PVF9DUEkpOwotCi0JLyogc2V0dXAgdGhlIDgyNTkgbWFzdGVyIHNsYXZlIHBhaXIgYmVsb25naW5nIHRvIHRoaXMgQ1BVIC0tLQotCSAqIHdlIHdvbid0IGFjdHVhbGx5IHJlY2VpdmUgYW55IHVudGlsIHRoZSBib290IENQVQotCSAqIHJlbGlucXVpc2hlcyBpdCdzIHN0YXRpYyByb3V0aW5nIG1hc2sgKi8KLQl2aWNfc2V0dXBfcGljKCk7Ci0KLQlxaWNfc2V0dXAoKTsKLQotCWlmIChpc19jcHVfcXVhZCgpICYmICFpc19jcHVfdmljX2Jvb3QoKSkgewotCQkvKiBjbGVhciB0aGUgYm9vdCBDUEkgKi8KLQkJX191OCBkdW1teTsKLQotCQlkdW1teSA9Ci0JCSAgICB2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbY3B1aWRdLT5xaWNfY3BpW1ZJQ19DUFVfQk9PVF9DUEldLmNwaTsKLQkJcHJpbnRrKCJyZWFkIGR1bW15ICVkXG4iLCBkdW1teSk7Ci0JfQotCi0JLyogbG93ZXIgdGhlIG1hc2sgdG8gcmVjZWl2ZSBDUElzICovCi0JdmljX2VuYWJsZV9jcGkoKTsKLQotCVZERUJVRygoIlZPWUFHRVIgU01QOiBDUFUlZCwgc3RhY2sgYXQgYWJvdXQgJXBcbiIsIGNwdWlkLCAmY3B1aWQpKTsKLQotCW5vdGlmeV9jcHVfc3RhcnRpbmcoY3B1aWQpOwotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkvKiBnZXQgb3VyIGJvZ29taXBzICovCi0JY2FsaWJyYXRlX2RlbGF5KCk7Ci0KLQkvKiBzYXZlIG91ciBwcm9jZXNzb3IgcGFyYW1ldGVycyAqLwotCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHVpZCk7Ci0KLQkvKiBpZiB3ZSdyZSBhIHF1YWQsIHdlIG1heSBuZWVkIHRvIGJvb3RzdHJhcCBvdGhlciBDUFVzICovCi0JZG9fcXVhZF9ib290c3RyYXAoKTsKLQotCS8qIEZJWE1FOiB0aGlzIGlzIHJhdGhlciBhIHBvb3IgaGFjayB0byBwcmV2ZW50IHRoZSBDUFUKLQkgKiBhY3RpdmF0aW5nIHNvZnRpcnFzIHdoaWxlIGl0J3Mgc3VwcG9zZWQgdG8gYmUgd2FpdGluZyBmb3IKLQkgKiBwZXJtaXNzaW9uIHRvIHByb2NlZWQuICBXaXRob3V0IHRoaXMsIHRoZSBuZXcgcGVyIENQVSBzdHVmZgotCSAqIGluIHRoZSBzb2Z0aXJxcyB3aWxsIGZhaWwgKi8KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWNwdV9zZXQoY3B1aWQsIGNwdV9jYWxsaW5fbWFwKTsKLQotCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGRvbmUgKi8KLQljcHVfYm9vdGVkX21hcCA9IDE7Ci0KLQl3aGlsZSAoIWNwdV9pc3NldChjcHVpZCwgc21wX2NvbW1lbmNlZF9tYXNrKSkKLQkJcmVwX25vcCgpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCWxvY2FsX2ZsdXNoX3RsYigpOwotCi0JY3B1X3NldChjcHVpZCwgY3B1X29ubGluZV9tYXApOwotCXdtYigpOwotCWNwdV9pZGxlKCk7Ci19Ci0KLS8qIFJvdXRpbmUgdG8ga2ljayBzdGFydCB0aGUgZ2l2ZW4gQ1BVIGFuZCB3YWl0IGZvciBpdCB0byByZXBvcnQgcmVhZHkKLSAqIChvciB0aW1lb3V0IGluIHN0YXJ0dXApLiAgV2hlbiB0aGlzIHJvdXRpbmUgcmV0dXJucywgdGhlIHJlcXVlc3RlZAotICogQ1BVIGlzIGVpdGhlciBmdWxseSBydW5uaW5nIGFuZCBjb25maWd1cmVkIG9yIGtub3duIHRvIGJlIGRlYWQuCi0gKgotICogV2UgY2FsbCB0aGlzIHJvdXRpbmUgc2VxdWVudGlhbGx5IDEgQ1BVIGF0IGEgdGltZSwgc28gbm8gbmVlZCBmb3IKLSAqIGxvY2tpbmcgKi8KLQotc3RhdGljIHZvaWQgX19pbml0IGRvX2Jvb3RfY3B1KF9fdTggY3B1KQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKLQlpbnQgdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBxdWFkX2Jvb3QgPSAoMSA8PCBjcHUpICYgdm95YWdlcl9xdWFkX3Byb2Nlc3NvcnMKLQkgICAgJiB+KHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMKLQkJJiB2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzKTsKLQotCS8qIFRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgQ1BJIElEVCBnYXRlIChpbiByZWFsIG1vZGUpIHdoaWNoCi0JICogd2UncmUgaGlqYWNraW5nIHRvIGJvb3QgdGhlIENQVSAqLwotCXVuaW9uIElEVEZvcm1hdCB7Ci0JCXN0cnVjdCBzZWcgewotCQkJX191MTYgT2Zmc2V0OwotCQkJX191MTYgU2VnbWVudDsKLQkJfSBpZHQ7Ci0JCV9fdTMyIHZhbDsKLQl9IGhpamFja19zb3VyY2U7Ci0KLQlfX3UzMiAqaGlqYWNrX3ZlY3RvcjsKLQlfX3UzMiBzdGFydF9waHlzX2FkZHJlc3MgPSBzZXR1cF90cmFtcG9saW5lKCk7Ci0KLQkvKiBUaGVyZSdzIGEgY2xldmVyIHRyaWNrIHRvIHRoaXM6IFRoZSBsaW51eCB0cmFtcG9saW5lIGlzCi0JICogY29tcGlsZWQgdG8gYmVnaW4gYXQgYWJzb2x1dGUgbG9jYXRpb24gemVybywgc28gbWFrZSB0aGUKLQkgKiBhZGRyZXNzIHplcm8gYnV0IGhhdmUgdGhlIGRhdGEgc2VnbWVudCBzZWxlY3RvciBjb21wZW5zYXRlCi0JICogZm9yIHRoZSBhY3R1YWwgYWRkcmVzcyAqLwotCWhpamFja19zb3VyY2UuaWR0Lk9mZnNldCA9IHN0YXJ0X3BoeXNfYWRkcmVzcyAmIDB4MDAwRjsKLQloaWphY2tfc291cmNlLmlkdC5TZWdtZW50ID0gKHN0YXJ0X3BoeXNfYWRkcmVzcyA+PiA0KSAmIDB4RkZGRjsKLQotCWNwdWNvdW50Kys7Ci0JYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goMSk7Ci0KLQlpZGxlID0gZm9ya19pZGxlKGNwdSk7Ci0JaWYgKElTX0VSUihpZGxlKSkKLQkJcGFuaWMoImZhaWxlZCBmb3JrIGZvciBDUFUlZCIsIGNwdSk7Ci0JaWRsZS0+dGhyZWFkLmlwID0gKHVuc2lnbmVkIGxvbmcpc3RhcnRfc2Vjb25kYXJ5OwotCS8qIGluaXRfdGFza3MgKGluIHNjaGVkLmMpIGlzIGluZGV4ZWQgbG9naWNhbGx5ICovCi0Jc3RhY2tfc3RhcnQuc3AgPSAodm9pZCAqKWlkbGUtPnRocmVhZC5zcDsKLQotCWluaXRfZ2R0KGNwdSk7Ci0JcGVyX2NwdShjdXJyZW50X3Rhc2ssIGNwdSkgPSBpZGxlOwotCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKLQlpcnFfY3R4X2luaXQoY3B1KTsKLQotCS8qIE5vdGU6IERvbid0IG1vZGlmeSBpbml0aWFsIHNzIG92ZXJyaWRlICovCi0JVkRFQlVHKCgiVk9ZQUdFUiBTTVA6IEJvb3RpbmcgQ1BVJWQgYXQgMHglbHhbJXg6JXhdLCBzdGFjayAlcFxuIiwgY3B1LAotCQkodW5zaWduZWQgbG9uZyloaWphY2tfc291cmNlLnZhbCwgaGlqYWNrX3NvdXJjZS5pZHQuU2VnbWVudCwKLQkJaGlqYWNrX3NvdXJjZS5pZHQuT2Zmc2V0LCBzdGFja19zdGFydC5zcCkpOwotCi0JLyogaW5pdCBsb3dtZW0gaWRlbnRpdHkgbWFwcGluZyAqLwotCWNsb25lX3BnZF9yYW5nZShzd2FwcGVyX3BnX2Rpciwgc3dhcHBlcl9wZ19kaXIgKyBLRVJORUxfUEdEX0JPVU5EQVJZLAotCQkJbWluX3QodW5zaWduZWQgbG9uZywgS0VSTkVMX1BHRF9QVFJTLCBLRVJORUxfUEdEX0JPVU5EQVJZKSk7Ci0JZmx1c2hfdGxiX2FsbCgpOwotCi0JaWYgKHF1YWRfYm9vdCkgewotCQlwcmludGsoIkNQVSAlZDogbm9uIGV4dGVuZGVkIFF1YWQgYm9vdFxuIiwgY3B1KTsKLQkJaGlqYWNrX3ZlY3RvciA9Ci0JCSAgICAoX191MzIgKikKLQkJICAgIHBoeXNfdG9fdmlydCgoVklDX0NQVV9CT09UX0NQSSArIFFJQ19ERUZBVUxUX0NQSV9CQVNFKSAqIDQpOwotCQkqaGlqYWNrX3ZlY3RvciA9IGhpamFja19zb3VyY2UudmFsOwotCX0gZWxzZSB7Ci0JCXByaW50aygiQ1BVJWQ6IGV4dGVuZGVkIFZJQyBib290XG4iLCBjcHUpOwotCQloaWphY2tfdmVjdG9yID0KLQkJICAgIChfX3UzMiAqKQotCQkgICAgcGh5c190b192aXJ0KChWSUNfQ1BVX0JPT1RfQ1BJICsgVklDX0RFRkFVTFRfQ1BJX0JBU0UpICogNCk7Ci0JCSpoaWphY2tfdmVjdG9yID0gaGlqYWNrX3NvdXJjZS52YWw7Ci0JCS8qIFZJQyBlcnJhdGEsIG1heSBhbHNvIHJlY2VpdmUgaW50ZXJydXB0IGF0IHRoaXMgYWRkcmVzcyAqLwotCQloaWphY2tfdmVjdG9yID0KLQkJICAgIChfX3UzMiAqKQotCQkgICAgcGh5c190b192aXJ0KChWSUNfQ1BVX0JPT1RfRVJSQVRBX0NQSSArCi0JCQkJICBWSUNfREVGQVVMVF9DUElfQkFTRSkgKiA0KTsKLQkJKmhpamFja192ZWN0b3IgPSBoaWphY2tfc291cmNlLnZhbDsKLQl9Ci0JLyogQWxsIG5vbi1ib290IENQVXMgc3RhcnQgd2l0aCBpbnRlcnJ1cHRzIGZ1bGx5IG1hc2tlZC4gIE5lZWQKLQkgKiB0byBsb3dlciB0aGUgbWFzayBvZiB0aGUgQ1BJIHdlJ3JlIGFib3V0IHRvIHNlbmQuICBXZSBkbwotCSAqIHRoaXMgaW4gdGhlIFZJQyBieSBtYXNxdWVyYWRpbmcgYXMgdGhlIHByb2Nlc3NvciB3ZSdyZQotCSAqIGFib3V0IHRvIGJvb3QgYW5kIGxvd2VyaW5nIGl0cyBpbnRlcnJ1cHQgbWFzayAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAocXVhZF9ib290KSB7Ci0JCXNlbmRfb25lX1FJQ19DUEkoY3B1LCBWSUNfQ1BVX0JPT1RfQ1BJKTsKLQl9IGVsc2UgewotCQlvdXRiKFZJQ19DUFVfTUFTUVVFUkFERV9FTkFCTEUgfCBjcHUsIFZJQ19QUk9DRVNTT1JfSUQpOwotCQkvKiBoZXJlIHdlJ3JlIGFsdGVyaW5nIHJlZ2lzdGVycyBiZWxvbmdpbmcgdG8gYGNwdScgKi8KLQotCQlvdXRiKFZJQ19CT09UX0lOVEVSUlVQVF9NQVNLLCAweDIxKTsKLQkJLyogbm93IGdvIGJhY2sgdG8gb3VyIG9yaWdpbmFsIGlkZW50aXR5ICovCi0JCW91dGIoYm9vdF9jcHVfaWQsIFZJQ19QUk9DRVNTT1JfSUQpOwotCi0JCS8qIGFuZCBib290IHRoZSBDUFUgKi8KLQotCQlzZW5kX0NQSSgoMSA8PCBjcHUpLCBWSUNfQ1BVX0JPT1RfQ1BJKTsKLQl9Ci0JY3B1X2Jvb3RlZF9tYXAgPSAwOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIG5vdyB3YWl0IGZvciBpdCB0byBiZWNvbWUgcmVhZHkgKG9yIHRpbWVvdXQpICovCi0JZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDUwMDAwOyB0aW1lb3V0KyspIHsKLQkJaWYgKGNwdV9ib290ZWRfbWFwKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMDApOwotCX0KLQkvKiByZXNldCB0aGUgcGFnZSB0YWJsZSAqLwotCXphcF9sb3dfbWFwcGluZ3MoKTsKLQotCWlmIChjcHVfYm9vdGVkX21hcCkgewotCQlWREVCVUcoKCJDUFUlZDogQm9vdGVkIHN1Y2Nlc3NmdWxseSwgYmFjayBpbiBDUFUgJWRcbiIsCi0JCQljcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCi0JCXByaW50aygiQ1BVJWQ6ICIsIGNwdSk7Ci0JCXByaW50X2NwdV9pbmZvKCZjcHVfZGF0YShjcHUpKTsKLQkJd21iKCk7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfY2FsbG91dF9tYXApOwotCQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKLQl9IGVsc2UgewotCQlwcmludGsoIkNQVSVkIEZBSUxFRCBUTyBCT09UOiAiLCBjcHUpOwotCQlpZiAoKgotCQkgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcGh5c190b192aXJ0KHN0YXJ0X3BoeXNfYWRkcmVzcykpCi0JCSAgICA9PSAweEE1KQotCQkJcHJpbnRrKCJTdHVjay5cbiIpOwotCQllbHNlCi0JCQlwcmludGsoIk5vdCByZXNwb25kaW5nLlxuIik7Ci0KLQkJY3B1Y291bnQtLTsKLQl9Ci19Ci0KLXZvaWQgX19pbml0IHNtcF9ib290X2NwdXModm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIENBVCBCVVMgaW5pdGlhbGlzYXRpb24gbXVzdCBiZSBkb25lIGFmdGVyIHRoZSBtZW1vcnkgKi8KLQkvKiBGSVhNRTogVGhlIEw0IGhhcyBhIGNhdGJ1cyB0b28sIGl0IGp1c3QgbmVlZHMgdG8gYmUKLQkgKiBhY2Nlc3NlZCBpbiBhIHRvdGFsbHkgZGlmZmVyZW50IHdheSAqLwotCWlmICh2b3lhZ2VyX2xldmVsID09IDUpIHsKLQkJdm95YWdlcl9jYXRfaW5pdCgpOwotCi0JCS8qIG5vdyB0aGF0IHRoZSBjYXQgaGFzIHByb2JlZCB0aGUgVm95YWdlciBTeXN0ZW0gQnVzLCBzYW5pdHkKLQkJICogY2hlY2sgdGhlIGNwdSBtYXAgKi8KLQkJaWYgKCgodm95YWdlcl9xdWFkX3Byb2Nlc3NvcnMgfCB2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzKQotCQkgICAgICYgY3B1c19hZGRyKHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApWzBdKSAhPQotCQkgICAgY3B1c19hZGRyKHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApWzBdKSB7Ci0JCQkvKiBzaG91bGQgcGFuaWMgKi8KLQkJCXByaW50aygiXG5cbioqKldBUk5JTkcqKiogIgotCQkJICAgICAgICJTYW5pdHkgY2hlY2sgb2YgQ1BVIHByZXNlbnQgbWFwIEZBSUxFRFxuIik7Ci0JCX0KLQl9IGVsc2UgaWYgKHZveWFnZXJfbGV2ZWwgPT0gNCkKLQkJdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyA9Ci0JCSAgICBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF07Ci0KLQkvKiB0aGlzIHNldHMgdXAgdGhlIGlkbGUgdGFzayB0byBydW4gb24gdGhlIGN1cnJlbnQgY3B1ICovCi0Jdm95YWdlcl9leHRlbmRlZF9jcHVzID0gMTsKLQkvKiBSZW1vdmUgdGhlIGdsb2JhbF9pcnFfaG9sZGVyIHNldHRpbmcsIGl0IHRyaWdnZXJzIGEgQlVHKCkgb24KLQkgKiBzY2hlZHVsZSBhdCB0aGUgbW9tZW50ICovCi0JLy9nbG9iYWxfaXJxX2hvbGRlciA9IGJvb3RfY3B1X2lkOwotCi0JLyogRklYTUU6IE5lZWQgdG8gZG8gc29tZXRoaW5nIGFib3V0IHRoaXMgYnV0IGN1cnJlbnRseSBvbmx5IHdvcmtzCi0JICogb24gQ1BVcyB3aXRoIGEgdHNjIHdoaWNoIG5vbmUgb2YgbWluZSBoYXZlLgotCSBzbXBfdHVuZV9zY2hlZHVsaW5nKCk7Ci0JICovCi0Jc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKLQkvKiBzZXR1cCB0aGUganVtcCB2ZWN0b3IgKi8KLQlpbml0aWFsX2NvZGUgPSAodW5zaWduZWQgbG9uZylpbml0aWFsaXplX3NlY29uZGFyeTsKLQlwcmludGsoIkNQVSVkOiAiLCBib290X2NwdV9pZCk7Ci0JcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGJvb3RfY3B1X2lkKSk7Ci0KLQlpZiAoaXNfY3B1X3F1YWQoKSkgewotCQkvKiBib290aW5nIG9uIGEgUXVhZCBDUFUgKi8KLQkJcHJpbnRrKCJWT1lBR0VSIFNNUDogQm9vdCBDUFUgaXMgUXVhZFxuIik7Ci0JCXFpY19zZXR1cCgpOwotCQlkb19xdWFkX2Jvb3RzdHJhcCgpOwotCX0KLQotCS8qIGVuYWJsZSBvdXIgb3duIENQSXMgKi8KLQl2aWNfZW5hYmxlX2NwaSgpOwotCi0JY3B1X3NldChib290X2NwdV9pZCwgY3B1X29ubGluZV9tYXApOwotCWNwdV9zZXQoYm9vdF9jcHVfaWQsIGNwdV9jYWxsb3V0X21hcCk7Ci0KLQkvKiBsb29wIG92ZXIgYWxsIHRoZSBleHRlbmRlZCBWSUMgQ1BVcyBhbmQgYm9vdCB0aGVtLiAgVGhlCi0JICogUXVhZCBDUFVzIG11c3QgYmUgYm9vdHN0cmFwcGVkIGJ5IHRoZWlyIGV4dGVuZGVkIFZJQyBjcHUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1X2lkczsgaSsrKSB7Ci0JCWlmIChpID09IGJvb3RfY3B1X2lkIHx8ICFjcHVfaXNzZXQoaSwgdm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcCkpCi0JCQljb250aW51ZTsKLQkJZG9fYm9vdF9jcHUoaSk7Ci0JCS8qIFRoaXMgdWRlbGF5IHNlZW1zIHRvIGJlIG5lZWRlZCBmb3IgdGhlIFF1YWQgYm9vdHMKLQkJICogZG9uJ3QgcmVtb3ZlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyAqLwotCQl1ZGVsYXkoMTAwMCk7Ci0JfQotCS8qIHdlIGNvdWxkIGNvbXB1dGUgdGhlIHRvdGFsIGJvZ29taXBzIGhlcmUsIGJ1dCB3aHkgYm90aGVyPywKLQkgKiBDb2RlIGFkZGVkIGZyb20gc21wYm9vdC5jICovCi0JewotCQl1bnNpZ25lZCBsb25nIGJvZ29zdW0gPSAwOwotCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKLQkJCWJvZ29zdW0gKz0gY3B1X2RhdGEoaSkubG9vcHNfcGVyX2ppZmZ5OwotCQlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBvZiAlZCBwcm9jZXNzb3JzIGFjdGl2YXRlZCAiCi0JCSAgICAgICAiKCVsdS4lMDJsdSBCb2dvTUlQUykuXG4iLAotCQkgICAgICAgY3B1Y291bnQgKyAxLCBib2dvc3VtIC8gKDUwMDAwMCAvIEhaKSwKLQkJICAgICAgIChib2dvc3VtIC8gKDUwMDAgLyBIWikpICUgMTAwKTsKLQl9Ci0Jdm95YWdlcl9leHRlbmRlZF9jcHVzID0gaHdlaWdodDMyKHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMpOwotCXByaW50aygiVk9ZQUdFUjogRXh0ZW5kZWQgKGludGVycnVwdCBoYW5kbGluZyBDUFVzKTogIgotCSAgICAgICAiJWQsIG5vbi1leHRlbmRlZDogJWRcbiIsIHZveWFnZXJfZXh0ZW5kZWRfY3B1cywKLQkgICAgICAgbnVtX2Jvb3RpbmdfY3B1cygpIC0gdm95YWdlcl9leHRlbmRlZF9jcHVzKTsKLQkvKiB0aGF0J3MgaXQsIHN3aXRjaCB0byBzeW1tZXRyaWMgbW9kZSAqLwotCW91dGIoMCwgVklDX1BSSU9SSVRZX1JFR0lTVEVSKTsKLQlvdXRiKDAsIFZJQ19DTEFJTV9SRUdJU1RFUl8wKTsKLQlvdXRiKDAsIFZJQ19DTEFJTV9SRUdJU1RFUl8xKTsKLQotCVZERUJVRygoIlZPWUFHRVIgU01QOiBCb290ZWQgd2l0aCAlZCBDUFVzXG4iLCBudW1fYm9vdGluZ19jcHVzKCkpKTsKLX0KLQotLyogUmVsb2FkIHRoZSBzZWNvbmRhcnkgQ1BVcyB0YXNrIHN0cnVjdHVyZSAodGhpcyBmdW5jdGlvbiBkb2VzIG5vdAotICogcmV0dXJuICkgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKQotewotI2lmIDAKLQkvLyBBQyBrZXJuZWxzIG9ubHkKLQlzZXRfY3VycmVudChoYXJkX2dldF9jdXJyZW50KCkpOwotI2VuZGlmCi0KLQkvKgotCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gbG9hZCB0aGUgZnVsbCBUU1MsCi0JICogYmFzaWNhbGx5IGp1c3QgdGhlIHN0YWNrIHBvaW50ZXIgYW5kIHRoZSBlaXAuCi0JICovCi0KLQlhc20gdm9sYXRpbGUgKCJtb3ZsICUwLCUlZXNwXG5cdCIKLQkJICAgICAgImptcCAqJTEiOjoiciIgKGN1cnJlbnQtPnRocmVhZC5zcCksCi0JCSAgICAgICJyIihjdXJyZW50LT50aHJlYWQuaXApKTsKLX0KLQotLyogaGFuZGxlIGEgVm95YWdlciBTWVNfSU5UIC0tIElmIHdlIGRvbid0LCB0aGUgYmFzZSBib2FyZCB3aWxsCi0gKiBwYW5pYyB0aGUgc3lzdGVtLgotICoKLSAqIFN5c3RlbSBpbnRlcnJ1cHRzIG9jY3VyIGJlY2F1c2Ugc29tZSBwcm9ibGVtIHdhcyBkZXRlY3RlZCBvbiB0aGUKLSAqIHZhcmlvdXMgYnVzc2VzLiAgVG8gZmluZCBvdXQgd2hhdCB5b3UgaGF2ZSB0byBwcm9iZSBhbGwgdGhlCi0gKiBoYXJkd2FyZSB2aWEgdGhlIENBVCBidXMuICBGSVhNRTogQXQgdGhlIG1vbWVudCB3ZSBkbyBub3RoaW5nLiAqLwotdm9pZCBzbXBfdmljX3N5c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JYWNrX0NQSShWSUNfU1lTX0lOVCk7Ci0JcHJpbnRrKCJWb3lhZ2VyIFNZU1RFTSBJTlRFUlJVUFRcbiIpOwotfQotCi0vKiBIYW5kbGUgYSB2b3lhZ2VyIENNTl9JTlQ7IFRoZXNlIGludGVycnVwdHMgb2NjdXIgZWl0aGVyIGJlY2F1c2Ugb2YKLSAqIGEgc3lzdGVtIHN0YXR1cyBjaGFuZ2Ugb3IgYmVjYXVzZSBhIHNpbmdsZSBiaXQgbWVtb3J5IGVycm9yCi0gKiBvY2N1cnJlZC4gIEZJWE1FOiBBdCB0aGUgbW9tZW50LCBpZ25vcmUgYWxsIHRoaXMuICovCi12b2lkIHNtcF92aWNfY21uX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdGF0aWMgX191OCBpbl9jbW5faW50ID0gMDsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNtbl9pbnRfbG9jayk7Ci0KLQkvKiBjb21tb24gaW50cyBhcmUgYnJvYWRjYXN0LCBzbyBtYWtlIHN1cmUgd2Ugb25seSBkbyB0aGlzIG9uY2UgKi8KLQlfcmF3X3NwaW5fbG9jaygmY21uX2ludF9sb2NrKTsKLQlpZiAoaW5fY21uX2ludCkKLQkJZ290byB1bmxvY2tfZW5kOwotCi0JaW5fY21uX2ludCsrOwotCV9yYXdfc3Bpbl91bmxvY2soJmNtbl9pbnRfbG9jayk7Ci0KLQlWREVCVUcoKCJWb3lhZ2VyIENPTU1PTiBJTlRFUlJVUFRcbiIpKTsKLQotCWlmICh2b3lhZ2VyX2xldmVsID09IDUpCi0JCXZveWFnZXJfY2F0X2RvX2NvbW1vbl9pbnRlcnJ1cHQoKTsKLQotCV9yYXdfc3Bpbl9sb2NrKCZjbW5faW50X2xvY2spOwotCWluX2Ntbl9pbnQgPSAwOwotICAgICAgdW5sb2NrX2VuZDoKLQlfcmF3X3NwaW5fdW5sb2NrKCZjbW5faW50X2xvY2spOwotCWFja19DUEkoVklDX0NNTl9JTlQpOwotfQotCi0vKgotICogUmVzY2hlZHVsZSBjYWxsIGJhY2suIE5vdGhpbmcgdG8gZG8sIGFsbCB0aGUgd29yayBpcyBkb25lCi0gKiBhdXRvbWF0aWNhbGx5IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlIGludGVycnVwdC4gICovCi1zdGF0aWMgdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQodm9pZCkKLXsKLQkvKiBkbyBub3RoaW5nICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpmbHVzaF9tbTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0bGJzdGF0ZV9sb2NrKTsKLQotLyoKLSAqIFdlIGNhbm5vdCBjYWxsIG1tZHJvcCgpIGJlY2F1c2Ugd2UgYXJlIGluIGludGVycnVwdCBjb250ZXh0LAotICogaW5zdGVhZCB1cGRhdGUgbW0tPmNwdV92bV9tYXNrLgotICoKLSAqIFdlIG5lZWQgdG8gcmVsb2FkICVjcjMgc2luY2UgdGhlIHBhZ2UgdGFibGVzIG1heSBiZSBnb2luZwotICogYXdheSBmcm9tIHVuZGVyIHVzLi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHZveWFnZXJfbGVhdmVfbW0odW5zaWduZWQgbG9uZyBjcHUpCi17Ci0JaWYgKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID09IFRMQlNUQVRFX09LKQotCQlCVUcoKTsKLQljcHVfY2xlYXIoY3B1LCBwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5hY3RpdmVfbW0tPmNwdV92bV9tYXNrKTsKLQlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7Ci19Ci0KLS8qCi0gKiBJbnZhbGlkYXRlIGNhbGwtYmFjawotICovCi1zdGF0aWMgdm9pZCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQodm9pZCkKLXsKLQlfX3U4IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmICghdGVzdF9iaXQoY3B1LCAmc21wX2ludmFsaWRhdGVfbmVlZGVkKSkKLQkJcmV0dXJuOwotCS8qIFRoaXMgd2lsbCBmbG9vZCBtZXNzYWdlcy4gIERvbid0IHVuY29tbWVudCB1bmxlc3MgeW91IHNlZQotCSAqIFByb2JsZW1zIHdpdGggY3Jvc3MgY3B1IGludmFsaWRhdGlvbgotCSBWREVCVUcoKCJWT1lBR0VSIFNNUDogQ1BVJWQgcmVjZWl2ZWQgSU5WQUxJREFURV9DUElcbiIsCi0JIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCSAqLwotCi0JaWYgKGZsdXNoX21tID09IHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbSkgewotCQlpZiAocGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPT0gVExCU1RBVEVfT0spIHsKLQkJCWlmIChmbHVzaF92YSA9PSBUTEJfRkxVU0hfQUxMKQotCQkJCWxvY2FsX2ZsdXNoX3RsYigpOwotCQkJZWxzZQotCQkJCV9fZmx1c2hfdGxiX29uZShmbHVzaF92YSk7Ci0JCX0gZWxzZQotCQkJdm95YWdlcl9sZWF2ZV9tbShjcHUpOwotCX0KLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQljbGVhcl9iaXQoY3B1LCAmc21wX2ludmFsaWRhdGVfbmVlZGVkKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotfQotCi0vKiBBbGwgdGhlIG5ldyBmbHVzaCBvcGVyYXRpb25zIGZvciAyLjQgKi8KLQotLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aXRoIGEgcGh5c2ljYWwgY3B1IG1hc2sgKi8KLXN0YXRpYyB2b2lkCi12b3lhZ2VyX2ZsdXNoX3RsYl9vdGhlcnModW5zaWduZWQgbG9uZyBjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCSB1bnNpZ25lZCBsb25nIHZhKQotewotCWludCBzdHVjayA9IDUwMDAwOwotCi0JaWYgKCFjcHVtYXNrKQotCQlCVUcoKTsKLQlpZiAoKGNwdW1hc2sgJiBjcHVzX2FkZHIoY3B1X29ubGluZV9tYXApWzBdKSAhPSBjcHVtYXNrKQotCQlCVUcoKTsKLQlpZiAoY3B1bWFzayAmICgxIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCUJVRygpOwotCWlmICghbW0pCi0JCUJVRygpOwotCi0Jc3Bpbl9sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKLQotCWZsdXNoX21tID0gbW07Ci0JZmx1c2hfdmEgPSB2YTsKLQlhdG9taWNfc2V0X21hc2soY3B1bWFzaywgJnNtcF9pbnZhbGlkYXRlX25lZWRlZCk7Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIENQSSBvbmx5IHRvCi0JICogQ1BVcyBhZmZlY3RlZC4KLQkgKi8KLQlzZW5kX0NQSShjcHVtYXNrLCBWSUNfSU5WQUxJREFURV9DUEkpOwotCi0Jd2hpbGUgKHNtcF9pbnZhbGlkYXRlX25lZWRlZCkgewotCQltYigpOwotCQlpZiAoLS1zdHVjayA9PSAwKSB7Ci0JCQlwcmludGsoIioqKldBUk5JTkcqKiogU3R1Y2sgZG9pbmcgaW52YWxpZGF0ZSBDUEkgIgotCQkJICAgICAgICIoQ1BVJWQpXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBVbmNvbW1lbnQgb25seSB0byBkZWJ1ZyBpbnZhbGlkYXRpb24gcHJvYmxlbXMKLQkgICBWREVCVUcoKCJWT1lBR0VSIFNNUDogQ29tcGxldGVkIGludmFsaWRhdGUgQ1BJIChDUFUlZClcbiIsIGNwdSkpOwotCSAqLwotCi0JZmx1c2hfbW0gPSBOVUxMOwotCWZsdXNoX3ZhID0gMDsKLQlzcGluX3VubG9jaygmdGxic3RhdGVfbG9jayk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0JdW5zaWduZWQgbG9uZyBjcHVfbWFzazsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCi0JY3B1X21hc2sgPSBjcHVzX2FkZHIobW0tPmNwdV92bV9tYXNrKVswXSAmIH4oMSA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWxvY2FsX2ZsdXNoX3RsYigpOwotCWlmIChjcHVfbWFzaykKLQkJdm95YWdlcl9mbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQl1bnNpZ25lZCBsb25nIGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQljcHVfbWFzayA9IGNwdXNfYWRkcihtbS0+Y3B1X3ZtX21hc2spWzBdICYgfigxIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7Ci0JCWlmIChjdXJyZW50LT5tbSkKLQkJCWxvY2FsX2ZsdXNoX3RsYigpOwotCQllbHNlCi0JCQl2b3lhZ2VyX2xlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCWlmIChjcHVfbWFzaykKLQkJdm95YWdlcl9mbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZhKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQl1bnNpZ25lZCBsb25nIGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQljcHVfbWFzayA9IGNwdXNfYWRkcihtbS0+Y3B1X3ZtX21hc2spWzBdICYgfigxIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgewotCQlpZiAoY3VycmVudC0+bW0pCi0JCQlfX2ZsdXNoX3RsYl9vbmUodmEpOwotCQllbHNlCi0JCQl2b3lhZ2VyX2xlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCi0JaWYgKGNwdV9tYXNrKQotCQl2b3lhZ2VyX2ZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCB2YSk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1FWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKLQotLyogZW5hYmxlIHRoZSByZXF1ZXN0ZWQgSVJRcyAqLwotc3RhdGljIHZvaWQgc21wX2VuYWJsZV9pcnFfaW50ZXJydXB0KHZvaWQpCi17Ci0JX191OCBpcnE7Ci0JX191OCBjcHUgPSBnZXRfY3B1KCk7Ci0KLQlWREVCVUcoKCJWT1lBR0VSIFNNUDogQ1BVJWQgZW5hYmxpbmcgaXJxIG1hc2sgMHgleFxuIiwgY3B1LAotCQl2aWNfaXJxX2VuYWJsZV9tYXNrW2NwdV0pKTsKLQotCXNwaW5fbG9jaygmdmljX2lycV9sb2NrKTsKLQlmb3IgKGlycSA9IDA7IGlycSA8IDE2OyBpcnErKykgewotCQlpZiAodmljX2lycV9lbmFibGVfbWFza1tjcHVdICYgKDEgPDwgaXJxKSkKLQkJCWVuYWJsZV9sb2NhbF92aWNfaXJxKGlycSk7Ci0JfQotCXZpY19pcnFfZW5hYmxlX21hc2tbY3B1XSA9IDA7Ci0Jc3Bpbl91bmxvY2soJnZpY19pcnFfbG9jayk7Ci0KLQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKLX0KLQotLyoKLSAqCUNQVSBoYWx0IGNhbGwtYmFjawotICovCi1zdGF0aWMgdm9pZCBzbXBfc3RvcF9jcHVfZnVuY3Rpb24odm9pZCAqZHVtbXkpCi17Ci0JVkRFQlVHKCgiVk9ZQUdFUiBTTVA6IENQVSVkIGlzIFNUT1BQSU5HXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlmb3IgKDs7KQotCQloYWx0KCk7Ci19Ci0KLS8qIGV4ZWN1dGUgYSB0aHJlYWQgb24gYSBuZXcgQ1BVLiAgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBtdXN0IGJlCi0gKiBwcmV2aW91c2x5IHNldCB1cC4gIFRoaXMgaXMgdXNlZCB0byBzY2hlZHVsZSBhIGZ1bmN0aW9uIGZvcgotICogZXhlY3V0aW9uIG9uIGFsbCBDUFVzIC0gc2V0IHVwIHRoZSBmdW5jdGlvbiB0aGVuIGJyb2FkY2FzdCBhCi0gKiBmdW5jdGlvbl9pbnRlcnJ1cHQgQ1BJIHRvIGNvbWUgaGVyZSBvbiBlYWNoIENQVSAqLwotc3RhdGljIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCi17Ci0JaXJxX2VudGVyKCk7Ci0JZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKLQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfY2FsbF9jb3VudCsrOwotCWlycV9leGl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpcnFfZW50ZXIoKTsKLQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKLQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfY2FsbF9jb3VudCsrOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qIFNvcnJ5IGFib3V0IHRoZSBuYW1lLiAgSW4gYW4gQVBJQyBiYXNlZCBzeXN0ZW0sIHRoZSBBUElDcwotICogdGhlbXNlbHZlcyBhcmUgcHJvZ3JhbW1lZCB0byBzZW5kIGEgdGltZXIgaW50ZXJydXB0LiAgVGhpcyBpcyB1c2VkCi0gKiBieSBsaW51eCB0byByZXNjaGVkdWxlIHRoZSBwcm9jZXNzb3IuICBWb3lhZ2VyIGRvZXNuJ3QgaGF2ZSB0aGlzLAotICogc28gd2UgdXNlIHRoZSBzeXN0ZW0gY2xvY2sgdG8gaW50ZXJydXB0IG9uZSBwcm9jZXNzb3IsIHdoaWNoIGluCi0gKiB0dXJuLCBicm9hZGNhc3RzIGEgdGltZXIgQ1BJIHRvIGFsbCB0aGUgb3RoZXJzIC0tLSB3ZSByZWNlaXZlIHRoYXQKLSAqIENQSSBoZXJlLiAgV2UgZG9uJ3QgdXNlIHRoaXMgYWN0dWFsbHkgZm9yIGNvdW50aW5nIHNvIGxvc2luZwotICogdGlja3MgZG9lc24ndCBtYXR0ZXIKLSAqCi0gKiBGSVhNRTogRm9yIHRob3NlIENQVXMgd2hpY2ggYWN0dWFsbHkgaGF2ZSBhIGxvY2FsIEFQSUMsIHdlIGNvdWxkCi0gKiB0cnkgdG8gdXNlIGl0IHRvIHRyaWdnZXIgdGhpcyBpbnRlcnJ1cHQgaW5zdGVhZCBvZiBoYXZpbmcgdG8KLSAqIGJyb2FkY2FzdCB0aGUgdGltZXIgdGljay4gIFVuZm9ydHVuYXRlbHksIGFsbCBteSBwZW50aXVtIERZQURzIGhhdmUKLSAqIG5vIGxvY2FsIEFQSUMsIHNvIEkgY2FuJ3QgZG8gdGhpcwotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgcGxhY2Vob2xkZXIgYW5kIGlzIHVudXNlZCBpbiB0aGUgY29kZSAqLwotdm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCXdyYXBwZXJfc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCgpOwotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLS8qIEFsbCBvZiB0aGUgUVVBRCBpbnRlcnJ1cHQgR0FURVMgKi8KLXZvaWQgc21wX3FpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCWFja19RSUNfQ1BJKFFJQ19USU1FUl9DUEkpOwotCXdyYXBwZXJfc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCgpOwotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLXZvaWQgc21wX3FpY19pbnZhbGlkYXRlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlhY2tfUUlDX0NQSShRSUNfSU5WQUxJREFURV9DUEkpOwotCXNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCgpOwotfQotCi12b2lkIHNtcF9xaWNfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JYWNrX1FJQ19DUEkoUUlDX1JFU0NIRURVTEVfQ1BJKTsKLQlzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoKTsKLX0KLQotdm9pZCBzbXBfcWljX2VuYWJsZV9pcnFfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWFja19RSUNfQ1BJKFFJQ19FTkFCTEVfSVJRX0NQSSk7Ci0Jc21wX2VuYWJsZV9pcnFfaW50ZXJydXB0KCk7Ci19Ci0KLXZvaWQgc21wX3FpY19jYWxsX2Z1bmN0aW9uX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlhY2tfUUlDX0NQSShRSUNfQ0FMTF9GVU5DVElPTl9DUEkpOwotCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwotfQotCi12b2lkIHNtcF9xaWNfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWFja19RSUNfQ1BJKFFJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkpOwotCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKLX0KLQotdm9pZCBzbXBfdmljX2NwaV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGlzX2NwdV9xdWFkKCkpCi0JCWFja19RSUNfQ1BJKFZJQ19DUElfTEVWRUwwKTsKLQllbHNlCi0JCWFja19WSUNfQ1BJKFZJQ19DUElfTEVWRUwwKTsKLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVklDX1RJTUVSX0NQSSwgJnZpY19jcGlfbWFpbGJveFtjcHVdKSkKLQkJd3JhcHBlcl9zbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChWSUNfSU5WQUxJREFURV9DUEksICZ2aWNfY3BpX21haWxib3hbY3B1XSkpCi0JCXNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCgpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVklDX1JFU0NIRURVTEVfQ1BJLCAmdmljX2NwaV9tYWlsYm94W2NwdV0pKQotCQlzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFZJQ19FTkFCTEVfSVJRX0NQSSwgJnZpY19jcGlfbWFpbGJveFtjcHVdKSkKLQkJc21wX2VuYWJsZV9pcnFfaW50ZXJydXB0KCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChWSUNfQ0FMTF9GVU5DVElPTl9DUEksICZ2aWNfY3BpX21haWxib3hbY3B1XSkpCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSSwgJnZpY19jcGlfbWFpbGJveFtjcHVdKSkKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2ZsdXNoX3RsYl9hbGwodm9pZCAqaW5mbykKLXsKLQl1bnNpZ25lZCBsb25nIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCV9fZmx1c2hfdGxiX2FsbCgpOwotCWlmIChwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9PSBUTEJTVEFURV9MQVpZKQotCQl2b3lhZ2VyX2xlYXZlX21tKGNwdSk7Ci19Ci0KLS8qIGZsdXNoIHRoZSBUTEIgb2YgZXZlcnkgYWN0aXZlIENQVSBpbiB0aGUgc3lzdGVtICovCi12b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLQlvbl9lYWNoX2NwdShkb19mbHVzaF90bGJfYWxsLCAwLCAxKTsKLX0KLQotLyogc2VuZCBhIHJlc2NoZWR1bGUgQ1BJIHRvIG9uZSBDUFUgYnkgcGh5c2ljYWwgQ1BVIG51bWJlciovCi1zdGF0aWMgdm9pZCB2b3lhZ2VyX3NtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKLXsKLQlzZW5kX29uZV9DUEkoY3B1LCBWSUNfUkVTQ0hFRFVMRV9DUEkpOwotfQotCi1pbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JX191OCBpOwotCV9fdTggY3B1bWFzayA9IGluYihWSUNfUFJPQ19XSE9fQU1fSSk7Ci0JaWYgKChjcHVtYXNrICYgUVVBRF9JREVOVElGSUVSKSA9PSBRVUFEX0lERU5USUZJRVIpCi0JCXJldHVybiBjcHVtYXNrICYgMHgxRjsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKGNwdW1hc2sgJiAoMSA8PCBpKSkKLQkJCXJldHVybiBpOwotCX0KLQlwcmludGsoIioqIFdBUk5JTkcgKiogSWxsZWdhbCBjcHVpZCByZXR1cm5lZCBieSBWSUM6ICVkIiwgY3B1bWFzayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci19Ci0KLS8qIGJyb2FkY2FzdCBhIGhhbHQgdG8gYWxsIG90aGVyIENQVXMgKi8KLXN0YXRpYyB2b2lkIHZveWFnZXJfc21wX3NlbmRfc3RvcCh2b2lkKQotewotCXNtcF9jYWxsX2Z1bmN0aW9uKHNtcF9zdG9wX2NwdV9mdW5jdGlvbiwgTlVMTCwgMSk7Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGluIHRpbWUuYyB3aGVuIGEgY2xvY2sgdGljayBmaXJlcwotICogd2UgbmVlZCB0byByZS1icm9hZGNhc3QgdGhlIHRpY2sgdG8gYWxsIENQVXMgKi8KLXZvaWQgc21wX3ZpY190aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlzZW5kX0NQSV9hbGxidXRzZWxmKFZJQ19USU1FUl9DUEkpOwotCXNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoKTsKLX0KLQotLyogbG9jYWwgKHBlciBDUFUpIHRpbWVyIGludGVycnVwdC4gIEl0IGRvZXMgYm90aCBwcm9maWxpbmcgYW5kCi0gKiBwcm9jZXNzIHN0YXRpc3RpY3MvcmVzY2hlZHVsaW5nLgotICoKLSAqIFdlIGRvIHByb2ZpbGluZyBpbiBldmVyeSBsb2NhbCB0aWNrLCBzdGF0aXN0aWNzL3Jlc2NoZWR1bGluZwotICogaGFwcGVuIG9ubHkgZXZlcnkgJ3Byb2ZpbGluZyBtdWx0aXBsaWVyJyB0aWNrcy4gVGhlIGRlZmF1bHQKLSAqIG11bHRpcGxpZXIgaXMgMSBhbmQgaXQgY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyB0aGUgbmV3IG11bHRpcGxpZXIKLSAqIHZhbHVlIGludG8gL3Byb2MvcHJvZmlsZS4KLSAqLwotdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlsb25nIHdlaWdodDsKLQotCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKLQlpZiAoLS1wZXJfY3B1KHByb2ZfY291bnRlciwgY3B1KSA8PSAwKSB7Ci0JCS8qCi0JCSAqIFRoZSBtdWx0aXBsaWVyIG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBnb3QKLQkJICogdG8gdGhpcyBwb2ludCBhcyBhIHJlc3VsdCBvZiB0aGUgdXNlciB3cml0aW5nIHRvCi0JCSAqIC9wcm9jL3Byb2ZpbGUuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgQVBJQwotCQkgKiB0aW1lciBhY2NvcmRpbmdseS4KLQkJICoKLQkJICogSW50ZXJydXB0cyBhcmUgYWxyZWFkeSBtYXNrZWQgb2ZmIGF0IHRoaXMgcG9pbnQuCi0JCSAqLwotCQlwZXJfY3B1KHByb2ZfY291bnRlciwgY3B1KSA9IHBlcl9jcHUocHJvZl9tdWx0aXBsaWVyLCBjcHUpOwotCQlpZiAocGVyX2NwdShwcm9mX2NvdW50ZXIsIGNwdSkgIT0KLQkJICAgIHBlcl9jcHUocHJvZl9vbGRfbXVsdGlwbGllciwgY3B1KSkgewotCQkJLyogRklYTUU6IG5lZWQgdG8gdXBkYXRlIHRoZSB2aWMgdGltZXIgdGljayBoZXJlICovCi0JCQlwZXJfY3B1KHByb2Zfb2xkX211bHRpcGxpZXIsIGNwdSkgPQotCQkJICAgIHBlcl9jcHUocHJvZl9jb3VudGVyLCBjcHUpOwotCQl9Ci0KLQkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlX3ZtKGdldF9pcnFfcmVncygpKSk7Ci0JfQotCi0JaWYgKCgoMSA8PCBjcHUpICYgdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycykgPT0gMCkKLQkJLyogb25seSBleHRlbmRlZCBWSUMgcHJvY2Vzc29ycyBwYXJ0aWNpcGF0ZSBpbgotCQkgKiBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uICovCi0JCXJldHVybjsKLQotCS8qCi0JICogV2UgdGFrZSB0aGUgJ2xvbmcnIHJldHVybiBwYXRoLCBhbmQgdGhlcmUgZXZlcnkgc3Vic3lzdGVtCi0JICogZ3JhYnMgdGhlIGFwcHJvcHJpYXRlIGxvY2tzIChrZXJuZWwgbG9jay8gaXJxIGxvY2spLgotCSAqCi0JICogd2UgbWlnaHQgd2FudCB0byBkZWNvdXBsZSBwcm9maWxpbmcgZnJvbSB0aGUgJ2xvbmcgcGF0aCcsCi0JICogYW5kIGRvIHRoZSBwcm9maWxpbmcgdG90YWxseSBpbiBhc3NlbWJseS4KLQkgKgotCSAqIEN1cnJlbnRseSB0aGlzIGlzbid0IHRvbyBtdWNoIG9mIGFuIGlzc3VlIChwZXJmb3JtYW5jZSB3aXNlKSwKLQkgKiB3ZSBjYW4gdGFrZSBtb3JlIHRoYW4gMTAwSyBsb2NhbCBpcnFzIHBlciBzZWNvbmQgb24gYSAxMDAgTUh6IFA1LgotCSAqLwotCi0JaWYgKCgrK3ZpY190aWNrW2NwdV0gJiAweDcpICE9IDApCi0JCXJldHVybjsKLQkvKiBnZXQgaGVyZSBldmVyeSAxNiB0aWNrcyAoYWJvdXQgZXZlcnkgMS82IG9mIGEgc2Vjb25kKSAqLwotCi0JLyogQ2hhbmdlIG91ciBwcmlvcml0eSB0byBnaXZlIHNvbWVvbmUgZWxzZSBhIGNoYW5jZSBhdCBnZXR0aW5nCi0JICogdGhlIElSUS4gVGhlIGFsZ29yaXRobSBnb2VzIGxpa2UgdGhpczoKLQkgKgotCSAqIEluIHRoZSBWSUMsIHRoZSBkeW5hbWljYWxseSByb3V0ZWQgaW50ZXJydXB0IGlzIGFsd2F5cwotCSAqIGhhbmRsZWQgYnkgdGhlIGxvd2VzdCBwcmlvcml0eSBlbGlnaWJsZSAoaS5lLiByZWNlaXZpbmcKLQkgKiBpbnRlcnJ1cHRzKSBDUFUuICBJZiA+MSBlbGlnaWJsZSBDUFVzIGFyZSBlcXVhbCBsb3dlc3QsIHRoZQotCSAqIGxvd2VzdCBwcm9jZXNzb3IgbnVtYmVyIGdldHMgaXQuCi0JICoKLQkgKiBUaGUgcHJpb3JpdHkgb2YgYSBDUFUgaXMgY29udHJvbGxlZCBieSBhIHNwZWNpYWwgcGVyLUNQVQotCSAqIFZJQyBwcmlvcml0eSByZWdpc3RlciB3aGljaCBpcyAzIGJpdHMgd2lkZSAwIGJlaW5nIGxvd2VzdAotCSAqIGFuZCA3IGhpZ2hlc3QgcHJpb3JpdHkuLgotCSAqCi0JICogVGhlcmVmb3JlIHdlIHN1YnRyYWN0IHRoZSBhdmVyYWdlIG51bWJlciBvZiBpbnRlcnJ1cHRzIGZyb20KLQkgKiB0aGUgbnVtYmVyIHdlJ3ZlIGZpZWxkZWQuICBJZiB0aGlzIG51bWJlciBpcyBuZWdhdGl2ZSwgd2UKLQkgKiBsb3dlciB0aGUgYWN0aXZpdHkgY291bnQgYW5kIGlmIGl0IGlzIHBvc2l0aXZlLCB3ZSByYWlzZQotCSAqIGl0LgotCSAqCi0JICogSSdtIGFmcmFpZCB0aGlzIHN0aWxsIGxlYWRzIHRvIG9kZCBsb29raW5nIGludGVycnVwdCBjb3VudHM6Ci0JICogdGhlIHRvdGFscyBhcmUgYWxsIHJvdWdobHkgZXF1YWwsIGJ1dCB0aGUgaW5kaXZpZHVhbCBvbmVzCi0JICogbG9vayByYXRoZXIgc2tld2VkLgotCSAqCi0JICogRklYTUU6IFRoaXMgYWxnb3JpdGhtIGlzIHRvdGFsIGNyYXAgd2hlbiBtaXhlZCB3aXRoIFNNUAotCSAqIGFmZmluaXR5IGNvZGUgc2luY2Ugd2Ugbm93IHRyeSB0byBldmVuIHVwIHRoZSBpbnRlcnJ1cHQKLQkgKiBjb3VudHMgd2hlbiBhbiBhZmZpbml0eSBiaW5kaW5nIGlzIGtlZXBpbmcgdGhlbSBvbiBhCi0JICogcGFydGljdWxhciBDUFUqLwotCXdlaWdodCA9ICh2aWNfaW50cl9jb3VudFtjcHVdICogdm95YWdlcl9leHRlbmRlZF9jcHVzCi0JCSAgLSB2aWNfaW50cl90b3RhbCkgPj4gNDsKLQl3ZWlnaHQgKz0gNDsKLQlpZiAod2VpZ2h0ID4gNykKLQkJd2VpZ2h0ID0gNzsKLQlpZiAod2VpZ2h0IDwgMCkKLQkJd2VpZ2h0ID0gMDsKLQotCW91dGIoKF9fdTgpIHdlaWdodCwgVklDX1BSSU9SSVRZX1JFR0lTVEVSKTsKLQotI2lmZGVmIFZPWUFHRVJfREVCVUcKLQlpZiAoKHZpY190aWNrW2NwdV0gJiAweEZGRikgPT0gMCkgewotCQkvKiBwcmludCB0aGlzIG1lc3NhZ2Ugcm91Z2hseSBldmVyeSAyNSBzZWNzICovCi0JCXByaW50aygiVk9ZQUdFUiBTTVA6IHZpY190aWNrWyVkXSA9ICVsdSwgd2VpZ2h0ID0gJWxkXG4iLAotCQkgICAgICAgY3B1LCB2aWNfdGlja1tjcHVdLCB3ZWlnaHQpOwotCX0KLSNlbmRpZgotfQotCi0vKiBzZXR1cCB0aGUgcHJvZmlsaW5nIHRpbWVyICovCi1pbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKQotewotCWludCBpOwotCi0JaWYgKCghbXVsdGlwbGllcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBTZXQgdGhlIG5ldyBtdWx0aXBsaWVyIGZvciBlYWNoIENQVS4gQ1BVcyBkb24ndCBzdGFydCB1c2luZyB0aGUKLQkgKiBuZXcgdmFsdWVzIHVudGlsIHRoZSBuZXh0IHRpbWVyIGludGVycnVwdCBpbiB3aGljaCB0aGV5IGRvIHByb2Nlc3MKLQkgKiBhY2NvdW50aW5nLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyArK2kpCi0JCXBlcl9jcHUocHJvZl9tdWx0aXBsaWVyLCBpKSA9IG11bHRpcGxpZXI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBpcyBhIGJpdCBvZiBhIG1lc3MsIGJ1dCBmb3JjZWQgb24gdXMgYnkgdGhlIGdlbmlycSBjaGFuZ2VzCi0gKiB0aGVyZSdzIG5vIGdlbmlycSBoYW5kbGVyIHRoYXQgcmVhbGx5IGRvZXMgd2hhdCB2b3lhZ2VyIHdhbnRzCi0gKiBzbyBoYWNrIGl0IHVwIHdpdGggdGhlIHNpbXBsZSBJUlEgaGFuZGxlciAqLwotc3RhdGljIHZvaWQgaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWJlZm9yZV9oYW5kbGVfdmljX2lycShpcnEpOwotCWhhbmRsZV9zaW1wbGVfaXJxKGlycSwgZGVzYyk7Ci0JYWZ0ZXJfaGFuZGxlX3ZpY19pcnEoaXJxKTsKLX0KLQotLyogIFRoZSBDUElzIGFyZSBoYW5kbGVkIGluIHRoZSBwZXIgY3B1IDgyNTlzLCBzbyB0aGV5IG11c3QgYmUKLSAqICBlbmFibGVkIHRvIGJlIHJlY2VpdmVkOiBGSVg6IGVuYWJsaW5nIHRoZSBDUElzIGluIHRoZSBlYXJseQotICogIGJvb3Qgc2VxdWVuY2UgaW50ZXJmZXJlcyB3aXRoIGJ1ZyBjaGVja2luZzsgZW5hYmxlIHRoZW0gbGF0ZXIKLSAqICBvbiBpbiBzbXBfaW5pdCAqLwotI2RlZmluZSBWSUNfU0VUX0dBVEUoY3BpLCB2ZWN0b3IpIFwKLQlzZXRfaW50cl9nYXRlKChjcGkpICsgVklDX0RFRkFVTFRfQ1BJX0JBU0UsICh2ZWN0b3IpKQotI2RlZmluZSBRSUNfU0VUX0dBVEUoY3BpLCB2ZWN0b3IpIFwKLQlzZXRfaW50cl9nYXRlKChjcGkpICsgUUlDX0RFRkFVTFRfQ1BJX0JBU0UsICh2ZWN0b3IpKQotCi12b2lkIF9faW5pdCB2b3lhZ2VyX3NtcF9pbnRyX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIGluaXRpYWxpemUgdGhlIHBlciBjcHUgaXJxIG1hc2sgdG8gYWxsIGRpc2FibGVkICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykKLQkJdmljX2lycV9tYXNrW2ldID0gMHhGRkZGOwotCi0JVklDX1NFVF9HQVRFKFZJQ19DUElfTEVWRUwwLCB2aWNfY3BpX2ludGVycnVwdCk7Ci0KLQlWSUNfU0VUX0dBVEUoVklDX1NZU19JTlQsIHZpY19zeXNfaW50ZXJydXB0KTsKLQlWSUNfU0VUX0dBVEUoVklDX0NNTl9JTlQsIHZpY19jbW5faW50ZXJydXB0KTsKLQotCVFJQ19TRVRfR0FURShRSUNfVElNRVJfQ1BJLCBxaWNfdGltZXJfaW50ZXJydXB0KTsKLQlRSUNfU0VUX0dBVEUoUUlDX0lOVkFMSURBVEVfQ1BJLCBxaWNfaW52YWxpZGF0ZV9pbnRlcnJ1cHQpOwotCVFJQ19TRVRfR0FURShRSUNfUkVTQ0hFRFVMRV9DUEksIHFpY19yZXNjaGVkdWxlX2ludGVycnVwdCk7Ci0JUUlDX1NFVF9HQVRFKFFJQ19FTkFCTEVfSVJRX0NQSSwgcWljX2VuYWJsZV9pcnFfaW50ZXJydXB0KTsKLQlRSUNfU0VUX0dBVEUoUUlDX0NBTExfRlVOQ1RJT05fQ1BJLCBxaWNfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQpOwotCi0JLyogbm93IHB1dCB0aGUgVklDIGRlc2NyaXB0b3IgaW50byB0aGUgZmlyc3QgNDggSVJRcwotCSAqCi0JICogVGhpcyBpcyBmb3IgbGF0ZXI6IGZpcnN0IDE2IGNvcnJlc3BvbmQgdG8gUEMgSVJRczsgbmV4dCAxNgotCSAqIGFyZSBQcmltYXJ5IE1DIElSUXMgYW5kIGZpbmFsIDE2IGFyZSBTZWNvbmRhcnkgTUMgSVJRcyAqLwotCWZvciAoaSA9IDA7IGkgPCA0ODsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnZpY19jaGlwLCBoYW5kbGVfdmljX2lycSk7Ci19Ci0KLS8qIHNlbmQgYSBDUEkgYXQgbGV2ZWwgY3BpIHRvIGEgc2V0IG9mIGNwdXMgaW4gY3B1c2V0IChzZXQgMSBiaXQgcGVyCi0gKiBwcm9jZXNzb3IgdG8gcmVjZWl2ZSBDUEkgKi8KLXN0YXRpYyB2b2lkIHNlbmRfQ1BJKF9fdTMyIGNwdXNldCwgX191OCBjcGkpCi17Ci0JaW50IGNwdTsKLQlfX3UzMiBxdWFkX2NwdXNldCA9IChjcHVzZXQgJiB2b3lhZ2VyX3F1YWRfcHJvY2Vzc29ycyk7Ci0KLQlpZiAoY3BpIDwgVklDX1NUQVJUX0ZBS0VfQ1BJKSB7Ci0JCS8qIGZha2UgQ1BJIGFyZSBvbmx5IHVzZWQgZm9yIGJvb3RpbmcsIHNvIHNlbmQgdG8gdGhlCi0JCSAqIGV4dGVuZGVkIHF1YWRzIGFzIHdlbGwtLS1RdWFkcyBtdXN0IGJlIFZJQyBib290ZWQgKi8KLQkJb3V0YigoX191OCkgKGNwdXNldCksIFZJQ19DUElfUmVnaXN0ZXJzW2NwaV0pOwotCQlyZXR1cm47Ci0JfQotCWlmIChxdWFkX2NwdXNldCkKLQkJc2VuZF9RSUNfQ1BJKHF1YWRfY3B1c2V0LCBjcGkpOwotCWNwdXNldCAmPSB+cXVhZF9jcHVzZXQ7Ci0JY3B1c2V0ICY9IDB4ZmY7CQkvKiBvbmx5IGZpcnN0IDggQ1BVcyB2YWlsZCBmb3IgVklDIENQSSAqLwotCWlmIChjcHVzZXQgPT0gMCkKLQkJcmV0dXJuOwotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHVzZXQgJiAoMSA8PCBjcHUpKQotCQkJc2V0X2JpdChjcGksICZ2aWNfY3BpX21haWxib3hbY3B1XSk7Ci0JfQotCWlmIChjcHVzZXQpCi0JCW91dGIoKF9fdTgpIGNwdXNldCwgVklDX0NQSV9SZWdpc3RlcnNbVklDX0NQSV9MRVZFTDBdKTsKLX0KLQotLyogQWNrbm93bGVkZ2UgcmVjZWlwdCBvZiBDUEkgaW4gdGhlIFFJQywgY2xlYXIgaW4gUUlDIGhhcmR3YXJlIGFuZAotICogc2V0IHRoZSBjYWNoZSBsaW5lIHRvIHNoYXJlZCBieSByZWFkaW5nIGl0LgotICoKLSAqIERPTidUIG1ha2UgdGhpcyBpbmxpbmUgb3RoZXJ3aXNlIHRoZSBjYWNoZSBsaW5lIHJlYWQgd2lsbCBiZQotICogb3B0aW1pc2VkIGF3YXkKLSAqICovCi1zdGF0aWMgaW50IGFja19RSUNfQ1BJKF9fdTggY3BpKQotewotCV9fdTggY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQljcGkgJj0gNzsKLQotCW91dGIoMSA8PCBjcGksIFFJQ19JTlRFUlJVUFRfQ0xFQVIxKTsKLQlyZXR1cm4gdm95YWdlcl9xdWFkX2NwaV9hZGRyW2NwdV0tPnFpY19jcGlbY3BpXS5jcGk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19zcGVjaWFsX1FJQ19DUEkoX191OCBjcGkpCi17Ci0Jc3dpdGNoIChjcGkpIHsKLQljYXNlIFZJQ19DTU5fSU5UOgotCQlvdXRiKFFJQ19DTU5fSU5ULCBRSUNfSU5URVJSVVBUX0NMRUFSMCk7Ci0JCWJyZWFrOwotCWNhc2UgVklDX1NZU19JTlQ6Ci0JCW91dGIoUUlDX1NZU19JTlQsIFFJQ19JTlRFUlJVUFRfQ0xFQVIwKTsKLQkJYnJlYWs7Ci0JfQotCS8qIGFsc28gY2xlYXIgYXQgdGhlIFZJQywganVzdCBpbiBjYXNlIChub3AgZm9yIG5vbi1leHRlbmRlZCBwcm9jKSAqLwotCWFja19WSUNfQ1BJKGNwaSk7Ci19Ci0KLS8qIEFja25vd2xlZGdlIHJlY2VpcHQgb2YgQ1BJIGluIHRoZSBWSUMgKGVzc2VudGlhbGx5IGFuIEVPSSkgKi8KLXN0YXRpYyB2b2lkIGFja19WSUNfQ1BJKF9fdTggY3BpKQotewotI2lmZGVmIFZPWUFHRVJfREVCVUcKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCV9fdTE2IGlzcjsKLQlfX3U4IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpc3IgPSB2aWNfcmVhZF9pc3IoKTsKLQlpZiAoKGlzciAmICgxIDw8IChjcGkgJiA3KSkpID09IDApIHsKLQkJcHJpbnRrKCJWT1lBR0VSIFNNUDogQ1BVJWQgbG9zdCBDUEklZFxuIiwgY3B1LCBjcGkpOwotCX0KLSNlbmRpZgotCS8qIHNlbmQgc3BlY2lmaWMgRU9JOyB0aGUgdHdvIHN5c3RlbSBpbnRlcnJ1cHRzIGhhdmUKLQkgKiBiaXQgNCBzZXQgZm9yIGEgc2VwYXJhdGUgdmVjdG9yIGJ1dCBiZWhhdmUgYXMgdGhlCi0JICogY29ycmVzcG9uZGluZyAzIGJpdCBpbnRyICovCi0Jb3V0Yl9wKDB4NjAgfCAoY3BpICYgNyksIDB4MjApOwotCi0jaWZkZWYgVk9ZQUdFUl9ERUJVRwotCWlmICgodmljX3JlYWRfaXNyKCkgJiAoMSA8PCAoY3BpICYgNykpKSAhPSAwKSB7Ci0JCXByaW50aygiVk9ZQUdFUiBTTVA6IENQVSVkIHN0aWxsIGFzc2VydGluZyBDUEklZFxuIiwgY3B1LCBjcGkpOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKLX0KLQotLyogY3JpYmJlZCB3aXRoIHRoYW5rcyBmcm9tIGlycS5jICovCi0jZGVmaW5lIF9fYnl0ZSh4LHkpCSgoKHVuc2lnbmVkIGNoYXIgKikmKHkpKVt4XSkKLSNkZWZpbmUgY2FjaGVkXzIxKGNwdSkJKF9fYnl0ZSgwLHZpY19pcnFfbWFza1tjcHVdKSkKLSNkZWZpbmUgY2FjaGVkX0ExKGNwdSkJKF9fYnl0ZSgxLHZpY19pcnFfbWFza1tjcHVdKSkKLQotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bm1hc2tfdmljX2lycShpcnEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoZSBlbmFibGUgYW5kIGRpc2FibGUgcm91dGluZXMuICBUaGlzIGlzIHdoZXJlIHdlIHJ1biBpbnRvCi0gKiBjb25mbGljdGluZyBhcmNoaXRlY3R1cmFsIHBoaWxvc29waHkuICBGdW5kYW1lbnRhbGx5LCB0aGUgdm95YWdlcgotICogYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGV4cGVjdCB0byBoYXZlIHRvIGRpc2FibGUgaW50ZXJydXB0cyBnbG9iYWxseQotICogKHRoZSBJUlEgY29udHJvbGxlcnMgYmVsb25nIHRvIGVhY2ggQ1BVKS4gIFRoZSBwcm9jZXNzb3IgbWFzcXVlcmFkZQotICogd2hpY2ggaXMgdXNlZCB0byBzdGFydCB0aGUgc3lzdGVtIHNob3VsZG4ndCBiZSB1c2VkIGluIGEgcnVubmluZyBPUwotICogc2luY2UgaXQgd2lsbCBjYXVzZSBncmVhdCBjb25mdXNpb24gaWYgdHdvIHNlcGFyYXRlIENQVXMgZHJpdmUgdG8KLSAqIHRoZSBzYW1lIElSUSBjb250cm9sbGVyIChJIGtub3csIEkndmUgdHJpZWQgaXQpLgotICoKLSAqIFRoZSBzb2x1dGlvbiBpcyBhIHZhcmlhbnQgb24gdGhlIE5DUiBsYXp5IFNQTCBkZXNpZ246Ci0gKgotICogMSkgVG8gZGlzYWJsZSBhbiBpbnRlcnJ1cHQsIGRvIG5vdGhpbmcgKG90aGVyIHRoYW4gc2V0IHRoZQotICogICAgSVJRX0RJU0FCTEVEIGZsYWcpLiAgVGhpcyBkYXJlcyB0aGUgaW50ZXJydXB0IGFjdHVhbGx5IHRvIGFycml2ZS4KLSAqCi0gKiAyKSBJZiB0aGUgaW50ZXJydXB0IGRhcmVzIHRvIGNvbWUgaW4sIHJhaXNlIHRoZSBsb2NhbCBtYXNrIGFnYWluc3QKLSAqICAgIGl0ICh0aGlzIHdpbGwgcmVzdWx0IGluIGFsbCB0aGUgQ1BVIG1hc2tzIGJlaW5nIHJhaXNlZAotICogICAgZXZlbnR1YWxseSkuCi0gKgotICogMykgVG8gZW5hYmxlIHRoZSBpbnRlcnJ1cHQsIGxvd2VyIHRoZSBtYXNrIG9uIHRoZSBsb2NhbCBDUFUgYW5kCi0gKiAgICBicm9hZGNhc3QgYW4gSW50ZXJydXB0IGVuYWJsZSBDUEkgd2hpY2ggY2F1c2VzIGFsbCBvdGhlciBDUFVzIHRvCi0gKiAgICBhZGp1c3QgdGhlaXIgbWFza3MgYWNjb3JkaW5nbHkuICAqLwotCi1zdGF0aWMgdm9pZCB1bm1hc2tfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCS8qIGxpbnV4IGRvZXNuJ3QgdG8gcHJvY2Vzc29yLWlycSBhZmZpbml0eSwgc28gZW5hYmxlIG9uCi0JICogYWxsIENQVXMgd2Uga25vdyBhYm91dCAqLwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIHJlYWxfY3B1OwotCV9fdTE2IG1hc2sgPSAoMSA8PCBpcnEpOwotCV9fdTMyIHByb2Nlc3Nvckxpc3QgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlWREVCVUcoKCJWT1lBR0VSOiB1bm1hc2tfdmljX2lycSglZCkgQ1BVJWQgYWZmaW5pdHkgMHglbHhcbiIsCi0JCWlycSwgY3B1LCBjcHVfaXJxX2FmZmluaXR5W2NwdV0pKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmljX2lycV9sb2NrLCBmbGFncyk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShyZWFsX2NwdSkgewotCQlpZiAoISh2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzICYgKDEgPDwgcmVhbF9jcHUpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIShjcHVfaXJxX2FmZmluaXR5W3JlYWxfY3B1XSAmIG1hc2spKSB7Ci0JCQkvKiBpcnEgaGFzIG5vIGFmZmluaXR5IGZvciB0aGlzIENQVSwgaWdub3JlICovCi0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocmVhbF9jcHUgPT0gY3B1KSB7Ci0JCQllbmFibGVfbG9jYWxfdmljX2lycShpcnEpOwotCQl9IGVsc2UgaWYgKHZpY19pcnFfbWFza1tyZWFsX2NwdV0gJiBtYXNrKSB7Ci0JCQl2aWNfaXJxX2VuYWJsZV9tYXNrW3JlYWxfY3B1XSB8PSBtYXNrOwotCQkJcHJvY2Vzc29yTGlzdCB8PSAoMSA8PCByZWFsX2NwdSk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmljX2lycV9sb2NrLCBmbGFncyk7Ci0JaWYgKHByb2Nlc3Nvckxpc3QpCi0JCXNlbmRfQ1BJKHByb2Nlc3Nvckxpc3QsIFZJQ19FTkFCTEVfSVJRX0NQSSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hc2tfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCS8qIGxhenkgZGlzYWJsZSwgZG8gbm90aGluZyAqLwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfbG9jYWxfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCV9fdTE2IG1hc2sgPSB+KDEgPDwgaXJxKTsKLQlfX3UxNiBvbGRfbWFzayA9IHZpY19pcnFfbWFza1tjcHVdOwotCi0JdmljX2lycV9tYXNrW2NwdV0gJj0gbWFzazsKLQlpZiAodmljX2lycV9tYXNrW2NwdV0gPT0gb2xkX21hc2spCi0JCXJldHVybjsKLQotCVZERUJVRygoIlZPWUFHRVIgREVCVUc6IEVuYWJsaW5nIGlycSAlZCBpbiBoYXJkd2FyZSBvbiBDUFUgJWRcbiIsCi0JCWlycSwgY3B1KSk7Ci0KLQlpZiAoaXJxICYgOCkgewotCQlvdXRiX3AoY2FjaGVkX0ExKGNwdSksIDB4QTEpOwotCQkodm9pZClpbmJfcCgweEExKTsKLQl9IGVsc2UgewotCQlvdXRiX3AoY2FjaGVkXzIxKGNwdSksIDB4MjEpOwotCQkodm9pZClpbmJfcCgweDIxKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVfbG9jYWxfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCV9fdTE2IG1hc2sgPSAoMSA8PCBpcnEpOwotCV9fdTE2IG9sZF9tYXNrID0gdmljX2lycV9tYXNrW2NwdV07Ci0KLQlpZiAoaXJxID09IDcpCi0JCXJldHVybjsKLQotCXZpY19pcnFfbWFza1tjcHVdIHw9IG1hc2s7Ci0JaWYgKG9sZF9tYXNrID09IHZpY19pcnFfbWFza1tjcHVdKQotCQlyZXR1cm47Ci0KLQlWREVCVUcoKCJWT1lBR0VSIERFQlVHOiBEaXNhYmxpbmcgaXJxICVkIGluIGhhcmR3YXJlIG9uIENQVSAlZFxuIiwKLQkJaXJxLCBjcHUpKTsKLQotCWlmIChpcnEgJiA4KSB7Ci0JCW91dGJfcChjYWNoZWRfQTEoY3B1KSwgMHhBMSk7Ci0JCSh2b2lkKWluYl9wKDB4QTEpOwotCX0gZWxzZSB7Ci0JCW91dGJfcChjYWNoZWRfMjEoY3B1KSwgMHgyMSk7Ci0JCSh2b2lkKWluYl9wKDB4MjEpOwotCX0KLX0KLQotLyogVGhlIFZJQyBpcyBsZXZlbCB0cmlnZ2VyZWQsIHNvIHRoZSBhY2sgY2FuIG9ubHkgYmUgaXNzdWVkIGFmdGVyIHRoZQotICogaW50ZXJydXB0IGNvbXBsZXRlcy4gIEhvd2V2ZXIsIHdlIGRvIFZveWFnZXIgbGF6eSBpbnRlcnJ1cHQKLSAqIGhhbmRsaW5nIGhlcmU6IEl0IGlzIGFuIGV4dHJlbWVseSBleHBlbnNpdmUgb3BlcmF0aW9uIHRvIG1hc2sgYW4KLSAqIGludGVycnVwdCBpbiB0aGUgdmljLCBzbyB3ZSBtZXJlbHkgc2V0IGEgZmxhZyAoSVJRX0RJU0FCTEVEKS4gIElmCi0gKiB0aGlzIGludGVycnVwdCBhY3R1YWxseSBjb21lcyBpbiwgdGhlbiB3ZSBtYXNrIGFuZCBhY2sgaGVyZSB0byBwdXNoCi0gKiB0aGUgaW50ZXJydXB0IG9mZiB0byBhbm90aGVyIENQVSAqLwotc3RhdGljIHZvaWQgYmVmb3JlX2hhbmRsZV92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0JX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlfcmF3X3NwaW5fbG9jaygmdmljX2lycV9sb2NrKTsKLQl2aWNfaW50cl90b3RhbCsrOwotCXZpY19pbnRyX2NvdW50W2NwdV0rKzsKLQotCWlmICghKGNwdV9pcnFfYWZmaW5pdHlbY3B1XSAmICgxIDw8IGlycSkpKSB7Ci0JCS8qIFRoZSBpcnEgaXMgbm90IGluIG91ciBhZmZpbml0eSBtYXNrLCBwdXNoIGl0IG9mZgotCQkgKiBvbnRvIGFub3RoZXIgQ1BVICovCi0JCVZERUJVRygoIlZPWUFHRVIgREVCVUc6IGFmZmluaXR5IHRyaWdnZXJlZCBkaXNhYmxlIG9mIGlycSAlZCAiCi0JCQkib24gY3B1ICVkXG4iLCBpcnEsIGNwdSkpOwotCQlkaXNhYmxlX2xvY2FsX3ZpY19pcnEoaXJxKTsKLQkJLyogc2V0IElSUV9JTlBST0dSRVNTIHRvIHByZXZlbnQgdGhlIGhhbmRsZXIgaW4gaXJxLmMgZnJvbQotCQkgKiBhY3R1YWxseSBjYWxsaW5nIHRoZSBpbnRlcnJ1cHQgcm91dGluZSAqLwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1JFUExBWSB8IElSUV9JTlBST0dSRVNTOwotCX0gZWxzZSBpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSB7Ci0JCS8qIERhbW4sIHRoZSBpbnRlcnJ1cHQgYWN0dWFsbHkgYXJyaXZlZCwgZG8gdGhlIGxhenkKLQkJICogZGlzYWJsZSB0aGluZy4gVGhlIGludGVycnVwdCByb3V0aW5lIGluIGlycS5jIHdpbGwKLQkJICogbm90IGhhbmRsZSBhIElSUV9ESVNBQkxFRCBpbnRlcnJ1cHQsIHNvIG5vdGhpbmcgbW9yZQotCQkgKiBuZWVkIGJlIGRvbmUgaGVyZSAqLwotCQlWREVCVUcoKCJWT1lBR0VSIERFQlVHOiBsYXp5IGRpc2FibGUgb2YgaXJxICVkIG9uIENQVSAlZFxuIiwKLQkJCWlycSwgY3B1KSk7Ci0JCWRpc2FibGVfbG9jYWxfdmljX2lycShpcnEpOwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1JFUExBWTsKLQl9IGVsc2UgewotCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9SRVBMQVk7Ci0JfQotCi0JX3Jhd19zcGluX3VubG9jaygmdmljX2lycV9sb2NrKTsKLX0KLQotLyogRmluaXNoIHRoZSBWSUMgaW50ZXJydXB0OiBiYXNpY2FsbHkgbWFzayAqLwotc3RhdGljIHZvaWQgYWZ0ZXJfaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQotCV9yYXdfc3Bpbl9sb2NrKCZ2aWNfaXJxX2xvY2spOwotCXsKLQkJdW5zaWduZWQgaW50IHN0YXR1cyA9IGRlc2MtPnN0YXR1cyAmIH5JUlFfSU5QUk9HUkVTUzsKLSNpZmRlZiBWT1lBR0VSX0RFQlVHCi0JCV9fdTE2IGlzcjsKLSNlbmRpZgotCi0JCWRlc2MtPnN0YXR1cyA9IHN0YXR1czsKLQkJaWYgKChzdGF0dXMgJiBJUlFfRElTQUJMRUQpKQotCQkJZGlzYWJsZV9sb2NhbF92aWNfaXJxKGlycSk7Ci0jaWZkZWYgVk9ZQUdFUl9ERUJVRwotCQkvKiBERUJVRzogYmVmb3JlIHdlIGFjaywgY2hlY2sgd2hhdCdzIGluIHByb2dyZXNzICovCi0JCWlzciA9IHZpY19yZWFkX2lzcigpOwotCQlpZiAoKGlzciAmICgxIDw8IGlycSkgJiYgIShzdGF0dXMgJiBJUlFfUkVQTEFZKSkgPT0gMCkgewotCQkJaW50IGk7Ci0JCQlfX3U4IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkJCV9fdTggcmVhbF9jcHU7Ci0JCQlpbnQgbWFzazsJLyogVW0uLi4gaW5pdGlhbGl6ZSBtZT8/PyAtLVJSICovCi0KLQkJCXByaW50aygiVk9ZQUdFUiBTTVA6IENQVSVkIGxvc3QgaW50ZXJydXB0ICVkXG4iLAotCQkJICAgICAgIGNwdSwgaXJxKTsKLQkJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShyZWFsX2NwdSwgbWFzaykgewotCi0JCQkJb3V0YihWSUNfQ1BVX01BU1FVRVJBREVfRU5BQkxFIHwgcmVhbF9jcHUsCi0JCQkJICAgICBWSUNfUFJPQ0VTU09SX0lEKTsKLQkJCQlpc3IgPSB2aWNfcmVhZF9pc3IoKTsKLQkJCQlpZiAoaXNyICYgKDEgPDwgaXJxKSkgewotCQkJCQlwcmludGsKLQkJCQkJICAgICgiVk9ZQUdFUiBTTVA6IENQVSVkIGFjayBpcnEgJWRcbiIsCi0JCQkJCSAgICAgcmVhbF9jcHUsIGlycSk7Ci0JCQkJCWFja192aWNfaXJxKGlycSk7Ci0JCQkJfQotCQkJCW91dGIoY3B1LCBWSUNfUFJPQ0VTU09SX0lEKTsKLQkJCX0KLQkJfQotI2VuZGlmIC8qIFZPWUFHRVJfREVCVUcgKi8KLQkJLyogYXMgc29vbiBhcyB3ZSBhY2ssIHRoZSBpbnRlcnJ1cHQgaXMgZWxpZ2libGUgZm9yCi0JCSAqIHJlY2VpcHQgYnkgYW5vdGhlciBDUFUgc28gZXZlcnl0aGluZyBtdXN0IGJlIGluCi0JCSAqIG9yZGVyIGhlcmUgICovCi0JCWFja192aWNfaXJxKGlycSk7Ci0JCWlmIChzdGF0dXMgJiBJUlFfUkVQTEFZKSB7Ci0JCQkvKiByZXBsYXkgaXMgc2V0IGlmIHdlIGRpc2FibGUgdGhlIGludGVycnVwdAotCQkJICogaW4gdGhlIGJlZm9yZV9oYW5kbGVfdmljX2lycSgpIHJvdXRpbmUsIHNvCi0JCQkgKiBjbGVhciB0aGUgaW4gcHJvZ3Jlc3MgYml0IGhlcmUgdG8gYWxsb3cgdGhlCi0JCQkgKiBuZXh0IENQVSB0byBoYW5kbGUgdGhpcyBjb3JyZWN0bHkgKi8KLQkJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfSU5QUk9HUkVTUyk7Ci0JCX0KLSNpZmRlZiBWT1lBR0VSX0RFQlVHCi0JCWlzciA9IHZpY19yZWFkX2lzcigpOwotCQlpZiAoKGlzciAmICgxIDw8IGlycSkpICE9IDApCi0JCQlwcmludGsoIlZPWUFHRVIgU01QOiBhZnRlcl9oYW5kbGVfdmljX2lycSgpIGFmdGVyICIKLQkJCSAgICAgICAiYWNrIGlycT0lZCwgaXNyPTB4JXhcbiIsIGlycSwgaXNyKTsKLSNlbmRpZiAvKiBWT1lBR0VSX0RFQlVHICovCi0JfQotCV9yYXdfc3Bpbl91bmxvY2soJnZpY19pcnFfbG9jayk7Ci0KLQkvKiBBbGwgY29kZSBhZnRlciB0aGlzIHBvaW50IGlzIG91dCBvZiB0aGUgbWFpbiBwYXRoIC0gdGhlIElSUQotCSAqIG1heSBiZSBpbnRlcmNlcHRlZCBieSBhbm90aGVyIENQVSBpZiByZWFzc2VydGVkICovCi19Ci0KLS8qIExpbnV4IHByb2Nlc3NvciAtIGludGVycnVwdCBhZmZpbml0eSBtYW5pcHVsYXRpb25zLgotICoKLSAqIEZvciBlYWNoIHByb2Nlc3Nvciwgd2UgbWFpbnRhaW4gYSAzMiBiaXQgaXJxIGFmZmluaXR5IG1hc2suCi0gKiBJbml0aWFsbHkgaXQgaXMgc2V0IHRvIGFsbCAxJ3Mgc28gZXZlcnkgcHJvY2Vzc29yIGFjY2VwdHMgZXZlcnkKLSAqIGludGVycnVwdC4gIEluIHRoaXMgY2FsbCwgd2UgY2hhbmdlIHRoZSBwcm9jZXNzb3IncyBhZmZpbml0eSBtYXNrOgotICoKLSAqIENoYW5nZSBmcm9tIGVuYWJsZSB0byBkaXNhYmxlOgotICoKLSAqIElmIHRoZSBpbnRlcnJ1cHQgZXZlciBjb21lcyBpbiB0byB0aGUgcHJvY2Vzc29yLCB3ZSB3aWxsIGRpc2FibGUgaXQKLSAqIGFuZCBhY2sgaXQgdG8gcHVzaCBpdCBvZmYgdG8gYW5vdGhlciBDUFUsIHNvIGp1c3QgYWNjZXB0IHRoZSBtYXNrIGhlcmUuCi0gKgotICogQ2hhbmdlIGZyb20gZGlzYWJsZSB0byBlbmFibGU6Ci0gKgotICogY2hhbmdlIHRoZSBtYXNrIGFuZCB0aGVuIGRvIGFuIGludGVycnVwdCBlbmFibGUgQ1BJIHRvIHJlLWVuYWJsZSBvbgotICogdGhlIHNlbGVjdGVkIHByb2Nlc3NvcnMgKi8KLQotdm9pZCBzZXRfdmljX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQkvKiBPbmx5IGV4dGVuZGVkIHByb2Nlc3NvcnMgaGFuZGxlIGludGVycnVwdHMgKi8KLQl1bnNpZ25lZCBsb25nIHJlYWxfbWFzazsKLQl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gMSA8PCBpcnE7Ci0JaW50IGNwdTsKLQotCXJlYWxfbWFzayA9IGNwdXNfYWRkcigqbWFzaylbMF0gJiB2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzOwotCi0JaWYgKGNwdXNfYWRkcigqbWFzaylbMF0gPT0gMCkKLQkJLyogY2FuJ3QgaGF2ZSBubyBDUFVzIHRvIGFjY2VwdCB0aGUgaW50ZXJydXB0IC0tIGV4dHJlbWVseQotCQkgKiBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuICovCi0JCXJldHVybjsKLQotCWlmIChpcnEgPT0gMCkKLQkJLyogY2FuJ3QgY2hhbmdlIHRoZSBhZmZpbml0eSBvZiB0aGUgdGltZXIgSVJRLiAgVGhpcwotCQkgKiBpcyBkdWUgdG8gdGhlIGNvbnN0cmFpbnQgaW4gdGhlIHZveWFnZXIKLQkJICogYXJjaGl0ZWN0dXJlIHRoYXQgdGhlIENQSSBhbHNvIGNvbWVzIGluIG9uIGFuZCBJUlEKLQkJICogbGluZSBhbmQgd2UgaGF2ZSBjaG9zZW4gSVJRMCBmb3IgdGhpcy4gIElmIHlvdQotCQkgKiByYWlzZSB0aGUgbWFzayBvbiB0aGlzIGludGVycnVwdCwgdGhlIHByb2Nlc3NvcgotCQkgKiB3aWxsIG5vLWxvbmdlciBiZSBhYmxlIHRvIGFjY2VwdCBWSUMgQ1BJcyAqLwotCQlyZXR1cm47Ci0KLQlpZiAoaXJxID49IDMyKQotCQkvKiBZb3UgY2FuIG9ubHkgaGF2ZSAzMiBpbnRlcnJ1cHRzIGluIGEgdm95YWdlciBzeXN0ZW0KLQkJICogKGFuZCAzMiBvbmx5IGlmIHlvdSBoYXZlIGEgc2Vjb25kYXJ5IG1pY3JvY2hhbm5lbAotCQkgKiBidXMpICovCi0JCXJldHVybjsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCXVuc2lnbmVkIGxvbmcgY3B1X21hc2sgPSAxIDw8IGNwdTsKLQotCQlpZiAoY3B1X21hc2sgJiByZWFsX21hc2spIHsKLQkJCS8qIGVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGlzIGNwdSAqLwotCQkJY3B1X2lycV9hZmZpbml0eVtjcHVdIHw9IGlycV9tYXNrOwotCQl9IGVsc2UgewotCQkJLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGlzIGNwdSAqLwotCQkJY3B1X2lycV9hZmZpbml0eVtjcHVdICY9IH5pcnFfbWFzazsKLQkJfQotCX0KLQkvKiB0aGlzIGlzIG1hZ2ljLCB3ZSBub3cgaGF2ZSB0aGUgY29ycmVjdCBhZmZpbml0eSBtYXBzLCBzbwotCSAqIGVuYWJsZSB0aGUgaW50ZXJydXB0LiAgVGhpcyB3aWxsIHNlbmQgYW4gZW5hYmxlIENQSSB0bwotCSAqIHRob3NlIENQVXMgd2hvIG5lZWQgdG8gZW5hYmxlIGl0IGluIHRoZWlyIGxvY2FsIG1hc2tzLAotCSAqIGNhdXNpbmcgdGhlbSB0byBjb3JyZWN0IGZvciB0aGUgbmV3IGFmZmluaXR5IC4gSWYgdGhlCi0JICogaW50ZXJydXB0IGlzIGN1cnJlbnRseSBnbG9iYWxseSBkaXNhYmxlZCwgaXQgd2lsbCBzaW1wbHkgYmUKLQkgKiBkaXNhYmxlZCBhZ2FpbiBhcyBpdCBjb21lcyBpbiAodm95YWdlciBsYXp5IGRpc2FibGUpLiAgSWYKLQkgKiB0aGUgYWZmaW5pdHkgbWFwIGlzIHRpZ2h0ZW5lZCB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gYQotCSAqIGNwdSwgaXQgd2lsbCBiZSBwdXNoZWQgb2ZmIHdoZW4gaXQgY29tZXMgaW4gKi8KLQl1bm1hc2tfdmljX2lycShpcnEpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmIChpcnEgJiA4KSB7Ci0JCW91dGIoMHg2MiwgMHgyMCk7CS8qIFNwZWNpZmljIEVPSSB0byBjYXNjYWRlICovCi0JCW91dGIoMHg2MCB8IChpcnEgJiA3KSwgMHhBMCk7Ci0JfSBlbHNlIHsKLQkJb3V0YigweDYwIHwgKGlycSAmIDcpLCAweDIwKTsKLQl9Ci19Ci0KLS8qIGVuYWJsZSB0aGUgQ1BJcy4gIEluIHRoZSBWSUMsIHRoZSBDUElzIGFyZSBkZWxpdmVyZWQgYnkgdGhlIDgyNTkKLSAqIGJ1dCBhcmUgbm90IHZlY3RvcmVkIGJ5IGl0LiAgVGhpcyBtZWFucyB0aGF0IHRoZSA4MjU5IG1hc2sgbXVzdCBiZQotICogbG93ZXJlZCB0byByZWNlaXZlIHRoZW0gKi8KLXN0YXRpYyBfX2luaXQgdm9pZCB2aWNfZW5hYmxlX2NwaSh2b2lkKQotewotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JLyoganVzdCB0YWtlIGEgY29weSBvZiB0aGUgY3VycmVudCBtYXNrIChub3AgZm9yIGJvb3QgY3B1KSAqLwotCXZpY19pcnFfbWFza1tjcHVdID0gdmljX2lycV9tYXNrW2Jvb3RfY3B1X2lkXTsKLQotCWVuYWJsZV9sb2NhbF92aWNfaXJxKFZJQ19DUElfTEVWRUwwKTsKLQllbmFibGVfbG9jYWxfdmljX2lycShWSUNfQ1BJX0xFVkVMMSk7Ci0JLyogZm9yIHN5cyBpbnQgYW5kIGNtbiBpbnQgKi8KLQllbmFibGVfbG9jYWxfdmljX2lycSg3KTsKLQotCWlmIChpc19jcHVfcXVhZCgpKSB7Ci0JCW91dGIoUUlDX0RFRkFVTFRfTUFTSzAsIFFJQ19NQVNLX1JFR0lTVEVSMCk7Ci0JCW91dGIoUUlDX0NQSV9FTkFCTEUsIFFJQ19NQVNLX1JFR0lTVEVSMSk7Ci0JCVZERUJVRygoIlZPWUFHRVIgU01QOiBRSUMgRU5BQkxFIENQSTogQ1BVJWQ6IE1BU0sgMHgleFxuIiwKLQkJCWNwdSwgUUlDX0NQSV9FTkFCTEUpKTsKLQl9Ci0KLQlWREVCVUcoKCJWT1lBR0VSIFNNUDogRU5BQkxFIENQSTogQ1BVJWQ6IE1BU0sgMHgleFxuIiwKLQkJY3B1LCB2aWNfaXJxX21hc2tbY3B1XSkpOwotfQotCi12b2lkIHZveWFnZXJfc21wX2R1bXAoKQotewotCWludCBvbGRfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHU7Ci0KLQkvKiBkdW1wIHRoZSBpbnRlcnJ1cHQgbWFza3Mgb2YgZWFjaCBwcm9jZXNzb3IgKi8KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlfX3UxNiBpbXIsIGlzciwgaXJyOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJb3V0YihWSUNfQ1BVX01BU1FVRVJBREVfRU5BQkxFIHwgY3B1LCBWSUNfUFJPQ0VTU09SX0lEKTsKLQkJaW1yID0gKGluYigweGExKSA8PCA4KSB8IGluYigweDIxKTsKLQkJb3V0YigweDBhLCAweGEwKTsKLQkJaXJyID0gaW5iKDB4YTApIDw8IDg7Ci0JCW91dGIoMHgwYSwgMHgyMCk7Ci0JCWlyciB8PSBpbmIoMHgyMCk7Ci0JCW91dGIoMHgwYiwgMHhhMCk7Ci0JCWlzciA9IGluYigweGEwKSA8PCA4OwotCQlvdXRiKDB4MGIsIDB4MjApOwotCQlpc3IgfD0gaW5iKDB4MjApOwotCQlvdXRiKG9sZF9jcHUsIFZJQ19QUk9DRVNTT1JfSUQpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXByaW50aygiXHRDUFUlZDogbWFzaz0weCV4LCBJTVI9MHgleCwgSVJSPTB4JXgsIElTUj0weCV4XG4iLAotCQkgICAgICAgY3B1LCB2aWNfaXJxX21hc2tbY3B1XSwgaW1yLCBpcnIsIGlzcik7Ci0jaWYgMAotCQkvKiBUaGVzZSBsaW5lcyBhcmUgcHV0IGluIHRvIHRyeSB0byB1bnN0aWNrIGFuIHVuIGFjaydkIGlycSAqLwotCQlpZiAoaXNyICE9IDApIHsKLQkJCWludCBpcnE7Ci0JCQlmb3IgKGlycSA9IDA7IGlycSA8IDE2OyBpcnErKykgewotCQkJCWlmIChpc3IgJiAoMSA8PCBpcnEpKSB7Ci0JCQkJCXByaW50aygiXHRDUFUlZDogYWNrIGlycSAlZFxuIiwKLQkJCQkJICAgICAgIGNwdSwgaXJxKTsKLQkJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJCQlvdXRiKFZJQ19DUFVfTUFTUVVFUkFERV9FTkFCTEUgfCBjcHUsCi0JCQkJCSAgICAgVklDX1BST0NFU1NPUl9JRCk7Ci0JCQkJCWFja192aWNfaXJxKGlycSk7Ci0JCQkJCW91dGIob2xkX2NwdSwgVklDX1BST0NFU1NPUl9JRCk7Ci0JCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLX0KLQotdm9pZCBzbXBfdm95YWdlcl9wb3dlcl9vZmYodm9pZCAqZHVtbXkpCi17Ci0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBib290X2NwdV9pZCkKLQkJdm95YWdlcl9wb3dlcl9vZmYoKTsKLQllbHNlCi0JCXNtcF9zdG9wX2NwdV9mdW5jdGlvbihOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHZveWFnZXJfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JLyogRklYTUU6IGlnbm9yZSBtYXhfY3B1cyBmb3Igbm93ICovCi0Jc21wX2Jvb3RfY3B1cygpOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgdm95YWdlcl9zbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQotewotCWluaXRfZ2R0KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0Jc3dpdGNoX3RvX25ld19nZHQoKTsKLQotCWNwdV9vbmxpbmVfbWFwID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQljcHVfY2FsbG91dF9tYXAgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWNwdV9jYWxsaW5fbWFwID0gQ1BVX01BU0tfTk9ORTsKLQljcHVfcHJlc2VudF9tYXAgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi19Ci0KLXN0YXRpYyBpbnQgX19jcHVpbml0IHZveWFnZXJfY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JLyogVGhpcyBvbmx5IHdvcmtzIGF0IGJvb3QgZm9yIHg4Ni4gIFNlZSAicmV3cml0ZSIgYWJvdmUuICovCi0JaWYgKGNwdV9pc3NldChjcHUsIHNtcF9jb21tZW5jZWRfbWFzaykpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JLyogSW4gY2FzZSBvbmUgZGlkbid0IGNvbWUgdXAgKi8KLQlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9jYWxsaW5fbWFwKSkKLQkJcmV0dXJuIC1FSU87Ci0JLyogVW5sZWFzaCB0aGUgQ1BVISAqLwotCWNwdV9zZXQoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spOwotCXdoaWxlICghY3B1X29ubGluZShjcHUpKQotCQltYigpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdm95YWdlcl9zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQl6YXBfbG93X21hcHBpbmdzKCk7Ci19Ci0KLXZvaWQgX19pbml0IHNtcF9zZXR1cF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXg4Nl93cml0ZV9wZXJjcHUoY3B1X251bWJlciwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotfQotCi1zdGF0aWMgdm9pZCB2b3lhZ2VyX3NlbmRfY2FsbF9mdW5jKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjYWxsbWFzaykKLXsKLQlfX3UzMiBtYXNrID0gY3B1c19hZGRyKCpjYWxsbWFzaylbMF0gJiB+KDEgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzZW5kX0NQSShtYXNrLCBWSUNfQ0FMTF9GVU5DVElPTl9DUEkpOwotfQotCi1zdGF0aWMgdm9pZCB2b3lhZ2VyX3NlbmRfY2FsbF9mdW5jX3NpbmdsZShpbnQgY3B1KQotewotCXNlbmRfQ1BJKDEgPDwgY3B1LCBWSUNfQ0FMTF9GVU5DVElPTl9TSU5HTEVfQ1BJKTsKLX0KLQotc3RydWN0IHNtcF9vcHMgc21wX29wcyA9IHsKLQkuc21wX3ByZXBhcmVfYm9vdF9jcHUgPSB2b3lhZ2VyX3NtcF9wcmVwYXJlX2Jvb3RfY3B1LAotCS5zbXBfcHJlcGFyZV9jcHVzID0gdm95YWdlcl9zbXBfcHJlcGFyZV9jcHVzLAotCS5jcHVfdXAgPSB2b3lhZ2VyX2NwdV91cCwKLQkuc21wX2NwdXNfZG9uZSA9IHZveWFnZXJfc21wX2NwdXNfZG9uZSwKLQotCS5zbXBfc2VuZF9zdG9wID0gdm95YWdlcl9zbXBfc2VuZF9zdG9wLAotCS5zbXBfc2VuZF9yZXNjaGVkdWxlID0gdm95YWdlcl9zbXBfc2VuZF9yZXNjaGVkdWxlLAotCi0JLnNlbmRfY2FsbF9mdW5jX2lwaSA9IHZveWFnZXJfc2VuZF9jYWxsX2Z1bmMsCi0JLnNlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkgPSB2b3lhZ2VyX3NlbmRfY2FsbF9mdW5jX3NpbmdsZSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl90aHJlYWQuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTQ2NGEyLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLQotLyogQ29weXJpZ2h0IChDKSAyMDAxCi0gKgotICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCi0gKgotICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIG1hY2hpbmUgc3RhdHVzIG1vbml0b3IgdGhyZWFkIGZvciB0aGUKLSAqIHZveWFnZXIgYXJjaGl0ZWN0dXJlLiAgVGhpcyBhbGxvd3MgdXMgdG8gbW9uaXRvciB0aGUgbWFjaGluZQotICogZW52aXJvbm1lbnQgKHRlbXAsIHZvbHRhZ2UsIGZhbiBmdW5jdGlvbikgYW5kIHRoZSBmcm9udCBwYW5lbCBhbmQKLSAqIGludGVybmFsIFVQUy4gIElmIGEgZmF1bHQgaXMgZGV0ZWN0ZWQsIHRoaXMgdGhyZWFkIHRha2VzIGNvcnJlY3RpdmUKLSAqIGFjdGlvbiAodXN1YWxseSBqdXN0IGluZm9ybWluZyBpbml0KQotICogKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KLSNpbmNsdWRlIDxhc20vdmljLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0KLXN0cnVjdCB0YXNrX3N0cnVjdCAqdm95YWdlcl90aHJlYWQ7Ci1zdGF0aWMgX191OCBzZXRfdGltZW91dDsKLQotc3RhdGljIGludCBleGVjdXRlKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLQlpbnQgcmV0OwotCi0JY2hhciAqZW52cFtdID0gewotCQkiSE9NRT0vIiwKLQkJIlRFUk09bGludXgiLAotCQkiUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIsCi0JCU5VTEwsCi0JfTsKLQljaGFyICphcmd2W10gPSB7Ci0JCSIvYmluL2Jhc2giLAotCQkiLWMiLAotCQkoY2hhciAqKXN0cmluZywKLQkJTlVMTCwKLQl9OwotCi0JaWYgKChyZXQgPQotCSAgICAgY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LCBlbnZwLCBVTUhfV0FJVF9QUk9DKSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZveWFnZXIgZmFpbGVkIHRvIHJ1biBcIiVzXCI6ICVpXG4iLCBzdHJpbmcsCi0JCSAgICAgICByZXQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBjaGVja19mcm9tX2tlcm5lbCh2b2lkKQotewotCWlmICh2b3lhZ2VyX3N0YXR1cy5zd2l0Y2hfb2ZmKSB7Ci0KLQkJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB2aWEgcHJvYyAqLwotCQlleGVjdXRlKCJ1bWFzayA2MDA7IGVjaG8gMCA+IC9ldGMvaW5pdHJ1bmx2bDsga2lsbCAtSFVQIDEiKTsKLQl9IGVsc2UgaWYgKHZveWFnZXJfc3RhdHVzLnBvd2VyX2ZhaWwpIHsKLQkJVkRFQlVHKCgiVm95YWdlciBkYWVtb24gZGV0ZWN0ZWQgQUMgcG93ZXIgZmFpbHVyZVxuIikpOwotCi0JCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb25maWd1cmVhYmxlIHZpYSBwcm9jICovCi0JCWV4ZWN1dGUoInVtYXNrIDYwMDsgZWNobyBGID4gL2V0Yy9wb3dlcnN0YXR1czsga2lsbCAtUFdSIDEiKTsKLQkJc2V0X3RpbWVvdXQgPSAxOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY2hlY2tfY29udGludWluZ19jb25kaXRpb24odm9pZCkKLXsKLQlpZiAodm95YWdlcl9zdGF0dXMucG93ZXJfZmFpbCkgewotCQlfX3U4IGRhdGE7Ci0JCXZveWFnZXJfY2F0X3BzaShWT1lBR0VSX1BTSV9TVUJSRUFELAotCQkJCVZPWUFHRVJfUFNJX0FDX0ZBSUxfUkVHLCAmZGF0YSk7Ci0JCWlmICgoZGF0YSAmIDB4MWYpID09IDApIHsKLQkJCS8qIGFsbCBwb3dlciByZXN0b3JlZCAqLwotCQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCQkgICAgICAgIlZPWUFHRVIgQUMgcG93ZXIgcmVzdG9yZWQsIGNhbmNlbGxpbmcgc2h1dGRvd25cbiIpOwotCQkJLyogRklYTUU6IHNob3VsZCBiZSB1c2VyIGNvbmZpZ3VyZWFibGUgKi8KLQkJCWV4ZWN1dGUKLQkJCSAgICAoInVtYXNrIDYwMDsgZWNobyBPID4gL2V0Yy9wb3dlcnN0YXR1czsga2lsbCAtUFdSIDEiKTsKLQkJCXNldF90aW1lb3V0ID0gMDsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCB0aHJlYWQodm9pZCAqdW51c2VkKQotewotCXByaW50ayhLRVJOX05PVElDRSAiVm95YWdlciBzdGFydGluZyBtb25pdG9yIHRocmVhZFxuIik7Ci0KLQlmb3IgKDs7KSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoc2V0X3RpbWVvdXQgPyBIWiA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQotCQlWREVCVUcoKCJWb3lhZ2VyIERhZW1vbiBhd29rZW5cbiIpKTsKLQkJaWYgKHZveWFnZXJfc3RhdHVzLnJlcXVlc3RfZnJvbV9rZXJuZWwgPT0gMCkgewotCQkJLyogcHJvYmFibHkgYXdva2VuIGZyb20gdGltZW91dCAqLwotCQkJY2hlY2tfY29udGludWluZ19jb25kaXRpb24oKTsKLQkJfSBlbHNlIHsKLQkJCWNoZWNrX2Zyb21fa2VybmVsKCk7Ci0JCQl2b3lhZ2VyX3N0YXR1cy5yZXF1ZXN0X2Zyb21fa2VybmVsID0gMDsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgdm95YWdlcl90aHJlYWRfc3RhcnQodm9pZCkKLXsKLQl2b3lhZ2VyX3RocmVhZCA9IGt0aHJlYWRfcnVuKHRocmVhZCwgTlVMTCwgImt2b3lhZ2VyZCIpOwotCWlmIChJU19FUlIodm95YWdlcl90aHJlYWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIlZveWFnZXI6IEZhaWxlZCB0byBjcmVhdGUgc3lzdGVtIG1vbml0b3IgdGhyZWFkLlxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHZveWFnZXJfdGhyZWFkKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB2b3lhZ2VyX3RocmVhZF9zdG9wKHZvaWQpCi17Ci0Ja3RocmVhZF9zdG9wKHZveWFnZXJfdGhyZWFkKTsKLX0KLQotbW9kdWxlX2luaXQodm95YWdlcl90aHJlYWRfc3RhcnQpOwotbW9kdWxlX2V4aXQodm95YWdlcl90aHJlYWRfc3RvcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYXRoLWVtdS9nZXRfYWRkcmVzcy5jIGIvYXJjaC94ODYvbWF0aC1lbXUvZ2V0X2FkZHJlc3MuYwppbmRleCA0MjBiM2I2Li42ZWY1ZTk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYXRoLWVtdS9nZXRfYWRkcmVzcy5jCisrKyBiL2FyY2gveDg2L21hdGgtZW11L2dldF9hZGRyZXNzLmMKQEAgLTE1MCwxMSArMTUwLDkgQEAKICNlbmRpZiAvKiBQQVJBTk9JRCAqLwogCiAJc3dpdGNoIChzZWdtZW50KSB7Ci0JCS8qIGdzIGlzbid0IHVzZWQgYnkgdGhlIGtlcm5lbCwgc28gaXQgc3RpbGwgaGFzIGl0cwotCQkgICB1c2VyLXNwYWNlIHZhbHVlLiAqLwogCWNhc2UgUFJFRklYX0dTXyAtIDE6Ci0JCS8qIE4uQi4gLSBtb3ZsICVzZWcsIG1lbSBpcyBhIDIgYnl0ZSB3cml0ZSByZWdhcmRsZXNzIG9mIHByZWZpeCAqLwotCQlzYXZlc2VnbWVudChncywgYWRkci0+c2VsZWN0b3IpOworCQkvKiB1c2VyIGdzIGhhbmRsaW5nIGNhbiBiZSBsYXp5LCB1c2Ugc3BlY2lhbCBhY2Nlc3NvcnMgKi8KKwkJYWRkci0+c2VsZWN0b3IgPSBnZXRfdXNlcl9ncyhGUFVfaW5mby0+cmVncyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWFkZHItPnNlbGVjdG9yID0gUE1fUkVHXyhzZWdtZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggZDhjYzk2YTIuLjA4NTM3NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L21tL01ha2VmaWxlCkBAIC0xLDYgKzEsOCBAQAotb2JqLXkJOj0gIGluaXRfJChCSVRTKS5vIGZhdWx0Lm8gaW9yZW1hcC5vIGV4dGFibGUubyBwYWdlYXR0ci5vIG1tYXAubyBcCitvYmoteQk6PSAgaW5pdC5vIGluaXRfJChCSVRTKS5vIGZhdWx0Lm8gaW9yZW1hcC5vIGV4dGFibGUubyBwYWdlYXR0ci5vIG1tYXAubyBcCiAJICAgIHBhdC5vIHBndGFibGUubyBndXAubwogCitvYmotJChDT05GSUdfU01QKQkJKz0gdGxiLm8KKwogb2JqLSQoQ09ORklHX1g4Nl8zMikJCSs9IHBndGFibGVfMzIubyBpb21hcF8zMi5vCiAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2V4dGFibGUuYyBiL2FyY2gveDg2L21tL2V4dGFibGUuYwppbmRleCA3ZThkYjUzLi42MWI0MWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC94ODYvbW0vZXh0YWJsZS5jCkBAIC0yMyw2ICsyMywxMiBAQAogCiAJZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5pcCk7CiAJaWYgKGZpeHVwKSB7CisJCS8qIElmIGZpeHVwIGlzIGxlc3MgdGhhbiAxNiwgaXQgbWVhbnMgdWFjY2VzcyBlcnJvciAqLworCQlpZiAoZml4dXAtPmZpeHVwIDwgMTYpIHsKKwkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dWFjY2Vzc19lcnIgPSAtRUZBVUxUOworCQkJcmVncy0+aXAgKz0gZml4dXAtPmZpeHVwOworCQkJcmV0dXJuIDE7CisJCX0KIAkJcmVncy0+aXAgPSBmaXh1cC0+Zml4dXA7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGM3NmVmMWQuLmEwM2I3MjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMSw3MyArMSw3OSBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQgSW5jLiwgSW5nbyBNb2xuYXIKICAqLwotCi0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4JCS8qIEZvciB1bmJsYW5rX3NjcmVlbigpICovCisjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4JCS8qIGZvciBtYXhfbG93X3BmbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAKIC8qCi0gKiBQYWdlIGZhdWx0IGVycm9yIGNvZGUgYml0cwotICoJYml0IDAgPT0gMCBtZWFucyBubyBwYWdlIGZvdW5kLCAxIG1lYW5zIHByb3RlY3Rpb24gZmF1bHQKLSAqCWJpdCAxID09IDAgbWVhbnMgcmVhZCwgMSBtZWFucyB3cml0ZQotICoJYml0IDIgPT0gMCBtZWFucyBrZXJuZWwsIDEgbWVhbnMgdXNlci1tb2RlCi0gKgliaXQgMyA9PSAxIG1lYW5zIHVzZSBvZiByZXNlcnZlZCBiaXQgZGV0ZWN0ZWQKLSAqCWJpdCA0ID09IDEgbWVhbnMgZmF1bHQgd2FzIGFuIGluc3RydWN0aW9uIGZldGNoCisgKiBQYWdlIGZhdWx0IGVycm9yIGNvZGUgYml0czoKKyAqCisgKiAgIGJpdCAwID09CSAwOiBubyBwYWdlIGZvdW5kCTE6IHByb3RlY3Rpb24gZmF1bHQKKyAqICAgYml0IDEgPT0JIDA6IHJlYWQgYWNjZXNzCQkxOiB3cml0ZSBhY2Nlc3MKKyAqICAgYml0IDIgPT0JIDA6IGtlcm5lbC1tb2RlIGFjY2VzcwkxOiB1c2VyLW1vZGUgYWNjZXNzCisgKiAgIGJpdCAzID09CQkJCTE6IHVzZSBvZiByZXNlcnZlZCBiaXQgZGV0ZWN0ZWQKKyAqICAgYml0IDQgPT0JCQkJMTogZmF1bHQgd2FzIGFuIGluc3RydWN0aW9uIGZldGNoCiAgKi8KLSNkZWZpbmUgUEZfUFJPVAkJKDE8PDApCi0jZGVmaW5lIFBGX1dSSVRFCSgxPDwxKQotI2RlZmluZSBQRl9VU0VSCQkoMTw8MikKLSNkZWZpbmUgUEZfUlNWRAkJKDE8PDMpCi0jZGVmaW5lIFBGX0lOU1RSCSgxPDw0KQorZW51bSB4ODZfcGZfZXJyb3JfY29kZSB7CiAKKwlQRl9QUk9UCQk9CQkxIDw8IDAsCisJUEZfV1JJVEUJPQkJMSA8PCAxLAorCVBGX1VTRVIJCT0JCTEgPDwgMiwKKwlQRl9SU1ZECQk9CQkxIDw8IDMsCisJUEZfSU5TVFIJPQkJMSA8PCA0LAorfTsKKworLyoKKyAqIFJldHVybnMgMCBpZiBtbWlvdHJhY2UgaXMgZGlzYWJsZWQsIG9yIGlmIHRoZSBmYXVsdCBpcyBub3QKKyAqIGhhbmRsZWQgYnkgbW1pb3RyYWNlOgorICovCiBzdGF0aWMgaW5saW5lIGludCBrbW1pb19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyKQogewotI2lmZGVmIENPTkZJR19NTUlPVFJBQ0UKIAlpZiAodW5saWtlbHkoaXNfa21taW9fYWN0aXZlKCkpKQogCQlpZiAoa21taW9faGFuZGxlcihyZWdzLCBhZGRyKSA9PSAxKQogCQkJcmV0dXJuIC0xOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotI2lmZGVmIENPTkZJR19LUFJPQkVTCiAJaW50IHJldCA9IDA7CiAKIAkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpKSB7CisJaWYgKGtwcm9iZXNfYnVpbHRfaW4oKSAmJiAhdXNlcl9tb2RlX3ZtKHJlZ3MpKSB7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAxNCkpCiAJCQlyZXQgPSAxOwpAQCAtNzUsMjkgKzgxLDc2IEBACiAJfQogCiAJcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogLyoKLSAqIFg4Nl8zMgotICogU29tZXRpbWVzIEFNRCBBdGhsb24vT3B0ZXJvbiBDUFVzIHJlcG9ydCBpbnZhbGlkIGV4Y2VwdGlvbnMgb24gcHJlZmV0Y2guCi0gKiBDaGVjayB0aGF0IGhlcmUgYW5kIGlnbm9yZSBpdC4KKyAqIFByZWZldGNoIHF1aXJrczoKICAqCi0gKiBYODZfNjQKLSAqIFNvbWV0aW1lcyB0aGUgQ1BVIHJlcG9ydHMgaW52YWxpZCBleGNlcHRpb25zIG9uIHByZWZldGNoLgotICogQ2hlY2sgdGhhdCBoZXJlIGFuZCBpZ25vcmUgaXQuCisgKiAzMi1iaXQgbW9kZToKICAqCi0gKiBPcGNvZGUgY2hlY2tlciBiYXNlZCBvbiBjb2RlIGJ5IFJpY2hhcmQgQnJ1bm5lcgorICogICBTb21ldGltZXMgQU1EIEF0aGxvbi9PcHRlcm9uIENQVXMgcmVwb3J0IGludmFsaWQgZXhjZXB0aW9ucyBvbiBwcmVmZXRjaC4KKyAqICAgQ2hlY2sgdGhhdCBoZXJlIGFuZCBpZ25vcmUgaXQuCisgKgorICogNjQtYml0IG1vZGU6CisgKgorICogICBTb21ldGltZXMgdGhlIENQVSByZXBvcnRzIGludmFsaWQgZXhjZXB0aW9ucyBvbiBwcmVmZXRjaC4KKyAqICAgQ2hlY2sgdGhhdCBoZXJlIGFuZCBpZ25vcmUgaXQuCisgKgorICogT3Bjb2RlIGNoZWNrZXIgYmFzZWQgb24gY29kZSBieSBSaWNoYXJkIEJydW5uZXIuCiAgKi8KLXN0YXRpYyBpbnQgaXNfcHJlZmV0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK3N0YXRpYyBpbmxpbmUgaW50CitjaGVja19wcmVmZXRjaF9vcGNvZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGNoYXIgKmluc3RyLAorCQkgICAgICB1bnNpZ25lZCBjaGFyIG9wY29kZSwgaW50ICpwcmVmZXRjaCkKIHsKLQl1bnNpZ25lZCBjaGFyICppbnN0cjsKLQlpbnQgc2Nhbl9tb3JlID0gMTsKLQlpbnQgcHJlZmV0Y2ggPSAwOworCXVuc2lnbmVkIGNoYXIgaW5zdHJfaGkgPSBvcGNvZGUgJiAweGYwOworCXVuc2lnbmVkIGNoYXIgaW5zdHJfbG8gPSBvcGNvZGUgJiAweDBmOworCisJc3dpdGNoIChpbnN0cl9oaSkgeworCWNhc2UgMHgyMDoKKwljYXNlIDB4MzA6CisJCS8qCisJCSAqIFZhbHVlcyAweDI2LDB4MkUsMHgzNiwweDNFIGFyZSB2YWxpZCB4ODYgcHJlZml4ZXMuCisJCSAqIEluIFg4Nl82NCBsb25nIG1vZGUsIHRoZSBDUFUgd2lsbCBzaWduYWwgaW52YWxpZAorCQkgKiBvcGNvZGUgaWYgc29tZSBvZiB0aGVzZSBwcmVmaXhlcyBhcmUgcHJlc2VudCBzbworCQkgKiBYODZfNjQgd2lsbCBuZXZlciBnZXQgaGVyZSBhbnl3YXkKKwkJICovCisJCXJldHVybiAoKGluc3RyX2xvICYgNykgPT0gMHg2KTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJY2FzZSAweDQwOgorCQkvKgorCQkgKiBJbiBBTUQ2NCBsb25nIG1vZGUgMHg0MC4uMHg0RiBhcmUgdmFsaWQgUkVYIHByZWZpeGVzCisJCSAqIE5lZWQgdG8gZmlndXJlIG91dCB1bmRlciB3aGF0IGluc3RydWN0aW9uIG1vZGUgdGhlCisJCSAqIGluc3RydWN0aW9uIHdhcyBpc3N1ZWQuIENvdWxkIGNoZWNrIHRoZSBMRFQgZm9yIGxtLAorCQkgKiBidXQgZm9yIG5vdyBpdCdzIGdvb2QgZW5vdWdoIHRvIGFzc3VtZSB0aGF0IGxvbmcKKwkJICogbW9kZSBvbmx5IHVzZXMgd2VsbCBrbm93biBzZWdtZW50cyBvciBrZXJuZWwuCisJCSAqLworCQlyZXR1cm4gKCF1c2VyX21vZGUocmVncykpIHx8IChyZWdzLT5jcyA9PSBfX1VTRVJfQ1MpOworI2VuZGlmCisJY2FzZSAweDYwOgorCQkvKiAweDY0IHRocnUgMHg2NyBhcmUgdmFsaWQgcHJlZml4ZXMgaW4gYWxsIG1vZGVzLiAqLworCQlyZXR1cm4gKGluc3RyX2xvICYgMHhDKSA9PSAweDQ7CisJY2FzZSAweEYwOgorCQkvKiAweEYwLCAweEYyLCAweEYzIGFyZSB2YWxpZCBwcmVmaXhlcyBpbiBhbGwgbW9kZXMuICovCisJCXJldHVybiAhaW5zdHJfbG8gfHwgKGluc3RyX2xvPj4xKSA9PSAxOworCWNhc2UgMHgwMDoKKwkJLyogUHJlZmV0Y2ggaW5zdHJ1Y3Rpb24gaXMgMHgwRjBEIG9yIDB4MEYxOCAqLworCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoaW5zdHIsIG9wY29kZSkpCisJCQlyZXR1cm4gMDsKKworCQkqcHJlZmV0Y2ggPSAoaW5zdHJfbG8gPT0gMHhGKSAmJgorCQkJKG9wY29kZSA9PSAweDBEIHx8IG9wY29kZSA9PSAweDE4KTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50Citpc19wcmVmZXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CiAJdW5zaWduZWQgY2hhciAqbWF4X2luc3RyOworCXVuc2lnbmVkIGNoYXIgKmluc3RyOworCWludCBwcmVmZXRjaCA9IDA7CiAKIAkvKgogCSAqIElmIGl0IHdhcyBhIGV4ZWMgKGluc3RydWN0aW9uIGZldGNoKSBmYXVsdCBvbiBOWCBwYWdlLCB0aGVuCkBAIC0xMDYsMTY0ICsxNTksNDIgQEAKIAlpZiAoZXJyb3JfY29kZSAmIFBGX0lOU1RSKQogCQlyZXR1cm4gMDsKIAotCWluc3RyID0gKHVuc2lnbmVkIGNoYXIgKiljb252ZXJ0X2lwX3RvX2xpbmVhcihjdXJyZW50LCByZWdzKTsKKwlpbnN0ciA9ICh2b2lkICopY29udmVydF9pcF90b19saW5lYXIoY3VycmVudCwgcmVncyk7CiAJbWF4X2luc3RyID0gaW5zdHIgKyAxNTsKIAogCWlmICh1c2VyX21vZGUocmVncykgJiYgaW5zdHIgPj0gKHVuc2lnbmVkIGNoYXIgKilUQVNLX1NJWkUpCiAJCXJldHVybiAwOwogCi0Jd2hpbGUgKHNjYW5fbW9yZSAmJiBpbnN0ciA8IG1heF9pbnN0cikgeworCXdoaWxlIChpbnN0ciA8IG1heF9pbnN0cikgewogCQl1bnNpZ25lZCBjaGFyIG9wY29kZTsKLQkJdW5zaWduZWQgY2hhciBpbnN0cl9oaTsKLQkJdW5zaWduZWQgY2hhciBpbnN0cl9sbzsKIAogCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoaW5zdHIsIG9wY29kZSkpCiAJCQlicmVhazsKIAotCQlpbnN0cl9oaSA9IG9wY29kZSAmIDB4ZjA7Ci0JCWluc3RyX2xvID0gb3Bjb2RlICYgMHgwZjsKIAkJaW5zdHIrKzsKIAotCQlzd2l0Y2ggKGluc3RyX2hpKSB7Ci0JCWNhc2UgMHgyMDoKLQkJY2FzZSAweDMwOgotCQkJLyoKLQkJCSAqIFZhbHVlcyAweDI2LDB4MkUsMHgzNiwweDNFIGFyZSB2YWxpZCB4ODYgcHJlZml4ZXMuCi0JCQkgKiBJbiBYODZfNjQgbG9uZyBtb2RlLCB0aGUgQ1BVIHdpbGwgc2lnbmFsIGludmFsaWQKLQkJCSAqIG9wY29kZSBpZiBzb21lIG9mIHRoZXNlIHByZWZpeGVzIGFyZSBwcmVzZW50IHNvCi0JCQkgKiBYODZfNjQgd2lsbCBuZXZlciBnZXQgaGVyZSBhbnl3YXkKLQkJCSAqLwotCQkJc2Nhbl9tb3JlID0gKChpbnN0cl9sbyAmIDcpID09IDB4Nik7CisJCWlmICghY2hlY2tfcHJlZmV0Y2hfb3Bjb2RlKHJlZ3MsIGluc3RyLCBvcGNvZGUsICZwcmVmZXRjaCkpCiAJCQlicmVhazsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCWNhc2UgMHg0MDoKLQkJCS8qCi0JCQkgKiBJbiBBTUQ2NCBsb25nIG1vZGUgMHg0MC4uMHg0RiBhcmUgdmFsaWQgUkVYIHByZWZpeGVzCi0JCQkgKiBOZWVkIHRvIGZpZ3VyZSBvdXQgdW5kZXIgd2hhdCBpbnN0cnVjdGlvbiBtb2RlIHRoZQotCQkJICogaW5zdHJ1Y3Rpb24gd2FzIGlzc3VlZC4gQ291bGQgY2hlY2sgdGhlIExEVCBmb3IgbG0sCi0JCQkgKiBidXQgZm9yIG5vdyBpdCdzIGdvb2QgZW5vdWdoIHRvIGFzc3VtZSB0aGF0IGxvbmcKLQkJCSAqIG1vZGUgb25seSB1c2VzIHdlbGwga25vd24gc2VnbWVudHMgb3Iga2VybmVsLgotCQkJICovCi0JCQlzY2FuX21vcmUgPSAoIXVzZXJfbW9kZShyZWdzKSkgfHwgKHJlZ3MtPmNzID09IF9fVVNFUl9DUyk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQljYXNlIDB4NjA6Ci0JCQkvKiAweDY0IHRocnUgMHg2NyBhcmUgdmFsaWQgcHJlZml4ZXMgaW4gYWxsIG1vZGVzLiAqLwotCQkJc2Nhbl9tb3JlID0gKGluc3RyX2xvICYgMHhDKSA9PSAweDQ7Ci0JCQlicmVhazsKLQkJY2FzZSAweEYwOgotCQkJLyogMHhGMCwgMHhGMiwgMHhGMyBhcmUgdmFsaWQgcHJlZml4ZXMgaW4gYWxsIG1vZGVzLiAqLwotCQkJc2Nhbl9tb3JlID0gIWluc3RyX2xvIHx8IChpbnN0cl9sbz4+MSkgPT0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDA6Ci0JCQkvKiBQcmVmZXRjaCBpbnN0cnVjdGlvbiBpcyAweDBGMEQgb3IgMHgwRjE4ICovCi0JCQlzY2FuX21vcmUgPSAwOwotCi0JCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoaW5zdHIsIG9wY29kZSkpCi0JCQkJYnJlYWs7Ci0JCQlwcmVmZXRjaCA9IChpbnN0cl9sbyA9PSAweEYpICYmCi0JCQkJKG9wY29kZSA9PSAweDBEIHx8IG9wY29kZSA9PSAweDE4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJc2Nhbl9tb3JlID0gMDsKLQkJCWJyZWFrOwotCQl9CiAJfQogCXJldHVybiBwcmVmZXRjaDsKIH0KIAotc3RhdGljIHZvaWQgZm9yY2Vfc2lnX2luZm9fZmF1bHQoaW50IHNpX3NpZ25vLCBpbnQgc2lfY29kZSwKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIHZvaWQKK2ZvcmNlX3NpZ19pbmZvX2ZhdWx0KGludCBzaV9zaWdubywgaW50IHNpX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzaWdpbmZvX3QgaW5mbzsKIAotCWluZm8uc2lfc2lnbm8gPSBzaV9zaWdubzsKLQlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX2NvZGUgPSBzaV9jb2RlOwotCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHJlc3M7CisJaW5mby5zaV9zaWdubwk9IHNpX3NpZ25vOworCWluZm8uc2lfZXJybm8JPSAwOworCWluZm8uc2lfY29kZQk9IHNpX2NvZGU7CisJaW5mby5zaV9hZGRyCT0gKHZvaWQgX191c2VyICopYWRkcmVzczsKKwogCWZvcmNlX3NpZ19pbmZvKHNpX3NpZ25vLCAmaW5mbywgdHNrKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLXN0YXRpYyBpbnQgYmFkX2FkZHJlc3Modm9pZCAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIGR1bW15OwotCXJldHVybiBwcm9iZV9rZXJuZWxfYWRkcmVzcygodW5zaWduZWQgbG9uZyAqKXAsIGR1bW15KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBkdW1wX3BhZ2V0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCV9fdHlwZW9mX18ocHRlX3ZhbChfX3B0ZSgwKSkpIHBhZ2U7Ci0KLQlwYWdlID0gcmVhZF9jcjMoKTsKLQlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpW2FkZHJlc3MgPj4gUEdESVJfU0hJRlRdOwotI2lmZGVmIENPTkZJR19YODZfUEFFCi0JcHJpbnRrKCIqcGRwdCA9ICUwMTZMeCAiLCBwYWdlKTsKLQlpZiAoKHBhZ2UgPj4gUEFHRV9TSElGVCkgPCBtYXhfbG93X3BmbgotCSAgICAmJiBwYWdlICYgX1BBR0VfUFJFU0VOVCkgewotCQlwYWdlICY9IFBBR0VfTUFTSzsKLQkJcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVsoYWRkcmVzcyA+PiBQTURfU0hJRlQpCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoUFRSU19QRVJfUE1EIC0gMSldOwotCQlwcmludGsoS0VSTl9DT05UICIqcGRlID0gJTAxNkx4ICIsIHBhZ2UpOwotCQlwYWdlICY9IH5fUEFHRV9OWDsKLQl9Ci0jZWxzZQotCXByaW50aygiKnBkZSA9ICUwOGx4ICIsIHBhZ2UpOwotI2VuZGlmCi0KLQkvKgotCSAqIFdlIG11c3Qgbm90IGRpcmVjdGx5IGFjY2VzcyB0aGUgcHRlIGluIHRoZSBoaWdocHRlCi0JICogY2FzZSBpZiB0aGUgcGFnZSB0YWJsZSBpcyBsb2NhdGVkIGluIGhpZ2htZW0uCi0JICogQW5kIGxldCdzIHJhdGhlciBub3Qga21hcC1hdG9taWMgdGhlIHB0ZSwganVzdCBpbiBjYXNlCi0JICogaXQncyBhbGxvY2F0ZWQgYWxyZWFkeS4KLQkgKi8KLQlpZiAoKHBhZ2UgPj4gUEFHRV9TSElGVCkgPCBtYXhfbG93X3BmbgotCSAgICAmJiAocGFnZSAmIF9QQUdFX1BSRVNFTlQpCi0JICAgICYmICEocGFnZSAmIF9QQUdFX1BTRSkpIHsKLQkJcGFnZSAmPSBQQUdFX01BU0s7Ci0JCXBhZ2UgPSAoKF9fdHlwZW9mX18ocGFnZSkgKikgX192YShwYWdlKSlbKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChQVFJTX1BFUl9QVEUgLSAxKV07Ci0JCXByaW50aygiKnB0ZSA9ICUwKkx4ICIsIHNpemVvZihwYWdlKSoyLCAodTY0KXBhZ2UpOwotCX0KLQotCXByaW50aygiXG4iKTsKLSNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KLQlwZ2RfdCAqcGdkOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlOwotCi0JcGdkID0gKHBnZF90ICopcmVhZF9jcjMoKTsKLQotCXBnZCA9IF9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkICYgUEhZU0lDQUxfUEFHRV9NQVNLKTsKLQlwZ2QgKz0gcGdkX2luZGV4KGFkZHJlc3MpOwotCWlmIChiYWRfYWRkcmVzcyhwZ2QpKSBnb3RvIGJhZDsKLQlwcmludGsoIlBHRCAlbHggIiwgcGdkX3ZhbCgqcGdkKSk7Ci0JaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkgZ290byByZXQ7Ci0KLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JaWYgKGJhZF9hZGRyZXNzKHB1ZCkpIGdvdG8gYmFkOwotCXByaW50aygiUFVEICVseCAiLCBwdWRfdmFsKCpwdWQpKTsKLQlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpIHx8IHB1ZF9sYXJnZSgqcHVkKSkKLQkJZ290byByZXQ7Ci0KLQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7Ci0JaWYgKGJhZF9hZGRyZXNzKHBtZCkpIGdvdG8gYmFkOwotCXByaW50aygiUE1EICVseCAiLCBwbWRfdmFsKCpwbWQpKTsKLQlpZiAoIXBtZF9wcmVzZW50KCpwbWQpIHx8IHBtZF9sYXJnZSgqcG1kKSkgZ290byByZXQ7Ci0KLQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOwotCWlmIChiYWRfYWRkcmVzcyhwdGUpKSBnb3RvIGJhZDsKLQlwcmludGsoIlBURSAlbHgiLCBwdGVfdmFsKCpwdGUpKTsKLXJldDoKLQlwcmludGsoIlxuIik7Ci0JcmV0dXJuOwotYmFkOgotCXByaW50aygiQkFEXG4iKTsKLSNlbmRpZgotfQorREVGSU5FX1NQSU5MT0NLKHBnZF9sb2NrKTsKK0xJU1RfSEVBRChwZ2RfbGlzdCk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBzdGF0aWMgaW5saW5lIHBtZF90ICp2bWFsbG9jX3N5bmNfb25lKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKQEAgLTI4NCw3ICsyMTUsNiBAQAogCSAqIGFuZCByZWR1bmRhbnQgd2l0aCB0aGUgc2V0X3BtZCgpIG9uIG5vbi1QQUUuIEFzIHdvdWxkCiAJICogc2V0X3B1ZC4KIAkgKi8KLQogCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlwdWRfayA9IHB1ZF9vZmZzZXQocGdkX2ssIGFkZHJlc3MpOwogCWlmICghcHVkX3ByZXNlbnQoKnB1ZF9rKSkKQEAgLTI5NCw0NiArMjI0LDMzNCBAQAogCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CiAJaWYgKCFwbWRfcHJlc2VudCgqcG1kX2spKQogCQlyZXR1cm4gTlVMTDsKKwogCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpIHsKIAkJc2V0X3BtZChwbWQsICpwbWRfayk7CiAJCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCUJVR19PTihwbWRfcGFnZSgqcG1kKSAhPSBwbWRfcGFnZSgqcG1kX2spKTsKKwl9CisKIAlyZXR1cm4gcG1kX2s7CiB9CisKK3ZvaWQgdm1hbGxvY19zeW5jX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCWlmIChTSEFSRURfS0VSTkVMX1BNRCkKKwkJcmV0dXJuOworCisJZm9yIChhZGRyZXNzID0gVk1BTExPQ19TVEFSVCAmIFBNRF9NQVNLOworCSAgICAgYWRkcmVzcyA+PSBUQVNLX1NJWkUgJiYgYWRkcmVzcyA8IEZJWEFERFJfVE9QOworCSAgICAgYWRkcmVzcyArPSBQTURfU0laRSkgeworCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZwZ2RfbGlzdCwgbHJ1KSB7CisJCQlpZiAoIXZtYWxsb2Nfc3luY19vbmUocGFnZV9hZGRyZXNzKHBhZ2UpLCBhZGRyZXNzKSkKKwkJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIDMyLWJpdDoKKyAqCisgKiAgIEhhbmRsZSBhIGZhdWx0IG9uIHRoZSB2bWFsbG9jIG9yIG1vZHVsZSBtYXBwaW5nIGFyZWEKKyAqLworc3RhdGljIG5vaW5saW5lIGludCB2bWFsbG9jX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIHBnZF9wYWRkcjsKKwlwbWRfdCAqcG1kX2s7CisJcHRlX3QgKnB0ZV9rOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBpbiB2bWFsbG9jIGFyZWE6ICovCisJaWYgKCEoYWRkcmVzcyA+PSBWTUFMTE9DX1NUQVJUICYmIGFkZHJlc3MgPCBWTUFMTE9DX0VORCkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogU3luY2hyb25pemUgdGhpcyB0YXNrJ3MgdG9wIGxldmVsIHBhZ2UtdGFibGUKKwkgKiB3aXRoIHRoZSAncmVmZXJlbmNlJyBwYWdlIHRhYmxlLgorCSAqCisJICogRG8gX25vdF8gdXNlICJjdXJyZW50IiBoZXJlLiBXZSBtaWdodCBiZSBpbnNpZGUKKwkgKiBhbiBpbnRlcnJ1cHQgaW4gdGhlIG1pZGRsZSBvZiBhIHRhc2sgc3dpdGNoLi4KKwkgKi8KKwlwZ2RfcGFkZHIgPSByZWFkX2NyMygpOworCXBtZF9rID0gdm1hbGxvY19zeW5jX29uZShfX3ZhKHBnZF9wYWRkciksIGFkZHJlc3MpOworCWlmICghcG1kX2spCisJCXJldHVybiAtMTsKKworCXB0ZV9rID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2ssIGFkZHJlc3MpOworCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9rKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEaWQgaXQgaGl0IHRoZSBET1Mgc2NyZWVuIG1lbW9yeSBWQSBmcm9tIHZtODYgbW9kZT8KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjaGVja192ODA4Nl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1bnNpZ25lZCBsb25nIGJpdDsKKworCWlmICghdjgwODZfbW9kZShyZWdzKSkKKwkJcmV0dXJuOworCisJYml0ID0gKGFkZHJlc3MgLSAweEEwMDAwKSA+PiBQQUdFX1NISUZUOworCWlmIChiaXQgPCAzMikKKwkJdHNrLT50aHJlYWQuc2NyZWVuX2JpdG1hcCB8PSAxIDw8IGJpdDsKK30KKworc3RhdGljIHZvaWQgZHVtcF9wYWdldGFibGUodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCV9fdHlwZW9mX18ocHRlX3ZhbChfX3B0ZSgwKSkpIHBhZ2U7CisKKwlwYWdlID0gcmVhZF9jcjMoKTsKKwlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpW2FkZHJlc3MgPj4gUEdESVJfU0hJRlRdOworCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKwlwcmludGsoIipwZHB0ID0gJTAxNkx4ICIsIHBhZ2UpOworCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCisJICAgICYmIHBhZ2UgJiBfUEFHRV9QUkVTRU5UKSB7CisJCXBhZ2UgJj0gUEFHRV9NQVNLOworCQlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpWyhhZGRyZXNzID4+IFBNRF9TSElGVCkKKwkJCQkJCQkmIChQVFJTX1BFUl9QTUQgLSAxKV07CisJCXByaW50ayhLRVJOX0NPTlQgIipwZGUgPSAlMDE2THggIiwgcGFnZSk7CisJCXBhZ2UgJj0gfl9QQUdFX05YOworCX0KKyNlbHNlCisJcHJpbnRrKCIqcGRlID0gJTA4bHggIiwgcGFnZSk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfNjQKKwkvKgorCSAqIFdlIG11c3Qgbm90IGRpcmVjdGx5IGFjY2VzcyB0aGUgcHRlIGluIHRoZSBoaWdocHRlCisJICogY2FzZSBpZiB0aGUgcGFnZSB0YWJsZSBpcyBsb2NhdGVkIGluIGhpZ2htZW0uCisJICogQW5kIGxldCdzIHJhdGhlciBub3Qga21hcC1hdG9taWMgdGhlIHB0ZSwganVzdCBpbiBjYXNlCisJICogaXQncyBhbGxvY2F0ZWQgYWxyZWFkeToKKwkgKi8KKwlpZiAoKHBhZ2UgPj4gUEFHRV9TSElGVCkgPCBtYXhfbG93X3BmbgorCSAgICAmJiAocGFnZSAmIF9QQUdFX1BSRVNFTlQpCisJICAgICYmICEocGFnZSAmIF9QQUdFX1BTRSkpIHsKKworCQlwYWdlICY9IFBBR0VfTUFTSzsKKwkJcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVsoYWRkcmVzcyA+PiBQQUdFX1NISUZUKQorCQkJCQkJCSYgKFBUUlNfUEVSX1BURSAtIDEpXTsKKwkJcHJpbnRrKCIqcHRlID0gJTAqTHggIiwgc2l6ZW9mKHBhZ2UpKjIsICh1NjQpcGFnZSk7CisJfQorCisJcHJpbnRrKCJcbiIpOworfQorCisjZWxzZSAvKiBDT05GSUdfWDg2XzY0OiAqLworCit2b2lkIHZtYWxsb2Nfc3luY19hbGwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwlmb3IgKGFkZHJlc3MgPSBWTUFMTE9DX1NUQVJUICYgUEdESVJfTUFTSzsgYWRkcmVzcyA8PSBWTUFMTE9DX0VORDsKKwkgICAgIGFkZHJlc3MgKz0gUEdESVJfU0laRSkgeworCisJCWNvbnN0IHBnZF90ICpwZ2RfcmVmID0gcGdkX29mZnNldF9rKGFkZHJlc3MpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQlpZiAocGdkX25vbmUoKnBnZF9yZWYpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBnZF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJnBnZF9saXN0LCBscnUpIHsKKwkJCXBnZF90ICpwZ2Q7CisJCQlwZ2QgPSAocGdkX3QgKilwYWdlX2FkZHJlc3MocGFnZSkgKyBwZ2RfaW5kZXgoYWRkcmVzcyk7CisJCQlpZiAocGdkX25vbmUoKnBnZCkpCisJCQkJc2V0X3BnZChwZ2QsICpwZ2RfcmVmKTsKKwkJCWVsc2UKKwkJCQlCVUdfT04ocGdkX3BhZ2VfdmFkZHIoKnBnZCkgIT0gcGdkX3BhZ2VfdmFkZHIoKnBnZF9yZWYpKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIDY0LWJpdDoKKyAqCisgKiAgIEhhbmRsZSBhIGZhdWx0IG9uIHRoZSB2bWFsbG9jIGFyZWEKKyAqCisgKiBUaGlzIGFzc3VtZXMgbm8gbGFyZ2UgcGFnZXMgaW4gdGhlcmUuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcGdkX3QgKnBnZCwgKnBnZF9yZWY7CisJcHVkX3QgKnB1ZCwgKnB1ZF9yZWY7CisJcG1kX3QgKnBtZCwgKnBtZF9yZWY7CisJcHRlX3QgKnB0ZSwgKnB0ZV9yZWY7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIHZtYWxsb2MgYXJlYTogKi8KKwlpZiAoIShhZGRyZXNzID49IFZNQUxMT0NfU1RBUlQgJiYgYWRkcmVzcyA8IFZNQUxMT0NfRU5EKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBDb3B5IGtlcm5lbCBtYXBwaW5ncyBvdmVyIHdoZW4gbmVlZGVkLiBUaGlzIGNhbiBhbHNvCisJICogaGFwcGVuIHdpdGhpbiBhIHJhY2UgaW4gcGFnZSB0YWJsZSB1cGRhdGUuIEluIHRoZSBsYXRlcgorCSAqIGNhc2UganVzdCBmbHVzaDoKKwkgKi8KKwlwZ2QgPSBwZ2Rfb2Zmc2V0KGN1cnJlbnQtPmFjdGl2ZV9tbSwgYWRkcmVzcyk7CisJcGdkX3JlZiA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKKwlpZiAocGdkX25vbmUoKnBnZF9yZWYpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocGdkX25vbmUoKnBnZCkpCisJCXNldF9wZ2QocGdkLCAqcGdkX3JlZik7CisJZWxzZQorCQlCVUdfT04ocGdkX3BhZ2VfdmFkZHIoKnBnZCkgIT0gcGdkX3BhZ2VfdmFkZHIoKnBnZF9yZWYpKTsKKworCS8qCisJICogQmVsb3cgaGVyZSBtaXNtYXRjaGVzIGFyZSBidWdzIGJlY2F1c2UgdGhlc2UgbG93ZXIgdGFibGVzCisJICogYXJlIHNoYXJlZDoKKwkgKi8KKworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwlwdWRfcmVmID0gcHVkX29mZnNldChwZ2RfcmVmLCBhZGRyZXNzKTsKKwlpZiAocHVkX25vbmUoKnB1ZF9yZWYpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocHVkX25vbmUoKnB1ZCkgfHwgcHVkX3BhZ2VfdmFkZHIoKnB1ZCkgIT0gcHVkX3BhZ2VfdmFkZHIoKnB1ZF9yZWYpKQorCQlCVUcoKTsKKworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwlwbWRfcmVmID0gcG1kX29mZnNldChwdWRfcmVmLCBhZGRyZXNzKTsKKwlpZiAocG1kX25vbmUoKnBtZF9yZWYpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocG1kX25vbmUoKnBtZCkgfHwgcG1kX3BhZ2UoKnBtZCkgIT0gcG1kX3BhZ2UoKnBtZF9yZWYpKQorCQlCVUcoKTsKKworCXB0ZV9yZWYgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfcmVmLCBhZGRyZXNzKTsKKwlpZiAoIXB0ZV9wcmVzZW50KCpwdGVfcmVmKSkKKwkJcmV0dXJuIC0xOworCisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKKworCS8qCisJICogRG9uJ3QgdXNlIHB0ZV9wYWdlIGhlcmUsIGJlY2F1c2UgdGhlIG1hcHBpbmdzIGNhbiBwb2ludAorCSAqIG91dHNpZGUgbWVtX21hcCwgYW5kIHRoZSBOVU1BIGhhc2ggbG9va3VwIGNhbm5vdCBoYW5kbGUKKwkgKiB0aGF0OgorCSAqLworCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkgfHwgcHRlX3BmbigqcHRlKSAhPSBwdGVfcGZuKCpwdGVfcmVmKSkKKwkJQlVHKCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgZXJyYXRhOTNfd2FybmluZ1tdID0KIEtFUk5fRVJSICIqKioqKioqIFlvdXIgQklPUyBzZWVtcyB0byBub3QgY29udGFpbiBhIGZpeCBmb3IgSzggZXJyYXRhICM5M1xuIgogS0VSTl9FUlIgIioqKioqKiogV29ya2luZyBhcm91bmQgaXQsIGJ1dCBpdCBtYXkgY2F1c2UgU0VHVnMgb3IgYnVybiBwb3dlci5cbiIKIEtFUk5fRVJSICIqKioqKioqIFBsZWFzZSBjb25zaWRlciBhIEJJT1MgdXBkYXRlLlxuIgogS0VSTl9FUlIgIioqKioqKiogRGlzYWJsaW5nIFVTQiBsZWdhY3kgaW4gdGhlIEJJT1MgbWF5IGFsc28gaGVscC5cbiI7Ci0jZW5kaWYKIAotLyogV29ya2Fyb3VuZCBmb3IgSzggZXJyYXR1bSAjOTMgJiBidWdneSBCSU9TLgotICAgQklPUyBTTU0gZnVuY3Rpb25zIGFyZSByZXF1aXJlZCB0byB1c2UgYSBzcGVjaWZpYyB3b3JrYXJvdW5kCi0gICB0byBhdm9pZCBjb3JydXB0aW9uIG9mIHRoZSA2NGJpdCBSSVAgcmVnaXN0ZXIgb24gQyBzdGVwcGluZyBLOC4KLSAgIEEgbG90IG9mIEJJT1MgdGhhdCBkaWRuJ3QgZ2V0IHRlc3RlZCBwcm9wZXJseSBtaXNzIHRoaXMuCi0gICBUaGUgT1Mgc2VlcyB0aGlzIGFzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSB1cHBlciAzMmJpdHMgb2YgUklQIGNsZWFyZWQuCi0gICBUcnkgdG8gd29yayBhcm91bmQgaXQgaGVyZS4KLSAgIE5vdGUgd2Ugb25seSBoYW5kbGUgZmF1bHRzIGluIGtlcm5lbCBoZXJlLgotICAgRG9lcyBub3RoaW5nIGZvciBYODZfMzIKKy8qCisgKiBObyB2bTg2IG1vZGUgaW4gNjQtYml0IG1vZGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorY2hlY2tfdjgwODZfbW9kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK3N0YXRpYyBpbnQgYmFkX2FkZHJlc3Modm9pZCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGR1bW15OworCisJcmV0dXJuIHByb2JlX2tlcm5lbF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nICopcCwgZHVtbXkpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3BhZ2V0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKworCXBnZCA9IChwZ2RfdCAqKXJlYWRfY3IzKCk7CisKKwlwZ2QgPSBfX3ZhKCh1bnNpZ25lZCBsb25nKXBnZCAmIFBIWVNJQ0FMX1BBR0VfTUFTSyk7CisKKwlwZ2QgKz0gcGdkX2luZGV4KGFkZHJlc3MpOworCWlmIChiYWRfYWRkcmVzcyhwZ2QpKQorCQlnb3RvIGJhZDsKKworCXByaW50aygiUEdEICVseCAiLCBwZ2RfdmFsKCpwZ2QpKTsKKworCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCisJCWdvdG8gb3V0OworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOworCWlmIChiYWRfYWRkcmVzcyhwdWQpKQorCQlnb3RvIGJhZDsKKworCXByaW50aygiUFVEICVseCAiLCBwdWRfdmFsKCpwdWQpKTsKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpIHx8IHB1ZF9sYXJnZSgqcHVkKSkKKwkJZ290byBvdXQ7CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CisJaWYgKGJhZF9hZGRyZXNzKHBtZCkpCisJCWdvdG8gYmFkOworCisJcHJpbnRrKCJQTUQgJWx4ICIsIHBtZF92YWwoKnBtZCkpOworCWlmICghcG1kX3ByZXNlbnQoKnBtZCkgfHwgcG1kX2xhcmdlKCpwbWQpKQorCQlnb3RvIG91dDsKKworCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CisJaWYgKGJhZF9hZGRyZXNzKHB0ZSkpCisJCWdvdG8gYmFkOworCisJcHJpbnRrKCJQVEUgJWx4IiwgcHRlX3ZhbCgqcHRlKSk7CitvdXQ6CisJcHJpbnRrKCJcbiIpOworCXJldHVybjsKK2JhZDoKKwlwcmludGsoIkJBRFxuIik7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBXb3JrYXJvdW5kIGZvciBLOCBlcnJhdHVtICM5MyAmIGJ1Z2d5IEJJT1MuCisgKgorICogQklPUyBTTU0gZnVuY3Rpb25zIGFyZSByZXF1aXJlZCB0byB1c2UgYSBzcGVjaWZpYyB3b3JrYXJvdW5kCisgKiB0byBhdm9pZCBjb3JydXB0aW9uIG9mIHRoZSA2NGJpdCBSSVAgcmVnaXN0ZXIgb24gQyBzdGVwcGluZyBLOC4KKyAqCisgKiBBIGxvdCBvZiBCSU9TIHRoYXQgZGlkbid0IGdldCB0ZXN0ZWQgcHJvcGVybHkgbWlzcyB0aGlzLgorICoKKyAqIFRoZSBPUyBzZWVzIHRoaXMgYXMgYSBwYWdlIGZhdWx0IHdpdGggdGhlIHVwcGVyIDMyYml0cyBvZiBSSVAgY2xlYXJlZC4KKyAqIFRyeSB0byB3b3JrIGFyb3VuZCBpdCBoZXJlLgorICoKKyAqIE5vdGUgd2Ugb25seSBoYW5kbGUgZmF1bHRzIGluIGtlcm5lbCBoZXJlLgorICogRG9lcyBub3RoaW5nIG9uIDMyLWJpdC4KICAqLwogc3RhdGljIGludCBpc19lcnJhdGE5MyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogI2lmZGVmIENPTkZJR19YODZfNjQKLQlzdGF0aWMgaW50IHdhcm5lZDsKKwlzdGF0aWMgaW50IG9uY2U7CisKIAlpZiAoYWRkcmVzcyAhPSByZWdzLT5pcCkKIAkJcmV0dXJuIDA7CisKIAlpZiAoKGFkZHJlc3MgPj4gMzIpICE9IDApCiAJCXJldHVybiAwOworCiAJYWRkcmVzcyB8PSAweGZmZmZmZmZmVUwgPDwgMzI7CiAJaWYgKChhZGRyZXNzID49ICh1NjQpX3N0ZXh0ICYmIGFkZHJlc3MgPD0gKHU2NClfZXRleHQpIHx8CiAJICAgIChhZGRyZXNzID49IE1PRFVMRVNfVkFERFIgJiYgYWRkcmVzcyA8PSBNT0RVTEVTX0VORCkpIHsKLQkJaWYgKCF3YXJuZWQpIHsKKwkJaWYgKCFvbmNlKSB7CiAJCQlwcmludGsoZXJyYXRhOTNfd2FybmluZyk7Ci0JCQl3YXJuZWQgPSAxOworCQkJb25jZSA9IDE7CiAJCX0KIAkJcmVncy0+aXAgPSBhZGRyZXNzOwogCQlyZXR1cm4gMTsKQEAgLTM0MywxNiArNTYxLDE3IEBACiB9CiAKIC8qCi0gKiBXb3JrIGFyb3VuZCBLOCBlcnJhdHVtICMxMDAgSzggaW4gY29tcGF0IG1vZGUgb2NjYXNpb25hbGx5IGp1bXBzIHRvIGlsbGVnYWwKLSAqIGFkZHJlc3NlcyA+NEdCLiAgV2UgY2F0Y2ggdGhpcyBpbiB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGJlY2F1c2UgdGhlc2UKLSAqIGFkZHJlc3NlcyBhcmUgbm90IHJlYWNoYWJsZS4gSnVzdCBkZXRlY3QgdGhpcyBjYXNlIGFuZCByZXR1cm4uICBBbnkgY29kZQorICogV29yayBhcm91bmQgSzggZXJyYXR1bSAjMTAwIEs4IGluIGNvbXBhdCBtb2RlIG9jY2FzaW9uYWxseSBqdW1wcworICogdG8gaWxsZWdhbCBhZGRyZXNzZXMgPjRHQi4KKyAqCisgKiBXZSBjYXRjaCB0aGlzIGluIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgYmVjYXVzZSB0aGVzZSBhZGRyZXNzZXMKKyAqIGFyZSBub3QgcmVhY2hhYmxlLiBKdXN0IGRldGVjdCB0aGlzIGNhc2UgYW5kIHJldHVybi4gIEFueSBjb2RlCiAgKiBzZWdtZW50IGluIExEVCBpcyBjb21wYXRpYmlsaXR5IG1vZGUuCiAgKi8KIHN0YXRpYyBpbnQgaXNfZXJyYXRhMTAwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICgocmVncy0+Y3MgPT0gX19VU0VSMzJfQ1MgfHwgKHJlZ3MtPmNzICYgKDE8PDIpKSkgJiYKLQkgICAgKGFkZHJlc3MgPj4gMzIpKQorCWlmICgocmVncy0+Y3MgPT0gX19VU0VSMzJfQ1MgfHwgKHJlZ3MtPmNzICYgKDE8PDIpKSkgJiYgKGFkZHJlc3MgPj4gMzIpKQogCQlyZXR1cm4gMTsKICNlbmRpZgogCXJldHVybiAwOwpAQCAtMzYyLDggKzU4MSw5IEBACiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9GMDBGX0JVRwogCXVuc2lnbmVkIGxvbmcgbnI7CisKIAkvKgotCSAqIFBlbnRpdW0gRjAgMEYgQzcgQzggYnVnIHdvcmthcm91bmQuCisJICogUGVudGl1bSBGMCAwRiBDNyBDOCBidWcgd29ya2Fyb3VuZDoKIAkgKi8KIAlpZiAoYm9vdF9jcHVfZGF0YS5mMDBmX2J1ZykgewogCQluciA9IChhZGRyZXNzIC0gaWR0X2Rlc2NyLmFkZHJlc3MpID4+IDM7CkBAIC0zNzcsNjIgKzU5NywyNzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19mYXVsdF9vb3BzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGNvbnN0IGNoYXIgbnhfd2FybmluZ1tdID0gS0VSTl9DUklUCisia2VybmVsIHRyaWVkIHRvIGV4ZWN1dGUgTlgtcHJvdGVjdGVkIHBhZ2UgLSBleHBsb2l0IGF0dGVtcHQ/ICh1aWQ6ICVkKVxuIjsKKworc3RhdGljIHZvaWQKK3Nob3dfZmF1bHRfb29wcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmICghb29wc19tYXlfcHJpbnQoKSkKIAkJcmV0dXJuOwotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2X1BBRQogCWlmIChlcnJvcl9jb2RlICYgUEZfSU5TVFIpIHsKIAkJdW5zaWduZWQgaW50IGxldmVsOworCiAJCXB0ZV90ICpwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyZXNzLCAmbGV2ZWwpOwogCiAJCWlmIChwdGUgJiYgcHRlX3ByZXNlbnQoKnB0ZSkgJiYgIXB0ZV9leGVjKCpwdGUpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAia2VybmVsIHRyaWVkIHRvIGV4ZWN1dGUgIgotCQkJCSJOWC1wcm90ZWN0ZWQgcGFnZSAtIGV4cGxvaXQgYXR0ZW1wdD8gIgotCQkJCSIodWlkOiAlZClcbiIsIGN1cnJlbnRfdWlkKCkpOworCQkJcHJpbnRrKG54X3dhcm5pbmcsIGN1cnJlbnRfdWlkKCkpOwogCX0KLSNlbmRpZgogCiAJcHJpbnRrKEtFUk5fQUxFUlQgIkJVRzogdW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgIik7CiAJaWYgKGFkZHJlc3MgPCBQQUdFX1NJWkUpCiAJCXByaW50ayhLRVJOX0NPTlQgIk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fQ09OVCAicGFnaW5nIHJlcXVlc3QiKTsKKwogCXByaW50ayhLRVJOX0NPTlQgIiBhdCAlcFxuIiwgKHZvaWQgKikgYWRkcmVzcyk7CiAJcHJpbnRrKEtFUk5fQUxFUlQgIklQOiIpOwogCXByaW50a19hZGRyZXNzKHJlZ3MtPmlwLCAxKTsKKwogCWR1bXBfcGFnZXRhYmxlKGFkZHJlc3MpOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIG5vaW5saW5lIHZvaWQgcGd0YWJsZV9iYWQodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQorc3RhdGljIG5vaW5saW5lIHZvaWQKK3BndGFibGVfYmFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gb29wc19iZWdpbigpOwotCWludCBzaWcgPSBTSUdLSUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNpZzsKKworCWZsYWdzID0gb29wc19iZWdpbigpOworCXRzayA9IGN1cnJlbnQ7CisJc2lnID0gU0lHS0lMTDsKIAogCXByaW50ayhLRVJOX0FMRVJUICIlczogQ29ycnVwdGVkIHBhZ2UgdGFibGUgYXQgYWRkcmVzcyAlbHhcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGFkZHJlc3MpOworCSAgICAgICB0c2stPmNvbW0sIGFkZHJlc3MpOwogCWR1bXBfcGFnZXRhYmxlKGFkZHJlc3MpOwotCXRzayA9IGN1cnJlbnQ7Ci0JdHNrLT50aHJlYWQuY3IyID0gYWRkcmVzczsKLQl0c2stPnRocmVhZC50cmFwX25vID0gMTQ7Ci0JdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisKKwl0c2stPnRocmVhZC5jcjIJCT0gYWRkcmVzczsKKwl0c2stPnRocmVhZC50cmFwX25vCT0gMTQ7CisJdHNrLT50aHJlYWQuZXJyb3JfY29kZQk9IGVycm9yX2NvZGU7CisKIAlpZiAoX19kaWUoIkJhZCBwYWdldGFibGUiLCByZWdzLCBlcnJvcl9jb2RlKSkKIAkJc2lnID0gMDsKKwogCW9vcHNfZW5kKGZsYWdzLCByZWdzLCBzaWcpOwogfQotI2VuZGlmCisKK3N0YXRpYyBub2lubGluZSB2b2lkCitub19jb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwl1bnNpZ25lZCBsb25nICpzdGFja2VuZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzaWc7CisKKwkvKiBBcmUgd2UgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMga2VybmVsIGZhdWx0PyAqLworCWlmIChmaXh1cF9leGNlcHRpb24ocmVncykpCisJCXJldHVybjsKKworCS8qCisJICogMzItYml0OgorCSAqCisJICogICBWYWxpZCB0byBkbyBhbm90aGVyIHBhZ2UgZmF1bHQgaGVyZSwgYmVjYXVzZSBpZiB0aGlzIGZhdWx0CisJICogICBoYWQgYmVlbiB0cmlnZ2VyZWQgYnkgaXNfcHJlZmV0Y2ggZml4dXBfZXhjZXB0aW9uIHdvdWxkIGhhdmUKKwkgKiAgIGhhbmRsZWQgaXQuCisJICoKKwkgKiA2NC1iaXQ6CisJICoKKwkgKiAgIEhhbGwgb2Ygc2hhbWUgb2YgQ1BVL0JJT1MgYnVncy4KKwkgKi8KKwlpZiAoaXNfcHJlZmV0Y2gocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcykpCisJCXJldHVybjsKKworCWlmIChpc19lcnJhdGE5MyhyZWdzLCBhZGRyZXNzKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBPb3BzLiBUaGUga2VybmVsIHRyaWVkIHRvIGFjY2VzcyBzb21lIGJhZCBwYWdlLiBXZSdsbCBoYXZlIHRvCisJICogdGVybWluYXRlIHRoaW5ncyB3aXRoIGV4dHJlbWUgcHJlanVkaWNlOgorCSAqLworCWZsYWdzID0gb29wc19iZWdpbigpOworCisJc2hvd19mYXVsdF9vb3BzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCisJc3RhY2tlbmQgPSBlbmRfb2Zfc3RhY2sodHNrKTsKKwlpZiAoKnN0YWNrZW5kICE9IFNUQUNLX0VORF9NQUdJQykKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIlRocmVhZCBvdmVycmFuIHN0YWNrLCBvciBzdGFjayBjb3JydXB0ZWRcbiIpOworCisJdHNrLT50aHJlYWQuY3IyCQk9IGFkZHJlc3M7CisJdHNrLT50aHJlYWQudHJhcF9ubwk9IDE0OworCXRzay0+dGhyZWFkLmVycm9yX2NvZGUJPSBlcnJvcl9jb2RlOworCisJc2lnID0gU0lHS0lMTDsKKwlpZiAoX19kaWUoIk9vcHMiLCByZWdzLCBlcnJvcl9jb2RlKSkKKwkJc2lnID0gMDsKKworCS8qIEV4ZWN1dGl2ZSBzdW1tYXJ5IGluIGNhc2UgdGhlIGJvZHkgb2YgdGhlIG9vcHMgc2Nyb2xsZWQgYXdheSAqLworCXByaW50ayhLRVJOX0VNRVJHICJDUjI6ICUwMTZseFxuIiwgYWRkcmVzcyk7CisKKwlvb3BzX2VuZChmbGFncywgcmVncywgc2lnKTsKK30KKworLyoKKyAqIFByaW50IG91dCBpbmZvIGFib3V0IGZhdGFsIHNlZ2ZhdWx0cywgaWYgdGhlIHNob3dfdW5oYW5kbGVkX3NpZ25hbHMKKyAqIHN5c2N0bCBpcyBzZXQ6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc2hvd19zaWduYWxfbXNnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKCF1bmhhbmRsZWRfc2lnbmFsKHRzaywgU0lHU0VHVikpCisJCXJldHVybjsKKworCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9DT05UICIlcyVzWyVkXTogc2VnZmF1bHQgYXQgJWx4IGlwICVwIHNwICVwIGVycm9yICVseCIsCisJCXRhc2tfcGlkX25yKHRzaykgPiAxID8gS0VSTl9JTkZPIDogS0VSTl9FTUVSRywKKwkJdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCBhZGRyZXNzLAorCQkodm9pZCAqKXJlZ3MtPmlwLCAodm9pZCAqKXJlZ3MtPnNwLCBlcnJvcl9jb2RlKTsKKworCXByaW50X3ZtYV9hZGRyKEtFUk5fQ09OVCAiIGluICIsIHJlZ3MtPmlwKTsKKworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JhZF9hcmVhX25vc2VtYXBob3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBzaV9jb2RlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCS8qIFVzZXIgbW9kZSBhY2Nlc3NlcyBqdXN0IGNhdXNlIGEgU0lHU0VHViAqLworCWlmIChlcnJvcl9jb2RlICYgUEZfVVNFUikgeworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRvIGhhdmUgaW50ZXJydXB0cyBvZmYgaGVyZToKKwkJICovCisJCWxvY2FsX2lycV9lbmFibGUoKTsKKworCQkvKgorCQkgKiBWYWxpZCB0byBkbyBhbm90aGVyIHBhZ2UgZmF1bHQgaGVyZSBiZWNhdXNlIHRoaXMgb25lIGNhbWUKKwkJICogZnJvbSB1c2VyIHNwYWNlOgorCQkgKi8KKwkJaWYgKGlzX3ByZWZldGNoKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpKQorCQkJcmV0dXJuOworCisJCWlmIChpc19lcnJhdGExMDAocmVncywgYWRkcmVzcykpCisJCQlyZXR1cm47CisKKwkJaWYgKHVubGlrZWx5KHNob3dfdW5oYW5kbGVkX3NpZ25hbHMpKQorCQkJc2hvd19zaWduYWxfbXNnKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIHRzayk7CisKKwkJLyogS2VybmVsIGFkZHJlc3NlcyBhcmUgYWx3YXlzIHByb3RlY3Rpb24gZmF1bHRzOiAqLworCQl0c2stPnRocmVhZC5jcjIJCT0gYWRkcmVzczsKKwkJdHNrLT50aHJlYWQuZXJyb3JfY29kZQk9IGVycm9yX2NvZGUgfCAoYWRkcmVzcyA+PSBUQVNLX1NJWkUpOworCQl0c2stPnRocmVhZC50cmFwX25vCT0gMTQ7CisKKwkJZm9yY2Vfc2lnX2luZm9fZmF1bHQoU0lHU0VHViwgc2lfY29kZSwgYWRkcmVzcywgdHNrKTsKKworCQlyZXR1cm47CisJfQorCisJaWYgKGlzX2YwMGZfYnVnKHJlZ3MsIGFkZHJlc3MpKQorCQlyZXR1cm47CisKKwlub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZAorYmFkX2FyZWFfbm9zZW1hcGhvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJX19iYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBTRUdWX01BUEVSUik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JhZF9hcmVhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgc2lfY29kZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCisJLyoKKwkgKiBTb21ldGhpbmcgdHJpZWQgdG8gYWNjZXNzIG1lbW9yeSB0aGF0IGlzbid0IGluIG91ciBtZW1vcnkgbWFwLi4KKwkgKiBGaXggaXQsIGJ1dCBjaGVjayBpZiBpdCdzIGtlcm5lbCBvciB1c2VyIGZpcnN0Li4KKwkgKi8KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJX19iYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBzaV9jb2RlKTsKK30KKworc3RhdGljIG5vaW5saW5lIHZvaWQKK2JhZF9hcmVhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlfX2JhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIFNFR1ZfTUFQRVJSKTsKK30KKworc3RhdGljIG5vaW5saW5lIHZvaWQKK2JhZF9hcmVhX2FjY2Vzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJX19iYWRfYXJlYShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBTRUdWX0FDQ0VSUik7Cit9CisKKy8qIFRPRE86IGZpeHVwIGZvciAibW0taW52b2tlLW9vbS1raWxsZXItZnJvbS1wYWdlLWZhdWx0LnBhdGNoIiAqLworc3RhdGljIHZvaWQKK291dF9vZl9tZW1vcnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJLyoKKwkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgY2FsbCB0aGUgT09NIGtpbGxlciwgYW5kIHJldHVybiB0aGUgdXNlcnNwYWNlCisJICogKHdoaWNoIHdpbGwgcmV0cnkgdGhlIGZhdWx0LCBvciBraWxsIHVzIGlmIHdlIGdvdCBvb20ta2lsbGVkKToKKwkgKi8KKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKK30KKworc3RhdGljIHZvaWQKK2RvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKKworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllOiAqLworCWlmICghKGVycm9yX2NvZGUgJiBQRl9VU0VSKSkKKwkJbm9fY29udGV4dChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKworCS8qIFVzZXItc3BhY2UgPT4gb2sgdG8gZG8gYW5vdGhlciBwYWdlIGZhdWx0OiAqLworCWlmIChpc19wcmVmZXRjaChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKSkKKwkJcmV0dXJuOworCisJdHNrLT50aHJlYWQuY3IyCQk9IGFkZHJlc3M7CisJdHNrLT50aHJlYWQuZXJyb3JfY29kZQk9IGVycm9yX2NvZGU7CisJdHNrLT50aHJlYWQudHJhcF9ubwk9IDE0OworCisJZm9yY2Vfc2lnX2luZm9fZmF1bHQoU0lHQlVTLCBCVVNfQURSRVJSLCBhZGRyZXNzLCB0c2spOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZAorbW1fZmF1bHRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHQpCit7CisJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7CisJCW91dF9vZl9tZW1vcnkocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQorCQkJZG9fc2lnYnVzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQllbHNlCisJCQlCVUcoKTsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgc3B1cmlvdXNfZmF1bHRfY2hlY2sodW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBwdGVfdCAqcHRlKQogewogCWlmICgoZXJyb3JfY29kZSAmIFBGX1dSSVRFKSAmJiAhcHRlX3dyaXRlKCpwdGUpKQogCQlyZXR1cm4gMDsKKwogCWlmICgoZXJyb3JfY29kZSAmIFBGX0lOU1RSKSAmJiAhcHRlX2V4ZWMoKnB0ZSkpCiAJCXJldHVybiAwOwogCkBAIC00NDAsMjEgKzg3NSwyNSBAQAogfQogCiAvKgotICogSGFuZGxlIGEgc3B1cmlvdXMgZmF1bHQgY2F1c2VkIGJ5IGEgc3RhbGUgVExCIGVudHJ5LiAgVGhpcyBhbGxvd3MKLSAqIHVzIHRvIGxhemlseSByZWZyZXNoIHRoZSBUTEIgd2hlbiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvZiBhCi0gKiBrZXJuZWwgcGFnZSAoUk8gLT4gUlcgb3IgTlggLT4gWCkuICBEb2luZyBpdCBlYWdlcmx5IGlzIHZlcnkKLSAqIGV4cGVuc2l2ZSBzaW5jZSB0aGF0IGltcGxpZXMgZG9pbmcgYSBmdWxsIGNyb3NzLXByb2Nlc3NvciBUTEIKLSAqIGZsdXNoLCBldmVuIGlmIG5vIHN0YWxlIFRMQiBlbnRyaWVzIGV4aXN0IG9uIG90aGVyIHByb2Nlc3NvcnMuCisgKiBIYW5kbGUgYSBzcHVyaW91cyBmYXVsdCBjYXVzZWQgYnkgYSBzdGFsZSBUTEIgZW50cnkuCisgKgorICogVGhpcyBhbGxvd3MgdXMgdG8gbGF6aWx5IHJlZnJlc2ggdGhlIFRMQiB3aGVuIGluY3JlYXNpbmcgdGhlCisgKiBwZXJtaXNzaW9ucyBvZiBhIGtlcm5lbCBwYWdlIChSTyAtPiBSVyBvciBOWCAtPiBYKS4gIERvaW5nIGl0CisgKiBlYWdlcmx5IGlzIHZlcnkgZXhwZW5zaXZlIHNpbmNlIHRoYXQgaW1wbGllcyBkb2luZyBhIGZ1bGwKKyAqIGNyb3NzLXByb2Nlc3NvciBUTEIgZmx1c2gsIGV2ZW4gaWYgbm8gc3RhbGUgVExCIGVudHJpZXMgZXhpc3QKKyAqIG9uIG90aGVyIHByb2Nlc3NvcnMuCisgKgogICogVGhlcmUgYXJlIG5vIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB0byBsZWF2aW5nIGEgc3RhbGUgVExCIHdoZW4KICAqIGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIGEgcGFnZS4KICAqLwotc3RhdGljIGludCBzcHVyaW91c19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK3N0YXRpYyBub2lubGluZSBpbnQKK3NwdXJpb3VzX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXBnZF90ICpwZ2Q7CiAJcHVkX3QgKnB1ZDsKIAlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGU7CisJaW50IHJldDsKIAogCS8qIFJlc2VydmVkLWJpdCB2aW9sYXRpb24gb3IgdXNlciBhY2Nlc3MgdG8ga2VybmVsIHNwYWNlPyAqLwogCWlmIChlcnJvcl9jb2RlICYgKFBGX1VTRVIgfCBQRl9SU1ZEKSkKQEAgLTQ4MiwxMjcgKzkyMSw3MSBAQAogCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHNwdXJpb3VzX2ZhdWx0X2NoZWNrKGVycm9yX2NvZGUsIHB0ZSk7Ci19Ci0KLS8qCi0gKiBYODZfMzIKLSAqIEhhbmRsZSBhIGZhdWx0IG9uIHRoZSB2bWFsbG9jIG9yIG1vZHVsZSBtYXBwaW5nIGFyZWEKLSAqCi0gKiBYODZfNjQKLSAqIEhhbmRsZSBhIGZhdWx0IG9uIHRoZSB2bWFsbG9jIGFyZWEKLSAqCi0gKiBUaGlzIGFzc3VtZXMgbm8gbGFyZ2UgcGFnZXMgaW4gdGhlcmUuCi0gKi8KLXN0YXRpYyBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXVuc2lnbmVkIGxvbmcgcGdkX3BhZGRyOwotCXBtZF90ICpwbWRfazsKLQlwdGVfdCAqcHRlX2s7Ci0KLQkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIHZtYWxsb2MgYXJlYSAqLwotCWlmICghKGFkZHJlc3MgPj0gVk1BTExPQ19TVEFSVCAmJiBhZGRyZXNzIDwgVk1BTExPQ19FTkQpKQotCQlyZXR1cm4gLTE7CisJcmV0ID0gc3B1cmlvdXNfZmF1bHRfY2hlY2soZXJyb3JfY29kZSwgcHRlKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIFN5bmNocm9uaXplIHRoaXMgdGFzaydzIHRvcCBsZXZlbCBwYWdlLXRhYmxlCi0JICogd2l0aCB0aGUgJ3JlZmVyZW5jZScgcGFnZSB0YWJsZS4KLQkgKgotCSAqIERvIF9ub3RfIHVzZSAiY3VycmVudCIgaGVyZS4gV2UgbWlnaHQgYmUgaW5zaWRlCi0JICogYW4gaW50ZXJydXB0IGluIHRoZSBtaWRkbGUgb2YgYSB0YXNrIHN3aXRjaC4uCisJICogTWFrZSBzdXJlIHdlIGhhdmUgcGVybWlzc2lvbnMgaW4gUE1ELgorCSAqIElmIG5vdCwgdGhlbiB0aGVyZSdzIGEgYnVnIGluIHRoZSBwYWdlIHRhYmxlczoKIAkgKi8KLQlwZ2RfcGFkZHIgPSByZWFkX2NyMygpOwotCXBtZF9rID0gdm1hbGxvY19zeW5jX29uZShfX3ZhKHBnZF9wYWRkciksIGFkZHJlc3MpOwotCWlmICghcG1kX2spCi0JCXJldHVybiAtMTsKLQlwdGVfayA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9rLCBhZGRyZXNzKTsKLQlpZiAoIXB0ZV9wcmVzZW50KCpwdGVfaykpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcGdkX3QgKnBnZCwgKnBnZF9yZWY7Ci0JcHVkX3QgKnB1ZCwgKnB1ZF9yZWY7Ci0JcG1kX3QgKnBtZCwgKnBtZF9yZWY7Ci0JcHRlX3QgKnB0ZSwgKnB0ZV9yZWY7CisJcmV0ID0gc3B1cmlvdXNfZmF1bHRfY2hlY2soZXJyb3JfY29kZSwgKHB0ZV90ICopIHBtZCk7CisJV0FSTl9PTkNFKCFyZXQsICJQTUQgaGFzIGluY29ycmVjdCBwZXJtaXNzaW9uIGJpdHNcbiIpOwogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBpbiB2bWFsbG9jIGFyZWEgKi8KLQlpZiAoIShhZGRyZXNzID49IFZNQUxMT0NfU1RBUlQgJiYgYWRkcmVzcyA8IFZNQUxMT0NfRU5EKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogQ29weSBrZXJuZWwgbWFwcGluZ3Mgb3ZlciB3aGVuIG5lZWRlZC4gVGhpcyBjYW4gYWxzbwotCSAgIGhhcHBlbiB3aXRoaW4gYSByYWNlIGluIHBhZ2UgdGFibGUgdXBkYXRlLiBJbiB0aGUgbGF0ZXIKLQkgICBjYXNlIGp1c3QgZmx1c2guICovCi0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0KGN1cnJlbnQtPmFjdGl2ZV9tbSwgYWRkcmVzcyk7Ci0JcGdkX3JlZiA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKLQlpZiAocGdkX25vbmUoKnBnZF9yZWYpKQotCQlyZXR1cm4gLTE7Ci0JaWYgKHBnZF9ub25lKCpwZ2QpKQotCQlzZXRfcGdkKHBnZCwgKnBnZF9yZWYpOwotCWVsc2UKLQkJQlVHX09OKHBnZF9wYWdlX3ZhZGRyKCpwZ2QpICE9IHBnZF9wYWdlX3ZhZGRyKCpwZ2RfcmVmKSk7Ci0KLQkvKiBCZWxvdyBoZXJlIG1pc21hdGNoZXMgYXJlIGJ1Z3MgYmVjYXVzZSB0aGVzZSBsb3dlciB0YWJsZXMKLQkgICBhcmUgc2hhcmVkICovCi0KLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JcHVkX3JlZiA9IHB1ZF9vZmZzZXQocGdkX3JlZiwgYWRkcmVzcyk7Ci0JaWYgKHB1ZF9ub25lKCpwdWRfcmVmKSkKLQkJcmV0dXJuIC0xOwotCWlmIChwdWRfbm9uZSgqcHVkKSB8fCBwdWRfcGFnZV92YWRkcigqcHVkKSAhPSBwdWRfcGFnZV92YWRkcigqcHVkX3JlZikpCi0JCUJVRygpOwotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKLQlwbWRfcmVmID0gcG1kX29mZnNldChwdWRfcmVmLCBhZGRyZXNzKTsKLQlpZiAocG1kX25vbmUoKnBtZF9yZWYpKQotCQlyZXR1cm4gLTE7Ci0JaWYgKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9wYWdlKCpwbWQpICE9IHBtZF9wYWdlKCpwbWRfcmVmKSkKLQkJQlVHKCk7Ci0JcHRlX3JlZiA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9yZWYsIGFkZHJlc3MpOwotCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9yZWYpKQotCQlyZXR1cm4gLTE7Ci0JcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKLQkvKiBEb24ndCB1c2UgcHRlX3BhZ2UgaGVyZSwgYmVjYXVzZSB0aGUgbWFwcGluZ3MgY2FuIHBvaW50Ci0JICAgb3V0c2lkZSBtZW1fbWFwLCBhbmQgdGhlIE5VTUEgaGFzaCBsb29rdXAgY2Fubm90IGhhbmRsZQotCSAgIHRoYXQuICovCi0JaWYgKCFwdGVfcHJlc2VudCgqcHRlKSB8fCBwdGVfcGZuKCpwdGUpICE9IHB0ZV9wZm4oKnB0ZV9yZWYpKQotCQlCVUcoKTsKLQlyZXR1cm4gMDsKLSNlbmRpZgorCXJldHVybiByZXQ7CiB9CiAKIGludCBzaG93X3VuaGFuZGxlZF9zaWduYWxzID0gMTsKIAorc3RhdGljIGlubGluZSBpbnQKK2FjY2Vzc19lcnJvcih1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIGludCB3cml0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKHdyaXRlKSB7CisJCS8qIHdyaXRlLCBwcmVzZW50IGFuZCB3cml0ZSwgbm90IHByZXNlbnQ6ICovCisJCWlmICh1bmxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCS8qIHJlYWQsIHByZXNlbnQ6ICovCisJaWYgKHVubGlrZWx5KGVycm9yX2NvZGUgJiBQRl9QUk9UKSkKKwkJcmV0dXJuIDE7CisKKwkvKiByZWFkLCBub3QgcHJlc2VudDogKi8KKwlpZiAodW5saWtlbHkoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fV1JJVEUpKSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmF1bHRfaW5fa2VybmVsX3NwYWNlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gYWRkcmVzcyA+PSBUQVNLX1NJWkVfTUFYOworfQorCiAvKgogICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcGFnZSBmYXVsdHMuICBJdCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzLAogICogYW5kIHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBwYXNzZXMgaXQgb2ZmIHRvIG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUKICAqIHJvdXRpbmVzLgogICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotYXNtbGlua2FnZQotI2VuZGlmCi12b2lkIF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCitkb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzCitkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCWludCB3cml0ZSwgc2lfY29kZTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlpbnQgd3JpdGU7CiAJaW50IGZhdWx0OwotI2lmZGVmIENPTkZJR19YODZfNjQKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzaWc7Ci0jZW5kaWYKIAogCXRzayA9IGN1cnJlbnQ7CiAJbW0gPSB0c2stPm1tOworCiAJcHJlZmV0Y2h3KCZtbS0+bW1hcF9zZW0pOwogCi0JLyogZ2V0IHRoZSBhZGRyZXNzICovCisJLyogR2V0IHRoZSBmYXVsdGluZyBhZGRyZXNzOiAqLwogCWFkZHJlc3MgPSByZWFkX2NyMigpOwogCi0Jc2lfY29kZSA9IFNFR1ZfTUFQRVJSOwotCiAJaWYgKHVubGlrZWx5KGttbWlvX2ZhdWx0KHJlZ3MsIGFkZHJlc3MpKSkKIAkJcmV0dXJuOwogCkBAIC02MTksMzE5ICsxMDAyLDE0NyBAQAogCSAqIChlcnJvcl9jb2RlICYgNCkgPT0gMCwgYW5kIHRoYXQgdGhlIGZhdWx0IHdhcyBub3QgYQogCSAqIHByb3RlY3Rpb24gZXJyb3IgKGVycm9yX2NvZGUgJiA5KSA9PSAwLgogCSAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUpKSB7Ci0jZWxzZQotCWlmICh1bmxpa2VseShhZGRyZXNzID49IFRBU0tfU0laRTY0KSkgewotI2VuZGlmCisJaWYgKHVubGlrZWx5KGZhdWx0X2luX2tlcm5lbF9zcGFjZShhZGRyZXNzKSkpIHsKIAkJaWYgKCEoZXJyb3JfY29kZSAmIChQRl9SU1ZEfFBGX1VTRVJ8UEZfUFJPVCkpICYmCiAJCSAgICB2bWFsbG9jX2ZhdWx0KGFkZHJlc3MpID49IDApCiAJCQlyZXR1cm47CiAKLQkJLyogQ2FuIGhhbmRsZSBhIHN0YWxlIFJPLT5SVyBUTEIgKi8KLQkJaWYgKHNwdXJpb3VzX2ZhdWx0KGFkZHJlc3MsIGVycm9yX2NvZGUpKQorCQkvKiBDYW4gaGFuZGxlIGEgc3RhbGUgUk8tPlJXIFRMQjogKi8KKwkJaWYgKHNwdXJpb3VzX2ZhdWx0KGVycm9yX2NvZGUsIGFkZHJlc3MpKQogCQkJcmV0dXJuOwogCi0JCS8qIGtwcm9iZXMgZG9uJ3Qgd2FudCB0byBob29rIHRoZSBzcHVyaW91cyBmYXVsdHMuICovCisJCS8qIGtwcm9iZXMgZG9uJ3Qgd2FudCB0byBob29rIHRoZSBzcHVyaW91cyBmYXVsdHM6ICovCiAJCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzKSkKIAkJCXJldHVybjsKIAkJLyoKIAkJICogRG9uJ3QgdGFrZSB0aGUgbW0gc2VtYXBob3JlIGhlcmUuIElmIHdlIGZpeHVwIGEgcHJlZmV0Y2gKLQkJICogZmF1bHQgd2UgY291bGQgb3RoZXJ3aXNlIGRlYWRsb2NrLgorCQkgKiBmYXVsdCB3ZSBjb3VsZCBvdGhlcndpc2UgZGVhZGxvY2s6CiAJCSAqLwotCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCQliYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKworCQlyZXR1cm47CiAJfQogCi0JLyoga3Byb2JlcyBkb24ndCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0cy4gKi8KLQlpZiAobm90aWZ5X3BhZ2VfZmF1bHQocmVncykpCisJLyoga3Byb2JlcyBkb24ndCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0czogKi8KKwlpZiAodW5saWtlbHkobm90aWZ5X3BhZ2VfZmF1bHQocmVncykpKQogCQlyZXR1cm47Ci0KIAkvKgogCSAqIEl0J3Mgc2FmZSB0byBhbGxvdyBpcnEncyBhZnRlciBjcjIgaGFzIGJlZW4gc2F2ZWQgYW5kIHRoZQogCSAqIHZtYWxsb2MgZmF1bHQgaGFzIGJlZW4gaGFuZGxlZC4KIAkgKgogCSAqIFVzZXItbW9kZSByZWdpc3RlcnMgY291bnQgYXMgYSB1c2VyIGFjY2VzcyBldmVuIGZvciBhbnkKLQkgKiBwb3RlbnRpYWwgc3lzdGVtIGZhdWx0IG9yIENQVSBidWdsZXQuCisJICogcG90ZW50aWFsIHN5c3RlbSBmYXVsdCBvciBDUFUgYnVnbGV0OgogCSAqLwogCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQllcnJvcl9jb2RlIHw9IFBGX1VTRVI7Ci0JfSBlbHNlIGlmIChyZWdzLT5mbGFncyAmIFg4Nl9FRkxBR1NfSUYpCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9IGVsc2UgeworCQlpZiAocmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAodW5saWtlbHkoZXJyb3JfY29kZSAmIFBGX1JTVkQpKQotCQlwZ3RhYmxlX2JhZChhZGRyZXNzLCByZWdzLCBlcnJvcl9jb2RlKTsKLSNlbmRpZgorCQlwZ3RhYmxlX2JhZChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAogCS8qCi0JICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0LCBoYXZlIG5vIHVzZXIgY29udGV4dCBvciBhcmUgcnVubmluZyBpbiBhbgotCSAqIGF0b21pYyByZWdpb24gdGhlbiB3ZSBtdXN0IG5vdCB0YWtlIHRoZSBmYXVsdC4KKwkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQsIGhhdmUgbm8gdXNlciBjb250ZXh0IG9yIGFyZSBydW5uaW5nCisJICogaW4gYW4gYXRvbWljIHJlZ2lvbiB0aGVuIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0OgogCSAqLwotCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSB8fCAhbW0pKQotCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSB8fCAhbW0pKSB7CisJCWJhZF9hcmVhX25vc2VtYXBob3JlKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KLQkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbiB0aGUKLQkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgYW4KLQkgKiBlcnJvbmVvdXMgZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9zZW0KLQkgKiB3ZSB3aWxsIGRlYWRsb2NrIGF0dGVtcHRpbmcgdG8gdmFsaWRhdGUgdGhlIGZhdWx0IGFnYWluc3QgdGhlCi0JICogYWRkcmVzcyBzcGFjZS4gIEx1Y2tpbHkgdGhlIGtlcm5lbCBvbmx5IHZhbGlkbHkgcmVmZXJlbmNlcyB1c2VyCi0JICogc3BhY2UgZnJvbSB3ZWxsIGRlZmluZWQgYXJlYXMgb2YgY29kZSwgd2hpY2ggYXJlIGxpc3RlZCBpbiB0aGUKLQkgKiBleGNlcHRpb25zIHRhYmxlLgorCSAqIGFkZHJlc3NlcyBpbiB1c2VyIHNwYWNlLiAgQWxsIG90aGVyIGZhdWx0cyByZXByZXNlbnQgZXJyb3JzIGluCisJICogdGhlIGtlcm5lbCBhbmQgc2hvdWxkIGdlbmVyYXRlIGFuIE9PUFMuICBVbmZvcnR1bmF0ZWx5LCBpbiB0aGUKKwkgKiBjYXNlIG9mIGFuIGVycm9uZW91cyBmYXVsdCBvY2N1cnJpbmcgaW4gYSBjb2RlIHBhdGggd2hpY2ggYWxyZWFkeQorCSAqIGhvbGRzIG1tYXBfc2VtIHdlIHdpbGwgZGVhZGxvY2sgYXR0ZW1wdGluZyB0byB2YWxpZGF0ZSB0aGUgZmF1bHQKKwkgKiBhZ2FpbnN0IHRoZSBhZGRyZXNzIHNwYWNlLiAgTHVja2lseSB0aGUga2VybmVsIG9ubHkgdmFsaWRseQorCSAqIHJlZmVyZW5jZXMgdXNlciBzcGFjZSBmcm9tIHdlbGwgZGVmaW5lZCBhcmVhcyBvZiBjb2RlLCB3aGljaCBhcmUKKwkgKiBsaXN0ZWQgaW4gdGhlIGV4Y2VwdGlvbnMgdGFibGUuCiAJICoKIAkgKiBBcyB0aGUgdmFzdCBtYWpvcml0eSBvZiBmYXVsdHMgd2lsbCBiZSB2YWxpZCB3ZSB3aWxsIG9ubHkgcGVyZm9ybQotCSAqIHRoZSBzb3VyY2UgcmVmZXJlbmNlIGNoZWNrIHdoZW4gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZiBhIGRlYWRsb2NrLgotCSAqIEF0dGVtcHQgdG8gbG9jayB0aGUgYWRkcmVzcyBzcGFjZSwgaWYgd2UgY2Fubm90IHdlIHRoZW4gdmFsaWRhdGUgdGhlCi0JICogc291cmNlLiAgSWYgdGhpcyBpcyBpbnZhbGlkIHdlIGNhbiBza2lwIHRoZSBhZGRyZXNzIHNwYWNlIGNoZWNrLAotCSAqIHRodXMgYXZvaWRpbmcgdGhlIGRlYWRsb2NrLgorCSAqIHRoZSBzb3VyY2UgcmVmZXJlbmNlIGNoZWNrIHdoZW4gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZiBhCisJICogZGVhZGxvY2suIEF0dGVtcHQgdG8gbG9jayB0aGUgYWRkcmVzcyBzcGFjZSwgaWYgd2UgY2Fubm90IHdlIHRoZW4KKwkgKiB2YWxpZGF0ZSB0aGUgc291cmNlLiBJZiB0aGlzIGlzIGludmFsaWQgd2UgY2FuIHNraXAgdGhlIGFkZHJlc3MKKwkgKiBzcGFjZSBjaGVjaywgdGh1cyBhdm9pZGluZyB0aGUgZGVhZGxvY2s6CiAJICovCi0JaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmbW0tPm1tYXBfc2VtKSkgeworCWlmICh1bmxpa2VseSghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpKSB7CiAJCWlmICgoZXJyb3JfY29kZSAmIFBGX1VTRVIpID09IDAgJiYKLQkJICAgICFzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5pcCkpCi0JCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCQkgICAgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPmlwKSkgeworCQkJYmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCQlyZXR1cm47CisJCX0KIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBhYm92ZSBkb3duX3JlYWRfdHJ5bG9jaygpIG1pZ2h0IGhhdmUgc3VjY2VlZGVkIGluCisJCSAqIHdoaWNoIGNhc2Ugd2UnbGwgaGF2ZSBtaXNzZWQgdGhlIG1pZ2h0X3NsZWVwKCkgZnJvbQorCQkgKiBkb3duX3JlYWQoKToKKwkJICovCisJCW1pZ2h0X3NsZWVwKCk7CiAJfQogCiAJdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpOwotCWlmICghdm1hKQotCQlnb3RvIGJhZF9hcmVhOwotCWlmICh2bWEtPnZtX3N0YXJ0IDw9IGFkZHJlc3MpCisJaWYgKHVubGlrZWx5KCF2bWEpKSB7CisJCWJhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQlyZXR1cm47CisJfQorCWlmIChsaWtlbHkodm1hLT52bV9zdGFydCA8PSBhZGRyZXNzKSkKIAkJZ290byBnb29kX2FyZWE7Ci0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCi0JCWdvdG8gYmFkX2FyZWE7CisJaWYgKHVubGlrZWx5KCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpKSB7CisJCWJhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQlyZXR1cm47CisJfQogCWlmIChlcnJvcl9jb2RlICYgUEZfVVNFUikgewogCQkvKgogCQkgKiBBY2Nlc3NpbmcgdGhlIHN0YWNrIGJlbG93ICVzcCBpcyBhbHdheXMgYSBidWcuCiAJCSAqIFRoZSBsYXJnZSBjdXNoaW9uIGFsbG93cyBpbnN0cnVjdGlvbnMgbGlrZSBlbnRlcgotCQkgKiBhbmQgcHVzaGEgdG8gd29yay4gICgiZW50ZXIgJDY1NTM1LCQzMSIgcHVzaGVzCisJCSAqIGFuZCBwdXNoYSB0byB3b3JrLiAoImVudGVyICQ2NTUzNSwgJDMxIiBwdXNoZXMKIAkJICogMzIgcG9pbnRlcnMgYW5kIHRoZW4gZGVjcmVtZW50cyAlc3AgYnkgNjU1MzUuKQogCQkgKi8KLQkJaWYgKGFkZHJlc3MgKyA2NTUzNiArIDMyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDwgcmVncy0+c3ApCi0JCQlnb3RvIGJhZF9hcmVhOworCQlpZiAodW5saWtlbHkoYWRkcmVzcyArIDY1NTM2ICsgMzIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgPCByZWdzLT5zcCkpIHsKKwkJCWJhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQkJcmV0dXJuOworCQl9CiAJfQotCWlmIChleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkKLQkJZ290byBiYWRfYXJlYTsKLS8qCi0gKiBPaywgd2UgaGF2ZSBhIGdvb2Qgdm1fYXJlYSBmb3IgdGhpcyBtZW1vcnkgYWNjZXNzLCBzbwotICogd2UgY2FuIGhhbmRsZSBpdC4uCi0gKi8KKwlpZiAodW5saWtlbHkoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcmVzcykpKSB7CisJCWJhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPaywgd2UgaGF2ZSBhIGdvb2Qgdm1fYXJlYSBmb3IgdGhpcyBtZW1vcnkgYWNjZXNzLCBzbworCSAqIHdlIGNhbiBoYW5kbGUgaXQuLgorCSAqLwogZ29vZF9hcmVhOgotCXNpX2NvZGUgPSBTRUdWX0FDQ0VSUjsKLQl3cml0ZSA9IDA7Ci0Jc3dpdGNoIChlcnJvcl9jb2RlICYgKFBGX1BST1R8UEZfV1JJVEUpKSB7Ci0JZGVmYXVsdDoJLyogMzogd3JpdGUsIHByZXNlbnQgKi8KLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBQRl9XUklURToJCS8qIHdyaXRlLCBub3QgcHJlc2VudCAqLwotCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQotCQkJZ290byBiYWRfYXJlYTsKLQkJd3JpdGUrKzsKLQkJYnJlYWs7Ci0JY2FzZSBQRl9QUk9UOgkJLyogcmVhZCwgcHJlc2VudCAqLwotCQlnb3RvIGJhZF9hcmVhOwotCWNhc2UgMDoJCQkvKiByZWFkLCBub3QgcHJlc2VudCAqLwotCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fV1JJVEUpKSkKLQkJCWdvdG8gYmFkX2FyZWE7CisJd3JpdGUgPSBlcnJvcl9jb2RlICYgUEZfV1JJVEU7CisKKwlpZiAodW5saWtlbHkoYWNjZXNzX2Vycm9yKGVycm9yX2NvZGUsIHdyaXRlLCB2bWEpKSkgeworCQliYWRfYXJlYV9hY2Nlc3NfZXJyb3IocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGZhdWx0LAogCSAqIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW5kbGVzc2x5IHJlZG8KLQkgKiB0aGUgZmF1bHQuCisJICogdGhlIGZhdWx0OgogCSAqLwogCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHdyaXRlKTsKKwogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewotCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCi0JCQlnb3RvIG91dF9vZl9tZW1vcnk7Ci0JCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQotCQkJZ290byBkb19zaWdidXM7Ci0JCUJVRygpOworCQltbV9mYXVsdF9lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBmYXVsdCk7CisJCXJldHVybjsKIAl9CisKIAlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKIAkJdHNrLT5tYWpfZmx0Kys7CiAJZWxzZQogCQl0c2stPm1pbl9mbHQrKzsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIERpZCBpdCBoaXQgdGhlIERPUyBzY3JlZW4gbWVtb3J5IFZBIGZyb20gdm04NiBtb2RlPwotCSAqLwotCWlmICh2ODA4Nl9tb2RlKHJlZ3MpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYml0ID0gKGFkZHJlc3MgLSAweEEwMDAwKSA+PiBQQUdFX1NISUZUOwotCQlpZiAoYml0IDwgMzIpCi0JCQl0c2stPnRocmVhZC5zY3JlZW5fYml0bWFwIHw9IDEgPDwgYml0OwotCX0KLSNlbmRpZgorCWNoZWNrX3Y4MDg2X21vZGUocmVncywgYWRkcmVzcywgdHNrKTsKKwogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuOwotCi0vKgotICogU29tZXRoaW5nIHRyaWVkIHRvIGFjY2VzcyBtZW1vcnkgdGhhdCBpc24ndCBpbiBvdXIgbWVtb3J5IG1hcC4uCi0gKiBGaXggaXQsIGJ1dCBjaGVjayBpZiBpdCdzIGtlcm5lbCBvciB1c2VyIGZpcnN0Li4KLSAqLwotYmFkX2FyZWE6Ci0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQotYmFkX2FyZWFfbm9zZW1hcGhvcmU6Ci0JLyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovCi0JaWYgKGVycm9yX2NvZGUgJiBQRl9VU0VSKSB7Ci0JCS8qCi0JCSAqIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBpbnRlcnJ1cHRzIG9mZiBoZXJlLgotCQkgKi8KLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JCS8qCi0JCSAqIFZhbGlkIHRvIGRvIGFub3RoZXIgcGFnZSBmYXVsdCBoZXJlIGJlY2F1c2UgdGhpcyBvbmUgY2FtZQotCQkgKiBmcm9tIHVzZXIgc3BhY2UuCi0JCSAqLwotCQlpZiAoaXNfcHJlZmV0Y2gocmVncywgYWRkcmVzcywgZXJyb3JfY29kZSkpCi0JCQlyZXR1cm47Ci0KLQkJaWYgKGlzX2VycmF0YTEwMChyZWdzLCBhZGRyZXNzKSkKLQkJCXJldHVybjsKLQotCQlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiB1bmhhbmRsZWRfc2lnbmFsKHRzaywgU0lHU0VHVikgJiYKLQkJICAgIHByaW50a19yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKAotCQkJIiVzJXNbJWRdOiBzZWdmYXVsdCBhdCAlbHggaXAgJXAgc3AgJXAgZXJyb3IgJWx4IiwKLQkJCXRhc2tfcGlkX25yKHRzaykgPiAxID8gS0VSTl9JTkZPIDogS0VSTl9FTUVSRywKLQkJCXRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgYWRkcmVzcywKLQkJCSh2b2lkICopIHJlZ3MtPmlwLCAodm9pZCAqKSByZWdzLT5zcCwgZXJyb3JfY29kZSk7Ci0JCQlwcmludF92bWFfYWRkcigiIGluICIsIHJlZ3MtPmlwKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotCi0JCXRzay0+dGhyZWFkLmNyMiA9IGFkZHJlc3M7Ci0JCS8qIEtlcm5lbCBhZGRyZXNzZXMgYXJlIGFsd2F5cyBwcm90ZWN0aW9uIGZhdWx0cyAqLwotCQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZSB8IChhZGRyZXNzID49IFRBU0tfU0laRSk7Ci0JCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxNDsKLQkJZm9yY2Vfc2lnX2luZm9fZmF1bHQoU0lHU0VHViwgc2lfY29kZSwgYWRkcmVzcywgdHNrKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChpc19mMDBmX2J1ZyhyZWdzLCBhZGRyZXNzKSkKLQkJcmV0dXJuOwotCi1ub19jb250ZXh0OgotCS8qIEFyZSB3ZSBwcmVwYXJlZCB0byBoYW5kbGUgdGhpcyBrZXJuZWwgZmF1bHQ/ICAqLwotCWlmIChmaXh1cF9leGNlcHRpb24ocmVncykpCi0JCXJldHVybjsKLQotCS8qCi0JICogWDg2XzMyCi0JICogVmFsaWQgdG8gZG8gYW5vdGhlciBwYWdlIGZhdWx0IGhlcmUsIGJlY2F1c2UgaWYgdGhpcyBmYXVsdAotCSAqIGhhZCBiZWVuIHRyaWdnZXJlZCBieSBpc19wcmVmZXRjaCBmaXh1cF9leGNlcHRpb24gd291bGQgaGF2ZQotCSAqIGhhbmRsZWQgaXQuCi0JICoKLQkgKiBYODZfNjQKLQkgKiBIYWxsIG9mIHNoYW1lIG9mIENQVS9CSU9TIGJ1Z3MuCi0JICovCi0JaWYgKGlzX3ByZWZldGNoKHJlZ3MsIGFkZHJlc3MsIGVycm9yX2NvZGUpKQotCQlyZXR1cm47Ci0KLQlpZiAoaXNfZXJyYXRhOTMocmVncywgYWRkcmVzcykpCi0JCXJldHVybjsKLQotLyoKLSAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KLSAqIHRlcm1pbmF0ZSB0aGluZ3Mgd2l0aCBleHRyZW1lIHByZWp1ZGljZS4KLSAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLQlidXN0X3NwaW5sb2NrcygxKTsKLSNlbHNlCi0JZmxhZ3MgPSBvb3BzX2JlZ2luKCk7Ci0jZW5kaWYKLQotCXNob3dfZmF1bHRfb29wcyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKLQotCXRzay0+dGhyZWFkLmNyMiA9IGFkZHJlc3M7Ci0JdHNrLT50aHJlYWQudHJhcF9ubyA9IDE0OwotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWRpZSgiT29wcyIsIHJlZ3MsIGVycm9yX2NvZGUpOwotCWJ1c3Rfc3BpbmxvY2tzKDApOwotCWRvX2V4aXQoU0lHS0lMTCk7Ci0jZWxzZQotCXNpZyA9IFNJR0tJTEw7Ci0JaWYgKF9fZGllKCJPb3BzIiwgcmVncywgZXJyb3JfY29kZSkpCi0JCXNpZyA9IDA7Ci0JLyogRXhlY3V0aXZlIHN1bW1hcnkgaW4gY2FzZSB0aGUgYm9keSBvZiB0aGUgb29wcyBzY3JvbGxlZCBhd2F5ICovCi0JcHJpbnRrKEtFUk5fRU1FUkcgIkNSMjogJTAxNmx4XG4iLCBhZGRyZXNzKTsKLQlvb3BzX2VuZChmbGFncywgcmVncywgc2lnKTsKLSNlbmRpZgotCi1vdXRfb2ZfbWVtb3J5OgotCS8qCi0JICogV2UgcmFuIG91dCBvZiBtZW1vcnksIGNhbGwgdGhlIE9PTSBraWxsZXIsIGFuZCByZXR1cm4gdGhlIHVzZXJzcGFjZQotCSAqICh3aGljaCB3aWxsIHJldHJ5IHRoZSBmYXVsdCwgb3Iga2lsbCB1cyBpZiB3ZSBnb3Qgb29tLWtpbGxlZCkuCi0JICovCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOwotCXJldHVybjsKLQotZG9fc2lnYnVzOgotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0KLQkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllICovCi0JaWYgKCEoZXJyb3JfY29kZSAmIFBGX1VTRVIpKQotCQlnb3RvIG5vX2NvbnRleHQ7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qIFVzZXIgc3BhY2UgPT4gb2sgdG8gZG8gYW5vdGhlciBwYWdlIGZhdWx0ICovCi0JaWYgKGlzX3ByZWZldGNoKHJlZ3MsIGFkZHJlc3MsIGVycm9yX2NvZGUpKQotCQlyZXR1cm47Ci0jZW5kaWYKLQl0c2stPnRocmVhZC5jcjIgPSBhZGRyZXNzOwotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxNDsKLQlmb3JjZV9zaWdfaW5mb19mYXVsdChTSUdCVVMsIEJVU19BRFJFUlIsIGFkZHJlc3MsIHRzayk7Ci19Ci0KLURFRklORV9TUElOTE9DSyhwZ2RfbG9jayk7Ci1MSVNUX0hFQUQocGdkX2xpc3QpOwotCi12b2lkIHZtYWxsb2Nfc3luY19hbGwodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKFNIQVJFRF9LRVJORUxfUE1EKQotCQlyZXR1cm47Ci0KLQlmb3IgKGFkZHJlc3MgPSBWTUFMTE9DX1NUQVJUICYgUE1EX01BU0s7Ci0JICAgICBhZGRyZXNzID49IFRBU0tfU0laRSAmJiBhZGRyZXNzIDwgRklYQUREUl9UT1A7Ci0JICAgICBhZGRyZXNzICs9IFBNRF9TSVpFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZwZ2RfbGlzdCwgbHJ1KSB7Ci0JCQlpZiAoIXZtYWxsb2Nfc3luY19vbmUocGFnZV9hZGRyZXNzKHBhZ2UpLAotCQkJCQkgICAgICBhZGRyZXNzKSkKLQkJCQlicmVhazsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOwotCX0KLSNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KLQlmb3IgKGFkZHJlc3MgPSBWTUFMTE9DX1NUQVJUICYgUEdESVJfTUFTSzsgYWRkcmVzcyA8PSBWTUFMTE9DX0VORDsKLQkgICAgIGFkZHJlc3MgKz0gUEdESVJfU0laRSkgewotCQljb25zdCBwZ2RfdCAqcGdkX3JlZiA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJaWYgKHBnZF9ub25lKCpwZ2RfcmVmKSkKLQkJCWNvbnRpbnVlOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGdkX2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCAmcGdkX2xpc3QsIGxydSkgewotCQkJcGdkX3QgKnBnZDsKLQkJCXBnZCA9IChwZ2RfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKSArIHBnZF9pbmRleChhZGRyZXNzKTsKLQkJCWlmIChwZ2Rfbm9uZSgqcGdkKSkKLQkJCQlzZXRfcGdkKHBnZCwgKnBnZF9yZWYpOwotCQkJZWxzZQotCQkJCUJVR19PTihwZ2RfcGFnZV92YWRkcigqcGdkKSAhPSBwZ2RfcGFnZV92YWRkcigqcGdkX3JlZikpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBnZF9sb2NrLCBmbGFncyk7Ci0JfQotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggYmNjMDc5Yy4uMDBmMTI3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPiAvKiBmb3IgdG90YWxyYW1fcGFnZXMgKi8KIAogdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTE1NiwzICsxNTcsMzYgQEAKIEVYUE9SVF9TWU1CT0woa3VubWFwKTsKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKKworI2lmZGVmIENPTkZJR19OVU1BCit2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCit7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJaW50IG5pZDsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCQl1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm47CisKKwkJaWYgKCFpc19oaWdobWVtKHpvbmUpKQorCQkJY29udGludWU7CisKKwkJem9uZV9zdGFydF9wZm4gPSB6b25lLT56b25lX3N0YXJ0X3BmbjsKKwkJem9uZV9lbmRfcGZuID0gem9uZV9zdGFydF9wZm4gKyB6b25lLT5zcGFubmVkX3BhZ2VzOworCisJCW5pZCA9IHpvbmVfdG9fbmlkKHpvbmUpOworCQlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgJXMgZm9yIG5vZGUgJWQgKCUwOGx4OiUwOGx4KVxuIiwKKwkJCQl6b25lLT5uYW1lLCBuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pOworCisJCWFkZF9oaWdocGFnZXNfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQsIHpvbmVfc3RhcnRfcGZuLAorCQkJCSB6b25lX2VuZF9wZm4pOworCX0KKwl0b3RhbHJhbV9wYWdlcyArPSB0b3RhbGhpZ2hfcGFnZXM7Cit9CisjZWxzZQordm9pZCBfX2luaXQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKQoreworCWFkZF9oaWdocGFnZXNfd2l0aF9hY3RpdmVfcmVnaW9ucygwLCBoaWdoc3RhcnRfcGZuLCBoaWdoZW5kX3Bmbik7CisKKwl0b3RhbHJhbV9wYWdlcyArPSB0b3RhbGhpZ2hfcGFnZXM7Cit9CisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTZhNzIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0wLDAgKzEsNDkgQEAKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKwordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gYmVnaW47CisKKwlpZiAoYWRkciA+PSBlbmQpCisJCXJldHVybjsKKworCS8qCisJICogSWYgZGVidWdnaW5nIHBhZ2UgYWNjZXNzZXMgdGhlbiBkbyBub3QgZnJlZSB0aGlzIG1lbW9yeSBidXQKKwkgKiBtYXJrIHRoZW0gbm90IHByZXNlbnQgLSBhbnkgYnVnZ3kgaW5pdC1zZWN0aW9uIGFjY2VzcyB3aWxsCisJICogY3JlYXRlIGEga2VybmVsIHBhZ2UgZmF1bHQ6CisJICovCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCXByaW50ayhLRVJOX0lORk8gImRlYnVnOiB1bm1hcHBpbmcgaW5pdCBtZW1vcnkgJTA4bHguLiUwOGx4XG4iLAorCQliZWdpbiwgUEFHRV9BTElHTihlbmQpKTsKKwlzZXRfbWVtb3J5X25wKGJlZ2luLCAoZW5kIC0gYmVnaW4pID4+IFBBR0VfU0hJRlQpOworI2Vsc2UKKwkvKgorCSAqIFdlIGp1c3QgbWFya2VkIHRoZSBrZXJuZWwgdGV4dCByZWFkIG9ubHkgYWJvdmUsIG5vdyB0aGF0CisJICogd2UgYXJlIGdvaW5nIHRvIGZyZWUgcGFydCBvZiB0aGF0LCB3ZSBuZWVkIHRvIG1ha2UgdGhhdAorCSAqIHdyaXRlYWJsZSBmaXJzdC4KKwkgKi8KKwlzZXRfbWVtb3J5X3J3KGJlZ2luLCAoZW5kIC0gYmVnaW4pID4+IFBBR0VfU0hJRlQpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7CisKKwlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CisJCW1lbXNldCgodm9pZCAqKShhZGRyICYgfihQQUdFX1NJWkUtMSkpLAorCQkJUE9JU09OX0ZSRUVfSU5JVE1FTSwgUEFHRV9TSVpFKTsKKwkJZnJlZV9wYWdlKGFkZHIpOworCQl0b3RhbHJhbV9wYWdlcysrOworCX0KKyNlbmRpZgorfQorCit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLAorCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pLAorCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggMmNlZjA1MC4uNDdkZjBlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtNDksOSArNDksNiBAQAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi11bnNpZ25lZCBpbnQgX19WTUFMTE9DX1JFU0VSVkUgPSAxMjggPDwgMjA7CiAKIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOwogdW5zaWduZWQgbG9uZyBtYXhfcGZuX21hcHBlZDsKQEAgLTEzOCw2ICsxMzUsMjMgQEAKIAlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCAwKTsKIH0KIAorcG1kX3QgKiBfX2luaXQgcG9wdWxhdGVfZXh0cmFfcG1kKHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJaW50IHBnZF9pZHggPSBwZ2RfaW5kZXgodmFkZHIpOworCWludCBwbWRfaWR4ID0gcG1kX2luZGV4KHZhZGRyKTsKKworCXJldHVybiBvbmVfbWRfdGFibGVfaW5pdChzd2FwcGVyX3BnX2RpciArIHBnZF9pZHgpICsgcG1kX2lkeDsKK30KKworcHRlX3QgKiBfX2luaXQgcG9wdWxhdGVfZXh0cmFfcHRlKHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJaW50IHB0ZV9pZHggPSBwdGVfaW5kZXgodmFkZHIpOworCXBtZF90ICpwbWQ7CisKKwlwbWQgPSBwb3B1bGF0ZV9leHRyYV9wbWQodmFkZHIpOworCXJldHVybiBvbmVfcGFnZV90YWJsZV9pbml0KHBtZCkgKyBwdGVfaWR4OworfQorCiBzdGF0aWMgcHRlX3QgKl9faW5pdCBwYWdlX3RhYmxlX2ttYXBfY2hlY2socHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwKIAkJCQkJICAgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgKmxhc3RwdGUpCiB7CkBAIC00NzAsMjIgKzQ4NCwxMCBAQAogCXdvcmtfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQsIGFkZF9oaWdocGFnZXNfd29ya19mbiwgJmRhdGEpOwogfQogCi0jaWZuZGVmIENPTkZJR19OVU1BCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKQotewotCWFkZF9oaWdocGFnZXNfd2l0aF9hY3RpdmVfcmVnaW9ucygwLCBoaWdoc3RhcnRfcGZuLCBoaWdoZW5kX3Bmbik7Ci0KLQl0b3RhbHJhbV9wYWdlcyArPSB0b3RhbGhpZ2hfcGFnZXM7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19OVU1BICovCi0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcGVybWFuZW50X2ttYXBzX2luaXQocGdkX3QgKnBnZF9iYXNlKQogewogfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9oaWdobWVtX3BhZ2VzX2luaXQodm9pZCkKLXsKLX0KICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCiB2b2lkIF9faW5pdCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQpAQCAtNjc1LDYgKzY3Nyw4NiBAQAogfQogZWFybHlfcGFyYW0oImhpZ2htZW0iLCBwYXJzZV9oaWdobWVtKTsKIAorI2RlZmluZSBNU0dfSElHSE1FTV9UT09fQklHIFwKKwkiaGlnaG1lbSBzaXplICglbHVNQikgaXMgYmlnZ2VyIHRoYW4gcGFnZXMgYXZhaWxhYmxlICglbHVNQikhXG4iCisKKyNkZWZpbmUgTVNHX0xPV01FTV9UT09fU01BTEwgXAorCSJoaWdobWVtIHNpemUgKCVsdU1CKSByZXN1bHRzIGluIDw2NE1CIGxvd21lbSwgaWdub3JpbmcgaXQhXG4iCisvKgorICogQWxsIG9mIFJBTSBmaXRzIGludG8gbG93bWVtIC0gYnV0IGlmIHVzZXIgd2FudHMgaGlnaG1lbQorICogYXJ0aWZpY2lhbGx5IHZpYSB0aGUgaGlnaG1lbT14IGJvb3QgcGFyYW1ldGVyIHRoZW4gY3JlYXRlCisgKiBpdDoKKyAqLwordm9pZCBfX2luaXQgbG93bWVtX3Bmbl9pbml0KHZvaWQpCit7CisJLyogbWF4X2xvd19wZm4gaXMgMCwgd2UgYWxyZWFkeSBoYXZlIGVhcmx5X3JlcyBzdXBwb3J0ICovCisJbWF4X2xvd19wZm4gPSBtYXhfcGZuOworCisJaWYgKGhpZ2htZW1fcGFnZXMgPT0gLTEpCisJCWhpZ2htZW1fcGFnZXMgPSAwOworI2lmZGVmIENPTkZJR19ISUdITUVNCisJaWYgKGhpZ2htZW1fcGFnZXMgPj0gbWF4X3BmbikgeworCQlwcmludGsoS0VSTl9FUlIgTVNHX0hJR0hNRU1fVE9PX0JJRywKKwkJCXBhZ2VzX3RvX21iKGhpZ2htZW1fcGFnZXMpLCBwYWdlc190b19tYihtYXhfcGZuKSk7CisJCWhpZ2htZW1fcGFnZXMgPSAwOworCX0KKwlpZiAoaGlnaG1lbV9wYWdlcykgeworCQlpZiAobWF4X2xvd19wZm4gLSBoaWdobWVtX3BhZ2VzIDwgNjQqMTAyNCoxMDI0L1BBR0VfU0laRSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIE1TR19MT1dNRU1fVE9PX1NNQUxMLAorCQkJCXBhZ2VzX3RvX21iKGhpZ2htZW1fcGFnZXMpKTsKKwkJCWhpZ2htZW1fcGFnZXMgPSAwOworCQl9CisJCW1heF9sb3dfcGZuIC09IGhpZ2htZW1fcGFnZXM7CisJfQorI2Vsc2UKKwlpZiAoaGlnaG1lbV9wYWdlcykKKwkJcHJpbnRrKEtFUk5fRVJSICJpZ25vcmluZyBoaWdobWVtIHNpemUgb24gbm9uLWhpZ2htZW0ga2VybmVsIVxuIik7CisjZW5kaWYKK30KKworI2RlZmluZSBNU0dfSElHSE1FTV9UT09fU01BTEwgXAorCSJvbmx5ICVsdU1CIGhpZ2htZW0gcGFnZXMgYXZhaWxhYmxlLCBpZ25vcmluZyBoaWdobWVtIHNpemUgb2YgJWx1TUIhXG4iCisKKyNkZWZpbmUgTVNHX0hJR0hNRU1fVFJJTU1FRCBcCisJIldhcm5pbmc6IG9ubHkgNEdCIHdpbGwgYmUgdXNlZC4gVXNlIGEgSElHSE1FTTY0RyBlbmFibGVkIGtlcm5lbCFcbiIKKy8qCisgKiBXZSBoYXZlIG1vcmUgUkFNIHRoYW4gZml0cyBpbnRvIGxvd21lbSAtIHdlIHRyeSB0byBwdXQgaXQgaW50bworICogaGlnaG1lbSwgYWxzbyB0YWtpbmcgdGhlIGhpZ2htZW09eCBib290IHBhcmFtZXRlciBpbnRvIGFjY291bnQ6CisgKi8KK3ZvaWQgX19pbml0IGhpZ2htZW1fcGZuX2luaXQodm9pZCkKK3sKKwltYXhfbG93X3BmbiA9IE1BWE1FTV9QRk47CisKKwlpZiAoaGlnaG1lbV9wYWdlcyA9PSAtMSkKKwkJaGlnaG1lbV9wYWdlcyA9IG1heF9wZm4gLSBNQVhNRU1fUEZOOworCisJaWYgKGhpZ2htZW1fcGFnZXMgKyBNQVhNRU1fUEZOIDwgbWF4X3BmbikKKwkJbWF4X3BmbiA9IE1BWE1FTV9QRk4gKyBoaWdobWVtX3BhZ2VzOworCisJaWYgKGhpZ2htZW1fcGFnZXMgKyBNQVhNRU1fUEZOID4gbWF4X3BmbikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIE1TR19ISUdITUVNX1RPT19TTUFMTCwKKwkJCXBhZ2VzX3RvX21iKG1heF9wZm4gLSBNQVhNRU1fUEZOKSwKKwkJCXBhZ2VzX3RvX21iKGhpZ2htZW1fcGFnZXMpKTsKKwkJaGlnaG1lbV9wYWdlcyA9IDA7CisJfQorI2lmbmRlZiBDT05GSUdfSElHSE1FTQorCS8qIE1heGltdW0gbWVtb3J5IHVzYWJsZSBpcyB3aGF0IGlzIGRpcmVjdGx5IGFkZHJlc3NhYmxlICovCisJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBvbmx5ICVsZE1CIHdpbGwgYmUgdXNlZC5cbiIsIE1BWE1FTT4+MjApOworCWlmIChtYXhfcGZuID4gTUFYX05PTlBBRV9QRk4pCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVzZSBhIEhJR0hNRU02NEcgZW5hYmxlZCBrZXJuZWwuXG4iKTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVzZSBhIEhJR0hNRU0gZW5hYmxlZCBrZXJuZWwuXG4iKTsKKwltYXhfcGZuID0gTUFYTUVNX1BGTjsKKyNlbHNlIC8qICFDT05GSUdfSElHSE1FTSAqLworI2lmbmRlZiBDT05GSUdfSElHSE1FTTY0RworCWlmIChtYXhfcGZuID4gTUFYX05PTlBBRV9QRk4pIHsKKwkJbWF4X3BmbiA9IE1BWF9OT05QQUVfUEZOOworCQlwcmludGsoS0VSTl9XQVJOSU5HIE1TR19ISUdITUVNX1RSSU1NRUQpOworCX0KKyNlbmRpZiAvKiAhQ09ORklHX0hJR0hNRU02NEcgKi8KKyNlbmRpZiAvKiAhQ09ORklHX0hJR0hNRU0gKi8KK30KKwogLyoKICAqIERldGVybWluZSBsb3cgYW5kIGhpZ2ggbWVtb3J5IHJhbmdlczoKICAqLwpAQCAtNjgyLDY4ICs3NjQsMTAgQEAKIHsKIAkvKiBpdCBjb3VsZCB1cGRhdGUgbWF4X3BmbiAqLwogCi0JLyogbWF4X2xvd19wZm4gaXMgMCwgd2UgYWxyZWFkeSBoYXZlIGVhcmx5X3JlcyBzdXBwb3J0ICovCi0KLQltYXhfbG93X3BmbiA9IG1heF9wZm47Ci0JaWYgKG1heF9sb3dfcGZuID4gTUFYTUVNX1BGTikgewotCQlpZiAoaGlnaG1lbV9wYWdlcyA9PSAtMSkKLQkJCWhpZ2htZW1fcGFnZXMgPSBtYXhfcGZuIC0gTUFYTUVNX1BGTjsKLQkJaWYgKGhpZ2htZW1fcGFnZXMgKyBNQVhNRU1fUEZOIDwgbWF4X3BmbikKLQkJCW1heF9wZm4gPSBNQVhNRU1fUEZOICsgaGlnaG1lbV9wYWdlczsKLQkJaWYgKGhpZ2htZW1fcGFnZXMgKyBNQVhNRU1fUEZOID4gbWF4X3BmbikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAib25seSAlbHVNQiBoaWdobWVtIHBhZ2VzICIKLQkJCQkiYXZhaWxhYmxlLCBpZ25vcmluZyBoaWdobWVtIHNpemUgb2YgJXVNQi5cbiIsCi0JCQkJcGFnZXNfdG9fbWIobWF4X3BmbiAtIE1BWE1FTV9QRk4pLAotCQkJCXBhZ2VzX3RvX21iKGhpZ2htZW1fcGFnZXMpKTsKLQkJCWhpZ2htZW1fcGFnZXMgPSAwOwotCQl9Ci0JCW1heF9sb3dfcGZuID0gTUFYTUVNX1BGTjsKLSNpZm5kZWYgQ09ORklHX0hJR0hNRU0KLQkJLyogTWF4aW11bSBtZW1vcnkgdXNhYmxlIGlzIHdoYXQgaXMgZGlyZWN0bHkgYWRkcmVzc2FibGUgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBvbmx5ICVsZE1CIHdpbGwgYmUgdXNlZC5cbiIsCi0JCQkJCU1BWE1FTT4+MjApOwotCQlpZiAobWF4X3BmbiA+IE1BWF9OT05QQUVfUEZOKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAiVXNlIGEgSElHSE1FTTY0RyBlbmFibGVkIGtlcm5lbC5cbiIpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJVc2UgYSBISUdITUVNIGVuYWJsZWQga2VybmVsLlxuIik7Ci0JCW1heF9wZm4gPSBNQVhNRU1fUEZOOwotI2Vsc2UgLyogIUNPTkZJR19ISUdITUVNICovCi0jaWZuZGVmIENPTkZJR19ISUdITUVNNjRHCi0JCWlmIChtYXhfcGZuID4gTUFYX05PTlBBRV9QRk4pIHsKLQkJCW1heF9wZm4gPSBNQVhfTk9OUEFFX1BGTjsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgb25seSA0R0Igd2lsbCBiZSB1c2VkLiIKLQkJCQkiVXNlIGEgSElHSE1FTTY0RyBlbmFibGVkIGtlcm5lbC5cbiIpOwotCQl9Ci0jZW5kaWYgLyogIUNPTkZJR19ISUdITUVNNjRHICovCi0jZW5kaWYgLyogIUNPTkZJR19ISUdITUVNICovCi0JfSBlbHNlIHsKLQkJaWYgKGhpZ2htZW1fcGFnZXMgPT0gLTEpCi0JCQloaWdobWVtX3BhZ2VzID0gMDsKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCQlpZiAoaGlnaG1lbV9wYWdlcyA+PSBtYXhfcGZuKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZ2htZW0gc2l6ZSBzcGVjaWZpZWQgKCV1TUIpIGlzICIKLQkJCQkiYmlnZ2VyIHRoYW4gcGFnZXMgYXZhaWxhYmxlICglbHVNQikhLlxuIiwKLQkJCQlwYWdlc190b19tYihoaWdobWVtX3BhZ2VzKSwKLQkJCQlwYWdlc190b19tYihtYXhfcGZuKSk7Ci0JCQloaWdobWVtX3BhZ2VzID0gMDsKLQkJfQotCQlpZiAoaGlnaG1lbV9wYWdlcykgewotCQkJaWYgKG1heF9sb3dfcGZuIC0gaGlnaG1lbV9wYWdlcyA8Ci0JCQkgICAgNjQqMTAyNCoxMDI0L1BBR0VfU0laRSl7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJoaWdobWVtIHNpemUgJXVNQiByZXN1bHRzIGluICIKLQkJCQkic21hbGxlciB0aGFuIDY0TUIgbG93bWVtLCBpZ25vcmluZyBpdC5cbiIKLQkJCQkJLCBwYWdlc190b19tYihoaWdobWVtX3BhZ2VzKSk7Ci0JCQkJaGlnaG1lbV9wYWdlcyA9IDA7Ci0JCQl9Ci0JCQltYXhfbG93X3BmbiAtPSBoaWdobWVtX3BhZ2VzOwotCQl9Ci0jZWxzZQotCQlpZiAoaGlnaG1lbV9wYWdlcykKLQkJCXByaW50ayhLRVJOX0VSUiAiaWdub3JpbmcgaGlnaG1lbSBzaXplIG9uIG5vbi1oaWdobWVtIgotCQkJCQkiIGtlcm5lbCFcbiIpOwotI2VuZGlmCi0JfQorCWlmIChtYXhfcGZuIDw9IE1BWE1FTV9QRk4pCisJCWxvd21lbV9wZm5faW5pdCgpOworCWVsc2UKKwkJaGlnaG1lbV9wZm5faW5pdCgpOwogfQogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCkBAIC04MjYsMTAgKzg1MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgcHVkcywgcG1kcywgcHRlcywgdGFibGVzLCBzdGFydDsKIAogCXB1ZHMgPSAoZW5kICsgUFVEX1NJWkUgLSAxKSA+PiBQVURfU0hJRlQ7Ci0JdGFibGVzID0gUEFHRV9BTElHTihwdWRzICogc2l6ZW9mKHB1ZF90KSk7CisJdGFibGVzID0gcm91bmR1cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTsKIAogCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JdGFibGVzICs9IFBBR0VfQUxJR04ocG1kcyAqIHNpemVvZihwbWRfdCkpOworCXRhYmxlcyArPSByb3VuZHVwKHBtZHMgKiBzaXplb2YocG1kX3QpLCBQQUdFX1NJWkUpOwogCiAJaWYgKHVzZV9wc2UpIHsKIAkJdW5zaWduZWQgbG9uZyBleHRyYTsKQEAgLTg0MCwxMCArODY0LDEwIEBACiAJfSBlbHNlCiAJCXB0ZXMgPSAoZW5kICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIAotCXRhYmxlcyArPSBQQUdFX0FMSUdOKHB0ZXMgKiBzaXplb2YocHRlX3QpKTsKKwl0YWJsZXMgKz0gcm91bmR1cChwdGVzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTsKIAogCS8qIGZvciBmaXhtYXAgKi8KLQl0YWJsZXMgKz0gUEFHRV9BTElHTihfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgKiBzaXplb2YocHRlX3QpKTsKKwl0YWJsZXMgKz0gcm91bmR1cChfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOwogCiAJLyoKIAkgKiBSRUQtUEVOIHB1dHRpbmcgcGFnZSB0YWJsZXMgb25seSBvbiBub2RlIDAgY291bGQKQEAgLTExOTMsNDUgKzEyMTcsNiBAQAogfQogI2VuZGlmCiAKLXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQotewotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLQkvKgotCSAqIElmIGRlYnVnZ2luZyBwYWdlIGFjY2Vzc2VzIHRoZW4gZG8gbm90IGZyZWUgdGhpcyBtZW1vcnkgYnV0Ci0JICogbWFyayB0aGVtIG5vdCBwcmVzZW50IC0gYW55IGJ1Z2d5IGluaXQtc2VjdGlvbiBhY2Nlc3Mgd2lsbAotCSAqIGNyZWF0ZSBhIGtlcm5lbCBwYWdlIGZhdWx0OgotCSAqLwotCXByaW50ayhLRVJOX0lORk8gImRlYnVnOiB1bm1hcHBpbmcgaW5pdCBtZW1vcnkgJTA4bHguLiUwOGx4XG4iLAotCQliZWdpbiwgUEFHRV9BTElHTihlbmQpKTsKLQlzZXRfbWVtb3J5X25wKGJlZ2luLCAoZW5kIC0gYmVnaW4pID4+IFBBR0VfU0hJRlQpOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkvKgotCSAqIFdlIGp1c3QgbWFya2VkIHRoZSBrZXJuZWwgdGV4dCByZWFkIG9ubHkgYWJvdmUsIG5vdyB0aGF0Ci0JICogd2UgYXJlIGdvaW5nIHRvIGZyZWUgcGFydCBvZiB0aGF0LCB3ZSBuZWVkIHRvIG1ha2UgdGhhdAotCSAqIHdyaXRlYWJsZSBmaXJzdC4KLQkgKi8KLQlzZXRfbWVtb3J5X3J3KGJlZ2luLCAoZW5kIC0gYmVnaW4pID4+IFBBR0VfU0hJRlQpOwotCi0JZm9yIChhZGRyID0gYmVnaW47IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQltZW1zZXQoKHZvaWQgKilhZGRyLCBQT0lTT05fRlJFRV9JTklUTUVNLCBQQUdFX1NJWkUpOwotCQlmcmVlX3BhZ2UoYWRkcik7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXM6ICVsdWsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOwotI2VuZGlmCi19Ci0KLXZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCi17Ci0JZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCi0JCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbiksCi0JCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpKTsKLX0KLQogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggYjEzNTIyNS4uMDdmNDRkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwpAQCAtMTY4LDM0ICsxNjgsNTEgQEAKIAlyZXR1cm4gcHRyOwogfQogCi12b2lkCi1zZXRfcHRlX3ZhZGRyX3B1ZChwdWRfdCAqcHVkX3BhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IG5ld19wdGUpCitzdGF0aWMgcHVkX3QgKmZpbGxfcHVkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJaWYgKHBnZF9ub25lKCpwZ2QpKSB7CisJCXB1ZF90ICpwdWQgPSAocHVkX3QgKilzcHBfZ2V0cGFnZSgpOworCQlwZ2RfcG9wdWxhdGUoJmluaXRfbW0sIHBnZCwgcHVkKTsKKwkJaWYgKHB1ZCAhPSBwdWRfb2Zmc2V0KHBnZCwgMCkpCisJCQlwcmludGsoS0VSTl9FUlIgIlBBR0VUQUJMRSBCVUcgIzAwISAlcCA8LT4gJXBcbiIsCisJCQkgICAgICAgcHVkLCBwdWRfb2Zmc2V0KHBnZCwgMCkpOworCX0KKwlyZXR1cm4gcHVkX29mZnNldChwZ2QsIHZhZGRyKTsKK30KKworc3RhdGljIHBtZF90ICpmaWxsX3BtZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCWlmIChwdWRfbm9uZSgqcHVkKSkgeworCQlwbWRfdCAqcG1kID0gKHBtZF90ICopIHNwcF9nZXRwYWdlKCk7CisJCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBwbWQpOworCQlpZiAocG1kICE9IHBtZF9vZmZzZXQocHVkLCAwKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiUEFHRVRBQkxFIEJVRyAjMDEhICVwIDwtPiAlcFxuIiwKKwkJCSAgICAgICBwbWQsIHBtZF9vZmZzZXQocHVkLCAwKSk7CisJfQorCXJldHVybiBwbWRfb2Zmc2V0KHB1ZCwgdmFkZHIpOworfQorCitzdGF0aWMgcHRlX3QgKmZpbGxfcHRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJaWYgKHBtZF9ub25lKCpwbWQpKSB7CisJCXB0ZV90ICpwdGUgPSAocHRlX3QgKikgc3BwX2dldHBhZ2UoKTsKKwkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBwdGUpOworCQlpZiAocHRlICE9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCkpCisJCQlwcmludGsoS0VSTl9FUlIgIlBBR0VUQUJMRSBCVUcgIzAyIVxuIik7CisJfQorCXJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZhZGRyKTsKK30KKwordm9pZCBzZXRfcHRlX3ZhZGRyX3B1ZChwdWRfdCAqcHVkX3BhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IG5ld19wdGUpCiB7CiAJcHVkX3QgKnB1ZDsKIAlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGU7CiAKIAlwdWQgPSBwdWRfcGFnZSArIHB1ZF9pbmRleCh2YWRkcik7Ci0JaWYgKHB1ZF9ub25lKCpwdWQpKSB7Ci0JCXBtZCA9IChwbWRfdCAqKSBzcHBfZ2V0cGFnZSgpOwotCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgcG1kKTsKLQkJaWYgKHBtZCAhPSBwbWRfb2Zmc2V0KHB1ZCwgMCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUEFHRVRBQkxFIEJVRyAjMDEhICVwIDwtPiAlcFxuIiwKLQkJCQlwbWQsIHBtZF9vZmZzZXQocHVkLCAwKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JcG1kID0gcG1kX29mZnNldChwdWQsIHZhZGRyKTsKLQlpZiAocG1kX25vbmUoKnBtZCkpIHsKLQkJcHRlID0gKHB0ZV90ICopIHNwcF9nZXRwYWdlKCk7Ci0JCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcHRlKTsKLQkJaWYgKHB0ZSAhPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIDApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlBBR0VUQUJMRSBCVUcgIzAyIVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9CisJcG1kID0gZmlsbF9wbWQocHVkLCB2YWRkcik7CisJcHRlID0gZmlsbF9wdGUocG1kLCB2YWRkcik7CiAKLQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZhZGRyKTsKIAlzZXRfcHRlKHB0ZSwgbmV3X3B0ZSk7CiAKIAkvKgpAQCAtMjA1LDggKzIyMiw3IEBACiAJX19mbHVzaF90bGJfb25lKHZhZGRyKTsKIH0KIAotdm9pZAotc2V0X3B0ZV92YWRkcih1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCBwdGV2YWwpCit2b2lkIHNldF9wdGVfdmFkZHIodW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgcHRldmFsKQogewogCXBnZF90ICpwZ2Q7CiAJcHVkX3QgKnB1ZF9wYWdlOwpAQCAtMjIzLDYgKzIzOSwyNCBAQAogCXNldF9wdGVfdmFkZHJfcHVkKHB1ZF9wYWdlLCB2YWRkciwgcHRldmFsKTsKIH0KIAorcG1kX3QgKiBfX2luaXQgcG9wdWxhdGVfZXh0cmFfcG1kKHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCisJcGdkID0gcGdkX29mZnNldF9rKHZhZGRyKTsKKwlwdWQgPSBmaWxsX3B1ZChwZ2QsIHZhZGRyKTsKKwlyZXR1cm4gZmlsbF9wbWQocHVkLCB2YWRkcik7Cit9CisKK3B0ZV90ICogX19pbml0IHBvcHVsYXRlX2V4dHJhX3B0ZSh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXBtZF90ICpwbWQ7CisKKwlwbWQgPSBwb3B1bGF0ZV9leHRyYV9wbWQodmFkZHIpOworCXJldHVybiBmaWxsX3B0ZShwbWQsIHZhZGRyKTsKK30KKwogLyoKICAqIENyZWF0ZSBsYXJnZSBwYWdlIHRhYmxlIG1hcHBpbmdzIGZvciBhIHJhbmdlIG9mIHBoeXNpY2FsIGFkZHJlc3Nlcy4KICAqLwpAQCAtOTQ3LDQzICs5ODEsNiBAQAogCQlpbml0c2l6ZSA+PiAxMCk7CiB9CiAKLXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGJlZ2luOwotCi0JaWYgKGFkZHIgPj0gZW5kKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIElmIGRlYnVnZ2luZyBwYWdlIGFjY2Vzc2VzIHRoZW4gZG8gbm90IGZyZWUgdGhpcyBtZW1vcnkgYnV0Ci0JICogbWFyayB0aGVtIG5vdCBwcmVzZW50IC0gYW55IGJ1Z2d5IGluaXQtc2VjdGlvbiBhY2Nlc3Mgd2lsbAotCSAqIGNyZWF0ZSBhIGtlcm5lbCBwYWdlIGZhdWx0OgotCSAqLwotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLQlwcmludGsoS0VSTl9JTkZPICJkZWJ1ZzogdW5tYXBwaW5nIGluaXQgbWVtb3J5ICUwOGx4Li4lMDhseFxuIiwKLQkJYmVnaW4sIFBBR0VfQUxJR04oZW5kKSk7Ci0Jc2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSA+PiBQQUdFX1NISUZUKTsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7Ci0KLQlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCW1lbXNldCgodm9pZCAqKShhZGRyICYgfihQQUdFX1NJWkUtMSkpLAotCQkJUE9JU09OX0ZSRUVfSU5JVE1FTSwgUEFHRV9TSVpFKTsKLQkJZnJlZV9wYWdlKGFkZHIpOwotCQl0b3RhbHJhbV9wYWdlcysrOwotCX0KLSNlbmRpZgotfQotCi12b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQotewotCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLAotCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pLAotCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YSA9IDB4QzM7CiBFWFBPUlRfU1lNQk9MX0dQTChyb2RhdGFfdGVzdF9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCBmNDVkNWUyLi40MzNmN2JkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAqCiAgKiBNdXN0IGJlIGZyZWVkIHdpdGggaW91bm1hcC4KICAqLwotdm9pZCBfX2lvbWVtICppb3JlbWFwX3djKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2MocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChwYXRfZW5hYmxlZCkKIAkJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9XQywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21lbXRlc3QuYyBiL2FyY2gveDg2L21tL21lbXRlc3QuYwppbmRleCA5Y2FiMThiLi4wYmNkNzg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKKysrIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCkBAIC05LDQ0ICs5LDQ0IEBACiAKICNpbmNsdWRlIDxhc20vZTgyMC5oPgogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgdW5zaWduZWQgcGF0dGVybikKK3N0YXRpYyB1NjQgcGF0dGVybnNbXSBfX2luaXRkYXRhID0geworCTAsCisJMHhmZmZmZmZmZmZmZmZmZmZmVUxMLAorCTB4NTU1NTU1NTU1NTU1NTU1NVVMTCwKKwkweGFhYWFhYWFhYWFhYWFhYWFVTEwsCisJMHgxMTExMTExMTExMTExMTExVUxMLAorCTB4MjIyMjIyMjIyMjIyMjIyMlVMTCwKKwkweDQ0NDQ0NDQ0NDQ0NDQ0NDRVTEwsCisJMHg4ODg4ODg4ODg4ODg4ODg4VUxMLAorCTB4MzMzMzMzMzMzMzMzMzMzM1VMTCwKKwkweDY2NjY2NjY2NjY2NjY2NjZVTEwsCisJMHg5OTk5OTk5OTk5OTk5OTk5VUxMLAorCTB4Y2NjY2NjY2NjY2NjY2NjY1VMTCwKKwkweDc3Nzc3Nzc3Nzc3Nzc3NzdVTEwsCisJMHhiYmJiYmJiYmJiYmJiYmJiVUxMLAorCTB4ZGRkZGRkZGRkZGRkZGRkZFVMTCwKKwkweGVlZWVlZWVlZWVlZWVlZWVVTEwsCisJMHg3YTZjNzI1ODU1NGU0OTRjVUxMLCAvKiB5ZWFoIDstKSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfYmFkX21lbSh1NjQgcGF0dGVybiwgdTY0IHN0YXJ0X2JhZCwgdTY0IGVuZF9iYWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBpOwotCXVuc2lnbmVkIGxvbmcgKnN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFkOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9iYWQ7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9waHlzX2FsaWduZWQ7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKLQl1bnNpZ25lZCBsb25nIGluY3I7CisJcHJpbnRrKEtFUk5fSU5GTyAiICAlMDE2bGx4IGJhZCBtZW0gYWRkciAlMDEwbGx4IC0gJTAxMGxseCByZXNlcnZlZFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGF0dGVybiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnRfYmFkLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmRfYmFkKTsKKwlyZXNlcnZlX2Vhcmx5KHN0YXJ0X2JhZCwgZW5kX2JhZCwgIkJBRCBSQU0iKTsKK30KIAotCXN3aXRjaCAocGF0dGVybikgewotCWNhc2UgMDoKLQkJdmFsID0gMFVMOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXZhbCA9IC0xVUw7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCXZhbCA9IDB4NTU1NTU1NTU1NTU1NTU1NVVMOwotI2Vsc2UKLQkJdmFsID0gMHg1NTU1NTU1NVVMOwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgMzoKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCXZhbCA9IDB4YWFhYWFhYWFhYWFhYWFhYVVMOwotI2Vsc2UKLQkJdmFsID0gMHhhYWFhYWFhYVVMOwotI2VuZGlmCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9CitzdGF0aWMgdm9pZCBfX2luaXQgbWVtdGVzdCh1NjQgcGF0dGVybiwgdTY0IHN0YXJ0X3BoeXMsIHU2NCBzaXplKQoreworCXU2NCBpLCBjb3VudDsKKwl1NjQgKnN0YXJ0OworCXU2NCBzdGFydF9iYWQsIGxhc3RfYmFkOworCXU2NCBzdGFydF9waHlzX2FsaWduZWQ7CisJc2l6ZV90IGluY3I7CiAKLQlpbmNyID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCWluY3IgPSBzaXplb2YocGF0dGVybik7CiAJc3RhcnRfcGh5c19hbGlnbmVkID0gQUxJR04oc3RhcnRfcGh5cywgaW5jcik7CiAJY291bnQgPSAoc2l6ZSAtIChzdGFydF9waHlzX2FsaWduZWQgLSBzdGFydF9waHlzKSkvaW5jcjsKIAlzdGFydCA9IF9fdmEoc3RhcnRfcGh5c19hbGlnbmVkKTsKQEAgLTU0LDI1ICs1NCw0MiBAQAogCWxhc3RfYmFkID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQlzdGFydFtpXSA9IHZhbDsKKwkJc3RhcnRbaV0gPSBwYXR0ZXJuOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBzdGFydCsrLCBzdGFydF9waHlzX2FsaWduZWQgKz0gaW5jcikgewotCQlpZiAoKnN0YXJ0ICE9IHZhbCkgewotCQkJaWYgKHN0YXJ0X3BoeXNfYWxpZ25lZCA9PSBsYXN0X2JhZCArIGluY3IpIHsKLQkJCQlsYXN0X2JhZCArPSBpbmNyOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc3RhcnRfYmFkKSB7Ci0JCQkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDE2bHggYmFkIG1lbSBhZGRyICUwMTBseCAtICUwMTBseCByZXNlcnZlZCIsCi0JCQkJCQl2YWwsIHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyKTsKLQkJCQkJcmVzZXJ2ZV9lYXJseShzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jciwgIkJBRCBSQU0iKTsKLQkJCQl9Ci0JCQkJc3RhcnRfYmFkID0gbGFzdF9iYWQgPSBzdGFydF9waHlzX2FsaWduZWQ7Ci0JCQl9CisJCWlmICgqc3RhcnQgPT0gcGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RhcnRfcGh5c19hbGlnbmVkID09IGxhc3RfYmFkICsgaW5jcikgeworCQkJbGFzdF9iYWQgKz0gaW5jcjsKKwkJCWNvbnRpbnVlOwogCQl9CisJCWlmIChzdGFydF9iYWQpCisJCQlyZXNlcnZlX2JhZF9tZW0ocGF0dGVybiwgc3RhcnRfYmFkLCBsYXN0X2JhZCArIGluY3IpOworCQlzdGFydF9iYWQgPSBsYXN0X2JhZCA9IHN0YXJ0X3BoeXNfYWxpZ25lZDsKIAl9Ci0JaWYgKHN0YXJ0X2JhZCkgewotCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxNmx4IGJhZCBtZW0gYWRkciAlMDEwbHggLSAlMDEwbHggcmVzZXJ2ZWQiLAotCQkJdmFsLCBzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jcik7Ci0JCXJlc2VydmVfZWFybHkoc3RhcnRfYmFkLCBsYXN0X2JhZCArIGluY3IsICJCQUQgUkFNIik7CisJaWYgKHN0YXJ0X2JhZCkKKwkJcmVzZXJ2ZV9iYWRfbWVtKHBhdHRlcm4sIHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGRvX29uZV9wYXNzKHU2NCBwYXR0ZXJuLCB1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJdTY0IHNpemUgPSAwOworCisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCXN0YXJ0ID0gZmluZF9lODIwX2FyZWFfc2l6ZShzdGFydCwgJnNpemUsIDEpOworCisJCS8qIGRvbmUgPyAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJYnJlYWs7CisJCWlmIChzdGFydCArIHNpemUgPiBlbmQpCisJCQlzaXplID0gZW5kIC0gc3RhcnQ7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAlMDEwbGx4IC0gJTAxMGxseCBwYXR0ZXJuICUwMTZsbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0ICsgc2l6ZSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNwdV90b19iZTY0KHBhdHRlcm4pKTsKKwkJbWVtdGVzdChwYXR0ZXJuLCBzdGFydCwgc2l6ZSk7CisKKwkJc3RhcnQgKz0gc2l6ZTsKIAl9CiB9CiAKQEAgLTkwLDMzICsxMDcsMjIgQEAKIAogdm9pZCBfX2luaXQgZWFybHlfbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1NjQgdF9zdGFydCwgdF9zaXplOwotCXVuc2lnbmVkIHBhdHRlcm47CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGlkeCA9IDA7CiAKIAlpZiAoIW1lbXRlc3RfcGF0dGVybikKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfbWVtdGVzdDogcGF0dGVybiBudW0gJWQiLCBtZW10ZXN0X3BhdHRlcm4pOwotCWZvciAocGF0dGVybiA9IDA7IHBhdHRlcm4gPCBtZW10ZXN0X3BhdHRlcm47IHBhdHRlcm4rKykgewotCQl0X3N0YXJ0ID0gc3RhcnQ7Ci0JCXRfc2l6ZSA9IDA7Ci0JCXdoaWxlICh0X3N0YXJ0IDwgZW5kKSB7Ci0JCQl0X3N0YXJ0ID0gZmluZF9lODIwX2FyZWFfc2l6ZSh0X3N0YXJ0LCAmdF9zaXplLCAxKTsKLQotCQkJLyogZG9uZSA/ICovCi0JCQlpZiAodF9zdGFydCA+PSBlbmQpCi0JCQkJYnJlYWs7Ci0JCQlpZiAodF9zdGFydCArIHRfc2l6ZSA+IGVuZCkKLQkJCQl0X3NpemUgPSBlbmQgLSB0X3N0YXJ0OwotCi0JCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxMGxseCAtICUwMTBsbHggcGF0dGVybiAlZCIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0X3N0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdF9zdGFydCArIHRfc2l6ZSwgcGF0dGVybik7Ci0KLQkJCW1lbXRlc3QodF9zdGFydCwgdF9zaXplLCBwYXR0ZXJuKTsKLQotCQkJdF9zdGFydCArPSB0X3NpemU7Ci0JCX0KKwlwcmludGsoS0VSTl9JTkZPICJlYXJseV9tZW10ZXN0OiAjIG9mIHRlc3RzOiAlZFxuIiwgbWVtdGVzdF9wYXR0ZXJuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtdGVzdF9wYXR0ZXJuOyBpKyspIHsKKwkJaWR4ID0gaSAlIEFSUkFZX1NJWkUocGF0dGVybnMpOworCQlkb19vbmVfcGFzcyhwYXR0ZXJuc1tpZHhdLCBzdGFydCwgZW5kKTsKIAl9Ci0JcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKworCWlmIChpZHggPiAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gImVhcmx5X21lbXRlc3Q6IHdpcGUgb3V0ICIKKwkJICAgICAgICJ0ZXN0IHBhdHRlcm4gZnJvbSBtZW1vcnlcbiIpOworCQkvKiBhZGRpdGlvbmFsIHRlc3Qgd2l0aCBwYXR0ZXJuIDAgd2lsbCBkbyB0aGlzICovCisJCWRvX29uZV9wYXNzKDAsIHN0YXJ0LCBlbmQpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21tYXAuYyBiL2FyY2gveDg2L21tL21tYXAuYwppbmRleCA1NmZlNzEyLi4xNjU4Mjk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vbW1hcC5jCkBAIC00LDcgKzQsNyBAQAogICogQmFzZWQgb24gY29kZSBieSBJbmdvIE1vbG5hciBhbmQgQW5kaSBLbGVlbiwgY29weXJpZ2h0ZWQKICAqIGFzIGZvbGxvd3M6CiAgKgotICogQ29weXJpZ2h0IDIwMDMtMjAwNCBSZWQgSGF0IEluYy4sIER1cmhhbSwgTm9ydGggQ2Fyb2xpbmEuCisgKiBDb3B5cmlnaHQgMjAwMy0yMDA5IFJlZCBIYXQgSW5jLgogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA1IEFuZGkgS2xlZW4sIFNVU0UgTGFicy4KICAqIENvcHlyaWdodCAyMDA3IEppcmkgS29zaW5hLCBTVVNFIExhYnMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKaW5kZXggZDFmNzQzOS4uNDUxZmU5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJc2l6ZSA9IEFMSUdOKHNpemUsIEwxX0NBQ0hFX0JZVEVTKTsKIAogCWlmICghYWxsb2NhdGlvbiB8fCAoYWxsb2NhdGlvbiArIHNpemUpID49IG5vZGVfcmVtYXBfZW5kX3ZhZGRyW25pZF0pCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAogCW5vZGVfcmVtYXBfYWxsb2NfdmFkZHJbbmlkXSArPSBzaXplOwogCW1lbXNldChhbGxvY2F0aW9uLCAwLCBzaXplKTsKQEAgLTQyMywzMiArNDIzLDYgQEAKIAlzZXR1cF9ib290bWVtX2FsbG9jYXRvcigpOwogfQogCi12b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlzdHJ1Y3Qgem9uZSAqem9uZTsKLQlpbnQgbmlkOwotCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0JCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3BmbjsKLQotCQlpZiAoIWlzX2hpZ2htZW0oem9uZSkpCi0JCQljb250aW51ZTsKLQotCQl6b25lX3N0YXJ0X3BmbiA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuOwotCQl6b25lX2VuZF9wZm4gPSB6b25lX3N0YXJ0X3BmbiArIHpvbmUtPnNwYW5uZWRfcGFnZXM7Ci0KLQkJbmlkID0gem9uZV90b19uaWQoem9uZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyAlcyBmb3Igbm9kZSAlZCAoJTA4bHg6JTA4bHgpXG4iLAotCQkJCXpvbmUtPm5hbWUsIG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7Ci0KLQkJYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgem9uZV9zdGFydF9wZm4sCi0JCQkJIHpvbmVfZW5kX3Bmbik7Ci0JfQotCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKLSNlbmRpZgotfQotCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiBzdGF0aWMgaW50IHBhZGRyX3RvX25pZCh1NjQgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCBmMzUxNmRhLi42NGM5Y2YwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC0yMCw2ICsyMCwxMiBAQAogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2s4Lmg+CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCisjIGRlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgeCkKKyNlbHNlCisjIGRlZmluZSBEQkcoeC4uLikKKyNlbmRpZgorCiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtNQVhfTlVNTk9ERVNdIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7CiAKQEAgLTMzLDYgKzM5LDIxIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG5vZGVtYXBfYWRkcjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZW1hcF9zaXplOwogCitERUZJTkVfUEVSX0NQVShpbnQsIG5vZGVfbnVtYmVyKSA9IDA7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0wobm9kZV9udW1iZXIpOworCisvKgorICogTWFwIGNwdSBpbmRleCB0byBub2RlIGluZGV4CisgKi8KK0RFRklORV9FQVJMWV9QRVJfQ1BVKGludCwgeDg2X2NwdV90b19ub2RlX21hcCwgTlVNQV9OT19OT0RFKTsKK0VYUE9SVF9FQVJMWV9QRVJfQ1BVX1NZTUJPTCh4ODZfY3B1X3RvX25vZGVfbWFwKTsKKworLyoKKyAqIFdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMKKyAqLworY3B1bWFza190ICpub2RlX3RvX2NwdW1hc2tfbWFwOworRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2tfbWFwKTsKKwogLyoKICAqIEdpdmVuIGEgc2hpZnQgdmFsdWUsIHRyeSB0byBwb3B1bGF0ZSBtZW1ub2RlbWFwW10KICAqIFJldHVybnMgOgpAQCAtNjQwLDMgKzY2MSwxOTkgQEAKICNlbmRpZgogCiAKKy8qCisgKiBBbGxvY2F0ZSBub2RlX3RvX2NwdW1hc2tfbWFwIGJhc2VkIG9uIG51bWJlciBvZiBhdmFpbGFibGUgbm9kZXMKKyAqIFJlcXVpcmVzIG5vZGVfcG9zc2libGVfbWFwIHRvIGJlIHZhbGlkLgorICoKKyAqIE5vdGU6IG5vZGVfdG9fY3B1bWFzaygpIGlzIG5vdCB2YWxpZCB1bnRpbCBhZnRlciB0aGlzIGlzIGRvbmUuCisgKiAoVXNlIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgdG8gY2hlY2sgdGhpcy4pCisgKi8KK3ZvaWQgX19pbml0IHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbm9kZSwgbnVtID0gMDsKKwljcHVtYXNrX3QgKm1hcDsKKworCS8qIHNldHVwIG5yX25vZGVfaWRzIGlmIG5vdCBkb25lIHlldCAqLworCWlmIChucl9ub2RlX2lkcyA9PSBNQVhfTlVNTk9ERVMpIHsKKwkJZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVfcG9zc2libGVfbWFwKQorCQkJbnVtID0gbm9kZTsKKwkJbnJfbm9kZV9pZHMgPSBudW0gKyAxOworCX0KKworCS8qIGFsbG9jYXRlIHRoZSBtYXAgKi8KKwltYXAgPSBhbGxvY19ib290bWVtX2xvdyhucl9ub2RlX2lkcyAqIHNpemVvZihjcHVtYXNrX3QpKTsKKwlEQkcoIm5vZGVfdG9fY3B1bWFza19tYXAgYXQgJXAgZm9yICVkIG5vZGVzXG4iLCBtYXAsIG5yX25vZGVfaWRzKTsKKworCXByX2RlYnVnKCJOb2RlIHRvIGNwdW1hc2sgbWFwIGF0ICVwIGZvciAlZCBub2Rlc1xuIiwKKwkJIG1hcCwgbnJfbm9kZV9pZHMpOworCisJLyogbm9kZV90b19jcHVtYXNrKCkgd2lsbCBub3cgd29yayAqLworCW5vZGVfdG9fY3B1bWFza19tYXAgPSBtYXA7Cit9CisKK3ZvaWQgX19jcHVpbml0IG51bWFfc2V0X25vZGUoaW50IGNwdSwgaW50IG5vZGUpCit7CisJaW50ICpjcHVfdG9fbm9kZV9tYXAgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKTsKKworCS8qIGVhcmx5IHNldHRpbmcsIG5vIHBlcmNwdSBhcmVhIHlldCAqLworCWlmIChjcHVfdG9fbm9kZV9tYXApIHsKKwkJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSBub2RlOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUworCWlmIChjcHUgPj0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJudW1hX3NldF9ub2RlOiBpbnZhbGlkIGNwdSMgKCVkKVxuIiwgY3B1KTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpID0gbm9kZTsKKworCWlmIChub2RlICE9IE5VTUFfTk9fTk9ERSkKKwkJcGVyX2NwdShub2RlX251bWJlciwgY3B1KSA9IG5vZGU7Cit9CisKK3ZvaWQgX19jcHVpbml0IG51bWFfY2xlYXJfbm9kZShpbnQgY3B1KQoreworCW51bWFfc2V0X25vZGUoY3B1LCBOVU1BX05PX05PREUpOworfQorCisjaWZuZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKwordm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCit7CisJY3B1X3NldChjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbZWFybHlfY3B1X3RvX25vZGUoY3B1KV0pOworfQorCit2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKK3sKKwljcHVfY2xlYXIoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2Vhcmx5X2NwdV90b19ub2RlKGNwdSldKTsKK30KKworI2Vsc2UgLyogQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLworCisvKgorICogLS0tLS0tLS0tIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBudW1hIGZ1bmN0aW9ucyAtLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgaW50IGVuYWJsZSkKK3sKKwlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CisJY3B1bWFza190ICptYXNrOworCWNoYXIgYnVmWzY0XTsKKworCWlmIChub2RlX3RvX2NwdW1hc2tfbWFwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJub2RlX3RvX2NwdW1hc2tfbWFwIE5VTExcbiIpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybjsKKwl9CisKKwltYXNrID0gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CisJaWYgKGVuYWJsZSkKKwkJY3B1X3NldChjcHUsICptYXNrKTsKKwllbHNlCisJCWNwdV9jbGVhcihjcHUsICptYXNrKTsKKworCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hc2spOworCXByaW50ayhLRVJOX0RFQlVHICIlcyBjcHUgJWQgbm9kZSAlZDogbWFzayBub3cgJXNcbiIsCisJCWVuYWJsZSA/ICJudW1hX2FkZF9jcHUiIDogIm51bWFfcmVtb3ZlX2NwdSIsIGNwdSwgbm9kZSwgYnVmKTsKK30KKwordm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCit7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIDEpOworfQorCit2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKK3sKKwludW1hX3NldF9jcHVtYXNrKGNwdSwgMCk7Cit9CisKK2ludCBjcHVfdG9fbm9kZShpbnQgY3B1KQoreworCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiY3B1X3RvX25vZGUoJWQpOiB1c2FnZSB0b28gZWFybHkhXG4iLCBjcHUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKVtjcHVdOworCX0KKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOworfQorRVhQT1JUX1NZTUJPTChjcHVfdG9fbm9kZSk7CisKKy8qCisgKiBTYW1lIGZ1bmN0aW9uIGFzIGNwdV90b19ub2RlKCkgYnV0IHVzZWQgaWYgY2FsbGVkIGJlZm9yZSB0aGUKKyAqIHBlcl9jcHUgYXJlYXMgYXJlIHNldHVwLgorICovCitpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSkKK3sKKwlpZiAoZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCkpCisJCXJldHVybiBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKVtjcHVdOworCisJaWYgKCFjcHVfcG9zc2libGUoY3B1KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZWFybHlfY3B1X3RvX25vZGUoJWQpOiBubyBwZXJfY3B1IGFyZWEhXG4iLCBjcHUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBOVU1BX05PX05PREU7CisJfQorCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Cit9CisKKworLyogZW1wdHkgY3B1bWFzayAqLworc3RhdGljIGNvbnN0IGNwdW1hc2tfdCBjcHVfbWFza19ub25lOworCisvKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4KKyAqLworY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCit7CisJaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiY3B1bWFza19vZl9ub2RlKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsCisJCQlub2RlKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gKGNvbnN0IGNwdW1hc2tfdCAqKSZjcHVfb25saW5lX21hcDsKKwl9CisJaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCisJCQlub2RlLCBucl9ub2RlX2lkcyk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuICZjcHVfbWFza19ub25lOworCX0KKwlyZXR1cm4gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Cit9CitFWFBPUlRfU1lNQk9MKGNwdW1hc2tfb2Zfbm9kZSk7CisKKy8qCisgKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgorICoKKyAqIFNpZGUgbm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSByZXR1cm5lZCBjcHVtYXNrIG9uIHRoZSBzdGFjaworICogc28gd2l0aCBhIGhpZ2ggTlJfQ1BVUyBjb3VudCwgZXhjZXNzaXZlIHN0YWNrIHNwYWNlIGlzIHVzZWQuICBUaGUKKyAqIG5vZGVfdG9fY3B1bWFza19wdHIgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUuCisgKi8KK2NwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCit7CisJaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkibm9kZV90b19jcHVtYXNrKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsIG5vZGUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBjcHVfb25saW5lX21hcDsKKwl9CisJaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIm5vZGVfdG9fY3B1bWFzayglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCisJCQlub2RlLCBucl9ub2RlX2lkcyk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIGNwdV9tYXNrX25vbmU7CisJfQorCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOworfQorRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2spOworCisvKgorICogLS0tLS0tLS0tIGVuZCBvZiBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbnVtYSBmdW5jdGlvbnMgLS0tLS0tLS0tCisgKi8KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDcyMzNiZDcuLjljNDI5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtNDgyLDYgKzQ4MiwxMyBAQAogCXBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpOwogCXBhcmF2aXJ0X2FsbG9jX3B0ZSgmaW5pdF9tbSwgcGFnZV90b19wZm4oYmFzZSkpOwogCXJlZl9wcm90ID0gcHRlX3BncHJvdChwdGVfY2xyaHVnZSgqa3B0ZSkpOworCS8qCisJICogSWYgd2UgZXZlciB3YW50IHRvIHV0aWxpemUgdGhlIFBBVCBiaXQsIHdlIG5lZWQgdG8KKwkgKiB1cGRhdGUgdGhpcyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgaXQncyBjb252ZXJ0ZWQgZnJvbQorCSAqIGJpdCAxMiB0byBiaXQgNyB3aGVuIHdlIGNyb3NzIGZyb20gdGhlIDJNQiBsZXZlbCB0bworCSAqIHRoZSA0SyBsZXZlbDoKKwkgKi8KKwlXQVJOX09OX09OQ0UocGdwcm90X3ZhbChyZWZfcHJvdCkgJiBfUEFHRV9QQVRfTEFSR0UpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChsZXZlbCA9PSBQR19MRVZFTF8xRykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCBlMGFiMTczLi4yZWQzNzE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtMzEsNyArMzEsNyBAQAogI2lmZGVmIENPTkZJR19YODZfUEFUCiBpbnQgX19yZWFkX21vc3RseSBwYXRfZW5hYmxlZCA9IDE7CiAKLXZvaWQgX19jcHVpbml0IHBhdF9kaXNhYmxlKGNoYXIgKnJlYXNvbikKK3ZvaWQgX19jcHVpbml0IHBhdF9kaXNhYmxlKGNvbnN0IGNoYXIgKnJlYXNvbikKIHsKIAlwYXRfZW5hYmxlZCA9IDA7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHJlYXNvbik7CkBAIC00Myw2ICs0MywxMSBAQAogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oIm5vcGF0Iiwgbm9wYXQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXRfZGlzYWJsZShjb25zdCBjaGFyICpyZWFzb24pCit7CisJKHZvaWQpcmVhc29uOworfQogI2VuZGlmCiAKIApAQCAtNzksMTYgKzg0LDIwIEBACiAJaWYgKCFwYXRfZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JLyogUGFyYW5vaWEgY2hlY2suICovCi0JaWYgKCFjcHVfaGFzX3BhdCAmJiBib290X3BhdF9zdGF0ZSkgewotCQkvKgotCQkgKiBJZiB0aGlzIGhhcHBlbnMgd2UgYXJlIG9uIGEgc2Vjb25kYXJ5IENQVSwgYnV0Ci0JCSAqIHN3aXRjaGVkIHRvIFBBVCBvbiB0aGUgYm9vdCBDUFUuIFdlIGhhdmUgbm8gd2F5IHRvCi0JCSAqIHVuZG8gUEFULgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJQQVQgZW5hYmxlZCwgIgotCQkgICAgICAgImJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHNlY29uZGFyeSBDUFVcbiIpOwotCQlCVUcoKTsKKwlpZiAoIWNwdV9oYXNfcGF0KSB7CisJCWlmICghYm9vdF9wYXRfc3RhdGUpIHsKKwkJCXBhdF9kaXNhYmxlKCJQQVQgbm90IHN1cHBvcnRlZCBieSBDUFUuIik7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSWYgdGhpcyBoYXBwZW5zIHdlIGFyZSBvbiBhIHNlY29uZGFyeSBDUFUsIGJ1dAorCQkJICogc3dpdGNoZWQgdG8gUEFUIG9uIHRoZSBib290IENQVS4gV2UgaGF2ZSBubyB3YXkgdG8KKwkJCSAqIHVuZG8gUEFULgorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgIlBBVCBlbmFibGVkLCAiCisJCQkgICAgICAgImJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHNlY29uZGFyeSBDUFVcbiIpOworCQkJQlVHKCk7CisJCX0KIAl9CiAKIAkvKiBTZXQgUFdUIHRvIFdyaXRlLUNvbWJpbmluZy4gQWxsIG90aGVyIGJpdHMgc3RheSB0aGUgc2FtZSAqLwpAQCAtNjI2LDYgKzYzNSwzMyBAQAogfQogCiAvKgorICogQ2hhbmdlIHRoZSBtZW1vcnkgdHlwZSBmb3IgdGhlIHBoeXNpYWwgYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgaWRlbnRpdHkKKyAqIG1hcHBpbmcgc3BhY2UgaWYgdGhhdCByYW5nZSBpcyBhIHBhcnQgb2YgaWRlbnRpdHkgbWFwLgorICovCitpbnQga2VybmVsX21hcF9zeW5jX21lbXR5cGUodTY0IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGlkX3N6OworCisJaWYgKCFwYXRfZW5hYmxlZCB8fCBiYXNlID49IF9fcGEoaGlnaF9tZW1vcnkpKQorCQlyZXR1cm4gMDsKKworCWlkX3N6ID0gKF9fcGEoaGlnaF9tZW1vcnkpIDwgYmFzZSArIHNpemUpID8KKwkJCQlfX3BhKGhpZ2hfbWVtb3J5KSAtIGJhc2UgOgorCQkJCXNpemU7CisKKwlpZiAoaW9yZW1hcF9jaGFuZ2VfYXR0cigodW5zaWduZWQgbG9uZylfX3ZhKGJhc2UpLCBpZF9zeiwgZmxhZ3MpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCQkiJXM6JWQgaW9yZW1hcF9jaGFuZ2VfYXR0ciBmYWlsZWQgJXMgIgorCQkJImZvciAlTHgtJUx4XG4iLAorCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJY2F0dHJfbmFtZShmbGFncyksCisJCQliYXNlLCAodW5zaWduZWQgbG9uZyBsb25nKShiYXNlICsgc2l6ZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBJbnRlcm5hbCBpbnRlcmZhY2UgdG8gcmVzZXJ2ZSBhIHJhbmdlIG9mIHBoeXNpY2FsIG1lbW9yeSB3aXRoIHByb3QuCiAgKiBSZXNlcnZlZCBub24gUkFNIHJlZ2lvbnMgb25seSBhbmQgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXNlcnZlX21lbXR5cGUsCiAgKiB0aGlzIGZ1bmMgYWxzbyBrZWVwcyBpZGVudGl0eSBtYXBwaW5nIChpZiBhbnkpIGluIHN5bmMgd2l0aCB0aGlzIG5ldyBwcm90LgpAQCAtNjM0LDcgKzY3MCw3IEBACiAJCQkJaW50IHN0cmljdF9wcm90KQogewogCWludCBpc19yYW0gPSAwOwotCWludCBpZF9zeiwgcmV0OworCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHdhbnRfZmxhZ3MgPSAocGdwcm90X3ZhbCgqdm1hX3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSyk7CiAKQEAgLTY3MSwyMyArNzA3LDggQEAKIAkJCQkgICAgIGZsYWdzKTsKIAl9CiAKLQkvKiBOZWVkIHRvIGtlZXAgaWRlbnRpdHkgbWFwcGluZyBpbiBzeW5jICovCi0JaWYgKHBhZGRyID49IF9fcGEoaGlnaF9tZW1vcnkpKQotCQlyZXR1cm4gMDsKLQotCWlkX3N6ID0gKF9fcGEoaGlnaF9tZW1vcnkpIDwgcGFkZHIgKyBzaXplKSA/Ci0JCQkJX19wYShoaWdoX21lbW9yeSkgLSBwYWRkciA6Ci0JCQkJc2l6ZTsKLQotCWlmIChpb3JlbWFwX2NoYW5nZV9hdHRyKCh1bnNpZ25lZCBsb25nKV9fdmEocGFkZHIpLCBpZF9zeiwgZmxhZ3MpIDwgMCkgeworCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwYWRkciwgc2l6ZSwgZmxhZ3MpIDwgMCkgewogCQlmcmVlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSk7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiVkIHJlc2VydmVfcGZuX3JhbmdlIGlvcmVtYXBfY2hhbmdlX2F0dHIgZmFpbGVkICVzICIKLQkJCSJmb3IgJUx4LSVMeFxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKLQkJCWNhdHRyX25hbWUoZmxhZ3MpLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwYWRkciwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHBhZGRyICsgc2l6ZSkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKaW5kZXggODZmMmZmYy4uNWI3YzdjODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKQEAgLTMxMyw2ICszMTMsMjQgQEAKIAlyZXR1cm4geW91bmc7CiB9CiAKKy8qKgorICogcmVzZXJ2ZV90b3BfYWRkcmVzcyAtIHJlc2VydmVzIGEgaG9sZSBpbiB0aGUgdG9wIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlCisgKiBAcmVzZXJ2ZSAtIHNpemUgb2YgaG9sZSB0byByZXNlcnZlCisgKgorICogQ2FuIGJlIHVzZWQgdG8gcmVsb2NhdGUgdGhlIGZpeG1hcCBhcmVhIGFuZCBwb2tlIGEgaG9sZSBpbiB0aGUgdG9wCisgKiBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZSB0byBtYWtlIHJvb20gZm9yIGEgaHlwZXJ2aXNvci4KKyAqLwordm9pZCBfX2luaXQgcmVzZXJ2ZV90b3BfYWRkcmVzcyh1bnNpZ25lZCBsb25nIHJlc2VydmUpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCUJVR19PTihmaXhtYXBzX3NldCA+IDApOworCXByaW50ayhLRVJOX0lORk8gIlJlc2VydmluZyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYWJvdmUgMHglMDh4XG4iLAorCSAgICAgICAoaW50KS1yZXNlcnZlKTsKKwlfX0ZJWEFERFJfVE9QID0gLXJlc2VydmUgLSBQQUdFX1NJWkU7CisJX19WTUFMTE9DX1JFU0VSVkUgKz0gcmVzZXJ2ZTsKKyNlbmRpZgorfQorCiBpbnQgZml4bWFwc19zZXQ7CiAKIHZvaWQgX19uYXRpdmVfc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHB0ZV90IHB0ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGVfMzIuYyBiL2FyY2gveDg2L21tL3BndGFibGVfMzIuYwppbmRleCAwOTUxZGI5Li5mMmU0NzdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCit1bnNpZ25lZCBpbnQgX19WTUFMTE9DX1JFU0VSVkUgPSAxMjggPDwgMjA7CisKIC8qCiAgKiBBc3NvY2lhdGUgYSB2aXJ0dWFsIHBhZ2UgZnJhbWUgd2l0aCBhIGdpdmVuIHBoeXNpY2FsIHBhZ2UgZnJhbWUgCiAgKiBhbmQgcHJvdGVjdGlvbiBmbGFncyBmb3IgdGhhdCBmcmFtZS4KQEAgLTk3LDIyICs5OSw2IEBACiB1bnNpZ25lZCBsb25nIF9fRklYQUREUl9UT1AgPSAweGZmZmZmMDAwOwogRVhQT1JUX1NZTUJPTChfX0ZJWEFERFJfVE9QKTsKIAotLyoqCi0gKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gcmVzZXJ2ZXMgYSBob2xlIGluIHRoZSB0b3Agb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKLSAqIEByZXNlcnZlIC0gc2l6ZSBvZiBob2xlIHRvIHJlc2VydmUKLSAqCi0gKiBDYW4gYmUgdXNlZCB0byByZWxvY2F0ZSB0aGUgZml4bWFwIGFyZWEgYW5kIHBva2UgYSBob2xlIGluIHRoZSB0b3AKLSAqIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHRvIG1ha2Ugcm9vbSBmb3IgYSBoeXBlcnZpc29yLgotICovCi12b2lkIF9faW5pdCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSkKLXsKLQlCVUdfT04oZml4bWFwc19zZXQgPiAwKTsKLQlwcmludGsoS0VSTl9JTkZPICJSZXNlcnZpbmcgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGFib3ZlIDB4JTA4eFxuIiwKLQkgICAgICAgKGludCktcmVzZXJ2ZSk7Ci0JX19GSVhBRERSX1RPUCA9IC1yZXNlcnZlIC0gUEFHRV9TSVpFOwotCV9fVk1BTExPQ19SRVNFUlZFICs9IHJlc2VydmU7Ci19Ci0KIC8qCiAgKiB2bWFsbG9jPXNpemUgZm9yY2VzIHRoZSB2bWFsbG9jIGFyZWEgdG8gYmUgZXhhY3RseSAnc2l6ZScKICAqIGJ5dGVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIChvciBkZWNyZWFzZSkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMgYi9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKaW5kZXggMDk3MzdjOC4uNTc0YzhiYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF82NC5jCisrKyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwpAQCAtMjAsNyArMjAsOCBAQAogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAKIGludCBhY3BpX251bWEgX19pbml0ZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vdGxiLmMgYi9hcmNoL3g4Ni9tbS90bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjU0ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vdGxiLmMKQEAgLTAsMCArMSwyOTUgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS91di91di5oPgorCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpCisJCQk9IHsgJmluaXRfbW0sIDAsIH07CisKKy8qCisgKglTbWFydGVyIFNNUCBmbHVzaGluZyBtYWNyb3MuCisgKgkJYy9vIExpbnVzIFRvcnZhbGRzLgorICoKKyAqCVRoZXNlIG1lYW4geW91IGNhbiByZWFsbHkgZGVmaW5pdGVseSB1dHRlcmx5IGZvcmdldCBhYm91dAorICoJd3JpdGluZyB0byB1c2VyIHNwYWNlIGZyb20gaW50ZXJydXB0cy4gKEl0cyBub3QgYWxsb3dlZCBhbnl3YXkpLgorICoKKyAqCU9wdGltaXphdGlvbnMgTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KKyAqCisgKglNb3JlIHNjYWxhYmxlIGZsdXNoLCBmcm9tIEFuZGkgS2xlZW4KKyAqCisgKglUbyBhdm9pZCBnbG9iYWwgc3RhdGUgdXNlIDggZGlmZmVyZW50IGNhbGwgdmVjdG9ycy4KKyAqCUVhY2ggQ1BVIHVzZXMgYSBzcGVjaWZpYyB2ZWN0b3IgdG8gdHJpZ2dlciBmbHVzaGVzIG9uIG90aGVyCisgKglDUFVzLiBEZXBlbmRpbmcgb24gdGhlIHJlY2VpdmVkIHZlY3RvciB0aGUgdGFyZ2V0IENQVXMgbG9vayBpbnRvCisgKgl0aGUgcmlnaHQgYXJyYXkgc2xvdCBmb3IgdGhlIGZsdXNoIGRhdGEuCisgKgorICoJV2l0aCBtb3JlIHRoYW4gOCBDUFVzIHRoZXkgYXJlIGhhc2hlZCB0byB0aGUgOCBhdmFpbGFibGUKKyAqCXZlY3RvcnMuIFRoZSBsaW1pdGVkIGdsb2JhbCB2ZWN0b3Igc3BhY2UgZm9yY2VzIHVzIHRvIHRoaXMgcmlnaHQgbm93LgorICoJSW4gZnV0dXJlIHdoZW4gaW50ZXJydXB0cyBhcmUgc3BsaXQgaW50byBwZXIgQ1BVIGRvbWFpbnMgdGhpcyBjb3VsZCBiZQorICoJZml4ZWQsIGF0IHRoZSBjb3N0IG9mIHRyaWdnZXJpbmcgbXVsdGlwbGUgSVBJcyBpbiBzb21lIGNhc2VzLgorICovCisKK3VuaW9uIHNtcF9mbHVzaF9zdGF0ZSB7CisJc3RydWN0IHsKKwkJc3RydWN0IG1tX3N0cnVjdCAqZmx1c2hfbW07CisJCXVuc2lnbmVkIGxvbmcgZmx1c2hfdmE7CisJCXNwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKKwkJREVDTEFSRV9CSVRNQVAoZmx1c2hfY3B1bWFzaywgTlJfQ1BVUyk7CisJfTsKKwljaGFyIHBhZFtDT05GSUdfWDg2X0lOVEVSTk9ERV9DQUNIRV9CWVRFU107Cit9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CisKKy8qIFN0YXRlIGlzIHB1dCBpbnRvIHRoZSBwZXIgQ1BVIGRhdGEgc2VjdGlvbiwgYnV0IHBhZGRlZAorICAgdG8gYSBmdWxsIGNhY2hlIGxpbmUgYmVjYXVzZSBvdGhlciBDUFVzIGNhbiBhY2Nlc3MgaXQgYW5kIHdlIGRvbid0CisgICB3YW50IGZhbHNlIHNoYXJpbmcgaW4gdGhlIHBlciBjcHUgZGF0YSBzZWdtZW50LiAqLworc3RhdGljIHVuaW9uIHNtcF9mbHVzaF9zdGF0ZSBmbHVzaF9zdGF0ZVtOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SU107CisKKy8qCisgKiBXZSBjYW5ub3QgY2FsbCBtbWRyb3AoKSBiZWNhdXNlIHdlIGFyZSBpbiBpbnRlcnJ1cHQgY29udGV4dCwKKyAqIGluc3RlYWQgdXBkYXRlIG1tLT5jcHVfdm1fbWFzay4KKyAqLwordm9pZCBsZWF2ZV9tbShpbnQgY3B1KQoreworCWlmIChwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuc3RhdGUpID09IFRMQlNUQVRFX09LKQorCQlCVUcoKTsKKwljcHVfY2xlYXIoY3B1LCBwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuYWN0aXZlX21tKS0+Y3B1X3ZtX21hc2spOworCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxlYXZlX21tKTsKKworLyoKKyAqCisgKiBUaGUgZmx1c2ggSVBJIGFzc3VtZXMgdGhhdCBhIHRocmVhZCBzd2l0Y2ggaGFwcGVucyBpbiB0aGlzIG9yZGVyOgorICogW2NwdTA6IHRoZSBjcHUgdGhhdCBzd2l0Y2hlc10KKyAqIDEpIHN3aXRjaF9tbSgpIGVpdGhlciAxYSkgb3IgMWIpCisgKiAxYSkgdGhyZWFkIHN3aXRjaCB0byBhIGRpZmZlcmVudCBtbQorICogMWExKSBjcHVfY2xlYXIoY3B1LCBvbGRfbW0tPmNwdV92bV9tYXNrKTsKKyAqCVN0b3AgaXBpIGRlbGl2ZXJ5IGZvciB0aGUgb2xkIG1tLiBUaGlzIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAorICoJdGhlIG90aGVyIGNwdXMsIGJ1dCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQgaWdub3JlIGZsdXNoIGlwaXMKKyAqCWZvciB0aGUgd3JvbmcgbW0sIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBwZXJmb3JtIGEgc3VwZXJmbHVvdXMKKyAqCXRsYiBmbHVzaC4KKyAqIDFhMikgc2V0IGNwdSBtbXVfc3RhdGUgdG8gVExCU1RBVEVfT0sKKyAqCU5vdyB0aGUgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IHdvbid0IGNhbGwgbGVhdmVfbW0gaWYgY3B1MAorICoJd2FzIGluIGxhenkgdGxiIG1vZGUuCisgKiAxYTMpIHVwZGF0ZSBjcHUgYWN0aXZlX21tCisgKglOb3cgY3B1MCBhY2NlcHRzIHRsYiBmbHVzaGVzIGZvciB0aGUgbmV3IG1tLgorICogMWE0KSBjcHVfc2V0KGNwdSwgbmV3X21tLT5jcHVfdm1fbWFzayk7CisgKglOb3cgdGhlIG90aGVyIGNwdXMgd2lsbCBzZW5kIHRsYiBmbHVzaCBpcGlzLgorICogMWE0KSBjaGFuZ2UgY3IzLgorICogMWIpIHRocmVhZCBzd2l0Y2ggd2l0aG91dCBtbSBjaGFuZ2UKKyAqCWNwdSBhY3RpdmVfbW0gaXMgY29ycmVjdCwgY3B1MCBhbHJlYWR5IGhhbmRsZXMKKyAqCWZsdXNoIGlwaXMuCisgKiAxYjEpIHNldCBjcHUgbW11X3N0YXRlIHRvIFRMQlNUQVRFX09LCisgKiAxYjIpIHRlc3RfYW5kX3NldCB0aGUgY3B1IGJpdCBpbiBjcHVfdm1fbWFzay4KKyAqCUF0b21pY2FsbHkgc2V0IHRoZSBiaXQgW290aGVyIGNwdXMgd2lsbCBzdGFydCBzZW5kaW5nIGZsdXNoIGlwaXNdLAorICoJYW5kIHRlc3QgdGhlIGJpdC4KKyAqIDFiMykgaWYgdGhlIGJpdCB3YXMgMDogbGVhdmVfbW0gd2FzIGNhbGxlZCwgZmx1c2ggdGhlIHRsYi4KKyAqIDIpIHN3aXRjaCAlJWVzcCwgaWUgY3VycmVudAorICoKKyAqIFRoZSBpbnRlcnJ1cHQgbXVzdCBoYW5kbGUgMiBzcGVjaWFsIGNhc2VzOgorICogLSBjcjMgaXMgY2hhbmdlZCBiZWZvcmUgJSVlc3AsIGllLiBpdCBjYW5ub3QgdXNlIGN1cnJlbnQtPnthY3RpdmVfLH1tbS4KKyAqIC0gdGhlIGNwdSBwZXJmb3JtcyBzcGVjdWxhdGl2ZSB0bGIgcmVhZHMsIGkuZS4gZXZlbiBpZiB0aGUgY3B1IG9ubHkKKyAqICAgcnVucyBpbiBrZXJuZWwgc3BhY2UsIHRoZSBjcHUgY291bGQgbG9hZCB0bGIgZW50cmllcyBmb3IgdXNlciBzcGFjZQorICogICBwYWdlcy4KKyAqCisgKiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgY3B1IG1tdV9zdGF0ZSBpcyBsb2NhbCB0byBlYWNoIGNwdSwgbm8KKyAqIHdyaXRlL3JlYWQgb3JkZXJpbmcgcHJvYmxlbXMuCisgKi8KKworLyoKKyAqIFRMQiBmbHVzaCBJUEk6CisgKgorICogMSkgRmx1c2ggdGhlIHRsYiBlbnRyaWVzIGlmIHRoZSBjcHUgdXNlcyB0aGUgbW0gdGhhdCdzIGJlaW5nIGZsdXNoZWQuCisgKiAyKSBMZWF2ZSB0aGUgbW0gaWYgd2UgYXJlIGluIHRoZSBsYXp5IHRsYiBtb2RlLgorICoKKyAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkLgorICovCisKKy8qCisgKiBGSVhNRTogdXNlIG9mIGFzbWxpbmthZ2UgaXMgbm90IGNvbnNpc3RlbnQuICBPbiB4ODZfNjQgaXQncyBub29wCisgKiBidXQgc3RpbGwgdXNlZCBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3NlIGJ1dCB0aGUgdXNhZ2UgaXMgc2xpZ2h0bHkKKyAqIGluY29uc2lzdGVudC4gIE9uIHg4Nl8zMiwgYXNtbGlua2FnZSBpcyByZWdwYXJtKDApIGJ1dCBpbnRlcnJ1cHQKKyAqIGVudHJ5IGNhbGxzIGluIHdpdGggdGhlIGZpcnN0IHBhcmFtZXRlciBpbiAlZWF4LiAgTWF5YmUgZGVmaW5lCisgKiBpbnRybGlua2FnZT8KKyAqLworI2lmZGVmIENPTkZJR19YODZfNjQKK2FzbWxpbmthZ2UKKyNlbmRpZgordm9pZCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgc2VuZGVyOworCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkvKgorCSAqIG9yaWdfcmF4IGNvbnRhaW5zIHRoZSBuZWdhdGVkIGludGVycnVwdCB2ZWN0b3IuCisJICogVXNlIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzZW5kZXIgcHV0IHRoZSBkYXRhLgorCSAqLworCXNlbmRlciA9IH5yZWdzLT5vcmlnX2F4IC0gSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUOworCWYgPSAmZmx1c2hfc3RhdGVbc2VuZGVyXTsKKworCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHRvX2NwdW1hc2soZi0+Zmx1c2hfY3B1bWFzaykpKQorCQlnb3RvIG91dDsKKwkJLyoKKwkJICogVGhpcyB3YXMgYSBCVUcoKSBidXQgdW50aWwgc29tZW9uZSBjYW4gcXVvdGUgbWUgdGhlCisJCSAqIGxpbmUgZnJvbSB0aGUgaW50ZWwgbWFudWFsIHRoYXQgZ3VhcmFudGVlcyBhbiBJUEkgdG8KKwkJICogbXVsdGlwbGUgQ1BVcyBpcyByZXRyaWVkIF9vbmx5XyBvbiB0aGUgZXJyb3JpbmcgQ1BVcworCQkgKiBpdHMgc3RheWluZyBhcyBhIHJldHVybgorCQkgKgorCQkgKiBCVUcoKTsKKwkJICovCisKKwlpZiAoZi0+Zmx1c2hfbW0gPT0gcGVyY3B1X3JlYWQoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSkpIHsKKwkJaWYgKHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfT0spIHsKKwkJCWlmIChmLT5mbHVzaF92YSA9PSBUTEJfRkxVU0hfQUxMKQorCQkJCWxvY2FsX2ZsdXNoX3RsYigpOworCQkJZWxzZQorCQkJCV9fZmx1c2hfdGxiX29uZShmLT5mbHVzaF92YSk7CisJCX0gZWxzZQorCQkJbGVhdmVfbW0oY3B1KTsKKwl9CitvdXQ6CisJYWNrX0FQSUNfaXJxKCk7CisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKGYtPmZsdXNoX2NwdW1hc2spKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCWluY19pcnFfc3RhdChpcnFfdGxiX2NvdW50KTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfdGxiX290aGVyc19pcGkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZhKQoreworCXVuc2lnbmVkIGludCBzZW5kZXI7CisJdW5pb24gc21wX2ZsdXNoX3N0YXRlICpmOworCisJLyogQ2FsbGVyIGhhcyBkaXNhYmxlZCBwcmVlbXB0aW9uICovCisJc2VuZGVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpICUgTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlM7CisJZiA9ICZmbHVzaF9zdGF0ZVtzZW5kZXJdOworCisJLyoKKwkgKiBDb3VsZCBhdm9pZCB0aGlzIGxvY2sgd2hlbgorCSAqIG51bV9vbmxpbmVfY3B1cygpIDw9IE5VTV9JTlZBTElEQVRFX1RMQl9WRUNUT1JTLCBidXQgaXQgaXMKKwkgKiBwcm9iYWJseSBub3Qgd29ydGggY2hlY2tpbmcgdGhpcyBmb3IgYSBjYWNoZS1ob3QgbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJmYtPnRsYnN0YXRlX2xvY2spOworCisJZi0+Zmx1c2hfbW0gPSBtbTsKKwlmLT5mbHVzaF92YSA9IHZhOworCWNwdW1hc2tfYW5kbm90KHRvX2NwdW1hc2soZi0+Zmx1c2hfY3B1bWFzayksCisJCSAgICAgICBjcHVtYXNrLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOworCisJLyoKKwkgKiBNYWtlIHRoZSBhYm92ZSBtZW1vcnkgb3BlcmF0aW9ucyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZQorCSAqIHNlbmRpbmcgdGhlIElQSS4KKwkgKi8KKwlzbXBfbWIoKTsKKwkvKgorCSAqIFdlIGhhdmUgdG8gc2VuZCB0aGUgSVBJIG9ubHkgdG8KKwkgKiBDUFVzIGFmZmVjdGVkLgorCSAqLworCWFwaWMtPnNlbmRfSVBJX21hc2sodG9fY3B1bWFzayhmLT5mbHVzaF9jcHVtYXNrKSwKKwkJICAgICAgSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUICsgc2VuZGVyKTsKKworCXdoaWxlICghY3B1bWFza19lbXB0eSh0b19jcHVtYXNrKGYtPmZsdXNoX2NwdW1hc2spKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlmLT5mbHVzaF9tbSA9IE5VTEw7CisJZi0+Zmx1c2hfdmEgPSAwOworCXNwaW5fdW5sb2NrKCZmLT50bGJzdGF0ZV9sb2NrKTsKK30KKwordm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmEpCit7CisJaWYgKGlzX3V2X3N5c3RlbSgpKSB7CisJCXVuc2lnbmVkIGludCBjcHU7CisKKwkJY3B1ID0gZ2V0X2NwdSgpOworCQljcHVtYXNrID0gdXZfZmx1c2hfdGxiX290aGVycyhjcHVtYXNrLCBtbSwgdmEsIGNwdSk7CisJCWlmIChjcHVtYXNrKQorCQkJZmx1c2hfdGxiX290aGVyc19pcGkoY3B1bWFzaywgbW0sIHZhKTsKKwkJcHV0X2NwdSgpOworCQlyZXR1cm47CisJfQorCWZsdXNoX3RsYl9vdGhlcnNfaXBpKGNwdW1hc2ssIG1tLCB2YSk7Cit9CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IGluaXRfc21wX2ZsdXNoKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbHVzaF9zdGF0ZSk7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJmZsdXNoX3N0YXRlW2ldLnRsYnN0YXRlX2xvY2spOworCisJcmV0dXJuIDA7Cit9Citjb3JlX2luaXRjYWxsKGluaXRfc21wX2ZsdXNoKTsKKwordm9pZCBmbHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCisJbG9jYWxfZmx1c2hfdGxiKCk7CisJaWYgKGNwdW1hc2tfYW55X2J1dCgmbW0tPmNwdV92bV9tYXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpIDwgbnJfY3B1X2lkcykKKwkJZmx1c2hfdGxiX290aGVycygmbW0tPmNwdV92bV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKwordm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7CisJCWlmIChjdXJyZW50LT5tbSkKKwkJCWxvY2FsX2ZsdXNoX3RsYigpOworCQllbHNlCisJCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKwlpZiAoY3B1bWFza19hbnlfYnV0KCZtbS0+Y3B1X3ZtX21hc2ssIHNtcF9wcm9jZXNzb3JfaWQoKSkgPCBucl9jcHVfaWRzKQorCQlmbHVzaF90bGJfb3RoZXJzKCZtbS0+Y3B1X3ZtX21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7CisJCWlmIChjdXJyZW50LT5tbSkKKwkJCV9fZmx1c2hfdGxiX29uZSh2YSk7CisJCWVsc2UKKwkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCisJaWYgKGNwdW1hc2tfYW55X2J1dCgmbW0tPmNwdV92bV9tYXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpIDwgbnJfY3B1X2lkcykKKwkJZmx1c2hfdGxiX290aGVycygmbW0tPmNwdV92bV9tYXNrLCBtbSwgdmEpOworCisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkICppbmZvKQoreworCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJX19mbHVzaF90bGJfYWxsKCk7CisJaWYgKHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfTEFaWSkKKwkJbGVhdmVfbW0oY3B1KTsKK30KKwordm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJb25fZWFjaF9jcHUoZG9fZmx1c2hfdGxiX2FsbCwgTlVMTCwgMSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCmluZGV4IDIwODkzNTQuLjhlYjI5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CiAKQEAgLTE4LDEwICsxOCw2IEBACiAKICNkZWZpbmUgUVVBRExPQ0FMMkJVUyhxdWFkLGxvY2FsKSAocXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdKQogCi0vKiBXaGVyZSB0aGUgSU8gYXJlYSB3YXMgbWFwcGVkIG9uIG11bHRpcXVhZCwgYWx3YXlzIDAgb3RoZXJ3aXNlICovCi12b2lkICp4cXVhZF9wb3J0aW87Ci1FWFBPUlRfU1lNQk9MKHhxdWFkX3BvcnRpbyk7Ci0KICNkZWZpbmUgWFFVQURfUE9SVF9BRERSKHBvcnQsIHF1YWQpICh4cXVhZF9wb3J0aW8gKyAoWFFVQURfUE9SVElPX1FVQUQqcXVhZCkgKyBwb3J0KQogCiAjZGVmaW5lIFBDSV9DT05GMV9NUV9BRERSRVNTKGJ1cywgZGV2Zm4sIHJlZykgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3BjYmlvcy5jIGIvYXJjaC94ODYvcGNpL3BjYmlvcy5jCmluZGV4IGI4MmNhZTkuLjFjOTc1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9wY2Jpb3MuYworKysgYi9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9wY2ktZnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1mdW5jdGlvbnMuaD4KIAogLyogQklPUzMyIHNpZ25hdHVyZTogIl8zMl8iICovCiAjZGVmaW5lIEJJT1MzMl9TSUdOQVRVUkUJKCgnXycgPDwgMCkgKyAoJzMnIDw8IDgpICsgKCcyJyA8PCAxNikgKyAoJ18nIDw8IDI0KSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV9hc21fMzIuUyBiL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV9hc21fMzIuUwppbmRleCBkMWU5YjUzLi5iNjQxMzg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfYXNtXzMyLlMKKysrIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV8zMi5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TCmluZGV4IDAwMDQxNTkuLjkzNTY1NDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV9hc21fNjQuUworKysgYi9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfYXNtXzY0LlMKQEAgLTE4LDcgKzE4LDcgQEAKIAkudGV4dAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCmluZGV4IDRkNmVmMGEuLjE2YTkwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvdmRzby9NYWtlZmlsZQpAQCAtMzgsNyArMzgsNyBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCiAKIENGTCA6PSAkKFBST0ZJTElORykgLW1jbW9kZWw9c21hbGwgLWZQSUMgLU8yIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgLW02NCBcCi0gICAgICAgJChmaWx0ZXIgLWclLCQoS0JVSUxEX0NGTEFHUykpCisgICAgICAgJChmaWx0ZXIgLWclLCQoS0JVSUxEX0NGTEFHUykpICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tc3RhY2stcHJvdGVjdG9yKQogCiAkKHZvYmpzKTogS0JVSUxEX0NGTEFHUyArPSAkKENGTCkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92bWEuYyBiL2FyY2gveDg2L3Zkc28vdm1hLmMKaW5kZXggOWM5OGNjNi4uNzEzM2NkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92bWEuYworKysgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCkBAIC04NSw4ICs4NSw4IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7CiAJdW5zaWduZWQgb2Zmc2V0OwogCWVuZCA9IChzdGFydCArIFBNRF9TSVpFIC0gMSkgJiBQTURfTUFTSzsKLQlpZiAoZW5kID49IFRBU0tfU0laRTY0KQotCQllbmQgPSBUQVNLX1NJWkU2NDsKKwlpZiAoZW5kID49IFRBU0tfU0laRV9NQVgpCisJCWVuZCA9IFRBU0tfU0laRV9NQVg7CiAJZW5kIC09IGxlbjsKIAkvKiBUaGlzIGxvc2VzIHNvbWUgbW9yZSBiaXRzIHRoYW4gYSBtb2R1bG8sIGJ1dCBpcyBjaGVhcGVyICovCiAJb2Zmc2V0ID0gZ2V0X3JhbmRvbV9pbnQoKSAmIChQVFJTX1BFUl9QVEUgLSAxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9LY29uZmlnIGIvYXJjaC94ODYveGVuL0tjb25maWcKaW5kZXggODdiOWFiMS4uYjgzZTExOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL0tjb25maWcKKysrIGIvYXJjaC94ODYveGVuL0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAJYm9vbCAiWGVuIGd1ZXN0IHN1cHBvcnQiCiAJc2VsZWN0IFBBUkFWSVJUCiAJc2VsZWN0IFBBUkFWSVJUX0NMT0NLCi0JZGVwZW5kcyBvbiBYODZfNjQgfHwgKFg4Nl8zMiAmJiBYODZfUEFFICYmICEoWDg2X1ZJU1dTIHx8IFg4Nl9WT1lBR0VSKSkKKwlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIFg4Nl9QQUUgJiYgIVg4Nl9WSVNXUykKIAlkZXBlbmRzIG9uIFg4Nl9DTVBYQ0hHICYmIFg4Nl9UU0MKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBMaW51eCBYZW4gcG9ydC4gIEVuYWJsaW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9NYWtlZmlsZSBiL2FyY2gveDg2L3hlbi9NYWtlZmlsZQppbmRleCA2ZGNlZmJhLi4zYjc2N2QwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYveGVuL01ha2VmaWxlCkBAIC02LDcgKzYsOCBAQAogZW5kaWYKIAogb2JqLXkJCTo9IGVubGlnaHRlbi5vIHNldHVwLm8gbXVsdGljYWxscy5vIG1tdS5vIGlycS5vIFwKLQkJCXRpbWUubyB4ZW4tYXNtXyQoQklUUykubyBncmFudC10YWJsZS5vIHN1c3BlbmQubworCQkJdGltZS5vIHhlbi1hc20ubyB4ZW4tYXNtXyQoQklUUykubyBcCisJCQlncmFudC10YWJsZS5vIHN1c3BlbmQubwogCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc3BpbmxvY2subwogb2JqLSQoQ09ORklHX1hFTl9ERUJVR19GUykJKz0gZGVidWdmcy5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGI1OGU5NjMuLjgyY2QzOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTYxLDQwICs2MSwxMyBAQAogZW51bSB4ZW5fZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlID0gWEVOX05BVElWRTsKIEVYUE9SVF9TWU1CT0xfR1BMKHhlbl9kb21haW5fdHlwZSk7CiAKLS8qCi0gKiBJZGVudGl0eSBtYXAsIGluIGFkZGl0aW9uIHRvIHBsYWluIGtlcm5lbCBtYXAuICBUaGlzIG5lZWRzIHRvIGJlCi0gKiBsYXJnZSBlbm91Z2ggdG8gYWxsb2NhdGUgcGFnZSB0YWJsZSBwYWdlcyB0byBhbGxvY2F0ZSB0aGUgcmVzdC4KLSAqIEVhY2ggcGFnZSBjYW4gbWFwIDJNQi4KLSAqLwotc3RhdGljIHB0ZV90IGxldmVsMV9pZGVudF9wZ3RbUFRSU19QRVJfUFRFICogNF0gX19wYWdlX2FsaWduZWRfYnNzOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotLyogbDMgcHVkIGZvciB1c2Vyc3BhY2UgdnN5c2NhbGwgbWFwcGluZyAqLwotc3RhdGljIHB1ZF90IGxldmVsM191c2VyX3ZzeXNjYWxsW1BUUlNfUEVSX1BVRF0gX19wYWdlX2FsaWduZWRfYnNzOwotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQotLyoKLSAqIE5vdGUgYWJvdXQgY3IzIChwYWdldGFibGUgYmFzZSkgdmFsdWVzOgotICoKLSAqIHhlbl9jcjMgY29udGFpbnMgdGhlIGN1cnJlbnQgbG9naWNhbCBjcjMgdmFsdWU7IGl0IGNvbnRhaW5zIHRoZQotICogbGFzdCBzZXQgY3IzLiAgVGhpcyBtYXkgbm90IGJlIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBjcjMsIGJlY2F1c2UKLSAqIGl0cyB1cGRhdGUgbWF5IGJlIGJlaW5nIGxhemlseSBkZWZlcnJlZC4gIEhvd2V2ZXIsIGEgdmNwdSBsb29raW5nCi0gKiBhdCBpdHMgb3duIGNyMyBjYW4gdXNlIHRoaXMgdmFsdWUga25vd2luZyB0aGF0IGl0IGV2ZXJ5dGhpbmcgd2lsbAotICogYmUgc2VsZi1jb25zaXN0ZW50LgotICoKLSAqIHhlbl9jdXJyZW50X2NyMyBjb250YWlucyB0aGUgYWN0dWFsIHZjcHUgY3IzOyBpdCBpcyBzZXQgb25jZSB0aGUKLSAqIGh5cGVyY2FsbCB0byBzZXQgdGhlIHZjcHUgY3IzIGlzIGNvbXBsZXRlIChzbyBpdCBtYXkgYmUgYSBsaXR0bGUKLSAqIG91dCBvZiBkYXRlLCBidXQgaXQgd2lsbCBuZXZlciBiZSBzZXQgZWFybHkpLiAgSWYgb25lIHZjcHUgaXMKLSAqIGxvb2tpbmcgYXQgYW5vdGhlciB2Y3B1J3MgY3IzIHZhbHVlLCBpdCBzaG91bGQgdXNlIHRoaXMgdmFyaWFibGUuCi0gKi8KLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jcjMpOwkgLyogY3IzIHN0b3JlZCBhcyBwaHlzYWRkciAqLwotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgeGVuX2N1cnJlbnRfY3IzKTsJIC8qIGFjdHVhbCB2Y3B1IGNyMyAqLwotCiBzdHJ1Y3Qgc3RhcnRfaW5mbyAqeGVuX3N0YXJ0X2luZm87CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc3RhcnRfaW5mbyk7CiAKIHN0cnVjdCBzaGFyZWRfaW5mbyB4ZW5fZHVtbXlfc2hhcmVkX2luZm87CiAKK3ZvaWQgKnhlbl9pbml0aWFsX2dkdDsKKwogLyoKICAqIFBvaW50IGF0IHNvbWUgZW1wdHkgbWVtb3J5IHRvIHN0YXJ0IHdpdGguIFdlIG1hcCB0aGUgcmVhbCBzaGFyZWRfaW5mbwogICogcGFnZSBhcyBzb29uIGFzIGZpeG1hcCBpcyB1cCBhbmQgcnVubmluZy4KQEAgLTExNCwxNCArODcsNyBAQAogICoKICAqIDA6IG5vdCBhdmFpbGFibGUsIDE6IGF2YWlsYWJsZQogICovCi1zdGF0aWMgaW50IGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCA9Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCTEKLSNlbHNlCi0JMAotI2VuZGlmCi0JOwotCitzdGF0aWMgaW50IGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCA9IDE7CiAKIHN0YXRpYyB2b2lkIHhlbl92Y3B1X3NldHVwKGludCBjcHUpCiB7CkBAIC0xMzcsNyArMTAzLDcgQEAKIAogCXZjcHVwID0gJnBlcl9jcHUoeGVuX3ZjcHVfaW5mbywgY3B1KTsKIAotCWluZm8ubWZuID0gdmlydF90b19tZm4odmNwdXApOworCWluZm8ubWZuID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWZuKHZjcHVwKTsKIAlpbmZvLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHZjcHVwKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJ0cnlpbmcgdG8gbWFwIHZjcHVfaW5mbyAlZCBhdCAlcCwgbWZuICVsbHgsIG9mZnNldCAlZFxuIiwKQEAgLTIzNyw3ICsyMDMsNyBAQAogCXJldHVybiBIWVBFUlZJU09SX2dldF9kZWJ1Z3JlZyhyZWcpOwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fbGVhdmVfbGF6eSh2b2lkKQordm9pZCB4ZW5fbGVhdmVfbGF6eSh2b2lkKQogewogCXBhcmF2aXJ0X2xlYXZlX2xhenkocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpKTsKIAl4ZW5fbWNfZmx1c2goKTsKQEAgLTMzNSw4ICszMDEsMTAgQEAKIAlmcmFtZXMgPSBtY3MuYXJnczsKIAogCWZvciAoZiA9IDA7IHZhIDwgZHRyLT5hZGRyZXNzICsgc2l6ZTsgdmEgKz0gUEFHRV9TSVpFLCBmKyspIHsKLQkJZnJhbWVzW2ZdID0gdmlydF90b19tZm4odmEpOworCQlmcmFtZXNbZl0gPSBhcmJpdHJhcnlfdmlydF90b19tZm4oKHZvaWQgKil2YSk7CisKIAkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seSgodm9pZCAqKXZhKTsKKwkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShtZm5fdG9fdmlydChmcmFtZXNbZl0pKTsKIAl9CiAKIAlNVUxUSV9zZXRfZ2R0KG1jcy5tYywgZnJhbWVzLCBzaXplIC8gc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVjdCkpOwpAQCAtMzQ4LDcgKzMxNiw3IEBACiAJCQkJdW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGkpCiB7CiAJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOwotCXhtYWRkcl90IG1hZGRyID0gdmlydF90b19tYWNoaW5lKCZnZHRbR0RUX0VOVFJZX1RMU19NSU4raV0pOworCXhtYWRkcl90IG1hZGRyID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSgmZ2R0W0dEVF9FTlRSWV9UTFNfTUlOK2ldKTsKIAlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jID0gX194ZW5fbWNfZW50cnkoMCk7CiAKIAlNVUxUSV91cGRhdGVfZGVzY3JpcHRvcihtYy5tYywgbWFkZHIubWFkZHIsIHQtPnRsc19hcnJheVtpXSk7CkBAIC0zNTcsMTMgKzMyNSwxNCBAQAogc3RhdGljIHZvaWQgeGVuX2xvYWRfdGxzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQogewogCS8qCi0JICogWFhYIHNsZWF6eSBoYWNrOiBJZiB3ZSdyZSBiZWluZyBjYWxsZWQgaW4gYSBsYXp5LWNwdSB6b25lLAotCSAqIGl0IG1lYW5zIHdlJ3JlIGluIGEgY29udGV4dCBzd2l0Y2gsIGFuZCAlZ3MgaGFzIGp1c3QgYmVlbgotCSAqIHNhdmVkLiAgVGhpcyBtZWFucyB3ZSBjYW4gemVybyBpdCBvdXQgdG8gcHJldmVudCBmYXVsdHMgb24KLQkgKiBleGl0IGZyb20gdGhlIGh5cGVydmlzb3IgaWYgdGhlIG5leHQgcHJvY2VzcyBoYXMgbm8gJWdzLgotCSAqIEVpdGhlciB3YXksIGl0IGhhcyBiZWVuIHNhdmVkLCBhbmQgdGhlIG5ldyB2YWx1ZSB3aWxsIGdldAotCSAqIGxvYWRlZCBwcm9wZXJseS4gIFRoaXMgd2lsbCBnbyBhd2F5IGFzIHNvb24gYXMgWGVuIGhhcyBiZWVuCi0JICogbW9kaWZpZWQgdG8gbm90IHNhdmUvcmVzdG9yZSAlZ3MgZm9yIG5vcm1hbCBoeXBlcmNhbGxzLgorCSAqIFhYWCBzbGVhenkgaGFjazogSWYgd2UncmUgYmVpbmcgY2FsbGVkIGluIGEgbGF6eS1jcHUgem9uZQorCSAqIGFuZCBsYXp5IGdzIGhhbmRsaW5nIGlzIGVuYWJsZWQsIGl0IG1lYW5zIHdlJ3JlIGluIGEKKwkgKiBjb250ZXh0IHN3aXRjaCwgYW5kICVncyBoYXMganVzdCBiZWVuIHNhdmVkLiAgVGhpcyBtZWFucyB3ZQorCSAqIGNhbiB6ZXJvIGl0IG91dCB0byBwcmV2ZW50IGZhdWx0cyBvbiBleGl0IGZyb20gdGhlCisJICogaHlwZXJ2aXNvciBpZiB0aGUgbmV4dCBwcm9jZXNzIGhhcyBubyAlZ3MuICBFaXRoZXIgd2F5LCBpdAorCSAqIGhhcyBiZWVuIHNhdmVkLCBhbmQgdGhlIG5ldyB2YWx1ZSB3aWxsIGdldCBsb2FkZWQgcHJvcGVybHkuCisJICogVGhpcyB3aWxsIGdvIGF3YXkgYXMgc29vbiBhcyBYZW4gaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm90CisJICogc2F2ZS9yZXN0b3JlICVncyBmb3Igbm9ybWFsIGh5cGVyY2FsbHMuCiAJICoKIAkgKiBPbiB4ODZfNjQsIHRoaXMgaGFjayBpcyBub3QgdXNlZCBmb3IgJWdzLCBiZWNhdXNlIGdzIHBvaW50cwogCSAqIHRvIEtFUk5FTF9HU19CQVNFIChhbmQgdXNlcyBpdCBmb3IgUERBIHJlZmVyZW5jZXMpLCBzbyB3ZQpAQCAtMzc1LDcgKzM0NCw3IEBACiAJICovCiAJaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX0NQVSkgewogI2lmZGVmIENPTkZJR19YODZfMzIKLQkJbG9hZHNlZ21lbnQoZ3MsIDApOworCQlsYXp5X2xvYWRfZ3MoMCk7CiAjZWxzZQogCQlsb2Fkc2VnbWVudChmcywgMCk7CiAjZW5kaWYKQEAgLTUyMSw3ICs0OTAsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6IHsKLQkJeG1hZGRyX3QgbWFkZHIgPSB2aXJ0X3RvX21hY2hpbmUoJmR0W2VudHJ5XSk7CisJCXhtYWRkcl90IG1hZGRyID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSgmZHRbZW50cnldKTsKIAogCQl4ZW5fbWNfZmx1c2goKTsKIAkJaWYgKEhZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3IobWFkZHIubWFkZHIsICoodTY0ICopZGVzYykpCkBAIC01ODcsOTQgKzU1NiwxOCBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBhcGljX29wcyB4ZW5fYmFzaWNfYXBpY19vcHMgPSB7Ci0JLnJlYWQgPSB4ZW5fYXBpY19yZWFkLAotCS53cml0ZSA9IHhlbl9hcGljX3dyaXRlLAotCS5pY3JfcmVhZCA9IHhlbl9hcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4ZW5fYXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4ZW5fYXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSB4ZW5fc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCi19Oworc3RhdGljIHZvaWQgc2V0X3hlbl9iYXNpY19hcGljX29wcyh2b2lkKQoreworCWFwaWMtPnJlYWQgPSB4ZW5fYXBpY19yZWFkOworCWFwaWMtPndyaXRlID0geGVuX2FwaWNfd3JpdGU7CisJYXBpYy0+aWNyX3JlYWQgPSB4ZW5fYXBpY19pY3JfcmVhZDsKKwlhcGljLT5pY3Jfd3JpdGUgPSB4ZW5fYXBpY19pY3Jfd3JpdGU7CisJYXBpYy0+d2FpdF9pY3JfaWRsZSA9IHhlbl9hcGljX3dhaXRfaWNyX2lkbGU7CisJYXBpYy0+c2FmZV93YWl0X2ljcl9pZGxlID0geGVuX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlOworfQogCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgeGVuX2ZsdXNoX3RsYih2b2lkKQotewotCXN0cnVjdCBtbXVleHRfb3AgKm9wOwotCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQltY3MgPSB4ZW5fbWNfZW50cnkoc2l6ZW9mKCpvcCkpOwotCi0Jb3AgPSBtY3MuYXJnczsKLQlvcC0+Y21kID0gTU1VRVhUX1RMQl9GTFVTSF9MT0NBTDsKLQlNVUxUSV9tbXVleHRfb3AobWNzLm1jLCBvcCwgMSwgTlVMTCwgRE9NSURfU0VMRik7Ci0KLQl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9NTVUpOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgeGVuX2ZsdXNoX3RsYl9zaW5nbGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN0cnVjdCBtbXVleHRfb3AgKm9wOwotCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQltY3MgPSB4ZW5fbWNfZW50cnkoc2l6ZW9mKCpvcCkpOwotCW9wID0gbWNzLmFyZ3M7Ci0Jb3AtPmNtZCA9IE1NVUVYVF9JTlZMUEdfTE9DQUw7Ci0Jb3AtPmFyZzEubGluZWFyX2FkZHIgPSBhZGRyICYgUEFHRV9NQVNLOwotCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKLQotCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fZmx1c2hfdGxiX290aGVycyhjb25zdCBjcHVtYXNrX3QgKmNwdXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSB1bnNpZ25lZCBsb25nIHZhKQotewotCXN0cnVjdCB7Ci0JCXN0cnVjdCBtbXVleHRfb3Agb3A7Ci0JCWNwdW1hc2tfdCBtYXNrOwotCX0gKmFyZ3M7Ci0JY3B1bWFza190IGNwdW1hc2sgPSAqY3B1czsKLQlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jczsKLQotCS8qCi0JICogQSBjb3VwbGUgb2YgKHRvIGJlIHJlbW92ZWQpIHNhbml0eSBjaGVja3M6Ci0JICoKLQkgKiAtIGN1cnJlbnQgQ1BVIG11c3Qgbm90IGJlIGluIG1hc2sKLQkgKiAtIG1hc2sgbXVzdCBleGlzdCA6KQotCSAqLwotCUJVR19PTihjcHVzX2VtcHR5KGNwdW1hc2spKTsKLQlCVUdfT04oY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1bWFzaykpOwotCUJVR19PTighbW0pOwotCi0JLyogSWYgYSBDUFUgd2hpY2ggd2UgcmFuIG9uIGhhcyBnb25lIGRvd24sIE9LLiAqLwotCWNwdXNfYW5kKGNwdW1hc2ssIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eShjcHVtYXNrKSkKLQkJcmV0dXJuOwotCi0JbWNzID0geGVuX21jX2VudHJ5KHNpemVvZigqYXJncykpOwotCWFyZ3MgPSBtY3MuYXJnczsKLQlhcmdzLT5tYXNrID0gY3B1bWFzazsKLQlhcmdzLT5vcC5hcmcyLnZjcHVtYXNrID0gJmFyZ3MtPm1hc2s7Ci0KLQlpZiAodmEgPT0gVExCX0ZMVVNIX0FMTCkgewotCQlhcmdzLT5vcC5jbWQgPSBNTVVFWFRfVExCX0ZMVVNIX01VTFRJOwotCX0gZWxzZSB7Ci0JCWFyZ3MtPm9wLmNtZCA9IE1NVUVYVF9JTlZMUEdfTVVMVEk7Ci0JCWFyZ3MtPm9wLmFyZzEubGluZWFyX2FkZHIgPSB2YTsKLQl9Ci0KLQlNVUxUSV9tbXVleHRfb3AobWNzLm1jLCAmYXJncy0+b3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpOwotCi0JeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfTU1VKTsKLX0KIAogc3RhdGljIHZvaWQgeGVuX2NsdHModm9pZCkKIHsKQEAgLTcwMCwyMSArNTkzLDYgQEAKIAl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9DUFUpOwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3IyKHVuc2lnbmVkIGxvbmcgY3IyKQotewotCXg4Nl9yZWFkX3BlcmNwdSh4ZW5fdmNwdSktPmFyY2guY3IyID0gY3IyOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjIodm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1KS0+YXJjaC5jcjI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9yZWFkX2NyMl9kaXJlY3Qodm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1X2luZm8uYXJjaC5jcjIpOwotfQotCiBzdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgY3I0KQogewogCWNyNCAmPSB+WDg2X0NSNF9QR0U7CkBAIC03MjMsNzEgKzYwMSw2IEBACiAJbmF0aXZlX3dyaXRlX2NyNChjcjQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjModm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KHhlbl9jcjMpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF9jcjModm9pZCAqdikKLXsKLQl4ODZfd3JpdGVfcGVyY3B1KHhlbl9jdXJyZW50X2NyMywgKHVuc2lnbmVkIGxvbmcpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9feGVuX3dyaXRlX2NyMyhib29sIGtlcm5lbCwgdW5zaWduZWQgbG9uZyBjcjMpCi17Ci0Jc3RydWN0IG1tdWV4dF9vcCAqb3A7Ci0Jc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7Ci0JdW5zaWduZWQgbG9uZyBtZm47Ci0KLQlpZiAoY3IzKQotCQltZm4gPSBwZm5fdG9fbWZuKFBGTl9ET1dOKGNyMykpOwotCWVsc2UKLQkJbWZuID0gMDsKLQotCVdBUk5fT04obWZuID09IDAgJiYga2VybmVsKTsKLQotCW1jcyA9IF9feGVuX21jX2VudHJ5KHNpemVvZigqb3ApKTsKLQotCW9wID0gbWNzLmFyZ3M7Ci0Jb3AtPmNtZCA9IGtlcm5lbCA/IE1NVUVYVF9ORVdfQkFTRVBUUiA6IE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSOwotCW9wLT5hcmcxLm1mbiA9IG1mbjsKLQotCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKLQotCWlmIChrZXJuZWwpIHsKLQkJeDg2X3dyaXRlX3BlcmNwdSh4ZW5fY3IzLCBjcjMpOwotCi0JCS8qIFVwZGF0ZSB4ZW5fY3VycmVudF9jcjMgb25jZSB0aGUgYmF0Y2ggaGFzIGFjdHVhbGx5Ci0JCSAgIGJlZW4gc3VibWl0dGVkLiAqLwotCQl4ZW5fbWNfY2FsbGJhY2soc2V0X2N1cnJlbnRfY3IzLCAodm9pZCAqKWNyMyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3IzKHVuc2lnbmVkIGxvbmcgY3IzKQotewotCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKLQotCXhlbl9tY19iYXRjaCgpOyAgLyogZGlzYWJsZXMgaW50ZXJydXB0cyAqLwotCi0JLyogVXBkYXRlIHdoaWxlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyBpdHMgYXRvbWljIHdpdGgKLQkgICByZXNwZWN0IHRvIGlwaXMgKi8KLQl4ODZfd3JpdGVfcGVyY3B1KHhlbl9jcjMsIGNyMyk7Ci0KLQlfX3hlbl93cml0ZV9jcjModHJ1ZSwgY3IzKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQl7Ci0JCXBnZF90ICp1c2VyX3BnZCA9IHhlbl9nZXRfdXNlcl9wZ2QoX192YShjcjMpKTsKLQkJaWYgKHVzZXJfcGdkKQotCQkJX194ZW5fd3JpdGVfY3IzKGZhbHNlLCBfX3BhKHVzZXJfcGdkKSk7Ci0JCWVsc2UKLQkJCV9feGVuX3dyaXRlX2NyMyhmYWxzZSwgMCk7Ci0JfQotI2VuZGlmCi0KLQl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9DUFUpOyAgLyogaW50ZXJydXB0cyByZXN0b3JlZCAqLwotfQotCiBzdGF0aWMgaW50IHhlbl93cml0ZV9tc3Jfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCiB7CiAJaW50IHJldDsKQEAgLTgyOSwxODUgKzY0Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogRWFybHkgaW4gYm9vdCwgd2hpbGUgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBwYWdldGFibGUsIGFzc3VtZQotICAgZXZlcnl0aGluZyBpcyBwaW5uZWQuICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX2FsbG9jX3B0ZV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLSNpZmRlZiBDT05GSUdfRkxBVE1FTQotCUJVR19PTihtZW1fbWFwKTsJLyogc2hvdWxkIG9ubHkgYmUgdXNlZCBlYXJseSAqLwotI2VuZGlmCi0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShfX3ZhKFBGTl9QSFlTKHBmbikpKTsKLX0KLQotLyogRWFybHkgcmVsZWFzZV9wdGUgYXNzdW1lcyB0aGF0IGFsbCBwdHMgYXJlIHBpbm5lZCwgc2luY2UgdGhlcmUncwotICAgb25seSBpbml0X21tIGFuZCBhbnl0aGluZyBhdHRhY2hlZCB0byB0aGF0IGlzIHBpbm5lZC4gKi8KLXN0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0ZV9pbml0KHVuc2lnbmVkIGxvbmcgcGZuKQotewotCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOwotfQotCi1zdGF0aWMgdm9pZCBwaW5fcGFnZXRhYmxlX3Bmbih1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXN0cnVjdCBtbXVleHRfb3Agb3A7Ci0Jb3AuY21kID0gY21kOwotCW9wLmFyZzEubWZuID0gcGZuX3RvX21mbihwZm4pOwotCWlmIChIWVBFUlZJU09SX21tdWV4dF9vcCgmb3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpKQotCQlCVUcoKTsKLX0KLQotLyogVGhpcyBuZWVkcyB0byBtYWtlIHN1cmUgdGhlIG5ldyBwdGUgcGFnZSBpcyBwaW5uZWQgaWZmIGl0cyBiZWluZwotICAgYXR0YWNoZWQgdG8gYSBwaW5uZWQgcGFnZXRhYmxlLiAqLwotc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B0cGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxldmVsKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQotCWlmIChQYWdlUGlubmVkKHZpcnRfdG9fcGFnZShtbS0+cGdkKSkpIHsKLQkJU2V0UGFnZVBpbm5lZChwYWdlKTsKLQotCQl2bV91bm1hcF9hbGlhc2VzKCk7Ci0JCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKLQkJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoX192YShQRk5fUEhZUygodW5zaWduZWQgbG9uZylwZm4pKSk7Ci0JCQlpZiAobGV2ZWwgPT0gUFRfUFRFICYmIFVTRV9TUExJVF9QVExPQ0tTKQotCQkJCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDFfVEFCTEUsIHBmbik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN0cmF5IG1hcHBpbmdzIG9mCi0JCQkgICB0aGlzIHBhZ2UgKi8KLQkJCWttYXBfZmx1c2hfdW51c2VkKCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9hbGxvY19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgUFRfUFRFKTsKLX0KLQotc3RhdGljIHZvaWQgeGVuX2FsbG9jX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QTUQpOwotfQotCi1zdGF0aWMgaW50IHhlbl9wZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JcGdkX3QgKnBnZCA9IG1tLT5wZ2Q7Ci0JaW50IHJldCA9IDA7Ci0KLQlCVUdfT04oUGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UocGdkKSkpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocGdkKTsKLQkJcGdkX3QgKnVzZXJfcGdkOwotCi0JCUJVR19PTihwYWdlLT5wcml2YXRlICE9IDApOwotCi0JCXJldCA9IC1FTk9NRU07Ci0KLQkJdXNlcl9wZ2QgPSAocGdkX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCQlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpdXNlcl9wZ2Q7Ci0KLQkJaWYgKHVzZXJfcGdkICE9IE5VTEwpIHsKLQkJCXVzZXJfcGdkW3BnZF9pbmRleChWU1lTQ0FMTF9TVEFSVCldID0KLQkJCQlfX3BnZChfX3BhKGxldmVsM191c2VyX3ZzeXNjYWxsKSB8IF9QQUdFX1RBQkxFKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQotCQlCVUdfT04oUGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UoeGVuX2dldF91c2VyX3BnZChwZ2QpKSkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgeGVuX3BnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlwZ2RfdCAqdXNlcl9wZ2QgPSB4ZW5fZ2V0X3VzZXJfcGdkKHBnZCk7Ci0KLQlpZiAodXNlcl9wZ2QpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl1c2VyX3BnZCk7Ci0jZW5kaWYKLX0KLQotLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHVudGlsIHdlJ3JlIE9LIHRvIHVzZSBzdHJ1Y3QgcGFnZSAqLwotc3RhdGljIHZvaWQgeGVuX3JlbGVhc2VfcHRwYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsZXZlbCkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0KLQlpZiAoUGFnZVBpbm5lZChwYWdlKSkgewotCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCQlpZiAobGV2ZWwgPT0gUFRfUFRFICYmIFVTRV9TUExJVF9QVExPQ0tTKQotCQkJCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgcGZuKTsKLQkJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOwotCQl9Ci0JCUNsZWFyUGFnZVBpbm5lZChwYWdlKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0ZSh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQl4ZW5fcmVsZWFzZV9wdHBhZ2UocGZuLCBQVF9QVEUpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wbWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUE1EKTsKLX0KLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QVUQpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUFVEKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLXN0YXRpYyB2b2lkICp4ZW5fa21hcF9hdG9taWNfcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKLXsKLQlwZ3Byb3RfdCBwcm90ID0gUEFHRV9LRVJORUw7Ci0KLQlpZiAoUGFnZVBpbm5lZChwYWdlKSkKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX1JPOwotCi0JaWYgKDAgJiYgUGFnZUhpZ2hNZW0ocGFnZSkpCi0JCXByaW50aygibWFwcGluZyBoaWdocHRlICVseCB0eXBlICVkIHByb3QgJXNcbiIsCi0JCSAgICAgICBwYWdlX3RvX3BmbihwYWdlKSwgdHlwZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9SVyA/ICJXUklURSIgOiAiUkVBRCIpOwotCi0JcmV0dXJuIGttYXBfYXRvbWljX3Byb3QocGFnZSwgdHlwZSwgcHJvdCk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLXN0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQkvKiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHB0ZSwgdGhlbiBkb24ndCBhbGxvdyBfUEFHRV9SVyB0byBiZSBzZXQgKi8KLQlpZiAocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9QUkVTRU5UKQotCQlwdGUgPSBfX3B0ZV9tYSgoKHB0ZV92YWxfbWEoKnB0ZXApICYgX1BBR0VfUlcpIHwgfl9QQUdFX1JXKSAmCi0JCQkgICAgICAgcHRlX3ZhbF9tYShwdGUpKTsKLQotCXJldHVybiBwdGU7Ci19Ci0KLS8qIEluaXQtdGltZSBzZXRfcHRlIHdoaWxlIGNvbnN0cnVjdGluZyBpbml0aWFsIHBhZ2V0YWJsZXMsIHdoaWNoCi0gICBkb2Vzbid0IGFsbG93IFJPIHBhZ2V0YWJsZSBwYWdlcyB0byBiZSByZW1hcHBlZCBSVyAqLwotc3RhdGljIF9faW5pdCB2b2lkIHhlbl9zZXRfcHRlX2luaXQocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlwdGUgPSBtYXNrX3J3X3B0ZShwdGVwLCBwdGUpOwotCi0JeGVuX3NldF9wdGUocHRlcCwgcHRlKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkKLXsKLX0KLQogdm9pZCB4ZW5fc2V0dXBfc2hhcmVkX2luZm8odm9pZCkKIHsKIAlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKSB7CkBAIC0xMDI4LDM3ICs2NjIsNiBAQAogCXhlbl9zZXR1cF9tZm5fbGlzdF9saXN0KCk7CiB9CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCi17Ci0JeGVuX3NldHVwX3NoYXJlZF9pbmZvKCk7Ci19Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKQotewotCXB2X21tdV9vcHMuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlOwotCXB2X21tdV9vcHMuc2V0X3BtZCA9IHhlbl9zZXRfcG1kOwotCXB2X21tdV9vcHMuc2V0X3B1ZCA9IHhlbl9zZXRfcHVkOwotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCXB2X21tdV9vcHMuc2V0X3BnZCA9IHhlbl9zZXRfcGdkOwotI2VuZGlmCi0KLQkvKiBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIHBhdGNoaW5nIGhhc24ndCBoYXBwZW5lZCB5ZXQKLQkgICAod2hpY2ggaXQgaGFzbid0KSAqLwotCXB2X21tdV9vcHMuYWxsb2NfcHRlID0geGVuX2FsbG9jX3B0ZTsKLQlwdl9tbXVfb3BzLmFsbG9jX3BtZCA9IHhlbl9hbGxvY19wbWQ7Ci0JcHZfbW11X29wcy5yZWxlYXNlX3B0ZSA9IHhlbl9yZWxlYXNlX3B0ZTsKLQlwdl9tbXVfb3BzLnJlbGVhc2VfcG1kID0geGVuX3JlbGVhc2VfcG1kOwotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCXB2X21tdV9vcHMuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B1ZDsKLQlwdl9tbXVfb3BzLnJlbGVhc2VfcHVkID0geGVuX3JlbGVhc2VfcHVkOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JU2V0UGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UobGV2ZWwzX3VzZXJfdnN5c2NhbGwpKTsKLSNlbmRpZgotCXhlbl9tYXJrX2luaXRfbW1fcGlubmVkKCk7Ci19Ci0KIC8qIFRoaXMgaXMgY2FsbGVkIG9uY2Ugd2UgaGF2ZSB0aGUgY3B1X3Bvc3NpYmxlX21hcCAqLwogdm9pZCB4ZW5fc2V0dXBfdmNwdV9pbmZvX3BsYWNlbWVudCh2b2lkKQogewpAQCAtMTA3MiwxMCArNjc1LDEwIEBACiAJaWYgKGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCkgewogCQlwcmludGsoS0VSTl9JTkZPICJYZW46IHVzaW5nIHZjcHVfaW5mbyBwbGFjZW1lbnRcbiIpOwogCi0JCXB2X2lycV9vcHMuc2F2ZV9mbCA9IHhlbl9zYXZlX2ZsX2RpcmVjdDsKLQkJcHZfaXJxX29wcy5yZXN0b3JlX2ZsID0geGVuX3Jlc3RvcmVfZmxfZGlyZWN0OwotCQlwdl9pcnFfb3BzLmlycV9kaXNhYmxlID0geGVuX2lycV9kaXNhYmxlX2RpcmVjdDsKLQkJcHZfaXJxX29wcy5pcnFfZW5hYmxlID0geGVuX2lycV9lbmFibGVfZGlyZWN0OworCQlwdl9pcnFfb3BzLnNhdmVfZmwgPSBfX1BWX0lTX0NBTExFRV9TQVZFKHhlbl9zYXZlX2ZsX2RpcmVjdCk7CisJCXB2X2lycV9vcHMucmVzdG9yZV9mbCA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUoeGVuX3Jlc3RvcmVfZmxfZGlyZWN0KTsKKwkJcHZfaXJxX29wcy5pcnFfZGlzYWJsZSA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCk7CisJCXB2X2lycV9vcHMuaXJxX2VuYWJsZSA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUoeGVuX2lycV9lbmFibGVfZGlyZWN0KTsKIAkJcHZfbW11X29wcy5yZWFkX2NyMiA9IHhlbl9yZWFkX2NyMl9kaXJlY3Q7CiAJfQogfQpAQCAtMTEzMyw0OSArNzM2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fc2V0X2ZpeG1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKLXsKLQlwdGVfdCBwdGU7Ci0KLQlwaHlzID4+PSBQQUdFX1NISUZUOwotCi0Jc3dpdGNoIChpZHgpIHsKLQljYXNlIEZJWF9CVE1BUF9FTkQgLi4uIEZJWF9CVE1BUF9CRUdJTjoKLSNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCi0JY2FzZSBGSVhfRjAwRl9JRFQ6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JY2FzZSBGSVhfV1BfVEVTVDoKLQljYXNlIEZJWF9WRFNPOgotIyBpZmRlZiBDT05GSUdfSElHSE1FTQotCWNhc2UgRklYX0tNQVBfQkVHSU4gLi4uIEZJWF9LTUFQX0VORDoKLSMgZW5kaWYKLSNlbHNlCi0JY2FzZSBWU1lTQ0FMTF9MQVNUX1BBR0UgLi4uIFZTWVNDQUxMX0ZJUlNUX1BBR0U6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQljYXNlIEZJWF9BUElDX0JBU0U6CS8qIG1hcHMgZHVtbXkgbG9jYWwgQVBJQyAqLwotI2VuZGlmCi0JCXB0ZSA9IHBmbl9wdGUocGh5cywgcHJvdCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHRlID0gbWZuX3B0ZShwaHlzLCBwcm90KTsKLQkJYnJlYWs7Ci0JfQotCi0JX19uYXRpdmVfc2V0X2ZpeG1hcChpZHgsIHB0ZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogUmVwbGljYXRlIGNoYW5nZXMgdG8gbWFwIHRoZSB2c3lzY2FsbCBwYWdlIGludG8gdGhlIHVzZXIKLQkgICBwYWdldGFibGUgdnN5c2NhbGwgbWFwcGluZy4gKi8KLQlpZiAoaWR4ID49IFZTWVNDQUxMX0xBU1RfUEFHRSAmJiBpZHggPD0gVlNZU0NBTExfRklSU1RfUEFHRSkgewotCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19maXhfdG9fdmlydChpZHgpOwotCQlzZXRfcHRlX3ZhZGRyX3B1ZChsZXZlbDNfdXNlcl92c3lzY2FsbCwgdmFkZHIsIHB0ZSk7Ci0JfQotI2VuZGlmCi19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW5mbyB4ZW5faW5mbyBfX2luaXRkYXRhID0gewogCS5wYXJhdmlydF9lbmFibGVkID0gMSwKIAkuc2hhcmVkX2tlcm5lbF9wbWQgPSAwLApAQCAtMTI3MSw4NyArODMxLDYgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9tbXVfb3BzIHhlbl9tbXVfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLnBhZ2V0YWJsZV9zZXR1cF9zdGFydCA9IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQsCi0JLnBhZ2V0YWJsZV9zZXR1cF9kb25lID0geGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lLAotCi0JLnJlYWRfY3IyID0geGVuX3JlYWRfY3IyLAotCS53cml0ZV9jcjIgPSB4ZW5fd3JpdGVfY3IyLAotCi0JLnJlYWRfY3IzID0geGVuX3JlYWRfY3IzLAotCS53cml0ZV9jcjMgPSB4ZW5fd3JpdGVfY3IzLAotCi0JLmZsdXNoX3RsYl91c2VyID0geGVuX2ZsdXNoX3RsYiwKLQkuZmx1c2hfdGxiX2tlcm5lbCA9IHhlbl9mbHVzaF90bGIsCi0JLmZsdXNoX3RsYl9zaW5nbGUgPSB4ZW5fZmx1c2hfdGxiX3NpbmdsZSwKLQkuZmx1c2hfdGxiX290aGVycyA9IHhlbl9mbHVzaF90bGJfb3RoZXJzLAotCi0JLnB0ZV91cGRhdGUgPSBwYXJhdmlydF9ub3AsCi0JLnB0ZV91cGRhdGVfZGVmZXIgPSBwYXJhdmlydF9ub3AsCi0KLQkucGdkX2FsbG9jID0geGVuX3BnZF9hbGxvYywKLQkucGdkX2ZyZWUgPSB4ZW5fcGdkX2ZyZWUsCi0KLQkuYWxsb2NfcHRlID0geGVuX2FsbG9jX3B0ZV9pbml0LAotCS5yZWxlYXNlX3B0ZSA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAotCS5hbGxvY19wbWQgPSB4ZW5fYWxsb2NfcHRlX2luaXQsCi0JLmFsbG9jX3BtZF9jbG9uZSA9IHBhcmF2aXJ0X25vcCwKLQkucmVsZWFzZV9wbWQgPSB4ZW5fcmVsZWFzZV9wdGVfaW5pdCwKLQotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0JLmttYXBfYXRvbWljX3B0ZSA9IHhlbl9rbWFwX2F0b21pY19wdGUsCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQkuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlLAotI2Vsc2UKLQkuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlX2luaXQsCi0jZW5kaWYKLQkuc2V0X3B0ZV9hdCA9IHhlbl9zZXRfcHRlX2F0LAotCS5zZXRfcG1kID0geGVuX3NldF9wbWRfaHlwZXIsCi0KLQkucHRlcF9tb2RpZnlfcHJvdF9zdGFydCA9IF9fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCwKLQkucHRlcF9tb2RpZnlfcHJvdF9jb21taXQgPSBfX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0LAotCi0JLnB0ZV92YWwgPSB4ZW5fcHRlX3ZhbCwKLQkucHRlX2ZsYWdzID0gbmF0aXZlX3B0ZV9mbGFncywKLQkucGdkX3ZhbCA9IHhlbl9wZ2RfdmFsLAotCi0JLm1ha2VfcHRlID0geGVuX21ha2VfcHRlLAotCS5tYWtlX3BnZCA9IHhlbl9tYWtlX3BnZCwKLQotI2lmZGVmIENPTkZJR19YODZfUEFFCi0JLnNldF9wdGVfYXRvbWljID0geGVuX3NldF9wdGVfYXRvbWljLAotCS5zZXRfcHRlX3ByZXNlbnQgPSB4ZW5fc2V0X3B0ZV9hdCwKLQkucHRlX2NsZWFyID0geGVuX3B0ZV9jbGVhciwKLQkucG1kX2NsZWFyID0geGVuX3BtZF9jbGVhciwKLSNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwotCS5zZXRfcHVkID0geGVuX3NldF9wdWRfaHlwZXIsCi0KLQkubWFrZV9wbWQgPSB4ZW5fbWFrZV9wbWQsCi0JLnBtZF92YWwgPSB4ZW5fcG1kX3ZhbCwKLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCS5wdWRfdmFsID0geGVuX3B1ZF92YWwsCi0JLm1ha2VfcHVkID0geGVuX21ha2VfcHVkLAotCS5zZXRfcGdkID0geGVuX3NldF9wZ2RfaHlwZXIsCi0KLQkuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B0ZV9pbml0LAotCS5yZWxlYXNlX3B1ZCA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLwotCi0JLmFjdGl2YXRlX21tID0geGVuX2FjdGl2YXRlX21tLAotCS5kdXBfbW1hcCA9IHhlbl9kdXBfbW1hcCwKLQkuZXhpdF9tbWFwID0geGVuX2V4aXRfbW1hcCwKLQotCS5sYXp5X21vZGUgPSB7Ci0JCS5lbnRlciA9IHBhcmF2aXJ0X2VudGVyX2xhenlfbW11LAotCQkubGVhdmUgPSB4ZW5fbGVhdmVfbGF6eSwKLQl9LAotCi0JLnNldF9maXhtYXAgPSB4ZW5fc2V0X2ZpeG1hcCwKLX07Ci0KIHN0YXRpYyB2b2lkIHhlbl9yZWJvb3QoaW50IHJlYXNvbikKIHsKIAlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24gciA9IHsgLnJlYXNvbiA9IHJlYXNvbiB9OwpAQCAtMTM5NCwyMjMgKzg3Myw2IEBACiB9OwogCiAKLXN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV90b3Aodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5zaWduZWQgbG9uZyB0b3AgPSBIWVBFUlZJU09SX1ZJUlRfU1RBUlQ7Ci0Jc3RydWN0IHhlbl9wbGF0Zm9ybV9wYXJhbWV0ZXJzIHBwOwotCi0JaWYgKEhZUEVSVklTT1JfeGVuX3ZlcnNpb24oWEVOVkVSX3BsYXRmb3JtX3BhcmFtZXRlcnMsICZwcCkgPT0gMCkKLQkJdG9wID0gcHAudmlydF9zdGFydDsKLQotCXJlc2VydmVfdG9wX2FkZHJlc3MoLXRvcCk7Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwotfQotCi0vKgotICogTGlrZSBfX3ZhKCksIGJ1dCByZXR1cm5zIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBtYXBwaW5nICh3aGljaCBpcwotICogYWxsIHdlIGhhdmUgdW50aWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nIGhhcyBiZWVuIHNldCB1cC4KLSAqLwotc3RhdGljIHZvaWQgKl9fa2EocGh5c19hZGRyX3QgcGFkZHIpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiAodm9pZCAqKShwYWRkciArIF9fU1RBUlRfS0VSTkVMX21hcCk7Ci0jZWxzZQotCXJldHVybiBfX3ZhKHBhZGRyKTsKLSNlbmRpZgotfQotCi0vKiBDb252ZXJ0IGEgbWFjaGluZSBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG0ycChwaHlzX2FkZHJfdCBtYWRkcikKLXsKLQlwaHlzX2FkZHJfdCBwYWRkcjsKLQotCW1hZGRyICY9IFBURV9QRk5fTUFTSzsKLQlwYWRkciA9IG1mbl90b19wZm4obWFkZHIgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVDsKLQotCXJldHVybiBwYWRkcjsKLX0KLQotLyogQ29udmVydCBhIG1hY2hpbmUgYWRkcmVzcyB0byBrZXJuZWwgdmlydHVhbCAqLwotc3RhdGljIHZvaWQgKm0ydihwaHlzX2FkZHJfdCBtYWRkcikKLXsKLQlyZXR1cm4gX19rYShtMnAobWFkZHIpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3BhZ2VfcHJvdCh2b2lkICphZGRyLCBwZ3Byb3RfdCBwcm90KQotewotCXVuc2lnbmVkIGxvbmcgcGZuID0gX19wYShhZGRyKSA+PiBQQUdFX1NISUZUOwotCXB0ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKLQotCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKWFkZHIsIHB0ZSwgMCkpCi0JCUJVRygpOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX21hcF9pZGVudGl0eV9lYXJseShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIG1heF9wZm4pCi17Ci0JdW5zaWduZWQgcG1kaWR4LCBwdGVpZHg7Ci0JdW5zaWduZWQgaWRlbnRfcHRlOwotCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JaWRlbnRfcHRlID0gMDsKLQlwZm4gPSAwOwotCWZvciAocG1kaWR4ID0gMDsgcG1kaWR4IDwgUFRSU19QRVJfUE1EICYmIHBmbiA8IG1heF9wZm47IHBtZGlkeCsrKSB7Ci0JCXB0ZV90ICpwdGVfcGFnZTsKLQotCQkvKiBSZXVzZSBvciBhbGxvY2F0ZSBhIHBhZ2Ugb2YgcHRlcyAqLwotCQlpZiAocG1kX3ByZXNlbnQocG1kW3BtZGlkeF0pKQotCQkJcHRlX3BhZ2UgPSBtMnYocG1kW3BtZGlkeF0ucG1kKTsKLQkJZWxzZSB7Ci0JCQkvKiBDaGVjayBmb3IgZnJlZSBwdGUgcGFnZXMgKi8KLQkJCWlmIChpZGVudF9wdGUgPT0gQVJSQVlfU0laRShsZXZlbDFfaWRlbnRfcGd0KSkKLQkJCQlicmVhazsKLQotCQkJcHRlX3BhZ2UgPSAmbGV2ZWwxX2lkZW50X3BndFtpZGVudF9wdGVdOwotCQkJaWRlbnRfcHRlICs9IFBUUlNfUEVSX1BURTsKLQotCQkJcG1kW3BtZGlkeF0gPSBfX3BtZChfX3BhKHB0ZV9wYWdlKSB8IF9QQUdFX1RBQkxFKTsKLQkJfQotCi0JCS8qIEluc3RhbGwgbWFwcGluZ3MgKi8KLQkJZm9yIChwdGVpZHggPSAwOyBwdGVpZHggPCBQVFJTX1BFUl9QVEU7IHB0ZWlkeCsrLCBwZm4rKykgewotCQkJcHRlX3QgcHRlOwotCi0JCQlpZiAocGZuID4gbWF4X3Bmbl9tYXBwZWQpCi0JCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47Ci0KLQkJCWlmICghcHRlX25vbmUocHRlX3BhZ2VbcHRlaWR4XSkpCi0JCQkJY29udGludWU7Ci0KLQkJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTF9FWEVDKTsKLQkJCXB0ZV9wYWdlW3B0ZWlkeF0gPSBwdGU7Ci0JCX0KLQl9Ci0KLQlmb3IgKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IGlkZW50X3B0ZTsgcHRlaWR4ICs9IFBUUlNfUEVSX1BURSkKLQkJc2V0X3BhZ2VfcHJvdCgmbGV2ZWwxX2lkZW50X3BndFtwdGVpZHhdLCBQQUdFX0tFUk5FTF9STyk7Ci0KLQlzZXRfcGFnZV9wcm90KHBtZCwgUEFHRV9LRVJORUxfUk8pOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIHZvaWQgY29udmVydF9wZm5fbWZuKHZvaWQgKnYpCi17Ci0JcHRlX3QgKnB0ZSA9IHY7Ci0JaW50IGk7Ci0KLQkvKiBBbGwgbGV2ZWxzIGFyZSBjb252ZXJ0ZWQgdGhlIHNhbWUgd2F5LCBzbyBqdXN0IHRyZWF0IHRoZW0KLQkgICBhcyBwdGVzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykKLQkJcHRlW2ldID0geGVuX21ha2VfcHRlKHB0ZVtpXS5wdGUpOwotfQotCi0vKgotICogU2V0IHVwIHRoZSBpbml0YWwga2VybmVsIHBhZ2V0YWJsZS4KLSAqCi0gKiBXZSBjYW4gY29uc3RydWN0IHRoaXMgYnkgZ3JhZnRpbmcgdGhlIFhlbiBwcm92aWRlZCBwYWdldGFibGUgaW50bwotICogaGVhZF82NC5TJ3MgcHJlY29uc3RydWN0ZWQgcGFnZXRhYmxlcy4gIFdlIGNvcHkgdGhlIFhlbiBMMidzIGludG8KLSAqIGxldmVsMl9pZGVudF9wZ3QsIGxldmVsMl9rZXJuZWxfcGd0IGFuZCBsZXZlbDJfZml4bWFwX3BndC4gIFRoaXMKLSAqIG1lYW5zIHRoYXQgb25seSB0aGUga2VybmVsIGhhcyBhIHBoeXNpY2FsIG1hcHBpbmcgdG8gc3RhcnQgd2l0aCAtCi0gKiBidXQgdGhhdCdzIGVub3VnaCB0byBnZXQgX192YSB3b3JraW5nLiAgV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZXN0Ci0gKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0Ci0gKiB1cC4KLSAqLwotc3RhdGljIF9faW5pdCBwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgbWF4X3BmbikKLXsKLQlwdWRfdCAqbDM7Ci0JcG1kX3QgKmwyOwotCi0JLyogWmFwIGlkZW50aXR5IG1hcHBpbmcgKi8KLQlpbml0X2xldmVsNF9wZ3RbMF0gPSBfX3BnZCgwKTsKLQotCS8qIFByZS1jb25zdHJ1Y3RlZCBlbnRyaWVzIGFyZSBpbiBwZm4sIHNvIGNvbnZlcnQgdG8gbWZuICovCi0JY29udmVydF9wZm5fbWZuKGluaXRfbGV2ZWw0X3BndCk7Ci0JY29udmVydF9wZm5fbWZuKGxldmVsM19pZGVudF9wZ3QpOwotCWNvbnZlcnRfcGZuX21mbihsZXZlbDNfa2VybmVsX3BndCk7Ci0KLQlsMyA9IG0ydihwZ2RbcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCldLnBnZCk7Ci0JbDIgPSBtMnYobDNbcHVkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCldLnB1ZCk7Ci0KLQltZW1jcHkobGV2ZWwyX2lkZW50X3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOwotCW1lbWNweShsZXZlbDJfa2VybmVsX3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOwotCi0JbDMgPSBtMnYocGdkW3BnZF9pbmRleChfX1NUQVJUX0tFUk5FTF9tYXAgKyBQTURfU0laRSldLnBnZCk7Ci0JbDIgPSBtMnYobDNbcHVkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCArIFBNRF9TSVpFKV0ucHVkKTsKLQltZW1jcHkobGV2ZWwyX2ZpeG1hcF9wZ3QsIGwyLCBzaXplb2YocG1kX3QpICogUFRSU19QRVJfUE1EKTsKLQotCS8qIFNldCB1cCBpZGVudGl0eSBtYXAgKi8KLQl4ZW5fbWFwX2lkZW50aXR5X2Vhcmx5KGxldmVsMl9pZGVudF9wZ3QsIG1heF9wZm4pOwotCi0JLyogTWFrZSBwYWdldGFibGUgcGllY2VzIFJPICovCi0Jc2V0X3BhZ2VfcHJvdChpbml0X2xldmVsNF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGxldmVsM19pZGVudF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGxldmVsM19rZXJuZWxfcGd0LCBQQUdFX0tFUk5FTF9STyk7Ci0Jc2V0X3BhZ2VfcHJvdChsZXZlbDNfdXNlcl92c3lzY2FsbCwgUEFHRV9LRVJORUxfUk8pOwotCXNldF9wYWdlX3Byb3QobGV2ZWwyX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGxldmVsMl9maXhtYXBfcGd0LCBQQUdFX0tFUk5FTF9STyk7Ci0KLQkvKiBQaW4gZG93biBuZXcgTDQgKi8KLQlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfUElOX0w0X1RBQkxFLAotCQkJICBQRk5fRE9XTihfX3BhX3N5bWJvbChpbml0X2xldmVsNF9wZ3QpKSk7Ci0KLQkvKiBVbnBpbiBYZW4tcHJvdmlkZWQgb25lICovCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBQRk5fRE9XTihfX3BhKHBnZCkpKTsKLQotCS8qIFN3aXRjaCBvdmVyICovCi0JcGdkID0gaW5pdF9sZXZlbDRfcGd0OwotCi0JLyoKLQkgKiBBdCB0aGlzIHN0YWdlIHRoZXJlIGNhbiBiZSBubyB1c2VyIHBnZCwgYW5kIG5vIHBhZ2UKLQkgKiBzdHJ1Y3R1cmUgdG8gYXR0YWNoIGl0IHRvLCBzbyBtYWtlIHN1cmUgd2UganVzdCBzZXQga2VybmVsCi0JICogcGdkLgotCSAqLwotCXhlbl9tY19iYXRjaCgpOwotCV9feGVuX3dyaXRlX2NyMyh0cnVlLCBfX3BhKHBnZCkpOwotCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX0NQVSk7Ci0KLQlyZXNlcnZlX2Vhcmx5KF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UpLAotCQkgICAgICBfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlICsKLQkJCSAgIHhlbl9zdGFydF9pbmZvLT5ucl9wdF9mcmFtZXMgKiBQQUdFX1NJWkUpLAotCQkgICAgICAiWEVOIFBBR0VUQUJMRVMiKTsKLQotCXJldHVybiBwZ2Q7Ci19Ci0jZWxzZQkvKiAhQ09ORklHX1g4Nl82NCAqLwotc3RhdGljIHBtZF90IGxldmVsMl9rZXJuZWxfcGd0W1BUUlNfUEVSX1BNRF0gX19wYWdlX2FsaWduZWRfYnNzOwotCi1zdGF0aWMgX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAotCQkJCQkJdW5zaWduZWQgbG9uZyBtYXhfcGZuKQotewotCXBtZF90ICprZXJuZWxfcG1kOwotCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihpbml0X3BnX3RhYmxlc19lbmQgKyA1MTIqMTAyNCk7Ci0KLQlrZXJuZWxfcG1kID0gbTJ2KHBnZFtLRVJORUxfUEdEX0JPVU5EQVJZXS5wZ2QpOwotCW1lbWNweShsZXZlbDJfa2VybmVsX3BndCwga2VybmVsX3BtZCwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7Ci0KLQl4ZW5fbWFwX2lkZW50aXR5X2Vhcmx5KGxldmVsMl9rZXJuZWxfcGd0LCBtYXhfcGZuKTsKLQotCW1lbWNweShzd2FwcGVyX3BnX2RpciwgcGdkLCBzaXplb2YocGdkX3QpICogUFRSU19QRVJfUEdEKTsKLQlzZXRfcGdkKCZzd2FwcGVyX3BnX2RpcltLRVJORUxfUEdEX0JPVU5EQVJZXSwKLQkJCV9fcGdkKF9fcGEobGV2ZWwyX2tlcm5lbF9wZ3QpIHwgX1BBR0VfUFJFU0VOVCkpOwotCi0Jc2V0X3BhZ2VfcHJvdChsZXZlbDJfa2VybmVsX3BndCwgUEFHRV9LRVJORUxfUk8pOwotCXNldF9wYWdlX3Byb3Qoc3dhcHBlcl9wZ19kaXIsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGVtcHR5X3plcm9fcGFnZSwgUEFHRV9LRVJORUxfUk8pOwotCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBQRk5fRE9XTihfX3BhKHBnZCkpKTsKLQotCXhlbl93cml0ZV9jcjMoX19wYShzd2FwcGVyX3BnX2RpcikpOwotCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1BJTl9MM19UQUJMRSwgUEZOX0RPV04oX19wYShzd2FwcGVyX3BnX2RpcikpKTsKLQotCXJldHVybiBzd2FwcGVyX3BnX2RpcjsKLX0KLSNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCi0KIC8qIEZpcnN0IEMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIFhlbiBib290ICovCiBhc21saW5rYWdlIHZvaWQgX19pbml0IHhlbl9zdGFydF9rZXJuZWwodm9pZCkKIHsKQEAgLTE2MzksNyArOTAxLDcgQEAKIAkvKgogCSAqIHNldCB1cCB0aGUgYmFzaWMgYXBpYyBvcHMuCiAJICovCi0JYXBpY19vcHMgPSAmeGVuX2Jhc2ljX2FwaWNfb3BzOworCXNldF94ZW5fYmFzaWNfYXBpY19vcHMoKTsKICNlbmRpZgogCiAJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfbW11X3B0X3VwZGF0ZV9wcmVzZXJ2ZV9hZCkpIHsKQEAgLTE2NTAsMTAgKzkxMiwxOCBAQAogCW1hY2hpbmVfb3BzID0geGVuX21hY2hpbmVfb3BzOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qIERpc2FibGUgdW50aWwgZGlyZWN0IHBlci1jcHUgZGF0YSBhY2Nlc3MuICovCi0JaGF2ZV92Y3B1X2luZm9fcGxhY2VtZW50ID0gMDsKLQl4ODZfNjRfaW5pdF9wZGEoKTsKKwkvKgorCSAqIFNldHVwIHBlcmNwdSBzdGF0ZS4gIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGZvciA2NC1iaXQKKwkgKiBiZWNhdXNlIDMyLWJpdCBhbHJlYWR5IGhhcyAlZnMgc2V0IHByb3Blcmx5LgorCSAqLworCWxvYWRfcGVyY3B1X3NlZ21lbnQoMCk7CiAjZW5kaWYKKwkvKgorCSAqIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byByZXRhaW4gdGhlIGluaXRpYWwgYWRkcmVzcyBvZiB0aGUKKwkgKiBwZXJjcHUgZ2R0X3BhZ2UgaXMgdG8gcmVtZW1iZXIgaXQgaGVyZSwgc28gd2UgY2FuIGdvIGFuZAorCSAqIG1hcmsgaXQgUlcgbGF0ZXIsIHdoZW4gdGhlIGluaXRpYWwgcGVyY3B1IGFyZWEgaXMgZnJlZWQuCisJICovCisJeGVuX2luaXRpYWxfZ2R0ID0gJnBlcl9jcHUoZ2R0X3BhZ2UsIDApOwogCiAJeGVuX3NtcF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9pcnEuYyBiL2FyY2gveDg2L3hlbi9pcnEuYwppbmRleCBiYjA0MjYwLi5jZmQxNzc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vaXJxLmMKKysrIGIvYXJjaC94ODYveGVuL2lycS5jCkBAIC0xOSwyNyArMTksMTIgQEAKIAkodm9pZClIWVBFUlZJU09SX3hlbl92ZXJzaW9uKDAsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX194ZW5faW5pdF9JUlEodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIENyZWF0ZSBpZGVudGl0eSB2ZWN0b3ItPmlycSBtYXAgKi8KLQlmb3IoaSA9IDA7IGkgPCBOUl9WRUNUT1JTOyBpKyspIHsKLQkJaW50IGNwdTsKLQotCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW2ldID0gaTsKLQl9Ci0KLQl4ZW5faW5pdF9JUlEoKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX3NhdmVfZmwodm9pZCkKIHsKIAlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl2Y3B1ID0geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1KTsKKwl2Y3B1ID0gcGVyY3B1X3JlYWQoeGVuX3ZjcHUpOwogCiAJLyogZmxhZyBoYXMgb3Bwb3NpdGUgc2Vuc2Ugb2YgbWFzayAqLwogCWZsYWdzID0gIXZjcHUtPmV2dGNobl91cGNhbGxfbWFzazsKQEAgLTUwLDYgKzM1LDcgQEAKIAkqLwogCXJldHVybiAoLWZsYWdzKSAmIFg4Nl9FRkxBR1NfSUY7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9zYXZlX2ZsKTsKIAogc3RhdGljIHZvaWQgeGVuX3Jlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTYyLDcgKzQ4LDcgQEAKIAkgICBtYWtlIHN1cmUgd2UncmUgZG9uJ3Qgc3dpdGNoIENQVXMgYmV0d2VlbiBnZXR0aW5nIHRoZSB2Y3B1CiAJICAgcG9pbnRlciBhbmQgdXBkYXRpbmcgdGhlIG1hc2suICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JdmNwdSA9IHg4Nl9yZWFkX3BlcmNwdSh4ZW5fdmNwdSk7CisJdmNwdSA9IHBlcmNwdV9yZWFkKHhlbl92Y3B1KTsKIAl2Y3B1LT5ldnRjaG5fdXBjYWxsX21hc2sgPSBmbGFnczsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAKQEAgLTc2LDYgKzYyLDcgQEAKIAkJCXhlbl9mb3JjZV9ldnRjaG5fY2FsbGJhY2soKTsKIAl9CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9yZXN0b3JlX2ZsKTsKIAogc3RhdGljIHZvaWQgeGVuX2lycV9kaXNhYmxlKHZvaWQpCiB7CkBAIC04Myw5ICs3MCwxMCBAQAogCSAgIG1ha2Ugc3VyZSB3ZSdyZSBkb24ndCBzd2l0Y2ggQ1BVcyBiZXR3ZWVuIGdldHRpbmcgdGhlIHZjcHUKIAkgICBwb2ludGVyIGFuZCB1cGRhdGluZyB0aGUgbWFzay4gKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQl4ODZfcmVhZF9wZXJjcHUoeGVuX3ZjcHUpLT5ldnRjaG5fdXBjYWxsX21hc2sgPSAxOworCXBlcmNwdV9yZWFkKHhlbl92Y3B1KS0+ZXZ0Y2huX3VwY2FsbF9tYXNrID0gMTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9pcnFfZGlzYWJsZSk7CiAKIHN0YXRpYyB2b2lkIHhlbl9pcnFfZW5hYmxlKHZvaWQpCiB7CkBAIC05Niw3ICs4NCw3IEBACiAJICAgdGhlIGNhbGxlciBpcyBjb25mdXNlZCBhbmQgaXMgdHJ5aW5nIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzCiAJICAgb24gYW4gaW5kZXRlcm1pbmF0ZSBwcm9jZXNzb3IuICovCiAKLQl2Y3B1ID0geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1KTsKKwl2Y3B1ID0gcGVyY3B1X3JlYWQoeGVuX3ZjcHUpOwogCXZjcHUtPmV2dGNobl91cGNhbGxfbWFzayA9IDA7CiAKIAkvKiBEb2Vzbid0IG1hdHRlciBpZiB3ZSBnZXQgcHJlZW1wdGVkIGhlcmUsIGJlY2F1c2UgYW55CkBAIC0xMDYsNiArOTQsNyBAQAogCWlmICh1bmxpa2VseSh2Y3B1LT5ldnRjaG5fdXBjYWxsX3BlbmRpbmcpKQogCQl4ZW5fZm9yY2VfZXZ0Y2huX2NhbGxiYWNrKCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9pcnFfZW5hYmxlKTsKIAogc3RhdGljIHZvaWQgeGVuX3NhZmVfaGFsdCh2b2lkKQogewpAQCAtMTIzLDExICsxMTIsMTMgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pcnFfb3BzIHhlbl9pcnFfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLmluaXRfSVJRID0gX194ZW5faW5pdF9JUlEsCi0JLnNhdmVfZmwgPSB4ZW5fc2F2ZV9mbCwKLQkucmVzdG9yZV9mbCA9IHhlbl9yZXN0b3JlX2ZsLAotCS5pcnFfZGlzYWJsZSA9IHhlbl9pcnFfZGlzYWJsZSwKLQkuaXJxX2VuYWJsZSA9IHhlbl9pcnFfZW5hYmxlLAorCS5pbml0X0lSUSA9IHhlbl9pbml0X0lSUSwKKworCS5zYXZlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3NhdmVfZmwpLAorCS5yZXN0b3JlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3Jlc3RvcmVfZmwpLAorCS5pcnFfZGlzYWJsZSA9IFBWX0NBTExFRV9TQVZFKHhlbl9pcnFfZGlzYWJsZSksCisJLmlycV9lbmFibGUgPSBQVl9DQUxMRUVfU0FWRSh4ZW5faXJxX2VuYWJsZSksCisKIAkuc2FmZV9oYWx0ID0geGVuX3NhZmVfaGFsdCwKIAkuaGFsdCA9IHhlbl9oYWx0LAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCA1MDNjMjQwLi5jYjZhZmE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9saW5rYWdlLmg+CiAKQEAgLTU1LDYgKzU2LDggQEAKIAogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDx4ZW4vaHZjLWNvbnNvbGUuaD4KIAogI2luY2x1ZGUgIm11bHRpY2FsbHMuaCIKICNpbmNsdWRlICJtbXUuaCIKQEAgLTExNCw2ICsxMTcsMzcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19YRU5fREVCVUdfRlMgKi8KIAorCisvKgorICogSWRlbnRpdHkgbWFwLCBpbiBhZGRpdGlvbiB0byBwbGFpbiBrZXJuZWwgbWFwLiAgVGhpcyBuZWVkcyB0byBiZQorICogbGFyZ2UgZW5vdWdoIHRvIGFsbG9jYXRlIHBhZ2UgdGFibGUgcGFnZXMgdG8gYWxsb2NhdGUgdGhlIHJlc3QuCisgKiBFYWNoIHBhZ2UgY2FuIG1hcCAyTUIuCisgKi8KK3N0YXRpYyBwdGVfdCBsZXZlbDFfaWRlbnRfcGd0W1BUUlNfUEVSX1BURSAqIDRdIF9fcGFnZV9hbGlnbmVkX2JzczsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qIGwzIHB1ZCBmb3IgdXNlcnNwYWNlIHZzeXNjYWxsIG1hcHBpbmcgKi8KK3N0YXRpYyBwdWRfdCBsZXZlbDNfdXNlcl92c3lzY2FsbFtQVFJTX1BFUl9QVURdIF9fcGFnZV9hbGlnbmVkX2JzczsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBOb3RlIGFib3V0IGNyMyAocGFnZXRhYmxlIGJhc2UpIHZhbHVlczoKKyAqCisgKiB4ZW5fY3IzIGNvbnRhaW5zIHRoZSBjdXJyZW50IGxvZ2ljYWwgY3IzIHZhbHVlOyBpdCBjb250YWlucyB0aGUKKyAqIGxhc3Qgc2V0IGNyMy4gIFRoaXMgbWF5IG5vdCBiZSB0aGUgY3VycmVudCBlZmZlY3RpdmUgY3IzLCBiZWNhdXNlCisgKiBpdHMgdXBkYXRlIG1heSBiZSBiZWluZyBsYXppbHkgZGVmZXJyZWQuICBIb3dldmVyLCBhIHZjcHUgbG9va2luZworICogYXQgaXRzIG93biBjcjMgY2FuIHVzZSB0aGlzIHZhbHVlIGtub3dpbmcgdGhhdCBpdCBldmVyeXRoaW5nIHdpbGwKKyAqIGJlIHNlbGYtY29uc2lzdGVudC4KKyAqCisgKiB4ZW5fY3VycmVudF9jcjMgY29udGFpbnMgdGhlIGFjdHVhbCB2Y3B1IGNyMzsgaXQgaXMgc2V0IG9uY2UgdGhlCisgKiBoeXBlcmNhbGwgdG8gc2V0IHRoZSB2Y3B1IGNyMyBpcyBjb21wbGV0ZSAoc28gaXQgbWF5IGJlIGEgbGl0dGxlCisgKiBvdXQgb2YgZGF0ZSwgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgc2V0IGVhcmx5KS4gIElmIG9uZSB2Y3B1IGlzCisgKiBsb29raW5nIGF0IGFub3RoZXIgdmNwdSdzIGNyMyB2YWx1ZSwgaXQgc2hvdWxkIHVzZSB0aGlzIHZhcmlhYmxlLgorICovCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB4ZW5fY3IzKTsJIC8qIGNyMyBzdG9yZWQgYXMgcGh5c2FkZHIgKi8KK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jdXJyZW50X2NyMyk7CSAvKiBhY3R1YWwgdmNwdSBjcjMgKi8KKworCiAvKgogICogSnVzdCBiZXlvbmQgdGhlIGhpZ2hlc3QgdXNlcm1vZGUgYWRkcmVzcy4gIFNUQUNLX1RPUF9NQVggaGFzIGEKICAqIHJlZHpvbmUgYWJvdmUgaXQsIHNvIHJvdW5kIGl0IHVwIHRvIGEgUEdEIGJvdW5kYXJ5LgpAQCAtMjQyLDYgKzI3NiwxMyBAQAogCXAybV90b3BbdG9waWR4XVtpZHhdID0gbWZuOwogfQogCit1bnNpZ25lZCBsb25nIGFyYml0cmFyeV92aXJ0X3RvX21mbih2b2lkICp2YWRkcikKK3sKKwl4bWFkZHJfdCBtYWRkciA9IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUodmFkZHIpOworCisJcmV0dXJuIFBGTl9ET1dOKG1hZGRyLm1hZGRyKTsKK30KKwogeG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICp2YWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKQEAgLTQ1OCwyOCArNDk5LDMzIEBACiB7CiAJcmV0dXJuIHB0ZV9tZm5fdG9fcGZuKHB0ZS5wdGUpOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh4ZW5fcHRlX3ZhbCk7CiAKIHBnZHZhbF90IHhlbl9wZ2RfdmFsKHBnZF90IHBnZCkKIHsKIAlyZXR1cm4gcHRlX21mbl90b19wZm4ocGdkLnBnZCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9wZ2RfdmFsKTsKIAogcHRlX3QgeGVuX21ha2VfcHRlKHB0ZXZhbF90IHB0ZSkKIHsKIAlwdGUgPSBwdGVfcGZuX3RvX21mbihwdGUpOwogCXJldHVybiBuYXRpdmVfbWFrZV9wdGUocHRlKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX21ha2VfcHRlKTsKIAogcGdkX3QgeGVuX21ha2VfcGdkKHBnZHZhbF90IHBnZCkKIHsKIAlwZ2QgPSBwdGVfcGZuX3RvX21mbihwZ2QpOwogCXJldHVybiBuYXRpdmVfbWFrZV9wZ2QocGdkKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX21ha2VfcGdkKTsKIAogcG1kdmFsX3QgeGVuX3BtZF92YWwocG1kX3QgcG1kKQogewogCXJldHVybiBwdGVfbWZuX3RvX3BmbihwbWQucG1kKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX3BtZF92YWwpOwogCiB2b2lkIHhlbl9zZXRfcHVkX2h5cGVyKHB1ZF90ICpwdHIsIHB1ZF90IHZhbCkKIHsKQEAgLTU1NiwxMiArNjAyLDE0IEBACiAJcG1kID0gcHRlX3Bmbl90b19tZm4ocG1kKTsKIAlyZXR1cm4gbmF0aXZlX21ha2VfcG1kKHBtZCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9tYWtlX3BtZCk7CiAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKIHB1ZHZhbF90IHhlbl9wdWRfdmFsKHB1ZF90IHB1ZCkKIHsKIAlyZXR1cm4gcHRlX21mbl90b19wZm4ocHVkLnB1ZCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9wdWRfdmFsKTsKIAogcHVkX3QgeGVuX21ha2VfcHVkKHB1ZHZhbF90IHB1ZCkKIHsKQEAgLTU2OSw2ICs2MTcsNyBAQAogCiAJcmV0dXJuIG5hdGl2ZV9tYWtlX3B1ZChwdWQpOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh4ZW5fbWFrZV9wdWQpOwogCiBwZ2RfdCAqeGVuX2dldF91c2VyX3BnZChwZ2RfdCAqcGdkKQogewpAQCAtMTA2MywxOCArMTExMiwxNCBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gaW5mbzsKIAlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYWN0aXZlX21tID0gcmVhZF9wZGEoYWN0aXZlX21tKTsKLSNlbHNlCi0JYWN0aXZlX21tID0gX19nZXRfY3B1X3ZhcihjcHVfdGxic3RhdGUpLmFjdGl2ZV9tbTsKLSNlbmRpZgorCWFjdGl2ZV9tbSA9IHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0pOwogCiAJaWYgKGFjdGl2ZV9tbSA9PSBtbSkKIAkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIElmIHRoaXMgY3B1IHN0aWxsIGhhcyBhIHN0YWxlIGNyMyByZWZlcmVuY2UsIHRoZW4gbWFrZSBzdXJlCiAJICAgaXQgaGFzIGJlZW4gZmx1c2hlZC4gKi8KLQlpZiAoeDg2X3JlYWRfcGVyY3B1KHhlbl9jdXJyZW50X2NyMykgPT0gX19wYShtbS0+cGdkKSkgeworCWlmIChwZXJjcHVfcmVhZCh4ZW5fY3VycmVudF9jcjMpID09IF9fcGEobW0tPnBnZCkpIHsKIAkJbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIpOwogCQlhcmNoX2ZsdXNoX2xhenlfY3B1X21vZGUoKTsKIAl9CkBAIC0xMTU2LDYgKzEyMDEsNzA2IEBACiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogfQogCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkKK3sKK30KKworc3RhdGljIF9faW5pdCB2b2lkIHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKK3sKKwl4ZW5fc2V0dXBfc2hhcmVkX2luZm8oKTsKK30KKworc3RhdGljIHZvaWQgeGVuX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIGNyMikKK3sKKwlwZXJjcHVfcmVhZCh4ZW5fdmNwdSktPmFyY2guY3IyID0gY3IyOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjIodm9pZCkKK3sKKwlyZXR1cm4gcGVyY3B1X3JlYWQoeGVuX3ZjcHUpLT5hcmNoLmNyMjsKK30KKwordW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjJfZGlyZWN0KHZvaWQpCit7CisJcmV0dXJuIHBlcmNwdV9yZWFkKHhlbl92Y3B1X2luZm8uYXJjaC5jcjIpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fZmx1c2hfdGxiKHZvaWQpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCW1jcyA9IHhlbl9tY19lbnRyeShzaXplb2YoKm9wKSk7CisKKwlvcCA9IG1jcy5hcmdzOworCW9wLT5jbWQgPSBNTVVFWFRfVExCX0ZMVVNIX0xPQ0FMOworCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKKworCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fZmx1c2hfdGxiX3NpbmdsZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCW1jcyA9IHhlbl9tY19lbnRyeShzaXplb2YoKm9wKSk7CisJb3AgPSBtY3MuYXJnczsKKwlvcC0+Y21kID0gTU1VRVhUX0lOVkxQR19MT0NBTDsKKwlvcC0+YXJnMS5saW5lYXJfYWRkciA9IGFkZHIgJiBQQUdFX01BU0s7CisJTVVMVElfbW11ZXh0X29wKG1jcy5tYywgb3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpOworCisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfTU1VKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAorCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YSkKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbW11ZXh0X29wIG9wOworCQlERUNMQVJFX0JJVE1BUChtYXNrLCBOUl9DUFVTKTsKKwl9ICphcmdzOworCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOworCisJQlVHX09OKGNwdW1hc2tfZW1wdHkoY3B1cykpOworCUJVR19PTighbW0pOworCisJbWNzID0geGVuX21jX2VudHJ5KHNpemVvZigqYXJncykpOworCWFyZ3MgPSBtY3MuYXJnczsKKwlhcmdzLT5vcC5hcmcyLnZjcHVtYXNrID0gdG9fY3B1bWFzayhhcmdzLT5tYXNrKTsKKworCS8qIFJlbW92ZSB1cywgYW5kIGFueSBvZmZsaW5lIENQVVMuICovCisJY3B1bWFza19hbmQodG9fY3B1bWFzayhhcmdzLT5tYXNrKSwgY3B1cywgY3B1X29ubGluZV9tYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIHRvX2NwdW1hc2soYXJncy0+bWFzaykpOworCisJaWYgKHZhID09IFRMQl9GTFVTSF9BTEwpIHsKKwkJYXJncy0+b3AuY21kID0gTU1VRVhUX1RMQl9GTFVTSF9NVUxUSTsKKwl9IGVsc2UgeworCQlhcmdzLT5vcC5jbWQgPSBNTVVFWFRfSU5WTFBHX01VTFRJOworCQlhcmdzLT5vcC5hcmcxLmxpbmVhcl9hZGRyID0gdmE7CisJfQorCisJTVVMVElfbW11ZXh0X29wKG1jcy5tYywgJmFyZ3MtPm9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKKworCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9yZWFkX2NyMyh2b2lkKQoreworCXJldHVybiBwZXJjcHVfcmVhZCh4ZW5fY3IzKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2N1cnJlbnRfY3IzKHZvaWQgKnYpCit7CisJcGVyY3B1X3dyaXRlKHhlbl9jdXJyZW50X2NyMywgKHVuc2lnbmVkIGxvbmcpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9feGVuX3dyaXRlX2NyMyhib29sIGtlcm5lbCwgdW5zaWduZWQgbG9uZyBjcjMpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisJdW5zaWduZWQgbG9uZyBtZm47CisKKwlpZiAoY3IzKQorCQltZm4gPSBwZm5fdG9fbWZuKFBGTl9ET1dOKGNyMykpOworCWVsc2UKKwkJbWZuID0gMDsKKworCVdBUk5fT04obWZuID09IDAgJiYga2VybmVsKTsKKworCW1jcyA9IF9feGVuX21jX2VudHJ5KHNpemVvZigqb3ApKTsKKworCW9wID0gbWNzLmFyZ3M7CisJb3AtPmNtZCA9IGtlcm5lbCA/IE1NVUVYVF9ORVdfQkFTRVBUUiA6IE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSOworCW9wLT5hcmcxLm1mbiA9IG1mbjsKKworCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKKworCWlmIChrZXJuZWwpIHsKKwkJcGVyY3B1X3dyaXRlKHhlbl9jcjMsIGNyMyk7CisKKwkJLyogVXBkYXRlIHhlbl9jdXJyZW50X2NyMyBvbmNlIHRoZSBiYXRjaCBoYXMgYWN0dWFsbHkKKwkJICAgYmVlbiBzdWJtaXR0ZWQuICovCisJCXhlbl9tY19jYWxsYmFjayhzZXRfY3VycmVudF9jcjMsICh2b2lkICopY3IzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl93cml0ZV9jcjModW5zaWduZWQgbG9uZyBjcjMpCit7CisJQlVHX09OKHByZWVtcHRpYmxlKCkpOworCisJeGVuX21jX2JhdGNoKCk7ICAvKiBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCisKKwkvKiBVcGRhdGUgd2hpbGUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIGl0cyBhdG9taWMgd2l0aAorCSAgIHJlc3BlY3QgdG8gaXBpcyAqLworCXBlcmNwdV93cml0ZSh4ZW5fY3IzLCBjcjMpOworCisJX194ZW5fd3JpdGVfY3IzKHRydWUsIGNyMyk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJeworCQlwZ2RfdCAqdXNlcl9wZ2QgPSB4ZW5fZ2V0X3VzZXJfcGdkKF9fdmEoY3IzKSk7CisJCWlmICh1c2VyX3BnZCkKKwkJCV9feGVuX3dyaXRlX2NyMyhmYWxzZSwgX19wYSh1c2VyX3BnZCkpOworCQllbHNlCisJCQlfX3hlbl93cml0ZV9jcjMoZmFsc2UsIDApOworCX0KKyNlbmRpZgorCisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsgIC8qIGludGVycnVwdHMgcmVzdG9yZWQgKi8KK30KKworc3RhdGljIGludCB4ZW5fcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBnZF90ICpwZ2QgPSBtbS0+cGdkOworCWludCByZXQgPSAwOworCisJQlVHX09OKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKHBnZCkpKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwl7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBnZCk7CisJCXBnZF90ICp1c2VyX3BnZDsKKworCQlCVUdfT04ocGFnZS0+cHJpdmF0ZSAhPSAwKTsKKworCQlyZXQgPSAtRU5PTUVNOworCisJCXVzZXJfcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXVzZXJfcGdkOworCisJCWlmICh1c2VyX3BnZCAhPSBOVUxMKSB7CisJCQl1c2VyX3BnZFtwZ2RfaW5kZXgoVlNZU0NBTExfU1RBUlQpXSA9CisJCQkJX19wZ2QoX19wYShsZXZlbDNfdXNlcl92c3lzY2FsbCkgfCBfUEFHRV9UQUJMRSk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJQlVHX09OKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKHhlbl9nZXRfdXNlcl9wZ2QocGdkKSkpKTsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9wZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcGdkX3QgKnVzZXJfcGdkID0geGVuX2dldF91c2VyX3BnZChwZ2QpOworCisJaWYgKHVzZXJfcGdkKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdXNlcl9wZ2QpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfSElHSFBURQorc3RhdGljIHZvaWQgKnhlbl9rbWFwX2F0b21pY19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKQoreworCXBncHJvdF90IHByb3QgPSBQQUdFX0tFUk5FTDsKKworCWlmIChQYWdlUGlubmVkKHBhZ2UpKQorCQlwcm90ID0gUEFHRV9LRVJORUxfUk87CisKKwlpZiAoMCAmJiBQYWdlSGlnaE1lbShwYWdlKSkKKwkJcHJpbnRrKCJtYXBwaW5nIGhpZ2hwdGUgJWx4IHR5cGUgJWQgcHJvdCAlc1xuIiwKKwkJICAgICAgIHBhZ2VfdG9fcGZuKHBhZ2UpLCB0eXBlLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1JXID8gIldSSVRFIiA6ICJSRUFEIik7CisKKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdChwYWdlLCB0eXBlLCBwcm90KTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorc3RhdGljIF9faW5pdCBwdGVfdCBtYXNrX3J3X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCS8qIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHRlLCB0aGVuIGRvbid0IGFsbG93IF9QQUdFX1JXIHRvIGJlIHNldCAqLworCWlmIChwdGVfdmFsX21hKCpwdGVwKSAmIF9QQUdFX1BSRVNFTlQpCisJCXB0ZSA9IF9fcHRlX21hKCgocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9SVykgfCB+X1BBR0VfUlcpICYKKwkJCSAgICAgICBwdGVfdmFsX21hKHB0ZSkpOworCisJcmV0dXJuIHB0ZTsKK30KKworLyogSW5pdC10aW1lIHNldF9wdGUgd2hpbGUgY29uc3RydWN0aW5nIGluaXRpYWwgcGFnZXRhYmxlcywgd2hpY2gKKyAgIGRvZXNuJ3QgYWxsb3cgUk8gcGFnZXRhYmxlIHBhZ2VzIHRvIGJlIHJlbWFwcGVkIFJXICovCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX3NldF9wdGVfaW5pdChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXB0ZSA9IG1hc2tfcndfcHRlKHB0ZXAsIHB0ZSk7CisKKwl4ZW5fc2V0X3B0ZShwdGVwLCBwdGUpOworfQorI2VuZGlmCisKKy8qIEVhcmx5IGluIGJvb3QsIHdoaWxlIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgcGFnZXRhYmxlLCBhc3N1bWUKKyAgIGV2ZXJ5dGhpbmcgaXMgcGlubmVkLiAqLworc3RhdGljIF9faW5pdCB2b2lkIHhlbl9hbGxvY19wdGVfaW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKwlCVUdfT04obWVtX21hcCk7CS8qIHNob3VsZCBvbmx5IGJlIHVzZWQgZWFybHkgKi8KKyNlbmRpZgorCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoX192YShQRk5fUEhZUyhwZm4pKSk7Cit9CisKKy8qIEVhcmx5IHJlbGVhc2VfcHRlIGFzc3VtZXMgdGhhdCBhbGwgcHRzIGFyZSBwaW5uZWQsIHNpbmNlIHRoZXJlJ3MKKyAgIG9ubHkgaW5pdF9tbSBhbmQgYW55dGhpbmcgYXR0YWNoZWQgdG8gdGhhdCBpcyBwaW5uZWQuICovCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdGVfaW5pdCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwltYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZShfX3ZhKFBGTl9QSFlTKHBmbikpKTsKK30KKworc3RhdGljIHZvaWQgcGluX3BhZ2V0YWJsZV9wZm4odW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgbW11ZXh0X29wIG9wOworCW9wLmNtZCA9IGNtZDsKKwlvcC5hcmcxLm1mbiA9IHBmbl90b19tZm4ocGZuKTsKKwlpZiAoSFlQRVJWSVNPUl9tbXVleHRfb3AoJm9wLCAxLCBOVUxMLCBET01JRF9TRUxGKSkKKwkJQlVHKCk7Cit9CisKKy8qIFRoaXMgbmVlZHMgdG8gbWFrZSBzdXJlIHRoZSBuZXcgcHRlIHBhZ2UgaXMgcGlubmVkIGlmZiBpdHMgYmVpbmcKKyAgIGF0dGFjaGVkIHRvIGEgcGlubmVkIHBhZ2V0YWJsZS4gKi8KK3N0YXRpYyB2b2lkIHhlbl9hbGxvY19wdHBhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsZXZlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKKwlpZiAoUGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UobW0tPnBnZCkpKSB7CisJCVNldFBhZ2VQaW5uZWQocGFnZSk7CisKKwkJdm1fdW5tYXBfYWxpYXNlcygpOworCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCQltYWtlX2xvd21lbV9wYWdlX3JlYWRvbmx5KF9fdmEoUEZOX1BIWVMoKHVuc2lnbmVkIGxvbmcpcGZuKSkpOworCQkJaWYgKGxldmVsID09IFBUX1BURSAmJiBVU0VfU1BMSVRfUFRMT0NLUykKKwkJCQlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfUElOX0wxX1RBQkxFLCBwZm4pOworCQl9IGVsc2UgeworCQkJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdHJheSBtYXBwaW5ncyBvZgorCQkJICAgdGhpcyBwYWdlICovCisJCQlrbWFwX2ZsdXNoX3VudXNlZCgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB4ZW5fYWxsb2NfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl4ZW5fYWxsb2NfcHRwYWdlKG1tLCBwZm4sIFBUX1BURSk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9hbGxvY19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgUFRfUE1EKTsKK30KKworLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHVudGlsIHdlJ3JlIE9LIHRvIHVzZSBzdHJ1Y3QgcGFnZSAqLworc3RhdGljIHZvaWQgeGVuX3JlbGVhc2VfcHRwYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsZXZlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKKwlpZiAoUGFnZVBpbm5lZChwYWdlKSkgeworCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCQlpZiAobGV2ZWwgPT0gUFRfUFRFICYmIFVTRV9TUExJVF9QVExPQ0tTKQorCQkJCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgcGZuKTsKKwkJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOworCQl9CisJCUNsZWFyUGFnZVBpbm5lZChwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0ZSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl4ZW5fcmVsZWFzZV9wdHBhZ2UocGZuLCBQVF9QVEUpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wbWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUE1EKTsKK30KKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAorc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisJeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QVUQpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUFVEKTsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV90b3Aodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJdW5zaWduZWQgbG9uZyB0b3AgPSBIWVBFUlZJU09SX1ZJUlRfU1RBUlQ7CisJc3RydWN0IHhlbl9wbGF0Zm9ybV9wYXJhbWV0ZXJzIHBwOworCisJaWYgKEhZUEVSVklTT1JfeGVuX3ZlcnNpb24oWEVOVkVSX3BsYXRmb3JtX3BhcmFtZXRlcnMsICZwcCkgPT0gMCkKKwkJdG9wID0gcHAudmlydF9zdGFydDsKKworCXJlc2VydmVfdG9wX2FkZHJlc3MoLXRvcCk7CisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLworfQorCisvKgorICogTGlrZSBfX3ZhKCksIGJ1dCByZXR1cm5zIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBtYXBwaW5nICh3aGljaCBpcworICogYWxsIHdlIGhhdmUgdW50aWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nIGhhcyBiZWVuIHNldCB1cC4KKyAqLworc3RhdGljIHZvaWQgKl9fa2EocGh5c19hZGRyX3QgcGFkZHIpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJldHVybiAodm9pZCAqKShwYWRkciArIF9fU1RBUlRfS0VSTkVMX21hcCk7CisjZWxzZQorCXJldHVybiBfX3ZhKHBhZGRyKTsKKyNlbmRpZgorfQorCisvKiBDb252ZXJ0IGEgbWFjaGluZSBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG0ycChwaHlzX2FkZHJfdCBtYWRkcikKK3sKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKworCW1hZGRyICY9IFBURV9QRk5fTUFTSzsKKwlwYWRkciA9IG1mbl90b19wZm4obWFkZHIgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVDsKKworCXJldHVybiBwYWRkcjsKK30KKworLyogQ29udmVydCBhIG1hY2hpbmUgYWRkcmVzcyB0byBrZXJuZWwgdmlydHVhbCAqLworc3RhdGljIHZvaWQgKm0ydihwaHlzX2FkZHJfdCBtYWRkcikKK3sKKwlyZXR1cm4gX19rYShtMnAobWFkZHIpKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3BhZ2VfcHJvdCh2b2lkICphZGRyLCBwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gX19wYShhZGRyKSA+PiBQQUdFX1NISUZUOworCXB0ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKKworCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKWFkZHIsIHB0ZSwgMCkpCisJCUJVRygpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX21hcF9pZGVudGl0eV9lYXJseShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIG1heF9wZm4pCit7CisJdW5zaWduZWQgcG1kaWR4LCBwdGVpZHg7CisJdW5zaWduZWQgaWRlbnRfcHRlOworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJaWRlbnRfcHRlID0gMDsKKwlwZm4gPSAwOworCWZvciAocG1kaWR4ID0gMDsgcG1kaWR4IDwgUFRSU19QRVJfUE1EICYmIHBmbiA8IG1heF9wZm47IHBtZGlkeCsrKSB7CisJCXB0ZV90ICpwdGVfcGFnZTsKKworCQkvKiBSZXVzZSBvciBhbGxvY2F0ZSBhIHBhZ2Ugb2YgcHRlcyAqLworCQlpZiAocG1kX3ByZXNlbnQocG1kW3BtZGlkeF0pKQorCQkJcHRlX3BhZ2UgPSBtMnYocG1kW3BtZGlkeF0ucG1kKTsKKwkJZWxzZSB7CisJCQkvKiBDaGVjayBmb3IgZnJlZSBwdGUgcGFnZXMgKi8KKwkJCWlmIChpZGVudF9wdGUgPT0gQVJSQVlfU0laRShsZXZlbDFfaWRlbnRfcGd0KSkKKwkJCQlicmVhazsKKworCQkJcHRlX3BhZ2UgPSAmbGV2ZWwxX2lkZW50X3BndFtpZGVudF9wdGVdOworCQkJaWRlbnRfcHRlICs9IFBUUlNfUEVSX1BURTsKKworCQkJcG1kW3BtZGlkeF0gPSBfX3BtZChfX3BhKHB0ZV9wYWdlKSB8IF9QQUdFX1RBQkxFKTsKKwkJfQorCisJCS8qIEluc3RhbGwgbWFwcGluZ3MgKi8KKwkJZm9yIChwdGVpZHggPSAwOyBwdGVpZHggPCBQVFJTX1BFUl9QVEU7IHB0ZWlkeCsrLCBwZm4rKykgeworCQkJcHRlX3QgcHRlOworCisJCQlpZiAocGZuID4gbWF4X3Bmbl9tYXBwZWQpCisJCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47CisKKwkJCWlmICghcHRlX25vbmUocHRlX3BhZ2VbcHRlaWR4XSkpCisJCQkJY29udGludWU7CisKKwkJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTF9FWEVDKTsKKwkJCXB0ZV9wYWdlW3B0ZWlkeF0gPSBwdGU7CisJCX0KKwl9CisKKwlmb3IgKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IGlkZW50X3B0ZTsgcHRlaWR4ICs9IFBUUlNfUEVSX1BURSkKKwkJc2V0X3BhZ2VfcHJvdCgmbGV2ZWwxX2lkZW50X3BndFtwdGVpZHhdLCBQQUdFX0tFUk5FTF9STyk7CisKKwlzZXRfcGFnZV9wcm90KHBtZCwgUEFHRV9LRVJORUxfUk8pOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIHZvaWQgY29udmVydF9wZm5fbWZuKHZvaWQgKnYpCit7CisJcHRlX3QgKnB0ZSA9IHY7CisJaW50IGk7CisKKwkvKiBBbGwgbGV2ZWxzIGFyZSBjb252ZXJ0ZWQgdGhlIHNhbWUgd2F5LCBzbyBqdXN0IHRyZWF0IHRoZW0KKwkgICBhcyBwdGVzLiAqLworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykKKwkJcHRlW2ldID0geGVuX21ha2VfcHRlKHB0ZVtpXS5wdGUpOworfQorCisvKgorICogU2V0IHVwIHRoZSBpbml0YWwga2VybmVsIHBhZ2V0YWJsZS4KKyAqCisgKiBXZSBjYW4gY29uc3RydWN0IHRoaXMgYnkgZ3JhZnRpbmcgdGhlIFhlbiBwcm92aWRlZCBwYWdldGFibGUgaW50bworICogaGVhZF82NC5TJ3MgcHJlY29uc3RydWN0ZWQgcGFnZXRhYmxlcy4gIFdlIGNvcHkgdGhlIFhlbiBMMidzIGludG8KKyAqIGxldmVsMl9pZGVudF9wZ3QsIGxldmVsMl9rZXJuZWxfcGd0IGFuZCBsZXZlbDJfZml4bWFwX3BndC4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgb25seSB0aGUga2VybmVsIGhhcyBhIHBoeXNpY2FsIG1hcHBpbmcgdG8gc3RhcnQgd2l0aCAtCisgKiBidXQgdGhhdCdzIGVub3VnaCB0byBnZXQgX192YSB3b3JraW5nLiAgV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZXN0CisgKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0CisgKiB1cC4KKyAqLworX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAorCQkJCQkgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQoreworCXB1ZF90ICpsMzsKKwlwbWRfdCAqbDI7CisKKwkvKiBaYXAgaWRlbnRpdHkgbWFwcGluZyAqLworCWluaXRfbGV2ZWw0X3BndFswXSA9IF9fcGdkKDApOworCisJLyogUHJlLWNvbnN0cnVjdGVkIGVudHJpZXMgYXJlIGluIHBmbiwgc28gY29udmVydCB0byBtZm4gKi8KKwljb252ZXJ0X3Bmbl9tZm4oaW5pdF9sZXZlbDRfcGd0KTsKKwljb252ZXJ0X3Bmbl9tZm4obGV2ZWwzX2lkZW50X3BndCk7CisJY29udmVydF9wZm5fbWZuKGxldmVsM19rZXJuZWxfcGd0KTsKKworCWwzID0gbTJ2KHBnZFtwZ2RfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0ucGdkKTsKKwlsMiA9IG0ydihsM1twdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0ucHVkKTsKKworCW1lbWNweShsZXZlbDJfaWRlbnRfcGd0LCBsMiwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CisJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBsMiwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CisKKwlsMyA9IG0ydihwZ2RbcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCArIFBNRF9TSVpFKV0ucGdkKTsKKwlsMiA9IG0ydihsM1twdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwICsgUE1EX1NJWkUpXS5wdWQpOworCW1lbWNweShsZXZlbDJfZml4bWFwX3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOworCisJLyogU2V0IHVwIGlkZW50aXR5IG1hcCAqLworCXhlbl9tYXBfaWRlbnRpdHlfZWFybHkobGV2ZWwyX2lkZW50X3BndCwgbWF4X3Bmbik7CisKKwkvKiBNYWtlIHBhZ2V0YWJsZSBwaWVjZXMgUk8gKi8KKwlzZXRfcGFnZV9wcm90KGluaXRfbGV2ZWw0X3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwzX2lkZW50X3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwzX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKwlzZXRfcGFnZV9wcm90KGxldmVsM191c2VyX3ZzeXNjYWxsLCBQQUdFX0tFUk5FTF9STyk7CisJc2V0X3BhZ2VfcHJvdChsZXZlbDJfa2VybmVsX3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwyX2ZpeG1hcF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKworCS8qIFBpbiBkb3duIG5ldyBMNCAqLworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDRfVEFCTEUsCisJCQkgIFBGTl9ET1dOKF9fcGFfc3ltYm9sKGluaXRfbGV2ZWw0X3BndCkpKTsKKworCS8qIFVucGluIFhlbi1wcm92aWRlZCBvbmUgKi8KKwlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfVU5QSU5fVEFCTEUsIFBGTl9ET1dOKF9fcGEocGdkKSkpOworCisJLyogU3dpdGNoIG92ZXIgKi8KKwlwZ2QgPSBpbml0X2xldmVsNF9wZ3Q7CisKKwkvKgorCSAqIEF0IHRoaXMgc3RhZ2UgdGhlcmUgY2FuIGJlIG5vIHVzZXIgcGdkLCBhbmQgbm8gcGFnZQorCSAqIHN0cnVjdHVyZSB0byBhdHRhY2ggaXQgdG8sIHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IHNldCBrZXJuZWwKKwkgKiBwZ2QuCisJICovCisJeGVuX21jX2JhdGNoKCk7CisJX194ZW5fd3JpdGVfY3IzKHRydWUsIF9fcGEocGdkKSk7CisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsKKworCXJlc2VydmVfZWFybHkoX19wYSh4ZW5fc3RhcnRfaW5mby0+cHRfYmFzZSksCisJCSAgICAgIF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UgKworCQkJICAgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcyAqIFBBR0VfU0laRSksCisJCSAgICAgICJYRU4gUEFHRVRBQkxFUyIpOworCisJcmV0dXJuIHBnZDsKK30KKyNlbHNlCS8qICFDT05GSUdfWDg2XzY0ICovCitzdGF0aWMgcG1kX3QgbGV2ZWwyX2tlcm5lbF9wZ3RbUFRSU19QRVJfUE1EXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisKK19faW5pdCBwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKK3sKKwlwbWRfdCAqa2VybmVsX3BtZDsKKworCWluaXRfcGdfdGFibGVzX3N0YXJ0ID0gX19wYShwZ2QpOworCWluaXRfcGdfdGFibGVzX2VuZCA9IF9fcGEocGdkKSArIHhlbl9zdGFydF9pbmZvLT5ucl9wdF9mcmFtZXMqUEFHRV9TSVpFOworCW1heF9wZm5fbWFwcGVkID0gUEZOX0RPV04oaW5pdF9wZ190YWJsZXNfZW5kICsgNTEyKjEwMjQpOworCisJa2VybmVsX3BtZCA9IG0ydihwZ2RbS0VSTkVMX1BHRF9CT1VOREFSWV0ucGdkKTsKKwltZW1jcHkobGV2ZWwyX2tlcm5lbF9wZ3QsIGtlcm5lbF9wbWQsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOworCisJeGVuX21hcF9pZGVudGl0eV9lYXJseShsZXZlbDJfa2VybmVsX3BndCwgbWF4X3Bmbik7CisKKwltZW1jcHkoc3dhcHBlcl9wZ19kaXIsIHBnZCwgc2l6ZW9mKHBnZF90KSAqIFBUUlNfUEVSX1BHRCk7CisJc2V0X3BnZCgmc3dhcHBlcl9wZ19kaXJbS0VSTkVMX1BHRF9CT1VOREFSWV0sCisJCQlfX3BnZChfX3BhKGxldmVsMl9rZXJuZWxfcGd0KSB8IF9QQUdFX1BSRVNFTlQpKTsKKworCXNldF9wYWdlX3Byb3QobGV2ZWwyX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKwlzZXRfcGFnZV9wcm90KHN3YXBwZXJfcGdfZGlyLCBQQUdFX0tFUk5FTF9STyk7CisJc2V0X3BhZ2VfcHJvdChlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfS0VSTkVMX1JPKTsKKworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgUEZOX0RPV04oX19wYShwZ2QpKSk7CisKKwl4ZW5fd3JpdGVfY3IzKF9fcGEoc3dhcHBlcl9wZ19kaXIpKTsKKworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDNfVEFCTEUsIFBGTl9ET1dOKF9fcGEoc3dhcHBlcl9wZ19kaXIpKSk7CisKKwlyZXR1cm4gc3dhcHBlcl9wZ19kaXI7Cit9CisjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCitzdGF0aWMgdm9pZCB4ZW5fc2V0X2ZpeG1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKK3sKKwlwdGVfdCBwdGU7CisKKwlwaHlzID4+PSBQQUdFX1NISUZUOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIEZJWF9CVE1BUF9FTkQgLi4uIEZJWF9CVE1BUF9CRUdJTjoKKyNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCisJY2FzZSBGSVhfRjAwRl9JRFQ6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJY2FzZSBGSVhfV1BfVEVTVDoKKwljYXNlIEZJWF9WRFNPOgorIyBpZmRlZiBDT05GSUdfSElHSE1FTQorCWNhc2UgRklYX0tNQVBfQkVHSU4gLi4uIEZJWF9LTUFQX0VORDoKKyMgZW5kaWYKKyNlbHNlCisJY2FzZSBWU1lTQ0FMTF9MQVNUX1BBR0UgLi4uIFZTWVNDQUxMX0ZJUlNUX1BBR0U6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwljYXNlIEZJWF9BUElDX0JBU0U6CS8qIG1hcHMgZHVtbXkgbG9jYWwgQVBJQyAqLworI2VuZGlmCisJCXB0ZSA9IHBmbl9wdGUocGh5cywgcHJvdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHRlID0gbWZuX3B0ZShwaHlzLCBwcm90KTsKKwkJYnJlYWs7CisJfQorCisJX19uYXRpdmVfc2V0X2ZpeG1hcChpZHgsIHB0ZSk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogUmVwbGljYXRlIGNoYW5nZXMgdG8gbWFwIHRoZSB2c3lzY2FsbCBwYWdlIGludG8gdGhlIHVzZXIKKwkgICBwYWdldGFibGUgdnN5c2NhbGwgbWFwcGluZy4gKi8KKwlpZiAoaWR4ID49IFZTWVNDQUxMX0xBU1RfUEFHRSAmJiBpZHggPD0gVlNZU0NBTExfRklSU1RfUEFHRSkgeworCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19maXhfdG9fdmlydChpZHgpOworCQlzZXRfcHRlX3ZhZGRyX3B1ZChsZXZlbDNfdXNlcl92c3lzY2FsbCwgdmFkZHIsIHB0ZSk7CisJfQorI2VuZGlmCit9CisKK19faW5pdCB2b2lkIHhlbl9wb3N0X2FsbG9jYXRvcl9pbml0KHZvaWQpCit7CisJcHZfbW11X29wcy5zZXRfcHRlID0geGVuX3NldF9wdGU7CisJcHZfbW11X29wcy5zZXRfcG1kID0geGVuX3NldF9wbWQ7CisJcHZfbW11X29wcy5zZXRfcHVkID0geGVuX3NldF9wdWQ7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CisJcHZfbW11X29wcy5zZXRfcGdkID0geGVuX3NldF9wZ2Q7CisjZW5kaWYKKworCS8qIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgcGF0Y2hpbmcgaGFzbid0IGhhcHBlbmVkIHlldAorCSAgICh3aGljaCBpdCBoYXNuJ3QpICovCisJcHZfbW11X29wcy5hbGxvY19wdGUgPSB4ZW5fYWxsb2NfcHRlOworCXB2X21tdV9vcHMuYWxsb2NfcG1kID0geGVuX2FsbG9jX3BtZDsKKwlwdl9tbXVfb3BzLnJlbGVhc2VfcHRlID0geGVuX3JlbGVhc2VfcHRlOworCXB2X21tdV9vcHMucmVsZWFzZV9wbWQgPSB4ZW5fcmVsZWFzZV9wbWQ7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CisJcHZfbW11X29wcy5hbGxvY19wdWQgPSB4ZW5fYWxsb2NfcHVkOworCXB2X21tdV9vcHMucmVsZWFzZV9wdWQgPSB4ZW5fcmVsZWFzZV9wdWQ7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlTZXRQYWdlUGlubmVkKHZpcnRfdG9fcGFnZShsZXZlbDNfdXNlcl92c3lzY2FsbCkpOworI2VuZGlmCisJeGVuX21hcmtfaW5pdF9tbV9waW5uZWQoKTsKK30KKworCitjb25zdCBzdHJ1Y3QgcHZfbW11X29wcyB4ZW5fbW11X29wcyBfX2luaXRkYXRhID0geworCS5wYWdldGFibGVfc2V0dXBfc3RhcnQgPSB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0LAorCS5wYWdldGFibGVfc2V0dXBfZG9uZSA9IHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZSwKKworCS5yZWFkX2NyMiA9IHhlbl9yZWFkX2NyMiwKKwkud3JpdGVfY3IyID0geGVuX3dyaXRlX2NyMiwKKworCS5yZWFkX2NyMyA9IHhlbl9yZWFkX2NyMywKKwkud3JpdGVfY3IzID0geGVuX3dyaXRlX2NyMywKKworCS5mbHVzaF90bGJfdXNlciA9IHhlbl9mbHVzaF90bGIsCisJLmZsdXNoX3RsYl9rZXJuZWwgPSB4ZW5fZmx1c2hfdGxiLAorCS5mbHVzaF90bGJfc2luZ2xlID0geGVuX2ZsdXNoX3RsYl9zaW5nbGUsCisJLmZsdXNoX3RsYl9vdGhlcnMgPSB4ZW5fZmx1c2hfdGxiX290aGVycywKKworCS5wdGVfdXBkYXRlID0gcGFyYXZpcnRfbm9wLAorCS5wdGVfdXBkYXRlX2RlZmVyID0gcGFyYXZpcnRfbm9wLAorCisJLnBnZF9hbGxvYyA9IHhlbl9wZ2RfYWxsb2MsCisJLnBnZF9mcmVlID0geGVuX3BnZF9mcmVlLAorCisJLmFsbG9jX3B0ZSA9IHhlbl9hbGxvY19wdGVfaW5pdCwKKwkucmVsZWFzZV9wdGUgPSB4ZW5fcmVsZWFzZV9wdGVfaW5pdCwKKwkuYWxsb2NfcG1kID0geGVuX2FsbG9jX3B0ZV9pbml0LAorCS5hbGxvY19wbWRfY2xvbmUgPSBwYXJhdmlydF9ub3AsCisJLnJlbGVhc2VfcG1kID0geGVuX3JlbGVhc2VfcHRlX2luaXQsCisKKyNpZmRlZiBDT05GSUdfSElHSFBURQorCS5rbWFwX2F0b21pY19wdGUgPSB4ZW5fa21hcF9hdG9taWNfcHRlLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLnNldF9wdGUgPSB4ZW5fc2V0X3B0ZSwKKyNlbHNlCisJLnNldF9wdGUgPSB4ZW5fc2V0X3B0ZV9pbml0LAorI2VuZGlmCisJLnNldF9wdGVfYXQgPSB4ZW5fc2V0X3B0ZV9hdCwKKwkuc2V0X3BtZCA9IHhlbl9zZXRfcG1kX2h5cGVyLAorCisJLnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQgPSBfX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQsCisJLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0ID0gX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCwKKworCS5wdGVfdmFsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3B0ZV92YWwpLAorCS5wZ2RfdmFsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3BnZF92YWwpLAorCisJLm1ha2VfcHRlID0gUFZfQ0FMTEVFX1NBVkUoeGVuX21ha2VfcHRlKSwKKwkubWFrZV9wZ2QgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fbWFrZV9wZ2QpLAorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKwkuc2V0X3B0ZV9hdG9taWMgPSB4ZW5fc2V0X3B0ZV9hdG9taWMsCisJLnNldF9wdGVfcHJlc2VudCA9IHhlbl9zZXRfcHRlX2F0LAorCS5wdGVfY2xlYXIgPSB4ZW5fcHRlX2NsZWFyLAorCS5wbWRfY2xlYXIgPSB4ZW5fcG1kX2NsZWFyLAorI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCisJLnNldF9wdWQgPSB4ZW5fc2V0X3B1ZF9oeXBlciwKKworCS5tYWtlX3BtZCA9IFBWX0NBTExFRV9TQVZFKHhlbl9tYWtlX3BtZCksCisJLnBtZF92YWwgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fcG1kX3ZhbCksCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKKwkucHVkX3ZhbCA9IFBWX0NBTExFRV9TQVZFKHhlbl9wdWRfdmFsKSwKKwkubWFrZV9wdWQgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fbWFrZV9wdWQpLAorCS5zZXRfcGdkID0geGVuX3NldF9wZ2RfaHlwZXIsCisKKwkuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B0ZV9pbml0LAorCS5yZWxlYXNlX3B1ZCA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAorI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLworCisJLmFjdGl2YXRlX21tID0geGVuX2FjdGl2YXRlX21tLAorCS5kdXBfbW1hcCA9IHhlbl9kdXBfbW1hcCwKKwkuZXhpdF9tbWFwID0geGVuX2V4aXRfbW1hcCwKKworCS5sYXp5X21vZGUgPSB7CisJCS5lbnRlciA9IHBhcmF2aXJ0X2VudGVyX2xhenlfbW11LAorCQkubGVhdmUgPSB4ZW5fbGVhdmVfbGF6eSwKKwl9LAorCisJLnNldF9maXhtYXAgPSB4ZW5fc2V0X2ZpeG1hcCwKK307CisKKwogI2lmZGVmIENPTkZJR19YRU5fREVCVUdfRlMKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmRfbW11X2RlYnVnOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5oIGIvYXJjaC94ODYveGVuL21tdS5oCmluZGV4IDk4ZDcxNjUuLjI0ZDFiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuaAorKysgYi9hcmNoL3g4Ni94ZW4vbW11LmgKQEAgLTU0LDQgKzU0LDcgQEAKIHZvaWQgIHhlbl9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CiAKK3Vuc2lnbmVkIGxvbmcgeGVuX3JlYWRfY3IyX2RpcmVjdCh2b2lkKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdl9tbXVfb3BzIHhlbl9tbXVfb3BzOwogI2VuZGlmCS8qIF9YRU5fTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMgYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCmluZGV4IGM3Mzg2NDQuLjhiZmY3ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKKysrIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwpAQCAtMzksNiArMzksNyBAQAogCXN0cnVjdCBtdWx0aWNhbGxfZW50cnkgZW50cmllc1tNQ19CQVRDSF07CiAjaWYgTUNfREVCVUcKIAlzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5IGRlYnVnW01DX0JBVENIXTsKKwl2b2lkICpjYWxsZXJbTUNfQkFUQ0hdOwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBhcmdzW01DX0FSR1NdOwogCXN0cnVjdCBjYWxsYmFjayB7CkBAIC0xNTQsMTEgKzE1NSwxMiBAQAogCQkJICAgICAgIHJldCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJCWR1bXBfc3RhY2soKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBiLT5tY2lkeDsgaSsrKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgY2FsbCAlMmQvJWQ6IG9wPSVsdSBhcmc9WyVseF0gcmVzdWx0PSVsZFxuIiwKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBjYWxsICUyZC8lZDogb3A9JWx1IGFyZz1bJWx4XSByZXN1bHQ9JWxkXHQlcEZcbiIsCiAJCQkJICAgICAgIGkrMSwgYi0+bWNpZHgsCiAJCQkJICAgICAgIGItPmRlYnVnW2ldLm9wLAogCQkJCSAgICAgICBiLT5kZWJ1Z1tpXS5hcmdzWzBdLAotCQkJCSAgICAgICBiLT5lbnRyaWVzW2ldLnJlc3VsdCk7CisJCQkJICAgICAgIGItPmVudHJpZXNbaV0ucmVzdWx0LAorCQkJCSAgICAgICBiLT5jYWxsZXJbaV0pOwogCQkJfQogCQl9CiAjZW5kaWYKQEAgLTE2OCw4ICsxNzAsNiBAQAogCX0gZWxzZQogCQlCVUdfT04oYi0+YXJnaWR4ICE9IDApOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCiAJZm9yIChpID0gMDsgaSA8IGItPmNiaWR4OyBpKyspIHsKIAkJc3RydWN0IGNhbGxiYWNrICpjYiA9ICZiLT5jYWxsYmFja3NbaV07CiAKQEAgLTE3Nyw3ICsxNzcsOSBAQAogCX0KIAliLT5jYmlkeCA9IDA7CiAKLQlCVUdfT04ocmV0KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlXQVJOX09OKHJldCk7CiB9CiAKIHN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgX194ZW5fbWNfZW50cnkoc2l6ZV90IGFyZ3MpCkBAIC0xOTcsNiArMTk5LDkgQEAKIAl9CiAKIAlyZXQubWMgPSAmYi0+ZW50cmllc1tiLT5tY2lkeF07CisjaWZkZWYgTUNfREVCVUcKKwliLT5jYWxsZXJbYi0+bWNpZHhdID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworI2VuZGlmCiAJYi0+bWNpZHgrKzsKIAlyZXQuYXJncyA9ICZiLT5hcmdzW2FyZ2lkeF07CiAJYi0+YXJnaWR4ID0gYXJnaWR4ICsgYXJnczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmggYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5oCmluZGV4IGZhM2UxMDcuLjllNTY1ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmgKKysrIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuaApAQCAtNDEsNyArNDEsNyBAQAogCQl4ZW5fbWNfZmx1c2goKTsKIAogCS8qIHJlc3RvcmUgZmxhZ3Mgc2F2ZWQgaW4geGVuX21jX2JhdGNoICovCi0JbG9jYWxfaXJxX3Jlc3RvcmUoeDg2X3JlYWRfcGVyY3B1KHhlbl9tY19pcnFfZmxhZ3MpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShwZXJjcHVfcmVhZCh4ZW5fbWNfaXJxX2ZsYWdzKSk7CiB9CiAKIC8qIFNldCB1cCBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IGJhdGNoIGlzIGZsdXNoZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zbXAuYyBiL2FyY2gveDg2L3hlbi9zbXAuYwppbmRleCBjNDRlMjA2Li44ZDQ3MDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc21wLmMKKysrIGIvYXJjaC94ODYveGVuL3NtcC5jCkBAIC01MCwxMSArNTAsNyBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGVuX3Jlc2NoZWR1bGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3Jlc2NoZWRfY291bnQrKzsKLSNlbHNlCi0JYWRkX3BkYShpcnFfcmVzY2hlZF9jb3VudCwgMSk7Ci0jZW5kaWYKKwlpbmNfaXJxX3N0YXQoaXJxX3Jlc2NoZWRfY291bnQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNzgsNyArNzQsNyBAQAogCXhlbl9zZXR1cF9jcHVfY2xvY2tldmVudHMoKTsKIAogCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0JeDg2X3dyaXRlX3BlcmNwdShjcHVfc3RhdGUsIENQVV9PTkxJTkUpOworCXBlcmNwdV93cml0ZShjcHVfc3RhdGUsIENQVV9PTkxJTkUpOwogCXdtYigpOwogCiAJLyogV2UgY2FuIHRha2UgaW50ZXJydXB0cyBub3c6IHdlJ3JlIG9mZmljaWFsbHkgInVwIi4gKi8KQEAgLTE3NCw3ICsxNzAsNyBAQAogCiAJLyogV2UndmUgc3dpdGNoZWQgdG8gdGhlICJyZWFsIiBwZXItY3B1IGdkdCwgc28gbWFrZSBzdXJlIHRoZQogCSAgIG9sZCBtZW1vcnkgY2FuIGJlIHJlY3ljbGVkICovCi0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoJnBlcl9jcHVfdmFyKGdkdF9wYWdlKSk7CisJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoeGVuX2luaXRpYWxfZ2R0KTsKIAogCXhlbl9zZXR1cF92Y3B1X2luZm9fcGxhY2VtZW50KCk7CiB9CkBAIC0yMjMsNiArMjE5LDcgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9ndWVzdF9jb250ZXh0ICpjdHh0OwogCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0OworCXVuc2lnbmVkIGxvbmcgZ2R0X21mbjsKIAogCWlmIChjcHVtYXNrX3Rlc3RfYW5kX3NldF9jcHUoY3B1LCB4ZW5fY3B1X2luaXRpYWxpemVkX21hcCkpCiAJCXJldHVybiAwOwpAQCAtMjM5LDYgKzIzNiw4IEBACiAJY3R4dC0+dXNlcl9yZWdzLnNzID0gX19LRVJORUxfRFM7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWN0eHQtPnVzZXJfcmVncy5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKKyNlbHNlCisJY3R4dC0+Z3NfYmFzZV9rZXJuZWwgPSBwZXJfY3B1X29mZnNldChjcHUpOwogI2VuZGlmCiAJY3R4dC0+dXNlcl9yZWdzLmVpcCA9ICh1bnNpZ25lZCBsb25nKWNwdV9icmluZ3VwX2FuZF9pZGxlOwogCWN0eHQtPnVzZXJfcmVncy5lZmxhZ3MgPSAweDEwMDA7IC8qIElPUExfUklORzEgKi8KQEAgLTI1MCw5ICsyNDksMTIgQEAKIAljdHh0LT5sZHRfZW50cyA9IDA7CiAKIAlCVUdfT04oKHVuc2lnbmVkIGxvbmcpZ2R0ICYgflBBR0VfTUFTSyk7Ci0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShnZHQpOwogCi0JY3R4dC0+Z2R0X2ZyYW1lc1swXSA9IHZpcnRfdG9fbWZuKGdkdCk7CisJZ2R0X21mbiA9IGFyYml0cmFyeV92aXJ0X3RvX21mbihnZHQpOworCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoZ2R0KTsKKwltYWtlX2xvd21lbV9wYWdlX3JlYWRvbmx5KG1mbl90b192aXJ0KGdkdF9tZm4pKTsKKworCWN0eHQtPmdkdF9mcmFtZXNbMF0gPSBnZHRfbWZuOwogCWN0eHQtPmdkdF9lbnRzICAgICAgPSBHRFRfRU5UUklFUzsKIAogCWN0eHQtPnVzZXJfcmVncy5jcyA9IF9fS0VSTkVMX0NTOwpAQCAtMjgzLDIzICsyODUsMTQgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUgPSBpZGxlX3Rhc2soY3B1KTsKIAlpbnQgcmM7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIEFQIHBkYXMgKi8KLQlXQVJOX09OKGNwdSA9PSAwKTsKLQlpZiAoY3B1ID4gMCkgewotCQlyYyA9IGdldF9sb2NhbF9wZGEoY3B1KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWluaXRfZ2R0KGNwdSk7CiAJcGVyX2NwdShjdXJyZW50X3Rhc2ssIGNwdSkgPSBpZGxlOworI2lmZGVmIENPTkZJR19YODZfMzIKIAlpcnFfY3R4X2luaXQoY3B1KTsKICNlbHNlCi0JY3B1X3BkYShjcHUpLT5wY3VycmVudCA9IGlkbGU7CiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGlkbGUsIFRJRl9GT1JLKTsKKwlwZXJfY3B1KGtlcm5lbF9zdGFjaywgY3B1KSA9CisJCSh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShpZGxlKSAtCisJCUtFUk5FTF9TVEFDS19PRkZTRVQgKyBUSFJFQURfU0laRTsKICNlbmRpZgogCXhlbl9zZXR1cF90aW1lcihjcHUpOwogCXhlbl9pbml0X2xvY2tfY3B1KGNwdSk7CkBAIC00NDUsMTEgKzQzOCw3IEBACiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX2NhbGxfY291bnQrKzsKLSNlbHNlCi0JYWRkX3BkYShpcnFfY2FsbF9jb3VudCwgMSk7Ci0jZW5kaWYKKwlpbmNfaXJxX3N0YXQoaXJxX2NhbGxfY291bnQpOwogCWlycV9leGl0KCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00NTksMTEgKzQ0OCw3IEBACiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9jYWxsX2NvdW50Kys7Ci0jZWxzZQotCWFkZF9wZGEoaXJxX2NhbGxfY291bnQsIDEpOwotI2VuZGlmCisJaW5jX2lycV9zdGF0KGlycV9jYWxsX2NvdW50KTsKIAlpcnFfZXhpdCgpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYyBiL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKaW5kZXggMjEyZmZlMC4uOTViZTdiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYworKysgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KICNpbmNsdWRlIDxhc20veGVuL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAjaW5jbHVkZSAibW11LmgiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbS5TIGIvYXJjaC94ODYveGVuL3hlbi1hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQ3MzYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYveGVuL3hlbi1hc20uUwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIEFzbSB2ZXJzaW9ucyBvZiBYZW4gcHYtb3BzLCBzdWl0YWJsZSBmb3IgZWl0aGVyIGRpcmVjdCB1c2Ugb3IKKyAqIGlubGluaW5nLiAgVGhlIGlubGluZSB2ZXJzaW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdC11c2UKKyAqIHZlcnNpb25zLCB3aXRoIHRoZSBwcmUtIGFuZCBwb3N0LWFtYmxlIGNob3BwZWQgb2ZmLgorICoKKyAqIFRoaXMgY29kZSBpcyBlbmNvZGVkIGZvciBzaXplIHJhdGhlciB0aGFuIGFic29sdXRlIGVmZmljaWVuY3ksIHdpdGgKKyAqIGEgdmlldyB0byBiZWluZyBhYmxlIHRvIGlubGluZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICoKKyAqIFdlIG9ubHkgYm90aGVyIHdpdGggZGlyZWN0IGZvcm1zIChpZSwgdmNwdSBpbiBwZXJjcHUgZGF0YSkgb2YgdGhlCisgKiBvcGVyYXRpb25zIGhlcmU7IHRoZSBpbmRpcmVjdCBmb3JtcyBhcmUgYmV0dGVyIGhhbmRsZWQgaW4gQywgc2luY2UKKyAqIHRoZXkncmUgZ2VuZXJhbGx5IHRvbyBsYXJnZSB0byBpbmxpbmUgYW55d2F5LgorICovCisKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorCisjaW5jbHVkZSAieGVuLWFzbS5oIgorCisvKgorICogRW5hYmxlIGV2ZW50cy4gIFRoaXMgY2xlYXJzIHRoZSBldmVudCBtYXNrIGFuZCB0ZXN0cyB0aGUgcGVuZGluZworICogZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZyBldmVudHMsCisgKiB0aGVuIGVudGVyIHRoZSBoeXBlcnZpc29yIHRvIGdldCB0aGVtIGhhbmRsZWQuCisgKi8KK0VOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwkvKiBVbm1hc2sgZXZlbnRzICovCisJbW92YiAkMCwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKKworCS8qCisJICogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aCBhbnkKKwkgKiBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nIHJ1bgorCSAqIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4KKwkgKi8KKworCS8qIFRlc3QgZm9yIHBlbmRpbmcgKi8KKwl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX3BlbmRpbmcKKwlqeiAxZgorCisyOgljYWxsIGNoZWNrX2V2ZW50cworMToKK0VORFBBVENIKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwlSRUxPQyh4ZW5faXJxX2VuYWJsZV9kaXJlY3QsIDJiKzEpCisKKworLyoKKyAqIERpc2FibGluZyBldmVudHMgaXMgc2ltcGx5IGEgbWF0dGVyIG9mIG1ha2luZyB0aGUgZXZlbnQgbWFzaworICogbm9uLXplcm8uCisgKi8KK0VOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCisJbW92YiAkMSwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKK0VORFBBVENIKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCisJcmV0CisJRU5EUFJPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQorCVJFTE9DKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QsIDApCisKKy8qCisgKiAoeGVuXylzYXZlX2ZsIGlzIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGludGVycnVwdCBlbmFibGUgc3RhdHVzLgorICogQ2FsbGVycyBleHBlY3QgdGhlIHN0YXR1cyB0byBiZSBpbiBYODZfRUZMQUdTX0lGLCBhbmQgb3RoZXIgYml0cworICogbWF5IGJlIHNldCBpbiB0aGUgcmV0dXJuIHZhbHVlLiAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieQorICogbWFraW5nIHN1cmUgdGhhdCBYODZfRUZMQUdTX0lGIGhhcyB0aGUgcmlnaHQgdmFsdWUgKGFuZCBvdGhlciBiaXRzCisgKiBpbiB0aGF0IGJ5dGUgYXJlIDApLCBidXQgb3RoZXIgYml0cyBpbiB0aGUgcmV0dXJuIHZhbHVlIGFyZQorICogdW5kZWZpbmVkLiAgV2UgbmVlZCB0byB0b2dnbGUgdGhlIHN0YXRlIG9mIHRoZSBiaXQsIGJlY2F1c2UgWGVuIGFuZAorICogeDg2IHVzZSBvcHBvc2l0ZSBzZW5zZXMgKG1hc2sgdnMgZW5hYmxlKS4KKyAqLworRU5UUlkoeGVuX3NhdmVfZmxfZGlyZWN0KQorCXRlc3RiICQweGZmLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKSArIFhFTl92Y3B1X2luZm9fbWFzaworCXNldHogJWFoCisJYWRkYiAlYWgsICVhaAorRU5EUEFUQ0goeGVuX3NhdmVfZmxfZGlyZWN0KQorCXJldAorCUVORFBST0MoeGVuX3NhdmVfZmxfZGlyZWN0KQorCVJFTE9DKHhlbl9zYXZlX2ZsX2RpcmVjdCwgMCkKKworCisvKgorICogSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4gZnJvbQorICogeGVuX3NhdmVfZmxfZGlyZWN0LCBidXQgZm9yIHJvYnVzdG5lc3Mgc2FrZSB3ZSB0ZXN0IG9ubHkgdGhlCisgKiBYODZfRUZMQUdTX0lGIGZsYWcgcmF0aGVyIHRoYW4gdGhlIHdob2xlIGJ5dGUuIEFmdGVyIHNldHRpbmcgdGhlCisgKiBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZCBwZW5kaW5nIGV2ZW50cyBhbmQKKyAqIGVudGVycyB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBkZWxpdmVyZWQgaWYgc28uCisgKi8KK0VOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdGVzdHcgJFg4Nl9FRkxBR1NfSUYsICVkaQorI2Vsc2UKKwl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwgJWFoCisjZW5kaWYKKwlzZXR6IFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pICsgWEVOX3ZjcHVfaW5mb19tYXNrCisJLyoKKwkgKiBQcmVlbXB0IGhlcmUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGF0IHdpbGwgZGVhbCB3aXRoIGFueQorCSAqIHBlbmRpbmcgaW50ZXJydXB0cy4gIFRoZSBwZW5kaW5nIGNoZWNrIG1heSBlbmQgdXAgYmVpbmcgcnVuCisJICogb24gdGhlIHdyb25nIENQVSwgYnV0IHRoYXQgZG9lc24ndCBodXJ0LgorCSAqLworCisJLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCisJY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKSArIFhFTl92Y3B1X2luZm9fcGVuZGluZworCWp6IDFmCisyOgljYWxsIGNoZWNrX2V2ZW50cworMToKK0VORFBBVENIKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwlSRUxPQyh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QsIDJiKzEpCisKKworLyoKKyAqIEZvcmNlIGFuIGV2ZW50IGNoZWNrIGJ5IG1ha2luZyBhIGh5cGVyY2FsbCwgYnV0IHByZXNlcnZlIHJlZ3MKKyAqIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuCisgKi8KK2NoZWNrX2V2ZW50czoKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcHVzaCAlZWF4CisJcHVzaCAlZWN4CisJcHVzaCAlZWR4CisJY2FsbCB4ZW5fZm9yY2VfZXZ0Y2huX2NhbGxiYWNrCisJcG9wICVlZHgKKwlwb3AgJWVjeAorCXBvcCAlZWF4CisjZWxzZQorCXB1c2ggJXJheAorCXB1c2ggJXJjeAorCXB1c2ggJXJkeAorCXB1c2ggJXJzaQorCXB1c2ggJXJkaQorCXB1c2ggJXI4CisJcHVzaCAlcjkKKwlwdXNoICVyMTAKKwlwdXNoICVyMTEKKwljYWxsIHhlbl9mb3JjZV9ldnRjaG5fY2FsbGJhY2sKKwlwb3AgJXIxMQorCXBvcCAlcjEwCisJcG9wICVyOQorCXBvcCAlcjgKKwlwb3AgJXJkaQorCXBvcCAlcnNpCisJcG9wICVyZHgKKwlwb3AgJXJjeAorCXBvcCAlcmF4CisjZW5kaWYKKwlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLmggYi9hcmNoL3g4Ni94ZW4veGVuLWFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTI3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni94ZW4veGVuLWFzbS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX1hFTl9YRU5fQVNNX0gKKyNkZWZpbmUgX1hFTl9YRU5fQVNNX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2RlZmluZSBSRUxPQyh4LCB2KQkuZ2xvYmwgeCMjX3JlbG9jOyB4IyNfcmVsb2M9dgorI2RlZmluZSBFTkRQQVRDSCh4KQkuZ2xvYmwgeCMjX2VuZDsgeCMjX2VuZD0uCisKKy8qIFBzZXVkby1mbGFnIHVzZWQgZm9yIHZpcnR1YWwgTk1JLCB3aGljaCB3ZSBkb24ndCBpbXBsZW1lbnQgeWV0ICovCisjZGVmaW5lIFhFTl9FRkxBR1NfTk1JCTB4ODAwMDAwMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TIGIvYXJjaC94ODYveGVuL3hlbi1hc21fMzIuUwppbmRleCA0Mjc4NmY1Li44OGUxNWRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tYXNtXzMyLlMKQEAgLTEsMjk4ICsxLDI3IEBACiAvKgotCUFzbSB2ZXJzaW9ucyBvZiBYZW4gcHYtb3BzLCBzdWl0YWJsZSBmb3IgZWl0aGVyIGRpcmVjdCB1c2Ugb3IgaW5saW5pbmcuCi0JVGhlIGlubGluZSB2ZXJzaW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdC11c2UgdmVyc2lvbnMsIHdpdGggdGhlCi0JcHJlLSBhbmQgcG9zdC1hbWJsZSBjaG9wcGVkIG9mZi4KLQotCVRoaXMgY29kZSBpcyBlbmNvZGVkIGZvciBzaXplIHJhdGhlciB0aGFuIGFic29sdXRlIGVmZmljaWVuY3ksCi0Jd2l0aCBhIHZpZXcgdG8gYmVpbmcgYWJsZSB0byBpbmxpbmUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLQotCVdlIG9ubHkgYm90aGVyIHdpdGggZGlyZWN0IGZvcm1zIChpZSwgdmNwdSBpbiBwZGEpIG9mIHRoZSBvcGVyYXRpb25zCi0JaGVyZTsgdGhlIGluZGlyZWN0IGZvcm1zIGFyZSBiZXR0ZXIgaGFuZGxlZCBpbiBDLCBzaW5jZSB0aGV5J3JlCi0JZ2VuZXJhbGx5IHRvbyBsYXJnZSB0byBpbmxpbmUgYW55d2F5LgorICogQXNtIHZlcnNpb25zIG9mIFhlbiBwdi1vcHMsIHN1aXRhYmxlIGZvciBlaXRoZXIgZGlyZWN0IHVzZSBvcgorICogaW5saW5pbmcuICBUaGUgaW5saW5lIHZlcnNpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0LXVzZQorICogdmVyc2lvbnMsIHdpdGggdGhlIHByZS0gYW5kIHBvc3QtYW1ibGUgY2hvcHBlZCBvZmYuCisgKgorICogVGhpcyBjb2RlIGlzIGVuY29kZWQgZm9yIHNpemUgcmF0aGVyIHRoYW4gYWJzb2x1dGUgZWZmaWNpZW5jeSwgd2l0aAorICogYSB2aWV3IHRvIGJlaW5nIGFibGUgdG8gaW5saW5lIGFzIG11Y2ggYXMgcG9zc2libGUuCisgKgorICogV2Ugb25seSBib3RoZXIgd2l0aCBkaXJlY3QgZm9ybXMgKGllLCB2Y3B1IGluIHBkYSkgb2YgdGhlCisgKiBvcGVyYXRpb25zIGhlcmU7IHRoZSBpbmRpcmVjdCBmb3JtcyBhcmUgYmV0dGVyIGhhbmRsZWQgaW4gQywgc2luY2UKKyAqIHRoZXkncmUgZ2VuZXJhbGx5IHRvbyBsYXJnZSB0byBpbmxpbmUgYW55d2F5LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogCi0jZGVmaW5lIFJFTE9DKHgsIHYpCS5nbG9ibCB4IyNfcmVsb2M7IHgjI19yZWxvYz12Ci0jZGVmaW5lIEVORFBBVENIKHgpCS5nbG9ibCB4IyNfZW5kOyB4IyNfZW5kPS4KLQotLyogUHNldWRvLWZsYWcgdXNlZCBmb3IgdmlydHVhbCBOTUksIHdoaWNoIHdlIGRvbid0IGltcGxlbWVudCB5ZXQgKi8KLSNkZWZpbmUgWEVOX0VGTEFHU19OTUkJMHg4MDAwMDAwMAorI2luY2x1ZGUgInhlbi1hc20uaCIKIAogLyoKLQlFbmFibGUgZXZlbnRzLiAgVGhpcyBjbGVhcnMgdGhlIGV2ZW50IG1hc2sgYW5kIHRlc3RzIHRoZSBwZW5kaW5nCi0JZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZwotCWV2ZW50cywgdGhlbiBlbnRlciB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBoYW5kbGVkLgotICovCi1FTlRSWSh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JLyogVW5tYXNrIGV2ZW50cyAqLwotCW1vdmIgJDAsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pK1hFTl92Y3B1X2luZm9fbWFzawotCi0JLyogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aAotCSAgIGFueSBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nCi0JICAgcnVuIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4gKi8KLQotCS8qIFRlc3QgZm9yIHBlbmRpbmcgKi8KLQl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykrWEVOX3ZjcHVfaW5mb19wZW5kaW5nCi0JanogMWYKLQotMjoJY2FsbCBjaGVja19ldmVudHMKLTE6Ci1FTkRQQVRDSCh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JUkVMT0MoeGVuX2lycV9lbmFibGVfZGlyZWN0LCAyYisxKQotCi0KLS8qCi0JRGlzYWJsaW5nIGV2ZW50cyBpcyBzaW1wbHkgYSBtYXR0ZXIgb2YgbWFraW5nIHRoZSBldmVudCBtYXNrCi0Jbm9uLXplcm8uCi0gKi8KLUVOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCi0JbW92YiAkMSwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykrWEVOX3ZjcHVfaW5mb19tYXNrCi1FTkRQQVRDSCh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQotCXJldAotCUVORFBST0MoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKLQlSRUxPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0LCAwKQotCi0vKgotCSh4ZW5fKXNhdmVfZmwgaXMgdXNlZCB0byBnZXQgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVuYWJsZSBzdGF0dXMuCi0JQ2FsbGVycyBleHBlY3QgdGhlIHN0YXR1cyB0byBiZSBpbiBYODZfRUZMQUdTX0lGLCBhbmQgb3RoZXIgYml0cwotCW1heSBiZSBzZXQgaW4gdGhlIHJldHVybiB2YWx1ZS4gIFdlIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgYnkKLQltYWtpbmcgc3VyZSB0aGF0IFg4Nl9FRkxBR1NfSUYgaGFzIHRoZSByaWdodCB2YWx1ZSAoYW5kIG90aGVyIGJpdHMKLQlpbiB0aGF0IGJ5dGUgYXJlIDApLCBidXQgb3RoZXIgYml0cyBpbiB0aGUgcmV0dXJuIHZhbHVlIGFyZQotCXVuZGVmaW5lZC4gIFdlIG5lZWQgdG8gdG9nZ2xlIHRoZSBzdGF0ZSBvZiB0aGUgYml0LCBiZWNhdXNlCi0JWGVuIGFuZCB4ODYgdXNlIG9wcG9zaXRlIHNlbnNlcyAobWFzayB2cyBlbmFibGUpLgotICovCi1FTlRSWSh4ZW5fc2F2ZV9mbF9kaXJlY3QpCi0JdGVzdGIgJDB4ZmYsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pK1hFTl92Y3B1X2luZm9fbWFzawotCXNldHogJWFoCi0JYWRkYiAlYWgsJWFoCi1FTkRQQVRDSCh4ZW5fc2F2ZV9mbF9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5fc2F2ZV9mbF9kaXJlY3QpCi0JUkVMT0MoeGVuX3NhdmVfZmxfZGlyZWN0LCAwKQotCi0KLS8qCi0JSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4KLQlmcm9tIHhlbl9zYXZlX2ZsX2RpcmVjdCwgYnV0IGZvciByb2J1c3RuZXNzIHNha2Ugd2UgdGVzdCBvbmx5Ci0JdGhlIFg4Nl9FRkxBR1NfSUYgZmxhZyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgYnl0ZS4gQWZ0ZXIKLQlzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZAotCXBlbmRpbmcgZXZlbnRzIGFuZCBlbnRlcnMgdGhlIGh5cGVydmlzb3IgdG8gZ2V0IHRoZW0gZGVsaXZlcmVkCi0JaWYgc28uCi0gKi8KLUVOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKLQl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwgJWFoCi0Jc2V0eiBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKStYRU5fdmNwdV9pbmZvX21hc2sKLQkvKiBQcmVlbXB0IGhlcmUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGF0IHdpbGwgZGVhbCB3aXRoCi0JICAgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gIFRoZSBwZW5kaW5nIGNoZWNrIG1heSBlbmQgdXAgYmVpbmcKLQkgICBydW4gb24gdGhlIHdyb25nIENQVSwgYnV0IHRoYXQgZG9lc24ndCBodXJ0LiAqLwotCi0JLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCi0JY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKStYRU5fdmNwdV9pbmZvX3BlbmRpbmcKLQlqeiAxZgotMjoJY2FsbCBjaGVja19ldmVudHMKLTE6Ci1FTkRQQVRDSCh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QpCi0JUkVMT0MoeGVuX3Jlc3RvcmVfZmxfZGlyZWN0LCAyYisxKQotCi0vKgotCVdlIGNhbid0IHVzZSBzeXNleGl0IGRpcmVjdGx5LCBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluIHJpbmcwLgotCUJ1dCB3ZSBjYW4gZWFzaWx5IGZha2UgaXQgdXAgdXNpbmcgaXJldC4gIEFzc3VtaW5nIHhlbl9zeXNleGl0Ci0JaXMganVtcGVkIHRvIHdpdGggYSBzdGFuZGFyZCBzdGFjayBmcmFtZSwgd2UgY2FuIGp1c3Qgc3RyaXAgaXQKLQliYWNrIHRvIGEgc3RhbmRhcmQgaXJldCBmcmFtZSBhbmQgdXNlIGlyZXQuCi0gKi8KLUVOVFJZKHhlbl9zeXNleGl0KQotCW1vdmwgUFRfRUFYKCVlc3ApLCAlZWF4CQkJLyogU2hvdWxkbid0IGJlIG5lY2Vzc2FyeT8gKi8KLQlvcmwgJFg4Nl9FRkxBR1NfSUYsIFBUX0VGTEFHUyglZXNwKQotCWxlYSBQVF9FSVAoJWVzcCksICVlc3AKLQotCWptcCB4ZW5faXJldAotRU5EUFJPQyh4ZW5fc3lzZXhpdCkKLQotLyoKLQlUaGlzIGlzIHJ1biB3aGVyZSBhIG5vcm1hbCBpcmV0IHdvdWxkIGJlIHJ1biwgd2l0aCB0aGUgc2FtZSBzdGFjayBzZXR1cDoKLQkgICAgICA4OiBlZmxhZ3MKLQkgICAgICA0OiBjcwotCWVzcC0+IDA6IGVpcAotCi0JVGhpcyBhdHRlbXB0cyB0byBtYWtlIHN1cmUgdGhhdCBhbnkgcGVuZGluZyBldmVudHMgYXJlIGRlYWx0Ci0Jd2l0aCBvbiByZXR1cm4gdG8gdXNlcm1vZGUsIGJ1dCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbgotCXdoaWNoIGFuIGV2ZW50IGNhbiBoYXBwZW4ganVzdCBiZWZvcmUgZW50ZXJpbmcgdXNlcm1vZGUuICBJZgotCXRoZSBuZXN0ZWQgaW50ZXJydXB0IGVuZHMgdXAgc2V0dGluZyBvbmUgb2YgdGhlIFRJRl9XT1JLX01BU0sKLQlwZW5kaW5nIHdvcmsgZmxhZ3MsIHRoZXkgd2lsbCBub3QgYmUgdGVzdGVkIGFnYWluIGJlZm9yZQotCXJldHVybmluZyB0byB1c2VybW9kZS4gVGhpcyBtZWFucyB0aGF0IGEgcHJvY2VzcyBjYW4gZW5kIHVwCi0Jd2l0aCBwZW5kaW5nIHdvcmssIHdoaWNoIHdpbGwgYmUgdW5wcm9jZXNzZWQgdW50aWwgdGhlIHByb2Nlc3MKLQllbnRlcnMgYW5kIGxlYXZlcyB0aGUga2VybmVsIGFnYWluLCB3aGljaCBjb3VsZCBiZSBhbgotCXVuYm91bmRlZCBhbW91bnQgb2YgdGltZS4gIFRoaXMgbWVhbnMgdGhhdCBhIHBlbmRpbmcgc2lnbmFsIG9yCi0JcmVzY2hlZHVsZSBldmVudCBjb3VsZCBiZSBpbmRlZmluaXRlbHkgZGVsYXllZC4KLQotCVRoZSBmaXggaXMgdG8gbm90aWNlIGEgbmVzdGVkIGludGVycnVwdCBpbiB0aGUgY3JpdGljYWwKLQl3aW5kb3csIGFuZCBpZiBvbmUgb2NjdXJzLCB0aGVuIGZvbGQgdGhlIG5lc3RlZCBpbnRlcnJ1cHQgaW50bwotCXRoZSBjdXJyZW50IGludGVycnVwdCBzdGFjayBmcmFtZSwgYW5kIHJlLXByb2Nlc3MgaXQKLQlpdGVyYXRpdmVseSByYXRoZXIgdGhhbiByZWN1cnNpdmVseS4gIFRoaXMgbWVhbnMgdGhhdCBpdCB3aWxsCi0JZXhpdCB2aWEgdGhlIG5vcm1hbCBwYXRoLCBhbmQgYWxsIHBlbmRpbmcgd29yayB3aWxsIGJlIGRlYWx0Ci0Jd2l0aCBhcHByb3ByaWF0ZWx5LgotCi0JQmVjYXVzZSB0aGUgbmVzdGVkIGludGVycnVwdCBoYW5kbGVyIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUKLQljdXJyZW50IHN0YWNrIHN0YXRlIGluIHdoYXRldmVyIGZvcm0gaXRzIGluLCB3ZSBrZWVwIHRoaW5ncwotCXNpbXBsZSBieSBvbmx5IHVzaW5nIGEgc2luZ2xlIHJlZ2lzdGVyIHdoaWNoIGlzIHB1c2hlZC9wb3BwZWQKLQlvbiB0aGUgc3RhY2suCi0gKi8KLUVOVFJZKHhlbl9pcmV0KQotCS8qIHRlc3QgZWZsYWdzIGZvciBzcGVjaWFsIGNhc2VzICovCi0JdGVzdGwgJChYODZfRUZMQUdTX1ZNIHwgWEVOX0VGTEFHU19OTUkpLCA4KCVlc3ApCi0Jam56IGh5cGVyX2lyZXQKLQotCXB1c2ggJWVheAotCUVTUF9PRkZTRVQ9NAkjIGJ5dGVzIHB1c2hlZCBvbnRvIHN0YWNrCi0KLQkvKiBTdG9yZSB2Y3B1X2luZm8gcG9pbnRlciBmb3IgZWFzeSBhY2Nlc3MuICBEbyBpdCB0aGlzCi0JICAgd2F5IHRvIGF2b2lkIGhhdmluZyB0byByZWxvYWQgJWZzICovCi0jaWZkZWYgQ09ORklHX1NNUAotCUdFVF9USFJFQURfSU5GTyglZWF4KQotCW1vdmwgVElfY3B1KCVlYXgpLCVlYXgKLQltb3ZsIF9fcGVyX2NwdV9vZmZzZXQoLCVlYXgsNCksJWVheAotCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwlZWF4Ci0jZWxzZQotCW1vdmwgcGVyX2NwdV9feGVuX3ZjcHUsICVlYXgKLSNlbmRpZgotCi0JLyogY2hlY2sgSUYgc3RhdGUgd2UncmUgcmVzdG9yaW5nICovCi0JdGVzdGIgJFg4Nl9FRkxBR1NfSUY+PjgsIDgrMStFU1BfT0ZGU0VUKCVlc3ApCi0KLQkvKiBNYXliZSBlbmFibGUgZXZlbnRzLiAgT25jZSB0aGlzIGhhcHBlbnMgd2UgY291bGQgZ2V0IGEKLQkgICByZWN1cnNpdmUgZXZlbnQsIHNvIHRoZSBjcml0aWNhbCByZWdpb24gc3RhcnRzIGltbWVkaWF0ZWx5Ci0JICAgYWZ0ZXJ3YXJkcy4gIEhvd2V2ZXIsIGlmIHRoYXQgaGFwcGVucyB3ZSBkb24ndCBlbmQgdXAKLQkgICByZXN1bWluZyB0aGUgY29kZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBiZSB3b3JyaWVkIGFib3V0Ci0JICAgYmVpbmcgcHJlZW1wdGVkIHRvIGFub3RoZXIgQ1BVLiAqLwotCXNldHogWEVOX3ZjcHVfaW5mb19tYXNrKCVlYXgpCi14ZW5faXJldF9zdGFydF9jcml0OgotCi0JLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCi0JY21wdyAkMHgwMDAxLCBYRU5fdmNwdV9pbmZvX3BlbmRpbmcoJWVheCkKLQotCS8qIElmIHRoZXJlJ3Mgc29tZXRoaW5nIHBlbmRpbmcsIG1hc2sgZXZlbnRzIGFnYWluIHNvIHdlCi0JICAgY2FuIGp1bXAgYmFjayBpbnRvIHhlbl9oeXBlcnZpc29yX2NhbGxiYWNrICovCi0Jc2V0ZSBYRU5fdmNwdV9pbmZvX21hc2soJWVheCkKLQotCXBvcGwgJWVheAotCi0JLyogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSByZWdpc3RlcnMgYXJlIHJlc3RvcmVkIGFuZCB0aGUgc3RhY2sKLQkgICB1cGRhdGVkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGlmIHdlJ3JlIHByZWVtcHRlZCAqLwotaXJldF9yZXN0b3JlX2VuZDoKLQotCS8qIEp1bXAgdG8gaHlwZXJ2aXNvcl9jYWxsYmFjayBhZnRlciBmaXhpbmcgdXAgdGhlIHN0YWNrLgotCSAgIEV2ZW50cyBhcmUgbWFza2VkLCBzbyBqdW1waW5nIG91dCBvZiB0aGUgY3JpdGljYWwKLQkgICByZWdpb24gaXMgT0suICovCi0JamUgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2sKLQotMToJaXJldAoteGVuX2lyZXRfZW5kX2NyaXQ6Ci0uc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5hbGlnbiA0Ci0JLmxvbmcgMWIsaXJldF9leGMKLS5wcmV2aW91cwotCi1oeXBlcl9pcmV0OgotCS8qIHB1dCB0aGlzIG91dCBvZiBsaW5lIHNpbmNlIGl0cyB2ZXJ5IHJhcmVseSB1c2VkICovCi0Jam1wIGh5cGVyY2FsbF9wYWdlICsgX19IWVBFUlZJU09SX2lyZXQgKiAzMgotCi0JLmdsb2JsIHhlbl9pcmV0X3N0YXJ0X2NyaXQsIHhlbl9pcmV0X2VuZF9jcml0Ci0KLS8qCi0gICBUaGlzIGlzIGNhbGxlZCBieSB4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjayBpbiBlbnRyeS5TIHdoZW4gaXQgc2VlcwotICAgdGhhdCB0aGUgRUlQIGF0IHRoZSB0aW1lIG9mIGludGVycnVwdCB3YXMgYmV0d2VlbiB4ZW5faXJldF9zdGFydF9jcml0Ci0gICBhbmQgeGVuX2lyZXRfZW5kX2NyaXQuICBXZSdyZSBwYXNzZWQgdGhlIEVJUCBpbiAlZWF4IHNvIHdlIGNhbiBkbwotICAgYSBtb3JlIHJlZmluZWQgZGV0ZXJtaW5hdGlvbiBvZiB3aGF0IHRvIGRvLgotCi0gICBUaGUgc3RhY2sgZm9ybWF0IGF0IHRoaXMgcG9pbnQgaXM6Ci0JLS0tLS0tLS0tLS0tLS0tLQotCSBzcwkJOiAoc3MvZXNwIG1heSBiZSBwcmVzZW50IGlmIHdlIGNhbWUgZnJvbSB1c2VybW9kZSkKLQkgZXNwCQk6Ci0JIGVmbGFncwkJfSAgb3V0ZXIgZXhjZXB0aW9uIGluZm8KLQkgY3MJCX0KLQkgZWlwCQl9Ci0JLS0tLS0tLS0tLS0tLS0tLSA8LSBlZGkgKGNvcHkgZGVzdCkKLQkgZWF4CQk6ICBvdXRlciBlYXggaWYgaXQgaGFzbid0IGJlZW4gcmVzdG9yZWQKLQktLS0tLS0tLS0tLS0tLS0tCi0JIGVmbGFncwkJfSAgbmVzdGVkIGV4Y2VwdGlvbiBpbmZvCi0JIGNzCQl9ICAgKG5vIHNzL2VzcCBiZWNhdXNlIHdlJ3JlIG5lc3RlZAotCSBlaXAJCX0gICAgZnJvbSB0aGUgc2FtZSByaW5nKQotCSBvcmlnX2VheAl9PC0gZXNpIChjb3B5IHNyYykKLQkgLSAtIC0gLSAtIC0gLSAtCi0JIGZzCQl9Ci0JIGVzCQl9Ci0JIGRzCQl9ICBTQVZFX0FMTCBzdGF0ZQotCSBlYXgJCX0KLQkgIDoJCToKLQkgZWJ4CQl9PC0gZXNwCi0JLS0tLS0tLS0tLS0tLS0tLQotCi0gICBJbiBvcmRlciB0byBkZWxpdmVyIHRoZSBuZXN0ZWQgZXhjZXB0aW9uIHByb3Blcmx5LCB3ZSBuZWVkIHRvIHNoaWZ0Ci0gICBldmVyeXRoaW5nIGZyb20gdGhlIHJldHVybiBhZGRyIHVwIHRvIHRoZSBlcnJvciBjb2RlIHNvIGl0Ci0gICBzaXRzIGp1c3QgdW5kZXIgdGhlIG91dGVyIGV4Y2VwdGlvbiBpbmZvLiAgVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UKLSAgIGhhbmRsZSB0aGUgZXhjZXB0aW9uLCB3ZSBkbyBpdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgb3V0ZXIgZXhjZXB0aW9uCi0gICByYXRoZXIgdGhhbiBzdGFydGluZyBhIG5ldyBvbmUuCi0KLSAgIFRoZSBvbmx5IGNhdmVhdCBpcyB0aGF0IGlmIHRoZSBvdXRlciBlYXggaGFzbid0IGJlZW4KLSAgIHJlc3RvcmVkIHlldCAoaWUsIGl0J3Mgc3RpbGwgb24gc3RhY2spLCB3ZSBuZWVkIHRvIGluc2VydAotICAgaXRzIHZhbHVlIGludG8gdGhlIFNBVkVfQUxMIHN0YXRlIGJlZm9yZSBnb2luZyBvbiwgc2luY2UKLSAgIGl0J3MgdXNlcm1vZGUgc3RhdGUgd2hpY2ggd2UgZXZlbnR1YWxseSBuZWVkIHRvIHJlc3RvcmUuCi0gKi8KLUVOVFJZKHhlbl9pcmV0X2NyaXRfZml4dXApCi0JLyoKLQkgICBQYXJhbm9pYTogTWFrZSBzdXJlIHdlJ3JlIHJlYWxseSBjb21pbmcgZnJvbSBrZXJuZWwgc3BhY2UuCi0JICAgT25lIGNvdWxkIGltYWdpbmUgYSBjYXNlIHdoZXJlIHVzZXJzcGFjZSBqdW1wcyBpbnRvIHRoZQotCSAgIGNyaXRpY2FsIHJhbmdlIGFkZHJlc3MsIGJ1dCBqdXN0IGJlZm9yZSB0aGUgQ1BVIGRlbGl2ZXJzIGEgR1AsCi0JICAgaXQgZGVjaWRlcyB0byBkZWxpdmVyIGFuIGludGVycnVwdCBpbnN0ZWFkLiAgVW5saWtlbHk/Ci0JICAgRGVmaW5pdGVseS4gIEVhc3kgdG8gYXZvaWQ/ICBZZXMuICBUaGUgSW50ZWwgZG9jdW1lbnRzCi0JICAgZXhwbGljaXRseSBzYXkgdGhhdCB0aGUgcmVwb3J0ZWQgRUlQIGZvciBhIGJhZCBqdW1wIGlzIHRoZQotCSAgIGp1bXAgaW5zdHJ1Y3Rpb24gaXRzZWxmLCBub3QgdGhlIGRlc3RpbmF0aW9uLCBidXQgc29tZSB2aXJ0dWFsCi0JICAgZW52aXJvbm1lbnRzIGdldCB0aGlzIHdyb25nLgotCSAqLwotCW1vdmwgUFRfQ1MoJWVzcCksICVlY3gKLQlhbmRsICRTRUdNRU5UX1JQTF9NQVNLLCAlZWN4Ci0JY21wbCAkVVNFUl9SUEwsICVlY3gKLQlqZSAyZgotCi0JbGVhIFBUX09SSUdfRUFYKCVlc3ApLCAlZXNpCi0JbGVhIFBUX0VGTEFHUyglZXNwKSwgJWVkaQotCi0JLyogSWYgZWlwIGlzIGJlZm9yZSBpcmV0X3Jlc3RvcmVfZW5kIHRoZW4gc3RhY2sKLQkgICBoYXNuJ3QgYmVlbiByZXN0b3JlZCB5ZXQuICovCi0JY21wICRpcmV0X3Jlc3RvcmVfZW5kLCAlZWF4Ci0JamFlIDFmCi0KLQltb3ZsIDArNCglZWRpKSwlZWF4CQkvKiBjb3B5IEVBWCAoanVzdCBhYm92ZSB0b3Agb2YgZnJhbWUpICovCi0JbW92bCAlZWF4LCBQVF9FQVgoJWVzcCkKLQotCWxlYSBFU1BfT0ZGU0VUKCVlZGkpLCVlZGkJLyogbW92ZSBkZXN0IHVwIG92ZXIgc2F2ZWQgcmVncyAqLwotCi0JLyogc2V0IHVwIHRoZSBjb3B5ICovCi0xOglzdGQKLQltb3YgJFBUX0VJUCAvIDQsICVlY3gJCS8qIHNhdmVkIHJlZ3MgdXAgdG8gb3JpZ19lYXggKi8KLQlyZXAgbW92c2wKLQljbGQKLQotCWxlYSA0KCVlZGkpLCVlc3AJCS8qIHBvaW50IGVzcCB0byBuZXcgZnJhbWUgKi8KLTI6CWptcCB4ZW5fZG9fdXBjYWxsCi0KLQotLyoKLQlGb3JjZSBhbiBldmVudCBjaGVjayBieSBtYWtpbmcgYSBoeXBlcmNhbGwsCi0JYnV0IHByZXNlcnZlIHJlZ3MgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4KKyAqIEZvcmNlIGFuIGV2ZW50IGNoZWNrIGJ5IG1ha2luZyBhIGh5cGVyY2FsbCwgYnV0IHByZXNlcnZlIHJlZ3MKKyAqIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuCiAgKi8KIGNoZWNrX2V2ZW50czoKIAlwdXNoICVlYXgKQEAgLTMwMywzICszMiwxOTcgQEAKIAlwb3AgJWVjeAogCXBvcCAlZWF4CiAJcmV0CisKKy8qCisgKiBXZSBjYW4ndCB1c2Ugc3lzZXhpdCBkaXJlY3RseSwgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbiByaW5nMC4KKyAqIEJ1dCB3ZSBjYW4gZWFzaWx5IGZha2UgaXQgdXAgdXNpbmcgaXJldC4gIEFzc3VtaW5nIHhlbl9zeXNleGl0IGlzCisgKiBqdW1wZWQgdG8gd2l0aCBhIHN0YW5kYXJkIHN0YWNrIGZyYW1lLCB3ZSBjYW4ganVzdCBzdHJpcCBpdCBiYWNrIHRvCisgKiBhIHN0YW5kYXJkIGlyZXQgZnJhbWUgYW5kIHVzZSBpcmV0LgorICovCitFTlRSWSh4ZW5fc3lzZXhpdCkKKwltb3ZsIFBUX0VBWCglZXNwKSwgJWVheAkJCS8qIFNob3VsZG4ndCBiZSBuZWNlc3Nhcnk/ICovCisJb3JsICRYODZfRUZMQUdTX0lGLCBQVF9FRkxBR1MoJWVzcCkKKwlsZWEgUFRfRUlQKCVlc3ApLCAlZXNwCisKKwlqbXAgeGVuX2lyZXQKK0VORFBST0MoeGVuX3N5c2V4aXQpCisKKy8qCisgKiBUaGlzIGlzIHJ1biB3aGVyZSBhIG5vcm1hbCBpcmV0IHdvdWxkIGJlIHJ1biwgd2l0aCB0aGUgc2FtZSBzdGFjayBzZXR1cDoKKyAqCTg6IGVmbGFncworICoJNDogY3MKKyAqCWVzcC0+IDA6IGVpcAorICoKKyAqIFRoaXMgYXR0ZW1wdHMgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHBlbmRpbmcgZXZlbnRzIGFyZSBkZWFsdCB3aXRoCisgKiBvbiByZXR1cm4gdG8gdXNlcm1vZGUsIGJ1dCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCBhbgorICogZXZlbnQgY2FuIGhhcHBlbiBqdXN0IGJlZm9yZSBlbnRlcmluZyB1c2VybW9kZS4gIElmIHRoZSBuZXN0ZWQKKyAqIGludGVycnVwdCBlbmRzIHVwIHNldHRpbmcgb25lIG9mIHRoZSBUSUZfV09SS19NQVNLIHBlbmRpbmcgd29yaworICogZmxhZ3MsIHRoZXkgd2lsbCBub3QgYmUgdGVzdGVkIGFnYWluIGJlZm9yZSByZXR1cm5pbmcgdG8KKyAqIHVzZXJtb2RlLiBUaGlzIG1lYW5zIHRoYXQgYSBwcm9jZXNzIGNhbiBlbmQgdXAgd2l0aCBwZW5kaW5nIHdvcmssCisgKiB3aGljaCB3aWxsIGJlIHVucHJvY2Vzc2VkIHVudGlsIHRoZSBwcm9jZXNzIGVudGVycyBhbmQgbGVhdmVzIHRoZQorICoga2VybmVsIGFnYWluLCB3aGljaCBjb3VsZCBiZSBhbiB1bmJvdW5kZWQgYW1vdW50IG9mIHRpbWUuICBUaGlzCisgKiBtZWFucyB0aGF0IGEgcGVuZGluZyBzaWduYWwgb3IgcmVzY2hlZHVsZSBldmVudCBjb3VsZCBiZQorICogaW5kZWZpbml0ZWx5IGRlbGF5ZWQuCisgKgorICogVGhlIGZpeCBpcyB0byBub3RpY2UgYSBuZXN0ZWQgaW50ZXJydXB0IGluIHRoZSBjcml0aWNhbCB3aW5kb3csIGFuZAorICogaWYgb25lIG9jY3VycywgdGhlbiBmb2xkIHRoZSBuZXN0ZWQgaW50ZXJydXB0IGludG8gdGhlIGN1cnJlbnQKKyAqIGludGVycnVwdCBzdGFjayBmcmFtZSwgYW5kIHJlLXByb2Nlc3MgaXQgaXRlcmF0aXZlbHkgcmF0aGVyIHRoYW4KKyAqIHJlY3Vyc2l2ZWx5LiAgVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwgZXhpdCB2aWEgdGhlIG5vcm1hbCBwYXRoLCBhbmQKKyAqIGFsbCBwZW5kaW5nIHdvcmsgd2lsbCBiZSBkZWFsdCB3aXRoIGFwcHJvcHJpYXRlbHkuCisgKgorICogQmVjYXVzZSB0aGUgbmVzdGVkIGludGVycnVwdCBoYW5kbGVyIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgY3VycmVudAorICogc3RhY2sgc3RhdGUgaW4gd2hhdGV2ZXIgZm9ybSBpdHMgaW4sIHdlIGtlZXAgdGhpbmdzIHNpbXBsZSBieSBvbmx5CisgKiB1c2luZyBhIHNpbmdsZSByZWdpc3RlciB3aGljaCBpcyBwdXNoZWQvcG9wcGVkIG9uIHRoZSBzdGFjay4KKyAqLworRU5UUlkoeGVuX2lyZXQpCisJLyogdGVzdCBlZmxhZ3MgZm9yIHNwZWNpYWwgY2FzZXMgKi8KKwl0ZXN0bCAkKFg4Nl9FRkxBR1NfVk0gfCBYRU5fRUZMQUdTX05NSSksIDgoJWVzcCkKKwlqbnogaHlwZXJfaXJldAorCisJcHVzaCAlZWF4CisJRVNQX09GRlNFVD00CSMgYnl0ZXMgcHVzaGVkIG9udG8gc3RhY2sKKworCS8qCisJICogU3RvcmUgdmNwdV9pbmZvIHBvaW50ZXIgZm9yIGVhc3kgYWNjZXNzLiAgRG8gaXQgdGhpcyB3YXkgdG8KKwkgKiBhdm9pZCBoYXZpbmcgdG8gcmVsb2FkICVmcworCSAqLworI2lmZGVmIENPTkZJR19TTVAKKwlHRVRfVEhSRUFEX0lORk8oJWVheCkKKwltb3ZsIFRJX2NwdSglZWF4KSwgJWVheAorCW1vdmwgX19wZXJfY3B1X29mZnNldCgsJWVheCw0KSwgJWVheAorCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwgJWVheAorI2Vsc2UKKwltb3ZsIHBlcl9jcHVfX3hlbl92Y3B1LCAlZWF4CisjZW5kaWYKKworCS8qIGNoZWNrIElGIHN0YXRlIHdlJ3JlIHJlc3RvcmluZyAqLworCXRlc3RiICRYODZfRUZMQUdTX0lGPj44LCA4KzErRVNQX09GRlNFVCglZXNwKQorCisJLyoKKwkgKiBNYXliZSBlbmFibGUgZXZlbnRzLiAgT25jZSB0aGlzIGhhcHBlbnMgd2UgY291bGQgZ2V0IGEKKwkgKiByZWN1cnNpdmUgZXZlbnQsIHNvIHRoZSBjcml0aWNhbCByZWdpb24gc3RhcnRzIGltbWVkaWF0ZWx5CisJICogYWZ0ZXJ3YXJkcy4gIEhvd2V2ZXIsIGlmIHRoYXQgaGFwcGVucyB3ZSBkb24ndCBlbmQgdXAKKwkgKiByZXN1bWluZyB0aGUgY29kZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBiZSB3b3JyaWVkIGFib3V0CisJICogYmVpbmcgcHJlZW1wdGVkIHRvIGFub3RoZXIgQ1BVLgorCSAqLworCXNldHogWEVOX3ZjcHVfaW5mb19tYXNrKCVlYXgpCit4ZW5faXJldF9zdGFydF9jcml0OgorCisJLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCisJY21wdyAkMHgwMDAxLCBYRU5fdmNwdV9pbmZvX3BlbmRpbmcoJWVheCkKKworCS8qCisJICogSWYgdGhlcmUncyBzb21ldGhpbmcgcGVuZGluZywgbWFzayBldmVudHMgYWdhaW4gc28gd2UgY2FuCisJICoganVtcCBiYWNrIGludG8geGVuX2h5cGVydmlzb3JfY2FsbGJhY2sKKwkgKi8KKwlzZXRlIFhFTl92Y3B1X2luZm9fbWFzayglZWF4KQorCisJcG9wbCAlZWF4CisKKwkvKgorCSAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVnaXN0ZXJzIGFyZSByZXN0b3JlZCBhbmQgdGhlIHN0YWNrCisJICogdXBkYXRlZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBpZiB3ZSdyZQorCSAqIHByZWVtcHRlZAorCSAqLworaXJldF9yZXN0b3JlX2VuZDoKKworCS8qCisJICogSnVtcCB0byBoeXBlcnZpc29yX2NhbGxiYWNrIGFmdGVyIGZpeGluZyB1cCB0aGUgc3RhY2suCisJICogRXZlbnRzIGFyZSBtYXNrZWQsIHNvIGp1bXBpbmcgb3V0IG9mIHRoZSBjcml0aWNhbCByZWdpb24gaXMKKwkgKiBPSy4KKwkgKi8KKwlqZSB4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjaworCisxOglpcmV0Cit4ZW5faXJldF9lbmRfY3JpdDoKKy5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCS5hbGlnbiA0CisJLmxvbmcgMWIsIGlyZXRfZXhjCisucHJldmlvdXMKKworaHlwZXJfaXJldDoKKwkvKiBwdXQgdGhpcyBvdXQgb2YgbGluZSBzaW5jZSBpdHMgdmVyeSByYXJlbHkgdXNlZCAqLworCWptcCBoeXBlcmNhbGxfcGFnZSArIF9fSFlQRVJWSVNPUl9pcmV0ICogMzIKKworCS5nbG9ibCB4ZW5faXJldF9zdGFydF9jcml0LCB4ZW5faXJldF9lbmRfY3JpdAorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2sgaW4gZW50cnkuUyB3aGVuIGl0IHNlZXMKKyAqIHRoYXQgdGhlIEVJUCBhdCB0aGUgdGltZSBvZiBpbnRlcnJ1cHQgd2FzIGJldHdlZW4KKyAqIHhlbl9pcmV0X3N0YXJ0X2NyaXQgYW5kIHhlbl9pcmV0X2VuZF9jcml0LiAgV2UncmUgcGFzc2VkIHRoZSBFSVAgaW4KKyAqICVlYXggc28gd2UgY2FuIGRvIGEgbW9yZSByZWZpbmVkIGRldGVybWluYXRpb24gb2Ygd2hhdCB0byBkby4KKyAqCisgKiBUaGUgc3RhY2sgZm9ybWF0IGF0IHRoaXMgcG9pbnQgaXM6CisgKgktLS0tLS0tLS0tLS0tLS0tCisgKgkgc3MJCTogKHNzL2VzcCBtYXkgYmUgcHJlc2VudCBpZiB3ZSBjYW1lIGZyb20gdXNlcm1vZGUpCisgKgkgZXNwCQk6CisgKgkgZWZsYWdzCQl9ICBvdXRlciBleGNlcHRpb24gaW5mbworICoJIGNzCQl9CisgKgkgZWlwCQl9CisgKgktLS0tLS0tLS0tLS0tLS0tIDwtIGVkaSAoY29weSBkZXN0KQorICoJIGVheAkJOiAgb3V0ZXIgZWF4IGlmIGl0IGhhc24ndCBiZWVuIHJlc3RvcmVkCisgKgktLS0tLS0tLS0tLS0tLS0tCisgKgkgZWZsYWdzCQl9ICBuZXN0ZWQgZXhjZXB0aW9uIGluZm8KKyAqCSBjcwkJfSAgIChubyBzcy9lc3AgYmVjYXVzZSB3ZSdyZSBuZXN0ZWQKKyAqCSBlaXAJCX0gICAgZnJvbSB0aGUgc2FtZSByaW5nKQorICoJIG9yaWdfZWF4CX08LSBlc2kgKGNvcHkgc3JjKQorICoJIC0gLSAtIC0gLSAtIC0gLQorICoJIGZzCQl9CisgKgkgZXMJCX0KKyAqCSBkcwkJfSAgU0FWRV9BTEwgc3RhdGUKKyAqCSBlYXgJCX0KKyAqCSAgOgkJOgorICoJIGVieAkJfTwtIGVzcAorICoJLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEluIG9yZGVyIHRvIGRlbGl2ZXIgdGhlIG5lc3RlZCBleGNlcHRpb24gcHJvcGVybHksIHdlIG5lZWQgdG8gc2hpZnQKKyAqIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmV0dXJuIGFkZHIgdXAgdG8gdGhlIGVycm9yIGNvZGUgc28gaXQgc2l0cworICoganVzdCB1bmRlciB0aGUgb3V0ZXIgZXhjZXB0aW9uIGluZm8uICBUaGlzIG1lYW5zIHRoYXQgd2hlbiB3ZQorICogaGFuZGxlIHRoZSBleGNlcHRpb24sIHdlIGRvIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBvdXRlcgorICogZXhjZXB0aW9uIHJhdGhlciB0aGFuIHN0YXJ0aW5nIGEgbmV3IG9uZS4KKyAqCisgKiBUaGUgb25seSBjYXZlYXQgaXMgdGhhdCBpZiB0aGUgb3V0ZXIgZWF4IGhhc24ndCBiZWVuIHJlc3RvcmVkIHlldAorICogKGllLCBpdCdzIHN0aWxsIG9uIHN0YWNrKSwgd2UgbmVlZCB0byBpbnNlcnQgaXRzIHZhbHVlIGludG8gdGhlCisgKiBTQVZFX0FMTCBzdGF0ZSBiZWZvcmUgZ29pbmcgb24sIHNpbmNlIGl0J3MgdXNlcm1vZGUgc3RhdGUgd2hpY2ggd2UKKyAqIGV2ZW50dWFsbHkgbmVlZCB0byByZXN0b3JlLgorICovCitFTlRSWSh4ZW5faXJldF9jcml0X2ZpeHVwKQorCS8qCisJICogUGFyYW5vaWE6IE1ha2Ugc3VyZSB3ZSdyZSByZWFsbHkgY29taW5nIGZyb20ga2VybmVsIHNwYWNlLgorCSAqIE9uZSBjb3VsZCBpbWFnaW5lIGEgY2FzZSB3aGVyZSB1c2Vyc3BhY2UganVtcHMgaW50byB0aGUKKwkgKiBjcml0aWNhbCByYW5nZSBhZGRyZXNzLCBidXQganVzdCBiZWZvcmUgdGhlIENQVSBkZWxpdmVycyBhCisJICogR1AsIGl0IGRlY2lkZXMgdG8gZGVsaXZlciBhbiBpbnRlcnJ1cHQgaW5zdGVhZC4gIFVubGlrZWx5PworCSAqIERlZmluaXRlbHkuICBFYXN5IHRvIGF2b2lkPyAgWWVzLiAgVGhlIEludGVsIGRvY3VtZW50cworCSAqIGV4cGxpY2l0bHkgc2F5IHRoYXQgdGhlIHJlcG9ydGVkIEVJUCBmb3IgYSBiYWQganVtcCBpcyB0aGUKKwkgKiBqdW1wIGluc3RydWN0aW9uIGl0c2VsZiwgbm90IHRoZSBkZXN0aW5hdGlvbiwgYnV0IHNvbWUKKwkgKiB2aXJ0dWFsIGVudmlyb25tZW50cyBnZXQgdGhpcyB3cm9uZy4KKwkgKi8KKwltb3ZsIFBUX0NTKCVlc3ApLCAlZWN4CisJYW5kbCAkU0VHTUVOVF9SUExfTUFTSywgJWVjeAorCWNtcGwgJFVTRVJfUlBMLCAlZWN4CisJamUgMmYKKworCWxlYSBQVF9PUklHX0VBWCglZXNwKSwgJWVzaQorCWxlYSBQVF9FRkxBR1MoJWVzcCksICVlZGkKKworCS8qCisJICogSWYgZWlwIGlzIGJlZm9yZSBpcmV0X3Jlc3RvcmVfZW5kIHRoZW4gc3RhY2sKKwkgKiBoYXNuJ3QgYmVlbiByZXN0b3JlZCB5ZXQuCisJICovCisJY21wICRpcmV0X3Jlc3RvcmVfZW5kLCAlZWF4CisJamFlIDFmCisKKwltb3ZsIDArNCglZWRpKSwgJWVheAkJLyogY29weSBFQVggKGp1c3QgYWJvdmUgdG9wIG9mIGZyYW1lKSAqLworCW1vdmwgJWVheCwgUFRfRUFYKCVlc3ApCisKKwlsZWEgRVNQX09GRlNFVCglZWRpKSwgJWVkaQkvKiBtb3ZlIGRlc3QgdXAgb3ZlciBzYXZlZCByZWdzICovCisKKwkvKiBzZXQgdXAgdGhlIGNvcHkgKi8KKzE6CXN0ZAorCW1vdiAkUFRfRUlQIC8gNCwgJWVjeAkJLyogc2F2ZWQgcmVncyB1cCB0byBvcmlnX2VheCAqLworCXJlcCBtb3ZzbAorCWNsZAorCisJbGVhIDQoJWVkaSksICVlc3AJCS8qIHBvaW50IGVzcCB0byBuZXcgZnJhbWUgKi8KKzI6CWptcCB4ZW5fZG9fdXBjYWxsCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtXzY0LlMgYi9hcmNoL3g4Ni94ZW4veGVuLWFzbV82NC5TCmluZGV4IDA1Nzk0YzUuLjAyZjQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tYXNtXzY0LlMKKysrIGIvYXJjaC94ODYveGVuL3hlbi1hc21fNjQuUwpAQCAtMSwxNzQgKzEsNDUgQEAKIC8qCi0JQXNtIHZlcnNpb25zIG9mIFhlbiBwdi1vcHMsIHN1aXRhYmxlIGZvciBlaXRoZXIgZGlyZWN0IHVzZSBvciBpbmxpbmluZy4KLQlUaGUgaW5saW5lIHZlcnNpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0LXVzZSB2ZXJzaW9ucywgd2l0aCB0aGUKLQlwcmUtIGFuZCBwb3N0LWFtYmxlIGNob3BwZWQgb2ZmLgotCi0JVGhpcyBjb2RlIGlzIGVuY29kZWQgZm9yIHNpemUgcmF0aGVyIHRoYW4gYWJzb2x1dGUgZWZmaWNpZW5jeSwKLQl3aXRoIGEgdmlldyB0byBiZWluZyBhYmxlIHRvIGlubGluZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgotCi0JV2Ugb25seSBib3RoZXIgd2l0aCBkaXJlY3QgZm9ybXMgKGllLCB2Y3B1IGluIHBkYSkgb2YgdGhlIG9wZXJhdGlvbnMKLQloZXJlOyB0aGUgaW5kaXJlY3QgZm9ybXMgYXJlIGJldHRlciBoYW5kbGVkIGluIEMsIHNpbmNlIHRoZXkncmUKLQlnZW5lcmFsbHkgdG9vIGxhcmdlIHRvIGlubGluZSBhbnl3YXkuCisgKiBBc20gdmVyc2lvbnMgb2YgWGVuIHB2LW9wcywgc3VpdGFibGUgZm9yIGVpdGhlciBkaXJlY3QgdXNlIG9yCisgKiBpbmxpbmluZy4gIFRoZSBpbmxpbmUgdmVyc2lvbnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBkaXJlY3QtdXNlCisgKiB2ZXJzaW9ucywgd2l0aCB0aGUgcHJlLSBhbmQgcG9zdC1hbWJsZSBjaG9wcGVkIG9mZi4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZW5jb2RlZCBmb3Igc2l6ZSByYXRoZXIgdGhhbiBhYnNvbHV0ZSBlZmZpY2llbmN5LCB3aXRoCisgKiBhIHZpZXcgdG8gYmVpbmcgYWJsZSB0byBpbmxpbmUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAqCisgKiBXZSBvbmx5IGJvdGhlciB3aXRoIGRpcmVjdCBmb3JtcyAoaWUsIHZjcHUgaW4gcGRhKSBvZiB0aGUKKyAqIG9wZXJhdGlvbnMgaGVyZTsgdGhlIGluZGlyZWN0IGZvcm1zIGFyZSBiZXR0ZXIgaGFuZGxlZCBpbiBDLCBzaW5jZQorICogdGhleSdyZSBnZW5lcmFsbHkgdG9vIGxhcmdlIHRvIGlubGluZSBhbnl3YXkuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogCi0jZGVmaW5lIFJFTE9DKHgsIHYpCS5nbG9ibCB4IyNfcmVsb2M7IHgjI19yZWxvYz12Ci0jZGVmaW5lIEVORFBBVENIKHgpCS5nbG9ibCB4IyNfZW5kOyB4IyNfZW5kPS4KLQotLyogUHNldWRvLWZsYWcgdXNlZCBmb3IgdmlydHVhbCBOTUksIHdoaWNoIHdlIGRvbid0IGltcGxlbWVudCB5ZXQgKi8KLSNkZWZpbmUgWEVOX0VGTEFHU19OTUkJMHg4MDAwMDAwMAotCi0jaWYgMQotLyoKLQl4ODYtNjQgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlyZWN0IGFjY2VzcyB0byBwZXJjcHUgdmFyaWFibGVzCi0JdmlhIGEgc2VnbWVudCBvdmVycmlkZSwgc28gd2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUKLQluZXZlciBnZXRzIHVzZWQKLSAqLwotI2RlZmluZSBCVUcJCQl1ZDJhCi0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhciwgb2ZmKQkweGRlYWRiZWVmCi0jZW5kaWYKLQotLyoKLQlFbmFibGUgZXZlbnRzLiAgVGhpcyBjbGVhcnMgdGhlIGV2ZW50IG1hc2sgYW5kIHRlc3RzIHRoZSBwZW5kaW5nCi0JZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZwotCWV2ZW50cywgdGhlbiBlbnRlciB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBoYW5kbGVkLgotICovCi1FTlRSWSh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JQlVHCi0KLQkvKiBVbm1hc2sgZXZlbnRzICovCi0JbW92YiAkMCwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbywgWEVOX3ZjcHVfaW5mb19tYXNrKQotCi0JLyogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aAotCSAgIGFueSBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nCi0JICAgcnVuIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4gKi8KLQotCS8qIFRlc3QgZm9yIHBlbmRpbmcgKi8KLQl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbywgWEVOX3ZjcHVfaW5mb19wZW5kaW5nKQotCWp6IDFmCi0KLTI6CWNhbGwgY2hlY2tfZXZlbnRzCi0xOgotRU5EUEFUQ0goeGVuX2lycV9lbmFibGVfZGlyZWN0KQotCXJldAotCUVORFBST0MoeGVuX2lycV9lbmFibGVfZGlyZWN0KQotCVJFTE9DKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCwgMmIrMSkKLQotLyoKLQlEaXNhYmxpbmcgZXZlbnRzIGlzIHNpbXBseSBhIG1hdHRlciBvZiBtYWtpbmcgdGhlIGV2ZW50IG1hc2sKLQlub24temVyby4KLSAqLwotRU5UUlkoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKLQlCVUcKLQotCW1vdmIgJDEsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8sIFhFTl92Y3B1X2luZm9fbWFzaykKLUVORFBBVENIKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQotCVJFTE9DKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QsIDApCi0KLS8qCi0JKHhlbl8pc2F2ZV9mbCBpcyB1c2VkIHRvIGdldCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXR1cy4KLQlDYWxsZXJzIGV4cGVjdCB0aGUgc3RhdHVzIHRvIGJlIGluIFg4Nl9FRkxBR1NfSUYsIGFuZCBvdGhlciBiaXRzCi0JbWF5IGJlIHNldCBpbiB0aGUgcmV0dXJuIHZhbHVlLiAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieQotCW1ha2luZyBzdXJlIHRoYXQgWDg2X0VGTEFHU19JRiBoYXMgdGhlIHJpZ2h0IHZhbHVlIChhbmQgb3RoZXIgYml0cwotCWluIHRoYXQgYnl0ZSBhcmUgMCksIGJ1dCBvdGhlciBiaXRzIGluIHRoZSByZXR1cm4gdmFsdWUgYXJlCi0JdW5kZWZpbmVkLiAgV2UgbmVlZCB0byB0b2dnbGUgdGhlIHN0YXRlIG9mIHRoZSBiaXQsIGJlY2F1c2UKLQlYZW4gYW5kIHg4NiB1c2Ugb3Bwb3NpdGUgc2Vuc2VzIChtYXNrIHZzIGVuYWJsZSkuCi0gKi8KLUVOVFJZKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQlCVUcKLQotCXRlc3RiICQweGZmLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvLCBYRU5fdmNwdV9pbmZvX21hc2spCi0Jc2V0eiAlYWgKLQlhZGRiICVhaCwlYWgKLUVORFBBVENIKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQlyZXQKLQlFTkRQUk9DKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQlSRUxPQyh4ZW5fc2F2ZV9mbF9kaXJlY3QsIDApCi0KLS8qCi0JSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4KLQlmcm9tIHhlbl9zYXZlX2ZsX2RpcmVjdCwgYnV0IGZvciByb2J1c3RuZXNzIHNha2Ugd2UgdGVzdCBvbmx5Ci0JdGhlIFg4Nl9FRkxBR1NfSUYgZmxhZyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgYnl0ZS4gQWZ0ZXIKLQlzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZAotCXBlbmRpbmcgZXZlbnRzIGFuZCBlbnRlcnMgdGhlIGh5cGVydmlzb3IgdG8gZ2V0IHRoZW0gZGVsaXZlcmVkCi0JaWYgc28uCi0gKi8KLUVOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKLQlCVUcKLQotCXRlc3RiICRYODZfRUZMQUdTX0lGPj44LCAlYWgKLQlzZXR6IFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8sIFhFTl92Y3B1X2luZm9fbWFzaykKLQkvKiBQcmVlbXB0IGhlcmUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGF0IHdpbGwgZGVhbCB3aXRoCi0JICAgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gIFRoZSBwZW5kaW5nIGNoZWNrIG1heSBlbmQgdXAgYmVpbmcKLQkgICBydW4gb24gdGhlIHdyb25nIENQVSwgYnV0IHRoYXQgZG9lc24ndCBodXJ0LiAqLwotCi0JLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCi0JY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvLCBYRU5fdmNwdV9pbmZvX3BlbmRpbmcpCi0JanogMWYKLTI6CWNhbGwgY2hlY2tfZXZlbnRzCi0xOgotRU5EUEFUQ0goeGVuX3Jlc3RvcmVfZmxfZGlyZWN0KQotCXJldAotCUVORFBST0MoeGVuX3Jlc3RvcmVfZmxfZGlyZWN0KQotCVJFTE9DKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCwgMmIrMSkKLQotCi0vKgotCUZvcmNlIGFuIGV2ZW50IGNoZWNrIGJ5IG1ha2luZyBhIGh5cGVyY2FsbCwKLQlidXQgcHJlc2VydmUgcmVncyBiZWZvcmUgbWFraW5nIHRoZSBjYWxsLgotICovCi1jaGVja19ldmVudHM6Ci0JcHVzaCAlcmF4Ci0JcHVzaCAlcmN4Ci0JcHVzaCAlcmR4Ci0JcHVzaCAlcnNpCi0JcHVzaCAlcmRpCi0JcHVzaCAlcjgKLQlwdXNoICVyOQotCXB1c2ggJXIxMAotCXB1c2ggJXIxMQotCWNhbGwgeGVuX2ZvcmNlX2V2dGNobl9jYWxsYmFjawotCXBvcCAlcjExCi0JcG9wICVyMTAKLQlwb3AgJXI5Ci0JcG9wICVyOAotCXBvcCAlcmRpCi0JcG9wICVyc2kKLQlwb3AgJXJkeAotCXBvcCAlcmN4Ci0JcG9wICVyYXgKLQlyZXQKKyNpbmNsdWRlICJ4ZW4tYXNtLmgiCiAKIEVOVFJZKHhlbl9hZGp1c3RfZXhjZXB0aW9uX2ZyYW1lKQotCW1vdiA4KzAoJXJzcCksJXJjeAotCW1vdiA4KzgoJXJzcCksJXIxMQorCW1vdiA4KzAoJXJzcCksICVyY3gKKwltb3YgOCs4KCVyc3ApLCAlcjExCiAJcmV0ICQxNgogCiBoeXBlcmNhbGxfaXJldCA9IGh5cGVyY2FsbF9wYWdlICsgX19IWVBFUlZJU09SX2lyZXQgKiAzMgogLyoKLQlYZW42NCBpcmV0IGZyYW1lOgotCi0Jc3MKLQlyc3AKLQlyZmxhZ3MKLQljcwotCXJpcAkJPC0tIHN0YW5kYXJkIGlyZXQgZnJhbWUKLQotCWZsYWdzCi0KLQlyY3gJCX0KLQlyMTEJCX08LS0gcHVzaGVkIGJ5IGh5cGVyY2FsbCBwYWdlCi1yc3AgLT4JcmF4CQl9CisgKiBYZW42NCBpcmV0IGZyYW1lOgorICoKKyAqCXNzCisgKglyc3AKKyAqCXJmbGFncworICoJY3MKKyAqCXJpcAkJPC0tIHN0YW5kYXJkIGlyZXQgZnJhbWUKKyAqCisgKglmbGFncworICoKKyAqCXJjeAkJfQorICoJcjExCQl9PC0tIHB1c2hlZCBieSBoeXBlcmNhbGwgcGFnZQorICogcnNwLT5yYXgJCX0KICAqLwogRU5UUlkoeGVuX2lyZXQpCiAJcHVzaHEgJDAKQEAgLTE3Nyw4ICs0OCw4IEBACiBSRUxPQyh4ZW5faXJldCwgMWIrMSkKIAogLyoKLQlzeXNleGl0IGlzIG5vdCB1c2VkIGZvciA2NC1iaXQgcHJvY2Vzc2VzLCBzbyBpdCdzCi0Jb25seSBldmVyIHVzZWQgdG8gcmV0dXJuIHRvIDMyLWJpdCBjb21wYXQgdXNlcnNwYWNlLgorICogc3lzZXhpdCBpcyBub3QgdXNlZCBmb3IgNjQtYml0IHByb2Nlc3Nlcywgc28gaXQncyBvbmx5IGV2ZXIgdXNlZCB0bworICogcmV0dXJuIHRvIDMyLWJpdCBjb21wYXQgdXNlcnNwYWNlLgogICovCiBFTlRSWSh4ZW5fc3lzZXhpdCkKIAlwdXNocSAkX19VU0VSMzJfRFMKQEAgLTE5MywxMyArNjQsMTUgQEAKIFJFTE9DKHhlbl9zeXNleGl0LCAxYisxKQogCiBFTlRSWSh4ZW5fc3lzcmV0NjQpCi0JLyogV2UncmUgYWxyZWFkeSBvbiB0aGUgdXNlcm1vZGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgYnV0IHN0aWxsCi0JICAgd2l0aCB0aGUga2VybmVsIGdzLCBzbyB3ZSBjYW4gZWFzaWx5IHN3aXRjaCBiYWNrICovCi0JbW92cSAlcnNwLCAlZ3M6cGRhX29sZHJzcAotCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjaywlcnNwCisJLyoKKwkgKiBXZSdyZSBhbHJlYWR5IG9uIHRoZSB1c2VybW9kZSBzdGFjayBhdCB0aGlzIHBvaW50LCBidXQKKwkgKiBzdGlsbCB3aXRoIHRoZSBrZXJuZWwgZ3MsIHNvIHdlIGNhbiBlYXNpbHkgc3dpdGNoIGJhY2sKKwkgKi8KKwltb3ZxICVyc3AsIFBFUl9DUFVfVkFSKG9sZF9yc3ApCisJbW92cSBQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCAlcnNwCiAKIAlwdXNocSAkX19VU0VSX0RTCi0JcHVzaHEgJWdzOnBkYV9vbGRyc3AKKwlwdXNocSBQRVJfQ1BVX1ZBUihvbGRfcnNwKQogCXB1c2hxICVyMTEKIAlwdXNocSAkX19VU0VSX0NTCiAJcHVzaHEgJXJjeApAQCAtMjEwLDEzICs4MywxNSBAQAogUkVMT0MoeGVuX3N5c3JldDY0LCAxYisxKQogCiBFTlRSWSh4ZW5fc3lzcmV0MzIpCi0JLyogV2UncmUgYWxyZWFkeSBvbiB0aGUgdXNlcm1vZGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgYnV0IHN0aWxsCi0JICAgd2l0aCB0aGUga2VybmVsIGdzLCBzbyB3ZSBjYW4gZWFzaWx5IHN3aXRjaCBiYWNrICovCi0JbW92cSAlcnNwLCAlZ3M6cGRhX29sZHJzcAotCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjaywgJXJzcAorCS8qCisJICogV2UncmUgYWxyZWFkeSBvbiB0aGUgdXNlcm1vZGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgYnV0CisJICogc3RpbGwgd2l0aCB0aGUga2VybmVsIGdzLCBzbyB3ZSBjYW4gZWFzaWx5IHN3aXRjaCBiYWNrCisJICovCisJbW92cSAlcnNwLCBQRVJfQ1BVX1ZBUihvbGRfcnNwKQorCW1vdnEgUEVSX0NQVV9WQVIoa2VybmVsX3N0YWNrKSwgJXJzcAogCiAJcHVzaHEgJF9fVVNFUjMyX0RTCi0JcHVzaHEgJWdzOnBkYV9vbGRyc3AKKwlwdXNocSBQRVJfQ1BVX1ZBUihvbGRfcnNwKQogCXB1c2hxICVyMTEKIAlwdXNocSAkX19VU0VSMzJfQ1MKIAlwdXNocSAlcmN4CkBAIC0yMjcsMjggKzEwMiwyNyBAQAogUkVMT0MoeGVuX3N5c3JldDMyLCAxYisxKQogCiAvKgotCVhlbiBoYW5kbGVzIHN5c2NhbGwgY2FsbGJhY2tzIG11Y2ggbGlrZSBvcmRpbmFyeSBleGNlcHRpb25zLAotCXdoaWNoIG1lYW5zIHdlIGhhdmU6Ci0JIC0ga2VybmVsIGdzCi0JIC0ga2VybmVsIHJzcAotCSAtIGFuIGlyZXQtbGlrZSBzdGFjayBmcmFtZSBvbiB0aGUgc3RhY2sgKGluY2x1ZGluZyByY3ggYW5kIHIxMSk6Ci0JCXNzCi0JCXJzcAotCQlyZmxhZ3MKLQkJY3MKLQkJcmlwCi0JCXIxMQotCXJzcC0+CXJjeAotCi0JSW4gYWxsIHRoZSBlbnRyeXBvaW50cywgd2UgdW5kbyBhbGwgdGhhdCB0byBtYWtlIGl0IGxvb2sKLQlsaWtlIGEgQ1BVLWdlbmVyYXRlZCBzeXNjYWxsL3N5c2VudGVyIGFuZCBqdW1wIHRvIHRoZSBub3JtYWwKLQllbnRyeXBvaW50LgorICogWGVuIGhhbmRsZXMgc3lzY2FsbCBjYWxsYmFja3MgbXVjaCBsaWtlIG9yZGluYXJ5IGV4Y2VwdGlvbnMsIHdoaWNoCisgKiBtZWFucyB3ZSBoYXZlOgorICogLSBrZXJuZWwgZ3MKKyAqIC0ga2VybmVsIHJzcAorICogLSBhbiBpcmV0LWxpa2Ugc3RhY2sgZnJhbWUgb24gdGhlIHN0YWNrIChpbmNsdWRpbmcgcmN4IGFuZCByMTEpOgorICoJc3MKKyAqCXJzcAorICoJcmZsYWdzCisgKgljcworICoJcmlwCisgKglyMTEKKyAqIHJzcC0+cmN4CisgKgorICogSW4gYWxsIHRoZSBlbnRyeXBvaW50cywgd2UgdW5kbyBhbGwgdGhhdCB0byBtYWtlIGl0IGxvb2sgbGlrZSBhCisgKiBDUFUtZ2VuZXJhdGVkIHN5c2NhbGwvc3lzZW50ZXIgYW5kIGp1bXAgdG8gdGhlIG5vcm1hbCBlbnRyeXBvaW50LgogICovCiAKIC5tYWNybyB1bmRvX3hlbl9zeXNjYWxsCi0JbW92IDAqOCglcnNwKSwlcmN4Ci0JbW92IDEqOCglcnNwKSwlcjExCi0JbW92IDUqOCglcnNwKSwlcnNwCisJbW92IDAqOCglcnNwKSwgJXJjeAorCW1vdiAxKjgoJXJzcCksICVyMTEKKwltb3YgNSo4KCVyc3ApLCAlcnNwCiAuZW5kbQogCiAvKiBOb3JtYWwgNjQtYml0IHN5c3RlbSBjYWxsIHRhcmdldCAqLwpAQCAtMjc1LDcgKzE0OSw3IEBACiAKIEVOVFJZKHhlbl9zeXNjYWxsMzJfdGFyZ2V0KQogRU5UUlkoeGVuX3N5c2VudGVyX3RhcmdldCkKLQlsZWEgMTYoJXJzcCksICVyc3AJLyogc3RyaXAgJXJjeCwlcjExICovCisJbGVhIDE2KCVyc3ApLCAlcnNwCS8qIHN0cmlwICVyY3gsICVyMTEgKi8KIAltb3YgJC1FTk9TWVMsICVyYXgKIAlwdXNocSAkVkdDRl9pbl9zeXNjYWxsCiAJam1wIGh5cGVyY2FsbF9pcmV0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWhlYWQuUyBiL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCmluZGV4IDYzZDQ5YTUuLjFhNWZmMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9lbGZub3RlLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9pbnRlcmZhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmggYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCmluZGV4IGMxZjhmYWYuLjJmNWVmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKKysrIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaApAQCAtMTAsOSArMTAsMTIgQEAKIGV4dGVybiBjb25zdCBjaGFyIHhlbl9oeXBlcnZpc29yX2NhbGxiYWNrW107CiBleHRlcm4gY29uc3QgY2hhciB4ZW5fZmFpbHNhZmVfY2FsbGJhY2tbXTsKIAorZXh0ZXJuIHZvaWQgKnhlbl9pbml0aWFsX2dkdDsKKwogc3RydWN0IHRyYXBfaW5mbzsKIHZvaWQgeGVuX2NvcHlfdHJhcF9pbmZvKHN0cnVjdCB0cmFwX2luZm8gKnRyYXBzKTsKIAorREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB2Y3B1X2luZm8sIHhlbl92Y3B1X2luZm8pOwogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jcjMpOwogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jdXJyZW50X2NyMyk7CiAKQEAgLTIyLDYgKzI1LDEzIEBACiAKIHZvaWQgeGVuX3NldHVwX21mbl9saXN0X2xpc3Qodm9pZCk7CiB2b2lkIHhlbl9zZXR1cF9zaGFyZWRfaW5mbyh2b2lkKTsKK3ZvaWQgeGVuX3NldHVwX21hY2hwaHlzX21hcHBpbmcodm9pZCk7CitwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKTsKK3ZvaWQgeGVuX2lkZW50X21hcF9JU0Eodm9pZCk7Cit2b2lkIHhlbl9yZXNlcnZlX3RvcCh2b2lkKTsKKwordm9pZCB4ZW5fbGVhdmVfbGF6eSh2b2lkKTsKK3ZvaWQgeGVuX3Bvc3RfYWxsb2NhdG9yX2luaXQodm9pZCk7CiAKIGNoYXIgKiBfX2luaXQgeGVuX21lbW9yeV9zZXR1cCh2b2lkKTsKIHZvaWQgX19pbml0IHhlbl9hcmNoX3NldHVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2MTAwNjgyLi5kZDFhN2E0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjUsNCArNjUsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmCS8qIF9YVEVOU0FfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBmNTBiNjk3Li4yMjZhMzkxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9YVEVOU0FfU1dBQl9ICiAjZGVmaW5lIF9YVEVOU0FfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IDVmYmNkZTUuLmYzYjY2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMjliY2ZhYy4uOTk2ZWQ5MCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC02MDMsMTMgKzYwMywxMCBAQAogCXEtPnF1ZXVlX2ZsYWdzCQk9IFFVRVVFX0ZMQUdfREVGQVVMVDsKIAlxLT5xdWV1ZV9sb2NrCQk9IGxvY2s7CiAKLQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCBCTEtfU0VHX0JPVU5EQVJZX01BU0spOwotCisJLyoKKwkgKiBUaGlzIGFsc28gc2V0cyBody9waHlzIHNlZ21lbnRzLCBib3VuZGFyeSBhbmQgc2l6ZQorCSAqLwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocSwgX19tYWtlX3JlcXVlc3QpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIE1BWF9TRUdNRU5UX1NJWkUpOwotCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBNQVhfSFdfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBNQVhfUEhZU19TRUdNRU5UUyk7CiAKIAlxLT5zZ19yZXNlcnZlZF9zaXplID0gSU5UX01BWDsKIApAQCAtNzM1LDcgKzczMiw2IEBACiAJCV9fZnJlZWRfcmVxdWVzdChxLCBydyBeIDEpOwogfQogCi0jZGVmaW5lIGJsa2Rldl9mcmVlX3JxKGxpc3QpIGxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQogLyoKICAqIEdldCBhIGZyZWUgcmVxdWVzdCwgcXVldWVfbG9jayBtdXN0IGJlIGhlbGQuCiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgd2l0aCBxdWV1ZV9sb2NrIGhlbGQuCkBAIC0xMDY2LDYgKzEwNjIsOSBAQAogCiAJZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KHEsIHJlcSk7CiAKKwkvKiB0aGlzIGlzIGEgYmlvIGxlYWsgKi8KKwlXQVJOX09OKHJlcS0+YmlvICE9IE5VTEwpOworCiAJLyoKIAkgKiBSZXF1ZXN0IG1heSBub3QgaGF2ZSBvcmlnaW5hdGVkIGZyb20gbGxfcndfYmxrLiBpZiBub3QsCiAJICogaXQgZGlkbid0IGNvbWUgb3V0IG9mIG91ciByZXNlcnZlZCBycSBwb29scwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA1YTI0NGYwLi5lMzljYjI0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtNDAzLDYgKzQwMyw4IEBACiAJaWYgKGJsa19ycV9jcHVfdmFsaWQobmV4dCkpCiAJCXJlcS0+Y3B1ID0gbmV4dC0+Y3B1OwogCisJLyogb3duZXItc2hpcCBvZiBiaW8gcGFzc2VkIGZyb20gbmV4dCB0byByZXEgKi8KKwluZXh0LT5iaW8gPSBOVUxMOwogCV9fYmxrX3B1dF9yZXF1ZXN0KHEsIG5leHQpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrdHJhY2UuYyBiL2Jsb2NrL2Jsa3RyYWNlLmMKaW5kZXggN2NmOWQxZi4uMDI4MTIwYSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrdHJhY2UuYworKysgYi9ibG9jay9ibGt0cmFjZS5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAlpZiAoIWJ0LT5zZXF1ZW5jZSkKIAkJZ290byBlcnI7CiAKLQlidC0+bXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRyk7CisJYnQtPm1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTsKIAlpZiAoIWJ0LT5tc2dfZGF0YSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggMGNlODgwNi4uMjA2MDYwZSAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTIxOCw5ICsyMTgsNiBAQAogCiAJaWYgKGhkci0+Z3VhcmQgIT0gJ1EnKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaGRyLT5kb3V0X3hmZXJfbGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpIHx8Ci0JICAgIGhkci0+ZGluX3hmZXJfbGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpKQotCQlyZXR1cm4gLUVJTzsKIAogCXN3aXRjaCAoaGRyLT5wcm90b2NvbCkgewogCWNhc2UgQlNHX1BST1RPQ09MX1NDU0k6CkBAIC0zNTMsNiArMzUwLDggQEAKIHN0YXRpYyB2b2lkIGJzZ19hZGRfY29tbWFuZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJICAgIHN0cnVjdCBic2dfY29tbWFuZCAqYmMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlpbnQgYXRfaGVhZCA9ICgwID09IChiYy0+aGRyLmZsYWdzICYgQlNHX0ZMQUdfUV9BVF9UQUlMKSk7CisKIAkvKgogCSAqIGFkZCBiYyBjb21tYW5kIHRvIGJ1c3kgcXVldWUgYW5kIHN1Ym1pdCBycSBmb3IgaW8KIAkgKi8KQEAgLTM2OCw3ICszNjcsNyBAQAogCWRwcmludGsoIiVzOiBxdWV1ZWluZyBycSAlcCwgYmMgJXBcbiIsIGJkLT5uYW1lLCBycSwgYmMpOwogCiAJcnEtPmVuZF9pb19kYXRhID0gYmM7Ci0JYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHEsIE5VTEwsIHJxLCAxLCBic2dfcnFfZW5kX2lvKTsKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocSwgTlVMTCwgcnEsIGF0X2hlYWQsIGJzZ19ycV9lbmRfaW8pOwogfQogCiBzdGF0aWMgc3RydWN0IGJzZ19jb21tYW5kICpic2dfbmV4dF9kb25lX2NtZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQpCkBAIC05MjQsNiArOTIzLDcgQEAKIAkJc3RydWN0IHJlcXVlc3QgKnJxOwogCQlzdHJ1Y3QgYmlvICpiaW8sICpiaWRpX2JpbyA9IE5VTEw7CiAJCXN0cnVjdCBzZ19pb192NCBoZHI7CisJCWludCBhdF9oZWFkOwogCQl1OCBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaGRyLCB1YXJnLCBzaXplb2YoaGRyKSkpCkBAIC05MzYsNyArOTM2LDkgQEAKIAkJYmlvID0gcnEtPmJpbzsKIAkJaWYgKHJxLT5uZXh0X3JxKQogCQkJYmlkaV9iaW8gPSBycS0+bmV4dF9ycS0+YmlvOwotCQlibGtfZXhlY3V0ZV9ycShiZC0+cXVldWUsIE5VTEwsIHJxLCAwKTsKKworCQlhdF9oZWFkID0gKDAgPT0gKGhkci5mbGFncyAmIEJTR19GTEFHX1FfQVRfVEFJTCkpOworCQlibGtfZXhlY3V0ZV9ycShiZC0+cXVldWUsIE5VTEwsIHJxLCBhdF9oZWFkKTsKIAkJcmV0ID0gYmxrX2NvbXBsZXRlX3NndjRfaGRyX3JxKHJxLCAmaGRyLCBiaW8sIGJpZGlfYmlvKTsKIAogCQlpZiAoY29weV90b191c2VyKHVhcmcsICZoZHIsIHNpemVvZihoZHIpKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2NtZC1maWx0ZXIuYyBiL2Jsb2NrL2NtZC1maWx0ZXIuYwppbmRleCA1MDRiMjc1Li41NzJiYmMyIDEwMDY0NAotLS0gYS9ibG9jay9jbWQtZmlsdGVyLmMKKysrIGIvYmxvY2svY21kLWZpbHRlci5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgpkaWZmIC0tZ2l0IGEvYmxvY2svc2NzaV9pb2N0bC5jIGIvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IGVlOWM2N2QuLjYyNmVlMjcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3Njc2lfaW9jdGwuYworKysgYi9ibG9jay9zY3NpX2lvY3RsLmMKQEAgLTIxNCwyMSArMjE0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiB1bm1hcCBhIHJlcXVlc3QgdGhhdCB3YXMgcHJldmlvdXNseSBtYXBwZWQgdG8gdGhpcyBzZ19pb19oZHIuIGhhbmRsZXMKLSAqIGJvdGggc2cgYW5kIG5vbi1zZyBzZ19pb19oZHIuCi0gKi8KLXN0YXRpYyBpbnQgYmxrX3VubWFwX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHNnX2lvX2hkciAqaGRyKQotewotCWJsa19ycV91bm1hcF91c2VyKHJxLT5iaW8pOwotCWJsa19wdXRfcmVxdWVzdChycSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYmxrX2NvbXBsZXRlX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHNnX2lvX2hkciAqaGRyLAogCQkJCSBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaW50IHIsIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAkvKgogCSAqIGZpbGwgaW4gYWxsIHRoZSBvdXRwdXQgbWVtYmVycwpAQCAtMjUzLDEyICsyNDIsMTAgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCi0JcnEtPmJpbyA9IGJpbzsKLQlyID0gYmxrX3VubWFwX3NnaGRyX3JxKHJxLCBoZHIpOwotCWlmIChyZXQpCi0JCXIgPSByZXQ7CisJYmxrX3JxX3VubWFwX3VzZXIoYmlvKTsKKwlibGtfcHV0X3JlcXVlc3QocnEpOwogCi0JcmV0dXJuIHI7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzZ19pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4IDhkZGU0ZmMuLjc0ZDBlNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC01Niw2ICs1Niw3IEBACiAJdHJpc3RhdGUKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKIAlzZWxlY3QgQ1JZUFRPX1JORzIKKwlzZWxlY3QgQ1JZUFRPX1dPUktRVUVVRQogCiBjb25maWcgQ1JZUFRPX0hBU0gKIAl0cmlzdGF0ZQpAQCAtNzUsNiArNzYsMTAgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBDUllQVE9fQUxHQVBJMgogCitjb25maWcgQ1JZUFRPX1BDT01QCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKKwogY29uZmlnIENSWVBUT19NQU5BR0VSCiAJdHJpc3RhdGUgIkNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtIG1hbmFnZXIiCiAJc2VsZWN0IENSWVBUT19NQU5BR0VSMgpAQCAtODcsNiArOTIsNyBAQAogCXNlbGVjdCBDUllQVE9fQUVBRDIKIAlzZWxlY3QgQ1JZUFRPX0hBU0gyCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIyCisJc2VsZWN0IENSWVBUT19QQ09NUAogCiBjb25maWcgQ1JZUFRPX0dGMTI4TVVMCiAJdHJpc3RhdGUgIkdGKDJeMTI4KSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCkBAIC0xMDYsMTEgKzExMiwxNSBAQAogCWhlbHAKIAkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KIAorY29uZmlnIENSWVBUT19XT1JLUVVFVUUKKyAgICAgICB0cmlzdGF0ZQorCiBjb25maWcgQ1JZUFRPX0NSWVBURAogCXRyaXN0YXRlICJTb2Z0d2FyZSBhc3luYyBjcnlwdG8gZGFlbW9uIgogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCiAJc2VsZWN0IENSWVBUT19IQVNICiAJc2VsZWN0IENSWVBUT19NQU5BR0VSCisJc2VsZWN0IENSWVBUT19XT1JLUVVFVUUKIAloZWxwCiAJICBUaGlzIGlzIGEgZ2VuZXJpYyBzb2Z0d2FyZSBhc3luY2hyb25vdXMgY3J5cHRvIGRhZW1vbiB0aGF0CiAJICBjb252ZXJ0cyBhbiBhcmJpdHJhcnkgc3luY2hyb25vdXMgc29mdHdhcmUgY3J5cHRvIGFsZ29yaXRobQpAQCAtNDcwLDYgKzQ4MCwzMSBAQAogCiAJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBDUllQVE9fQUVTX05JX0lOVEVMCisJdHJpc3RhdGUgIkFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoQUVTLU5JKSIKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQKKwlzZWxlY3QgQ1JZUFRPX0FFU19YODZfNjQKKwlzZWxlY3QgQ1JZUFRPX0NSWVBURAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJaGVscAorCSAgVXNlIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgZm9yIEFFUyBhbGdvcml0aG0uCisKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwKKwkgIGFsZ29yaXRobS4KKworCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCisJICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZworCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCisJICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKKwkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKKwkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KKworCSAgVGhlIEFFUyBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMKKworCSAgU2VlIDxodHRwOi8vY3NyYy5uaXN0Lmdvdi9lbmNyeXB0aW9uL2Flcy8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgQ1JZUFRPX0FOVUJJUwogCXRyaXN0YXRlICJBbnViaXMgY2lwaGVyIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpAQCAtNzE0LDYgKzc0OSwxNSBAQAogCiAJICBZb3Ugd2lsbCBtb3N0IHByb2JhYmx5IHdhbnQgdGhpcyBpZiB1c2luZyBJUFNlYy4KIAorY29uZmlnIENSWVBUT19aTElCCisJdHJpc3RhdGUgIlpsaWIgY29tcHJlc3Npb24gYWxnb3JpdGhtIgorCXNlbGVjdCBDUllQVE9fUENPTVAKKwlzZWxlY3QgWkxJQl9JTkZMQVRFCisJc2VsZWN0IFpMSUJfREVGTEFURQorCXNlbGVjdCBOTEFUVFIKKwloZWxwCisJICBUaGlzIGlzIHRoZSB6bGliIGFsZ29yaXRobS4KKwogY29uZmlnIENSWVBUT19MWk8KIAl0cmlzdGF0ZSAiTFpPIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDQ2YjA4YmYuLjY3M2Q5ZjcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTUsNiArNSw4IEBACiBvYmotJChDT05GSUdfQ1JZUFRPKSArPSBjcnlwdG8ubwogY3J5cHRvLW9ianMgOj0gYXBpLm8gY2lwaGVyLm8gZGlnZXN0Lm8gY29tcHJlc3MubwogCitvYmotJChDT05GSUdfQ1JZUFRPX1dPUktRVUVVRSkgKz0gY3J5cHRvX3dxLm8KKwogb2JqLSQoQ09ORklHX0NSWVBUT19GSVBTKSArPSBmaXBzLm8KIAogY3J5cHRvX2FsZ2FwaS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KQEAgLTI1LDYgKzI3LDggQEAKIGNyeXB0b19oYXNoLW9ianMgKz0gc2hhc2gubwogb2JqLSQoQ09ORklHX0NSWVBUT19IQVNIMikgKz0gY3J5cHRvX2hhc2gubwogCitvYmotJChDT05GSUdfQ1JZUFRPX1BDT01QKSArPSBwY29tcHJlc3MubworCiBjcnlwdG9tZ3Itb2JqcyA6PSBhbGdib3NzLm8gdGVzdG1nci5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fTUFOQUdFUjIpICs9IGNyeXB0b21nci5vCkBAIC03MCw2ICs3NCw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX1NFRUQpICs9IHNlZWQubwogb2JqLSQoQ09ORklHX0NSWVBUT19TQUxTQTIwKSArPSBzYWxzYTIwX2dlbmVyaWMubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERUZMQVRFKSArPSBkZWZsYXRlLm8KK29iai0kKENPTkZJR19DUllQVE9fWkxJQikgKz0gemxpYi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDKSArPSBtaWNoYWVsX21pYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSQzMyQykgKz0gY3JjMzJjLm8KIG9iai0kKENPTkZJR19DUllQVE9fQVVUSEVOQykgKz0gYXV0aGVuYy5vCmRpZmYgLS1naXQgYS9jcnlwdG8vYWJsa2NpcGhlci5jIGIvY3J5cHRvL2FibGtjaXBoZXIuYwppbmRleCA5NDE0MGIzLi5lMTFjZTM3IDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTI4Miw2ICsyODIsMjUgQEAKIAkJCQkJICBhbGctPmNyYV9hYmxrY2lwaGVyLml2c2l6ZSkpCiAJCXJldHVybiBhbGc7CiAKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlIHwgQ1JZUFRPX0FMR19URVNURUQsCisJCQkJICAgIG1hc2sgJiB+Q1JZUFRPX0FMR19URVNURUQpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIGFsZzsKKworCWlmICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgQ1JZUFRPX0FMR19UWVBFX0dJVkNJUEhFUikgeworCQlpZiAoKGFsZy0+Y3JhX2ZsYWdzIF4gdHlwZSBeIH5tYXNrKSAmIENSWVBUT19BTEdfVEVTVEVEKSB7CisJCQljcnlwdG9fbW9kX3B1dChhbGcpOworCQkJYWxnID0gRVJSX1BUUigtRU5PRU5UKTsKKwkJfQorCQlyZXR1cm4gYWxnOworCX0KKworCUJVR19PTighKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCQkgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiA/IGFsZy0+Y3JhX2Jsa2NpcGhlci5pdnNpemUgOgorCQkJCQkgICAgIGFsZy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplKSk7CisKIAlyZXR1cm4gRVJSX1BUUihjcnlwdG9fZ2l2Y2lwaGVyX2RlZmF1bHQoYWxnLCB0eXBlLCBtYXNrKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hZWFkLmMgYi9jcnlwdG8vYWVhZC5jCmluZGV4IDNhNmYzZjUuLmQ5YWE3MzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZWFkLmMKKysrIGIvY3J5cHRvL2FlYWQuYwpAQCAtNDIyLDYgKzQyMiwyMiBAQAogCWlmICghYWxnLT5jcmFfYWVhZC5pdnNpemUpCiAJCXJldHVybiBhbGc7CiAKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlIHwgQ1JZUFRPX0FMR19URVNURUQsCisJCQkJICAgIG1hc2sgJiB+Q1JZUFRPX0FMR19URVNURUQpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIGFsZzsKKworCWlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWVhZF90eXBlKSB7CisJCWlmICgoYWxnLT5jcmFfZmxhZ3MgXiB0eXBlIF4gfm1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpIHsKKwkJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCQlhbGcgPSBFUlJfUFRSKC1FTk9FTlQpOworCQl9CisJCXJldHVybiBhbGc7CisJfQorCisJQlVHX09OKCFhbGctPmNyYV9hZWFkLml2c2l6ZSk7CisKIAlyZXR1cm4gRVJSX1BUUihjcnlwdG9fbml2YWVhZF9kZWZhdWx0KGFsZywgdHlwZSwgbWFzaykpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYm9zcy5jIGIvY3J5cHRvL2FsZ2Jvc3MuYwppbmRleCA0NjAxZTQyNi4uNjkwNmY5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2Jvc3MuYworKysgYi9jcnlwdG8vYWxnYm9zcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjA2LDggKzIwNiw3IEBACiAJdTMyIHR5cGUgPSBwYXJhbS0+dHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghKCh0eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUikgJgotCSAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikpCisJaWYgKHR5cGUgJiBDUllQVE9fQUxHX1RFU1RFRCkKIAkJZ290byBza2lwdGVzdDsKIAogCWVyciA9IGFsZ190ZXN0KHBhcmFtLT5kcml2ZXIsIHBhcmFtLT5hbGcsIHR5cGUsIENSWVBUT19BTEdfVEVTVEVEKTsKQEAgLTIyMyw2ICsyMjIsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwogCXN0cnVjdCBjcnlwdG9fdGVzdF9wYXJhbSAqcGFyYW07CisJdTMyIHR5cGU7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBlcnI7CkBAIC0yMzMsNyArMjMzLDE5IEBACiAKIAltZW1jcHkocGFyYW0tPmRyaXZlciwgYWxnLT5jcmFfZHJpdmVyX25hbWUsIHNpemVvZihwYXJhbS0+ZHJpdmVyKSk7CiAJbWVtY3B5KHBhcmFtLT5hbGcsIGFsZy0+Y3JhX25hbWUsIHNpemVvZihwYXJhbS0+YWxnKSk7Ci0JcGFyYW0tPnR5cGUgPSBhbGctPmNyYV9mbGFnczsKKwl0eXBlID0gYWxnLT5jcmFfZmxhZ3M7CisKKwkvKiBUaGlzIHBpZWNlIG9mIGNyYXAgbmVlZHMgdG8gZGlzYXBwZWFyIGludG8gcGVyLXR5cGUgdGVzdCBob29rcy4gKi8KKwlpZiAoKCEoKHR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSKSAmCisJICAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikgJiYKKwkgICAgICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgICBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSID8gYWxnLT5jcmFfYmxrY2lwaGVyLml2c2l6ZSA6CisJCQkJCSAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKSB8fAorCSAgICAoISgodHlwZSBeIENSWVBUT19BTEdfVFlQRV9BRUFEKSAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSAmJgorCSAgICAgYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX25pdmFlYWRfdHlwZSAmJiBhbGctPmNyYV9hZWFkLml2c2l6ZSkpCisJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CisKKwlwYXJhbS0+dHlwZSA9IHR5cGU7CiAKIAl0aHJlYWQgPSBrdGhyZWFkX3J1bihjcnlwdG9tZ3JfdGVzdCwgcGFyYW0sICJjcnlwdG9tZ3JfdGVzdCIpOwogCWlmIChJU19FUlIodGhyZWFkKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hbnNpX2Nwcm5nLmMgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCmluZGV4IDBmYWM4ZmYuLmQ4MGVkNGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnNpX2Nwcm5nLmMKKysrIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwpAQCAtMTMyLDkgKzEzMiwxNSBAQAogCQkJICovCiAJCQlpZiAoIW1lbWNtcChjdHgtPnJhbmRfZGF0YSwgY3R4LT5sYXN0X3JhbmRfZGF0YSwKIAkJCQkJREVGQVVMVF9CTEtfU1opKSB7CisJCQkJaWYgKGZpcHNfZW5hYmxlZCkgeworCQkJCQlwYW5pYygiY3BybmcgJXAgRmFpbGVkIHJlcGV0aXRpb24gY2hlY2shXG4iLAorCQkJCQkJY3R4KTsKKwkJCQl9CisKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJImN0eCAlcCBGYWlsZWQgcmVwZXRpdGlvbiBjaGVjayFcbiIsCiAJCQkJCWN0eCk7CisKIAkJCQljdHgtPmZsYWdzIHw9IFBSTkdfTkVFRF9SRVNFVDsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTMzOCw3ICszNDQsMTYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZjdHgtPnBybmdfbG9jayk7CiAKLQlyZXR1cm4gcmVzZXRfcHJuZ19jb250ZXh0KGN0eCwgTlVMTCwgREVGQVVMVF9QUk5HX0tTWiwgTlVMTCwgTlVMTCk7CisJaWYgKHJlc2V0X3BybmdfY29udGV4dChjdHgsIE5VTEwsIERFRkFVTFRfUFJOR19LU1osIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGFmdGVyIGFsbG9jYXRpb24sIHdlIHNob3VsZCBhbHdheXMgZm9yY2UgdGhlIHVzZXIgdG8gcmVzZXQKKwkgKiBzbyB0aGV5IGRvbid0IGluYWR2ZXJ0ZW50bHkgdXNlIHRoZSBpbnNlY3VyZSBkZWZhdWx0IHZhbHVlcworCSAqIHdpdGhvdXQgc3BlY2lmeWluZyB0aGVtIGludGVudGlhbGx5CisJICovCisJY3R4LT5mbGFncyB8PSBQUk5HX05FRURfUkVTRVQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNwcm5nX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCAzOGEyYmMwLi4zMTRkYWI5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqbGFydmFsOwogCWludCBvazsKIAotCWlmICghKG1hc2sgJiBDUllQVE9fQUxHX1RFU1RFRCkpIHsKKwlpZiAoISgodHlwZSB8IG1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpKSB7CiAJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CiAJCW1hc2sgfD0gQ1JZUFRPX0FMR19URVNURUQ7CiAJfQpAQCAtNDY0LDggKzQ2NCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfYmFzZSk7CiAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3ZvaWQgKmNyeXB0b19jcmVhdGVfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQogewogCWNoYXIgKm1lbTsKIAlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gTlVMTDsKQEAgLTQ5OSw5ICs0OTksOSBAQAogCQljcnlwdG9fc2hvb3RfYWxnKGFsZyk7CiAJa2ZyZWUobWVtKTsKIG91dF9lcnI6Ci0JdGZtID0gRVJSX1BUUihlcnIpOworCW1lbSA9IEVSUl9QVFIoZXJyKTsKIG91dDoKLQlyZXR1cm4gdGZtOworCXJldHVybiBtZW07CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fY3JlYXRlX3RmbSk7CiAKQEAgLTUyNSwxMiArNTI1LDExIEBACiAgKgogICoJSW4gY2FzZSBvZiBlcnJvciB0aGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIHBvaW50ZXIuCiAgKi8KLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAotCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spCit2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICooKmxvb2t1cCkoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXZvaWQgKnRmbTsKIAlpbnQgZXJyOwogCiAJdHlwZSAmPSBmcm9udGVuZC0+bWFza2NsZWFyOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsa2NpcGhlci5jIGIvY3J5cHRvL2Jsa2NpcGhlci5jCmluZGV4IGQ3MGE0MWMuLjkwZDI2YzkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYmxrY2lwaGVyLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWludCBlcnI7CiAKIAl0eXBlID0gY3J5cHRvX3NrY2lwaGVyX3R5cGUodHlwZSk7Ci0JbWFzayA9IGNyeXB0b19za2NpcGhlcl9tYXNrKG1hc2spIHwgQ1JZUFRPX0FMR19HRU5JVjsKKwltYXNrID0gY3J5cHRvX3NrY2lwaGVyX21hc2sobWFzayl8IENSWVBUT19BTEdfR0VOSVY7CiAKIAlhbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSwgdHlwZSwgbWFzayk7CiAJaWYgKElTX0VSUihhbGcpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NoYWluaXYuYyBiL2NyeXB0by9jaGFpbml2LmMKaW5kZXggN2MzN2E0OS4uYmEyMDBiMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NoYWluaXYuYworKysgYi9jcnlwdG8vY2hhaW5pdi5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaD4KICNpbmNsdWRlIDxjcnlwdG8vcm5nLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEzMyw3ICsxMzQsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcXVldWVkID0gc2NoZWR1bGVfd29yaygmY3R4LT5wb3N0cG9uZWQpOworCXF1ZXVlZCA9IHF1ZXVlX3dvcmsoa2NyeXB0b193cSwgJmN0eC0+cG9zdHBvbmVkKTsKIAlCVUdfT04oIXF1ZXVlZCk7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdGQuYyBiL2NyeXB0by9jcnlwdGQuYwppbmRleCBkMjllMDZiLi5kMTRiMjI2IDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRkLmMKKysrIGIvY3J5cHRvL2NyeXB0ZC5jCkBAIC0xMiwzMCArMTIsMzEgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdGQuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNkZWZpbmUgQ1JZUFREX01BWF9RTEVOIDEwMAorI2RlZmluZSBDUllQVERfTUFYX0NQVV9RTEVOIDEwMAogCi1zdHJ1Y3QgY3J5cHRkX3N0YXRlIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4Oworc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgewogCXN0cnVjdCBjcnlwdG9fcXVldWUgcXVldWU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKworc3RydWN0IGNyeXB0ZF9xdWV1ZSB7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKIH07CiAKIHN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4IHsKIAlzdHJ1Y3QgY3J5cHRvX3NwYXduIHNwYXduOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOwogfTsKIAogc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4IHsKQEAgLTU0LDExICs1NSw4NSBAQAogCWNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdGRfc3RhdGUgKmNyeXB0ZF9nZXRfc3RhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyB2b2lkIGNyeXB0ZF9xdWV1ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIGludCBjcnlwdGRfaW5pdF9xdWV1ZShzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IG1heF9jcHVfcWxlbikKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwlxdWV1ZS0+Y3B1X3F1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlKTsKKwlpZiAoIXF1ZXVlLT5jcHVfcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwkJY3J5cHRvX2luaXRfcXVldWUoJmNwdV9xdWV1ZS0+cXVldWUsIG1heF9jcHVfcWxlbik7CisJCUlOSVRfV09SSygmY3B1X3F1ZXVlLT53b3JrLCBjcnlwdGRfcXVldWVfd29ya2VyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0ZF9maW5pX3F1ZXVlKHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQoreworCWludCBjcHU7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwkJQlVHX09OKGNwdV9xdWV1ZS0+cXVldWUucWxlbik7CisJfQorCWZyZWVfcGVyY3B1KHF1ZXVlLT5jcHVfcXVldWUpOworfQorCitzdGF0aWMgaW50IGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3Qoc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUsCisJCQkJICBzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJaW50IGNwdSwgZXJyOworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwllcnIgPSBjcnlwdG9fZW5xdWV1ZV9yZXF1ZXN0KCZjcHVfcXVldWUtPnF1ZXVlLCByZXF1ZXN0KTsKKwlxdWV1ZV93b3JrX29uKGNwdSwga2NyeXB0b193cSwgJmNwdV9xdWV1ZS0+d29yayk7CisJcHV0X2NwdSgpOworCisJcmV0dXJuIGVycjsKK30KKworLyogQ2FsbGVkIGluIHdvcmtxdWV1ZSBjb250ZXh0LCBkbyBvbmUgcmVhbCBjcnlwdGlvbiB3b3JrICh2aWEKKyAqIHJlcS0+Y29tcGxldGUpIGFuZCByZXNjaGVkdWxlIGl0c2VsZiBpZiB0aGVyZSBhcmUgbW9yZSB3b3JrIHRvCisgKiBkby4gKi8KK3N0YXRpYyB2b2lkIGNyeXB0ZF9xdWV1ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsICpiYWNrbG9nOworCisJY3B1X3F1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlLCB3b3JrKTsKKwkvKiBPbmx5IGhhbmRsZSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgdG8gYXZvaWQgaG9nZ2luZyBjcnlwdG8KKwkgKiB3b3JrcXVldWUuIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgaXMgdXNlZCB0byBwcmV2ZW50CisJICogYmVpbmcgcHJlZW1wdGVkIGJ5IGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3QoKSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCWJhY2tsb2cgPSBjcnlwdG9fZ2V0X2JhY2tsb2coJmNwdV9xdWV1ZS0+cXVldWUpOworCXJlcSA9IGNyeXB0b19kZXF1ZXVlX3JlcXVlc3QoJmNwdV9xdWV1ZS0+cXVldWUpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJaWYgKGJhY2tsb2cpCisJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csIC1FSU5QUk9HUkVTUyk7CisJcmVxLT5jb21wbGV0ZShyZXEsIDApOworCisJaWYgKGNwdV9xdWV1ZS0+cXVldWUucWxlbikKKwkJcXVldWVfd29yayhrY3J5cHRvX3dxLCAmY3B1X3F1ZXVlLT53b3JrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpjcnlwdGRfZ2V0X3F1ZXVlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9IGNyeXB0b190Zm1fYWxnX2luc3RhbmNlKHRmbSk7CiAJc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggKmljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwotCXJldHVybiBpY3R4LT5zdGF0ZTsKKwlyZXR1cm4gaWN0eC0+cXVldWU7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2Jsa2NpcGhlcl9zZXRrZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpwYXJlbnQsCkBAIC0xMzAsMTkgKzIwNSwxMyBAQAogewogCXN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPQotCQljcnlwdGRfZ2V0X3N0YXRlKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pKTsKLQlpbnQgZXJyOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOwogCisJcXVldWUgPSBjcnlwdGRfZ2V0X3F1ZXVlKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pKTsKIAlyY3R4LT5jb21wbGV0ZSA9IHJlcS0+YmFzZS5jb21wbGV0ZTsKIAlyZXEtPmJhc2UuY29tcGxldGUgPSBjb21wbGV0ZTsKIAotCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCWVyciA9IGFibGtjaXBoZXJfZW5xdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUsIHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCXdha2VfdXBfcHJvY2VzcyhzdGF0ZS0+dGFzayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRkX2VucXVldWVfcmVxdWVzdChxdWV1ZSwgJnJlcS0+YmFzZSk7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2Jsa2NpcGhlcl9lbmNyeXB0X2VucXVldWUoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQpAQCAtMTc2LDIxICsyNDUsMTIgQEAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9ibGtjaXBoZXJfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPSBjcnlwdGRfZ2V0X3N0YXRlKHRmbSk7Ci0JaW50IGFjdGl2ZTsKLQotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7Ci0JYWN0aXZlID0gYWJsa2NpcGhlcl90Zm1faW5fcXVldWUoJnN0YXRlLT5xdWV1ZSwKLQkJCQkJIF9fY3J5cHRvX2FibGtjaXBoZXJfY2FzdCh0Zm0pKTsKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0KLQlCVUdfT04oYWN0aXZlKTsKIAogCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjdHgtPmNoaWxkKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCQkJICAgICBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwkJCQkJCSAgICAgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKIAlzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCAqY3R4OwpAQCAtMjEzLDcgKzI3Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9pbnN0OwogCi0JY3R4LT5zdGF0ZSA9IHN0YXRlOworCWN0eC0+cXVldWUgPSBxdWV1ZTsKIAogCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOwogCkBAIC0yMzEsNyArMjkxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19ibGtjaXBoZXIoCi0Jc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTI0MSw3ICszMDEsNyBAQAogCWlmIChJU19FUlIoYWxnKSkKIAkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CiAKLQlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgc3RhdGUpOworCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBxdWV1ZSk7CiAJaWYgKElTX0VSUihpbnN0KSkKIAkJZ290byBvdXRfcHV0X2FsZzsKIApAQCAtMjg5LDE1ICszNDksNiBAQAogc3RhdGljIHZvaWQgY3J5cHRkX2hhc2hfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gY3J5cHRkX2dldF9zdGF0ZSh0Zm0pOwotCWludCBhY3RpdmU7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWFjdGl2ZSA9IGFoYXNoX3RmbV9pbl9xdWV1ZSgmc3RhdGUtPnF1ZXVlLAotCQkJCV9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKSk7Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0JQlVHX09OKGFjdGl2ZSk7CiAKIAljcnlwdG9fZnJlZV9oYXNoKGN0eC0+Y2hpbGQpOwogfQpAQCAtMzIzLDE5ICszNzQsMTMgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRkX2hhc2hfcmVxdWVzdF9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9Ci0JCWNyeXB0ZF9nZXRfc3RhdGUoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKLQlpbnQgZXJyOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlID0KKwkJY3J5cHRkX2dldF9xdWV1ZShjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwogCiAJcmN0eC0+Y29tcGxldGUgPSByZXEtPmJhc2UuY29tcGxldGU7CiAJcmVxLT5iYXNlLmNvbXBsZXRlID0gY29tcGxldGU7CiAKLQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQllcnIgPSBhaGFzaF9lbnF1ZXVlX3JlcXVlc3QoJnN0YXRlLT5xdWV1ZSwgcmVxKTsKLQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0Jd2FrZV91cF9wcm9jZXNzKHN0YXRlLT50YXNrKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KHF1ZXVlLCAmcmVxLT5iYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRkX2hhc2hfaW5pdChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcV9hc3luYywgaW50IGVycikKQEAgLTQ2OCw3ICs1MTMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jX2hhc2goCi0Jc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTQ3OCw3ICs1MjMsNyBAQAogCWlmIChJU19FUlIoYWxnKSkKIAkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKIAotCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBzdGF0ZSk7CisJaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHF1ZXVlKTsKIAlpZiAoSVNfRVJSKGluc3QpKQogCQlnb3RvIG91dF9wdXRfYWxnOwogCkBAIC01MDIsNyArNTQ3LDcgQEAKIAlyZXR1cm4gaW5zdDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdGRfc3RhdGUgc3RhdGU7CitzdGF0aWMgc3RydWN0IGNyeXB0ZF9xdWV1ZSBxdWV1ZTsKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCiB7CkBAIC01MTQsOSArNTU5LDkgQEAKIAogCXN3aXRjaCAoYWxndC0+dHlwZSAmIGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUjoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19ibGtjaXBoZXIodGIsICZzdGF0ZSk7CisJCXJldHVybiBjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKHRiLCAmcXVldWUpOwogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0RJR0VTVDoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19oYXNoKHRiLCAmc3RhdGUpOworCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2hhc2godGIsICZxdWV1ZSk7CiAJfQogCiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC01MzcsODIgKzU4Miw1OCBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0ZF9jcmVhdGVfdGhyZWFkKHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlLAotCQkJCSAgICAgICBpbnQgKCpmbikodm9pZCAqZGF0YSksIGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0YXRlLT5sb2NrKTsKLQltdXRleF9pbml0KCZzdGF0ZS0+bXV0ZXgpOwotCWNyeXB0b19pbml0X3F1ZXVlKCZzdGF0ZS0+cXVldWUsIENSWVBURF9NQVhfUUxFTik7CisJY2hhciBjcnlwdGRfYWxnX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm07CiAKLQlzdGF0ZS0+dGFzayA9IGt0aHJlYWRfcnVuKGZuLCBzdGF0ZSwgbmFtZSk7Ci0JaWYgKElTX0VSUihzdGF0ZS0+dGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHN0YXRlLT50YXNrKTsKKwlpZiAoc25wcmludGYoY3J5cHRkX2FsZ19uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJjcnlwdGQoJXMpIiwgYWxnX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXRmbSA9IGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKGNyeXB0ZF9hbGdfbmFtZSwgdHlwZSwgbWFzayk7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gRVJSX0NBU1QodGZtKTsKKwlpZiAoY3J5cHRvX2FibGtjaXBoZXJfdGZtKHRmbSktPl9fY3J0X2FsZy0+Y3JhX21vZHVsZSAhPSBUSElTX01PRFVMRSkgeworCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKHRmbSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KIAotCXJldHVybiAwOworCXJldHVybiBfX2NyeXB0ZF9hYmxrY2lwaGVyX2Nhc3QodGZtKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNyeXB0ZF9zdG9wX3RocmVhZChzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKK3N0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSkKIHsKLQlCVUdfT04oc3RhdGUtPnF1ZXVlLnFsZW4pOwotCWt0aHJlYWRfc3RvcChzdGF0ZS0+dGFzayk7CisJc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgoJnRmbS0+YmFzZSk7CisJcmV0dXJuIGN0eC0+Y2hpbGQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZCk7CiAKLXN0YXRpYyBpbnQgY3J5cHRkX3RocmVhZCh2b2lkICpkYXRhKQordm9pZCBjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKQogewotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gZGF0YTsKLQlpbnQgc3RvcDsKLQotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCi0JZG8gewotCQlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgKmJhY2tsb2c7Ci0KLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCQliYWNrbG9nID0gY3J5cHRvX2dldF9iYWNrbG9nKCZzdGF0ZS0+cXVldWUpOwotCQlyZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUpOwotCQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0JCXN0b3AgPSBrdGhyZWFkX3Nob3VsZF9zdG9wKCk7Ci0KLQkJaWYgKHN0b3AgfHwgcmVxKSB7Ci0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlpZiAocmVxKSB7Ci0JCQkJaWYgKGJhY2tsb2cpCi0JCQkJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csCi0JCQkJCQkJICAtRUlOUFJPR1JFU1MpOwotCQkJCXJlcS0+Y29tcGxldGUocmVxLCAwKTsKLQkJCX0KLQkJfQotCi0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQotCQlzY2hlZHVsZSgpOwotCX0gd2hpbGUgKCFzdG9wKTsKLQotCXJldHVybiAwOworCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoJnRmbS0+YmFzZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgY3J5cHRkX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gY3J5cHRkX2NyZWF0ZV90aHJlYWQoJnN0YXRlLCBjcnlwdGRfdGhyZWFkLCAiY3J5cHRkIik7CisJZXJyID0gY3J5cHRkX2luaXRfcXVldWUoJnF1ZXVlLCBDUllQVERfTUFYX0NQVV9RTEVOKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdGRfdG1wbCk7CiAJaWYgKGVycikKLQkJa3RocmVhZF9zdG9wKHN0YXRlLnRhc2spOworCQljcnlwdGRfZmluaV9xdWV1ZSgmcXVldWUpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNyeXB0ZF9leGl0KHZvaWQpCiB7Ci0JY3J5cHRkX3N0b3BfdGhyZWFkKCZzdGF0ZSk7CisJY3J5cHRkX2ZpbmlfcXVldWUoJnF1ZXVlKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRkX3RtcGwpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX3dxLmMgYi9jcnlwdG8vY3J5cHRvX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjZjYyNAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jcnlwdG9fd3EuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogV29ya3F1ZXVlIGZvciBjcnlwdG8gc3Vic3lzdGVtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnAuCisgKiAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprY3J5cHRvX3dxOworRVhQT1JUX1NZTUJPTF9HUEwoa2NyeXB0b193cSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0b193cV9pbml0KHZvaWQpCit7CisJa2NyeXB0b193cSA9IGNyZWF0ZV93b3JrcXVldWUoImNyeXB0byIpOworCWlmICh1bmxpa2VseSgha2NyeXB0b193cSkpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvX3dxX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShrY3J5cHRvX3dxKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvX3dxX2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvX3dxX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldvcmtxdWV1ZSBmb3IgY3J5cHRvIHN1YnN5c3RlbSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2dmMTI4bXVsLmMgYi9jcnlwdG8vZ2YxMjhtdWwuYwppbmRleCBlY2JlYWExLi5hOTBkMjYwIDEwMDY0NAotLS0gYS9jcnlwdG8vZ2YxMjhtdWwuYworKysgYi9jcnlwdG8vZ2YxMjhtdWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNiwgUmlrIFNuZWwgPHJzbmVsQGN1YmUuZHluZG5zLm9yZz4KICAqCiAgKiBCYXNlZCBvbiBEciBCcmlhbiBHbGFkbWFuJ3MgKEdQTCdkKSB3b3JrIHB1Ymxpc2hlZCBhdAotICogaHR0cDovL2ZwLmdsYWRtYW4ucGx1cy5jb20vY3J5cHRvZ3JhcGh5X3RlY2hub2xvZ3kvaW5kZXguaHRtCisgKiBodHRwOi8vZ2xhZG1hbi5wbHVzaG9zdC5jby51ay9vbGRzaXRlL2NyeXB0b2dyYXBoeV90ZWNobm9sb2d5L2luZGV4LnBocAogICogU2VlIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGJlbG93LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDNjMTlhMjcuLmZjNzZlMWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0xMDksOCArMTA5LDEwIEBACiB2b2lkIGNyeXB0b19zaG9vdF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CiBzdHJ1Y3QgY3J5cHRvX3RmbSAqX19jcnlwdG9fYWxsb2NfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIHUzMiB0eXBlLAogCQkJCSAgICAgIHUzMiBtYXNrKTsKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7Cit2b2lkICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7Cit2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIAogaW50IGNyeXB0b19yZWdpc3Rlcl9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAogCQkJICAgICBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wY29tcHJlc3MuYyBiL2NyeXB0by9wY29tcHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTlhNGFmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3Bjb21wcmVzcy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBQYXJ0aWFsIChkZSljb21wcmVzc2lvbiBvcGVyYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisKK3N0YXRpYyBpbnQgY3J5cHRvX3Bjb21wX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19wY29tcF9leHRzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQoreworCXJldHVybiBhbGctPmNyYV9jdHhzaXplOworfQorCitzdGF0aWMgaW50IGNyeXB0b19wY29tcF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fcGNvbXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCisJX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworc3RhdGljIHZvaWQgY3J5cHRvX3Bjb21wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXNlcV9wcmludGYobSwgInR5cGUgICAgICAgICA6IHBjb21wXG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9fcGNvbXBfdHlwZSA9IHsKKwkuZXh0c2l6ZQk9IGNyeXB0b19wY29tcF9leHRzaXplLAorCS5pbml0CQk9IGNyeXB0b19wY29tcF9pbml0LAorCS5pbml0X3RmbQk9IGNyeXB0b19wY29tcF9pbml0X3RmbSwKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCS5zaG93CQk9IGNyeXB0b19wY29tcF9zaG93LAorI2VuZGlmCisJLm1hc2tjbGVhcgk9IH5DUllQVE9fQUxHX1RZUEVfTUFTSywKKwkubWFza3NldAk9IENSWVBUT19BTEdfVFlQRV9NQVNLLAorCS50eXBlCQk9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MsCisJLnRmbXNpemUJPSBvZmZzZXRvZihzdHJ1Y3QgY3J5cHRvX3Bjb21wLCBiYXNlKSwKK307CisKK3N0cnVjdCBjcnlwdG9fcGNvbXAgKmNyeXB0b19hbGxvY19wY29tcChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCisJCQkJCXUzMiBtYXNrKQoreworCXJldHVybiBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3Bjb21wX3R5cGUsIHR5cGUsIG1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX3Bjb21wKTsKKworaW50IGNyeXB0b19yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmJhc2UgPSAmYWxnLT5iYXNlOworCisJYmFzZS0+Y3JhX3R5cGUgPSAmY3J5cHRvX3Bjb21wX3R5cGU7CisJYmFzZS0+Y3JhX2ZsYWdzICY9IH5DUllQVE9fQUxHX1RZUEVfTUFTSzsKKwliYXNlLT5jcmFfZmxhZ3MgfD0gQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUzsKKworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKGJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKTsKKworaW50IGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZykKK3sKKwlyZXR1cm4gY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcnRpYWwgKGRlKWNvbXByZXNzaW9uIHR5cGUiKTsKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKaW5kZXggY2FhMzU0Mi4uNjM0OWQ4MyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKQEAgLTIsNyArMiw3IEBACiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBTSEEtMjU2LCBhcyBzcGVjaWZpZWQgaW4KLSAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL3Nocy9zaGEyNTYtMzg0LTUxMi5wZGYKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVE0vY2F2cC9kb2N1bWVudHMvc2hzL3NoYTI1Ni0zODQtNTEyLnBkZgogICoKICAqIFNIQS0yNTYgY29kZSBieSBKZWFuLUx1YyBDb29rZSA8amxjb29rZUBjZXJ0YWlua2V5LmNvbT4uCiAgKgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYXNoLmMgYi9jcnlwdG8vc2hhc2guYwppbmRleCBkNWEyYjYxLi43YTY1OTczIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhc2guYworKysgYi9jcnlwdG8vc2hhc2guYwpAQCAtMTgsMTUgKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3NoYXNoX3R5cGU7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19zaGFzaCAqX19jcnlwdG9fc2hhc2hfY2FzdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCXJldHVybiBjb250YWluZXJfb2YodGZtLCBzdHJ1Y3QgY3J5cHRvX3NoYXNoLCBiYXNlKTsKLX0KLQogI2luY2x1ZGUgImludGVybmFsLmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3NoYXNoX3R5cGU7CisKIHN0YXRpYyBpbnQgc2hhc2hfc2V0a2V5X3VuYWxpZ25lZChzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCiAJCQkJICB1bnNpZ25lZCBpbnQga2V5bGVuKQogewpAQCAtMjgyLDggKzI3Nyw3IEBACiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzaGFzaCA9IF9fY3J5cHRvX3NoYXNoX2Nhc3QoY3J5cHRvX2NyZWF0ZV90Zm0oCi0JCWNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSkpOworCXNoYXNoID0gY3J5cHRvX2NyZWF0ZV90Zm0oY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKTsKIAlpZiAoSVNfRVJSKHNoYXNoKSkgewogCQljcnlwdG9fbW9kX3B1dChjYWxnKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2hhc2gpOwpAQCAtMzkxLDggKzM4NSw3IEBACiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzaGFzaCA9IF9fY3J5cHRvX3NoYXNoX2Nhc3QoY3J5cHRvX2NyZWF0ZV90Zm0oCi0JCWNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSkpOworCXNoYXNoID0gY3J5cHRvX2NyZWF0ZV90Zm0oY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKTsKIAlpZiAoSVNfRVJSKHNoYXNoKSkgewogCQljcnlwdG9fbW9kX3B1dChjYWxnKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2hhc2gpOwpAQCAtNDQyLDggKzQzNSw2IEBACiBzdGF0aWMgaW50IGNyeXB0b19zaGFzaF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQogewotCWlmIChmcm9udGVuZC0+dHlwZSAhPSBDUllQVE9fQUxHX1RZUEVfU0hBU0gpCi0JCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQogCkBAIC00ODIsOCArNDczLDcgQEAKIHN0cnVjdCBjcnlwdG9fc2hhc2ggKmNyeXB0b19hbGxvY19zaGFzaChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCiAJCQkJCXUzMiBtYXNrKQogewotCXJldHVybiBfX2NyeXB0b19zaGFzaF9jYXN0KAotCQljcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3NoYXNoX3R5cGUsIHR5cGUsIG1hc2spKTsKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19zaGFzaF90eXBlLCB0eXBlLCBtYXNrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19zaGFzaCk7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCAyOGE0NWExLi5jM2M5MTI0IDEwMDY0NAotLS0gYS9jcnlwdG8vdGNyeXB0LmMKKysrIGIvY3J5cHRvL3RjcnlwdC5jCkBAIC01Myw3ICs1Myw3IEBACiAJImNhc3Q2IiwgImFyYzQiLCAibWljaGFlbF9taWMiLCAiZGVmbGF0ZSIsICJjcmMzMmMiLCAidGVhIiwgInh0ZWEiLAogCSJraGF6YWQiLCAid3A1MTIiLCAid3AzODQiLCAid3AyNTYiLCAidG5lcHJlcyIsICJ4ZXRhIiwgICJmY3J5cHQiLAogCSJjYW1lbGxpYSIsICJzZWVkIiwgInNhbHNhMjAiLCAicm1kMTI4IiwgInJtZDE2MCIsICJybWQyNTYiLCAicm1kMzIwIiwKLQkibHpvIiwgImN0cyIsIE5VTEwKKwkibHpvIiwgImN0cyIsICJ6bGliIiwgTlVMTAogfTsKIAogc3RhdGljIGludCB0ZXN0X2NpcGhlcl9qaWZmaWVzKHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgaW50IGVuYywKQEAgLTY2MSw2ICs2NjEsMTAgQEAKIAkJdGNyeXB0X3Rlc3QoImVjYihzZWVkKSIpOwogCQlicmVhazsKIAorCWNhc2UgNDQ6CisJCXRjcnlwdF90ZXN0KCJ6bGliIik7CisJCWJyZWFrOworCiAJY2FzZSAxMDA6CiAJCXRjcnlwdF90ZXN0KCJobWFjKG1kNSkiKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCBhNzVmMTFmLi5iNTBjM2M2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTcyLDYgKzcyLDEzIEBACiAJfSBjb21wLCBkZWNvbXA7CiB9OwogCitzdHJ1Y3QgcGNvbXBfdGVzdF9zdWl0ZSB7CisJc3RydWN0IHsKKwkJc3RydWN0IHBjb21wX3Rlc3R2ZWMgKnZlY3M7CisJCXVuc2lnbmVkIGludCBjb3VudDsKKwl9IGNvbXAsIGRlY29tcDsKK307CisKIHN0cnVjdCBoYXNoX3Rlc3Rfc3VpdGUgewogCXN0cnVjdCBoYXNoX3Rlc3R2ZWMgKnZlY3M7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtODYsNiArOTMsNyBAQAogCQlzdHJ1Y3QgYWVhZF90ZXN0X3N1aXRlIGFlYWQ7CiAJCXN0cnVjdCBjaXBoZXJfdGVzdF9zdWl0ZSBjaXBoZXI7CiAJCXN0cnVjdCBjb21wX3Rlc3Rfc3VpdGUgY29tcDsKKwkJc3RydWN0IHBjb21wX3Rlc3Rfc3VpdGUgcGNvbXA7CiAJCXN0cnVjdCBoYXNoX3Rlc3Rfc3VpdGUgaGFzaDsKIAl9IHN1aXRlOwogfTsKQEAgLTg5OCw2ICs5MDYsMTU5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB0ZXN0X3Bjb21wKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJICAgICAgc3RydWN0IHBjb21wX3Rlc3R2ZWMgKmN0ZW1wbGF0ZSwKKwkJICAgICAgc3RydWN0IHBjb21wX3Rlc3R2ZWMgKmR0ZW1wbGF0ZSwgaW50IGN0Y291bnQsCisJCSAgICAgIGludCBkdGNvdW50KQoreworCWNvbnN0IGNoYXIgKmFsZ28gPSBjcnlwdG9fdGZtX2FsZ19kcml2ZXJfbmFtZShjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXVuc2lnbmVkIGludCBpOworCWNoYXIgcmVzdWx0W0NPTVBfQlVGX1NJWkVdOworCWludCBlcnJvcjsKKworCWZvciAoaSA9IDA7IGkgPCBjdGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGNvbXBfcmVxdWVzdCByZXE7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3Nfc2V0dXAodGZtLCBjdGVtcGxhdGVbaV0ucGFyYW1zLAorCQkJCQkgICAgICBjdGVtcGxhdGVbaV0ucGFyYW1zaXplKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHNldHVwIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX2luaXQodGZtKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIGluaXQgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOworCisJCXJlcS5uZXh0X2luID0gY3RlbXBsYXRlW2ldLmlucHV0OworCQlyZXEuYXZhaWxfaW4gPSBjdGVtcGxhdGVbaV0uaW5sZW4gLyAyOworCQlyZXEubmV4dF9vdXQgPSByZXN1bHQ7CisJCXJlcS5hdmFpbF9vdXQgPSBjdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIEFkZCByZW1haW5pbmcgaW5wdXQgZGF0YSAqLworCQlyZXEuYXZhaWxfaW4gKz0gKGN0ZW1wbGF0ZVtpXS5pbmxlbiArIDEpIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIFByb3ZpZGUgcmVtYWluaW5nIG91dHB1dCBzcGFjZSAqLworCQlyZXEuYXZhaWxfb3V0ICs9IENPTVBfQlVGX1NJWkUgLSBjdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc19maW5hbCh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gZmluYWwgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJaWYgKENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0ICE9IGN0ZW1wbGF0ZVtpXS5vdXRsZW4pIHsKKwkJCXByX2VycigiYWxnOiBjb21wOiBDb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgJXM6ICIKKwkJCSAgICAgICAib3V0cHV0IGxlbiA9ICVkIChleHBlY3RlZCAlZClcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0LAorCQkJICAgICAgIGN0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobWVtY21wKHJlc3VsdCwgY3RlbXBsYXRlW2ldLm91dHB1dCwgY3RlbXBsYXRlW2ldLm91dGxlbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogQ29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICIKKwkJCSAgICAgICAiJXNcbiIsIGkgKyAxLCBhbGdvKTsKKwkJCWhleGR1bXAocmVzdWx0LCBjdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGR0Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0IHJlcTsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX3NldHVwKHRmbSwgZHRlbXBsYXRlW2ldLnBhcmFtcywKKwkJCQkJCWR0ZW1wbGF0ZVtpXS5wYXJhbXNpemUpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBzZXR1cCBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfaW5pdCh0Zm0pOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBpbml0IGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKKworCQlyZXEubmV4dF9pbiA9IGR0ZW1wbGF0ZVtpXS5pbnB1dDsKKwkJcmVxLmF2YWlsX2luID0gZHRlbXBsYXRlW2ldLmlubGVuIC8gMjsKKwkJcmVxLm5leHRfb3V0ID0gcmVzdWx0OworCQlyZXEuYXZhaWxfb3V0ID0gZHRlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiAiCisJCQkgICAgICAgInRlc3QgJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLyogQWRkIHJlbWFpbmluZyBpbnB1dCBkYXRhICovCisJCXJlcS5hdmFpbF9pbiArPSAoZHRlbXBsYXRlW2ldLmlubGVuICsgMSkgLyAyOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIFByb3ZpZGUgcmVtYWluaW5nIG91dHB1dCBzcGFjZSAqLworCQlyZXEuYXZhaWxfb3V0ICs9IENPTVBfQlVGX1NJWkUgLSBkdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX2ZpbmFsKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIGZpbmFsIGZhaWxlZCBvbiAiCisJCQkgICAgICAgInRlc3QgJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJaWYgKENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0ICE9IGR0ZW1wbGF0ZVtpXS5vdXRsZW4pIHsKKwkJCXByX2VycigiYWxnOiBjb21wOiBEZWNvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzOiBvdXRwdXQgbGVuID0gJWQgKGV4cGVjdGVkICVkKVxuIiwgaSArIDEsCisJCQkgICAgICAgYWxnbywgQ09NUF9CVUZfU0laRSAtIHJlcS5hdmFpbF9vdXQsCisJCQkgICAgICAgZHRlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChtZW1jbXAocmVzdWx0LCBkdGVtcGxhdGVbaV0ub3V0cHV0LCBkdGVtcGxhdGVbaV0ub3V0bGVuKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBEZWNvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzXG4iLCBpICsgMSwgYWxnbyk7CisJCQloZXhkdW1wKHJlc3VsdCwgZHRlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGFsZ190ZXN0X2FlYWQoY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmRyaXZlciwKIAkJCSB1MzIgdHlwZSwgdTMyIG1hc2spCiB7CkBAIC0xMDA3LDYgKzExNjgsMjggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGFsZ190ZXN0X3Bjb21wKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCisJCQkgIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm07CisJaW50IGVycjsKKworCXRmbSA9IGNyeXB0b19hbGxvY19wY29tcChkcml2ZXIsIHR5cGUsIG1hc2spOworCWlmIChJU19FUlIodGZtKSkgeworCQlwcl9lcnIoImFsZzogcGNvbXA6IEZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgJXM6ICVsZFxuIiwKKwkJICAgICAgIGRyaXZlciwgUFRSX0VSUih0Zm0pKTsKKwkJcmV0dXJuIFBUUl9FUlIodGZtKTsKKwl9CisKKwllcnIgPSB0ZXN0X3Bjb21wKHRmbSwgZGVzYy0+c3VpdGUucGNvbXAuY29tcC52ZWNzLAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmRlY29tcC52ZWNzLAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmNvbXAuY291bnQsCisJCQkgZGVzYy0+c3VpdGUucGNvbXAuZGVjb21wLmNvdW50KTsKKworCWNyeXB0b19mcmVlX3Bjb21wKHRmbSk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBhbGdfdGVzdF9oYXNoKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCiAJCQkgdTMyIHR5cGUsIHUzMiBtYXNrKQogewpAQCAtMTgzNSw2ICsyMDE4LDIxIEBACiAJCQkJfQogCQkJfQogCQl9CisJfSwgeworCQkuYWxnID0gInpsaWIiLAorCQkudGVzdCA9IGFsZ190ZXN0X3Bjb21wLAorCQkuc3VpdGUgPSB7CisJCQkucGNvbXAgPSB7CisJCQkJLmNvbXAgPSB7CisJCQkJCS52ZWNzID0gemxpYl9jb21wX3R2X3RlbXBsYXRlLAorCQkJCQkuY291bnQgPSBaTElCX0NPTVBfVEVTVF9WRUNUT1JTCisJCQkJfSwKKwkJCQkuZGVjb21wID0geworCQkJCQkudmVjcyA9IHpsaWJfZGVjb21wX3R2X3RlbXBsYXRlLAorCQkJCQkuY291bnQgPSBaTElCX0RFQ09NUF9URVNUX1ZFQ1RPUlMKKwkJCQl9CisJCQl9CisJCX0KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5oIGIvY3J5cHRvL3Rlc3RtZ3IuaAppbmRleCAxMzI5NTNlLi41MjZmMDBhIDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5oCisrKyBiL2NyeXB0by90ZXN0bWdyLmgKQEAgLTE1LDYgKzE1LDExIEBACiAjaWZuZGVmIF9DUllQVE9fVEVTVE1HUl9ICiAjZGVmaW5lIF9DUllQVE9fVEVTVE1HUl9ICiAKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvemxpYi5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKICNkZWZpbmUgTUFYX0RJR0VTVF9TSVpFCQk2NAogI2RlZmluZSBNQVhfVEFQCQkJOAogCkBAIC04MzQ3LDEwICs4MzUyLDE5IEBACiAJY2hhciBvdXRwdXRbQ09NUF9CVUZfU0laRV07CiB9OwogCitzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB7CisJdm9pZCAqcGFyYW1zOworCXVuc2lnbmVkIGludCBwYXJhbXNpemU7CisJaW50IGlubGVuLCBvdXRsZW47CisJY2hhciBpbnB1dFtDT01QX0JVRl9TSVpFXTsKKwljaGFyIG91dHB1dFtDT01QX0JVRl9TSVpFXTsKK307CisKIC8qCiAgKiBEZWZsYXRlIHRlc3QgdmVjdG9ycyAobnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MpLgogICogUGFyYW1zOiB3aW5iaXRzPS0xMSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBNQVhfTUVNX0xFVkVMLgogICovCisKICNkZWZpbmUgREVGTEFURV9DT01QX1RFU1RfVkVDVE9SUyAyCiAjZGVmaW5lIERFRkxBVEVfREVDT01QX1RFU1RfVkVDVE9SUyAyCiAKQEAgLTg0MjYsNiArODQ0MCwxMzkgQEAKIAl9LAogfTsKIAorI2RlZmluZSBaTElCX0NPTVBfVEVTVF9WRUNUT1JTIDIKKyNkZWZpbmUgWkxJQl9ERUNPTVBfVEVTVF9WRUNUT1JTIDIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJc3RydWN0IG5sYXR0ciBubGE7CisJaW50IHZhbDsKK30gZGVmbGF0ZV9jb21wX3BhcmFtc1tdID0geworCXsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX0xFVkVMLAorCQl9LAorCQkudmFsCQkJPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfTUVUSE9ELAorCQl9LAorCQkudmFsCQkJPSBaX0RFRkxBVEVELAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX1dJTkRPV0JJVFMsCisJCX0sCisJCS52YWwJCQk9IC0xMSwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9NRU1MRVZFTCwKKwkJfSwKKwkJLnZhbAkJCT0gTUFYX01FTV9MRVZFTCwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9TVFJBVEVHWSwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZBVUxUX1NUUkFURUdZLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXN0cnVjdCBubGF0dHIgbmxhOworCWludCB2YWw7Cit9IGRlZmxhdGVfZGVjb21wX3BhcmFtc1tdID0geworCXsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9ERUNPTVBfV0lORE9XQklUUywKKwkJfSwKKwkJLnZhbAkJCT0gLTExLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB6bGliX2NvbXBfdHZfdGVtcGxhdGVbXSA9IHsKKwl7CisJCS5wYXJhbXMgPSAmZGVmbGF0ZV9jb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2NvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gNzAsCisJCS5vdXRsZW4JPSAzOCwKKwkJLmlucHV0CT0gIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIgorCQkJIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKKwkJLm91dHB1dAk9ICJceGYzXHhjYVx4Y2ZceGNjXHg1M1x4MjhceDJkXHg1NiIKKwkJCSAgIlx4YzhceGNiXHgyZlx4NTdceDQ4XHhjY1x4NGJceDUxIgorCQkJICAiXHgyOFx4Y2VceDQ4XHgyY1x4NGFceDU1XHgyOFx4YzkiCisJCQkgICJceDQ4XHg1NVx4MjhceGNlXHg0Zlx4MmJceDI5XHgwNyIKKwkJCSAgIlx4NzFceGJjXHgwOFx4MmJceDAxXHgwMCIsCisJfSwgeworCQkucGFyYW1zID0gJmRlZmxhdGVfY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9jb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDE5MSwKKwkJLm91dGxlbgk9IDEyMiwKKwkJLmlucHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBERUZMQVRFIgorCQkJImNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gb2YgIgorCQkJInRoZSBERUZMQVRFIGFsZ29yaXRobSB0byB0aGUgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbC4iLAorCQkub3V0cHV0CT0gIlx4NWRceDhkXHgzMVx4MGVceGMyXHgzMFx4MTBceDA0IgorCQkJICAiXHhiZlx4YjJceDJmXHhjOFx4MWZceDEwXHgwNFx4MDkiCisJCQkgICJceDg5XHhjMlx4ODVceDNmXHg3MFx4YjFceDJmXHhmOCIKKwkJCSAgIlx4MjRceGRiXHg2N1x4ZDlceDQ3XHhjMVx4ZWZceDQ5IgorCQkJICAiXHg2OFx4MTJceDUxXHhhZVx4NzZceDY3XHhkNlx4MjciCisJCQkgICJceDE5XHg4OFx4MWFceGRlXHg4NVx4YWJceDIxXHhmMiIKKwkJCSAgIlx4MDhceDVkXHgxNlx4MWVceDIwXHgwNFx4MmRceGFkIgorCQkJICAiXHhmM1x4MThceGEyXHgxNVx4ODVceDJkXHg2OVx4YzQiCisJCQkgICJceDQyXHg4M1x4MjNceGI2XHg2Y1x4ODlceDcxXHg5YiIKKwkJCSAgIlx4ZWZceGNmXHg4Ylx4OWZceGNmXHgzM1x4Y2FceDJmIgorCQkJICAiXHhlZFx4NjJceGE5XHg0Y1x4ODBceGZmXHgxM1x4YWYiCisJCQkgICJceDUyXHgzN1x4ZWRceDBlXHg1Mlx4NmJceDU5XHgwMiIKKwkJCSAgIlx4ZDlceDRlXHhlOFx4N2FceDc2XHgxZFx4MDJceDk4IgorCQkJICAiXHhmZVx4OGFceDg3XHg4M1x4YTNceDRmXHg1Nlx4OGEiCisJCQkgICJceGI4XHg5ZVx4OGVceDVjXHg1N1x4ZDNceGEwXHg3OSIKKwkJCSAgIlx4ZmFceDAyIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY29tcF90ZXN0dmVjIHpsaWJfZGVjb21wX3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkucGFyYW1zID0gJmRlZmxhdGVfZGVjb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2RlY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAxMjIsCisJCS5vdXRsZW4JPSAxOTEsCisJCS5pbnB1dAk9ICJceDVkXHg4ZFx4MzFceDBlXHhjMlx4MzBceDEwXHgwNCIKKwkJCSAgIlx4YmZceGIyXHgyZlx4YzhceDFmXHgxMFx4MDRceDA5IgorCQkJICAiXHg4OVx4YzJceDg1XHgzZlx4NzBceGIxXHgyZlx4ZjgiCisJCQkgICJceDI0XHhkYlx4NjdceGQ5XHg0N1x4YzFceGVmXHg0OSIKKwkJCSAgIlx4NjhceDEyXHg1MVx4YWVceDc2XHg2N1x4ZDZceDI3IgorCQkJICAiXHgxOVx4ODhceDFhXHhkZVx4ODVceGFiXHgyMVx4ZjIiCisJCQkgICJceDA4XHg1ZFx4MTZceDFlXHgyMFx4MDRceDJkXHhhZCIKKwkJCSAgIlx4ZjNceDE4XHhhMlx4MTVceDg1XHgyZFx4NjlceGM0IgorCQkJICAiXHg0Mlx4ODNceDIzXHhiNlx4NmNceDg5XHg3MVx4OWIiCisJCQkgICJceGVmXHhjZlx4OGJceDlmXHhjZlx4MzNceGNhXHgyZiIKKwkJCSAgIlx4ZWRceDYyXHhhOVx4NGNceDgwXHhmZlx4MTNceGFmIgorCQkJICAiXHg1Mlx4MzdceGVkXHgwZVx4NTJceDZiXHg1OVx4MDIiCisJCQkgICJceGQ5XHg0ZVx4ZThceDdhXHg3Nlx4MWRceDAyXHg5OCIKKwkJCSAgIlx4ZmVceDhhXHg4N1x4ODNceGEzXHg0Zlx4NTZceDhhIgorCQkJICAiXHhiOFx4OWVceDhlXHg1Y1x4NTdceGQzXHhhMFx4NzkiCisJCQkgICJceGZhXHgwMiIsCisJCS5vdXRwdXQJPSAiVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIERFRkxBVEUiCisJCQkiY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVGhpcyBkb2N1bWVudCBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBvZiAiCisJCQkidGhlIERFRkxBVEUgYWxnb3JpdGhtIHRvIHRoZSBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sLiIsCisJfSwgeworCQkucGFyYW1zID0gJmRlZmxhdGVfZGVjb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2RlY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAzOCwKKwkJLm91dGxlbgk9IDcwLAorCQkuaW5wdXQJPSAiXHhmM1x4Y2FceGNmXHhjY1x4NTNceDI4XHgyZFx4NTYiCisJCQkgICJceGM4XHhjYlx4MmZceDU3XHg0OFx4Y2NceDRiXHg1MSIKKwkJCSAgIlx4MjhceGNlXHg0OFx4MmNceDRhXHg1NVx4MjhceGM5IgorCQkJICAiXHg0OFx4NTVceDI4XHhjZVx4NGZceDJiXHgyOVx4MDciCisJCQkgICJceDcxXHhiY1x4MDhceDJiXHgwMVx4MDAiLAorCQkub3V0cHV0CT0gIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIgorCQkJIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKKwl9LAorfTsKKwogLyoKICAqIExaTyB0ZXN0IHZlY3RvcnMgKG51bGwtdGVybWluYXRlZCBzdHJpbmdzKS4KICAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3psaWIuYyBiL2NyeXB0by96bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2MDliYQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by96bGliLmMKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBabGliIGFsZ29yaXRobQorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBCYXNlZCBvbiBkZWZsYXRlLmMsIHdoaWNoIGlzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGSVhNRTogZGVmbGF0ZSB0cmFuc2Zvcm1zIHdpbGwgcmVxdWlyZSB1cCB0byBhIHRvdGFsIG9mIGFib3V0IDQzNmsgb2Yga2VybmVsCisgKiBtZW1vcnkgb24gaTM4NiAoMzkwayBmb3IgY29tcHJlc3Npb24sIHRoZSByZXN0IGZvciBkZWNvbXByZXNzaW9uKSwgYXMgdGhlCisgKiBjdXJyZW50IHpsaWIga2VybmVsIGNvZGUgdXNlcyBhIHdvcnN0IGNhc2UgcHJlLWFsbG9jYXRpb24gc3lzdGVtIGJ5IGRlZmF1bHQuCisgKiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHNvIHRoYXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgaXMgcHJvcGVybHkKKyAqIHJlbGF0ZWQgdG8gdGhlIHdpbmJpdHMgYW5kIG1lbWxldmVsIHBhcmFtZXRlcnMuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisKKworc3RydWN0IHpsaWJfY3R4IHsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyBjb21wX3N0cmVhbTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyBkZWNvbXBfc3RyZWFtOworCWludCBkZWNvbXBfd2luZG93Qml0czsKK307CisKKworc3RhdGljIHZvaWQgemxpYl9jb21wX2V4aXQoc3RydWN0IHpsaWJfY3R4ICpjdHgpCit7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmNvbXBfc3RyZWFtOworCisJaWYgKHN0cmVhbS0+d29ya3NwYWNlKSB7CisJCXpsaWJfZGVmbGF0ZUVuZChzdHJlYW0pOworCQl2ZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfZGVjb21wX2V4aXQoc3RydWN0IHpsaWJfY3R4ICpjdHgpCit7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CisKKwlpZiAoc3RyZWFtLT53b3Jrc3BhY2UpIHsKKwkJemxpYl9pbmZsYXRlRW5kKHN0cmVhbSk7CisJCWtmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCB6bGliX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgemxpYl9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJemxpYl9jb21wX2V4aXQoY3R4KTsKKwl6bGliX2RlY29tcF9leGl0KGN0eCk7Cit9CisKKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKKwlzdHJ1Y3QgbmxhdHRyICp0YltaTElCX0NPTVBfTUFYICsgMV07CisJc2l6ZV90IHdvcmtzcGFjZXNpemU7CisJaW50IHJldDsKKworCXJldCA9IG5sYV9wYXJzZSh0YiwgWkxJQl9DT01QX01BWCwgcGFyYW1zLCBsZW4sIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl6bGliX2NvbXBfZXhpdChjdHgpOworCisJd29ya3NwYWNlc2l6ZSA9IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKCk7CisJc3RyZWFtLT53b3Jrc3BhY2UgPSB2bWFsbG9jKHdvcmtzcGFjZXNpemUpOworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KHN0cmVhbS0+d29ya3NwYWNlLCAwLCB3b3Jrc3BhY2VzaXplKTsKKwlyZXQgPSB6bGliX2RlZmxhdGVJbml0MihzdHJlYW0sCisJCQkJdGJbWkxJQl9DT01QX0xFVkVMXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9MRVZFTF0pCisJCQkJCTogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAorCQkJCXRiW1pMSUJfQ09NUF9NRVRIT0RdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX01FVEhPRF0pCisJCQkJCTogWl9ERUZMQVRFRCwKKwkJCQl0YltaTElCX0NPTVBfV0lORE9XQklUU10KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfV0lORE9XQklUU10pCisJCQkJCTogTUFYX1dCSVRTLAorCQkJCXRiW1pMSUJfQ09NUF9NRU1MRVZFTF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTUVNTEVWRUxdKQorCQkJCQk6IERFRl9NRU1fTEVWRUwsCisJCQkJdGJbWkxJQl9DT01QX1NUUkFURUdZXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9TVFJBVEVHWV0pCisJCQkJCTogWl9ERUZBVUxUX1NUUkFURUdZKTsKKwlpZiAocmV0ICE9IFpfT0spIHsKKwkJdmZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+Y29tcF9zdHJlYW07CisKKwlyZXQgPSB6bGliX2RlZmxhdGVSZXNldChzdHJlYW0pOworCWlmIChyZXQgIT0gWl9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfZGVmbGF0ZShzdHJlYW0sIFpfTk9fRkxVU0gpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBaX09LOgorCQlicmVhazsKKworCWNhc2UgWl9CVUZfRVJST1I6CisJCXByX2RlYnVnKCJ6bGliX2RlZmxhdGUgY291bGQgbm90IG1ha2UgcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ6bGliX2RlZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+Y29tcF9zdHJlYW07CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldVxuIiwgcmVxLT5hdmFpbF9pbiwgcmVxLT5hdmFpbF9vdXQpOworCXN0cmVhbS0+bmV4dF9pbiA9IHJlcS0+bmV4dF9pbjsKKwlzdHJlYW0tPmF2YWlsX2luID0gcmVxLT5hdmFpbF9pbjsKKwlzdHJlYW0tPm5leHRfb3V0ID0gcmVxLT5uZXh0X291dDsKKwlzdHJlYW0tPmF2YWlsX291dCA9IHJlcS0+YXZhaWxfb3V0OworCisJcmV0ID0gemxpYl9kZWZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXByX2RlYnVnKCJ6bGliX2RlZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCQkgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgemxpYl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CisJc3RydWN0IG5sYXR0ciAqdGJbWkxJQl9ERUNPTVBfTUFYICsgMV07CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBubGFfcGFyc2UodGIsIFpMSUJfREVDT01QX01BWCwgcGFyYW1zLCBsZW4sIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl6bGliX2RlY29tcF9leGl0KGN0eCk7CisKKwljdHgtPmRlY29tcF93aW5kb3dCaXRzID0gdGJbWkxJQl9ERUNPTVBfV0lORE9XQklUU10KKwkJCQkgPyBubGFfZ2V0X3UzMih0YltaTElCX0RFQ09NUF9XSU5ET1dCSVRTXSkKKwkJCQkgOiBERUZfV0JJVFM7CisKKwlzdHJlYW0tPndvcmtzcGFjZSA9IGt6YWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdHJlYW0tPndvcmtzcGFjZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB6bGliX2luZmxhdGVJbml0MihzdHJlYW0sIGN0eC0+ZGVjb21wX3dpbmRvd0JpdHMpOworCWlmIChyZXQgIT0gWl9PSykgeworCQlrZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmRlY29tcF9zdHJlYW07CisKKwlyZXQgPSB6bGliX2luZmxhdGVSZXNldChzdHJlYW0pOworCWlmIChyZXQgIT0gWl9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFpfT0s6CisJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCWJyZWFrOworCisJY2FzZSBaX0JVRl9FUlJPUjoKKwkJcHJfZGVidWcoInpsaWJfaW5mbGF0ZSBjb3VsZCBub3QgbWFrZSBwcm9ncmVzc1xuIik7CisJCXJldHVybiAtRUFHQUlOOworCisJZGVmYXVsdDoKKwkJcHJfZGVidWcoInpsaWJfaW5mbGF0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1IChjb25zdW1lZCAldSwgcHJvZHVjZWQgJXUpXG4iLAorCQkgc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQsCisJCSByZXEtPmF2YWlsX2luIC0gc3RyZWFtLT5hdmFpbF9pbiwKKwkJIHJlcS0+YXZhaWxfb3V0IC0gc3RyZWFtLT5hdmFpbF9vdXQpOworCXJlcS0+bmV4dF9pbiA9IHN0cmVhbS0+bmV4dF9pbjsKKwlyZXEtPmF2YWlsX2luID0gc3RyZWFtLT5hdmFpbF9pbjsKKwlyZXEtPm5leHRfb3V0ID0gc3RyZWFtLT5uZXh0X291dDsKKwlyZXEtPmF2YWlsX291dCA9IHN0cmVhbS0+YXZhaWxfb3V0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCWlmIChkY3R4LT5kZWNvbXBfd2luZG93Qml0cyA8IDApIHsKKwkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKKwkJLyoKKwkJICogV29yayBhcm91bmQgYSBidWcgaW4gemxpYiwgd2hpY2ggc29tZXRpbWVzIHdhbnRzIHRvIHRhc3RlIGFuCisJCSAqIGV4dHJhIGJ5dGUgd2hlbiBiZWluZyB1c2VkIGluIHRoZSAodW5kb2N1bWVudGVkKSByYXcgZGVmbGF0ZQorCQkgKiBtb2RlLiAoRnJvbSBVU0FHSSkuCisJCSAqLworCQlpZiAocmV0ID09IFpfT0sgJiYgIXN0cmVhbS0+YXZhaWxfaW4gJiYgc3RyZWFtLT5hdmFpbF9vdXQpIHsKKwkJCWNvbnN0IHZvaWQgKnNhdmVkX25leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJCQl1OCB6ZXJvc3R1ZmYgPSAwOworCisJCQlzdHJlYW0tPm5leHRfaW4gPSAmemVyb3N0dWZmOworCQkJc3RyZWFtLT5hdmFpbF9pbiA9IDE7CisJCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CisJCQlzdHJlYW0tPm5leHRfaW4gPSBzYXZlZF9uZXh0X2luOworCQkJc3RyZWFtLT5hdmFpbF9pbiA9IDA7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHBjb21wX2FsZyB6bGliX2FsZyA9IHsKKwkuY29tcHJlc3Nfc2V0dXAJCT0gemxpYl9jb21wcmVzc19zZXR1cCwKKwkuY29tcHJlc3NfaW5pdAkJPSB6bGliX2NvbXByZXNzX2luaXQsCisJLmNvbXByZXNzX3VwZGF0ZQk9IHpsaWJfY29tcHJlc3NfdXBkYXRlLAorCS5jb21wcmVzc19maW5hbAkJPSB6bGliX2NvbXByZXNzX2ZpbmFsLAorCS5kZWNvbXByZXNzX3NldHVwCT0gemxpYl9kZWNvbXByZXNzX3NldHVwLAorCS5kZWNvbXByZXNzX2luaXQJPSB6bGliX2RlY29tcHJlc3NfaW5pdCwKKwkuZGVjb21wcmVzc191cGRhdGUJPSB6bGliX2RlY29tcHJlc3NfdXBkYXRlLAorCS5kZWNvbXByZXNzX2ZpbmFsCT0gemxpYl9kZWNvbXByZXNzX2ZpbmFsLAorCisJLmJhc2UJCQk9IHsKKwkJLmNyYV9uYW1lCT0gInpsaWIiLAorCQkuY3JhX2ZsYWdzCT0gQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUywKKwkJLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCB6bGliX2N0eCksCisJCS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfaW5pdAk9IHpsaWJfaW5pdCwKKwkJLmNyYV9leGl0CT0gemxpYl9leGl0LAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHpsaWJfbW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKCZ6bGliX2FsZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB6bGliX21vZF9maW5pKHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXAoJnpsaWJfYWxnKTsKK30KKworbW9kdWxlX2luaXQoemxpYl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdCh6bGliX21vZF9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJabGliIENvbXByZXNzaW9uIEFsZ29yaXRobSIpOworTU9EVUxFX0FVVEhPUigiU29ueSBDb3Jwb3JhdGlvbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggYzFiZjQxNy4uMjYxOGE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0zNiwxMyArMzYsMTQgQEAKIAogb2JqLXkJCQkJKz0gc2VyaWFsLwogb2JqLSQoQ09ORklHX1BBUlBPUlQpCQkrPSBwYXJwb3J0Lwotb2JqLXkJCQkJKz0gYmFzZS8gYmxvY2svIG1pc2MvIG1mZC8gbmV0LyBtZWRpYS8KK29iai15CQkJCSs9IGJhc2UvIGJsb2NrLyBtaXNjLyBtZmQvIG1lZGlhLwogb2JqLSQoQ09ORklHX05VQlVTKQkJKz0gbnVidXMvCi1vYmotJChDT05GSUdfQVRNKQkJKz0gYXRtLwogb2JqLXkJCQkJKz0gbWFjaW50b3NoLwogb2JqLSQoQ09ORklHX0lERSkJCSs9IGlkZS8KIG9iai0kKENPTkZJR19TQ1NJKQkJKz0gc2NzaS8KIG9iai0kKENPTkZJR19BVEEpCQkrPSBhdGEvCitvYmoteQkJCQkrPSBuZXQvCitvYmotJChDT05GSUdfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX0ZVU0lPTikJCSs9IG1lc3NhZ2UvCiBvYmotJChDT05GSUdfRklSRVdJUkUpCQkrPSBmaXJld2lyZS8KIG9iai15CQkJCSs9IGllZWUxMzk0LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYwppbmRleCBjM2U4NDFmLi5hYjBhZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3RhYmxlCisgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplCiAgKgogICogUEFSQU1FVEVSUzogIFNpZ25hdHVyZSAgICAgICAgICAgLSBBQ1BJIHNpZ25hdHVyZSBvZiBuZWVkZWQgdGFibGUKICAqICAgICAgICAgICAgICBJbnN0YW5jZSAgICAgICAgICAgIC0gV2hpY2ggaW5zdGFuY2UgKGZvciBTU0RUcykKQEAgLTM3Nyw4ICszNzcsOSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzCi1hY3BpX2dldF90YWJsZShjaGFyICpzaWduYXR1cmUsCi0JICAgICAgIHUzMiBpbnN0YW5jZSwgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqb3V0X3RhYmxlKQorYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGNoYXIgKnNpZ25hdHVyZSwKKwkgICAgICAgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKipvdXRfdGFibGUsCisJICAgICAgIGFjcGlfc2l6ZSAqdGJsX3NpemUpCiB7CiAgICAgICAgdTMyIGk7CiAgICAgICAgdTMyIGo7CkBAIC00MDgsNiArNDA5LDcgQEAKIAkJICAgIGFjcGlfdGJfdmVyaWZ5X3RhYmxlKCZhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCQkqb3V0X3RhYmxlID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5wb2ludGVyOworCQkJKnRibF9zaXplID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5sZW5ndGg7CiAJCX0KIAogCQlpZiAoIWFjcGlfZ2JsX3Blcm1hbmVudF9tbWFwKSB7CkBAIC00MjAsNiArNDIyLDE1IEBACiAJcmV0dXJuIChBRV9OT1RfRk9VTkQpOwogfQogCithY3BpX3N0YXR1cworYWNwaV9nZXRfdGFibGUoY2hhciAqc2lnbmF0dXJlLAorCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSkKK3sKKwlhY3BpX3NpemUgdGJsX3NpemU7CisKKwlyZXR1cm4gYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKHNpZ25hdHVyZSwKKwkJICAgICAgIGluc3RhbmNlLCBvdXRfdGFibGUsICZ0Ymxfc2l6ZSk7Cit9CiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCAzNTA5NGYyLi43YWY3ZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQlzaXplb2Yoc3RydWN0IGRvY2tfc3RhdGlvbiAqKSk7CiAKIAkvKiB3ZSB3YW50IHRoZSBkb2NrIGRldmljZSB0byBzZW5kIHVldmVudHMgKi8KLQlkb2NrX2RldmljZS0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJmRvY2tfZGV2aWNlLT5kZXYsIDApOwogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJZG9ja19zdGF0aW9uLT5mbGFncyB8PSBET0NLX0lTX0RPQ0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCmluZGV4IDBjMjRiZDQuLmFlYjdlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC0yMzUsMTEgKzIzNSw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcmVzdWx0ID0KLQkgICAgZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBhY3BpX2V2ZW50X21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiRmFpbGVkIHRvIHNlbmQgYSBHZW5ldGxpbmsgbWVzc2FnZSFcbiIpKTsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIGFjcGlfZXZlbnRfbWNncnAuaWQsIEdGUF9BVE9NSUMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggMWUzNWYzNC4uZWI4OTgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtMjcyLDE0ICsyNzIsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfb3NfbWFwX21lbW9yeSk7CiAKLXZvaWQgYWNwaV9vc191bm1hcF9tZW1vcnkodm9pZCBfX2lvbWVtICogdmlydCwgYWNwaV9zaXplIHNpemUpCit2b2lkIF9fcmVmIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgYWNwaV9zaXplIHNpemUpCiB7Ci0JaWYgKGFjcGlfZ2JsX3Blcm1hbmVudF9tbWFwKSB7CisJaWYgKGFjcGlfZ2JsX3Blcm1hbmVudF9tbWFwKQogCQlpb3VubWFwKHZpcnQpOwotCX0KKwllbHNlCisJCV9fYWNwaV91bm1hcF90YWJsZSh2aXJ0LCBzaXplKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfb3NfdW5tYXBfbWVtb3J5KTsKIAordm9pZCBfX2luaXQgZWFybHlfYWNwaV9vc191bm1hcF9tZW1vcnkodm9pZCBfX2lvbWVtICp2aXJ0LCBhY3BpX3NpemUgc2l6ZSkKK3sKKwlpZiAoIWFjcGlfZ2JsX3Blcm1hbmVudF9tbWFwKQorCQlfX2FjcGlfdW5tYXBfdGFibGUodmlydCwgc2l6ZSk7Cit9CisKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKIGFjcGlfb3NfZ2V0X3BoeXNpY2FsX2FkZHJlc3Modm9pZCAqdmlydCwgYWNwaV9waHlzaWNhbF9hZGRyZXNzICogcGh5cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggOWNjNzY5Yi4uNjhmZDNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTUxNiwxMiArNTE2LDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmNwdV9wdHIocGVyZm9ybWFuY2UsIGkpKSB7CisJCWlmICghcGVyZm9ybWFuY2UgfHwgIXBlcl9jcHVfcHRyKHBlcmZvcm1hbmNlLCBpKSkgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcHItPnBlcmZvcm1hbmNlID0gcGVyY3B1X3B0cihwZXJmb3JtYW5jZSwgaSk7CisJCXByLT5wZXJmb3JtYW5jZSA9IHBlcl9jcHVfcHRyKHBlcmZvcm1hbmNlLCBpKTsKIAkJY3B1bWFza19zZXRfY3B1KGksIHByLT5wZXJmb3JtYW5jZS0+c2hhcmVkX2NwdV9tYXApOwogCQlpZiAoYWNwaV9wcm9jZXNzb3JfZ2V0X3BzZChwcikpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggYTg4NTI5NS4uZmVjMWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMTgxLDE0ICsxODEsMTUgQEAKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmVudHJ5OwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQ7CisJYWNwaV9zaXplIHRibF9zaXplOwogCiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChzdHJuY21wKGlkLCBBQ1BJX1NJR19NQURULCA0KSA9PSAwKQotCQlhY3BpX2dldF90YWJsZShpZCwgYWNwaV9hcGljX2luc3RhbmNlLCAmdGFibGVfaGVhZGVyKTsKKwkJYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGlkLCBhY3BpX2FwaWNfaW5zdGFuY2UsICZ0YWJsZV9oZWFkZXIsICZ0Ymxfc2l6ZSk7CiAJZWxzZQotCQlhY3BpX2dldF90YWJsZShpZCwgMCwgJnRhYmxlX2hlYWRlcik7CisJCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShpZCwgMCwgJnRhYmxlX2hlYWRlciwgJnRibF9zaXplKTsKIAogCWlmICghdGFibGVfaGVhZGVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICIlNC40cyBub3QgcHJlc2VudFxuIiwgaWQpOwpAQCAtMjA2LDggKzIwNywxMCBAQAogCSAgICAgICB0YWJsZV9lbmQpIHsKIAkJaWYgKGVudHJ5LT50eXBlID09IGVudHJ5X2lkCiAJCSAgICAmJiAoIW1heF9lbnRyaWVzIHx8IGNvdW50KysgPCBtYXhfZW50cmllcykpCi0JCQlpZiAoaGFuZGxlcihlbnRyeSwgdGFibGVfZW5kKSkKKwkJCWlmIChoYW5kbGVyKGVudHJ5LCB0YWJsZV9lbmQpKSB7CisJCQkJZWFybHlfYWNwaV9vc191bm1hcF9tZW1vcnkoKGNoYXIgKil0YWJsZV9oZWFkZXIsIHRibF9zaXplKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAogCQllbnRyeSA9IChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKikKIAkJICAgICgodW5zaWduZWQgbG9uZyllbnRyeSArIGVudHJ5LT5sZW5ndGgpOwpAQCAtMjE3LDYgKzIyMCw3IEBACiAJCSAgICAgICAiJWkgZm91bmRcbiIsIGlkLCBlbnRyeV9pZCwgY291bnQgLSBtYXhfZW50cmllcywgY291bnQpOwogCX0KIAorCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KChjaGFyICopdGFibGVfaGVhZGVyLCB0Ymxfc2l6ZSk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yNDEsMTcgKzI0NSwxOSBAQAogaW50IF9faW5pdCBhY3BpX3RhYmxlX3BhcnNlKGNoYXIgKmlkLCBhY3BpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcikKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKKwlhY3BpX3NpemUgdGJsX3NpemU7CiAKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHN0cm5jbXAoaWQsIEFDUElfU0lHX01BRFQsIDQpID09IDApCi0JCWFjcGlfZ2V0X3RhYmxlKGlkLCBhY3BpX2FwaWNfaW5zdGFuY2UsICZ0YWJsZSk7CisJCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShpZCwgYWNwaV9hcGljX2luc3RhbmNlLCAmdGFibGUsICZ0Ymxfc2l6ZSk7CiAJZWxzZQotCQlhY3BpX2dldF90YWJsZShpZCwgMCwgJnRhYmxlKTsKKwkJYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGlkLCAwLCAmdGFibGUsICZ0Ymxfc2l6ZSk7CiAKIAlpZiAodGFibGUpIHsKIAkJaGFuZGxlcih0YWJsZSk7CisJCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCB0Ymxfc2l6ZSk7CiAJCXJldHVybiAwOwogCX0gZWxzZQogCQlyZXR1cm4gMTsKQEAgLTI2NSw4ICsyNzEsOSBAQAogc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX211bHRpcGxlX21hZHQodm9pZCkKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKKwlhY3BpX3NpemUgdGJsX3NpemU7CiAKLQlhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAyLCAmdGFibGUpOworCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShBQ1BJX1NJR19NQURULCAyLCAmdGFibGUsICZ0Ymxfc2l6ZSk7CiAJaWYgKHRhYmxlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCSAgICAgICAiQklPUyBidWc6IG11bHRpcGxlIEFQSUMvTUFEVCBmb3VuZCwiCkBAIC0yNzUsNiArMjgyLDcgQEAKIAkJICAgICAgICJJZiBcImFjcGlfYXBpY19pbnN0YW5jZT0lZFwiIHdvcmtzIGJldHRlciwgIgogCQkgICAgICAgIm5vdGlmeSBsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZ1xuIiwKIAkJICAgICAgIGFjcGlfYXBpY19pbnN0YW5jZSA/IDAgOiAyKTsKKwkJZWFybHlfYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHRibF9zaXplKTsKIAogCX0gZWxzZQogCQlhY3BpX2FwaWNfaW5zdGFuY2UgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbWJhL2J1cy5jIGIvZHJpdmVycy9hbWJhL2J1cy5jCmluZGV4IDAwYzQ2ZTAuLjNkNzYzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWRldi0+ZGV2LnJlbGVhc2UgPSBhbWJhX2RldmljZV9yZWxlYXNlOwogCWRldi0+ZGV2LmJ1cyA9ICZhbWJhX2J1c3R5cGU7CiAJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kbWFfbWFzazsKLQlkZXYtPnJlcy5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCWRldi0+cmVzLm5hbWUgPSBkZXZfbmFtZSgmZGV2LT5kZXYpOwogCiAJaWYgKCFkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayAmJiBkZXYtPmRtYV9tYXNrKQogCQlkZXZfd2FybigmZGV2LT5kZXYsICJjb2hlcmVudCBkbWEgbWFzayBpcyB1bnNldFxuIik7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAlpZiAoZC0+cGFyZW50KQogCQlyICY9IGQtPnBhcmVudCA9PSBkZXYtPnBhcmVudDsKIAlpZiAoZC0+YnVzaWQpCi0JCXIgJj0gc3RyY21wKGRldi0+YnVzX2lkLCBkLT5idXNpZCkgPT0gMDsKKwkJciAmPSBzdHJjbXAoZGV2X25hbWUoZGV2KSwgZC0+YnVzaWQpID09IDA7CiAKIAlpZiAocikgewogCQlnZXRfZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggNjZlMDEyYy4uNzg4YmJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJLyogYm9hcmRfYWhjaSAqLwogCXsKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00MTIsNyArNDEyLDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX05DUSB8IEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfdnQ4MjUxX29wcywKIAl9LApAQCAtNDIwLDcgKzQyMCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19JR05fSVJRX0lGX0VSUiksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDMwLDcgKzQzMCw3IEBACiAJCQkJIEFIQ0lfSEZMQUdfMzJCSVRfT05MWSB8IEFIQ0lfSEZMQUdfTk9fTVNJIHwKIAkJCQkgQUhDSV9IRkxBR19TRUNUMjU1KSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfc2I2MDBfb3BzLAogCX0sCkBAIC00NDAsNyArNDQwLDcgQEAKIAkJCQkgQUhDSV9IRkxBR19NVl9QQVRBIHwgQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUwpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9zYjYwMF9vcHMsCiAJfSwKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfWUVTX05DUSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTEzNDgsNyArMTM0OCw3IEBACiAJd3JpdGVsKG1lc3NhZ2VbMV0sIG1taW8gKyBocHJpdi0+ZW1fbG9jKzQpOwogCiAJLyogc2F2ZSBvZmYgbmV3IGxlZCBzdGF0ZSBmb3IgcG9ydC9zbG90ICovCi0JZW1wLT5sZWRfc3RhdGUgPSBtZXNzYWdlWzFdOworCWVtcC0+bGVkX3N0YXRlID0gc3RhdGU7CiAKIAkvKgogCSAqIHRlbGwgaGFyZHdhcmUgdG8gdHJhbnNtaXQgdGhlIG1lc3NhZ2UKQEAgLTI1NjUsNiArMjU2NSwxNSBAQAogCQkJLyogUENJIHNsb3QgbnVtYmVyIG9mIHRoZSBjb250cm9sbGVyICovCiAJCQkuZHJpdmVyX2RhdGEgPSAodm9pZCAqKTB4MUZVTCwKIAkJfSwKKwkJeworCQkJLmlkZW50ID0gIkhQIENvbXBhcSA2NzIwcyIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIENvbXBhcSA2NzIwcyIpLAorCQkJfSwKKwkJCS8qIFBDSSBzbG90IG51bWJlciBvZiB0aGUgY29udHJvbGxlciAqLworCQkJLmRyaXZlcl9kYXRhID0gKHZvaWQgKikweDFGVUwsCisJCX0sCiAKIAkJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiAJfTsKQEAgLTI2NDcsOCArMjY1Niw4IEBACiAJaWYgKGJvYXJkX2lkID09IGJvYXJkX2FoY2lfc2I3MDAgJiYgcGRldi0+cmV2aXNpb24gPj0gMHg0MCkKIAkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMOwogCi0JaWYgKChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkgfHwgcGNpX2VuYWJsZV9tc2kocGRldikpCi0JCXBjaV9pbnR4KHBkZXYsIDEpOworCWlmICghKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSkKKwkJcGNpX2VuYWJsZV9tc2kocGRldik7CiAKIAkvKiBzYXZlIGluaXRpYWwgY29uZmlnICovCiAJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKHBkZXYsIGhwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCmluZGV4IGRjNDhhNjMuLmVjZmQyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtMTE4LDggKzExOCw4IEBACiAJdTE2IGNvbW1hbmQ7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmdlbmVyaWNfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggZWY4YjMwZC4uZTVjYmU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC00NDYsMzQgKzQ0NiwzNCBAQAogCVtwaWl4X3BhdGFfbXdkbWFdID0gCS8qIFBJSVgzIE1XRE1BIG9ubHkgKi8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAogCX0sCiAKIAlbcGlpeF9wYXRhXzMzXSA9CS8qIFBJSVg0IGF0IDMzTUh6ICovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoX3BhdGFfMzNdID0gCS8qIElDSDAgLSBJQ0ggYXQgMzNNaHoqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrIAk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBDaGVjazogbWF5YmUgMHgwNyAgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwgLyogVURNQTMzICovCisJCS5waW9fbWFzayAJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBDaGVjazogbWF5YmUgTVdETUEwIGlzIG9rICAqLworCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoX3BhdGFfNjZdID0gCS8qIElDSCBjb250cm9sbGVycyB1cCB0byA2Nk1IeiAqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrIAk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBNV0RNQTAgaXMgYnJva2VuIG9uIGNoaXAgKi8KKwkJLnBpb19tYXNrIAk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIE1XRE1BMCBpcyBicm9rZW4gb24gY2hpcCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCkBAIC00ODEsMTcgKzQ4MSwxNyBAQAogCVtpY2hfcGF0YV8xMDBdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfQ0hFQ0tJTlRSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LCAvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2g1X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC00OTksOCArNDk5LDggQEAKIAlbaWNoNl9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTA4LDggKzUwOCw4IEBACiAJW2ljaDZtX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MTcsOCArNTE3LDggQEAKIAlbaWNoOF9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTIHwgUElJWF9GTEFHX1NJRFBSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTI2LDggKzUyNiw4IEBACiAJW2ljaDhfMnBvcnRfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19TSURQUiwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUzNSw4ICs1MzUsOCBAQAogCVt0b2xhcGFpX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01NDQsOCArNTQ0LDggQEAKIAlbaWNoOG1fYXBwbGVfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTU1Myw5ICs1NTMsOSBAQAogCVtwaWl4X3BhdGFfdm13XSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3Ztd19vcHMsCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMDYwYmNkNi4uZTdlYTc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KQEAgLTIzODksNiArMjM5MCw3IEBACiAJZGV2LT5jeWxpbmRlcnMgPSAwOwogCWRldi0+aGVhZHMgPSAwOwogCWRldi0+c2VjdG9ycyA9IDA7CisJZGV2LT5tdWx0aV9jb3VudCA9IDA7CiAKIAkvKgogCSAqIGNvbW1vbiBBVEEsIEFUQVBJIGZlYXR1cmUgdGVzdHMKQEAgLTI0MjYsOCArMjQyOCwxNSBAQAogCiAJCWRldi0+bl9zZWN0b3JzID0gYXRhX2lkX25fc2VjdG9ycyhpZCk7CiAKLQkJaWYgKGRldi0+aWRbNTldICYgMHgxMDApCi0JCQlkZXYtPm11bHRpX2NvdW50ID0gZGV2LT5pZFs1OV0gJiAweGZmOworCQkvKiBnZXQgY3VycmVudCBSL1cgTXVsdGlwbGUgY291bnQgc2V0dGluZyAqLworCQlpZiAoKGRldi0+aWRbNDddID4+IDgpID09IDB4ODAgJiYgKGRldi0+aWRbNTldICYgMHgxMDApKSB7CisJCQl1bnNpZ25lZCBpbnQgbWF4ID0gZGV2LT5pZFs0N10gJiAweGZmOworCQkJdW5zaWduZWQgaW50IGNudCA9IGRldi0+aWRbNTldICYgMHhmZjsKKwkJCS8qIG9ubHkgcmVjb2duaXplL2FsbG93IHBvd2VycyBvZiB0d28gaGVyZSAqLworCQkJaWYgKGlzX3Bvd2VyX29mXzIobWF4KSAmJiBpc19wb3dlcl9vZl8yKGNudCkpCisJCQkJaWYgKGNudCA8PSBtYXgpCisJCQkJCWRldi0+bXVsdGlfY291bnQgPSBjbnQ7CisJCX0KIAogCQlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKSB7CiAJCQljb25zdCBjaGFyICpsYmFfZGVzYzsKQEAgLTY3MDksNiArNjcxOCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZG9fZGV2X3JlYWRfaWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfc2ltdWxhdGUpOwogCitFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGlvX3F1ZXVlX3Rhc2spOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Bpb19uZWVkX2lvcmR5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV90aW1pbmdfZmluZF9tb2RlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV90aW1pbmdfY29tcHV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGVhODkwOTEuLjAxODMxMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAogCS8qIEZvciBuZXcgRUgsIGFsbCBxY3MgYXJlIGZpbmlzaGVkIGluIG9uZSBvZiB0aHJlZSB3YXlzIC0KIAkgKiBub3JtYWwgY29tcGxldGlvbiwgZXJyb3IgY29tcGxldGlvbiwgYW5kIFNDU0kgdGltZW91dC4KLQkgKiBCb3RoIGNtcGxldGlvbnMgY2FuIHJhY2UgYWdhaW5zdCBTQ1NJIHRpbWVvdXQuICBXaGVuIG5vcm1hbAorCSAqIEJvdGggY29tcGxldGlvbnMgY2FuIHJhY2UgYWdhaW5zdCBTQ1NJIHRpbWVvdXQuICBXaGVuIG5vcm1hbAogCSAqIGNvbXBsZXRpb24gd2lucywgdGhlIHFjIG5ldmVyIHJlYWNoZXMgRUguICBXaGVuIGVycm9yCiAJICogY29tcGxldGlvbiB3aW5zLCB0aGUgcWMgaGFzIEFUQV9RQ0ZMQUdfRkFJTEVEIHNldC4KIAkgKgpAQCAtNTYyLDcgKzU2MiwxOSBAQAogCQlpbnQgbnJfdGltZWRvdXQgPSAwOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7CisJCQorCQkvKiBUaGlzIG11c3Qgb2NjdXIgdW5kZXIgdGhlIGFwLT5sb2NrIGFzIHdlIGRvbid0IHdhbnQKKwkJICAgYSBwb2xsZWQgcmVjb3ZlcnkgdG8gcmFjZSB0aGUgcmVhbCBpbnRlcnJ1cHQgaGFuZGxlcgorCQkgICAKKwkJICAgVGhlIGxvc3RfaW50ZXJydXB0IGhhbmRsZXIgY2hlY2tzIGZvciBhbnkgY29tcGxldGVkIGJ1dAorCQkgICBub24tbm90aWZpZWQgY29tbWFuZCBhbmQgY29tcGxldGVzIG11Y2ggbGlrZSBhbiBJUlEgaGFuZGxlci4KKwkJICAgCisJCSAgIFdlIHRoZW4gZmFsbCBpbnRvIHRoZSBlcnJvciByZWNvdmVyeSBjb2RlIHdoaWNoIHdpbGwgdHJlYXQKKwkJICAgdGhpcyBhcyBpZiBub3JtYWwgY29tcGxldGlvbiB3b24gdGhlIHJhY2UgKi8KIAorCQlpZiAoYXAtPm9wcy0+bG9zdF9pbnRlcnJ1cHQpCisJCQlhcC0+b3BzLT5sb3N0X2ludGVycnVwdChhcCk7CisJCQkKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjbWQsIHRtcCwgJmhvc3QtPmVoX2NtZF9xLCBlaF9lbnRyeSkgewogCQkJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIApAQCAtNjA2LDYgKzYxOCw5IEBACiAJCWFwLT5laF90cmllcyA9IEFUQV9FSF9NQVhfVFJJRVM7CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrX3dhaXQoYXAtPmxvY2spOworCQkKKwkvKiBJZiB3ZSB0aW1lZCByYWNlZCBub3JtYWwgY29tcGxldGlvbiBhbmQgdGhlcmUgaXMgbm90aGluZyB0bworCSAgIHJlY292ZXIgbnJfdGltZWRvdXQgPT0gMCB3aHkgZXhhY3RseSBhcmUgd2UgZG9pbmcgZXJyb3IgcmVjb3ZlcnkgPyAqLwogCiAgcmVwZWF0OgogCS8qIGludm9rZSBlcnJvciBoYW5kbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggZjkzZGMwMi4uODMzMmU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtNTIsNiArNTIsNyBAQAogCS5zb2Z0cmVzZXQJCT0gYXRhX3NmZl9zb2Z0cmVzZXQsCiAJLmhhcmRyZXNldAkJPSBzYXRhX3NmZl9oYXJkcmVzZXQsCiAJLnBvc3RyZXNldAkJPSBhdGFfc2ZmX3Bvc3RyZXNldCwKKwkuZHJhaW5fZmlmbwkJPSBhdGFfc2ZmX2RyYWluX2ZpZm8sCiAJLmVycm9yX2hhbmRsZXIJCT0gYXRhX3NmZl9lcnJvcl9oYW5kbGVyLAogCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQsCiAKQEAgLTY0LDYgKzY1LDggQEAKIAkuc2ZmX2lycV9vbgkJPSBhdGFfc2ZmX2lycV9vbiwKIAkuc2ZmX2lycV9jbGVhcgkJPSBhdGFfc2ZmX2lycV9jbGVhciwKIAorCS5sb3N0X2ludGVycnVwdAkJPSBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0LAorCiAJLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfcG9ydF9vcHMpOwpAQCAtMTY0Niw3ICsxNjQ5LDcgQEAKICAqCVJFVFVSTlM6CiAgKglPbmUgaWYgaW50ZXJydXB0IHdhcyBoYW5kbGVkLCB6ZXJvIGlmIG5vdCAoc2hhcmVkIGlycSkuCiAgKi8KLWlubGluZSB1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKK3Vuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKQEAgLTE3NzUsNiArMTc3OCw0OCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9pbnRlcnJ1cHQpOwogCiAvKioKKyAqCWF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQJLQlDaGVjayBmb3IgYW4gYXBwYXJlbnQgbG9zdCBpbnRlcnJ1cHQKKyAqCUBhcDogcG9ydCB0aGF0IGFwcGVhcnMgdG8gaGF2ZSB0aW1lZCBvdXQKKyAqCisgKglDYWxsZWQgZnJvbSB0aGUgbGliYXRhIGVycm9yIGhhbmRsZXJzIHdoZW4gdGhlIGNvcmUgY29kZSBzdXNwZWN0cworICoJYW4gaW50ZXJydXB0IGhhcyBiZWVuIGxvc3QuIElmIGl0IGhhcyBjb21wbGV0ZSBhbnl0aGluZyB3ZSBjYW4gYW5kCisgKgl0aGVuIHJldHVybi4gSW50ZXJmYWNlIG11c3Qgc3VwcG9ydCBhbHRzdGF0dXMgZm9yIHRoaXMgZmFzdGVyCisgKglyZWNvdmVyeSB0byBvY2N1ci4KKyAqCisgKglMb2NraW5nOgorICoJQ2FsbGVyIGhvbGRzIGhvc3QgbG9jaworICovCisKK3ZvaWQgYXRhX3NmZl9sb3N0X2ludGVycnVwdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCisJLyogT25seSBvbmUgb3V0c3RhbmRpbmcgY29tbWFuZCBwZXIgU0ZGIGNoYW5uZWwgKi8KKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7CisJLyogQ2hlY2sgd2UgaGF2ZSBhIGxpdmUgb25lLi4gKi8KKwlpZiAocWMgPT0gTlVMTCB8fCAgIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCisJCXJldHVybjsKKwkvKiBXZSBjYW5ub3QgbG9zZSBhbiBpbnRlcnJ1cHQgb24gYSBwb2xsZWQgY29tbWFuZCAqLworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJcmV0dXJuOworCS8qIFNlZSBpZiB0aGUgY29udHJvbGxlciB0aGlua3MgaXQgaXMgc3RpbGwgYnVzeSAtIGlmIHNvIHRoZSBjb21tYW5kCisJICAgaXNuJ3QgYSBsb3N0IElSUSBidXQgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwlzdGF0dXMgPSBhdGFfc2ZmX2FsdHN0YXR1cyhhcCk7CisJaWYgKHN0YXR1cyAmIEFUQV9CVVNZKQorCQlyZXR1cm47CisKKwkvKiBUaGVyZSB3YXMgYSBjb21tYW5kIHJ1bm5pbmcsIHdlIGFyZSBubyBsb25nZXIgYnVzeSBhbmQgd2UgaGF2ZQorCSAgIG5vIGludGVycnVwdC4gKi8KKwlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImxvc3QgaW50ZXJydXB0IChTdGF0dXMgMHgleClcbiIsCisJCQkJCQkJCXN0YXR1cyk7CisJLyogUnVuIHRoZSBob3N0IGludGVycnVwdCBsb2dpYyBhcyBpZiB0aGUgaW50ZXJydXB0IGhhZCBub3QgYmVlbgorCSAgIGxvc3QgKi8KKwlhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9sb3N0X2ludGVycnVwdCk7CisKKy8qKgogICoJYXRhX3NmZl9mcmVlemUgLSBGcmVlemUgU0ZGIGNvbnRyb2xsZXIgcG9ydAogICoJQGFwOiBwb3J0IHRvIGZyZWV6ZQogICoKQEAgLTIxOTksNiArMjI0NCwzOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3N0cmVzZXQpOwogCiAvKioKKyAqCWF0YV9zZmZfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisKK3ZvaWQgYXRhX3NmZl9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaW50IGNvdW50OworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisKKwkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggaW5jb21pbmcgZGF0YSB3aGVuIGEgY29tbWFuZCB3YXMgcnVubmluZyAqLworCWlmIChxYyA9PSBOVUxMIHx8IHFjLT5kbWFfZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybjsKKworCWFwID0gcWMtPmFwOworCS8qIERyYWluIHVwIHRvIDY0SyBvZiBkYXRhIGJlZm9yZSB3ZSBnaXZlIHVwIHRoaXMgcmVjb3ZlcnkgbWV0aG9kICovCisJZm9yIChjb3VudCA9IDA7IChhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKSAmIEFUQV9EUlEpCisJCQkJCQkmJiBjb3VudCA8IDMyNzY4OyBjb3VudCsrKQorCQlpb3JlYWQxNihhcC0+aW9hZGRyLmRhdGFfYWRkcik7CisKKwkvKiBDYW4gYmVjb21lIERFQlVHIGxhdGVyICovCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fREVCVUcsCisJCQkiZHJhaW5lZCAlZCBieXRlcyB0byBjbGVhciBEUlEuXG4iLCBjb3VudCk7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfZHJhaW5fZmlmbyk7CisKKy8qKgogICoJYXRhX3NmZl9lcnJvcl9oYW5kbGVyIC0gU3RvY2sgZXJyb3IgaGFuZGxlciBmb3IgQk1ETUEgY29udHJvbGxlcgogICoJQGFwOiBwb3J0IHRvIGhhbmRsZSBlcnJvciBmb3IKICAqCkBAIC0yMjM5LDcgKzIzMTcsOCBAQAogCQkgKiByZWFsbHkgYSB0aW1lb3V0IGV2ZW50LCBhZGp1c3QgZXJyb3IgbWFzayBhbmQKIAkJICogY2FuY2VsIGZyb3plbiBzdGF0ZS4KIAkJICovCi0JCWlmIChxYy0+ZXJyX21hc2sgPT0gQUNfRVJSX1RJTUVPVVQgJiYgKGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgeworCQlpZiAocWMtPmVycl9tYXNrID09IEFDX0VSUl9USU1FT1VUCisJCQkJCQkmJiAoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7CiAJCQlxYy0+ZXJyX21hc2sgPSBBQ19FUlJfSE9TVF9CVVM7CiAJCQl0aGF3ID0gMTsKIAkJfQpAQCAtMjI1MCw2ICsyMzI5LDEzIEBACiAJYXRhX3NmZl9zeW5jKGFwKTsJCS8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRoaXMgKi8KIAlhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKKwkvKiBXZSAqTVVTVCogZG8gRklGTyBkcmFpbmluZyBiZWZvcmUgd2UgaXNzdWUgYSByZXNldCBhcyBzZXZlcmFsCisJICogZGV2aWNlcyBoZWxwZnVsbHkgY2xlYXIgdGhlaXIgaW50ZXJuYWwgc3RhdGUgYW5kIHdpbGwgbG9jayBzb2xpZAorCSAqIGlmIHdlIHRvdWNoIHRoZSBkYXRhIHBvcnQgcG9zdCByZXNldC4gUGFzcyBxYyBpbiBjYXNlIGFueW9uZSB3YW50cworCSAqICB0byBkbyBkaWZmZXJlbnQgUElPL0RNQSByZWNvdmVyeSBvciBoYXMgcGVyIGNvbW1hbmQgZml4dXBzCisJICovCisJaWYgKGFwLT5vcHMtPmRyYWluX2ZpZm8pCisJCWFwLT5vcHMtPmRyYWluX2ZpZm8ocWMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yOTU5LDQgKzMwNDUsMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9zZmZfaW5pdF9vbmUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEuaCBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCmluZGV4IGNlYTgwMTQuLjg5YTFlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCkBAIC03OSw4ICs3OSw2IEBACiAJCQkgICB1NjQgYmxvY2ssIHUzMiBuX2Jsb2NrLCB1bnNpZ25lZCBpbnQgdGZfZmxhZ3MsCiAJCQkgICB1bnNpZ25lZCBpbnQgdGFnKTsKIGV4dGVybiB1NjQgYXRhX3RmX3JlYWRfYmxvY2soc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgYXRhX3Bpb19xdWV1ZV90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSk7CiBleHRlcm4gdm9pZCBhdGFfcG9ydF9mbHVzaF90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHVuc2lnbmVkIGF0YV9leGVjX2ludGVybmFsKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwgY29uc3QgdTggKmNkYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKaW5kZXggOGI3N2E5OC4uZDhmMzVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKQEAgLTI0Niw5ICsyNDYsOSBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAotCQkudWRtYV9tYXNrIAk9IDB4N2YsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCiAJCS5wb3J0X29wcwk9ICZwYWNwaV9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCmluZGV4IGViOTlkYmUuLjc1MWI3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwpAQCAtNDkyLDUzICs0OTIsNTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZhbGlfZWFybHlfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4MjAgYWRkZWQgRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fMjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJmFsaV8yMF9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCB3aXRoIHN1cHBvcnQgbG9naWMgYWRkZWQgVURNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzIwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCS8qIFVETUEzMyAqLworCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmYWxpXzIwX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEMyIGFkZHMgVURNQTY2ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzIgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9jMl9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDMyBpcyBVRE1BNjYgZm9yIG5vdyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2MzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzJfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzQgaXMgVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2M0ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzRfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzUgaXMgVURNQTEzMyB3aXRoIExCQTQ4IERNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2M1ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzVfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKaW5kZXggMTE1YjFjZC4uMzNhNzRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCkBAIC00NTUsNzQgKzQ1NSw3NCBAQAogc3RhdGljIGludCBhbWRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1sxMF0gPSB7Ci0JCXsJLyogMDogQU1EIDc0MDEgKi8KKwkJewkvKiAwOiBBTUQgNzQwMSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywJLyogTm8gU1dETUEgKi8KLQkJCS51ZG1hX21hc2sgPSAweDA3LAkvKiBVRE1BIDMzICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCQkucG9ydF9vcHMgPSAmYW1kMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiAxOiBFYXJseSBBTUQ3NDA5IC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwJLyogVURNQSA2NiAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmFtZDY2X3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogMjogQU1EIDc0MDksIG5vIHN3ZG1hIGVycmF0YSAqLworCQl7CS8qIDI6IEFNRCA3NDA5ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZhbWQ2Nl9wb3J0X29wcwogCQl9LAogCQl7CS8qIDM6IEFNRCA3NDExICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTAwX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogNDogQU1EIDc0NDEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMDBfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA1OiBBTUQgODExMSovCisJCXsJLyogNTogQU1EIDgxMTEgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAkvKiBVRE1BIDEzMywgbm8gc3dkbWEgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMzNfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA2OiBBTUQgODExMSBVRE1BIDEwMCAoU2VyZW5hZGUpICovCisJCXsJLyogNjogQU1EIDgxMTEgVURNQSAxMDAgKFNlcmVuYWRlKSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEzM19wb3J0X29wcwogCQl9LAogCQl7CS8qIDc6IE52aWRpYSBOZm9yY2UgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZudjEwMF9wb3J0X29wcwogCQl9LAotCQl7CS8qIDg6IE52aWRpYSBOZm9yY2UyIGFuZCBsYXRlciAqLworCQl7CS8qIDg6IE52aWRpYSBOZm9yY2UyIGFuZCBsYXRlciAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCS8qIFVETUEgMTMzLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkJLnBvcnRfb3BzID0gJm52MTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogOTogQU1EIENTNTUzNiAoR2VvZGUgY29tcGFuaW9uKSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9CiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwppbmRleCA2YjMwOTJjLi5kMzMyY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgkJcGVyZm9ybWFuY2UgQWxlc3NhbmRybyBadW1tbyA8YWxlc3NhbmRyby56dW1tb0B0b3dlcnRlY2guaXQ+CiAgKgogICoJVE9ETwotICoJODUwIHNlcmlhbGl6YXRpb24gb25jZSB0aGUgY29yZSBzdXBwb3J0cyBpdAogICoJSW52ZXN0aWdhdGUgbm9fZHNjIG9uIDg1MFIKICAqCUNsb2NrIGRldGVjdAogICovCkBAIC0yOSw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfYXJ0b3AiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjQuNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC41IgogCiAvKgogICoJVGhlIEFSVE9QIGhhcyAzMyBNaHogYW5kICJvdmVyIGNsb2NrZWQiIHRpbWluZyB0YWJsZXMuIFVudGlsIHdlCkBAIC0yODMsNiArMjgyLDMxIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDQgKyBhcC0+cG9ydF9ubywgdWx0cmEpOwogfQogCisvKioKKyAqCWFydG9wXzYyMTBfcWNfZGVmZXIJLQlpbXBsZW1lbnQgc2VyaWFsaXphdGlvbgorICoJQHFjOiBjb21tYW5kCisgKgorICoJSXNzdWUgY29tbWFuZHMgcGVyIGhvc3Qgb24gdGhpcyBjaGlwLgorICovCisKK3N0YXRpYyBpbnQgYXJ0b3A2MjEwX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcWMtPmFwLT5ob3N0OworCXN0cnVjdCBhdGFfcG9ydCAqYWx0ID0gaG9zdC0+cG9ydHNbMSBeIHFjLT5hcC0+cG9ydF9ub107CisJaW50IHJjOworCisJLyogRmlyc3QgYXBwbHkgdGhlIHVzdWFsIHJ1bGVzICovCisJcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogTm93IGFwcGx5IHNlcmlhbGl6YXRpb24gcnVsZXMuIE9ubHkgYWxsb3cgYSBjb21tYW5kIGlmIHRoZQorCSAgIG90aGVyIGNoYW5uZWwgc3RhdGUgbWFjaGluZSBpcyBpZGxlICovCisJaWYgKGFsdCAmJiBhbHQtPnFjX2FjdGl2ZSkKKwkJcmV0dXJuCUFUQV9ERUZFUl9QT1JUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhcnRvcF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwpAQCAtMjkzLDYgKzMxNyw3IEBACiAJLnNldF9waW9tb2RlCQk9IGFydG9wNjIxMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gYXJ0b3A2MjEwX3NldF9kbWFtb2RlLAogCS5wcmVyZXNldAkJPSBhcnRvcDYyMTBfcHJlX3Jlc2V0LAorCS5xY19kZWZlcgkJPSBhcnRvcDYyMTBfcWNfZGVmZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXJ0b3A2MjYwX29wcyA9IHsKQEAgLTMyMywyOSArMzQ4LDI5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjIxMCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjEwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyNnggPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182Mjh4ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI4eF9mYXN0ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CkBAIC0zNjIsMTIgKzM4Nyw4IEBACiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IDApIHsJLyogNjIxMCB2YXJpYW50ICovCiAJCXBwaVswXSA9ICZpbmZvXzYyMTA7Ci0JCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwogCQkvKiBCSU9TIG1heSBoYXZlIGxlZnQgdXMgaW4gVURNQSwgY2xlYXIgaXQgYmVmb3JlIGxpYmF0YSBwcm9iZSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1NCwgMCk7Ci0JCS8qIEZvciB0aGUgbW9tZW50IChhbHNvIGxhY2tzIGRzYykgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVJUT1AgNjIxMCByZXF1aXJlcyBzZXJpYWxpemUgZnVuY3Rpb25hbGl0eSBub3QgeWV0IHN1cHBvcnRlZCBieSBsaWJhdGEuXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vjb25kYXJ5IEFUQSBwb3J0cyB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuXG4iKTsKIAl9CiAJZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhID09IDEpCS8qIDYyNjAgKi8KIAkJcHBpWzBdID0gJmluZm9fNjI2eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKaW5kZXggYWI2MTA5NS4uNWMxMjlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKQEAgLTY3LDcgKzY3LDkgQEAKICAqCiAgKiBBbHRlciBQSU9fTUFTSyBiZWxvdyBhY2NvcmRpbmcgdG8gdGFibGUgdG8gc2V0IG1heGltYWwgUElPIG1vZGUuCiAgKi8KLSNkZWZpbmUgUElPX01BU0sgKDB4MWYpCitlbnVtIHsKKyAgUElPX01BU0sgPSBBVEFfUElPNCwKK307CiAKIC8qCiAgKiBTdHJ1Y3QgY29udGFpbmluZyBwcml2YXRlIGluZm9ybWF0aW9uIGFib3V0IGRldmljZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IDUwNmFkZGUuLmJlYzBiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMjIwLDkgKzIyMCw5IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNiwJLyogTm8gTVdETUEwIHN1cHBvcnQgKi8KLQkJLnVkbWFfbWFzayA9IDB4M0YsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZhdGlpeHBfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgYXRpaXhwX2VuYWJsZV9iaXRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggMTA1MGZlZC4uYzRiNDdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMTUwMiw3ICsxNTAyLDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MKIAkJCQl8IEFUQV9GTEFHX01NSU8KIAkJCQl8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IDAsCiAJCS51ZG1hX21hc2sJPSAwLAogCQkucG9ydF9vcHMJPSAmYmZpbl9wYXRhX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCmluZGV4IDM0YTM5NDIuLjVhY2Y5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYwpAQCAtMjExLDcgKzIxMSw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmY21kNjQwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCAzMTY3ZDhmLi5mOThkZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTI5OSw0MCArMjk5LDQwIEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGNtZF9pbmZvWzZdID0gewogCQl7CS8qIENNRCA2NDMgLSBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgd2l0aCBicm9rZW4gVURNQSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHdpdGggd29ya2luZyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHJldiAxICAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDZyMV9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDggKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDkgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwppbmRleCAxMTg2YmNkLi5kYjZhOTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY3RsX3BvcnRbXSA9IHsgMHgzRjYsIDB4Mzc2IH07CiAJc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzCT0gJmNzNTUyMF9wb3J0X29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbMl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwppbmRleCBiYmE0NTMzLi5jOTc0YjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKQEAgLTI5OCwxNSArMjk4LDE1IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZjczU1MzBfcG9ydF9vcHMKIAl9OwogCS8qIFRoZSBkb2NraW5nIGNvbm5lY3RvciBkb2Vzbid0IGRvIFVETUEsIGFuZCBpdCBzZWVtcyBub3QgTVdETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYWxtYXhfc2Vjb25kYXJ5ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJmNzNTUzMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKaW5kZXggOGIyMzZhZi4uZDMzYWEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCkBAIC0xODEsOCArMTgxLDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmY3M1NTM1X3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCmluZGV4IGFmZWQ5MjkuLjZkYTRjYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwpAQCAtMjQxLDggKzI0MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmNzNTUzNl9wb3J0X29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwppbmRleCBkNTQ2NDI1Li44ZmIwNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwpAQCAtMTI0LDggKzEyNCw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJmN5ODJjNjkzX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBhYzYzOTJlLi4yMDg1ZTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtMjUxLDkgKzI1MSw5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrIAk9IDB4MGYsIC8qIFVETUEgNjYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZlZmFyX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCmluZGV4IDY1YzI4ZTUuLmQ3ZjJkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwpAQCAtMzM2LDggKzMzNiw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzY2ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZocHQzNjZfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKaW5kZXggNDIxNjM5OS4uODFhYjU3MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtNzUzLDU1ICs3NTMsNTUgQEAKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MEEgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwYV9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MF8zMyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzBBIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGFfMzMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MGFfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MSwgMzcyIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaHB0MzcyX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IHByZXJlc2V0IG1ldGhvZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3Ml9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0X2ZuMSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0Mzc0X2ZuMV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IGQ1YzlmZDcuLjNkNTlmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC00NDEsOCArNDQxLDggQEAKIAkvKiBIUFQzNzJOIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzeDJuX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCmluZGV4IGYxOWNjNjQuLjdlMzEwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwpAQCAtMTg4LDExICsxODgsMTEgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9IUFQzWDNfRE1BKQogCQkvKiBGdXJ0aGVyIGRlYnVnIG5lZWRlZCAqLwotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAjZW5kaWYKIAkJLnBvcnRfb3BzID0gJmhwdDN4M19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwppbmRleCBjZjllOTg0Li5iNjYzYjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKQEAgLTQ1LDggKzQ1LDYgQEAKIAkuc3RlcHBpbmcJPSA2LAogfTsKIAotI2RlZmluZSBQQVRBX0lDU0lERV9NQVhfU0cJMTI4Ci0KIHN0cnVjdCBwYXRhX2ljc2lkZV9zdGF0ZSB7CiAJdm9pZCBfX2lvbWVtICppcnFfcG9ydDsKIAl2b2lkIF9faW9tZW0gKmlvY19iYXNlOwpAQCAtNTcsNyArNTUsNiBAQAogCQl1OCBkaXNhYmxlZDsKIAkJdW5zaWduZWQgaW50IHNwZWVkW0FUQV9NQVhfREVWSUNFU107CiAJfSBwb3J0WzJdOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1tQQVRBX0lDU0lERV9NQVhfU0ddOwogfTsKIAogc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gewpAQCAtMjIyLDkgKzIxOSw3IEBACiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCAqcnNnID0gc3RhdGUtPnNnOwogCXVuc2lnbmVkIGludCB3cml0ZSA9IHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURTsKLQl1bnNpZ25lZCBpbnQgc2k7CiAKIAkvKgogCSAqIFdlIGFyZSBzaW1wbGV4OyBCVUcgaWYgd2UgdHJ5IHRvIGZpZGRsZSB3aXRoIERNQQpAQCAtMjMzLDIwICsyMjgsMTIgQEAKIAlCVUdfT04oZG1hX2NoYW5uZWxfYWN0aXZlKHN0YXRlLT5kbWEpKTsKIAogCS8qCi0JICogQ29weSBBVEFzIHNjYXR0ZXJlZCBzZyBsaXN0IGludG8gYSBjb250aWd1b3VzIGFycmF5IG9mIHNnCi0JICovCi0JZm9yX2VhY2hfc2cocWMtPnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpIHsKLQkJbWVtY3B5KHJzZywgc2csIHNpemVvZigqc2cpKTsKLQkJcnNnKys7Ci0JfQotCi0JLyoKIAkgKiBSb3V0ZSB0aGUgRE1BIHNpZ25hbHMgdG8gdGhlIGNvcnJlY3QgaW50ZXJmYWNlCiAJICovCiAJd3JpdGViKHN0YXRlLT5wb3J0W2FwLT5wb3J0X25vXS5wb3J0X3NlbCwgc3RhdGUtPmlvY19iYXNlKTsKIAogCXNldF9kbWFfc3BlZWQoc3RhdGUtPmRtYSwgc3RhdGUtPnBvcnRbYXAtPnBvcnRfbm9dLnNwZWVkW3FjLT5kZXYtPmRldm5vXSk7Ci0Jc2V0X2RtYV9zZyhzdGF0ZS0+ZG1hLCBzdGF0ZS0+c2csIHJzZyAtIHN0YXRlLT5zZyk7CisJc2V0X2RtYV9zZyhzdGF0ZS0+ZG1hLCBxYy0+c2csIHFjLT5uX2VsZW0pOwogCXNldF9kbWFfbW9kZShzdGF0ZS0+ZG1hLCB3cml0ZSA/IERNQV9NT0RFX1dSSVRFIDogRE1BX01PREVfUkVBRCk7CiAKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwpAQCAtMjk3LDcgKzI4NCw3IEBACiAKIAlpZiAoZWMtPmRtYSAhPSBOT19ETUEgJiYgIXJlcXVlc3RfZG1hKGVjLT5kbWEsIERSVl9OQU1FKSkgewogCQlzdGF0ZS0+ZG1hID0gZWMtPmRtYTsKLQkJaW5mby0+bXdkbWFfbWFzayA9IDB4MDc7CS8qIE1XMC4uMiAqLworCQlpbmZvLT5td2RtYV9tYXNrID0gQVRBX01XRE1BMjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwNiw4ICsyOTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwYXRhX2ljc2lkZV9zaHQgPSB7CiAJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKLQkuc2dfdGFibGVzaXplCQk9IFBBVEFfSUNTSURFX01BWF9TRywKLQkuZG1hX2JvdW5kYXJ5CQk9IH4wLCAvKiBubyBkbWEgYm91bmRhcmllcyAqLworCS5zZ190YWJsZXNpemUJCT0gU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMsCisJLmRtYV9ib3VuZGFyeQkJPSBJT01EX0RNQV9CT1VOREFSWSwKIH07CiAKIHN0YXRpYyB2b2lkIHBhdGFfaWNzaWRlX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcykKQEAgLTQ3Myw3ICs0NjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucl9wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAotCQlhcC0+cGlvX21hc2sgPSAweDFmOworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAkJYXAtPm13ZG1hX21hc2sgPSBpbmZvLT5td2RtYV9tYXNrOwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPm9wcyA9ICZwYXRhX2ljc2lkZV9wb3J0X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCmluZGV4IDE1Y2RiOTEuLjRiY2ViODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2lzYXBucCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjUiCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzYXBucF9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMjgsNiArMjgsMTMgQEAKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpc2FwbnBfbm9hbHRfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCisJLyogTm8gYWx0c3RhdHVzIHNvIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBsb3N0IGludGVycnVwdCBwb2xsICovCisJLmxvc3RfaW50ZXJydXB0ID0gQVRBX09QX05VTEwsCit9OworCiAvKioKICAqCWlzYXBucF9pbml0X29uZQkJLQlhdHRhY2ggYW4gaXNhcG5wIGludGVyZmFjZQogICoJQGlkZXY6IFBuUCBkZXZpY2UKQEAgLTY1LDggKzcyLDggQEAKIAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKLQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAxOworCWFwLT5vcHMgPSAmaXNhcG5wX25vYWx0X3BvcnRfb3BzOworCWFwLT5waW9fbWFzayA9IEFUQV9QSU8wOwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCiAJYXAtPmlvYWRkci5jbWRfYWRkciA9IGNtZF9hZGRyOwpAQCAtNzYsNiArODMsNyBAQAogCQkJCQkgICBwbnBfcG9ydF9zdGFydChpZGV2LCAxKSwgMSk7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGN0bF9hZGRyOworCQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKIAl9CiAKIAlhdGFfc2ZmX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwppbmRleCBjMTEzZDdjLi5mMTU2ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKQEAgLTI2Miw4ICsyNjIsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsIC8qIEZJWE1FOiB3YW50IFVETUEgMTAwPyAqLwogCQkucG9ydF9vcHMJPSAmaXQ4MjEzX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKaW5kZXggYjA1Yjg2YS4uMTg4YmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCkBAIC04NzUsMjkgKzg3NSwyOSBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc21hcnQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9zbWFydF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFzc3RocnUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9wYXNzdGhydV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcmRjID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZpdDgyMXhfcmRjX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19yZGNfMTEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLyogTm8gVURNQSAqLwogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3JkY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwppbmRleCBiMTczYzE1Li4xOWZkZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKIAlhcC0+b3BzCT0gJml4cDR4eF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAweDFmOyAvKiBQSU80ICovCisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19OT19BVEFQSTsKIAogCWl4cDR4eF9zZXR1cF9wb3J0KGFwLCBkYXRhLCBjczAtPnN0YXJ0LCBjczEtPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggMzhjZjFhYi4uM2ExNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTEzNiw4ICsxMzYsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAKIAkJLnBvcnRfb3BzCT0gJmptaWNyb25fb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggZTNiYzFiNC4uM2Y4MzBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIHN0YXRpYyBpbnQgd2luYm9uZDsJCS8qIFNldCB0byBwcm9iZSBXaW5ib25kIGNvbnRyb2xsZXJzLAogCQkJCQlnaXZlIEkvTyBwb3J0IGlmIG5vbiBzdGFuZGFyZCAqLwogc3RhdGljIGludCBhdXRvc3BlZWQ7CQkvKiBDaGlwIHByZXNlbnQgd2hpY2ggc25vb3BzIHNwZWVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbnQgcGlvX21hc2sgPSAweDFGOwkvKiBQSU8gcmFuZ2UgZm9yIGF1dG9zcGVlZCBkZXZpY2VzICovCitzdGF0aWMgaW50IHBpb19tYXNrID0gQVRBX1BJTzQ7CS8qIFBJTyByYW5nZSBmb3IgYXV0b3NwZWVkIGRldmljZXMgKi8KIHN0YXRpYyBpbnQgaW9yZHlfbWFzayA9IDB4RkZGRkZGRkY7CS8qIFVzZSBpb3JkeSBpZiBhdmFpbGFibGUgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCmluZGV4IDc2ZTM5OWIuLjIwOTZmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJLyogU2xhdmUgcG9zc2libGUgYXMgaXRzIG1hZ2ljYWxseSBtYXBwZWQgbm90IHJlYWwgKi8KIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDUwYWU2ZDEuLjY4ZDI3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNzM3LDEwICs3MzcsMTAgQEAKIAkgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAibXdkbWEtbW9kZSIsICZwcm9wbGVuKTsKIAlpZiAoKHByb3ApICYmIChwcm9wbGVuID49IDQpKQotCQltd2RtYV9tYXNrID0gMHg3ICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOworCQltd2RtYV9tYXNrID0gQVRBX01XRE1BMiAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAidWRtYS1tb2RlIiwgJnByb3BsZW4pOwogCWlmICgocHJvcCkgJiYgKHByb3BsZW4gPj0gNCkpCi0JCXVkbWFfbWFzayA9IDB4NyAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKKwkJdWRtYV9tYXNrID0gQVRBX1VETUEyICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOwogCiAJYXRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAlpZiAoYXRhX2lycSA9PSBOT19JUlEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwppbmRleCBhYTU3NmNhLi5iMjFmMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgICB0aGUgTVBJSVggeW91ciBib3ggZ29lcyBjYXN0b3JzIHVwICovCiAKIAlhcC0+b3BzID0gJm1waWl4X3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MUY7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IDlkYzA1ZTEuLmJkYjIzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC01MSw4ICs1MSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkvKiBBY3R1YWxseSB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGVzZSBhcyB0aGUKIAkJICAgZmlybXdhcmUgZGVhbHMgd2l0aCBpdCAqLwotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwgLyogVURNQSAxMzMgKi8KIAkJLnBvcnRfb3BzCT0gJm5ldGNlbGxfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCmluZGV4IDRkZDlhM2IuLjBmYjZiMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcC0+b3BzID0gJm5pbmphMzJfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHgxRjsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlICsgMHgxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggNDBkNDExYy4uY2E1M2ZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDBGLAorCQkucGlvX21hc2sgPSBBVEFfUElPMywKIAkJLnBvcnRfb3BzID0gJm5zODc0MTBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKaW5kZXggODliZjVmOC4uNzczYjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKQEAgLTM0Niw4ICszNDYsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm5zODc0MTVfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CkBAIC0zNTUsOCArMzU1LDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvODc1NjAgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmbnM4NzU2MF9wYXRhX29wcywKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwppbmRleCAwZmU0ZWYzLi5lZmUyYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWFwLT5wcml2YXRlX2RhdGEgPSBjZl9wb3J0OwogCWNmX3BvcnQtPmFwID0gYXA7CiAJYXAtPm9wcyA9ICZvY3Rlb25fY2Zfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4N2Y7IC8qIFN1cHBvcnQgUElPIDAtNiAqLworCWFwLT5waW9fbWFzayA9IEFUQV9QSU82OwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZCiAJCSAgfCBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HOwogCkBAIC05MDAsNyArOTAwLDcgQEAKIAkJYXAtPmlvYWRkci5jdGxfYWRkcgk9IGNzMSArICg2IDw8IDEpICsgMTsKIAkJb2N0ZW9uX2NmX29wcy5zZmZfZGF0YV94ZmVyID0gb2N0ZW9uX2NmX2RhdGFfeGZlcjE2OwogCi0JCWFwLT5td2RtYV9tYXNrCT0gMHgxZjsgLyogU3VwcG9ydCBNV0RNQSAwLTQgKi8KKwkJYXAtPm13ZG1hX21hc2sJPSBBVEFfTVdETUE0OwogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpcnFfaGFuZGxlciA9IG9jdGVvbl9jZl9pbnRlcnJ1cHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggMmMxYTkxYy4uODRhYzUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm9sZHBpaXhfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCmluZGV4IGU0ZmE0ZDUuLjk5ZWRkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZvcHRpX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCmluZGV4IDkzYmI2ZTkuLjg2ODg1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCkBAIC0zOTksMTUgKzM5OSwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmb3B0aWRtYV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZvcHRpcGx1c19wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb184MmM3MDAsIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDY0YjJlMjIuLmY0ZDAwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfcGNtY2lhIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuNSIKIAogLyoKICAqCVByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gZ2x1ZSBzdHVmZiB0b2dldGhlcgpAQCAtMTI2LDYgKzEyNiwzNyBAQAogCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJcGNtY2lhXzhiaXRfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisgCit2b2lkIHBjbWNpYV84Yml0X2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbmNvbWluZyBkYXRhIHdoZW4gYSBjb21tYW5kIHdhcyBydW5uaW5nICovCisJaWYgKHFjID09IE5VTEwgfHwgcWMtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJYXAgPSBxYy0+YXA7CisKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJCSYmIGNvdW50KysgPCA2NTUzNjspCisJCWlvcmVhZDgoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwKKwkJCQkJCQkJY291bnQpOworCit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBjbWNpYV9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMTQzLDYgKzE3NCw3IEBACiAJLnNmZl9kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyXzhiaXQsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlXzhiaXQsCisJLmRyYWluX2ZpZm8JPSBwY21jaWFfOGJpdF9kcmFpbl9maWZvLAogfTsKIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCkBAIC0yOTksNyArMzMxLDcgQEAKIAkJYXAgPSBob3N0LT5wb3J0c1twXTsKIAogCQlhcC0+b3BzID0gb3BzOwotCQlhcC0+cGlvX21hc2sgPSAxOwkJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGlvX2FkZHIgKyAweDEwICogcDsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyICsgMHgxMCAqIHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKaW5kZXggZTk0ZWZjYy4uY2E1Y2FkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwpAQCAtMTUyLDE4ICsxNTIsMTggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJICAgICAgICAgICAgICAgICAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmcGRjMjAyN3hfcGF0YTEwMF9vcHMsCiAJfSwKIAkvKiBQRENfVURNQV8xMzMgKi8KIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKICAgICAgICAgICAgICAgICAgICAgICAgIAkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsIC8qIHVkbWEwLTYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkYzIwMjd4X3BhdGExMzNfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKaW5kZXggNzk5YTZhMC4uNWZlZGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCkBAIC0yOTEsMjIgKzI5MSwyMiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzNdID0gewogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI0eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCBmMWIyNmY3Li40NTg3OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKQEAgLTIxMiwxMSArMjEyLDExIEBACiAKIAlpZiAodHlwZSA9PSA2NTgwKSB7CiAJCWFwLT5vcHMgPSAmcWRpNjU4MF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCX0gZWxzZSB7CiAJCWFwLT5vcHMgPSAmcWRpNjUwMF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgwNzsJLyogQWN0dWFsbHkgUElPMyAhSU9SRFkgaXMgcG9zc2libGUgKi8KKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzI7IC8qIEFjdHVhbGx5IFBJTzMgIUlPUkRZIGlzIHBvc3NpYmxlICovCiAJCWFwLT5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19JT1JEWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKaW5kZXggNjk1ZDQ0YS4uNDQwMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKQEAgLTIxNiw5ICsyMTYsOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4MTQsIC8qIFVETUEzMy82NiBvbmx5ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTI0X09OTFksCiAJCS5wb3J0X29wcwk9ICZyYWRpc3lzX3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCmluZGV4IGViZmNkYTIuLjhlM2NkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKQEAgLTQ4LDYzICs0OCwxMSBAQAogc3RydWN0IHJiNTMyX2NmX2luZm8gewogCXZvaWQgX19pb21lbQkqaW9iYXNlOwogCXVuc2lnbmVkIGludAlncGlvX2xpbmU7Ci0JaW50CQlmcm96ZW47CiAJdW5zaWduZWQgaW50CWlycTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmI1MzJfcGF0YV9maW5pc2hfaW8oc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhaC0+cHJpdmF0ZV9kYXRhOwotCi0JLyogRklYTUU6IEtlZXAgcHJldmlvdXMgZGVsYXkuIElmIHRoaXMgaXMgbWVyZWx5IGEgZmVuY2UgdGhlbgotCSAgIGF0YV9zZmZfc3luYyBtaWdodCBiZSBzdWZmaWNpZW50LiAqLwotCWF0YV9zZmZfZG1hX3BhdXNlKGFwKTsKLQluZGVsYXkoUkI1MDBfQ0ZfSU9fREVMQVkpOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCWNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXdyaXRlYih0Zi0+Y29tbWFuZCwgYXAtPmlvYWRkci5jb21tYW5kX2FkZHIpOwotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByYjUzMl9wYXRhX2RhdGFfeGZlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCXVuc2lnbmVkIGludCBidWZsZW4sIGludCB3cml0ZV9kYXRhKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5saW5rLT5hcDsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOwotCWludCByZXRsZW4gPSBidWZsZW47Ci0KLQlpZiAod3JpdGVfZGF0YSkgewotCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQotCQkJd3JpdGViKCpidWYsIGlvYWRkcik7Ci0JfSBlbHNlIHsKLQkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKLQkJCSpidWYgPSByZWFkYihpb2FkZHIpOwotCX0KLQotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFkZXYtPmxpbmstPmFwKTsKLQlyZXR1cm4gcmV0bGVuOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDA7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCByYjUzMl9wYXRhX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gZGV2X2luc3RhbmNlOwpAQCAtMTEyLDggKzYwLDcgQEAKIAogCWlmIChncGlvX2dldF92YWx1ZShpbmZvLT5ncGlvX2xpbmUpKSB7CiAJCXNldF9pcnFfdHlwZShpbmZvLT5pcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0JCWlmICghaW5mby0+ZnJvemVuKQotCQkJYXRhX3NmZl9pbnRlcnJ1cHQoaW5mby0+aXJxLCBkZXZfaW5zdGFuY2UpOworCQlhdGFfc2ZmX2ludGVycnVwdChpbmZvLT5pcnEsIGRldl9pbnN0YW5jZSk7CiAJfSBlbHNlIHsKIAkJc2V0X2lycV90eXBlKGluZm8tPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJfQpAQCAtMTIzLDEwICs3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYjUzMl9wYXRhX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKLQkuc2ZmX2V4ZWNfY29tbWFuZAk9IHJiNTMyX3BhdGFfZXhlY19jb21tYW5kLAotCS5zZmZfZGF0YV94ZmVyCQk9IHJiNTMyX3BhdGFfZGF0YV94ZmVyLAotCS5mcmVlemUJCQk9IHJiNTMyX3BhdGFfZnJlZXplLAotCS50aGF3CQkJPSByYjUzMl9wYXRhX3RoYXcsCisJLnNmZl9kYXRhX3hmZXIJCT0gYXRhX3NmZl9kYXRhX3hmZXIzMiwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQ1LDcgKzg5LDcgQEAKIAlhcCA9IGFoLT5wb3J0c1swXTsKIAogCWFwLT5vcHMJCT0gJnJiNTMyX3BhdGFfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrCT0gMHgxZjsgLyogUElPNCAqLworCWFwLT5waW9fbWFzawk9IEFUQV9QSU80OwogCWFwLT5mbGFncwk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU87CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyCT0gaW5mby0+aW9iYXNlICsgUkI1MDBfQ0ZfUkVHX0JBU0U7CkBAIC0xNjAsNyArMTA0LDcgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgcmI1MzJfcGF0YV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJaW50IGdwaW87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGF0YV9ob3N0ICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDQ2ZDZiYzEuLjBjNTc0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtODgsNyArODgsNyBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJnJ6MTAwMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggOWE0YmRjYS4uZjQ5ODE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yLDcgKzIsNiBAQAogICogTmV3IEFUQSBsYXllciBTQzEyMDAgZHJpdmVyCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqIFRPRE86IE1vZGUgc2VsZWN0aW9uIGZpbHRlcmluZwotICogVE9ETzogQ2FuJ3QgZW5hYmxlIHNlY29uZCBjaGFubmVsIHVudGlsIEFUQSBjb3JlIGhhcyBzZXJpYWxpemUKICAqIFRPRE86IE5lZWRzIGN1c3RvbSBETUEgY2xlYW51cCBjb2RlCiAgKgogICogQmFzZWQgdmVyeSBoZWF2aWx5IG9uCkBAIC0xNzgsNiArMTc3LDMxIEBACiAJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCisvKioKKyAqCXNjMTIwMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglTZXJpYWxpemUgY29tbWFuZCBpc3N1ZSBvbiB0aGlzIGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCBzYzEyMDBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjMTIwMF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCkBAIC0xODcsNiArMjExLDcgQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAogCS5xY19pc3N1ZQk9IHNjMTIwMF9xY19pc3N1ZSwKKwkucWNfZGVmZXIJPSBzYzEyMDBfcWNfZGVmZXIsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gc2MxMjAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNjMTIwMF9zZXRfZG1hbW9kZSwKQEAgLTIwNSwxMyArMjMwLDEzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwogCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OwogCiAJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBkNDQ3ZjFjLi40MjU3ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTEwMDEsOCArMTAwMSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NjX3BvcnRfaW5mb1tdID0gewogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDAwLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLyogTm8gTVdETUEgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnNjY19wYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zY2guYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKaW5kZXggNmFlZWVlYi4uOTljY2ViNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2guYwpAQCAtODQsOSArODQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NoX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSBBVEFfUElPNCwgICAvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsIC8qIG13ZG1hMC0yICovCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgIC8qIHVkbWEwLTUgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2NoX3BhdGFfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDhkMmZkOWQuLmJlYWVkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTM5OCwyNiArMzk4LDI2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CiAJCXsgLyogT1NCNCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19vc2I0X3BvcnRfb3BzCiAJCX0sIHsgLyogT1NCNCBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSAweDAwLAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkvKiBObyBVRE1BICovCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgLSBsYXRlciByZXZpc2lvbnMqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3NfY3NiX3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDllNzY0ZTUuLjRjYjY0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMjgyLDE1ICsyODIsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbG93ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZzaWw2ODBfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggMjdjZWI0Mi4uNDg4ZTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCkBAIC01NTIsNTEgKzU1Miw1NyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSAweDA3LAotCS51ZG1hX21hc2sJPSAwLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkvKiBObyBVRE1BICovCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzMzID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gMHgwNywKLQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAkvKiBVRE1BIDMzICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzY2ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLworCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2lzXzEwMF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzMgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX29wcywKIH07CiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19mb3Jfc2F0YSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Zvcl9zYXRhX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Vhcmx5X29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMWIwZTdiNi4uMjlmNzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMjgzLDEzICsyODMsMTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJLyogZm9yIG5vdyB1c2Ugb25seSB0aGUgZmlyc3QgcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCBlZjk1OTc1Li5mMWYxM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtMTkxLDggKzE5MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnRyaWZsZXhfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IGJhNTU2ZDMuLmIwOGU2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtNDIyLDQ2ICs0MjIsNDYgQEAKIAkvKiBFYXJseSBWSUEgd2l0aG91dCBVRE1BIHN1cHBvcnQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogRGl0dG8gd2l0aCBJUlEgbWFza2luZyByZXF1aXJlZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wc19ub2lycSwKIAl9OwogCS8qIFZJQSBVRE1BIDMzIGRldmljZXMgKGFuZCBib3JrZWQgNjYpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMzNfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSAxMDAgZGV2aWNlcyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTEwMF9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogRklYTUU6IHNob3VsZCBjaGVjayBub3J0aCBicmlkZ2UgKi8KIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IDMxOWUxNjQuLjZkODYxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJYXRhX3BvcnRfZGVzYyhhcCwgImNtZCAweCVseCBjdGwgMHglbHgiLCBjbWRfcG9ydCwgY3RsX3BvcnQpOwogCiAJCWFwLT5vcHMgPSAmd2luYm9uZF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCmluZGV4IGJlNTM1NDUuLjM5NTg4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwpAQCAtMTQ4LDYgKzE0OCw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWRtYV9hdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKIAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKKwogCS5jaGVja19hdGFwaV9kbWEJPSBhZG1hX2NoZWNrX2F0YXBpX2RtYSwKIAkucWNfcHJlcAkJPSBhZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFkbWFfcWNfaXNzdWUsCkBAIC0xNjYsNyArMTY4LDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYWRtYV9hdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCA1NWJjODhjLi5jMmU5MGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTEyNzksOCArMTI3OSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2F0YV9mc2xfcG9ydF9pbmZvW10gPSB7CiAJewogCSAuZmxhZ3MgPSBTQVRBX0ZTTF9IT1NUX0ZMQUdTLAotCSAucGlvX21hc2sgPSAweDFmLAkvKiBwaW8gMC00ICovCi0JIC51ZG1hX21hc2sgPSAweDdmLAkvKiB1ZG1hIDAtNiAqLworCSAucGlvX21hc2sgPSBBVEFfUElPNCwKKwkgLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkgLnBvcnRfb3BzID0gJnNhdGFfZnNsX29wcywKIAkgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggZmJiZDg3Yy4uMzA1YTRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmljX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19QSU9fRE1BLAotCS5waW9fbWFzawkJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawkJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCS5waW9fbWFzawkJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawkJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwkJPSAmaW5pY19wb3J0X29wcwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCA3NGIxMDgwLi5hMzc3MjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xLDEwICsxLDEzIEBACiAvKgogICogc2F0YV9tdi5jIC0gTWFydmVsbCBTQVRBIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgMjAwODogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDk6IE1hcnZlbGwgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNTogRU1DIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJldHQgUnVzcy4KKyAqIEV4dGVuc2l2ZSBvdmVyaGF1bCBhbmQgZW5oYW5jZW1lbnQgYnkgTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+LgorICoKICAqIFBsZWFzZSBBTFdBWVMgY29weSBsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnIG9uIGVtYWlscy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMjAgKzI4LDEzIEBACiAvKgogICogc2F0YV9tdiBUT0RPIGxpc3Q6CiAgKgotICogLS0+IEVycmF0YSB3b3JrYXJvdW5kIGZvciBOQ1EgZGV2aWNlIGVycm9ycy4KLSAqCiAgKiAtLT4gTW9yZSBlcnJhdGEgd29ya2Fyb3VuZHMgZm9yIFBDSS1YLgogICoKICAqIC0tPiBDb21wbGV0ZSBhIGZ1bGwgZXJyYXRhIGF1ZGl0IGZvciBhbGwgY2hpcHNldHMgdG8gaWRlbnRpZnkgb3RoZXJzLgogICoKLSAqIC0tPiBBVEFQSSBzdXBwb3J0IChNYXJ2ZWxsIGNsYWltcyB0aGUgNjB4eC83MHh4IGNoaXBzIGNhbiBkbyBpdCkuCi0gKgogICogLS0+IERldmVsb3AgYSBsb3ctcG93ZXItY29uc3VtcHRpb24gc3RyYXRlZ3ksIGFuZCBpbXBsZW1lbnQgaXQuCiAgKgotICogLS0+IFtFeHBlcmltZW50LCBsb3cgcHJpb3JpdHldIEludmVzdGlnYXRlIGludGVycnVwdCBjb2FsZXNjaW5nLgotICogICAgICAgUXVpdGUgb2Z0ZW4sIGVzcGVjaWFsbHkgd2l0aCBQQ0kgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyAoTVNJKSwKLSAqICAgICAgIHRoZSBvdmVyaGVhZCByZWR1Y2VkIGJ5IGludGVycnVwdCBtaXRpZ2F0aW9uIGlzIHF1aXRlIG9mdGVuIG5vdAotICogICAgICAgd29ydGggdGhlIGxhdGVuY3kgY29zdC4KKyAqIC0tPiBBZGQgc3lzZnMgYXR0cmlidXRlcyBmb3IgcGVyLWNoaXAgLyBwZXItSEMgSVJRIGNvYWxlc2NpbmcgdGhyZXNob2xkcy4KICAqCiAgKiAtLT4gW0V4cGVyaW1lbnQsIE1hcnZlbGwgdmFsdWUgYWRkZWRdIElzIGl0IHBvc3NpYmxlIHRvIHVzZSB0YXJnZXQKICAqICAgICAgIG1vZGUgdG8gY3Jvc3MtY29ubmVjdCB0d28gTGludXggYm94ZXMgd2l0aCBNYXJ2ZWxsIGNhcmRzPyAgSWYgc28sCkBAIC02OCw3ICs2NCwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX212IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4yNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMjciCisKKy8qCisgKiBtb2R1bGUgb3B0aW9ucworICovCisKK3N0YXRpYyBpbnQgbXNpOworI2lmZGVmIENPTkZJR19QQ0kKK21vZHVsZV9wYXJhbShtc2ksIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7CisjZW5kaWYKKworc3RhdGljIGludCBpcnFfY29hbGVzY2luZ19pb19jb3VudDsKK21vZHVsZV9wYXJhbShpcnFfY29hbGVzY2luZ19pb19jb3VudCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsCisJCSAiSVJRIGNvYWxlc2NpbmcgSS9PIGNvdW50IHRocmVzaG9sZCAoMC4uMjU1KSIpOworCitzdGF0aWMgaW50IGlycV9jb2FsZXNjaW5nX3VzZWNzOworbW9kdWxlX3BhcmFtKGlycV9jb2FsZXNjaW5nX3VzZWNzLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnFfY29hbGVzY2luZ191c2VjcywKKwkJICJJUlEgY29hbGVzY2luZyB0aW1lIHRocmVzaG9sZCBpbiB1c2VjcyIpOwogCiBlbnVtIHsKIAkvKiBCQVIncyBhcmUgZW51bWVyYXRlZCBpbiB0ZXJtcyBvZiBwY2lfcmVzb3VyY2Vfc3RhcnQoKSB0ZXJtcyAqLwpAQCAtNzksMTMgKzk1LDMyIEBACiAJTVZfTUFKT1JfUkVHX0FSRUFfU1oJPSAweDEwMDAwLAkvKiA2NEtCICovCiAJTVZfTUlOT1JfUkVHX0FSRUFfU1oJPSAweDIwMDAsCS8qIDhLQiAqLwogCisJLyogRm9yIHVzZSB3aXRoIGJvdGggSVJRIGNvYWxlc2NpbmcgbWV0aG9kcyAoImFsbCBwb3J0cyIgb3IgInBlci1IQyIgKi8KKwlDT0FMX0NMT0NLU19QRVJfVVNFQwk9IDE1MCwJCS8qIGZvciBjYWxjdWxhdGluZyBDT0FMX1RJTUVzICovCisJTUFYX0NPQUxfVElNRV9USFJFU0hPTEQJPSAoKDEgPDwgMjQpIC0gMSksIC8qIGludGVybmFsIGNsb2NrcyBjb3VudCAqLworCU1BWF9DT0FMX0lPX0NPVU5UCT0gMjU1LAkJLyogY29tcGxldGVkIEkvTyBjb3VudCAqLworCiAJTVZfUENJX1JFR19CQVNFCQk9IDAsCi0JTVZfSVJRX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAkvKiA2eHh4IHBhcnQgb25seSAqLwotCU1WX0lSUV9DT0FMX0NBVVNFCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4MDgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0xPCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ODgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0hJCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAotCU1WX0lSUV9DT0FMX1RIUkVTSE9MRAkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGNjKSwKLQlNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRAk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ZDApLAorCisJLyoKKwkgKiBQZXItY2hpcCAoImFsbCBwb3J0cyIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBvbmx5IGZvciBHRU5fSUkgLyBHRU5fSUlFIGhhcmR3YXJlLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCU1WX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAorCU1WX0lSUV9DT0FMX0NBVVNFCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDA4KSwKKwlBTExfUE9SVFNfQ09BTF9JUlEJPSAoMSA8PCA0KSwJLyogYWxsIHBvcnRzIGlycSBldmVudCAqLworCisJTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEICAgPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4Y2MpLAorCU1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEID0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweGQwKSwKKworCS8qCisJICogUmVnaXN0ZXJzIGZvciB0aGUgKHVudXNlZCBoZXJlKSB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nIGZlYXR1cmU6CisJICovCisJTVZfVFJBTl9DT0FMX0NBVVNFX0xPCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDg4KSwKKwlNVl9UUkFOX0NPQUxfQ0FVU0VfSEkJPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAogCiAJTVZfU0FUQUhDMF9SRUdfQkFTRQk9IDB4MjAwMDAsCiAJTVZfRkxBU0hfQ1RMX09GUwk9IDB4MTA0NmMsCkBAIC0xMTcsMTcgKzE1MiwxNiBAQAogCiAJLyogSG9zdCBGbGFncyAqLwogCU1WX0ZMQUdfRFVBTF9IQwkJPSAoMSA8PCAzMCksICAvKiB0d28gU0FUQSBIb3N0IENvbnRyb2xsZXJzICovCi0JTVZfRkxBR19JUlFfQ09BTEVTQ0UJPSAoMSA8PCAyOSksICAvKiBJUlEgY29hbGVzY2luZyBjYXBhYmlsaXR5ICovCiAKIAlNVl9DT01NT05fRkxBR1MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fQVRBUEkgfAotCQkJCSAgQVRBX0ZMQUdfUElPX1BPTExJTkcsCisJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX1BPTExJTkcsCiAKLQlNVl82WFhYX0ZMQUdTCQk9IE1WX0ZMQUdfSVJRX0NPQUxFU0NFLAorCU1WX0dFTl9JX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX05PX0FUQVBJLAogCi0JTVZfR0VOSUlFX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAotCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKLQkJCQkgIEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0FOLAorCU1WX0dFTl9JSV9GTEFHUwkJPSBNVl9DT01NT05fRkxBR1MgfCBBVEFfRkxBR19OQ1EgfAorCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBLAorCisJTVZfR0VOX0lJRV9GTEFHUwk9IE1WX0dFTl9JSV9GTEFHUyB8IEFUQV9GTEFHX0FOLAogCiAJQ1JRQl9GTEFHX1JFQUQJCT0gKDEgPDwgMCksCiAJQ1JRQl9UQUdfU0hJRlQJCT0gMSwKQEAgLTE4MCwxNiArMjE0LDE4IEBACiAJUENJX0hDX01BSU5fSVJRX01BU0tfT0ZTICA9IDB4MWQ2NCwKIAlTT0NfSENfTUFJTl9JUlFfQ0FVU0VfT0ZTID0gMHgyMDAyMCwKIAlTT0NfSENfTUFJTl9JUlFfTUFTS19PRlMgID0gMHgyMDAyNCwKLQlFUlJfSVJRCQkJPSAoMSA8PCAwKSwJLyogc2hpZnQgYnkgcG9ydCAjICovCi0JRE9ORV9JUlEJCT0gKDEgPDwgMSksCS8qIHNoaWZ0IGJ5IHBvcnQgIyAqLworCUVSUl9JUlEJCQk9ICgxIDw8IDApLAkvKiBzaGlmdCBieSAoMiAqIHBvcnQgIykgKi8KKwlET05FX0lSUQkJPSAoMSA8PCAxKSwJLyogc2hpZnQgYnkgKDIgKiBwb3J0ICMpICovCiAJSEMwX0lSUV9QRU5ECQk9IDB4MWZmLAkvKiBiaXRzIDAtOCA9IEhDMCdzIHBvcnRzICovCiAJSENfU0hJRlQJCT0gOSwJCS8qIGJpdHMgOS0xNyA9IEhDMSdzIHBvcnRzICovCisJRE9ORV9JUlFfMF8zCQk9IDB4MDAwMDAwYWEsCS8qIERPTkVfSVJRIHBvcnRzIDAsMSwyLDMgKi8KKwlET05FX0lSUV80XzcJCT0gKERPTkVfSVJRXzBfMyA8PCBIQ19TSElGVCksICAvKiA0LDUsNiw3ICovCiAJUENJX0VSUgkJCT0gKDEgPDwgMTgpLAotCVRSQU5fTE9fRE9ORQkJPSAoMSA8PCAxOSksCS8qIDZ4eHg6IElSUSBjb2FsZXNjaW5nICovCi0JVFJBTl9ISV9ET05FCQk9ICgxIDw8IDIwKSwJLyogNnh4eDogSVJRIGNvYWxlc2NpbmcgKi8KLQlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCi0JUE9SVFNfNF83X0NPQUxfRE9ORQk9ICgxIDw8IDE3KSwKLQlQT1JUU18wXzdfQ09BTF9ET05FCT0gKDEgPDwgMjEpLAkvKiA2eHh4OiBJUlEgY29hbGVzY2luZyAqLworCVRSQU5fQ09BTF9MT19ET05FCT0gKDEgPDwgMTkpLAkvKiB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nICovCisJVFJBTl9DT0FMX0hJX0RPTkUJPSAoMSA8PCAyMCksCS8qIHRyYW5zYWN0aW9uIGNvYWxlc2NpbmcgKi8KKwlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCS8qIEhDMCBJUlEgY29hbGVzY2luZyAqLworCVBPUlRTXzRfN19DT0FMX0RPTkUJPSAoMSA8PCAxNyksCS8qIEhDMSBJUlEgY29hbGVzY2luZyAqLworCUFMTF9QT1JUU19DT0FMX0RPTkUJPSAoMSA8PCAyMSksCS8qIEdFTl9JSShFKSBJUlEgY29hbGVzY2luZyAqLwogCUdQSU9fSU5UCQk9ICgxIDw8IDIyKSwKIAlTRUxGX0lOVAkJPSAoMSA8PCAyMyksCiAJVFdTSV9JTlQJCT0gKDEgPDwgMjQpLApAQCAtMjA1LDYgKzI0MSwyMSBAQAogCUhDX0NPQUxfSVJRCQk9ICgxIDw8IDQpLAkvKiBJUlEgY29hbGVzY2luZyAqLwogCURFVl9JUlEJCQk9ICgxIDw8IDgpLAkvKiBzaGlmdCBieSBwb3J0ICMgKi8KIAorCS8qCisJICogUGVyLUhDIChIb3N0LUNvbnRyb2xsZXIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBwcmVzZW50IG9uIGFsbCBjaGlwIGdlbmVyYXRpb25zLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCUhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMJPSAweDAwMGMsCisJSENfSVJRX0NPQUxfVElNRV9USFJFU0hPTERfT0ZTCT0gMHgwMDEwLAorCisJU09DX0xFRF9DVFJMX09GUwk9IDB4MmMsCisJU09DX0xFRF9DVFJMX0JMSU5LCT0gKDEgPDwgMCksCS8qIEFjdGl2ZSBMRUQgYmxpbmsgKi8KKwlTT0NfTEVEX0NUUkxfQUNUX1BSRVNFTkNFID0gKDEgPDwgMiksCS8qIE11bHRpcGxleCBkZXYgcHJlc2VuY2UgKi8KKwkJCQkJCS8qICB3aXRoIGRldiBhY3Rpdml0eSBMRUQgKi8KKwogCS8qIFNoYWRvdyBibG9jayByZWdpc3RlcnMgKi8KIAlTSERfQkxLX09GUwkJPSAweDEwMCwKIAlTSERfQ1RMX0FTVF9PRlMJCT0gMHgyMCwJCS8qIG9mcyBmcm9tIFNIRF9CTEtfT0ZTICovCkBAIC0zNDYsNiArMzk3LDEyIEBACiAJRURNQV9BUkJfQ0ZHX09GUwk9IDB4MzgsCiAKIAlFRE1BX0hBTFRDT05EX09GUwk9IDB4NjAsCQkvKiBHZW5JSWUgaGFsdCBjb25kaXRpb25zICovCisJRURNQV9VTktOT1dOX1JTVkRfT0ZTCT0gMHg2QywJCS8qIEdlbklJZSB1bmtub3duL3Jlc2VydmVkICovCisKKwlCTURNQV9DTURfT0ZTCQk9IDB4MjI0LAkvKiBibWRtYSBjb21tYW5kIHJlZ2lzdGVyICovCisJQk1ETUFfU1RBVFVTX09GUwk9IDB4MjI4LAkvKiBibWRtYSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlCTURNQV9QUkRfTE9XX09GUwk9IDB4MjJjLAkvKiBibWRtYSBQUkQgYWRkciAzMTowICovCisJQk1ETUFfUFJEX0hJR0hfT0ZTCT0gMHgyMzAsCS8qIGJtZG1hIFBSRCBhZGRyIDYzOjMyICovCiAKIAkvKiBIb3N0IHByaXZhdGUgZmxhZ3MgKGhwX2ZsYWdzKSAqLwogCU1WX0hQX0ZMQUdfTVNJCQk9ICgxIDw8IDApLApAQCAtMzU5LDEyICs0MTYsMTQgQEAKIAlNVl9IUF9QQ0lFCQk9ICgxIDw8IDkpLAkvKiBQQ0llIGJ1cy9yZWdzOiA3MDQyICovCiAJTVZfSFBfQ1VUX1RIUk9VR0gJPSAoMSA8PCAxMCksCS8qIGNhbiB1c2UgRURNQSBjdXQtdGhyb3VnaCAqLwogCU1WX0hQX0ZMQUdfU09DCQk9ICgxIDw8IDExKSwJLyogU3lzdGVtT25DaGlwLCBubyBQQ0kgKi8KKwlNVl9IUF9RVUlSS19MRURfQkxJTktfRU4gPSAoMSA8PCAxMiksCS8qIGlzIGxlZCBibGlua2luZyBlbmFibGVkPyAqLwogCiAJLyogUG9ydCBwcml2YXRlIGZsYWdzIChwcF9mbGFncykgKi8KIAlNVl9QUF9GTEFHX0VETUFfRU4JPSAoMSA8PCAwKSwJLyogaXMgRURNQSBlbmdpbmUgZW5hYmxlZD8gKi8KIAlNVl9QUF9GTEFHX05DUV9FTgk9ICgxIDw8IDEpLAkvKiBpcyBFRE1BIHNldCB1cCBmb3IgTkNRPyAqLwogCU1WX1BQX0ZMQUdfRkJTX0VOCT0gKDEgPDwgMiksCS8qIGlzIEVETUEgc2V0IHVwIGZvciBGQlM/ICovCiAJTVZfUFBfRkxBR19ERUxBWUVEX0VICT0gKDEgPDwgMyksCS8qIGRlbGF5ZWQgZGV2IGVyciBoYW5kbGluZyAqLworCU1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSA9ICgxIDw8IDQpLAkvKiBpZ25vcmUgaW5pdGlhbCBBVEFfRFJEWSAqLwogfTsKIAogI2RlZmluZSBJU19HRU5fSShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0kpCkBAIC00MzMsNiArNDkyLDE4IEBACiAJX19sZTMyCQkJcmVzZXJ2ZWQ7CiB9OwogCisvKgorICogV2Uga2VlcCBhIGxvY2FsIGNhY2hlIG9mIGEgZmV3IGZyZXF1ZW50bHkgYWNjZXNzZWQgcG9ydAorICogcmVnaXN0ZXJzIGhlcmUsIHRvIGF2b2lkIGhhdmluZyB0byByZWFkIHRoZW0gKHZlcnkgc2xvdykKKyAqIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gRURNQSBhbmQgbm9uLUVETUEgbW9kZXMuCisgKi8KK3N0cnVjdCBtdl9jYWNoZWRfcmVncyB7CisJdTMyCQkJZmlzY2ZnOworCXUzMgkJCWx0bW9kZTsKKwl1MzIJCQloYWx0Y29uZDsKKwl1MzIJCQl1bmtub3duX3JzdmQ7Cit9OworCiBzdHJ1Y3QgbXZfcG9ydF9wcml2IHsKIAlzdHJ1Y3QgbXZfY3JxYgkJKmNycWI7CiAJZG1hX2FkZHJfdAkJY3JxYl9kbWE7CkBAIC00NDUsNiArNTE2LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJlc3BfaWR4OwogCiAJdTMyCQkJcHBfZmxhZ3M7CisJc3RydWN0IG12X2NhY2hlZF9yZWdzCWNhY2hlZDsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5ZWRfZWhfcG1wX21hcDsKIH07CiAKQEAgLTUzNSw3ICs2MDcsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgcG9ydF9ubyk7CiBzdGF0aWMgaW50IG12X3N0b3BfZWRtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyBpbnQgbXZfc3RvcF9lZG1hX2VuZ2luZSh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyk7Ci1zdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpOworc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9lZG1hKTsKIAogc3RhdGljIHZvaWQgbXZfcG1wX3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgcG1wKTsKIHN0YXRpYyBpbnQgbXZfcG1wX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCkBAIC01NDYsNiArNjE4LDE0IEBACiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2NycGJfZW50cmllcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCQlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCk7CiAKK3N0YXRpYyB2b2lkIG12X3NmZl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IG12X2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB2b2lkIG12X2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHU4ICAgbXZfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHU4IG12X3NmZl9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKIC8qIC5zZ190YWJsZXNpemUgaXMgKE1WX01BWF9TR19DVCAvIDIpIGluIHRoZSBzdHJ1Y3R1cmVzIGJlbG93CiAgKiBiZWNhdXNlIHdlIGhhdmUgdG8gYWxsb3cgcm9vbSBmb3Igd29yc3QgY2FzZSBzcGxpdHRpbmcgb2YKICAqIFBSRHMgZm9yIDY0SyBib3VuZGFyaWVzIGluIG12X2ZpbGxfc2coKS4KQEAgLTU2Niw2ICs2NDYsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12NV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAorCiAJLnFjX2RlZmVyCQk9IG12X3FjX2RlZmVyLAogCS5xY19wcmVwCQk9IG12X3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IG12X3FjX2lzc3VlLApAQCAtNTkzLDYgKzY3NSwxNCBAQAogCS5wbXBfc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBtdl9wbXBfZXJyb3JfaGFuZGxlciwKKworCS5zZmZfY2hlY2tfc3RhdHVzCT0gbXZfc2ZmX2NoZWNrX3N0YXR1cywKKwkuc2ZmX2lycV9jbGVhcgkJPSBtdl9zZmZfaXJxX2NsZWFyLAorCS5jaGVja19hdGFwaV9kbWEJPSBtdl9jaGVja19hdGFwaV9kbWEsCisJLmJtZG1hX3NldHVwCQk9IG12X2JtZG1hX3NldHVwLAorCS5ibWRtYV9zdGFydAkJPSBtdl9ibWRtYV9zdGFydCwKKwkuYm1kbWFfc3RvcAkJPSBtdl9ibWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gbXZfYm1kbWFfc3RhdHVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12X2lpZV9vcHMgPSB7CkBAIC02MDMsNTMgKzY5Myw0OSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CiAJeyAgLyogY2hpcF81MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDh4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDgwICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF82MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKLQkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19OQ1EsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY2X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNjA4eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRIHwgTVZfRkxBR19EVUFMX0hDLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12Nl9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzYwNDIgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKIAl9LAogCXsgIC8qIGNoaXBfNzA0MiAqLwotCQkuZmxhZ3MJCT0gTVZfR0VOSUlFX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJRV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF9zb2MgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKQEAgLTc5NCw2ICs4ODAsNDQgQEAKIAlyZXR1cm4gKChwb3J0X2ZsYWdzICYgTVZfRkxBR19EVUFMX0hDKSA/IDIgOiAxKTsKIH0KIAorLyoqCisgKiAgICAgIG12X3NhdmVfY2FjaGVkX3JlZ3MgLSAocmUtKWluaXRpYWxpemUgY2FjaGVkIHBvcnQgcmVnaXN0ZXJzCisgKiAgICAgIEBhcDogdGhlIHBvcnQgd2hvc2UgcmVnaXN0ZXJzIHdlIGFyZSBjYWNoaW5nCisgKgorICoJSW5pdGlhbGl6ZSB0aGUgbG9jYWwgY2FjaGUgb2YgcG9ydCByZWdpc3RlcnMsCisgKglzbyB0aGF0IHJlYWRpbmcgdGhlbSBvdmVyIGFuZCBvdmVyIGFnYWluIGNhbgorICoJYmUgYXZvaWRlZCBvbiB0aGUgaG90dGVyIHBhdGhzIG9mIHRoaXMgZHJpdmVyLgorICoJVGhpcyBzYXZlcyBhIGZldyBtaWNyb3NlY29uZHMgZWFjaCB0aW1lIHdlIHN3aXRjaAorICoJdG8vZnJvbSBFRE1BIG1vZGUgdG8gcGVyZm9ybSAoZWcuKSBhIGRyaXZlIGNhY2hlIGZsdXNoLgorICovCitzdGF0aWMgdm9pZCBtdl9zYXZlX2NhY2hlZF9yZWdzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlwcC0+Y2FjaGVkLmZpc2NmZyA9IHJlYWRsKHBvcnRfbW1pbyArIEZJU0NGR19PRlMpOworCXBwLT5jYWNoZWQubHRtb2RlID0gcmVhZGwocG9ydF9tbWlvICsgTFRNT0RFX09GUyk7CisJcHAtPmNhY2hlZC5oYWx0Y29uZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTKTsKKwlwcC0+Y2FjaGVkLnVua25vd25fcnN2ZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfVU5LTk9XTl9SU1ZEX09GUyk7Cit9CisKKy8qKgorICogICAgICBtdl93cml0ZV9jYWNoZWRfcmVnIC0gd3JpdGUgdG8gYSBjYWNoZWQgcG9ydCByZWdpc3RlcgorICogICAgICBAYWRkcjogaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqICAgICAgQG9sZDogcG9pbnRlciB0byBjYWNoZWQgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyCisgKiAgICAgIEBuZXc6IG5ldyB2YWx1ZSBmb3IgdGhlIHJlZ2lzdGVyCisgKgorICoJV3JpdGUgYSBuZXcgdmFsdWUgdG8gYSBjYWNoZWQgcmVnaXN0ZXIsCisgKglidXQgb25seSBpZiB0aGUgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbXZfd3JpdGVfY2FjaGVkX3JlZyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiAqb2xkLCB1MzIgbmV3KQoreworCWlmIChuZXcgIT0gKm9sZCkgeworCQkqb2xkID0gbmV3OworCQl3cml0ZWwobmV3LCBhZGRyKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9lZG1hX3B0cnModm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgICAgIHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2LAogCQkJICAgICBzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCkKQEAgLTgyNSw2ICs5NDksMjMgQEAKIAkJIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOwogfQogCitzdGF0aWMgdm9pZCBtdl93cml0ZV9tYWluX2lycV9tYXNrKHUzMiBtYXNrLCBzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdikKK3sKKwkvKgorCSAqIFdoZW4gd3JpdGluZyB0byB0aGUgbWFpbl9pcnFfbWFzayBpbiBoYXJkd2FyZSwKKwkgKiB3ZSBtdXN0IGVuc3VyZSBleGNsdXNpdml0eSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBiaXRzCisJICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGl2aWR1YWwgcG9ydCBET05FX0lSUSBiaXRzLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgcmVhbGx5IGFuICJJUlEgZW5hYmxlIiByZWdpc3RlciwKKwkgKiBub3QgYW4gIklSUSBtYXNrIiByZWdpc3RlciBhcyBNYXJ2ZWxsJ3MgbmFtaW5nIG1pZ2h0IHN1Z2dlc3QuCisJICovCisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzBfM19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV8wXzM7CisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzRfN19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV80Xzc7CisJd3JpdGVsZmwobWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9tYWluX2lycV9tYXNrKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKIAkJCQkgdTMyIGRpc2FibGVfYml0cywgdTMyIGVuYWJsZV9iaXRzKQogewpAQCAtODM1LDcgKzk3Niw3IEBACiAJbmV3X21hc2sgPSAob2xkX21hc2sgJiB+ZGlzYWJsZV9iaXRzKSB8IGVuYWJsZV9iaXRzOwogCWlmIChuZXdfbWFzayAhPSBvbGRfbWFzaykgewogCQlocHJpdi0+bWFpbl9pcnFfbWFzayA9IG5ld19tYXNrOwotCQl3cml0ZWxmbChuZXdfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2sobmV3X21hc2ssIGhwcml2KTsKIAl9CiB9CiAKQEAgLTg1Miw4ICs5OTMsOTQgQEAKIAltdl9zZXRfbWFpbl9pcnFfbWFzayhhcC0+aG9zdCwgZGlzYWJsZV9iaXRzLCBlbmFibGVfYml0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIG12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJCSAgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCisJCQkJCSAgdW5zaWduZWQgaW50IHBvcnRfaXJxcykKK3sKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IGhhcmRwb3J0ID0gbXZfaGFyZHBvcnRfZnJvbV9wb3J0KGFwLT5wb3J0X25vKTsKKwl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKKwkJCQltdl9ob3N0X2Jhc2UoYXAtPmhvc3QpLCBhcC0+cG9ydF9ubyk7CisJdTMyIGhjX2lycV9jYXVzZTsKKworCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCisJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9FUlJfSVJRX0NBVVNFX09GUyk7CisKKwkvKiBjbGVhciBwZW5kaW5nIGlycSBldmVudHMgKi8KKwloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOworCXdyaXRlbGZsKGhjX2lycV9jYXVzZSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOworCisJLyogY2xlYXIgRklTIElSUSBDYXVzZSAqLworCWlmIChJU19HRU5fSUlFKGhwcml2KSkKKwkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisKKwltdl9lbmFibGVfcG9ydF9pcnFzKGFwLCBwb3J0X2lycXMpOworfQorCitzdGF0aWMgdm9pZCBtdl9zZXRfaXJxX2NvYWxlc2Npbmcoc3RydWN0IGF0YV9ob3N0ICpob3N0LAorCQkJCSAgdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgdXNlY3MpCit7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvID0gaHByaXYtPmJhc2UsICpoY19tbWlvOworCXUzMiBjb2FsX2VuYWJsZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2xrcywgaXNfZHVhbF9oYyA9IGhwcml2LT5uX3BvcnRzID4gTVZfUE9SVFNfUEVSX0hDOworCWNvbnN0IHUzMiBjb2FsX2Rpc2FibGUgPSBQT1JUU18wXzNfQ09BTF9ET05FIHwgUE9SVFNfNF83X0NPQUxfRE9ORSB8CisJCQkJCQkJQUxMX1BPUlRTX0NPQUxfRE9ORTsKKworCS8qIERpc2FibGUgSVJRIGNvYWxlc2NpbmcgaWYgZWl0aGVyIHRocmVzaG9sZCBpcyB6ZXJvICovCisJaWYgKCF1c2VjcyB8fCAhY291bnQpIHsKKwkJY2xrcyA9IGNvdW50ID0gMDsKKwl9IGVsc2UgeworCQkvKiBSZXNwZWN0IG1heGltdW0gbGltaXRzIG9mIHRoZSBoYXJkd2FyZSAqLworCQljbGtzID0gdXNlY3MgKiBDT0FMX0NMT0NLU19QRVJfVVNFQzsKKwkJaWYgKGNsa3MgPiBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRCkKKwkJCWNsa3MgPSBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRDsKKwkJaWYgKGNvdW50ID4gTUFYX0NPQUxfSU9fQ09VTlQpCisJCQljb3VudCA9IE1BWF9DT0FMX0lPX0NPVU5UOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgY29hbF9kaXNhYmxlLCAwKTsKKworCWlmIChpc19kdWFsX2hjICYmICFJU19HRU5fSShocHJpdikpIHsKKwkJLyoKKwkJICogR0VOX0lJL0dFTl9JSUUgd2l0aCBkdWFsIGhvc3QgY29udHJvbGxlcnM6CisJCSAqIG9uZSBzZXQgb2YgZ2xvYmFsIHRocmVzaG9sZHMgZm9yIHRoZSBlbnRpcmUgY2hpcC4KKwkJICovCisJCXdyaXRlbChjbGtzLCAgbW1pbyArIE1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEKTsKKwkJd3JpdGVsKGNvdW50LCBtbWlvICsgTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEKTsKKwkJLyogY2xlYXIgbGVmdG92ZXIgY29hbCBJUlEgYml0ICovCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCQlpZiAoY291bnQpCisJCQljb2FsX2VuYWJsZSA9IEFMTF9QT1JUU19DT0FMX0RPTkU7CisJCWNsa3MgPSBjb3VudCA9IDA7IC8qIGZvcmNlIGNsZWFyaW5nIG9mIHJlZ3VsYXIgcmVncyBiZWxvdyAqLworCX0KKworCS8qCisJICogQWxsIGNoaXBzOiBpbmRlcGVuZGVudCB0aHJlc2hvbGRzIGZvciBlYWNoIEhDIG9uIHRoZSBjaGlwLgorCSAqLworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtbWlvLCAwKTsKKwl3cml0ZWwoY2xrcywgIGhjX21taW8gKyBIQ19JUlFfQ09BTF9USU1FX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbCh+SENfQ09BTF9JUlEsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKKwlpZiAoY291bnQpCisJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzBfM19DT0FMX0RPTkU7CisJaWYgKGlzX2R1YWxfaGMpIHsKKwkJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG1taW8sIE1WX1BPUlRTX1BFUl9IQyk7CisJCXdyaXRlbChjbGtzLCAgaGNfbW1pbyArIEhDX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEX09GUyk7CisJCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCQl3cml0ZWwofkhDX0NPQUxfSVJRLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7CisJCWlmIChjb3VudCkKKwkJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzRfN19DT0FMX0RPTkU7CisJfQorCisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgY29hbF9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoqCi0gKiAgICAgIG12X3N0YXJ0X2RtYSAtIEVuYWJsZSBlRE1BIGVuZ2luZQorICogICAgICBtdl9zdGFydF9lZG1hIC0gRW5hYmxlIGVETUEgZW5naW5lCiAgKiAgICAgIEBiYXNlOiBwb3J0IGJhc2UgYWRkcmVzcwogICogICAgICBAcHA6IHBvcnQgcHJpdmF0ZSBkYXRhCiAgKgpAQCAtODYzLDcgKzEwOTAsNyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyB2b2lkIG12X3N0YXJ0X2RtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKK3N0YXRpYyB2b2lkIG12X3N0YXJ0X2VkbWEoc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgc3RydWN0IG12X3BvcnRfcHJpdiAqcHAsIHU4IHByb3RvY29sKQogewogCWludCB3YW50X25jcSA9IChwcm90b2NvbCA9PSBBVEFfUFJPVF9OQ1EpOwpAQCAtODc1LDI2ICsxMTAyLDExIEBACiAJfQogCWlmICghKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikpIHsKIAkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCQlpbnQgaGFyZHBvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQoYXAtPnBvcnRfbm8pOwotCQl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKLQkJCQkJbXZfaG9zdF9iYXNlKGFwLT5ob3N0KSwgYXAtPnBvcnRfbm8pOwotCQl1MzIgaGNfaXJxX2NhdXNlOwogCi0JCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCi0JCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfRVJSX0lSUV9DQVVTRV9PRlMpOwotCi0JCS8qIGNsZWFyIHBlbmRpbmcgaXJxIGV2ZW50cyAqLwotCQloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOwotCQl3cml0ZWxmbChoY19pcnFfY2F1c2UsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKLQotCQltdl9lZG1hX2NmZyhhcCwgd2FudF9uY3EpOwotCi0JCS8qIGNsZWFyIEZJUyBJUlEgQ2F1c2UgKi8KLQkJaWYgKElTX0dFTl9JSUUoaHByaXYpKQotCQkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisJCW12X2VkbWFfY2ZnKGFwLCB3YW50X25jcSwgMSk7CiAKIAkJbXZfc2V0X2VkbWFfcHRycyhwb3J0X21taW8sIGhwcml2LCBwcCk7Ci0JCW12X2VuYWJsZV9wb3J0X2lycXMoYXAsIERPTkVfSVJRfEVSUl9JUlEpOworCQltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgcG9ydF9tbWlvLCBET05FX0lSUXxFUlJfSVJRKTsKIAogCQl3cml0ZWxmbChFRE1BX0VOLCBwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpOwogCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19FRE1BX0VOOwpAQCAtOTUyLDYgKzExNjQsNyBAQAogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIgPSAwOwogCiAJaWYgKCEocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSkKIAkJcmV0dXJuIDA7CkBAIC05NTksOSArMTE3MiwxMCBAQAogCW12X3dhaXRfZm9yX2VkbWFfZW1wdHlfaWRsZShhcCk7CiAJaWYgKG12X3N0b3BfZWRtYV9lbmdpbmUocG9ydF9tbWlvKSkgewogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiVW5hYmxlIHRvIHN0b3AgZURNQVxuIik7Ci0JCXJldHVybiAtRUlPOworCQllcnIgPSAtRUlPOwogCX0KLQlyZXR1cm4gMDsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIEFUQV9ERUJVRwpAQCAtMTEzMCwzNSArMTM0NCwzMyBAQAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KIAotc3RhdGljIHZvaWQgbXZfY29uZmlnX2Zicyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9mYnMpCitzdGF0aWMgdm9pZCBtdl9jb25maWdfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZmJzKQogewotCXUzMiBuZXdfZmlzY2ZnLCBvbGRfZmlzY2ZnOwotCXUzMiBuZXdfbHRtb2RlLCBvbGRfbHRtb2RlOwotCXUzMiBuZXdfaGFsdGNvbmQsIG9sZF9oYWx0Y29uZDsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW87CiAKLQlvbGRfZmlzY2ZnICAgPSByZWFkbChwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlvbGRfbHRtb2RlICAgPSByZWFkbChwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlvbGRfaGFsdGNvbmQgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJdTMyIGZpc2NmZywgICAqb2xkX2Zpc2NmZyAgID0gJnBwLT5jYWNoZWQuZmlzY2ZnOworCXUzMiBsdG1vZGUsICAgKm9sZF9sdG1vZGUgICA9ICZwcC0+Y2FjaGVkLmx0bW9kZTsKKwl1MzIgaGFsdGNvbmQsICpvbGRfaGFsdGNvbmQgPSAmcHAtPmNhY2hlZC5oYWx0Y29uZDsKIAotCW5ld19maXNjZmcgICA9IG9sZF9maXNjZmcgJiB+KEZJU0NGR19TSU5HTEVfU1lOQyB8IEZJU0NGR19XQUlUX0RFVl9FUlIpOwotCW5ld19sdG1vZGUgICA9IG9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7Ci0JbmV3X2hhbHRjb25kID0gb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOworCWx0bW9kZSAgID0gKm9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7CisJaGFsdGNvbmQgPSAqb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOwogCiAJaWYgKHdhbnRfZmJzKSB7Ci0JCW5ld19maXNjZmcgPSBvbGRfZmlzY2ZnIHwgRklTQ0ZHX1NJTkdMRV9TWU5DOwotCQluZXdfbHRtb2RlID0gb2xkX2x0bW9kZSB8IExUTU9ERV9CSVQ4OworCQlmaXNjZmcgPSAqb2xkX2Zpc2NmZyB8IEZJU0NGR19TSU5HTEVfU1lOQzsKKwkJbHRtb2RlID0gKm9sZF9sdG1vZGUgfCBMVE1PREVfQklUODsKIAkJaWYgKHdhbnRfbmNxKQotCQkJbmV3X2hhbHRjb25kICY9IH5FRE1BX0VSUl9ERVY7CisJCQloYWx0Y29uZCAmPSB+RURNQV9FUlJfREVWOwogCQllbHNlCi0JCQluZXdfZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCQkJZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCX0gZWxzZSB7CisJCWZpc2NmZyA9ICpvbGRfZmlzY2ZnICYgfihGSVNDRkdfU0lOR0xFX1NZTkMgfCBGSVNDRkdfV0FJVF9ERVZfRVJSKTsKIAl9CiAKLQlpZiAobmV3X2Zpc2NmZyAhPSBvbGRfZmlzY2ZnKQotCQl3cml0ZWxmbChuZXdfZmlzY2ZnLCBwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlpZiAobmV3X2x0bW9kZSAhPSBvbGRfbHRtb2RlKQotCQl3cml0ZWxmbChuZXdfbHRtb2RlLCBwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlpZiAobmV3X2hhbHRjb25kICE9IG9sZF9oYWx0Y29uZCkKLQkJd3JpdGVsZmwobmV3X2hhbHRjb25kLCBwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhwb3J0X21taW8gKyBGSVNDRkdfT0ZTLCBvbGRfZmlzY2ZnLCBmaXNjZmcpOworCW12X3dyaXRlX2NhY2hlZF9yZWcocG9ydF9tbWlvICsgTFRNT0RFX09GUywgb2xkX2x0bW9kZSwgbHRtb2RlKTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTLCBvbGRfaGFsdGNvbmQsIGhhbHRjb25kKTsKIH0KIAogc3RhdGljIHZvaWQgbXZfNjB4MV9lcnJhdGFfc2F0YTI1KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSkKQEAgLTExNzYsNyArMTM4OCw4NiBAQAogCQl3cml0ZWwobmV3LCBocHJpdi0+YmFzZSArIE1WX0dQSU9fUE9SVF9DVExfT0ZTKTsKIH0KIAotc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxKQorLyoqCisgKgltdl9ibWRtYV9lbmFibGUgLSBzZXQgYSBtYWdpYyBiaXQgb24gR0VOX0lJRSB0byBhbGxvdyBibWRtYQorICoJQGFwOiBQb3J0IGJlaW5nIGluaXRpYWxpemVkCisgKgorICoJVGhlcmUgYXJlIHR3byBETUEgbW9kZXMgb24gdGhlc2UgY2hpcHM6ICBiYXNpYyBETUEsIGFuZCBFRE1BLgorICoKKyAqCUJpdC0wIG9mIHRoZSAiRURNQSBSRVNFUlZFRCIgcmVnaXN0ZXIgZW5hYmxlcy9kaXNhYmxlcyB1c2UKKyAqCW9mIGJhc2ljIERNQSBvbiB0aGUgR0VOX0lJRSB2ZXJzaW9ucyBvZiB0aGUgY2hpcHMuCisgKgorICoJVGhpcyBiaXQgc3Vydml2ZXMgRURNQSByZXNldHMsIGFuZCBtdXN0IGJlIHNldCBmb3IgYmFzaWMgRE1BCisgKgl0byBmdW5jdGlvbiwgYW5kIHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gRURNQSBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX2VuYWJsZV9paWUoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IGVuYWJsZV9ibWRtYSkKK3sKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdTMyIG5ldywgKm9sZCA9ICZwcC0+Y2FjaGVkLnVua25vd25fcnN2ZDsKKworCWlmIChlbmFibGVfYm1kbWEpCisJCW5ldyA9ICpvbGQgfCAxOworCWVsc2UKKwkJbmV3ID0gKm9sZCAmIH4xOworCW12X3dyaXRlX2NhY2hlZF9yZWcobXZfYXBfYmFzZShhcCkgKyBFRE1BX1VOS05PV05fUlNWRF9PRlMsIG9sZCwgbmV3KTsKK30KKworLyoKKyAqIFNPQyBjaGlwcyBoYXZlIGFuIGlzc3VlIHdoZXJlYnkgdGhlIEhERCBMRURzIGRvbid0IGFsd2F5cyBibGluaworICogZHVyaW5nIEkvTyB3aGVuIE5DUSBpcyBlbmFibGVkLiBFbmFibGluZyBhIHNwZWNpYWwgIkxFRCBibGluayIgbW9kZQorICogb2YgdGhlIFNPQyB0YWtlcyBjYXJlIG9mIGl0LCBnZW5lcmF0aW5nIGEgc3RlYWR5IGJsaW5rIHJhdGUgd2hlbgorICogYW55IGRyaXZlIG9uIHRoZSBjaGlwIGlzIGFjdGl2ZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgYmxpbmsgbW9kZSBpcyBhIGdsb2JhbCBoYXJkd2FyZSBzZXR0aW5nIGZvciB0aGUgU09DLAorICogc28gd2UgbXVzdCB1c2UgaXQgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIHBvcnQgb24gdGhlIFNPQyBoYXMgTkNRIGVuYWJsZWQuCisgKgorICogV2UgdHVybiAiTEVEIGJsaW5rIiBvZmYgd2hlbiBOQ1EgaXMgbm90IGluIHVzZSBhbnl3aGVyZSwgYmVjYXVzZSB0aGUgbm9ybWFsCisgKiBMRUQgb3BlcmF0aW9uIHdvcmtzIHRoZW4sIGFuZCBwcm92aWRlcyBiZXR0ZXIgKG1vcmUgYWNjdXJhdGUpIGZlZWRiYWNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IGFuIFNPQyBuZXZlciBoYXMgbW9yZSB0aGFuIG9uZSBIQyBvbmJvYXJkLgorICovCitzdGF0aWMgdm9pZCBtdl9zb2NfbGVkX2JsaW5rX2VuYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisKKwlpZiAoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOKQorCQlyZXR1cm47CisJaHByaXYtPmhwX2ZsYWdzIHw9IE1WX0hQX1FVSVJLX0xFRF9CTElOS19FTjsKKwloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobXZfaG9zdF9iYXNlKGhvc3QpLCBhcC0+cG9ydF9ubyk7CisJbGVkX2N0cmwgPSByZWFkbChoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7CisJd3JpdGVsKGxlZF9jdHJsIHwgU09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3NvY19sZWRfYmxpbmtfZGlzYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisJdW5zaWduZWQgaW50IHBvcnQ7CisKKwlpZiAoIShocHJpdi0+aHBfZmxhZ3MgJiBNVl9IUF9RVUlSS19MRURfQkxJTktfRU4pKQorCQlyZXR1cm47CisKKwkvKiBkaXNhYmxlIGxlZC1ibGluayBvbmx5IGlmIG5vIHBvcnRzIGFyZSB1c2luZyBOQ1EgKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHByaXYtPm5fcG9ydHM7IHBvcnQrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKnRoaXNfYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKKwkJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSB0aGlzX2FwLT5wcml2YXRlX2RhdGE7CisKKwkJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKQorCQkJcmV0dXJuOworCX0KKworCWhwcml2LT5ocF9mbGFncyAmPSB+TVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOOworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtdl9ob3N0X2Jhc2UoaG9zdCksIGFwLT5wb3J0X25vKTsKKwlsZWRfY3RybCA9IHJlYWRsKGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKKwl3cml0ZWwobGVkX2N0cmwgJiB+U09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZWRtYSkKIHsKIAl1MzIgY2ZnOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwICAgID0gYXAtPnByaXZhdGVfZGF0YTsKQEAgLTExODUsNyArMTQ3Niw4IEBACiAKIAkvKiBzZXQgdXAgbm9uLU5DUSBFRE1BIGNvbmZpZ3VyYXRpb24gKi8KIAljZmcgPSBFRE1BX0NGR19RX0RFUFRIOwkJLyogYWx3YXlzIDB4MWYgZm9yICphbGwqIGNoaXBzICovCi0JcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZCU19FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAlpZiAoSVNfR0VOX0koaHByaXYpKQogCQljZmcgfD0gKDEgPDwgOCk7CS8qIGVuYWIgY29uZmlnIGJ1cnN0IHNpemUgbWFzayAqLwpAQCAtMTIwNiw3ICsxNDk4LDcgQEAKIAkJICovCiAJCXdhbnRfZmJzICY9IHdhbnRfbmNxOwogCi0JCW12X2NvbmZpZ19mYnMocG9ydF9tbWlvLCB3YW50X25jcSwgd2FudF9mYnMpOworCQltdl9jb25maWdfZmJzKGFwLCB3YW50X25jcSwgd2FudF9mYnMpOwogCiAJCWlmICh3YW50X2ZicykgewogCQkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRkJTX0VOOwpAQCAtMTIxNCwxOCArMTUwNiwyNyBAQAogCQl9CiAKIAkJY2ZnIHw9ICgxIDw8IDIzKTsJLyogZG8gbm90IG1hc2sgUE0gZmllbGQgaW4gcngnZCBGSVMgKi8KLQkJY2ZnIHw9ICgxIDw8IDIyKTsJLyogZW5hYiA0LWVudHJ5IGhvc3QgcXVldWUgY2FjaGUgKi8KLQkJaWYgKCFJU19TT0MoaHByaXYpKQotCQkJY2ZnIHw9ICgxIDw8IDE4KTsJLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCWlmICh3YW50X2VkbWEpIHsKKwkJCWNmZyB8PSAoMSA8PCAyMik7IC8qIGVuYWIgNC1lbnRyeSBob3N0IHF1ZXVlIGNhY2hlICovCisJCQlpZiAoIUlTX1NPQyhocHJpdikpCisJCQkJY2ZnIHw9ICgxIDw8IDE4KTsgLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCX0KIAkJaWYgKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX0NVVF9USFJPVUdIKQogCQkJY2ZnIHw9ICgxIDw8IDE3KTsgLyogZW5hYiBjdXQtdGhydSAoZGlzIHN0b3ImZm9yd3JkKSAqLworCQltdl9ibWRtYV9lbmFibGVfaWllKGFwLCAhd2FudF9lZG1hKTsKKworCQlpZiAoSVNfU09DKGhwcml2KSkgeworCQkJaWYgKHdhbnRfbmNxKQorCQkJCW12X3NvY19sZWRfYmxpbmtfZW5hYmxlKGFwKTsKKwkJCWVsc2UKKwkJCQltdl9zb2NfbGVkX2JsaW5rX2Rpc2FibGUoYXApOworCQl9CiAJfQogCiAJaWYgKHdhbnRfbmNxKSB7CiAJCWNmZyB8PSBFRE1BX0NGR19OQ1E7CiAJCXBwLT5wcF9mbGFncyB8PSAgTVZfUFBfRkxBR19OQ1FfRU47Ci0JfSBlbHNlCi0JCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19OQ1FfRU47CisJfQogCiAJd3JpdGVsZmwoY2ZnLCBwb3J0X21taW8gKyBFRE1BX0NGR19PRlMpOwogfQpAQCAtMTMwOSw2ICsxNjEwLDggQEAKIAkJCXBwLT5zZ190YmxfZG1hW3RhZ10gPSBwcC0+c2dfdGJsX2RtYVswXTsKIAkJfQogCX0KKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAJcmV0dXJuIDA7CiAKIG91dF9wb3J0X2ZyZWVfZG1hX21lbToKQEAgLTEzNTcsMTIgKzE2NjAsMTMgQEAKIAkJCXUzMiBvZmZzZXQgPSBhZGRyICYgMHhmZmZmOwogCQkJdTMyIGxlbiA9IHNnX2xlbjsKIAotCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4gPiAweDEwMDAwKSkKKwkJCWlmIChvZmZzZXQgKyBsZW4gPiAweDEwMDAwKQogCQkJCWxlbiA9IDB4MTAwMDAgLSBvZmZzZXQ7CiAKIAkJCW12X3NnLT5hZGRyID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQkJbXZfc2ctPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigoYWRkciA+PiAxNikgPj4gMTYpOwogCQkJbXZfc2ctPmZsYWdzX3NpemUgPSBjcHVfdG9fbGUzMihsZW4gJiAweGZmZmYpOworCQkJbXZfc2ctPnJlc2VydmVkID0gMDsKIAogCQkJc2dfbGVuIC09IGxlbjsKIAkJCWFkZHIgKz0gbGVuOwpAQCAtMTM3NCw2ICsxNjc4LDcgQEAKIAogCWlmIChsaWtlbHkobGFzdF9zZykpCiAJCWxhc3Rfc2ctPmZsYWdzX3NpemUgfD0gY3B1X3RvX2xlMzIoRVBSRF9GTEFHX0VORF9PRl9UQkwpOworCW1iKCk7IC8qIGVuc3VyZSBkYXRhIHN0cnVjdHVyZSBpcyB2aXNpYmxlIHRvIHRoZSBjaGlwc2V0ICovCiB9CiAKIHN0YXRpYyB2b2lkIG12X2NycWJfcGFja19jbWQoX19sZTE2ICpjbWR3LCB1OCBkYXRhLCB1OCBhZGRyLCB1bnNpZ25lZCBsYXN0KQpAQCAtMTM4NCw2ICsxNjg5LDE0NyBAQAogfQogCiAvKioKKyAqCW12X3NmZl9pcnFfY2xlYXIgLSBDbGVhciBoYXJkd2FyZSBpbnRlcnJ1cHQgYWZ0ZXIgRE1BLgorICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KKyAqCisgKglXZSBuZWVkIHRoaXMgb25seSBmb3IgQVRBUEkgYm1kbWEgdHJhbnNhY3Rpb25zLAorICoJYXMgb3RoZXJ3aXNlIHdlIGV4cGVyaWVuY2Ugc3B1cmlvdXMgaW50ZXJydXB0cworICoJYWZ0ZXIgbGliYXRhLXNmZiBoYW5kbGVzIHRoZSBibWRtYSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBtdl9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoYXAsIG12X2FwX2Jhc2UoYXApLCBFUlJfSVJRKTsKK30KKworLyoqCisgKgltdl9jaGVja19hdGFwaV9kbWEgLSBGaWx0ZXIgQVRBUEkgY21kcyB3aGljaCBhcmUgdW5zdWl0YWJsZSBmb3IgRE1BLgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBjaGVjayBmb3IgY2hpcHNldC9ETUEgY29tcGF0aWJpbGl0eS4KKyAqCisgKglUaGUgYm1kbWEgZW5naW5lcyBjYW5ub3QgaGFuZGxlIHNwZWN1bGF0aXZlIGRhdGEgc2l6ZXMKKyAqCShieXRlY291bnQgdW5kZXIvb3ZlciBmbG93KS4gIFNvIG9ubHkgYWxsb3cgRE1BIGZvcgorICoJZGF0YSB0cmFuc2ZlciBjb21tYW5kcyB3aXRoIGtub3duIGRhdGEgc2l6ZXMuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIGludCBtdl9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gcWMtPnNjc2ljbWQ7CisKKwlpZiAoc2NtZCkgeworCQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKKwkJY2FzZSBSRUFEXzY6CisJCWNhc2UgUkVBRF8xMDoKKwkJY2FzZSBSRUFEXzEyOgorCQljYXNlIFdSSVRFXzY6CisJCWNhc2UgV1JJVEVfMTA6CisJCWNhc2UgV1JJVEVfMTI6CisJCWNhc2UgR1BDTURfUkVBRF9DRDoKKwkJY2FzZSBHUENNRF9TRU5EX0RWRF9TVFJVQ1RVUkU6CisJCWNhc2UgR1BDTURfU0VORF9DVUVfU0hFRVQ6CisJCQlyZXR1cm4gMDsgLyogRE1BIGlzIHNhZmUgKi8KKwkJfQorCX0KKwlyZXR1cm4gLUVPUE5PVFNVUFA7IC8qIHVzZSBQSU8gaW5zdGVhZCAqLworfQorCisvKioKKyAqCW12X2JtZG1hX3NldHVwIC0gU2V0IHVwIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUgRE1BIGZvci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwltdl9maWxsX3NnKHFjKTsKKworCS8qIGNsZWFyIGFsbCBETUEgY21kIGJpdHMgKi8KKwl3cml0ZWwoMCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLworCXdyaXRlbCgocHAtPnNnX3RibF9kbWFbcWMtPnRhZ10gPj4gMTYpID4+IDE2LAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfSElHSF9PRlMpOworCXdyaXRlbGZsKHBwLT5zZ190YmxfZG1hW3FjLT50YWddLAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfTE9XX09GUyk7CisKKwkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLworCWFwLT5vcHMtPnNmZl9leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXJ0IC0gU3RhcnQgYSBCTURNQSB0cmFuc2FjdGlvbgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdGFydCBETUEgb24uCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdW5zaWduZWQgaW50IHJ3ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CisJdTMyIGNtZCA9IChydyA/IDAgOiBBVEFfRE1BX1dSKSB8IEFUQV9ETUFfU1RBUlQ7CisKKwkvKiBzdGFydCBob3N0IERNQSB0cmFuc2FjdGlvbiAqLworCXdyaXRlbGZsKGNtZCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7Cit9CisKKy8qKgorICoJbXZfYm1kbWFfc3RvcCAtIFN0b3AgQk1ETUEgdHJhbnNmZXIKKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RvcCBETUEgb24uCisgKgorICoJQ2xlYXJzIHRoZSBBVEFfRE1BX1NUQVJUIGZsYWcgaW4gdGhlIGJtZG1hIGNvbnRyb2wgcmVnaXN0ZXIKKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXUzMiBjbWQ7CisKKwkvKiBjbGVhciBzdGFydC9zdG9wIGJpdCAqLworCWNtZCA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCWNtZCAmPSB+QVRBX0RNQV9TVEFSVDsKKwl3cml0ZWxmbChjbWQsIHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCisJLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCisJYXRhX3NmZl9kbWFfcGF1c2UoYXApOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXR1cyAtIFJlYWQgQk1ETUEgc3RhdHVzCisgKglAYXA6IHBvcnQgZm9yIHdoaWNoIHRvIHJldHJpZXZlIERNQSBzdGF0dXMuCisgKgorICoJUmVhZCBhbmQgcmV0dXJuIGVxdWl2YWxlbnQgb2YgdGhlIHNmZiBCTURNQSBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHU4IG12X2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdTMyIHJlZywgc3RhdHVzOworCisJLyoKKwkgKiBPdGhlciBiaXRzIGFyZSB2YWxpZCBvbmx5IGlmIEFUQV9ETUFfQUNUSVZFPT0wLAorCSAqIGFuZCB0aGUgQVRBX0RNQV9JTlRSIGJpdCBkb2Vzbid0IGV4aXN0LgorCSAqLworCXJlZyA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX1NUQVRVU19PRlMpOworCWlmIChyZWcgJiBBVEFfRE1BX0FDVElWRSkKKwkJc3RhdHVzID0gQVRBX0RNQV9BQ1RJVkU7CisJZWxzZQorCQlzdGF0dXMgPSAocmVnICYgQVRBX0RNQV9FUlIpIHwgQVRBX0RNQV9JTlRSOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogICAgICBtdl9xY19wcmVwIC0gSG9zdCBzcGVjaWZpYyBjb21tYW5kIHByZXBhcmF0aW9uLgogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUKICAqCkBAIC0xNTQ1LDYgKzE5OTEsMTMyIEBACiB9CiAKIC8qKgorICoJbXZfc2ZmX2NoZWNrX3N0YXR1cyAtIGZldGNoIGRldmljZSBzdGF0dXMsIGlmIHZhbGlkCisgKglAYXA6IEFUQSBwb3J0IHRvIGZldGNoIHN0YXR1cyBmcm9tCisgKgorICoJV2hlbiB1c2luZyBjb21tYW5kIGlzc3VlIHZpYSBtdl9xY19pc3N1ZV9maXMoKSwKKyAqCXRoZSBpbml0aWFsIEFUQV9CVVNZIHN0YXRlIGRvZXMgbm90IHNob3cgdXAgaW4gdGhlCisgKglBVEEgc3RhdHVzIChzaGFkb3cpIHJlZ2lzdGVyLiAgVGhpcyBjYW4gY29uZnVzZSBsaWJhdGEhCisgKgorICoJU28gd2UgaGF2ZSBhIGhvb2sgaGVyZSB0byBmYWtlIEFUQV9CVVNZIGZvciB0aGF0IHNpdHVhdGlvbiwKKyAqCXVudGlsIHRoZSBmaXJzdCB0aW1lIGEgQlVTWSwgRFJRLCBvciBFUlIgYml0IGlzIHNlZW4uCisgKgorICoJVGhlIHJlc3Qgb2YgdGhlIHRpbWUsIGl0IHNpbXBseSByZXR1cm5zIHRoZSBBVEEgc3RhdHVzIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdTggbXZfc2ZmX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXQgPSBpb3JlYWQ4KGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kpIHsKKwkJaWYgKHN0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRIHwgQVRBX0VSUikpCisJCQlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsKKwkJZWxzZQorCQkJc3RhdCA9IEFUQV9CVVNZOworCX0KKwlyZXR1cm4gc3RhdDsKK30KKworLyoqCisgKgltdl9zZW5kX2ZpcyAtIFNlbmQgYSBGSVMsIHVzaW5nIHRoZSAiVmVuZG9yLVVuaXF1ZSBGSVMiIHJlZ2lzdGVyCisgKglAZmlzOiBmaXMgdG8gYmUgc2VudAorICoJQG53b3JkczogbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBpbiB0aGUgZmlzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXZfc2VuZF9maXMoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyICpmaXMsIGludCBud29yZHMpCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1MzIgaWZjdGwsIG9sZF9pZmN0bCwgaWZzdGF0OworCWludCBpLCB0aW1lb3V0ID0gMjAwLCBmaW5hbF93b3JkID0gbndvcmRzIC0gMTsKKworCS8qIEluaXRpYXRlIEZJUyB0cmFuc21pc3Npb24gbW9kZSAqLworCW9sZF9pZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwlpZmN0bCA9IDB4MTAwIHwgKG9sZF9pZmN0bCAmIDB4Zik7CisJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKworCS8qIFNlbmQgYWxsIHdvcmRzIG9mIHRoZSBGSVMgZXhjZXB0IGZvciB0aGUgZmluYWwgd29yZCAqLworCWZvciAoaSA9IDA7IGkgPCBmaW5hbF93b3JkOyArK2kpCisJCXdyaXRlbChmaXNbaV0sIHBvcnRfbW1pbyArIFZFTkRPUl9VTklRVUVfRklTX09GUyk7CisKKwkvKiBGbGFnIGVuZC1vZi10cmFuc21pc3Npb24sIGFuZCB0aGVuIHNlbmQgdGhlIGZpbmFsIHdvcmQgKi8KKwl3cml0ZWxmbChpZmN0bCB8IDB4MjAwLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisJd3JpdGVsZmwoZmlzW2ZpbmFsX3dvcmRdLCBwb3J0X21taW8gKyBWRU5ET1JfVU5JUVVFX0ZJU19PRlMpOworCisJLyoKKwkgKiBXYWl0IGZvciBGSVMgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLgorCSAqIFRoaXMgdHlwaWNhbGx5IHRha2VzIGp1c3QgYSBzaW5nbGUgaXRlcmF0aW9uLgorCSAqLworCWRvIHsKKwkJaWZzdGF0ID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JRlNUQVRfT0ZTKTsKKwl9IHdoaWxlICghKGlmc3RhdCAmIDB4MTAwMCkgJiYgLS10aW1lb3V0KTsKKworCS8qIFJlc3RvcmUgb3JpZ2luYWwgcG9ydCBjb25maWd1cmF0aW9uICovCisJd3JpdGVsZmwob2xkX2lmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisKKwkvKiBTZWUgaWYgaXQgd29ya2VkICovCisJaWYgKChpZnN0YXQgJiAweDMwMDApICE9IDB4MTAwMCkgeworCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywKKwkJCQkiJXMgdHJhbnNtaXNzaW9uIGVycm9yLCBpZnN0YXQ9JTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgaWZzdGF0KTsKKwkJcmV0dXJuIEFDX0VSUl9PVEhFUjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbXZfcWNfaXNzdWVfZmlzIC0gSXNzdWUgYSBjb21tYW5kIGRpcmVjdGx5IGFzIGEgRklTCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CisgKgorICoJTm90ZSB0aGF0IHRoZSBBVEEgc2hhZG93IHJlZ2lzdGVycyBhcmUgbm90IHVwZGF0ZWQKKyAqCWFmdGVyIGNvbW1hbmQgaXNzdWUsIHNvIHRoZSBkZXZpY2Ugd2lsbCBhcHBlYXIgIlJFQURZIgorICoJaWYgcG9sbGVkLCBldmVuIHdoaWxlIGl0IGlzIEJVU1kgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4KKyAqCisgKglTbyB3ZSB1c2UgYSBzdGF0dXMgaG9vayB0byBmYWtlIEFUQV9CVVNZIHVudGlsIHRoZSBkcml2ZSBjaGFuZ2VzIHN0YXRlLgorICoKKyAqCU5vdGU6IHdlIGRvbid0IGdldCB1cGRhdGVkIHNoYWRvdyByZWdzIG9uICpjb21wbGV0aW9uKgorICoJb2Ygbm9uLWRhdGEgY29tbWFuZHMuIFNvIGF2b2lkIHNlbmRpbmcgdGhlbSB2aWEgdGhpcyBmdW5jdGlvbiwKKyAqCWFzIHRoZXkgd2lsbCBhcHBlYXIgdG8gaGF2ZSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkuCisgKgorICoJR0VOX0lJRSBoYXMgc3BlY2lhbCByZWdpc3RlcnMgdGhhdCB3ZSBjb3VsZCBnZXQgdGhlIHJlc3VsdCB0ZiBmcm9tLAorICoJYnV0IGVhcmxpZXIgY2hpcHNldHMgZG8gbm90LiAgRm9yIG5vdywgd2UgaWdub3JlIHRob3NlIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtdl9xY19pc3N1ZV9maXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbmsgPSBxYy0+ZGV2LT5saW5rOworCXUzMiBmaXNbNV07CisJaW50IGVyciA9IDA7CisKKwlhdGFfdGZfdG9fZmlzKCZxYy0+dGYsIGxpbmstPnBtcCwgMSwgKHZvaWQgKilmaXMpOworCWVyciA9IG12X3NlbmRfZmlzKGFwLCBmaXMsIHNpemVvZihmaXMpIC8gc2l6ZW9mKGZpc1swXSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBUElfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9GSVJTVDsKKwkJYnJlYWs7CisJY2FzZSBBVEFfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisJCWVsc2UKKwkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7CisJCWJyZWFrOworCX0KKworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogICAgICBtdl9xY19pc3N1ZSAtIEluaXRpYXRlIGEgY29tbWFuZCB0byB0aGUgaG9zdAogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CiAgKgpAQCAtMTU1OCwxNCArMjEzMCwyOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CisJc3RhdGljIGludCBsaW1pdF93YXJuaW5ncyA9IDEwOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTMyIGluX2luZGV4OworCXVuc2lnbmVkIGludCBwb3J0X2lycXM7CiAKLQlpZiAoKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9ETUEpICYmCi0JICAgIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfTkNRKSkgewotCQlzdGF0aWMgaW50IGxpbWl0X3dhcm5pbmdzID0gMTA7CisJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7IC8qIHBhcmFub2lhICovCisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBX1BST1RfRE1BOgorCWNhc2UgQVRBX1BST1RfTkNROgorCQltdl9zdGFydF9lZG1hKGFwLCBwb3J0X21taW8sIHBwLCBxYy0+dGYucHJvdG9jb2wpOworCQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKKwkJaW5faW5kZXggPSBwcC0+cmVxX2lkeCA8PCBFRE1BX1JFUV9RX1BUUl9TSElGVDsKKworCQkvKiBXcml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLworCQl3cml0ZWxmbCgocHAtPmNycWJfZG1hICYgRURNQV9SRVFfUV9CQVNFX0xPX01BU0spIHwgaW5faW5kZXgsCisJCQkJCXBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7CisJCXJldHVybiAwOworCisJY2FzZSBBVEFfUFJPVF9QSU86CiAJCS8qCiAJCSAqIEVycmF0YSBTQVRBIzE2LCBTQVRBIzI0OiB3YXJuIGlmIG11bHRpcGxlIERSUXMgZXhwZWN0ZWQuCiAJCSAqCkBAIC0xNTgzLDI3ICsyMTY5LDQ2IEBACiAJCQkJCSI6IGF0dGVtcHRpbmcgUElPIHcvbXVsdGlwbGUgRFJROiAiCiAJCQkJCSJ0aGlzIG1heSBmYWlsIGR1ZSB0byBoL3cgZXJyYXRhXG4iKTsKIAkJfQotCQkvKgotCQkgKiBXZSdyZSBhYm91dCB0byBzZW5kIGEgbm9uLUVETUEgY2FwYWJsZSBjb21tYW5kIHRvIHRoZQotCQkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKLQkJICogc2hhZG93IGJsb2NrLCBldGMgcmVnaXN0ZXJzLgotCQkgKi8KLQkJbXZfc3RvcF9lZG1hKGFwKTsKLQkJbXZfZW5hYmxlX3BvcnRfaXJxcyhhcCwgRVJSX0lSUSk7Ci0JCW12X3BtcF9zZWxlY3QoYXAsIHFjLT5kZXYtPmxpbmstPnBtcCk7Ci0JCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKKwkJLyogZHJvcCB0aHJvdWdoICovCisJY2FzZSBBVEFfUFJPVF9OT0RBVEE6CisJY2FzZSBBVEFQSV9QUk9UX1BJTzoKKwljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgorCQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUElPX1BPTExJTkcpCisJCQlxYy0+dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1BPTExJTkc7CisJCWJyZWFrOwogCX0KIAotCW12X3N0YXJ0X2RtYShhcCwgcG9ydF9tbWlvLCBwcCwgcWMtPnRmLnByb3RvY29sKTsKKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCXBvcnRfaXJxcyA9IEVSUl9JUlE7CS8qIG1hc2sgZGV2aWNlIGludGVycnVwdCB3aGVuIHBvbGxpbmcgKi8KKwllbHNlCisJCXBvcnRfaXJxcyA9IEVSUl9JUlEgfCBET05FX0lSUTsJLyogdW5tYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAKLQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKLQlpbl9pbmRleCA9IHBwLT5yZXFfaWR4IDw8IEVETUFfUkVRX1FfUFRSX1NISUZUOworCS8qCisJICogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKKwkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKKwkgKiBzaGFkb3cgYmxvY2ssIGV0YyByZWdpc3RlcnMuCisJICovCisJbXZfc3RvcF9lZG1hKGFwKTsKKwltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgbXZfYXBfYmFzZShhcCksIHBvcnRfaXJxcyk7CisJbXZfcG1wX3NlbGVjdChhcCwgcWMtPmRldi0+bGluay0+cG1wKTsKIAotCS8qIGFuZCB3cml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLwotCXdyaXRlbGZsKChwcC0+Y3JxYl9kbWEgJiBFRE1BX1JFUV9RX0JBU0VfTE9fTUFTSykgfCBpbl9pbmRleCwKLQkJIHBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAocWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9SRUFEX0xPR19FWFQpIHsKKwkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCQkvKgorCQkgKiBXb3JrYXJvdW5kIGZvciA4OFNYNjB4MSBGRXIgU0FUQSMyNSAocGFydCAyKS4KKwkJICoKKwkJICogQWZ0ZXIgYW55IE5DUSBlcnJvciwgdGhlIFJFQURfTE9HX0VYVCBjb21tYW5kCisJCSAqIGZyb20gbGliYXRhLWVoICptdXN0KiB1c2UgbXZfcWNfaXNzdWVfZmlzKCkuCisJCSAqIE90aGVyd2lzZSBpdCBtaWdodCBmYWlsLCBkdWUgdG8gY2hpcCBlcnJhdGEuCisJCSAqCisJCSAqIFJhdGhlciB0aGFuIHNwZWNpYWwtY2FzZSBpdCwgd2UnbGwganVzdCAqYWx3YXlzKgorCQkgKiB1c2UgdGhpcyBtZXRob2QgaGVyZSBmb3IgUkVBRF9MT0dfRVhULCBtYWtpbmcgZm9yCisJCSAqIGVhc2llciB0ZXN0aW5nLgorCQkgKi8KKwkJaWYgKElTX0dFTl9JSShocHJpdikpCisJCQlyZXR1cm4gbXZfcWNfaXNzdWVfZmlzKHFjKTsKKwl9CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9xdWV1ZWRfY21kICptdl9nZXRfYWN0aXZlX3FjKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xNjE0LDggKzIyMTksMTIgQEAKIAlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pCiAJCXJldHVybiBOVUxMOwogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKLQlpZiAocWMgJiYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkKLQkJcWMgPSBOVUxMOworCWlmIChxYykgeworCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCQlxYyA9IE5VTEw7CisJCWVsc2UgaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQorCQkJcWMgPSBOVUxMOworCX0KIAlyZXR1cm4gcWM7CiB9CiAKQEAgLTIwODQsNiArMjY5MywxMCBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlLCAqaGNfbW1pbzsKIAl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDAsIHBvcnQ7CiAKKwkvKiBJZiBhc3NlcnRlZCwgY2xlYXIgdGhlICJhbGwgcG9ydHMiIElSUSBjb2FsZXNjaW5nIGJpdCAqLworCWlmIChtYWluX2lycV9jYXVzZSAmIEFMTF9QT1JUU19DT0FMX0RPTkUpCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhwcml2LT5uX3BvcnRzOyBwb3J0KyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW3BvcnRdOwogCQl1bnNpZ25lZCBpbnQgcCwgc2hpZnQsIGhhcmRwb3J0LCBwb3J0X2NhdXNlOwpAQCAtMjExNiw2ICsyNzI5LDggQEAKIAkJCSAqIHRvIGFjayAob25seSkgdGhvc2UgcG9ydHMgdmlhIGhjX2lycV9jYXVzZS4KIAkJCSAqLwogCQkJYWNrX2lycXMgPSAwOworCQkJaWYgKGhjX2NhdXNlICYgUE9SVFNfMF8zX0NPQUxfRE9ORSkKKwkJCQlhY2tfaXJxcyA9IEhDX0NPQUxfSVJROwogCQkJZm9yIChwID0gMDsgcCA8IE1WX1BPUlRTX1BFUl9IQzsgKytwKSB7CiAJCQkJaWYgKChwb3J0ICsgcCkgPj0gaHByaXYtPm5fcG9ydHMpCiAJCQkJCWJyZWFrOwpAQCAtMjIwNCw3ICsyODE5LDcgQEAKIAogCS8qIGZvciBNU0k6ICBibG9jayBuZXcgaW50ZXJydXB0cyB3aGlsZSBpbiBoZXJlICovCiAJaWYgKHVzaW5nX21zaSkKLQkJd3JpdGVsKDAsIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworCQltdl93cml0ZV9tYWluX2lycV9tYXNrKDAsIGhwcml2KTsKIAogCW1haW5faXJxX2NhdXNlID0gcmVhZGwoaHByaXYtPm1haW5faXJxX2NhdXNlX2FkZHIpOwogCXBlbmRpbmdfaXJxcyAgID0gbWFpbl9pcnFfY2F1c2UgJiBocHJpdi0+bWFpbl9pcnFfbWFzazsKQEAgLTIyMjEsNyArMjgzNiw3IEBACiAKIAkvKiBmb3IgTVNJOiB1bm1hc2s7IGludGVycnVwdCBjYXVzZSBiaXRzIHdpbGwgcmV0cmlnZ2VyIG5vdyAqLwogCWlmICh1c2luZ19tc2kpCi0JCXdyaXRlbChocHJpdi0+bWFpbl9pcnFfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2soaHByaXYtPm1haW5faXJxX21hc2ssIGhwcml2KTsKIAogCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMjc3NCw2ICszMzg5LDggQEAKIAogCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKIAlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMikgKi8KIAlkbyB7CkBAIC0yNzkzLDYgKzM0MTAsOCBAQAogCQkJCWV4dHJhID0gSFo7IC8qIG9ubHkgZXh0ZW5kIGl0IG9uY2UsIG1heCAqLwogCQl9CiAJfSB3aGlsZSAoc3N0YXR1cyAhPSAweDAgJiYgc3N0YXR1cyAhPSAweDExMyAmJiBzc3RhdHVzICE9IDB4MTIzKTsKKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTI2LDYgKzM3NDUsOCBAQAogCSAqIFRoZSBwZXItcG9ydCBpbnRlcnJ1cHRzIGdldCBkb25lIGxhdGVyIGFzIHBvcnRzIGFyZSBzZXQgdXAuCiAJICovCiAJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgUENJX0VSUik7CisJbXZfc2V0X2lycV9jb2FsZXNjaW5nKGhvc3QsIGlycV9jb2FsZXNjaW5nX2lvX2NvdW50LAorCQkJCSAgICBpcnFfY29hbGVzY2luZ191c2Vjcyk7CiBkb25lOgogCXJldHVybiByYzsKIH0KQEAgLTMyODcsMTIgKzM5MDgsNiBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLS8qCi0gKiBtb2R1bGUgb3B0aW9ucwotICovCi1zdGF0aWMgaW50IG1zaTsJICAgICAgLyogVXNlIFBDSSBtc2k7IGVpdGhlciB6ZXJvIChvZmYsIGRlZmF1bHQpIG9yIG5vbi16ZXJvICovCi0KLQogLyogbW92ZSB0byBQQ0kgbGF5ZXIgb3IgbGliYXRhIGNvcmU/ICovCiBzdGF0aWMgaW50IHBjaV9nb182NChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTM0NzQsMTAgKzQwODksNSBAQAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKIAotI2lmZGVmIENPTkZJR19QQ0kKLW1vZHVsZV9wYXJhbShtc2ksIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7Ci0jZW5kaWYKLQogbW9kdWxlX2luaXQobXZfaW5pdCk7CiBtb2R1bGVfZXhpdChtdl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCBmNjViNTM3Li42Y2RhMTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC01Nyw5ICs1Nyw5IEBACiAJTlZfTU1JT19CQVIJCQk9IDUsCiAKIAlOVl9QT1JUUwkJCT0gMiwKLQlOVl9QSU9fTUFTSwkJCT0gMHgxZiwKLQlOVl9NV0RNQV9NQVNLCQkJPSAweDA3LAotCU5WX1VETUFfTUFTSwkJCT0gMHg3ZiwKKwlOVl9QSU9fTUFTSwkJCT0gQVRBX1BJTzQsCisJTlZfTVdETUFfTUFTSwkJCT0gQVRBX01XRE1BMiwKKwlOVl9VRE1BX01BU0sJCQk9IEFUQV9VRE1BNiwKIAlOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVAkJPSAweDAwLAogCU5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUCQk9IDB4NDAsCiAKQEAgLTQwOCw2ICs0MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfY29tbW9uX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAJLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKaW5kZXggYmE5YTI1Ny4uYjFmZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKQEAgLTE3Niw3ICsxNzYsOSBAQAogCS5jaGVja19hdGFwaV9kbWEJPSBwZGNfY2hlY2tfYXRhcGlfZG1hLAogCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWUsCisKIAkuc2ZmX2lycV9jbGVhcgkJPSBwZGNfaXJxX2NsZWFyLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAogCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKQEAgLTIxMyw4ICsyMTUsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX1NBVEFfUEFUQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19vbGRfc2F0YV9vcHMsCiAJfSwKQEAgLTIyMiw4ICsyMjQsOCBAQAogCVtib2FyZF8yMDM3eF9wYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTIzMiw4ICsyMzQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfb2xkX3NhdGFfb3BzLAogCX0sCkBAIC0yNDIsOCArMjQ0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yNTIsOCArMjU0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19HRU5fSUkgfCBQRENfRkxBR19TQVRBX1BBVEEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCiAJfSwKQEAgLTI2Miw4ICsyNjQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjcyLDggKzI3NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCmluZGV4IGEwMDBjODYuLmMzOTM2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCiAJLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBBVEFfT1BfTlVMTCwKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAKIAkuc2NyX3JlYWQJCT0gcXNfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBxc19zY3Jfd3JpdGUsCkBAIC0xNjAsNyArMTYxLDcgQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcXNfYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKaW5kZXggZDAwOTE2MC4uZTY3Y2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCkBAIC0yMDAsOCArMjAwLDggQEAKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApAQCAtMjA5LDI0ICsyMDksMjQgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFIHwKIAkJCQkgIFNJTF9GTEFHX05PX1NBVEFfSVJRLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKIAkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCiAJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IDI1OTBjMjIuLjBkODk5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTQyOSwyNSArNDI5LDI1IEBACiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoNCkgfAogCQkJCSAgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiAJLyogc2lsXzMxMzIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIAkvKiBzaWxfMzEzMS9zaWxfMzUzMSAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDEpLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCmluZGV4IDljNDNiNGUuLjhmOTgzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwpAQCAtOTcsOCArOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHg3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCmluZGV4IDYwOWQxNDcuLjcyNTdmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwpAQCAtMzYxLDggKzM2MSw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zNzEsOCArMzcxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BIHwKIAkJCQkgIEsyX0ZMQUdfU0FUQV84X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzgwLDggKzM4MCw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19CQVJfUE9TXzMsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zODksOCArMzg5LDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwppbmRleCBlYzA0YjhkLi5kY2UzZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjXzIwNjIxX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKaW5kZXggMDE5NTc1Yi4uZTViZmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdWxpX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkgIEFUQV9GTEFHX0lHTl9TSU1QTEVYLAotCS5waW9fbWFzayAgICAgICA9IDB4MWYsCQkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sgICAgICAgPSBBVEFfUElPNCwKIAkudWRtYV9tYXNrICAgICAgPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzICAgICAgID0gJnVsaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggNWM2MmRhOS4uOThlOGM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC0xNDYsMjQgKzE0NiwyNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIwX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMV9zcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfc2F0YV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIxX3Bwb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDAsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfcGF0YV9vcHMsCiB9OwpAQCAtMTcxLDggKzE3MSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4MjUxX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJICBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0ODI1MV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggYzU3Y2RmZi4uZWQ3MGJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0zMDgsNiArMzA4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZzY19zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkvKiBUaGUgSVJRIGhhbmRsaW5nIGlzIG5vdCBxdWl0ZSBzdGFuZGFyZCBTRkYgYmVoYXZpb3VyIHNvIHdlCisJICAgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBsb3N0IGludGVycnVwdCBoYW5kbGVyICovCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCS5zZmZfdGZfbG9hZAkJPSB2c2Nfc2F0YV90Zl9sb2FkLAogCS5zZmZfdGZfcmVhZAkJPSB2c2Nfc2F0YV90Zl9yZWFkLAogCS5mcmVlemUJCQk9IHZzY19mcmVlemUsCkBAIC0zNDUsOCArMzQ4LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnZzY19zYXRhX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCmluZGV4IDk4MDk5ZjUuLmIxMTk2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTE2OTAsMTcgKzE2OTAsMTcgQEAKIAkJICB8ICgwICogU0FSTU9ERTBfU0hBREVOKSAvKiBXZSBkb24ndCB1c2Ugc2hhZG93IHJlZ2lzdGVycy4gKi8KIAkJICB8ICgxICogU0FSTU9ERTBfSU5UTU9ERV9SRUFEQ0xFQVIpCiAJCSAgfCAoMSAqIFNBUk1PREUwX0NXUkUpCi0JCSAgfCBJU19GUzUwKGRldik/U0FSTU9ERTBfUFJQV1RfRlM1MF81OiAKLQkJICAgICAgICAgICAgICAgICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zCisJCSAgfCAoSVNfRlM1MChkZXYpID8gU0FSTU9ERTBfUFJQV1RfRlM1MF81OgorCQkJICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zKQogCQkgIHwgKDEgKiBTQVJNT0RFMF9DQUxTVVBfMSkKLQkJICB8IElTX0ZTNTAgKGRldik/KDAKKwkJICB8IChJU19GUzUwKGRldikgPyAoMAogCQkJCSAgIHwgU0FSTU9ERTBfUlhWQ1NfMzIKIAkJCQkgICB8IFNBUk1PREUwX0FCUlZDU18zMiAKIAkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzMyKToKIAkJICAgICAgICAgICAgICAgICAgKDAKIAkJCQkgICB8IFNBUk1PREUwX1JYVkNTXzFrCiAJCQkJICAgfCBTQVJNT0RFMF9BQlJWQ1NfMWsgCi0JCQkJICAgfCBTQVJNT0RFMF9UWFZDU18xaykpOworCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMWspKSk7CiAKIAkvKiAxMG1zICogMTAwIGlzIDEgc2Vjb25kLiBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGFzIEFOMzo5IHNheXMgaXQgdGFrZXMKIAkgICAxbXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IGUxYzc2MTEuLjc4Yzk3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC05NzcsOSArOTc3LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwQnVmICs9IHNwcmludGYoIHBCdWYsICIuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgc3ByaW50ZiggcEJ1ZiwgIlxuIiApOwotICAgICAgICAvLyBTUHJpbnQocHJudEJ1Zik7Ci0gICAgICAgIHByaW50ayhwcm50QnVmKTsKKyAgICAgICAgcHJpbnRrKCIlc1xuIiwgcHJudEJ1Zik7CiAgICAgICAgIGNvdW50ICs9IGNvbDsKICAgICAgICAgcEJ1ZiA9IHBybnRCdWY7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtYXR0cmxpc3QuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjgwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKQEAgLTAsMCArMSw3MCBAQAorU09MT1NfQVRUUl9STyhEcml2ZXJWZXJzaW9uKQorU09MT1NfQVRUUl9STyhBUElWZXJzaW9uKQorU09MT1NfQVRUUl9STyhGaXJtd2FyZVZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKERzcFZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKENvbW1vbkhhbmRzaGFrZSkKK1NPTE9TX0FUVFJfUk8oQ29ubmVjdGVkKQorU09MT1NfQVRUUl9STyhPcGVyYXRpb25hbE1vZGUpCitTT0xPU19BVFRSX1JPKFN0YXRlKQorU09MT1NfQVRUUl9STyhXYXRjaGRvZykKK1NPTE9TX0FUVFJfUk8oT3BlcmF0aW9uUHJvZ3Jlc3MpCitTT0xPU19BVFRSX1JPKExhc3RGYWlsZWQpCitTT0xPU19BVFRSX1JPKFR4Qml0UmF0ZSkKK1NPTE9TX0FUVFJfUk8oUnhCaXRSYXRlKQorLy8gU09MT1NfQVRUUl9STyhEZWx0QUNUQVRQZHMpCisvLyBTT0xPU19BVFRSX1JPKERlbHRBQ1RBVFB1cykKK1NPTE9TX0FUVFJfUk8oVHhBVFRORFIpCitTT0xPU19BVFRSX1JPKFJ4QVRUTkRSKQorU09MT1NfQVRUUl9STyhBbm5leFR5cGUpCitTT0xPU19BVFRSX1JPKEdlbmVyYWxGYWlsdXJlKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlRHBEbikKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZURwVXApCitTT0xPU19BVFRSX1JPKFJTQ29ycmVjdGVkRXJyb3JzRG4pCitTT0xPU19BVFRSX1JPKFJTVW5Db3JyZWN0ZWRFcnJvcnNEbikKK1NPTE9TX0FUVFJfUk8oUlNDb3JyZWN0ZWRFcnJvcnNVcCkKK1NPTE9TX0FUVFJfUk8oUlNVbkNvcnJlY3RlZEVycm9yc1VwKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUkRuKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUlVwKQorU09MT1NfQVRUUl9STyhTaG93dGltZVN0YXJ0KQorU09MT1NfQVRUUl9STyhBVFVSVmVuZG9yKQorU09MT1NfQVRUUl9STyhBVFVDQ291bnRyeSkKK1NPTE9TX0FUVFJfUk8oQVRVUkFOU0lSZXYpCitTT0xPU19BVFRSX1JPKEFUVVJBTlNJU1REKQorU09MT1NfQVRUUl9STyhBVFVDQU5TSVJldikKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lJZCkKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lTVEQpCitTT0xPU19BVFRSX1JPKERhdGFCb29zdCkKK1NPTE9TX0FUVFJfUk8oTG9jYWxJVFVDb3VudHJ5Q29kZSkKK1NPTE9TX0FUVFJfUk8oTG9jYWxTRUYpCitTT0xPU19BVFRSX1JPKExvY2FsRW5kTE9TKQorU09MT1NfQVRUUl9STyhMb2NhbFNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTG9jYWxMaW5lQXR0bikKK1NPTE9TX0FUVFJfUk8oUmF3QXR0bikKK1NPTE9TX0FUVFJfUk8oTG9jYWxUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVTRUYpCitTT0xPU19BVFRSX1JPKFJlbW90ZUxPUykKK1NPTE9TX0FUVFJfUk8oUmVtb3RlTGluZUF0dG4pCitTT0xPU19BVFRSX1JPKFJlbW90ZVNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTGluZVVwQ291bnQpCitTT0xPU19BVFRSX1JPKFNSQUNudCkKK1NPTE9TX0FUVFJfUk8oU1JBQ250VXApCitTT0xPU19BVFRSX1JPKFByb2ZpbGVTdGF0dXMpCitTT0xPU19BVFRSX1JXKEFjdGlvbikKK1NPTE9TX0FUVFJfUlcoQWN0aXZhdGVMaW5lKQorU09MT1NfQVRUUl9STyhMaW5lU3RhdHVzKQorU09MT1NfQVRUUl9SVyhIb3N0Q29udHJvbCkKK1NPTE9TX0FUVFJfUlcoQXV0b1N0YXJ0KQorU09MT1NfQVRUUl9SVyhGYWlsc2FmZSkKK1NPTE9TX0FUVFJfUlcoU2hvd3RpbWVMZWQpCitTT0xPU19BVFRSX1JXKFJldHJhaW4pCitTT0xPU19BVFRSX1JXKERlZmF1bHRzKQorU09MT1NfQVRUUl9SVyhMaW5lTW9kZSkKK1NPTE9TX0FUVFJfUlcoUHJvZmlsZSkKK1NPTE9TX0FUVFJfUlcoRGV0ZWN0Tm9pc2UpCitTT0xPU19BVFRSX1JPKFN1cHBvcnRlZEFubmV4ZXMpCitTT0xPU19BVFRSX1JPKFN0YXR1cykKK1NPTE9TX0FUVFJfUk8oVG90YWxTdGFydCkKK1NPTE9TX0FUVFJfUk8oUmVjZW50U2hvd3RpbWVTdGFydCkKK1NPTE9TX0FUVFJfUk8oVG90YWxSeEJsb2NrcykKK1NPTE9TX0FUVFJfUk8oVG90YWxUeEJsb2NrcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKaW5kZXggODlkN2E2ZS4uYmUyMDQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTksNiArOSw3IEBACiAgKgogICogQXV0aG9yczogTmF0aGFuIFdpbGxpYW1zIDxuYXRoYW5AdHJhdmVyc2UuY29tLmF1PgogICogICAgICAgICAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICogICAgICAgICAgVHJla2VyIENoZW4gPHRyZWtlckB4cmlvLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzYsOCArMzcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhYi5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuMDQiCisjZGVmaW5lIFZFUlNJT04gIjAuMDciCiAjZGVmaW5lIFBUQUcgInNvbG9zLXBjaSIKIAogI2RlZmluZSBDT05GSUdfUkFNX1NJWkUJMTI4CkBAIC00NSwxNiArNDksMzEgQEAKICNkZWZpbmUgSVJRX0VOX0FERFIJMHg3OAogI2RlZmluZSBGUEdBX1ZFUgkweDc0CiAjZGVmaW5lIElSUV9DTEVBUgkweDcwCi0jZGVmaW5lIEJVR19GTEFHCTB4NkMKKyNkZWZpbmUgV1JJVEVfRkxBU0gJMHg2QworI2RlZmluZSBQT1JUUwkJMHg2OAorI2RlZmluZSBGTEFTSF9CTE9DSwkweDY0CisjZGVmaW5lIEZMQVNIX0JVU1kJMHg2MAorI2RlZmluZSBGUEdBX01PREUJMHg1QworI2RlZmluZSBGTEFTSF9NT0RFCTB4NTgKKyNkZWZpbmUgVFhfRE1BX0FERFIocG9ydCkJKDB4NDAgKyAoNCAqIChwb3J0KSkpCisjZGVmaW5lIFJYX0RNQV9BRERSKHBvcnQpCSgweDMwICsgKDQgKiAocG9ydCkpKQogCiAjZGVmaW5lIERBVEFfUkFNX1NJWkUJMzI3NjgKICNkZWZpbmUgQlVGX1NJWkUJNDA5NgorI2RlZmluZSBGUEdBX1BBR0UJNTI4IC8qIEZQR0EgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgU09MT1NfUEFHRQk1MTIgLyogU29sb3MgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgRlBHQV9CTE9DSwkoRlBHQV9QQUdFICogOCkgLyogRlBHQSBmbGFzaCBibG9jayBzaXplKi8KKyNkZWZpbmUgU09MT1NfQkxPQ0sJKFNPTE9TX1BBR0UgKiA4KSAvKiBTb2xvcyBmbGFzaCBibG9jayBzaXplKi8KIAogI2RlZmluZSBSWF9CVUYoY2FyZCwgbnIpICgoY2FyZC0+YnVmZmVycykgKyAobnIpKkJVRl9TSVpFKjIpCiAjZGVmaW5lIFRYX0JVRihjYXJkLCBucikgKChjYXJkLT5idWZmZXJzKSArIChucikqQlVGX1NJWkUqMiArIEJVRl9TSVpFKQogCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKKyNkZWZpbmUgUlhfRE1BX1NJWkUJMjA0OAorCitzdGF0aWMgaW50IHJlc2V0ID0gMDsKIHN0YXRpYyBpbnQgYXRtZGVidWcgPSAwOworc3RhdGljIGludCBmaXJtd2FyZV91cGdyYWRlID0gMDsKK3N0YXRpYyBpbnQgZnBnYV91cGdyYWRlID0gMDsKIAogc3RydWN0IHBrdF9oZHIgewogCV9fbGUxNiBzaXplOwpAQCAtNjMsMjMgKzgyLDQ4IEBACiAJX19sZTE2IHR5cGU7CiB9OwogCitzdHJ1Y3Qgc29sb3Nfc2tiX2NiIHsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXVpbnQzMl90IGRtYV9hZGRyOworfTsKKworCisjZGVmaW5lIFNLQl9DQihza2IpCQkoKHN0cnVjdCBzb2xvc19za2JfY2IgKilza2ItPmNiKQorCiAjZGVmaW5lIFBLVF9EQVRBCTAKICNkZWZpbmUgUEtUX0NPTU1BTkQJMQogI2RlZmluZSBQS1RfUE9QRU4JMwogI2RlZmluZSBQS1RfUENMT1NFCTQKKyNkZWZpbmUgUEtUX1NUQVRVUwk1CiAKIHN0cnVjdCBzb2xvc19jYXJkIHsKIAl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOwogCXZvaWQgX19pb21lbSAqYnVmZmVyczsKIAlpbnQgbnJfcG9ydHM7CisJaW50IHR4X21hc2s7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgYXRtX2RldiAqYXRtZGV2WzRdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bGV0OwogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJc3BpbmxvY2tfdCBjbGlfcXVldWVfbG9jazsKKwlzcGlubG9ja190IHBhcmFtX3F1ZXVlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwYXJhbV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlWzRdOwogCXN0cnVjdCBza19idWZmX2hlYWQgY2xpX3F1ZXVlWzRdOworCXN0cnVjdCBza19idWZmICp0eF9za2JbNF07CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYls0XTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBwYXJhbV93cTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmd193cTsKKwlpbnQgdXNpbmdfZG1hOworfTsKKworCitzdHJ1Y3Qgc29sb3NfcGFyYW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlwaWRfdCBwaWQ7CisJaW50IHBvcnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlOwogfTsKIAogI2RlZmluZSBTT0xPU19DSEFOKGF0bWRldikgKChpbnQpKHVuc2lnbmVkIGxvbmcpKGF0bWRldiktPnBoeV9kYXRhKQpAQCAtODgsMTkgKzEzMiwyMiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2xvcyBQQ0kgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgTG9vcGJhY2siKTsKK01PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBTb2xvcyBjaGlwcyBvbiBzdGFydHVwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGF0bWRlYnVnLCAiUHJpbnQgQVRNIGRhdGEiKTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShhdG1kZWJ1ZywgaW50LCAwNDQ0KTsKLQotc3RhdGljIGludCBvcGVuczsKK01PRFVMRV9QQVJNX0RFU0MoZmlybXdhcmVfdXBncmFkZSwgIkluaXRpYXRlIFNvbG9zIGZpcm13YXJlIHVwZ3JhZGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoZnBnYV91cGdyYWRlLCAiSW5pdGlhdGUgRlBHQSB1cGdyYWRlIik7Cittb2R1bGVfcGFyYW0ocmVzZXQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oYXRtZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZmlybXdhcmVfdXBncmFkZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShmcGdhX3VwZ3JhZGUsIGludCwgMDQ0NCk7CiAKIHN0YXRpYyB2b2lkIGZwZ2FfcXVldWUoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYyk7Ci1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKik7CitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzb2xvc19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyogZmluZF92Y2Moc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLCBpbnQgdmNpKTsKIHN0YXRpYyBpbnQgbGlzdF92Y2NzKGludCB2Y2kpOworc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpOwogc3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyB2b2lkIGF0bV9yZW1vdmUoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgaW50IHNlbmRfY29tbWFuZChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CkBAIC0xMTUsNiArMTYyLDI2NCBAQAogICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNvbG9zX3BhcmFtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMDsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHNvbG9zX3BhcmFtX3Nob3coKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiIsIGN1cnJlbnQtPnBpZCwgYXR0ci0+YXR0ci5uYW1lKTsKKwlza2JfcHV0KHNrYiwgYnVmbGVuKTsKKworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJaWYgKCFwcm0ucmVzcG9uc2UpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gcHJtLnJlc3BvbnNlLT5sZW47CisJbWVtY3B5KGJ1ZiwgcHJtLnJlc3BvbnNlLT5kYXRhLCBidWZsZW4pOworCWtmcmVlX3NrYihwcm0ucmVzcG9uc2UpOworCisJcmV0dXJuIGJ1ZmxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc29sb3NfcGFyYW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCXNzaXplX3QgcmV0OworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMSArIGNvdW50OworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gc29sb3NfcGFyYW1fc3RvcmUoKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiVzXG4iLCBjdXJyZW50LT5waWQsIGF0dHItPmF0dHIubmFtZSwgYnVmKTsKKworCXNrYl9wdXQoc2tiLCBidWZsZW4pOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJc2tiID0gcHJtLnJlc3BvbnNlOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gc2tiLT5sZW47CisKKwkvKiBTb21ldGltZXMgaXQgaGFzIGEgbmV3bGluZSwgc29tZXRpbWVzIGl0IGRvZXNuJ3QuICovCisJaWYgKHNrYi0+ZGF0YVtidWZsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZsZW4tLTsKKworCWlmIChidWZsZW4gPT0gMiAmJiAhc3RybmNtcChza2ItPmRhdGEsICJPSyIsIDIpKQorCQlyZXQgPSBjb3VudDsKKwllbHNlIGlmIChidWZsZW4gPT0gNSAmJiAhc3RybmNtcChza2ItPmRhdGEsICJFUlJPUiIsIDUpKQorCQlyZXQgPSAtRUlPOworCWVsc2UgeworCQkvKiBXZSBrbm93IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhpczsgd2UgYWxsb2NhdGVkIAorCQkgICBpdCBvdXJzZWx2ZXMgKi8KKwkJc2tiLT5kYXRhW2J1Zmxlbl0gPSAwOworCQorCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbmV4cGVjdGVkIHBhcmFtZXRlciByZXNwb25zZTogJyVzJ1xuIiwKKwkJCSBza2ItPmRhdGEpOworCQlyZXQgPSAtRUlPOworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpuZXh0X3N0cmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBpID0gMDsKKwljaGFyICp0aGlzID0gc2tiLT5kYXRhOworCQorCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbjsgaSsrKSB7CisJCWlmICh0aGlzW2ldID09ICdcbicpIHsKKwkJCXRoaXNbaV0gPSAwOworCQkJc2tiX3B1bGwoc2tiLCBpICsgMSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIWlzcHJpbnQodGhpc1tpXSkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdGF0dXMgcGFja2V0IGhhcyBmaWVsZHMgc2VwYXJhdGVkIGJ5IFxuLCBzdGFydGluZyB3aXRoIGEgdmVyc2lvbiBudW1iZXIKKyAqIGZvciB0aGUgaW5mb3JtYXRpb24gdGhlcmVpbi4gRmllbGRzIGFyZS4uLi4KKyAqCisgKiAgICAgcGFja2V0IHZlcnNpb24KKyAqICAgICBSeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBUeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBTdGF0ZQkJKHZlcnNpb24gPj0gMSkKKyAqICAgICBMb2NhbFNOUk1hcmdpbgkodmVyc2lvbiA+PSAxKQorICogICAgIExvY2FsTGluZUF0dG4JKHZlcnNpb24gPj0gMSkKKyAqLyAgICAgICAKK3N0YXRpYyBpbnQgcHJvY2Vzc19zdGF0dXMoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNoYXIgKnN0ciwgKmVuZCwgKnN0YXRlX3N0ciwgKnNuciwgKmF0dG47CisJaW50IHZlciwgcmF0ZV91cCwgcmF0ZV9kb3duOworCisJaWYgKCFjYXJkLT5hdG1kZXZbcG9ydF0pCisJCXJldHVybiAtRU5PREVWOworCisJc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisKKwl2ZXIgPSBzaW1wbGVfc3RydG9sKHN0ciwgTlVMTCwgMTApOworCWlmICh2ZXIgPCAxKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuZXhwZWN0ZWQgc3RhdHVzIGludGVycnVwdCB2ZXJzaW9uICVkXG4iLAorCQkJIHZlcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCWlmICghc3RyY21wKHN0ciwgIkVSUk9SIikpIHsKKwkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJTdGF0dXMgcGFja2V0IGluZGljYXRlZCBTb2xvcyBlcnJvciBvbiBwb3J0ICVkIChzdGFydGluZyB1cD8pXG4iLAorCQkJIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXRlX2Rvd24gPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCXJhdGVfdXAgPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXRlX3N0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdGF0ZV9zdHIpCisJCXJldHVybiAtRUlPOworCisJLyogQW55dGhpbmcgYnV0ICdTaG93dGltZScgaXMgZG93biAqLworCWlmIChzdHJjbXAoc3RhdGVfc3RyLCAiU2hvd3RpbWUiKSkgeworCQljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCXJlbGVhc2VfdmNjcyhjYXJkLT5hdG1kZXZbcG9ydF0pOworCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJQb3J0ICVkOiAlc1xuIiwgcG9ydCwgc3RhdGVfc3RyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25yID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisJYXR0biA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFhdHRuKQorCQlyZXR1cm4gLUVJTzsKKworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlBvcnQgJWQ6ICVzIEAlZC8lZCBrYi9zJXMlcyVzJXNcbiIsCisJCSBwb3J0LCBzdGF0ZV9zdHIsIHJhdGVfZG93bi8xMDAwLCByYXRlX3VwLzEwMDAsCisJCSBzbnJbMF0/IiwgU05SICI6IiIsIHNuciwgYXR0blswXT8iLCBBdHRuICI6IiIsIGF0dG4pOworCQorCWNhcmQtPmF0bWRldltwb3J0XS0+bGlua19yYXRlID0gcmF0ZV9kb3duIC8gNDI0OworCWNhcmQtPmF0bWRldltwb3J0XS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfRk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzb2xvc19wYXJhbSAqcHJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNtZHBpZDsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKHNrYi0+bGVuIDwgNykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2tiLT5kYXRhWzBdICE9ICdMJyAgICB8fCAhaXNkaWdpdChza2ItPmRhdGFbMV0pIHx8CisJICAgICFpc2RpZ2l0KHNrYi0+ZGF0YVsyXSkgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzNdKSB8fAorCSAgICAhaXNkaWdpdChza2ItPmRhdGFbNF0pIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVs1XSkgfHwKKwkgICAgc2tiLT5kYXRhWzZdICE9ICdcbicpCisJCXJldHVybiAwOworCisJY21kcGlkID0gc2ltcGxlX3N0cnRvbCgmc2tiLT5kYXRhWzFdLCBOVUxMLCAxMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJtLCAmY2FyZC0+cGFyYW1fcXVldWUsIGxpc3QpIHsKKwkJaWYgKHBybS0+cG9ydCA9PSBwb3J0ICYmIHBybS0+cGlkID09IGNtZHBpZCkgeworCQkJcHJtLT5yZXNwb25zZSA9IHNrYjsKKwkJCXNrYl9wdWxsKHNrYiwgNyk7CisJCQl3YWtlX3VwKCZjYXJkLT5wYXJhbV93cSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZvdW5kOworfQorCiBzdGF0aWMgc3NpemVfdCBjb25zb2xlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjaGFyICpidWYpCiB7CkBAIC0xNDAsOCArNDQ1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAic2l6ZTogJWRcbiIsIHNpemUpOwotCiAJaWYgKHNpemUgPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CiAJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiQ29tbWFuZCBpcyB0b28gYmlnLiAgRHJvcHBpbmcgcmVxdWVzdFxuIik7CiAJCXJldHVybiAwOwpAQCAtMTgwLDgyICs0ODMsMTgxIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb25zb2xlLCAwNjQ0LCBjb25zb2xlX3Nob3csIGNvbnNvbGVfc3RvcmUpOwogCisKKyNkZWZpbmUgU09MT1NfQVRUUl9STyh4KSBzdGF0aWMgREVWSUNFX0FUVFIoeCwgMDQ0NCwgc29sb3NfcGFyYW1fc2hvdywgTlVMTCk7CisjZGVmaW5lIFNPTE9TX0FUVFJfUlcoeCkgc3RhdGljIERFVklDRV9BVFRSKHgsIDA2NDQsIHNvbG9zX3BhcmFtX3Nob3csIHNvbG9zX3BhcmFtX3N0b3JlKTsKKworI2luY2x1ZGUgInNvbG9zLWF0dHJsaXN0LmMiCisKKyN1bmRlZiBTT0xPU19BVFRSX1JPCisjdW5kZWYgU09MT1NfQVRUUl9SVworCisjZGVmaW5lIFNPTE9TX0FUVFJfUk8oeCkgJmRldl9hdHRyXyMjeC5hdHRyLAorI2RlZmluZSBTT0xPU19BVFRSX1JXKHgpICZkZXZfYXR0cl8jI3guYXR0ciwKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNvbG9zX2F0dHJzW10gPSB7CisjaW5jbHVkZSAic29sb3MtYXR0cmxpc3QuYyIKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2xvc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHNvbG9zX2F0dHJzLAorCS5uYW1lID0gInBhcmFtZXRlcnMiLAorfTsKKworc3RhdGljIGludCBmbGFzaF91cGdyYWRlKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgY2hpcCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CisJdWludDMyX3QgZGF0YTMyID0gMDsKKwlpbnQgYmxvY2tzaXplID0gMDsKKwlpbnQgbnVtYmxvY2tzID0gMDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKGNoaXAgPT0gMCkgeworCQlmd19uYW1lID0gInNvbG9zLUZQR0EuYmluIjsKKwkJYmxvY2tzaXplID0gRlBHQV9CTE9DSzsKKwl9IGVsc2UgeworCQlmd19uYW1lID0gInNvbG9zLUZpcm13YXJlLmJpbiI7CisJCWJsb2Nrc2l6ZSA9IFNPTE9TX0JMT0NLOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmNhcmQtPmRldi0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJGbGFzaCB1cGdyYWRlIHN0YXJ0aW5nXG4iKTsKKworCW51bWJsb2NrcyA9IGZ3LT5zaXplIC8gYmxvY2tzaXplOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkZpcm13YXJlIHNpemU6ICV6ZFxuIiwgZnctPnNpemUpOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIk51bWJlciBvZiBibG9ja3M6ICVkXG4iLCBudW1ibG9ja3MpOworCQorCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkNoYW5naW5nIEZQR0EgdG8gVXBkYXRlIG1vZGVcbiIpOworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKworCS8qIFNldCBtb2RlIHRvIENoaXAgRXJhc2UgKi8KKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJTZXQgRlBHQSBGbGFzaCBtb2RlIHRvICVzIENoaXAgRXJhc2VcbiIsCisJCSBjaGlwPyJTb2xvcyI6IkZQR0EiKTsKKwlpb3dyaXRlMzIoKGNoaXAgKiAyKSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKworCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZnctPnNpemU7IG9mZnNldCArPSBibG9ja3NpemUpIHsKKwkJaW50IGk7CisKKwkJLyogQ2xlYXIgd3JpdGUgZmxhZyAqLworCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisKKwkJLyogU2V0IG1vZGUgdG8gQmxvY2sgV3JpdGUgKi8KKwkJLyogZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiU2V0IEZQR0EgRmxhc2ggbW9kZSB0byBCbG9jayBXcml0ZVxuIik7ICovCisJCWlvd3JpdGUzMigoKGNoaXAgKiAyKSArIDEpLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX01PREUpOworCisJCS8qIENvcHkgYmxvY2sgdG8gYnVmZmVyLCBzd2FwcGluZyBlYWNoIDE2IGJpdHMgKi8KKwkJZm9yKGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpICs9IDQpIHsKKwkJCXVpbnQzMl90IHdvcmQgPSBzd2FoYjMycCgodWludDMyX3QgKikoZnctPmRhdGEgKyBvZmZzZXQgKyBpKSk7CisJCQlpb3dyaXRlMzIod29yZCwgUlhfQlVGKGNhcmQsIDMpICsgaSk7CisJCX0KKworCQkvKiBTcGVjaWZ5IGJsb2NrIG51bWJlciBhbmQgdGhlbiB0cmlnZ2VyIGZsYXNoIHdyaXRlICovCisJCWlvd3JpdGUzMihvZmZzZXQgLyBibG9ja3NpemUsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfQkxPQ0spOworCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKwl9CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZXR1cm5pbmcgRlBHQSB0byBEYXRhIG1vZGVcbiIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc29sb3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGRldl9pZDsKIAlpbnQgaGFuZGxlZCA9IDE7CiAKLQkvL0FDSyBJUlEKIAlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfQ0xFQVIpOwotCS8vRGlzYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAotCS8qIElmIHdlIG9ubHkgZG8gaXQgd2hlbiB0aGUgZGV2aWNlIGlzIG9wZW4sIHdlIGxvc2UgY29uc29sZQotCSAgIG1lc3NhZ2VzICovCi0JaWYgKDEgfHwgb3BlbnMpCisJLyogSWYgd2UncmUgdXAgYW5kIHJ1bm5pbmcsIGp1c3Qga2ljayB0aGUgdGFza2xldCB0byBwcm9jZXNzIFRYL1JYICovCisJaWYgKGNhcmQtPmF0bWRldlswXSkKIAkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJZWxzZQorCQl3YWtlX3VwKCZjYXJkLT5md193cSk7CiAKLQkvL0VuYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAogdm9pZCBzb2xvc19iaCh1bnNpZ25lZCBsb25nIGNhcmRfYXJnKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gKHZvaWQgKiljYXJkX2FyZzsKLQlpbnQgcG9ydDsKIAl1aW50MzJfdCBjYXJkX2ZsYWdzOwotCXVpbnQzMl90IHR4X21hc2s7CiAJdWludDMyX3QgcnhfZG9uZSA9IDA7CisJaW50IHBvcnQ7CiAKLQljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLQotCS8qIFRoZSBUWCBiaXRzIGFyZSBzZXQgaWYgdGhlIGNoYW5uZWwgaXMgYnVzeTsgY2xlYXIgaWYgbm90LiBXZSB3YW50IHRvCi0JICAgaW52b2tlIGZwZ2FfdHgoKSB1bmxlc3MgX2FsbF8gdGhlIGJpdHMgZm9yIGFjdGl2ZSBjaGFubmVscyBhcmUgc2V0ICovCi0JdHhfbWFzayA9ICgxIDw8IGNhcmQtPm5yX3BvcnRzKSAtIDE7Ci0JaWYgKChjYXJkX2ZsYWdzICYgdHhfbWFzaykgIT0gdHhfbWFzaykKLQkJZnBnYV90eChjYXJkKTsKKwkvKgorCSAqIFNpbmNlIGZwZ2FfdHgoKSBpcyBnb2luZyB0byBuZWVkIHRvIHJlYWQgdGhlIGZsYWdzIHVuZGVyIGl0cyBsb2NrLAorCSAqIGl0IGNhbiByZXR1cm4gdGhlbSB0byB1cyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gaGl0IFBDSSBNTUlPCisJICogYWdhaW4gZm9yIHRoZSBzYW1lIGluZm9ybWF0aW9uCisJICovCisJY2FyZF9mbGFncyA9IGZwZ2FfdHgoY2FyZCk7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2FyZC0+bnJfcG9ydHM7IHBvcnQrKykgewogCQlpZiAoY2FyZF9mbGFncyAmICgweDEwIDw8IHBvcnQpKSB7Ci0JCQlzdHJ1Y3QgcGt0X2hkciBoZWFkZXI7CisJCQlzdHJ1Y3QgcGt0X2hkciBfaGRyLCAqaGVhZGVyOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXN0cnVjdCBhdG1fdmNjICp2Y2M7CiAJCQlpbnQgc2l6ZTsKIAotCQkJcnhfZG9uZSB8PSAweDEwIDw8IHBvcnQ7CisJCQlpZiAoY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJc2tiID0gY2FyZC0+cnhfc2tiW3BvcnRdOworCQkJCWNhcmQtPnJ4X3NrYltwb3J0XSA9IE5VTEw7CiAKLQkJCW1lbWNweV9mcm9taW8oJmhlYWRlciwgUlhfQlVGKGNhcmQsIHBvcnQpLCBzaXplb2YoaGVhZGVyKSk7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci5zaXplKTsKKwkJCQloZWFkZXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLT5zaXplKTsKKwkJCQlza2JfcHV0KHNrYiwgc2l6ZSArIHNpemVvZigqaGVhZGVyKSk7CisJCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCQkJfSBlbHNlIHsKKwkJCQloZWFkZXIgPSAmX2hkcjsKIAotCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFza2IpIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBmb3IgUlhcbiIpOwotCQkJCWNvbnRpbnVlOworCQkJCXJ4X2RvbmUgfD0gMHgxMCA8PCBwb3J0OworCisJCQkJbWVtY3B5X2Zyb21pbyhoZWFkZXIsIFJYX0JVRihjYXJkLCBwb3J0KSwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNpemUpOworCisJCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyAxLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIXNrYikgeworCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgZm9yIFJYXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksCisJCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZigqaGVhZGVyKSwKKwkJCQkJICAgICAgc2l6ZSk7CiAJCQl9Ci0KLQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLAotCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZihoZWFkZXIpLAotCQkJCSAgICAgIHNpemUpOwotCiAJCQlpZiAoYXRtZGVidWcpIHsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZWNlaXZlZDogZGV2aWNlICVkXG4iLCBwb3J0KTsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJzaXplOiAlZCBWUEk6ICVkIFZDSTogJWRcbiIsCi0JCQkJCSBzaXplLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQkJIHNpemUsIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJcHJpbnRfYnVmZmVyKHNrYik7CiAJCQl9CiAKLQkJCXN3aXRjaCAobGUxNl90b19jcHUoaGVhZGVyLnR5cGUpKSB7CisJCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci0+dHlwZSkpIHsKIAkJCWNhc2UgUEtUX0RBVEE6Ci0JCQkJdmNjID0gZmluZF92Y2MoY2FyZC0+YXRtZGV2W3BvcnRdLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQl2Y2MgPSBmaW5kX3ZjYyhjYXJkLT5hdG1kZXZbcG9ydF0sIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJaWYgKCF2Y2MpIHsKIAkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlJlY2VpdmVkIHBhY2tldCBmb3IgdW5rbm93biBWQ0kuVlBJICVkLiVkIG9uIHBvcnQgJWRcbiIsCi0JCQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKKwkJCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLT52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCiAJCQkJCQkJIHBvcnQpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0yNjQsMTkgKzY2Niw1MCBAQAogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBQS1RfU1RBVFVTOgorCQkJCWlmIChwcm9jZXNzX3N0YXR1cyhjYXJkLCBwb3J0LCBza2IpICYmCisJCQkJICAgIG5ldF9yYXRlbGltaXQoKSkgeworCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJCYWQgc3RhdHVzIHBhY2tldCBvZiAlZCBieXRlcyBvbiBwb3J0ICVkOlxuIiwgc2tiLT5sZW4sIHBvcnQpOworCQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQl9CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBQS1RfQ09NTUFORDoKIAkJCWRlZmF1bHQ6IC8qIEZJWE1FOiBOb3QgcmVhbGx5LCBzdXJlbHk/ICovCisJCQkJaWYgKHByb2Nlc3NfY29tbWFuZChjYXJkLCBwb3J0LCBza2IpKQorCQkJCQlicmVhazsKIAkJCQlzcGluX2xvY2soJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKIAkJCQlpZiAoc2tiX3F1ZXVlX2xlbigmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdKSA+IDEwKSB7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJEcm9wcGluZyBjb25zb2xlIHJlc3BvbnNlIG9uIHBvcnQgJWRcbiIsCiAJCQkJCQkJIHBvcnQpOworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCX0gZWxzZQogCQkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdLCBza2IpOwogCQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5jbGlfcXVldWVfbG9jayk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJLyogQWxsb2NhdGUgUlggc2ticyBmb3IgYW55IHBvcnRzIHdoaWNoIG5lZWQgdGhlbSAqLworCQlpZiAoY2FyZC0+dXNpbmdfZG1hICYmIGNhcmQtPmF0bWRldltwb3J0XSAmJgorCQkgICAgIWNhcmQtPnJ4X3NrYltwb3J0XSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihSWF9ETUFfU0laRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoc2tiKSB7CisJCQkJU0tCX0NCKHNrYiktPmRtYV9hZGRyID0KKwkJCQkJcGNpX21hcF9zaW5nbGUoY2FyZC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaW93cml0ZTMyKFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJICBjYXJkLT5jb25maWdfcmVncyArIFJYX0RNQV9BRERSKHBvcnQpKTsKKwkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBza2I7CisJCQl9IGVsc2UgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBSWCBza2IiKTsKKworCQkJCS8qIFdlJ2xsIGhhdmUgdG8gdHJ5IGFnYWluIGxhdGVyICovCisJCQkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJCQl9CisJCX0KIAl9CiAJaWYgKHJ4X2RvbmUpCiAJCWlvd3JpdGUzMihyeF9kb25lLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwpAQCAtMzI2LDcgKzc1OSw3IEBACiAJCQkgICAgICAgdmNjLT52Y2kpOwogCQl9CiAJfSBlbHNlIHsKLQkJZm9yKGk9MDsgaTwzMjsgaSsrKXsKKwkJZm9yKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspewogCQkJaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKIAkJCXNrX2Zvcl9lYWNoKHMsIG5vZGUsIGhlYWQpIHsKIAkJCQludW1fZm91bmQgKys7CkBAIC0zNDIsNiArNzc1LDI4IEBACiAJcmV0dXJuIG51bV9mb3VuZDsKIH0KIAorc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpCit7CisgICAgICAgIGludCBpOworCisgICAgICAgIHdyaXRlX2xvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29jayAqczsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCisgICAgICAgICAgICAgICAgc2tfZm9yX2VhY2hfc2FmZShzLCBub2RlLCB0bXAsIGhlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZjYyA9IGF0bV9zayhzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Y2MtPmRldiA9PSBkZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNjX3JlbGVhc2VfYXN5bmModmNjLCAtRVBJUEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza19kZWxfbm9kZV9pbml0KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworfQorCiAKIHN0YXRpYyBpbnQgcG9wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKQEAgLTM0OSw2ICs4MDQsMTIgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuc3VwcG9ydGVkIEFUTSB0eXBlICVkXG4iLAorCQkJIHZjYy0+cW9zLmFhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlciksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiICYmIG5ldF9yYXRlbGltaXQoKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBwb3BlbigpXG4iKTsKQEAgLTM1NiwyMiArODE3LDE3IEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QT1BFTik7CiAKIAlmcGdhX3F1ZXVlKGNhcmQsIFNPTE9TX0NIQU4odmNjLT5kZXYpLCBza2IsIE5VTEwpOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIk9wZW4gZm9yIHZwaSAlZCBhbmQgdmNpICVkIG9uIGludGVyZmFjZSAlZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSk7Ci0Jc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOyAvLyBhY2NlcHQgdGhlIHZwaSAvIHZjaQorCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCWxpc3RfdmNjcygwKTsKIAotCWlmICghb3BlbnMpCi0JCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQotCW9wZW5zKys7IC8vY291bnQgb3BlbiBQVkNzCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSwxNyArODQ1LDEzIEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QQ0xPU0UpOwogCiAJZnBnYV9xdWV1ZShjYXJkLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSwgc2tiLCBOVUxMKTsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJDbG9zZSBmb3IgdnBpICVkIGFuZCB2Y2kgJWQgb24gaW50ZXJmYWNlICVkXG4iLCB2Y2MtPnZwaSwgdmNjLT52Y2ksIFNPTE9TX0NIQU4odmNjLT5kZXYpKTsKLQlpZiAoIS0tb3BlbnMpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQogCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOwogCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIApAQCAtNDM5LDIyICs4OTEsMjYgQEAKIAkJICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJaW50IG9sZF9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCSoodm9pZCAqKilza2ItPmNiID0gdmNjOworCVNLQl9DQihza2IpLT52Y2MgPSB2Y2M7CiAKLQlzcGluX2xvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJb2xkX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJmNhcmQtPnR4X3F1ZXVlW3BvcnRdKTsKIAlza2JfcXVldWVfdGFpbCgmY2FyZC0+dHhfcXVldWVbcG9ydF0sIHNrYik7Ci0Jc3Bpbl91bmxvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCWlmICghb2xkX2xlbikKKwkJY2FyZC0+dHhfbWFzayB8PSAoMSA8PCBwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAKLQkvKiBJZiBUWCBtaWdodCBuZWVkIHRvIGJlIHN0YXJ0ZWQsIGRvIHNvICovCisJLyogVGhlb3JldGljYWxseSB3ZSBjb3VsZCBqdXN0IHNjaGVkdWxlIHRoZSB0YXNrbGV0IGhlcmUsIGJ1dAorCSAgIHRoYXQgaW50cm9kdWNlcyBsYXRlbmN5IHdlIGRvbid0IHdhbnQgLS0gaXQncyBub3RpY2VhYmxlICovCiAJaWYgKCFvbGRfbGVuKQogCQlmcGdhX3R4KGNhcmQpOwogfQogCi1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQpCitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCkKIHsKLQl1aW50MzJfdCB0eF9wZW5kaW5nOworCXVpbnQzMl90IHR4X3BlbmRpbmcsIGNhcmRfZmxhZ3M7CiAJdWludDMyX3QgdHhfc3RhcnRlZCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwpAQCAtNDYyLDY5ICs5MTgsNzcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKKwkKKwljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkvKgorCSAqIFRoZSBxdWV1ZSBsb2NrIGlzIHJlcXVpcmVkIGZvciBfd3JpdGluZ18gdG8gdHhfbWFzaywgYnV0IHdlJ3JlCisJICogT0sgdG8gcmVhZCBpdCBoZXJlIHdpdGhvdXQgbG9ja2luZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVwZGF0ZQorCSAqIHRoYXQgd2UgY291bGQgcmFjZSB3aXRoIGlzIGluIGZwZ2FfcXVldWUoKSB3aGVyZSBpdCBzZXRzIGEgYml0CisJICogZm9yIGEgbmV3IHBvcnQuLi4gYnV0IGl0J3MgZ29pbmcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGlmCisJICogaXQncyBkb2luZyB0aGF0LCBhbnl3YXkuCisJICovCisJdHhfcGVuZGluZyA9IGNhcmQtPnR4X21hc2sgJiB+Y2FyZF9mbGFnczsKIAotCXR4X3BlbmRpbmcgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotCi0JZGV2X3ZkYmcoJmNhcmQtPmRldi0+ZGV2LCAiVFggRmxhZ3MgYXJlICVYXG4iLCB0eF9wZW5kaW5nKTsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBjYXJkLT5ucl9wb3J0czsgcG9ydCsrKSB7Ci0JCWlmICghKHR4X3BlbmRpbmcgJiAoMSA8PCBwb3J0KSkpIHsKKwlmb3IgKHBvcnQgPSAwOyB0eF9wZW5kaW5nOyB0eF9wZW5kaW5nID4+PSAxLCBwb3J0KyspIHsKKwkJaWYgKHR4X3BlbmRpbmcgJiAxKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiID0gY2FyZC0+dHhfc2tiW3BvcnRdOworCQkJaWYgKG9sZHNrYikKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKG9sZHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIG9sZHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQkJc3Bpbl9sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSk7CisJCQlpZiAoIXNrYikKKwkJCQljYXJkLT50eF9tYXNrICY9IH4oMSA8PCBwb3J0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAotCQkJaWYgKCFza2IpCisJCQlpZiAoc2tiICYmICFjYXJkLT51c2luZ19kbWEpIHsKKwkJCQltZW1jcHlfdG9pbyhUWF9CVUYoY2FyZCwgcG9ydCksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OworCQkJCW9sZHNrYiA9IHNrYjsgLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgc2tiIGFscmVhZHkgKi8KKwkJCX0gZWxzZSBpZiAoc2tiICYmIGNhcmQtPnVzaW5nX2RtYSkgeworCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJCQkgICAgICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBUWF9ETUFfQUREUihwb3J0KSk7CisJCQl9CisKKwkJCWlmICghb2xkc2tiKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKiBDbGVhbiB1cCBhbmQgZnJlZSBvbGRza2Igbm93IGl0J3MgZ29uZSAqLwogCQkJaWYgKGF0bWRlYnVnKSB7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiVHJhbnNtaXR0ZWQ6IHBvcnQgJWRcbiIsCiAJCQkJCSBwb3J0KTsKLQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQlwcmludF9idWZmZXIob2xkc2tiKTsKIAkJCX0KLQkJCW1lbWNweV90b2lvKFRYX0JVRihjYXJkLCBwb3J0KSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkJCXZjYyA9ICoodm9pZCAqKilza2ItPmNiOworCQkJdmNjID0gU0tCX0NCKG9sZHNrYiktPnZjYzsKIAogCQkJaWYgKHZjYykgewogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKLQkJCQlzb2xvc19wb3AodmNjLCBza2IpOworCQkJCXNvbG9zX3BvcCh2Y2MsIG9sZHNrYik7CiAJCQl9IGVsc2UKLQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJCWRldl9rZnJlZV9za2JfaXJxKG9sZHNrYik7CiAKLQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OyAvL1NldCBUWCBmdWxsIGZsYWcKIAkJfQogCX0KKwkvKiBGb3Igbm9uLURNQSBUWCwgd3JpdGUgdGhlICdUWCBzdGFydCcgYml0IGZvciBhbGwgZm91ciBwb3J0cyBzaW11bHRhbmVvdXNseSAqLwogCWlmICh0eF9zdGFydGVkKQogCQlpb3dyaXRlMzIodHhfc3RhcnRlZCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2FyZF9mbGFnczsKIH0KIAogc3RhdGljIGludCBwc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gdmNjLT5kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCWludCBwa3RsZW47CiAKLQkvL2Rldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAicHNlbmQgY2FsbGVkLlxuIik7Ci0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImRldix2cGksdmNpID0gJWQsJWQsJWRcbiIsU09MT1NfQ0hBTih2Y2MtPmRldiksdmNjLT52cGksdmNjLT52Y2kpOwotCi0JaWYgKGRlYnVnKSB7Ci0JCXNrYjIgPSBhdG1fYWxsb2NfY2hhcmdlKHZjYywgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoc2tiMikgewotCQkJbWVtY3B5KHNrYjItPmRhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQkJc2tiX3B1dChza2IyLCBza2ItPmxlbik7Ci0JCQl2Y2MtPnB1c2godmNjLCBza2IyKTsKLQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLQkJfQotCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eCk7Ci0JCXNvbG9zX3BvcCh2Y2MsIHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChza2ItPmxlbiA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKKwlwa3RsZW4gPSBza2ItPmxlbjsKKwlpZiAocGt0bGVuID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJMZW5ndGggb2YgUERVIGlzIHRvbyBsYXJnZS4gRHJvcHBpbmcgUERVLlxuIik7CiAJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CiAJCXJldHVybiAwOwpAQCAtNTM5LDYgKzEwMDMsNyBAQAogCiAJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBleHBhbmRfYnksIDAsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJwc2tiX2V4cGFuZF9oZWFkIGZhaWxlZC5cbiIpOwogCQkJc29sb3NfcG9wKHZjYywgc2tiKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTU0Niw3ICsxMDExLDggQEAKIAogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCS8qIFRoaXMgZG9lcyBfbm90XyBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgKi8KKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihwa3RsZW4pOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9EQVRBKTsKQEAgLTU3MywyMCArMTAzOSwxOSBAQAogCiBzdGF0aWMgaW50IGZwZ2FfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWludCBlcnIsIGk7CisJaW50IGVycjsKIAl1aW50MTZfdCBmcGdhX3ZlcjsKIAl1aW50OF90IG1ham9yX3ZlciwgbWlub3JfdmVyOwogCXVpbnQzMl90IGRhdGEzMjsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZDsKIAotCWlmIChkZWJ1ZykKLQkJcmV0dXJuIDA7Ci0KIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJY2FyZC0+ZGV2ID0gZGV2OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmZ3X3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5wYXJhbV93cSk7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKQEAgLTU5NCw2ICsxMDU5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWVyciA9IHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IDMyLWJpdCBETUEgbWFza1xuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAic29sb3MiKTsKIAlpZiAoZXJyKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbnNcbiIpOwpAQCAtNjExLDE3ICsxMDgyLDEzIEBACiAJCWdvdG8gb3V0X3VubWFwX2NvbmZpZzsKIAl9CiAKLS8vCWZvcihpPTA7aTw2NCA7aSs9NCl7Ci0vLwkJZGF0YTMyPWlvcmVhZDMyKGNhcmQtPmJ1ZmZlcnMgKyBpKTsKLS8vCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIiUwOGxYXG4iLCh1bnNpZ25lZCBsb25nKWRhdGEzMik7Ci0vLwl9CisJaWYgKHJlc2V0KSB7CisJCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCiAKLQkvL0ZpbGwgQ29uZmlnIE1lbSB3aXRoIHplcm9zCi0JZm9yKGkgPSAwOyBpIDwgMTI4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIGkpOwotCi0JLy9TZXQgUlggZW1wdHkgZmxhZ3MKLQlpb3dyaXRlMzIoMHhGMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwl9CiAKIAlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfVkVSKTsKIAlmcGdhX3ZlciA9IChkYXRhMzIgJiAweDAwMDBGRkZGKTsKQEAgLTYzMCw1NSArMTA5Nyw1MyBAQAogCWRldl9pbmZvKCZkZXYtPmRldiwgIlNvbG9zIEZQR0EgVmVyc2lvbiAlZC4lMDJkIHN2bi0lZFxuIiwKIAkJIG1ham9yX3ZlciwgbWlub3JfdmVyLCBmcGdhX3Zlcik7CiAKLQljYXJkLT5ucl9wb3J0cyA9IDI7IC8qIEZJWE1FOiBEZXRlY3QgZGF1Z2h0ZXJib2FyZCAqLworCWlmICgwICYmIGZwZ2FfdmVyID4gMjcpCisJCWNhcmQtPnVzaW5nX2RtYSA9IDE7CisJZWxzZSB7CisJCS8qIFNldCBSWCBlbXB0eSBmbGFnIGZvciBhbGwgcG9ydHMgKi8KKwkJaW93cml0ZTMyKDB4RjAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJfQogCi0JZXJyID0gYXRtX2luaXQoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5tYXBfYm90aDsKKwlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIFBPUlRTKTsKKwljYXJkLT5ucl9wb3J0cyA9IChkYXRhMzIgJiAweDAwMDAwMEZGKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOworCiAJdGFza2xldF9pbml0KCZjYXJkLT50bGV0LCBzb2xvc19iaCwgKHVuc2lnbmVkIGxvbmcpY2FyZCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnR4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwotLyoKLQkvLyBTZXQgTG9vcGJhY2sgbW9kZQotCWRhdGEzMiA9IDB4MDAwMTAwMDA7Ci0JaW93cml0ZTMyKGRhdGEzMixjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotKi8KLS8qCi0JLy8gRmlsbCBCdWZmZXJzIHdpdGggemVyb3MKLQlmb3IgKGkgPSAwOyBpIDwgQlVGX1NJWkUgKiA4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5idWZmZXJzICsgaSk7Ci0qLwotLyoKLQlmb3IoaSA9IDA7IGkgPCAoQlVGX1NJWkUgKiAxKTsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHgxMjM0NTY3OCwgY2FyZC0+YnVmZmVycyArIGkgKyAoMCpCVUZfU0laRSkpOwotCWZvcihpID0gMDsgaSA8IChCVUZfU0laRSAqIDEpOyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGFiY2RlZjk4LCBjYXJkLT5idWZmZXJzICsgaSArICgxKkJVRl9TSVpFKSk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5wYXJhbV9xdWV1ZSk7CiAKLQkvLyBSZWFkIENvbmZpZyBNZW1vcnkKLQlwcmludGsoS0VSTl9ERUJVRyAiUmVhZGluZyBDb25maWcgTUVNXG4iKTsKLQlpID0gMDsKLQlmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRhdGEzMj1pb3JlYWQzMihjYXJkLT5idWZmZXJzICsgaSooQlVGX1NJWkUvMikpOwotCQlwcmludGsoS0VSTl9BTEVSVCAiQWRkcjogJWxYIERhdGE6ICUwOGxYXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKGFkZHJfc3RhcnQgKyBpKihCVUZfU0laRS8yKSksCi0JCSAgICAgICAodW5zaWduZWQgbG9uZylkYXRhMzIpOwotCX0KLSovCi0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIlJlcXVlc3RpbmcgSVJROiAlZFxuIixkZXYtPmlycSk7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbG9zX2lycSwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc29sb3NfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCSAgInNvbG9zLXBjaSIsIGNhcmQpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGludGVycnVwdCBJUlE6ICVkXG4iLCBkZXYtPmlycSk7CisJCWdvdG8gb3V0X3VubWFwX2JvdGg7CisJfQogCi0JLy8gRW5hYmxlIElSUXMKIAlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKKwlpZiAoZnBnYV91cGdyYWRlKQorCQlmbGFzaF91cGdyYWRlKGNhcmQsIDApOworCisJaWYgKGZpcm13YXJlX3VwZ3JhZGUpCisJCWZsYXNoX3VwZ3JhZGUoY2FyZCwgMSk7CisKKwllcnIgPSBhdG1faW5pdChjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2lycTsKKwogCXJldHVybiAwOwogCisgb3V0X2ZyZWVfaXJxOgorCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKKwlmcmVlX2lycShkZXYtPmlycSwgY2FyZCk7CisJdGFza2xldF9raWxsKCZjYXJkLT50bGV0KTsKKwkKICBvdXRfdW5tYXBfYm90aDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmNvbmZpZ19yZWdzKTsKICBvdXRfdW5tYXBfY29uZmlnOgogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CkBAIC02OTMsOSArMTE1OCwxMCBAQAogewogCWludCBpOwogCi0Jb3BlbnMgPSAwOwotCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm5yX3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT50eF9xdWV1ZVtpXSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPmNsaV9xdWV1ZVtpXSk7CiAKQEAgLTcwNyw2ICsxMTczLDggQEAKIAkJfQogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2RldiwgJmRldl9hdHRyX2NvbnNvbGUpKQogCQkJZGV2X2VycigmY2FyZC0+ZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgY29uc29sZSBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CisJCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKSkKKwkJCWRldl9lcnIoJmNhcmQtPmRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHBhcmFtZXRlciBncm91cCBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CiAKIAkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmVnaXN0ZXJlZCBBVE0gZGV2aWNlICVkXG4iLCBjYXJkLT5hdG1kZXZbaV0tPm51bWJlcik7CiAKQEAgLTcxNCw2ICsxMTgyLDIyIEBACiAJCWNhcmQtPmF0bWRldltpXS0+Y2lfcmFuZ2UudmNpX2JpdHMgPSAxNjsKIAkJY2FyZC0+YXRtZGV2W2ldLT5kZXZfZGF0YSA9IGNhcmQ7CiAJCWNhcmQtPmF0bWRldltpXS0+cGh5X2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWk7CisJCWNhcmQtPmF0bWRldltpXS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIGF0bV9pbml0KClcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfU1RBVFVTKTsKKworCQlmcGdhX3F1ZXVlKGNhcmQsIGksIHNrYiwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzI0LDggKzEyMDgsMjggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ucl9wb3J0czsgaSsrKSB7CiAJCWlmIChjYXJkLT5hdG1kZXZbaV0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKIAkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlVucmVnaXN0ZXJpbmcgQVRNIGRldmljZSAlZFxuIiwgY2FyZC0+YXRtZGV2W2ldLT5udW1iZXIpOworCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKTsKIAkJCWF0bV9kZXZfZGVyZWdpc3RlcihjYXJkLT5hdG1kZXZbaV0pOworCisJCQlza2IgPSBjYXJkLT5yeF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQl9CisJCQlza2IgPSBjYXJkLT50eF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJfQorCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbaV0pKSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisgCiAJCX0KIAl9CiB9CkBAIC03MzMsMzEgKzEyMzcsMzEgQEAKIHN0YXRpYyB2b2lkIGZwZ2FfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwkKKwkvKiBEaXNhYmxlIElSUXMgKi8KKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKLQlpZiAoZGVidWcpCi0JCXJldHVybjsKKwkvKiBSZXNldCBGUEdBICovCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkodm9pZClpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAogCiAJYXRtX3JlbW92ZShjYXJkKTsKIAotCWRldl92ZGJnKCZkZXYtPmRldiwgIkZyZWVpbmcgSVJRXG4iKTsKLQkvLyBEaXNhYmxlIElSUXMgZnJvbSBGUEdBCi0JaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBjYXJkKTsKIAl0YXNrbGV0X2tpbGwoJmNhcmQtPnRsZXQpOwogCi0JLy8JaW93cml0ZTMyKDB4MDEscGNpcmVncyk7Ci0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiVW5tYXBwaW5nIFBDSSByZXNvdXJjZVxuIik7CisJLyogUmVsZWFzZSBkZXZpY2UgZnJvbSByZXNldCAqLworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJKHZvaWQpaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5jb25maWdfcmVncyk7CiAKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJSZWxlYXNpbmcgUENJIFJlZ2lvblxuIik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoY2FyZCk7Ci0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImZwZ2FfcmVtb3ZlXG4iKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmcGdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggOWY1MGYxYi4uZGRjOTc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaAorKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCkBAIC02Myw2ICs2MywzMiBAQAogI2RlZmluZSB0b19jbGFzcyhvYmopCVwKIAljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY2xhc3NfcHJpdmF0ZSwgY2xhc3Nfc3Vic3lzLmtvYmopCiAKKy8qKgorICogc3RydWN0IGRldmljZV9wcml2YXRlIC0gc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByaXZhdGUgdG8gdGhlIGRyaXZlciBjb3JlIHBvcnRpb25zIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICoKKyAqIEBrbGlzdF9jaGlsZHJlbiAtIGtsaXN0IGNvbnRhaW5pbmcgYWxsIGNoaWxkcmVuIG9mIHRoaXMgZGV2aWNlCisgKiBAa25vZGVfcGFyZW50IC0gbm9kZSBpbiBzaWJsaW5nIGxpc3QKKyAqIEBrbm9kZV9kcml2ZXIgLSBub2RlIGluIGRyaXZlciBsaXN0CisgKiBAa25vZGVfYnVzIC0gbm9kZSBpbiBidXMgbGlzdAorICogQGRldmljZSAtIHBvaW50ZXIgYmFjayB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKKyAqIGFzc29jaWF0ZWQgd2l0aC4KKyAqCisgKiBOb3RoaW5nIG91dHNpZGUgb2YgdGhlIGRyaXZlciBjb3JlIHNob3VsZCBldmVyIHRvdWNoIHRoZXNlIGZpZWxkcy4KKyAqLworc3RydWN0IGRldmljZV9wcml2YXRlIHsKKwlzdHJ1Y3Qga2xpc3Qga2xpc3RfY2hpbGRyZW47CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfcGFyZW50OworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2RyaXZlcjsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9idXM7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworfTsKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KQorI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9kcml2ZXIob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9kcml2ZXIpCisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX2J1cyhvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX2J1cykKKwogLyogaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGRldmljZXNfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgYnVzZXNfaW5pdCh2b2lkKTsKQEAgLTg2LDYgKzExMiwxMSBAQAogCiBleHRlcm4gdm9pZCBkcml2ZXJfZGV0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogZXh0ZXJuIGludCBkcml2ZXJfcHJvYmVfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgaW5saW5lIGludCBkcml2ZXJfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCisJCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkcnYtPmJ1cy0+bWF0Y2ggJiYgZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KTsKK30KIAogZXh0ZXJuIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggODNmMzJiOC4uZGMwMzBmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlkZXYgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1Zik7Ci0JaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMKSB7CisJaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMICYmIGRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKSB7CiAJCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJCWRvd24oJmRldi0+cGFyZW50LT5zZW0pOwogCQlkb3duKCZkZXYtPnNlbSk7CkBAIC0yNTMsNyArMjUzLDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cykgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OworCisJaWYgKG4pIHsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTI4Niw3ICsyOTMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZidXMtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2J1cyA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9idXMgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihkZXYsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC0zMjAsNyArMzI3LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmYnVzLT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9idXMgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfYnVzIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkKIAkJaWYgKG1hdGNoKGRldiwgZGF0YSkgJiYgZ2V0X2RldmljZShkZXYpKQogCQkJYnJlYWs7CkBAIC01MDcsNyArNTE0LDggQEAKIAkJCXJldCA9IGRldmljZV9hdHRhY2goZGV2KTsKIAkJV0FSTl9PTihyZXQgPCAwKTsKIAkJaWYgKHJldCA+PSAwKQotCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfYnVzLCAmYnVzLT5wLT5rbGlzdF9kZXZpY2VzKTsKKwkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX2J1cywKKwkJCQkgICAgICAgJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcyk7CiAJfQogfQogCkBAIC01MjgsOCArNTM2LDggQEAKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+YnVzLT5wLT5kZXZpY2VzX2tzZXQtPmtvYmosCiAJCQkJICBkZXZfbmFtZShkZXYpKTsKIAkJZGV2aWNlX3JlbW92ZV9hdHRycyhkZXYtPmJ1cywgZGV2KTsKLQkJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfYnVzKSkKLQkJCWtsaXN0X2RlbCgmZGV2LT5rbm9kZV9idXMpOworCQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5wLT5rbm9kZV9idXMpKQorCQkJa2xpc3RfZGVsKCZkZXYtPnAtPmtub2RlX2J1cyk7CiAKIAkJcHJfZGVidWcoImJ1czogJyVzJzogcmVtb3ZlIGRldmljZSAlc1xuIiwKIAkJCSBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CkBAIC04MzEsMTQgKzgzOSwxNiBAQAogCiBzdGF0aWMgdm9pZCBrbGlzdF9kZXZpY2VzX2dldChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCiAJZ2V0X2RldmljZShkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBrbGlzdF9kZXZpY2VzX3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtOTMyLDYgKzk0Miw3IEBACiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7CiAJa2ZyZWUoYnVzLT5wKTsKIG91dDoKKwlidXMtPnAgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfcmVnaXN0ZXIpOwpAQCAtOTUzLDYgKzk2NCw3IEBACiAJYnVzX3JlbW92ZV9maWxlKGJ1cywgJmJ1c19hdHRyX3VldmVudCk7CiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7CiAJa2ZyZWUoYnVzLT5wKTsKKwlidXMtPnAgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3VucmVnaXN0ZXIpOwogCkBAIC05OTMsMTggKzEwMDUsMjAgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OwogCXN0cnVjdCBkZXZpY2UgKmI7CiAKIAlsaXN0X2Zvcl9lYWNoKHBvcywgbGlzdCkgewogCQluID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IGtsaXN0X25vZGUsIG5fbm9kZSk7Ci0JCWIgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJYiA9IGRldl9wcnYtPmRldmljZTsKIAkJaWYgKGNvbXBhcmUoYSwgYikgPD0gMCkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsCi0JCQkJICAgICAgICZiLT5rbm9kZV9idXMubl9ub2RlKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZhLT5wLT5rbm9kZV9idXMubl9ub2RlLAorCQkJCSAgICAgICAmYi0+cC0+a25vZGVfYnVzLm5fbm9kZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOworCWxpc3RfbW92ZV90YWlsKCZhLT5wLT5rbm9kZV9idXMubl9ub2RlLCBsaXN0KTsKIH0KIAogdm9pZCBidXNfc29ydF9icmVhZHRoZmlyc3Qoc3RydWN0IGJ1c190eXBlICpidXMsCkBAIC0xMDE0LDYgKzEwMjgsNyBAQAogCUxJU1RfSEVBRChzb3J0ZWRfZGV2aWNlcyk7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwogCXN0cnVjdCBrbGlzdF9ub2RlICpuOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGtsaXN0ICpkZXZpY2Vfa2xpc3Q7CiAKQEAgLTEwMjIsNyArMTAzNyw4IEBACiAJc3Bpbl9sb2NrKCZkZXZpY2Vfa2xpc3QtPmtfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZGV2aWNlX2tsaXN0LT5rX2xpc3QpIHsKIAkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOwotCQlkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCQlkZXZpY2VfaW5zZXJ0aW9uX3NvcnRfa2xpc3QoZGV2LCAmc29ydGVkX2RldmljZXMsIGNvbXBhcmUpOwogCX0KIAlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCBmM2VhZTYzLi5lNzNjOTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogc3RhdGljIHZvaWQgZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IGRldi0+cDsKIAogCWlmIChkZXYtPnJlbGVhc2UpCiAJCWRldi0+cmVsZWFzZShkZXYpOwpAQCAtMTIwLDYgKzEyMSw3IEBACiAJCVdBUk4oMSwgS0VSTl9FUlIgIkRldmljZSAnJXMnIGRvZXMgbm90IGhhdmUgYSByZWxlYXNlKCkgIgogCQkJImZ1bmN0aW9uLCBpdCBpcyBicm9rZW4gYW5kIG11c3QgYmUgZml4ZWQuXG4iLAogCQkJZGV2X25hbWUoZGV2KSk7CisJa2ZyZWUocCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRldmljZV9rdHlwZSA9IHsKQEAgLTEzNCw4ICsxMzYsNiBAQAogCiAJaWYgKGt0eXBlID09ICZkZXZpY2Vfa3R5cGUpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOwotCQlpZiAoZGV2LT51ZXZlbnRfc3VwcHJlc3MpCi0JCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+YnVzKQogCQkJcmV0dXJuIDE7CiAJCWlmIChkZXYtPmNsYXNzKQpAQCAtNTA3LDE0ICs1MDcsMTYgQEAKIAogc3RhdGljIHZvaWQga2xpc3RfY2hpbGRyZW5fZ2V0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwLT5kZXZpY2U7CiAKIAlnZXRfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGtsaXN0X2NoaWxkcmVuX3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcC0+ZGV2aWNlOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtNTM4LDggKzU0MCw2IEBACiB7CiAJZGV2LT5rb2JqLmtzZXQgPSBkZXZpY2VzX2tzZXQ7CiAJa29iamVjdF9pbml0KCZkZXYtPmtvYmosICZkZXZpY2Vfa3R5cGUpOwotCWtsaXN0X2luaXQoJmRldi0+a2xpc3RfY2hpbGRyZW4sIGtsaXN0X2NoaWxkcmVuX2dldCwKLQkJICAga2xpc3RfY2hpbGRyZW5fcHV0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5kbWFfcG9vbHMpOwogCWluaXRfTVVURVgoJmRldi0+c2VtKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5kZXZyZXNfbG9jayk7CkBAIC03NzcsMTcgKzc3NywxMiBAQAogaW50IGRldl9zZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgdmFyZ3M7Ci0JY2hhciAqczsKKwlpbnQgZXJyOwogCiAJdmFfc3RhcnQodmFyZ3MsIGZtdCk7Ci0JdnNucHJpbnRmKGRldi0+YnVzX2lkLCBzaXplb2YoZGV2LT5idXNfaWQpLCBmbXQsIHZhcmdzKTsKKwllcnIgPSBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKCZkZXYtPmtvYmosIGZtdCwgdmFyZ3MpOwogCXZhX2VuZCh2YXJncyk7Ci0KLQkvKiBld3d3Li4uIHNvbWUgb2YgdGhlc2UgYnVnZ2VycyBoYXZlIC8gaW4gdGhlIG5hbWUuLi4gKi8KLQl3aGlsZSAoKHMgPSBzdHJjaHIoZGV2LT5idXNfaWQsICcvJykpKQotCQkqcyA9ICchJzsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfc2V0X25hbWUpOwogCkBAIC04NjQsMTIgKzg1OSwyNiBAQAogCWlmICghZGV2KQogCQlnb3RvIGRvbmU7CiAKLQkvKiBUZW1wb3JhcmlseSBzdXBwb3J0IGluaXRfbmFtZSBpZiBpdCBpcyBzZXQuCi0JICogSXQgd2lsbCBvdmVycmlkZSBidXNfaWQgZm9yIG5vdyAqLwotCWlmIChkZXYtPmluaXRfbmFtZSkKLQkJZGV2X3NldF9uYW1lKGRldiwgIiVzIiwgZGV2LT5pbml0X25hbWUpOworCWRldi0+cCA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYtPnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5wLT5kZXZpY2UgPSBkZXY7CisJa2xpc3RfaW5pdCgmZGV2LT5wLT5rbGlzdF9jaGlsZHJlbiwga2xpc3RfY2hpbGRyZW5fZ2V0LAorCQkgICBrbGlzdF9jaGlsZHJlbl9wdXQpOwogCi0JaWYgKCFzdHJsZW4oZGV2LT5idXNfaWQpKQorCS8qCisJICogZm9yIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGRldmljZXMsIHdoaWNoIHNob3VsZCBhbGwgYmUgY29udmVydGVkCisJICogc29tZSBkYXksIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbmFtZS4gV2UgcHJldmVudCByZWFkaW5nIGJhY2sKKwkgKiB0aGUgbmFtZSwgYW5kIGZvcmNlIHRoZSB1c2Ugb2YgZGV2X25hbWUoKQorCSAqLworCWlmIChkZXYtPmluaXRfbmFtZSkgeworCQlkZXZfc2V0X25hbWUoZGV2LCBkZXYtPmluaXRfbmFtZSk7CisJCWRldi0+aW5pdF9uYW1lID0gTlVMTDsKKwl9CisKKwlpZiAoIWRldl9uYW1lKGRldikpCiAJCWdvdG8gZG9uZTsKIAogCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXZfbmFtZShkZXYpLCBfX2Z1bmNfXyk7CkBAIC05MjgsNyArOTM3LDggQEAKIAlrb2JqZWN0X3VldmVudCgmZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAJYnVzX2F0dGFjaF9kZXZpY2UoZGV2KTsKIAlpZiAocGFyZW50KQotCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsICZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfcGFyZW50LAorCQkJICAgICAgICZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAogCWlmIChkZXYtPmNsYXNzKSB7CiAJCW11dGV4X2xvY2soJmRldi0+Y2xhc3MtPnAtPmNsYXNzX211dGV4KTsKQEAgLTEwNDIsNyArMTA1Miw3IEBACiAJZGV2aWNlX3BtX3JlbW92ZShkZXYpOwogCWRwbV9zeXNmc19yZW1vdmUoZGV2KTsKIAlpZiAocGFyZW50KQotCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJa2xpc3RfZGVsKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJaWYgKE1BSk9SKGRldi0+ZGV2dCkpIHsKIAkJZGV2aWNlX3JlbW92ZV9zeXNfZGV2X2VudHJ5KGRldik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZ0X2F0dHIpOwpAQCAtMTEwMyw3ICsxMTEzLDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCkgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwOworCisJaWYgKG4pIHsKKwkJcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwkJZGV2ID0gcC0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTExMjUsNyArMTE0Miw3IEBACiAJc3RydWN0IGRldmljZSAqY2hpbGQ7CiAJaW50IGVycm9yID0gMDsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5rbGlzdF9jaGlsZHJlbiwgJmkpOworCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbiwgJmkpOwogCXdoaWxlICgoY2hpbGQgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihjaGlsZCwgZGF0YSk7CiAJa2xpc3RfaXRlcl9leGl0KCZpKTsKQEAgLTExNTYsNyArMTE3Myw3IEBACiAJaWYgKCFwYXJlbnQpCiAJCXJldHVybiBOVUxMOwogCi0Ja2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CisJa2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CiAJd2hpbGUgKChjaGlsZCA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChjaGlsZCwgZGF0YSkgJiYgZ2V0X2RldmljZShjaGlsZCkpCiAJCQlicmVhazsKQEAgLTEzNDgsNyArMTM2NSwxMCBAQAogCWRldi0+cmVsZWFzZSA9IGRldmljZV9jcmVhdGVfcmVsZWFzZTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcnZkYXRhKTsKIAotCXZzbnByaW50ZihkZXYtPmJ1c19pZCwgQlVTX0lEX1NJWkUsIGZtdCwgYXJncyk7CisJcmV0dmFsID0ga29iamVjdF9zZXRfbmFtZV92YXJncygmZGV2LT5rb2JqLCBmbXQsIGFyZ3MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycm9yOwpAQCAtMTQ1MiwxOSArMTQ3MiwxNSBAQAogCQlvbGRfY2xhc3NfbmFtZSA9IG1ha2VfY2xhc3NfbmFtZShkZXYtPmNsYXNzLT5uYW1lLCAmZGV2LT5rb2JqKTsKICNlbmRpZgogCi0Jb2xkX2RldmljZV9uYW1lID0ga21hbGxvYyhCVVNfSURfU0laRSwgR0ZQX0tFUk5FTCk7CisJb2xkX2RldmljZV9uYW1lID0ga3N0cmR1cChkZXZfbmFtZShkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9sZF9kZXZpY2VfbmFtZSkgewogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlzdHJsY3B5KG9sZF9kZXZpY2VfbmFtZSwgZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFKTsKLQlzdHJsY3B5KGRldi0+YnVzX2lkLCBuZXdfbmFtZSwgQlVTX0lEX1NJWkUpOwogCiAJZXJyb3IgPSBrb2JqZWN0X3JlbmFtZSgmZGV2LT5rb2JqLCBuZXdfbmFtZSk7Ci0JaWYgKGVycm9yKSB7Ci0JCXN0cmxjcHkoZGV2LT5idXNfaWQsIG9sZF9kZXZpY2VfbmFtZSwgQlVTX0lEX1NJWkUpOworCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JfQogCiAjaWZkZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKIAlpZiAob2xkX2NsYXNzX25hbWUpIHsKQEAgLTE1NDUsOCArMTU2MSwxMCBAQAogICogZGV2aWNlX21vdmUgLSBtb3ZlcyBhIGRldmljZSB0byBhIG5ldyBwYXJlbnQKICAqIEBkZXY6IHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZGV2aWNlIHRvIGJlIG1vdmVkCiAgKiBAbmV3X3BhcmVudDogdGhlIG5ldyBwYXJlbnQgb2YgdGhlIGRldmljZSAoY2FuIGJ5IE5VTEwpCisgKiBAZHBtX29yZGVyOiBob3cgdG8gcmVvcmRlciB0aGUgZHBtX2xpc3QKICAqLwotaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCkKK2ludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQsCisJCWVudW0gZHBtX29yZGVyIGRwbV9vcmRlcikKIHsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGRldmljZSAqb2xkX3BhcmVudDsKQEAgLTE1NTYsNiArMTU3NCw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2aWNlX3BtX2xvY2soKTsKIAluZXdfcGFyZW50ID0gZ2V0X2RldmljZShuZXdfcGFyZW50KTsKIAluZXdfcGFyZW50X2tvYmogPSBnZXRfZGV2aWNlX3BhcmVudChkZXYsIG5ld19wYXJlbnQpOwogCkBAIC0xNTcwLDkgKzE1ODksMTAgQEAKIAlvbGRfcGFyZW50ID0gZGV2LT5wYXJlbnQ7CiAJZGV2LT5wYXJlbnQgPSBuZXdfcGFyZW50OwogCWlmIChvbGRfcGFyZW50KQotCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJa2xpc3RfcmVtb3ZlKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJaWYgKG5ld19wYXJlbnQpIHsKLQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LCAmbmV3X3BhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQsCisJCQkgICAgICAgJm5ld19wYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUobmV3X3BhcmVudCkpOwogCX0KIApAQCAtMTU4NCwxMSArMTYwNCwxMSBAQAogCQlkZXZpY2VfbW92ZV9jbGFzc19saW5rcyhkZXYsIG5ld19wYXJlbnQsIG9sZF9wYXJlbnQpOwogCQlpZiAoIWtvYmplY3RfbW92ZSgmZGV2LT5rb2JqLCAmb2xkX3BhcmVudC0+a29iaikpIHsKIAkJCWlmIChuZXdfcGFyZW50KQotCQkJCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9wYXJlbnQpOworCQkJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCQkJZGV2LT5wYXJlbnQgPSBvbGRfcGFyZW50OwogCQkJaWYgKG9sZF9wYXJlbnQpIHsKLQkJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsCi0JCQkJCSAgICAgICAmb2xkX3BhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCQkJICAgICAgICZvbGRfcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAJCQkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUob2xkX3BhcmVudCkpOwogCQkJfQogCQl9CkBAIC0xNTk2LDkgKzE2MTYsMjMgQEAKIAkJcHV0X2RldmljZShuZXdfcGFyZW50KTsKIAkJZ290byBvdXQ7CiAJfQorCXN3aXRjaCAoZHBtX29yZGVyKSB7CisJY2FzZSBEUE1fT1JERVJfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVDoKKwkJZGV2aWNlX3BtX21vdmVfYWZ0ZXIoZGV2LCBuZXdfcGFyZW50KTsKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVY6CisJCWRldmljZV9wbV9tb3ZlX2JlZm9yZShuZXdfcGFyZW50LCBkZXYpOworCQlicmVhazsKKwljYXNlIERQTV9PUkRFUl9ERVZfTEFTVDoKKwkJZGV2aWNlX3BtX21vdmVfbGFzdChkZXYpOworCQlicmVhazsKKwl9CiBvdXRfcHV0OgogCXB1dF9kZXZpY2Uob2xkX3BhcmVudCk7CiBvdXQ6CisJZGV2aWNlX3BtX3VubG9jaygpOwogCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY3B1LmMgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKaW5kZXggNzE5ZWU1Yy4uNWIyNTdhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jcHUuYworKysgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogLyoKICAqIFByaW50IGNwdSBvbmxpbmUsIHBvc3NpYmxlLCBwcmVzZW50LCBhbmQgc3lzdGVtIG1hcHMKICAqLwotc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c19tYXAoY2hhciAqYnVmLCBjcHVtYXNrX3QgKm1hcCkKK3N0YXRpYyBzc2l6ZV90IHByaW50X2NwdXNfbWFwKGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hcCkKIHsKIAlpbnQgbiA9IGNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLTIsIG1hcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggMTM1MjMxMi4uZjE3YzMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIHZvaWQgZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5rbm9kZV9kcml2ZXIpKSB7CisJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+cC0+a25vZGVfZHJpdmVyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZGV2aWNlICVzIGFscmVhZHkgYm91bmRcbiIsCiAJCQlfX2Z1bmNfXywga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKIAkJcmV0dXJuOwpAQCAtNDMsNyArNDMsNyBAQAogCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZkZXYtPmJ1cy0+cC0+YnVzX25vdGlmaWVyLAogCQkJCQkgICAgIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSLCBkZXYpOwogCi0Ja2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfZHJpdmVyLCAmZGV2LT5kcml2ZXItPnAtPmtsaXN0X2RldmljZXMpOworCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX2RyaXZlciwgJmRldi0+ZHJpdmVyLT5wLT5rbGlzdF9kZXZpY2VzKTsKIH0KIAogc3RhdGljIGludCBkcml2ZXJfc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE3MiwxNiArMTcyLDEyIEBACiAvKioKICAqIHdhaXRfZm9yX2RldmljZV9wcm9iZQogICogV2FpdCBmb3IgZGV2aWNlIHByb2JpbmcgdG8gYmUgY29tcGxldGVkLgotICoKLSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gcG9sbHMgYXQgMTAwIG1zZWMgaW50ZXJ2YWxzLgogICovCi1pbnQgd2FpdF9mb3JfZGV2aWNlX3Byb2JlKHZvaWQpCit2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKQogewogCS8qIHdhaXQgZm9yIHRoZSBrbm93biBkZXZpY2VzIHRvIGNvbXBsZXRlIHRoZWlyIHByb2JpbmcgKi8KLQl3aGlsZSAoZHJpdmVyX3Byb2JlX2RvbmUoKSAhPSAwKQotCQltc2xlZXAoMTAwKTsKKwl3YWl0X2V2ZW50KHByb2JlX3dhaXRxdWV1ZSwgYXRvbWljX3JlYWQoJnByb2JlX2NvdW50KSA9PSAwKTsKIAlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTg5LDE0ICsxODUsOCBAQAogICogQGRydjogZHJpdmVyIHRvIGJpbmQgYSBkZXZpY2UgdG8KICAqIEBkZXY6IGRldmljZSB0byB0cnkgdG8gYmluZCB0byB0aGUgZHJpdmVyCiAgKgotICogRmlyc3QsIHdlIGNhbGwgdGhlIGJ1cydzIG1hdGNoIGZ1bmN0aW9uLCBpZiBvbmUgcHJlc2VudCwgd2hpY2ggc2hvdWxkCi0gKiBjb21wYXJlIHRoZSBkZXZpY2UgSURzIHRoZSBkcml2ZXIgc3VwcG9ydHMgd2l0aCB0aGUgZGV2aWNlIElEcyBvZiB0aGUKLSAqIGRldmljZS4gTm90ZSB3ZSBkb24ndCBkbyB0aGlzIG91cnNlbHZlcyBiZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlCi0gKiBmb3JtYXQgb2YgdGhlIElEIHN0cnVjdHVyZXMsIG5vciB3aGF0IGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBtYXRjaCBhbmQKLSAqIHdoYXQgaXMgbm90LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIGEgbWF0Y2ggaXMgZm91bmQsIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcwotICogbm90IHJlZ2lzdGVyZWQsIGFuZCAwIG90aGVyd2lzZS4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PREVWIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQsCisgKiAxIGlmIHRoZSBkZXZpY2UgaXMgYm91bmQgc3VjZXNzZnVsbHkgYW5kIDAgb3RoZXJ3aXNlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBAZGV2LT5zZW0gaGVsZC4gIFdoZW4gY2FsbGVkIGZvciBhCiAgKiBVU0IgaW50ZXJmYWNlLCBAZGV2LT5wYXJlbnQtPnNlbSBtdXN0IGJlIGhlbGQgYXMgd2VsbC4KQEAgLTIwNywyMSArMTk3LDIyIEBACiAKIAlpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKGRldikpCiAJCXJldHVybiAtRU5PREVWOwotCWlmIChkcnYtPmJ1cy0+bWF0Y2ggJiYgIWRydi0+YnVzLT5tYXRjaChkZXYsIGRydikpCi0JCWdvdG8gZG9uZTsKIAogCXByX2RlYnVnKCJidXM6ICclcyc6ICVzOiBtYXRjaGVkIGRldmljZSAlcyB3aXRoIGRyaXZlciAlc1xuIiwKIAkJIGRydi0+YnVzLT5uYW1lLCBfX2Z1bmNfXywgZGV2X25hbWUoZGV2KSwgZHJ2LT5uYW1lKTsKIAogCXJldCA9IHJlYWxseV9wcm9iZShkZXYsIGRydik7CiAKLWRvbmU6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmljZV9hdHRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCisJaWYgKCFkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gZHJpdmVyX3Byb2JlX2RldmljZShkcnYsIGRldik7CiB9CiAKQEAgLTI3NCw3ICsyNjUsNyBAQAogCSAqIGlzIGFuIGVycm9yLgogCSAqLwogCi0JaWYgKGRydi0+YnVzLT5tYXRjaCAmJiAhZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KSkKKwlpZiAoIWRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKQogCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KQEAgLTMyNyw3ICszMTgsNyBAQAogCQkJZHJ2LT5yZW1vdmUoZGV2KTsKIAkJZGV2cmVzX3JlbGVhc2VfYWxsKGRldik7CiAJCWRldi0+ZHJpdmVyID0gTlVMTDsKLQkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX2RyaXZlcik7CisJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9kcml2ZXIpOwogCX0KIH0KIApAQCAtMzU3LDYgKzM0OCw3IEBACiAgKi8KIHZvaWQgZHJpdmVyX2RldGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogeworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAlmb3IgKDs7KSB7CkBAIC0zNjUsOCArMzU3LDEwIEBACiAJCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAJCQlicmVhazsKIAkJfQotCQlkZXYgPSBsaXN0X2VudHJ5KGRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xpc3QucHJldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9kcml2ZXIubl9ub2RlKTsKKwkJZGV2X3BydiA9IGxpc3RfZW50cnkoZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbGlzdC5wcmV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9wcml2YXRlLAorCQkJCSAgICAga25vZGVfZHJpdmVyLm5fbm9kZSk7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKIAkJZ2V0X2RldmljZShkZXYpOwogCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCAxZTJiZGE3Li5jNTFmMTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC0xOSw3ICsxOSwxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9kcml2ZXIpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKKworCWlmIChuKSB7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9kcml2ZXIobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC00Miw3ICs0OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmRydi0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9kcml2ZXIgOiBOVUxMKTsKKwkJCSAgICAgc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2RyaXZlciA6IE5VTEwpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oZGV2LCBkYXRhKTsKIAlrbGlzdF9pdGVyX2V4aXQoJmkpOwpAQCAtNzYsNyArODMsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZkcnYtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2RyaXZlciA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9kcml2ZXIgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpKQogCQlpZiAobWF0Y2goZGV2LCBkYXRhKSAmJiBnZXRfZGV2aWNlKGRldikpCiAJCQlicmVhazsKQEAgLTIxNiw2ICsyMjMsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKm90aGVyOwogCisJQlVHX09OKCFkcnYtPmJ1cy0+cCk7CisKIAlpZiAoKGRydi0+YnVzLT5wcm9iZSAmJiBkcnYtPnByb2JlKSB8fAogCSAgICAoZHJ2LT5idXMtPnJlbW92ZSAmJiBkcnYtPnJlbW92ZSkgfHwKIAkgICAgKGRydi0+YnVzLT5zaHV0ZG93biAmJiBkcnYtPnNodXRkb3duKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggNDQ2OTlkOS4uZDNhNTljNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAlmX2Rldi0+cGFyZW50ID0gZGV2aWNlOwogCWZfZGV2LT5jbGFzcyA9ICZmaXJtd2FyZV9jbGFzczsKIAlkZXZfc2V0X2RydmRhdGEoZl9kZXYsIGZ3X3ByaXYpOwotCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCAxKTsKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycihkZXZpY2UsICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJfQogCiAJaWYgKHVldmVudCkKLQkJZl9kZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCAwKTsKIAkqZGV2X3AgPSBmX2RldjsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCAzNDlhMTAxLi5kMjE5OGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjE3LDYgKzIxNyw3IEBACiAJaWYgKGQpIHsKIAkJbWVtY3B5KGQsIGRhdGEsIHNpemUpOwogCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CisJCXBkZXYtPnBsYXRmb3JtX2RhdGEgPSBkOwogCX0KIAlyZXR1cm4gZCA/IDAgOiAtRU5PTUVNOwogfQpAQCAtMjQ2LDYgKzI0NywyMSBAQAogCWVsc2UKIAkJZGV2X3NldF9uYW1lKCZwZGV2LT5kZXYsIHBkZXYtPm5hbWUpOwogCisJLyogV2Ugd2lsbCByZW1vdmUgcGxhdGZvcm1fZGF0YSBmaWVsZCBmcm9tIHN0cnVjdCBkZXZpY2UKKwkqIGlmIGFsbCBwbGF0Zm9ybSBkZXZpY2VzIHBhc3MgaXRzIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKwkqIGZyb20gcGxhdGZvcm1fZGV2aWNlLiBUaGUgY29udmVyc2lvbiBpcyBnb2luZyB0byBiZSBhCisJKiBsb25nIHRpbWUsIHNvIHdlIGFsbG93IHRoZSB0d28gY2FzZXMgY29leGlzdCB0byBtYWtlCisJKiB0aGlzIGtpbmQgb2YgZml4IG1vcmUgZWFzaWx5Ki8KKwlpZiAocGRldi0+cGxhdGZvcm1fZGF0YSAmJiBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IHVzZSB3aGljaCBwbGF0Zm9ybV9kYXRhP1xuIiwKKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJfSBlbHNlIGlmIChwZGV2LT5wbGF0Zm9ybV9kYXRhKSB7CisJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRldi0+cGxhdGZvcm1fZGF0YTsKKwl9IGVsc2UgaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXBkZXYtPnBsYXRmb3JtX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcCwgKnIgPSAmcGRldi0+cmVzb3VyY2VbaV07CiAKQEAgLTU4NCwxMCArNjAwLDI1IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0JYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9cGxhdGZvcm06JXMiLCBwZGV2LT5uYW1lKTsKKwlhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz0lcyVzIiwgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCwKKwkJKHBkZXYtPmlkX2VudHJ5KSA/IHBkZXYtPmlkX2VudHJ5LT5uYW1lIDogcGRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICpwbGF0Zm9ybV9tYXRjaF9pZCgKKwkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLAorCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl3aGlsZSAoaWQtPm5hbWVbMF0pIHsKKwkJaWYgKHN0cmNtcChwZGV2LT5uYW1lLCBpZC0+bmFtZSkgPT0gMCkgeworCQkJcGRldi0+aWRfZW50cnkgPSBpZDsKKwkJCXJldHVybiBpZDsKKwkJfQorCQlpZCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBwbGF0Zm9ybV9tYXRjaCAtIGJpbmQgcGxhdGZvcm0gZGV2aWNlIHRvIHBsYXRmb3JtIGRyaXZlci4KICAqIEBkZXY6IGRldmljZS4KQEAgLTYwMyw5ICs2MzQsMTQgQEAKICAqLwogc3RhdGljIGludCBwbGF0Zm9ybV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJLyogbWF0Y2ggYWdhaW5zdCB0aGUgaWQgdGFibGUgZmlyc3QgKi8KKwlpZiAocGRydi0+aWRfdGFibGUpCisJCXJldHVybiBwbGF0Zm9ybV9tYXRjaF9pZChwZHJ2LT5pZF90YWJsZSwgcGRldikgIT0gTlVMTDsKKworCS8qIGZhbGwtYmFjayB0byBkcml2ZXIgbmFtZSBtYXRjaCAqLwogCXJldHVybiAoc3RyY21wKHBkZXYtPm5hbWUsIGRydi0+bmFtZSkgPT0gMCk7CiB9CiAKQEAgLTYyMywyNiArNjU5LDI0IEBACiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zdXNwZW5kX2xhdGUpCi0JCXJldCA9IGRydi0+c3VzcGVuZF9sYXRlKHBkZXYsIG1lc2cpOworCWlmIChkZXYtPmRyaXZlciAmJiBwZHJ2LT5zdXNwZW5kX2xhdGUpCisJCXJldCA9IHBkcnYtPnN1c3BlbmRfbGF0ZShwZGV2LCBtZXNnKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZV9lYXJseShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnJlc3VtZV9lYXJseSkKLQkJcmV0ID0gZHJ2LT5yZXN1bWVfZWFybHkocGRldik7CisJaWYgKGRldi0+ZHJpdmVyICYmIHBkcnYtPnJlc3VtZV9lYXJseSkKKwkJcmV0ID0gcGRydi0+cmVzdW1lX2Vhcmx5KHBkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDJkMTRmNGEuLmUyNTUzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMTA3LDYgKzEwNyw1MCBAQAogfQogCiAvKioKKyAqCWRldmljZV9wbV9tb3ZlX2JlZm9yZSAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0CisgKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBiZWZvcmUKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwgc3RydWN0IGRldmljZSAqZGV2YikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyBiZWZvcmUgJXM6JXNcbiIsCisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2YS0+a29iaiksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2Yi0+a29iaikpOworCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGJlZm9yZSBkZXZiLiAqLworCWxpc3RfbW92ZV90YWlsKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKK30KKworLyoqCisgKglkZXZpY2VfcG1fbW92ZV9hZnRlciAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0CisgKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBhZnRlcgorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgYWZ0ZXIgJXM6JXNcbiIsCisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2YS0+a29iaiksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2Yi0+a29iaikpOworCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGFmdGVyIGRldmIuICovCisJbGlzdF9tb3ZlKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKK30KKworLyoqCisgKiAJZGV2aWNlX3BtX21vdmVfbGFzdCAtIG1vdmUgZGV2aWNlIHRvIGVuZCBvZiBkcG1fbGlzdAorICogCUBkZXY6ICAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyB0byBlbmQgb2YgbGlzdFxuIiwKKwkJIGRldi0+YnVzID8gZGV2LT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CisJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7Cit9CisKKy8qKgogICoJcG1fb3AgLSBleGVjdXRlIHRoZSBQTSBvcGVyYXRpb24gYXBwcm9waWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQKICAqCUBkZXY6CURldmljZS4KICAqCUBvcHM6CVBNIG9wZXJhdGlvbnMgdG8gY2hvb3NlIGZyb20uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaCBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCmluZGV4IDQxZjUxZmEuLmM3Y2I0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCkBAIC0xOCwxMSArMTgsMTkgQEAKIAogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqKTsKIAogI2Vsc2UgLyogQ09ORklHX1BNX1NMRUVQICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwKKwkJCQkJIHN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2Yikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikge30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCBiNDI4YzhjLi5jYmQzNmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogCiBzdGF0aWMgc3NpemVfdAotc3lzZGV2X3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZmZlcikKK3N5c2Rldl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7CisJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKnN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnNob3cpCiAJCXJldHVybiBzeXNkZXZfYXR0ci0+c2hvdyhzeXNkZXYsIHN5c2Rldl9hdHRyLCBidWZmZXIpOwpAQCAtNDIsMTEgKzQyLDExIEBACiAKIAogc3RhdGljIHNzaXplX3QKLXN5c2Rldl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLAotCSAgICAgY29uc3QgY2hhciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQorc3lzZGV2X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7CisJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKnN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnN0b3JlKQogCQlyZXR1cm4gc3lzZGV2X2F0dHItPnN0b3JlKHN5c2Rldiwgc3lzZGV2X2F0dHIsIGJ1ZmZlciwgY291bnQpOwpAQCAtNjMsMTMgKzYzLDEzIEBACiB9OwogCiAKLWludCBzeXNkZXZfY3JlYXRlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKiBzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIGEpCitpbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSkKIHsKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2ZpbGUoJnMtPmtvYmosICZhLT5hdHRyKTsKIH0KIAogCi12b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqIHMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogYSkKK3ZvaWQgc3lzZGV2X3JlbW92ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSkKIHsKIAlzeXNmc19yZW1vdmVfZmlsZSgmcy0+a29iaiwgJmEtPmF0dHIpOwogfQpAQCAtODQsNyArODQsNyBAQAogc3RhdGljIHNzaXplX3Qgc3lzZGV2X2NsYXNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNoYXIgKmJ1ZmZlcikKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CiAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKIAogCWlmIChjbGFzc19hdHRyLT5zaG93KQpAQCAtOTUsOCArOTUsOCBAQAogc3RhdGljIHNzaXplX3Qgc3lzZGV2X2NsYXNzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCSAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOwotCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICogY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOworCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CiAKIAlpZiAoY2xhc3NfYXR0ci0+c3RvcmUpCiAJCXJldHVybiBjbGFzc19hdHRyLT5zdG9yZShjbGFzcywgYnVmZmVyLCBjb3VudCk7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBrc2V0ICpzeXN0ZW1fa3NldDsKIAotaW50IHN5c2Rldl9jbGFzc19yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzKQoraW50IHN5c2Rldl9jbGFzc19yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCiB7CiAJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLCBjbHMtPm5hbWUpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4ga3NldF9yZWdpc3RlcigmY2xzLT5rc2V0KTsKIH0KIAotdm9pZCBzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzKQordm9pZCBzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCiB7CiAJcHJfZGVidWcoIlVucmVnaXN0ZXJpbmcgc3lzZGV2IGNsYXNzICclcydcbiIsCiAJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CkBAIC0yMDMsOCArMjAzLDggQEAKICAqCUBjbHM6CUNsYXNzIGRyaXZlciBiZWxvbmdzIHRvLgogICoJQGRydjoJRHJpdmVyLgogICovCi12b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzLAotCQkJICAgICAgc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnYpCit2b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMsCisJCQkgICAgICBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2KQogewogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmRydi0+ZW50cnkpOwpAQCAtMjI5LDEwICsyMjksMTAgQEAKICAqCUBzeXNkZXY6CWRldmljZSBpbiBxdWVzdGlvbgogICoKICAqLwotaW50IHN5c2Rldl9yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKK2ludCBzeXNkZXZfcmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscyA9IHN5c2Rldi0+Y2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscyA9IHN5c2Rldi0+Y2xzOwogCiAJaWYgKCFjbHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJCQkJICAgICBzeXNkZXYtPmlkKTsKIAogCWlmICghZXJyb3IpIHsKLQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnY7CisJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAKIAkJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5cyBkZXZpY2UgJyVzJ1xuIiwKIAkJCSBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwpAQCAtMjc0LDkgKzI3NCw5IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi12b2lkIHN5c2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2KQordm9pZCBzeXNkZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogewotCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJnN5c2Rldi0+Y2xzLT5kcml2ZXJzLCBlbnRyeSkgewpAQCAtMzA1LDE5ICszMDUsMTkgQEAKICAqLwogdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAogCXByX2RlYnVnKCJTaHV0dGluZyBEb3duIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2OworCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJCXByX2RlYnVnKCJTaHV0dGluZyBkb3duIHR5cGUgJyVzJzpcbiIsCiAJCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKIAkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CiAKIAkJCS8qIENhbGwgYXV4aWxsYXJ5IGRyaXZlcnMgZmlyc3QgKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogICovCiBpbnQgc3lzZGV2X3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsICplcnJfZGV2OwogCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnYsICplcnJfZHJ2OwogCWludCByZXQ7CkBAIC00NDIsMTIgKzQ0MiwxMiBAQAogICovCiBpbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCiAJcHJfZGVidWcoIlJlc3VtaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCQlwcl9kZWJ1ZygiUmVzdW1pbmcgdHlwZSAnJXMnOlxuIiwKIAkJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYyBiL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCmluZGV4IGE3NzhmYjUuLmJmNmIxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCkBAIC0zMSw3ICszMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogCi0jZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpIAkJXAorI2RlZmluZSBkZWZpbmVfb25lX3JvX25hbWVkKF9uYW1lLCBfZnVuYykJCQkJXAorc3RhdGljIFNZU0RFVl9BVFRSKF9uYW1lLCAwNDQ0LCBfZnVuYywgTlVMTCkKKworI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJCQlcCiBzdGF0aWMgU1lTREVWX0FUVFIoX25hbWUsIDA0NDQsIHNob3dfIyNfbmFtZSwgTlVMTCkKIAogI2RlZmluZSBkZWZpbmVfaWRfc2hvd19mdW5jKG5hbWUpCQkJCVwKQEAgLTQyLDggKzQ1LDggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG9wb2xvZ3lfIyNuYW1lKGNwdSkpOwlcCiB9CiAKLSNpZiBkZWZpbmVkKHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncykgfHwgZGVmaW5lZCh0b3BvbG9neV9jb3JlX3NpYmxpbmdzKQotc3RhdGljIHNzaXplX3Qgc2hvd19jcHVtYXAoaW50IHR5cGUsIGNwdW1hc2tfdCAqbWFzaywgY2hhciAqYnVmKQorI2lmIGRlZmluZWQodG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2spIHx8IGRlZmluZWQodG9wb2xvZ3lfY29yZV9jcHVtYXNrKQorc3RhdGljIHNzaXplX3Qgc2hvd19jcHVtYXAoaW50IHR5cGUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBjaGFyICpidWYpCiB7CiAJcHRyZGlmZl90IGxlbiA9IFBUUl9BTElHTihidWYgKyBQQUdFX1NJWkUgLSAxLCBQQUdFX1NJWkUpIC0gYnVmOwogCWludCBuID0gMDsKQEAgLTY1LDcgKzY4LDcgQEAKIAkJCSAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCi0JcmV0dXJuIHNob3dfY3B1bWFwKDAsICYodG9wb2xvZ3lfIyNuYW1lKGNwdSkpLCBidWYpOwkJXAorCXJldHVybiBzaG93X2NwdW1hcCgwLCB0b3BvbG9neV8jI25hbWUoY3B1KSwgYnVmKTsJCVwKIH0KIAogI2RlZmluZSBkZWZpbmVfc2libGluZ3Nfc2hvd19saXN0KG5hbWUpCQkJCQlcCkBAIC03NCw3ICs3Nyw3IEBACiAJCQkJICBjaGFyICpidWYpCQkJCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCi0JcmV0dXJuIHNob3dfY3B1bWFwKDEsICYodG9wb2xvZ3lfIyNuYW1lKGNwdSkpLCBidWYpOwkJXAorCXJldHVybiBzaG93X2NwdW1hcCgxLCB0b3BvbG9neV8jI25hbWUoY3B1KSwgYnVmKTsJCVwKIH0KIAogI2Vsc2UKQEAgLTgyLDkgKzg1LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQkJXAogCQkJICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsJCQkJCVwKLQljcHVtYXNrX3QgbWFzayA9IHRvcG9sb2d5XyMjbmFtZShjcHUpOwkJCQlcCi0JcmV0dXJuIHNob3dfY3B1bWFwKDAsICZtYXNrLCBidWYpOwkJCQlcCisJcmV0dXJuIHNob3dfY3B1bWFwKDAsIHRvcG9sb2d5XyMjbmFtZShkZXYtPmlkKSwgYnVmKTsJCVwKIH0KIAogI2RlZmluZSBkZWZpbmVfc2libGluZ3Nfc2hvd19saXN0KG5hbWUpCQkJCQlcCkBAIC05Miw5ICs5Myw3IEBACiAJCQkJICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAogCQkJCSAgY2hhciAqYnVmKQkJCQlcCiB7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAotCWNwdW1hc2tfdCBtYXNrID0gdG9wb2xvZ3lfIyNuYW1lKGNwdSk7CQkJCVwKLQlyZXR1cm4gc2hvd19jcHVtYXAoMSwgJm1hc2ssIGJ1Zik7CQkJCVwKKwlyZXR1cm4gc2hvd19jcHVtYXAoMSwgdG9wb2xvZ3lfIyNuYW1lKGRldi0+aWQpLCBidWYpOwkJXAogfQogI2VuZGlmCiAKQEAgLTEwNywxMyArMTA2LDEzIEBACiBkZWZpbmVfaWRfc2hvd19mdW5jKGNvcmVfaWQpOwogZGVmaW5lX29uZV9ybyhjb3JlX2lkKTsKIAotZGVmaW5lX3NpYmxpbmdzX3Nob3dfZnVuYyh0aHJlYWRfc2libGluZ3MpOwotZGVmaW5lX29uZV9ybyh0aHJlYWRfc2libGluZ3MpOwotZGVmaW5lX29uZV9ybyh0aHJlYWRfc2libGluZ3NfbGlzdCk7CitkZWZpbmVfc2libGluZ3Nfc2hvd19mdW5jKHRocmVhZF9jcHVtYXNrKTsKK2RlZmluZV9vbmVfcm9fbmFtZWQodGhyZWFkX3NpYmxpbmdzLCBzaG93X3RocmVhZF9jcHVtYXNrKTsKK2RlZmluZV9vbmVfcm9fbmFtZWQodGhyZWFkX3NpYmxpbmdzX2xpc3QsIHNob3dfdGhyZWFkX2NwdW1hc2tfbGlzdCk7CiAKLWRlZmluZV9zaWJsaW5nc19zaG93X2Z1bmMoY29yZV9zaWJsaW5ncyk7Ci1kZWZpbmVfb25lX3JvKGNvcmVfc2libGluZ3MpOwotZGVmaW5lX29uZV9ybyhjb3JlX3NpYmxpbmdzX2xpc3QpOworZGVmaW5lX3NpYmxpbmdzX3Nob3dfZnVuYyhjb3JlX2NwdW1hc2spOworZGVmaW5lX29uZV9yb19uYW1lZChjb3JlX3NpYmxpbmdzLCBzaG93X2NvcmVfY3B1bWFzayk7CitkZWZpbmVfb25lX3JvX25hbWVkKGNvcmVfc2libGluZ3NfbGlzdCwgc2hvd19jb3JlX2NwdW1hc2tfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJmF0dHJfcGh5c2ljYWxfcGFja2FnZV9pZC5hdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDAzNDRhOGEuLmU3YjhhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ1LDYgKzQ1LDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCitjb25maWcgQkxLX0RFVl9TV0lNCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweSIKKwlkZXBlbmRzIG9uIE02OEsgJiYgTUFDCisJaGVscAorCSAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnQKKwkgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy4KKwogY29uZmlnIEFNSUdBX1oyUkFNCiAJdHJpc3RhdGUgIkFtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFpPUlJPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQppbmRleCA4N2UxMjBlLi4zMTQ1MTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiAjIAogCiBvYmotJChDT05GSUdfTUFDX0ZMT1BQWSkJKz0gc3dpbTMubworb2JqLSQoQ09ORklHX0JMS19ERVZfU1dJTSkJKz0gc3dpbV9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpCSs9IGZsb3BweS5vCiBvYmotJChDT05GSUdfQU1JR0FfRkxPUFBZKQkrPSBhbWlmbG9wLm8KIG9iai0kKENPTkZJR19QUzNfRElTSykJCSs9IHBzM2Rpc2subwpAQCAtMzMsMyArMzQsNSBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfSEQpCSs9IGhkLm8KIAogb2JqLSQoQ09ORklHX1hFTl9CTEtERVZfRlJPTlRFTkQpCSs9IHhlbi1ibGtmcm9udC5vCisKK3N3aW1fbW9kLW9ianMJOj0gc3dpbS5vIHN3aW1fYXNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKaW5kZXggYzYwOTliYS4uY2UwZDYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFvZV9wdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYW9lX3B0IF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FPRSksCiAJLmZ1bmMgPSBhb2VuZXRfcmN2LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA0ZjliNmQ3Li41ZDBlMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zODk4LDYgKzM4OTgsMTMgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgY2Npc3NfaW5pdCh2b2lkKQogeworCS8qCisJICogVGhlIGhhcmR3YXJlIHJlcXVpcmVzIHRoYXQgY29tbWFuZHMgYXJlIGFsaWduZWQgb24gYSA2NC1iaXQKKwkgKiBib3VuZGFyeS4gR2l2ZW4gdGhhdCB3ZSB1c2UgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB0byBhbGxvY2F0ZSBhbgorCSAqIGFycmF5IG9mIHRoZW0sIHRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorCSAqLworCUJVSUxEX0JVR19PTihzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIDgpOworCiAJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiXG4iKTsKIAogCS8qIFJlZ2lzdGVyIGZvciBvdXIgUENJIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCA1ZDM5ZGYxLi5jYTI2OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC02MTcsNiArNjE3LDcgQEAKIAlpbnQgaTsKIAogCWMtPnBjaV9kZXYgPSBwZGV2OworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImNwcWFycmF5OiBVbmFibGUgdG8gRW5hYmxlIFBDSSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCA4M2Q4ZWQzLi5jMmM5NWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTQxMzUsMTAgKzQxMzUsOSBAQAogc3RhdGljIHNzaXplX3QgZmxvcHB5X2Ntb3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnAgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgZHJpdmU7CiAKLQlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSxkZXYpOwogCWRyaXZlID0gcC0+aWQ7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJVhcbiIsIFVEUC0+Y21vcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGJmMDM0NTUuLjI2MjFlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC00NzQsMTAgKzQ3NCwzNSBAQAogCWludCByZXQ7CiAKIAlwb3MgPSAoKGxvZmZfdCkgYmlvLT5iaV9zZWN0b3IgPDwgOSkgKyBsby0+bG9fb2Zmc2V0OwotCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkKKworCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkgeworCQlpbnQgYmFycmllciA9IGJpb19iYXJyaWVyKGJpbyk7CisJCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsKKworCQlpZiAoYmFycmllcikgeworCQkJaWYgKHVubGlrZWx5KCFmaWxlLT5mX29wLT5mc3luYykpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCQkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKIAkJcmV0ID0gbG9fc2VuZChsbywgYmlvLCBwb3MpOwotCWVsc2UKKworCQlpZiAoYmFycmllciAmJiAhcmV0KSB7CisJCQlyZXQgPSB2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJfSBlbHNlCiAJCXJldCA9IGxvX3JlY2VpdmUobG8sIGJpbywgbG8tPmxvX2Jsb2Nrc2l6ZSwgcG9zKTsKKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgyNiw2ICs4NTEsOSBAQAogCWxvLT5sb19xdWV1ZS0+cXVldWVkYXRhID0gbG87CiAJbG8tPmxvX3F1ZXVlLT51bnBsdWdfZm4gPSBsb29wX3VucGx1ZzsKIAorCWlmICghKGxvX2ZsYWdzICYgTE9fRkxBR1NfUkVBRF9PTkxZKSAmJiBmaWxlLT5mX29wLT5mc3luYykKKwkJYmxrX3F1ZXVlX29yZGVyZWQobG8tPmxvX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKKwogCXNldF9jYXBhY2l0eShsby0+bG9fZGlzaywgc2l6ZSk7CiAJYmRfc2V0X3NpemUoYmRldiwgc2l6ZSA8PCA5KTsKIApAQCAtOTQxLDExICs5NjksMTggQEAKIAkJYmRfc2V0X3NpemUoYmRldiwgMCk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0+Zl9tYXBwaW5nLCBnZnApOwogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7Ci0JZnB1dChmaWxwKTsKIAkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCWlmIChtYXhfcGFydCA+IDApCiAJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKKwltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCS8qCisJICogTmVlZCBub3QgaG9sZCBsb19jdGxfbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuCisJICogQ2FsbGluZyBmcHV0IGhvbGRpbmcgbG9fY3RsX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIKKwkgKiBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhcyBmcHV0IGNhbiB0YWtlCisJICogYmRfbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fY3RsX211dGV4LgorCSAqLworCWZwdXQoZmlscCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjMsNyArMTE5OCw3IEBACiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmxvLT5sb19jdGxfbXV0ZXgsIDEpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBMT09QX1NFVF9GRDoKIAkJZXJyID0gbG9vcF9zZXRfZmQobG8sIG1vZGUsIGJkZXYsIGFyZyk7CkBAIC0xMTcyLDcgKzEyMDcsMTAgQEAKIAkJZXJyID0gbG9vcF9jaGFuZ2VfZmQobG8sIGJkZXYsIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgTE9PUF9DTFJfRkQ6CisJCS8qIGxvb3BfY2xyX2ZkIHdvdWxkIGhhdmUgdW5sb2NrZWQgbG9fY3RsX211dGV4IG9uIHN1Y2Nlc3MgKi8KIAkJZXJyID0gbG9vcF9jbHJfZmQobG8sIGJkZXYpOworCQlpZiAoIWVycikKKwkJCWdvdG8gb3V0X3VubG9ja2VkOwogCQlicmVhazsKIAljYXNlIExPT1BfU0VUX1NUQVRVUzoKIAkJZXJyID0gbG9vcF9zZXRfc3RhdHVzX29sZChsbywgKHN0cnVjdCBsb29wX2luZm8gX191c2VyICopIGFyZyk7CkBAIC0xMTkwLDYgKzEyMjgsOCBAQAogCQllcnIgPSBsby0+aW9jdGwgPyBsby0+aW9jdGwobG8sIGNtZCwgYXJnKSA6IC1FSU5WQUw7CiAJfQogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisKK291dF91bmxvY2tlZDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmNjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqIERyaXZlciBmb3IgU1dJTSAoU2FuZGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIGZsb3BweSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTYKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTEwLTMwIChsdikgLSBQb3J0IHRvIDIuNgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorCisjZGVmaW5lIENBUkROQU1FICJzd2ltIgorCitzdHJ1Y3Qgc2VjdG9yX2hlYWRlciB7CisJdW5zaWduZWQgY2hhciBzaWRlOworCXVuc2lnbmVkIGNoYXIgdHJhY2s7CisJdW5zaWduZWQgY2hhciBzZWN0b3I7CisJdW5zaWduZWQgY2hhciBzaXplOworCXVuc2lnbmVkIGNoYXIgY3JjMDsKKwl1bnNpZ25lZCBjaGFyIGNyYzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJWZXJzaW9uIDAuMiAoMjAwOC0xMC0zMCkiCisKKyNkZWZpbmUgUkVHKHgpCXVuc2lnbmVkIGNoYXIgeCwgeCAjIyBfcGFkWzB4MjAwIC0gMV07CisKK3N0cnVjdCBzd2ltIHsKKwlSRUcod3JpdGVfZGF0YSkKKwlSRUcod3JpdGVfbWFyaykKKwlSRUcod3JpdGVfQ1JDKQorCVJFRyh3cml0ZV9wYXJhbWV0ZXIpCisJUkVHKHdyaXRlX3BoYXNlKQorCVJFRyh3cml0ZV9zZXR1cCkKKwlSRUcod3JpdGVfbW9kZTApCisJUkVHKHdyaXRlX21vZGUxKQorCisJUkVHKHJlYWRfZGF0YSkKKwlSRUcocmVhZF9tYXJrKQorCVJFRyhyZWFkX2Vycm9yKQorCVJFRyhyZWFkX3BhcmFtZXRlcikKKwlSRUcocmVhZF9waGFzZSkKKwlSRUcocmVhZF9zZXR1cCkKKwlSRUcocmVhZF9zdGF0dXMpCisJUkVHKHJlYWRfaGFuZHNoYWtlKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCYoYmFzZSktPndyaXRlXyMjcmVnLCAodikpCisjZGVmaW5lIHN3aW1fcmVhZChiYXNlLCByZWcpCQlpbl84KCYoYmFzZSktPnJlYWRfIyNyZWcpCisKKy8qIElXTSByZWdpc3RlcnMgKi8KKworc3RydWN0IGl3bSB7CisJUkVHKHBoMEwpCisJUkVHKHBoMEgpCisJUkVHKHBoMUwpCisJUkVHKHBoMUgpCisJUkVHKHBoMkwpCisJUkVHKHBoMkgpCisJUkVHKHBoM0wpCisJUkVHKHBoM0gpCisJUkVHKG10ck9mZikKKwlSRUcobXRyT24pCisJUkVHKGludERyaXZlKQorCVJFRyhleHREcml2ZSkKKwlSRUcocTZMKQorCVJFRyhxNkgpCisJUkVHKHE3TCkKKwlSRUcocTdIKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBpd21fd3JpdGUoYmFzZSwgcmVnLCB2KSAJb3V0XzgoJihiYXNlKS0+cmVnLCAodikpCisjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJihiYXNlKS0+cmVnKQorCisvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgU0VFS19QT1NJVElWRQkweDA3MAorI2RlZmluZSBTRUVLX05FR0FUSVZFCTB4MDc0CisjZGVmaW5lIFNURVAJCTB4MDcxCisjZGVmaW5lIE1PVE9SX09OCTB4MDcyCisjZGVmaW5lIE1PVE9SX09GRgkweDA3NgorI2RlZmluZSBJTkRFWAkJMHgwNzMKKyNkZWZpbmUgRUpFQ1QJCTB4MDc3CisjZGVmaW5lIFNFVE1GTQkJMHgxNzEKKyNkZWZpbmUgU0VUR0NSCQkweDE3NQorCisjZGVmaW5lIFJFTEFYCQkweDAzMworI2RlZmluZSBMU1RSQgkJMHgwMDgKKworI2RlZmluZSBDQV9NQVNLCQkweDA3NworCisvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovCisKKyNkZWZpbmUgUkVBRF9EQVRBXzAJMHgwNzQKKyNkZWZpbmUgVFdPTUVHX0RSSVZFCTB4MDc1CisjZGVmaW5lIFNJTkdMRV9TSURFRAkweDA3NgorI2RlZmluZSBEUklWRV9QUkVTRU5UCTB4MDc3CisjZGVmaW5lIERJU0tfSU4JCTB4MTcwCisjZGVmaW5lIFdSSVRFX1BST1QJMHgxNzEKKyNkZWZpbmUgVFJBQ0tfWkVSTwkweDE3MgorI2RlZmluZSBUQUNITwkJMHgxNzMKKyNkZWZpbmUgUkVBRF9EQVRBXzEJMHgxNzQKKyNkZWZpbmUgTUZNX01PREUJMHgxNzUKKyNkZWZpbmUgU0VFS19DT01QTEVURQkweDE3NgorI2RlZmluZSBPTkVNRUdfTUVESUEJMHgxNzcKKworLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVJLX0JZVEUJMHgwMQorI2RlZmluZSBDUkNfWkVSTwkweDAyCisjZGVmaW5lIFJEREFUQQkJMHgwNAorI2RlZmluZSBTRU5TRQkJMHgwOAorI2RlZmluZSBNT1RFTgkJMHgxMAorI2RlZmluZSBFUlJPUgkJMHgyMAorI2RlZmluZSBEQVQyQllURQkweDQwCisjZGVmaW5lIERBVDFCWVRFCTB4ODAKKworLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqLworCisjZGVmaW5lIFNfSU5WX1dEQVRBCTB4MDEKKyNkZWZpbmUgU18zXzVfU0VMRUNUCTB4MDIKKyNkZWZpbmUgU19HQ1IJCTB4MDQKKyNkZWZpbmUgU19GQ0xLX0RJVjIJMHgwOAorI2RlZmluZSBTX0VSUk9SX0NPUlIJMHgxMAorI2RlZmluZSBTX0lCTV9EUklWRQkweDIwCisjZGVmaW5lIFNfR0NSX1dSSVRFCTB4NDAKKyNkZWZpbmUgU19USU1FT1VUCTB4ODAKKworLyogYml0cyBpbiBtb2RlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0xGSUZPCQkweDAxCisjZGVmaW5lIEVOQkwxCQkweDAyCisjZGVmaW5lIEVOQkwyCQkweDA0CisjZGVmaW5lIEFDVElPTgkJMHgwOAorI2RlZmluZSBXUklURV9NT0RFCTB4MTAKKyNkZWZpbmUgSEVEU0VMCQkweDIwCisjZGVmaW5lIE1PVE9OCQkweDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2VudW0gZHJpdmVfbG9jYXRpb24geworCUlOVEVSTkFMX0RSSVZFID0gMHgwMiwKKwlFWFRFUk5BTF9EUklWRSA9IDB4MDQsCit9OworCitlbnVtIG1lZGlhX3R5cGUgeworCUREX01FRElBLAorCUhEX01FRElBLAorfTsKKworc3RydWN0IGZsb3BweV9zdGF0ZSB7CisKKwkvKiBwaHlzaWNhbCBwcm9wZXJ0aWVzICovCisKKwllbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uOwkvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqLworCWludAkJIGhlYWRfbnVtYmVyOwkvKiBzaW5nbGUtIG9yIGRvdWJsZS1zaWRlZCBkcml2ZSAqLworCisJLyogbWVkaWEgKi8KKworCWludAkJIGRpc2tfaW47CisJaW50CQkgZWplY3RlZDsKKwllbnVtIG1lZGlhX3R5cGUJIHR5cGU7CisJaW50CQkgd3JpdGVfcHJvdGVjdGVkOworCisJaW50CQkgdG90YWxfc2VjczsKKwlpbnQJCSBzZWNwZXJjeWw7CisJaW50CQkgc2VjcGVydHJhY2s7CisKKwkvKiBpbi11c2UgaW5mb3JtYXRpb24gKi8KKworCWludAkJdHJhY2s7CisJaW50CQlyZWZfY291bnQ7CisKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKworCS8qIHBhcmVudCBjb250cm9sbGVyICovCisKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2Q7Cit9OworCitlbnVtIG1vdG9yX2FjdGlvbiB7CisJT0ZGLAorCU9OLAorfTsKKworZW51bSBoZWFkIHsKKwlMT1dFUl9IRUFEID0gMCwKKwlVUFBFUl9IRUFEID0gMSwKK307CisKKyNkZWZpbmUgRkRfTUFYX1VOSVQJMgorCitzdHJ1Y3Qgc3dpbV9wcml2IHsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CisJaW50IGZsb3BweV9jb3VudDsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdOworfTsKKworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJCSAgIHN0cnVjdCBzZWN0b3JfaGVhZGVyICpoZWFkZXIpOworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpCit7CisJc3RydWN0IGl3bSBfX2lvbWVtICppd21fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFlbmFibGUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMHhmOCk7CisJCXJldHVybjsKKwl9CisKKwlpd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBtdHJPZmYpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpOworCisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDE3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHg1Nyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjUpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjUpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjYpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjYpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjcpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjcpCisJCWdvdG8gaXNfaXdtOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMTsKK2lzX2l3bToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKQoreworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTsKKworCXZpYTFfc2V0X2hlYWQoc2VsICYgMHgxMDApOworCisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsICYgQ0FfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBhY3Rpb24pOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgTFNUUkIpOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgKCh+TFNUUkIpICYgMHgwRikpOworCXVkZWxheSgxKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpCit7CisJaW50IHN0YXQ7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBiaXQpOworCisJdWRlbGF5KDEwKTsKKworCXN0YXQgPSBzd2ltX3JlYWQoYmFzZSwgaGFuZHNoYWtlKTsKKworCXJldHVybiAoc3RhdCAmIFNFTlNFKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKK3sKKwlpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqLworCX0gZWxzZSBpZiAobG9jYXRpb24gPT0gRVhURVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAwIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBFWFRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAxIGJpdCAqLworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCSAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbikKK3sKKwlpZiAoYWN0aW9uID09IE9OKSB7CisJCWludCBpOworCisJCXN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMipIWjsgaSsrKSB7CisJCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIE1PVE9SX09OKSkKKwkJCQlicmVhazsKKwkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJfQorCX0gZWxzZSBpZiAoYWN0aW9uID09IE9GRikgeworCQlzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PRkYpOworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCBpOworCisJc3dpbV9hY3Rpb24oYmFzZSwgRUpFQ1QpOworCisJZm9yIChpID0gMDsgaSA8IDIqSFo7IGkrKykgeworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKQorCQkJYnJlYWs7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0KKwlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2hlYWQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgZW51bSBoZWFkIGhlYWQpCit7CisJLyogd2FpdCBkcml2ZSBpcyByZWFkeSAqLworCisJaWYgKGhlYWQgPT0gVVBQRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzEpOworCWVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgd2FpdDsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNURVApOworCisJZm9yICh3YWl0ID0gMDsgd2FpdCA8IEhaOyB3YWl0KyspIHsKKworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIFNURVApKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjazAwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IHRyeTsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCisJZm9yICh0cnkgPSAwOyB0cnkgPCAxMDA7IHRyeSsrKSB7CisKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQkJYnJlYWs7CisKKwkJaWYgKHN3aW1fc3RlcChiYXNlKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKQoreworCWlmIChzdGVwID09IDApCisJCXJldHVybiAwOworCisJaWYgKHN0ZXAgPCAwKSB7CisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCQlzdGVwID0gLXN0ZXA7CisJfSBlbHNlCisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfUE9TSVRJVkUpOworCisJZm9yICggOyBzdGVwID4gMDsgc3RlcC0tKSB7CisJCWlmIChzd2ltX3N0ZXAoYmFzZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IHJldDsKKworCXJldCA9IHN3aW1fc2VlayhiYXNlLCB0cmFjayAtIGZzLT50cmFjayk7CisKKwlpZiAocmV0ID09IDApCisJCWZzLT50cmFjayA9IHRyYWNrOworCWVsc2UgeworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisJCWZzLT50cmFjayA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCXN3aW1fZWplY3QoYmFzZSk7CisKKwlmcy0+ZGlza19pbiA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZF9zZWN0b3Ioc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsCisJCQkJICAgaW50IHNpZGUsIGludCB0cmFjaywKKwkJCQkgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2VjdG9yX2hlYWRlciBoZWFkZXI7CisJaW50IHJldCA9IC0xOworCXNob3J0IGk7CisKKwlzd2ltX3RyYWNrKGZzLCB0cmFjayk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7CisJc3dpbV9oZWFkKGJhc2UsIHNpZGUpOworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIHNpZGUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCAzNjsgaSsrKSB7CisJCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsICZoZWFkZXIpOworCQlpZiAoIXJldCAmJiAoaGVhZGVyLnNlY3RvciA9PSBzZWN0b3IpKSB7CisJCQkvKiBmb3VuZCAqLworCisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoYmFzZSwgYnVmZmVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTsKKworCWlmICgoaGVhZGVyLnNpZGUgIT0gc2lkZSkgIHx8IChoZWFkZXIudHJhY2sgIT0gdHJhY2spIHx8CisJICAgICAoaGVhZGVyLnNlY3RvciAhPSBzZWN0b3IpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlYWRfc2VjdG9ycyhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKKwkJCSAgICAgICBpbnQgcmVxX3NlY3RvciwgaW50IHNlY3RvcnNfbmIsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCByZXQ7CisJaW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7CisJaW50IGksIHRyeTsKKworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCWZvciAoaSA9IHJlcV9zZWN0b3I7IGkgPCByZXFfc2VjdG9yICsgc2VjdG9yc19uYjsgaSsrKSB7CisJCWludCB4OworCQl0cmFjayA9IGkgLyBmcy0+c2VjcGVyY3lsOworCQl4ID0gaSAlIGZzLT5zZWNwZXJjeWw7CisJCXNpZGUgPSB4IC8gZnMtPnNlY3BlcnRyYWNrOworCQlzZWN0b3IgPSB4ICUgZnMtPnNlY3BlcnRyYWNrICsgMTsKKworCQl0cnkgPSA1OworCQlkbyB7CisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yKGZzLCBzaWRlLCB0cmFjaywgc2VjdG9yLAorCQkJCQkJYnVmZmVyKTsKKwkJCWlmICh0cnktLSA9PSAwKQorCQkJCXJldHVybiAtMTsKKwkJfSB3aGlsZSAocmV0ICE9IDUxMik7CisKKwkJYnVmZmVyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnM7CisKKwl3aGlsZSAoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSkpKSB7CisKKwkJZnMgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKKwkJaWYgKHJlcS0+c2VjdG9yIDwgMCB8fCByZXEtPnNlY3RvciA+PSBmcy0+dG90YWxfc2VjcykgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9PSAwKSB7CisJCQllbmRfcmVxdWVzdChyZXEsIDEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmcy0+ZGlza19pbikgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CisJCQlpZiAoZnMtPndyaXRlX3Byb3RlY3RlZCkgeworCQkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CisJCWNhc2UgV1JJVEU6CisJCQkvKiBOT1QgSU1QTEVNRU5URUQgKi8KKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEOgorCQkJaWYgKGZsb3BweV9yZWFkX3NlY3RvcnMoZnMsIHJlcS0+c2VjdG9yLAorCQkJCQkJcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsCisJCQkJCQlyZXEtPmJ1ZmZlcikpIHsKKwkJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmVxLT5ucl9zZWN0b3JzIC09IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCQkJcmVxLT5zZWN0b3IgKz0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCQlyZXEtPmJ1ZmZlciArPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyAqIDUxMjsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlyZWRvX2ZkX3JlcXVlc3QocSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmbG9wcHlfdHlwZVs0XSA9IHsKKwl7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICAgKi8KKwl7ICA3MjAsICA5LCAxLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiAzNjBLQiBTUyAzLjUiKi8KKwl7IDE0NDAsICA5LCAyLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiA3MjBLQiAzLjUiICAgKi8KKwl7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41IiAgKi8KK307CisKK3N0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsCisJCQkgICAgICAgc3RydWN0IGZsb3BweV9zdHJ1Y3QgKipnKQoreworCWlmICh0eXBlID49IEFSUkFZX1NJWkUoZmxvcHB5X3R5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlKQorCQkqZyA9ICZmbG9wcHlfdHlwZVt0eXBlXTsKKwllbHNlIGlmIChmcy0+dHlwZSA9PSBIRF9NRURJQSkgLyogSGlnaC1EZW5zaXR5IG1lZGlhICovCisJCSpnID0gJmZsb3BweV90eXBlWzNdOworCWVsc2UgaWYgKGZzLT5oZWFkX251bWJlciA9PSAyKSAvKiBkb3VibGUtc2lkZWQgKi8KKwkJKmcgPSAmZmxvcHB5X3R5cGVbMl07CisJZWxzZQorCQkqZyA9ICZmbG9wcHlfdHlwZVsxXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9tZWRpdW0oc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKSB7CisJCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpnOworCQlmcy0+ZGlza19pbiA9IDE7CisJCWZzLT53cml0ZV9wcm90ZWN0ZWQgPSBzd2ltX3JlYWRiaXQoYmFzZSwgV1JJVEVfUFJPVCk7CisJCWZzLT50eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19NRURJQSk7CisKKwkJaWYgKHN3aW1fdHJhY2swMChiYXNlKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJTV0lNOiBjYW5ub3QgbW92ZSBmbG9wcHkgaGVhZCB0byB0cmFjayAwXG4iKTsKKworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisKKwkJZ2V0X2Zsb3BweV9nZW9tZXRyeShmcywgMCwgJmcpOworCQlmcy0+dG90YWxfc2VjcyA9IGctPnNpemU7CisJCWZzLT5zZWNwZXJjeWwgPSBnLT5oZWFkICogZy0+c2VjdDsKKwkJZnMtPnNlY3BlcnRyYWNrID0gZy0+c2VjdDsKKwkJZnMtPnRyYWNrID0gMDsKKwl9IGVsc2UgeworCQlmcy0+ZGlza19pbiA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgZXJyOworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgKGZzLT5yZWZfY291bnQgJiYgbW9kZSAmIEZNT0RFX0VYQ0wpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKG1vZGUgJiBGTU9ERV9FWENMKQorCQlmcy0+cmVmX2NvdW50ID0gLTE7CisJZWxzZQorCQlmcy0+cmVmX2NvdW50Kys7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHNldHVwLCBTX0lCTV9EUklWRSAgfCBTX0ZDTEtfRElWMik7CisJdWRlbGF5KDEwKTsKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlzd2ltX21vdG9yKGJhc2UsIE9OKTsKKwlzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pOworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKwlpZiAoIWZzLT5kaXNrX2luKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1vZGUgJiBGTU9ERV9OREVMQVkpCisJCXJldHVybiAwOworCisJaWYgKG1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpIHsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBmcy0+d3JpdGVfcHJvdGVjdGVkKSB7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK291dDoKKwlpZiAoZnMtPnJlZl9jb3VudCA8IDApCisJCWZzLT5yZWZfY291bnQgPSAwOworCWVsc2UgaWYgKGZzLT5yZWZfY291bnQgPiAwKQorCQktLWZzLT5yZWZfY291bnQ7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA9PSAwKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJaWYgKGZzLT5yZWZfY291bnQgPCAwKQorCQlmcy0+cmVmX2NvdW50ID0gMDsKKwllbHNlIGlmIChmcy0+cmVmX2NvdW50ID4gMCkKKwkJLS1mcy0+cmVmX2NvdW50OworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWlmICgoY21kICYgMHg4MCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZERUpFQ1Q6CisJCWlmIChmcy0+cmVmX2NvdW50ICE9IDEpCisJCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSBmbG9wcHlfZWplY3QoZnMpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBGREdFVFBSTToKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgcGFyYW0sICh2b2lkICopICZmbG9wcHlfdHlwZSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBmbG9wcHlfc3RydWN0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiU1dJTSBmbG9wcHlfaW9jdGw6IHVua25vd24gY21kICVkXG4iLAorCQkgICAgICAgY21kKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CisJaW50IHJldDsKKworCXJldCA9IGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsICZnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2VvLT5oZWFkcyA9IGctPmhlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZy0+c2VjdDsKKwlnZW8tPmN5bGluZGVycyA9IGctPnRyYWNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+ZWplY3RlZDsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmV2YWxpZGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKworCWlmICghZnMtPmRpc2tfaW4pCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwllbHNlCisJCWZzLT5lamVjdGVkID0gMDsKKworCXJldHVybiAhZnMtPmRpc2tfaW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CisJLm93bmVyCQkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkJID0gZmxvcHB5X29wZW4sCisJLnJlbGVhc2UJID0gZmxvcHB5X3JlbGVhc2UsCisJLmxvY2tlZF9pb2N0bAkgPSBmbG9wcHlfaW9jdGwsCisJLmdldGdlbwkJID0gZmxvcHB5X2dldGdlbywKKwkubWVkaWFfY2hhbmdlZAkgPSBmbG9wcHlfY2hlY2tfY2hhbmdlLAorCS5yZXZhbGlkYXRlX2Rpc2sgPSBmbG9wcHlfcmV2YWxpZGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZmxvcHB5X2ZpbmQoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gZGF0YTsKKwlpbnQgZHJpdmUgPSAoKnBhcnQgJiAzKTsKKworCWlmIChkcml2ZSA+IHN3ZC0+ZmxvcHB5X2NvdW50KQorCQlyZXR1cm4gTlVMTDsKKworCSpwYXJ0ID0gMDsKKwlyZXR1cm4gZ2V0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwKKwkJCQkgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSAmc3dkLT51bml0W3N3ZC0+ZmxvcHB5X2NvdW50XTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJZnMtPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTsKKworCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSkKKwkJZnMtPmhlYWRfbnVtYmVyID0gMTsKKwllbHNlCisJCWZzLT5oZWFkX251bWJlciA9IDI7CisJZnMtPnJlZl9jb3VudCA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJc3dkLT5mbG9wcHlfY291bnQrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX2Zsb3BweV9pbml0KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCkKK3sKKwlpbnQgZXJyOworCWludCBkcml2ZTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJLyogc2NhbiBmbG9wcHkgZHJpdmVzICovCisKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpKQorCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBJTlRFUk5BTF9EUklWRSk7CisJc3dpbV9kcml2ZShiYXNlLCBFWFRFUk5BTF9EUklWRSk7CisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSkKKwkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpOworCisJLyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqLworCisJZXJyID0gcmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIFNXSU0gZmxvcHB5XG4iLAorCQkgICAgICAgRkxPUFBZX01BSk9SKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2sgPSBhbGxvY19kaXNrKDEpOworCQlpZiAoc3dkLT51bml0W2RyaXZlXS5kaXNrID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcHV0X2Rpc2tzOworCQl9CisJCXN3ZC0+dW5pdFtkcml2ZV0uc3dkID0gc3dkOworCX0KKworCXN3ZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmc3dkLT5sb2NrKTsKKwlpZiAoIXN3ZC0+cXVldWUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3B1dF9kaXNrczsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPm1ham9yID0gRkxPUFBZX01BSk9SOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CisJCXNwcmludGYoc3dkLT51bml0W2RyaXZlXS5kaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgZHJpdmUpOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnN3ZC0+dW5pdFtkcml2ZV07CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cXVldWUgPSBzd2QtPnF1ZXVlOworCQlzZXRfY2FwYWNpdHkoc3dkLT51bml0W2RyaXZlXS5kaXNrLCAyODgwKTsKKwkJYWRkX2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwl9CisKKwlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1NiwgVEhJU19NT0RVTEUsCisJCQkgICAgZmxvcHB5X2ZpbmQsIE5VTEwsIHN3ZCk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9wdXRfZGlza3M6CisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKwl3aGlsZSAoZHJpdmUtLSkKKwkJcHV0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpzd2ltX2Jhc2U7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIENBUkROQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXN3aW1fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXN3aW1fYmFzZSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZV9pbzsKKwl9CisKKwkvKiBwcm9iZSBkZXZpY2UgKi8KKworCXNldF9zd2ltX21vZGUoc3dpbV9iYXNlLCAxKTsKKwlpZiAoIWdldF9zd2ltX21vZGUoc3dpbV9iYXNlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJTV0lNIGRldmljZSBub3QgZm91bmQgIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJLyogc2V0IHBsYXRmb3JtIGRyaXZlciBkYXRhICovCisKKwlzd2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3dpbV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzd2QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzd2QpOworCisJc3dkLT5iYXNlID0gc3dpbV9iYXNlOworCisJcmV0ID0gc3dpbV9mbG9wcHlfaW5pdChzd2QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2tmcmVlOworCisJcmV0dXJuIDA7CisKK291dF9rZnJlZToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKHN3aW1fYmFzZSk7CitvdXRfcmVsZWFzZV9pbzoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZHJpdmU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2KTsKKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7CisJCWRlbF9nZW5kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJCXB1dF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJfQorCisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKworCWJsa19jbGVhbnVwX3F1ZXVlKHN3ZC0+cXVldWUpOworCisJLyogZWplY3QgZmxvcHBpZXMgKi8KKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKQorCQlmbG9wcHlfZWplY3QoJnN3ZC0+dW5pdFtkcml2ZV0pOworCisJaW91bm1hcChzd2QtPmJhc2UpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7CisJLnByb2JlICA9IHN3aW1fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHN3aW1fcmVtb3ZlKSwKKwkuZHJpdmVyICAgPSB7CisJCS5uYW1lCT0gQ0FSRE5BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzd2ltX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJTV0lNIGZsb3BweSBkcml2ZXIgJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN3aW1fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHN3aW1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzd2ltX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3dpbV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc3dpbV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhdXJlbnQgVml2aWVyIDxsYXVyZW50QGx2aXZpZXIuaW5mbz4iKTsKK01PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihGTE9QUFlfTUFKT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjY4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBsb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlcgorICoKKyAqIG5lZWRzIGFzc2VtYmx5IGxhbmd1YWdlIGJlY2F1c2UgaXMgdmVyeSB0aW1pbmcgZGVwZW5kZW50CisgKiB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzIG9ubHkgb24gbWFjaW50b3NoIDY4MHgwIGJhc2VkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTExLTA1IChsdikgLSBhZGQgZ2V0X3N3aW1fbW9kZQorICovCisKKwkuZXF1CXdyaXRlX2RhdGEsCTB4MDAwMAorCS5lcXUJd3JpdGVfbWFyaywJMHgwMjAwCisJLmVxdQl3cml0ZV9DUkMsCTB4MDQwMAorCS5lcXUJd3JpdGVfcGFyYW1ldGVyLDB4MDYwMAorCS5lcXUJd3JpdGVfcGhhc2UsCTB4MDgwMAorCS5lcXUJd3JpdGVfc2V0dXAsCTB4MGEwMAorCS5lcXUJd3JpdGVfbW9kZTAsCTB4MGMwMAorCS5lcXUJd3JpdGVfbW9kZTEsCTB4MGUwMAorCS5lcXUJcmVhZF9kYXRhLAkweDEwMDAKKwkuZXF1CXJlYWRfbWFyaywJMHgxMjAwCisJLmVxdQlyZWFkX2Vycm9yLAkweDE0MDAKKwkuZXF1CXJlYWRfcGFyYW1ldGVyLAkweDE2MDAKKwkuZXF1CXJlYWRfcGhhc2UsCTB4MTgwMAorCS5lcXUJcmVhZF9zZXR1cCwJMHgxYTAwCisJLmVxdQlyZWFkX3N0YXR1cywJMHgxYzAwCisJLmVxdQlyZWFkX2hhbmRzaGFrZSwJMHgxZTAwCisKKwkuZXF1CW9fc2lkZSwgMAorCS5lcXUJb190cmFjaywgMQorCS5lcXUJb19zZWN0b3IsIDIKKwkuZXF1CW9fc2l6ZSwgMworCS5lcXUJb19jcmMwLCA0CisJLmVxdQlvX2NyYzEsIDUKKworCS5lcXUJc2Vla190aW1lLCAzMDAwMAorCS5lcXUJbWF4X3JldHJ5LCA0MAorCS5lcXUJc2VjdG9yX3NpemUsIDUxMgorCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcgorc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXI6CisJbGluawklYTYsICMwCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhNCwlc3BALQorCW1vdmVsCSVhNkAoMHgwYyksICVhNAorCWJzcgltZm1fcmVhZF9hZGRybWFyaworCW1vdmVtbAklc3BAKywgJWQxLSVkNS8lYTAtJWE0CisJdW5sawklYTYKKwlydHMKKworc2VjdG9yX2FkZHJlc3NfbWFyazoKKwkuYnl0ZQkweGExLCAweGExLCAweGExLCAweGZlCitzZWN0b3JfZGF0YV9tYXJrOgorCS5ieXRlCTB4YTEsIDB4YTEsIDB4YTEsIDB4ZmIKKworbWZtX3JlYWRfYWRkcm1hcms6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3ZlcQkjLTEsICVkMAorCW1vdmV3CSNzZWVrX3RpbWUsICVkMgorCit3YWl0X2hlYWRlcl9pbml0OgorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCisJbGVhCXNlY3Rvcl9hZGRyZXNzX21hcmssICVhMAorCW1vdmVxCSMzLCAlZDEKKword2FpdF9hZGRyX21hcmtfYnl0ZToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCB3YWl0X2FkZHJfbWFya19ieXRlCisJYnBsCWhlYWRlcl9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZQorCWJuZQl3YWl0X2hlYWRlcl9pbml0CisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmswOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmswCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3RyYWNrKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMToJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zaWRlKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMjoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMgorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zZWN0b3IpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmszOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmszCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3NpemUpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworY3JjMDoJdHN0YgklYTJACisJZGJtaQklZDIsIGNyYzAKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fY3JjMCkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitjcmMxOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgY3JjMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19jcmMxKQorCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKK2hlYWRlcl9leGl0OgorCW1vdmVxCSMwLCAlZDAKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwlydHMKK3NpZ25hbF9ub255YjoKKwltb3ZlcQkjLTEsICVkMAorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXJ0cworCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEKK3N3aW1fcmVhZF9zZWN0b3JfZGF0YToKKwlsaW5rCSVhNiwgIzAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWE1LCVzcEAtCisJbW92ZWwJJWE2QCgweDBjKSwgJWE0CisJYnNyCW1mbV9yZWFkX2RhdGEKKwltb3ZlbWwJJXNwQCssICVkMS0lZDUvJWEwLSVhNQorCXVubGsJJWE2CisJcnRzCisKK21mbV9yZWFkX2RhdGE6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX2RhdGEpLCAlYTUKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3Zldwkjc2Vla190aW1lLCAlZDIKKword2FpdF9kYXRhX2luaXQ6CisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisKKwlsZWEJc2VjdG9yX2RhdGFfbWFyaywgJWEwCisJbW92ZXEJIzMsICVkMQorCisJLyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqLworCit3YWl0X2RhdGFfbWFya19ieXRlOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIHdhaXRfZGF0YV9tYXJrX2J5dGUKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9kYXRhX21hcmtfYnl0ZQorCWJuZQl3YWl0X2RhdGFfaW5pdAorCisJLyogcmVhZCBkYXRhICovCisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworCW1vdmVsCSNzZWN0b3Jfc2l6ZS0xLCAlZDQJCS8qIHNlY3RvciBzaXplICovCityZWFkX25ld19kYXRhOgorCW1vdmV3CSNtYXhfcmV0cnksICVkMgorcmVhZF9kYXRhX2xvb3A6CisJbW92ZWIJJWEyQCwgJWQ1CisJYW5kYgkjMHhjMCwgJWQ1CisJZGJuZQklZDIsIHJlYWRfZGF0YV9sb29wCisJYmVxCWRhdGFfZXhpdAorCW1vdmViCSVhNUAsICVhNEArCisJYW5kYgkjMHg0MCwgJWQ1CisJZGJuZQklZDQsIHJlYWRfbmV3X2RhdGEKKwliZXEJZXhpdF9sb29wCisJbW92ZWIJJWE1QCwgJWE0QCsKKwlkYnJhCSVkNCwgcmVhZF9uZXdfZGF0YQorZXhpdF9sb29wOgorCisJLyogcmVhZCBDUkMgKi8KKworCW1vdmV3CSNtYXhfcmV0cnksICVkMgorZGF0YV9jcmMwOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIGRhdGFfY3JjMAorCWJwbAlkYXRhX2V4aXQKKworCW1vdmViCSVhM0AsICVkNQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2RhdGFfY3JjMToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCBkYXRhX2NyYzEKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDUKKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisKKwkvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KKworCW1vdmVsCSNzZWN0b3Jfc2l6ZSwgJWQwCisJYWRkdwkjMSwgJWQ0CisJc3VibAklZDQsICVkMAorCXJ0cworZGF0YV9leGl0OgorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmVxCSMtMSwgJWQwCisJcnRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggMTJmYjgxNi4uNjliN2Y4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLSNkZWZpbmUgdWJfdXNiX2lkcyAgc3RvcmFnZV91c2JfaWRzCisjZGVmaW5lIHViX3VzYl9pZHMgIHVzYl9zdG9yYWdlX3VzYl9pZHMKICNlbHNlCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1Yl91c2JfaWRzW10gPSB7CkBAIC0yMTQ2LDEwICsyMTQ2LDkgQEAKIAkJZXAgPSAmYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYzsKIAogCQkvKiBJcyBpdCBhIEJVTEsgZW5kcG9pbnQ/ICovCi0JCWlmICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXApKSB7CiAJCQkvKiBCVUxLIGluIG9yIG91dD8gKi8KLQkJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkgewogCQkJCWlmIChlcF9pbiA9PSBOVUxMKQogCQkJCQllcF9pbiA9IGVwOwogCQkJfSBlbHNlIHsKQEAgLTIxNjgsOSArMjE2Nyw5IEBACiAJc2MtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAlzYy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCmluZGV4IGQzZjE0YmUuLjJhMDA3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwpAQCAtMjU3LDggKzI1Nyw3IEBACiAKIAlpZiAoaGRyICYgMHgxMCkgewogCQlCVF9FUlIoIiVzIGVycm9yIGluIGJsb2NrIiwgZGF0YS0+aGRldi0+bmFtZSk7Ci0JCWlmIChkYXRhLT5yZWFzc2VtYmx5KQotCQkJa2ZyZWVfc2tiKGRhdGEtPnJlYXNzZW1ibHkpOworCQlrZnJlZV9za2IoZGF0YS0+cmVhc3NlbWJseSk7CiAJCWRhdGEtPnJlYXNzZW1ibHkgPSBOVUxMOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggZmYxOTVjMi4uZDU4ZTIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtMzU5LDkgKzM1OSw5IEBACiAJCQlCVF9FUlIoIlZlcnkgc3RyYW5nZSAoc3RhdD0weCUwNHgpIiwgc3RhdCk7CiAJCX0gZWxzZSBpZiAoKHN0YXQgJiAweGZmKSAhPSAweGZmKSB7CiAJCQlpZiAoc3RhdCAmIDB4MDAyMCkgewotCQkJCWludCBzdGF0ID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDAyKSAmIDB4MTA7CisJCQkJaW50IHN0YXR1cyA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwMikgJiAweDEwOwogCQkJCUJUX0lORk8oIiVzOiBBbnRlbm5hICVzIiwgaW5mby0+aGRldi0+bmFtZSwKLQkJCQkJCQlzdGF0ID8gIm91dCIgOiAiaW4iKTsKKwkJCQkJCQlzdGF0dXMgPyAib3V0IiA6ICJpbiIpOwogCQkJfQogCQkJaWYgKHN0YXQgJiAweDAwMDEpCiAJCQkJYnQzY19yZWNlaXZlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggYjVmYmRhNi4uZTcwYzU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40IgorI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKIHN0YXRpYyBpbnQgaWdub3JlX2RnYTsKIHN0YXRpYyBpbnQgaWdub3JlX2NzcjsKQEAgLTE3MSw2ICsxNzEsNyBAQAogCiAJX191OCBjbWRyZXFfdHlwZTsKIAorCXVuc2lnbmVkIGludCBzY29fbnVtOwogCWludCBpc29jX2FsdHNldHRpbmc7CiAJaW50IHN1c3BlbmRfY291bnQ7CiB9OwpAQCAtNDk2LDExICs0OTcsMjMgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBidHVzYl9zdWJtaXRfaW50cl91cmIoaGRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbGVkOworCisJZXJyID0gYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9LRVJORUwpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aW50cl9hbmNob3IpOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlzZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKKwlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CisJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY1NSwxOSArNjY4LDEwIEBACiAKIAlCVF9EQkcoIiVzIGV2dCAlZCIsIGhkZXYtPm5hbWUsIGV2dCk7CiAKLQlpZiAoaGRldi0+Y29ubl9oYXNoLmFjbF9udW0gPiAwKSB7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKLQkJCWlmIChidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0FUT01JQykgPCAwKQotCQkJCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCQllbHNlCi0JCQkJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9BVE9NSUMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJdXNiX3VubGlua19hbmNob3JlZF91cmJzKCZkYXRhLT5idWxrX2FuY2hvcik7CisJaWYgKGhkZXYtPmNvbm5faGFzaC5zY29fbnVtICE9IGRhdGEtPnNjb19udW0pIHsKKwkJZGF0YS0+c2NvX251bSA9IGhkZXYtPmNvbm5faGFzaC5zY29fbnVtOworCQlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKIAl9Ci0KLQlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKIH0KIAogc3RhdGljIGludCBpbmxpbmUgX19zZXRfaXNvY19pbnRlcmZhY2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBhbHRzZXR0aW5nKQpAQCAtOTgyLDkgKzk4NiwxMSBAQAogCX0KIAogCWlmICh0ZXN0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKLQkJaWYgKGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTykgPCAwKQorCQllcnIgPSBidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOworCQlpZiAoZXJyIDwgMCkgewogCQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJZWxzZQorCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCiAJCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwppbmRleCBiMGZhZmIwLi5jMGNlODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwpAQCAtMTAyLDggKzEwMiw3IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmg0LT50eHEpOwogCi0JaWYgKGg0LT5yeF9za2IpCi0JCWtmcmVlX3NrYihoNC0+cnhfc2tiKTsKKwlrZnJlZV9za2IoaDQtPnJ4X3NrYik7CiAKIAlodS0+cHJpdiA9IE5VTEw7CiAJa2ZyZWUoaDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwppbmRleCBiOTFkNDVhLi41YzY1MDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwpAQCAtMTYzLDggKzE2Myw3IEBACiAJc2tiX3F1ZXVlX3B1cmdlKCZsbC0+dHhfd2FpdF9xKTsKIAlza2JfcXVldWVfcHVyZ2UoJmxsLT50eHEpOwogCi0JaWYgKGxsLT5yeF9za2IpCi0JCWtmcmVlX3NrYihsbC0+cnhfc2tiKTsKKwlrZnJlZV9za2IobGwtPnJ4X3NrYik7CiAKIAlodS0+cHJpdiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDQzNzNhZGIuLjlkOTQ5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMjYsNiArMjYsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNRV9JRyAgICAgMHgyQTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHTUVfSEIgICAgIDB4MjdBQwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01FX0lHICAgICAweDI3QUUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHTV9IQiAgICAgICAgMHhBMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER01fSUcgICAgICAgIDB4QTAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIgICAgICAgICAweEEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0lHICAgICAgICAgMHhBMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRzMzX0hCICAgICAgICAgIDB4MjlDMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0czM19JRyAgICAgICAgICAweDI5QzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9RMzVfSEIgICAgICAgICAgMHgyOUIwCkBAIC02MCw3ICs2NCwxMiBAQAogCiAjZGVmaW5lIElTX0czMyAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HMzNfSEIgfHwgXAogCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzNV9IQiB8fCBcCi0JCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfUTMzX0hCKQorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19IQiB8fCBcCisJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER01fSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIpCisKKyNkZWZpbmUgSVNfSUdEIChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0hCKQogCiAjZGVmaW5lIElTX0c0WCAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0hCIHx8IFwKQEAgLTUxMCw3ICs1MTksNyBAQAogCQkJc2l6ZSA9IDUxMjsKIAkJfQogCQlzaXplICs9IDQ7IC8qIGFkZCBpbiBCSU9TIHBvcHVwIHNwYWNlICovCi0JfSBlbHNlIGlmIChJU19HMzMpIHsKKwl9IGVsc2UgaWYgKElTX0czMyAmJiAhSVNfSUdEKSB7CiAJLyogRzMzJ3MgR1RUIHNpemUgZGVmaW5lZCBpbiBnbWNoX2N0cmwgKi8KIAkJc3dpdGNoIChnbWNoX2N0cmwgJiBHMzNfUEdFVEJMX1NJWkVfTUFTSykgewogCQljYXNlIEczM19QR0VUQkxfU0laRV8xTToKQEAgLTUyNiw3ICs1MzUsNyBAQAogCQkJc2l6ZSA9IDUxMjsKIAkJfQogCQlzaXplICs9IDQ7Ci0JfSBlbHNlIGlmIChJU19HNFgpIHsKKwl9IGVsc2UgaWYgKElTX0c0WCB8fCBJU19JR0QpIHsKIAkJLyogT24gNCBzZXJpZXMgaGFyZHdhcmUsIEdUVCBzdG9sZW4gaXMgc2VwYXJhdGUgZnJvbSBncmFwaGljcwogCQkgKiBzdG9sZW4sIGlnbm9yZSBpdCBpbiBzdG9sZW4gZ3R0IGVudHJpZXMgY291bnRpbmcuICBIb3dldmVyLAogCQkgKiA0S0Igb2YgdGhlIHN0b2xlbiBtZW1vcnkgZG9lc24ndCBnZXQgbWFwcGVkIHRvIHRoZSBHVFQuCkBAIC0yMTYxLDYgKzIxNzAsMTAgQEAKIAkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUTMzX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19JRywgMCwgIlEzMyIsCiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0lHLCAwLCAiSUdEIiwKKwkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER19IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0lHLCAwLCAiSUdEIiwKKwkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfR000NV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0lHLCAwLAogCSAgICAiTW9iaWxlIEludGVswq4gR000NSBFeHByZXNzIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRF9FX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRF9FX0lHLCAwLApAQCAtMjM1NSw2ICsyMzY4LDggQEAKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R19IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNX0hCKSwKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01FX0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDZHWl9IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84MkczNV9IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NVFfSEIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCBhNTM0OTY4Li41NDQ4MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMTMsMTAgKzEzLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxuZXQvaXVjdi9pdWN2Lmg+CkBAIC05NSw2ICs5NiwxMiBAQAogLyogQXJyYXkgb2YgYWxsb2NhdGVkIGh2YyBpdWN2IHR0eSBsaW5lcy4uLiAqLwogc3RhdGljIHN0cnVjdCBodmNfaXVjdl9wcml2YXRlICpodmNfaXVjdl90YWJsZVtNQVhfSFZDX0lVQ1ZfTElORVNdOwogI2RlZmluZSBJVUNWX0hWQ19DT05fSURYCSgwKQorLyogTGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMgKHN0cnVjdCBpdWN2X3ZtaWRfZmlsdGVyKSAqLworI2RlZmluZSBNQVhfVk1JRF9GSUxURVIJCSg1MDApCitzdGF0aWMgc2l6ZV90IGh2Y19pdWN2X2ZpbHRlcl9zaXplOworc3RhdGljIHZvaWQgKmh2Y19pdWN2X2ZpbHRlcjsKK3N0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9maWx0ZXJfc3RyaW5nOworc3RhdGljIERFRklORV9SV0xPQ0soaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOwogCiAvKiBLbWVtIGNhY2hlIGFuZCBtZW1wb29sIGZvciBpdWN2X3R0eV9idWZmZXIgZWxlbWVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlOwpAQCAtNjE4LDYgKzYyNSwyNyBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKCkgLSBGaWx0ZXIgY29ubmVjdGlvbiByZXF1ZXN0IGJhc2VkIG9uIHovVk0gdXNlciBJRAorICogQGlwdm1pZDoJT3JpZ2luYXRpbmcgei9WTSB1c2VyIElEIChyaWdodCBwYWRkZWQgd2l0aCBibGFua3MpCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB6L1ZNIHVzZXIgSUQgQGlwdm1pZCBpcyBhbGxvd2VkIHRvIGNvbm5lY3Rpb24sIG90aGVyd2lzZQorICogbm9uLXplcm8uCisgKi8KK3N0YXRpYyBpbnQgaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEodTggaXB2bWlkWzhdKQoreworCXNpemVfdCBpOworCisJLyogTm90ZTogZGVmYXVsdCBwb2xpY3kgaXMgQUNDRVBUIGlmIG5vIGZpbHRlciBpcyBzZXQgKi8KKwlpZiAoIWh2Y19pdWN2X2ZpbHRlcl9zaXplKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaSsrKQorCQlpZiAoMCA9PSBtZW1jbXAoaXB2bWlkLCBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGkpLCA4KSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKICAqIGh2Y19pdWN2X3BhdGhfcGVuZGluZygpIC0gSVVDViBoYW5kbGVyIHRvIHByb2Nlc3MgYSBjb25uZWN0aW9uIHJlcXVlc3QuCiAgKiBAcGF0aDoJUGVuZGluZyBwYXRoIChzdHJ1Y3QgaXVjdl9wYXRoKQogICogQGlwdm1pZDoJei9WTSBzeXN0ZW0gaWRlbnRpZmllciBvZiBvcmlnaW5hdG9yCkBAIC02NDEsNiArNjY5LDcgQEAKIHsKIAlzdHJ1Y3QgaHZjX2l1Y3ZfcHJpdmF0ZSAqcHJpdjsKIAl1OCBudXNlcl9kYXRhWzE2XTsKKwl1OCB2bV91c2VyX2lkWzldOwogCWludCBpLCByYzsKIAogCXByaXYgPSBOVUxMOwpAQCAtNjUzLDYgKzY4MiwyMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBFbmZvcmNlIHRoYXQgaXB2bWlkIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB1cyAqLworCXJlYWRfbG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCXJjID0gaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEoaXB2bWlkKTsKKwlyZWFkX3VubG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykgeworCQlpdWN2X3BhdGhfc2V2ZXIocGF0aCwgaXB1c2VyKTsKKwkJaXVjdl9wYXRoX2ZyZWUocGF0aCk7CisJCW1lbWNweSh2bV91c2VyX2lkLCBpcHZtaWQsIDgpOworCQl2bV91c2VyX2lkWzhdID0gMDsKKwkJcHJfaW5mbygiQSBjb25uZWN0aW9uIHJlcXVlc3QgZnJvbSB6L1ZNIHVzZXIgSUQgJXMgIgorCQkJIndhcyByZWZ1c2VkXG4iLCB2bV91c2VyX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCS8qIElmIHRoZSB0ZXJtaW5hbCBpcyBhbHJlYWR5IGNvbm5lY3RlZCBvciBiZWluZyBzZXZlcmVkLCB0aGVuIHNldmVyCkBAIC04NzcsNiArOTIwLDE3MSBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X3BhcnNlX2ZpbHRlcigpIC0gUGFyc2UgZmlsdGVyIGZvciBhIHNpbmdsZSB6L1ZNIHVzZXIgSUQKKyAqIEBmaWx0ZXI6CVN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICovCitzdGF0aWMgY29uc3QgY2hhciAqaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKGNvbnN0IGNoYXIgKmZpbHRlciwgY2hhciAqZGVzdCkKK3sKKwljb25zdCBjaGFyICpuZXh0ZGVsaW0sICpyZXNpZHVhbDsKKwlzaXplX3QgbGVuOworCisJbmV4dGRlbGltID0gc3RyY2hyKGZpbHRlciwgJywnKTsKKwlpZiAobmV4dGRlbGltKSB7CisJCWxlbiA9IG5leHRkZWxpbSAtIGZpbHRlcjsKKwkJcmVzaWR1YWwgPSBuZXh0ZGVsaW0gKyAxOworCX0gZWxzZSB7CisJCWxlbiA9IHN0cmxlbihmaWx0ZXIpOworCQlyZXNpZHVhbCA9IGZpbHRlciArIGxlbjsKKwl9CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogY2hlY2sgZm9yICdcbicgKGlmIGNhbGxlZCBmcm9tIHN5c2ZzKSAqLworCWlmIChmaWx0ZXJbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlpZiAobGVuID4gOCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBwYWQgd2l0aCBibGFua3MgYW5kIHNhdmUgdXBwZXIgY2FzZSB2ZXJzaW9uIG9mIHVzZXIgSUQgKi8KKwltZW1zZXQoZGVzdCwgJyAnLCA4KTsKKwl3aGlsZSAobGVuLS0pCisJCWRlc3RbbGVuXSA9IHRvdXBwZXIoZmlsdGVyW2xlbl0pOworCXJldHVybiByZXNpZHVhbDsKK30KKworLyoqCisgKiBodmNfaXVjdl9zZXR1cF9maWx0ZXIoKSAtIFNldCB1cCB6L1ZNIHVzZXIgSUQgZmlsdGVyCisgKiBAZmlsdGVyOglTdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqCisgKiBUaGUgZnVuY3Rpb24gcGFyc2VzIHRoZSBAZmlsdGVyIHN0cmluZyBhbmQgY3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nCisgKiB0aGUgbGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMuCisgKiBSZXR1cm4gY29kZSAwIG1lYW5zIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIGZpbHRlciBpcyBzeW50YWN0aWNhbGx5CisgKiBpbmNvcnJlY3QsIC1FTk9NRU0gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHRoZQorICogZmlsdGVyIGxpc3QgYXJyYXksIG9yIC1FTk9TUEMgaWYgdG9vIG1hbnkgei9WTSB1c2VyIElEcyBoYXZlIGJlZW4gc3BlY2lmaWVkLgorICovCitzdGF0aWMgaW50IGh2Y19pdWN2X3NldHVwX2ZpbHRlcihjb25zdCBjaGFyICp2YWwpCit7CisJY29uc3QgY2hhciAqcmVzaWR1YWw7CisJaW50IGVycjsKKwlzaXplX3Qgc2l6ZSwgY291bnQ7CisJdm9pZCAqYXJyYXksICpvbGRfZmlsdGVyOworCisJY291bnQgPSBzdHJsZW4odmFsKTsKKwlpZiAoY291bnQgPT0gMCB8fCAoY291bnQgPT0gMSAmJiB2YWxbMF0gPT0gJ1xuJykpIHsKKwkJc2l6ZSAgPSAwOworCQlhcnJheSA9IE5VTEw7CisJCWdvdG8gb3V0X3JlcGxhY2VfZmlsdGVyOwkvKiBjbGVhciBmaWx0ZXIgKi8KKwl9CisKKwkvKiBjb3VudCB1c2VyIElEcyBpbiBvcmRlciB0byBhbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSAqLworCXNpemUgPSAxOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgocmVzaWR1YWwgPSBzdHJjaHIocmVzaWR1YWwsICcsJykpICE9IE5VTEwpIHsKKwkJcmVzaWR1YWwrKzsKKwkJc2l6ZSsrOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgbGlzdCBleGNlZWRzIHRoZSBmaWx0ZXIgbGltaXQgKi8KKwlpZiAoc2l6ZSA+IE1BWF9WTUlEX0ZJTFRFUikKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlhcnJheSA9IGt6YWxsb2Moc2l6ZSAqIDgsIEdGUF9LRVJORUwpOworCWlmICghYXJyYXkpCisJCXJldHVybiAtRU5PTUVNOworCisJY291bnQgPSBzaXplOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgqcmVzaWR1YWwgJiYgY291bnQpIHsKKwkJcmVzaWR1YWwgPSBodmNfaXVjdl9wYXJzZV9maWx0ZXIocmVzaWR1YWwsCisJCQkJCQkgYXJyYXkgKyAoKHNpemUgLSBjb3VudCkgKiA4KSk7CisJCWlmIChJU19FUlIocmVzaWR1YWwpKSB7CisJCQllcnIgPSBQVFJfRVJSKHJlc2lkdWFsKTsKKwkJCWtmcmVlKGFycmF5KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQljb3VudC0tOworCX0KKworb3V0X3JlcGxhY2VfZmlsdGVyOgorCXdyaXRlX2xvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlvbGRfZmlsdGVyID0gaHZjX2l1Y3ZfZmlsdGVyOworCWh2Y19pdWN2X2ZpbHRlcl9zaXplID0gc2l6ZTsKKwlodmNfaXVjdl9maWx0ZXIgPSBhcnJheTsKKwl3cml0ZV91bmxvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlrZnJlZShvbGRfZmlsdGVyKTsKKworCWVyciA9IDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoKSAtIFNldCB6L1ZNIHVzZXIgSUQgZmlsdGVyIHBhcmFtZXRlcgorICogQHZhbDoJU3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKiBAa3A6CQlLZXJuZWwgcGFyYW1ldGVyIHBvaW50aW5nIHRvIGh2Y19pdWN2X2ZpbHRlciBhcnJheQorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIHVwIHRoZSB6L1ZNIHVzZXIgSUQgZmlsdGVyIHNwZWNpZmllZCBhcyBjb21tYS1zZXBhcmF0ZWQKKyAqIGxpc3Qgb2YgdXNlciBJRHMgaW4gQHZhbC4KKyAqIE5vdGU6IElmIGl0IGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCBAdmFsIGlzIHN0b3JlZCBhbmQKKyAqCSBwYXJzZWQgbGF0ZXIgaW4gaHZjX2l1Y3ZfaW5pdCgpLgorICovCitzdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJjOworCisJaWYgKCFNQUNISU5FX0lTX1ZNIHx8ICFodmNfaXVjdl9kZXZpY2VzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghdmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gMDsKKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKKwkJcmMgPSBodmNfaXVjdl9zZXR1cF9maWx0ZXIodmFsKTsKKwllbHNlCisJCWh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcgPSB2YWw7CS8qIGRlZmVyLi4uICovCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBhcmFtX2dldF92bWlkZmlsdGVyKCkgLSBHZXQgei9WTSB1c2VyIElEIGZpbHRlcgorICogQGJ1ZmZlcjoJQnVmZmVyIHRvIHN0b3JlIHovVk0gdXNlciBJRCBmaWx0ZXIsCisgKgkJKGJ1ZmZlciBzaXplIGFzc3VtcHRpb24gUEFHRV9TSVpFKQorICogQGtwOgkJS2VybmVsIHBhcmFtZXRlciBwb2ludGluZyB0byB0aGUgaHZjX2l1Y3ZfZmlsdGVyIGFycmF5CisgKgorICogVGhlIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZmlsdGVyIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICogaW4gQGJ1ZmZlci4gVHlwaWNhbGx5LCBzeXNmcyByb3V0aW5lcyBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGF0dHIgc2hvdy4KKyAqLworc3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByYzsKKwlzaXplX3QgaW5kZXgsIGxlbjsKKwl2b2lkICpzdGFydCwgKmVuZDsKKworCWlmICghTUFDSElORV9JU19WTSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYyA9IDA7CisJcmVhZF9sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7IGluZGV4KyspIHsKKwkJc3RhcnQgPSBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGluZGV4KTsKKwkJZW5kICAgPSBtZW1jaHIoc3RhcnQsICcgJywgOCk7CisJCWxlbiAgID0gKGVuZCkgPyBlbmQgLSBzdGFydCA6IDg7CisJCW1lbWNweShidWZmZXIgKyByYywgc3RhcnQsIGxlbik7CisJCXJjICs9IGxlbjsKKwkJYnVmZmVyW3JjKytdID0gJywnOworCX0KKwlyZWFkX3VubG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykKKwkJYnVmZmVyWy0tcmNdID0gJ1wwJzsJLyogcmVwbGFjZSBsYXN0IGNvbW1hIGFuZCB1cGRhdGUgcmMgKi8KKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfdm1pZGZpbHRlcihuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHZvaWQpCisKKy8qKgogICogaHZjX2l1Y3ZfaW5pdCgpIC0gei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZCkKQEAgLTg4NCwyNCArMTA5Miw1MyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICghTUFDSElORV9JU19WTSkgewotCQlwcl9pbmZvKCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCAiCi0JCQkgICAiYmUgdXNlZCB3aXRob3V0IHovVk1cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlpZiAoIWh2Y19pdWN2X2RldmljZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghTUFDSElORV9JU19WTSkgeworCQlwcl9ub3RpY2UoIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90ICIKKwkJCSAgICJiZSB1c2VkIHdpdGhvdXQgei9WTVxuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpIHsKKwkJcHJfZXJyKCIlbHUgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoZSBodmNfaXVjdj0gIgorCQkJImtlcm5lbCBwYXJhbWV0ZXJcbiIsIGh2Y19pdWN2X2RldmljZXMpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIHBhcnNlIGh2Y19pdWN2X2FsbG93IHN0cmluZyBhbmQgY3JlYXRlIHovVk0gdXNlciBJRCBmaWx0ZXIgbGlzdCAqLworCWlmIChodmNfaXVjdl9maWx0ZXJfc3RyaW5nKSB7CisJCXJjID0gaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKGh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoICIKKwkJCQkicmVhc29uIGNvZGU9JWRcbiIsIDMpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWNhc2UgLUVJTlZBTDoKKwkJCXByX2VycigiaHZjX2l1Y3ZfYWxsb3c9IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCAiCisJCQkJInovVk0gdXNlciBJRCBsaXN0XG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQljYXNlIC1FTk9TUEM6CisJCQlwcl9lcnIoImh2Y19pdWN2X2FsbG93PSBzcGVjaWZpZXMgdG9vIG1hbnkgIgorCQkJCSJ6L1ZNIHVzZXIgSURzXG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKwl9CiAKIAlodmNfaXVjdl9idWZmZXJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShLTVNHX0NPTVBPTkVOVCwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpdWN2X3R0eV9idWZmZXIpLAogCQkJCQkgICAwLCAwLCBOVUxMKTsKIAlpZiAoIWh2Y19pdWN2X2J1ZmZlcl9jYWNoZSkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoIHJlYXNvbiBjb2RlPSVkXG4iLCAxKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCiAJaHZjX2l1Y3ZfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNRU1QT09MX01JTl9OUiwKQEAgLTkwOSw3ICsxMTQ2LDggQEAKIAlpZiAoIWh2Y19pdWN2X21lbXBvb2wpIHsKIAkJcHJfZXJyKCJBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQgd2l0aCByZWFzb24gY29kZT0lZFxuIiwgMik7CiAJCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZmlyc3QgdGVybWluYWwgZGV2aWNlIGFzIGNvbnNvbGUKQEAgLTk1Myw2ICsxMTkxLDggQEAKIG91dF9lcnJvcl9tZW1vcnk6CiAJbWVtcG9vbF9kZXN0cm95KGh2Y19pdWN2X21lbXBvb2wpOwogCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOworb3V0X2Vycm9yOgorCWh2Y19pdWN2X2RldmljZXMgPSAwOyAvKiBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgZGV2aWNlICovCiAJcmV0dXJuIHJjOwogfQogCkBAIC05NjgsMyArMTIwOCw0IEBACiAKIGRldmljZV9pbml0Y2FsbChodmNfaXVjdl9pbml0KTsKIF9fc2V0dXAoImh2Y19pdWN2PSIsIGh2Y19pdWN2X2NvbmZpZyk7Citjb3JlX3BhcmFtKGh2Y19pdWN2X2FsbG93LCBodmNfaXVjdl9maWx0ZXIsIHZtaWRmaWx0ZXIsIDA2NDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDg4MjJlY2EuLjVmYWI2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTIwLDYgKzIwLDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBIV19SQU5ET01fVElNRVJJT01FTQorCXRyaXN0YXRlICJUaW1lciBJT01FTSBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIGEgZ2VuZXJpYyBSYW5kb20KKwkgIE51bWJlciBHZW5lcmF0b3IgdXNlZCBieSByZWFkaW5nIGEgJ2R1bWInIGlvbWVtIGFkZHJlc3MgdGhhdAorCSAgaXMgdG8gYmUgcmVhZCBubyBmYXN0ZXIgdGhhbiwgZm9yIGV4YW1wbGUsIG9uY2UgYSBzZWNvbmQ7CisJICB0aGUgZGVmYXVsdCBGUEdBIGJpdHN0cmVhbSBvbiB0aGUgVFMtNzgwMCBoYXMgc3VjaCBmdW5jdGlvbmFsaXR5LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aW1lcmlvbWVtLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIEhXX1JBTkRPTV9JTlRFTAogCXRyaXN0YXRlICJJbnRlbCBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChYODYgfHwgSUE2NCkgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCBiNmVmZmI3Li5lODFkMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19IV19SQU5ET00pICs9IHJuZy1jb3JlLm8KIHJuZy1jb3JlLXkgOj0gY29yZS5vCitvYmotJChDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0pICs9IHRpbWVyaW9tZW0tcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fSU5URUwpICs9IGludGVsLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0FNRCkgKz0gYW1kLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0dFT0RFKSArPSBnZW9kZS1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCmluZGV4IGJhNjhhNDYuLjUzODMxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXJuZ19pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJybmdfaWNrIik7CisJCXJuZ19pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKIAkJaWYgKElTX0VSUihybmdfaWNrKSkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGdldCBybmdfaWNrXG4iKTsKIAkJCXJldCA9IFBUUl9FUlIocm5nX2ljayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhZDQxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIGRyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKKyAqICAgQ29weXJpZ2h0IDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogT3ZlcnZpZXc6CisgKiAgIFRoaXMgZHJpdmVyIGlzIHVzZWZ1bCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBhbiBJTyByYW5nZSB0aGF0IHByb3ZpZGVzCisgKiAgIHBlcmlvZGljIHJhbmRvbSBkYXRhIGZyb20gYSBzaW5nbGUgSU8gbWVtb3J5IGFkZHJlc3MuICBBbGwgdGhlIHBsYXRmb3JtCisgKiAgIGhhcyB0byBkbyBpcyBwcm92aWRlIHRoZSBhZGRyZXNzIGFuZCAnd2FpdCB0aW1lJyB0aGF0IG5ldyBkYXRhIGJlY29tZXMKKyAqICAgYXZhaWxhYmxlLgorICoKKyAqIFRPRE86IGFkZCBzdXBwb3J0IGZvciByZWFkaW5nIHNpemVzIG90aGVyIHRoYW4gMzJiaXRzIGFuZCBtYXNraW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXJpb21lbS1ybmcuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RhdGljIHN0cnVjdCB0aW1lcmlvbWVtX3JuZ19kYXRhICp0aW1lcmlvbWVtX3JuZ19kYXRhOworCitzdGF0aWMgdm9pZCB0aW1lcmlvbWVtX3JuZ190cmlnZ2VyKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIERFRklORV9USU1FUih0aW1lcmlvbWVtX3JuZ190aW1lciwgdGltZXJpb21lbV9ybmdfdHJpZ2dlciwgMCwgMCk7CisKKy8qCisgKiBoYXZlIGRhdGEgcmV0dXJuIDEsIGhvd2V2ZXIgcmV0dXJuIDAgaWYgd2UgaGF2ZSBub3RoaW5nCisgKi8KK3N0YXRpYyBpbnQgdGltZXJpb21lbV9ybmdfZGF0YV9wcmVzZW50KHN0cnVjdCBod3JuZyAqcm5nLCBpbnQgd2FpdCkKK3sKKwlpZiAocm5nLT5wcml2ID09IDApCisJCXJldHVybiAxOworCisJaWYgKCF3YWl0IHx8IHRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQpCisJCXJldHVybiB0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50OworCisJd2FpdF9mb3JfY29tcGxldGlvbigmdGltZXJpb21lbV9ybmdfZGF0YS0+Y29tcGxldGlvbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0aW1lcmlvbWVtX3JuZ19kYXRhX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGN1cjsKKwlzMzIgZGVsYXk7CisKKwkqZGF0YSA9IHJlYWRsKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworCisJaWYgKHJuZy0+cHJpdiAhPSAwKSB7CisJCWN1ciA9IGppZmZpZXM7CisKKwkJZGVsYXkgPSBjdXIgLSB0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzOworCQlkZWxheSA9IHJuZy0+cHJpdiAtIChkZWxheSAlIHJuZy0+cHJpdik7CisKKwkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGN1ciArIGRlbGF5OworCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50ID0gMDsKKworCQlpbml0X2NvbXBsZXRpb24oJnRpbWVyaW9tZW1fcm5nX2RhdGEtPmNvbXBsZXRpb24pOworCQlhZGRfdGltZXIoJnRpbWVyaW9tZW1fcm5nX3RpbWVyKTsKKwl9CisKKwlyZXR1cm4gNDsKK30KKworc3RhdGljIHZvaWQgdGltZXJpb21lbV9ybmdfdHJpZ2dlcih1bnNpZ25lZCBsb25nIGR1bW15KQoreworCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAxOworCWNvbXBsZXRlKCZ0aW1lcmlvbWVtX3JuZ19kYXRhLT5jb21wbGV0aW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBod3JuZyB0aW1lcmlvbWVtX3JuZ19vcHMgPSB7CisJLm5hbWUJCT0gInRpbWVyaW9tZW0iLAorCS5kYXRhX3ByZXNlbnQJPSB0aW1lcmlvbWVtX3JuZ19kYXRhX3ByZXNlbnQsCisJLmRhdGFfcmVhZAk9IHRpbWVyaW9tZW1fcm5nX2RhdGFfcmVhZCwKKwkucHJpdgkJPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltZXJpb21lbV9ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJdGltZXJpb21lbV9ybmdfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCAhPSAwCisJCSYmIHVzZWNzX3RvX2ppZmZpZXModGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKSA+IDApIHsKKwkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7CisKKwkJdGltZXJpb21lbV9ybmdfb3BzLnByaXYgPSB1c2Vjc190b19qaWZmaWVzKAorCQkJCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKTsKKwl9CisJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDE7CisKKwlyZXQgPSBod3JuZ19yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmdcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIzMmJpdHMgZnJvbSAweCVwIEAgJWR1c1xuIiwKKwkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MsCisJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRpbWVyaW9tZW1fcm5nX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZ0aW1lcmlvbWVtX3JuZ190aW1lcik7CisJaHdybmdfdW5yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1lcmlvbWVtX3JuZ19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInRpbWVyaW9tZW1fcm5nIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWVyaW9tZW1fcm5nX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGltZXJpb21lbV9ybmdfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyaW9tZW1fcm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGltZXJpb21lbV9ybmdfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1lcmlvbWVtX3JuZ19pbml0KTsKK21vZHVsZV9leGl0KHRpbWVyaW9tZW1fcm5nX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUaW1lciBJT01FTSBIL1cgUk5HIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IGRjMDczZTEuLjU2MDhhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTQzMTEsMTAgKzQzMTEsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtNDM0MSwxMSArNDM0OCw4IEBACiAJZGV2LT5pcnEgICAgICAgPSBpbmZvLT5pcnFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcwkgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA3YzEzNTgxLi43YzQzYWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0yNDEsNiArMjQxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvaGFzaC5oPgogCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKKyMgaW5jbHVkZSA8bGludXgvaXJxLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTU1OCw3ICs1NjIsNyBAQAogCXVuc2lnbmVkIGRvbnRfY291bnRfZW50cm9weToxOwogfTsKIAotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogCiBzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKmlycV90aW1lcl9zdGF0ZVtOUl9JUlFTXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGY0Mzc0NDMuLmZkM2RjZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTg4OCwxMiArODg4LDcgQEAKIAogc3RhdGljIGludCBzb255cGlfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYyk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2RldmljZS5maWZvX2FzeW5jKTsKIH0KIAogc3RhdGljIGludCBzb255cGlfbWlzY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCBiODA2M2Q0Li4wMDU3YThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtODAwNywxMCArODAwNywxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC04MDM4LDExICs4MDQ1LDggQEAKIAlkZXYtPmRtYSAgICAgICA9IGluZm8tPmRtYV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzICAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwppbmRleCBmMzI5ZjQ1Li5lZmIzZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwpAQCAtMTc2MywxMCArMTc2MywxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC0xNzk0LDExICsxODAxLDggQEAKIAlkZXYtPmlycSAgICAgICA9IGluZm8tPmlycV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzCSAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggN2IwYzViMi4uOGViNmM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC0xOTA3LDEwICsxOTA3LDE3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaGRsY2Rldl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhkbGNkZXZfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBoZGxjZGV2X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGhkbGNkZXZfdHhfdGltZW91dCwKK307CisKIC8qKgogICogY2FsbGVkIGJ5IGRldmljZSBkcml2ZXIgd2hlbiBhZGRpbmcgZGV2aWNlIGluc3RhbmNlCiAgKiBkbyBnZW5lcmljIEhETEMgaW5pdGlhbGl6YXRpb24KQEAgLTE5MzgsMTEgKzE5NDUsOCBAQAogCWRldi0+aXJxICAgICAgID0gaW5mby0+aXJxX2xldmVsOwogCiAJLyogbmV0d29yayBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCi0JZGV2LT5kb19pb2N0bCAgICAgICA9IGhkbGNkZXZfaW9jdGw7Ci0JZGV2LT5vcGVuICAgICAgICAgICA9IGhkbGNkZXZfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgID0gaGRsY2Rldl9jbG9zZTsKLQlkZXYtPnR4X3RpbWVvdXQgICAgID0gaGRsY2Rldl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKKwlkZXYtPm5ldGRldl9vcHMJICAgID0gJmhkbGNkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCAqIEhaOwogCWRldi0+dHhfcXVldWVfbGVuICAgPSA1MDsKIAogCS8qIGdlbmVyaWMgSERMQyBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCA5YzQ3ZGM0Li5jY2RkODI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTQyOSwxMzQgKzQyOSwxNDggQEAKICNkZWZpbmUgVFBNX0RJR0VTVF9TSVpFIDIwCiAjZGVmaW5lIFRQTV9FUlJPUl9TSVpFIDEwCiAjZGVmaW5lIFRQTV9SRVRfQ09ERV9JRFggNgotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFggMTAKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCAxNAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYIDE4Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFggMjIKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl80X0lEWCAyNgotI2RlZmluZSBUUE1fR0VUX0NBUF9QRVJNX0RJU0FCTEVfSURYIDE2Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1BFUk1fSU5BQ1RJVkVfSURYIDE4Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9CT09MXzFfSURYIDE0Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1RFTVBfSU5BQ1RJVkVfSURYIDE2Ci0KLSNkZWZpbmUgVFBNX0NBUF9JRFggMTMKLSNkZWZpbmUgVFBNX0NBUF9TVUJDQVBfSURYIDIxCiAKIGVudW0gdHBtX2NhcGFiaWxpdGllcyB7Ci0JVFBNX0NBUF9GTEFHID0gNCwKLQlUUE1fQ0FQX1BST1AgPSA1LAorCVRQTV9DQVBfRkxBRyA9IGNwdV90b19iZTMyKDQpLAorCVRQTV9DQVBfUFJPUCA9IGNwdV90b19iZTMyKDUpLAorCUNBUF9WRVJTSU9OXzFfMSA9IGNwdV90b19iZTMyKDB4MDYpLAorCUNBUF9WRVJTSU9OXzFfMiA9IGNwdV90b19iZTMyKDB4MUEpCiB9OwogCiBlbnVtIHRwbV9zdWJfY2FwYWJpbGl0aWVzIHsKLQlUUE1fQ0FQX1BST1BfUENSID0gMHgxLAotCVRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIgPSAweDMsCi0JVFBNX0NBUF9GTEFHX1BFUk0gPSAweDgsCi0JVFBNX0NBUF9GTEFHX1ZPTCA9IDB4OSwKLQlUUE1fQ0FQX1BST1BfT1dORVIgPSAweDExLAotCVRQTV9DQVBfUFJPUF9USVNfVElNRU9VVCA9IDB4MTUsCi0JVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTiA9IDB4MjAsCisJVFBNX0NBUF9QUk9QX1BDUiA9IGNwdV90b19iZTMyKDB4MTAxKSwKKwlUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSID0gY3B1X3RvX2JlMzIoMHgxMDMpLAorCVRQTV9DQVBfRkxBR19QRVJNID0gY3B1X3RvX2JlMzIoMHgxMDgpLAorCVRQTV9DQVBfRkxBR19WT0wgPSBjcHVfdG9fYmUzMigweDEwOSksCisJVFBNX0NBUF9QUk9QX09XTkVSID0gY3B1X3RvX2JlMzIoMHgxMTEpLAorCVRQTV9DQVBfUFJPUF9USVNfVElNRU9VVCA9IGNwdV90b19iZTMyKDB4MTE1KSwKKwlUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OID0gY3B1X3RvX2JlMzIoMHgxMjApLAorCiB9OwogCi0vKgotICogVGhpcyBpcyBhIHNlbWkgZ2VuZXJpYyBHZXRDYXBhYmlsaXR5IGNvbW1hbmQgZm9yIHVzZQotICogd2l0aCB0aGUgY2FwYWJpbGl0eSB0eXBlIFRQTV9DQVBfUFJPUCBvciBUUE1fQ0FQX0ZMQUcKLSAqIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN1Yl9jYXBhYmlsaXRpZXMuCi0gKi8KLQotc3RhdGljIGNvbnN0IHU4IHRwbV9jYXBbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDIyLAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTAxLAkJLyogVFBNX09SRF9HZXRDYXBhYmlsaXR5ICovCi0JMCwgMCwgMCwgMCwJCS8qIFRQTV9DQVBfPFRZUEU+ICovCi0JMCwgMCwgMCwgNCwJCS8qIFRQTV9DQVBfU1VCXzxUWVBFPiBzaXplICovCi0JMCwgMCwgMSwgMAkJLyogVFBNX0NBUF9TVUJfPFRZUEU+ICovCi19OwotCi1zdGF0aWMgc3NpemVfdCB0cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqZGF0YSwgaW50IGxlbiwKLQkJCSAgICBjaGFyICpkZXNjKQorc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgc3RydWN0IHRwbV9jbWRfdCAqY21kLAorCQkJICAgIGludCBsZW4sIGNvbnN0IGNoYXIgKmRlc2MpCiB7CiAJaW50IGVycjsKIAotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBsZW4pOworCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCh1OCAqKSBjbWQsIGxlbik7CiAJaWYgKGxlbiA8ICAwKQogCQlyZXR1cm4gbGVuOwogCWlmIChsZW4gPT0gVFBNX0VSUk9SX1NJWkUpIHsKLQkJZXJyID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKTsKKwkJZXJyID0gYmUzMl90b19jcHUoY21kLT5oZWFkZXIub3V0LnJldHVybl9jb2RlKTsKIAkJZGV2X2RiZyhjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICVzXG4iLCBlcnIsIGRlc2MpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUgMjAwCisjZGVmaW5lIFRQTV9UQUdfUlFVX0NPTU1BTkQgY3B1X3RvX2JlMTYoMTkzKQorI2RlZmluZSBUUE1fT1JEX0dFVF9DQVAgY3B1X3RvX2JlMzIoMTAxKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtX2dldGNhcF9oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDIyKSwKKwkub3JkaW5hbCA9IFRQTV9PUkRfR0VUX0NBUAorfTsKKworc3NpemVfdCB0cG1fZ2V0Y2FwKHN0cnVjdCBkZXZpY2UgKmRldiwgX19iZTMyIHN1YmNhcF9pZCwgY2FwX3QgKmNhcCwKKwkJICAgY29uc3QgY2hhciAqZGVzYykKK3sKKwlzdHJ1Y3QgdHBtX2NtZF90IHRwbV9jbWQ7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwlpZiAoc3ViY2FwX2lkID09IENBUF9WRVJTSU9OXzFfMSB8fCBzdWJjYXBfaWQgPT0gQ0FQX1ZFUlNJT05fMV8yKSB7CisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBzdWJjYXBfaWQ7CisJCS8qc3ViY2FwIGZpZWxkIG5vdCBuZWNlc3NhcnkgKi8KKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoMCk7CisJCXRwbV9jbWQuaGVhZGVyLmluLmxlbmd0aCAtPSBjcHVfdG9fYmUzMihzaXplb2YoX19iZTMyKSk7CisJfSBlbHNlIHsKKwkJaWYgKHN1YmNhcF9pZCA9PSBUUE1fQ0FQX0ZMQUdfUEVSTSB8fAorCQkgICAgc3ViY2FwX2lkID09IFRQTV9DQVBfRkxBR19WT0wpCisJCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9GTEFHOworCQllbHNlCisJCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IHN1YmNhcF9pZDsKKwl9CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgZGVzYyk7CisJaWYgKCFyYykKKwkJKmNhcCA9IHRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwOworCXJldHVybiByYzsKK30KKwogdm9pZCB0cG1fZ2VuX2ludGVycnVwdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0JdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDMwKV07CisJc3RydWN0CXRwbV9jbWRfdCB0cG1fY21kOwogCXNzaXplX3QgcmM7CiAKLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGltZW91dHMiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9nZW5faW50ZXJydXB0KTsKIAogdm9pZCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQl1OCBkYXRhW21heF90KGludCwgQVJSQVlfU0laRSh0cG1fY2FwKSwgMzApXTsKKwlzdHJ1Y3QgdHBtX2NtZF90IHRwbV9jbWQ7CisJc3RydWN0IHRpbWVvdXRfdCAqdGltZW91dF9jYXA7CisJc3RydWN0IGR1cmF0aW9uX3QgKmR1cmF0aW9uX2NhcDsKIAlzc2l6ZV90IHJjOwogCXUzMiB0aW1lb3V0OwogCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOwogCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CiAJaWYgKHJjKQogCQlnb3RvIGR1cmF0aW9uOwogCi0JaWYgKGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCkpKQorCWlmIChiZTMyX3RvX2NwdSh0cG1fY21kLmhlYWRlci5vdXQubGVuZ3RoKQogCSAgICAhPSA0ICogc2l6ZW9mKHUzMikpCiAJCWdvdG8gZHVyYXRpb247CiAKKwl0aW1lb3V0X2NhcCA9ICZ0cG1fY21kLnBhcmFtcy5nZXRjYXBfb3V0LmNhcC50aW1lb3V0OwogCS8qIERvbid0IG92ZXJ3cml0ZSBkZWZhdWx0IGlmIHZhbHVlIGlzIDAgKi8KLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmEpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9hID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmIpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9iID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmMpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9jID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl80X0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmQpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9kID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAogZHVyYXRpb246Ci0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTjsKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT047CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgZHVyYXRpb25zIik7CiAJaWYgKHJjKQogCQlyZXR1cm47CiAKLQlpZiAoYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYKSkpCisJaWYgKGJlMzJfdG9fY3B1KHRwbV9jbWQuaGVhZGVyLm91dC5yZXR1cm5fY29kZSkKIAkgICAgIT0gMyAqIHNpemVvZih1MzIpKQogCQlyZXR1cm47Ci0KKwlkdXJhdGlvbl9jYXAgPSAmdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXAuZHVyYXRpb247CiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPQotCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1Ci0JCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwotCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoZHVyYXRpb25fY2FwLT50cG1fc2hvcnQpKTsKIAkvKiBUaGUgQnJvYWRjb20gQkNNMDEwMiBjaGlwc2V0IGluIGEgRGVsbCBMYXRpdHVkZSBEODIwIGdldHMgdGhlIGFib3ZlCiAJICogdmFsdWUgd3JvbmcgYW5kIGFwcGFyZW50bHkgcmVwb3J0cyBtc2VjcyByYXRoZXIgdGhhbiB1c2Vjcy4gU28gd2UKIAkgKiBmaXggdXAgdGhlIHJlc3VsdGluZyB0b28tc21hbGwgVFBNX1NIT1JUIHZhbHVlIHRvIG1ha2UgdGhpbmdzIHdvcmsuCkBAIC01NjUsMTMgKzU3OSw5IEBACiAJCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fU0hPUlRdID0gSFo7CiAKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX01FRElVTV0gPQotCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1Ci0JCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwotCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKSk7CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoZHVyYXRpb25fY2FwLT50cG1fbWVkaXVtKSk7CiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9MT05HXSA9Ci0JICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKLQkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCi0JCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpKTsKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9sb25nKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZ2V0X3RpbWVvdXRzKTsKIApAQCAtNTg3LDM2ICs1OTcsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9jb250aW51ZV9zZWxmdGVzdCk7CiAKLSNkZWZpbmUgIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSAyMDAKLQogc3NpemVfdCB0cG1fc2hvd19lbmFibGVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1BFUk07Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW10cGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBlbmFibGVkIHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfRkxBR19QRVJNLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGVuYWJsZWQgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWRhdGFbVFBNX0dFVF9DQVBfUEVSTV9ESVNBQkxFX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhY2FwLnBlcm1fZmxhZ3MuZGlzYWJsZSk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfZW5hYmxlZCk7CkBAIC02MjQsMzEgKzYxNiwxNSBAQAogc3NpemVfdCB0cG1fc2hvd19hY3RpdmUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAogCQkJY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfUEVSTTsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXRwaW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGFjdGl2ZSBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX0ZMQUdfUEVSTSwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBhY3RpdmUgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWRhdGFbVFBNX0dFVF9DQVBfUEVSTV9JTkFDVElWRV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWNhcC5wZXJtX2ZsYWdzLmRlYWN0aXZhdGVkKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19hY3RpdmUpOwpAQCAtNjU2LDMxICs2MzIsMTUgQEAKIHNzaXplX3QgdHBtX3Nob3dfb3duZWQoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAogCQkJY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfT1dORVI7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG93bmVyIHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9PV05FUiwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG93bmVyIHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGFbVFBNX0dFVF9DQVBfUkVUX0JPT0xfMV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgY2FwLm93bmVkKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19vd25lZCk7CkBAIC02ODgsMTE2ICs2NDgsMTgwIEBACiBzc2l6ZV90IHRwbV9zaG93X3RlbXBfZGVhY3RpdmF0ZWQoc3RydWN0IGRldmljZSAqIGRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1ZPTDsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGVtcG9yYXJ5IHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfRkxBR19WT0wsICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0ZW1wb3Jhcnkgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YVtUUE1fR0VUX0NBUF9URU1QX0lOQUNUSVZFX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYXAuc3RjbGVhcl9mbGFncy5kZWFjdGl2YXRlZCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfdGVtcF9kZWFjdGl2YXRlZCk7CiAKLXN0YXRpYyBjb25zdCB1OCBwY3JyZWFkW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAxNCwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDIxLAkJLyogVFBNX09SRF9QY3JSZWFkICovCi0JMCwgMCwgMCwgMAkJLyogUENSIGluZGV4ICovCisvKgorICogdHBtX2NoaXBfZmluZF9nZXQgLSByZXR1cm4gdHBtX2NoaXAgZm9yIGdpdmVuIGNoaXAgbnVtYmVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHBtX2NoaXAgKnRwbV9jaGlwX2ZpbmRfZ2V0KGludCBjaGlwX251bSkKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKnBvcywgKmNoaXAgPSBOVUxMOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgJnRwbV9jaGlwX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNoaXBfbnVtICE9IFRQTV9BTllfTlVNICYmIGNoaXBfbnVtICE9IHBvcy0+ZGV2X251bSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0cnlfbW9kdWxlX2dldChwb3MtPmRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJCWNoaXAgPSBwb3M7CisJCQlicmVhazsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY2hpcDsKK30KKworI2RlZmluZSBUUE1fT1JESU5BTF9QQ1JSRUFEIGNwdV90b19iZTMyKDIxKQorI2RlZmluZSBSRUFEX1BDUl9SRVNVTFRfU0laRSAzMAorc3RhdGljIHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHBjcnJlYWRfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigxNCksCisJLm9yZGluYWwgPSBUUE1fT1JESU5BTF9QQ1JSRUFECiB9OwogCitpbnQgX190cG1fcGNyX3JlYWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpCit7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY21kX3QgY21kOworCisJY21kLmhlYWRlci5pbiA9IHBjcnJlYWRfaGVhZGVyOworCWNtZC5wYXJhbXMucGNycmVhZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7CisJQlVJTERfQlVHX09OKGNtZC5oZWFkZXIuaW4ubGVuZ3RoID4gUkVBRF9QQ1JfUkVTVUxUX1NJWkUpOworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIGNtZC5oZWFkZXIuaW4ubGVuZ3RoLAorCQkJICAiYXR0ZW1wdGluZyB0byByZWFkIGEgcGNyIHZhbHVlIik7CisKKwlpZiAocmMgPT0gMCkKKwkJbWVtY3B5KHJlc19idWYsIGNtZC5wYXJhbXMucGNycmVhZF9vdXQucGNyX3Jlc3VsdCwKKwkJICAgICAgIFRQTV9ESUdFU1RfU0laRSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHRwbV9wY3JfcmVhZCAtIHJlYWQgYSBwY3IgdmFsdWUKKyAqIEBjaGlwX251bTogCXRwbSBpZHggIyBvciBBTlkKKyAqIEBwY3JfaWR4OglwY3IgaWR4IHRvIHJldHJpZXZlCisgKiBAcmVzX2J1ZjogCVRQTV9QQ1IgdmFsdWUKKyAqIAkJc2l6ZSBvZiByZXNfYnVmIGlzIDIwIGJ5dGVzIChvciBOVUxMIGlmIHlvdSBkb24ndCBjYXJlKQorICoKKyAqIFRoZSBUUE0gZHJpdmVyIHNob3VsZCBiZSBidWlsdC1pbiwgYnV0IGZvciB3aGF0ZXZlciByZWFzb24gaXQKKyAqIGlzbid0LCBwcm90ZWN0IGFnYWluc3QgdGhlIGNoaXAgZGlzYXBwZWFyaW5nLCBieSBpbmNyZW1lbnRpbmcKKyAqIHRoZSBtb2R1bGUgdXNhZ2UgY291bnQuCisgKi8KK2ludCB0cG1fcGNyX3JlYWQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpCit7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCWludCByYzsKKworCWNoaXAgPSB0cG1fY2hpcF9maW5kX2dldChjaGlwX251bSk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmMgPSBfX3RwbV9wY3JfcmVhZChjaGlwLCBwY3JfaWR4LCByZXNfYnVmKTsKKwltb2R1bGVfcHV0KGNoaXAtPmRldi0+ZHJpdmVyLT5vd25lcik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Bjcl9yZWFkKTsKKworLyoqCisgKiB0cG1fcGNyX2V4dGVuZCAtIGV4dGVuZCBwY3IgdmFsdWUgd2l0aCBoYXNoCisgKiBAY2hpcF9udW06IAl0cG0gaWR4ICMgb3IgQU4mCisgKiBAcGNyX2lkeDoJcGNyIGlkeCB0byBleHRlbmQKKyAqIEBoYXNoOiAJaGFzaCB2YWx1ZSB1c2VkIHRvIGV4dGVuZCBwY3IgdmFsdWUKKyAqCisgKiBUaGUgVFBNIGRyaXZlciBzaG91bGQgYmUgYnVpbHQtaW4sIGJ1dCBmb3Igd2hhdGV2ZXIgcmVhc29uIGl0CisgKiBpc24ndCwgcHJvdGVjdCBhZ2FpbnN0IHRoZSBjaGlwIGRpc2FwcGVhcmluZywgYnkgaW5jcmVtZW50aW5nCisgKiB0aGUgbW9kdWxlIHVzYWdlIGNvdW50LgorICovCisjZGVmaW5lIFRQTV9PUkRfUENSX0VYVEVORCBjcHVfdG9fYmUzMigyMCkKKyNkZWZpbmUgRVhURU5EX1BDUl9TSVpFIDM0CitzdGF0aWMgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgcGNyZXh0ZW5kX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMzQpLAorCS5vcmRpbmFsID0gVFBNX09SRF9QQ1JfRVhURU5ECit9OworCitpbnQgdHBtX3Bjcl9leHRlbmQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgY29uc3QgdTggKmhhc2gpCit7CisJc3RydWN0IHRwbV9jbWRfdCBjbWQ7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKworCWNoaXAgPSB0cG1fY2hpcF9maW5kX2dldChjaGlwX251bSk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbWQuaGVhZGVyLmluID0gcGNyZXh0ZW5kX2hlYWRlcjsKKwlCVUlMRF9CVUdfT04oYmUzMl90b19jcHUoY21kLmhlYWRlci5pbi5sZW5ndGgpID4gRVhURU5EX1BDUl9TSVpFKTsKKwljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7CisJbWVtY3B5KGNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLmhhc2gsIGhhc2gsIFRQTV9ESUdFU1RfU0laRSk7CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJCQkgICJhdHRlbXB0aW5nIGV4dGVuZCBhIFBDUiB2YWx1ZSIpOworCisJbW9kdWxlX3B1dChjaGlwLT5kZXYtPmRyaXZlci0+b3duZXIpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9wY3JfZXh0ZW5kKTsKKwogc3NpemVfdCB0cG1fc2hvd19wY3JzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CisJdTggZGlnZXN0W1RQTV9ESUdFU1RfU0laRV07CiAJc3NpemVfdCByYzsKIAlpbnQgaSwgaiwgbnVtX3BjcnM7Ci0JX19iZTMyIGluZGV4OwogCWNoYXIgKnN0ciA9IGJ1ZjsKLQogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1BDUjsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfUENSLCAmY2FwLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgUENSUyIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCW51bV9wY3JzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgMTQpKSk7CisJbnVtX3BjcnMgPSBiZTMyX3RvX2NwdShjYXAubnVtX3BjcnMpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGNyczsgaSsrKSB7Ci0JCW1lbWNweShkYXRhLCBwY3JyZWFkLCBzaXplb2YocGNycmVhZCkpOwotCQlpbmRleCA9IGNwdV90b19iZTMyKGkpOwotCQltZW1jcHkoZGF0YSArIDEwLCAmaW5kZXgsIDQpOwotCQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkJImF0dGVtcHRpbmcgdG8gcmVhZCBhIFBDUiIpOworCQlyYyA9IF9fdHBtX3Bjcl9yZWFkKGNoaXAsIGksIGRpZ2VzdCk7CiAJCWlmIChyYykKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlBDUi0lMDJkOiAiLCBpKTsKIAkJZm9yIChqID0gMDsgaiA8IFRQTV9ESUdFU1RfU0laRTsgaisrKQotCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTAyWCAiLCAqKGRhdGEgKyAxMCArIGopKTsKKwkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiUwMlggIiwgZGlnZXN0W2pdKTsKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsKIAl9Ci1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3BjcnMpOwogCiAjZGVmaW5lICBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFIDMxNAotc3RhdGljIGNvbnN0IHU4IHJlYWRwdWJla1tdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMzAsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAxMjQsCQkvKiBUUE1fT1JEX1JlYWRQdWJlayAqLworI2RlZmluZSBUUE1fT1JEX1JFQURQVUJFSyBjcHVfdG9fYmUzMigxMjQpCitzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB0cG1fcmVhZHB1YmVrX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMzApLAorCS5vcmRpbmFsID0gVFBNX09SRF9SRUFEUFVCRUsKIH07CiAKIHNzaXplX3QgdHBtX3Nob3dfcHViZWsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAl1OCAqZGF0YTsKKwlzdHJ1Y3QgdHBtX2NtZF90IHRwbV9jbWQ7CiAJc3NpemVfdCBlcnI7CiAJaW50IGksIHJjOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCi0JZGF0YSA9IGt6YWxsb2MoUkVBRF9QVUJFS19SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCByZWFkcHViZWssIHNpemVvZihyZWFkcHViZWspKTsKLQotCWVyciA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFLAorCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX3JlYWRwdWJla19oZWFkZXI7CisJZXJyID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgUFVCRUsiKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTgxMiw3ICs4MzYsNyBAQAogCSAgIDI1NiBieXRlIG1vZHVsdXMKIAkgICBpZ25vcmUgY2hlY2tzdW0gMjAgYnl0ZXMKIAkgKi8KLQorCWRhdGEgPSB0cG1fY21kLnBhcmFtcy5yZWFkcHViZWtfb3V0X2J1ZmZlcjsKIAlzdHIgKz0KIAkgICAgc3ByaW50ZihzdHIsCiAJCSAgICAiQWxnb3JpdGhtOiAlMDJYICUwMlggJTAyWCAlMDJYXG5FbmNzY2hlbWU6ICUwMlggJTAyWFxuIgpAQCAtODMyLDY1ICs4NTYsMzMgQEAKIAl9CiBvdXQ6CiAJcmMgPSBzdHIgLSBidWY7Ci0Ja2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfcHViZWspOwogCi0jZGVmaW5lIENBUF9WRVJTSU9OXzFfMSA2Ci0jZGVmaW5lIENBUF9WRVJTSU9OXzFfMiAweDFBCi0jZGVmaW5lIENBUF9WRVJTSU9OX0lEWCAxMwotc3RhdGljIGNvbnN0IHU4IGNhcF92ZXJzaW9uW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAxOCwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMAotfTsKIAogc3NpemVfdCB0cG1fc2hvd19jYXBzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVI7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiwgJmNhcCwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCi0JCSAgICAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKLQotCW1lbWNweShkYXRhLCBjYXBfdmVyc2lvbiwgc2l6ZW9mKGNhcF92ZXJzaW9uKSk7Ci0JZGF0YVtDQVBfVkVSU0lPTl9JRFhdID0gQ0FQX1ZFUlNJT05fMV8xOwotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4xIHZlcnNpb24iKTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKKwlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCisJCSAgICAgICBiZTMyX3RvX2NwdShjYXAubWFudWZhY3R1cmVyX2lkKSk7CiAKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBDQVBfVkVSU0lPTl8xXzEsICZjYXAsCisJCSAgICAgICAgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjEgdmVyc2lvbiIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CiAJc3RyICs9IHNwcmludGYoc3RyLAogCQkgICAgICAgIlRDRyB2ZXJzaW9uOiAlZC4lZFxuRmlybXdhcmUgdmVyc2lvbjogJWQuJWRcbiIsCi0JCSAgICAgICAoaW50KSBkYXRhWzE0XSwgKGludCkgZGF0YVsxNV0sIChpbnQpIGRhdGFbMTZdLAotCQkgICAgICAgKGludCkgZGF0YVsxN10pOwotCi1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7CisJCSAgICAgICBjYXAudHBtX3ZlcnNpb24uTWFqb3IsIGNhcC50cG1fdmVyc2lvbi5NaW5vciwKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbi5yZXZNYWpvciwgY2FwLnRwbV92ZXJzaW9uLnJldk1pbm9yKTsKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwcyk7CkBAIC04OTgsNTEgKzg5MCwyNSBAQAogc3NpemVfdCB0cG1fc2hvd19jYXBzXzFfMihzdHJ1Y3QgZGV2aWNlICogZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKLQlzc2l6ZV90IGxlbjsKKwljYXBfdCBjYXA7CisJc3NpemVfdCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVI7Ci0KLQlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFKTsKLQlpZiAobGVuIDw9IFRQTV9FUlJPUl9TSVpFKSB7Ci0JCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlclxuIiwKLQkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSkpOwotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSLCAmY2FwLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXIiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KLQogCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKLQkJICAgICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOwotCi0JbWVtY3B5KGRhdGEsIGNhcF92ZXJzaW9uLCBzaXplb2YoY2FwX3ZlcnNpb24pKTsKLQlkYXRhW0NBUF9WRVJTSU9OX0lEWF0gPSBDQVBfVkVSU0lPTl8xXzI7Ci0KLQlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFKTsKLQlpZiAobGVuIDw9IFRQTV9FUlJPUl9TSVpFKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMiB2ZXJzaW9uXG4iLAotCQkJYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKSk7Ci0JCWdvdG8gb3V0OwotCX0KKwkJICAgICAgIGJlMzJfdG9fY3B1KGNhcC5tYW51ZmFjdHVyZXJfaWQpKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBDQVBfVkVSU0lPTl8xXzIsICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjIgdmVyc2lvbiIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CiAJc3RyICs9IHNwcmludGYoc3RyLAogCQkgICAgICAgIlRDRyB2ZXJzaW9uOiAlZC4lZFxuRmlybXdhcmUgdmVyc2lvbjogJWQuJWRcbiIsCi0JCSAgICAgICAoaW50KSBkYXRhWzE2XSwgKGludCkgZGF0YVsxN10sIChpbnQpIGRhdGFbMThdLAotCQkgICAgICAgKGludCkgZGF0YVsxOV0pOwotCi1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7CisJCSAgICAgICBjYXAudHBtX3ZlcnNpb25fMV8yLk1ham9yLCBjYXAudHBtX3ZlcnNpb25fMV8yLk1pbm9yLAorCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uXzFfMi5yZXZNYWpvciwKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbl8xXzIucmV2TWlub3IpOwogCXJldHVybiBzdHIgLSBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzXzFfMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaAppbmRleCA4ZTMwZGY0Li44ZTAwYjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90cG0uaD4KIAogZW51bSB0cG1fdGltZW91dCB7CiAJVFBNX1RJTUVPVVQgPSA1LAkvKiBtc2VjcyAqLwpAQCAtMTIzLDYgKzEyNCwxNDcgQEAKIAlvdXRiKGluZGV4LCBiYXNlKTsKIAlvdXRiKHZhbHVlICYgMHhGRiwgYmFzZSsxKTsKIH0KK3N0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHsKKwlfX2JlMTYJdGFnOworCV9fYmUzMglsZW5ndGg7CisJX19iZTMyCW9yZGluYWw7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0cG1fb3V0cHV0X2hlYWRlciB7CisJX19iZTE2CXRhZzsKKwlfX2JlMzIJbGVuZ3RoOworCV9fYmUzMglyZXR1cm5fY29kZTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXN0Y2xlYXJfZmxhZ3NfdCB7CisJX19iZTE2CXRhZzsKKwl1OAlkZWFjdGl2YXRlZDsKKwl1OAlkaXNhYmxlRm9yY2VDbGVhcjsKKwl1OAlwaHlzaWNhbFByZXNlbmNlOworCXU4CXBoeXNpY2FsUHJlc2VuY2VMb2NrOworCXU4CWJHbG9iYWxMb2NrOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX3ZlcnNpb25fdCB7CisJdTgJTWFqb3I7CisJdTgJTWlub3I7CisJdTgJcmV2TWFqb3I7CisJdTgJcmV2TWlub3I7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fdmVyc2lvbl8xXzJfdCB7CisJX19iZTE2CXRhZzsKKwl1OAlNYWpvcjsKKwl1OAlNaW5vcjsKKwl1OAlyZXZNYWpvcjsKKwl1OAlyZXZNaW5vcjsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRpbWVvdXRfdCB7CisJX19iZTMyCWE7CisJX19iZTMyCWI7CisJX19iZTMyCWM7CisJX19iZTMyCWQ7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkdXJhdGlvbl90IHsKKwlfX2JlMzIJdHBtX3Nob3J0OworCV9fYmUzMgl0cG1fbWVkaXVtOworCV9fYmUzMgl0cG1fbG9uZzsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHBlcm1hbmVudF9mbGFnc190IHsKKwlfX2JlMTYJdGFnOworCXU4CWRpc2FibGU7CisJdTgJb3duZXJzaGlwOworCXU4CWRlYWN0aXZhdGVkOworCXU4CXJlYWRQdWJlazsKKwl1OAlkaXNhYmxlT3duZXJDbGVhcjsKKwl1OAlhbGxvd01haW50ZW5hbmNlOworCXU4CXBoeXNpY2FsUHJlc2VuY2VMaWZldGltZUxvY2s7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUhXRW5hYmxlOworCXU4CXBoeXNpY2FsUHJlc2VuY2VDTURFbmFibGU7CisJdTgJQ0VLUFVzZWQ7CisJdTgJVFBNcG9zdDsKKwl1OAlUUE1wb3N0TG9jazsKKwl1OAlGSVBTOworCXU4CW9wZXJhdG9yOworCXU4CWVuYWJsZVJldm9rZUVLOworCXU4CW52TG9ja2VkOworCXU4CXJlYWRTUktQdWI7CisJdTgJdHBtRXN0YWJsaXNoZWQ7CisJdTgJbWFpbnRlbmFuY2VEb25lOworCXU4CWRpc2FibGVGdWxsREFMb2dpY0luZm87Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdAlwZXJtYW5lbnRfZmxhZ3NfdCBwZXJtX2ZsYWdzOworCXN0cnVjdAlzdGNsZWFyX2ZsYWdzX3QJc3RjbGVhcl9mbGFnczsKKwlib29sCW93bmVkOworCV9fYmUzMgludW1fcGNyczsKKwlzdHJ1Y3QJdHBtX3ZlcnNpb25fdAl0cG1fdmVyc2lvbjsKKwlzdHJ1Y3QJdHBtX3ZlcnNpb25fMV8yX3QgdHBtX3ZlcnNpb25fMV8yOworCV9fYmUzMgltYW51ZmFjdHVyZXJfaWQ7CisJc3RydWN0IHRpbWVvdXRfdCAgdGltZW91dDsKKwlzdHJ1Y3QgZHVyYXRpb25fdCBkdXJhdGlvbjsKK30gY2FwX3Q7CisKK3N0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19pbiB7CisJX19iZTMyCWNhcDsKKwlfX2JlMzIJc3ViY2FwX3NpemU7CisJX19iZTMyCXN1YmNhcDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX291dCB7CisJX19iZTMyCWNhcF9zaXplOworCWNhcF90CWNhcDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV9yZWFkcHViZWtfcGFyYW1zX291dCB7CisJdTgJYWxnb3JpdGhtWzRdOworCXU4CWVuY3NjaGVtZVsyXTsKKwl1OAlzaWdzY2hlbWVbMl07CisJdTgJcGFyYW1ldGVyc1sxMl07IC8qYXNzdW1pbmcgUlNBKi8KKwlfX2JlMzIJa2V5c2l6ZTsKKwl1OAltb2R1bHVzWzI1Nl07CisJdTgJY2hlY2tzdW1bMjBdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QJdHBtX2lucHV0X2hlYWRlciBpbjsKKwlzdHJ1Y3QJdHBtX291dHB1dF9oZWFkZXIgb3V0OworfSB0cG1fY21kX2hlYWRlcjsKKworI2RlZmluZSBUUE1fRElHRVNUX1NJWkUgMjAKK3N0cnVjdCB0cG1fcGNycmVhZF9vdXQgeworCXU4CXBjcl9yZXN1bHRbVFBNX0RJR0VTVF9TSVpFXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRwbV9wY3JyZWFkX2luIHsKKwlfX2JlMzIJcGNyX2lkeDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRwbV9wY3JleHRlbmRfaW4geworCV9fYmUzMglwY3JfaWR4OworCXU4CWhhc2hbVFBNX0RJR0VTVF9TSVpFXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX291dCBnZXRjYXBfb3V0OworCXN0cnVjdAl0cG1fcmVhZHB1YmVrX3BhcmFtc19vdXQgcmVhZHB1YmVrX291dDsKKwl1OAlyZWFkcHViZWtfb3V0X2J1ZmZlcltzaXplb2Yoc3RydWN0IHRwbV9yZWFkcHViZWtfcGFyYW1zX291dCldOworCXN0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19pbiBnZXRjYXBfaW47CisJc3RydWN0CXRwbV9wY3JyZWFkX2luCXBjcnJlYWRfaW47CisJc3RydWN0CXRwbV9wY3JyZWFkX291dAlwY3JyZWFkX291dDsKKwlzdHJ1Y3QJdHBtX3BjcmV4dGVuZF9pbiBwY3JleHRlbmRfaW47Cit9IHRwbV9jbWRfcGFyYW1zOworCitzdHJ1Y3QgdHBtX2NtZF90IHsKKwl0cG1fY21kX2hlYWRlcgloZWFkZXI7CisJdHBtX2NtZF9wYXJhbXMJcGFyYW1zOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzc2l6ZV90CXRwbV9nZXRjYXAoc3RydWN0IGRldmljZSAqLCBfX2JlMzIsIGNhcF90ICosIGNvbnN0IGNoYXIgKik7CiAKIGV4dGVybiB2b2lkIHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICopOwogZXh0ZXJuIHZvaWQgdHBtX2dlbl9pbnRlcnJ1cHQoc3RydWN0IHRwbV9jaGlwICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKaW5kZXggZDBlNzkyNi4uYzY0YTFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCkBAIC0xNjgsMTIgKzE2OCwyMiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF0bWxfZHJ2ID0gewotCS5uYW1lID0gInRwbV9hdG1lbCIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuc3VzcGVuZCA9IHRwbV9wbV9zdXNwZW5kLAotCS5yZXN1bWUgPSB0cG1fcG1fcmVzdW1lLAorc3RhdGljIGludCB0cG1fYXRtbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gdHBtX3BtX3N1c3BlbmQoJmRldi0+ZGV2LCBtc2cpOworfQorCitzdGF0aWMgaW50IHRwbV9hdG1sX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWxfZHJ2ID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRwbV9hdG1lbCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kID0gdHBtX2F0bWxfc3VzcGVuZCwKKwkucmVzdW1lID0gdHBtX2F0bWxfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9hdG1lbCh2b2lkKQpAQCAtMTg0LDcgKzE5NCw3IEBACiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCXN0cnVjdCAgdHBtX2NoaXAgKmNoaXA7CiAKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmYXRtbF9kcnYpOworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdG1sX2Rydik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIyMywxMyArMjMzLDEzIEBACiAJCWF0bWVsX3JlbGVhc2VfcmVnaW9uKGJhc2UsCiAJCQkJICAgICByZWdpb25fc2l6ZSk7CiBlcnJfdW5yZWdfZHJ2OgotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2F0bWVsKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOwogCWF0bWxfcGxhdF9yZW1vdmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwppbmRleCA3MTdhZjdhLi5hZWMxOTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpAQCAtNjU0LDEyICs2NTQsMjIgQEAKIAkJICAgIHNpemVvZih0cG1fcG5wX3RibFtUSVNfSElEX1VTUl9JRFhdLmlkKSwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhpZCwgIlNldCBhZGRpdGlvbmFsIHNwZWNpZmljIEhJRCBmb3IgdGhpcyBkcml2ZXIgdG8gcHJvYmUiKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRpc19kcnYgPSB7Ci0JLm5hbWUgPSAidHBtX3RpcyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuc3VzcGVuZCA9IHRwbV9wbV9zdXNwZW5kLAotCS5yZXN1bWUgPSB0cG1fcG1fcmVzdW1lLAorc3RhdGljIGludCB0cG1fdGlzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiB0cG1fcG1fc3VzcGVuZCgmZGV2LT5kZXYsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgdHBtX3Rpc19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiB0cG1fcG1fcmVzdW1lKCZkZXYtPmRldik7Cit9CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aXNfZHJ2ID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRwbV90aXMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCA9IHRwbV90aXNfc3VzcGVuZCwKKwkucmVzdW1lID0gdHBtX3Rpc19yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKQEAgLTY3MiwxNCArNjgyLDE0IEBACiAJaW50IHJjOwogCiAJaWYgKGZvcmNlKSB7Ci0JCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZ0aXNfZHJ2KTsKKwkJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRpc19kcnYpOwogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCQlpZiAoSVNfRVJSKHBkZXY9cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgidHBtX3RpcyIsIC0xLCBOVUxMLCAwKSkpCiAJCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKIAkJaWYoKHJjPXRwbV90aXNfaW5pdCgmcGRldi0+ZGV2LCBUSVNfTUVNX0JBU0UsIFRJU19NRU1fTEVOLCAwKSkgIT0gMCkgewogCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci0JCQlkcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CiAJCX0KIAkJcmV0dXJuIHJjOwogCX0KQEAgLTcxMSw3ICs3MjEsNyBAQAogCiAJaWYgKGZvcmNlKSB7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKIAl9IGVsc2UKIAkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZ0aXNfcG5wX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggYmM4NGUxMi4uMjI0ZjI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMjE2MiwxMyArMjE2MiwxMiBAQAogCWlmIChnZXRfdXNlcihub25ibG9jaywgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JLyogZmlsZS0+Zl9mbGFncyBpcyBzdGlsbCBCS0wgcHJvdGVjdGVkIGluIHRoZSBmcyBsYXllciAtIHZvbWl0ICovCi0JbG9ja19rZXJuZWwoKTsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJaWYgKG5vbmJsb2NrKQogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAJZWxzZQogCQlmaWxlLT5mX2ZsYWdzICY9IH5PX05PTkJMT0NLOwotCXVubG9ja19rZXJuZWwoKTsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCmluZGV4IDRmM2IzZjkuLmQ5NGQyNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYworKysgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKQEAgLTQ3OSwxOCArNDc5LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnZjX2NsYXNzOwogCi12b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit2b2lkIHZjc19tYWtlX3N5c2ZzKGludCBpbmRleCkKIHsKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwgTlVMTCwKLQkJICAgICAgInZjcyV1IiwgdHR5LT5pbmRleCArIDEpOwotCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksIE5VTEwsCi0JCSAgICAgICJ2Y3NhJXUiLCB0dHktPmluZGV4ICsgMSk7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEpLCBOVUxMLAorCQkgICAgICAidmNzJXUiLCBpbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxMjkpLCBOVUxMLAorCQkgICAgICAidmNzYSV1IiwgaW5kZXggKyAxKTsKIH0KIAotdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit2b2lkIHZjc19yZW1vdmVfc3lzZnMoaW50IGluZGV4KQogewotCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSk7Ci0JZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSkpOworCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMSkpOworCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMTI5KSk7CiB9CiAKIGludCBfX2luaXQgdmNzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggNzkwMGJkNi4uMmMxZDEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTc3OCw2ICs3NzgsNyBAQAogCSAgICB9CiAJICAgIHZjLT52Y19rbWFsbG9jZWQgPSAxOwogCSAgICB2Y19pbml0KHZjLCB2Yy0+dmNfcm93cywgdmMtPnZjX2NvbHMsIDEpOworCSAgICB2Y3NfbWFrZV9zeXNmcyhjdXJyY29ucyk7CiAJICAgIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZ2dF9ub3RpZmllcl9saXN0LCBWVF9BTExPQ0FURSwgJnBhcmFtKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC05ODcsNyArOTg4LDkgQEAKIAlpZiAodmNfY29uc19hbGxvY2F0ZWQoY3VycmNvbnMpKSB7CiAJCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbY3VycmNvbnNdLmQ7CiAJCXN0cnVjdCB2dF9ub3RpZmllcl9wYXJhbSBwYXJhbSA9IHsgLnZjID0gdmMgfTsKKwogCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmdnRfbm90aWZpZXJfbGlzdCwgVlRfREVBTExPQ0FURSwgJnBhcmFtKTsKKwkJdmNzX3JlbW92ZV9zeXNmcyhjdXJyY29ucyk7CiAJCXZjLT52Y19zdy0+Y29uX2RlaW5pdCh2Yyk7CiAJCXB1dF9waWQodmMtPnZ0X3BpZCk7CiAJCW1vZHVsZV9wdXQodmMtPnZjX3N3LT5vd25lcik7CkBAIC0yNzc1LDcgKzI3NzgsNiBAQAogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyB8PSBJVVRGODsKIAkJCWVsc2UKIAkJCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgJj0gfklVVEY4OwotCQkJdmNzX21ha2Vfc3lzZnModHR5KTsKIAkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTI3OTUsNyArMjc5Nyw2IEBACiAJQlVHX09OKHZjID09IE5VTEwpOwogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAl2Yy0+dmNfdHR5ID0gTlVMTDsKLQl2Y3NfcmVtb3ZlX3N5c2ZzKHR0eSk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCXR0eV9zaHV0ZG93bih0dHkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggMTUyNTg4Mi4uMWVmYjI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC0yLDMgKzIsNCBAQAogb2JqLSQoQ09ORklHX1g4Nl9DWUNMT05FX1RJTUVSKQkrPSBjeWNsb25lLm8KIG9iai0kKENPTkZJR19YODZfUE1fVElNRVIpCSs9IGFjcGlfcG0ubwogb2JqLSQoQ09ORklHX1NDeDIwMEhSX1RJTUVSKQkrPSBzY3gyMDBfaHJ0Lm8KK29iai0kKENPTkZJR19TSF9USU1FUl9DTVQpCSs9IHNoX2NtdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCmluZGV4IGUxMTI5ZmEuLmVlMTliNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlICJtYWNoX3RpbWVyLmgiCisjaW5jbHVkZSA8YXNtL21hY2hfdGltZXIuaD4KICNkZWZpbmUgUE1UTVJfRVhQRUNURURfUkFURSBcCiAgICgoQ0FMSUJSQVRFX0xBVENIICogKFBNVE1SX1RJQ0tTX1BFUl9TRUMgPj4gMTApKSAvIChDTE9DS19USUNLX1JBVEU+PjEwKSkKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3ljbG9uZS5jCmluZGV4IDFiZGUzMDMuLjg2MTUwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3ljbG9uZS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3ljbG9uZS5jCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlICJtYWNoX3RpbWVyLmgiCisjaW5jbHVkZSA8YXNtL21hY2hfdGltZXIuaD4KIAogI2RlZmluZSBDWUNMT05FX0NCQVJfQUREUgkweEZFQjAwQ0QwCS8qIGJhc2UgYWRkcmVzcyBwdHIgKi8KICNkZWZpbmUgQ1lDTE9ORV9QTUNDX09GRlNFVAkweDUxQTAJCS8qIG9mZnNldCB0byBjb250cm9sIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgzYjQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtMCwwICsxLDYxNSBAQAorLyoKKyAqIFN1cGVySCBUaW1lciBTdXBwb3J0IC0gQ01UCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgorCitzdHJ1Y3Qgc2hfY210X3ByaXYgeworCXZvaWQgX19pb21lbSAqbWFwYmFzZTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgbG9uZyB3aWR0aDsgLyogMTYgb3IgMzIgYml0IHZlcnNpb24gb2YgaGFyZHdhcmUgYmxvY2sgKi8KKwl1bnNpZ25lZCBsb25nIG92ZXJmbG93X2JpdDsKKwl1bnNpZ25lZCBsb25nIGNsZWFyX2JpdHM7CisJc3RydWN0IGlycWFjdGlvbiBpcnFhY3Rpb247CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIG5leHRfbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBtYXhfbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNlZDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX2N5Y2xlczsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2hfY210X2xvY2spOworCisjZGVmaW5lIENNU1RSIC0xIC8qIHNoYXJlZCByZWdpc3RlciAqLworI2RlZmluZSBDTUNTUiAwIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01DTlQgMSAvKiBjaGFubmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ09SIDIgLyogY2hhbm5lbCByZWdpc3RlciAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2hfY210X3JlYWQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcmVnX25yKQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwLT5tYXBiYXNlOworCXVuc2lnbmVkIGxvbmcgb2ZmczsKKworCWlmIChyZWdfbnIgPT0gQ01TVFIpIHsKKwkJb2ZmcyA9IDA7CisJCWJhc2UgLT0gY2ZnLT5jaGFubmVsX29mZnNldDsKKwl9IGVsc2UKKwkJb2ZmcyA9IHJlZ19ucjsKKworCWlmIChwLT53aWR0aCA9PSAxNikKKwkJb2ZmcyA8PD0gMTsKKwllbHNlIHsKKwkJb2ZmcyA8PD0gMjsKKwkJaWYgKChyZWdfbnIgPT0gQ01DTlQpIHx8IChyZWdfbnIgPT0gQ01DT1IpKQorCQkJcmV0dXJuIGlvcmVhZDMyKGJhc2UgKyBvZmZzKTsKKwl9CisKKwlyZXR1cm4gaW9yZWFkMTYoYmFzZSArIG9mZnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfY210X3dyaXRlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHJlZ19uciwKKwkJCQl1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwLT5tYXBiYXNlOworCXVuc2lnbmVkIGxvbmcgb2ZmczsKKworCWlmIChyZWdfbnIgPT0gQ01TVFIpIHsKKwkJb2ZmcyA9IDA7CisJCWJhc2UgLT0gY2ZnLT5jaGFubmVsX29mZnNldDsKKwl9IGVsc2UKKwkJb2ZmcyA9IHJlZ19ucjsKKworCWlmIChwLT53aWR0aCA9PSAxNikKKwkJb2ZmcyA8PD0gMTsKKwllbHNlIHsKKwkJb2ZmcyA8PD0gMjsKKwkJaWYgKChyZWdfbnIgPT0gQ01DTlQpIHx8IChyZWdfbnIgPT0gQ01DT1IpKSB7CisJCQlpb3dyaXRlMzIodmFsdWUsIGJhc2UgKyBvZmZzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlvd3JpdGUxNih2YWx1ZSwgYmFzZSArIG9mZnMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9jbXRfZ2V0X2NvdW50ZXIoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorCQkJCQlpbnQgKmhhc193cmFwcGVkKQoreworCXVuc2lnbmVkIGxvbmcgdjEsIHYyLCB2MzsKKworCS8qIE1ha2Ugc3VyZSB0aGUgdGltZXIgdmFsdWUgaXMgc3RhYmxlLiBTdG9sZW4gZnJvbSBhY3BpX3BtLmMgKi8KKwlkbyB7CisJCXYxID0gc2hfY210X3JlYWQocCwgQ01DTlQpOworCQl2MiA9IHNoX2NtdF9yZWFkKHAsIENNQ05UKTsKKwkJdjMgPSBzaF9jbXRfcmVhZChwLCBDTUNOVCk7CisJfSB3aGlsZSAodW5saWtlbHkoKHYxID4gdjIgJiYgdjEgPCB2MykgfHwgKHYyID4gdjMgJiYgdjIgPCB2MSkKKwkJCSAgfHwgKHYzID4gdjEgJiYgdjMgPCB2MikpKTsKKworCSpoYXNfd3JhcHBlZCA9IHNoX2NtdF9yZWFkKHAsIENNQ1NSKSAmIHAtPm92ZXJmbG93X2JpdDsKKwlyZXR1cm4gdjI7Cit9CisKKworc3RhdGljIHZvaWQgc2hfY210X3N0YXJ0X3N0b3BfY2goc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgc3RhcnQpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbHVlOworCisJLyogc3RhcnQgc3RvcCByZWdpc3RlciBzaGFyZWQgYnkgbXVsdGlwbGUgdGltZXIgY2hhbm5lbHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2hfY210X2xvY2ssIGZsYWdzKTsKKwl2YWx1ZSA9IHNoX2NtdF9yZWFkKHAsIENNU1RSKTsKKworCWlmIChzdGFydCkKKwkJdmFsdWUgfD0gMSA8PCBjZmctPnRpbWVyX2JpdDsKKwllbHNlCisJCXZhbHVlICY9IH4oMSA8PCBjZmctPnRpbWVyX2JpdCk7CisKKwlzaF9jbXRfd3JpdGUocCwgQ01TVFIsIHZhbHVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaF9jbXRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9lbmFibGUoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nICpyYXRlKQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJLyogZW5hYmxlIGNsb2NrICovCisJcmV0ID0gY2xrX2VuYWJsZShwLT5jbGspOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGNhbm5vdCBlbmFibGUgY2xvY2sgXCIlc1wiXG4iLCBjZmctPmNsayk7CisJCXJldHVybiByZXQ7CisJfQorCSpyYXRlID0gY2xrX2dldF9yYXRlKHAtPmNsaykgLyA4OworCisJLyogbWFrZSBzdXJlIGNoYW5uZWwgaXMgZGlzYWJsZWQgKi8KKwlzaF9jbXRfc3RhcnRfc3RvcF9jaChwLCAwKTsKKworCS8qIGNvbmZpZ3VyZSBjaGFubmVsLCBwZXJpb2RpYyBtb2RlIGFuZCBtYXhpbXVtIHRpbWVvdXQgKi8KKwlpZiAocC0+d2lkdGggPT0gMTYpCisJCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgMCk7CisJZWxzZQorCQlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIDB4MDFhNCk7CisKKwlzaF9jbXRfd3JpdGUocCwgQ01DT1IsIDB4ZmZmZmZmZmYpOworCXNoX2NtdF93cml0ZShwLCBDTUNOVCwgMCk7CisKKwkvKiBlbmFibGUgY2hhbm5lbCAqLworCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfZGlzYWJsZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnApCit7CisJLyogZGlzYWJsZSBjaGFubmVsICovCisJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisKKwkvKiBzdG9wIGNsb2NrICovCisJY2xrX2Rpc2FibGUocC0+Y2xrKTsKK30KKworLyogcHJpdmF0ZSBmbGFncyAqLworI2RlZmluZSBGTEFHX0NMT0NLRVZFTlQgKDEgPDwgMCkKKyNkZWZpbmUgRkxBR19DTE9DS1NPVVJDRSAoMSA8PCAxKQorI2RlZmluZSBGTEFHX1JFUFJPR1JBTSAoMSA8PCAyKQorI2RlZmluZSBGTEFHX1NLSVBFVkVOVCAoMSA8PCAzKQorI2RlZmluZSBGTEFHX0lSUUNPTlRFWFQgKDEgPDwgNCkKKworc3RhdGljIHZvaWQgc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKKwkJCQkJICAgICAgaW50IGFic29sdXRlKQoreworCXVuc2lnbmVkIGxvbmcgbmV3X21hdGNoOworCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSBwLT5uZXh0X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOworCXVuc2lnbmVkIGxvbmcgbm93ID0gMDsKKwlpbnQgaGFzX3dyYXBwZWQ7CisKKwlub3cgPSBzaF9jbXRfZ2V0X2NvdW50ZXIocCwgJmhhc193cmFwcGVkKTsKKwlwLT5mbGFncyB8PSBGTEFHX1JFUFJPR1JBTTsgLyogZm9yY2UgcmVwcm9ncmFtICovCisKKwlpZiAoaGFzX3dyYXBwZWQpIHsKKwkJLyogd2UncmUgY29tcGV0aW5nIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLgorCQkgKiAgLT4gbGV0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByZXByb2dyYW0gdGhlIHRpbWVyLgorCQkgKiAgLT4gaW50ZXJydXB0IG51bWJlciB0d28gaGFuZGxlcyB0aGUgZXZlbnQuCisJCSAqLworCQlwLT5mbGFncyB8PSBGTEFHX1NLSVBFVkVOVDsKKwkJcmV0dXJuOworCX0KKworCWlmIChhYnNvbHV0ZSkKKwkJbm93ID0gMDsKKworCWRvIHsKKwkJLyogcmVwcm9ncmFtIHRoZSB0aW1lciBoYXJkd2FyZSwKKwkJICogYnV0IGRvbid0IHNhdmUgdGhlIG5ldyBtYXRjaCB2YWx1ZSB5ZXQuCisJCSAqLworCQluZXdfbWF0Y2ggPSBub3cgKyB2YWx1ZSArIGRlbGF5OworCQlpZiAobmV3X21hdGNoID4gcC0+bWF4X21hdGNoX3ZhbHVlKQorCQkJbmV3X21hdGNoID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCisJCXNoX2NtdF93cml0ZShwLCBDTUNPUiwgbmV3X21hdGNoKTsKKworCQlub3cgPSBzaF9jbXRfZ2V0X2NvdW50ZXIocCwgJmhhc193cmFwcGVkKTsKKwkJaWYgKGhhc193cmFwcGVkICYmIChuZXdfbWF0Y2ggPiBwLT5tYXRjaF92YWx1ZSkpIHsKKwkJCS8qIHdlIGFyZSBjaGFuZ2luZyB0byBhIGdyZWF0ZXIgbWF0Y2ggdmFsdWUsCisJCQkgKiBzbyB0aGlzIHdyYXAgbXVzdCBiZSBjYXVzZWQgYnkgdGhlIGNvdW50ZXIKKwkJCSAqIG1hdGNoaW5nIHRoZSBvbGQgdmFsdWUuCisJCQkgKiAtPiBmaXJzdCBpbnRlcnJ1cHQgcmVwcm9ncmFtcyB0aGUgdGltZXIuCisJCQkgKiAtPiBpbnRlcnJ1cHQgbnVtYmVyIHR3byBoYW5kbGVzIHRoZSBldmVudC4KKwkJCSAqLworCQkJcC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChoYXNfd3JhcHBlZCkgeworCQkJLyogd2UgYXJlIGNoYW5naW5nIHRvIGEgc21hbGxlciBtYXRjaCB2YWx1ZSwKKwkJCSAqIHNvIHRoZSB3cmFwIG11c3QgYmUgY2F1c2VkIGJ5IHRoZSBjb3VudGVyCisJCQkgKiBtYXRjaGluZyB0aGUgbmV3IHZhbHVlLgorCQkJICogLT4gc2F2ZSBwcm9ncmFtbWVkIG1hdGNoIHZhbHVlLgorCQkJICogLT4gbGV0IGlzciBoYW5kbGUgdGhlIGV2ZW50LgorCQkJICovCisJCQlwLT5tYXRjaF92YWx1ZSA9IG5ld19tYXRjaDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogYmUgc2FmZTogdmVyaWZ5IGhhcmR3YXJlIHNldHRpbmdzICovCisJCWlmIChub3cgPCBuZXdfbWF0Y2gpIHsKKwkJCS8qIHRpbWVyIHZhbHVlIGlzIGJlbG93IG1hdGNoIHZhbHVlLCBhbGwgZ29vZC4KKwkJCSAqIHRoaXMgbWFrZXMgc3VyZSB3ZSB3b24ndCBtaXNzIGFueSBtYXRjaCBldmVudHMuCisJCQkgKiAtPiBzYXZlIHByb2dyYW1tZWQgbWF0Y2ggdmFsdWUuCisJCQkgKiAtPiBsZXQgaXNyIGhhbmRsZSB0aGUgZXZlbnQuCisJCQkgKi8KKwkJCXAtPm1hdGNoX3ZhbHVlID0gbmV3X21hdGNoOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB0aGUgY291bnRlciBoYXMgcmVhY2hlZCBhIHZhbHVlIGdyZWF0ZXIKKwkJICogdGhhbiBvdXIgbmV3IG1hdGNoIHZhbHVlLiBhbmQgc2luY2UgdGhlCisJCSAqIGhhc193cmFwcGVkIGZsYWcgaXNuJ3Qgc2V0IHdlIG11c3QgaGF2ZQorCQkgKiBwcm9ncmFtbWVkIGEgdG9vIGNsb3NlIGV2ZW50LgorCQkgKiAtPiBpbmNyZWFzZSBkZWxheSBhbmQgcmV0cnkuCisJCSAqLworCQlpZiAoZGVsYXkpCisJCQlkZWxheSA8PD0gMTsKKwkJZWxzZQorCQkJZGVsYXkgPSAxOworCisJCWlmICghZGVsYXkpCisJCQlwcl93YXJuaW5nKCJzaF9jbXQ6IHRvbyBsb25nIGRlbGF5XG4iKTsKKworCX0gd2hpbGUgKGRlbGF5KTsKK30KKworc3RhdGljIHZvaWQgc2hfY210X3NldF9uZXh0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBkZWx0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRlbHRhID4gcC0+bWF4X21hdGNoX3ZhbHVlKQorCQlwcl93YXJuaW5nKCJzaF9jbXQ6IGRlbHRhIG91dCBvZiByYW5nZVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBkZWx0YTsKKwlzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkocCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfY210X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gZGV2X2lkOworCisJLyogY2xlYXIgZmxhZ3MgKi8KKwlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIHNoX2NtdF9yZWFkKHAsIENNQ1NSKSAmIHAtPmNsZWFyX2JpdHMpOworCisJLyogdXBkYXRlIGNsb2NrIHNvdXJjZSBjb3VudGVyIHRvIGJlZ2luIHdpdGggaWYgZW5hYmxlZAorCSAqIHRoZSB3cmFwIGZsYWcgc2hvdWxkIGJlIGNsZWFyZWQgYnkgdGhlIHRpbWVyIHNwZWNpZmljCisJICogaXNyIGJlZm9yZSB3ZSBlbmQgdXAgaGVyZS4KKwkgKi8KKwlpZiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLU09VUkNFKQorCQlwLT50b3RhbF9jeWNsZXMgKz0gcC0+bWF0Y2hfdmFsdWU7CisKKwlpZiAoIShwLT5mbGFncyAmIEZMQUdfUkVQUk9HUkFNKSkKKwkJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKworCXAtPmZsYWdzIHw9IEZMQUdfSVJRQ09OVEVYVDsKKworCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkgeworCQlpZiAoIShwLT5mbGFncyAmIEZMQUdfU0tJUEVWRU5UKSkgeworCQkJaWYgKHAtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKKwkJCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCQkJCXAtPmZsYWdzIHw9IEZMQUdfUkVQUk9HUkFNOworCQkJfQorCisJCQlwLT5jZWQuZXZlbnRfaGFuZGxlcigmcC0+Y2VkKTsKKwkJfQorCX0KKworCXAtPmZsYWdzICY9IH5GTEFHX1NLSVBFVkVOVDsKKworCWlmIChwLT5mbGFncyAmIEZMQUdfUkVQUk9HUkFNKSB7CisJCXAtPmZsYWdzICY9IH5GTEFHX1JFUFJPR1JBTTsKKwkJc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHAsIDEpOworCisJCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkKKwkJCWlmICgocC0+Y2VkLm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfU0hVVERPV04pCisJCQkgICAgfHwgKHAtPm1hdGNoX3ZhbHVlID09IHAtPm5leHRfbWF0Y2hfdmFsdWUpKQorCQkJCXAtPmZsYWdzICY9IH5GTEFHX1JFUFJPR1JBTTsKKwl9CisKKwlwLT5mbGFncyAmPSB+RkxBR19JUlFDT05URVhUOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9zdGFydChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCWlmICghKHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKKwkJcmV0ID0gc2hfY210X2VuYWJsZShwLCAmcC0+cmF0ZSk7CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlwLT5mbGFncyB8PSBmbGFnOworCisJLyogc2V0dXAgdGltZW91dCBpZiBubyBjbG9ja2V2ZW50ICovCisJaWYgKChmbGFnID09IEZMQUdfQ0xPQ0tTT1VSQ0UpICYmICghKHAtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKSkpCisJCXNoX2NtdF9zZXRfbmV4dChwLCBwLT5tYXhfbWF0Y2hfdmFsdWUpOworIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfc3RvcChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlmID0gcC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSk7CisJcC0+ZmxhZ3MgJj0gfmZsYWc7CisKKwlpZiAoZiAmJiAhKHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKKwkJc2hfY210X2Rpc2FibGUocCk7CisKKwkvKiBhZGp1c3QgdGhlIHRpbWVvdXQgdG8gbWF4aW11bSBpZiBvbmx5IGNsb2Nrc291cmNlIGxlZnQgKi8KKwlpZiAoKGZsYWcgPT0gRkxBR19DTE9DS0VWRU5UKSAmJiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLU09VUkNFKSkKKwkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X3ByaXYgKmNlZF90b19zaF9jbXQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2VkLCBzdHJ1Y3Qgc2hfY210X3ByaXYsIGNlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9zdGFydChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCBwZXJpb2RpYykKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmcC0+Y2VkOworCisJc2hfY210X3N0YXJ0KHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisKKwkvKiBUT0RPOiBjYWxjdWxhdGUgZ29vZCBzaGlmdCBmcm9tIHJhdGUgYW5kIGNvdW50ZXIgYml0IHdpZHRoICovCisKKwljZWQtPnNoaWZ0ID0gMzI7CisJY2VkLT5tdWx0ID0gZGl2X3NjKHAtPnJhdGUsIE5TRUNfUEVSX1NFQywgY2VkLT5zaGlmdCk7CisJY2VkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKHAtPm1heF9tYXRjaF92YWx1ZSwgY2VkKTsKKwljZWQtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgxZiwgY2VkKTsKKworCWlmIChwZXJpb2RpYykKKwkJc2hfY210X3NldF9uZXh0KHAsIChwLT5yYXRlICsgSFovMikgLyBIWik7CisJZWxzZQorCQlzaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgc2hfY210X2Nsb2NrX2V2ZW50X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjZWRfdG9fc2hfY210KGNlZCk7CisKKwkvKiBkZWFsIHdpdGggb2xkIHNldHRpbmcgZmlyc3QgKi8KKwlzd2l0Y2ggKGNlZC0+bW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlzaF9jbXRfc3RvcChwLCBGTEFHX0NMT0NLRVZFTlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgZm9yIHBlcmlvZGljIGNsb2NrIGV2ZW50c1xuIiwKKwkJCWNlZC0+bmFtZSk7CisJCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChwLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgZm9yIG9uZXNob3QgY2xvY2sgZXZlbnRzXG4iLAorCQkJY2VkLT5uYW1lKTsKKwkJc2hfY210X2Nsb2NrX2V2ZW50X3N0YXJ0KHAsIDApOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCQlzaF9jbXRfc3RvcChwLCBGTEFHX0NMT0NLRVZFTlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X2Nsb2NrX2V2ZW50X25leHQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY2VkX3RvX3NoX2NtdChjZWQpOworCisJQlVHX09OKGNlZC0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKKwlpZiAobGlrZWx5KHAtPmZsYWdzICYgRkxBR19JUlFDT05URVhUKSkKKwkJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IGRlbHRhOworCWVsc2UKKwkJc2hfY210X3NldF9uZXh0KHAsIGRlbHRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfcmVnaXN0ZXJfY2xvY2tldmVudChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCisJCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisKKwltZW1zZXQoY2VkLCAwLCBzaXplb2YoKmNlZCkpOworCisJY2VkLT5uYW1lID0gbmFtZTsKKwljZWQtPmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CisJY2VkLT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOworCWNlZC0+cmF0aW5nID0gcmF0aW5nOworCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2VkLT5zZXRfbmV4dF9ldmVudCA9IHNoX2NtdF9jbG9ja19ldmVudF9uZXh0OworCWNlZC0+c2V0X21vZGUgPSBzaF9jbXRfY2xvY2tfZXZlbnRfbW9kZTsKKworCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOworCWNlZC0+bXVsdCA9IDE7IC8qIHdvcmsgYXJvdW5kIG1pc3BsYWNlZCBXQVJOX09OKCkgaW4gY2xvY2tldmVudHMuYyAqLworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOworfQorCitpbnQgc2hfY210X3JlZ2lzdGVyKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgY2hhciAqbmFtZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgY2xvY2tldmVudF9yYXRpbmcsCisJCSAgICB1bnNpZ25lZCBsb25nIGNsb2Nrc291cmNlX3JhdGluZykKK3sKKwlpZiAocC0+d2lkdGggPT0gKHNpemVvZihwLT5tYXhfbWF0Y2hfdmFsdWUpICogOCkpCisJCXAtPm1heF9tYXRjaF92YWx1ZSA9IH4wOworCWVsc2UKKwkJcC0+bWF4X21hdGNoX3ZhbHVlID0gKDEgPDwgcC0+d2lkdGgpIC0gMTsKKworCXAtPm1hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKKworCWlmIChjbG9ja2V2ZW50X3JhdGluZykKKwkJc2hfY210X3JlZ2lzdGVyX2Nsb2NrZXZlbnQocCwgbmFtZSwgY2xvY2tldmVudF9yYXRpbmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X3NldHVwKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycSwgcmV0OworCXJldCA9IC1FTlhJTzsKKworCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwlwLT5wZGV2ID0gcGRldjsKKworCWlmICghY2ZnKSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocC0+cGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnFcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJLyogbWFwIG1lbW9yeSwgbGV0IG1hcGJhc2UgcG9pbnQgdG8gb3VyIGNoYW5uZWwgKi8KKwlwLT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKHAtPm1hcGJhc2UgPT0gTlVMTCkgeworCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJLyogcmVxdWVzdCBpcnEgdXNpbmcgc2V0dXBfaXJxKCkgKHRvbyBlYXJseSBmb3IgcmVxdWVzdF9pcnEoKSkgKi8KKwlwLT5pcnFhY3Rpb24ubmFtZSA9IGNmZy0+bmFtZTsKKwlwLT5pcnFhY3Rpb24uaGFuZGxlciA9IHNoX2NtdF9pbnRlcnJ1cHQ7CisJcC0+aXJxYWN0aW9uLmRldl9pZCA9IHA7CisJcC0+aXJxYWN0aW9uLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEw7CisJcC0+aXJxYWN0aW9uLm1hc2sgPSBDUFVfTUFTS19OT05FOworCXJldCA9IHNldHVwX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKKwkJZ290byBlcnIxOworCX0KKworCS8qIGdldCBob2xkIG9mIGNsb2NrICovCisJcC0+Y2xrID0gY2xrX2dldCgmcC0+cGRldi0+ZGV2LCBjZmctPmNsayk7CisJaWYgKElTX0VSUihwLT5jbGspKSB7CisJCXByX2Vycigic2hfY210OiBjYW5ub3QgZ2V0IGNsb2NrIFwiJXNcIlxuIiwgY2ZnLT5jbGspOworCQlyZXQgPSBQVFJfRVJSKHAtPmNsayk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlpZiAocmVzb3VyY2Vfc2l6ZShyZXMpID09IDYpIHsKKwkJcC0+d2lkdGggPSAxNjsKKwkJcC0+b3ZlcmZsb3dfYml0ID0gMHg4MDsKKwkJcC0+Y2xlYXJfYml0cyA9IH4weGMwOworCX0gZWxzZSB7CisJCXAtPndpZHRoID0gMzI7CisJCXAtPm92ZXJmbG93X2JpdCA9IDB4ODAwMDsKKwkJcC0+Y2xlYXJfYml0cyA9IH4weGMwMDA7CisJfQorCisJcmV0dXJuIHNoX2NtdF9yZWdpc3RlcihwLCBjZmctPm5hbWUsCisJCQkgICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKKwkJCSAgICAgICBjZmctPmNsb2Nrc291cmNlX3JhdGluZyk7CisgZXJyMjoKKwlmcmVlX2lycShpcnEsIHApOworIGVycjE6CisJaW91bm1hcChwLT5tYXBiYXNlKTsKKyBlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoX2NtdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAocCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHNoX2NtdF9zZXR1cChwLCBwZGV2KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHApOworCisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaF9jbXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIC1FQlVTWTsgLyogY2Fubm90IHVucmVnaXN0ZXIgY2xvY2tldmVudCBhbmQgY2xvY2tzb3VyY2UgKi8KK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfY210X2RldmljZV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNoX2NtdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX2NtdF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzaF9jbXQiLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX2NtdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2hfY210X2RldmljZV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hfY210X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2hfY210X2RldmljZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaF9jbXRfaW5pdCk7Cittb2R1bGVfZXhpdChzaF9jbXRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hZ251cyBEYW1tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBDTVQgVGltZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwppbmRleCBiNmZlN2U3Li5jNzY5ZWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogCWNuX3F1ZXVlLmMKLSAqIAorICoKICAqIDIwMDQtMjAwNSBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMzEsNiArMzEsNDggQEAKICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisKKy8qCisgKiBUaGlzIGpvYiBpcyBzZW50IHRvIHRoZSBrZXZlbnQgd29ya3F1ZXVlLgorICogV2hpbGUgbm8gZXZlbnQgaXMgb25jZSBzZW50IHRvIGFueSBjYWxsYmFjaywgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUKKyAqIGlzIG5vdCBjcmVhdGVkIHRvIGF2b2lkIGEgdXNlbGVzcyB3YWl0aW5nIGtlcm5lbCB0YXNrLgorICogT25jZSB0aGUgZmlyc3QgZXZlbnQgaXMgcmVjZWl2ZWQsIHdlIGNyZWF0ZSB0aGlzIGRlZGljYXRlZCB3b3JrcXVldWUgd2hpY2gKKyAqIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBmbG93IG9mIGRhdGEgY2FuIGJlIGhpZ2ggYW5kIHdlIGRvbid0IHdhbnQKKyAqIHRvIGVuY3VtYmVyIGtldmVudGQgd2l0aCB0aGF0LgorICovCitzdGF0aWMgdm9pZCBjbl9xdWV1ZV9jcmVhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldjsKKworCWRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY25fcXVldWVfZGV2LCB3cV9jcmVhdGlvbik7CisKKwlkZXYtPmNuX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2LT5uYW1lKTsKKwkvKiBJZiB3ZSBmYWlsLCB3ZSB3aWxsIHVzZSBrZXZlbnRkIGZvciBhbGwgZm9sbG93aW5nIGNvbm5lY3RvciBqb2JzICovCisJV0FSTl9PTighZGV2LT5jbl9xdWV1ZSk7Cit9CisKKy8qCisgKiBRdWV1ZSBhIGRhdGEgc2VudCB0byBhIGNhbGxiYWNrLgorICogSWYgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUgaXMgYWxyZWFkeSBjcmVhdGVkLCB3ZSBxdWV1ZSB0aGUgam9iIG9uIGl0LgorICogT3RoZXJ3aXNlLCB3ZSBxdWV1ZSB0aGUgam9iIHRvIGtldmVudCBhbmQgcXVldWUgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUKKyAqIGNyZWF0aW9uIHRvby4KKyAqLworaW50IHF1ZXVlX2NuX3dvcmsoc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY25fcXVldWVfZGV2ICpwZGV2ID0gY2JxLT5wZGV2OworCisJaWYgKGxpa2VseShwZGV2LT5jbl9xdWV1ZSkpCisJCXJldHVybiBxdWV1ZV93b3JrKHBkZXYtPmNuX3F1ZXVlLCB3b3JrKTsKKworCS8qIERvbid0IGNyZWF0ZSB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZSB0d2ljZSAqLworCWlmIChhdG9taWNfaW5jX3JldHVybigmcGRldi0+d3FfcmVxdWVzdGVkKSA9PSAxKQorCQlzY2hlZHVsZV93b3JrKCZwZGV2LT53cV9jcmVhdGlvbik7CisJZWxzZQorCQlhdG9taWNfZGVjKCZwZGV2LT53cV9yZXF1ZXN0ZWQpOworCisJcmV0dXJuIHNjaGVkdWxlX3dvcmsod29yayk7Cit9CisKIHZvaWQgY25fcXVldWVfd3JhcHBlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEgPQpAQCAtNTgsMTQgKzEwMCwxNyBAQAogCXNucHJpbnRmKGNicS0+aWQubmFtZSwgc2l6ZW9mKGNicS0+aWQubmFtZSksICIlcyIsIG5hbWUpOwogCW1lbWNweSgmY2JxLT5pZC5pZCwgaWQsIHNpemVvZihzdHJ1Y3QgY2JfaWQpKTsKIAljYnEtPmRhdGEuY2FsbGJhY2sgPSBjYWxsYmFjazsKLQkKKwogCUlOSVRfV09SSygmY2JxLT53b3JrLCAmY25fcXVldWVfd3JhcHBlcik7CiAJcmV0dXJuIGNicTsKIH0KIAogc3RhdGljIHZvaWQgY25fcXVldWVfZnJlZV9jYWxsYmFjayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSkKIHsKLQlmbHVzaF93b3JrcXVldWUoY2JxLT5wZGV2LT5jbl9xdWV1ZSk7CisJLyogVGhlIGZpcnN0IGpvYnMgaGF2ZSBiZWVuIHNlbnQgdG8ga2V2ZW50LCBmbHVzaCB0aGVtIHRvbyAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJaWYgKGNicS0+cGRldi0+Y25fcXVldWUpCisJCWZsdXNoX3dvcmtxdWV1ZShjYnEtPnBkZXYtPmNuX3F1ZXVlKTsKIAogCWtmcmVlKGNicSk7CiB9CkBAIC0xNDMsMTQgKzE4OCwxMSBAQAogCWF0b21pY19zZXQoJmRldi0+cmVmY250LCAwKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5xdWV1ZV9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndxX2NyZWF0ZWQpOwogCiAJZGV2LT5ubHMgPSBubHM7CiAKLQlkZXYtPmNuX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2LT5uYW1lKTsKLQlpZiAoIWRldi0+Y25fcXVldWUpIHsKLQkJa2ZyZWUoZGV2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCUlOSVRfV09SSygmZGV2LT53cV9jcmVhdGlvbiwgY25fcXVldWVfY3JlYXRlKTsKIAogCXJldHVybiBkZXY7CiB9CkBAIC0xNTgsOSArMjAwLDI1IEBACiB2b2lkIGNuX3F1ZXVlX2ZyZWVfZGV2KHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgKm47CisJbG9uZyB0aW1lb3V0OworCURFRklORV9XQUlUKHdhaXQpOwogCi0JZmx1c2hfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOworCS8qIEZsdXNoIHRoZSBmaXJzdCBwZW5kaW5nIGpvYnMgcXVldWVkIG9uIGtldmVudCAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBJZiB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZSBjcmVhdGlvbiBpcyBzdGlsbCBwZW5kaW5nLCB3YWl0IGZvciBpdCAqLworCXByZXBhcmVfdG9fd2FpdCgmZGV2LT53cV9jcmVhdGVkLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCWlmIChhdG9taWNfcmVhZCgmZGV2LT53cV9yZXF1ZXN0ZWQpICYmICFkZXYtPmNuX3F1ZXVlKSB7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KEhaICogMik7CisJCWlmICghdGltZW91dCAmJiAhZGV2LT5jbl9xdWV1ZSkKKwkJCVdBUk5fT04oMSk7CisJfQorCWZpbmlzaF93YWl0KCZkZXYtPndxX2NyZWF0ZWQsICZ3YWl0KTsKKworCWlmIChkZXYtPmNuX3F1ZXVlKSB7CisJCWZsdXNoX3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKKwkJZGVzdHJveV93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7CisJfQogCiAJc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYnEsIG4sICZkZXYtPnF1ZXVlX2xpc3QsIGNhbGxiYWNrX2VudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwppbmRleCBiZjQ4MzAwLi5mZDMzNmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAJY29ubmVjdG9yLmMKLSAqIAorICoKICAqIDIwMDQtMjAwNSBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMTQ1LDE0ICsxNDUsMTMgQEAKIAkJCQlfX2NicS0+ZGF0YS5kZGF0YSA9IGRhdGE7CiAJCQkJX19jYnEtPmRhdGEuZGVzdHJ1Y3RfZGF0YSA9IGRlc3RydWN0X2RhdGE7CiAKLQkJCQlpZiAocXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1ZSwKLQkJCQkJCQkmX19jYnEtPndvcmspKQorCQkJCWlmIChxdWV1ZV9jbl93b3JrKF9fY2JxLCAmX19jYnEtPndvcmspKQogCQkJCQllcnIgPSAwOwogCQkJCWVsc2UKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IGNuX2NhbGxiYWNrX2RhdGEgKmQ7Ci0JCQkJCisKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJCV9fbmV3X2NicSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSksIEdGUF9BVE9NSUMpOwogCQkJCWlmIChfX25ld19jYnEpIHsKQEAgLTE2MywxMCArMTYyLDEyIEBACiAJCQkJCWQtPmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCQkJCQlkLT5mcmVlID0gX19uZXdfY2JxOwogCisJCQkJCV9fbmV3X2NicS0+cGRldiA9IF9fY2JxLT5wZGV2OworCiAJCQkJCUlOSVRfV09SSygmX19uZXdfY2JxLT53b3JrLAogCQkJCQkJCSZjbl9xdWV1ZV93cmFwcGVyKTsKIAotCQkJCQlpZiAocXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1ZSwKKwkJCQkJaWYgKHF1ZXVlX2NuX3dvcmsoX19uZXdfY2JxLAogCQkJCQkJICAgICZfX25ld19jYnEtPndvcmspKQogCQkJCQkJZXJyID0gMDsKIAkJCQkJZWxzZSB7CkBAIC0yMzcsNyArMjM4LDcgQEAKIAogCQlyZXEgPSAoc3RydWN0IGNuX25vdGlmeV9yZXEgKiljdGwtPmRhdGE7CiAJCWZvciAoaSA9IDA7IGkgPCBjdGwtPmlkeF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKSB7Ci0JCQlpZiAoaWQtPmlkeCA+PSByZXEtPmZpcnN0ICYmIAorCQkJaWYgKGlkLT5pZHggPj0gcmVxLT5maXJzdCAmJgogCQkJCQlpZC0+aWR4IDwgcmVxLT5maXJzdCArIHJlcS0+cmFuZ2UpIHsKIAkJCQlpZHhfZm91bmQgPSAxOwogCQkJCWJyZWFrOwpAQCAtMjQ1LDcgKzI0Niw3IEBACiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgY3RsLT52YWxfbm90aWZ5X251bTsgKytpLCArK3JlcSkgewotCQkJaWYgKGlkLT52YWwgPj0gcmVxLT5maXJzdCAmJiAKKwkJCWlmIChpZC0+dmFsID49IHJlcS0+Zmlyc3QgJiYKIAkJCQkJaWQtPnZhbCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7CiAJCQkJdmFsX2ZvdW5kID0gMTsKIAkJCQlicmVhazsKQEAgLTQ1OSw3ICs0NjAsNyBAQAogCQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGRldi0+bmxzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCQorCiAJY25fYWxyZWFkeV9pbml0aWFsaXplZCA9IDE7CiAKIAllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmRldi0+aWQsICJjb25uZWN0b3IiLCAmY25fY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggZDZkYWYzYy4uZDI3MGU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0xMDQsNyArMTA0LDggQEAKIAogCiAvKiBpbnRlcm5hbCBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IGV2ZW50KTsKK3N0YXRpYyBpbnQgX19jcHVmcmVxX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQl1bnNpZ25lZCBpbnQgZXZlbnQpOwogc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpOwogc3RhdGljIHZvaWQgaGFuZGxlX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCkBAIC0xMjgsNyArMTI5LDcgQEAKIHB1cmVfaW5pdGNhbGwoaW5pdF9jcHVmcmVxX3RyYW5zaXRpb25fbm90aWZpZXJfbGlzdCk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoY3B1ZnJlcV9nb3Zlcm5vcl9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVggKGNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAogc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVmcmVxX2NwdV9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKQEAgLTM3MSw3ICszNzIsNyBAQAogCXN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICp0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KQotCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vcix0LT5uYW1lLENQVUZSRVFfTkFNRV9MRU4pKQorCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vciwgdC0+bmFtZSwgQ1BVRlJFUV9OQU1FX0xFTikpCiAJCQlyZXR1cm4gdDsKIAogCXJldHVybiBOVUxMOwpAQCAtNDI5LDE1ICs0MzAsMTEgQEAKIAogCQltdXRleF91bmxvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwogCX0KLSAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKIAotLyogZHJpdmVycy9iYXNlL2NwdS5jICovCi1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBjcHVfc3lzZGV2X2NsYXNzOwotCi0KIC8qKgogICogY3B1ZnJlcV9wZXJfY3B1X2F0dHJfcmVhZCgpIC8gc2hvd18jI2ZpbGVfbmFtZSgpIC0KICAqIHByaW50IG91dCBjcHVmcmVxIGluZm9ybWF0aW9uCkBAIC00NTAsMTEgKzQ0NywxMiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd18jI2ZpbGVfbmFtZQkJCQlcCiAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgcG9saWN5LT5vYmplY3QpOwlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHBvbGljeS0+b2JqZWN0KTsJXAogfQogCiBzaG93X29uZShjcHVpbmZvX21pbl9mcmVxLCBjcHVpbmZvLm1pbl9mcmVxKTsKIHNob3dfb25lKGNwdWluZm9fbWF4X2ZyZXEsIGNwdWluZm8ubWF4X2ZyZXEpOworc2hvd19vbmUoY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3ksIGNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5KTsKIHNob3dfb25lKHNjYWxpbmdfbWluX2ZyZXEsIG1pbik7CiBzaG93X29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogc2hvd19vbmUoc2NhbGluZ19jdXJfZnJlcSwgY3VyKTsKQEAgLTQ3Niw3ICs0NzQsNyBAQAogCWlmIChyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCQkJCQkJCQkJXAotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmbmV3X3BvbGljeS5vYmplY3QpOwkJCVwKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmbmV3X3BvbGljeS5vYmplY3QpOwkJCVwKIAlpZiAocmV0ICE9IDEpCQkJCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCQkJCQkJCQkJXApAQCAtNDg2LDggKzQ4NCw4IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwkJCQkJXAogfQogCi1zdG9yZV9vbmUoc2NhbGluZ19taW5fZnJlcSxtaW4pOwotc3RvcmVfb25lKHNjYWxpbmdfbWF4X2ZyZXEsbWF4KTsKK3N0b3JlX29uZShzY2FsaW5nX21pbl9mcmVxLCBtaW4pOworc3RvcmVfb25lKHNjYWxpbmdfbWF4X2ZyZXEsIG1heCk7CiAKIC8qKgogICogc2hvd19jcHVpbmZvX2N1cl9mcmVxIC0gY3VycmVudCBDUFUgZnJlcXVlbmN5IGFzIGRldGVjdGVkIGJ5IGhhcmR3YXJlCkBAIC01MDcsMTIgKzUwNSwxMyBAQAogICovCiBzdGF0aWMgc3NpemVfdCBzaG93X3NjYWxpbmdfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlpZihwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUpCisJaWYgKHBvbGljeS0+cG9saWN5ID09IENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAicG93ZXJzYXZlXG4iKTsKIAllbHNlIGlmIChwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QRVJGT1JNQU5DRSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAicGVyZm9ybWFuY2VcbiIpOwogCWVsc2UgaWYgKHBvbGljeS0+Z292ZXJub3IpCi0JCXJldHVybiBzY25wcmludGYoYnVmLCBDUFVGUkVRX05BTUVfTEVOLCAiJXNcbiIsIHBvbGljeS0+Z292ZXJub3ItPm5hbWUpOworCQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzXG4iLAorCQkJCXBvbGljeS0+Z292ZXJub3ItPm5hbWUpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC01MzEsNyArNTMwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc3NjYW5mIChidWYsICIlMTVzIiwgc3RyX2dvdmVybm9yKTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJTE1cyIsIHN0cl9nb3Zlcm5vcik7CiAJaWYgKHJldCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTc1LDcgKzU3NCw4IEBACiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KSB7Ci0JCWlmIChpID49IChzc2l6ZV90KSAoKFBBR0VfU0laRSAvIHNpemVvZihjaGFyKSkgLSAoQ1BVRlJFUV9OQU1FX0xFTiArIDIpKSkKKwkJaWYgKGkgPj0gKHNzaXplX3QpICgoUEFHRV9TSVpFIC8gc2l6ZW9mKGNoYXIpKQorCQkgICAgLSAoQ1BVRlJFUV9OQU1FX0xFTiArIDIpKSkKIAkJCWdvdG8gb3V0OwogCQlpICs9IHNjbnByaW50ZigmYnVmW2ldLCBDUFVGUkVRX05BTUVfTEVOLCAiJXMgIiwgdC0+bmFtZSk7CiAJfQpAQCAtNTk0LDcgKzU5NCw3IEBACiAJCQlpICs9IHNjbnByaW50ZigmYnVmW2ldLCAoUEFHRV9TSVpFIC0gaSAtIDIpLCAiICIpOwogCQlpICs9IHNjbnByaW50ZigmYnVmW2ldLCAoUEFHRV9TSVpFIC0gaSAtIDIpLCAiJXUiLCBjcHUpOwogCQlpZiAoaSA+PSAoUEFHRV9TSVpFIC0gNSkpCi0JCSAgICBicmVhazsKKwkJCWJyZWFrOwogCX0KIAlpICs9IHNwcmludGYoJmJ1ZltpXSwgIlxuIik7CiAJcmV0dXJuIGk7CkBAIC02NjAsNiArNjYwLDcgQEAKIGRlZmluZV9vbmVfcm8wNDAwKGNwdWluZm9fY3VyX2ZyZXEpOwogZGVmaW5lX29uZV9ybyhjcHVpbmZvX21pbl9mcmVxKTsKIGRlZmluZV9vbmVfcm8oY3B1aW5mb19tYXhfZnJlcSk7CitkZWZpbmVfb25lX3JvKGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5KTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzKTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19kcml2ZXIpOwogZGVmaW5lX29uZV9ybyhzY2FsaW5nX2N1cl9mcmVxKTsKQEAgLTY3Myw2ICs2NzQsNyBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXSA9IHsKIAkmY3B1aW5mb19taW5fZnJlcS5hdHRyLAogCSZjcHVpbmZvX21heF9mcmVxLmF0dHIsCisJJmNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5LmF0dHIsCiAJJnNjYWxpbmdfbWluX2ZyZXEuYXR0ciwKIAkmc2NhbGluZ19tYXhfZnJlcS5hdHRyLAogCSZhZmZlY3RlZF9jcHVzLmF0dHIsCkBAIC02ODQsMTAgKzY4NiwxMCBAQAogCU5VTEwKIH07CiAKLSNkZWZpbmUgdG9fcG9saWN5KGspIGNvbnRhaW5lcl9vZihrLHN0cnVjdCBjcHVmcmVxX3BvbGljeSxrb2JqKQotI2RlZmluZSB0b19hdHRyKGEpIGNvbnRhaW5lcl9vZihhLHN0cnVjdCBmcmVxX2F0dHIsYXR0cikKKyNkZWZpbmUgdG9fcG9saWN5KGspIGNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3ksIGtvYmopCisjZGVmaW5lIHRvX2F0dHIoYSkgY29udGFpbmVyX29mKGEsIHN0cnVjdCBmcmVxX2F0dHIsIGF0dHIpCiAKLXN0YXRpYyBzc2l6ZV90IHNob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIgLGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IHRvX3BvbGljeShrb2JqKTsKIAlzdHJ1Y3QgZnJlcV9hdHRyICpmYXR0ciA9IHRvX2F0dHIoYXR0cik7CkBAIC04NTMsMTAgKzg1NSwxMCBAQAogCQlpZiAoY3B1ID09IGopCiAJCQljb250aW51ZTsKIAotCQkvKiBjaGVjayBmb3IgZXhpc3RpbmcgYWZmZWN0ZWQgQ1BVcy4gIFRoZXkgbWF5IG5vdCBiZSBhd2FyZQotCQkgKiBvZiBpdCBkdWUgdG8gQ1BVIEhvdHBsdWcuCisJCS8qIENoZWNrIGZvciBleGlzdGluZyBhZmZlY3RlZCBDUFVzLgorCQkgKiBUaGV5IG1heSBub3QgYmUgYXdhcmUgb2YgaXQgZHVlIHRvIENQVSBIb3RwbHVnLgogCQkgKi8KLQkJbWFuYWdlZF9wb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoaik7CQkvLyBGSVhNRTogV2hlcmUgaXMgdGhpcyByZWxlYXNlZD8gIFdoYXQgYWJvdXQgZXJyb3IgcGF0aHM/CisJCW1hbmFnZWRfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGopOwkJLyogRklYTUU6IFdoZXJlIGlzIHRoaXMgcmVsZWFzZWQ/ICBXaGF0IGFib3V0IGVycm9yIHBhdGhzPyAqLwogCQlpZiAodW5saWtlbHkobWFuYWdlZF9wb2xpY3kpKSB7CiAKIAkJCS8qIFNldCBwcm9wZXIgcG9saWN5X2NwdSAqLwpAQCAtMTEyNyw4ICsxMTI5LDggQEAKICAqCUBvbGRfZnJlcTogQ1BVIGZyZXF1ZW5jeSB0aGUga2VybmVsIHRoaW5rcyB0aGUgQ1BVIHJ1bnMgYXQKICAqCUBuZXdfZnJlcTogQ1BVIGZyZXF1ZW5jeSB0aGUgQ1BVIGFjdHVhbGx5IHJ1bnMgYXQKICAqCi0gKglXZSBhZGp1c3QgdG8gY3VycmVudCBmcmVxdWVuY3kgZmlyc3QsIGFuZCBuZWVkIHRvIGNsZWFuIHVwIGxhdGVyLiBTbyBlaXRoZXIgY2FsbAotICoJdG8gY3B1ZnJlcV91cGRhdGVfcG9saWN5KCkgb3Igc2NoZWR1bGUgaGFuZGxlX3VwZGF0ZSgpKS4KKyAqCVdlIGFkanVzdCB0byBjdXJyZW50IGZyZXF1ZW5jeSBmaXJzdCwgYW5kIG5lZWQgdG8gY2xlYW4gdXAgbGF0ZXIuCisgKglTbyBlaXRoZXIgY2FsbCB0byBjcHVmcmVxX3VwZGF0ZV9wb2xpY3koKSBvciBzY2hlZHVsZSBoYW5kbGVfdXBkYXRlKCkpLgogICovCiBzdGF0aWMgdm9pZCBjcHVmcmVxX291dF9vZl9zeW5jKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBvbGRfZnJlcSwKIAkJCQl1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpCkBAIC0xNjEwLDcgKzE2MTIsOCBAQAogCiAvKioKICAqIGNwdWZyZXFfZ2V0X3BvbGljeSAtIGdldCB0aGUgY3VycmVudCBjcHVmcmVxX3BvbGljeQotICogQHBvbGljeTogc3RydWN0IGNwdWZyZXFfcG9saWN5IGludG8gd2hpY2ggdGhlIGN1cnJlbnQgY3B1ZnJlcV9wb2xpY3kgaXMgd3JpdHRlbgorICogQHBvbGljeTogc3RydWN0IGNwdWZyZXFfcG9saWN5IGludG8gd2hpY2ggdGhlIGN1cnJlbnQgY3B1ZnJlcV9wb2xpY3kKKyAqCWlzIHdyaXR0ZW4KICAqCiAgKiBSZWFkcyB0aGUgY3VycmVudCBjcHVmcmVxIHBvbGljeS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwppbmRleCAwMzIwOTYyLi4yZWNkOTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwpAQCAtNCw3ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpICAyMDAxIFJ1c3NlbGwgS2luZwogICogICAgICAgICAgICAoQykgIDIwMDMgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+LgogICogICAgICAgICAgICAgICAgICAgICAgSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgotICogICAgICAgICAgICAoQykgIDIwMDQgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXgta2VybmVsQGRpZ3Jpei5vcmcudWs+CisgKiAgICAgICAgICAgIChDKSAgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTMsMjIgKzEzLDE3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKIC8qCiAgKiBkYnMgaXMgdXNlZCBpbiB0aGlzIGZpbGUgYXMgYSBzaG9ydGZvcm0gZm9yIGRlbWFuZGJhc2VkIHN3aXRjaGluZwogICogSXQgaGVscHMgdG8ga2VlcCB2YXJpYWJsZSBuYW1lcyBzbWFsbGVyLCBzaW1wbGVyCkBAIC00MywxOSArMzgsMzEgQEAKICAqIGxhdGVuY3kgb2YgdGhlIHByb2Nlc3Nvci4gVGhlIGdvdmVybm9yIHdpbGwgd29yayBvbiBhbnkgcHJvY2Vzc29yIHdpdGgKICAqIHRyYW5zaXRpb24gbGF0ZW5jeSA8PSAxMG1TLCB1c2luZyBhcHByb3ByaWF0ZSBzYW1wbGluZwogICogcmF0ZS4KLSAqIEZvciBDUFVzIHdpdGggdHJhbnNpdGlvbiBsYXRlbmN5ID4gMTBtUyAobW9zdGx5IGRyaXZlcnMKLSAqIHdpdGggQ1BVRlJFUV9FVEVSTkFMKSwgdGhpcyBnb3Zlcm5vciB3aWxsIG5vdCB3b3JrLgorICogRm9yIENQVXMgd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kgPiAxMG1TIChtb3N0bHkgZHJpdmVycyB3aXRoIENQVUZSRVFfRVRFUk5BTCkKKyAqIHRoaXMgZ292ZXJub3Igd2lsbCBub3Qgd29yay4KICAqIEFsbCB0aW1lcyBoZXJlIGFyZSBpbiB1Uy4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBkZWZfc2FtcGxpbmdfcmF0ZTsKICNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8JCQkoMikKIC8qIGZvciBjb3JyZWN0IHN0YXRpc3RpY3MsIHdlIG5lZWQgYXQgbGVhc3QgMTAgdGlja3MgYmV0d2VlbiBlYWNoIG1lYXN1cmUgKi8KLSNkZWZpbmUgTUlOX1NUQVRfU0FNUExJTkdfUkFURQkJCVwKKyNkZWZpbmUgTUlOX1NUQVRfU0FNUExJTkdfUkFURSAJCQlcCiAJCQkoTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8gKiBqaWZmaWVzX3RvX3VzZWNzKDEwKSkKICNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEUJCQlcCiAJCQkoZGVmX3NhbXBsaW5nX3JhdGUgLyBNSU5fU0FNUExJTkdfUkFURV9SQVRJTykKKy8qIEFib3ZlIE1JTl9TQU1QTElOR19SQVRFIHdpbGwgdmFuaXNoIHdpdGggaXRzIHN5c2ZzIGZpbGUgc29vbgorICogRGVmaW5lIHRoZSBtaW5pbWFsIHNldHRhYmxlIHNhbXBsaW5nIHJhdGUgdG8gdGhlIGdyZWF0ZXIgb2Y6CisgKiAgIC0gIkhXIHRyYW5zaXRpb24gbGF0ZW5jeSIgKiAxMDAgKHNhbWUgYXMgZGVmYXVsdCBzYW1wbGluZyAvIDEwKQorICogICAtIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUKKyAqIFRvIGF2b2lkIHRoYXQgdXNlcnNwYWNlIHNob290cyBpdHNlbGYuCisqLworc3RhdGljIHVuc2lnbmVkIGludCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gbWF4KGRlZl9zYW1wbGluZ19yYXRlIC8gMTAsIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOworfQorCisvKiBUaGlzIHdpbGwgYWxzbyB2YW5pc2ggc29vbiB3aXRoIHJlbW92aW5nIHNhbXBsaW5nX3JhdGVfbWF4ICovCiAjZGVmaW5lIE1BWF9TQU1QTElOR19SQVRFCQkJKDUwMCAqIGRlZl9zYW1wbGluZ19yYXRlKQotI2RlZmluZSBERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVIJKDEwMDApCisjZGVmaW5lIExBVEVOQ1lfTVVMVElQTElFUgkJCSgxMDAwKQogI2RlZmluZSBERUZfU0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxKQogI2RlZmluZSBNQVhfU0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxMCkKICNkZWZpbmUgVFJBTlNJVElPTl9MQVRFTkNZX0xJTUlUCQkoMTAgKiAxMDAwICogMTAwMCkKQEAgLTYzLDEyICs3MCwxNSBAQAogc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0cnVjdCBjcHVfZGJzX2luZm9fcyB7CisJY3B1dGltZTY0X3QgcHJldl9jcHVfaWRsZTsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV93YWxsOworCWNwdXRpbWU2NF90IHByZXZfY3B1X25pY2U7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9saWN5OwotCXVuc2lnbmVkIGludCBwcmV2X2NwdV9pZGxlX3VwOwotCXVuc2lnbmVkIGludCBwcmV2X2NwdV9pZGxlX2Rvd247Ci0JdW5zaWduZWQgaW50IGVuYWJsZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJdW5zaWduZWQgaW50IGRvd25fc2tpcDsKIAl1bnNpZ25lZCBpbnQgcmVxdWVzdGVkX2ZyZXE7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlOjE7CiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfZGJzX2luZm9fcywgY3B1X2Ric19pbmZvKTsKIApAQCAtODIsMTkgKzkyLDE4IEBACiAgKiBjcHVfaG90cGx1ZyBsb2NrIHNob3VsZCBiZSB0YWtlbiBiZWZvcmUgdGhhdC4gTm90ZSB0aGF0IGNwdV9ob3RwbHVnIGxvY2sKICAqIGlzIHJlY3Vyc2l2ZSBmb3IgdGhlIHNhbWUgcHJvY2Vzcy4gLVZlbmtpCiAgKi8KLXN0YXRpYyBERUZJTkVfTVVURVggKGRic19tdXRleCk7Ci1zdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoZGJzX3dvcmssIGRvX2Ric190aW1lcik7CitzdGF0aWMgREVGSU5FX01VVEVYKGRic19tdXRleCk7CiAKLXN0cnVjdCBkYnNfdHVuZXJzIHsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqa2NvbnNlcnZhdGl2ZV93cTsKKworc3RhdGljIHN0cnVjdCBkYnNfdHVuZXJzIHsKIAl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfcmF0ZTsKIAl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfZG93bl9mYWN0b3I7CiAJdW5zaWduZWQgaW50IHVwX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgZG93bl90aHJlc2hvbGQ7CiAJdW5zaWduZWQgaW50IGlnbm9yZV9uaWNlOwogCXVuc2lnbmVkIGludCBmcmVxX3N0ZXA7Ci19OwotCi1zdGF0aWMgc3RydWN0IGRic190dW5lcnMgZGJzX3R1bmVyc19pbnMgPSB7Cit9IGRic190dW5lcnNfaW5zID0gewogCS51cF90aHJlc2hvbGQgPSBERUZfRlJFUVVFTkNZX1VQX1RIUkVTSE9MRCwKIAkuZG93bl90aHJlc2hvbGQgPSBERUZfRlJFUVVFTkNZX0RPV05fVEhSRVNIT0xELAogCS5zYW1wbGluZ19kb3duX2ZhY3RvciA9IERFRl9TQU1QTElOR19ET1dOX0ZBQ1RPUiwKQEAgLTEwMiwxOCArMTExLDM3IEBACiAJLmZyZXFfc3RlcCA9IDUsCiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3B1X2lkbGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGlubGluZSBjcHV0aW1lNjRfdCBnZXRfY3B1X2lkbGVfdGltZV9qaWZmeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJCWNwdXRpbWU2NF90ICp3YWxsKQogewotCXVuc2lnbmVkIGludCBhZGRfbmljZSA9IDAsIHJldDsKKwljcHV0aW1lNjRfdCBpZGxlX3RpbWU7CisJY3B1dGltZTY0X3QgY3VyX3dhbGxfdGltZTsKKwljcHV0aW1lNjRfdCBidXN5X3RpbWU7CiAKLQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpCi0JCWFkZF9uaWNlID0ga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5uaWNlOworCWN1cl93YWxsX3RpbWUgPSBqaWZmaWVzNjRfdG9fY3B1dGltZTY0KGdldF9qaWZmaWVzXzY0KCkpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoa3N0YXRfY3B1KGNwdSkuY3B1c3RhdC51c2VyLAorCQkJa3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5zeXN0ZW0pOwogCi0JcmV0ID0ga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5pZGxlICsKLQkJa3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5pb3dhaXQgKwotCQlhZGRfbmljZTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5pcnEpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnNvZnRpcnEpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnN0ZWFsKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5uaWNlKTsKIAotCXJldHVybiByZXQ7CisJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOworCWlmICh3YWxsKQorCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisKKwlyZXR1cm4gaWRsZV90aW1lOworfQorCitzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQoreworCXU2NCBpZGxlX3RpbWUgPSBnZXRfY3B1X2lkbGVfdGltZV91cyhjcHUsIHdhbGwpOworCisJaWYgKGlkbGVfdGltZSA9PSAtMVVMTCkKKwkJcmV0dXJuIGdldF9jcHVfaWRsZV90aW1lX2ppZmZ5KGNwdSwgd2FsbCk7CisKKwlyZXR1cm4gaWRsZV90aW1lOwogfQogCiAvKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwpAQCAtMTI1LDEwICsxNTMsMjEgQEAKIAlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sCiAJCQkJCQkJZnJlcS0+Y3B1KTsKIAorCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCiAJaWYgKCF0aGlzX2Ric19pbmZvLT5lbmFibGUpCiAJCXJldHVybiAwOwogCi0JdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBmcmVxLT5uZXc7CisJcG9saWN5ID0gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeTsKKworCS8qCisJICogd2Ugb25seSBjYXJlIGlmIG91ciBpbnRlcm5hbGx5IHRyYWNrZWQgZnJlcSBtb3ZlcyBvdXRzaWRlCisJICogdGhlICd2YWxpZCcgcmFuZ2VzIG9mIGZyZXFlbmN5IGF2YWlsYWJsZSB0byB1cyBvdGhlcndpc2UKKwkgKiB3ZSBkbyBub3QgY2hhbmdlIGl0CisJKi8KKwlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPiBwb2xpY3ktPm1heAorCQkJfHwgdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPCBwb2xpY3ktPm1pbikKKwkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBmcmVxLT5uZXc7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MCwxNiArMTc5LDMxIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogc3lzZnMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9tYXgoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogY29uc2VydmF0aXZlIHNhbXBsaW5nX3JhdGVfbWF4ICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21pbihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBjb25zZXJ2YXRpdmUgc2FtcGxpbmdfcmF0ZV9tYXggIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLCBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CiB9CiAKLSNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkJCQkJXAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgX25hbWUgPQkJCQlcCisjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpCQlcCitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciBfbmFtZSA9CQlcCiBfX0FUVFIoX25hbWUsIDA0NDQsIHNob3dfIyNfbmFtZSwgTlVMTCkKIAogZGVmaW5lX29uZV9ybyhzYW1wbGluZ19yYXRlX21heCk7CkBAIC0xNzQsNyArMjI4LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOworCiAJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX0RPV05fRkFDVE9SIHx8IGlucHV0IDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE5MCwxNSArMjQ1LDEzIEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19SQVRFIHx8IGlucHV0IDwgTUlOX1NBTVBMSU5HX1JBVEUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gaW5wdXQ7CisJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IG1heChpbnB1dCwgbWluaW11bV9zYW1wbGluZ19yYXRlKCkpOwogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAogCXJldHVybiBjb3VudDsKQEAgLTIwOSwxMCArMjYyLDExIEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0IDw9IGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSB7CisJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8CisJCQlpbnB1dCA8PSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIyOCwxMCArMjgyLDEyIEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0ID49IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgeworCS8qIGNhbm5vdCBiZSBsb3dlciB0aGFuIDExIG90aGVyd2lzZSBmcmVxIHdpbGwgbm90IGZhbGwgKi8KKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPCAxMSB8fCBpbnB1dCA+IDEwMCB8fAorCQkJaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjY0LDEyICszMjAsMTQgQEAKIAl9CiAJZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgPSBpbnB1dDsKIAotCS8qIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgcHJldl9jcHVfaWRsZV91cCBhbmQgcHJldl9jcHVfaWRsZV9kb3duICovCisJLyogd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBwcmV2X2NwdV9pZGxlICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7Ci0JCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqal9kYnNfaW5mbzsKLQkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7Ci0JCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXAgPSBnZXRfY3B1X2lkbGVfdGltZShqKTsKLQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duID0gal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKKwkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbzsKKwkJZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOworCQlkYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGosCisJCQkJCQkmZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOworCQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpCisJCQlkYnNfaW5mby0+cHJldl9jcHVfbmljZSA9IGtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2U7CiAJfQogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIApAQCAtMjgxLDcgKzMzOSw2IEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0KIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJaWYgKHJldCAhPSAxKQpAQCAtMzEwLDcgKzM2Nyw3IEBACiBkZWZpbmVfb25lX3J3KGlnbm9yZV9uaWNlX2xvYWQpOwogZGVmaW5lX29uZV9ydyhmcmVxX3N0ZXApOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRic19hdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGJzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2FtcGxpbmdfcmF0ZV9tYXguYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZV9taW4uYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZS5hdHRyLApAQCAtMzI5LDU1ICszODYsNzggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGRic19jaGVja19jcHUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIGRic19jaGVja19jcHUoc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvKQogewotCXVuc2lnbmVkIGludCBpZGxlX3RpY2tzLCB1cF9pZGxlX3RpY2tzLCBkb3duX2lkbGVfdGlja3M7Ci0JdW5zaWduZWQgaW50IHRtcF9pZGxlX3RpY2tzLCB0b3RhbF9pZGxlX3RpY2tzOworCXVuc2lnbmVkIGludCBsb2FkID0gMDsKIAl1bnNpZ25lZCBpbnQgZnJlcV90YXJnZXQ7Ci0JdW5zaWduZWQgaW50IGZyZXFfZG93bl9zYW1wbGluZ19yYXRlOwotCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgY3B1KTsKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKIAotCWlmICghdGhpc19kYnNfaW5mby0+ZW5hYmxlKQotCQlyZXR1cm47CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJdW5zaWduZWQgaW50IGo7CiAKIAlwb2xpY3kgPSB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5OwogCiAJLyoKLQkgKiBUaGUgZGVmYXVsdCBzYWZlIHJhbmdlIGlzIDIwJSB0byA4MCUKLQkgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBjaGVjawotCSAqCS0gSWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbGVzcyB0aGFuIDIwJSwgdGhlbiB3ZSB0cnkgdG8KLQkgKgkgIGluY3JlYXNlIGZyZXF1ZW5jeQotCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUqc2FtcGxpbmdfZG93bl9mYWN0b3IsIHdlIGNoZWNrCi0JICoJLSBJZiBjdXJyZW50IGlkbGUgdGltZSBpcyBtb3JlIHRoYW4gODAlLCB0aGVuIHdlIHRyeSB0bwotCSAqCSAgZGVjcmVhc2UgZnJlcXVlbmN5CisJICogRXZlcnkgc2FtcGxpbmdfcmF0ZSwgd2UgY2hlY2ssIGlmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIGxlc3MKKwkgKiB0aGFuIDIwJSAoZGVmYXVsdCksIHRoZW4gd2UgdHJ5IHRvIGluY3JlYXNlIGZyZXF1ZW5jeQorCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUqc2FtcGxpbmdfZG93bl9mYWN0b3IsIHdlIGNoZWNrLCBpZiBjdXJyZW50CisJICogaWRsZSB0aW1lIGlzIG1vcmUgdGhhbiA4MCUsIHRoZW4gd2UgdHJ5IHRvIGRlY3JlYXNlIGZyZXF1ZW5jeQogCSAqCiAJICogQW55IGZyZXF1ZW5jeSBpbmNyZWFzZSB0YWtlcyBpdCB0byB0aGUgbWF4aW11bSBmcmVxdWVuY3kuCiAJICogRnJlcXVlbmN5IHJlZHVjdGlvbiBoYXBwZW5zIGF0IG1pbmltdW0gc3RlcHMgb2YKLQkgKiA1JSAoZGVmYXVsdCkgb2YgbWF4X2ZyZXF1ZW5jeQorCSAqIDUlIChkZWZhdWx0KSBvZiBtYXhpbXVtIGZyZXF1ZW5jeQogCSAqLwogCi0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBpbmNyZWFzZSAqLwotCWlkbGVfdGlja3MgPSBVSU5UX01BWDsKKwkvKiBHZXQgQWJzb2x1dGUgTG9hZCAqLworCWZvcl9lYWNoX2NwdShqLCBwb2xpY3ktPmNwdXMpIHsKKwkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpqX2Ric19pbmZvOworCQljcHV0aW1lNjRfdCBjdXJfd2FsbF90aW1lLCBjdXJfaWRsZV90aW1lOworCQl1bnNpZ25lZCBpbnQgaWRsZV90aW1lLCB3YWxsX3RpbWU7CisKKwkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisKKwkJY3VyX2lkbGVfdGltZSA9IGdldF9jcHVfaWRsZV90aW1lKGosICZjdXJfd2FsbF90aW1lKTsKKworCQl3YWxsX3RpbWUgPSAodW5zaWduZWQgaW50KSBjcHV0aW1lNjRfc3ViKGN1cl93YWxsX3RpbWUsCisJCQkJal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CisJCWpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwgPSBjdXJfd2FsbF90aW1lOworCisJCWlkbGVfdGltZSA9ICh1bnNpZ25lZCBpbnQpIGNwdXRpbWU2NF9zdWIoY3VyX2lkbGVfdGltZSwKKwkJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlKTsKKwkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGN1cl9pZGxlX3RpbWU7CisKKwkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7CisJCQljcHV0aW1lNjRfdCBjdXJfbmljZTsKKwkJCXVuc2lnbmVkIGxvbmcgY3VyX25pY2VfamlmZmllczsKKworCQkJY3VyX25pY2UgPSBjcHV0aW1lNjRfc3ViKGtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2UsCisJCQkJCSBqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlKTsKKwkJCS8qCisJCQkgKiBBc3N1bXB0aW9uOiBuaWNlIHRpbWUgYmV0d2VlbiBzYW1wbGluZyBwZXJpb2RzIHdpbGwKKwkJCSAqIGJlIGxlc3MgdGhhbiAyXjMyIGppZmZpZXMgZm9yIDMyIGJpdCBzeXMKKwkJCSAqLworCQkJY3VyX25pY2VfamlmZmllcyA9ICh1bnNpZ25lZCBsb25nKQorCQkJCQljcHV0aW1lNjRfdG9famlmZmllczY0KGN1cl9uaWNlKTsKKworCQkJal9kYnNfaW5mby0+cHJldl9jcHVfbmljZSA9IGtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2U7CisJCQlpZGxlX3RpbWUgKz0gamlmZmllc190b191c2VjcyhjdXJfbmljZV9qaWZmaWVzKTsKKwkJfQorCisJCWlmICh1bmxpa2VseSghd2FsbF90aW1lIHx8IHdhbGxfdGltZSA8IGlkbGVfdGltZSkpCisJCQljb250aW51ZTsKKworCQlsb2FkID0gMTAwICogKHdhbGxfdGltZSAtIGlkbGVfdGltZSkgLyB3YWxsX3RpbWU7CisJfQorCisJLyoKKwkgKiBicmVhayBvdXQgaWYgd2UgJ2Nhbm5vdCcgcmVkdWNlIHRoZSBzcGVlZCBhcyB0aGUgdXNlciBtaWdodAorCSAqIHdhbnQgZnJlcV9zdGVwIHRvIGJlIHplcm8KKwkgKi8KKwlpZiAoZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwID09IDApCisJCXJldHVybjsKIAogCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgaW5jcmVhc2UgKi8KLQl0b3RhbF9pZGxlX3RpY2tzID0gZ2V0X2NwdV9pZGxlX3RpbWUoY3B1KTsKLQl0bXBfaWRsZV90aWNrcyA9IHRvdGFsX2lkbGVfdGlja3MgLQotCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOwotCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXAgPSB0b3RhbF9pZGxlX3RpY2tzOwotCi0JaWYgKHRtcF9pZGxlX3RpY2tzIDwgaWRsZV90aWNrcykKLQkJaWRsZV90aWNrcyA9IHRtcF9pZGxlX3RpY2tzOwotCi0JLyogU2NhbGUgaWRsZSB0aWNrcyBieSAxMDAgYW5kIGNvbXBhcmUgd2l0aCB1cCBhbmQgZG93biB0aWNrcyAqLwotCWlkbGVfdGlja3MgKj0gMTAwOwotCXVwX2lkbGVfdGlja3MgPSAoMTAwIC0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSAqCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOwotCi0JaWYgKGlkbGVfdGlja3MgPCB1cF9pZGxlX3RpY2tzKSB7CisJaWYgKGxvYWQgPiBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKIAkJdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0gMDsKLQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duID0KLQkJCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7CiAKIAkJLyogaWYgd2UgYXJlIGFscmVhZHkgYXQgZnVsbCBzcGVlZCB0aGVuIGJyZWFrIG91dCBlYXJseSAqLwogCQlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPT0gcG9saWN5LT5tYXgpCkBAIC0zOTgsNDkgKzQ3OCwyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBkZWNyZWFzZSAqLwotCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCsrOwotCWlmICh0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPCBkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19kb3duX2ZhY3RvcikKLQkJcmV0dXJuOwotCi0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBkZWNyZWFzZSAqLwotCXRvdGFsX2lkbGVfdGlja3MgPSB0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOwotCXRtcF9pZGxlX3RpY2tzID0gdG90YWxfaWRsZV90aWNrcyAtCi0JCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93bjsKLQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24gPSB0b3RhbF9pZGxlX3RpY2tzOwotCi0JaWYgKHRtcF9pZGxlX3RpY2tzIDwgaWRsZV90aWNrcykKLQkJaWRsZV90aWNrcyA9IHRtcF9pZGxlX3RpY2tzOwotCi0JLyogU2NhbGUgaWRsZSB0aWNrcyBieSAxMDAgYW5kIGNvbXBhcmUgd2l0aCB1cCBhbmQgZG93biB0aWNrcyAqLwotCWlkbGVfdGlja3MgKj0gMTAwOwotCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7Ci0KLQlmcmVxX2Rvd25fc2FtcGxpbmdfcmF0ZSA9IGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgKgotCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19kb3duX2ZhY3RvcjsKLQlkb3duX2lkbGVfdGlja3MgPSAoMTAwIC0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpICoKLQkJdXNlY3NfdG9famlmZmllcyhmcmVxX2Rvd25fc2FtcGxpbmdfcmF0ZSk7Ci0KLQlpZiAoaWRsZV90aWNrcyA+IGRvd25faWRsZV90aWNrcykgewotCQkvKgotCQkgKiBpZiB3ZSBhcmUgYWxyZWFkeSBhdCB0aGUgbG93ZXN0IHNwZWVkIHRoZW4gYnJlYWsgb3V0IGVhcmx5Ci0JCSAqIG9yIGlmIHdlICdjYW5ub3QnIHJlZHVjZSB0aGUgc3BlZWQgYXMgdGhlIHVzZXIgbWlnaHQgd2FudAotCQkgKiBmcmVxX3RhcmdldCB0byBiZSB6ZXJvCi0JCSAqLwotCQlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPT0gcG9saWN5LT5taW4KLQkJCQl8fCBkYnNfdHVuZXJzX2lucy5mcmVxX3N0ZXAgPT0gMCkKLQkJCXJldHVybjsKLQorCS8qCisJICogVGhlIG9wdGltYWwgZnJlcXVlbmN5IGlzIHRoZSBmcmVxdWVuY3kgdGhhdCBpcyB0aGUgbG93ZXN0IHRoYXQKKwkgKiBjYW4gc3VwcG9ydCB0aGUgY3VycmVudCBDUFUgdXNhZ2Ugd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSB1cAorCSAqIHBvbGljeS4gVG8gYmUgc2FmZSwgd2UgZm9jdXMgMTAgcG9pbnRzIHVuZGVyIHRoZSB0aHJlc2hvbGQuCisJICovCisJaWYgKGxvYWQgPCAoZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQgLSAxMCkpIHsKIAkJZnJlcV90YXJnZXQgPSAoZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwICogcG9saWN5LT5tYXgpIC8gMTAwOwogCi0JCS8qIG1heCBmcmVxIGNhbm5vdCBiZSBsZXNzIHRoYW4gMTAwLiBCdXQgd2hvIGtub3dzLi4uLiAqLwotCQlpZiAodW5saWtlbHkoZnJlcV90YXJnZXQgPT0gMCkpCi0JCQlmcmVxX3RhcmdldCA9IDU7Ci0KIAkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgLT0gZnJlcV90YXJnZXQ7CiAJCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA8IHBvbGljeS0+bWluKQogCQkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBwb2xpY3ktPm1pbjsKIAorCQkvKgorCQkgKiBpZiB3ZSBjYW5ub3QgcmVkdWNlIHRoZSBmcmVxdWVuY3kgYW55bW9yZSwgYnJlYWsgb3V0IGVhcmx5CisJCSAqLworCQlpZiAocG9saWN5LT5jdXIgPT0gcG9saWN5LT5taW4pCisJCQlyZXR1cm47CisKIAkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCB0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSwKIAkJCQlDUFVGUkVRX1JFTEFUSU9OX0gpOwogCQlyZXR1cm47CkBAIC00NDksMjcgKzUwNCw0NSBAQAogCiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpOwotCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQlkYnNfY2hlY2tfY3B1KGkpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGJzX3dvcmssCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpKTsKLQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIHdvcmsud29yayk7CisJdW5zaWduZWQgaW50IGNwdSA9IGRic19pbmZvLT5jcHU7CisKKwkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNhbXBsaW5nIG5lYXJseSBvbiBzYW1lIGppZmZ5ICovCisJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKKworCWRlbGF5IC09IGppZmZpZXMgJSBkZWxheTsKKworCWlmIChsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKCFkYnNfaW5mby0+ZW5hYmxlKSB7CisJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKKwkJcmV0dXJuOworCX0KKworCWRic19jaGVja19jcHUoZGJzX2luZm8pOworCisJcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwga2NvbnNlcnZhdGl2ZV93cSwgJmRic19pbmZvLT53b3JrLCBkZWxheSk7CisJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQogewotCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmZGJzX3dvcmsudGltZXIpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGJzX3dvcmssCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpKTsKLQlyZXR1cm47CisJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLworCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CisJZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OworCisJZGJzX2luZm8tPmVuYWJsZSA9IDE7CisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmZGJzX2luZm8tPndvcmssIGRvX2Ric190aW1lcik7CisJcXVldWVfZGVsYXllZF93b3JrX29uKGRic19pbmZvLT5jcHUsIGtjb25zZXJ2YXRpdmVfd3EsICZkYnNfaW5mby0+d29yaywKKwkJCQlkZWxheSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfZXhpdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCiB7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGJzX3dvcmspOwotCXJldHVybjsKKwlkYnNfaW5mby0+ZW5hYmxlID0gMDsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZkYnNfaW5mby0+d29yayk7CiB9CiAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9nb3Zlcm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCkBAIC01MDMsMTEgKzU3NiwxMyBAQAogCQkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CiAJCQlqX2Ric19pbmZvLT5jdXJfcG9saWN5ID0gcG9saWN5OwogCi0JCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwID0gZ2V0X2NwdV9pZGxlX3RpbWUoY3B1KTsKLQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93bgotCQkJCT0gal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKKwkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAorCQkJCQkJJmpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOworCQkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7CisJCQkJal9kYnNfaW5mby0+cHJldl9jcHVfbmljZSA9CisJCQkJCQlrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlOworCQkJfQogCQl9Ci0JCXRoaXNfZGJzX2luZm8tPmVuYWJsZSA9IDE7CiAJCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7CiAJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5jdXI7CiAKQEAgLTUyMywzOCArNTk4LDM2IEBACiAJCQlpZiAobGF0ZW5jeSA9PSAwKQogCQkJCWxhdGVuY3kgPSAxOwogCi0JCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IDEwICogbGF0ZW5jeSAqCi0JCQkJCURFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUjsKLQotCQkJaWYgKGRlZl9zYW1wbGluZ19yYXRlIDwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSkKLQkJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEU7CisJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9CisJCQkJbWF4KGxhdGVuY3kgKiBMQVRFTkNZX01VTFRJUExJRVIsCisJCQkJICAgIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOwogCiAJCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gZGVmX3NhbXBsaW5nX3JhdGU7CiAKLQkJCWRic190aW1lcl9pbml0KCk7CiAJCQljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKAogCQkJCQkmZGJzX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCiAJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CiAJCX0KKwkJZGJzX3RpbWVyX2luaXQodGhpc19kYnNfaW5mbyk7CiAKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCiAJCWJyZWFrOwogCiAJY2FzZSBDUFVGUkVRX0dPVl9TVE9QOgogCQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCQl0aGlzX2Ric19pbmZvLT5lbmFibGUgPSAwOworCQlkYnNfdGltZXJfZXhpdCh0aGlzX2Ric19pbmZvKTsKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZkYnNfYXR0cl9ncm91cCk7CiAJCWRic19lbmFibGUtLTsKKwogCQkvKgogCQkgKiBTdG9wIHRoZSB0aW1lcnNjaGVkdWxlIHdvcmssIHdoZW4gdGhpcyBnb3Zlcm5vcgogCQkgKiBpcyB1c2VkIGZvciBmaXJzdCB0aW1lCiAJCSAqLwotCQlpZiAoZGJzX2VuYWJsZSA9PSAwKSB7Ci0JCQlkYnNfdGltZXJfZXhpdCgpOworCQlpZiAoZGJzX2VuYWJsZSA9PSAwKQogCQkJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKAogCQkJCQkmZGJzX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCiAJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7Ci0JCX0KIAogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKQEAgLTU3MSw2ICs2NDQsNyBAQAogCQkJCQl0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LAogCQkJCQlwb2xpY3ktPm1pbiwgQ1BVRlJFUV9SRUxBVElPTl9MKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTU4OCwyMyArNjYyLDMzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfZ292X2Ric19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CisJaW50IGVycjsKKworCWtjb25zZXJ2YXRpdmVfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJrY29uc2VydmF0aXZlIik7CisJaWYgKCFrY29uc2VydmF0aXZlX3dxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ3JlYXRpb24gb2Yga2NvbnNlcnZhdGl2ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwllcnIgPSBjcHVmcmVxX3JlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9jb25zZXJ2YXRpdmUpOworCWlmIChlcnIpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKGtjb25zZXJ2YXRpdmVfd3EpOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfZ292X2Ric19leGl0KHZvaWQpCiB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgdGhlIHNjaGVkdWxlZCB3b3JrIGlzIGluZGVlZCBub3QgcnVubmluZyAqLwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KIAljcHVmcmVxX3VucmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CisJZGVzdHJveV93b3JrcXVldWUoa2NvbnNlcnZhdGl2ZV93cSk7CiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkFsZXhhbmRlciBDbG91dGVyIDxhbGV4LWtlcm5lbEBkaWdyaXoub3JnLnVrPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiJ2NwdWZyZXFfY29uc2VydmF0aXZlJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZvciAiCitNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9jb25zZXJ2YXRpdmUnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJub3IgZm9yICIKIAkJIkxvdyBMYXRlbmN5IEZyZXF1ZW5jeSBUcmFuc2l0aW9uIGNhcGFibGUgcHJvY2Vzc29ycyAiCiAJCSJvcHRpbWlzZWQgZm9yIHVzZSBpbiBhIGJhdHRlcnkgZW52aXJvbm1lbnQiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFCiBmc19pbml0Y2FsbChjcHVmcmVxX2dvdl9kYnNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCA2ZjQ1YjE2Li4zMzhmNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIGRicyBpcyB1c2VkIGluIHRoaXMgZmlsZSBhcyBhIHNob3J0Zm9ybSBmb3IgZGVtYW5kYmFzZWQgc3dpdGNoaW5nCkBAIC01MSw4ICs1MiwyMCBAQAogCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCiAjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJXAogCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCisvKiBBYm92ZSBNSU5fU0FNUExJTkdfUkFURSB3aWxsIHZhbmlzaCB3aXRoIGl0cyBzeXNmcyBmaWxlIHNvb24KKyAqIERlZmluZSB0aGUgbWluaW1hbCBzZXR0YWJsZSBzYW1wbGluZyByYXRlIHRvIHRoZSBncmVhdGVyIG9mOgorICogICAtICJIVyB0cmFuc2l0aW9uIGxhdGVuY3kiICogMTAwIChzYW1lIGFzIGRlZmF1bHQgc2FtcGxpbmcgLyAxMCkKKyAqICAgLSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCisgKiBUbyBhdm9pZCB0aGF0IHVzZXJzcGFjZSBzaG9vdHMgaXRzZWxmLgorKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zYW1wbGluZ19yYXRlKHZvaWQpCit7CisJcmV0dXJuIG1heChkZWZfc2FtcGxpbmdfcmF0ZSAvIDEwLCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKK30KKworLyogVGhpcyB3aWxsIGFsc28gdmFuaXNoIHNvb24gd2l0aCByZW1vdmluZyBzYW1wbGluZ19yYXRlX21heCAqLwogI2RlZmluZSBNQVhfU0FNUExJTkdfUkFURQkJCSg1MDAgKiBkZWZfc2FtcGxpbmdfcmF0ZSkKLSNkZWZpbmUgREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSCSgxMDAwKQorI2RlZmluZSBMQVRFTkNZX01VTFRJUExJRVIJCQkoMTAwMCkKICNkZWZpbmUgVFJBTlNJVElPTl9MQVRFTkNZX0xJTUlUCQkoMTAgKiAxMDAwICogMTAwMCkKIAogc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC02NSwxNCArNzgsMTQgQEAKIAljcHV0aW1lNjRfdCBwcmV2X2NwdV93YWxsOwogCWNwdXRpbWU2NF90IHByZXZfY3B1X25pY2U7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9saWN5OwotIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKIAl1bnNpZ25lZCBpbnQgZnJlcV9sbzsKIAl1bnNpZ25lZCBpbnQgZnJlcV9sb19qaWZmaWVzOwogCXVuc2lnbmVkIGludCBmcmVxX2hpX2ppZmZpZXM7CiAJaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgZW5hYmxlOjEsCi0JICAgICAgICAgICAgIHNhbXBsZV90eXBlOjE7CisJCXNhbXBsZV90eXBlOjE7CiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfZGJzX2luZm9fcywgY3B1X2Ric19pbmZvKTsKIApAQCAtMjAzLDEyICsyMTYsMjggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21heChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBvbmRlbWFuZCBzYW1wbGluZ19yYXRlX21heCAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsCisJCSAgICAgICBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9taW4oc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogb25kZW1hbmQgc2FtcGxpbmdfcmF0ZV9taW4gIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOwogfQogCiAjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpCQlcCkBAIC0yMzgsMTMgKzI2NywxMSBAQAogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19SQVRFCi0JCSAgICAgfHwgaW5wdXQgPCBNSU5fU0FNUExJTkdfUkFURSkgeworCWlmIChyZXQgIT0gMSkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBpbnB1dDsKKwlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gbWF4KGlucHV0LCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUoKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMjc5LDE0ICszMDYsMTQgQEAKIAl1bnNpZ25lZCBpbnQgajsKIAogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7Ci0JaWYgKCByZXQgIT0gMSApCisJaWYgKHJldCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggaW5wdXQgPiAxICkKKwlpZiAoaW5wdXQgPiAxKQogCQlpbnB1dCA9IDE7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmICggaW5wdXQgPT0gZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgKSB7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAoaW5wdXQgPT0gZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpIHsgLyogbm90aGluZyB0byBkbyAqLwogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiBjb3VudDsKIAl9CkBAIC0zMzcsNyArMzY0LDcgQEAKIGRlZmluZV9vbmVfcncoaWdub3JlX25pY2VfbG9hZCk7CiBkZWZpbmVfb25lX3J3KHBvd2Vyc2F2ZV9iaWFzKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYnNfYXR0cmlidXRlc1tdID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRic19hdHRyaWJ1dGVzW10gPSB7CiAJJnNhbXBsaW5nX3JhdGVfbWF4LmF0dHIsCiAJJnNhbXBsaW5nX3JhdGVfbWluLmF0dHIsCiAJJnNhbXBsaW5nX3JhdGUuYXR0ciwKQEAgLTUxMiw4ICs1MzksNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQoZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JICAgICAgICAgICAgICAgICAgICAgICAgCWRic19pbmZvLT5mcmVxX2xvLAotCSAgICAgICAgICAgICAgICAgICAgICAgIAlDUFVGUkVRX1JFTEFUSU9OX0gpOworCQkJZGJzX2luZm8tPmZyZXFfbG8sIENQVUZSRVFfUkVMQVRJT05fSCk7CiAJfQogCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtvbmRlbWFuZF93cSwgJmRic19pbmZvLT53b3JrLCBkZWxheSk7CiAJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwpAQCAtNTMwLDcgKzU1Niw3IEBACiAJZGJzX2luZm8tPnNhbXBsZV90eXBlID0gREJTX05PUk1BTF9TQU1QTEU7CiAJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmZGJzX2luZm8tPndvcmssIGRvX2Ric190aW1lcik7CiAJcXVldWVfZGVsYXllZF93b3JrX29uKGRic19pbmZvLT5jcHUsIGtvbmRlbWFuZF93cSwgJmRic19pbmZvLT53b3JrLAotCSAgICAgICAgICAgICAgICAgICAgICBkZWxheSk7CisJCWRlbGF5KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCkBAIC01OTEsMTEgKzYxNyw5IEBACiAJCQlpZiAobGF0ZW5jeSA9PSAwKQogCQkJCWxhdGVuY3kgPSAxOwogCi0JCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IGxhdGVuY3kgKgotCQkJCQlERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVI7Ci0KLQkJCWlmIChkZWZfc2FtcGxpbmdfcmF0ZSA8IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpCi0JCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSBNSU5fU1RBVF9TQU1QTElOR19SQVRFOworCQkJZGVmX3NhbXBsaW5nX3JhdGUgPQorCQkJCW1heChsYXRlbmN5ICogTEFURU5DWV9NVUxUSVBMSUVSLAorCQkJCSAgICBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKIAogCQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGRlZl9zYW1wbGluZ19yYXRlOwogCQl9CkBAIC02MTcsMTIgKzY0MSwxMCBAQAogCQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwogCQlpZiAocG9saWN5LT5tYXggPCB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LT5jdXIpCiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCh0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5LT5tYXgsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBDUFVGUkVRX1JFTEFUSU9OX0gpOworCQkJCXBvbGljeS0+bWF4LCBDUFVGUkVRX1JFTEFUSU9OX0gpOwogCQllbHNlIGlmIChwb2xpY3ktPm1pbiA+IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ktPmN1cikKIAkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3ktPm1pbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVFfUkVMQVRJT05fTCk7CisJCQkJcG9saWN5LT5taW4sIENQVUZSRVFfUkVMQVRJT05fTCk7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJYnJlYWs7CiAJfQpAQCAtNjc3LDcgKzY5OSw3IEBACiBNT0RVTEVfQVVUSE9SKCJWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4iKTsKIE1PRFVMRV9BVVRIT1IoIkFsZXhleSBTdGFyaWtvdnNraXkgPGFsZXhleS55LnN0YXJpa292c2tpeUBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIidjcHVmcmVxX29uZGVtYW5kJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZvciAiCi0gICAgICAgICAgICAgICAgICAgIkxvdyBMYXRlbmN5IEZyZXF1ZW5jeSBUcmFuc2l0aW9uIGNhcGFibGUgcHJvY2Vzc29ycyIpOworCSJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3NvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggYzBmZjk3ZC4uNWE2MmQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0yLDcgKzIsNyBAQAogICogIGRyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+LgotICoJICAgICAgKEMpIDIwMDQgWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPi4KKyAqICAoQykgMjAwNCBab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgc3BpbmxvY2tfdCBjcHVmcmVxX3N0YXRzX2xvY2s7CiAKLSNkZWZpbmUgQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIoX25hbWUsX21vZGUsX3Nob3cpIFwKKyNkZWZpbmUgQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdykgXAogc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgX2F0dHJfIyNfbmFtZSA9IHtcCiAJLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUsIH0sIFwKIAkuc2hvdyA9IF9zaG93LFwKQEAgLTUwLDggKzUwLDcgQEAKIAlzc2l6ZV90KCpzaG93KSAoc3RydWN0IGNwdWZyZXFfc3RhdHMgKiwgY2hhciAqKTsKIH07CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdHNfdXBkYXRlICh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGludCBjcHVmcmVxX3N0YXRzX3VwZGF0ZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfdGltZTsKQEAgLTY4LDggKzY3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNob3dfdG90YWxfdHJhbnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdG90YWxfdHJhbnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgcG9saWN5LT5jcHUpOwogCWlmICghc3RhdCkKQEAgLTc4LDggKzc2LDcgQEAKIAkJCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgc3RhdC0+Y3B1KS0+dG90YWxfdHJhbnMpOwogfQogCi1zdGF0aWMgc3NpemVfdAotc2hvd190aW1lX2luX3N0YXRlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RpbWVfaW5fc3RhdGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJaW50IGk7CkBAIC04OSwxNCArODYsMTQgQEAKIAljcHVmcmVxX3N0YXRzX3VwZGF0ZShzdGF0LT5jcHUpOwogCWZvciAoaSA9IDA7IGkgPCBzdGF0LT5zdGF0ZV9udW07IGkrKykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIldSAlbGx1XG4iLCBzdGF0LT5mcmVxX3RhYmxlW2ldLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzdGF0LT50aW1lX2luX3N0YXRlW2ldKSk7CisJCQkodW5zaWduZWQgbG9uZyBsb25nKQorCQkJY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3RhdC0+dGltZV9pbl9zdGF0ZVtpXSkpOwogCX0KIAlyZXR1cm4gbGVuOwogfQogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUwotc3RhdGljIHNzaXplX3QKLXNob3dfdHJhbnNfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdHJhbnNfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJaW50IGksIGo7CkBAIC0xMzksMTEgKzEzNiwxMSBAQAogCQlyZXR1cm4gUEFHRV9TSVpFOwogCXJldHVybiBsZW47CiB9Ci1DUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0cmFuc190YWJsZSwwNDQ0LHNob3dfdHJhbnNfdGFibGUpOworQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodHJhbnNfdGFibGUsIDA0NDQsIHNob3dfdHJhbnNfdGFibGUpOwogI2VuZGlmCiAKLUNQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRvdGFsX3RyYW5zLDA0NDQsc2hvd190b3RhbF90cmFucyk7Ci1DUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0aW1lX2luX3N0YXRlLDA0NDQsc2hvd190aW1lX2luX3N0YXRlKTsKK0NQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRvdGFsX3RyYW5zLCAwNDQ0LCBzaG93X3RvdGFsX3RyYW5zKTsKK0NQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRpbWVfaW5fc3RhdGUsIDA0NDQsIHNob3dfdGltZV9pbl9zdGF0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJl9hdHRyX3RvdGFsX3RyYW5zLmF0dHIsCkBAIC0xNTgsOCArMTU1LDcgQEAKIAkubmFtZSA9ICJzdGF0cyIKIH07CiAKLXN0YXRpYyBpbnQKLWZyZXFfdGFibGVfZ2V0X2luZGV4KHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0LCB1bnNpZ25lZCBpbnQgZnJlcSkKK3N0YXRpYyBpbnQgZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQsIHVuc2lnbmVkIGludCBmcmVxKQogewogCWludCBpbmRleDsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGF0LT5tYXhfc3RhdGU7IGluZGV4KyspCkBAIC0xODMsOCArMTc5LDcgQEAKIAkJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlIChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGksIGosIGNvdW50ID0gMCwgcmV0ID0gMDsKQEAgLTE5NCw3ICsxODksOCBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKIAlpZiAocGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpKQogCQlyZXR1cm4gLUVCVVNZOwotCWlmICgoc3RhdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3N0YXRzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJc3RhdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3N0YXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKChzdGF0KSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKQEAgLTIwMywxMyArMTk5LDE0IEBACiAJCWdvdG8gZXJyb3JfZ2V0X2ZhaWw7CiAJfQogCi0JaWYgKChyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRhdGEtPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKSkpCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkYXRhLT5rb2JqLCAmc3RhdHNfYXR0cl9ncm91cCk7CisJaWYgKHJldCkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAlzdGF0LT5jcHUgPSBjcHU7CiAJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpID0gc3RhdDsKIAotCWZvciAoaT0wOyB0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgeworCWZvciAoaSA9IDA7IHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKQEAgLTI1NSw5ICsyNTIsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdF9ub3RpZmllcl9wb2xpY3kgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQl2b2lkICpkYXRhKQorc3RhdGljIGludCBjcHVmcmVxX3N0YXRfbm90aWZpZXJfcG9saWN5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCWludCByZXQ7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBkYXRhOwpAQCAtMjY4LDE0ICsyNjQsMTQgQEAKIAl0YWJsZSA9IGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZShjcHUpOwogCWlmICghdGFibGUpCiAJCXJldHVybiAwOwotCWlmICgocmV0ID0gY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUocG9saWN5LCB0YWJsZSkpKQorCXJldCA9IGNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHBvbGljeSwgdGFibGUpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdF9ub3RpZmllcl90cmFucyAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCXZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdF9ub3RpZmllcl90cmFucyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQ7CkBAIC0zNDAsMTkgKzMzNiwyMCBAQAogCS5ub3RpZmllcl9jYWxsID0gY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3RyYW5zCiB9OwogCi1zdGF0aWMgaW50Ci1fX2luaXQgY3B1ZnJlcV9zdGF0c19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX3N0YXRzX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBjcHU7CiAKIAlzcGluX2xvY2tfaW5pdCgmY3B1ZnJlcV9zdGF0c19sb2NrKTsKLQlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3BvbGljeV9ibG9jaywKLQkJCQlDUFVGUkVRX1BPTElDWV9OT1RJRklFUikpKQorCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3BvbGljeV9ibG9jaywKKwkJCQlDUFVGUkVRX1BPTElDWV9OT1RJRklFUik7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfdHJhbnNfYmxvY2ssCi0JCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKSkpIHsKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl90cmFuc19ibG9jaywKKwkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworCWlmIChyZXQpIHsKIAkJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl9wb2xpY3lfYmxvY2ssCiAJCQkJQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpOwogCQlyZXR1cm4gcmV0OwpAQCAtMzY0LDggKzM2MSw3IEBACiAJfQogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQKLV9fZXhpdCBjcHVmcmVxX3N0YXRzX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX3N0YXRzX2V4aXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCkBAIC0zNzksMTAgKzM3NSwxMCBAQAogCX0KIH0KIAotTU9EVUxFX0FVVEhPUiAoIlpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIidjcHVmcmVxX3N0YXRzJyAtIEEgZHJpdmVyIHRvIGV4cG9ydCBjcHVmcmVxIHN0YXRzICIKK01PRFVMRV9BVVRIT1IoIlpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiJ2NwdWZyZXFfc3RhdHMnIC0gQSBkcml2ZXIgdG8gZXhwb3J0IGNwdWZyZXEgc3RhdHMgIgogCQkJCSJ0aHJvdWdoIHN5c2ZzIGZpbGVzeXN0ZW0iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGNwdWZyZXFfc3RhdHNfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX3N0YXRzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwppbmRleCAxNDQyYmJhLi42NmQyZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwpAQCAtMjQsOSArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLQogLyoqCiAgKiBBIGZldyB2YWx1ZXMgbmVlZGVkIGJ5IHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IKICAqLwpAQCAtMzcsNyArMzQsNyBAQAogCQkJCQkJCXVzZXJzcGFjZSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X2lzX21hbmFnZWQpOwogCi1zdGF0aWMgREVGSU5FX01VVEVYCSh1c2Vyc3BhY2VfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWCh1c2Vyc3BhY2VfbXV0ZXgpOwogc3RhdGljIGludCBjcHVzX3VzaW5nX3VzZXJzcGFjZV9nb3Zlcm5vcjsKIAogI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgXApAQCAtNDYsOSArNDMsOSBAQAogLyoga2VlcCB0cmFjayBvZiBmcmVxdWVuY3kgdHJhbnNpdGlvbnMgKi8KIHN0YXRpYyBpbnQKIHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQorCXZvaWQgKmRhdGEpCiB7Ci0gICAgICAgIHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CiAKIAlpZiAoIXBlcl9jcHUoY3B1X2lzX21hbmFnZWQsIGZyZXEtPmNwdSkpCiAJCXJldHVybiAwOwpAQCAtNTcsMTEgKzU0LDExIEBACiAJCQlmcmVxLT5jcHUsIGZyZXEtPm5ldyk7CiAJcGVyX2NwdShjcHVfY3VyX2ZyZXEsIGZyZXEtPmNwdSkgPSBmcmVxLT5uZXc7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7Ci0gICAgICAgIC5ub3RpZmllcl9jYWxsICA9IHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyCisJLm5vdGlmaWVyX2NhbGwgID0gdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIKIH07CiAKIApAQCAtOTMsOCArOTAsMTEgQEAKIAkgKiBXZSdyZSBzYWZlIGZyb20gY29uY3VycmVudCBjYWxscyB0byAtPnRhcmdldCgpIGhlcmUKIAkgKiBhcyB3ZSBob2xkIHRoZSB1c2Vyc3BhY2VfbXV0ZXggbG9jay4gSWYgd2Ugd2VyZSBjYWxsaW5nCiAJICogY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0LCBhIGRlYWRsb2NrIHNpdHVhdGlvbiBtaWdodCBvY2N1cjoKLQkgKiBBOiBjcHVmcmVxX3NldCAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpIC0+IGNwdWZyZXFfZHJpdmVyX3RhcmdldChsb2NrIHBvbGljeS0+bG9jaykKLQkgKiBCOiBjcHVmcmVxX3NldF9wb2xpY3kobG9jayBwb2xpY3ktPmxvY2spIC0+IF9fY3B1ZnJlcV9nb3Zlcm5vciAtPiBjcHVmcmVxX2dvdmVybm9yX3VzZXJzcGFjZSAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpCisJICogQTogY3B1ZnJlcV9zZXQgKGxvY2sgdXNlcnNwYWNlX211dGV4KSAtPgorCSAqICAgICAgY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGxvY2sgcG9saWN5LT5sb2NrKQorCSAqIEI6IGNwdWZyZXFfc2V0X3BvbGljeShsb2NrIHBvbGljeS0+bG9jaykgLT4KKwkgKiAgICAgIF9fY3B1ZnJlcV9nb3Zlcm5vciAtPgorCSAqICAgICAgICAgY3B1ZnJlcV9nb3Zlcm5vcl91c2Vyc3BhY2UgKGxvY2sgdXNlcnNwYWNlX211dGV4KQogCSAqLwogCXJldCA9IF9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgZnJlcSwgQ1BVRlJFUV9SRUxBVElPTl9MKTsKIApAQCAtMjEwLDkgKzIxMCwxMCBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+LCBSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQ1BVZnJlcSBwb2xpY3kgZ292ZXJub3IgJ3VzZXJzcGFjZSciKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+LCAiCisJCSJSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUFVmcmVxIHBvbGljeSBnb3Zlcm5vciAndXNlcnNwYWNlJyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRQogZnNfaW5pdGNhbGwoY3B1ZnJlcV9nb3ZfdXNlcnNwYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKaW5kZXggOTA3MWQ4MC4uYTliZDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJdW5zaWduZWQgaW50IG1heF9mcmVxID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKSB7CiAJCQlkcHJpbnRrKCJ0YWJsZSBlbnRyeSAldSBpcyBpbnZhbGlkLCBza2lwcGluZ1xuIiwgaSk7CkBAIC03MCw3ICs3MCw3IEBACiAJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwKIAkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwpAQCAtMTI1LDEzICsxMjUsMTMgQEAKIAlpZiAoIWNwdV9vbmxpbmUocG9saWN5LT5jcHUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CiAJCWlmICgoZnJlcSA8IHBvbGljeS0+bWluKSB8fCAoZnJlcSA+IHBvbGljeS0+bWF4KSkKIAkJCWNvbnRpbnVlOwotCQlzd2l0Y2gocmVsYXRpb24pIHsKKwkJc3dpdGNoIChyZWxhdGlvbikgewogCQljYXNlIENQVUZSRVFfUkVMQVRJT05fSDoKIAkJCWlmIChmcmVxIDw9IHRhcmdldF9mcmVxKSB7CiAJCQkJaWYgKGZyZXEgPj0gb3B0aW1hbC5mcmVxdWVuY3kpIHsKQEAgLTE3OCw3ICsxNzgsNyBAQAogLyoqCiAgKiBzaG93X2F2YWlsYWJsZV9mcmVxcyAtIHNob3cgYXZhaWxhYmxlIGZyZXF1ZW5jaWVzIGZvciB0aGUgc3BlY2lmaWVkIENQVQogICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2F2YWlsYWJsZV9mcmVxcyAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXZhaWxhYmxlX2ZyZXFzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGkgPSAwOwogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJdGFibGUgPSBwZXJfY3B1KHNob3dfdGFibGUsIGNwdSk7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJaWYgKHRhYmxlW2ldLmZyZXF1ZW5jeSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKIAkJY291bnQgKz0gc3ByaW50ZigmYnVmW2NvdW50XSwgIiVkICIsIHRhYmxlW2ldLmZyZXF1ZW5jeSk7CkBAIC0yMzQsNiArMjM0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZSk7CiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJDUFVmcmVxIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXJzIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUFVmcmVxIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwppbmRleCBlNTIyMTQ0Li4wMWFmZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKQEAgLTg2LDcgKzg2LDcgQEAKIGNvbmZpZyBDUllQVE9fU0hBMV9TMzkwCiAJdHJpc3RhdGUgIlNIQTEgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEEtMSBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoRklQUyAxODAtMS9ERklQUyAxODAtMikuCkBAIC05NCw3ICs5NCw3IEBACiBjb25maWcgQ1JZUFRPX1NIQTI1Nl9TMzkwCiAJdHJpc3RhdGUgIlNIQTI1NiBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19IQVNICiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQTI1NiBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoREZJUFMgMTgwLTIpLgpAQCAtMTA1LDcgKzEwNSw3IEBACiBjb25maWcgQ1JZUFRPX1NIQTUxMl9TMzkwCiAJdHJpc3RhdGUgIlNIQTM4NCBhbmQgU0hBNTEyIGRpZ2VzdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBTMzkwCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBNTEyIHNlY3VyZSBoYXNoIHN0YW5kYXJkLgpAQCAtMjAwLDQgKzIwMCwxMyBAQAogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIElYUDR4eCBOUEUgY3J5cHRvIGVuZ2luZS4KIAorY29uZmlnIENSWVBUT19ERVZfUFBDNFhYCisJdHJpc3RhdGUgIkRyaXZlciBBTUNDIFBQQzR4eCBjcnlwdG8gYWNjZWxlcmF0b3IiCisJZGVwZW5kcyBvbiBQUEMgJiYgNHh4CisJc2VsZWN0IENSWVBUT19IQVNICisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gaGF2ZSBzdXBwb3J0IGZvciBBTUNDIGNyeXB0byBhY2NlbGVyYXRpb24uCisKIGVuZGlmICMgQ1JZUFRPX0hXCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlCmluZGV4IDczNTU3YjIuLjliZjRhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlCkBAIC00LDMgKzQsNCBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYKSArPSBoaWZuXzc5NXgubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUykgKz0gdGFsaXRvcy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9JWFA0WFgpICs9IGl4cDR4eF9jcnlwdG8ubworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYKSArPSBhbWNjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzNzZlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFgpICs9IGNyeXB0bzR4eC5vCitjcnlwdG80eHgtb2JqcyA6PSAgY3J5cHRvNHh4X2NvcmUubyBjcnlwdG80eHhfYWxnLm8gY3J5cHRvNHh4X3NhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiNmUxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jCkBAIC0wLDAgKzEsMjkzIEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgTGludXggY3J5cHRvIGFsZ29yaXRobXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorI2luY2x1ZGUgImNyeXB0bzR4eF9yZWdfZGVmLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X3NhLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X2NvcmUuaCIKKwordm9pZCBzZXRfZHluYW1pY19zYV9jb21tYW5kXzAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYSwgdTMyIHNhdmVfaCwKKwkJCSAgICAgIHUzMiBzYXZlX2l2LCB1MzIgbGRfaCwgdTMyIGxkX2l2LCB1MzIgaGRyX3Byb2MsCisJCQkgICAgICB1MzIgaCwgdTMyIGMsIHUzMiBwYWRfdHlwZSwgdTMyIG9wX2dycCwgdTMyIG9wLAorCQkJICAgICAgdTMyIGRpcikKK3sKKwlzYS0+c2FfY29tbWFuZF8wLncgPSAwOworCXNhLT5zYV9jb21tYW5kXzAuYmYuc2F2ZV9oYXNoX3N0YXRlID0gc2F2ZV9oOworCXNhLT5zYV9jb21tYW5kXzAuYmYuc2F2ZV9pdiA9IHNhdmVfaXY7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5sb2FkX2hhc2hfc3RhdGUgPSBsZF9oOworCXNhLT5zYV9jb21tYW5kXzAuYmYubG9hZF9pdiA9IGxkX2l2OworCXNhLT5zYV9jb21tYW5kXzAuYmYuaGRyX3Byb2MgPSBoZHJfcHJvYzsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmhhc2hfYWxnID0gaDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmNpcGhlcl9hbGcgPSBjOworCXNhLT5zYV9jb21tYW5kXzAuYmYucGFkX3R5cGUgPSBwYWRfdHlwZSAmIDM7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5leHRlbmRfcGFkID0gcGFkX3R5cGUgPj4gMjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLm9wX2dyb3VwID0gb3BfZ3JwOworCXNhLT5zYV9jb21tYW5kXzAuYmYub3Bjb2RlID0gb3A7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5kaXIgPSBkaXI7Cit9CisKK3ZvaWQgc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8xKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2EsIHUzMiBjbSwgdTMyIGhtYWNfbWMsCisJCQkgICAgICB1MzIgY2ZiLCB1MzIgZXNuLCB1MzIgc25fbWFzaywgdTMyIG11dGUsCisJCQkgICAgICB1MzIgY3BfcGFkLCB1MzIgY3BfcGF5LCB1MzIgY3BfaGRyKQoreworCXNhLT5zYV9jb21tYW5kXzEudyA9IDA7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jcnlwdG9fbW9kZTMxID0gKGNtICYgNCkgPj4gMjsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNyeXB0b19tb2RlOV84ID0gY20gJiAzOworCXNhLT5zYV9jb21tYW5kXzEuYmYuZmVlZGJhY2tfbW9kZSA9IGNmYiwKKwlzYS0+c2FfY29tbWFuZF8xLmJmLnNhX3JldiA9IDE7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5leHRlbmRlZF9zZXFfbnVtID0gZXNuOworCXNhLT5zYV9jb21tYW5kXzEuYmYuc2VxX251bV9tYXNrID0gc25fbWFzazsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLm11dGFibGVfYml0X3Byb2MgPSBtdXRlOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY29weV9wYWQgPSBjcF9wYWQ7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jb3B5X3BheWxvYWQgPSBjcF9wYXk7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jb3B5X2hkciA9IGNwX2hkcjsKK30KKworaW50IGNyeXB0bzR4eF9lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9PVVRCT1VORDsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCWN0eC0+aXNfaGFzaCA9IDA7CisJY3R4LT5wZF9jdGwgPSAweDE7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsIHJlcS0+ZHN0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIHJlcS0+aW5mbywKKwkJCQkgIGdldF9keW5hbWljX3NhX2l2X3NpemUoY3R4KSk7Cit9CisKK2ludCBjcnlwdG80eHhfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCWN0eC0+aXNfaGFzaCA9IDA7CisJY3R4LT5wZF9jdGwgPSAxOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCByZXEtPmluZm8sCisJCQkJICBnZXRfZHluYW1pY19zYV9pdl9zaXplKGN0eCkpOworfQorCisvKioKKyAqIEFFUyBGdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBjcnlwdG80eHhfc2V0a2V5X2FlcyhzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCQljb25zdCB1OCAqa2V5LAorCQkJCXVuc2lnbmVkIGludCBrZXlsZW4sCisJCQkJdW5zaWduZWQgY2hhciBjbSwKKwkJCQl1OCBmYikKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfdGZtKGNpcGhlcik7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKwlpbnQgICAgcmM7CisKKwlpZiAoa2V5bGVuICE9IEFFU19LRVlTSVpFXzI1NiAmJgorCQlrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMTkyICYmIGtleWxlbiAhPSBBRVNfS0VZU0laRV8xMjgpIHsKKwkJY3J5cHRvX2FibGtjaXBoZXJfc2V0X2ZsYWdzKGNpcGhlciwKKwkJCQlDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENyZWF0ZSBTQSAqLworCWlmIChjdHgtPnNhX2luX2RtYV9hZGRyIHx8IGN0eC0+c2Ffb3V0X2RtYV9hZGRyKQorCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCisJcmMgPSBjcnlwdG80eHhfYWxsb2Nfc2EoY3R4LCBTQV9BRVMxMjhfTEVOICsgKGtleWxlbi0xNikgLyA0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciA9PSAwKSB7CisJCXJjID0gY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChjdHgpOworCQlpZiAocmMpIHsKKwkJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJLyogU2V0dXAgU0EgKi8KKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHNhLCBTQV9OT1RfU0FWRV9IQVNILCBTQV9OT1RfU0FWRV9JViwKKwkJCQkgU0FfTE9BRF9IQVNIX0ZST01fU0EsIFNBX0xPQURfSVZfRlJPTV9TVEFURSwKKwkJCQkgU0FfTk9fSEVBREVSX1BST0MsIFNBX0hBU0hfQUxHX05VTEwsCisJCQkJIFNBX0NJUEhFUl9BTEdfQUVTLCBTQV9QQURfVFlQRV9aRVJPLAorCQkJCSBTQV9PUF9HUk9VUF9CQVNJQywgU0FfT1BDT0RFX0RFQ1JZUFQsCisJCQkJIERJUl9JTkJPVU5EKTsKKworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMShzYSwgY20sIFNBX0hBU0hfTU9ERV9IQVNILAorCQkJCSBmYiwgU0FfRVhURU5ERURfU05fT0ZGLAorCQkJCSBTQV9TRVFfTUFTS19PRkYsIFNBX01DX0VOQUJMRSwKKwkJCQkgU0FfTk9UX0NPUFlfUEFELCBTQV9OT1RfQ09QWV9QQVlMT0FELAorCQkJCSBTQV9OT1RfQ09QWV9IRFIpOworCWNyeXB0bzR4eF9tZW1jcHlfbGUoY3R4LT5zYV9pbiArIGdldF9keW5hbWljX3NhX29mZnNldF9rZXlfZmllbGQoY3R4KSwKKwkJCSAgICBrZXksIGtleWxlbik7CisJc2EtPnNhX2NvbnRlbnRzID0gU0FfQUVTX0NPTlRFTlRTIHwgKGtleWxlbiA8PCAyKTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmtleV9sZW4gPSBrZXlsZW4gPj4gMzsKKwljdHgtPmlzX2hhc2ggPSAwOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisJbWVtY3B5KGN0eC0+c2FfaW4gKyBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKGN0eCksCisJCQkodm9pZCAqKSZjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciwgNCk7CisJY3R4LT5vZmZzZXRfdG9fc3JfcHRyID0gZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChjdHgpOworCisJbWVtY3B5KGN0eC0+c2Ffb3V0LCBjdHgtPnNhX2luLCBjdHgtPnNhX2xlbiAqIDQpOworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmRpciA9IERJUl9PVVRCT1VORDsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X3NldGtleV9hZXNfY2JjKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLAorCQkJICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXJldHVybiBjcnlwdG80eHhfc2V0a2V5X2FlcyhjaXBoZXIsIGtleSwga2V5bGVuLCBDUllQVE9fTU9ERV9DQkMsCisJCQkJICAgIENSWVBUT19GRUVEQkFDS19NT0RFX05PX0ZCKTsKK30KKworLyoqCisgKiBIQVNIIFNIQTEgRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgY3J5cHRvNHh4X2hhc2hfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgc2FfbGVuLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgaGEsCisJCQkJICAgdW5zaWduZWQgY2hhciBobSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKm15X2FsZyA9IGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyhhbGcpOworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisJc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCAqc2FfaW47CisJaW50IHJjOworCisJY3R4LT5kZXYgICA9IG15X2FsZy0+ZGV2OworCWN0eC0+aXNfaGFzaCA9IDE7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKworCS8qIENyZWF0ZSBTQSAqLworCWlmIChjdHgtPnNhX2luX2RtYV9hZGRyIHx8IGN0eC0+c2Ffb3V0X2RtYV9hZGRyKQorCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCisJcmMgPSBjcnlwdG80eHhfYWxsb2Nfc2EoY3R4LCBzYV9sZW4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyID09IDApIHsKKwkJY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChjdHgpOworCQlpZiAoIWN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyKSB7CisJCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwl0Zm0tPmNydF9haGFzaC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KTsKKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzAoc2EsIFNBX1NBVkVfSEFTSCwgU0FfTk9UX1NBVkVfSVYsCisJCQkJIFNBX05PVF9MT0FEX0hBU0gsIFNBX0xPQURfSVZfRlJPTV9TQSwKKwkJCQkgU0FfTk9fSEVBREVSX1BST0MsIGhhLCBTQV9DSVBIRVJfQUxHX05VTEwsCisJCQkJIFNBX1BBRF9UWVBFX1pFUk8sIFNBX09QX0dST1VQX0JBU0lDLAorCQkJCSBTQV9PUENPREVfSEFTSCwgRElSX0lOQk9VTkQpOworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMShzYSwgMCwgU0FfSEFTSF9NT0RFX0hBU0gsCisJCQkJIENSWVBUT19GRUVEQkFDS19NT0RFX05PX0ZCLCBTQV9FWFRFTkRFRF9TTl9PRkYsCisJCQkJIFNBX1NFUV9NQVNLX09GRiwgU0FfTUNfRU5BQkxFLAorCQkJCSBTQV9OT1RfQ09QWV9QQUQsIFNBX05PVF9DT1BZX1BBWUxPQUQsCisJCQkJIFNBX05PVF9DT1BZX0hEUik7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKwlzYS0+c2FfY29udGVudHMgPSBTQV9IQVNIMTYwX0NPTlRFTlRTOworCXNhX2luID0gKHN0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjAgKikgY3R4LT5zYV9pbjsKKwkvKiBOZWVkIHRvIHplcm8gaGFzaCBkaWdlc3QgaW4gU0EgKi8KKwltZW1zZXQoc2FfaW4tPmlubmVyX2RpZ2VzdCwgMCwgc2l6ZW9mKHNhX2luLT5pbm5lcl9kaWdlc3QpKTsKKwltZW1zZXQoc2FfaW4tPm91dGVyX2RpZ2VzdCwgMCwgc2l6ZW9mKHNhX2luLT5vdXRlcl9kaWdlc3QpKTsKKwlzYV9pbi0+c3RhdGVfcHRyID0gY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHI7CisJY3R4LT5vZmZzZXRfdG9fc3JfcHRyID0gZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChjdHgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCWludCBkczsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJZHMgPSBjcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZSgKKwkJCV9fY3J5cHRvX2FoYXNoX2Nhc3QocmVxLT5iYXNlLnRmbSkpOworCXNhLT5zYV9jb21tYW5kXzAuYmYuZGlnZXN0X2xlbiA9IGRzID4+IDI7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5sb2FkX2hhc2hfc3RhdGUgPSBTQV9MT0FEX0hBU0hfRlJPTV9TQTsKKwljdHgtPmlzX2hhc2ggPSAxOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX3VwZGF0ZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+aXNfaGFzaCA9IDE7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKwljdHgtPnBkX2N0bCA9IDB4MTE7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywKKwkJCQkgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgcmVxLT5yZXN1bHQsCisJCQkJICByZXEtPm5ieXRlcywgTlVMTCwgMCk7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF9maW5hbChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5oYXNoX2ZpbmFsID0gMTsKKwljdHgtPnBkX2N0bCA9IDB4MTE7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywKKwkJCQkgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgcmVxLT5yZXN1bHQsCisJCQkJICByZXEtPm5ieXRlcywgTlVMTCwgMCk7Cit9CisKKy8qKgorICogU0hBMSBBbGdvcml0aG0KKyAqLworaW50IGNyeXB0bzR4eF9zaGExX2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0bzR4eF9oYXNoX2FsZ19pbml0KHRmbSwgU0FfSEFTSDE2MF9MRU4sIFNBX0hBU0hfQUxHX1NIQTEsCisJCQkJICAgICAgIFNBX0hBU0hfTU9ERV9IQVNIKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwZGZiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpAQCAtMCwwICsxLDEzMTAgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEFNQ0MgY3J5cHRvIG9mZmxvYWQgTGludXggZGV2aWNlIGRyaXZlciBmb3IgdXNlIHdpdGgKKyAqIExpbnV4IENyeXB0b0FQSS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2Rjci5oPgorI2luY2x1ZGUgPGFzbS9kY3ItcmVncy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKyNpbmNsdWRlICJjcnlwdG80eHhfcmVnX2RlZi5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9jb3JlLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X3NhLmgiCisKKyNkZWZpbmUgUFBDNFhYX1NFQ19WRVJTSU9OX1NUUgkJCSIwLjUiCisKKy8qKgorICogUFBDNHh4IENyeXB0byBFbmdpbmUgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICovCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfaHdfaW5pdChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXVuaW9uIGNlX3Jpbmdfc2l6ZSByaW5nX3NpemU7CisJdW5pb24gY2VfcmluZ19jb250b2wgcmluZ19jdHJsOworCXVuaW9uIGNlX3BhcnRfcmluZ19zaXplIHBhcnRfcmluZ19zaXplOworCXVuaW9uIGNlX2lvX3RocmVzaG9sZCBpb190aHJlc2hvbGQ7CisJdTMyIHJhbmRfbnVtOworCXVuaW9uIGNlX3BlX2RtYV9jZmcgcGVfZG1hX2NmZzsKKworCXdyaXRlbChQUEM0WFhfQllURV9PUkRFUiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0JZVEVfT1JERVJfQ0ZHKTsKKwkvKiBzZXR1cCBwZSBkbWEsIGluY2x1ZGUgcmVzZXQgc2csIHBkciBhbmQgcGUsIHRoZW4gcmVsZWFzZSByZXNldCAqLworCXBlX2RtYV9jZmcudyA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib19zZ3BkX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLmJvX2RhdGFfZW4gPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fc2FfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYuYm9fcGRfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYuZHluYW1pY19zYV9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9zZyA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZHIgPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGUgPSAxOworCXdyaXRlbChwZV9kbWFfY2ZnLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRV9ETUFfQ0ZHKTsKKwkvKiB1biByZXNldCBwZSxzZyBhbmQgcGRyICovCisJcGVfZG1hX2NmZy5iZi5wZV9tb2RlID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3NnID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BkciA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZSA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib190ZF9lbiA9IDA7CisJd3JpdGVsKHBlX2RtYV9jZmcudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BFX0RNQV9DRkcpOworCXdyaXRlbChkZXYtPnBkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BEUl9CQVNFKTsKKwl3cml0ZWwoZGV2LT5wZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SRFJfQkFTRSk7CisJd3JpdGVsKFBQQzRYWF9QUk5HX0NUUkxfQVVUT19FTiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BSTkdfQ1RSTCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZF9udW0sIHNpemVvZihyYW5kX251bSkpOworCXdyaXRlbChyYW5kX251bSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BSTkdfU0VFRF9MKTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kX251bSwgc2l6ZW9mKHJhbmRfbnVtKSk7CisJd3JpdGVsKHJhbmRfbnVtLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUFJOR19TRUVEX0gpOworCXJpbmdfc2l6ZS53ID0gMDsKKwlyaW5nX3NpemUuYmYucmluZ19vZmZzZXQgPSBQUEM0WFhfUERfU0laRTsKKwlyaW5nX3NpemUuYmYucmluZ19zaXplICAgPSBQUEM0WFhfTlVNX1BEOworCXdyaXRlbChyaW5nX3NpemUudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JJTkdfU0laRSk7CisJcmluZ19jdHJsLncgPSAwOworCXdyaXRlbChyaW5nX2N0cmwudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JJTkdfQ1RSTCk7CisJd3JpdGVsKFBQQzRYWF9EQ18zREVTX0VOLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfREVWSUNFX0NUUkwpOworCXdyaXRlbChkZXYtPmdkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFKTsKKwl3cml0ZWwoZGV2LT5zZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRSk7CisJcGFydF9yaW5nX3NpemUudyA9IDA7CisJcGFydF9yaW5nX3NpemUuYmYuc2RyX3NpemUgPSBQUEM0WFhfU0RSX1NJWkU7CisJcGFydF9yaW5nX3NpemUuYmYuZ2RyX3NpemUgPSBQUEM0WFhfR0RSX1NJWkU7CisJd3JpdGVsKHBhcnRfcmluZ19zaXplLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QQVJUX1JJTkdfU0laRSk7CisJd3JpdGVsKFBQQzRYWF9TRF9CVUZGRVJfU0laRSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BBUlRfUklOR19DRkcpOworCWlvX3RocmVzaG9sZC53ID0gMDsKKwlpb190aHJlc2hvbGQuYmYub3V0cHV0X3RocmVzaG9sZCA9IFBQQzRYWF9PVVRQVVRfVEhSRVNIT0xEOworCWlvX3RocmVzaG9sZC5iZi5pbnB1dF90aHJlc2hvbGQgID0gUFBDNFhYX0lOUFVUX1RIUkVTSE9MRDsKKwl3cml0ZWwoaW9fdGhyZXNob2xkLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JT19USFJFU0hPTEQpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUERSX0JBU0VfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUkRSX0JBU0VfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEtUX1NSQ19VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QS1RfREVTVF9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9TQV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRV9VQUREUik7CisJLyogdW4gcmVzZXQgcGUsc2cgYW5kIHBkciAqLworCXBlX2RtYV9jZmcuYmYucGVfbW9kZSA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9zZyA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZHIgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGUgPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fdGRfZW4gPSAwOworCXdyaXRlbChwZV9kbWFfY2ZnLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRV9ETUFfQ0ZHKTsKKwkvKmNsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdCovCisJd3JpdGVsKFBQQzRYWF9JTlRFUlJVUFRfQ0xSLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0NMUik7CisJd3JpdGVsKFBQQzRYWF9JTlRfREVTQ1JfQ05ULCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0RFU0NSX0NOVCk7CisJd3JpdGVsKFBQQzRYWF9JTlRfREVTQ1JfQ05ULCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0RFU0NSX0NOVCk7CisJd3JpdGVsKFBQQzRYWF9JTlRfQ0ZHLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0NGRyk7CisJd3JpdGVsKFBQQzRYWF9QRF9ET05FX0lOVCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9FTik7Cit9CisKK2ludCBjcnlwdG80eHhfYWxsb2Nfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwgdTMyIHNpemUpCit7CisJY3R4LT5zYV9pbiA9IGRtYV9hbGxvY19jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgc2l6ZSAqIDQsCisJCQkJCSZjdHgtPnNhX2luX2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoY3R4LT5zYV9pbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN0eC0+c2Ffb3V0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzaXplICogNCwKKwkJCQkJICZjdHgtPnNhX291dF9kbWFfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKGN0eC0+c2Ffb3V0ID09IE5VTEwpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBjdHgtPnNhX2xlbiAqIDQsCisJCQkJICBjdHgtPnNhX2luLCBjdHgtPnNhX2luX2RtYV9hZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGN0eC0+c2FfaW4sIDAsIHNpemUgKiA0KTsKKwltZW1zZXQoY3R4LT5zYV9vdXQsIDAsIHNpemUgKiA0KTsKKwljdHgtPnNhX2xlbiA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcnlwdG80eHhfZnJlZV9zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCWlmIChjdHgtPnNhX2luICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBjdHgtPnNhX2xlbiAqIDQsCisJCQkJICBjdHgtPnNhX2luLCBjdHgtPnNhX2luX2RtYV9hZGRyKTsKKwlpZiAoY3R4LT5zYV9vdXQgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIGN0eC0+c2FfbGVuICogNCwKKwkJCQkgIGN0eC0+c2Ffb3V0LCBjdHgtPnNhX291dF9kbWFfYWRkcik7CisKKwljdHgtPnNhX2luX2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX291dF9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9sZW4gPSAwOworfQorCit1MzIgY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCWN0eC0+c3RhdGVfcmVjb3JkID0gZG1hX2FsbG9jX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCXNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSwKKwkJCQkmY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCWlmICghY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChjdHgtPnN0YXRlX3JlY29yZCwgMCwgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGNyeXB0bzR4eF9mcmVlX3N0YXRlX3JlY29yZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCWlmIChjdHgtPnN0YXRlX3JlY29yZCAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSwKKwkJCQkgIGN0eC0+c3RhdGVfcmVjb3JkLAorCQkJCSAgY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIpOworCWN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyID0gMDsKK30KKworLyoqCisgKiBhbGxvYyBtZW1vcnkgZm9yIHRoZSBnYXRoZXIgcmluZworICogbm8gbmVlZCB0byBhbGxvYyBidWYgZm9yIHRoZSByaW5nCisgKiBnZHJfdGFpbCwgZ2RyX2hlYWQgYW5kIGdkcl9jb3VudCBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9idWlsZF9wZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCWRldi0+cGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICAgICAgJmRldi0+cGRyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+cGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+cGRyX3VpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnBkcl91aW5mbykgeworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICBkZXYtPnBkciwKKwkJCQkgIGRldi0+cGRyX3BhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChkZXYtPnBkciwgMCwgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCk7CisJZGV2LT5zaGFkb3dfc2FfcG9vbCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgMjU2ICogUFBDNFhYX05VTV9QRCwKKwkJCQkgICAmZGV2LT5zaGFkb3dfc2FfcG9vbF9wYSwKKwkJCQkgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2hhZG93X3NhX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5zaGFkb3dfc3JfcG9vbCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogUFBDNFhYX05VTV9QRCwKKwkJCSAmZGV2LT5zaGFkb3dfc3JfcG9vbF9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNoYWRvd19zcl9wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBDNFhYX05VTV9QRDsgaSsrKSB7CisJCXBkX3VpbmZvID0gKHN0cnVjdCBwZF91aW5mbyAqKSAoZGV2LT5wZHJfdWluZm8gKworCQkJCQkJc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBpKTsKKworCQkvKiBhbGxvYyAyNTYgYnl0ZXMgd2hpY2ggaXMgZW5vdWdoIGZvciBhbnkga2luZCBvZiBkeW5hbWljIHNhICovCisJCXBkX3VpbmZvLT5zYV92YSA9IGRldi0+c2hhZG93X3NhX3Bvb2wgKyAyNTYgKiBpOworCQlwZF91aW5mby0+c2FfcGEgPSBkZXYtPnNoYWRvd19zYV9wb29sX3BhICsgMjU2ICogaTsKKworCQkvKiBhbGxvYyBzdGF0ZSByZWNvcmQgKi8KKwkJcGRfdWluZm8tPnNyX3ZhID0gZGV2LT5zaGFkb3dfc3JfcG9vbCArCisJCSAgICBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBpOworCQlwZF91aW5mby0+c3JfcGEgPSBkZXYtPnNoYWRvd19zcl9wb29sX3BhICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIGk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9kZXN0cm95X3BkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBkciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICBkZXYtPnBkciwgZGV2LT5wZHJfcGEpOworCWlmIChkZXYtPnNoYWRvd19zYV9wb29sKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIDI1NiAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICBkZXYtPnNoYWRvd19zYV9wb29sLCBkZXYtPnNoYWRvd19zYV9wb29sX3BhKTsKKwlpZiAoZGV2LT5zaGFkb3dfc3JfcG9vbCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogUFBDNFhYX05VTV9QRCwKKwkJCWRldi0+c2hhZG93X3NyX3Bvb2wsIGRldi0+c2hhZG93X3NyX3Bvb2xfcGEpOworCisJa2ZyZWUoZGV2LT5wZHJfdWluZm8pOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9nZXRfcGRfZnJvbV9wZHJfbm9sb2NrKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdTMyIHJldHZhbDsKKwl1MzIgdG1wOworCisJcmV0dmFsID0gZGV2LT5wZHJfaGVhZDsKKwl0bXAgPSAoZGV2LT5wZHJfaGVhZCArIDEpICUgUFBDNFhYX05VTV9QRDsKKworCWlmICh0bXAgPT0gZGV2LT5wZHJfdGFpbCkKKwkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCisJZGV2LT5wZHJfaGVhZCA9IHRtcDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3B1dF9wZF90b19wZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgdTMyIGlkeCkKK3sKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwZF91aW5mbyA9IChzdHJ1Y3QgcGRfdWluZm8gKikoZGV2LT5wZHJfdWluZm8gKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIGlkeCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5wZHJfdGFpbCAhPSBQUEM0WFhfTEFTVF9QRCkKKwkJZGV2LT5wZHJfdGFpbCsrOworCWVsc2UKKwkJZGV2LT5wZHJfdGFpbCA9IDA7CisJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfRlJFRTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjZV9wZCAqY3J5cHRvNHh4X2dldF9wZHAoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZG1hX2FkZHJfdCAqcGRfZG1hLCB1MzIgaWR4KQoreworCSpwZF9kbWEgPSBkZXYtPnBkcl9wYSArIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogaWR4OworCisJcmV0dXJuIGRldi0+cGRyICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBpZHg7Cit9CisKKy8qKgorICogYWxsb2MgbWVtb3J5IGZvciB0aGUgZ2F0aGVyIHJpbmcKKyAqIG5vIG5lZWQgdG8gYWxsb2MgYnVmIGZvciB0aGUgcmluZworICogZ2RyX3RhaWwsIGdkcl9oZWFkIGFuZCBnZHJfY291bnQgYXJlIGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfYnVpbGRfZ2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJZGV2LT5nZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogUFBDNFhYX05VTV9HRCwKKwkJCQkgICAgICAmZGV2LT5nZHJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5nZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGRldi0+Z2RyLCAwLCBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIFBQQzRYWF9OVU1fR0QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG80eHhfZGVzdHJveV9nZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkgIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogUFBDNFhYX05VTV9HRCwKKwkJCSAgZGV2LT5nZHIsIGRldi0+Z2RyX3BhKTsKK30KKworLyoKKyAqIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKiBwcmVlbXB0aW9uIG9yIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkCisgKi8KK3UzMiBjcnlwdG80eHhfZ2V0X25fZ2Qoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgaW50IG4pCit7CisJdTMyIHJldHZhbDsKKwl1MzIgdG1wOworCWlmIChuID49IFBQQzRYWF9OVU1fR0QpCisJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKworCXJldHZhbCA9IGRldi0+Z2RyX2hlYWQ7CisJdG1wID0gKGRldi0+Z2RyX2hlYWQgKyBuKSAlIFBQQzRYWF9OVU1fR0Q7CisJaWYgKGRldi0+Z2RyX2hlYWQgPiBkZXYtPmdkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPmdkcl9oZWFkICYmIHRtcCA+PSBkZXYtPmdkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0gZWxzZSBpZiAoZGV2LT5nZHJfaGVhZCA8IGRldi0+Z2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+Z2RyX2hlYWQgfHwgdG1wID49IGRldi0+Z2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfQorCWRldi0+Z2RyX2hlYWQgPSB0bXA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wdXRfZ2RfdG9fZ2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+Z2RyX3RhaWwgPT0gZGV2LT5nZHJfaGVhZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkZXYtPmdkcl90YWlsICE9IFBQQzRYWF9MQVNUX0dEKQorCQlkZXYtPmdkcl90YWlsKys7CisJZWxzZQorCQlkZXYtPmdkcl90YWlsID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZV9nZCAqY3J5cHRvNHh4X2dldF9nZHAoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgZG1hX2FkZHJfdCAqZ2RfZG1hLCB1MzIgaWR4KQoreworCSpnZF9kbWEgPSBkZXYtPmdkcl9wYSArIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogaWR4OworCisJcmV0dXJuIChzdHJ1Y3QgY2VfZ2QgKikgKGRldi0+Z2RyICsgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBpZHgpOworfQorCisvKioKKyAqIGFsbG9jIG1lbW9yeSBmb3IgdGhlIHNjYXR0ZXIgcmluZworICogbmVlZCB0byBhbGxvYyBidWYgZm9yIHRoZSByaW5nCisgKiBzZHJfdGFpbCwgc2RyX2hlYWQgYW5kIHNkcl9jb3VudCBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9idWlsZF9zZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2Vfc2QgKnNkX2FycmF5OworCisJLyogYWxsb2MgbWVtb3J5IGZvciBzY2F0dGVyIGRlc2NyaXB0b3IgcmluZyAqLworCWRldi0+c2RyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICAgICAgJmRldi0+c2RyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2RyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSA9IFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhID0KKwkJZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAqIFBQQzRYWF9OVU1fU0QsCisJCQkmZGV2LT5zY2F0dGVyX2J1ZmZlcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogUFBDNFhYX05VTV9TRCwKKwkJCQkgIGRldi0+c2RyLCBkZXYtPnNkcl9wYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNkX2FycmF5ID0gZGV2LT5zZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFBDNFhYX05VTV9TRDsgaSsrKSB7CisJCXNkX2FycmF5W2ldLnB0ciA9IGRldi0+c2NhdHRlcl9idWZmZXJfcGEgKworCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICogaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2Rlc3Ryb3lfc2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+c2RyICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogUFBDNFhYX05VTV9TRCwKKwkJCQkgIGRldi0+c2RyLCBkZXYtPnNkcl9wYSk7CisKKwlpZiAoZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSwKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfcGEpOworfQorCisvKgorICogd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIHByZWVtcHRpb24gb3IgaW50ZXJydXB0IG11c3QgYmUgZGlzYWJsZWQKKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfZ2V0X25fc2Qoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgaW50IG4pCit7CisJdTMyIHJldHZhbDsKKwl1MzIgdG1wOworCisJaWYgKG4gPj0gUFBDNFhYX05VTV9TRCkKKwkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCisJcmV0dmFsID0gZGV2LT5zZHJfaGVhZDsKKwl0bXAgPSAoZGV2LT5zZHJfaGVhZCArIG4pICUgUFBDNFhYX05VTV9TRDsKKwlpZiAoZGV2LT5zZHJfaGVhZCA+IGRldi0+Z2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+c2RyX2hlYWQgJiYgdG1wID49IGRldi0+c2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfSBlbHNlIGlmIChkZXYtPnNkcl9oZWFkIDwgZGV2LT5zZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5zZHJfaGVhZCB8fCB0bXAgPj0gZGV2LT5zZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9IC8qIHRoZSBoZWFkID0gdGFpbCwgb3IgZW1wdHkgY2FzZSBpcyBhbHJlYWR5IHRha2UgY2FyZWQgKi8KKwlkZXYtPnNkcl9oZWFkID0gdG1wOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcHV0X3NkX3RvX3NkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPnNkcl90YWlsID09IGRldi0+c2RyX2hlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGRldi0+c2RyX3RhaWwgIT0gUFBDNFhYX0xBU1RfU0QpCisJCWRldi0+c2RyX3RhaWwrKzsKKwllbHNlCisJCWRldi0+c2RyX3RhaWwgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZV9zZCAqY3J5cHRvNHh4X2dldF9zZHAoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgZG1hX2FkZHJfdCAqc2RfZG1hLCB1MzIgaWR4KQoreworCSpzZF9kbWEgPSBkZXYtPnNkcl9wYSArIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogaWR4OworCisJcmV0dXJuICAoc3RydWN0IGNlX3NkICopKGRldi0+c2RyICsgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBpZHgpOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgZG1hX2FkZHJfdCAqYWRkciwgdTMyICpsZW5ndGgsCisJCQkJICAgdTMyICppZHgsIHUzMiAqb2Zmc2V0LCB1MzIgKm5ieXRlcykKK3sKKwl1MzIgbGVuOworCisJaWYgKCpsZW5ndGggPiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHBoeXNfdG9fdmlydCgqYWRkciksCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICsKKwkJCSppZHggKiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKyAqb2Zmc2V0LAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKTsKKwkJKm9mZnNldCA9IDA7CisJCSpsZW5ndGggLT0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQkqbmJ5dGVzIC09IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJaWYgKCppZHggPT0gUFBDNFhYX0xBU1RfU0QpCisJCQkqaWR4ID0gMDsKKwkJZWxzZQorCQkJKCppZHgpKys7CisJCSphZGRyID0gKmFkZHIgKyAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKCpsZW5ndGggPCBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHBoeXNfdG9fdmlydCgqYWRkciksCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICsKKwkJCSppZHggKiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKyAqb2Zmc2V0LCAqbGVuZ3RoKTsKKwkJaWYgKCgqb2Zmc2V0ICsgKmxlbmd0aCkgPT0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSB7CisJCQlpZiAoKmlkeCA9PSBQUEM0WFhfTEFTVF9TRCkKKwkJCQkqaWR4ID0gMDsKKwkJCWVsc2UKKwkJCQkoKmlkeCkrKzsKKwkJCSpuYnl0ZXMgLT0gKmxlbmd0aDsKKwkJCSpvZmZzZXQgPSAwOworCQl9IGVsc2UgeworCQkJKm5ieXRlcyAtPSAqbGVuZ3RoOworCQkJKm9mZnNldCArPSAqbGVuZ3RoOworCQl9CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJbGVuID0gKCpuYnl0ZXMgPD0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSA/CisJCQkJKCpuYnl0ZXMpIDogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQltZW1jcHkocGh5c190b192aXJ0KCphZGRyKSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgKworCQkJKmlkeCAqIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSArICpvZmZzZXQsCisJCQlsZW4pOworCQkqb2Zmc2V0ID0gMDsKKwkJKm5ieXRlcyAtPSBsZW47CisKKwkJaWYgKCppZHggPT0gUFBDNFhYX0xBU1RfU0QpCisJCQkqaWR4ID0gMDsKKwkJZWxzZQorCQkJKCppZHgpKys7CisKKwkJcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfY29weV9wa3RfdG9fZHN0KHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNlX3BkICpwZCwKKwkJCQkgICAgICBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvLAorCQkJCSAgICAgIHUzMiBuYnl0ZXMsCisJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QpCit7CisJZG1hX2FkZHJfdCBhZGRyOworCXUzMiB0aGlzX3NkOworCXUzMiBvZmZzZXQ7CisJdTMyIGxlbjsKKwl1MzIgaTsKKwl1MzIgc2dfbGVuOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwl0aGlzX3NkID0gcGRfdWluZm8tPmZpcnN0X3NkOworCW9mZnNldCA9IDA7CisJaSA9IDA7CisKKwl3aGlsZSAobmJ5dGVzKSB7CisJCXNnID0gJmRzdFtpXTsKKwkJc2dfbGVuID0gc2ctPmxlbmd0aDsKKwkJYWRkciA9IGRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2Uoc2cpLAorCQkJCXNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCisJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJbGVuID0gKG5ieXRlcyA8PSBzZy0+bGVuZ3RoKSA/IG5ieXRlcyA6IHNnLT5sZW5ndGg7CisJCQl3aGlsZSAoY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2UoZGV2LCAmYWRkciwgJmxlbiwKKwkJCQkmdGhpc19zZCwgJm9mZnNldCwgJm5ieXRlcykpCisJCQkJOworCQkJaWYgKCFuYnl0ZXMpCisJCQkJcmV0dXJuOworCQkJaSsrOworCQl9IGVsc2UgeworCQkJbGVuID0gKG5ieXRlcyA8PSAoZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplIC0gb2Zmc2V0KSkgPworCQkJCW5ieXRlcyA6IChkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgLSBvZmZzZXQpOworCQkJbGVuID0gKHNnLT5sZW5ndGggPCBsZW4pID8gc2ctPmxlbmd0aCA6IGxlbjsKKwkJCXdoaWxlIChjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShkZXYsICZhZGRyLCAmbGVuLAorCQkJCQkgICAgICAgJnRoaXNfc2QsICZvZmZzZXQsICZuYnl0ZXMpKQorCQkJCTsKKwkJCWlmICghbmJ5dGVzKQorCQkJCXJldHVybjsKKwkJCXNnX2xlbiAtPSBsZW47CisJCQlpZiAoc2dfbGVuKSB7CisJCQkJYWRkciArPSBsZW47CisJCQkJd2hpbGUgKGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKGRldiwgJmFkZHIsCisJCQkJCSZzZ19sZW4sICZ0aGlzX3NkLCAmb2Zmc2V0LCAmbmJ5dGVzKSkKKwkJCQkJOworCQkJfQorCQkJaSsrOworCQl9CisJfQorfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9jb3B5X2RpZ2VzdF90b19kc3Qoc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbywKKwkJCQkJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCXN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQgKnN0YXRlX3JlY29yZCA9CisJCQkJKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQgKikgcGRfdWluZm8tPnNyX3ZhOworCisJaWYgKHNhLT5zYV9jb21tYW5kXzAuYmYuaGFzaF9hbGcgPT0gU0FfSEFTSF9BTEdfU0hBMSkgeworCQltZW1jcHkoKHZvaWQgKikgcGRfdWluZm8tPmRlc3RfdmEsIHN0YXRlX3JlY29yZC0+c2F2ZV9kaWdlc3QsCisJCSAgICAgICBTQV9IQVNIX0FMR19TSEExX0RJR0VTVF9TSVpFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X3JldF9zZ19kZXNjKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvKQoreworCWludCBpOworCWlmIChwZF91aW5mby0+bnVtX2dkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZF91aW5mby0+bnVtX2dkOyBpKyspCisJCQljcnlwdG80eHhfcHV0X2dkX3RvX2dkcihkZXYpOworCQlwZF91aW5mby0+Zmlyc3RfZ2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX2dkID0gMDsKKwl9CisJaWYgKHBkX3VpbmZvLT5udW1fc2QpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkX3VpbmZvLT5udW1fc2Q7IGkrKykKKwkJCWNyeXB0bzR4eF9wdXRfc2RfdG9fc2RyKGRldik7CisKKwkJcGRfdWluZm8tPmZpcnN0X3NkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9zZCA9IDA7CisJfQorfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9hYmxrY2lwaGVyX2RvbmUoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8sCisJCQkJICAgICBzdHJ1Y3QgY2VfcGQgKnBkKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHg7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJsa19yZXE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3Q7CisJZG1hX2FkZHJfdCBhZGRyOworCisJYWJsa19yZXEgPSBhYmxrY2lwaGVyX3JlcXVlc3RfY2FzdChwZF91aW5mby0+YXN5bmNfcmVxKTsKKwljdHggID0gY3J5cHRvX3RmbV9jdHgoYWJsa19yZXEtPmJhc2UudGZtKTsKKworCWlmIChwZF91aW5mby0+dXNpbmdfc2QpIHsKKwkJY3J5cHRvNHh4X2NvcHlfcGt0X3RvX2RzdChkZXYsIHBkLCBwZF91aW5mbywgYWJsa19yZXEtPm5ieXRlcywKKwkJCQkJICBhYmxrX3JlcS0+ZHN0KTsKKwl9IGVsc2UgeworCQlkc3QgPSBwZF91aW5mby0+ZGVzdF92YTsKKwkJYWRkciA9IGRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2UoZHN0KSwKKwkJCQkgICAgZHN0LT5vZmZzZXQsIGRzdC0+bGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOworCX0KKwljcnlwdG80eHhfcmV0X3NnX2Rlc2MoZGV2LCBwZF91aW5mbyk7CisJaWYgKGFibGtfcmVxLT5iYXNlLmNvbXBsZXRlICE9IE5VTEwpCisJCWFibGtfcmVxLT5iYXNlLmNvbXBsZXRlKCZhYmxrX3JlcS0+YmFzZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfYWhhc2hfZG9uZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8pCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eDsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYWhhc2hfcmVxOworCisJYWhhc2hfcmVxID0gYWhhc2hfcmVxdWVzdF9jYXN0KHBkX3VpbmZvLT5hc3luY19yZXEpOworCWN0eCAgPSBjcnlwdG9fdGZtX2N0eChhaGFzaF9yZXEtPmJhc2UudGZtKTsKKworCWNyeXB0bzR4eF9jb3B5X2RpZ2VzdF90b19kc3QocGRfdWluZm8sCisJCQkJICAgICBjcnlwdG9fdGZtX2N0eChhaGFzaF9yZXEtPmJhc2UudGZtKSk7CisJY3J5cHRvNHh4X3JldF9zZ19kZXNjKGRldiwgcGRfdWluZm8pOworCS8qIGNhbGwgdXNlciBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB4ICovCisJaWYgKGFoYXNoX3JlcS0+YmFzZS5jb21wbGV0ZSAhPSBOVUxMKQorCQlhaGFzaF9yZXEtPmJhc2UuY29tcGxldGUoJmFoYXNoX3JlcS0+YmFzZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcGRfZG9uZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCB1MzIgaWR4KQoreworCXN0cnVjdCBjZV9wZCAqcGQ7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKworCXBkID0gIGRldi0+cGRyICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkqaWR4OworCXBkX3VpbmZvID0gZGV2LT5wZHJfdWluZm8gKyBzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSppZHg7CisJaWYgKGNyeXB0b190Zm1fYWxnX3R5cGUocGRfdWluZm8tPmFzeW5jX3JlcS0+dGZtKSA9PQorCQkJQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIpCisJCXJldHVybiBjcnlwdG80eHhfYWJsa2NpcGhlcl9kb25lKGRldiwgcGRfdWluZm8sIHBkKTsKKwllbHNlCisJCXJldHVybiBjcnlwdG80eHhfYWhhc2hfZG9uZShkZXYsIHBkX3VpbmZvKTsKK30KKworLyoqCisgKiBOb3RlOiBPbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvcHkgaXRlbXMgdGhhdCBpcyB3b3JkIGFsaWduZWQuCisgKi8KK3ZvaWQgY3J5cHRvNHh4X21lbWNweV9sZSh1bnNpZ25lZCBpbnQgKmRzdCwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgaW50IGxlbikKK3sKKwl1OCAqdG1wOworCWZvciAoOyBsZW4gPj0gNDsgYnVmICs9IDQsIGxlbiAtPSA0KQorCQkqZHN0KysgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGludCAqKSBidWYpOworCisJdG1wID0gKHU4ICopZHN0OworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAzOgorCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAqKGJ1ZisyKTsKKwkJKnRtcCsrID0gKihidWYrMSk7CisJCSp0bXArKyA9ICpidWY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gKihidWYrMSk7CisJCSp0bXArKyA9ICpidWY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gKmJ1ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfc3RvcF9hbGwoc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYpCit7CisJY3J5cHRvNHh4X2Rlc3Ryb3lfcGRyKGNvcmVfZGV2LT5kZXYpOworCWNyeXB0bzR4eF9kZXN0cm95X2dkcihjb3JlX2Rldi0+ZGV2KTsKKwljcnlwdG80eHhfZGVzdHJveV9zZHIoY29yZV9kZXYtPmRldik7CisJZGV2X3NldF9kcnZkYXRhKGNvcmVfZGV2LT5kZXZpY2UsIE5VTEwpOworCWlvdW5tYXAoY29yZV9kZXYtPmRldi0+Y2VfYmFzZSk7CisJa2ZyZWUoY29yZV9kZXYtPmRldik7CisJa2ZyZWUoY29yZV9kZXYpOworfQorCit2b2lkIGNyeXB0bzR4eF9yZXR1cm5fcGQoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCSB1MzIgcGRfZW50cnksIHN0cnVjdCBjZV9wZCAqcGQsCisJCQkgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbykKK3sKKwkvKiBpcnEgc2hvdWxkIGJlIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlkZXYtPnBkcl9oZWFkID0gcGRfZW50cnk7CisJcGQtPnBkX2N0bC53ID0gMDsKKwlwZC0+cGRfY3RsX2xlbi53ID0gMDsKKwlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9GUkVFOworfQorCisvKgorICogZGVyaXZlIG51bWJlciBvZiBlbGVtZW50cyBpbiBzY2F0dGVybGlzdAorICogU2hhbWxlc3NseSBjb3B5IGZyb20gdGFsaXRvcy5jCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3NnX2NvdW50KHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbGlzdCwgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2dfbGlzdDsKKwlpbnQgc2dfbmVudHMgPSAwOworCisJd2hpbGUgKG5ieXRlcykgeworCQlzZ19uZW50cysrOworCQlpZiAoc2ctPmxlbmd0aCA+IG5ieXRlcykKKwkJCWJyZWFrOworCQluYnl0ZXMgLT0gc2ctPmxlbmd0aDsKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisKKwlyZXR1cm4gc2dfbmVudHM7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X25leHRfZ2QodTMyIGN1cnJlbnQpCit7CisJaWYgKGN1cnJlbnQgIT0gUFBDNFhYX0xBU1RfR0QpCisJCXJldHVybiBjdXJyZW50ICsgMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdldF9uZXh0X3NkKHUzMiBjdXJyZW50KQoreworCWlmIChjdXJyZW50ICE9IFBQQzRYWF9MQVNUX1NEKQorCQlyZXR1cm4gY3VycmVudCArIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwordTMyIGNyeXB0bzR4eF9idWlsZF9wZChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwKKwkJICAgICAgIHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCSAgICAgICB2b2lkICppdiwgdTMyIGl2X2xlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJZG1hX2FkZHJfdCBhZGRyLCBwZF9kbWEsIHNkX2RtYSwgZ2RfZG1hOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3QgY2VfZ2QgKmdkOworCXN0cnVjdCBjZV9wZCAqcGQ7CisJdTMyIG51bV9nZCwgbnVtX3NkOworCXUzMiBmc3RfZ2QgPSAweGZmZmZmZmZmOworCXUzMiBmc3Rfc2QgPSAweGZmZmZmZmZmOworCXUzMiBwZF9lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8gPSBOVUxMOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSBkYXRhbGVuLCBpZHg7CisJdW5zaWduZWQgaW50IGl2bGVuID0gMDsKKwl1MzIgZ2RfaWR4ID0gMDsKKworCS8qIGZpZ3VyZSBob3cgbWFueSBnZCBpcyBuZWVkZWQgKi8KKwludW1fZ2QgPSBnZXRfc2dfY291bnQoc3JjLCBkYXRhbGVuKTsKKwlpZiAobnVtX2dkID09IDEpCisJCW51bV9nZCA9IDA7CisKKwkvKiBmaWd1cmUgaG93IG1hbnkgc2QgaXMgbmVlZGVkICovCisJaWYgKHNnX2lzX2xhc3QoZHN0KSB8fCBjdHgtPmlzX2hhc2gpIHsKKwkJbnVtX3NkID0gMDsKKwl9IGVsc2UgeworCQlpZiAoZGF0YWxlbiA+IFBQQzRYWF9TRF9CVUZGRVJfU0laRSkgeworCQkJbnVtX3NkID0gZGF0YWxlbiAvIFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwkJCWlmIChkYXRhbGVuICUgUFBDNFhYX1NEX0JVRkZFUl9TSVpFKQorCQkJCW51bV9zZCsrOworCQl9IGVsc2UgeworCQkJbnVtX3NkID0gMTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGZvbGxvdyBzZWN0aW9uIG9mIGNvZGUgbmVlZHMgdG8gYmUgcHJvdGVjdGVkCisJICogVGhlIGdhdGhlciByaW5nIGFuZCBzY2F0dGVyIHJpbmcgbmVlZHMgdG8gYmUgY29uc2VjdXRpdmUKKwkgKiBJbiBjYXNlIG9mIHJ1biBvdXQgb2YgYW55IGtpbmQgb2YgZGVzY3JpcHRvciwgdGhlIGRlc2NyaXB0b3IKKwkgKiBhbHJlYWR5IGdvdCBtdXN0IGJlIHJldHVybiB0aGUgb3JpZ2luYWwgcGxhY2UuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAobnVtX2dkKSB7CisJCWZzdF9nZCA9IGNyeXB0bzR4eF9nZXRfbl9nZChkZXYsIG51bV9nZCk7CisJCWlmIChmc3RfZ2QgPT0gRVJJTkdfV0FTX0ZVTEwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCWlmIChudW1fc2QpIHsKKwkJZnN0X3NkID0gY3J5cHRvNHh4X2dldF9uX3NkKGRldiwgbnVtX3NkKTsKKwkJaWYgKGZzdF9zZCA9PSBFUklOR19XQVNfRlVMTCkgeworCQkJaWYgKG51bV9nZCkKKwkJCQlkZXYtPmdkcl9oZWFkID0gZnN0X2dkOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisJcGRfZW50cnkgPSBjcnlwdG80eHhfZ2V0X3BkX2Zyb21fcGRyX25vbG9jayhkZXYpOworCWlmIChwZF9lbnRyeSA9PSBFUklOR19XQVNfRlVMTCkgeworCQlpZiAobnVtX2dkKQorCQkJZGV2LT5nZHJfaGVhZCA9IGZzdF9nZDsKKwkJaWYgKG51bV9zZCkKKwkJCWRldi0+c2RyX2hlYWQgPSBmc3Rfc2Q7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXBkX3VpbmZvID0gKHN0cnVjdCBwZF91aW5mbyAqKShkZXYtPnBkcl91aW5mbyArCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogcGRfZW50cnkpOworCXBkID0gY3J5cHRvNHh4X2dldF9wZHAoZGV2LCAmcGRfZG1hLCBwZF9lbnRyeSk7CisJcGRfdWluZm8tPmFzeW5jX3JlcSA9IHJlcTsKKwlwZF91aW5mby0+bnVtX2dkID0gbnVtX2dkOworCXBkX3VpbmZvLT5udW1fc2QgPSBudW1fc2Q7CisKKwlpZiAoaXZfbGVuIHx8IGN0eC0+aXNfaGFzaCkgeworCQlpdmxlbiA9IGl2X2xlbjsKKwkJcGQtPnNhID0gcGRfdWluZm8tPnNhX3BhOworCQlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgcGRfdWluZm8tPnNhX3ZhOworCQlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCQltZW1jcHkoc2EsIGN0eC0+c2FfaW4sIGN0eC0+c2FfbGVuICogNCk7CisJCWVsc2UKKwkJCW1lbWNweShzYSwgY3R4LT5zYV9vdXQsIGN0eC0+c2FfbGVuICogNCk7CisKKwkJbWVtY3B5KCh2b2lkICopIHNhICsgY3R4LT5vZmZzZXRfdG9fc3JfcHRyLAorCQkJJnBkX3VpbmZvLT5zcl9wYSwgNCk7CisKKwkJaWYgKGl2X2xlbikKKwkJCWNyeXB0bzR4eF9tZW1jcHlfbGUocGRfdWluZm8tPnNyX3ZhLCBpdiwgaXZfbGVuKTsKKwl9IGVsc2UgeworCQlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpIHsKKwkJCXBkLT5zYSA9IGN0eC0+c2FfaW5fZG1hX2FkZHI7CisJCQlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwkJfSBlbHNlIHsKKwkJCXBkLT5zYSA9IGN0eC0+c2Ffb3V0X2RtYV9hZGRyOworCQkJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0OworCQl9CisJfQorCXBkLT5zYV9sZW4gPSBjdHgtPnNhX2xlbjsKKwlpZiAobnVtX2dkKSB7CisJCS8qIGdldCBmaXJzdCBnZCB3ZSBhcmUgZ29pbmcgdG8gdXNlICovCisJCWdkX2lkeCA9IGZzdF9nZDsKKwkJcGRfdWluZm8tPmZpcnN0X2dkID0gZnN0X2dkOworCQlwZF91aW5mby0+bnVtX2dkID0gbnVtX2dkOworCQlnZCA9IGNyeXB0bzR4eF9nZXRfZ2RwKGRldiwgJmdkX2RtYSwgZ2RfaWR4KTsKKwkJcGQtPnNyYyA9IGdkX2RtYTsKKwkJLyogZW5hYmxlIGdhdGhlciAqLworCQlzYS0+c2FfY29tbWFuZF8wLmJmLmdhdGhlciA9IDE7CisJCWlkeCA9IDA7CisJCXNyYyA9ICZzcmNbMF07CisJCS8qIHdhbGsgdGhlIHNnLCBhbmQgc2V0dXAgZ2F0aGVyIGFycmF5ICovCisJCXdoaWxlIChuYnl0ZXMpIHsKKwkJCXNnID0gJnNyY1tpZHhdOworCQkJYWRkciA9IGRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2Uoc2cpLAorCQkJCSAgICBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwkJCWdkLT5wdHIgPSBhZGRyOworCQkJZ2QtPmN0bF9sZW4ubGVuID0gc2ctPmxlbmd0aDsKKwkJCWdkLT5jdGxfbGVuLmRvbmUgPSAwOworCQkJZ2QtPmN0bF9sZW4ucmVhZHkgPSAxOworCQkJaWYgKHNnLT5sZW5ndGggPj0gbmJ5dGVzKQorCQkJCWJyZWFrOworCQkJbmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCQlnZF9pZHggPSBnZXRfbmV4dF9nZChnZF9pZHgpOworCQkJZ2QgPSBjcnlwdG80eHhfZ2V0X2dkcChkZXYsICZnZF9kbWEsIGdkX2lkeCk7CisJCQlpZHgrKzsKKwkJfQorCX0gZWxzZSB7CisJCXBkLT5zcmMgPSAodTMyKWRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2Uoc3JjKSwKKwkJCQlzcmMtPm9mZnNldCwgc3JjLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQkvKgorCQkgKiBEaXNhYmxlIGdhdGhlciBpbiBzYSBjb21tYW5kCisJCSAqLworCQlzYS0+c2FfY29tbWFuZF8wLmJmLmdhdGhlciA9IDA7CisJCS8qCisJCSAqIEluZGljYXRlIGdhdGhlciBhcnJheSBpcyBub3QgdXNlZAorCQkgKi8KKwkJcGRfdWluZm8tPmZpcnN0X2dkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9nZCA9IDA7CisJfQorCWlmIChjdHgtPmlzX2hhc2ggfHwgc2dfaXNfbGFzdChkc3QpKSB7CisJCS8qCisJCSAqIHdlIGtub3cgYXBwbGljYXRpb24gZ2l2ZSB1cyBkc3QgYSB3aG9sZSBwaWVjZSBvZiBtZW1vcnkKKwkJICogbm8gbmVlZCB0byB1c2Ugc2NhdHRlciByaW5nLgorCQkgKiBJbiBjYXNlIG9mIGlzX2hhc2gsIHRoZSBpY3YgaXMgYWx3YXlzIGF0IGVuZCBvZiBzcmMgZGF0YS4KKwkJICovCisJCXBkX3VpbmZvLT51c2luZ19zZCA9IDA7CisJCXBkX3VpbmZvLT5maXJzdF9zZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fc2QgPSAwOworCQlwZF91aW5mby0+ZGVzdF92YSA9IGRzdDsKKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5zY2F0dGVyID0gMDsKKwkJaWYgKGN0eC0+aXNfaGFzaCkKKwkJCXBkLT5kZXN0ID0gdmlydF90b19waHlzKCh2b2lkICopZHN0KTsKKwkJZWxzZQorCQkJcGQtPmRlc3QgPSAodTMyKWRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJCXNnX3BhZ2UoZHN0KSwgZHN0LT5vZmZzZXQsCisJCQkJCWRzdC0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY2Vfc2QgKnNkID0gTlVMTDsKKwkJdTMyIHNkX2lkeCA9IGZzdF9zZDsKKwkJbmJ5dGVzID0gZGF0YWxlbjsKKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5zY2F0dGVyID0gMTsKKwkJcGRfdWluZm8tPnVzaW5nX3NkID0gMTsKKwkJcGRfdWluZm8tPmRlc3RfdmEgPSBkc3Q7CisJCXBkX3VpbmZvLT5maXJzdF9zZCA9IGZzdF9zZDsKKwkJcGRfdWluZm8tPm51bV9zZCA9IG51bV9zZDsKKwkJc2QgPSBjcnlwdG80eHhfZ2V0X3NkcChkZXYsICZzZF9kbWEsIHNkX2lkeCk7CisJCXBkLT5kZXN0ID0gc2RfZG1hOworCQkvKiBzZXR1cCBzY2F0dGVyIGRlc2NyaXB0b3IgKi8KKwkJc2QtPmN0bC5kb25lID0gMDsKKwkJc2QtPmN0bC5yZHkgPSAxOworCQkvKiBzZC0+cHRyIHNob3VsZCBiZSBzZXR1cCBieSBzZF9pbml0IHJvdXRpbmUqLworCQlpZHggPSAwOworCQlpZiAobmJ5dGVzID49IFBQQzRYWF9TRF9CVUZGRVJfU0laRSkKKwkJCW5ieXRlcyAtPSBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJCWVsc2UKKwkJCW5ieXRlcyA9IDA7CisJCXdoaWxlIChuYnl0ZXMpIHsKKwkJCXNkX2lkeCA9IGdldF9uZXh0X3NkKHNkX2lkeCk7CisJCQlzZCA9IGNyeXB0bzR4eF9nZXRfc2RwKGRldiwgJnNkX2RtYSwgc2RfaWR4KTsKKwkJCS8qIHNldHVwIHNjYXR0ZXIgZGVzY3JpcHRvciAqLworCQkJc2QtPmN0bC5kb25lID0gMDsKKwkJCXNkLT5jdGwucmR5ID0gMTsKKwkJCWlmIChuYnl0ZXMgPj0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFKQorCQkJCW5ieXRlcyAtPSBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJCQllbHNlCisJCQkJLyoKKwkJCQkgKiBTRCBlbnRyeSBjYW4gaG9sZCBQUEM0WFhfU0RfQlVGRkVSX1NJWkUsCisJCQkJICogd2hpY2ggaXMgbW9yZSB0aGFuIG5ieXRlcywgc28gZG9uZS4KKwkJCQkgKi8KKwkJCQluYnl0ZXMgPSAwOworCQl9CisJfQorCisJc2EtPnNhX2NvbW1hbmRfMS5iZi5oYXNoX2NyeXB0b19vZmZzZXQgPSAwOworCXBkLT5wZF9jdGwudyA9IGN0eC0+cGRfY3RsOworCXBkLT5wZF9jdGxfbGVuLncgPSAweDAwNDAwMDAwIHwgKGN0eC0+YnlwYXNzIDw8IDI0KSB8IGRhdGFsZW47CisJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfSU5VU0U7CisJd21iKCk7CisJLyogd3JpdGUgYW55IHZhbHVlIHRvIHB1c2ggZW5naW5lIHRvIHJlYWQgYSBwZCAqLworCXdyaXRlbCgxLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0RFU0NSX1JEKTsKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCisvKioKKyAqIEFsZ29yaXRobSBSZWdpc3RyYXRpb24gRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgY3J5cHRvNHh4X2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IHRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG80eHhfYWxnICphbWNjX2FsZyA9IGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyhhbGcpOworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3R4LT5kZXYgPSBhbWNjX2FsZy0+ZGV2OworCWN0eC0+c2FfaW4gPSBOVUxMOworCWN0eC0+c2Ffb3V0ID0gTlVMTDsKKwljdHgtPnNhX2luX2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX291dF9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9sZW4gPSAwOworCisJaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUpCisJCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisJZWxzZSBpZiAoYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX2FoYXNoX3R5cGUpCisJCXRmbS0+Y3J0X2FoYXNoLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9hbGdfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKwljcnlwdG80eHhfZnJlZV9zdGF0ZV9yZWNvcmQoY3R4KTsKK30KKworaW50IGNyeXB0bzR4eF9yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKnNlY19kZXYsCisJCQkgICBzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZywgaW50IGFycmF5X3NpemUpCit7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFsZzsKKwlpbnQgaTsKKwlpbnQgcmMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5X3NpemU7IGkrKykgeworCQlhbGcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2FsZyksIEdGUF9LRVJORUwpOworCQlpZiAoIWFsZykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWFsZy0+YWxnID0gY3J5cHRvX2FsZ1tpXTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFsZy0+YWxnLmNyYV9saXN0KTsKKwkJaWYgKGFsZy0+YWxnLmNyYV9pbml0ID09IE5VTEwpCisJCQlhbGctPmFsZy5jcmFfaW5pdCA9IGNyeXB0bzR4eF9hbGdfaW5pdDsKKwkJaWYgKGFsZy0+YWxnLmNyYV9leGl0ID09IE5VTEwpCisJCQlhbGctPmFsZy5jcmFfZXhpdCA9IGNyeXB0bzR4eF9hbGdfZXhpdDsKKwkJYWxnLT5kZXYgPSBzZWNfZGV2OworCQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnKTsKKwkJaWYgKHJjKSB7CisJCQlsaXN0X2RlbCgmYWxnLT5lbnRyeSk7CisJCQlrZnJlZShhbGcpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYWxnLT5lbnRyeSwgJnNlY19kZXYtPmFsZ19saXN0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfdW5yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKnNlY19kZXYpCit7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFsZywgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhbGcsIHRtcCwgJnNlY19kZXYtPmFsZ19saXN0LCBlbnRyeSkgeworCQlsaXN0X2RlbCgmYWxnLT5lbnRyeSk7CisJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnLT5hbGcpOworCQlrZnJlZShhbGcpOworCX0KK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2JoX3Rhc2tsZXRfY2IodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisJc3RydWN0IGNlX3BkICpwZDsKKwl1MzIgdGFpbDsKKworCXdoaWxlIChjb3JlX2Rldi0+ZGV2LT5wZHJfaGVhZCAhPSBjb3JlX2Rldi0+ZGV2LT5wZHJfdGFpbCkgeworCQl0YWlsID0gY29yZV9kZXYtPmRldi0+cGRyX3RhaWw7CisJCXBkX3VpbmZvID0gY29yZV9kZXYtPmRldi0+cGRyX3VpbmZvICsKKwkJCXNpemVvZihzdHJ1Y3QgcGRfdWluZm8pKnRhaWw7CisJCXBkID0gIGNvcmVfZGV2LT5kZXYtPnBkciArIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogdGFpbDsKKwkJaWYgKChwZF91aW5mby0+c3RhdGUgPT0gUERfRU5UUllfSU5VU0UpICYmCisJCQkJICAgcGQtPnBkX2N0bC5iZi5wZV9kb25lICYmCisJCQkJICAgIXBkLT5wZF9jdGwuYmYuaG9zdF9yZWFkeSkgeworCQkJcGQtPnBkX2N0bC5iZi5wZV9kb25lID0gMDsKKwkJCWNyeXB0bzR4eF9wZF9kb25lKGNvcmVfZGV2LT5kZXYsIHRhaWwpOworCQkJY3J5cHRvNHh4X3B1dF9wZF90b19wZHIoY29yZV9kZXYtPmRldiwgdGFpbCk7CisJCQlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9GUkVFOworCQl9IGVsc2UgeworCQkJLyogaWYgdGFpbCBub3QgZG9uZSwgYnJlYWsgKi8KKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKioKKyAqIFRvcCBIYWxmIG9mIGlzci4KKyAqLworc3RhdGljIGlycXJldHVybl90IGNyeXB0bzR4eF9jZV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3cml0ZWwoUFBDNFhYX0lOVEVSUlVQVF9DTFIsCisJICAgICAgIGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0NMUik7CisJdGFza2xldF9zY2hlZHVsZSgmY29yZV9kZXYtPnRhc2tsZXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIFN1cHBvcnRlZCBDcnlwdG8gQWxnb3JpdGhtcworICovCitzdHJ1Y3QgY3J5cHRvX2FsZyBjcnlwdG80eHhfYWxnW10gPSB7CisJLyogQ3J5cHRvIEFFUyBtb2RlcyAqLworCXsKKwkJLmNyYV9uYW1lIAk9ICJjYmMoYWVzKSIsCisJCS5jcmFfZHJpdmVyX25hbWUgPSAiY2JjLWFlcy1wcGM0eHgiLAorCQkuY3JhX3ByaW9yaXR5IAk9IENSWVBUTzRYWF9DUllQVE9fUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MgCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIgfCBDUllQVE9fQUxHX0FTWU5DLAorCQkuY3JhX2Jsb2Nrc2l6ZSAJPSBBRVNfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplIAk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCksCisJCS5jcmFfYWxpZ25tYXNrIAk9IDAsCisJCS5jcmFfdHlwZSAJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkJLmNyYV9tb2R1bGUgCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfdSAJCT0geworCQkJLmFibGtjaXBoZXIgPSB7CisJCQkJLm1pbl9rZXlzaXplIAk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkJLm1heF9rZXlzaXplIAk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkJLml2c2l6ZQkJPSBBRVNfSVZfU0laRSwKKwkJCQkuc2V0a2V5IAk9IGNyeXB0bzR4eF9zZXRrZXlfYWVzX2NiYywKKwkJCQkuZW5jcnlwdCAJPSBjcnlwdG80eHhfZW5jcnlwdCwKKwkJCQkuZGVjcnlwdCAJPSBjcnlwdG80eHhfZGVjcnlwdCwKKwkJCX0KKwkJfQorCX0sCisJLyogSGFzaCBTSEExICovCisJeworCQkuY3JhX25hbWUJPSAic2hhMSIsCisJCS5jcmFfZHJpdmVyX25hbWUgPSAic2hhMS1wcGM0eHgiLAorCQkuY3JhX3ByaW9yaXR5CT0gQ1JZUFRPNFhYX0NSWVBUT19QUklPUklUWSwKKwkJLmNyYV9mbGFncwk9IENSWVBUT19BTEdfVFlQRV9BSEFTSCB8IENSWVBUT19BTEdfQVNZTkMsCisJCS5jcmFfYmxvY2tzaXplCT0gU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpLAorCQkuY3JhX2FsaWdubWFzawk9IDAsCisJCS5jcmFfdHlwZQk9ICZjcnlwdG9fYWhhc2hfdHlwZSwKKwkJLmNyYV9pbml0CT0gY3J5cHRvNHh4X3NoYTFfYWxnX2luaXQsCisJCS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfdQkJPSB7CisJCQkuYWhhc2ggPSB7CisJCQkJLmRpZ2VzdHNpemUgCT0gU0hBMV9ESUdFU1RfU0laRSwKKwkJCQkuaW5pdAkJPSBjcnlwdG80eHhfaGFzaF9pbml0LAorCQkJCS51cGRhdGUJCT0gY3J5cHRvNHh4X2hhc2hfdXBkYXRlLAorCQkJCS5maW5hbCAgCT0gY3J5cHRvNHh4X2hhc2hfZmluYWwsCisJCQkJLmRpZ2VzdCAJPSBjcnlwdG80eHhfaGFzaF9kaWdlc3QsCisJCQl9CisJCX0KKwl9LAorfTsKKworLyoqCisgKiBNb2R1bGUgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICovCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG80eHhfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldjsKKworCXJjID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYW1jYyxwcGM0NjBleC1jcnlwdG8iKSkgeworCQltdGRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCkgfCBQUEM0NjBFWF9DRV9SRVNFVCk7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNUKSAmIH5QUEM0NjBFWF9DRV9SRVNFVCk7CisJfSBlbHNlIGlmIChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJImFtY2MscHBjNDA1ZXgtY3J5cHRvIikpIHsKKwkJbXRkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QpIHwgUFBDNDA1RVhfQ0VfUkVTRVQpOworCQltdGRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCkgJiB+UFBDNDA1RVhfQ0VfUkVTRVQpOworCX0gZWxzZSBpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCSJhbWNjLHBwYzQ2MHN4LWNyeXB0byIpKSB7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNUKSB8IFBQQzQ2MFNYX0NFX1JFU0VUKTsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QpICYgflBQQzQ2MFNYX0NFX1JFU0VUKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkNyeXB0byBGdW5jdGlvbiBOb3Qgc3VwcG9ydGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvcmVfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghY29yZV9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgY29yZV9kZXYpOworCWNvcmVfZGV2LT5vZmRldiA9IG9mZGV2OworCWNvcmVfZGV2LT5kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghY29yZV9kZXYtPmRldikKKwkJZ290byBlcnJfYWxsb2NfZGV2OworCisJY29yZV9kZXYtPmRldi0+Y29yZV9kZXYgPSBjb3JlX2RldjsKKwljb3JlX2Rldi0+ZGV2aWNlID0gZGV2OworCXNwaW5fbG9ja19pbml0KCZjb3JlX2Rldi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNvcmVfZGV2LT5kZXYtPmFsZ19saXN0KTsKKwlyYyA9IGNyeXB0bzR4eF9idWlsZF9wZHIoY29yZV9kZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9idWlsZF9wZHI7CisKKwlyYyA9IGNyeXB0bzR4eF9idWlsZF9nZHIoY29yZV9kZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9idWlsZF9nZHI7CisKKwlyYyA9IGNyeXB0bzR4eF9idWlsZF9zZHIoY29yZV9kZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9idWlsZF9zZHI7CisKKwkvKiBJbml0IHRhc2tsZXQgZm9yIGJvdHRvbSBoYWxmIHByb2Nlc3NpbmcgKi8KKwl0YXNrbGV0X2luaXQoJmNvcmVfZGV2LT50YXNrbGV0LCBjcnlwdG80eHhfYmhfdGFza2xldF9jYiwKKwkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKKworCS8qIFJlZ2lzdGVyIGZvciBDcnlwdG8gaXNyLCBDcnlwdG8gRW5naW5lIElSUSAqLworCWNvcmVfZGV2LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMCk7CisJcmMgPSByZXF1ZXN0X2lycShjb3JlX2Rldi0+aXJxLCBjcnlwdG80eHhfY2VfaW50ZXJydXB0X2hhbmRsZXIsIDAsCisJCQkgY29yZV9kZXYtPmRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCisJY29yZV9kZXYtPmRldi0+Y2VfYmFzZSA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwlpZiAoIWNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gb2ZfaW9tYXBcbiIpOworCQlnb3RvIGVycl9pb21hcDsKKwl9CisKKwkvKiBuZWVkIHRvIHNldHVwIHBkciwgcmRyLCBnZHIgYW5kIHNkciBiZWZvcmUgdGhpcyAqLworCWNyeXB0bzR4eF9od19pbml0KGNvcmVfZGV2LT5kZXYpOworCisJLyogUmVnaXN0ZXIgc2VjdXJpdHkgYWxnb3JpdGhtcyB3aXRoIExpbnV4IENyeXB0b0FQSSAqLworCXJjID0gY3J5cHRvNHh4X3JlZ2lzdGVyX2FsZyhjb3JlX2Rldi0+ZGV2LCBjcnlwdG80eHhfYWxnLAorCQkJICAgICAgIEFSUkFZX1NJWkUoY3J5cHRvNHh4X2FsZykpOworCWlmIChyYykKKwkJZ290byBlcnJfc3RhcnRfZGV2OworCisJcmV0dXJuIDA7CisKK2Vycl9zdGFydF9kZXY6CisJaW91bm1hcChjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlKTsKK2Vycl9pb21hcDoKKwlmcmVlX2lycShjb3JlX2Rldi0+aXJxLCBkZXYpOworCWlycV9kaXNwb3NlX21hcHBpbmcoY29yZV9kZXYtPmlycSk7CisJdGFza2xldF9raWxsKCZjb3JlX2Rldi0+dGFza2xldCk7CitlcnJfcmVxdWVzdF9pcnE6CisJY3J5cHRvNHh4X2Rlc3Ryb3lfc2RyKGNvcmVfZGV2LT5kZXYpOworZXJyX2J1aWxkX3NkcjoKKwljcnlwdG80eHhfZGVzdHJveV9nZHIoY29yZV9kZXYtPmRldik7CitlcnJfYnVpbGRfZ2RyOgorCWNyeXB0bzR4eF9kZXN0cm95X3Bkcihjb3JlX2Rldi0+ZGV2KTsKK2Vycl9idWlsZF9wZHI6CisJa2ZyZWUoY29yZV9kZXYtPmRldik7CitlcnJfYWxsb2NfZGV2OgorCWtmcmVlKGNvcmVfZGV2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2V4aXQgY3J5cHRvNHh4X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZnJlZV9pcnEoY29yZV9kZXYtPmlycSwgZGV2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGNvcmVfZGV2LT5pcnEpOworCisJdGFza2xldF9raWxsKCZjb3JlX2Rldi0+dGFza2xldCk7CisJLyogVW4tcmVnaXN0ZXIgd2l0aCBMaW51eCBDcnlwdG9BUEkgKi8KKwljcnlwdG80eHhfdW5yZWdpc3Rlcl9hbGcoY29yZV9kZXYtPmRldik7CisJLyogRnJlZSBhbGwgYWxsb2NhdGVkIG1lbW9yeSAqLworCWNyeXB0bzR4eF9zdG9wX2FsbChjb3JlX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY3J5cHRvNHh4X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSAgICAgID0gImFtY2MscHBjNHh4LWNyeXB0byIsfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBjcnlwdG80eHhfZHJpdmVyID0geworCS5uYW1lCQk9ICJjcnlwdG80eHgiLAorCS5tYXRjaF90YWJsZQk9IGNyeXB0bzR4eF9tYXRjaCwKKwkucHJvYmUJCT0gY3J5cHRvNHh4X3Byb2JlLAorCS5yZW1vdmUJCT0gY3J5cHRvNHh4X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0bzR4eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY3J5cHRvNHh4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG80eHhfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjcnlwdG80eHhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvNHh4X2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvNHh4X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFNQ0MgUFBDNHh4IGNyeXB0byBhY2NlbGVyYXRvciIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmMTAzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaApAQCAtMCwwICsxLDE3NyBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIEFNQ0MgQ3J5cHRvIG9mZmxvYWQgTGludXggZGV2aWNlIGRyaXZlciBmb3IKKyAqIHVzZSB3aXRoIExpbnV4IENyeXB0b0FQSS4KKworICovCisKKyNpZm5kZWYgX19DUllQVE80WFhfQ09SRV9IX18KKyNkZWZpbmUgX19DUllQVE80WFhfQ09SRV9IX18KKworI2RlZmluZSBQUEM0NjBTWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDEKKyNkZWZpbmUgUFBDNDA1RVhfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFBQQzQ2MEVYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBQUEM0NjBFWF9DRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBQUEM0NjBTWF9DRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBQUEM0MDVFWF9DRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisjZGVmaW5lIENSWVBUTzRYWF9DUllQVE9fUFJJT1JJVFkJCTMwMAorI2RlZmluZSBQUEM0WFhfTEFTVF9QRAkJCQk2MworI2RlZmluZSBQUEM0WFhfTlVNX1BECQkJCTY0CisjZGVmaW5lIFBQQzRYWF9MQVNUX0dECQkJCTEwMjMKKyNkZWZpbmUgUFBDNFhYX05VTV9HRAkJCQkxMDI0CisjZGVmaW5lIFBQQzRYWF9MQVNUX1NECQkJCTYzCisjZGVmaW5lIFBQQzRYWF9OVU1fU0QJCQkJNjQKKyNkZWZpbmUgUFBDNFhYX1NEX0JVRkZFUl9TSVpFCQkJMjA0OAorCisjZGVmaW5lIFBEX0VOVFJZX0lOVVNFCQkJCTEKKyNkZWZpbmUgUERfRU5UUllfRlJFRQkJCQkwCisjZGVmaW5lIEVSSU5HX1dBU19GVUxMCQkJCTB4ZmZmZmZmZmYKKworc3RydWN0IGNyeXB0bzR4eF9kZXZpY2U7CisKK3N0cnVjdCBwZF91aW5mbyB7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKKwl1MzIgICBzdGF0ZTsKKwl1MzIgdXNpbmdfc2Q7CisJdTMyIGZpcnN0X2dkOwkJLyogZmlyc3QgZ2F0aGVyIGRpc2NyaXB0b3IKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdTMyIG51bV9nZDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGdhdGhlciBkaXNjcmlwdG9yCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXUzMiBmaXJzdF9zZDsJCS8qIGZpcnN0IHNjYXR0ZXIgZGlzY3JpcHRvcgorCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl1MzIgbnVtX3NkOwkJLyogbnVtYmVyIG9mIHNjYXR0ZXIgZGlzY3JpcHRvcnMKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdm9pZCAqc2FfdmE7CQkvKiBzaGFkb3cgc2EsIHdoZW4gdXNpbmcgY3AgZnJvbSBjdHgtPnNhICovCisJdTMyIHNhX3BhOworCXZvaWQgKnNyX3ZhOwkJLyogc3RhdGUgcmVjb3JkIGZvciBzaGFkb3cgc2EgKi8KKwl1MzIgc3JfcGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpkZXN0X3ZhOworCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXN5bmNfcmVxOyAJLyogYmFzZSBjcnlwdG8gcmVxdWVzdAorCQkJCQkJCWZvciB0aGlzIHBhY2tldCAqLworfTsKKworc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgeworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2OworCWNoYXIgKm5hbWU7CisJdTY0ICBjZV9waHlfYWRkcmVzczsKKwl2b2lkIF9faW9tZW0gKmNlX2Jhc2U7CisKKwl2b2lkICpwZHI7CQkJLyogYmFzZSBhZGRyZXNzIG9mIHBhY2tldAorCQkJCQlkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IHBkcl9wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MgdXNlZCB0bworCQkJCQlwcm9ncmFtIGNlIHBkcl9iYXNlX3JlZ2lzdGVyICovCisJdm9pZCAqZ2RyOyAgICAgICAgICAgICAgICAgICAgICAvKiBnYXRoZXIgZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBnZHJfcGE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgdG8KKwkJCQkJcHJvZ3JhbSBjZSBnZHJfYmFzZV9yZWdpc3RlciAqLworCXZvaWQgKnNkcjsJCQkvKiBzY2F0dGVyIGRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3Qgc2RyX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyB1c2VkIHRvCisJCQkJCXByb2dyYW0gY2Ugc2RyX2Jhc2VfcmVnaXN0ZXIgKi8KKwl2b2lkICpzY2F0dGVyX2J1ZmZlcl92YTsKKwlkbWFfYWRkcl90IHNjYXR0ZXJfYnVmZmVyX3BhOworCXUzMiBzY2F0dGVyX2J1ZmZlcl9zaXplOworCisJdm9pZCAqc2hhZG93X3NhX3Bvb2w7CQkvKiBwb29sIG9mIG1lbW9yeSBmb3Igc2EgaW4gcGRfdWluZm8gKi8KKwlkbWFfYWRkcl90IHNoYWRvd19zYV9wb29sX3BhOworCXZvaWQgKnNoYWRvd19zcl9wb29sOwkJLyogcG9vbCBvZiBtZW1vcnkgZm9yIHNyIGluIHBkX3VpbmZvICovCisJZG1hX2FkZHJfdCBzaGFkb3dfc3JfcG9vbF9wYTsKKwl1MzIgcGRyX3RhaWw7CisJdTMyIHBkcl9oZWFkOworCXUzMiBnZHJfdGFpbDsKKwl1MzIgZ2RyX2hlYWQ7CisJdTMyIHNkcl90YWlsOworCXUzMiBzZHJfaGVhZDsKKwl2b2lkICpwZHJfdWluZm87CisJc3RydWN0IGxpc3RfaGVhZCBhbGdfbGlzdDsJLyogTGlzdCBvZiBhbGdvcml0aG0gc3VwcG9ydGVkCisJCQkJCWJ5IHRoaXMgZGV2aWNlICovCit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IG9mX2RldmljZSAqb2ZkZXY7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKKwl1MzIgaW50X3N0YXR1czsKKwl1MzIgaXJxOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0cnVjdCBjcnlwdG80eHhfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworCXZvaWQgKnNhX2luOworCWRtYV9hZGRyX3Qgc2FfaW5fZG1hX2FkZHI7CisJdm9pZCAqc2Ffb3V0OworCWRtYV9hZGRyX3Qgc2Ffb3V0X2RtYV9hZGRyOworCXZvaWQgKnN0YXRlX3JlY29yZDsKKwlkbWFfYWRkcl90IHN0YXRlX3JlY29yZF9kbWFfYWRkcjsKKwl1MzIgc2FfbGVuOworCXUzMiBvZmZzZXRfdG9fc3JfcHRyOyAgICAgICAgICAgLyogb2Zmc2V0IHRvIHN0YXRlIHB0ciwgaW4gZHluYW1pYyBzYSAqLworCXUzMiBkaXJlY3Rpb247CisJdTMyIG5leHRfaGRyOworCXUzMiBzYXZlX2l2OworCXUzMiBwZF9jdGxfbGVuOworCXUzMiBwZF9jdGw7CisJdTMyIGJ5cGFzczsKKwl1MzIgaXNfaGFzaDsKKwl1MzIgaGFzaF9maW5hbDsKK307CisKK3N0cnVjdCBjcnlwdG80eHhfcmVxX2N0eCB7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsJLyogRGV2aWNlIGluIHdoaWNoCisJCQkJCW9wZXJhdGlvbiB0byBzZW5kIHRvICovCisJdm9pZCAqc2E7CisJdTMyIHNhX2RtYV9hZGRyOworCXUxNiBzYV9sZW47Cit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2FsZyB7CisJc3RydWN0IGxpc3RfaGVhZCAgZW50cnk7CisJc3RydWN0IGNyeXB0b19hbGcgYWxnOworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7Cit9OworCisjZGVmaW5lIGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyh4KSBcCisJCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgY3J5cHRvNHh4X2FsZywgYWxnKQorCitleHRlcm4gaW50IGNyeXB0bzR4eF9hbGxvY19zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LCB1MzIgc2l6ZSk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgY3J5cHRvNHh4X2FsbG9jX3NhX3JjdHgoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwKKwkJCQkgICBzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqcmN0eCk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9zYV9yY3R4KHN0cnVjdCBjcnlwdG80eHhfY3R4ICpyY3R4KTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9mcmVlX2N0eChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2tleV9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9tZW1jcHlfbGUodW5zaWduZWQgaW50ICpkc3QsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKK2V4dGVybiB1MzIgY3J5cHRvNHh4X2J1aWxkX3BkKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLAorCQkJICAgICAgc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJCSAgICAgIHZvaWQgKml2LCB1MzIgaXZfbGVuKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X3NldGtleV9hZXNfY2JjKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLAorCQkJCSAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X3NoYTFfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX3VwZGF0ZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNGVkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmgKQEAgLTAsMCArMSwyODQgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsciBkZWZpbmVzIHRoZSByZWdpc3RlciBzZXQgZm9yIFNlY3VyaXR5IFN1YnN5c3RlbQorICovCisKKyNpZm5kZWYgX19DUllQVE80WFhfUkVHX0RFRl9IX18KKyNkZWZpbmUgX19DUllQVE80WFhfUkVHX0RFRl9IX18KKworLyogQ1JZUFRPNFhYIFJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBDUllQVE80WFhfREVTQ1JJUFRPUgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0NUUkxfU1RBVAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NPVVJDRQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFU1QJCQkJMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE80WFhfU0EJCQkJMHgwMDAwMDAwQworI2RlZmluZSBDUllQVE80WFhfU0FfTEVOR1RICQkJMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE80WFhfTEVOR1RICQkJMHgwMDAwMDAxNAorCisjZGVmaW5lIENSWVBUTzRYWF9QRV9ETUFfQ0ZHCQkJMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE80WFhfUEVfRE1BX1NUQVQJCQkweDAwMDAwMDQ0CisjZGVmaW5lIENSWVBUTzRYWF9QRFJfQkFTRQkJCTB4MDAwMDAwNDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1JEUl9CQVNFCQkJMHgwMDAwMDA0YworI2RlZmluZSBDUllQVE80WFhfUklOR19TSVpFCQkJMHgwMDAwMDA1MAorI2RlZmluZSBDUllQVE80WFhfUklOR19DVFJMCQkJMHgwMDAwMDA1NAorI2RlZmluZSBDUllQVE80WFhfSU5UX1JJTkdfU1RBVAkJCTB4MDAwMDAwNTgKKyNkZWZpbmUgQ1JZUFRPNFhYX0VYVF9SSU5HX1NUQVQJCQkweDAwMDAwMDVjCisjZGVmaW5lIENSWVBUTzRYWF9JT19USFJFU0hPTEQJCQkweDAwMDAwMDYwCisjZGVmaW5lIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRQkJMHgwMDAwMDA2NAorI2RlZmluZSBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0UJCTB4MDAwMDAwNjgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BBUlRfUklOR19TSVpFCQkweDAwMDAwMDZjCisjZGVmaW5lIENSWVBUTzRYWF9QQVJUX1JJTkdfQ0ZHCQkgICAgICAgIDB4MDAwMDAwNzAKKworI2RlZmluZSBDUllQVE80WFhfUERSX0JBU0VfVUFERFIJCTB4MDAwMDAwODAKKyNkZWZpbmUgQ1JZUFRPNFhYX1JEUl9CQVNFX1VBRERSCQkweDAwMDAwMDg0CisjZGVmaW5lIENSWVBUTzRYWF9QS1RfU1JDX1VBRERSCQkJMHgwMDAwMDA4OAorI2RlZmluZSBDUllQVE80WFhfUEtUX0RFU1RfVUFERFIJCTB4MDAwMDAwOGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX1VBRERSCQkJMHgwMDAwMDA5MAorI2RlZmluZSBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0VfVUFERFIJCTB4MDAwMDAwQTAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFX1VBRERSCQkweDAwMDAwMEE0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NFUV9SRAkJCTB4MDAwMDA0MDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1NFUV9NQVNLX1JECQkJMHgwMDAwMDQwQworCisjZGVmaW5lIENSWVBUTzRYWF9TQV9DTURfMAkJCTB4MDAwMTA2MDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX0NNRF8xCQkJMHgwMDAxMDYwNAorCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9QVFIJCQkweDAwMDEwNmRjCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9JVgkJCTB4MDAwMTA3MDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0hBU0hfQllURV9DTlRfMAkJMHgwMDAxMDcxMAorI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSEFTSF9CWVRFX0NOVF8xCQkweDAwMDEwNzE0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0lESUdFU1RfMAkJMHgwMDAxMDcxOAorI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSURJR0VTVF8xCQkweDAwMDEwNzFjCisKKyNkZWZpbmUgQ1JZUFRPNFhYX0RBVEFfSU4JCQkweDAwMDE4MDAwCisjZGVmaW5lIENSWVBUTzRYWF9EQVRBX09VVAkJCTB4MDAwMWMwMDAKKworI2RlZmluZSBDUllQVE80WFhfSU5UX1VOTUFTS19TVEFUCQkweDAwMDUwMGEwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFTS19TVEFUCQkJMHgwMDA1MDBhNAorI2RlZmluZSBDUllQVE80WFhfSU5UX0NMUgkJCTB4MDAwNTAwYTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9FTgkJCTB4MDAwNTAwYTgKKworI2RlZmluZSBDUllQVE80WFhfSU5UX1BLQQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9QRFJfRE9ORQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQV9XUl9FUlIJCQkweDAwMDIwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFfUkRfRVJSCQkJMHgwMDAxMDAwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX1BFX0VSUgkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9VU0VSX0RNQV9FUlIJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9TTEFWRV9FUlIJCQkweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFTVEVSX0VSUgkJMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE80WFhfSU5UX0VSUk9SCQkJMHgwMDAzMDI1OAorCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfQ0ZHCQkJMHgwMDA1MDBhYworI2RlZmluZSBDUllQVE80WFhfSU5UX0RFU0NSX1JECQkJMHgwMDA1MDBiMAorI2RlZmluZSBDUllQVE80WFhfSU5UX0RFU0NSX0NOVAkJCTB4MDAwNTAwYjQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9USU1FT1VUX0NOVAkJMHgwMDA1MDBiOAorCisjZGVmaW5lIENSWVBUTzRYWF9ERVZJQ0VfQ1RSTAkJCTB4MDAwNjAwODAKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFVklDRV9JRAkJCTB4MDAwNjAwODQKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFVklDRV9JTkZPCQkJMHgwMDA2MDA4OAorI2RlZmluZSBDUllQVE80WFhfRE1BX1VTRVJfU1JDCQkJMHgwMDA2MDA5NAorI2RlZmluZSBDUllQVE80WFhfRE1BX1VTRVJfREVTVAkJCTB4MDAwNjAwOTgKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9VU0VSX0NNRAkJCTB4MDAwNjAwOUMKKworI2RlZmluZSBDUllQVE80WFhfRE1BX0NGRwkgICAgICAgIAkweDAwMDYwMGQ0CisjZGVmaW5lIENSWVBUTzRYWF9CWVRFX09SREVSX0NGRyAJCTB4MDAwNjAwZDgKKyNkZWZpbmUgQ1JZUFRPNFhYX0VORElBTl9DRkcJCQkweDAwMDYwMGQ4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfU1RBVAkJCTB4MDAwNzAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfQ1RSTAkJCTB4MDAwNzAwMDQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfU0VFRF9MCQkJMHgwMDA3MDAwOAorI2RlZmluZSBDUllQVE80WFhfUFJOR19TRUVEX0gJCQkweDAwMDcwMDBjCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzAJCQkweDAwMDcwMDIwCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18xCQkJMHgwMDA3MDAyNAorI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMgkJCTB4MDAwNzAwMjgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzMJCQkweDAwMDcwMDJDCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfTEZTUl9MCQkJMHgwMDA3MDAzMAorI2RlZmluZSBDUllQVE80WFhfUFJOR19MRlNSX0gJCQkweDAwMDcwMDM0CisKKy8qKgorICogSW5pdGlsaXplIENSWVBUTyBFTkdJTkUgcmVnaXN0ZXJzLCBhbmQgbWVtb3J5IGJhc2VzLgorICovCisjZGVmaW5lIFBQQzRYWF9QRFJfUE9MTAkJCQkweDNmZgorI2RlZmluZSBQUEM0WFhfT1VUUFVUX1RIUkVTSE9MRAkJCTIKKyNkZWZpbmUgUFBDNFhYX0lOUFVUX1RIUkVTSE9MRAkJCTIKKyNkZWZpbmUgUFBDNFhYX1BEX1NJWkUJCQkJNgorI2RlZmluZSBQUEM0WFhfQ1RYX0RPTkVfSU5UCQkJMHgyMDAwCisjZGVmaW5lIFBQQzRYWF9QRF9ET05FX0lOVAkJCTB4ODAwMAorI2RlZmluZSBQUEM0WFhfQllURV9PUkRFUgkJCTB4MjIyMjIKKyNkZWZpbmUgUFBDNFhYX0lOVEVSUlVQVF9DTFIJCQkweDNmZmZmCisjZGVmaW5lIFBQQzRYWF9QUk5HX0NUUkxfQVVUT19FTgkJMHgzCisjZGVmaW5lIFBQQzRYWF9EQ18zREVTX0VOCQkJMQorI2RlZmluZSBQUEM0WFhfSU5UX0RFU0NSX0NOVAkJCTQKKyNkZWZpbmUgUFBDNFhYX0lOVF9USU1FT1VUX0NOVAkJCTAKKyNkZWZpbmUgUFBDNFhYX0lOVF9DRkcJCQkJMQorLyoqCisgKiBhbGwgZm9sbG93IGRlZmluZSBhcmUgYWQgaG9jCisgKi8KKyNkZWZpbmUgUFBDNFhYX1JJTkdfUkVUUlkJCQkxMDAKKyNkZWZpbmUgUFBDNFhYX1JJTkdfUE9MTAkJCTEwMAorI2RlZmluZSBQUEM0WFhfU0RSX1NJWkUJCQkJUFBDNFhYX05VTV9TRAorI2RlZmluZSBQUEM0WFhfR0RSX1NJWkUJCQkJUFBDNFhYX05VTV9HRAorCisvKioKKyAgKiBHZW5lcmljIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgd2l0aCBhbGwgcG9zc2libGUgZmllbGRzLiBUaGVzZSB3aWxsCisgKiBuZXZlciBsaWtlbHkgdXNlZCBleGNlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlLiBUaGVzZSBzdHJ1Y3R1cmUgZm9ybWF0CisgKiBjYW4gYmUgbm90IGNoYW5nZWQgYXMgdGhlIGhhcmR3YXJlIGV4cGVjdHMgdGhlbSB0byBiZSBsYXlvdXQgYXMgZGVmaW5lZC4KKyAqIEZpZWxkIGNhbiBiZSByZW1vdmVkIG9yIHJlZHVjZWQgYnV0IG9yZGVyaW5nIGNhbiBub3QgYmUgY2hhbmdlZC4KKyAqLworI2RlZmluZSBDUllQVE80WFhfRE1BX0NGR19PRkZTRVQJCTB4NDAKK3VuaW9uIGNlX3BlX2RtYV9jZmcgeworCXN0cnVjdCB7CisJCXUzMiByc3Y6NzsKKwkJdTMyIGRpcl9ob3N0OjE7CisJCXUzMiByc3YxOjI7CisJCXUzMiBib190ZF9lbjoxOworCQl1MzIgZGlzX3Bkcl91cGQ6MTsKKwkJdTMyIGJvX3NncGRfZW46MTsKKwkJdTMyIGJvX2RhdGFfZW46MTsKKwkJdTMyIGJvX3NhX2VuOjE7CisJCXUzMiBib19wZF9lbjoxOworCQl1MzIgcnN2Mjo0OworCQl1MzIgZHluYW1pY19zYV9lbjoxOworCQl1MzIgcGRyX21vZGU6MjsKKwkJdTMyIHBlX21vZGU6MTsKKwkJdTMyIHJzdjM6NTsKKwkJdTMyIHJlc2V0X3NnOjE7CisJCXUzMiByZXNldF9wZHI6MTsKKwkJdTMyIHJlc2V0X3BlOjE7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BEUl9CQVNFX09GRlNFVAkJMHg0OAorI2RlZmluZSBDUllQVE80WFhfUkRSX0JBU0VfT0ZGU0VUCQkweDRjCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX1NJWkVfT0ZGU0VUCQkweDUwCit1bmlvbiBjZV9yaW5nX3NpemUgeworCXN0cnVjdCB7CisJCXUzMiByaW5nX29mZnNldDoxNjsKKwkJdTMyIHJzdjo2OworCQl1MzIgcmluZ19zaXplOjEwOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX0NPTlRST0xfT0ZGU0VUCQkweDU0Cit1bmlvbiBjZV9yaW5nX2NvbnRvbCB7CisJc3RydWN0IHsKKwkJdTMyIGNvbnRpbnVvdXM6MTsKKwkJdTMyIHJzdjo1OworCQl1MzIgcmluZ19yZXRyeV9kaXZpc29yOjEwOworCQl1MzIgcnN2MTo0OworCQl1MzIgcmluZ19wb2xsX2Rpdmlzb3I6MTA7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lPX1RIUkVTSE9MRF9PRkZTRVQJCTB4NjAKK3VuaW9uIGNlX2lvX3RocmVzaG9sZCB7CisJc3RydWN0IHsKKwkJdTMyIHJzdjo2OworCQl1MzIgb3V0cHV0X3RocmVzaG9sZDoxMDsKKwkJdTMyIHJzdjE6NjsKKwkJdTMyIGlucHV0X3RocmVzaG9sZDoxMDsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfR0FUSEVSX1JJTkdfQkFTRV9PRkZTRVQJMHg2NAorI2RlZmluZSBDUllQVE80WFhfU0NBVFRFUl9SSU5HX0JBU0VfT0ZGU0VUCTB4NjgKKwordW5pb24gY2VfcGFydF9yaW5nX3NpemUgIHsKKwlzdHJ1Y3QgeworCQl1MzIgc2RyX3NpemU6MTY7CisJCXUzMiBnZHJfc2l6ZToxNjsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNQVhfQlVSU1RfU0laRV8zMgkJCTAKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfNjQJCQkxCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzEyOAkJCTIKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfMjU2CQkJMworCisvKiBnYXRoZXIgZGVzY3JpcHRvciBjb250cm9sIGxlbmd0aCAqLworc3RydWN0IGdkX2N0bF9sZW4geworCXUzMiBsZW46MTY7CisJdTMyIHJzdjoxNDsKKwl1MzIgZG9uZToxOworCXUzMiByZWFkeToxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNlX2dkIHsKKwl1MzIgcHRyOworCXN0cnVjdCBnZF9jdGxfbGVuIGN0bF9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2RfY3RsIHsKKwl1MzIgY3RsOjMwOworCXUzMiBkb25lOjE7CisJdTMyIHJkeToxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNlX3NkIHsKKyAgICB1MzIgcHRyOworCXN0cnVjdCBzZF9jdGwgY3RsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBQRF9QQURfQ1RMXzMyCTB4MTAKKyNkZWZpbmUgUERfUEFEX0NUTF82NAkweDIwCisjZGVmaW5lIFBEX1BBRF9DVExfMTI4CTB4NDAKKyNkZWZpbmUgUERfUEFEX0NUTF8yNTYJMHg4MAordW5pb24gY2VfcGRfY3RsIHsKKwlzdHJ1Y3QgeworCQl1MzIgcGRfcGFkX2N0bDo4OworCQl1MzIgc3RhdHVzOjg7CisJCXUzMiBuZXh0X2hkcjo4OworCQl1MzIgcnN2OjI7CisJCXUzMiBjYWNoZWRfc2E6MTsKKwkJdTMyIGhhc2hfZmluYWw6MTsKKwkJdTMyIGluaXRfYXJjNDoxOworCQl1MzIgcnN2MToxOworCQl1MzIgcGVfZG9uZToxOworCQl1MzIgaG9zdF9yZWFkeToxOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjZV9wZF9jdGxfbGVuIHsKKwlzdHJ1Y3QgeworCQl1MzIgYnlwYXNzOjg7CisJCXUzMiBwZV9kb25lOjE7CisJCXUzMiBob3N0X3JlYWR5OjE7CisJCXUzMiByc3Y6MjsKKwkJdTMyIHBrdF9sZW46MjA7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZV9wZCB7CisJdW5pb24gY2VfcGRfY3RsICAgcGRfY3RsOworCXUzMiBzcmM7CisJdTMyIGRlc3Q7CisJdTMyIHNhOyAgICAgICAgICAgICAgICAgLyogZ2V0IGZyb20gY3R4LT5zYV9kbWFfYWRkciAqLworCXUzMiBzYV9sZW47ICAgICAgICAgICAgIC8qIG9ubHkgaWYgZHluYW1pYyBzYSBpcyB1c2VkICovCisJdW5pb24gY2VfcGRfY3RsX2xlbiBwZF9jdGxfbGVuOworCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjZmZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQGZpbGUgY3J5cHRvNHh4X3NhLmMKKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgc2VjdXJpdHkgY29udGV4dAorICogYXNzb2ljYXRlIGZvcm1hdC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Rlcy5oPgorI2luY2x1ZGUgImNyeXB0bzR4eF9yZWdfZGVmLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X3NhLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X2NvcmUuaCIKKwordTMyIGdldF9keW5hbWljX3NhX29mZnNldF9pdl9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXUzMiBvZmZzZXQ7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikoY3R4LT5zYV9pbikpLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikoY3R4LT5zYV9vdXQpKS0+c2FfY29udGVudHM7CisJb2Zmc2V0ID0gY3RzLmJmLmtleV9zaXplCisJCSsgY3RzLmJmLmlubmVyX3NpemUKKwkJKyBjdHMuYmYub3V0ZXJfc2l6ZQorCQkrIGN0cy5iZi5zcGkKKwkJKyBjdHMuYmYuc2VxX251bTAKKwkJKyBjdHMuYmYuc2VxX251bTEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMAorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2sxCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazIKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMzsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfY3RsKSArIG9mZnNldCAqIDQ7Cit9CisKK3UzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdTMyIG9mZnNldDsKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0KS0+c2FfY29udGVudHM7CisJb2Zmc2V0ID0gY3RzLmJmLmtleV9zaXplCisJCSsgY3RzLmJmLmlubmVyX3NpemUKKwkJKyBjdHMuYmYub3V0ZXJfc2l6ZQorCQkrIGN0cy5iZi5zcGkKKwkJKyBjdHMuYmYuc2VxX251bTAKKwkJKyBjdHMuYmYuc2VxX251bTEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMAorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2sxCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazIKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMworCQkrIGN0cy5iZi5pdjAKKwkJKyBjdHMuYmYuaXYxCisJCSsgY3RzLmJmLml2MgorCQkrIGN0cy5iZi5pdjM7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2N0bCkgKyBvZmZzZXQgKiA0OworfQorCit1MzIgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW4pLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQpLT5zYV9jb250ZW50czsKKwlyZXR1cm4gKGN0cy5iZi5pdjAgKyBjdHMuYmYuaXYxICsgY3RzLmJmLml2MiArIGN0cy5iZi5pdjMpICogNDsKK30KKwordTMyIGdldF9keW5hbWljX3NhX29mZnNldF9rZXlfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0KS0+c2FfY29udGVudHM7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2N0bCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjgzZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaApAQCAtMCwwICsxLDI0MyBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIHNlY3VyaXR5IGNvbnRleHQKKyAqIGFzc29pY2F0ZSBmb3JtYXQuCisgKi8KKworI2lmbmRlZiBfX0NSWVBUTzRYWF9TQV9IX18KKyNkZWZpbmUgX19DUllQVE80WFhfU0FfSF9fCisKKyNkZWZpbmUgQUVTX0lWX1NJWkUJCQkJMTYKKworLyoqCisgKiBDb250ZW50cyBvZiBEeW5hbWljIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgd2l0aCBhbGwgcG9zc2libGUgZmllbGRzCisgKi8KK3VuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgeworCXN0cnVjdCB7CisJCXUzMiBhcmM0X3N0YXRlX3B0cjoxOworCQl1MzIgYXJjNF9pal9wdHI6MTsKKwkJdTMyIHN0YXRlX3B0cjoxOworCQl1MzIgaXYzOjE7CisJCXUzMiBpdjI6MTsKKwkJdTMyIGl2MToxOworCQl1MzIgaXYwOjE7CisJCXUzMiBzZXFfbnVtX21hc2szOjE7CisJCXUzMiBzZXFfbnVtX21hc2syOjE7CisJCXUzMiBzZXFfbnVtX21hc2sxOjE7CisJCXUzMiBzZXFfbnVtX21hc2swOjE7CisJCXUzMiBzZXFfbnVtMToxOworCQl1MzIgc2VxX251bTA6MTsKKwkJdTMyIHNwaToxOworCQl1MzIgb3V0ZXJfc2l6ZTo1OworCQl1MzIgaW5uZXJfc2l6ZTo1OworCQl1MzIga2V5X3NpemU6NDsKKwkJdTMyIGNtZF9zaXplOjQ7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgRElSX09VVEJPVU5ECQkJCTAKKyNkZWZpbmUgRElSX0lOQk9VTkQJCQkJMQorI2RlZmluZSBTQV9PUF9HUk9VUF9CQVNJQwkJCTAKKyNkZWZpbmUgU0FfT1BDT0RFX0VOQ1JZUFQJCQkwCisjZGVmaW5lIFNBX09QQ09ERV9ERUNSWVBUCQkJMAorI2RlZmluZSBTQV9PUENPREVfSEFTSAkJCQkzCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfREVTCQkJMAorI2RlZmluZSBTQV9DSVBIRVJfQUxHXzNERVMJCQkxCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfQVJDNAkJCTIKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19BRVMJCQkzCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfS0FTVU1JCQkJNAorI2RlZmluZSBTQV9DSVBIRVJfQUxHX05VTEwJCQkxNQorCisjZGVmaW5lIFNBX0hBU0hfQUxHX01ENQkJCQkwCisjZGVmaW5lIFNBX0hBU0hfQUxHX1NIQTEJCQkxCisjZGVmaW5lIFNBX0hBU0hfQUxHX05VTEwJCQkxNQorI2RlZmluZSBTQV9IQVNIX0FMR19TSEExX0RJR0VTVF9TSVpFCQkyMAorCisjZGVmaW5lIFNBX0xPQURfSEFTSF9GUk9NX1NBCQkJMAorI2RlZmluZSBTQV9MT0FEX0hBU0hfRlJPTV9TVEFURQkJCTIKKyNkZWZpbmUgU0FfTk9UX0xPQURfSEFTSAkJCTMKKyNkZWZpbmUgU0FfTE9BRF9JVl9GUk9NX1NBCQkJMAorI2RlZmluZSBTQV9MT0FEX0lWX0ZST01fSU5QVVQJCQkxCisjZGVmaW5lIFNBX0xPQURfSVZfRlJPTV9TVEFURQkJCTIKKyNkZWZpbmUgU0FfTE9BRF9JVl9HRU5fSVYJCQkzCisKKyNkZWZpbmUgU0FfUEFEX1RZUEVfQ09OU1RBTlQJCQkyCisjZGVmaW5lIFNBX1BBRF9UWVBFX1pFUk8JCQkzCisjZGVmaW5lIFNBX1BBRF9UWVBFX1RMUwkJCQk1CisjZGVmaW5lIFNBX1BBRF9UWVBFX0RUTFMJCQk1CisjZGVmaW5lIFNBX05PVF9TQVZFX0hBU0gJCQkwCisjZGVmaW5lIFNBX1NBVkVfSEFTSAkJCQkxCisjZGVmaW5lIFNBX05PVF9TQVZFX0lWCQkJCTAKKyNkZWZpbmUgU0FfU0FWRV9JVgkJCQkxCisjZGVmaW5lIFNBX0hFQURFUl9QUk9DCQkJCTEKKyNkZWZpbmUgU0FfTk9fSEVBREVSX1BST0MJCQkwCisKK3VuaW9uIHNhX2NvbW1hbmRfMCB7CisJc3RydWN0IHsKKwkJdTMyIHNjYXR0ZXI6MTsKKwkJdTMyIGdhdGhlcjoxOworCQl1MzIgc2F2ZV9oYXNoX3N0YXRlOjE7CisJCXUzMiBzYXZlX2l2OjE7CisJCXUzMiBsb2FkX2hhc2hfc3RhdGU6MjsKKwkJdTMyIGxvYWRfaXY6MjsKKwkJdTMyIGRpZ2VzdF9sZW46NDsKKwkJdTMyIGhkcl9wcm9jOjE7CisJCXUzMiBleHRlbmRfcGFkOjE7CisJCXUzMiBzdHJlYW1fY2lwaGVyX3BhZDoxOworCQl1MzIgcnN2OjE7CisJCXUzMiBoYXNoX2FsZzo0OworCQl1MzIgY2lwaGVyX2FsZzo0OworCQl1MzIgcGFkX3R5cGU6MjsKKwkJdTMyIG9wX2dyb3VwOjI7CisJCXUzMiBkaXI6MTsKKwkJdTMyIG9wY29kZTozOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUT19NT0RFX0VDQgkJCQkwCisjZGVmaW5lIENSWVBUT19NT0RFX0NCQwkJCQkxCisKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfTk9fRkIJCTAKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfNjRCSVRfT0ZCCQkwCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzhCSVRfQ0ZCCQkxCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzFCSVRfQ0ZCCQkyCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzEyOEJJVF9DRkIJCTMKKworI2RlZmluZSBTQV9BRVNfS0VZX0xFTl8xMjgJCQkyCisjZGVmaW5lIFNBX0FFU19LRVlfTEVOXzE5MgkJCTMKKyNkZWZpbmUgU0FfQUVTX0tFWV9MRU5fMjU2CQkJNAorCisjZGVmaW5lIFNBX1JFVjIJCQkJCTEKKy8qKgorICogVGhlIGZvbGxvdyBkZWZpbmVzIGJpdHMgc2FfY29tbWFuZF8xCisgKiBJbiBCYXNpYyBoYXNoIG1vZGUgIHRoaXMgYml0IGRlZmluZSBzaW1wbGUgaGFzaCBvciBobWFjLgorICogSW4gSVBzZWMgbW9kZSwgdGhpcyBiaXQgZGVmaW5lIG11dGluZyBjb250cm9sLgorICovCisjZGVmaW5lIFNBX0hBU0hfTU9ERV9IQVNICQkJMAorI2RlZmluZSBTQV9IQVNIX01PREVfSE1BQwkJCTEKKyNkZWZpbmUgU0FfTUNfRU5BQkxFCQkJCTAKKyNkZWZpbmUgU0FfTUNfRElTQUJMRQkJCQkxCisjZGVmaW5lIFNBX05PVF9DT1BZX0hEUgkJCQkwCisjZGVmaW5lIFNBX0NPUFlfSERSCQkJCTEKKyNkZWZpbmUgU0FfTk9UX0NPUFlfUEFECQkJCTAKKyNkZWZpbmUgU0FfQ09QWV9QQUQJCQkJMQorI2RlZmluZSBTQV9OT1RfQ09QWV9QQVlMT0FECQkJMAorI2RlZmluZSBTQV9DT1BZX1BBWUxPQUQJCQkJMQorI2RlZmluZSBTQV9FWFRFTkRFRF9TTl9PRkYJCQkwCisjZGVmaW5lIFNBX0VYVEVOREVEX1NOX09OCQkJMQorI2RlZmluZSBTQV9TRVFfTUFTS19PRkYJCQkJMAorI2RlZmluZSBTQV9TRVFfTUFTS19PTgkJCQkxCisKK3VuaW9uIHNhX2NvbW1hbmRfMSB7CisJc3RydWN0IHsKKwkJdTMyIGNyeXB0b19tb2RlMzE6MTsKKwkJdTMyIHNhdmVfYXJjNF9zdGF0ZToxOworCQl1MzIgYXJjNF9zdGF0ZWZ1bDoxOworCQl1MzIga2V5X2xlbjo1OworCQl1MzIgaGFzaF9jcnlwdG9fb2Zmc2V0Ojg7CisJCXUzMiBzYV9yZXY6MjsKKwkJdTMyIGJ5dGVfb2Zmc2V0OjE7CisJCXUzMiBobWFjX211dGluZzoxOworCQl1MzIgZmVlZGJhY2tfbW9kZToyOworCQl1MzIgY3J5cHRvX21vZGU5Xzg6MjsKKwkJdTMyIGV4dGVuZGVkX3NlcV9udW06MTsKKwkJdTMyIHNlcV9udW1fbWFzazoxOworCQl1MzIgbXV0YWJsZV9iaXRfcHJvYzoxOworCQl1MzIgaXBfdmVyc2lvbjoxOworCQl1MzIgY29weV9wYWQ6MTsKKwkJdTMyIGNvcHlfcGF5bG9hZDoxOworCQl1MzIgY29weV9oZHI6MTsKKwkJdTMyIHJzdjE6MTsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGR5bmFtaWNfc2FfY3RsIHsKKwl1MzIgc2FfY29udGVudHM7CisJdW5pb24gc2FfY29tbWFuZF8wIHNhX2NvbW1hbmRfMDsKKwl1bmlvbiBzYV9jb21tYW5kXzEgc2FfY29tbWFuZF8xOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBTdGF0ZSBSZWNvcmQgZm9yIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkKKyAqLworc3RydWN0ICBzYV9zdGF0ZV9yZWNvcmQgeworCXUzMiBzYXZlX2l2WzRdOworCXUzMiBzYXZlX2hhc2hfYnl0ZV9jbnRbMl07CisJdTMyIHNhdmVfZGlnZXN0WzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgQUVTMTI4CisgKgorICovCitzdHJ1Y3QgZHluYW1pY19zYV9hZXMxMjggeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bAljdHJsOworCXUzMiBrZXlbNF07CisJdTMyIGl2WzRdOyAvKiBmb3IgQ0JDLCBPRkMsIGFuZCBDRkIgbW9kZSAqLworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQV9BRVMxMjhfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2FlczEyOCkvNCkKKyNkZWZpbmUgU0FfQUVTMTI4X0NPTlRFTlRTCTB4M2UwMDAwNDIKKworLyoKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEFFUzE5MgorICovCitzdHJ1Y3QgZHluYW1pY19zYV9hZXMxOTIgeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCBjdHJsOworCXUzMiBrZXlbNl07CisJdTMyIGl2WzRdOyAvKiBmb3IgQ0JDLCBPRkMsIGFuZCBDRkIgbW9kZSAqLworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQV9BRVMxOTJfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2FlczE5MikvNCkKKyNkZWZpbmUgU0FfQUVTMTkyX0NPTlRFTlRTCTB4M2UwMDAwNjIKKworLyoqCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBBRVMyNTYKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfYWVzMjU2IHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgY3RybDsKKwl1MzIga2V5WzhdOworCXUzMiBpdls0XTsgLyogZm9yIENCQywgT0ZDLCBhbmQgQ0ZCIG1vZGUgKi8KKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgU0FfQUVTMjU2X0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9hZXMyNTYpLzQpCisjZGVmaW5lIFNBX0FFUzI1Nl9DT05URU5UUwkweDNlMDAwMDgyCisjZGVmaW5lIFNBX0FFU19DT05URU5UUwkJMHgzZTAwMDAwMgorCisvKioKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEhBU0gxNjA6IEhNQUMtU0hBMQorICovCitzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwIHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgY3RybDsKKwl1MzIgaW5uZXJfZGlnZXN0WzVdOworCXUzMiBvdXRlcl9kaWdlc3RbNV07CisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2RlZmluZSBTQV9IQVNIMTYwX0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwKS80KQorI2RlZmluZSBTQV9IQVNIMTYwX0NPTlRFTlRTICAgICAweDIwMDBhNTAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kaW8vZGlvLmMgYi9kcml2ZXJzL2Rpby9kaW8uYwppbmRleCAxMGMzYzQ5Li41NWRkODhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rpby9kaW8uYworKysgYi9kcml2ZXJzL2Rpby9kaW8uYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSBESU8gYnVzICovIAogCUlOSVRfTElTVF9IRUFEKCZkaW9fYnVzLmRldmljZXMpOwotCXN0cmNweShkaW9fYnVzLmRldi5idXNfaWQsICJkaW8iKTsKKwlkZXZfc2V0X25hbWUoJmRpb19idXMuZGV2LCAiZGlvIik7CiAJZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJmRpb19idXMuZGV2KTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJfZXJyKCJESU86IEVycm9yIHJlZ2lzdGVyaW5nIGRpb19idXNcbiIpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJCWRldi0+c2NvZGUgPSBzY29kZTsKIAkJZGV2LT5yZXNvdXJjZS5zdGFydCA9IHBhOwogCQlkZXYtPnJlc291cmNlLmVuZCA9IHBhICsgRElPX1NJWkUoc2NvZGUsIHZhKTsKLQkJc3ByaW50ZihkZXYtPmRldi5idXNfaWQsIiUwMngiLCBzY29kZSk7CisJCWRldl9zZXRfbmFtZSgmZGV2LT5kZXYsICIlMDJ4Iiwgc2NvZGUpOwogCiAgICAgICAgICAgICAgICAgLyogcmVhZCB0aGUgSUQgYnl0ZShzKSBhbmQgZW5jb2RlIGlmIG5lY2Vzc2FyeS4gKi8KIAkJcHJpZCA9IERJT19JRCh2YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKaW5kZXggYTk3YzA3ZS4uMjBhZDNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwpAQCAtMTAxMSw3ICsxMDExLDcgQEAKIAlkbWFfd3JpdGVsKGR3LCBDRkcsIERXX0NGR19ETUFfRU4pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERlc2lnbldhcmUgRE1BIENvbnRyb2xsZXIsICVkIGNoYW5uZWxzXG4iLAotCQkJcGRldi0+ZGV2LmJ1c19pZCwgZHctPmRtYS5jaGFuY250KTsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBkdy0+ZG1hLmNoYW5jbnQpOwogCiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZHctPmRtYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYwppbmRleCBhZTUwYTlkLi5kYTc4MWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCX0KIAogCS8qIEdldCBJUFUgY2xvY2sgKi8KLQlpcHVfZGF0YS5pcHVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaXB1X2NsayIpOworCWlwdV9kYXRhLmlwdV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoaXB1X2RhdGEuaXB1X2NsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihpcHVfZGF0YS5pcHVfY2xrKTsKIAkJZ290byBlcnJfY2xrX2dldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwppbmRleCAyNGYzY2E4Li5jYjBmNjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAltY2ktPmVkYWNfY2FwID0gRURBQ19GTEFHX0VDIHwgRURBQ19GTEFHX1NFQ0RFRDsKIAltY2ktPm1vZF9uYW1lID0gImNlbGxfZWRhYyI7CiAJbWNpLT5jdGxfbmFtZSA9ICJNSUMiOwotCW1jaS0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCW1jaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAltY2ktPmVkYWNfY2hlY2sgPSBjZWxsX2VkYWNfY2hlY2s7CiAJY2VsbF9lZGFjX2luaXRfY3Nyb3dzKG1jaSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwppbmRleCA4NTNlZjM3Li40NjM3YTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlwY2ktPmRldiA9ICZvcC0+ZGV2OwogCXBjaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CiAJcGNpLT5jdGxfbmFtZSA9IHBkYXRhLT5uYW1lOwotCXBjaS0+ZGV2X25hbWUgPSBvcC0+ZGV2LmJ1c19pZDsKKwlwY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJm9wLT5kZXYpOwogCiAJaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpCiAJCXBjaS0+ZWRhY19jaGVjayA9IG1wYzg1eHhfcGNpX2NoZWNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCmluZGV4IDA4M2NlOGQuLjUxMzFhYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCXBkYXRhLT5pcnEgPSBOT19JUlE7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNpKTsKIAlwY2ktPmRldiA9ICZwZGV2LT5kZXY7Ci0JcGNpLT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJcGNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXBjaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CiAJcGNpLT5jdGxfbmFtZSA9IHBkYXRhLT5uYW1lOwogCkBAIC0yOTQsNyArMjk0LDcgQEAKIAlwZGF0YS0+aXJxID0gTk9fSVJROwogCWVkYWNfZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVkYWNfZGV2KTsKLQllZGFjX2Rldi0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCWVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC00NjIsNyArNDYyLDcgQEAKIAlwZGF0YS0+aXJxID0gTk9fSVJROwogCWVkYWNfZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVkYWNfZGV2KTsKLQllZGFjX2Rldi0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCWVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC03MTMsNyArNzEzLDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY2kpOwogCXBkYXRhLT5uYW1lID0gIm12NjR4NjBfbWNfZXJyIjsKIAlwZGF0YS0+aXJxID0gTk9fSVJROwotCW1jaS0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCW1jaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlwZGF0YS0+ZWRhY19pZHggPSBlZGFjX21jX2lkeCsrOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Vpc2EvS2NvbmZpZyBiL2RyaXZlcnMvZWlzYS9LY29uZmlnCmluZGV4IGMwNjQ2NTcuLjI3MDUyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWlzYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWlzYS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogY29uZmlnIEVJU0FfVkxCX1BSSU1JTkcKIAlib29sICJWZXNhIExvY2FsIEJ1cyBwcmltaW5nIgotCWRlcGVuZHMgb24gWDg2X1BDICYmIEVJU0EKKwlkZXBlbmRzIG9uIFg4NiAmJiBFSVNBCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgQWN0aXZhdGUgdGhpcyBvcHRpb24gaWYgeW91ciBzeXN0ZW0gY29udGFpbnMgYSBWZXNhIExvY2FsCkBAIC0yNCwxMSArMjQsMTEgQEAKIAkgIFdoZW4gaW4gZG91YnQsIHNheSBZLgogCiAjIFVzaW5nIEVJU0FfVklSVFVBTF9ST09UIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIEFscGhhIG9yCi0jIGFuIFg4Nl9QQyBtYXkgbGVhZCB0byBjcmFzaGVzLi4uCisjIGFuIFg4NiBtYXkgbGVhZCB0byBjcmFzaGVzLi4uCiAKIGNvbmZpZyBFSVNBX1ZJUlRVQUxfUk9PVAogCWJvb2wgIkVJU0EgdmlydHVhbCByb290IGRldmljZSIKLQlkZXBlbmRzIG9uIEVJU0EgJiYgKEFMUEhBIHx8IFg4Nl9QQykKKwlkZXBlbmRzIG9uIEVJU0EgJiYgKEFMUEhBIHx8IFg4NikKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBBY3RpdmF0ZSB0aGlzIG9wdGlvbiBpZiB5b3VyIHN5c3RlbSBvbmx5IGhhdmUgRUlTQSBidXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKaW5kZXggYzk1MGJmOC4uNjY5NThiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKKysrIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWVkZXYtPmRldi5idXMgPSAmZWlzYV9idXNfdHlwZTsKIAllZGV2LT5kZXYuZG1hX21hc2sgPSAmZWRldi0+ZG1hX21hc2s7CiAJZWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZWRldi0+ZG1hX21hc2s7Ci0Jc3ByaW50ZiAoZWRldi0+ZGV2LmJ1c19pZCwgIiUwMlg6JTAyWCIsIHJvb3QtPmJ1c19uciwgc2xvdCk7CisJZGV2X3NldF9uYW1lKCZlZGV2LT5kZXYsICIlMDJYOiUwMlgiLCByb290LT5idXNfbnIsIHNsb3QpOwogCiAJZm9yIChpID0gMDsgaSA8IEVJU0FfTUFYX1JFU09VUkNFUzsgaSsrKSB7CiAjaWZkZWYgQ09ORklHX0VJU0FfTkFNRVMKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKIAogICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogUHJvYmluZyBidXMgJWQgYXQgJXNcbiIsCi0JCXJvb3QtPmJ1c19uciwgcm9vdC0+ZGV2LT5idXNfaWQpOworCQlyb290LT5idXNfbnIsIGRldl9uYW1lKHJvb3QtPmRldikpOwogCiAJLyogRmlyc3QgdHJ5IHRvIGdldCBob2xkIG9mIHNsb3QgMC4gSWYgdGhlcmUgaXMgbm8gZGV2aWNlCiAJICogaGVyZSwgc2ltcGx5IGZhaWwsIHVubGVzcyByb290LT5mb3JjZV9wcm9iZSBpcyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCmluZGV4IGE1ZGQ3YTYuLjhiOGM4YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCkBAIC02Myw4ICs2Myw3IEBACiAjZGVmaW5lIEJJQl9DTUMJCQkoKDEpIDw8IDMwKQogI2RlZmluZSBCSUJfSU1DCQkJKCgxKSA8PCAzMSkKIAotc3RhdGljIHUzMiAqCi1nZW5lcmF0ZV9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzaXplX3QgKmNvbmZpZ19yb21fbGVuZ3RoKQorc3RhdGljIHUzMiAqZ2VuZXJhdGVfY29uZmlnX3JvbShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc2l6ZV90ICpjb25maWdfcm9tX2xlbmd0aCkKIHsKIAlzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYzsKIAlzdGF0aWMgdTMyIGNvbmZpZ19yb21bMjU2XTsKQEAgLTEyOCw4ICsxMjcsNyBAQAogCXJldHVybiBjb25maWdfcm9tOwogfQogCi1zdGF0aWMgdm9pZAotdXBkYXRlX2NvbmZpZ19yb21zKHZvaWQpCitzdGF0aWMgdm9pZCB1cGRhdGVfY29uZmlnX3JvbXModm9pZCkKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZDsKIAl1MzIgKmNvbmZpZ19yb207CkBAIC0xNDEsOCArMTM5LDcgQEAKIAl9CiB9CiAKLWludAotZndfY29yZV9hZGRfZGVzY3JpcHRvcihzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYykKK2ludCBmd19jb3JlX2FkZF9kZXNjcmlwdG9yKHN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjKQogewogCXNpemVfdCBpOwogCkBAIC0xNzEsOCArMTY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYykKK3ZvaWQgZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYykKIHsKIAltdXRleF9sb2NrKCZjYXJkX211dGV4KTsKIApAQCAtMTg1LDEyICsxODEsMzAgQEAKIAltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOwogfQogCitzdGF0aWMgaW50IHNldF9icm9hZGNhc3RfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbChmd19kZXZpY2UoZGV2KSwgKGxvbmcpZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFsbG9jYXRlX2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbikKK3sKKwlpbnQgY2hhbm5lbCwgYmFuZHdpZHRoID0gMDsKKworCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgZ2VuZXJhdGlvbiwgMVVMTCA8PCAzMSwKKwkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgdHJ1ZSk7CisJaWYgKGNoYW5uZWwgPT0gMzEpIHsKKwkJY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGNhcmQtPmRldmljZSwgKHZvaWQgKikobG9uZylnZW5lcmF0aW9uLAorCQkJCSAgICAgIHNldF9icm9hZGNhc3RfY2hhbm5lbCk7CisJfQorfQorCiBzdGF0aWMgY29uc3QgY2hhciBnYXBfY291bnRfdGFibGVbXSA9IHsKIAk2MywgNSwgNywgOCwgMTAsIDEzLCAxNiwgMTgsIDIxLCAyNCwgMjYsIDI5LCAzMiwgMzUsIDM3LCA0MAogfTsKIAotdm9pZAotZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSkKK3ZvaWQgZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlpbnQgc2NoZWR1bGVkOwogCkBAIC0yMDAsMzcgKzIxNCwzOCBAQAogCQlmd19jYXJkX3B1dChjYXJkKTsKIH0KIAotc3RhdGljIHZvaWQKLWZ3X2NhcmRfYm1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBmd19jYXJkX2JtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19jYXJkLCB3b3JrLndvcmspOwogCXN0cnVjdCBmd19kZXZpY2UgKnJvb3RfZGV2aWNlOwotCXN0cnVjdCBmd19ub2RlICpyb290X25vZGUsICpsb2NhbF9ub2RlOworCXN0cnVjdCBmd19ub2RlICpyb290X25vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZSwgcmNvZGU7CisJaW50IHJvb3RfaWQsIG5ld19yb290X2lkLCBpcm1faWQsIGxvY2FsX2lkOworCWludCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlLCByY29kZTsKIAlib29sIGRvX3Jlc2V0ID0gZmFsc2U7CiAJYm9vbCByb290X2RldmljZV9pc19ydW5uaW5nOwogCWJvb2wgcm9vdF9kZXZpY2VfaXNfY21jOwogCV9fYmUzMiBsb2NrX2RhdGFbMl07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCWxvY2FsX25vZGUgPSBjYXJkLT5sb2NhbF9ub2RlOwotCXJvb3Rfbm9kZSAgPSBjYXJkLT5yb290X25vZGU7CiAKLQlpZiAobG9jYWxfbm9kZSA9PSBOVUxMKSB7CisJaWYgKGNhcmQtPmxvY2FsX25vZGUgPT0gTlVMTCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3B1dF9jYXJkOwogCX0KLQlmd19ub2RlX2dldChsb2NhbF9ub2RlKTsKLQlmd19ub2RlX2dldChyb290X25vZGUpOwogCiAJZ2VuZXJhdGlvbiA9IGNhcmQtPmdlbmVyYXRpb247CisJcm9vdF9ub2RlID0gY2FyZC0+cm9vdF9ub2RlOworCWZ3X25vZGVfZ2V0KHJvb3Rfbm9kZSk7CiAJcm9vdF9kZXZpY2UgPSByb290X25vZGUtPmRhdGE7CiAJcm9vdF9kZXZpY2VfaXNfcnVubmluZyA9IHJvb3RfZGV2aWNlICYmCiAJCQlhdG9taWNfcmVhZCgmcm9vdF9kZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfUlVOTklORzsKIAlyb290X2RldmljZV9pc19jbWMgPSByb290X2RldmljZSAmJiByb290X2RldmljZS0+Y21jOwotCXJvb3RfaWQgPSByb290X25vZGUtPm5vZGVfaWQ7Ci0JZ3JhY2UgPSB0aW1lX2FmdGVyKGppZmZpZXMsIGNhcmQtPnJlc2V0X2ppZmZpZXMgKyBESVZfUk9VTkRfVVAoSFosIDEwKSk7CisJcm9vdF9pZCAgPSByb290X25vZGUtPm5vZGVfaWQ7CisJaXJtX2lkICAgPSBjYXJkLT5pcm1fbm9kZS0+bm9kZV9pZDsKKwlsb2NhbF9pZCA9IGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQ7CisKKwlncmFjZSA9IHRpbWVfYWZ0ZXIoamlmZmllcywgY2FyZC0+cmVzZXRfamlmZmllcyArIERJVl9ST1VORF9VUChIWiwgOCkpOwogCiAJaWYgKGlzX25leHRfZ2VuZXJhdGlvbihnZW5lcmF0aW9uLCBjYXJkLT5ibV9nZW5lcmF0aW9uKSB8fAogCSAgICAoY2FyZC0+Ym1fZ2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uICYmIGdyYWNlKSkgewpAQCAtMjQ2LDE2ICsyNjEsMTUgQEAKIAkJICogbmV4dCBnZW5lcmF0aW9uLgogCQkgKi8KIAotCQlpcm1faWQgPSBjYXJkLT5pcm1fbm9kZS0+bm9kZV9pZDsKIAkJaWYgKCFjYXJkLT5pcm1fbm9kZS0+bGlua19vbikgewotCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9ub2RlLT5ub2RlX2lkOworCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAkJCWZ3X25vdGlmeSgiSVJNIGhhcyBsaW5rIG9mZiwgbWFraW5nIGxvY2FsIG5vZGUgKCUwMngpIHJvb3QuXG4iLAogCQkJCSAgbmV3X3Jvb3RfaWQpOwogCQkJZ290byBwaWNrX21lOwogCQl9CiAKIAkJbG9ja19kYXRhWzBdID0gY3B1X3RvX2JlMzIoMHgzZik7Ci0JCWxvY2tfZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX25vZGUtPm5vZGVfaWQpOworCQlsb2NrX2RhdGFbMV0gPSBjcHVfdG9fYmUzMihsb2NhbF9pZCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yNjksOSArMjgzLDE0IEBACiAJCQlnb3RvIG91dDsKIAogCQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYKLQkJICAgIGxvY2tfZGF0YVswXSAhPSBjcHVfdG9fYmUzMigweDNmKSkKLQkJCS8qIFNvbWVib2R5IGVsc2UgaXMgQk0sIGxldCB0aGVtIGRvIHRoZSB3b3JrLiAqLworCQkgICAgbG9ja19kYXRhWzBdICE9IGNwdV90b19iZTMyKDB4M2YpKSB7CisKKwkJCS8qIFNvbWVib2R5IGVsc2UgaXMgQk0uICBPbmx5IGFjdCBhcyBJUk0uICovCisJCQlpZiAobG9jYWxfaWQgPT0gaXJtX2lkKQorCQkJCWFsbG9jYXRlX2Jyb2FkY2FzdF9jaGFubmVsKGNhcmQsIGdlbmVyYXRpb24pOworCiAJCQlnb3RvIG91dDsKKwkJfQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI4MiwxOSArMzAxLDE4IEBACiAJCQkgKiBkbyBhIGJ1cyByZXNldCBhbmQgcGljayB0aGUgbG9jYWwgbm9kZSBhcwogCQkJICogcm9vdCwgYW5kIHRodXMsIElSTS4KIAkJCSAqLwotCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9ub2RlLT5ub2RlX2lkOworCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAkJCWZ3X25vdGlmeSgiQk0gbG9jayBmYWlsZWQsIG1ha2luZyBsb2NhbCBub2RlICglMDJ4KSByb290LlxuIiwKIAkJCQkgIG5ld19yb290X2lkKTsKIAkJCWdvdG8gcGlja19tZTsKIAkJfQogCX0gZWxzZSBpZiAoY2FyZC0+Ym1fZ2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKSB7CiAJCS8qCi0JCSAqIE9LLCB3ZSB3ZXJlbid0IEJNIGluIHRoZSBsYXN0IGdlbmVyYXRpb24sIGFuZCBpdCdzCi0JCSAqIGxlc3MgdGhhbiAxMDBtcyBzaW5jZSBsYXN0IGJ1cyByZXNldC4gUmVzY2hlZHVsZQotCQkgKiB0aGlzIHRhc2sgMTAwbXMgZnJvbSBub3cuCisJCSAqIFdlIHdlcmVuJ3QgQk0gaW4gdGhlIGxhc3QgZ2VuZXJhdGlvbiwgYW5kIHRoZSBsYXN0CisJCSAqIGJ1cyByZXNldCBpcyBsZXNzIHRoYW4gMTI1bXMgYWdvLiAgUmVzY2hlZHVsZSB0aGlzIGpvYi4KIAkJICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJZndfc2NoZWR1bGVfYm1fd29yayhjYXJkLCBESVZfUk9VTkRfVVAoSFosIDEwKSk7CisJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgRElWX1JPVU5EX1VQKEhaLCA4KSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzEwLDcgKzMyOCw3IEBACiAJCSAqIEVpdGhlciBsaW5rX29uIGlzIGZhbHNlLCBvciB3ZSBmYWlsZWQgdG8gcmVhZCB0aGUKIAkJICogY29uZmlnIHJvbS4gIEluIGVpdGhlciBjYXNlLCBwaWNrIGFub3RoZXIgcm9vdC4KIAkJICovCi0JCW5ld19yb290X2lkID0gbG9jYWxfbm9kZS0+bm9kZV9pZDsKKwkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAl9IGVsc2UgaWYgKCFyb290X2RldmljZV9pc19ydW5uaW5nKSB7CiAJCS8qCiAJCSAqIElmIHdlIGhhdmVuJ3QgcHJvYmVkIHRoaXMgZGV2aWNlIHlldCwgYmFpbCBvdXQgbm93CkBAIC0zMzIsNyArMzUwLDcgQEAKIAkJICogc3VjY2Vzc2Z1bGx5IHJlYWQgdGhlIGNvbmZpZyByb20sIGJ1dCBpdCdzIG5vdAogCQkgKiBjeWNsZSBtYXN0ZXIgY2FwYWJsZS4KIAkJICovCi0JCW5ld19yb290X2lkID0gbG9jYWxfbm9kZS0+bm9kZV9pZDsKKwkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAl9CiAKICBwaWNrX21lOgpAQCAtMzYzLDI1ICszODEsMjggQEAKIAkJCSAgY2FyZC0+aW5kZXgsIG5ld19yb290X2lkLCBnYXBfY291bnQpOwogCQlmd19zZW5kX3BoeV9jb25maWcoY2FyZCwgbmV3X3Jvb3RfaWQsIGdlbmVyYXRpb24sIGdhcF9jb3VudCk7CiAJCWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KGNhcmQsIDEpOworCQkvKiBXaWxsIGFsbG9jYXRlIGJyb2FkY2FzdCBjaGFubmVsIGFmdGVyIHRoZSByZXNldC4gKi8KKwl9IGVsc2UgeworCQlpZiAobG9jYWxfaWQgPT0gaXJtX2lkKQorCQkJYWxsb2NhdGVfYnJvYWRjYXN0X2NoYW5uZWwoY2FyZCwgZ2VuZXJhdGlvbik7CiAJfQorCiAgb3V0OgogCWZ3X25vZGVfcHV0KHJvb3Rfbm9kZSk7Ci0JZndfbm9kZV9wdXQobG9jYWxfbm9kZSk7CiAgb3V0X3B1dF9jYXJkOgogCWZ3X2NhcmRfcHV0KGNhcmQpOwogfQogCi1zdGF0aWMgdm9pZAotZmx1c2hfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZmx1c2hfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gKHN0cnVjdCBmd19jYXJkICopZGF0YTsKIAogCWZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhjYXJkKTsKIH0KIAotdm9pZAotZndfY2FyZF9pbml0aWFsaXplKHN0cnVjdCBmd19jYXJkICpjYXJkLCBjb25zdCBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgKmRyaXZlciwKLQkJICAgc3RydWN0IGRldmljZSAqZGV2aWNlKQordm9pZCBmd19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQljb25zdCBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgKmRyaXZlciwKKwkJCXN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdGF0aWMgYXRvbWljX3QgaW5kZXggPSBBVE9NSUNfSU5JVCgtMSk7CiAKQEAgLTQwNiwxMyArNDI3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NhcmRfaW5pdGlhbGl6ZSk7CiAKLWludAotZndfY2FyZF9hZGQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JICAgIHUzMiBtYXhfcmVjZWl2ZSwgdTMyIGxpbmtfc3BlZWQsIHU2NCBndWlkKQoraW50IGZ3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQl1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCkKIHsKIAl1MzIgKmNvbmZpZ19yb207CiAJc2l6ZV90IGxlbmd0aDsKLQlpbnQgZXJyOworCWludCByZXQ7CiAKIAljYXJkLT5tYXhfcmVjZWl2ZSA9IG1heF9yZWNlaXZlOwogCWNhcmQtPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOwpAQCAtNDIzLDEzICs0NDMsMTQgQEAKIAlsaXN0X2FkZF90YWlsKCZjYXJkLT5saW5rLCAmY2FyZF9saXN0KTsKIAltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOwogCi0JZXJyID0gY2FyZC0+ZHJpdmVyLT5lbmFibGUoY2FyZCwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKLQlpZiAoZXJyIDwgMCkgeworCXJldCA9IGNhcmQtPmRyaXZlci0+ZW5hYmxlKGNhcmQsIGNvbmZpZ19yb20sIGxlbmd0aCk7CisJaWYgKHJldCA8IDApIHsKIAkJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CiAJCWxpc3RfZGVsKCZjYXJkLT5saW5rKTsKIAkJbXV0ZXhfdW5sb2NrKCZjYXJkX211dGV4KTsKIAl9Ci0JcmV0dXJuIGVycjsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NhcmRfYWRkKTsKIApAQCAtNDQyLDIzICs0NjMsMjAgQEAKICAqIGR1bW15IGRyaXZlciBqdXN0IGZhaWxzIGFsbCBJTy4KICAqLwogCi1zdGF0aWMgaW50Ci1kdW1teV9lbmFibGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgZHVtbXlfZW5hYmxlKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCiB7CiAJQlVHKCk7CiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50Ci1kdW1teV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHJlc3MsCi0JCSAgICAgaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cykKK3N0YXRpYyBpbnQgZHVtbXlfdXBkYXRlX3BoeV9yZWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyZXNzLAorCQkJCWludCBjbGVhcl9iaXRzLCBpbnQgc2V0X2JpdHMpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQKLWR1bW15X3NldF9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgICAgIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgZHVtbXlfc2V0X2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQogewogCS8qCiAJICogV2UgdGFrZSB0aGUgY2FyZCBvdXQgb2YgY2FyZF9saXN0IGJlZm9yZSBzZXR0aW5nIHRoZSBkdW1teQpAQCAtNDY4LDI3ICs0ODYsMjMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkCi1kdW1teV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyB2b2lkIGR1bW15X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQogewogCXBhY2tldC0+Y2FsbGJhY2socGFja2V0LCBjYXJkLCAtRU5PREVWKTsKIH0KIAotc3RhdGljIHZvaWQKLWR1bW15X3NlbmRfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyB2b2lkIGR1bW15X3NlbmRfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKIAlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgY2FyZCwgLUVOT0RFVik7CiB9CiAKLXN0YXRpYyBpbnQKLWR1bW15X2NhbmNlbF9wYWNrZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyBpbnQgZHVtbXlfY2FuY2VsX3BhY2tldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQogewogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50Ci1kdW1teV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgICAgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyBpbnQgZHVtbXlfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCSBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CkBAIC01MDMsMTYgKzUxNywxNCBAQAogCS5lbmFibGVfcGh5c19kbWEgPSBkdW1teV9lbmFibGVfcGh5c19kbWEsCiB9OwogCi12b2lkCi1md19jYXJkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit2b2lkIGZ3X2NhcmRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZndfY2FyZCwga3JlZik7CiAKIAljb21wbGV0ZSgmY2FyZC0+ZG9uZSk7CiB9CiAKLXZvaWQKLWZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit2b2lkIGZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCiB7CiAJY2FyZC0+ZHJpdmVyLT51cGRhdGVfcGh5X3JlZyhjYXJkLCA0LAogCQkJCSAgICAgUEhZX0xJTktfQUNUSVZFIHwgUEhZX0NPTlRFTkRFUiwgMCk7CkBAIC01MzYsOCArNTQ4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfY29yZV9yZW1vdmVfY2FyZCk7CiAKLWludAotZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCkKK2ludCBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHNob3J0X3Jlc2V0KQogewogCWludCByZWcgPSBzaG9ydF9yZXNldCA/IDUgOiAxOwogCWludCBiaXQgPSBzaG9ydF9yZXNldCA/IFBIWV9CVVNfU0hPUlRfUkVTRVQgOiBQSFlfQlVTX1JFU0VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwppbmRleCBlZDAzMjM0Li43ZWI2NTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwpAQCAtMTgsNjcgKzE4LDQwIEBACiAgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKwogI2luY2x1ZGUgImZ3LWRldmljZS5oIgotCi1zdHJ1Y3QgY2xpZW50Owotc3RydWN0IGNsaWVudF9yZXNvdXJjZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnIpOwotCXUzMiBoYW5kbGU7Ci19OwotCi0vKgotICogZGVxdWV1ZV9ldmVudCgpIGp1c3Qga2ZyZWUoKSdzIHRoZSBldmVudCwgc28gdGhlIGV2ZW50IGhhcyB0byBiZQotICogdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuCi0gKi8KLQotc3RydWN0IGV2ZW50IHsKLQlzdHJ1Y3QgeyB2b2lkICpkYXRhOyBzaXplX3Qgc2l6ZTsgfSB2WzJdOwotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKLX07Ci0KLXN0cnVjdCBidXNfcmVzZXQgewotCXN0cnVjdCBldmVudCBldmVudDsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgcmVzZXQ7Ci19OwotCi1zdHJ1Y3QgcmVzcG9uc2UgewotCXN0cnVjdCBldmVudCBldmVudDsKLQlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0Jc3RydWN0IGNsaWVudCAqY2xpZW50OwotCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2U7Ci19OwotCi1zdHJ1Y3QgaXNvX2ludGVycnVwdCB7Ci0Jc3RydWN0IGV2ZW50IGV2ZW50OwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgaW50ZXJydXB0OwotfTsKKyNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCiAKIHN0cnVjdCBjbGllbnQgewogCXUzMiB2ZXJzaW9uOwogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZTsKKwogCXNwaW5sb2NrX3QgbG9jazsKLQl1MzIgcmVzb3VyY2VfaGFuZGxlOwotCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3VyY2VfbGlzdDsKKwlib29sIGluX3NodXRkb3duOworCXN0cnVjdCBpZHIgcmVzb3VyY2VfaWRyOwogCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXU2NCBidXNfcmVzZXRfY2xvc3VyZTsKQEAgLTg5LDE2ICs2MiwxMTggQEAKIAl1bnNpZ25lZCBsb25nIHZtX3N0YXJ0OwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBrcmVmIGtyZWY7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICoKLXU2NF90b191cHRyKF9fdTY0IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGNsaWVudF9nZXQoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCWtyZWZfZ2V0KCZjbGllbnQtPmtyZWYpOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGNsaWVudCwga3JlZik7CisKKwlmd19kZXZpY2VfcHV0KGNsaWVudC0+ZGV2aWNlKTsKKwlrZnJlZShjbGllbnQpOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfcHV0KHN0cnVjdCBjbGllbnQgKmNsaWVudCkKK3sKKwlrcmVmX3B1dCgmY2xpZW50LT5rcmVmLCBjbGllbnRfcmVsZWFzZSk7Cit9CisKK3N0cnVjdCBjbGllbnRfcmVzb3VyY2U7Cit0eXBlZGVmIHZvaWQgKCpjbGllbnRfcmVzb3VyY2VfcmVsZWFzZV9mbl90KShzdHJ1Y3QgY2xpZW50ICosCisJCQkJCSAgICAgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqKTsKK3N0cnVjdCBjbGllbnRfcmVzb3VyY2UgeworCWNsaWVudF9yZXNvdXJjZV9yZWxlYXNlX2ZuX3QgcmVsZWFzZTsKKwlpbnQgaGFuZGxlOworfTsKKworc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSB7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIGhhbmRsZXI7CisJX191NjQgY2xvc3VyZTsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7Cit9OworCitzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOworfTsKKworc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CisJdm9pZCAqZGF0YTsKKwlzaXplX3QgbGVuZ3RoOworfTsKKworc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGZ3X2Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKwl1MzIgZGF0YVswXTsKK307CisKK3N0cnVjdCBpc29fcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworCS8qIFNjaGVkdWxlIHdvcmsgYW5kIGFjY2VzcyB0b2RvIG9ubHkgd2l0aCBjbGllbnQtPmxvY2sgaGVsZC4gKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJZW51bSB7SVNPX1JFU19BTExPQywgSVNPX1JFU19SRUFMTE9DLCBJU09fUkVTX0RFQUxMT0MsCisJICAgICAgSVNPX1JFU19BTExPQ19PTkNFLCBJU09fUkVTX0RFQUxMT0NfT05DRSx9IHRvZG87CisJaW50IGdlbmVyYXRpb247CisJdTY0IGNoYW5uZWxzOworCXMzMiBiYW5kd2lkdGg7CisJc3RydWN0IGlzb19yZXNvdXJjZV9ldmVudCAqZV9hbGxvYywgKmVfZGVhbGxvYzsKK307CisKK3N0YXRpYyB2b2lkIHNjaGVkdWxlX2lzb19yZXNvdXJjZShzdHJ1Y3QgaXNvX3Jlc291cmNlICopOworc3RhdGljIHZvaWQgcmVsZWFzZV9pc29fcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqLCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICopOworCisvKgorICogZGVxdWV1ZV9ldmVudCgpIGp1c3Qga2ZyZWUoKSdzIHRoZSBldmVudCwgc28gdGhlIGV2ZW50IGhhcyB0byBiZQorICogdGhlIGZpcnN0IGZpZWxkIGluIGEgc3RydWN0IFhZWl9ldmVudC4KKyAqLworc3RydWN0IGV2ZW50IHsKKwlzdHJ1Y3QgeyB2b2lkICpkYXRhOyBzaXplX3Qgc2l6ZTsgfSB2WzJdOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKK3N0cnVjdCBidXNfcmVzZXRfZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgcmVzZXQ7Cit9OworCitzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG91dGJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlIHI7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2U7Cit9OworCitzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QgcmVxdWVzdDsKK307CisKK3N0cnVjdCBpc29faW50ZXJydXB0X2V2ZW50IHsKKwlzdHJ1Y3QgZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBpbnRlcnJ1cHQ7Cit9OworCitzdHJ1Y3QgaXNvX3Jlc291cmNlX2V2ZW50IHsKKwlzdHJ1Y3QgZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlIHJlc291cmNlOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqdTY0X3RvX3VwdHIoX191NjQgdmFsdWUpCiB7CiAJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXZhbHVlOwogfQogCi1zdGF0aWMgaW5saW5lIF9fdTY0Ci11cHRyX3RvX3U2NCh2b2lkIF9fdXNlciAqcHRyKQorc3RhdGljIGlubGluZSBfX3U2NCB1cHRyX3RvX3U2NCh2b2lkIF9fdXNlciAqcHRyKQogewogCXJldHVybiAoX191NjQpKHVuc2lnbmVkIGxvbmcpcHRyOwogfQpAQCAtMTA3LDcgKzE4Miw2IEBACiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGV2aWNlID0gZndfZGV2aWNlX2dldF9ieV9kZXZ0KGlub2RlLT5pX3JkZXYpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkKQEAgLTEyNSwxNiArMTk5LDE3IEBACiAJfQogCiAJY2xpZW50LT5kZXZpY2UgPSBkZXZpY2U7Ci0JSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+ZXZlbnRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+cmVzb3VyY2VfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNsaWVudC0+bG9jayk7CisJaWRyX2luaXQoJmNsaWVudC0+cmVzb3VyY2VfaWRyKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5ldmVudF9saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjbGllbnQtPndhaXQpOworCWtyZWZfaW5pdCgmY2xpZW50LT5rcmVmKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNsaWVudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZkZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmxpbmssICZkZXZpY2UtPmNsaWVudF9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTAsNjggKzIyNSw2OSBAQAogCWV2ZW50LT52WzFdLnNpemUgPSBzaXplMTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZldmVudC0+bGluaywgJmNsaWVudC0+ZXZlbnRfbGlzdCk7CisJaWYgKGNsaWVudC0+aW5fc2h1dGRvd24pCisJCWtmcmVlKGV2ZW50KTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5saW5rLCAmY2xpZW50LT5ldmVudF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2xpZW50LT53YWl0KTsKIH0KIAotc3RhdGljIGludAotZGVxdWV1ZV9ldmVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgZGVxdWV1ZV9ldmVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGV2ZW50ICpldmVudDsKIAlzaXplX3Qgc2l6ZSwgdG90YWw7Ci0JaW50IGksIHJldHZhbDsKKwlpbnQgaSwgcmV0OwogCi0JcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNsaWVudC0+d2FpdCwKLQkJCQkJICAhbGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSB8fAotCQkJCQkgIGZ3X2RldmljZV9pc19zaHV0ZG93bihjbGllbnQtPmRldmljZSkpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjbGllbnQtPndhaXQsCisJCQkhbGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSB8fAorCQkJZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlpZiAobGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSAmJgogCQkgICAgICAgZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0JZXZlbnQgPSBjb250YWluZXJfb2YoY2xpZW50LT5ldmVudF9saXN0Lm5leHQsIHN0cnVjdCBldmVudCwgbGluayk7CisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwlldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJmNsaWVudC0+ZXZlbnRfbGlzdCwgc3RydWN0IGV2ZW50LCBsaW5rKTsKIAlsaXN0X2RlbCgmZXZlbnQtPmxpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKIAogCXRvdGFsID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShldmVudC0+dikgJiYgdG90YWwgPCBjb3VudDsgaSsrKSB7CiAJCXNpemUgPSBtaW4oZXZlbnQtPnZbaV0uc2l6ZSwgY291bnQgLSB0b3RhbCk7CiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgdG90YWwsIGV2ZW50LT52W2ldLmRhdGEsIHNpemUpKSB7Ci0JCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXRvdGFsICs9IHNpemU7CiAJfQotCXJldHZhbCA9IHRvdGFsOworCXJldCA9IHRvdGFsOwogCiAgb3V0OgogCWtmcmVlKGV2ZW50KTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QKLWZ3X2RldmljZV9vcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBmd19kZXZpY2Vfb3BfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlyZXR1cm4gZGVxdWV1ZV9ldmVudChjbGllbnQsIGJ1ZmZlciwgY291bnQpOwogfQogCi0vKiBjYWxsZXIgbXVzdCBob2xkIGNhcmQtPmxvY2sgc28gdGhhdCBub2RlIHBvaW50ZXJzIGNhbiBiZSBkZXJlZmVyZW5jZWQgaGVyZSAqLwotc3RhdGljIHZvaWQKLWZpbGxfYnVzX3Jlc2V0X2V2ZW50KHN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCAqZXZlbnQsCi0JCSAgICAgc3RydWN0IGNsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgZmlsbF9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0ICpldmVudCwKKwkJCQkgc3RydWN0IGNsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CiAKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKwogCWV2ZW50LT5jbG9zdXJlCSAgICAgPSBjbGllbnQtPmJ1c19yZXNldF9jbG9zdXJlOwogCWV2ZW50LT50eXBlICAgICAgICAgID0gRldfQ0RFVl9FVkVOVF9CVVNfUkVTRVQ7CiAJZXZlbnQtPmdlbmVyYXRpb24gICAgPSBjbGllbnQtPmRldmljZS0+Z2VuZXJhdGlvbjsKQEAgLTIyMCwzOSArMjk2LDQ5IEBACiAJZXZlbnQtPmJtX25vZGVfaWQgICAgPSAwOyAvKiBGSVhNRTogV2UgZG9uJ3QgdHJhY2sgdGhlIEJNLiAqLwogCWV2ZW50LT5pcm1fbm9kZV9pZCAgID0gY2FyZC0+aXJtX25vZGUtPm5vZGVfaWQ7CiAJZXZlbnQtPnJvb3Rfbm9kZV9pZCAgPSBjYXJkLT5yb290X25vZGUtPm5vZGVfaWQ7CisKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZAotZm9yX2VhY2hfY2xpZW50KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKLQkJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY2xpZW50ICpjbGllbnQpKQorc3RhdGljIHZvaWQgZm9yX2VhY2hfY2xpZW50KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKKwkJCSAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjbGllbnQgKmNsaWVudCkpCiB7Ci0Jc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CiAJc3RydWN0IGNsaWVudCAqYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQorCW11dGV4X2xvY2soJmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmRldmljZS0+Y2xpZW50X2xpc3QsIGxpbmspCiAJCWNhbGxiYWNrKGMpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmZGV2aWNlLT5jbGllbnRfbGlzdF9tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xdWV1ZV9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGNsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzY2hlZHVsZV9yZWFsbG9jYXRpb25zKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYnVzX3Jlc2V0ICpidXNfcmVzZXQ7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqciA9IHA7CiAKLQlidXNfcmVzZXQgPSBremFsbG9jKHNpemVvZigqYnVzX3Jlc2V0KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1c19yZXNldCA9PSBOVUxMKSB7CisJaWYgKHItPnJlbGVhc2UgPT0gcmVsZWFzZV9pc29fcmVzb3VyY2UpCisJCXNjaGVkdWxlX2lzb19yZXNvdXJjZShjb250YWluZXJfb2YociwKKwkJCQkJc3RydWN0IGlzb19yZXNvdXJjZSwgcmVzb3VyY2UpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcXVldWVfYnVzX3Jlc2V0X2V2ZW50KHN0cnVjdCBjbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYnVzX3Jlc2V0X2V2ZW50ICplOworCisJZSA9IGt6YWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGUgPT0gTlVMTCkgewogCQlmd19ub3RpZnkoIk91dCBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGJ1cyByZXNldCBldmVudFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlmaWxsX2J1c19yZXNldF9ldmVudCgmYnVzX3Jlc2V0LT5yZXNldCwgY2xpZW50KTsKKwlmaWxsX2J1c19yZXNldF9ldmVudCgmZS0+cmVzZXQsIGNsaWVudCk7CiAKLQlxdWV1ZV9ldmVudChjbGllbnQsICZidXNfcmVzZXQtPmV2ZW50LAotCQkgICAgJmJ1c19yZXNldC0+cmVzZXQsIHNpemVvZihidXNfcmVzZXQtPnJlc2V0KSwgTlVMTCwgMCk7CisJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJCSAgICAmZS0+cmVzZXQsIHNpemVvZihlLT5yZXNldCksIE5VTEwsIDApOworCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwlpZHJfZm9yX2VhY2goJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBzY2hlZHVsZV9yZWFsbG9jYXRpb25zLCBjbGllbnQpOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKIH0KIAogdm9pZCBmd19kZXZpY2VfY2Rldl91cGRhdGUoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQpAQCAtMjc0LDExICszNjAsMTEgQEAKIHsKIAlzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyAqZ2V0X2luZm8gPSBidWZmZXI7CiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0IGJ1c19yZXNldDsKLQlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNsaWVudC0+ZGV2aWNlLT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogCWNsaWVudC0+dmVyc2lvbiA9IGdldF9pbmZvLT52ZXJzaW9uOwogCWdldF9pbmZvLT52ZXJzaW9uID0gRldfQ0RFVl9WRVJTSU9OOworCWdldF9pbmZvLT5jYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmluZGV4OwogCiAJZG93bl9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCkBAIC0zMDAsNDkgKzM4Niw2MSBAQAogCWNsaWVudC0+YnVzX3Jlc2V0X2Nsb3N1cmUgPSBnZXRfaW5mby0+YnVzX3Jlc2V0X2Nsb3N1cmU7CiAJaWYgKGdldF9pbmZvLT5idXNfcmVzZXQgIT0gMCkgewogCQl2b2lkIF9fdXNlciAqdXB0ciA9IHU2NF90b191cHRyKGdldF9pbmZvLT5idXNfcmVzZXQpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCWZpbGxfYnVzX3Jlc2V0X2V2ZW50KCZidXNfcmVzZXQsIGNsaWVudCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQogCQlpZiAoY29weV90b191c2VyKHVwdHIsICZidXNfcmVzZXQsIHNpemVvZihidXNfcmVzZXQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWdldF9pbmZvLT5jYXJkID0gY2FyZC0+aW5kZXg7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWFkZF9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3N0YXRpYyBpbnQgYWRkX2NsaWVudF9yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UsIGdmcF90IGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworIHJldHJ5OgorCWlmIChpZHJfcHJlX2dldCgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIGdmcF9tYXNrKSA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZyZXNvdXJjZS0+bGluaywgJmNsaWVudC0+cmVzb3VyY2VfbGlzdCk7Ci0JcmVzb3VyY2UtPmhhbmRsZSA9IGNsaWVudC0+cmVzb3VyY2VfaGFuZGxlKys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlbGVhc2VfY2xpZW50X3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdTMyIGhhbmRsZSwKLQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKipyZXNvdXJjZSkKLXsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmY2xpZW50LT5yZXNvdXJjZV9saXN0LCBsaW5rKSB7Ci0JCWlmIChyLT5oYW5kbGUgPT0gaGFuZGxlKSB7Ci0JCQlsaXN0X2RlbCgmci0+bGluayk7Ci0JCQlicmVhazsKLQkJfQorCWlmIChjbGllbnQtPmluX3NodXRkb3duKQorCQlyZXQgPSAtRUNBTkNFTEVEOworCWVsc2UKKwkJcmV0ID0gaWRyX2dldF9uZXcoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCByZXNvdXJjZSwKKwkJCQkgICZyZXNvdXJjZS0+aGFuZGxlKTsKKwlpZiAocmV0ID49IDApIHsKKwkJY2xpZW50X2dldChjbGllbnQpOworCQlpZiAocmVzb3VyY2UtPnJlbGVhc2UgPT0gcmVsZWFzZV9pc29fcmVzb3VyY2UpCisJCQlzY2hlZHVsZV9pc29fcmVzb3VyY2UoY29udGFpbmVyX29mKHJlc291cmNlLAorCQkJCQkJc3RydWN0IGlzb19yZXNvdXJjZSwgcmVzb3VyY2UpKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoJnItPmxpbmsgPT0gJmNsaWVudC0+cmVzb3VyY2VfbGlzdCkKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gcmV0cnk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcmVsZWFzZV9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1MzIgaGFuZGxlLAorCQkJCSAgIGNsaWVudF9yZXNvdXJjZV9yZWxlYXNlX2ZuX3QgcmVsZWFzZSwKKwkJCQkgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICoqcmVzb3VyY2UpCit7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcjsKKworCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJaWYgKGNsaWVudC0+aW5fc2h1dGRvd24pCisJCXIgPSBOVUxMOworCWVsc2UKKwkJciA9IGlkcl9maW5kKCZjbGllbnQtPnJlc291cmNlX2lkciwgaGFuZGxlKTsKKwlpZiAociAmJiByLT5yZWxlYXNlID09IHJlbGVhc2UpCisJCWlkcl9yZW1vdmUoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKworCWlmICghKHIgJiYgci0+cmVsZWFzZSA9PSByZWxlYXNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocmVzb3VyY2UpCkBAIC0zNTAsMjAzICs0NDgsMjM5IEBACiAJZWxzZQogCQlyLT5yZWxlYXNlKGNsaWVudCwgcik7CiAKKwljbGllbnRfcHV0KGNsaWVudCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXJlbGVhc2VfdHJhbnNhY3Rpb24oc3RydWN0IGNsaWVudCAqY2xpZW50LCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdHJhbnNhY3Rpb24oc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQogewotCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2UgPQotCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCByZXNwb25zZSwgcmVzb3VyY2UpOworCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKKwkJCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSwgcmVzb3VyY2UpOwogCi0JZndfY2FuY2VsX3RyYW5zYWN0aW9uKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCAmcmVzcG9uc2UtPnRyYW5zYWN0aW9uKTsKKwlmd19jYW5jZWxfdHJhbnNhY3Rpb24oY2xpZW50LT5kZXZpY2UtPmNhcmQsICZyLT50cmFuc2FjdGlvbik7CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2UgPSBkYXRhOwotCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IHJlc3BvbnNlLT5jbGllbnQ7CisJc3RydWN0IG91dGJvdW5kX3RyYW5zYWN0aW9uX2V2ZW50ICplID0gZGF0YTsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSAqcnNwID0gJmUtPnJlc3BvbnNlOworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGUtPmNsaWVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlICpyID0gJnJlc3BvbnNlLT5yZXNwb25zZTsKIAotCWlmIChsZW5ndGggPCByLT5sZW5ndGgpCi0JCXItPmxlbmd0aCA9IGxlbmd0aDsKKwlpZiAobGVuZ3RoIDwgcnNwLT5sZW5ndGgpCisJCXJzcC0+bGVuZ3RoID0gbGVuZ3RoOwogCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKLQkJbWVtY3B5KHItPmRhdGEsIHBheWxvYWQsIHItPmxlbmd0aCk7CisJCW1lbWNweShyc3AtPmRhdGEsIHBheWxvYWQsIHJzcC0+bGVuZ3RoKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcmVzcG9uc2UtPnJlc291cmNlLmxpbmspOworCS8qCisJICogMS4gSWYgY2FsbGVkIHdoaWxlIGluIHNodXRkb3duLCB0aGUgaWRyIHRyZWUgbXVzdCBiZSBsZWZ0IHVudG91Y2hlZC4KKwkgKiAgICBUaGUgaWRyIGhhbmRsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIHRoZSBjbGllbnQgcmVmZXJlbmNlIHdpbGwgYmUKKwkgKiAgICBkcm9wcGVkIGxhdGVyLgorCSAqIDIuIElmIHRoZSBjYWxsIGNoYWluIHdhcyByZWxlYXNlX2NsaWVudF9yZXNvdXJjZSAtPgorCSAqICAgIHJlbGVhc2VfdHJhbnNhY3Rpb24gLT4gY29tcGxldGVfdHJhbnNhY3Rpb24gKGluc3RlYWQgb2YgYSBub3JtYWwKKwkgKiAgICBjb25jbHVzaW9uIG9mIHRoZSB0cmFuc2FjdGlvbiksIGkuZS4gaWYgdGhpcyByZXNvdXJjZSB3YXMgYWxyZWFkeQorCSAqICAgIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBpZHIsIHRoZSBjbGllbnQgcmVmZXJlbmNlIHdpbGwgYmUgZHJvcHBlZAorCSAqICAgIGJ5IHJlbGVhc2VfY2xpZW50X3Jlc291cmNlIGFuZCB3ZSBtdXN0IG5vdCBkcm9wIGl0IGhlcmUuCisJICovCisJaWYgKCFjbGllbnQtPmluX3NodXRkb3duICYmCisJICAgIGlkcl9maW5kKCZjbGllbnQtPnJlc291cmNlX2lkciwgZS0+ci5yZXNvdXJjZS5oYW5kbGUpKSB7CisJCWlkcl9yZW1vdmUoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBlLT5yLnJlc291cmNlLmhhbmRsZSk7CisJCS8qIERyb3AgdGhlIGlkcidzIHJlZmVyZW5jZSAqLworCQljbGllbnRfcHV0KGNsaWVudCk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOwogCi0Jci0+dHlwZSAgID0gRldfQ0RFVl9FVkVOVF9SRVNQT05TRTsKLQlyLT5yY29kZSAgPSByY29kZTsKKwlyc3AtPnR5cGUgPSBGV19DREVWX0VWRU5UX1JFU1BPTlNFOworCXJzcC0+cmNvZGUgPSByY29kZTsKIAogCS8qCi0JICogSW4gdGhlIGNhc2UgdGhhdCBzaXplb2YoKnIpIGRvZXNuJ3QgYWxpZ24gd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlCisJICogSW4gdGhlIGNhc2UgdGhhdCBzaXplb2YoKnJzcCkgZG9lc24ndCBhbGlnbiB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUKIAkgKiBkYXRhLCBhbmQgdGhlIHJlYWQgaXMgc2hvcnQsIHByZXNlcnZlIGFuIGV4dHJhIGNvcHkgb2YgdGhlIGRhdGEKIAkgKiB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBhIHByZS0yLjYuMjcgYnVnLiAgU2luY2UgdGhlIGJ1ZyBpcyBoYXJtbGVzcwogCSAqIGZvciBzaG9ydCByZWFkcyBhbmQgc29tZSBhcHBzIGRlcGVuZGVkIG9uIGl0LCB0aGlzIGlzIGJvdGggc2FmZQogCSAqIGFuZCBwcnVkZW50IGZvciBjb21wYXRpYmlsaXR5LgogCSAqLwotCWlmIChyLT5sZW5ndGggPD0gc2l6ZW9mKCpyKSAtIG9mZnNldG9mKHR5cGVvZigqciksIGRhdGEpKQotCQlxdWV1ZV9ldmVudChjbGllbnQsICZyZXNwb25zZS0+ZXZlbnQsIHIsIHNpemVvZigqciksCi0JCQkgICAgci0+ZGF0YSwgci0+bGVuZ3RoKTsKKwlpZiAocnNwLT5sZW5ndGggPD0gc2l6ZW9mKCpyc3ApIC0gb2Zmc2V0b2YodHlwZW9mKCpyc3ApLCBkYXRhKSkKKwkJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsIHJzcCwgc2l6ZW9mKCpyc3ApLAorCQkJICAgIHJzcC0+ZGF0YSwgcnNwLT5sZW5ndGgpOwogCWVsc2UKLQkJcXVldWVfZXZlbnQoY2xpZW50LCAmcmVzcG9uc2UtPmV2ZW50LCByLCBzaXplb2YoKnIpICsgci0+bGVuZ3RoLAorCQlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwgcnNwLCBzaXplb2YoKnJzcCkgKyByc3AtPmxlbmd0aCwKIAkJCSAgICBOVUxMLCAwKTsKKworCS8qIERyb3AgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrJ3MgcmVmZXJlbmNlICovCisJY2xpZW50X3B1dChjbGllbnQpOworfQorCitzdGF0aWMgaW50IGluaXRfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgKnJlcXVlc3QsCisJCQlpbnQgZGVzdGluYXRpb25faWQsIGludCBzcGVlZCkKK3sKKwlzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fZXZlbnQgKmU7CisJaW50IHJldDsKKworCWlmIChyZXF1ZXN0LT50Y29kZSAhPSBUQ09ERV9TVFJFQU1fREFUQSAmJgorCSAgICAocmVxdWVzdC0+bGVuZ3RoID4gNDA5NiB8fCByZXF1ZXN0LT5sZW5ndGggPiA1MTIgPDwgc3BlZWQpKQorCQlyZXR1cm4gLUVJTzsKKworCWUgPSBrbWFsbG9jKHNpemVvZigqZSkgKyByZXF1ZXN0LT5sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZS0+Y2xpZW50ID0gY2xpZW50OworCWUtPnJlc3BvbnNlLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKKwllLT5yZXNwb25zZS5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKworCWlmIChyZXF1ZXN0LT5kYXRhICYmCisJICAgIGNvcHlfZnJvbV91c2VyKGUtPnJlc3BvbnNlLmRhdGEsCisJCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwllLT5yLnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX3RyYW5zYWN0aW9uOworCXJldCA9IGFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmZS0+ci5yZXNvdXJjZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJLyogR2V0IGEgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgKi8KKwljbGllbnRfZ2V0KGNsaWVudCk7CisKKwlmd19zZW5kX3JlcXVlc3QoY2xpZW50LT5kZXZpY2UtPmNhcmQsICZlLT5yLnRyYW5zYWN0aW9uLAorCQkJcmVxdWVzdC0+dGNvZGUsIGRlc3RpbmF0aW9uX2lkLCByZXF1ZXN0LT5nZW5lcmF0aW9uLAorCQkJc3BlZWQsIHJlcXVlc3QtPm9mZnNldCwgZS0+cmVzcG9uc2UuZGF0YSwKKwkJCXJlcXVlc3QtPmxlbmd0aCwgY29tcGxldGVfdHJhbnNhY3Rpb24sIGUpOworCXJldHVybiAwOworCisgZmFpbGVkOgorCWtmcmVlKGUpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpb2N0bF9zZW5kX3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCiB7Ci0Jc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gY2xpZW50LT5kZXZpY2U7CiAJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0ICpyZXF1ZXN0ID0gYnVmZmVyOwotCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2U7CiAKLQkvKiBXaGF0IGlzIHRoZSBiaWdnZXN0IHNpemUgd2UnbGwgYWNjZXB0LCByZWFsbHk/ICovCi0JaWYgKHJlcXVlc3QtPmxlbmd0aCA+IDQwOTYpCisJc3dpdGNoIChyZXF1ZXN0LT50Y29kZSkgeworCWNhc2UgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUOgorCWNhc2UgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUOgorCWNhc2UgVENPREVfUkVBRF9CTE9DS19SRVFVRVNUOgorCWNhc2UgVENPREVfTE9DS19NQVNLX1NXQVA6CisJY2FzZSBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUDoKKwljYXNlIFRDT0RFX0xPQ0tfRkVUQ0hfQUREOgorCWNhc2UgVENPREVfTE9DS19MSVRUTEVfQUREOgorCWNhc2UgVENPREVfTE9DS19CT1VOREVEX0FERDoKKwljYXNlIFRDT0RFX0xPQ0tfV1JBUF9BREQ6CisJY2FzZSBUQ09ERV9MT0NLX1ZFTkRPUl9ERVBFTkRFTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwotCi0JcmVzcG9uc2UgPSBrbWFsbG9jKHNpemVvZigqcmVzcG9uc2UpICsgcmVxdWVzdC0+bGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzcG9uc2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXNwb25zZS0+Y2xpZW50ID0gY2xpZW50OwotCXJlc3BvbnNlLT5yZXNwb25zZS5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7Ci0JcmVzcG9uc2UtPnJlc3BvbnNlLmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOwotCi0JaWYgKHJlcXVlc3QtPmRhdGEgJiYKLQkgICAgY29weV9mcm9tX3VzZXIocmVzcG9uc2UtPnJlc3BvbnNlLmRhdGEsCi0JCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoKSkgewotCQlrZnJlZShyZXNwb25zZSk7Ci0JCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJlc3BvbnNlLT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV90cmFuc2FjdGlvbjsKLQlhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnJlc3BvbnNlLT5yZXNvdXJjZSk7Ci0KLQlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmcmVzcG9uc2UtPnRyYW5zYWN0aW9uLAotCQkJcmVxdWVzdC0+dGNvZGUgJiAweDFmLAotCQkJZGV2aWNlLT5ub2RlLT5ub2RlX2lkLAotCQkJcmVxdWVzdC0+Z2VuZXJhdGlvbiwKLQkJCWRldmljZS0+bWF4X3NwZWVkLAotCQkJcmVxdWVzdC0+b2Zmc2V0LAotCQkJcmVzcG9uc2UtPnJlc3BvbnNlLmRhdGEsIHJlcXVlc3QtPmxlbmd0aCwKLQkJCWNvbXBsZXRlX3RyYW5zYWN0aW9uLCByZXNwb25zZSk7Ci0KLQlpZiAocmVxdWVzdC0+ZGF0YSkKLQkJcmV0dXJuIHNpemVvZihyZXF1ZXN0KSArIHJlcXVlc3QtPmxlbmd0aDsKLQllbHNlCi0JCXJldHVybiBzaXplb2YocmVxdWVzdCk7CisJcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkLAorCQkJICAgIGNsaWVudC0+ZGV2aWNlLT5tYXhfc3BlZWQpOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19oYW5kbGVyIHsKLQlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIGhhbmRsZXI7Ci0JX191NjQgY2xvc3VyZTsKLQlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLX07Ci0KLXN0cnVjdCByZXF1ZXN0IHsKLQlzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdDsKLQl2b2lkICpkYXRhOwotCXNpemVfdCBsZW5ndGg7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLX07Ci0KLXN0cnVjdCByZXF1ZXN0X2V2ZW50IHsKLQlzdHJ1Y3QgZXZlbnQgZXZlbnQ7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCByZXF1ZXN0OwotfTsKLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQorc3RhdGljIHZvaWQgcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCSAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxdWVzdCA9Ci0JCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlcXVlc3QsIHJlc291cmNlKTsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKKwkJCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19zZW5kX3Jlc3BvbnNlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCByZXF1ZXN0LT5yZXF1ZXN0LAorCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsCiAJCQkgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwotCWtmcmVlKHJlcXVlc3QpOworCWtmcmVlKHIpOwogfQogCi1zdGF0aWMgdm9pZAotaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyLAotCSAgICAgICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkgICAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJCSAgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkJICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewotCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXIgPSBjYWxsYmFja19kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpyZXF1ZXN0OwotCXN0cnVjdCByZXF1ZXN0X2V2ZW50ICplOwotCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGhhbmRsZXItPmNsaWVudDsKKwlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlICpoYW5kbGVyID0gY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9ldmVudCAqZTsKKwlpbnQgcmV0OwogCi0JcmVxdWVzdCA9IGttYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CisJciA9IGttYWxsb2Moc2l6ZW9mKCpyKSwgR0ZQX0FUT01JQyk7CiAJZSA9IGttYWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlcXVlc3QgPT0gTlVMTCB8fCBlID09IE5VTEwpIHsKLQkJa2ZyZWUocmVxdWVzdCk7Ci0JCWtmcmVlKGUpOwotCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHIsIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAociA9PSBOVUxMIHx8IGUgPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CiAKLQlyZXF1ZXN0LT5yZXF1ZXN0ID0gcjsKLQlyZXF1ZXN0LT5kYXRhICAgID0gcGF5bG9hZDsKLQlyZXF1ZXN0LT5sZW5ndGggID0gbGVuZ3RoOworCXItPnJlcXVlc3QgPSByZXF1ZXN0OworCXItPmRhdGEgICAgPSBwYXlsb2FkOworCXItPmxlbmd0aCAgPSBsZW5ndGg7CiAKLQlyZXF1ZXN0LT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV9yZXF1ZXN0OwotCWFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmcmVxdWVzdC0+cmVzb3VyY2UpOworCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX3JlcXVlc3Q7CisJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShoYW5kbGVyLT5jbGllbnQsICZyLT5yZXNvdXJjZSwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOwogCiAJZS0+cmVxdWVzdC50eXBlICAgID0gRldfQ0RFVl9FVkVOVF9SRVFVRVNUOwogCWUtPnJlcXVlc3QudGNvZGUgICA9IHRjb2RlOwogCWUtPnJlcXVlc3Qub2Zmc2V0ICA9IG9mZnNldDsKIAllLT5yZXF1ZXN0Lmxlbmd0aCAgPSBsZW5ndGg7Ci0JZS0+cmVxdWVzdC5oYW5kbGUgID0gcmVxdWVzdC0+cmVzb3VyY2UuaGFuZGxlOworCWUtPnJlcXVlc3QuaGFuZGxlICA9IHItPnJlc291cmNlLmhhbmRsZTsKIAllLT5yZXF1ZXN0LmNsb3N1cmUgPSBoYW5kbGVyLT5jbG9zdXJlOwogCi0JcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJcXVldWVfZXZlbnQoaGFuZGxlci0+Y2xpZW50LCAmZS0+ZXZlbnQsCiAJCSAgICAmZS0+cmVxdWVzdCwgc2l6ZW9mKGUtPnJlcXVlc3QpLCBwYXlsb2FkLCBsZW5ndGgpOworCXJldHVybjsKKworIGZhaWxlZDoKKwlrZnJlZShyKTsKKwlrZnJlZShlKTsKKwlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQKLXJlbGVhc2VfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKLQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQorc3RhdGljIHZvaWQgcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJCSAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKIHsKLQlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyID0KLQkJY29udGFpbmVyX29mKHJlc291cmNlLCBzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyLCByZXNvdXJjZSk7CisJc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSAqciA9CisJICAgIGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSwgcmVzb3VyY2UpOwogCi0JZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyKCZoYW5kbGVyLT5oYW5kbGVyKTsKLQlrZnJlZShoYW5kbGVyKTsKKwlmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoJnItPmhhbmRsZXIpOworCWtmcmVlKHIpOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQogewogCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOwotCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CisJc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSAqcjsKIAlzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gcmVnaW9uOworCWludCByZXQ7CiAKLQloYW5kbGVyID0ga21hbGxvYyhzaXplb2YoKmhhbmRsZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaGFuZGxlciA9PSBOVUxMKQorCXIgPSBrbWFsbG9jKHNpemVvZigqciksIEdGUF9LRVJORUwpOworCWlmIChyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmVnaW9uLnN0YXJ0ID0gcmVxdWVzdC0+b2Zmc2V0OwogCXJlZ2lvbi5lbmQgPSByZXF1ZXN0LT5vZmZzZXQgKyByZXF1ZXN0LT5sZW5ndGg7Ci0JaGFuZGxlci0+aGFuZGxlci5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7Ci0JaGFuZGxlci0+aGFuZGxlci5hZGRyZXNzX2NhbGxiYWNrID0gaGFuZGxlX3JlcXVlc3Q7Ci0JaGFuZGxlci0+aGFuZGxlci5jYWxsYmFja19kYXRhID0gaGFuZGxlcjsKLQloYW5kbGVyLT5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKLQloYW5kbGVyLT5jbGllbnQgPSBjbGllbnQ7CisJci0+aGFuZGxlci5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CisJci0+aGFuZGxlci5hZGRyZXNzX2NhbGxiYWNrID0gaGFuZGxlX3JlcXVlc3Q7CisJci0+aGFuZGxlci5jYWxsYmFja19kYXRhID0gcjsKKwlyLT5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKwlyLT5jbGllbnQgPSBjbGllbnQ7CiAKLQlpZiAoZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZoYW5kbGVyLT5oYW5kbGVyLCAmcmVnaW9uKSA8IDApIHsKLQkJa2ZyZWUoaGFuZGxlcik7Ci0JCXJldHVybiAtRUJVU1k7CisJcmV0ID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyLT5oYW5kbGVyLCAmcmVnaW9uKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShyKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQloYW5kbGVyLT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXI7Ci0JYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZoYW5kbGVyLT5yZXNvdXJjZSk7Ci0JcmVxdWVzdC0+aGFuZGxlID0gaGFuZGxlci0+cmVzb3VyY2UuaGFuZGxlOworCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2FkZHJlc3NfaGFuZGxlcjsKKwlyZXQgPSBhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnItPnJlc291cmNlLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihjbGllbnQsICZyLT5yZXNvdXJjZSk7CisJCXJldHVybiByZXQ7CisJfQorCXJlcXVlc3QtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKIAogCXJldHVybiAwOwogfQpAQCAtNTU1LDE4ICs2ODksMjIgQEAKIHsKIAlzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOwogCi0JcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLCBOVUxMKTsKKwlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCisJCQkJICAgICAgIHJlbGVhc2VfYWRkcmVzc19oYW5kbGVyLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBpb2N0bF9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQogewogCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UgKnJlcXVlc3QgPSBidWZmZXI7CiAJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2U7Ci0Jc3RydWN0IHJlcXVlc3QgKnI7CisJc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgKnI7CiAKLQlpZiAocmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsICZyZXNvdXJjZSkgPCAwKQorCWlmIChyZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwKKwkJCQkgICAgcmVsZWFzZV9yZXF1ZXN0LCAmcmVzb3VyY2UpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlcXVlc3QsIHJlc291cmNlKTsKKworCXIgPSBjb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLAorCQkJIHJlc291cmNlKTsKIAlpZiAocmVxdWVzdC0+bGVuZ3RoIDwgci0+bGVuZ3RoKQogCQlyLT5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CiAJaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByLT5sZW5ndGgpKQpAQCAtNTg4LDg1ICs3MjYsOTIgQEAKIAlyZXR1cm4gZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHNob3J0X3Jlc2V0KTsKIH0KIAotc3RydWN0IGRlc2NyaXB0b3IgewotCXN0cnVjdCBmd19kZXNjcmlwdG9yIGQ7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLQl1MzIgZGF0YVswXTsKLX07Ci0KIHN0YXRpYyB2b2lkIHJlbGVhc2VfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCiAJCQkgICAgICAgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCiB7Ci0Jc3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPQotCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBkZXNjcmlwdG9yLCByZXNvdXJjZSk7CisJc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UgKnIgPQorCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBkZXNjcmlwdG9yX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKCZkZXNjcmlwdG9yLT5kKTsKLQlrZnJlZShkZXNjcmlwdG9yKTsKKwlmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKCZyLT5kZXNjcmlwdG9yKTsKKwlrZnJlZShyKTsKIH0KIAogc3RhdGljIGludCBpb2N0bF9hZGRfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvciAqcmVxdWVzdCA9IGJ1ZmZlcjsKLQlzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CisJc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UgKnI7CisJaW50IHJldDsKKworCS8qIEFjY2VzcyBwb2xpY3k6IEFsbG93IHRoaXMgaW9jdGwgb25seSBvbiBsb2NhbCBub2RlcycgZGV2aWNlIGZpbGVzLiAqLworCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCXJldCA9IGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkICE9IGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQ7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT1NZUzsKIAogCWlmIChyZXF1ZXN0LT5sZW5ndGggPiAyNTYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGVzY3JpcHRvciA9Ci0JCWttYWxsb2Moc2l6ZW9mKCpkZXNjcmlwdG9yKSArIHJlcXVlc3QtPmxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOwotCWlmIChkZXNjcmlwdG9yID09IE5VTEwpCisJciA9IGttYWxsb2Moc2l6ZW9mKCpyKSArIHJlcXVlc3QtPmxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOworCWlmIChyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKGRlc2NyaXB0b3ItPmRhdGEsCisJaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsCiAJCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoICogNCkpIHsKLQkJa2ZyZWUoZGVzY3JpcHRvcik7Ci0JCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQlkZXNjcmlwdG9yLT5kLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQlkZXNjcmlwdG9yLT5kLmltbWVkaWF0ZSA9IHJlcXVlc3QtPmltbWVkaWF0ZTsKLQlkZXNjcmlwdG9yLT5kLmtleSA9IHJlcXVlc3QtPmtleTsKLQlkZXNjcmlwdG9yLT5kLmRhdGEgPSBkZXNjcmlwdG9yLT5kYXRhOworCXItPmRlc2NyaXB0b3IubGVuZ3RoICAgID0gcmVxdWVzdC0+bGVuZ3RoOworCXItPmRlc2NyaXB0b3IuaW1tZWRpYXRlID0gcmVxdWVzdC0+aW1tZWRpYXRlOworCXItPmRlc2NyaXB0b3Iua2V5ICAgICAgID0gcmVxdWVzdC0+a2V5OworCXItPmRlc2NyaXB0b3IuZGF0YSAgICAgID0gci0+ZGF0YTsKIAotCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJmRlc2NyaXB0b3ItPmQpOwotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWtmcmVlKGRlc2NyaXB0b3IpOwotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJnItPmRlc2NyaXB0b3IpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2Rlc2NyaXB0b3I7CisJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZyLT5yZXNvdXJjZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcigmci0+ZGVzY3JpcHRvcik7CisJCWdvdG8gZmFpbGVkOwogCX0KLQotCWRlc2NyaXB0b3ItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2Rlc2NyaXB0b3I7Ci0JYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZkZXNjcmlwdG9yLT5yZXNvdXJjZSk7Ci0JcmVxdWVzdC0+aGFuZGxlID0gZGVzY3JpcHRvci0+cmVzb3VyY2UuaGFuZGxlOworCXJlcXVlc3QtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKIAogCXJldHVybiAwOworIGZhaWxlZDoKKwlrZnJlZShyKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaW9jdGxfcmVtb3ZlX2Rlc2NyaXB0b3Ioc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCiB7CiAJc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IgKnJlcXVlc3QgPSBidWZmZXI7CiAKLQlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsIE5VTEwpOworCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwKKwkJCQkgICAgICAgcmVsZWFzZV9kZXNjcmlwdG9yLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQKLWlzb19jYWxsYmFjayhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQsIHUzMiBjeWNsZSwKLQkgICAgIHNpemVfdCBoZWFkZXJfbGVuZ3RoLCB2b2lkICpoZWFkZXIsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBpc29fY2FsbGJhY2soc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0LCB1MzIgY3ljbGUsCisJCQkgc2l6ZV90IGhlYWRlcl9sZW5ndGgsIHZvaWQgKmhlYWRlciwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBkYXRhOwotCXN0cnVjdCBpc29faW50ZXJydXB0ICppcnE7CisJc3RydWN0IGlzb19pbnRlcnJ1cHRfZXZlbnQgKmU7CiAKLQlpcnEgPSBremFsbG9jKHNpemVvZigqaXJxKSArIGhlYWRlcl9sZW5ndGgsIEdGUF9BVE9NSUMpOwotCWlmIChpcnEgPT0gTlVMTCkKKwllID0ga3phbGxvYyhzaXplb2YoKmUpICsgaGVhZGVyX2xlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaXJxLT5pbnRlcnJ1cHQudHlwZSAgICAgID0gRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUOwotCWlycS0+aW50ZXJydXB0LmNsb3N1cmUgICA9IGNsaWVudC0+aXNvX2Nsb3N1cmU7Ci0JaXJxLT5pbnRlcnJ1cHQuY3ljbGUgICAgID0gY3ljbGU7Ci0JaXJxLT5pbnRlcnJ1cHQuaGVhZGVyX2xlbmd0aCA9IGhlYWRlcl9sZW5ndGg7Ci0JbWVtY3B5KGlycS0+aW50ZXJydXB0LmhlYWRlciwgaGVhZGVyLCBoZWFkZXJfbGVuZ3RoKTsKLQlxdWV1ZV9ldmVudChjbGllbnQsICZpcnEtPmV2ZW50LCAmaXJxLT5pbnRlcnJ1cHQsCi0JCSAgICBzaXplb2YoaXJxLT5pbnRlcnJ1cHQpICsgaGVhZGVyX2xlbmd0aCwgTlVMTCwgMCk7CisJZS0+aW50ZXJydXB0LnR5cGUgICAgICA9IEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVDsKKwllLT5pbnRlcnJ1cHQuY2xvc3VyZSAgID0gY2xpZW50LT5pc29fY2xvc3VyZTsKKwllLT5pbnRlcnJ1cHQuY3ljbGUgICAgID0gY3ljbGU7CisJZS0+aW50ZXJydXB0LmhlYWRlcl9sZW5ndGggPSBoZWFkZXJfbGVuZ3RoOworCW1lbWNweShlLT5pbnRlcnJ1cHQuaGVhZGVyLCBoZWFkZXIsIGhlYWRlcl9sZW5ndGgpOworCXF1ZXVlX2V2ZW50KGNsaWVudCwgJmUtPmV2ZW50LCAmZS0+aW50ZXJydXB0LAorCQkgICAgc2l6ZW9mKGUtPmludGVycnVwdCkgKyBoZWFkZXJfbGVuZ3RoLCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGludCBpb2N0bF9jcmVhdGVfaXNvX2NvbnRleHQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCkBAIC04NzEsNiArMTAxNiwyNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaXNvX3Jlc291cmNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpc29fcmVzb3VyY2VfZXZlbnQgKmU7CisJc3RydWN0IGlzb19yZXNvdXJjZSAqciA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlzb19yZXNvdXJjZSwgd29yay53b3JrKTsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSByLT5jbGllbnQ7CisJaW50IGdlbmVyYXRpb24sIGNoYW5uZWwsIGJhbmR3aWR0aCwgdG9kbzsKKwlib29sIHNraXAsIGZyZWUsIHN1Y2Nlc3M7CisKKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCWdlbmVyYXRpb24gPSBjbGllbnQtPmRldmljZS0+Z2VuZXJhdGlvbjsKKwl0b2RvID0gci0+dG9kbzsKKwkvKiBBbGxvdyAxMDAwbXMgZ3JhY2UgcGVyaW9kIGZvciBvdGhlciByZWFsbG9jYXRpb25zLiAqLworCWlmICh0b2RvID09IElTT19SRVNfQUxMT0MgJiYKKwkgICAgdGltZV9pc19hZnRlcl9qaWZmaWVzKGNsaWVudC0+ZGV2aWNlLT5jYXJkLT5yZXNldF9qaWZmaWVzICsgSFopKSB7CisJCWlmIChzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnItPndvcmssIERJVl9ST1VORF9VUChIWiwgMykpKQorCQkJY2xpZW50X2dldChjbGllbnQpOworCQlza2lwID0gdHJ1ZTsKKwl9IGVsc2UgeworCQkvKiBXZSBjb3VsZCBiZSBjYWxsZWQgdHdpY2Ugd2l0aGluIHRoZSBzYW1lIGdlbmVyYXRpb24uICovCisJCXNraXAgPSB0b2RvID09IElTT19SRVNfUkVBTExPQyAmJgorCQkgICAgICAgci0+Z2VuZXJhdGlvbiA9PSBnZW5lcmF0aW9uOworCX0KKwlmcmVlID0gdG9kbyA9PSBJU09fUkVTX0RFQUxMT0MgfHwKKwkgICAgICAgdG9kbyA9PSBJU09fUkVTX0FMTE9DX09OQ0UgfHwKKwkgICAgICAgdG9kbyA9PSBJU09fUkVTX0RFQUxMT0NfT05DRTsKKwlyLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisKKwlpZiAoc2tpcCkKKwkJZ290byBvdXQ7CisKKwliYW5kd2lkdGggPSByLT5iYW5kd2lkdGg7CisKKwlmd19pc29fcmVzb3VyY2VfbWFuYWdlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCBnZW5lcmF0aW9uLAorCQkJci0+Y2hhbm5lbHMsICZjaGFubmVsLCAmYmFuZHdpZHRoLAorCQkJdG9kbyA9PSBJU09fUkVTX0FMTE9DIHx8CisJCQl0b2RvID09IElTT19SRVNfUkVBTExPQyB8fAorCQkJdG9kbyA9PSBJU09fUkVTX0FMTE9DX09OQ0UpOworCS8qCisJICogSXMgdGhpcyBnZW5lcmF0aW9uIG91dGRhdGVkIGFscmVhZHk/ICBBcyBsb25nIGFzIHRoaXMgcmVzb3VyY2Ugc3RpY2tzCisJICogaW4gdGhlIGlkciwgaXQgd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gZm9yIGEgbmV3ZXIgZ2VuZXJhdGlvbiBvciBhdAorCSAqIHNodXRkb3duLgorCSAqLworCWlmIChjaGFubmVsID09IC1FQUdBSU4gJiYKKwkgICAgKHRvZG8gPT0gSVNPX1JFU19BTExPQyB8fCB0b2RvID09IElTT19SRVNfUkVBTExPQykpCisJCWdvdG8gb3V0OworCisJc3VjY2VzcyA9IGNoYW5uZWwgPj0gMCB8fCBiYW5kd2lkdGggPiAwOworCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwkvKgorCSAqIFRyYW5zaXQgZnJvbSBhbGxvY2F0aW9uIHRvIHJlYWxsb2NhdGlvbiwgZXhjZXB0IGlmIHRoZSBjbGllbnQKKwkgKiByZXF1ZXN0ZWQgZGVhbGxvY2F0aW9uIGluIHRoZSBtZWFudGltZS4KKwkgKi8KKwlpZiAoci0+dG9kbyA9PSBJU09fUkVTX0FMTE9DKQorCQlyLT50b2RvID0gSVNPX1JFU19SRUFMTE9DOworCS8qCisJICogQWxsb2NhdGlvbiBvciByZWFsbG9jYXRpb24gZmFpbHVyZT8gIFB1bGwgdGhpcyByZXNvdXJjZSBvdXQgb2YgdGhlCisJICogaWRyIGFuZCBwcmVwYXJlIGZvciBkZWxldGlvbiwgdW5sZXNzIHRoZSBjbGllbnQgaXMgc2h1dHRpbmcgZG93bi4KKwkgKi8KKwlpZiAoci0+dG9kbyA9PSBJU09fUkVTX1JFQUxMT0MgJiYgIXN1Y2Nlc3MgJiYKKwkgICAgIWNsaWVudC0+aW5fc2h1dGRvd24gJiYKKwkgICAgaWRyX2ZpbmQoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCByLT5yZXNvdXJjZS5oYW5kbGUpKSB7CisJCWlkcl9yZW1vdmUoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCByLT5yZXNvdXJjZS5oYW5kbGUpOworCQljbGllbnRfcHV0KGNsaWVudCk7CisJCWZyZWUgPSB0cnVlOworCX0KKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DICYmIGNoYW5uZWwgPj0gMCkKKwkJci0+Y2hhbm5lbHMgPSAxVUxMIDw8IGNoYW5uZWw7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX1JFQUxMT0MgJiYgc3VjY2VzcykKKwkJZ290byBvdXQ7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DIHx8IHRvZG8gPT0gSVNPX1JFU19BTExPQ19PTkNFKSB7CisJCWUgPSByLT5lX2FsbG9jOworCQlyLT5lX2FsbG9jID0gTlVMTDsKKwl9IGVsc2UgeworCQllID0gci0+ZV9kZWFsbG9jOworCQlyLT5lX2RlYWxsb2MgPSBOVUxMOworCX0KKwllLT5yZXNvdXJjZS5oYW5kbGUJPSByLT5yZXNvdXJjZS5oYW5kbGU7CisJZS0+cmVzb3VyY2UuY2hhbm5lbAk9IGNoYW5uZWw7CisJZS0+cmVzb3VyY2UuYmFuZHdpZHRoCT0gYmFuZHdpZHRoOworCisJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJCSAgICAmZS0+cmVzb3VyY2UsIHNpemVvZihlLT5yZXNvdXJjZSksIE5VTEwsIDApOworCisJaWYgKGZyZWUpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmci0+d29yayk7CisJCWtmcmVlKHItPmVfYWxsb2MpOworCQlrZnJlZShyLT5lX2RlYWxsb2MpOworCQlrZnJlZShyKTsKKwl9Cisgb3V0OgorCWNsaWVudF9wdXQoY2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgc2NoZWR1bGVfaXNvX3Jlc291cmNlKHN0cnVjdCBpc29fcmVzb3VyY2UgKnIpCit7CisJY2xpZW50X2dldChyLT5jbGllbnQpOworCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyLT53b3JrLCAwKSkKKwkJY2xpZW50X3B1dChyLT5jbGllbnQpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQoreworCXN0cnVjdCBpc29fcmVzb3VyY2UgKnIgPQorCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBpc29fcmVzb3VyY2UsIHJlc291cmNlKTsKKworCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJci0+dG9kbyA9IElTT19SRVNfREVBTExPQzsKKwlzY2hlZHVsZV9pc29fcmVzb3VyY2Uocik7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmxvY2spOworfQorCitzdGF0aWMgaW50IGluaXRfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0LCBpbnQgdG9kbykKK3sKKwlzdHJ1Y3QgaXNvX3Jlc291cmNlX2V2ZW50ICplMSwgKmUyOworCXN0cnVjdCBpc29fcmVzb3VyY2UgKnI7CisJaW50IHJldDsKKworCWlmICgocmVxdWVzdC0+Y2hhbm5lbHMgPT0gMCAmJiByZXF1ZXN0LT5iYW5kd2lkdGggPT0gMCkgfHwKKwkgICAgcmVxdWVzdC0+YmFuZHdpZHRoID4gQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMIHx8CisJICAgIHJlcXVlc3QtPmJhbmR3aWR0aCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJciAgPSBrbWFsbG9jKHNpemVvZigqciksIEdGUF9LRVJORUwpOworCWUxID0ga21hbGxvYyhzaXplb2YoKmUxKSwgR0ZQX0tFUk5FTCk7CisJZTIgPSBrbWFsbG9jKHNpemVvZigqZTIpLCBHRlBfS0VSTkVMKTsKKwlpZiAociA9PSBOVUxMIHx8IGUxID09IE5VTEwgfHwgZTIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJnItPndvcmssIGlzb19yZXNvdXJjZV93b3JrKTsKKwlyLT5jbGllbnQJPSBjbGllbnQ7CisJci0+dG9kbwkJPSB0b2RvOworCXItPmdlbmVyYXRpb24JPSAtMTsKKwlyLT5jaGFubmVscwk9IHJlcXVlc3QtPmNoYW5uZWxzOworCXItPmJhbmR3aWR0aAk9IHJlcXVlc3QtPmJhbmR3aWR0aDsKKwlyLT5lX2FsbG9jCT0gZTE7CisJci0+ZV9kZWFsbG9jCT0gZTI7CisKKwllMS0+cmVzb3VyY2UuY2xvc3VyZQk9IHJlcXVlc3QtPmNsb3N1cmU7CisJZTEtPnJlc291cmNlLnR5cGUJPSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQ7CisJZTItPnJlc291cmNlLmNsb3N1cmUJPSByZXF1ZXN0LT5jbG9zdXJlOworCWUyLT5yZXNvdXJjZS50eXBlCT0gRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQ7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DKSB7CisJCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2lzb19yZXNvdXJjZTsKKwkJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZyLT5yZXNvdXJjZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXItPnJlc291cmNlLnJlbGVhc2UgPSBOVUxMOworCQlyLT5yZXNvdXJjZS5oYW5kbGUgPSAtMTsKKwkJc2NoZWR1bGVfaXNvX3Jlc291cmNlKHIpOworCX0KKwlyZXF1ZXN0LT5oYW5kbGUgPSByLT5yZXNvdXJjZS5oYW5kbGU7CisKKwlyZXR1cm4gMDsKKyBmYWlsOgorCWtmcmVlKHIpOworCWtmcmVlKGUxKTsKKwlrZnJlZShlMik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgKnJlcXVlc3QgPSBidWZmZXI7CisKKwlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LCBJU09fUkVTX0FMTE9DKTsKK30KKworc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOworCisJcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAorCQkJCSAgICAgICByZWxlYXNlX2lzb19yZXNvdXJjZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0ID0gYnVmZmVyOworCisJcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdCwgSVNPX1JFU19BTExPQ19PTkNFKTsKK30KKworc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QsIElTT19SRVNfREVBTExPQ19PTkNFKTsKK30KKworLyoKKyAqIFJldHVybnMgYSBzcGVlZCBjb2RlOiAgTWF4aW11bSBzcGVlZCB0byBvciBmcm9tIHRoaXMgZGV2aWNlLAorICogbGltaXRlZCBieSB0aGUgZGV2aWNlJ3MgbGluayBzcGVlZCwgdGhlIGxvY2FsIG5vZGUncyBsaW5rIHNwZWVkLAorICogYW5kIGFsbCBQSFkgcG9ydCBzcGVlZHMgYmV0d2VlbiB0aGUgdHdvIGxpbmtzLgorICovCitzdGF0aWMgaW50IGlvY3RsX2dldF9zcGVlZChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gY2xpZW50LT5kZXZpY2UtPm1heF9zcGVlZDsKK30KKworc3RhdGljIGludCBpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXN3aXRjaCAocmVxdWVzdC0+dGNvZGUpIHsKKwljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNlY3VyaXR5IHBvbGljeTogT25seSBhbGxvdyBhY2Nlc3NlcyB0byBVbml0cyBTcGFjZS4gKi8KKwlpZiAocmVxdWVzdC0+b2Zmc2V0IDwgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ09ORklHX1JPTV9FTkQpCisJCXJldHVybiAtRUFDQ0VTOworCisJcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIExPQ0FMX0JVUyB8IDB4M2YsIFNDT0RFXzEwMCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfc2VuZF9zdHJlYW1fcGFja2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldCAqcCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgcmVxdWVzdDsKKwlpbnQgZGVzdDsKKworCWlmIChwLT5zcGVlZCA+IGNsaWVudC0+ZGV2aWNlLT5jYXJkLT5saW5rX3NwZWVkIHx8CisJICAgIHAtPmxlbmd0aCA+IDEwMjQgPDwgcC0+c3BlZWQpCisJCXJldHVybiAtRUlPOworCisJaWYgKHAtPnRhZyA+IDMgfHwgcC0+Y2hhbm5lbCA+IDYzIHx8IHAtPnN5ID4gMTUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVzdCA9IGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQocC0+dGFnLCBwLT5jaGFubmVsLCBwLT5zeSk7CisJcmVxdWVzdC50Y29kZQkJPSBUQ09ERV9TVFJFQU1fREFUQTsKKwlyZXF1ZXN0Lmxlbmd0aAkJPSBwLT5sZW5ndGg7CisJcmVxdWVzdC5jbG9zdXJlCQk9IHAtPmNsb3N1cmU7CisJcmVxdWVzdC5kYXRhCQk9IHAtPmRhdGE7CisJcmVxdWVzdC5nZW5lcmF0aW9uCT0gcC0+Z2VuZXJhdGlvbjsKKworCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCAmcmVxdWVzdCwgZGVzdCwgcC0+c3BlZWQpOworfQorCiBzdGF0aWMgaW50ICgqIGNvbnN0IGlvY3RsX2hhbmRsZXJzW10pKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKSA9IHsKIAlpb2N0bF9nZXRfaW5mbywKIAlpb2N0bF9zZW5kX3JlcXVlc3QsCkBAIC04ODUsMTMgKzEyODUsMjAgQEAKIAlpb2N0bF9zdGFydF9pc28sCiAJaW9jdGxfc3RvcF9pc28sCiAJaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyLAorCWlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZSwKKwlpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZSwKKwlpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZSwKKwlpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlLAorCWlvY3RsX2dldF9zcGVlZCwKKwlpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0LAorCWlvY3RsX3NlbmRfc3RyZWFtX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWRpc3BhdGNoX2lvY3RsKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgZGlzcGF0Y2hfaW9jdGwoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCWNoYXIgYnVmZmVyWzI1Nl07Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0OwogCiAJaWYgKF9JT0NfVFlQRShjbWQpICE9ICcjJyB8fAogCSAgICBfSU9DX05SKGNtZCkgPj0gQVJSQVlfU0laRShpb2N0bF9oYW5kbGVycykpCkBAIC05MDMsOSArMTMxMCw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlyZXR2YWwgPSBpb2N0bF9oYW5kbGVyc1tfSU9DX05SKGNtZCldKGNsaWVudCwgYnVmZmVyKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwlyZXQgPSBpb2N0bF9oYW5kbGVyc1tfSU9DX05SKGNtZCldKGNsaWVudCwgYnVmZmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKSB7CiAJCWlmIChfSU9DX1NJWkUoY21kKSA+IHNpemVvZihidWZmZXIpIHx8CkBAIC05MTMsMTIgKzEzMjAsMTEgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcKLWZ3X2RldmljZV9vcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBmd19kZXZpY2Vfb3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC05MjksOSArMTMzNSw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgbG9uZwotZndfZGV2aWNlX29wX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBmd19kZXZpY2Vfb3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIApAQCAtOTQ3LDcgKzEzNTIsNyBAQAogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBwYWdlX2NvdW50LCByZXR2YWw7CisJaW50IHBhZ2VfY291bnQsIHJldDsKIAogCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTk3Myw0OCArMTM3OCw1NyBAQAogCWVsc2UKIAkJZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCi0JcmV0dmFsID0gZndfaXNvX2J1ZmZlcl9pbml0KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQsCi0JCQkJICAgIHBhZ2VfY291bnQsIGRpcmVjdGlvbik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CisJcmV0ID0gZndfaXNvX2J1ZmZlcl9pbml0KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQsCisJCQkJIHBhZ2VfY291bnQsIGRpcmVjdGlvbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKLQlyZXR2YWwgPSBmd19pc29fYnVmZmVyX21hcCgmY2xpZW50LT5idWZmZXIsIHZtYSk7Ci0JaWYgKHJldHZhbCA8IDApCisJcmV0ID0gZndfaXNvX2J1ZmZlcl9tYXAoJmNsaWVudC0+YnVmZmVyLCB2bWEpOworCWlmIChyZXQgPCAwKQogCQlmd19pc29fYnVmZmVyX2Rlc3Ryb3koJmNsaWVudC0+YnVmZmVyLCBjbGllbnQtPmRldmljZS0+Y2FyZCk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2h1dGRvd25fcmVzb3VyY2UoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnIgPSBwOworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGRhdGE7CisKKwlyLT5yZWxlYXNlKGNsaWVudCwgcik7CisJY2xpZW50X3B1dChjbGllbnQpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZndfZGV2aWNlX29wX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBldmVudCAqZSwgKm5leHRfZTsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyLCAqbmV4dF9yOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY2xpZW50LT5idWZmZXIucGFnZXMpCi0JCWZ3X2lzb19idWZmZXJfZGVzdHJveSgmY2xpZW50LT5idWZmZXIsIGNsaWVudC0+ZGV2aWNlLT5jYXJkKTsKKwltdXRleF9sb2NrKCZjbGllbnQtPmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOworCWxpc3RfZGVsKCZjbGllbnQtPmxpbmspOworCW11dGV4X3VubG9jaygmY2xpZW50LT5kZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIAogCWlmIChjbGllbnQtPmlzb19jb250ZXh0KQogCQlmd19pc29fY29udGV4dF9kZXN0cm95KGNsaWVudC0+aXNvX2NvbnRleHQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHIsIG5leHRfciwgJmNsaWVudC0+cmVzb3VyY2VfbGlzdCwgbGluaykKLQkJci0+cmVsZWFzZShjbGllbnQsIHIpOworCWlmIChjbGllbnQtPmJ1ZmZlci5wYWdlcykKKwkJZndfaXNvX2J1ZmZlcl9kZXN0cm95KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQpOwogCi0JLyoKLQkgKiBGSVhNRTogV2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBhc3luYyB0YXNrbGV0cyB0byBzdG9wCi0JICogcnVubmluZyBiZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5LgotCSAqLworCS8qIEZyZWV6ZSBjbGllbnQtPnJlc291cmNlX2lkciBhbmQgY2xpZW50LT5ldmVudF9saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwljbGllbnQtPmluX3NodXRkb3duID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisKKwlpZHJfZm9yX2VhY2goJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBzaHV0ZG93bl9yZXNvdXJjZSwgY2xpZW50KTsKKwlpZHJfcmVtb3ZlX2FsbCgmY2xpZW50LT5yZXNvdXJjZV9pZHIpOworCWlkcl9kZXN0cm95KCZjbGllbnQtPnJlc291cmNlX2lkcik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dF9lLCAmY2xpZW50LT5ldmVudF9saXN0LCBsaW5rKQogCQlrZnJlZShlKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZjbGllbnQtPmxpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+ZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7Ci0KLQlmd19kZXZpY2VfcHV0KGNsaWVudC0+ZGV2aWNlKTsKLQlrZnJlZShjbGllbnQpOworCWNsaWVudF9wdXQoY2xpZW50KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKaW5kZXggYmY1M2FjYi4uYTQ3ZTIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCkBAIC0xOCwyMiArMTgsMjYgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKwogI2luY2x1ZGUgImZ3LWRldmljZS5oIgorI2luY2x1ZGUgImZ3LXRvcG9sb2d5LmgiCisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKIAogdm9pZCBmd19jc3JfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgdTMyICogcCkKIHsKQEAgLTEzMiw4ICsxMzYsNyBAQAogCQkJdmVuZG9yLCBtb2RlbCwgc3BlY2lmaWVyX2lkLCB2ZXJzaW9uKTsKIH0KIAotc3RhdGljIGludAotZndfdW5pdF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCitzdGF0aWMgaW50IGZ3X3VuaXRfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewogCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdChkZXYpOwogCWNoYXIgbW9kYWxpYXNbNjRdOwpAQCAtMTUyLDI3ICsxNTUsNiBAQAogfTsKIEVYUE9SVF9TWU1CT0woZndfYnVzX3R5cGUpOwogCi1zdGF0aWMgdm9pZCBmd19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogVGFrZSB0aGUgY2FyZCBsb2NrIHNvIHdlIGRvbid0IHNldCB0aGlzIHRvIE5VTEwgd2hpbGUgYQotCSAqIEZXX05PREVfVVBEQVRFRCBjYWxsYmFjayBpcyBiZWluZyBoYW5kbGVkIG9yIHdoaWxlIHRoZQotCSAqIGJ1cyBtYW5hZ2VyIHdvcmsgbG9va3MgYXQgdGhpcyBub2RlLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JZGV2aWNlLT5ub2RlLT5kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0KLQlmd19ub2RlX3B1dChkZXZpY2UtPm5vZGUpOwotCWtmcmVlKGRldmljZS0+Y29uZmlnX3JvbSk7Ci0Ja2ZyZWUoZGV2aWNlKTsKLQlmd19jYXJkX3B1dChjYXJkKTsKLX0KLQogaW50IGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQogewogCWludCBnZW5lcmF0aW9uID0gZGV2aWNlLT5nZW5lcmF0aW9uOwpAQCAtMTkxLDggKzE3Myw4IEBACiAJdTMyIGtleTsKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X2ltbWVkaWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19pbW1lZGlhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlICphdHRyID0KIAkJY29udGFpbmVyX29mKGRhdHRyLCBzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUsIGF0dHIpOwpAQCAtMjIzLDggKzIwNSw4IEBACiAjZGVmaW5lIElNTUVESUFURV9BVFRSKG5hbWUsIGtleSkJCQkJXAogCXsgX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfaW1tZWRpYXRlLCBOVUxMKSwga2V5IH0KIAotc3RhdGljIHNzaXplX3QKLXNob3dfdGV4dF9sZWFmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RleHRfbGVhZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQogCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7CkBAIC0yOTMsMTAgKzI3NSw5IEBACiAJVEVYVF9MRUFGX0FUVFIoaGFyZHdhcmVfdmVyc2lvbl9uYW1lLCBDU1JfSEFSRFdBUkVfVkVSU0lPTiksCiB9OwogCi1zdGF0aWMgdm9pZAotaW5pdF9md19hdHRyaWJ1dGVfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2LAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJzLAotCQkJc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCAqZ3JvdXApCitzdGF0aWMgdm9pZCBpbml0X2Z3X2F0dHJpYnV0ZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRycywKKwkJCQkgICAgc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCAqZ3JvdXApCiB7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHI7CiAJaW50IGksIGo7CkBAIC0zMTksOSArMzAwLDggQEAKIAlkZXYtPmdyb3VwcyA9IGdyb3VwLT5ncm91cHM7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1tb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CiAJaW50IGxlbmd0aDsKQEAgLTMzMiw5ICszMTIsOCBAQAogCXJldHVybiBsZW5ndGggKyAxOwogfQogCi1zdGF0aWMgc3NpemVfdAotcm9tX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgcm9tX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdChkZXYpOwpAQCAtMzQ5LDggKzMyOCw4IEBACiAJX19BVFRSX05VTEwsCiB9OwogCi1zdGF0aWMgc3NpemVfdAotY29uZmlnX3JvbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGNvbmZpZ19yb21fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2KTsKIAlzaXplX3QgbGVuZ3RoOwpAQCAtMzYzLDggKzM0Miw4IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGljIHNzaXplX3QKLWd1aWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBndWlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7CiAJaW50IHJldDsKQEAgLTM4Myw4ICszNjIsOCBAQAogCV9fQVRUUl9OVUxMLAogfTsKIAotc3RhdGljIGludAotcmVhZF9yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGluZGV4LCB1MzIgKmRhdGEpCitzdGF0aWMgaW50IHJlYWRfcm9tKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKKwkJICAgIGludCBnZW5lcmF0aW9uLCBpbnQgaW5kZXgsIHUzMiAqZGF0YSkKIHsKIAlpbnQgcmNvZGU7CiAKQEAgLTUzOSw3ICs1MTgsNyBAQAogCiAJa2ZyZWUob2xkX3JvbSk7CiAJcmV0ID0gMDsKLQlkZXZpY2UtPmNtYyA9IHJvbVsyXSAmIDEgPDwgMzA7CisJZGV2aWNlLT5jbWMgPSByb21bMl0gPj4gMzAgJiAxOwogIG91dDoKIAlrZnJlZShyb20pOwogCkBAIC02NzksMTEgKzY1OCw1MyBAQAogCWZ3X2RldmljZV9wdXQoZGV2aWNlKTsKIH0KIAorc3RhdGljIHZvaWQgZndfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYpOworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gZGV2aWNlLT5jYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIFRha2UgdGhlIGNhcmQgbG9jayBzbyB3ZSBkb24ndCBzZXQgdGhpcyB0byBOVUxMIHdoaWxlIGEKKwkgKiBGV19OT0RFX1VQREFURUQgY2FsbGJhY2sgaXMgYmVpbmcgaGFuZGxlZCBvciB3aGlsZSB0aGUKKwkgKiBidXMgbWFuYWdlciB3b3JrIGxvb2tzIGF0IHRoaXMgbm9kZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWRldmljZS0+bm9kZS0+ZGF0YSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCisJZndfbm9kZV9wdXQoZGV2aWNlLT5ub2RlKTsKKwlrZnJlZShkZXZpY2UtPmNvbmZpZ19yb20pOworCWtmcmVlKGRldmljZSk7CisJZndfY2FyZF9wdXQoY2FyZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgZndfZGV2aWNlX3R5cGUgPSB7Ci0JLnJlbGVhc2UJPSBmd19kZXZpY2VfcmVsZWFzZSwKKwkucmVsZWFzZSA9IGZ3X2RldmljZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHZvaWQgZndfZGV2aWNlX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCB1cGRhdGVfdW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CisJc3RydWN0IGZ3X2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCBmd19kcml2ZXIgKilkZXYtPmRyaXZlcjsKKworCWlmIChpc19md191bml0KGRldikgJiYgZHJpdmVyICE9IE5VTEwgJiYgZHJpdmVyLT51cGRhdGUgIT0gTlVMTCkgeworCQlkb3duKCZkZXYtPnNlbSk7CisJCWRyaXZlci0+dXBkYXRlKHVuaXQpOworCQl1cCgmZGV2LT5zZW0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmd19kZXZpY2VfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2RldmljZSwgd29yay53b3JrKTsKKworCWZ3X2RldmljZV9jZGV2X3VwZGF0ZShkZXZpY2UpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2aWNlLT5kZXZpY2UsIE5VTEwsIHVwZGF0ZV91bml0KTsKK30KIAogLyoKICAqIElmIGEgZGV2aWNlIHdhcyBwZW5kaW5nIGZvciBkZWxldGlvbiBiZWNhdXNlIGl0cyBub2RlIHdlbnQgYXdheSBidXQgaXRzCkBAIC03MzUsMTIgKzc1Niw1MCBAQAogCXJldHVybiBtYXRjaDsKIH0KIAorZW51bSB7IEJDX1VOS05PV04gPSAwLCBCQ19VTklNUExFTUVOVEVELCBCQ19JTVBMRU1FTlRFRCwgfTsKKwordm9pZCBmd19kZXZpY2Vfc2V0X2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CisJX19iZTMyIGRhdGE7CisJaW50IHJjb2RlOworCisJaWYgKCFjYXJkLT5icm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQpCisJCXJldHVybjsKKworCWlmIChkZXZpY2UtPmJjX2ltcGxlbWVudGVkID09IEJDX1VOS05PV04pIHsKKwkJcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QsCisJCQkJZGV2aWNlLT5ub2RlX2lkLCBnZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CUk9BRENBU1RfQ0hBTk5FTCwKKwkJCQkmZGF0YSwgNCk7CisJCXN3aXRjaCAocmNvZGUpIHsKKwkJY2FzZSBSQ09ERV9DT01QTEVURToKKwkJCWlmIChkYXRhICYgY3B1X3RvX2JlMzIoMSA8PCAzMSkpIHsKKwkJCQlkZXZpY2UtPmJjX2ltcGxlbWVudGVkID0gQkNfSU1QTEVNRU5URUQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCB0byBjYXNlIGFkZHJlc3MgZXJyb3IgKi8KKwkJY2FzZSBSQ09ERV9BRERSRVNTX0VSUk9SOgorCQkJZGV2aWNlLT5iY19pbXBsZW1lbnRlZCA9IEJDX1VOSU1QTEVNRU5URUQ7CisJCX0KKwl9CisKKwlpZiAoZGV2aWNlLT5iY19pbXBsZW1lbnRlZCA9PSBCQ19JTVBMRU1FTlRFRCkgeworCQlkYXRhID0gY3B1X3RvX2JlMzIoQlJPQURDQVNUX0NIQU5ORUxfSU5JVElBTCB8CisJCQkJICAgQlJPQURDQVNUX0NIQU5ORUxfVkFMSUQpOworCQlmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAorCQkJCWRldmljZS0+bm9kZV9pZCwgZ2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlJPQURDQVNUX0NIQU5ORUwsCisJCQkJJmRhdGEsIDQpOworCX0KK30KKwogc3RhdGljIHZvaWQgZndfZGV2aWNlX2luaXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOwogCXN0cnVjdCBkZXZpY2UgKnJldml2ZWRfZGV2OwotCWludCBtaW5vciwgZXJyOworCWludCBtaW5vciwgcmV0OwogCiAJLyoKIAkgKiBBbGwgZmFpbHVyZSBwYXRocyBoZXJlIHNldCBub2RlLT5kYXRhIHRvIE5VTEwsIHNvIHRoYXQgd2UKQEAgLTc3NiwxMiArODM1LDEyIEBACiAKIAlmd19kZXZpY2VfZ2V0KGRldmljZSk7CiAJZG93bl93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKLQllcnIgPSBpZHJfcHJlX2dldCgmZndfZGV2aWNlX2lkciwgR0ZQX0tFUk5FTCkgPworCXJldCA9IGlkcl9wcmVfZ2V0KCZmd19kZXZpY2VfaWRyLCBHRlBfS0VSTkVMKSA/CiAJICAgICAgaWRyX2dldF9uZXcoJmZ3X2RldmljZV9pZHIsIGRldmljZSwgJm1pbm9yKSA6CiAJICAgICAgLUVOT01FTTsKIAl1cF93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKIAotCWlmIChlcnIgPCAwKQorCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCiAJZGV2aWNlLT5kZXZpY2UuYnVzID0gJmZ3X2J1c190eXBlOwpAQCAtODI4LDYgKzg4Nyw4IEBACiAJCQkJICBkZXZpY2UtPmNvbmZpZ19yb21bM10sIGRldmljZS0+Y29uZmlnX3JvbVs0XSwKIAkJCQkgIDEgPDwgZGV2aWNlLT5tYXhfc3BlZWQpOwogCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA9IDA7CisKKwkJZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbChkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbik7CiAJfQogCiAJLyoKQEAgLTg1MSwyOSArOTEyLDYgQEAKIAlwdXRfZGV2aWNlKCZkZXZpY2UtPmRldmljZSk7CS8qIG91ciByZWZlcmVuY2UgKi8KIH0KIAotc3RhdGljIGludCB1cGRhdGVfdW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7Ci0Jc3RydWN0IGZ3X2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCBmd19kcml2ZXIgKilkZXYtPmRyaXZlcjsKLQotCWlmIChpc19md191bml0KGRldikgJiYgZHJpdmVyICE9IE5VTEwgJiYgZHJpdmVyLT51cGRhdGUgIT0gTlVMTCkgewotCQlkb3duKCZkZXYtPnNlbSk7Ci0JCWRyaXZlci0+dXBkYXRlKHVuaXQpOwotCQl1cCgmZGV2LT5zZW0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBmd19kZXZpY2VfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2RldmljZSwgd29yay53b3JrKTsKLQotCWZ3X2RldmljZV9jZGV2X3VwZGF0ZShkZXZpY2UpOwotCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2aWNlLT5kZXZpY2UsIE5VTEwsIHVwZGF0ZV91bml0KTsKLX0KLQogZW51bSB7CiAJUkVSRUFEX0JJQl9FUlJPUiwKIAlSRVJFQURfQklCX0dPTkUsCkBAIC04OTQsNyArOTMyLDcgQEAKIAkJaWYgKGkgPT0gMCAmJiBxID09IDApCiAJCQlyZXR1cm4gUkVSRUFEX0JJQl9HT05FOwogCi0JCWlmIChpID4gZGV2aWNlLT5jb25maWdfcm9tX2xlbmd0aCB8fCBxICE9IGRldmljZS0+Y29uZmlnX3JvbVtpXSkKKwkJaWYgKHEgIT0gZGV2aWNlLT5jb25maWdfcm9tW2ldKQogCQkJcmV0dXJuIFJFUkVBRF9CSUJfQ0hBTkdFRDsKIAl9CiAKQEAgLTEwMDQsNiArMTA0Miw3IEBACiAJCWRldmljZS0+bm9kZSA9IGZ3X25vZGVfZ2V0KG5vZGUpOwogCQlkZXZpY2UtPm5vZGVfaWQgPSBub2RlLT5ub2RlX2lkOwogCQlkZXZpY2UtPmdlbmVyYXRpb24gPSBjYXJkLT5nZW5lcmF0aW9uOworCQltdXRleF9pbml0KCZkZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIAkJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+Y2xpZW50X2xpc3QpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaAppbmRleCA4ZWY2ZWMyLi45NzU4ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmgKQEAgLTE5LDEwICsxOSwxNyBAQAogI2lmbmRlZiBfX2Z3X2RldmljZV9oCiAjZGVmaW5lIF9fZndfZGV2aWNlX2gKIAorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBlbnVtIGZ3X2RldmljZV9zdGF0ZSB7CkBAIC0zOCw2ICs0NSw5IEBACiAJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbMTFdOwogfTsKIAorc3RydWN0IGZ3X25vZGU7CitzdHJ1Y3QgZndfY2FyZDsKKwogLyoKICAqIE5vdGUsIGZ3X2RldmljZS5nZW5lcmF0aW9uIGFsd2F5cyBoYXMgdG8gYmUgcmVhZCBiZWZvcmUgZndfZGV2aWNlLm5vZGVfaWQuCiAgKiBVc2UgU01QIG1lbW9yeSBiYXJyaWVycyB0byBlbnN1cmUgdGhpcy4gIE90aGVyd2lzZSByZXF1ZXN0cyB3aWxsIGJlIHNlbnQKQEAgLTYxLDEzICs3MSwxOCBAQAogCWludCBub2RlX2lkOwogCWludCBnZW5lcmF0aW9uOwogCXVuc2lnbmVkIG1heF9zcGVlZDsKLQlib29sIGNtYzsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKKworCXN0cnVjdCBtdXRleCBjbGllbnRfbGlzdF9tdXRleDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsaWVudF9saXN0OworCiAJdTMyICpjb25maWdfcm9tOwogCXNpemVfdCBjb25maWdfcm9tX2xlbmd0aDsKIAlpbnQgY29uZmlnX3JvbV9yZXRyaWVzOworCXVuc2lnbmVkIGNtYzoxOworCXVuc2lnbmVkIGJjX2ltcGxlbWVudGVkOjI7CisKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCBhdHRyaWJ1dGVfZ3JvdXA7CiB9OwpAQCAtOTYsNiArMTExLDcgQEAKIAogc3RydWN0IGZ3X2RldmljZSAqZndfZGV2aWNlX2dldF9ieV9kZXZ0KGRldl90IGRldnQpOwogaW50IGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKTsKK3ZvaWQgZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKTsKIAogdm9pZCBmd19kZXZpY2VfY2Rldl91cGRhdGUoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKTsKIHZvaWQgZndfZGV2aWNlX2NkZXZfcmVtb3ZlKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CkBAIC0xNzYsOCArMTkyLDcgQEAKIAljb25zdCBzdHJ1Y3QgZndfZGV2aWNlX2lkICppZF90YWJsZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2RyaXZlciAqCi1md19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2RyaXZlciAqZndfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBmd19kcml2ZXIsIGRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYwppbmRleCBlMTRjMDNkLi4yYmFmMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctaXNvLmMKQEAgLTEsNSArMSw3IEBACiAvKgotICogSXNvY2hyb25vdXMgSU8gZnVuY3Rpb25hbGl0eQorICogSXNvY2hyb25vdXMgSS9PIGZ1bmN0aW9uYWxpdHk6CisgKiAgIC0gSXNvY2hyb25vdXMgRE1BIGNvbnRleHQgbWFuYWdlbWVudAorICogICAtIElzb2Nocm9ub3VzIGJ1cyByZXNvdXJjZSBtYW5hZ2VtZW50IChjaGFubmVscywgYmFuZHdpZHRoKSwgY2xpZW50IHNpZGUKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4KICAqCkBAIC0xOCwyMSArMjAsMjUgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAotI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKLSNpbmNsdWRlICJmdy1kZXZpY2UuaCIKKyNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgogCi1pbnQKLWZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJICAgaW50IHBhZ2VfY291bnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKy8qCisgKiBJc29jaHJvbm91cyBETUEgY29udGV4dCBtYW5hZ2VtZW50CisgKi8KKworaW50IGZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgIGludCBwYWdlX2NvdW50LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JaW50IGksIGosIHJldHZhbCA9IC1FTk9NRU07CisJaW50IGksIGo7CiAJZG1hX2FkZHJfdCBhZGRyZXNzOwogCiAJYnVmZmVyLT5wYWdlX2NvdW50ID0gcGFnZV9jb3VudDsKQEAgLTY5LDE5ICs3NSwyMSBAQAogCWtmcmVlKGJ1ZmZlci0+cGFnZXMpOwogIG91dDoKIAlidWZmZXItPnBhZ2VzID0gTlVMTDsKLQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIGludCBmd19pc29fYnVmZmVyX21hcChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOwotCWludCBpLCByZXR2YWw7CisJaW50IGksIGVycjsKIAogCXVhZGRyID0gdm1hLT52bV9zdGFydDsKIAlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLT5wYWdlX2NvdW50OyBpKyspIHsKLQkJcmV0dmFsID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCB1YWRkciwgYnVmZmVyLT5wYWdlc1tpXSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlyZXR1cm4gcmV0dmFsOworCQllcnIgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHVhZGRyLCBidWZmZXItPnBhZ2VzW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJdWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIApAQCAtMTA1LDE0ICsxMTMsMTQgQEAKIAlidWZmZXItPnBhZ2VzID0gTlVMTDsKIH0KIAotc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKLWZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHR5cGUsCi0JCSAgICAgIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKLQkJICAgICAgZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCitzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJaW50IHR5cGUsIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKKwkJZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHg7CiAKLQljdHggPSBjYXJkLT5kcml2ZXItPmFsbG9jYXRlX2lzb19jb250ZXh0KGNhcmQsIHR5cGUsIGhlYWRlcl9zaXplKTsKKwljdHggPSBjYXJkLT5kcml2ZXItPmFsbG9jYXRlX2lzb19jb250ZXh0KGNhcmQsCisJCQkJCQkgdHlwZSwgY2hhbm5lbCwgaGVhZGVyX3NpemUpOwogCWlmIChJU19FUlIoY3R4KSkKIAkJcmV0dXJuIGN0eDsKIApAQCAtMTM0LDI1ICsxNDIsMTg2IEBACiAJY2FyZC0+ZHJpdmVyLT5mcmVlX2lzb19jb250ZXh0KGN0eCk7CiB9CiAKLWludAotZndfaXNvX2NvbnRleHRfc3RhcnQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKQoraW50IGZ3X2lzb19jb250ZXh0X3N0YXJ0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkJIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKQogewogCXJldHVybiBjdHgtPmNhcmQtPmRyaXZlci0+c3RhcnRfaXNvKGN0eCwgY3ljbGUsIHN5bmMsIHRhZ3MpOwogfQogCi1pbnQKLWZ3X2lzb19jb250ZXh0X3F1ZXVlKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAotCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitpbnQgZndfaXNvX2NvbnRleHRfcXVldWUoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCisJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCSBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGN0eC0+Y2FyZDsKIAogCXJldHVybiBjYXJkLT5kcml2ZXItPnF1ZXVlX2lzbyhjdHgsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKIH0KIAotaW50Ci1md19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQoraW50IGZ3X2lzb19jb250ZXh0X3N0b3Aoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpCiB7CiAJcmV0dXJuIGN0eC0+Y2FyZC0+ZHJpdmVyLT5zdG9wX2lzbyhjdHgpOwogfQorCisvKgorICogSXNvY2hyb25vdXMgYnVzIHJlc291cmNlIG1hbmFnZW1lbnQgKGNoYW5uZWxzLCBiYW5kd2lkdGgpLCBjbGllbnQgc2lkZQorICovCisKK3N0YXRpYyBpbnQgbWFuYWdlX2JhbmR3aWR0aChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGlybV9pZCwgaW50IGdlbmVyYXRpb24sCisJCQkgICAgaW50IGJhbmR3aWR0aCwgYm9vbCBhbGxvY2F0ZSkKK3sKKwlfX2JlMzIgZGF0YVsyXTsKKwlpbnQgdHJ5LCBuZXcsIG9sZCA9IGFsbG9jYXRlID8gQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMIDogMDsKKworCS8qCisJICogT24gYSAxMzk0YSBJUk0gd2l0aCBsb3cgY29udGVudGlvbiwgdHJ5IDwgMSBpcyBlbm91Z2guCisJICogT24gYSAxMzk0LTE5OTUgSVJNLCB3ZSBuZWVkIGF0IGxlYXN0IHRyeSA8IDIuCisJICogTGV0J3MganVzdCBkbyB0cnkgPCA1LgorCSAqLworCWZvciAodHJ5ID0gMDsgdHJ5IDwgNTsgdHJ5KyspIHsKKwkJbmV3ID0gYWxsb2NhdGUgPyBvbGQgLSBiYW5kd2lkdGggOiBvbGQgKyBiYW5kd2lkdGg7CisJCWlmIChuZXcgPCAwIHx8IG5ldyA+IEJBTkRXSURUSF9BVkFJTEFCTEVfSU5JVElBTCkKKwkJCWJyZWFrOworCisJCWRhdGFbMF0gPSBjcHVfdG9fYmUzMihvbGQpOworCQlkYXRhWzFdID0gY3B1X3RvX2JlMzIobmV3KTsKKwkJc3dpdGNoIChmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCisJCQkJaXJtX2lkLCBnZW5lcmF0aW9uLCBTQ09ERV8xMDAsCisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQkFORFdJRFRIX0FWQUlMQUJMRSwKKwkJCQlkYXRhLCBzaXplb2YoZGF0YSkpKSB7CisJCWNhc2UgUkNPREVfR0VORVJBVElPTjoKKwkJCS8qIEEgZ2VuZXJhdGlvbiBjaGFuZ2UgZnJlZXMgYWxsIGJhbmR3aWR0aC4gKi8KKwkJCXJldHVybiBhbGxvY2F0ZSA/IC1FQUdBSU4gOiBiYW5kd2lkdGg7CisKKwkJY2FzZSBSQ09ERV9DT01QTEVURToKKwkJCWlmIChiZTMyX3RvX2NwdXAoZGF0YSkgPT0gb2xkKQorCQkJCXJldHVybiBiYW5kd2lkdGg7CisKKwkJCW9sZCA9IGJlMzJfdG9fY3B1cChkYXRhKTsKKwkJCS8qIEZhbGwgdGhyb3VnaC4gKi8KKwkJfQorCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IG1hbmFnZV9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgaXJtX2lkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSAgdTMyIGNoYW5uZWxzX21hc2ssIHU2NCBvZmZzZXQsIGJvb2wgYWxsb2NhdGUpCit7CisJX19iZTMyIGRhdGFbMl0sIGMsIGFsbCwgb2xkOworCWludCBpLCByZXRyeSA9IDU7CisKKwlvbGQgPSBhbGwgPSBhbGxvY2F0ZSA/IGNwdV90b19iZTMyKH4wKSA6IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoIShjaGFubmVsc19tYXNrICYgMSA8PCBpKSkKKwkJCWNvbnRpbnVlOworCisJCWMgPSBjcHVfdG9fYmUzMigxIDw8ICgzMSAtIGkpKTsKKwkJaWYgKChvbGQgJiBjKSAhPSAoYWxsICYgYykpCisJCQljb250aW51ZTsKKworCQlkYXRhWzBdID0gb2xkOworCQlkYXRhWzFdID0gb2xkIF4gYzsKKwkJc3dpdGNoIChmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCisJCQkJCSAgIGlybV9pZCwgZ2VuZXJhdGlvbiwgU0NPREVfMTAwLAorCQkJCQkgICBvZmZzZXQsIGRhdGEsIHNpemVvZihkYXRhKSkpIHsKKwkJY2FzZSBSQ09ERV9HRU5FUkFUSU9OOgorCQkJLyogQSBnZW5lcmF0aW9uIGNoYW5nZSBmcmVlcyBhbGwgY2hhbm5lbHMuICovCisJCQlyZXR1cm4gYWxsb2NhdGUgPyAtRUFHQUlOIDogaTsKKworCQljYXNlIFJDT0RFX0NPTVBMRVRFOgorCQkJaWYgKGRhdGFbMF0gPT0gb2xkKQorCQkJCXJldHVybiBpOworCisJCQlvbGQgPSBkYXRhWzBdOworCisJCQkvKiBJcyB0aGUgSVJNIDEzOTRhLTIwMDAgY29tcGxpYW50PyAqLworCQkJaWYgKChkYXRhWzBdICYgYykgPT0gKGRhdGFbMV0gJiBjKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogMTM5NC0xOTk1IElSTSwgZmFsbCB0aHJvdWdoIHRvIHJldHJ5LiAqLworCQlkZWZhdWx0OgorCQkJaWYgKHJldHJ5LS0pCisJCQkJaS0tOworCQl9CisJfQorCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGVfY2hhbm5lbChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGlybV9pZCwKKwkJCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IGNoYW5uZWwpCit7CisJdTMyIG1hc2s7CisJdTY0IG9mZnNldDsKKworCW1hc2sgPSBjaGFubmVsIDwgMzIgPyAxIDw8IGNoYW5uZWwgOiAxIDw8IChjaGFubmVsIC0gMzIpOworCW9mZnNldCA9IGNoYW5uZWwgPCAzMiA/IENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9ISSA6CisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0xPOworCisJbWFuYWdlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBtYXNrLCBvZmZzZXQsIGZhbHNlKTsKK30KKworLyoqCisgKiBmd19pc29fcmVzb3VyY2VfbWFuYWdlIC0gQWxsb2NhdGUgb3IgZGVhbGxvY2F0ZSBhIGNoYW5uZWwgYW5kL29yIGJhbmR3aWR0aAorICoKKyAqIEluIHBhcmFtZXRlcnM6IGNhcmQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX21hc2ssIGJhbmR3aWR0aCwgYWxsb2NhdGUKKyAqIE91dCBwYXJhbWV0ZXJzOiBjaGFubmVsLCBiYW5kd2lkdGgKKyAqIFRoaXMgZnVuY3Rpb24gYmxvY2tzIChzbGVlcHMpIGR1cmluZyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIElSTS4KKyAqCisgKiBBbGxvY2F0ZXMgb3IgZGVhbGxvY2F0ZXMgYXQgbW9zdCBvbmUgY2hhbm5lbCBvdXQgb2YgY2hhbm5lbHNfbWFzay4KKyAqIGNoYW5uZWxzX21hc2sgaXMgYSBiaXRmaWVsZCB3aXRoIE1TQiBmb3IgY2hhbm5lbCA2MyBhbmQgTFNCIGZvciBjaGFubmVsIDAuCisgKiAoTm90ZSwgdGhlIElSTSdzIENIQU5ORUxTX0FWQUlMQUJMRSBpcyBhIGJpZy1lbmRpYW4gYml0ZmllbGQgd2l0aCBNU0IgZm9yCisgKiBjaGFubmVsIDAgYW5kIExTQiBmb3IgY2hhbm5lbCA2My4pCisgKiBBbGxvY2F0ZXMgb3IgZGVhbGxvY2F0ZXMgYXMgbWFueSBiYW5kd2lkdGggYWxsb2NhdGlvbiB1bml0cyBhcyBzcGVjaWZpZWQuCisgKgorICogUmV0dXJucyBjaGFubmVsIDwgMCBpZiBubyBjaGFubmVsIHdhcyBhbGxvY2F0ZWQgb3IgZGVhbGxvY2F0ZWQuCisgKiBSZXR1cm5zIGJhbmR3aWR0aCA9IDAgaWYgbm8gYmFuZHdpZHRoIHdhcyBhbGxvY2F0ZWQgb3IgZGVhbGxvY2F0ZWQuCisgKgorICogSWYgZ2VuZXJhdGlvbiBpcyBzdGFsZSwgZGVhbGxvY2F0aW9ucyBzdWNjZWVkIGJ1dCBhbGxvY2F0aW9ucyBmYWlsIHdpdGgKKyAqIGNoYW5uZWwgPSAtRUFHQUlOLgorICoKKyAqIElmIGNoYW5uZWwgYWxsb2NhdGlvbiBmYWlscywgbm8gYmFuZHdpZHRoIHdpbGwgYmUgYWxsb2NhdGVkIGVpdGhlci4KKyAqIElmIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZhaWxzLCBubyBjaGFubmVsIHdpbGwgYmUgYWxsb2NhdGVkIGVpdGhlci4KKyAqIEJ1dCBkZWFsbG9jYXRpb25zIG9mIGNoYW5uZWwgYW5kIGJhbmR3aWR0aCBhcmUgdHJpZWQgaW5kZXBlbmRlbnRseQorICogb2YgZWFjaCBvdGhlcidzIHN1Y2Nlc3MuCisgKi8KK3ZvaWQgZndfaXNvX3Jlc291cmNlX21hbmFnZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGdlbmVyYXRpb24sCisJCQkgICAgdTY0IGNoYW5uZWxzX21hc2ssIGludCAqY2hhbm5lbCwgaW50ICpiYW5kd2lkdGgsCisJCQkgICAgYm9vbCBhbGxvY2F0ZSkKK3sKKwl1MzIgY2hhbm5lbHNfaGkgPSBjaGFubmVsc19tYXNrOwkvKiBjaGFubmVscyAzMS4uLjAgKi8KKwl1MzIgY2hhbm5lbHNfbG8gPSBjaGFubmVsc19tYXNrID4+IDMyOwkvKiBjaGFubmVscyA2My4uLjMyICovCisJaW50IGlybV9pZCwgcmV0LCBjID0gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCWlybV9pZCA9IGNhcmQtPmlybV9ub2RlLT5ub2RlX2lkOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CisKKwlpZiAoY2hhbm5lbHNfaGkpCisJCWMgPSBtYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX2hpLAorCQkgICAgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0hJLCBhbGxvY2F0ZSk7CisJaWYgKGNoYW5uZWxzX2xvICYmIGMgPCAwKSB7CisJCWMgPSBtYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX2xvLAorCQkgICAgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0xPLCBhbGxvY2F0ZSk7CisJCWlmIChjID49IDApCisJCQljICs9IDMyOworCX0KKwkqY2hhbm5lbCA9IGM7CisKKwlpZiAoYWxsb2NhdGUgJiYgY2hhbm5lbHNfbWFzayAhPSAwICYmIGMgPCAwKQorCQkqYmFuZHdpZHRoID0gMDsKKworCWlmICgqYmFuZHdpZHRoID09IDApCisJCXJldHVybjsKKworCXJldCA9IG1hbmFnZV9iYW5kd2lkdGgoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCAqYmFuZHdpZHRoLCBhbGxvY2F0ZSk7CisJaWYgKHJldCA8IDApCisJCSpiYW5kd2lkdGggPSAwOworCisJaWYgKGFsbG9jYXRlICYmIHJldCA8IDAgJiYgYyA+PSAwKSB7CisJCWRlYWxsb2NhdGVfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGMpOworCQkqY2hhbm5lbCA9IHJldDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LW9oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCmluZGV4IDZkMTk4MjguLjExODBkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCkBAIC0yMDUsNiArMjA1LDcgQEAKIAogCXUzMiBpdF9jb250ZXh0X21hc2s7CiAJc3RydWN0IGlzb19jb250ZXh0ICppdF9jb250ZXh0X2xpc3Q7CisJdTY0IGlyX2NvbnRleHRfY2hhbm5lbHM7CiAJdTMyIGlyX2NvbnRleHRfbWFzazsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmlyX2NvbnRleHRfbGlzdDsKIH07CkBAIC00NDEsOSArNDQyLDggQEAKIAlyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9WZXJzaW9uKTsKIH0KIAotc3RhdGljIGludAotb2hjaV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHIsCi0JCSAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQorc3RhdGljIGludCBvaGNpX3VwZGF0ZV9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkciwKKwkJCSAgICAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAl1MzIgdmFsLCBvbGQ7CkBAIC02NTgsOCArNjU4LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWFyX2NvbnRleHRfaW5pdChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfb2hjaSAqb2hjaSwgdTMyIHJlZ3MpCitzdGF0aWMgaW50IGFyX2NvbnRleHRfaW5pdChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LAorCQkJICAgc3RydWN0IGZ3X29oY2kgKm9oY2ksIHUzMiByZWdzKQogewogCXN0cnVjdCBhcl9idWZmZXIgYWI7CiAKQEAgLTY5MCw4ICs2OTAsNyBAQAogCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOwogfQogCi1zdGF0aWMgc3RydWN0IGRlc2NyaXB0b3IgKgotZmluZF9icmFuY2hfZGVzY3JpcHRvcihzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgaW50IHopCitzdGF0aWMgc3RydWN0IGRlc2NyaXB0b3IgKmZpbmRfYnJhbmNoX2Rlc2NyaXB0b3Ioc3RydWN0IGRlc2NyaXB0b3IgKmQsIGludCB6KQogewogCWludCBiLCBrZXk7CiAKQEAgLTc1MSw4ICs3NTAsNyBAQAogICogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgZnJlZSBidWZmZXJzIGZvciB0aGlzCiAgKiBjb250ZXh0LiAgTXVzdCBiZSBjYWxsZWQgd2l0aCBvaGNpLT5sb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyBpbnQKLWNvbnRleHRfYWRkX2J1ZmZlcihzdHJ1Y3QgY29udGV4dCAqY3R4KQorc3RhdGljIGludCBjb250ZXh0X2FkZF9idWZmZXIoc3RydWN0IGNvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl9idWZmZXIgKmRlc2M7CiAJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihidXNfYWRkcik7CkBAIC03ODEsOSArNzc5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY29udGV4dF9pbml0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLAotCSAgICAgdTMyIHJlZ3MsIGRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3N0YXRpYyBpbnQgY29udGV4dF9pbml0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLAorCQkJdTMyIHJlZ3MsIGRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjaykKIHsKIAljdHgtPm9oY2kgPSBvaGNpOwogCWN0eC0+cmVncyA9IHJlZ3M7CkBAIC04MTQsOCArODExLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWNvbnRleHRfcmVsZWFzZShzdHJ1Y3QgY29udGV4dCAqY3R4KQorc3RhdGljIHZvaWQgY29udGV4dF9yZWxlYXNlKHN0cnVjdCBjb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSAmY3R4LT5vaGNpLT5jYXJkOwogCXN0cnVjdCBkZXNjcmlwdG9yX2J1ZmZlciAqZGVzYywgKnRtcDsKQEAgLTgyNyw4ICs4MjMsOCBAQAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG9oY2ktPmxvY2sgaGVsZCAqLwotc3RhdGljIHN0cnVjdCBkZXNjcmlwdG9yICoKLWNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKHN0cnVjdCBjb250ZXh0ICpjdHgsIGludCB6LCBkbWFfYWRkcl90ICpkX2J1cykKK3N0YXRpYyBzdHJ1Y3QgZGVzY3JpcHRvciAqY29udGV4dF9nZXRfZGVzY3JpcHRvcnMoc3RydWN0IGNvbnRleHQgKmN0eCwKKwkJCQkJCSAgaW50IHosIGRtYV9hZGRyX3QgKmRfYnVzKQogewogCXN0cnVjdCBkZXNjcmlwdG9yICpkID0gTlVMTDsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl9idWZmZXIgKmRlc2MgPSBjdHgtPmJ1ZmZlcl90YWlsOwpAQCAtOTEyLDggKzkwOCw4IEBACiAgKiBNdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCB0aGUgb2NoaS0+bG9jayBoZWxkIHRvIGVuc3VyZSBwcm9wZXIKICAqIGdlbmVyYXRpb24gaGFuZGxpbmcgYW5kIGxvY2tpbmcgYXJvdW5kIHBhY2tldCBxdWV1ZSBtYW5pcHVsYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQKLWF0X2NvbnRleHRfcXVldWVfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyBpbnQgYXRfY29udGV4dF9xdWV1ZV9wYWNrZXQoc3RydWN0IGNvbnRleHQgKmN0eCwKKwkJCQkgICBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBjdHgtPm9oY2k7CiAJZG1hX2FkZHJfdCBkX2J1cywgdW5pbml0aWFsaXplZF92YXIocGF5bG9hZF9idXMpOwpAQCAtOTQwLDcgKzkzNiw5IEBACiAJICovCiAKIAloZWFkZXIgPSAoX19sZTMyICopICZkWzFdOwotCWlmIChwYWNrZXQtPmhlYWRlcl9sZW5ndGggPiA4KSB7CisJc3dpdGNoIChwYWNrZXQtPmhlYWRlcl9sZW5ndGgpIHsKKwljYXNlIDE2OgorCWNhc2UgMTI6CiAJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZikgfAogCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOwogCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMigocGFja2V0LT5oZWFkZXJbMV0gJiAweGZmZmYpIHwKQEAgLTk1NCwxMiArOTUyLDI3IEBACiAJCQloZWFkZXJbM10gPSAoX19mb3JjZSBfX2xlMzIpIHBhY2tldC0+aGVhZGVyWzNdOwogCiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYocGFja2V0LT5oZWFkZXJfbGVuZ3RoKTsKLQl9IGVsc2UgeworCQlicmVhazsKKworCWNhc2UgODoKIAkJaGVhZGVyWzBdID0gY3B1X3RvX2xlMzIoKE9IQ0kxMzk0X3BoeV90Y29kZSA8PCA0KSB8CiAJCQkJCShwYWNrZXQtPnNwZWVkIDw8IDE2KSk7CiAJCWhlYWRlclsxXSA9IGNwdV90b19sZTMyKHBhY2tldC0+aGVhZGVyWzBdKTsKIAkJaGVhZGVyWzJdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMV0pOwogCQlkWzBdLnJlcV9jb3VudCA9IGNwdV90b19sZTE2KDEyKTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZikgfAorCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOworCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZjAwMDApOworCQlkWzBdLnJlcV9jb3VudCA9IGNwdV90b19sZTE2KDgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIEJVRygpOyAqLworCQlwYWNrZXQtPmFjayA9IFJDT0RFX1NFTkRfRVJST1I7CisJCXJldHVybiAtMTsKIAl9CiAKIAlkcml2ZXJfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKikgJmRbM107CkBAIC0xMDk1LDggKzExMDgsOCBAQAogI2RlZmluZSBIRUFERVJfR0VUX0RBVEFfTEVOR1RIKHEpCSgoKHEpID4+IDE2KSAmIDB4ZmZmZikKICNkZWZpbmUgSEVBREVSX0dFVF9FWFRFTkRFRF9UQ09ERShxKQkoKChxKSA+PiAwKSAmIDB4ZmZmZikKIAotc3RhdGljIHZvaWQKLWhhbmRsZV9sb2NhbF9yb20oc3RydWN0IGZ3X29oY2kgKm9oY2ksIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKK3N0YXRpYyB2b2lkIGhhbmRsZV9sb2NhbF9yb20oc3RydWN0IGZ3X29oY2kgKm9oY2ksCisJCQkgICAgIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKIHsKIAlzdHJ1Y3QgZndfcGFja2V0IHJlc3BvbnNlOwogCWludCB0Y29kZSwgbGVuZ3RoLCBpOwpAQCAtMTEyMiw4ICsxMTM1LDggQEAKIAlmd19jb3JlX2hhbmRsZV9yZXNwb25zZSgmb2hjaS0+Y2FyZCwgJnJlc3BvbnNlKTsKIH0KIAotc3RhdGljIHZvaWQKLWhhbmRsZV9sb2NhbF9sb2NrKHN0cnVjdCBmd19vaGNpICpvaGNpLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIHUzMiBjc3IpCitzdGF0aWMgdm9pZCBoYW5kbGVfbG9jYWxfbG9jayhzdHJ1Y3QgZndfb2hjaSAqb2hjaSwKKwkJCSAgICAgIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKIHsKIAlzdHJ1Y3QgZndfcGFja2V0IHJlc3BvbnNlOwogCWludCB0Y29kZSwgbGVuZ3RoLCBleHRfdGNvZGUsIHNlbDsKQEAgLTExNjQsOCArMTE3Nyw3IEBACiAJZndfY29yZV9oYW5kbGVfcmVzcG9uc2UoJm9oY2ktPmNhcmQsICZyZXNwb25zZSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1oYW5kbGVfbG9jYWxfcmVxdWVzdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCitzdGF0aWMgdm9pZCBoYW5kbGVfbG9jYWxfcmVxdWVzdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJdTY0IG9mZnNldDsKIAl1MzIgY3NyOwpAQCAtMTIwNSwxMSArMTIxNywxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLWF0X2NvbnRleHRfdHJhbnNtaXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQorc3RhdGljIHZvaWQgYXRfY29udGV4dF90cmFuc21pdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0dmFsOworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5vaGNpLT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjAsMTAgKzEyMzEsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJldHZhbCA9IGF0X2NvbnRleHRfcXVldWVfcGFja2V0KGN0eCwgcGFja2V0KTsKKwlyZXQgPSBhdF9jb250ZXh0X3F1ZXVlX3BhY2tldChjdHgsIHBhY2tldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5vaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocmV0dmFsIDwgMCkKKwlpZiAocmV0IDwgMCkKIAkJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZjdHgtPm9oY2ktPmNhcmQsIHBhY2tldC0+YWNrKTsKIAogfQpAQCAtMTU5MCwxMiArMTYwMSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX3NldF9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgaW50IG9oY2lfc2V0X2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkgICAgICAgdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldHZhbCA9IC1FQlVTWTsKKwlpbnQgcmV0ID0gLUVCVVNZOwogCV9fYmUzMiAqbmV4dF9jb25maWdfcm9tOwogCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIobmV4dF9jb25maWdfcm9tX2J1cyk7CiAKQEAgLTE2NDksNyArMTY2MCw3IEBACiAKIAkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwKIAkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7Ci0JCXJldHZhbCA9IDA7CisJCXJldCA9IDA7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTY2MSwxMyArMTY3MiwxMyBAQAogCSAqIGNvbnRyb2xsZXIgY291bGQgbmVlZCB0byBhY2Nlc3MgaXQgYmVmb3JlIHRoZSBidXMgcmVzZXQKIAkgKiB0YWtlcyBlZmZlY3QuCiAJICovCi0JaWYgKHJldHZhbCA9PSAwKQorCWlmIChyZXQgPT0gMCkKIAkJZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIDEpOwogCWVsc2UKIAkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKIAkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9oY2lfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCkBAIC0xNjg5LDcgKzE3MDAsNyBAQAogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAlzdHJ1Y3QgY29udGV4dCAqY3R4ID0gJm9oY2ktPmF0X3JlcXVlc3RfY3R4OwogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGEgPSBwYWNrZXQtPmRyaXZlcl9kYXRhOwotCWludCByZXR2YWwgPSAtRU5PRU5UOworCWludCByZXQgPSAtRU5PRU5UOwogCiAJdGFza2xldF9kaXNhYmxlKCZjdHgtPnRhc2tsZXQpOwogCkBAIC0xNzA0LDIzICsxNzE1LDIyIEBACiAJZHJpdmVyX2RhdGEtPnBhY2tldCA9IE5VTEw7CiAJcGFja2V0LT5hY2sgPSBSQ09ERV9DQU5DRUxMRUQ7CiAJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZvaGNpLT5jYXJkLCBwYWNrZXQtPmFjayk7Ci0JcmV0dmFsID0gMDsKLQorCXJldCA9IDA7CiAgb3V0OgogCXRhc2tsZXRfZW5hYmxlKCZjdHgtPnRhc2tsZXQpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCBvaGNpX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCiB7CiAjaWZkZWYgQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQQogCXJldHVybiAwOwogI2Vsc2UKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbiwgcmV0dmFsID0gMDsKKwlpbnQgbiwgcmV0ID0gMDsKIAogCS8qCiAJICogRklYTUU6ICBNYWtlIHN1cmUgdGhpcyBiaXRtYXNrIGlzIGNsZWFyZWQgd2hlbiB3ZSBjbGVhciB0aGUgYnVzUmVzZXQKQEAgLTE3MzAsNyArMTc0MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmIChvaGNpLT5nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pIHsKLQkJcmV0dmFsID0gLUVTVEFMRTsKKwkJcmV0ID0gLUVTVEFMRTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzQ4LDEyICsxNzU4LDEyIEBACiAJZmx1c2hfd3JpdGVzKG9oY2kpOwogIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldHZhbDsKKworCXJldHVybiByZXQ7CiAjZW5kaWYgLyogQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQSAqLwogfQogCi1zdGF0aWMgdTY0Ci1vaGNpX2dldF9idXNfdGltZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3N0YXRpYyB1NjQgb2hjaV9nZXRfYnVzX3RpbWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOwogCXUzMiBjeWNsZV90aW1lOwpAQCAtMTc2NSw2ICsxNzc1LDI4IEBACiAJcmV0dXJuIGJ1c190aW1lOwogfQogCitzdGF0aWMgdm9pZCBjb3B5X2lzb19oZWFkZXJzKHN0cnVjdCBpc29fY29udGV4dCAqY3R4LCB2b2lkICpwKQoreworCWludCBpID0gY3R4LT5oZWFkZXJfbGVuZ3RoOworCisJaWYgKGkgKyBjdHgtPmJhc2UuaGVhZGVyX3NpemUgPiBQQUdFX1NJWkUpCisJCXJldHVybjsKKworCS8qCisJICogVGhlIGlzbyBoZWFkZXIgaXMgYnl0ZXN3YXBwZWQgdG8gbGl0dGxlIGVuZGlhbiBieQorCSAqIHRoZSBjb250cm9sbGVyLCBidXQgdGhlIHJlbWFpbmluZyBoZWFkZXIgcXVhZGxldHMKKwkgKiBhcmUgYmlnIGVuZGlhbi4gIFdlIHdhbnQgdG8gcHJlc2VudCBhbGwgdGhlIGhlYWRlcnMKKwkgKiBhcyBiaWcgZW5kaWFuLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlIGZpcnN0IHF1YWRsZXQuCisJICovCisJaWYgKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA+IDApCisJCSoodTMyICopIChjdHgtPmhlYWRlciArIGkpID0gX19zd2FiMzIoKih1MzIgKikgKHAgKyA0KSk7CisJaWYgKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA+IDQpCisJCSoodTMyICopIChjdHgtPmhlYWRlciArIGkgKyA0KSA9IF9fc3dhYjMyKCoodTMyICopIHApOworCWlmIChjdHgtPmJhc2UuaGVhZGVyX3NpemUgPiA4KQorCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgOCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDgpOworCWN0eC0+aGVhZGVyX2xlbmd0aCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX2lyX2R1YWxidWZmZXJfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAogCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKIAkJCQkgICAgICAgc3RydWN0IGRlc2NyaXB0b3IgKmxhc3QpCkBAIC0xNzc1LDcgKzE4MDcsNiBAQAogCV9fbGUzMiAqaXJfaGVhZGVyOwogCXNpemVfdCBoZWFkZXJfbGVuZ3RoOwogCXZvaWQgKnAsICplbmQ7Ci0JaW50IGk7CiAKIAlpZiAoZGItPmZpcnN0X3Jlc19jb3VudCAhPSAwICYmIGRiLT5zZWNvbmRfcmVzX2NvdW50ICE9IDApIHsKIAkJaWYgKGN0eC0+ZXhjZXNzX2J5dGVzIDw9IGxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVxX2NvdW50KSkgewpAQCAtMTc4OCwyNSArMTgxOSwxNCBAQAogCWhlYWRlcl9sZW5ndGggPSBsZTE2X3RvX2NwdShkYi0+Zmlyc3RfcmVxX2NvdW50KSAtCiAJCWxlMTZfdG9fY3B1KGRiLT5maXJzdF9yZXNfY291bnQpOwogCi0JaSA9IGN0eC0+aGVhZGVyX2xlbmd0aDsKIAlwID0gZGIgKyAxOwogCWVuZCA9IHAgKyBoZWFkZXJfbGVuZ3RoOwotCXdoaWxlIChwIDwgZW5kICYmIGkgKyBjdHgtPmJhc2UuaGVhZGVyX3NpemUgPD0gUEFHRV9TSVpFKSB7Ci0JCS8qCi0JCSAqIFRoZSBpc28gaGVhZGVyIGlzIGJ5dGVzd2FwcGVkIHRvIGxpdHRsZSBlbmRpYW4gYnkKLQkJICogdGhlIGNvbnRyb2xsZXIsIGJ1dCB0aGUgcmVtYWluaW5nIGhlYWRlciBxdWFkbGV0cwotCQkgKiBhcmUgYmlnIGVuZGlhbi4gIFdlIHdhbnQgdG8gcHJlc2VudCBhbGwgdGhlIGhlYWRlcnMKLQkJICogYXMgYmlnIGVuZGlhbiwgc28gd2UgaGF2ZSB0byBzd2FwIHRoZSBmaXJzdAotCQkgKiBxdWFkbGV0LgotCQkgKi8KLQkJKih1MzIgKikgKGN0eC0+aGVhZGVyICsgaSkgPSBfX3N3YWIzMigqKHUzMiAqKSAocCArIDQpKTsKLQkJbWVtY3B5KGN0eC0+aGVhZGVyICsgaSArIDQsIHAgKyA4LCBjdHgtPmJhc2UuaGVhZGVyX3NpemUgLSA0KTsKLQkJaSArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7CisJd2hpbGUgKHAgPCBlbmQpIHsKKwkJY29weV9pc29faGVhZGVycyhjdHgsIHApOwogCQljdHgtPmV4Y2Vzc19ieXRlcyArPQogCQkJKGxlMzJfdG9fY3B1KCooX19sZTMyICopKHAgKyA0KSkgPj4gMTYpICYgMHhmZmZmOwotCQlwICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSArIDQ7CisJCXAgKz0gbWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KTsKIAl9Ci0JY3R4LT5oZWFkZXJfbGVuZ3RoID0gaTsKIAogCWN0eC0+ZXhjZXNzX2J5dGVzIC09IGxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVxX2NvdW50KSAtCiAJCWxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVzX2NvdW50KTsKQEAgLTE4MzIsNyArMTg1Miw2IEBACiAJc3RydWN0IGRlc2NyaXB0b3IgKnBkOwogCV9fbGUzMiAqaXJfaGVhZGVyOwogCXZvaWQgKnA7Ci0JaW50IGk7CiAKIAlmb3IgKHBkID0gZDsgcGQgPD0gbGFzdDsgcGQrKykgewogCQlpZiAocGQtPnRyYW5zZmVyX3N0YXR1cykKQEAgLTE4NDIsMjEgKzE4NjEsOCBAQAogCQkvKiBEZXNjcmlwdG9yKHMpIG5vdCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24gKi8KIAkJcmV0dXJuIDA7CiAKLQlpICAgPSBjdHgtPmhlYWRlcl9sZW5ndGg7Ci0JcCAgID0gbGFzdCArIDE7Ci0KLQlpZiAoY3R4LT5iYXNlLmhlYWRlcl9zaXplID4gMCAmJgotCQkJaSArIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA8PSBQQUdFX1NJWkUpIHsKLQkJLyoKLQkJICogVGhlIGlzbyBoZWFkZXIgaXMgYnl0ZXN3YXBwZWQgdG8gbGl0dGxlIGVuZGlhbiBieQotCQkgKiB0aGUgY29udHJvbGxlciwgYnV0IHRoZSByZW1haW5pbmcgaGVhZGVyIHF1YWRsZXRzCi0JCSAqIGFyZSBiaWcgZW5kaWFuLiAgV2Ugd2FudCB0byBwcmVzZW50IGFsbCB0aGUgaGVhZGVycwotCQkgKiBhcyBiaWcgZW5kaWFuLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlIGZpcnN0IHF1YWRsZXQuCi0JCSAqLwotCQkqKHUzMiAqKSAoY3R4LT5oZWFkZXIgKyBpKSA9IF9fc3dhYjMyKCoodTMyICopIChwICsgNCkpOwotCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgNCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDQpOwotCQljdHgtPmhlYWRlcl9sZW5ndGggKz0gY3R4LT5iYXNlLmhlYWRlcl9zaXplOwotCX0KKwlwID0gbGFzdCArIDE7CisJY29weV9pc29faGVhZGVycyhjdHgsIHApOwogCiAJaWYgKGxlMTZfdG9fY3B1KGxhc3QtPmNvbnRyb2wpICYgREVTQ1JJUFRPUl9JUlFfQUxXQVlTKSB7CiAJCWlyX2hlYWRlciA9IChfX2xlMzIgKikgcDsKQEAgLTE4ODgsMjEgKzE4OTQsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBmd19pc29fY29udGV4dCAqCi1vaGNpX2FsbG9jYXRlX2lzb19jb250ZXh0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdHlwZSwgc2l6ZV90IGhlYWRlcl9zaXplKQorc3RhdGljIHN0cnVjdCBmd19pc29fY29udGV4dCAqb2hjaV9hbGxvY2F0ZV9pc29fY29udGV4dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQlpbnQgdHlwZSwgaW50IGNoYW5uZWwsIHNpemVfdCBoZWFkZXJfc2l6ZSkKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHgsICpsaXN0OwogCWRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl1NjQgKmNoYW5uZWxzLCBkb250X2NhcmUgPSB+MFVMTDsKIAl1MzIgKm1hc2ssIHJlZ3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaW5kZXgsIHJldHZhbCA9IC1FTk9NRU07CisJaW50IGluZGV4LCByZXQgPSAtRU5PTUVNOwogCiAJaWYgKHR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpIHsKKwkJY2hhbm5lbHMgPSAmZG9udF9jYXJlOwogCQltYXNrID0gJm9oY2ktPml0X2NvbnRleHRfbWFzazsKIAkJbGlzdCA9IG9oY2ktPml0X2NvbnRleHRfbGlzdDsKIAkJY2FsbGJhY2sgPSBoYW5kbGVfaXRfcGFja2V0OwogCX0gZWxzZSB7CisJCWNoYW5uZWxzID0gJm9oY2ktPmlyX2NvbnRleHRfY2hhbm5lbHM7CiAJCW1hc2sgPSAmb2hjaS0+aXJfY29udGV4dF9tYXNrOwogCQlsaXN0ID0gb2hjaS0+aXJfY29udGV4dF9saXN0OwogCQlpZiAob2hjaS0+dXNlX2R1YWxidWZmZXIpCkBAIC0xOTEyLDkgKzE5MjEsMTEgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwotCWluZGV4ID0gZmZzKCptYXNrKSAtIDE7Ci0JaWYgKGluZGV4ID49IDApCisJaW5kZXggPSAqY2hhbm5lbHMgJiAxVUxMIDw8IGNoYW5uZWwgPyBmZnMoKm1hc2spIC0gMSA6IC0xOworCWlmIChpbmRleCA+PSAwKSB7CisJCSpjaGFubmVscyAmPSB+KDFVTEwgPDwgY2hhbm5lbCk7CiAJCSptYXNrICY9IH4oMSA8PCBpbmRleCk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmIChpbmRleCA8IDApCkBAIC0xOTMyLDggKzE5NDMsOCBAQAogCWlmIChjdHgtPmhlYWRlciA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCXJldHZhbCA9IGNvbnRleHRfaW5pdCgmY3R4LT5jb250ZXh0LCBvaGNpLCByZWdzLCBjYWxsYmFjayk7Ci0JaWYgKHJldHZhbCA8IDApCisJcmV0ID0gY29udGV4dF9pbml0KCZjdHgtPmNvbnRleHQsIG9oY2ksIHJlZ3MsIGNhbGxiYWNrKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfd2l0aF9oZWFkZXI7CiAKIAlyZXR1cm4gJmN0eC0+YmFzZTsKQEAgLTE5NDUsNyArMTk1Niw3IEBACiAJKm1hc2sgfD0gMSA8PCBpbmRleDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQgb2hjaV9zdGFydF9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLApAQCAtMjAyNCwxNiArMjAzNSwxNiBAQAogCX0gZWxzZSB7CiAJCWluZGV4ID0gY3R4IC0gb2hjaS0+aXJfY29udGV4dF9saXN0OwogCQlvaGNpLT5pcl9jb250ZXh0X21hc2sgfD0gMSA8PCBpbmRleDsKKwkJb2hjaS0+aXJfY29udGV4dF9jaGFubmVscyB8PSAxVUxMIDw8IGJhc2UtPmNoYW5uZWw7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX3F1ZXVlX2lzb190cmFuc21pdChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCi0JCQlzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAotCQkJc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCXVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKK3N0YXRpYyBpbnQgb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCSAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkJICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCiB7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgKmxhc3QsICpwZDsKQEAgLTIxMjgsMTEgKzIxMzksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9kdWFsYnVmZmVyKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKLQkJCQkgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCQkJICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAotCQkJCSAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQorc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkJCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCiB7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSBOVUxMOwpAQCAtMjE1MSwxMSArMjE2MSwxMSBAQAogCXogPSAyOwogCiAJLyoKLQkgKiBUaGUgT0hDSSBjb250cm9sbGVyIHB1dHMgdGhlIHN0YXR1cyB3b3JkIGluIHRoZSBoZWFkZXIKLQkgKiBidWZmZXIgdG9vLCBzbyB3ZSBuZWVkIDQgZXh0cmEgYnl0ZXMgcGVyIHBhY2tldC4KKwkgKiBUaGUgT0hDSSBjb250cm9sbGVyIHB1dHMgdGhlIGlzb2Nocm9ub3VzIGhlYWRlciBhbmQgdHJhaWxlciBpbiB0aGUKKwkgKiBidWZmZXIsIHNvIHdlIG5lZWQgYXQgbGVhc3QgOCBieXRlcy4KIAkgKi8KIAlwYWNrZXRfY291bnQgPSBwLT5oZWFkZXJfbGVuZ3RoIC8gY3R4LT5iYXNlLmhlYWRlcl9zaXplOwotCWhlYWRlcl9zaXplID0gcGFja2V0X2NvdW50ICogKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSArIDQpOworCWhlYWRlcl9zaXplID0gcGFja2V0X2NvdW50ICogbWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KTsKIAogCS8qIEdldCBoZWFkZXIgc2l6ZSBpbiBudW1iZXIgb2YgZGVzY3JpcHRvcnMuICovCiAJaGVhZGVyX3ogPSBESVZfUk9VTkRfVVAoaGVhZGVyX3NpemUsIHNpemVvZigqZCkpOwpAQCAtMjE3Myw3ICsyMTgzLDggQEAKIAkJZGIgPSAoc3RydWN0IGRiX2Rlc2NyaXB0b3IgKikgZDsKIAkJZGItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihERVNDUklQVE9SX1NUQVRVUyB8CiAJCQkJCSAgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKLQkJZGItPmZpcnN0X3NpemUgPSBjcHVfdG9fbGUxNihjdHgtPmJhc2UuaGVhZGVyX3NpemUgKyA0KTsKKwkJZGItPmZpcnN0X3NpemUgPQorCQkgICAgY3B1X3RvX2xlMTYobWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KSk7CiAJCWlmIChwLT5za2lwICYmIHJlc3QgPT0gcC0+cGF5bG9hZF9sZW5ndGgpIHsKIAkJCWRiLT5jb250cm9sIHw9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfV0FJVCk7CiAJCQlkYi0+Zmlyc3RfcmVxX2NvdW50ID0gZGItPmZpcnN0X3NpemU7CkBAIC0yMjA4LDExICsyMjE5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCQkJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkJCQkJIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitzdGF0aWMgaW50IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCQlzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCQkJCQlzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJCQl1bnNpZ25lZCBsb25nIHBheWxvYWQpCiB7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqZCA9IE5VTEwsICpwZCA9IE5VTEw7CkBAIC0yMjIzLDExICsyMjMzLDExIEBACiAJaW50IHBhZ2UsIG9mZnNldCwgcGFja2V0X2NvdW50LCBoZWFkZXJfc2l6ZSwgcGF5bG9hZF9wZXJfYnVmZmVyOwogCiAJLyoKLQkgKiBUaGUgT0hDSSBjb250cm9sbGVyIHB1dHMgdGhlIHN0YXR1cyB3b3JkIGluIHRoZQotCSAqIGJ1ZmZlciB0b28sIHNvIHdlIG5lZWQgNCBleHRyYSBieXRlcyBwZXIgcGFja2V0LgorCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgaXNvY2hyb25vdXMgaGVhZGVyIGFuZCB0cmFpbGVyIGluIHRoZQorCSAqIGJ1ZmZlciwgc28gd2UgbmVlZCBhdCBsZWFzdCA4IGJ5dGVzLgogCSAqLwogCXBhY2tldF9jb3VudCA9IHAtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Ci0JaGVhZGVyX3NpemUgID0gY3R4LT5iYXNlLmhlYWRlcl9zaXplICsgNDsKKwloZWFkZXJfc2l6ZSAgPSBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwogCiAJLyogR2V0IGhlYWRlciBzaXplIGluIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gKi8KIAloZWFkZXJfeiA9IERJVl9ST1VORF9VUChoZWFkZXJfc2l6ZSwgc2l6ZW9mKCpkKSk7CkBAIC0yMjg2LDI5ICsyMjk2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfcXVldWVfaXNvKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKLQkgICAgICAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkgICAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQorc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzbyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCisJCQkgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+Y29udGV4dC5vaGNpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGJhc2UtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpCi0JCXJldHZhbCA9IG9oY2lfcXVldWVfaXNvX3RyYW5zbWl0KGJhc2UsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKKwkJcmV0ID0gb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoYmFzZSwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOwogCWVsc2UgaWYgKGN0eC0+Y29udGV4dC5vaGNpLT51c2VfZHVhbGJ1ZmZlcikKLQkJcmV0dmFsID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9kdWFsYnVmZmVyKGJhc2UsIHBhY2tldCwKLQkJCQkJCQkgYnVmZmVyLCBwYXlsb2FkKTsKKwkJcmV0ID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9kdWFsYnVmZmVyKGJhc2UsIHBhY2tldCwKKwkJCQkJCQlidWZmZXIsIHBheWxvYWQpOwogCWVsc2UKLQkJcmV0dmFsID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9wYWNrZXRfcGVyX2J1ZmZlcihiYXNlLCBwYWNrZXQsCi0JCQkJCQkJCWJ1ZmZlciwKLQkJCQkJCQkJcGF5bG9hZCk7CisJCXJldCA9IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoYmFzZSwgcGFja2V0LAorCQkJCQkJCWJ1ZmZlciwgcGF5bG9hZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5jb250ZXh0Lm9oY2ktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciBvaGNpX2RyaXZlciA9IHsKQEAgLTIzNTcsOCArMjM2NSw4IEBACiAjZGVmaW5lIG9oY2lfcG1hY19vZmYoZGV2KQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpOwogCXUzMiBidXNfb3B0aW9ucywgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQsIHZlcnNpb247CkBAIC0yNDQwLDYgKzI0NDgsNyBAQAogCW9oY2ktPml0X2NvbnRleHRfbGlzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tTZXQsIH4wKTsKKwlvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzID0gfjBVTEw7CiAJb2hjaS0+aXJfY29udGV4dF9tYXNrID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tTZXQpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza0NsZWFyLCB+MCk7CiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogaHdlaWdodDMyKG9oY2ktPmlyX2NvbnRleHRfbWFzayk7CkBAIC0yNDY3LDExICsyNDc2LDEyIEBACiAJCXJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0dVSURMbyk7CiAKIAllcnIgPSBmd19jYXJkX2FkZCgmb2hjaS0+Y2FyZCwgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQsIGd1aWQpOwotCWlmIChlcnIgPCAwKQorCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9zZWxmX2lkOwogCiAJZndfbm90aWZ5KCJBZGRlZCBmdy1vaGNpIGRldmljZSAlcywgT0hDSSB2ZXJzaW9uICV4LiV4XG4iLAogCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmKTsKKwogCXJldHVybiAwOwogCiAgZmFpbF9zZWxmX2lkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwppbmRleCBjNzFjNDQxLi4yYmNmNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwpAQCAtMzkyLDIwICszOTIsMTggQEAKIAl9CiB9OwogCi1zdGF0aWMgdm9pZAotZnJlZV9vcmIoc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgdm9pZCBmcmVlX29yYihzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3Qgc2JwMl9vcmIgKm9yYiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2JwMl9vcmIsIGtyZWYpOwogCiAJa2ZyZWUob3JiKTsKIH0KIAotc3RhdGljIHZvaWQKLXNicDJfc3RhdHVzX3dyaXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKLQkJICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkJICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCSAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIHNicDJfc3RhdHVzX3dyaXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJCSAgICAgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkJICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCQkgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUgPSBjYWxsYmFja19kYXRhOwogCXN0cnVjdCBzYnAyX29yYiAqb3JiOwpAQCAtNDUxLDkgKzQ0OSw4IEBACiAJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT01QTEVURSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBzYnAyX29yYiAqb3JiID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDgyLDkgKzQ3OSw4IEBACiAJa3JlZl9wdXQoJm9yYi0+a3JlZiwgZnJlZV9vcmIpOwogfQogCi1zdGF0aWMgdm9pZAotc2JwMl9zZW5kX29yYihzdHJ1Y3Qgc2JwMl9vcmIgKm9yYiwgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwKLQkgICAgICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIHU2NCBvZmZzZXQpCitzdGF0aWMgdm9pZCBzYnAyX3NlbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqb3JiLCBzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LAorCQkJICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIHU2NCBvZmZzZXQpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MzEsOCArNTI3LDggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZAotY29tcGxldGVfbWFuYWdlbWVudF9vcmIoc3RydWN0IHNicDJfb3JiICpiYXNlX29yYiwgc3RydWN0IHNicDJfc3RhdHVzICpzdGF0dXMpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9tYW5hZ2VtZW50X29yYihzdHJ1Y3Qgc2JwMl9vcmIgKmJhc2Vfb3JiLAorCQkJCSAgICBzdHJ1Y3Qgc2JwMl9zdGF0dXMgKnN0YXR1cykKIHsKIAlzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiAqb3JiID0KIAkJY29udGFpbmVyX29mKGJhc2Vfb3JiLCBzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiwgYmFzZSk7CkBAIC01NDIsMTAgKzUzOCw5IEBACiAJY29tcGxldGUoJm9yYi0+ZG9uZSk7CiB9CiAKLXN0YXRpYyBpbnQKLXNicDJfc2VuZF9tYW5hZ2VtZW50X29yYihzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LCBpbnQgbm9kZV9pZCwKLQkJCSBpbnQgZ2VuZXJhdGlvbiwgaW50IGZ1bmN0aW9uLCBpbnQgbHVuX29yX2xvZ2luX2lkLAotCQkJIHZvaWQgKnJlc3BvbnNlKQorc3RhdGljIGludCBzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIoc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwgaW50IG5vZGVfaWQsCisJCQkJICAgIGludCBnZW5lcmF0aW9uLCBpbnQgZnVuY3Rpb24sCisJCQkJICAgIGludCBsdW5fb3JfbG9naW5faWQsIHZvaWQgKnJlc3BvbnNlKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKIAlzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiAqb3JiOwpAQCAtNjUyLDkgKzY0Nyw4IEBACiAJCQkgICAmZCwgc2l6ZW9mKGQpKTsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlX25vX3dhaXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGVfbm9fd2FpdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewogCWtmcmVlKGRhdGEpOwogfQpAQCAtMTI5OSw4ICsxMjkzLDcgQEAKIAkJCQkgc2l6ZW9mKG9yYi0+cGFnZV90YWJsZSksIERNQV9UT19ERVZJQ0UpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1zYnAyX3N0YXR1c190b19zZW5zZV9kYXRhKHU4ICpzYnAyX3N0YXR1cywgdTggKnNlbnNlX2RhdGEpCitzdGF0aWMgdW5zaWduZWQgaW50IHNicDJfc3RhdHVzX3RvX3NlbnNlX2RhdGEodTggKnNicDJfc3RhdHVzLCB1OCAqc2Vuc2VfZGF0YSkKIHsKIAlpbnQgc2FtX3N0YXR1czsKIApAQCAtMTMzNyw4ICsxMzMwLDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV9jb21tYW5kX29yYihzdHJ1Y3Qgc2JwMl9vcmIgKmJhc2Vfb3JiLCBzdHJ1Y3Qgc2JwMl9zdGF0dXMgKnN0YXR1cykKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX2NvbW1hbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqYmFzZV9vcmIsCisJCQkJIHN0cnVjdCBzYnAyX3N0YXR1cyAqc3RhdHVzKQogewogCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmIgPQogCQljb250YWluZXJfb2YoYmFzZV9vcmIsIHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiLCBiYXNlKTsKQEAgLTEzODQsOSArMTM3Nyw4IEBACiAJb3JiLT5kb25lKG9yYi0+Y21kKTsKIH0KIAotc3RhdGljIGludAotc2JwMl9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwgc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLAotCQkgICAgIHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCitzdGF0aWMgaW50IHNicDJfbWFwX3NjYXR0ZXJsaXN0KHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmIsCisJCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3Qob3JiLT5jbWQpOwogCWludCBpLCBuOwpAQCAtMTU4NCw5ICsxNTc2LDggQEAKICAqIFRoaXMgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0IHBvcnQgaWRlbnRpZmllciBhbmQgbG9naWNhbCB1bml0CiAgKiBpZGVudGlmaWVyIGFzIHBlciBTQU0tMi4uLlNBTS00IGFubmV4IEEuCiAgKi8KLXN0YXRpYyBzc2l6ZV90Ci1zYnAyX3N5c2ZzX2llZWUxMzk0X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzYnAyX3N5c2ZzX2llZWUxMzk0X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMKaW5kZXggOGRkNjcwMy4uZDBkZWVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYwpAQCAtMzE0LDkgKzMxNCw4IEBACiAJCQkJICAgc3RydWN0IGZ3X25vZGUgKiBub2RlLAogCQkJCSAgIHN0cnVjdCBmd19ub2RlICogcGFyZW50KTsKIAotc3RhdGljIHZvaWQKLWZvcl9lYWNoX2Z3X25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290LAotCQkgZndfbm9kZV9jYWxsYmFja190IGNhbGxiYWNrKQorc3RhdGljIHZvaWQgZm9yX2VhY2hfZndfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKnJvb3QsCisJCQkgICAgIGZ3X25vZGVfY2FsbGJhY2tfdCBjYWxsYmFjaykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGZ3X25vZGUgKm5vZGUsICpuZXh0LCAqY2hpbGQsICpwYXJlbnQ7CkBAIC0zNDksOSArMzQ4LDggQEAKIAkJZndfbm9kZV9wdXQobm9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1yZXBvcnRfbG9zdF9ub2RlKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgc3RydWN0IGZ3X25vZGUgKm5vZGUsIHN0cnVjdCBmd19ub2RlICpwYXJlbnQpCitzdGF0aWMgdm9pZCByZXBvcnRfbG9zdF9ub2RlKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJICAgICBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgc3RydWN0IGZ3X25vZGUgKnBhcmVudCkKIHsKIAlmd19ub2RlX2V2ZW50KGNhcmQsIG5vZGUsIEZXX05PREVfREVTVFJPWUVEKTsKIAlmd19ub2RlX3B1dChub2RlKTsKQEAgLTM2MCw5ICszNTgsOCBAQAogCWNhcmQtPmJtX3JldHJpZXMgPSAwOwogfQogCi1zdGF0aWMgdm9pZAotcmVwb3J0X2ZvdW5kX25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgc3RydWN0IGZ3X25vZGUgKm5vZGUsIHN0cnVjdCBmd19ub2RlICpwYXJlbnQpCitzdGF0aWMgdm9pZCByZXBvcnRfZm91bmRfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgICAgIHN0cnVjdCBmd19ub2RlICpub2RlLCBzdHJ1Y3QgZndfbm9kZSAqcGFyZW50KQogewogCWludCBiX3BhdGggPSAobm9kZS0+cGh5X3NwZWVkID09IFNDT0RFX0JFVEEpOwogCkBAIC00MTUsOCArNDEyLDcgQEAKICAqIGZvdW5kLCBsb3N0IG9yIHVwZGF0ZWQuICBVcGRhdGUgdGhlIG5vZGVzIGluIHRoZSBjYXJkIHRvcG9sb2d5IHRyZWUKICAqIGFzIHdlIGdvLgogICovCi1zdGF0aWMgdm9pZAotdXBkYXRlX3RyZWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290KQorc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290KQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDAsIGxpc3QxOwogCXN0cnVjdCBmd19ub2RlICpub2RlMCwgKm5vZGUxLCAqbmV4dDE7CkBAIC00OTcsOCArNDkzLDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi11cGRhdGVfdG9wb2xvZ3lfbWFwKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgKnNlbGZfaWRzLCBpbnQgc2VsZl9pZF9jb3VudCkKK3N0YXRpYyB2b2lkIHVwZGF0ZV90b3BvbG9neV9tYXAoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJdTMyICpzZWxmX2lkcywgaW50IHNlbGZfaWRfY291bnQpCiB7CiAJaW50IG5vZGVfY291bnQ7CiAKQEAgLTUxMCwxMCArNTA2LDggQEAKIAlmd19jb21wdXRlX2Jsb2NrX2NyYyhjYXJkLT50b3BvbG9neV9tYXApOwogfQogCi12b2lkCi1md19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCQkgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKiBzZWxmX2lkcykKK3ZvaWQgZndfY29yZV9oYW5kbGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCisJCQkgICAgICBpbnQgc2VsZl9pZF9jb3VudCwgdTMyICpzZWxmX2lkcykKIHsKIAlzdHJ1Y3QgZndfbm9kZSAqbG9jYWxfbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTMyLDYgKzUyNiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCisJY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkID0gZmFsc2U7CiAJY2FyZC0+bm9kZV9pZCA9IG5vZGVfaWQ7CiAJLyoKIAkgKiBVcGRhdGUgbm9kZV9pZCBiZWZvcmUgZ2VuZXJhdGlvbiB0byBwcmV2ZW50IGFueWJvZHkgZnJvbSB1c2luZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oCmluZGV4IGFkZGI5ZjguLjNjNDk3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuaAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmgKQEAgLTE5LDYgKzE5LDExIEBACiAjaWZuZGVmIF9fZndfdG9wb2xvZ3lfaAogI2RlZmluZSBfX2Z3X3RvcG9sb2d5X2gKIAorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKIGVudW0gewogCUZXX05PREVfQ1JFQVRFRCwKIAlGV19OT0RFX1VQREFURUQsCkBAIC01MSwyNiArNTYsMjIgQEAKIAlzdHJ1Y3QgZndfbm9kZSAqcG9ydHNbMF07CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmd19ub2RlICoKLWZ3X25vZGVfZ2V0KHN0cnVjdCBmd19ub2RlICpub2RlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfbm9kZSAqZndfbm9kZV9nZXQoc3RydWN0IGZ3X25vZGUgKm5vZGUpCiB7CiAJYXRvbWljX2luYygmbm9kZS0+cmVmX2NvdW50KTsKIAogCXJldHVybiBub2RlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ3X25vZGVfcHV0KHN0cnVjdCBmd19ub2RlICpub2RlKQorc3RhdGljIGlubGluZSB2b2lkIGZ3X25vZGVfcHV0KHN0cnVjdCBmd19ub2RlICpub2RlKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZub2RlLT5yZWZfY291bnQpKQogCQlrZnJlZShub2RlKTsKIH0KIAotdm9pZAotZndfZGVzdHJveV9ub2RlcyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7CitzdHJ1Y3QgZndfY2FyZDsKK3ZvaWQgZndfZGVzdHJveV9ub2RlcyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7CiAKLWludAotZndfY29tcHV0ZV9ibG9ja19jcmModTMyICpibG9jayk7Ci0KK2ludCBmd19jb21wdXRlX2Jsb2NrX2NyYyh1MzIgKmJsb2NrKTsKIAogI2VuZGlmIC8qIF9fZndfdG9wb2xvZ3lfaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCmluZGV4IDY5OWFjMDQuLjI4M2RhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKQEAgLTY0LDEwICs2NCw4IEBACiAjZGVmaW5lIFBIWV9DT05GSUdfUk9PVF9JRChub2RlX2lkKQkoKCgobm9kZV9pZCkgJiAweDNmKSA8PCAyNCkgfCAoMSA8PCAyMykpCiAjZGVmaW5lIFBIWV9JREVOVElGSUVSKGlkKQkJKChpZCkgPDwgMzApCiAKLXN0YXRpYyBpbnQKLWNsb3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0JCSAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJICB1MzIgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgaW50IGNsb3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUpCiB7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04Myw3ICs4MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCZ0LT5saW5rICE9ICZjYXJkLT50cmFuc2FjdGlvbl9saXN0KSB7Ci0JCXQtPmNhbGxiYWNrKGNhcmQsIHJjb2RlLCBwYXlsb2FkLCBsZW5ndGgsIHQtPmNhbGxiYWNrX2RhdGEpOworCQl0LT5jYWxsYmFjayhjYXJkLCByY29kZSwgTlVMTCwgMCwgdC0+Y2FsbGJhY2tfZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTQsOSArOTIsOCBAQAogICogT25seSB2YWxpZCBmb3IgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIHBvdGVudGlhbGx5IHBlbmRpbmcgKGllIGhhdmUKICAqIGJlZW4gc2VudCkuCiAgKi8KLWludAotZndfY2FuY2VsX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgICAgICBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQoraW50IGZ3X2NhbmNlbF90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKIHsKIAkvKgogCSAqIENhbmNlbCB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBpZiBpdCdzIHN0aWxsIHF1ZXVlZC4gIFRoYXQKQEAgLTExMiwyMCArMTA5LDE5IEBACiAJICogaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIHBlbmRpbmcgYW5kIHJlbW92ZSBpdCBpbiB0aGF0IGNhc2UuCiAJICovCiAKLQlyZXR1cm4gY2xvc2VfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIGNhcmQsIFJDT0RFX0NBTkNFTExFRCwgTlVMTCwgMCk7CisJcmV0dXJuIGNsb3NlX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBjYXJkLCBSQ09ERV9DQU5DRUxMRUQpOwogfQogRVhQT1JUX1NZTUJPTChmd19jYW5jZWxfdHJhbnNhY3Rpb24pOwogCi1zdGF0aWMgdm9pZAotdHJhbnNtaXRfY29tcGxldGVfY2FsbGJhY2soc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LAotCQkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzdGF0dXMpCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jb21wbGV0ZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCisJCQkJICAgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCA9CiAJICAgIGNvbnRhaW5lcl9vZihwYWNrZXQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiwgcGFja2V0KTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSBBQ0tfQ09NUExFVEU6Ci0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0NPTVBMRVRFLCBOVUxMLCAwKTsKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfQ09NUExFVEUpOwogCQlicmVhazsKIAljYXNlIEFDS19QRU5ESU5HOgogCQl0LT50aW1lc3RhbXAgPSBwYWNrZXQtPnRpbWVzdGFtcDsKQEAgLTEzMywzMSArMTI5LDQyIEBACiAJY2FzZSBBQ0tfQlVTWV9YOgogCWNhc2UgQUNLX0JVU1lfQToKIAljYXNlIEFDS19CVVNZX0I6Ci0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0JVU1ksIE5VTEwsIDApOworCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9CVVNZKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ0tfREFUQV9FUlJPUjoKLQkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfREFUQV9FUlJPUiwgTlVMTCwgMCk7CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0RBVEFfRVJST1IpOwogCQlicmVhazsKIAljYXNlIEFDS19UWVBFX0VSUk9SOgotCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9UWVBFX0VSUk9SLCBOVUxMLCAwKTsKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfVFlQRV9FUlJPUik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIEluIHRoaXMgY2FzZSB0aGUgYWNrIGlzIHJlYWxseSBhIGp1anUgc3BlY2lmaWMKIAkJICogcmNvZGUsIHNvIGp1c3QgZm9yd2FyZCB0aGF0IHRvIHRoZSBjYWxsYmFjay4KIAkJICovCi0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIHN0YXR1cywgTlVMTCwgMCk7CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIHN0YXR1cyk7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIHZvaWQKLWZ3X2ZpbGxfcmVxdWVzdChzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIGludCB0Y29kZSwgaW50IHRsYWJlbCwKK3N0YXRpYyB2b2lkIGZ3X2ZpbGxfcmVxdWVzdChzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIGludCB0Y29kZSwgaW50IHRsYWJlbCwKIAkJaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgc291cmNlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewogCWludCBleHRfdGNvZGU7CiAKKwlpZiAodGNvZGUgPT0gVENPREVfU1RSRUFNX0RBVEEpIHsKKwkJcGFja2V0LT5oZWFkZXJbMF0gPQorCQkJSEVBREVSX0RBVEFfTEVOR1RIKGxlbmd0aCkgfAorCQkJZGVzdGluYXRpb25faWQgfAorCQkJSEVBREVSX1RDT0RFKFRDT0RFX1NUUkVBTV9EQVRBKTsKKwkJcGFja2V0LT5oZWFkZXJfbGVuZ3RoID0gNDsKKwkJcGFja2V0LT5wYXlsb2FkID0gcGF5bG9hZDsKKwkJcGFja2V0LT5wYXlsb2FkX2xlbmd0aCA9IGxlbmd0aDsKKworCQlnb3RvIGNvbW1vbjsKKwl9CisKIAlpZiAodGNvZGUgPiAweDEwKSB7CiAJCWV4dF90Y29kZSA9IHRjb2RlICYgfjB4MTA7CiAJCXRjb2RlID0gVENPREVfTE9DS19SRVFVRVNUOwpAQCAtMjA0LDcgKzIxMSw3IEBACiAJCXBhY2tldC0+cGF5bG9hZF9sZW5ndGggPSAwOwogCQlicmVhazsKIAl9Ci0KKyBjb21tb246CiAJcGFja2V0LT5zcGVlZCA9IHNwZWVkOwogCXBhY2tldC0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CiAJcGFja2V0LT5hY2sgPSAwOwpAQCAtMjQ2LDEzICsyNTMsMTQgQEAKICAqIEBwYXJhbSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkCiAgKiBAcGFyYW0gY2FsbGJhY2tfZGF0YSBwb2ludGVyIHRvIGFyYml0cmFyeSBkYXRhLCB3aGljaCB3aWxsIGJlCiAgKiAgIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAqCisgKiBJbiBjYXNlIG9mIGFzeW5jaHJvbm91cyBzdHJlYW0gcGFja2V0cyBpLmUuIFRDT0RFX1NUUkVBTV9EQVRBLCB0aGUgY2FsbGVyCisgKiBuZWVkcyB0byBzeW50aGVzaXplIEBkZXN0aW5hdGlvbl9pZCB3aXRoIGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQoKS4KICAqLwotdm9pZAotZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCi0JCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAotCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKQordm9pZCBmd19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwgaW50IHRjb2RlLAorCQkgICAgIGludCBkZXN0aW5hdGlvbl9pZCwgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAorCQkgICAgIGZ3X3RyYW5zYWN0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGxhYmVsOwpAQCAtMzIyLDE2ICszMzAsMTYgQEAKICAqIFJldHVybnMgdGhlIFJDT0RFLgogICovCiBpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKLQkJaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkJdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKKwkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCB0cmFuc2FjdGlvbl9jYWxsYmFja19kYXRhIGQ7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7CiAKIAlpbml0X2NvbXBsZXRpb24oJmQuZG9uZSk7Ci0JZC5wYXlsb2FkID0gZGF0YTsKKwlkLnBheWxvYWQgPSBwYXlsb2FkOwogCWZ3X3NlbmRfcmVxdWVzdChjYXJkLCAmdCwgdGNvZGUsIGRlc3RpbmF0aW9uX2lkLCBnZW5lcmF0aW9uLCBzcGVlZCwKLQkJCW9mZnNldCwgZGF0YSwgbGVuZ3RoLCB0cmFuc2FjdGlvbl9jYWxsYmFjaywgJmQpOworCQkJb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgsIHRyYW5zYWN0aW9uX2NhbGxiYWNrLCAmZCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmZC5kb25lKTsKIAogCXJldHVybiBkLnJjb2RlOwpAQCAtMzk5LDkgKzQwNyw4IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqCi1sb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpsb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyKAorCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlcjsKIApAQCAtNDE0LDkgKzQyMSw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICoKLWxvb2t1cF9lbmNsb3NpbmdfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqbG9va3VwX2VuY2xvc2luZ19hZGRyZXNzX2hhbmRsZXIoCisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwogCkBAIC00NDksMzYgKzQ1NSw0NCBAQAogI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqCi0gKiBBbGxvY2F0ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBpbiB0aGUgbm9kZSBzcGFjZSBvZiB0aGUgT0hDSQotICogY29udHJvbGxlci4gIFdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkIHRoYXQgZmFsbHMgd2l0aGluIHRoZQotICogc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgaXMgaW52b2tlZC4gIFRoZQotICogcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGdpdmUgdGhlIGRldGFpbHMgb2YgdGhlCi0gKiBwYXJ0aWN1bGFyIHJlcXVlc3QuCisgKiBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIgLSByZWdpc3RlciBmb3IgaW5jb21pbmcgcmVxdWVzdHMKKyAqIEBoYW5kbGVyOiBjYWxsYmFjaworICogQHJlZ2lvbjogcmVnaW9uIGluIHRoZSBJRUVFIDEyMTIgbm9kZSBzcGFjZSBhZGRyZXNzIHJhbmdlCisgKgorICogcmVnaW9uLT5zdGFydCwgLT5lbmQsIGFuZCBoYW5kbGVyLT5sZW5ndGggaGF2ZSB0byBiZSBxdWFkbGV0LWFsaWduZWQuCisgKgorICogV2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQgdGhhdCBmYWxscyB3aXRoaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHJhbmdlLAorICogdGhlIHNwZWNpZmllZCBjYWxsYmFjayBpcyBpbnZva2VkLiAgVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICogZ2l2ZSB0aGUgZGV0YWlscyBvZiB0aGUgcGFydGljdWxhciByZXF1ZXN0LgogICoKICAqIFJldHVybiB2YWx1ZTogIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgogICogVGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgaGFuZGxlcidzIGFkZHJlc3MgcmVnaW9uIGlzIGRldGVybWluZWQgYnkKICAqIGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcigpIGFuZCBpcyByZXR1cm5lZCBpbiBoYW5kbGVyLT5vZmZzZXQuCi0gKiBUaGUgb2Zmc2V0IGlzIHF1YWRsZXQtYWxpZ25lZC4KICAqLwotaW50Ci1md19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKK2ludCBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKKwkJCQljb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpvdGhlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAtRUJVU1k7CiAKKwlpZiAocmVnaW9uLT5zdGFydCAmIDB4ZmZmZjAwMDAwMDAwMDAwM1VMTCB8fAorCSAgICByZWdpb24tPmVuZCAgICYgMHhmZmZmMDAwMDAwMDAwMDAzVUxMIHx8CisJICAgIHJlZ2lvbi0+c3RhcnQgPj0gcmVnaW9uLT5lbmQgfHwKKwkgICAgaGFuZGxlci0+bGVuZ3RoICYgMyB8fAorCSAgICBoYW5kbGVyLT5sZW5ndGggPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKIAotCWhhbmRsZXItPm9mZnNldCA9IHJvdW5kdXAocmVnaW9uLT5zdGFydCwgNCk7CisJaGFuZGxlci0+b2Zmc2V0ID0gcmVnaW9uLT5zdGFydDsKIAl3aGlsZSAoaGFuZGxlci0+b2Zmc2V0ICsgaGFuZGxlci0+bGVuZ3RoIDw9IHJlZ2lvbi0+ZW5kKSB7CiAJCW90aGVyID0KIAkJICAgIGxvb2t1cF9vdmVybGFwcGluZ19hZGRyZXNzX2hhbmRsZXIoJmFkZHJlc3NfaGFuZGxlcl9saXN0LAogCQkJCQkJICAgICAgIGhhbmRsZXItPm9mZnNldCwKIAkJCQkJCSAgICAgICBoYW5kbGVyLT5sZW5ndGgpOwogCQlpZiAob3RoZXIgIT0gTlVMTCkgewotCQkJaGFuZGxlci0+b2Zmc2V0ID0KLQkJCSAgICByb3VuZHVwKG90aGVyLT5vZmZzZXQgKyBvdGhlci0+bGVuZ3RoLCA0KTsKKwkJCWhhbmRsZXItPm9mZnNldCArPSBvdGhlci0+bGVuZ3RoOwogCQl9IGVsc2UgewogCQkJbGlzdF9hZGRfdGFpbCgmaGFuZGxlci0+bGluaywgJmFkZHJlc3NfaGFuZGxlcl9saXN0KTsKIAkJCXJldCA9IDA7CkBAIC00OTMsMTIgKzUwNyw3IEBACiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcik7CiAKIC8qKgotICogRGVhbGxvY2F0ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBhbGxvY2F0ZWQgd2l0aCBmd19hbGxvY2F0ZS4gIFRoaXMKLSAqIHdpbGwgY2FsbCB0aGUgYXNzb2NpYXRlZCBjYWxsYmFjayBvbmUgbGFzdCB0aW1lIHdpdGggYSB0aGUgc3BlY2lhbAotICogdGNvZGUgVENPREVfREVBTExPQ0FURSwgdG8gbGV0IHRoZSBjbGllbnQgZGVzdHJveSB0aGUgcmVnaXN0ZXJlZAotICogY2FsbGJhY2sgZGF0YS4gIEZvciBjb252ZW5pZW5jZSwgdGhlIGNhbGxiYWNrIHBhcmFtZXRlcnMgb2Zmc2V0IGFuZAotICogbGVuZ3RoIGFyZSBzZXQgdG8gdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoIHJlc3BlY3RpdmVseSBmb3IgdGhlCi0gKiBkZWFsbG9jYXRlZCByZWdpb24sIHBheWxvYWQgaXMgc2V0IHRvIE5VTEwuCisgKiBmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIgLSB1bnJlZ2lzdGVyIGFuIGFkZHJlc3MgaGFuZGxlcgogICovCiB2b2lkIGZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyKQogewpAQCAtNTE4LDkgKzUyNyw4IEBACiAJdTMyIGRhdGFbMF07CiB9OwogCi1zdGF0aWMgdm9pZAotZnJlZV9yZXNwb25zZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCi0JCSAgICAgICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIGZyZWVfcmVzcG9uc2VfY2FsbGJhY2soc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LAorCQkJCSAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwogCkBAIC01MjgsOSArNTM2LDggQEAKIAlrZnJlZShyZXF1ZXN0KTsKIH0KIAotdm9pZAotZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKLQkJIGludCByY29kZSwgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKKwkJICAgICAgaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewogCWludCB0Y29kZSwgdGxhYmVsLCBleHRlbmRlZF90Y29kZSwgc291cmNlLCBkZXN0aW5hdGlvbjsKIApAQCAtNTg4LDggKzU5NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2ZpbGxfcmVzcG9uc2UpOwogCi1zdGF0aWMgc3RydWN0IGZ3X3JlcXVlc3QgKgotYWxsb2NhdGVfcmVxdWVzdChzdHJ1Y3QgZndfcGFja2V0ICpwKQorc3RhdGljIHN0cnVjdCBmd19yZXF1ZXN0ICphbGxvY2F0ZV9yZXF1ZXN0KHN0cnVjdCBmd19wYWNrZXQgKnApCiB7CiAJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CiAJdTMyICpkYXRhLCBsZW5ndGg7CkBAIC02NDksOCArNjU1LDggQEAKIAlyZXR1cm4gcmVxdWVzdDsKIH0KIAotdm9pZAotZndfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsIGludCByY29kZSkKK3ZvaWQgZndfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsIGludCByY29kZSkKIHsKIAkvKiB1bmlmaWVkIHRyYW5zYWN0aW9uIG9yIGJyb2FkY2FzdCB0cmFuc2FjdGlvbjogZG9uJ3QgcmVzcG9uZCAqLwogCWlmIChyZXF1ZXN0LT5hY2sgIT0gQUNLX1BFTkRJTkcgfHwKQEAgLTY3MCw4ICs2NzYsNyBAQAogfQogRVhQT1JUX1NZTUJPTChmd19zZW5kX3Jlc3BvbnNlKTsKIAotdm9pZAotZndfY29yZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKK3ZvaWQgZndfY29yZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwogCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwpAQCAtNzE5LDggKzcyNCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3QpOwogCi12b2lkCi1md19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKK3ZvaWQgZndfY29yZV9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnApCiB7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03OTMsMTIgKzc5NywxMCBAQAogCXsgLnN0YXJ0ID0gQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfVE9QT0xPR1lfTUFQLAogCSAgLmVuZCAgID0gQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfVE9QT0xPR1lfTUFQX0VORCwgfTsKIAotc3RhdGljIHZvaWQKLWhhbmRsZV90b3BvbG9neV9tYXAoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAotCQkgICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCi0JCSAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkJICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCitzdGF0aWMgdm9pZCBoYW5kbGVfdG9wb2xvZ3lfbWFwKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsIGludCBnZW5lcmF0aW9uLAorCQlpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCXZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJaW50IGksIHN0YXJ0LCBlbmQ7CiAJX19iZTMyICptYXA7CkBAIC04MzIsMTIgKzgzNCwxMCBAQAogCXsgLnN0YXJ0ID0gQ1NSX1JFR0lTVEVSX0JBU0UsCiAJICAuZW5kICAgPSBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9DT05GSUdfUk9NLCB9OwogCi1zdGF0aWMgdm9pZAotaGFuZGxlX3JlZ2lzdGVycyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCi0JCSBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkJIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCSB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQkgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWdpc3RlcnMoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQlpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwgaW50IGdlbmVyYXRpb24sCisJCWludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlpbnQgcmVnID0gb2Zmc2V0ICYgfkNTUl9SRUdJU1RFUl9CQVNFOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBidXNfdGltZTsKQEAgLTkzOSwxMSArOTM5LDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGZ3X2NvcmVfaW5pdCh2b2lkKQogewotCWludCByZXR2YWw7CisJaW50IHJldDsKIAotCXJldHZhbCA9IGJ1c19yZWdpc3RlcigmZndfYnVzX3R5cGUpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IGJ1c19yZWdpc3RlcigmZndfYnVzX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJZndfY2Rldl9tYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCAiZmlyZXdpcmUiLCAmZndfZGV2aWNlX29wcyk7CiAJaWYgKGZ3X2NkZXZfbWFqb3IgPCAwKSB7CkBAIC05NTEsMTkgKzk1MSwxMCBAQAogCQlyZXR1cm4gZndfY2Rldl9tYWpvcjsKIAl9CiAKLQlyZXR2YWwgPSBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnRvcG9sb2d5X21hcCwKLQkJCQkJICAgICAmdG9wb2xvZ3lfbWFwX3JlZ2lvbik7Ci0JQlVHX09OKHJldHZhbCA8IDApOwotCi0JcmV0dmFsID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyZWdpc3RlcnMsCi0JCQkJCSAgICAgJnJlZ2lzdGVyc19yZWdpb24pOwotCUJVR19PTihyZXR2YWwgPCAwKTsKLQotCS8qIEFkZCB0aGUgdmVuZG9yIHRleHR1YWwgZGVzY3JpcHRvci4gKi8KLQlyZXR2YWwgPSBmd19jb3JlX2FkZF9kZXNjcmlwdG9yKCZ2ZW5kb3JfaWRfZGVzY3JpcHRvcik7Ci0JQlVHX09OKHJldHZhbCA8IDApOwotCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJm1vZGVsX2lkX2Rlc2NyaXB0b3IpOwotCUJVR19PTihyZXR2YWwgPCAwKTsKKwlmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnRvcG9sb2d5X21hcCwgJnRvcG9sb2d5X21hcF9yZWdpb24pOworCWZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcigmcmVnaXN0ZXJzLCAmcmVnaXN0ZXJzX3JlZ2lvbik7CisJZndfY29yZV9hZGRfZGVzY3JpcHRvcigmdmVuZG9yX2lkX2Rlc2NyaXB0b3IpOworCWZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJm1vZGVsX2lkX2Rlc2NyaXB0b3IpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKaW5kZXggMWQ3OGU5Yy4uZGZhNzk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaApAQCAtODIsMTQgKzgyLDE0IEBACiAjZGVmaW5lIENTUl9TUEVFRF9NQVAJCQkweDIwMDAKICNkZWZpbmUgQ1NSX1NQRUVEX01BUF9FTkQJCTB4MzAwMAogCisjZGVmaW5lIEJBTkRXSURUSF9BVkFJTEFCTEVfSU5JVElBTAk0OTE1CiAjZGVmaW5lIEJST0FEQ0FTVF9DSEFOTkVMX0lOSVRJQUwJKDEgPDwgMzEgfCAzMSkKICNkZWZpbmUgQlJPQURDQVNUX0NIQU5ORUxfVkFMSUQJCSgxIDw8IDMwKQogCiAjZGVmaW5lIGZ3X25vdGlmeShzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQogI2RlZmluZSBmd19lcnJvcihzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ3X21lbWNweV9mcm9tX2JlMzIodm9pZCAqX2RzdCwgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgZndfbWVtY3B5X2Zyb21fYmUzMih2b2lkICpfZHN0LCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSkKIHsKIAl1MzIgICAgKmRzdCA9IF9kc3Q7CiAJX19iZTMyICpzcmMgPSBfc3JjOwpAQCAtOTksOCArOTksNyBAQAogCQlkc3RbaV0gPSBiZTMyX3RvX2NwdShzcmNbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ3X21lbWNweV90b19iZTMyKHZvaWQgKl9kc3QsIHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKQorc3RhdGljIGlubGluZSB2b2lkIGZ3X21lbWNweV90b19iZTMyKHZvaWQgKl9kc3QsIHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKQogewogCWZ3X21lbWNweV9mcm9tX2JlMzIoX2RzdCwgX3NyYywgc2l6ZSk7CiB9CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCQkgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKTsKIAogdHlwZWRlZiB2b2lkICgqZndfdHJhbnNhY3Rpb25fY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJCQkJICB2b2lkICpkYXRhLAotCQkJCQkgIHNpemVfdCBsZW5ndGgsCisJCQkJCSAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKIAkJCQkJICB2b2lkICpjYWxsYmFja19kYXRhKTsKIAogLyoKQEAgLTE0MSwxMiArMTM5LDYgQEAKIAkJCQkgICAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogCQkJCSAgICAgIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogCi10eXBlZGVmIHZvaWQgKCpmd19idXNfcmVzZXRfY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmhhbmRsZSwKLQkJCQkJaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJCQl1MzIgKnNlbGZfaWRzLAotCQkJCQlpbnQgc2VsZl9pZF9jb3VudCwKLQkJCQkJdm9pZCAqY2FsbGJhY2tfZGF0YSk7Ci0KIHN0cnVjdCBmd19wYWNrZXQgewogCWludCBzcGVlZDsKIAlpbnQgZ2VuZXJhdGlvbjsKQEAgLTE4NywxMiArMTc5LDYgQEAKIAl2b2lkICpjYWxsYmFja19kYXRhOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfcGFja2V0ICoKLWZ3X3BhY2tldChzdHJ1Y3QgbGlzdF9oZWFkICpsKQotewotCXJldHVybiBsaXN0X2VudHJ5KGwsIHN0cnVjdCBmd19wYWNrZXQsIGxpbmspOwotfQotCiBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIHsKIAl1NjQgb2Zmc2V0OwogCXNpemVfdCBsZW5ndGg7CkBAIC0yMDEsNyArMTg3LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiB9OwogCi0KIHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiB7CiAJdTY0IHN0YXJ0OwogCXU2NCBlbmQ7CkBAIC0yNTUsNiArMjQwLDcgQEAKIAlpbnQgYm1fcmV0cmllczsKIAlpbnQgYm1fZ2VuZXJhdGlvbjsKIAorCWJvb2wgYnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkOwogCXUzMiBicm9hZGNhc3RfY2hhbm5lbDsKIAl1MzIgdG9wb2xvZ3lfbWFwWyhDU1JfVE9QT0xPR1lfTUFQX0VORCAtIENTUl9UT1BPTE9HWV9NQVApIC8gNF07CiB9OwpAQCAtMzE1LDEwICszMDEsOCBAQAogc3RydWN0IGZ3X2lzb19jb250ZXh0OwogCiB0eXBlZGVmIHZvaWQgKCpmd19pc29fY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0LAotCQkJCSAgdTMyIGN5Y2xlLAotCQkJCSAgc2l6ZV90IGhlYWRlcl9sZW5ndGgsCi0JCQkJICB2b2lkICpoZWFkZXIsCi0JCQkJICB2b2lkICpkYXRhKTsKKwkJCQkgIHUzMiBjeWNsZSwgc2l6ZV90IGhlYWRlcl9sZW5ndGgsCisJCQkJICB2b2lkICpoZWFkZXIsIHZvaWQgKmRhdGEpOwogCiAvKgogICogQW4gaXNvIGJ1ZmZlciBpcyBqdXN0IGEgc2V0IG9mIHBhZ2VzIG1hcHBlZCBmb3IgRE1BIGluIHRoZQpAQCAtMzQ0LDM2ICszMjgsMjUgQEAKIAl2b2lkICpjYWxsYmFja19kYXRhOwogfTsKIAotaW50Ci1md19pc29fYnVmZmVyX2luaXQoc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgIGludCBwYWdlX2NvdW50LAotCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotaW50Ci1md19pc29fYnVmZmVyX21hcChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci12b2lkCi1md19pc29fYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworaW50IGZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgIGludCBwYWdlX2NvdW50LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworaW50IGZ3X2lzb19idWZmZXJfbWFwKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3ZvaWQgZndfaXNvX2J1ZmZlcl9kZXN0cm95KHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCBmd19jYXJkICpjYXJkKTsKIAotc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKLWZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHR5cGUsCi0JCSAgICAgIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKLQkJICAgICAgZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpOworc3RydWN0IGZ3X2lzb19jb250ZXh0ICpmd19pc29fY29udGV4dF9jcmVhdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCWludCB0eXBlLCBpbnQgY2hhbm5lbCwgaW50IHNwZWVkLCBzaXplX3QgaGVhZGVyX3NpemUsCisJCWZ3X2lzb19jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKTsKK2ludCBmd19pc29fY29udGV4dF9xdWV1ZShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKKwkJCSBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCQkJIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkgdW5zaWduZWQgbG9uZyBwYXlsb2FkKTsKK2ludCBmd19pc29fY29udGV4dF9zdGFydChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKKwkJCSBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncyk7CitpbnQgZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7Cit2b2lkIGZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwogCi12b2lkCi1md19pc29fY29udGV4dF9kZXN0cm95KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKLQotaW50Ci1md19pc29fY29udGV4dF9xdWV1ZShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKLQkJICAgICBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAotCQkgICAgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKTsKLQotaW50Ci1md19pc29fY29udGV4dF9zdGFydChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKLQkJICAgICBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncyk7Ci0KLWludAotZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7Cit2b2lkIGZ3X2lzb19yZXNvdXJjZV9tYW5hZ2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBnZW5lcmF0aW9uLAorCQl1NjQgY2hhbm5lbHNfbWFzaywgaW50ICpjaGFubmVsLCBpbnQgKmJhbmR3aWR0aCwgYm9vbCBhbGxvY2F0ZSk7CiAKIHN0cnVjdCBmd19jYXJkX2RyaXZlciB7CiAJLyoKQEAgLTQxNSw3ICszODgsNyBAQAogCiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKIAkoKmFsbG9jYXRlX2lzb19jb250ZXh0KShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJCQlpbnQgdHlwZSwgc2l6ZV90IGhlYWRlcl9zaXplKTsKKwkJCQlpbnQgdHlwZSwgaW50IGNoYW5uZWwsIHNpemVfdCBoZWFkZXJfc2l6ZSk7CiAJdm9pZCAoKmZyZWVfaXNvX2NvbnRleHQpKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKIAogCWludCAoKnN0YXJ0X2lzbykoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCkBAIC00MjksNTQgKzQwMiw0NSBAQAogCWludCAoKnN0b3BfaXNvKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CiB9OwogCi1pbnQKLWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc2hvcnRfcmVzZXQpOworaW50IGZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc2hvcnRfcmVzZXQpOwogCi12b2lkCi1md19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwKK3ZvaWQgZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCiAJCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAogCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKTsKLQotaW50IGZ3X3J1bl90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsCi0JCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQkgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0KIGludCBmd19jYW5jZWxfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQkgIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pOwotCiB2b2lkIGZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7Ci0KK2ludCBmd19ydW5fdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLAorCQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpOwogdm9pZCBmd19zZW5kX3BoeV9jb25maWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBnYXBfY291bnQpOwogCitzdGF0aWMgaW5saW5lIGludCBmd19zdHJlYW1fcGFja2V0X2Rlc3RpbmF0aW9uX2lkKGludCB0YWcsIGludCBjaGFubmVsLCBpbnQgc3kpCit7CisJcmV0dXJuIHRhZyA8PCAxNCB8IGNoYW5uZWwgPDwgOCB8IHN5OworfQorCiAvKgogICogQ2FsbGVkIGJ5IHRoZSB0b3BvbG9neSBjb2RlIHRvIGluZm9ybSB0aGUgZGV2aWNlIGNvZGUgb2Ygbm9kZQogICogYWN0aXZpdHk7IGZvdW5kLCBsb3N0LCBvciB1cGRhdGVkIG5vZGVzLgogICovCi12b2lkCi1md19ub2RlX2V2ZW50KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgaW50IGV2ZW50KTsKK3ZvaWQgZndfbm9kZV9ldmVudChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKm5vZGUsIGludCBldmVudCk7CiAKIC8qIEFQSSB1c2VkIGJ5IGNhcmQgbGV2ZWwgZHJpdmVycyAqLwogCi12b2lkCi1md19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciAqZHJpdmVyLAotCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotaW50Ci1md19jYXJkX2FkZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkgICAgdTMyIG1heF9yZWNlaXZlLCB1MzIgbGlua19zcGVlZCwgdTY0IGd1aWQpOwordm9pZCBmd19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCWNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworaW50IGZ3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQl1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCk7Cit2b2lkIGZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwordm9pZCBmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBub2RlX2lkLAorCQlpbnQgZ2VuZXJhdGlvbiwgaW50IHNlbGZfaWRfY291bnQsIHUzMiAqc2VsZl9pZHMpOwordm9pZCBmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpyZXF1ZXN0KTsKK3ZvaWQgZndfY29yZV9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCk7CiAKLXZvaWQKLWZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwotCi12b2lkCi1md19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCQkgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKnNlbGZfaWRzKTsKLXZvaWQKLWZ3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnJlcXVlc3QpOwotCi12b2lkCi1md19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KTsKK2V4dGVybiBpbnQgZndfaXJtX3NldF9icm9hZGNhc3RfY2hhbm5lbF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgdm9pZCAqZGF0YSk7CiAKICNlbmRpZiAvKiBfX2Z3X3RyYW5zYWN0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCmluZGV4IDc3N2ZiYTQuLjMwMDllMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgKi8KIGludCBkY2RiYXNfc21pX3JlcXVlc3Qoc3RydWN0IHNtaV9jbWQgKnNtaV9jbWQpCiB7Ci0JY3B1bWFza190IG9sZF9tYXNrOworCWNwdW1hc2tfdmFyX3Qgb2xkX21hc2s7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoc21pX2NtZC0+bWFnaWMgIT0gU01JX0NNRF9NQUdJQykgewpAQCAtMjU0LDggKzI1NCwxMSBAQAogCX0KIAogCS8qIFNNSSByZXF1aXJlcyBDUFUgMCAqLwotCW9sZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdSgwKSk7CisJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcigmb2xkX21hc2ssIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNwdW1hc2tfY29weShvbGRfbWFzaywgJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZigwKSk7CiAJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKSB7CiAJCWRldl9kYmcoJmRjZGJhc19wZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGdldCBDUFUgMFxuIiwKIAkJCV9fZnVuY19fKTsKQEAgLTI3NSw3ICsyNzgsOCBAQAogCSk7CiAKIG91dDoKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG9sZF9tYXNrKTsKKwlmcmVlX2NwdW1hc2tfdmFyKG9sZF9tYXNrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IDNhYjNlNGEuLjdiN2RkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC05MzgsOCArOTM4LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoaWJmdF9hZGRyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbHguXG4iLAotCQkgICAgICAgdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CisJCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbGx4LlxuIiwKKwkJICAgICAgICh1NjQpdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CiAKIAkJcmMgPSBpYmZ0X2NoZWNrX2RldmljZSgpOwogCQlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKaW5kZXggN2ExMTY4Mi4uOTg0YjU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYwpAQCAtMTYwLDcgKzE2MCw3IEBACiB7CiAJc3RydWN0IGdwaW9fY2hpcCAqYyA9ICZiZy0+Z3BpbzsKIAotCWMtPmxhYmVsID0gYmctPnBkZXYtPmRldi5idXNfaWQ7CisJYy0+bGFiZWwgPSBkZXZfbmFtZSgmYmctPnBkZXYtPmRldik7CiAJYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljLT5kaXJlY3Rpb25faW5wdXQgPSBidDh4eGdwaW9fZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CiAJYy0+Z2V0ID0gYnQ4eHhncGlvX2dwaW9fZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDMwMDIyYzQuLjRlYzUwNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDggQEAKIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3Byb2MubyBkcm1fc3R1Yi5vIGRybV92bS5vIFwKIAkJZHJtX2FncHN1cHBvcnQubyBkcm1fc2NhdHRlci5vIGF0aV9wY2lnYXJ0Lm8gZHJtX3BjaS5vIFwKIAkJZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fc21hbi5vIGRybV9tbS5vIFwKLQkJZHJtX2NydGMubyBkcm1fY3J0Y19oZWxwZXIubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vCisJCWRybV9jcnRjLm8gZHJtX2NydGNfaGVscGVyLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubyBcCisJCWRybV9pbmZvLm8gZHJtX2RlYnVnZnMubwogCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3N2M2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYwpAQCAtMCwwICsxLDIzNSBAQAorLyoqCisgKiBcZmlsZSBkcm1fZGVidWdmcy5jCisgKiBkZWJ1Z2ZzIHN1cHBvcnQgZm9yIERSTQorICoKKyAqIFxhdXRob3IgQmVuIEdhbWFyaSA8YmdhbWFyaUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIENyZWF0ZWQ6IFN1biBEZWMgMjEgMTM6MDg6NTAgMjAwOCBieSBiZ2FtYXJpQGdtYWlsLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDA4IEJlbiBHYW1hcmkgPGJnYW1hcmlAZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6YXRpb24sIGV0Yy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGRybV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKKwl7InZtIiwgZHJtX3ZtX2luZm8sIDB9LAorCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm8sIDB9LAorCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvLCAwfSwKKwl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvLCAwfSwKKwl7ImdlbV9uYW1lcyIsIGRybV9nZW1fbmFtZV9pbmZvLCBEUklWRVJfR0VNfSwKKwl7ImdlbV9vYmplY3RzIiwgZHJtX2dlbV9vYmplY3RfaW5mbywgRFJJVkVSX0dFTX0sCisjaWYgRFJNX0RFQlVHX0NPREUKKwl7InZtYSIsIGRybV92bWFfaW5mbywgMH0sCisjZW5kaWYKK307CisjZGVmaW5lIERSTV9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRShkcm1fZGVidWdmc19saXN0KQorCisKK3N0YXRpYyBpbnQgZHJtX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbm9kZS0+aW5mb19lbnQtPnNob3csIG5vZGUpOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fZGVidWdmc19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworCisvKioKKyAqIEluaXRpYWxpemUgYSBnaXZlbiBzZXQgb2YgZGVidWdmcyBmaWxlcyBmb3IgYSBkZXZpY2UKKyAqCisgKiBccGFyYW0gZmlsZXMgVGhlIGFycmF5IG9mIGZpbGVzIHRvIGNyZWF0ZQorICogXHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZmlsZXMgZ2l2ZW4KKyAqIFxwYXJhbSByb290IERSSSBkZWJ1Z2ZzIGRpciBlbnRyeS4KKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyCisgKiBccmV0dXJuIFplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorICoKKyAqIENyZWF0ZSBhIGdpdmVuIHNldCBvZiBkZWJ1Z2ZzIGZpbGVzIHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5IG9mCisgKiBnZG1fZGVidWdmc19saXN0cyBpbiB0aGUgZ2l2ZW4gcm9vdCBkaXJlY3RvcnkuCisgKi8KK2ludCBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisJCQkgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QsIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCXN0cnVjdCBkZW50cnkgKmVudDsKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqdG1wOworCWNoYXIgbmFtZVs2NF07CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXUzMiBmZWF0dXJlcyA9IGZpbGVzW2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKworCQl0bXAgPSBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwKKwkJCQlfRFJNX0RSSVZFUik7CisJCWVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZXNbaV0ubmFtZSwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJCSAgcm9vdCwgdG1wLCAmZHJtX2RlYnVnZnNfZm9wcyk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL2RlYnVnZnMvZHJpLyVzLyVzXG4iLAorCQkJCSAgbmFtZSwgZmlsZXNbaV0ubmFtZSk7CisJCQlkcm1fZnJlZSh0bXAsIHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksCisJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOworCQl9CisKKwkJdG1wLT5taW5vciA9IG1pbm9yOworCQl0bXAtPmRlbnQgPSBlbnQ7CisJCXRtcC0+aW5mb19lbnQgPSAmZmlsZXNbaV07CisJCWxpc3RfYWRkKCYodG1wLT5saXN0KSwgJihtaW5vci0+ZGVidWdmc19ub2Rlcy5saXN0KSk7CisJfQorCXJldHVybiAwOworCitmYWlsOgorCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhmaWxlcywgY291bnQsIG1pbm9yKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMpOworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIERSSSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gZm9yIGEgZGV2aWNlCisgKgorICogXHBhcmFtIGRldiBEUk0gZGV2aWNlCisgKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlcgorICogXHBhcmFtIHJvb3QgRFJJIGRlYnVnZnMgZGlyIGVudHJ5LgorICoKKyAqIENyZWF0ZSB0aGUgRFJJIGRlYnVnZnMgcm9vdCBlbnRyeSAiL2RlYnVnZnMvZHJpIiwgdGhlIGRldmljZSBkZWJ1Z2ZzIHJvb3QgZW50cnkKKyAqICIvZGVidWdmcy9kcmkvJW1pbm9yJS8iLCBhbmQgZWFjaCBlbnRyeSBpbiBkZWJ1Z2ZzX2xpc3QgYXMKKyAqICIvZGVidWdmcy9kcmkvJW1pbm9yJS8lbmFtZSUiLgorICovCitpbnQgZHJtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAorCQkgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJY2hhciBuYW1lWzY0XTsKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJm1pbm9yLT5kZWJ1Z2ZzX25vZGVzLmxpc3QpOworCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3JfaWQpOworCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcm9vdCk7CisJaWYgKCFtaW5vci0+ZGVidWdmc19yb290KSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvZGVidWdmcy9kcmkvJXNcbiIsIG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGRybV9kZWJ1Z2ZzX2xpc3QsIERSTV9ERUJVR0ZTX0VOVFJJRVMsCisJCQkJICAgICAgIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKKwlpZiAocmV0KSB7CisJCWRlYnVnZnNfcmVtb3ZlKG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QpOworCQltaW5vci0+ZGVidWdmc19yb290ID0gTlVMTDsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGNvcmUgZHJtIGRlYnVnZnMgZmlsZXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkZXYtPmRyaXZlci0+ZGVidWdmc19pbml0KSB7CisJCXJldCA9IGRldi0+ZHJpdmVyLT5kZWJ1Z2ZzX2luaXQobWlub3IpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkRSTTogRHJpdmVyIGZhaWxlZCB0byBpbml0aWFsaXplICIKKwkJCQkgICIvZGVidWdmcy9kcmkuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBSZW1vdmUgYSBsaXN0IG9mIGRlYnVnZnMgZmlsZXMKKyAqCisgKiBccGFyYW0gZmlsZXMgVGhlIGxpc3Qgb2YgZmlsZXMKKyAqIFxwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGZpbGVzCisgKiBccGFyYW0gbWlub3IgVGhlIG1pbm9yIG9mIHdoaWNoIHdlIHNob3VsZCByZW1vdmUgdGhlIGZpbGVzCisgKiBccmV0dXJuIGFsd2F5cyB6ZXJvLgorICoKKyAqIFJlbW92ZSBhbGwgZGVidWdmcyBlbnRyaWVzIGNyZWF0ZWQgYnkgZGVidWdmc19pbml0KCkuCisgKi8KK2ludCBkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisJCQkgICAgIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnE7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKnRtcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHEsICZtaW5vci0+ZGVidWdmc19ub2Rlcy5saXN0KSB7CisJCQl0bXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRybV9pbmZvX25vZGUsIGxpc3QpOworCQkJaWYgKHRtcC0+aW5mb19lbnQgPT0gJmZpbGVzW2ldKSB7CisJCQkJZGVidWdmc19yZW1vdmUodG1wLT5kZW50KTsKKwkJCQlsaXN0X2RlbChwb3MpOworCQkJCWRybV9mcmVlKHRtcCwgc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwKKwkJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKTsKKworLyoqCisgKiBDbGVhbnVwIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gcmVzb3VyY2VzLgorICoKKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyLgorICogXHJldHVybiBhbHdheXMgemVyby4KKyAqCisgKiBSZW1vdmUgYWxsIGRlYnVnZnMgZW50cmllcyBjcmVhdGVkIGJ5IGRlYnVnZnNfaW5pdCgpLgorICovCitpbnQgZHJtX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKworCWlmICghbWlub3ItPmRlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5kcml2ZXItPmRlYnVnZnNfY2xlYW51cCkKKwkJZGV2LT5kcml2ZXItPmRlYnVnZnNfY2xlYW51cChtaW5vcik7CisKKwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoZHJtX2RlYnVnZnNfbGlzdCwgRFJNX0RFQlVHRlNfRU5UUklFUywgbWlub3IpOworCisJZGVidWdmc19yZW1vdmUobWlub3ItPmRlYnVnZnNfcm9vdCk7CisJbWlub3ItPmRlYnVnZnNfcm9vdCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwppbmRleCAxNGM3YTIzLi5lZDMyZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKQEAgLTQ2LDkgKzQ2LDExIEBACiAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NvcmUuaCIKIAorCiBzdGF0aWMgaW50IGRybV92ZXJzaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKQEAgLTE3OCw3ICsxODAsNyBAQAogCiAJLyogQ2xlYXIgQUdQIGluZm9ybWF0aW9uICovCiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJgotCSAgICAhZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQkJIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKIAkJc3RydWN0IGRybV9hZ3BfbWVtICplbnRyeSwgKnRlbXBlOwogCiAJCS8qIFJlbW92ZSBBR1AgcmVzb3VyY2VzLCBidXQgbGVhdmUgZGV2LT5hZ3AKQEAgLTM4Miw2ICszODQsMTMgQEAKIAkJZ290byBlcnJfcDM7CiAJfQogCisJZHJtX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHJpIiwgTlVMTCk7CisJaWYgKCFkcm1fZGVidWdmc19yb290KSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvZGVidWdmcy9kcmlcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBlcnJfcDM7CisJfQorCiAJZHJtX21lbV9pbml0KCk7CiAKIAlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXNcbiIsCkBAIC00MDAsNiArNDA5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkcm1fY29yZV9leGl0KHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaSIsIE5VTEwpOworCWRlYnVnZnNfcmVtb3ZlKGRybV9kZWJ1Z2ZzX3Jvb3QpOwogCWRybV9zeXNmc19kZXN0cm95KCk7CiAKIAl1bnJlZ2lzdGVyX2NocmRldihEUk1fTUFKT1IsICJkcm0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKaW5kZXggZjUyNjYzZS4uZTEzY2I2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKQEAgLTMzNywxNCArMzM3LDEwIEBACiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCWludCByZXRjb2RlOwogCiAJRFJNX0RFQlVHKCJmZCA9ICVkLCBkZXZpY2UgPSAweCVseFxuIiwgZmQsCiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYocHJpdi0+bWlub3ItPmRldmljZSkpOwotCXJldGNvZGUgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKLQlpZiAocmV0Y29kZSA8IDApCi0JCXJldHVybiByZXRjb2RlOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2Zhc3luYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2OTk3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCkBAIC0wLDAgKzEsMzI4IEBACisvKioKKyAqIFxmaWxlIGRybV9pbmZvLmMKKyAqIERSTSBpbmZvIGZpbGUgaW1wbGVtZW50YXRpb25zCisgKgorICogXGF1dGhvciBCZW4gR2FtYXJpIDxiZ2FtYXJpQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogQ3JlYXRlZDogU3VuIERlYyAyMSAxMzowOTo1MCAyMDA4IGJ5IGJnYW1hcmlAZ21haWwuY29tCisgKgorICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IDIwMDggQmVuIEdhbWFyaSA8YmdhbWFyaUBnbWFpbC5jb20+CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImRybVAuaCIKKworLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9uYW1lIiBpcyByZWFkLgorICoKKyAqIFByaW50cyB0aGUgZGV2aWNlIG5hbWUgdG9nZXRoZXIgd2l0aCB0aGUgYnVzIGlkIGlmIGF2YWlsYWJsZS4KKyAqLworaW50IGRybV9uYW1lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSBub2RlLT5taW5vcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gbWlub3ItPm1hc3RlcjsKKworCWlmICghbWFzdGVyKQorCQlyZXR1cm4gMDsKKworCWlmIChtYXN0ZXItPnVuaXF1ZSkgeworCQlzZXFfcHJpbnRmKG0sICIlcyAlcyAlc1xuIiwKKwkJCSAgIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQkgICBwY2lfbmFtZShkZXYtPnBkZXYpLCBtYXN0ZXItPnVuaXF1ZSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQkgICBwY2lfbmFtZShkZXYtPnBkZXYpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi92bSIgaXMgcmVhZC4KKyAqCisgKiBQcmludHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1hcHBpbmdzIGluIGRybV9kZXZpY2U6Om1hcGxpc3QuCisgKi8KK2ludCBkcm1fdm1faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKKworCS8qIEhhcmRjb2RlZCBmcm9tIF9EUk1fRlJBTUVfQlVGRkVSLAorCSAgIF9EUk1fUkVHSVNURVJTLCBfRFJNX1NITSwgX0RSTV9BR1AsIGFuZAorCSAgIF9EUk1fU0NBVFRFUl9HQVRIRVIgYW5kIF9EUk1fQ09OU0lTVEVOVCAqLworCWNvbnN0IGNoYXIgKnR5cGVzW10gPSB7ICJGQiIsICJSRUciLCAiU0hNIiwgIkFHUCIsICJTRyIsICJQQ0kiIH07CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlzZXFfcHJpbnRmKG0sICJzbG90CSBvZmZzZXQJICAgICAgc2l6ZSB0eXBlIGZsYWdzCSBhZGRyZXNzIG10cnJcblxuIik7CisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyX2xpc3QsICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKKwkJbWFwID0gcl9saXN0LT5tYXA7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CisJCWlmIChtYXAtPnR5cGUgPCAwIHx8IG1hcC0+dHlwZSA+IDUpCisJCQl0eXBlID0gIj8/IjsKKwkJZWxzZQorCQkJdHlwZSA9IHR5cGVzW21hcC0+dHlwZV07CisKKwkJc2VxX3ByaW50ZihtLCAiJTRkIDB4JTA4bHggMHglMDhseCAlNC40cyAgMHglMDJ4IDB4JTA4bHggIiwKKwkJCSAgIGksCisJCQkgICBtYXAtPm9mZnNldCwKKwkJCSAgIG1hcC0+c2l6ZSwgdHlwZSwgbWFwLT5mbGFncywKKwkJCSAgICh1bnNpZ25lZCBsb25nKSByX2xpc3QtPnVzZXJfdG9rZW4pOworCQlpZiAobWFwLT5tdHJyIDwgMCkKKwkJCXNlcV9wcmludGYobSwgIm5vbmVcbiIpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKG0sICIlNGRcbiIsIG1hcC0+bXRycik7CisJCWkrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vcXVldWVzIiBpcyByZWFkLgorICovCitpbnQgZHJtX3F1ZXVlc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWludCBpOworCXN0cnVjdCBkcm1fcXVldWUgKnE7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2VxX3ByaW50ZihtLCAiICBjdHgvZmxhZ3MgICB1c2UgICBmaW4iCisJCSAgICIgICBibGsvcncvcndmICB3YWl0ICAgIGZsdXNoZWQJICAgcXVldWVkIgorCQkgICAiICAgICAgbG9ja3NcblxuIik7CisJZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVfY291bnQ7IGkrKykgeworCQlxID0gZGV2LT5xdWV1ZWxpc3RbaV07CisJCWF0b21pY19pbmMoJnEtPnVzZV9jb3VudCk7CisJCXNlcV9wcmludGYobSwgICAiJTVkLzB4JTAzeCAlNWQgJTVkIgorCQkJICAgIiAlNWQvJWMlYy8lYyVjJWMgJTVaZFxuIiwKKwkJCSAgIGksCisJCQkgICBxLT5mbGFncywKKwkJCSAgIGF0b21pY19yZWFkKCZxLT51c2VfY291bnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmZpbmFsaXphdGlvbiksCisJCQkgICBhdG9taWNfcmVhZCgmcS0+YmxvY2tfY291bnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3JlYWQpID8gJ3InIDogJy0nLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3dyaXRlKSA/ICd3JyA6ICctJywKKwkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPnJlYWRfcXVldWUpID8gJ3InIDogJy0nLAorCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+d3JpdGVfcXVldWUpID8gJ3cnIDogJy0nLAorCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+Zmx1c2hfcXVldWUpID8gJ2YnIDogJy0nLAorCQkJICAgRFJNX0JVRkNPVU5UKCZxLT53YWl0bGlzdCkpOworCQlhdG9taWNfZGVjKCZxLT51c2VfY291bnQpOworCX0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9idWZzIiBpcyByZWFkLgorICovCitpbnQgZHJtX2J1ZnNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYTsKKwlpbnQgaSwgc2VnX3BhZ2VzOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRtYSA9IGRldi0+ZG1hOworCWlmICghZG1hKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKG0sICIgbyAgICAgc2l6ZSBjb3VudCAgZnJlZQkgc2VncyBwYWdlcyAgICBrQlxuXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDw9IERSTV9NQVhfT1JERVI7IGkrKykgeworCQlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkgeworCQkJc2VnX3BhZ2VzID0gZG1hLT5idWZzW2ldLnNlZ19jb3VudCAqICgxIDw8IGRtYS0+YnVmc1tpXS5wYWdlX29yZGVyKTsKKwkJCXNlcV9wcmludGYobSwgIiUyZCAlOGQgJTVkICU1ZCAlNWQgJTVkICU1bGRcbiIsCisJCQkJICAgaSwKKwkJCQkgICBkbWEtPmJ1ZnNbaV0uYnVmX3NpemUsCisJCQkJICAgZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCwKKwkJCQkgICBhdG9taWNfcmVhZCgmZG1hLT5idWZzW2ldLmZyZWVsaXN0LmNvdW50KSwKKwkJCQkgICBkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50LAorCQkJCSAgIHNlZ19wYWdlcywKKwkJCQkgICBzZWdfcGFnZXMgKiBQQUdFX1NJWkUgLyAxMDI0KTsKKwkJfQorCX0KKwlzZXFfcHJpbnRmKG0sICJcbiIpOworCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7CisJCWlmIChpICYmICEoaSAlIDMyKSkKKwkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCXNlcV9wcmludGYobSwgIiAlZCIsIGRtYS0+YnVmbGlzdFtpXS0+bGlzdCk7CisJfQorCXNlcV9wcmludGYobSwgIlxuIik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vdmJsYW5rIiBpcyByZWFkLgorICovCitpbnQgZHJtX3ZibGFua19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWludCBjcnRjOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWZvciAoY3J0YyA9IDA7IGNydGMgPCBkZXYtPm51bV9jcnRjczsgY3J0YysrKSB7CisJCXNlcV9wcmludGYobSwgIkNSVEMgJWQgZW5hYmxlOiAgICAgJWRcbiIsCisJCQkgICBjcnRjLCBhdG9taWNfcmVhZCgmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pKTsKKwkJc2VxX3ByaW50ZihtLCAiQ1JUQyAlZCBjb3VudGVyOiAgICAlZFxuIiwKKwkJCSAgIGNydGMsIGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKSk7CisJCXNlcV9wcmludGYobSwgIkNSVEMgJWQgbGFzdCB3YWl0OiAgJWRcbiIsCisJCQkgICBjcnRjLCBkZXYtPmxhc3RfdmJsYW5rX3dhaXRbY3J0Y10pOworCQlzZXFfcHJpbnRmKG0sICJDUlRDICVkIGluIG1vZGVzZXQ6ICVkXG4iLAorCQkJICAgY3J0YywgZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vY2xpZW50cyIgaXMgcmVhZC4KKyAqCisgKi8KK2ludCBkcm1fY2xpZW50c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1fZmlsZSAqcHJpdjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlzZXFfcHJpbnRmKG0sICJhIGRldglwaWQgICAgdWlkCW1hZ2ljCSAgaW9jdGxzXG5cbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJpdiwgJmRldi0+ZmlsZWxpc3QsIGxoZWFkKSB7CisJCXNlcV9wcmludGYobSwgIiVjICUzZCAlNWQgJTVkICUxMHUgJTEwbHVcbiIsCisJCQkgICBwcml2LT5hdXRoZW50aWNhdGVkID8gJ3knIDogJ24nLAorCQkJICAgcHJpdi0+bWlub3ItPmluZGV4LAorCQkJICAgcHJpdi0+cGlkLAorCQkJICAgcHJpdi0+dWlkLCBwcml2LT5tYWdpYywgcHJpdi0+aW9jdGxfY291bnQpOworCX0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgZHJtX2dlbV9vbmVfbmFtZV9pbmZvKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcHRyOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGRhdGE7CisKKwlzZXFfcHJpbnRmKG0sICJuYW1lICVkIHNpemUgJXpkXG4iLCBvYmotPm5hbWUsIG9iai0+c2l6ZSk7CisKKwlzZXFfcHJpbnRmKG0sICIlNmQgJTh6ZCAlN2QgJThkXG4iLAorCQkgICBvYmotPm5hbWUsIG9iai0+c2l6ZSwKKwkJICAgYXRvbWljX3JlYWQoJm9iai0+aGFuZGxlY291bnQucmVmY291bnQpLAorCQkgICBhdG9taWNfcmVhZCgmb2JqLT5yZWZjb3VudC5yZWZjb3VudCkpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2dlbV9uYW1lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisKKwlzZXFfcHJpbnRmKG0sICIgIG5hbWUgICAgIHNpemUgaGFuZGxlcyByZWZjb3VudFxuIik7CisJaWRyX2Zvcl9lYWNoKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgZHJtX2dlbV9vbmVfbmFtZV9pbmZvLCBtKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9nZW1fb2JqZWN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkKiBkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisKKwlzZXFfcHJpbnRmKG0sICIlZCBvYmplY3RzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfY291bnQpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBvYmplY3QgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPm9iamVjdF9tZW1vcnkpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBwaW5uZWRcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9jb3VudCkpOworCXNlcV9wcmludGYobSwgIiVkIHBpbiBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX21lbW9yeSkpOworCXNlcV9wcmludGYobSwgIiVkIGd0dCBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+Z3R0X21lbW9yeSkpOworCXNlcV9wcmludGYobSwgIiVkIGd0dCB0b3RhbFxuIiwgZGV2LT5ndHRfdG90YWwpOworCXJldHVybiAwOworfQorCisjaWYgRFJNX0RFQlVHX0NPREUKKworaW50IGRybV92bWFfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAqcHQ7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisjaWYgZGVmaW5lZChfX2kzODZfXykKKwl1bnNpZ25lZCBpbnQgcGdwcm90OworI2VuZGlmCisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2VxX3ByaW50ZihtLCAidm1hIHVzZSBjb3VudDogJWQsIGhpZ2hfbWVtb3J5ID0gJXAsIDB4JTA4bGx4XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZGV2LT52bWFfY291bnQpLAorCQkgICBoaWdoX21lbW9yeSwgKHU2NCl2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocHQsICZkZXYtPnZtYWxpc3QsIGhlYWQpIHsKKwkJdm1hID0gcHQtPnZtYTsKKwkJaWYgKCF2bWEpCisJCQljb250aW51ZTsKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIlxuJTVkIDB4JTA4bHgtMHglMDhseCAlYyVjJWMlYyVjJWMgMHglMDhseDAwMCIsCisJCQkgICBwdC0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMgPyAneCcgOiAnLScsCisJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUgPyAncycgOiAncCcsCisJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEID8gJ2wnIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX0lPID8gJ2knIDogJy0nLAorCQkJICAgdm1hLT52bV9wZ29mZik7CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorCQlwZ3Byb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJc2VxX3ByaW50ZihtLCAiICVjJWMlYyVjJWMlYyVjJWMlYyIsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9QUkVTRU5UID8gJ3AnIDogJy0nLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUlcgPyAndycgOiAncicsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9VU0VSID8gJ3UnIDogJ3MnLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUFdUID8gJ3QnIDogJ2InLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUENEID8gJ3UnIDogJ2MnLAorCQkJICAgcGdwcm90ICYgX1BBR0VfQUNDRVNTRUQgPyAnYScgOiAnLScsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9ESVJUWSA/ICdkJyA6ICctJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX1BTRSA/ICdtJyA6ICdrJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX0dMT0JBTCA/ICdnJyA6ICdsJyk7CisjZW5kaWYKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCmluZGV4IDhkZjg0OWYuLjliM2M1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCkBAIC0zNyw1OCArMzcsMTA1IEBACiAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogCi1zdGF0aWMgaW50IGRybV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBkcm1fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2NsaWVudHNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV9xdWV1ZXNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2J1ZnNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV92YmxhbmtfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci0jaWYgRFJNX0RFQlVHX0NPREUKLXN0YXRpYyBpbnQgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemF0aW9uLCBldGMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgogICogUHJvYyBmaWxlIGxpc3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7Ci0JY29uc3QgY2hhciAqbmFtZTsJLyoqPCBmaWxlIG5hbWUgKi8KLQlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJCS8qKjwgcHJvYyBjYWxsYmFjayovCi0JdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KLX0gZHJtX3Byb2NfbGlzdFtdID0geworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGRybV9wcm9jX2xpc3RbXSA9IHsKIAl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKLQl7Im1lbSIsIGRybV9tZW1faW5mbywgMH0sCiAJeyJ2bSIsIGRybV92bV9pbmZvLCAwfSwKIAl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvLCAwfSwKIAl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mbywgMH0sCiAJeyJidWZzIiwgZHJtX2J1ZnNfaW5mbywgMH0sCi0JeyJ2YmxhbmsiLCBkcm1fdmJsYW5rX2luZm8sIDB9LAogCXsiZ2VtX25hbWVzIiwgZHJtX2dlbV9uYW1lX2luZm8sIERSSVZFUl9HRU19LAogCXsiZ2VtX29iamVjdHMiLCBkcm1fZ2VtX29iamVjdF9pbmZvLCBEUklWRVJfR0VNfSwKICNpZiBEUk1fREVCVUdfQ09ERQotCXsidm1hIiwgZHJtX3ZtYV9pbmZvfSwKKwl7InZtYSIsIGRybV92bWFfaW5mbywgMH0sCiAjZW5kaWYKIH07Ci0KICNkZWZpbmUgRFJNX1BST0NfRU5UUklFUyBBUlJBWV9TSVpFKGRybV9wcm9jX2xpc3QpCiAKK3N0YXRpYyBpbnQgZHJtX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSogbm9kZSA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbm9kZS0+aW5mb19lbnQtPnNob3csIG5vZGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcm1fcHJvY19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX3Byb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKwogLyoqCi0gKiBJbml0aWFsaXplIHRoZSBEUkkgcHJvYyBmaWxlc3lzdGVtIGZvciBhIGRldmljZS4KKyAqIEluaXRpYWxpemUgYSBnaXZlbiBzZXQgb2YgcHJvYyBmaWxlcyBmb3IgYSBkZXZpY2UKICAqCi0gKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCi0gKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlci4KKyAqIFxwYXJhbSBmaWxlcyBUaGUgYXJyYXkgb2YgZmlsZXMgdG8gY3JlYXRlCisgKiBccGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBmaWxlcyBnaXZlbgorICogXHBhcmFtIHJvb3QgRFJJIHByb2MgZGlyIGVudHJ5LgorICogXHBhcmFtIG1pbm9yIGRldmljZSBtaW5vciBudW1iZXIKKyAqIFxyZXR1cm4gWmVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlCisgKgorICogQ3JlYXRlIGEgZ2l2ZW4gc2V0IG9mIHByb2MgZmlsZXMgcmVwcmVzZW50ZWQgYnkgYW4gYXJyYXkgb2YKKyAqIGdkbV9wcm9jX2xpc3RzIGluIHRoZSBnaXZlbiByb290IGRpcmVjdG9yeS4KKyAqLworaW50IGRybV9wcm9jX2NyZWF0ZV9maWxlcyhzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqZmlsZXMsIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290LCBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqdG1wOworCWNoYXIgbmFtZVs2NF07CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXUzMiBmZWF0dXJlcyA9IGZpbGVzW2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKworCQl0bXAgPSBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwgX0RSTV9EUklWRVIpOworCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShmaWxlc1tpXS5uYW1lLCBTX0lGUkVHIHwgU19JUlVHTywgcm9vdCk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLyVzLyVzXG4iLAorCQkJCSAgbmFtZSwgZmlsZXNbaV0ubmFtZSk7CisJCQlkcm1fZnJlZSh0bXAsIHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksCisJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZW50LT5wcm9jX2ZvcHMgPSAmZHJtX3Byb2NfZm9wczsKKwkJZW50LT5kYXRhID0gdG1wOworCQl0bXAtPm1pbm9yID0gbWlub3I7CisJCXRtcC0+aW5mb19lbnQgPSAmZmlsZXNbaV07CisJCWxpc3RfYWRkKCYodG1wLT5saXN0KSwgJihtaW5vci0+cHJvY19ub2Rlcy5saXN0KSk7CisJfQorCXJldHVybiAwOworCitmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5wcm9jX3Jvb3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgRFJJIHByb2MgZmlsZXN5c3RlbSBmb3IgYSBkZXZpY2UKKyAqCisgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UKKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyCiAgKiBccGFyYW0gcm9vdCBEUkkgcHJvYyBkaXIgZW50cnkuCiAgKiBccGFyYW0gZGV2X3Jvb3QgcmVzdWx0aW5nIERSSSBkZXZpY2UgcHJvYyBkaXIgZW50cnkuCiAgKiBccmV0dXJuIHJvb3QgZW50cnkgcG9pbnRlciBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCkBAIC0xMDEsMzQgKzE0OCwyNCBAQAogCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQgaSwgaiwgcmV0OwogCWNoYXIgbmFtZVs2NF07CisJaW50IHJldDsKIAorCUlOSVRfTElTVF9IRUFEKCZtaW5vci0+cHJvY19ub2Rlcy5saXN0KTsKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yX2lkKTsKLQltaW5vci0+ZGV2X3Jvb3QgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3QpOwotCWlmICghbWlub3ItPmRldl9yb290KSB7CisJbWlub3ItPnByb2Nfcm9vdCA9IHByb2NfbWtkaXIobmFtZSwgcm9vdCk7CisJaWYgKCFtaW5vci0+cHJvY19yb290KSB7CiAJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvJXNcbiIsIG5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykgewotCQl1MzIgZmVhdHVyZXMgPSBkcm1fcHJvY19saXN0W2ldLmRyaXZlcl9mZWF0dXJlczsKLQotCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgotCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCi0JCQljb250aW51ZTsKLQotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCi0JCQkJCVNfSUZSRUcgfCBTX0lSVUdPLCBtaW5vci0+ZGV2X3Jvb3QpOwotCQlpZiAoIWVudCkgewotCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKLQkJCQkgIG5hbWUsIGRybV9wcm9jX2xpc3RbaV0ubmFtZSk7Ci0JCQlyZXQgPSAtMTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQllbnQtPnJlYWRfcHJvYyA9IGRybV9wcm9jX2xpc3RbaV0uZjsKLQkJZW50LT5kYXRhID0gbWlub3I7CisJcmV0ID0gZHJtX3Byb2NfY3JlYXRlX2ZpbGVzKGRybV9wcm9jX2xpc3QsIERSTV9QUk9DX0VOVFJJRVMsCisJCQkJICAgIG1pbm9yLT5wcm9jX3Jvb3QsIG1pbm9yKTsKKwlpZiAocmV0KSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOworCQltaW5vci0+cHJvY19yb290ID0gTlVMTDsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGNvcmUgZHJtIHByb2MgZmlsZXNcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChkZXYtPmRyaXZlci0+cHJvY19pbml0KSB7CkBAIC0xMzYsMTkgKzE3MywzMiBAQAogCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoIkRSTTogRHJpdmVyIGZhaWxlZCB0byBpbml0aWFsaXplICIKIAkJCQkgICIvcHJvYy9kcmkuXG4iKTsKLQkJCWdvdG8gZmFpbDsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKLSBmYWlsOgorfQogCi0JZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAotCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKLQltaW5vci0+ZGV2X3Jvb3QgPSBOVUxMOwotCXJldHVybiByZXQ7CitpbnQgZHJtX3Byb2NfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpxOworCXN0cnVjdCBkcm1faW5mb19ub2RlICp0bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBxLCAmbWlub3ItPnByb2Nfbm9kZXMubGlzdCkgeworCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkcm1faW5mb19ub2RlLCBsaXN0KTsKKwkJCWlmICh0bXAtPmluZm9fZW50ID09ICZmaWxlc1tpXSkgeworCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGZpbGVzW2ldLm5hbWUsCisJCQkJCQkgIG1pbm9yLT5wcm9jX3Jvb3QpOworCQkJCWxpc3RfZGVsKHBvcyk7CisJCQkJZHJtX2ZyZWUodG1wLCBzaXplb2Yoc3RydWN0IGRybV9pbmZvX25vZGUpLAorCQkJCQkgX0RSTV9EUklWRVIpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE2NCw1NzAgKzIxNCwxOSBAQAogaW50IGRybV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgaTsKIAljaGFyIG5hbWVbNjRdOwogCi0JaWYgKCFyb290IHx8ICFtaW5vci0+ZGV2X3Jvb3QpCisJaWYgKCFyb290IHx8ICFtaW5vci0+cHJvY19yb290KQogCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPmRyaXZlci0+cHJvY19jbGVhbnVwKQogCQlkZXYtPmRyaXZlci0+cHJvY19jbGVhbnVwKG1pbm9yKTsKIAotCWZvciAoaSA9IDA7IGkgPCBEUk1fUFJPQ19FTlRSSUVTOyBpKyspCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwgbWlub3ItPmRldl9yb290KTsKKwlkcm1fcHJvY19yZW1vdmVfZmlsZXMoZHJtX3Byb2NfbGlzdCwgRFJNX1BST0NfRU5UUklFUywgbWlub3IpOworCiAJc3ByaW50ZihuYW1lLCAiJWQiLCBtaW5vci0+aW5kZXgpOwogCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vbmFtZSIgaXMgcmVhZC4KLSAqCi0gKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCi0gKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCi0gKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCi0gKiBccGFyYW0gcmVxdWVzdCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLgotICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCi0gKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCi0gKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICoKLSAqIFByaW50cyB0aGUgZGV2aWNlIG5hbWUgdG9nZXRoZXIgd2l0aCB0aGUgYnVzIGlkIGlmIGF2YWlsYWJsZS4KLSAqLwotc3RhdGljIGludCBkcm1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gbWlub3ItPm1hc3RlcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFtYXN0ZXIpCi0JCXJldHVybiAwOwotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JaWYgKG1hc3Rlci0+dW5pcXVlKSB7Ci0JCURSTV9QUk9DX1BSSU5UKCIlcyAlcyAlc1xuIiwKLQkJCSAgICAgICBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAotCQkJICAgICAgIHBjaV9uYW1lKGRldi0+cGRldiksIG1hc3Rlci0+dW5pcXVlKTsKLQl9IGVsc2UgewotCQlEUk1fUFJPQ19QUklOVCgiJXMgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCi0JCQkgICAgICAgcGNpX25hbWUoZGV2LT5wZGV2KSk7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vdm0iIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqCi0gKiBQcmludHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1hcHBpbmdzIGluIGRybV9kZXZpY2U6Om1hcGxpc3QuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX192bV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCBsZW4gPSAwOwotCXN0cnVjdCBkcm1fbWFwICptYXA7Ci0Jc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwotCi0JLyogSGFyZGNvZGVkIGZyb20gX0RSTV9GUkFNRV9CVUZGRVIsCi0JICAgX0RSTV9SRUdJU1RFUlMsIF9EUk1fU0hNLCBfRFJNX0FHUCwgYW5kCi0JICAgX0RSTV9TQ0FUVEVSX0dBVEhFUiBhbmQgX0RSTV9DT05TSVNURU5UICovCi0JY29uc3QgY2hhciAqdHlwZXNbXSA9IHsgIkZCIiwgIlJFRyIsICJTSE0iLCAiQUdQIiwgIlNHIiwgIlBDSSIgfTsKLQljb25zdCBjaGFyICp0eXBlOwotCWludCBpOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0KLQlEUk1fUFJPQ19QUklOVCgic2xvdAkgb2Zmc2V0CSAgICAgIHNpemUgdHlwZSBmbGFncwkgIgotCQkgICAgICAgImFkZHJlc3MgbXRyclxuXG4iKTsKLQlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJfbGlzdCwgJmRldi0+bWFwbGlzdCwgaGVhZCkgewotCQltYXAgPSByX2xpc3QtPm1hcDsKLQkJaWYgKCFtYXApCi0JCQljb250aW51ZTsKLQkJaWYgKG1hcC0+dHlwZSA8IDAgfHwgbWFwLT50eXBlID4gNSkKLQkJCXR5cGUgPSAiPz8iOwotCQllbHNlCi0JCQl0eXBlID0gdHlwZXNbbWFwLT50eXBlXTsKLQkJRFJNX1BST0NfUFJJTlQoIiU0ZCAweCUwOGx4IDB4JTA4bHggJTQuNHMgIDB4JTAyeCAweCUwOGx4ICIsCi0JCQkgICAgICAgaSwKLQkJCSAgICAgICBtYXAtPm9mZnNldCwKLQkJCSAgICAgICBtYXAtPnNpemUsIHR5cGUsIG1hcC0+ZmxhZ3MsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIHJfbGlzdC0+dXNlcl90b2tlbik7Ci0JCWlmIChtYXAtPm10cnIgPCAwKSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgibm9uZVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiJTRkXG4iLCBtYXAtPm10cnIpOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotLyoqCi0gKiBTaW1wbHkgY2FsbHMgX3ZtX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KLSAqLwotc3RhdGljIGludCBkcm1fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fdm1faW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9xdWV1ZXMiIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqLwotc3RhdGljIGludCBkcm1fX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHJtX3F1ZXVlICpxOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0KLQlEUk1fUFJPQ19QUklOVCgiICBjdHgvZmxhZ3MgICB1c2UgICBmaW4iCi0JCSAgICAgICAiICAgYmxrL3J3L3J3ZiAgd2FpdCAgICBmbHVzaGVkCSAgIHF1ZXVlZCIKLQkJICAgICAgICIgICAgICBsb2Nrc1xuXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZV9jb3VudDsgaSsrKSB7Ci0JCXEgPSBkZXYtPnF1ZXVlbGlzdFtpXTsKLQkJYXRvbWljX2luYygmcS0+dXNlX2NvdW50KTsKLQkJRFJNX1BST0NfUFJJTlRfUkVUKGF0b21pY19kZWMoJnEtPnVzZV9jb3VudCksCi0JCQkJICAgIiU1ZC8weCUwM3ggJTVkICU1ZCIKLQkJCQkgICAiICU1ZC8lYyVjLyVjJWMlYyAlNVpkXG4iLAotCQkJCSAgIGksCi0JCQkJICAgcS0+ZmxhZ3MsCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPnVzZV9jb3VudCksCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmZpbmFsaXphdGlvbiksCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX2NvdW50KSwKLQkJCQkgICBhdG9taWNfcmVhZCgmcS0+YmxvY2tfcmVhZCkgPyAncicgOiAnLScsCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3dyaXRlKSA/ICd3JyA6ICctJywKLQkJCQkgICB3YWl0cXVldWVfYWN0aXZlKCZxLT5yZWFkX3F1ZXVlKSA/ICdyJyA6ICctJywKLQkJCQkgICB3YWl0cXVldWVfYWN0aXZlKCZxLT4KLQkJCQkJCSAgICB3cml0ZV9xdWV1ZSkgPyAndycgOiAnLScsCi0JCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+Ci0JCQkJCQkgICAgZmx1c2hfcXVldWUpID8gJ2YnIDogJy0nLAotCQkJCSAgIERSTV9CVUZDT1VOVCgmcS0+d2FpdGxpc3QpKTsKLQkJYXRvbWljX2RlYygmcS0+dXNlX2NvdW50KTsKLQl9Ci0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotLyoqCi0gKiBTaW1wbHkgY2FsbHMgX3F1ZXVlc19pbmZvKCkgd2hpbGUgaG9sZGluZyB0aGUgZHJtX2RldmljZTo6c3RydWN0X211dGV4IGxvY2suCi0gKi8KLXN0YXRpYyBpbnQgZHJtX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX19xdWV1ZXNfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9idWZzIiBpcyByZWFkLgotICoKLSAqIFxwYXJhbSBidWYgb3V0cHV0IGJ1ZmZlci4KLSAqIFxwYXJhbSBzdGFydCBzdGFydCBvZiBvdXRwdXQgZGF0YS4KLSAqIFxwYXJhbSBvZmZzZXQgcmVxdWVzdGVkIHN0YXJ0IG9mZnNldC4KLSAqIFxwYXJhbSByZXF1ZXN0IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCi0gKiBccGFyYW0gZW9mIHdoZXRoZXIgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJldHVybi4KLSAqIFxwYXJhbSBkYXRhIHByaXZhdGUgZGF0YS4KLSAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX19idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwotCWludCBpOwotCi0JaWYgKCFkbWEgfHwgb2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCURSTV9QUk9DX1BSSU5UKCIgbyAgICAgc2l6ZSBjb3VudCAgZnJlZQkgc2VncyBwYWdlcyAgICBrQlxuXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDw9IERSTV9NQVhfT1JERVI7IGkrKykgewotCQlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkKLQkJCURSTV9QUk9DX1BSSU5UKCIlMmQgJThkICU1ZCAlNWQgJTVkICU1ZCAlNWxkXG4iLAotCQkJCSAgICAgICBpLAotCQkJCSAgICAgICBkbWEtPmJ1ZnNbaV0uYnVmX3NpemUsCi0JCQkJICAgICAgIGRtYS0+YnVmc1tpXS5idWZfY291bnQsCi0JCQkJICAgICAgIGF0b21pY19yZWFkKCZkbWEtPmJ1ZnNbaV0KLQkJCQkJCSAgIC5mcmVlbGlzdC5jb3VudCksCi0JCQkJICAgICAgIGRtYS0+YnVmc1tpXS5zZWdfY291bnQsCi0JCQkJICAgICAgIGRtYS0+YnVmc1tpXS5zZWdfY291bnQKLQkJCQkgICAgICAgKiAoMSA8PCBkbWEtPmJ1ZnNbaV0ucGFnZV9vcmRlciksCi0JCQkJICAgICAgIChkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50Ci0JCQkJCSogKDEgPDwgZG1hLT5idWZzW2ldLnBhZ2Vfb3JkZXIpKQotCQkJCSAgICAgICAqIFBBR0VfU0laRSAvIDEwMjQpOwotCX0KLQlEUk1fUFJPQ19QUklOVCgiXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewotCQlpZiAoaSAmJiAhKGkgJSAzMikpCi0JCQlEUk1fUFJPQ19QUklOVCgiXG4iKTsKLQkJRFJNX1BST0NfUFJJTlQoIiAlZCIsIGRtYS0+YnVmbGlzdFtpXS0+bGlzdCk7Ci0JfQotCURSTV9QUk9DX1BSSU5UKCJcbiIpOwotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF9idWZzX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KLSAqLwotc3RhdGljIGludCBkcm1fYnVmc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fYnVmc19pbmZvKGJ1Ziwgc3RhcnQsIG9mZnNldCwgcmVxdWVzdCwgZW9mLCBkYXRhKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL3ZibGFuayIgaXMgcmVhZC4KLSAqCi0gKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCi0gKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCi0gKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCi0gKiBccGFyYW0gcmVxdWVzdCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLgotICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCi0gKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCi0gKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICovCi1zdGF0aWMgaW50IGRybV9fdmJsYW5rX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlpbnQgY3J0YzsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JZm9yIChjcnRjID0gMDsgY3J0YyA8IGRldi0+bnVtX2NydGNzOyBjcnRjKyspIHsKLQkJRFJNX1BST0NfUFJJTlQoIkNSVEMgJWQgZW5hYmxlOiAgICAgJWRcbiIsCi0JCQkgICAgICAgY3J0YywgYXRvbWljX3JlYWQoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSk7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGNvdW50ZXI6ICAgICVkXG4iLAotCQkJICAgICAgIGNydGMsIGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKSk7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGxhc3Qgd2FpdDogICVkXG4iLAotCQkJICAgICAgIGNydGMsIGRldi0+bGFzdF92Ymxhbmtfd2FpdFtjcnRjXSk7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGluIG1vZGVzZXQ6ICVkXG4iLAotCQkJICAgICAgIGNydGMsIGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSk7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF92YmxhbmtfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9tdXRleCBsb2NrLgotICovCi1zdGF0aWMgaW50IGRybV92YmxhbmtfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXQgPSBkcm1fX3ZibGFua19pbmZvKGJ1Ziwgc3RhcnQsIG9mZnNldCwgcmVxdWVzdCwgZW9mLCBkYXRhKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL2NsaWVudHMiIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqLwotc3RhdGljIGludCBkcm1fX2NsaWVudHNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCBsZW4gPSAwOwotCXN0cnVjdCBkcm1fZmlsZSAqcHJpdjsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JRFJNX1BST0NfUFJJTlQoImEgZGV2CXBpZCAgICB1aWQJbWFnaWMJICBpb2N0bHNcblxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwcml2LCAmZGV2LT5maWxlbGlzdCwgbGhlYWQpIHsKLQkJRFJNX1BST0NfUFJJTlQoIiVjICUzZCAlNWQgJTVkICUxMHUgJTEwbHVcbiIsCi0JCQkgICAgICAgcHJpdi0+YXV0aGVudGljYXRlZCA/ICd5JyA6ICduJywKLQkJCSAgICAgICBwcml2LT5taW5vci0+aW5kZXgsCi0JCQkgICAgICAgcHJpdi0+cGlkLAotCQkJICAgICAgIHByaXYtPnVpZCwgcHJpdi0+bWFnaWMsIHByaXYtPmlvY3RsX2NvdW50KTsKLQl9Ci0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotLyoqCi0gKiBTaW1wbHkgY2FsbHMgX2NsaWVudHNfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9tdXRleCBsb2NrLgotICovCi1zdGF0aWMgaW50IGRybV9jbGllbnRzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX19jbGllbnRzX2luZm8oYnVmLCBzdGFydCwgb2Zmc2V0LCByZXF1ZXN0LCBlb2YsIGRhdGEpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBkcm1fZ2VtX25hbWVfaW5mb19kYXRhIHsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKmJ1ZjsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBlb2Y7Ci19OwotCi1zdGF0aWMgaW50IGRybV9nZW1fb25lX25hbWVfaW5mbyhpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsKLQlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSAgICpuaWQgPSBkYXRhOwotCi0JRFJNX0lORk8oIm5hbWUgJWQgc2l6ZSAlemRcbiIsIG9iai0+bmFtZSwgb2JqLT5zaXplKTsKLQlpZiAobmlkLT5lb2YpCi0JCXJldHVybiAwOwotCi0JbmlkLT5sZW4gKz0gc3ByaW50ZigmbmlkLT5idWZbbmlkLT5sZW5dLAotCQkJICAgICIlNmQgJTh6ZCAlN2QgJThkXG4iLAotCQkJICAgIG9iai0+bmFtZSwgb2JqLT5zaXplLAotCQkJICAgIGF0b21pY19yZWFkKCZvYmotPmhhbmRsZWNvdW50LnJlZmNvdW50KSwKLQkJCSAgICBhdG9taWNfcmVhZCgmb2JqLT5yZWZjb3VudC5yZWZjb3VudCkpOwotCWlmIChuaWQtPmxlbiA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCW5pZC0+ZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRybV9nZW1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0Jc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgbmlkOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQluaWQubGVuID0gc3ByaW50ZihidWYsICIgIG5hbWUgICAgIHNpemUgaGFuZGxlcyByZWZjb3VudFxuIik7Ci0JbmlkLmJ1ZiA9IGJ1ZjsKLQluaWQuZW9mID0gMDsKLQlpZHJfZm9yX2VhY2goJmRldi0+b2JqZWN0X25hbWVfaWRyLCBkcm1fZ2VtX29uZV9uYW1lX2luZm8sICZuaWQpOwotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCWlmIChuaWQubGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIG5pZC5sZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0c1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X2NvdW50KSk7Ci0JRFJNX1BST0NfUFJJTlQoIiVkIG9iamVjdCBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X21lbW9yeSkpOwotCURSTV9QUk9DX1BSSU5UKCIlZCBwaW5uZWRcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9jb3VudCkpOwotCURSTV9QUk9DX1BSSU5UKCIlZCBwaW4gYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9tZW1vcnkpKTsKLQlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5ndHRfbWVtb3J5KSk7Ci0JRFJNX1BST0NfUFJJTlQoIiVkIGd0dCB0b3RhbFxuIiwgZGV2LT5ndHRfdG90YWwpOwotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi0jaWYgRFJNX0RFQlVHX0NPREUKLQotc3RhdGljIGludCBkcm1fX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAqcHQ7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0jaWYgZGVmaW5lZChfX2kzODZfXykKLQl1bnNpZ25lZCBpbnQgcGdwcm90OwotI2VuZGlmCi0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCURSTV9QUk9DX1BSSU5UKCJ2bWEgdXNlIGNvdW50OiAlZCwgaGlnaF9tZW1vcnkgPSAlcCwgMHglMDhseFxuIiwKLQkJICAgICAgIGF0b21pY19yZWFkKCZkZXYtPnZtYV9jb3VudCksCi0JCSAgICAgICBoaWdoX21lbW9yeSwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdCwgJmRldi0+dm1hbGlzdCwgaGVhZCkgewotCQlpZiAoISh2bWEgPSBwdC0+dm1hKSkKLQkJCWNvbnRpbnVlOwotCQlEUk1fUFJPQ19QUklOVCgiXG4lNWQgMHglMDhseC0weCUwOGx4ICVjJWMlYyVjJWMlYyAweCUwOGx4MDAwIiwKLQkJCSAgICAgICBwdC0+cGlkLAotCQkJICAgICAgIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgICAgdm1hLT52bV9lbmQsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX1JFQUQgPyAncicgOiAnLScsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSA/ICdzJyA6ICdwJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEID8gJ2wnIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9JTyA/ICdpJyA6ICctJywKLQkJCSAgICAgICB2bWEtPnZtX3Bnb2ZmKTsKLQotI2lmIGRlZmluZWQoX19pMzg2X18pCi0JCXBncHJvdCA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpOwotCQlEUk1fUFJPQ19QUklOVCgiICVjJWMlYyVjJWMlYyVjJWMlYyIsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFJFU0VOVCA/ICdwJyA6ICctJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9SVyA/ICd3JyA6ICdyJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9VU0VSID8gJ3UnIDogJ3MnLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX1BXVCA/ICd0JyA6ICdiJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9QQ0QgPyAndScgOiAnYycsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfQUNDRVNTRUQgPyAnYScgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfRElSVFkgPyAnZCcgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFNFID8gJ20nIDogJ2snLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX0dMT0JBTCA/ICdnJyA6ICdsJyk7Ci0jZW5kaWYKLQkJRFJNX1BST0NfUFJJTlQoIlxuIik7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX192bWFfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwppbmRleCA3YzhiMTViLi40OGYzM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwpAQCAtNTAsNiArNTAsNyBAQAogCiBzdHJ1Y3QgY2xhc3MgKmRybV9jbGFzczsKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHJtX3Byb2Nfcm9vdDsKK3N0cnVjdCBkZW50cnkgKmRybV9kZWJ1Z2ZzX3Jvb3Q7CiAKIHN0YXRpYyBpbnQgZHJtX21pbm9yX2dldF9pZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdHlwZSkKIHsKQEAgLTMxMyw3ICszMTQsMTUgQEAKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCX0gZWxzZQotCQluZXdfbWlub3ItPmRldl9yb290ID0gTlVMTDsKKwkJbmV3X21pbm9yLT5wcm9jX3Jvb3QgPSBOVUxMOworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJcmV0ID0gZHJtX2RlYnVnZnNfaW5pdChuZXdfbWlub3IsIG1pbm9yX2lkLCBkcm1fZGVidWdmc19yb290KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRFJNOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSAvZGVidWdmcy9kcmkuXG4iKTsKKwkJZ290byBlcnJfZzI7CisJfQorI2VuZGlmCiAKIAlyZXQgPSBkcm1fc3lzZnNfZGV2aWNlX2FkZChuZXdfbWlub3IpOwogCWlmIChyZXQpIHsKQEAgLTQ1MSw2ICs0NjAsMTAgQEAKIAogCWlmIChtaW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZKQogCQlkcm1fcHJvY19jbGVhbnVwKG1pbm9yLCBkcm1fcHJvY19yb290KTsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlkcm1fZGVidWdmc19jbGVhbnVwKG1pbm9yKTsKKyNlbmRpZgorCiAJZHJtX3N5c2ZzX2RldmljZV9yZW1vdmUobWlub3IpOwogCiAJaWRyX3JlbW92ZSgmZHJtX21pbm9yc19pZHIsIG1pbm9yLT5pbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggNWFhNjc4MC4uMTg2ZDA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMzU5LDggKzM1OSw4IEBACiAJRFJNX0RFQlVHKCJhZGRpbmcgXCIlc1wiIHRvIHN5c2ZzXG4iLAogCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAKLQlzbnByaW50Zihjb25uZWN0b3ItPmtkZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImNhcmQlZC0lcyIsCi0JCSBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCWRldl9zZXRfbmFtZSgmY29ubmVjdG9yLT5rZGV2LCAiY2FyZCVkLSVzIiwKKwkJICAgICBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY29ubmVjdG9yLT5rZGV2KTsKIAogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNzkzY2JhMy4uNTFjNWEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAogCSAgaTkxNV9nZW0ubyBcCiAJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKLQkgIGk5MTVfZ2VtX3Byb2MubyBcCisJICBpOTE1X2dlbV9kZWJ1Z2ZzLm8gXAogCSAgaTkxNV9nZW1fdGlsaW5nLm8gXAogCSAgaW50ZWxfZGlzcGxheS5vIFwKIAkgIGludGVsX2NydC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDZkMjFiOWUuLmE4MThiMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtNDEsNyArNDEsNiBAQAogaW50IGk5MTVfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwogCXUzMiBhY3RoZF9yZWcgPSBJU19JOTY1RyhkZXYpID8gQUNUSERfSTk2NSA6IEFDVEhEOwogCXUzMiBsYXN0X2FjdGhkID0gSTkxNV9SRUFEKGFjdGhkX3JlZyk7CkBAIC01OCw4ICs1NywxMiBAQAogCQlpZiAocmluZy0+c3BhY2UgPj0gbikKIAkJCXJldHVybiAwOwogCi0JCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKLQkJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJCWlmIChkZXYtPnByaW1hcnktPm1hc3RlcikgeworCQkJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKKwkJCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOworCQl9CisKIAogCQlpZiAocmluZy0+aGVhZCAhPSBsYXN0X2hlYWQpCiAJCQlpID0gMDsKQEAgLTM1Niw3ICszNTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9lbWl0X2NtZHMoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBfX3VzZXIgKiBidWZmZXIsIGludCBkd29yZHMpCitzdGF0aWMgaW50IGk5MTVfZW1pdF9jbWRzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgKmJ1ZmZlciwgaW50IGR3b3JkcykKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKQEAgLTM3MCw4ICszNzMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBkd29yZHM7KSB7CiAJCWludCBjbWQsIHN6OwogCi0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZjbWQsICZidWZmZXJbaV0sIHNpemVvZihjbWQpKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQljbWQgPSBidWZmZXJbaV07CiAKIAkJaWYgKChzeiA9IHZhbGlkYXRlX2NtZChjbWQpKSA9PSAwIHx8IGkgKyBzeiA+IGR3b3JkcykKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzc5LDExICszODEsNyBAQAogCQlPVVRfUklORyhjbWQpOwogCiAJCXdoaWxlICgrK2ksIC0tc3opIHsKLQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZjbWQsICZidWZmZXJbaV0sCi0JCQkJCQkJIHNpemVvZihjbWQpKSkgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJT1VUX1JJTkcoY21kKTsKKwkJCU9VVF9SSU5HKGJ1ZmZlcltpXSk7CiAJCX0KIAl9CiAKQEAgLTM5NywxNyArMzk1LDEzIEBACiAKIGludAogaTkxNV9lbWl0X2JveChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMsCisJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveGVzLAogCSAgICAgIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGJveDsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3ggPSBib3hlc1tpXTsKIAlSSU5HX0xPQ0FMUzsKIAotCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZib3gsICZib3hlc1tpXSwgc2l6ZW9mKGJveCkpKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQogCWlmIChib3gueTIgPD0gYm94LnkxIHx8IGJveC54MiA8PSBib3gueDEgfHwgYm94LnkyIDw9IDAgfHwgYm94LngyIDw9IDApIHsKIAkJRFJNX0VSUk9SKCJCYWQgYm94ICVkLCVkLi4lZCwlZFxuIiwKIAkJCSAgYm94LngxLCBib3gueTEsIGJveC54MiwgYm94LnkyKTsKQEAgLTQ2MCw3ICs0NTQsOSBAQAogfQogCiBzdGF0aWMgaW50IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgIGRybV9pOTE1X2NtZGJ1ZmZlcl90ICogY21kKQorCQkJCSAgIGRybV9pOTE1X2NtZGJ1ZmZlcl90ICpjbWQsCisJCQkJICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKKwkJCQkgICB2b2lkICpjbWRidWYpCiB7CiAJaW50IG5ib3ggPSBjbWQtPm51bV9jbGlwcmVjdHM7CiAJaW50IGkgPSAwLCBjb3VudCwgcmV0OwpAQCAtNDc2LDEzICs0NzIsMTMgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWlmIChpIDwgbmJveCkgewotCQkJcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNtZC0+Y2xpcHJlY3RzLCBpLAorCQkJcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKIAkJCQkJICAgIGNtZC0+RFIxLCBjbWQtPkRSNCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlyZXQgPSBpOTE1X2VtaXRfY21kcyhkZXYsIChpbnQgX191c2VyICopY21kLT5idWYsIGNtZC0+c3ogLyA0KTsKKwkJcmV0ID0gaTkxNV9lbWl0X2NtZHMoZGV2LCBjbWRidWYsIGNtZC0+c3ogLyA0KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNDkyLDEwICs0ODgsMTAgQEAKIH0KIAogc3RhdGljIGludCBpOTE1X2Rpc3BhdGNoX2JhdGNoYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICAgZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqIGJhdGNoKQorCQkJCSAgICAgZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqIGJhdGNoLAorCQkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cykKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzID0gYmF0Y2gtPmNsaXByZWN0czsKIAlpbnQgbmJveCA9IGJhdGNoLT5udW1fY2xpcHJlY3RzOwogCWludCBpID0gMCwgY291bnQ7CiAJUklOR19MT0NBTFM7CkBAIC01MTEsNyArNTA3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWlmIChpIDwgbmJveCkgewotCQkJaW50IHJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBib3hlcywgaSwKKwkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgY2xpcHJlY3RzLCBpLAogCQkJCQkJYmF0Y2gtPkRSMSwgYmF0Y2gtPkRSNCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC02MjYsNiArNjIyLDcgQEAKIAkgICAgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqYmF0Y2ggPSBkYXRhOwogCWludCByZXQ7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyA9IE5VTEw7CiAKIAlpZiAoIWRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlcikgewogCQlEUk1fRVJST1IoIkJhdGNoYnVmZmVyIGlvY3RsIGRpc2FibGVkXG4iKTsKQEAgLTYzNywxNyArNjM0LDM1IEBACiAKIAlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKLQlpZiAoYmF0Y2gtPm51bV9jbGlwcmVjdHMgJiYgRFJNX1ZFUklGWUFSRUFfUkVBRChiYXRjaC0+Y2xpcHJlY3RzLAotCQkJCQkJICAgICAgIGJhdGNoLT5udW1fY2xpcHJlY3RzICoKLQkJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYmF0Y2gtPm51bV9jbGlwcmVjdHMpIHsKKwkJY2xpcHJlY3RzID0gZHJtX2NhbGxvYyhiYXRjaC0+bnVtX2NsaXByZWN0cywKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwKKwkJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsIGJhdGNoLT5jbGlwcmVjdHMsCisJCQkJICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBmYWlsX2ZyZWU7CisJfQogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCk7CisJcmV0ID0gaTkxNV9kaXNwYXRjaF9iYXRjaGJ1ZmZlcihkZXYsIGJhdGNoLCBjbGlwcmVjdHMpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKHNhcmVhX3ByaXYpCiAJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCitmYWlsX2ZyZWU6CisJZHJtX2ZyZWUoY2xpcHJlY3RzLAorCQkgYmF0Y2gtPm51bV9jbGlwcmVjdHMgKiBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpLAorCQkgRFJNX01FTV9EUklWRVIpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjU5LDYgKzY3NCw4IEBACiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTkxNV9zYXJlYV90ICopCiAJICAgIG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9pOTE1X2NtZGJ1ZmZlcl90ICpjbWRidWYgPSBkYXRhOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgPSBOVUxMOworCXZvaWQgKmJhdGNoX2RhdGE7CiAJaW50IHJldDsKIAogCURSTV9ERUJVRygiaTkxNSBjbWRidWZmZXIsIGJ1ZiAlcCBzeiAlZCBjbGlwcmVjdHMgJWRcbiIsCkBAIC02NjYsMjUgKzY4Myw1MCBAQAogCiAJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JaWYgKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAmJgotCSAgICBEUk1fVkVSSUZZQVJFQV9SRUFEKGNtZGJ1Zi0+Y2xpcHJlY3RzLAotCQkJCWNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpIHsKLQkJRFJNX0VSUk9SKCJGYXVsdCBhY2Nlc3NpbmcgY2xpcHJlY3RzXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYmF0Y2hfZGF0YSA9IGRybV9hbGxvYyhjbWRidWYtPnN6LCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGJhdGNoX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihiYXRjaF9kYXRhLCBjbWRidWYtPmJ1ZiwgY21kYnVmLT5zeik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfYmF0Y2hfZnJlZTsKKworCWlmIChjbWRidWYtPm51bV9jbGlwcmVjdHMpIHsKKwkJY2xpcHJlY3RzID0gZHJtX2NhbGxvYyhjbWRidWYtPm51bV9jbGlwcmVjdHMsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NsaXBfcmVjdCksCisJCQkJICAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJaWYgKGNsaXByZWN0cyA9PSBOVUxMKQorCQkJZ290byBmYWlsX2JhdGNoX2ZyZWU7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLCBjbWRidWYtPmNsaXByZWN0cywKKwkJCQkgICAgIGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAqCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBmYWlsX2NsaXBfZnJlZTsKIAl9CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOworCXJldCA9IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKGRldiwgY21kYnVmLCBjbGlwcmVjdHMsIGJhdGNoX2RhdGEpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlciBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfYmF0Y2hfZnJlZTsKIAl9CiAKIAlpZiAoc2FyZWFfcHJpdikKIAkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7Ci0JcmV0dXJuIDA7CisKK2ZhaWxfYmF0Y2hfZnJlZToKKwlkcm1fZnJlZShiYXRjaF9kYXRhLCBjbWRidWYtPnN6LCBEUk1fTUVNX0RSSVZFUik7CitmYWlsX2NsaXBfZnJlZToKKwlkcm1fZnJlZShjbGlwcmVjdHMsCisJCSBjbWRidWYtPm51bV9jbGlwcmVjdHMgKiBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpLAorCQkgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpOTE1X2ZsaXBfYnVmcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggYjI5M2VmMC4uZGNiOTFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0xNTAsOCArMTUwLDEwIEBACiAJLmdldF9yZWdfb2ZzID0gZHJtX2NvcmVfZ2V0X3JlZ19vZnMsCiAJLm1hc3Rlcl9jcmVhdGUgPSBpOTE1X21hc3Rlcl9jcmVhdGUsCiAJLm1hc3Rlcl9kZXN0cm95ID0gaTkxNV9tYXN0ZXJfZGVzdHJveSwKLQkucHJvY19pbml0ID0gaTkxNV9nZW1fcHJvY19pbml0LAotCS5wcm9jX2NsZWFudXAgPSBpOTE1X2dlbV9wcm9jX2NsZWFudXAsCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJLmRlYnVnZnNfaW5pdCA9IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdCwKKwkuZGVidWdmc19jbGVhbnVwID0gaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwLAorI2VuZGlmCiAJLmdlbV9pbml0X29iamVjdCA9IGk5MTVfZ2VtX2luaXRfb2JqZWN0LAogCS5nZW1fZnJlZV9vYmplY3QgPSBpOTE1X2dlbV9mcmVlX29iamVjdCwKIAkuZ2VtX3ZtX29wcyA9ICZpOTE1X2dlbV92bV9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBkNmNjOTg2Li5jMTY4NWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTQwNCw3ICs0MDQsOCBAQAogCS8qKiBBR1AgbWVtb3J5IHN0cnVjdHVyZSBmb3Igb3VyIEdUVCBiaW5kaW5nLiAqLwogCURSTV9BR1BfTUVNICphZ3BfbWVtOwogCi0Jc3RydWN0IHBhZ2UgKipwYWdlX2xpc3Q7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlpbnQgcGFnZXNfcmVmY291bnQ7CiAKIAkvKioKIAkgKiBDdXJyZW50IG9mZnNldCBvZiB0aGUgb2JqZWN0IGluIEdUVCBzcGFjZS4KQEAgLTUxOSw3ICs1MjAsNyBAQAogZXh0ZXJuIGxvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gaW50IGk5MTVfZW1pdF9ib3goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzLAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3hlcywKIAkJCSBpbnQgaSwgaW50IERSMSwgaW50IERSNCk7CiAKIC8qIGk5MTVfaXJxLmMgKi8KQEAgLTYwNCw4ICs2MDUsNiBAQAogaW50IGk5MTVfZ2VtX2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIHZvaWQgaTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWludCBpOTE1X2dlbV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwotdm9pZCBpOTE1X2dlbV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogaW50IGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCk7CkBAIC02NDksNiArNjQ4LDEwIEBACiAJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKIHZvaWQgaTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSk7CiAKKy8qIGk5MTVfZGVidWdmcy5jICovCitpbnQgaTkxNV9nZW1fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKK3ZvaWQgaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwogLyogaTkxNV9zdXNwZW5kLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC03ODQsMTUgKzc4NywyMSBAQAogCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUyMiB8fCBcCiAJCSAgICAgSVNfR000NShkZXYpKQogCisjZGVmaW5lIElTX0lHREcoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDAxKQorI2RlZmluZSBJU19JR0RHTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweGEwMTEpCisjZGVmaW5lIElTX0lHRChkZXYpIChJU19JR0RHKGRldikgfHwgSVNfSUdER00oZGV2KSkKKwogI2RlZmluZSBJU19HMzMoZGV2KSAgICAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUMyIHx8CVwKIAkJCShkZXYpLT5wY2lfZGV2aWNlID09IDB4MjlCMiB8fAlcCi0JCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5RDIpCisJCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5RDIgfHwgIFwKKwkJCShJU19JR0QoZGV2KSkpCiAKICNkZWZpbmUgSVNfSTlYWChkZXYpIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IElTX0k5NDVHKGRldikgfHwgXAogCQkgICAgICBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0czMyhkZXYpKQogCiAjZGVmaW5lIElTX01PQklMRShkZXYpIChJU19JODMwKGRldikgfHwgSVNfSTg1WChkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IFwKLQkJCUlTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSkKKwkJCUlTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSB8fCBcCisJCQlJU19JR0QoZGV2KSkKIAogI2RlZmluZSBJOTE1X05FRURfR0ZYX0hXUyhkZXYpIChJU19HMzMoZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgSVNfRzRYKGRldikpCiAvKiBXaXRoIHRoZSA5NDUgYW5kIGxhdGVyLCBZIHRpbGluZyBnb3QgYWRqdXN0ZWQgc28gdGhhdCBpdCB3YXMgMzIgMTI4LWJ5dGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDM3NDI3ZTQuLmI1MmNiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDMsOCArNDMsOCBAQAogCQkJCQkJICAgICB1aW50NjRfdCBvZmZzZXQsCiAJCQkJCQkgICAgIHVpbnQ2NF90IHNpemUpOwogc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19mdWxsX2NwdV9yZWFkX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKIAkJCQkJICAgdW5zaWduZWQgYWxpZ25tZW50KTsKQEAgLTEzNiw2ICsxMzYsMjI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitmYXN0X3NobWVtX3JlYWQoc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJbG9mZl90IHBhZ2VfYmFzZSwgaW50IHBhZ2Vfb2Zmc2V0LAorCQljaGFyIF9fdXNlciAqZGF0YSwKKwkJaW50IGxlbmd0aCkKK3sKKwljaGFyIF9faW9tZW0gKnZhZGRyOworCWludCByZXQ7CisKKwl2YWRkciA9IGttYXBfYXRvbWljKHBhZ2VzW3BhZ2VfYmFzZSA+PiBQQUdFX1NISUZUXSwgS01fVVNFUjApOworCWlmICh2YWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyhkYXRhLCB2YWRkciArIHBhZ2Vfb2Zmc2V0LCBsZW5ndGgpOworCWt1bm1hcF9hdG9taWModmFkZHIsIEtNX1VTRVIwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzbG93X3NobWVtX2NvcHkoc3RydWN0IHBhZ2UgKmRzdF9wYWdlLAorCQlpbnQgZHN0X29mZnNldCwKKwkJc3RydWN0IHBhZ2UgKnNyY19wYWdlLAorCQlpbnQgc3JjX29mZnNldCwKKwkJaW50IGxlbmd0aCkKK3sKKwljaGFyICpkc3RfdmFkZHIsICpzcmNfdmFkZHI7CisKKwlkc3RfdmFkZHIgPSBrbWFwX2F0b21pYyhkc3RfcGFnZSwgS01fVVNFUjApOworCWlmIChkc3RfdmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcmNfdmFkZHIgPSBrbWFwX2F0b21pYyhzcmNfcGFnZSwgS01fVVNFUjEpOworCWlmIChzcmNfdmFkZHIgPT0gTlVMTCkgeworCQlrdW5tYXBfYXRvbWljKGRzdF92YWRkciwgS01fVVNFUjApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoZHN0X3ZhZGRyICsgZHN0X29mZnNldCwgc3JjX3ZhZGRyICsgc3JjX29mZnNldCwgbGVuZ3RoKTsKKworCWt1bm1hcF9hdG9taWMoc3JjX3ZhZGRyLCBLTV9VU0VSMSk7CisJa3VubWFwX2F0b21pYyhkc3RfdmFkZHIsIEtNX1VTRVIwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhc3Qgc2htZW0gcHJlYWQgcGF0aCwgd2hpY2ggYXR0ZW1wdHMgdG8gY29weV9mcm9tX3VzZXIgZGlyZWN0bHkKKyAqIGZyb20gdGhlIGJhY2tpbmcgcGFnZXMgb2YgdGhlIG9iamVjdCB0byB0aGUgdXNlcidzIGFkZHJlc3Mgc3BhY2UuICBPbiBhCisgKiBmYXVsdCwgaXQgZmFpbHMgc28gd2UgY2FuIGZhbGwgYmFjayB0byBpOTE1X2dlbV9zaG1lbV9wd3JpdGVfc2xvdygpLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9zaG1lbV9wcmVhZF9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkICphcmdzLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXNzaXplX3QgcmVtYWluOworCWxvZmZfdCBvZmZzZXQsIHBhZ2VfYmFzZTsKKwljaGFyIF9fdXNlciAqdXNlcl9kYXRhOworCWludCBwYWdlX29mZnNldCwgcGFnZV9sZW5ndGg7CisJaW50IHJldDsKKworCXVzZXJfZGF0YSA9IChjaGFyIF9fdXNlciAqKSAodWludHB0cl90KSBhcmdzLT5kYXRhX3B0cjsKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX3VubG9jazsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfY3B1X3JlYWRfZG9tYWluX3JhbmdlKG9iaiwgYXJncy0+b2Zmc2V0LAorCQkJCQkJCWFyZ3MtPnNpemUpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX3B1dF9wYWdlczsKKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAqCisJCSAqIHBhZ2VfYmFzZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVydHVyZQorCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJcGFnZV9iYXNlID0gKG9mZnNldCAmIH4oUEFHRV9TSVpFLTEpKTsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCisJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OworCisJCXJldCA9IGZhc3Rfc2htZW1fcmVhZChvYmpfcHJpdi0+cGFnZXMsCisJCQkJICAgICAgcGFnZV9iYXNlLCBwYWdlX29mZnNldCwKKwkJCQkgICAgICB1c2VyX2RhdGEsIHBhZ2VfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQl1c2VyX2RhdGEgKz0gcGFnZV9sZW5ndGg7CisJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKKwl9CisKK2ZhaWxfcHV0X3BhZ2VzOgorCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKK2ZhaWxfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWxsYmFjayBzaG1lbSBwcmVhZCBwYXRoLCB3aGljaCBhbGxvY2F0ZXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIGluIGtlcm5lbCBzcGFjZSB0byBjb3B5X3RvX3VzZXIgaW50byBvdXRzaWRlIG9mIHRoZSBzdHJ1Y3RfbXV0ZXgsIHNvIHdlCisgKiBjYW4gY29weSBvdXQgb2YgdGhlIG9iamVjdCdzIGJhY2tpbmcgcGFnZXMgd2hpbGUgaG9sZGluZyB0aGUgc3RydWN0IG11dGV4CisgKiBhbmQgbm90IHRha2UgcGFnZSBmYXVsdHMuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3NobWVtX3ByZWFkX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3QgcGFnZSAqKnVzZXJfcGFnZXM7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldCwgcGlubmVkX3BhZ2VzLCBpOworCWxvZmZfdCBmaXJzdF9kYXRhX3BhZ2UsIGxhc3RfZGF0YV9wYWdlLCBudW1fcGFnZXM7CisJaW50IHNobWVtX3BhZ2VfaW5kZXgsIHNobWVtX3BhZ2Vfb2Zmc2V0OworCWludCBkYXRhX3BhZ2VfaW5kZXgsICBkYXRhX3BhZ2Vfb2Zmc2V0OworCWludCBwYWdlX2xlbmd0aDsKKwlpbnQgcmV0OworCXVpbnQ2NF90IGRhdGFfcHRyID0gYXJncy0+ZGF0YV9wdHI7CisKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJLyogUGluIHRoZSB1c2VyIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIGRhdGEuICBXZSBjYW4ndCBmYXVsdCB3aGlsZQorCSAqIGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleCwgeWV0IHdlIHdhbnQgdG8gaG9sZCBpdCB3aGlsZQorCSAqIGRlcmVmZXJlbmNpbmcgdGhlIHVzZXIgZGF0YS4KKwkgKi8KKwlmaXJzdF9kYXRhX3BhZ2UgPSBkYXRhX3B0ciAvIFBBR0VfU0laRTsKKwlsYXN0X2RhdGFfcGFnZSA9IChkYXRhX3B0ciArIGFyZ3MtPnNpemUgLSAxKSAvIFBBR0VfU0laRTsKKwludW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAtIGZpcnN0X2RhdGFfcGFnZSArIDE7CisKKwl1c2VyX3BhZ2VzID0ga2NhbGxvYyhudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzZXJfcGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcGlubmVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sICh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCisJCQkJICAgICAgbnVtX3BhZ2VzLCAwLCAwLCB1c2VyX3BhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChwaW5uZWRfcGFnZXMgPCBudW1fcGFnZXMpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBmYWlsX3B1dF91c2VyX3BhZ2VzOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF91bmxvY2s7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NwdV9yZWFkX2RvbWFpbl9yYW5nZShvYmosIGFyZ3MtPm9mZnNldCwKKwkJCQkJCQlhcmdzLT5zaXplKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBzaG1lbV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgd2l0aGluIHNobWVtIGZpbGUKKwkJICogc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UgaW4gc2htZW0gZmlsZQorCQkgKiBkYXRhX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciBpbiBnZXRfdXNlcl9wYWdlcyByZXR1cm4KKwkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJc2htZW1fcGFnZV9pbmRleCA9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2VfaW5kZXggPSBkYXRhX3B0ciAvIFBBR0VfU0laRSAtIGZpcnN0X2RhdGFfcGFnZTsKKwkJZGF0YV9wYWdlX29mZnNldCA9IGRhdGFfcHRyICYgflBBR0VfTUFTSzsKKworCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKChzaG1lbV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gc2htZW1fcGFnZV9vZmZzZXQ7CisJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKKworCQlyZXQgPSBzbG93X3NobWVtX2NvcHkodXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIGRhdGFfcGFnZV9vZmZzZXQsCisJCQkJICAgICAgb2JqX3ByaXYtPnBhZ2VzW3NobWVtX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIHNobWVtX3BhZ2Vfb2Zmc2V0LAorCQkJCSAgICAgIHBhZ2VfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQlkYXRhX3B0ciArPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOworCX0KKworZmFpbF9wdXRfcGFnZXM6CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOworZmFpbF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitmYWlsX3B1dF91c2VyX3BhZ2VzOgorCWZvciAoaSA9IDA7IGkgPCBwaW5uZWRfcGFnZXM7IGkrKykgeworCQlTZXRQYWdlRGlydHkodXNlcl9wYWdlc1tpXSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZSh1c2VyX3BhZ2VzW2ldKTsKKwl9CisJa2ZyZWUodXNlcl9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgogICoKQEAgLTE0OCw4ICszNjYsNiBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlzc2l6ZV90IHJlYWQ7Ci0JbG9mZl90IG9mZnNldDsKIAlpbnQgcmV0OwogCiAJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOwpAQCAtMTY3LDMzICszODMsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jcHVfcmVhZF9kb21haW5fcmFuZ2Uob2JqLCBhcmdzLT5vZmZzZXQsCi0JCQkJCQkJYXJncy0+c2l6ZSk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKLQotCXJlYWQgPSB2ZnNfcmVhZChvYmotPmZpbHAsIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCi0JCQlhcmdzLT5zaXplLCAmb2Zmc2V0KTsKLQlpZiAocmVhZCAhPSBhcmdzLT5zaXplKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlpZiAocmVhZCA8IDApCi0JCQlyZXR1cm4gcmVhZDsKLQkJZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXJldCA9IGk5MTVfZ2VtX3NobWVtX3ByZWFkX2Zhc3QoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CisJaWYgKHJldCAhPSAwKQorCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wcmVhZF9zbG93KGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOwogCiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qIFRoaXMgaXMgdGhlIGZhc3Qgd3JpdGUgcGF0aCB3aGljaCBjYW5ub3QgaGFuZGxlCkBAIC0yMjMsMjkgKzQxOSw1MSBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1zbG93X3VzZXJfd3JpdGUoc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcsCi0JCWxvZmZfdCBwYWdlX2Jhc2UsIGludCBwYWdlX29mZnNldCwKLQkJY2hhciBfX3VzZXIgKnVzZXJfZGF0YSwKLQkJaW50IGxlbmd0aCkKK3Nsb3dfa2VybmVsX3dyaXRlKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkgIGxvZmZfdCBndHRfYmFzZSwgaW50IGd0dF9vZmZzZXQsCisJCSAgc3RydWN0IHBhZ2UgKnVzZXJfcGFnZSwgaW50IHVzZXJfb2Zmc2V0LAorCQkgIGludCBsZW5ndGgpCiB7Ci0JY2hhciBfX2lvbWVtICp2YWRkcjsKKwljaGFyICpzcmNfdmFkZHIsICpkc3RfdmFkZHI7CiAJdW5zaWduZWQgbG9uZyB1bndyaXR0ZW47CiAKLQl2YWRkciA9IGlvX21hcHBpbmdfbWFwX3djKG1hcHBpbmcsIHBhZ2VfYmFzZSk7Ci0JaWYgKHZhZGRyID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwotCXVud3JpdHRlbiA9IF9fY29weV9mcm9tX3VzZXIodmFkZHIgKyBwYWdlX29mZnNldCwKLQkJCQkgICAgIHVzZXJfZGF0YSwgbGVuZ3RoKTsKLQlpb19tYXBwaW5nX3VubWFwKHZhZGRyKTsKKwlkc3RfdmFkZHIgPSBpb19tYXBwaW5nX21hcF9hdG9taWNfd2MobWFwcGluZywgZ3R0X2Jhc2UpOworCXNyY192YWRkciA9IGttYXBfYXRvbWljKHVzZXJfcGFnZSwgS01fVVNFUjEpOworCXVud3JpdHRlbiA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZShkc3RfdmFkZHIgKyBndHRfb2Zmc2V0LAorCQkJCQkJICAgICAgc3JjX3ZhZGRyICsgdXNlcl9vZmZzZXQsCisJCQkJCQkgICAgICBsZW5ndGgpOworCWt1bm1hcF9hdG9taWMoc3JjX3ZhZGRyLCBLTV9VU0VSMSk7CisJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoZHN0X3ZhZGRyKTsKIAlpZiAodW53cml0dGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK2Zhc3Rfc2htZW1fd3JpdGUoc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJIGxvZmZfdCBwYWdlX2Jhc2UsIGludCBwYWdlX29mZnNldCwKKwkJIGNoYXIgX191c2VyICpkYXRhLAorCQkgaW50IGxlbmd0aCkKK3sKKwljaGFyIF9faW9tZW0gKnZhZGRyOworCisJdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlc1twYWdlX2Jhc2UgPj4gUEFHRV9TSElGVF0sIEtNX1VTRVIwKTsKKwlpZiAodmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2YWRkciArIHBhZ2Vfb2Zmc2V0LCBkYXRhLCBsZW5ndGgpOworCWt1bm1hcF9hdG9taWModmFkZHIsIEtNX1VTRVIwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhc3QgcHdyaXRlIHBhdGgsIHdoZXJlIHdlIGNvcHkgdGhlIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUKKyAqIHVzZXIgaW50byB0aGUgR1RULCB1bmNhY2hlZC4KKyAqLwogc3RhdGljIGludAotaTkxNV9nZW1fZ3R0X3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAotCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTI3Myw3ICs0OTEsNiBAQAogCiAJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OwotCW9ial9wcml2LT5kaXJ0eSA9IDE7CiAKIAl3aGlsZSAocmVtYWluID4gMCkgewogCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCkBAIC0yOTIsMTYgKzUwOSwxMSBAQAogCQkJCSAgICAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCk7CiAKIAkJLyogSWYgd2UgZ2V0IGEgZmF1bHQgd2hpbGUgY29weWluZyBkYXRhLCB0aGVuIChwcmVzdW1hYmx5KSBvdXIKLQkJICogc291cmNlIHBhZ2UgaXNuJ3QgYXZhaWxhYmxlLiBJbiB0aGlzIGNhc2UsIHVzZSB0aGUKLQkJICogbm9uLWF0b21pYyBmdW5jdGlvbgorCQkgKiBzb3VyY2UgcGFnZSBpc24ndCBhdmFpbGFibGUuICBSZXR1cm4gdGhlIGVycm9yIGFuZCB3ZSdsbAorCQkgKiByZXRyeSBpbiB0aGUgc2xvdyBwYXRoLgogCQkgKi8KLQkJaWYgKHJldCkgewotCQkJcmV0ID0gc2xvd191c2VyX3dyaXRlIChkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCi0JCQkJCSAgICAgICBwYWdlX2Jhc2UsIHBhZ2Vfb2Zmc2V0LAotCQkJCQkgICAgICAgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZmFpbDsKLQkJfQorCQlpZiAocmV0KQorCQkJZ290byBmYWlsOwogCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKIAkJdXNlcl9kYXRhICs9IHBhZ2VfbGVuZ3RoOwpAQCAtMzE1LDM5ICs1MjcsMjg0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBUaGlzIGlzIHRoZSBmYWxsYmFjayBHVFQgcHdyaXRlIHBhdGgsIHdoaWNoIHVzZXMgZ2V0X3VzZXJfcGFnZXMgdG8gcGluCisgKiB0aGUgbWVtb3J5IGFuZCBtYXBzIGl0IHVzaW5nIGttYXBfYXRvbWljIGZvciBjb3B5aW5nLgorICoKKyAqIFRoaXMgY29kZSByZXN1bHRlZCBpbiB4MTFwZXJmIC1yZ2IxMHRleHQgY29uc3VtaW5nIGFib3V0IDEwJSBtb3JlIENQVQorICogdGhhbiB1c2luZyBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qgb24gYSBHNDUgKDMyLWJpdCkuCisgKi8KIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX3NobWVtX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCi0JCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoraTkxNV9nZW1fZ3R0X3B3cml0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogeworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IGd0dF9wYWdlX2Jhc2UsIG9mZnNldDsKKwlsb2ZmX3QgZmlyc3RfZGF0YV9wYWdlLCBsYXN0X2RhdGFfcGFnZSwgbnVtX3BhZ2VzOworCWxvZmZfdCBwaW5uZWRfcGFnZXMsIGk7CisJc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJaW50IGd0dF9wYWdlX29mZnNldCwgZGF0YV9wYWdlX29mZnNldCwgZGF0YV9wYWdlX2luZGV4LCBwYWdlX2xlbmd0aDsKIAlpbnQgcmV0OwotCWxvZmZfdCBvZmZzZXQ7Ci0Jc3NpemVfdCB3cml0dGVuOworCXVpbnQ2NF90IGRhdGFfcHRyID0gYXJncy0+ZGF0YV9wdHI7CisKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJLyogUGluIHRoZSB1c2VyIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIGRhdGEuICBXZSBjYW4ndCBmYXVsdCB3aGlsZQorCSAqIGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleCwgYW5kIGFsbCBvZiB0aGUgcHdyaXRlIGltcGxlbWVudGF0aW9ucworCSAqIHdhbnQgdG8gaG9sZCBpdCB3aGlsZSBkZXJlZmVyZW5jaW5nIHRoZSB1c2VyIGRhdGEuCisJICovCisJZmlyc3RfZGF0YV9wYWdlID0gZGF0YV9wdHIgLyBQQUdFX1NJWkU7CisJbGFzdF9kYXRhX3BhZ2UgPSAoZGF0YV9wdHIgKyBhcmdzLT5zaXplIC0gMSkgLyBQQUdFX1NJWkU7CisJbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCisJdXNlcl9wYWdlcyA9IGtjYWxsb2MobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICh1c2VyX3BhZ2VzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXBpbm5lZF9wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCAodWludHB0cl90KWFyZ3MtPmRhdGFfcHRyLAorCQkJCSAgICAgIG51bV9wYWdlcywgMCwgMCwgdXNlcl9wYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAocGlubmVkX3BhZ2VzIDwgbnVtX3BhZ2VzKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X3VucGluX3BhZ2VzOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5waW5fb2JqZWN0OworCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBndHRfcGFnZV9iYXNlID0gcGFnZSBvZmZzZXQgd2l0aGluIGFwZXJ0dXJlCisJCSAqIGd0dF9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZSBpbiBhcGVydHVyZQorCQkgKiBkYXRhX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciBpbiBnZXRfdXNlcl9wYWdlcyByZXR1cm4KKwkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJZ3R0X3BhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKKwkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisKKwkJcGFnZV9sZW5ndGggPSByZW1haW47CisJCWlmICgoZ3R0X3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBndHRfcGFnZV9vZmZzZXQ7CisJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKKworCQlyZXQgPSBzbG93X2tlcm5lbF93cml0ZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCisJCQkJCWd0dF9wYWdlX2Jhc2UsIGd0dF9wYWdlX29mZnNldCwKKwkJCQkJdXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAorCQkJCQlkYXRhX3BhZ2Vfb2Zmc2V0LAorCQkJCQlwYWdlX2xlbmd0aCk7CisKKwkJLyogSWYgd2UgZ2V0IGEgZmF1bHQgd2hpbGUgY29weWluZyBkYXRhLCB0aGVuIChwcmVzdW1hYmx5KSBvdXIKKwkJICogc291cmNlIHBhZ2UgaXNuJ3QgYXZhaWxhYmxlLiAgUmV0dXJuIHRoZSBlcnJvciBhbmQgd2UnbGwKKwkJICogcmV0cnkgaW4gdGhlIHNsb3cgcGF0aC4KKwkJICovCisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bnBpbl9vYmplY3Q7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQgKz0gcGFnZV9sZW5ndGg7CisJCWRhdGFfcHRyICs9IHBhZ2VfbGVuZ3RoOworCX0KKworb3V0X3VucGluX29iamVjdDoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitvdXRfdW5waW5fcGFnZXM6CisJZm9yIChpID0gMDsgaSA8IHBpbm5lZF9wYWdlczsgaSsrKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UodXNlcl9wYWdlc1tpXSk7CisJa2ZyZWUodXNlcl9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhc3Qgc2htZW0gcHdyaXRlIHBhdGgsIHdoaWNoIGF0dGVtcHRzIHRvIGRpcmVjdGx5CisgKiBjb3B5X2Zyb21fdXNlciBpbnRvIHRoZSBrbWFwcGVkIHBhZ2VzIGJhY2tpbmcgdGhlIG9iamVjdC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldCwgcGFnZV9iYXNlOworCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CisJaW50IHBhZ2Vfb2Zmc2V0LCBwYWdlX2xlbmd0aDsKKwlpbnQgcmV0OworCisJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfdW5sb2NrOworCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgMSk7Ci0JaWYgKHJldCkgewotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfcHV0X3BhZ2VzOwogCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKwlvYmpfcHJpdi0+ZGlydHkgPSAxOwogCi0Jd3JpdHRlbiA9IHZmc193cml0ZShvYmotPmZpbHAsCi0JCQkgICAgKGNoYXIgX191c2VyICopKHVpbnRwdHJfdCkgYXJncy0+ZGF0YV9wdHIsCi0JCQkgICAgYXJncy0+c2l6ZSwgJm9mZnNldCk7Ci0JaWYgKHdyaXR0ZW4gIT0gYXJncy0+c2l6ZSkgewotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJaWYgKHdyaXR0ZW4gPCAwKQotCQkJcmV0dXJuIHdyaXR0ZW47Ci0JCWVsc2UKLQkJCXJldHVybiAtRUlOVkFMOworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKKwkJICoKKwkJICogcGFnZV9iYXNlID0gcGFnZSBvZmZzZXQgd2l0aGluIGFwZXJ0dXJlCisJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCisJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCisJCSAqLworCQlwYWdlX2Jhc2UgPSAob2Zmc2V0ICYgfihQQUdFX1NJWkUtMSkpOworCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOworCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CisKKwkJcmV0ID0gZmFzdF9zaG1lbV93cml0ZShvYmpfcHJpdi0+cGFnZXMsCisJCQkJICAgICAgIHBhZ2VfYmFzZSwgcGFnZV9vZmZzZXQsCisJCQkJICAgICAgIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsX3B1dF9wYWdlczsKKworCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CisJCXVzZXJfZGF0YSArPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOwogCX0KIAorZmFpbF9wdXRfcGFnZXM6CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOworZmFpbF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhbGxiYWNrIHNobWVtIHB3cml0ZSBwYXRoLCB3aGljaCB1c2VzIGdldF91c2VyX3BhZ2VzIHRvIHBpbgorICogdGhlIG1lbW9yeSBhbmQgbWFwcyBpdCB1c2luZyBrbWFwX2F0b21pYyBmb3IgY29weWluZy4KKyAqCisgKiBUaGlzIGF2b2lkcyB0YWtpbmcgbW1hcF9zZW0gZm9yIGZhdWx0aW5nIG9uIHRoZSB1c2VyJ3MgYWRkcmVzcyB3aGlsZSB0aGUKKyAqIHN0cnVjdF9tdXRleCBpcyBoZWxkLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9zaG1lbV9wd3JpdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCBwYWdlICoqdXNlcl9wYWdlczsKKwlzc2l6ZV90IHJlbWFpbjsKKwlsb2ZmX3Qgb2Zmc2V0LCBwaW5uZWRfcGFnZXMsIGk7CisJbG9mZl90IGZpcnN0X2RhdGFfcGFnZSwgbGFzdF9kYXRhX3BhZ2UsIG51bV9wYWdlczsKKwlpbnQgc2htZW1fcGFnZV9pbmRleCwgc2htZW1fcGFnZV9vZmZzZXQ7CisJaW50IGRhdGFfcGFnZV9pbmRleCwgIGRhdGFfcGFnZV9vZmZzZXQ7CisJaW50IHBhZ2VfbGVuZ3RoOworCWludCByZXQ7CisJdWludDY0X3QgZGF0YV9wdHIgPSBhcmdzLT5kYXRhX3B0cjsKKworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisKKwkvKiBQaW4gdGhlIHVzZXIgcGFnZXMgY29udGFpbmluZyB0aGUgZGF0YS4gIFdlIGNhbid0IGZhdWx0IHdoaWxlCisJICogaG9sZGluZyB0aGUgc3RydWN0IG11dGV4LCBhbmQgYWxsIG9mIHRoZSBwd3JpdGUgaW1wbGVtZW50YXRpb25zCisJICogd2FudCB0byBob2xkIGl0IHdoaWxlIGRlcmVmZXJlbmNpbmcgdGhlIHVzZXIgZGF0YS4KKwkgKi8KKwlmaXJzdF9kYXRhX3BhZ2UgPSBkYXRhX3B0ciAvIFBBR0VfU0laRTsKKwlsYXN0X2RhdGFfcGFnZSA9IChkYXRhX3B0ciArIGFyZ3MtPnNpemUgLSAxKSAvIFBBR0VfU0laRTsKKwludW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAtIGZpcnN0X2RhdGFfcGFnZSArIDE7CisKKwl1c2VyX3BhZ2VzID0ga2NhbGxvYyhudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzZXJfcGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcGlubmVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sICh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCisJCQkJICAgICAgbnVtX3BhZ2VzLCAwLCAwLCB1c2VyX3BhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChwaW5uZWRfcGFnZXMgPCBudW1fcGFnZXMpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBmYWlsX3B1dF91c2VyX3BhZ2VzOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF91bmxvY2s7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAqCisJCSAqIHNobWVtX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciB3aXRoaW4gc2htZW0gZmlsZQorCQkgKiBzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZSBpbiBzaG1lbSBmaWxlCisJCSAqIGRhdGFfcGFnZV9pbmRleCA9IHBhZ2UgbnVtYmVyIGluIGdldF91c2VyX3BhZ2VzIHJldHVybgorCQkgKiBkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGggZGF0YV9wYWdlX2luZGV4IHBhZ2UuCisJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCisJCSAqLworCQlzaG1lbV9wYWdlX2luZGV4ID0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCisJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOworCQlpZiAoKHNobWVtX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBzaG1lbV9wYWdlX29mZnNldDsKKwkJaWYgKChkYXRhX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBkYXRhX3BhZ2Vfb2Zmc2V0OworCisJCXJldCA9IHNsb3dfc2htZW1fY29weShvYmpfcHJpdi0+cGFnZXNbc2htZW1fcGFnZV9pbmRleF0sCisJCQkJICAgICAgc2htZW1fcGFnZV9vZmZzZXQsCisJCQkJICAgICAgdXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIGRhdGFfcGFnZV9vZmZzZXQsCisJCQkJICAgICAgcGFnZV9sZW5ndGgpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsX3B1dF9wYWdlczsKKworCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CisJCWRhdGFfcHRyICs9IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQgKz0gcGFnZV9sZW5ndGg7CisJfQorCitmYWlsX3B1dF9wYWdlczoKKwlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CitmYWlsX3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK2ZhaWxfcHV0X3VzZXJfcGFnZXM6CisJZm9yIChpID0gMDsgaSA8IHBpbm5lZF9wYWdlczsgaSsrKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UodXNlcl9wYWdlc1tpXSk7CisJa2ZyZWUodXNlcl9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTM4OCwxMCArODQ1LDE5IEBACiAJaWYgKG9ial9wcml2LT5waHlzX29iaikKIAkJcmV0ID0gaTkxNV9nZW1fcGh5c19wd3JpdGUoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CiAJZWxzZSBpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKLQkJIGRldi0+Z3R0X3RvdGFsICE9IDApCi0JCXJldCA9IGk5MTVfZ2VtX2d0dF9wd3JpdGUoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7Ci0JZWxzZQotCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wd3JpdGUoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CisJCSBkZXYtPmd0dF90b3RhbCAhPSAwKSB7CisJCXJldCA9IGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwkJaWYgKHJldCA9PSAtRUZBVUxUKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlX3Nsb3coZGV2LCBvYmosIGFyZ3MsCisJCQkJCQkgICAgICAgZmlsZV9wcml2KTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZV9mYXN0KGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCQlpZiAocmV0ID09IC1FRkFVTFQpIHsKKwkJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZV9zbG93KGRldiwgb2JqLCBhcmdzLAorCQkJCQkJCSBmaWxlX3ByaXYpOworCQl9CisJfQogCiAjaWYgV0FUQ0hfUFdSSVRFCiAJaWYgKHJldCkKQEAgLTgxNiwyOSArMTI4MiwzMCBAQAogfQogCiBzdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoraTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCBwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOwogCWludCBpOwogCi0JaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkKKwlCVUdfT04ob2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50ID09IDApOworCisJaWYgKC0tb2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50ICE9IDApCiAJCXJldHVybjsKIAotCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykKLQkJaWYgKG9ial9wcml2LT5wYWdlX2xpc3RbaV0gIT0gTlVMTCkgeworCQlpZiAob2JqX3ByaXYtPnBhZ2VzW2ldICE9IE5VTEwpIHsKIAkJCWlmIChvYmpfcHJpdi0+ZGlydHkpCi0JCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7Ci0JCQltYXJrX3BhZ2VfYWNjZXNzZWQob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VzW2ldKTsKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChvYmpfcHJpdi0+cGFnZXNbaV0pOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9ial9wcml2LT5wYWdlc1tpXSk7CiAJCX0KIAlvYmpfcHJpdi0+ZGlydHkgPSAwOwogCi0JZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfbGlzdCwKKwlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZXMsCiAJCSBwYWdlX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLAogCQkgRFJNX01FTV9EUklWRVIpOwotCW9ial9wcml2LT5wYWdlX2xpc3QgPSBOVUxMOworCW9ial9wcml2LT5wYWdlcyA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjkwLDcgKzE3NTcsNyBAQAogCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCiAJCWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhvYmopOwogCi0JaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwogCiAJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UpIHsKIAkJYXRvbWljX2RlYygmZGV2LT5ndHRfY291bnQpOwpAQCAtMTQwOSw3ICsxODc2LDcgQEAKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJaW50IHBhZ2VfY291bnQsIGk7CkBAIC0xNDE4LDE4ICsxODg1LDE5IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IHJldDsKIAotCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0KQorCWlmIChvYmpfcHJpdi0+cGFnZXNfcmVmY291bnQrKyAhPSAwKQogCQlyZXR1cm4gMDsKIAogCS8qIEdldCB0aGUgbGlzdCBvZiBwYWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhleSdsbCBiZSBwaW5uZWQKIAkgKiBhdCB0aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4KIAkgKi8KIAlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOwotCUJVR19PTihvYmpfcHJpdi0+cGFnZV9saXN0ICE9IE5VTEwpOwotCW9ial9wcml2LT5wYWdlX2xpc3QgPSBkcm1fY2FsbG9jKHBhZ2VfY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKLQkJCQkJIERSTV9NRU1fRFJJVkVSKTsKLQlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKSB7CisJQlVHX09OKG9ial9wcml2LT5wYWdlcyAhPSBOVUxMKTsKKwlvYmpfcHJpdi0+cGFnZXMgPSBkcm1fY2FsbG9jKHBhZ2VfY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYtPnBhZ2VzID09IE5VTEwpIHsKIAkJRFJNX0VSUk9SKCJGYWxlZCB0byBhbGxvY2F0ZSBwYWdlIGxpc3RcbiIpOworCQlvYmpfcHJpdi0+cGFnZXNfcmVmY291bnQtLTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDQwLDEwICsxOTA4LDEwIEBACiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIocGFnZSk7CiAJCQlEUk1fRVJST1IoInJlYWRfbWFwcGluZ19wYWdlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJb2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSA9IHBhZ2U7CisJCW9ial9wcml2LT5wYWdlc1tpXSA9IHBhZ2U7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTc2Niw3ICsyMjM0LDcgQEAKIAlEUk1fSU5GTygiQmluZGluZyBvYmplY3Qgb2Ygc2l6ZSAlZCBhdCAweCUwOHhcbiIsCiAJCSBvYmotPnNpemUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKICNlbmRpZgotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KG9iaik7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwogCWlmIChyZXQpIHsKIAkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKIAkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CkBAIC0xNzc4LDEyICsyMjQ2LDEyIEBACiAJICogaW50byB0aGUgR1RULgogCSAqLwogCW9ial9wcml2LT5hZ3BfbWVtID0gZHJtX2FncF9iaW5kX3BhZ2VzKGRldiwKLQkJCQkJICAgICAgIG9ial9wcml2LT5wYWdlX2xpc3QsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+cGFnZXMsCiAJCQkJCSAgICAgICBwYWdlX2NvdW50LAogCQkJCQkgICAgICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCiAJCQkJCSAgICAgICBvYmpfcHJpdi0+YWdwX3R5cGUpOwogCWlmIChvYmpfcHJpdi0+YWdwX21lbSA9PSBOVUxMKSB7Ci0JCWk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CiAJCWRybV9tbV9wdXRfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CiAJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4MTAsMTAgKzIyNzgsMTAgQEAKIAkgKiB0byBHUFUsIGFuZCB3ZSBjYW4gaWdub3JlIHRoZSBjYWNoZSBmbHVzaCBiZWNhdXNlIGl0J2xsIGhhcHBlbgogCSAqIGFnYWluIGF0IGJpbmQgdGltZS4KIAkgKi8KLQlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKQorCWlmIChvYmpfcHJpdi0+cGFnZXMgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCwgb2JqLT5zaXplIC8gUEFHRV9TSVpFKTsKKwlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CiB9CiAKIC8qKiBGbHVzaGVzIGFueSBHUFUgd3JpdGUgZG9tYWluIGZvciB0aGUgb2JqZWN0IGlmIGl0J3MgZGlydHkuICovCkBAIC0xOTEzLDcgKzIzODEsNiBAQAogc3RhdGljIGludAogaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwogCWludCByZXQ7CiAKIAlpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihvYmopOwpAQCAtMTkzMiw3ICsyMzk5LDYgQEAKIAkvKiBGbHVzaCB0aGUgQ1BVIGNhY2hlIGlmIGl0J3Mgc3RpbGwgaW52YWxpZC4gKi8KIAlpZiAoKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgPT0gMCkgewogCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOwotCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKIAogCQlvYmotPnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fQ1BVOwogCX0KQEAgLTIxNDQsNyArMjYxMCw2IEBACiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fb2JqZWN0X3NldF90b19mdWxsX2NwdV9yZWFkX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAogCWlmICghb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkKQpAQCAtMjE1OCw5ICsyNjIzLDggQEAKIAkJZm9yIChpID0gMDsgaSA8PSAob2JqLT5zaXplIC0gMSkgLyBQQUdFX1NJWkU7IGkrKykgewogCQkJaWYgKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSkKIAkJCQljb250aW51ZTsKLQkJCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlX2xpc3QgKyBpLCAxKTsKKwkJCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlcyArIGksIDEpOwogCQl9Ci0JCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOwogCX0KIAogCS8qIEZyZWUgdGhlIHBhZ2VfY3B1X3ZhbGlkIG1hcHBpbmdzIHdoaWNoIGFyZSBub3cgc3RhbGUsIHdoZXRoZXIKQEAgLTIyMjQsNyArMjY4OCw3IEBACiAJCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWRbaV0pCiAJCQljb250aW51ZTsKIAotCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0ICsgaSwgMSk7CisJCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlcyArIGksIDEpOwogCiAJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSA9IDE7CiAJfQpAQCAtMjI0NSwxMiArMjcwOSwxMSBAQAogc3RhdGljIGludAogaTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICplbnRyeSkKKwkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZW50cnksCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqcmVsb2NzOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJaW50IGksIHJldDsKIAl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2U7CkBAIC0yMjYyLDI1ICsyNzI1LDE4IEBACiAKIAllbnRyeS0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAKLQlyZWxvY3MgPSAoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQotCQkgKHVpbnRwdHJfdCkgZW50cnktPnJlbG9jc19wdHI7CiAJLyogQXBwbHkgdGhlIHJlbG9jYXRpb25zLCB1c2luZyB0aGUgR1RUIGFwZXJ0dXJlIHRvIGF2b2lkIGNhY2hlCiAJICogZmx1c2hpbmcgcmVxdWlyZW1lbnRzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2M9ICZyZWxvY3NbaV07CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdGFyZ2V0X29iajsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnRhcmdldF9vYmpfcHJpdjsKIAkJdWludDMyX3QgcmVsb2NfdmFsLCByZWxvY19vZmZzZXQ7CiAJCXVpbnQzMl90IF9faW9tZW0gKnJlbG9jX2VudHJ5OwogCi0JCXJldCA9IGNvcHlfZnJvbV91c2VyKCZyZWxvYywgcmVsb2NzICsgaSwgc2l6ZW9mKHJlbG9jKSk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KIAkJdGFyZ2V0X29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChvYmotPmRldiwgZmlsZV9wcml2LAotCQkJCQkJICAgcmVsb2MudGFyZ2V0X2hhbmRsZSk7CisJCQkJCQkgICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7CiAJCWlmICh0YXJnZXRfb2JqID09IE5VTEwpIHsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FQkFERjsKQEAgLTIyOTIsNTMgKzI3NDgsNTMgQEAKIAkJICovCiAJCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CiAJCQlEUk1fRVJST1IoIk5vIEdUVCBzcGFjZSBmb3VuZCBmb3Igb2JqZWN0ICVkXG4iLAotCQkJCSAgcmVsb2MudGFyZ2V0X2hhbmRsZSk7CisJCQkJICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAocmVsb2Mub2Zmc2V0ID4gb2JqLT5zaXplIC0gNCkgeworCQlpZiAocmVsb2MtPm9mZnNldCA+IG9iai0+c2l6ZSAtIDQpIHsKIAkJCURSTV9FUlJPUigiUmVsb2NhdGlvbiBiZXlvbmQgb2JqZWN0IGJvdW5kczogIgogCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkIHNpemUgJWQuXG4iLAotCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LCAoaW50KSBvYmotPnNpemUpOworCQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsIChpbnQpIG9iai0+c2l6ZSk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHJlbG9jLm9mZnNldCAmIDMpIHsKKwkJaWYgKHJlbG9jLT5vZmZzZXQgJiAzKSB7CiAJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gbm90IDQtYnl0ZSBhbGlnbmVkOiAiCiAJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQuXG4iLAotCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0KTsKKwkJCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCQkJICAoaW50KSByZWxvYy0+b2Zmc2V0KTsKIAkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwogCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChyZWxvYy53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVIHx8Ci0JCSAgICByZWxvYy5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisJCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSB8fAorCQkgICAgcmVsb2MtPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKIAkJCURSTV9FUlJPUigicmVsb2Mgd2l0aCByZWFkL3dyaXRlIENQVSBkb21haW5zOiAiCiAJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgogCQkJCSAgInJlYWQgJTA4eCB3cml0ZSAlMDh4IiwKLQkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKLQkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwKLQkJCQkgIHJlbG9jLnJlYWRfZG9tYWlucywKLQkJCQkgIHJlbG9jLndyaXRlX2RvbWFpbik7CisJCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCisJCQkJICByZWxvYy0+d3JpdGVfZG9tYWluKTsKIAkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwogCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChyZWxvYy53cml0ZV9kb21haW4gJiYgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gJiYKLQkJICAgIHJlbG9jLndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgeworCQlpZiAocmVsb2MtPndyaXRlX2RvbWFpbiAmJiB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiAmJgorCQkgICAgcmVsb2MtPndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgewogCQkJRFJNX0VSUk9SKCJXcml0ZSBkb21haW4gY29uZmxpY3Q6ICIKIAkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCiAJCQkJICAibmV3ICUwOHggb2xkICUwOHhcbiIsCi0JCQkJICBvYmosIHJlbG9jLnRhcmdldF9oYW5kbGUsCi0JCQkJICAoaW50KSByZWxvYy5vZmZzZXQsCi0JCQkJICByZWxvYy53cml0ZV9kb21haW4sCisJCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCQkgIHJlbG9jLT53cml0ZV9kb21haW4sCiAJCQkJICB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwpAQCAtMjM1MSwyMiArMjgwNywyMiBAQAogCQkJICJwcmVzdW1lZCAlMDh4IGRlbHRhICUwOHhcbiIsCiAJCQkgX19mdW5jX18sCiAJCQkgb2JqLAotCQkJIChpbnQpIHJlbG9jLm9mZnNldCwKLQkJCSAoaW50KSByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJIChpbnQpIHJlbG9jLnJlYWRfZG9tYWlucywKLQkJCSAoaW50KSByZWxvYy53cml0ZV9kb21haW4sCisJCQkgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCSAoaW50KSByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCSAoaW50KSByZWxvYy0+cmVhZF9kb21haW5zLAorCQkJIChpbnQpIHJlbG9jLT53cml0ZV9kb21haW4sCiAJCQkgKGludCkgdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0LAotCQkJIChpbnQpIHJlbG9jLnByZXN1bWVkX29mZnNldCwKLQkJCSByZWxvYy5kZWx0YSk7CisJCQkgKGludCkgcmVsb2MtPnByZXN1bWVkX29mZnNldCwKKwkJCSByZWxvYy0+ZGVsdGEpOwogI2VuZGlmCiAKLQkJdGFyZ2V0X29iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gcmVsb2MucmVhZF9kb21haW5zOwotCQl0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiB8PSByZWxvYy53cml0ZV9kb21haW47CisJCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLT5yZWFkX2RvbWFpbnM7CisJCXRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluIHw9IHJlbG9jLT53cml0ZV9kb21haW47CiAKIAkJLyogSWYgdGhlIHJlbG9jYXRpb24gYWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHZhbHVlIGluIGl0LCBubwogCQkgKiBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZS4KIAkJICovCi0JCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgPT0gcmVsb2MucHJlc3VtZWRfb2Zmc2V0KSB7CisJCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgPT0gcmVsb2MtPnByZXN1bWVkX29mZnNldCkgewogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjM4MSwzMiArMjgzNywyNiBAQAogCQkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0bwogCQkgKiBwZXJmb3JtLgogCQkgKi8KLQkJcmVsb2Nfb2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy5vZmZzZXQ7CisJCXJlbG9jX29mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2MtPm9mZnNldDsKIAkJcmVsb2NfcGFnZSA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCiAJCQkJCQkgICAgICAocmVsb2Nfb2Zmc2V0ICYKIAkJCQkJCSAgICAgICB+KFBBR0VfU0laRSAtIDEpKSk7CiAJCXJlbG9jX2VudHJ5ID0gKHVpbnQzMl90IF9faW9tZW0gKikocmVsb2NfcGFnZSArCiAJCQkJCQkgICAocmVsb2Nfb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKSk7Ci0JCXJlbG9jX3ZhbCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLmRlbHRhOworCQlyZWxvY192YWwgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy0+ZGVsdGE7CiAKICNpZiBXQVRDSF9CVUYKIAkJRFJNX0lORk8oIkFwcGxpZWQgcmVsb2NhdGlvbjogJXBAMHglMDh4ICUwOHggLT4gJTA4eFxuIiwKLQkJCSAgb2JqLCAodW5zaWduZWQgaW50KSByZWxvYy5vZmZzZXQsCisJCQkgIG9iaiwgKHVuc2lnbmVkIGludCkgcmVsb2MtPm9mZnNldCwKIAkJCSAgcmVhZGwocmVsb2NfZW50cnkpLCByZWxvY192YWwpOwogI2VuZGlmCiAJCXdyaXRlbChyZWxvY192YWwsIHJlbG9jX2VudHJ5KTsKIAkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMocmVsb2NfcGFnZSk7CiAKLQkJLyogV3JpdGUgdGhlIHVwZGF0ZWQgcHJlc3VtZWQgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IGJhY2sgb3V0Ci0JCSAqIHRvIHRoZSB1c2VyLgorCQkvKiBUaGUgdXBkYXRlZCBwcmVzdW1lZCBvZmZzZXQgZm9yIHRoaXMgZW50cnkgd2lsbCBiZQorCQkgKiBjb3BpZWQgYmFjayBvdXQgdG8gdGhlIHVzZXIuCiAJCSAqLwotCQlyZWxvYy5wcmVzdW1lZF9vZmZzZXQgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQ7Ci0JCXJldCA9IGNvcHlfdG9fdXNlcihyZWxvY3MgKyBpLCAmcmVsb2MsIHNpemVvZihyZWxvYykpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCXJlbG9jLT5wcmVzdW1lZF9vZmZzZXQgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJfQpAQCAtMjQyMywxMSArMjg3MywxMCBAQAogc3RhdGljIGludAogaTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICpleGVjLAorCQkJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKIAkJCSAgICAgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMgPSAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCi0JCQkJCSAgICAgKHVpbnRwdHJfdCkgZXhlYy0+Y2xpcHJlY3RzX3B0cjsKIAlpbnQgbmJveCA9IGV4ZWMtPm51bV9jbGlwcmVjdHM7CiAJaW50IGkgPSAwLCBjb3VudDsKIAl1aW50MzJfdAlleGVjX3N0YXJ0LCBleGVjX2xlbjsKQEAgLTI0NDgsNyArMjg5Nyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlpZiAoaSA8IG5ib3gpIHsKLQkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgYm94ZXMsIGksCisJCQlpbnQgcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKIAkJCQkJCWV4ZWMtPkRSMSwgZXhlYy0+RFI0KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTI1MDQsNiArMjk1Myw3NSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2dldF9yZWxvY3NfZnJvbV91c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCwKKwkJCSAgICAgIHVpbnQzMl90IGJ1ZmZlcl9jb3VudCwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqKnJlbG9jcykKK3sKKwl1aW50MzJfdCByZWxvY19jb3VudCA9IDAsIHJlbG9jX2luZGV4ID0gMCwgaTsKKwlpbnQgcmV0OworCisJKnJlbG9jcyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCWlmIChyZWxvY19jb3VudCArIGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50IDwgcmVsb2NfY291bnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVsb2NfY291bnQgKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJfQorCisJKnJlbG9jcyA9IGRybV9jYWxsb2MocmVsb2NfY291bnQsIHNpemVvZigqKnJlbG9jcyksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoKnJlbG9jcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmZXJfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKKworCQl1c2VyX3JlbG9jcyA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpZXhlY19saXN0W2ldLnJlbG9jc19wdHI7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJigqcmVsb2NzKVtyZWxvY19pbmRleF0sCisJCQkJICAgICB1c2VyX3JlbG9jcywKKwkJCQkgICAgIGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50ICoKKwkJCQkgICAgIHNpemVvZigqKnJlbG9jcykpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRybV9mcmVlKCpyZWxvY3MsIHJlbG9jX2NvdW50ICogc2l6ZW9mKCoqcmVsb2NzKSwKKwkJCQkgRFJNX01FTV9EUklWRVIpOworCQkJKnJlbG9jcyA9IE5VTEw7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmVsb2NfaW5kZXggKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fcHV0X3JlbG9jc190b191c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCwKKwkJCSAgICB1aW50MzJfdCBidWZmZXJfY291bnQsCisJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MpCit7CisJdWludDMyX3QgcmVsb2NfY291bnQgPSAwLCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7CisKKwkJdXNlcl9yZWxvY3MgPSAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWV4ZWNfbGlzdFtpXS5yZWxvY3NfcHRyOworCisJCWlmIChyZXQgPT0gMCkgeworCQkJcmV0ID0gY29weV90b191c2VyKHVzZXJfcmVsb2NzLAorCQkJCQkgICAmcmVsb2NzW3JlbG9jX2NvdW50XSwKKwkJCQkJICAgZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQgKgorCQkJCQkgICBzaXplb2YoKnJlbG9jcykpOworCQl9CisKKwkJcmVsb2NfY291bnQgKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJfQorCisJZHJtX2ZyZWUocmVsb2NzLCByZWxvY19jb3VudCAqIHNpemVvZigqcmVsb2NzKSwgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50CiBpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKQEAgLTI1MTUsOSArMzAzMywxMSBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoX29iajsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0JaW50IHJldCwgaSwgcGlubmVkID0gMDsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jczsKKwlpbnQgcmV0LCByZXQyLCBpLCBwaW5uZWQgPSAwOwogCXVpbnQ2NF90IGV4ZWNfb2Zmc2V0OwotCXVpbnQzMl90IHNlcW5vLCBmbHVzaF9kb21haW5zOworCXVpbnQzMl90IHNlcW5vLCBmbHVzaF9kb21haW5zLCByZWxvY19pbmRleDsKIAlpbnQgcGluX3RyaWVzOwogCiAjaWYgV0FUQ0hfRVhFQwpAQCAtMjU1MSw2ICszMDcxLDI4IEBACiAJCWdvdG8gcHJlX211dGV4X2VycjsKIAl9CiAKKwlpZiAoYXJncy0+bnVtX2NsaXByZWN0cyAhPSAwKSB7CisJCWNsaXByZWN0cyA9IGRybV9jYWxsb2MoYXJncy0+bnVtX2NsaXByZWN0cywgc2l6ZW9mKCpjbGlwcmVjdHMpLAorCQkJCSAgICAgICBEUk1fTUVNX0RSSVZFUik7CisJCWlmIChjbGlwcmVjdHMgPT0gTlVMTCkKKwkJCWdvdG8gcHJlX211dGV4X2VycjsKKworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsCisJCQkJICAgICAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCisJCQkJICAgICAodWludHB0cl90KSBhcmdzLT5jbGlwcmVjdHNfcHRyLAorCQkJCSAgICAgc2l6ZW9mKCpjbGlwcmVjdHMpICogYXJncy0+bnVtX2NsaXByZWN0cyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJjb3B5ICVkIGNsaXByZWN0cyBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgYXJncy0+bnVtX2NsaXByZWN0cywgcmV0KTsKKwkJCWdvdG8gcHJlX211dGV4X2VycjsKKwkJfQorCX0KKworCXJldCA9IGk5MTVfZ2VtX2dldF9yZWxvY3NfZnJvbV91c2VyKGV4ZWNfbGlzdCwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCQkgICAgJnJlbG9jcyk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIHByZV9tdXRleF9lcnI7CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CkBAIC0yNTkzLDE1ICszMTM1LDE5IEBACiAJLyogUGluIGFuZCByZWxvY2F0ZSAqLwogCWZvciAocGluX3RyaWVzID0gMDsgOyBwaW5fdHJpZXMrKykgewogCQlyZXQgPSAwOworCQlyZWxvY19pbmRleCA9IDA7CisKIAkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CiAJCQlvYmplY3RfbGlzdFtpXS0+cGVuZGluZ19yZWFkX2RvbWFpbnMgPSAwOwogCQkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gMDsKIAkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW5fYW5kX3JlbG9jYXRlKG9iamVjdF9saXN0W2ldLAogCQkJCQkJCSAgICAgICBmaWxlX3ByaXYsCi0JCQkJCQkJICAgICAgICZleGVjX2xpc3RbaV0pOworCQkJCQkJCSAgICAgICAmZXhlY19saXN0W2ldLAorCQkJCQkJCSAgICAgICAmcmVsb2NzW3JlbG9jX2luZGV4XSk7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQkJcGlubmVkID0gaSArIDE7CisJCQlyZWxvY19pbmRleCArPSBleGVjX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudDsKIAkJfQogCQkvKiBzdWNjZXNzICovCiAJCWlmIChyZXQgPT0gMCkKQEAgLTI2ODcsNyArMzIzMyw3IEBACiAjZW5kaWYKIAogCS8qIEV4ZWMgdGhlIGJhdGNoYnVmZmVyICovCi0JcmV0ID0gaTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihkZXYsIGFyZ3MsIGV4ZWNfb2Zmc2V0KTsKKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKGRldiwgYXJncywgY2xpcHJlY3RzLCBleGVjX29mZnNldCk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImRpc3BhdGNoIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnI7CkBAIC0yNzUxLDExICszMjk3LDI3IEBACiAJCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CiAJfQogCisJLyogQ29weSB0aGUgdXBkYXRlZCByZWxvY2F0aW9ucyBvdXQgcmVnYXJkbGVzcyBvZiBjdXJyZW50IGVycm9yCisJICogc3RhdGUuICBGYWlsdXJlIHRvIHVwZGF0ZSB0aGUgcmVsb2NzIHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV4dAorCSAqIHRpbWUgdXNlcmxhbmQgY2FsbHMgZXhlY2J1ZiwgaXQgd291bGQgZG8gc28gd2l0aCBwcmVzdW1lZCBvZmZzZXQKKwkgKiBzdGF0ZSB0aGF0IGRpZG4ndCBtYXRjaCB0aGUgYWN0dWFsIG9iamVjdCBzdGF0ZS4KKwkgKi8KKwlyZXQyID0gaTkxNV9nZW1fcHV0X3JlbG9jc190b191c2VyKGV4ZWNfbGlzdCwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCQkgICByZWxvY3MpOworCWlmIChyZXQyICE9IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29weSByZWxvY2F0aW9ucyBiYWNrIG91dDogJWRcbiIsIHJldDIpOworCisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IHJldDI7CisJfQorCiBwcmVfbXV0ZXhfZXJyOgogCWRybV9mcmVlKG9iamVjdF9saXN0LCBzaXplb2YoKm9iamVjdF9saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKIAkJIERSTV9NRU1fRFJJVkVSKTsKIAlkcm1fZnJlZShleGVjX2xpc3QsIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKIAkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShjbGlwcmVjdHMsIHNpemVvZigqY2xpcHJlY3RzKSAqIGFyZ3MtPm51bV9jbGlwcmVjdHMsCisJCSBEUk1fTUVNX0RSSVZFUik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzE5Miw3ICszNzU0LDcgQEAKIAogCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKIAotCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGttYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0ga21hcChvYmpfcHJpdi0+cGFnZXNbMF0pOwogCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgc3RhdHVzIHBhZ2UuXG4iKTsKIAkJbWVtc2V0KCZkZXZfcHJpdi0+aHdzX21hcCwgMCwgc2l6ZW9mKGRldl9wcml2LT5od3NfbWFwKSk7CkBAIC0zMjIyLDcgKzM3ODQsNyBAQAogCW9iaiA9IGRldl9wcml2LT5od3Nfb2JqOwogCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAotCWt1bm1hcChvYmpfcHJpdi0+cGFnZV9saXN0WzBdKTsKKwlrdW5tYXAob2JqX3ByaXYtPnBhZ2VzWzBdKTsKIAlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwogCWRldl9wcml2LT5od3Nfb2JqID0gTlVMTDsKQEAgLTM1MjUsMjAgKzQwODcsMjAgQEAKIAlpZiAoIW9ial9wcml2LT5waHlzX29iaikKIAkJcmV0dXJuOwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qob2JqKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgewotCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZV9saXN0W2ldLCBLTV9VU0VSMCk7CisJCWNoYXIgKmRzdCA9IGttYXBfYXRvbWljKG9ial9wcml2LT5wYWdlc1tpXSwgS01fVVNFUjApOwogCQljaGFyICpzcmMgPSBvYmpfcHJpdi0+cGh5c19vYmotPmhhbmRsZS0+dmFkZHIgKyAoaSAqIFBBR0VfU0laRSk7CiAKIAkJbWVtY3B5KGRzdCwgc3JjLCBQQUdFX1NJWkUpOwogCQlrdW5tYXBfYXRvbWljKGRzdCwgS01fVVNFUjApOwogCX0KLQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0LCBwYWdlX2NvdW50KTsKKwlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMsIHBhZ2VfY291bnQpOwogCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOwogb3V0OgogCW9ial9wcml2LT5waHlzX29iai0+Y3VyX29iaiA9IE5VTEw7CkBAIC0zNTgxLDcgKzQxNDMsNyBAQAogCW9ial9wcml2LT5waHlzX29iaiA9IGRldl9wcml2LT5tbS5waHlzX29ianNbaWQgLSAxXTsKIAlvYmpfcHJpdi0+cGh5c19vYmotPmN1cl9vYmogPSBvYmo7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChvYmopOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBwYWdlIGxpc3RcbiIpOwogCQlnb3RvIG91dDsKQEAgLTM1OTAsNyArNDE1Miw3IEBACiAJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKLQkJY2hhciAqc3JjID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSwgS01fVVNFUjApOworCQljaGFyICpzcmMgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZXNbaV0sIEtNX1VTRVIwKTsKIAkJY2hhciAqZHN0ID0gb2JqX3ByaXYtPnBoeXNfb2JqLT5oYW5kbGUtPnZhZGRyICsgKGkgKiBQQUdFX1NJWkUpOwogCiAJCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVlYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWdmcy5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2RlZmluZSBEUk1fSTkxNV9SSU5HX0RFQlVHIDEKKworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKKyNkZWZpbmUgQUNUSVZFX0xJU1QJMQorI2RlZmluZSBGTFVTSElOR19MSVNUCTIKKyNkZWZpbmUgSU5BQ1RJVkVfTElTVAkzCisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcGluX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2KQoreworCWlmIChvYmpfcHJpdi0+dXNlcl9waW5fY291bnQgPiAwKQorCQlyZXR1cm4gIlAiOworCWVsc2UgaWYgKG9ial9wcml2LT5waW5fY291bnQgPiAwKQorCQlyZXR1cm4gInAiOworCWVsc2UKKwkJcmV0dXJuICIgIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF90aWxpbmdfZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYpCit7CisgICAgc3dpdGNoIChvYmpfcHJpdi0+dGlsaW5nX21vZGUpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgSTkxNV9USUxJTkdfTk9ORTogcmV0dXJuICIgIjsKKyAgICBjYXNlIEk5MTVfVElMSU5HX1g6IHJldHVybiAiWCI7CisgICAgY2FzZSBJOTE1X1RJTElOR19ZOiByZXR1cm4gIlkiOworICAgIH0KK30KKworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfbGlzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXVpbnRwdHJfdCBsaXN0ID0gKHVpbnRwdHJfdCkgbm9kZS0+aW5mb19lbnQtPmRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlzd2l0Y2ggKGxpc3QpIHsKKwljYXNlIEFDVElWRV9MSVNUOgorCQlzZXFfcHJpbnRmKG0sICJBY3RpdmU6XG4iKTsKKwkJaGVhZCA9ICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3Q7CisJCWJyZWFrOworCWNhc2UgSU5BQ1RJVkVfTElTVDoKKwkJc2VxX3ByaW50ZihtLCAiSW5jdGl2ZTpcbiIpOworCQloZWFkID0gJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0OworCQlicmVhazsKKwljYXNlIEZMVVNISU5HX0xJU1Q6CisJCXNlcV9wcmludGYobSwgIkZsdXNoaW5nOlxuIik7CisJCWhlYWQgPSAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9JTkZPKCJPb29wcywgdW5leHBlY3RlZCBsaXN0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgaGVhZCwgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlzZXFfcHJpbnRmKG0sICIgICAgJXA6ICVzICUwOHggJTA4eCAlZCIsCisJCQkgICBvYmosCisJCQkgICBnZXRfcGluX2ZsYWcob2JqX3ByaXYpLAorCQkJICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKworCQlpZiAob2JqLT5uYW1lKQorCQkJc2VxX3ByaW50ZihtLCAiIChuYW1lOiAlZCkiLCBvYmotPm5hbWUpOworCQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQorCQkJc2VxX3ByaW50ZihtLCAiIChmZW5jZTogJWRcbiIsIG9ial9wcml2LT5mZW5jZV9yZWcpOworCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2dlbV9yZXF1ZXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpnZW1fcmVxdWVzdDsKKworCXNlcV9wcmludGYobSwgIlJlcXVlc3Q6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbV9yZXF1ZXN0LCAmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCwgbGlzdCkgeworCQlzZXFfcHJpbnRmKG0sICIgICAgJWQgQCAlZFxuIiwKKwkJCSAgIGdlbV9yZXF1ZXN0LT5zZXFubywKKwkJCSAgIChpbnQpIChqaWZmaWVzIC0gZ2VtX3JlcXVlc3QtPmVtaXR0ZWRfamlmZmllcykpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2dlbV9zZXFub19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSAhPSBOVUxMKSB7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLAorCQkJICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6IGh3cyB1bmluaXRpYWxpemVkXG4iKTsKKwl9CisJc2VxX3ByaW50ZihtLCAiV2FpdGVyIHNlcXVlbmNlOiAgJWRcbiIsCisJCQlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8pOworCXNlcV9wcmludGYobSwgIklSUSBzZXF1ZW5jZTogICAgICVkXG4iLCBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpOTE1X2ludGVycnVwdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IGVuYWJsZTogICAgJTA4eFxuIiwKKwkJICAgSTkxNV9SRUFEKElFUikpOworCXNlcV9wcmludGYobSwgIkludGVycnVwdCBpZGVudGl0eTogICUwOHhcbiIsCisJCSAgIEk5MTVfUkVBRChJSVIpKTsKKwlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgbWFzazogICAgICAlMDh4XG4iLAorCQkgICBJOTE1X1JFQUQoSU1SKSk7CisJc2VxX3ByaW50ZihtLCAiUGlwZSBBIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKKwkJICAgSTkxNV9SRUFEKFBJUEVBU1RBVCkpOworCXNlcV9wcmludGYobSwgIlBpcGUgQiBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgIEk5MTVfUkVBRChQSVBFQlNUQVQpKTsKKwlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKKwlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlICE9IE5VTEwpIHsKKwkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCQkgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogICAgaHdzIHVuaW5pdGlhbGl6ZWRcbiIpOworCX0KKwlzZXFfcHJpbnRmKG0sICJXYWl0ZXIgc2VxdWVuY2U6ICAgICAlZFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2U6ICAgICAgICAlZFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCXNlcV9wcmludGYobSwgIlJlc2VydmVkIGZlbmNlcyA9ICVkXG4iLCBkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0KTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBmZW5jZXMgPSAlZFxuIiwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXS5vYmo7CisKKwkJaWYgKG9iaiA9PSBOVUxMKSB7CisJCQlzZXFfcHJpbnRmKG0sICJGZW5jZWQgb2JqZWN0WyUyZF0gPSB1bnVzZWRcbiIsIGkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJCQlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCQlzZXFfcHJpbnRmKG0sICJGZW5jZWQgb2JqZWN0WyUyZF0gPSAlcDogJXMgIgorCQkJCSAgICIlMDh4ICUwOHp4ICUwOHggJXMgJTA4eCAlMDh4ICVkIiwKKwkJCQkgICBpLCBvYmosIGdldF9waW5fZmxhZyhvYmpfcHJpdiksCisJCQkJICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkJICAgb2JqLT5zaXplLCBvYmpfcHJpdi0+c3RyaWRlLAorCQkJCSAgIGdldF90aWxpbmdfZmxhZyhvYmpfcHJpdiksCisJCQkJICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCQlpZiAob2JqLT5uYW1lKQorCQkJCXNlcV9wcmludGYobSwgIiAobmFtZTogJWQpIiwgb2JqLT5uYW1lKTsKKwkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2h3c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXZvbGF0aWxlIHUzMiAqaHdzOworCisJaHdzID0gKHZvbGF0aWxlIHUzMiAqKWRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKKwlpZiAoaHdzID09IE5VTEwpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IDQwOTYgLyBzaXplb2YodTMyKSAvIDQ7IGkgKz0gNCkgeworCQlzZXFfcHJpbnRmKG0sICIweCUwOHg6IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCSAgIGkgKiA0LAorCQkJICAgaHdzW2ldLCBod3NbaSArIDFdLCBod3NbaSArIDJdLCBod3NbaSArIDNdKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBpOTE1X2dlbV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKKwl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCisJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LAorCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm8sIDB9LAorCXsiaTkxNV9nZW1fZmVuY2VfcmVncyIsIGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9pbnRlcnJ1cHQiLCBpOTE1X2ludGVycnVwdF9pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2h3cyIsIGk5MTVfaHdzX2luZm8sIDB9LAorfTsKKyNkZWZpbmUgSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fZGVidWdmc19saXN0KQorCitpbnQgaTkxNV9nZW1fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoaTkxNV9nZW1fZGVidWdmc19saXN0LAorCQkJCQlJOTE1X0dFTV9ERUJVR0ZTX0VOVFJJRVMsCisJCQkJCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KKwordm9pZCBpOTE1X2dlbV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCwKKwkJCQkgSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTLCBtaW5vcik7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDFiOWRlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0gKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJkcm0uaCIKLSNpbmNsdWRlICJpOTE1X2RybS5oIgotI2luY2x1ZGUgImk5MTVfZHJ2LmgiCi0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCURSTV9QUk9DX1BSSU5UKCJBY3RpdmU6XG4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPm5hbWUpIHsKLQkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAotCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JRFJNX1BST0NfUFJJTlQoIkZsdXNoaW5nOlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPm5hbWUpIHsKLQkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAotCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX2luYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JRFJNX1BST0NfUFJJTlQoIkluYWN0aXZlOlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPm5hbWUpIHsKLQkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAotCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX3JlcXVlc3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlEUk1fUFJPQ19QUklOVCgiUmVxdWVzdDpcbiIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsICZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlEUk1fUFJPQ19QUklOVCgiICAgICVkIEAgJWRcbiIsCi0JCQkgICAgICAgZ2VtX3JlcXVlc3QtPnNlcW5vLAotCQkJICAgICAgIChpbnQpIChqaWZmaWVzIC0gZ2VtX3JlcXVlc3QtPmVtaXR0ZWRfamlmZmllcykpOwotCX0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9zZXFub19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgewotCQlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogJWRcbiIsCi0JCQkgICAgICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOwotCX0gZWxzZSB7Ci0JCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiBod3MgdW5pbml0aWFsaXplZFxuIik7Ci0JfQotCURSTV9QUk9DX1BSSU5UKCJXYWl0ZXIgc2VxdWVuY2U6ICAlZFxuIiwKLQkJICAgICAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7Ci0JRFJNX1BST0NfUFJJTlQoIklSUSBzZXF1ZW5jZTogICAgICVkXG4iLCBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLQotc3RhdGljIGludCBpOTE1X2ludGVycnVwdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHQgZW5hYmxlOiAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKElFUikpOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKElJUikpOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHQgbWFzazogICAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKElNUikpOwotCURSTV9QUk9DX1BSSU5UKCJQaXBlIEEgc3RhdDogICAgICAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKFBJUEVBU1RBVCkpOwotCURSTV9QUk9DX1BSSU5UKCJQaXBlIEIgc3RhdDogICAgICAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKFBJUEVCU1RBVCkpOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKLQkJICAgICAgIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkKSk7Ci0JaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSAhPSBOVUxMKSB7Ci0JCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiAgICAlZFxuIiwKLQkJCSAgICAgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7Ci0JfSBlbHNlIHsKLQkJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICAgIGh3cyB1bmluaXRpYWxpemVkXG4iKTsKLQl9Ci0JRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICAgICVkXG4iLAotCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKLQlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCi0JCSAgICAgICBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9od3NfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGxlbiA9IDAsIGk7Ci0Jdm9sYXRpbGUgdTMyICpod3M7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCWh3cyA9ICh2b2xhdGlsZSB1MzIgKilkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7Ci0JaWYgKGh3cyA9PSBOVUxMKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQwOTYgLyBzaXplb2YodTMyKSAvIDQ7IGkgKz0gNCkgewotCQlEUk1fUFJPQ19QUklOVCgiMHglMDh4OiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCi0JCQkgICAgICAgaSAqIDQsCi0JCQkgICAgICAgaHdzW2ldLCBod3NbaSArIDFdLCBod3NbaSArIDJdLCBod3NbaSArIDNdKTsKLQl9Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7Ci0JLyoqIGZpbGUgbmFtZSAqLwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JLyoqIHByb2MgY2FsbGJhY2sqLwotCWludCAoKmYpIChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwotfSBpOTE1X2dlbV9wcm9jX2xpc3RbXSA9IHsKLQl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX2FjdGl2ZV9pbmZvfSwKLQl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fZmx1c2hpbmdfaW5mb30sCi0JeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX2luYWN0aXZlX2luZm99LAotCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mb30sCi0JeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm99LAotCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mb30sCi0JeyJpOTE1X2dlbV9od3MiLCBpOTE1X2h3c19pbmZvfSwKLX07Ci0KLSNkZWZpbmUgSTkxNV9HRU1fUFJPQ19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fcHJvY19saXN0KQotCi1pbnQgaTkxNV9nZW1fcHJvY19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsgaSA8IEk5MTVfR0VNX1BST0NfRU5UUklFUzsgaSsrKSB7Ci0JCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLAotCQkJCQlTX0lGUkVHIHwgU19JUlVHTywgbWlub3ItPmRldl9yb290KTsKLQkJaWYgKCFlbnQpIHsKLQkJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvLi4uLyVzXG4iLAotCQkJCSAgaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUpOwotCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQlyZW1vdmVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQllbnQtPnJlYWRfcHJvYyA9IGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5mOwotCQllbnQtPmRhdGEgPSBtaW5vcjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaTkxNV9nZW1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQotewotCWludCBpOwotCi0JaWYgKCFtaW5vci0+ZGV2X3Jvb3QpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykKLQkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5kZXZfcm9vdCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDdmYjQxOTEuLjRjY2UxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC05NiwxNiArOTYsMTYgQEAKIAkJICovCiAJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwogCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKLQl9IGVsc2UgaWYgKCghSVNfSTk2NUcoZGV2KSAmJiAhSVNfRzMzKGRldikpIHx8IElTX0k5NjVHTShkZXYpIHx8Ci0JCSAgIElTX0dNNDUoZGV2KSkgeworCX0gZWxzZSBpZiAoSVNfTU9CSUxFKGRldikpIHsKIAkJdWludDMyX3QgZGNjOwogCi0JCS8qIE9uIDkxNS05NDUgYW5kIEdNOTY1LCBjaGFubmVsIGludGVybGVhdmUgYnkgdGhlIENQVSBpcwotCQkgKiBkZXRlcm1pbmVkIGJ5IERDQy4gIFRoZSBDUFUgd2lsbCBhbHRlcm5hdGUgYmFzZWQgb24gYml0IDYKLQkJICogaW4gaW50ZXJsZWF2ZWQgbW9kZSwgYW5kIHRoZSBHUFUgd2lsbCB0aGVuIGFsc28gYWx0ZXJuYXRlCi0JCSAqIG9uIGJpdCA2LCA5LCBhbmQgMTAgZm9yIFgsIGJ1dCB0aGUgQ1BVIG1heSBhbHNvIG9wdGlvbmFsbHkKLQkJICogYWx0ZXJuYXRlIGJhc2VkIG9uIGJpdCAxNyAoWE9SIG5vdCBkaXNhYmxlZCBhbmQgWE9SCi0JCSAqIGJpdCA9PSAxNykuCisJCS8qIE9uIG1vYmlsZSA5eHggY2hpcHNldHMsIGNoYW5uZWwgaW50ZXJsZWF2ZSBieSB0aGUgQ1BVIGlzCisJCSAqIGRldGVybWluZWQgYnkgRENDLiAgRm9yIHNpbmdsZS1jaGFubmVsLCBuZWl0aGVyIHRoZSBDUFUKKwkJICogbm9yIHRoZSBHUFUgZG8gc3dpenpsaW5nLiAgRm9yIGR1YWwgY2hhbm5lbCBpbnRlcmxlYXZlZCwKKwkJICogdGhlIEdQVSdzIGludGVybGVhdmUgaXMgYml0IDkgYW5kIDEwIGZvciBYIHRpbGVkLCBhbmQgYml0CisJCSAqIDkgZm9yIFkgdGlsZWQuICBUaGUgQ1BVJ3MgaW50ZXJsZWF2ZSBpcyBpbmRlcGVuZGVudCwgYW5kCisJCSAqIGNhbiBiZSBiYXNlZCBvbiBlaXRoZXIgYml0IDExIChoYXZlbid0IHNlZW4gdGhpcyB5ZXQpIG9yCisJCSAqIGJpdCAxNyAoY29tbW9uKS4KIAkJICovCiAJCWRjYyA9IEk5MTVfUkVBRChEQ0MpOwogCQlzd2l0Y2ggKGRjYyAmIERDQ19BRERSRVNTSU5HX01PREVfTUFTSykgewpAQCAtMTE1LDE5ICsxMTUsMTggQEAKIAkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwogCQkJYnJlYWs7CiAJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfSU5URVJMRUFWRUQ6Ci0JCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSB8fAotCQkJICAgIGRjYyAmIERDQ19DSEFOTkVMX1hPUl9ESVNBQkxFKSB7CisJCQlpZiAoZGNjICYgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUpIHsKKwkJCQkvKiBUaGlzIGlzIHRoZSBiYXNlIHN3aXp6bGluZyBieSB0aGUgR1BVIGZvcgorCQkJCSAqIHRpbGVkIGJ1ZmZlcnMuCisJCQkJICovCiAJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7CiAJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7Ci0JCQl9IGVsc2UgaWYgKChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpICYmCi0JCQkJICAgKGRjYyAmIERDQ19DSEFOTkVMX1hPUl9CSVRfMTcpID09IDApIHsKLQkJCQkvKiBHTTk2NS9HTTQ1IGRvZXMgZWl0aGVyIGJpdCAxMSBvciBiaXQgMTcKLQkJCQkgKiBzd2l6emxpbmcuCi0JCQkJICovCisJCQl9IGVsc2UgaWYgKChkY2MgJiBEQ0NfQ0hBTk5FTF9YT1JfQklUXzE3KSA9PSAwKSB7CisJCQkJLyogQml0IDExIHN3aXp6bGluZyBieSB0aGUgQ1BVIGluIGFkZGl0aW9uLiAqLwogCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExOwogCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzExOwogCQkJfSBlbHNlIHsKLQkJCQkvKiBCaXQgMTcgb3IgcGVyaGFwcyBvdGhlciBzd2l6emxpbmcgKi8KKwkJCQkvKiBCaXQgMTcgc3dpenpsaW5nIGJ5IHRoZSBDUFUgaW4gYWRkaXRpb24uICovCiAJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA5MDYwMGQ4Li4zNzdjYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTM1OSw2ICszNTksNyBAQAogI2RlZmluZSAgIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcJKDEgPDwgMjQpIC8qIGk5MTUgKi8KICNkZWZpbmUgICBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCTB4MDMwMDAwMDAgLyogaTkxNSAqLwogI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkweDAwZmYwMDAwIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSUdECTB4MDBmZjgwMDAgLyogSUdEICovCiAKICNkZWZpbmUgSTkxNV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCiAjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQpAQCAtNDM1LDYgKzQzNiw3IEBACiAgKi8KICNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTCTB4MDAzZjAwMDAKICNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCTE2CisjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVF9JR0QgMTUKIC8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLwogI2RlZmluZSAgIFBMTF9QMl9ESVZJREVfQllfNAkJKDEgPDwgMjMpCiAjZGVmaW5lICAgUExMX1AxX0RJVklERV9CWV9UV08JCSgxIDw8IDIxKSAvKiBpODMwICovCkBAIC01MDEsMTAgKzUwMywxMiBAQAogI2RlZmluZSBGUEIwCTB4MDYwNDgKICNkZWZpbmUgRlBCMQkweDA2MDRjCiAjZGVmaW5lICAgRlBfTl9ESVZfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIEZQX05fSUdEX0RJVl9NQVNLCTB4MDBmZjAwMDAKICNkZWZpbmUgICBGUF9OX0RJVl9TSElGVAkJMTYKICNkZWZpbmUgICBGUF9NMV9ESVZfTUFTSwkweDAwMDAzZjAwCiAjZGVmaW5lICAgRlBfTTFfRElWX1NISUZUCQkgOAogI2RlZmluZSAgIEZQX00yX0RJVl9NQVNLCTB4MDAwMDAwM2YKKyNkZWZpbmUgICBGUF9NMl9JR0RfRElWX01BU0sJMHgwMDAwMDBmZgogI2RlZmluZSAgIEZQX00yX0RJVl9TSElGVAkJIDAKICNkZWZpbmUgRFBMTF9URVNUCTB4NjA2YwogI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfMQkJKDAgPDwgMjIpCkBAIC02MjksNiArNjMzLDIyIEBACiAjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKICNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQogI2RlZmluZSAgIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVAkJKDEgPDwgMykKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfQUNUSVZBVElPTl9QRVJJT0RfMzIJKDAgPDwgOCkKKy8qIG11c3QgdXNlIHBlcmlvZCA2NCBvbiBHTTQ1IGFjY29yZGluZyB0byBkb2NzICovCisjZGVmaW5lIENSVF9IT1RQTFVHX0FDVElWQVRJT05fUEVSSU9EXzY0CSgxIDw8IDgpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RBQ19PTl9USU1FXzJNCQkoMCA8PCA3KQorI2RlZmluZSBDUlRfSE9UUExVR19EQUNfT05fVElNRV80TQkJKDEgPDwgNykKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzQwCQkoMCA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfNTAJCSgxIDw8IDUpCisjZGVmaW5lIENSVF9IT1RQTFVHX1ZPTFRBR0VfQ09NUEFSRV82MAkJKDIgPDwgNSkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzcwCQkoMyA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfTUFTSwkoMyA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfREVMQVlfMUcJCSgwIDw8IDQpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9ERUxBWV8yRwkJKDEgPDwgNCkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfREVURUNUX1ZPTFRBR0VfMzI1TVYJKDAgPDwgMikKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfREVURUNUX1ZPTFRBR0VfNDc1TVYJKDEgPDwgMikKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfTUFTSwkJCSgweDNmYykgLyogQml0cyA5LTIgKi8KKwogCiAjZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKICNkZWZpbmUgICBIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDI5KQpAQCAtODU2LDcgKzg3Niw3IEBACiAgKi8KICMgZGVmaW5lIFRWX0VOQ19DMF9GSVgJCQkoMSA8PCAxMCkKIC8qKiBCaXRzIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQgYnkgc29mdHdhcmUgKi8KLSMgZGVmaW5lIFRWX0NUTF9TQVZFCQkJKCgzIDw8IDgpIHwgKDMgPDwgNikpCisjIGRlZmluZSBUVl9DVExfU0FWRQkJCSgoMSA8PCAxMSkgfCAoMyA8PCA5KSB8ICg3IDw8IDYpIHwgMHhmKQogIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9NQVNLCQkoMyA8PCA0KQogLyoqIFJlYWQtb25seSBzdGF0ZSB0aGF0IHJlcG9ydHMgYWxsIGZlYXR1cmVzIGVuYWJsZWQgKi8KICMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfRU5BQkxFRAkJKDAgPDwgNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaAppbmRleCA1ZWE3MTVhLi5kZTYyMWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oCkBAIC0xNjIsMTMgKzE2MiwxMyBAQAogCXU4IHBhbmVsX3R5cGU7CiAJdTggcnN2ZDE7CiAJLyogTFZEUyBjYXBhYmlsaXRpZXMsIHN0b3JlZCBpbiBhIGR3b3JkICovCi0JdTggcnN2ZDI6MTsKLQl1OCBsdmRzX2VkaWQ6MTsKLQl1OCBwaXhlbF9kaXRoZXI6MTsKLQl1OCBwZml0X3JhdGlvX2F1dG86MTsKLQl1OCBwZml0X2dmeF9tb2RlX2VuaGFuY2VkOjE7Ci0JdTggcGZpdF90ZXh0X21vZGVfZW5oYW5jZWQ6MTsKIAl1OCBwZml0X21vZGU6MjsKKwl1OCBwZml0X3RleHRfbW9kZV9lbmhhbmNlZDoxOworCXU4IHBmaXRfZ2Z4X21vZGVfZW5oYW5jZWQ6MTsKKwl1OCBwZml0X3JhdGlvX2F1dG86MTsKKwl1OCBwaXhlbF9kaXRoZXI6MTsKKwl1OCBsdmRzX2VkaWQ6MTsKKwl1OCByc3ZkMjoxOwogCXU4IHJzdmQ0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBkY2FlZDM0Li4yYjZkNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtNjQsMTEgKzY0LDIxIEBACiBzdGF0aWMgaW50IGludGVsX2NydF9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCisJaW50IG1heF9jbG9jayA9IDA7CiAJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQogCQlyZXR1cm4gTU9ERV9OT19EQkxFU0NBTjsKIAotCWlmIChtb2RlLT5jbG9jayA+IDQwMDAwMCB8fCBtb2RlLT5jbG9jayA8IDI1MDAwKQotCQlyZXR1cm4gTU9ERV9DTE9DS19SQU5HRTsKKwlpZiAobW9kZS0+Y2xvY2sgPCAyNTAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCisJaWYgKCFJU19JOVhYKGRldikpCisJCW1heF9jbG9jayA9IDM1MDAwMDsKKwllbHNlCisJCW1heF9jbG9jayA9IDQwMDAwMDsKKwlpZiAobW9kZS0+Y2xvY2sgPiBtYXhfY2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAKIAlyZXR1cm4gTU9ERV9PSzsKIH0KQEAgLTExMywxMCArMTIzLDEzIEBACiAJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCiAJCWFkcGEgfD0gQURQQV9WU1lOQ19BQ1RJVkVfSElHSDsKIAotCWlmIChpbnRlbF9jcnRjLT5waXBlID09IDApCisJaWYgKGludGVsX2NydGMtPnBpcGUgPT0gMCkgewogCQlhZHBhIHw9IEFEUEFfUElQRV9BX1NFTEVDVDsKLQllbHNlCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCAwKTsKKwl9IGVsc2UgewogCQlhZHBhIHw9IEFEUEFfUElQRV9CX1NFTEVDVDsKKwkJSTkxNV9XUklURShCQ0xSUEFUX0IsIDApOworCX0KIAogCUk5MTVfV1JJVEUoQURQQSwgYWRwYSk7CiB9CkBAIC0xMzMsMjAgKzE0NiwzOSBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiB0ZW1wOworCXUzMiBob3RwbHVnX2VuOworCWludCBpLCB0cmllcyA9IDA7CisJLyoKKwkgKiBPbiA0IHNlcmllcyBkZXNrdG9wLCBDUlQgZGV0ZWN0IHNlcXVlbmNlIG5lZWQgdG8gYmUgZG9uZSB0d2ljZQorCSAqIHRvIGdldCBhIHJlbGlhYmxlIHJlc3VsdC4KKwkgKi8KIAotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCWlmIChJU19HNFgoZGV2KSAmJiAhSVNfR000NShkZXYpKQorCQl0cmllcyA9IDI7CisJZWxzZQorCQl0cmllcyA9IDE7CisJaG90cGx1Z19lbiA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOworCWhvdHBsdWdfZW4gJj0gfihDUlRfSE9UUExVR19NQVNLKTsKKwlob3RwbHVnX2VuIHw9IENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVDsKIAotCXRlbXAgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKKwlpZiAoSVNfR000NShkZXYpKQorCQlob3RwbHVnX2VuIHw9IENSVF9IT1RQTFVHX0FDVElWQVRJT05fUEVSSU9EXzY0OwogCi0JSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sCi0JCSAgIHRlbXAgfCBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QgfCAoMSA8PCA1KSk7CisJaG90cGx1Z19lbiB8PSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfNTA7CiAKLQlkbyB7Ci0JCWlmICghKEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pICYgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUKSkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfSB3aGlsZSAodGltZV9hZnRlcih0aW1lb3V0LCBqaWZmaWVzKSk7CisJZm9yIChpID0gMDsgaSA8IHRyaWVzIDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwkJLyogdHVybiBvbiB0aGUgRk9SQ0VfREVURUNUICovCisJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLCBob3RwbHVnX2VuKTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCQkvKiB3YWl0IGZvciBGT1JDRV9ERVRFQ1QgdG8gZ28gb2ZmICovCisJCWRvIHsKKwkJCWlmICghKEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pICYKKwkJCQkJQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUKSkKKwkJCQlicmVhazsKKwkJCW1zbGVlcCgxKTsKKwkJfSB3aGlsZSAodGltZV9hZnRlcih0aW1lb3V0LCBqaWZmaWVzKSk7CisJfQogCiAJaWYgKChJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpICYgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLKSA9PQogCSAgICBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGEyODM0MjcuLmQ5YzUwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTU2LDExICs1NiwxMyBAQAogfSBpbnRlbF9wMl90OwogCiAjZGVmaW5lIElOVEVMX1AyX05VTQkJICAgICAgMgotCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdF90Oworc3RydWN0IGludGVsX2xpbWl0IHsKICAgICBpbnRlbF9yYW5nZV90ICAgZG90LCB2Y28sIG4sIG0sIG0xLCBtMiwgcCwgcDE7CiAgICAgaW50ZWxfcDJfdAkgICAgcDI7Ci19IGludGVsX2xpbWl0X3Q7CisgICAgYm9vbCAoKiBmaW5kX3BsbCkoY29uc3QgaW50ZWxfbGltaXRfdCAqLCBzdHJ1Y3QgZHJtX2NydGMgKiwKKwkJICAgICAgaW50LCBpbnQsIGludGVsX2Nsb2NrX3QgKik7Cit9OwogCiAjZGVmaW5lIEk4WFhfRE9UX01JTgkJICAyNTAwMAogI2RlZmluZSBJOFhYX0RPVF9NQVgJCSAzNTAwMDAKQEAgLTkwLDE4ICs5MiwzMiBAQAogI2RlZmluZSBJOVhYX0RPVF9NQVgJCSA0MDAwMDAKICNkZWZpbmUgSTlYWF9WQ09fTUlOCQkxNDAwMDAwCiAjZGVmaW5lIEk5WFhfVkNPX01BWAkJMjgwMDAwMAorI2RlZmluZSBJR0RfVkNPX01JTgkJMTcwMDAwMAorI2RlZmluZSBJR0RfVkNPX01BWAkJMzUwMDAwMAogI2RlZmluZSBJOVhYX05fTUlOCQkgICAgICAxCiAjZGVmaW5lIEk5WFhfTl9NQVgJCSAgICAgIDYKKy8qIElHRCdzIE5jb3VudGVyIGlzIGEgcmluZyBjb3VudGVyICovCisjZGVmaW5lIElHRF9OX01JTgkJICAgICAgMworI2RlZmluZSBJR0RfTl9NQVgJCSAgICAgIDYKICNkZWZpbmUgSTlYWF9NX01JTgkJICAgICA3MAogI2RlZmluZSBJOVhYX01fTUFYCQkgICAgMTIwCisjZGVmaW5lIElHRF9NX01JTgkJICAgICAgMgorI2RlZmluZSBJR0RfTV9NQVgJCSAgICAyNTYKICNkZWZpbmUgSTlYWF9NMV9NSU4JCSAgICAgMTAKICNkZWZpbmUgSTlYWF9NMV9NQVgJCSAgICAgMjIKICNkZWZpbmUgSTlYWF9NMl9NSU4JCSAgICAgIDUKICNkZWZpbmUgSTlYWF9NMl9NQVgJCSAgICAgIDkKKy8qIElHRCBNMSBpcyByZXNlcnZlZCwgYW5kIG11c3QgYmUgMCAqLworI2RlZmluZSBJR0RfTTFfTUlOCQkgICAgICAwCisjZGVmaW5lIElHRF9NMV9NQVgJCSAgICAgIDAKKyNkZWZpbmUgSUdEX00yX01JTgkJICAgICAgMAorI2RlZmluZSBJR0RfTTJfTUFYCQkgICAgICAyNTQKICNkZWZpbmUgSTlYWF9QX1NEVk9fREFDX01JTgkgICAgICA1CiAjZGVmaW5lIEk5WFhfUF9TRFZPX0RBQ19NQVgJICAgICA4MAogI2RlZmluZSBJOVhYX1BfTFZEU19NSU4JCSAgICAgIDcKICNkZWZpbmUgSTlYWF9QX0xWRFNfTUFYCQkgICAgIDk4CisjZGVmaW5lIElHRF9QX0xWRFNfTUlOCQkgICAgICA3CisjZGVmaW5lIElHRF9QX0xWRFNfTUFYCQkgICAgIDExMgogI2RlZmluZSBJOVhYX1AxX01JTgkJICAgICAgMQogI2RlZmluZSBJOVhYX1AxX01BWAkJICAgICAgOAogI2RlZmluZSBJOVhYX1AyX1NEVk9fREFDX1NMT1cJCSAgICAgMTAKQEAgLTExNSw2ICsxMzEsOTcgQEAKICNkZWZpbmUgSU5URUxfTElNSVRfSThYWF9MVkRTCSAgICAxCiAjZGVmaW5lIElOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUMgICAyCiAjZGVmaW5lIElOVEVMX0xJTUlUX0k5WFhfTFZEUwkgICAgMworI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfU0RWTwkgICAgNAorI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfSERNSV9EQUMgICA1CisjZGVmaW5lIElOVEVMX0xJTUlUX0c0WF9TSU5HTEVfQ0hBTk5FTF9MVkRTICAgNgorI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfRFVBTF9DSEFOTkVMX0xWRFMgICA3CisjZGVmaW5lIElOVEVMX0xJTUlUX0lHRF9TRFZPX0RBQyAgICA4CisjZGVmaW5lIElOVEVMX0xJTUlUX0lHRF9MVkRTCSAgICA5CisKKy8qVGhlIHBhcmFtZXRlciBpcyBmb3IgU0RWTyBvbiBHNHggcGxhdGZvcm0qLworI2RlZmluZSBHNFhfRE9UX1NEVk9fTUlOICAgICAgICAgICAyNTAwMAorI2RlZmluZSBHNFhfRE9UX1NEVk9fTUFYICAgICAgICAgICAyNzAwMDAKKyNkZWZpbmUgRzRYX1ZDT19NSU4gICAgICAgICAgICAgICAgMTc1MDAwMAorI2RlZmluZSBHNFhfVkNPX01BWCAgICAgICAgICAgICAgICAzNTAwMDAwCisjZGVmaW5lIEc0WF9OX1NEVk9fTUlOICAgICAgICAgICAgIDEKKyNkZWZpbmUgRzRYX05fU0RWT19NQVggICAgICAgICAgICAgNAorI2RlZmluZSBHNFhfTV9TRFZPX01JTiAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRzRYX01fU0RWT19NQVggICAgICAgICAgICAgMTM4CisjZGVmaW5lIEc0WF9NMV9TRFZPX01JTiAgICAgICAgICAgIDE3CisjZGVmaW5lIEc0WF9NMV9TRFZPX01BWCAgICAgICAgICAgIDIzCisjZGVmaW5lIEc0WF9NMl9TRFZPX01JTiAgICAgICAgICAgIDUKKyNkZWZpbmUgRzRYX00yX1NEVk9fTUFYICAgICAgICAgICAgMTEKKyNkZWZpbmUgRzRYX1BfU0RWT19NSU4gICAgICAgICAgICAgMTAKKyNkZWZpbmUgRzRYX1BfU0RWT19NQVggICAgICAgICAgICAgMzAKKyNkZWZpbmUgRzRYX1AxX1NEVk9fTUlOICAgICAgICAgICAgMQorI2RlZmluZSBHNFhfUDFfU0RWT19NQVggICAgICAgICAgICAzCisjZGVmaW5lIEc0WF9QMl9TRFZPX1NMT1cgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QMl9TRFZPX0ZBU1QgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QMl9TRFZPX0xJTUlUICAgICAgICAgIDI3MDAwMAorCisvKlRoZSBwYXJhbWV0ZXIgaXMgZm9yIEhETUlfREFDIG9uIEc0eCBwbGF0Zm9ybSovCisjZGVmaW5lIEc0WF9ET1RfSERNSV9EQUNfTUlOICAgICAgICAgICAyMjAwMAorI2RlZmluZSBHNFhfRE9UX0hETUlfREFDX01BWCAgICAgICAgICAgNDAwMDAwCisjZGVmaW5lIEc0WF9OX0hETUlfREFDX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX0hETUlfREFDX01BWCAgICAgICAgICAgICA0CisjZGVmaW5lIEc0WF9NX0hETUlfREFDX01JTiAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRzRYX01fSERNSV9EQUNfTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfSERNSV9EQUNfTUlOICAgICAgICAgICAgMTYKKyNkZWZpbmUgRzRYX00xX0hETUlfREFDX01BWCAgICAgICAgICAgIDIzCisjZGVmaW5lIEc0WF9NMl9IRE1JX0RBQ19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9IRE1JX0RBQ19NQVggICAgICAgICAgICAxMQorI2RlZmluZSBHNFhfUF9IRE1JX0RBQ19NSU4gICAgICAgICAgICAgNQorI2RlZmluZSBHNFhfUF9IRE1JX0RBQ19NQVggICAgICAgICAgICAgODAKKyNkZWZpbmUgRzRYX1AxX0hETUlfREFDX01JTiAgICAgICAgICAgIDEKKyNkZWZpbmUgRzRYX1AxX0hETUlfREFDX01BWCAgICAgICAgICAgIDgKKyNkZWZpbmUgRzRYX1AyX0hETUlfREFDX1NMT1cgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QMl9IRE1JX0RBQ19GQVNUICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9QMl9IRE1JX0RBQ19MSU1JVCAgICAgICAgICAxNjUwMDAKKworLypUaGUgcGFyYW1ldGVyIGlzIGZvciBTSU5HTEVfQ0hBTk5FTF9MVkRTIG9uIEc0eCBwbGF0Zm9ybSovCisjZGVmaW5lIEc0WF9ET1RfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgIDIwMDAwCisjZGVmaW5lIEc0WF9ET1RfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgIDExNTAwMAorI2RlZmluZSBHNFhfTl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDMKKyNkZWZpbmUgRzRYX01fU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMTA0CisjZGVmaW5lIEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAxNworI2RlZmluZSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAyMworI2RlZmluZSBHNFhfTTJfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgIDExCisjZGVmaW5lIEc0WF9QX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgIDI4CisjZGVmaW5lIEc0WF9QX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDExMgorI2RlZmluZSBHNFhfUDFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAyCisjZGVmaW5lIEc0WF9QMV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgIDgKKyNkZWZpbmUgRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfU0xPVyAgICAgICAgICAgMTQKKyNkZWZpbmUgRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfRkFTVCAgICAgICAgICAgMTQKKyNkZWZpbmUgRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfTElNSVQgICAgICAgICAgMAorCisvKlRoZSBwYXJhbWV0ZXIgaXMgZm9yIERVQUxfQ0hBTk5FTF9MVkRTIG9uIEc0eCBwbGF0Zm9ybSovCisjZGVmaW5lIEc0WF9ET1RfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICA4MDAwMAorI2RlZmluZSBHNFhfRE9UX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgMjI0MDAwCisjZGVmaW5lIEc0WF9OX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICAzCisjZGVmaW5lIEc0WF9NX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRzRYX01fRFVBTF9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgMTcKKyNkZWZpbmUgRzRYX00xX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgIDIzCisjZGVmaW5lIEc0WF9NMl9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAxMQorI2RlZmluZSBHNFhfUF9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMTQKKyNkZWZpbmUgRzRYX1BfRFVBTF9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDQyCisjZGVmaW5lIEc0WF9QMV9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAyCisjZGVmaW5lIEc0WF9QMV9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICA2CisjZGVmaW5lIEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19TTE9XICAgICAgICAgICA3CisjZGVmaW5lIEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19GQVNUICAgICAgICAgICA3CisjZGVmaW5lIEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19MSU1JVCAgICAgICAgICAwCisKK3N0YXRpYyBib29sCitpbnRlbF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKK3N0YXRpYyBib29sCitpbnRlbF9nNHhfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c1tdID0gewogICAgIHsgLyogSU5URUxfTElNSVRfSThYWF9EVk9fREFDICovCkBAIC0xMjgsNiArMjM1LDcgQEAKICAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk4WFhfUDFfTUlOLAkJLm1heCA9IEk4WFhfUDFfTUFYIH0sCiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk4WFhfUDJfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSThYWF9QMl9TTE9XLAkucDJfZmFzdCA9IEk4WFhfUDJfRkFTVCB9LAorCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCiAgICAgfSwKICAgICB7IC8qIElOVEVMX0xJTUlUX0k4WFhfTFZEUyAqLwogICAgICAgICAuZG90ID0geyAubWluID0gSThYWF9ET1RfTUlOLAkJLm1heCA9IEk4WFhfRE9UX01BWCB9LApAQCAtMTQwLDYgKzI0OCw3IEBACiAgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOFhYX1AxX0xWRFNfTUlOLAkubWF4ID0gSThYWF9QMV9MVkRTX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOFhYX1AyX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk4WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk4WFhfUDJfTFZEU19GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKICAgICB9LAogICAgIHsgLyogSU5URUxfTElNSVRfSTlYWF9TRFZPX0RBQyAqLwogICAgICAgICAuZG90ID0geyAubWluID0gSTlYWF9ET1RfTUlOLAkJLm1heCA9IEk5WFhfRE9UX01BWCB9LApAQCAtMTUyLDYgKzI2MSw3IEBACiAgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOVhYX1AxX01JTiwJCS5tYXggPSBJOVhYX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk5WFhfUDJfU0RWT19EQUNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX1NEVk9fREFDX0ZBU1QgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAogICAgIH0sCiAgICAgeyAvKiBJTlRFTF9MSU1JVF9JOVhYX0xWRFMgKi8KICAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk5WFhfRE9UX01JTiwJCS5tYXggPSBJOVhYX0RPVF9NQVggfSwKQEAgLTE2NywxOSArMjc3LDE1NyBAQAogCSAqLwogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOVhYX1AyX0xWRFNfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSTlYWF9QMl9MVkRTX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9MVkRTX0ZBU1QgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAogICAgIH0sCisgICAgLyogYmVsb3cgcGFyYW1ldGVyIGFuZCBmdW5jdGlvbiBpcyBmb3IgRzRYIENoaXBzZXQgRmFtaWx5Ki8KKyAgICB7IC8qIElOVEVMX0xJTUlUX0c0WF9TRFZPICovCisJLmRvdCA9IHsgLm1pbiA9IEc0WF9ET1RfU0RWT19NSU4sCS5tYXggPSBHNFhfRE9UX1NEVk9fTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IEc0WF9WQ09fTUlOLAkgICAgICAgIC5tYXggPSBHNFhfVkNPX01BWH0sCisJLm4gICA9IHsgLm1pbiA9IEc0WF9OX1NEVk9fTUlOLAkgICAgICAgIC5tYXggPSBHNFhfTl9TRFZPX01BWCB9LAorCS5tICAgPSB7IC5taW4gPSBHNFhfTV9TRFZPX01JTiwgICAgICAgICAubWF4ID0gRzRYX01fU0RWT19NQVggfSwKKwkubTEgID0geyAubWluID0gRzRYX00xX1NEVk9fTUlOLAkubWF4ID0gRzRYX00xX1NEVk9fTUFYIH0sCisJLm0yICA9IHsgLm1pbiA9IEc0WF9NMl9TRFZPX01JTiwJLm1heCA9IEc0WF9NMl9TRFZPX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBHNFhfUF9TRFZPX01JTiwgICAgICAgICAubWF4ID0gRzRYX1BfU0RWT19NQVggfSwKKwkucDEgID0geyAubWluID0gRzRYX1AxX1NEVk9fTUlOLAkubWF4ID0gRzRYX1AxX1NEVk9fTUFYfSwKKwkucDIgID0geyAuZG90X2xpbWl0ID0gRzRYX1AyX1NEVk9fTElNSVQsCisJCSAucDJfc2xvdyA9IEc0WF9QMl9TRFZPX1NMT1csCisJCSAucDJfZmFzdCA9IEc0WF9QMl9TRFZPX0ZBU1QKKwl9LAorCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorICAgIH0sCisgICAgeyAvKiBJTlRFTF9MSU1JVF9HNFhfSERNSV9EQUMgKi8KKwkuZG90ID0geyAubWluID0gRzRYX0RPVF9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfRE9UX0hETUlfREFDX01BWCB9LAorCS52Y28gPSB7IC5taW4gPSBHNFhfVkNPX01JTiwJICAgICAgICAubWF4ID0gRzRYX1ZDT19NQVh9LAorCS5uICAgPSB7IC5taW4gPSBHNFhfTl9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfTl9IRE1JX0RBQ19NQVggfSwKKwkubSAgID0geyAubWluID0gRzRYX01fSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX01fSERNSV9EQUNfTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IEc0WF9NMV9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfTTFfSERNSV9EQUNfTUFYIH0sCisJLm0yICA9IHsgLm1pbiA9IEc0WF9NMl9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfTTJfSERNSV9EQUNfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IEc0WF9QX0hETUlfREFDX01JTiwJLm1heCA9IEc0WF9QX0hETUlfREFDX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBHNFhfUDFfSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX1AxX0hETUlfREFDX01BWH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9IRE1JX0RBQ19MSU1JVCwKKwkJIC5wMl9zbG93ID0gRzRYX1AyX0hETUlfREFDX1NMT1csCisJCSAucDJfZmFzdCA9IEc0WF9QMl9IRE1JX0RBQ19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfRzRYX1NJTkdMRV9DSEFOTkVMX0xWRFMgKi8KKwkuZG90ID0geyAubWluID0gRzRYX0RPVF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfRE9UX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IEc0WF9WQ09fTUlOLAorCQkgLm1heCA9IEc0WF9WQ09fTUFYIH0sCisJLm4gICA9IHsgLm1pbiA9IEc0WF9OX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9OX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IEc0WF9NMV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubTIgID0geyAubWluID0gRzRYX00yX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBHNFhfUF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfUF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBHNFhfUDFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX1AxX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBHNFhfUDJfU0lOR0xFX0NIQU5ORUxfTFZEU19TTE9XLAorCQkgLnAyX2Zhc3QgPSBHNFhfUDJfU0lOR0xFX0NIQU5ORUxfTFZEU19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfRzRYX0RVQUxfQ0hBTk5FTF9MVkRTICovCisJLmRvdCA9IHsgLm1pbiA9IEc0WF9ET1RfRFVBTF9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9ET1RfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IEc0WF9WQ09fTUlOLAorCQkgLm1heCA9IEc0WF9WQ09fTUFYIH0sCisJLm4gICA9IHsgLm1pbiA9IEc0WF9OX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTl9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubSAgID0geyAubWluID0gRzRYX01fRFVBTF9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5tMSAgPSB7IC5taW4gPSBHNFhfTTFfRFVBTF9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NMV9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubTIgID0geyAubWluID0gRzRYX00yX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTTJfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IEc0WF9QX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfUF9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkucDEgID0geyAubWluID0gRzRYX1AxX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfUDFfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19MSU1JVCwKKwkJIC5wMl9zbG93ID0gRzRYX1AyX0RVQUxfQ0hBTk5FTF9MVkRTX1NMT1csCisJCSAucDJfZmFzdCA9IEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfSUdEX1NEVk8gKi8KKyAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk5WFhfRE9UX01JTiwJCS5tYXggPSBJOVhYX0RPVF9NQVh9LAorICAgICAgICAudmNvID0geyAubWluID0gSUdEX1ZDT19NSU4sCQkubWF4ID0gSUdEX1ZDT19NQVggfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IElHRF9OX01JTiwJCS5tYXggPSBJR0RfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IElHRF9NX01JTiwJCS5tYXggPSBJR0RfTV9NQVggfSwKKyAgICAgICAgLm0xICA9IHsgLm1pbiA9IElHRF9NMV9NSU4sCQkubWF4ID0gSUdEX00xX01BWCB9LAorICAgICAgICAubTIgID0geyAubWluID0gSUdEX00yX01JTiwJCS5tYXggPSBJR0RfTTJfTUFYIH0sCisgICAgICAgIC5wICAgPSB7IC5taW4gPSBJOVhYX1BfU0RWT19EQUNfTUlOLCAgICAubWF4ID0gSTlYWF9QX1NEVk9fREFDX01BWCB9LAorICAgICAgICAucDEgID0geyAubWluID0gSTlYWF9QMV9NSU4sCQkubWF4ID0gSTlYWF9QMV9NQVggfSwKKwkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9TRFZPX0RBQ19GQVNUIH0sCisgICAgfSwKKyAgICB7IC8qIElOVEVMX0xJTUlUX0lHRF9MVkRTICovCisgICAgICAgIC5kb3QgPSB7IC5taW4gPSBJOVhYX0RPVF9NSU4sCQkubWF4ID0gSTlYWF9ET1RfTUFYIH0sCisgICAgICAgIC52Y28gPSB7IC5taW4gPSBJR0RfVkNPX01JTiwJCS5tYXggPSBJR0RfVkNPX01BWCB9LAorICAgICAgICAubiAgID0geyAubWluID0gSUdEX05fTUlOLAkJLm1heCA9IElHRF9OX01BWCB9LAorICAgICAgICAubSAgID0geyAubWluID0gSUdEX01fTUlOLAkJLm1heCA9IElHRF9NX01BWCB9LAorICAgICAgICAubTEgID0geyAubWluID0gSUdEX00xX01JTiwJCS5tYXggPSBJR0RfTTFfTUFYIH0sCisgICAgICAgIC5tMiAgPSB7IC5taW4gPSBJR0RfTTJfTUlOLAkJLm1heCA9IElHRF9NMl9NQVggfSwKKyAgICAgICAgLnAgICA9IHsgLm1pbiA9IElHRF9QX0xWRFNfTUlOLAkubWF4ID0gSUdEX1BfTFZEU19NQVggfSwKKyAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk5WFhfUDFfTUlOLAkJLm1heCA9IEk5WFhfUDFfTUFYIH0sCisJLyogSUdEIG9ubHkgc3VwcG9ydHMgc2luZ2xlLWNoYW5uZWwgbW9kZS4gKi8KKwkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9MVkRTX1NMT1dfTElNSVQsCisJCSAucDJfc2xvdyA9IEk5WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfTFZEU19TTE9XIH0sCisgICAgfSwKKwogfTsKIAorc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2c0eF9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OworCisJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKSB7CisJCWlmICgoSTkxNV9SRUFEKExWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CisJCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApCisJCQkvKiBMVkRTIHdpdGggZHVhbCBjaGFubmVsICovCisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHMKKwkJCQkJW0lOVEVMX0xJTUlUX0c0WF9EVUFMX0NIQU5ORUxfTFZEU107CisJCWVsc2UKKwkJCS8qIExWRFMgd2l0aCBkdWFsIGNoYW5uZWwgKi8KKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0cworCQkJCQlbSU5URUxfTElNSVRfRzRYX1NJTkdMRV9DSEFOTkVMX0xWRFNdOworCX0gZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfSERNSSkgfHwKKwkJICAgaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfQU5BTE9HKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNbSU5URUxfTElNSVRfRzRYX0hETUlfREFDXTsKKwl9IGVsc2UgaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX1NEVk8pKSB7CisJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9HNFhfU0RWT107CisJfSBlbHNlIC8qIFRoZSBvcHRpb24gaXMgZm9yIG90aGVyIG91dHB1dHMgKi8KKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUNdOworCisJcmV0dXJuIGxpbWl0OworfQorCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCAqaW50ZWxfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7CiAKLQlpZiAoSVNfSTlYWChkZXYpKSB7CisJaWYgKElTX0c0WChkZXYpKSB7CisJCWxpbWl0ID0gaW50ZWxfZzR4X2xpbWl0KGNydGMpOworCX0gZWxzZSBpZiAoSVNfSTlYWChkZXYpICYmICFJU19JR0QoZGV2KSkgewogCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpCiAJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNbSU5URUxfTElNSVRfSTlYWF9MVkRTXTsKIAkJZWxzZQogCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUNdOworCX0gZWxzZSBpZiAoSVNfSUdEKGRldikpIHsKKwkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0lHRF9MVkRTXTsKKwkJZWxzZQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0lHRF9TRFZPX0RBQ107CiAJfSBlbHNlIHsKIAkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQogCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k4WFhfTFZEU107CkBAIC0xODksOCArNDM3LDIxIEBACiAJcmV0dXJuIGxpbWl0OwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKKy8qIG0xIGlzIHJlc2VydmVkIGFzIDAgaW4gSUdELCBuIGlzIGEgcmluZyBjb3VudGVyICovCitzdGF0aWMgdm9pZCBpZ2RfY2xvY2soaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqY2xvY2spCiB7CisJY2xvY2stPm0gPSBjbG9jay0+bTIgKyAyOworCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOworCWNsb2NrLT52Y28gPSByZWZjbGsgKiBjbG9jay0+bSAvIGNsb2NrLT5uOworCWNsb2NrLT5kb3QgPSBjbG9jay0+dmNvIC8gY2xvY2stPnA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Nsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmNsb2NrKQoreworCWlmIChJU19JR0QoZGV2KSkgeworCQlpZ2RfY2xvY2socmVmY2xrLCBjbG9jayk7CisJCXJldHVybjsKKwl9CiAJY2xvY2stPm0gPSA1ICogKGNsb2NrLT5tMSArIDIpICsgKGNsb2NrLT5tMiArIDIpOwogCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOwogCWNsb2NrLT52Y28gPSByZWZjbGsgKiBjbG9jay0+bSAvIChjbG9jay0+biArIDIpOwpAQCAtMjI2LDYgKzQ4Nyw3IEBACiBzdGF0aWMgYm9vbCBpbnRlbF9QTExfaXNfdmFsaWQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnRlbF9jbG9ja190ICpjbG9jaykKIHsKIAljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCA9IGludGVsX2xpbWl0IChjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCiAJaWYgKGNsb2NrLT5wMSAgPCBsaW1pdC0+cDEubWluICB8fCBsaW1pdC0+cDEubWF4ICA8IGNsb2NrLT5wMSkKIAkJSU5URUxQbGxJbnZhbGlkICgicDEgb3V0IG9mIHJhbmdlXG4iKTsKQEAgLTIzNSw3ICs0OTcsNyBAQAogCQlJTlRFTFBsbEludmFsaWQgKCJtMiBvdXQgb2YgcmFuZ2VcbiIpOwogCWlmIChjbG9jay0+bTEgIDwgbGltaXQtPm0xLm1pbiAgfHwgbGltaXQtPm0xLm1heCAgPCBjbG9jay0+bTEpCiAJCUlOVEVMUGxsSW52YWxpZCAoIm0xIG91dCBvZiByYW5nZVxuIik7Ci0JaWYgKGNsb2NrLT5tMSA8PSBjbG9jay0+bTIpCisJaWYgKGNsb2NrLT5tMSA8PSBjbG9jay0+bTIgJiYgIUlTX0lHRChkZXYpKQogCQlJTlRFTFBsbEludmFsaWQgKCJtMSA8PSBtMlxuIik7CiAJaWYgKGNsb2NrLT5tICAgPCBsaW1pdC0+bS5taW4gICB8fCBsaW1pdC0+bS5tYXggICA8IGNsb2NrLT5tKQogCQlJTlRFTFBsbEludmFsaWQgKCJtIG91dCBvZiByYW5nZVxuIik7CkBAIC0yNTIsMTggKzUxNCwxNCBAQAogCXJldHVybiB0cnVlOwogfQogCi0vKioKLSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgotICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKLSAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KLSAqLwotc3RhdGljIGJvb2wgaW50ZWxfZmluZF9iZXN0X1BMTChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0YXJnZXQsCi0JCQkJaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKK3N0YXRpYyBib29sCitpbnRlbF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQorCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludGVsX2Nsb2NrX3QgY2xvY2s7Ci0JY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQgPSBpbnRlbF9saW1pdChjcnRjKTsKIAlpbnQgZXJyID0gdGFyZ2V0OwogCiAJaWYgKElTX0k5WFgoZGV2KSAmJiBpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSAmJgpAQCAtMjg5LDE1ICs1NDcsMTcgQEAKIAltZW1zZXQgKGJlc3RfY2xvY2ssIDAsIHNpemVvZiAoKmJlc3RfY2xvY2spKTsKIAogCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OyBjbG9jay5tMSsrKSB7Ci0JCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOyBjbG9jay5tMiA8IGNsb2NrLm0xICYmCi0JCQkgICAgIGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJCS8qIG0xIGlzIGFsd2F5cyAwIGluIElHRCAqLworCQkJaWYgKGNsb2NrLm0yID49IGNsb2NrLm0xICYmICFJU19JR0QoZGV2KSkKKwkJCQlicmVhazsKIAkJCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBsaW1pdC0+bi5tYXg7CiAJCQkgICAgIGNsb2NrLm4rKykgewogCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWluOwogCQkJCSAgICAgY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgewogCQkJCQlpbnQgdGhpc19lcnI7CiAKLQkJCQkJaW50ZWxfY2xvY2socmVmY2xrLCAmY2xvY2spOworCQkJCQlpbnRlbF9jbG9jayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKIAogCQkJCQlpZiAoIWludGVsX1BMTF9pc192YWxpZChjcnRjLCAmY2xvY2spKQogCQkJCQkJY29udGludWU7CkBAIC0zMTUsNiArNTc1LDYzIEBACiAJcmV0dXJuIChlcnIgIT0gdGFyZ2V0KTsKIH0KIAorc3RhdGljIGJvb2wKK2ludGVsX2c0eF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQlpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnRlbF9jbG9ja190IGNsb2NrOworCWludCBtYXhfbjsKKwlib29sIGZvdW5kOworCS8qIGFwcHJveGltYXRlbHkgZXF1YWxzIHRhcmdldCAqIDAuMDA0ODggKi8KKwlpbnQgZXJyX21vc3QgPSAodGFyZ2V0ID4+IDgpICsgKHRhcmdldCA+PiAxMCk7CisJZm91bmQgPSBmYWxzZTsKKworCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoKEk5MTVfUkVBRChMVkRTKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQorCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKKwkJZWxzZQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfc2xvdzsKKwl9IGVsc2UgeworCQlpZiAodGFyZ2V0IDwgbGltaXQtPnAyLmRvdF9saW1pdCkKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7CisJCWVsc2UKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7CisJfQorCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCW1heF9uID0gbGltaXQtPm4ubWF4OworCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KKwlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247IGNsb2NrLm4rKykgeworCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yLCBwMSAqLworCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKKwkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7CisJCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1heDsKKwkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgeworCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OworCQkJCSAgICAgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgeworCQkJCQlpbnQgdGhpc19lcnI7CisKKwkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7CisJCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGNydGMsICZjbG9jaykpCisJCQkJCQljb250aW51ZTsKKwkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KSA7CisJCQkJCWlmICh0aGlzX2VyciA8IGVycl9tb3N0KSB7CisJCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQkJZXJyX21vc3QgPSB0aGlzX2VycjsKKwkJCQkJCW1heF9uID0gY2xvY2subjsKKwkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBmb3VuZDsKK30KKwogdm9pZAogaW50ZWxfd2FpdF9mb3JfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC02MzQsNyArOTUxLDcgQEAKIAkJcmV0dXJuIDQwMDAwMDsKIAllbHNlIGlmIChJU19JOTE1RyhkZXYpKQogCQlyZXR1cm4gMzMzMDAwOwotCWVsc2UgaWYgKElTX0k5NDVHTShkZXYpIHx8IElTXzg0NUcoZGV2KSkKKwllbHNlIGlmIChJU19JOTQ1R00oZGV2KSB8fCBJU184NDVHKGRldikgfHwgSVNfSUdER00oZGV2KSkKIAkJcmV0dXJuIDIwMDAwMDsKIAllbHNlIGlmIChJU19JOTE1R00oZGV2KSkgewogCQl1MTYgZ2NmZ2MgPSAwOwpAQCAtNzMzLDYgKzEwNTAsNyBAQAogCWJvb2wgaXNfY3J0ID0gZmFsc2UsIGlzX2x2ZHMgPSBmYWxzZSwgaXNfdHYgPSBmYWxzZTsKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7CiAJaW50IHJldDsKIAogCWRybV92YmxhbmtfcHJlX21vZGVzZXQoZGV2LCBwaXBlKTsKQEAgLTc3NiwxMyArMTA5NCwyMiBAQAogCQlyZWZjbGsgPSA0ODAwMDsKIAl9CiAKLQlvayA9IGludGVsX2ZpbmRfYmVzdF9QTEwoY3J0YywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ssIHJlZmNsaywgJmNsb2NrKTsKKwkvKgorCSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgorCSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisJICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgorCSAqLworCWxpbWl0ID0gaW50ZWxfbGltaXQoY3J0Yyk7CisJb2sgPSBsaW1pdC0+ZmluZF9wbGwobGltaXQsIGNydGMsIGFkanVzdGVkX21vZGUtPmNsb2NrLCByZWZjbGssICZjbG9jayk7CiAJaWYgKCFvaykgewogCQlEUk1fRVJST1IoIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKKwlpZiAoSVNfSUdEKGRldikpCisJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CisJZWxzZQorCQlmcCA9IGNsb2NrLm4gPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CiAKIAlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7CiAJaWYgKElTX0k5WFgoZGV2KSkgewpAQCAtNzk5LDcgKzExMjYsMTAgQEAKIAkJfQogCiAJCS8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCi0JCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IDE2OworCQlpZiAoSVNfSUdEKGRldikpCisJCQlkcGxsIHw9ICgxIDw8IChjbG9jay5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUX0lHRDsKKwkJZWxzZQorCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKIAkJc3dpdGNoIChjbG9jay5wMikgewogCQljYXNlIDU6CiAJCQlkcGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfNTsKQEAgLTEyNzksMTAgKzE2MDksMjAgQEAKIAkJZnAgPSBJOTE1X1JFQUQoKHBpcGUgPT0gMCkgPyBGUEExIDogRlBCMSk7CiAKIAljbG9jay5tMSA9IChmcCAmIEZQX00xX0RJVl9NQVNLKSA+PiBGUF9NMV9ESVZfU0hJRlQ7Ci0JY2xvY2subTIgPSAoZnAgJiBGUF9NMl9ESVZfTUFTSykgPj4gRlBfTTJfRElWX1NISUZUOwotCWNsb2NrLm4gPSAoZnAgJiBGUF9OX0RJVl9NQVNLKSA+PiBGUF9OX0RJVl9TSElGVDsKKwlpZiAoSVNfSUdEKGRldikpIHsKKwkJY2xvY2subiA9IGZmcygoZnAgJiBGUF9OX0lHRF9ESVZfTUFTSykgPj4gRlBfTl9ESVZfU0hJRlQpIC0gMTsKKwkJY2xvY2subTIgPSAoZnAgJiBGUF9NMl9JR0RfRElWX01BU0spID4+IEZQX00yX0RJVl9TSElGVDsKKwl9IGVsc2UgeworCQljbG9jay5uID0gKGZwICYgRlBfTl9ESVZfTUFTSykgPj4gRlBfTl9ESVZfU0hJRlQ7CisJCWNsb2NrLm0yID0gKGZwICYgRlBfTTJfRElWX01BU0spID4+IEZQX00yX0RJVl9TSElGVDsKKwl9CisKIAlpZiAoSVNfSTlYWChkZXYpKSB7Ci0JCWNsb2NrLnAxID0gZmZzKChkcGxsICYgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLKSA+PgorCQlpZiAoSVNfSUdEKGRldikpCisJCQljbG9jay5wMSA9IGZmcygoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JR0QpID4+CisJCQkJRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVF9JR0QpOworCQllbHNlCisJCQljbG9jay5wMSA9IGZmcygoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSykgPj4KIAkJCSAgICAgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUKTsKIAogCQlzd2l0Y2ggKGRwbGwgJiBEUExMX01PREVfTUFTSykgewpAQCAtMTMwMSw3ICsxNjQxLDcgQEAKIAkJfQogCiAJCS8qIFhYWDogSGFuZGxlIHRoZSAxMDBNaHogcmVmY2xrICovCi0JCWludGVsX2Nsb2NrKDk2MDAwLCAmY2xvY2spOworCQlpbnRlbF9jbG9jayhkZXYsIDk2MDAwLCAmY2xvY2spOwogCX0gZWxzZSB7CiAJCWJvb2wgaXNfbHZkcyA9IChwaXBlID09IDEpICYmIChJOTE1X1JFQUQoTFZEUykgJiBMVkRTX1BPUlRfRU4pOwogCkBAIC0xMzEzLDkgKzE2NTMsOSBAQAogCQkJaWYgKChkcGxsICYgUExMX1JFRl9JTlBVVF9NQVNLKSA9PQogCQkJICAgIFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU4pIHsKIAkJCQkvKiBYWFg6IG1pZ2h0IG5vdCBiZSA2Nk1IeiAqLwotCQkJCWludGVsX2Nsb2NrKDY2MDAwLCAmY2xvY2spOworCQkJCWludGVsX2Nsb2NrKGRldiwgNjYwMDAsICZjbG9jayk7CiAJCQl9IGVsc2UKLQkJCQlpbnRlbF9jbG9jayg0ODAwMCwgJmNsb2NrKTsKKwkJCQlpbnRlbF9jbG9jayhkZXYsIDQ4MDAwLCAmY2xvY2spOwogCQl9IGVsc2UgewogCQkJaWYgKGRwbGwgJiBQTExfUDFfRElWSURFX0JZX1RXTykKIAkJCQljbG9jay5wMSA9IDI7CkBAIC0xMzI4LDcgKzE2NjgsNyBAQAogCQkJZWxzZQogCQkJCWNsb2NrLnAyID0gMjsKIAotCQkJaW50ZWxfY2xvY2soNDgwMDAsICZjbG9jayk7CisJCQlpbnRlbF9jbG9jayhkZXYsIDQ4MDAwLCAmY2xvY2spOwogCQl9CiAJfQogCkBAIC0xNDc0LDEzICsxODE0LDIxIEBACiAKIAlpZiAoSVNfSTlYWChkZXYpKSB7CiAJCWludCBmb3VuZDsKKwkJdTMyIHJlZzsKIAogCQlpZiAoSTkxNV9SRUFEKFNEVk9CKSAmIFNEVk9fREVURUNURUQpIHsKIAkJCWZvdW5kID0gaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0IpOwogCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0hETUkoZGV2KSkKIAkJCQlpbnRlbF9oZG1pX2luaXQoZGV2LCBTRFZPQik7CiAJCX0KLQkJaWYgKCFJU19HNFgoZGV2KSB8fCAoSTkxNV9SRUFEKFNEVk9CKSAmIFNEVk9fREVURUNURUQpKSB7CisKKwkJLyogQmVmb3JlIEc0WCBTRFZPQyBkb2Vzbid0IGhhdmUgaXRzIG93biBkZXRlY3QgcmVnaXN0ZXIgKi8KKwkJaWYgKElTX0c0WChkZXYpKQorCQkJcmVnID0gU0RWT0M7CisJCWVsc2UKKwkJCXJlZyA9IFNEVk9COworCisJCWlmIChJOTE1X1JFQUQocmVnKSAmIFNEVk9fREVURUNURUQpIHsKIAkJCWZvdW5kID0gaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0MpOwogCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0hETUkoZGV2KSkKIAkJCQlpbnRlbF9oZG1pX2luaXQoZGV2LCBTRFZPQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggMGQyMTFhZi4uNjYxOWYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCXBmaXRfY29udHJvbCA9IDA7CiAKIAlpZiAoIUlTX0k5NjVHKGRldikpIHsKLQkJaWYgKGRldl9wcml2LT5wYW5lbF93YW50c19kaXRoZXIpCisJCWlmIChkZXZfcHJpdi0+cGFuZWxfd2FudHNfZGl0aGVyIHx8IGRldl9wcml2LT5sdmRzX2RpdGhlcikKIAkJCXBmaXRfY29udHJvbCB8PSBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEU7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDU2NDg1ZDYuLmNlY2E5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMjE3LDggKzIxNyw4IEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX21fY3NjX2NvbXBvc2l0ZSA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMDQsCi0JLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19tX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0yMjYsOSArMjI2LDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX21fY3NjX3N2aWRlbyA9IHsKLQkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzQsCi0JLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MGYwMCwKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzMsCisJLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIG50c2NfbV9sZXZlbHNfc3ZpZGVvID0gewpAQCAtMjM3LDggKzIzNyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX2pfY3NjX2NvbXBvc2l0ZSA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMTksCi0JLnJ1ID0gMHgwNzRjLCAuZ3UgPSAweDA1NDYsIC5idSA9IDB4MDVlYywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM1YSwgLmd2ID0gMHgwMzIyLCAuYnYgPSAweDA2ZTEsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3NGMsIC5ndSA9IDB4MDU0NiwgLmJ1ID0gMHgwNWVjLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzVhLCAuZ3YgPSAweDAzMjIsIC5idiA9IDB4MDZlMSwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19qX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0yNDcsOCArMjQ3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIG50c2Nfal9jc2Nfc3ZpZGVvID0gewogCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0YywKLQkucnUgPSAweDA3ODgsIC5ndSA9IDB4MDU4MSwgLmJ1ID0gMHgwMzIyLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzk5LCAuZ3YgPSAweDAzNTYsIC5idiA9IDB4MDcwYSwgLmF2ID0gMHgwZjAwLAorCS5ydSA9IDB4MDc4OCwgLmd1ID0gMHgwNTgxLCAuYnUgPSAweDAzMjIsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzOTksIC5ndiA9IDB4MDM1NiwgLmJ2ID0gMHgwNzBhLCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBudHNjX2pfbGV2ZWxzX3N2aWRlbyA9IHsKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTEzLAotCS5ydSA9IDB4MDc0NSwgLmd1ID0gMHgwNTNmLCAuYnUgPSAweDA1ZTEsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNTMsIC5ndiA9IDB4MDMxYywgLmJ2ID0gMHgwNmRjLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzQ1LCAuZ3UgPSAweDA1M2YsIC5idSA9IDB4MDVlMSwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM1MywgLmd2ID0gMHgwMzFjLCAuYnYgPSAweDA2ZGMsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9sZXZlbHNfY29tcG9zaXRlID0gewpAQCAtMjY3LDggKzI2Nyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfY3NjX3N2aWRlbyA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxNDUsCi0JLnJ1ID0gMHgwNzgwLCAuZ3UgPSAweDA1NzksIC5idSA9IDB4MDMxYywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM5MCwgLmd2ID0gMHgwMzRmLCAuYnYgPSAweDA3MDUsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3ODAsIC5ndSA9IDB4MDU3OSwgLmJ1ID0gMHgwMzFjLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzkwLCAuZ3YgPSAweDAzNGYsIC5idiA9IDB4MDcwNSwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX2xldmVsc19zdmlkZW8gPSB7CkBAIC0yNzcsOCArMjc3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9tX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTA0LAotCS5ydSA9IDB4MDczMywgLmd1ID0gMHgwNTJkLCAuYnUgPSAweDA1YzcsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNDAsIC5ndiA9IDB4MDMwYywgLmJ2ID0gMHgwNmQwLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9tX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0yODYsOSArMjg2LDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfbV9jc2Nfc3ZpZGVvID0gewotCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEzNCwKLQkucnUgPSAweDA3NmEsIC5ndSA9IDB4MDU2NCwgLmJ1ID0gMHgwMzBkLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzdhLCAuZ3YgPSAweDAzM2QsIC5idiA9IDB4MDZmNiwgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEzMywKKwkucnUgPSAweDA3NmEsIC5ndSA9IDB4MDU2NCwgLmJ1ID0gMHgwMzBkLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzdhLCAuZ3YgPSAweDAzM2QsIC5idiA9IDB4MDZmNiwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX21fbGV2ZWxzX3N2aWRlbyA9IHsKQEAgLTI5Nyw4ICsyOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX25fY3NjX2NvbXBvc2l0ZSA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMDQsCi0JLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX25fbGV2ZWxzX2NvbXBvc2l0ZSA9IHsKQEAgLTMwNiw5ICszMDYsOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9uX2NzY19zdmlkZW8gPSB7Ci0JLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTM0LAotCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDBmMDAsCisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTMzLAorCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbl9sZXZlbHNfc3ZpZGVvID0gewpAQCAtMzE5LDkgKzMxOSw5IEBACiAgKiBDb21wb25lbnQgY29ubmVjdGlvbnMKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHNkdHZfY3NjX3lwcnBiID0gewotCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0NiwKLQkucnUgPSAweDA1NTksIC5ndSA9IDB4MDM1MywgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzYWQsIC5idiA9IDB4MDc0ZCwgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0NSwKKwkucnUgPSAweDA1NTksIC5ndSA9IDB4MDM1MywgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzYWQsIC5idiA9IDB4MDc0ZCwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHNkdHZfY3NjX3JnYiA9IHsKQEAgLTMzMSw5ICszMzEsOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIGhkdHZfY3NjX3lwcnBiID0gewotCS5yeSA9IDB4MDViMywgLmd5ID0gMHgwMTZlLCAuYnkgPSAweDA3MjgsIC5heSA9IDB4MDE0NiwKLQkucnUgPSAweDA3ZDUsIC5ndSA9IDB4MDM4YiwgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzZDEsIC5idiA9IDB4MDZiYywgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDViMywgLmd5ID0gMHgwMTZlLCAuYnkgPSAweDA3MjgsIC5heSA9IDB4MDE0NSwKKwkucnUgPSAweDA3ZDUsIC5ndSA9IDB4MDM4YiwgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzZDEsIC5idiA9IDB4MDZiYywgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIGhkdHZfY3NjX3JnYiA9IHsKQEAgLTQxNCw3ICs0MTQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dl9tb2RlIHR2X21vZGVzW10gPSB7CiAJewogCQkubmFtZQkJPSAiTlRTQy1NIiwKLQkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLmNsb2NrCQk9IDEwODAwMCwKIAkJLnJlZnJlc2gJPSAyOTk3MCwKIAkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAogCQkuY29tcG9uZW50X29ubHkgPSAwLApAQCAtNDQyLDggKzQ0Miw4IEBACiAJCS52YnVyc3Rfc3RhcnRfZjQgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mNAk9IDI0MCwKIAogCQkvKiBkZXNpcmVkIDMuNTgwMDAwMCBhY3R1YWwgMy41ODAwMDAwIGNsb2NrIDEwNy41MiAqLwotCQkuZGRhMV9pbmMJPSAgICAxMzYsCi0JCS5kZGEyX2luYwk9ICAgNzYyNCwJICAgIC5kZGEyX3NpemUJCT0gIDIwMDEzLAorCQkuZGRhMV9pbmMJPSAgICAxMzUsCisJCS5kZGEyX2luYwk9ICAyMDgwMCwJICAgIC5kZGEyX3NpemUJCT0gIDI3NDU2LAogCQkuZGRhM19pbmMJPSAgICAgIDAsCSAgICAuZGRhM19zaXplCQk9ICAgICAgMCwKIAkJLnNjX3Jlc2V0CT0gVFZfU0NfUkVTRVRfRVZFUllfNCwKIAkJLnBhbF9idXJzdAk9IGZhbHNlLApAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJfSwKIAl7CiAJCS5uYW1lCQk9ICJOVFNDLTQ0MyIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjk5NzAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTQ4NSwxMCArNDg1LDEwIEBACiAKIAkJLyogZGVzaXJlZCA0LjQzMzYxODAgYWN0dWFsIDQuNDMzNjE4MCBjbG9jayAxMDcuNTIgKi8KIAkJLmRkYTFfaW5jICAgICAgID0gICAgMTY4LAotCQkuZGRhMl9pbmMgICAgICAgPSAgMTg1NTcsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyMDYyNSwKLQkJLmRkYTNfaW5jICAgICAgID0gICAgICAwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICAgIDAsCi0JCS5zY19yZXNldCAgID0gVFZfU0NfUkVTRVRfRVZFUllfOCwKLQkJLnBhbF9idXJzdCAgPSB0cnVlLAorCQkuZGRhMl9pbmMgICAgICAgPSAgIDQwOTMsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyNzQ1NiwKKwkJLmRkYTNfaW5jICAgICAgID0gICAgMzEwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICA1MjUsCisJCS5zY19yZXNldCAgID0gVFZfU0NfUkVTRVRfTkVWRVIsCisJCS5wYWxfYnVyc3QgID0gZmFsc2UsCiAKIAkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmbnRzY19tX2xldmVsc19jb21wb3NpdGUsCiAJCS5jb21wb3NpdGVfY29sb3IgPSAmbnRzY19tX2NzY19jb21wb3NpdGUsCkBAIC00OTksNyArNDk5LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gIk5UU0MtSiIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjk5NzAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTUyNyw4ICs1MjcsOCBAQAogCQkudmJ1cnN0X3N0YXJ0X2Y0ID0gMTAsCQkgICAgLnZidXJzdF9lbmRfZjQJPSAyNDAsCiAKIAkJLyogZGVzaXJlZCAzLjU4MDAwMDAgYWN0dWFsIDMuNTgwMDAwMCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jCT0gICAgMTM2LAotCQkuZGRhMl9pbmMJPSAgIDc2MjQsCSAgICAuZGRhMl9zaXplCQk9ICAyMDAxMywKKwkJLmRkYTFfaW5jCT0gICAgMTM1LAorCQkuZGRhMl9pbmMJPSAgMjA4MDAsCSAgICAuZGRhMl9zaXplCQk9ICAyNzQ1NiwKIAkJLmRkYTNfaW5jCT0gICAgICAwLAkgICAgLmRkYTNfc2l6ZQkJPSAgICAgIDAsCiAJCS5zY19yZXNldAk9IFRWX1NDX1JFU0VUX0VWRVJZXzQsCiAJCS5wYWxfYnVyc3QJPSBmYWxzZSwKQEAgLTU0Miw3ICs1NDIsNyBAQAogCX0sCiAJewogCQkubmFtZQkJPSAiUEFMLU0iLAotCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkuY2xvY2sJCT0gMTA4MDAwLAogCQkucmVmcmVzaAk9IDI5OTcwLAogCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCiAJCS5jb21wb25lbnRfb25seSA9IDAsCkBAIC01NzAsMTEgKzU3MCwxMSBAQAogCQkudmJ1cnN0X3N0YXJ0X2Y0ID0gMTAsCQkgICAgLnZidXJzdF9lbmRfZjQJPSAyNDAsCiAKIAkJLyogZGVzaXJlZCAzLjU4MDAwMDAgYWN0dWFsIDMuNTgwMDAwMCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jCT0gICAgMTM2LAotCQkuZGRhMl9pbmMJPSAgICA3NjI0LAkgICAgLmRkYTJfc2l6ZQkJPSAgMjAwMTMsCisJCS5kZGExX2luYwk9ICAgIDEzNSwKKwkJLmRkYTJfaW5jCT0gIDE2NzA0LAkgICAgLmRkYTJfc2l6ZQkJPSAgMjc0NTYsCiAJCS5kZGEzX2luYwk9ICAgICAgMCwJICAgIC5kZGEzX3NpemUJCT0gICAgICAwLAotCQkuc2NfcmVzZXQJPSBUVl9TQ19SRVNFVF9FVkVSWV80LAotCQkucGFsX2J1cnN0ICA9IGZhbHNlLAorCQkuc2NfcmVzZXQJPSBUVl9TQ19SRVNFVF9FVkVSWV84LAorCQkucGFsX2J1cnN0ICA9IHRydWUsCiAKIAkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmcGFsX21fbGV2ZWxzX2NvbXBvc2l0ZSwKIAkJLmNvbXBvc2l0ZV9jb2xvciA9ICZwYWxfbV9jc2NfY29tcG9zaXRlLApAQCAtNTg2LDcgKzU4Niw3IEBACiAJewogCQkvKiA2MjUgTGluZXMsIDUwIEZpZWxkcywgMTUuNjI1S0h6IGxpbmUsIFN1Yi1DYXJyaWVyIDQuNDM0TUh6ICovCiAJCS5uYW1lCSAgICA9ICJQQUwtTiIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjUwMDAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTYxNSw5ICs2MTUsOSBAQAogCiAKIAkJLyogZGVzaXJlZCA0LjQzMzYxODAgYWN0dWFsIDQuNDMzNjE4MCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jICAgICAgID0gICAgMTY4LAotCQkuZGRhMl9pbmMgICAgICAgPSAgMTg1NTcsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyMDYyNSwKLQkJLmRkYTNfaW5jICAgICAgID0gICAgICAwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICAgIDAsCisJCS5kZGExX2luYyAgICAgICA9ICAgIDEzNSwKKwkJLmRkYTJfaW5jICAgICAgID0gIDIzNTc4LCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjc2NDgsCisJCS5kZGEzX2luYyAgICAgICA9ICAgIDEzNCwgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgNjI1LAogCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX0VWRVJZXzgsCiAJCS5wYWxfYnVyc3QgID0gdHJ1ZSwKIApAQCAtNjMxLDEyICs2MzEsMTIgQEAKIAl7CiAJCS8qIDYyNSBMaW5lcywgNTAgRmllbGRzLCAxNS42MjVLSHogbGluZSwgU3ViLUNhcnJpZXIgNC40MzRNSHogKi8KIAkJLm5hbWUJICAgID0gIlBBTCIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjUwMDAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKIAotCQkuaHN5bmNfZW5kCT0gNjQsCQkgICAgLmhibGFua19lbmQJCT0gMTI4LAorCQkuaHN5bmNfZW5kCT0gNjQsCQkgICAgLmhibGFua19lbmQJCT0gMTQyLAogCQkuaGJsYW5rX3N0YXJ0CT0gODQ0LAkgICAgLmh0b3RhbAkJPSA4NjMsCiAKIAkJLnByb2dyZXNzaXZlCT0gZmFsc2UsICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCkBAIC02NTksOCArNjU5LDggQEAKIAogCQkvKiBkZXNpcmVkIDQuNDMzNjE4MCBhY3R1YWwgNC40MzM2MTgwIGNsb2NrIDEwNy41MiAqLwogCQkuZGRhMV9pbmMgICAgICAgPSAgICAxNjgsCi0JCS5kZGEyX2luYyAgICAgICA9ICAxODU1NywgICAgICAgLmRkYTJfc2l6ZSAgICAgID0gIDIwNjI1LAotCQkuZGRhM19pbmMgICAgICAgPSAgICAgIDAsICAgICAgIC5kZGEzX3NpemUgICAgICA9ICAgICAgMCwKKwkJLmRkYTJfaW5jICAgICAgID0gICA0MTIyLCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjc2NDgsCisJCS5kZGEzX2luYyAgICAgICA9ICAgICA2NywgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgNjI1LAogCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX0VWRVJZXzgsCiAJCS5wYWxfYnVyc3QgID0gdHJ1ZSwKIApAQCAtNjg5LDcgKzY4OSw3IEBACiAJCS52ZXFfZW5hICAgICAgICA9IGZhbHNlLAogCiAJCS52aV9lbmRfZjEgICAgICA9IDQ0LCAgICAgICAgICAgICAgIC52aV9lbmRfZjIgICAgICAgICAgPSA0NCwKLQkJLm5icl9lbmQgICAgICAgID0gNDk2LAorCQkubmJyX2VuZCAgICAgICAgPSA0NzksCiAKIAkJLmJ1cnN0X2VuYSAgICAgID0gZmFsc2UsCiAKQEAgLTcxMyw3ICs3MTMsNyBAQAogCQkudmVxX2VuYSAgICAgICAgPSBmYWxzZSwKIAogCQkudmlfZW5kX2YxICAgICAgPSA0NCwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gNDQsCi0JCS5uYnJfZW5kICAgICAgICA9IDQ5NiwKKwkJLm5icl9lbmQgICAgICAgID0gNDc5LAogCiAJCS5idXJzdF9lbmEgICAgICA9IGZhbHNlLAogCkBAIC04NzYsNyArODc2LDcgQEAKIAkJLmNvbXBvbmVudF9vbmx5ID0gMSwKIAogCQkuaHN5bmNfZW5kICAgICAgPSA4OCwgICAgICAgICAgICAgICAuaGJsYW5rX2VuZCAgICAgICAgID0gMjM1LAotCQkuaGJsYW5rX3N0YXJ0ICAgPSAyMTU1LCAgICAgICAgICAgICAuaHRvdGFsICAgICAgICAgICAgID0gMjIwMCwKKwkJLmhibGFua19zdGFydCAgID0gMjE1NSwgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDIyMDEsCiAKIAkJLnByb2dyZXNzaXZlICAgID0gZmFsc2UsIAkgICAgLnRyaWxldmVsX3N5bmMgPSB0cnVlLAogCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kKGludGVsX291dHB1dCk7CiAKIAkvKiBFbnN1cmUgVFYgcmVmcmVzaCBpcyBjbG9zZSB0byBkZXNpcmVkIHJlZnJlc2ggKi8KLQlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpKSA8IDEpCisJaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKIAkJcmV0dXJuIE1PREVfT0s7CiAJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7CiB9CkBAIC0xMTM1LDcgKzExMzUsOCBAQAogCWlmICghdHZfbW9kZSkKIAkJcmV0dXJuOwkvKiBjYW4ndCBoYXBwZW4gKG1vZGVfcHJlcGFyZSBwcmV2ZW50cyB0aGlzKSAqLwogCi0JdHZfY3RsID0gMDsKKwl0dl9jdGwgPSBJOTE1X1JFQUQoVFZfQ1RMKTsKKwl0dl9jdGwgJj0gVFZfQ1RMX1NBVkU7CiAKIAlzd2l0Y2ggKHR2X3ByaXYtPnR5cGUpIHsKIAlkZWZhdWx0OgpAQCAtMTIxNSw3ICsxMjE2LDYgQEAKIAkvKiBkZGExIGltcGxpZXMgdmFsaWQgdmlkZW8gbGV2ZWxzICovCiAJaWYgKHR2X21vZGUtPmRkYTFfaW5jKSB7CiAJCXNjY3RsMSB8PSBUVl9TQ19EREExX0VOOwotCQlzY2N0bDEgfD0gdmlkZW9fbGV2ZWxzLT5idXJzdCA8PCBUVl9CVVJTVF9MRVZFTF9TSElGVDsKIAl9CiAKIAlpZiAodHZfbW9kZS0+ZGRhMl9pbmMpCkBAIC0xMjI1LDYgKzEyMjUsNyBAQAogCQlzY2N0bDEgfD0gVFZfU0NfRERBM19FTjsKIAogCXNjY3RsMSB8PSB0dl9tb2RlLT5zY19yZXNldDsKKwlzY2N0bDEgfD0gdmlkZW9fbGV2ZWxzLT5idXJzdCA8PCBUVl9CVVJTVF9MRVZFTF9TSElGVDsKIAlzY2N0bDEgfD0gdHZfbW9kZS0+ZGRhMV9pbmMgPDwgVFZfU0NEREExX0lOQ19TSElGVDsKIAogCXNjY3RsMiA9IHR2X21vZGUtPmRkYTJfc2l6ZSA8PCBUVl9TQ0REQTJfU0laRV9TSElGVCB8CkBAIC0xMjY2LDcgKzEyNjcsMTEgQEAKIAkJCSAgIGNvbG9yX2NvbnZlcnNpb24tPmF2KTsKIAl9CiAKLQlJOTE1X1dSSVRFKFRWX0NMUl9LTk9CUywgMHgwMDYwNjAwMCk7CisJaWYgKElTX0k5NjVHKGRldikpCisJCUk5MTVfV1JJVEUoVFZfQ0xSX0tOT0JTLCAweDAwNDA0MDAwKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoVFZfQ0xSX0tOT0JTLCAweDAwNjA2MDAwKTsKKwogCWlmICh2aWRlb19sZXZlbHMpCiAJCUk5MTVfV1JJVEUoVFZfQ0xSX0xFVkVMLAogCQkJICAgKCh2aWRlb19sZXZlbHMtPmJsYWNrIDw8IFRWX0JMQUNLX0xFVkVMX1NISUZUKSB8CkBAIC0xNDAxLDYgKzE0MDYsNyBAQAogCQl0dl9kYWMgPSBJOTE1X1JFQUQoVFZfREFDKTsKIAkJSTkxNV9XUklURShUVl9EQUMsIHNhdmVfdHZfZGFjKTsKIAkJSTkxNV9XUklURShUVl9DVEwsIHNhdmVfdHZfY3RsKTsKKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CiAJfQogCS8qCiAJICogIEEgQiBDCkBAIC0xNDUxLDcgKzE0NTcsNyBAQAogCW1vZGUgPSByZXBvcnRlZF9tb2Rlc1swXTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJm1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCi0JaWYgKGVuY29kZXItPmNydGMpIHsKKwlpZiAoZW5jb2Rlci0+Y3J0YyAmJiBlbmNvZGVyLT5jcnRjLT5lbmFibGVkKSB7CiAJCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShlbmNvZGVyLT5jcnRjLCBpbnRlbF9vdXRwdXQpOwogCX0gZWxzZSB7CiAJCWNydGMgPSBpbnRlbF9nZXRfbG9hZF9kZXRlY3RfcGlwZShpbnRlbF9vdXRwdXQsICZtb2RlLCAmZHBtc19tb2RlKTsKQEAgLTE0NjIsNiArMTQ2OCw4IEBACiAJCQl0eXBlID0gLTE7CiAJfQogCisJdHZfcHJpdi0+dHlwZSA9IHR5cGU7CisKIAlpZiAodHlwZSA8IDApCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIApAQCAtMTQ5NSw3ICsxNTAzLDggQEAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZV9wdHI7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CiAJY29uc3Qgc3RydWN0IHR2X21vZGUgKnR2X21vZGUgPSBpbnRlbF90dl9tb2RlX2ZpbmQoaW50ZWxfb3V0cHV0KTsKLQlpbnQgajsKKwlpbnQgaiwgY291bnQgPSAwOworCXU2NCB0bXA7CiAKIAlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKGlucHV0X3Jlc190YWJsZSkgLyBzaXplb2YoaW5wdXRfcmVzX3RhYmxlWzBdKTsKIAkgICAgIGorKykgewpAQCAtMTUxMCw4ICsxNTE5LDkgQEAKIAkJCQkJJiYgIXR2X21vZGUtPmNvbXBvbmVudF9vbmx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCW1vZGVfcHRyID0gZHJtX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpLAotCQkJCSAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJbW9kZV9wdHIgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOworCQlpZiAoIW1vZGVfcHRyKQorCQkJY29udGludWU7CiAJCXN0cm5jcHkobW9kZV9wdHItPm5hbWUsIGlucHV0LT5uYW1lLCBEUk1fRElTUExBWV9NT0RFX0xFTik7CiAKIAkJbW9kZV9wdHItPmhkaXNwbGF5ID0gaGFjdGl2ZV9zOwpAQCAtMTUyOCwxNSArMTUzOCwxNyBAQAogCQkJbW9kZV9wdHItPnZzeW5jX2VuZCA9IG1vZGVfcHRyLT52c3luY19zdGFydCAgKyAxOwogCQltb2RlX3B0ci0+dnRvdGFsID0gdmFjdGl2ZV9zICsgMzM7CiAKLQkJbW9kZV9wdHItPmNsb2NrID0gKGludCkgKHR2X21vZGUtPnJlZnJlc2ggKgotCQkJCQkgbW9kZV9wdHItPnZ0b3RhbCAqCi0JCQkJCSBtb2RlX3B0ci0+aHRvdGFsIC8gMTAwMCkgLyAxMDAwOworCQl0bXAgPSAodTY0KSB0dl9tb2RlLT5yZWZyZXNoICogbW9kZV9wdHItPnZ0b3RhbDsKKwkJdG1wICo9IG1vZGVfcHRyLT5odG90YWw7CisJCXRtcCA9IGRpdl91NjQodG1wLCAxMDAwMDAwKTsKKwkJbW9kZV9wdHItPmNsb2NrID0gKGludCkgdG1wOwogCiAJCW1vZGVfcHRyLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVI7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlX3B0cik7CisJCWNvdW50Kys7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggZTg1YzhmZS4uNjNhMjU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC0yOSwxMSArMjksMTEgQEAKIAogCSAgRm9yIGRvY3MgYW5kIHNwZWNzLCBzZWUgaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvaGlkcGFnZS8KIAotCSAgSWYgdW5zdXJlLCBzYXkgWQorCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIEhJRF9ERUJVRwogCWJvb2wgIkhJRCBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZWZhdWx0IHkgaWYgIUVNQkVEREVECisJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBISUQKIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb24gbGV0cyB0aGUgSElEIGxheWVyIG91dHB1dCBkaWFnbm9zdGljcyBhYm91dCBpdHMgaW50ZXJuYWwKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciB0aG9zZSB3aG8gYXJlIGVpdGhlciBkZWJ1Z2dpbmcgdGhlIEhJRCBwYXJzZXIKIAlvciBhbnkgSElEIGhhcmR3YXJlIGRldmljZS4KIAotCUlmIHVuc3VyZSwgc2F5IE4KKwlJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSElEUkFXCiAJYm9vbCAiL2Rldi9oaWRyYXcgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydCIKQEAgLTcwLDE4ICs3MCw2IEBACiBtZW51ICJTcGVjaWFsIEhJRCBkcml2ZXJzIgogCWRlcGVuZHMgb24gSElECiAKLWNvbmZpZyBISURfQ09NUEFUCi0JYm9vbCAiTG9hZCBhbGwgSElEIGRyaXZlcnMgb24gaGlkIGNvcmUgbG9hZCIKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JQ29tcGF0aWJsZSBvcHRpb24gZm9yIG9sZGVyIHVzZXJzcGFjZS4gSWYgeW91IGhhdmUgc3lzdGVtIHdpdGhvdXQgdWRldgotCXN1cHBvcnQgb2YgbW9kdWxlIGxvYWRpbmcgdGhyb3VnaCBhbGlhc2VzIGFuZCBhbHNvIG9sZAotCW1vZHVsZS1pbml0LXRvb2xzIHdoaWNoIGNhbid0IGhhbmRsZSBoaWQgYnVzLCBjaG9vc2UgWSBoZXJlLiBPdGhlcndpc2UKLQlzYXkgTi4gSWYgeW91IHNheSBOIGFuZCB5b3VyIHVzZXJzcGFjZSBpcyBvbGQgZW5vdWdoLCB0aGUgb25seQotCWZ1bmN0aW9uYWxpdHkgeW91IGxvc2UgaXMgbW9kdWxlcyBhdXRvbG9hZGluZy4KLQotCUlmIHVuc3VyZSwgc2F5IFkuCi0KIGNvbmZpZyBISURfQTRURUNICiAJdHJpc3RhdGUgIkE0IHRlY2giIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xMjgsNiArMTE2LDE0IEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIGN5cHJlc3MgbW91c2UgYW5kIGJhcmNvZGUgcmVhZGVycy4KIAorY29uZmlnIERSQUdPTlJJU0VfRkYKKwl0cmlzdGF0ZSAiRHJhZ29uUmlzZSBJbmMuIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfSElECisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwktLS1oZWxwLS0tCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgRHJhZ29uUmlzZSBJbmMuCisJZ2FtZSBjb250cm9sbGVycy4KKwogY29uZmlnIEhJRF9FWktFWQogCXRyaXN0YXRlICJFemtleSIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTEzNSw2ICsxMzEsMTMgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgRXprZXkgQlRDIDgxOTMga2V5Ym9hcmQuCiAKK2NvbmZpZyBISURfS1lFCisJdHJpc3RhdGUgIkt5ZSIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0ICFFTUJFRERFRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBLeWUvR2VuaXVzIEVyZ28gTW91c2UuCisKIGNvbmZpZyBISURfR1lSQVRJT04KIAl0cmlzdGF0ZSAiR3lyYXRpb24iIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xNDIsNiArMTQ1LDEzIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEd5cmF0aW9uIHJlbW90ZSBjb250cm9sLgogCitjb25maWcgSElEX0tFTlNJTkdUT04KKwl0cmlzdGF0ZSAiS2Vuc2luZ3RvbiIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0ICFFTUJFRERFRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBLZW5zaW5ndG9uIFNsaW1ibGFkZSBUcmFja2JhbGwuCisKIGNvbmZpZyBISURfTE9HSVRFQ0gKIAl0cmlzdGF0ZSAiTG9naXRlY2giIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IGZiZDAyMWYuLjFmN2NiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC04LDEwICs4LDYgQEAKIGhpZC0kKENPTkZJR19ISURfREVCVUcpCQkrPSBoaWQtZGVidWcubwogaGlkLSQoQ09ORklHX0hJRFJBVykJCSs9IGhpZHJhdy5vCiAKLWlmZGVmIENPTkZJR19ISURfQ09NUEFUCi1vYmotbQkJCQkrPSBoaWQtZHVtbXkubwotZW5kaWYKLQogaGlkLWxvZ2l0ZWNoLW9ianMJCTo9IGhpZC1sZy5vCiBpZmRlZiBDT05GSUdfTE9HSVRFQ0hfRkYKIAloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGdmZi5vCkBAIC0yNiw4ICsyMiwxMSBAQAogb2JqLSQoQ09ORklHX0hJRF9DSEVSUlkpCSs9IGhpZC1jaGVycnkubwogb2JqLSQoQ09ORklHX0hJRF9DSElDT05ZKQkrPSBoaWQtY2hpY29ueS5vCiBvYmotJChDT05GSUdfSElEX0NZUFJFU1MpCSs9IGhpZC1jeXByZXNzLm8KK29iai0kKENPTkZJR19EUkFHT05SSVNFX0ZGKQkrPSBoaWQtZHJmZi5vCiBvYmotJChDT05GSUdfSElEX0VaS0VZKQkJKz0gaGlkLWV6a2V5Lm8KIG9iai0kKENPTkZJR19ISURfR1lSQVRJT04pCSs9IGhpZC1neXJhdGlvbi5vCitvYmotJChDT05GSUdfSElEX0tFTlNJTkdUT04pCSs9IGhpZC1rZW5zaW5ndG9uLm8KK29iai0kKENPTkZJR19ISURfS1lFKQkJKz0gaGlkLWt5ZS5vCiBvYmotJChDT05GSUdfSElEX0xPR0lURUNIKQkrPSBoaWQtbG9naXRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubwogb2JqLSQoQ09ORklHX0hJRF9NT05URVJFWSkJKz0gaGlkLW1vbnRlcmV5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwppbmRleCBlYmNhMDBlLi40MmVhMzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYTR0ZWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0xNTgsNSArMTU4LDMgQEAKIG1vZHVsZV9pbml0KGE0X2luaXQpOwogbW9kdWxlX2V4aXQoYTRfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoYTR0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKaW5kZXggYWEyOGFlZC4uNzM1OWQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAl1OCBmbGFnczsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKIAl7IEtFWV9CQUNLU1BBQ0UsIEtFWV9ERUxFVEUgfSwKIAl7IEtFWV9FTlRFUiwJS0VZX0lOU0VSVCB9LAogCXsgS0VZX0YxLAlLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LApAQCAtNzUsNyArNzUsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gcG93ZXJib29rX2ZuX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19mbl9rZXlzW10gPSB7CiAJeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCiAJeyBLRVlfRjEsCUtFWV9CUklHSFRORVNTRE9XTiwgICAgIEFQUExFX0ZMQUdfRktFWSB9LAogCXsgS0VZX0YyLAlLRVlfQlJJR0hUTkVTU1VQLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKQEAgLTk0LDcgKzk0LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19udW1sb2NrX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19udW1sb2NrX2tleXNbXSA9IHsKIAl7IEtFWV9KLAlLRVlfS1AxIH0sCiAJeyBLRVlfSywJS0VZX0tQMiB9LAogCXsgS0VZX0wsCUtFWV9LUDMgfSwKQEAgLTExNywxNiArMTE3LDE2IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2lzb19rZXlib2FyZFtdID0gewogCXsgS0VZX0dSQVZFLAlLRVlfMTAyTkQgfSwKIAl7IEtFWV8xMDJORCwJS0VZX0dSQVZFIH0sCiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqYXBwbGVfZmluZF90cmFuc2xhdGlvbigKLQkJc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdGFibGUsIHUxNiBmcm9tKQorc3RhdGljIGNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKmFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oCisJCWNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRhYmxlLCB1MTYgZnJvbSkKIHsKLQlzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKKwljb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKIAogCS8qIExvb2sgZm9yIHRoZSB0cmFuc2xhdGlvbiAqLwogCWZvciAodHJhbnMgPSB0YWJsZTsgdHJhbnMtPmZyb207IHRyYW5zKyspCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewogCXN0cnVjdCBhcHBsZV9zYyAqYXNjID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7Ci0Jc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CisJY29uc3Qgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CiAKIAlpZiAodXNhZ2UtPmNvZGUgPT0gS0VZX0ZOKSB7CiAJCWFzYy0+Zm5fb24gPSAhIXZhbHVlOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAKIHN0YXRpYyB2b2lkIGFwcGxlX3NldHVwX2lucHV0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQogewotCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOworCWNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwogCiAJc2V0X2JpdChLRVlfTlVNTE9DSywgaW5wdXQtPmtleWJpdCk7CiAKQEAgLTM4Nyw2ICszODcsMTIgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpLAogCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CiAJCQlBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfTUlOSV9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJKSwKIAkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9JU08pLApAQCAtNDY4LDUgKzQ3NCwzIEBACiBtb2R1bGVfaW5pdChhcHBsZV9pbml0KTsKIG1vZHVsZV9leGl0KGFwcGxlX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGFwcGxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwppbmRleCAxMmM4YTliLi4yZjY3MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCkBAIC0xMDEsNSArMTAxLDMgQEAKIG1vZHVsZV9pbml0KGJlbGtpbl9pbml0KTsKIG1vZHVsZV9leGl0KGJlbGtpbl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihiZWxraW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCmluZGV4IGI4MzNiOTcuLmFiODIwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2hlcnJ5LmMKQEAgLTgzLDUgKzgzLDMgQEAKIG1vZHVsZV9pbml0KGNoX2luaXQpOwogbW9kdWxlX2V4aXQoY2hfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoY2hlcnJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtY2hpY29ueS5jCmluZGV4IGE1NGQ0MDkuLjdmOTEwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYwpAQCAtNzYsNSArNzYsMyBAQAogbW9kdWxlX2luaXQoY2hfaW5pdCk7CiBtb2R1bGVfZXhpdChjaF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGljb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGZlYWViNjEuLjU3NDZhNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTIzNiw2ICsxMjM2LDkgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSklTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfQU5TSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0pJUykgfSwKQEAgLTEyNjIsNiArMTI2NSw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgMHgwMDA2KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUFNYX0FEQVBUT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BDU19BREFQVE9SKSB9LApAQCAtMTI2OSw2ICsxMjczLDggQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBLCAweDAwMTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04sIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VSR09fNTI1VikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSB9LApAQCAtMTgxMywxNSArMTgxOSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCi0jaWZkZWYgQ09ORklHX0hJRF9DT01QQVQKLXN0YXRpYyB2b2lkIGhpZF9jb21wYXRfbG9hZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQotewotCXJlcXVlc3RfbW9kdWxlKCJoaWQtZHVtbXkiKTsKLX0KLXN0YXRpYyBERUNMQVJFX1dPUksoaGlkX2NvbXBhdF93b3JrLCBoaWRfY29tcGF0X2xvYWQpOwotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpoaWRfY29tcGF0X3dxOwotI2VuZGlmCi0KIGludCBoaWRfY2hlY2tfa2V5c19wcmVzc2VkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CkBAIC0xODUyLDE1ICsxODQ5LDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9idXM7CiAKLSNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAotCWhpZF9jb21wYXRfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaGlkX2NvbXBhdCIpOwotCWlmICghaGlkX2NvbXBhdF93cSkgewotCQloaWRyYXdfZXhpdCgpOwotCQlnb3RvIGVycjsKLQl9Ci0JcXVldWVfd29yayhoaWRfY29tcGF0X3dxLCAmaGlkX2NvbXBhdF93b3JrKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiBlcnJfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZoaWRfYnVzX3R5cGUpOwpAQCAtMTg3MCw5ICsxODU4LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGhpZF9leGl0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0hJRF9DT01QQVQKLQlkZXN0cm95X3dvcmtxdWV1ZShoaWRfY29tcGF0X3dxKTsKLSNlbmRpZgogCWhpZHJhd19leGl0KCk7CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jIGIvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYwppbmRleCA1ZDY5ZDI3Li45ZDZkM2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKQEAgLTE1NCw1ICsxNTQsMyBAQAogbW9kdWxlX2luaXQoY3BfaW5pdCk7CiBtb2R1bGVfZXhpdChjcF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjeXByZXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kcmZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjNlYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWRyZmYuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIERyYWdvblJpc2UgSW5jLiBnYW1lIGNvbnRyb2xsZXJzCisgKgorICogRnJvbSB3aGF0IEkgaGF2ZSBnYXRoZXJlZCwgdGhlc2UgZGV2aWNlcyBhcmUgbWFzcyBwcm9kdWNlZCBpbiBDaGluYSBhbmQgYXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciBzZXZlcmFsIHZlbmRvcnMuIFRoZXkgb2Z0ZW4gc2hhcmUgdGhlIHNhbWUgZGVzaWduIGFzCisgKiB0aGUgb3JpZ2luYWwgUGxheVN0YXRpb24gRHVhbFNob2NrIGNvbnRyb2xsZXIuCisgKgorICogMDA3OTowMDA2ICJEcmFnb25SaXNlIEluYy4gICBHZW5lcmljICAgVVNCICBKb3lzdGljayAgIgorICogIC0gdGVzdGVkIHdpdGggYSBUZXN1biBVU0ItNzAzIGdhbWUgY29udHJvbGxlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUmljaGFyZCBXYWxtc2xleSA8cmljaHdhbG1AZ21haWwuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKworc3RydWN0IGRyZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworfTsKKworc3RhdGljIGludCBkcmZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRyZmZfZGV2aWNlICpkcmZmID0gZGF0YTsKKwlpbnQgc3Ryb25nLCB3ZWFrOworCisJc3Ryb25nID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCXdlYWsgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOworCisJZGJnX2hpZCgiY2FsbGVkIHdpdGggMHglMDR4IDB4JTA0eCIsIHN0cm9uZywgd2Vhayk7CisKKwlpZiAoc3Ryb25nIHx8IHdlYWspIHsKKwkJc3Ryb25nID0gc3Ryb25nICogMHhmZiAvIDB4ZmZmZjsKKwkJd2VhayA9IHdlYWsgKiAweGZmIC8gMHhmZmZmOworCisJCS8qIFdoaWxlIHJldmVyc2UgZW5naW5lZXJpbmcgdGhpcyBkZXZpY2UsIEkgZm91bmQgdGhhdCB3aGVuCisJCSAgIHRoaXMgdmFsdWUgaXMgc2V0LCBpdCBjYXVzZXMgdGhlIHN0cm9uZyBydW1ibGUgdG8gZnVuY3Rpb24KKwkJICAgYXQgYSBuZWFyIG1heGltdW0gc3BlZWQsIHNvIHdlJ2xsIGJ5cGFzcyBpdC4gKi8KKwkJaWYgKHdlYWsgPT0gMHgwYSkKKwkJCXdlYWsgPSAweDBiOworCisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IHdlYWs7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gc3Ryb25nOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGRyZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmYTsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweGZlOworCX0gZWxzZSB7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmMzsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCX0KKworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7CisJZGJnX2hpZCgicnVubmluZyB3aXRoIDB4JTAyeCAweCUwMngiLCBzdHJvbmcsIHdlYWspOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZHJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgZHJmZl9kZXZpY2UgKmRyZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZmlyc3RfZW50cnkoJmhpZC0+aW5wdXRzLAorCQkJCQkJc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQorCQkJJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlpbnQgZXJyb3I7CisKKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZmlyc3RfZW50cnkocmVwb3J0X2xpc3QsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChyZXBvcnQtPmZpZWxkWzBdLT5yZXBvcnRfY291bnQgPCA3KSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHJmZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcmZmX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghZHJmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgZHJmZiwgZHJmZl9wbGF5KTsKKwlpZiAoZXJyb3IpIHsKKwkJa2ZyZWUoZHJmZik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlkcmZmLT5yZXBvcnQgPSByZXBvcnQ7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweGYzOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs1XSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNl0gPSAweDAwOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZHJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBGZWVkYmFjayBmb3IgRHJhZ29uUmlzZSBJbmMuIGdhbWUgIgorCSAgICAgICAiY29udHJvbGxlcnMgYnkgUmljaGFyZCBXYWxtc2xleSA8cmljaHdhbG1AZ21haWwuY29tPlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcl9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisKKwlkZXZfZGJnKCZoZGV2LT5kZXYsICJEcmFnb25SaXNlIEluYy4gSElEIGhhcmR3YXJlIHByb2JlLi4uIik7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlkcmZmX2luaXQoaGRldik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZHJfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EUkFHT05SSVNFLCAweDAwMDYpLCAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZHJfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBkcl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZHJhZ29ucmlzZSIsCisJLmlkX3RhYmxlID0gZHJfZGV2aWNlcywKKwkucHJvYmUgPSBkcl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZHJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRyX2luaXQpOworbW9kdWxlX2V4aXQoZHJfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZHVtbXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1kdW1teS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGNjMGY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaGlkL2hpZC1kdW1teS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhpZF9kdW1teV9pbml0KHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX0hJRF9BNFRFQ0hfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihhNHRlY2gpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9BUFBMRV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGFwcGxlKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfQkVMS0lOX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoYmVsa2luKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfQlJJR0hUX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoYnJpZ2h0KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfQ0hFUlJZX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoY2hlcnJ5KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfQ0hJQ09OWV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGNoaWNvbnkpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9DWVBSRVNTX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoY3lwcmVzcyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0RFTExfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihkZWxsKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfRVpLRVlfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihlemtleSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0dZUkFUSU9OX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoZ3lyYXRpb24pOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9MT0dJVEVDSF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGxvZ2l0ZWNoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfTUlDUk9TT0ZUX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIobWljcm9zb2Z0KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfTU9OVEVSRVlfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihtb250ZXJleSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX05UUklHX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIobnRyaWcpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9QQU5USEVSTE9SRF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHBhbnRoZXJsb3JkKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfUEVUQUxZTlhfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihwZXRhbHlueCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX1NBTVNVTkdfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihzYW1zdW5nKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfU09OWV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHNvbnkpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9TVU5QTFVTX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoc3VucGx1cyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfR1JFRU5BU0lBX0ZGX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoZ3JlZW5hc2lhKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19USFJVU1RNQVNURVJfRkZfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUih0aHJ1c3RtYXN0ZXIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1pFUk9QTFVTX0ZGX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoemVyb3BsdXMpOwotI2VuZGlmCi0KLQlyZXR1cm4gLUVJTzsKLX0KLW1vZHVsZV9pbml0KGhpZF9kdW1teV9pbml0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWV6a2V5LmMgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwppbmRleCBkZWI0MmY5Li4wYTFmZTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwpAQCAtOTEsNSArOTEsMyBAQAogbW9kdWxlX2luaXQoZXpfaW5pdCk7CiBtb2R1bGVfZXhpdChlel9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihlemtleSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZ2FmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWdhZmYuYwppbmRleCA3MTIxMWY2Li41MTBhZDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZ2FmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1nYWZmLmMKQEAgLTE4MSw1ICsxODEsMyBAQAogbW9kdWxlX2luaXQoZ2FfaW5pdCk7CiBtb2R1bGVfZXhpdChnYV9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihncmVlbmFzaWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWd5cmF0aW9uLmMgYi9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYwppbmRleCAwNGEwYWZlLi5kNDJkMjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYwpAQCAtOTQsNSArOTQsMyBAQAogbW9kdWxlX2luaXQoZ3lyYXRpb25faW5pdCk7CiBtb2R1bGVfZXhpdChneXJhdGlvbl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihneXJhdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggODg1MTE5Ny4uYmRlZGE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtNjcsNiArNjcsOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfQU5TSQkweDAyMWEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTwkweDAyMWIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0pJUwkweDAyMWMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfTUlOSV9BTlNJCTB4MDIxZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0lTTwkweDAyMWUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfTUlOSV9KSVMJMHgwMjFmCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kJMHgwMjIwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTwkweDAyMjEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTCTB4MDIyMgpAQCAtMTQ4LDYgKzE1MSw4IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRE1JCQkweDBjMGIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ETUlfRU5DCQkweDVmYWIKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0RSQUdPTlJJU0UJMHgwMDc5CisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTE8JCTB4MDRFNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAJMHgwMDIwCiAKQEAgLTI3Miw2ICsyNzcsOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1BPV0VSQ09OVFJPTAkweDIwMzAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NQUNISU5FVEVTVAkweDIwNDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04JMHgwNDdkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFCTB4MjA0MQorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gJCTB4MDQ2ZAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSCTB4YzEwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfRklSU1QgIDB4YzExMApAQCAtNDE4LDYgKzQyNiw4IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfWkVST1BMVVMJCTB4MGMxMgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfS1lFCQkweDA0NTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LWUVfRVJHT181MjVWCTB4MDA4NwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKIAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMgYi9kcml2ZXJzL2hpZC9oaWQta2Vuc2luZ3Rvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTNiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQta2Vuc2luZ3Rvbi5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgS2Vuc2lndG9uIFNsaW1ibGFkZSBUcmFja2JhbGwKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IEppcmkgS29zaW5hCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUga3NfbWFwX2tleShjKQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgKGMpKQorCitzdGF0aWMgaW50IGtzX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTVNWRU5ET1IpCisJCXJldHVybiAwOworCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweDAxOiBrc19tYXBfa2V5KEJUTl9NSURETEUpOwlicmVhazsKKwljYXNlIDB4MDI6IGtzX21hcF9rZXkoQlROX1NJREUpOwlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBrc19kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04sIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBrc19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGtzX2RyaXZlciA9IHsKKwkubmFtZSA9ICJrZW5zaW5ndG9uIiwKKwkuaWRfdGFibGUgPSBrc19kZXZpY2VzLAorCS5pbnB1dF9tYXBwaW5nID0ga3NfaW5wdXRfbWFwcGluZywKK307CisKK3N0YXRpYyBpbnQga3NfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZrc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBrc19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZrc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChrc19pbml0KTsKK21vZHVsZV9leGl0KGtzX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWt5ZS5jIGIvZHJpdmVycy9oaWQvaGlkLWt5ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWUzZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQta3llLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBLeWUvR2VuaXVzIGRldmljZXMgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoIEhJRCBzdGFuZGFyZAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgVG9tYXMgSGFuYWsKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qIHRoZSBmaXh1cHMgdGhhdCBuZWVkIHRvIGJlIGRvbmU6CisgKiAgIC0gY2hhbmdlIGxlZCB1c2FnZSBwYWdlIHRvIGJ1dHRvbiBmb3IgZXh0cmEgYnV0dG9ucworICogICAtIHJlcG9ydCBzaXplIDggY291bnQgMSBtdXN0IGJlIHNpemUgMSBjb3VudCA4IGZvciBidXR0b24gYml0ZmllbGQKKyAqICAgLSBjaGFuZ2UgdGhlIGJ1dHRvbiB1c2FnZSByYW5nZSB0byA0LTcgZm9yIHRoZSBleHRyYSBidXR0b25zCisgKi8KK3N0YXRpYyB2b2lkIGt5ZV9yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgcnNpemUpCit7CisJaWYgKHJzaXplID49IDc0ICYmCisJCXJkZXNjWzYxXSA9PSAweDA1ICYmIHJkZXNjWzYyXSA9PSAweDA4ICYmCisJCXJkZXNjWzYzXSA9PSAweDE5ICYmIHJkZXNjWzY0XSA9PSAweDA4ICYmCisJCXJkZXNjWzY1XSA9PSAweDI5ICYmIHJkZXNjWzY2XSA9PSAweDBmICYmCisJCXJkZXNjWzcxXSA9PSAweDc1ICYmIHJkZXNjWzcyXSA9PSAweDA4ICYmCisJCXJkZXNjWzczXSA9PSAweDk1ICYmIHJkZXNjWzc0XSA9PSAweDAxKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgS3llL0dlbml1cyBFcmdvIE1vdXNlIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1s2Ml0gPSAweDA5OworCQlyZGVzY1s2NF0gPSAweDA0OworCQlyZGVzY1s2Nl0gPSAweDA3OworCQlyZGVzY1s3Ml0gPSAweDAxOworCQlyZGVzY1s3NF0gPSAweDA4OworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGt5ZV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfRVJHT181MjVWKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBreWVfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBreWVfZHJpdmVyID0geworCS5uYW1lID0gImt5ZSIsCisJLmlkX3RhYmxlID0ga3llX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IGt5ZV9yZXBvcnRfZml4dXAsCit9OworCitzdGF0aWMgaW50IGt5ZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmt5ZV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBreWVfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigma3llX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGt5ZV9pbml0KTsKK21vZHVsZV9leGl0KGt5ZV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKaW5kZXggODNlMDdjOS4uN2I4MGNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKQEAgLTMyNiw1ICszMjYsMyBAQAogbW9kdWxlX2luaXQobGdfaW5pdCk7CiBtb2R1bGVfZXhpdChsZ19leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihsb2dpdGVjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKaW5kZXggMjViMTBkYy4uNWU5ZTM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYwpAQCAtMjEwLDUgKzIxMCwzIEBACiBtb2R1bGVfaW5pdChtc19pbml0KTsKIG1vZHVsZV9leGl0KG1zX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKG1pY3Jvc29mdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jCmluZGV4IGYzYTg1YTAuLjI0MGY4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jCkBAIC03OCw1ICs3OCwzIEBACiBtb2R1bGVfaW5pdChtcl9pbml0KTsKIG1vZHVsZV9leGl0KG1yX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKG1vbnRlcmV5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggZGI0NGZiZC4uYzViMjUyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKQEAgLTc4LDUgKzc4LDMgQEAKIG1vZHVsZV9pbml0KG50cmlnX2luaXQpOwogbW9kdWxlX2V4aXQobnRyaWdfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIobnRyaWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBldGFseW54LmMgYi9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYwppbmRleCAxMDk0NWZlLi4yZTgzZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYwpAQCAtMTE4LDUgKzExOCwzIEBACiBtb2R1bGVfaW5pdChwbF9pbml0KTsKIG1vZHVsZV9leGl0KHBsX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKHBldGFseW54KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1wbC5jIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKaW5kZXggNDY5NDFmOS4uNGRiOWEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXBsLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKQEAgLTksOSArOSwxMiBAQAogICogICAtIGNvbnRhaW5zIHR3byByZXBvcnRzLCBvbmUgZm9yIGVhY2ggcG9ydCAoSElEX1FVSVJLX01VTFRJX0lOUFVUKQogICoKICAqICAwZThmOjAwMDMgIkdyZWVuQXNpYSBJbmMuICAgIFVTQiBKb3lzdGljayAgICAgIgotICogICAtIHRlc3RlZCB3aXRoIEs/P25nIEdhbWluZyBnYW1lcGFkCisgKiAgIC0gdGVzdGVkIHdpdGggS/ZuaWcgR2FtaW5nIGdhbWVwYWQKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA3IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgorICogIDBlOGY6MDAwMyAiR0FTSUEgVVNCIEdhbWVwYWQiCisgKiAgIC0gYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBL9m5pZyBnYW1lcGFkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT4KICAqLwogCiAvKgpAQCAtNDYsNiArNDksOCBAQAogCiBzdHJ1Y3QgcGxmZl9kZXZpY2UgewogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJczMyICpzdHJvbmc7CisJczMyICp3ZWFrOwogfTsKIAogc3RhdGljIGludCBoaWRfcGxmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTYyLDggKzY3LDggQEAKIAlsZWZ0ID0gbGVmdCAqIDB4N2YgLyAweGZmZmY7CiAJcmlnaHQgPSByaWdodCAqIDB4N2YgLyAweGZmZmY7CiAKLQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IGxlZnQ7Ci0JcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSByaWdodDsKKwkqcGxmZi0+c3Ryb25nID0gbGVmdDsKKwkqcGxmZi0+d2VhayA9IHJpZ2h0OwogCWRlYnVnKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeCIsIGxlZnQsIHJpZ2h0KTsKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHBsZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCkBAIC04MCw2ICs4NSw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X3B0ciA9IHJlcG9ydF9saXN0OwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlpbnQgZXJyb3I7CisJczMyICpzdHJvbmc7CisJczMyICp3ZWFrOwogCiAJLyogVGhlIGRldmljZSBjb250YWlucyBvbmUgb3V0cHV0IHJlcG9ydCBwZXIgcGh5c2ljYWwgZGV2aWNlLCBhbGwKIAkgICBjb250YWluaW5nIDEgZmllbGQsIHdoaWNoIGNvbnRhaW5zIDQgZmYwMC4wMDAyIHVzYWdlcyBhbmQgNCAxNmJpdApAQCAtODcsNyArOTQsMTIgQEAKIAogCSAgIFRoZSBpbnB1dCByZXBvcnRzIGFsc28gY29udGFpbiBhIGZpZWxkIHdoaWNoIGNvbnRhaW5zCiAJICAgOCBmZjAwLjAwMDEgdXNhZ2VzIGFuZCA4IGJvb2xlYW4gdmFsdWVzLiBUaGVpciBtZWFuaW5nIGlzCi0JICAgY3VycmVudGx5IHVua25vd24uICovCisJICAgY3VycmVudGx5IHVua25vd24uCisJICAgCisJICAgQSB2ZXJzaW9uIG9mIHRoZSAwZThmOjAwMDMgZXhpc3RzIHRoYXQgaGFzIGFsbCB0aGUgdmFsdWVzIGluCisJICAgc2VwYXJhdGUgZmllbGRzIGFuZCBtaXNzZXMgdGhlIGV4dHJhIGlucHV0IGZpZWxkLCB0aHVzIHJlc2VtYmxpbmcKKwkgICBaZXJvcGx1cyAoaGlkLXpwZmYpIGRldmljZXMuCisJKi8KIAogCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewogCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKQEAgLTExMCw4ICsxMjIsMjEgQEAKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKLQkJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDQpIHsKLQkJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKKwkJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA+PSA0KSB7CisJCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7CisJCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJCQlzdHJvbmcgPSAmcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl07CisJCQl3ZWFrID0gJnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdOworCQkJZGVidWcoImRldGVjdGVkIHNpbmdsZS1maWVsZCBkZXZpY2UiKTsKKwkJfSBlbHNlIGlmIChyZXBvcnQtPm1heGZpZWxkID49IDQgJiYgcmVwb3J0LT5maWVsZFswXS0+bWF4dXNhZ2UgPT0gMSAmJgorCQkJCXJlcG9ydC0+ZmllbGRbMF0tPnVzYWdlWzBdLmhpZCA9PSAoSElEX1VQX0xFRCB8IDB4NDMpKSB7CisJCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7CisJCQlyZXBvcnQtPmZpZWxkWzFdLT52YWx1ZVswXSA9IDB4MDA7CisJCQlzdHJvbmcgPSAmcmVwb3J0LT5maWVsZFsyXS0+dmFsdWVbMF07CisJCQl3ZWFrID0gJnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdOworCQkJZGVidWcoImRldGVjdGVkIDQtZmllbGQgZGV2aWNlIik7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vdCBlbm91Z2ggZmllbGRzIG9yIHZhbHVlc1xuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCkBAIC0xMzAsMTAgKzE1NSwxMSBAQAogCQl9CiAKIAkJcGxmZi0+cmVwb3J0ID0gcmVwb3J0OwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKLQkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7CisJCXBsZmYtPnN0cm9uZyA9IHN0cm9uZzsKKwkJcGxmZi0+d2VhayA9IHdlYWs7CisKKwkJKnN0cm9uZyA9IDB4MDA7CisJCSp3ZWFrID0gMHgwMDsKIAkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBwbGZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKIAl9CiAKQEAgLTE4MCw3ICsyMDYsNyBAQAogCQkuZHJpdmVyX2RhdGEgPSAxIH0sIC8qIFR3aW4gVVNCIEpveXN0aWNrICovCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BDU19BREFQVE9SKSwKIAkJLmRyaXZlcl9kYXRhID0gMSB9LCAvKiBUd2luIFVTQiBKb3lzdGljayAqLwotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HUkVFTkFTSUEsIDB4MDAwMyksIH0sIC8qIEdyZWVuQXNpYSBJbmMuIFVTQiBKb3lzdGljayAqLworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HUkVFTkFTSUEsIDB4MDAwMyksIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHBsX2RldmljZXMpOwpAQCAtMjA0LDUgKzIzMCwzIEBACiBtb2R1bGVfaW5pdChwbF9pbml0KTsKIG1vZHVsZV9leGl0KHBsX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKHBhbnRoZXJsb3JkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMgYi9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jCmluZGV4IDE1ZjNjMDQuLjA3MDgzYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwpAQCAtOTYsNSArOTYsMyBAQAogbW9kdWxlX2luaXQoc2Ftc3VuZ19pbml0KTsKIG1vZHVsZV9leGl0KHNhbXN1bmdfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoc2Ftc3VuZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwppbmRleCBkZDVhMzk3Li5jMjU5OTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKQEAgLTE0OCw1ICsxNDgsMyBAQAogbW9kdWxlX2luaXQoc29ueV9pbml0KTsKIG1vZHVsZV9leGl0KHNvbnlfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoc29ueSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwppbmRleCA1YmE2OGY3Li5lMGE4ZmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMKQEAgLTc4LDUgKzc4LDMgQEAKIG1vZHVsZV9pbml0KHNwX2luaXQpOwogbW9kdWxlX2V4aXQoc3BfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoc3VucGx1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwppbmRleCAxYjdjYmEwLi43YzFmN2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMKQEAgLTI2NSw1ICsyNjUsMyBAQAogbW9kdWxlX2luaXQodG1faW5pdCk7CiBtb2R1bGVfZXhpdCh0bV9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUih0aHJ1c3RtYXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKaW5kZXggY2NhNjRhMC4uMTUyY2NmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCkBAIC03Myw1ICs3MywzIEBACiBtb2R1bGVfaW5pdCh0c19pbml0KTsKIG1vZHVsZV9leGl0KHRzX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKHRvcHNlZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXpwZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMKaW5kZXggZWE4MmYzNy4uODVhMTk4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXpwZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCkBAIC0xNTgsNSArMTU4LDMgQEAKIG1vZHVsZV9pbml0KHpwX2luaXQpOwogbW9kdWxlX2V4aXQoenBfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoemVyb3BsdXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCBhMWVmNDFmLi40MzA2Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtODQxLDYgKzg0MSw5IEBACiAJcXVpcmtzID0gdXNiaGlkX2xvb2t1cF9xdWlyayhsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCisJaWYgKHF1aXJrcyAmIEhJRF9RVUlSS19JR05PUkUpCisJCXJldHVybiAtRU5PREVWOworCiAJLyogTWFueSBrZXlib2FyZHMgYW5kIG1pY2UgZG9uJ3QgbGlrZSB0byBiZSBwb2xsZWQgZm9yIHJlcG9ydHMsCiAJICogc28gd2Ugd2lsbCBhbHdheXMgc2V0IHRoZSBISURfUVVJUktfTk9HRVQgZmxhZyBmb3IgdGhlbS4gKi8KIAlpZiAoaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVU0JfSU5URVJGQUNFX1NVQkNMQVNTX0JPT1QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwppbmRleCBmZDczNzU2Li5lOWI0MzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCkBAIC0yMjcsMTIgKzIyNyw5IEBACiAgKi8KIHN0YXRpYyBpbnQgaGlkZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogCkBAIC04OTEsMTYgKzg4OCwyMSBAQAogCWhpZGRldi0+aGlkID0gaGlkOwogCWhpZGRldi0+ZXhpc3QgPSAxOwogCisJLyogd2hlbiBsb2NrX2tlcm5lbCgpIHVzYWdlIGlzIGZpeGVkIGluIHVzYl9vcGVuKCksCisJICogd2UgY291bGQgYWxzbyBmaXggaXQgaGVyZSAqLworCWxvY2tfa2VybmVsKCk7CiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2Rldih1c2JoaWQtPmludGYsICZoaWRkZXZfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKIAkJZXJyX2hpZCgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOwogCQloaWQtPmhpZGRldiA9IE5VTEw7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJa2ZyZWUoaGlkZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CiAJCWhpZC0+bWlub3IgPSB1c2JoaWQtPmludGYtPm1pbm9yOwogCQloaWRkZXZfdGFibGVbdXNiaGlkLT5pbnRmLT5taW5vciAtIEhJRERFVl9NSU5PUl9CQVNFXSA9IGhpZGRldjsKIAl9CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCmluZGV4IGViOGY3MmMuLmQ0MjBjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCkBAIC02MDQsOSArNjA0LDcgQEAKIAogCS8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUuLi4gKi8KIAlhZGFwLT5hbGdvID0gJmkyY19iaXRfYWxnbzsKLQotCWFkYXAtPnRpbWVvdXQgPSAxMDA7CS8qIGRlZmF1bHQgdmFsdWVzLCBzaG91bGQJKi8KLQlhZGFwLT5yZXRyaWVzID0gMzsJLyogYmUgcmVwbGFjZWQgYnkgZGVmaW5lcwkqLworCWFkYXAtPnJldHJpZXMgPSAzOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCmluZGV4IGQ1MGIzMjkuLmY2OGU1ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCkBAIC0yMiwxNCArMjIsMTggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXBjYS5oPgogCi0jZGVmaW5lIERFQjEoZm10LCBhcmdzLi4uKSBkbyB7IGlmIChpMmNfZGVidWc+PTEpIHByaW50ayhmbXQsICMjIGFyZ3MpOyB9IHdoaWxlKDApCi0jZGVmaW5lIERFQjIoZm10LCBhcmdzLi4uKSBkbyB7IGlmIChpMmNfZGVidWc+PTIpIHByaW50ayhmbXQsICMjIGFyZ3MpOyB9IHdoaWxlKDApCi0jZGVmaW5lIERFQjMoZm10LCBhcmdzLi4uKSBkbyB7IGlmIChpMmNfZGVidWc+PTMpIHByaW50ayhmbXQsICMjIGFyZ3MpOyB9IHdoaWxlKDApCisjZGVmaW5lIERFQjEoZm10LCBhcmdzLi4uKSBkbyB7IGlmIChpMmNfZGVidWcgPj0gMSkJCQlcCisJCQkJIHByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIERFQjIoZm10LCBhcmdzLi4uKSBkbyB7IGlmIChpMmNfZGVidWcgPj0gMikJCQlcCisJCQkJIHByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIERFQjMoZm10LCBhcmdzLi4uKSBkbyB7IGlmIChpMmNfZGVidWcgPj0gMykJCQlcCisJCQkJIHByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyBpbnQgaTJjX2RlYnVnOwogCkBAIC00MywxOSArNDcsMjcgQEAKICNkZWZpbmUgcGNhX3dhaXQoYWRhcCkgYWRhcC0+d2FpdF9mb3JfY29tcGxldGlvbihhZGFwLT5kYXRhKQogI2RlZmluZSBwY2FfcmVzZXQoYWRhcCkgYWRhcC0+cmVzZXRfY2hpcChhZGFwLT5kYXRhKQogCitzdGF0aWMgdm9pZCBwY2E5NjY1X3Jlc2V0KHZvaWQgKnBkKQoreworCXN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCA9IHBkOworCXBjYV9vdXR3KGFkYXAsIEkyQ19QQ0FfSU5EUFRSLCBJMkNfUENBX0lQUkVTRVQpOworCXBjYV9vdXR3KGFkYXAsIEkyQ19QQ0FfSU5ELCAweEE1KTsKKwlwY2Ffb3V0dyhhZGFwLCBJMkNfUENBX0lORCwgMHg1QSk7Cit9CisKIC8qCiAgKiBHZW5lcmF0ZSBhIHN0YXJ0IGNvbmRpdGlvbiBvbiB0aGUgaTJjIGJ1cy4KICAqCiAgKiByZXR1cm5zIGFmdGVyIHRoZSBzdGFydCBjb25kaXRpb24gaGFzIG9jY3VycmVkCiAgKi8KLXN0YXRpYyB2b2lkIHBjYV9zdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXApCitzdGF0aWMgaW50IHBjYV9zdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXApCiB7CiAJaW50IHN0YSA9IHBjYV9nZXRfY29uKGFkYXApOwogCURFQjIoIj09PSBTVEFSVFxuIik7CiAJc3RhIHw9IEkyQ19QQ0FfQ09OX1NUQTsKIAlzdGEgJj0gfihJMkNfUENBX0NPTl9TVE98STJDX1BDQV9DT05fU0kpOwogCXBjYV9zZXRfY29uKGFkYXAsIHN0YSk7Ci0JcGNhX3dhaXQoYWRhcCk7CisJcmV0dXJuIHBjYV93YWl0KGFkYXApOwogfQogCiAvKgpAQCAtNjMsMTQgKzc1LDE0IEBACiAgKgogICogcmV0dXJuIGFmdGVyIHRoZSByZXBlYXRlZCBzdGFydCBjb25kaXRpb24gaGFzIG9jY3VycmVkCiAgKi8KLXN0YXRpYyB2b2lkIHBjYV9yZXBlYXRlZF9zdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXApCitzdGF0aWMgaW50IHBjYV9yZXBlYXRlZF9zdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXApCiB7CiAJaW50IHN0YSA9IHBjYV9nZXRfY29uKGFkYXApOwogCURFQjIoIj09PSBSRVBFQVRFRCBTVEFSVFxuIik7CiAJc3RhIHw9IEkyQ19QQ0FfQ09OX1NUQTsKIAlzdGEgJj0gfihJMkNfUENBX0NPTl9TVE98STJDX1BDQV9DT05fU0kpOwogCXBjYV9zZXRfY29uKGFkYXAsIHN0YSk7Ci0JcGNhX3dhaXQoYWRhcCk7CisJcmV0dXJuIHBjYV93YWl0KGFkYXApOwogfQogCiAvKgpAQCAtOTYsNyArMTA4LDcgQEAKICAqCiAgKiByZXR1cm5zIGFmdGVyIHRoZSBhZGRyZXNzIGhhcyBiZWVuIHNlbnQKICAqLwotc3RhdGljIHZvaWQgcGNhX2FkZHJlc3Moc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwLAorc3RhdGljIGludCBwY2FfYWRkcmVzcyhzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXAsCiAJCQlzdHJ1Y3QgaTJjX21zZyAqbXNnKQogewogCWludCBzdGEgPSBwY2FfZ2V0X2NvbihhZGFwKTsKQEAgLTExMyw3ICsxMjUsNyBAQAogCXN0YSAmPSB+KEkyQ19QQ0FfQ09OX1NUT3xJMkNfUENBX0NPTl9TVEF8STJDX1BDQV9DT05fU0kpOwogCXBjYV9zZXRfY29uKGFkYXAsIHN0YSk7CiAKLQlwY2Ffd2FpdChhZGFwKTsKKwlyZXR1cm4gcGNhX3dhaXQoYWRhcCk7CiB9CiAKIC8qCkBAIC0xMjEsNyArMTMzLDcgQEAKICAqCiAgKiBSZXR1cm5zIGFmdGVyIHRoZSBieXRlIGhhcyBiZWVuIHRyYW5zbWl0dGVkCiAgKi8KLXN0YXRpYyB2b2lkIHBjYV90eF9ieXRlKHN0cnVjdCBpMmNfYWxnb19wY2FfZGF0YSAqYWRhcCwKK3N0YXRpYyBpbnQgcGNhX3R4X2J5dGUoc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwLAogCQkJX191OCBiKQogewogCWludCBzdGEgPSBwY2FfZ2V0X2NvbihhZGFwKTsKQEAgLTEzMSw3ICsxNDMsNyBAQAogCXN0YSAmPSB+KEkyQ19QQ0FfQ09OX1NUT3xJMkNfUENBX0NPTl9TVEF8STJDX1BDQV9DT05fU0kpOwogCXBjYV9zZXRfY29uKGFkYXAsIHN0YSk7CiAKLQlwY2Ffd2FpdChhZGFwKTsKKwlyZXR1cm4gcGNhX3dhaXQoYWRhcCk7CiB9CiAKIC8qCkBAIC0xNTEsNyArMTYzLDcgQEAKICAqCiAgKiBSZXR1cm5zIGFmdGVyIG5leHQgYnl0ZSBoYXMgYXJyaXZlZC4KICAqLwotc3RhdGljIHZvaWQgcGNhX3J4X2FjayhzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKmFkYXAsCitzdGF0aWMgaW50IHBjYV9yeF9hY2soc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICphZGFwLAogCQkgICAgICAgaW50IGFjaykKIHsKIAlpbnQgc3RhID0gcGNhX2dldF9jb24oYWRhcCk7CkBAIC0xNjIsNyArMTc0LDcgQEAKIAkJc3RhIHw9IEkyQ19QQ0FfQ09OX0FBOwogCiAJcGNhX3NldF9jb24oYWRhcCwgc3RhKTsKLQlwY2Ffd2FpdChhZGFwKTsKKwlyZXR1cm4gcGNhX3dhaXQoYWRhcCk7CiB9CiAKIHN0YXRpYyBpbnQgcGNhX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKQEAgLTE3NSwxNCArMTg3LDE3IEBACiAJaW50IG51bWJ5dGVzID0gMDsKIAlpbnQgc3RhdGU7CiAJaW50IHJldDsKLQlpbnQgdGltZW91dCA9IGkyY19hZGFwLT50aW1lb3V0OworCWludCBjb21wbGV0ZWQgPSAxOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBpMmNfYWRhcC0+dGltZW91dDsKIAotCXdoaWxlICgoc3RhdGUgPSBwY2Ffc3RhdHVzKGFkYXApKSAhPSAweGY4ICYmIHRpbWVvdXQtLSkgewotCQltc2xlZXAoMTApOwotCX0KLQlpZiAoc3RhdGUgIT0gMHhmOCkgewotCQlkZXZfZGJnKCZpMmNfYWRhcC0+ZGV2LCAiYnVzIGlzIG5vdCBpZGxlLiBzdGF0dXMgaXMgJSMwNHhcbiIsIHN0YXRlKTsKLQkJcmV0dXJuIC1FQUdBSU47CisJd2hpbGUgKHBjYV9zdGF0dXMoYWRhcCkgIT0gMHhmOCkgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJCW1zbGVlcCgxMCk7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZpMmNfYWRhcC0+ZGV2LCAiYnVzIGlzIG5vdCBpZGxlLiBzdGF0dXMgaXMgIgorCQkJCSIlIzA0eFxuIiwgc3RhdGUpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KIAl9CiAKIAlERUIxKCJ7e3sgWEZFUiAlZCBtZXNzYWdlc1xuIiwgbnVtKTsKQEAgLTIxOCwxOCArMjMzLDE5IEBACiAKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIDB4Zjg6IC8qIE9uIHJlc2V0IG9yIHN0b3AgdGhlIGJ1cyBpcyBpZGxlICovCi0JCQlwY2Ffc3RhcnQoYWRhcCk7CisJCQljb21wbGV0ZWQgPSBwY2Ffc3RhcnQoYWRhcCk7CiAJCQlicmVhazsKIAogCQljYXNlIDB4MDg6IC8qIEEgU1RBUlQgY29uZGl0aW9uIGhhcyBiZWVuIHRyYW5zbWl0dGVkICovCiAJCWNhc2UgMHgxMDogLyogQSByZXBlYXRlZCBzdGFydCBjb25kaXRpb24gaGFzIGJlZW4gdHJhbnNtaXR0ZWQgKi8KLQkJCXBjYV9hZGRyZXNzKGFkYXAsIG1zZyk7CisJCQljb21wbGV0ZWQgPSBwY2FfYWRkcmVzcyhhZGFwLCBtc2cpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDE4OiAvKiBTTEErVyBoYXMgYmVlbiB0cmFuc21pdHRlZDsgQUNLIGhhcyBiZWVuIHJlY2VpdmVkICovCiAJCWNhc2UgMHgyODogLyogRGF0YSBieXRlIGluIEkyQ0RBVCBoYXMgYmVlbiB0cmFuc21pdHRlZDsgQUNLIGhhcyBiZWVuIHJlY2VpdmVkICovCiAJCQlpZiAobnVtYnl0ZXMgPCBtc2ctPmxlbikgewotCQkJCXBjYV90eF9ieXRlKGFkYXAsIG1zZy0+YnVmW251bWJ5dGVzXSk7CisJCQkJY29tcGxldGVkID0gcGNhX3R4X2J5dGUoYWRhcCwKKwkJCQkJCQltc2ctPmJ1ZltudW1ieXRlc10pOwogCQkJCW51bWJ5dGVzKys7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0yMzcsNyArMjUzLDcgQEAKIAkJCWlmIChjdXJtc2cgPT0gbnVtKQogCQkJCXBjYV9zdG9wKGFkYXApOwogCQkJZWxzZQotCQkJCXBjYV9yZXBlYXRlZF9zdGFydChhZGFwKTsKKwkJCQljb21wbGV0ZWQgPSBwY2FfcmVwZWF0ZWRfc3RhcnQoYWRhcCk7CiAJCQlicmVhazsKIAogCQljYXNlIDB4MjA6IC8qIFNMQStXIGhhcyBiZWVuIHRyYW5zbWl0dGVkOyBOT1QgQUNLIGhhcyBiZWVuIHJlY2VpdmVkICovCkBAIC0yNDYsMjEgKzI2MiwyMiBAQAogCQkJZ290byBvdXQ7CiAKIAkJY2FzZSAweDQwOiAvKiBTTEErUiBoYXMgYmVlbiB0cmFuc21pdHRlZDsgQUNLIGhhcyBiZWVuIHJlY2VpdmVkICovCi0JCQlwY2FfcnhfYWNrKGFkYXAsIG1zZy0+bGVuID4gMSk7CisJCQljb21wbGV0ZWQgPSBwY2FfcnhfYWNrKGFkYXAsIG1zZy0+bGVuID4gMSk7CiAJCQlicmVhazsKIAogCQljYXNlIDB4NTA6IC8qIERhdGEgYnl0ZXMgaGFzIGJlZW4gcmVjZWl2ZWQ7IEFDSyBoYXMgYmVlbiByZXR1cm5lZCAqLwogCQkJaWYgKG51bWJ5dGVzIDwgbXNnLT5sZW4pIHsKIAkJCQlwY2FfcnhfYnl0ZShhZGFwLCAmbXNnLT5idWZbbnVtYnl0ZXNdLCAxKTsKIAkJCQludW1ieXRlcysrOwotCQkJCXBjYV9yeF9hY2soYWRhcCwgbnVtYnl0ZXMgPCBtc2ctPmxlbiAtIDEpOworCQkJCWNvbXBsZXRlZCA9IHBjYV9yeF9hY2soYWRhcCwKKwkJCQkJCSAgICAgICBudW1ieXRlcyA8IG1zZy0+bGVuIC0gMSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljdXJtc2crKzsgbnVtYnl0ZXMgPSAwOwogCQkJaWYgKGN1cm1zZyA9PSBudW0pCiAJCQkJcGNhX3N0b3AoYWRhcCk7CiAJCQllbHNlCi0JCQkJcGNhX3JlcGVhdGVkX3N0YXJ0KGFkYXApOworCQkJCWNvbXBsZXRlZCA9IHBjYV9yZXBlYXRlZF9zdGFydChhZGFwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHg0ODogLyogU0xBK1IgaGFzIGJlZW4gdHJhbnNtaXR0ZWQ7IE5PVCBBQ0sgaGFzIGJlZW4gcmVjZWl2ZWQgKi8KQEAgLTI4Myw3ICszMDAsNyBAQAogCQkJCWlmIChjdXJtc2cgPT0gbnVtKQogCQkJCQlwY2Ffc3RvcChhZGFwKTsKIAkJCQllbHNlCi0JCQkJCXBjYV9yZXBlYXRlZF9zdGFydChhZGFwKTsKKwkJCQkJY29tcGxldGVkID0gcGNhX3JlcGVhdGVkX3N0YXJ0KGFkYXApOwogCQkJfSBlbHNlIHsKIAkJCQlERUIyKCJOT1QgQUNLIHNlbnQgYWZ0ZXIgZGF0YSBieXRlIHJlY2VpdmVkLiAiCiAJCQkJICAgICAiTm90IGZpbmFsIGJ5dGUuIG51bWJ5dGVzICVkLiBsZW4gJWRcbiIsCkBAIC0zMDksMTEgKzMyNiwxMyBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQlpZiAoIWNvbXBsZXRlZCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCXJldCA9IGN1cm1zZzsKICBvdXQ6Ci0JREVCMShLRVJOX0NSSVQgIn19fSB0cmFuc2ZlcmVkICVkLyVkIG1lc3NhZ2VzLiAiCisJREVCMSgifX19IHRyYW5zZmVyZWQgJWQvJWQgbWVzc2FnZXMuICIKIAkgICAgICJzdGF0dXMgaXMgJSMwNHguIGNvbnRyb2wgaXMgJSMwNHhcbiIsCiAJICAgICBjdXJtc2csIG51bSwgcGNhX3N0YXR1cyhhZGFwKSwKIAkgICAgIHBjYV9nZXRfY29uKGFkYXApKTsKQEAgLTMzMCwyNiArMzQ5LDE3MSBAQAogCS5mdW5jdGlvbmFsaXR5CT0gcGNhX2Z1bmMsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IHBjYV9wcm9iZV9jaGlwKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKnBjYV9kYXRhID0gYWRhcC0+YWxnb19kYXRhOworCS8qIFRoZSB0cmljayBoZXJlIGlzIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluZGlyZWN0IHJlZ2lzdGVyCisJICogYXZhaWxhYmxlLiBJZiB0aGVyZSBpcyBvbmUsIHdlIHdpbGwgcmVhZCB0aGUgdmFsdWUgd2UgZmlyc3QKKwkgKiB3cm90ZSBvbiBJMkNfUENBX0lBRFIuIE90aGVyd2lzZSwgd2Ugd2lsbCByZWFkIHRoZSBsYXN0IHZhbHVlCisJICogd2Ugd3JvdGUgb24gSTJDX1BDQV9BRFIKKwkgKi8KKwlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkRQVFIsIEkyQ19QQ0FfSUFEUik7CisJcGNhX291dHcocGNhX2RhdGEsIEkyQ19QQ0FfSU5ELCAweEFBKTsKKwlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkRQVFIsIEkyQ19QQ0FfSVRPKTsKKwlwY2Ffb3V0dyhwY2FfZGF0YSwgSTJDX1BDQV9JTkQsIDB4MDApOworCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORFBUUiwgSTJDX1BDQV9JQURSKTsKKwlpZiAocGNhX2ludyhwY2FfZGF0YSwgSTJDX1BDQV9JTkQpID09IDB4QUEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBDQTk2NjUgZGV0ZWN0ZWQuXG4iLCBhZGFwLT5uYW1lKTsKKwkJcmV0dXJuIEkyQ19QQ0FfQ0hJUF85NjY1OworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ0E5NTY0IGRldGVjdGVkLlxuIiwgYWRhcC0+bmFtZSk7CisJCXJldHVybiBJMkNfUENBX0NISVBfOTU2NDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgcGNhX2luaXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewotCXN0YXRpYyBpbnQgZnJlcXNbXSA9IHszMzAsMjg4LDIxNywxNDYsODgsNTksNDQsMzZ9OwotCWludCBjbG9jazsKIAlzdHJ1Y3QgaTJjX2FsZ29fcGNhX2RhdGEgKnBjYV9kYXRhID0gYWRhcC0+YWxnb19kYXRhOwogCi0JaWYgKHBjYV9kYXRhLT5pMmNfY2xvY2sgPiA3KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIEkyQyBjbG9jayBzcGVlZCBzZWxlY3RlZC4gVHJ5aW5nIGRlZmF1bHQuXG4iLAotCQkJYWRhcC0+bmFtZSk7Ci0JCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSBJMkNfUENBX0NPTl81OWtIejsKLQl9Ci0KIAlhZGFwLT5hbGdvID0gJnBjYV9hbGdvOwogCi0JcGNhX3Jlc2V0KHBjYV9kYXRhKTsKKwlpZiAocGNhX3Byb2JlX2NoaXAoYWRhcCkgPT0gSTJDX1BDQV9DSElQXzk1NjQpIHsKKwkJc3RhdGljIGludCBmcmVxc1tdID0gezMzMCwgMjg4LCAyMTcsIDE0NiwgODgsIDU5LCA0NCwgMzZ9OworCQlpbnQgY2xvY2s7CiAKLQljbG9jayA9IHBjYV9jbG9jayhwY2FfZGF0YSk7Ci0JREVCMShLRVJOX0lORk8gIiVzOiBDbG9jayBmcmVxdWVuY3kgaXMgJWRrSHpcbiIsIGFkYXAtPm5hbWUsIGZyZXFzW2Nsb2NrXSk7CisJCWlmIChwY2FfZGF0YS0+aTJjX2Nsb2NrID4gNykgeworCQkJc3dpdGNoIChwY2FfZGF0YS0+aTJjX2Nsb2NrKSB7CisJCQljYXNlIDMzMDAwMDoKKwkJCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fMzMwa0h6OworCQkJCWJyZWFrOworCQkJY2FzZSAyODgwMDA6CisJCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzI4OGtIejsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjE3MDAwOgorCQkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSBJMkNfUENBX0NPTl8yMTdrSHo7CisJCQkJYnJlYWs7CisJCQljYXNlIDE0NjAwMDoKKwkJCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fMTQ2a0h6OworCQkJCWJyZWFrOworCQkJY2FzZSA4ODAwMDoKKwkJCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fODhrSHo7CisJCQkJYnJlYWs7CisJCQljYXNlIDU5MDAwOgorCQkJCXBjYV9kYXRhLT5pMmNfY2xvY2sgPSBJMkNfUENBX0NPTl81OWtIejsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDQwMDA6CisJCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzQ0a0h6OworCQkJCWJyZWFrOworCQkJY2FzZSAzNjAwMDoKKwkJCQlwY2FfZGF0YS0+aTJjX2Nsb2NrID0gSTJDX1BDQV9DT05fMzZrSHo7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJIiVzOiBJbnZhbGlkIEkyQyBjbG9jayBzcGVlZCBzZWxlY3RlZC4iCisJCQkJCSIgVXNpbmcgZGVmYXVsdCA1OWtIei5cbiIsIGFkYXAtPm5hbWUpOworCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IEkyQ19QQ0FfQ09OXzU5a0h6OworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKKwkJCQkiQ2hvb3NpbmcgdGhlIGNsb2NrIGZyZXF1ZW5jeSBiYXNlZCBvbiAiCisJCQkJImluZGV4IGlzIGRlcHJlY2F0ZWQuIgorCQkJCSIgVXNlIHRoZSBub21pbmFsIGZyZXF1ZW5jeS5cbiIsIGFkYXAtPm5hbWUpOworCQl9CiAKLQlwY2Ffc2V0X2NvbihwY2FfZGF0YSwgSTJDX1BDQV9DT05fRU5TSU8gfCBjbG9jayk7CisJCXBjYV9yZXNldChwY2FfZGF0YSk7CisKKwkJY2xvY2sgPSBwY2FfY2xvY2socGNhX2RhdGEpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2xvY2sgZnJlcXVlbmN5IGlzICVka0h6XG4iLAorCQkgICAgIGFkYXAtPm5hbWUsIGZyZXFzW2Nsb2NrXSk7CisKKwkJcGNhX3NldF9jb24ocGNhX2RhdGEsIEkyQ19QQ0FfQ09OX0VOU0lPIHwgY2xvY2spOworCX0gZWxzZSB7CisJCWludCBjbG9jazsKKwkJaW50IG1vZGU7CisJCWludCB0bG93LCB0aGk7CisJCS8qIFZhbHVlcyBjYW4gYmUgZm91bmQgb24gUENBOTY2NSBkYXRhc2hlZXQgc2VjdGlvbiA3LjMuMi42ICovCisJCWludCBtaW5fdGxvdywgbWluX3RoaTsKKwkJLyogVGhlc2UgdmFsdWVzIGFyZSB0aGUgbWF4aW11bSByYWlzZSBhbmQgZmFsbCB2YWx1ZXMgYWxsb3dlZAorCQkgKiBieSB0aGUgSTJDIG9wZXJhdGlvbiBtb2RlIChTdGFuZGFyZCwgRmFzdCBvciBGYXN0KykKKwkJICogVGhleSBhcmUgdXNlZCAoYWRkZWQpIGJlbG93IHRvIGNhbGN1bGF0ZSB0aGUgY2xvY2sgZGl2aWRlcnMKKwkJICogb2YgUENBOTY2NS4gTm90ZSB0aGF0IHRoZXkgYXJlIHNsaWdodGx5IGRpZmZlcmVudCBvZiB0aGUKKwkJICogcmVhbCBtYXhpbXVtLCB0byBhbGxvdyB0aGUgY2hhbmdlIG9uIG1vZGUgZXhhY3RseSBvbiB0aGUKKwkJICogbWF4aW11bSBjbG9jayByYXRlIGZvciBlYWNoIG1vZGUKKwkJICovCisJCWludCByYWlzZV9mYWxsX3RpbWU7CisKKwkJc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICpwY2FfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKworCQkvKiBJZ25vcmUgdGhlIHJlc2V0IGZ1bmN0aW9uIGZyb20gdGhlIG1vZHVsZSwKKwkJICogd2UgY2FuIHVzZSB0aGUgcGFyYWxsZWwgYnVzIHJlc2V0CisJCSAqLworCQlwY2FfZGF0YS0+cmVzZXRfY2hpcCA9IHBjYTk2NjVfcmVzZXQ7CisKKwkJaWYgKHBjYV9kYXRhLT5pMmNfY2xvY2sgPiAxMjY1ODAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSTJDIGNsb2NrIHNwZWVkIHRvbyBoaWdoLiIKKwkJCQkiIFVzaW5nIDEyNjUuOGtIei5cbiIsIGFkYXAtPm5hbWUpOworCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IDEyNjU4MDA7CisJCX0KKworCQlpZiAocGNhX2RhdGEtPmkyY19jbG9jayA8IDYwMzAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSTJDIGNsb2NrIHNwZWVkIHRvbyBsb3cuIgorCQkJCSIgVXNpbmcgNjAuM2tIei5cbiIsIGFkYXAtPm5hbWUpOworCQkJcGNhX2RhdGEtPmkyY19jbG9jayA9IDYwMzAwOworCQl9CisKKwkJLyogVG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdywgdXNlIGNsb2NrLzEwMCBmb3IgY2FsY3VsYXRpb25zICovCisJCWNsb2NrID0gcGNhX2Nsb2NrKHBjYV9kYXRhKSAvIDEwMDsKKworCQlpZiAocGNhX2RhdGEtPmkyY19jbG9jayA+IDEwMDAwKSB7CisJCQltb2RlID0gSTJDX1BDQV9NT0RFX1RVUkJPOworCQkJbWluX3Rsb3cgPSAxNDsKKwkJCW1pbl90aGkgID0gNTsKKwkJCXJhaXNlX2ZhbGxfdGltZSA9IDIyOyAvKiBSYWlzZSAxMWUtOHMsIEZhbGwgMTFlLThzICovCisJCX0gZWxzZSBpZiAocGNhX2RhdGEtPmkyY19jbG9jayA+IDQwMDApIHsKKwkJCW1vZGUgPSBJMkNfUENBX01PREVfRkFTVFA7CisJCQltaW5fdGxvdyA9IDE3OworCQkJbWluX3RoaSAgPSA5OworCQkJcmFpc2VfZmFsbF90aW1lID0gMjI7IC8qIFJhaXNlIDExZS04cywgRmFsbCAxMWUtOHMgKi8KKwkJfSBlbHNlIGlmIChwY2FfZGF0YS0+aTJjX2Nsb2NrID4gMTAwMCkgeworCQkJbW9kZSA9IEkyQ19QQ0FfTU9ERV9GQVNUOworCQkJbWluX3Rsb3cgPSA0NDsKKwkJCW1pbl90aGkgID0gMjA7CisJCQlyYWlzZV9mYWxsX3RpbWUgPSA1ODsgLyogUmFpc2UgMjllLThzLCBGYWxsIDI5ZS04cyAqLworCQl9IGVsc2UgeworCQkJbW9kZSA9IEkyQ19QQ0FfTU9ERV9TVEQ7CisJCQltaW5fdGxvdyA9IDE1NzsKKwkJCW1pbl90aGkgID0gMTM0OworCQkJcmFpc2VfZmFsbF90aW1lID0gMTI3OyAvKiBSYWlzZSAyOWUtOHMsIEZhbGwgOThlLThzICovCisJCX0KKworCQkvKiBUaGUgbWluaW11bSBjbG9jayB0aGF0IHJlc3BlY3RzIHRoZSB0aGkvdGxvdyA9IDEzNC8xNTcgaXMKKwkJICogNjQ4MDAgSHouIEJlbG93IHRoYXQsIHdlIGhhdmUgdG8gZml4IHRoZSB0bG93IHRvIDI1NSBhbmQKKwkJICogY2FsY3VsYXRlIHRoZSB0aGkgZmFjdG9yLgorCQkgKi8KKwkJaWYgKGNsb2NrIDwgNjQ4KSB7CisJCQl0bG93ID0gMjU1OworCQkJdGhpID0gMTAwMDAwMCAtIGNsb2NrICogcmFpc2VfZmFsbF90aW1lOworCQkJdGhpIC89IChJMkNfUENBX09TQ19QRVIgKiBjbG9jaykgLSB0bG93OworCQl9IGVsc2UgeworCQkJdGxvdyA9ICgxMDAwMDAwIC0gY2xvY2sgKiByYWlzZV9mYWxsX3RpbWUpICogbWluX3Rsb3c7CisJCQl0bG93IC89IEkyQ19QQ0FfT1NDX1BFUiAqIGNsb2NrICogKG1pbl90aGkgKyBtaW5fdGxvdyk7CisJCQl0aGkgPSB0bG93ICogbWluX3RoaSAvIG1pbl90bG93OworCQl9CisKKwkJcGNhX3Jlc2V0KHBjYV9kYXRhKTsKKworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgIiVzOiBDbG9jayBmcmVxdWVuY3kgaXMgJWRIelxuIiwgYWRhcC0+bmFtZSwgY2xvY2sgKiAxMDApOworCisJCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORFBUUiwgSTJDX1BDQV9JTU9ERSk7CisJCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORCwgbW9kZSk7CisJCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORFBUUiwgSTJDX1BDQV9JU0NMTCk7CisJCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORCwgdGxvdyk7CisJCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORFBUUiwgSTJDX1BDQV9JU0NMSCk7CisJCXBjYV9vdXR3KHBjYV9kYXRhLCBJMkNfUENBX0lORCwgdGhpKTsKKworCQlwY2Ffc2V0X2NvbihwY2FfZGF0YSwgSTJDX1BDQV9DT05fRU5TSU8pOworCX0KIAl1ZGVsYXkoNTAwKTsgLyogNTAwIHVzIGZvciBvc2NpbGF0b3IgdG8gc3RhYmlsaXNlICovCiAKIAlyZXR1cm4gMDsKQEAgLTM4NCw3ICs1NDgsNyBAQAogCiBNT0RVTEVfQVVUSE9SKCJJYW4gQ2FtcGJlbGwgPGljYW1wYmVsbEBhcmNvbS5jb20+LCAiCiAJIldvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIFBDQTk1NjQgYWxnb3JpdGhtIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgUENBOTU2NC9QQ0E5NjY1IGFsZ29yaXRobSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfcGFyYW0oaTJjX2RlYnVnLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYwppbmRleCAzZTAxOTkyLi43Y2U3NTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYwpAQCAtMSwzMSArMSwzMCBAQAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogaTJjLWFsZ28tcGNmLmMgaTJjIGRyaXZlciBhbGdvcml0aG1zIGZvciBQQ0Y4NTg0IGFkYXB0ZXJzCQkgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IFNpbW9uIEcuIFZvZ2wKLSAgICAgICAgICAgICAgICAgICAxOTk4LTIwMDAgSGFucyBCZXJnbHVuZAotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kCi0gICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICxhbmQgYWxzbyBmcm9tIE1hcnRpbiBCYWlsZXkKLSAgIDxtYmFpbGV5QGxpdHRsZWZlZXQtaW5jLmNvbT4gKi8KLQotLyogUGFydGlhbGx5IHJld3JpdGVuIGJ5IE9sZWcgSS4gVmRvdmlraW4gPHZkb3Zpa2luQGpzY2MucnU+IHRvIGhhbmRsZSBtdWx0aXBsZQotICAgbWVzc2FnZXMsIHByb3BlciBzdG9wL3JlcHN0YXJ0IHNpZ25hbGluZyBkdXJpbmcgcmVjZWl2ZSwKLSAgIGFkZGVkIGRldGVjdCBjb2RlICovCisvKgorICogaTJjLWFsZ28tcGNmLmMgaTJjIGRyaXZlciBhbGdvcml0aG1zIGZvciBQQ0Y4NTg0IGFkYXB0ZXJzCisgKgorICogICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBTaW1vbiBHLiBWb2dsCisgKgkJICAgMTk5OC0yMDAwIEhhbnMgQmVyZ2x1bmQKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKKyAqIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIGFuZCBhbHNvIGZyb20gTWFydGluIEJhaWxleQorICogPG1iYWlsZXlAbGl0dGxlZmVldC1pbmMuY29tPgorICoKKyAqIFBhcnRpYWxseSByZXdyaXRlbiBieSBPbGVnIEkuIFZkb3Zpa2luIDx2ZG92aWtpbkBqc2NjLnJ1PiB0byBoYW5kbGUgbXVsdGlwbGUKKyAqIG1lc3NhZ2VzLCBwcm9wZXIgc3RvcC9yZXBzdGFydCBzaWduYWxpbmcgZHVyaW5nIHJlY2VpdmUsIGFkZGVkIGRldGVjdCBjb2RlCisgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzgsMTcgKzM3LDE4IEBACiAjaW5jbHVkZSAiaTJjLWFsZ28tcGNmLmgiCiAKIAotI2RlZmluZSBERUIyKHgpIGlmIChpMmNfZGVidWc+PTIpIHgKLSNkZWZpbmUgREVCMyh4KSBpZiAoaTJjX2RlYnVnPj0zKSB4IC8qIHByaW50IHNldmVyYWwgc3RhdGlzdGljYWwgdmFsdWVzKi8KLSNkZWZpbmUgREVCUFJPVE8oeCkgaWYgKGkyY19kZWJ1Zz49OSkgeDsKLSAJLyogZGVidWcgdGhlIHByb3RvY29sIGJ5IHNob3dpbmcgdHJhbnNmZXJyZWQgYml0cyAqLworI2RlZmluZSBERUIyKHgpIGlmIChpMmNfZGVidWcgPj0gMikgeAorI2RlZmluZSBERUIzKHgpIGlmIChpMmNfZGVidWcgPj0gMykgeCAvKiBwcmludCBzZXZlcmFsIHN0YXRpc3RpY2FsIHZhbHVlcyAqLworI2RlZmluZSBERUJQUk9UTyh4KSBpZiAoaTJjX2RlYnVnID49IDkpIHg7CisJLyogZGVidWcgdGhlIHByb3RvY29sIGJ5IHNob3dpbmcgdHJhbnNmZXJyZWQgYml0cyAqLwogI2RlZmluZSBERUZfVElNRU9VVCAxNgogCi0vKiBtb2R1bGUgcGFyYW1ldGVyczoKKy8qCisgKiBtb2R1bGUgcGFyYW1ldGVyczoKICAqLwogc3RhdGljIGludCBpMmNfZGVidWc7CiAKLS8qIC0tLSBzZXR0aW5nIHN0YXRlcyBvbiB0aGUgYnVzIHdpdGggdGhlIHJpZ2h0IHRpbWluZzogLS0tLS0tLS0tLS0tLS0tCSovCisvKiBzZXR0aW5nIHN0YXRlcyBvbiB0aGUgYnVzIHdpdGggdGhlIHJpZ2h0IHRpbWluZzogKi8KIAogI2RlZmluZSBzZXRfcGNmKGFkYXAsIGN0bCwgdmFsKSBhZGFwLT5zZXRwY2YoYWRhcC0+ZGF0YSwgY3RsLCB2YWwpCiAjZGVmaW5lIGdldF9wY2YoYWRhcCwgY3RsKSBhZGFwLT5nZXRwY2YoYWRhcC0+ZGF0YSwgY3RsKQpAQCAtNTcsMjIgKzU3LDIxIEBACiAjZGVmaW5lIGkyY19vdXRiKGFkYXAsIHZhbCkgYWRhcC0+c2V0cGNmKGFkYXAtPmRhdGEsIDAsIHZhbCkKICNkZWZpbmUgaTJjX2luYihhZGFwKSBhZGFwLT5nZXRwY2YoYWRhcC0+ZGF0YSwgMCkKIAotLyogLS0tIG90aGVyIGF1eGlsaWFyeSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KKy8qIG90aGVyIGF1eGlsaWFyeSBmdW5jdGlvbnMgKi8KIAotc3RhdGljIHZvaWQgaTJjX3N0YXJ0KHN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCkgCitzdGF0aWMgdm9pZCBpMmNfc3RhcnQoc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwKQogewotCURFQlBST1RPKHByaW50aygiUyAiKSk7CisJREVCUFJPVE8ocHJpbnRrKEtFUk5fREVCVUcgIlMgIikpOwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9TVEFSVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY19yZXBzdGFydChzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXApIAorc3RhdGljIHZvaWQgaTJjX3JlcHN0YXJ0KHN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCkKIHsKIAlERUJQUk9UTyhwcmludGsoIiBTciAiKSk7CiAJc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX1JFUFNUQVJUKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpMmNfc3RvcChzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXApIAorc3RhdGljIHZvaWQgaTJjX3N0b3Aoc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwKQogewogCURFQlBST1RPKHByaW50aygiUFxuIikpOwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9TVE9QKTsKQEAgLTgyLDE3ICs4MSwxNyBAQAogewogCURFQjIocHJpbnRrKEtFUk5fSU5GTwogCQkiaTJjLWFsZ28tcGNmLm86IGxvc3QgYXJiaXRyYXRpb24gKENTUiAweCUwMngpXG4iLAotCQkgKnN0YXR1cykpOwotCi0JLyogQ2xlYW51cCBmcm9tIExBQiAtLSByZXNldCBhbmQgZW5hYmxlIEVTTy4KKwkJKnN0YXR1cykpOworCS8qCisJICogQ2xlYW51cCBmcm9tIExBQiAtLSByZXNldCBhbmQgZW5hYmxlIEVTTy4KIAkgKiBUaGlzIHJlc2V0cyB0aGUgUENGODU4NDsgc2luY2Ugd2UndmUgbG9zdCB0aGUgYnVzLCBubwogCSAqIGZ1cnRoZXIgYXR0ZW1wdHMgc2hvdWxkIGJlIG1hZGUgYnkgY2FsbGVycyB0byBjbGVhbiB1cAogCSAqIChubyBpMmNfc3RvcCgpIGV0Yy4pCiAJICovCiAJc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX1BJTik7CiAJc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX0VTTyk7Ci0KLQkvKiBXZSBwYXVzZSBmb3IgYSB0aW1lIHBlcmlvZCBzdWZmaWNpZW50IGZvciBhbnkgcnVubmluZworCS8qCisJICogV2UgcGF1c2UgZm9yIGEgdGltZSBwZXJpb2Qgc3VmZmljaWVudCBmb3IgYW55IHJ1bm5pbmcKIAkgKiBJMkMgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUgLS0gdGhlIGFyYml0cmF0aW9uIGxvZ2ljIHdvbid0CiAJICogd29yayBwcm9wZXJseSB1bnRpbCB0aGUgbmV4dCBTVEFSVCBpcyBzZWVuLgogCSAqIEl0IGlzIGFzc3VtZWQgdGhlIGJ1cyBkcml2ZXIgb3IgY2xpZW50IGhhcyBzZXQgYSBwcm9wZXIgdmFsdWUuCkBAIC0xMDgsNDggKzEwNyw1MCBAQAogCQlnZXRfcGNmKGFkYXAsIDEpKSk7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF9mb3JfYmIoc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwKSB7CitzdGF0aWMgaW50IHdhaXRfZm9yX2JiKHN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCkKK3sKIAogCWludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7CiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IGdldF9wY2YoYWRhcCwgMSk7Ci0jaWZuZGVmIFNUVUJfSTJDCi0Jd2hpbGUgKHRpbWVvdXQtLSAmJiAhKHN0YXR1cyAmIEkyQ19QQ0ZfQkIpKSB7CisKKwl3aGlsZSAoIShzdGF0dXMgJiBJMkNfUENGX0JCKSAmJiAtLXRpbWVvdXQpIHsKIAkJdWRlbGF5KDEwMCk7IC8qIHdhaXQgZm9yIDEwMCB1cyAqLwogCQlzdGF0dXMgPSBnZXRfcGNmKGFkYXAsIDEpOwogCX0KLSNlbmRpZgotCWlmICh0aW1lb3V0IDw9IDApIHsKKworCWlmICh0aW1lb3V0ID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUaW1lb3V0IHdhaXRpbmcgZm9yIEJ1cyBCdXN5XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQotCQotCXJldHVybiAodGltZW91dDw9MCk7CisKKwlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IHdhaXRfZm9yX3BpbihzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXAsIGludCAqc3RhdHVzKSB7CitzdGF0aWMgaW50IHdhaXRfZm9yX3BpbihzdHJ1Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKmFkYXAsIGludCAqc3RhdHVzKQorewogCiAJaW50IHRpbWVvdXQgPSBERUZfVElNRU9VVDsKIAogCSpzdGF0dXMgPSBnZXRfcGNmKGFkYXAsIDEpOwotI2lmbmRlZiBTVFVCX0kyQwotCXdoaWxlICh0aW1lb3V0LS0gJiYgKCpzdGF0dXMgJiBJMkNfUENGX1BJTikpIHsKKworCXdoaWxlICgoKnN0YXR1cyAmIEkyQ19QQ0ZfUElOKSAmJiAtLXRpbWVvdXQpIHsKIAkJYWRhcC0+d2FpdGZvcnBpbihhZGFwLT5kYXRhKTsKIAkJKnN0YXR1cyA9IGdldF9wY2YoYWRhcCwgMSk7CiAJfQogCWlmICgqc3RhdHVzICYgSTJDX1BDRl9MQUIpIHsKIAkJaGFuZGxlX2xhYihhZGFwLCBzdGF0dXMpOwotCQlyZXR1cm4oLUVJTlRSKTsKKwkJcmV0dXJuIC1FSU5UUjsKIAl9Ci0jZW5kaWYKLQlpZiAodGltZW91dCA8PSAwKQotCQlyZXR1cm4oLTEpOwotCWVsc2UKLQkJcmV0dXJuKDApOworCisJaWYgKHRpbWVvdXQgPT0gMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZXR1cm4gMDsKIH0KIAotLyogCisvKgogICogVGhpcyBzaG91bGQgcGVyZm9ybSB0aGUgJ1BDRjg1ODQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UnIGFzIGRlc2NyaWJlZAogICogaW4gdGhlIFBoaWxpcHMgSUMxMiBkYXRhIGJvb2sgKDE5OTUsIEF1ZyAyOSkuCiAgKiBUaGVyZSBzaG91bGQgYmUgYSAzMCBjbG9jayBjeWNsZSB3YWl0IGFmdGVyIHJlc2V0LCBJIGFzc3VtZSB0aGlzCkBAIC0xNjQsMTggKzE2NSwyMSBAQAogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAotCURFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBQQ0Ygc3RhdGUgMHglMDJ4XG4iLCBnZXRfcGNmKGFkYXAsIDEpKSk7CisJREVCMyhwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IFBDRiBzdGF0ZSAweCUwMnhcbiIsCisJCQkJZ2V0X3BjZihhZGFwLCAxKSkpOwogCiAJLyogUzE9MHg4MDogUzAgc2VsZWN0ZWQsIHNlcmlhbCBpbnRlcmZhY2Ugb2ZmICovCiAJc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX1BJTik7Ci0JLyogY2hlY2sgdG8gc2VlIFMxIG5vdyB1c2VkIGFzIFIvVyBjdHJsIC0KLQkgICBQQ0Y4NTg0IGRvZXMgdGhhdCB3aGVuIEVTTyBpcyB6ZXJvICovCisJLyoKKwkgKiBjaGVjayB0byBzZWUgUzEgbm93IHVzZWQgYXMgUi9XIGN0cmwgLQorCSAqIFBDRjg1ODQgZG9lcyB0aGF0IHdoZW4gRVNPIGlzIHplcm8KKwkgKi8KIAlpZiAoKCh0ZW1wID0gZ2V0X3BjZihhZGFwLCAxKSkgJiAweDdmKSAhPSAoMCkpIHsKIAkJREVCMihwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiBQQ0YgZGV0ZWN0aW9uIGZhaWxlZCAtLSBjYW4ndCBzZWxlY3QgUzAgKDB4JTAyeCkuXG4iLCB0ZW1wKSk7CiAJCXJldHVybiAtRU5YSU87IC8qIGRlZmluZXRseSBub3QgUENGODU4NCAqLwogCX0KIAotCS8qIGxvYWQgb3duIGFkZHJlc3MgaW4gUzAsIGVmZmVjdGl2ZSBhZGRyZXNzIGlzIChvd24gPDwgMSkJKi8KKwkvKiBsb2FkIG93biBhZGRyZXNzIGluIFMwLCBlZmZlY3RpdmUgYWRkcmVzcyBpcyAob3duIDw8IDEpICovCiAJaTJjX291dGIoYWRhcCwgZ2V0X293bihhZGFwKSk7CiAJLyogY2hlY2sgaXQncyByZWFsbHkgd3JpdHRlbiAqLwogCWlmICgodGVtcCA9IGkyY19pbmIoYWRhcCkpICE9IGdldF9vd24oYWRhcCkpIHsKQEAgLTE4Myw3ICsxODcsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCS8qIFMxPTB4QTAsIG5leHQgYnl0ZSBpbiBTMgkJCQkJKi8KKwkvKiBTMT0weEEwLCBuZXh0IGJ5dGUgaW4gUzIgKi8KIAlzZXRfcGNmKGFkYXAsIDEsIEkyQ19QQ0ZfUElOIHwgSTJDX1BDRl9FUzEpOwogCS8qIGNoZWNrIHRvIHNlZSBTMiBub3cgc2VsZWN0ZWQgKi8KIAlpZiAoKCh0ZW1wID0gZ2V0X3BjZihhZGFwLCAxKSkgJiAweDdmKSAhPSBJMkNfUENGX0VTMSkgewpAQCAtMTkxLDcgKzE5NSw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JLyogbG9hZCBjbG9jayByZWdpc3RlciBTMgkJCQkJKi8KKwkvKiBsb2FkIGNsb2NrIHJlZ2lzdGVyIFMyICovCiAJaTJjX291dGIoYWRhcCwgZ2V0X2Nsb2NrKGFkYXApKTsKIAkvKiBjaGVjayBpdCdzIHJlYWxseSB3cml0dGVuLCB0aGUgb25seSA1IGxvd2VzdCBiaXRzIGRvZXMgbWF0dGVyICovCiAJaWYgKCgodGVtcCA9IGkyY19pbmIoYWRhcCkpICYgMHgxZikgIT0gZ2V0X2Nsb2NrKGFkYXApKSB7CkBAIC0xOTksNyArMjAzLDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQkvKiBFbmFibGUgc2VyaWFsIGludGVyZmFjZSwgaWRsZSwgUzAgc2VsZWN0ZWQJCQkqLworCS8qIEVuYWJsZSBzZXJpYWwgaW50ZXJmYWNlLCBpZGxlLCBTMCBzZWxlY3RlZCAqLwogCXNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9JRExFKTsKIAogCS8qIGNoZWNrIHRvIHNlZSBQQ0YgaXMgcmVhbGx5IGlkbGVkIGFuZCB3ZSBjYW4gYWNjZXNzIHN0YXR1cyByZWdpc3RlciAqLwpAQCAtMjA3LDU3ICsyMTEsNDcgQEAKIAkJREVCMihwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiBQQ0YgZGV0ZWN0aW9uIGZhaWxlZCAtLSBjYW4ndCBzZWxlY3QgUzFgICgweCUwMngpLlxuIiwgdGVtcCkpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQkKKwogCXByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkIFBDRjg1ODQuXG4iKTsKIAogCXJldHVybiAwOwogfQogCi0KLS8qIC0tLS0tIFV0aWxpdHkgZnVuY3Rpb25zCi0gKi8KLQogc3RhdGljIGludCBwY2Zfc2VuZGJ5dGVzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCBsYXN0KQorCQkJIGludCBjb3VudCwgaW50IGxhc3QpCiB7CiAJc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKIAlpbnQgd3Jjb3VudCwgc3RhdHVzLCB0aW1lb3V0OwotICAgIAorCiAJZm9yICh3cmNvdW50PTA7IHdyY291bnQ8Y291bnQ7ICsrd3Jjb3VudCkgewogCQlERUIyKGRldl9kYmcoJmkyY19hZGFwLT5kZXYsICJpMmNfd3JpdGU6IHdyaXRpbmcgJTIuMlhcbiIsCi0JCQkJYnVmW3dyY291bnRdJjB4ZmYpKTsKKwkJCQlidWZbd3Jjb3VudF0gJiAweGZmKSk7CiAJCWkyY19vdXRiKGFkYXAsIGJ1Zlt3cmNvdW50XSk7CiAJCXRpbWVvdXQgPSB3YWl0X2Zvcl9waW4oYWRhcCwgJnN0YXR1cyk7CiAJCWlmICh0aW1lb3V0KSB7Ci0JCQlpZiAodGltZW91dCA9PSAtRUlOVFIpIHsKLQkJCQkvKiBhcmJpdHJhdGlvbiBsb3N0ICovCi0JCQkJcmV0dXJuIC1FSU5UUjsKLQkJCX0KKwkJCWlmICh0aW1lb3V0ID09IC1FSU5UUikKKwkJCQlyZXR1cm4gLUVJTlRSOyAvKiBhcmJpdHJhdGlvbiBsb3N0ICovCisKIAkJCWkyY19zdG9wKGFkYXApOwogCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwgImkyY193cml0ZTogZXJyb3IgLSB0aW1lb3V0LlxuIik7CiAJCQlyZXR1cm4gLUVSRU1PVEVJTzsgLyogZ290IGEgYmV0dGVyIG9uZSA/PyAqLwogCQl9Ci0jaWZuZGVmIFNUVUJfSTJDCiAJCWlmIChzdGF0dXMgJiBJMkNfUENGX0xSQikgewogCQkJaTJjX3N0b3AoYWRhcCk7CiAJCQlkZXZfZXJyKCZpMmNfYWRhcC0+ZGV2LCAiaTJjX3dyaXRlOiBlcnJvciAtIG5vIGFjay5cbiIpOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87IC8qIGdvdCBhIGJldHRlciBvbmUgPz8gKi8KIAkJfQotI2VuZGlmCiAJfQotCWlmIChsYXN0KSB7CisJaWYgKGxhc3QpCiAJCWkyY19zdG9wKGFkYXApOwotCX0KLQllbHNlIHsKKwllbHNlCiAJCWkyY19yZXBzdGFydChhZGFwKTsKLQl9CiAKLQlyZXR1cm4gKHdyY291bnQpOworCXJldHVybiB3cmNvdW50OwogfQogCi0KIHN0YXRpYyBpbnQgcGNmX3JlYWRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgbGFzdCkKKwkJCSBpbnQgY291bnQsIGludCBsYXN0KQogewogCWludCBpLCBzdGF0dXM7CiAJc3RydWN0IGkyY19hbGdvX3BjZl9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKQEAgLTI2Nyw0MiArMjYxLDM2IEBACiAJZm9yIChpID0gMDsgaSA8PSBjb3VudDsgaSsrKSB7CiAKIAkJaWYgKCh3ZnAgPSB3YWl0X2Zvcl9waW4oYWRhcCwgJnN0YXR1cykpKSB7Ci0JCQlpZiAod2ZwID09IC1FSU5UUikgewotCQkJCS8qIGFyYml0cmF0aW9uIGxvc3QgKi8KLQkJCQlyZXR1cm4gLUVJTlRSOwotCQkJfQorCQkJaWYgKHdmcCA9PSAtRUlOVFIpCisJCQkJcmV0dXJuIC1FSU5UUjsgLyogYXJiaXRyYXRpb24gbG9zdCAqLworCiAJCQlpMmNfc3RvcChhZGFwKTsKIAkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsICJwY2ZfcmVhZGJ5dGVzIHRpbWVkIG91dC5cbiIpOwotCQkJcmV0dXJuICgtMSk7CisJCQlyZXR1cm4gLTE7CiAJCX0KIAotI2lmbmRlZiBTVFVCX0kyQwogCQlpZiAoKHN0YXR1cyAmIEkyQ19QQ0ZfTFJCKSAmJiAoaSAhPSBjb3VudCkpIHsKIAkJCWkyY19zdG9wKGFkYXApOwogCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwgImkyY19yZWFkOiBpMmNfaW5iLCBObyBhY2suXG4iKTsKLQkJCXJldHVybiAoLTEpOworCQkJcmV0dXJuIC0xOwogCQl9Ci0jZW5kaWYKLQkJCisKIAkJaWYgKGkgPT0gY291bnQgLSAxKSB7CiAJCQlzZXRfcGNmKGFkYXAsIDEsIEkyQ19QQ0ZfRVNPKTsKLQkJfSBlbHNlIAotCQlpZiAoaSA9PSBjb3VudCkgewotCQkJaWYgKGxhc3QpIHsKKwkJfSBlbHNlIGlmIChpID09IGNvdW50KSB7CisJCQlpZiAobGFzdCkKIAkJCQlpMmNfc3RvcChhZGFwKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJaTJjX3JlcHN0YXJ0KGFkYXApOwotCQkJfQotCQl9OwotCi0JCWlmIChpKSB7Ci0JCQlidWZbaSAtIDFdID0gaTJjX2luYihhZGFwKTsKLQkJfSBlbHNlIHsKLQkJCWkyY19pbmIoYWRhcCk7IC8qIGR1bW15IHJlYWQgKi8KIAkJfQorCisJCWlmIChpKQorCQkJYnVmW2kgLSAxXSA9IGkyY19pbmIoYWRhcCk7CisJCWVsc2UKKwkJCWkyY19pbmIoYWRhcCk7IC8qIGR1bW15IHJlYWQgKi8KIAl9CiAKLQlyZXR1cm4gKGkgLSAxKTsKKwlyZXR1cm4gaSAtIDE7CiB9CiAKIApAQCAtMzIzLDE0ICszMTEsMTQgQEAKIH0KIAogc3RhdGljIGludCBwY2ZfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAotCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIAorCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsCiAJCSAgICBpbnQgbnVtKQogewogCXN0cnVjdCBpMmNfYWxnb19wY2ZfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CiAJc3RydWN0IGkyY19tc2cgKnBtc2c7CiAJaW50IGk7CiAJaW50IHJldD0wLCB0aW1lb3V0LCBzdGF0dXM7Ci0gICAgCisKIAlpZiAoYWRhcC0+eGZlcl9iZWdpbikKIAkJYWRhcC0+eGZlcl9iZWdpbihhZGFwLT5kYXRhKTsKIApAQCAtMzM4LDI1ICszMjYsMjQgQEAKIAl0aW1lb3V0ID0gd2FpdF9mb3JfYmIoYWRhcCk7CiAJaWYgKHRpbWVvdXQpIHsKIAkJREVCMihwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiAiCi0JCSAgICAgICAgICAgICJUaW1lb3V0IHdhaXRpbmcgZm9yIEJCIGluIHBjZl94ZmVyXG4iKTspCisJCQkgICAgIlRpbWVvdXQgd2FpdGluZyBmb3IgQkIgaW4gcGNmX3hmZXJcbiIpOykKIAkJaSA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KLQkKKwogCWZvciAoaSA9IDA7cmV0ID49IDAgJiYgaSA8IG51bTsgaSsrKSB7CiAJCXBtc2cgPSAmbXNnc1tpXTsKIAogCQlERUIyKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogRG9pbmcgJXMgJWQgYnl0ZXMgdG8gMHglMDJ4IC0gJWQgb2YgJWQgbWVzc2FnZXNcbiIsCiAJCSAgICAgcG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCi0gICAgICAgICAgICAgICAgICAgICBwbXNnLT5sZW4sIHBtc2ctPmFkZHIsIGkgKyAxLCBudW0pOykKLSAgICAKKwkJICAgICBwbXNnLT5sZW4sIHBtc2ctPmFkZHIsIGkgKyAxLCBudW0pOykKKwogCQlyZXQgPSBwY2ZfZG9BZGRyZXNzKGFkYXAsIHBtc2cpOwogCiAJCS8qIFNlbmQgU1RBUlQgKi8KLQkJaWYgKGkgPT0gMCkgewotCQkJaTJjX3N0YXJ0KGFkYXApOyAKLQkJfQotICAgIAorCQlpZiAoaSA9PSAwKQorCQkJaTJjX3N0YXJ0KGFkYXApOworCiAJCS8qIFdhaXQgZm9yIFBJTiAocGVuZGluZyBpbnRlcnJ1cHQgTk9UKSAqLwogCQl0aW1lb3V0ID0gd2FpdF9mb3JfcGluKGFkYXAsICZzdGF0dXMpOwogCQlpZiAodGltZW91dCkgewpAQCAtMzcxLDggKzM1OCw3IEBACiAJCQlpID0gLUVSRU1PVEVJTzsKIAkJCWdvdG8gb3V0OwogCQl9Ci0gICAgCi0jaWZuZGVmIFNUVUJfSTJDCisKIAkJLyogQ2hlY2sgTFJCIChsYXN0IHJjdmQgYml0IC0gc2xhdmUgYWNrKSAqLwogCQlpZiAoc3RhdHVzICYgSTJDX1BDRl9MUkIpIHsKIAkJCWkyY19zdG9wKGFkYXApOwpAQCAtMzgwLDI3ICszNjYsMjQgQEAKIAkJCWkgPSAtRVJFTU9URUlPOwogCQkJZ290byBvdXQ7CiAJCX0KLSNlbmRpZgotICAgIAorCiAJCURFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBNc2cgJWQsIGFkZHI9MHgleCwgZmxhZ3M9MHgleCwgbGVuPSVkXG4iLAogCQkJICAgIGksIG1zZ3NbaV0uYWRkciwgbXNnc1tpXS5mbGFncywgbXNnc1tpXS5sZW4pOykKLSAgICAKLQkJLyogUmVhZCAqLworCiAJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7Ci0JCQkvKiByZWFkIGJ5dGVzIGludG8gYnVmZmVyKi8KIAkJCXJldCA9IHBjZl9yZWFkYnl0ZXMoaTJjX2FkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSArIDEgPT0gbnVtKSk7Ci0gICAgICAgIAorCQkJCQkgICAgKGkgKyAxID09IG51bSkpOworCiAJCQlpZiAocmV0ICE9IHBtc2ctPmxlbikgewogCQkJCURFQjIocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBmYWlsOiAiCiAJCQkJCSAgICAib25seSByZWFkICVkIGJ5dGVzLlxuIixyZXQpKTsKIAkJCX0gZWxzZSB7CiAJCQkJREVCMihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IHJlYWQgJWQgYnl0ZXMuXG4iLHJldCkpOwogCQkJfQotCQl9IGVsc2UgeyAvKiBXcml0ZSAqLworCQl9IGVsc2UgewogCQkJcmV0ID0gcGNmX3NlbmRieXRlcyhpMmNfYWRhcCwgcG1zZy0+YnVmLCBwbXNnLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpICsgMSA9PSBudW0pKTsKLSAgICAgICAgCisJCQkJCSAgICAoaSArIDEgPT0gbnVtKSk7CisKIAkJCWlmIChyZXQgIT0gcG1zZy0+bGVuKSB7CiAJCQkJREVCMihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IGZhaWw6ICIKIAkJCQkJICAgICJvbmx5IHdyb3RlICVkIGJ5dGVzLlxuIixyZXQpKTsKQEAgLTQxMywyNCArMzk2LDIzIEBACiBvdXQ6CiAJaWYgKGFkYXAtPnhmZXJfZW5kKQogCQlhZGFwLT54ZmVyX2VuZChhZGFwLT5kYXRhKTsKLQlyZXR1cm4gKGkpOworCXJldHVybiBpOwogfQogCiBzdGF0aWMgdTMyIHBjZl9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKLQlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTCB8IAorCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMIHwKIAkgICAgICAgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkc7CiB9CiAKLS8qIC0tLS0tZXhwb3J0ZWQgYWxnb3JpdGhtIGRhdGE6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLQorLyogZXhwb3J0ZWQgYWxnb3JpdGhtIGRhdGE6ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gcGNmX2FsZ28gPSB7CiAJLm1hc3Rlcl94ZmVyCT0gcGNmX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJPSBwY2ZfZnVuYywKIH07CiAKLS8qIAotICogcmVnaXN0ZXJpbmcgZnVuY3Rpb25zIHRvIGxvYWQgYWxnb3JpdGhtcyBhdCBydW50aW1lIAorLyoKKyAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZQogICovCiBpbnQgaTJjX3BjZl9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKQEAgLTQ0MSw3ICs0MjMsNiBAQAogCiAJLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAqLwogCWFkYXAtPmFsZ28gPSAmcGNmX2FsZ287Ci0JYWRhcC0+dGltZW91dCA9IDEwMDsKIAogCWlmICgocnZhbCA9IHBjZl9pbml0Xzg1ODQocGNmX2FkYXApKSkKIAkJcmV0dXJuIHJ2YWw7CkBAIC00NTgsNCArNDM5LDQgQEAKIAogbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGkyY19kZWJ1ZywKLSAgICAgICAgImRlYnVnIGxldmVsIC0gMCBvZmY7IDEgbm9ybWFsOyAyLDMgbW9yZSB2ZXJib3NlOyA5IHBjZi1wcm90b2NvbCIpOworCSJkZWJ1ZyBsZXZlbCAtIDAgb2ZmOyAxIG5vcm1hbDsgMiwzIG1vcmUgdmVyYm9zZTsgOSBwY2YtcHJvdG9jb2wiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggN2Y5NTkwNS4uZGE4MDlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTEzMiw2ICsxMzIsNyBAQAogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I1CiAJICAgIFNlcnZlcndvcmtzIENTQjYKIAkgICAgU2VydmVyd29ya3MgSFQtMTAwMAorCSAgICBTZXJ2ZXJ3b3JrcyBIVC0xMTAwCiAJICAgIFNNU0MgVmljdG9yeTY2CiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKQEAgLTYxNywxMiArNjE4LDEyIEBACiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtZWxla3Rvci4KIAogY29uZmlnIEkyQ19QQ0FfSVNBCi0JdHJpc3RhdGUgIlBDQTk1NjQgb24gYW4gSVNBIGJ1cyIKKwl0cmlzdGF0ZSAiUENBOTU2NC9QQ0E5NjY1IG9uIGFuIElTQSBidXMiCiAJZGVwZW5kcyBvbiBJU0EKIAlzZWxlY3QgSTJDX0FMR09QQ0EKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJU0EgYm9hcmRzIHVzaW5nIHRoZSBQaGlsaXBzIFBDQTk1NjQKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIElTQSBib2FyZHMgdXNpbmcgdGhlIFBoaWxpcHMgUENBOTU2NC9QQ0E5NjY1CiAJICBwYXJhbGxlbCBidXMgdG8gSTJDIGJ1cyBjb250cm9sbGVyLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCkBAIC02MzQsMTEgKzYzNSwxMSBAQAogCSAgdGltZSkuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSTJDX1BDQV9QTEFURk9STQotCXRyaXN0YXRlICJQQ0E5NTY0IGFzIHBsYXRmb3JtIGRldmljZSIKKwl0cmlzdGF0ZSAiUENBOTU2NC9QQ0E5NjY1IGFzIHBsYXRmb3JtIGRldmljZSIKIAlzZWxlY3QgSTJDX0FMR09QQ0EKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyBhIG1lbW9yeSBtYXBwZWQgUGhpbGlwcyBQQ0E5NTY0CisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBhIG1lbW9yeSBtYXBwZWQgUGhpbGlwcyBQQ0E5NTY0L1BDQTk2NjUKIAkgIHBhcmFsbGVsIGJ1cyB0byBJMkMgYnVzIGNvbnRyb2xsZXIuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWNvcm4uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWNvcm4uYwppbmRleCA5YWVmYjVlLi44Njc5NjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFjb3JuLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hY29ybi5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvYy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYwppbmRleCA1ZDc3ODk4Li4zZmFlM2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JdGltZW91dCA9IGppZmZpZXMgKyBEQVZJTkNJX0kyQ19USU1FT1VUOworCXRpbWVvdXQgPSBqaWZmaWVzICsgZGV2LT5hZGFwdGVyLnRpbWVvdXQ7CiAJd2hpbGUgKGRhdmluY2lfaTJjX3JlYWRfcmVnKGRldiwgREFWSU5DSV9JMkNfU1RSX1JFRykKIAkgICAgICAgJiBEQVZJTkNJX0kyQ19TVFJfQkIpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKQEAgLTI4OSw3ICsyODksNyBAQAogCWRhdmluY2lfaTJjX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfSTJDX01EUl9SRUcsIGZsYWcpOwogCiAJciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZkZXYtPmNtZF9jb21wbGV0ZSwKLQkJCQkJCSAgICAgIERBVklOQ0lfSTJDX1RJTUVPVVQpOworCQkJCQkJICAgICAgZGV2LT5hZGFwdGVyLnRpbWVvdXQpOwogCWlmIChyID09IDApIHsKIAkJZGV2X2VycihkZXYtPmRldiwgImNvbnRyb2xsZXIgdGltZWQgb3V0XG4iKTsKIAkJaTJjX2RhdmluY2lfaW5pdChkZXYpOwpAQCAtNTQ2LDkgKzU0Niw3IEBACiAJc3RybGNweShhZGFwLT5uYW1lLCAiRGFWaW5jaSBJMkMgYWRhcHRlciIsIHNpemVvZihhZGFwLT5uYW1lKSk7CiAJYWRhcC0+YWxnbyA9ICZpMmNfZGF2aW5jaV9hbGdvOwogCWFkYXAtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCi0JLyogRklYTUUgKi8KLQlhZGFwLT50aW1lb3V0ID0gMTsKKwlhZGFwLT50aW1lb3V0ID0gREFWSU5DSV9JMkNfVElNRU9VVDsKIAogCWFkYXAtPm5yID0gcGRldi0+aWQ7CiAJciA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcihhZGFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMKaW5kZXggODhmMGRiNy4uOGI5MmE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCWlmIChkZXYtPmlycSA+PSAwKXsKIAkJLyogSW50ZXJydXB0IG1vZGUgKi8KIAkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53cSwKLQkJCSEoaW5fOCgmaWljLT5zdHMpICYgU1RTX1BUKSwgZGV2LT5hZGFwLnRpbWVvdXQgKiBIWik7CisJCQkhKGluXzgoJmlpYy0+c3RzKSAmIFNUU19QVCksIGRldi0+YWRhcC50aW1lb3V0KTsKIAogCQlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCQlEQkcoIiVkOiB3YWl0IGludGVycnVwdGVkXG4iLCBkZXYtPmlkeCk7CkBAIC00MjYsNyArNDI2LDcgQEAKIAl9CiAJZWxzZSB7CiAJCS8qIFBvbGxpbmcgbW9kZSAqLwotCQl1bnNpZ25lZCBsb25nIHggPSBqaWZmaWVzICsgZGV2LT5hZGFwLnRpbWVvdXQgKiBIWjsKKwkJdW5zaWduZWQgbG9uZyB4ID0gamlmZmllcyArIGRldi0+YWRhcC50aW1lb3V0OwogCiAJCXdoaWxlIChpbl84KCZpaWMtPnN0cykgJiBTVFNfUFQpewogCQkJaWYgKHVubGlrZWx5KHRpbWVfYWZ0ZXIoamlmZmllcywgeCkpKXsKQEAgLTc0OCw3ICs3NDgsNyBAQAogCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgZGV2KTsKIAlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiB8IEkyQ19DTEFTU19TUEQ7CiAJYWRhcC0+YWxnbyA9ICZpaWNfYWxnbzsKLQlhZGFwLT50aW1lb3V0ID0gMTsKKwlhZGFwLT50aW1lb3V0ID0gSFo7CiAKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CiAJaWYgKHJldCAgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwppbmRleCAzMTkwNjkwLi5hNzVjNzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCS8qCiAJICogRGVmYXVsdCB2YWx1ZXMuLi5zaG91bGQgdGhlc2UgY29tZSBpbiBmcm9tIGJvYXJkIGNvZGU/CiAJICovCi0JbmV3X2FkYXB0ZXItPnRpbWVvdXQgPSAxMDA7CQorCW5ld19hZGFwdGVyLT50aW1lb3V0ID0gSFo7CiAJbmV3X2FkYXB0ZXItPmFsZ28gPSAmaW9wM3h4X2kyY19hbGdvOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlcl9kYXRhLT53YWl0cSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwppbmRleCBhZWRiYmU2Li4yYjg0N2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCX0gZWxzZSB7CiAJCS8qIEludGVycnVwdCBtb2RlICovCiAJCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCi0JCQkoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSwgdGltZW91dCAqIEhaKTsKKwkJCShpMmMtPmludGVycnVwdCAmIENTUl9NSUYpLCB0aW1lb3V0KTsKIAogCQlpZiAodW5saWtlbHkocmVzdWx0IDwgMCkpIHsKIAkJCXByX2RlYnVnKCJJMkM6IHdhaXQgaW50ZXJydXB0ZWRcbiIpOwpAQCAtMzExLDcgKzMxMSw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSAiTVBDIGFkYXB0ZXIiLAogCS5hbGdvID0gJm1wY19hbGdvLAotCS50aW1lb3V0ID0gMSwKKwkudGltZW91dCA9IEhaLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZnNsX2kyY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCmluZGV4IDdmMTg2YmIuLjVhNDk0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAljaGFyCQlhYm9ydCA9IDA7CiAKIAl0aW1lX2xlZnQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkcnZfZGF0YS0+d2FpdHEsCi0JCSFkcnZfZGF0YS0+YmxvY2ssIG1zZWNzX3RvX2ppZmZpZXMoZHJ2X2RhdGEtPmFkYXB0ZXIudGltZW91dCkpOworCQkhZHJ2X2RhdGEtPmJsb2NrLCBkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmICghdGltZV9sZWZ0KSB7IC8qIFRpbWVkIG91dCAqLwpAQCAtMzc0LDggKzM3NCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CiAKIAkJdGltZV9sZWZ0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRydl9kYXRhLT53YWl0cSwKLQkJCSFkcnZfZGF0YS0+YmxvY2ssCi0JCQltc2Vjc190b19qaWZmaWVzKGRydl9kYXRhLT5hZGFwdGVyLnRpbWVvdXQpKTsKKwkJCSFkcnZfZGF0YS0+YmxvY2ssIGRydl9kYXRhLT5hZGFwdGVyLnRpbWVvdXQpOwogCiAJCWlmICgodGltZV9sZWZ0IDw9IDApICYmIGRydl9kYXRhLT5ibG9jaykgewogCQkJZHJ2X2RhdGEtPnN0YXRlID0gTVY2NFhYWF9JMkNfU1RBVEVfSURMRTsKQEAgLTUzMCw3ICs1MjksNyBAQAogCWRydl9kYXRhLT5hZGFwdGVyLmFsZ28gPSAmbXY2NHh4eF9pMmNfYWxnbzsKIAlkcnZfZGF0YS0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOwogCWRydl9kYXRhLT5hZGFwdGVyLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OIHwgSTJDX0NMQVNTX1NQRDsKLQlkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0ID0gcGRhdGEtPnRpbWVvdXQ7CisJZHJ2X2RhdGEtPmFkYXB0ZXIudGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMocGRhdGEtPnRpbWVvdXQpOwogCWRydl9kYXRhLT5hZGFwdGVyLm5yID0gcGQtPmlkOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkLCBkcnZfZGF0YSk7CiAJaTJjX3NldF9hZGFwZGF0YSgmZHJ2X2RhdGEtPmFkYXB0ZXIsIGRydl9kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKaW5kZXggMDVhZjZjZC4uMmZmNDY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTMxLDEwICszMSwxNCBAQAogICAgIG5Gb3JjZTMgMjUwR2IgTUNQCQkwMEU0CiAgICAgbkZvcmNlNCBNQ1AJCQkwMDUyCiAgICAgbkZvcmNlNCBNQ1AtMDQJCTAwMzQKLSAgICBuRm9yY2U0IE1DUDUxCQkwMjY0Ci0gICAgbkZvcmNlNCBNQ1A1NQkJMDM2OAorICAgIG5Gb3JjZSBNQ1A1MQkJMDI2NAorICAgIG5Gb3JjZSBNQ1A1NQkJMDM2OAogICAgIG5Gb3JjZSBNQ1A2MQkJMDNFQgogICAgIG5Gb3JjZSBNQ1A2NQkJMDQ0NgorICAgIG5Gb3JjZSBNQ1A2NwkJMDU0MgorICAgIG5Gb3JjZSBNQ1A3MwkJMDdEOAorICAgIG5Gb3JjZSBNQ1A3OFMJCTA3NTIKKyAgICBuRm9yY2UgTUNQNzkJCTBBQTIKIAogICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSAyIFNNQnVzZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIE1DUCBvZiB0aGUKICAgICBuRm9yY2UyLzMvNC81eHggY2hpcHNldHMuCkBAIC0zMTUsNiArMzE5LDEwIEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjVfU01CVVMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjdfU01CVVMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzNfU01CVVMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzhTX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDc5X1NNQlVTKSB9LAogCXsgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IGJlOGVlMmMuLmVjZTAxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC0xOTMsMjIgKzE5MywyNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19nZXRfY2xvY2tzKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKIHsKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKLQkJZGV2LT5pY2xrID0gY2xrX2dldChkZXYtPmRldiwgImkyY19pY2siKTsKLQkJaWYgKElTX0VSUihkZXYtPmljbGspKSB7Ci0JCQlkZXYtPmljbGsgPSBOVUxMOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwlpbnQgcmV0OworCisJZGV2LT5pY2xrID0gY2xrX2dldChkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIoZGV2LT5pY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRldi0+aWNsayk7CisJCWRldi0+aWNsayA9IE5VTEw7CisJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2LT5mY2xrID0gY2xrX2dldChkZXYtPmRldiwgImkyY19mY2siKTsKKwlkZXYtPmZjbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihkZXYtPmZjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2LT5mY2xrKTsKIAkJaWYgKGRldi0+aWNsayAhPSBOVUxMKSB7CiAJCQljbGtfcHV0KGRldi0+aWNsayk7CiAJCQlkZXYtPmljbGsgPSBOVUxMOwogCQl9CiAJCWRldi0+ZmNsayA9IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpAQCAtMjE4LDE4ICsyMjAsMTUgQEAKIHsKIAljbGtfcHV0KGRldi0+ZmNsayk7CiAJZGV2LT5mY2xrID0gTlVMTDsKLQlpZiAoZGV2LT5pY2xrICE9IE5VTEwpIHsKLQkJY2xrX3B1dChkZXYtPmljbGspOwotCQlkZXYtPmljbGsgPSBOVUxMOwotCX0KKwljbGtfcHV0KGRldi0+aWNsayk7CisJZGV2LT5pY2xrID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9pMmNfdW5pZGxlKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKIHsKIAlXQVJOX09OKCFkZXYtPmlkbGUpOwogCi0JaWYgKGRldi0+aWNsayAhPSBOVUxMKQotCQljbGtfZW5hYmxlKGRldi0+aWNsayk7CisJY2xrX2VuYWJsZShkZXYtPmljbGspOwogCWNsa19lbmFibGUoZGV2LT5mY2xrKTsKIAlkZXYtPmlkbGUgPSAwOwogCWlmIChkZXYtPmllc3RhdGUpCkBAIC0yNTQsOCArMjUzLDcgQEAKIAl9CiAJZGV2LT5pZGxlID0gMTsKIAljbGtfZGlzYWJsZShkZXYtPmZjbGspOwotCWlmIChkZXYtPmljbGsgIT0gTlVMTCkKLQkJY2xrX2Rpc2FibGUoZGV2LT5pY2xrKTsKKwljbGtfZGlzYWJsZShkZXYtPmljbGspOwogfQogCiBzdGF0aWMgaW50IG9tYXBfaTJjX2luaXQoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQpAQCAtMzEyLDE1ICszMTAsMTQgQEAKIAlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewotCQlzdHJ1Y3QgY2xrICphcm14b3JfY2s7CisJCS8qCisJCSAqIFRoZSBJMkMgZnVuY3Rpb25hbCBjbG9jayBpcyB0aGUgYXJteG9yX2NrLCBzbyB0aGVyZSdzCisJCSAqIG5vIG5lZWQgdG8gZ2V0ICJhcm14b3JfY2siIHNlcGFyYXRlbHkuICBOb3csIGlmIE9NQVAyNDIwCisJCSAqIGFsd2F5cyByZXR1cm5zIDEyTUh6IGZvciB0aGUgZnVuY3Rpb25hbCBjbG9jaywgd2UgY2FuCisJCSAqIGRvIHRoaXMgYml0IHVuY29uZGl0aW9uYWxseS4KKwkJICovCisJCWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShkZXYtPmZjbGspOwogCi0JCWFybXhvcl9jayA9IGNsa19nZXQoTlVMTCwgImFybXhvcl9jayIpOwotCQlpZiAoSVNfRVJSKGFybXhvcl9jaykpCi0JCQlkZXZfd2FybihkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgYXJteG9yX2NrXG4iKTsKLQkJZWxzZSB7Ci0JCQlmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoYXJteG9yX2NrKTsKLQkJCWNsa19wdXQoYXJteG9yX2NrKTsKLQkJfQogCQkvKiBUUk0gZm9yIDU5MTIgc2F5cyB0aGUgSTJDIGNsb2NrIG11c3QgYmUgcHJlc2NhbGVkIHRvIGJlCiAJCSAqIGJldHdlZW4gNyAtIDEyIE1Iei4gVGhlIFhPUiBpbnB1dCBjbG9jayBpcyB0eXBpY2FsbHkKIAkJICogMTIsIDEzIG9yIDE5LjIgTUh6LiBTbyB3ZSBzaG91bGQgaGF2ZSBjb2RlIHRoYXQgcHJvZHVjZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCmluZGV4IDRhYTgxMzguLjBlZDY4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpAQCAtNDEsMTUgKzQyLDE3IEBACiAKIC8qIERhdGEgc2hlZXQgcmVjb21tZW5kcyA1OWtIeiBmb3IgMTAwa0h6IG9wZXJhdGlvbiBkdWUgdG8gdmFyaWF0aW9uCiAgKiBpbiB0aGUgYWN0dWFsIGNsb2NrIHJhdGUgKi8KLXN0YXRpYyBpbnQgY2xvY2sgID0gSTJDX1BDQV9DT05fNTlrSHo7CitzdGF0aWMgaW50IGNsb2NrICA9IDU5MDAwOwogCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHBjYV9pc2Ffb3BzOwogc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IHBjYV93YWl0OwogCiBzdGF0aWMgdm9pZCBwY2FfaXNhX3dyaXRlYnl0ZSh2b2lkICpwZCwgaW50IHJlZywgaW50IHZhbCkKIHsKICNpZmRlZiBERUJVR19JTwogCXN0YXRpYyBjaGFyICpuYW1lc1tdID0geyAiVC9PIiwgIkRBVCIsICJBRFIiLCAiQ09OIiB9OwotCXByaW50aygiKioqIHdyaXRlICVzIGF0ICUjbHggPD0gJSMwNHhcbiIsIG5hbWVzW3JlZ10sIGJhc2UrcmVnLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICIqKiogd3JpdGUgJXMgYXQgJSNseCA8PSAlIzA0eFxuIiwgbmFtZXNbcmVnXSwKKwkgICAgICAgYmFzZStyZWcsIHZhbCk7CiAjZW5kaWYKIAlvdXRiKHZhbCwgYmFzZStyZWcpOwogfQpAQCAtNjAsNyArNjMsNyBAQAogI2lmZGVmIERFQlVHX0lPCiAJewogCQlzdGF0aWMgY2hhciAqbmFtZXNbXSA9IHsgIlNUQSIsICJEQVQiLCAiQURSIiwgIkNPTiIgfTsKLQkJcHJpbnRrKCIqKiogcmVhZCAgJXMgPT4gJSMwNHhcbiIsIG5hbWVzW3JlZ10sIHJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIqKiogcmVhZCAgJXMgPT4gJSMwNHhcbiIsIG5hbWVzW3JlZ10sIHJlcyk7CiAJfQogI2VuZGlmCiAJcmV0dXJuIHJlczsKQEAgLTY4LDE2ICs3MSwyMiBAQAogCiBzdGF0aWMgaW50IHBjYV9pc2Ffd2FpdGZvcmNvbXBsZXRpb24odm9pZCAqcGQpCiB7Ci0JaW50IHJldCA9IDA7CisJbG9uZyByZXQgPSB+MDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAlpZiAoaXJxID4gLTEpIHsKLQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBjYV93YWl0LAotCQkJCQkgICAgICAgcGNhX2lzYV9yZWFkYnl0ZShwZCwgSTJDX1BDQV9DT04pICYgSTJDX1BDQV9DT05fU0kpOworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwY2Ffd2FpdCwKKwkJCQlwY2FfaXNhX3JlYWRieXRlKHBkLCBJMkNfUENBX0NPTikKKwkJCQkmIEkyQ19QQ0FfQ09OX1NJLCBwY2FfaXNhX29wcy50aW1lb3V0KTsKIAl9IGVsc2UgewotCQl3aGlsZSAoKHBjYV9pc2FfcmVhZGJ5dGUocGQsIEkyQ19QQ0FfQ09OKSAmIEkyQ19QQ0FfQ09OX1NJKSA9PSAwKQorCQkvKiBEbyBwb2xsaW5nICovCisJCXRpbWVvdXQgPSBqaWZmaWVzICsgcGNhX2lzYV9vcHMudGltZW91dDsKKwkJd2hpbGUgKCgocGNhX2lzYV9yZWFkYnl0ZShwZCwgSTJDX1BDQV9DT04pCisJCQkJJiBJMkNfUENBX0NPTl9TSSkgPT0gMCkKKwkJCQkmJiAocmV0ID0gdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpKQogCQkJdWRlbGF5KDEwMCk7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHJldCA+IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBjYV9pc2FfcmVzZXRjaGlwKHZvaWQgKnBkKQpAQCAtMTAyLDggKzExMSw4IEBACiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHBjYV9pc2Ffb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5hbGdvX2RhdGEJPSAmcGNhX2lzYV9kYXRhLAotCS5uYW1lCQk9ICJQQ0E5NTY0IElTQSBBZGFwdGVyIiwKLQkudGltZW91dAk9IDEwMCwKKwkubmFtZQkJPSAiUENBOTU2NC9QQ0E5NjY1IElTQSBBZGFwdGVyIiwKKwkudGltZW91dAk9IEhaLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGNhX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKQEAgLTE5NSw3ICsyMDQsNyBAQAogfQogCiBNT0RVTEVfQVVUSE9SKCJJYW4gQ2FtcGJlbGwgPGljYW1wYmVsbEBhcmNvbS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIklTQSBiYXNlIFBDQTk1NjQgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklTQSBiYXNlIFBDQTk1NjQvUENBOTY2NSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGJhc2UsIHVsb25nLCAwKTsKQEAgLTIwNCw3ICsyMTMsMTMgQEAKIG1vZHVsZV9wYXJhbShpcnEsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSIpOwogbW9kdWxlX3BhcmFtKGNsb2NrLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhjbG9jaywgIkNsb2NrIHJhdGUgYXMgZGVzY3JpYmVkIGluIHRhYmxlIDEgb2YgUENBOTU2NCBkYXRhc2hlZXQiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xvY2ssICJDbG9jayByYXRlIGluIGhlcnR6LlxuXHRcdCIKKwkJIkZvciBQQ0E5NTY0OiAzMzAwMDAsMjg4MDAwLDIxNzAwMCwxNDYwMDAsIgorCQkiODgwMDAsNTkwMDAsNDQwMDAsMzYwMDBcbiIKKwkJIlx0XHRGb3IgUENBOTY2NTpcdFN0YW5kYXJkOiA2MDMwMCAtIDEwMDA5OVxuIgorCQkiXHRcdFx0XHRGYXN0OiAxMDAxMDAgLSA0MDAwOTlcbiIKKwkJIlx0XHRcdFx0RmFzdCs6IDQwMDEwMCAtIDEwMDAwMDk5XG4iCisJCSJcdFx0XHRcdFR1cmJvOiBVcCB0byAxMjY1ODAwIik7CiAKIG1vZHVsZV9pbml0KHBjYV9pc2FfaW5pdCk7CiBtb2R1bGVfZXhpdChwY2FfaXNhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtcGxhdGZvcm0uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLXBsYXRmb3JtLmMKaW5kZXggNmJiMTVhZC4uN2IyMzg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1wbGF0Zm9ybS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtODEsMjQgKzgyLDIzIEBACiBzdGF0aWMgaW50IGkyY19wY2FfcGZfd2FpdGZvcmNvbXBsZXRpb24odm9pZCAqcGQpCiB7CiAJc3RydWN0IGkyY19wY2FfcGZfZGF0YSAqaTJjID0gcGQ7Ci0JaW50IHJldCA9IDA7CisJbG9uZyByZXQgPSB+MDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAlpZiAoaTJjLT5pcnEpIHsKLQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGkyYy0+d2FpdCwKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaTJjLT53YWl0LAogCQkJaTJjLT5hbGdvX2RhdGEucmVhZF9ieXRlKGkyYywgSTJDX1BDQV9DT04pCi0JCQkmIEkyQ19QQ0FfQ09OX1NJKTsKKwkJCSYgSTJDX1BDQV9DT05fU0ksIGkyYy0+YWRhcC50aW1lb3V0KTsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBEbyBwb2xsaW5nLi4uCi0JCSAqIFhYWDogQ291bGQgZ2V0IHN0dWNrIGluIGV4dHJlbWUgY2FzZXMhCi0JCSAqICAgICAgTWF5YmUgYWRkIHRpbWVvdXQsIGJ1dCB1c2luZyBpcnFzIGlzIHByZWZlcnJlZCBhbnlob3cuCi0JCSAqLwotCQl3aGlsZSAoKGkyYy0+YWxnb19kYXRhLnJlYWRfYnl0ZShpMmMsIEkyQ19QQ0FfQ09OKQorCQkvKiBEbyBwb2xsaW5nICovCisJCXRpbWVvdXQgPSBqaWZmaWVzICsgaTJjLT5hZGFwLnRpbWVvdXQ7CisJCXdoaWxlICgoKGkyYy0+YWxnb19kYXRhLnJlYWRfYnl0ZShpMmMsIEkyQ19QQ0FfQ09OKQogCQkJCSYgSTJDX1BDQV9DT05fU0kpID09IDApCisJCQkJJiYgKHJldCA9IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSkKIAkJCXVkZWxheSgxMDApOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHJldCA+IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGkyY19wY2FfcGZfZHVtbXlyZXNldCh2b2lkICpwZCkKQEAgLTE3MiwxNCArMTcyLDI1IEBACiAKIAlpMmMtPmFkYXAubnIgPSBwZGV2LT5pZCA+PSAwID8gcGRldi0+aWQgOiAwOwogCWkyYy0+YWRhcC5vd25lciA9IFRISVNfTU9EVUxFOwotCXNucHJpbnRmKGkyYy0+YWRhcC5uYW1lLCBzaXplb2YoaTJjLT5hZGFwLm5hbWUpLCAiUENBOTU2NCBhdCAweCUwOGx4IiwKLQkJKHVuc2lnbmVkIGxvbmcpIHJlcy0+c3RhcnQpOworCXNucHJpbnRmKGkyYy0+YWRhcC5uYW1lLCBzaXplb2YoaTJjLT5hZGFwLm5hbWUpLAorCQkgIlBDQTk1NjQvUENBOTY2NSBhdCAweCUwOGx4IiwKKwkJICh1bnNpZ25lZCBsb25nKSByZXMtPnN0YXJ0KTsKIAlpMmMtPmFkYXAuYWxnb19kYXRhID0gJmkyYy0+YWxnb19kYXRhOwogCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQlpMmMtPmFkYXAudGltZW91dCA9IHBsYXRmb3JtX2RhdGEtPnRpbWVvdXQ7CiAKLQlpMmMtPmFsZ29fZGF0YS5pMmNfY2xvY2sgPSBwbGF0Zm9ybV9kYXRhLT5pMmNfY2xvY2tfc3BlZWQ7CisJaWYgKHBsYXRmb3JtX2RhdGEpIHsKKwkJaTJjLT5hZGFwLnRpbWVvdXQgPSBwbGF0Zm9ybV9kYXRhLT50aW1lb3V0OworCQlpMmMtPmFsZ29fZGF0YS5pMmNfY2xvY2sgPSBwbGF0Zm9ybV9kYXRhLT5pMmNfY2xvY2tfc3BlZWQ7CisJCWkyYy0+Z3BpbyA9IHBsYXRmb3JtX2RhdGEtPmdwaW87CisJfSBlbHNlIHsKKwkJaTJjLT5hZGFwLnRpbWVvdXQgPSBIWjsKKwkJaTJjLT5hbGdvX2RhdGEuaTJjX2Nsb2NrID0gNTkwMDA7CisJCWkyYy0+Z3BpbyA9IC0xOworCX0KKwogCWkyYy0+YWxnb19kYXRhLmRhdGEgPSBpMmM7CisJaTJjLT5hbGdvX2RhdGEud2FpdF9mb3JfY29tcGxldGlvbiA9IGkyY19wY2FfcGZfd2FpdGZvcmNvbXBsZXRpb247CisJaTJjLT5hbGdvX2RhdGEucmVzZXRfY2hpcCA9IGkyY19wY2FfcGZfZHVtbXlyZXNldDsKIAogCXN3aXRjaCAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNX1RZUEVfTUFTSykgewogCWNhc2UgSU9SRVNPVVJDRV9NRU1fMzJCSVQ6CkBAIC0xOTcsMTEgKzIwOCw2IEBACiAJCWJyZWFrOwogCX0KIAotCWkyYy0+YWxnb19kYXRhLndhaXRfZm9yX2NvbXBsZXRpb24gPSBpMmNfcGNhX3BmX3dhaXRmb3Jjb21wbGV0aW9uOwotCi0JaTJjLT5ncGlvID0gcGxhdGZvcm1fZGF0YS0+Z3BpbzsKLQlpMmMtPmFsZ29fZGF0YS5yZXNldF9jaGlwID0gaTJjX3BjYV9wZl9kdW1teXJlc2V0OwotCiAJLyogVXNlIGdwaW9faXNfdmFsaWQoKSB3aGVuIGluIG1haW5saW5lICovCiAJaWYgKGkyYy0+Z3BpbyA+IC0xKSB7CiAJCXJldCA9IGdwaW9fcmVxdWVzdChpMmMtPmdwaW8sIGkyYy0+YWRhcC5uYW1lKTsKQEAgLTI0Niw3ICsyNTIsNyBAQAogZV9hbGxvYzoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX2xlbihyZXMpKTsKIGVfcHJpbnQ6Ci0JcHJpbnRrKEtFUk5fRVJSICJSZWdpc3RlcmluZyBQQ0E5NTY0IEZBSUxFRCEgKCVkKVxuIiwgcmV0KTsKKwlwcmludGsoS0VSTl9FUlIgIlJlZ2lzdGVyaW5nIFBDQTk1NjQvUENBOTY2NSBGQUlMRUQhICglZClcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjkwLDcgKzI5Niw3IEBACiB9CiAKIE1PRFVMRV9BVVRIT1IoIldvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtUENBOTU2NCBwbGF0Zm9ybSBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDLVBDQTk1NjQvUENBOTY2NSBwbGF0Zm9ybSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoaTJjX3BjYV9wZl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA3NjFmOWRkLi4wMjQ5YTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC0yMCw3ICsyMCw3IEBACiAvKgogICAgU3VwcG9ydHM6CiAJSW50ZWwgUElJWDQsIDQ0ME1YCi0JU2VydmVyd29ya3MgT1NCNCwgQ1NCNSwgQ1NCNiwgSFQtMTAwMAorCVNlcnZlcndvcmtzIE9TQjQsIENTQjUsIENTQjYsIEhULTEwMDAsIEhULTExMDAKIAlBVEkgSVhQMjAwLCBJWFAzMDAsIElYUDQwMCwgU0I2MDAsIFNCNzAwLCBTQjgwMAogCVNNU0MgVmljdG9yeTY2CiAKQEAgLTIyNiw2ICsyMjYsNzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgcGlpeDRfc2V0dXBfc2I4MDAoc3RydWN0IHBjaV9kZXYgKlBJSVg0X2RldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdW5zaWduZWQgc2hvcnQgc21iYV9pZHggPSAweGNkNjsKKwl1OCBzbWJhX2VuX2xvLCBzbWJhX2VuX2hpLCBpMmNjZmcsIGkyY2NmZ19vZmZzZXQgPSAweDEwLCBzbWJfZW4gPSAweDJjOworCisJLyogU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KKwlpZiAoZm9yY2UgfHwgZm9yY2VfYWRkcikgeworCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNCODAwIFNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgorCQkJImZvcmNpbmcgYWRkcmVzcyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIFNNQnVzIGFyZWFzICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzbWJhX2lkeCwgMiwgInNtYmFfaWR4IikpIHsKKwkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyBiYXNlIGFkZHJlc3MgaW5kZXggcmVnaW9uICIKKwkJCSIweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwgc21iYV9pZHgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlvdXRiX3Aoc21iX2VuLCBzbWJhX2lkeCk7CisJc21iYV9lbl9sbyA9IGluYl9wKHNtYmFfaWR4ICsgMSk7CisJb3V0Yl9wKHNtYl9lbiArIDEsIHNtYmFfaWR4KTsKKwlzbWJhX2VuX2hpID0gaW5iX3Aoc21iYV9pZHggKyAxKTsKKwlyZWxlYXNlX3JlZ2lvbihzbWJhX2lkeCwgMik7CisKKwlpZiAoKHNtYmFfZW5fbG8gJiAxKSA9PSAwKSB7CisJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LAorCQkJIkhvc3QgU01CdXMgY29udHJvbGxlciBub3QgZW5hYmxlZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwaWl4NF9zbWJhID0gKChzbWJhX2VuX2hpIDw8IDgpIHwgc21iYV9lbl9sbykgJiAweGZmZTA7CisJaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkgeworCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKKwkJCXBpaXg0X3NtYmEpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFJlcXVlc3QgdGhlIFNNQnVzIEkyQyBidXMgY29uZmlnIHJlZ2lvbiAqLworCWlmICghcmVxdWVzdF9yZWdpb24ocGlpeDRfc21iYSArIGkyY2NmZ19vZmZzZXQsIDEsICJpMmNjZmciKSkgeworCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNNQnVzIEkyQyBidXMgY29uZmlnIHJlZ2lvbiAiCisJCQkiMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsIHBpaXg0X3NtYmEgKyBpMmNjZmdfb2Zmc2V0KTsKKwkJcmVsZWFzZV9yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFKTsKKwkJcGlpeDRfc21iYSA9IDA7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWkyY2NmZyA9IGluYl9wKHBpaXg0X3NtYmEgKyBpMmNjZmdfb2Zmc2V0KTsKKwlyZWxlYXNlX3JlZ2lvbihwaWl4NF9zbWJhICsgaTJjY2ZnX29mZnNldCwgMSk7CisKKwlpZiAoaTJjY2ZnICYgMSkKKwkJZGV2X2RiZygmUElJWDRfZGV2LT5kZXYsICJVc2luZyBJUlEgZm9yIFNNQnVzLlxuIik7CisJZWxzZQorCQlkZXZfZGJnKCZQSUlYNF9kZXYtPmRldiwgIlVzaW5nIFNNSSMgZm9yIFNNQnVzLlxuIik7CisKKwlkZXZfaW5mbygmUElJWDRfZGV2LT5kZXYsCisJCSAiU01CdXMgSG9zdCBDb250cm9sbGVyIGF0IDB4JXgsIHJldmlzaW9uICVkXG4iLAorCQkgcGlpeDRfc21iYSwgaTJjY2ZnID4+IDQpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGlpeDRfdHJhbnNhY3Rpb24odm9pZCkKIHsKIAlpbnQgdGVtcDsKQEAgLTQyMyw2ICs0ODcsOCBAQAogCQkgICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMFNCKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAorCQkgICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMTAwTEQpIH0sCiAJeyAwLCB9CiB9OwogCkBAIC00MzMsNyArNDk5LDE0IEBACiB7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IHBpaXg0X3NldHVwKGRldiwgaWQpOworCWlmICgoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkpICYmCisJICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUykgJiYKKwkgICAgKGRldi0+cmV2aXNpb24gPj0gMHg0MCkpCisJCS8qIGJhc2UgYWRkcmVzcyBsb2NhdGlvbiBldGMgY2hhbmdlZCBpbiBTQjgwMCAqLworCQlyZXR2YWwgPSBwaWl4NF9zZXR1cF9zYjgwMChkZXYsIGlkKTsKKwllbHNlCisJCXJldHZhbCA9IHBpaXg0X3NldHVwKGRldiwgaWQpOworCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCmluZGV4IDYwY2E5MTcuLjNjOWQ3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKQEAgLTE5MSw3ICsxOTEsOCBAQAogCWkyY19zZXRfYWRhcGRhdGEoYWRhcHRlciwgTlVMTCk7CiAJLyogV2UgYXJlbid0IHRoYXQgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIHRoaXMuLi4gKi8KIAlpZiAocmMpCi0JCXByaW50aygiaTJjLXBvd2VybWFjLmM6IEZhaWxlZCB0byByZW1vdmUgYnVzICVzICFcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJpMmMtcG93ZXJtYWMuYzogRmFpbGVkIHRvIHJlbW92ZSBidXMgJXMgIVxuIiwKIAkJICAgICAgIGFkYXB0ZXItPm5hbWUpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwppbmRleCBiZGIxZjc1MS4uYzE0MDVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC0yMTAsMTEgKzIxMCwxMiBAQAogc3RhdGljIHZvaWQgaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoc3RydWN0IHB4YV9pMmMgKmkyYywgY29uc3QgY2hhciAqd2h5KQogewogCXVuc2lnbmVkIGludCBpOwotCXByaW50aygiaTJjOiBlcnJvcjogJXNcbiIsIHdoeSk7Ci0JcHJpbnRrKCJpMmM6IG1zZ19udW06ICVkIG1zZ19pZHg6ICVkIG1zZ19wdHI6ICVkXG4iLAorCXByaW50ayhLRVJOX0VSUiAiaTJjOiBlcnJvcjogJXNcbiIsIHdoeSk7CisJcHJpbnRrKEtFUk5fRVJSICJpMmM6IG1zZ19udW06ICVkIG1zZ19pZHg6ICVkIG1zZ19wdHI6ICVkXG4iLAogCQlpMmMtPm1zZ19udW0sIGkyYy0+bXNnX2lkeCwgaTJjLT5tc2dfcHRyKTsKLQlwcmludGsoImkyYzogSUNSOiAlMDh4IElTUjogJTA4eFxuIgotCSAgICAgICAiaTJjOiBsb2c6ICIsIHJlYWRsKF9JQ1IoaTJjKSksIHJlYWRsKF9JU1IoaTJjKSkpOworCXByaW50ayhLRVJOX0VSUiAiaTJjOiBJQ1I6ICUwOHggSVNSOiAlMDh4XG4iLAorCSAgICAgICByZWFkbChfSUNSKGkyYykpLCByZWFkbChfSVNSKGkyYykpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjOiBsb2c6ICIpOwogCWZvciAoaSA9IDA7IGkgPCBpMmMtPmlycWxvZ2lkeDsgaSsrKQogCQlwcmludGsoIlslMDh4OiUwOHhdICIsIGkyYy0+aXNybG9nW2ldLCBpMmMtPmljcmxvZ1tpXSk7CiAJcHJpbnRrKCJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12ZXJzYXRpbGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmVyc2F0aWxlLmMKaW5kZXggNDY3OGJhYi4uZmVkZTYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12ZXJzYXRpbGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZlcnNhdGlsZS5jCkBAIC0xMDIsNyArMTAyLDEzIEBACiAJaTJjLT5hbGdvID0gaTJjX3ZlcnNhdGlsZV9hbGdvOwogCWkyYy0+YWxnby5kYXRhID0gaTJjOwogCi0JcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZpMmMtPmFkYXApOworCWlmIChkZXYtPmlkID49IDApIHsKKwkJLyogc3RhdGljIGJ1cyBudW1iZXJpbmcgKi8KKwkJaTJjLT5hZGFwLm5yID0gZGV2LT5pZDsKKwkJcmV0ID0gaTJjX2JpdF9hZGRfbnVtYmVyZWRfYnVzKCZpMmMtPmFkYXApOworCX0gZWxzZQorCQkvKiBkeW5hbWljIGJ1cyBudW1iZXJpbmcgKi8KKwkJcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZpMmMtPmFkYXApOwogCWlmIChyZXQgPj0gMCkgewogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CiAJCXJldHVybiAwOwpAQCAtMTQ2LDcgKzE1Miw3IEBACiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmkyY192ZXJzYXRpbGVfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoaTJjX3ZlcnNhdGlsZV9pbml0KTsKK3N1YnN5c19pbml0Y2FsbChpMmNfdmVyc2F0aWxlX2luaXQpOwogbW9kdWxlX2V4aXQoaTJjX3ZlcnNhdGlsZV9leGl0KTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gVmVyc2F0aWxlIEkyQyBidXMgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCBlN2Q5ODQ4Li5iNmYzYTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQlkcml2ZXItPnNodXRkb3duKHRvX2kyY19jbGllbnQoZGV2KSk7CiB9CiAKLXN0YXRpYyBpbnQgaTJjX2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQorc3RhdGljIGludCBpMmNfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyOwogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlyZXR1cm4gZHJpdmVyLT5zdXNwZW5kKHRvX2kyY19jbGllbnQoZGV2KSwgbWVzZyk7CiB9CiAKLXN0YXRpYyBpbnQgaTJjX2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXI7CiAKQEAgLTE4NywxMyArMTg3LDE1IEBACiAJa2ZyZWUodG9faTJjX2NsaWVudChkZXYpKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19jbGllbnRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorc2hvd19jbGllbnRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2xpZW50LT5uYW1lKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19tb2RhbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorc2hvd19tb2RhbGlhcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlcyVzXG4iLCBJMkNfTU9EVUxFX1BSRUZJWCwgY2xpZW50LT5uYW1lKTsKQEAgLTM2NSw4ICszNjcsNyBAQAogICogVGhpcyByZXR1cm5zIHRoZSBuZXcgaTJjIGNsaWVudCwgd2hpY2ggc2hvdWxkIGJlIHNhdmVkIGZvciBsYXRlciB1c2Ugd2l0aAogICogaTJjX3VucmVnaXN0ZXJfZGV2aWNlKCk7IG9yIE5VTEwgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCiAgKi8KLXN0cnVjdCBpMmNfY2xpZW50ICoKLWkyY19uZXdfZHVtbXkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1MTYgYWRkcmVzcykKK3N0cnVjdCBpMmNfY2xpZW50ICppMmNfbmV3X2R1bW15KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTE2IGFkZHJlc3MpCiB7CiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7CiAJCUkyQ19CT0FSRF9JTkZPKCJkdW1teSIsIGFkZHJlc3MpLApAQCAtNDEzLDggKzQxNCw4IEBACiAJCWlmIChkZXZpbmZvLT5idXNudW0gPT0gYWRhcHRlci0+bnIKIAkJCQkmJiAhaTJjX25ld19kZXZpY2UoYWRhcHRlciwKIAkJCQkJCSZkZXZpbmZvLT5ib2FyZF9pbmZvKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiaTJjLWNvcmU6IGNhbid0IGNyZWF0ZSBpMmMlZC0lMDR4XG4iLAotCQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLAorCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LAorCQkJCSJDYW4ndCBjcmVhdGUgZGV2aWNlIGF0IDB4JTAyeFxuIiwKIAkJCQlkZXZpbmZvLT5ib2FyZF9pbmZvLmFkZHIpOwogCX0KIAltdXRleF91bmxvY2soJl9faTJjX2JvYXJkX2xvY2spOwpAQCAtNDU5LDYgKzQ2MCwxMSBAQAogCQlwcl9kZWJ1ZygiSTJDIGFkYXB0ZXIgZHJpdmVyIFslc10gZm9yZ290IHRvIHNwZWNpZnkgIgogCQkJICJwaHlzaWNhbCBkZXZpY2VcbiIsIGFkYXAtPm5hbWUpOwogCX0KKworCS8qIFNldCBkZWZhdWx0IHRpbWVvdXQgdG8gMSBzZWNvbmQgaWYgbm90IGFscmVhZHkgc2V0ICovCisJaWYgKGFkYXAtPnRpbWVvdXQgPT0gMCkKKwkJYWRhcC0+dGltZW91dCA9IEhaOworCiAJZGV2X3NldF9uYW1lKCZhZGFwLT5kZXYsICJpMmMtJWQiLCBhZGFwLT5ucik7CiAJYWRhcC0+ZGV2LnJlbGVhc2UgPSAmaTJjX2FkYXB0ZXJfZGV2X3JlbGVhc2U7CiAJYWRhcC0+ZGV2LmNsYXNzID0gJmkyY19hZGFwdGVyX2NsYXNzOwpAQCAtNTgxLDcgKzU4Nyw4IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgKl9uOwogCWludCByZXM7CiAKLQkvKiBSZW1vdmUgdGhlIGRldmljZXMgd2UgY3JlYXRlZCBvdXJzZWx2ZXMgKi8KKwkvKiBSZW1vdmUgdGhlIGRldmljZXMgd2UgY3JlYXRlZCBvdXJzZWx2ZXMgYXMgdGhlIHJlc3VsdCBvZiBoYXJkd2FyZQorCSAqIHByb2JpbmcgKHVzaW5nIGEgZHJpdmVyJ3MgZGV0ZWN0IG1ldGhvZCkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xpZW50LCBfbiwgJmRyaXZlci0+Y2xpZW50cywgZGV0ZWN0ZWQpIHsKIAkJaWYgKGNsaWVudC0+YWRhcHRlciA9PSBhZGFwdGVyKSB7CiAJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJSZW1vdmluZyAlcyBhdCAweCV4XG4iLApAQCAtNzQ5LDYgKzc1Niw4IEBACiAJc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlciA9IGRhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgKl9uOwogCisJLyogUmVtb3ZlIHRoZSBkZXZpY2VzIHdlIGNyZWF0ZWQgb3Vyc2VsdmVzIGFzIHRoZSByZXN1bHQgb2YgaGFyZHdhcmUKKwkgKiBwcm9iaW5nICh1c2luZyBhIGRyaXZlcidzIGRldGVjdCBtZXRob2QpICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsaWVudCwgX24sICZkcml2ZXItPmNsaWVudHMsIGRldGVjdGVkKSB7CiAJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIlJlbW92aW5nICVzIGF0IDB4JXhcbiIsCiAJCQljbGllbnQtPm5hbWUsIGNsaWVudC0+YWRkcik7CkBAIC04NDEsNyArODUwLDcgQEAKIAogCWlmIChjbGllbnQtPmRyaXZlciAmJiAhaXNfbmV3c3R5bGVfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKSkgewogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9yZWxlYXNlOwotCQljbGllbnQtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmY2xpZW50LT5kZXYsIDEpOwogCX0gZWxzZQogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9kZXZfcmVsZWFzZTsKIApAQCAtMTAxMiw3ICsxMDIxLDcgQEAKICAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IGVhY2ggbWVzc2FnZSBiZSBzZW50IHRvCiAgKiB0aGUgc2FtZSBzbGF2ZSBhZGRyZXNzLCBhbHRob3VnaCB0aGF0IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlbC4KICAqLwotaW50IGkyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK2ludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKIAlpbnQgcmV0OwogCkBAIC0xNTE5LDggKzE1MjgsNyBAQAogLyogVGhlIFNNQnVzIHBhcnRzICovCiAKICNkZWZpbmUgUE9MWSAgICAoMHgxMDcwVSA8PCAzKQotc3RhdGljIHU4Ci1jcmM4KHUxNiBkYXRhKQorc3RhdGljIHU4IGNyYzgodTE2IGRhdGEpCiB7CiAJaW50IGk7CiAKQEAgLTE5ODQsOSArMTk5Miw5IEBACiAgKiBUaGlzIGV4ZWN1dGVzIGFuIFNNQnVzIHByb3RvY29sIG9wZXJhdGlvbiwgYW5kIHJldHVybnMgYSBuZWdhdGl2ZQogICogZXJybm8gY29kZSBlbHNlIHplcm8gb24gc3VjY2Vzcy4KICAqLwotczMyIGkyY19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqIGFkYXB0ZXIsIHUxNiBhZGRyLCB1bnNpZ25lZCBzaG9ydCBmbGFncywKK3MzMiBpMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLCB1bnNpZ25lZCBzaG9ydCBmbGFncywKIAkJICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKQorCQkgICB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKIHsKIAlzMzIgcmVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCA1ZWEzYmZhLi42NDBjOTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTU2LDggKzU2LDEyIEBACiAKIGNvbW1lbnQgIlBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMiCiAKK2NvbmZpZyBJREVfWEZFUl9NT0RFCisJYm9vbAorCiBjb25maWcgSURFX1RJTUlOR1MKIAlib29sCisJc2VsZWN0IElERV9YRkVSX01PREUKIAogY29uZmlnIElERV9BVEFQSQogCWJvb2wKQEAgLTY5OCw2ICs3MDIsNyBAQAogY29uZmlnIEJMS19ERVZfSURFX0FVMVhYWAogICAgICAgIGJvb2wgIklERSBmb3IgQU1EIEFsY2hlbXkgQXUxMjAwIgogICAgICAgIGRlcGVuZHMgb24gU09DX0FVMTIwMAorICAgICAgIHNlbGVjdCBJREVfWEZFUl9NT0RFCiBjaG9pY2UKICAgICAgICBwcm9tcHQgIklERSBNb2RlIGZvciBBTUQgQWxjaGVteSBBdTEyMDAiCiAgICAgICAgZGVmYXVsdCBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1BJT19EQkRNQQpAQCAtODcxLDYgKzg3Niw3IEBACiAKIGNvbmZpZyBCTEtfREVWX0RUQzIyNzgKIAl0cmlzdGF0ZSAiRFRDLTIyNzggc3VwcG9ydCIKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAiZHRjMjI3OC5wcm9iZSIga2VybmVsCkBAIC05MDIsNiArOTA4LDcgQEAKIAogY29uZmlnIEJMS19ERVZfVU1DODY3MgogCXRyaXN0YXRlICJVTUMtODY3MiBzdXBwb3J0IgorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAJc2VsZWN0IElERV9MRUdBQ1kKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgdXNpbmcgdGhlICJ1bWM4NjcyLnByb2JlIiBrZXJuZWwKQEAgLTkxNSw1ICs5MjIsNiBAQAogY29uZmlnIEJMS19ERVZfSURFRE1BCiAJZGVmX2Jvb2wgQkxLX0RFVl9JREVETUFfU0ZGIHx8IFwKIAkJIEJMS19ERVZfSURFRE1BX0lDUyB8fCBCTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCiBlbmRpZiAjIElERQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQppbmRleCAxYzMyNmQ5Li45YjRiYmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQpAQCAtNSw5ICs1LDExIEBACiBFWFRSQV9DRkxBR1MJCQkJKz0gLUlkcml2ZXJzL2lkZQogCiBpZGUtY29yZS15ICs9IGlkZS5vIGlkZS1pb2N0bHMubyBpZGUtaW8ubyBpZGUtaW9wcy5vIGlkZS1saWIubyBpZGUtcHJvYmUubyBcCi0JICAgICAgaWRlLXRhc2tmaWxlLm8gaWRlLXBtLm8gaWRlLXBhcmsubyBpZGUtcGlvLWJsYWNrbGlzdC5vIGlkZS1zeXNmcy5vCisJICAgICAgaWRlLXRhc2tmaWxlLm8gaWRlLXBtLm8gaWRlLXBhcmsubyBpZGUtc3lzZnMubyBpZGUtZGV2c2V0cy5vIFwKKwkgICAgICBpZGUtaW8tc3RkLm8gaWRlLWVoLm8KIAogIyBjb3JlIElERSBjb2RlCitpZGUtY29yZS0kKENPTkZJR19JREVfWEZFUl9NT0RFKQkrPSBpZGUtcGlvLWJsYWNrbGlzdC5vIGlkZS14ZmVyLW1vZGUubwogaWRlLWNvcmUtJChDT05GSUdfSURFX1RJTUlOR1MpCQkrPSBpZGUtdGltaW5ncy5vCiBpZGUtY29yZS0kKENPTkZJR19JREVfQVRBUEkpCQkrPSBpZGUtYXRhcGkubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVQQ0kpCSs9IHNldHVwLXBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKaW5kZXggNDQ4NWI5Yy4uODc4ZjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2FlYzYyeHguYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJZHJpdmUtPmh3aWYtPnBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIHBpbyArIFhGRVJfUElPXzApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJLyogVGhlc2UgYXJlIG5lY2Vzc2FyeSB0byBnZXQgQUVDNjI4MCBNYWNpbnRvc2ggY2FyZHMgdG8gd29yayAqLwogCWlmICgoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjUpIHx8CkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YSwgcmVnNGFoIHwgMHg4MCk7CiAJfQogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggYXRwODZ4X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKaW5kZXggNjZmNDMwOC4uZDM1MTNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCkBAIC0yMTIsNyArMjEyLDcgQEAKICAqCWFwcHJvcHJpYXRlIGFsc28gc2V0cyB1cCB0aGUgMTUzMyBzb3V0aGJyaWRnZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hbGkxNXgzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hbGkxNXgzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCB0bXBieXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCmluZGV4IDc3MjY3YzguLjYyOGNkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYworKysgYi9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICogVGhlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLiAgSW5pdGlhbGl6ZSBkcml2ZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYW1kNzR4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYW1kNzR4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHQgPSAwLCBvZmZzZXQgPSBhbWRfb2Zmc2V0KGRldik7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl0IHw9IDB4ZjA7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgQU1EX0lERV9DT05GSUcgKyBvZmZzZXQsIHQpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggYW1kX2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpAQCAtMTgzLDE0ICsxODMsNiBAQAogCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfYW1kNzR4eChpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0KLQlpZiAoaHdpZi0+aXJxID09IDApIC8qIDAgaXMgYm9ndXMgYnV0IHdpbGwgZG8gZm9yIG5vdyAqLwotCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgaHdpZi0+Y2hhbm5lbCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGFtZF9wb3J0X29wcyA9IHsKIAkuc2V0X3Bpb19tb2RlCQk9IGFtZF9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBhbWRfc2V0X2RyaXZlLApAQCAtMjA3LDcgKzE5OSw2IEBACiAJewkJCQkJCQkJXAogCQkubmFtZQkJPSBEUlZfTkFNRSwJCQkJXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FtZDc0eHgsCQkJXAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FtZDc0eHgsCQkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MCwweDAyLDB4MDJ9LCB7MHg0MCwweDAxLDB4MDF9fSwJXAogCQkucG9ydF9vcHMJPSAmYW1kX3BvcnRfb3BzLAkJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0FNRCwJCQlcCkBAIC0yMjEsNyArMjEyLDYgQEAKIAl7CQkJCQkJCQlcCiAJCS5uYW1lCQk9IERSVl9OQU1FLAkJCQlcCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYW1kNzR4eCwJCQlcCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfYW1kNzR4eCwJCQlcCiAJCS5lbmFibGViaXRzCT0ge3sweDUwLDB4MDIsMHgwMn0sIHsweDUwLDB4MDEsMHgwMX19LAlcCiAJCS5wb3J0X29wcwk9ICZhbWRfcG9ydF9vcHMsCQkJXAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfQU1ELAkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggZWNkMWU2Mi4uOTIzY2JmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE0Miw3ICsxNDIsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4NDgsMHgwOCwweDAwfX0sCiAJCS5wb3J0X29wcwk9ICZhdGlpeHBfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMTUxLDcgKzE1MCw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg0OCwweDAxLDB4MDB9LCB7MHgwMCwweDAwLDB4MDB9fSwKIAkJLnBvcnRfb3BzCT0gJmF0aWl4cF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFIHwgSURFX0hGTEFHX0xFR0FDWV9JUlFTLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggNzlhMmRmZS4uMTU0ZWMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtNTM2LDkgKzUzNiw4IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgYXVfaWRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXVfaWRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwpAQCAtNTUyLDIzICs1NTEsMjMgQEAKICNlbmRpZgogCiAJbWVtc2V0KCZhdWlkZV9od2lmLCAwLCBzaXplb2YoX2F1aWRlX2h3aWYpKTsKLQlhaHdpZi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlhaHdpZi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIiVzICVkOiBubyBiYXNlIGFkZHJlc3NcbiIsIERSVl9OQU1FLCBwZGV2LT5pZCk7CisJCXByX2RlYnVnKCIlcyAlZDogbm8gYmFzZSBhZGRyZXNzXG4iLCBEUlZfTkFNRSwgZGV2LT5pZCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoYWh3aWYtPmlycSA8IDApIHsKLQkJcHJfZGVidWcoIiVzICVkOiBubyBJUlFcbiIsIERSVl9OQU1FLCBwZGV2LT5pZCk7CisJCXByX2RlYnVnKCIlcyAlZDogbm8gSVJRXG4iLCBEUlZfTkFNRSwgZGV2LT5pZCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJcGRldi0+bmFtZSkpIHsKKwkJCQlkZXYtPm5hbWUpKSB7CiAJCXByX2RlYnVnKCIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgRFJWX05BTUUpOwogCQlyZXQgPSAgLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTU4Myw3ICs1ODIsNyBAQAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCWF1aWRlX3NldHVwX3BvcnRzKCZodywgYWh3aWYpOwogCWh3LmlycSA9IGFod2lmLT5pcnE7Ci0JaHcuZGV2ID0gZGV2OworCWh3LmRldiA9ICZkZXYtPmRldjsKIAlody5jaGlwc2V0ID0gaWRlX2F1MXh4eDsKIAogCXJldCA9IGlkZV9ob3N0X2FkZCgmYXUxeHh4X3BvcnRfaW5mbywgaHdzLCAmaG9zdCk7CkBAIC01OTIsNyArNTkxLDcgQEAKIAogCWF1aWRlX2h3aWYuaHdpZiA9IGhvc3QtPnBvcnRzWzBdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAogCXByaW50ayhLRVJOX0lORk8gIkF1MXh4eCBJREUoYnVpbHRpbikgY29uZmlndXJlZCBmb3IgJXNcbiIsIG1vZGUgKTsKIApAQCAtNjAwLDM4ICs1OTksMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1X2lkZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdV9pZGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAogCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIAogCWlvdW5tYXAoKHZvaWQgKilhaHdpZi0+cmVnYmFzZSk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF1MTIwMF9pZGVfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMF9pZGVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlIAkJPSBhdV9pZGVfcHJvYmUsCiAJLnJlbW92ZQkJPSBhdV9pZGVfcmVtb3ZlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXVfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXVfaWRlX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKaW5kZXggMmY5Njg4ZC4uYWVlZTAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY21kNjR4LmMKKysrIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2NtZDY0eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IG1yZG1vZGUgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MjAuYyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCmluZGV4IGQwMDNiZWMuLjU4ZmI5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCkBAIC0xMzMsNyArMTMzLDggQEAKIAkgKglkbyBhbGwgdGhlIGRldmljZSBzZXR1cCBmb3IgdXMKIAkgKi8KIAotCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAxNCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlod1swXS5pcnEgPSAxNDsKIAogCXJldHVybiBpZGVfaG9zdF9hZGQoZCwgaHdzLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvY3M1NTMwLmMKaW5kZXggZDhlZGU4NS4uOGU4YjM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3M1NTMwLmMKKysrIGIvZHJpdmVycy9pZGUvY3M1NTMwLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogICoJSW5pdGlhbGl6ZSB0aGUgY3M1NTMwIGJyaWRnZSBmb3IgcmVsaWFibGUgSURFIERNQSBvcGVyYXRpb24uCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfY3M1NTMwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9jczU1MzAoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqbWFzdGVyXzAgPSBOVUxMLCAqY3M1NTMwXzAgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCmluZGV4IDhmMWIyZDkuLmJhY2IxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCisrKyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCkBAIC00Niw3ICs0Niw3IEBACiAJLnF1aXJrcHJvYwkJPSBpZGVfdW5kZWNvZGVkX3NsYXZlLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKaW5kZXggM2ViOWI1Yy4uZDNiM2U4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaHB0MzY2LmMKKysrIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKQEAgLTk5NSw3ICs5OTUsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciArIDEsIG5ld19tY3IpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2hwdDM2NihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZQk9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwogCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbygmZGV2LT5kZXYpOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTApOwogCWhwdDN4eF9kaXNhYmxlX2Zhc3RfaXJxKGRldiwgMHg1NCk7CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBocHQzeHhfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCBlYzdkMDdmLi41YjcwNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTIwLDkgKzIwLDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKICNkZWZpbmUgUkVHU19QRVJfR1RGCQk3Ci1zdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgewotCXU4CXRmYVtSRUdTX1BFUl9HVEZdOwkvKiByZWdzLiAweDFmMSAtIDB4MWY3ICovCi19OwogCiBzdHJ1Y3QgR1RNX2J1ZmZlciB7CiAJdTMyCVBJT19zcGVlZDA7CkBAIC04OSwxMiArODYsOCBAQAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIAotc3RhdGljIGludCBpZGVfYWNwaV9ibGFja2xpc3Qodm9pZCkKK2ludCBpZGVfYWNwaV9pbml0KHZvaWQpCiB7Ci0Jc3RhdGljIGludCBkb25lOwotCWlmIChkb25lKQotCQlyZXR1cm4gMDsKLQlkb25lID0gMTsKIAlkbWlfY2hlY2tfc3lzdGVtKGlkZV9hY3BpX2RtaV90YWJsZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDIsNDAgKzE5NSw2IEBACiB9CiAKIC8qKgotICogaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZSAtIEdldCBBQ1BJIG9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZHJpdmUKLSAqIEBkcml2ZTogZGV2aWNlIHRvIGxvY2F0ZQotICoKLSAqIFJldHJpZXZlcyB0aGUgb2JqZWN0IGhhbmRsZSBvZiBhIGdpdmVuIGRyaXZlLiBBY2NvcmRpbmcgdG8gdGhlIEFDUEkKLSAqIHNwZWMgdGhlIGRyaXZlIGlzIGEgY2hpbGQgb2YgdGhlIGh3aWYuCi0gKgotICogUmV0dXJucyBoYW5kbGUgb24gc3VjY2VzcywgMCBvbiBlcnJvci4KLSAqLwotc3RhdGljIGFjcGlfaGFuZGxlIGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QJKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpbnQJCSBwb3J0OwotCWFjcGlfaGFuZGxlCSBkcml2ZV9oYW5kbGU7Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUpCi0JCXJldHVybiBOVUxMOwotCi0JcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyBkcml2ZS0+ZG4gLSAyOiBkcml2ZS0+ZG47Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzIGF0IGNoYW5uZWwjOiAlZCBwb3J0IzogJWRcbiIsCi0JCSBkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7Ci0KLQotCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCi0JZHJpdmVfaGFuZGxlID0gYWNwaV9nZXRfY2hpbGQoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIHBvcnQpOwotCURFQlBSSU5UKCJkcml2ZSAlcyBoYW5kbGUgMHglcFxuIiwgZHJpdmUtPm5hbWUsIGRyaXZlX2hhbmRsZSk7Ci0KLQlyZXR1cm4gZHJpdmVfaGFuZGxlOwotfQotCi0vKioKICAqIGRvX2RyaXZlX2dldF9HVEYgLSBnZXQgdGhlIGRyaXZlIGJvb3R1cCBkZWZhdWx0IHRhc2tmaWxlIHNldHRpbmdzCiAgKiBAZHJpdmU6IHRoZSBkcml2ZSBmb3Igd2hpY2ggdGhlIHRhc2tmaWxlIHNldHRpbmdzIHNob3VsZCBiZSByZXRyaWV2ZWQKICAqIEBndGZfbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiBkYXRhIHJldHVybmVkIGF0IEBndGZfYWRkcmVzcwpAQCAtMjU3LDQ3ICsyMTYsMTUgQEAKIAlhY3BpX3N0YXR1cwkJCXN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIJCW91dHB1dDsKIAl1bmlvbiBhY3BpX29iamVjdCAJCSpvdXRfb2JqOwotCWlkZV9od2lmX3QJCQkqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBkZXZpY2UJCQkqZGV2ID0gaHdpZi0+Z2VuZGV2LnBhcmVudDsKIAlpbnQJCQkJZXJyID0gLUVOT0RFVjsKLQlpbnQJCQkJcG9ydDsKIAogCSpndGZfbGVuZ3RoID0gMDsKIAkqZ3RmX2FkZHJlc3MgPSAwVUw7CiAJKm9ial9sb2MgPSAwVUw7CiAKLQlpZiAoaWRlX25vYWNwaSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWRldikgewotCQlERUJQUklOVCgibm8gUENJIGRldmljZSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhKSB7Ci0JCURFQlBSSU5UKCJubyBBQ1BJIGRhdGEgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyBkcml2ZS0+ZG4gLSAyOiBkcml2ZS0+ZG47Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzIGF0ICVzLCBwb3J0IzogJWQsIGhhcmRfcG9ydCM6ICVkXG4iLAotCQkgaHdpZi0+bmFtZSwgZGV2X25hbWUoZGV2KSwgcG9ydCwgaHdpZi0+Y2hhbm5lbCk7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkgewotCQlERUJQUklOVCgiJXMgZHJpdmUgJWQ6JWQgbm90IHByZXNlbnRcbiIsCi0JCQkgaHdpZi0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCB0aGlzIGRyaXZlJ3MgX0FEUiBpbmZvLiBpZiBub3QgYWxyZWFkeSBrbm93bi4gKi8KIAlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkgewotCQlkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgPSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGRyaXZlKTsKLQkJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpIHsKLQkJCURFQlBSSU5UKCJObyBBQ1BJIG9iamVjdCBmb3VuZCBmb3IgJXNcbiIsCi0JCQkJIGRyaXZlLT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCURFQlBSSU5UKCJObyBBQ1BJIG9iamVjdCBmb3VuZCBmb3IgJXNcbiIsIGRyaXZlLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogU2V0dGluZyB1cCBvdXRwdXQgYnVmZmVyICovCkBAIC0zNTUsNDMgKzI4Miw2IEBACiB9CiAKIC8qKgotICogdGFza2ZpbGVfbG9hZF9yYXcgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBkcml2ZQotICogQGRyaXZlOiBkcml2ZSB0byB3aGljaCBvdXRwdXQgaXMgc2VudAotICogQGd0ZjogcmF3IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgKDB4MWYxIC0gMHgxZjcpCi0gKgotICogT3V0cHV0cyBJREUgdGFza2ZpbGUgdG8gdGhlIGRyaXZlLgotICovCi1zdGF0aWMgaW50IHRhc2tmaWxlX2xvYWRfcmF3KGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0YXNrZmlsZV9hcnJheSAqZ3RmKQotewotCWlkZV90YXNrX3QgYXJnczsKLQlpbnQgZXJyID0gMDsKLQotCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogaGV4OiAiCi0JICAgICAgICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCSAgICAgICBndGYtPnRmYVswXSwgZ3RmLT50ZmFbMV0sIGd0Zi0+dGZhWzJdLAotCSAgICAgICBndGYtPnRmYVszXSwgZ3RmLT50ZmFbNF0sIGd0Zi0+dGZhWzVdLCBndGYtPnRmYVs2XSk7Ci0KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0KLQkvKiBjb252ZXJ0IGd0ZiB0byBJREUgVGFza2ZpbGUgKi8KLQltZW1jcHkoJmFyZ3MudGZfYXJyYXlbN10sICZndGYtPnRmYSwgNyk7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0KLQlpZiAoIWlkZV9hY3BpZ3RmKSB7Ci0JCURFQlBSSU5UKCJfR1RGIGV4ZWN1dGlvbiBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZGVfbm9fZGF0YV90YXNrZmlsZSBmYWlsZWQ6ICV1XG4iLAotCQkgICAgICAgX19mdW5jX18sIGVycik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKioKICAqIGRvX2RyaXZlX3NldF90YXNrZmlsZXMgLSB3cml0ZSB0aGUgZHJpdmUgdGFza2ZpbGUgc2V0dGluZ3MgZnJvbSBfR1RGCiAgKiBAZHJpdmU6IHRoZSBkcml2ZSB0byB3aGljaCB0aGUgdGFza2ZpbGUgY29tbWFuZCBzaG91bGQgYmUgc2VudAogICogQGd0Zl9sZW5ndGg6IHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiBfR1RGIHRhc2tmaWxlcwpAQCAtNDA0LDQzICsyOTQsNDEgQEAKIAkJCQkgIHVuc2lnbmVkIGludCBndGZfbGVuZ3RoLAogCQkJCSAgdW5zaWduZWQgbG9uZyBndGZfYWRkcmVzcykKIHsKLQlpbnQJCQlyYyA9IC1FTk9ERVYsIGVycjsKKwlpbnQJCQlyYyA9IDAsIGVycjsKIAlpbnQJCQlndGZfY291bnQgPSBndGZfbGVuZ3RoIC8gUkVHU19QRVJfR1RGOwogCWludAkJCWl4OwotCXN0cnVjdCB0YXNrZmlsZV9hcnJheQkqZ3RmOwotCi0JaWYgKGlkZV9ub2FjcGkpCi0JCXJldHVybiAwOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcywgaGFyZF9wb3J0IzogJWRcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZS0+ZG4pOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFndGZfY291bnQpCQkvKiBzaG91bGRuJ3QgYmUgaGVyZSAqLwotCQlnb3RvIG91dDsKIAogCURFQlBSSU5UKCJ0b3RhbCBHVEYgYnl0ZXM9JXUgKDB4JXgpLCBndGZfY291bnQ9JWQsIGFkZHI9MHglbHhcbiIsCiAJCSBndGZfbGVuZ3RoLCBndGZfbGVuZ3RoLCBndGZfY291bnQsIGd0Zl9hZGRyZXNzKTsKIAotCWlmIChndGZfbGVuZ3RoICUgUkVHU19QRVJfR1RGKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgR1RGIGxlbmd0aCAoJWQpXG4iLAotCQkgICAgICAgX19mdW5jX18sIGd0Zl9sZW5ndGgpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IDA7CisJLyogc2VuZCBhbGwgdGFza2ZpbGUgcmVnaXN0ZXJzICgweDFmMS0weDFmNykgKmluKnRoYXQqb3JkZXIqICovCiAJZm9yIChpeCA9IDA7IGl4IDwgZ3RmX2NvdW50OyBpeCsrKSB7Ci0JCWd0ZiA9IChzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKikKLQkJCShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKKwkJdTggKmd0ZiA9ICh1OCAqKShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKKwkJaWRlX3Rhc2tfdCB0YXNrOwogCi0JCS8qIHNlbmQgYWxsIFRhc2tGaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwotCQllcnIgPSB0YXNrZmlsZV9sb2FkX3Jhdyhkcml2ZSwgZ3RmKTsKLQkJaWYgKGVycikKKwkJREVCUFJJTlQoIigweDFmMS0xZjcpOiAiCisJCQkgImhleDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCSBndGZbMF0sIGd0ZlsxXSwgZ3RmWzJdLAorCQkJIGd0ZlszXSwgZ3RmWzRdLCBndGZbNV0sIGd0Zls2XSk7CisKKwkJaWYgKCFpZGVfYWNwaWd0ZikgeworCQkJREVCUFJJTlQoIl9HVEYgZXhlY3V0aW9uIGRpc2FibGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY29udmVydCBHVEYgdG8gdGFza2ZpbGUgKi8KKwkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sIGd0ZiwgUkVHU19QRVJfR1RGKTsKKwkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwkJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKKwkJCQkJX19mdW5jX18sIGVycik7CiAJCQlyYyA9IGVycjsKKwkJfQogCX0KIAotb3V0OgogCXJldHVybiByYzsKIH0KIApAQCAtNjQ3LDI2ICs1MzUsMjMgQEAKIAkJREVCUFJJTlQoIm5vIEFDUEkgZGF0YSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQorCiAJLyogY2hhbm5lbCBmaXJzdCBhbmQgdGhlbiBkcml2ZXMgZm9yIHBvd2VyIG9uIGFuZCB2ZXJzZSB2ZXJzYSBmb3IgcG93ZXIgb2ZmICovCiAJaWYgKG9uKQogCQlhY3BpX2J1c19zZXRfcG93ZXIoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIEFDUElfU1RBVEVfRDApOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQotCQkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShkcml2ZSk7Ci0KLQkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSAmJgotCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkpIHsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZiAoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQogCQkJYWNwaV9idXNfc2V0X3Bvd2VyKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwKLQkJCQlvbj8gQUNQSV9TVEFURV9EMDogQUNQSV9TVEFURV9EMyk7Ci0JCX0KKwkJCQkJICAgb24gPyBBQ1BJX1NUQVRFX0QwIDogQUNQSV9TVEFURV9EMyk7CiAJfQorCiAJaWYgKCFvbikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBBQ1BJX1NUQVRFX0QzKTsKIH0KIAogLyoqCi0gKiBpZGVfYWNwaV9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgQUNQSSBsaW5rIGZvciBhbiBJREUgaW50ZXJmYWNlCisgKiBpZGVfYWNwaV9pbml0X3BvcnQgLSBpbml0aWFsaXplIHRoZSBBQ1BJIGxpbmsgZm9yIGFuIElERSBpbnRlcmZhY2UKICAqIEBod2lmOiB0YXJnZXQgSURFIGludGVyZmFjZSAoY2hhbm5lbCkKICAqCiAgKiBUaGUgQUNQSSBzcGVjIGlzIG5vdCBxdWl0ZSBjbGVhciB3aGVuIHRoZSBkcml2ZSBpZGVudGlmeSBidWZmZXIKQEAgLTY3NiwxMCArNTYxLDggQEAKICAqIFNvIHdlIGdldCB0aGUgaW5mb3JtYXRpb24gZHVyaW5nIHN0YXJ0dXA7IGJ1dCB0aGlzIG1lYW5zIHRoYXQKICAqIGFueSBjaGFuZ2VzIGR1cmluZyBydW4tdGltZSB3aWxsIGJlIGxvc3QgYWZ0ZXIgcmVzdW1lLgogICovCi12b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZikKK3ZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaWRlX2FjcGlfYmxhY2tsaXN0KCk7Ci0KIAlod2lmLT5hY3BpZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbmspLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh3aWYtPmFjcGlkYXRhKQogCQlyZXR1cm47CkBAIC03MDgsMTUgKzU5MSwyNCBAQAogCWh3aWYtPmRldmljZXNbMF0tPmFjcGlkYXRhID0gJmh3aWYtPmFjcGlkYXRhLT5tYXN0ZXI7CiAJaHdpZi0+ZGV2aWNlc1sxXS0+YWNwaWRhdGEgPSAmaHdpZi0+YWNwaWRhdGEtPnNsYXZlOwogCi0JLyoKLQkgKiBTZW5kIElERU5USUZZIGZvciBlYWNoIGRyaXZlCi0JICovCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCW1lbXNldChkcml2ZS0+YWNwaWRhdGEsIDAsIHNpemVvZigqZHJpdmUtPmFjcGlkYXRhKSk7CisJLyogZ2V0IF9BRFIgaW5mbyBmb3IgZWFjaCBkZXZpY2UgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlhY3BpX2hhbmRsZSBkZXZfaGFuZGxlOwogCi0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7CisJCURFQlBSSU5UKCJFTlRFUjogJXMgYXQgY2hhbm5lbCM6ICVkIHBvcnQjOiAlZFxuIiwKKwkJCSBkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPmRuICYgMSk7CiAKKwkJLyogVEJEOiBjb3VsZCBhbHNvIGNoZWNrIEFDUEkgb2JqZWN0IFZBTElEIGJpdHMgKi8KKwkJZGV2X2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLAorCQkJCQkgICAgZHJpdmUtPmRuICYgMSk7CisKKwkJREVCUFJJTlQoImRyaXZlICVzIGhhbmRsZSAweCVwXG4iLCBkcml2ZS0+bmFtZSwgZGV2X2hhbmRsZSk7CisKKwkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gZGV2X2hhbmRsZTsKKwl9CisKKwkvKiBzZW5kIElERU5USUZZIGZvciBlYWNoIGRldmljZSAqLworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCWVyciA9IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkoZHJpdmUsIGRyaXZlLT5hY3BpZGF0YS0+aWRidWZmKTsKIAkJaWYgKGVycikKIAkJCURFQlBSSU5UKCJpZGVudGlmeSBkZXZpY2UgJXMgZmFpbGVkICglZClcbiIsCkBAIC03MzYsOSArNjI4LDcgQEAKIAlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwogCWlkZV9hY3BpX3B1c2hfdGltaW5nKGh3aWYpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpCi0JCQkvKiBFeGVjdXRlIEFDUEkgc3RhcnR1cCBjb2RlICovCi0JCQlpZGVfYWNwaV9leGVjX3Rmcyhkcml2ZSk7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggZTlkMDQyZGIuLjZhZGM1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0xNDksNyArMTQ5LDEwIEBACiAJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CiAJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSkKIAkJcnEtPmNtZFsxM10gPSBSRVFfSURFVEFQRV9QQzE7Ci0JaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOworCisJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKKworCWVsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwogfQogCiAvKgpAQCAtMjk3LDYgKzMwMCwyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NkX2dldF94ZmVybGVuKTsKIAordm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1MTYgKmJjb3VudCwgdTggKmlyZWFzb24pCit7CisJaWRlX3Rhc2tfdCB0YXNrOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKKwkJCUlERV9URkxBR19JTl9OU0VDVDsKKworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKworCSpiY291bnQgPSAodGFzay50Zi5sYmFoIDw8IDgpIHwgdGFzay50Zi5sYmFtOworCSppcmVhc29uID0gdGFzay50Zi5uc2VjdCAmIDM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24pOworCiAvKgogICogVGhpcyBpcyB0aGUgdXN1YWwgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGEgcGFja2V0CiAgKiBjb21tYW5kLiAgV2Ugd2lsbCB0cmFuc2ZlciBzb21lIG9mIHRoZSBkYXRhIChhcyByZXF1ZXN0ZWQgYnkgdGhlIGRyaXZlKQpAQCAtNDU2LDYgKzQ3NCwyNSBAQAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIAorc3RhdGljIHZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTMyIHRmX2ZsYWdzLCB1MTYgYmNvdW50KQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfdGFza190IHRhc2s7CisJdTggZG1hID0gZHJpdmUtPmRtYTsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKKwkJCUlERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOworCXRhc2sudGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCisJdGFzay50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKKwl0YXNrLnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKKworCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCAmdGFzay50Zik7CisJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlod2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKK30KKwogc3RhdGljIHU4IGlkZV9yZWFkX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV90YXNrX3QgdGFzazsKQEAgLTYyOSw3ICs2NjYsNyBAQAogCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAl9CiAKLQlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQsIGRyaXZlLT5kbWEpOworCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgdGZfZmxhZ3MsIGJjb3VudCk7CiAKIAkvKiBJc3N1ZSB0aGUgcGFja2V0IGNvbW1hbmQgKi8KIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggZGRmYmVhNC4uMjE3N2NkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTI0Miw3ICsyNDIsOSBAQAogCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWRfY21kOiAweCV4XG4iLAogCQkJICAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CiAKLQlpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSk7CisJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKKworCWVsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwogfQogCiBzdGF0aWMgdm9pZCBjZHJvbV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzk1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCkBAIC0wLDAgKzEsMTkwIEBACisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworREVGSU5FX01VVEVYKGlkZV9zZXR0aW5nX210eCk7CisKK2lkZV9kZXZzZXRfZ2V0KGlvXzMyYml0LCBpb18zMmJpdCk7CisKK3N0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19JT18zMkJJVCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEgKyAoU1VQUE9SVF9WTEJfU1lOQyA8PCAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcml2ZS0+aW9fMzJiaXQgPSBhcmc7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyhrc2V0dGluZ3MsIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKTsKKworc3RhdGljIGludCBzZXRfa3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKKworCXJldHVybiAwOworfQorCitpZGVfZGV2c2V0X2dldF9mbGFnKHVzaW5nX2RtYSwgSURFX0RGTEFHX1VTSU5HX0RNQSk7CisKK3N0YXRpYyBpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCisJaW50IGVyciA9IC1FUEVSTTsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGF0YV9pZF9oYXNfZG1hKGRyaXZlLT5pZCkgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAwOworCisJaWYgKGFyZykgeworCQlpZiAoaWRlX3NldF9kbWEoZHJpdmUpKQorCQkJZXJyID0gLUVJTzsKKwl9IGVsc2UKKwkJaWRlX2RtYV9vZmYoZHJpdmUpOworCitvdXQ6CisJcmV0dXJuIGVycjsKKyNlbHNlCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gLUVQRVJNOworI2VuZGlmCit9CisKKy8qCisgKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQorICovCitzdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQoreworCXN3aXRjaCAocmVxX3BpbykgeworCWNhc2UgMjAyOgorCWNhc2UgMjAxOgorCWNhc2UgMjAwOgorCWNhc2UgMTAyOgorCWNhc2UgMTAxOgorCWNhc2UgMTAwOgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOworCWNhc2UgOToKKwljYXNlIDg6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKKwljYXNlIDc6CisJY2FzZSA2OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8CisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7CisJCWlmIChhcmcgPT0gOCB8fCBhcmcgPT0gOSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJLyogdGFrZSBsb2NrIGZvciBJREVfREZMQUdfW05PX11VTk1BU0svW05PX11JT18zMkJJVCAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCX0gZWxzZQorCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKKwl9IGVsc2UgeworCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CisKKwkJaWRlX3NldF9waW8oZHJpdmUsIGFyZyk7CisKKwkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VUX1BJT19NT0RFX0tFRVBfRE1BKSB7CisJCQlpZiAoa2VlcF9kbWEpCisJCQkJaWRlX2RtYV9vbihkcml2ZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyh1bm1hc2tpcnEsIElERV9ERkxBR19VTk1BU0spOworCitzdGF0aWMgaW50IHNldF91bm1hc2tpcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX1VOTUFTSykKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFyZykKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKKworCXJldHVybiAwOworfQorCitpZGVfZXh0X2RldnNldF9yd19zeW5jKGlvXzMyYml0LCBpb18zMmJpdCk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKGtlZXBzZXR0aW5ncywga3NldHRpbmdzKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModW5tYXNraXJxLCB1bm1hc2tpcnEpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7CitfX0lERV9ERVZTRVQocGlvX21vZGUsIERTX1NZTkMsIE5VTEwsIHNldF9waW9fbW9kZSk7CisKK2ludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywKKwkJICAgICAgIGludCBhcmcpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCWludCByZXQgPSAwOworCisJaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKKwkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKKworCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CisJcnEtPmNtZF9sZW4gPSA1OworCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7CisJKihpbnQgKikmcnEtPmNtZFsxXSA9IGFyZzsKKwlycS0+c3BlY2lhbCA9IHNldHRpbmctPnNldDsKKworCWlmIChibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMCkpCisJCXJldCA9IHJxLT5lcnJvcnM7CisJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fZGV2c2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOworCisJZXJyID0gc2V0ZnVuYyhkcml2ZSwgKihpbnQgKikmcnEtPmNtZFsxXSk7CisJaWYgKGVycikKKwkJcnEtPmVycm9ycyA9IGVycjsKKwllbHNlCisJCWVyciA9IDE7CisJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIsIDApOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCAwNTljOTBiLi5hODc4ZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC00NzAsNiArNDcwLDYzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3RpbWVvdXQpOwogCisvKgorICogdW4tYnVzeSB0aGUgcG9ydCBldGMsIGFuZCBjbGVhciBhbnkgcGVuZGluZyBETUEgc3RhdHVzLiB3ZSB3YW50IHRvCisgKiByZXRyeSB0aGUgY3VycmVudCByZXF1ZXN0IGluIHBpbyBtb2RlIGluc3RlYWQgb2Ygcmlza2luZyB0b3NzaW5nIGl0CisgKiBhbGwgYXdheQorICovCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOworCisJLyoKKwkgKiBlbmQgY3VycmVudCBkbWEgdHJhbnNhY3Rpb24KKwkgKi8KKworCWlmIChlcnJvciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CisJCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOworCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCisJCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7CisJCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKKwl9CisKKwkvKgorCSAqIGRpc2FibGUgZG1hIGZvciBub3csIGJ1dCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbyBiZWNhdXNlIG9mCisJICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAorCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCisJICovCisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKKwlkcml2ZS0+cmV0cnlfcGlvKys7CisJaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisKKwkvKgorCSAqIHVuLWJ1c3kgZHJpdmUgZXRjIGFuZCBtYWtlIHN1cmUgcmVxdWVzdCBpcyBzYW5lCisJICovCisKKwlycSA9IGh3aWYtPnJxOworCWlmICghcnEpCisJCWdvdG8gb3V0OworCisJaHdpZi0+cnEgPSBOVUxMOworCisJcnEtPmVycm9ycyA9IDA7CisKKwlpZiAoIXJxLT5iaW8pCisJCWdvdG8gb3V0OworCisJcnEtPnNlY3RvciA9IHJxLT5iaW8tPmJpX3NlY3RvcjsKKwlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW4gPj4gOTsKKwlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJcnEtPmJ1ZmZlciA9IGJpb19kYXRhKHJxLT5iaW8pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKQogewogCWlmIChod2lmLT5kbWF0YWJsZV9jcHUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1laC5jIGIvZHJpdmVycy9pZGUvaWRlLWVoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzMWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCkBAIC0wLDAgKzEsNDI4IEBACisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgICB1OCBzdGF0LCB1OCBlcnIpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCisJaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8CisJICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgeworCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLworCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOworCX0gZWxzZSBpZiAoc3RhdCAmIEFUQV9FUlIpIHsKKwkJLyogZXJyIGhhcyBkaWZmZXJlbnQgbWVhbmluZyBvbiBjZHJvbSBhbmQgdGFwZSAqLworCQlpZiAoZXJyID09IEFUQV9BQk9SVEVEKSB7CisJCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSAmJgorCQkJICAgIC8qIHNvbWUgbmV3ZXIgZHJpdmVzIGRvbid0IHN1cHBvcnQgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgKi8KKwkJCSAgICBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpID09IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TKQorCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfSBlbHNlIGlmICgoZXJyICYgQkFEX0NSQykgPT0gQkFEX0NSQykgeworCQkJLyogVURNQSBjcmMgZXJyb3IsIGp1c3QgcmV0cnkgdGhlIG9wZXJhdGlvbiAqLworCQkJZHJpdmUtPmNyY19jb3VudCsrOworCQl9IGVsc2UgaWYgKGVyciAmIChBVEFfQkJLIHwgQVRBX1VOQykpIHsKKwkJCS8qIHJldHJpZXMgd29uJ3QgaGVscCB0aGVzZSAqLworCQkJcnEtPmVycm9ycyA9IEVSUk9SX01BWDsKKwkJfSBlbHNlIGlmIChlcnIgJiBBVEFfVFJLME5GKSB7CisJCQkvKiBoZWxwIGl0IGZpbmQgdHJhY2sgemVybyAqLworCQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRUNBTDsKKwkJfQorCX0KKworCWlmICgoc3RhdCAmIEFUQV9EUlEpICYmIHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEICYmCisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8pID09IDApIHsKKwkJaW50IG5zZWN0ID0gZHJpdmUtPm11bHRfY291bnQgPyBkcml2ZS0+bXVsdF9jb3VudCA6IDE7CisKKwkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgUkVBRCwgbnNlY3QgKiBTRUNUT1JfU0laRSk7CisJfQorCisJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYIHx8IGJsa19ub3JldHJ5X3JlcXVlc3QocnEpKSB7CisJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQorCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOworCisJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7CisJCSsrcnEtPmVycm9yczsKKwkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CisJfQorCisJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVDQUwpID09IEVSUk9SX1JFQ0FMKQorCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMTsKKworCSsrcnEtPmVycm9yczsKKworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhcGlfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgICAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKKwkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7CisJCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisJfSBlbHNlIHsKKwkJLyogYWRkIGRlY29kaW5nIGVycm9yIHN0dWZmICovCisJfQorCisJaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKKwkJLyogZm9yY2UgYW4gYWJvcnQgKi8KKwkJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9JRExFSU1NRURJQVRFKTsKKworCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgeworCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOworCX0gZWxzZSB7CisJCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgeworCQkJKytycS0+ZXJyb3JzOworCQkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CisJCX0KKwkJKytycS0+ZXJyb3JzOworCX0KKworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBfX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICB1OCBzdGF0LCB1OCBlcnIpCit7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJcmV0dXJuIGlkZV9hdGFfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOworCXJldHVybiBpZGVfYXRhcGlfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOworfQorCisvKioKKyAqCWlkZV9lcnJvcgktCWhhbmRsZSBhbiBlcnJvciBvbiB0aGUgSURFCisgKglAZHJpdmU6IGRyaXZlIHRoZSBlcnJvciBvY2N1cnJlZCBvbgorICoJQG1zZzogbWVzc2FnZSB0byByZXBvcnQKKyAqCUBzdGF0OiBzdGF0dXMgYml0cworICoKKyAqCWlkZV9lcnJvcigpIHRha2VzIGFjdGlvbiBiYXNlZCBvbiB0aGUgZXJyb3IgcmV0dXJuZWQgYnkgdGhlIGRyaXZlLgorICoJRm9yIG5vcm1hbCBJL08gdGhhdCBtYXkgd2VsbCBpbmNsdWRlIHJldHJpZXMuIFdlIGRlYWwgd2l0aAorICoJYm90aCBuZXctc3R5bGUgKHRhc2tmaWxlKSBhbmQgb2xkIHN0eWxlIGNvbW1hbmQgaGFuZGxpbmcgaGVyZS4KKyAqCUluIHRoZSBjYXNlIG9mIHRhc2tmaWxlIGNvbW1hbmQgaGFuZGxpbmcgdGhlcmUgaXMgd29yayBsZWZ0IHRvCisgKglkbworICovCisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCit7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCXU4IGVycjsKKworCWVyciA9IGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgbXNnLCBzdGF0KTsKKworCXJxID0gZHJpdmUtPmh3aWYtPnJxOworCWlmIChycSA9PSBOVUxMKQorCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisKKwkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KKwlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgeworCQlycS0+ZXJyb3JzID0gMTsKKwkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwlyZXR1cm4gX19pZGVfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Vycm9yKTsKKworc3RhdGljIGlubGluZSB2b2lkIGlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnIpCit7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOworCisJaWYgKHJxICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5jbWRbMF0gPT0gUkVRX0RSSVZFX1JFU0VUKQorCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciA/IGVyciA6IDEsIDApOworfQorCisvKiBuZWVkZWQgYmVsb3cgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxKGlkZV9kcml2ZV90ICosIGludCk7CisKKy8qCisgKiBhdGFwaV9yZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24KKyAqIGV2ZXJ5IDUwbXMgZHVyaW5nIGFuIGF0YXBpIGRyaXZlIHJlc2V0IG9wZXJhdGlvbi4gIElmIHRoZSBkcml2ZSBoYXMgbm90IHlldAorICogcmVzcG9uZGVkLCBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyCisgKiBpcyByZXN0YXJ0ZWQgZm9yIGFub3RoZXIgNTBtcy4KKyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBhdGFwaV9yZXNldF9wb2xsZnVuYyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHN0YXQ7CisKKwlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCXVkZWxheSgxMCk7CisJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisKKwlpZiAoT0tfU1RBVChzdGF0LCAwLCBBVEFfQlVTWSkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOworCWVsc2UgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgeworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLAorCQkJCQlOVUxMKTsKKwkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KKwkJCXJldHVybiBpZGVfc3RhcnRlZDsKKwkJfQorCQkvKiBlbmQgb2YgcG9sbGluZyAqLworCQlod2lmLT5wb2xsaW5nID0gMDsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQVRBUEkgcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJZHJpdmUtPm5hbWUsIHN0YXQpOworCQkvKiBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXkgKi8KKwkJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMSk7CisJfQorCS8qIGRvbmUgcG9sbGluZyAqLworCWh3aWYtPnBvbGxpbmcgPSAwOworCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgMCk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgdm9pZCBpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGlkZV9od2lmX3QgKmh3aWYsIHU4IGVycikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZXJyX21hc3Rlcl92YWxzW10gPQorCQl7IE5VTEwsICJwYXNzZWQiLCAiZm9ybWF0dGVyIGRldmljZSBlcnJvciIsCisJCSAgInNlY3RvciBidWZmZXIgZXJyb3IiLCAiRUNDIGNpcmN1aXRyeSBlcnJvciIsCisJCSAgImNvbnRyb2xsaW5nIE1QVSBlcnJvciIgfTsKKworCXU4IGVycl9tYXN0ZXIgPSBlcnIgJiAweDdmOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQ6IG1hc3RlcjogIiwgaHdpZi0+bmFtZSk7CisJaWYgKGVycl9tYXN0ZXIgJiYgZXJyX21hc3RlciA8IDYpCisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZXJyX21hc3Rlcl92YWxzW2Vycl9tYXN0ZXJdKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0NPTlQgImVycm9yICgweCUwMng/KSIsIGVycik7CisJaWYgKGVyciAmIDB4ODApCisJCXByaW50ayhLRVJOX0NPTlQgIjsgc2xhdmU6IGZhaWxlZCIpOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKKy8qCisgKiByZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcworICogZHVyaW5nIGFuIGlkZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZXMgaGF2ZSBub3QgeWV0IHJlc3BvbmRlZCwKKyAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCisgKiBmb3IgYW5vdGhlciA1MG1zLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHJlc2V0X3BvbGxmdW5jKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKwl1OCB0bXA7CisJaW50IGVyciA9IDA7CisKKwlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0X3BvbGwpIHsKKwkJZXJyID0gcG9ydF9vcHMtPnJlc2V0X3BvbGwoZHJpdmUpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBob3N0IHJlc2V0X3BvbGwgZmFpbHVyZSBmb3IgJXMuXG4iLAorCQkJCWh3aWYtPm5hbWUsIGRyaXZlLT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJdG1wID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmICghT0tfU1RBVCh0bXAsIDAsIEFUQV9CVVNZKSkgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgeworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKwkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KKwkJCXJldHVybiBpZGVfc3RhcnRlZDsKKwkJfQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCisJCQlod2lmLT5uYW1lLCB0bXApOworCQlkcml2ZS0+ZmFpbHVyZXMrKzsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgIHsKKwkJdG1wID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOworCisJCWlmICh0bXAgPT0gMSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0OiBzdWNjZXNzXG4iLCBod2lmLT5uYW1lKTsKKwkJCWRyaXZlLT5mYWlsdXJlcyA9IDA7CisJCX0gZWxzZSB7CisJCQlpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGh3aWYsIHRtcCk7CisJCQlkcml2ZS0+ZmFpbHVyZXMrKzsKKwkJCWVyciA9IC1FSU87CisJCX0KKwl9CitvdXQ6CisJaHdpZi0+cG9sbGluZyA9IDA7CS8qIGRvbmUgcG9sbGluZyAqLworCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgZXJyKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX3ByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaW50IGxlZ2FjeSA9IChkcml2ZS0+aWRbQVRBX0lEX0NGU19FTkFCTEVfMl0gJiAweDA0MDApID8gMCA6IDE7CisKKwlkcml2ZS0+c3BlY2lhbC5hbGwgPSAwOworCWRyaXZlLT5zcGVjaWFsLmIuc2V0X2dlb21ldHJ5ID0gbGVnYWN5OworCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgID0gbGVnYWN5OworCisJZHJpdmUtPm11bHRfY291bnQgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QQVJLRUQ7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApCisJCWRyaXZlLT5tdWx0X3JlcSA9IDA7CisKKwlpZiAoZHJpdmUtPm11bHRfcmVxICE9IGRyaXZlLT5tdWx0X2NvdW50KQorCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9tdWx0bW9kZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBkcml2ZS0+aHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlpZGVfZGlza19wcmVfcmVzZXQoZHJpdmUpOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUE9TVF9SRVNFVDsKKworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgeworCQlpZiAoZHJpdmUtPmNyY19jb3VudCkKKwkJCWlkZV9jaGVja19kbWFfY3JjKGRyaXZlKTsKKwkJZWxzZQorCQkJaWRlX2RtYV9vZmYoZHJpdmUpOworCX0KKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwKSB7CisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApIHsKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CisJCQlkcml2ZS0+aW9fMzJiaXQgPSAwOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnByZV9yZXNldCkKKwkJcG9ydF9vcHMtPnByZV9yZXNldChkcml2ZSk7CisKKwlpZiAoZHJpdmUtPmN1cnJlbnRfc3BlZWQgIT0gMHhmZikKKwkJZHJpdmUtPmRlc2lyZWRfc3BlZWQgPSBkcml2ZS0+Y3VycmVudF9zcGVlZDsKKwlkcml2ZS0+Y3VycmVudF9zcGVlZCA9IDB4ZmY7Cit9CisKKy8qCisgKiBkb19yZXNldDEoKSBhdHRlbXB0cyB0byByZWNvdmVyIGEgY29uZnVzZWQgZHJpdmUgYnkgcmVzZXR0aW5nIGl0LgorICogVW5mb3J0dW5hdGVseSwgcmVzZXR0aW5nIGEgZGlzayBkcml2ZSBhY3R1YWxseSByZXNldHMgYWxsIGRldmljZXMgb24KKyAqIHRoZSBzYW1lIGludGVyZmFjZSwgc28gaXQgY2FuIHJlYWxseSBiZSB0aG91Z2h0IG9mIGFzIHJlc2V0dGluZyB0aGUKKyAqIGludGVyZmFjZSByYXRoZXIgdGhhbiByZXNldHRpbmcgdGhlIGRyaXZlLgorICoKKyAqIEFUQVBJIGRldmljZXMgaGF2ZSB0aGVpciBvd24gcmVzZXQgbWVjaGFuaXNtIHdoaWNoIGFsbG93cyB0aGVtIHRvIGJlCisgKiBpbmRpdmlkdWFsbHkgcmVzZXQgd2l0aG91dCBjbG9iYmVyaW5nIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUgaW50ZXJmYWNlLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHRoZSBJREUgaW50ZXJmYWNlIGRvZXMgbm90IGdlbmVyYXRlIGFuIGludGVycnVwdCB0byBsZXQKKyAqIHVzIGtub3cgd2hlbiB0aGUgcmVzZXQgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCwgc28gd2UgbXVzdCBwb2xsIGZvciB0aGlzLgorICogRXF1YWxseSBwb29yLCB0aG91Z2gsIGlzIHRoZSBmYWN0IHRoYXQgdGhpcyBtYXkgYSB2ZXJ5IGxvbmcgdGltZSB0byBjb21wbGV0ZSwKKyAqICh1cCB0byAzMCBzZWNvbmRzIHdvcnN0Y2FzZSkuICBTbywgaW5zdGVhZCBvZiBidXN5LXdhaXRpbmcgaGVyZSBmb3IgaXQsCisgKiB3ZSBzZXQgYSB0aW1lciB0byBwb2xsIGF0IDUwbXMgaW50ZXJ2YWxzLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkb19ub3RfdHJ5X2F0YXBpKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOworCWlkZV9kcml2ZV90ICp0ZHJpdmU7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdGltZW91dDsKKwlpbnQgaTsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisKKwkvKiBXZSBtdXN0IG5vdCByZXNldCB3aXRoIHJ1bm5pbmcgaGFuZGxlcnMgKi8KKwlCVUdfT04oaHdpZi0+aGFuZGxlciAhPSBOVUxMKTsKKworCS8qIEZvciBhbiBBVEFQSSBkZXZpY2UsIGZpcnN0IHRyeSBhbiBBVEFQSSBTUlNULiAqLworCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgJiYgIWRvX25vdF90cnlfYXRhcGkpIHsKKwkJcHJlX3Jlc2V0KGRyaXZlKTsKKwkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwkJdWRlbGF5KDIwKTsKKwkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOworCQluZGVsYXkoNDAwKTsKKwkJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOworCQlod2lmLT5wb2xsaW5nID0gMTsKKwkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBpZGVfc3RhcnRlZDsKKwl9CisKKwkvKiBXZSBtdXN0IG5vdCBkaXN0dXJiIGRldmljZXMgaW4gdGhlIElERV9ERkxBR19QQVJLRUQgc3RhdGUuICovCisJZG8geworCQl1bnNpZ25lZCBsb25nIG5vdzsKKworCQlwcmVwYXJlX3RvX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQl0aW1lb3V0ID0gamlmZmllczsKKwkJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgdGRyaXZlLCBod2lmKSB7CisJCQlpZiAoKHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCkgJiYKKwkJCSAgICB0aW1lX2FmdGVyKHRkcml2ZS0+c2xlZXAsIHRpbWVvdXQpKQorCQkJCXRpbWVvdXQgPSB0ZHJpdmUtPnNsZWVwOworCQl9CisKKwkJbm93ID0gamlmZmllczsKKwkJaWYgKHRpbWVfYmVmb3JlX2VxKHRpbWVvdXQsIG5vdykpCisJCQlicmVhazsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSh0aW1lb3V0IC0gbm93KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwl9IHdoaWxlICh0aW1lb3V0KTsKKwlmaW5pc2hfd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0KTsKKworCS8qCisJICogRmlyc3QsIHJlc2V0IGFueSBkZXZpY2Ugc3RhdGUgZGF0YSB3ZSB3ZXJlIG1haW50YWluaW5nCisJICogZm9yIGFueSBvZiB0aGUgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgorCSAqLworCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpCisJCXByZV9yZXNldCh0ZHJpdmUpOworCisJaWYgKGlvX3BvcnRzLT5jdGxfYWRkciA9PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAtRU5YSU8pOworCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQorCisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgYWxzbyBzZXQgbklFTiB3aGlsZSByZXNldHRpbmcgdGhlIGRldmljZSwKKwkgKiB0byBtYXNrIHVud2FudGVkIGludGVycnVwdHMgZnJvbSB0aGUgaW50ZXJmYWNlIGR1cmluZyB0aGUgcmVzZXQuCisJICogSG93ZXZlciwgZHVlIHRvIHRoZSBkZXNpZ24gb2YgUEMgaGFyZHdhcmUsIHRoaXMgd2lsbCBjYXVzZSBhbgorCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCisJICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0CisJICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KKwkgKgorCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKKwkgKi8KKwkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLworCXRwX29wcy0+c2V0X2lycShod2lmLCA0KTsKKwkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KKwl1ZGVsYXkoMTApOworCS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKHVubGVzcyBkZXZpY2UgaXMgb24gdGhlIHF1aXJrIGxpc3QpICovCisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGRyaXZlLT5xdWlya19saXN0ID09IDIpOworCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLworCXVkZWxheSgxMCk7CisJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOworCWh3aWYtPnBvbGxpbmcgPSAxOworCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKworCS8qCisJICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCisJICogc3RhdGUgd2hlbiB0aGUgZGlza3MgYXJlIHJlc2V0IHRoaXMgd2F5LiBBdCBsZWFzdCwgdGhlIFdpbmJvbmQKKwkgKiA1NTMgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQKKwkgKi8KKwlwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRwcm9jKQorCQlwb3J0X29wcy0+cmVzZXRwcm9jKGRyaXZlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Cit9CisKKy8qCisgKiBpZGVfZG9fcmVzZXQoKSBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGRyaXZlL2ludGVyZmFjZSByZXNldCBjb2RlLgorICovCisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDApOworfQorRVhQT1JUX1NZTUJPTChpZGVfZG9fcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKQEAgLTAsMCArMSwzMTYgQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisvKgorICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcworICovCisKK3N0YXRpYyB1OCBpZGVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9vdXRiKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCW91dGIodmFsLCBwb3J0KTsKK30KKworLyoKKyAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKKyAqLworCitzdGF0aWMgdTggaWRlX21tX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgaWRlX21tX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Cit9CisKK3ZvaWQgaWRlX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJd3JpdGViKGNtZCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7CisJZWxzZQorCQlvdXRiKGNtZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjX2NvbW1hbmQpOworCit1OCBpZGVfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKKwllbHNlCisJCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfc3RhdHVzKTsKKwordTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2FsdHN0YXR1cyk7CisKK3ZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQoreworCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOworCisJaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLworCQljdGwgfD0gNDsKKwkJb24gJj0gfjQ7CisJfQorCisJY3RsIHw9IG9uID8gMCA6IDI7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKKwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisKKwlpZiAobW1pbykKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCWVsc2UKKwkJdGZfb3V0YiA9IGlkZV9vdXRiOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJCUhJSEkgPSAweEZGOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOworCisJCWlmIChtbWlvKQorCQkJd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJb3V0dyhkYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJCXRmX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCisJCQkgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9sb2FkKTsKKwordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJaWYgKG1taW8pIHsKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCQl0Zl9pbmIgID0gaWRlX21tX2luYjsKKwl9IGVsc2UgeworCQl0Zl9vdXRiID0gaWRlX291dGI7CisJCXRmX2luYiAgPSBpZGVfaW5iOworCX0KKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJCXUxNiBkYXRhOworCisJCWlmIChtbWlvKQorCQkJZGF0YSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCQl0Zi0+ZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJCXRmLT5uc2VjdCAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCQl0Zi0+bGJhbSAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCQl0Zi0+bGJhaCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSB0Zl9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCQl0Zi0+aG9iX2ZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9yZWFkKTsKKworLyoKKyAqIFNvbWUgbG9jYWxidXMgRUlERSBpbnRlcmZhY2VzIHJlcXVpcmUgYSBzcGVjaWFsIGFjY2VzcyBzZXF1ZW5jZQorICogd2hlbiB1c2luZyAzMi1iaXQgSS9PIGluc3RydWN0aW9ucyB0byB0cmFuc2ZlciBkYXRhLiAgV2UgY2FsbCB0aGlzCisgKiB0aGUgInZsYl9zeW5jIiBzZXF1ZW5jZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgc3VjY2Vzc2l2ZSByZWFkcworICogb2YgdGhlIHNlY3RvciBjb3VudCByZWdpc3RlciBsb2NhdGlvbiwgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisgKiB0byBlbnN1cmUgdGhhdCB0aGUgcmVhZHMgYWxsIGhhcHBlbiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQgYXRhX3ZsYl9zeW5jKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwkodm9pZClpbmIocG9ydCk7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKmZyb20qIHRoZSBJREUgaW50ZXJmYWNlCisgKgorICogVGhlc2Ugcm91dGluZXMgd2lsbCByb3VuZCB1cCBhbnkgcmVxdWVzdCBmb3IgYW4gb2RkIG51bWJlciBvZiBieXRlcywKKyAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKKyAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgorICovCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlsZW4rKzsKKworCWlmIChpb18zMmJpdCkgeworCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCX0KKworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX2luc2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWlmICgobGVuICYgMykgPj0gMikgeworCQkJaWYgKG1taW8pCisJCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAorCQkJCQkJKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWVsc2UKKwkJCWluc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnB1dF9kYXRhKTsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKnRvKiB0aGUgSURFIGludGVyZmFjZQorICovCit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAorCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKKwl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWxlbisrOworCisJaWYgKGlvXzMyYml0KSB7CisJCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgeworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJfQorCisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJb3V0c2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKKwkJCWlmIChtbWlvKQorCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCisJCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJZWxzZQorCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7CisKK2NvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IGE5YTZjMjAuLjJlOTI0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWRlX2VuZF9kcml2ZV9jbWQpOwogCi1zdGF0aWMgdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWYgKHJxLT5ycV9kaXNrKSB7CiAJCXN0cnVjdCBpZGVfZHJpdmVyICpkcnY7CkBAIC0yMDcsMTMzICsyMDcsNiBAQAogCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKLQkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7Ci0JCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0JfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgewotCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCi0JCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKLQkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCi0JCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLwotCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCi0JCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7Ci0JCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCi0JCQlkcml2ZS0+Y3JjX2NvdW50Kys7Ci0JCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgewotCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCi0JCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOwotCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKLQkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCi0JCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOwotCQl9Ci0JfQotCi0JaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgewotCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKLQotCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKLQl9Ci0KLQlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKLQkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKLQkJKytycS0+ZXJyb3JzOwotCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQl9Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCi0JCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOwotCi0JKytycS0+ZXJyb3JzOwotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAotCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKLQkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KLQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKLQl9IGVsc2UgewotCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KLQl9Ci0KLQlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQkvKiBmb3JjZSBhbiBhYm9ydCAqLwotCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOwotCi0JaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7Ci0JCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7Ci0JfSBlbHNlIHsKLQkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7Ci0JCQkrK3JxLT5lcnJvcnM7Ci0JCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQkJfQotCQkrK3JxLT5lcnJvcnM7Ci0JfQotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90Ci1fX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCXJldHVybiBpZGVfYXRhX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLQlyZXR1cm4gaWRlX2F0YXBpX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLX0KLQotLyoqCi0gKglpZGVfZXJyb3IJLQloYW5kbGUgYW4gZXJyb3Igb24gdGhlIElERQotICoJQGRyaXZlOiBkcml2ZSB0aGUgZXJyb3Igb2NjdXJyZWQgb24KLSAqCUBtc2c6IG1lc3NhZ2UgdG8gcmVwb3J0Ci0gKglAc3RhdDogc3RhdHVzIGJpdHMKLSAqCi0gKglpZGVfZXJyb3IoKSB0YWtlcyBhY3Rpb24gYmFzZWQgb24gdGhlIGVycm9yIHJldHVybmVkIGJ5IHRoZSBkcml2ZS4KLSAqCUZvciBub3JtYWwgSS9PIHRoYXQgbWF5IHdlbGwgaW5jbHVkZSByZXRyaWVzLiBXZSBkZWFsIHdpdGgKLSAqCWJvdGggbmV3LXN0eWxlICh0YXNrZmlsZSkgYW5kIG9sZCBzdHlsZSBjb21tYW5kIGhhbmRsaW5nIGhlcmUuCi0gKglJbiB0aGUgY2FzZSBvZiB0YXNrZmlsZSBjb21tYW5kIGhhbmRsaW5nIHRoZXJlIGlzIHdvcmsgbGVmdCB0bwotICoJZG8KLSAqLwotIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCXU4IGVycjsKLQotCWVyciA9IGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgbXNnLCBzdGF0KTsKLQotCXJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlmIChycSA9PSBOVUxMKQotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0KLQkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KLQlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlycS0+ZXJyb3JzID0gMTsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQlyZXR1cm4gX19pZGVfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Vycm9yKTsKLQogc3RhdGljIHZvaWQgaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmKQogewogCXRmLT5uc2VjdCAgID0gZHJpdmUtPnNlY3Q7CkBAIC00OTAsNzEgKzM2MywxNiBAQAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKLWludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywKLQkJICAgICAgIGludCBhcmcpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWludCByZXQgPSAwOwotCi0JaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKLQkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKLQotCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7Ci0JcnEtPmNtZF9sZW4gPSA1OwotCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7Ci0JKihpbnQgKikmcnEtPmNtZFsxXSA9IGFyZzsKLQlycS0+c3BlY2lhbCA9IHNldHRpbmctPnNldDsKLQotCWlmIChibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMCkpCi0JCXJldCA9IHJxLT5lcnJvcnM7Ci0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGV2c2V0X2V4ZWN1dGUpOwotCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9zcGVjaWFsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXU4IGNtZCA9IHJxLT5jbWRbMF07CiAKLQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTIHx8IGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTKSB7Ci0JCWlkZV90YXNrX3QgdGFzazsKLQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKLQotCQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JCWlmIChjbWQgPT0gUkVRX1BBUktfSEVBRFMpIHsKLQkJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOwotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7Ci0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKLQkJCXRmLT5mZWF0dXJlID0gMHg0NDsKLQkJCXRmLT5sYmFsID0gMHg0YzsKLQkJCXRmLT5sYmFtID0gMHg0ZTsKLQkJCXRmLT5sYmFoID0gMHg1NTsKLQkJCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOwotCQl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCi0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOwotCi0JCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQkJdGFzay5ycSA9IHJxOwotCQlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7Ci0JCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOwotCX0KLQogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSRVFfUEFSS19IRUFEUzoKKwljYXNlIFJFUV9VTlBBUktfSEVBRFM6CisJCXJldHVybiBpZGVfZG9fcGFya191bnBhcmsoZHJpdmUsIHJxKTsKIAljYXNlIFJFUV9ERVZTRVRfRVhFQzoKLQl7Ci0JCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOwotCi0JCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOwotCQlpZiAoZXJyKQotCQkJcnEtPmVycm9ycyA9IGVycjsKLQkJZWxzZQotCQkJZXJyID0gMTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQorCQlyZXR1cm4gaWRlX2RvX2RldnNldChkcml2ZSwgcnEpOwogCWNhc2UgUkVRX0RSSVZFX1JFU0VUOgogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAlkZWZhdWx0OgpAQCAtODIwLDYzICs2MzgsNiBAQAogCQlibGtfcGx1Z19kZXZpY2UocSk7CiB9CiAKLS8qCi0gKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KLSAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKLSAqIGFsbCBhd2F5Ci0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOwotCi0JLyoKLQkgKiBlbmQgY3VycmVudCBkbWEgdHJhbnNhY3Rpb24KLQkgKi8KLQotCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwotCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCi0JCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKLQl9Ci0KLQkvKgotCSAqIGRpc2FibGUgZG1hIGZvciBub3csIGJ1dCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbyBiZWNhdXNlIG9mCi0JICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAotCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCi0JICovCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKLQlkcml2ZS0+cmV0cnlfcGlvKys7Ci0JaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0KLQkvKgotCSAqIHVuLWJ1c3kgZHJpdmUgZXRjIGFuZCBtYWtlIHN1cmUgcmVxdWVzdCBpcyBzYW5lCi0JICovCi0KLQlycSA9IGh3aWYtPnJxOwotCWlmICghcnEpCi0JCWdvdG8gb3V0OwotCi0JaHdpZi0+cnEgPSBOVUxMOwotCi0JcnEtPmVycm9ycyA9IDA7Ci0KLQlpZiAoIXJxLT5iaW8pCi0JCWdvdG8gb3V0OwotCi0JcnEtPnNlY3RvciA9IHJxLT5iaW8tPmJpX3NlY3RvcjsKLQlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW4gPj4gOTsKLQlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JcnEtPmJ1ZmZlciA9IGJpb19kYXRhKHJxLT5iaW8pOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9wbHVnX2RldmljZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CkBAIC04ODgsNiArNjQ5LDI5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgZHJpdmVfaXNfcmVhZHkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0ID0gMDsKKworCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQorCQlyZXR1cm4gaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKTsKKworCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkciAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19CUk9LRU5fQUxUU1RBVFVTKSA9PSAwKQorCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKKwllbHNlCisJCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChzdGF0ICYgQVRBX0JVU1kpCisJCS8qIGRyaXZlIGJ1c3k6IGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLworCQlyZXR1cm4gMDsKKworCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLworCXJldHVybiAxOworfQorCiAvKioKICAqCWlkZV90aW1lcl9leHBpcnkJLQloYW5kbGUgbGFjayBvZiBhbiBJREUgaW50ZXJydXB0CiAgKglAZGF0YTogdGltZXIgY2FsbGJhY2sgbWFnaWMgKGh3aWYpCkBAIC0xMTY0LDU0ICs5NDgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2ludHIpOwogCi0vKioKLSAqCWlkZV9kb19kcml2ZV9jbWQJLQlpc3N1ZSBJREUgc3BlY2lhbCBjb21tYW5kCi0gKglAZHJpdmU6IGRldmljZSB0byBpc3N1ZSBjb21tYW5kCi0gKglAcnE6IHJlcXVlc3QgdG8gaXNzdWUKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIHNwZWNpYWwgSURFIGRldmljZSByZXF1ZXN0Ci0gKglvbnRvIHRoZSByZXF1ZXN0IHF1ZXVlLgotICoKLSAqCXRoZSBycSBpcyBxdWV1ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgcXVldWUsIGRpc3BsYWNpbmcKLSAqCXRoZSBjdXJyZW50bHktYmVpbmctcHJvY2Vzc2VkIHJlcXVlc3QgYW5kIHRoaXMgZnVuY3Rpb24KLSAqCXJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV3IHJxIHRvIGJlCi0gKgljb21wbGV0ZWQuICBUaGlzIGlzIFZFUlkgREFOR0VST1VTLCBhbmQgaXMgaW50ZW5kZWQgZm9yCi0gKgljYXJlZnVsIHVzZSBieSB0aGUgQVRBUEkgdGFwZS9jZHJvbSBkcml2ZXIgY29kZS4KLSAqLwotCi12b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlkZV9kb19kcml2ZV9jbWQpOwotCi12b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCwgdTggZG1hKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190IHRhc2s7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8Ci0JCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKLQl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLwotCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7Ci0JdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7Ci0KLQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOwotCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wa3RjbWRfdGZfbG9hZCk7Ci0KIHZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB3cml0ZSwgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCBiMTg5MmJkLi4zMTdjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTI3LDM1ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyoKLSAqCUNvbnZlbnRpb25hbCBQSU8gb3BlcmF0aW9ucyBmb3IgQVRBIGRldmljZXMKLSAqLwotCi1zdGF0aWMgdTggaWRlX2luYiAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTgpIGluYihwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX291dGIgKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCW91dGIodmFsLCBwb3J0KTsKLX0KLQotLyoKLSAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKLSAqLwotCi1zdGF0aWMgdTggaWRlX21tX2luYiAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9tbV9vdXRiICh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKLX0KLQotdm9pZCBTRUxFQ1RfRFJJVkUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3ZvaWQgU0VMRUNUX0RSSVZFKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKQEAgLTc4LDI3NyArNTAsNiBAQAogCQlwb3J0X29wcy0+bWFza3Byb2MoZHJpdmUsIG1hc2spOwogfQogCi12b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlYihjbWQsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOwotCWVsc2UKLQkJb3V0YihjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY19jb21tYW5kKTsKLQotdTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX3N0YXR1cyk7Ci0KLXU4IGlkZV9yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotCWVsc2UKLQkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOwotCi12b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKLXsKLQl1OCBjdGwgPSBBVEFfREVWQ1RMX09CUzsKLQotCWlmIChvbiA9PSA0KSB7IC8qIGhhY2sgZm9yIFNSU1QgKi8KLQkJY3RsIHw9IDQ7Ci0JCW9uICY9IH40OwotCX0KLQotCWN0bCB8PSBvbiA/IDAgOiAyOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJd3JpdGViKGN0bCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLQllbHNlCi0JCW91dGIoY3RsLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2lycSk7Ci0KLXZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwotCi0JaWYgKG1taW8pCi0JCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKLQllbHNlCi0JCXRmX291dGIgPSBpZGVfb3V0YjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQotCQlISUhJID0gMHhGRjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCXdyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JfQotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKLQkJdGZfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQotCQl0Zl9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQotCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKLQkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCi0JCXRmX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKLQkJdGZfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKLQkJdGZfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCi0JCXRmX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKLQkJdGZfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQotCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAotCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7Ci0KLXZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCAoKnRmX2luYikodW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQotCWlmIChtbWlvKSB7Ci0JCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKLQkJdGZfaW5iICA9IGlkZV9tbV9pbmI7Ci0JfSBlbHNlIHsKLQkJdGZfb3V0YiA9IGlkZV9vdXRiOwotCQl0Zl9pbmIgID0gaWRlX2luYjsKLQl9Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCWRhdGEgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCWRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQotCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKLQkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQotCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKLQkJdGYtPmxiYWwgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKLQkJdGYtPmxiYW0gICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKLQkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQotCQl0Zi0+ZGV2aWNlID0gdGZfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7Ci0KLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfcmVhZCk7Ci0KLS8qCi0gKiBTb21lIGxvY2FsYnVzIEVJREUgaW50ZXJmYWNlcyByZXF1aXJlIGEgc3BlY2lhbCBhY2Nlc3Mgc2VxdWVuY2UKLSAqIHdoZW4gdXNpbmcgMzItYml0IEkvTyBpbnN0cnVjdGlvbnMgdG8gdHJhbnNmZXIgZGF0YS4gIFdlIGNhbGwgdGhpcwotICogdGhlICJ2bGJfc3luYyIgc2VxdWVuY2UsIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHN1Y2Nlc3NpdmUgcmVhZHMKLSAqIG9mIHRoZSBzZWN0b3IgY291bnQgcmVnaXN0ZXIgbG9jYXRpb24sIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAotICogdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWRzIGFsbCBoYXBwZW4gdG9nZXRoZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGF0YV92bGJfc3luYyh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JKHZvaWQpaW5iKHBvcnQpOwotCSh2b2lkKWluYihwb3J0KTsKLQkodm9pZClpbmIocG9ydCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICpmcm9tKiB0aGUgSURFIGludGVyZmFjZQotICoKLSAqIFRoZXNlIHJvdXRpbmVzIHdpbGwgcm91bmQgdXAgYW55IHJlcXVlc3QgZm9yIGFuIG9kZCBudW1iZXIgb2YgYnl0ZXMsCi0gKiBzbyBpZiBhbiBvZGQgbGVuIGlzIHNwZWNpZmllZCwgYmUgc3VyZSB0aGF0IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0gKiBleHRyYSBieXRlIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlci4KLSAqLwotdm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOwotCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCi0JbGVuKys7Ci0KLQlpZiAoaW9fMzJiaXQpIHsKLQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7Ci0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQl9Ci0KLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0JCWVsc2UKLQkJCWluc2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKLQkJCWlmIChtbWlvKQotCQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKLQkJCQkJCSh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQkJZWxzZQotCQkJCWluc3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCQllbHNlCi0JCQlpbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5wdXRfZGF0YSk7Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKLSAqLwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7Ci0JdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0KLQlsZW4rKzsKLQotCWlmIChpb18zMmJpdCkgewotCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCX0KLQotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX291dHNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0JCWVsc2UKLQkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJaWYgKChsZW4gJiAzKSA+PSAyKSB7Ci0JCQlpZiAobW1pbykKLQkJCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAotCQkJCQkJICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQkJZWxzZQotCQkJCW91dHN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JCWVsc2UKLQkJCW91dHN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfb3V0cHV0X2RhdGEpOwotCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX3Rhc2tfdCB0YXNrOwpAQCAtMzYyLDM1ICs2Myw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9lcnJvcik7CiAKLXZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQotewotCWlkZV90YXNrX3QgdGFzazsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8Ci0JCQlJREVfVEZMQUdfSU5fTlNFQ1Q7Ci0KLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7Ci0KLQkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKLQkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKLQotY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHMgPSB7Ci0JLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAotCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCi0JLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKLQotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCi0JLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCi0KLQkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKLQkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAotfTsKLQogdm9pZCBpZGVfZml4X2RyaXZlaWQodTE2ICppZCkKIHsKICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCkBAIC00MTIsNyArODQsNyBAQAogICogcmV0dXJuZWQgYnkgdGhlIEFUQV9DTURfSURfQVRBW1BJXSBjb21tYW5kcy4KICAqLwogCi12b2lkIGlkZV9maXhzdHJpbmcgKHU4ICpzLCBjb25zdCBpbnQgYnl0ZWNvdW50LCBjb25zdCBpbnQgYnl0ZXN3YXApCit2b2lkIGlkZV9maXhzdHJpbmcodTggKnMsIGNvbnN0IGludCBieXRlY291bnQsIGNvbnN0IGludCBieXRlc3dhcCkKIHsKIAl1OCAqcCwgKmVuZCA9ICZzW2J5dGVjb3VudCAmIH4xXTsgLyogYnl0ZWNvdW50IG11c3QgYmUgZXZlbiAqLwogCkBAIC00MzUsNDQgKzEwNyw5IEBACiAJd2hpbGUgKHAgIT0gZW5kKQogCQkqcCsrID0gJ1wwJzsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfZml4c3RyaW5nKTsKIAogLyoKLSAqIE5lZWRlZCBmb3IgUENJIGlycSBzaGFyaW5nCi0gKi8KLWludCBkcml2ZV9pc19yZWFkeSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKLQl1OCBzdGF0CQkJPSAwOwotCi0JaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXJldHVybiBod2lmLT5kbWFfb3BzLT5kbWFfdGVzdF9pcnEoZHJpdmUpOwotCi0JLyoKLQkgKiBXZSBkbyBhIHBhc3NpdmUgc3RhdHVzIHRlc3QgdW5kZXIgc2hhcmVkIFBDSSBpbnRlcnJ1cHRzIG9uCi0JICogY2FyZHMgdGhhdCB0cnVseSBzaGFyZSB0aGUgQVRBIHNpZGUgaW50ZXJydXB0LCBidXQgbWF5IGFsc28gc2hhcmUKLQkgKiBhbiBpbnRlcnJ1cHQgd2l0aCBhbm90aGVyIHBjaSBjYXJkL2RldmljZS4gIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMKLQkgKiBhYm91dCBwb3NzaWJsZSBpc2EtcG5wIGFuZCBwY2ktcG5wIGlzc3VlcyB5ZXQuCi0JICovCi0JaWYgKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyICYmCi0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0JST0tFTl9BTFRTVEFUVVMpID09IDApCi0JCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfYWx0c3RhdHVzKGh3aWYpOwotCWVsc2UKLQkJLyogTm90ZTogdGhpcyBtYXkgY2xlYXIgYSBwZW5kaW5nIElSUSEhICovCi0JCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKHN0YXQgJiBBVEFfQlVTWSkKLQkJLyogZHJpdmUgYnVzeTogIGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLwotCQlyZXR1cm4gMDsKLQotCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLwotCXJldHVybiAxOwotfQotCi1FWFBPUlRfU1lNQk9MKGRyaXZlX2lzX3JlYWR5KTsKLQotLyoKICAqIFRoaXMgcm91dGluZSBidXN5LXdhaXRzIGZvciB0aGUgZHJpdmUgc3RhdHVzIHRvIGJlIG5vdCAiYnVzeSIuCiAgKiBJdCB0aGVuIGNoZWNrcyB0aGUgc3RhdHVzIGZvciBhbGwgb2YgdGhlICJnb29kIiBiaXRzIGFuZCBub25lCiAgKiBvZiB0aGUgImJhZCIgYml0cywgYW5kIGlmIGFsbCBpcyBva2F5IGl0IHJldHVybnMgMC4gIEFsbCBvdGhlcgpAQCAtNDgzLDcgKzEyMCw4IEBACiAgKiBzZXR0aW5nIGEgdGltZXIgdG8gd2FrZSB1cCBhdCBoYWxmIHNlY29uZCBpbnRlcnZhbHMgdGhlcmVhZnRlciwKICAqIHVudGlsIHRpbWVvdXQgaXMgYWNoaWV2ZWQsIGJlZm9yZSB0aW1pbmcgb3V0LgogICovCi1zdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1OCAqcnN0YXQpCitzdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdTggKnJzdGF0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwpAQCAtNTQxLDcgKzE3OSw4IEBACiAgKiBUaGUgY2FsbGVyIHNob3VsZCByZXR1cm4gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgInN0YXJ0c3RvcCIgaW4gdGhpcyBjYXNlLAogICogInN0YXJ0c3RvcCIgaXMgdW5jaGFuZ2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4KICAqLwotaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICpzdGFydHN0b3AsIGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCitpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKnN0YXJ0c3RvcCwgaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLAorCQkgIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCWludCBlcnI7CiAJdTggc3RhdDsKQEAgLTU2MSw3ICsyMDAsNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfd2FpdF9zdGF0KTsKIAogLyoqCkBAIC01ODIsNyArMjIwLDYgQEAKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5fZHJpdmVfbGlzdCk7CiAKIC8qCkBAIC02MDcsNyArMjQ0LDcgQEAKICAqICBBbGwgaG9zdHMgdGhhdCB1c2UgdGhlIDgwYyByaWJib24gbXVzdCB1c2UhCiAgKiAgVGhlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHVwcGVyIGJ5dGUgb2Ygd29yZCA5MyBhbmQgdGhlIDgwYyByaWJib24uCiAgKi8KLXU4IGVpZ2h0eV9uaW50eV90aHJlZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQordTggZWlnaHR5X25pbnR5X3RocmVlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKQEAgLTY1Miw0NyArMjg5LDE5IEBACiAKIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXUxNiAqaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBzdGF0OworCWludCByYzsKIAotCS8qCi0JICogUmUtcmVhZCBkcml2ZS0+aWQgZm9yIHBvc3NpYmxlIERNQSBtb2RlCi0JICogY2hhbmdlIChjb3BpZWQgZnJvbSBpZGUtcHJvYmUuYykKLQkgKi8KKwlpZCA9IGttYWxsb2MoU0VDVE9SX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmIChpZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7Ci0JbXNsZWVwKDUwKTsKLQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lEX0FUQSk7Ci0KLQlpZiAoaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDEpKSB7Ci0JCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXNsZWVwKDUwKTsJLyogd2FpdCBmb3IgSVJRIGFuZCBBVEFfRFJRICovCi0Jc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgQVRBX0RSUSwgQkFEX1JfU1RBVCkpIHsKLQkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQlwcmludGsoIiVzOiBDSEVDSyBmb3IgZ29vZCBTVEFUVVNcbiIsIGRyaXZlLT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgQVRBX0NNRF9JRF9BVEEsIGlkKTsKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaWQgPSBrbWFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWlkKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgaWQsIFNFQ1RPUl9TSVpFKTsKLQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwkvKiBjbGVhciBkcml2ZSBJUlEgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWlkZV9maXhfZHJpdmVpZChpZCk7CisKKwlpZiAocmMpCisJCWdvdG8gb3V0X2VycjsKIAogCWRyaXZlLT5pZFtBVEFfSURfVURNQV9NT0RFU10gID0gaWRbQVRBX0lEX1VETUFfTU9ERVNdOwogCWRyaXZlLT5pZFtBVEFfSURfTVdETUFfTU9ERVNdID0gaWRbQVRBX0lEX01XRE1BX01PREVTXTsKQEAgLTcwNSw2ICszMTQsMTIgQEAKIAkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCiAJcmV0dXJuIDE7CitvdXRfZXJyOgorCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlpZiAocmMgPT0gMikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGJhZCBzdGF0dXNcbiIsIGRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CisJa2ZyZWUoaWQpOworCXJldHVybiAwOwogfQogCiBpbnQgaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQpAQCAtNzMxLDE4ICszNDYsMTUgQEAKIAkgKiBidXQgZm9yIHNvbWUgcmVhc29uIHRoZXNlIGRvbid0IHdvcmsgYXQKIAkgKiB0aGlzIHBvaW50IChsb3N0IGludGVycnVwdCkuCiAJICovCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNlbGVjdCB0aGUgZHJpdmUsIGFuZCBpc3N1ZSB0aGUgU0VURkVBVFVSRVMgY29tbWFuZAotICAgICAgICAgKi8KLQlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKLQkKKwogCS8qCiAJICoJRklYTUU6IHdlIHJhY2UgYWdhaW5zdCB0aGUgcnVubmluZyBJUlEgaGVyZSBpZgogCSAqCXRoaXMgaXMgY2FsbGVkIGZyb20gbm9uIElSUSBjb250ZXh0LiBJZiB3ZSB1c2UKIAkgKglkaXNhYmxlX2lycSgpIHdlIGhhbmcgb24gdGhlIGVycm9yIHBhdGguIFdvcmsKIAkgKglpcyBuZWVkZWQuCiAJICovCi0JIAorCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOworCiAJdWRlbGF5KDEpOwogCVNFTEVDVF9EUklWRShkcml2ZSk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwpAQCAtODEyLDggKzQyNCw4IEBACiAgKgogICogU2VlIGFsc28gaWRlX2V4ZWN1dGVfY29tbWFuZAogICovCi1zdGF0aWMgdm9pZCBfX2lkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKKwkJICAgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKQEAgLTgzNSw5ICs0NDcsOCBAQAogCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfc2V0X2hhbmRsZXIpOwotIAorCiAvKioKICAqCWlkZV9leGVjdXRlX2NvbW1hbmQJLQlleGVjdXRlIGFuIElERSBjb21tYW5kCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBpc3N1ZSB0aGUgY29tbWFuZCBhZ2FpbnN0CkBAIC04NDcsNyArNDU4LDcgQEAKICAqCUBleHBpcnk6ICBoYW5kbGVyIHRvIHJ1biBvbiB0aW1lb3V0CiAgKgogICoJSGVscGVyIGZ1bmN0aW9uIHRvIGlzc3VlIGFuIElERSBjb21tYW5kLiBUaGlzIGhhbmRsZXMgdGhlCi0gKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZSAKKyAqCWF0b21pY2l0eSByZXF1aXJlbWVudHMsIGNvbW1hbmQgdGltaW5nIGFuZCBlbnN1cmVzIHRoYXQgdGhlCiAgKgloYW5kbGVyIGFuZCBJUlEgc2V0dXAgZG8gbm90IHJhY2UuIEFsbCBJREUgY29tbWFuZCBraWNrIG9mZgogICoJc2hvdWxkIGdvIHZpYSB0aGlzIGZ1bmN0aW9uIG9yIGRvIGVxdWl2YWxlbnQgbG9ja2luZy4KICAqLwpAQCAtODg0LDMwMSArNDk1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjdXRlX3BrdF9jbWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycikKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0KLQlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7Ci19Ci0KLS8qIG5lZWRlZCBiZWxvdyAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICosIGludCk7Ci0KLS8qCi0gKiBhdGFwaV9yZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcwotICogZHVyaW5nIGFuIGF0YXBpIGRyaXZlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlIGhhcyBub3QgeWV0IHJlc3BvbmRlZCwKLSAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCi0gKiBmb3IgYW5vdGhlciA1MG1zLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IHN0YXQ7Ci0KLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCXVkZWxheSAoMTApOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKE9LX1NUQVQoc3RhdCwgMCwgQVRBX0JVU1kpKQotCQlwcmludGsoIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOwotCWVsc2UgewotCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KLQkJCXJldHVybiBpZGVfc3RhcnRlZDsKLQkJfQotCQkvKiBlbmQgb2YgcG9sbGluZyAqLwotCQlod2lmLT5wb2xsaW5nID0gMDsKLQkJcHJpbnRrKCIlczogQVRBUEkgcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAotCQkJCWRyaXZlLT5uYW1lLCBzdGF0KTsKLQkJLyogZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ICovCi0JCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDEpOwotCX0KLQkvKiBkb25lIHBvbGxpbmcgKi8KLQlod2lmLT5wb2xsaW5nID0gMDsKLQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIDApOwotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihpZGVfaHdpZl90ICpod2lmLCB1OCBlcnIpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmVycl9tYXN0ZXJfdmFsc1tdID0KLQkJeyBOVUxMLCAicGFzc2VkIiwgImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiLAotCQkgICJzZWN0b3IgYnVmZmVyIGVycm9yIiwgIkVDQyBjaXJjdWl0cnkgZXJyb3IiLAotCQkgICJjb250cm9sbGluZyBNUFUgZXJyb3IiIH07Ci0KLQl1OCBlcnJfbWFzdGVyID0gZXJyICYgMHg3ZjsKLQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0OiBtYXN0ZXI6ICIsIGh3aWYtPm5hbWUpOwotCWlmIChlcnJfbWFzdGVyICYmIGVycl9tYXN0ZXIgPCA2KQotCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGVycl9tYXN0ZXJfdmFsc1tlcnJfbWFzdGVyXSk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9DT05UICJlcnJvciAoMHglMDJ4PykiLCBlcnIpOwotCWlmIChlcnIgJiAweDgwKQotCQlwcmludGsoS0VSTl9DT05UICI7IHNsYXZlOiBmYWlsZWQiKTsKLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotfQotCi0vKgotICogcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKLSAqIGR1cmluZyBhbiBpZGUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmVzIGhhdmUgbm90IHlldCByZXNwb25kZWQsCi0gKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAotICogZm9yIGFub3RoZXIgNTBtcy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZXNldF9wb2xsZnVuYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXU4IHRtcDsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRfcG9sbCkgewotCQllcnIgPSBwb3J0X29wcy0+cmVzZXRfcG9sbChkcml2ZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhvc3QgcmVzZXRfcG9sbCBmYWlsdXJlIGZvciAlcy5cbiIsCi0JCQkJaHdpZi0+bmFtZSwgZHJpdmUtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQl0bXAgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7Ci0JCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQkJLyogY29udGludWUgcG9sbGluZyAqLwotCQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCQl9Ci0JCXByaW50aygiJXM6IHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwgaHdpZi0+bmFtZSwgdG1wKTsKLQkJZHJpdmUtPmZhaWx1cmVzKys7Ci0JCWVyciA9IC1FSU87Ci0JfSBlbHNlICB7Ci0JCXRtcCA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKLQotCQlpZiAodG1wID09IDEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldDogc3VjY2Vzc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCQlkcml2ZS0+ZmFpbHVyZXMgPSAwOwotCQl9IGVsc2UgewotCQkJaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihod2lmLCB0bXApOwotCQkJZHJpdmUtPmZhaWx1cmVzKys7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQotb3V0OgotCWh3aWYtPnBvbGxpbmcgPSAwOwkvKiBkb25lIHBvbGxpbmcgKi8KLQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIGVycik7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZGlza19wcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWludCBsZWdhY3kgPSAoZHJpdmUtPmlkW0FUQV9JRF9DRlNfRU5BQkxFXzJdICYgMHgwNDAwKSA/IDAgOiAxOwotCi0JZHJpdmUtPnNwZWNpYWwuYWxsID0gMDsKLQlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IGxlZ2FjeTsKLQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlICA9IGxlZ2FjeTsKLQotCWRyaXZlLT5tdWx0X2NvdW50ID0gMDsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUEFSS0VEOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDAgJiYKLQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKQotCQlkcml2ZS0+bXVsdF9yZXEgPSAwOwotCi0JaWYgKGRyaXZlLT5tdWx0X3JlcSAhPSBkcml2ZS0+bXVsdF9jb3VudCkKLQkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVsdG1vZGUgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gZHJpdmUtPmh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJaWRlX2Rpc2tfcHJlX3Jlc2V0KGRyaXZlKTsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BPU1RfUkVTRVQ7Ci0KLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpIHsKLQkJaWYgKGRyaXZlLT5jcmNfY291bnQpCi0JCQlpZGVfY2hlY2tfZG1hX2NyYyhkcml2ZSk7Ci0JCWVsc2UKLQkJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKLQl9Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCkgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKSB7Ci0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOwotCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5wcmVfcmVzZXQpCi0JCXBvcnRfb3BzLT5wcmVfcmVzZXQoZHJpdmUpOwotCi0JaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkICE9IDB4ZmYpCi0JCWRyaXZlLT5kZXNpcmVkX3NwZWVkID0gZHJpdmUtPmN1cnJlbnRfc3BlZWQ7Ci0JZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSAweGZmOwotfQotCi0vKgotICogZG9fcmVzZXQxKCkgYXR0ZW1wdHMgdG8gcmVjb3ZlciBhIGNvbmZ1c2VkIGRyaXZlIGJ5IHJlc2V0dGluZyBpdC4KLSAqIFVuZm9ydHVuYXRlbHksIHJlc2V0dGluZyBhIGRpc2sgZHJpdmUgYWN0dWFsbHkgcmVzZXRzIGFsbCBkZXZpY2VzIG9uCi0gKiB0aGUgc2FtZSBpbnRlcmZhY2UsIHNvIGl0IGNhbiByZWFsbHkgYmUgdGhvdWdodCBvZiBhcyByZXNldHRpbmcgdGhlCi0gKiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gcmVzZXR0aW5nIHRoZSBkcml2ZS4KLSAqCi0gKiBBVEFQSSBkZXZpY2VzIGhhdmUgdGhlaXIgb3duIHJlc2V0IG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgdGhlbSB0byBiZQotICogaW5kaXZpZHVhbGx5IHJlc2V0IHdpdGhvdXQgY2xvYmJlcmluZyBvdGhlciBkZXZpY2VzIG9uIHRoZSBzYW1lIGludGVyZmFjZS4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5LCB0aGUgSURFIGludGVyZmFjZSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gbGV0Ci0gKiB1cyBrbm93IHdoZW4gdGhlIHJlc2V0IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQsIHNvIHdlIG11c3QgcG9sbCBmb3IgdGhpcy4KLSAqIEVxdWFsbHkgcG9vciwgdGhvdWdoLCBpcyB0aGUgZmFjdCB0aGF0IHRoaXMgbWF5IGEgdmVyeSBsb25nIHRpbWUgdG8gY29tcGxldGUsCi0gKiAodXAgdG8gMzAgc2Vjb25kcyB3b3JzdGNhc2UpLiAgU28sIGluc3RlYWQgb2YgYnVzeS13YWl0aW5nIGhlcmUgZm9yIGl0LAotICogd2Ugc2V0IGEgdGltZXIgdG8gcG9sbCBhdCA1MG1zIGludGVydmFscy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHM7Ci0JaWRlX2RyaXZlX3QgKnRkcml2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OwotCWludCBpOwotCURFRklORV9XQUlUKHdhaXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLwotCUJVR19PTihod2lmLT5oYW5kbGVyICE9IE5VTEwpOwotCi0JLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgewotCQlwcmVfcmVzZXQoZHJpdmUpOwotCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCQl1ZGVsYXkgKDIwKTsKLQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwotCQluZGVsYXkoNDAwKTsKLQkJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwotCQlod2lmLT5wb2xsaW5nID0gMTsKLQkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBpZGVfc3RhcnRlZDsKLQl9Ci0KLQkvKiBXZSBtdXN0IG5vdCBkaXN0dXJiIGRldmljZXMgaW4gdGhlIElERV9ERkxBR19QQVJLRUQgc3RhdGUuICovCi0JZG8gewotCQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCQlwcmVwYXJlX3RvX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQl0aW1lb3V0ID0gamlmZmllczsKLQkJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikgewotCQkJaWYgKHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQgJiYKLQkJCSAgICB0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQgJiYKLQkJCSAgICB0aW1lX2FmdGVyKHRkcml2ZS0+c2xlZXAsIHRpbWVvdXQpKQotCQkJCXRpbWVvdXQgPSB0ZHJpdmUtPnNsZWVwOwotCQl9Ci0KLQkJbm93ID0gamlmZmllczsKLQkJaWYgKHRpbWVfYmVmb3JlX2VxKHRpbWVvdXQsIG5vdykpCi0JCQlicmVhazsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSh0aW1lb3V0IC0gbm93KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQl9IHdoaWxlICh0aW1lb3V0KTsKLQlmaW5pc2hfd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0KTsKLQotCS8qCi0JICogRmlyc3QsIHJlc2V0IGFueSBkZXZpY2Ugc3RhdGUgZGF0YSB3ZSB3ZXJlIG1haW50YWluaW5nCi0JICogZm9yIGFueSBvZiB0aGUgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgotCSAqLwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpCi0JCXByZV9yZXNldCh0ZHJpdmUpOwotCi0JaWYgKGlvX3BvcnRzLT5jdGxfYWRkciA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAtRU5YSU8pOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgYWxzbyBzZXQgbklFTiB3aGlsZSByZXNldHRpbmcgdGhlIGRldmljZSwKLQkgKiB0byBtYXNrIHVud2FudGVkIGludGVycnVwdHMgZnJvbSB0aGUgaW50ZXJmYWNlIGR1cmluZyB0aGUgcmVzZXQuCi0JICogSG93ZXZlciwgZHVlIHRvIHRoZSBkZXNpZ24gb2YgUEMgaGFyZHdhcmUsIHRoaXMgd2lsbCBjYXVzZSBhbgotCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCi0JICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0Ci0JICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KLQkgKgotCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKLQkgKi8KLQkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLwotCXRwX29wcy0+c2V0X2lycShod2lmLCA0KTsKLQkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KLQl1ZGVsYXkoMTApOwotCS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKHVubGVzcyBkZXZpY2UgaXMgb24gdGhlIHF1aXJrIGxpc3QpICovCi0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGRyaXZlLT5xdWlya19saXN0ID09IDIpOwotCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwotCXVkZWxheSgxMCk7Ci0JaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwotCWh3aWYtPnBvbGxpbmcgPSAxOwotCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQotCS8qCi0JICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCi0JICogc3RhdGUgd2hlbiB0aGUgZGlza3MgYXJlIHJlc2V0IHRoaXMgd2F5LiBBdCBsZWFzdCwgdGhlIFdpbmJvbmQKLQkgKiA1NTMgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQKLQkgKi8KLQlwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRwcm9jKQotCQlwb3J0X29wcy0+cmVzZXRwcm9jKGRyaXZlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLS8qCi0gKiBpZGVfZG9fcmVzZXQoKSBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGRyaXZlL2ludGVyZmFjZSByZXNldCBjb2RlLgotICovCi0KLWlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAwKTsKLX0KLQotRVhQT1JUX1NZTUJPTChpZGVfZG9fcmVzZXQpOwotCiAvKgogICogaWRlX3dhaXRfbm90X2J1c3koKSB3YWl0cyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkZXZpY2Ugb24gdGhlIGh3aWYKICAqIHRvIHJlcG9ydCBhIG5vbi1idXN5IHN0YXR1cywgc2VlIGNvbW1lbnRzIGluIGlkZV9wcm9iZV9wb3J0KCkuCkBAIC0xMTg3LDcgKzUwMyw3IEBACiB7CiAJdTggc3RhdCA9IDA7CiAKLQl3aGlsZSh0aW1lb3V0LS0pIHsKKwl3aGlsZSAodGltZW91dC0tKSB7CiAJCS8qCiAJCSAqIFR1cm4gdGhpcyBpbnRvIGEgc2NoZWR1bGUoKSBzbGVlcCBvbmNlIEknbSBzdXJlCiAJCSAqIGFib3V0IGxvY2tpbmcgaXNzdWVzICgyLjUgd29yayA/KS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCAwOTUyNmEwLi5mNmM2ODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC01LDE2MyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICp1ZG1hX3N0cltdID0KLQkgeyAiVURNQS8xNiIsICJVRE1BLzI1IiwgICJVRE1BLzMzIiwgICJVRE1BLzQ0IiwKLQkgICAiVURNQS82NiIsICJVRE1BLzEwMCIsICJVRE1BLzEzMyIsICJVRE1BNyIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICptd2RtYV9zdHJbXSA9Ci0JeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqc3dkbWFfc3RyW10gPQotCXsgIlNXRE1BMCIsICJTV0RNQTEiLCAiU1dETUEyIiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKnBpb19zdHJbXSA9Ci0JeyAiUElPMCIsICJQSU8xIiwgIlBJTzIiLCAiUElPMyIsICJQSU80IiwgIlBJTzUiIH07Ci0KLS8qKgotICoJaWRlX3hmZXJfdmVyYm9zZQktCXJldHVybiBJREUgbW9kZSBuYW1lcwotICoJQG1vZGU6IHRyYW5zZmVyIG1vZGUKLSAqCi0gKglSZXR1cm5zIGEgY29uc3RhbnQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUgbW9kZQotICoJcmVxdWVzdGVkLgotICovCi0KLWNvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSkKLXsKLQljb25zdCBjaGFyICpzOwotCXU4IGkgPSBtb2RlICYgMHhmOwotCi0JaWYgKG1vZGUgPj0gWEZFUl9VRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1VETUFfNykKLQkJcyA9IHVkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9NV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfTVdfRE1BXzIpCi0JCXMgPSBtd2RtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX1NXX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9TV19ETUFfMikKLQkJcyA9IHN3ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfUElPXzAgJiYgbW9kZSA8PSBYRkVSX1BJT181KQotCQlzID0gcGlvX3N0cltpICYgMHg3XTsKLQllbHNlIGlmIChtb2RlID09IFhGRVJfUElPX1NMT1cpCi0JCXMgPSAiUElPIFNMT1ciOwotCWVsc2UKLQkJcyA9ICJYRkVSIEVSUk9SIjsKLQotCXJldHVybiBzOwotfQotRVhQT1JUX1NZTUJPTChpZGVfeGZlcl92ZXJib3NlKTsKLQotLyoqCi0gKglpZGVfcmF0ZV9maWx0ZXIJCS0JZmlsdGVyIHRyYW5zZmVyIG1vZGUKLSAqCUBkcml2ZTogSURFIGRldmljZQotICoJQHNwZWVkOiBkZXNpcmVkIHNwZWVkCi0gKgotICoJR2l2ZW4gdGhlIGF2YWlsYWJsZSB0cmFuc2ZlciBtb2RlcyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqCXRoZSBiZXN0IGF2YWlsYWJsZSBzcGVlZCBhdCBvciBiZWxvdyB0aGUgc3BlZWQgcmVxdWVzdGVkLgotICoKLSAqCVRPRE86IGNoZWNrIGRldmljZSBQSU8gY2FwYWJpbGl0aWVzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9yYXRlX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBtb2RlID0gaWRlX2ZpbmRfZG1hX21vZGUoZHJpdmUsIHNwZWVkKTsKLQotCWlmIChtb2RlID09IDApIHsKLQkJaWYgKGh3aWYtPnBpb19tYXNrKQotCQkJbW9kZSA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxICsgWEZFUl9QSU9fMDsKLQkJZWxzZQotCQkJbW9kZSA9IFhGRVJfUElPXzQ7Ci0JfQotCi0vKglwcmludGsoIiVzOiBtb2RlIDB4JTAyeCwgc3BlZWQgMHglMDJ4XG4iLCBfX2Z1bmNfXywgbW9kZSwgc3BlZWQpOyAqLwotCi0JcmV0dXJuIG1pbihzcGVlZCwgbW9kZSk7Ci19Ci0KLS8qKgotICoJaWRlX2dldF9iZXN0X3Bpb19tb2RlCS0JZ2V0IFBJTyBtb2RlIGZyb20gZHJpdmUKLSAqCUBkcml2ZTogZHJpdmUgdG8gY29uc2lkZXIKLSAqCUBtb2RlX3dhbnRlZDogcHJlZmVycmVkIG1vZGUKLSAqCUBtYXhfbW9kZTogaGlnaGVzdCBhbGxvd2VkIG1vZGUKLSAqCi0gKglUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgcmVjb21tZW5kZWQgUElPIHNldHRpbmdzIGZvciBhIGdpdmVuIGRyaXZlLAotICoJYmFzZWQgb24gdGhlIGRyaXZlLT5pZCBpbmZvcm1hdGlvbiBhbmQgdGhlIGlkZV9waW9fYmxhY2tsaXN0W10uCi0gKgotICoJRHJpdmUgUElPIG1vZGUgaXMgYXV0by1zZWxlY3RlZCBpZiAyNTUgaXMgcGFzc2VkIGFzIG1vZGVfd2FudGVkLgotICoJVGhpcyBpcyB1c2VkIGJ5IG1vc3QgY2hpcHNldCBzdXBwb3J0IG1vZHVsZXMgd2hlbiAiYXV0by10dW5pbmciLgotICovCi0KLXU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKLXsKLQl1MTYgKmlkID0gZHJpdmUtPmlkOwotCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKLQotCWlmIChtb2RlX3dhbnRlZCAhPSAyNTUpCi0JCXJldHVybiBtaW5fdCh1OCwgbW9kZV93YW50ZWQsIG1heF9tb2RlKTsKLQotCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCkgPT0gMCkKLQkJcGlvX21vZGUgPSBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7Ci0KLQlpZiAocGlvX21vZGUgIT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlzIG9uIFBJTyBibGFja2xpc3RcbiIsIGRyaXZlLT5uYW1lKTsKLQl9IGVsc2UgewotCQlwaW9fbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4OwotCQlpZiAocGlvX21vZGUgPiAyKSB7CS8qIDIgaXMgbWF4aW11bSBhbGxvd2VkIHRQSU8gdmFsdWUgKi8KLQkJCXBpb19tb2RlID0gMjsKLQkJCW92ZXJyaWRkZW4gPSAxOwotCQl9Ci0KLQkJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CSAgICAgIC8qIEFUQTI/ICovCi0JCQlpZiAoYXRhX2lkX2hhc19pb3JkeShpZCkpIHsKLQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA3KSB7Ci0JCQkJCW92ZXJyaWRkZW4gPSAwOwotCQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA0KQotCQkJCQkJcGlvX21vZGUgPSA1OwotCQkJCQllbHNlIGlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDIpCi0JCQkJCQlwaW9fbW9kZSA9IDQ7Ci0JCQkJCWVsc2UKLQkJCQkJCXBpb19tb2RlID0gMzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAob3ZlcnJpZGRlbikKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0UElPID4gMiwgYXNzdW1pbmcgdFBJTyA9IDJcbiIsCi0JCQkJCSBkcml2ZS0+bmFtZSk7Ci0JfQotCi0JaWYgKHBpb19tb2RlID4gbWF4X21vZGUpCi0JCXBpb19tb2RlID0gbWF4X21vZGU7Ci0KLQlyZXR1cm4gcGlvX21vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZ2V0X2Jlc3RfcGlvX21vZGUpOwotCi0vKiByZXFfcGlvID09ICIyNTUiIGZvciBhdXRvLXR1bmUgKi8KLXZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByZXFfcGlvKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXU4IGhvc3RfcGlvLCBwaW87Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQotCQlyZXR1cm47Ci0KLQlCVUdfT04oaHdpZi0+cGlvX21hc2sgPT0gMHgwMCk7Ci0KLQlob3N0X3BpbyA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxOwotCi0JcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvLCBob3N0X3Bpbyk7Ci0KLQkvKgotCSAqIFRPRE86Ci0JICogLSByZXBvcnQgZGV2aWNlIG1heCBQSU8gbW9kZQotCSAqIC0gY2hlY2sgcmVxX3BpbyAhPSAyNTUgYWdhaW5zdCBkZXZpY2UgbWF4IFBJTyBtb2RlCi0JICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0IG1heCBQSU8lZCB3YW50ZWQgUElPJWQlcyBzZWxlY3RlZCBQSU8lZFxuIiwKLQkJCSAgZHJpdmUtPm5hbWUsIGhvc3RfcGlvLCByZXFfcGlvLAotCQkJICByZXFfcGlvID09IDI1NSA/ICIoYXV0by10dW5lKSIgOiAiIiwgcGlvKTsKLQotCSh2b2lkKWlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOwotCiAvKioKICAqCWlkZV90b2dnbGVfYm91bmNlCS0JaGFuZGxlIGJvdW5jZSBidWZmZXJpbmcKICAqCUBkcml2ZTogZHJpdmUgdG8gdXBkYXRlCkBAIC0xODgsODkgKzMxLDYgQEAKIAkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChkcml2ZS0+cXVldWUsIGFkZHIpOwogfQogCi1pbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogVE9ETzogdGVtcG9yYXJ5IGhhY2sgZm9yIHNvbWUgbGVnYWN5IGhvc3QgZHJpdmVycyB0aGF0IGRpZG4ndAotCSAqIHNldCB0cmFuc2ZlciBtb2RlIG9uIHRoZSBkZXZpY2UgaW4gLT5zZXRfcGlvX21vZGUgbWV0aG9kLi4uCi0JICovCi0JaWYgKHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkgewotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKLQkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQotCQkJcmV0dXJuIC0xOwotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOwotCX0KLX0KLQotaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7Ci0JCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKLQkJCXJldHVybiAtMTsKLQkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOwotCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9kbWFfbW9kZSk7Ci0KLS8qKgotICoJaWRlX3NldF94ZmVyX3JhdGUJLQlzZXQgdHJhbnNmZXIgcmF0ZQotICoJQGRyaXZlOiBkcml2ZSB0byBzZXQKLSAqCUByYXRlOiBzcGVlZCB0byBhdHRlbXB0IHRvIHNldAotICoKLSAqCUdlbmVyYWwgaGVscGVyIGZvciBzZXR0aW5nIHRoZSBzcGVlZCBvZiBhbiBJREUgZGV2aWNlLiBUaGlzCi0gKglmdW5jdGlvbiBrbm93cyBhYm91dCB1c2VyIGVuZm9yY2VkIGxpbWl0cyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCi0gKgl3aGljaCAtPnNldF9waW9fbW9kZS8tPnNldF9kbWFfbW9kZSBkb2VzIG5vdC4KLSAqLwotCi1pbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuIC0xOwotCi0JcmF0ZSA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgcmF0ZSk7Ci0KLQlCVUdfT04ocmF0ZSA8IFhGRVJfUElPXzApOwotCi0JaWYgKHJhdGUgPj0gWEZFUl9QSU9fMCAmJiByYXRlIDw9IFhGRVJfUElPXzUpCi0JCXJldHVybiBpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCByYXRlKTsKLQotCXJldHVybiBpZGVfc2V0X2RtYV9tb2RlKGRyaXZlLCByYXRlKTsKLX0KLQogc3RhdGljIHZvaWQgaWRlX2R1bXBfb3Bjb2RlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwppbmRleCBjODc1YTk1Li5mMzBlNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKQEAgLTYwLDYgKzYxLDMwIEBACiAJcmV0dXJuOwogfQogCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3BhcmtfdW5wYXJrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCWlmIChycS0+Y21kWzBdID09IFJFUV9QQVJLX0hFQURTKSB7CisJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKKwkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CisJCXRmLT5mZWF0dXJlID0gMHg0NDsKKwkJdGYtPmxiYWwgPSAweDRjOworCQl0Zi0+bGJhbSA9IDB4NGU7CisJCXRmLT5sYmFoID0gMHg1NTsKKwkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLworCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOworCisJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCXRhc2sucnEgPSBycTsKKwlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7Cit9CisKIHNzaXplX3QgaWRlX3Bhcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCmluZGV4IGJkZGFlMmIuLjYxMTExZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCkBAIC0zMyw4ICszMyw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsX2dlbmVyaWNfaWRlLCBpZGVfZ2VuZXJpY19hbGwsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbGxfZ2VuZXJpY19pZGUsICJJREUgZ2VuZXJpYyB3aWxsIGNsYWltIGFsbCB1bmtub3duIFBDSSBJREUgc3RvcmFnZSBjb250cm9sbGVycy4iKTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1VNQyAoSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUykKLQogI2RlZmluZSBERUNMQVJFX0dFTkVSSUNfUENJX0RFVihleHRyYV9mbGFncykgXAogCXsgXAogCQkubmFtZQkJPSBEUlZfTkFNRSwgXApAQCAtNjEsNyArNTksNyBAQAogCS8qICAyOiBTQU1VUkFJIC8gSFQ2NTY1IC8gSElOVF9JREUgKi8KIAlERUNMQVJFX0dFTkVSSUNfUENJX0RFVigwKSwKIAkvKiAgMzogVU04NjczRiAvIFVNODg4NkEgLyBVTTg4ODZCRiAqLwotCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR1NfVU1DKSwKKwlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdfTk9fRE1BKSwKIAkvKiAgNDogVklBX0lERSAvIE9QVEk2MjFWIC8gUGljY29sbzAxMHsyLDMsNX0gKi8KIAlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdfTk9fQVVUT0RNQSksCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggZWU4ZTNlNy4uOTc0MDY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTE4MSwxNiArMTgxLDE2IEBACiAgKglkb19pZGVudGlmeQktCWlkZW50aWZ5IGEgZHJpdmUKICAqCUBkcml2ZTogZHJpdmUgdG8gaWRlbnRpZnkgCiAgKglAY21kOiBjb21tYW5kIHVzZWQKKyAqCUBpZDogYnVmZmVyIGZvciBJREVOVElGWSBkYXRhCiAgKgogICoJQ2FsbGVkIHdoZW4gd2UgaGF2ZSBpc3N1ZWQgYSBkcml2ZSBpZGVudGlmeSBjb21tYW5kIHRvCiAgKglyZWFkIGFuZCBwYXJzZSB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBydW4gd2l0aAogICoJaW50ZXJydXB0cyBkaXNhYmxlZC4gCiAgKi8KIAotc3RhdGljIHZvaWQgZG9faWRlbnRpZnkoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCitzdGF0aWMgdm9pZCBkb19pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgdTE2ICppZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTE2ICppZCA9IGRyaXZlLT5pZDsKIAljaGFyICptID0gKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJzd2FwID0gMTsKQEAgLTIzMywxNiArMjMzLDYgQEAKIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ERUFEOwogCi0JLyoKLQkgKiBDaGVjayBmb3IgYW4gQVRBUEkgZGV2aWNlCi0JICovCi0JaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKQotCQlpZGVfY2xhc3NpZnlfYXRhcGlfZGV2KGRyaXZlKTsKLQllbHNlCi0JLyoKLQkgKiBOb3QgYW4gQVRBUEkgZGV2aWNlOiBsb29rcyBsaWtlIGEgInJlZ3VsYXIiIGhhcmQgZGlzawotCSAqLwotCQlpZGVfY2xhc3NpZnlfYXRhX2Rldihkcml2ZSk7CiAJcmV0dXJuOwogZXJyX21pc2M6CiAJa2ZyZWUoaWQpOwpAQCAtMjUwLDIxICsyNDAsMTkgQEAKIH0KIAogLyoqCi0gKglhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5CS0Jc2VuZCBhdGEvYXRhcGkgaWRlbnRpZnkKKyAqCWlkZV9kZXZfcmVhZF9pZAktCXNlbmQgQVRBL0FUQVBJIElERU5USUZZIGNvbW1hbmQKICAqCUBkcml2ZTogZHJpdmUgdG8gaWRlbnRpZnkKICAqCUBjbWQ6IGNvbW1hbmQgdG8gdXNlCisgKglAaWQ6IGJ1ZmZlciBmb3IgSURFTlRJRlkgZGF0YQogICoKLSAqCXRyeV90b19pZGVudGlmeSgpIHNlbmRzIGFuIEFUQShQSSkgSURFTlRJRlkgcmVxdWVzdCB0byBhIGRyaXZlCi0gKglhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuICBJdCBhbHNvIG1vbml0b3JzIGlycXMgd2hpbGUgdGhpcyBpcwotICoJaGFwcGVuaW5nLCBpbiBob3BlIG9mIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgd2hpY2ggb25lIGlzCi0gKgliZWluZyB1c2VkIGJ5IHRoZSBpbnRlcmZhY2UuCisgKglTZW5kcyBhbiBBVEEoUEkpIElERU5USUZZIHJlcXVlc3QgdG8gYSBkcml2ZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuCiAgKgogICoJUmV0dXJuczoJMCAgZGV2aWNlIHdhcyBpZGVudGlmaWVkCiAgKgkJCTEgIGRldmljZSB0aW1lZC1vdXQgKG5vIHJlc3BvbnNlIHRvIGlkZW50aWZ5IHJlcXVlc3QpCiAgKgkJCTIgIGRldmljZSBhYm9ydGVkIHRoZSBjb21tYW5kIChyZWZ1c2VkIHRvIGlkZW50aWZ5IGl0c2VsZikKICAqLwogCi1zdGF0aWMgaW50IGFjdHVhbF90cnlfdG9faWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQoraW50IGlkZV9kZXZfcmVhZF9pZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgdTE2ICppZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CkBAIC0yNzMsNiArMjYxLDEzIEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXU4IHMgPSAwLCBhID0gMDsKIAorCS8qCisJICogRGlzYWJsZSBkZXZpY2UgSVJRLiAgT3RoZXJ3aXNlIHdlJ2xsIGdldCBzcHVyaW91cyBpbnRlcnJ1cHRzCisJICogZHVyaW5nIHRoZSBpZGVudGlmeSBwaGFzZSB0aGF0IHRoZSBJUlEgaGFuZGxlciBpc24ndCBleHBlY3RpbmcuCisJICovCisJaWYgKGlvX3BvcnRzLT5jdGxfYWRkcikKKwkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOworCiAJLyogdGFrZSBhIGRlZXAgYnJlYXRoICovCiAJbXNsZWVwKDUwKTsKIApAQCAtMzE3LDcgKzMxMiw3IEBACiAKIAlpZiAoT0tfU1RBVChzLCBBVEFfRFJRLCBCQURfUl9TVEFUKSkgewogCQkvKiBkcml2ZSByZXR1cm5lZCBJRCAqLwotCQlkb19pZGVudGlmeShkcml2ZSwgY21kKTsKKwkJZG9faWRlbnRpZnkoZHJpdmUsIGNtZCwgaWQpOwogCQkvKiBkcml2ZSByZXNwb25kZWQgd2l0aCBJRCAqLwogCQlyYyA9IDA7CiAJCS8qIGNsZWFyIGRyaXZlIElSUSAqLwpAQCAtMzI5LDYzICszMjQsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyoqCi0gKgl0cnlfdG9faWRlbnRpZnkJLQl0cnkgdG8gaWRlbnRpZnkgYSBkcml2ZQotICoJQGRyaXZlOiBkcml2ZSB0byBwcm9iZQotICoJQGNtZDogY29tbWFuZCB0byB1c2UKLSAqCi0gKglJc3N1ZSB0aGUgaWRlbnRpZnkgY29tbWFuZCBhbmQgdGhlbiBkbyBJUlEgcHJvYmluZyB0bwotICoJY29tcGxldGUgdGhlIGlkZW50aWZpY2F0aW9uIHdoZW4gbmVlZGVkIGJ5IGZpbmRpbmcgdGhlCi0gKglJUlEgdGhlIGRyaXZlIGlzIGF0dGFjaGVkIHRvCi0gKi8KLSAKLXN0YXRpYyBpbnQgdHJ5X3RvX2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQlpbnQgcmV0dmFsOwotCWludCBhdXRvcHJvYmUgPSAwOwotCXVuc2lnbmVkIGxvbmcgY29va2llID0gMDsKLQotCS8qCi0JICogRGlzYWJsZSBkZXZpY2UgaXJxIHVubGVzcyB3ZSBuZWVkIHRvCi0JICogcHJvYmUgZm9yIGl0LiBPdGhlcndpc2Ugd2UnbGwgZ2V0IHNwdXJpb3VzCi0JICogaW50ZXJydXB0cyBkdXJpbmcgdGhlIGlkZW50aWZ5LXBoYXNlIHRoYXQKLQkgKiB0aGUgaXJxIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgotCSAqLwotCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkcikgewotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJYXV0b3Byb2JlID0gMTsKLQkJCWNvb2tpZSA9IHByb2JlX2lycV9vbigpOwotCQl9Ci0JCXRwX29wcy0+c2V0X2lycShod2lmLCBhdXRvcHJvYmUpOwotCX0KLQotCXJldHZhbCA9IGFjdHVhbF90cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7Ci0KLQlpZiAoYXV0b3Byb2JlKSB7Ci0JCWludCBpcnE7Ci0KLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwotCQkvKiBjbGVhciBkcml2ZSBJUlEgKi8KLQkJKHZvaWQpdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQkJdWRlbGF5KDUpOwotCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGNvb2tpZSk7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlpZiAoaXJxID4gMCkgewotCQkJCWh3aWYtPmlycSA9IGlycTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTW1tbS4uIG11bHRpcGxlIElSUXMuLgotCQkJCSAqIGRvbid0IGtub3cgd2hpY2ggd2FzIG91cnMKLQkJCQkgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJUlEgcHJvYmUgZmFpbGVkICgweCVseClcbiIsCi0JCQkJCWRyaXZlLT5uYW1lLCBjb29raWUpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBpZGVfYnVzeV9zbGVlcChpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBhbHRzdGF0dXMpCiB7CiAJdTggc3RhdDsKQEAgLTQ0MCw2ICszNzgsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOworCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJaW50IHJjOwogCXU4IHByZXNlbnQgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpLCBzdGF0OwogCkBAIC00NzUsMTEgKzQxNCwxMCBAQAogCiAJaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEFUQV9CVVNZKSB8fAogCSAgICBwcmVzZW50IHx8IGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKSB7Ci0JCS8qIHNlbmQgY21kIGFuZCB3YWl0ICovCi0JCWlmICgocmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCkpKSB7CisJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKKwkJaWYgKHJjKQogCQkJLyogZmFpbGVkOiB0cnkgYWdhaW4gKi8KLQkJCXJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLGNtZCk7Ci0JCX0KKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKIAogCQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIApAQCAtNDk0LDcgKzQzMiw3IEBACiAJCQltc2xlZXAoNTApOwogCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwogCQkJKHZvaWQpaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDApOwotCQkJcmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7CisJCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CiAJCX0KIAogCQkvKiBlbnN1cmUgZHJpdmUgSVJRIGlzIGNsZWFyICovCkBAIC01MTcsMzcgKzQ1NSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKgotICoKLSAqLwotc3RhdGljIHZvaWQgZW5hYmxlX25lc3QgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQl1OCBzdGF0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsaW5nICVzIC0tICIsCi0JCWh3aWYtPm5hbWUsIChjaGFyICopJmRyaXZlLT5pZFtBVEFfSURfUFJPRF0pOwotCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQltc2xlZXAoNTApOwotCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9FWEFCWVRFX0VOQUJMRV9ORVNUKTsKLQotCWlmIChpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMCkpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkICh0aW1lb3V0KVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltc2xlZXAoNTApOwotCi0Jc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgMCwgQkFEX1NUQVQpKQotCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHN0YXR1cyA9IDB4JTAyeClcbiIsIHN0YXQpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAic3VjY2Vzc1xuIik7Ci19Ci0KIC8qKgogICoJcHJvYmVfZm9yX2RyaXZlcwktCXVwcGVyIGxldmVsIGRyaXZlIHByb2JlCiAgKglAZHJpdmU6IGRyaXZlIHRvIHByb2JlIGZvcgpAQCAtNTYzLDYgKzQ3MCw4IEBACiBzdGF0aWMgdTggcHJvYmVfZm9yX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAljaGFyICptOworCWludCByYzsKKwl1OCBjbWQ7CiAKIAkvKgogCSAqCUluIG9yZGVyIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSB3ZSBoYXZlIGFuIGlkCkBAIC01ODYsMjEgKzQ5NSwxOSBAQAogCiAJLyogc2tpcCBwcm9iaW5nPyAqLwogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSA9PSAwKSB7Ci1yZXRyeToKIAkJLyogaWYgIShzdWNjZXNzfHx0aW1lZC1vdXQpICovCi0JCWlmIChkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEEpID49IDIpCisJCWNtZCA9IEFUQV9DTURfSURfQVRBOworCQlyYyA9IGRvX3Byb2JlKGRyaXZlLCBjbWQpOworCQlpZiAocmMgPj0gMikgewogCQkJLyogbG9vayBmb3IgQVRBUEkgZGV2aWNlICovCi0JCQkodm9pZClkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEFQSSk7CisJCQljbWQgPSBBVEFfQ01EX0lEX0FUQVBJOworCQkJcmMgPSBkb19wcm9iZShkcml2ZSwgY21kKTsKKwkJfQogCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJLyogZHJpdmUgbm90IGZvdW5kICovCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAoc3Ryc3RyKG0sICJFIFggQSBCIFkgVCBFIE4gRSBTIFQiKSkgewotCQkJZW5hYmxlX25lc3QoZHJpdmUpOwotCQkJZ290byByZXRyeTsKLQkJfQotCiAJCS8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZD8gKi8KIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApIHsKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spIHsKQEAgLTYxNCw4ICs1MjEsMTIgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBkZXZpY2Ugb24gYnVzIHJlZnVzZWQgaWRlbnRpZmljYXRpb24uIElnbm9yaW5nLlxuIiwgZHJpdmUtPm5hbWUpOwogCQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKQorCQkJCWlkZV9jbGFzc2lmeV9hdGFwaV9kZXYoZHJpdmUpOworCQkJZWxzZQorCQkJCWlkZV9jbGFzc2lmeV9hdGFfZGV2KGRyaXZlKTsKIAkJfQotCQkvKiBkcml2ZSB3YXMgZm91bmQgKi8KIAl9CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKQEAgLTc3OSw3ICs2OTAsNiBAQAogc3RhdGljIGludCBpZGVfcHJvYmVfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewogCWlkZV9kcml2ZV90ICpkcml2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnFkOwogCWludCBpLCByYyA9IC1FTk9ERVY7CiAKQEAgLTc5Nyw5ICs3MDcsNiBAQAogCWlmIChpcnFkKQogCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOwogCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7Ci0KIAlpZiAoaWRlX3BvcnRfd2FpdF9yZWFkeShod2lmKSA9PSAtRUJVU1kpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogV2FpdCBmb3IgcmVhZHkgZmFpbGVkIGJlZm9yZSBwcm9iZSAhXG4iLCBod2lmLT5uYW1lKTsKIApAQCAtODEzLDggKzcyMCw2IEBACiAJCQlyYyA9IDA7CiAJfQogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCiAJLyoKIAkgKiBVc2UgY2FjaGVkIElSUSBudW1iZXIuIEl0IG1pZ2h0IGJlIChhbmQgaXMuLi4pIGNoYW5nZWQgYnkgcHJvYmUKIAkgKiBjb2RlIGFib3ZlCkBAIC04MzEsMjkgKzczNiwxOCBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnF1aXJrcHJvYykKLQkJCQlwb3J0X29wcy0+cXVpcmtwcm9jKGRyaXZlKTsKLQkJfQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQorCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7CiAJfQogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKIAotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05JQ0UxOwogCi0JCQlpZiAoaHdpZi0+ZG1hX29wcykKLQkJCQlpZGVfc2V0X2RtYShkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKLQkJZWxzZQotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PX0lPXzMyQklUOworCQlpZiAoaHdpZi0+ZG1hX29wcykKKwkJCWlkZV9zZXRfZG1hKGRyaXZlKTsKIAl9CiB9CiAKQEAgLTkyNCwxMCArODE4LDcgQEAKIAlpbnQgaSwgaiA9IDA7CiAKIAltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7Ci0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQlpZiAoaWRlX2luaXRfcXVldWUoZHJpdmUpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlkZTogZmFpbGVkIHRvIGluaXQgJXNcbiIsCiAJCQkJCWRyaXZlLT5uYW1lKTsKQEAgLTk1MywxMyArODQ0LDYgQEAKIAlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyOwogCWludCBzYSA9IDA7CiAKLQltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmh3aWYtPmxvY2spOwotCi0JaW5pdF90aW1lcigmaHdpZi0+dGltZXIpOwotCWh3aWYtPnRpbWVyLmZ1bmN0aW9uID0gJmlkZV90aW1lcl9leHBpcnk7Ci0JaHdpZi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3aWY7Ci0KIAlpcnFfaGFuZGxlciA9IGh3aWYtPmhvc3QtPmlycV9oYW5kbGVyOwogCWlmIChpcnFfaGFuZGxlciA9PSBOVUxMKQogCQlpcnFfaGFuZGxlciA9IGlkZV9pbnRyOwpAQCAtOTk3LDEwICs4ODEsOCBAQAogCQlwcmludGsoS0VSTl9DT05UICIgKHNlcmlhbGl6ZWQpIik7CiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAotCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCXJldHVybiAwOwogb3V0X3VwOgotCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDk5LDE0ICs5ODEsOSBAQAogCiBzdGF0aWMgaW50IGh3aWZfaW5pdChpZGVfaHdpZl90ICpod2lmKQogewotCWludCBvbGRfaXJxOwotCiAJaWYgKCFod2lmLT5pcnEpIHsKLQkJaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCBubyBJUlFcbiIsIGh3aWYtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIG5vIElSUVxuIiwgaHdpZi0+bmFtZSk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoaHdpZi0+bWFqb3IsIGh3aWYtPm5hbWUpKQpAQCAtMTEyNCwyOSArMTAwMSwxMiBAQAogCiAJc2dfaW5pdF90YWJsZShod2lmLT5zZ190YWJsZSwgaHdpZi0+c2dfbWF4X25lbnRzKTsKIAkKLQlpZiAoaW5pdF9pcnEoaHdpZikgPT0gMCkKLQkJZ290byBkb25lOwotCi0Jb2xkX2lycSA9IGh3aWYtPmlycTsKLQkvKgotCSAqCUl0IGZhaWxlZCB0byBpbml0aWFsaXNlLiBGaW5kIHRoZSBkZWZhdWx0IElSUSBmb3IgCi0JICoJdGhpcyBwb3J0IGFuZCB0cnkgdGhhdC4KLQkgKi8KLQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWlmICghaHdpZi0+aXJxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKLQkJCWh3aWYtPm5hbWUsIG9sZF9pcnEpOwotCQlnb3RvIG91dDsKLQl9CiAJaWYgKGluaXRfaXJxKGh3aWYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHByb2JlZCBJUlEgJWQgYW5kIGRlZmF1bHQgSVJRICVkIGZhaWxlZFxuIiwKLQkJCWh3aWYtPm5hbWUsIG9sZF9pcnEsIGh3aWYtPmlycSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCWh3aWYtPm5hbWUsIGh3aWYtPmlycSk7CiAJCWdvdG8gb3V0OwogCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcHJvYmVkIElSUSAlZCBmYWlsZWQsIHVzaW5nIGRlZmF1bHRcbiIsCi0JCWh3aWYtPm5hbWUsIGh3aWYtPmlycSk7CiAKLWRvbmU6CiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihod2lmLT5tYWpvciwgMCksIE1BWF9EUklWRVMgPDwgUEFSVE5fQklUUywKIAkJCSAgICBUSElTX01PRFVMRSwgYXRhX3Byb2JlLCBhdGFfbG9jaywgaHdpZik7CiAJcmV0dXJuIDE7CkBAIC0xMTYxLDEzICsxMDIxLDEwIEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gJmRyaXZlLT5nZW5kZXY7CiAJCWludCByZXQ7CiAKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQljb250aW51ZTsKLQogCQlkZXZfc2V0X25hbWUoZGV2LCAiJXUuJXUiLCBod2lmLT5pbmRleCwgaSk7CiAJCWRldi0+cGFyZW50ID0gJmh3aWYtPmdlbmRldjsKIAkJZGV2LT5idXMgPSAmaWRlX2J1c190eXBlOwpAQCAtMTE5Miw2ICsxMDQ5LDggQEAKIAogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19JT18zMkJJVCkKIAkJCWRyaXZlLT5pb18zMmJpdCA9IDE7CisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKQorCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fSU9fMzJCSVQ7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1VOTUFTS19JUlFTKQogCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19VTk1BU0tfSVJRUykKQEAgLTEyMTMsMTAgKzEwNzIsNiBAQAogCWlmIChkLT5pbml0X2lvcHMpCiAJCWQtPmluaXRfaW9wcyhod2lmKTsKIAotCWlmICgoIWh3aWYtPmlycSAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19MRUdBQ1lfSVJRUykpIHx8Ci0JICAgIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTKSkKLQkJaHdpZi0+aXJxID0gcG9ydCA/IDE1IDogMTQ7Ci0KIAkvKiAtPmhvc3RfZmxhZ3MgbWF5IGJlIHNldCBieSAtPmluaXRfaW9wcyAob3IgZXZlbiBlYXJsaWVyLi4uKSAqLwogCWh3aWYtPmhvc3RfZmxhZ3MgfD0gZC0+aG9zdF9mbGFnczsKIAlod2lmLT5waW9fbWFzayA9IGQtPnBpb19tYXNrOwpAQCAtMTMxNyw2ICsxMTcyLDEyIEBACiAJaHdpZi0+bmFtZVsyXQk9ICdlJzsKIAlod2lmLT5uYW1lWzNdCT0gJzAnICsgaW5kZXg7CiAKKwlzcGluX2xvY2tfaW5pdCgmaHdpZi0+bG9jayk7CisKKwlpbml0X3RpbWVyKCZod2lmLT50aW1lcik7CisJaHdpZi0+dGltZXIuZnVuY3Rpb24gPSAmaWRlX3RpbWVyX2V4cGlyeTsKKwlod2lmLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHdpZjsKKwogCWluaXRfY29tcGxldGlvbigmaHdpZi0+Z2VuZGV2X3JlbF9jb21wKTsKIAogCWh3aWYtPnRwX29wcyA9ICZkZWZhdWx0X3RwX29wczsKQEAgLTE1NjcsNyArMTQyOCw3IEBACiAKIAkJaisrOwogCi0JCWlkZV9hY3BpX2luaXQoaHdpZik7CisJCWlkZV9hY3BpX2luaXRfcG9ydChod2lmKTsKIAogCQlpZiAoaHdpZi0+cHJlc2VudCkKIAkJCWlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwpAQCAtMTYyNCwxMSArMTQ4NSw5IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCWludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwotCQl9CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmRyaXZlLT5nZW5kZXYpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IGE3YjkyODcuLjQxN2NkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJaW50IGk7CiAKIAlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDAgfHwgZHJpdmUtPnByb2MpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJZHJpdmUtPnByb2MgPSBwcm9jX21rZGlyKGRyaXZlLT5uYW1lLCBwYXJlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTBmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKQEAgLTAsMCArMSwyNDYgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqdWRtYV9zdHJbXSA9CisJIHsgIlVETUEvMTYiLCAiVURNQS8yNSIsICAiVURNQS8zMyIsICAiVURNQS80NCIsCisJICAgIlVETUEvNjYiLCAiVURNQS8xMDAiLCAiVURNQS8xMzMiLCAiVURNQTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXdkbWFfc3RyW10gPQorCXsgIk1XRE1BMCIsICJNV0RNQTEiLCAiTVdETUEyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnN3ZG1hX3N0cltdID0KKwl7ICJTV0RNQTAiLCAiU1dETUExIiwgIlNXRE1BMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwaW9fc3RyW10gPQorCXsgIlBJTzAiLCAiUElPMSIsICJQSU8yIiwgIlBJTzMiLCAiUElPNCIsICJQSU81IiB9OworCisvKioKKyAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKKyAqCUBtb2RlOiB0cmFuc2ZlciBtb2RlCisgKgorICoJUmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZGUKKyAqCXJlcXVlc3RlZC4KKyAqLworCitjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IG1vZGUpCit7CisJY29uc3QgY2hhciAqczsKKwl1OCBpID0gbW9kZSAmIDB4ZjsKKworCWlmIChtb2RlID49IFhGRVJfVURNQV8wICYmIG1vZGUgPD0gWEZFUl9VRE1BXzcpCisJCXMgPSB1ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfTVdfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX01XX0RNQV8yKQorCQlzID0gbXdkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9TV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfU1dfRE1BXzIpCisJCXMgPSBzd2RtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNSkKKwkJcyA9IHBpb19zdHJbaSAmIDB4N107CisJZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQorCQlzID0gIlBJTyBTTE9XIjsKKwllbHNlCisJCXMgPSAiWEZFUiBFUlJPUiI7CisKKwlyZXR1cm4gczsKK30KK0VYUE9SVF9TWU1CT0woaWRlX3hmZXJfdmVyYm9zZSk7CisKKy8qKgorICoJaWRlX2dldF9iZXN0X3Bpb19tb2RlCS0JZ2V0IFBJTyBtb2RlIGZyb20gZHJpdmUKKyAqCUBkcml2ZTogZHJpdmUgdG8gY29uc2lkZXIKKyAqCUBtb2RlX3dhbnRlZDogcHJlZmVycmVkIG1vZGUKKyAqCUBtYXhfbW9kZTogaGlnaGVzdCBhbGxvd2VkIG1vZGUKKyAqCisgKglUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgcmVjb21tZW5kZWQgUElPIHNldHRpbmdzIGZvciBhIGdpdmVuIGRyaXZlLAorICoJYmFzZWQgb24gdGhlIGRyaXZlLT5pZCBpbmZvcm1hdGlvbiBhbmQgdGhlIGlkZV9waW9fYmxhY2tsaXN0W10uCisgKgorICoJRHJpdmUgUElPIG1vZGUgaXMgYXV0by1zZWxlY3RlZCBpZiAyNTUgaXMgcGFzc2VkIGFzIG1vZGVfd2FudGVkLgorICoJVGhpcyBpcyB1c2VkIGJ5IG1vc3QgY2hpcHNldCBzdXBwb3J0IG1vZHVsZXMgd2hlbiAiYXV0by10dW5pbmciLgorICovCisKK3U4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKK3sKKwl1MTYgKmlkID0gZHJpdmUtPmlkOworCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKKworCWlmIChtb2RlX3dhbnRlZCAhPSAyNTUpCisJCXJldHVybiBtaW5fdCh1OCwgbW9kZV93YW50ZWQsIG1heF9tb2RlKTsKKworCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCkgPT0gMCkKKwkJcGlvX21vZGUgPSBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7CisKKwlpZiAocGlvX21vZGUgIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlzIG9uIFBJTyBibGFja2xpc3RcbiIsIGRyaXZlLT5uYW1lKTsKKwl9IGVsc2UgeworCQlwaW9fbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4OworCQlpZiAocGlvX21vZGUgPiAyKSB7CS8qIDIgaXMgbWF4aW11bSBhbGxvd2VkIHRQSU8gdmFsdWUgKi8KKwkJCXBpb19tb2RlID0gMjsKKwkJCW92ZXJyaWRkZW4gPSAxOworCQl9CisKKwkJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CSAgICAgIC8qIEFUQTI/ICovCisJCQlpZiAoYXRhX2lkX2hhc19pb3JkeShpZCkpIHsKKwkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA3KSB7CisJCQkJCW92ZXJyaWRkZW4gPSAwOworCQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA0KQorCQkJCQkJcGlvX21vZGUgPSA1OworCQkJCQllbHNlIGlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDIpCisJCQkJCQlwaW9fbW9kZSA9IDQ7CisJCQkJCWVsc2UKKwkJCQkJCXBpb19tb2RlID0gMzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAob3ZlcnJpZGRlbikKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0UElPID4gMiwgYXNzdW1pbmcgdFBJTyA9IDJcbiIsCisJCQkJCSBkcml2ZS0+bmFtZSk7CisJfQorCisJaWYgKHBpb19tb2RlID4gbWF4X21vZGUpCisJCXBpb19tb2RlID0gbWF4X21vZGU7CisKKwlyZXR1cm4gcGlvX21vZGU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZ2V0X2Jlc3RfcGlvX21vZGUpOworCitpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qCisJICogVE9ETzogdGVtcG9yYXJ5IGhhY2sgZm9yIHNvbWUgbGVnYWN5IGhvc3QgZHJpdmVycyB0aGF0IGRpZG4ndAorCSAqIHNldCB0cmFuc2ZlciBtb2RlIG9uIHRoZSBkZXZpY2UgaW4gLT5zZXRfcGlvX21vZGUgbWV0aG9kLi4uCisJICovCisJaWYgKHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkgeworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKKwkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQorCQkJcmV0dXJuIC0xOworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKKwkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOworCX0KK30KKworaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCisJCXJldHVybiAwOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CisJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOworCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9kbWFfbW9kZSk7CisKKy8qIHJlcV9waW8gPT0gIjI1NSIgZm9yIGF1dG8tdHVuZSAqLwordm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJlcV9waW8pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJdTggaG9zdF9waW8sIHBpbzsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybjsKKworCUJVR19PTihod2lmLT5waW9fbWFzayA9PSAweDAwKTsKKworCWhvc3RfcGlvID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDE7CisKKwlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8sIGhvc3RfcGlvKTsKKworCS8qCisJICogVE9ETzoKKwkgKiAtIHJlcG9ydCBkZXZpY2UgbWF4IFBJTyBtb2RlCisJICogLSBjaGVjayByZXFfcGlvICE9IDI1NSBhZ2FpbnN0IGRldmljZSBtYXggUElPIG1vZGUKKwkgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3QgbWF4IFBJTyVkIHdhbnRlZCBQSU8lZCVzIHNlbGVjdGVkIFBJTyVkXG4iLAorCQkJICBkcml2ZS0+bmFtZSwgaG9zdF9waW8sIHJlcV9waW8sCisJCQkgIHJlcV9waW8gPT0gMjU1ID8gIihhdXRvLXR1bmUpIiA6ICIiLCBwaW8pOworCisJKHZvaWQpaWRlX3NldF9waW9fbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X3Bpbyk7CisKKy8qKgorICoJaWRlX3JhdGVfZmlsdGVyCQktCWZpbHRlciB0cmFuc2ZlciBtb2RlCisgKglAZHJpdmU6IElERSBkZXZpY2UKKyAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAorICoKKyAqCUdpdmVuIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgbW9kZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKgl0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQgYXQgb3IgYmVsb3cgdGhlIHNwZWVkIHJlcXVlc3RlZC4KKyAqCisgKglUT0RPOiBjaGVjayBkZXZpY2UgUElPIGNhcGFiaWxpdGllcworICovCisKK3N0YXRpYyB1OCBpZGVfcmF0ZV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggbW9kZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCBzcGVlZCk7CisKKwlpZiAobW9kZSA9PSAwKSB7CisJCWlmIChod2lmLT5waW9fbWFzaykKKwkJCW1vZGUgPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMSArIFhGRVJfUElPXzA7CisJCWVsc2UKKwkJCW1vZGUgPSBYRkVSX1BJT180OworCX0KKworLyoJcHJpbnRrKCIlczogbW9kZSAweCUwMngsIHNwZWVkIDB4JTAyeFxuIiwgX19mdW5jX18sIG1vZGUsIHNwZWVkKTsgKi8KKworCXJldHVybiBtaW4oc3BlZWQsIG1vZGUpOworfQorCisvKioKKyAqCWlkZV9zZXRfeGZlcl9yYXRlCS0Jc2V0IHRyYW5zZmVyIHJhdGUKKyAqCUBkcml2ZTogZHJpdmUgdG8gc2V0CisgKglAcmF0ZTogc3BlZWQgdG8gYXR0ZW1wdCB0byBzZXQKKyAqCisgKglHZW5lcmFsIGhlbHBlciBmb3Igc2V0dGluZyB0aGUgc3BlZWQgb2YgYW4gSURFIGRldmljZS4gVGhpcworICoJZnVuY3Rpb24ga25vd3MgYWJvdXQgdXNlciBlbmZvcmNlZCBsaW1pdHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbgorICoJd2hpY2ggLT5zZXRfcGlvX21vZGUvLT5zZXRfZG1hX21vZGUgZG9lcyBub3QuCisgKi8KKworaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtMTsKKworCXJhdGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHJhdGUpOworCisJQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKKworCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQorCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7CisKKwlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IDA5MjBlM2IuLjkyYzliOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC02MiwxNjAgKzYyLDYgQEAKIAogc3RydWN0IGNsYXNzICppZGVfcG9ydF9jbGFzczsKIAotLyoKLSAqCUxvY2tzIGZvciBJREUgc2V0dGluZyBmdW5jdGlvbmFsaXR5Ci0gKi8KLQotREVGSU5FX01VVEVYKGlkZV9zZXR0aW5nX210eCk7Ci0KLWlkZV9kZXZzZXRfZ2V0KGlvXzMyYml0LCBpb18zMmJpdCk7Ci0KLXN0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19JT18zMkJJVCkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEgKyAoU1VQUE9SVF9WTEJfU1lOQyA8PCAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcml2ZS0+aW9fMzJiaXQgPSBhcmc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyhrc2V0dGluZ3MsIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKTsKLQotc3RhdGljIGludCBzZXRfa3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmcpCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0tFRVBfU0VUVElOR1M7Ci0JZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZGV2c2V0X2dldF9mbGFnKHVzaW5nX2RtYSwgSURFX0RGTEFHX1VTSU5HX0RNQSk7Ci0KLXN0YXRpYyBpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCi0JaW50IGVyciA9IC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF0YV9pZF9oYXNfZG1hKGRyaXZlLT5pZCkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAwOwotCi0JaWYgKGFyZykgewotCQlpZiAoaWRlX3NldF9kbWEoZHJpdmUpKQotCQkJZXJyID0gLUVJTzsKLQl9IGVsc2UKLQkJaWRlX2RtYV9vZmYoZHJpdmUpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLSNlbHNlCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gLUVQRVJNOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQotICovCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQotewotCXN3aXRjaCAocmVxX3BpbykgewotCWNhc2UgMjAyOgotCWNhc2UgMjAxOgotCWNhc2UgMjAwOgotCWNhc2UgMTAyOgotCWNhc2UgMTAxOgotCWNhc2UgMTAwOgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOwotCWNhc2UgOToKLQljYXNlIDg6Ci0JCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKLQljYXNlIDc6Ci0JY2FzZSA2OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyNTUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7Ci0JCWlmIChhcmcgPT0gOCB8fCBhcmcgPT0gOSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJLyogdGFrZSBsb2NrIGZvciBJREVfREZMQUdfW05PX11VTk1BU0svW05PX11JT18zMkJJVCAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCX0gZWxzZQotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKLQl9IGVsc2UgewotCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7Ci0KLQkJaWRlX3NldF9waW8oZHJpdmUsIGFyZyk7Ci0KLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VUX1BJT19NT0RFX0tFRVBfRE1BKSB7Ci0JCQlpZiAoa2VlcF9kbWEpCi0JCQkJaWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyh1bm1hc2tpcnEsIElERV9ERkxBR19VTk1BU0spOwotCi1zdGF0aWMgaW50IHNldF91bm1hc2tpcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX1VOTUFTSykKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFyZykKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZXh0X2RldnNldF9yd19zeW5jKGlvXzMyYml0LCBpb18zMmJpdCk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKGtlZXBzZXR0aW5ncywga3NldHRpbmdzKTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmModW5tYXNraXJxLCB1bm1hc2tpcnEpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7Ci1fX0lERV9ERVZTRVQocGlvX21vZGUsIERTX1NZTkMsIE5VTEwsIHNldF9waW9fbW9kZSk7Ci0KIC8qKgogICogaWRlX2RldmljZV9nZXQJLQlnZXQgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gYSBpZGVfZHJpdmVfdAogICogQGRyaXZlOglkZXZpY2UgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvCkBAIC01MjcsNiArMzczLDggQEAKIAkJZ290byBvdXRfcG9ydF9jbGFzczsKIAl9CiAKKwlpZGVfYWNwaV9pbml0KCk7CisKIAlwcm9jX2lkZV9jcmVhdGUoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwppbmRleCAxM2I4MTUzLi42YjlmYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4MjApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pdDgyMXgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2l0ODIxeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IGNvbmY7CiAJc3RhdGljIGNoYXIgKm1vZGVbMl0gPSB7ICJwYXNzIHRocm91Z2giLCAic21hcnQiIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKaW5kZXggODM2NDNlZC4uZWE0OGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwpAQCAtMjg2LDkgKzI4Niw3IEBACiAJfQogCiAJaWYgKCF1c2luZ19pbnRhKQotCQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWVsc2UgaWYgKCFod2lmLT5pcnEgJiYgaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5pcnEpCi0JCWh3aWYtPmlycSA9IGh3aWYtPm1hdGUtPmlycTsJLyogc2hhcmUgSVJRIHdpdGggbWF0ZSAqLworCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgaHdpZi0+Y2hhbm5lbCk7CiAKIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCmluZGV4IGYyMTI5MGMuLmI2ODkwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjbmV3KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGNuZXcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAljb25zdCBjaGFyICpuYW1lID0gRFJWX05BTUU7CiAJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAjZW5kaWYKIAogIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIF9fZGV2aW5pdCBwZGMyMDI3MF9nZXRfZGV2MihzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCA5NzE5MzMyLi5jYmE2NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBkbWFiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CiAJdTggdWRtYV9zcGVlZF9mbGFnID0gMCwgcHJpbWFyeV9tb2RlID0gMCwgc2Vjb25kYXJ5X21vZGUgPSAwOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCXByaW50aygiJXNBQ1RJVkVcbiIsIChpbmIoZG1hYmFzZSB8IDB4MWYpICYgMSkgPyAiIiA6ICJJTiIpOwogCX0KIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwZGMyMDJhdGE0X2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGlpeC5jCmluZGV4IGYxZTJlNGUuLjJhYTY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9waWl4LmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogICoJb3V0IHRvIGJlIG5pY2UgYW5kIHNpbXBsZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2ljaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiBleHRyYSA9IDA7CiAKQEAgLTMxOCwxOSArMzE4LDEyIEBACiAJLmNhYmxlX2RldGVjdAkJPSBwaWl4X2NhYmxlX2RldGVjdCwKIH07CiAKLSNpZm5kZWYgQ09ORklHX0lBNjQKLSAjZGVmaW5lIElERV9IRkxBR1NfUElJWCBJREVfSEZMQUdfTEVHQUNZX0lSUVMKLSNlbHNlCi0gI2RlZmluZSBJREVfSEZMQUdTX1BJSVggMAotI2VuZGlmCi0KICNkZWZpbmUgREVDTEFSRV9QSUlYX0RFVih1ZG1hKSBcCiAJewkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQlcCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGlpeCwJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkucG9ydF9vcHMJPSAmcGlpeF9wb3J0X29wcywJXAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUElJWCwJXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCVwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCVwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAlcCkBAIC0zNDQsNyArMzM3LDYgQEAKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9waWl4LCBcCiAJCS5lbmFibGViaXRzCT0ge3sweDQxLDB4ODAsMHg4MH0sIHsweDQzLDB4ODAsMHg4MH19LCBcCiAJCS5wb3J0X29wcwk9ICZpY2hfcG9ydF9vcHMsIFwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsIFwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksIFwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCBcCkBAIC0zNjAsOCArMzUyLDcgQEAKIAkJICovCiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg2ZCwweGMwLDB4ODB9LCB7MHg2ZCwweGMwLDB4YzB9fSwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwgSURFX0hGTEFHX05PX0RNQSB8Ci0JCQkJICBJREVfSEZMQUdTX1BJSVgsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0lTQV9QT1JUUyB8IElERV9IRkxBR19OT19ETUEsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkvKiBUaGlzIGlzIGEgcGFpbmZ1bCBzeXN0ZW0gYmVzdCB0byBsZXQgaXQgc2VsZiB0dW5lIGZvciBub3cgKi8KIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKaW5kZXggMzgyMTAyYi4uYjY1NTRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCB1bHRyYV9lbmFibGUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zdndrcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc3Z3a3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCXU4IGJ0cjsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVBLCBidHIpOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0YTY2X3N2d2tzX3N2d2tzKGlkZV9od2lmX3QgKmh3aWYpCkBAIC0zNTMsMTQgKzM1MywxMSBAQAogCS5jYWJsZV9kZXRlY3QJCT0gc3Z3a3NfY2FibGVfZGV0ZWN0LAogfTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1NWV0tTIElERV9IRkxBR19MRUdBQ1lfSVJRUwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2VydmVyd29ya3NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMDogT1NCNCAqLwogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJm9zYjRfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIFVETUEgaXMgcHJvYmxlbWF0aWMgb24gT1NCNCAqLwpAQCAtMzY5LDcgKzM2Niw2IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM3OCw3ICszNzQsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTIHwgSURFX0hGTEFHX1NJTkdMRSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzk2LDcgKzM5MSw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUyB8IElERV9IRkxBR19TSU5HTEUsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggZTg1ZDFlZC4uMjRiYzg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTMwNSw3ICszMDUsNiBAQAogICoJQGRldjogUENJIGRldmljZSBob2xkaW5nIGludGVyZmFjZQogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBwb3J0OiBwb3J0IG51bWJlcgotICoJQGlycTogUENJIElSUQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQKICAqCiAgKglQZXJmb3JtIHRoZSBpbml0aWFsIHNldCB1cCBmb3IgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoaXMKQEAgLTMxNiw3ICszMTUsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaWRlX2h3X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaW50IGlycSwgaHdfcmVnc190ICpodykKKwkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaHdfcmVnc190ICpodykKIHsKIAl1bnNpZ25lZCBsb25nIGN0bCA9IDAsIGJhc2UgPSAwOwogCkBAIC0zNDQsNyArMzQzLDYgQEAKIAl9CiAKIAltZW1zZXQoaHcsIDAsIHNpemVvZigqaHcpKTsKLQlody0+aXJxID0gaXJxOwogCWh3LT5kZXYgPSAmZGV2LT5kZXY7CiAJaHctPmNoaXBzZXQgPSBkLT5jaGlwc2V0ID8gZC0+Y2hpcHNldCA6IGlkZV9wY2k7CiAJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBiYXNlLCBjdGwgfCAyKTsKQEAgLTQ0OCw3ICs0NDYsNiBAQAogICoJaWRlX3BjaV9zZXR1cF9wb3J0cwktCWNvbmZpZ3VyZSBwb3J0cy9kZXZpY2VzIG9uIFBDSSBJREUKICAqCUBkZXY6IFBDSSBkZXZpY2UKICAqCUBkOiBJREUgcG9ydCBpbmZvCi0gKglAcGNpaXJxOiBJUlEgbGluZQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQQ0kgSURFIGRldmljZQogICoJQGh3czogaHdfcmVnc190IHBvaW50ZXJzIHRhYmxlIHRvIHVwZGF0ZQogICoKQEAgLTQ2Miw3ICs0NTksNyBAQAogICovCiAKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSBpbnQgcGNpaXJxLCBod19yZWdzX3QgKmh3LCBod19yZWdzX3QgKipod3MpCisJCQkgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQogewogCWludCBjaGFubmVscyA9IChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NJTkdMRSkgPyAxIDogMiwgcG9ydDsKIAl1OCB0bXA7CkBAIC00ODEsNyArNDc4LDcgQEAKIAkJCWNvbnRpbnVlOwkvKiBwb3J0IG5vdCBlbmFibGVkICovCiAJCX0KIAotCQlpZiAoaWRlX2h3X2NvbmZpZ3VyZShkZXYsIGQsIHBvcnQsIHBjaWlycSwgaHcgKyBwb3J0KSkKKwkJaWYgKGlkZV9od19jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBodyArIHBvcnQpKQogCQkJY29udGludWU7CiAKIAkJKihod3MgKyBwb3J0KSA9IGh3ICsgcG9ydDsKQEAgLTUyNCw3ICs1MjEsNyBAQAogCQlpZiAobm9pc3kpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogbm90IDEwMCUlIG5hdGl2ZSBtb2RlOiB3aWxsICIKIAkJCQkicHJvYmUgaXJxcyBsYXRlclxuIiwgZC0+bmFtZSwgcGNpX25hbWUoZGV2KSk7Ci0JCXBjaWlycSA9IHJldDsKKwkJcGNpaXJxID0gMDsKIAl9IGVsc2UgaWYgKCFwY2lpcnEgJiYgbm9pc3kpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6IGJhZCBpcnEgKCVkKTogd2lsbCBwcm9iZSBsYXRlclxuIiwKIAkJCWQtPm5hbWUsIHBjaV9uYW1lKGRldiksIHBjaWlycSk7CkBAIC01NDksNyArNTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKIAogCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhkLCBod3MpOwogCWlmIChob3N0ID09IE5VTEwpIHsKQEAgLTU2OCw3ICs1NjUsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBmaXh1cCBJUlEgKi8KLQlod1sxXS5pcnEgPSBod1swXS5pcnEgPSByZXQ7CisJaWYgKGlkZV9wY2lfaXNfaW5fY29tcGF0aWJpbGl0eV9tb2RlKGRldikpIHsKKwkJaHdbMF0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDApOworCQlod1sxXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgMSk7CisJfSBlbHNlCisJCWh3WzFdLmlycSA9IGh3WzBdLmlycSA9IHJldDsKIAogCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIGQsIGh3cyk7CiAJaWYgKHJldCkKQEAgLTU5MSw3ICs1OTIsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCi0JCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgMCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CisJCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CiAJfQogCiAJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKGQsIGh3cyk7CkBAIC02MTksNyArNjIwLDExIEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBmaXh1cCBJUlEgKi8KLQkJaHdbaSoyICsgMV0uaXJxID0gaHdbaSoyXS5pcnEgPSByZXQ7CisJCWlmIChpZGVfcGNpX2lzX2luX2NvbXBhdGliaWxpdHlfbW9kZShwZGV2W2ldKSkgeworCQkJaHdbaSoyXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHBkZXZbaV0sIDApOworCQkJaHdbaSoyICsgMV0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShwZGV2W2ldLCAxKTsKKwkJfSBlbHNlCisJCQlod1tpKjIgKyAxXS5pcnEgPSBod1tpKjJdLmlycSA9IHJldDsKIAl9CiAKIAlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBkLCBod3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IGNiMmIzNTIuLjE4MTFhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICoJdG8gMTMzIE1IeiBjbG9ja2luZyBpZiB0aGUgc3lzdGVtIGlzbid0IGFscmVhZHkgc2V0IHVwIHRvIGRvIGl0LgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGhvc3QtPmhvc3RfcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCA5ZWMxYTRhLi5hZmNhMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC00NDcsNyArNDQ3LDcgQEAKIAlyZXR1cm4gY2hpcHNldF9mYW1pbHk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAkvKiBNYWtlIGdlbmVyYWwgY29uZmlnIG9wcyBoZXJlCiAJICAgMS8gdGVsbCBJREUgY2hhbm5lbHMgdG8gb3BlcmF0ZSBpbiBDb21wYXRpYmlsaXR5IG1vZGUgb25seQpAQCAtNTYzLDcgKzU2Myw3IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zaXM1NTEzLAogCS5lbmFibGViaXRzCT0geyB7MHg0YSwgMHgwMiwgMHgwMn0sIHsweDRhLCAweDA0LCAweDA0fSB9LAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTIHwgSURFX0hGTEFHX05PX0FVVE9ETUEsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVVUT0RNQSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKaW5kZXggNjI5Nzk1Ni4uZGJhMjEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCkBAIC0yNzEsNyArMjcxLDcgQEAKICAqIGNoYW5uZWwgMCBoZXJlIGF0IGxlYXN0LCBidXQgY2hhbm5lbCAxIGhhcyB0byBiZSBlbmFibGVkIGJ5CiAgKiBmaXJtd2FyZSBvciBhcmNoIGNvZGUuIFdlIHN0aWxsIHNldCBib3RoIHRvIDE2IGJpdHMgbW9kZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2w4MmMxMDUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NsODJjMTA1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzbDgyYzEwNV9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMgYi9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCmluZGV4IDQwYjRiOTQuLmY1NWQ3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwpAQCAtMTM2LDcgKzEzNiw2IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmVuYWJsZWJpdHMJPSB7IHsweDQxLCAweDgwLCAweDgwfSwgezB4NDMsIDB4ODAsIDB4ODB9IH0sCiAJLnBvcnRfb3BzCT0gJnNsYzkwZTY2X3BvcnRfb3BzLAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAogCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAogCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggYjZhMTI4NS4uMWMwOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTI3Nyw5ICsyNzcsNiBAQAogCWlmIChyZWcgJiAweDEwKQogCQkvKiBsZWdhY3kgbW9kZSAqLwogCQlod2lmLT5pcnEgPSBod2lmLT5jaGFubmVsID8gMTUgOiAxNDsKLQllbHNlIGlmICghaHdpZi0+aXJxICYmIGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxKQotCQkvKiBzaGFyaW5nIElSUSB3aXRoIG1hdGUgKi8KLQkJaHdpZi0+aXJxID0gaHdpZi0+bWF0ZS0+aXJxOwogCiAjaWYgMQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKaW5kZXggNjA5MmZlMy4uM2ZmNzIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKKysrIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICoJYW5kIGluaXRpYWxpemUgaXRzIGRyaXZlIGluZGVwZW5kZW50IHJlZ2lzdGVycy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3ZpYTgyY3h4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gaG9zdC0+aG9zdF9wcml2OwpAQCAtNDQzLDE2ICs0NDMsNiBAQAogCWlmICgodmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKSA9PSAwKQogCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX1VOTUFTS19JUlFTOwogCi0jaWZkZWYgQ09ORklHX1BQQ19DSFJQCi0JaWYgKG1hY2hpbmVfaXMoY2hycCkgJiYgX2NocnBfdHlwZSA9PSBfQ0hSUF9QZWdhc29zKQotCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQU1JR0FPTkUKLQlpZiAobWFjaGluZV9pcyhhbWlnYW9uZSkpCi0JCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVM7Ci0jZW5kaWYKLQogCWQudWRtYV9tYXNrID0gdmlhX2NvbmZpZy0+dWRtYV9tYXNrOwogCiAJdmRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2ZGV2KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jIGIvZHJpdmVycy9pZWVlMTM5NC9jc3IuYwppbmRleCAzMTQwMGM4Li5kNjk2ZjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmMKQEAgLTY4LDIyICs2OCwyMiBAQAogCS5ob3N0X3Jlc2V0ID0JaG9zdF9yZXNldCwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBtYXBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIG1hcF9vcHMgPSB7CiAJLnJlYWQgPSByZWFkX21hcHMsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgZmNwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBmY3Bfb3BzID0gewogCS53cml0ZSA9IHdyaXRlX2ZjcCwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyByZWdfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHJlZ19vcHMgPSB7CiAJLnJlYWQgPSByZWFkX3JlZ3MsCiAJLndyaXRlID0gd3JpdGVfcmVncywKIAkubG9jayA9IGxvY2tfcmVncywKIAkubG9jazY0ID0gbG9jazY0X3JlZ3MsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgY29uZmlnX3JvbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgY29uZmlnX3JvbV9vcHMgPSB7CiAJLnJlYWQgPSByZWFkX2NvbmZpZ19yb20sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCAzODM4YmM0Li44MjNhNjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTEzMjUsMTEgKzEzMjUsNyBAQAogCiAJc3RydWN0IHZpZGVvX2NhcmQgKnZpZGVvID0gZmlsZV90b192aWRlb19jYXJkKGZpbGUpOwogCi0JaW50IHJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdmlkZW8tPmZhc3luYyk7Ci0KLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdmlkZW8tPmZhc3luYyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGR2MTM5NF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC0yMTc1LDcgKzIxNzEsNyBAQAogICogRXhwb3J0IGluZm9ybWF0aW9uIGFib3V0IHByb3RvY29scy9kZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KICAqLwogI2lmZGVmIE1PRFVMRQotc3RhdGljIHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZHYxMzk0X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBkdjEzOTRfaWRfdGFibGVbXSA9IHsKIAl7CiAJCS5tYXRjaF9mbGFncwk9IElFRUUxMzk0X01BVENIX1NQRUNJRklFUl9JRCB8IElFRUUxMzk0X01BVENIX1ZFUlNJT04sCiAJCS5zcGVjaWZpZXJfaWQJPSBBVkNfVU5JVF9TUEVDX0lEX0VOVFJZICYgMHhmZmZmZmYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCmluZGV4IDFhOTE5ZGYuLjRjYTEwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCkBAIC0xODEsNyArMTgxLDcgQEAKIHN0YXRpYyB2b2lkIGV0aGVyMTM5NF9ob3N0X3Jlc2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwogCiAvKiBGdW5jdGlvbiBmb3IgaW5jb21pbmcgMTM5NCBwYWNrZXRzICovCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgYWRkcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgYWRkcl9vcHMgPSB7CiAJLndyaXRlID0JZXRoZXIxMzk0X3dyaXRlLAogfTsKIApAQCAtNDM4LDcgKzQzOCw3IEBACiAJcmV0dXJuIGV0aDEzOTRfbmV3X25vZGUoaGksIHVkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZXRoMTM5NF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZXRoMTM5NF9pZF90YWJsZVtdID0gewogCXsKIAkJLm1hdGNoX2ZsYWdzID0gKElFRUUxMzk0X01BVENIX1NQRUNJRklFUl9JRCB8CiAJCQkJSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jIGIvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYwppbmRleCA2MDBlMzkxLi40YmM0NDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBkdW1teV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgZHVtbXlfb3BzOwogCiAvKiBkdW1teSBhZGRyZXNzIHNwYWNlcyBhcyBsb3dlciBhbmQgdXBwZXIgYm91bmRzIG9mIHRoZSBob3N0J3MgYS5zLiBsaXN0ICovCiBzdGF0aWMgdm9pZCBpbml0X2hwc2JfaGlnaGxldmVsKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IDUzYWFkYTUuLmE2ZDU1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC00ODQsNyArNDg0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGZ3X3Nob3dfZHJ2X2RldmljZV9pZHMoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBocHNiX3Byb3RvY29sX2RyaXZlciAqZHJpdmVyOwotCXN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkOworCWNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkOwogCWludCBsZW5ndGggPSAwOwogCWNoYXIgKnNjcmF0Y2ggPSBidWY7CiAKQEAgLTY1OCw3ICs2NTgsNyBAQAogewogCXN0cnVjdCBocHNiX3Byb3RvY29sX2RyaXZlciAqZHJpdmVyOwogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7Ci0Jc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWQ7CisJY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWQ7CiAKIAkvKiBXZSBvbmx5IG1hdGNoIHVuaXQgZGlyZWN0b3JpZXMgKi8KIAlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhICE9ICZub2RlbWdyX3VkX3BsYXRmb3JtX2RhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaCBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCmluZGV4IGVlNWFjZGIuLjc0OWIyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgKiBwcm9iZSBmdW5jdGlvbiBiZWxvdyBjYW4gaW1wbGVtZW50IGZ1cnRoZXIgcHJvdG9jb2wKIAkgKiBkZXBlbmRlbnQgb3IgdmVuZG9yIGRlcGVuZGVudCBjaGVja2luZy4KIAkgKi8KLQlzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZF90YWJsZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZF90YWJsZTsKIAogCS8qCiAJICogVGhlIHVwZGF0ZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgbm9kZSBoYXMganVzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCBiYWQ2NmM2Li5kYTVmODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIGludCBhcm1fbG9jazY0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIG9jdGxldF90ICogc3RvcmUsCiAJCSAgICAgIHU2NCBhZGRyLCBvY3RsZXRfdCBkYXRhLCBvY3RsZXRfdCBhcmcsIGludCBleHRfdGNvZGUsCiAJCSAgICAgIHUxNiBmbGFncyk7Ci1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgYXJtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBhcm1fb3BzID0gewogCS5yZWFkID0gYXJtX3JlYWQsCiAJLndyaXRlID0gYXJtX3dyaXRlLAogCS5sb2NrID0gYXJtX2xvY2ssCkBAIC0zNjksNiArMzY5LDcgQEAKIHsKIAlzdHJ1Y3QgY29tcGF0X3JhdzEzOTRfcmVxIF9fdXNlciAqY3IgPSAodHlwZW9mKGNyKSkgYnVmOwogCXN0cnVjdCByYXcxMzk0X3JlcXVlc3QgX191c2VyICpyOworCiAJciA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0KSk7CiAKICNkZWZpbmUgQyh4KSBfX2NvcHlfaW5fdXNlcigmci0+eCwgJmNyLT54LCBzaXplb2Yoci0+eCkpCkBAIC0zNzgsNyArMzc5LDggQEAKIAkgICAgQyh0YWcpIHx8CiAJICAgIEMoc2VuZGIpIHx8CiAJICAgIEMocmVjdmIpKQotCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwkJcmV0dXJuIChfX2ZvcmNlIGNvbnN0IGNoYXIgX191c2VyICopRVJSX1BUUigtRUZBVUxUKTsKKwogCXJldHVybiAoY29uc3QgY2hhciBfX3VzZXIgKilyOwogfQogI3VuZGVmIEMKQEAgLTM4OSw2ICszOTEsNyBAQAogcmF3MTM5NF9jb21wYXRfcmVhZChjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0ICpyKQogewogCXN0cnVjdCBjb21wYXRfcmF3MTM5NF9yZXEgX191c2VyICpjciA9ICh0eXBlb2YoY3IpKSBidWY7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGNyLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9yYXcxMzk0X3JlcSkpIHx8CiAJICAgIFAodHlwZSkgfHwKIAkgICAgUChlcnJvcikgfHwKQEAgLTQwMCw2ICs0MDMsNyBAQAogCSAgICBQKHNlbmRiKSB8fAogCSAgICBQKHJlY3ZiKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisKIAlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBjb21wYXRfcmF3MTM5NF9yZXEpOwogfQogI3VuZGVmIFAKQEAgLTIyNDksOCArMjI1Myw4IEBACiAgICAJICAgIHNpemVvZihzdHJ1Y3QgY29tcGF0X3JhdzEzOTRfcmVxKSAhPQogCQkJc2l6ZW9mKHN0cnVjdCByYXcxMzk0X3JlcXVlc3QpKSB7CiAJCWJ1ZmZlciA9IHJhdzEzOTRfY29tcGF0X3dyaXRlKGJ1ZmZlcik7Ci0JCWlmIChJU19FUlIoYnVmZmVyKSkKLQkJCXJldHVybiBQVFJfRVJSKGJ1ZmZlcik7CisJCWlmIChJU19FUlIoKF9fZm9yY2Ugdm9pZCAqKWJ1ZmZlcikpCisJCQlyZXR1cm4gUFRSX0VSUigoX19mb3JjZSB2b2lkICopYnVmZmVyKTsKIAl9IGVsc2UKICNlbmRpZgogCWlmIChjb3VudCAhPSBzaXplb2Yoc3RydWN0IHJhdzEzOTRfcmVxdWVzdCkpIHsKQEAgLTI5NzgsNyArMjk4Miw3IEBACiAgKiBFeHBvcnQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2xzL2RldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogICovCiAjaWZkZWYgTU9EVUxFCi1zdGF0aWMgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCByYXcxMzk0X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCByYXcxMzk0X2lkX3RhYmxlW10gPSB7CiAJewogCSAubWF0Y2hfZmxhZ3MgPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfCBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAogCSAuc3BlY2lmaWVyX2lkID0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSAmIDB4ZmZmZmZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCBmM2ZkODY1Li5hNTFhYjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJLmhvc3RfcmVzZXQJPSBzYnAyX2hvc3RfcmVzZXQsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgc2JwMl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgc2JwMl9vcHMgPSB7CiAJLndyaXRlCQk9IHNicDJfaGFuZGxlX3N0YXR1c193cml0ZQogfTsKIApAQCAtMjc1LDcgKzI3NSw3IEBACiBzdGF0aWMgaW50IHNicDJfaGFuZGxlX3BoeXNkbWFfcmVhZChzdHJ1Y3QgaHBzYl9ob3N0ICosIGludCwgcXVhZGxldF90ICosIHU2NCwKIAkJCQkgICAgc2l6ZV90LCB1MTYpOwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgc2JwMl9waHlzZG1hX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBzYnAyX3BoeXNkbWFfb3BzID0gewogCS5yZWFkCQk9IHNicDJfaGFuZGxlX3BoeXNkbWFfcmVhZCwKIAkud3JpdGUJCT0gc2JwMl9oYW5kbGVfcGh5c2RtYV93cml0ZSwKIH07CkBAIC0yODUsNyArMjg1LDcgQEAKIC8qCiAgKiBJbnRlcmZhY2UgdG8gZHJpdmVyIGNvcmUgYW5kIElFRUUgMTM5NCBjb3JlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHNicDJfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHNicDJfaWRfdGFibGVbXSA9IHsKIAl7CiAJIC5tYXRjaF9mbGFncwk9IElFRUUxMzk0X01BVENIX1NQRUNJRklFUl9JRCB8IElFRUUxMzk0X01BVENIX1ZFUlNJT04sCiAJIC5zcGVjaWZpZXJfaWQJPSBTQlAyX1VOSVRfU1BFQ19JRF9FTlRSWSAmIDB4ZmZmZmZmLApAQCAtMTQxMyw4ICsxNDEzLDcgQEAKIAkJCSAgIihmaXJtd2FyZV9yZXZpc2lvbiAweCUwNngsIHZlbmRvcl9pZCAweCUwNngsIgogCQkJICAiIG1vZGVsX2lkIDB4JTA2eCkiLAogCQkJICBOT0RFX0JVU19BUkdTKHVkLT5uZS0+aG9zdCwgdWQtPm5lLT5ub2RlaWQpLAotCQkJICB3b3JrYXJvdW5kcywgZmlybXdhcmVfcmV2aXNpb24sCi0JCQkgIHVkLT52ZW5kb3JfaWQgPyB1ZC0+dmVuZG9yX2lkIDogdWQtPm5lLT52ZW5kb3JfaWQsCisJCQkgIHdvcmthcm91bmRzLCBmaXJtd2FyZV9yZXZpc2lvbiwgdWQtPnZlbmRvcl9pZCwKIAkJCSAgbW9kZWwpOwogCiAJLyogV2Ugd291bGQgbmVlZCBvbmUgU0NTSSBob3N0IHRlbXBsYXRlIGZvciBlYWNoIHRhcmdldCB0byBhZGp1c3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCmluZGV4IDY3OWE5MTguLmQyODdiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKICAqIEV4cG9ydCBpbmZvcm1hdGlvbiBhYm91dCBwcm90b2NvbHMvZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAgKi8KICNpZmRlZiBNT0RVTEUKLXN0YXRpYyBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHZpZGVvMTM5NF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgdmlkZW8xMzk0X2lkX3RhYmxlW10gPSB7CiAJewogCQkubWF0Y2hfZmxhZ3MJPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfCBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAogCQkuc3BlY2lmaWVyX2lkCT0gQ0FNRVJBX1VOSVRfU1BFQ19JRF9FTlRSWSAmIDB4ZmZmZmZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggZjFlODJhOS4uNTEzMGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC05MjcsOCArOTI3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrID8gc2VydmljZV9tYXNrIDoKLQkJICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCXNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzayA/IHNlcnZpY2VfbWFzayA6IH5jcHVfdG9fYmU2NCgwKTsKIAlzZXJ2aWNlX2lkICY9IHNlcnZpY2VfbWFzazsKIAlpZiAoKHNlcnZpY2VfaWQgJiBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLKSA9PSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCAmJgogCSAgICAoc2VydmljZV9pZCAhPSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCkpCkBAIC05NTQsNyArOTUzLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY20ubG9jaywgZmxhZ3MpOwogCWlmIChzZXJ2aWNlX2lkID09IElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKSB7CiAJCWNtX2lkLT5zZXJ2aWNlX2lkID0gY3B1X3RvX2JlNjQoY20ubGlzdGVuX3NlcnZpY2VfaWQrKyk7Ci0JCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwkJY21faWQtPnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAl9IGVsc2UgewogCQljbV9pZC0+c2VydmljZV9pZCA9IHNlcnZpY2VfaWQ7CiAJCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2s7CkBAIC0xMTM0LDcgKzExMzMsNyBAQAogCQkJZ290byBlcnJvcjE7CiAJfQogCWNtX2lkLT5zZXJ2aWNlX2lkID0gcGFyYW0tPnNlcnZpY2VfaWQ7Ci0JY21faWQtPnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJY21faWRfcHJpdi0+dGltZW91dF9tcyA9IGNtX2NvbnZlcnRfdG9fbXMoCiAJCQkJICAgIHBhcmFtLT5wcmltYXJ5X3BhdGgtPnBhY2tldF9saWZlX3RpbWUpICogMiArCiAJCQkJIGNtX2NvbnZlcnRfdG9fbXMoCkBAIC0xNTQ1LDcgKzE1NDQsNyBAQAogCWNtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXIgPSBsaXN0ZW5fY21faWRfcHJpdi0+aWQuY21faGFuZGxlcjsKIAljbV9pZF9wcml2LT5pZC5jb250ZXh0ID0gbGlzdGVuX2NtX2lkX3ByaXYtPmlkLmNvbnRleHQ7CiAJY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCA9IHJlcV9tc2ctPnNlcnZpY2VfaWQ7Ci0JY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCiAJY21fcHJvY2Vzc19yb3V0ZWRfcmVxKHJlcV9tc2csIHdvcmstPm1hZF9yZWN2X3djLT53Yyk7CiAJY21fZm9ybWF0X3BhdGhzX2Zyb21fcmVxKHJlcV9tc2csICZ3b3JrLT5wYXRoWzBdLCAmd29yay0+cGF0aFsxXSk7CkBAIC0yODk4LDcgKzI4OTcsNyBAQAogCQlnb3RvIG91dDsKIAogCWNtX2lkLT5zZXJ2aWNlX2lkID0gcGFyYW0tPnNlcnZpY2VfaWQ7Ci0JY21faWQtPnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJY21faWRfcHJpdi0+dGltZW91dF9tcyA9IHBhcmFtLT50aW1lb3V0X21zOwogCWNtX2lkX3ByaXYtPm1heF9jbV9yZXRyaWVzID0gcGFyYW0tPm1heF9jbV9yZXRyaWVzOwogCXJldCA9IGNtX2FsbG9jX21zZyhjbV9pZF9wcml2LCAmbXNnKTsKQEAgLTI5OTIsNyArMjk5MSw3IEBACiAJY21faWRfcHJpdi0+aWQuY21faGFuZGxlciA9IGN1cl9jbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyOwogCWNtX2lkX3ByaXYtPmlkLmNvbnRleHQgPSBjdXJfY21faWRfcHJpdi0+aWQuY29udGV4dDsKIAljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkID0gc2lkcl9yZXFfbXNnLT5zZXJ2aWNlX2lkOwotCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAogCWNtX2Zvcm1hdF9zaWRyX3JlcV9ldmVudCh3b3JrLCAmY3VyX2NtX2lkX3ByaXYtPmlkKTsKIAljbV9wcm9jZXNzX3dvcmsoY21faWRfcHJpdiwgd29yayk7CkBAIC0zNzg5LDcgKzM3ODgsNyBAQAogCXJ3bG9ja19pbml0KCZjbS5kZXZpY2VfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNtLmxvY2spOwogCWNtLmxpc3Rlbl9zZXJ2aWNlX3RhYmxlID0gUkJfUk9PVDsKLQljbS5saXN0ZW5fc2VydmljZV9pZCA9IF9fY29uc3RhbnRfYmU2NF90b19jcHUoSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpOworCWNtLmxpc3Rlbl9zZXJ2aWNlX2lkID0gYmU2NF90b19jcHUoSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpOwogCWNtLnJlbW90ZV9pZF90YWJsZSA9IFJCX1JPT1Q7CiAJY20ucmVtb3RlX3FwX3RhYmxlID0gUkJfUk9PVDsKIAljbS5yZW1vdGVfc2lkcl90YWJsZSA9IFJCX1JPT1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKaW5kZXggYWVjOWM3YS4uN2U2M2MwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaApAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICNkZWZpbmUgSUJfQ01fQ0xBU1NfVkVSU0lPTgkyIC8qIElCIHNwZWNpZmljYXRpb24gMS4yICovCiAKLSNkZWZpbmUgQ01fUkVRX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBDTV9NUkFfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIENNX1JFSl9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMikKLSNkZWZpbmUgQ01fUkVQX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDEzKQotI2RlZmluZSBDTV9SVFVfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTQpCi0jZGVmaW5lIENNX0RSRVFfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTUpCi0jZGVmaW5lIENNX0RSRVBfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTYpCi0jZGVmaW5lIENNX1NJRFJfUkVRX0FUVFJfSUQgX19jb25zdGFudF9odG9ucygweDAwMTcpCi0jZGVmaW5lIENNX1NJRFJfUkVQX0FUVFJfSUQgX19jb25zdGFudF9odG9ucygweDAwMTgpCi0jZGVmaW5lIENNX0xBUF9BVFRSX0lEICAgICAgX19jb25zdGFudF9odG9ucygweDAwMTkpCi0jZGVmaW5lIENNX0FQUl9BVFRSX0lEICAgICAgX19jb25zdGFudF9odG9ucygweDAwMUEpCisjZGVmaW5lIENNX1JFUV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIENNX01SQV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTEpCisjZGVmaW5lIENNX1JFSl9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTIpCisjZGVmaW5lIENNX1JFUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTMpCisjZGVmaW5lIENNX1JUVV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTQpCisjZGVmaW5lIENNX0RSRVFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE1KQorI2RlZmluZSBDTV9EUkVQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNikKKyNkZWZpbmUgQ01fU0lEUl9SRVFfQVRUUl9JRAljcHVfdG9fYmUxNigweDAwMTcpCisjZGVmaW5lIENNX1NJRFJfUkVQX0FUVFJfSUQJY3B1X3RvX2JlMTYoMHgwMDE4KQorI2RlZmluZSBDTV9MQVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE5KQorI2RlZmluZSBDTV9BUFJfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDFBKQogCiBlbnVtIGNtX21zZ19zZXF1ZW5jZSB7CiAJQ01fTVNHX1NFUVVFTkNFX1JFUSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKaW5kZXggNzkxM2I4MC4uZDFmYmE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiAJQlVHX09OKGRldmljZS0+cmVnX3N0YXRlICE9IElCX0RFVl9VTlJFR0lTVEVSRUQpOwogCi0JaWJfZGV2aWNlX3VucmVnaXN0ZXJfc3lzZnMoZGV2aWNlKTsKKwlrb2JqZWN0X3B1dCgmZGV2aWNlLT5kZXYua29iaik7CiB9CiBFWFBPUlRfU1lNQk9MKGliX2RlYWxsb2NfZGV2aWNlKTsKIApAQCAtMzQ4LDYgKzM0OCw4IEBACiAKIAltdXRleF91bmxvY2soJmRldmljZV9tdXRleCk7CiAKKwlpYl9kZXZpY2VfdW5yZWdpc3Rlcl9zeXNmcyhkZXZpY2UpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2xpZW50X2RhdGFfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb250ZXh0LCB0bXAsICZkZXZpY2UtPmNsaWVudF9kYXRhX2xpc3QsIGxpc3QpCiAJCWtmcmVlKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCA1YzU0ZmMyLi5kZTkyMmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtMzAxLDYgKzMwMSwxNiBAQAogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5jb250ZXh0ID0gY29udGV4dDsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQucXAgPSBwb3J0X3ByaXYtPnFwX2luZm9bcXBuXS5xcDsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQucG9ydF9udW0gPSBwb3J0X251bTsKKwlzcGluX2xvY2tfaW5pdCgmbWFkX2FnZW50X3ByaXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+c2VuZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5kb25lX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+cm1wcF9saXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmssIHRpbWVvdXRfc2VuZHMpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdCk7CisJSU5JVF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfd29yaywgbG9jYWxfY29tcGxldGlvbnMpOworCWF0b21pY19zZXQoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCwgMSk7CisJaW5pdF9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydF9wcml2LT5yZWdfbG9jaywgZmxhZ3MpOwogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5oaV90aWQgPSArK2liX21hZF9jbGllbnRfaWQ7CkBAIC0zNTAsMTcgKzM2MCw2IEBACiAJbGlzdF9hZGRfdGFpbCgmbWFkX2FnZW50X3ByaXYtPmFnZW50X2xpc3QsICZwb3J0X3ByaXYtPmFnZW50X2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fbG9ja19pbml0KCZtYWRfYWdlbnRfcHJpdi0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5zZW5kX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+d2FpdF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmRvbmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5ybXBwX2xpc3QpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yaywgdGltZW91dF9zZW5kcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF9saXN0KTsKLQlJTklUX1dPUksoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF93b3JrLCBsb2NhbF9jb21wbGV0aW9ucyk7Ci0JYXRvbWljX3NldCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50LCAxKTsKLQlpbml0X2NvbXBsZXRpb24oJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKLQogCXJldHVybiAmbWFkX2FnZW50X3ByaXYtPmFnZW50OwogCiBlcnJvcjQ6CkBAIC03NDMsOSArNzQyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfCBJQl9NQURfUkVTVUxUX0NPTlNVTUVEOgogCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBtYWRfcHJpdik7Ci0JCWtmcmVlKGxvY2FsKTsKLQkJcmV0ID0gMTsKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgSUJfTUFEX1JFU1VMVF9TVUNDRVNTOgogCQkvKiBUcmVhdCBsaWtlIGFuIGluY29taW5nIHJlY2VpdmUgTUFEICovCiAJCXBvcnRfcHJpdiA9IGliX2dldF9tYWRfcG9ydChtYWRfYWdlbnRfcHJpdi0+YWdlbnQuZGV2aWNlLApAQCAtNzU2LDEwICs3NTMsMTIgQEAKIAkJCQkJCSAgICAgICAgJm1hZF9wcml2LT5tYWQubWFkKTsKIAkJfQogCQlpZiAoIXBvcnRfcHJpdiB8fCAhcmVjdl9tYWRfYWdlbnQpIHsKKwkJCS8qCisJCQkgKiBObyByZWNlaXZpbmcgYWdlbnQgc28gZHJvcCBwYWNrZXQgYW5kCisJCQkgKiBnZW5lcmF0ZSBzZW5kIGNvbXBsZXRpb24uCisJCQkgKi8KIAkJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIG1hZF9wcml2KTsKLQkJCWtmcmVlKGxvY2FsKTsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQl9CiAJCWxvY2FsLT5tYWRfcHJpdiA9IG1hZF9wcml2OwogCQlsb2NhbC0+cmVjdl9tYWRfYWdlbnQgPSByZWN2X21hZF9hZ2VudDsKQEAgLTIzNTYsNyArMjM1NSw3IEBACiAJc3RydWN0IGliX21hZF9sb2NhbF9wcml2YXRlICpsb2NhbDsKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKnJlY3ZfbWFkX2FnZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlY3YgPSAwOworCWludCBmcmVlX21hZDsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAJc3RydWN0IGliX21hZF9zZW5kX3djIG1hZF9zZW5kX3djOwogCkBAIC0yMzcwLDE0ICsyMzY5LDE1IEBACiAJCQkJICAgY29tcGxldGlvbl9saXN0KTsKIAkJbGlzdF9kZWwoJmxvY2FsLT5jb21wbGV0aW9uX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlmcmVlX21hZCA9IDA7CiAJCWlmIChsb2NhbC0+bWFkX3ByaXYpIHsKIAkJCXJlY3ZfbWFkX2FnZW50ID0gbG9jYWwtPnJlY3ZfbWFkX2FnZW50OwogCQkJaWYgKCFyZWN2X21hZF9hZ2VudCkgewogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHJlY2VpdmUgTUFEIGFnZW50IGZvciBsb2NhbCBjb21wbGV0aW9uXG4iKTsKKwkJCQlmcmVlX21hZCA9IDE7CiAJCQkJZ290byBsb2NhbF9zZW5kX2NvbXBsZXRpb247CiAJCQl9CiAKLQkJCXJlY3YgPSAxOwogCQkJLyoKIAkJCSAqIERlZmluZWQgYmVoYXZpb3IgaXMgdG8gY29tcGxldGUgcmVzcG9uc2UKIAkJCSAqIGJlZm9yZSByZXF1ZXN0CkBAIC0yNDIyLDcgKzI0MjIsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlhdG9taWNfZGVjKCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpOwotCQlpZiAoIXJlY3YpCisJCWlmIChmcmVlX21hZCkKIAkJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIGxvY2FsLT5tYWRfcHJpdik7CiAJCWtmcmVlKGxvY2FsKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwppbmRleCAzYWYyYjg0Li41N2EzYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKQEAgLTczNSw3ICs3MzUsNyBAQAogCQlnb3RvIGJhZDsKIAl9CiAKLQlpZiAocm1wcF9oZHItPnNlZ19udW0gPT0gX19jb25zdGFudF9odG9ubCgxKSkgeworCWlmIChybXBwX2hkci0+c2VnX251bSA9PSBjcHVfdG9fYmUzMigxKSkgewogCQlpZiAoIShpYl9nZXRfcm1wcF9mbGFncyhybXBwX2hkcikgJiBJQl9NR01UX1JNUFBfRkxBR19GSVJTVCkpIHsKIAkJCXJtcHBfc3RhdHVzID0gSUJfTUdNVF9STVBQX1NUQVRVU19CQURfU0VHOwogCQkJZ290byBiYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCA3ODYzYTUwLi4xODY1MDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTM5NSw2ICszOTUsOCBAQAogCX0KIAogCXNwaW5fbG9ja19pcnEoJnBvcnQtPmFoX2xvY2spOworCWlmIChwb3J0LT5zbV9haCkKKwkJa3JlZl9wdXQoJnBvcnQtPnNtX2FoLT5yZWYsIGZyZWVfc21fYWgpOwogCXBvcnQtPnNtX2FoID0gbmV3X2FoOwogCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+YWhfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCmluZGV4IGI0M2Y3ZDM2OC4uNWMwNGNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCkBAIC02NiwxMSArNjYsNiBAQAogCWludAkJCWluZGV4OwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgaWJkZXZfaXNfYWxpdmUoY29uc3Qgc3RydWN0IGliX2RldmljZSAqZGV2KQotewotCXJldHVybiBkZXYtPnJlZ19zdGF0ZSA9PSBJQl9ERVZfUkVHSVNURVJFRDsKLX0KLQogc3RhdGljIHNzaXplX3QgcG9ydF9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC04MCw4ICs3NSw2IEBACiAKIAlpZiAoIXBvcnRfYXR0ci0+c2hvdykKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKCFpYmRldl9pc19hbGl2ZShwLT5pYmRldikpCi0JCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIHBvcnRfYXR0ci0+c2hvdyhwLCBwb3J0X2F0dHIsIGJ1Zik7CiB9CkBAIC01NjIsOSArNTU1LDYgQEAKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwogCi0JaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXN3aXRjaCAoZGV2LT5ub2RlX3R5cGUpIHsKIAljYXNlIFJETUFfTk9ERV9JQl9DQToJICByZXR1cm4gc3ByaW50ZihidWYsICIlZDogQ0FcbiIsIGRldi0+bm9kZV90eXBlKTsKIAljYXNlIFJETUFfTk9ERV9STklDOgkgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBSTklDXG4iLCBkZXYtPm5vZGVfdHlwZSk7CkBAIC01ODEsOSArNTcxLDYgQEAKIAlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgYXR0cjsKIAlzc2l6ZV90IHJldDsKIAotCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlyZXQgPSBpYl9xdWVyeV9kZXZpY2UoZGV2LCAmYXR0cik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTYwMCw5ICs1ODcsNiBAQAogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7CiAKLQlpZiAoIWliZGV2X2lzX2FsaXZlKGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKIAkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopICZkZXYtPm5vZGVfZ3VpZClbMF0pLAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgJmRldi0+bm9kZV9ndWlkKVsxXSksCkBAIC04NDgsNiArODMyLDkgQEAKIAlzdHJ1Y3Qga29iamVjdCAqcCwgKnQ7CiAJc3RydWN0IGliX3BvcnQgKnBvcnQ7CiAKKwkvKiBIb2xkIGtvYmplY3QgdW50aWwgaWJfZGVhbGxvY19kZXZpY2UoKSAqLworCWtvYmplY3RfZ2V0KCZkZXZpY2UtPmRldi5rb2JqKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0LCAmZGV2aWNlLT5wb3J0X2xpc3QsIGVudHJ5KSB7CiAJCWxpc3RfZGVsKCZwLT5lbnRyeSk7CiAJCXBvcnQgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGliX3BvcnQsIGtvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwppbmRleCAxMTNmM2MwLi43ZDc5YWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwpAQCAtNzYsNyArNzYsNiBAQAogc3RhdGljIHZvaWQgYzJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBpbnQgYzJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CiBzdGF0aWMgdm9pZCBjMl9yZXNldChzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGMyX3BjaV90YWJsZVtdID0gewogCXsgUENJX0RFVklDRSgweDE4YjgsIDB4YjAwMSkgfSwKQEAgLTM0OSw3ICszNDgsNyBAQAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfQUREUik7CiAJCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfRE9ORSksCiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7Ci0JCQkJYzJfcG9ydC0+bmV0c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCWMyX3BvcnQtPm5ldGRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKIAkJCQlfX3Jhd193cml0ZXcoMCwKQEAgLTQ1Nyw3ICs0NTYsNyBAQAogCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOwogCiAJcHJfZGVidWcoInBhY2tldCBkcm9wcGVkXG4iKTsKLQljMl9wb3J0LT5uZXRzdGF0cy5yeF9kcm9wcGVkKys7CisJYzJfcG9ydC0+bmV0ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiB9CiAKIHN0YXRpYyB2b2lkIGMyX3J4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNTMyLDggKzUzMSw4IEBACiAJCW5ldGlmX3J4KHNrYik7CiAKIAkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJYzJfcG9ydC0+bmV0c3RhdHMucnhfcGFja2V0cysrOwotCQljMl9wb3J0LT5uZXRzdGF0cy5yeF9ieXRlcyArPSBidWZsZW47CisJCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGJ1ZmxlbjsKIAl9CiAKIAkvKiBTYXZlIHdoZXJlIHdlIGxlZnQgb2ZmICovCkBAIC03OTcsOCArNzk2LDggQEAKIAlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9SRUFEWSksCiAJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CiAKLQljMl9wb3J0LT5uZXRzdGF0cy50eF9wYWNrZXRzKys7Ci0JYzJfcG9ydC0+bmV0c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOworCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOwogCiAJLyogTG9vcCB0aHJ1IGFkZGl0aW9uYWwgZGF0YSBmcmFnbWVudHMgYW5kIHF1ZXVlIHRoZW0gKi8KIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgewpAQCAtODIzLDggKzgyMiw4IEBACiAJCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9SRUFEWSksCiAJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKIAotCQkJYzJfcG9ydC0+bmV0c3RhdHMudHhfcGFja2V0cysrOwotCQkJYzJfcG9ydC0+bmV0c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOworCQkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKIAkJfQogCX0KIApAQCAtODQ1LDEzICs4NDQsNiBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYzJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JcmV0dXJuICZjMl9wb3J0LT5uZXRzdGF0czsKLX0KLQogc3RhdGljIHZvaWQgYzJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTg4MCw2ICs4NzIsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGMyX25ldGRldiA9IHsKKwkubmRvX29wZW4gCQk9IGMyX3VwLAorCS5uZG9fc3RvcCAJCT0gYzJfZG93biwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYzJfeG1pdF9mcmFtZSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYzJfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYzJfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBJbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmMyX2RldmluaXQoc3RydWN0IGMyX2RldiAqYzJkZXYsCiAJCQkJICAgICB2b2lkIF9faW9tZW0gKiBtbWlvX2FkZHIpCkBAIC04OTQsMTIgKzg5Niw3IEBACiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZjMmRldi0+cGNpZGV2LT5kZXYpOwogCi0JbmV0ZGV2LT5vcGVuID0gYzJfdXA7Ci0JbmV0ZGV2LT5zdG9wID0gYzJfZG93bjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGMyX3htaXRfZnJhbWU7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBjMl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gYzJfdHhfdGltZW91dDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBjMl9jaGFuZ2VfbXR1OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjMl9uZXRkZXY7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEMyX1RYX1RJTUVPVVQ7CiAJbmV0ZGV2LT5pcnEgPSBjMmRldi0+cGNpZGV2LT5pcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmgKaW5kZXggZDEyYTI0YS4uZjdmZjY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmgKQEAgLTM2OSw4ICszNjksNiBAQAogCXVuc2lnbmVkIGxvbmcgbWVtX3NpemU7CiAKIAl1MzIgcnhfYnVmX3NpemU7Ci0KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRzdGF0czsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCmluZGV4IDUxMTlkNjUuLmYxOTQ4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCkBAIC03MDgsMjYgKzcwOCwyNyBAQAogCiBzdGF0aWMgaW50IGMyX3BzZXVkb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQogewotCWludCByZXQgPSAwOwotCiAJaWYgKG5ld19tdHUgPCBFVEhfWkxFTiB8fCBuZXdfbXR1ID4gRVRIX0pVTUJPX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAKIAkvKiBUT0RPOiBUZWxsIHJuaWMgYWJvdXQgbmV3IHJtZGEgaW50ZXJmYWNlIG10dSAqLwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzJfcHNldWRvX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBjMl9wc2V1ZG9fdXAsCisJLm5kb19zdG9wIAkJPSBjMl9wc2V1ZG9fZG93biwKKwkubmRvX3N0YXJ0X3htaXQgCT0gYzJfcHNldWRvX3htaXRfZnJhbWUsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGMyX3BzZXVkb19jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQluZXRkZXYtPm9wZW4gPSBjMl9wc2V1ZG9fdXA7Ci0JbmV0ZGV2LT5zdG9wID0gYzJfcHNldWRvX2Rvd247Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjMl9wc2V1ZG9feG1pdF9mcmFtZTsKLQluZXRkZXYtPmdldF9zdGF0cyA9IE5VTEw7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gTlVMTDsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IE5VTEw7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gYzJfcHNldWRvX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmMyX3BzZXVkb19uZXRkZXZfb3BzOworCiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDA7CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCW5ldGRldi0+bXR1ID0gMTUwMDsKQEAgLTczNSw3ICs3MzYsNiBAQAogCW5ldGRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKIAluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CiAJbmV0ZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmMyX3BzZXVkb19uZXRkZXZfaW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMKaW5kZXggNGRjZjA4Yi4uYTRhODJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCWlmICgoQ1FFX09QQ09ERSgqY3FlKSA9PSBUM19SRUFEX1JFU1ApICYmIFNRX1RZUEUoKmNxZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKChDUUVfT1BDT0RFKCpjcWUpID09IFQzX1NFTkQpICYmIFJRX1RZUEUoKmNxZSkgJiYKKwlpZiAoQ1FFX1NFTkRfT1BDT0RFKCpjcWUpICYmIFJRX1RZUEUoKmNxZSkgJiYKIAkgICAgUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKQogCQlyZXR1cm4gMDsKIApAQCAtNzAxLDYgKzcwMSw5IEBACiAJdTMyIHN0YWdfaWR4OwogCXUzMiB3cHRyOwogCisJaWYgKHJkZXZfcC0+ZmxhZ3MpCisJCXJldHVybiAtRUlPOworCiAJc3RhZ19zdGF0ZSA9IHN0YWdfc3RhdGUgPiAwOwogCXN0YWdfaWR4ID0gKCpzdGFnKSA+PiA4OwogCkBAIC05MzgsNiArOTQxLDIzIEBACiAJaWYgKCFyZGV2X3AtPnQzY2Rldl9wKQogCQlyZGV2X3AtPnQzY2Rldl9wID0gZGV2MnQzY2RldihuZXRkZXZfcCk7CiAJcmRldl9wLT50M2NkZXZfcC0+dWxwID0gKHZvaWQgKikgcmRldl9wOworCisJZXJyID0gcmRldl9wLT50M2NkZXZfcC0+Y3RsKHJkZXZfcC0+dDNjZGV2X3AsIEdFVF9FTUJFRERFRF9JTkZPLAorCQkJCQkgJihyZGV2X3AtPmZ3X2luZm8pKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgdDNjZGV2X3AoJXApLT5jdGwgcmV0dXJuZWQgZXJyb3IgJWQuXG4iLAorCQkgICAgIF9fZnVuY19fLCByZGV2X3AtPnQzY2Rldl9wLCBlcnIpOworCQlnb3RvIGVycjE7CisJfQorCWlmIChHX0ZXX1ZFUlNJT05fTUFKT1IocmRldl9wLT5md19pbmZvLmZ3X3ZlcnMpICE9IENYSU9fRldfTUFKKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0QgImZhdGFsIGZpcm13YXJlIHZlcnNpb24gbWlzbWF0Y2g6ICIKKwkJICAgICAgICJuZWVkIHZlcnNpb24gJXUgYnV0IGFkYXB0ZXIgaGFzIHZlcnNpb24gJXVcbiIsCisJCSAgICAgICBDWElPX0ZXX01BSiwKKwkJICAgICAgIEdfRldfVkVSU0lPTl9NQUpPUihyZGV2X3AtPmZ3X2luZm8uZndfdmVycykpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjE7CisJfQorCiAJZXJyID0gcmRldl9wLT50M2NkZXZfcC0+Y3RsKHJkZXZfcC0+dDNjZGV2X3AsIFJETUFfR0VUX1BBUkFNUywKIAkJCQkJICYocmRldl9wLT5ybmljX2luZm8pKTsKIAlpZiAoZXJyKSB7CkBAIC0xMjA0LDExICsxMjI0LDEyIEBACiAJCX0KIAogCQkvKiBpbmNvbWluZyBTRU5EIHdpdGggbm8gcmVjZWl2ZSBwb3N0ZWQgZmFpbHVyZXMgKi8KLQkJaWYgKChDUUVfT1BDT0RFKCpod19jcWUpID09IFQzX1NFTkQpICYmIFJRX1RZUEUoKmh3X2NxZSkgJiYKKwkJaWYgKENRRV9TRU5EX09QQ09ERSgqaHdfY3FlKSAmJiBSUV9UWVBFKCpod19jcWUpICYmCiAJCSAgICBRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpIHsKIAkJCXJldCA9IC0xOwogCQkJZ290byBza2lwX2NxZTsKIAkJfQorCQlCVUdfT04oKCpjcWVfZmx1c2hlZCA9PSAwKSAmJiAhU1dfQ1FFKCpod19jcWUpKTsKIAkJZ290byBwcm9jX2NxZTsKIAl9CiAKQEAgLTEyMjMsNiArMTI0NCwxMyBAQAogCQkgKiB0aGVuIHdlIGNvbXBsZXRlIHRoaXMgd2l0aCBUUFRfRVJSX01TTiBhbmQgbWFyayB0aGUgd3EgaW4KIAkJICogZXJyb3IuCiAJCSAqLworCisJCWlmIChRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpIHsKKwkJCXdxLT5lcnJvciA9IDE7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gc2tpcF9jcWU7CisJCX0KKwogCQlpZiAodW5saWtlbHkoKENRRV9XUklEX01TTigqaHdfY3FlKSAhPSAod3EtPnJxX3JwdHIgKyAxKSkpKSB7CiAJCQl3cS0+ZXJyb3IgPSAxOwogCQkJaHdfY3FlLT5oZWFkZXIgfD0gaHRvbmwoVl9DUUVfU1RBVFVTKFRQVF9FUlJfTVNOKSk7CkBAIC0xMjc3LDYgKzEzMDUsNyBAQAogCQkJY3hpb19oYWxfcGJscG9vbF9mcmVlKHdxLT5yZGV2LAogCQkJCXdxLT5ycVtRX1BUUjJJRFgod3EtPnJxX3JwdHIsCiAJCQkJd3EtPnJxX3NpemVfbG9nMildLnBibF9hZGRyLCBUM19TVEFHMF9QQkxfU0laRSk7CisJCUJVR19PTihRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpOwogCQl3cS0+cnFfcnB0cisrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAppbmRleCA2NTZmZTQ3Li4wOTRhNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaApAQCAtNjEsNiArNjEsOCBAQAogCiAjZGVmaW5lIFQzX01BWF9ERVZfTkFNRV9MRU4gMzIKIAorI2RlZmluZSBDWElPX0ZXX01BSiA3CisKIHN0cnVjdCBjeGlvX2hhbF9jdHJsX3FwIHsKIAl1MzIgd3B0cjsKIAl1MzIgcnB0cjsKQEAgLTEwOCw2ICsxMTAsOSBAQAogCXN0cnVjdCBnZW5fcG9vbCAqcGJsX3Bvb2w7CiAJc3RydWN0IGdlbl9wb29sICpycXRfcG9vbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBjaF9lbWJlZGRlZF9pbmZvIGZ3X2luZm87CisJdTMyCWZsYWdzOworI2RlZmluZQlDWElPX0VSUk9SX0ZBVEFMCTEKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGN4aW9fbnVtX3N0YWdzKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCmluZGV4IDA0NjE4ZjcuLmZmOWJlMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaApAQCAtNjA0LDYgKzYwNCwxMiBAQAogI2RlZmluZSBDUUVfU1RBVFVTKHgpICAgICAoR19DUUVfU1RBVFVTKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSkKICNkZWZpbmUgQ1FFX09QQ09ERSh4KSAgICAgKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkpCiAKKyNkZWZpbmUgQ1FFX1NFTkRfT1BDT0RFKHgpKCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORCkgfHwgXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkRfV0lUSF9TRSkgfHwgXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkRfV0lUSF9JTlYpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfU0VfSU5WKSkKKwogI2RlZmluZSBDUUVfTEVOKHgpICAgICAgICAoYmUzMl90b19jcHUoKHgpLmxlbikpCiAKIC8qIHVzZWQgZm9yIFJRIGNvbXBsZXRpb24gcHJvY2Vzc2luZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKaW5kZXggNDQ4OWM4OS4uMzdhNGZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCkBAIC01MSwxMyArNTEsMTUgQEAKIAogc3RhdGljIHZvaWQgb3Blbl9ybmljX2RldihzdHJ1Y3QgdDNjZGV2ICopOwogc3RhdGljIHZvaWQgY2xvc2Vfcm5pY19kZXYoc3RydWN0IHQzY2RldiAqKTsKK3N0YXRpYyB2b2lkIGl3Y2hfZXJyX2hhbmRsZXIoc3RydWN0IHQzY2RldiAqLCB1MzIsIHUzMik7CiAKIHN0cnVjdCBjeGdiM19jbGllbnQgdDNjX2NsaWVudCA9IHsKIAkubmFtZSA9ICJpd19jeGdiMyIsCiAJLmFkZCA9IG9wZW5fcm5pY19kZXYsCiAJLnJlbW92ZSA9IGNsb3NlX3JuaWNfZGV2LAogCS5oYW5kbGVycyA9IHQzY19oYW5kbGVycywKLQkucmVkaXJlY3QgPSBpd2NoX2VwX3JlZGlyZWN0CisJLnJlZGlyZWN0ID0gaXdjaF9lcF9yZWRpcmVjdCwKKwkuZXJyX2hhbmRsZXIgPSBpd2NoX2Vycl9oYW5kbGVyCiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTsKQEAgLTE2MCw2ICsxNjIsMTcgQEAKIAltdXRleF91bmxvY2soJmRldl9tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIGl3Y2hfZXJyX2hhbmRsZXIoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKQoreworCXN0cnVjdCBjeGlvX3JkZXYgKnJkZXYgPSB0ZGV2LT51bHA7CisKKwlpZiAoc3RhdHVzID09IE9GRkxPQURfU1RBVFVTX0RPV04pCisJCXJkZXYtPmZsYWdzID0gQ1hJT19FUlJPUl9GQVRBTDsKKworCXJldHVybjsKKworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpd2NoX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCmluZGV4IDQ0ZTkzNmUuLjg2OTk5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwpAQCAtMTY3OCw2ICsxNjc4LDkgQEAKIHsKIAlzdHJ1Y3QgaXdjaF9lcCAqZXAgPSBjdHg7CiAKKwlpZiAoc3RhdGVfcmVhZCgmZXAtPmNvbSkgIT0gRlBEVV9NT0RFKQorCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKKwogCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBjcGxfcmRtYV90ZXJtaW5hdGUpKTsKIAlQREJHKCIlcyBzYXZpbmcgJWQgYnl0ZXMgb2YgdGVybSBtc2dcbiIsIF9fZnVuY19fLCBza2ItPmxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYwppbmRleCA3YjY3YTY3Li43NDNjNWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKQEAgLTE3OSwxMSArMTc5LDYgQEAKIAljYXNlIFRQVF9FUlJfQk9VTkQ6CiAJY2FzZSBUUFRfRVJSX0lOVkFMSURBVEVfU0hBUkVEX01SOgogCWNhc2UgVFBUX0VSUl9JTlZBTElEQVRFX01SX1dJVEhfTVdfQk9VTkQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgLSBDUUUgRXJyIHFwaWQgMHgleCBvcGNvZGUgJWQgc3RhdHVzIDB4JXggIgotCQkgICAgICAgInR5cGUgJWQgd3JpZC5oaSAweCV4IHdyaWQubG8gMHgleCBcbiIsIF9fZnVuY19fLAotCQkgICAgICAgQ1FFX1FQSUQocnNwX21zZy0+Y3FlKSwgQ1FFX09QQ09ERShyc3BfbXNnLT5jcWUpLAotCQkgICAgICAgQ1FFX1NUQVRVUyhyc3BfbXNnLT5jcWUpLCBDUUVfVFlQRShyc3BfbXNnLT5jcWUpLAotCQkgICAgICAgQ1FFX1dSSURfSEkocnNwX21zZy0+Y3FlKSwgQ1FFX1dSSURfTE9XKHJzcF9tc2ctPmNxZSkpOwogCQkoKmNocC0+aWJjcS5jb21wX2hhbmRsZXIpKCZjaHAtPmliY3EsIGNocC0+aWJjcS5jcV9jb250ZXh0KTsKIAkJcG9zdF9xcF9ldmVudChybmljcCwgY2hwLCByc3BfbXNnLCBJQl9FVkVOVF9RUF9BQ0NFU1NfRVJSLCAxKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCAxOTY2MWIyLi5jNzU4ZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTk5LDggKzk5LDggQEAKIAlpZiAod3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKSB7CiAJCXBsZW4gPSA0OwogCQl3cWUtPndyaXRlLnNnbFswXS5zdGFnID0gd3ItPmV4LmltbV9kYXRhOwotCQl3cWUtPndyaXRlLnNnbFswXS5sZW4gPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwotCQl3cWUtPndyaXRlLm51bV9zZ2xlID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKKwkJd3FlLT53cml0ZS5zZ2xbMF0ubGVuID0gY3B1X3RvX2JlMzIoMCk7CisJCXdxZS0+d3JpdGUubnVtX3NnbGUgPSBjcHVfdG9fYmUzMigwKTsKIAkJKmZsaXRfY250ID0gNjsKIAl9IGVsc2UgewogCQlwbGVuID0gMDsKQEAgLTE5NSwxNSArMTk1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUQkQ6IHRoaXMgaXMgZ29pbmcgdG8gYmUgbW92ZWQgdG8gZmlybXdhcmUuIE1pc3NpbmcgcGRpZC9xcGlkIGNoZWNrIGZvciBub3cuCi0gKi8KIHN0YXRpYyBpbnQgaXdjaF9zZ2wycGJsX21hcChzdHJ1Y3QgaXdjaF9kZXYgKnJocCwgc3RydWN0IGliX3NnZSAqc2dfbGlzdCwKIAkJCSAgICB1MzIgbnVtX3NnbGUsIHUzMiAqIHBibF9hZGRyLCB1OCAqIHBhZ2Vfc2l6ZSkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaXdjaF9tciAqbWhwOwotCXUzMiBvZmZzZXQ7CisJdTY0IG9mZnNldDsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3NnbGU7IGkrKykgewogCiAJCW1ocCA9IGdldF9taHAocmhwLCAoc2dfbGlzdFtpXS5sa2V5KSA+PiA4KTsKQEAgLTIzNSw4ICsyMzIsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJb2Zmc2V0ID0gc2dfbGlzdFtpXS5hZGRyIC0gbWhwLT5hdHRyLnZhX2ZibzsKLQkJb2Zmc2V0ICs9ICgodTMyKSBtaHAtPmF0dHIudmFfZmJvKSAlCi0JCSAgICAgICAgICAoMVVMIDw8ICgxMiArIG1ocC0+YXR0ci5wYWdlX3NpemUpKTsKKwkJb2Zmc2V0ICs9IG1ocC0+YXR0ci52YV9mYm8gJgorCQkJICAoKDFVTCA8PCAoMTIgKyBtaHAtPmF0dHIucGFnZV9zaXplKSkgLSAxKTsKIAkJcGJsX2FkZHJbaV0gPSAoKG1ocC0+YXR0ci5wYmxfYWRkciAtCiAJCQkgICAgICAgIHJocC0+cmRldi5ybmljX2luZm8ucGJsX2Jhc2UpID4+IDMpICsKIAkJCSAgICAgIChvZmZzZXQgPj4gKDEyICsgbWhwLT5hdHRyLnBhZ2Vfc2l6ZSkpOwpAQCAtMjY2LDggKzI2Myw4IEBACiAJCXdxZS0+cmVjdi5zZ2xbaV0ubGVuID0gY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKIAogCQkvKiB0byBpbiB0aGUgV1FFID09IHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSAqLwotCQl3cWUtPnJlY3Yuc2dsW2ldLnRvID0gY3B1X3RvX2JlNjQoKCh1MzIpIHdyLT5zZ19saXN0W2ldLmFkZHIpICUKLQkJCQkoMVVMIDw8ICgxMiArIHBhZ2Vfc2l6ZVtpXSkpKTsKKwkJd3FlLT5yZWN2LnNnbFtpXS50byA9IGNwdV90b19iZTY0KCgodTMyKXdyLT5zZ19saXN0W2ldLmFkZHIpICYKKwkJCQkoKDFVTCA8PCAoMTIgKyBwYWdlX3NpemVbaV0pKSAtIDEpKTsKIAogCQkvKiBwYmxfYWRkciBpcyB0aGUgYWRhcHRlcnMgYWRkcmVzcyBpbiB0aGUgUEJMICovCiAJCXdxZS0+cmVjdi5wYmxfYWRkcltpXSA9IGNwdV90b19iZTMyKHBibF9hZGRyW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCmluZGV4IDQ0NDQ3YWEuLmM1NjhiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwpAQCAtNDYsMTEgKzQ2LDExIEBACiAjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKICNpbmNsdWRlICJoY3BfaWYuaCIKIAotI2RlZmluZSBJQl9NQURfU1RBVFVTX1JFRElSRUNUCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19SRURJUkVDVAkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX1ZFUlNJT04JY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX01FVEhPRAljcHVfdG9fYmUxNigweDAwMDgpCiAKLSNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJX19jb25zdGFudF9odG9ucygweDAwMDEpCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCWNwdV90b19iZTE2KDB4MDAwMSkKIAogLyoqCiAgKiBlaGNhX2RlZmluZV9zcXAgLSBEZWZpbmVzIHNwZWNpYWwgcXVldWUgcGFpciAxIChHU0kgUVApLiBXaGVuIHNwZWNpYWwgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCA2OWMwY2UzLi5jYjlkYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0yNzE1LDcgKzI3MTUsNyBAQAogICogdG8gcHJldmVudCBIb0wgYmxvY2tpbmcsIHRoZW4gc3RhcnQgdGhlIEhvTCB0aW1lciB0aGF0CiAgKiBwZXJpb2RpY2FsbHkgY29udGludWVzLCB0aGVuIHN0b3AgcHJvY3MsIHNvIHRoZXkgY2FuIGRldGVjdAogICogbGluayBkb3duIGlmIHRoZXkgd2FudCwgYW5kIGRvIHNvbWV0aGluZyBhYm91dCBpdC4KLSAqIFRpbWVyIG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcsIHNvIHVzZSBfX21vZF90aW1lciwgbm90IGFkZF90aW1lci4KKyAqIFRpbWVyIG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcsIHNvIHVzZSBtb2RfdGltZXIsIG5vdCBhZGRfdGltZXIuCiAgKi8KIHZvaWQgaXBhdGhfaG9sX2Rvd24oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewpAQCAtMjcyNCw3ICsyNzI0LDcgQEAKIAlkZC0+aXBhdGhfaG9sX25leHQgPSBJUEFUSF9IT0xfRE9XTkNPTlQ7CiAJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzID0gamlmZmllcyArCiAJCW1zZWNzX3RvX2ppZmZpZXMoaXBhdGhfaG9sX3RpbWVvdXRfbXMpOwotCV9fbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLCBkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOworCW1vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwgZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKIH0KIAogLyoKQEAgLTI3NjMsNyArMjc2Myw3IEBACiAJZWxzZSB7CiAJCWRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhpcGF0aF9ob2xfdGltZW91dF9tcyk7Ci0JCV9fbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLAorCQltb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsCiAJCQlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwppbmRleCBkYzM3Mjc3Li5mYzcxODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCkBAIC03NzIsOCArNzcyLDggQEAKIAkJCSAiMHgleCwgbm90IDB4JXhcbiIsIGNzdW0sIGlmcC0+aWZfY3N1bSk7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSAwVUxMIHx8Ci0JICAgICooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSBfX2NvbnN0YW50X2NwdV90b19iZTY0KC0xTEwpKSB7CisJaWYgKCooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSBjcHVfdG9fYmU2NCgwKSB8fAorCSAgICAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gfmNwdV90b19iZTY0KDApKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJJbnZhbGlkIEdVSUQgJWxseCBmcm9tIGZsYXNoOyAiCiAJCQkgICAgICAiaWdub3JpbmdcbiIsCiAJCQkgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBpZnAtPmlmX2d1aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCmluZGV4IDY0YWVlZmIuLjA3Nzg3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWlmICghYWRkcnMpIHsKIAkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBzaGFkb3cgZG1hIGhhbmRsZSAiCiAJCQkgICAgICAiYXJyYXksIG5vIGV4cGVjdGVkIHNlbmRzIVxuIik7Ci0JCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJdmZyZWUocGFnZXMpOwogCQlkZC0+aXBhdGhfcGFnZXNoYWRvdyA9IE5VTEw7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKaW5kZXggMTdhMTIzMS4uMTZhNzAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwpAQCAtMzcsMTAgKzM3LDEwIEBACiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAotI2RlZmluZSBJQl9TTVBfVU5TVVBfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhfQVRUUglfX2NvbnN0YW50X2h0b25zKDB4MDAwQykKLSNkZWZpbmUgSUJfU01QX0lOVkFMSURfRklFTEQJX19jb25zdGFudF9odG9ucygweDAwMUMpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9WRVJTSU9OCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIX0FUVFIJY3B1X3RvX2JlMTYoMHgwMDBDKQorI2RlZmluZSBJQl9TTVBfSU5WQUxJRF9GSUVMRAljcHVfdG9fYmUxNigweDAwMUMpCiAKIHN0YXRpYyBpbnQgcmVwbHkoc3RydWN0IGliX3NtcCAqc21wKQogewpAQCAtNzg5LDEyICs3ODksMTIgQEAKIAlyZXR1cm4gcmVjdl9zdWJuX2dldF9wa2V5dGFibGUoc21wLCBpYmRldik7CiB9CiAKLSNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfQ09OVFJPTAlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFQJX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMikKLSNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFEKQotI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQJX19jb25zdGFudF9odG9ucygweDAwMUUpCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFQJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSUwkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSU19FWFQJY3B1X3RvX2JlMTYoMHgwMDFEKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQJY3B1X3RvX2JlMTYoMHgwMDFFKQogCiBzdHJ1Y3QgaWJfcGVyZiB7CiAJdTggYmFzZV92ZXJzaW9uOwpAQCAtODg0LDE5ICs4ODQsMTkgQEAKIAlfX2JlMzIgcG9ydF9yY3ZfcGFja2V0czsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SCQkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9TRUxfTElOS19FUlJPUl9SRUNPVkVSWQkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9TRUxfTElOS19ET1dORUQJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1JFTVBIWVNfRVJST1JTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9ESVNDQVJEUwkJX19jb25zdGFudF9odG9ucygweDAwNDApCi0jZGVmaW5lIElCX1BNQV9TRUxfTE9DQUxfTElOS19JTlRFR1JJVFlfRVJST1JTCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAwKQotI2RlZmluZSBJQl9QTUFfU0VMX0VYQ0VTU0lWRV9CVUZGRVJfT1ZFUlJVTlMJX19jb25zdGFudF9odG9ucygweDA0MDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9WTDE1X0RST1BQRUQJCV9fY29uc3RhbnRfaHRvbnMoMHgwODAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MTAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDQwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDgwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SCQkJY3B1X3RvX2JlMTYoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0RPV05FRAkJCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMJCWNwdV90b19iZTE2KDB4MDAwOCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RJU0NBUkRTCQljcHVfdG9fYmUxNigweDAwNDApCisjZGVmaW5lIElCX1BNQV9TRUxfTE9DQUxfTElOS19JTlRFR1JJVFlfRVJST1JTCWNwdV90b19iZTE2KDB4MDIwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9FWENFU1NJVkVfQlVGRkVSX09WRVJSVU5TCWNwdV90b19iZTE2KDB4MDQwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1ZMMTVfRFJPUFBFRAkJY3B1X3RvX2JlMTYoMHgwODAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQljcHVfdG9fYmUxNigweDEwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJY3B1X3RvX2JlMTYoMHgyMDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9QQUNLRVRTCQljcHVfdG9fYmUxNigweDQwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHg4MDAwKQogCiBzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVyc19leHQgewogCXU4IHJlc2VydmVkOwpAQCAtOTEzLDE0ICs5MTMsMTQgQEAKIAlfX2JlNjQgcG9ydF9tdWx0aWNhc3RfcmN2X3BhY2tldHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9YTUlUX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDIwKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1hNSVRfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDA0MCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9SQ1ZfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDA4MCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEJCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQQkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTCQljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1hNSVRfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDAyMCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1JDVl9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDA4MCkKIAogc3RhdGljIGludCByZWN2X3BtYV9nZXRfY2xhc3Nwb3J0aW5mbyhzdHJ1Y3QgaWJfcGVyZiAqcG1wKQogewpAQCAtOTMzLDcgKzkzMyw3IEBACiAJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCiAJLyogSW5kaWNhdGUgQWxsUG9ydFNlbGVjdCBpcyB2YWxpZCAob25seSBvbmUgcG9ydCBhbnl3YXkpICovCi0JcC0+Y2FwX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDEgPDwgOCk7CisJcC0+Y2FwX21hc2sgPSBjcHVfdG9fYmUxNigxIDw8IDgpOwogCXAtPmJhc2VfdmVyc2lvbiA9IDE7CiAJcC0+Y2xhc3NfdmVyc2lvbiA9IDE7CiAJLyoKQEAgLTk1MSwxMiArOTUxLDExIEBACiAgKiBXZSBzdXBwb3J0IDUgY291bnRlcnMgd2hpY2ggb25seSBjb3VudCB0aGUgbWFuZGF0b3J5IHF1YW50aXRpZXMuCiAgKi8KICNkZWZpbmUgQ09VTlRFUl9NQVNLKHEsIG4pIChxIDw8ICgoOSAtIG4pICogMykpCi0jZGVmaW5lIENPVU5URVJfTUFTSzBfOSBcCi0JX19jb25zdGFudF9jcHVfdG9fYmUzMihDT1VOVEVSX01BU0soMSwgMCkgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDEpIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAyKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMykgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDQpKQorI2RlZmluZSBDT1VOVEVSX01BU0swXzkgY3B1X3RvX2JlMzIoQ09VTlRFUl9NQVNLKDEsIDApIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgMSkgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCAyKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDMpIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgNCkpCiAKIHN0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzY29udHJvbChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAogCQkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKQEAgLTExMzcsNyArMTEzNiw3IEBACiAJCXN0YXR1cyA9IGRldi0+cG1hX3NhbXBsZV9zdGF0dXM7CiAJcC0+c2FtcGxlX3N0YXR1cyA9IGNwdV90b19iZTE2KHN0YXR1cyk7CiAJLyogNjQgYml0cyAqLwotCXAtPmV4dGVuZGVkX3dpZHRoID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKKwlwLT5leHRlbmRlZF93aWR0aCA9IGNwdV90b19iZTMyKDB4ODAwMDAwMDApOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0KTsgaSsrKQogCQlwLT5jb3VudGVyW2ldID0gKHN0YXR1cyAhPSBJQl9QTUFfU0FNUExFX1NUQVRVU19ET05FKSA/IDAgOgogCQkgICAgY3B1X3RvX2JlNjQoCkBAIC0xMTg1LDcgKzExODQsNyBAQAogCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCWlmIChjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlciA+IDB4RkZGRlVMKQotCQlwLT5zeW1ib2xfZXJyb3JfY291bnRlciA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPQogCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcik7CkBAIC0xMTk5LDE3ICsxMTk4LDE3IEBACiAJZWxzZQogCQlwLT5saW5rX2Rvd25lZF9jb3VudGVyID0gKHU4KWNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXI7CiAJaWYgKGNudHJzLnBvcnRfcmN2X2Vycm9ycyA+IDB4RkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfcmN2X2Vycm9ycyA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPQogCQkJY3B1X3RvX2JlMTYoKHUxNikgY250cnMucG9ydF9yY3ZfZXJyb3JzKTsKIAlpZiAoY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMpOwogCWlmIChjbnRycy5wb3J0X3htaXRfZGlzY2FyZHMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF94bWl0X2Rpc2NhcmRzKTsKQEAgLTEyMjAsMjQgKzEyMTksMjQgQEAKIAlwLT5sbGlfZWJvcl9lcnJvcnMgPSAoY250cnMubG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzIDw8IDQpIHwKIAkJY250cnMuZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9yczsKIAlpZiAoY250cnMudmwxNV9kcm9wcGVkID4gMHhGRkZGVUwpCi0JCXAtPnZsMTVfZHJvcHBlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+dmwxNV9kcm9wcGVkID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnZsMTVfZHJvcHBlZCA9IGNwdV90b19iZTE2KCh1MTYpY250cnMudmwxNV9kcm9wcGVkKTsKIAlpZiAoY250cnMucG9ydF94bWl0X2RhdGEgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9kYXRhID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF94bWl0X2RhdGEgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3htaXRfZGF0YSk7CiAJaWYgKGNudHJzLnBvcnRfcmN2X2RhdGEgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X2RhdGEgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3Jjdl9kYXRhKTsKIAlpZiAoY250cnMucG9ydF94bWl0X3BhY2tldHMgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF94bWl0X3BhY2tldHMgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0KIAkJCWNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF94bWl0X3BhY2tldHMpOwogCWlmIChjbnRycy5wb3J0X3Jjdl9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9CiAJCQljcHVfdG9fYmUzMigodTMyKSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKaW5kZXggOTE3MDcxMC4uNzliM2RiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAJCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KIAkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCiAJCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCQkJY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOwogCQlicmVhazsKIAogCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYwppbmRleCA4ZTI1NWFkLi40YjA2OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMKQEAgLTc4MSwxMCArNzgxLDEwIEBACiAJCWRlc2NxcCA9ICZkZC0+aXBhdGhfc2RtYV9kZXNjcVtkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnRdLnF3WzBdOwogCWRlc2NxcCAtPSAyOwogCS8qIFNEbWFMYXN0RGVzYyAqLwotCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTEpOworCWRlc2NxcFswXSB8PSBjcHVfdG9fbGU2NCgxVUxMIDw8IDExKTsKIAlpZiAodHgtPnR4cmVxLmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX0lOVFJFUSkgewogCQkvKiBTRG1hSW50UmVxICovCi0JCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTUpOworCQlkZXNjcXBbMF0gfD0gY3B1X3RvX2xlNjQoMVVMTCA8PCAxNSk7CiAJfQogCiAJLyogQ29tbWl0IHdyaXRlcyB0byBtZW1vcnkgYW5kIGFkdmFuY2UgdGhlIHRhaWwgb24gdGhlIGNoaXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKaW5kZXggODJjYzU4OC4uMjJlNjA5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCQkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCA5MWM3NGNjLi42MDc2Y2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJICovCiAJb2hkci0+YnRoWzFdID0gYWhfYXR0ci0+ZGxpZCA+PSBJUEFUSF9NVUxUSUNBU1RfTElEX0JBU0UgJiYKIAkJYWhfYXR0ci0+ZGxpZCAhPSBJUEFUSF9QRVJNSVNTSVZFX0xJRCA/Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoSVBBVEhfTVVMVElDQVNUX1FQTikgOgorCQljcHVfdG9fYmUzMihJUEFUSF9NVUxUSUNBU1RfUVBOKSA6CiAJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IudWQucmVtb3RlX3Fwbik7CiAJb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIocXAtPnNfbmV4dF9wc24rKyAmIElQQVRIX1BTTl9NQVNLKTsKIAkvKgpAQCAtNTczLDcgKzU3Myw3IEBACiAJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLwogCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAogYmFpbDo7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCAwMTkwZWRjLi44NTU5MTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTIwOSwyMCArMjA5LDIwIEBACiAKIAltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOwogCWlmICghbW0pCi0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuOwogCiAJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3b3JrKQogCQlnb3RvIGJhaWxfbW07CiAKLQlnb3RvIGJhaWw7Ci0KIAlJTklUX1dPUksoJndvcmstPndvcmssIHVzZXJfcGFnZXNfYWNjb3VudCk7CiAJd29yay0+bW0gPSBtbTsKIAl3b3JrLT5udW1fcGFnZXMgPSBudW1fcGFnZXM7CiAKKwlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKKwlyZXR1cm47CisKIGJhaWxfbW06CiAJbW1wdXQobW0pOwotYmFpbDoKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKaW5kZXggODJkOWEwYi4uN2JmZjRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwpAQCAtNjY3LDEzICs2NjcsMTMgQEAKIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2ZpcnN0X2Rlc2MwKF9fbGU2NCBkZXNjcSkKIHsKLQlyZXR1cm4gZGVzY3EgfCBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTIpOworCXJldHVybiBkZXNjcSB8IGNwdV90b19sZTY0KDFVTEwgPDwgMTIpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfbGFzdF9kZXNjMChfX2xlNjQgZGVzY3EpCiB7CiAJCQkJCSAgICAgIC8qIGxhc3QgKi8gIC8qIGRtYSBoZWFkICovCi0JcmV0dXJuIGRlc2NxIHwgX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExIHwgMVVMTCA8PCAxMyk7CisJcmV0dXJuIGRlc2NxIHwgY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSB8IDFVTEwgPDwgMTMpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfZGVzYzEodTY0IGFkZHIpCkBAIC03NjMsNyArNzYzLDcgQEAKIAkJaWYgKG9mcyA+PSBJUEFUSF9TTUFMTEJVRl9EV09SRFMpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBwa3QtPm5hZGRyOyBpKyspIHsKIAkJCQlkZC0+aXBhdGhfc2RtYV9kZXNjcVtkdGFpbF0ucXdbMF0gfD0KLQkJCQkJX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDE0KTsKKwkJCQkJY3B1X3RvX2xlNjQoMVVMTCA8PCAxNCk7CiAJCQkJaWYgKCsrZHRhaWwgPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KQogCQkJCQlkdGFpbCA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCmluZGV4IGNkZjBlNmEuLjkyODlhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCkBAIC0xNTg1LDcgKzE1ODUsNyBAQAogCXU2NCBpYmNzdGF0OwogCiAJbWVtc2V0KHByb3BzLCAwLCBzaXplb2YoKnByb3BzKSk7Ci0JcHJvcHMtPmxpZCA9IGxpZCA/IGxpZCA6IF9fY29uc3RhbnRfYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOworCXByb3BzLT5saWQgPSBsaWQgPyBsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CiAJcHJvcHMtPmxtYyA9IGRkLT5pcGF0aF9sbWM7CiAJcHJvcHMtPnNtX2xpZCA9IGRldi0+c21fbGlkOwogCXByb3BzLT5zbV9zbCA9IGRldi0+c21fc2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDExZTNmNjEuLmFlNmNmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC04NiwxMSArODYsMTEgQEAKICNkZWZpbmUgSUJfUE1BX1NBTVBMRV9TVEFUVVNfUlVOTklORwkweDAyCiAKIC8qIE1hbmRhdG9yeSBJQiBwZXJmb3JtYW5jZSBjb3VudGVyIHNlbGVjdCB2YWx1ZXMuICovCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfREFUQQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfUEtUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAwMykKLSNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAlfX2NvbnN0YW50X2h0b25zKDB4MDAwNSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9EQVRBCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1BLVFMJY3B1X3RvX2JlMTYoMHgwMDAzKQorI2RlZmluZSBJQl9QTUFfUE9SVF9SQ1ZfUEtUUwljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAljcHVfdG9fYmUxNigweDAwMDUpCiAKIHN0cnVjdCBpYl9yZXRoIHsKIAlfX2JlNjQgdmFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCmluZGV4IDYwNmYxZTIuLjE5ZTY4YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCkBAIC0xNDcsNyArMTQ3LDggQEAKICAqIFNub29wIFNNIE1BRHMgZm9yIHBvcnQgaW5mbyBhbmQgUF9LZXkgdGFibGUgc2V0cywgc28gd2UgY2FuCiAgKiBzeW50aGVzaXplIExJRCBjaGFuZ2UgYW5kIFBfS2V5IGNoYW5nZSBldmVudHMuCiAgKi8KLXN0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCkKK3N0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCwKKwkJCQl1MTYgcHJldl9saWQpCiB7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCkBAIC0xNTcsNiArMTU4LDcgQEAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgewogCQkJc3RydWN0IGliX3BvcnRfaW5mbyAqcGluZm8gPQogCQkJCShzdHJ1Y3QgaWJfcG9ydF9pbmZvICopICgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhOworCQkJdTE2IGxpZCA9IGJlMTZfdG9fY3B1KHBpbmZvLT5saWQpOwogCiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLAogCQkJCSAgICAgYmUxNl90b19jcHUocGluZm8tPnNtX2xpZCksCkBAIC0xNjUsMTIgKzE2NywxNSBAQAogCQkJZXZlbnQuZGV2aWNlCSAgICAgICA9IGliZGV2OwogCQkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnRfbnVtOwogCi0JCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKQorCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkgewogCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVI7Ci0JCQllbHNlCi0JCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAKLQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQlpZiAocHJldl9saWQgIT0gbGlkKSB7CisJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAJCX0KIAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUEtFWV9UQUJMRSkgewpAQCAtMjI4LDggKzIzMyw5IEBACiAJCQlzdHJ1Y3QgaWJfd2MgKmluX3djLCBzdHJ1Y3QgaWJfZ3JoICppbl9ncmgsCiAJCQlzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCiB7Ci0JdTE2IHNsaWQ7CisJdTE2IHNsaWQsIHByZXZfbGlkID0gMDsKIAlpbnQgZXJyOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAlzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKIApAQCAtMjYzLDYgKzI2OSwxMyBAQAogCX0gZWxzZQogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOwogCisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKKwogCWVyciA9IG1seDRfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwKIAkJCSAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfTUtFWSwKIAkJCSAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfQktFWSwKQEAgLTI3MSw3ICsyODQsNyBAQAogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9GQUlMVVJFOwogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwppbmRleCA2MTU4OGJkLi4yY2NiOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC02OTksMTEgKzY5OSwxMiBAQAogCXN0cnVjdCBtbHg0X2liX2RldiAqaWJkZXYgPSBpYmRldl9wdHI7CiAJaW50IHA7CiAKKwltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKKwlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CisKIAlmb3IgKHAgPSAxOyBwIDw9IGliZGV2LT5udW1fcG9ydHM7ICsrcCkKIAkJbWx4NF9DTE9TRV9QT1JUKGRldiwgcCk7CiAKLQltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKLQlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CiAJaW91bm1hcChpYmRldi0+dWFyX21hcCk7CiAJbWx4NF91YXJfZnJlZShkZXYsICZpYmRldi0+cHJpdl91YXIpOwogCW1seDRfcGRfZnJlZShkZXYsIGliZGV2LT5wcml2X3Bkbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCBhOTFjYjRjLi5mMzg1YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTcxLDE3ICs3MSwxNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IF9fYmUzMiBtbHg0X2liX29wY29kZVtdID0gewotCVtJQl9XUl9TRU5EXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKLQlbSUJfV1JfTFNPXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAotCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKLQlbSUJfV1JfUkRNQV9XUklURV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKLQlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKLQlbSUJfV1JfUkRNQV9SRUFEXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfUkVBRCksCi0JW0lCX1dSX0FUT01JQ19DTVBfQU5EX1NXUF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCi0JW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKLQlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lOVkFMKSwKLQlbSUJfV1JfTE9DQUxfSU5WXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xPQ0FMX0lOVkFMKSwKLQlbSUJfV1JfRkFTVF9SRUdfTVJdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKKwlbSUJfV1JfU0VORF0JCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkQpLAorCVtJQl9XUl9MU09dCQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAorCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lNTSksCisJW0lCX1dSX1JETUFfV1JJVEVdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEUpLAorCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKKwlbSUJfV1JfUkRNQV9SRUFEXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1JFQUQpLAorCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0NTKSwKKwlbSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BRERdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKKwlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTlZBTCksCisJW0lCX1dSX0xPQ0FMX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTE9DQUxfSU5WQUwpLAorCVtJQl9XUl9GQVNUX1JFR19NUl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWx4NF9pYl9zcXAgKnRvX21zcXAoc3RydWN0IG1seDRfaWJfcXAgKm1xcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwppbmRleCA2NDA0NDk1Li41NjQ4NjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCkBAIC0xMDQsNyArMTA0LDggQEAKICAqLwogc3RhdGljIHZvaWQgc21wX3Nub29wKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAogCQkgICAgICB1OCBwb3J0X251bSwKLQkJICAgICAgc3RydWN0IGliX21hZCAqbWFkKQorCQkgICAgICBzdHJ1Y3QgaWJfbWFkICptYWQsCisJCSAgICAgIHUxNiBwcmV2X2xpZCkKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAKQEAgLTExNCw2ICsxMTUsNyBAQAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CiAJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CiAJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisJCQl1MTYgbGlkID0gYmUxNl90b19jcHUocGluZm8tPmxpZCk7CiAKIAkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLApAQCAtMTIzLDEyICsxMjUsMTUgQEAKIAkJCWV2ZW50LmRldmljZSAgICAgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwotCQkJZWxzZQotCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCi0JCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJaWYgKHByZXZfbGlkICE9IGxpZCkgeworCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCQl9CiAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BLRVlfVEFCTEUpIHsKQEAgLTE5Niw2ICsyMDEsOCBAQAogCWludCBlcnI7CiAJdTggc3RhdHVzOwogCXUxNiBzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwl1MTYgcHJldl9saWQgPSAwOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAkvKiBGb3J3YXJkIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYXBzIHRvIHRoZSBTTSAqLwogCWlmIChpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1RSQVAgJiYKQEAgLTIzMyw2ICsyNDAsMTIgQEAKIAkJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CiAJfSBlbHNlCiAJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKIAogCWVyciA9IG10aGNhX01BRF9JRkModG9fbWRldihpYmRldiksCiAJCQkgICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLApAQCAtMjUyLDcgKzI2NSw3IEBACiAJfQogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IGI5NjExYWQuLmNhNTk5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCmluZGV4IDEzYTViYjEuLjA0YjEyYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDRhNjViOTYuLjUyNDI1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTAzLDYgKzEwMyw3IEBACiBzdGF0aWMgdm9pZCBuZXNfZGlzY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKIHN0YXRpYyBpbnQgc2VuZF9zeW4oc3RydWN0IG5lc19jbV9ub2RlICosIHUzMiwgc3RydWN0IHNrX2J1ZmYgKik7CiBzdGF0aWMgaW50IHNlbmRfcmVzZXQoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBzZW5kX2FjayhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTEzLDggKzExNCw3IEBACiBzdGF0aWMgdm9pZCBhY3RpdmVfb3Blbl9lcnIoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBzdGF0aWMgdm9pZCBwYXNzaXZlX29wZW5fZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogc3RhdGljIHZvaWQgY2xlYW51cF9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAotCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUpOworc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIHZvaWQgZnJlZV9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSk7CiBzdGF0aWMgaW50IGhhbmRsZV90Y3Bfb3B0aW9ucyhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdGlvbnNpemUsIGludCBwYXNzaXZlKTsKQEAgLTEyNCw2ICsxMjQsOCBAQAogc3RhdGljIHZvaWQgY21fZXZlbnRfY29ubmVjdF9lcnJvcihzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwogc3RhdGljIHZvaWQgY21fZXZlbnRfcmVzZXQoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZXEoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWN2X2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTMyIHJlbV9ub2RlKTsKIAogc3RhdGljIHZvaWQgcHJpbnRfY29yZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNvcmUpOwogCkBAIC0xOTYsNyArMTk4LDYgQEAKICAqLwogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmV0OwogCWlmICghc2tiKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAic2tiIHNldCB0byBOVUxMXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjA2LDExICsyMDcsMjcgQEAKIAlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgJmNtX25vZGUtPm1wYV9mcmFtZSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCBTRVRfQUNLKTsKIAotCXJldCA9IHNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBza2IsIE5FU19USU1FUl9UWVBFX1NFTkQsIDEsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKK30KIAotCXJldHVybiAwOworCisKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYiA9IE5VTEw7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9DTV9CVUZGRVIpOworCWlmICghc2tiKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRmFpbGVkIHRvIGdldCBhIEZyZWUgcGt0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2VuZCBhbiBNUEEgcmVqZWN0IGZyYW1lICovCisJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsICZjbV9ub2RlLT5tcGFfZnJhbWUsCisJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgU0VUX0FDSyB8IFNFVF9GSU4pOworCisJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKIH0KIAogCkBAIC0yMTgsMTQgKzIzNSwxNyBAQAogICogcmVjdl9tcGEgLSBwcm9jZXNzIGEgcmVjZWl2ZWQgVENQIHBrdCwgd2UgYXJlIGV4cGVjdGluZyBhbgogICogSUVURiBNUEEgZnJhbWUKICAqLwotc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgbGVuKQorc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgKnR5cGUsCisJCXUzMiBsZW4pCiB7CiAJc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWU7CiAKKwkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9BQ0NFUFQ7CisKIAkvKiBhc3N1bWUgcmVxIGZyYW1lIGlzIGluIHRjcCBkYXRhIHBheWxvYWQgKi8KIAlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBzbWFsbCAoJXgpXG4iLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW1wYV9mcmFtZSA9IChzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKilidWZmZXI7CkBAIC0yMzQsMTQgKzI1NCwyNSBAQAogCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICE9IGxlbikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBpZXRmIGJ1ZmZlciB3YXMgbm90IHJpZ2h0IgogCQkJCSIgY29tcGxldGUgKCV4ICsgJXggIT0gJXgpXG4iLAotCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCAodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsCisJCQkJKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgdGhlIG1heCBzaXplICovCisJaWYgKGxlbiA+IE1BWF9DTV9CVUZGRVIpIHsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBsYXJnZSIKKwkJCQkiICgleCArICV4ICE9ICV4KVxuIiwKKwkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwKKwkJCQkodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBjb3B5IGVudGlyZSBNUEEgZnJhbWUgdG8gb3VyIGNtX25vZGUncyBmcmFtZSAqLwogCW1lbWNweShjbV9ub2RlLT5tcGFfZnJhbWVfYnVmLCBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplKTsKIAorCWlmIChtcGFfZnJhbWUtPmZsYWdzICYgSUVURl9NUEFfRkxBR1NfUkVKRUNUKQorCQkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MCw3ICs0MTEsNyBAQAogCiAJbmV3X3NlbmQgPSBremFsbG9jKHNpemVvZigqbmV3X3NlbmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19zZW5kKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogbmV3X3NlbmQtPnRpbWV0b3NlbmQgPSBjdXJyZW50dGltZSAqLwogCW5ld19zZW5kLT5yZXRyeWNvdW50ID0gTkVTX0RFRkFVTFRfUkVUUllTOwpAQCAtMzk0LDkgKzQyNSwxMSBAQAogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfQ0xPU0UpIHsKIAkJbmV3X3NlbmQtPnRpbWV0b3NlbmQgKz0gKEhaLzEwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJm5ld19zZW5kLT5saXN0LCAmY21fbm9kZS0+cmVjdl9saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKGNtX25vZGUtPnJlY3ZfZW50cnkpIHsKKwkJCVdBUk5fT04oMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljbV9ub2RlLT5yZWN2X2VudHJ5ID0gbmV3X3NlbmQ7CiAJfQogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfU0VORCkgewpAQCAtNDM1LDI0ICs0NjgsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBuZXNfcmV0cmFuc19leHBpcmVkKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CisJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ6CisJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CisJCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNyZWF0ZV9ldmVudChjbV9ub2RlLCBORVNfQ01fRVZFTlRfQUJPUlRFRCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHUzMiByZW1fbm9kZSkKK3sKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICpyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19xcCAqbmVzcXA7CisJdW5zaWduZWQgbG9uZyBxcGxvY2tmbGFnczsKKworCWlmICghcmVjdl9lbnRyeSkKKwkJcmV0dXJuOworCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7CisJaWYgKG5lc3FwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQlpZiAobmVzcXAtPmNtX2lkKSB7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKKwkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgorCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7CisJCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7CisJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgorCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCisJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQl9CisJfSBlbHNlIGlmIChyZW1fbm9kZSkgeworCQkvKiBUSU1FX1dBSVQgc3RhdGUgKi8KKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCX0KKwlpZiAoY21fbm9kZS0+Y21faWQpCisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwlrZnJlZShyZWN2X2VudHJ5KTsKKwljbV9ub2RlLT5yZWN2X2VudHJ5ID0gTlVMTDsKK30KIAogLyoqCiAgKiBuZXNfY21fdGltZXJfdGljawogICovCiBzdGF0aWMgdm9pZCBuZXNfY21fdGltZXJfdGljayh1bnNpZ25lZCBsb25nIHBhc3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG5leHR0aW1lb3V0ID0gamlmZmllcyArIE5FU19MT05HX1RJTUU7Ci0Jc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CiAJc3RydWN0IG5lc190aW1lcl9lbnRyeSAqc2VuZF9lbnRyeSwgKnJlY3ZfZW50cnk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlLCAqbGlzdF9jb3JlX3RlbXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlLCAqbGlzdF9ub2RlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlOwogCXN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSA9IGdfY21fY29yZTsKLQlzdHJ1Y3QgbmVzX3FwICpuZXNxcDsKIAl1MzIgc2V0dGltZXIgPSAwOwogCWludCByZXQgPSBORVRERVZfVFhfT0s7Ci0JZW51bSBuZXNfY21fbm9kZV9zdGF0ZSBsYXN0X3N0YXRlOwogCiAJc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0OwogCUlOSVRfTElTVF9IRUFEKCZ0aW1lcl9saXN0KTsKQEAgLTQ2MSw3ICs1NDgsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLAogCQkJCSZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXMpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBuZXNfY21fbm9kZSwgbGlzdCk7Ci0JCWlmICghbGlzdF9lbXB0eSgmY21fbm9kZS0+cmVjdl9saXN0KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKKwkJaWYgKChjbV9ub2RlLT5yZWN2X2VudHJ5KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKIAkJCWFkZF9yZWZfY21fbm9kZShjbV9ub2RlKTsKIAkJCWxpc3RfYWRkKCZjbV9ub2RlLT50aW1lcl9lbnRyeSwgJnRpbWVyX2xpc3QpOwogCQl9CkBAIC00NzEsNTQgKzU1OCwxOCBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLCAmdGltZXJfbGlzdCkgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5lc19jbV9ub2RlLAogCQkJCQl0aW1lcl9lbnRyeSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9jb3JlLCBsaXN0X25vZGVfdGVtcCwKLQkJCSZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJCXJlY3ZfZW50cnkgPSBjb250YWluZXJfb2YobGlzdF9jb3JlLAotCQkJCXN0cnVjdCBuZXNfdGltZXJfZW50cnksIGxpc3QpOwotCQkJaWYgKCFyZWN2X2VudHJ5KQotCQkJCWJyZWFrOworCQlyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKworCQlpZiAocmVjdl9lbnRyeSkgewogCQkJaWYgKHRpbWVfYWZ0ZXIocmVjdl9lbnRyeS0+dGltZXRvc2VuZCwgamlmZmllcykpIHsKIAkJCQlpZiAobmV4dHRpbWVvdXQgPiByZWN2X2VudHJ5LT50aW1ldG9zZW5kIHx8Ci0JCQkJCSFzZXR0aW1lcikgeworCQkJCQkJIXNldHRpbWVyKSB7CiAJCQkJCW5leHR0aW1lb3V0ID0gcmVjdl9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJc2V0dGltZXIgPSAxOwogCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJaWYgKG5lc3FwLT5jbV9pZCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgotCQkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgotCQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKLQkJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssCi0JCQkJCXFwbG9ja2ZsYWdzKTsKLQkJCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLAotCQkJCQlxcGxvY2tmbGFncyk7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCi0JCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCi0JCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJfQotCQkJaWYgKGNtX2lkKQotCQkJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQkJa2ZyZWUocmVjdl9lbnRyeSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCX0gZWxzZQorCQkJCWhhbmRsZV9yZWN2X2VudHJ5KGNtX25vZGUsIDEpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLCBmbGFncyk7CiAJCWRvIHsKQEAgLTUzMywxMiArNTg0LDExIEBACiAJCQkJCQluZXh0dGltZW91dCA9CiAJCQkJCQkJc2VuZF9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJCXNldHRpbWVyID0gMTsKLQkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJZnJlZV9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQkJCQlicmVhazsKIAkJCQl9CisJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWlmICgoY21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkgfHwKQEAgLTU1MCwxNiArNjAwLDEyIEBACiAJCQlpZiAoIXNlbmRfZW50cnktPnJldHJhbnNjb3VudCB8fAogCQkJCSFzZW5kX2VudHJ5LT5yZXRyeWNvdW50KSB7CiAJCQkJY21fcGFja2V0c19kcm9wcGVkKys7Ci0JCQkJbGFzdF9zdGF0ZSA9IGNtX25vZGUtPnN0YXRlOwotCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQlmcmVlX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAogCQkJCQkmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAobGFzdF9zdGF0ZSA9PSBORVNfQ01fU1RBVEVfU1lOX1JDVkQpCi0JCQkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKLQkJCQllbHNlCi0JCQkJCWNyZWF0ZV9ldmVudChjbV9ub2RlLAotCQkJCQkJTkVTX0NNX0VWRU5UX0FCT1JURUQpOworCQkJCW5lc19yZXRyYW5zX2V4cGlyZWQoY21fbm9kZSk7CisJCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywKIAkJCQkJZmxhZ3MpOwogCQkJCWJyZWFrOwpAQCAtNzE0LDcgKzc2MCw3IEBACiAJCXNrYiA9IGRldl9hbGxvY19za2IoTUFYX0NNX0JVRkZFUik7CiAJaWYgKCFza2IpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJGYWlsZWQgdG8gZ2V0IGEgRnJlZSBwa3RcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCBOVUxMLCAwLCBmbGFncyk7CkBAIC03NzgsMTQgKzgyNCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqaHRlOwogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKLQlfX2JlMzIgdG1wX2FkZHIgPSBjcHVfdG9fYmUzMihsb2NfYWRkcik7CiAKIAkvKiBnZXQgYSBoYW5kbGUgb24gdGhlIGh0ZSAqLwogCWh0ZSA9ICZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXM7CiAKLQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlNlYXJjaGluZyBmb3IgYW4gb3duZXIgbm9kZTogJXBJNDoleCBmcm9tIGNvcmUgJXAtPiVwXG4iLAotCQkgICZ0bXBfYWRkciwgbG9jX3BvcnQsIGNtX2NvcmUsIGh0ZSk7Ci0KIAkvKiB3YWxrIGxpc3QgYW5kIGZpbmQgY21fbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uIElEICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmh0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtX25vZGUsIGh0ZSwgbGlzdCkgewpAQCAtODc1LDcgKzkxNyw4IEBACiBzdGF0aWMgaW50IG1pbmlfY21fZGVjX3JlZmNudF9saXN0ZW4oc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLAogCXN0cnVjdCBuZXNfY21fbGlzdGVuZXIgKmxpc3RlbmVyLCBpbnQgZnJlZV9oYW5naW5nX25vZGVzKQogewotCWludCByZXQgPSAxOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfdGVtcCA9IE5VTEw7CkBAIC05MDQsMTAgKzk0Nyw2MCBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3RlbXAsICZyZXNldF9saXN0KSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9wb3MsIHN0cnVjdCBuZXNfY21fbm9kZSwKLQkJCQkJcmVzZXRfZW50cnkpOwotCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7Ci0JCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCQlyZXNldF9lbnRyeSk7CisJCXsKKwkJCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CisJCQlpZiAoTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSA8PSBjbV9ub2RlLT5zdGF0ZSkgeworCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFsb29wYmFjaykgeworCQkJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJCWlmIChlcnIpIHsKKwkJCQkJCWNtX25vZGUtPnN0YXRlID0KKwkJCQkJCQkgTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCVdBUk5fT04oMSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljbV9ub2RlLT5zdGF0ZSA9CisJCQkJCQkJTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCXJlbV9yZWZfY21fbm9kZSgKKwkJCQkJCQljbV9ub2RlLT5jbV9jb3JlLAorCQkJCQkJCWNtX25vZGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPQorCQkJCQkJCWxvb3BiYWNrLT5yZW1fYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9CisJCQkJCQkJbG9vcGJhY2stPmxvY19hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0KKwkJCQkJCQlsb29wYmFjay0+cmVtX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPQorCQkJCQkJCSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X2Nvbm5lY3RfZXJyb3IoJmV2ZW50KTsKKwkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gY21fbm9kZTsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9CisJCQkJCQkJIGNtX25vZGUtPnJlbV9hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0KKwkJCQkJCQkgY21fbm9kZS0+bG9jX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPQorCQkJCQkJCSBjbV9ub2RlLT5yZW1fcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CisJCQkJCQkJIGNtX25vZGUtPmxvY19wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X3Jlc2V0KCZldmVudCk7CisKKwkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCisJCQkJCQkJIGNtX25vZGUpOworCisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmxpc3Rlbl9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTk2OCw2ICsxMDYxLDcgQEAKIAlpZiAoY21fbm9kZS0+YWNjZXB0X3BlbmQpIHsKIAkJQlVHX09OKCFjbV9ub2RlLT5saXN0ZW5lcik7CiAJCWF0b21pY19kZWMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAwOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KIApAQCAtOTk0LDcgKzEwODgsNyBAQAogCW1lbXNldCgmZmwsIDAsIHNpemVvZiBmbCk7CiAJZmwubmxfdS5pcDRfdS5kYWRkciA9IGh0b25sKGRzdF9pcCk7CiAJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKLQkJcHJpbnRrKCIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKIAkJCQlfX2Z1bmNfXywgZHN0X2lwKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTEwNTcsOCArMTE1MSw2IEBACiAJCQljbV9ub2RlLT5jbV9pZCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZjbV9ub2RlLT5yZWN2X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jayk7CiAKIAljbV9ub2RlLT5sb29wYmFja3BhcnRuZXIgPSBOVUxMOwogCWF0b21pY19zZXQoJmNtX25vZGUtPnJlZl9jb3VudCwgMSk7CkBAIC0xMTI2LDEwICsxMjE4LDcgQEAKIHN0YXRpYyBpbnQgcmVtX3JlZl9jbV9ub2RlKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7Ci0Jc3RydWN0IG5lc190aW1lcl9lbnRyeSAqcmVjdl9lbnRyeTsKLQlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZSwgKmxpc3Rfbm9kZV90ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG5lc19xcCAqbmVzcXA7CiAKIAlpZiAoIWNtX25vZGUpCkBAIC0xMTUwLDM4ICsxMjM5LDkgQEAKIAkJYXRvbWljX2RlYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KLQlCVUdfT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfY29yZSwgbGlzdF9ub2RlX3RlbXAsICZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJcmVjdl9lbnRyeSA9IGNvbnRhaW5lcl9vZihsaXN0X2NvcmUsIHN0cnVjdCBuZXNfdGltZXJfZW50cnksCi0JCQkJbGlzdCk7Ci0JCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcDogSElUIEEgIgotCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyB0byBkbyFcbiIsCi0JCQkJbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkKTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOwotCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXA6IEhJVCBBICIKLQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nIHRvIGRvIVxuIiwKLQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgY21faWQpOwotCQl9Ci0JCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQlrZnJlZShyZWN2X2VudHJ5KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0KKwlXQVJOX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOworCWlmIChjbV9ub2RlLT5yZWN2X2VudHJ5KQorCQloYW5kbGVfcmVjdl9lbnRyeShjbV9ub2RlLCAwKTsKIAlpZiAoY21fbm9kZS0+bGlzdGVuZXIpIHsKIAkJbWluaV9jbV9kZWNfcmVmY250X2xpc3RlbihjbV9jb3JlLCBjbV9ub2RlLT5saXN0ZW5lciwgMCk7CiAJfSBlbHNlIHsKQEAgLTEyNjYsOCArMTMyNiw3IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2Zpbl9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXN0cnVjdCB0Y3BoZHIgKnRjcGgpCitzdGF0aWMgdm9pZCBoYW5kbGVfZmluX3BrdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJSZWNlaXZlZCBGSU4sIGNtX25vZGUgPSAlcCwgc3RhdGUgPSAldS4gIgogCQkicmVmY250PSVkXG4iLCBjbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSwKQEAgLTEyNzksMjMgKzEzMzgsMzAgQEAKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKIAljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s7Ci0JCXNlbmRfZmluKGNtX25vZGUsIHNrYik7CisJCXNlbmRfZmluKGNtX25vZGUsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7Ci0JCXNlbmRfYWNrKGNtX25vZGUsIHNrYik7CisJCXNlbmRfYWNrKGNtX25vZGUsIE5VTEwpOworCQkvKiBXYWl0IGZvciBBQ0sgYXMgdGhpcyBpcyBzaW11bHRhbm91cyBjbG9zZS4uCisJCSogQWZ0ZXIgd2UgcmVjZWl2ZSBBQ0ssIGRvIG5vdCBzZW5kIGFueXRoaW5nLi4KKwkJKiBKdXN0IHJtIHRoZSBub2RlLi4gRG9uZS4uICovCiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOwotCQlzZW5kX2FjayhjbV9ub2RlLCBza2IpOworCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKKwkJc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIE5VTEwsICBORVNfVElNRVJfVFlQRV9DTE9TRSwgMSwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAlkZWZhdWx0OgogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkVycm9yIFJjdmQgRklOIGZvciBub2RlLSVwIHN0YXRlID0gJWRcbiIsCiAJCQljbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSk7Ci0JCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEzNDEsMjMgKzE0MDcsMzUgQEAKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9USU1FX1dBSVQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkJhZCBzdGF0ZSAlc1sldV1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IsCi0JZW51bSBuZXNfY21fZXZlbnRfdHlwZSB0eXBlKQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAKLQlpbnQJcmV0OworCWludAlyZXQgPSAwOwogCWludCBkYXRhc2l6ZSA9IHNrYi0+bGVuOwogCXU4ICpkYXRhbG9jID0gc2tiLT5kYXRhOwotCXJldCA9IHBhcnNlX21wYShjbV9ub2RlLCBkYXRhbG9jLCBkYXRhc2l6ZSk7Ci0JaWYgKHJldCA8IDApIHsKKworCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUgdHlwZSA9IE5FU19DTV9FVkVOVF9VTktOT1dOOworCXUzMiAgICAgcmVzX3R5cGU7CisJcmV0ID0gcGFyc2VfbXBhKGNtX25vZGUsIGRhdGFsb2MsICZyZXNfdHlwZSwgZGF0YXNpemUpOworCWlmIChyZXQpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJkaWRuJ3QgbGlrZSBNUEEgUmVxdWVzdFxuIik7Ci0JCWlmICh0eXBlID09IE5FU19DTV9FVkVOVF9DT05ORUNURUQpIHsKKwkJaWYgKGNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVCkgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlc1sldV0gY3JlYXRlIGFib3J0IGZvciAiCiAJCQkJImNtX25vZGU9JXAgbGlzdGVuZXI9JXAgc3RhdGU9JWRcbiIsIF9fZnVuY19fLAogCQkJCV9fTElORV9fLCBjbV9ub2RlLCBjbV9ub2RlLT5saXN0ZW5lciwKQEAgLTEzNjYsMTggKzE0NDQsMzggQEAKIAkJfSBlbHNlIHsKIAkJCXBhc3NpdmVfb3Blbl9lcnIoY21fbm9kZSwgc2tiLCAxKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKHR5cGUgPT0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCkKLQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RTQTsKLQkJZWxzZQotCQkJYXRvbWljX3NldCgmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSwKLQkJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKLQkJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwotCisJCXJldHVybjsKIAl9Ci0JcmV0dXJuIDsKKworCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKKwljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKKwkJaWYgKHJlc190eXBlID09IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QpIHsKKwkJCS8qQklHIHByb2JsZW0gYXMgd2UgYXJlIHJlY2VpdmluZyB0aGUgTVBBLi4gU28gc2hvdWxkCisJCQkqIG5vdCBiZSBSRUpFQ1QuLiBUaGlzIGlzIFBhc3NpdmUgT3Blbi4uIFdlIGNhbgorCQkJKiBvbmx5IHJlY2VpdmUgaXQgUmVqZWN0IGZvciBBY3RpdmUgT3Blbi4uLiovCisJCQlXQVJOX09OKDEpOworCQl9CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOworCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRVE7CisJCWF0b21pY19zZXQoJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUsCisJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJCWlmIChyZXNfdHlwZSA9PSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUKSB7CisJCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1Q7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDsKKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEOworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVFNBOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCBpbmRpY2F0ZV9wa3RfZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjUsOCArMTU2Myw2IEBACiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0xJU1RFTklORzoKIAkJLyogUGFzc2l2ZSBPUEVOICovCi0JCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMTsKLQkJYXRvbWljX2luYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlpZiAoYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA+CiAJCQkJY21fbm9kZS0+bGlzdGVuZXItPmJhY2tsb2cpIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZHJvcCBzeW4gZHVlIHRvIGJhY2tsb2cgIgpAQCAtMTQ4NCw2ICsxNTgwLDkgQEAKIAkJfQogCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIDE7CiAJCUJVR19PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAxOworCQlhdG9taWNfaW5jKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CisKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ7CiAJCXNlbmRfc3luKGNtX25vZGUsIDEsIHNrYik7CiAJCWJyZWFrOwpAQCAtMTUxOCw2ICsxNjE3LDcgQEAKIAlpbmNfc2VxdWVuY2UgPSBudG9obCh0Y3BoLT5zZXEpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQkvKiBhY3RpdmUgb3BlbiAqLwogCQlpZiAoY2hlY2tfc3luKGNtX25vZGUsIHRjcGgsIHNrYikpCiAJCQlyZXR1cm47CkBAIC0xNTY3LDEwICsxNjY3LDcgQEAKIAl1MzIgcmVtX3NlcTsKIAlpbnQgcmV0OwogCWludCBvcHRpb25zaXplOwotCXUzMiB0ZW1wX3NlcSA9IGNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bTsKLQogCW9wdGlvbnNpemUgPSAodGNwaC0+ZG9mZiA8PCAyKSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKLQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAogCWlmIChjaGVja19zZXEoY21fbm9kZSwgdGNwaCwgc2tiKSkKIAkJcmV0dXJuOwpAQCAtMTU4MCw3ICsxNjc3LDcgQEAKIAlyZW1fc2VxID0gbnRvaGwodGNwaC0+c2VxKTsKIAlyZW1fc2VxX2FjayA9ICBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAlkYXRhc2l6ZSA9IHNrYi0+bGVuOwotCisJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fUkNWRDoKIAkJLyogUGFzc2l2ZSBPUEVOICovCkBAIC0xNTg4LDcgKzE2ODUsNiBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwotCQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSB0ZW1wX3NlcTsKIAkJaWYgKGNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSAhPQogCQkgICAgY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgInJlbV9hY2tfbnVtICE9IGxvY19zZXFfbnVtXG4iKTsKQEAgLTE1OTcsMzEgKzE2OTMsMzAgQEAKIAkJCXJldHVybjsKIAkJfQogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDsKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwgTkVTX0NNX0VWRU5UX01QQV9SRVEpOwotCQkgfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKKwkJfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJIH0KIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwotCQkvKiBXZSBleHBlY3QgbXBhIGZyYW1lIHRvIGJlIHJlY2VpdmVkIG9ubHkgKi8KKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwKLQkJCQlORVNfQ01fRVZFTlRfTVBBX1JFUSk7CisJCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IpOwogCQl9IGVsc2UKIAkJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsIE5FU19DTV9FVkVOVF9DT05ORUNURUQpOworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKIAkJfSBlbHNlIHsgLyogQ291bGQgYmUganVzdCBhbiBhY2sgcGt0Li4gKi8KIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0xNjMyLDEzICsxNzI3LDI0IEBACiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCWNtX25vZGUtPmNtX2lkLT5yZW1fcmVmKGNtX25vZGUtPmNtX2lkKTsKKwljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQyOgogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDoKLQljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKLQljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgogCWNhc2UgTkVTX0NNX1NUQVRFX1VOS05PV046CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKQEAgLTE3NDgsNiArMTg1NCw3IEBACiB7CiAJZW51bSBuZXNfdGNwaXBfcGt0X3R5cGUJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfVU5LTk9XTjsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXUzMiAgICAgZmluX3NldCA9IDA7CiAJc2tiX3B1bGwoc2tiLCBpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJwcm9jZXNzX3BhY2tldDogY21fbm9kZT0lcCBzdGF0ZSA9JWQgc3luPSVkICIKQEAgLTE3NjAsMTAgKzE4NjcsMTAgQEAKIAkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOOwogCQlpZiAodGNwaC0+YWNrKQogCQkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOQUNLOwotCX0gZWxzZSBpZiAodGNwaC0+ZmluKQotCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9GSU47Ci0JZWxzZSBpZiAodGNwaC0+YWNrKQorCX0gZWxzZSBpZiAodGNwaC0+YWNrKQogCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9BQ0s7CisJaWYgKHRjcGgtPmZpbikKKwkJZmluX3NldCA9IDE7CiAKIAlzd2l0Y2ggKHBrdF90eXBlKSB7CiAJY2FzZSBORVNfUEtUX1RZUEVfU1lOOgpAQCAtMTc3NCwxNSArMTg4MSwxNiBAQAogCQlicmVhazsKIAljYXNlIE5FU19QS1RfVFlQRV9BQ0s6CiAJCWhhbmRsZV9hY2tfcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7CisJCWlmIChmaW5fc2V0KQorCQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX1BLVF9UWVBFX1JTVDoKIAkJaGFuZGxlX3JzdF9wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKIAkJYnJlYWs7Ci0JY2FzZSBORVNfUEtUX1RZUEVfRklOOgotCQloYW5kbGVfZmluX3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcm9wX3BhY2tldChza2IpOworCQlpZiAoZmluX3NldCkKKwkJCWhhbmRsZV9maW5fcGt0KGNtX25vZGUpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xOTI1LDcgKzIwMzMsNyBAQAogCQkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+dGNwX2NudHh0LnJjdl93c2NhbGU7CiAJCQlsb29wYmFja3JlbW90ZW5vZGUtPnRjcF9jbnR4dC5zbmRfd3NjYWxlID0KIAkJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X3dzY2FsZTsKLQorCQkJbG9vcGJhY2tyZW1vdGVub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKIAkJCWNyZWF0ZV9ldmVudChsb29wYmFja3JlbW90ZW5vZGUsIE5FU19DTV9FVkVOVF9NUEFfUkVRKTsKIAkJfQogCQlyZXR1cm4gY21fbm9kZTsKQEAgLTE5ODAsNyArMjA4OCwxMSBAQAogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lLCBzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CiAJaW50IHBhc3NpdmVfc3RhdGU7CisJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19jbV9ub2RlICpsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXMgY21fbm9kZT0lcCB0eXBlPSVkIHN0YXRlPSVkXG4iLAogCQlfX2Z1bmNfXywgY21fbm9kZSwgY21fbm9kZS0+dGNwX2NudHh0LmNsaWVudCwgY21fbm9kZS0+c3RhdGUpOwpAQCAtMTk4OSwxMiArMjEwMSwzOCBAQAogCQlyZXR1cm4gcmV0OwogCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAotCXBhc3NpdmVfc3RhdGUgPSBhdG9taWNfYWRkX3JldHVybigxLCAmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSk7Ci0JY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwotCWlmIChwYXNzaXZlX3N0YXRlID09IE5FU19TRU5EX1JFU0VUX0VWRU5UKQorCWlmICghbG9vcGJhY2spIHsKKwkJcGFzc2l2ZV9zdGF0ZSA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlKTsKKwkJaWYgKHBhc3NpdmVfc3RhdGUgPT0gTkVTX1NFTkRfUkVTRVRfRVZFTlQpIHsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNlbmRfbXBhX3JlamVjdChjbV9ub2RlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJZXJyID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlXQVJOX09OKDEpOworCQkJfSBlbHNlCisJCQkJY21faWQtPmFkZF9yZWYoY21faWQpOworCQl9CisJfSBlbHNlIHsKKwkJY21fbm9kZS0+Y21faWQgPSBOVUxMOworCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPSBsb29wYmFjay0+cmVtX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPSBsb29wYmFjay0+bG9jX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPSBsb29wYmFjay0+cmVtX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCWNtX2V2ZW50X21wYV9yZWplY3QoJmV2ZW50KTsKIAkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOwotCWVsc2UKLQkJcmV0ID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7CisKKwkJY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBsb29wYmFjayk7CisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDMxLDYgKzIxNjksNyBAQAogCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CiAJCXJldCA9IC0xOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CiAJY2FzZSBORVNfQ01fU1RBVEVfVU5LTk9XTjoKIAljYXNlIE5FU19DTV9TVEFURV9JTklURUQ6CkBAIC0yMjI3LDE1ICsyMzY2LDE1IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgotCQkJY21fY29yZS0+bXR1ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKLQkJCWNtX2NvcmUtPmZyZWVfdHhfcGt0X21heCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB1bmtub3duIHNldCBvcHRpb24gKi8KLQkJCXJldCA9IC1FSU5WQUw7CisJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgorCQljbV9jb3JlLT5tdHUgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKKwkJY21fY29yZS0+ZnJlZV90eF9wa3RfbWF4ID0gdmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua25vd24gc2V0IG9wdGlvbiAqLworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yNjU0LDkgKzI3OTMsNyBAQAogCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUpOwogCX0gZWxzZSB7CiAJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5pcmRfb3JkX3NpemVzIHw9Ci0JCQljcHVfdG9fbGUzMigoTkVTX1FQQ09OVEVYVF9PUkRJUkRfTFNNTV9QUkVTRU5UIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX0FMU01NKSk7CisJCQljcHVfdG9fbGUzMihORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSk7CiAJfQogCW5lc3FwLT5za2lwX2xzbW0gPSAxOwogCkBAIC0yNzc4LDIzICsyOTE1LDM1IEBACiBpbnQgbmVzX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBjb25zdCB2b2lkICpwZGF0YSwgdTggcGRhdGFfbGVuKQogewogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrOworCiAJc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlOwogCiAJYXRvbWljX2luYygmY21fcmVqZWN0cyk7CiAJY21fbm9kZSA9IChzdHJ1Y3QgbmVzX2NtX25vZGUgKikgY21faWQtPnByb3ZpZGVyX2RhdGE7CisJbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CiAJY21fY29yZSA9IGNtX25vZGUtPmNtX2NvcmU7CisJY21fbm9kZS0+Y21faWQgPSBjbV9pZDsKIAljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsgcGRhdGFfbGVuOwogCi0Jc3RyY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUua2V5WzBdLCBJRUZUX01QQV9LRVlfUkVQKTsKLQltZW1jcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA+IE1BWF9DTV9CVUZGRVIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCXN0cmNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLmtleVswXSwgSUVGVF9NUEFfS0VZX1JFUCk7CisJaWYgKGxvb3BiYWNrKSB7CisJCW1lbWNweSgmbG9vcGJhY2stPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCQlsb29wYmFjay0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBwZGF0YV9sZW47CisJCWxvb3BiYWNrLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsKKwkJCQlwZGF0YV9sZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwkJY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCX0KKwogCWNtX25vZGUtPm1wYV9mcmFtZS5yZXYgPSBtcGFfdmVyc2lvbjsKIAljbV9ub2RlLT5tcGFfZnJhbWUuZmxhZ3MgPSBJRVRGX01QQV9GTEFHU19DUkMgfCBJRVRGX01QQV9GTEFHU19SRUpFQ1Q7CiAKLQljbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKLQotCXJldHVybiAwOworCXJldHVybiBjbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKIH0KIAogCkBAIC0zMzAzLDEzICszNDUyLDU2IEBACiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5yZW1fcG9ydCk7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ucmVtX2FkZHIpOwotCi0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YSAgICAgICAgICAgICAgICA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7Ci0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gICAgICAgICAgICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKKwljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CiAKIAlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKIAlpZiAocmV0KQotCQlwcmludGsoIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgY21fZXZlbnRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaXdfY21faWQgICAqY21faWQ7CisJc3RydWN0IGl3X2NtX2V2ZW50IGNtX2V2ZW50OworCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlpbnQgcmV0OworCisJY21fbm9kZSA9IGV2ZW50LT5jbV9ub2RlOworCWlmICghY21fbm9kZSkKKwkJcmV0dXJuOworCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisKKwlhdG9taWNfaW5jKCZjbV9jb25uZWN0X3JlcXMpOworCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiY21fbm9kZSA9ICVwIC0gY21faWQgPSAlcCwgamlmZmllcyA9ICVsdVxuIiwKKwkJCWNtX25vZGUsIGNtX2lkLCBqaWZmaWVzKTsKKworCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVBMWTsKKwljbV9ldmVudC5zdGF0dXMgPSAtRUNPTk5SRUZVU0VEOworCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLmxvY19wb3J0KTsKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLmxvY19hZGRyKTsKKworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ucmVtX3BvcnQpOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLnJlbV9hZGRyKTsKKworCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisKKwluZXNfZGVidWcoTkVTX0RCR19DTSwgImNhbGwgQ01fRVZFTlRfTVBBX1JFSkVDVEVELCBsb2NhbF9hZGRyPSUwOHgsICIKKwkJCSJyZW1vdmVfYWRkcj0lMDh4XG4iLAorCQkJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIsCisJCQljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIpOworCisJcmV0ID0gY21faWQtPmV2ZW50X2hhbmRsZXIoY21faWQsICZjbV9ldmVudCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAKIAlyZXR1cm47CkBAIC0zMzc0LDYgKzM1NjYsMTQgQEAKIAkJY21fZXZlbnRfY29ubmVjdGVkKGV2ZW50KTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJDTSBFdmVudDogQ09OTkVDVEVEXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fRVZFTlRfTVBBX1JFSkVDVDoKKwkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAorCQkJCShldmVudC0+Y21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkpCisJCQlicmVhazsKKwkJY21fZXZlbnRfbXBhX3JlamVjdChldmVudCk7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiQ00gRXZlbnQ6IFJFSkVDVFxuIik7CisJCWJyZWFrOworCiAJY2FzZSBORVNfQ01fRVZFTlRfQUJPUlRFRDoKIAkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAogCQkJKGV2ZW50LT5jbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCmluZGV4IGZhZmEzNTAuLmQ1Zjc3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzksNiArMzksOSBAQAogI2RlZmluZSBORVNfTUFOQUdFX0FQQlZUX0RFTCAwCiAjZGVmaW5lIE5FU19NQU5BR0VfQVBCVlRfQUREIDEKIAorI2RlZmluZSBORVNfTVBBX1JFUVVFU1RfQUNDRVBUICAxCisjZGVmaW5lIE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QgIDIKKwogLyogSUVURiBNUEEgLS0gZGVmaW5lcywgZW51bXMsIHN0cnVjdHMgKi8KICNkZWZpbmUgSUVGVF9NUEFfS0VZX1JFUSAgIk1QQSBJRCBSZXEgRnJhbWUiCiAjZGVmaW5lIElFRlRfTVBBX0tFWV9SRVAgICJNUEEgSUQgUmVwIEZyYW1lIgpAQCAtMTg2LDYgKzE4OSw3IEBACiAJTkVTX0NNX1NUQVRFX0FDQ0VQVElORywKIAlORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQsCiAJTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZELAorCU5FU19DTV9TVEFURV9NUEFSRUpfUkNWRCwKIAlORVNfQ01fU1RBVEVfVFNBLAogCU5FU19DTV9TVEFURV9GSU5fV0FJVDEsCiAJTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMiwKQEAgLTI3OCwxMyArMjgyLDEyIEBACiAJc3RydWN0IG5lc190aW1lcl9lbnRyeQkqc2VuZF9lbnRyeTsKIAogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgcmV0cmFuc19saXN0X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICByZWN2X2xpc3Q7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgICByZWN2X2xpc3RfbG9jazsKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICAqcmVjdl9lbnRyeTsKIAogCWludCAgICAgICAgICAgICAgICAgICAgICAgc2VuZF93cml0ZTA7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgbXBhX2ZyYW1lOwotCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltORVNfQ01fREVGQVVMVF9NVFVdOworCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltNQVhfQ01fQlVGRkVSXTsKIAl9OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX3NpemU7CiAJc3RydWN0IGl3X2NtX2lkICAgICAgICAgICAqY21faWQ7CkBAIC0zMjYsNiArMzI5LDcgQEAKIAlORVNfQ01fRVZFTlRfTVBBX1JFUSwKIAlORVNfQ01fRVZFTlRfTVBBX0NPTk5FQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9BQ0NFUFQsCisJTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9FU1RBQkxJU0hFRCwKIAlORVNfQ01fRVZFTlRfQ09OTkVDVEVELAogCU5FU19DTV9FVkVOVF9DTE9TRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKaW5kZXggZGE5ZGFiYS4uMGZiOGQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggNWQxMzlkYi4uNTJlNzM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0yNTQsNiArMjU0LDcgQEAKIAl1MzIgYWRhcHRlcl9zaXplOwogCXUzMiBhcnBfdGFibGVfc2l6ZTsKIAl1MTYgdmVuZG9yX2lkOworCXUxNiBkZXZpY2VfaWQ7CiAJdTggIE9uZUdfTW9kZTsKIAl1OCAgZnVuY19pbmRleDsKIApAQCAtMzU2LDYgKzM1NywxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwluZXNhZGFwdGVyLT52ZW5kb3JfaWQgPSAoKCh1MzIpIG5lc2FkYXB0ZXItPm1hY19hZGRyX2hpZ2gpIDw8IDgpIHwKKwkJCQkobmVzYWRhcHRlci0+bWFjX2FkZHJfbG93ID4+IDI0KTsKKworCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChuZXNkZXYtPnBjaWRldi0+YnVzLCBuZXNkZXYtPnBjaWRldi0+ZGV2Zm4sCisJCQkJIFBDSV9ERVZJQ0VfSUQsICZkZXZpY2VfaWQpOworCW5lc2FkYXB0ZXItPnZlbmRvcl9wYXJ0X2lkID0gZGV2aWNlX2lkOworCiAJaWYgKG5lc19pbml0X3NlcmRlcyhuZXNkZXYsIGh3X3JldiwgcG9ydF9jb3VudCwgbmVzYWRhcHRlciwKIAkJCQkJCQlPbmVHX01vZGUpKSB7CiAJCWtmcmVlKG5lc2FkYXB0ZXIpOwpAQCAtMTYzNiw3ICsxNjQ0LDYgQEAKIAluZXN2bmljLT5wb3N0X2NxcF9yZXF1ZXN0ID0gbmVzX3Bvc3RfY3FwX3JlcXVlc3Q7CiAJbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm5lc3ZuaWMtPm5pYy5zcV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmbmVzdm5pYy0+bmljLnJxX2xvY2spOwogCiAJLyogc2V0dXAgdGhlIFJRICovCkBAIC0yMjYxLDYgKzIyNjgsOCBAQAogCiAJCWlmICgrK2hlYWQgPj0gYWVxX3NpemUpCiAJCQloZWFkID0gMDsKKworCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MgKyBORVNfQUVRX0FMTE9DLCAxIDw8IDE2KTsKIAl9CiAJd2hpbGUgKDEpOwogCWFlcS0+YWVxX2hlYWQgPSBoZWFkOwpAQCAtMjU0MSw3ICsyNTUwLDcgQEAKIHsKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBuZXNfdm5pYywgbmljX2NxKTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKIH0KIAogCkBAIC0yNjIyLDkgKzI2MzEsOSBAQAogCQkJCQkJfSBlbHNlCiAJCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKHNrYikKLQkJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfQorCQkJCWlmIChza2IpCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJbmVzbmljLT5zcV90YWlsKys7CiAJCQkJbmVzbmljLT5zcV90YWlsICY9IG5lc25pYy0+c3Ffc2l6ZS0xOwogCQkJCWlmIChzcV9jcWVzID4gMTI4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBiYzBiNGRlLi5mNDFhODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC02MSw2ICs2MSw3IEBACiAJTkVTX0NRX0FDSyA9IDB4MDAzNCwKIAlORVNfV1FFX0FMTE9DID0gMHgwMDQwLAogCU5FU19DUUVfQUxMT0MgPSAweDAwNDQsCisJTkVTX0FFUV9BTExPQyA9IDB4MDA0OAogfTsKIAogZW51bSBpbmRleGVkX3JlZ3MgewpAQCAtODc1LDcgKzg3Niw2IEBACiAJdTggcmVwbGVuaXNoaW5nX3JxOwogCXU4IHJlc2VydmVkOwogCi0Jc3BpbmxvY2tfdCBzcV9sb2NrOwogCXNwaW5sb2NrX3QgcnFfbG9jazsKIH07CiAKQEAgLTExNDcsNyArMTE0Nyw2IEBACiBzdHJ1Y3QgbmVzX3ZuaWMgewogCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKIAl1NjQgc3FfZnVsbDsKLQl1NjQgc3FfbG9ja2VkOwogCXU2NCB0c29fcmVxdWVzdHM7CiAJdTY0IHNlZ21lbnRlZF90c29fcmVxdWVzdHM7CiAJdTY0IGxpbmVhcml6ZWRfc2ticzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNTdhNDdjZi4uZWNiMWY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTExMSw3ICsxMTEsNyBAQAogCW5lc19uaWNfY2VfaGFuZGxlcihuZXNkZXYsIG5lc2NxKTsKIAogCWlmIChuZXNjcS0+Y3Flc19wZW5kaW5nID09IDApIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIGNsZWFyIG91dCBjb21wbGV0ZWQgY3FlcyBhbmQgYXJtICovCiAJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncytORVNfQ1FFX0FMTE9DLCBORVNfQ1FFX0FMTE9DX05PVElGWV9ORVhUIHwKIAkJCQluZXNjcS0+Y3FfbnVtYmVyIHwgKG5lc2NxLT5jcWVfYWxsb2NzX3BlbmRpbmcgPDwgMTYpKTsKQEAgLTQwMCw4ICs0MDAsNyBAQAogCWlmIChza2JfaGVhZGxlbihza2IpID09IHNrYi0+bGVuKSB7CiAJCWlmIChza2JfaGVhZGxlbihza2IpIDw9IE5FU19GSVJTVF9GUkFHX1NJWkUpIHsKIAkJCW5pY19zcWUtPndxZV93b3Jkc1tORVNfTklDX1NRX1dRRV9MRU5HVEhfMl8xX0lEWF0gPSAwOwotCQkJbmVzbmljLT50eF9za2JbbmVzbmljLT5zcV9oZWFkXSA9IE5VTEw7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQluZXNuaWMtPnR4X3NrYltuZXNuaWMtPnNxX2hlYWRdID0gc2tiOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRGVhbCB3aXRoIEZyYWdtZW50cyAqLwpAQCAtNDUzLDcgKzQ1Miw2IEBACiAJdTMyIHdxZV9jb3VudD0xOwogCXUzMiBzZW5kX3JjOwogCXN0cnVjdCBpcGhkciAqaXBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2ICp3cWVfZnJhZ21lbnRfbGVuZ3RoOwogCXUzMiBucl9mcmFnczsKIAl1MzIgb3JpZ2luYWxfZmlyc3RfbGVuZ3RoOwpAQCAtNDgwLDEzICs0NzgsNiBAQAogCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmbmVzbmljLT5zcV9sb2NrKSkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCW5lc3ZuaWMtPnNxX2xvY2tlZCsrOwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9Ci0KIAkvKiBDaGVjayBpZiBTUSBpcyBmdWxsICovCiAJaWYgKCgoKG5lc25pYy0+c3FfdGFpbCsobmVzbmljLT5zcV9zaXplKjIpKS1uZXNuaWMtPnNxX2hlYWQpICYgKG5lc25pYy0+c3Ffc2l6ZSAtIDEpKSA9PSAxKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSB7CkBAIC00OTgsNyArNDg5LDYgQEAKIAkJCX0KIAkJfQogCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC01MzEsNyArNTIxLDYgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAJCQkJbmVzX2RlYnVnKE5FU19EQkdfTklDX1RYLCAiJXM6IEhOSUMgU1EgZnVsbC0gVFNPIHJlcXVlc3QgaGFzIHRvbyBtYW55IGZyYWdzIVxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpAQCAtNjU2LDE3ICs2NDUsMTMgQEAKIAkJCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGhvZmZzZXQpOwogCQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG5ob2Zmc2V0KTsKIAkJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CisJCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOworCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQl9CiAJfQogCiAJYmFycmllcigpOwpAQCAtNjc2LDcgKzY2MSw2IEBACiAJCQkJKHdxZV9jb3VudCA8PCAyNCkgfCAoMSA8PCAyMykgfCBuZXN2bmljLT5uaWMucXBfaWQpOwogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTAxMiw3ICs5OTYsNiBAQAogCSJQYXVzZSBGcmFtZXMgUmVjZWl2ZWQiLAogCSJJbnRlcm5hbCBSb3V0aW5nIEVycm9ycyIsCiAJIlNRIFNXIERyb3BwZWQgU0tCcyIsCi0JIlNRIExvY2tlZCIsCiAJIlNRIEZ1bGwiLAogCSJTZWdtZW50ZWQgVFNPIFJlcXVlc3RzIiwKIAkiUnggU3ltYm9sIEVycm9ycyIsCkBAIC0xMTI5LDE2ICsxMTEyLDE3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAl1MzIgbmljX2NvdW50OwogCXUzMiB1MzJ0ZW1wOworCXUzMiBpbmRleCA9IDA7CiAKIAl0YXJnZXRfZXRodG9vbF9zdGF0cy0+bl9zdGF0cyA9IE5FU19FVEhUT09MX1NUQVRfQ09VTlQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzBdID0gbmVzdm5pYy0+bmVzZGV2LT5saW5rX3N0YXR1c19pbnRlcnJ1cHRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxXSA9IG5lc3ZuaWMtPmxpbmVhcml6ZWRfc2ticzsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMl0gPSBuZXN2bmljLT50c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzW2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bGlua19zdGF0dXNfaW50ZXJydXB0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5saW5lYXJpemVkX3NrYnM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHNvX3JlcXVlc3RzOwogCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAogCQkJTkVTX0lEWF9NQUNfVFhfUEFVU0VfRlJBTUVTICsgKG5lc3ZuaWMtPm5lc2Rldi0+bWFjX2luZGV4KjB4MjAwKSk7CiAJbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQgKz0gdTMydGVtcDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbM10gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKIAogCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwKIAkJCU5FU19JRFhfTUFDX1JYX1BBVVNFX0ZSQU1FUyArIChuZXN2bmljLT5uZXNkZXYtPm1hY19pbmRleCoweDIwMCkpOwpAQCAtMTIwOSw2MCArMTE5Myw1OSBAQAogCQluZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzICs9IHUzMnRlbXA7CiAJfQogCi0JdGFyZ2V0X3N0YXRfdmFsdWVzWzRdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzZdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbN10gPSBuZXN2bmljLT5zcV9sb2NrZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzhdID0gbmVzdm5pYy0+c3FfZnVsbDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbOV0gPSBuZXN2bmljLT5zZWdtZW50ZWRfdHNvX3JlcXVlc3RzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zeW1ib2xfZXJyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTFdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTJdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfb3ZlcnNpemVkX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTNdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc2hvcnRfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE1XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfb2N0ZXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNl0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTddID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxOV0gPSBtaF9kZXRlY3RlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjBdID0gbWhfcGF1c2VzX3NlbnQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIxXSA9IG5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIyXSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIzXSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjRdID0gYXRvbWljX3JlYWQoJmNtX2Rpc2Nvbm5lY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjVdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RlZHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNl0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjddID0gYXRvbWljX3JlYWQoJmNtX3JlamVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOF0gPSBhdG9taWNfcmVhZCgmbW9kX3FwX3RpbW91dHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOV0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMF0gPSBhdG9taWNfcmVhZCgmc3dfcXBzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMxXSA9IGF0b21pY19yZWFkKCZxcHNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzJdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMzXSA9IGNtX3BhY2tldHNfc2VudDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzRdID0gY21fcGFja2V0c19ib3VuY2VkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNV0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM2XSA9IGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM3XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzhdID0gY21fcGFja2V0c19yZXRyYW5zOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szOV0gPSBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQwXSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0MV0gPSBjbV9iYWNrbG9nX2Ryb3BzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0Ml0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDNdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0NF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDVdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VsX2Ryb3BwZWRfcGt0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ2XSA9IGF0b21pY19yZWFkKCZjbV9yZXNldHNfcmVjdmQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0N10gPSBpbnRfbW9kX3RpbWVyX2luaXQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ4XSA9IGludF9tb2RfY3FfZGVwdGhfMTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDldID0gaW50X21vZF9jcV9kZXB0aF80OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MV0gPSBpbnRfbW9kX2NxX2RlcHRoXzI0OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1Ml0gPSBpbnRfbW9kX2NxX2RlcHRoXzMyOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1M10gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTRdID0gaW50X21vZF9jcV9kZXB0aF8yNTY7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU1XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTZdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1N10gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5zcV9mdWxsOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnNlZ21lbnRlZF90c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc3ltYm9sX2Vycl9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9vdmVyc2l6ZWRfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3Nob3J0X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfZGV0ZWN0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfcGF1c2VzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fZGlzY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0ZWRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVqZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJm1vZF9xcF90aW1vdXRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZzd19xcHNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfYm91bmNlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZWNlaXZlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2Ryb3BwZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZXRyYW5zOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfY3JlYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9iYWNrbG9nX2Ryb3BzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9sb29wYmFja3MpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19jcmVhdGVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fYWNjZWxfZHJvcHBlZF9wa3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVzZXRzX3JlY3ZkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX3RpbWVyX2luaXQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfNDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMjQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8zMjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogfQogCkBAIC0xNTY4LDYgKzE1NTEsMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5lc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbmVzX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXNfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0IAk9IG5lc19uZXRkZXZfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXNfbmV0ZGV2X2dldF9zdGF0cywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmVzX25ldGRldl90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbmVzX25ldGRldl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgCT0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyLAorfTsKIAogLyoqCiAgKiBuZXNfbmV0ZGV2X2luaXQgLSBpbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlCkBAIC0xNTc2LDcgKzE1NzIsNyBAQAogCQl2b2lkIF9faW9tZW0gKm1taW9fYWRkcikKIHsKIAl1NjQgdTY0dGVtcDsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBOVUxMOworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuaWNfcXBfbWFwICpjdXJyX3FwX21hcDsKIAl1MzIgdTMydGVtcDsKQEAgLTE1ODgsMjIgKzE1ODQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibmVzdm5pYyBldGhlcmRldiBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCW5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm5ldGRldiA9ICVwLCAlc1xuIiwgbmV0ZGV2LCBuZXRkZXYtPm5hbWUpOwogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmbmVzZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQltZW1zZXQobmVzdm5pYywgMCwgc2l6ZW9mKCpuZXN2bmljKSk7Ci0KLQluZXRkZXYtPm9wZW4gPSBuZXNfbmV0ZGV2X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gbmVzX25ldGRldl9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gbmVzX25ldGRldl9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gbmVzX25ldGRldl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gbmVzX25ldGRldl90eF90aW1lb3V0OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHU7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IE5FU19UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gbmVzZGV2LT5wY2lkZXYtPmlycTsKIAluZXRkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKQEAgLTE2MTEsMTIgKzE1OTcsMTEgQEAKIAluZXRkZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0hJR0hETUE7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJm5lc19uZXRkZXZfb3BzOwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmbmVzX2V0aHRvb2xfb3BzOwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJm5lc3ZuaWMtPm5hcGksIG5lc19uZXRkZXZfcG9sbCwgMTI4KTsKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAiRW5hYmxpbmcgVkxBTiBJbnNlcnQvRGVsZXRlLlxuIik7CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JbmV0ZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCiAJLyogRmlsbCBpbiB0aGUgcG9ydCBzdHJ1Y3R1cmUgKi8KIAluZXN2bmljLT5uZXRkZXYgPSBuZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKaW5kZXggZTY0MzA2Yi4uY2M5MGMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCmluZGV4IDZmM2JjMWIuLmEyODIwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggZDkzYTY1Ni4uN2U1YjViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC01NTEsNiArNTUxLDcgQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKIAlpbnQgaSA9IDA7CisJaW50IHJjOwogCiAJLyogZnJlZSB0aGUgcmVzb3VyY2VzICovCiAJaWYgKG5lc2Ztci0+bGVhZl9wYmxfY250ID09IDApIHsKQEAgLTU3Miw3ICs1NzMsOSBAQAogCW5lc21yLT5pYm13LnJrZXkgPSBpYmZtci0+cmtleTsKIAluZXNtci0+aWJtdy51b2JqZWN0ID0gTlVMTDsKIAotCWlmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSB7CisJcmMgPSBuZXNfZGVhbGxvY19tdygmbmVzbXItPmlibXcpOworCisJaWYgKChyYyA9PSAwKSAmJiAobmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgIT0gMCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJCWlmIChuZXNmbXItPm5lc21yLnBibF80aykgewogCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNmbXItPm5lc21yLnBibHNfdXNlZDsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCX0KIAotCXJldHVybiBuZXNfZGVhbGxvY19tdygmbmVzbXItPmlibXcpOworCXJldHVybiByYzsKIH0KIAogCkBAIC0xODg2LDIxICsxODg5LDc1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiByb290XzI1NgorICovCitzdGF0aWMgdTMyIHJvb3RfMjU2KHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsCisJCSAgICBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqcm9vdF92cGJsLAorCQkgICAgc3RydWN0IG5lc19yb290X3ZwYmwgKm5ld19yb290LAorCQkgICAgdTE2IHBibF9jb3VudF80aywKKwkJICAgIHUxNiBwYmxfY291bnRfMjU2KQoreworCXU2NCBsZWFmX3BibDsKKwlpbnQgaSwgaiwgazsKKworCWlmIChwYmxfY291bnRfNGsgPT0gMSkgeworCQluZXdfcm9vdC0+cGJsX3ZiYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsCisJCQkJCQk1MTIsICZuZXdfcm9vdC0+cGJsX3BiYXNlKTsKKworCQlpZiAobmV3X3Jvb3QtPnBibF92YmFzZSA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CisKKwkJbGVhZl9wYmwgPSAodTY0KXJvb3RfdnBibC0+cGJsX3BiYXNlOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJbmV3X3Jvb3QtPnBibF92YmFzZVtpXS5wYV9sb3cgPQorCQkJCWNwdV90b19sZTMyKCh1MzIpbGVhZl9wYmwpOworCQkJbmV3X3Jvb3QtPnBibF92YmFzZVtpXS5wYV9oaWdoID0KKwkJCQljcHVfdG9fbGUzMigodTMyKSgoKCh1NjQpbGVhZl9wYmwpID4+IDMyKSkpOworCQkJbGVhZl9wYmwgKz0gMjU2OworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMzsgaSA+PSAwOyBpLS0pIHsKKwkJCWogPSBpICogMTY7CisJCQlyb290X3ZwYmwtPnBibF92YmFzZVtqXSA9IHJvb3RfdnBibC0+cGJsX3ZiYXNlW2ldOworCQkJbGVhZl9wYmwgPSBsZTMyX3RvX2NwdShyb290X3ZwYmwtPnBibF92YmFzZVtqXS5wYV9sb3cpICsKKwkJCSAgICAoKCh1NjQpbGUzMl90b19jcHUocm9vdF92cGJsLT5wYmxfdmJhc2Vbal0ucGFfaGlnaCkpCisJCQkJPDwgMzIpOworCQkJZm9yIChrID0gMTsgayA8IDE2OyBrKyspIHsKKwkJCQlsZWFmX3BibCArPSAyNTY7CisJCQkJcm9vdF92cGJsLT5wYmxfdmJhc2VbaiArIGtdLnBhX2xvdyA9CisJCQkJCQljcHVfdG9fbGUzMigodTMyKWxlYWZfcGJsKTsKKwkJCQlyb290X3ZwYmwtPnBibF92YmFzZVtqICsga10ucGFfaGlnaCA9CisJCQkJICAgIGNwdV90b19sZTMyKCh1MzIpKCgoKHU2NClsZWFmX3BibCkgPj4gMzIpKSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKwogCiAvKioKICAqIG5lc19yZWdfbXIKICAqLwogc3RhdGljIGludCBuZXNfcmVnX21yKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfcGQgKm5lc3BkLAogCQl1MzIgc3RhZywgdTY0IHJlZ2lvbl9sZW5ndGgsIHN0cnVjdCBuZXNfcm9vdF92cGJsICpyb290X3ZwYmwsCi0JCWRtYV9hZGRyX3Qgc2luZ2xlX2J1ZmZlciwgdTE2IHBibF9jb3VudCwgdTE2IHJlc2lkdWFsX3BhZ2VfY291bnQsCi0JCWludCBhY2MsIHU2NCAqaW92YV9zdGFydCkKKwkJZG1hX2FkZHJfdCBzaW5nbGVfYnVmZmVyLCB1MTYgcGJsX2NvdW50XzRrLAorCQl1MTYgcmVzaWR1YWxfcGFnZV9jb3VudF80aywgaW50IGFjYywgdTY0ICppb3ZhX3N0YXJ0LAorCQl1MTYgKmFjdHVhbF9wYmxfY250LCB1OCAqdXNlZF80a19wYmxzKQogewogCXN0cnVjdCBuZXNfaHdfY3FwX3dxZSAqY3FwX3dxZTsKIAlzdHJ1Y3QgbmVzX2NxcF9yZXF1ZXN0ICpjcXBfcmVxdWVzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAJc3RydWN0IG5lc19hZGFwdGVyICpuZXNhZGFwdGVyID0gbmVzZGV2LT5uZXNhZGFwdGVyOwotCS8qIGludCBjb3VudDsgKi8KKwl1aW50IHBnX2NudCA9IDA7CisJdTE2IHBibF9jb3VudF8yNTY7CisJdTE2IHBibF9jb3VudCA9IDA7CisJdTggIHVzZV8yNTZfcGJscyA9IDA7CisJdTggIHVzZV80a19wYmxzID0gMDsKKwl1MTYgdXNlX3R3b19sZXZlbCA9IChwYmxfY291bnRfNGsgPiAxKSA/IDEgOiAwOworCXN0cnVjdCBuZXNfcm9vdF92cGJsIG5ld19yb290ID0gezAsIDAsIDB9OwogCXUzMiBvcGNvZGUgPSAwOwogCXUxNiBtYWpvcl9jb2RlOwogCkBAIC0xOTEzLDQxICsxOTcwLDcwIEBACiAJY3FwX3JlcXVlc3QtPndhaXRpbmcgPSAxOwogCWNxcF93cWUgPSAmY3FwX3JlcXVlc3QtPmNxcF93cWU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkvKiB0cmFjayBQQkwgcmVzb3VyY2VzICovCi0JaWYgKHBibF9jb3VudCAhPSAwKSB7Ci0JCWlmIChwYmxfY291bnQgPiAxKSB7Ci0JCQkvKiBUd28gbGV2ZWwgUEJMICovCi0JCQlpZiAoKHBibF9jb3VudCsxKSA+IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiA0S0IgUGJscyBmb3IgdHdvIGxldmVsIHJlcXVlc3QuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCsxOwotCQkJfQotCQl9IGVsc2UgaWYgKHJlc2lkdWFsX3BhZ2VfY291bnQgPiAzMikgewotCQkJaWYgKHBibF9jb3VudCA+IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiA0S0IgUGJscy5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9IGVsc2UgewotCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50OworCWlmIChwYmxfY291bnRfNGspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisKKwkJcGdfY250ID0gKChwYmxfY291bnRfNGsgLSAxKSAqIDUxMikgKyByZXNpZHVhbF9wYWdlX2NvdW50XzRrOworCQlwYmxfY291bnRfMjU2ID0gKHBnX2NudCArIDMxKSAvIDMyOworCQlpZiAocGdfY250IDw9IDMyKSB7CisJCQlpZiAocGJsX2NvdW50XzI1NiA8PSBuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkKKwkJCQl1c2VfMjU2X3BibHMgPSAxOworCQkJZWxzZSBpZiAocGJsX2NvdW50XzRrIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpCisJCQkJdXNlXzRrX3BibHMgPSAxOworCQl9IGVsc2UgaWYgKHBnX2NudCA8PSAyMDQ4KSB7CisJCQlpZiAoKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSAmJgorCQkJICAgIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gKG5lc2FkYXB0ZXItPm1heF80a3BibCA+PiAxKSkpIHsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CisJCQl9IGVsc2UgaWYgKChwYmxfY291bnRfMjU2ICsgMSkgPD0gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpIHsKKwkJCQl1c2VfMjU2X3BibHMgPSAxOworCQkJCXVzZV90d29fbGV2ZWwgPSAxOworCQkJfSBlbHNlIGlmICgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgeworCQkJCXVzZV80a19wYmxzID0gMTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChwYmxfY291bnQgPiBuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIDI1NkIgUGJscy5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9IGVsc2UgewotCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsIC09IHBibF9jb3VudDsKLQkJCX0KKwkJCWlmICgocGJsX2NvdW50XzRrICsgMSkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkKKwkJCQl1c2VfNGtfcGJscyA9IDE7CiAJCX0KKworCQlpZiAodXNlXzI1Nl9wYmxzKSB7CisJCQlwYmxfY291bnQgPSBwYmxfY291bnRfMjU2OworCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgLT0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJfSBlbHNlIGlmICh1c2VfNGtfcGJscykgeworCQkJcGJsX2NvdW50ID0gIHBibF9jb3VudF80azsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiBQYmxzXG4iKTsKKwkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJaWYgKHVzZV8yNTZfcGJscyAmJiB1c2VfdHdvX2xldmVsKSB7CisJCWlmIChyb290XzI1NihuZXNkZXYsIHJvb3RfdnBibCwgJm5ld19yb290LCBwYmxfY291bnRfNGssIHBibF9jb3VudF8yNTYpID09IDEpIHsKKwkJCWlmIChuZXdfcm9vdC5wYmxfcGJhc2UgIT0gMCkKKwkJCQlyb290X3ZwYmwgPSAmbmV3X3Jvb3Q7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IHBibF9jb3VudF8yNTYgKyB1c2VfdHdvX2xldmVsOworCQkJdXNlXzI1Nl9wYmxzID0gMDsKKworCQkJaWYgKHBibF9jb3VudF80ayA9PSAxKQorCQkJCXVzZV90d29fbGV2ZWwgPSAwOworCQkJcGJsX2NvdW50ID0gcGJsX2NvdW50XzRrOworCisJCQlpZiAoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKKwkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCQkJdXNlXzRrX3BibHMgPSAxOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHVzZV80a19wYmxzID09IDApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKIAlvcGNvZGUgPSBORVNfQ1FQX1JFR0lTVEVSX1NUQUcgfCBORVNfQ1FQX1NUQUdfUklHSFRTX0xPQ0FMX1JFQUQgfAogCQkJCQlORVNfQ1FQX1NUQUdfVkFfVE8gfCBORVNfQ1FQX1NUQUdfTVI7CkBAIC0xOTc2LDEwICsyMDYyLDkgQEAKIAl9IGVsc2UgewogCQlzZXRfd3FlXzY0Yml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQV9MT1dfSURYLCByb290X3ZwYmwtPnBibF9wYmFzZSk7CiAJCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9CTEtfQ09VTlRfSURYLCBwYmxfY291bnQpOwotCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfTEVOX0lEWCwKLQkJCQkoKChwYmxfY291bnQgLSAxKSAqIDQwOTYpICsgKHJlc2lkdWFsX3BhZ2VfY291bnQqOCkpKTsKKwkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0xFTl9JRFgsIChwZ19jbnQgKiA4KSk7CiAKLQkJaWYgKChwYmxfY291bnQgPiAxKSB8fCAocmVzaWR1YWxfcGFnZV9jb3VudCA+IDMyKSkKKwkJaWYgKHVzZV80a19wYmxzKQogCQkJY3FwX3dxZS0+d3FlX3dvcmRzW05FU19DUVBfV1FFX09QQ09ERV9JRFhdIHw9IGNwdV90b19sZTMyKE5FU19DUVBfU1RBR19QQkxfQkxLX1NJWkUpOwogCX0KIAliYXJyaWVyKCk7CkBAIC0xOTk2LDEzICsyMDgxLDI1IEBACiAJbWFqb3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlOwogCW5lc19wdXRfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7CiAKKwlpZiAoKCFyZXQgfHwgbWFqb3JfY29kZSkgJiYgcGJsX2NvdW50ICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCWlmICh1c2VfMjU2X3BibHMpCisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQllbHNlIGlmICh1c2VfNGtfcGJscykKKwkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwl9CisJaWYgKG5ld19yb290LnBibF9wYmFzZSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgNTEyLCBuZXdfcm9vdC5wYmxfdmJhc2UsCisJCQkJICAgIG5ld19yb290LnBibF9wYmFzZSk7CisKIAlpZiAoIXJldCkKIAkJcmV0dXJuIC1FVElNRTsKIAllbHNlIGlmIChtYWpvcl9jb2RlKQogCQlyZXR1cm4gLUVJTzsKLQllbHNlCi0JCXJldHVybiAwOwogCisJKmFjdHVhbF9wYmxfY250ID0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkqdXNlZF80a19wYmxzID0gdXNlXzRrX3BibHM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNjcsMTggKzIyNjQsMTQgQEAKIAkJcGJsX2NvdW50ID0gcm9vdF9wYmxfaW5kZXg7CiAJfQogCXJldCA9IG5lc19yZWdfbXIobmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uX2xlbmd0aCwgJnJvb3RfdnBibCwKLQkJCWJ1ZmZlcl9saXN0WzBdLmFkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsIGlvdmFfc3RhcnQpOworCQkJYnVmZmVyX2xpc3RbMF0uYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywgaW92YV9zdGFydCwKKwkJCSZuZXNtci0+cGJsc191c2VkLCAmbmVzbXItPnBibF80ayk7CiAKIAlpZiAocmV0ID09IDApIHsKIAkJbmVzbXItPmlibXIucmtleSA9IHN0YWc7CiAJCW5lc21yLT5pYm1yLmxrZXkgPSBzdGFnOwogCQluZXNtci0+bW9kZSA9IElXTkVTX01FTVJFR19UWVBFX01FTTsKIAkJaWJtciA9ICZuZXNtci0+aWJtcjsKLQkJbmVzbXItPnBibF80ayA9ICgocGJsX2NvdW50ID4gMSkgfHwgKGN1cl9wYmxfaW5kZXggPiAzMikpID8gMSA6IDA7Ci0JCW5lc21yLT5wYmxzX3VzZWQgPSBwYmxfY291bnQ7Ci0JCWlmIChwYmxfY291bnQgPiAxKSB7Ci0JCQluZXNtci0+cGJsc191c2VkKys7Ci0JCX0KIAl9IGVsc2UgewogCQlrZnJlZShuZXNtcik7CiAJCWlibXIgPSBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjQ1Niw4ICsyNTQ5LDkgQEAKIAkJCQkJc3RhZywgKHVuc2lnbmVkIGludClpb3ZhX3N0YXJ0LAogCQkJCQkodW5zaWduZWQgaW50KXJlZ2lvbl9sZW5ndGgsIHN0YWdfaW5kZXgsCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVnaW9uLT5sZW5ndGgsIHBibF9jb3VudCk7Ci0JCQlyZXQgPSBuZXNfcmVnX21yKCBuZXNkZXYsIG5lc3BkLCBzdGFnLCByZWdpb24tPmxlbmd0aCwgJnJvb3RfdnBibCwKLQkJCQkJZmlyc3RfZG1hX2FkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsICZpb3ZhX3N0YXJ0KTsKKwkJCXJldCA9IG5lc19yZWdfbXIobmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uLT5sZW5ndGgsICZyb290X3ZwYmwsCisJCQkJCSBmaXJzdF9kbWFfYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywKKwkJCQkJICZpb3ZhX3N0YXJ0LCAmbmVzbXItPnBibHNfdXNlZCwgJm5lc21yLT5wYmxfNGspOwogCiAJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgInJldD0lZFxuIiwgcmV0KTsKIApAQCAtMjQ2NiwxMSArMjU2MCw2IEBACiAJCQkJbmVzbXItPmlibXIubGtleSA9IHN0YWc7CiAJCQkJbmVzbXItPm1vZGUgPSBJV05FU19NRU1SRUdfVFlQRV9NRU07CiAJCQkJaWJtciA9ICZuZXNtci0+aWJtcjsKLQkJCQluZXNtci0+cGJsXzRrID0gKChwYmxfY291bnQgPiAxKSB8fCAoY3VyX3BibF9pbmRleCA+IDMyKSkgPyAxIDogMDsKLQkJCQluZXNtci0+cGJsc191c2VkID0gcGJsX2NvdW50OwotCQkJCWlmIChwYmxfY291bnQgPiAxKSB7Ci0JCQkJCW5lc21yLT5wYmxzX3VzZWQrKzsKLQkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWliX3VtZW1fcmVsZWFzZShyZWdpb24pOwogCQkJCWtmcmVlKG5lc21yKTsKQEAgLTI2MDksMjQgKzI2OTgsNiBAQAogCWNxcF9yZXF1ZXN0LT53YWl0aW5nID0gMTsKIAljcXBfd3FlID0gJmNxcF9yZXF1ZXN0LT5jcXBfd3FlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JaWYgKG5lc21yLT5wYmxzX3VzZWQgIT0gMCkgewotCQlpZiAobmVzbXItPnBibF80aykgewotCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNtci0+cGJsc191c2VkOwotCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDRLQiBQQkxzKCV1KSBoYXMgZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCi0JCQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsLCBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKLQkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCA+IG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDI1NkIgUEJMcygldSkgaGFzIGV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAotCQkJCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwsIG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpOwotCQkJfQotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAluZXNfZmlsbF9pbml0X2NxcF93cWUoY3FwX3dxZSwgbmVzZGV2KTsKIAlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9XUUVfT1BDT0RFX0lEWCwKIAkJCU5FU19DUVBfREVBTExPQ0FURV9TVEFHIHwgTkVTX0NRUF9TVEFHX1ZBX1RPIHwKQEAgLTI2NDQsMTEgKzI3MTUsNiBAQAogCQkJIiBDUVAgTWFqb3I6TWlub3IgY29kZXMgPSAweCUwNFg6MHglMDRYXG4iLAogCQkJaWJfbXItPnJrZXksIHJldCwgY3FwX3JlcXVlc3QtPm1ham9yX2NvZGUsIGNxcF9yZXF1ZXN0LT5taW5vcl9jb2RlKTsKIAotCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsCi0JCQkoaWJfbXItPnJrZXkgJiAweDBmZmZmZjAwKSA+PiA4KTsKLQotCWtmcmVlKG5lc21yKTsKLQogCW1ham9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZTsKIAltaW5vcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGU7CiAKQEAgLTI2NjQsOCArMjczMCwzMyBAQAogCQkJCSIgdG8gZGVzdHJveSBTVGFnLCBpYl9tcj0lcCwgcmtleSA9IDB4JTA4WFxuIiwKIAkJCQltYWpvcl9jb2RlLCBtaW5vcl9jb2RlLCBpYl9tciwgaWJfbXItPnJrZXkpOwogCQlyZXR1cm4gLUVJTzsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5lc21yLT5wYmxzX3VzZWQgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJaWYgKG5lc21yLT5wYmxfNGspIHsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKKwkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gbmVzYWRhcHRlci0+bWF4XzRrcGJsKQorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgNEtCIFBCTHMoJXUpIGhhcyAiCisJCQkJCSJleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKKwkJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCwKKwkJCQkJbmVzYWRhcHRlci0+bWF4XzRrcGJsKTsKKwkJfSBlbHNlIHsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7CisJCQlpZiAobmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgPiBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKQorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgMjU2QiBQQkxzKCV1KSBoYXMgIgorCQkJCQkiZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCisJCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsLAorCQkJCQluZXNhZGFwdGVyLT5tYXhfMjU2cGJsKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCX0KKwluZXNfZnJlZV9yZXNvdXJjZShuZXNhZGFwdGVyLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfbXJzLAorCQkJKGliX21yLT5ya2V5ICYgMHgwZmZmZmYwMCkgPj4gOCk7CisKKwlrZnJlZShuZXNtcik7CisKKwlyZXR1cm4gMDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaAppbmRleCBhZTBjYTliLi41ZTQ4ZjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggYTE5MjU4MS4uZGE2MDgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtNDQ2LDExICs0NDYsMTEgQEAKIAkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJnByaXYtPmxyby5scm9fbWdyKTsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaWYgKHVubGlrZWx5KGliX3JlcV9ub3RpZnlfY3EocHJpdi0+cmVjdl9jcSwKIAkJCQkJICAgICAgSUJfQ1FfTkVYVF9DT01QIHwKIAkJCQkJICAgICAgSUJfQ1FfUkVQT1JUX01JU1NFRF9FVkVOVFMpKSAmJgotCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkKIAkJCWdvdG8gcG9sbF9tb3JlOwogCX0KIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9wdHI7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhaW5fdHhfY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggMGJkMmE0Zi4uNDIxYTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTY2MCw4ICs2NjAsMTIgQEAKIAogCXBhdGggPSBfX3BhdGhfZmluZChkZXYsIHBoZHItPmh3YWRkciArIDQpOwogCWlmICghcGF0aCB8fCAhcGF0aC0+dmFsaWQpIHsKLQkJaWYgKCFwYXRoKQorCQlpbnQgbmV3X3BhdGggPSAwOworCisJCWlmICghcGF0aCkgewogCQkJcGF0aCA9IHBhdGhfcmVjX2NyZWF0ZShkZXYsIHBoZHItPmh3YWRkciArIDQpOworCQkJbmV3X3BhdGggPSAxOworCQl9CiAJCWlmIChwYXRoKSB7CiAJCQkvKiBwdXQgcHNldWRvaGVhZGVyIGJhY2sgb24gZm9yIG5leHQgdGltZSAqLwogCQkJc2tiX3B1c2goc2tiLCBzaXplb2YgKnBoZHIpOwpAQCAtNjY5LDcgKzY3Myw4IEBACiAKIAkJCWlmICghcGF0aC0+cXVlcnkgJiYgcGF0aF9yZWNfc3RhcnQoZGV2LCBwYXRoKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKKwkJCQlpZiAobmV3X3BhdGgpCisJCQkJCXBhdGhfZnJlZShkZXYsIHBhdGgpOwogCQkJCXJldHVybjsKIAkJCX0gZWxzZQogCQkJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKQEAgLTEwMTYsMTggKzEwMjEsMjIgQEAKIAlwcml2LT5scm8ubHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQkgPSBpcG9pYl9vcGVuLAorCS5uZG9fc3RvcAkJID0gaXBvaWJfc3RvcCwKKwkubmRvX2NoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CSAJID0gaXBvaWJfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3QsCisJLm5kb19uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXYsCit9OworCiBzdGF0aWMgdm9pZCBpcG9pYl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXYtPm9wZW4JCSA9IGlwb2liX29wZW47Ci0JZGV2LT5zdG9wCQkgPSBpcG9pYl9zdG9wOwotCWRldi0+Y2hhbmdlX210dQkJID0gaXBvaWJfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAkgPSBpcG9pYl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJID0gaXBvaWJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCSA9ICZpcG9pYl9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJID0gJmlwb2liX2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3Q7Ci0JZGV2LT5uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXY7CiAKIAlpcG9pYl9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggMTI4NzYzOS4uMTNkNzY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JZGVidWdfc2NzaSgidGFzayBkZXEgW2NpZCAlZCBpdHQgMHgleF1cbiIsIGNvbm4tPmlkLCB0YXNrLT5pdHQpOworCWlzZXJfZGJnKCJ0YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwgY29ubi0+aWQsIHRhc2stPml0dCk7CiAKIAllcnJvciA9IGlzZXJfc2VuZF9jb250cm9sKGNvbm4sIHRhc2spOwogCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkvKiBTZW5kIGRhdGEtb3V0IFBEVXMgd2hpbGUgdGhlcmUncyBzdGlsbCB1bnNvbGljaXRlZCBkYXRhIHRvIHNlbmQgKi8KIAl3aGlsZSAoaXNjc2lfdGFza19oYXNfdW5zb2xfZGF0YSh0YXNrKSkgewogCQlpc2NzaV9wcmVwX2RhdGFfb3V0X3BkdSh0YXNrLCByMnQsICZoZHIpOwotCQlkZWJ1Z19zY3NpKCJTZW5kaW5nIGRhdGEtb3V0OiBpdHQgMHgleCwgZGF0YSBjb3VudCAlZFxuIiwKKwkJaXNlcl9kYmcoIlNlbmRpbmcgZGF0YS1vdXQ6IGl0dCAweCV4LCBkYXRhIGNvdW50ICVkXG4iLAogCQkJICAgaGRyLml0dCwgcjJ0LT5kYXRhX2NvdW50KTsKIAogCQkvKiB0aGUgYnVmZmVyIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHBhc3NlZCB3aXRoIHRoZSBjb21tYW5kICovCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCWdvdG8gaXNjc2lfaXNlcl90YXNrX3htaXRfdW5zb2xfZGF0YV9leGl0OwogCQl9CiAJCXIydC0+c2VudCArPSByMnQtPmRhdGFfY291bnQ7Ci0JCWRlYnVnX3Njc2koIk5lZWQgdG8gc2VuZCAlZCBtb3JlIGFzIGRhdGEtb3V0IFBEVXNcbiIsCisJCWlzZXJfZGJnKCJOZWVkIHRvIHNlbmQgJWQgbW9yZSBhcyBkYXRhLW91dCBQRFVzXG4iLAogCQkJICAgcjJ0LT5kYXRhX2xlbmd0aCAtIHIydC0+c2VudCk7CiAJfQogCkBAIC0yMjcsMTIgKzIyNywxMiBAQAogCWlmICh0YXNrLT5zYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewogCQlCVUdfT04oc2NzaV9idWZmbGVuKHRhc2stPnNjKSA9PSAwKTsKIAotCQlkZWJ1Z19zY3NpKCJjbWQgW2l0dCAleCB0b3RhbCAlZCBpbW0gJWQgdW5zb2xfZGF0YSAlZFxuIiwKKwkJaXNlcl9kYmcoImNtZCBbaXR0ICV4IHRvdGFsICVkIGltbSAlZCB1bnNvbF9kYXRhICVkXG4iLAogCQkJICAgdGFzay0+aXR0LCBzY3NpX2J1ZmZsZW4odGFzay0+c2MpLAogCQkJICAgdGFzay0+aW1tX2NvdW50LCB0YXNrLT51bnNvbF9yMnQuZGF0YV9sZW5ndGgpOwogCX0KIAotCWRlYnVnX3Njc2koInRhc2sgZGVxIFtjaWQgJWQgaXR0IDB4JXhdXG4iLAorCWlzZXJfZGJnKCJ0YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwKIAkJICAgY29ubi0+aWQsIHRhc2stPml0dCk7CiAKIAkvKiBTZW5kIHRoZSBjbWQgUERVICovCkBAIC0zOTcsMTQgKzM5NywxNCBAQAogc3RhdGljIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9pc2VyX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsCiAJCQkgIHVpbnQxNl90IGNtZHNfbWF4LCB1aW50MTZfdCBxZGVwdGgsCi0JCQkgIHVpbnQzMl90IGluaXRpYWxfY21kc24sIHVpbnQzMl90ICpob3N0bm8pCisJCQkgIHVpbnQzMl90IGluaXRpYWxfY21kc24pCiB7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKIAlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uOwogCi0Jc2hvc3QgPSBpc2NzaV9ob3N0X2FsbG9jKCZpc2NzaV9pc2VyX3NodCwgMCwgSVNDU0lfTUFYX0NNRF9QRVJfTFVOKTsKKwlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmlzY3NpX2lzZXJfc2h0LCAwLCAxKTsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm4gTlVMTDsKIAlzaG9zdC0+dHJhbnNwb3J0dCA9IGlzY3NpX2lzZXJfc2NzaV90cmFuc3BvcnQ7CkBAIC00MjMsNyArNDIzLDYgQEAKIAlpZiAoaXNjc2lfaG9zdF9hZGQoc2hvc3QsCiAJCQkgICBlcCA/IGliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLT5kbWFfZGV2aWNlIDogTlVMTCkpCiAJCWdvdG8gZnJlZV9ob3N0OwotCSpob3N0bm8gPSBzaG9zdC0+aG9zdF9ubzsKIAogCS8qCiAJICogd2UgZG8gbm90IHN1cHBvcnQgc2V0dGluZyBjYW5fcXVldWUgY21kX3Blcl9sdW4gZnJvbSB1c2Vyc3BhY2UgeWV0CkBAIC01OTYsNyArNTk1LDcgQEAKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5zZ190YWJsZXNpemUgICAgICAgICAgID0gSVNDU0lfSVNFUl9TR19UQUJMRVNJWkUsCiAJLm1heF9zZWN0b3JzCQk9IDEwMjQsCi0JLmNtZF9wZXJfbHVuICAgICAgICAgICAgPSBJU0NTSV9NQVhfQ01EX1BFUl9MVU4sCisJLmNtZF9wZXJfbHVuICAgICAgICAgICAgPSBJU0VSX0RFRl9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKaW5kZXggODYxMTE5NS4uOWQ1MjljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCkBAIC05Myw3ICs5Myw3IEBACiAKIAkJCQkJLyogc3VwcG9ydCB1cHRvIDUxMktCIGluIG9uZSBSRE1BICovCiAjZGVmaW5lIElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFICAgICAgICAgKDB4ODAwMDAgPj4gU0hJRlRfNEspCi0jZGVmaW5lIElTQ1NJX0lTRVJfTUFYX0xVTgkJMjU2CisjZGVmaW5lIElTRVJfREVGX0NNRF9QRVJfTFVOCQkxMjgKIAogLyogUVAgc2V0dGluZ3MgKi8KIC8qIE1heGltYWwgYm91bmRzIG9uIHJlY2VpdmVkIGFzeW5jaHJvbm91cyBQRFVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCmluZGV4IGUyMDljYjhkLi45ZGU2NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAlpZiAocmVzdW1lX3R4KSB7CiAJCWlzZXJfZGJnKCIlbGQgcmVzdW1pbmcgdHhcbiIsamlmZmllcyk7Ci0JCXNjc2lfcXVldWVfd29yayhjb25uLT5zZXNzaW9uLT5ob3N0LCAmY29ubi0+eG1pdHdvcmspOworCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoY29ubik7CiAJfQogCiAJaWYgKHR4X2Rlc2MtPnR5cGUgPT0gSVNDU0lfVFhfQ09OVFJPTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggMzE5YjE4OC4uZWE5ZTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC00MDEsMTMgKzQwMSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsdXJlOwogCi0JaXNlcl9kYmcoInBhdGgubXR1IGlzICVkIHNldHRpbmcgaXQgdG8gJWRcbiIsCi0JCSBjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUsIElCX01UVV8xMDI0KTsKLQotCS8qIHdlIG11c3Qgc2V0IHRoZSBNVFUgdG8gMTAyNCBhcyB0aGlzIGlzIHdoYXQgdGhlIHRhcmdldCBpcyBhc3N1bWluZyAqLwotCWlmIChjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUgPiBJQl9NVFVfMTAyNCkKLQkJY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1ID0gSUJfTVRVXzEwMjQ7Ci0KIAltZW1zZXQoJmNvbm5fcGFyYW0sIDAsIHNpemVvZiBjb25uX3BhcmFtKTsKIAljb25uX3BhcmFtLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSA0OwogCWNvbm5fcGFyYW0uaW5pdGlhdG9yX2RlcHRoICAgICA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggZWQ4YmFhMC4uN2E3YTAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtOTQsMTEgKzk0LDggQEAKIHN0YXRpYyBpbnQgZXZkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIGludCBldmRldl9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDZmMjM2NjIuLjQyMjRmMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMTU5LDEyICsxNTksOSBAQAogCiBzdGF0aWMgaW50IGpveWRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IGpveWRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHZvaWQgam95ZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKaW5kZXggZTUwMDQ3Yi4uNzdjZmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCkBAIC0zLDcgKzMsNyBAQAogICoJQmFzZWQgb24gZHJpdmVycy91c2IvaWZvcmNlLmMKICAqCiAgKglDb3B5cmlnaHQgWWFlZ2FzaGkgVGFrZXNoaSwgMjAwMQotICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOAorICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOCAtIDIwMDkKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw3ICsyOSw3IEBACiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19wYWQgKnBhZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwYWQtPmRldjsKLQl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1Zi0+YnVmOwogCiAJYnV0dG9ucyA9IH5sZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShyZXMgKyA4KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCAzNTU2MTY4Li5lYTI2MzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0xMywxMSArMTMsMTEgQEAKIGlmIElOUFVUX0tFWUJPQVJECiAKIGNvbmZpZyBLRVlCT0FSRF9BVEtCRAotCXRyaXN0YXRlICJBVCBrZXlib2FyZCIgaWYgRU1CRURERUQgfHwgIVg4Nl9QQworCXRyaXN0YXRlICJBVCBrZXlib2FyZCIgaWYgRU1CRURERUQgfHwgIVg4NgogCWRlZmF1bHQgeQogCXNlbGVjdCBTRVJJTwogCXNlbGVjdCBTRVJJT19MSUJQUzIKLQlzZWxlY3QgU0VSSU9fSTgwNDIgaWYgWDg2X1BDCisJc2VsZWN0IFNFUklPX0k4MDQyIGlmIFg4NgogCXNlbGVjdCBTRVJJT19HU0NQUzIgaWYgR1NDCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBzdGFuZGFyZCBBVCBvciBQUy8yIGtleWJvYXJkLiBVc3VhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKaW5kZXggYWJiMDRjOC4uNjM0YWY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwppbmRleCAyMmYxN2E1Li41YWEyMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBTRUdBIERyZWFtY2FzdCBrZXlib2FyZCBkcml2ZXIKICAqIEJhc2VkIG9uIGRyaXZlcnMvdXNiL3VzYmtiZC5jCi0gKiBDb3B5cmlnaHQgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQotICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IEFkcmlhbiBNY01lbmFtaW4sIDIwMDcsIDIwMDgKKyAqIENvcHlyaWdodCAoYykgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQorICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluLCAyMDA3IC0gMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIE5SX1NDQU5DT0RFUyAyNTYKIAotTU9EVUxFX0FVVEhPUigiWUFFR0FTSEkgVGFrZXNoaSwgQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiA8YWRyaWFuQG1jbWVuLmRlbW9uLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNFR0EgRHJlYW1jYXN0IGtleWJvYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKIAkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBsZV9rZXliOiAiCisJCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5Y29kZSwgMSk7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAibWFwbGVfa2V5YjogIgorCQkJCWRldl9kYmcoJmRldi0+ZGV2LAogCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcHJlc3NlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTQwLDcgKzE0MCw3IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19rYmQgKmtiZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKLQl1bnNpZ25lZCBsb25nICpidWYgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKShtcS0+cmVjdmJ1Zi0+YnVmKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkIGFsd2F5cyBnZXQgdGhlIGxvY2sgYmVjYXVzZSB0aGUgb25seQpAQCAtMTU5LDIyICsxNTksMjcgQEAKIAogc3RhdGljIGludCBwcm9iZV9tYXBsZV9rYmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKLQlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnY7CiAJaW50IGksIGVycm9yOwogCXN0cnVjdCBkY19rYmQgKmtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCi0JaWYgKCEobWRldi0+ZnVuY3Rpb24gJiBNQVBMRV9GVU5DX0tFWUJPQVJEKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCW1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCiAJa2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRjX2tiZCksIEdGUF9LRVJORUwpOwotCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWtiZCB8fCAhaWRldikgeworCWlmICgha2JkKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KIAorCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlkZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaWRldl9hbGxvYzsKKwl9CisKIAlrYmQtPmRldiA9IGlkZXY7CiAJbWVtY3B5KGtiZC0+a2V5Y29kZSwgZGNfa2JkX2tleWNvZGUsIHNpemVvZihrYmQtPmtleWNvZGUpKTsKIApAQCAtMTk1LDcgKzIwMCw3IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpZGV2KTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX3JlZ2lzdGVyOwogCiAJLyogTWFwbGUgcG9sbGluZyBpcyBsb2NrZWQgdG8gVkJMQU5LIC0gd2hpY2ggbWF5IGJlIGp1c3QgNTAvcyAqLwogCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgZGNfa2JkX2NhbGxiYWNrLCBIWi81MCwKQEAgLTIwNywxMCArMjEyLDEyIEBACiAKIAlyZXR1cm4gZXJyb3I7CiAKLWZhaWw6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7Ci0Ja2ZyZWUoa2JkKTsKK2ZhaWxfcmVnaXN0ZXI6CiAJbWFwbGVfc2V0X2RydmRhdGEobWRldiwgTlVMTCk7CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CitmYWlsX2lkZXZfYWxsb2M6CisJa2ZyZWUoa2JkKTsKK2ZhaWw6CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKaW5kZXggNWM4YTFiYy4uZTE0ODBmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpAQCAtMjE5LDYgKzIxOSw4IEBACiAJCSAgcGRhdGEtPnNjYW5fdGltaW5nLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CiAJaW93cml0ZTE2KDAsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWU9VVERSX09GRlMpOwogCWlvd3JpdGUxNihLWUNSMl9JUlFfTEVWRUwsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKICBlcnI1OgogCWZyZWVfaXJxKGlycSwgcGRldik7CkBAIC0yNTMsMTcgKzI1NSwzMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoX2tleXNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCi0jZGVmaW5lIHNoX2tleXNjX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzaF9rZXlzY19yZXN1bWUgTlVMTAorCXZhbHVlID0gaW9yZWFkMTYocHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXZhbHVlIHw9IDB4ODA7CisJZWxzZQorCQl2YWx1ZSAmPSB+MHg4MDsKKworCWlvd3JpdGUxNih2YWx1ZSwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfa2V5c2NfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX2tleXNjX3N1c3BlbmQsCit9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2tleXNjX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNoX2tleXNjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfa2V5c2NfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHNoX2tleXNjX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzaF9rZXlzY19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNoX2tleXNjIiwKKwkJLnBtCT0gJnNoX2tleXNjX2Rldl9wbV9vcHMsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDlkMTc4MWEuLjEzOTY3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAKICNkZWZpbmUgS0JfUk9XUwkJCTcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCA5NzA1ZjNhLi40ZjM4ZTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IFNFUklPCiAJc2VsZWN0IFNFUklPX0xJQlBTMgotCXNlbGVjdCBTRVJJT19JODA0MiBpZiBYODZfUEMKKwlzZWxlY3QgU0VSSU9fSTgwNDIgaWYgWDg2CiAJc2VsZWN0IFNFUklPX0dTQ1BTMiBpZiBHU0MKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUFMvMiBtb3VzZSBjb25uZWN0ZWQgdG8geW91ciBzeXN0ZW0uIFRoaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYwppbmRleCA1NmMwNzllLi4yNzJkZWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3JwY21vdXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogCiBNT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpaywgUnVzc2VsbCBLaW5nIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggZWY5OWE3ZS4uMTdmZDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtNDAzLDEyICs0MDMsOSBAQAogCiBzdGF0aWMgaW50IG1vdXNlZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbW91c2VkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1vdXNlZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKaW5kZXggN2YzNmVkZDMuLmVkMDQ1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggMDZiYmQwZS4uYjAzMDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC01OCwxMCArNTgsOCBAQAogc3RhdGljIGludCBzZXJpb19yYXdfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzZXJpb19yYXcgKnNlcmlvX3Jhd19sb2NhdGUoaW50IG1pbm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCmluZGV4IDNmYjUxYjUuLjk0YTE5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCmluZGV4IDFiZDg5NjAuLmZlYTViNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYwpAQCAtMjU3LDkgKzI1Nyw5IEBACiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICJhY3QyMDAwX2lzYV9yZWNlaXZlOiBJbnZhbGlkIENBUEkgbXNnXG4iKTsKIAkJCQkJewotCQkJCQkJaW50IGk7IF9fdTggKnA7IF9fdTggKmM7IF9fdTggdG1wWzMwXTsKLQkJCQkJCWZvciAoaSA9IDAsIHAgPSAoX191OCAqKSZjYXJkLT5pZGF0LmlzYS5yY3ZoZHIsIGMgPSB0bXA7IGkgPCA4OyBpKyspCi0JCQkJCQkJYyArPSBzcHJpbnRmKGMsICIlMDJ4ICIsICoocCsrKSk7CisJCQkJCQlpbnQgaTsgX191OCAqcDsgX191OCAqdDsgX191OCB0bXBbMzBdOworCQkJCQkJZm9yIChpID0gMCwgcCA9IChfX3U4ICopJmNhcmQtPmlkYXQuaXNhLnJjdmhkciwgdCA9IHRtcDsgaSA8IDg7IGkrKykKKwkJCQkJCQl0ICs9IHNwcmludGYodCwgIiUwMnggIiwgKihwKyspKTsKIAkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFjdDIwMDBfaXNhX3JlY2VpdmU6ICVzXG4iLCB0bXApOwogCQkJCQl9CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDFiNWJmODcuLjNlNDY4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCWxpc3RfZGVsKCZtcC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGltaW5vcl9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWlmIChtcC0+dHR5c2tiKSBrZnJlZV9za2IobXAtPnR0eXNrYik7CisJa2ZyZWVfc2tiKG1wLT50dHlza2IpOwogCW1wLT50dHlza2IgPSBOVUxMOwogCXNrYl9xdWV1ZV9wdXJnZSgmbXAtPmlucXVldWUpOwogCXNrYl9xdWV1ZV9wdXJnZSgmbXAtPm91dHF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwppbmRleCBjMjkyMDhiLi41MGVkNzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCkBAIC0yMzksNiArMjM5LDcgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZCAqY2FwaV9kcml2ZXJfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCiB7CiAJcmVhZF9sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmNhcGlfZHJpdmVycywgKnBvcyk7CkBAIC0yNTAsNiArMjUxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY2FwaV9kcml2ZXJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKQogewogCXJlYWRfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCmluZGV4IDAwMTdlNTAuLjljYTg4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIG1lbnVjb25maWcgSVNETl9EUlZfR0lHQVNFVAotCXRyaXN0YXRlICJTaWVtZW5zIEdpZ2FzZXQgc3VwcG9ydCAoaXNkbikiCisJdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IgogCXNlbGVjdCBDUkNfQ0NJVFQKIAlzZWxlY3QgQklUUkVWRVJTRQogCWhlbHAKQEAgLTExLDExICsxMSwxMSBAQAogCSAgb25lIG9mIHRoZSBjb25uZWN0aW9uIHNwZWNpZmljIHBhcnRzIHRoYXQgZm9sbG93LgogCSAgVGhpcyB3aWxsIGJ1aWxkIGEgbW9kdWxlIGNhbGxlZCAiZ2lnYXNldCIuCiAKLWlmIElTRE5fRFJWX0dJR0FTRVQhPW4KK2lmIElTRE5fRFJWX0dJR0FTRVQKIAogY29uZmlnIEdJR0FTRVRfQkFTRQogCXRyaXN0YXRlICJHaWdhc2V0IGJhc2Ugc3RhdGlvbiBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVCAmJiBVU0IKKwlkZXBlbmRzIG9uIFVTQgogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgaW50ZXJmYWNlIG9mIHRoZSBHaWdhc2V0CiAJICBiYXNlIGZvciBjb25uZWN0aW9uIHRvIHlvdXIgc3lzdGVtLgpAQCAtMjMsNyArMjMsNyBAQAogCiBjb25maWcgR0lHQVNFVF9NMTA1CiAJdHJpc3RhdGUgIkdpZ2FzZXQgTTEwNSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVCAmJiBVU0IKKwlkZXBlbmRzIG9uIFVTQgogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB0aGUgR2lnYXNldCBiYXNlIHZpYSBERUNUCiAJICB1c2luZyBhIEdpZ2FzZXQgTTEwNSAoU2ludXMgNDUgRGF0YSAyKSBVU0IgREVDVCBkZXZpY2UuCkBAIC0zMSw3ICszMSw2IEBACiAKIGNvbmZpZyBHSUdBU0VUX00xMDEKIAl0cmlzdGF0ZSAiR2lnYXNldCBNMTAxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBHaWdhc2V0IGJhc2UgdmlhIERFQ1QKIAkgIHVzaW5nIGEgR2lnYXNldCBNMTAxIChTaW51cyA0NSBEYXRhIDEpIFJTMjMyIERFQ1QgZGV2aWNlLgpAQCAtNDgsNyArNDcsNiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBVU0IgcmVxdWVzdHMgd2Ugb25seSBrbm93IGZyb20KIAkgIHJldmVyc2UgZW5naW5lZXJpbmcgKGN1cnJlbnRseSBNMTA1IG9ubHkpLiBJZiB5b3UgbmVlZAotCSAgZmVhdHVyZXMgbGlrZSBjb25maWd1cmF0aW9uIG1vZGUgb2YgTTEwNSwgc2F5IHllcy4gSWYgeW91Ci0JICBjYXJlIGFib3V0IHlvdXIgZGV2aWNlLCBzYXkgbm8uCisJICBmZWF0dXJlcyBsaWtlIGNvbmZpZ3VyYXRpb24gbW9kZSBvZiBNMTA1LCBzYXkgeWVzLgogCi1lbmRpZiAjIElTRE5fRFJWX0dJR0FTRVQgIT0gbgorZW5kaWYgIyBJU0ROX0RSVl9HSUdBU0VUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwppbmRleCBhYzI0NWU3Li4zMDcxYTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKQEAgLTM4OSw4ICszODksNyBAQAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAKIAkvKiBhZGFwdGVkIGZyb20gcGxhdGZvcm1fZGV2aWNlX3JlbGVhc2UoKSBpbiBkcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyAqLwogCS8vRklYTUUgaXMgdGhpcyBhY3R1YWxseSBuZWNlc3Nhcnk/CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwppbmRleCBmYmE2MWY2Li5kNzgzODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKQEAgLTI3OCwxNyArMjc4LDE3IEBACiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKIAkJCQkgIHVuc2lnbmVkIG5ld19zdGF0ZSkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogc3RhdGljIGludCBnaWdhc2V0X3NldF9saW5lX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNmbGFnKQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfYmF1ZF9yYXRlKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KICNlbmRpZgogCkBAIC01NzcsNyArNTc3LDcgQEAKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxOSwgMHg0MSwKIAkJCSAgICAgICAwLCAwLCAmYnVmLCA2LCAyMDAwKTsKICNlbHNlCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYwppbmRleCA4NDMxOGVjLi4zM2NlODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKICAgICAgICAgcEMtPnhidWZmZXJbNV0gPSAoYnl0ZSkocnhfZG1hX21hZ2ljID4+ICA4KTsKICAgICAgICAgcEMtPnhidWZmZXJbNl0gPSAoYnl0ZSkocnhfZG1hX21hZ2ljID4+IDE2KTsKICAgICAgICAgcEMtPnhidWZmZXJbN10gPSAoYnl0ZSkocnhfZG1hX21hZ2ljID4+IDI0KTsKLSAgICAgICAgcEMtPnhidWZmZXJbOF0gPSAoYnl0ZSlESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkU7CisJcEMtPnhidWZmZXJbOF0gPSAoYnl0ZSkoRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFICYgMHhGRik7CiAgICAgICAgIHBDLT54YnVmZmVyWzldID0gKGJ5dGUpKERJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRSA+PiA4KTsKICAgICAgICAgcEMtPnhidWZmZXJbMTBdID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKaW5kZXggNGNjOTRmMi4uMzFmOTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCkBAIC0xMTk0LDcgKzExOTQsOCBAQAogLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gZm9yIGVhY2ggbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1ieXRlIGNvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgY2g7CiAgIHdvcmQgaTsKQEAgLTE0MTEsNyArMTQxMiw4IEBACiAgIHJldHVybiAyOwogfQogCi1ieXRlIGNvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgaSwgSW5mbzsKICAgd29yZCBSZWplY3Q7CkBAIC0xNTY3LDEzICsxNTY5LDE1IEBACiAgIHJldHVybiAxOwogfQogCi1ieXRlIGNvbm5lY3RfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgY29ubmVjdF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImNvbm5lY3RfYV9yZXMiKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBpOwpAQCAtMTYyOCw3ICsxNjMyLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImRpc2Nvbm5lY3RfcmVzIikpOwogICBpZihwbGNpKQpAQCAtMTY1NSw3ICsxNjYwLDggQEAKICAgcmV0dXJuIDA7CiB9CiAKLWJ5dGUgbGlzdGVuX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGxpc3Rlbl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgYnl0ZSBpOwpAQCAtMTcwNCw3ICsxNzEwLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGluZm9fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGluZm9fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgaTsKICAgQVBJX1BBUlNFICogYWk7CkBAIC0xODEzLDEzICsxODIwLDE1IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBpbmZvX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBpbmZvX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiaW5mb19yZXMiKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBhbGVydF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgYWxlcnRfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm87CiAgIGJ5dGUgcmV0OwpAQCAtMTg0OSw3ICsxODU4LDggQEAKICAgcmV0dXJuIHJldDsKIH0KIAotYnl0ZSBmYWNpbGl0eV9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZmFjaWxpdHlfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbyA9IDA7CiAgIHdvcmQgaSAgICA9IDA7CkBAIC0yNTk5LDEzICsyNjA5LDE1IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBmYWNpbGl0eV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZmFjaWxpdHlfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJmYWNpbGl0eV9yZXMiKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm8gPSAwOwogICBieXRlIHJlcTsKQEAgLTI4MzksNyArMjg1MSw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAgIEFQSV9QQVJTRSAqIG5jcGk7CkBAIC0yOTU0LDcgKzI5NjcsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogCkBAIC0yOTc0LDcgKzI5ODgsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvOwogICB3b3JkIG5jY2k7CkBAIC0zMDMwLDcgKzMwNDUsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICB3b3JkIGk7CkBAIC0zMDg2LDcgKzMxMDIsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGF0YV9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkYXRhX2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgTkNDSSAgICpuY2NpX3B0cjsKICAgREFUQV9CM19ERVNDICAgKmRhdGE7CkBAIC0zMTYzLDcgKzMxODAsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGF0YV9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkYXRhX2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuOwogICB3b3JkIG5jY2k7CkBAIC0zMTk2LDcgKzMyMTQsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgcmVzZXRfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgcmVzZXRfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvOwogICB3b3JkIG5jY2k7CkBAIC0zMjM3LDcgKzMyNTYsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgcmVzZXRfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgcmVzZXRfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogCkBAIC0zMjYxLDcgKzMyODEsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM190OTBfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3Q5MF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAgIEFQSV9QQVJTRSAqIG5jcGk7CkBAIC0zMjk1LDcgKzMzMTYsOCBAQAogfQogCiAKLWJ5dGUgc2VsZWN0X2JfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIHNlbGVjdF9iX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm89MDsKICAgd29yZCBpOwpAQCAtODY4OSw3ICs4NzExLDcgQEAKIC8qIHNlbmQgYSByZXF1ZXN0IGZvciB0aGUgc2lnbmFsaW5nIGVudGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCBzaWdfcmVxKFBMQ0kgICAqIHBsY2ksIGJ5dGUgcmVxLCBieXRlIElkKQorc3RhdGljIHZvaWQgc2lnX3JlcShQTENJICpwbGNpLCBieXRlIHJlcSwgYnl0ZSBJZCkKIHsKICAgaWYoIXBsY2kpIHJldHVybjsKICAgaWYocGxjaS0+YWRhcHRlci0+YWRhcHRlcl9kaXNhYmxlZCkgcmV0dXJuOwpAQCAtODc4OSw3ICs4ODExLDcgQEAKICAgZGJ1ZygxLGRwcmludGYoInNlbmRfb2siKSk7CiB9CiAKLXZvaWQgc2VuZF9kYXRhKFBMQ0kgICAqIHBsY2kpCitzdGF0aWMgdm9pZCBzZW5kX2RhdGEoUExDSSAqcGxjaSkKIHsKICAgRElWQV9DQVBJX0FEQVBURVIgICAqIGE7CiAgIERBVEFfQjNfREVTQyAgICogZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwppbmRleCBmMGUxNGRmLi42NDFhOWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCkBAIC01Niw4ICs1Niw4IEBACiBzdGF0aWMgaW50IEhGQ19jbnQ7CiBzdGF0aWMgdWludCBkZWJ1ZzsKIHN0YXRpYyB1aW50IHBvbGwsIHRpY3M7Ci1zdHJ1Y3QgdGltZXJfbGlzdCBoZmNfdGw7Ci11MzIJaGZjX2ppZmZpZXM7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgaGZjX3RsOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaGZjX2ppZmZpZXM7CiAKIE1PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKaW5kZXggYmE2OTI1Zi4uOWM0MjdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbUlTRE5ody5oPgogI2luY2x1ZGUgImhmY3N1c2IuaCIKIAotY29uc3QgY2hhciAqaGZjc3VzYl9yZXYgPSAiUmV2aXNpb246IDAuMy4zIChzb2NrZXQpLCAyMDA4LTExLTA1IjsKK3N0YXRpYyBjb25zdCBjaGFyICpoZmNzdXNiX3JldiA9ICJSZXZpc2lvbjogMC4zLjMgKHNvY2tldCksIDIwMDgtMTEtMDUiOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogc3RhdGljIGludCBwb2xsID0gREVGQVVMVF9UUkFOU1BfQlVSU1RfU1o7CkBAIC05NzQsNyArOTc0LDcgQEAKIAlzcGluX3VubG9jaygmaHctPmxvY2spOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogZmlsbF9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLAogCSAgICAgIHZvaWQgKmJ1ZiwgaW50IG51bV9wYWNrZXRzLCBpbnQgcGFja2V0X3NpemUsIGludCBpbnRlcnZhbCwKIAkgICAgICB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCkKQEAgLTE3MjAsNyArMTcyMCw3IEBACiAKIAogLyogSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gKi8KLWludAorc3RhdGljIGludAogc2V0dXBfaGZjc3VzYihzdHJ1Y3QgaGZjc3VzYiAqaHcpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oCmluZGV4IDA5ODQ4NmIuLjQzZWZlNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmgKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaApAQCAtMTk4LDcgKzE5OCw3IEBACiB9OwogCiAvKiBzdHJpbmcgZGVzY3JpcHRpb24gb2YgY2hvc2VuIGNvbmZpZyAqLwotY2hhciAqY29uZl9zdHJbXSA9IHsKK3N0YXRpYyBjaGFyICpjb25mX3N0cltdID0gewogCSI0IEludGVycnVwdCBJTiArIDMgSXNvY2hyb24gT1VUIiwKIAkiMyBJbnRlcnJ1cHQgSU4gKyAzIElzb2Nocm9uIE9VVCIsCiAJIjQgSXNvY2hyb24gSU4gKyAzIElzb2Nocm9uIE9VVCIsCkBAIC0zMTYsNyArMzE2LDcgQEAKICNkZWZpbmUgSEZDX01BWF9URV9MQVlFUjFfU1RBVEUgOAogI2RlZmluZSBIRkNfTUFYX05UX0xBWUVSMV9TVEFURSA0CiAKLWNvbnN0IGNoYXIgKkhGQ19URV9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfVEVfTEFZRVIxX1NUQVRFICsgMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqSEZDX1RFX0xBWUVSMV9TVEFURVNbSEZDX01BWF9URV9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKIAkiVEUgRjAgLSBSZXNldCIsCiAJIlRFIEYxIC0gUmVzZXQiLAogCSJURSBGMiAtIFNlbnNpbmciLApAQCAtMzI4LDcgKzMyOCw3IEBACiAJIlRFIEY4IC0gTG9zdCBmcmFtaW5nIiwKIH07CiAKLWNvbnN0IGNoYXIgKkhGQ19OVF9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfTlRfTEFZRVIxX1NUQVRFICsgMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqSEZDX05UX0xBWUVSMV9TVEFURVNbSEZDX01BWF9OVF9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKIAkiTlQgRzAgLSBSZXNldCIsCiAJIk5UIEcxIC0gRGVhY3RpdmUiLAogCSJOVCBHMiAtIFBlbmRpbmcgYWN0aXZhdGlvbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCmluZGV4IDdjNTZjNDQuLjAyNWEyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCkBAIC0yNCw3ICsyNCw2IEBACiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjU5LjIuNCAkIjsKIAogZXh0ZXJuIHN0cnVjdCBJc2RuQ2FyZCBjYXJkc1tdOwotZXh0ZXJuIGludCBucmNhcmRzOwogCiBzdGF0aWMgaW50IGluaXRfYl9zdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbnAsIGludCBpbmNvbWluZyk7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2Jfc3Qoc3RydWN0IENoYW5uZWwgKmNoYW5wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwppbmRleCBkZWQ5ZDBiLi40ZmFiMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCkBAIC0zNjEsMTIgKzM2MSw2IEBACiAKIGludCBucmNhcmRzOwogCi1leHRlcm4gY29uc3QgY2hhciAqbDFfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbDJfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbDNfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbGxpX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnRlaV9yZXZpc2lvbjsKLQogY2hhciAqSGlTYXhfZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKQogewogCWNoYXIgKnJldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKaW5kZXggY2YwODI2Ni4uMjBkNzY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKQEAgLTE2LDggKzE2LDYgQEAKICNpbmNsdWRlICJoZmNfMmJkczAuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpoZmNzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xMC4yLjQgJCI7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAppbmRleCBlOGQ0MjlmLi5mODUyNzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaApAQCAtMTIxLDYgKzEyMSwxNSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCitleHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKK2V4dGVybiBpbnQgbnJjYXJkczsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmwxX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmwyX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmwzX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICp0ZWlfcmV2aXNpb247CisKIC8qIGluY2x1ZGUgbDNkc3MxICYgbmkxIHNwZWNpZmljIHByb2Nlc3Mgc3RydWN0dXJlcywgYnV0IG5vIG90aGVyIGRlZmluZXMgKi8KICNpZmRlZiBDT05GSUdfSElTQVhfRVVSTwogICAjZGVmaW5lIGwzZHNzMV9wcm9jZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKaW5kZXggYTE0MjA0ZS4uMzE3ZjE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwpAQCAtMTgsMTIgKzE4LDEyIEBACiAgKgogICovCiAKLWNvbnN0IGNoYXIgKmwxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi40Ni4yLjUgJCI7Ci0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAorY29uc3QgY2hhciAqbDFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjQ2LjIuNSAkIjsKKwogI2RlZmluZSBUSU1FUjNfVkFMVUUgNzAwMAogCiBzdGF0aWMgc3RydWN0IEZzbSBsMWZzbV9iOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCmluZGV4IGExMGRmYTguLjU1NjlhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKQEAgLTQ4LDggKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpTZWRsYmF1ZXJfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjM0LjIuNiAkIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgKlNlZGxiYXVlcl9UeXBlc1tdID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYwppbmRleCA0ODU4MTMzLi4zY2EwYmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSAiaXNhYy5oIgogI2luY2x1ZGUgImhzY3guaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICp0ZWxlczBfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE1LjIuNCAkIjsKIAogI2RlZmluZSBURUxFU19JT01FTV9TSVpFCTB4NDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKaW5kZXggNWRjOWYxYS4uZTlmNWJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiBzdGF0aWMgY29uc3QgY2hhciAqdGVsZXMzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMKaW5kZXggNDRkOWMzZC4uZjFiYmM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMKQEAgLTQxLDExICs0MSwxMSBAQAogCiBzdGF0aWMgdV9pbnQgKmRlYnVnOwogc3RhdGljIExJU1RfSEVBRChpY2xvY2tfbGlzdCk7Ci1ERUZJTkVfUldMT0NLKGljbG9ja19sb2NrKTsKLXUxNglpY2xvY2tfY291bnQ7CQkvKiBjb3VudGVyIG9mIGxhc3QgY2xvY2sgKi8KLXN0cnVjdAl0aW1ldmFsIGljbG9ja190djsJLyogdGltZSBzdGFtcCBvZiBsYXN0IGNsb2NrICovCi1pbnQJaWNsb2NrX3R2X3ZhbGlkOwkvKiBhbHJlYWR5IHJlY2VpdmVkIG9uZSB0aW1lc3RhbXAgKi8KLXN0cnVjdAltSVNETmNsb2NrICppY2xvY2tfY3VycmVudDsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGljbG9ja19sb2NrKTsKK3N0YXRpYyB1MTYgaWNsb2NrX2NvdW50OwkJLyogY291bnRlciBvZiBsYXN0IGNsb2NrICovCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgaWNsb2NrX3R2OwkvKiB0aW1lIHN0YW1wIG9mIGxhc3QgY2xvY2sgKi8KK3N0YXRpYyBpbnQgaWNsb2NrX3R2X3ZhbGlkOwkJLyogYWxyZWFkeSByZWNlaXZlZCBvbmUgdGltZXN0YW1wICovCitzdGF0aWMgc3RydWN0IG1JU0ROY2xvY2sgKmljbG9ja19jdXJyZW50OwogCiB2b2lkCiBtSVNETl9pbml0X2Nsb2NrKHVfaW50ICpkcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jIGIvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKaW5kZXggZjJiMzIxOC4uYmJkOTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKQEAgLTE1Miw4ICsxNTIsNyBAQAogCXVfbG9uZwkJCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmdGltZXItPmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5saXN0LCAmdGltZXItPmRldi0+ZXhwaXJlZCk7CisJbGlzdF9tb3ZlX3RhaWwoJnRpbWVyLT5saXN0LCAmdGltZXItPmRldi0+ZXhwaXJlZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXItPmRldi0+bG9jaywgZmxhZ3MpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdGltZXItPmRldi0+d2FpdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKaW5kZXggNWJhMmE4Ny4uZTA3NWU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwpAQCAtMzQ3LDggKzM0Nyw3IEBACiAJCWlmIChkZXYtPnJlYWRfZnJhbWUpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJwY2JpdF9yZWNlaXZlOiBUeXBlIDAgZnJhbWUgYW5kIHJlYWRfZnJhbWUgIT0gTlVMTFxuIik7CiAJCQkvKiBkaXNjYXJkIHByZXZpb3VzIHF1ZXVlZCBmcmFtZSAqLwotCQkJaWYgKGRldi0+cmVhZF9mcmFtZS0+c2tiKQotCQkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CisJCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOwogCQkJa2ZyZWUoZGV2LT5yZWFkX2ZyYW1lKTsKIAkJCWRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CiAJCX0KQEAgLTYwMSw4ICs2MDAsNyBAQAogCWRldi0+d19idXN5ID0gZGV2LT5yX2J1c3kgPSAxOwogCiAJaWYgKGRldi0+cmVhZF9mcmFtZSkgewotCQlpZiAoZGV2LT5yZWFkX2ZyYW1lLT5za2IpCi0JCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOworCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOwogCQlrZnJlZShkZXYtPnJlYWRfZnJhbWUpOwogCQlkZXYtPnJlYWRfZnJhbWUgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggNzQyNzEzNi4uNTU2YWVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTIyMyw0ICsyMjMsNyBAQAogCSAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBpbml0aWFsaXNlZCBpbiB0aGUgT04gc3RhdGUuCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb21tZW50ICJpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpIgorCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUworCiBlbmRpZiAjIE5FV19MRURTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9LY29uZmlnIGIvZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZwppbmRleCA3NmYyYjM2Li5hM2QzY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGd1ZXN0L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgTEdVRVNUCiAJdHJpc3RhdGUgIkxpbnV4IGh5cGVydmlzb3IgZXhhbXBsZSBjb2RlIgotCWRlcGVuZHMgb24gWDg2XzMyICYmIEVYUEVSSU1FTlRBTCAmJiAhWDg2X1BBRSAmJiBGVVRFWCAmJiAhWDg2X1ZPWUFHRVIKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBFWFBFUklNRU5UQUwgJiYgIVg4Nl9QQUUgJiYgRlVURVgKIAlzZWxlY3QgSFZDX0RSSVZFUgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBtb2R1bGUgd2hpY2ggYWxsb3dzIHlvdSB0byBydW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWNhL21jYS1idXMuYyBiL2RyaXZlcnMvbWNhL21jYS1idXMuYwppbmRleCBlZjJkYmZlLi5hZGE1ZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21jYS9tY2EtYnVzLmMKKysrIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAogCW1jYV9kZXYtPmRldi5wYXJlbnQgPSAmbWNhX2J1cy0+ZGV2OwogCW1jYV9kZXYtPmRldi5idXMgPSAmbWNhX2J1c190eXBlOwotCXNwcmludGYgKG1jYV9kZXYtPmRldi5idXNfaWQsICIlMDJkOiUwMlgiLCBidXMsIG1jYV9kZXYtPnNsb3QpOworCWRldl9zZXRfbmFtZSgmbWNhX2Rldi0+ZGV2LCAiJTAyZDolMDJYIiwgYnVzLCBtY2FfZGV2LT5zbG90KTsKIAltY2FfZGV2LT5kbWFfbWFzayA9IG1jYV9idXMtPmRlZmF1bHRfZG1hX21hc2s7CiAJbWNhX2Rldi0+ZGV2LmRtYV9tYXNrID0gJm1jYV9kZXYtPmRtYV9tYXNrOwogCW1jYV9kZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IG1jYV9kZXYtPmRtYV9tYXNrOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJaWYgKCFtY2FfYnVzKQogCQlyZXR1cm4gTlVMTDsKIAotCXNwcmludGYobWNhX2J1cy0+ZGV2LmJ1c19pZCwibWNhJWQiLGJ1cyk7CisJZGV2X3NldF9uYW1lKCZtY2FfYnVzLT5kZXYsICJtY2ElZCIsIGJ1cyk7CiAJc3ByaW50ZihtY2FfYnVzLT5uYW1lLCJIb3N0ICVzIE1DQSBCcmlkZ2UiLCBidXMgPyAiU2Vjb25kYXJ5IiA6ICJQcmltYXJ5Iik7CiAJaWYgKGRldmljZV9yZWdpc3RlcigmbWNhX2J1cy0+ZGV2KSkgewogCQlrZnJlZShtY2FfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IGI1NWQ5Y2MuLjMyNTI2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMTE1LDcgKzExNSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19mY3Bfb3Bjb2RlKHVuc2lnbmVkIGludCBvcGNvZGUsCi0JCQkJICAgIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQorCQkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKIAlzd2l0Y2ggKG9wY29kZSkgewogCWNhc2UgQVZDX09QQ09ERV9WRU5ET1I6CQkJYnJlYWs7CkBAIC0xMzUsMTMgKzEzNSwxNCBAQAogCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w6CXJldHVybiAiUmVnaXN0ZXJSQyI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9MTkJfQ09OVFJPTDoJCXJldHVybiAiTE5CQ29udHJvbCI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s6CQlyZXR1cm4gIlR1bmVRUFNLIjsKKwljYXNlIFNGRV9WRU5ET1JfT1BDT0RFX1RVTkVfUVBTSzI6CQlyZXR1cm4gIlR1bmVRUFNLMiI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOgkJCXJldHVybiAiSG9zdDJDQSI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOgkJCXJldHVybiAiQ0EySG9zdCI7CiAJfQogCXJldHVybiAiVmVuZG9yIjsKIH0KIAotc3RhdGljIHZvaWQgZGVidWdfZmNwKGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHZvaWQgZGVidWdfZmNwKGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQogewogCXVuc2lnbmVkIGludCBzdWJ1bml0X3R5cGUsIHN1YnVuaXRfaWQsIG9wOwogCWNvbnN0IGNoYXIgKnByZWZpeCA9IGRhdGFbMF0gPiA3ID8gIkZDUCA8LSAiIDogIkZDUCAtPiAiOwpAQCAtMjY2LDcgKzI2NywxMCBAQAogCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOwogCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOwogCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOwotCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s7CisJaWYgKGZkdHYtPnR5cGUgPT0gRklSRURUVl9EVkJfUzIpCisJCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0syOworCWVsc2UKKwkJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX1RVTkVfUVBTSzsKIAogCWMtPm9wZXJhbmRbNF0gPSAocGFyYW1zLT5mcmVxdWVuY3kgPj4gMjQpICYgMHhmZjsKIAljLT5vcGVyYW5kWzVdID0gKHBhcmFtcy0+ZnJlcXVlbmN5ID4+IDE2KSAmIDB4ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCmluZGV4IDRkMzUzMDguLjM5MzYyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogCXN0cmxjcHkodi0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsIGRldi0+bmFtZSwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIkkyQzolcyIsIGRldi0+ZGV2LmJ1c19pZCk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksCisJCSAiSTJDOiVzIiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA2NmM3NTVjLi5jZTk4ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC04MDMsOSArODAzLDEwIEBACiAJCXJldHVybiAoLUVOT0VOVCk7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAoLUVOT01FTSk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3g4OF9kZXZfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwppbmRleCAyYWM3MzhmLi5mMTMyZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwpAQCAtNDQ4LDkgKzQ0OCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gImVtMjh4eC1hdWRpby5jOiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzICIKIAkJCSAiUmVjaGJlcmdlclxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5yXSwgIkVtMjh4eCBBdWRpbyIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnJdLCAiRW0yOHh4IEF1ZGlvIiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRldi0+c2xvY2spOwogCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJFbTI4eHggQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYwppbmRleCA3M2ViNjU2Li44MDVmYWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCkBAIC04MCwxNyArODAsMTcgQEAKIHsKIAlpbnQgcnZhbCA9IDA7CiAKLQljYW0tPmZjayA9IGNsa19nZXQoY2FtLT5kZXYsICJjYW1fZmNrIik7CisJY2FtLT5mY2sgPSBjbGtfZ2V0KGNhbS0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihjYW0tPmZjaykpIHsKLQkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1fZmNrIik7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjYW4ndCBnZXQgY2FtZXJhIGZjayIpOwogCQlydmFsID0gUFRSX0VSUihjYW0tPmZjayk7CiAJCW9tYXAyNHh4Y2FtX2Nsb2NrX3B1dChjYW0pOwogCQlyZXR1cm4gcnZhbDsKIAl9CiAKLQljYW0tPmljayA9IGNsa19nZXQoY2FtLT5kZXYsICJjYW1faWNrIik7CisJY2FtLT5pY2sgPSBjbGtfZ2V0KGNhbS0+ZGV2LCAiaWNrIik7CiAJaWYgKElTX0VSUihjYW0tPmljaykpIHsKLQkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1faWNrIik7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjYW4ndCBnZXQgY2FtZXJhIGljayIpOwogCQlydmFsID0gUFRSX0VSUihjYW0tPmljayk7CiAJCW9tYXAyNHh4Y2FtX2Nsb2NrX3B1dChjYW0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMDdjMzM0Zi4uMGM0Y2U1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvY2FtZXJhLmg+CiAKICNkZWZpbmUgUFhBX0NBTV9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBjNzUwZDNkLi44YjBiNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC05OTAsMTAgKzk5MCwxMCBAQAogCWlmICghZW5hYmxlW2Rldm51bV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCkpOwotCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTQUE3MTM0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwppbmRleCBjZjlkNGM3Li44YTRiNzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCkBAIC0zNCw3ICszNCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnY0bDJfZGV2LT5sb2NrKTsKIAl2NGwyX2Rldi0+ZGV2ID0gZGV2OwogCXNucHJpbnRmKHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpLCAiJXMgJXMiLAotCQkJZGV2LT5kcml2ZXItPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB2NGwyX2Rldik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwppbmRleCA2MDYzZGMyLi41NzI3MWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBpbnQgbWNwX2hvc3RfcmVnaXN0ZXIoc3RydWN0IG1jcCAqbWNwKQogewotCXN0cmNweShtY3AtPmF0dGFjaGVkX2RldmljZS5idXNfaWQsICJtY3AwIik7CisJZGV2X3NldF9uYW1lKCZtY3AtPmF0dGFjaGVkX2RldmljZSwgIm1jcDAiKTsKIAlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZtY3AtPmF0dGFjaGVkX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MKG1jcF9ob3N0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKaW5kZXggNjg2MGM5Mi4uZmVhOTA4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCiAJdWNiLT5kZXYuY2xhc3MgPSAmdWNiMXgwMF9jbGFzczsKIAl1Y2ItPmRldi5wYXJlbnQgPSAmbWNwLT5hdHRhY2hlZF9kZXZpY2U7Ci0Jc3RybGNweSh1Y2ItPmRldi5idXNfaWQsICJ1Y2IxeDAwIiwgc2l6ZW9mKHVjYi0+ZGV2LmJ1c19pZCkpOworCWRldl9zZXRfbmFtZSgmdWNiLT5kZXYsICJ1Y2IxeDAwIik7CiAKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5pb19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggYzY0ZTY3OS4uMWM0ODQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTE2Miw3ICsxNjIsNyBAQAogY29uZmlnIFNHSV9YUAogCXRyaXN0YXRlICJTdXBwb3J0IGNvbW11bmljYXRpb24gYmV0d2VlbiBTR0kgU1NJcyIKIAlkZXBlbmRzIG9uIE5FVAotCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIgfHwgSUE2NF9TR0lfVVYgfHwgWDg2XzY0KSAmJiBTTVAKKwlkZXBlbmRzIG9uIChJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yIHx8IElBNjRfU0dJX1VWIHx8IFg4Nl9VVikgJiYgU01QCiAJc2VsZWN0IElBNjRfVU5DQUNIRURfQUxMT0NBVE9SIGlmIElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIKIAlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IgaWYgSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMgogCXNlbGVjdCBTR0lfR1JVIGlmIChJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfVVYgfHwgWDg2XzY0KSAmJiBTTVAKQEAgLTE4OSw3ICsxODksNyBAQAogCiBjb25maWcgU0dJX0dSVQogCXRyaXN0YXRlICJTR0kgR1JVIGRyaXZlciIKLQlkZXBlbmRzIG9uIChYODZfNjQgfHwgSUE2NF9TR0lfVVYgfHwgSUE2NF9HRU5FUklDKSAmJiBTTVAKKwlkZXBlbmRzIG9uIChYODZfVVYgfHwgSUE2NF9TR0lfVVYgfHwgSUE2NF9HRU5FUklDKSAmJiBTTVAKIAlkZWZhdWx0IG4KIAlzZWxlY3QgTU1VX05PVElGSUVSCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VlcHJvbS9LY29uZmlnIGIvZHJpdmVycy9taXNjL2VlcHJvbS9LY29uZmlnCmluZGV4IGM3NmRmOGMuLjg5ZmVjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvZWVwcm9tL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAKIGNvbmZpZyBFRVBST01fQVQyNAogCXRyaXN0YXRlICJJMkMgRUVQUk9NcyBmcm9tIG1vc3QgdmVuZG9ycyIKLQlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUwogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIGRyaXZlciB0byBnZXQgcmVhZC93cml0ZSBzdXBwb3J0IHRvIG1vc3QgSTJDIEVFUFJPTXMsCiAJICBhZnRlciB5b3UgY29uZmlndXJlIHRoZSBkcml2ZXIgdG8ga25vdyBhYm91dCBlYWNoIEVFUFJPTSBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IDY1MDk4MzguLmM2N2U0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTM2LDIzICszNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjaW5jbHVkZSAiZ3J1LmgiCiAjaW5jbHVkZSAiZ3J1bGliLmgiCiAjaW5jbHVkZSAiZ3J1dGFibGVzLmgiCiAKLSNpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNkZWZpbmUgSVNfVVYoKQkJaXNfdXZfc3lzdGVtKCkKLSNlbGlmIGRlZmluZWQgQ09ORklHX0lBNjQKLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3NuL3NpbXVsYXRvci5oPgotLyogdGVtcCBzdXBwb3J0IGZvciBydW5uaW5nIG9uIGhhcmR3YXJlIHNpbXVsYXRvciAqLwotI2RlZmluZSBJU19VVigpCQlJU19NRURVU0EoKSB8fCBpYTY0X3BsYXRmb3JtX2lzKCJ1diIpCi0jZWxzZQotI2RlZmluZSBJU19VVigpCQkwCi0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgogCkBAIC0zODEsNyArMzY5LDcgQEAKIAljaGFyIGlkWzEwXTsKIAl2b2lkICpncnVfc3RhcnRfdmFkZHI7CiAKLQlpZiAoIUlTX1VWKCkpCisJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIDA7CiAKICNpZiBkZWZpbmVkIENPTkZJR19JQTY0CkBAIC00NTEsNyArNDM5LDcgQEAKIAlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZW9mKHN0cnVjdCBncnVfc3RhdGUpICoKIAkJCSAgICAgIEdSVV9DSElQTEVUU19QRVJfQkxBREUpOwogCi0JaWYgKCFJU19VVigpKQorCWlmICghaXNfdXZfc3lzdGVtKCkpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwLmggYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwLmgKaW5kZXggN2I0Y2JkNS4uMjI3NTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cC5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHAuaApAQCAtMTUsMTkgKzE1LDE5IEBACiAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaWZkZWYgQ09ORklHX0lBNjQKKyNpZiBkZWZpbmVkIENPTkZJR19YODZfVVYgfHwgZGVmaW5lZCBDT05GSUdfSUE2NF9TR0lfVVYKKyNpbmNsdWRlIDxhc20vdXYvdXYuaD4KKyNkZWZpbmUgaXNfdXYoKQkJaXNfdXZfc3lzdGVtKCkKKyNlbmRpZgorCisjaWZuZGVmIGlzX3V2CisjZGVmaW5lIGlzX3V2KCkJCTAKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfSUE2NAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgkvKiBkZWZpbmVzIGlzX3NodWIxKCkgYW5kIGlzX3NodWIyKCkgKi8KICNkZWZpbmUgaXNfc2h1YigpCWlhNjRfcGxhdGZvcm1faXMoInNuMiIpCi0jaWZkZWYgQ09ORklHX0lBNjRfU0dJX1VWCi0jZGVmaW5lIGlzX3V2KCkJCWlhNjRfcGxhdGZvcm1faXMoInV2IikKLSNlbHNlCi0jZGVmaW5lIGlzX3V2KCkJCTAKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jZGVmaW5lIGlzX3V2KCkJCWlzX3V2X3N5c3RlbSgpCiAjZW5kaWYKIAogI2lmbmRlZiBpc19zaHViMQpAQCAtNDIsMTAgKzQyLDYgQEAKICNkZWZpbmUgaXNfc2h1YigpCTAKICNlbmRpZgogCi0jaWZuZGVmIGlzX3V2Ci0jZGVmaW5lIGlzX3V2KCkJCTAKLSNlbmRpZgotCiAjaWZkZWYgVVNFX0RCVUdfT04KICNkZWZpbmUgREJVR19PTihjb25kaXRpb24pCUJVR19PTihjb25kaXRpb24pCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jCmluZGV4IDg5MjE4ZjcuLjY1NzYxNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCiAJLyogdGhpcyB0aHJlYWQgd2FzIG1hcmtlZCBhY3RpdmUgYnkgeHBjX2hiX2luaXQoKSAqLwogCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KFhQQ19IQl9DSEVDS19DUFUpKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKFhQQ19IQl9DSEVDS19DUFUpKTsKIAogCS8qIHNldCBvdXIgaGVhcnRiZWF0aW5nIHRvIG90aGVyIHBhcnRpdGlvbnMgaW50byBtb3Rpb24gKi8KIAl4cGNfaGJfY2hlY2tfdGltZW91dCA9IGppZmZpZXMgKyAoeHBjX2hiX2NoZWNrX2ludGVydmFsICogSFopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKaW5kZXggMmIxMTk2ZS4uZTk0ZTkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCiAJdGFza2xldF9pbml0KCZob3N0LT50YXNrbGV0LCBhdG1jaV90YXNrbGV0X2Z1bmMsICh1bnNpZ25lZCBsb25nKWhvc3QpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1jaV9pbnRlcnJ1cHQsIDAsIHBkZXYtPmRldi5idXNfaWQsIGhvc3QpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaG9zdCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggMjkwOWJiYzguLmE2NjM0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgSFopOwogfQogCi1zdGF0aWMgaW50IG1tY2lfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHZvaWQgKmlkKQorc3RhdGljIGludCBfX2RldmluaXQgbW1jaV9wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgdm9pZCAqaWQpCiB7CiAJc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0OwpAQCAtNjMzLDcgKzYzMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtbWNpX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1tY2lfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gYW1iYV9nZXRfZHJ2ZGF0YShkZXYpOwogCkBAIC03MzAsNyArNzMwLDcgQEAKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAl9LAogCS5wcm9iZQkJPSBtbWNpX3Byb2JlLAotCS5yZW1vdmUJCT0gbW1jaV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtbWNpX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBtbWNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBtbWNpX3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBtbWNpX2lkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCmluZGV4IGRkYTBiZTQuLmI0YTYxNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwpAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBIQVNfRE1BCiAjZW5kaWYKIAotI2RlZmluZSBEUklWRVJfTkFNRSAiaW14LW1tYyIKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm14Yy1tbWMiCiAKICNkZWZpbmUgTU1DX1JFR19TVFJfU1RQX0NMSwkJMHgwMAogI2RlZmluZSBNTUNfUkVHX1NUQVRVUwkJCTB4MDQKQEAgLTcwNyw3ICs3MDcsNyBAQAogCWhvc3QtPnJlcyA9IHI7CiAJaG9zdC0+aXJxID0gaXJxOwogCi0JaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2RoY19jbGsiKTsKKwlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCmluZGV4IGZiMjkyMWYuLjBjNDRkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKCFncGlvX2lzX3ZhbGlkKG9tcy0+Z3Bpb3NbaV0pKQogCQkJY29udGludWU7CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0IDwgMCkgewogCQkJb21zLT5ncGlvc1tpXSA9IC1FSU5WQUw7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggNjdkN2I3Zi4uNTU3MDg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTE0NjAsMTggKzE0NjAsMTIgQEAKIAlpZiAoIWhvc3QtPnZpcnRfYmFzZSkKIAkJZ290byBlcnJfaW9yZW1hcDsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jX2ljayIpOwotCQlpZiAoSVNfRVJSKGhvc3QtPmljbGspKQotCQkJZ290byBlcnJfZnJlZV9tbWNfaG9zdDsKLQkJY2xrX2VuYWJsZShob3N0LT5pY2xrKTsKLQl9CisJaG9zdC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIoaG9zdC0+aWNsaykpCisJCWdvdG8gZXJyX2ZyZWVfbW1jX2hvc3Q7CisJY2xrX2VuYWJsZShob3N0LT5pY2xrKTsKIAotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCi0JCWhvc3QtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNfY2siKTsKLQllbHNlCi0JCWhvc3QtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNfZmNrIik7Ci0KKwlob3N0LT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihob3N0LT5mY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmZjbGspOwogCQlnb3RvIGVycl9mcmVlX2ljbGs7CkBAIC0xNTM2LDEwICsxNTMwLDEwIEBACiAJaWYgKGhvc3QtPnBkYXRhLT5jbGVhbnVwKQogCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIAotCWlmIChob3N0LT5pY2xrICYmICFJU19FUlIoaG9zdC0+aWNsaykpCi0JCWNsa19wdXQoaG9zdC0+aWNsayk7Ci0JaWYgKGhvc3QtPmZjbGsgJiYgIUlTX0VSUihob3N0LT5mY2xrKSkKLQkJY2xrX3B1dChob3N0LT5mY2xrKTsKKwltbWNfb21hcF9mY2xrX2VuYWJsZShob3N0LCAwKTsKKwljbGtfcHV0KGhvc3QtPmZjbGspOworCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOworCWNsa19wdXQoaG9zdC0+aWNsayk7CiAKIAlpb3VubWFwKGhvc3QtPnZpcnRfYmFzZSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCBhNjMxYzgxLi4zOTE2YTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtOTU2LDEzICs5NTYsMTMgQEAKIAogCXNlbWFfaW5pdCgmaG9zdC0+c2VtLCAxKTsKIAotCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNoc19pY2siKTsKKwlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CiAJaWYgKElTX0VSUihob3N0LT5pY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmljbGspOwogCQlob3N0LT5pY2xrID0gTlVMTDsKIAkJZ290byBlcnIxOwogCX0KLQlob3N0LT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jaHNfZmNrIik7CisJaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCWlmIChJU19FUlIoaG9zdC0+ZmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5mY2xrKTsKIAkJaG9zdC0+ZmNsayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwppbmRleCA5NzAyYWQzLi40MzAwOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKQEAgLTMwLDkgKzMwLDggQEAKIAogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgInB4YW1jaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDA0M2Q1MGYuLjcyOWY4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTU1MSw1ICs1NTEsMTUgQEAKIAogCSAgVGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBtYXBfcmFtIGRyaXZlci4KIAotZW5kbWVudQorY29uZmlnIE1URF9WTVUKKwl0cmlzdGF0ZSAiTWFwIGRyaXZlciBmb3IgRHJlYW1jYXN0IFZNVSIKKwlkZXBlbmRzIG9uIE1BUExFCisJaGVscAorCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBhY2Nlc3MgdG8gdGhlIERyZWFtY2FzdCBWaXN1YWwgTWVtb3J5IFVuaXQgKFZNVSkuCiAKKwkgIE1vc3QgRHJlYW1jYXN0IHVzZXJzIHdpbGwgd2FudCB0byBzYXkgWSBoZXJlLgorCisJICBUbyBidWlsZCB0aGlzIGFzIGEgbW9kdWxlIHNlbGVjdCBNIGhlcmUsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKKwkgIHZtdS1mbGFzaC4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggNmQ5YmEzNS4uMjZiMjhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC02MSwzICs2MSw0IEBACiBvYmotJChDT05GSUdfTVREX09NQVBfTk9SKQkrPSBvbWFwX25vci5vCiBvYmotJChDT05GSUdfTVREX0lOVEVMX1ZSX05PUikJKz0gaW50ZWxfdnJfbm9yLm8KIG9iai0kKENPTkZJR19NVERfQkZJTl9BU1lOQykJKz0gYmZpbi1hc3luYy1mbGFzaC5vCitvYmotJChDT05GSUdfTVREX1ZNVSkJCSs9IHZtdS1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCmluZGV4IGQyZWMyNjIuLmM5NjgxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgpAQCAtMzgsNyArMzksNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfUDcyMFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCmluZGV4IDc3MTEzOWMuLmU5MDI2Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwpAQCAtNDEsOSArNDEsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAogCi1zdGF0aWMgaW50IF9faW5pdCBweGEyeHhfZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpmbGFzaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CkBAIC0xMTQsMTUgKzExMywxNSBAQAogCQlhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaWYgKGluZm8tPm5yX3BhcnRzKQpAQCAtMTQxLDkgKzE0MCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaW5mby0+bXRkICYmIGluZm8tPm10ZC0+c3VzcGVuZCkKQEAgLTE1MSwxNyArMTUwLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZmxhc2hfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvLT5tdGQgJiYgaW5mby0+bXRkLT5yZXN1bWUpCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZCBweGEyeHhfZmxhc2hfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHhhMnh4X2ZsYXNoX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8gJiYgaW5mby0+bXRkLT5zdXNwZW5kKGluZm8tPm10ZCkgPT0gMCkKIAkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKQEAgLTE3MiwxMSArMTcxLDEzIEBACiAjZGVmaW5lIHB4YTJ4eF9mbGFzaF9zaHV0ZG93biBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YTJ4eF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1mbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfZmxhc2hfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gcHhhMnh4X2ZsYXNoX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AocHhhMnh4X2ZsYXNoX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGEyeHhfZmxhc2hfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF9mbGFzaF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X2ZsYXNoX3Jlc3VtZSwKIAkuc2h1dGRvd24JPSBweGEyeHhfZmxhc2hfc2h1dGRvd24sCkBAIC0xODQsMTIgKzE4NSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3B4YTJ4eF9mbGFzaCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9weGEyeHhfZmxhc2godm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X3B4YTJ4eF9mbGFzaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwppbmRleCA2ZjZhMGY2Li44ZjU3YjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CkBAIC0xOSw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbmNhdC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jCkBAIC0wLDAgKzEsODMyIEBACisvKiB2bXUtZmxhc2guYworICogRHJpdmVyIGZvciBTRUdBIERyZWFtY2FzdCBWaXN1YWwgTWVtb3J5IFVuaXQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIEFkcmlhbiBNY01lbmFtaW4gMjAwMiAtIDIwMDkKKyAqIENvcHlyaWdodCAoYykgUGF1bCBNdW5kdCAyMDAxCisgKgorICogTGljZW5zZWQgdW5kZXIgdmVyc2lvbiAyIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbWFwbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorCitzdHJ1Y3Qgdm11X2NhY2hlIHsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CQkvKiBDYWNoZSAqLworCXVuc2lnbmVkIGludCBibG9jazsJCS8qIFdoaWNoIGJsb2NrIHdhcyBjYWNoZWQgKi8KKwl1bnNpZ25lZCBsb25nIGppZmZpZXNfYXRjOwkvKiBXaGVuIHdhcyBpdCBjYWNoZWQ/ICovCisJaW50IHZhbGlkOworfTsKKworc3RydWN0IG1kZXZfcGFydCB7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlpbnQgcGFydGl0aW9uOworfTsKKworc3RydWN0IHZtdXBhcnQgeworCXUxNiB1c2VyX2Jsb2NrczsKKwl1MTYgcm9vdF9ibG9jazsKKwl1MTYgbnVtYmxvY2tzOworCWNoYXIgKm5hbWU7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworfTsKKworc3RydWN0IG1lbWNhcmQgeworCXUxNiB0ZW1wQTsKKwl1MTYgdGVtcEI7CisJdTMyIHBhcnRpdGlvbnM7CisJdTMyIGJsb2NrbGVuOworCXUzMiB3cml0ZWNudDsKKwl1MzIgcmVhZGNudDsKKwl1MzIgcmVtb3ZlYWJsZTsKKwlpbnQgcGFydGl0aW9uOworCWludCByZWFkOworCXVuc2lnbmVkIGNoYXIgKmJsb2NrcmVhZDsKKwlzdHJ1Y3Qgdm11cGFydCAqcGFydHM7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7Cit9OworCitzdHJ1Y3Qgdm11X2Jsb2NrIHsKKwl1bnNpZ25lZCBpbnQgbnVtOyAvKiBibG9jayBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgb2ZzOyAvKiBibG9jayBvZmZzZXQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgdm11X2Jsb2NrICpvZnNfdG9fYmxvY2sodW5zaWduZWQgbG9uZyBzcmNfb2ZzLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFydGl0aW9uKQoreworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCWludCBudW07CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCisJaWYgKHNyY19vZnMgPj0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5udW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbikKKwkJZ290byBmYWlsZWQ7CisKKwludW0gPSBzcmNfb2ZzIC8gY2FyZC0+YmxvY2tsZW47CisJaWYgKG51bSA+IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ubnVtYmxvY2tzKQorCQlnb3RvIGZhaWxlZDsKKworCXZibG9jayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bXVfYmxvY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZibG9jaykKKwkJZ290byBmYWlsZWQ7CisKKwl2YmxvY2stPm51bSA9IG51bTsKKwl2YmxvY2stPm9mcyA9IHNyY19vZnMgJSBjYXJkLT5ibG9ja2xlbjsKKwlyZXR1cm4gdmJsb2NrOworCitmYWlsZWQ6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIE1hcGxlIGJ1cyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcmVhZHMgKi8KK3N0YXRpYyB2b2lkIHZtdV9ibG9ja3JlYWQoc3RydWN0IG1hcGxlcSAqbXEpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKworCW1kZXYgPSBtcS0+ZGV2OworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwkvKiBjb3B5IHRoZSByZWFkIGluIGRhdGEgKi8KKworCWlmICh1bmxpa2VseSghY2FyZC0+YmxvY2tyZWFkKSkKKwkJcmV0dXJuOworCisJbWVtY3B5KGNhcmQtPmJsb2NrcmVhZCwgbXEtPnJlY3ZidWYtPmJ1ZiArIDEyLAorCQljYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KTsKKworfQorCisvKiBJbnRlcmZhY2Ugd2l0aCBtYXBsZSBidXMgdG8gcmVhZCBibG9ja3MKKyAqIGNhY2hpbmcgdGhlIHJlc3VsdHMgc28gdGhhdCBvdGhlciBwYXJ0cworICogb2YgdGhlIGRyaXZlciBjYW4gYWNjZXNzIGJsb2NrIHJlYWRzICovCitzdGF0aWMgaW50IG1hcGxlX3ZtdV9yZWFkX2Jsb2NrKHVuc2lnbmVkIGludCBudW0sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCWludCBwYXJ0aXRpb24sIGVycm9yID0gMCwgeCwgd2FpdDsKKwl1bnNpZ25lZCBjaGFyICpibG9ja3JlYWQgPSBOVUxMOworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKKwlfX2JlMzIgc2VuZGJ1ZjsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwlwY2FjaGUgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLnBjYWNoZTsKKwlwY2FjaGUtPnZhbGlkID0gMDsKKworCS8qIHByZXBhcmUgdGhlIGNhY2hlIGZvciB0aGlzIGJsb2NrICovCisJaWYgKCFwY2FjaGUtPmJ1ZmZlcikgeworCQlwY2FjaGUtPmJ1ZmZlciA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4sIEdGUF9LRVJORUwpOworCQlpZiAoIXBjYWNoZS0+YnVmZmVyKSB7CisJCQlkZXZfZXJyKCZtZGV2LT5kZXYsICJWTVUgYXQgKCVkLCAlZCkgLSByZWFkIGZhaWxzIGR1ZSIKKwkJCQkiIHRvIGxhY2sgb2YgbWVtb3J5XG4iLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQpOworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXRCOworCQl9CisJfQorCisJLyoKKwkqIFJlYWRzIG1heSBiZSBwaGFzZWQgLSBhZ2FpbiB0aGUgaGFyZHdhcmUgc3BlYworCSogc3VwcG9ydHMgdGhpcyAtIHRob3VnaCBtYXkgbm90IGJlIGFueSBkZXZpY2VzIGluCisJKiB0aGUgd2lsZCB0aGF0IGltcGxlbWVudCBpdCwgYnV0IHdlIHdpbGwgaGVyZQorCSovCisJZm9yICh4ID0gMDsgeCA8IGNhcmQtPnJlYWRjbnQ7IHgrKykgeworCQlzZW5kYnVmID0gY3B1X3RvX2JlMzIocGFydGl0aW9uIDw8IDI0IHwgeCA8PCAxNiB8IG51bSk7CisKKwkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwLCBIWik7CisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgYXQgKCVkLCAlZCkiCisJCQkJCSIgaXMgYnVzeVxuIiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJZXJyb3IgPSAtRUFHQUlOOworCQkJCWdvdG8gb3V0QjsKKwkJCX0KKwkJfQorCisJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCQlibG9ja3JlYWQgPSBrbWFsbG9jKGNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQsIEdGUF9LRVJORUwpOworCQlpZiAoIWJsb2NrcmVhZCkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQlnb3RvIG91dEI7CisJCX0KKwkJY2FyZC0+YmxvY2tyZWFkID0gYmxvY2tyZWFkOworCisJCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgdm11X2Jsb2NrcmVhZCwgMCwKKwkJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisJCWVycm9yID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCBNQVBMRV9GVU5DX01FTUNBUkQsCisJCQkJTUFQTEVfQ09NTUFORF9CUkVBRCwgMiwgJnNlbmRidWYpOworCQkvKiBWZXJ5IGxvbmcgdGltZW91dHMgc2VlbSB0byBiZSBuZWVkZWQgd2hlbiBib3ggaXMgc3RyZXNzZWQgKi8KKwkJd2FpdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQkoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAgfHwKKwkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAyKSwgSFogKiAzKTsKKwkJLyoKKwkJKiBNVEQgbGF5ZXIgZG9lcyBub3QgaGFuZGxlIGhvdHBsdWdnaW5nIHdlbGwKKwkJKiBzbyBoYXZlIHRvIHJldHVybiBlcnJvcnMgd2hlbiBWTVUgaXMgdW5wbHVnZ2VkCisJCSogaW4gdGhlIG1pZGRsZSBvZiBhIHJlYWQgKGJ1c3kgPT0gMikKKwkJKi8KKwkJaWYgKGVycm9yIHx8IGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAyKSB7CisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpCisJCQkJZXJyb3IgPSAtRU5YSU87CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWNhcmQtPmJsb2NrcmVhZCA9IE5VTEw7CisJCQlnb3RvIG91dEE7CisJCX0KKwkJaWYgKHdhaXQgPT0gMCB8fCB3YWl0ID09IC1FUkVTVEFSVFNZUykgeworCQkJY2FyZC0+YmxvY2tyZWFkID0gTlVMTDsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJZXJyb3IgPSAtRUlPOworCQkJbGlzdF9kZWxfaW5pdCgmKG1kZXYtPm1xLT5saXN0KSk7CisJCQlrZnJlZShtZGV2LT5tcS0+c2VuZGJ1Zik7CisJCQltZGV2LT5tcS0+c2VuZGJ1ZiA9IE5VTEw7CisJCQlpZiAod2FpdCA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiVk1VIHJlYWQgb24gKCVkLCAlZCkiCisJCQkJCSIgaW50ZXJydXB0ZWQgb24gYmxvY2sgMHglWFxuIiwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgbnVtKTsKKwkJCX0gZWxzZQorCQkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgIlZNVSByZWFkIG9uICglZCwgJWQpIgorCQkJCQkiIHRpbWVkIG91dCBvbiBibG9jayAweCVYXG4iLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBudW0pOworCQkJZ290byBvdXRBOworCQl9CisKKwkJbWVtY3B5KGJ1ZiArIChjYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KSAqIHgsIGJsb2NrcmVhZCwKKwkJCWNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpOworCisJCW1lbWNweShwY2FjaGUtPmJ1ZmZlciArIChjYXJkLT5ibG9ja2xlbi9jYXJkLT5yZWFkY250KSAqIHgsCisJCQljYXJkLT5ibG9ja3JlYWQsIGNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpOworCQljYXJkLT5ibG9ja3JlYWQgPSBOVUxMOworCQlwY2FjaGUtPmJsb2NrID0gbnVtOworCQlwY2FjaGUtPmppZmZpZXNfYXRjID0gamlmZmllczsKKwkJcGNhY2hlLT52YWxpZCA9IDE7CisJCWtmcmVlKGJsb2NrcmVhZCk7CisJfQorCisJcmV0dXJuIGVycm9yOworCitvdXRBOgorCWtmcmVlKGJsb2NrcmVhZCk7CitvdXRCOgorCXJldHVybiBlcnJvcjsKK30KKworLyogY29tbXVuaWNhdGUgd2l0aCBtYXBsZSBidXMgZm9yIHBoYXNlZCB3cml0aW5nICovCitzdGF0aWMgaW50IG1hcGxlX3ZtdV93cml0ZV9ibG9jayh1bnNpZ25lZCBpbnQgbnVtLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlpbnQgcGFydGl0aW9uLCBlcnJvciwgbG9ja2luZywgeCwgcGhhc2VsZW4sIHdhaXQ7CisJX19iZTMyICpzZW5kYnVmOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCisJcGhhc2VsZW4gPSBjYXJkLT5ibG9ja2xlbi9jYXJkLT53cml0ZWNudDsKKworCXNlbmRidWYgPSBrbWFsbG9jKHBoYXNlbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZW5kYnVmKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX25vc2VuZGJ1ZjsKKwl9CisJZm9yICh4ID0gMDsgeCA8IGNhcmQtPndyaXRlY250OyB4KyspIHsKKwkJc2VuZGJ1ZlswXSA9IGNwdV90b19iZTMyKHBhcnRpdGlvbiA8PCAyNCB8IHggPDwgMTYgfCBudW0pOworCQltZW1jcHkoJnNlbmRidWZbMV0sIGJ1ZiArIHBoYXNlbGVuICogeCwgcGhhc2VsZW4pOworCQkvKiB3YWl0IHVudGlsIHRoZSBkZXZpY2UgaXMgbm90IGJ1c3kgZG9pbmcgc29tZXRoaW5nIGVsc2UKKwkJKiBvciAxIHNlY29uZCAtIHdoaWNoIGV2ZXIgaXMgbG9uZ2VyICovCisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCwgSFopOworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQkJZXJyb3IgPSAtRUJVU1k7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIHdyaXRlIGF0ICglZCwgJWQpIgorCQkJCQkiZmFpbGVkIC0gZGV2aWNlIGlzIGJ1c3lcbiIsCisJCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQkJCWdvdG8gZmFpbF9ub2xvY2s7CisJCQl9CisJCX0KKwkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisKKwkJbG9ja2luZyA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQkJTUFQTEVfQ09NTUFORF9CV1JJVEUsIHBoYXNlbGVuIC8gNCArIDIsIHNlbmRidWYpOworCQl3YWl0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwLCBIWi8xMCk7CisJCWlmIChsb2NraW5nKSB7CisJCQllcnJvciA9IC1FSU87CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWdvdG8gZmFpbF9ub2xvY2s7CisJCX0KKwkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAyKSB7CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJfSBlbHNlIGlmICh3YWl0ID09IDAgfHwgd2FpdCA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJCWVycm9yID0gLUVJTzsKKwkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJXcml0ZSBhdCAoJWQsICVkKSBvZiBibG9jayIKKwkJCQkiIDB4JVggYXQgcGhhc2UgJWQgZmFpbGVkOiBjb3VsZCBub3QiCisJCQkJIiBjb21tdW5pY2F0ZSB3aXRoIFZNVSIsIG1kZXYtPnBvcnQsCisJCQkJbWRldi0+dW5pdCwgbnVtLCB4KTsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJa2ZyZWUobWRldi0+bXEtPnNlbmRidWYpOworCQkJbWRldi0+bXEtPnNlbmRidWYgPSBOVUxMOworCQkJbGlzdF9kZWxfaW5pdCgmKG1kZXYtPm1xLT5saXN0KSk7CisJCQlnb3RvIGZhaWxfbm9sb2NrOworCQl9CisJfQorCWtmcmVlKHNlbmRidWYpOworCisJcmV0dXJuIGNhcmQtPmJsb2NrbGVuOworCitmYWlsX25vbG9jazoKKwlrZnJlZShzZW5kYnVmKTsKK2ZhaWxfbm9zZW5kYnVmOgorCWRldl9lcnIoJm1kZXYtPmRldiwgIlZNVSAoJWQsICVkKTogd3JpdGUgZmFpbGVkXG4iLCBtZGV2LT5wb3J0LAorCQltZGV2LT51bml0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIG10ZCBmdW5jdGlvbiB0byBzaW11bGF0ZSByZWFkaW5nIGJ5dGUgYnkgYnl0ZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgdm11X2ZsYXNoX3JlYWRfY2hhcih1bnNpZ25lZCBsb25nIG9mcywgaW50ICpyZXR2YWwsCisJc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHZtdV9ibG9jayAqdmJsb2NrOworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJdW5zaWduZWQgY2hhciAqYnVmLCByZXQ7CisJaW50IHBhcnRpdGlvbiwgZXJyb3I7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJKnJldHZhbCA9ICAwOworCisJYnVmID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJKnJldHZhbCA9IDE7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmluaXNoOworCX0KKworCXZibG9jayA9IG9mc190b19ibG9jayhvZnMsIG10ZCwgcGFydGl0aW9uKTsKKwlpZiAoIXZibG9jaykgeworCQkqcmV0dmFsID0gMzsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfYnVmOworCX0KKworCWVycm9yID0gbWFwbGVfdm11X3JlYWRfYmxvY2sodmJsb2NrLT5udW0sIGJ1ZiwgbXRkKTsKKwlpZiAoZXJyb3IpIHsKKwkJcmV0ID0gZXJyb3I7CisJCSpyZXR2YWwgPSAyOworCQlnb3RvIG91dF92YmxvY2s7CisJfQorCisJcmV0ID0gYnVmW3ZibG9jay0+b2ZzXTsKKworb3V0X3ZibG9jazoKKwlrZnJlZSh2YmxvY2spOworb3V0X2J1ZjoKKwlrZnJlZShidWYpOworZmluaXNoOgorCXJldHVybiByZXQ7Cit9CisKKy8qIG10ZCBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gcmVhZCBmbGFzaCAqLworc3RhdGljIGludCB2bXVfZmxhc2hfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJc2l6ZV90ICpyZXRsZW4sICB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJaW50IGluZGV4ID0gMCwgcmV0dmFsLCBwYXJ0aXRpb24sIGxlZnRvdmVyLCBudW1ibG9ja3M7CisJdW5zaWduZWQgY2hhciBjeDsKKworCWlmIChsZW4gPCAxKQorCQlyZXR1cm4gLUVJTzsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKworCW51bWJsb2NrcyA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ubnVtYmxvY2tzOworCWlmIChmcm9tICsgbGVuID4gbnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4pCisJCWxlbiA9IG51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuIC0gZnJvbTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAtRUlPOworCS8qIEhhdmUgd2UgY2FjaGVkIHRoaXMgYml0IGFscmVhZHk/ICovCisJcGNhY2hlID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5wY2FjaGU7CisJZG8geworCQl2YmxvY2sgPSAgb2ZzX3RvX2Jsb2NrKGZyb20gKyBpbmRleCwgbXRkLCBwYXJ0aXRpb24pOworCQlpZiAoIXZibG9jaykKKwkJCXJldHVybiAtRU5PTUVNOworCQkvKiBIYXZlIHdlIGNhY2hlZCB0aGlzIGFuZCBpcyB0aGUgY2FjaGUgdmFsaWQgYW5kIHRpbWVseT8gKi8KKwkJaWYgKHBjYWNoZS0+dmFsaWQgJiYKKwkJCXRpbWVfYmVmb3JlKGppZmZpZXMsIHBjYWNoZS0+amlmZmllc19hdGMgKyBIWikgJiYKKwkJCShwY2FjaGUtPmJsb2NrID09IHZibG9jay0+bnVtKSkgeworCQkJLyogd2UgaGF2ZSBjYWNoZWQgaXQsIHNvIGRvIG5lY2Vzc2FyeSBjb3B5aW5nICovCisJCQlsZWZ0b3ZlciA9IGNhcmQtPmJsb2NrbGVuIC0gdmJsb2NrLT5vZnM7CisJCQlpZiAodmJsb2NrLT5vZnMgKyBsZW4gLSBpbmRleCA8IGNhcmQtPmJsb2NrbGVuKSB7CisJCQkJLyogb25seSBhIGJpdCBvZiB0aGlzIGJsb2NrIHRvIGNvcHkgKi8KKwkJCQltZW1jcHkoYnVmICsgaW5kZXgsCisJCQkJCXBjYWNoZS0+YnVmZmVyICsgdmJsb2NrLT5vZnMsCisJCQkJCWxlbiAtIGluZGV4KTsKKwkJCQlpbmRleCA9IGxlbjsKKwkJCX0gZWxzZSB7CisJCQkJLyogb3RoZXJ3aXNlIGNvcHkgcmVtYWluZGVyIG9mIHdob2xlIGJsb2NrICovCisJCQkJbWVtY3B5KGJ1ZiArIGluZGV4LCBwY2FjaGUtPmJ1ZmZlciArCisJCQkJCXZibG9jay0+b2ZzLCBsZWZ0b3Zlcik7CisJCQkJaW5kZXggKz0gbGVmdG92ZXI7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJKiBOb3QgY2FjaGVkIHNvIHJlYWQgb25lIGJ5dGUgLQorCQkJKiBidXQgY2FjaGUgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrCisJCQkqLworCQkJY3ggPSB2bXVfZmxhc2hfcmVhZF9jaGFyKGZyb20gKyBpbmRleCwgJnJldHZhbCwgbXRkKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQkqcmV0bGVuID0gaW5kZXg7CisJCQkJa2ZyZWUodmJsb2NrKTsKKwkJCQlyZXR1cm4gY3g7CisJCQl9CisJCQltZW1zZXQoYnVmICsgaW5kZXgsIGN4LCAxKTsKKwkJCWluZGV4Kys7CisJCX0KKwkJa2ZyZWUodmJsb2NrKTsKKwl9IHdoaWxlIChsZW4gPiBpbmRleCk7CisJKnJldGxlbiA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm11X2ZsYXNoX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJaW50IGluZGV4ID0gMCwgcGFydGl0aW9uLCBlcnJvciA9IDAsIG51bWJsb2NrczsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7CisJc3RydWN0IHZtdV9ibG9jayAqdmJsb2NrOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKworCS8qIHNpbXBsZSBzYW5pdHkgY2hlY2tzICovCisJaWYgKGxlbiA8IDEpIHsKKwkJZXJyb3IgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisJbnVtYmxvY2tzID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5udW1ibG9ja3M7CisJaWYgKHRvICsgbGVuID4gbnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4pCisJCWxlbiA9IG51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuIC0gdG87CisJaWYgKGxlbiA9PSAwKSB7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJdmJsb2NrID0gb2ZzX3RvX2Jsb2NrKHRvLCBtdGQsIHBhcnRpdGlvbik7CisJaWYgKCF2YmxvY2spIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlidWZmZXIgPSBrbWFsbG9jKGNhcmQtPmJsb2NrbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9idWZmZXI7CisJfQorCisJZG8geworCQkvKiBSZWFkIGluIHRoZSBibG9jayB3ZSBhcmUgdG8gd3JpdGUgdG8gKi8KKwkJZXJyb3IgPSBtYXBsZV92bXVfcmVhZF9ibG9jayh2YmxvY2stPm51bSwgYnVmZmVyLCBtdGQpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZhaWxfaW87CisKKwkJZG8geworCQkJYnVmZmVyW3ZibG9jay0+b2ZzXSA9IGJ1ZltpbmRleF07CisJCQl2YmxvY2stPm9mcysrOworCQkJaW5kZXgrKzsKKwkJCWlmIChpbmRleCA+PSBsZW4pCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKHZibG9jay0+b2ZzIDwgY2FyZC0+YmxvY2tsZW4pOworCisJCS8qIHdyaXRlIG91dCBuZXcgYnVmZmVyICovCisJCWVycm9yID0gbWFwbGVfdm11X3dyaXRlX2Jsb2NrKHZibG9jay0+bnVtLCBidWZmZXIsIG10ZCk7CisJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlICovCisJCXBjYWNoZSA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ucGNhY2hlOworCQlwY2FjaGUtPnZhbGlkID0gMDsKKworCQlpZiAoZXJyb3IgIT0gY2FyZC0+YmxvY2tsZW4pCisJCQlnb3RvIGZhaWxfaW87CisKKwkJdmJsb2NrLT5udW0rKzsKKwkJdmJsb2NrLT5vZnMgPSAwOworCX0gd2hpbGUgKGxlbiA+IGluZGV4KTsKKworCWtmcmVlKGJ1ZmZlcik7CisJKnJldGxlbiA9IGluZGV4OworCWtmcmVlKHZibG9jayk7CisJcmV0dXJuIDA7CisKK2ZhaWxfaW86CisJa2ZyZWUoYnVmZmVyKTsKK2ZhaWxfYnVmZmVyOgorCWtmcmVlKHZibG9jayk7CitmYWlsZWQ6CisJZGV2X2VycigmbWRldi0+ZGV2LCAiVk1VIHdyaXRlIGZhaWxpbmcgd2l0aCBlcnJvciAlZFxuIiwgZXJyb3IpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgdm11X2ZsYXNoX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJLyogRG8gbm90aGluZyBoZXJlICovCit9CisKKy8qIE1hcGxlIGJ1cyBjYWxsYmFjayBmdW5jdGlvbiB0byByZWN1cnNpdmVseSBxdWVyeSBoYXJkd2FyZSBkZXRhaWxzICovCitzdGF0aWMgdm9pZCB2bXVfcXVlcnlibG9ja3Moc3RydWN0IG1hcGxlcSAqbXEpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwl1bnNpZ25lZCBzaG9ydCAqcmVzOworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCV9fYmUzMiBwYXJ0bnVtOworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZF9jdXI7CisJc3RydWN0IHZtdXBhcnQgKnBhcnRfY3VyOworCWludCBlcnJvcjsKKworCW1kZXYgPSBtcS0+ZGV2OworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwlyZXMgPSAodW5zaWduZWQgc2hvcnQgKikgKG1xLT5yZWN2YnVmLT5idWYpOworCWNhcmQtPnRlbXBBID0gcmVzWzEyXTsKKwljYXJkLT50ZW1wQiA9IHJlc1s2XTsKKworCWRldl9pbmZvKCZtZGV2LT5kZXYsICJWTVUgZGV2aWNlIGF0IHBhcnRpdGlvbiAlZCBoYXMgJWQgdXNlciAiCisJCSJibG9ja3Mgd2l0aCBhIHJvb3QgYmxvY2sgYXQgJWRcbiIsIGNhcmQtPnBhcnRpdGlvbiwKKwkJY2FyZC0+dGVtcEEsIGNhcmQtPnRlbXBCKTsKKworCXBhcnRfY3VyID0gJmNhcmQtPnBhcnRzW2NhcmQtPnBhcnRpdGlvbl07CisJcGFydF9jdXItPnVzZXJfYmxvY2tzID0gY2FyZC0+dGVtcEE7CisJcGFydF9jdXItPnJvb3RfYmxvY2sgPSBjYXJkLT50ZW1wQjsKKwlwYXJ0X2N1ci0+bnVtYmxvY2tzID0gY2FyZC0+dGVtcEIgKyAxOworCXBhcnRfY3VyLT5uYW1lID0ga21hbGxvYygxMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJ0X2N1ci0+bmFtZSkKKwkJZ290byBmYWlsX25hbWU7CisKKwlzcHJpbnRmKHBhcnRfY3VyLT5uYW1lLCAidm11JWQuJWQuJWQiLAorCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBjYXJkLT5wYXJ0aXRpb24pOworCW10ZF9jdXIgPSAmY2FyZC0+bXRkW2NhcmQtPnBhcnRpdGlvbl07CisJbXRkX2N1ci0+bmFtZSA9IHBhcnRfY3VyLT5uYW1lOworCW10ZF9jdXItPnR5cGUgPSA4OworCW10ZF9jdXItPmZsYWdzID0gTVREX1dSSVRFQUJMRXxNVERfTk9fRVJBU0U7CisJbXRkX2N1ci0+c2l6ZSA9IHBhcnRfY3VyLT5udW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbjsKKwltdGRfY3VyLT5lcmFzZXNpemUgPSBjYXJkLT5ibG9ja2xlbjsKKwltdGRfY3VyLT53cml0ZSA9IHZtdV9mbGFzaF93cml0ZTsKKwltdGRfY3VyLT5yZWFkID0gdm11X2ZsYXNoX3JlYWQ7CisJbXRkX2N1ci0+c3luYyA9IHZtdV9mbGFzaF9zeW5jOworCW10ZF9jdXItPndyaXRlc2l6ZSA9IGNhcmQtPmJsb2NrbGVuOworCisJbXBhcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWRldl9wYXJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcGFydCkKKwkJZ290byBmYWlsX21wYXJ0OworCisJbXBhcnQtPm1kZXYgPSBtZGV2OworCW1wYXJ0LT5wYXJ0aXRpb24gPSBjYXJkLT5wYXJ0aXRpb247CisJbXRkX2N1ci0+cHJpdiA9IG1wYXJ0OworCW10ZF9jdXItPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlwY2FjaGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdm11X2NhY2hlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2FjaGUpCisJCWdvdG8gZmFpbF9jYWNoZV9jcmVhdGU7CisJcGFydF9jdXItPnBjYWNoZSA9IHBjYWNoZTsKKworCWVycm9yID0gYWRkX210ZF9kZXZpY2UobXRkX2N1cik7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfbXRkX3JlZ2lzdGVyOworCisJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCBOVUxMLCAwLAorCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCisJLyoKKwkqIFNldCB1cCBhIHJlY3Vyc2l2ZSBjYWxsIHRvIHRoZSAocHJvYmFibHkgdGhlb3JldGljYWwpCisJKiBzZWNvbmQgb3IgbW9yZSBwYXJ0aXRpb24KKwkqLworCWlmICgrK2NhcmQtPnBhcnRpdGlvbiA8IGNhcmQtPnBhcnRpdGlvbnMpIHsKKwkJcGFydG51bSA9IGNwdV90b19iZTMyKGNhcmQtPnBhcnRpdGlvbiA8PCAyNCk7CisJCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgdm11X3F1ZXJ5YmxvY2tzLCAwLAorCQkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKwkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCBNQVBMRV9GVU5DX01FTUNBUkQsCisJCQlNQVBMRV9DT01NQU5EX0dFVE1JTkZPLCAyLCAmcGFydG51bSk7CisJfQorCXJldHVybjsKKworZmFpbF9tdGRfcmVnaXN0ZXI6CisJZGV2X2VycigmbWRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIG1hcGxlIGRldmljZSBhdCAoJWQsICVkKSIKKwkJImVycm9yIGlzIDB4JVhcbiIsIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGVycm9yKTsKKwlmb3IgKGVycm9yID0gMDsgZXJyb3IgPD0gY2FyZC0+cGFydGl0aW9uOyBlcnJvcisrKSB7CisJCWtmcmVlKCgoY2FyZC0+cGFydHMpW2Vycm9yXSkucGNhY2hlKTsKKwkJKChjYXJkLT5wYXJ0cylbZXJyb3JdKS5wY2FjaGUgPSBOVUxMOworCX0KK2ZhaWxfY2FjaGVfY3JlYXRlOgorZmFpbF9tcGFydDoKKwlmb3IgKGVycm9yID0gMDsgZXJyb3IgPD0gY2FyZC0+cGFydGl0aW9uOyBlcnJvcisrKSB7CisJCWtmcmVlKCgoY2FyZC0+bXRkKVtlcnJvcl0pLnByaXYpOworCQkoKGNhcmQtPm10ZClbZXJyb3JdKS5wcml2ID0gTlVMTDsKKwl9CisJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCBOVUxMLCAwLAorCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCWtmcmVlKHBhcnRfY3VyLT5uYW1lKTsKK2ZhaWxfbmFtZToKKwlyZXR1cm47Cit9CisKKy8qIEhhbmRsZXMgdmVyeSBiYXNpYyBpbmZvIGFib3V0IHRoZSBmbGFzaCwgcXVlcmllcyBmb3IgZGV0YWlscyAqLworc3RhdGljIGludCBfX2RldmluaXQgdm11X2Nvbm5lY3Qoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKK3sKKwl1bnNpZ25lZCBsb25nIHRlc3RfZmxhc2hfZGF0YSwgYmFzaWNfZmxhc2hfZGF0YTsKKwlpbnQgYywgZXJyb3I7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJdTMyIHBhcnRudW0gPSAwOworCisJdGVzdF9mbGFzaF9kYXRhID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbik7CisJLyogTmVlZCB0byBjb3VudCBob3cgbWFueSBiaXRzIGFyZSBzZXQgLSB0byBmaW5kIG91dCB3aGljaAorCSAqIGZ1bmN0aW9uX2RhdGEgZWxlbWVudCBoYXMgZGV0YWlscyBvZiB0aGUgbWVtb3J5IGNhcmQ6CisJICogdXNpbmcgQnJpYW4gS2VybmlnaGFuJ3MvUGV0ZXIgV2VnbmVyJ3MgbWV0aG9kICovCisJZm9yIChjID0gMDsgdGVzdF9mbGFzaF9kYXRhOyBjKyspCisJCXRlc3RfZmxhc2hfZGF0YSAmPSB0ZXN0X2ZsYXNoX2RhdGEgLSAxOworCisJYmFzaWNfZmxhc2hfZGF0YSA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb25fZGF0YVtjIC0gMV0pOworCisJY2FyZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZW1jYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKSB7CisJCWVycm9yID0gRU5PTUVNOworCQlnb3RvIGZhaWxfbm9tZW07CisJfQorCisJY2FyZC0+cGFydGl0aW9ucyA9IChiYXNpY19mbGFzaF9kYXRhID4+IDI0ICYgMHhGRikgKyAxOworCWNhcmQtPmJsb2NrbGVuID0gKChiYXNpY19mbGFzaF9kYXRhID4+IDE2ICYgMHhGRikgKyAxKSA8PCA1OworCWNhcmQtPndyaXRlY250ID0gYmFzaWNfZmxhc2hfZGF0YSA+PiAxMiAmIDB4RjsKKwljYXJkLT5yZWFkY250ID0gYmFzaWNfZmxhc2hfZGF0YSA+PiA4ICYgMHhGOworCWNhcmQtPnJlbW92ZWFibGUgPSBiYXNpY19mbGFzaF9kYXRhID4+IDcgJiAxOworCisJY2FyZC0+cGFydGl0aW9uID0gMDsKKworCS8qCisJKiBOb3Qgc3VyZSB0aGVyZSBhcmUgYWN0dWFsbHkgYW55IG11bHRpLXBhcnRpdGlvbiBkZXZpY2VzIGluIHRoZQorCSogcmVhbCB3b3JsZCwgYnV0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGVtLCBzbywgc28gd2lsbCB3ZQorCSovCisJY2FyZC0+cGFydHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm11cGFydCkgKiBjYXJkLT5wYXJ0aXRpb25zLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPnBhcnRzKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX3BhcnRpdGlvbnM7CisJfQorCisJY2FyZC0+bXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSAqIGNhcmQtPnBhcnRpdGlvbnMsCisJCUdGUF9LRVJORUwpOworCWlmICghY2FyZC0+bXRkKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX210ZF9pbmZvOworCX0KKworCW1hcGxlX3NldF9kcnZkYXRhKG1kZXYsIGNhcmQpOworCisJLyoKKwkqIFdlIHdhbnQgdG8gdHJhcCBtZW1pbmZvIG5vdCBnZXQgY29uZAorCSogc28gc2V0IGludGVydmFsIHRvIHplcm8sIGJ1dCByZWx5IG9uIG1hcGxlIGJ1cworCSogZHJpdmVyIHRvIHBhc3MgYmFjayB0aGUgcmVzdWx0cyBvZiB0aGUgbWVtaW5mbworCSovCisJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCB2bXVfcXVlcnlibG9ja3MsIDAsCisJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGNsZWFyIHRvIGdvICovCisJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQlhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCwgSFopOworCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgIlZNVSBhdCAoJWQsICVkKSBpcyBidXN5XG4iLAorCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQkJZXJyb3IgPSAtRUFHQUlOOworCQkJZ290byBmYWlsX2RldmljZV9idXN5OworCQl9CisJfQorCisJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisKKwkvKgorCSogU2V0IHVwIHRoZSBtaW5mbyBjYWxsOiB2bXVfcXVlcnlibG9ja3Mgd2lsbCBoYW5kbGUKKwkqIHRoZSBpbmZvcm1hdGlvbiBwYXNzZWQgYmFjaworCSovCisJZXJyb3IgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJTUFQTEVfQ09NTUFORF9HRVRNSU5GTywgMiwgJnBhcnRudW0pOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZtZGV2LT5kZXYsICJDb3VsZCBub3QgbG9jayBWTVUgYXQgKCVkLCAlZCkiCisJCQkiIGVycm9yIGlzIDB4JVhcbiIsIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGVycm9yKTsKKwkJZ290byBmYWlsX210ZF9pbmZvOworCX0KKwlyZXR1cm4gMDsKKworZmFpbF9kZXZpY2VfYnVzeToKKwlrZnJlZShjYXJkLT5tdGQpOworZmFpbF9tdGRfaW5mbzoKKwlrZnJlZShjYXJkLT5wYXJ0cyk7CitmYWlsX3BhcnRpdGlvbnM6CisJa2ZyZWUoY2FyZCk7CitmYWlsX25vbWVtOgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHZtdV9kaXNjb25uZWN0KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCit7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJaW50IHg7CisKKwltZGV2LT5jYWxsYmFjayA9IE5VTEw7CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCWZvciAoeCA9IDA7IHggPCBjYXJkLT5wYXJ0aXRpb25zOyB4KyspIHsKKwkJbXBhcnQgPSAoKGNhcmQtPm10ZClbeF0pLnByaXY7CisJCW1wYXJ0LT5tZGV2ID0gTlVMTDsKKwkJZGVsX210ZF9kZXZpY2UoJigoY2FyZC0+bXRkKVt4XSkpOworCQlrZnJlZSgoKGNhcmQtPnBhcnRzKVt4XSkubmFtZSk7CisJfQorCWtmcmVlKGNhcmQtPnBhcnRzKTsKKwlrZnJlZShjYXJkLT5tdGQpOworCWtmcmVlKGNhcmQpOworfQorCisvKiBDYWxsYmFjayB0byBoYW5kbGUgZWNjZW50cmljaXRpZXMgb2YgYm90aCBtdGQgc3Vic3lzdGVtCisgKiBhbmQgZ2VuZXJhbCBmbGFreW5lc3Mgb2YgRHJlYW1jYXN0IFZNVXMKKyAqLworc3RhdGljIGludCB2bXVfY2FuX3VubG9hZChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCWludCB4OworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCWZvciAoeCA9IDA7IHggPCBjYXJkLT5wYXJ0aXRpb25zOyB4KyspIHsKKwkJbXRkID0gJigoY2FyZC0+bXRkKVt4XSk7CisJCWlmIChtdGQtPnVzZWNvdW50ID4gMCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBFUlJTVFIgIlZNVSBhdCAoJWQsICVkKSBmaWxlIGVycm9yIC0iCisKK3N0YXRpYyB2b2lkIHZtdV9maWxlX2Vycm9yKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHZvaWQgKnJlY3ZidWYpCit7CisJZW51bSBtYXBsZV9maWxlX2Vycm9ycyBlcnJvciA9ICgoaW50ICopcmVjdmJ1ZilbMV07CisKKwlzd2l0Y2ggKGVycm9yKSB7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfSU5WQUxJRF9QQVJUSVRJT046CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgaW52YWxpZCBwYXJ0aXRpb24gbnVtYmVyXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX1BIQVNFX0VSUk9SOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIHBoYXNlIGVycm9yXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBNQVBMRV9GSUxFRVJSX0lOVkFMSURfQkxPQ0s6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgaW52YWxpZCBibG9jayBudW1iZXJcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfV1JJVEVfRVJST1I6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgd3JpdGUgZXJyb3JcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfSU5WQUxJRF9XUklURV9MRU5HVEg6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgaW52YWxpZCB3cml0ZSBsZW5ndGhcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfQkFEX0NSQzoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBiYWQgQ1JDXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiAweCVYXG4iLAorCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgZXJyb3IpOworCX0KK30KKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9iZV9tYXBsZV92bXUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CisJc3RydWN0IG1hcGxlX2RyaXZlciAqbWRydiA9IHRvX21hcGxlX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwltZGV2LT5jYW5fdW5sb2FkID0gdm11X2Nhbl91bmxvYWQ7CisJbWRldi0+ZmlsZWVycl9oYW5kbGVyID0gdm11X2ZpbGVfZXJyb3I7CisJbWRldi0+ZHJpdmVyID0gbWRydjsKKworCWVycm9yID0gdm11X2Nvbm5lY3QobWRldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcmVtb3ZlX21hcGxlX3ZtdShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCisJdm11X2Rpc2Nvbm5lY3QobWRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIHZtdV9mbGFzaF9kcml2ZXIgPSB7CisJLmZ1bmN0aW9uID0JTUFQTEVfRlVOQ19NRU1DQVJELAorCS5kcnYgPSB7CisJCS5uYW1lID0JCSJEcmVhbWNhc3RfdmlzdWFsX21lbW9yeSIsCisJCS5wcm9iZSA9CXByb2JlX21hcGxlX3ZtdSwKKwkJLnJlbW92ZSA9IAlfX2RldmV4aXRfcChyZW1vdmVfbWFwbGVfdm11KSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdm11X2ZsYXNoX21hcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG1hcGxlX2RyaXZlcl9yZWdpc3Rlcigmdm11X2ZsYXNoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2bXVfZmxhc2hfbWFwX2V4aXQodm9pZCkKK3sKKwltYXBsZV9kcml2ZXJfdW5yZWdpc3Rlcigmdm11X2ZsYXNoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZtdV9mbGFzaF9tYXBfaW5pdCk7Cittb2R1bGVfZXhpdCh2bXVfZmxhc2hfbWFwX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZsYXNoIG1hcHBpbmcgZm9yIFNlZ2EgRHJlYW1jYXN0IHZpc3VhbCBtZW1vcnkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHN1cGVyLmMgYi9kcml2ZXJzL210ZC9tdGRzdXBlci5jCmluZGV4IDAwZDQ2ZTEuLjkyMjg1ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZHN1cGVyLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkc3VwZXIuYwpAQCAtODEsMTMgKzgxLDE2IEBACiAKIAkvKiBnbyAqLwogCXNiLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisKKwlyZXR1cm4gMDsKIAogCS8qIG5ldyBtb3VudHBvaW50IGZvciBhbiBhbHJlYWR5IG1vdW50ZWQgc3VwZXJibG9jayAqLwogYWxyZWFkeV9tb3VudGVkOgogCURFQlVHKDEsICJNVERTQjogRGV2aWNlICVkIChcIiVzXCIpIGlzIGFscmVhZHkgbW91bnRlZFxuIiwKIAkgICAgICBtdGQtPmluZGV4LCBtdGQtPm5hbWUpOwotCXJldCA9IHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldCA9IDA7CiAJZ290byBvdXRfcHV0OwogCiBvdXRfZXJyb3I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggOGIxMmU2ZS4uMmZmODg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtMjczLDcgKzI3Myw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9DUzU1M1gKIAl0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBDUzU1MzUvQ1M1NTM2IChBTUQgR2VvZGUgY29tcGFuaW9uIGNoaXApIgotCWRlcGVuZHMgb24gWDg2XzMyICYmIChYODZfUEMgfHwgWDg2X0dFTkVSSUNBUkNIKQorCWRlcGVuZHMgb24gWDg2XzMyCiAJaGVscAogCSAgVGhlIENTNTUzeCBjb21wYW5pb24gY2hpcHMgZm9yIHRoZSBBTUQgR2VvZGUgcHJvY2Vzc29yCiAJICBpbmNsdWRlIE5BTkQgZmxhc2ggY29udHJvbGxlcnMgd2l0aCBidWlsdC1pbiBoYXJkd2FyZSBFQ0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYwppbmRleCBmYTEyOWMwLi4xMDA4MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NteDI3MF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KIAogI2RlZmluZSBHUElPX05BTkRfQ1MJKDExKQogI2RlZmluZSBHUElPX05BTkRfUkIJKDg5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwppbmRleCBjZWQxNGI1Li43MjQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwpAQCAtMTI4LDExICsxMjgsMTEgQEAKICAqIFRoZSBiaW5kaW5nIHRvIHRoZSBtdGQgYW5kIGFsbCBhbGxvY2F0ZWQKICAqIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBleGNpdGVfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHVubGlrZWx5KCF0aGlzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgJXMgd2l0aG91dCBwcml2YXRlIGRhdGEhISIsCkBAIC0xNTksOSArMTU5LDggQEAKICAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQogICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzLgogKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqZHJ2ZGF0YTsJLyogcHJpdmF0ZSBkcml2ZXIgZGF0YSAqLwogCXN0cnVjdCBuYW5kX2NoaXAgKmJvYXJkX2NoaXA7CS8qIHByaXZhdGUgZmxhc2ggY2hpcCBkYXRhICovCiAJc3RydWN0IG10ZF9pbmZvICpib2FyZF9tdGQ7CS8qIG10ZCBpbmZvIGZvciB0aGlzIGJvYXJkICovCkBAIC0xNzUsNyArMTc0LDcgQEAKIAl9CiAKIAkvKiBiaW5kIHByaXZhdGUgZGF0YSBpbnRvIGRyaXZlciAqLwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwogCiAJLyogYWxsb2NhdGUgYW5kIG1hcCB0aGUgcmVzb3VyY2UgKi8KIAlkcnZkYXRhLT5yZWdzID0KQEAgLTIxOSwyMyArMjE4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZXhjaXRlX25hbmQiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZXhjaXRlX25hbmQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUgPSBleGNpdGVfbmFuZF9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9pbml0KHZvaWQpCiB7CiAJcHJfaW5mbygiQmFzbGVyIGVYY2l0ZSBuYW5kIGZsYXNoIGRyaXZlciBWZXJzaW9uICIKIAkJRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4Y2l0ZV9uYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZXhjaXRlX25hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKaW5kZXggMjFmZDRmMS4uYmFkMDQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJdGhpcy0+cmVhZF9idWYgPSBteGNfbmFuZF9yZWFkX2J1ZjsKIAl0aGlzLT52ZXJpZnlfYnVmID0gbXhjX25hbmRfdmVyaWZ5X2J1ZjsKIAotCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5mY19jbGsiKTsKKwlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJuZmMiKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpCiAJCWdvdG8gZWNsazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwppbmRleCA1ODJjZjgwLi44OWJmODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJbmRmYy0+bXRkLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzLiVzIiwKLQkJCQkgICBuZGZjLT5vZmRldi0+ZGV2LmJ1c19pZCwgZmxhc2hfbnAtPm5hbWUpOworCQkJZGV2X25hbWUoJm5kZmMtPm9mZGV2LT5kZXYpLCBmbGFzaF9ucC0+bmFtZSk7CiAJaWYgKCFuZGZjLT5tdGQubmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwppbmRleCBjYzU1Y2JjLi42MWI2OWNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEzeHhfbmFuZC5oPgogCiAjZGVmaW5lCUNISVBfREVMQVlfVElNRU9VVAkoMiAqIEhaLzEwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwppbmRleCA1YjY5ZTc3Li4zYTQ5NmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwpAQCAtMzYsMTAgKzM2LDkgQEAKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwCW9uZW5hbmQ7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX29uZW5hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtNDksNyArNDgsNyBAQAogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBkZXYtPmRyaXZlci0+bmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X2ZyZWVfaW5mbzsKIAl9CkBAIC04Miw3ICs4MSw3IEBACiAjZW5kaWYKIAkJZXJyID0gYWRkX210ZF9kZXZpY2UoJmluZm8tPm10ZCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtOTYsMTQgKzk1LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ2VuZXJpY19vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBnZW5lcmljX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5wYXJ0cykKQEAgLTEyMCw5ICsxMTgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGdlbmVyaWNfb25lbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZW5lcmljX29uZW5hbmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gZ2VuZXJpY19vbmVuYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ2VuZXJpY19vbmVuYW5kX3JlbW92ZSksCiB9OwpAQCAtMTMxLDEyICsxMzEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19vbmVuYW5kX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdlbmVyaWNfb25lbmFuZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZ2VuZXJpY19vbmVuYW5kX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuYyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKaW5kZXggM2QxMzE4YS4uMWM1MzQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC0xOTcsNiArMTk3LDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbF9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbDFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVsX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICoJZWwxX3Byb2JlMToKICAqCUBkZXY6IFRoZSBkZXZpY2Ugc3RydWN0dXJlIHRvIHVzZQpAQCAtMzA1LDEyICszMTYsOCBAQAogCSAqCVRoZSBFTDEtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KIAkgKi8KIAotCWRldi0+b3BlbiA9ICZlbF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmVsX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmVsX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwotCWRldi0+c3RvcCA9ICZlbDFfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDMuYyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKaW5kZXggNWI5MWE4NS4uNGYwOGJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDMuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMy5jCkBAIC0zNTMsOSArMzUzLDYgQEAKIAogICAgIGRldi0+bmV0ZGV2X29wcyA9ICZlbDJfbmV0ZGV2X29wczsKICAgICBkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlwX3BvbGw7Ci0jZW5kaWYKIAogICAgIHJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogICAgIGlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNS5jIGIvZHJpdmVycy9uZXQvM2M1MDUuYwppbmRleCBhODEwN2Y5Li4yZGUxYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKQEAgLTEzNTQsNiArMTM1NCwxNyBAQAogCXJldHVybiAwOwkJLyogQmVjYXVzZSBvZiB0aGlzLCB0aGUgbGF5ZXIgYWJvdmUgd2lsbCByZXR1cm4gLUVOT0RFViAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVscF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbHBfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWxwX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzIAkJPSBlbHBfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbHBfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWxwX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlbHBfc2V0X21jX2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNTU4LDEzICsxNTY5LDggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRhcHRlciBjb25maWd1cmF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKLQlkZXYtPm9wZW4gPSBlbHBfb3BlbjsJCQkJLyogbG9jYWwgKi8KLQlkZXYtPnN0b3AgPSBlbHBfY2xvc2U7CQkJCS8qIGxvY2FsICovCi0JZGV2LT5nZXRfc3RhdHMgPSBlbHBfZ2V0X3N0YXRzOwkJCS8qIGxvY2FsICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlbHBfc3RhcnRfeG1pdDsJCS8qIGxvY2FsICovCi0JZGV2LT50eF90aW1lb3V0ID0gZWxwX3RpbWVvdXQ7CQkJLyogbG9jYWwgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmZWxwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZWxwX3NldF9tY19saXN0OwkvKiBsb2NhbCAqLwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwkJLyogbG9jYWwgKi8KIAogCWRldi0+bWVtX3N0YXJ0ID0gZGV2LT5tZW1fZW5kID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA3LmMgYi9kcml2ZXJzL25ldC8zYzUwNy5jCmluZGV4IDQyM2U2NWQuLmZiYmFmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDcuYwpAQCAtMzUyLDYgKzM1MiwxNiBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZWwxNl9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbDE2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbDE2X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDE2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGVsMTZfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5pdF9JRF9kb25lLCB2ZXJzaW9uX3ByaW50ZWQ7CkBAIC00NDksMTAgKzQ1OSw3IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLSAJZGV2LT5vcGVuID0gZWwxNl9vcGVuOwotIAlkZXYtPnN0b3AgPSBlbDE2X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZWwxNl9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDE2X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAgCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CS8qIE11bHRpY2FzdCBkb2Vzbid0IHdvcmsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IDhjNjk0MjEuLmZiYjM3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtNTM3LDYgKzUzNywyMSBAQAogc3RhdGljIGludCBtY2FfcmVnaXN0ZXJlZDsKICNlbmRpZiAvKiBDT05GSUdfTUNBICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcAkgCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cyAJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWwzX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01NTMsMTYgKzU2OCw4IEBACiAJfQogCiAJLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlbDNfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggMzlhYzEyMi4uMTY3YmYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC01NjMsNiArNTYzLDIwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjb3Jrc2NyZXdfb3BlbiwKKwkubmRvX3N0b3AJCT0gY29ya3NjcmV3X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjb3Jrc2NyZXdfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gY29ya3NjcmV3X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gY29ya3NjcmV3X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCisKIHN0YXRpYyBpbnQgY29ya3NjcmV3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIsCiAJCQkgICAgc3RydWN0IHBucF9kZXYgKmlkZXYsIGludCBjYXJkX251bWJlcikKIHsKQEAgLTY4MSwxMyArNjk1LDggQEAKIAl2cC0+ZnVsbF9idXNfbWFzdGVyX3J4ID0gKHZwLT5jYXBhYmlsaXRpZXMgJiAweDIwKSA/IDEgOiAwOwogCiAJLyogVGhlIDNjNTF4LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmNvcmtzY3Jld19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmNvcmtzY3Jld19zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZjb3Jrc2NyZXdfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKDQwMCAqIEhaKSAvIDEwMDA7Ci0JZGV2LT5zdG9wID0gJmNvcmtzY3Jld19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9ICZjb3Jrc2NyZXdfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggZmY0MWUxZi4uOGY3MzRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC00MDMsNiArNDAzLDIwIEBACiAJcmV0dXJuIGxlbjsKIH0JCQkJLyogZWxtY19nZXRpbmZvKCkgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWxtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBlbG1jX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsbWNfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbG1jX3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dAkJPSBlbG1jX3RpbWVvdXQsCisjaWZkZWYgRUxNQ19NVUxUSUNBU1QKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKyNlbmRpZgorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgX19pbml0IGRvX2VsbWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTU0NCwxNyArNTU4LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZHdhcmUgYWRkcmVzcyAlcE1cbiIsCiAJICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAKLQlkZXYtPm9wZW4gPSAmZWxtY19vcGVuOwotCWRldi0+c3RvcCA9ICZlbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmVsbWNfZ2V0X3N0YXRzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsbWNfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmVsbWNfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7Ci0jaWZkZWYgRUxNQ19NVUxUSUNBU1QKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0jZWxzZQotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLSNlbmRpZgogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCiAJLyogbm90ZSB0aGF0IHdlIGhhdmVuJ3QgYWN0dWFsbHkgcmVxdWVzdGVkIHRoZSBJUlEgZnJvbSB0aGUga2VybmVsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjcuYyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKaW5kZXggMmRmM2FmMy4uYjYxMDczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuYworKysgYi9kcml2ZXJzL25ldC8zYzUyNy5jCkBAIC0yODgsNiArMjg4LDE4IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbWMzMl9vcGVuLAorCS5uZG9fc3RvcAkJPSBtYzMyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtYzMyX3NlbmRfcGFja2V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG1jMzJfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbWMzMl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG1jMzJfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiBtYzMyX3Byb2JlMQktCUNoZWNrIGEgZ2l2ZW4gc2xvdCBmb3IgYSBib2FyZCBhbmQgdGVzdCB0aGUgY2FyZAogICogQGRldjogIERldmljZSBzdHJ1Y3R1cmUgdG8gZmlsbCBpbgpAQCAtNTE4LDEyICs1MzAsNyBAQAogCXByaW50aygiJXM6IEZpcm13YXJlIFJldiAlZC4gJWQgUlggYnVmZmVycywgJWQgVFggYnVmZmVycy4gQmFzZSBvZiAweCUwOFguXG4iLAogCQlkZXYtPm5hbWUsIGxwLT5leGVjX2JveC0+ZGF0YVsxMl0sIGxwLT5yeF9sZW4sIGxwLT50eF9sZW4sIGxwLT5iYXNlKTsKIAotCWRldi0+b3BlbgkJPSBtYzMyX29wZW47Ci0JZGV2LT5zdG9wCQk9IG1jMzJfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBtYzMyX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzCQk9IG1jMzJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbWMzMl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG1jMzJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaKjU7CS8qIEJvYXJkIGRvZXMgYWxsIHRoZSB3b3JrICovCiAJZGV2LT5ldGh0b29sX29wcwk9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IGNkYmJiNjIuLmM1NjY5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMTAyLDggKzEwMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1EUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlEUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIDNjNTl4LzNjOXh4IGV0aGVybmV0IGRyaXZlciAiKTsKQEAgLTk5Miw2ICs5OTIsNDIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9vbXJhbmdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdm9ydGV4X29wZW4sCisJLm5kb19zdG9wCQk9IHZvcnRleF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYm9vbWVyYW5nX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHZvcnRleF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHZvcnRleF9nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX1BDSQorCS5uZG9fZG9faW9jdGwgCQk9IHZvcnRleF9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF92b3J0ZXgsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm9ydGV4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZvcnRleF9vcGVuLAorCS5uZG9fc3RvcAkJPSB2b3J0ZXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHZvcnRleF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB2b3J0ZXhfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSB2b3J0ZXhfZ2V0X3N0YXRzLAorI2lmZGVmIENPTkZJR19QQ0kKKwkubmRvX2RvX2lvY3RsIAkJPSB2b3J0ZXhfaW9jdGwsCisjZW5kaWYKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfdm9ydGV4LAorI2VuZGlmCit9OworCiAvKgogICogU3RhcnQgdXAgdGhlIFBDSS9FSVNBIGRldmljZSB3aGljaCBpcyBkZXNjcmliZWQgYnkgKmdlbmRldi4KICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MuCkBAIC0xMzY2LDE4ICsxNDAyLDE2IEBACiAJfQogCiAJLyogVGhlIDNjNTl4LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gdm9ydGV4X29wZW47CiAJaWYgKHZwLT5mdWxsX2J1c19tYXN0ZXJfdHgpIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBib29tZXJhbmdfc3RhcnRfeG1pdDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmJvb21yYW5nX25ldGRldl9vcHM7CiAJCS8qIEFjdHVhbGx5LCBpdCBzdGlsbCBzaG91bGQgd29yayB3aXRoIGlvbW11LiAqLwogCQlpZiAoY2FyZF9pZHggPCBNQVhfVU5JVFMgJiYKIAkJICAgICgoaHdfY2hlY2tzdW1zW2NhcmRfaWR4XSA9PSAtMSAmJiAodnAtPmRydl9mbGFncyAmIEhBU19IV0NLU00pKSB8fAogCQkJCWh3X2NoZWNrc3Vtc1tjYXJkX2lkeF0gPT0gMSkpIHsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKIAkJfQotCX0gZWxzZSB7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdm9ydGV4X3N0YXJ0X3htaXQ7Ci0JfQorCX0gZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAgJnZvcnRleF9uZXRkZXZfb3BzOwogCiAJaWYgKHByaW50X2luZm8pIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNjYXR0ZXIvZ2F0aGVyICVzYWJsZWQuIGgvdyBjaGVja3N1bXMgJXNhYmxlZFxuIiwKQEAgLTEzODYsMTggKzE0MjAsOSBAQAogCQkJCShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSA/ICJlbiI6ImRpcyIpOwogCX0KIAotCWRldi0+c3RvcCA9IHZvcnRleF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IHZvcnRleF9nZXRfc3RhdHM7Ci0jaWZkZWYgQ09ORklHX1BDSQotCWRldi0+ZG9faW9jdGwgPSB2b3J0ZXhfaW9jdGw7Ci0jZW5kaWYKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZvcnRleF9ldGh0b29sX29wczsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlOwotCWRldi0+dHhfdGltZW91dCA9IHZvcnRleF90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAod2F0Y2hkb2cgKiBIWikgLyAxMDAwOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBwb2xsX3ZvcnRleDsKLSNlbmRpZgorCiAJaWYgKHBkZXYpIHsKIAkJdnAtPnBtX3N0YXRlX3ZhbGlkID0gMTsKICAJCXBjaV9zYXZlX3N0YXRlKFZPUlRFWF9QQ0kodnApKTsKQEAgLTI4ODMsNyArMjkwOCw3IEBACiAJCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoVk9SVEVYX1BDSSh2cCkpKTsKIAl9IGVsc2UgewogCQlpZiAoVk9SVEVYX0VJU0EodnApKQotCQkJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgZGV2X25hbWUodnAtPmdlbmRldikpOworCQkJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSh2cC0+Z2VuZGV2KSk7CiAJCWVsc2UKIAkJCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJFSVNBIDB4JWx4ICVkIiwKIAkJCQkJZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggNGUxOWFlMy4uYTA5ZTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCQljcHcxNl9mKEludHJNYXNrLCBjcF9pbnRyX21hc2spOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJfQogCkBAIC02NDEsOSArNjQxLDkgQEAKIAl9CiAKIAlpZiAoc3RhdHVzICYgKFJ4T0sgfCBSeEVyciB8IFJ4RW1wdHkgfCBSeEZJRk9PdnIpKQotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmY3AtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmNwLT5uYXBpKSkgewogCQkJY3B3MTZfZihJbnRyTWFzaywgY3Bfbm9yeF9pbnRyX21hc2spOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmY3AtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZjcC0+bmFwaSk7CiAJCX0KIAogCWlmIChzdGF0dXMgJiAoVHhPSyB8IFR4RXJyIHwgVHhFbXB0eSB8IFNXSW50KSkKQEAgLTE2MDIsNiArMTYwMiwyOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjcF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJmNwLT5sb2NrKTsKKworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJY3B3MzJfZihNQUMwICsgMCwgbGUzMl90b19jcHUgKCooX19sZTMyICopIChkZXYtPmRldl9hZGRyICsgMCkpKTsKKwljcHczMl9mKE1BQzAgKyA0LCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCisJc3Bpbl91bmxvY2tfaXJxKCZjcC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLwogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KQEAgLTE4MjEsNyArMTg0Myw3IEBACiAJLm5kb19vcGVuCQk9IGNwX29wZW4sCiAJLm5kb19zdG9wCQk9IGNwX2Nsb3NlLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBjcF9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBjcF9zZXRfcnhfbW9kZSwKIAkubmRvX2dldF9zdGF0cwkJPSBjcF9nZXRfc3RhdHMsCiAJLm5kb19kb19pb2N0bAkJPSBjcF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwppbmRleCBhNWIyNDIwLi4yOWRmMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5dG9vLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCkBAIC02NDAsNiArNjQwLDcgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CiBzdGF0aWMgaW50IHJ0bDgxMzlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIGlycXJldHVybl90IHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCBydGw4MTM5X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTkxNyw3ICs5MTgsNyBAQAogCS5uZG9fc3RvcAkJPSBydGw4MTM5X2Nsb3NlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IHJ0bDgxMzlfZ2V0X3N0YXRzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODEzOV9zdGFydF94bWl0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcnRsODEzOV9zZXRfcnhfbW9kZSwKIAkubmRvX2RvX2lvY3RsCQk9IG5ldGRldl9pb2N0bCwKQEAgLTIxMjgsNyArMjEyOSw3IEBACiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAkJUlRMX1cxNl9GKEludHJNYXNrLCBydGw4MTM5X2ludHJfbWFzayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2soJnRwLT5yeF9sb2NrKTsKQEAgLTIxNzgsOSArMjE3OSw5IEBACiAJLyogUmVjZWl2ZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYnkgcG9sbCByb3V0aW5lLgogCSAgIElmIG5vdCBydW5uaW5nIHN0YXJ0IGl0IG5vdy4gKi8KIAlpZiAoc3RhdHVzICYgUnhBY2tCaXRzKXsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKIAkJCVJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJCX0KIAl9CiAKQEAgLTIyMTUsNiArMjIxNiwyOSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKKworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7CisJUlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisKKwlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODI1OTYuYyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKaW5kZXggYjI3MzU5Ni4uY2NhOTRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODI1OTYuYworKysgYi9kcml2ZXJzL25ldC84MjU5Ni5jCkBAIC0xMTIyLDYgKzExMjIsMTcgQEAKIHN0YXRpYyBpbnQgaW8gPSAweDMwMDsKIHN0YXRpYyBpbnQgaXJxID0gMTA7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTU5Nl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaTU5Nl9vcGVuLAorCS5uZG9fc3RvcAkJPSBpNTk2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpNTk2X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGk1OTZfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgaTgyNTk2X3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMjMyLDExICsxMjQzLDcgQEAKIAlERUIoREVCX1BST0JFLHByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbikpOwogCiAJLyogVGhlIDgyNTk2LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gaTU5Nl9vcGVuOwotCWRldi0+c3RvcCA9IGk1OTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpNTk2X3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gaTU5Nl90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpNTk2X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAlkZXYtPm1sX3ByaXYgPSAodm9pZCAqKShkZXYtPm1lbV9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA2MmQ3MzJhLi5mMDYyYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI2LDYgKzI2LDE1IEBACiAjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuCiBpZiBORVRERVZJQ0VTCiAKK2NvbmZpZyBDT01QQVRfTkVUX0RFVl9PUFMKKyAgICAgICBkZWZhdWx0IHkKKyAgICAgICBib29sICJFbmFibGUgb2xkZXIgbmV0d29yayBkZXZpY2UgQVBJIGNvbXBhdGlhYmxpdHkiCisgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMga2VybmVsIGNvbXBhdGlhYmlsaXR5IHdpdGggb2xkZXIgbmV0d29yayBkZXZpY2VzCisgICAgICAgICAgdGhhdCBkbyBub3QgdXNlIG5ldF9kZXZpY2Vfb3BzIGludGVyZmFjZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIElGQgogCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUX0NMU19BQ1QKQEAgLTk2Myw2ICs5NzIsMTQgQEAKIAkgIEVuYWJsZSB0aGUgdmVyaWZ5IGFmdGVyIHRoZSBidWZmZXIgd3JpdGUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBFVEhPQworCXRyaXN0YXRlICJPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQKKwlzZWxlY3QgTUlJCisJc2VsZWN0IFBIWUxJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDLgorCiBjb25maWcgU01DOTExWAogCXRyaXN0YXRlICJTTVNDIExBTjkxMVs1Njc4XSBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgpAQCAtMTg0MCwxMCArMTg1NywxMCBAQAogCiBjb25maWcgRkVDCiAJYm9vbCAiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIENQVXMpIgotCWRlcGVuZHMgb24gTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMngKKwlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IE1BQ0hfTVgyNwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBidWlsdC1pbiAxMC8xMDAgRmFzdCBldGhlcm5ldAotCSAgY29udHJvbGxlciBvbiBzb21lIE1vdG9yb2xhIENvbGRGaXJlIHByb2Nlc3NvcnMuCisJICBjb250cm9sbGVyIG9uIHNvbWUgTW90b3JvbGEgQ29sZEZpcmUgYW5kIEZyZWVzY2FsZSBpLk1YIHByb2Nlc3NvcnMuCiAKIGNvbmZpZyBGRUMyCiAJYm9vbCAiU2Vjb25kIEZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvbiBzb21lIENvbGRGaXJlIENQVXMpIgpAQCAtMjAzMCwxNSArMjA0Nyw2IEBACiAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBpZ2IuCiAKLWNvbmZpZyBJR0JfTFJPIAotCWJvb2wgIlVzZSBzb2Z0d2FyZSBMUk8iCi0JZGVwZW5kcyBvbiBJR0IgJiYgSU5FVAotCXNlbGVjdCBJTkVUX0xSTwotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGxhcmdlIHJlY2VpdmUgb2ZmbG9hZC4gCi0KLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQogY29uZmlnIElHQl9EQ0EKIAlib29sICJEaXJlY3QgQ2FjaGUgQWNjZXNzIChEQ0EpIFN1cHBvcnQiCiAJZGVmYXVsdCB5CkBAIC0yMjg0LDkgKzIyOTIsMTcgQEAKIAogICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBGU0xfUFFfTURJTworCXRyaXN0YXRlICJGcmVlc2NhbGUgUFEgTURJTyIKKwlkZXBlbmRzIG9uIEZTTF9TT0MKKwlzZWxlY3QgUEhZTElCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gYnVzIHVzZWQgYnkgdGhlIGdpYW5mYXIgYW5kIFVDQyBkcml2ZXJzLgorCiBjb25maWcgR0lBTkZBUgogCXRyaXN0YXRlICJHaWFuZmFyIEV0aGVybmV0IgogCWRlcGVuZHMgb24gRlNMX1NPQworCXNlbGVjdCBGU0xfUFFfTURJTwogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCkBAIC0yMjk2LDYgKzIzMTIsNyBAQAogY29uZmlnIFVDQ19HRVRICiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBRRSBHaWdhYml0IEV0aGVybmV0IgogCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCisJc2VsZWN0IEZTTF9QUV9NRElPCiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgdGhlIFFVSUNDIEVuZ2luZSwKQEAgLTIzMTIsNiArMjMyOSw3IEBACiBjb25maWcgTVY2NDNYWF9FVEgKIAl0cmlzdGF0ZSAiTWFydmVsbCBEaXNjb3ZlcnkgKDY0M1hYKSBhbmQgT3Jpb24gZXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1WNjQzNjAgfHwgTVY2NFg2MCB8fCAoUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIpIHx8IFBMQVRfT1JJT04KKwlzZWxlY3QgSU5FVF9MUk8KIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGUKQEAgLTI0MzAsNyArMjQ0OCw2IEBACiAJdHJpc3RhdGUgIkNoZWxzaW8gQ29tbXVuaWNhdGlvbnMgVDMgMTBHYiBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ0hFTFNJT19UM19ERVBFTkRTCiAJc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBJTkVUX0xSTwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIENoZWxzaW8gVDMtYmFzZWQgZ2lnYWJpdCBhbmQgMTBHYiBFdGhlcm5ldAogCSAgYWRhcHRlcnMuCkBAIC0yNDY2LDcgKzI0ODMsNiBAQAogY29uZmlnIElYR0JFCiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAotCXNlbGVjdCBJTkVUX0xSTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZgogCSAgYWRhcHRlcnMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCA0NzFiYWFmLi45ODQwOWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMjYsMTEgKzI2LDEyIEBACiAKIGdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFwKIAkJZ2lhbmZhcl9ldGh0b29sLm8gXAotCQlnaWFuZmFyX21paS5vIFwKIAkJZ2lhbmZhcl9zeXNmcy5vCiAKIG9iai0kKENPTkZJR19VQ0NfR0VUSCkgKz0gdWNjX2dldGhfZHJpdmVyLm8KLXVjY19nZXRoX2RyaXZlci1vYmpzIDo9IHVjY19nZXRoLm8gdWNjX2dldGhfbWlpLm8gdWNjX2dldGhfZXRodG9vbC5vCit1Y2NfZ2V0aF9kcml2ZXItb2JqcyA6PSB1Y2NfZ2V0aC5vIHVjY19nZXRoX2V0aHRvb2wubworCitvYmotJChDT05GSUdfRlNMX1BRX01ESU8pICs9IGZzbF9wcV9tZGlvLm8KIAogIwogIyBsaW5rIG9yZGVyIGltcG9ydGFudCBoZXJlCkBAIC0yMjksNiArMjMwLDcgQEAKIHBhc2VtaV9tYWNfZHJpdmVyLW9ianMgOj0gcGFzZW1pX21hYy5vIHBhc2VtaV9tYWNfZXRodG9vbC5vCiBvYmotJChDT05GSUdfTUxYNF9DT1JFKSArPSBtbHg0Lwogb2JqLSQoQ09ORklHX0VOQzI4SjYwKSArPSBlbmMyOGo2MC5vCitvYmotJChDT05GSUdfRVRIT0MpICs9IGV0aG9jLm8KIAogb2JqLSQoQ09ORklHX1hURU5TQV9YVDIwMDBfU09OSUMpICs9IHh0c29uaWMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hMjA2NS5jIGIvZHJpdmVycy9uZXQvYTIwNjUuYwppbmRleCA3YTYwYmRkLi5kMGQwYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hMjA2NS5jCisrKyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKQEAgLTU1MiwxOCArNTUyLDEzIEBACiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfcmVncyAqbGwgPSBscC0+bGw7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7Ci0JaW50IGVudHJ5LCBza2JsZW4sIGxlbjsKKwlpbnQgZW50cnksIHNrYmxlbjsKIAlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2tibGVuID0gc2tiLT5sZW47Ci0JbGVuID0gc2tibGVuOwotCi0JaWYgKGxlbiA8IEVUSF9aTEVOKSB7Ci0JCWxlbiA9IEVUSF9aTEVOOwotCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCXJldHVybiAwOworCXNrYmxlbiA9IG1heF90KHVuc2lnbmVkLCBza2ItPmxlbiwgRVRIX1pMRU4pOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC01ODYsMTUgKzU4MSwxMSBAQAogCX0KICNlbmRpZgogCWVudHJ5ID0gbHAtPnR4X25ldyAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwotCWliLT5idHhfcmluZyBbZW50cnldLmxlbmd0aCA9ICgtbGVuKSB8IDB4ZjAwMDsKKwlpYi0+YnR4X3JpbmcgW2VudHJ5XS5sZW5ndGggPSAoLXNrYmxlbikgfCAweGYwMDA7CiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0ubWlzYyA9IDA7CiAKIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgKHZvaWQgKikmaWItPnR4X2J1ZiBbZW50cnldWzBdLCBza2JsZW4pOwogCi0JLyogQ2xlYXIgdGhlIHNsYWNrIG9mIHRoZSBwYWNrZXQsIGRvIEkgbmVlZCB0aGlzPyAqLwotCWlmIChsZW4gIT0gc2tibGVuKQotCQltZW1zZXQgKCh2b2lkICopICZpYi0+dHhfYnVmIFtlbnRyeV1bc2tibGVuXSwgMCwgbGVuIC0gc2tibGVuKTsKLQogCS8qIE5vdywgZ2l2ZSB0aGUgcGFja2V0IHRvIHRoZSBsYW5jZSAqLwogCWliLT5idHhfcmluZyBbZW50cnldLnRtZDFfYml0cyA9IChMRV9UMV9QT0t8TEVfVDFfT1dOKTsKIAlscC0+dHhfbmV3ID0gKGxwLT50eF9uZXcrMSkgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjMzIwMC5jIGIvZHJpdmVycy9uZXQvYWMzMjAwLmMKaW5kZXggMDcxYTg1MS4uZWFjNzMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWMzMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvYWMzMjAwLmMKQEAgLTE0Myw2ICsxNDMsMjIgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFjX29wZW4sCisJLm5kb19zdG9wIAkJPSBhY19jbG9zZV9jYXJkLAorCisJLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFjX3Byb2JlMShpbnQgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpLCByZXR2YWw7CkBAIC0yNTMsMTEgKzI2OSw3IEBACiAJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZhY19ibG9ja19vdXRwdXQ7CiAJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZhY19nZXRfODM5MF9oZHI7CiAKLQlkZXYtPm9wZW4gPSAmYWNfb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWNfY2xvc2VfY2FyZDsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKLSNlbmRpZgorCWRldi0+bmV0ZGV2X29wcyA9ICZhY19uZXRkZXZfb3BzOwogCU5TODM5MF9pbml0KGRldiwgMCk7CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggOTU4OWQ2MjAuLjA2YTlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC00MzcsNyArNDM3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHhfcmF0aW8sICJBY2VOSUMvM0M5ODUvR0E2MjAgcmF0aW8gb2YgTklDIG1lbW9yeSB1c2VkIGZvciBUWC9SWCBkZXNjcmlwdG9ycyAocmFuZ2UgMC02MykiKTsKIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICAiYWNlbmljLmM6IHYwLjkyIDA4LzA1LzIwMDIgIEplcyBTb3JlbnNlbiwgbGludXgtYWNlbmljQFN1blNJVEUuZGtcbiIKICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vaG9tZS5jZXJuLmNoL35qZXMvZ2lnZS9hY2VuaWMuaHRtbFxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggNzcwOTk5Mi4uY2I5Yzk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlpZiAocnhfcGt0X2xpbWl0ID4gMCkgewogCQkvKiBSZWNlaXZlIGRlc2NyaXB0b3IgaXMgZW1wdHkgbm93ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXdyaXRlbChWQUwwfFJJTlRFTjAsIG1taW8gKyBJTlRFTjApOwogCQl3cml0ZWwoVkFMMiB8IFJETUQwLCBtbWlvICsgQ01EMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC0xMTcwLDExICsxMTcwLDExIEBACiAKIAkvKiBDaGVjayBpZiBSZWNlaXZlIEludGVycnVwdCBoYXMgb2NjdXJyZWQuICovCiAJaWYgKGludHIwICYgUklOVDApIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKIAkJCS8qIERpc2FibGUgcmVjZWl2ZSBpbnRlcnVwdHMgKi8KIAkJCXdyaXRlbChSSU5URU4wLCBtbWlvICsgSU5URU4wKTsKIAkJCS8qIFNjaGVkdWxlIGEgcG9sbGluZyByb3V0aW5lICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJfSBlbHNlIGlmIChpbnRyZW4wICYgUklOVEVOMCkgewogCQkJcHJpbnRrKCIqKioqKioqKioqKipEcml2ZXIgYnVnISBcCiAJCQkJaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKaW5kZXggNTQ4MTlhMy4uN2Y4MzI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCkBAIC0xNzEsNyArMTcxLDYgQEAKIAogc3RydWN0IGNvcHNfbG9jYWwKIHsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgICAgIGludCBib2FyZDsJCQkvKiBIb2xkcyB3aGF0IGJvYXJkIHR5cGUgaXMuICovCiAJaW50IG5vZGVpZDsJCQkvKiBTZXQgdG8gMSBvbmNlIGhhdmUgbm9kZWlkLiAqLwogICAgICAgICB1bnNpZ25lZCBjaGFyIG5vZGVfYWNxdWlyZTsJLyogTm9kZSBJRCB3aGVuIGFjcXVpcmVkLiAqLwpAQCAtMTk3LDcgKzE5Niw2IEBACiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3QgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgY29wc19pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiBzdGF0aWMgaW50ICBjb3BzX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY29wc19nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgdm9pZCBjbGVhbnVwX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI2MCw2ICsyNTgsMTUgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNvcHNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGNvcHNfb3BlbiwKKyAgICAgICAgLm5kb19zdG9wICAgICAgICAgICAgICAgPSBjb3BzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgIAk9IGNvcHNfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IGNvcHNfdGltZW91dCwKKyAgICAgICAgLm5kb19kb19pb2N0bCAgICAgICAgICAgPSBjb3BzX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogLyoKICAqICAgICAgVGhpcyBpcyB0aGUgcmVhbCBwcm9iZSByb3V0aW5lLiBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICogICAgICBwcm9iZXMgb24gdGhlIElTQSBidXMuIEEgZ29vZCBkZXZpY2UgcHJvYmVzIGF2b2lkcyBkb2luZyB3cml0ZXMsIGFuZApAQCAtMzMzLDE2ICszNDAsOSBAQAogCS8qIENvcHkgbG9jYWwgYm9hcmQgdmFyaWFibGUgdG8gbHAgc3RydWN0LiAqLwogCWxwLT5ib2FyZCAgICAgICAgICAgICAgID0gYm9hcmQ7CiAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IGNvcHNfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IGNvcHNfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgCT0gJmNvcHNfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFogKiAyOwogCi0gICAgICAgIGRldi0+Z2V0X3N0YXRzICAgICAgICAgID0gY29wc19nZXRfc3RhdHM7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBjb3BzX29wZW47Ci0gICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgID0gY29wc19jbG9zZTsKLSAgICAgICAgZGV2LT5kb19pb2N0bCAgICAgICAgICAgPSBjb3BzX2lvY3RsOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotICAgICAgICBkZXYtPm1jX2xpc3QgICAgICAgICAgICA9IE5VTEw7CiAKIAkvKiBUZWxsIHRoZSB1c2VyIHdoZXJlIHRoZSBjYXJkIGlzIGFuZCB3aGF0IG1vZGUgd2UncmUgaW4uICovCiAJaWYoYm9hcmQ9PURBWU5BKQpAQCAtNzk3LDcgKzc5Nyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCQlkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIGxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisgICAgICAgICAgICAgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAgICAgICAgICAgd2hpbGUocGt0X2xlbi0tKSAgICAgICAgLyogRGlzY2FyZCBwYWNrZXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGluYihpb2FkZHIpOwogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC04MTksNyArODE5LDcgQEAKICAgICAgICAgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQmFkIHBhY2tldCBsZW5ndGggb2YgJWQgYnl0ZXMuXG4iLCAKIAkJCWRldi0+bmFtZSwgcGt0X2xlbik7Ci0gICAgICAgICAgICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgICAgICAgICAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTgzNiw3ICs4MzYsNyBAQAogICAgICAgICBpZihyc3BfdHlwZSAhPSBMQVBfUkVTUE9OU0UpCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogQmFkIHBhY2tldCB0eXBlICVkLlxuIiwgZGV2LT5uYW1lLCByc3BfdHlwZSk7Ci0gICAgICAgICAgICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgICAgICAgICAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTg0Niw4ICs4NDYsOCBAQAogICAgICAgICBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOyAgICAvKiBQb2ludCB0byBkYXRhIChTa2lwIGhlYWRlcikuICovCiAKICAgICAgICAgLyogVXBkYXRlIHRoZSBjb3VudGVycy4gKi8KLSAgICAgICAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgICAgICAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworICAgICAgICBkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKyAgICAgICAgZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogICAgICAgICAvKiBTZW5kIHBhY2tldCB0byBhIGhpZ2hlciBwbGFjZS4gKi8KICAgICAgICAgbmV0aWZfcngoc2tiKTsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgICAgICBzdHJ1Y3QgY29wc19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgICAgICBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICAgICAgaWYobHAtPmJvYXJkPT1UQU5HRU5UKQogICAgICAgICB7CiAJCWlmKChpbmIoaW9hZGRyK1RBTkdfQ0FSRF9TVEFUVVMpJlRBTkdfVFhfUkVBRFkpPT0wKQpAQCAtOTE2LDggKzkxNiw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsJLyogUmVzdG9yZSBpbnRlcnJ1cHRzLiAqLwogCiAJLyogRG9uZSBzZW5kaW5nIHBhY2tldCwgdXBkYXRlIGNvdW50ZXJzIGFuZCBjbGVhbnVwLiAqLwotCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC05ODYsMTUgKzk4Niw2IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi0vKgotICogICAgICBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqICAgICAgVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY29wc19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAgICAgc3RydWN0IGNvcHNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICAgICAgcmV0dXJuICZscC0+c3RhdHM7Ci19CiAKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqY29wc19kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwppbmRleCBkYzRkNDk2Li43OGNjNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKQEAgLTI2MSw3ICsyNjEsNiBAQAogCiBzdHJ1Y3QgbHRwY19wcml2YXRlCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IGF0YWxrX2FkZHIgbXlfYWRkcjsKIH07CiAKQEAgLTY5OSw3ICs2OTgsNiBAQAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGx0cGNfdGltZXI7CiAKIHN0YXRpYyBpbnQgbHRwY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsdHBjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIGludCByZWFkXzMwICggc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTcyNiw4ICs3MjQsNiBAQAogCWludCBkbm9kZSwgc25vZGUsIGxsYXB0eXBlLCBsZW47IAogCWludCBza2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsdHBjX3ByaXZhdGUgKmx0cGNfcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmx0cGNfcHJpdi0+c3RhdHM7CiAJc3RydWN0IGx0X3JjdmxhcCAqbHRjID0gKHN0cnVjdCBsdF9yY3ZsYXAgKikgbHRkbWFjYnVmOwogCiAJaWYgKGx0Yy0+Y29tbWFuZCAhPSBMVF9SQ1ZMQVApIHsKQEAgLTc3OSw4ICs3NzUsOCBAQAogCiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzKz1za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJLyogdG9zcyBpdCBvbndhcmRzICovCiAJbmV0aWZfcngoc2tiKTsKQEAgLTkwNCwxMCArOTAwLDYgQEAKIAkvKiBpbiBrZXJuZWwgMS4zLnh4LCBvbiBlbnRyeSBza2ItPmRhdGEgcG9pbnRzIHRvIGRkcCBoZWFkZXIsCiAJICogYW5kIHNrYi0+bGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRkcCBkYXRhICsgZGRwIGhlYWRlcgogCSAqLwotCi0Jc3RydWN0IGx0cGNfcHJpdmF0ZSAqbHRwY19wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbHRwY19wcml2LT5zdGF0czsKLQogCWludCBpOwogCXN0cnVjdCBsdF9zZW5kbGFwIGNidWY7CiAJdW5zaWduZWQgY2hhciAqaGRyOwpAQCAtOTM2LDIwICs5MjgsMTMgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnR4X2J5dGVzKz1za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmx0cGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGx0cGNfcHJpdmF0ZSAqbHRwY19wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbHRwY19wcml2LT5zdGF0czsKLQlyZXR1cm4gc3RhdHM7Ci19Ci0KIC8qIGluaXRpYWxpemF0aW9uIHN0dWZmICovCiAgIAogc3RhdGljIGludCBfX2luaXQgbHRwY19wcm9iZV9kbWEoaW50IGJhc2UsIGludCBkbWEpCkBAIC0xMDI3LDYgKzEwMTIsMTIgQEAKIAlyZXR1cm4gKHdhbnQgJiAyKSA/IDMgOiAxOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGx0cGNfbmV0ZGV2ID0geworCS5uZG9fc3RhcnRfeG1pdAkJPSBsdHBjX3htaXQsCisJLm5kb19kb19pb2N0bAkJPSBsdHBjX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgbHRwY19wcm9iZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMTMzLDE0ICsxMTI0LDcgQEAKIAllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIkFwcGxlL0ZhcmFsbG9uIExvY2FsVGFsay1QQyBjYXJkIGF0ICUwM3gsIERNQSVkLiAgVXNpbmcgcG9sbGVkIG1vZGUuXG4iLGlvLGRtYSk7CiAKLQkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldC1nZW5lcmljIHZhbHVlcy4gKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGx0cGNfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9IGx0cGNfZ2V0X3N0YXRzOwotCi0JLyogYWRkIHRoZSBsdHBjLXNwZWNpZmljIHRoaW5ncyAqLwotCWRldi0+ZG9faW9jdGwgPSAmbHRwY19pb2N0bDsKLQotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbHRwY19uZXRkZXY7CiAJZGV2LT5tY19saXN0ID0gTlVMTDsKIAlkZXYtPmJhc2VfYWRkciA9IGlvOwogCWRldi0+aXJxID0gaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYwppbmRleCAzZmY5YWZmLi42NDZkZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSQ05FVCk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FSQ05FVCk7CiA7CiAJbmV0aWZfcngoc2tiKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwppbmRleCA2YjUzZTVlLi5kNmQ0YWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC05NSwxNyArOTUsMTYgQEAKIEVYUE9SVF9TWU1CT0woYXJjbmV0X2RlYnVnKTsKIEVYUE9SVF9TWU1CT0woYWxsb2NfYXJjZGV2KTsKIEVYUE9SVF9TWU1CT0woYXJjbmV0X2ludGVycnVwdCk7CitFWFBPUlRfU1lNQk9MKGFyY25ldF9vcGVuKTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X2Nsb3NlKTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X3NlbmRfcGFja2V0KTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X3RpbWVvdXQpOwogCiAvKiBJbnRlcm5hbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhcmNuZXRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqZGFkZHIsCiAJCQkgY29uc3Qgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbik7CiBzdGF0aWMgaW50IGFyY25ldF9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJjbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZ29fdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbnQgZGVidWcgPSBBUkNORVRfREVCVUc7CkBAIC0zMjIsMTEgKzMyMSwxOCBAQAogCS5yZWJ1aWxkID0gYXJjbmV0X3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhcmNuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBhcmNuZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBhcmNuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0LAorfTsKIAogLyogU2V0dXAgYSBzdHJ1Y3QgZGV2aWNlIGZvciBBUkNuZXQuICovCiBzdGF0aWMgdm9pZCBhcmNkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVJDTkVUOworCWRldi0+bmV0ZGV2X29wcyA9ICZhcmNuZXRfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXJjbmV0X2hlYWRlcl9vcHM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGFyY2hkcik7CiAJZGV2LT5tdHUgPSBjaG9vc2VfbXR1KCk7CkBAIC0zMzksMTggKzM0NSw5IEBACiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MgPSBJRkZfQlJPQURDQVNUOwogCi0JLyoKLQkgKiBQdXQgaW4gdGhpcyBzdHVmZiBoZXJlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGV4cG9ydCB0aGUgc3ltYm9scyB0bwotCSAqIHRoZSBjaGlwc2V0IGRyaXZlcnMuCi0JICovCi0JZGV2LT5vcGVuID0gYXJjbmV0X29wZW47Ci0JZGV2LT5zdG9wID0gYXJjbmV0X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0OwotCWRldi0+Z2V0X3N0YXRzID0gYXJjbmV0X2dldF9zdGF0czsKIH0KIAotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2RldihjaGFyICpuYW1lKQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2Rldihjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKQEAgLTM3Miw3ICszNjksNyBAQAogICogdGhhdCAic2hvdWxkIiBvbmx5IG5lZWQgdG8gYmUgc2V0IG9uY2UgYXQgYm9vdCwgc28gdGhhdCB0aGVyZSBpcwogICogbm9uLXJlYm9vdCB3YXkgdG8gcmVjb3ZlciBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KICAqLwotc3RhdGljIGludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjb3VudCwgbmV3bXR1LCBlcnJvcjsKQEAgLTM4Myw3ICszODAsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUJVR0xWTChEX1BST1RPKSB7Ci0JCWludCBjb3VudDsKIAkJQlVHTVNHKERfUFJPVE8sICJwcm90b2NvbCBtYXAgKGRlZmF1bHQgaXMgJyVjJyk6ICIsCiAJCSAgICAgICBhcmNfcHJvdG9fZGVmYXVsdC0+c3VmZml4KTsKIAkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMjU2OyBjb3VudCsrKQpAQCAtNDcyLDcgKzQ2OCw3IEBACiAKIAogLyogVGhlIGludmVyc2Ugcm91dGluZSB0byBhcmNuZXRfb3BlbiAtIHNodXRzIGRvd24gdGhlIGNhcmQuICovCi1zdGF0aWMgaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNTgzLDggKzU3OSw4IEBACiAJfSBlbHNlIHsKIAkJQlVHTVNHKERfTk9STUFMLAogCQkgICAgICAgIkkgZG9uJ3QgdW5kZXJzdGFuZCBldGhlcm5ldCBwcm90b2NvbCAlWGggYWRkcmVzc2VzIVxuIiwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAl9CiAKIAkvKiBpZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBhZGRyZXNzLi4uIGdpdmUgdXAuICovCkBAIC02MDEsNyArNTk3LDcgQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCBpbiBvcmRlciB0byB0cmFuc21pdCBhIHBhY2tldC4gKi8KLXN0YXRpYyBpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdDsKQEAgLTY0NSw3ICs2NDEsNyBAQAogCQkgICAgIXByb3RvLT5hY2tfdHgpIHsKIAkJCS8qIGRvbmUgcmlnaHQgYXdheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhY2tub3dsZWRnZQogCQkJICAgdGhlIHBhY2thZ2UgbGF0ZXIgLSBmb3JnZXQgYWJvdXQgaXQgbm93ICovCi0JCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJZnJlZXNrYiA9IDE7CiAJCX0gZWxzZSB7CiAJCQkvKiBkbyBpdCB0aGUgJ3NwbGl0JyB3YXkgKi8KQEAgLTcwOSw3ICs3MDUsNyBAQAogCS8qIHN0YXJ0IHNlbmRpbmcgKi8KIAlBQ09NTUFORChUWGNtZCB8IChscC0+Y3VyX3R4IDw8IDMpKTsKIAotCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJbHAtPmxhc3R0cmFuc19kZXN0ID0gbHAtPmxhc3Rsb2FkX2Rlc3Q7CiAJbHAtPmxhc3Rsb2FkX2Rlc3QgPSAwOwogCWxwLT5leGNuYWtfcGVuZGluZyA9IDA7CkBAIC03MjAsNyArNzE2LDcgQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRyYW5zbWl0IHRpbWVzIG91dCAqLwotc3RhdGljIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTczMiwxMSArNzI4LDExIEBACiAJCW1zZyA9ICIgLSBtaXNzZWQgSVJRPyI7CiAJfSBlbHNlIHsKIAkJbXNnID0gIiI7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCWxwLT50aW1lZF9vdXQgPSAxOwogCQlBQ09NTUFORChOT1RYY21kIHwgKGxwLT5jdXJfdHggPDwgMykpOwogCX0KLQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhIFRYIG9yIGEgRVhDIE5BSyBJUlEgKi8KIAlBSU5UTUFTSygwKTsKQEAgLTg2NSw4ICs4NjEsOCBAQAogCQkJCQkJICAgICAgICJ0cmFuc21pdCB3YXMgbm90IGFja25vd2xlZGdlZCEgIgogCQkJCQkJICAgICAgICIoc3RhdHVzPSVYaCwgZGVzdD0lMDJYaClcbiIsCiAJCQkJCQkgICAgICAgc3RhdHVzLCBscC0+bGFzdHRyYW5zX2Rlc3QpOwotCQkJCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJQlVHTVNHKERfRFVSSU5HLAogCQkJCQkJICAgICAgICJicm9hZGNhc3Qgd2FzIG5vdCBhY2tub3dsZWRnZWQ7IHRoYXQncyBub3JtYWwgIgpAQCAtOTA1LDcgKzkwMSw3IEBACiAJCQkJaWYgKHR4YnVmICE9IC0xKSB7CiAJCQkJCWlmIChscC0+b3V0Z29pbmcucHJvdG8tPmNvbnRpbnVlX3R4KGRldiwgdHhidWYpKSB7CiAJCQkJCQkvKiB0aGF0IHdhcyB0aGUgbGFzdCBzZWdtZW50ICovCi0JCQkJCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gbHAtPm91dGdvaW5nLnNrYi0+bGVuOworCQkJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBscC0+b3V0Z29pbmcuc2tiLT5sZW47CiAJCQkJCQlpZighbHAtPm91dGdvaW5nLnByb3RvLT5hY2tfdHgpCiAJCQkJCQkgIHsKIAkJCQkJCSAgICBkZXZfa2ZyZWVfc2tiX2lycShscC0+b3V0Z29pbmcuc2tiKTsKQEAgLTkzMCw3ICs5MjYsNyBAQAogCQl9CiAJCWlmIChzdGF0dXMgJiBscC0+aW50bWFzayAmIFJFQ09OZmxhZykgewogCQkJQUNPTU1BTkQoQ0ZMQUdTY21kIHwgQ09ORklHY2xlYXIpOwotCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAKIAkJCUJVR01TRyhEX1JFQ09OLCAiTmV0d29yayByZWNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQgKHN0YXR1cz0lWGgpXG4iLAogCQkJICAgICAgIHN0YXR1cyk7CkBAIC0xMDM4LDggKzEwMzQsOCBAQAogCSAgICAgICAiKCVkKzQgYnl0ZXMpXG4iLAogCSAgICAgICBidWZudW0sIHBrdC5oYXJkLnNvdXJjZSwgcGt0LmhhcmQuZGVzdCwgbGVuZ3RoKTsKIAotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCArIEFSQ19IRFJfU0laRTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCArIEFSQ19IRFJfU0laRTsKIAogCS8qIGNhbGwgdGhlIHJpZ2h0IHJlY2VpdmVyIGZvciB0aGUgcHJvdG9jb2wgKi8KIAlpZiAoYXJjX3Byb3RvX21hcFtzb2Z0LT5wcm90b10tPmlzX2lwKSB7CkBAIC0xMDY3LDE4ICsxMDYzLDYgQEAKIH0KIAogCi0KLS8qIAotICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yCi0gKiBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJjbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxwLT5zdGF0czsKLX0KLQotCiBzdGF0aWMgdm9pZCBudWxsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWZudW0sCiAJCSAgICBzdHJ1Y3QgYXJjaGRyICpwa3RoZHIsIGludCBsZW5ndGgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwppbmRleCAzMDU4MGJiLi4wODNlMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUgKyBzaXplb2YoaW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSArIHNpemVvZihpbnQpKTsKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJDTkVUKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIDsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBACiAgIEJVR01TRyhEX1BST1RPLCAiQWNra25vd2xlZGdlIGZvciBjYXAgcGFja2V0ICV4LlxuIiwKIAkgKigoaW50KikmYWNrcGt0LT5zb2Z0LmNhcC5jb29raWVbMF0pKTsKIAotICBhY2tza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUkNORVQpOworICBhY2tza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIAogICBCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIGFja3NrYiwgImFja190eF9yZWN2Iik7CiAgIG5ldGlmX3J4KGFja3NrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKaW5kZXggZWE1M2E5NC4uZGIwOGZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYwpAQCAtMTUxLDYgKzE1MSw4IEBACiAJaWYgKG5vZGUgJiYgbm9kZSAhPSAweGZmKQogCQlkZXYtPmRldl9hZGRyWzBdID0gbm9kZTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZjb20yMDAyMF9uZXRkZXZfb3BzOworCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxwLT5iYWNrcGxhbmUgPSBiYWNrcGxhbmU7CiAJbHAtPmNsb2NrcCA9IGNsb2NrcCAmIDc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKaW5kZXggOGI1MWY2My4uZGJmNGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwpAQCAtNzIsNiArNzIsOSBAQAogCWRldiA9IGFsbG9jX2FyY2RldihkZXZpY2UpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+bmV0ZGV2X29wcyA9ICZjb20yMDAyMF9uZXRkZXZfb3BzOworCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCmluZGV4IDEwMzY4ODMuLjY1MTI3NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCkBAIC0xNDksNiArMTQ5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2NvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjb20yMDAyMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGFyY25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGFyY25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBjb20yMDAyMF9zZXRfbWNfbGlzdCwKK307CisKIC8qIFNldCB1cCB0aGUgc3RydWN0IG5ldF9kZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FyZC4gIENhbGxlZCBhZnRlcgogICogcHJvYmluZyBzdWNjZWVkcy4KICAqLwpAQCAtMTcwLDggKzE3OCw2IEBACiAJbHAtPmh3LmNvcHlfZnJvbV9jYXJkID0gY29tMjAwMjBfY29weV9mcm9tX2NhcmQ7CiAJbHAtPmh3LmNsb3NlID0gY29tMjAwMjBfY2xvc2U7CiAKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNvbTIwMDIwX3NldF9tY19saXN0OwotCiAJaWYgKCFkZXYtPmRldl9hZGRyWzBdKQogCQlkZXYtPmRldl9hZGRyWzBdID0gaW5iKGlvYWRkciArIEJVU19BTElHTio4KTsJLyogRklYTUU6IGRvIHRoaXMgc29tZSBvdGhlciB3YXkhICovCiAKQEAgLTM0Miw2ICszNDgsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DU19NT0RVTEUpCiBFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX2NoZWNrKTsKIEVYUE9SVF9TWU1CT0woY29tMjAwMjBfZm91bmQpOworRVhQT1JUX1NZTUJPTChjb20yMDAyMF9uZXRkZXZfb3BzKTsKICNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYwppbmRleCA0OWQzOWE5Li4wNmY4ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKQEAgLTg4LDcgKzg4LDYgQEAKICAqLwogc3RhdGljIF9fYmUxNiB0eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYXJjX3JmYzEwNTEgKnNvZnQgPSAmcGt0LT5zb2Z0LnJmYzEwNTE7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTA1MV9IRFJfU0laRTsKQEAgLTExMiw4ICsxMTEsOCBAQAogCQlyZXR1cm4gaHRvbnMoRVRIX1BfQVJQKTsKIAogCWRlZmF1bHQ6Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQwLDcgKzEzOSw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0xNjgsNyArMTY3LDYgQEAKIHN0YXRpYyBpbnQgYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQl1bnNpZ25lZCBzaG9ydCB0eXBlLCB1aW50OF90IGRhZGRyKQogewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMDUxX0hEUl9TSVpFOwogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYl9wdXNoKHNrYiwgaGRyX3NpemUpOwogCXN0cnVjdCBhcmNfcmZjMTA1MSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTA1MTsKQEAgLTE4NCw4ICsxODIsOCBAQAogCWRlZmF1bHQ6CiAJCUJVR01TRyhEX05PUk1BTCwgIlJGQzEwNTE6IEkgZG9uJ3QgdW5kZXJzdGFuZCBwcm90b2NvbCAlZCAoJVhoKVxuIiwKIAkJICAgICAgIHR5cGUsIHR5cGUpOwotCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKaW5kZXggMjMwM2QzYS4uNzQ1NTMwNjUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCkBAIC05Miw3ICs5Miw2IEBACiB7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBhcmNfcmZjMTIwMSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTIwMTsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTIwMV9IRFJfU0laRTsKIAogCS8qIFB1bGwgb2ZmIHRoZSBhcmNuZXQgaGVhZGVyLiAqLwpAQCAtMTIxLDggKzEyMCw4IEBACiAJY2FzZSBBUkNfUF9OT1ZFTExfRUM6CiAJCXJldHVybiBodG9ucyhFVEhfUF84MDJfMyk7CiAJZGVmYXVsdDoKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzIsOCArMTcxLDggQEAKIAkJCSBpbi0+c2VxdWVuY2UsIHNvZnQtPnNwbGl0X2ZsYWcsIHNvZnQtPnNlcXVlbmNlKTsKIAkJCWxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxID0gc29mdC0+c2VxdWVuY2U7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKLQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQlpbi0+c2tiID0gTlVMTDsKIAkJfQogCQlpbi0+c2VxdWVuY2UgPSBzb2Z0LT5zZXF1ZW5jZTsKQEAgLTE4MSw3ICsxODAsNyBAQAogCQlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQlCVUdNU0coRF9OT1JNQUwsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7Ci0JCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlyZXR1cm47CiAJCX0KIAkJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0yMTMsNyArMjEyLDcgQEAKIAkJCQkJQlVHTVNHKERfRVhUUkEsCiAJCQkJCSAgICAgICAiQVJQIHNvdXJjZSBhZGRyZXNzIHdhcyAwMGgsIHNldCB0byAlMDJYaC5cbiIsCiAJCQkJCSAgICAgICBzYWRkcik7Ci0JCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJCQkqY3B0ciA9IHNhZGRyOwogCQkJCX0gZWxzZSB7CiAJCQkJCUJVR01TRyhEX0RVUklORywgIkFSUCBzb3VyY2UgYWRkcmVzcyAoJVhoKSBpcyBmaW5lLlxuIiwKQEAgLTIyMiw4ICsyMjEsOCBAQAogCQkJfSBlbHNlIHsKIAkJCQlCVUdNU0coRF9OT1JNQUwsICJmdW5ueS1zaGFwZWQgQVJQIHBhY2tldC4gKCVYaCwgJVhoKVxuIiwKIAkJCQkgICAgICAgYXJwLT5hcl9obG4sIGFycC0+YXJfcGxuKTsKLQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJfQogCQl9CiAJCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKQEAgLTI1Nyw4ICsyNTYsOCBAQAogCQkJICAgICAgIHNvZnQtPnNwbGl0X2ZsYWcpOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW4tPnNrYik7CiAJCQlpbi0+c2tiID0gTlVMTDsKLQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQlpbi0+bGFzdHBhY2tldCA9IGluLT5udW1wYWNrZXRzID0gMDsKIAkJfQogCQlpZiAoc29mdC0+c3BsaXRfZmxhZyAmIDEpIHsJLyogZmlyc3QgcGFja2V0IGluIHNwbGl0ICovCkBAIC0yNjksOCArMjY4LDggQEAKIAkJCQkgICAgICAgIihzcGxpdGZsYWc9JWQsIHNlcT0lZClcbiIsCiAJCQkJICAgICAgIGluLT5zZXF1ZW5jZSwgc29mdC0+c3BsaXRfZmxhZywKIAkJCQkgICAgICAgc29mdC0+c2VxdWVuY2UpOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW4tPnNrYik7CiAJCQl9CiAJCQlpbi0+c2VxdWVuY2UgPSBzb2Z0LT5zZXF1ZW5jZTsKQEAgLTI4MSw4ICsyODAsOCBAQAogCQkJCUJVR01TRyhEX0VYVFJBLCAiaW5jb21pbmcgcGFja2V0IG1vcmUgdGhhbiAxNiBzZWdtZW50czsgZHJvcHBpbmcuIChzcGxpdGZsYWc9JWQpXG4iLAogCQkJCSAgICAgICBzb2Z0LT5zcGxpdF9mbGFnKTsKIAkJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaW4tPnNrYiA9IHNrYiA9IGFsbG9jX3NrYig1MDggKiBpbi0+bnVtcGFja2V0cyArIEFSQ19IRFJfU0laRSwKQEAgLTI5MCw3ICsyODksNyBAQAogCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJQlVHTVNHKERfTk9STUFMLCAiKHNwbGl0KSBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7CiAJCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKLQkJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYi0+ZGV2ID0gZGV2OwpAQCAtMzE0LDggKzMxMyw4IEBACiAJCQkJCSAgICAgICAiZmlyc3QhIChzcGxpdGZsYWc9JWQsIHNlcT0lZCwgYWJvcnRlZD0lZClcbiIsCiAJCQkJCXNvZnQtPnNwbGl0X2ZsYWcsIHNvZnQtPnNlcXVlbmNlLAogCQkJCQkgICAgICAgbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEpOwotCQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCX0KIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0zMjUsOCArMzI0LDggQEAKIAkJCQlpZiAocGFja2V0bnVtIDw9IGluLT5sYXN0cGFja2V0IC0gMSkgewogCQkJCQlCVUdNU0coRF9FWFRSQSwgImR1cGxpY2F0ZSBzcGxpdHBhY2tldCBpZ25vcmVkISAoc3BsaXRmbGFnPSVkKVxuIiwKIAkJCQkJICAgICAgIHNvZnQtPnNwbGl0X2ZsYWcpOwotCQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCQkvKiAiYmFkIiBkdXBsaWNhdGUsIGtpbGwgcmVhc3NlbWJseSAqLwpAQCAtMzM2LDggKzMzNSw4IEBACiAJCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKIAkJCQlpbi0+c2tiID0gTlVMTDsKLQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCWluLT5sYXN0cGFja2V0ID0gaW4tPm51bXBhY2tldHMgPSAwOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTQwNCw4ICs0MDMsOCBAQAogCWRlZmF1bHQ6CiAJCUJVR01TRyhEX05PUk1BTCwgIlJGQzEyMDE6IEkgZG9uJ3QgdW5kZXJzdGFuZCBwcm90b2NvbCAlZCAoJVhoKVxuIiwKIAkJICAgICAgIHR5cGUsIHR5cGUpOwotCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCmluZGV4IGMyZDAxMmYuLjRiYzY5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjZGVmaW5lIFRYX0JVRkZFUlMgMTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCmluZGV4IDNlYzIwY2MuLmNjNzcwODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCWludCBtb3JlID0gMDsKIAogCQlzcGluX2xvY2tfaXJxKCZlcC0+cnhfbG9jayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCB8IFJFR19JTlRFTl9SWCk7CiAJCWlmIChlcDkzeHhfaGF2ZV9tb3JlX3J4KGVwKSkgewogCQkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJmVwLT5yeF9sb2NrKTsKIAotCQlpZiAobW9yZSAmJiBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKQorCQlpZiAobW9yZSAmJiBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlnb3RvIHBvbGxfc29tZV9tb3JlOwogCX0KIApAQCAtNDE1LDkgKzQxNSw5IEBACiAKIAlpZiAoc3RhdHVzICYgUkVHX0lOVFNUU19SWCkgewogCQlzcGluX2xvY2soJmVwLT5yeF9sb2NrKTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpKSB7CiAJCQl3cmwoZXAsIFJFR19JTlRFTiwgUkVHX0lOVEVOX1RYKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZXAtPm5hcGkpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZlcC0+cnhfbG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggNWZjZTFkNS4uNDQ4NDg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC0zMzUsMTEgKzMzNSwyMCBAQAogCWlmICghKG1kaW9fYnVzID0gbWRpb2J1c19hbGxvYygpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBBbGwgTUlJIFBIWSBhY2Nlc3NlcyB1c2UgTlBFLUIgRXRoZXJuZXQgcmVnaXN0ZXJzICovCi0Jc3Bpbl9sb2NrX2luaXQoJm1kaW9fbG9jayk7Ci0JbWRpb19yZWdzID0gKHN0cnVjdCBldGhfcmVncyBfX2lvbWVtICopSVhQNFhYX0V0aEJfQkFTRV9WSVJUOwotCV9fcmF3X3dyaXRlbChERUZBVUxUX0NPUkVfQ05UUkwsICZtZGlvX3JlZ3MtPmNvcmVfY29udHJvbCk7CisJaWYgKGNwdV9pc19peHA0M3goKSkgeworCQkvKiBJWFA0M3ggbGFja3MgTlBFLUIgYW5kIHVzZXMgTlBFLUMgZm9yIE1JSSBQSFkgYWNjZXNzICovCisJCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQ19FVEgpKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCW1kaW9fcmVncyA9IChzdHJ1Y3QgZXRoX3JlZ3MgX19pb21lbSAqKUlYUDRYWF9FdGhDX0JBU0VfVklSVDsKKwl9IGVsc2UgeworCQkvKiBBbGwgTUlJIFBIWSBhY2Nlc3NlcyB1c2UgTlBFLUIgRXRoZXJuZXQgcmVnaXN0ZXJzICovCisJCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEgwKSkKKwkJCXJldHVybiAtRU5PU1lTOworCQltZGlvX3JlZ3MgPSAoc3RydWN0IGV0aF9yZWdzIF9faW9tZW0gKilJWFA0WFhfRXRoQl9CQVNFX1ZJUlQ7CisJfQogCisJX19yYXdfd3JpdGVsKERFRkFVTFRfQ09SRV9DTlRSTCwgJm1kaW9fcmVncy0+Y29yZV9jb250cm9sKTsKKwlzcGluX2xvY2tfaW5pdCgmbWRpb19sb2NrKTsKIAltZGlvX2J1cy0+bmFtZSA9ICJJWFA0eHggTUlJIEJ1cyI7CiAJbWRpb19idXMtPnJlYWQgPSAmaXhwNHh4X21kaW9fcmVhZDsKIAltZGlvX2J1cy0+d3JpdGUgPSAmaXhwNHh4X21kaW9fd3JpdGU7CkBAIC00NzMsNyArNDgyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9yeF9pcnFcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAlxbWdyX2Rpc2FibGVfaXJxKHBvcnQtPnBsYXQtPnJ4cSk7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IGV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKQEAgLTQ5OCwxNiArNTA3LDE2IEBACiAKIAkJaWYgKChuID0gcXVldWVfZ2V0X2Rlc2MocnhxLCBwb3J0LCAwKSkgPCAwKSB7CiAjaWYgREVCVUdfUlgKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwgbmV0aWZfcnhfY29tcGxldGVcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIG5hcGlfY29tcGxldGVcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJcW1ncl9lbmFibGVfaXJxKHJ4cSk7CiAJCQlpZiAoIXFtZ3Jfc3RhdF9lbXB0eShyeHEpICYmCi0JCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkgewogI2lmIERFQlVHX1JYCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCIKLQkJCQkgICAgICAgIiBuZXRpZl9yeF9yZXNjaGVkdWxlIHN1Y2Nlc3NlZFxuIiwKKwkJCQkgICAgICAgIiBuYXBpX3Jlc2NoZWR1bGUgc3VjY2Vzc2VkXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUpOwogI2VuZGlmCiAJCQkJcW1ncl9kaXNhYmxlX2lycShyeHEpOwpAQCAtMTAzNiw3ICsxMDQ1LDcgQEAKIAl9CiAJcG9ydHNfb3BlbisrOwogCS8qIHdlIG1heSBhbHJlYWR5IGhhdmUgUlggZGF0YSwgZW5hYmxlcyBJUlEgKi8KLQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNTAsOSArMTI1OSw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBldGhfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgZXJyOwotCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEgwKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KIAlpZiAoKGVyciA9IGl4cDR4eF9tZGlvX3JlZ2lzdGVyKCkpKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9ldGhfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwppbmRleCBmM2ExMjc0Li4zNWNkMjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCkBAIC0xMDU5LDcgKzEwNTksNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBNT0RVTEVOQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybGNweShpbmZvLT52ZXJzaW9uLCBNT0RVTEVWRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIG5kZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwKKwlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShuZGV2LT5kZXYucGFyZW50KSwKIAkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKaW5kZXggNzJlYTZlMy4uMThiNTY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQxNzAwLmMKKysrIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKQEAgLTI0OSw2ICsyNDksMTcgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF0MTcwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoZSBGdWppdHN1IGRhdGFzaGVldCBzdWdnZXN0cyB0aGF0IHRoZSBOSUMgYmUgcHJvYmVkIGZvciBieSBjaGVja2luZyBpdHMKICAgICJzaWduYXR1cmUiLCB0aGUgZGVmYXVsdCBiaXQgcGF0dGVybiBhZnRlciBhIHJlc2V0LiAgVGhpcyAqZG9lc24ndCogd29yayAtLQogICAgdGhlcmUgaXMgbm8gd2F5IHRvIHJlc2V0IHRoZSBidXMgaW50ZXJmYWNlIHdpdGhvdXQgYSBjb21wbGV0ZSBwb3dlci1jeWNsZSEKQEAgLTQ0OCwxMyArNDU5LDcgQEAKIAlpZiAobmV0X2RlYnVnKQogCQlwcmludGsodmVyc2lvbik7CiAKLQltZW1zZXQobHAsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7Ci0KLQlkZXYtPm9wZW4JCT0gbmV0X29wZW47Ci0JZGV2LT5zdG9wCQk9IG5ldF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5ldF9zZW5kX3BhY2tldDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBuZXRfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXQxNzAwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwpAQCAtODI4LDcgKzgzMyw2IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgbWNfZmlsdGVyWzhdOwkJIC8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKQEAgLTg1Nyw2ICs4NjEsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZscC0+bG9jaywgZmxhZ3MpOwogCWlmIChtZW1jbXAobWNfZmlsdGVyLCBscC0+bWNfZmlsdGVyLCBzaXplb2YobWNfZmlsdGVyKSkpIHsKKwkJaW50IGk7CiAJCWludCBzYXZlZF9iYW5rID0gaW53KGlvYWRkciArIENPTkZJR18wKTsKIAkJLyogU3dpdGNoIHRvIGJhbmsgMSBhbmQgc2V0IHRoZSBtdWx0aWNhc3QgdGFibGUuICovCiAJCW91dHcoKHNhdmVkX2JhbmsgJiB+MHgwQzAwKSB8IDB4MDQ4MCwgaW9hZGRyICsgQ09ORklHXzApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKaW5kZXggYWMxMWI4NC4uZTE2NThlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaCBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmgKaW5kZXggYzQ5NTUwZC4uMmJmNjNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oCkBAIC00NDgsNyArNDQ4LDcgQEAKIAkvKiBBbGwgRGVzY3JpcHRvciBtZW1vcnkgKi8KIAlkbWFfYWRkcl90ICAJcmluZ19kbWE7CiAJdm9pZCAgICAgCSpyaW5nX3Zpcl9hZGRyOwotCWludCAgICAgICAgICAgICByaW5nX3NpemU7CisJdTMyICAgICAgICAgICAgIHJpbmdfc2l6ZTsKIAogCXN0cnVjdCBhdGwxZV90eF9yaW5nIHR4X3Jpbmc7CiAJc3RydWN0IGF0bDFlX3J4X3JpbmcgcnhfcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwppbmRleCBiYjkwOTRkLi5jNzU4ODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCkBAIC0xMzI2LDkgKzEzMjYsOSBAQAogCQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSU1SLAogCQkJCSAgICAgSU1SX05PUk1BTF9NQVNLICYgfklTUl9SWF9FVkVOVCk7CiAJCQlBVF9XUklURV9GTFVTSChodyk7Ci0JCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoCisJCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgKIAkJCQkgICAmYWRhcHRlci0+bmFwaSkpKQotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQkJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJCX0KIAl9IHdoaWxlICgtLW1heF9pbnRzID4gMCk7CiAJLyogcmUtZW5hYmxlIEludGVycnVwdCovCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCS8qIElmIG5vIFR4IGFuZCBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogcXVpdF9wb2xsaW5nOgotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW1yX2RhdGEgPSBBVF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIpOwogCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SLCBpbXJfZGF0YSB8IElTUl9SWF9FVkVOVCk7CiAJCS8qIHRlc3QgZGVidWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCmluZGV4IGY3MmFiYjMuLmIzYmU1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYwpAQCAtNDEsNyArNDEsNyBAQAogCiAjZGVmaW5lIEFUTDFFX1BBUkFNKHgsIGRlc2MpIFwKIAlzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgeFtBVEwxRV9NQVhfTklDICsgMV0gPSBBVEwxRV9QQVJBTV9JTklUOyBcCi0Jc3RhdGljIGludCBudW1fIyN4OyBcCisJc3RhdGljIHVuc2lnbmVkIGludCBudW1fIyN4OyBcCiAJbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHgsIHgsIGludCwgJm51bV8jI3gsIDApOyBcCiAJTU9EVUxFX1BBUk1fREVTQyh4LCBkZXNjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwppbmRleCBjMGNlZWUwLi40M2ZjMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAgKiBEZWZhdWx0IFZhbHVlOiAxMDAgKDIwMHVzKQogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgaW50X21vZF90aW1lcltBVEwxX01BWF9OSUMrMV0gPSBBVEwxX1BBUkFNX0lOSVQ7Ci1zdGF0aWMgaW50IG51bV9pbnRfbW9kX3RpbWVyOworc3RhdGljIHVuc2lnbmVkIGludCBudW1faW50X21vZF90aW1lcjsKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChpbnRfbW9kX3RpbWVyLCBpbnRfbW9kX3RpbWVyLCBpbnQsCiAJJm51bV9pbnRfbW9kX3RpbWVyLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW50X21vZF90aW1lciwgIkludGVycnVwdCBtb2RlcmF0b3IgdGltZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggYmMzOTQ0OS4uOWZlMDZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTI4NTQsNyArMjg1NCw3IEBACiAjZWxzZQogI2RlZmluZSBBVEwyX1BBUkFNKFgsIGRlc2MpIFwKICAgICBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgWFtBVEwyX01BWF9OSUMrMV0gPSBBVEwyX1BBUkFNX0lOSVQ7IFwKLSAgICBzdGF0aWMgaW50IG51bV8jI1ggPSAwOyBcCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBudW1fIyNYOyBcCiAgICAgbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKFgsIFgsIGludCwgJm51bV8jI1gsIDApOyBcCiAgICAgTU9EVUxFX1BBUk1fREVTQyhYLCBkZXNjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDljODc1YmIuLjQyNzRlNGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC04MSwyNCArODEsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLy8gcHJvdG90eXBlcwotc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSk7Ci1zdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdTEwMDBfaW50ZXJydXB0KGludCwgdm9pZCAqKTsKLXN0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKLXN0YXRpYyBpbnQgYXUxMDAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7Ci1zdGF0aWMgdm9pZCBhdTEwMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCwgdTE2KTsKLXN0YXRpYyB2b2lkIGF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQogLyoKICAqIFRoZW9yeSBvZiBvcGVyYXRpb24KICAqCkBAIC0xODgsNiArMTcwLDI2IEBACiAjIGVycm9yIE1BQzAtYXNzb2NpYXRlZCBQSFkgYXR0YWNoZWQgMm5kIE1BQ3MgTUlJIGJ1cyBub3Qgc3VwcG9ydGVkIHlldAogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYoZm9yY2VfcmVzZXQgfHwgKCFhdXAtPm1hY19lbmFibGVkKSkgeworCQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOworCQlhdV9zeW5jX2RlbGF5KDIpOworCQkqYXVwLT5lbmFibGUgPSAoTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyCisJCQkJfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFKTsKKwkJYXVfc3luY19kZWxheSgyKTsKKworCQlhdXAtPm1hY19lbmFibGVkID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoKICAqIE1JSSBvcGVyYXRpb25zCiAgKi8KQEAgLTI4MSw2ICsyODMsMTA3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZCBzdG9wXG4iLCBkZXYtPm5hbWUpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfihNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7CisJYXVfc3luY19kZWxheSgxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9yeF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxlX3J4X3R4XG4iLCBkZXYtPm5hbWUpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgfD0gKE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFKTsKKwlhdV9zeW5jX2RlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQKK2F1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7CisKKwlCVUdfT04oIWF1cC0+cGh5X2Rldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgeworCQkvLyBzcGVlZCBjaGFuZ2VkCisKKwkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJY2FzZSBTUEVFRF8xMDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKKwkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAorCisJCS8qIHN3aXRjaGluZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8KKwkJaGFyZF9zdG9wKGRldik7CisKKwkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCisJCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKKwkJZWxzZQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKKwkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7CisJCWF1X3N5bmNfZGVsYXkoMSk7CisKKwkJZW5hYmxlX3J4X3R4KGRldik7CisJCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7CisJCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAorCisJCWlmICghcGh5ZGV2LT5saW5rKSB7CisJCQkvKiBsaW5rIHdlbnQgZG93biAqLworCQkJYXVwLT5vbGRfc3BlZWQgPSAwOworCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7CisJCX0KKworCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOworCQlzdGF0dXNfY2hhbmdlID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXNfY2hhbmdlKSB7CisJCWlmIChwaHlkZXYtPmxpbmspCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKKwkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJfQorfQorCiBzdGF0aWMgaW50IG1paV9wcm9iZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zNTUsOCArNDU4LDggQEAKIAkvKiBub3cgd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSBwcm9wZXIgcGh5ZGV2LCB0byBhdHRhY2ggdG8uLi4gKi8KIAlCVUdfT04ocGh5ZGV2LT5hdHRhY2hlZF9kZXYpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsICZhdTEwMDBfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksICZhdTEwMDBfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKQEAgLTM4MSw4ICs0ODQsOCBAQAogCWF1cC0+cGh5X2RldiA9IHBoeWRldjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgotCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDEyLDQ4ICs1MTUsNiBAQAogCWF1cC0+cERCZnJlZSA9IHBEQjsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGVfcnhfdHhcbiIsIGRldi0+bmFtZSk7Ci0KLQlhdXAtPm1hYy0+Y29udHJvbCB8PSAoTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOwotCWF1X3N5bmNfZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhhcmQgc3RvcFxuIiwgZGV2LT5uYW1lKTsKLQotCWF1cC0+bWFjLT5jb250cm9sICY9IH4oTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOwotCWF1X3N5bmNfZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZV9yZXNldCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmKGZvcmNlX3Jlc2V0IHx8ICghYXVwLT5tYWNfZW5hYmxlZCkpIHsKLQkJKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKLQkJYXVfc3luY19kZWxheSgyKTsKLQkJKmF1cC0+ZW5hYmxlID0gKE1BQ19FTl9SRVNFVDAgfCBNQUNfRU5fUkVTRVQxIHwgTUFDX0VOX1JFU0VUMgotCQkJCXwgTUFDX0VOX0NMT0NLX0VOQUJMRSk7Ci0JCWF1X3N5bmNfZGVsYXkoMik7Ci0KLQkJYXVwLT5tYWNfZW5hYmxlZCA9IDE7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlc2V0X21hY191bmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU0MiwzMCArNjAzLDYgQEAKIHN0YXRpYyBpbnQgbnVtX2lmczsKIAogLyoKLSAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKLSAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYwotICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IGksIGZvdW5kX29uZSA9IDA7Ci0KLQludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOwotCQlpZmxpc3RbaV0uZGV2ID0gZGV2OwotCQlpZiAoZGV2KQotCQkJZm91bmRfb25lKys7Ci0JfQotCWlmICghZm91bmRfb25lKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGV0aHRvb2wgb3BlcmF0aW9ucwogICovCiAKQEAgLTYxMSw2ICs2NDgsNDA1IEBACiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGludGVyZmFjZS4KKyAqCisgKiBXaGVuIHRoZSBkZXZpY2UgcG93ZXJzIHVwLCB0aGUgY2xvY2tzIGFyZSBkaXNhYmxlZCBhbmQgdGhlCisgKiBtYWMgaXMgaW4gcmVzZXQgc3RhdGUuICBXaGVuIHRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLCB3ZQorICogZG8gdGhlIHNhbWUgLS0gcmVzZXQgdGhlIGRldmljZSBhbmQgZGlzYWJsZSB0aGUgY2xvY2tzIHRvCisgKiBjb25zZXJ2ZSBwb3dlci4gVGh1cywgd2hlbmV2ZXIgYXUxMDAwX2luaXQoKSBpcyBjYWxsZWQsCisgKiB0aGUgZGV2aWNlIHNob3VsZCBhbHJlYWR5IGJlIGluIHJlc2V0IHN0YXRlLgorICovCitzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJdTMyIGNvbnRyb2w7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisKKwkvKiBicmluZyB0aGUgZGV2aWNlIG91dCBvZiByZXNldCAqLworCWVuYWJsZV9tYWMoZGV2LCAxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWF1cC0+bWFjLT5jb250cm9sID0gMDsKKwlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOworCWF1cC0+dHhfdGFpbCA9IGF1cC0+dHhfaGVhZDsKKwlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOworCisJYXVwLT5tYWMtPm1hY19hZGRyX2hpZ2ggPSBkZXYtPmRldl9hZGRyWzVdPDw4IHwgZGV2LT5kZXZfYWRkcls0XTsKKwlhdXAtPm1hYy0+bWFjX2FkZHJfbG93ID0gZGV2LT5kZXZfYWRkclszXTw8MjQgfCBkZXYtPmRldl9hZGRyWzJdPDwxNiB8CisJCWRldi0+ZGV2X2FkZHJbMV08PDggfCBkZXYtPmRldl9hZGRyWzBdOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgeworCQlhdXAtPnJ4X2RtYV9yaW5nW2ldLT5idWZmX3N0YXQgfD0gUlhfRE1BX0VOQUJMRTsKKwl9CisJYXVfc3luYygpOworCisJY29udHJvbCA9IE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFOworI2lmbmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKwljb250cm9sIHw9IE1BQ19CSUdfRU5ESUFOOworI2VuZGlmCisJaWYgKGF1cC0+cGh5X2RldikgeworCQlpZiAoYXVwLT5waHlfZGV2LT5saW5rICYmIChEVVBMRVhfRlVMTCA9PSBhdXAtPnBoeV9kZXYtPmR1cGxleCkpCisJCQljb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKKwkJZWxzZQorCQkJY29udHJvbCB8PSBNQUNfRElTQUJMRV9SWF9PV047CisJfSBlbHNlIHsgLyogUEhZLWxlc3Mgb3AsIGFzc3VtZSBmdWxsLWR1cGxleCAqLworCQljb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKKwl9CisKKwlhdXAtPm1hYy0+Y29udHJvbCA9IGNvbnRyb2w7CisJYXVwLT5tYWMtPnZsYW4xX3RhZyA9IDB4ODEwMDsgLyogYWN0aXZhdGUgdmxhbiBzdXBwb3J0ICovCisJYXVfc3luYygpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisKKwlwcy0+cnhfcGFja2V0cysrOworCWlmIChzdGF0dXMgJiBSWF9NQ0FTVF9GUkFNRSkKKwkJcHMtPm11bHRpY2FzdCsrOworCisJaWYgKHN0YXR1cyAmIFJYX0VSUk9SKSB7CisJCXBzLT5yeF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKKwkJCXBzLT5yeF9taXNzZWRfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiAoUlhfT1ZFUkxFTiB8IFJYX09WRVJMRU4gfCBSWF9MRU5fRVJST1IpKQorCQkJcHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKKwkJCXBzLT5yeF9jcmNfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBSWF9DT0xMKQorCQkJcHMtPmNvbGxpc2lvbnMrKzsKKwl9CisJZWxzZQorCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7CisKK30KKworLyoKKyAqIEF1MTAwMCByZWNlaXZlIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9sYXRpbGUgcnhfZG1hX3QgKnByeGQ7CisJdTMyIGJ1ZmZfc3RhdCwgc3RhdHVzOworCWRiX2Rlc3RfdCAqcERCOworCXUzMglmcm1sZW47CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNSkKKwkJcHJpbnRrKCIlczogYXUxMDAwX3J4IGhlYWQgJWRcbiIsIGRldi0+bmFtZSwgYXVwLT5yeF9oZWFkKTsKKworCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07CisJYnVmZl9zdGF0ID0gcHJ4ZC0+YnVmZl9zdGF0OworCXdoaWxlIChidWZmX3N0YXQgJiBSWF9UX0RPTkUpICB7CisJCXN0YXR1cyA9IHByeGQtPnN0YXR1czsKKwkJcERCID0gYXVwLT5yeF9kYl9pbnVzZVthdXAtPnJ4X2hlYWRdOworCQl1cGRhdGVfcnhfc3RhdHMoZGV2LCBzdGF0dXMpOworCQlpZiAoIShzdGF0dXMgJiBSWF9FUlJPUikpICB7CisKKwkJCS8qIGdvb2QgZnJhbWUgKi8KKwkJCWZybWxlbiA9IChzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSyk7CisJCQlmcm1sZW4gLT0gNDsgLyogUmVtb3ZlIEZDUyAqLworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcm1sZW4gKyAyKTsKKwkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBJUCBoZWFkZXIgYWxpZ24gKi8KKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKKwkJCQkodW5zaWduZWQgY2hhciAqKXBEQi0+dmFkZHIsIGZybWxlbik7CisJCQlza2JfcHV0KHNrYiwgZnJtbGVuKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQluZXRpZl9yeChza2IpOwkvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCisJCX0KKwkJZWxzZSB7CisJCQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgeworCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCisJCQkJCXByaW50aygicnggbWlzc1xuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCisJCQkJCXByaW50aygicnggd2RvZ1xuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpCisJCQkJCXByaW50aygicnggcnVudFxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX09WRVJMRU4pCisJCQkJCXByaW50aygicnggb3ZlcmxlblxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCisJCQkJCXByaW50aygicnggY29sbFxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX01JSV9FUlJPUikKKwkJCQkJcHJpbnRrKCJyeCBtaWkgZXJyb3JcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9DUkNfRVJST1IpCisJCQkJCXByaW50aygicnggY3JjIGVycm9yXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTEVOX0VSUk9SKQorCQkJCQlwcmludGsoInJ4IGxlbiBlcnJvclxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1VfQ05UUkxfRlJBTUUpCisJCQkJCXByaW50aygicnggdSBjb250cm9sIGZyYW1lXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQorCQkJCQlwcmludGsoInJ4IG1pc3NcbiIpOworCQkJfQorCQl9CisJCXByeGQtPmJ1ZmZfc3RhdCA9ICh1MzIpKHBEQi0+ZG1hX2FkZHIgfCBSWF9ETUFfRU5BQkxFKTsKKwkJYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfaGVhZCArIDEpICYgKE5VTV9SWF9ETUEgLSAxKTsKKwkJYXVfc3luYygpOworCisJCS8qIG5leHQgZGVzY3JpcHRvciAqLworCQlwcnhkID0gYXVwLT5yeF9kbWFfcmluZ1thdXAtPnJ4X2hlYWRdOworCQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisKKwlpZiAoc3RhdHVzICYgVFhfRlJBTUVfQUJPUlRFRCkgeworCQlpZiAoIWF1cC0+cGh5X2RldiB8fCAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKSB7CisJCQlpZiAoc3RhdHVzICYgKFRYX0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7CisJCQkJLyogYW55IG90aGVyIHR4IGVycm9ycyBhcmUgb25seSB2YWxpZAorCQkJCSAqIGluIGhhbGYgZHVwbGV4IG1vZGUgKi8KKwkJCQlwcy0+dHhfZXJyb3JzKys7CisJCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlwcy0+dHhfZXJyb3JzKys7CisJCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWlmIChzdGF0dXMgJiAoVFhfTk9fQ0FSUklFUiB8IFRYX0xPU1NfQ0FSUklFUikpCisJCQkJcHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhY2tub3dsZWRnZQorICogdGhlIFRYIERPTkUgYml0cy4gIFRoaXMgaXMgYSBtdXN0IGlmIHRoZSBpcnEgaXMgc2V0dXAgYXMKKyAqIGVkZ2UgdHJpZ2dlcmVkLgorICovCitzdGF0aWMgdm9pZCBhdTEwMDBfdHhfYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOworCisJcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF90YWlsXTsKKworCXdoaWxlIChwdHhkLT5idWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKKwkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7CisJCXB0eGQtPmxlbiA9IDA7CisJCWF1X3N5bmMoKTsKKworCQlhdXAtPnR4X3RhaWwgPSAoYXVwLT50eF90YWlsICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOworCQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOworCisJCWlmIChhdXAtPnR4X2Z1bGwpIHsKKwkJCWF1cC0+dHhfZnVsbCA9IDA7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBdTEwMDAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisKKwkvKiBIYW5kbGUgUlggaW50ZXJydXB0cyBmaXJzdCB0byBtaW5pbWl6ZSBjaGFuY2Ugb2Ygb3ZlcnJ1biAqLworCisJYXUxMDAwX3J4KGRldik7CisJYXUxMDAwX3R4X2FjayhkZXYpOworCXJldHVybiBJUlFfUkVUVkFMKDEpOworfQorCitzdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKKwkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KKwkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOworCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50aygiJXM6IG9wZW46IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBkZXYtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOworCisJaWYgKGF1cC0+cGh5X2RldikKKwkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKKworCS8qIHN0b3AgdGhlIGRldmljZSAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBdTEwMDAgdHJhbnNtaXQgcm91dGluZS4KKyAqLworc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisJdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7CisJdTMyIGJ1ZmZfc3RhdDsKKwlkYl9kZXN0X3QgKnBEQjsKKwlpbnQgaTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA1KQorCQlwcmludGsoIiVzOiB0eDogYXVwICV4IGxlbj0lZCwgZGF0YT0lcCwgaGVhZCAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsICh1bnNpZ25lZClhdXAsIHNrYi0+bGVuLAorCQkJCXNrYi0+ZGF0YSwgYXVwLT50eF9oZWFkKTsKKworCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfaGVhZF07CisJYnVmZl9zdGF0ID0gcHR4ZC0+YnVmZl9zdGF0OworCWlmIChidWZmX3N0YXQgJiBUWF9ETUFfRU5BQkxFKSB7CisJCS8qIFdlJ3ZlIHdyYXBwZWQgYXJvdW5kIGFuZCB0aGUgdHJhbnNtaXR0ZXIgaXMgc3RpbGwgYnVzeSAqLworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWF1cC0+dHhfZnVsbCA9IDE7CisJCXJldHVybiAxOworCX0KKwllbHNlIGlmIChidWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKKwkJcHR4ZC0+bGVuID0gMDsKKwl9CisKKwlpZiAoYXVwLT50eF9mdWxsKSB7CisJCWF1cC0+dHhfZnVsbCA9IDA7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisKKwlwREIgPSBhdXAtPnR4X2RiX2ludXNlW2F1cC0+dHhfaGVhZF07CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKKwlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgeworCQlmb3IgKGk9c2tiLT5sZW47IGk8RVRIX1pMRU47IGkrKykgeworCQkJKChjaGFyICopcERCLT52YWRkcilbaV0gPSAwOworCQl9CisJCXB0eGQtPmxlbiA9IEVUSF9aTEVOOworCX0KKwllbHNlCisJCXB0eGQtPmxlbiA9IHNrYi0+bGVuOworCisJcHMtPnR4X3BhY2tldHMrKzsKKwlwcy0+dHhfYnl0ZXMgKz0gcHR4ZC0+bGVuOworCisJcHR4ZC0+YnVmZl9zdGF0ID0gcERCLT5kbWFfYWRkciB8IFRYX0RNQV9FTkFCTEU7CisJYXVfc3luYygpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9oZWFkICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIFR4IHJpbmcgaGFzIGJlZW4gZnVsbCBsb25nZXIgdGhhbiB0aGUgd2F0Y2hkb2cgdGltZW91dAorICogdmFsdWUuIFRoZSB0cmFuc21pdHRlciBtdXN0IGJlIGh1bmc/CisgKi8KK3N0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICIlczogYXUxMDAwX3R4X3RpbWVvdXQ6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOworCXJlc2V0X21hYyhkZXYpOworCWF1MTAwMF9pbml0KGRldik7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBzZXRfcnhfbW9kZTogZmxhZ3M9JXhcbiIsIGRldi0+bmFtZSwgZGV2LT5mbGFncyk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUFJPTUlTQ1VPVVM7CisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIHx8CisJCQkgICBkZXYtPm1jX2NvdW50ID4gTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCkgeworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUEFTU19BTExfTVVMVEk7CisJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXNzIGFsbCBtdWx0aWNhc3RcbiIsIGRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCQl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KKworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKKwkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJc2V0X2JpdChldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpPj4yNiwKKwkJCQkJKGxvbmcgKiltY19maWx0ZXIpOworCQl9CisJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2hpZ2ggPSBtY19maWx0ZXJbMV07CisJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2xvdyA9IG1jX2ZpbHRlclswXTsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX0hBU0hfTU9ERTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHJldHVybiAtRUlOVkFMOworCisJaWYgKCFhdXAtPnBoeV9kZXYpIHJldHVybiAtRUlOVkFMOyAvLyBQSFkgbm90IGNvbnRyb2xsYWJsZQorCisJcmV0dXJuIHBoeV9taWlfaW9jdGwoYXVwLT5waHlfZGV2LCBpZl9taWkocnEpLCBjbWQpOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQgPSAwOwpAQCAtNjIyLDcgKzEwNTgsNyBAQAogCXUzMiBiYXNlLCBtYWNlbjsKIAogCWlmIChwb3J0X251bSA+PSBOVU1fRVRIX0lOVEVSRkFDRVMpCi0gCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CiAKIAliYXNlICA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkciApOwogCW1hY2VuID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcik7CkBAIC04MDYsMjAwICsxMjQyLDI2IEBACiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIHRoZSBpbnRlcmZhY2UuCi0gKgotICogV2hlbiB0aGUgZGV2aWNlIHBvd2VycyB1cCwgdGhlIGNsb2NrcyBhcmUgZGlzYWJsZWQgYW5kIHRoZQotICogbWFjIGlzIGluIHJlc2V0IHN0YXRlLiAgV2hlbiB0aGUgaW50ZXJmYWNlIGlzIGNsb3NlZCwgd2UKLSAqIGRvIHRoZSBzYW1lIC0tIHJlc2V0IHRoZSBkZXZpY2UgYW5kIGRpc2FibGUgdGhlIGNsb2NrcyB0bwotICogY29uc2VydmUgcG93ZXIuIFRodXMsIHdoZW5ldmVyIGF1MTAwMF9pbml0KCkgaXMgY2FsbGVkLAotICogdGhlIGRldmljZSBzaG91bGQgYWxyZWFkeSBiZSBpbiByZXNldCBzdGF0ZS4KKyAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKKyAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYworICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgogICovCi1zdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQl1MzIgY29udHJvbDsKKwlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGksIGZvdW5kX29uZSA9IDA7CiAKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisJbnVtX2lmcyA9IE5VTV9FVEhfSU5URVJGQUNFUyAtIG5pOwogCi0JLyogYnJpbmcgdGhlIGRldmljZSBvdXQgb2YgcmVzZXQgKi8KLQllbmFibGVfbWFjKGRldiwgMSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KLQlhdXAtPm1hYy0+Y29udHJvbCA9IDA7Ci0JYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKLQlhdXAtPnR4X3RhaWwgPSBhdXAtPnR4X2hlYWQ7Ci0JYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKLQotCWF1cC0+bWFjLT5tYWNfYWRkcl9oaWdoID0gZGV2LT5kZXZfYWRkcls1XTw8OCB8IGRldi0+ZGV2X2FkZHJbNF07Ci0JYXVwLT5tYWMtPm1hY19hZGRyX2xvdyA9IGRldi0+ZGV2X2FkZHJbM108PDI0IHwgZGV2LT5kZXZfYWRkclsyXTw8MTYgfAotCQlkZXYtPmRldl9hZGRyWzFdPDw4IHwgZGV2LT5kZXZfYWRkclswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspIHsKLQkJYXVwLT5yeF9kbWFfcmluZ1tpXS0+YnVmZl9zdGF0IHw9IFJYX0RNQV9FTkFCTEU7CisJZm9yKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7CisJCWRldiA9IGF1MTAwMF9wcm9iZShpKTsKKwkJaWZsaXN0W2ldLmRldiA9IGRldjsKKwkJaWYgKGRldikKKwkJCWZvdW5kX29uZSsrOwogCX0KLQlhdV9zeW5jKCk7Ci0KLQljb250cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7Ci0jaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgotCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47Ci0jZW5kaWYKLQlpZiAoYXVwLT5waHlfZGV2KSB7Ci0JCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkKLQkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCQllbHNlCi0JCQljb250cm9sIHw9IE1BQ19ESVNBQkxFX1JYX09XTjsKLQl9IGVsc2UgeyAvKiBQSFktbGVzcyBvcCwgYXNzdW1lIGZ1bGwtZHVwbGV4ICovCi0JCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCX0KLQotCWF1cC0+bWFjLT5jb250cm9sID0gY29udHJvbDsKLQlhdXAtPm1hYy0+dmxhbjFfdGFnID0gMHg4MTAwOyAvKiBhY3RpdmF0ZSB2bGFuIHN1cHBvcnQgKi8KLQlhdV9zeW5jKCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7Ci0KLQlCVUdfT04oIWF1cC0+cGh5X2Rldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgewotCQkvLyBzcGVlZCBjaGFuZ2VkCi0KLQkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOwotCi0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKLQkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAotCi0JCS8qIHN3aXRjaGluZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8KLQkJaGFyZF9zdG9wKGRldik7Ci0KLQkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQotCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCi0JCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCi0JCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKLQkJZWxzZQotCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCi0JCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKLQkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7Ci0JCWF1X3N5bmNfZGVsYXkoMSk7Ci0KLQkJZW5hYmxlX3J4X3R4KGRldik7Ci0JCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OwotCi0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7Ci0JCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAotCi0JCWlmICghcGh5ZGV2LT5saW5rKSB7Ci0JCQkvKiBsaW5rIHdlbnQgZG93biAqLwotCQkJYXVwLT5vbGRfc3BlZWQgPSAwOwotCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7Ci0JCX0KLQotCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOwotCQlzdGF0dXNfY2hhbmdlID0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChzdGF0dXNfY2hhbmdlKSB7Ci0JCWlmIChwaHlkZXYtPmxpbmspCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKLQkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0KLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKLQkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoYXVwLT5waHlfZGV2KSB7Ci0JCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KLQkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOwotCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKLQl9Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiJXM6IG9wZW46IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBkZXYtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOwotCi0JaWYgKGF1cC0+cGh5X2RldikKLQkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKLQotCS8qIHN0b3AgdGhlIGRldmljZSAqLwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCisJaWYgKCFmb3VuZF9vbmUpCisJCXJldHVybiAtRU5PREVWOwogCXJldHVybiAwOwogfQogCkBAIC0xMDIyLDI5OCArMTI4NCwxNSBAQAogCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykKIAkJCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtqXSkKIAkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtqXSk7Ci0gCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKLSAJCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCi0gCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0gCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBNQUNfSU9TSVpFKTsKLSAJCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7CisJCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgorCQkJCQkgICAgIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAorCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOworCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0ubWFjZW5fYWRkciksIDQpOwogCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwotCi0JaWYgKHN0YXR1cyAmIFRYX0ZSQU1FX0FCT1JURUQpIHsKLQkJaWYgKCFhdXAtPnBoeV9kZXYgfHwgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkgewotCQkJaWYgKHN0YXR1cyAmIChUWF9KQUJfVElNRU9VVCB8IFRYX1VOREVSUlVOKSkgewotCQkJCS8qIGFueSBvdGhlciB0eCBlcnJvcnMgYXJlIG9ubHkgdmFsaWQKLQkJCQkgKiBpbiBoYWxmIGR1cGxleCBtb2RlICovCi0JCQkJcHMtPnR4X2Vycm9ycysrOwotCQkJCXBzLT50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcHMtPnR4X2Vycm9ycysrOwotCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgKFRYX05PX0NBUlJJRVIgfCBUWF9MT1NTX0NBUlJJRVIpKQotCQkJCXBzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JfQotfQotCi0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhY2tub3dsZWRnZQotICogdGhlIFRYIERPTkUgYml0cy4gIFRoaXMgaXMgYSBtdXN0IGlmIHRoZSBpcnEgaXMgc2V0dXAgYXMKLSAqIGVkZ2UgdHJpZ2dlcmVkLgotICovCi1zdGF0aWMgdm9pZCBhdTEwMDBfdHhfYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOwotCi0JcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF90YWlsXTsKLQotCXdoaWxlIChwdHhkLT5idWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKLQkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKLQkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7Ci0JCXB0eGQtPmxlbiA9IDA7Ci0JCWF1X3N5bmMoKTsKLQotCQlhdXAtPnR4X3RhaWwgPSAoYXVwLT50eF90YWlsICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOwotCQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOwotCi0JCWlmIChhdXAtPnR4X2Z1bGwpIHsKLQkJCWF1cC0+dHhfZnVsbCA9IDA7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIEF1MTAwMCB0cmFuc21pdCByb3V0aW5lLgotICovCi1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKLQl2b2xhdGlsZSB0eF9kbWFfdCAqcHR4ZDsKLQl1MzIgYnVmZl9zdGF0OwotCWRiX2Rlc3RfdCAqcERCOwotCWludCBpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygiJXM6IHR4OiBhdXAgJXggbGVuPSVkLCBkYXRhPSVwLCBoZWFkICVkXG4iLAotCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCwgc2tiLT5sZW4sCi0JCQkJc2tiLT5kYXRhLCBhdXAtPnR4X2hlYWQpOwotCi0JcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF9oZWFkXTsKLQlidWZmX3N0YXQgPSBwdHhkLT5idWZmX3N0YXQ7Ci0JaWYgKGJ1ZmZfc3RhdCAmIFRYX0RNQV9FTkFCTEUpIHsKLQkJLyogV2UndmUgd3JhcHBlZCBhcm91bmQgYW5kIHRoZSB0cmFuc21pdHRlciBpcyBzdGlsbCBidXN5ICovCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJYXVwLT50eF9mdWxsID0gMTsKLQkJcmV0dXJuIDE7Ci0JfQotCWVsc2UgaWYgKGJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgewotCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOwotCQlwdHhkLT5sZW4gPSAwOwotCX0KLQotCWlmIChhdXAtPnR4X2Z1bGwpIHsKLQkJYXVwLT50eF9mdWxsID0gMDsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLQotCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKLQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOwotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7Ci0JCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7Ci0JCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7Ci0JCX0KLQkJcHR4ZC0+bGVuID0gRVRIX1pMRU47Ci0JfQotCWVsc2UKLQkJcHR4ZC0+bGVuID0gc2tiLT5sZW47Ci0KLQlwcy0+dHhfcGFja2V0cysrOwotCXBzLT50eF9ieXRlcyArPSBwdHhkLT5sZW47Ci0KLQlwdHhkLT5idWZmX3N0YXQgPSBwREItPmRtYV9hZGRyIHwgVFhfRE1BX0VOQUJMRTsKLQlhdV9zeW5jKCk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7Ci0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7Ci0KLQlwcy0+cnhfcGFja2V0cysrOwotCWlmIChzdGF0dXMgJiBSWF9NQ0FTVF9GUkFNRSkKLQkJcHMtPm11bHRpY2FzdCsrOwotCi0JaWYgKHN0YXR1cyAmIFJYX0VSUk9SKSB7Ci0JCXBzLT5yeF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKLQkJCXBzLT5yeF9taXNzZWRfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiAoUlhfT1ZFUkxFTiB8IFJYX09WRVJMRU4gfCBSWF9MRU5fRVJST1IpKQotCQkJcHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKLQkJCXBzLT5yeF9jcmNfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiBSWF9DT0xMKQotCQkJcHMtPmNvbGxpc2lvbnMrKzsKLQl9Ci0JZWxzZQotCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7Ci0KLX0KLQotLyoKLSAqIEF1MTAwMCByZWNlaXZlIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jdm9sYXRpbGUgcnhfZG1hX3QgKnByeGQ7Ci0JdTMyIGJ1ZmZfc3RhdCwgc3RhdHVzOwotCWRiX2Rlc3RfdCAqcERCOwotCXUzMglmcm1sZW47Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCIlczogYXUxMDAwX3J4IGhlYWQgJWRcbiIsIGRldi0+bmFtZSwgYXVwLT5yeF9oZWFkKTsKLQotCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07Ci0JYnVmZl9zdGF0ID0gcHJ4ZC0+YnVmZl9zdGF0OwotCXdoaWxlIChidWZmX3N0YXQgJiBSWF9UX0RPTkUpICB7Ci0JCXN0YXR1cyA9IHByeGQtPnN0YXR1czsKLQkJcERCID0gYXVwLT5yeF9kYl9pbnVzZVthdXAtPnJ4X2hlYWRdOwotCQl1cGRhdGVfcnhfc3RhdHMoZGV2LCBzdGF0dXMpOwotCQlpZiAoIShzdGF0dXMgJiBSWF9FUlJPUikpICB7Ci0KLQkJCS8qIGdvb2QgZnJhbWUgKi8KLQkJCWZybWxlbiA9IChzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSyk7Ci0JCQlmcm1sZW4gLT0gNDsgLyogUmVtb3ZlIEZDUyAqLwotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcm1sZW4gKyAyKTsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBJUCBoZWFkZXIgYWxpZ24gKi8KLQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKLQkJCQkodW5zaWduZWQgY2hhciAqKXBEQi0+dmFkZHIsIGZybWxlbik7Ci0JCQlza2JfcHV0KHNrYiwgZnJtbGVuKTsKLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQluZXRpZl9yeChza2IpOwkvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCi0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgewotCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCi0JCQkJCXByaW50aygicnggbWlzc1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCi0JCQkJCXByaW50aygicnggd2RvZ1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpCi0JCQkJCXByaW50aygicnggcnVudFxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX09WRVJMRU4pCi0JCQkJCXByaW50aygicnggb3ZlcmxlblxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCi0JCQkJCXByaW50aygicnggY29sbFxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX01JSV9FUlJPUikKLQkJCQkJcHJpbnRrKCJyeCBtaWkgZXJyb3JcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9DUkNfRVJST1IpCi0JCQkJCXByaW50aygicnggY3JjIGVycm9yXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTEVOX0VSUk9SKQotCQkJCQlwcmludGsoInJ4IGxlbiBlcnJvclxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1VfQ05UUkxfRlJBTUUpCi0JCQkJCXByaW50aygicnggdSBjb250cm9sIGZyYW1lXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQotCQkJCQlwcmludGsoInJ4IG1pc3NcbiIpOwotCQkJfQotCQl9Ci0JCXByeGQtPmJ1ZmZfc3RhdCA9ICh1MzIpKHBEQi0+ZG1hX2FkZHIgfCBSWF9ETUFfRU5BQkxFKTsKLQkJYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfaGVhZCArIDEpICYgKE5VTV9SWF9ETUEgLSAxKTsKLQkJYXVfc3luYygpOwotCi0JCS8qIG5leHQgZGVzY3JpcHRvciAqLwotCQlwcnhkID0gYXVwLT5yeF9kbWFfcmluZ1thdXAtPnJ4X2hlYWRdOwotCQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBBdTEwMDAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqLwotc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0KLQkvKiBIYW5kbGUgUlggaW50ZXJydXB0cyBmaXJzdCB0byBtaW5pbWl6ZSBjaGFuY2Ugb2Ygb3ZlcnJ1biAqLwotCi0JYXUxMDAwX3J4KGRldik7Ci0JYXUxMDAwX3R4X2FjayhkZXYpOwotCXJldHVybiBJUlFfUkVUVkFMKDEpOwotfQotCi0KLS8qCi0gKiBUaGUgVHggcmluZyBoYXMgYmVlbiBmdWxsIGxvbmdlciB0aGFuIHRoZSB3YXRjaGRvZyB0aW1lb3V0Ci0gKiB2YWx1ZS4gVGhlIHRyYW5zbWl0dGVyIG11c3QgYmUgaHVuZz8KLSAqLwotc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdTEwMDBfdHhfdGltZW91dDogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0JcmVzZXRfbWFjKGRldik7Ci0JYXUxMDAwX2luaXQoZGV2KTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiJXM6IHNldF9yeF9tb2RlOiBmbGFncz0leFxuIiwgZGV2LT5uYW1lLCBkZXYtPmZsYWdzKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCi0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QUk9NSVNDVU9VUzsKLQl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAgfHwKLQkJCSAgIGRldi0+bWNfY291bnQgPiBNVUxUSUNBU1RfRklMVEVSX0xJTUlUKSB7Ci0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QQVNTX0FMTF9NVUxUSTsKLQkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhc3MgYWxsIG11bHRpY2FzdFxuIiwgZGV2LT5uYW1lKTsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwotCi0JCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQlzZXRfYml0KGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik+PjI2LAotCQkJCQkobG9uZyAqKW1jX2ZpbHRlcik7Ci0JCX0KLQkJYXVwLT5tYWMtPm11bHRpX2hhc2hfaGlnaCA9IG1jX2ZpbHRlclsxXTsKLQkJYXVwLT5tYWMtPm11bHRpX2hhc2hfbG93ID0gbWNfZmlsdGVyWzBdOwotCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOwotCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfSEFTSF9NT0RFOwotCX0KLX0KLQotc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlCi0KLQlyZXR1cm4gcGh5X21paV9pb2N0bChhdXAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7Ci19Ci0KIG1vZHVsZV9pbml0KGF1MTAwMF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChhdTEwMDBfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXg4ODc5Ni5jIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCmluZGV4IGE0ZWI2YzQuLjYyZDljOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYworKysgYi9kcml2ZXJzL25ldC9heDg4Nzk2LmMKQEAgLTkzLDYgKzkzLDcgQEAKIAogCXVuc2lnbmVkIGNoYXIJCSBydW5uaW5nOwogCXVuc2lnbmVkIGNoYXIJCSByZXN1bWVfb3BlbjsKKwl1bnNpZ25lZCBpbnQJCSBpcnFmbGFnczsKIAogCXUzMgkJCSByZWdfb2Zmc2V0c1sweDIwXTsKIH07CkBAIC00NzQsNyArNDc1LDggQEAKIAogCWRldl9kYmcoJmF4LT5kZXYtPmRldiwgIiVzOiBvcGVuXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGF4X2VpX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBheF9laV9pbnRlcnJ1cHQsIGF4LT5pcnFmbGFncywKKwkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTczMSwxMiArNzMzLDE5IEBACiAJLyogbG9hZCB0aGUgbWFjLWFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlIGlmIHRoaXMgaXMgdGhlCiAJICogZmlyc3QgdGltZSB3ZSd2ZSBpbml0aWFsaXNlZCAqLwogCi0JaWYgKGZpcnN0X2luaXQgJiYgYXgtPnBsYXQtPmZsYWdzICYgQVhGTEdfTUFDX0ZST01ERVYpIHsKLQkJZWlfb3V0YihFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxICsgRTgzOTBfU1RPUCwKLQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJaWYgKGZpcnN0X2luaXQpIHsKKwkJaWYgKGF4LT5wbGF0LT5mbGFncyAmIEFYRkxHX01BQ19GUk9NREVWKSB7CisJCQllaV9vdXRiKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEgKyBFODM5MF9TVE9QLAorCQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKwkJCQlkZXYtPmRldl9hZGRyW2ldID0KKwkJCQkJZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJfQogCi0JCWZvciAoaSA9IDAgOyBpIDwgRVRIRVJfQUREUl9MRU4gOyBpKyspCi0JCQlkZXYtPmRldl9hZGRyW2ldID0gZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJaWYgKChheC0+cGxhdC0+ZmxhZ3MgJiBBWEZMR19NQUNfRlJPTVBMQVRGT1JNKSAmJgorCQkgICAgIGF4LT5wbGF0LT5tYWNfYWRkcikKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBheC0+cGxhdC0+bWFjX2FkZHIsCisJCQkJRVRIRVJfQUREUl9MRU4pOwogCX0KIAogCWF4X3Jlc2V0XzgzOTAoZGV2KTsKQEAgLTgyOSw3ICs4MzgsNyBAQAogCXN0cnVjdCBheF9kZXZpY2UgICpheDsKIAlzdHJ1Y3QgcmVzb3VyY2UgICAqcmVzOwogCXNpemVfdCBzaXplOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBheF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgYXhfZGV2aWNlKSk7CiAJaWYgKGRldiA9PSBOVUxMKQpAQCAtODUwLDEyICs4NTksMTQgQEAKIAogCS8qIGZpbmQgdGhlIHBsYXRmb3JtIHJlc291cmNlcyAqLwogCi0JcmV0ICA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHJldCA8IDApIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJUlEgc3BlY2lmaWVkXG4iKTsKIAkJZ290byBleGl0X21lbTsKIAl9Ci0JZGV2LT5pcnEgPSByZXQ7CisKKwlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisJYXgtPmlycWZsYWdzID0gcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggZGM1ZjA1MS4uNWM4NDU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTg3NCw3ICs4NzQsNyBAQAogCX0KIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWI0NF9lbmFibGVfaW50cyhicCk7CiAJfQogCkBAIC05MDYsMTMgKzkwNiwxMyBAQAogCQkJZ290byBpcnFfYWNrOwogCQl9CiAKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKIAkJCS8qIE5PVEU6IFRoZXNlIHdyaXRlcyBhcmUgcG9zdGVkIGJ5IHRoZSByZWFkYmFjayBvZgogCQkJICogICAgICAgdGhlIElTVEFUIHJlZ2lzdGVyIGJlbG93LgogCQkJICovCiAJCQlicC0+aXN0YXQgPSBpc3RhdDsKIAkJCV9fYjQ0X2Rpc2FibGVfaW50cyhicCk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZicC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtOTczLDcgKzk3Myw3IEBACiAJCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgbWFwcGluZywgbGVuLAogCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCi0JCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2IobGVuLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJCWJvdW5jZV9za2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LCBsZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKIAkJaWYgKCFib3VuY2Vfc2tiKQogCQkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAppbmRleCBmMzI3YmU1Li5jNDlkZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTEwMCw5ICsxMDAsOSBAQAogCXUzMiBiZV90eF93cmJzOwkJLyogbnVtYmVyIG9mIHR4IFdSQnMgdXNlZCAqLwogCXUzMiBiZV90eF9ldmVudHM7CS8qIG51bWJlciBvZiB0eCBjb21wbGV0aW9uIGV2ZW50cyAgKi8KIAl1MzIgYmVfdHhfY29tcGw7CS8qIG51bWJlciBvZiB0eCBjb21wbGV0aW9uIGVudHJpZXMgcHJvY2Vzc2VkICovCi0JdTY0IGJlX3R4X2ppZmZpZXM7Ci0JdWxvbmcgYmVfdHhfYnl0ZXM7Ci0JdWxvbmcgYmVfdHhfYnl0ZXNfcHJldjsKKwl1bG9uZyBiZV90eF9qaWZmaWVzOworCXU2NCBiZV90eF9ieXRlczsKKwl1NjQgYmVfdHhfYnl0ZXNfcHJldjsKIAl1MzIgYmVfdHhfcmF0ZTsKIAogCXUzMiBjYWNoZV9iYXJyaWVyWzE2XTsKQEAgLTExMyw5ICsxMTMsOSBAQAogCXUzMiBiZV9yeF9jb21wbDsJLyogbnVtYmVyIG9mIHJ4IGNvbXBsZXRpb24gZW50cmllcyBwcm9jZXNzZWQgKi8KIAl1MzIgYmVfbHJvX2hncmFtX2RhdGFbOF07CS8qIGhpc3RvZ3JhbSBvZiBMUk8gZGF0YSBwYWNrZXRzICovCiAJdTMyIGJlX2xyb19oZ3JhbV9hY2tbOF07CS8qIGhpc3RvZ3JhbSBvZiBMUk8gQUNLcyAqLwotCXU2NCBiZV9yeF9qaWZmaWVzOwotCXVsb25nIGJlX3J4X2J5dGVzOwotCXVsb25nIGJlX3J4X2J5dGVzX3ByZXY7CisJdWxvbmcgYmVfcnhfamlmZmllczsKKwl1NjQgYmVfcnhfYnl0ZXM7CisJdTY0IGJlX3J4X2J5dGVzX3ByZXY7CiAJdTMyIGJlX3J4X3JhdGU7CiAJLyogbnVtYmVyIG9mIG5vbiBldGhlciB0eXBlIElJIGZyYW1lcyBkcm9wcGVkIHdoZXJlCiAJICogZnJhbWUgbGVuID4gbGVuZ3RoIGZpZWxkIG9mIE1hYyBIZHIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCAwZWNhZmZiLi45Yjc1YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImJlLmgiCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVIpOwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMpOwpAQCAtMjQ1LDE5ICsyNDYsMjkgQEAKIC8qIFVwZGF0ZSB0aGUgRVEgZGVsYXkgbiBCRSBiYXNlZCBvbiB0aGUgUlggZnJhZ3MgY29uc3VtZWQgLyBzZWMgKi8KIHN0YXRpYyB2b2lkIGJlX3J4X2VxZF91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdTMyIGVxZDsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CiAJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gJmFkYXB0ZXItPnN0YXRzLmRydnJfc3RhdHM7CisJdWxvbmcgbm93ID0gamlmZmllczsKKwl1MzIgZXFkOworCisJaWYgKCFyeF9lcS0+ZW5hYmxlX2FpYykKKwkJcmV0dXJuOworCisJLyogV3JhcHBlZCBhcm91bmQgKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpKSB7CisJCXN0YXRzLT5yeF9mcHNfamlmZmllcyA9IG5vdzsKKwkJcmV0dXJuOworCX0KIAogCS8qIFVwZGF0ZSBvbmNlIGEgc2Vjb25kICovCi0JaWYgKCgoamlmZmllcyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgPCBIWikgfHwgcnhfZXEtPmVuYWJsZV9haWMgPT0gMCkKKwlpZiAoKG5vdyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgPCBIWikKIAkJcmV0dXJuOwogCiAJc3RhdHMtPmJlX3J4X2ZwcyA9IChzdGF0cy0+YmVfcnhfZnJhZ3MgLSBzdGF0cy0+YmVfcHJldl9yeF9mcmFncykgLwotCQkJKChqaWZmaWVzIC0gc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSAvIEhaKTsKKwkJCSgobm93IC0gc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSAvIEhaKTsKIAotCXN0YXRzLT5yeF9mcHNfamlmZmllcyA9IGppZmZpZXM7CisJc3RhdHMtPnJ4X2Zwc19qaWZmaWVzID0gbm93OwogCXN0YXRzLT5iZV9wcmV2X3J4X2ZyYWdzID0gc3RhdHMtPmJlX3J4X2ZyYWdzOwogCWVxZCA9IHN0YXRzLT5iZV9yeF9mcHMgLyAxMTAwMDA7CiAJZXFkID0gZXFkIDw8IDM7CkBAIC0yODAsMjYgKzI5MSw0NyBAQAogCXJldHVybiAmYWRhcHRlci0+c3RhdHMubmV0X3N0YXRzOwogfQogCitzdGF0aWMgdTMyIGJlX2NhbGNfcmF0ZSh1NjQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgdGlja3MpCit7CisJdTY0IHJhdGUgPSBieXRlczsKKworCWRvX2RpdihyYXRlLCB0aWNrcyAvIEhaKTsKKwlyYXRlIDw8PSAzOwkJCS8qIGJ5dGVzL3NlYyAtPiBiaXRzL3NlYyAqLworCWRvX2RpdihyYXRlLCAxMDAwMDAwdWwpOwkvKiBNQi9TZWMgKi8KKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgdm9pZCBiZV90eF9yYXRlX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisKKwkvKiBXcmFwcGVkIGFyb3VuZD8gKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBzdGF0cy0+YmVfdHhfamlmZmllcykpIHsKKwkJc3RhdHMtPmJlX3R4X2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CisKKwkvKiBVcGRhdGUgdHggcmF0ZSBvbmNlIGluIHR3byBzZWNvbmRzICovCisJaWYgKChub3cgLSBzdGF0cy0+YmVfdHhfamlmZmllcykgPiAyICogSFopIHsKKwkJc3RhdHMtPmJlX3R4X3JhdGUgPSBiZV9jYWxjX3JhdGUoc3RhdHMtPmJlX3R4X2J5dGVzCisJCQkJCQkgIC0gc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYsCisJCQkJCQkgbm93IC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpOworCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IG5vdzsKKwkJc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfdHhfYnl0ZXM7CisJfQorfQorCiBzdGF0aWMgdm9pZCBiZV90eF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgYm9vbCBzdG9wcGVkKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CiAJc3RhdHMtPmJlX3R4X3JlcXMrKzsKIAlzdGF0cy0+YmVfdHhfd3JicyArPSB3cmJfY250OwogCXN0YXRzLT5iZV90eF9ieXRlcyArPSBjb3BpZWQ7CiAJaWYgKHN0b3BwZWQpCiAJCXN0YXRzLT5iZV90eF9zdG9wcysrOwotCi0JLyogVXBkYXRlIHR4IHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSA+IDIgKiBIWikgewotCQl1MzIgcjsKLQkJciA9IChzdGF0cy0+YmVfdHhfYnl0ZXMgLSBzdGF0cy0+YmVfdHhfYnl0ZXNfcHJldikgLwotCQkJKCh1MzIpIChqaWZmaWVzIC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpIC8gSFopOwotCQlyID0gKHIgLyAxMDAwMDAwKTsJCQkvKiBNIGJ5dGVzL3MgKi8KLQkJc3RhdHMtPmJlX3R4X3JhdGUgPSAociAqIDgpOwkvKiBNIGJpdHMvcyAqLwotCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IGppZmZpZXM7Ci0JCXN0YXRzLT5iZV90eF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3R4X2J5dGVzOwotCX0KIH0KIAogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBXUkIgZW50cmllcyBuZWVkZWQgdG8geG1pdCBkYXRhIGluIGFuIHNrYiAqLwpAQCAtNTczLDI2ICs2MDUsMzYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgcGt0c2l6ZSwKLQkJCXUxNiBudW1mcmFncykKK3N0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOwotCXUzMiByYXRlOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisJdWxvbmcgbm93ID0gamlmZmllczsKKworCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPmJlX3J4X2ppZmZpZXMpKSB7CisJCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KKwlpZiAoKG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSA8IDIgKiBIWikKKwkJcmV0dXJuOworCisJc3RhdHMtPmJlX3J4X3JhdGUgPSBiZV9jYWxjX3JhdGUoc3RhdHMtPmJlX3J4X2J5dGVzCisJCQkJCSAgLSBzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldiwKKwkJCQkJIG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKTsKKwlzdGF0cy0+YmVfcnhfamlmZmllcyA9IG5vdzsKKwlzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldiA9IHN0YXRzLT5iZV9yeF9ieXRlczsKK30KKworc3RhdGljIHZvaWQgYmVfcnhfc3RhdHNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQl1MzIgcGt0c2l6ZSwgdTE2IG51bWZyYWdzKQoreworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CiAKIAlzdGF0cy0+YmVfcnhfY29tcGwrKzsKIAlzdGF0cy0+YmVfcnhfZnJhZ3MgKz0gbnVtZnJhZ3M7CiAJc3RhdHMtPmJlX3J4X2J5dGVzICs9IHBrdHNpemU7Ci0KLQkvKiBVcGRhdGUgdGhlIHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSA8IDIgKiBIWikKLQkJcmV0dXJuOwotCi0JcmF0ZSA9IChzdGF0cy0+YmVfcnhfYnl0ZXMgLSBzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldikgLwotCQkoKHUzMikgKGppZmZpZXMgLSBzdGF0cy0+YmVfcnhfamlmZmllcykgLyBIWik7Ci0JcmF0ZSA9IChyYXRlIC8gMTAwMDAwMCk7CS8qIE1CL1NlYyAqLwotCXN0YXRzLT5iZV9yeF9yYXRlID0gKHJhdGUgKiA4KTsgCS8qIE1lZ2EgQml0cy9TZWMgKi8KLQlzdGF0cy0+YmVfcnhfamlmZmllcyA9IGppZmZpZXM7Ci0Jc3RhdHMtPmJlX3J4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfcnhfYnl0ZXM7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICoKQEAgLTcwMCw3ICs3NDIsNyBAQAogCQltZW1zZXQocGFnZV9pbmZvLCAwLCBzaXplb2YoKnBhZ2VfaW5mbykpOwogCX0KIAotCWJlX3J4X3JhdGVfdXBkYXRlKGFkYXB0ZXIsIHBrdHNpemUsIG51bV9yY3ZkKTsKKwliZV9yeF9zdGF0c191cGRhdGUoYWRhcHRlciwgcGt0c2l6ZSwgbnVtX3JjdmQpOwogCXJldHVybjsKIH0KIApAQCAtNzk5LDcgKzg0MSw3IEBACiAJCQl2aWQsIE5VTEwsIDApOwogCX0KIAotCWJlX3J4X3JhdGVfdXBkYXRlKGFkYXB0ZXIsIHBrdF9zaXplLCBudW1fcmN2ZCk7CisJYmVfcnhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHBrdF9zaXplLCBudW1fcmN2ZCk7CiAJcmV0dXJuOwogfQogCkBAIC04NDEsNyArODgzLDYgQEAKIAl1NjQgcGFnZV9kbWFhZGRyID0gMCwgZnJhZ19kbWFhZGRyOwogCXUzMiBwb3N0ZWQsIHBhZ2Vfb2Zmc2V0ID0gMDsKIAotCiAJcGFnZV9pbmZvID0gJnBhZ2VfaW5mb190YmxbcnhxLT5oZWFkXTsKIAlmb3IgKHBvc3RlZCA9IDA7IHBvc3RlZCA8IE1BWF9SWF9QT1NUICYmICFwYWdlX2luZm8tPnBhZ2U7IHBvc3RlZCsrKSB7CiAJCWlmICghcGFnZXApIHsKQEAgLTEzMDUsNiArMTM0Niw5IEBACiAJLyogU2V0IEVRIGRlbGF5ICovCiAJYmVfcnhfZXFkX3VwZGF0ZShhZGFwdGVyKTsKIAorCWJlX3R4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOworCWJlX3J4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOworCiAJaWYgKGFkYXB0ZXItPnJ4X3Bvc3Rfc3RhcnZlZCkgewogCQlhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQgPSBmYWxzZTsKIAkJYmVfcG9zdF9yeF9mcmFncyhhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCmluZGV4IDc4ZTMxYWEuLjlhZmU4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwpAQCAtNDE1LDExICs0MTUsMTEgQEAKIAl9CiAKICNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQ19STUlJKQotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfUk1JSSk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfUk1JSSk7CiAjZWxzZQotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksICZiZmluX21hY19hZGp1c3RfbGluaywKKwkJCTAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogI2VuZGlmCiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgogCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZCwgbWRjX2Nsaz0lZEh6KG1kY19kaXY9JWQpIgogCSAgICAgICAiQHNjbGs9JWRNSHopXG4iLAotCSAgICAgICBEUlZfTkFNRSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEsCisJICAgICAgIERSVl9OQU1FLCBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEsCiAJICAgICAgIE1EQ19DTEssIG1kY19kaXYsIHNjbGsvMTAwMDAwMCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwogCXN0cmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmRldi5idXNfaWQpOworCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYmZpbl9tYWNfZXRodG9vbF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibWFjLmMgYi9kcml2ZXJzL25ldC9ibWFjLmMKaW5kZXggOGE1NDZhMy4uNDRkMDE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JtYWMuYwpAQCAtMTA2Miw3ICsxMDYyLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBibWFjX21pc2NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7Ci0Jc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBzdGF0dXMgPSBibXJlYWQoZGV2LCBTVEFUVVMpOwogCWlmIChtaXNjaW50Y291bnQrKyA8IDEwKSB7CiAJCVhYREVCVUcoKCJibWFjX21pc2NfaW50clxuIikpOwpAQCAtMTI0MCw3ICsxMjM5LDcgQEAKIHsKIAlzdHJ1Y3QgYm1hY19kYXRhICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RyY3B5KGluZm8tPmRyaXZlciwgImJtYWMiKTsKLQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGJwLT5tZGV2LT5vZmRldi5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZicC0+bWRldi0+b2ZkZXYuZGV2KSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm1hY19ldGh0b29sX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA2YjY1MzBmLi5hZDQ0NmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC0xNDk3LDYgKzE0OTcsOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3JlbW90ZV9waHkoc3RydWN0IGJueDIgKmJwLCB1OCBwb3J0KQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCXUzMiBzcGVlZF9hcmcgPSAwLCBwYXVzZV9hZHY7CiAKQEAgLTE1NTQsNiArMTU1Niw4IEBACiAKIHN0YXRpYyBpbnQKIGJueDJfc2V0dXBfc2VyZGVzX3BoeShzdHJ1Y3QgYm54MiAqYnAsIHU4IHBvcnQpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJdTMyIGFkdiwgYm1jcjsKIAl1MzIgbmV3X2FkdiA9IDA7CkBAIC0xODY2LDYgKzE4NzAsOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX2NvcHBlcl9waHkoc3RydWN0IGJueDIgKmJwKQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCXUzMiBibWNyOwogCXUzMiBuZXdfYm1jcjsKQEAgLTE5NjMsNiArMTk2OSw4IEBACiAKIHN0YXRpYyBpbnQKIGJueDJfc2V0dXBfcGh5KHN0cnVjdCBibngyICpicCwgdTggcG9ydCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAlpZiAoYnAtPmxvb3BiYWNrID09IE1BQ19MT09QQkFDSykKIAkJcmV0dXJuIDA7CkBAIC0yMTc2LDYgKzIxODQsOCBAQAogCiBzdGF0aWMgaW50CiBibngyX2luaXRfcGh5KHN0cnVjdCBibngyICpicCwgaW50IHJlc2V0X3BoeSkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgdmFsOwogCWludCByYyA9IDA7CkBAIC0zMDA1LDYgKzMwMTUsOCBAQAogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCX0KIAorCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgYm5hcGkgLSAmYnAtPmJueDJfbmFwaVswXSk7CisKICNpZmRlZiBCQ01fVkxBTgogCQlpZiAoaHdfdmxhbikKIAkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGJwLT52bGdycCwgdnRhZyk7CkBAIC0zMDYxLDcgKzMwNzMsNyBAQAogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0zMDc4LDcgKzMwOTAsNyBAQAogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0zMTE0LDkgKzMxMjYsOSBAQAogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmJuYXBpLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmJuYXBpLT5uYXBpKSkgewogCQlibmFwaS0+bGFzdF9zdGF0dXNfaWR4ID0gc2Jsay0+c3RhdHVzX2lkeDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMjI2LDcgKzMyMzgsNyBAQAogCQlybWIoKTsKIAkJaWYgKGxpa2VseSghYm54Ml9oYXNfZmFzdF93b3JrKGJuYXBpKSkpIHsKIAotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJUkVHX1dSKGJwLCBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRCwgYm5hcGktPmludF9udW0gfAogCQkJICAgICAgIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElEIHwKIAkJCSAgICAgICBibmFwaS0+bGFzdF9zdGF0dXNfaWR4KTsKQEAgLTMyNTksNyArMzI3MSw3IEBACiAKIAkJcm1iKCk7CiAJCWlmIChsaWtlbHkoIWJueDJfaGFzX3dvcmsoYm5hcGkpKSkgewotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJaWYgKGxpa2VseShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfVVNJTkdfTVNJX09SX01TSVgpKSB7CiAJCQkJUkVHX1dSKGJwLCBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRCwKIAkJCQkgICAgICAgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5ERVhfVkFMSUQgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKaW5kZXggM2NmMmI5Mi4uYTMyOWJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC5oCkBAIC0yNSw2ICsyNSwxNiBAQAogI2VuZGlmCiAKIAorI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQorCisjZGVmaW5lIEJOWDJYX05FV19OQVBJCisKKworI2luY2x1ZGUgImJueDJ4X3JlZy5oIgorI2luY2x1ZGUgImJueDJ4X2Z3X2RlZnMuaCIKKyNpbmNsdWRlICJibngyeF9oc2kuaCIKKyNpbmNsdWRlICJibngyeF9saW5rLmgiCisKIC8qIGVycm9yL2RlYnVnIHByaW50cyAqLwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJ4IgpAQCAtOTIsMTIgKzEwMiwxMCBAQAogCiAjZGVmaW5lIFJFR19SRChicCwgb2Zmc2V0KQkJcmVhZGwoUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19SRDgoYnAsIG9mZnNldCkJCXJlYWRiKFJFR19BRERSKGJwLCBvZmZzZXQpKQotI2RlZmluZSBSRUdfUkQ2NChicCwgb2Zmc2V0KQkJcmVhZHEoUkVHX0FERFIoYnAsIG9mZnNldCkpCiAKICNkZWZpbmUgUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkJCXdyaXRlbCgodTMyKXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19XUjgoYnAsIG9mZnNldCwgdmFsKQl3cml0ZWIoKHU4KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19XUjE2KGJwLCBvZmZzZXQsIHZhbCkJd3JpdGV3KCh1MTYpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1dSMzIoYnAsIG9mZnNldCwgdmFsKQlSRUdfV1IoYnAsIG9mZnNldCwgdmFsKQogCiAjZGVmaW5lIFJFR19SRF9JTkQoYnAsIG9mZnNldCkJCWJueDJ4X3JlZ19yZF9pbmQoYnAsIG9mZnNldCkKICNkZWZpbmUgUkVHX1dSX0lORChicCwgb2Zmc2V0LCB2YWwpCWJueDJ4X3JlZ193cl9pbmQoYnAsIG9mZnNldCwgdmFsKQpAQCAtMTU0LDggKzE2Miw2IEBACiAjZGVmaW5lIFNHRV9QQUdFX1NISUZUCQkJUEFHRV9TSElGVAogI2RlZmluZSBTR0VfUEFHRV9BTElHTihhZGRyKQkJUEFHRV9BTElHTigodHlwZW9mKFBBR0VfU0laRSkpYWRkcikKIAotI2RlZmluZSBCQ01fUlhfRVRIX1BBWUxPQURfQUxJR04JNjQKLQogLyogU0dFIHJpbmcgcmVsYXRlZCBtYWNyb3MgKi8KICNkZWZpbmUgTlVNX1JYX1NHRV9QQUdFUwkJMgogI2RlZmluZSBSWF9TR0VfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZXRoX3J4X3NnZSkpCkBAIC0xODcsNiArMTkzLDQzIEBACiAjZGVmaW5lIE5FWFRfU0dFX01BU0tfRUxFTShlbCkJCSgoKGVsKSArIDEpICYgUlhfU0dFX01BU0tfTEVOX01BU0spCiAKIAorc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzIHsKKwl1MzIgdG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB2YWxpZF9ieXRlc19yZWNlaXZlZF9oaTsKKwl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG87CisKKwl1MzIgZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2xvOworCXUzMiBldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaTsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG87CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9oaTsKKwl1MzIgbm9fYnVmZl9kaXNjYXJkX2xvOworCisJdTMyIGRyaXZlcl94b2ZmOworCXUzMiByeF9lcnJfZGlzY2FyZF9wa3Q7CisJdTMyIHJ4X3NrYl9hbGxvY19mYWlsZWQ7CisJdTMyIGh3X2NzdW1fZXJyOworfTsKKworI2RlZmluZSBCTlgyWF9OVU1fUV9TVEFUUwkJMTEKKyNkZWZpbmUgUV9TVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKKwkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMsIHN0YXRfbmFtZSkgLyA0KQorCiBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggewogCiAJc3RydWN0IG5hcGlfc3RydWN0CW5hcGk7CkBAIC0yMjgsMjAgKzI3MSwxNSBAQAogCXU4CQkJaW5kZXg7CS8qIG51bWJlciBpbiBmcCBhcnJheSAqLwogCXU4CQkJY2xfaWQ7CS8qIGV0aCBjbGllbnQgaWQgKi8KIAl1OAkJCXNiX2lkOwkvKiBzdGF0dXMgYmxvY2sgbnVtYmVyIGluIEhXICovCi0jZGVmaW5lIEZQX0lEWChmcCkJCQkoZnAtPmluZGV4KQotI2RlZmluZSBGUF9DTF9JRChmcCkJCQkoZnAtPmNsX2lkKQotI2RlZmluZSBCUF9DTF9JRChicCkJCQkoYnAtPmZwWzBdLmNsX2lkKQotI2RlZmluZSBGUF9TQl9JRChmcCkJCQkoZnAtPnNiX2lkKQotI2RlZmluZSBDTklDX1NCX0lECQkJMAogCiAJdTE2CQkJdHhfcGt0X3Byb2Q7CiAJdTE2CQkJdHhfcGt0X2NvbnM7CiAJdTE2CQkJdHhfYmRfcHJvZDsKIAl1MTYJCQl0eF9iZF9jb25zOwotCXUxNgkJCSp0eF9jb25zX3NiOworCV9fbGUxNgkJCSp0eF9jb25zX3NiOwogCi0JdTE2CQkJZnBfY19pZHg7Ci0JdTE2CQkJZnBfdV9pZHg7CisJX19sZTE2CQkJZnBfY19pZHg7CisJX19sZTE2CQkJZnBfdV9pZHg7CiAKIAl1MTYJCQlyeF9iZF9wcm9kOwogCXUxNgkJCXJ4X2JkX2NvbnM7CkBAIC0yNTAsOCArMjg4LDggQEAKIAl1MTYJCQlyeF9zZ2VfcHJvZDsKIAkvKiBUaGUgbGFzdCBtYXhpbWFsIGNvbXBsZXRlZCBTR0UgKi8KIAl1MTYJCQlsYXN0X21heF9zZ2U7Ci0JdTE2CQkJKnJ4X2NvbnNfc2I7Ci0JdTE2CQkJKnJ4X2JkX2NvbnNfc2I7CisJX19sZTE2CQkJKnJ4X2NvbnNfc2I7CisJX19sZTE2CQkJKnJ4X2JkX2NvbnNfc2I7CiAKIAl1bnNpZ25lZCBsb25nCQl0eF9wa3QsCiAJCQkJcnhfcGt0LApAQCAtMjY2LDYgKzMwNCwxMiBAQAogCXU2NAkJCXRwYV9xdWV1ZV91c2VkOwogI2VuZGlmCiAKKwlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3RjbGllbnQ7CisJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF91Y2xpZW50OworCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfeGNsaWVudDsKKwlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgZXRoX3Ffc3RhdHM7CisKKwljaGFyCQkJbmFtZVtJRk5BTVNJWl07CiAJc3RydWN0IGJueDJ4CQkqYnA7IC8qIHBhcmVudCAqLwogfTsKIApAQCAtNDAxLDEwICs0NDUsMTMgQEAKICNkZWZpbmUgQk5YMlhfUlhfQ1NVTV9PSyhjcWUpIFwKIAkJCSghKEJOWDJYX0w0X0NTVU1fRVJSKGNxZSkgfHwgQk5YMlhfSVBfQ1NVTV9FUlIoY3FlKSkpCiAKKyNkZWZpbmUgQk5YMlhfUFJTX0ZMQUdfT1ZFUkVUSF9JUFY0KGZsYWdzKSBcCisJCQkJKCgobGUxNl90b19jcHUoZmxhZ3MpICYgXAorCQkJCSAgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTCkgPj4gXAorCQkJCSAgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MX1NISUZUKSBcCisJCQkJID09IFBSU19GTEFHX09WRVJFVEhfSVBWNCkKICNkZWZpbmUgQk5YMlhfUlhfU1VNX0ZJWChjcWUpIFwKLQkJCSgobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYgXAotCQkJICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0wpID09IFwKLQkJCSAoMSA8PCBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0xfU0hJRlQpKQorCUJOWDJYX1BSU19GTEFHX09WRVJFVEhfSVBWNChjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncykKIAogCiAjZGVmaW5lIEZQX1VTQl9GVU5DX09GRgkJCSgyICsgMipIQ19VU1RPUk1fU0JfTlVNX0lORElDRVMpCkBAIC00NzgsMTEgKzUyNSw4IEBACiAJdTMyCQkJc2htZW1fYmFzZTsKIAogCXUzMgkJCWh3X2NvbmZpZzsKLQl1MzIJCQlib2FyZDsKIAogCXUzMgkJCWJjX3ZlcjsKLQotCWNoYXIJCQkqbmFtZTsKIH07CiAKIApAQCAtNTI4LDYgKzU3Miw3IEBACiAKIAkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHBoeSBhY2Nlc3NlcyAqLwogCXN0cnVjdCBtdXRleAkJcGh5X211dGV4OworCWludAkJCW5lZWRfaHdfbG9jazsKIAogCXUzMgkJCXBvcnRfc3R4OwogCkBAIC01NzMsNiArNjE4LDEwIEBACiAKIAl1MzIgZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGk7CiAJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2xvOworCXUzMiBldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaTsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG87CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9oaTsKKwl1MzIgbm9fYnVmZl9kaXNjYXJkX2xvOwogCiAJdTMyIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpOwogCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbzsKQEAgLTY1MSwxOSArNzAwLDIwIEBACiAJdTMyIHR4X3N0YXRfYm1hY191ZmxfaGk7CiAJdTMyIHR4X3N0YXRfYm1hY191ZmxfbG87CiAKLQl1MzIgYnJiX2Ryb3BfaGk7Ci0JdTMyIGJyYl9kcm9wX2xvOwotCXUzMiBicmJfdHJ1bmNhdGVfaGk7Ci0JdTMyIGJyYl90cnVuY2F0ZV9sbzsKLQotCXUzMiBqYWJiZXJfcGFja2V0c19yZWNlaXZlZDsKKwl1MzIgcGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpOworCXUzMiBwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG87CisJdTMyIHBhdXNlX2ZyYW1lc19zZW50X2hpOworCXUzMiBwYXVzZV9mcmFtZXNfc2VudF9sbzsKIAogCXUzMiBldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfaGk7CiAJdTMyIGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19sbzsKIAl1MzIgZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaTsKIAl1MzIgZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19sbzsKIAotCXUzMiBub19idWZmX2Rpc2NhcmQ7CisJdTMyIGJyYl9kcm9wX2hpOworCXUzMiBicmJfZHJvcF9sbzsKKwl1MzIgYnJiX3RydW5jYXRlX2hpOworCXUzMiBicmJfdHJ1bmNhdGVfbG87CiAKIAl1MzIgbWFjX2ZpbHRlcl9kaXNjYXJkOwogCXUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7CkBAIC02NzQsMTcgKzcyNCwxNiBAQAogCXUzMiByeF9lcnJfZGlzY2FyZF9wa3Q7CiAJdTMyIHJ4X3NrYl9hbGxvY19mYWlsZWQ7CiAJdTMyIGh3X2NzdW1fZXJyOworCisJdTMyIG5pZ190aW1lcl9tYXg7CiB9OwogCisjZGVmaW5lIEJOWDJYX05VTV9TVEFUUwkJCTQxCiAjZGVmaW5lIFNUQVRTX09GRlNFVDMyKHN0YXRfbmFtZSkgXAogCQkJKG9mZnNldG9mKHN0cnVjdCBibngyeF9ldGhfc3RhdHMsIHN0YXRfbmFtZSkgLyA0KQogCiAKLSNpZmRlZiBCTlgyWF9NVUxUSQogI2RlZmluZSBNQVhfQ09OVEVYVAkJCTE2Ci0jZWxzZQotI2RlZmluZSBNQVhfQ09OVEVYVAkJCTEKLSNlbmRpZgogCiB1bmlvbiBjZHVfY29udGV4dCB7CiAJc3RydWN0IGV0aF9jb250ZXh0IGV0aDsKQEAgLTczOSw2ICs3ODgsOSBAQAogCiAJYXRvbWljX3QJCWludHJfc2VtOwogCXN0cnVjdCBtc2l4X2VudHJ5CW1zaXhfdGFibGVbTUFYX0NPTlRFWFQrMV07CisjZGVmaW5lIElOVF9NT0RFX0lOVHgJCQkxCisjZGVmaW5lIElOVF9NT0RFX01TSQkJCTIKKyNkZWZpbmUgSU5UX01PREVfTVNJWAkJCTMKIAogCWludAkJCXR4X3Jpbmdfc2l6ZTsKIApAQCAtNzQ3LDIzICs3OTksMjYgQEAKICNlbmRpZgogCiAJdTMyCQkJcnhfY3N1bTsKLQl1MzIJCQlyeF9vZmZzZXQ7CiAJdTMyCQkJcnhfYnVmX3NpemU7CiAjZGVmaW5lIEVUSF9PVlJFSEVBRAkJCShFVEhfSExFTiArIDgpCS8qIDggZm9yIENSQyArIFZMQU4gKi8KICNkZWZpbmUgRVRIX01JTl9QQUNLRVRfU0laRQkJNjAKICNkZWZpbmUgRVRIX01BWF9QQUNLRVRfU0laRQkJMTUwMAogI2RlZmluZSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFCTk2MDAKIAorCS8qIE1heCBzdXBwb3J0ZWQgYWxpZ25tZW50IGlzIDI1NiAoOCBzaGlmdCkgKi8KKyNkZWZpbmUgQk5YMlhfUlhfQUxJR05fU0hJRlQJCSgoTDFfQ0FDSEVfU0hJRlQgPCA4KSA/IFwKKwkJCQkJIEwxX0NBQ0hFX1NISUZUIDogOCkKKyNkZWZpbmUgQk5YMlhfUlhfQUxJR04JCQkoMSA8PCBCTlgyWF9SWF9BTElHTl9TSElGVCkKKwogCXN0cnVjdCBob3N0X2RlZl9zdGF0dXNfYmxvY2sgKmRlZl9zdGF0dXNfYmxrOwogI2RlZmluZSBERUZfU0JfSUQJCQkxNgotCXUxNgkJCWRlZl9jX2lkeDsKLQl1MTYJCQlkZWZfdV9pZHg7Ci0JdTE2CQkJZGVmX3hfaWR4OwotCXUxNgkJCWRlZl90X2lkeDsKLQl1MTYJCQlkZWZfYXR0X2lkeDsKKwlfX2xlMTYJCQlkZWZfY19pZHg7CisJX19sZTE2CQkJZGVmX3VfaWR4OworCV9fbGUxNgkJCWRlZl94X2lkeDsKKwlfX2xlMTYJCQlkZWZfdF9pZHg7CisJX19sZTE2CQkJZGVmX2F0dF9pZHg7CiAJdTMyCQkJYXR0bl9zdGF0ZTsKIAlzdHJ1Y3QgYXR0bl9yb3V0ZQlhdHRuX2dyb3VwW01BWF9EWU5BTUlDX0FUVE5fR1JQU107Ci0JdTMyCQkJbmlnX21hc2s7CiAKIAkvKiBzbG93IHBhdGggcmluZyAqLwogCXN0cnVjdCBldGhfc3BlCQkqc3BxOwpAQCAtNzcxLDcgKzgyNiw3IEBACiAJdTE2CQkJc3BxX3Byb2RfaWR4OwogCXN0cnVjdCBldGhfc3BlCQkqc3BxX3Byb2RfYmQ7CiAJc3RydWN0IGV0aF9zcGUJCSpzcHFfbGFzdF9iZDsKLQl1MTYJCQkqZHNiX3NwX3Byb2Q7CisJX19sZTE2CQkJKmRzYl9zcF9wcm9kOwogCXUxNgkJCXNwcV9sZWZ0OyAvKiBzZXJpYWxpemUgc3BxICovCiAJLyogdXNlZCB0byBzeW5jaHJvbml6ZSBzcHEgYWNjZXNzZXMgKi8KIAlzcGlubG9ja190CQlzcHFfbG9jazsKQEAgLTc4OSwxMSArODQ0LDExIEBACiAJdTMyCQkJZmxhZ3M7CiAjZGVmaW5lIFBDSVhfRkxBRwkJCTEKICNkZWZpbmUgUENJXzMyQklUX0ZMQUcJCQkyCi0jZGVmaW5lIE9ORV9URE1BX0ZMQUcJCQk0CS8qIG5vIGxvbmdlciB1c2VkICovCisjZGVmaW5lIE9ORV9QT1JUX0ZMQUcJCQk0CiAjZGVmaW5lIE5PX1dPTF9GTEFHCQkJOAogI2RlZmluZSBVU0lOR19EQUNfRkxBRwkJCTB4MTAKICNkZWZpbmUgVVNJTkdfTVNJWF9GTEFHCQkJMHgyMAotI2RlZmluZSBBU0ZfRU5BQkxFX0ZMQUcJCQkweDQwCisjZGVmaW5lIFVTSU5HX01TSV9GTEFHCQkJMHg0MAogI2RlZmluZSBUUEFfRU5BQkxFX0ZMQUcJCQkweDgwCiAjZGVmaW5lIE5PX01DUF9GTEFHCQkJMHgxMDAKICNkZWZpbmUgQlBfTk9NQ1AoYnApCQkJKGJwLT5mbGFncyAmIE5PX01DUF9GTEFHKQpAQCAtODA4LDEyICs4NjMsMTIgQEAKIAogCWludAkJCXBtX2NhcDsKIAlpbnQJCQlwY2llX2NhcDsKKwlpbnQJCQltcnJzOwogCiAJc3RydWN0IGRlbGF5ZWRfd29yawlzcF90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlyZXNldF90YXNrOwogCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Ci0JaW50CQkJdGltZXJfaW50ZXJ2YWw7CiAJaW50CQkJY3VycmVudF9pbnRlcnZhbDsKIAogCXUxNgkJCWZ3X3NlcTsKQEAgLTgyNiw2ICs4ODEsOSBAQAogCXN0cnVjdCBibngyeF9jb21tb24JY29tbW9uOwogCXN0cnVjdCBibngyeF9wb3J0CXBvcnQ7CiAKKwlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgY21uZzsKKwl1MzIJCQl2bl93ZWlnaHRfc3VtOworCiAJdTMyCQkJbWZfY29uZmlnOwogCXUxNgkJCWUxaG92OwogCXU4CQkJZTFobWY7CkBAIC04NDgsNyArOTA2LDcgQEAKIAl1MzIJCQlsaW5fY250OwogCiAJaW50CQkJc3RhdGU7Ci0jZGVmaW5lIEJOWDJYX1NUQVRFX0NMT1NFRAkJMHgwCisjZGVmaW5lIEJOWDJYX1NUQVRFX0NMT1NFRAkJMAogI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQJMHgxMDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfUE9SVAkweDIwMDAKICNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTgkJMHgzMDAwCkBAIC04NTksOCArOTE3LDkgQEAKICNkZWZpbmUgQk5YMlhfU1RBVEVfRElBRwkJMHhlMDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX0VSUk9SCQkweGYwMDAKIAotCWludAkJCW51bV9xdWV1ZXM7Ci0jZGVmaW5lIEJQX01BWF9RVUVVRVMoYnApCQkoSVNfRTFITUYoYnApID8gNCA6IDE2KQorCWludAkJCW11bHRpX21vZGU7CisJaW50CQkJbnVtX3J4X3F1ZXVlczsKKwlpbnQJCQludW1fdHhfcXVldWVzOwogCiAJdTMyCQkJcnhfbW9kZTsKICNkZWZpbmUgQk5YMlhfUlhfTU9ERV9OT05FCQkwCkBAIC04OTgsOCArOTU3LDYgQEAKIAlpbnQJCQlleGVjdXRlcl9pZHg7CiAKIAl1MTYJCQlzdGF0c19jb3VudGVyOwotCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfdGNsaWVudDsKLQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3hjbGllbnQ7CiAJc3RydWN0IGJueDJ4X2V0aF9zdGF0cwlldGhfc3RhdHM7CiAKIAlzdHJ1Y3Qgel9zdHJlYW1fcwkqc3RybTsKQEAgLTkxMSwxNyArOTY4LDI3IEBACiB9OwogCiAKLSNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikJZm9yICh2YXIgPSAwOyB2YXIgPCBicC0+bnVtX3F1ZXVlczsgdmFyKyspCisjZGVmaW5lIEJOWDJYX01BWF9RVUVVRVMoYnApCShJU19FMUhNRihicCkgPyAoTUFYX0NPTlRFWFQgLyBFMUhWTl9NQVgpIDogXAorCQkJCQkJIE1BWF9DT05URVhUKQorI2RlZmluZSBCTlgyWF9OVU1fUVVFVUVTKGJwKQltYXgoYnAtPm51bV9yeF9xdWV1ZXMsIGJwLT5udW1fdHhfcXVldWVzKQorI2RlZmluZSBpc19tdWx0aShicCkJCShCTlgyWF9OVU1fUVVFVUVTKGJwKSA+IDEpCiAKKyNkZWZpbmUgZm9yX2VhY2hfcnhfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBicC0+bnVtX3J4X3F1ZXVlczsgdmFyKyspCisjZGVmaW5lIGZvcl9lYWNoX3R4X3F1ZXVlKGJwLCB2YXIpIFwKKwkJCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV90eF9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBmb3JfZWFjaF9xdWV1ZShicCwgdmFyKSBcCisJCQlmb3IgKHZhciA9IDA7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKICNkZWZpbmUgZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgdmFyKSBcCi0JCQkJZm9yICh2YXIgPSAxOyB2YXIgPCBicC0+bnVtX3F1ZXVlczsgdmFyKyspCi0jZGVmaW5lIGlzX211bHRpKGJwKQkJKGJwLT5udW1fcXVldWVzID4gMSkKKwkJCWZvciAodmFyID0gMTsgdmFyIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IHZhcisrKQogCiAKIHZvaWQgYm54MnhfcmVhZF9kbWFlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBzcmNfYWRkciwgdTMyIGxlbjMyKTsKIHZvaWQgYm54Mnhfd3JpdGVfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1MzIgZHN0X2FkZHIsCiAJCSAgICAgIHUzMiBsZW4zMik7CitpbnQgYm54MnhfZ2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1OCBwb3J0KTsKIGludCBibngyeF9zZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KTsKK2ludCBibngyeF9zZXRfZ3Bpb19pbnQoc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCk7CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHJlZ19wb2xsKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBleHBlY3RlZCwgaW50IG1zLAogCQkJICAgaW50IHdhaXQpCkBAIC05OTIsMTMgKzEwNTksMTIgQEAKICNkZWZpbmUgUENJQ0ZHX0xJTktfU1BFRURfU0hJRlQJCTE2CiAKIAotI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQk0MgotI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQk4CisjZGVmaW5lIEJOWDJYX05VTV9URVNUUwkJCTcKIAotI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0sJCTAKLSNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLCQkxCi0jZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQJMQotI2RlZmluZSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVECTIKKyNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLCQkwCisjZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDSwkJMQorI2RlZmluZSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVECTEKKyNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRAkyCiAjZGVmaW5lIEJOWDJYX0xPT1BCQUNLX0ZBSUxFRAkJKEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQgfCBcCiAJCQkJCSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVEKQogCkBAIC0xMDYxLDkgKzExMjcsNiBAQAogI2RlZmluZSBCTlgyWF9NQ1BfQVNTRVJUIFwKIAlHRU5FUkFMX0FUVEVOX09GRlNFVChNQ1BfRkFUQUxfQVNTRVJUX0FUVEVOVElPTl9CSVQpCiAKLSNkZWZpbmUgQk5YMlhfRE9PUlFfQVNTRVJUIFwKLQlBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfSFdfSU5URVJSVVBUCi0KICNkZWZpbmUgQk5YMlhfR1JDX1RJTUVPVVQJR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1RJTUVPVVRfR1JDKQogI2RlZmluZSBCTlgyWF9HUkNfUlNWCQkoR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ1IpIHwgXAogCQkJCSBHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDVCkgfCBcCkBAIC0xMTIwLDEyICsxMTgzLDEzIEBACiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01JU0NfUEFSSVRZX0VSUk9SKQogCiAKLSNkZWZpbmUgTVVMVElfRkxBR1MgXAorI2RlZmluZSBNVUxUSV9GTEFHUyhicCkgXAogCQkoVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgfCBcCiAJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfVENQX0NBUEFCSUxJVFkgfCBcCiAJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfQ0FQQUJJTElUWSB8IFwKIAkJIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWSB8IFwKLQkJIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfRU5BQkxFKQorCQkgKGJwLT5tdWx0aV9tb2RlIDw8IFwKKwkJICBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQpKQogCiAjZGVmaW5lIE1VTFRJX01BU0sJCQkweDdmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGM2YjAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oCkBAIC0wLDAgKzEsNTI2IEBACisvKiBibngyeF9kdW1wLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworLyogVGhpcyBzdHJ1Y3QgaG9sZHMgYSBzaWduYXR1cmUgdG8gZW5zdXJlIHRoZSBkdW1wIHJldHVybmVkIGZyb20gdGhlIGRyaXZlcgorICogbWF0Y2ggdGhlIG1ldGEgZGF0YSBmaWxlIGluc2VydGVkIHRvIGdyY19kdW1wLnRjbAorICogVGhlIHNpZ25hdHVyZSBpcyB0aW1lIHN0YW1wLCBkaWFnIHZlcnNpb24gYW5kIGdyY19kdW1wIHZlcnNpb24KKyAqLworCitzdHJ1Y3QgZHVtcF9zaWduIHsKKwl1MzIgdGltZV9zdGFtcDsKKwl1MzIgZGlhZ192ZXI7CisJdTMyIGdyY19kdW1wX3ZlcjsKK307CisKKyNkZWZpbmUgVFNUT1JNX1dBSVRQX0FERFIJMHgxYjhhODAKKyNkZWZpbmUgQ1NUT1JNX1dBSVRQX0FERFIJMHgyMzhhODAKKyNkZWZpbmUgWFNUT1JNX1dBSVRQX0FERFIJMHgyYjhhODAKKyNkZWZpbmUgVVNUT1JNX1dBSVRQX0FERFIJMHgzMzhhODAKKyNkZWZpbmUgVFNUT1JNX0NBTV9NT0RFCQkweDFiMTQ0MAorCisjZGVmaW5lIFJJX0UxCQkJMHgxCisjZGVmaW5lIFJJX0UxSAkJCTB4MgorI2RlZmluZSBSSV9PTkxJTkUJCTB4MTAwCisKKyNkZWZpbmUgUklfRTFfT0ZGTElORQkJKFJJX0UxKQorI2RlZmluZSBSSV9FMV9PTkxJTkUJCShSSV9FMSB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfRTFIX09GRkxJTkUJCShSSV9FMUgpCisjZGVmaW5lIFJJX0UxSF9PTkxJTkUJCShSSV9FMUggfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0FMTF9PRkZMSU5FCQkoUklfRTEgfCBSSV9FMUgpCisjZGVmaW5lIFJJX0FMTF9PTkxJTkUJCShSSV9FMSB8IFJJX0UxSCB8IFJJX09OTElORSkKKworI2RlZmluZSBNQVhfVElNRVJfUEVORElORwkyMDAKKyNkZWZpbmUgVElNRVJfU0NBTl9ET05UX0NBUkUJMHhGRgorCisKK3N0cnVjdCBkdW1wX2hkciB7CisJdTMyCQkgaGRyX3NpemU7CS8qIGluIGR3b3JkcywgZXhjbHVkaW5nIHRoaXMgZmllbGQgKi8KKwlzdHJ1Y3QgZHVtcF9zaWduIGR1bXBfc2lnbjsKKwl1MzIJCSB4c3Rvcm1fd2FpdHA7CisJdTMyCQkgdHN0b3JtX3dhaXRwOworCXUzMgkJIHVzdG9ybV93YWl0cDsKKwl1MzIJCSBjc3Rvcm1fd2FpdHA7CisJdTE2CQkgaW5mbzsKKwl1OAkJIGlkbGVfY2hrOworCXU4CQkgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgcmVnX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBzaXplOworCXUxNiBpbmZvOworfTsKKworc3RydWN0IHdyZWdfYWRkciB7CisJdTMyIGFkZHI7CisJdTMyIHNpemU7CisJdTMyIHJlYWRfcmVnc19jb3VudDsKKwljb25zdCB1MzIgKnJlYWRfcmVnczsKKwl1MTYgaW5mbzsKK307CisKKworI2RlZmluZSBSRUdTX0NPVU5UCQk1NTgKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgcmVnX2FkZHJzW1JFR1NfQ09VTlRdID0geworCXsgMHgyMDAwLCAzNDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMCwgMTAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMCwgMjg3LCBSSV9BTExfT05MSU5FfSwgeyAweDM4MDAsIDMzMSwgUklfQUxMX09OTElORX0sCisJeyAweDg4MDAsIDYsIFJJX0UxX09OTElORX0sIHsgMHhhMDAwLCAyMjMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhMzg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGEzOTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhMzljLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweGEzYzAsIDMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhM2QwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZDgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhM2UwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZTgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhM2YwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZjgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhNDAwLCA2OSwgUklfQUxMX09OTElORX0sIHsgMHhhNTE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTUyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTI4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTUzMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU2MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTY4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU3MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTU5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNWEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTVjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNWUwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTVlOCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhNWYwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTVmOCwgMTAsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTAwMDAsIDIzNiwgUklfQUxMX09OTElORX0sCisJeyAweDEwM2JjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2NjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzZGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDAsIDU3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0ZTgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0ZjQsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMCwgMTQ2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzUwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3NjAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3NzAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDc4MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc5MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwN2EwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwN2IwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3YzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3ZDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDdlMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDg4MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwOTAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYwMDAsIDI2LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYwNzAsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MGMwLCAyNywgUklfRTFIX09OTElORX0sCisJeyAweDE2MTQwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MTYwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYxODAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxYzAsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjIwNCwgNSwgUklfRTFIX09OTElORX0sIHsgMHgxODAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE4MDA4LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDIwMDAwLCAyNCwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDYwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDgwLCAxMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDJiNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDJjNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDBjLCA4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA0MmMsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweDIwNDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA1MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4NDAwMDAsIDk4LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDAxYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxYTgsIDExLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4NDAyMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0MDAsIDQzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0YjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDRjYywgMywgUklfRTFIX09OTElORX0sIHsgMHg0MDUwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQwNTEwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNTIwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA1MzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA1NDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweDQyMjljLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjJkNCwgNSwgUklfRTFIX09OTElORX0sIHsgMHg0MjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjgwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDAwMCwgMjAsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDA1MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDA3MCwgODgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDFkYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDFlYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMWYwLCA0LCBSSV9FMUhfT05MSU5FfSwgeyAweDUwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAyMGMsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMjgsIDYsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHg1MDI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDU0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTQwMDQsIDMzMjcsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDU4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDYwMDAwLCA3MSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYwMTM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjAxM2MsIDI0LCBSSV9FMUhfT05MSU5FfSwgeyAweDYwMjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjEwMDQsIDUxMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg3MDAwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg3MDAyMCwgMjE0OTYsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUwMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwMGMsIDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUwMWMsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwMzgsIDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUwNDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwNGMsIDEwOSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg4NTIwMCwgMzIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUyODAsIDExMTA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweGEwMDAwLCAxNjM4NCwgUklfQUxMX09OTElORX0sIHsgMHhiMDAwMCwgMTYzODQsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhjMTAwMCwgNywgUklfQUxMX09OTElORX0sIHsgMHhjMTAyOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMxMDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxODAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzIwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHhjMjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyMmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMmJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwgeyAweGMyNGM4LCAzOCwgUklfQUxMX09OTElORX0sCisJeyAweGMyNTY4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQwMDAsIDE2NSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQyZTAsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YzQ0MDAsIDUxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ0ZDAsIDM4LCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTcwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAwMDAsIDE5LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAwNGMsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAwNmMsIDkxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDIwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHhkMDIwYywgNywgUklfQUxMX09OTElORX0sCisJeyAweGQwMjI4LCAxOCwgUklfRTFIX09OTElORX0sIHsgMHhkMDI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMzAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDQwMDQsIDI1NTksIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ZDgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ZTAwMDAsIDIxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMDU0LCA4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAwNzQsIDg1LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMWQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDIwYywgOCwgUklfQUxMX09OTElORX0sIHsgMHhlMDIyYywgMTgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhlMDI4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDMwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTIwMDQsIDIwNDcsIFJJX0FMTF9PRkZMSU5FfSwgeyAweGYwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZjAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDEwMDAsIDEyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDNjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTA0YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTA1MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxMDExMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDE4MDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDAwLCAxOCwgUklfQUxMX09OTElORX0sCisJeyAweDEwMjA1NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwODAsIDE3LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjBjOCwgOCwgUklfRTFIX09OTElORX0sCisJeyAweDEwMjQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwMDAsIDI2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzMDc0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA4NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA5NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwOTgsIDUsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDM4MDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDAwLCA2MywgUklfQUxMX09OTElORX0sCisJeyAweDEwNDEwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQxMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQyMDAsIDE3LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ1MDAsIDE5MiwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDkwMCwgMTkyLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTExYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MThjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2NjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2ZjLCA3NjksIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwODAwMCwgMzMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgwOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4MGEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MGFjLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDEwODEwMCwgNSwgUklfQUxMX09OTElORX0sCisJeyAweDEwODEyMCwgNSwgUklfQUxMX09OTElORX0sIHsgMHgxMDgyMDAsIDc0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4NDAwLCA3NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDg4MDAsIDE1MiwgUklfQUxMX09OTElORX0sCisJeyAweDEwOTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAwMDAsIDM0NywgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU3OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1ODgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTljLCAyMywgUklfRTFIX09OTElORX0sCisJeyAweDEyMDYxNCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxMjA2MWMsIDMwLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTIwODBjLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgxMjBhMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjIwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTI4MDAwLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTQwMDAwLCAxMTQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMWQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDIwMCwgNiwgUklfQUxMX09OTElORX0sCisJeyAweDE0NDAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNDgwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNGMwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTUwMDAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTU0MDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE1ODAwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE1YzAwMCwgNywgUklfRTFIX09OTElORX0sIHsgMHgxNjEwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjEwMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYxMDM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxODAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDAwMCwgNjAsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MTEwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2NDIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyNDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI2MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDI3MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyODAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQ4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY1MDAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MjljLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjJiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NGM4LCAzOCwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjU2OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjY4MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMDAsIDI3MCwgUklfQUxMX09OTElORX0sIHsgMHgxNjg0NDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg0NTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4ODAwLCAxOSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODkwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORX0sCisJeyAweDE2YTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNmEwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTZjMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2YzAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxNmUwMDAsIDE2LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTEwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE2ZTIwMCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNmU0MDAsIDE4MywgUklfRTFIX09OTElORX0sCisJeyAweDE3MDAwMCwgOTMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMTgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMTkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDIwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDIxNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAwMDAsIDYxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDExMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTNjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTgwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgxODAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTgxMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE4MTAxMCwgMTAyMCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYTgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhODEwMCwgMTk4NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MWFhMDA0LCA2NjU1LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MWIyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFiODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFjMDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjU4MDAsIDE1MzYsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDIyNzAwNCwgMTAyMywgUklfRTFIX09GRkxJTkV9LCB7IDB4MjI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjgxMDAsIDg2NDAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgyMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjM4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjQwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDE0YywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDI4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDI4MjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgyODIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmEwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTgxMDAsIDk2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MmE5MDA0LCA3Njc5LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MmIyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJiODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJjMDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgzMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzI4MTAwLCA1MzYsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDMyODk2NCwgODEwMywgUklfRTFIX09GRkxJTkV9LCB7IDB4MzMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDMzMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9Cit9OworCisKKyNkZWZpbmUgSURMRVJFR1NfQ09VTlQJCTI3Nworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYWRkciBpZGxlX2FkZHJzW0lETEVSRUdTX0NPVU5UXSA9IHsKKwl7IDB4MjExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMTIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjEyYywgNCwgUklfQUxMX09OTElORX0sIHsgMHgyODE0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgxYywgMiwgUklfQUxMX09OTElORX0sIHsgMHhhMzhjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTQwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNDJjLCAxMiwgUklfQUxMX09OTElORX0sCisJeyAweGE2MDAsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTYxOCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGMwOWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzYjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDNjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNkMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDIwMjFjLCAxMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDJhOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMmI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA0MGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA0MWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDE1NCwgMTQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxOTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDRhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MDRiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMjkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyMmEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMTYwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMWQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxZTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDIwYywgMiwgUklfQUxMX09OTElORX0sIHsgMHg1MDIxYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMDkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYwMTFjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjAxMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzEwMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMTAyYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjI5MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMmIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzI1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjU1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDI5NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQ1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDU2MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDE2YywgOCwgUklfQUxMX09OTElORX0sCisJeyAweGQwMWQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMWU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAyMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAyMGMsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDE1NCwgOCwgUklfQUxMX09OTElORX0sIHsgMHhlMDFjOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMWQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAyMGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAxMDMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjA1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMjA4MCwgMTYsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDA0LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzMDY4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA3OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwOWMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDQwMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MDIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAzYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDBmYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQxMGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTAzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTIxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTMzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2UwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwODA5NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAxYjAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjAzMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMzZjLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNDA4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDQxNCwgMTUsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA0NzgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNTY0LCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU3YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU4YywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA2MDgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMjA4MDgsIDEsIFJJX0UxX09OTElORX0sIHsgMHgxMjA4MGMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4MTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDgzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDgzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg2MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg2OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg5MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg5OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4YTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhjMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhjOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ZDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhmMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhmOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA5MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA5MDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMDVjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMGQwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDBlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDFjOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjEwMWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYxMDJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MDE0LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDBmMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjI5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2NTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwMDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDI4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODA1OCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODA3MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjgyMzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgyZDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MmUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MzAwLCA2NywgUklfQUxMX09OTElORX0sIHsgMHgxNjg0MTAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg0MzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4YTAwLCAxMjgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZlMjAwLCAxMjgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNmU0MDQsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlNTg0LCA3MCwgUklfRTFIX09OTElORX0sCisJeyAweDE3MDBhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAwYWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMTc0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMTg0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDBmNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDEwNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxMzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDExNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxMzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMjZjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMmEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgzMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzgwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4MDgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MGMwLCAxLCBSSV9BTExfT05MSU5FfQorfTsKKworc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMV8wW10gPSB7IDB4MWIxMDAwIH07CisKKyNkZWZpbmUgV1JFR1NfQ09VTlRfRTEJCTEKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFbV1JFR1NfQ09VTlRfRTFdID0geworCXsgMHgxYjBjMDAsIDE5MiwgMSwgcmVhZF9yZWdfZTFfMCwgUklfRTFfT0ZGTElORSB9Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHJlYWRfcmVnX2UxaF8wW10gPSB7IDB4MWIxMDQwLCAweDFiMTAwMCB9OworCisjZGVmaW5lIFdSRUdTX0NPVU5UX0UxSAkJMQorc3RhdGljIGNvbnN0IHN0cnVjdCB3cmVnX2FkZHIgd3JlZ19hZGRyc19lMWhbV1JFR1NfQ09VTlRfRTFIXSA9IHsKKwl7IDB4MWIwYzAwLCAyNTYsIDIsIHJlYWRfcmVnX2UxaF8wLCBSSV9FMUhfT0ZGTElORSB9Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHVtcF9zaWduIGR1bXBfc2lnbl9hbGwgPSB7IDB4NDlhYTkzZWUsIDB4NDA4MzUsIDB4MjIgfTsKKworCisjZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTEJMgorc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zdGF0dXNfcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9CisJeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0KKwl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OworCisjZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTFICTIKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFoW1RJTUVSX1JFR1NfQ09VTlRfRTFIXSA9CisJeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQorCXsgMHgxNjQwZDAsIDB4MTY0MGQ0IH07CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaAppbmRleCAxOTJmYTk4Li5lMmRmMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZndfZGVmcy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTAsOCArNTAsMTAgQEAKICNkZWZpbmUgVFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCiAjZGVmaW5lIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMzNTggKyAocG9ydCAqIDB4M2U4KSArIChjbGllbnRfaWQgKiAweDI4KSkgXAotCTogKDB4OWM4ICsgKHBvcnQgKiAweDJmOCkgKyAoY2xpZW50X2lkICogMHgyOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MzM1MCArIChwb3J0ICogMHgxOTApICsgKGNsaWVudF9pZCAqIDB4MTApKSBcCisJOiAoMHg5YzAgKyAocG9ydCAqIDB4MTMwKSArIChjbGllbnRfaWQgKiAweDEwKSkpCisjZGVmaW5lIFRTVE9STV9DT01NT05fU0FGQ19XT1JLQVJPVU5EX0VOQUJMRV9PRkZTRVQgXAorCShJU19FMUhfT0ZGU0VUID8gMHgxYWQ4IDogMHhmZmZmZmZmZikKICNkZWZpbmUgVFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGIwMWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChmdW5jdGlvbiAqIFwKQEAgLTgxLDQzICs4Myw1NCBAQAogCShmdW5jdGlvbiAqIDB4MzgpKSkKICNkZWZpbmUgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDEwICsgKHBvcnQgKiAweDViMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKLQkweDUwKSkgOiAoMHg0MDAwICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MzgpKSkKLSNkZWZpbmUgVFNUT1JNX1JYX1BST0RTX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMzNTAgKyAocG9ydCAqIDB4M2U4KSArIChjbGllbnRfaWQgKiAweDI4KSkgXAotCTogKDB4OWMwICsgKHBvcnQgKiAweDJmOCkgKyAoY2xpZW50X2lkICogMHgyOCkpKQorCTB4NTApKSA6ICgweDQwODAgKyAocG9ydCAqIDB4NWIwKSArIChzdGF0c19jb3VudGVyX2lkICogMHg1MCkpKQogI2RlZmluZSBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyYzAwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0Yjg4ICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQotI2RlZmluZSBUU1RPUk1fVFBBX0VYSVNUX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4M2IzMCA6IDB4MWMyMCkKKyNkZWZpbmUgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweDM2ODAgOiAweDFjMjApCiAjZGVmaW5lIFVTVE9STV9BR0dfREFUQV9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweGEwNDAgOiAweDJjMTApCiAjZGVmaW5lIFVTVE9STV9BR0dfREFUQV9TSVpFIChJU19FMUhfT0ZGU0VUID8gMHgyNDQwIDogMHgxMjAwKQogI2RlZmluZSBVU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUIFwKLQkoSVNfRTFIX09GRlNFVCA/IDB4ODAwMCA6IDB4MTAwMCkKKwkoSVNfRTFIX09GRlNFVCA/IDB4ODk2MCA6IDB4MTAwMCkKICNkZWZpbmUgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4OTgwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMyOTggKyAocG9ydCAqIDB4MjU4KSArIChjbGllbnRJZCAqIDB4MTgpKSA6IFwKLQkoMHg1NDUwICsgKHBvcnQgKiAweDFjOCkgKyAoY2xpZW50SWQgKiAweDE4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDE4ICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50SWQgKiAweDMwKSkgOiBcCisJKDB4NTMzMCArIChwb3J0ICogMHgyNjApICsgKGNsaWVudElkICogMHgyMCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxOTFhICsgKGZ1bmN0aW9uICogXAotCTB4MjgpICsgKGluZGV4ICogMHg0KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NTIyICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgxMDApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxOTIyICsgKGZ1bmN0aW9uICogXAorCTB4NDApICsgKGluZGV4ICogMHg0KSkpCiAjZGVmaW5lIFVTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwMCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE5MDAgKyAoZnVuY3Rpb24gKiAweDI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NTAwICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDAgKyAoZnVuY3Rpb24gKiAweDQwKSkpCiAjZGVmaW5lIFVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NTA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHhhMCkpIDogKDB4MTkwOCArIChmdW5jdGlvbiAqIDB4MjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDk1MDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkpIDogKDB4MTkwOCArIChmdW5jdGlvbiAqIDB4NDApKSkKKyNkZWZpbmUgVVNUT1JNX0VUSF9SSU5HX1BBVVNFX0RBVEFfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDIwICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50SWQgKiAweDMwKSkgOiBcCisJMHhmZmZmZmZmZikKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MmE1MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWQ5OCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgVVNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VUIFwKIAkoSVNfRTFIX09GRlNFVCA/IDB4MjQ0OCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFVTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk2NDQgKyAocG9ydCAqIDB4ZDApKSA6ICgweDE5NTQgKyAocG9ydCAqIDB4YjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDk3MDQgKyAocG9ydCAqIDB4ZjApKSA6ICgweDE5ODQgKyAocG9ydCAqIDB4YzApKSkKICNkZWZpbmUgVVNUT1JNX01BWF9BR0dfU0laRV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMyOTAgKyAocG9ydCAqIDB4MjU4KSArIChjbGllbnRJZCAqIDB4MTgpKSA6IFwKLQkoMHg1NDQ4ICsgKHBvcnQgKiAweDFjOCkgKyAoY2xpZW50SWQgKiAweDE4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDEwICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50SWQgKiAweDMwKSkgOiBcCisJKDB4NTMyOCArIChwb3J0ICogMHgyNjApICsgKGNsaWVudElkICogMHgyMCkpKQogI2RlZmluZSBVU1RPUk1fTUVNX1dPUktBUk9VTkRfQUREUkVTU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI0MDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDU0MDggKyBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg1MzA4ICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fUEFVU0VfRU5BQkxFRF9PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MmFkNCArIChwb3J0ICogMHg4KSkgOiAweGZmZmZmZmZmKQorI2RlZmluZSBVU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI0NTAgKyAocG9ydCAqIDB4MmQwKSArIChzdGF0c19jb3VudGVyX2lkICogXAorCTB4MjgpKSA6ICgweDQ3NDAgKyAocG9ydCAqIDB4MmQwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgyOCkpKQorI2RlZmluZSBVU1RPUk1fUlhfUFJPRFNfT0ZGU0VUKHBvcnQsIGNsaWVudF9pZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudF9pZCAqIDB4MzApKSBcCisJOiAoMHg1MzE4ICsgKHBvcnQgKiAweDI2MCkgKyAoY2xpZW50X2lkICogMHgyMCkpKQogI2RlZmluZSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4OTAxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAogCShpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXApAQCAtMTMyLDEyICsxNDUsMTUgQEAKICNkZWZpbmUgVVNUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDkwMDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCiAJKDB4MTQwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjlmMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWQ4MCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDkwMDAgOiAweDEwMDApCiAjZGVmaW5lIFhTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg5MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNGE4ICsgKHBvcnQgKiAweDQwKSkgOiAoMHgzYmEwICsgKHBvcnQgKiAweDQwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNGE4ICsgKHBvcnQgKiAweDUwKSkgOiAoMHgzYmEwICsgKHBvcnQgKiAweDUwKSkpCiAjZGVmaW5lIFhTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAoZnVuY3Rpb24gKiBcCkBAIC0xNDksMjMgKzE2NSwyMyBAQAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE0MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCiAjZGVmaW5lIFhTVE9STV9FMUhPVl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDJhYjggKyAoZnVuY3Rpb24gKiAweDIpKSA6IDB4ZmZmZmZmZmYpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyYzEwICsgKGZ1bmN0aW9uICogMHgyKSkgOiAweGZmZmZmZmZmKQogI2RlZmluZSBYU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDE4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgzYjcwICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBYU1RPUk1fRkFJUk5FU1NfUEVSX1ZOX1ZBUlNfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNTY4ICsgKGZ1bmN0aW9uICogMHg3MCkpIDogKDB4M2M2MCArIFwKLQkoZnVuY3Rpb24gKiAweDcwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNTg4ICsgKGZ1bmN0aW9uICogMHg5MCkpIDogKDB4M2M4MCArIFwKKwkoZnVuY3Rpb24gKiAweDkwKSkpCiAjZGVmaW5lIFhTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDJhYzggOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gMHgyYzIwIDogMHhmZmZmZmZmZikKICNkZWZpbmUgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTE0NCArIChwb3J0ICogMHgzMCkpIDogKDB4MTQ1NCArIChwb3J0ICogMHgxOCkpKQogI2RlZmluZSBYU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGMwMDAgKyAocG9ydCAqIDB4M2YwKSArIChzdGF0c19jb3VudGVyX2lkICogXAogCTB4MzgpKSA6ICgweDMzNzggKyAocG9ydCAqIDB4M2YwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgzOCkpKQogI2RlZmluZSBYU1RPUk1fUkFURV9TSEFQSU5HX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjUyOCArIChmdW5jdGlvbiAqIDB4NzApKSA6ICgweDNjMjAgKyBcCi0JKGZ1bmN0aW9uICogMHg3MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjU0OCArIChmdW5jdGlvbiAqIDB4OTApKSA6ICgweDNjNDAgKyBcCisJKGZ1bmN0aW9uICogMHg5MCkpKQogI2RlZmluZSBYU1RPUk1fU1BRX1BBR0VfQkFTRV9PRkZTRVQoZnVuY3Rpb24pIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDIwMDAgKyAoZnVuY3Rpb24gKiAweDEwKSkgOiAoMHgzMzI4ICsgXAogCShmdW5jdGlvbiAqIDB4MTApKSkKQEAgLTE3OCw3ICsxOTQsNyBAQAogI2RlZmluZSBDT01NT05fQVNNX0lOVkFMSURfQVNTRVJUX09QQ09ERSAweDAKIAogLyoqCi0qIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGF0bnRzIGZvciB0aGUgRVRIIGZsb3cKKyogVGhpcyBmaWxlIGRlZmluZXMgSFNJIGNvbnN0YW50cyBmb3IgdGhlIEVUSCBmbG93CiAqLwogI2lmZGVmIF9FVkVSRVNUX01JQ1JPQ09ERQogI2luY2x1ZGUgIm1pY3JvY29kZV9jb25zdGFudHMuaCIKQEAgLTE5NiwxOCArMjEyLDE4IEBACiAjZGVmaW5lIElQVjZfSEFTSF9UWVBFIDMKICNkZWZpbmUgVENQX0lQVjZfSEFTSF9UWVBFIDQKIAotLyogRXRoZXJuZXQgUmluZyBwYXJtYXRlcnMgKi8KKworLyogRXRoZXJuZXQgUmluZyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIFhfRVRIX0xPQ0FMX1JJTkdfU0laRSAxMwogI2RlZmluZSBGSVJTVF9CRF9JTl9QS1QgMAogI2RlZmluZSBQQVJTRV9CRF9JTkRFWCAxCi0jZGVmaW5lIE5VTV9PRl9FVEhfQkRTX0lOX1BBR0UgXAotCSgoUEFHRV9TSVpFKSAvIChTVFJVQ1RfU0laRShldGhfdHhfYmQpLzgpKQorI2RlZmluZSBOVU1fT0ZfRVRIX0JEU19JTl9QQUdFICgoUEFHRV9TSVpFKS8oU1RSVUNUX1NJWkUoZXRoX3R4X2JkKS84KSkKIAogCiAvKiBSeCByaW5nIHBhcmFtcyAqLwotI2RlZmluZSBVX0VUSF9MT0NBTF9CRF9SSU5HX1NJWkUgKDE2KQotI2RlZmluZSBVX0VUSF9MT0NBTF9TR0VfUklOR19TSVpFICgxMikKLSNkZWZpbmUgVV9FVEhfU0dMX1NJWkUgKDgpCisjZGVmaW5lIFVfRVRIX0xPQ0FMX0JEX1JJTkdfU0laRSAxNgorI2RlZmluZSBVX0VUSF9MT0NBTF9TR0VfUklOR19TSVpFIDEyCisjZGVmaW5lIFVfRVRIX1NHTF9TSVpFIDgKIAogCiAjZGVmaW5lIFVfRVRIX0JEU19QRVJfUEFHRV9NQVNLIFwKQEAgLTIyOSwxNSArMjQ1LDE1IEBACiAjZGVmaW5lIFVfRVRIX1VOREVGSU5FRF9RIDB4RkYKIAogLyogdmFsdWVzIG9mIGNvbW1hbmQgSURzIGluIHRoZSByYW1yb2QgbWVzc2FnZSAqLwotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX1NFVFVQICg4MCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQICg4NSkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSAoOTApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1VQREFURSAoMTAwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9IQUxUICgxMDUpCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgKDExMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCAoMTE1KQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX0RFTCAoMTIwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9GT1JXQVJEX1NFVFVQICgxMjUpCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1BPUlRfU0VUVVAgODAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIDg1CisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NUQVRfUVVFUlkgOTAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfVVBEQVRFIDEwMAorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9IQUxUIDEwNQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDIDExMAorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9DRkNfREVMIDExNQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX0RFTCAxMjAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfRk9SV0FSRF9TRVRVUCAxMjUKIAogCiAvKiBjb21tYW5kIHZhbHVlcyBmb3Igc2V0IG1hYyBjb21tYW5kICovCkBAIC0yNTQsMTIgKzI3MCwxNiBAQAogI2RlZmluZSBFVEhfTUFYX1JYX0NMSUVOVFNfRTFIIDI1CiAKIC8qIE1heGltYWwgYWdncmVnYXRpb24gcXVldWVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSAoMzIpCi0jZGVmaW5lIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxSCAoNjQpCisjZGVmaW5lIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxIDMyCisjZGVmaW5lIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxSCA2NAorCisvKiBFVEggUlNTIG1vZGVzICovCisjZGVmaW5lIEVUSF9SU1NfTU9ERV9ESVNBQkxFRCAwCisjZGVmaW5lIEVUSF9SU1NfTU9ERV9SRUdVTEFSIDEKIAogCiAvKioKLSogVGhpcyBmaWxlIGRlZmluZXMgSFNJIGNvbnN0YXRudHMgY29tbW9uIHRvIGFsbCBtaWNyb2NvZGUgZmxvd3MKKyogVGhpcyBmaWxlIGRlZmluZXMgSFNJIGNvbnN0YW50cyBjb21tb24gdG8gYWxsIG1pY3JvY29kZSBmbG93cwogKi8KIAogLyogQ29ubmVjdGlvbiB0eXBlcyAqLwpAQCAtMjc4LDI1ICsyOTgsMjIgQEAKICNkZWZpbmUgRVRIX1NUQVRFIChFVEhfQ09OTkVDVElPTl9UWVBFIDw8IFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQpCiAjZGVmaW5lIFRPRV9TVEFURSAoVE9FX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQogI2RlZmluZSBSRE1BX1NUQVRFIChSRE1BX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQotI2RlZmluZSBJU0NTSV9TVEFURSBcCi0JKElTQ1NJX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQotI2RlZmluZSBGQ09FX1NUQVRFIChGQ09FX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQogCiAvKiBtaWNyb2NvZGUgZml4ZWQgcGFnZSBwYWdlIHNpemUgNEsgKGNoYWlucyBhbmQgcmluZyBzZWdtZW50cykgKi8KLSNkZWZpbmUgTUNfUEFHRV9TSVpFICg0MDk2KQorI2RlZmluZSBNQ19QQUdFX1NJWkUgNDA5NgogCiAKIC8qIEhvc3QgY29hbGVzY2luZyBjb25zdGFudHMgKi8KIAogLyogaW5kZXggbnVtYmVycyAqLwotI2RlZmluZSBIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDQKKyNkZWZpbmUgSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA4CiAjZGVmaW5lIEhDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgOAogI2RlZmluZSBIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDQKICNkZWZpbmUgSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CiAjZGVmaW5lIEhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUyA0CiAjZGVmaW5lIEhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUyA0CiAKLS8qIGluZGV4IHZhbHVlcyAtIHdoaWNoIGNvdW50ZXJ0byB1cGRhdGUgKi8KKy8qIGluZGV4IHZhbHVlcyAtIHdoaWNoIGNvdW50ZXIgdG8gdXBkYXRlICovCiAKICNkZWZpbmUgSENfSU5ERVhfVV9UT0VfUlhfQ1FfQ09OUyAwCiAjZGVmaW5lIEhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMgMQpAQCAtMzMwLDE2ICszNDcsMTYgQEAKICNkZWZpbmUgQVRURU5USU9OX0lEIDQKIAogLyogbWF4IG51bWJlciBvZiBzbG93IHBhdGggY29tbWFuZHMgcGVyIHBvcnQgKi8KLSNkZWZpbmUgTUFYX1JBTVJPRFNfUEVSX1BPUlQgKDgpCisjZGVmaW5lIE1BWF9SQU1ST0RTX1BFUl9QT1JUIDgKIAogLyogdmFsdWVzIGZvciBSWCBFVEggQ1FFIHR5cGUgZmllbGQgKi8KLSNkZWZpbmUgUlhfRVRIX0NRRV9UWVBFX0VUSF9GQVNUUEFUSCAoMCkKLSNkZWZpbmUgUlhfRVRIX0NRRV9UWVBFX0VUSF9SQU1ST0QgKDEpCisjZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfRkFTVFBBVEggMAorI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX1JBTVJPRCAxCiAKIAogLyoqKiogREVGSU5FUyBGT1IgVElNRVJTL0NMT0NLUyBSRVNPTFVUSU9OUyAqKioqLwotI2RlZmluZSBFTVVMQVRJT05fRlJFUVVFTkNZX0ZBQ1RPUiAoMTYwMCkKLSNkZWZpbmUgRlBHQV9GUkVRVUVOQ1lfRkFDVE9SICgxMDApCisjZGVmaW5lIEVNVUxBVElPTl9GUkVRVUVOQ1lfRkFDVE9SIDE2MDAKKyNkZWZpbmUgRlBHQV9GUkVRVUVOQ1lfRkFDVE9SIDEwMAogCiAjZGVmaW5lIFRJTUVSU19USUNLX1NJWkVfQ0hJUCAoMWUtMykKICNkZWZpbmUgVElNRVJTX1RJQ0tfU0laRV9FTVVMIFwKQEAgLTM1MywxMiArMzcwLDkgQEAKICNkZWZpbmUgVFNFTUlfQ0xLMV9SRVNVTF9GUEdBIFwKICAoKFRTRU1JX0NMSzFfUkVTVUxfQ0hJUCkvKEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUikpCiAKLSNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9DSElQIFwKLSAoVElNRVJTX1RJQ0tfU0laRV9DSElQKQotI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0VNVUwgXAotIChUSU1FUlNfVElDS19TSVpFX0VNVUwpCi0jZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfRlBHQSBcCi0gKFRJTUVSU19USUNLX1NJWkVfRlBHQSkKKyNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9DSElQIChUSU1FUlNfVElDS19TSVpFX0NISVApCisjZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfRU1VTCAoVElNRVJTX1RJQ0tfU0laRV9FTVVMKQorI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0ZQR0EgKFRJTUVSU19USUNLX1NJWkVfRlBHQSkKIAogI2RlZmluZSBYU0VNSV9DTEsxX1JFU1VMX0NISVAgKDFlLTMpCiAjZGVmaW5lIFhTRU1JX0NMSzFfUkVTVUxfRU1VTCBcCkBAIC0zODMsMTIgKzM5NywxNSBAQAogI2RlZmluZSBYU1RPUk1fSVBfSURfUk9MTF9IQUxGIDB4ODAwMAogI2RlZmluZSBYU1RPUk1fSVBfSURfUk9MTF9BTEwgMAogCi0jZGVmaW5lIEZXX0xPR19MSVNUX1NJWkUgKDUwKQorI2RlZmluZSBGV19MT0dfTElTVF9TSVpFIDUwCiAKICNkZWZpbmUgTlVNX09GX1BST1RPQ09MUyA0Ci0jZGVmaW5lIE1BWF9DT1NfTlVNQkVSIDE2CisjZGVmaW5lIE5VTV9PRl9TQUZDX0JJVFMgMTYKKyNkZWZpbmUgTUFYX0NPU19OVU1CRVIgNAogI2RlZmluZSBNQVhfVF9TVEFUX0NPVU5URVJfSUQgMTgKICNkZWZpbmUgTUFYX1hfU1RBVF9DT1VOVEVSX0lEIDE4CisjZGVmaW5lIE1BWF9VX1NUQVRfQ09VTlRFUl9JRCAxOAorCiAKICNkZWZpbmUgVU5LTk9XTl9BRERSRVNTIDAKICNkZWZpbmUgVU5JQ0FTVF9BRERSRVNTIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKaW5kZXggZWZkNzY0NC4uMDNjNjI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9oc2kuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTExOSwzNSArMTE5LDE1IEBACiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfVU1QX05DX1NJX0VYVF9QSFlfVFlQRV9CQ001MjIxIDB4MDAwMTAwMDAKIAogCXUzMiBib2FyZDsJCQkJCQkvKiAweDEyNCAqLwotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSwkJICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX1NISUZUCQkgICAgMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTk9ORQkJICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAwICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMSAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDJHICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDA0RyAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwN0cgICAgMHgwMDAwMDAwNQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMTVHICAgIDB4MDAwMDAwMDYKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIwRyAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwM0cgICAgMHgwMDAwMDAwOAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHICAgIDB4MDAwMDAwMDkKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRyAgICAweDAwMDAwMDBhCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyM0cgICAgMHgwMDAwMDAwYgotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMzNHICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMVQxMTAxICAgICAweDAwMDAwMDBkCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFFVDEyMDEgICAgMHgwMDAwMDAwZQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExQTExMzNHICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMUVBMTIzM0cgICAweDAwMDAwMDEwCi0KLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9WRVJfTUFTSwkJICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9WRVJfU0hJRlQJCSAgICAxNgotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01BSk9SX1ZFUl9NQVNLCSAgICAweGYwMDAwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUFKT1JfVkVSX1NISUZUCSAgICAyOAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9NQVNLCSAgICAweDBmMDAwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUlOT1JfVkVSX1NISUZUCSAgICAyNAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1JFVl9NQVNLCQkgICAgMHgwMGZmMDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1JFVl9NQVNLCQkgICAgMHgwMEZGMDAwMAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1JFVl9TSElGVAkJICAgIDE2CiAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfTUFTSwkgICAgMHgwRjAwMDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01BSk9SX1ZFUl9TSElGVAkgICAgMjQKKworI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9NQVNLCSAgICAweEYwMDAwMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUlOT1JfVkVSX1NISUZUCSAgICAyOAorCiAJdTMyIHJlc2VydmVkOwkJCQkJCS8qIDB4MTI4ICovCiAKIH07CkBAIC0xOTgsMzYgKzE3OCwyMSBAQAogCXUzMiByZG1hX21hY19sb3dlcjsKIAogCXUzMiBzZXJkZXNfY29uZmlnOwotCS8qIGZvciBleHRlcm5hbCBQSFksIG9yIGZvcmNlZCBtb2RlIG9yIGR1cmluZyBBTiAqLwotI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLIDB4ZmZmZjAwMDAKLSNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQgIDE2CisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19UWF9EUlZfUFJFX0VNUEhBU0lTX01BU0sJICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfVFhfRFJWX1BSRV9FTVBIQVNJU19TSElGVAkgICAgICAwCiAKLSNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfTUFTSyAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUICAgMAorI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLCSAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfU0hJRlQJICAgICAgMTYKIAotCXUxNiBzZXJkZXNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc1sxNl07Ci0JdTE2IHNlcmRlc19yeF9kcml2ZXJfZXF1YWxpemVyWzE2XTsKIAotCXUzMiB4Z3hzX2NvbmZpZ19sYW5lMDsKLQl1MzIgeGd4c19jb25maWdfbGFuZTE7Ci0JdTMyIHhneHNfY29uZmlnX2xhbmUyOwotCXUzMiB4Z3hzX2NvbmZpZ19sYW5lMzsKLQkvKiBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KLSNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19UWF9EUlZfUFJFX0VNUEhBU0lTX01BU0sgICAweGZmZmYwMDAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfVFhfRFJWX1BSRV9FTVBIQVNJU19TSElGVCAgMTYKKwl1MzIgUmVzZXJ2ZWQwWzE2XTsJCQkJICAgIC8qIDB4MTU4ICovCiAKLSNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19SWF9EUlZfRVFVQUxJWkVSX01BU0sJICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUICAgICAwCisJLyogIGZvciBleHRlcm5hbCBQSFksIG9yIGZvcmNlZCBtb2RlIG9yIGR1cmluZyBBTiAqLworCXUxNiB4Z3hzX2NvbmZpZ19yeFs0XTsJCQkJICAgIC8qIDB4MTk4ICovCiAKLQl1MTYgeGd4c190eF9kcml2ZXJfcHJlX2VtcGhhc2lzX2xhbmUwWzE2XTsKLQl1MTYgeGd4c190eF9kcml2ZXJfcHJlX2VtcGhhc2lzX2xhbmUxWzE2XTsKLQl1MTYgeGd4c190eF9kcml2ZXJfcHJlX2VtcGhhc2lzX2xhbmUyWzE2XTsKLQl1MTYgeGd4c190eF9kcml2ZXJfcHJlX2VtcGhhc2lzX2xhbmUzWzE2XTsKKwl1MTYgeGd4c19jb25maWdfdHhbNF07CQkJCSAgICAvKiAweDFBMCAqLwogCi0JdTE2IHhneHNfcnhfZHJpdmVyX2VxdWFsaXplcl9sYW5lMFsxNl07Ci0JdTE2IHhneHNfcnhfZHJpdmVyX2VxdWFsaXplcl9sYW5lMVsxNl07Ci0JdTE2IHhneHNfcnhfZHJpdmVyX2VxdWFsaXplcl9sYW5lMlsxNl07Ci0JdTE2IHhneHNfcnhfZHJpdmVyX2VxdWFsaXplcl9sYW5lM1sxNl07CisJdTMyIFJlc2VydmVkMVs2NF07CQkJCSAgICAvKiAweDFBOCAqLwogCiAJdTMyIGxhbmVfY29uZmlnOwogI2RlZmluZSBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU0sJCSAgICAweDAwMDBmZmZmCkBAIC0yNjUsNyArMjMwLDcgQEAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MwkgICAgMHgwMDAwMDMwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1CSAgICAweDAwMDAwNDAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDYJICAgIDB4MDAwMDA1MDAKLSNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODI3NgkgICAgMHgwMDAwMDYwMAorI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2CSAgICAweDAwMDAwNjAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEJICAgIDB4MDAwMDA3MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMQkgICAgMHgwMDAwMDgwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFCSAgICAweDAwMDBmZDAwCkBAIC0zMTksNiArMjg0LDEyIEBACiAKIAl1MzIgY29uZmlnOwkJCQkJCS8qIDB4NDUwICovCiAjZGVmaW5lIFNIQVJFRF9GRUFUVVJFX0JNQ19FQ0hPX01PREVfRU4gCSAgICAweDAwMDAwMDAxCisKKwkvKiAgVXNlIHRoZSB2YWx1ZXMgZnJvbSBvcHRpb25zIDQ3IGFuZCA0OCBpbnN0ZWFkIG9mIHRoZSBIVyBkZWZhdWx0CisJICB2YWx1ZXMgKi8KKyNkZWZpbmUgU0hBUkVEX0ZFQVRfQ0ZHX09WRVJSSURFX1BSRUVNUEhBU0lTX0NGR19ESVNBQkxFRCAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBTSEFSRURfRkVBVF9DRkdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfQ0ZHX0VOQUJMRUQgICAgICAweDAwMDAwMDAyCisKICNkZWZpbmUgU0hBUkVEX0ZFQVRVUkVfTUZfTU9ERV9ESVNBQkxFRCAJICAgIDB4MDAwMDAxMDAKIAogfTsKQEAgLTM3Miw2ICszNDMsMTEgQEAKICNkZWZpbmUgUE9SVF9GRUFUVVJFX01CQV9FTkFCTEVECQkgICAgMHgwMjAwMDAwMAogI2RlZmluZSBQT1JUX0ZFQVRVUkVfTUZXX0VOQUJMRUQJCSAgICAweDA0MDAwMDAwCiAKKwkvKiAgQ2hlY2sgdGhlIG9wdGljIHZlbmRvciB2aWEgaTJjIGJlZm9yZSBhbGxvd2luZyBpdCB0byBiZSB1c2VkIGJ5CisJICBTVyAqLworI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRUQgCSAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0VOQUJMRUQJCSAgICAgIDB4MDgwMDAwMDAKKwogCXUzMiB3b2xfY29uZmlnOwogCS8qIERlZmF1bHQgaXMgdXNlZCB3aGVuIGRyaXZlciBzZXRzIHRvICJhdXRvIiBtb2RlICovCiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9XT0xfREVGQVVMVF9NQVNLCQkgICAgMHgwMDAwMDAwMwpAQCAtNTEyLDcgKzQ4OCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRGV2aWNlIEluZm9ybWF0aW9uCQkJCQkJCSAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBkZXZfaW5mbyB7CQkJCQkJICAgIC8qIHNpemUgKi8KK3N0cnVjdCBzaG1fZGV2X2luZm8gewkJCQkJCSAgICAvKiBzaXplICovCiAKIAl1MzIgICAgYmNfcmV2OyAvKiA4IGJpdHMgZWFjaDogbWFqb3IsIG1pbm9yLCBidWlsZCAqLwkgICAgICAgLyogNCAqLwogCkBAIC02NDEsNyArNjE3LDEwIEBACiAKIAl1MzIgcG9ydF9zdHg7CiAKLQl1MzIgcmVzZXJ2ZWRbMl07CisJdTMyIHN0YXRfbmlnX3RpbWVyOworCisJLyogTUNQIGZpcm13YXJlIGRvZXMgbm90IHVzZSB0aGlzIGZpZWxkICovCisJdTMyIGV4dF9waHlfZndfdmVyc2lvbjsKIAogfTsKIApAQCAtODI3LDExICs4MDYsNyBAQAogCiAJc3RydWN0IHNoYXJlZF9tZl9jZmcJc2hhcmVkX21mX2NvbmZpZzsKIAlzdHJ1Y3QgcG9ydF9tZl9jZmcJcG9ydF9tZl9jb25maWdbUE9SVF9NQVhdOwotI2lmIGRlZmluZWQoYjcxMCkKLQlzdHJ1Y3QgZnVuY19tZl9jZmcJZnVuY19tZl9jb25maWdbRTFfRlVOQ19NQVhdOwotI2Vsc2UKIAlzdHJ1Y3QgZnVuY19tZl9jZmcJZnVuY19tZl9jb25maWdbRTFIX0ZVTkNfTUFYXTsKLSNlbmRpZgogCiB9OwogCkBAIC04NjIsNyArODM3LDcgQEAKICNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX05PTkUJICAgIDB4MDAwMDAxYzAKICNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX01BU0sJICAgIDB4MDAwMDAxYzAKIAotCXN0cnVjdCBkZXZfaW5mbyAJZGV2X2luZm87CQkgLyogMHg4ICAgICAoMHg0MzgpICovCisJc3RydWN0IHNobV9kZXZfaW5mbwlkZXZfaW5mbzsJCSAvKiAweDggICAgICgweDQzOCkgKi8KIAogCXU4CQkJcmVzZXJ2ZWRbNTIqUE9SVF9NQVhdOwogCkBAIC0xMjEyLDggKzExODcsOSBAQAogCiAKICNkZWZpbmUgQkNNXzU3MTBfRldfTUFKT1JfVkVSU0lPTgkJCTQKLSNkZWZpbmUgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTgkJCTUKLSNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTEKKyNkZWZpbmUgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTgkJCTgKKyNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTUzCisjZGVmaW5lIEJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04gCQkwCiAjZGVmaW5lIEJDTV81NzEwX0ZXX0NPTVBJTEVfRkxBR1MJCQkxCiAKIApAQCAtMTIyMSwxOCArMTE5NywxMiBAQAogICogYXR0ZW50aW9uIGJpdHMKICAqLwogc3RydWN0IGF0dGVuX2RlZl9zdGF0dXNfYmxvY2sgewotCXUzMiBhdHRuX2JpdHM7Ci0JdTMyIGF0dG5fYml0c19hY2s7Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IGF0dG5fYml0c19pbmRleDsKLQl1OCByZXNlcnZlZDA7Ci0JdTggc3RhdHVzX2Jsb2NrX2lkOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJX19sZTMyIGF0dG5fYml0czsKKwlfX2xlMzIgYXR0bl9iaXRzX2FjazsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7CiAJdTggcmVzZXJ2ZWQwOwotCXUxNiBhdHRuX2JpdHNfaW5kZXg7Ci0jZW5kaWYKLQl1MzIgcmVzZXJ2ZWQxOworCV9fbGUxNiBhdHRuX2JpdHNfaW5kZXg7CisJX19sZTMyIHJlc2VydmVkMTsKIH07CiAKIApAQCAtMTMwNSw3ICsxMjc1LDcgQEAKICAqIFBhcnNlciBwYXJzaW5nIGZsYWdzIGZpZWxkCiAgKi8KIHN0cnVjdCBwYXJzaW5nX2ZsYWdzIHsKLQl1MTYgZmxhZ3M7CisJX19sZTE2IGZsYWdzOwogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX0VUSEVSTkVUX0FERFJFU1NfVFlQRSAoMHgxPDwwKQogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX0VUSEVSTkVUX0FERFJFU1NfVFlQRV9TSElGVCAwCiAjZGVmaW5lIFBBUlNJTkdfRkxBR1NfVkxBTiAoMHgxPDwxKQpAQCAtMTMzNiw4ICsxMzA2LDggQEAKIAogCiBzdHJ1Y3QgcmVncGFpciB7Ci0JdTMyIGxvOwotCXUzMiBoaTsKKwlfX2xlMzIgbG87CisJX19sZTMyIGhpOwogfTsKIAogCkBAIC0xNDM0LDggKzE0MDQsMTAgQEAKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDQpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgNAorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweDc8PDUpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNQogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1OCBjbGllbnRJZDsKIAl1OCBzYl9pbmRleF9udW1iZXJzOwpAQCAtMTQ2MCwxNCArMTQzMiwxOCBAQAogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEFfU0hJRlQgMgogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDAgKDB4Rjw8NCkKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MgKDB4MTw8NCkKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDU19TSElGVCA0CisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDAgKDB4Nzw8NSkKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA1CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAl1MTYgYmRfYnVmZl9zaXplOwotCXUxNiBtY19hbGlnbm1lbnRfc2l6ZTsKKwl1OCBzdGF0aXN0aWNzX2NvdW50ZXJfaWQ7CisJdTggbWNfYWxpZ25tZW50X2xvZ19zaXplOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IG1jX2FsaWdubWVudF9zaXplOworCXU4IG1jX2FsaWdubWVudF9sb2dfc2l6ZTsKKwl1OCBzdGF0aXN0aWNzX2NvdW50ZXJfaWQ7CiAJdTE2IGJkX2J1ZmZfc2l6ZTsKICNlbmRpZgogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQpAQCAtMTQ3OSwxMyArMTQ1NSw3IEBACiAJdTggX19sb2NhbF9iZF9wcm9kOwogCXU4IF9fbG9jYWxfc2dlX3Byb2Q7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgX19iZF9jb25zOwotCXUxNiBfX3NnZV9jb25zOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IF9fc2dlX2NvbnM7Ci0JdTE2IF9fYmRfY29uczsKLSNlbmRpZgorCXUzMiByZXNlcnZlZDsKIAl1MzIgYmRfcGFnZV9iYXNlX2xvOwogCXUzMiBiZF9wYWdlX2Jhc2VfaGk7CiAJdTMyIHNnZV9wYWdlX2Jhc2VfbG87CkBAIC0xNDk2LDE2ICsxNDY2LDE2IEBACiAgKiBUaGUgZXRoIFJ4IEJ1ZmZlciBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfcnhfYmQgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOworCV9fbGUzMiBhZGRyX2xvOworCV9fbGUzMiBhZGRyX2hpOwogfTsKIAogLyoKICAqIFRoZSBldGggUnggU0dFIERlc2NyaXB0b3IKICAqLwogc3RydWN0IGV0aF9yeF9zZ2UgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOworCV9fbGUzMiBhZGRyX2xvOworCV9fbGUzMiBhZGRyX2hpOwogfTsKIAogLyoKQEAgLTE2OTcsNyArMTY2Nyw3IEBACiB9OwogCiAvKgotICogVGhlIGV0aCBhZ2dyZWdhdGl2ZSBjb250ZXh0IHNlY3Rpb24gb2YgVHN0b3JtCisgKiBUaGUgZXRoIGV4dHJhIGFnZ3JlZ2F0aXZlIGNvbnRleHQgc2VjdGlvbiBvZiBUc3Rvcm0KICAqLwogc3RydWN0IHRzdG9ybV9ldGhfZXh0cmFfYWdfY29udGV4dF9zZWN0aW9uIHsKIAl1MzIgX19hZ2dfdmFsMTsKQEAgLTE5MDgsMTEgKzE4NzgsMTEgQEAKICAqIFRoZSBldGggVHggQnVmZmVyIERlc2NyaXB0b3IKICAqLwogc3RydWN0IGV0aF90eF9iZCB7Ci0JdTMyIGFkZHJfbG87Ci0JdTMyIGFkZHJfaGk7Ci0JdTE2IG5iZDsKLQl1MTYgbmJ5dGVzOwotCXUxNiB2bGFuOworCV9fbGUzMiBhZGRyX2xvOworCV9fbGUzMiBhZGRyX2hpOworCV9fbGUxNiBuYmQ7CisJX19sZTE2IG5ieXRlczsKKwlfX2xlMTYgdmxhbjsKIAlzdHJ1Y3QgZXRoX3R4X2JkX2ZsYWdzIGJkX2ZsYWdzOwogCXU4IGdlbmVyYWxfZGF0YTsKICNkZWZpbmUgRVRIX1RYX0JEX0hEUl9OQkRTICgweDNGPDwwKQpAQCAtMTk1NSwxMSArMTkyNSwxMSBAQAogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfQ1dSX0ZMR19TSElGVCA3CiAJdTggaXBfaGxlbjsKIAlzOCBjc19vZmZzZXQ7Ci0JdTE2IHRvdGFsX2hsZW47Ci0JdTE2IGxzb19tc3M7Ci0JdTE2IHRjcF9wc2V1ZG9fY3N1bTsKLQl1MTYgaXBfaWQ7Ci0JdTMyIHRjcF9zZW5kX3NlcTsKKwlfX2xlMTYgdG90YWxfaGxlbjsKKwlfX2xlMTYgbHNvX21zczsKKwlfX2xlMTYgdGNwX3BzZXVkb19jc3VtOworCV9fbGUxNiBpcF9pZDsKKwlfX2xlMzIgdGNwX3NlbmRfc2VxOwogfTsKIAogLyoKQEAgLTIwNzUsNDQgKzIwNDUsNDQgQEAKICAqIHVzdG9ybSBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IHVzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOwotCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CisJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKKwlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwotCXUzMiBfX2ZsYWdzOworCV9fbGUzMiBfX2ZsYWdzOwogfTsKIAogLyoKICAqIGNzdG9ybSBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOwotCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CisJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKKwlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwotCXUzMiBfX2ZsYWdzOworCV9fbGUzMiBfX2ZsYWdzOwogfTsKIAogLyoKICAqIHhzdG9ybSBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IHhzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX1hTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOwotCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CisJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKKwlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwotCXUzMiBfX2ZsYWdzOworCV9fbGUzMiBfX2ZsYWdzOwogfTsKIAogLyoKICAqIHRzdG9ybSBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IHRzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOwotCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CisJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKKwlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwotCXUzMiBfX2ZsYWdzOworCV9fbGUzMiBfX2ZsYWdzOwogfTsKIAogLyoKQEAgLTIxMzEsMjIgKzIxMDEsMjIgQEAKICAqIHVzdG9ybSBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IHVzdG9ybV9zdGF0dXNfYmxvY2sgewotCXUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTXTsKKwlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwotCXUzMiBfX2ZsYWdzOworCV9fbGUzMiBfX2ZsYWdzOwogfTsKIAogLyoKICAqIGNzdG9ybSBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IGNzdG9ybV9zdGF0dXNfYmxvY2sgewotCXUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTXTsKKwlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwotCXUzMiBfX2ZsYWdzOworCV9fbGUzMiBfX2ZsYWdzOwogfTsKIAogLyoKQEAgLTIxNjIsOSArMjEzMiw5IEBACiAgKiBUaGUgZGF0YSBmb3IgUlNTIHNldHVwIHJhbXJvZAogICovCiBzdHJ1Y3QgZXRoX2NsaWVudF9zZXR1cF9yYW1yb2RfZGF0YSB7Ci0JdTMyIGNsaWVudF9pZF81YjsKLQl1OCBpc19yZG1hXzFiOwotCXU4IHJlc2VydmVkMDsKKwl1MzIgY2xpZW50X2lkOworCXU4IGlzX3JkbWE7CisJdTggaXNfZmNvZTsKIAl1MTYgcmVzZXJ2ZWQxOwogfTsKIApAQCAtMjIxMiwxMiArMjE4MiwxMiBAQAogI2RlZmluZSBFVEhfRkFTVF9QQVRIX1JYX0NRRV9MNF9YU1VNX05PX1ZBTElEQVRJT05fRkxHX1NISUZUIDcKIAl1OCBwbGFjZW1lbnRfb2Zmc2V0OwogCXU4IHF1ZXVlX2luZGV4OwotCXUzMiByc3NfaGFzaF9yZXN1bHQ7Ci0JdTE2IHZsYW5fdGFnOwotCXUxNiBwa3RfbGVuOwotCXUxNiBsZW5fb25fYmQ7CisJX19sZTMyIHJzc19oYXNoX3Jlc3VsdDsKKwlfX2xlMTYgdmxhbl90YWc7CisJX19sZTE2IHBrdF9sZW47CisJX19sZTE2IGxlbl9vbl9iZDsKIAlzdHJ1Y3QgcGFyc2luZ19mbGFncyBwYXJzX2ZsYWdzOwotCXUxNiBzZ2xbOF07CisJX19sZTE2IHNnbFs4XTsKIH07CiAKIApAQCAtMjIyNSw3ICsyMTk1LDcgQEAKICAqIFRoZSBkYXRhIGZvciBSU1Mgc2V0dXAgcmFtcm9kCiAgKi8KIHN0cnVjdCBldGhfaGFsdF9yYW1yb2RfZGF0YSB7Ci0JdTMyIGNsaWVudF9pZF81YjsKKwl1MzIgY2xpZW50X2lkOwogCXUzMiByZXNlcnZlZDA7CiB9OwogCkBAIC0yMjM2LDExICsyMjA2LDExIEBACiBzdHJ1Y3QgZXRoX3F1ZXJ5X3JhbXJvZF9kYXRhIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAl1OCByZXNlcnZlZDA7Ci0JdTggY29sbGVjdF9wb3J0XzFiOworCXU4IGNvbGxlY3RfcG9ydDsKIAl1MTYgZHJ2X2NvdW50ZXI7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgZHJ2X2NvdW50ZXI7Ci0JdTggY29sbGVjdF9wb3J0XzFiOworCXU4IGNvbGxlY3RfcG9ydDsKIAl1OCByZXNlcnZlZDA7CiAjZW5kaWYKIAl1MzIgY3RyX2lkX3ZlY3RvcjsKQEAgLTIyNTEsOCArMjIyMSw4IEBACiAgKiBQbGFjZSBob2xkZXIgZm9yIHJhbXJvZHMgcHJvdG9jb2wgc3BlY2lmaWMgZGF0YQogICovCiBzdHJ1Y3QgcmFtcm9kX2RhdGEgewotCXUzMiBkYXRhX2xvOwotCXUzMiBkYXRhX2hpOworCV9fbGUzMiBkYXRhX2xvOworCV9fbGUzMiBkYXRhX2hpOwogfTsKIAogLyoKQEAgLTIyNjQsMTYgKzIyMzQsNiBAQAogCiAKIC8qCi0gKiBSeCBMYXN0IEJEIGluIHBhZ2UgKGluIEVUSCkKLSAqLwotc3RydWN0IGV0aF9yeF9iZF9uZXh0X3BhZ2UgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOwotCXU4IHJlc2VydmVkWzhdOwotfTsKLQotCi0vKgogICogRXRoIFJ4IENxZSBzdHJ1Y3R1cmUtIGdlbmVyYWwgc3RydWN0dXJlIGZvciByYW1yb2RzCiAgKi8KIHN0cnVjdCBjb21tb25fcmFtcm9kX2V0aF9yeF9jcWUgewpAQCAtMjI4MiwyNCArMjI0MiwyNCBAQAogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfVFlQRV9TSElGVCAwCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9SRVNFUlZFRDAgKDB4N0Y8PDEpCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9SRVNFUlZFRDBfU0hJRlQgMQotCXU4IGNvbm5fdHlwZV8zYjsKLQl1MTYgcmVzZXJ2ZWQxOwotCXUzMiBjb25uX2FuZF9jbWRfZGF0YTsKKwl1OCBjb25uX3R5cGU7CisJX19sZTE2IHJlc2VydmVkMTsKKwlfX2xlMzIgY29ubl9hbmRfY21kX2RhdGE7CiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DSUQgKDB4RkZGRkZGPDwwKQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEX1NISUZUIDAKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NNRF9JRCAoMHhGRjw8MjQpCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DTURfSURfU0hJRlQgMjQKIAlzdHJ1Y3QgcmFtcm9kX2RhdGEgcHJvdG9jb2xfZGF0YTsKLQl1MzIgcmVzZXJ2ZWQyWzRdOworCV9fbGUzMiByZXNlcnZlZDJbNF07CiB9OwogCiAvKgogICogUnggTGFzdCBDUUUgaW4gcGFnZSAoaW4gRVRIKQogICovCiBzdHJ1Y3QgZXRoX3J4X2NxZV9uZXh0X3BhZ2UgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOwotCXUzMiByZXNlcnZlZFs2XTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKKwlfX2xlMzIgcmVzZXJ2ZWRbNl07CiB9OwogCiAvKgpAQCAtMjMxNiwxNyArMjI3NiwxNyBAQAogICogY29tbW9uIGRhdGEgZm9yIGFsbCBwcm90b2NvbHMKICAqLwogc3RydWN0IHNwZV9oZHIgewotCXUzMiBjb25uX2FuZF9jbWRfZGF0YTsKKwlfX2xlMzIgY29ubl9hbmRfY21kX2RhdGE7CiAjZGVmaW5lIFNQRV9IRFJfQ0lEICgweEZGRkZGRjw8MCkKICNkZWZpbmUgU1BFX0hEUl9DSURfU0hJRlQgMAogI2RlZmluZSBTUEVfSERSX0NNRF9JRCAoMHhGRjw8MjQpCiAjZGVmaW5lIFNQRV9IRFJfQ01EX0lEX1NISUZUIDI0Ci0JdTE2IHR5cGU7CisJX19sZTE2IHR5cGU7CiAjZGVmaW5lIFNQRV9IRFJfQ09OTl9UWVBFICgweEZGPDwwKQogI2RlZmluZSBTUEVfSERSX0NPTk5fVFlQRV9TSElGVCAwCiAjZGVmaW5lIFNQRV9IRFJfQ09NTU9OX1JBTVJPRCAoMHhGRjw8OCkKICNkZWZpbmUgU1BFX0hEUl9DT01NT05fUkFNUk9EX1NISUZUIDgKLQl1MTYgcmVzZXJ2ZWQ7CisJX19sZTE2IHJlc2VydmVkOwogfTsKIAogLyoKQEAgLTIzNTUsOSArMjMxNSw5IEBACiAgKiBkb29yYmVsbCBkYXRhIGluIGhvc3QgbWVtb3J5CiAgKi8KIHN0cnVjdCBldGhfdHhfZGJfZGF0YSB7Ci0JdTMyIHBhY2tldHNfcHJvZDsKLQl1MTYgYmRzX3Byb2Q7Ci0JdTE2IHJlc2VydmVkOworCV9fbGUzMiBwYWNrZXRzX3Byb2Q7CisJX19sZTE2IGJkc19wcm9kOworCV9fbGUxNiByZXNlcnZlZDsKIH07CiAKIApAQCAtMjM3NywxNCArMjMzNywxNiBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfQ0FQQUJJTElUWV9TSElGVCAyCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWSAoMHgxPDwzKQogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFlfU0hJRlQgMwotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSAoMHgxPDw0KQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRV9TSElGVCA0Ci0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRSAoMHgxPDw1KQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEVfU0hJRlQgNQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU0gKDB4MTw8NikKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDYKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDFGRjw8NykKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFICgweDc8PDQpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERV9TSElGVCA0CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRSAoMHgxPDw3KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEVfU0hJRlQgNworI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU0gKDB4MTw8OCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDgKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTSAoMHgxPDw5KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNX1NISUZUIDkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDNGPDwxMCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDEwCiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgY29uZmlnX2ZsYWdzOwogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfQ0FQQUJJTElUWSAoMHgxPDwwKQpAQCAtMjM5NSwxNCArMjM1NywxNiBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfQ0FQQUJJTElUWV9TSElGVCAyCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWSAoMHgxPDwzKQogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFlfU0hJRlQgMwotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSAoMHgxPDw0KQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRV9TSElGVCA0Ci0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRSAoMHgxPDw1KQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEVfU0hJRlQgNQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU0gKDB4MTw8NikKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDYKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDFGRjw8NykKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFICgweDc8PDQpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERV9TSElGVCA0CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRSAoMHgxPDw3KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEVfU0hJRlQgNworI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU0gKDB4MTw8OCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDgKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTSAoMHgxPDw5KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNX1NISUZUIDkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDNGPDwxMCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDEwCiAJdTggcnNzX3Jlc3VsdF9tYXNrOwogCXU4IGxlYWRpbmdfY2xpZW50X2lkOwogI2VuZGlmCkBAIC0yNDIyLDcgKzIzODYsNyBAQAogICogTUFDIGZpbHRlcmluZyBjb25maWd1cmF0aW9uIGNvbW1hbmQgaGVhZGVyCiAgKi8KIHN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9oZHIgewotCXU4IGxlbmd0aF82YjsKKwl1OCBsZW5ndGg7CiAJdTggb2Zmc2V0OwogCXUxNiBjbGllbnRfaWQ7CiAJdTMyIHJlc2VydmVkMTsKQEAgLTI0MzIsMTAgKzIzOTYsMTAgQEAKICAqIE1BQyBhZGRyZXNzIGluIGxpc3QgZm9yIHJhbXJvZAogICovCiBzdHJ1Y3QgdHN0b3JtX2NhbV9lbnRyeSB7Ci0JdTE2IGxzYl9tYWNfYWRkcjsKLQl1MTYgbWlkZGxlX21hY19hZGRyOwotCXUxNiBtc2JfbWFjX2FkZHI7Ci0JdTE2IGZsYWdzOworCV9fbGUxNiBsc2JfbWFjX2FkZHI7CisJX19sZTE2IG1pZGRsZV9tYWNfYWRkcjsKKwlfX2xlMTYgbXNiX21hY19hZGRyOworCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgVFNUT1JNX0NBTV9FTlRSWV9QT1JUX0lEICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9DQU1fRU5UUllfUE9SVF9JRF9TSElGVCAwCiAjZGVmaW5lIFRTVE9STV9DQU1fRU5UUllfUlNSVlZBTDAgKDB4Nzw8MSkKQEAgLTI0ODQsMTEgKzI0NDgsMTEgQEAKICAqIE1BQyBhZGRyZXNzIGluIGxpc3QgZm9yIHJhbXJvZAogICovCiBzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fZW50cnlfZTFoIHsKLQl1MTYgbHNiX21hY19hZGRyOwotCXUxNiBtaWRkbGVfbWFjX2FkZHI7Ci0JdTE2IG1zYl9tYWNfYWRkcjsKLQl1MTYgdmxhbl9pZDsKLQl1MTYgZTFob3ZfaWQ7CisJX19sZTE2IGxzYl9tYWNfYWRkcjsKKwlfX2xlMTYgbWlkZGxlX21hY19hZGRyOworCV9fbGUxNiBtc2JfbWFjX2FkZHI7CisJX19sZTE2IHZsYW5faWQ7CisJX19sZTE2IGUxaG92X2lkOwogCXU4IGNsaWVudF9pZDsKIAl1OCBmbGFnczsKICNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1BPUlQgKDB4MTw8MCkKQEAgLTI1NDQsMjQgKzI1MDgsMjggQEAKICNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxICgweEZGRjw8NCkKICNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDQKIAl1MTYgY29uZmlnX2ZsYWdzOwotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRSAoMHgxPDwwKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRV9TSElGVCAwCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwxKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDIpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMgotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4MUZGRjw8MykKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDMKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRSAoMHgxPDwwKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFX1NISUZUIDAKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEUgKDB4MTw8MSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEVfU0hJRlQgMQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MikKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXUxNiBjb25maWdfZmxhZ3M7Ci0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTU9WQUxfRU5BQkxFICgweDE8PDApCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTU9WQUxfRU5BQkxFX1NISUZUIDAKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDEpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAxCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MikKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAyCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHgxRkZGPDwzKQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMworI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFICgweDE8PDApCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEVfU0hJRlQgMAorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRSAoMHgxPDwxKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRV9TSElGVCAxCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwyKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMgorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMworI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4RkZGPDw0KQorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAogCXUxNiBkcm9wX2ZsYWdzOwogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9JUF9DU19FUlIgKDB4MTw8MCkKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSX1NISUZUIDAKQEAgLTI1OTQsMjggKzI1NjIsNyBAQAogCiAKIC8qCi0gKiBUaHJlZSBSWCBwcm9kdWNlcnMgZm9yIEVUSAotICovCi1zdHJ1Y3QgdHN0b3JtX2V0aF9yeF9wcm9kdWNlcnMgewotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBiZF9wcm9kOwotCXUxNiBjcWVfcHJvZDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBjcWVfcHJvZDsKLQl1MTYgYmRfcHJvZDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiByZXNlcnZlZDsKLQl1MTYgc2dlX3Byb2Q7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgc2dlX3Byb2Q7Ci0JdTE2IHJlc2VydmVkOwotI2VuZGlmCi19OwotCi0KLS8qCi0gKiBjb21tb24gZmxhZyB0byBpbmRpY2F0ZSBleGlzdGVuY2Ugb2YgVFBBLgorICogY29tbW9uIGZsYWcgdG8gaW5kaWNhdGUgZXhpc3RhbmNlIG9mIFRQQS4KICAqLwogc3RydWN0IHRzdG9ybV9ldGhfdHBhX2V4aXN0IHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKQEAgLTI2MzIsMjEgKzI1NzksNzkgQEAKIAogCiAvKgorICogcnggcmluZ3MgcGF1c2UgZGF0YSBmb3IgRTFoIG9ubHkKKyAqLworc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWggeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBiZF90aHJfbG93OworCXUxNiBjcWVfdGhyX2xvdzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBjcWVfdGhyX2xvdzsKKwl1MTYgYmRfdGhyX2xvdzsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBjb3M7CisJdTE2IHNnZV90aHJfbG93OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHNnZV90aHJfbG93OworCXUxNiBjb3M7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfdGhyX2hpZ2g7CisJdTE2IGNxZV90aHJfaGlnaDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBjcWVfdGhyX2hpZ2g7CisJdTE2IGJkX3Rocl9oaWdoOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMDsKKwl1MTYgc2dlX3Rocl9oaWdoOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHNnZV90aHJfaGlnaDsKKwl1MTYgcmVzZXJ2ZWQwOworI2VuZGlmCit9OworCisKKy8qCisgKiBUaHJlZSBSWCBwcm9kdWNlcnMgZm9yIEVUSAorICovCitzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wcm9kdWNlcnMgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBiZF9wcm9kOworCXUxNiBjcWVfcHJvZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBjcWVfcHJvZDsKKwl1MTYgYmRfcHJvZDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByZXNlcnZlZDsKKwl1MTYgc2dlX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgc2dlX3Byb2Q7CisJdTE2IHJlc2VydmVkOworI2VuZGlmCit9OworCisKKy8qCiAgKiBwZXItcG9ydCBTQUZDIGRlbW8gdmFyaWFibGVzCiAgKi8KIHN0cnVjdCBjbW5nX2ZsYWdzX3Blcl9wb3J0IHsKIAl1OCBjb25fbnVtYmVyW05VTV9PRl9QUk9UT0NPTFNdOwotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXU4IGZhaXJuZXNzX2VuYWJsZTsKLQl1OCByYXRlX3NoYXBpbmdfZW5hYmxlOwotCXU4IGNtbmdfcHJvdG9jb2xfZW5hYmxlOwotCXU4IGNtbmdfdm5fZW5hYmxlOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTggY21uZ192bl9lbmFibGU7Ci0JdTggY21uZ19wcm90b2NvbF9lbmFibGU7Ci0JdTggcmF0ZV9zaGFwaW5nX2VuYWJsZTsKLQl1OCBmYWlybmVzc19lbmFibGU7Ci0jZW5kaWYKKwl1MzIgY21uZ19lbmFibGVzOworI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOICgweDE8PDApCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfVk5fU0hJRlQgMAorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19WTiAoMHgxPDwxKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19WTl9TSElGVCAxCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfUFJPVE9DT0wgKDB4MTw8MikKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19QUk9UT0NPTF9TSElGVCAyCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfUkFURV9TSEFQSU5HX1BST1RPQ09MICgweDE8PDMpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfUkFURV9TSEFQSU5HX1BST1RPQ09MX1NISUZUIDMKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19DT1MgKDB4MTw8NCkKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19DT1NfU0hJRlQgNAorI2RlZmluZSBfX0NNTkdfRkxBR1NfUEVSX1BPUlRfUkVTRVJWRUQwICgweDdGRkZGRkY8PDUpCisjZGVmaW5lIF9fQ01OR19GTEFHU19QRVJfUE9SVF9SRVNFUlZFRDBfU0hJRlQgNQogfTsKIAogCkBAIC0yNjc0LDE1ICsyNjc5LDE1IEBACiAgKi8KIHN0cnVjdCBzYWZjX3N0cnVjdF9wZXJfcG9ydCB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IF9fcmVzZXJ2ZWQwOwotCXU4IGN1cl9jb3NfdHlwZXM7CisJdTE2IF9fcmVzZXJ2ZWQxOworCXU4IF9fcmVzZXJ2ZWQwOwogCXU4IHNhZmNfdGltZW91dF91c2VjOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTggc2FmY190aW1lb3V0X3VzZWM7Ci0JdTggY3VyX2Nvc190eXBlczsKLQl1MTYgX19yZXNlcnZlZDA7CisJdTggX19yZXNlcnZlZDA7CisJdTE2IF9fcmVzZXJ2ZWQxOwogI2VuZGlmCi0JdTggY29zX3RvX3Byb3RvY29sW01BWF9DT1NfTlVNQkVSXTsKKwl1MTYgY29zX3RvX3BhdXNlX21hc2tbTlVNX09GX1NBRkNfQklUU107CiB9OwogCiAKQEAgLTI3MDIsMTYgKzI3MDcsMTYgQEAKICAqLwogc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIHsKIAlzdHJ1Y3QgcmVncGFpciB0b3RhbF9zZW50X2J5dGVzOwotCXUzMiB0b3RhbF9zZW50X3BrdHM7Ci0JdTMyIHVuaWNhc3RfcGt0c19zZW50OworCV9fbGUzMiB0b3RhbF9zZW50X3BrdHM7CisJX19sZTMyIHVuaWNhc3RfcGt0c19zZW50OwogCXN0cnVjdCByZWdwYWlyIHVuaWNhc3RfYnl0ZXNfc2VudDsKIAlzdHJ1Y3QgcmVncGFpciBtdWx0aWNhc3RfYnl0ZXNfc2VudDsKLQl1MzIgbXVsdGljYXN0X3BrdHNfc2VudDsKLQl1MzIgYnJvYWRjYXN0X3BrdHNfc2VudDsKKwlfX2xlMzIgbXVsdGljYXN0X3BrdHNfc2VudDsKKwlfX2xlMzIgYnJvYWRjYXN0X3BrdHNfc2VudDsKIAlzdHJ1Y3QgcmVncGFpciBicm9hZGNhc3RfYnl0ZXNfc2VudDsKLQl1MTYgc3RhdHNfY291bnRlcjsKLQl1MTYgcmVzZXJ2ZWQwOwotCXUzMiByZXNlcnZlZDE7CisJX19sZTE2IHN0YXRzX2NvdW50ZXI7CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfTsKIAogCkBAIC0yNzI3LDEwICsyNzMyLDEwIEBACiAgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFRzdG9ybSAocGVyIHBvcnQpCiAgKi8KIHN0cnVjdCB0c3Rvcm1fcGVyX3BvcnRfc3RhdHMgewotCXUzMiBtYWNfZmlsdGVyX2Rpc2NhcmQ7Ci0JdTMyIHh4b3ZlcmZsb3dfZGlzY2FyZDsKLQl1MzIgYnJiX3RydW5jYXRlX2Rpc2NhcmQ7Ci0JdTMyIG1hY19kaXNjYXJkOworCV9fbGUzMiBtYWNfZmlsdGVyX2Rpc2NhcmQ7CisJX19sZTMyIHh4b3ZlcmZsb3dfZGlzY2FyZDsKKwlfX2xlMzIgYnJiX3RydW5jYXRlX2Rpc2NhcmQ7CisJX19sZTMyIG1hY19kaXNjYXJkOwogfTsKIAogCkBAIC0yNzQzLDE3ICsyNzQ4LDE3IEBACiAJc3RydWN0IHJlZ3BhaXIgcmN2X2Jyb2FkY2FzdF9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfbXVsdGljYXN0X2J5dGVzOwogCXN0cnVjdCByZWdwYWlyIHJjdl9lcnJvcl9ieXRlczsKLQl1MzIgY2hlY2tzdW1fZGlzY2FyZDsKLQl1MzIgcGFja2V0c190b29fYmlnX2Rpc2NhcmQ7Ci0JdTMyIHRvdGFsX3Jjdl9wa3RzOwotCXUzMiByY3ZfdW5pY2FzdF9wa3RzOwotCXUzMiByY3ZfYnJvYWRjYXN0X3BrdHM7Ci0JdTMyIHJjdl9tdWx0aWNhc3RfcGt0czsKLQl1MzIgbm9fYnVmZl9kaXNjYXJkOwotCXUzMiB0dGwwX2Rpc2NhcmQ7Ci0JdTE2IHN0YXRzX2NvdW50ZXI7Ci0JdTE2IHJlc2VydmVkMDsKLQl1MzIgcmVzZXJ2ZWQxOworCV9fbGUzMiBjaGVja3N1bV9kaXNjYXJkOworCV9fbGUzMiBwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZDsKKwlfX2xlMzIgdG90YWxfcmN2X3BrdHM7CisJX19sZTMyIHJjdl91bmljYXN0X3BrdHM7CisJX19sZTMyIHJjdl9icm9hZGNhc3RfcGt0czsKKwlfX2xlMzIgcmN2X211bHRpY2FzdF9wa3RzOworCV9fbGUzMiBub19idWZmX2Rpc2NhcmQ7CisJX19sZTMyIHR0bDBfZGlzY2FyZDsKKwlfX2xlMTYgc3RhdHNfY291bnRlcjsKKwlfX2xlMTYgcmVzZXJ2ZWQwOworCV9fbGUzMiByZXNlcnZlZDE7CiB9OwogCiAvKgpAQCAtMjc2NSwxMSArMjc3MCwzMyBAQAogfTsKIAogLyoKKyAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVXN0b3JtIChwZXIgY2xpZW50KQorICovCitzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgeworCXN0cnVjdCByZWdwYWlyIHVjYXN0X25vX2J1ZmZfYnl0ZXM7CisJc3RydWN0IHJlZ3BhaXIgbWNhc3Rfbm9fYnVmZl9ieXRlczsKKwlzdHJ1Y3QgcmVncGFpciBiY2FzdF9ub19idWZmX2J5dGVzOworCV9fbGUzMiB1Y2FzdF9ub19idWZmX3BrdHM7CisJX19sZTMyIG1jYXN0X25vX2J1ZmZfcGt0czsKKwlfX2xlMzIgYmNhc3Rfbm9fYnVmZl9wa3RzOworCV9fbGUxNiBzdGF0c19jb3VudGVyOworCV9fbGUxNiByZXNlcnZlZDA7Cit9OworCisvKgorICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBVc3Rvcm0KKyAqLworc3RydWN0IHVzdG9ybV9jb21tb25fc3RhdHMgeworIHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBjbGllbnRfc3RhdGlzdGljc1tNQVhfVV9TVEFUX0NPVU5URVJfSURdOworfTsKKworLyoKICAqIEV0aCBzdGF0aXN0aWNzIHF1ZXJ5IHN0cnVjdHVyZSBmb3IgdGhlIGV0aF9zdGF0c19xdWVyeSByYW1yb2QKICAqLwogc3RydWN0IGV0aF9zdGF0c19xdWVyeSB7CiAJc3RydWN0IHhzdG9ybV9jb21tb25fc3RhdHMgeHN0b3JtX2NvbW1vbjsKIAlzdHJ1Y3QgdHN0b3JtX2NvbW1vbl9zdGF0cyB0c3Rvcm1fY29tbW9uOworCXN0cnVjdCB1c3Rvcm1fY29tbW9uX3N0YXRzIHVzdG9ybV9jb21tb247CiB9OwogCiAKQEAgLTI3NzcsNiArMjgwNCw3IEBACiAgKiBwZXItdm5pYyBmYWlybmVzcyB2YXJpYWJsZXMKICAqLwogc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuIHsKKwl1MzIgY29zX2NyZWRpdF9kZWx0YVtNQVhfQ09TX05VTUJFUl07CiAJdTMyIHByb3RvY29sX2NyZWRpdF9kZWx0YVtOVU1fT0ZfUFJPVE9DT0xTXTsKIAl1MzIgdm5fY3JlZGl0X2RlbHRhOwogCXUzMiBfX3Jlc2VydmVkMDsKQEAgLTI3ODgsMTMgKzI4MTYsMTUgQEAKICAqLwogc3RydWN0IGZ3X3ZlcnNpb24gewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBwYXRjaDsKLQl1OCBwcmltYXJ5OwotCXU4IGNsaWVudDsKKwl1OCBlbmdpbmVlcmluZzsKKwl1OCByZXZpc2lvbjsKKwl1OCBtaW5vcjsKKwl1OCBtYWpvcjsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IGNsaWVudDsKLQl1OCBwcmltYXJ5OwotCXUxNiBwYXRjaDsKKwl1OCBtYWpvcjsKKwl1OCBtaW5vcjsKKwl1OCByZXZpc2lvbjsKKwl1OCBlbmdpbmVlcmluZzsKICNlbmRpZgogCXUzMiBmbGFnczsKICNkZWZpbmUgRldfVkVSU0lPTl9PUFRJTUlaRUQgKDB4MTw8MCkKQEAgLTI4MTIsOSArMjg0MiwxMCBAQAogICogRlcgdmVyc2lvbiBzdG9yZWQgaW4gZmlyc3QgbGluZSBvZiBwcmFtCiAgKi8KIHN0cnVjdCBwcmFtX2Z3X3ZlcnNpb24gewotCXU4IGNsaWVudDsKLQl1OCBwcmltYXJ5OwotCXUxNiBwYXRjaDsKKwl1OCBtYWpvcjsKKwl1OCBtaW5vcjsKKwl1OCByZXZpc2lvbjsKKwl1OCBlbmdpbmVlcmluZzsKIAl1OCBmbGFnczsKICNkZWZpbmUgUFJBTV9GV19WRVJTSU9OX09QVElNSVpFRCAoMHgxPDwwKQogI2RlZmluZSBQUkFNX0ZXX1ZFUlNJT05fT1BUSU1JWkVEX1NISUZUIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaAppbmRleCAzYjBjMjQ5Li4zOWJhMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfaW5pdC5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMTIgKzIyLDE1IEBACiAjZGVmaW5lIElOSVRfQVNJQwkJCTB4NAogI2RlZmluZSBJTklUX0hBUkRXQVJFCQkJMHg3CiAKLSNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTEJCSgweDU4MDAgLyA0KQotI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMUgJCSgweDEwMDAwIC8gNCkKLSNkZWZpbmUgVFNUT1JNX0lOVE1FTV9BRERSCQkweDFhMDAwMAotI2RlZmluZSBDU1RPUk1fSU5UTUVNX0FERFIJCTB4MjIwMDAwCi0jZGVmaW5lIFhTVE9STV9JTlRNRU1fQUREUgkJMHgyYTAwMDAKLSNkZWZpbmUgVVNUT1JNX0lOVE1FTV9BRERSCQkweDMyMDAwMAorI2RlZmluZSBUU1RPUk1fSU5UTUVNX0FERFIJCVRTRU1fUkVHX0ZBU1RfTUVNT1JZCisjZGVmaW5lIENTVE9STV9JTlRNRU1fQUREUgkJQ1NFTV9SRUdfRkFTVF9NRU1PUlkKKyNkZWZpbmUgWFNUT1JNX0lOVE1FTV9BRERSCQlYU0VNX1JFR19GQVNUX01FTU9SWQorI2RlZmluZSBVU1RPUk1fSU5UTUVNX0FERFIJCVVTRU1fUkVHX0ZBU1RfTUVNT1JZCisvKiBSQU0wIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTEJCTB4NTgwMAorI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMUgJCTB4MTAwMDAKKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkUoYnApCSgoQ0hJUF9JU19FMUgoYnApID8gU1RPUk1fSU5UTUVNX1NJWkVfRTFIIDogXAorCQkJCQkJICAgIFNUT1JNX0lOVE1FTV9TSVpFX0UxKSAvIDQpCiAKIAogLyogSW5pdCBvcGVyYXRpb24gdHlwZXMgYW5kIHN0cnVjdHVyZXMgKi8KQEAgLTE2NywyMSArMTcwLDI0IEBACiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfZmlsbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgaW50IGZpbGwsIHUzMiBsZW4pCiB7Ci0JaWYgKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSB7Ci0JCUJOWDJYX0VSUigiTEFSR0UgRE1BRSBPUEVSQVRJT04gISBhZGRyIDB4JXggIGxlbiAweCV4XG4iLAotCQkJICBhZGRyLCBsZW4qNCk7Ci0JCXJldHVybjsKLQl9Ci0JbWVtc2V0KGJwLT5ndW56aXBfYnVmLCBmaWxsLCBsZW4gKiA0KTsKKwl1MzIgYnVmX2xlbiA9ICgoKGxlbiAqIDQpID4gRldfQlVGX1NJWkUpID8gRldfQlVGX1NJWkUgOiAobGVuICogNCkpOworCXUzMiBidWZfbGVuMzIgPSBidWZfbGVuIC8gNDsKKwlpbnQgaTsKIAotCWJueDJ4X3dyaXRlX2JpZ19idWYoYnAsIGFkZHIsIGxlbik7CisJbWVtc2V0KGJwLT5ndW56aXBfYnVmLCBmaWxsLCBidWZfbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gYnVmX2xlbjMyKSB7CisJCXUzMiBjdXJfbGVuID0gbWluKGJ1Zl9sZW4zMiwgbGVuIC0gaSk7CisKKwkJYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciArIGkgKiA0LCBjdXJfbGVuKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfd3JfNjQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGNvbnN0IHUzMiAqZGF0YSwKIAkJCSAgICAgdTMyIGxlbjY0KQogewotCXUzMiBidWZfbGVuMzIgPSBGV19CVUZfU0laRS80OwotCXUzMiBsZW4gPSBsZW42NCoyOworCXUzMiBidWZfbGVuMzIgPSBGV19CVUZfU0laRSAvIDQ7CisJdTMyIGxlbiA9IGxlbjY0ICogMjsKIAl1NjQgZGF0YTY0ID0gMDsKIAlpbnQgaTsKIApAQCAtMjcwLDYgKzI3Niw5IEBACiAJCXJjID0gYm54MnhfZ3VuemlwKGJwLCAodTggKilkYXRhLCBsZW4pOwogCQlpZiAocmMpIHsKIAkJCUJOWDJYX0VSUigiZ3VuemlwIGZhaWxlZCAhIHJjICVkXG4iLCByYyk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQlrZnJlZSh0ZW1wKTsKKyNlbmRpZgogCQkJcmV0dXJuOwogCQl9CiAJCWxlbiA9IGJwLT5ndW56aXBfb3V0bGVuOwpAQCAtNDIyLDU3ICs0MzEsNTcgQEAKIAogLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHJlYWQgcXVldWUgZm9yIGVhY2ggbWF4IHJlcXVlc3Qgc2l6ZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9kYXRhW05VTV9SRF9RXVtNQVhfUkRfT1JEICsgMV0gPSB7Ci0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgMjV9LCB7MzIgLCA2NCAsIDI1fSwgezY0ICwgNjQgLCA0MX0gfSwKLQl7ezQgLCA4ICwgNH0sICAgezQgLCA4ICwgNH0sICAgIHs0ICwgOCAsIDR9LCAgICB7NCAsIDggLCA0fSB9LAotCXt7NCAsIDMgLCAzfSwgICB7NCAsIDMgLCAzfSwgICAgezQgLCAzICwgM30sICAgIHs0ICwgMyAsIDN9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MTYgLCAzICwgMTF9LCAgezE2ICwgMyAsIDExfSB9LAotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0sIHs2NCAsIDY0ICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezY0ICwgMyAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7NjQgLCAzICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezY0ICwgMyAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCA0MX0sIHszMiAsIDY0ICwgODF9LCB7NjQgLCA2NCAsIDEyMH0gfQorLyogMSAqLwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSwgezY0LCA2NCwgNDF9IH0sCisJeyB7NCwgOCwgIDR9LCAgezQsICA4LCAgNH0sICB7NCwgIDgsICA0fSwgIHs0LCAgOCwgIDR9ICB9LAorCXsgezQsIDMsICAzfSwgIHs0LCAgMywgIDN9LCAgezQsICAzLCAgM30sICB7NCwgIDMsICAzfSAgfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHsxNiwgMywgIDExfSwgezE2LCAzLCAgMTF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0sIHs2NCwgNjQsIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKy8qIDEwICoveyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorLyogMjAgKi97IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCA0MX0sIHszMiwgNjQsIDgxfSwgezY0LCA2NCwgMTIwfSB9CiB9OwogCiAvKiBkZXJpdmVkIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggd3JpdGUgcXVldWUgZm9yIGVhY2ggbWF4IHJlcXVlc3Qgc2l6ZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSB3cml0ZV9hcmJfZGF0YVtOVU1fV1JfUV1bTUFYX1dSX09SRCArIDFdID0gewotCXt7NCAsIDYgLCAzfSwgICB7NCAsIDYgLCAzfSwgICAgezQgLCA2ICwgM30gfSwKLQl7ezQgLCAyICwgM30sICAgezQgLCAyICwgM30sICAgIHs0ICwgMiAsIDN9IH0sCi0Je3s4ICwgMiAsIDZ9LCAgIHsxNiAsIDIgLCAxMX0sICB7MTYgLCAyICwgMTF9IH0sCi0Je3s4ICwgMiAsIDZ9LCAgIHsxNiAsIDIgLCAxMX0sICB7MzIgLCAyICwgMjF9IH0sCi0Je3s4ICwgMiAsIDZ9LCAgIHsxNiAsIDIgLCAxMX0sICB7MzIgLCAyICwgMjF9IH0sCi0Je3s4ICwgMiAsIDZ9LCAgIHsxNiAsIDIgLCAxMX0sICB7MzIgLCAyICwgMjF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgMjV9LCB7MzIgLCA2NCAsIDI1fSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezE2ICwgMiAsIDExfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezE2ICwgMiAsIDExfSB9LAotCXt7OCAsIDkgLCA2fSwgICB7MTYgLCA5ICwgMTF9LCAgezMyICwgOSAsIDIxfSB9LAotCXt7OCAsIDQ3ICwgMTl9LCB7MTYgLCA0NyAsIDE5fSwgezMyICwgNDcgLCAyMX0gfSwKLQl7ezggLCA5ICwgNn0sICAgezE2ICwgOSAsIDExfSwgIHsxNiAsIDkgLCAxMX0gfSwKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCA0MX0sIHszMiAsIDY0ICwgODF9IH0KKy8qIDEgKi8JeyB7NCwgNiwgIDN9LCAgezQsICA2LCAgM30sICB7NCwgIDYsICAzfSB9LAorCXsgezQsIDIsICAzfSwgIHs0LCAgMiwgIDN9LCAgezQsICAyLCAgM30gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAorLyogMTAgKi97IHs4LCA5LCAgNn0sICB7MTYsIDksICAxMX0sIHszMiwgOSwgIDIxfSB9LAorCXsgezgsIDQ3LCAxOX0sIHsxNiwgNDcsIDE5fSwgezMyLCA0NywgMjF9IH0sCisJeyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MTYsIDksICAxMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCA0MX0sIHszMiwgNjQsIDgxfSB9CiB9OwogCiAvKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHJlYWQgcXVldWVzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2FkZHJbTlVNX1JEX1EtMV0gPSB7Ci0Je1BYUDJfUkVHX1JRX0JXX1JEX0wwLCBQWFAyX1JFR19SUV9CV19SRF9BREQwLAorLyogMSAqLwl7UFhQMl9SRUdfUlFfQldfUkRfTDAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDAsCiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDB9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIxfSwKQEAgLTQ5MCw3ICs0OTksNyBAQAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjd9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREOCwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUI4fSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDksIFBYUDJfUkVHX1BTV1JRX0JXX0FERDksCisvKiAxMCAqL3tQWFAyX1JFR19QU1dSUV9CV19MOSwgUFhQMl9SRUdfUFNXUlFfQldfQUREOSwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUI5fSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDEwLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMCwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMH0sCkBAIC01MTAsNyArNTE5LDcgQEAKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTd9LAogCXtQWFAyX1JFR19SUV9CV19SRF9MMTgsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE4LAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxOH0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wxOSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTksCisvKiAyMCAqL3tQWFAyX1JFR19SUV9CV19SRF9MMTksIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE5LAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxOX0sCiAJe1BYUDJfUkVHX1JRX0JXX1JEX0wyMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjAsCiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDIwfSwKQEAgLTUzMiw3ICs1NDEsNyBAQAogCiAvKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHdyaXRlIHF1ZXVlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSB3cml0ZV9hcmJfYWRkcltOVU1fV1JfUS0xXSA9IHsKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCisvKiAxICovCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIxfSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDIsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDIsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMn0sCkBAIC01NTAsNyArNTU5LDcgQEAKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMH0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wxMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTF9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMjgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4LAorLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDI4LCBQWFAyX1JFR19QU1dSUV9CV19BREQyOCwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIyOH0sCiAJe1BYUDJfUkVHX1JRX0JXX1dSX0wyOSwgUFhQMl9SRUdfUlFfQldfV1JfQUREMjksCiAJCVBYUDJfUkVHX1JRX0JXX1dSX1VCT1VORDI5fSwKQEAgLTU2OCw3ICs1NzcsMTIgQEAKIAkJCSAgICAgYnAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsICZkZXZjdGwpOwogCURQKE5FVElGX01TR19IVywgInJlYWQgMHgleCBmcm9tIGRldmN0bFxuIiwgZGV2Y3RsKTsKIAl3X29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEKSA+PiA1KTsKLQlyX29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEpID4+IDEyKTsKKwlpZiAoYnAtPm1ycnMgPT0gLTEpCisJCXJfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1JFQURSUSkgPj4gMTIpOworCWVsc2UgeworCQlEUChORVRJRl9NU0dfSFcsICJmb3JjZSByZWFkIG9yZGVyIHRvICVkXG4iLCBicC0+bXJycyk7CisJCXJfb3JkZXIgPSBicC0+bXJyczsKKwl9CiAKIAlpZiAocl9vcmRlciA+IE1BWF9SRF9PUkQpIHsKIAkJRFAoTkVUSUZfTVNHX0hXLCAicmVhZCBvcmRlciBvZiAlZCAgb3JkZXIgYWRqdXN0ZWQgdG8gJWRcbiIsCkBAIC02NDMsMTcgKzY1NywxOCBAQAogCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVVNETURQX1RILCAoMHgxOCA8PCB3X29yZGVyKSk7CiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfSENfTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0NTRE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1RTRE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1hTRE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1FNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UTV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfU1JDX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9EQkdfTVBTLCB3X29yZGVyKzEpOworCQl2YWwgPSAoKHdfb3JkZXIgPT0gMCkgPyAyIDogMyk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfSENfTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0NTRE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1RTRE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1hTRE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1FNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UTV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfU1JDX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9EQkdfTVBTLCB2YWwpOwogCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0RNQUVfTVBTLCAyKTsgLyogRE1BRSBpcyBzcGVjaWFsICovCi0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ0RVX01QUywgd19vcmRlcisxKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DRFVfTVBTLCB2YWwpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKaW5kZXggOTc1NWJmNi4uMWYyMmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCkBAIC0xLDcgKzEsMjMgQEAKICNpZm5kZWYgX19CTlgyWF9JTklUX1ZBTFVFU19IX18KICNkZWZpbmUgX19CTlgyWF9JTklUX1ZBTFVFU19IX18KIAotLyogVGhpcyBhcnJheSBjb250YWlucyB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIG5lZWRlZCB0byBpbml0aWFsaXplIHRoZSBjaGlwLgorLyogYm54MnhfaW5pdF92YWx1ZXMuaDogQnJvYWRjb20gTlgyIDEwRyBuZXR3b3JrIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZXhjZXB0IGFzIG5vdGVkIGJlbG93LgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKgorICoKKyAqIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcC4KICAqCiAgKiBGb3IgZWFjaCBibG9jayBpbiB0aGUgY2hpcCB0aGVyZSBhcmUgdGhyZWUgaW5pdCBzdGFnZXM6CiAgKiBjb21tb24gLSBIVyB1c2VkIGJ5IGJvdGggcG9ydHMsCkBAIC00NywxMiArNjMsMTYgQEAKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8xLCAweDEwMTAwMDAwfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8yLCAweDIwMTAwMDAwfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8zLCAweDMwMTAwMDAwfSwKLQl7T1BfWlIsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9aUl9FMSwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzQsIDB4NH0sCisJe09QX1dSX0UxSCwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzQsIDB4NDAxMDAwMDB9LAorCXtPUF9aUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV81LCAweDN9LAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzAsIDB4MTAwMDAwfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8xLCAweDEyMTQwMDAwfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8yLCAweDIyMTQwMDAwfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8zLCAweDMyMTQwMDAwfSwKLQl7T1BfWlIsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9aUl9FMSwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzQsIDB4NH0sCisJe09QX1dSX0UxSCwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzQsIDB4NDIxNDAwMDB9LAorCXtPUF9aUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV81LCAweDN9LAogCXtPUF9SRCwgUFJTX1JFR19OVU1fT0ZfUEFDS0VUUywgMHgwfSwKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX0NGQ19GTFVTSF9NRVNTQUdFUywgMHgwfSwKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX1RSQU5TUEFSRU5UX0ZMVVNIX01FU1NBR0VTLCAweDB9LApAQCAtNzEsMTUgKzkxLDE2IEBACiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfMSwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfMiwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfMywgMHgzZn0sCi0Je09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgwfSwKKwl7T1BfV1JfRTEsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV80LCAweDB9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV80LCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV81LCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV82LCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV83LCAweDNmfSwKLSNkZWZpbmUgUFJTX0NPTU1PTl9FTkQgICAgICAgICAgNDcKLSNkZWZpbmUgU1JDSF9DT01NT05fU1RBUlQgICAgICAgNDcKKyNkZWZpbmUgUFJTX0NPTU1PTl9FTkQgICAgICAgICAgNTIKKyNkZWZpbmUgU1JDSF9DT01NT05fU1RBUlQgICAgICAgNTIKIAl7T1BfV1JfRTFILCBTUkNfUkVHX0UxSE1GX0VOQUJMRSwgMHgxfSwKLSNkZWZpbmUgU1JDSF9DT01NT05fRU5EICAgICAgICAgNDgKLSNkZWZpbmUgVFNETV9DT01NT05fU1RBUlQgICAgICAgNDgKKyNkZWZpbmUgU1JDSF9DT01NT05fRU5EICAgICAgICAgNTMKKyNkZWZpbmUgVFNETV9DT01NT05fU1RBUlQgICAgICAgNTMKIAl7T1BfV1JfRTEsIFRTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHg0MTF9LAogCXtPUF9XUl9FMUgsIFRTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHgyMTF9LAogCXtPUF9XUl9FMSwgVFNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHg0MDB9LApAQCAtOTIsMTAgKzExMywxNSBAQAogCXtPUF9XUiwgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMSwgMHhmZmZmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDIsIDB4ZmZmZn0sCiAJe09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgzLCAweGZmZmZ9LAotCXtPUF9aUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wLCAweDJ9LAorCXtPUF9aUl9FMSwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wLCAweDJ9LAorCXtPUF9XUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyMH0sCisJe09QX1dSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xLCAweDB9LAogCXtPUF9XUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yLCAweDM0fSwKIAl7T1BfV1IsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMywgMHgzNX0sCi0Je09QX1pSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4N2N9LAorCXtPUF9aUl9FMSwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDdjfSwKKwl7T1BfWlJfRTFILCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4MWN9LAorCXtPUF9XUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfVF8wLCAweDF9LAorCXtPUF9aUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfVF8xLCAweDVmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfSU4yLCAweDNmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0VOQUJMRV9PVVQxLCAweDdmZmZmZmZ9LApAQCAtMTE4LDggKzE0NCw4IEBACiAJe09QX1dSX0FTSUMsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKIAl7T1BfV1JfRU1VTCwgVFNETV9SRUdfVElNRVJfVElDSywgMHgxfSwKIAl7T1BfV1JfRlBHQSwgVFNETV9SRUdfVElNRVJfVElDSywgMHhhfSwKLSNkZWZpbmUgVFNETV9DT01NT05fRU5EICAgICAgICAgODYKLSNkZWZpbmUgVENNX0NPTU1PTl9TVEFSVCAgICAgICAgODYKKyNkZWZpbmUgVFNETV9DT01NT05fRU5EICAgICAgICAgOTYKKyNkZWZpbmUgVENNX0NPTU1PTl9TVEFSVCAgICAgICAgOTYKIAl7T1BfV1IsIFRDTV9SRUdfWFhfTUFYX0xMX1NaLCAweDIwfSwKIAl7T1BfV1IsIFRDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIFRDTV9SRUdfVFFNX1RDTV9IRFJfUCwgMHgyMTUwMDIwfSwKQEAgLTEyOSwxMCArMTU1LDE2IEBACiAJe09QX1dSLCBUQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKIAl7T1BfV1IsIFRDTV9SRUdfRVhQUl9FVk5UX0lELCAweDMwfSwKIAl7T1BfV1IsIFRDTV9SRUdfU1RPUF9FVk5UX0lELCAweDMxfSwKLQl7T1BfV1IsIFRDTV9SRUdfUFJTX1dFSUdIVCwgMHg0fSwKLQl7T1BfV1IsIFRDTV9SRUdfUEJGX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVENNX1JFR19QUlNfV0VJR0hULCAweDV9LAorCXtPUF9XUiwgVENNX1JFR19QQkZfV0VJR0hULCAweDZ9LAorCXtPUF9XUiwgVENNX1JFR19VU0VNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFRDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBUQ01fUkVHX0NQX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIFRDTV9SRUdfVFNETV9XRUlHSFQsIDB4NH0sCisJe09QX1dSLCBUQ01fUkVHX1RTRE1fV0VJR0hULCAweDV9LAorCXtPUF9XUiwgVENNX1JFR19UUU1fUF9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX1RRTV9TX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFRDTV9SRUdfVE1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVENNX1JFR19UQ01fVFFNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgVENNX1JFR19HUl9BUkJfVFlQRSwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfR1JfTEQwX1BSLCAweDF9LApAQCAtMTQ5LDcgKzE4MSw5IEBACiAJe09QX1dSLCBUQ01fUkVHX05fU01fQ1RYX0xEXzEsIDB4N30sCiAJe09QX1dSLCBUQ01fUkVHX05fU01fQ1RYX0xEXzIsIDB4OH0sCiAJe09QX1dSLCBUQ01fUkVHX05fU01fQ1RYX0xEXzMsIDB4OH0sCi0Je09QX1pSLCBUQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4NH0sCisJe09QX1pSX0UxLCBUQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4NH0sCisJe09QX1dSX0UxSCwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDF9LAorCXtPUF9aUl9FMUgsIFRDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX1JFRzBfU1osIDB4Nn0sCiAJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhkfSwKIAl7T1BfV1JfRTEsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJkfSwKQEAgLTE3NSw3NSArMjA5LDc1IEBACiAJe09QX1dSLCBUQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgVENNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBUQ01fQ09NTU9OX0VORCAgICAgICAgICAxNDEKLSNkZWZpbmUgVENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTQxCisjZGVmaW5lIFRDTV9DT01NT05fRU5EICAgICAgICAgIDE1OQorI2RlZmluZSBUQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNTkKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHg3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg3fSwKLSNkZWZpbmUgVENNX0ZVTkMwX0VORCAgICAgICAgICAgMTQ1Ci0jZGVmaW5lIFRDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE0NQorI2RlZmluZSBUQ01fRlVOQzBfRU5EICAgICAgICAgICAxNjMKKyNkZWZpbmUgVENNX0ZVTkMxX1NUQVJUICAgICAgICAgMTYzCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8xLCAweDI3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgyN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzEsIDB4Mjd9LAotI2RlZmluZSBUQ01fRlVOQzFfRU5EICAgICAgICAgICAxNDkKLSNkZWZpbmUgVENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTQ5CisjZGVmaW5lIFRDTV9GVU5DMV9FTkQgICAgICAgICAgIDE2NworI2RlZmluZSBUQ01fRlVOQzJfU1RBUlQgICAgICAgICAxNjcKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHgxZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4MTd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8wLCAweDE3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgxN30sCi0jZGVmaW5lIFRDTV9GVU5DMl9FTkQgICAgICAgICAgIDE1MwotI2RlZmluZSBUQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNTMKKyNkZWZpbmUgVENNX0ZVTkMyX0VORCAgICAgICAgICAgMTcxCisjZGVmaW5lIFRDTV9GVU5DM19TVEFSVCAgICAgICAgIDE3MQogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDNkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgzN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Mzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDM3fSwKLSNkZWZpbmUgVENNX0ZVTkMzX0VORCAgICAgICAgICAgMTU3Ci0jZGVmaW5lIFRDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE1NworI2RlZmluZSBUQ01fRlVOQzNfRU5EICAgICAgICAgICAxNzUKKyNkZWZpbmUgVENNX0ZVTkM0X1NUQVJUICAgICAgICAgMTc1CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4NGR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDQ3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHg0N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4NDd9LAotI2RlZmluZSBUQ01fRlVOQzRfRU5EICAgICAgICAgICAxNjEKLSNkZWZpbmUgVENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTYxCisjZGVmaW5lIFRDTV9GVU5DNF9FTkQgICAgICAgICAgIDE3OQorI2RlZmluZSBUQ01fRlVOQzVfU1RBUlQgICAgICAgICAxNzkKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHg2ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Njd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8xLCAweDY3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg2N30sCi0jZGVmaW5lIFRDTV9GVU5DNV9FTkQgICAgICAgICAgIDE2NQotI2RlZmluZSBUQ01fRlVOQzZfU1RBUlQgICAgICAgICAxNjUKKyNkZWZpbmUgVENNX0ZVTkM1X0VORCAgICAgICAgICAgMTgzCisjZGVmaW5lIFRDTV9GVU5DNl9TVEFSVCAgICAgICAgIDE4MwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDVkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg1N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4NTd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDU3fSwKLSNkZWZpbmUgVENNX0ZVTkM2X0VORCAgICAgICAgICAgMTY5Ci0jZGVmaW5lIFRDTV9GVU5DN19TVEFSVCAgICAgICAgIDE2OQorI2RlZmluZSBUQ01fRlVOQzZfRU5EICAgICAgICAgICAxODcKKyNkZWZpbmUgVENNX0ZVTkM3X1NUQVJUICAgICAgICAgMTg3CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4N2R9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8xLCAweDc3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg3N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzEsIDB4Nzd9LAotI2RlZmluZSBUQ01fRlVOQzdfRU5EICAgICAgICAgICAxNzMKLSNkZWZpbmUgQlJCMV9DT01NT05fU1RBUlQgICAgICAgMTczCisjZGVmaW5lIFRDTV9GVU5DN19FTkQgICAgICAgICAgIDE5MQorI2RlZmluZSBCUkIxX0NPTU1PTl9TVEFSVCAgICAgICAxOTEKIAl7T1BfU1csIEJSQjFfUkVHX0xMX1JBTSwgMHgyMDAwMDIwfSwKIAl7T1BfV1IsIEJSQjFfUkVHX1NPRlRfUkVTRVQsIDB4MX0sCiAJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfNCwgMHgwfSwKIAl7T1BfU1csIEJSQjFfUkVHX0ZSRUVfTElTVF9QUlNfQ1JEVCwgMHgzMDIyMH0sCiAJe09QX1dSLCBCUkIxX1JFR19TT0ZUX1JFU0VULCAweDB9LAotI2RlZmluZSBCUkIxX0NPTU1PTl9FTkQgICAgICAgICAxNzgKLSNkZWZpbmUgQlJCMV9QT1JUMF9TVEFSVCAgICAgICAgMTc4CisjZGVmaW5lIEJSQjFfQ09NTU9OX0VORCAgICAgICAgIDE5NgorI2RlZmluZSBCUkIxX1BPUlQwX1NUQVJUICAgICAgICAxOTYKIAl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCwgMHhiOH0sCiAJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8wLCAweDExNH0sCiAJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfUEFVU0VfQ1lDTEVTXzAsIDB4MH0sCiAJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMCwgMHgwfSwKLSNkZWZpbmUgQlJCMV9QT1JUMF9FTkQgICAgICAgICAgMTgyCi0jZGVmaW5lIEJSQjFfUE9SVDFfU1RBUlQgICAgICAgIDE4MgorI2RlZmluZSBCUkIxX1BPUlQwX0VORCAgICAgICAgICAyMDAKKyNkZWZpbmUgQlJCMV9QT1JUMV9TVEFSVCAgICAgICAgMjAwCiAJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzEsIDB4Yjh9LAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMSwgMHgxMTR9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18xLCAweDB9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzEsIDB4MH0sCi0jZGVmaW5lIEJSQjFfUE9SVDFfRU5EICAgICAgICAgIDE4NgotI2RlZmluZSBUU0VNX0NPTU1PTl9TVEFSVCAgICAgICAxODYKKyNkZWZpbmUgQlJCMV9QT1JUMV9FTkQgICAgICAgICAgMjA0CisjZGVmaW5lIFRTRU1fQ09NTU9OX1NUQVJUICAgICAgIDIwNAogCXtPUF9SRCwgVFNFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgVFNFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgVFNFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMzAzLDE0MyArMzM3LDE2NiBAQAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMDIwLCAweGM4fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYzE4LCAweDR9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMDAwLCAweDJ9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYzEwLCAweDJ9LAogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYWQwLCAweDB9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWFkOCwgMHg0fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDgsIDB4Mn0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiMjgsIDB4Nn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM2NzgsIDB4Nn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODEwLCAweDR9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNjcwLCAweDJ9LAogCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjAsIDB4NDAyMjR9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDA4LCAweDR9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDJ9LAogCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRjYjAsIDB4ODAyMjh9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDA4LCAweDR9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDkzMDAwMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMTgsIDB4NH0sCi0Je09QX1pQX0UxLCBUU0VNX1JFR19JTlRfVEFCTEUsIDB4OTQwMDAwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyOCwgMHg0fSwKIAl7T1BfV1JfNjRfRTEsIFRTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzYwLCAweDE0MDIzMH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4NH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19QUkFNLCAweDMyNGYwMDAwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAzOCwgMHg0fSwKLQl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0sIDB4MzBiMTAwMDB9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzMzI1MGM5NH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDgsIDB4NH0sCi0Je09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzYzUwYzJkfSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweGU0ZDE5NWV9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDU4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4YmM2MTkxZn0sCisJe09QX1dSXzY0X0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMWUwMCwgMHg1YzQwMDIzMn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNjgsIDB4NH0sCi0Je09QX1dSXzY0X0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMTdmMCwgMHg1ZDAyMDIzMn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNzgsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDgsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxNDAsIDB4MjAwMjI0fSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19JTlRfVEFCTEUsIDB4OTYwMDAwfSwKLQl7T1BfV1JfNjRfRTFILCBUU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2MCwgMHgxNDAyNDR9LAotCXtPUF9aUF9FMUgsIFRTRU1fUkVHX1BSQU0sIDB4MzBjYzAwMDB9LAotCXtPUF9aUF9FMUgsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzNkZjBjMzN9LAotCXtPUF9aUF9FMUgsIFRTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweGRjZTE5MmJ9LAotCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX1BSQU0gKyAweDExYzcwLCAweDVjNzIwMjQ2fSwKLSNkZWZpbmUgVFNFTV9DT01NT05fRU5EICAgICAgICAgMjc2Ci0jZGVmaW5lIFRTRU1fUE9SVDBfU1RBUlQgICAgICAgIDI3NgorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MmMwLCAweDIwMDIyNH0sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDliMDAwMH0sCisJe09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzOTgsIDB4ZDAyNDR9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX1BSQU0sIDB4MzI1ZTAwMDB9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzU5NjBjOTh9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDFhZWExOWZlfSwKKwl7T1BfV1JfNjRfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxNDNkMCwgMHg1Nzg2MDI0Nn0sCisjZGVmaW5lIFRTRU1fQ09NTU9OX0VORCAgICAgICAgIDI5NworI2RlZmluZSBUU0VNX1BPUlQwX1NUQVJUICAgICAgICAyOTcKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMmM4LCAweDIwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgxNmN9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4ZmN9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4MTZjfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjAwMCwgMHgyOH0sCiAJe09QX1dSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2MCwgMHgwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjE0MCwgMHhjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGF9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMmMwLCAweDEyfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDUwLCAweDZ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzUwLCAweGZhfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzUwLCAweDY0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTA4LCAweDJ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAgKyAweDgsIDB4NTAyMzR9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAgKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1NzAsIDB4MTJ9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDljMCwgMHhiZX0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OWMwLCAweDRjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODIwLCAweGV9LAotCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjAsIDB4MjAyMzR9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjAsIDB4MjAyMzl9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MDgsIDB4Mn0sCi0jZGVmaW5lIFRTRU1fUE9SVDBfRU5EICAgICAgICAgIDI5NAotI2RlZmluZSBUU0VNX1BPUlQxX1NUQVJUICAgICAgICAyOTQKKyNkZWZpbmUgVFNFTV9QT1JUMF9FTkQgICAgICAgICAgMzE3CisjZGVmaW5lIFRTRU1fUE9SVDFfU1RBUlQgICAgICAgIDMxNwogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzNDgsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNWIwLCAweDE2Y30sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDNmMCwgMHhmY30sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDViMCwgMHgxNmN9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhiMGEwLCAweDI4fSwKIAl7T1BfV1JfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY0LCAweDB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhiMTcwLCAweGN9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MjgsIDB4YX0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDgsIDB4MTJ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0NjgsIDB4Nn0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3MzgsIDB4ZmF9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM0ZTAsIDB4NjR9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzgsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMTAsIDB4Mn0sCisJe09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUzOCArIDB4OCwgMHg1MDIzYn0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUzOCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTViOCwgMHgxMn0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Y2I4LCAweGJlfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhZjAsIDB4NGN9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwOCwgMHgyfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4NTgsIDB4ZX0sCi0Je09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWZiOCwgMHgyMDIzNn0sCisJe09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWZiOCwgMHgyMDI0MH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjkxMCwgMHgyfSwKLSNkZWZpbmUgVFNFTV9QT1JUMV9FTkQgICAgICAgICAgMzEyCi0jZGVmaW5lIFRTRU1fRlVOQzBfU1RBUlQgICAgICAgIDMxMgorI2RlZmluZSBUU0VNX1BPUlQxX0VORCAgICAgICAgICAzMzcKKyNkZWZpbmUgVFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMzM3CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjAsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAgKyAweDgsIDB4NTAyNDh9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzFjMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHgxMn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4Mn0sCi0jZGVmaW5lIFRTRU1fRlVOQzBfRU5EICAgICAgICAgIDMxOAotI2RlZmluZSBUU0VNX0ZVTkMxX1NUQVJUICAgICAgICAzMTgKKyNkZWZpbmUgVFNFTV9GVU5DMF9FTkQgICAgICAgICAgMzQ1CisjZGVmaW5lIFRTRU1fRlVOQzFfU1RBUlQgICAgICAgIDM0NQogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjY0LCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDM4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDM4LCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDM4ICsgMHg4LCAweDUwMjRkfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxZTAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMTAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwYzgsIDB4MTJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDA4LCAweDJ9LAotI2RlZmluZSBUU0VNX0ZVTkMxX0VORCAgICAgICAgICAzMjQKLSNkZWZpbmUgVFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMzI0CisjZGVmaW5lIFRTRU1fRlVOQzFfRU5EICAgICAgICAgIDM1MworI2RlZmluZSBUU0VNX0ZVTkMyX1NUQVJUICAgICAgICAzNTMKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI2OCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA3MCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA3MCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA3MCArIDB4OCwgMHg1MDI1Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAgKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjAwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDIwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTEwLCAweDEyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxMCwgMHgyMDI0OH0sCi0jZGVmaW5lIFRTRU1fRlVOQzJfRU5EICAgICAgICAgIDMzMAotI2RlZmluZSBUU0VNX0ZVTkMzX1NUQVJUICAgICAgICAzMzAKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxMCwgMHgyMDI1N30sCisjZGVmaW5lIFRTRU1fRlVOQzJfRU5EICAgICAgICAgIDM2MQorI2RlZmluZSBUU0VNX0ZVTkMzX1NUQVJUICAgICAgICAzNjEKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI2YywgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBhOCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBhOCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBhOCArIDB4OCwgMHg1MDI1OX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjIwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDMwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTU4LCAweDEyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxOCwgMHgyMDI0YX0sCi0jZGVmaW5lIFRTRU1fRlVOQzNfRU5EICAgICAgICAgIDMzNgotI2RlZmluZSBUU0VNX0ZVTkM0X1NUQVJUICAgICAgICAzMzYKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxOCwgMHgyMDI1ZX0sCisjZGVmaW5lIFRTRU1fRlVOQzNfRU5EICAgICAgICAgIDM2OQorI2RlZmluZSBUU0VNX0ZVTkM0X1NUQVJUICAgICAgICAzNjkKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3MCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBlMCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBlMCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBlMCArIDB4OCwgMHg1MDI2MH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAgKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjQwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MWEwLCAweDEyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyMCwgMHgyMDI0Y30sCi0jZGVmaW5lIFRTRU1fRlVOQzRfRU5EICAgICAgICAgIDM0MgotI2RlZmluZSBUU0VNX0ZVTkM1X1NUQVJUICAgICAgICAzNDIKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyMCwgMHgyMDI2NX0sCisjZGVmaW5lIFRTRU1fRlVOQzRfRU5EICAgICAgICAgIDM3NworI2RlZmluZSBUU0VNX0ZVTkM1X1NUQVJUICAgICAgICAzNzcKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3NCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzExOCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzExOCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzExOCArIDB4OCwgMHg1MDI2N30sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjYwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDUwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MWU4LCAweDEyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyOCwgMHgyMDI0ZX0sCi0jZGVmaW5lIFRTRU1fRlVOQzVfRU5EICAgICAgICAgIDM0OAotI2RlZmluZSBUU0VNX0ZVTkM2X1NUQVJUICAgICAgICAzNDgKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyOCwgMHgyMDI2Y30sCisjZGVmaW5lIFRTRU1fRlVOQzVfRU5EICAgICAgICAgIDM4NQorI2RlZmluZSBUU0VNX0ZVTkM2X1NUQVJUICAgICAgICAzODUKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3OCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE1MCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE1MCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE1MCArIDB4OCwgMHg1MDI2ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAgKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjgwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDYwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjMwLCAweDEyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzMCwgMHgyMDI1MH0sCi0jZGVmaW5lIFRTRU1fRlVOQzZfRU5EICAgICAgICAgIDM1NAotI2RlZmluZSBUU0VNX0ZVTkM3X1NUQVJUICAgICAgICAzNTQKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzMCwgMHgyMDI3M30sCisjZGVmaW5lIFRTRU1fRlVOQzZfRU5EICAgICAgICAgIDM5MworI2RlZmluZSBUU0VNX0ZVTkM3X1NUQVJUICAgICAgICAzOTMKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3YywgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4OCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4OCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4OCArIDB4OCwgMHg1MDI3NX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMmEwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDcwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1Mjc4LCAweDEyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzOCwgMHgyMDI1Mn0sCi0jZGVmaW5lIFRTRU1fRlVOQzdfRU5EICAgICAgICAgIDM2MAotI2RlZmluZSBNSVNDX0NPTU1PTl9TVEFSVCAgICAgICAzNjAKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzOCwgMHgyMDI3YX0sCisjZGVmaW5lIFRTRU1fRlVOQzdfRU5EICAgICAgICAgIDQwMQorI2RlZmluZSBNSVNDX0NPTU1PTl9TVEFSVCAgICAgICA0MDEKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0dSQ19USU1FT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTUlTQ19SRUdfUExMX1NUT1JNX0NUUkxfMSwgMHg3MWQyOTExfSwKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzIsIDB4MH0sCkBAIC00NDcsMzkgKzUwNCwzOSBAQAogCXtPUF9XUiwgTUlTQ19SRUdfUExMX1NUT1JNX0NUUkxfNCwgMHgwfSwKIAl7T1BfV1IsIE1JU0NfUkVHX0xDUExMX0NUUkxfMSwgMHgyMDl9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfU1BJTywgMHhmZjAwMDAwMH0sCi0jZGVmaW5lIE1JU0NfQ09NTU9OX0VORCAgICAgICAgIDM2NwotI2RlZmluZSBNSVNDX0ZVTkMwX1NUQVJUICAgICAgICAzNjcKKyNkZWZpbmUgTUlTQ19DT01NT05fRU5EICAgICAgICAgNDA4CisjZGVmaW5lIE1JU0NfRlVOQzBfU1RBUlQgICAgICAgIDQwOAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDAsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzBfRU5EICAgICAgICAgIDM2OAotI2RlZmluZSBNSVNDX0ZVTkMxX1NUQVJUICAgICAgICAzNjgKKyNkZWZpbmUgTUlTQ19GVU5DMF9FTkQgICAgICAgICAgNDA5CisjZGVmaW5lIE1JU0NfRlVOQzFfU1RBUlQgICAgICAgIDQwOQogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDEsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzFfRU5EICAgICAgICAgIDM2OQotI2RlZmluZSBNSVNDX0ZVTkMyX1NUQVJUICAgICAgICAzNjkKKyNkZWZpbmUgTUlTQ19GVU5DMV9FTkQgICAgICAgICAgNDEwCisjZGVmaW5lIE1JU0NfRlVOQzJfU1RBUlQgICAgICAgIDQxMAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDAsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzJfRU5EICAgICAgICAgIDM3MAotI2RlZmluZSBNSVNDX0ZVTkMzX1NUQVJUICAgICAgICAzNzAKKyNkZWZpbmUgTUlTQ19GVU5DMl9FTkQgICAgICAgICAgNDExCisjZGVmaW5lIE1JU0NfRlVOQzNfU1RBUlQgICAgICAgIDQxMQogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDEsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzNfRU5EICAgICAgICAgIDM3MQotI2RlZmluZSBNSVNDX0ZVTkM0X1NUQVJUICAgICAgICAzNzEKKyNkZWZpbmUgTUlTQ19GVU5DM19FTkQgICAgICAgICAgNDEyCisjZGVmaW5lIE1JU0NfRlVOQzRfU1RBUlQgICAgICAgIDQxMgogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDAsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzRfRU5EICAgICAgICAgIDM3MgotI2RlZmluZSBNSVNDX0ZVTkM1X1NUQVJUICAgICAgICAzNzIKKyNkZWZpbmUgTUlTQ19GVU5DNF9FTkQgICAgICAgICAgNDEzCisjZGVmaW5lIE1JU0NfRlVOQzVfU1RBUlQgICAgICAgIDQxMwogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDEsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzVfRU5EICAgICAgICAgIDM3MwotI2RlZmluZSBNSVNDX0ZVTkM2X1NUQVJUICAgICAgICAzNzMKKyNkZWZpbmUgTUlTQ19GVU5DNV9FTkQgICAgICAgICAgNDE0CisjZGVmaW5lIE1JU0NfRlVOQzZfU1RBUlQgICAgICAgIDQxNAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDAsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzZfRU5EICAgICAgICAgIDM3NAotI2RlZmluZSBNSVNDX0ZVTkM3X1NUQVJUICAgICAgICAzNzQKKyNkZWZpbmUgTUlTQ19GVU5DNl9FTkQgICAgICAgICAgNDE1CisjZGVmaW5lIE1JU0NfRlVOQzdfU1RBUlQgICAgICAgIDQxNQogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX05JR19XT0xfUDEsIDB4MH0sCi0jZGVmaW5lIE1JU0NfRlVOQzdfRU5EICAgICAgICAgIDM3NQotI2RlZmluZSBOSUdfQ09NTU9OX1NUQVJUICAgICAgICAzNzUKKyNkZWZpbmUgTUlTQ19GVU5DN19FTkQgICAgICAgICAgNDE2CisjZGVmaW5lIE5JR19DT01NT05fU1RBUlQgICAgICAgIDQxNgogCXtPUF9XUiwgTklHX1JFR19QQkZfTEJfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1BSU19SRVFfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0VHUkVTU19ERUJVR19JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCX0xCX09VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfUFJTX0VPUF9PVVRfRU4sIDB4MX0sCi0jZGVmaW5lIE5JR19DT01NT05fRU5EICAgICAgICAgIDM4MAotI2RlZmluZSBOSUdfUE9SVDBfU1RBUlQgICAgICAgICAzODAKKyNkZWZpbmUgTklHX0NPTU1PTl9FTkQgICAgICAgICAgNDIxCisjZGVmaW5lIE5JR19QT1JUMF9TVEFSVCAgICAgICAgIDQyMQogCXtPUF9XUiwgTklHX1JFR19MTEgwX0NNX0hFQURFUiwgMHgzMDAwMDB9LAogCXtPUF9XUiwgTklHX1JFR19MTEgwX0VWRU5UX0lELCAweDI4fSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9FUlJPUl9NQVNLLCAweDB9LApAQCAtNDkyLDggKzU0OSw4IEBACiAJe09QX1dSLCBOSUdfUkVHX0VHUkVTU19QQkYwX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19CUkIwX09VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfWENNMF9PVVRfRU4sIDB4MX0sCi0jZGVmaW5lIE5JR19QT1JUMF9FTkQgICAgICAgICAgIDM5MgotI2RlZmluZSBOSUdfUE9SVDFfU1RBUlQgICAgICAgICAzOTIKKyNkZWZpbmUgTklHX1BPUlQwX0VORCAgICAgICAgICAgNDMzCisjZGVmaW5lIE5JR19QT1JUMV9TVEFSVCAgICAgICAgIDQzMwogCXtPUF9XUiwgTklHX1JFR19MTEgxX0NNX0hFQURFUiwgMHgzMDAwMDB9LAogCXtPUF9XUiwgTklHX1JFR19MTEgxX0VWRU5UX0lELCAweDI4fSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9FUlJPUl9NQVNLLCAweDB9LApAQCAtNTA2LDExICs1NjMsMTEgQEAKIAl7T1BfV1IsIE5JR19SRUdfRUdSRVNTX1BCRjFfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQjFfT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19YQ00xX09VVF9FTiwgMHgxfSwKLSNkZWZpbmUgTklHX1BPUlQxX0VORCAgICAgICAgICAgNDA0Ci0jZGVmaW5lIFVQQl9DT01NT05fU1RBUlQgICAgICAgIDQwNAorI2RlZmluZSBOSUdfUE9SVDFfRU5EICAgICAgICAgICA0NDUKKyNkZWZpbmUgVVBCX0NPTU1PTl9TVEFSVCAgICAgICAgNDQ1CiAJe09QX1dSLCBHUkNCQVNFX1VQQiArIFBCX1JFR19DT05UUk9MLCAweDIwfSwKLSNkZWZpbmUgVVBCX0NPTU1PTl9FTkQgICAgICAgICAgNDA1Ci0jZGVmaW5lIENTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQwNQorI2RlZmluZSBVUEJfQ09NTU9OX0VORCAgICAgICAgICA0NDYKKyNkZWZpbmUgQ1NETV9DT01NT05fU1RBUlQgICAgICAgNDQ2CiAJe09QX1dSX0UxLCBDU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4YTExfSwKIAl7T1BfV1JfRTFILCBDU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4MjExfSwKIAl7T1BfV1JfRTEsIENTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4YTAwfSwKQEAgLTU1MCw4ICs2MDcsOCBAQAogCXtPUF9XUl9BU0lDLCBDU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCiAJe09QX1dSX0VNVUwsIENTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4MX0sCiAJe09QX1dSX0ZQR0EsIENTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4YX0sCi0jZGVmaW5lIENTRE1fQ09NTU9OX0VORCAgICAgICAgIDQ0NAotI2RlZmluZSBVU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0NDQKKyNkZWZpbmUgQ1NETV9DT01NT05fRU5EICAgICAgICAgNDg1CisjZGVmaW5lIFVTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ4NQogCXtPUF9XUl9FMSwgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCiAJe09QX1dSX0UxSCwgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQxMX0sCiAJe09QX1dSX0UxLCBVU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCkBAIC01NjgsOSArNjI1LDE0IEBACiAJe09QX1dSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEsIDB4NX0sCiAJe09QX1dSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIsIDB4MzR9LAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zLCAweDM1fSwKLQl7T1BfWlIsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg1Y30sCisJe09QX1pSX0UxLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4NWN9LAorCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg3fSwKKwl7T1BfWlJfRTFILCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzUsIDB4NWJ9LAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzAsIDB4MX0sCi0Je09QX1pSLCBVU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgxZn0sCisJe09QX1pSX0UxLCBVU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgxZn0sCisJe09QX1pSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4M30sCisJe09QX1dSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzQsIDB4MX0sCisJe09QX1pSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzUsIDB4MWJ9LAogCXtPUF9XUiwgVVNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9JTjIsIDB4M2Z9LAogCXtPUF9XUiwgVVNETV9SRUdfRU5BQkxFX09VVDEsIDB4N2ZmZmZmZn0sCkBAIC01OTQsMTggKzY1NiwyMSBAQAogCXtPUF9XUl9BU0lDLCBVU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCiAJe09QX1dSX0VNVUwsIFVTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4MX0sCiAJe09QX1dSX0ZQR0EsIFVTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4YX0sCi0jZGVmaW5lIFVTRE1fQ09NTU9OX0VORCAgICAgICAgIDQ4NgotI2RlZmluZSBDQ01fQ09NTU9OX1NUQVJUICAgICAgICA0ODYKKyNkZWZpbmUgVVNETV9DT01NT05fRU5EICAgICAgICAgNTMyCisjZGVmaW5lIENDTV9DT01NT05fU1RBUlQgICAgICAgIDUzMgogCXtPUF9XUiwgQ0NNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DUU1fQ0NNX0hEUl9QLCAweDIxNTAwMjB9LAogCXtPUF9XUiwgQ0NNX1JFR19DUU1fQ0NNX0hEUl9TLCAweDIxNTAwMjB9LAogCXtPUF9XUiwgQ0NNX1JFR19FUlJfQ0NNX0hEUiwgMHg4MTAwMDAwfSwKIAl7T1BfV1IsIENDTV9SRUdfRVJSX0VWTlRfSUQsIDB4MzN9LAorCXtPUF9XUiwgQ0NNX1JFR19TVE9STV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBDQ01fUkVHX1RTRU1fV0VJR0hULCAweDB9LAotCXtPUF9XUiwgQ0NNX1JFR19YU0VNX1dFSUdIVCwgMHg0fSwKLQl7T1BfV1IsIENDTV9SRUdfVVNFTV9XRUlHSFQsIDB4NH0sCisJe09QX1dSLCBDQ01fUkVHX1hTRU1fV0VJR0hULCAweDV9LAorCXtPUF9XUiwgQ0NNX1JFR19VU0VNX1dFSUdIVCwgMHg1fSwKIAl7T1BfWlIsIENDTV9SRUdfUEJGX1dFSUdIVCwgMHgyfSwKLQl7T1BfV1IsIENDTV9SRUdfQ1FNX1BfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgQ0NNX1JFR19DU0RNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1FNX1BfV0VJR0hULCAweDN9LAorCXtPUF9XUiwgQ0NNX1JFR19DUU1fU19XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBDQ01fUkVHX0NDTV9DUU1fVVNFX1EsIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NOVF9BVVgxX1EsIDB4Mn0sCiAJe09QX1dSLCBDQ01fUkVHX0NOVF9BVVgyX1EsIDB4Mn0sCkBAIC02MjAsOCArNjg1LDggQEAKIAl7T1BfV1IsIENDTV9SRUdfWFhfSU5JVF9DUkQsIDB4M30sCiAJe09QX1dSLCBDQ01fUkVHX1hYX01TR19OVU0sIDB4MTh9LAogCXtPUF9aUiwgQ0NNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXX0UxLCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDIzOH0sCi0Je09QX1NXX0UxSCwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyNTR9LAorCXtPUF9TV19FMSwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyNDJ9LAorCXtPUF9TV19FMUgsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjdjfSwKIAl7T1BfV1IsIENDTV9SRUdfTl9TTV9DVFhfTERfMCwgMHgxfSwKIAl7T1BfV1IsIENDTV9SRUdfTl9TTV9DVFhfTERfMSwgMHgyfSwKIAl7T1BfV1IsIENDTV9SRUdfTl9TTV9DVFhfTERfMiwgMHg4fSwKQEAgLTY1Nyw4ICs3MjIsOCBAQAogCXtPUF9XUiwgQ0NNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIENDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgQ0NNX0NPTU1PTl9FTkQgICAgICAgICAgNTQ3Ci0jZGVmaW5lIENDTV9GVU5DMF9TVEFSVCAgICAgICAgIDU0NworI2RlZmluZSBDQ01fQ09NTU9OX0VORCAgICAgICAgICA1OTYKKyNkZWZpbmUgQ0NNX0ZVTkMwX1NUQVJUICAgICAgICAgNTk2CiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8wLCAweDl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMCwgMHhhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4N30sCkBAIC02NjYsOCArNzMxLDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHhjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHhifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg3fSwKLSNkZWZpbmUgQ0NNX0ZVTkMwX0VORCAgICAgICAgICAgNTU0Ci0jZGVmaW5lIENDTV9GVU5DMV9TVEFSVCAgICAgICAgIDU1NAorI2RlZmluZSBDQ01fRlVOQzBfRU5EICAgICAgICAgICA2MDMKKyNkZWZpbmUgQ0NNX0ZVTkMxX1NUQVJUICAgICAgICAgNjAzCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8xLCAweDI5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzEsIDB4MmF9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMSwgMHgyN30sCkBAIC02NzUsOCArNzQwLDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyY30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzEsIDB4MmJ9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18xLCAweDI3fSwKLSNkZWZpbmUgQ0NNX0ZVTkMxX0VORCAgICAgICAgICAgNTYxCi0jZGVmaW5lIENDTV9GVU5DMl9TVEFSVCAgICAgICAgIDU2MQorI2RlZmluZSBDQ01fRlVOQzFfRU5EICAgICAgICAgICA2MTAKKyNkZWZpbmUgQ0NNX0ZVTkMyX1NUQVJUICAgICAgICAgNjEwCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8wLCAweDE5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4MWF9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMCwgMHgxN30sCkBAIC02ODQsOCArNzQ5LDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHgxY30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4MWJ9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18wLCAweDE3fSwKLSNkZWZpbmUgQ0NNX0ZVTkMyX0VORCAgICAgICAgICAgNTY4Ci0jZGVmaW5lIENDTV9GVU5DM19TVEFSVCAgICAgICAgIDU2OAorI2RlZmluZSBDQ01fRlVOQzJfRU5EICAgICAgICAgICA2MTcKKyNkZWZpbmUgQ0NNX0ZVTkMzX1NUQVJUICAgICAgICAgNjE3CiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8xLCAweDM5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzEsIDB4M2F9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMSwgMHgzN30sCkBAIC02OTMsOCArNzU4LDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgzY30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzEsIDB4M2J9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18xLCAweDM3fSwKLSNkZWZpbmUgQ0NNX0ZVTkMzX0VORCAgICAgICAgICAgNTc1Ci0jZGVmaW5lIENDTV9GVU5DNF9TVEFSVCAgICAgICAgIDU3NQorI2RlZmluZSBDQ01fRlVOQzNfRU5EICAgICAgICAgICA2MjQKKyNkZWZpbmUgQ0NNX0ZVTkM0X1NUQVJUICAgICAgICAgNjI0CiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8wLCAweDQ5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4NGF9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMCwgMHg0N30sCkBAIC03MDIsOCArNzY3LDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg0Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4NGJ9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18wLCAweDQ3fSwKLSNkZWZpbmUgQ0NNX0ZVTkM0X0VORCAgICAgICAgICAgNTgyCi0jZGVmaW5lIENDTV9GVU5DNV9TVEFSVCAgICAgICAgIDU4MgorI2RlZmluZSBDQ01fRlVOQzRfRU5EICAgICAgICAgICA2MzEKKyNkZWZpbmUgQ0NNX0ZVTkM1X1NUQVJUICAgICAgICAgNjMxCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8xLCAweDY5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzEsIDB4NmF9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMSwgMHg2N30sCkBAIC03MTEsOCArNzc2LDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg2Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzEsIDB4NmJ9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18xLCAweDY3fSwKLSNkZWZpbmUgQ0NNX0ZVTkM1X0VORCAgICAgICAgICAgNTg5Ci0jZGVmaW5lIENDTV9GVU5DNl9TVEFSVCAgICAgICAgIDU4OQorI2RlZmluZSBDQ01fRlVOQzVfRU5EICAgICAgICAgICA2MzgKKyNkZWZpbmUgQ0NNX0ZVTkM2X1NUQVJUICAgICAgICAgNjM4CiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8wLCAweDU5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4NWF9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMCwgMHg1N30sCkBAIC03MjAsOCArNzg1LDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg1Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4NWJ9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18wLCAweDU3fSwKLSNkZWZpbmUgQ0NNX0ZVTkM2X0VORCAgICAgICAgICAgNTk2Ci0jZGVmaW5lIENDTV9GVU5DN19TVEFSVCAgICAgICAgIDU5NgorI2RlZmluZSBDQ01fRlVOQzZfRU5EICAgICAgICAgICA2NDUKKyNkZWZpbmUgQ0NNX0ZVTkM3X1NUQVJUICAgICAgICAgNjQ1CiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMF8xLCAweDc5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzEsIDB4N2F9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMSwgMHg3N30sCkBAIC03MjksOCArNzk0LDggQEAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg3Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzEsIDB4N2J9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18xLCAweDc3fSwKLSNkZWZpbmUgQ0NNX0ZVTkM3X0VORCAgICAgICAgICAgNjAzCi0jZGVmaW5lIFVDTV9DT01NT05fU1RBUlQgICAgICAgIDYwMworI2RlZmluZSBDQ01fRlVOQzdfRU5EICAgICAgICAgICA2NTIKKyNkZWZpbmUgVUNNX0NPTU1PTl9TVEFSVCAgICAgICAgNjUyCiAJe09QX1dSLCBVQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBVQ01fUkVHX1VRTV9VQ01fSERSX1AsIDB4MjE1MDAyMH0sCiAJe09QX1dSLCBVQ01fUkVHX1VRTV9VQ01fSERSX1MsIDB4MjE1MDAyMH0sCkBAIC03MzksMTAgKzgwNCwxNiBAQAogCXtPUF9XUiwgVUNNX1JFR19FUlJfRVZOVF9JRCwgMHgzM30sCiAJe09QX1dSLCBVQ01fUkVHX0VYUFJfRVZOVF9JRCwgMHgzMH0sCiAJe09QX1dSLCBVQ01fUkVHX1NUT1BfRVZOVF9JRCwgMHgzMX0sCi0Je09QX1dSLCBVQ01fUkVHX1RTRU1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgVUNNX1JFR19TVE9STV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBVQ01fUkVHX1RTRU1fV0VJR0hULCAweDR9LAogCXtPUF9XUiwgVUNNX1JFR19DU0VNX1dFSUdIVCwgMHgwfSwKKwl7T1BfV1IsIFVDTV9SRUdfWFNFTV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBVQ01fUkVHX0RPUlFfV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVUNNX1JFR19DUF9XRUlHSFQsIDB4MH0sCi0Je09QX1dSLCBVQ01fUkVHX1VRTV9QX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFVDTV9SRUdfVVNETV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBVQ01fUkVHX1VRTV9QX1dFSUdIVCwgMHg3fSwKKwl7T1BfV1IsIFVDTV9SRUdfVVFNX1NfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19UTV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBVQ01fUkVHX1VDTV9VUU1fVVNFX1EsIDB4MX0sCiAJe09QX1dSLCBVQ01fUkVHX0lOVl9DRkxHX1EsIDB4MX0sCiAJe09QX1dSLCBVQ01fUkVHX0dSX0FSQl9UWVBFLCAweDF9LApAQCAtNzU2LDE0ICs4MjcsMTQgQEAKIAl7T1BfV1IsIFVDTV9SRUdfWFhfSU5JVF9DUkQsIDB4ZX0sCiAJe09QX1dSLCBVQ01fUkVHX1hYX01TR19OVU0sIDB4MWJ9LAogCXtPUF9aUiwgVUNNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXX0UxLCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDI1Y30sCi0Je09QX1NXX0UxSCwgVUNNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxYjAyNzh9LAorCXtPUF9TV19FMSwgVUNNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxYjAyNjZ9LAorCXtPUF9TV19FMUgsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMmEwfSwKIAl7T1BfV1IsIFVDTV9SRUdfTl9TTV9DVFhfTERfMCwgMHgxMH0sCiAJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzEsIDB4N30sCiAJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzIsIDB4Zn0sCiAJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzMsIDB4MTB9LAogCXtPUF9aUl9FMSwgVUNNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAotCXtPUF9XUl9FMUgsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHhkfSwKKwl7T1BfV1JfRTFILCBVQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4Yn0sCiAJe09QX1pSX0UxSCwgVUNNX1JFR19OX1NNX0NUWF9MRF81LCAweDN9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fUkVHMF9TWiwgMHgzfSwKIAl7T1BfV1JfRTEsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweGZ9LApAQCAtNzg3LDU2ICs4NTgsNTYgQEAKIAl7T1BfV1IsIFVDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBVQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIFVDTV9DT01NT05fRU5EICAgICAgICAgIDY1OQotI2RlZmluZSBVQ01fRlVOQzBfU1RBUlQgICAgICAgICA2NTkKKyNkZWZpbmUgVUNNX0NPTU1PTl9FTkQgICAgICAgICAgNzE0CisjZGVmaW5lIFVDTV9GVU5DMF9TVEFSVCAgICAgICAgIDcxNAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweGZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweGV9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8wLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzBfRU5EICAgICAgICAgICA2NjMKLSNkZWZpbmUgVUNNX0ZVTkMxX1NUQVJUICAgICAgICAgNjYzCisjZGVmaW5lIFVDTV9GVU5DMF9FTkQgICAgICAgICAgIDcxOAorI2RlZmluZSBVQ01fRlVOQzFfU1RBUlQgICAgICAgICA3MTgKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgyZn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmV9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8xLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzFfRU5EICAgICAgICAgICA2NjcKLSNkZWZpbmUgVUNNX0ZVTkMyX1NUQVJUICAgICAgICAgNjY3CisjZGVmaW5lIFVDTV9GVU5DMV9FTkQgICAgICAgICAgIDcyMgorI2RlZmluZSBVQ01fRlVOQzJfU1RBUlQgICAgICAgICA3MjIKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHgxZn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4MWV9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8wLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzJfRU5EICAgICAgICAgICA2NzEKLSNkZWZpbmUgVUNNX0ZVTkMzX1NUQVJUICAgICAgICAgNjcxCisjZGVmaW5lIFVDTV9GVU5DMl9FTkQgICAgICAgICAgIDcyNgorI2RlZmluZSBVQ01fRlVOQzNfU1RBUlQgICAgICAgICA3MjYKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgzZn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4M2V9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8xLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzNfRU5EICAgICAgICAgICA2NzUKLSNkZWZpbmUgVUNNX0ZVTkM0X1NUQVJUICAgICAgICAgNjc1CisjZGVmaW5lIFVDTV9GVU5DM19FTkQgICAgICAgICAgIDczMAorI2RlZmluZSBVQ01fRlVOQzRfU1RBUlQgICAgICAgICA3MzAKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg0Zn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4NGV9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8wLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzRfRU5EICAgICAgICAgICA2NzkKLSNkZWZpbmUgVUNNX0ZVTkM1X1NUQVJUICAgICAgICAgNjc5CisjZGVmaW5lIFVDTV9GVU5DNF9FTkQgICAgICAgICAgIDczNAorI2RlZmluZSBVQ01fRlVOQzVfU1RBUlQgICAgICAgICA3MzQKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHg2Zn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4NmV9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8xLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzVfRU5EICAgICAgICAgICA2ODMKLSNkZWZpbmUgVUNNX0ZVTkM2X1NUQVJUICAgICAgICAgNjgzCisjZGVmaW5lIFVDTV9GVU5DNV9FTkQgICAgICAgICAgIDczOAorI2RlZmluZSBVQ01fRlVOQzZfU1RBUlQgICAgICAgICA3MzgKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg1Zn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4NWV9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8wLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzZfRU5EICAgICAgICAgICA2ODcKLSNkZWZpbmUgVUNNX0ZVTkM3X1NUQVJUICAgICAgICAgNjg3CisjZGVmaW5lIFVDTV9GVU5DNl9FTkQgICAgICAgICAgIDc0MgorI2RlZmluZSBVQ01fRlVOQzdfU1RBUlQgICAgICAgICA3NDIKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHg3Zn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzEsIDB4N2V9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMl8xLCAweDB9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBVQ01fRlVOQzdfRU5EICAgICAgICAgICA2OTEKLSNkZWZpbmUgVVNFTV9DT01NT05fU1RBUlQgICAgICAgNjkxCisjZGVmaW5lIFVDTV9GVU5DN19FTkQgICAgICAgICAgIDc0NgorI2RlZmluZSBVU0VNX0NPTU1PTl9TVEFSVCAgICAgICA3NDYKIAl7T1BfUkQsIFVTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFVTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFVTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTg4Nyw2OSArOTU4LDcyIEBACiAJe09QX1dSX0FTSUMsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHgxZGNkNjUwMH0sCiAJe09QX1dSX0VNVUwsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHg0YzRiNH0sCiAJe09QX1dSX0ZQR0EsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHg0YzRiNDB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4MTAyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweGMyfSwKIAl7T1BfV1JfRU1VTF9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDIwLCAweGM4fSwKIAl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MX0sCiAJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgxMDJ9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZTgsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMjAsIDB4Yzh9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDAsIDB4NX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4Mn0sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkMCArIDB4MTQsIDB4MTAyNzd9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzYwLCAweDR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFlMjAsIDB4NDJ9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4LCAweDl9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjgsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3MzggKyAweDI0LCAweDEwMjkzfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY4ICsgMHg4LCAweDIwMjc4fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4MCwgMHg0Mn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIxMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0NjQwLCAweDQwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODk4MCwgMHhjOH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdmMCwgMHg0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODk2MCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2Q4LCAweDV9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjI4LCAweDR9LAorCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDggKyAweDE0LCAweDEwMjgxfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIwMCwgMHg5fSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYzYwLCAweDIwfSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIwMCArIDB4MjQsIDB4MTAyYmJ9LAorCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4MzAsIDB4MjAyODJ9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTgwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHg0MDB9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4MzAsIDB4MjAyN2F9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwICsgMHg4LCAweDIwMjk0fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCArIDB4OCwgMHgxMDJiY30sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAgKyAweGMsIDB4M30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiNjgsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiNjggKyAweDgsIDB4MjAyOTZ9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4ICsgMHg4LCAweDIwMmJkfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIxMCwgMHgyfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NzRjMCwgMHgyMDI5OH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDc0YzAsIDB4MjAyYmZ9LAogCXtPUF9XUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDEwMDAwMDB9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDI3Y30sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDI5YX0sCisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMjg0fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMmMxfSwKIAl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyOGN9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyYWF9LAotCXtPUF9aUF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFLCAweGMyMDAwMH0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfSU5UX1RBQkxFLCAweGM0MDAwMH0sCi0Je09QX1dSXzY0X0UxLCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAyOWN9LAotCXtPUF9XUl82NF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDJiYX0sCi0Je09QX1pQX0UxLCBVU0VNX1JFR19QUkFNLCAweDMxMWMwMDAwfSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNLCAweDMxMDcwMDAwfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzM0NTBjNDd9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzMwZTBjNDJ9LAotCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4Mzg1NjE5MTl9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM4OWIxOTA2fSwKLQl7T1BfV1JfNjRfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE3ZmUwLCAweDUwMDQwMjllfSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgxMzIyNzJkfSwKLQl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxODI1MCwgMHg0ZmI2MDJiY30sCi0jZGVmaW5lIFVTRU1fQ09NTU9OX0VORCAgICAgICAgIDc4NwotI2RlZmluZSBVU0VNX1BPUlQwX1NUQVJUICAgICAgICA3ODcKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyOTR9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyZDF9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFLCAweGMzMDAwMH0sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfSU5UX1RBQkxFLCAweGQyMDAwMH0sCisJe09QX1dSXzY0X0UxLCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAyYTR9LAorCXtPUF9XUl82NF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSArIDB4M2E4LCAweGIwMmUxfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0sIDB4MzE0YzAwMDB9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0sIDB4MzFiNjAwMDB9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzNWVmMGM1M30sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzNjUwMGM2ZX0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzNjEzMTljZn0sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4Mzc1OTFhMDJ9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4NzExMjc1NH0sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4Mjg2MTI3ZDl9LAorCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MThlZTAsIDB4NGUyNDAyYTZ9LAorCXtPUF9XUl82NF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDFmZjQwLCAweDQwMTgwMmUzfSwKKyNkZWZpbmUgVVNFTV9DT01NT05fRU5EICAgICAgICAgODQyCisjZGVmaW5lIFVTRU1fUE9SVDBfU1RBUlQgICAgICAgIDg0MgogCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YTB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MDAwLCAweGEwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTAwLCAweGF9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NTAwLCAweDI4fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTUwLCAweDJlfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTY0MCwgMHgzNH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQwMCwgMHg0fSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTAwLCAweDEwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTUwMCwgMHg0MH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk4MCwgMHgzMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk3MDAsIDB4M2N9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQ3NDAsIDB4YjR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDUwLCAweGI0fSwKKwl7T1BfV1JfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDkwLCAweDB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWQwLCAweDJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFiNDAsIDB4NH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwODAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMjAsIDB4MjB9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjg4LCAweDk2fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NDQwLCAweDcyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjYwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwMCwgMHgxMmN9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUzMTgsIDB4OTh9LAorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjM4LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Yjc4LCAweDUyfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTEwMCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGUwOCwgMHhjfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwMCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUzMDAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NDAwLCAweDIwfSwKQEAgLTk2NiwyMyArMTA0MCwyNiBAQAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1ZjAwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI3OCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZlMDgsIDB4Y30sCi0jZGVmaW5lIFVTRU1fUE9SVDBfRU5EICAgICAgICAgIDgxOAotI2RlZmluZSBVU0VNX1BPUlQxX1NUQVJUICAgICAgICA4MTgKKyNkZWZpbmUgVVNFTV9QT1JUMF9FTkQgICAgICAgICAgODc2CisjZGVmaW5lIFVTRU1fUE9SVDFfU1RBUlQgICAgICAgIDg3NgogCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE2ODAsIDB4YTB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MjgwLCAweGEwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTI4LCAweGF9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NWEwLCAweDI4fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYTA4LCAweDJlfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTcxMCwgMHgzNH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQxMCwgMHg0fSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTQwLCAweDEwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTYwMCwgMHg0MH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWE0MCwgMHgzMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk3ZjAsIDB4M2N9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhMTAsIDB4YjR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNzIwLCAweGI0fSwKKwl7T1BfV1JfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDk0LCAweDB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWQ4LCAweDJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFiNTAsIDB4NH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMDAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkYTAsIDB4MjB9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNGUwLCAweDk2fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NjA4LCAweDcyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYmUwLCAweDIwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODRiMCwgMHgxMmN9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU1NzgsIDB4OTh9LAorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjNjLCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDgwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Y2MwLCAweDUyfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE4MCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGUzOCwgMHhjfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTI4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUzODAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NDgwLCAweDIwfSwKQEAgLTk5OSw0MCArMTA3Niw0OCBAQAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1ZjgwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmNjMCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZlMzgsIDB4Y30sCi0jZGVmaW5lIFVTRU1fUE9SVDFfRU5EICAgICAgICAgIDg0OQotI2RlZmluZSBVU0VNX0ZVTkMwX1NUQVJUICAgICAgICA4NDkKKyNkZWZpbmUgVVNFTV9QT1JUMV9FTkQgICAgICAgICAgOTEwCisjZGVmaW5lIFVTRU1fRlVOQzBfU1RBUlQgICAgICAgIDkxMAorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTMwLCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDEwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkMwX0VORCAgICAgICAgICA4NTEKLSNkZWZpbmUgVVNFTV9GVU5DMV9TVEFSVCAgICAgICAgODUxCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzBfRU5EICAgICAgICAgIDkxMworI2RlZmluZSBVU0VNX0ZVTkMxX1NUQVJUICAgICAgICA5MTMKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzNCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAxMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyMCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DMV9FTkQgICAgICAgICAgODUzCi0jZGVmaW5lIFVTRU1fRlVOQzJfU1RBUlQgICAgICAgIDg1MworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDI4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMxX0VORCAgICAgICAgICA5MTYKKyNkZWZpbmUgVVNFTV9GVU5DMl9TVEFSVCAgICAgICAgOTE2CisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzgsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMjAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzJfRU5EICAgICAgICAgIDg1NQotI2RlZmluZSBVU0VNX0ZVTkMzX1NUQVJUICAgICAgICA4NTUKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzOCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DMl9FTkQgICAgICAgICAgOTE5CisjZGVmaW5lIFVTRU1fRlVOQzNfU1RBUlQgICAgICAgIDkxOQorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTNjLCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDMwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkMzX0VORCAgICAgICAgICA4NTcKLSNkZWZpbmUgVVNFTV9GVU5DNF9TVEFSVCAgICAgICAgODU3CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNDgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzNfRU5EICAgICAgICAgIDkyMgorI2RlZmluZSBVU0VNX0ZVTkM0X1NUQVJUICAgICAgICA5MjIKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE0MCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA0MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA1MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DNF9FTkQgICAgICAgICAgODU5Ci0jZGVmaW5lIFVTRU1fRlVOQzVfU1RBUlQgICAgICAgIDg1OQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDU4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM0X0VORCAgICAgICAgICA5MjUKKyNkZWZpbmUgVVNFTV9GVU5DNV9TVEFSVCAgICAgICAgOTI1CisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNDQsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNTAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNjAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzVfRU5EICAgICAgICAgIDg2MQotI2RlZmluZSBVU0VNX0ZVTkM2X1NUQVJUICAgICAgICA4NjEKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA2OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DNV9FTkQgICAgICAgICAgOTI4CisjZGVmaW5lIFVTRU1fRlVOQzZfU1RBUlQgICAgICAgIDkyOAorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTQ4LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDYwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDcwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkM2X0VORCAgICAgICAgICA4NjMKLSNkZWZpbmUgVVNFTV9GVU5DN19TVEFSVCAgICAgICAgODYzCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNzgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzZfRU5EICAgICAgICAgIDkzMQorI2RlZmluZSBVU0VNX0ZVTkM3X1NUQVJUICAgICAgICA5MzEKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE0YywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA3MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA4MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DN19FTkQgICAgICAgICAgODY1Ci0jZGVmaW5lIENTRU1fQ09NTU9OX1NUQVJUICAgICAgIDg2NQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDg4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM3X0VORCAgICAgICAgICA5MzQKKyNkZWZpbmUgQ1NFTV9DT01NT05fU1RBUlQgICAgICAgOTM0CiAJe09QX1JELCBDU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBDU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBDU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC0xMDkxLDI5ICsxMTc2LDMwIEBACiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExZTgsIDB4MH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjVjMCwgMHgyNDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweGMwfSwKLQl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyZWM4LCAweDgwMmEwfSwKKwl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyZWM4LCAweDgwMmE4fSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA3MCwgMHg4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyODAsIDB4NH0sCi0Je09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYyODAsIDB4MjQwfSwKLQl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI4OCwgMHgyMDAyYmV9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2NzAwLCAweDEwMH0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDkwMDAsIDB4NDAwfSwKKwl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIwOCwgMHgyMDAyZTV9LAogCXtPUF9XUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDEzZmZmZmZ9LAotCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJhOH0sCi0Je09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJkZX0sCisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMmIwfSwKKwl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzA1fSwKIAl7T1BfV1IsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgwfSwKLQl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyYjh9LAotCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyZWV9LAotCXtPUF9aUF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFLCAweDZlMDAwMH0sCi0Je09QX1pQX0UxSCwgQ1NFTV9SRUdfSU5UX1RBQkxFLCAweDZmMDAwMH0sCi0Je09QX1dSXzY0X0UxLCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAyYzh9LAotCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzgwLCAweDEwMDJmZX0sCi0Je09QX1pQX0UxLCBDU0VNX1JFR19QUkFNLCAweDMyNTgwMDAwfSwKLQl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNLCAweDMxZmEwMDAwfSwKLQl7T1BfWlBfRTEsIENTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MTgyNzBjOTZ9LAotCXtPUF9aUF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MTkwNDBjN2Z9LAotCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfUFJBTSArIDB4YjIxMCwgMHg2ODI0MDJjYX0sCi0Je09QX1dSXzY0X0UxSCwgQ1NFTV9SRUdfUFJBTSArIDB4YjQzMCwgMHg2N2UwMDMwMH0sCi0jZGVmaW5lIENTRU1fQ09NTU9OX0VORCAgICAgICAgIDk0NAotI2RlZmluZSBDU0VNX1BPUlQwX1NUQVJUICAgICAgICA5NDQKKwl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAyYzB9LAorCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHgxMDAzMTV9LAorCXtPUF9aUF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFLCAweDcxMDAwMH0sCisJe09QX1pQX0UxSCwgQ1NFTV9SRUdfSU5UX1RBQkxFLCAweDc0MDAwMH0sCisJe09QX1dSXzY0X0UxLCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAyZDB9LAorCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzgwLCAweDEwMDMyNX0sCisJe09QX1pQX0UxLCBDU0VNX1JFR19QUkFNLCAweDMyMjkwMDAwfSwKKwl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNLCAweDMyMjYwMDAwfSwKKwl7T1BfWlBfRTEsIENTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MjM2MzBjOGJ9LAorCXtPUF9aUF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MjQ2ZTBjOGF9LAorCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfUFJBTSArIDB4YzkzMCwgMHg2NTQwMDJkMn0sCisJe09QX1dSXzY0X0UxSCwgQ1NFTV9SRUdfUFJBTSArIDB4Y2JiMCwgMHg2NGYwMDMyN30sCisjZGVmaW5lIENTRU1fQ09NTU9OX0VORCAgICAgICAgIDEwMTQKKyNkZWZpbmUgQ1NFTV9QT1JUMF9TVEFSVCAgICAgICAgMTAxNAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YTB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAwLCAweGEwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTAwLCAweDEwfSwKQEAgLTExMjMsMTEgKzEyMDksMTAgQEAKIAl7T1BfV1JfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTE4LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQwLCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzMDAsIDB4ZX0sCi0Je09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYwNDAsIDB4MzB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNDAsIDB4Nn0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQxMCwgMHgzMH0sCi0jZGVmaW5lIENTRU1fUE9SVDBfRU5EICAgICAgICAgIDk1NgotI2RlZmluZSBDU0VNX1BPUlQxX1NUQVJUICAgICAgICA5NTYKKyNkZWZpbmUgQ1NFTV9QT1JUMF9FTkQgICAgICAgICAgMTAyNQorI2RlZmluZSBDU0VNX1BPUlQxX1NUQVJUICAgICAgICAxMDI1CiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTY4MCwgMHhhMH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyODAsIDB4YTB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5NDAsIDB4MTB9LApAQCAtMTEzNyw0NiArMTIyMiw1MyBAQAogCXtPUF9XUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMWMsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNTgsIDB4Nn0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjMzOCwgMHhlfSwKLQl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjEwMCwgMHgzMH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA1OCwgMHg2fSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNGQwLCAweDMwfSwKLSNkZWZpbmUgQ1NFTV9QT1JUMV9FTkQgICAgICAgICAgOTY4Ci0jZGVmaW5lIENTRU1fRlVOQzBfU1RBUlQgICAgICAgIDk2OAorI2RlZmluZSBDU0VNX1BPUlQxX0VORCAgICAgICAgICAxMDM2CisjZGVmaW5lIENTRU1fRlVOQzBfU1RBUlQgICAgICAgIDEwMzYKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0OCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMwMCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DMF9FTkQgICAgICAgICAgOTcwCi0jZGVmaW5lIENTRU1fRlVOQzFfU1RBUlQgICAgICAgIDk3MAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MDQwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DMF9FTkQgICAgICAgICAgMTAzOQorI2RlZmluZSBDU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxMDM5CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNGMsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDgsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzFfRU5EICAgICAgICAgIDk3MgotI2RlZmluZSBDU0VNX0ZVTkMyX1NUQVJUICAgICAgICA5NzIKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjEwMCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzFfRU5EICAgICAgICAgIDEwNDIKKyNkZWZpbmUgQ1NFTV9GVU5DMl9TVEFSVCAgICAgICAgMTA0MgogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTUwLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzEwLCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkMyX0VORCAgICAgICAgICA5NzQKLSNkZWZpbmUgQ1NFTV9GVU5DM19TVEFSVCAgICAgICAgOTc0CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxYzAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkMyX0VORCAgICAgICAgICAxMDQ1CisjZGVmaW5lIENTRU1fRlVOQzNfU1RBUlQgICAgICAgIDEwNDUKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1NCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMxOCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DM19FTkQgICAgICAgICAgOTc2Ci0jZGVmaW5lIENTRU1fRlVOQzRfU1RBUlQgICAgICAgIDk3NgorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MjgwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DM19FTkQgICAgICAgICAgMTA0OAorI2RlZmluZSBDU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxMDQ4CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNTgsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMjAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzRfRU5EICAgICAgICAgIDk3OAotI2RlZmluZSBDU0VNX0ZVTkM1X1NUQVJUICAgICAgICA5NzgKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjM0MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzRfRU5EICAgICAgICAgIDEwNTEKKyNkZWZpbmUgQ1NFTV9GVU5DNV9TVEFSVCAgICAgICAgMTA1MQogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTVjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzI4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM1X0VORCAgICAgICAgICA5ODAKLSNkZWZpbmUgQ1NFTV9GVU5DNl9TVEFSVCAgICAgICAgOTgwCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDY0MDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM1X0VORCAgICAgICAgICAxMDU0CisjZGVmaW5lIENTRU1fRlVOQzZfU1RBUlQgICAgICAgIDEwNTQKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE2MCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMzMCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DNl9FTkQgICAgICAgICAgOTgyCi0jZGVmaW5lIENTRU1fRlVOQzdfU1RBUlQgICAgICAgIDk4MgorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2NGMwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DNl9FTkQgICAgICAgICAgMTA1NworI2RlZmluZSBDU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxMDU3CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNjQsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMzgsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzdfRU5EICAgICAgICAgIDk4NAotI2RlZmluZSBYUEJfQ09NTU9OX1NUQVJUICAgICAgICA5ODQKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjU4MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzdfRU5EICAgICAgICAgIDEwNjAKKyNkZWZpbmUgWFBCX0NPTU1PTl9TVEFSVCAgICAgICAgMTA2MAogCXtPUF9XUiwgR1JDQkFTRV9YUEIgKyBQQl9SRUdfQ09OVFJPTCwgMHgyMH0sCi0jZGVmaW5lIFhQQl9DT01NT05fRU5EICAgICAgICAgIDk4NQotI2RlZmluZSBEUV9DT01NT05fU1RBUlQgICAgICAgICA5ODUKKyNkZWZpbmUgWFBCX0NPTU1PTl9FTkQgICAgICAgICAgMTA2MQorI2RlZmluZSBEUV9DT01NT05fU1RBUlQgICAgICAgICAxMDYxCiAJe09QX1dSLCBET1JRX1JFR19NT0RFX0FDVCwgMHgyfSwKIAl7T1BfV1IsIERPUlFfUkVHX05PUk1fQ0lEX09GU1QsIDB4M30sCiAJe09QX1dSLCBET1JRX1JFR19PVVRTVF9SRVEsIDB4NH0sCkBAIC0xMTk1LDggKzEyODcsOCBAQAogCXtPUF9XUiwgRE9SUV9SRUdfRFFfRklGT19BRlVMTF9USCwgMHg3NmN9LAogCXtPUF9XUiwgRE9SUV9SRUdfUkVHTiwgMHg3YzEwMDR9LAogCXtPUF9XUiwgRE9SUV9SRUdfSUZfRU4sIDB4Zn0sCi0jZGVmaW5lIERRX0NPTU1PTl9FTkQgICAgICAgICAgIDEwMDMKLSNkZWZpbmUgVElNRVJTX0NPTU1PTl9TVEFSVCAgICAgMTAwMworI2RlZmluZSBEUV9DT01NT05fRU5EICAgICAgICAgICAxMDc5CisjZGVmaW5lIFRJTUVSU19DT01NT05fU1RBUlQgICAgIDEwNzkKIAl7T1BfWlIsIFRNX1JFR19DTElOX1BSSU9SMF9DTElFTlQsIDB4Mn0sCiAJe09QX1dSLCBUTV9SRUdfTElOX1NFVENMUl9GSUZPX0FMRlVMTF9USFIsIDB4MWN9LAogCXtPUF9XUiwgVE1fUkVHX0NGQ19BQ19DUkRDTlRfVkFMLCAweDF9LApAQCAtMTIxOSwxNCArMTMxMSwxOCBAQAogCXtPUF9XUiwgVE1fUkVHX0VOX0NMMF9JTlBVVCwgMHgxfSwKIAl7T1BfV1IsIFRNX1JFR19FTl9DTDFfSU5QVVQsIDB4MX0sCiAJe09QX1dSLCBUTV9SRUdfRU5fQ0wyX0lOUFVULCAweDF9LAotI2RlZmluZSBUSU1FUlNfQ09NTU9OX0VORCAgICAgICAxMDI1Ci0jZGVmaW5lIFRJTUVSU19QT1JUMF9TVEFSVCAgICAgIDEwMjUKKyNkZWZpbmUgVElNRVJTX0NPTU1PTl9FTkQgICAgICAgMTEwMQorI2RlZmluZSBUSU1FUlNfUE9SVDBfU1RBUlQgICAgICAxMTAxCisJe09QX1dSLCBUTV9SRUdfTElOMF9MT0dJQ19BRERSLCAweDB9LAorCXtPUF9XUiwgVE1fUkVHX0xJTjBfUEhZX0FERFJfVkFMSUQsIDB4MH0sCiAJe09QX1pSLCBUTV9SRUdfTElOMF9QSFlfQUREUiwgMHgyfSwKLSNkZWZpbmUgVElNRVJTX1BPUlQwX0VORCAgICAgICAgMTAyNgotI2RlZmluZSBUSU1FUlNfUE9SVDFfU1RBUlQgICAgICAxMDI2CisjZGVmaW5lIFRJTUVSU19QT1JUMF9FTkQgICAgICAgIDExMDQKKyNkZWZpbmUgVElNRVJTX1BPUlQxX1NUQVJUICAgICAgMTEwNAorCXtPUF9XUiwgVE1fUkVHX0xJTjFfTE9HSUNfQUREUiwgMHgwfSwKKwl7T1BfV1IsIFRNX1JFR19MSU4xX1BIWV9BRERSX1ZBTElELCAweDB9LAogCXtPUF9aUiwgVE1fUkVHX0xJTjFfUEhZX0FERFIsIDB4Mn0sCi0jZGVmaW5lIFRJTUVSU19QT1JUMV9FTkQgICAgICAgIDEwMjcKLSNkZWZpbmUgWFNETV9DT01NT05fU1RBUlQgICAgICAgMTAyNworI2RlZmluZSBUSU1FUlNfUE9SVDFfRU5EICAgICAgICAxMTA3CisjZGVmaW5lIFhTRE1fQ09NTU9OX1NUQVJUICAgICAgIDExMDcKIAl7T1BfV1JfRTEsIFhTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHg2MTR9LAogCXtPUF9XUl9FMUgsIFhTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHg0MjR9LAogCXtPUF9XUl9FMSwgWFNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHg2MDB9LApAQCAtMTI0OSw3ICsxMzQ1LDkgQEAKIAl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfOSwgMHgyOX0sCiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEwLCAweDJhfSwKIAl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEsIDB4MmJ9LAotCXtPUF9aUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMiwgMHg1NH0sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyLCAweDJjfSwKKwl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMsIDB4MmR9LAorCXtPUF9aUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNCwgMHg1Mn0sCiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX01PREVfMCwgMHgxfSwKIAl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xLCAweDFmfSwKIAl7T1BfV1IsIFhTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZn0sCkBAIC0xMjc0LDggKzEzNzIsOCBAQAogCXtPUF9XUl9BU0lDLCBYU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCiAJe09QX1dSX0VNVUwsIFhTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4MX0sCiAJe09QX1dSX0ZQR0EsIFhTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4YX0sCi0jZGVmaW5lIFhTRE1fQ09NTU9OX0VORCAgICAgICAgIDEwNzQKLSNkZWZpbmUgUU1fQ09NTU9OX1NUQVJUICAgICAgICAgMTA3NAorI2RlZmluZSBYU0RNX0NPTU1PTl9FTkQgICAgICAgICAxMTU2CisjZGVmaW5lIFFNX0NPTU1PTl9TVEFSVCAgICAgICAgIDExNTYKIAl7T1BfV1IsIFFNX1JFR19BQ1RDVFJJTklUVkFMXzAsIDB4Nn0sCiAJe09QX1dSLCBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8xLCAweDV9LAogCXtPUF9XUiwgUU1fUkVHX0FDVENUUklOSVRWQUxfMiwgMHhhfSwKQEAgLTE1NzYsOCArMTY3NCw4IEBACiAJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfNiwgMHg1fSwKIAl7T1BfV1JfRTFILCBRTV9SRUdfUFEyUENJRlVOQ183LCAweDd9LAogCXtPUF9XUiwgUU1fUkVHX0NNSU5URU4sIDB4ZmZ9LAotI2RlZmluZSBRTV9DT01NT05fRU5EICAgICAgICAgICAxMzc0Ci0jZGVmaW5lIFBCRl9DT01NT05fU1RBUlQgICAgICAgIDEzNzQKKyNkZWZpbmUgUU1fQ09NTU9OX0VORCAgICAgICAgICAgMTQ1NgorI2RlZmluZSBQQkZfQ09NTU9OX1NUQVJUICAgICAgICAxNDU2CiAJe09QX1dSLCBQQkZfUkVHX0lOSVQsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDQsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX01BQ19MQl9FTkFCTEUsIDB4MX0sCkBAIC0xNTg1LDIwICsxNjgzLDIwIEBACiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDQsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVQsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QNCwgMHgwfSwKLSNkZWZpbmUgUEJGX0NPTU1PTl9FTkQgICAgICAgICAgMTM4MQotI2RlZmluZSBQQkZfUE9SVDBfU1RBUlQgICAgICAgICAxMzgxCisjZGVmaW5lIFBCRl9DT01NT05fRU5EICAgICAgICAgIDE0NjMKKyNkZWZpbmUgUEJGX1BPUlQwX1NUQVJUICAgICAgICAgMTQ2MwogCXtPUF9XUiwgUEJGX1JFR19JTklUX1AwLCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfSUYwX0VOQUJMRSwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMCwgMHgwfSwKIAl7T1BfV1IsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AwLCAweDB9LAotI2RlZmluZSBQQkZfUE9SVDBfRU5EICAgICAgICAgICAxMzg1Ci0jZGVmaW5lIFBCRl9QT1JUMV9TVEFSVCAgICAgICAgIDEzODUKKyNkZWZpbmUgUEJGX1BPUlQwX0VORCAgICAgICAgICAgMTQ2NworI2RlZmluZSBQQkZfUE9SVDFfU1RBUlQgICAgICAgICAxNDY3CiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDEsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX01BQ19JRjFfRU5BQkxFLCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1AxLCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDEsIDB4MH0sCi0jZGVmaW5lIFBCRl9QT1JUMV9FTkQgICAgICAgICAgIDEzODkKLSNkZWZpbmUgWENNX0NPTU1PTl9TVEFSVCAgICAgICAgMTM4OQorI2RlZmluZSBQQkZfUE9SVDFfRU5EICAgICAgICAgICAxNDcxCisjZGVmaW5lIFhDTV9DT01NT05fU1RBUlQgICAgICAgIDE0NzEKIAl7T1BfV1IsIFhDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIFhDTV9SRUdfWFFNX1hDTV9IRFJfUCwgMHgzMTUwMDIwfSwKIAl7T1BfV1IsIFhDTV9SRUdfWFFNX1hDTV9IRFJfUywgMHgzMTUwMDIwfSwKQEAgLTE2MDcsMTUgKzE3MDUsMTggQEAKIAl7T1BfV1IsIFhDTV9SRUdfRVJSX0VWTlRfSUQsIDB4MzN9LAogCXtPUF9XUiwgWENNX1JFR19FWFBSX0VWTlRfSUQsIDB4MzB9LAogCXtPUF9XUiwgWENNX1JFR19TVE9QX0VWTlRfSUQsIDB4MzF9LAotCXtPUF9XUiwgWENNX1JFR19TVE9STV9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1RTRU1fV0VJR0hULCAweDV9LAotCXtPUF9XUiwgWENNX1JFR19DU0VNX1dFSUdIVCwgMHgyfSwKLQl7T1BfV1IsIFhDTV9SRUdfVVNFTV9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1BCRl9XRUlHSFQsIDB4N30sCi0Je09QX1dSLCBYQ01fUkVHX05JRzFfV0VJR0hULCAweDF9LAorCXtPUF9XUiwgWENNX1JFR19TVE9STV9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBYQ01fUkVHX1RTRU1fV0VJR0hULCAweDZ9LAorCXtPUF9XUiwgWENNX1JFR19DU0VNX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFhDTV9SRUdfVVNFTV9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBYQ01fUkVHX0RPUlFfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgWENNX1JFR19QQkZfV0VJR0hULCAweDB9LAorCXtPUF9XUiwgWENNX1JFR19OSUcwX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFhDTV9SRUdfQ1BfV0VJR0hULCAweDB9LAotCXtPUF9XUiwgWENNX1JFR19YU0RNX1dFSUdIVCwgMHg1fSwKLQl7T1BfV1IsIFhDTV9SRUdfWFFNX1BfV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19YU0RNX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFhDTV9SRUdfWFFNX1BfV0VJR0hULCAweDR9LAorCXtPUF9XUiwgWENNX1JFR19YUU1fU19XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBYQ01fUkVHX1RNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX1hRTV9VU0VfUSwgMHgxfSwKIAl7T1BfV1IsIFhDTV9SRUdfWFFNX0JZUF9BQ1RfVVBELCAweDZ9LAogCXtPUF9XUiwgWENNX1JFR19VTkFfR1RfTlhUX1EsIDB4MH0sCkBAIC0xNjMzLDE0ICsxNzM0LDE0IEBACiAJe09QX1dSX0UxLCBYQ01fUkVHX1hYX01TR19OVU0sIDB4MWZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfWFhfTVNHX05VTSwgMHgyMH0sCiAJe09QX1pSLCBYQ01fUkVHX1hYX1RBQkxFLCAweDEyfSwKLQl7T1BfU1dfRTEsIFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWYwMmNjfSwKLQl7T1BfU1dfRTFILCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDMwMn0sCisJe09QX1NXX0UxLCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDJkNH0sCisJe09QX1NXX0UxSCwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAzMjl9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8wLCAweGZ9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8yLCAweGJ9LAogCXtPUF9XUiwgWENNX1JFR19OX1NNX0NUWF9MRF8zLCAweGV9LAogCXtPUF9aUl9FMSwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAotCXtPUF9XUl9FMUgsIFhDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHhjfSwKKwl7T1BfV1JfRTFILCBYQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4ZX0sCiAJe09QX1pSX0UxSCwgWENNX1JFR19OX1NNX0NUWF9MRF81LCAweDN9LAogCXtPUF9XUiwgWENNX1JFR19YQ01fUkVHMF9TWiwgMHg0fSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX1NUT1JNMF9JRkVOLCAweDF9LApAQCAtMTY2Myw4ICsxNzY0LDggQEAKIAl7T1BfV1IsIFhDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBYQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgWENNX1JFR19YQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIFhDTV9DT01NT05fRU5EICAgICAgICAgIDE0NTMKLSNkZWZpbmUgWENNX1BPUlQwX1NUQVJUICAgICAgICAgMTQ1MworI2RlZmluZSBYQ01fQ09NTU9OX0VORCAgICAgICAgICAxNTM4CisjZGVmaW5lIFhDTV9QT1JUMF9TVEFSVCAgICAgICAgIDE1MzgKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNjczLDggKzE3NzQsOCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfQ01EMTAsIDB4Mn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKLSNkZWZpbmUgWENNX1BPUlQwX0VORCAgICAgICAgICAgMTQ2MQotI2RlZmluZSBYQ01fUE9SVDFfU1RBUlQgICAgICAgICAxNDYxCisjZGVmaW5lIFhDTV9QT1JUMF9FTkQgICAgICAgICAgIDE1NDYKKyNkZWZpbmUgWENNX1BPUlQxX1NUQVJUICAgICAgICAgMTU0NgogCXtPUF9XUl9FMSwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMSwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE2ODMsOCArMTc4NCw4IEBACiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMSwgMHgyfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAotI2RlZmluZSBYQ01fUE9SVDFfRU5EICAgICAgICAgICAxNDY5Ci0jZGVmaW5lIFhDTV9GVU5DMF9TVEFSVCAgICAgICAgIDE0NjkKKyNkZWZpbmUgWENNX1BPUlQxX0VORCAgICAgICAgICAgMTU1NAorI2RlZmluZSBYQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNTU0CiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTY5NCw4ICsxNzk1LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DMF9FTkQgICAgICAgICAgIDE0NzgKLSNkZWZpbmUgWENNX0ZVTkMxX1NUQVJUICAgICAgICAgMTQ3OAorI2RlZmluZSBYQ01fRlVOQzBfRU5EICAgICAgICAgICAxNTYzCisjZGVmaW5lIFhDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE1NjMKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNzA1LDggKzE4MDYsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkMxX0VORCAgICAgICAgICAgMTQ4NwotI2RlZmluZSBYQ01fRlVOQzJfU1RBUlQgICAgICAgICAxNDg3CisjZGVmaW5lIFhDTV9GVU5DMV9FTkQgICAgICAgICAgIDE1NzIKKyNkZWZpbmUgWENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTU3MgogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE3MTYsOCArMTgxNyw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzJfRU5EICAgICAgICAgICAxNDk2Ci0jZGVmaW5lIFhDTV9GVU5DM19TVEFSVCAgICAgICAgIDE0OTYKKyNkZWZpbmUgWENNX0ZVTkMyX0VORCAgICAgICAgICAgMTU4MQorI2RlZmluZSBYQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNTgxCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTcyNyw4ICsxODI4LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DM19FTkQgICAgICAgICAgIDE1MDUKLSNkZWZpbmUgWENNX0ZVTkM0X1NUQVJUICAgICAgICAgMTUwNQorI2RlZmluZSBYQ01fRlVOQzNfRU5EICAgICAgICAgICAxNTkwCisjZGVmaW5lIFhDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE1OTAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNzM4LDggKzE4MzksOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkM0X0VORCAgICAgICAgICAgMTUxNAotI2RlZmluZSBYQ01fRlVOQzVfU1RBUlQgICAgICAgICAxNTE0CisjZGVmaW5lIFhDTV9GVU5DNF9FTkQgICAgICAgICAgIDE1OTkKKyNkZWZpbmUgWENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTU5OQogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE3NDksOCArMTg1MCw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzVfRU5EICAgICAgICAgICAxNTIzCi0jZGVmaW5lIFhDTV9GVU5DNl9TVEFSVCAgICAgICAgIDE1MjMKKyNkZWZpbmUgWENNX0ZVTkM1X0VORCAgICAgICAgICAgMTYwOAorI2RlZmluZSBYQ01fRlVOQzZfU1RBUlQgICAgICAgICAxNjA4CiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTc2MCw4ICsxODYxLDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DNl9FTkQgICAgICAgICAgIDE1MzIKLSNkZWZpbmUgWENNX0ZVTkM3X1NUQVJUICAgICAgICAgMTUzMgorI2RlZmluZSBYQ01fRlVOQzZfRU5EICAgICAgICAgICAxNjE3CisjZGVmaW5lIFhDTV9GVU5DN19TVEFSVCAgICAgICAgIDE2MTcKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNzcxLDggKzE4NzIsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkM3X0VORCAgICAgICAgICAgMTU0MQotI2RlZmluZSBYU0VNX0NPTU1PTl9TVEFSVCAgICAgICAxNTQxCisjZGVmaW5lIFhDTV9GVU5DN19FTkQgICAgICAgICAgIDE2MjYKKyNkZWZpbmUgWFNFTV9DT01NT05fU1RBUlQgICAgICAgMTYyNgogCXtPUF9SRCwgWFNFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgWFNFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgWFNFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMTgyNywxMCArMTkyOCwxMiBAQAogCXtPUF9XUl9BU0lDLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4MWRjZDY1MDB9LAogCXtPUF9XUl9FTVVMX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDB9LAogCXtPUF9XUl9GUEdBLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjQwfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDAwLCAweDR9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkNjAsIDB4NH0sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDF9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkNjAgKyAweDEwLCAweDIwMmYzfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjljOCwgMHg0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDQ4fSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjhhOCwgMHg0fSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjljOCArIDB4MTAsIDB4MjAzNDh9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMjAsIDB4Yzh9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMDgwLCAweDQ4fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDAwLCAweDJ9LApAQCAtMTgzOSw2OCArMTk0Miw3MyBAQAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MDAwLCAweDJ9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNjgsIDB4MH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIxYTgsIDB4ODZ9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNzAsIDB4MjAyZWJ9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNzAsIDB4MjAyZjV9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMDAwLCAweDIwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjkwLCAweDQwMmVkfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjkwLCAweDQwMmY3fSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjNjOCwgMHgwfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZTIwLCAweDIwMmZifSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjNkMCwgMHgyMDM0YX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUxOCwgMHgxfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjNkMCwgMHgyMDMyMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0OTgsIDB4NDAzNGN9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzAsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0OTgsIDB4NDAzMjN9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzIwLCAweDB9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgsIDB4MH0sCi0Je09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhYzgsIDB4MH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgyMCwgMHgyMDJmMX0sCi0Je09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhYjgsIDB4MH0sCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJjMTAsIDB4MH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgyMCwgMHgyMDJmZH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJjMDgsIDB4MjAzNTB9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhYzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMTAsIDB4MX0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIwMCwgMHg0fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHgxMH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWY1MCwgMHgyMDJmM30sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4MTAwMzI3fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZjQ4LCAweDIwMmZmfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgxMDAzNTJ9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWMwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjAwLCAweDR9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4M2IwLCAweDIwMzM3fSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODQwOCwgMHgyMDM2Mn0sCiAJe09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMmY1fSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzM5fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAzMDF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAzNjR9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDEwMDAwMDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzA1fSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4ODAzNDl9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzExfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4ODAzNzR9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDIwMDAwMDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzYwLCAweDgwMzBkfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzNTF9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfSU5UX1RBQkxFLCAweGE5MDAwMH0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFLCAweGFjMDAwMH0sCi0Je09QX1dSXzY0X0UxLCBYU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAzMTV9LAotCXtPUF9XUl82NF9FMUgsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDM1OX0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNLCAweDM0NGUwMDAwfSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNLCAweDM0NjIwMDAwfSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4Mzg4NDBkMTR9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzgyNDBkMTl9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4M2U3MTFiMzV9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNlOTcxYjIyfSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDFkZDAyYWQyfSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgyMTU0MmFjOH0sCi0Je09QX1dSXzY0X0UxLCBYU0VNX1JFR19QUkFNICsgMHgxYzBkMCwgMHg0N2U2MDMxN30sCi0Je09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MWM4ZDAsIDB4NDZlNjAzNWJ9LAotI2RlZmluZSBYU0VNX0NPTU1PTl9FTkQgICAgICAgICAxNjUxCi0jZGVmaW5lIFhTRU1fUE9SVDBfU1RBUlQgICAgICAgIDE2NTEKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYmEwLCAweDEwfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDMxOX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzYwLCAweDgwMzdjfSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhiNTAwMDB9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhiZDAwMDB9LAorCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMzIxfSwKKwl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUgKyAweDNhOCwgMHhiMDM4NH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNLCAweDMzNjYwMDAwfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNLCAweDM0MDYwMDAwfSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzhiMzBjZGF9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4Mzc5NjBkMDJ9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4M2JiMTFiMDd9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNiYzMxYWU4fSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDJhMjYyOWY0fSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgzODI2MjlkOX0sCisJe09QX1dSXzY0X0UxLCBYU0VNX1JFR19QUkFNICsgMHgxZDZjMCwgMHg0NTI4MDMyM30sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MjAwMDAsIDB4MTI0NTM3ZTN9LAorCXtPUF9XUl82NF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDIyMjIwLCAweDNiYmMwMzg2fSwKKyNkZWZpbmUgWFNFTV9DT01NT05fRU5EICAgICAgICAgMTc0MQorI2RlZmluZSBYU0VNX1BPUlQwX1NUQVJUICAgICAgICAxNzQxCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JhMCwgMHgxNH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGMwMDAsIDB4ZmN9LAotCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNjMjAsIDB4MWN9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNGE4LCAweDEwfSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzQwLCAweDI0fSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRhOCwgMHgxNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjUyOCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1NDgsIDB4MjR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0NTAsIDB4Nn0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2MDgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjY4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzc4LCAweGZjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjZlOCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3ODgsIDB4MjR9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiNTgsIDB4MH0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3YzgsIDB4MWN9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkMTAsIDB4MTAwMzE5fSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjhhOCwgMHgyNH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q3OCwgMHgyMDMyNX0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGEwMDAsIDB4Mjh9LAotCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAsIDB4MH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q4OCwgMHgxMDAzMjd9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMTQwLCAweGN9LAorCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZTAsIDB4MjAzODh9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDgsIDB4MX0sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4MX0sCiAJe09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyMCwgMHgyfSwKQEAgLTE5MTAsMzEgKzIwMTgsMzMgQEAKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQwLCAweDB9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjA4LCAweDF9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDgsIDB4ZX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZhYzgsIDB4MjAzNWR9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWM4LCAweDIwMzhhfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGI4LCAweDF9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjEwLCAweDQyfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWM4LCAweDIwMzI5fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWM4LCAweDIwMzM3fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmQyMCwgMHg0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjEwLCAweDQyfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZDIwLCAweDR9LAotI2RlZmluZSBYU0VNX1BPUlQwX0VORCAgICAgICAgICAxNjgzCi0jZGVmaW5lIFhTRU1fUE9SVDFfU1RBUlQgICAgICAgIDE2ODMKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYmUwLCAweDEwfSwKKyNkZWZpbmUgWFNFTV9QT1JUMF9FTkQgICAgICAgICAgMTc3NQorI2RlZmluZSBYU0VNX1BPUlQxX1NUQVJUICAgICAgICAxNzc1CisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JmMCwgMHgxNH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGMzZjAsIDB4ZmN9LAotCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNjOTAsIDB4MWN9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNGU4LCAweDEwfSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzY2QwLCAweDI0fSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRmOCwgMHgxNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQyOCwgMHhhfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjU5OCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1ZDgsIDB4MjR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0NjgsIDB4Nn0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2NzgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNmY4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzY4LCAweGZjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mjc1OCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4MTgsIDB4MjR9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiNWMsIDB4MH0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4MzgsIDB4MWN9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkNTAsIDB4MTAwMzJifSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjkzOCwgMHgyNH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q4MCwgMHgyMDMzOX0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGEwYTAsIDB4Mjh9LAotCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDQsIDB4MH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2RjOCwgMHgxMDAzM2J9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMTcwLCAweGN9LAorCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDQsIDB4MH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZTgsIDB4MjAzOGN9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MGMsIDB4MX0sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDQsIDB4MX0sCiAJe09QX1pSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyOCwgMHgyfSwKQEAgLTE5NDQsNjggKzIwNTQsNjggQEAKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ0LCAweDB9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjBjLCAweDF9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4ZX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZhZDAsIDB4MjAzNWZ9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWQwLCAweDIwMzhlfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGJjLCAweDF9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YzE4LCAweDQyfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWQwLCAweDIwMzNifSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWQwLCAweDIwMzRifSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmQzMCwgMHg0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YzE4LCAweDQyfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZDMwLCAweDR9LAotI2RlZmluZSBYU0VNX1BPUlQxX0VORCAgICAgICAgICAxNzE1Ci0jZGVmaW5lIFhTRU1fRlVOQzBfU1RBUlQgICAgICAgIDE3MTUKKyNkZWZpbmUgWFNFTV9QT1JUMV9FTkQgICAgICAgICAgMTgwOQorI2RlZmluZSBYU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxODA5CiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZTAsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YjgsIDB4MTAwMzYxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjlmMCwgMHgxMDAzOTB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkMwX0VORCAgICAgICAgICAxNzE4Ci0jZGVmaW5lIFhTRU1fRlVOQzFfU1RBUlQgICAgICAgIDE3MTgKKyNkZWZpbmUgWFNFTV9GVU5DMF9FTkQgICAgICAgICAgMTgxMgorI2RlZmluZSBYU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxODEyCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZTQsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4ZjgsIDB4MTAwMzcxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzMCwgMHgxMDAzYTB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDgwLCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkMxX0VORCAgICAgICAgICAxNzIxCi0jZGVmaW5lIFhTRU1fRlVOQzJfU1RBUlQgICAgICAgIDE3MjEKKyNkZWZpbmUgWFNFTV9GVU5DMV9FTkQgICAgICAgICAgMTgxNQorI2RlZmluZSBYU0VNX0ZVTkMyX1NUQVJUICAgICAgICAxODE1CiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZTgsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MzgsIDB4MTAwMzgxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE3MCwgMHgxMDAzYjB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGI4LCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkMyX0VORCAgICAgICAgICAxNzI0Ci0jZGVmaW5lIFhTRU1fRlVOQzNfU1RBUlQgICAgICAgIDE3MjQKKyNkZWZpbmUgWFNFTV9GVU5DMl9FTkQgICAgICAgICAgMTgxOAorI2RlZmluZSBYU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxODE4CiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZWMsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5NzgsIDB4MTAwMzkxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFiMCwgMHgxMDAzYzB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGYwLCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkMzX0VORCAgICAgICAgICAxNzI3Ci0jZGVmaW5lIFhTRU1fRlVOQzRfU1RBUlQgICAgICAgIDE3MjcKKyNkZWZpbmUgWFNFTV9GVU5DM19FTkQgICAgICAgICAgMTgyMQorI2RlZmluZSBYU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxODIxCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZjAsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YjgsIDB4MTAwM2ExfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFmMCwgMHgxMDAzZDB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTI4LCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkM0X0VORCAgICAgICAgICAxNzMwCi0jZGVmaW5lIFhTRU1fRlVOQzVfU1RBUlQgICAgICAgIDE3MzAKKyNkZWZpbmUgWFNFTV9GVU5DNF9FTkQgICAgICAgICAgMTgyNAorI2RlZmluZSBYU0VNX0ZVTkM1X1NUQVJUICAgICAgICAxODI0CiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZjQsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZjgsIDB4MTAwM2IxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmIzMCwgMHgxMDAzZTB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTYwLCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkM1X0VORCAgICAgICAgICAxNzMzCi0jZGVmaW5lIFhTRU1fRlVOQzZfU1RBUlQgICAgICAgIDE3MzMKKyNkZWZpbmUgWFNFTV9GVU5DNV9FTkQgICAgICAgICAgMTgyNworI2RlZmluZSBYU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxODI3CiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZjgsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzgsIDB4MTAwM2MxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI3MCwgMHgxMDAzZjB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTk4LCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkM2X0VORCAgICAgICAgICAxNzM2Ci0jZGVmaW5lIFhTRU1fRlVOQzdfU1RBUlQgICAgICAgIDE3MzYKKyNkZWZpbmUgWFNFTV9GVU5DNl9FTkQgICAgICAgICAgMTgzMAorI2RlZmluZSBYU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxODMwCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGM3ZmMsIDB4MH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNzgsIDB4MTAwM2QxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmJiMCwgMHgxMDA0MDB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MWQwLCAweGV9LAotI2RlZmluZSBYU0VNX0ZVTkM3X0VORCAgICAgICAgICAxNzM5Ci0jZGVmaW5lIENEVV9DT01NT05fU1RBUlQgICAgICAgIDE3MzkKKyNkZWZpbmUgWFNFTV9GVU5DN19FTkQgICAgICAgICAgMTgzMworI2RlZmluZSBDRFVfQ09NTU9OX1NUQVJUICAgICAgICAxODMzCiAJe09QX1dSLCBDRFVfUkVHX0NEVV9DT05UUk9MMCwgMHgxfSwKIAl7T1BfV1JfRTFILCBDRFVfUkVHX01GX01PREUsIDB4MX0sCiAJe09QX1dSLCBDRFVfUkVHX0NEVV9DSEtfTUFTSzAsIDB4M2QwMDB9LAogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ0hLX01BU0sxLCAweDNkfSwKLQl7T1BfV0JfRTEsIENEVV9SRUdfTDFUVCwgMHgyMDAwMzNkfSwKLQl7T1BfV0JfRTFILCBDRFVfUkVHX0wxVFQsIDB4MjAwMDNlMX0sCi0Je09QX1dCX0UxLCBDRFVfUkVHX01BVFQsIDB4MjAwNTNkfSwKLQl7T1BfV0JfRTFILCBDRFVfUkVHX01BVFQsIDB4MjgwNWUxfSwKKwl7T1BfV0JfRTEsIENEVV9SRUdfTDFUVCwgMHgyMDAwMzRkfSwKKwl7T1BfV0JfRTFILCBDRFVfUkVHX0wxVFQsIDB4MjAwMDQxMH0sCisJe09QX1dCX0UxLCBDRFVfUkVHX01BVFQsIDB4MjAwNTRkfSwKKwl7T1BfV0JfRTFILCBDRFVfUkVHX01BVFQsIDB4MjgwNjEwfSwKIAl7T1BfWlJfRTEsIENEVV9SRUdfTUFUVCArIDB4ODAsIDB4Mn0sCi0Je09QX1dCX0UxLCBDRFVfUkVHX01BVFQgKyAweDg4LCAweDYwNTVkfSwKKwl7T1BfV0JfRTEsIENEVV9SRUdfTUFUVCArIDB4ODgsIDB4NjA1NmR9LAogCXtPUF9aUiwgQ0RVX1JFR19NQVRUICsgMHhhMCwgMHgxOH0sCi0jZGVmaW5lIENEVV9DT01NT05fRU5EICAgICAgICAgIDE3NTAKLSNkZWZpbmUgRE1BRV9DT01NT05fU1RBUlQgICAgICAgMTc1MAorI2RlZmluZSBDRFVfQ09NTU9OX0VORCAgICAgICAgICAxODQ0CisjZGVmaW5lIERNQUVfQ09NTU9OX1NUQVJUICAgICAgIDE4NDQKIAl7T1BfWlIsIERNQUVfUkVHX0NNRF9NRU0sIDB4ZTB9LAogCXtPUF9XUiwgRE1BRV9SRUdfQ1JDMTZDX0lOSVQsIDB4MH0sCiAJe09QX1dSLCBETUFFX1JFR19DUkMxNlQxMF9JTklULCAweDF9LApAQCAtMjAxMywyNCArMjEyMywyNyBAQAogCXtPUF9XUl9FMUgsIERNQUVfUkVHX1BYUF9SRVFfSU5JVF9DUkQsIDB4Mn0sCiAJe09QX1dSLCBETUFFX1JFR19QQ0lfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIERNQUVfUkVHX0dSQ19JRkVOLCAweDF9LAotI2RlZmluZSBETUFFX0NPTU1PTl9FTkQgICAgICAgICAxNzU3Ci0jZGVmaW5lIFBYUF9DT01NT05fU1RBUlQgICAgICAgIDE3NTcKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MDAsIDB4NTA1NjN9LAotCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MDAsIDB4NTA2MDl9LAotCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQyMCwgMHg1MDU2OH0sCi0Je09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQsIDB4NTA2MGV9LAotCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQsIDB4NTA1NmR9LAotI2RlZmluZSBQWFBfQ09NTU9OX0VORCAgICAgICAgICAxNzYyCi0jZGVmaW5lIENGQ19DT01NT05fU1RBUlQgICAgICAgIDE3NjIKKyNkZWZpbmUgRE1BRV9DT01NT05fRU5EICAgICAgICAgMTg1MQorI2RlZmluZSBQWFBfQ09NTU9OX1NUQVJUICAgICAgICAxODUxCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNTczfSwKKwl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNjM4fSwKKwl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MjAsIDB4NTA1Nzh9LAorCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNjNkfSwKKwl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNTdkfSwKKwl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4MjAsIDB4NTA2NDJ9LAorI2RlZmluZSBQWFBfQ09NTU9OX0VORCAgICAgICAgICAxODU3CisjZGVmaW5lIENGQ19DT01NT05fU1RBUlQgICAgICAgIDE4NTcKIAl7T1BfWlJfRTFILCBDRkNfUkVHX0xJTktfTElTVCwgMHgxMDB9LAogCXtPUF9XUiwgQ0ZDX1JFR19DT05UUk9MMCwgMHgxMH0sCiAJe09QX1dSLCBDRkNfUkVHX0RJU0FCTEVfT05fRVJST1IsIDB4M2ZmZn0sCisJe09QX1dSLCBDRkNfUkVHX0lOVEVSRkFDRVMsIDB4MjgwMDAwfSwKIAl7T1BfV1IsIENGQ19SRUdfTENSRVFfV0VJR0hUUywgMHg4NDkyNGF9LAotI2RlZmluZSBDRkNfQ09NTU9OX0VORCAgICAgICAgICAxNzY2Ci0jZGVmaW5lIEhDX0NPTU1PTl9TVEFSVCAgICAgICAgIDE3NjYKKwl7T1BfV1IsIENGQ19SRUdfSU5URVJGQUNFUywgMHgwfSwKKyNkZWZpbmUgQ0ZDX0NPTU1PTl9FTkQgICAgICAgICAgMTg2MworI2RlZmluZSBIQ19DT01NT05fU1RBUlQgICAgICAgICAxODYzCiAJe09QX1pSX0UxLCBIQ19SRUdfVVNUT1JNX0FERFJfRk9SX0NPQUxFU0NFLCAweDR9LAotI2RlZmluZSBIQ19DT01NT05fRU5EICAgICAgICAgICAxNzY3Ci0jZGVmaW5lIEhDX1BPUlQwX1NUQVJUICAgICAgICAgIDE3NjcKKyNkZWZpbmUgSENfQ09NTU9OX0VORCAgICAgICAgICAgMTg2NAorI2RlZmluZSBIQ19QT1JUMF9TVEFSVCAgICAgICAgICAxODY0CiAJe09QX1dSX0UxLCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1pSX0UxLCBIQ19SRUdfVUNfUkFNX0FERFJfMCwgMHgyfSwKIAl7T1BfV1JfRTEsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMDQ5LDggKzIxNjIsOCBAQAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19QT1JUMF9FTkQgICAgICAgICAgICAxNzg1Ci0jZGVmaW5lIEhDX1BPUlQxX1NUQVJUICAgICAgICAgIDE3ODUKKyNkZWZpbmUgSENfUE9SVDBfRU5EICAgICAgICAgICAgMTg4MgorI2RlZmluZSBIQ19QT1JUMV9TVEFSVCAgICAgICAgICAxODgyCiAJe09QX1dSX0UxLCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1pSX0UxLCBIQ19SRUdfVUNfUkFNX0FERFJfMSwgMHgyfSwKIAl7T1BfV1JfRTEsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMDY5LDggKzIxODIsOCBAQAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19QT1JUMV9FTkQgICAgICAgICAgICAxODAzCi0jZGVmaW5lIEhDX0ZVTkMwX1NUQVJUICAgICAgICAgIDE4MDMKKyNkZWZpbmUgSENfUE9SVDFfRU5EICAgICAgICAgICAgMTkwMAorI2RlZmluZSBIQ19GVU5DMF9TVEFSVCAgICAgICAgICAxOTAwCiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjA4Niw4ICsyMTk5LDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzBfRU5EICAgICAgICAgICAgMTgxOAotI2RlZmluZSBIQ19GVU5DMV9TVEFSVCAgICAgICAgICAxODE4CisjZGVmaW5lIEhDX0ZVTkMwX0VORCAgICAgICAgICAgIDE5MTUKKyNkZWZpbmUgSENfRlVOQzFfU1RBUlQgICAgICAgICAgMTkxNQogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4MX0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIxMDMsOCArMjIxNiw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMxX0VORCAgICAgICAgICAgIDE4MzMKLSNkZWZpbmUgSENfRlVOQzJfU1RBUlQgICAgICAgICAgMTgzMworI2RlZmluZSBIQ19GVU5DMV9FTkQgICAgICAgICAgICAxOTMwCisjZGVmaW5lIEhDX0ZVTkMyX1NUQVJUICAgICAgICAgIDE5MzAKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDJ9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMTIwLDggKzIyMzMsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DMl9FTkQgICAgICAgICAgICAxODQ4Ci0jZGVmaW5lIEhDX0ZVTkMzX1NUQVJUICAgICAgICAgIDE4NDgKKyNkZWZpbmUgSENfRlVOQzJfRU5EICAgICAgICAgICAgMTk0NQorI2RlZmluZSBIQ19GVU5DM19TVEFSVCAgICAgICAgICAxOTQ1CiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHgzfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjEzNyw4ICsyMjUwLDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzNfRU5EICAgICAgICAgICAgMTg2MwotI2RlZmluZSBIQ19GVU5DNF9TVEFSVCAgICAgICAgICAxODYzCisjZGVmaW5lIEhDX0ZVTkMzX0VORCAgICAgICAgICAgIDE5NjAKKyNkZWZpbmUgSENfRlVOQzRfU1RBUlQgICAgICAgICAgMTk2MAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4NH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIxNTQsOCArMjI2Nyw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM0X0VORCAgICAgICAgICAgIDE4NzgKLSNkZWZpbmUgSENfRlVOQzVfU1RBUlQgICAgICAgICAgMTg3OAorI2RlZmluZSBIQ19GVU5DNF9FTkQgICAgICAgICAgICAxOTc1CisjZGVmaW5lIEhDX0ZVTkM1X1NUQVJUICAgICAgICAgIDE5NzUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDV9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMTcxLDggKzIyODQsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DNV9FTkQgICAgICAgICAgICAxODkzCi0jZGVmaW5lIEhDX0ZVTkM2X1NUQVJUICAgICAgICAgIDE4OTMKKyNkZWZpbmUgSENfRlVOQzVfRU5EICAgICAgICAgICAgMTk5MAorI2RlZmluZSBIQ19GVU5DNl9TVEFSVCAgICAgICAgICAxOTkwCiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHg2fSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjE4OCw4ICsyMzAxLDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzZfRU5EICAgICAgICAgICAgMTkwOAotI2RlZmluZSBIQ19GVU5DN19TVEFSVCAgICAgICAgICAxOTA4CisjZGVmaW5lIEhDX0ZVTkM2X0VORCAgICAgICAgICAgIDIwMDUKKyNkZWZpbmUgSENfRlVOQzdfU1RBUlQgICAgICAgICAgMjAwNQogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4N30sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIyMDUsMTAgKzIzMTgsMTAgQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzdfRU5EICAgICAgICAgICAgMTkyMwotI2RlZmluZSBQWFAyX0NPTU1PTl9TVEFSVCAgICAgICAxOTIzCi0Je09QX1dSX0UxLCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKKyNkZWZpbmUgSENfRlVOQzdfRU5EICAgICAgICAgICAgMjAyMAorI2RlZmluZSBQWFAyX0NPTU1PTl9TVEFSVCAgICAgICAyMDIwCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfUlFfRFJBTV9BTElHTiwgMHgxfSwKKwl7T1BfV1IsIFBYUDJfUkVHX1BHTF9DT05UUk9MMCwgMHhlMzgzNDB9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0NPTlRST0wxLCAweDNjMTB9LAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0VMVF9ESVNBQkxFLCAweDF9LAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1dSX1JFVl9NT0RFLCAweDB9LApAQCAtMjIyMCw3ICsyMzMzLDcgQEAKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVFNETV81LCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVFNETV82LCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVFNETV83LCAweGZmZmZmZmZmfSwKLQl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8xLCAweGZmZmZmZmZmfSwKKwl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8xLCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8yLCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8zLCAweGZmZmZmZmZmfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV80LCAweGZmZmZmZmZmfSwKQEAgLTIyNDcsNiArMjM2MCw3IEBACiAJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfSU5UX1hTRE1fMSwgMHhmZmZmMzM0MH0sCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzAsIDB4ZjAwMDUwMDB9LAogCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzAsIDB4ZjAwMDMwMDB9LAorCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8xLCAweGYwMDA4MDAwfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1JEX01BWF9CTEtTX1ZRNiwgMHg4fSwKIAl7T1BfV1IsIFBYUDJfUkVHX1JEX01BWF9CTEtTX1ZROSwgMHg4fSwKIAl7T1BfV1IsIFBYUDJfUkVHX1JEX01BWF9CTEtTX1ZRMTAsIDB4OH0sCkBAIC0yMzIzLDkgKzI0MzcsOCBAQAogCXtPUF9XUiwgUFhQMl9SRUdfUFNXUlFfQldfV1IsIDB4MTA2NDQwfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19SUV9JTFRfTU9ERSwgMHgxfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1JRX1JCQ19ET05FLCAweDF9LAotCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1BHTF9DT05UUk9MMCwgMHhlMzgzNDB9LAotI2RlZmluZSBQWFAyX0NPTU1PTl9FTkQgICAgICAgICAyMDQwCi0jZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9TVEFSVCAgIDIwNDAKKyNkZWZpbmUgUFhQMl9DT01NT05fRU5EICAgICAgICAgMjEzNworI2RlZmluZSBNSVNDX0FFVV9DT01NT05fU1RBUlQgICAyMTM3CiAJe09QX1pSLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzAsIDB4MTZ9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX05JR18wLCAweDU1NTQwMDAwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMl9OSUdfMCwgMHg1NTU1NTU1NX0sCkBAIC0yMzQ1LDggKzI0NTgsOCBAQAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEU0X1BYUF8xLCAweDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9DTFJfTEFUQ0hfU0lHTkFMLCAweGMwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfTUFTSywgMHgzfSwKLSNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX0VORCAgICAgMjA1OQotI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9TVEFSVCAgICAyMDU5CisjZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9FTkQgICAgIDIxNTYKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfU1RBUlQgICAgMjE1NgogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCAweGJmNWMwMDAwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzAsIDB4ZmY1YzAwMDB9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfRlVOQ18wX09VVF8wLCAweGZmZjUxZmVmfSwKQEAgLTIzNzksOCArMjQ5Miw4IEBACiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMV9GVU5DXzAsIDB4MH0sCiAJe09QX1pSX0UxLCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMl9GVU5DXzAsIDB4M30sCiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMCwgMHg3fSwKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfRU5EICAgICAgMjA5MQotI2RlZmluZSBNSVNDX0FFVV9QT1JUMV9TVEFSVCAgICAyMDkxCisjZGVmaW5lIE1JU0NfQUVVX1BPUlQwX0VORCAgICAgIDIxODgKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfU1RBUlQgICAgMjE4OAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wLCAweGJmNWMwMDAwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAsIDB4ZmY1YzAwMDB9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfRlVOQ18xX09VVF8wLCAweGZmZjUxZmVmfSwKQEAgLTI0MTMsNyArMjUyNiw3IEBACiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMV9GVU5DXzEsIDB4MH0sCiAJe09QX1pSX0UxLCBNSVNDX1JFR19BRVVfSU5WRVJURVJfMl9GVU5DXzEsIDB4M30sCiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMSwgMHg3fSwKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfRU5EICAgICAgMjEyMworI2RlZmluZSBNSVNDX0FFVV9QT1JUMV9FTkQgICAgICAyMjIwCiAKIH07CiAKQEAgLTI1MTIsNzIgKzI2MjUsNjQgQEAKIAkweDAwMDAwMjAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwKLQkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLAotCTB4MDAwMDYxODAsIDB4MDAwMDgyNDAsIDB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsCi0JMHgwMDAxMjYwMCwgMHgwMDAxNDZjMCwgMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwKLQkweDAwMDFlYTgwLCAweDAwMDIwYjQwLCAweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLAotCTB4MDAwMmFmMDAsIDB4MDAwMmNmYzAsIDB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsCi0JMHgwMDAzNzM4MCwgMHgwMDAzOTQ0MCwgMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwKLQkweDAwMDQzODAwLCAweDAwMDQ1OGMwLCAweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLAotCTB4MDAwMTg3MDAsIDB4MDAwMjBhODAsIDB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsCi0JMHgwMDA0OWMwMCwgMHgwMDA1MWY4MCwgMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwKLQkweDAwMDdiMTAwLCAweDAwMDgzNDgwLCAweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLAotCTB4MDAwYWM2MDAsIDB4MDAwYjQ5ODAsIDB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsCi0JMHgwMDBkZGIwMCwgMHgwMDAwMTkwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywKKwkweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAorCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDIwMDAsIDB4MDAwMDQwYzAsIDB4MDAwMDYxODAsIDB4MDAwMDgyNDAsCisJMHgwMDAwYTMwMCwgMHgwMDAwYzNjMCwgMHgwMDAwZTQ4MCwgMHgwMDAxMDU0MCwgMHgwMDAxMjYwMCwgMHgwMDAxNDZjMCwKKwkweDAwMDE2NzgwLCAweDAwMDE4ODQwLCAweDAwMDFhOTAwLCAweDAwMDFjOWMwLCAweDAwMDFlYTgwLCAweDAwMDIwYjQwLAorCTB4MDAwMjJjMDAsIDB4MDAwMjRjYzAsIDB4MDAwMjZkODAsIDB4MDAwMjhlNDAsIDB4MDAwMmFmMDAsIDB4MDAwMmNmYzAsCisJMHgwMDAyZjA4MCwgMHgwMDAzMTE0MCwgMHgwMDAzMzIwMCwgMHgwMDAzNTJjMCwgMHgwMDAzNzM4MCwgMHgwMDAzOTQ0MCwKKwkweDAwMDNiNTAwLCAweDAwMDNkNWMwLCAweDAwMDNmNjgwLCAweDAwMDQxNzQwLCAweDAwMDQzODAwLCAweDAwMDQ1OGMwLAorCTB4MDAwNDc5ODAsIDB4MDAwNDlhNDAsIDB4MDAwMDgwMDAsIDB4MDAwMTAzODAsIDB4MDAwMTg3MDAsIDB4MDAwMjBhODAsCisJMHgwMDAyOGUwMCwgMHgwMDAzMTE4MCwgMHgwMDAzOTUwMCwgMHgwMDA0MTg4MCwgMHgwMDA0OWMwMCwgMHgwMDA1MWY4MCwKKwkweDAwMDVhMzAwLCAweDAwMDYyNjgwLCAweDAwMDZhYTAwLCAweDAwMDcyZDgwLCAweDAwMDdiMTAwLCAweDAwMDgzNDgwLAorCTB4MDAwOGI4MDAsIDB4MDAwOTNiODAsIDB4MDAwOWJmMDAsIDB4MDAwYTQyODAsIDB4MDAwYWM2MDAsIDB4MDAwYjQ5ODAsCisJMHgwMDBiY2QwMCwgMHgwMDBjNTA4MCwgMHgwMDBjZDQwMCwgMHgwMDBkNTc4MCwgMHgwMDBkZGIwMCwgMHgwMDAwMTkwMCwKKwkweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwKLQkweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMDAxMDAwLCAweDAwMDAyMDgwLCAweDAwMDAzMTAwLCAweDAwMDA0MTgwLAotCTB4MDAwMDUyMDAsIDB4MDAwMDYyODAsIDB4MDAwMDczMDAsIDB4MDAwMDgzODAsIDB4MDAwMDk0MDAsIDB4MDAwMGE0ODAsCi0JMHgwMDAwYjUwMCwgMHgwMDAwYzU4MCwgMHgwMDAwZDYwMCwgMHgwMDAwZTY4MCwgMHgwMDAwZjcwMCwgMHgwMDAxMDc4MCwKLQkweDAwMDExODAwLCAweDAwMDEyODgwLCAweDAwMDEzOTAwLCAweDAwMDE0OTgwLCAweDAwMDE1YTAwLCAweDAwMDE2YTgwLAotCTB4MDAwMTdiMDAsIDB4MDAwMThiODAsIDB4MDAwMTljMDAsIDB4MDAwMWFjODAsIDB4MDAwMWJkMDAsIDB4MDAwMWNkODAsCi0JMHgwMDAxZGUwMCwgMHgwMDAxZWU4MCwgMHgwMDAxZmYwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDAwMDYwNCwKLQkweGNjY2NjY2MxLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwKKwkweDAwMDAzMTAwLCAweDAwMDA0MTgwLCAweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLAorCTB4MDAwMDk0MDAsIDB4MDAwMGE0ODAsIDB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsCisJMHgwMDAwZjcwMCwgMHgwMDAxMDc4MCwgMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwKKwkweDAwMDE1YTAwLCAweDAwMDE2YTgwLCAweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLAorCTB4MDAwMWJkMDAsIDB4MDAwMWNkODAsIDB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MTAwMDAwMDAsCisJMHgwMDAwMjhhZCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDM1MDgwNCwgMHhjY2NjY2NjMSwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweDcwNTgxMDNjLCAweDAwMDAwMDAwLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweDAwMDAwMDAwLAogCTB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLAotCTB4MDAwMDM1MDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLAorCTB4MDAwMDM1MDAsIDB4MDAwZTAxYjcsIDB4MDExNjAwZDYsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCiAJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKIAkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCi0JMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAotCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKLQkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweDAwMDAwMDAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweDAwNzIwMWJiLCAweDAxMjMwMGYzLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmYzLAorCTB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCiAJMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAogCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywKLQkweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywKKwkweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAogCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKQEAgLTI1ODUsNDEgKzI2OTAsNDEgQEAKIAkweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLAogCTB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1NmZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCi0JMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKKwkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCiAJMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAogCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKIAkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOGEsCi0JMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCisJMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1NmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAogCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywKLQkweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAogCTB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwKIAkweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LAotCTB4MDQwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LAorCTB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCisJMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsCisJMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKKwkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNDBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAorCTB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKIAkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCkBAIC0yNjQxLDE2ICsyNzQ2LDI2IEBACiAJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKIAkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHgwMDEwMDAwMCwgMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwKLQkweDAwMGI4MTk4LCAweDAwMDIwMjUwLCAweDAwMDEwMjcwLCAweDAwMGYwMjgwLCAweDAwMDEwMzcwLCAweDAwMDgwMDAwLAotCTB4MDAwODAwODAsIDB4MDAwMjgxMDAsIDB4MDAwYjgxMjgsIDB4MDAwMjAxZTAsIDB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsCi0JMHgwMDAyMDI4MCwgMHgwMDBmMDAwMCwgMHgwMDA4MDBmMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwKLQkweDAwMDEwMjcwLCAweDAwMGI4MjgwLCAweDAwMDgwMzM4LCAweDAwMTAwMDAwLCAweDAwMDgwMTAwLCAweDAwMDI4MTgwLAotCTB4MDAwYjgxYTgsIDB4MDAwMjAyNjAsIDB4MDAwMTgyODAsIDB4MDAwZTgyOTgsIDB4MDAwODAzODAsIDB4MDAwMjgwMDAsCi0JMHgwMDBiODAyOCwgMHgwMDAyMDBlMCwgMHgwMDAxMDEwMCwgMHgwMDAwODExMCwgMHgwMDAwMDExOCwgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCi0JMHhjY2NjY2NjYywgMHgwMDAwMjAwMAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGNkY2RjZGNkLCAweDAwMTAwMDAwLCAweDAwMDcwMTAwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LCAweDAwMDIwMjUwLAorCTB4MDAwMTAyNzAsIDB4MDAwZjAyODAsIDB4MDAwMTAzNzAsIDB4MDAwODAwMDAsIDB4MDAwODAwODAsIDB4MDAwMjgxMDAsCisJMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwgMHgwMDAxMDIwMCwgMHgwMDA3MDIxMCwgMHgwMDAyMDI4MCwgMHgwMDBmMDAwMCwKKwkweDAwMDgwMGYwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LCAweDAwMDIwMjUwLCAweDAwMDEwMjcwLCAweDAwMGI4MjgwLAorCTB4MDAwODAzMzgsIDB4MDAxMDAwMDAsIDB4MDAwODAxMDAsIDB4MDAwMjgxODAsIDB4MDAwYjgxYTgsIDB4MDAwMjAyNjAsCisJMHgwMDAxODI4MCwgMHgwMDBlODI5OCwgMHgwMDA4MDM4MCwgMHgwMDAyODAwMCwgMHgwMDBiODAyOCwgMHgwMDAyMDBlMCwKKwkweDAwMDEwMTAwLCAweDAwMDA4MTEwLCAweDAwMDAwMTE4LCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAorCTB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCisJMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBpbml0X2RhdGFfZTFoW10gPSB7CkBAIC0yNzUxLDExOTczICsyODY2LDEzNDU3IEBACiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKLQkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLAotCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDIwMDAsIDB4MDAwMDQwYzAsIDB4MDAwMDYxODAsIDB4MDAwMDgyNDAsCi0JMHgwMDAwYTMwMCwgMHgwMDAwYzNjMCwgMHgwMDAwZTQ4MCwgMHgwMDAxMDU0MCwgMHgwMDAxMjYwMCwgMHgwMDAxNDZjMCwKLQkweDAwMDE2NzgwLCAweDAwMDE4ODQwLCAweDAwMDFhOTAwLCAweDAwMDFjOWMwLCAweDAwMDFlYTgwLCAweDAwMDIwYjQwLAotCTB4MDAwMjJjMDAsIDB4MDAwMjRjYzAsIDB4MDAwMjZkODAsIDB4MDAwMjhlNDAsIDB4MDAwMmFmMDAsIDB4MDAwMmNmYzAsCi0JMHgwMDAyZjA4MCwgMHgwMDAzMTE0MCwgMHgwMDAzMzIwMCwgMHgwMDAzNTJjMCwgMHgwMDAzNzM4MCwgMHgwMDAzOTQ0MCwKLQkweDAwMDNiNTAwLCAweDAwMDNkNWMwLCAweDAwMDNmNjgwLCAweDAwMDQxNzQwLCAweDAwMDQzODAwLCAweDAwMDQ1OGMwLAotCTB4MDAwNDc5ODAsIDB4MDAwNDlhNDAsIDB4MDAwMDgwMDAsIDB4MDAwMTAzODAsIDB4MDAwMTg3MDAsIDB4MDAwMjBhODAsCi0JMHgwMDAyOGUwMCwgMHgwMDAzMTE4MCwgMHgwMDAzOTUwMCwgMHgwMDA0MTg4MCwgMHgwMDA0OWMwMCwgMHgwMDA1MWY4MCwKLQkweDAwMDVhMzAwLCAweDAwMDYyNjgwLCAweDAwMDZhYTAwLCAweDAwMDcyZDgwLCAweDAwMDdiMTAwLCAweDAwMDgzNDgwLAotCTB4MDAwOGI4MDAsIDB4MDAwOTNiODAsIDB4MDAwOWJmMDAsIDB4MDAwYTQyODAsIDB4MDAwYWM2MDAsIDB4MDAwYjQ5ODAsCi0JMHgwMDBiY2QwMCwgMHgwMDBjNTA4MCwgMHgwMDBjZDQwMCwgMHgwMDBkNTc4MCwgMHgwMDBkZGIwMCwgMHgwMDAwMTkwMCwKLQkweDAwMDAwMDI4LCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwKLQkweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMDAxMDAwLCAweDAwMDAyMDgwLCAweDAwMDAzMTAwLCAweDAwMDA0MTgwLAotCTB4MDAwMDUyMDAsIDB4MDAwMDYyODAsIDB4MDAwMDczMDAsIDB4MDAwMDgzODAsIDB4MDAwMDk0MDAsIDB4MDAwMGE0ODAsCi0JMHgwMDAwYjUwMCwgMHgwMDAwYzU4MCwgMHgwMDAwZDYwMCwgMHgwMDAwZTY4MCwgMHgwMDAwZjcwMCwgMHgwMDAxMDc4MCwKLQkweDAwMDExODAwLCAweDAwMDEyODgwLCAweDAwMDEzOTAwLCAweDAwMDE0OTgwLCAweDAwMDE1YTAwLCAweDAwMDE2YTgwLAotCTB4MDAwMTdiMDAsIDB4MDAwMThiODAsIDB4MDAwMTljMDAsIDB4MDAwMWFjODAsIDB4MDAwMWJkMDAsIDB4MDAwMWNkODAsCi0JMHgwMDAxZGUwMCwgMHgwMDAxZWU4MCwgMHgwMDAxZmYwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDAwMDYwNCwKLQkweGNjY2NjY2M1LCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLAotCTB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsCi0JMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwKLQkweGNjY2NjY2NjLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLAorCTB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCisJMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwKKwkweGZmZmZmZmZmLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAorCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLAorCTB4MDAwMDIwMDAsIDB4MDAwMDQwYzAsIDB4MDAwMDYxODAsIDB4MDAwMDgyNDAsIDB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsCisJMHgwMDAwZTQ4MCwgMHgwMDAxMDU0MCwgMHgwMDAxMjYwMCwgMHgwMDAxNDZjMCwgMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwKKwkweDAwMDFhOTAwLCAweDAwMDFjOWMwLCAweDAwMDFlYTgwLCAweDAwMDIwYjQwLCAweDAwMDIyYzAwLCAweDAwMDI0Y2MwLAorCTB4MDAwMjZkODAsIDB4MDAwMjhlNDAsIDB4MDAwMmFmMDAsIDB4MDAwMmNmYzAsIDB4MDAwMmYwODAsIDB4MDAwMzExNDAsCisJMHgwMDAzMzIwMCwgMHgwMDAzNTJjMCwgMHgwMDAzNzM4MCwgMHgwMDAzOTQ0MCwgMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwKKwkweDAwMDNmNjgwLCAweDAwMDQxNzQwLCAweDAwMDQzODAwLCAweDAwMDQ1OGMwLCAweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLAorCTB4MDAwMDgwMDAsIDB4MDAwMTAzODAsIDB4MDAwMTg3MDAsIDB4MDAwMjBhODAsIDB4MDAwMjhlMDAsIDB4MDAwMzExODAsCisJMHgwMDAzOTUwMCwgMHgwMDA0MTg4MCwgMHgwMDA0OWMwMCwgMHgwMDA1MWY4MCwgMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwKKwkweDAwMDZhYTAwLCAweDAwMDcyZDgwLCAweDAwMDdiMTAwLCAweDAwMDgzNDgwLCAweDAwMDhiODAwLCAweDAwMDkzYjgwLAorCTB4MDAwOWJmMDAsIDB4MDAwYTQyODAsIDB4MDAwYWM2MDAsIDB4MDAwYjQ5ODAsIDB4MDAwYmNkMDAsIDB4MDAwYzUwODAsCisJMHgwMDBjZDQwMCwgMHgwMDBkNTc4MCwgMHgwMDBkZGIwMCwgMHgwMDAwMTkwMCwgMHgwMDAwMDAyOCwgMHgwMDEwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKLQkweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwKLQkweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLAotCTB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKLQkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCi0JMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAotCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsCi0JMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwKLQkweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LAotCTB4MDU2ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCi0JMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsCi0JMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKLQkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmOGEsIDB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNWNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMWFmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCi0JMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAotCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKLQkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDU4ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsCi0JMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHgwMDEwMDAwMCwKLQkweDAwMDcwMTAwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LCAweDAwMDIwMjUwLCAweDAwMDEwMjcwLCAweDAwMGYwMjgwLAotCTB4MDAwMTAzNzAsIDB4MDAwODAwMDAsIDB4MDAwODAwODAsIDB4MDAwMjgxMDAsIDB4MDAwYjgxMjgsIDB4MDAwMjAxZTAsCi0JMHgwMDAxMDIwMCwgMHgwMDA3MDIxMCwgMHgwMDAyMDI4MCwgMHgwMDBmMDAwMCwgMHgwMDA4MDBmMCwgMHgwMDAyODE3MCwKLQkweDAwMGI4MTk4LCAweDAwMDIwMjUwLCAweDAwMDEwMjcwLCAweDAwMGI4MjgwLCAweDAwMDgwMzM4LCAweDAwMTAwMDAwLAotCTB4MDAwODAxMDAsIDB4MDAwMjgxODAsIDB4MDAwYjgxYTgsIDB4MDAwMjAyNjAsIDB4MDAwMTgyODAsIDB4MDAwZTgyOTgsCi0JMHgwMDA4MDM4MCwgMHgwMDBkMDAwMCwgMHgwMDAwMDBkMCwgMHgwMDAyODBkMCwgMHgwMDBiODBmOCwgMHgwMDAyMDFiMCwKLQkweDAwMDEwMWQwLCAweDAwMGM4MWUwLCAweDAwMDAwMmE4LCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCi0JMHgwMDAwMjAwMAorCTB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweDAwMDAxMDAwLAorCTB4MDAwMDIwODAsIDB4MDAwMDMxMDAsIDB4MDAwMDQxODAsIDB4MDAwMDUyMDAsIDB4MDAwMDYyODAsIDB4MDAwMDczMDAsCisJMHgwMDAwODM4MCwgMHgwMDAwOTQwMCwgMHgwMDAwYTQ4MCwgMHgwMDAwYjUwMCwgMHgwMDAwYzU4MCwgMHgwMDAwZDYwMCwKKwkweDAwMDBlNjgwLCAweDAwMDBmNzAwLCAweDAwMDEwNzgwLCAweDAwMDExODAwLCAweDAwMDEyODgwLCAweDAwMDEzOTAwLAorCTB4MDAwMTQ5ODAsIDB4MDAwMTVhMDAsIDB4MDAwMTZhODAsIDB4MDAwMTdiMDAsIDB4MDAwMThiODAsIDB4MDAwMTljMDAsCisJMHgwMDAxYWM4MCwgMHgwMDAxYmQwMCwgMHgwMDAxY2Q4MCwgMHgwMDAxZGUwMCwgMHgwMDAxZWU4MCwgMHgwMDAxZmYwMCwKKwkweDEwMDAwMDAwLCAweDAwMDAyOGFkLCAweDAwMDAwMDAwLCAweDAwMDEwMDAxLCAweDAwMzUwODA0LCAweGNjY2NjY2M1LAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NzA1ODEwM2MsIDB4MDAwMDAwMDAsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsCisJMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywKKwkweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLAorCTB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwZTAyMzIsIDB4MDExNjAwZDYsCisJMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDcyMDIzNiwgMHgwMTIzMDBmMywgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzBlZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsCisJMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMmZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmMywgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLAorCTB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjcsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxZWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsCisJMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLAorCTB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZjhhLCAweDA0MmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLAorCTB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMTBmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjMsIDB4MzE2ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNiwgMHgzMGJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMxNCwgMHhmM2NmM2NmMywKKwkweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY3LCAweDMxY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjAsIDB4MzA3ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsIDB4MDAwNzAxMDAsCisJMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwgMHgwMDAxMDM3MCwKKwkweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLCAweDAwMDEwMjAwLAorCTB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsCisJMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwgMHgwMDA4MDEwMCwKKwkweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LCAweDAwMDgwMzgwLAorCTB4MDAwYjAwMDAsIDB4MDAwMTAwYjAsIDB4MDAwMjgwYzAsIDB4MDAwNTgwZTgsIDB4MDAwMjAxNDAsIDB4MDAwMTAxNjAsCisJMHgwMDBlMDE3MCwgMHgwMDAzODI1MCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKKwkweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwLAorCTB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDQwMDIwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdHNlbV9pbnRfdGFibGVfZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTlkOWIzOGEsIDB4MjI3MTc2MTgsCi0JMHhhNzAxNDNmOCwgMHhhNDMwMzMzMiwgMHgxMDI2NzEwMywgMHg5N2UyMDRhZiwgMHhhZjBjMGM4YywgMHgyZmQ3ODkxOCwKLQkweGNmNjA4NjIxLCAweDM4NjA2NjEwLCAweDQyMDZjNDAyLCAweDIyNDUwYzBjLCAweGEwN2FmMTA4LCAweGZlNDA3YjlhLAotCTB4YjY5OGE4NDIsIDB4NzZjMzAzMjgsIDB4M2JmNzgxZDEsIDB4MzQ5NTcwMzUsIDB4MjRhNDU4YTYsIDB4NDU4ZDVkODIsCi0JMHhhMGQ3MTkxZSwgMHg0NDk0ZWZjOSwgMHhkMDEyZDdlNSwgMHg0NTM4ZDAzZiwgMHg1MTNmOTUwOSwgMHg1NDdmNDIwMSwKLQkweDM0MmZhNjg0LCAweGY5NTA0OWY5LCAweGE1N2Y1MDM5LCAweDc3Mzc2MTI5LCAweDAwMWU1NDJlLCAweDYxYWE4YTkyLAotCTB4MDAwMDAzNjAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDE5ZDk0NThhLCAweDExMzhmYzE4LAorCTB4NTk4MGExZmMsIDB4ZDgxODE5OTgsIDB4ODgwMzk4ODAsIDB4ODFiODgwM2QsIDB4OTFhMTgxOTEsIDB4ZGFmZDc4OTEsCisJMHhiZjc2MDg2MiwgMHg2ZWMzMDMzMCwgMHgwMjExZTYyMCwgMHgxMDgyMjM5YSwgMHhmMzU0MDI5ZiwgMHgwZjVmYzgwNiwKKwkweDY1MTJiMzE1LCAweDNhMjYzODYwLCAweDA2YTc3ZWYwLCAweDI5OGQyYWRlLCAweGMxMTI0NTM2LCAweDFlNDU4NmRlLAorCTB4OTM0NzZmMTksIDB4Y2E4OTIyZmYsIDB4ZmY0MDQxZGYsIDB4NjUyOTYzNDAsIDB4MjI5ZGJlNTQsIDB4MDRhNjVlODQsCisJMHhlNGQxYTVhMSwgMHhkN2YyYTFlZCwgMHg1MTkyZmVhMSwgMHgwZGVlNmVjNiwgMHhmODAwM2NhOCwgMHg2MDY1NDk1YywKKwkweDAwNjA2NTQ5CiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1fcHJhbV9kYXRhX2UxW10gPSB7CiAJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHg0OTk5OWNjZSwKLQkweDIwNGU0Y2NlLCAweDMwODQwOTA5LCAweDQzNTExODc5LCAweDdjMDYxZTFjLCAweDIwMTI3NmY0LCAweDA2YmYyYWU1LAotCTB4MGVhMmExN2MsIDB4MmRlNDIxMDgsIDB4ZWJmOGZlYTUsIDB4MDkyMTMyZmQsIDB4ZjYzNmM1NDQsIDB4ZGEyZjQ1YTIsCi0JMHgwNWE4NTVlMSwgMHhhMTgwZDAzYiwgMHg0YTAwZWUwNSwgMHg3ODM2ZGFhMSwgMHhmNWFiMTViZCwgMHg2MmEyOTY4ZSwKLQkweDk2YWQyMjQ4LCAweGJmY2IxN2ZlLCAweDI0ZmJkYWQ2LCAweDAwNjY0ZTczLCAweGJiZjdiZGNiLCAweDlmYTdlZmQ3LAotCTB4ZWNlN2Q5ZGQsIDB4ZWJkYWY3YjMsIDB4N2I1YWQ3YjUsIDB4NWQ4YTNkZWQsIDB4MTlkN2VhNjIsIDB4YTBmZjg3M2IsCi0JMHhjNjMxYjNlYywgMHg5ZjJjMTlhZSwgMHgyM2E1N2NjOCwgMHg2YWQ4Y2JkNywgMHgzMTI3ZDQzYiwgMHgwZjYyM2MxNiwKLQkweDViMTg5MjZkLCAweGI1OWZkYTMyLCAweDcxY2EwZDMwLCAweGJjMjBiZTY5LCAweGViZTE2NzY3LCAweGM2NTRjNjEyLAotCTB4OWI0YWFkZmYsIDB4ZThmMmM5OTQsIDB4ZjA3M2I5ZjksIDB4ZjMwZjgxZGMsIDB4NTg1NjRiMTksIDB4NjMwMjY1MzAsCi0JMHhhZmNjNmMyYiwgMHg4ZmJhODMwZiwgMHhmYzljMGZiMSwgMHg3ZmY4NzM5YiwgMHhmNjFiMjRjMSwgMHhiZjg3NDIzMywKLQkweGFmM2VkZmExLCAweDgxNGY2ODJkLCAweGVkY2RiMzdlLCAweDEyMTU0OTRlLCAweGQ1ZGIxOTkzLCAweDE0MGJkMmM0LAotCTB4OWM5YWJhYzYsIDB4NDliNGZlNTQsIDB4NjAyODJmNGYsIDB4MjY1MzRmNmMsIDB4NzkzNWY3ZDUsIDB4OGQzNDhjYTksCi0JMHg5YTA3ZTdhNSwgMHhiMzRmNTQ3YywgMHhmN2UzZDdmNSwgMHgyYjdjOGUyMywgMHhjZTBkMTU5NSwgMHg2OGFlNWFkZiwKLQkweDA2MGI3MTgyLCAweDY0Y2M3ZmViLCAweGY5ZTAwNTQxLCAweGFmZWVjMmEzLCAweDVmOWFlZjgwLCAweDg1MTI5ODlmLAotCTB4ODAyYzk5ZjIsIDB4ZjdlODY1MzYsIDB4NDVmYjJlY2YsIDB4OGNlMWI0ZmUsIDB4Mzg3YzNkNjUsIDB4Njg0NGRhN2YsCi0JMHhlMTM5YjEyNywgMHg4NzQ1OWMyMiwgMHhlMjVjNmIzNCwgMHg3N2IxOWY3MSwgMHhjZGMwMzJhNCwgMHg2OTkxODAyZCwKLQkweGI5YjU4Yzk5LCAweDRmMmU2ZmZhLCAweDQ0ZjVjYzY1LCAweDBiOWE3ZmI2LCAweDVkMGNkZGU2LCAweDJlZWM2NDhjLAotCTB4ZGUwYzEwNTYsIDB4ZjgxZmZkMDAsIDB4ZTgwNTI1YjgsIDB4NjE0OTc2YTEsIDB4NGIyNmNkNzgsIDB4ZDAxMmNkMTUsCi0JMHg3Y2NlZGQ4YiwgMHhhNTM4NzA5YiwgMHhkNDE0NzlhMiwgMHhkZTYwZWVmYiwgMHhlMzgzYmRjNywgMHg5ODgwYzVkYywKLQkweDQ2Y2NkOGU5LCAweDMyYTg2NGU1LCAweGE1ZGQ4N2U4LCAweGUyZTUzNjg2LCAweDE1YzVmZDg3LCAweDJmYjcxMmUzLAotCTB4ZDUxN2Y4MzksIDB4ZjZmMWE2ZWIsIDB4MDc4ZDMyOGYsIDB4N2YxM2I5ZGYsIDB4Y2JlMDc1OTcsIDB4YWVmN2Q3N2QsCi0JMHg3ODg0MjMzMiwgMHhlMTFmOTg1MywgMHhjNjU3NzUzYiwgMHhkZTI1YzdiYSwgMHg3ZDhmMTYzZSwgMHhjNzBhYWIyYSwKLQkweDhlMTU2N2ExLCAweDY2ZGNmYzBiLCAweDM2N2I3NGU3LCAweGIxOGQ0YTE3LCAweDE2NjYzODM1LCAweDljNjJiNTYzLAotCTB4MDNkOTVhMjksIDB4MzAwMGIyNTgsIDB4YjU4Y2I1ZTcsIDB4ZGRhMGJkMjAsIDB4M2FiZjY4OTQsIDB4ZGY0YWUwMGYsCi0JMHg4NTJhNGIzMywgMHgwYWYxZmE3YSwgMHhmMjExNWU2OSwgMHgxMGNmNDFhMSwgMHhiMTI1OWZmNSwgMHg5ZWY4MWQ4YSwKLQkweDcwY2E5MmNkLCAweGU3MWYzYjFjLCAweDhiNTBmZTg2LCAweGU4NmVlMDA3LCAweGVjOWVkZGNhLCAweDYxOTRmZGU1LAotCTB4NDg1NTNmYmIsIDB4Mzg1OGI1ZjMsIDB4N2E0ZmQ0YmQsIDB4ZGYwMzhjMTcsIDB4MzhjMGY3YTcsIDB4YTU2YjNlZjAsCi0JMHhmZTY5YmFjNCwgMHhlMWE2MTRkZSwgMHgzMmM2N2U3OCwgMHg3MGE2YTQ0MCwgMHhhOGQ5OTA5OSwgMHg3ODY3ZTQyNCwKLQkweGZjODE2NWFlLCAweDNmMmUzMzY0LCAweDhiZTYzNWE3LCAweDlmNzM3ZTAwLCAweGQwZDQ3Y2Q0LCAweDc4MzU3OWFiLAotCTB4NjljODVhM2YsIDB4MjY2YWEwNzYsIDB4MDFiNjMwZjMsIDB4NTMwNTkzZDAsIDB4N2NhOGRkMWUsIDB4YjM5MThkMTAsCi0JMHhjZGEzNzMzMSwgMHg5NjYzZmEyOCwgMHg5OTdiOWY5OSwgMHg5Y2YyODZkNywgMHhjZjNmMzQxYiwgMHhiZmQ3Mzc2ZiwKLQkweDI3NjlkY2NkLCAweGRjM2Y4MmFlLCAweDhlNGU3ZGNjLCAweGMwZTM4ZjMzLCAweDEyY2YwMGQ0LCAweDZmYzBlZjIxLAotCTB4YWRiZjJjNmEsIDB4NWExOTYyNmQsIDB4OTEzOTYyNDEsIDB4NWRjZTFjOTYsIDB4Yjc2ODdhODksIDB4ZjdjMDczZTQsCi0JMHg5MDdiNjAyZiwgMHg2ZWY4OTBlZiwgMHgwNWQ3YThiZCwgMHgwZDVkODU1NSwgMHgxZTI4MjAyNSwgMHg5NThhZmM3ZiwKLQkweDFmYmE0MDZlLCAweDEwMWI2NTY3LCAweGJmNGEwZGZmLCAweDBkN2MwM2FhLCAweGE0M2ZhYThkLCAweDE3YmY2ZDBkLAotCTB4ZDdkYjExMTgsIDB4NGUwM2JlMmIsIDB4OTliZmJmMTgsIDB4ZjhjM2Q2ZjksIDB4MTk3YWVjNGIsIDB4ZWMzYzk3ZDYsCi0JMHhkNzk4YmQyNSwgMHg3ZTQ3MmQxZSwgMHhlYTA1ZDMxZCwgMHhmYmYwNzcyYSwgMHgyNzY3ODA4YiwgMHhlY2YwMDFjMiwKLQkweDk3ZjRlM2U0LCAweGRmZWRmZWEzLCAweGI5ZjViMTJiLCAweDc3ZWYwZTM4LCAweDE2NWNlZWM5LCAweGU3MGM0ZGNjLAotCTB4ZmM0ZWNjNzMsIDB4YmMwYjQwYjQsIDB4MjY3ZWU1ODIsIDB4MDJjNjI3MjksIDB4ODNjYzNkOWEsIDB4Y2FhOTY4ZjQsCi0JMHg1NDM5NGVmYiwgMHhlOWY3YzY5ZiwgMHhmOWNjZjU4MywgMHgwMDAzMzIzMywgMHg2NjE4ZDY1NywgMHhiM2E1NTdhMiwKLQkweDdhZjUwNzMxLCAweDFjYjg0NTc1LCAweDI1YzNlMmY5LCAweDEyYzBhY2FmLCAweDAwYWU5Y2YwLCAweDJhMzg4ZmJlLAotCTB4ZWE3ZWM3NWUsIDB4YTIxNjM2ZTYsIDB4ZTg3MGVkYzgsIDB4N2IxYWZlMzQsIDB4NzIzN2Q2NDcsIDB4MWZhNTBmMTEsCi0JMHhkMDZmYzAyYiwgMHgxODY1MzA2ZCwgMHhmZjQ1OTVmMiwgMHhjNjBmYmZjMywgMHg5ODljYmE4YSwgMHgxNzJhMTdlZSwKLQkweGUyMGEzZjYwLCAweGY1OWZjYjhkLCAweDBmNDIwN2ZkLCAweGY4MjYxZTgxLCAweDk1N2VjYmJjLCAweGI2M2MzMDVmLAotCTB4YzE3ZTdhZmUsIDB4MDk1MDAxNDQsIDB4MTNmMGNiYzEsIDB4NDU1MmEyYzYsIDB4NjYzZGJkMWMsIDB4YTU2MWU5NzcsCi0JMHhmZjNjMzEzOCwgMHg3NDA0ZjNkOSwgMHgwMDFhN2NkMiwgMHg3NTI3YzhiNywgMHgxY2I0MzU2ZSwgMHhhNzc1M2RmMCwKLQkweGUwNzVmMjNkLCAweDUyNzViYTkzLCAweGRiNzUwMWM4LCAweGVmYmQxNzNlLCAweDExZWJjYjVkLCAweGU5ZjVjYWI3LAotCTB4MGE4M2E4NDYsIDB4N2Y3NDcwNmMsIDB4YjNlNDdhZmIsIDB4OGY1YjMyOWQsIDB4ZjU4NThlZGQsIDB4MDljY2Y0MTgsCi0JMHhjNDliM2IwMSwgMHgxNzRhZTdkNywgMHhkYmFkZDZhZiwgMHg1ZjdlMWY3ZiwgMHgyZTYwZTVkNSwgMHhmNzZlYWZlOCwKLQkweDg3YWY5YmEyLCAweDc2YzNhMmZhLCAweDM2ZWE0ZDg2LCAweGExMjNhYjM1LCAweGQ3YzQzOGJlLCAweDBlMzJiZWE1LAotCTB4NGM5NzcwNWYsIDB4YTc5ZjRiZWIsIDB4YTA3NmUzM2IsIDB4MjcyNmM5Y2YsIDB4ZDBmMTgyZjMsIDB4YjhjZWVlZTIsCi0JMHgzYWFkZjgwZCwgMHhiZjFjYmRiNCwgMHhmOTJhZGVhYiwgMHg3NzUzZWQxMCwgMHg4NTk0M2E2ZSwgMHg5NzIxZmFmMywKLQkweGM5MmQ5YWYzLCAweDBmZTA2YmNjLCAweDI5ZDEzYmZlLCAweGVmMGViZTQ3LCAweDE5M2NjMDk3LCAweDc1ODhiYmY0LAotCTB4YWMzZWEzOTQsIDB4YWQxNGY0ZGIsIDB4NGViZTA2MzMsIDB4Y2UzNGU5MzYsIDB4MTBmZTFjODAsIDB4ZWFlZjgxYzYsCi0JMHgzODdjOTI1ZiwgMHgwYjFiN2FjNSwgMHhlZWY2M2NhMCwgMHhhMGQ5Y2Q3NiwgMHhkNTlhZmNlMSwgMHg2YmNlMzc0MiwKLQkweDE2ZWQ4YWE1LCAweDcyZWRlNjg1LCAweDc1YmUxMTc5LCAweGFmYmMzOTZhLCAweGFkNGViYjVlLCAweDlhZGY5MThjLAotCTB4NzBjZGMzMmQsIDB4MTExZmM5YWQsIDB4NzE3ZDhmMzgsIDB4NmYwYmVjMTIsIDB4MWFiZDYwZTEsIDB4NDVlYTAxZjUsCi0JMHhhZWM2YTQyNSwgMHhhOTQ5NmY2YiwgMHgyZDlhZGY0NCwgMHhmODlhZjMzMiwgMHhmODNkZDM4OCwgMHhlZGQ2OGNhZiwKLQkweDVmMzc1ZWUwLCAweDA2ZGQwNWI3LCAweGRiYTBhYWY0LCAweDUxZDA1ZDY5LCAweDY3ODkyZmU5LCAweGU5MWI3YzdmLAotCTB4MjA3NGYwMDAsIDB4MjU1Y2EwOWUsIDB4YzBkY2YzZTAsIDB4ZGZlODE1NGEsIDB4MmUzYTY3ZTMsIDB4Y2JlMjE3YmIsCi0JMHhjNzliM2IwZSwgMHhjZDM5YWM2MCwgMHhhYzBhZmQ5YiwgMHg3YjJhMWRhMywgMHhlZjk5ZWQxMCwgMHhkM2ZkODZiNiwKLQkweDk2NmRiZDYwLCAweDgwMjViMzAyLCAweGFhMDViNjViLCAweGNlMTViYWY4LCAweDg1N2Y3NWM0LCAweDk0NmY2ZjU4LAotCTB4MTVhZjM0YmMsIDB4ODA5ZmMwNTksIDB4MjVlOThlZjcsIDB4YzA0OTY0MWIsIDB4Y2FmNTg2OWUsIDB4NGI5ZTNjMWYsCi0JMHhmZDQzZGNmZCwgMHhmZTRmZDBhOCwgMHhjYmQxZmI4NSwgMHhkMWZhOThhNywgMHg3ZThjYWJjYiwgMHg0OTNmNTAxNiwKLQkweDQ3NGZkNzE3LCAweDc4NjY3NWY5LCAweDdlOGRhYmNhLCAweGNmMWZhOGVhLCAweGZmNGJjZGM1LCAweDc4NjYwZGM2LAotCTB4ZmQ0YjUxYmUsIDB4YjFmMzRlYTQsIDB4YmFlYjg2ODAsIDB4ZWRkNjA3ZTAsIDB4YjZiZGUxOTcsIDB4ZTNjMjc1MzUsCi0JMHhjYTJmOTYyYywgMHhkY2YxYzYxZSwgMHg3Y2IxMjUyMCwgMHhjOTI1MzI5MSwgMHhmZWE5ODdjNCwgMHhmNDNhYTY2MSwKLQkweDJjYmFkM2E0LCAweGUzZGY4ZmY0LCAweDQ3NTRiOTI0LCAweDRhMTdhNGFhLCAweDllMDkzYTQ3LCAweGE0NmE0Njg3LAotCTB4MmViYTFlMTcsIDB4ODdhZTM5NzAsIDB4NGJkYTM2MzgsIDB4YWI4MWE5MGYsIDB4MGQ3YzM4ZjUsIDB4MTMyYzRhNzAsCi0JMHgzMjBmYjA0YiwgMHg2OTVmYmU4NywgMHgxYjI4NzhlNywgMHg3ZGYwYjY3NSwgMHhkNmMxYmVmOCwgMHhmNTBhOTg1ZiwKLQkweDNmZTk1YjM2LCAweDk1OWUzY2UyLCAweDI0OTY5ZGI4LCAweDk3NmM0NmIzLCAweGRlZjZlMGU0LCAweDBkOTJkY2NhLAotCTB4YjUzYzE4YzEsIDB4NGJmYTA2OGYsIDB4ZGJiNmZkODMsIDB4NWZjODk5MDMsIDB4MGViZjRiY2YsIDB4MThhZGJmMjIsCi0JMHhmYzdkOTJhZCwgMHgyMmFmZjM0MiwgMHgyYjhmZDA0MSwgMHgyMjY2NTc0NywgMHhjODJhMWQzZSwgMHgyYWY4ZWM3NywKLQkweGUzNDQ1ZjhjLCAweDdmZjFjMDZmLCAweDQ3N2M2MDk4LCAweGY4ZDMxNGRlLCAweGQzMmE5Y2NlLCAweGM2MTU0ZWY4LAotCTB4MjZkZjdlMDcsIDB4MDdjNjI1YmQsIDB4ZDhjNzVkZmMsIDB4YTFiZmNkNGIsIDB4NTUzOTFkZjEsIDB4YjQ0YWZlMzQsCi0JMHg0ZmM3NjM0ZiwgMHgyN2ZmMTgxYSwgMHg1YmJiOGMxMiwgMHg5MGQyZWJlMiwgMHg2NzVkZTdmOSwgMHhiNTRlN2Y5ZSwKLQkweDlmMmFmZTc5LCAweGRmZTk1ZWZmLCAweDM0NDlmOGM0LCAweGVmY2Q3ZGZmLCAweDU0ZTdmOWYxLCAweDc4M2JmOWYzLAotCTB4N2JlMzAzYmYsIDB4MTA3ZmYwMDYsIDB4ZDEyNDdmZTcsIDB4MzA2ZmYzZmMsIDB4YWQ0YzdmY2YsIDB4M2UwZWZlNzksCi0JMHgwZmE1MmZmZSwgMHg4ZDFhZjhjNSwgMHgxM2U2YWJmZiwgMHg2YTYzZmU3YywgMHgxMWQ1N2M2OSwgMHhhOTFmMjFmMCwKLQkweGM5MWE5MmEzLCAweGVkMDZjZjllLCAweDk0NzQ4MjM0LCAweGRjYjFjYTlmLCAweGYyOTc2ZWVlLCAweDI1MGYwZjA4LAotCTB4M2NmYmJlNzEsIDB4MWI0ZGY4MDksIDB4MDQyYzc3ZDQsIDB4YWNmYTA1MTIsIDB4Y2Q3Y2YwNWUsIDB4NTAzNTUyZDYsCi0JMHhkZTgzZGUyNCwgMHg1ZDQwMjg1YiwgMHg1ZjEzMjVkMCwgMHhkMDhlZDViMywgMHg2ZjZmMDA2NSwgMHhmYWM0MWM5NywKLQkweDBiNWZkNTgyLCAweDcxZGViNGM5LCAweGI5Y2MwMDdmLCAweGMzZmYzZTA4LCAweGM3ZDZlM2QzLCAweDJlNWFjYmNlLAotCTB4ODg5ZmIwZWMsIDB4YzM4OGU0OWEsIDB4NjM2MzJjMTMsIDB4NmJiZTAxMWIsIDB4NjdmMDlkMjUsIDB4MWU4MDRmZDQsCi0JMHgzZjNmYTA2NSwgMHhlNThhM2QwMCwgMHgzODFmYzI4NywgMHhhOTk2N2EwZSwgMHg0Y2QzNzJiMSwgMHg2Zjc3NDFkZiwKLQkweGVlYmNjMTE2LCAweDUwOWZmMDEwLCAweDJjNGZiZTM4LCAweGZmODg0Mjk1LCAweDUwN2E5ZmNmLCAweGIwYjRmZDQ1LAotCTB4M2U5MDE5MjMsIDB4YTA4MzQ3MDgsIDB4NDc2ZWZmNTMsIDB4Zjg0NGJkNjgsIDB4ZWU3ZTIyZjQsIDB4ZWM2NDUxMjQsCi0JMHg1ZmJlYzI3NywgMHhlOWI4NjZiNCwgMHhkNDJjYjliYiwgMHgxZmVkMDk5NiwgMHhiNDZmMzU1OCwgMHg2N2JmZjMwZSwKLQkweDRjODI2MzhlLCAweDk0N2Y5ZjdlLCAweDhkOThlNDhkLCAweDMxOGY4MWIyLCAweGZiMjlmM2E3LCAweDM5ZGNhODI4LAotCTB4ZWZiMjZlYzcsIDB4ZWI5ODBhZWYsIDB4ZWI5OTU0ZjcsIDB4ZGQ5MGY2YmQsIDB4NjJjNmY2ODYsIDB4N2U4M2FkODksCi0JMHhiZjM0NmRlZiwgMHhkYmIxYzYzNywgMHg4YzdiMDk4NiwgMHgwNjQ3Nzc4ZiwgMHgyYzVlZjc4NywgMHg5ZDYzZTAyNywKLQkweGNlOWY3YWU4LCAweDY5ZTAzNWJmLCAweDIyY2VjNDc4LCAweGQzNDY1ZWI0LCAweGMxNjc4ZmQxLCAweDAyZDdiMjc0LAotCTB4MTViNzlmM2EsIDB4NGVlY2ZiZGUsIDB4NzNjMDA1N2YsIDB4ZTEzMmMzZGYsIDB4NzQ3ZjBhZDMsIDB4MDZkZmIyNWYsCi0JMHhjZDc0NWM3NiwgMHhlNzY4ZWQxZiwgMHg4NTYzZTc1YSwgMHhkNjY1ZmVmZiwgMHhlYTJhZThmOSwgMHhlYjQxNzlmYiwKLQkweDU2MjdjZTczLCAweDJhZTg2YTdlLCAweGE2M2M3ZTFkLCAweGVmZjg1ZDVkLCAweGUxOGYxZjg3LCAweGIzMmQ5YWFmLAotCTB4YTFjNWY1NGMsIDB4MTdlZDRjYmIsIDB4N2E2Nzk5YWQsIDB4YjE2M2IwYmYsIDB4ZWQwM2ZkZTksIDB4ZjNlYTlhMGYsCi0JMHhkYTliMGY4MiwgMHhkOWFjYmZkZiwgMHhjNmRlZmVmNCwgMHhlZmVmNGNjNywgMHg1NGNhN2FhOSwgMHhhY2YwMmJiZiwKLQkweDczOWRmZGE5LCAweDRiZGU5OWQ2LCAweDg5OGYxNmZiLCAweDhjMGQ1ZTkyLCAweGYyYmI0MmM5LCAweDdlNDMwNzZkLAotCTB4OTBkZGY4MzQsIDB4MzI5YThmODcsIDB4ZTRkOTNjYTksIDB4ZTUxOWIyYTUsIDB4YjZkZmU0MTQsIDB4ZWIwZDk3OWIsCi0JMHg2M2QxOGRlNywgMHhlZDBmZjZlYywgMHg0ZjI4Mzk4ZCwgMHhlMmI3YmU1NiwgMHhmMGRmY2FkMywgMHg3NWJjNTQ2ZiwKLQkweGMxNmIyOGM4LCAweGQ3M2Q0NzVmLCAweGUzNjdkNjI3LCAweGY4NjQ4Zjc5LCAweDJlNDljYjA3LCAweGI3MmU1NTZiLAotCTB4Y2FiMjNiYjUsIDB4NTVhZTVmZDAsIDB4NzE4ZDg1MjMsIDB4NzkwMThhZmMsIDB4MGYzNDRiMGUsIDB4M2E3NDU2ODYsCi0JMHhkNWI4MGRkMiwgMHgxMzdjZDc0NCwgMHg2NWZiM2Q5YywgMHg2NTFlYmYxYSwgMHhmZmRmZjQxNywgMHhiMmRmMTU2NSwKLQkweDFjODgzZWExLCAweDFjNzViOWNjLCAweGM4N2ZlM2MyLCAweGE1NzRmMDg2LCAweGQzZGJmYWQzLCAweDcxZjg2MzM0LAotCTB4NDE1N2YxMDUsIDB4NzM0ZDQ3ZTUsIDB4MTRkMTNjYTgsIDB4NTM3OGYyYTAsIDB4MzQxZjk1MTUsIDB4NmQxOTUyMzUsCi0JMHg3YmU1NDY1YSwgMHhkZjJhNDE0ZCwgMHhmMmE3NmE2ZCwgMHg1NDFkNGRiNywgMHg0MzVhNmIxZSwgMHg0MjlhNmZlNSwKLQkweGY5MzZmNjU0LCAweDJiZjAxY2E5LCAweDI2OTkzZDBjLCAweGZmNjE0YWVjLCAweGY1NDEwYWMzLCAweDMyMmU2MmQzLAotCTB4ZjI0ZGRkZmMsIDB4Nzk0NGNiZTgsIDB4NWU3ZGFkM2MsIDB4ZTlmMzc2ODgsIDB4NzJjNjBlNjMsIDB4Y2FjYmUzMTMsCi0JMHhjYWYxMDkwZiwgMHg1NDU3NjRmYywgMHg0YzM5NDA4NiwgMHg5NWRlZmExYywgMHhiMmU0ZTljNCwgMHhmNDBjMTliMSwKLQkweGZkOTc2M2M2LCAweDg4YmYzN2MwLCAweDg2MWIwYWVhLCAweGIzN2M4N2RmLCAweDA1ZmE3MWRjLCAweDc1ZTkxNWRmLAotCTB4N2YzMTNhMjEsIDB4YTA2Y2YxN2YsIDB4ZmVlNzg5YzcsIDB4ZWRmYjA0YmQsIDB4ZDcwYTc1YzEsIDB4YWQzMjgzY2IsCi0JMHhjMWIyMmM5NywgMHhjMThhZjQ4NywgMHhmZDNmYWQxYiwgMHhiZTVlODUzYiwgMHhhNTRlZmUwMCwgMHhjZWViZjgxYiwKLQkweGQ4YmI3ZjQxLCAweGE3ZmY1M2E2LCAweDQxNGMxZDNiLCAweDBlNDllZTNjLCAweGY0ZWFhODYxLCAweDVjMWUwZGUxLAotCTB4ZGE2NDk2ZWYsIDB4ZjA3MWUzZjQsIDB4ZTE3NTk0NjAsIDB4NWQ4YjVkNWMsIDB4ZjVjY2JhMjcsIDB4MGNkMjFkZDMsCi0JMHhhNmYyYmYxZSwgMHhkNjdjODZkYywgMHgwYmM3ZWJhNCwgMHg1NDk5ZmU5MCwgMHhjOTJjZmQxYSwgMHhlNGUzZjU1NCwKLQkweDNhZjg4NzFmLCAweGY4OTUzNWI1LCAweDZhMzZmYzE0LCAweDQ3MGQxZmY3LCAweGUxMDY3ZWEyLCAweDg3YmY2NGU4LAotCTB4YzkxN2M5ZWYsIDB4MzM3ZWYyZmYsIDB4NzE0NGZlNTMsIDB4ZmVjN2I2MjYsIDB4MGVlN2FlMzksIDB4ZjkxY2VmZjgsCi0JMHg4ZGQ1MGFmNywgMHg3MmMyMWI3ZSwgMHgzZTM1NzFkMCwgMHgwZjFhNmFkZiwgMHgzZTFhZjNiZSwgMHhmM2JjYjlmMSwKLQkweDRlYzJhYmYxLCAweGJkZjlmOGM0LCAweDcxZjkwNjM4LCAweGY3YWNkZDJlLCAweDg2ZjU0ZDUzLCAweGI0ZGQyY2FlLAotCTB4MjAxZmUwMGUsIDB4NTI0YWFjZjcsIDB4MDU2YTVmOTAsIDB4NWEyOWY0ZjcsIDB4MWRmMDA0YmIsIDB4MmU4OTc5YjEsCi0JMHg1NzZmMTIwZCwgMHgwMWFhOGNlNywgMHhjYjRkZjIyZiwgMHhiMTdiZDcxZCwgMHgyZjFhODc2NSwgMHhlOWIyNzE2ZSwKLQkweDEyNTE1N2IwLCAweDlmMjM1ZmMzLCAweDhlMjJhODdlLCAweDhkMWMzZjlkLCAweDM2OGJkNDI3LCAweDY3MzM0ZjZlLAotCTB4MjRmZTgzZDAsIDB4NjY3YTBjY2IsIDB4NmQzNDA5YmIsIDB4MDdlNDNmMDAsIDB4NzUzMTM4YzEsIDB4MjFjNTlmYTMsCi0JMHg3NWJjN2Y3YiwgMHhlZGM2YzdiMiwgMHgwNWI4ZWI2NCwgMHhmODUxNzRiMiwgMHhiNDdhZGZhYiwgMHhjNTZkZTcxYywKLQkweGE3ZDc3ZDYzLCAweDBiZTQ4MDZhLCAweDg4MzI1N2ZlLCAweDQ3YmYwMzQ3LCAweDMyMDUxNTZjLCAweGU1YmQ1ZmY0LAotCTB4M2YyN2IyN2QsIDB4MWYwYjA3YjIsIDB4MWFkZThmMzksIDB4Nzk5NmJmMGEsIDB4ZGU2NjM5MjIsIDB4ZTM4ZGQ2NDEsCi0JMHg1YTcxMTdjYywgMHhkZjNiZWZlMCwgMHhlM2YxNzU4MSwgMHhlMzBjZWNkNywgMHhiNDJjZWNmMCwgMHg4MzAzODE4YSwKLQkweDNmYTgzNjRjLCAweDNiZjM2YTIwLCAweGZiM2UyODZiLCAweDQxZGI4ZGIxLCAweDA3ODU1ODBiLCAweGQ2MmFjMjlkLAotCTB4ZTA3NjgyNTEsIDB4ODE5YjY2MjksIDB4ZGVjNTNhNzgsIDB4YTE4YzRjZjAsIDB4MjU1OTBjZDMsIDB4NmVkMDNjZmEsCi0JMHg3ZWMwNDNiNiwgMHhhZDE3ZDUzNSwgMHhkOTJiZDczMSwgMHgzM2Q0MGNlYywgMHgyY2VkYWI5NSwgMHg0Y2ZjZDEyNCwKLQkweDNhYzhhN2VmLCAweDM1ODhiYmY1LCAweGI5ZjVjMGFlLCAweGRmZTNjZWM1LCAweDhjYTY3NWYzLCAweDVlZWFmODAyLAotCTB4ZTMwNGJlN2UsIDB4ZGNjOGI3ZTIsIDB4MWJlMjMwOGYsIDB4Zjg3MTg3OGIsIDB4NTRlYmMzYWIsIDB4N2RmZmJjM2YsCi0JMHhhZTNiYzRlNywgMHg2ODdkZjg2NywgMHhjMTBmYWUwNSwgMHg5MzZmOTI5ZCwgMHhiZjdlMjg3NywgMHg3ODU2ZmMyYywKLQkweDQ4N2JmNThkLCAweDUxYzA0NTljLCAweDFiOGE0NWI3LCAweGYwNTdiZDM3LCAweDNmOGZjMWI3LCAweGVjMzZmMzEyLAotCTB4MWViMTk3ZmEsIDB4Y2EzN2Y3NjMsIDB4MzMyYWFlMjIsIDB4NGE3ZWU5MTksIDB4Mjk2ZDA2NzcsIDB4ZWZlMjllZjQsCi0JMHg1ZjBlMWRjMSwgMHhhY2VmY2MwYiwgMHhmMjI5NjJhZCwgMHhjNTBmZDgxNywgMHg1OWRkYTYyYywgMHhmNzllODA1YiwKLQkweGQyNTdhZjQ4LCAweGExMTI5OWJlLCAweDdiNTgxMDdkLCAweDM1N2RkODk0LCAweDhjNTNjOTM5LCAweDgzMzc2MzcxLAotCTB4ZjcxZjM1ZjUsIDB4MjQxNDgyZDUsIDB4OWFhZWUxNTgsIDB4NmUzMThhYzksIDB4ZmEwMGZhMGQsIDB4N2U1M2QyN2IsCi0JMHg0YmJhODI1OCwgMHg5ZmQ4NjRlYiwgMHg5NzFjZDMyMywgMHhmNWNkNzk3NywgMHhmNzAzZmMwNiwgMHg4YTMyYzY3ZCwKLQkweDU1OGYyNTFmLCAweDMwOGM3ODJjLCAweDlmNmUxZmQ0LCAweGU0MmZiZTI1LCAweDFmMTNkZTExLCAweGExYzU4ODdiLAotCTB4YjkxMTZhNzQsIDB4ZTk0NjE5MTgsIDB4ZjI5N2YwMTksIDB4ZjBlMzVmZDAsIDB4ZGEwMDdjNTMsIDB4ZmI3OWQ1MmYsCi0JMHg1ZjA3MTE3YSwgMHg4OGQ5NzZmYSwgMHg5Nzg5ZTc2MSwgMHgxNTgxOWMzNSwgMHhkZDRjNzg2OCwgMHg1MTlmZDM4OCwKLQkweDI1ZTI2ODU4LCAweGFjMmY1NWU4LCAweGY1N2EzMWI2LCAweDA3ZTA1YjY1LCAweGEzZDQwZjQ4LCAweGUzMDQ5ZjA4LAotCTB4MDRmODYyMDQsIDB4NTYzZDU3MWMsIDB4Zjg1YTBmY2UsIDB4MjM4NjZmZTEsIDB4ZmJmNDk5OGQsIDB4ZTVlMDViMTEsCi0JMHhjZGZjNzA3OCwgMHhlOTBlNjdmZCwgMHg2ODdmZTBmZiwgMHhmYTQzMDVmZiwgMHhmZWJjNzVmZiwgMHhiNmRlNWVlYiwKLQkweDU0ZmMwODJiLCAweDNkYTdlM2ZkLCAweDYzZWNjY2MwLCAweDA3YzMyM2E1LCAweGQ0ZGRhZjc0LCAweGZjYjk0MWU2LAotCTB4OTA3YTA5NDgsIDB4NjQ4NzFmYWUsIDB4ZjJiM2Y3ZGEsIDB4ZTQzMTVkODEsIDB4MjU0OWFmZDMsIDB4NDdjNDNmYzQsCi0JMHhlMjdjNWYyNywgMHgzZWI3YjQ2NiwgMHhjOWQ3NjRkZiwgMHg4OGUyZGZiZiwgMHhlYjI5ODAzOCwgMHhmOTczMTczYiwKLQkweDlmNzhlMmQ4LCAweDhhN2U1N2Q3LCAweDY1ZDBkOWZjLCAweDliZDUxN2Q2LCAweGQyZjBjZTlmLCAweGZlMTQxNWZhLAotCTB4ODdmYzg0NmYsIDB4Mjg3ZjhkZmEsIDB4ODFhYzdiNDcsIDB4YjNkZTkzZjUsIDB4OWZlMzg3N2UsIDB4YzJmNjQ2MTksCi0JMHhlODY1MzUzYywgMHhhZWJmNjM3YiwgMHhhMWE1ZTA0MSwgMHg2NTRmODlmMywgMHhmOTI4OTYxMiwgMHg1NWY2ZDY4YiwKLQkweDVjZjgwZmMyLCAweDkzNjdmYjE2LCAweDMzZTQ2NGQ5LCAweGM0MmMxZjAzLCAweGU1ZjkwMGZkLCAweDhlMzE4YmU3LAotCTB4MzVmMWIzZDMsIDB4Y2IxNDU0OGYsIDB4OWRlZjVjOWYsIDB4ZmRmMDNmMGUsIDB4Y2IxMzdhOWYsIDB4YzVlODJmNTMsCi0JMHhiMGRiN2I1OCwgMHhjMjVkYmNlZiwgMHhjYmMzZDk3ZiwgMHg4M2M0N2I1YSwgMHg3NWRhZmQ3MSwgMHgxZTEwNWY3NiwKLQkweGYwZGI2ZWQ3LCAweGFlMzBlNzgzLCAweDc3YzNiNmYyLCAweGIzNWZmNDE5LCAweDVjZGZkNWVkLCAweGVkOWFmNTA3LAotCTB4N2M5OWI0ZjYsIDB4MzE5NDlhMWEsIDB4ZjgwNjk3NDgsIDB4NDE4NGQ5NmYsIDB4ZTRmZjU0M2EsIDB4OGUzYmQ1NTUsCi0JMHhkODc0N2YzZiwgMHhiNjZhM2QyMCwgMHhiOGQ5NTdlZiwgMHgxYTk4ZjhhMSwgMHhiNTQ2YWZkZSwgMHhiZjA5NzQzOCwKLQkweDg2N2U4ZTVmLCAweDJhMTdmMmZjLCAweDdkZTNmZGQyLCAweDFiOTExYjEyLCAweDVlZWI5ZjA3LCAweGYxMTk3YjI1LAotCTB4NzQxNDc0NDQsIDB4YTU5YmEwMWEsIDB4MDVkMDAzN2QsIDB4Mjc0MWFiZjUsIDB4NDI2M2ZiZWIsIDB4NmYzZmIxZGUsCi0JMHg0YmYzZjExMSwgMHg5MDdkYzUzZiwgMHgzODdjM2FkZiwgMHhiZTk3YWFmZiwgMHg3Yzc5YzFlOSwgMHhiZTcyMzRhOCwKLQkweGMzMmRiZTdlLCAweGQ5NTZlMzBmLCAweDk1M2ExOTgzLCAweDBiZDU3OWZjLCAweDViN2UyMmRmLCAweDE5NWJmNDc0LAotCTB4ZmU2MGJmMTQsIDB4MGFkOTFiMmMsIDB4ZGY5YzJjYzEsIDB4ZDNiN2I1YzIsIDB4ODA1OTJhZmMsIDB4NzllYWFlZjgsCi0JMHhhYmQ3MDJiOSwgMHg2MzM2MTRjZiwgMHg3OGI5MWM3YiwgMHg4N2M1Yzg0NCwgMHg4MGYxYzFlYiwgMHgwYjg4N2RmOSwKLQkweGJjMGJlZTA3LCAweDA2ZGU1MzIxLCAweDdjNTIwZjYzLCAweDdlYzY1YmU0LCAweGY1NDI1YjBlLCAweDRlOWM5Y2NmLAotCTB4ZWZjMzE1YjMsIDB4OTYyNzk1ODUsIDB4ZWNhZTM3NWYsIDB4MWM5Y2ZhNDYsIDB4NzE4MTFmZWQsIDB4MDRhNjA2ZGYsCi0JMHg3M2E0M2UwNSwgMHg3NDdjYWZkMCwgMHgxZjRlMDhmYSwgMHhjNDRhNTVlNiwgMHhhN2VmYTA3NywgMHhkZjZjNzNlMiwKLQkweDhhYmJmNzZkLCAweDczYjFkZjRkLCAweDJmZTM4M2I5LCAweGRjMDNlMzE1LCAweDdlY2Y2ODQ5LCAweDFmN2YxMTk4LAotCTB4YWM2MmIzN2YsIDB4YzU1NzYwMzcsIDB4N2M4YzU3ZjAsIDB4ZjhkZjc5NzMsIDB4NDM2Zjk3MTgsIDB4NjZiMzQzZGUsCi0JMHhiZDNmZmJlMCwgMHhiZjA3ZTVjOSwgMHhlMDA1N2I0MywgMHhmN2EwOGM4YSwgMHg0ODkzNmZmYiwgMHgyNDU4MzgxZiwKLQkweGI0NmY1YzllLCAweGJmMzZiOTBiLCAweGUwMDRmODM3LCAweDFkZGQ3MDU2LCAweDdmZWMxN2UwLCAweGVjOWZlMTE4LAotCTB4ZjBkNWNhZDgsIDB4NmNiZThjNWQsIDB4NDMzY2YxYzAsIDB4NzZlNDMzZmIsIDB4ODdmZjkwOTEsIDB4YjNmY2IzMTQsCi0JMHgxM2VlNWNiNSwgMHhjMjQxMWJmYiwgMHhmNDNkYWQ0ZiwgMHg1ZTUwZTc4MywgMHgxZjcxM2U0MSwgMHhiZDliNzZiYSwKLQkweGM5ZmRlNzAyLCAweGI5YmY4M2Q2LCAweDkzZTRlNDFiLCAweDY2YTcyMWIwLCAweGQzOTU2OWZkLCAweGIwZDcxZGFhLAotCTB4MDlmYTcyNzgsIDB4OTNjNDEzYTYsIDB4NTcxZTc4NTMsIDB4ZjEyOGI1NGUsIDB4ZmU5NTdmZjEsIDB4ODJmN2YwMzQsCi0JMHgzZTg2N2YwNSwgMHhhYjQ3ODQ0YywgMHhmMTVlYmMzZSwgMHhmYWFkM2UxMiwgMHhjOWJkZmUxMCwgMHg5ZmYyODY0YSwKLQkweGJmMDY3N2MxLCAweDZlYThmZjU1LCAweDAxOWRlYTBjLCAweDZlZjgzNGJlLCAweGJlMGQyZjgwLCAweDM0MmYxMjFiLAotCTB4M2U4ODZmZTEsIDB4ZjAwY2Q4YzMsIDB4N2ZlZWM1NDksIDB4OTlmY2M3MmQsIDB4NWY3YzNkZGEsIDB4ODQzYmJlMTQsCi0JMHg5ZjkzYzA3NSwgMHg4NzFkNjFiYiwgMHhkNmM1YTU0NiwgMHhkODdhOTY0MywgMHhhOTZmZGVkMiwgMHgwN2RhNTg1NywKLQkweDRiNDZmNTJjLCAweDBiZjcxMGZiLCAweDNjYWEwZWJiLCAweDZhNjIyNTRmLCAweDgyY2U1ZjZmLCAweGVmNTM4YzZlLAotCTB4ZDIxZTI5OTUsIDB4YzBhZjMwMDcsIDB4YjlhZGE0YmMsIDB4Njg2M2NjMjEsIDB4NTMzOGYxNzMsIDB4MDJiYWJhN2YsCi0JMHhkZTlmNTdmNSwgMHhiMDdiNDFlZiwgMHg3M2UzYzVkZiwgMHg5ZWZkMTU3ZCwgMHhlYzNiMThkNCwgMHhlOTMyM2RmZCwKLQkweGNkODg2OGRmLCAweDgyMmZlNzg4LCAweDhiZjQ0MTg3LCAweDc5ZWY0NGIyLCAweGFjYmE3ZGRjLCAweGY4YzMyY2U1LAotCTB4YzNlYzg3NGEsIDB4ZTY4MmNkOTAsIDB4ZGZiODNkM2IsIDB4ZmYyN2I3ZGYsIDB4N2NmMDM5OTYsIDB4YjY5OTExZTEsCi0JMHhmZWQwZmFmMywgMHhmYjM0NDE0ZSwgMHgzZjE4YWM5NSwgMHg3YzE2MjNlZCwgMHhhMzhjMDZlNiwgMHhkYWZlZTFlZiwKLQkweGJiMTY1NTgyLCAweGJlMjJhZDgyLCAweGFhOTZkNGE4LCAweGJmYzExN2E4LCAweDhmYmNjMGZhLCAweDVhYmJmOWMwLAotCTB4ZDZiNTU3ZjQsIDB4ZGVmOGRlZmMsIDB4MzdhYmUzZjAsIDB4ODQwN2RmOWEsIDB4ZjkxNjdmZGYsIDB4ZjFkMmVkMWQsCi0JMHhiYmY3M2M2YywgMHgwOTM3OGYxOSwgMHgyZTVkM2FmZCwgMHhlMDBlNjViYSwgMHhjY2IwZWZiZiwgMHhlZjRlNWY5MCwKLQkweGE3ZmYwOTkxLCAweDczN2RmMmI3LCAweDhiNWY5ZjhhLCAweDdhNGZkYTdjLCAweDBmNTNjMGNkLCAweDU4OWE4NWNhLAotCTB4ZmNlY2Y0ZWYsIDB4ZDAyM2M5NWQsIDB4M2JkNzc2YTQsIDB4NjUwNGZmYzUsIDB4MGJiN2FlY2YsIDB4OTdmNTg2N2YsCi0JMHg4Nzc5Y2FkZiwgMHg3NTNmNmQwZCwgMHgyYmY2OGI5ZiwgMHg2OWI5ZjZmYSwgMHhlZjZmYjE3ZiwgMHhjMTFlNzMyZiwKLQkweDhmODc2ZWZhLCAweGZkZjZmZWYyLCAweGE3ZjkxOGI5LCAweDBhYTNiOTZmLCAweDY4ZGY1NmY1LCAweGVjYjY2N2VlLAotCTB4OTQ3MTczZmQsIDB4YTI1NmM5ZDYsIDB4ZWU3NmU1ZGIsIDB4ZjNkZTllZTcsIDB4Njk0OWVmZWYsIDB4NzBhY2MyNTgsCi0JMHg0Yzk3ZGZmZCwgMHg5Zjg2Yjc3MSwgMHhkNjVlMjhiYSwgMHgyNWNmZjdiNywgMHhhNWZiZjZiMSwgMHhlYzVlYTdjZSwKLQkweGQ5YjlmNjIzLCAweDVmMDgxZDljLCAweDY5N2ZkZjJhLCAweDFiYjVkOWY4LCAweGEyMGYzMTlhLCAweDAwZmFiZjczLAotCTB4Y2ZmYTlmYmMsIDB4M2VhMzE0NWYsIDB4ZWRjMWRiZWMsIDB4ZjQ3YjVlOWEsIDB4OWIyN2RjMDUsIDB4Yjk2MmI2ZDAsCi0JMHg4YmQ1ZTgxZCwgMHg2NGZiODE0MiwgMHgwYjJmM2Y2ZCwgMHhmMmYwZjE2YSwgMHgyZjAxYzUwNSwgMHg4ZjdmMWYxNiwKLQkweDlmZmY0OGY4LCAweGY2ODkwZjgwLCAweGI4Zjc2YmJmLCAweGU3MDk0ZTQzLCAweGRlZjc5N2ZkLCAweGNmYjAzZDQxLAotCTB4Y2M2OTdjNDEsIDB4MzM3MDkzZjcsIDB4OWExNzFkZDksIDB4NmU1N2Q1NzcsIDB4NjJlNDUyZGUsIDB4YmZmMmJkZTYsCi0JMHhlZGJiZmYzOSwgMHgyYWNmODI1ZSwgMHg3Y2Y5NDMwNywgMHhkZjU0NDNlZiwgMHhiYzExZjZlNiwgMHg5YmVmYzkxNywKLQkweGRmNzQ2YWJmLCAweDVjZjc3NDAxLCAweGZlODdkZTc4LCAweGM4ZmRkMmM3LCAweDNhZWU4MjdkLCAweGZjMzQ5OWU2LAotCTB4ZGYwNDE3ZjMsIDB4Mjc3M2Q1OTcsIDB4M2RkMzliZmUsIDB4ZmIwZGZjZDEsIDB4YWY5YjcxZmMsIDB4NmNlMzBmMjMsCi0JMHgzYWMzZmQ2OCwgMHhiNzY3YjlhZCwgMHhmMWVmZDg2MywgMHhiNDc1YjNiMSwgMHgyZmIxNjUxNywgMHg4NDZmODU2OSwKLQkweDE5MWZmZGNhLCAweDVlMzEyN2Y3LCAweDNjODk5YTM3LCAweGQxMGZlZTZkLCAweGFkMGMxZDk2LCAweDhmNjQ5NTY4LAotCTB4NmUwYWRhMmEsIDB4NmViZTJiMjcsIDB4ZjFlNWUwM2YsIDB4MjhmYmU3MmIsIDB4Mzg0ZDg3ODcsIDB4ZjY3YWMwMTYsCi0JMHg0MzhhM2UwZCwgMHg1NmMyZmM1YiwgMHhiMDI1Zjk4OSwgMHg2ZjJiOTU1MywgMHg4YTdlOGMzYywgMHhlMjJkYWM3ZCwKLQkweDdkZjJhNjI4LCAweGY4OGE1NzJjLCAweDRkNTc1ZGEyLCAweDY0NTY4YmZlLCAweGU2YmNiYmFlLCAweGU3ZjQ0M2JhLAotCTB4Njc3ZTFjNjQsIDB4OWM2MTBiMjYsIDB4ODBlMmJlNTksIDB4ZjI2NWY5OGUsIDB4NTA0OTg1NzgsIDB4MjA4ZWIxNzcsCi0JMHg0YzhlMDlmYSwgMHhjNDdmZjdmMywgMHhiODk4ZDM2NCwgMHgxMWViZGEyYywgMHhiZTdmZDdiMCwgMHgwN2M1MDM3NSwKLQkweGZlZjhiZDRlLCAweGNkNmZkOGNkLCAweDA0ZTY2NGNmLCAweDc1NmVmNGJjLCAweDhkZjIwOGIzLCAweGZmZDE1MjEyLAotCTB4ZmQ5NGVlYTgsIDB4NTIzYzhmM2MsIDB4M2VjYzZiNzIsIDB4ZDYyNzYxYTAsIDB4NzA0ZGQ4ZmMsIDB4ODQ3MGVmNTUsCi0JMHhkNWY3YzI2NiwgMHg0YzVmN2ViYiwgMHg3ZWYyZjZlYiwgMHgyZjgzNjNiMiwgMHgzZDRmM2M0YSwgMHg3ZGM2MmQxOCwKLQkweDBlNzE2YWJlLCAweGYxYTc0YWMwLCAweGY3N2Y4ZjJhLCAweDgzOWU0ZWVjLCAweDg1YjRiYWZlLCAweDg3NTY0OWU3LAotCTB4NjIzYmI0ZWYsIDB4YWFjNjRiZjIsIDB4ZjExZGEzNzYsIDB4MTI4N2YwNTEsIDB4N2MyMGE5ZTUsIDB4ODY3OWY5YjEsCi0JMHg0M2YzZGE5ZCwgMHg2NWQ3YzM4OSwgMHg2NWJlNjEwZiwgMHhiZGVkOTZmNSwgMHgzZWE4NzcxOCwgMHhkOWExZjBlNiwKLQkweDUzZTViMGQ3LCAweGZkNGY2YjhhLCAweDk0NGYzNmYxLCAweGU0ZDkyY2ZjLCAweGY3ZjEwZTc3LCAweGQ3NDRjOGI2LAotCTB4YjIzYWNlZmEsIDB4ZjQ0ZWExNWIsIDB4OGZjNzBmYWQsIDB4MmZjODVjN2IsIDB4ZGVmMWY5YTksIDB4NjE0MDQxNWQsCi0JMHg3YjM2NGZjZCwgMHhiMjcxYWUzMCwgMHhmYzg3OTM3YiwgMHg4ZmU3MmRiZSwgMHhlZmYxMGNiNywgMHhkNzlkOGZjMiwKLQkweDdmODkzYmJmLCAweGI3NzRmZDgwLCAweGI3OGZmMTZhLCAweDE1ZmIyNzBjLCAweGI3ODkyYmUwLCAweDRkZjA2NWRmLAotCTB4NWVjZmI2Y2QsIDB4Y2Y2M2Y4YzAsIDB4NDA1ZTRmOGUsIDB4ZmFmZjZiNzgsIDB4ZmVkMDE3YzcsIDB4M2E1Y2ZiNjQsCi0JMHhiYzM0NDNlZSwgMHhiZjE0YWZmOCwgMHgyYTViYmUzMSwgMHg4N2Y3YWVlNCwgMHhkNWVlMjk5YiwgMHhmNjM1N2UwYiwKLQkweGMzZjdiYmQ2LCAweDdhM2ZmNDFjLCAweDAzMjVmZmI3LCAweDdiYTVlNGZkLCAweGY5YzA4ZmE3LCAweDc1MzlkZDJlLAotCTB4YmYyMzhiMDQsIDB4MWI3Yzg5NDYsIDB4OWJiODg4YmEsIDB4M2IwNzVlOTUsIDB4N2M5ZDkyMGYsIDB4N2U4ZGU4MGEsCi0JMHgxZWJmODBjYSwgMHgwZmYxZTNhZSwgMHhiN2QzZjBhZiwgMHgwZTZmOGZjNiwgMHg2ZjNiY2JmMSwgMHg5MzZiZTViZCwKLQkweDUwZmJiNGIwLCAweDNmZDA1YzBkLCAweDc4ZTgxMzdmLCAweDZmZDA0NWY1LCAweDVmYzI2M2ViLCAweDUzYmY0Zjg5LAotCTB4ZTlkMDA3ZjgsIDB4NTdmMGFhYmIsIDB4ZWIzZWZkMDQsIDB4ZTdmZGY4NWMsIDB4ZjBlNzVkZjAsIDB4ZTQ3OWZlODQsCi0JMHhjNDY2ZjAyMiwgMHhmZDU3ZWY0ZiwgMHgzNzI4YWJjZiwgMHhmMTQ0N2UzYiwgMHg0Y2RiYTQxMCwgMHhiNmVmNjg5OCwKLQkweGVlMzA3MmNmLCAweGZmYmQ5MWZjLCAweGVmNTc5ZTNlLCAweGFkMWZkMWQwLCAweGM5MTZmYmRlLCAweGEzY2VlZjRmLAotCTB4MjI2NDlmMTQsIDB4MDZjYmQ5OGUsIDB4OTNiOGYxZmUsIDB4ZDg2Yjg1YzgsIDB4YmQ3ZWU2ZTgsIDB4ZmRmYTNmYzAsCi0JMHgxNzNkMGY1ZSwgMHg2M2U3M2RmZSwgMHhlNDRmZWZjMywgMHhmMmE5YmZlZiwgMHhhZTIzMDIzYywgMHgxZGYxYjc1YiwKLQkweGQyMGYzZmUxLCAweDc0ODI5YTRiLCAweDcxYmNmZjdhLCAweDNhMGYwMzY4LCAweDZjNzI2MWUyLCAweDVjN2UyYWZjLAotCTB4MjljZTIwNjUsIDB4YWRjNDY1ZTgsIDB4NTA1M2UyMDYsIDB4NDU3OGM2Y2YsIDB4YzU4YjdhNDgsIDB4ZWJiZDA3ZDEsCi0JMHhkN2FiZGM3OCwgMHgxOTlmY2U2ZSwgMHg2NzhmMGZhNCwgMHhhNzJhZGFmZCwgMHg2MzhiOGJhMSwgMHgyZmZlMDg1ZCwKLQkweGVhODg5ZjhiLCAweDBjNzNjNTM1LCAweDhkOWNmNTNjLCAweGFiNGZjN2FmLCAweDM3ZmE5ZTNjLCAweDkwMmM4N2VmLAotCTB4OWYyMWZiYWMsIDB4NzVkNjNmMjIsIDB4ZjNmMmFmYmUsIDB4Y2JiY2ZjMDQsIDB4YzhiN2JlYzAsIDB4NTE3OWViZjcsCi0JMHg4YWM4NzhhNiwgMHhlM2QyNDFmMCwgMHhlYzYxN2Q1NiwgMHg1NWUxNTk5NywgMHhkNTRmNWMxYywgMHhhMjc1ZjE3NywKLQkweGE0M2I4NzY3LCAweDA3M2QzZjQxLCAweGQ3M2YxMzc2LCAweDQ1NWY3ZDZmLCAweDk2ZDBmMzNmLCAweDllZGNhODlmLAotCTB4ZWI4M2YyZTIsIDB4ZmUwNjI4NDQsIDB4MTdmNjk3OWUsIDB4Y2YxZDc4ZjMsIDB4MzM4ZWI2M2YsIDB4ZDJmMWMxY2MsCi0JMHgzOGZlMjdiMCwgMHgzNTNmNWIwZCwgMHgwYzEzNTM4ZCwgMHhmMzdmM2NhYiwgMHg1NDlkZTNmYywgMHg3ZjYyNzdmYywKLQkweDBjZWRiYjI3LCAweDg2NGVmM2YzLCAweGY2ZjExOWU1LCAweGViMTMzZjY3LCAweDAzNWU3MWE2LCAweGIzY2E0YmQ3LAotCTB4MzNjZmNhM2UsIDB4ODkyMzdhNGMsIDB4MWU5Nzk4ZjIsIDB4OWUwZWYxOWQsIDB4ZTIwYTViOGIsIDB4Njc2MGY2OGMsCi0JMHhjZWQzZTczMywgMHg0MjhmZjA3ZiwgMHhiZDFlNzc3YSwgMHg2YTc1YzY1YiwgMHhjNjM3ZTIxNywgMHhiMzc5MmMyZSwKLQkweGY0MWJhYTcxLCAweDE1YmJjOTQyLCAweGFkNWQ5MDkzLCAweDMxZjI2NmZhLCAweDE4N2UwOTliLCAweDAzYWUwNDY3LAotCTB4OWUwZmQwYWQsIDB4MjdmY2MwMmYsIDB4OTRmNjQ3ODQsIDB4NjQ3ODQwY2YsIDB4ZTJiYmE2ZGQsIDB4YjVkYTk1ZTQsCi0JMHgzNmYzY2EwYSwgMHhlNmViYjVmYSwgMHg3Njc2NmUzYywgMHhlOWZiMTdhMiwgMHgwYmM4YzJiZCwgMHgzYzQxNDhhYSwKLQkweDNiN2RkNjdkLCAweDI5MTU5ZDJmLCAweDk5ZDY3OWZhLCAweGVjYmU4NDhmLCAweGVmMDFmMjY5LCAweDU4MTY3M2YzLAotCTB4YmRmOTEwNmYsIDB4ZDIwZTdiNTUsIDB4YjBhYWEyYjksIDB4YWY4MGJjYzQsIDB4ZTQ4M2FjYzUsIDB4YWE0NzY2ZTYsCi0JMHhkYjMzNWJjOCwgMHhmZTdiZDUwZiwgMHg3NzU3ZGE4NSwgMHgyYzM1ZjZmMiwgMHgzY2YxZWQ0YywgMHgxZjI0YzQ0NiwKLQkweDA3NzYyZDEzLCAweDkxM2VlZmU3LCAweGE2N2I1MWQ3LCAweGY2NjI0NTg0LCAweDdjMTNlZjcxLCAweDliYTRkM2RiLAotCTB4YzIyZDdiZjQsIDB4YTkzOWUxYTcsIDB4MmVhNzFhNmUsIDB4OGUzNGRjM2MsIDB4Y2NlZWFlZDEsIDB4OTMxMjJjNzUsCi0JMHg3NGE3NTQ3ZiwgMHg5ZGQ1YmYxMywgMHg2NzFhM2JmOSwgMHgzMjlhYmU0MCwgMHhmYjg5MGYwOSwgMHg3YjgyNjUxZiwKLQkweDI2MjlmZmIwLCAweGJmZmIwNzc4LCAweGU2YjVjNjgxLCAweGU2Y2U2Njc3LCAweDViYWNjMjcxLCAweGNlMzQxOTc5LAotCTB4ODUyNjU0YmQsIDB4Yjc2ZjAwNWEsIDB4MGUyNTgxNmIsIDB4NWVlOTlmNjgsIDB4YzMyYWZiOWQsIDB4Mjg1MzU2ZjMsCi0JMHg4NzYxZmEzZiwgMHg4Y2RlNTBhNCwgMHg0YTc1OWYzOCwgMHg1ODM2ODJkNywgMHhkNmQzOWY2ZiwgMHhhMzAzNzUzZiwKLQkweDcwN2Y4MTNjLCAweDI3OTMxMzVjLCAweDNlNzQyMmMwLCAweGU0Mzc2OGQzLCAweDIwOGYyNWJkLCAweDE1MDEzZjFiLAotCTB4ZjJmODBiMjgsIDB4NjhjMTFlNDUsIDB4YjRmM2E1MTYsIDB4M2NmY2RkNmIsIDB4Y2QyZDE4ZTAsIDB4MTA2ZmRmODYsCi0JMHhkZTcxYmU3NiwgMHg0MGY5Yzg2ZiwgMHgwYmMwYjljYiwgMHg5YjRjMDc5ZCwgMHgxOGUwZmE1YSwgMHgzOTZmNjMxZiwKLQkweDc5OGE5ZDNlLCAweDk2Nzc2OWUyLCAweDgzYTUxZjZlLCAweGE2NTJjMWRmLCAweGU5NzM3ZDUxLCAweDk3YTgyY2Y4LAotCTB4ZjVlMTZmYjUsIDB4Y2Y4ZTk3NWYsIDB4YWI5NTdhODEsIDB4MjQ2YmQ3OTMsIDB4YjM1ZmFiY2EsIDB4NjBiNGMxNzIsCi0JMHhlNWU4MjVkMSwgMHgyNTIzMDBkYiwgMHgxMWJjYmQyNiwgMHhlMmFhNzFlOSwgMHg3YTE2M2JkZCwgMHg1ZmExNGYzMSwKLQkweDE1NjVmOGU1LCAweDE0ZjQ2ZWQ4LCAweGVkNmNiNzhlLCAweGE3ODhlZGRkLCAweDMzNjhiNjMxLCAweGVmZWY5M2VhLAotCTB4ZWEyYTczZmQsIDB4MDlkMzJmNzEsIDB4ZDU2YjNhM2YsIDB4NjhmMDdlOTEsIDB4ZTRmM2I5Y2EsIDB4YzJmMzU5YzMsCi0JMHhhNWQ5ZmUwYywgMHgxYzIyNzYwNSwgMHhkMmM3ZjM2ZCwgMHhhYWU3YmMzOSwgMHgxZmQxMzgyNiwgMHg2Y2YyMjM1YywKLQkweDBmYzgxZDllLCAweDdlZjFlN2U0LCAweDc1ZmJlMGVlLCAweGViMGYyMjk5LCAweDI5YjlhM2Y0LCAweDBmYTNjZWMzLAotCTB4NWRiYjMyMWEsIDB4N2Q1YzBjNGEsIDB4YjNlZDNmNGEsIDB4ZmY3ZDlkZjcsIDB4YzQ5YmNjM2UsIDB4NzU5YzZhN2EsCi0JMHgzN2ZiZjA2NSwgMHg5M2M5MGE1ZCwgMHhlOTgxZmYzOSwgMHgwYjVmYzQ2OSwgMHhkZTIxN2YwNCwgMHhmODc5MzE5YywKLQkweGNhYTBlNDhiLCAweDg4NzRjM2NmLCAweDhlOWE2ZWY1LCAweGI1ODI5N2YzLCAweGJlYWJiOWYyLCAweDY4MTY5ZTNjLAotCTB4Y2Y5MGY3ODEsIDB4YmM4ODcxZGYsIDB4MzRiZTcxMWIsIDB4N2JlMzNjZTYsIDB4NzllYjQ3ODgsIDB4OGE4ZThkYzYsCi0JMHg1NTk3N2UyOCwgMHhlNTA3MjY3OSwgMHhhMjdjZTA2ZCwgMHhmNDg1OTFkNCwgMHg2NDc3OWViMywgMHg5ZTJkYmY0YSwKLQkweDljNWViMTFmLCAweGY3MDQ0Yzc3LCAweDNlODE5ZDhmLCAweDlmZWYzZjFjLCAweDgzMGUzYmJkLCAweDQwYmQ1ZmRjLAotCTB4ZTdjYTYxZjUsIDB4YTUyNmNiZDUsIDB4MjE1Y2ZjMmIsIDB4ODIwZDA1ZDksIDB4NWM2ZDMyYWYsIDB4MTg4N2IwM2YsCi0JMHgzOWY2ZDNlZCwgMHhlYmZhM2YyNCwgMHhjOWQ0ZGY3ZCwgMHgzMDVlYzgwZSwgMHhiZWU2ZmM5MywgMHhlNjMwZGNlNCwKLQkweGMyM2RmNTEzLCAweGZkODI5N2NmLCAweDhmN2NhMTIwLCAweDcxMTI5M2RlLCAweDNmM2U0ODc5LCAweGU3ZTdjOGI3LAotCTB4M2NjOTdiNjYsIDB4NmYzOWRmNmUsIDB4ZDNmYTk0NTcsIDB4Yzg2MDdmNDUsIDB4MGY5ZTBjNjcsIDB4ZmFmOTkzZWUsCi0JMHgyNWU0ZDdkZSwgMHhlMGIzNDYzOCwgMHgyZjEzYjQ3ZSwgMHhkMzhmM2M3NiwgMHhmMDE3ZmU3YywgMHhmMDYzM2JhZiwKLQkweDgxMWM3NDBmLCAweDQyNjczNGY1LCAweGM2NzA4ZTNhLCAweDFjZjVhM2ExLCAweDIwNDcxMWVhLCAweDU4N2RkYjFiLAotCTB4ODYwNTY4NzksIDB4NGZlN2FjNWUsIDB4NDJjYzEyOTksIDB4ZGJlOTU5M2MsIDB4NmIzYzc0YTAsIDB4ZWM2NjI5ODcsCi0JMHgxNmVjOTRmOSwgMHgyZjU3N2U4MywgMHhjMzJiYTVmMywgMHg4YjFjZjQ0ZCwgMHhlN2JkNWU3MCwgMHg2ZGMyMWI1MywKLQkweDUyN2JmMWQwLCAweDgyNzdiYjdjLCAweGQ2NjdhZjkzLCAweDQ0ZTYzMmYxLCAweGVkMzg4MTZkLCAweDUwOTU5NzhiLAotCTB4NDk5ZjgwN2YsIDB4OGY1Y2ZjMTYsIDB4MTRlMjlhZjMsIDB4ZmM1MGMyZWIsIDB4MmZlZDhmNWMsIDB4OGJmZTNmMDIsCi0JMHhjN2UxOGZjMSwgMHhhZTM5MDhkNSwgMHhhMDI3N2RjMSwgMHhiM2JjMWZmMywgMHhkYzYwZjIzMywgMHgzZTIzNTk3MiwKLQkweGE2NDliYzVkLCAweDlmYjQyZGI4LCAweDI4MzE5NTk5LCAweDZkYWY4YmY3LCAweDdlMDc2ZmRjLCAweDQ0YmNmYzU5LAotCTB4OWM0MGI0ZmMsIDB4OWM0NGZmMmYsIDB4ZWZlNmIxM2YsIDB4OTIwOWNlNTUsIDB4MWU3MGJkOWUsIDB4NDZmNDg4NWYsCi0JMHhmM2YzMTZjZCwgMHg3ZmMyOWRiYiwgMHhjYTFjYjM3NCwgMHg0N2Y3MTVjYiwgMHhhZDdmODJjOCwgMHgwOWFkM2ZmOCwKLQkweDZhOTA1ZWI5LCAweGM3YTU2NzZhLCAweDI5OWI0NmU4LCAweGVhNmIzYzBmLCAweGQ3ZTQzZjQwLCAweDZmYmNkYTY3LAotCTB4MTdlZGZjNTEsIDB4MjBmMTg2NzYsIDB4MjkzNjkyYmYsIDB4MjQ5OGY4ODIsIDB4NGI3ZWMzNGQsIDB4ZmQxOTdjODUsCi0JMHhiNjY2NTk4ZCwgMHhlNjgzNzJlYiwgMHhlZGY5NzlmMywgMHg5Nzc5ZjNlNiwgMHhiNTM0OGM3NSwgMHg5ZTRkN2NiZiwKLQkweGExMTVmZGU5LCAweGFmZWY0ZDJiLCAweDU0YzEzMmRhLCAweGNlYmUxNzFmLCAweGFlZWFmZWQ0LCAweDdjN2Q1MzMyLAotCTB4ZmI1MzQ2ZTQsIDB4OWI2Nzg3ODksIDB4ZGY3NGQ3ZWEsIDB4ZjkzZjZhNmQsIDB4ZmJkMzdjZDgsIDB4YTZkNWEzNmIsCi0JMHhiNDdmZDdmNywgMHg1YWZmNTRjNCwgMHhiNTMxZmZmZiwgMHhmYWU0MmM4ZiwgMHg2NjUzNDBlYiwgMHg3Yzk4ZjFmNiwKLQkweGFhMGYwM2UzLCAweDNmOWYxZDM2LCAweDhiZDM2ODU4LCAweGY4Njc5ZjYzLCAweDk2NThjNWJkLCAweDRlOWZkMWY4LAotCTB4M2FhNzY3YTQsIDB4ZDc2M2IyYjMsIDB4Mzc2NjUyZjcsIDB4NGVhOTlmZTksIDB4ZjA2NDNkNzMsIDB4MGJmMDBlNGIsCi0JMHg0NTkzN2YxMCwgMHg2ZGJjODBlZiwgMHhkNTE5Mzk0MSwgMHg5ODNiNDM3OCwgMHhlMmU0NmNhMSwgMHhhNzk0MTQ4MiwKLQkweGM1ZjlmMWE3LCAweDkyMzZkOWM5LCAweDlkMDhmYWIzLCAweDBlNzM4ZjhiLCAweDE3MzU2ZGZlLCAweGY3NDgyZWY5LAotCTB4MmUxOTgwYTEsIDB4YTMzMTAwY2EsIDB4OTYwNmU2MGMsIDB4MjkwNjBiMGEsIDB4MjhmOTljZDksIDB4ZWViYWQyZWYsCi0JMHgxNWJkZWIxYiwgMHhkYzljMDcxZiwgMHg2MTc4NzAxZSwgMHhkZmQ5Mzc5ZCwgMHg2NDVmZWUyMSwgMHgzMTI5NzMxZSwKLQkweGE4ZjU5MGY4LCAweDFlZjBlZWE5LCAweGQ3N2ZlMmQ2LCAweGViMmU3YTZkLCAweDY5NzU0Y2M3LCAweGZmY2E0Y2QxLAotCTB4M2Q5NzA0NDksIDB4MWI0ZGZlNzMsIDB4YjNkOWJmNDEsIDB4Y2YxYTU0MDIsIDB4ZTJkOGU2ZGIsIDB4OWQ0NWY3ZTYsCi0JMHg5ZGU3OTcxNywgMHhmMTBiYmVkMCwgMHhmYjE4YTVmYywgMHgzOTc0OGEyZSwgMHgzM2M2ZjY5NSwgMHgzZjU2YWY5OCwKLQkweGVmZmM5ZmI3LCAweDNmNTk4NzJjLCAweDIzN2RkNjBjLCAweDk3OTYzZTc4LCAweGY5ZDQyNzlmLCAweGRhOWI2YjlmLAotCTB4ZGY3NWMyNmYsIDB4YjdjMmU3OTgsIDB4N2U2MDY3NjcsIDB4N2YwMjc2NDIsIDB4ZTdjNWM3M2MsIDB4ZDU1MzQyZjEsCi0JMHg4Y2YwMGI0ZCwgMHgyNTg5ZGEwOSwgMHg3M2IyZTc4MywgMHg2OGU1MGQyMiwgMHhmOTExOGQ3ZiwgMHhlMmQ4Y2ZkNCwKLQkweDc1OWQzZGU3LCAweDA0N2I3ZjcyLCAweDEzYjQ2ODJhLCAweGNiM2Y3ZTM0LCAweDNkNzdjYWE5LCAweDI0NTViMjk4LAotCTB4N2YyMmNlMDcsIDB4YmJiYWJmY2UsIDB4ZjY1ZjlmODQsIDB4N2MzY2YyNjUsIDB4ZjQzN2UwOWQsIDB4ZjE1NjhlNWMsCi0JMHgxY2FkZWEwYywgMHhiOWJjZDczMCwgMHgzMTE5ZTE0MywgMHgyZTQ2NjJiNywgMHg2NjFkNmZiYywgMHhlZjU0NjlmMywKLQkweGYwNWNlODk3LCAweDg3MGQ4Y2EzLCAweDk1N2ZhZGY2LCAweDAzZDZiZTA5LCAweDkwNWU1MmQ3LCAweGRhMTgwNWFhLAotCTB4OTkzY2M2ZTEsIDB4ZjYzMDM3YzgsIDB4YmI0YjNlMTEsIDB4ZDZkNGZjOGQsIDB4MDVjZTA3MmIsIDB4YjU1YmYyMzEsCi0JMHhmN2VjNmU4YSwgMHgwODU4YmMzMywgMHg5MzJkNjljNiwgMHhiNDczZWY0YywgMHgwMTBmMDc4ZSwgMHhjOTlkOTUxYywKLQkweGQ2NTQ5NzE0LCAweDk2N2U0Y2RjLCAweDY5ZTFjOTlhLCAweGQ5NjI0MTdkLCAweGUzYzNjMTEyLCAweDBmOGUxZWU2LAotCTB4NDJlYTgzYzAsIDB4M2Y3M2ZiM2EsIDB4ODY5MzE5YjcsIDB4MmEyOTc1ZjcsIDB4OWQxY2ViOWQsIDB4OGQ3MTllMjAsCi0JMHg1YjdlYmYwMSwgMHg5NzA5ZDkwNiwgMHg1Nzk1ZTE5YiwgMHgyMWUwZmQzZiwgMHg4OWQ5MDNjYywgMHhmZGUxMTYzNywKLQkweDNkMDRjYjIyLCAweDRiNmRmM2NkLCAweDVkY2I3ZDliLCAweDRkZTVhZWQwLCAweGI4MDBjOTk5LCAweDMwZDhjYTM3LAotCTB4MGExYzg3OWEsIDB4NDFiN2MxYzUsIDB4MWFmYjgwMmYsIDB4NTM1ZTViODQsIDB4MTVjY2YzNGUsIDB4NzQwNDVlNzQsCi0JMHhkMzI1NzVjNiwgMHhlODgzMzE1NiwgMHgzODYzNjE5ZSwgMHgzN2ZjMmI0ZiwgMHg3ZmRjYjhiOCwgMHg3OTBiYTVjZCwKLQkweGUzNjliY2FkLCAweDkwMTcyYzcwLCAweDliNWU4MWJjLCAweGJhOTdmZDg2LCAweGQzMTFkYTEyLCAweGRiZjQ3MTVjLAotCTB4YThmZmVlODUsIDB4MDg3ZGQzOWQsIDB4MTM2ZmQ5NGIsIDB4NjE2MzZkNzYsIDB4ZmEwY2JkYWMsIDB4ZDdlYzE2ZjAsCi0JMHg4ZjI5Y2JhOCwgMHgxN2JmNjMxNiwgMHgxNDFiYmJiMiwgMHhlZTYxN2I1ZiwgMHhiNDMyZWQ4NSwgMHgwY2ZmOTBjNywKLQkweDM5ZTYwYzdiLCAweGNmYmJjNzBmLCAweDMxZWJkNjY1LCAweGViOWU3YzdhLCAweDRhYzllY2UyLCAweGRkZTFmNzZjLAotCTB4MTJmNmI4OTEsIDB4MWJiMjcxZTgsIDB4ZmFmOGQ1ZDMsIDB4MWU4MmZiZWUsIDB4MjhjYWJhMGQsIDB4M2VjMTMwMmYsCi0JMHg1YzVkNzdkMSwgMHg0ZmYzYWRhZSwgMHhjODVkZGViNCwgMHg2MTFiYzhlZiwgMHgxNGVjMDdlZSwgMHhhNTU4M2ZmMiwKLQkweGE3NTZmYjRhLCAweDU4Zjc1ZDFmLCAweDY4ZmJlNjIxLCAweDliYzc5NDc5LCAweGNiNTE5ZmE4LCAweDBmM2YyMGRlLAotCTB4ZTIwNGY5ZjAsIDB4YmI1ZmMwYzEsIDB4YzY5ZTdmODUsIDB4YzVkNmYxZjcsIDB4Y2RhN2MwNWEsIDB4ZDcwZWNmODQsCi0JMHg3ZjlmZDg0NSwgMHhmMzI4YjlmYiwgMHg4MTVlOWU3OSwgMHgwZmZiZDA3NywgMHhmNWI4M2U5MiwgMHhiMzhjMTJiZCwKLQkweDM5ZmVkZmQ0LCAweDc5YmZmZGU5LCAweGI4ZTYzOTljLCAweDgwMmYxMTgxLCAweDljNzE2YTcxLCAweDJhZmY1YmRlLAotCTB4OGE1MWJhZTIsIDB4YmNlY2I2NDcsIDB4YWIwN2VlOWMsIDB4NDlmNDMzMmIsIDB4NDVjZTkzYTMsIDB4N2QxMWU3NjYsCi0JMHhmODcyZWQ0ZSwgMHhjMzUzY2UxMSwgMHhkNGVjNWM3OCwgMHgzMDg3YzlhZSwgMHhkMzQ5ZjMyZSwgMHg3M2Q4YmNlMSwKLQkweDNhNWVhNzU5LCAweGZlODc2MjVhLCAweDVhMzhlZDRlLCAweDBmNWU5MGEyLCAweGY3OGNkZTExLCAweGE1ZmVlNzc1LAotCTB4ZTM3N2ZkMDQsIDB4ZGYwMGMxZmMsIDB4NGJhZmUzMzksIDB4ZjlmYzE2YmYsIDB4ZjE4MGYxNjUsIDB4NTI1ZmRhNzgsCi0JMHhjZjY4YjNkOCwgMHhkNmE1ZTAwZCwgMHgyYTdmZjc5YywgMHhjNDEyYmRmOSwgMHgxM2ZmZTYwMywgMHg0NjNjMDQ1ZSwKLQkweDhiYjU3YmJjLCAweGE0NWE5ZmM3LCAweGM2ZTMxMDYwLCAweDU0Zjc1MjJkLCAweGZmMDZkMzhjLCAweDQwNzNhMzE3LAotCTB4OTI1NmI3OTksIDB4Y2MzZGZlOTksIDB4ZDYxYWJjMDMsIDB4YjdkYjBjYTEsIDB4M2U2NjdkYjEsIDB4NzUwYjliMWIsCi0JMHgxMTFkMmJjNywgMHgxZGQ0OWY3YywgMHhlZDQyYmNhNiwgMHg0YjA0Nzc1OCwgMHg4ZmRmYjQ0ZiwgMHg0N2ZhODZkYiwKLQkweDZmMmM3ZWZhLCAweDg2ZmYwMmQ3LCAweDBmZWIwZmUzLCAweGZkZjI4MTVlLCAweDMzMTMwNThmLCAweDRjYTEyNjMxLAotCTB4NjJmNjFkZjUsIDB4ODUyY2UyMWUsIDB4N2QzYTZkZWUsIDB4MjI3NWE2NTgsIDB4M2Q3Mzk2NjMsIDB4YThjZWZmM2YsCi0JMHg1ZWVkY2NmZSwgMHg5MzkyMzc1YSwgMHg4MWU5ZjM4YywgMHgxNTU3NWM1YywgMHhmNjExZmE1NiwgMHhmODE1ZDViYiwKLQkweGMzM2ZmOTA0LCAweDA4Nzg1ZGQ2LCAweGZiMWQ3M2JlLCAweDc5ZTYwZTZkLCAweGVkYTJmNzFiLCAweDhmZDhhZDJhLAotCTB4YmJmZGM2ZmIsIDB4MzY3YWVmMjUsIDB4OWM5ZjZlMzQsIDB4MjhkZmU1YzQsIDB4YmUzNTI3YmYsIDB4Yzk2MWY5OGQsCi0JMHg2M2E3ZGI4ZiwgMHhhZTdiZWJiYywgMHgwNTQ3YmE0NiwgMHg5OTlkZjlmZSwgMHg3MDJiOWZkMCwgMHg3MTg1NGIwZiwKLQkweGM2NmRhOTI0LCAweDg3NmVhMGQ3LCAweDdiZjFlM2Y3LCAweGQwMmI1YjViLCAweDYwNmE1NzYxLCAweGJiZGUwZDk0LAotCTB4ODdhZDczYTUsIDB4OGRmYzNkZjEsIDB4NDljOTY1ZjksIDB4OWVmMTVhZTcsIDB4ZTc0OTM1MzgsIDB4YjkwMmQwZjMsCi0JMHhiYTgxODc0OCwgMHg0Yzc3NzUwZSwgMHgyYmE5NjlkZCwgMHhhYmNjNmViYywgMHgyODVmZTBlZSwgMHgwZjdlYjNlZiwKLQkweGVmMDdkN2JmLCAweDMzN2RjMzMzLCAweGU1MGNiN2JjLCAweGU4NDkzNTNmLCAweGIxNjk4ZDA5LCAweGRhY2VhMWU3LAotCTB4M2M0OWU5MDIsIDB4ZTVjODU5M2UsIDB4MjY1Zjg4YzQsIDB4OTdlMjJmNzgsIDB4ZTI5MWFjODUsIDB4NjBmMTIzNmIsCi0JMHg1YmRhM2U3NSwgMHhiMGU2NTRkZCwgMHhmODhkMmE3ZSwgMHg1MWYzMWU1YiwgMHhhODJhYzA1OSwgMHhhODNhY2IxYywKLQkweGE5ODU5MmJjLCAweDU0ZGQ2MjJjLCAweDJhN2ViMzE2LCAweGIxOTc0YzdkLCAweDU0N2NjMDljLCAweDhmMWFkOWE2LAotCTB4Zjk3ZDQ3NGUsIDB4Y2JlOTNiMGIsIDB4MWUwZjJkYzIsIDB4MDUwOGM5MTgsIDB4NmFhNWJhMjYsIDB4Njk4NjdlNWMsCi0JMHgyODY0YTFhNSwgMHg4MDM4OGI1NywgMHgxNmE5YWU3MSwgMHgzNTQ1ZTY2OSwgMHhkMDdkOTBhMCwgMHg5M2VhNjQyMywKLQkweGVlMjBiNjM1LCAweDJhYjliMjlmLCAweGU3MTVhZjNkLCAweDNlZGY2YjgwLCAweDI3ZTQ3NjQwLCAweGFhNzlmOGZlLAotCTB4NGI5NDkzNTMsIDB4ZWIzMjg3ZGMsIDB4MWFiNTg2YzcsIDB4NzNlNDFiZTEsIDB4MWViYmUyMmEsIDB4Y2RiYTgyZTEsCi0JMHgxZWU3NGRkOSwgMHhkZmMzY2JlZCwgMHg3NDVmNzE5NiwgMHg0NWY2OWQ5YiwgMHhhMDI2NTA2YiwgMHgwYzJlZTM1ZSwKLQkweGE3OTg0YjM1LCAweDlmNmE1MTViLCAweGYyNGQ3YzQ0LCAweGNlMWE5MzUzLCAweDllMGRhMDk4LCAweDc4ZmFjNDA3LAotCTB4ZWJkZjkwNmQsIDB4YzFjYTllYmIsIDB4Zjc4ZmY2N2QsIDB4ZjllYjRkYmYsIDB4MzRiOWM5ZjUsIDB4YTNjZWJhOWYsCi0JMHhmYjRkYzA2YSwgMHhjZGNhMmE3NiwgMHhmNjAzZTljNywgMHg2ZDhkZDkzNywgMHg5ZTBhNWYyZSwgMHgyNWZmZTkzYiwKLQkweGMwY2E4ZmJmLCAweDdlOTVmN2RmLCAweGM3YmVlYzU3LCAweDc0NTAyNmUxLCAweDM3YWY2MzJhLCAweGFiZjk1MjY1LAotCTB4YmY5NTJmMjYsIDB4MWY5OWQyNjgsIDB4ZjYyM2I5MWMsIDB4ZTExMTM2YTgsIDB4MTFkMDJmNGQsIDB4ZjBmNDRmZGUsCi0JMHg2MTI2NjNlYiwgMHgxNzllN2IxZSwgMHg3NjkyZDNlNywgMHhkNDQ0ZDU3YywgMHg3N2Q5M2UzZiwgMHg3NzYzOGMxOSwKLQkweGY3ODQ5ZjJmLCAweGNlNjRiNjI3LCAweDk1OTQ3Y2E2LCAweDFmZTcwNGRhLCAweGM1MTY5ZTAwLCAweDcxODc0Y2U3LAotCTB4Njg3NmQzNWYsIDB4ZDM3OTQxOTcsIDB4Yjg5ZDkzMTcsIDB4ZDY5NmJmYWUsIDB4ZGY3MTc5YTksIDB4M2FlZGZjNjQsCi0JMHg3ZjQxMDNlZSwgMHhmZWE1NmZhYiwgMHgwOWJmYTJlYywgMHgxOGZmNmM0ZSwgMHhmNjBkYTNmNiwgMHg2ZmQ0NWZiMywKLQkweGMzNDhlZjcyLCAweDE4OWE4N2Y3LCAweDdhNTM3ZGMxLCAweGY3ZjYxYTY3LCAweGFmODVhMmYzLCAweGRmODQ5ODRmLAotCTB4YmJkZWUyZGIsIDB4MzQ5OWQzNzQsIDB4NjdiYjA3ZTYsIDB4ZTYxYzk5ZTYsIDB4NzM3YWY1ODcsIDB4Mjg5NWUzNTksCi0JMHg5YTRkZGZmZiwgMHhmOTA0ZTZkNiwgMHhhYjFiNzI1NywgMHg0ZGFjNWY1MSwgMHgwOWNkYjliYSwgMHgzNjUzZWZjNiwKLQkweGY1NGU5M2EwLCAweDAwMTVkYWU5LCAweDFmYWUzNGM3LCAweGJjMzZmMjAwLCAweDY1OWVkMDZmLCAweGZjM2FmOGEzLAotCTB4OGU1ZWViYTMsIDB4OGViOGZlYTAsIDB4MmQ5NjlmYmYsIDB4ZmRhMDEwZjIsIDB4OWY5ZmM3Y2MsIDB4YWQ1Nzc2OGUsCi0JMHhlOTYyZjljNCwgMHhkM2VlOGNlZCwgMHg1NDRmNjQ0OCwgMHhmM2EyNDk5ZCwgMHg3YWZkNDY3OSwgMHhmMzExMDRiYSwKLQkweDhmYjQ4M2Q4LCAweDQzYzY3NTUyLCAweGJlMmVmYWU3LCAweDFjZTlhNzNmLCAweDM0ZmVkMGUwLCAweDk1ZjBlZjFhLAotCTB4MjlmOTNmMDYsIDB4YmI3NGIzNmUsIDB4Zjk3MGNmYzgsIDB4ZWZiYjYwNDcsIDB4ODNmOThkZDksIDB4N2M0NGVkYmQsCi0JMHgwYTgzZDQwZCwgMHhhYTIzZGJlOCwgMHg2ZGY5ZmYzMSwgMHg2ZTdmNDBkMywgMHhiM2RmMDc1NiwgMHg2NThmOTgyOSwKLQkweGY0N2U2N2JjLCAweDg5MjQ4Zjg3LCAweDdlM2FiMDdhLCAweGZiNGIyNGZiLCAweDRkZmVhMzNjLCAweGU3ODU2ZjZhLAotCTB4YmFjMWFlN2IsIDB4NWYyYmRhMTMsIDB4MDhlYTA2MzgsIDB4NGIzNjUzZGYsIDB4ZjE4Y2MzN2YsIDB4NmFmZWExMWYsCi0JMHhiZWQxNjU3MiwgMHgxMmJmNTVmNSwgMHhhYWUwZWY0MywgMHg2NjdiZDJmMywgMHhhZDZkZDNkMiwgMHg5MDExZmRmMCwKLQkweDZlYmY1YTczLCAweGExN2ViNDY3LCAweGY0NjJmOWRjLCAweDZlYjE0Y2UwLCAweGQyYjk5ZDU1LCAweDNhNDE4ZjQ0LAotCTB4ZmVlODliMTQsIDB4ZWM2NWM4MjEsIDB4YWRhMmViM2UsIDB4MjE3M2E0ZGYsIDB4YmNiYzkzMzMsIDB4ZTdlNDE2MWYsCi0JMHg5YmU2ZDY5YywgMHgzZmZmNTdmNiwgMHgxYzJiN2YxYywgMHg0YzcwMDRmZSwgMHg2Mzg2MmZmYiwgMHg0MWJjNjlhYywKLQkweGYwNGM4YTM4LCAweDUxYzNlN2ZkLCAweGYyOGUwMDk2LCAweDU2MWMxNGFmLCAweGM3MjhjNTdiLCAweGY2NDJiZGEwLAotCTB4YjBmMzhmMmEsIDB4YjdiMjM2ZTUsIDB4MTUxNTUyZmIsIDB4MzY5ODk3ZjMsIDB4NTIwNGVjODUsIDB4OGVlYTVlMTksCi0JMHhmMTQ2ZjFmNiwgMHg4Zjc3OTlhZSwgMHhmM2I2MWU2MywgMHg5OTVkYWMyYSwgMHhlODJhZmE4MCwgMHhlZDdkYzNjYywKLQkweGUwN2VmMTZmLCAweDc0MDU2MWY5LCAweDI3NTRlOGQwLCAweDE3N2I0N2VkLCAweGZjNjBkNDU0LCAweGIyYTczYmRmLAotCTB4ZjFiZDRhOGUsIDB4MzNmZmJjMTYsIDB4M2M3ZmEwYTcsIDB4YjRlYjc3ZGEsIDB4OThkYjE3YjQsIDB4NjkwNWVmNDksCi0JMHgyNDFlOTdkZCwgMHgxM2VlNzZiYiwgMHgyYzk0ZGFkYiwgMHhjZjhkOWJkNCwgMHgwNTJjMWRhMiwgMHhjZTFkYjViNywKLQkweGViOWVmNzhhLCAweDVmOTI3YmFkLCAweDU0Mjk3NWEyLCAweDNmNDRhZWM2LCAweDg1MGFlNDI4LCAweGRhM2QyMDBmLAotCTB4MjNkMjFmMzQsIDB4N2I1MDg5ZjcsIDB4Yzc5NWQ0MWUsIDB4ODA2NmJlNmMsIDB4NmQwZDQ5NTcsIDB4MmJmMDBmNTksCi0JMHg5YWZhMTY0ZiwgMHhmNTA4N2RlMSwgMHg1MjdmYjYxZiwgMHhhYjNkZTEwOSwgMHhkOWJjOWEyYiwgMHg4YjQ5YmY3OCwKLQkweGI3ZDY4ZmIwLCAweGRmMzFkNGNlLCAweGIzMGE5ZWQ4LCAweGIwYWU1MjA0LCAweGY2ODVkZTM3LCAweGQ3ZTQ5YWZhLAotCTB4ZTJkNzljZGIsIDB4MWY2YmUwN2EsIDB4MjY3YWYzYWUsIDB4OGYzOWI1YzAsIDB4YzU1MzM5ZTUsIDB4NDM3ZjU4N2IsCi0JMHgxZWE0NmNjZCwgMHg3ZjRhZjc1MywgMHg1ZmJjZjk5NSwgMHg4MGRmZjM2ZiwgMHg2YTkyZmNlYiwgMHgxNTdmYmZjNiwKLQkweDg3OWI5NWUzLCAweGVmZTE3ODE5LCAweDVjNzUzMWJkLCAweGMxZTY5NDRmLCAweGY3OTgzNGZhLCAweGJlYjllNzg2LAotCTB4NDdmYTE0N2YsIDB4MTNlNjFmN2IsIDB4MWM2ZTNiMjQsIDB4OGMzMjRmOWYsIDB4MjcxMGY3OGQsIDB4ZjVhM2NmOGYsCi0JMHg4YmViMDQzNSwgMHg1NzhmZGYwNywgMHhiMTk2M2NlOCwgMHg2NzFjZTNiZiwgMHg2YzFkZmRhMywgMHhkY2U0ZjU4ZiwKLQkweDczZmZkYTNjLCAweDA4YmU2MmNlLCAweDY5NjZlZGU2LCAweGYxNTBiZjdjLCAweDM4ZmNjMzRmLCAweGY4YmYwMGY3LAotCTB4OGFhOGRlMjksIDB4OTI2ZDBmZmQsIDB4YTkzZmZmNzksIDB4MzliNGJiZjUsIDB4N2U2NDU0OWUsIDB4ZDczMDJjZWUsCi0JMHgxZjM3Y2MxZCwgMHhiNjZhOTY4MywgMHg1OTI4NzlmOSwgMHhiMzg3ZWZjNCwgMHhlNDU3ZTg5MSwgMHg2YzM2ODJkYiwKLQkweDUxMGIwNTc3LCAweDkwOGIxNTc5LCAweDQ1OGUzZjVkLCAweDg2MzU3ZWE5LCAweDM4ZjFmMzNlLCAweDcwMGU5Nzk0LAotCTB4OTk3ZTY0NGQsIDB4NjQyYjQ3YzcsIDB4NjgxNjNiZjQsIDB4YmY2OGNkODEsIDB4ZmUxNjRjNmYsIDB4NmZkZTQ4Y2EsCi0JMHg3N2MxNDU0YiwgMHhiZTI5N2JhNiwgMHhjNWU1MTliMSwgMHg1NTllYWZhOCwgMHg0NDhkZjE0ZSwgMHgzYzY5YTVmMiwKLQkweGRlZTIzODhlLCAweGZiZGVmMzgyLCAweDhmOGNmNTM5LCAweDNjZTQ2Mzc5LCAweGJiNzllMzVkLCAweGJhMzFiNzBkLAotCTB4MGY2MWEyOGYsIDB4Zjc4Y2EzZjcsIDB4N2VmMzI0YWYsIDB4MmZjNDEyMWIsIDB4YzE1ZmFlNDEsIDB4NDU5ZjdjNzksCi0JMHg3NGI5ZWRjYiwgMHhkM2RmYzljZiwgMHhkYThmYjAzZCwgMHgxNzU0ODIxOCwgMHg2ZGZiOWI3OSwgMHg1MTNiN2IxNiwKLQkweDkyY2ZkOTFlLCAweDgwZjJmZTc5LCAweDE4ZmMyMzVmLCAweGNlOTAzNWYyLCAweGUwNTk3ZmMyLCAweGJlNmVlODMyLAotCTB4YzdiOGMxY2YsIDB4NGRjODRmYTEsIDB4YzQ0YWE1NWYsIDB4MDk4MzQwNjgsIDB4MDViN2U5ZWEsIDB4NGE4MDFlZTgsCi0JMHgzNWNhOWYzMSwgMHgxZmU4MTlhNSwgMHgxNzdmZDgyYywgMHhmNTcwYjljMSwgMHgwZTMwMzUyYywgMHgyM2NkYzljZiwKLQkweDVkNzgxOGJjLCAweGZlMGZmMTYwLCAweGJjZjEzMWQ4LCAweDllYzMzMmYxLCAweGMzMDNmYzM2LCAweDA5ZmFiMDFmLAotCTB4NzFiZmJlODksIDB4NDNhMjdlZWMsIDB4ZWQyOTY2NzksIDB4N2IyMzdlZGIsIDB4YzBlYjBkOTYsIDB4NGZiYzdlNmQsCi0JMHg3OGFmMzhjYSwgMHg5ZmVlY2VjNCwgMHg2NDM5NDQ1ZCwgMHhiM2Y5ZjAzMywgMHg1NTBmN2UyZSwgMHg3NTQzZGM0OCwKLQkweDBjM2Y5YmQ4LCAweGZmOTE5YmJmLCAweGJlNTgxNWM1LCAweGE4NmIwY2U2LCAweDdiM2I1ZmI3LCAweDFmZjI2NmY0LAotCTB4Nzk4NmIwOTQsIDB4ZWUxNGE3MTcsIDB4YzY3NTE5ZmYsIDB4YmYxNGM4Y2UsIDB4YzliZjc4MTcsIDB4OGZkZDA2ZmQsCi0JMHhlZmVlNTM3MCwgMHg5ZDc4YmNlOCwgMHg1NzNhMGRmYiwgMHg0ZWQzYWE3ZSwgMHhiOTM3NzI3OSwgMHhmN2IxNjljMiwKLQkweGJiOTRkYzY3LCAweGY4N2NlZDM3LCAweDIzODdmYzMxLCAweDc5YzNkZTAyLCAweDY4MDRlNDlmLCAweGUxOWY5MTVjLAotCTB4NGI5ZDIwZGYsIDB4MzViZGZjNGUsIDB4NDcxYWUzM2YsIDB4NjFmMjM3NTksIDB4NWRkN2UwYjcsIDB4ODM0NTIwNWEsCi0JMHgyMTc2NmRiMiwgMHhhY2RhNGZjOSwgMHhiZmRlNGU0OSwgMHg5NDI0N2YzOSwgMHhjNTdjNDRjYywgMHhmZjA2NDdjYywKLQkweDU5MDVlZjU5LCAweGU4NzNmMTJhLCAweDM4NmFlMDg5LCAweGFmYWQzMzYzLCAweGE4ODRmNzgzLCAweDhhZjZiZWI0LAotCTB4MjY3NzQzNzgsIDB4OTA3YWZhN2IsIDB4ZDFhYzU5OTcsIDB4ZTI2ZmZiNGUsIDB4YzkxNjk1N2UsIDB4MzEzZDQ3NmIsCi0JMHhkZmI5NmZjYiwgMHg1NTUxZTQ0NywgMHgyZGYwZjU4OCwgMHg2YTA1MWY5MSwgMHhlNjNmNTVmMSwgMHg3ZDNmMzE3NSwKLQkweDYzZWUyZGQ3LCAweDhmNjAyYzYxLCAweGZkMDIzZjk3LCAweGFkZGFmNDlhLCAweGRiZjVjYzMzLCAweGViNzVjYzJiLAotCTB4MWU0Njg2M2QsIDB4N2E0ZDJiY2MsIDB4NWQzZGVjNzYsIDB4ODdlODEyZDMsIDB4YTVkYjM1MWIsIDB4Y2QxYTBmYzUsCi0JMHhhZTIzMDNmMSwgMHhjM2Y5ODc1NywgMHhlM2MyY2ZiNCwgMHg3YzlkZDM3YSwgMHg4Yjg4YjJmYywgMHgzNDFhMmZmNiwKLQkweGI4ODYxZDc1LCAweDNkZTE5ZjUxLCAweGFlMzVkM2Y2LCAweDg0NWUzMDZmLCAweDU3NGQwNGY3LCAweDQzNmRmYjhjLAotCTB4ZWY5MzlmMjIsIDB4NjQ1N2E0N2IsIDB4N2RmZGZiOGEsIDB4NTRhZjc0OTksIDB4MWNlOTkyNTcsIDB4Mzg2NzExYWIsCi0JMHg0OTRkZTA1ZCwgMHgzYjdmMGYzZCwgMHhhZDcwZDhkNiwgMHg1NGFmYTgxOCwgMHgwN2M4OWQxYSwgMHg1ZTc5YjMyYiwKLQkweDg3MWYyMGQ1LCAweGM3NTRmMTRjLCAweGZkZWUzNTFhLCAweDgwZmQwMzcyLCAweGUyNzNjMTVlLCAweGRiNmZiMTJlLAotCTB4ZDhmNWY4YWUsIDB4NWVjMzg0NzgsIDB4ZGE3ZjIzYTEsIDB4NWVkZDY1ZGQsIDB4YWI1NWU1ZTAsIDB4YWJjNzJjZWUsCi0JMHhiZjMwNWEwYiwgMHg0Njk0ZWMxNywgMHg4MjJiZWJlZCwgMHhlZDNiNGZlMCwgMHhhZjc4YzNiZSwgMHhmMzZkZDNhZiwKLQkweGFjZGM3YWUyLCAweGFiM2Y2OGQ5LCAweGViNDlkMzI1LCAweDU2YTkwYWVmLCAweGU4ZDJmNWM3LCAweDY4NTUxOWQ3LAotCTB4M2NiNWE3M2UsIDB4ZTA4OTdmZDIsIDB4NjY5ZmMxNTMsIDB4YmU2MzFmYjQsIDB4NmYzZmVhOGYsIDB4MGRkYThkM2MsCi0JMHhlMGVhZmZiOSwgMHg3NTY3MTRiNSwgMHhmZjk0NmQ3OSwgMHg3NDY4MTZhNCwgMHg1ZmMxOWE4ZiwgMHg2YjljN2VkNiwKLQkweDI0ZmRiODk0LCAweGJhNDI3ZmMyLCAweGQ3OTRhM2RiLCAweGRmYzVhYmQ2LCAweGJiNDk3ZTVmLCAweGI5ZWViY2M0LAotCTB4ZWE3Nzc4OTYsIDB4ZjgyMzBhNmYsIDB4ZTBmNTE0YmQsIDB4OGY5MDJlYjksIDB4YWI4YzM0OTcsIDB4YWJmZDNlOGQsCi0JMHg0N2M5MmY1MiwgMHhlMWFmY2YwNiwgMHgyZGEyZGI3MiwgMHg1ZmJjZjI3NywgMHg4OTY5M2RmMywgMHg0YmMwZDFmOCwKLQkweDQ3MjgzYzIyLCAweDRmZGM1MWZlLCAweGZhYjE2MDFmLCAweDU2MzUyOWM2LCAweDY4ZTFiZWQwLCAweDEzOGE2ZDg1LAotCTB4NWNkYzUxNGYsIDB4M2UyOGI3NGYsIDB4NmJmOTVmZTIsIDB4MDc1YzRlMTUsIDB4OWNjYWQzOWEsIDB4YTZkZjlmYjgsCi0JMHhkMTcyNTM3OCwgMHgzMzIyM2MzZSwgMHhlYWI1OWI4YywgMHhjYTMxYjk2NiwgMHg0ZjdlZjFjNywgMHg4ODk4ZTM4MCwKLQkweDI3ZGY1YThiLCAweDM4MGJjODI1LCAweGM3ZjVkNjI3LCAweGVkZGI1ZmY3LCAweDAwOWYwZjNmLCAweDQ5MWU2OGRlLAotCTB4N2E4ZThhNzksIDB4Nzg3M2I2NDEsIDB4ZWQ3ZGM1OTMsIDB4YzQ0ZGZhODksIDB4ZTdlYzRmMWYsIDB4OGFiYmUwZjcsCi0JMHhjYThlNzQ5YywgMHgzOGFiNWUzYSwgMHhmMDBhZDcyZiwgMHg5YWRiOWRhMCwgMHhiZWUzZTMwZCwgMHhjOWQxNTdiOCwKLQkweGM0OWIxZThlLCAweGExN2MzMTljLCAweGY3YTI0ZWE0LCAweDNjMzRiNWE3LCAweDEzNWFjN2JiLCAweGE3ODE5ZGYwLAotCTB4MWY1NTJlZDcsIDB4OTdmYzJjMDcsIDB4OTc4YTViZmUsIDB4NWZkZmYwYzcsIDB4NmJkZmYxZTMsIDB4MWNlOTczYzgsCi0JMHgyZDdiZDhmZSwgMHhiZmJlNTQ5NSwgMHhjOGQ3ODU2NywgMHhkYjY2NzdhZiwgMHhjMDRiZWQ0YywgMHhhMzcxZTBiNywKLQkweDAzMmExY2VmLCAweDUwMzExY2Q2LCAweGYxODcwNjA3LCAweDcxY2Y1MTNhLCAweDc0ZTIyZTdmLCAweDcxNGZiNjBlLAotCTB4NTViY2E3N2YsIDB4YzM5ZDNhYTEsIDB4ZWJmY2VmODMsIDB4Zjc0ZjZhMzQsIDB4Y2VhMWQ0ZDksIDB4ZjZhYTNmMDcsCi0JMHhiMGU5OGQ0ZSwgMHg0YmQ1OWYzZSwgMHg2ZjAwZGRkMywgMHg3ZTAxZjc0OSwgMHg5ZDMzYTYxZSwgMHhmODhiNWVmZiwKLQkweDhkZWYwYWRlLCAweDFiZjc0ZTFlLCAweDI5OTUzYTNkLCAweGMyM2ZmY2M3LCAweGVjZTgzZmRmLCAweDFjNjJmMjRlLAotCTB4ZmM1ODczYjcsIDB4Y2M3ODgzZGYsIDB4NzQyZmU0NmQsIDB4MjhjOGZkODgsIDB4NGZhNDRiZWQsIDB4ZmY1MWViZTUsCi0JMHg4ZmYyNjRlZSwgMHg5OWE3ZTI4NiwgMHhiMTYxNzdkZiwgMHhjMWVlMDYzNywgMHg3NzY0MjI1MCwgMHhjM2JiMGFkNCwKLQkweDJlNjRiZjE4LCAweGYyODdhZmYzLCAweGVlZDYyNGQ1LCAweGNhNzBmYjA0LCAweDE1ZGZmOGMwLCAweDQ3ODAyZGZiLAotCTB4OWY5NmZiODAsIDB4NGZmYjQ1NWQsIDB4YzJhZjdmNDYsIDB4MzNlZDg0YjIsIDB4OTJjNWEyMzIsIDB4MTNmYzA5N2MsCi0JMHhjZWZiYTY2NiwgMHg0MmQxOWNlYSwgMHhkOTdiMWZkYywgMHhmODhlOTgxNiwgMHhjZDE2Mzg2ZSwgMHgxYmU3N2FjMCwKLQkweGJjMWVjOTI3LCAweDcyZWUxZTEwLCAweDdiOWE3ZDczLCAweDQ3OWY2MTk1LCAweGViMzhkOGQ0LCAweGU3YTVlZGQyLAotCTB4OGI1NzBmM2QsIDB4ZmQxODkwZjEsIDB4NzJiNzg4MzYsIDB4N2U5MGViYzIsIDB4ZThhZjNmYTEsIDB4ZTkyYmUzMWYsCi0JMHgzYWU5ZjEyZCwgMHgyYzkxOWY0OCwgMHhmNDdjZmMzOCwgMHg4OWMxNjFjOSwgMHgyMmExMmU5YywgMHhlN2RjN2Y0ZSwKLQkweDVkOTM3OTgzLCAweGY1OWI3NDFmLCAweDhhZmVmZmM5LCAweDEzMGQzN2NjLCAweGQyOWY4MGQxLCAweGJlZjNjNGExLAotCTB4ZGUyY2VmNzgsIDB4ZTNjNGJiOGYsIDB4NjkzZmFkMzUsIDB4MWQ0NTdiMGEsIDB4NDk4N2MzMTYsIDB4ZmE4NGU4MmMsCi0JMHg0YmU4OGUyZCwgMHg3NTE4ZmY2OCwgMHgwZTJkZmRlMywgMHhjZmVjNjllMCwgMHg5MGM4ZTVjOSwgMHhmMWI5ZGFkZiwKLQkweGVkYzczNmU1LCAweGM3NGRmOWUxLCAweGY3ZGMxZTIyLCAweDAzZTM4ZTk4LCAweGJmYzMzYmJlLCAweDNhYzc3YmE3LAotCTB4M2Y4NjY0YmIsIDB4NmU2MjMwOWQsIDB4ODM2ODBlNDAsIDB4MGZkYTFhNzQsIDB4ZmM4NmFiZDcsIDB4OTU3OTM5ODMsCi0JMHhlZDNmYzg1YiwgMHhmZWUzMmVlMywgMHg4YzY3YTFiNSwgMHg2YjcyNWVlZiwgMHg4YjhmYTY5NywgMHg3YWYzOWM4NiwKLQkweGU0MDhlNTA5LCAweGNiMmUxMGVhLCAweGJkZjhjYjM5LCAweDVlZTJiNTc3LCAweDBmNzExZTliLCAweGRmYzIwN2UyLAotCTB4YWZmNzNhNjAsIDB4M2ViMDdiOGQsIDB4ZjdjODFjMjgsIDB4ZDZhZjNmMjMsIDB4ZGUwZWZmZTUsIDB4Y2E4ZWMzNDMsCi0JMHgyN2ZhNmY5NCwgMHhmZGMyOWZkZCwgMHhkNGJmYjM0MywgMHgzMWI5ZWUyMywgMHg2NmI2YTVmYywgMHgzNjczNmY3MSwKLQkweDQ5MzZlN2U3LCAweGY2MTY3ZmJhLCAweGY3NGEzNjNiLCAweGYwNjQ2NzE4LCAweGE3MzhkM2Y1LCAweGY0YTMzMmM3LAotCTB4MWYwNjVhN2IsIDB4N2ZiM2UyMjUsIDB4N2E4MGYyMTEsIDB4OGY5NzE4MmYsIDB4ZTMyZmUyNTUsIDB4ZWViMDA3ZjksCi0JMHhiNWVjNjMwNSwgMHhkMDE1MWZmOSwgMHg5ODA3OWJiOSwgMHgwZjk3ZTI4ZiwgMHg2MGIzMjdiNCwgMHg1ZjNiNWUwYywKLQkweDczMmY5Zjg4LCAweDI5ZGI4YzQyLCAweDQ1NjY3OWVlLCAweDdjODM1ZTdjLCAweGI5ZDFlN2NlLCAweDBmZGMzZTNjLAotCTB4ZThmZTcwYTcsIDB4Nzc3OWY3MTQsIDB4YzQ2NGZlMmEsIDB4ZTE3NWEyNTMsIDB4ZjY1ZTgwYzQsIDB4MmIxZjIzMjcsCi0JMHg5OWJjMWM1ZiwgMHhjNzlhZjVjNiwgMHhmYmY0NTdiZCwgMHhlMmNhYmZiMywgMHg4ZjAwMDRmNywgMHg3YjYwN2Y0MiwKLQkweDE3NjJjN2E3LCAweGYwZmViMjVkLCAweDQxOWJkNjliLCAweGJkMjM0ZmJjLCAweDQzZmFlOTcyLCAweDQ4ZmU4MGJmLAotCTB4ZjJjMmZhMjMsIDB4ZTJiYjQxZWUsIDB4NTdiZjMwYzUsIDB4YjZjM2M1ZWQsIDB4ZDBlM2ViMTksIDB4ZTVjODQwYWQsCi0JMHhkZDBhZTk5NSwgMHg4NDU1NzY0MywgMHhkYTg5ZmJhZiwgMHhmNzEzMGM2NSwgMHg1YTNjMGIwYSwgMHg4ZmNiNGJlMSwKLQkweDA4YjcxZmNmLCAweGYxOTZkNDNhLCAweDllZjE5MTdiLCAweDk0MmY5Yzc2LCAweGFmZTgzZTM5LCAweGQyMGI0Y2E3LAotCTB4YmM4YmJmZjMsIDB4ZGFkMTcxODcsIDB4ZmUyZjBlMWQsIDB4MGVjZjUyNGUsIDB4ODVlYTE1NTcsIDB4YWE4ZTFkOWUsCi0JMHhmYTUwZGFmNSwgMHg5YmY0MmRmOSwgMHhmZjhjZWMyYywgMHg2NGJmZmFlOSwgMHgyZmUyN2ZhZSwgMHg0YmEwMWY3MSwKLQkweGFkMWM3YmE2LCAweDc2ZTkzZGZkLCAweGZhMDM3N2QzLCAweGU1ZGQ4MTNiLCAweDJkMzNmYTEwLCAweDllYzVkMzk5LAotCTB4YWI0ZGQ3YzcsIDB4ZjAyM2RkNWMsIDB4NjdjMDhmNzYsIDB4MWU1N2I4OWEsIDB4YWUyNzIxZDYsIDB4MzliYjQ2NDMsCi0JMHgwMDk0ZmRlMiwgMHhlZjNmN2I4YiwgMHhmYTU3MDg2MywgMHhlY2YwM2FlMCwgMHhmYmY2MzJiMiwgMHg3ZDNiZjhlMSwKLQkweDc0MmI4YTQxLCAweDgzOTIzNmZlLCAweGYyOTRmNmZkLCAweGZiZjU4MTM4LCAweDhjNjdjMTYyLCAweGM5ZThlZDk5LAotCTB4ZmQxMmJjZDMsIDB4ZDI1ODYxMWUsIDB4ODA3ZWRmNzEsIDB4NGY3ZTYxZGUsIDB4YjI3NzBhZjAsIDB4YzVhMmNmYjAsCi0JMHhmNzNmOTJmNywgMHg0OGEzZjUyNCwgMHgwZjFjNTBhZiwgMHgwZGJmMzY2YywgMHgwYTdlODhmMywgMHg5ZTRjNWI3NiwKLQkweGJkMTZiZGU2LCAweGJlNjc4NTYzLCAweDEzYjdjZjliLCAweGEzZjYzN2Y1LCAweGRkZTM4YjQ1LCAweDViYWM2MGZmLAotCTB4ODZkM2JjYzYsIDB4NDllMGU1OWIsIDB4MjZjNzFmMGYsIDB4MjU5NzRiYzYsIDB4NmViYTBmMWEsIDB4ZWJlMzBjNzcsCi0JMHhlNjBiY2YzMSwgMHg0NzllMTI3YSwgMHhjODBiMzllOCwgMHhmYWVlMDBlMywgMHhmYzZmYzVmYiwgMHg1OWNlNzg4OCwKLQkweDEzZDJiMDNkLCAweDVkYTAwNzYzLCAweGIwOTVlYjRlLCAweGM2NTUzYmMzLCAweDVkODQ0YmY3LCAweDgyNzRmYTg4LAotCTB4OTA3NzBiMTYsIDB4NmQ5NzQ5MDYsIDB4ZjEyYjVmNWMsIDB4NDNjYzM1ZjUsIDB4OWI4OTdlZmMsIDB4MmZiNDE5ZmEsCi0JMHg0ZmIxMWRiOCwgMHgzODlkNmJjYywgMHg4ZGFhZmEzZiwgMHgyMWJkOTJiNSwgMHhlOWM4NjRmMCwgMHg2ZTljOGI0ZSwKLQkweGVjMzU3Y2Y1LCAweDc3ZTI3NWI0LCAweGYxN2U5MTJkLCAweDYxNGFlMWY0LCAweGYzMWM5NWFmLCAweDk1YmNjNzhmLAotCTB4MWYzNDJhY2IsIDB4ZGQyNWExZmEsIDB4OWU2MDBmYjMsIDB4ZmMxZWUxNGUsIDB4Mzk0MTlhNjEsIDB4OGNmYzE0MmUsCi0JMHhjMThkY2RmZCwgMHg2ZTNjZWZkZiwgMHhlNmY3ZGQ5MywgMHg4NTdmMDQ1NywgMHg3Y2MwZDhjNywgMHhlYmQxOGRlZiwKLQkweDdhZTFlZWZmLCAweDJkZmMxZDJiLCAweDVmZDM4Mzk0LCAweDc4NWViZDExLCAweDllMDBlMmFjLCAweGJhMDVhYWMzLAotCTB4ZjgzMGNhYTMsIDB4NmYzYzMzYTMsIDB4ZTFlZDBiYjksIDB4ZjY4N2NjNjMsIDB4OWU3ODZmNzQsIDB4NDdmMDFjNmQsCi0JMHgzZjZlMWFlZiwgMHhkNWY5ZTgwZSwgMHg5N2EwNWYxYywgMHgyZjk3YThjMywgMHgyZTRmZTYzYiwgMHhjMjk2YmE4MiwKLQkweDczNjVlZWY1LCAweDI5NjdiZjE5LCAweDVmYTEwZWVjLCAweGY0ODllODZkLCAweGUyYTdmYWRiLCAweDcyN2Q2ZjNlLAotCTB4ZTYyYmIzNjMsIDB4MmVmYjQwZjksIDB4YTgzYjlmNjgsIDB4ZGY1MTZhNmYsIDB4ZjNkYjEzNzgsIDB4Nzk5MjUzMjMsCi0JMHhjNzFlN2IzZSwgMHhlNjY0ZjRjYiwgMHhhZjNjMDE3NCwgMHhkYzY1MDZlNiwgMHhiMmY1N2NjNywgMHhhZjc4MDlkYywKLQkweDQwYTRhMWZhLCAweDdlZjgxMmQxLCAweDBlM2UwY2YyLCAweDJlODQ3MmViLCAweDQ3ODc4ZGNiLCAweDQ0MzNhZmFlLAotCTB4ZTQ0MzI4ZGMsIDB4ZjEyNDY3NmYsIDB4ZTcwYTQ1NzIsIDB4OTc5ZDI0ZjcsIDB4MWY5Y2U5ZjcsIDB4ZTNmMTNjMzIsCi0JMHhiYjQ0Y2I0YywgMHgzYmQ3MWIzZSwgMHhiN2M2OTc4ZiwgMHg5MTRiYWU0YiwgMHg4YjNjZWQyZSwgMHhkZmM2YjI0ZiwKLQkweDE3NDk0YmFmLCAweDA2ZGI2YWY3LCAweDNmYzFiNWY1LCAweGM2NzdjNDI3LCAweGZjNjI2NWY4LCAweDg5OTg2NzQ1LAotCTB4OGQyOTE2N2YsIDB4Y2U4YjM3YzQsIDB4ODYzN2M0MjgsIDB4M2ZlMjI0NWMsIDB4MWFlZWZmNjMsIDB4MTRjNmUwNDcsCi0JMHg5ZmEzZjc5YywgMHgyMDljNjMxNSwgMHhkZjBmNjU3NywgMHhkZmRmYzIzNywgMHg3Y2IxMzZiOSwgMHg0MTgxZWIxOCwKLQkweDlkZjNkMDZmLCAweDNkMDBjZjE4LCAweGFkMGE2OTNmLCAweGZjOGJjZjQzLCAweDMxYTcyZTUzLCAweGYwOGZmYTc2LAotCTB4YmIzYjFkZjcsIDB4OGU2YmNjYWYsIDB4N2FjMGViYTEsIDB4OGNmZWUzZTksIDB4ODUxOTVkNzUsIDB4ODllOWMwNDksCi0JMHg3Mjk4ZDVlNywgMHhjYWVkZmFhOSwgMHhmMTc4NzYwNCwgMHg1ZTFkYTk3ZiwgMHhlNDgxM2RkMiwgMHg1NzgxMDFmNiwKLQkweGM0NjZiZTIzLCAweDc4OTdmMGIxLCAweDhhYjNiZGI5LCAweDFhNzkzMWYwLCAweGZmYzA2Zjk3LCAweDIyZmY4MTU2LAotCTB4MWE3ZmZmOGUsIDB4NjQzZGZmYzAsIDB4Nzk3MDc0MjcsIDB4NGJkNjg4YzksIDB4ZjQ1ZjI0ZjksIDB4NDUzYmYxOWQsCi0JMHhhMGRmMjdiOSwgMHgyOTNkY2U3YywgMHhhOWRmN2ZkYywgMHhiZTQwOWZmYiwgMHhiYmYyMjU1YywgMHhhODg4Y2YyNywKLQkweDQwN2I1OGRlLCAweDJhZDE3ZWZjLCAweDFhZjljMGZiLCAweDU5MWJjN2NhLCAweDBlY2RmYmNiLCAweDE4OTQ5N2VmLAotCTB4ODU5NmQxZjksIDB4Zjk4MDJjYzcsIDB4ZjlmMTU3NjcsIDB4OWJiMTRkYWMsIDB4NTg3NWE3ZDYsIDB4NDg1ZjJlODcsCi0JMHhiYjJkZmFlMSwgMHg2MDE1MjIyYSwgMHg0YTM3NmI3ZiwgMHgxMjM3ZjQwYSwgMHhmODA5ODc3ZiwgMHgwYjIzNjQ2NiwKLQkweGQwZmVmZWM1LCAweDRmMWYxZjQ4LCAweDA3YTQ4NWYzLCAweGQzZTcwNjhhLCAweGE0NTU5YjZlLCAweGNmNjk1ZTgzLAotCTB4YTBiNWY2NDgsIDB4MzYwNmE0YzgsIDB4YmVkNzlmMjMsIDB4ZjJmY2ExMWIsIDB4MmI3NmVmYzksIDB4OWU1ZmM3ZTgsCi0JMHhjZjgyZGZlYSwgMHg2NTc4Zjk4ZCwgMHhiZWZkMjQ3ZCwgMHhjZTFjYmJmOSwgMHgzMmY3NjEwZSwgMHg3MWUxY2QxNiwKLQkweGZlMDQyN2ZmLCAweDg4N2IwYmQ3LCAweDIzZGZhNjFkLCAweDk0ZmRiOGQyLCAweGU5YWM3Y2IxLCAweGZmMGNlNzc3LAotCTB4ZmE3M2ZkMDcsIDB4YjU5OTY5M2QsIDB4NzBhNzhhMzMsIDB4YmNiMTk2ZmQsIDB4ODM0YmVjOTAsIDB4NTdlN2E2MWYsCi0JMHhkM2U3YzQ2YywgMHgwMTMxNWM0NywgMHg1ZmM4OTdlZiwgMHg3N2YwNTExNSwgMHhkNmJhN2ZhNSwgMHg5NGZlZjcxNiwKLQkweGMwMWY0MjQzLCAweGNlYzdmNjNjLCAweDZiNzI0MmUzLCAweDlkMjdiM2I0LCAweDY3OTM2ZjlmLCAweDBkZGJiN2M0LAotCTB4M2U3ZDJjM2UsIDB4MGZiYTZlZWQsIDB4Yjg2NTU1YjEsIDB4ZmZlMDY0ZWYsIDB4Mzc4YWQ0ZjIsIDB4ZTE5MTllMTEsCi0JMHg0NmUxMTI3NSwgMHg0OWM0Njc4YywgMHhjZmNhMzlmMCwgMHg5Y2Y5YWEwNywgMHg1Y2Y5NDI1ZSwgMHg4MmNjNjNiNiwKLQkweDU1NmNmOTU4LCAweDJjZWIzZTg5LCAweGU4NmUxM2JmLCAweGFlMTRkZThiLCAweGFkNDhlZmM3LCAweDcxZjIwM2Y4LAotCTB4MTQ1M2Q3N2QsIDB4OTFiYzU5YjcsIDB4NDI0YzFlZmYsIDB4ZmUyNDVjZmMsIDB4NzhjZGRlNjAsIDB4ZjgwZDVkY2YsCi0JMHhhM2VmNzgxNywgMHhlZWM4OTYxNCwgMHhmN2MzOWRhZCwgMHg3MmI3NmFkZiwgMHgyYWFkNjU3ZSwgMHgxYjU3MDNkZCwKLQkweDdmNDExZWRlLCAweDdlYTNkNDYyLCAweGQ1YTc2ZTFmLCAweDJkMmVkZDZjLCAweGE4ZWJjMThjLCAweDI3ZTUxMGRhLAotCTB4ZTQzNmVlNWMsIDB4MmIxOWViODksIDB4ZDhkYzYzZGYsIDB4Yzg3NmZjMDUsIDB4OWVlYWVkYzUsIDB4ZmYwN2VlNTIsCi0JMHg3YWM5MDgzZiwgMHgwMDgwMDA2YiwgMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwKLQkweGQ1OTQ3Yzc5LCAweDY3NzlmMGI5LCAweGNjOTMzMjRmLCAweDIxMzNkZjY0LCAweDYxMjYyMjAxLCAweDAxMTYxMjEyLAotCTB4YTAwODQ5MzMsIDB4MjQ1ODRlMDgsIDB4ODFlYzM2YzgsIDB4OGJmNjI4YWMsIDB4MGMxOTdlOTUsIDB4NmY2MmU0NTIsCi0JMHhiOTA1NTZhYywgMHhkYTU0NDA3NiwgMHgxYTA4MDk2MiwgMHg4OGIwZTgzNCwgMHgxNDhkNmFkMCwgMHg0M2IwNWIwNSwKLQkweDkyMTA4OGE1LCAweDZmMTZiNjI5LCAweDc5ZTdiZDY5LCAweDc5OTkzOWNlLCAweGY4YjBjY2RmLCAweGFiYmY3ZWQxLAotCTB4OWNjZTFjN2YsIDB4ZjNjZjZjZjcsIDB4MjczZjY3OWMsIDB4MmQ2NzVhNWQsIDB4MmJhNDIyMjksIDB4Y2FlNmMyMjksCi0JMHg5ZGJkZTQyNCwgMHg5MTQ4OGVlMywgMHhlOTc2OTg4NCwgMHg1NWFlNTAzZCwgMHhkMDM0NDk2ZCwgMHg3NDgzYjVmNiwKLQkweDRlZGExNmI2LCAweDYyOTA5Yjg4LCAweDhlMzVhMjQyLCAweDEyY2ZkMGRkLCAweDkyYWRiMjZiLCAweDQ5ZWFiMTA4LAotCTB4Yzg0OGQ5YTEsIDB4ZWVjNGYxYjAsIDB4ZjBiN2U1YTYsIDB4YWZhZDA5NWYsIDB4NDI1Y2Y1YTQsIDB4YzFkMzM0ZWUsCi0JMHgyOTNmYTBlMiwgMHhjOTA4OTg3NCwgMHg5YzcwOWIzNiwgMHhjMzIxMTU3OCwgMHhhYzM5MDkwYiwgMHgzNDQzMmUyNSwKLQkweDhiZTBiYjIxLCAweDg5YWM4NDExLCAweGUzOTljNDcyLCAweGIxMGYxZTYwLCAweGYxOTZmZWQxLCAweDQyNThmN2Y0LAotCTB4NWI4OTFhNmEsIDB4NmNkNWYzYTIsIDB4ZjQyM2FkZGEsIDB4NzY4NDcyNzcsIDB4NjUyNDIyNGEsIDB4ZDZmMzg0YmIsCi0JMHgyZDJjZGY2YywgMHg1ZTY3YmZhMCwgMHgwNzVmYjVkOCwgMHhhMTkzNTdkZiwgMHg3YWIzZjQ2MSwgMHhkMDNiOGQ4OSwKLQkweDcxODBjZjYyLCAweGY2MWM3YjQ5LCAweDk2NTRlYjEzLCAweGJkNzBiODg0LCAweGU5YjdjNmMzLCAweDBlMzhiOWFjLAotCTB4YmZmNGEzZWUsIDB4MDc5ZjRhYjYsIDB4NTY2NmNmZWMsIDB4OWIzNTc3ZTMsIDB4YTY0ZmVlYjYsIDB4NjI2YTkxZjMsCi0JMHhlZmM1NmZlZSwgMHhlNmM1ZGZmNiwgMHhmZjg5ZThkNywgMHg2NzU4NjRmYiwgMHhhMmU3NWIyZSwgMHhjNGJhZmY1YywKLQkweDJhYWFkN2ZlLCAweGRmYjRjZDczLCAweDViMDhmOGRhLCAweGIzOGI2ZDBiLCAweDdhYzE4NzM4LCAweDBmM2FhNzhkLAotCTB4NjE5MTg4NTEsIDB4YTczYTNjYTcsIDB4NzdmZWJmZDEsIDB4ZDE4NDg0NzUsIDB4NThjMzg3N2UsIDB4MTViMzUyZmYsCi0JMHg0NzU2M2FlMSwgMHhjZWJiZjg1YywgMHhlM2E1NjM5NSwgMHg4ZTE3ZWUxZCwgMHg0OWI5YmRlMywgMHhhNGUwMWUzNSwKLQkweDI3NzMyNzBkLCAweDM3OTNmOWQzLCAweGI0NTQ5NTZkLCAweGU2NDExYjFlLCAweDIzZDYwMjNhLCAweDVjYzdiYmQ2LAotCTB4MDYyZTYxNTYsIDB4MWMyMjc0MzgsIDB4NzA2OTM2ZWEsIDB4NDczYTE1ZmQsIDB4ZmY1Y2YyZjYsIDB4MmFjYzUzNzcsCi0JMHhmNGMwZjc5YywgMHhmYTVlNzRjZiwgMHg3YzZmZDNmYiwgMHg2YmE5Zjg4NCwgMHhiMDZkZWM5NSwgMHg3NDhmZDZkZSwKLQkweGFjMDBmMmQzLCAweDc4OTM1MzNmLCAweGY2MTAyNjQyLCAweDNlN2IzM2RmLCAweGVmZTk1OWQyLCAweGZjMzM3NjEzLAotCTB4YTlkZWVkZDUsIDB4YWVjYjQwNTksIDB4MWE0YmEzNTIsIDB4MzAzYzc4MGMsIDB4YWVhY2U4MDcsIDB4MjRjMjRmNGQsCi0JMHgwNjczOWZjMCwgMHhhNzQ5NDNjMCwgMHg3ODg0MWUwMiwgMHg0MmJlODFkMywgMHhlODAyMzNlMSwgMHgzYWFhMDhhOCwKLQkweDY3YTQ3Zjc3LCAweGZhNjRlNjY3LCAweGRkMzQ2YjdkLCAweDhlZTgxMWJmLCAweGQ5MTg4M2VkLCAweGJlYzEwZmVmLAotCTB4YzdlOTAyZTIsIDB4YWZlNjBjYjksIDB4ODAxZGI3MDgsIDB4Mjg1MTUxNzMsIDB4YWMwODVhZDksIDB4MjNlZTE4ZjMsCi0JMHgzMWMxOWNiNiwgMHg3OTk1M2Q3MCwgMHgwYWIzZDZjMSwgMHg2MThiODllNywgMHgzNzhkMTJmMywgMHhlNzEzZTYxZCwKLQkweGQ2NGQ0ZTJiLCAweGZmN2Y0MjkyLCAweGZhNTc4ZTI2LCAweDRlZmQ4N2JiLCAweGZjZjIzOWZhLCAweDZkZTI1NmViLAotCTB4NzVjMjU5YWIsIDB4NTVhN2ExMDcsIDB4NTNkYWNmODAsIDB4YTdhMzBmMWUsIDB4OTNkMDBkNGUsIDB4OGZhMGJmNTgsCi0JMHhjNjY5MzY1NywgMHg1NmUzOWUwNywgMHg2YmM3MGViMywgMHgxZDcwNmIzNSwgMHhhMjdlMDBjZiwgMHhlNzY1YTk2OCwKLQkweDA2NTU5OWYyLCAweDE5OGZmMjM3LCAweGY5NDg4ZjYzLCAweGViZjcyZjE0LCAweGFiYmU1MDNjLCAweGVkMGI1ZjlhLAotCTB4ZjliMzI2ZWYsIDB4MGY1NGFhZDcsIDB4YTNlZDdkNDAsIDB4Zjg4MmQyNDYsIDB4ZjAwOTNmYjQsIDB4MTIzZDMwM2MsCi0JMHhhNTViNTJmMSwgMHgzOGU5ZWI3MywgMHhiMTI2YmY0ZiwgMHgyNmU4Y2JiYSwgMHhjZWI1OWZmNCwgMHgxZmExMGJhOSwKLQkweGJkYjMwZDg5LCAweDFlNzM3ODA0LCAweGY1MzM0ZGQyLCAweDNkMmIyN2E1LCAweGZiZmE1NmY2LCAweGNlNzYzNjg0LAotCTB4ZGI2YTFlMDQsIDB4ZGQwMTVkMTgsIDB4NWMzOWJjMjMsIDB4Y2I3NGYwZmQsIDB4YzdjMDhkY2UsIDB4YTMzMzI4OWEsCi0JMHgwMDI3NGEwNywgMHg2MTZkOWFlZiwgMHgzNjA2YjNlNiwgMHhlODA0YjdkNywgMHgzN2FiMjJkMiwgMHhjZjk5MjdiNCwKLQkweDM1ZWJmOGU2LCAweDgzYTAwZmYwLCAweDg2NDhjNGVkLCAweDc1ZjA3NWQyLCAweGVlNzJhMWJlLCAweDE5ZDQzYzAyLAotCTB4MTRiNTg3YmMsIDB4ZmE0ZjQzYjUsIDB4YTI4NzVjZjAsIDB4NWZhNjlhZGIsIDB4ODQzYjM4MGQsIDB4NDc4OTY1OTAsCi0JMHg1NWU3MTRiMCwgMHg0N2VkOGZkYiwgMHhjNzBlZmY3YywgMHhkMjUwY2JmYiwgMHhiYTczMGZmMSwgMHhjMzZhMjlhOSwKLQkweGI2NzM1OGYzLCAweDcxYjFjZjExLCAweGM2NjdlMzNjLCAweDRkN2U3MjUzLCAweGJmN2MxM2M4LCAweDhhOWM3MWViLAotCTB4NmFiMWI2ODgsIDB4OWY4YWY3MGEsIDB4MTIxNmU2NGEsIDB4OTEyZTVmOWEsIDB4OGU4ZGEzODgsIDB4ODNhNmM1ZjcsCi0JMHhiZTAwZjM5MSwgMHhlMzU1YmY1NywgMHg3ZWQ4YzM3ZSwgMHhkMGZlNzA0ZiwgMHgxYzAyOGRiNSwgMHg0NzUxYmRlOSwKLQkweDQ2ZjdlYzgyLCAweGUzOWUyM2M3LCAweDg2YmRlMDEyLCAweDdiNmJiZWMzLCAweDUxM2Y4OGY5LCAweDhiNmQ3MTdhLAotCTB4YmRmZjAxYjIsIDB4YzNjYTdkYjgsIDB4ZWVlYmEyN2YsIDB4NTM2MjVhZGEsIDB4MzhiNGQ5MDMsIDB4NzE3YzdlOTAsCi0JMHg5NDJkYjY2MSwgMHg2NGQ1NjI3ZSwgMHhiZWYxNDRiYywgMHhlNDYwZWRhYSwgMHhjYmVmZGE0OCwgMHhkNDJlMGM1ZiwKLQkweDdjZGQ3ZWQzLCAweDUzNWUxNzlkLCAweDFlNWMwMTM3LCAweDlkYzc2NTdkLCAweDk2ZTM1ZWQwLCAweDc3OGY4MDYyLAotCTB4M2ZlOWZiNmQsIDB4NmY1N2NmODEsIDB4OTMwODAwNmQsIDB4YTNiYzVmOTYsIDB4NTRlZmQyZjMsIDB4ZjdlY2NkZWUsCi0JMHhmODY2NTE2ZCwgMHg5ZjE3Y2JlZSwgMHhkZGUwMTNiYywgMHhlZDgyZDZkMiwgMHg4Y2RjNWUxNywgMHhlY2FmMDNmNSwKLQkweGU5YmZmYjc4LCAweDQ4OGViNTc3LCAweGUxNzc3YzFiLCAweDk3ODhmZGI1LCAweDBlYzZhNzVhLCAweGQ3NDUwZGZiLAotCTB4Y2ZkY2VjY2YsIDB4ODQ5YjY0ZjgsIDB4MzE1NDhkZTcsIDB4NWFlODI1ZmUsIDB4YWY5N2VmZDAsIDB4MjgxMTFkY2MsCi0JMHg4ZWQ1NmExZiwgMHg0ZmJlMDk1NCwgMHg5MjVlZGJkMCwgMHg5Y2EwNWU1MCwgMHg2ODhjMzc3OCwgMHhkZmZlZThjMiwKLQkweDk2ODFhNWEzLCAweGZiZTVlYTE1LCAweDJjZTc4MGI1LCAweGQ5MDhjZmM2LCAweGE3YjVlNDJjLCAweDZmN2VmZTg0LAotCTB4NzVlNmM0NDksIDB4M2VhZWVlNzAsIDB4MjZlNzhkOTgsIDB4MWQxZGQxODIsIDB4MzFjN2MwYzcsIDB4NDM0NDM4YzAsCi0JMHgwZmJlYjBlYywgMHhiMmRiNmZkMywgMHhhNTQ3Y2U4ZSwgMHg5MjRlZmIzNCwgMHg0Nzc3OWM3MCwgMHhjZTA1YmVkZiwKLQkweDhjMmY1OGJkLCAweGRhMGYzOTM3LCAweDllNDE1MzJiLCAweGYyZDdkZjg4LCAweDY3MGRhZTc1LCAweGU3MjJlZGYyLAotCTB4YzY2NTM1MzcsIDB4N2M1ZTUwYjUsIDB4ZjAwYWFjMzUsIDB4MGVmM2FmNTMsIDB4NzJmYzAwYjAsIDB4NWI0NzFkMTksCi0JMHg2ZGFlYmYxOCwgMHgzN2FkYWU1YiwgMHhlNzFjN2Y2MiwgMHhhMGE3Y2ExMywgMHhlOWU3YTNjYywgMHhmNDlmM2QxYywKLQkweDBlZGZhZGFiLCAweGM5N2VmOTgxLCAweDE5Mzg2NGY4LCAweDNlOThmYjBlLCAweGYwMDQ4Y2ViLCAweGQ0NmRjODhiLAotCTB4N2Y1YzIwZDYsIDB4OTYyOWRhYzEsIDB4YWU4N2RiMDIsIDB4NDk0N2U3NjAsIDB4MjMxNmI5YjcsIDB4YjczYjFiODcsCi0JMHg1MzJiYmJjOSwgMHhmNGI3YzhhZCwgMHhmYTAxZmViNiwgMHhiM2I1NzI1MywgMHhiZjdmNDRjNSwgMHhhNmQzODU3YiwKLQkweGU2Zjc3NGE2LCAweDUzNjM2M2Y5LCAweDFjOTVmZDY4LCAweGFiZDIwODY5LCAweGQ4ZjI2MjVhLCAweGVhNzljNDY1LAotCTB4ZTdjOGNhOWEsIDB4MmQyM2JkNzQsIDB4OWJjNzVjZWMsIDB4NDI4ZWU2ODksIDB4MzQyYTllM2YsIDB4Zjg0NDYzNDQsCi0JMHhkNWFmOTBmYiwgMHg3YWYyZTVhZCwgMHgzMTI3NWIyYiwgMHg5OGE3ZDJmOCwgMHg4ZWYxOWZiMCwgMHg2ODNhZmY2OCwKLQkweGViMTFhMzNmLCAweGYyZmJmNGJlLCAweGFhYmEzZTQwLCAweDc1NWEzZTUwLCAweDgyMGJkZWI4LCAweGZlNTcxMTdmLAotCTB4N2YzZjNjZWMsIDB4MTM5YjdhYTAsIDB4NDc1ZTM1ZTgsIDB4OGZlMzIzNGIsIDB4ZmJmYzc0OTUsIDB4OTY5NWE1MmMsCi0JMHgxZjE5N2YzOCwgMHg3MDk1ZGFjZSwgMHg3NGVkMGY1YSwgMHg3NjJkZDc5YywgMHg4YjZjOGVmYywgMHg1MGFmYzk5MSwKLQkweGUzOWViMDdjLCAweGJiYzkxOWZmLCAweGI1Y2NlODE4LCAweDc0MGNjYzM3LCAweDc3YTc3ZjVkLCAweDVjMWYyMDQwLAotCTB4YjA3YzYxNmIsIDB4Zjc0ZGQzOWIsIDB4ZWYyZjQ2NWUsIDB4ZDgyZTU0YWEsIDB4NmU1YmJiZGYsIDB4YTg3NDBjZGYsCi0JMHhmZjAzYzc5NCwgMHg4Njk1NzYyYiwgMHgyZWRjOWI4ZSwgMHhjOTJmMDE5OSwgMHhmMGNiMjY5YiwgMHg1NWJhZjU0NywKLQkweGU1ZDY1N2EwLCAweDVmODE0MzQ4LCAweDdmY2JlZDQ4LCAweGQ3YWQxYjc1LCAweGJkNDFiYzUzLCAweDlmM2YzNzdlLAotCTB4ZWY4NTRmNTQsIDB4MTcyYmRiZWIsIDB4YjEyOTdjYzIsIDB4MTJkNGQ5NzcsIDB4NTM2MzQ3ZWEsIDB4OTZiZWJkNjgsCi0JMHg3ZmY5YzMxNCwgMHgzN2JlY2QyNiwgMHg5MTIxZjcwNSwgMHg0ZjIwYWM5NywgMHhmMjBkNWVhOSwgMHhmNTBmMmUzNCwKLQkweDU2ZTc3YWYxLCAweDhlNDliZmQ0LCAweDg1YmRjYjhlLCAweDI3ZDdhZmE4LCAweGY5YzFiNGNlLCAweGY2MjdjM2VhLAotCTB4YWY3ZDQyYWUsIDB4MGI2ZTFhZGUsIDB4Njg0ZmRmYTMsIDB4ZmE2MDFlOTcsIDB4ZjViMDkxOGUsIDB4NGZhODc2NDgsCi0JMHhjMzc0OGY3MCwgMHhmODA5MmU3YSwgMHgzOWRiNTI4OCwgMHhkZWVmZTYwNywgMHhkYTJlMjdhMywgMHg3MWRlZGVmZSwKLQkweGJkMDVjZjI4LCAweGEzZDc1ZTk4LCAweDk4ZDY4ZjVjLCAweDJmY2JkMDI1LCAweGU3YzlkYjM2LCAweDY1OTgyNTU0LAotCTB4MDViYzIyYjEsIDB4NjdiNjZiM2MsIDB4NWM5Y2UwYWEsIDB4OWZmMGVkZTIsIDB4NDNjYjllMzUsIDB4NDJkZDY5ZmEsCi0JMHgyZDY3ZDIwZiwgMHhmNTYzZGJkNywgMHgwMzA3ODJmNiwgMHgyOGY0MjdmMCwgMHg4MmZjMWQyNSwgMHhhNmYyN2ZkMywKLQkweDYyMWMxMjQzLCAweGFlZWU3ZTI1LCAweGJhMDY5ZTI2LCAweGE5MzdiYmJlLCAweGE4ZjkyNTNjLCAweDdjOGZkZDVmLAotCTB4NmM4ZTk1N2YsIDB4Yjc4ZWZhOTEsIDB4OGE4YmYzODMsIDB4ZjAwMTQ3MTgsIDB4NDZlOThhYzksIDB4YWE3ZjIwNWIsCi0JMHhjMmFiYjcwOCwgMHg0MjNjZjQwMiwgMHhmYTJhNDUxYywgMHgxMzc4ZjlkZCwgMHhkODc1ZmZjMiwgMHhhY2JkMTA3NywKLQkweDYzOTY3ZmI3LCAweDIyYmJjMDJiLCAweGE3ZWQwYzIxLCAweGY5NWQ1YTdiLCAweDVkNmQxZmE0LCAweGU3MDU1ZTE1LAotCTB4MjM2M2YyOTIsIDB4ZWQzMzRkZjIsIDB4ZGY4YmJmNGYsIDB4ZTQ0NWYyMzIsIDB4ZDcwNWE0YjMsIDB4NjY2MmQ5YjUsCi0JMHg4YTM4YzRlMywgMHg2NGI1ODExYSwgMHgzOTMwNTYzOSwgMHhkYjA1YjI2NiwgMHgzZjdjN2RjZiwgMHgyOWNmYTYwNywKLQkweDRjOWQwMTUwLCAweGY0ZjRkYTM1LCAweDkyZGZhN2JiLCAweGI4ZGQyM2U2LCAweGYzODRjMGE4LCAweGVjNzE1Y2UyLAotCTB4ZDhhZjY2MmUsIDB4NTM4OGVlODAsIDB4N2Q1NmZhODMsIDB4OWMxZGMzYTMsIDB4ZDcxZDE4YWUsIDB4ZjQwYmZkNTMsCi0JMHg4ODU3NGE3MCwgMHgyNjc2ZmFiNywgMHhkZGI4MjI3ZiwgMHg1MDIyN2MwNywgMHg0YWU3MTVkZiwgMHhkN2UwNWI5YywKLQkweGRlODIzNzQwLCAweGQxYmRiOWM0LCAweGNmY2RkOWYzLCAweDdmZGQzNzQ3LCAweGRlOWE3ZDIwLCAweDZlYjk3NDY0LAotCTB4ZGExNGI1OTUsIDB4NzMxMDU1ZDcsIDB4YjRhYWJkYTAsIDB4Zjg3MGFjODMsIDB4NjJmYWRkNjgsIDB4MTFjNjFiODQsCi0JMHhlMmNlMmU3YywgMHhhOGZjMGIzOCwgMHgzNWQxY2I3ZSwgMHgyZjljYjY0OCwgMHhmOGY5YmZkNSwgMHg2N2U5NmI4MCwKLQkweGNmMWIwZDA2LCAweDA3NzA4ZWUwLCAweDgyODE4ZmQyLCAweGE1ODg1NGRiLCAweDQ0NzNmODBiLCAweDEyZGY1YzkzLAotCTB4ZGNiOTNmZTUsIDB4NjVmYWNlZjgsIDB4N2MwMWE0YWUsIDB4YThmMmZkMDksIDB4MGI0ZmY5Y2EsIDB4NDUyOTJmZDcsCi0JMHhhNjI2ZjQ5MCwgMHhhZjAzYzY1ZiwgMHgyNWIwN2UwNywgMHgyNGZjMGRjMiwgMHg3NzM4OWUzZSwgMHg5N2NmNTkwNSwKLQkweGJjMDk5Y2ZjLCAweDNlMjMzYjBhLCAweDFjOWY3ZDkyLCAweDUzMjRmNGNkLCAweDhiMmVmYjM0LCAweDBiZjYwMTk3LAotCTB4Y2FhYjA3OWUsIDB4NDNhODg2NzksIDB4OGZkMTAxY2IsIDB4YzVkYjBiYWUsIDB4MWZlZDdhN2EsIDB4ZmM2ZjViMDMsCi0JMHhhY2I2MDNhMywgMHhmZmE3YzAwYiwgMHgwODU2ZGQ1YywgMHhlZjVhY2U3OCwgMHhmYTM3Y2NkMSwgMHg0OGYyMTFlNywKLQkweDdlYjAzZjQ5LCAweDlmYjA1YjkwLCAweGRmZDBkY2NhLCAweDc2ZTdlZWI1LCAweGNiOWU4MjljLCAweDYzM2FmOWY4LAotCTB4ZjJkZGY4MjEsIDB4NjhlYWU3MTgsIDB4NDUxNTlmNWEsIDB4ZmYxNDMxZWMsIDB4MjNkMWRlYjMsIDB4ZGYxYzkxM2QsCi0JMHg2YjQzYjAwMCwgMHg4ZmE1YzQzNCwgMHhkZDZhYmMwNiwgMHhmZTNjMDBkZSwgMHhmYjQwZjAwZCwgMHgyZTBjOThmNSwKLQkweDJkMDczZDM1LCAweDY4ZTJjZTMxLCAweDhjYWI5ZTNhLCAweGM3YTAzY2Q4LCAweDBiZjI5ZjdlLCAweDUzYzQ5NzM4LAotCTB4ODFhNGZjMGMsIDB4OGUwMTIzNzgsIDB4MjM5Yzk4MmYsIDB4NzU3YWJiZTAsIDB4YTlkNDNhNjcsIDB4ZjMwZjkzMWQsCi0JMHhlY2MxMWIzYywgMHhiNTUxZGYyNywgMHhjNzg1MjA3YiwgMHg0N2Y3ODM2NSwgMHgyZTdhZTkyMywgMHhiOWIyYzhhZiwKLQkweGRmYTczOGU4LCAweGRmOWVmZGZjLCAweGVkMmZhZmQzLCAweDE5Y2QyMmY5LCAweDBkZWI1N2MwLCAweGM2MjY4MzJhLAotCTB4NDg5NmVmNWYsIDB4YmUxMDViNTUsIDB4Yzk5YTIzM2IsIDB4MDlkYmNjZDMsIDB4NjhiODA0ZTksIDB4YWViN2E4N2MsCi0JMHg4MDI3YjMwOCwgMHhiZWM1NjdkZiwgMHhlOTZiODRkMiwgMHhjYTU3MGRmMywgMHg5ZTYwM2I4OCwgMHhmYTFmZGEwNiwKLQkweDRiMTk1YzM1LCAweDhjODI0M2RjLCAweGY5MDNjNzRiLCAweDk5MjU3MGQwLCAweDNjZDg2MmI4LCAweDMxNTQzN2MwLAotCTB4ZmJmOGNlNGMsIDB4ZWQxNzEzYTcsIDB4YWE0NTVhN2YsIDB4ZTdmYmFkODMsIDB4YmI1ZjBjZDEsIDB4YWMxZjE5MDksCi0JMHhkN2RmMDc3ZCwgMHhmY2VjN2VlZSwgMHg2ZTQ4MzZmYSwgMHhhZjE2MGZiMCwgMHgxNGQ0NzkzMCwgMHhjZmU5OGJhNCwKLQkweDM2MmQyZmEwLCAweDQ4YWEzY2JiLCAweDhmOTQzZmUwLCAweDRlMzQ0NjBkLCAweDY0N2I1MDM1LCAweGY0Njc5NzFlLAotCTB4YTAyOGNkM2IsIDB4Y2YxOTk3NTcsIDB4YzM5ZjkzYTEsIDB4N2RlZmVkNzksIDB4YzU4OWZlMDMsIDB4NDUxODYyMWEsCi0JMHhiMDZmOTljNywgMHhiZmExNGUxZCwgMHgyNjM4YzlmZiwgMHhjMmM0YzQxMiwgMHg4M2M0YTY4NywgMHhkNTk4NGIxYywKLQkweGJkMjI3M2E4LCAweDdlODMzMThkLCAweGVhNTE5MTJhLCAweGE1YWUyMzZmLCAweDhmNTA2OTBmLCAweDc0YTI3YTQ1LAotCTB4YWM3MThiYTAsIDB4M2EwMGJhMDQsIDB4ZjU5ODNhMDQsIDB4ZTI2YmUzMjAsIDB4NWU3ZTVjZmIsIDB4NTlmODc0OTUsCi0JMHg4ZWNmN2MwOCwgMHhmMTgxY2IyOSwgMHgzNThlNTEyYywgMHg1ZTBmZGY0OCwgMHg2ZWJmZjE5MiwgMHhmM2YyZmJjOSwKLQkweDRkY2JhNzQwLCAweGRmNDg5N2I2LCAweDcwZTEzZmZlLCAweGQ0ZTgyOWVmLCAweDJlNWEyYzkxLCAweGVhM2E0N2ZmLAotCTB4OWRlZjFkYTMsIDB4Njc1ZDNlMDQsIDB4YTBkNDdhMzAsIDB4NzZkNmVjNTcsIDB4MjgzZWM1NzksIDB4ZDk0NTA2MGUsCi0JMHhmMDczYzI5ZiwgMHg3Mzk2NTFjMywgMHgwMjQ4MjY5NCwgMHhlM2Q3MWRmZCwgMHgwM2JmMDBkYywgMHgwMzYzZGI5ZCwKLQkweDE1MWFkY2U5LCAweGViYTI3NDBkLCAweDEwYzM4YmM1LCAweDQ5MGJjN2VmLCAweGQxZjFjOTM1LCAweDMxZjExNDcxLAotCTB4MDFkNzYwZGYsIDB4MWRkODE3ZGMsIDB4NTE1OWJlYjgsIDB4MGNiMzYyOWUsIDB4NmZlYWI5ZmUsIDB4Zjg3MWJmNmYsCi0JMHhmOWU3ZTdhZiwgMHg2MWQyOGViNCwgMHg4M2IwNzM5MCwgMHhjMzE1NDNjMywgMHg2NGU5YzZmOCwgMHhkM2E3YWY0NiwKLQkweDI4MmVmNTQ5LCAweGY2OTJkMTA3LCAweGQ3OGZkZDNiLCAweDAwN2Q3OTBiLCAweGQ1OWUyZWZmLCAweDc5N2U3MDBmLAotCTB4YTc3ZDlmM2EsIDB4M2UzM2U3OWMsIDB4N2IxOGVjY2YsIDB4ZjY4YmMwMDcsIDB4NGYwMGU4ZjMsIDB4NDFiOTg3NmYsCi0JMHhlYWZjYTY0ZiwgMHg4ZjEzYTcwMCwgMHgxNTVmOTAyNSwgMHgxZjAwMDZmOSwgMHhmOGE2MjllYywgMHg1NzU5ZmJhMiwKLQkweDAxM2Y0YmVhLCAweGRlOWY2NGZjLCAweDdkN2FjNWJjLCAweGQ3YzI3ZGJjLCAweDk3ZTU5ZGY1LCAweGExYWZjYThkLAotCTB4NDlmNWY5MzIsIDB4ODg1ZjkzMzQsIDB4MWQxMmJhMjcsIDB4MTFiMmFiZDMsIDB4ZWExNzQ4M2YsIDB4NWJjZmM3MWIsCi0JMHhmNGVlMGM2MSwgMHg1MWEzNzg5YywgMHgxY2YyNzk0ZSwgMHhhZmZkN2MwMSwgMHg4ZjgyNmUxYywgMHhlMzk3MGU5YywKLQkweGY3ZjdjNWQxLCAweGViNDczZjI1LCAweGRlNGNjZGEzLCAweDMwZTk3Y2Q5LCAweGUwZThlOWNlLCAweGM3ZWQ1Zjc4LAotCTB4MjM5ZTM3NDcsIDB4MGM0ZTZmYmQsIDB4YThmYmI3YTUsIDB4NDQyYmEwYmUsIDB4ZjU4N2FjN2MsIDB4NzM0YmIxZjQsCi0JMHg3Mzg1N2YzZCwgMHg4OTgwZjBkYywgMHgyMmJiZGM4MCwgMHhhMWYyMmJlNiwgMHg5N2NhOTM3ZiwgMHg0ZThmMDY3NCwKLQkweDg3YWZkNDFkLCAweDI3ZDFmMDFmLCAweGQ0OTUxYTUxLCAweGQ1YTAyMjc0LCAweDcxYzU2MjFjLCAweDllMzMyOGM4LAotCTB4M2U1ZWIwYjMsIDB4ZjM4OTg5YTIsIDB4ZWYzOTQ3YzMsIDB4YzhhZjhlMjksIDB4MGU3MzQ5MTgsIDB4MzYyMzZhZjAsCi0JMHhhM2U3MzdlOCwgMHgyOWIzNGNhZiwgMHgxYjMyNWM5ZCwgMHhjZjJhMmE1YywgMHhkMTljYWFhZSwgMHg3OWVmZTAzMSwKLQkweGJiZWEyOGY4LCAweDAxOWU3NGE3LCAweGVkMjBjNmFkLCAweGNmMGJjZjNhLCAweGI5ZjZmZTRhLCAweDc0YmI1MzNmLAotCTB4ZWVlZjFjZjQsIDB4NzRjOWZhZWMsIDB4YTc2NzdmYmEsIDB4ZDhlNzA2ZGEsIDB4MWZhZmYyYjksIDB4YTViZDAzMGMsCi0JMHg0ZmViNmI1MywgMHhkN2FlYWU1MCwgMHg5OTFhM2VjMCwgMHgyNTRhNzY3ZSwgMHhlZmM1ZmY4NywgMHhjMTg3ZWRjOSwKLQkweDU0MGYwYzMxLCAweDEzM2E0MDlmLCAweDU4NTRlMGZjLCAweGViYTEzZTY0LCAweGZkM2M0MjU5LCAweDUxZTdlZTgxLAotCTB4ZWY0YTE3YzMsIDB4MTBmNzI1ZjIsIDB4MTgxNjI3Y2EsIDB4N2RmZDIyYTcsIDB4ZTg1ZGMwZjEsIDB4OWM0ODVlNmYsCi0JMHhiOWU2MmZjOCwgMHhlNDBjN2ZiNCwgMHhjYWQ2MGJhMywgMHhlNTVhOGJlYiwgMHhjOWNmMjVmNSwgMHhkZmZlYmRlYiwKLQkweDRlZmZiOTcyLCAweDk4NjM1Mzk0LCAweDBiYThiYTVjLCAweDg2M2UzZWRlLCAweDk3NzdlM2QxLCAweGVlNTA4M2M3LAotCTB4ZjljNzk1ZjYsIDB4ZTM5NWE3MjgsIDB4YWVlNWMzZGUsIDB4MWU0MmNiOTAsIDB4ODQzMTVjMzcsIDB4ZTM4OGM3MTgsCi0JMHg3YzFjNWM1YywgMHhmNWYxZjdmZCwgMHhhMzMxNWMzNywgMHgzZmRiZWY3YywgMHhkNTNhZTUxNiwgMHg4MTNiZjBjNCwKLQkweDg5MmI4NmNmLCAweDBiYThiYmY4LCAweDJmZGZkMDdkLCAweDhjYTNjNzE1LCAweGMyMmU3Y2RmLCAweGRmODVmZTdmLAotCTB4MTllZmQwNTcsIDB4ZDA5MjE4ODksIDB4ZmI5MjdiNWUsIDB4ZTBmOWNjNmIsIDB4ZjIwMzNhODcsIDB4MzlkOWUyOWQsCi0JMHhhNWVkYmM4ZSwgMHg0OGY3OWM0YiwgMHgzZjRkMDBkMiwgMHhmNzJiN2QzZiwgMHg4MmUwZTk0MSwgMHhkNTlmODAzNywKLQkweDcxNjI5OGM2LCAweDMwNjRjMWRlLCAweDczZTgyYmNjLCAweDUxMTVjM2NlLCAweGIwZmZkZjIwLCAweDUwMjEzY2IyLAotCTB4NmJmNWVhZmYsIDB4NDQ3ZDk4ZTgsIDB4YWYyNjUxODgsIDB4Y2Q5ZTQyODgsIDB4MmJmMmE3NmIsIDB4MDE4OGY1MWYsCi0JMHhlZjlmOTc0MCwgMHhiOWY0ODE5YiwgMHg4MWUyZDg5MCwgMHhlOWY2N2I2ZSwgMHhmN2ZmZDFkMywgMHg1ODk4ZTUxZCwKLQkweDNjZDcxNGNmLCAweGE5MmZkMzJkLCAweDY1ZTdhMDkwLCAweDRhN2Y5ZjMyLCAweDU0NjdkMzA3LCAweGY1MTZiYjA2LAotCTB4OWFiMTNiMTUsIDB4NjRhNGQxZTMsIDB4MTMwYTk2ZjIsIDB4MTY4ZmFkMGQsIDB4NWExZTIwNzUsIDB4MjMzN2M1MWYsCi0JMHhmZWJhN2Y0MSwgMHhmMzI0YmNkMSwgMHg5ZTcwODk5ZCwgMHgxYWFmMzBmNCwgMHgxMTNiOTBkOCwgMHgzNjExOTZjYSwKLQkweDkyMjU5NDJiLCAweGMxZDZjMzQzLCAweDM0OTYzY2YwLCAweDJhZjdjMmE2LCAweGY0Y2Q1NzgzLCAweDc4ODJiYTI1LAotCTB4NjNlNjJmZTgsIDB4YWZhZjEzNzUsIDB4Y2U3OTdhOWUsIDB4NjhkZGY4MjIsIDB4ZTNhZjczYzIsIDB4ZjA1NTc4ZWIsCi0JMHhjMDMxMDMyZiwgMHhjZjQ2ZjViZSwgMHhlMjRmMTg5NywgMHg4YWNjYWJhNSwgMHgxZmFiYTg3NiwgMHg5YzNmYmI0MSwKLQkweGQ3OTgxMWI0LCAweDgyZTRiYzY4LCAweDU5ODk5YWNkLCAweGY5OTg3YTgyLCAweDAyMTFlN2IyLCAweDUyZThjZDdjLAotCTB4YjZiZTQ2MGQsIDB4ZjQ5YWY5MTMsIDB4N2JlMDYyZmUsIDB4MDNlNjhmOTQsIDB4YWVkOTBkMWYsIDB4MmVmZWEwZjEsCi0JMHg1ZjM0NTJmOCwgMHg0YmU3MGI1ZiwgMHgyMWMxODQ0OSwgMHhiZTcxZDg4NiwgMHgyMzE2OWIxZiwgMHhhZTMzOGE1ZiwKLQkweDg2ZmZhMDkwLCAweDk3YzhmMWM4LCAweGI0ZjAwMWUyLCAweDQ2YmM2NjNkLCAweDFjZTI2N2M2LCAweDk1NDI3YWYyLAotCTB4OTRlNDllYmMsIDB4MTRlNDBkZDcsIDB4ZTNjOTAzY2EsIDB4MDYzNmZjNDgsIDB4ZjAxYzkxZWQsIDB4ZDhjYjY4M2IsCi0JMHhjZTFlOTlmOSwgMHhlYjBkZDVkNiwgMHgxMTM5ZmJhMywgMHg5MzdmZmFhMywgMHhiYjcyNDVmYiwgMHg0NzVhM2ViNSwKLQkweDRmMTUwZmQwLCAweGE4YzFlNjJkLCAweDYxODg5YzA3LCAweDJlNjdjMDdhLCAweDkwZmI1NzY4LCAweGZlZTA5ZWZmLAotCTB4MWRlM2E5ODMsIDB4ZGY4YTFhMTUsIDB4MDdjOTcyZmIsIDB4OGY5ZTVhNzYsIDB4ZWY4NjllNzMsIDB4YWM2OTFjNjcsCi0JMHhhYWY1YTVhYiwgMHg4NzllNDlmNywgMHhlNjI1MDU5NiwgMHg5ZjE0ZWQ5YSwgMHg2YzliNjY2YiwgMHgxYWZhZDI4ZiwKLQkweDU3NmQyMzEzLCAweDIyZjUxZTljLCAweGI2OThmMjAyLCAweGEyMjU1NjZmLCAweGZjMDFhM2ZmLCAweDZiZmY3NGFkLAotCTB4M2EwMDZmNDAsIDB4NWVkMDRmZTgsIDB4MWFjODdhYTYsIDB4NzliN2VkMDMsIDB4Y2ViY2Q5OWQsIDB4ZGYyYTdlMGEsCi0JMHhmYTA3ZjA1OCwgMHgxNmYzMTExNiwgMHg1YzNjZTQxMiwgMHhlMjhjZTdhNSwgMHg1M2E4NDVmNSwgMHhiZTljNGEzYywKLQkweGUxNWJlZmM0LCAweDJmNTYyY2Y3LCAweDFlNzYwYTE5LCAweDgzYWIyZmZiLCAweGNmZjAyODMyLCAweGZkZGNlOGU0LAotCTB4YTUxZDNkNjEsIDB4Y2Y1YTM4ZGEsIDB4N2Y0MzYzMWEsIDB4NjE3Y2UxMzEsIDB4OWY4Nzk4OTgsIDB4NzNmZTkxYmIsCi0JMHhiYzA1ZWQ4MCwgMHg2NGYxZGQ5ZSwgMHg5NzhjM2M0NSwgMHhjYTdlNTA0YiwgMHhkNjJjMGRjZSwgMHhjYTE4N2Y0YywKLQkweDczYzBlZGNjLCAweGZmZjEwNzdiLCAweGZiOTVlMzA3LCAweDhkYmM0N2M3LCAweGNlZWY2ZGUxLCAweDYxZDhmMTY2LAotCTB4Mzg3ZWNmMWEsIDB4NTk3OTIzZDcsIDB4ODc3NGNiYzAsIDB4YTUxMWZlNTQsIDB4ZWQ4MzQyZDcsIDB4ODAyYjFlZTAsCi0JMHg3ZDg2YTFkNCwgMHhkZTNmMzUwZiwgMHg3MDhmZjMwMiwgMHg3YzAzMTQ3YywgMHhmMjgxOTQ2YywgMHgwY2I2NWEwMywKLQkweDU5Y2NkOWI3LCAweGY4MTU2ZmI4LCAweDQyYjViYTk3LCAweDQwYTNkOTFlLCAweDkyYWQ0ZGFlLCAweDdkMDBmZjVjLAotCTB4ZTExYThjNjAsIDB4ZTUzMTk3ZjMsIDB4Nzc5NGQ3NTEsIDB4M2FiMjJhNGQsIDB4ZDZhY2NlNTAsIDB4ZjNmN2ZjYzksCi0JMHg2NWZmOTk2MywgMHhlY2Q4ZWM1YywgMHgyYzA3OTQ1OCwgMHg5NjI4MzdkZSwgMHhkYmEwMDlmMiwgMHg3YzAzOTIxYywKLQkweGU3MWNlMDIyLCAweGE1NWQ3N2MzLCAweGNlNzUwZWJmLCAweDljZmNlZGU1LCAweGQxMGZiMzRmLCAweGNmY2IzZWEyLAotCTB4OGVhYmUwYmIsIDB4NjY5ZTc2NzAsIDB4NzQwNjkyMTAsIDB4MjIzNDk1MzIsIDB4YmE1NjNkZmYsIDB4N2RmYmNmMTQsCi0JMHg3ODA1YTVjNCwgMHhlMGM2NWE3ZCwgMHg2NTNkZDYyYywgMHg5OGFmNWNiYywgMHhhN2Q3OTBlNiwgMHgwZWY1Mjk1NywKLQkweDdmYmM3YjNhLCAweDc5NGUxOWRlLCAweDNmYTE2NGZiLCAweDhmZWI5NzhlLCAweDU1Y2ZmZWIzLCAweDg0YjVjYTBiLAotCTB4Y2RiZWViOTcsIDB4NTRmODNmMDAsIDB4MDNmODFjNmQsIDB4ZmEzMzI0M2IsIDB4OGMyNDNiYzEsIDB4MTk1NDM0ZmIsCi0JMHg2YzZmZTBkYywgMHg1YmYxNjc2OCwgMHhlZmQwNWFiMiwgMHg3ZTgwYzdiYywgMHgzMWRhNTY1MywgMHhiZWRmNTcxZSwKLQkweDgwMTQ1YTUzLCAweGI3NWE5NGFmLCAweDIwN2NmYzA0LCAweGM4Mjc1MTg1LCAweDljNzdhZTJmLCAweDgzZjdiYWQwLAotCTB4NTJjNGZjYmYsIDB4OWU3NGUyNGEsIDB4ZTFkZjNjODMsIDB4MTQzYmU0MTAsIDB4MzRjZWU5ZmEsIDB4MjhmZmY5ODcsCi0JMHgzYzdmYTMxNSwgMHgwMzYxMWNkNSwgMHhhYWFkNzliZCwgMHg2Yjg1ZmQxMCwgMHhiZjMyNGQyMywgMHhmNjU1YmFlZSwKLQkweGY4NGVmODBhLCAweGNhZmU0NTA5LCAweDZjNjkzZDc0LCAweDQzYTdmZTYzLCAweGNjOGQ4Y2M4LCAweDc2ZTZlNDNmLAotCTB4ZDMyYzc2NzIsIDB4NmFmYjY4Y2IsIDB4Y2UyOTRmZjQsIDB4NDEwYzVjNmQsIDB4MzMzNzExYjksIDB4NTU4MGZkMDcsCi0JMHhlMDQ1MDUxZCwgMHgwN2YyYTU4NywgMHhiMWQ5ZDNmZCwgMHhlNTVmZWM1NiwgMHhkNWZmNDAyYywgMHgxODE5YzZkZCwKLQkweGQ4ZTg2ODE3LCAweGY0Njg1OWFjLCAweDgyYzNjZmQzLCAweDA0NDgyMmVlLCAweDVmYWY1ZGQwLCAweGZkMWU5NzY4LAotCTB4OGU1NTU3NDIsIDB4ZDU3ZDAwMWYsIDB4NDRmOTNjZWEsIDB4N2JmODk3NGUsIDB4ODRiMmY5MjgsIDB4ZTY1YjVkZTMsCi0JMHhjMjg4YjE5OCwgMHg5ZDAzZTdhNSwgMHhhYTNiZWMwZCwgMHg1ZWJlMjA0MCwgMHhmZTQxNmJkYiwgMHg5MDRjOTlhNywKLQkweDI1MmVhZmNmLCAweDM2N2IyN2M4LCAweDE3YzhiZjMzLCAweDY4N2JlYTk2LCAweGI1MmQ1OTBiLCAweDhlZWUxZjIyLAotCTB4NWZmMDhiMWUsIDB4N2E4NDNjNjYsIDB4NGEyNmY1NDgsIDB4N2U3YzAxNGYsIDB4YmQ3OTU2ZDksIDB4YjJmYjMwODYsCi0JMHhiYTFmN2I3NiwgMHhmODI0N2U0NCwgMHg3OTZlZmQ1NSwgMHhlNGNkOTIzZiwgMHhiOWMzOGRiNywgMHg0MmQxZjM4MCwKLQkweDA1NGE2ZDg3LCAweDk2Y2FiZDJjLCAweDYyNDRlY2M1LCAweGZjNWUzZTA3LCAweDBiZmI4ZWJlLCAweDg1Y2Y5OTY3LAotCTB4NTk3YjhiMDEsIDB4ZDQxZTk2YmEsIDB4NjZhZjNhNjMsIDB4Y2RmMTk4ZTcsIDB4OTI4ZjNlNjIsIDB4ZmQ3MzE3OWYsCi0JMHg5ZDBkNGVlNywgMHhjZmFmZDBhNywgMHgzZjU2MTMxNCwgMHgyNzUwZWFhNCwgMHgyZGViZmNhYSwgMHgxZTg0ZmRlMiwKLQkweGMwYTlmODI1LCAweDQyNzBlOTU3LCAweDNiM2E1Mzg2LCAweDhmZGRmMDIwLCAweGQzN2MwM2Y0LCAweDI1Y2U5MWYxLAotCTB4YzY4OTU0YzgsIDB4ZWY2MDVkZjEsIDB4NTFmM2U0OGMsIDB4NWQwMTcwN2EsIDB4MzcwNjU0YjksIDB4YTkxYWVmZDAsCi0JMHgwMTg4ZTUxMSwgMHhhZTVhNjVmNCwgMHg1N2M4OWM5MywgMHhhOTc2YThkZiwgMHg0ODIzZGUwMSwgMHgzMjdiOTRlMywKLQkweDQ2NzZiZjgxLCAweDlkMjg5YzAwLCAweDlmYTQwZTFjLCAweGRmNDllMjE2LCAweDA4ZThjOTI5LCAweGJmMmNiYmRiLAotCTB4ODI0NzRhMGUsIDB4NjUzZTdiZWYsIDB4YmEwNGMwZmEsIDB4MDJhNzE4NjMsIDB4M2NiNDA5MDIsIDB4M2E0MTJkMjQsCi0JMHg1YTdjNjcxOSwgMHhhZDdmZmQwMywgMHg3OGQzZjY2MiwgMHhmYWMwZDZlMiwgMHhmYzcyY2MyYSwgMHhkNzk0NGI4ZiwKLQkweGExZjZiMmVmLCAweGRiZmY4YzBmLCAweGU0MjczYzM5LCAweDgyZWRkYmM4LCAweGRmMzkxMTZmLCAweDk5NTcyNGNhLAotCTB4ZTFmOGZiN2QsIDB4OGVhZWMwODcsIDB4MTAzOTIyNjgsIDB4OWQxYWEzZGYsIDB4Zjg5MDdmYWQsIDB4MmRlYzRmNDksCi0JMHhjNGY3YzNmNywgMHhmN2MzZjEwNiwgMHhhZmJlYjk2OCwgMHhjM2ZhYWZhMCwgMHgyN2FjZTYxNywgMHhlNzE0M2E3ZSwKLQkweGE4ZDIwZWUxLCAweDkzNzBhNDRlLCAweDhlZjE2MWRlLCAweDI4ZmU4MDNiLCAweDkwMzcwYzNkLCAweDQ4NmZkMDVjLAotCTB4ODk3M2YzMTEsIDB4NmRlODIxZjMsIDB4YzU0NWFmMjgsIDB4MjBjYWZhNzEsIDB4YTM1ZjQwMTksIDB4YmZkMGMzZGIsCi0JMHgxOWQwMDc3OSwgMHgzZTAyZGJhNSwgMHg0MmRmOTBhZSwgMHhkZTE5NmYyZiwgMHhhNTMyYWU4NywgMHg3OGUzOTQyYywKLQkweDFmMWM4NGRlLCAweDdmOWVkOTIyLCAweDcyZjQxMzI0LCAweDAxZTVlYTE3LCAweDg3MTMxNDc0LCAweDExZDI4OGZjLAotCTB4NzIzZWNmOWUsIDB4YTBhZWRlNTIsIDB4ZTNlZjgxMzMsIDB4MjUyY2RmNWMsIDB4NTM1ZjQ4OGQsIDB4M2QyYzU2NTUsCi0JMHgyZjRlY2M5NSwgMHg0MGQ1NGUzNywgMHgzMzI2ZjdmZiwgMHg3NDAzMWIzYSwgMHhjYmRmMDU5OCwgMHgyMGRjYTRlOSwKLQkweDkwZTkyYmFmLCAweDljMGFhOGNlLCAweGExOTc0OTU3LCAweGU4MDMyY2U4LCAweDk4YzdjODRjLCAweGE4ZDlkM2ViLAotCTB4Njc0ZTViYjgsIDB4ODI2ZWUyYTMsIDB4ZGFkZjA0Y2UsIDB4MzcyZTY2MTksIDB4OTZhZWRjODIsIDB4ZjkwYzBlNTAsCi0JMHhlYTA1YmIyMCwgMHg1MTMyZWIwMywgMHhiMTY5ZGNjZiwgMHg0NmY2YzQxZCwgMHg2OWQ0NWVkNiwgMHg0MmRlNDM1NywKLQkweDllZGUwYWQ2LCAweDdhODcyOGU5LCAweGE3NmQxMzQzLCAweDY3MWYxNzQzLCAweDJiZDkwZDc5LCAweGEzYzE3YjU5LAotCTB4ZTA0ZDA3OGQsIDB4ZmViMTcyYzcsIDB4NDZiOTdlNmYsIDB4ZGRkYjQ5MWQsIDB4ZDJmZjc4NmIsIDB4MzdhODcyZDYsCi0JMHhiZmZkNjVhYywgMHg2MGM4Nzg4MCwgMHhiNzcyODdjOCwgMHhhZGI3ZWZjMCwgMHhiMzMxYjRjZiwgMHgyNWI3ZTk5NCwKLQkweGE1M2JiZjdjLCAweDVmYjEwNzVkLCAweGU0YjdlYjJiLCAweGEwOWMyMWIwLCAweGQ2ZjRjY2ZkLCAweDRiM2VmOTNiLAotCTB4YzY3ZGIxMzYsIDB4NzhmNzdlN2UsIDB4NDU4YmE1MmIsIDB4NWZlYTE3M2UsIDB4NDNiNTU0ZTcsIDB4YjA4NWFmOTEsCi0JMHhkNmE1NGIzZiwgMHg1MWM3Mjg1NCwgMHhkZGE1MGJiNiwgMHhlZWFiNWI2MCwgMHg1YjYxZTJjNywgMHg3MTRkMTRlOCwKLQkweGUyMjE3ZmNjLCAweGFlYWYxMDQ4LCAweDlhNjdkMDBjLCAweDI0NWQ5OGUyLCAweDI2OGY4YmJlLCAweDhkOTExZmE4LAotCTB4NDQzN2I0MjYsIDB4MmNmM2NiOWMsIDB4ODUwZWMwOTEsIDB4NTBiZjQyM2QsIDB4NTk3MWFmNzEsIDB4OGMyZmE4OGQsCi0JMHgyZWYxMTBjYiwgMHg5ZDNlNjZhZiwgMHhhZmRiZTBiNywgMHhhZmYzMDZjNiwgMHgzZDMxYzczNCwgMHhiZjhmM2NlNSwKLQkweGRkYWJkZjhiLCAweDEzYmYyZTJjLCAweGUwMTkyNDg4LCAweDcwNTdmODdhLCAweDNjNDI3NzVlLCAweDE3MjcwOThiLAotCTB4NjU3ODBlMTksIDB4NzI3ZTI3ZjUsIDB4NmE1YWRkNjAsIDB4MzU1MTJmYmMsIDB4Y2MyMDVjNmEsIDB4MjNjYzI1ZDIsCi0JMHgzYzQ5ZDQ5YSwgMHhkNzdkOTE1MSwgMHgzYzQzNGUzZiwgMHg4NDA3OTYzYSwgMHhhMmRjNWZlYiwgMHhjMjIwM2NjMywKLQkweGMxMzRkOWY5LCAweGM3ZjU0NjllLCAweGUzOTUzZGYzLCAweDRmZTBhMzY5LCAweGUwMTBjODQzLCAweGRlMzhkMzRmLAotCTB4M2Q1MDMzZWUsIDB4YWI3MmU1MTgsIDB4NWUzN2MxNTYsIDB4MjFiMWJlNDAsIDB4NmYyZGZlYTQsIDB4NmE5NWYwNTcsCi0JMHhhZTYyZWYzZSwgMHgzZTI1MmY3NywgMHg0OWNlNGJkNCwgMHg2ZmNmMmM2ZSwgMHg4ZDc3N2E2MCwgMHgzNWVhMzhmMSwKLQkweDllOTkxYjNkLCAweGE4YmM0YjU5LCAweGNiNzUyY2Y3LCAweDM2Y2Q0MmY5LCAweDRkYWViZDc5LCAweDk3Njg2ZjVlLAotCTB4NWNmMjdiZDcsIDB4ODZjZjRmMzgsIDB4NGZlMGExYmEsIDB4MDNlZTdlYWIsIDB4MGI1NmRmZjQsIDB4ZjM5NmUyZmUsCi0JMHgzMjU2NDIxNywgMHgyMGVjZjJmZSwgMHhlZDI4ZTdmNCwgMHhlZWY3NmE3MCwgMHhhMWY4YzM4YiwgMHhlODJkNjY3OSwKLQkweDU4MjI3MzA1LCAweDk4ZGE4MmJlLCAweDY0YzA3Yzg3LCAweDE0MzgzYjQwLCAweDM5ZGE1MDFmLCAweDgzMjBlZjQyLAotCTB4MmEwZjlmODIsIDB4Y2YwMDBjNjksIDB4YzY3Nzc4MDAsIDB4OTIxZWRiNWQsIDB4MjFmMDJiYjcsIDB4MzlmYjkxZWMsCi0JMHg3YzUwYTYzZSwgMHg5M2JmM2NjMywgMHgxY2Y3NjhlYywgMHgzMWYwY2E1YiwgMHhlOTAyYjhjZCwgMHgwYzY1ZDNlMSwKLQkweGJhMmVjMjFmLCAweGFlYzgzYjc5LCAweDkwNzYyZWZlLCAweGNlMmU1ZmQyLCAweGIwOWE3NzU1LCAweDg3NjhhZDRmLAotCTB4Mjk4MDAwMzYsIDB4ZjM3YmFlOWYsIDB4OWZhMDBiYzQsIDB4MzU4ZWVmOGEsIDB4YzA0ZDM4OTMsIDB4MmE1NjNjNzksCi0JMHg5ZTRlOGZmNywgMHhlNDI4N2E3MCwgMHgyYjBmNmUzYiwgMHg5M2UwMGJmYiwgMHhmZmExYzQ3NCwgMHhkODQxMmViMCwKLQkweGU5ZmM2YzQ1LCAweGYyZWFmZjNjLCAweGU4YThjY2NhLCAweDg5YmRkOTZiLCAweDAwOWE2MTlkLCAweGM2OGY2Y2ZmLAotCTB4NGU3NjA5MTcsIDB4ZTcwOTU1Y2YsIDB4NDgyNWJhODUsIDB4ZmZkZmM5MWMsIDB4ODdjNDE4NzgsIDB4ZjlkZmNlZmIsCi0JMHgzZjAzZGZiZCwgMHhlMzAyMjE3YiwgMHgzMjU3OTc3ZiwgMHhhNmYyZWY3YiwgMHg3YzA3OTg4MSwgMHgwNTQ5Yzc5MSwKLQkweGRlMWM5NjFjLCAweGNlMTdiNmY2LCAweDFjMzFkMzViLCAweDdmNzI0NmFmLCAweDFkYjY4N2JkLCAweGUyNjMzYmQ1LAotCTB4M2NhYTBlNDEsIDB4MmM1NzQ2M2EsIDB4MWRmNjIxOWUsIDB4NDJlOTZmZGEsIDB4YzAzYmE2ZmUsIDB4MGE0ZmFjZTQsCi0JMHhmYTRlYmNjNywgMHhiOGMwODBmYiwgMHhlMzAyNTI0ZSwgMHg3ZTBlNDJjMywgMHgyZDZhZmRjYywgMHgxN2Q4YTViZCwKLQkweGM0YjQyYmYzLCAweDNkNjBiM2Q4LCAweGMxYmFjMzFmLCAweDE2OTFmNDNmLCAweGJiZjgzNWY5LCAweGE1NDhjZTIxLAotCTB4ZWU4OTQ5MmUsIDB4YTM4ODFlYmIsIDB4Mzg4MWJkNmYsIDB4Yzk5ZTJkYmEsIDB4ZjY5NGE1ODMsIDB4NjJjZDNmMzAsCi0JMHhjZWY5ODAyZiwgMHg3OWUxYjhmMywgMHgxZjNhNzcxZSwgMHgyMzUwZTJjOSwgMHg1ZjFmMTllMywgMHhlNDRkZmJjYSwKLQkweGYxMTBmOWU1LCAweGQ5ZGRmMTZlLCAweDM1NjE4MzY2LCAweDliMWZlYjVkLCAweDM2NzU2MTg5LCAweGY1NjdmMTI1LAotCTB4MzM5Zjk4OGQsIDB4NjdhYmVkOGIsIDB4MzlmMzA1YWYsIDB4ZjhhYWJmNDUsIDB4OGViMGE1ZDIsIDB4MThjNzE2MjEsCi0JMHg5ZWI2MTcyOCwgMHhhOWZhMDVkMSwgMHhhODNmNjA3YiwgMHhmNTdkYjA0ZiwgMHhjYzUyYjE4NCwgMHhiOTVmMTU1NywKLQkweDNjZTAxZTM0LCAweGVjNzg4YmMzLCAweDc1MTA4ZmFkLCAweDMzZGY4ZTA3LCAweGMyNGZmMTlhLCAweGZjNzUxMGZkLAotCTB4NWI4YTg1ZmMsIDB4YTU1ZTJmNWQsIDB4ZTZjZWZiOGMsIDB4ZWZiODg5ZTMsIDB4OTkxNDM2MmMsIDB4NzNiZWUzY2QsCi0JMHgwYTRkNjQwYywgMHg5MWRiOWY2ZCwgMHg0OGQ1ZWNjMCwgMHhkYzU5MDBkNywgMHg1MzcxMTVkNywgMHg4NzQxNzc3MSwKLQkweGI4ZmU2OTNkLCAweDg4OWJjNmU5LCAweGZlMjBmZTliLCAweDdmNGRjNzk2LCAweDZlMjQxZjEwLCAweGJmYTc4Y2FhLAotCTB4YjY0MTdhMGUsIDB4OTgwZjBmMWYsIDB4ZDQyYWRjMTksIDB4Y2ZlMGU1YjUsIDB4NjA5MGJjYmMsIDB4ZTkwMTczMWUsCi0JMHhkMDI4ZWNmNywgMHg4OTY4OGViMywgMHgxMzdjOGFkYiwgMHhlMWViZTNmNSwgMHgyMmExY2UyZCwgMHgzOWRmOTk1NiwKLQkweGQ2MDM1ODljLCAweDk2OGNlNDlmLCAweDBlZTM1MWQ1LCAweGE5NGMwZmM4LCAweDRmZjU5NjRlLCAweGZiMjdlYzZiLAotCTB4OTA2OWEzM2UsIDB4NTVkMzNkYWMsIDB4YWQ2N2FiMjgsIDB4N2RmNjQzYmQsIDB4NTkzMmQ2ZmYsIDB4Nzc3M2UwN2QsCi0JMHhjZGJmYmVjYiwgMHhiZjU2NTkzZCwgMHg3ZTQwZmYwYywgMHg3NjdlNDZhNiwgMHg2NWZiYjZmYiwgMHgxZDFjOTdmZCwKLQkweGRkY2E3ZTgyLCAweDk3MTJmZTVjLCAweDI4NzczM2JkLCAweGZhYzBhMzczLCAweGNiZTZkYWYzLCAweGM5MWUyM2M2LAotCTB4NDVmNmQxMjMsIDB4MjMxNzRmMWMsIDB4ODU4OTNkZDksIDB4M2Y5ZmNjOWQsIDB4NmM5OTdkYjgsIDB4MmQ3NTFhZmMsCi0JMHg0NzE5NGZlMiwgMHhjM2JlMjQyYywgMHg5NmVhM2Y5OCwgMHgzN2QyMWU2YywgMHg3ZGI0YjhhZSwgMHg5ZWJiZjYzMywKLQkweGZhZmMyMjdlLCAweGIxNGRlMjA3LCAweDI0YzkxNzQ4LCAweDkyYjNkMTk5LCAweDcwYmQ4YzFlLCAweDA1MTk3YjgwLAotCTB4YTNiM2MwNjQsIDB4MjBmNDY0OGEsIDB4MWI4NTFiYzMsIDB4NmYyZWE5ZmEsIDB4ZDFkZTYxMzcsIDB4NzAwYmEzOTIsCi0JMHgzOTQ0ZmEzZCwgMHhlNTU5ODQzZCwgMHgyMzkxMTBmNCwgMHg0ZDkzMDdhNywgMHhlMWE4ZmY4ZSwgMHhlMTJiZmM3MiwKLQkweGU5Y2JiMTZkLCAweGZmZTk3ODgxLCAweGNjNzc4MGQ3LCAweGZjYmQzOTc4LCAweDFkZGNlMGFiLCAweDFjODFlM2NmLAotCTB4ZDkwZTQzYmUsIDB4MzcwODhjNWIsIDB4ZWMyNDNmOTYsIDB4YTNiNzNkN2IsIDB4Y2ZkY2FjNDksIDB4N2ZhN2Y0MjUsCi0JMHgxNTc4ZjNjNiwgMHhkNWY4NDcxZiwgMHhiNDJlNDhkNywgMHg2NmUzN2JjYiwgMHg5ZWU5M2RjMywgMHgxYmNmYjA0YywKLQkweDM4ZjNmMzA5LCAweDQxYzUwOTU0LCAweDdiZjg4NGZkLCAweDgwYTEzZjI4LCAweDY3YWU1NGViLCAweGZhM2IxMGQ2LAotCTB4ZmM0MTE3YTUsIDB4MmI2Nzk2OWIsIDB4Njc3ZmEyOTcsIDB4MWQ2OWYxODksIDB4OTkzOGJmZjQsIDB4YzRkNTYzZTksCi0JMHg3YWZkZmM4ZCwgMHhkYzI1NmZmMSwgMHgwMTI1MmY0MCwgMHgxYzI1NTQ3ZSwgMHg2M2M5MGVhNSwgMHhlNWMzM2UwMiwKLQkweDEwZTkzMjQwLCAweGYyYzljMDcyLCAweDEyZmVlNWY4LCAweDAwYjJmMTAyLCAweDVlZjQyNTNlLCAweDlmODBiZTMxLAotCTB4N2M2MjVmZTAsIDB4ZTA1OWY4M2QsIDB4MTlmODI4MWMsIDB4NDVlMzkxYzksIDB4NjM4MTVmZTksIDB4MTgxYTE4NjAsCi0JMHhjMDkyYjEyZiwgMHhhZmQyOGFmOCwgMHg1MGE3ZjdlMiwgMHhhN2NlOTJiYiwgMHgyMTZjYzhjZSwgMHhjYzQzNmYxNCwKLQkweDE1ZDdmNDc2LCAweGYwOTljZTkzLCAweGEwYTdmMGJiLCAweGQyMzZlMTdmLCAweDI5MDg1ZmViLCAweDhmMTNhZTlmLAotCTB4YmM5MmUyOWQsIDB4OGRmNjY3Y2YsIDB4MmViODhhYzMsIDB4YmZlN2MzMDUsIDB4NDk0NzlkYTcsIDB4ZTRmN2M0NTYsCi0JMHgwMWM2MDczNywgMHgyZmY1ZjUxZCwgMHg0NWJlNGVkYSwgMHg3Y2FiNTFjNywgMHgzZjdlODEzMSwgMHg0ZjdmNWZlMSwKLQkweGVlN2VlMmYyLCAweDQ4YzdmNjIzLCAweDRmNTE5ZTgwLCAweGNjY2VjNmRhLCAweDk1MmVmZjA0LCAweDMyNTA5MThiLAotCTB4NTc2OTE0M2YsIDB4ZjQxYWQ5ZWEsIDB4NGVlOGFhZmYsIDB4NDg2YmRlODAsIDB4ZDMzMjljNDAsIDB4NzU3NThlZGYsCi0JMHhlNjhkZmFkZiwgMHhjMTNhZmNiYiwgMHgyY2JkOWRjYywgMHhmZTcwOTM1ZiwgMHhkMGMzZWMyNywgMHg3ZDdjOThmNiwKLQkweDMzMGI4YzBiLCAweDgyZmJmYTI1LCAweGMwZGM3NWMwLCAweDAzN2U0NTNhLCAweDc4ODRlM2RjLCAweDlmMmEyNmM2LAotCTB4YjA0YmNmNTEsIDB4MTc1MTVlYTIsIDB4M2IxM2VhN2UsIDB4OTlkNDU2N2MsIDB4MzZkN2E4MWUsIDB4MDMwMWE4ZTgsCi0JMHg3YWViZjhmNiwgMHg5MzZjOTcxNiwgMHg0YzNmY2JlYiwgMHhhMTJlZjk2MCwgMHhhOGYzYzBlMSwgMHhmNWNjNzYxNCwKLQkweDQ3OTExZGY0LCAweDE2ZTAxMTM1LCAweDk0NGIzZWIwLCAweDlmODAzZmUzLCAweDllZjQ5ZGE0LCAweGZlZmU1NDkzLAotCTB4Y2MyZWVhMTUsIDB4YWVkY2JjMTMsIDB4ZjU0ZWZiYzYsIDB4MWZjODVkYTMsIDB4ZjFhYWY3ZWEsIDB4ZTg3Nzc1MDgsCi0JMHg3NTZmM2VmMSwgMHg5M2Q0NDFmYiwgMHgwMzI5OWFiYSwgMHg4NWM5N2FhMiwgMHhlNmIzM2E2NiwgMHhlYzU3ZjAxYSwKLQkweDIwN2Q5NDM3LCAweDRjNWU4ZGYyLCAweDlmMzNmY2UwLCAweDJiZTYwN2U0LCAweDhhZjgzZTUxLCAweGRhZjYwZjhjLAotCTB4NGE3OWJkYWQsIDB4OTNlMzA0YWYsIDB4MjhkY2VhMTUsIDB4OWJkYWU3YjgsIDB4YTVmMWEyODcsIDB4OGZjMDBlNGYsCi0JMHg3MjBmMWY3MiwgMHgxYTM3ZTQzYiwgMHg1ZDAyNWI0NywgMHhkNGNlOTlkNywgMHgwYWJjNjA2NywgMHg2NGUxYzc3NSwKLQkweGM5MGFjZjgwLCAweDEyYjQ3MTA2LCAweGE4N2ZiYjNkLCAweDM1YjcyZjU3LCAweDAzNzVkODA2LCAweDIwM2I1MjFmLAotCTB4YzU3YTc5NWUsIDB4YmY3MGQxODMsIDB4NTAzYjhjNTksIDB4MzkzZGUxNTIsIDB4ZjY3ZDc2NDIsIDB4OWY4ODIyZmQsCi0JMHhhM2FkYjJjZCwgMHg2NjdhZDliNSwgMHgyZjdlNjY1NywgMHhjZjQ1OTNjMiwgMHg3NjNhM2JkNywgMHhhZmRiNGIzZiwKLQkweDdkZmVmMzExLCAweGUzZmEzNTE2LCAweDBjNjRkNTYyLCAweGFmNTg4NWQwLCAweDdlMjg1N2I4LCAweDcwY2VmYjg3LAotCTB4NWVmYzRkN2YsIDB4ZjIxYmUyZDIsIDB4MDcxZjJkMDAsIDB4YWZmNjJjZmEsIDB4MzdkY2E0YWYsIDB4ODdlOGQxYTQsCi0JMHg2ZTljN2Q3YiwgMHhkZDQ1ZTgwZCwgMHg0NDNmMjYwNiwgMHg2YjMxMTU5ZSwgMHgzMGFkN2NmMCwgMHhhYTc1ZjNiMCwKLQkweDNkOWJiMGJmLCAweGVhYmZiMDI2LCAweDk4NTFlY2MzLCAweDlhOTFmNWU3LCAweDE3Zjk1ZDgwLCAweDgyY2EzZGIzLAotCTB4ZGVhMmIzZmIsIDB4ZmFjY2MyYjksIDB4ZGU3Y2YzNzUsIDB4YTE5NjlmMTUsIDB4MTJkNzE2NWQsIDB4N2NlOGNmM2MsCi0JMHg2YTlmYjMwMiwgMHg3OTY0YThhZiwgMHgwZjFhYjU0NiwgMHg1ZWQ1MGJlNiwgMHg5MTNlNjFkMSwgMHgxNDhmZmRmOCwKLQkweGZlMDFhZTBlLCAweGQ5ZjNmY2ZhLCAweDBiNWQ2MTYzLCAweDdjMGQ2ZDg4LCAweDA0NmQ2MGJmLCAweDIxZTgwNTcxLAotCTB4ODk1OGFmMjIsIDB4N2M3MWVmZmYsIDB4NDQzNDViZDcsIDB4ZTdlZjE4MzMsIDB4ZGRmNWFlM2EsIDB4MDc1NGZmNWIsCi0JMHg5ZDEyZWZiZCwgMHg1YzcxY2VjOCwgMHhhNWViY2IzOSwgMHhlMWM2MDU3NiwgMHgyNTg1ZGY5NCwgMHg2Y2ZjOGE0YSwKLQkweGVjYWZkZTJmLCAweDViZGIwN2NkLCAweDYxYWU0MDlhLCAweGIxNWZkN2U3LCAweGViYjNmMmNiLCAweDU3ZTg3ZjY5LAotCTB4MjI4YzY1N2YsIDB4NGI4ZjliM2YsIDB4ZmQxYWIzYzcsIDB4ZTBhMTYwNzksIDB4NjYwNGJkZmYsIDB4OWU0M2Q0ZGYsCi0JMHhkZmMwOTBkNywgMHhlN2Y4ZmQxOSwgMHg1Yjc5ZTU4OSwgMHg3ZjM4NDhkZSwgMHhlMzU3NmYzZiwgMHgxZjlmZTNmZCwKLQkweDEyZGY4ZDUxLCAweDEyYzNkZDY0LCAweGM1MDZkYzE5LCAweGRjNWNmMDY5LCAweGNkZjYyMWVlLCAweGRmMTdlNjQxLAotCTB4ZTIwNWZiODksIDB4N2Q3MjljN2UsIDB4NzNiY2NiYmIsIDB4YzZjM2ZkNjAsIDB4NzJhZWZmMzAsIDB4ZWM4OTQxOWMsCi0JMHhkZGVlYjEzYiwgMHhmNTFmMGNkMSwgMHg2MDdjNTM2ZiwgMHg5ZmNiMDhmZSwgMHg1ZGVkMWRkZCwgMHgyY2MwZmM4YywKLQkweDhlN2NmM2M3LCAweDdiNzdkZGU3LCAweGNiYmVmMWQzLCAweDBlN2VjYzVkLCAweGNkNTcwZjQ1LCAweDRmODAwN2NlLAotCTB4NDIzNzRlZDQsIDB4YWExOTE5MmUsIDB4MDFjYzk0NjksIDB4ZjQ3YWViZTcsIDB4NGFiYjg3ZTAsIDB4NzBiZWQ3ODYsCi0JMHhjNTdlMjFkNywgMHhmZmRmNDJiOCwgMHhjNjM1MzlmMiwgMHhjNjNjYmZmMSwgMHgxYmIxMmRjZiwgMHhmNzdjODBhNSwKLQkweGViZjMwOTJmLCAweGExMmFkOTdmLCAweDQ5ZGYzZjllLCAweDJmZTUxMzQ4LCAweGEwZDZiNmYzLCAweGE1ZjhiODVlLAotCTB4MDM2Mjk4MjEsIDB4N2NhNGFmYmYsIDB4MjEyMjVlNjQsIDB4ZmU3MmQyNzcsIDB4Nzc1Yzc5NmEsIDB4N2UzZWZhZTEsCi0JMHg3ZjI4MTIzOSwgMHg5NDQ2OTExNywgMHg5NjlmOGIxNywgMHhlYjI2YWJmNywgMHg4MzdhMGNmZiwgMHgzZThjZGUzMiwKLQkweGNmMTc2YTRmLCAweGY3N2FlNDRlLCAweGY4MTQzMjUwLCAweDdkMmYwM2ZkLCAweDg2YjQ4YmE1LCAweDk0ZjNmZmE2LAotCTB4ODA2YjY2OWYsIDB4ZWNiMDFhYWYsIDB4Yjk2MzM2NmEsIDB4MjhiZWQxM2MsIDB4MzlhNWMyOTEsIDB4MDg5ZDU5ZDEsCi0JMHgxODhmOGNmZSwgMHg1ZWQ3MmUzYywgMHgyZTAwZjI2NiwgMHg3ZTAwOGU0ZiwgMHhkMzNjYTEyZCwgMHhkOGYxNjRjZiwKLQkweDcyM2RjMjFmLCAweDllYmQwZjBhLCAweGQ0NzU3NWM5LCAweDcwOTNjOWNhLCAweGZmODQ2ZTk1LCAweDhlNzlhZjMwLAotCTB4MmQ4ZGU1MDUsIDB4ZjYzZGU4MTEsIDB4NjNjNmUzMTcsIDB4MjIyZmQ3NWUsIDB4NzViZjAwZWMsIDB4YzE5N2VlYTUsCi0JMHg1NTZlYjA4ZiwgMHgwZDcxZmEzOCwgMHhjZTBmMTY3YSwgMHg4MmFhNWVkYSwgMHhlZGI3MDNmYiwgMHgxZjgzZjY5NiwKLQkweDU1NjNhMWEzLCAweDM3ZWZkYzBlLCAweDhmMzFjMzVhLCAweDVlNjNhYTIwLCAweDZjNjM5MzI2LCAweGM3MTZkODllLAotCTB4MmM2N2MwNGUsIDB4ZWJhMzZiZGMsIDB4NGVlOTk3NWEsIDB4ZTk5YTdjNjQsIDB4ZjYxY2Y1MzksIDB4M2ZmNTkyM2QsCi0JMHhlYmIzOWVlMSwgMHgyMWVmMWFhOCwgMHhiY2IwZDY1ZSwgMHhlMTg0NDFmYSwgMHhjMTJiZTQ1NSwgMHg1Y2ZhODFkYywKLQkweDI0MWI4NTE3LCAweDkzOWVmNWQ1LCAweDhkYTNjOTM2LCAweDMwMWM3N2M0LCAweGE4ZmI1MGNlLCAweGM4MjY3ZTI3LAotCTB4MzA2OTlmOWIsIDB4YWViYmQzNGUsIDB4MjBjYTkyNzcsIDB4Y2NlNDIzMWUsIDB4ZmNjY2M5NGMsIDB4OWQ1ZjVjNDIsCi0JMHgyYzdmYzQ0MSwgMHhlOWM1NTM5ZSwgMHg1M2Q3MDY2MSwgMHhmODMwNDY2NywgMHg3NGI2MjdjZSwgMHg4MWJmNzdlOCwKLQkweGQxZThhYTQ0LCAweDU2ZGU1OTk5LCAweGQxYWJmYjhjLCAweDExNmY0MDVhLCAweDdhZDA4OTcxLCAweDRlN2Y3MDQyLAotCTB4NzYyNmNiZmQsIDB4MGRmMjUyMWYsIDB4NjgyZTQxODAsIDB4NzlkNmI5MDksIDB4NDNmOWMzZGIsIDB4OTdlNjAwZmQsCi0JMHgwZWM0ZDkyNSwgMHhiN2ZhYjA3MSwgMHhmODg2NmUwNywgMHhjNTljM2U4NywgMHgzMjFmMjk1OSwgMHhlZjI3N2JjMCwKLQkweGZiYTYzYzgyLCAweDE4NTZmYTVlLCAweGRjNDJiZjdiLCAweDBiZGIzNjg3LCAweGMzNjE3ZWUwLCAweGNjNDJkNGU0LAotCTB4YzNlOTM4NWYsIDB4YjViYTA4NzcsIDB4YWYzYzc0ZGUsIDB4NTQ0OGJmOTQsIDB4Mzg5ODdlMDYsIDB4YTUwZDFlZWYsCi0JMHhhYTY0ZmFmMywgMHgzZmZhZDE2ZiwgMHhiZDU4MWIxMiwgMHg4YWIxNzc5ZiwgMHgzZDI0MDdkNiwgMHhiYzgzZWFjZSwKLQkweDRiNmVhMGU3LCAweDBkMWVmYTdhLCAweGY0MmI2M2RjLCAweGZhZDM1NjJlLCAweGFjMmRhNDg0LCAweDMyNGIwNjBlLAotCTB4Y2ZkMjZmODUsIDB4ZjFkMTcxZWUsIDB4M2ViODU4MmYsIDB4M2RlMmYzNjMsIDB4MDczN2ZhZDAsIDB4ODRmZDAyYWEsCi0JMHg3ZjE4OTI2MywgMHhiZWM2MTBiYSwgMHhlNjQ5OTBiYiwgMHhlNzc4MDY0ZSwgMHg4NzNlZmYwNCwgMHg1Y2Y0MmY3ZiwKLQkweDlmZDE1ZmIxLCAweGY3ZWYwNjI0LCAweDRiN2I5NzE5LCAweDkyZDAzZGY5LCAweDhjMzZiMjA4LCAweDkxNWM5NWM1LAotCTB4M2E4NzBmMTQsIDB4ZWM1YzYyMDYsIDB4Y2IzNDYyNDAsIDB4ZjE3YjM1ZGYsIDB4OGUzMTEwOWQsIDB4NGYxOGE3ODAsCi0JMHhlNDBjYmJjYywgMHhjOWYzMTFiMCwgMHhlMmY5NjRhYSwgMHg3OWQyN2U1YywgMHhkOTNjZTM1NiwgMHg3MjdmNzY3NiwKLQkweGUwMDE2YTcyLCAweGMzNGRlMjhmLCAweGJjMDFhNmYxLCAweDMwZDc3Yjg5LCAweGY5MWYyNWFlLCAweDQzZjAxMGZkLAotCTB4YmY0YWJhMWYsIDB4NWJhZmY0Y2YsIDB4Mzg1NzI3NDksIDB4NjE2ZDJjOWQsIDB4MjU5ZjQwZjEsIDB4MjRhOWU5MGIsCi0JMHg1MTNiYmY4MiwgMHgwNGM3ZGYyNCwgMHg0OTMxYmYwZSwgMHg1ZWNmYjYxNiwgMHgzODQ4MjRiYywgMHg2Mzg3MGI0ZiwKLQkweGU0YzA3N2FhLCAweDc3ZGY5YmJjLCAweGNmNWIxMjc4LCAweDAwNzdkZWFkLCAweDdlZjBlY2JlLCAweGRiZjZhMWM0LAotCTB4MzBmZGIwYjYsIDB4NDczZDAxN2MsIDB4YTRmNzVlYTMsIDB4YWIwYmJjNmMsIDB4ZDM4N2ZkMTQsIDB4OGRmYjA5MDMsCi0JMHgzZmZlYzJjZSwgMHgxMDBkZWZlNCwgMHg1ZmI3YTViMiwgMHgzZmQzM2U2NiwgMHhmNzE1MmY0MSwgMHg0ZWViODllNCwKLQkweGVkMTdlODEyLCAweGM2ZGYwZmJkLCAweGY3ZmFhZGVlLCAweGRmMTE0Zjc5LCAweGQzZWY5OWE3LCAweDk2ZTlmNmNjLAotCTB4ZWUzOTJiZDEsIDB4ZWE2YTlmNGIsIDB4ZjBiZGM3NGIsIDB4YjcyZjFkZWYsIDB4M2IyNzhmOTAsIDB4ODNjNmMxZTcsCi0JMHgyZjBhMWQ3MywgMHgzMTZlOTNhMywgMHgyYTc1OGEzZCwgMHg2NzBiZDllMCwgMHgzYzA0ZmFjNSwgMHhiZjYzN2NlMSwKLQkweDhhNWQzOTVjLCAweDlkNDJkYTc1LCAweDM4ZWZjY2VmLCAweDU3ZWIyOTVmLCAweGJmY2IzMGY3LCAweDVkMzk1NjI1LAotCTB4NTRjZWVkZDcsIDB4ZjQ1YmRjNDEsIDB4ZWUzZTBhM2IsIDB4Y2I1ZmJmMzgsIDB4OThlM2M0OTksIDB4NDQzNTI0YTksCi0JMHhhNGMyZGNkZSwgMHgzMGZlYTBiOCwgMHhlNzY5NWRmYywgMHgzZTU4NThmNSwgMHhlZmRlZDJiMiwgMHhjMjc1YjM4OSwKLQkweDI1ZDczNDNkLCAweGE0N2E3Zjc2LCAweDcxMDEzZmMyLCAweDdmNDY1ZDkyLCAweDkxN2NiZjNmLCAweGY4NzE3N2Q3LAotCTB4ZjhhZmY1ZjUsIDB4OTE2NzdlZjAsIDB4YWIzNWVjYmUsIDB4OWJmZjkwOGQsIDB4ZWJmMjBlZjQsIDB4MDdiMmE4YTIsCi0JMHhmNTdkNjkzMywgMHhkZmM4ZmQ4NiwgMHhiZWNhNTI4YiwgMHg3Y2ZjYTRjYSwgMHhhYzAzODZjZCwgMHhhZmIyZjZmZCwKLQkweGU5M2Q0MWZhLCAweGQ4OTdhYjIwLCAweDRmN2UwMzVmLCAweGM2N2JjMWM4LCAweDg4ZjVmOTI0LCAweDcxNTkyNjFmLAotCTB4MGFiOTc1NWUsIDB4ZDVlYWRmZGYsIDB4YTNkMWRlNWYsIDB4MWFlMDIyZmUsIDB4YWJkMjJjYWEsIDB4OWZjNTgzMWEsCi0JMHg4MWU5N2I1YSwgMHhjMzg2MDljNSwgMHhhNzkwYWQzZiwgMHhhZjc4ZWRjNCwgMHhmN2M3NjY0NiwgMHhhZmZiYjI0NCwKLQkweDg2ZmVmYjNkLCAweDRmOWUxOWY3LCAweGYwMDRmZTcyLCAweDM1ZDExMGQwLCAweDFmZDY5MzI3LCAweGUzMGNmODhkLAotCTB4ZWE5ZDkyNTAsIDB4YjBjN2UwMjEsIDB4YmEyY2M5OWEsIDB4OWQ2YmE5NWUsIDB4YjIyNWY0MDMsIDB4MjBkMDY2Y2MsCi0JMHgwNzVmYjk1YywgMHhmMGEyZjRkZSwgMHg5ZmVkZWI3YiwgMHhhNmMyOTIzZCwgMHg0NjNhYzA3MSwgMHhmMGQwM2U3MCwKLQkweDQzNWYzN2Y2LCAweDgyZTFiMmRjLCAweGUxZWEwNmQxLCAweDBmMGQ4ZTg4LCAweGEyMzViZTgyLCAweDMwZGZkN2UzLAotCTB4NWZlZWNjMzksIDB4MDA4Zjc1ODgsIDB4N2RmZDFkYmYsIDB4ZDcxZWJiNzgsIDB4YjZlM2EyM2YsIDB4YzhmZGYwNDUsCi0JMHgwMTY0NzZkZiwgMHhlNTNlOGM5ZCwgMHhkMGI2MDE2OSwgMHgxNDhkZWZiMywgMHgyZmNkZmRmOSwgMHgxODZmOTlhZSwKLQkweGUwMjQ4ZTMyLCAweDU0YWEyN2YxLCAweGRlM2MyMTQ1LCAweDhhYjhmMDYwLCAweDcxZGQ1MWY5LCAweGQxNzhkNmM3LAotCTB4ZGZiZjI3YjksIDB4OGM3NmY1NDIsIDB4ZTEyNjVlODMsIDB4OGJkM2YwMzYsIDB4N2Y0YWM1N2IsIDB4YmE0YWM5ZTAsCi0JMHg2OGZiZmEzZiwgMHg4MDQxNWQxZiwgMHg4NTcyNWNkZSwgMHg3YTAxZmZkYSwgMHhjOGIxMjk3OCwgMHgyNDg2ZTVlYSwKLQkweGU2MTVmN2Q5LCAweGI4ZmI1OTRjLCAweGVkNjRkYmM0LCAweDY0MGI1OTc3LCAweDIzMzkwOWY1LCAweGI0NGZkZjY0LAotCTB4ZjdlYWNhOTUsIDB4ZjY0YmJmMGUsIDB4NTJiZGE1N2QsIDB4YjRmMDJmNTYsIDB4NzIxZmJlYzksIDB4N2VkZTVkYTQsCi0JMHgwZjAxYTg5YywgMHgwNzZkMjc4NSwgMHg2YjNlMmNhMSwgMHhkMGUyYjc0NywgMHhhMTA3OGRmMywgMHgwNjE3ZjExYywKLQkweGY0M2ZhNTBlLCAweDA3NmQyYjhlLCAweDBmZTE3N2UxLCAweDExNTdkZTU1LCAweDZhZTlkMWZlLCAweGRjMTc1YmEzLAotCTB4YTFhODlhMGYsIDB4OGJjOTI1ZTUsIDB4NjJhZDQ0ZmMsIDB4MzA1ZTU1ZjcsIDB4NmYwMWJiMzksIDB4MDk0YWJlZTIsCi0JMHgxMjI5NDNmOCwgMHg2MjVlZTYyYSwgMHgzMTY3YjJmNywgMHg0MDQ5ZDg3ZiwgMHgxOWE3ZjAwYywgMHg5ZGUzZjQyNiwKLQkweGZhYmUzNmQ0LCAweDRlYzcxNjdiLCAweGRhMzdiZTAzLCAweDc3ZGIyNTU3LCAweDZjYTcxNWM5LCAweGE5NjRhNWRmLAotCTB4NjVjYjRmMDIsIDB4YzNmMzBhZjUsIDB4MjVjN2VmYjIsIDB4ZGZiNTkyYWUsIDB4ODE1YzdkNjUsIDB4ZjU2NTI3YTcsCi0JMHgwYTBkYjY4OSwgMHhlMDU2NmQzYywgMHg3NmIyNjdlOSwgMHhkYzFkZGY0MSwgMHhmODM2ZjUzZiwgMHhjYTM5Njg5NSwKLQkweDc4MGU1OWRiLCAweDBmYmNmM2I4LCAweGIzYmMzMWYxLCAweDc0ZjAxY2I1LCAweGM0MzZjOWM3LCAweDUxYzc5MTU3LAotCTB4ZTg3MmVjMGUsIDB4NTA4M2M2OTEsIDB4MDVmZGE4N2EsIDB4MjczNDBlZmQsIDB4ZDlhODc5NjIsIDB4YzNhOWZlOGEsCi0JMHgxZTU4MzljZCwgMHhlZmUxYjY2OSwgMHg4ZTFlNmFiZiwgMHg3NmNkZmJlNSwgMHgzY2QzN2YyYywgMHg2NmNlY2IxZSwKLQkweGNkNmQ5NjA3LCAweGFlZmRmODZkLCAweGRmZTY3NmU2LCAweGQ3YmRlOThhLCAweDgwN2UwNjlmLCAweDFlYjc5NTZlLAotCTB4Mjc2NDNlZWUsIDB4N2UwNDRlYzcsIDB4ZWRlZTFkZDksIDB4YWVhM2ZhODYsIDB4MmZjMDg5ZTgsIDB4YTExMzAwMDcsCi0JMHhjYmNmOWM3OCwgMHgzZGY2MjliMSwgMHgwZGJmOTRjOSwgMHg5MTc1NjY0OSwgMHhiMmE2ZDA1NywgMHg1ZTFlODAxNywKLQkweDA5ZTMzMWIyLCAweDhmMjExYTRkLCAweDlhMjQ3MmFkLCAweGEwNmVhYzJkLCAweGU2MzY0NDc1LCAweDYxM2M2NTViLAotCTB4NTVlNDI1NGYsIDB4NjA3NzI1MTAsIDB4N2JkNDIyN2QsIDB4OTBmYjU4YzIsIDB4NDExMzE5OGQsIDB4ZjFjZWZmMGYsCi0JMHhiYzlmN2I2MCwgMHgyMGU0OTJjMCwgMHhjZjU3ZTBmMSwgMHhiZmUwNGQ1YiwgMHhhMDc1NzYzOSwgMHg4YzcxZTAwOSwKLQkweGE0ZWNiMWZiLCAweDk2OGYzYjQwLCAweDJkMDI5YWE1LCAweDBhOTNkOWM4LCAweDNkOTQ0NGJkLCAweGM5ZjFkMmFhLAotCTB4ZGI2ZmIwNzEsIDB4YmU0M2NjMzQsIDB4N2U4MDRiNWIsIDB4ZGVjYzRiMjcsIDB4NGZmNWRmMTUsIDB4MTMxN2Y5ZTEsCi0JMHgxZDRmNjhmNSwgMHg2MTE3ZDk1NywgMHg3YmU0OTNkZSwgMHg2NGJjZTAwMSwgMHg3Yjg0MTBlMywgMHgwZTk3Yzk4ZiwKLQkweGIxYjQ1YmYwLCAweDdjZTNkNTkwLCAweDgwYjY0ODJmLCAweDY3YzE5NmJhLCAweDg5ODJjNmZhLCAweDBhNWJkY2FlLAotCTB4ZTBjMTA1OWYsIDB4NjY2YzlkNTMsIDB4OWVjN2I2ZmEsIDB4YTg4MDdhMDYsIDB4ZDdiNGFmMWYsIDB4NWUzZTc5YzEsCi0JMHhhMmZiYzc2YSwgMHg3NjdhMWNjNywgMHhiYzI2MWQ3ZSwgMHhmNjM0NDBlNywgMHhmZTAxNjllMiwgMHg1YWM5YjM5YywKLQkweDJlMTUzN2VjLCAweGYzNWY4MTllLCAweDczOWUzNTdlLCAweDI5NTUzYzI1LCAweDNhNDcwZjRjLCAweDQ2NzMzYjAxLAotCTB4YzcwNWRhMDQsIDB4YjdkZWVjNTUsIDB4MTRjY2ZiZjIsIDB4MGM1ZDFmNjYsIDB4ZWI3N2VlMGYsIDB4YTZjYmRiYzcsCi0JMHg4N2JhYmRkNCwgMHgyMmIzZDc4ZSwgMHg3MWVlODcwYywgMHhhYzdkNDQwYywgMHg3YmMyNTFhNywgMHgxYmU3M2RiNSwKLQkweGJkNzZiMTJmLCAweGUzMDQ4MzhkLCAweDVmZTEzMzkyLCAweDhlZDVmZGI0LCAweDMxZmFmZjA3LCAweDE1YjNmZWZkLAotCTB4MjE5NDM2MTEsIDB4YmYwODQxZTYsIDB4YjNjN2Y5ZmIsIDB4M2ZhODBjNjMsIDB4NTY5YzllY2QsIDB4MjY3MTcyMDYsCi0JMHgzMWNkNzM4ZiwgMHhkYzMxZTI2OSwgMHhlMGU4YjFhNSwgMHhjNjg1YmEwOSwgMHg4MjE0MzU4MiwgMHhhNTZjNzE2NCwKLQkweGE5Y2M5ZTBlLCAweDA2YmU1ZDRlLCAweDRmZDk2NWNhLCAweGYwYWRhMmVhLCAweDM1Y2VkNzdlLCAweGQxZDZjNmEwLAotCTB4ZmM4YzVjMjMsIDB4MzM0MWZiY2YsIDB4MjZkY2Q3NWQsIDB4NzNkOTk1YjUsIDB4NmJkYWFlNWMsIDB4NDMzZjJhNmUsCi0JMHg5ZTcxZWZkMCwgMHg4MDgxNDMyZiwgMHg4NzE2NmFmNiwgMHhjNTk3ZThiNywgMHgzMjViNzRlOSwgMHg5MWU0MTM4ZiwKLQkweGE3ZGY3NjNjLCAweDFkYjAwZTM3LCAweGY2NmJhNGU4LCAweGM0NDIwMzA3LCAweDVjZWRlNDA5LCAweGM3NDRmYzdmLAotCTB4YmJiZTU1ZTYsIDB4NGVjZGU2MjAsIDB4NzFmZTdhNjEsIDB4ZDA0Y2E1MWQsIDB4NzI2N2VmMjcsIDB4YWJlYWJmMjAsCi0JMHhmZWU5OGI0NywgMHgyYWNjM2JmMywgMHhhZGNmYzM4YywgMHhiODc4MDNkYiwgMHhhOGYxY2VkYywgMHg5ZTcwZWQyNSwKLQkweDdkZTZiOGE2LCAweDhhNGFiOTg2LCAweDkzZDc5YTdiLCAweDczNGViNjk3LCAweDJjYmNhMDc5LCAweDAzY2EzYWYyLAotCTB4NWY3MGU1ZTUsIDB4NDVjODM5NmIsIDB4N2M0NTFmMjEsIDB4Y2Q1Y2QzZDAsIDB4ZjIyMzcyZjksIDB4NGRjZDQzZDMsCi0JMHhlY2RjM2Y1OCwgMHhmMzQ4ZjJjMiwgMHg1Yjk3Y2U1YSwgMHhlNmZkZmRiMSwgMHg3NjVmMzhlNywgMHgwZGJjYmU3MywKLQkweGFlNjhlZjdmLCAweDY2ZWRmMmMyLCAweDI4OTY5NjI3LCAweDdlMDE2ZmM3LCAweGNjNGUwZDUzLCAweDgzNzc3YmVmLAotCTB4ZWI3YzQwOWUsIDB4ZjMxZTg3NzIsIDB4Nzg4OWU4MGUsIDB4Yzg1OGY5ZTEsIDB4YmRlM2QxYTcsIDB4OGQ1ZTY1M2IsCi0JMHhkMmY3Y2Y5MiwgMHgyNWY3ZGY0MywgMHhmNGYzMDBmZSwgMHhiZTgwYzNlNiwgMHg5ZTlhMTE5OCwgMHgwOWFiMTE4ZSwKLQkweDkyZGZkMmY4LCAweGJlODIyNjliLCAweDM1NmFjYzdkLCAweDY1N2QzZTgxLCAweGE1ZjIxMzYzLCAweDQ5YWI3NjYzLAotCTB4MjRkZmViNGIsIDB4OWRkYWNjM2YsIDB4ZDY5ZTkzNTYsIDB4YzNlMzdiZmYsIDB4MzU2NWRkYWMsIDB4ZGZmYWQxODUsCi0JMHhlYWNmYmY5MywgMHhjNDgyYzI2ZSwgMHhlN2M4Y2QyOSwgMHgwODc0ODk0YiwgMHgyMWI5NDdjZSwgMHgxNzE1MGM3MywKLQkweDFlOTc1ZTU0LCAweDJlMzE3MzgyLCAweDM4MThkZTcxLCAweDU2Yzk3NTE3LCAweGFjYmI4ZmE0LCAweDdkNDEwZWFiLAotCTB4MGQ2NmNlNDIsIDB4MWJiNmM1NWMsIDB4YmY0MzU2MGIsIDB4MGQ0YWQ4YjIsIDB4YmE5MzFiZjQsIDB4MWJmNDM1N2MsCi0JMHgyNmE0ZmQ5YiwgMHhkY2Y4ZGZiMCwgMHg3ZWExYWI5ZCwgMHgwNmIzNmQ4ZiwgMHhjZTNhZDNmNCwgMHhhMjM4YzRjNywKLQkweDlmMDVkYTJlLCAweDgzNWU3OTE2LCAweDBmMjgxYzNiLCAweDI4MWRkYmYyLCAweGNhNWMwNDBmLCAweDA2M2U1NmE2LAotCTB4NzY4NmM3N2UsIDB4M2FjMTJjYzksIDB4YzFiZDRhYTYsIDB4YWI5MWM4NmYsIDB4MjkxYWY3ODcsIDB4ZmU3YThlYmYsCi0JMHhiYTJhZDMwOSwgMHhkZmE4MDZjZiwgMHg1NjI3ZjU4MSwgMHg5ZGZlNWFkZCwgMHg5N2Q3MTI5MiwgMHhlN2UwOWY3ZiwKLQkweGU0M2RlNDFkLCAweGIxZDA5ZjY1LCAweDAwMWUzMmY3LCAweDdkZTMxNGI4LCAweDJiYmUxMzM0LCAweGQwMjY5YzQ5LAotCTB4M2NiODlhYjMsIDB4NmQyNTA5NWYsIDB4M2JlYmNlZGYsIDB4ZDk1NzljODUsIDB4ZGZkMGE3ZmIsIDB4N2RiODUzNzMsCi0JMHhkODNmOTdkOSwgMHhmY2Y0MWQ2MCwgMHg4NDM5ZWUyYiwgMHhhMWZjZTc2OCwgMHg3YjJjYzUzMCwgMHhiMDhlYTE1ZiwKLQkweGNiZDc1NTdiLCAweDMxZTY1MzFiLCAweDk2MjlmMzJiLCAweGY2YzNiNjkxLCAweDE0NzliZWNjLCAweGM3YmQ4NGI1LAotCTB4YWU0ZmNjYTIsIDB4YWQ1ZWVjMjcsIDB4ZDdiOTRmMzIsIDB4ZmM2NzBhYWUsIDB4MGQ3ODBhYjQsIDB4Mjk4OWUzYTUsCi0JMHg2NTY0ZjkyMSwgMHhlMTM1ZjE0YSwgMHg5MTBmNmYyMCwgMHhiMDk0YmQ5NywgMHhmOTNlZWMzYywgMHg1YjFmM2MzNSwKLQkweDhjZTIyZmI5LCAweGYyNWRlZjYzLCAweGZlZTU2Y2ZjLCAweGRkZjQ1ZDA0LCAweGJmODMyYjVmLCAweGVhOWZjMTg2LAotCTB4N2Q2MDBiNzcsIDB4MDQ0ZDczMTUsIDB4ZmM4MTU2ZmMsIDB4ZjA2YmUzZTcsIDB4YmIzZjI1MWYsIDB4ZmE3MjdjNTUsCi0JMHg5Zjc2M2FkYywgMHg2YjFmMmZiZiwgMHhjN2MyMDk0YSwgMHhiMjk3NWU0NCwgMHhkYzJhN2ExNCwgMHgzZWZjODMxYiwKLQkweGVjMDYwZjc4LCAweDljMTIzYmZjLCAweDNkOTc0MDJkLCAweDU1YWZiZTY1LCAweGIyYzY4NzYwLCAweDJkYmI5M2Y3LAotCTB4YmJmMDM1Y2UsIDB4MDNmOTYzYTQsIDB4YmNmNmFmMjIsIDB4ZDA0YmY1Y2EsIDB4Zjk0YTllZGIsIDB4NmViYmYyMTUsCi0JMHg4Y2Y0MTYxMCwgMHhlMDc1YTNhYywgMHg4ZTJjNDM2NywgMHhlNDhmZDBmNSwgMHhlZjgxNzU3OCwgMHgxZmNhODczMCwKLQkweGUxY2I5YTdkLCAweGU1OTEyNWJlLCAweGZlNmNmNjU1LCAweDBmZGU4NmU2LCAweDBhOGYwNTBhLCAweGRjMmYyOGY1LAotCTB4M2MzY2I4NWYsIDB4OTc2N2U1MDIsIDB4ZmVmMDNjNDQsIDB4M2M2OTU3NmIsIDB4Njk1ZDJkZWEsIDB4Yjc5NDBkM2EsCi0JMHg0YWVlMmVkYSwgMHgyYmUzODAxYiwgMHhhNGFlZTNlZCwgMHhlZjM2MDZlMSwgMHhmZTUwZjFkOCwgMHgxMTVjZTkyNiwKLQkweDc5MGZiZGM4LCAweGNlYmI2MTNlLCAweGUwMzdlNDM1LCAweDg2MTExZTFmLCAweDI1N2JmYTcxLCAweDQxYzAxMTZmLAotCTB4MWQ3NzU3NjksIDB4Y2Q2NjU1OWQsIDB4ZDM1ZjZiZWYsIDB4ZmQ4MThkZmQsIDB4M2Q1MTllZDUsIDB4YWNkZGJmMDYsCi0JMHhmNGRiNWRiZCwgMHhlZDNjODEzNSwgMHgwOTU3NGQ5MSwgMHhiY2RmOGZlNCwgMHg5ZDE5ZGRmZCwgMHhjMmJkMDU2ZiwKLQkweDMyMjQwMmQ5LCAweDEzZWE4YmFjLCAweGZjYmQ3ZWI0LCAweGI1MTI0YmE0LCAweGVjMDMzM2QzLCAweDY2YmZlMWYyLAotCTB4NTRiYzRhNzksIDB4ZGU3ZGU3ZGEsIDB4OTJlNjViNGIsIDB4N2E5NWMzZTcsIDB4NDRkZjMxOGEsIDB4ZmJjNDhkZWQsCi0JMHg5ZWY2MmFhYSwgMHg3YTU3Yzg4MiwgMHhkNGYzZGI4ZiwgMHg4MjliM2Y1ZSwgMHg3NGNlYjg3ZSwgMHhmZGZlYmQ5OSwKLQkweDgyM2NlNzRmLCAweGYzMGMyMDdjLCAweGZmNmQ1ZTMzLCAweGZhZDYwZTNjLCAweDlmYjhjZTg3LCAweGQzZjU2NWJjLAotCTB4NmJmOTgzNzcsIDB4NWY2Nzk4MTIsIDB4NTY1OTc0ZGIsIDB4ZWQ3ZWUyZWYsIDB4MmZiYjJkNTYsIDB4MzU0ZmZiNTQsCi0JMHhjNzJhMjVjYSwgMHhjODllMjJkNiwgMHgwMTAzZGQwMSwgMHhmZGI0OTVmMiwgMHg4M2RlMTdiOSwgMHgwNGFiYmYyOSwKLQkweDFkN2NhMTgwLCAweGZiNGVjOTM5LCAweDg4N2I3MjU1LCAweDlkNTg3NzkwLCAweDk1YzQ4ZmRiLCAweGUyNzFlYWMyLAotCTB4N2FiMzFmZmIsIDB4YTlmZWY4OWEsIDB4NGYzYTc2NDksIDB4ZTc2ODkyNjUsIDB4NzVlMzZmZmQsIDB4MzNkNTg3OTcsCi0JMHg2NDdmZjdjNSwgMHhiYjU4OWJkZiwgMHg0OThlZDM3ZSwgMHgzZjA1Y2U3MCwgMHhkZmNhYTUzNywgMHhkZGZjYTIwMSwKLQkweGNkN2M1YTkyLCAweDNiNzkxYTdjLCAweGRkZTJmZmU3LCAweGRmZWY4YTlmLCAweDljMDFmMTE1LCAweDczMDkzNmQzLAotCTB4NmE1NzZhZTcsIDB4MzE3ZjVmZDEsIDB4ZjAzZjJkYmEsIDB4Nzc5MTUwN2QsIDB4NjEzNzI4ZTMsIDB4ZWJkZDU0MWUsCi0JMHgwYjgwYjcwMywgMHgxZTNhNmQ1MywgMHg0NGNhN2EwZiwgMHhhMTU0ZmY5ZSwgMHhlNTljNjIzNiwgMHhjN2M2N2FmMiwKLQkweDhiNzllOTQzLCAweGUxOTRkZTliLCAweDdmM2I0ZmFiLCAweDkxMDMxNzhmLCAweDRmNGJiZTc0LCAweDkwZjdiMDI0LAotCTB4ZWUzMTNiYjMsIDB4ZTk5NTM4M2YsIDB4MjJiZWYwZjEsIDB4ZjkxNWU3ZGMsIDB4YzQ1OWIxNWMsIDB4ZWM3MWY2MGUsCi0JMHg1ZGVjNjExYiwgMHhjODlkYjNjOCwgMHhjMWJmMTc1ZiwgMHgxYjc1ZDdmYywgMHg5YjNjYTIwZSwgMHhmZmEyYjZhZiwKLQkweDY3M2Y1YzY4LCAweDQ3YzQyYTcxLCAweDMwMDM5ZDRjLCAweDM2ZjRkZGVlLCAweDY3M2ZjMzllLCAweGNiOWM3OTk4LAotCTB4Y2YwODFiOTcsIDB4NWZlMTdkZDEsIDB4OTdmODFkN2EsIDB4YmZlMTNiZmUsIDB4MTgwZGVhOWIsIDB4ODYxM2RhZTcsCi0JMHhjNjgyNmNmNiwgMHgxYzQxYjNhYiwgMHg1NzdiMjRmMywgMHhkYjg3MjE3MiwgMHhlMjNmY2VkMCwgMHg3ODg3ZmY3ZCwKLQkweGM1OWRhYTNkLCAweDk1OWU0NDY5LCAweDU0YTFmNzk4LCAweDhmMDM4MzEzLCAweDdlNGRkNDg3LCAweDQzYzQxNDdmLAotCTB4MjI0YWZlMDQsIDB4YjdmODFiNDgsIDB4MWM2YzFlMjksIDB4ODNjMDM2MGYsIDB4MmUzZmI3ODAsIDB4MDY2NWZiNDIsCi0JMHhiZDk1NmI4ZSwgMHgxZWUwMmI1ZiwgMHhlOTJiMWNlYSwgMHgxOTViYWM0MywgMHgzYzY2NTgyNywgMHg1ZGY4MGM1NCwKLQkweDgxNzk5Mzc2LCAweGJlMzhkMjk3LCAweGZiY2M1ZTM1LCAweDQxMDY3M2ZiLCAweGI4ZjAyOGI5LCAweDVkZGUyZmIyLAotCTB4YzRkNzcxYTksIDB4NWZmZGJjYmIsIDB4ZGMyNTc3OGMsIDB4OGYyZDY1OTQsIDB4N2Y3ZjI5N2IsIDB4MmZmNTU1MjEsCi0JMHgzNmZmZTM4NSwgMHhjNmVjZWE3ZiwgMHhiOWY2YjJmZCwgMHhjODZmNDc0ZCwgMHhhMGZjMmFkZiwgMHhhYmJmMmVmZiwKLQkweDdhNGViN2YwLCAweGUyMGE4OTZkLCAweDdjN2I0YTMyLCAweDZiZTNiYTVhLCAweGRmN2JiZmEwLCAweDA5ZWU0N2ZjLAotCTB4MDBmNTdjNTgsIDB4OTA3OTNmY2MsIDB4NTFhYmU1ZWYsIDB4MTFlY2ZiN2YsIDB4MzU1ZjRmNGEsIDB4YTlkNDNmMzIsCi0JMHhhZDZhNWZmZCwgMHg2M2U5N2Q3OSwgMHhiMTE1MTVmNiwgMHhlY2Q1ZDAwNywgMHgyMGI0OGZhNiwgMHhjZDUzNjZhZiwKLQkweGVhM2M1ODIyLCAweDMwOWU5Y2VmLCAweDgxZjI4NDdmLCAweGM2ZDEwMzJhLCAweDU1NWZmM2QyLCAweGFlNzNkZWM1LAotCTB4MzQ0YmMwODIsIDB4NmQyNzFlOTYsIDB4MWUyMWE0OWYsIDB4ZDJiNWFmNzgsIDB4MzFlOGYxYTgsIDB4YjdiZjI0MWUsCi0JMHhiOWVmZTdhYSwgMHg3NjUyYzM1MiwgMHg1NzZkNTU3ZiwgMHhiNGQzN2U2MywgMHg3NDhlMmNlMSwgMHhlZjBkYjFiZiwKLQkweGYyMzhjZTI1LCAweDY4NDdhNWU4LCAweDJhZWQ1OTNiLCAweGUyYjc3OTY2LCAweDU0ZWZkMTllLCAweGZhMWYxMzM3LAotCTB4N2U2MTJhN2IsIDB4MWRjNzg5NTQsIDB4ZWUzMTZiOTcsIDB4NjFmN2VjYTgsIDB4NGQ2M2YzMmEsIDB4YmYyYzRiNTIsCi0JMHg0ZmNiMmY2MCwgMHhlZTkxZTcxMywgMHg5MGJlODhlZiwgMHhiYmMzYzFlNSwgMHg1YThkOTVhNiwgMHhkMDdjYzBjZiwKLQkweGZlYTNmNjNmLCAweDU1N2MzMGQxLCAweDYxYWZlMDNlLCAweDlmNDY3NDhjLCAweDFiMDNkN2VmLCAweGZkODJmZTlhLAotCTB4NTk1OGZjOTUsIDB4ZTlkZmE4ZGUsIDB4NDgyM2U2YjMsIDB4M2M1ZjQyMmYsIDB4YmFjMWVjZDUsIDB4YWIzNTBmZDIsCi0JMHg2ZTMwM2ZlNCwgMHhlZTJmZTIzMywgMHg1ZTQ3MjgxNiwgMHg2NjE4OWZiNSwgMHg5NWY2ZWVmZCwgMHg5ZDg0YWJiMCwKLQkweDA0ZGJiNGE1LCAweGI1ZWYxMGJmLCAweGMzZmMxNDBkLCAweDc3N2IxMWYwLCAweGJjY2FjMzUxLCAweDE1ZmYzOTM0LAotCTB4ZDlmMjk1N2MsIDB4N2Y4YzM0ODIsIDB4MDA2ZmY5Y2EsIDB4N2ZmNmM2MWYsIDB4ZDNmNjFmMTcsIDB4ZmMwZGEzN2QsCi0JMHhlY2E5NTUzNSwgMHhkZDI1NzM3ZCwgMHhmOTMyMjZkNywgMHg3NTc3YTRhOSwgMHgxOWY1MWFiOSwgMHgzYTBiYmQyNSwKLQkweDE5YmVjZmJmLCAweDIwYjM3NWZkLCAweDMxZDc0ZjU2LCAweGZiYzI0MWFiLCAweGZmNWYyNzUyLCAweGJhMDY0M2UxLAotCTB4YTdiNmFlODQsIDB4ZThmN2IyYjQsIDB4ZmJlZTkyNmUsIDB4ZTliMzgxY2EsIDB4OTY3N2RmMzAsIDB4OWMzM2E0MDMsCi0JMHhmODY2NWJkZCwgMHg0N2Q2OTQ1OCwgMHhiYjRkMmU4ZSwgMHhiNzk1MWNiNiwgMHgxN2YxOGJmZiwgMHhiZTczZmY2NCwKLQkweGNhMjQxYzliLCAweGQ0NzMwNTdiLCAweGQzOWYzNjJhLCAweDIxM2VmMmM4LCAweGNkYzdhY2VmLCAweDY3NTU3OWVlLAotCTB4ZDM3YmUyYjYsIDB4MTIyZmI4NjQsIDB4N2RkMmM4ZjgsIDB4YzU4ZWIyNmEsIDB4MDE0OTM0MzcsIDB4MTE3NTA4ZWYsCi0JMHhlOTIzMjdjZiwgMHhiMTQ2NGJlZiwgMHhmOTk0Mzg3NywgMHg0ZjNjZjU5OCwgMHgzNzcxOTk3MywgMHhiZTUyMTNkZSwKLQkweDNkZjIyNDA3LCAweGNhNzhmOWViLCAweDdmNDQ4MTc3LCAweGY5NTgyZjcxLCAweDM0YzZkMDJlLCAweDkwYWQ3ZjdlLAotCTB4ZjgzOGIyMTQsIDB4Mzc1M2Y5YjUsIDB4ZmYwMGM5YzgsIDB4NjZkNWY3NzAsIDB4YTRiNjczYjQsIDB4YWU0N2YxZmQsCi0JMHg2ZjNjN2U1MSwgMHgzZTdlZTM0YiwgMHhiZjZjNWQzZiwgMHhmZjZjNWQwZSwgMHg2YTE3NDlmZiwgMHhlZjdjNTZkMywKLQkweGUyZTk2NmUzLCAweDNmN2RhYjExLCAweDhmOWM1YmFjLCAweDk2ZmM3M2RlLCAweDc4YjFjZjFlLCAweGY5NjdiODBmLAotCTB4NDcxZWY4YWIsIDB4ZTMwNDM3Y2YsIDB4YzNmM2Q3NDAsIDB4NmJiMTc0OTQsIDB4YmFjZmEzM2QsIDB4YWYxNDRjNWIsCi0JMHhkMGI5NGYyMywgMHhiOGUyMzAzZiwgMHgwZGJmZWYxMywgMHg5OTBlZGY3YiwgMHg5MGUwYTRjNiwgMHgxNmViMGQ0MywKLQkweDFiZDA4MjdhLCAweGRmODBmY2ZjLCAweDFkNzllMTUzLCAweDZlMzdjYTM3LCAweGFmZjFiZTM2LCAweGZiODg2YjhhLAotCTB4NGY1YWRkMzIsIDB4ZGI5MDA5ZjEsIDB4YmU4MmMzN2IsIDB4OGQyNTdkOTcsIDB4ZWY1MGVkYzksIDB4OWNhMjVhNmUsCi0JMHg1MzRmMDA1NywgMHhlZjE1ZGYzOCwgMHhkOWE4NTY2ZiwgMHgzYjk3YjkzYiwgMHg1ODlmZThkNSwgMHhmZWRmODNmMSwKLQkweGRmNmI3OWYyLCAweDU4ZmE5NWYxLCAweDUwNzJmOTgzLCAweDBkOTQ0NmZiLCAweDVmMmY5NjJhLCAweGJjYzU2ZTU4LAotCTB4YzA3YmIwMmMsIDB4MTdmYzIxNWYsIDB4NTg0N2VmY2EsIDB4ZDFkM2MyY2IsIDB4NjlkNTFlZGUsIDB4YzczY2Y1ODcsCi0JMHg1ZjBhMTNkNiwgMHgxMjNlNGQwZCwgMHhhODdjZWVmOCwgMHgxNWY2MWJmOSwgMHg5YzA3ZTc5YiwgMHhiZGU5MDk4ZiwKLQkweDljZjk5Njc2LCAweDFiZWY4ZmMxLCAweDZkZmY4YmE1LCAweDM1MjRmZmZhLCAweGZlNTQ0OTcxLCAweGE2NmU0OWU2LAotCTB4NTdhNjEyNGYsIDB4NTg5ZDIyY2UsIDB4MmMzZTIxY2UsIDB4NGZlNTg0OWQsIDB4MmMzNjI3Y2YsIDB4YWVmNjEyMTcsCi0JMHg2NzBjYTFmOSwgMHg4ZGU4M2E0OSwgMHgwZmJlMWY1YSwgMHhiZmY1ZTk3YiwgMHg0Y2ZiZTJlNywgMHg4NTZjOGU3NywKLQkweGU1NWJhODljLCAweDU1ZWE1NmI3LCAweDhmYmUwNTNkLCAweGQ4ZmYwM2E3LCAweDJiNzRmN2YzLCAweDdiMWJmZmNhLAotCTB4OTQ1MDdhYTcsIDB4MTA3YTRhN2QsIDB4NGE2ZmY2YmYsIDB4YzRiZWVjZDUsIDB4NWU1MTA3YzksIDB4MWY1OTlhNTQsCi0JMHhmZGY5ODYzMiwgMHhlMjY0MjYyNywgMHhjZGYzZjFmOSwgMHg2ZjgyY2Q4NCwgMHhlZjJhZmM0MiwgMHhkZmM1OGE4YywKLQkweDc3Zjg0YTk3LCAweDJhYmRkYTc5LCAweDhiNzk2MjNjLCAweGE4NmFkZDMyLCAweDc5ZWQ2NmVmLCAweDQ0YjcxNjc1LAotCTB4YzIyMzc5ZWIsIDB4OGI3MmZiNTgsIDB4NjdkZGYyMWIsIDB4Y2I5ZTJmMTMsIDB4YWVlZDkwYjksIDB4YmQxM2JmZjYsCi0JMHg3YmY5ZDg4MCwgMHgxMjdlYmUwNiwgMHhjM2E4YmZlZCwgMHg4OWI2ZjJjMCwgMHg5YmY2MWIzNywgMHgxMDQ5NzYwZiwKLQkweGU5OTdmNzNiLCAweGVlMGZiY2VjLCAweGUwZmRmOGM3LCAweGUxNWZiOTMyLCAweDI2N2VkZTIxLCAweGUwMTNhY2EzLAotCTB4ZmI3NGJiZjEsIDB4MGQ3Y2UwZjcsIDB4Zjc1Y2VlOGUsIDB4NTNmODExNTQsIDB4YzJmYzA0NTQsIDB4MTg3ODhjNWYsCi0JMHg1ZmEyMjhlMywgMHgxMWVjYjU5OCwgMHhjNDg3NmVmOCwgMHhmYjVkOGJmMiwgMHhkMmRkZTJmNCwgMHhmYzdmNDBmOCwKLQkweDU1ZjI4Y2ExLCAweDc0ZGFkZGYwLCAweGMxNDI5ZmM2LCAweDk0MmVmZTE1LCAweDI2MWQ4ODIzLCAweDgzMDZkNWYyLAotCTB4NDI3ZTg4NmUsIDB4ZWQwNmVmODIsIDB4NDM3ZDU4OTAsIDB4NTc3YmQ4ZmEsIDB4ZTk3N2QxMWIsIDB4Y2MzM2ZkMDIsCi0JMHhlYzMxZmNlYSwgMHgxMDhlYjA2MywgMHhiZmZmYWMyMywgMHhkMjE5YmRmOCwgMHhlZjcxMGU5OCwgMHg1NWU4MmYyNSwKLQkweDRhN2M1ZmEwLCAweDI3ZGMzMWM1LCAweDYzYjUzZGY4LCAweGVkNGQzY2ExLCAweDQwZmYyODUxLCAweGNmMjg1MWVkLAotCTB4Y2ExNDdiNTAsIDB4MGEzZGE5Y2YsIDB4MzYyYmEyZTUsIDB4MTQ5NzFjNzgsIDB4Y2U3ZmQ4NjcsIDB4YmJmODNjZTgsCi0JMHgzM2E2MmYxYiwgMHhjMzI2NzliOSwgMHhjNzViMjlkOSwgMHg2M2FlMWQzZSwgMHhjN2YzYTU4NywgMHhlYzc1ZDE0ZiwKLQkweDgyYWQ5M2Q4LCAweGUwYTEyY2ZiLCAweDZmZWZiM2QxLCAweGY4MjBjZWU5LCAweDkzZGZjZGVjLCAweDZjY2JlNzgyLAotCTB4ZWZlN2YzZTQsIDB4Y2ZkY2EwZDYsIDB4MmU0NmY3NmYsIDB4M2RhZWY4MGUsIDB4Yzg3ODg3NWQsIDB4MTIzNjczZGIsCi0JMHhmNzM2ZWZjNiwgMHhkMTJlZDVjMiwgMHhiMTUyNGVhZCwgMHgzMzBiZmI3YSwgMHgwYjlkNWRlZiwgMHgwMjc3YjBmYiwKLQkweGVlZjllOGZlLCAweGZkYmYzMjgwLCAweGZiODYzZmI3LCAweDhjN2M3NDFiLCAweGJlNDhmNmM3LCAweDUzMmY0MDY3LAotCTB4NmZiOTQzZWUsIDB4ZmZiYTJmYjEsIDB4Yzc3ZmQwNzUsIDB4MTNiMDdlOWUsIDB4M2IwODZmY2EsIDB4ZmJkOGZiMmYsCi0JMHhiYmY3N2RiOCwgMHhhZjdiZDcwYSwgMHhmNzA0NTdkZSwgMHg1NmZkZWUxMiwgMHhmNDFmMzQxZCwgMHhjMjI5NDY0YywKLQkweDk5ZDA1NmJiLCAweGJhNzFiNzg4LCAweGFlZmFmODEyLCAweDFlMzk1YWU3LCAweDAwMTdlZjExLCAweDNjODJiNTBmLAotCTB4ZmEwOTFhYmEsIDB4NWI4ZjI1NjAsIDB4ZmVjZWVmYjYsIDB4MWNiOWVmMTAsIDB4M2JmODEzNTEsIDB4ZTVhMzgzODEsCi0JMHhjMTlkNGVlNywgMHhmMzI4OWRjZSwgMHg4MDFjZTlmNiwgMHhjZWZiMWRhZiwgMHg5Y2ZiYzM2NSwgMHhmMGQ5M2YxNCwKLQkweDRhYmY1Yjc3LCAweDE3ZjMyZmVmLCAweDY2Zjg4ZGU2LCAweGZkMGZkMDIzLCAweGUwMmVmZjFlLCAweDAyYjliMjBjLAotCTB4MGQzM2YzZTIsIDB4MmQ4NWRmZmIsIDB4YTk5ZjM2Y2QsIDB4ZGNmY2Y4ODAsIDB4OTQzMGU5NDQsIDB4NjM5OWFjZjMsCi0JMHhmMjJmMmUyMSwgMHg5NGU0MTc5YSwgMHg3NGEzODYxZSwgMHhmNTEyYWQ4ZiwgMHgyZTYwNTJiOCwgMHhkY2ExNzIwMSwKLQkweGU3MWZjMTEwLCAweDQ2Mjg3MjE1LCAweDk4OTcxZjU2LCAweDJlZmVmYjIyLCAweDdkYWM5NjZiLCAweGIyZWRjZTQyLAotCTB4MjZmYmRlZjYsIDB4ZGZmZTIxYjYsIDB4N2MzYzAxZmIsIDB4NDY1ZTIwZmQsIDB4OGVmZWMxZjcsIDB4N2RlYzRiZDksCi0JMHhjNzNkYmNkZCwgMHhkNjlkYmVlZiwgMHgwZDNjYmQyNywgMHhjMWRiNjNkZiwgMHgyYWVkMjdkYiwgMHhkNjIzYmZjNywKLQkweGEzYTllMTQzLCAweGUxZjlkNDhhLCAweDE0ZjMzZjhmLCAweDEzYjBhNjBjLCAweDc4YmRmNzZhLCAweGJlNjdkZTE4LAotCTB4MWQ3MDlkYWUsIDB4ZmJkNDIwZmIsIDB4ZDJiZmEyYTEsIDB4ZjJmY2EwM2UsIDB4MDcyZmMwYzcsIDB4MGNkNTNlYmYsCi0JMHgyMzFkYTFmMSwgMHg3OTA2NDliZSwgMHhlZmMxOTk5NCwgMHgyMWJiNzE4NywgMHg5ZWY0ZGQxNCwgMHg2MWZhYzkwZiwKLQkweDI1MjhmZGUwLCAweDI4ZjIxMGRkLCAweDRlNTY0M2E3LCAweDAxZWVjNjNhLCAweGZiM2YyY2RkLCAweGI0MzNmMDEzLAotCTB4ZjAyNDVkYzMsIDB4ZmQyYTA4ZWYsIDB4YjY3NTgzNjUsIDB4ZmYwNDFmMGYsIDB4Yjg2YTA3Y2UsIDB4M2Y3YmQxMDksCi0JMHg1YmZjMzE2YiwgMHhiMjc3YTdlZCwgMHg0OTYzZjM3MCwgMHgwYmJiZjhiMSwgMHhlZTdhZTBmNCwgMHhjMTk1OWIzZiwKLQkweDc2YTRhY2UyLCAweDQ1NDk2M2ZmLCAweGUyYjI3NmZlLCAweGIyN2JlYzhjLCAweGFiMjM1YTUyLCAweGQ3OTRjZWFmLAotCTB4MDlhZTk3ZDcsIDB4MGY0YTFmZWMsIDB4M2NkY2ZjNWIsIDB4ZWUwZjMzOWQsIDB4ZmY0MTQ5ZjEsIDB4N2FlZjYyNmUsCi0JMHhkODVmMzk2MiwgMHhlY2Y5MDRiNywgMHhmMTRiZmRiOSwgMHhiZjJhYjllZiwgMHg4MWUzYTdhZiwgMHgwODcxNmZkZiwKLQkweGQzZjgyYWY5LCAweGNmN2IzNTBjLCAweDRjYmVkOTU3LCAweGI1YmI2N2NjLCAweDYxNGE3ZGYzLCAweDZmNWM3OThmLAotCTB4NjlmYmI5MzAsIDB4OTMyNzUzOTQsIDB4N2Y0YzE5ZWIsIDB4YzllMWI0YmQsIDB4NzEwZDdjMWYsIDB4OWVjY2JkYTQsCi0JMHg3MjYxNjRiYSwgMHgxN2Y3N2YyMywgMHhjYzdiZjgyYSwgMHg3ZDE5YzM4MywgMHgyYWJkOWJlNSwgMHg1M2QzMjdiOCwKLQkweGJjODJlMTFkLCAweDI2YTU4NmVkLCAweGRjMWJiN2NjLCAweGExODlmN2NmLCAweGZjMWY5MDgwLCAweDFhN2ZkMGY0LAotCTB4MGVmZTdkMjgsIDB4YzgwNWJmMmUsIDB4YjlkMDFlZTEsIDB4OGNmMWZkNjgsIDB4NDk4NzI4NDMsIDB4Yjg2ZmNiMmUsCi0JMHg5YzdjZmI1NSwgMHhiZmE4NjRlYSwgMHgzMTdlMzE5NCwgMHhjYjhmZTgwNywgMHg1NWNmNDIyYiwgMHg1N2E0NjNjMywKLQkweDAyMWYwMTdlLCAweGMwZmQ0MGI4LCAweGYwZmJkZjRmLCAweDFlMzNmMDY5LCAweGZjMDJmYzY1LCAweDBmNTEzMzA3LAotCTB4N2VlNTFiYjAsIDB4MWVmNjM2ODUsIDB4MGJiZDk1OTgsIDB4NDI0MmYyMjIsIDB4ODc2NThmZjEsIDB4NTc2MDc1NWEsCi0JMHhmMWZlNmFkZSwgMHhjNGY5ZjVmMiwgMHg4ZjE0MDliMSwgMHgzZTU5N2IwZCwgMHhmZThlZTVmNywgMHg2ZjgwMjQ1MSwKLQkweGYwZDdlMTI4LCAweGI3Y2YwYTljLCAweGE4Nzc3N2E4LCAweDUwNzljM2M3LCAweDcwMTY0YmRlLCAweGIyMDFlNjI2LAotCTB4MTgxZTc4ZjcsIDB4MjBjOWI3ZmQsIDB4YTdkODFmOTcsIDB4NTBmNDQxNjEsIDB4MTE1NWFjZjMsIDB4ODMzY2MwNmIsCi0JMHg4ZTUxZTlmNywgMHg5OGY3ZjU4OSwgMHhmN2Q5MWYzOSwgMHg1Y2QyZThkNywgMHgyMjBhYWU1NiwgMHhhMDFlYTk0ZiwKLQkweGEwM2QwNThkLCAweGY1YmI0MjUyLCAweDY1MDk3ZGUzLCAweDI1OGZmZjAwLCAweGUyMTZiMWUyLCAweDNhMmY5ODEwLAotCTB4YmYwNzBkODUsIDB4ODk5ZGYxMWIsIDB4ZTA0ZDFjYzQsIDB4NmVjMjdhZmIsIDB4NWE2ZmI2OWQsIDB4M2Y1N2QwN2YsCi0JMHg2M2ZmM2RkOSwgMHg2OWYyMTk4YSwgMHg4NzllMTY0NiwgMHgxZjhlZjBlOSwgMHgxNmM3ZWY4NSwgMHg0M2Y4MWE0NywKLQkweGViNzhmMTI2LCAweDE3NWYxNmM3LCAweDhmMWZkNWU4LCAweDZmYzA5MDhlLCAweDBkNWZjNzQ5LCAweDdkN2Q4YmUzLAotCTB4MzVhNDc1YWMsIDB4ZWQxN2ZhMDYsIDB4ZmJkM2JlODMsIDB4NDJiZGEyNWQsIDB4MDI3NGIyYmQsIDB4MTE2NzhiYzQsCi0JMHg1ZWZjZDc3YywgMHhjOWEzZDMzNSwgMHgwYjNjZWMzYiwgMHg3NTIwZGFiZSwgMHhjNzNiZTM0NiwgMHgzMmJiOTMxOSwKLQkweGE2ODRmZjY4LCAweGFiM2RhMTFmLCAweDUxYmEyN2NjLCAweDZlZDdiYTNkLCAweDc3YjEyNmRlLCAweDRlOGM2YzMyLAotCTB4ZmM1ZDQ3ZWIsIDB4N2YzYTc0YzksIDB4NDFlZmI1M2QsIDB4ZGY2YmFiYWYsIDB4MjhhNmVmOGYsIDB4N2I1ZWY5ZWQsCi0JMHhiYzJmZTk0YSwgMHg3ZmU4M2Y4ZSwgMHhjYTZmYjEwMCwgMHgwMDgwMDA1YiwgMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDU4YWRmZjAwLCAweGU1NTQ3MDBiLCAweGRlZjczZTE1LCAweDY2Y2Q5MjdkLCAweDQyMWIyMmYzLAotCTB4MjYwZGRkZTIsIDB4OWI3MDk2MDEsIDB4ZjUxZTQzNTcsIDB4OGNhNDEwOWEsIDB4NjM4ODM3NmQsIDB4ZmFkZWE1NmEsCi0JMHg1OTA5MjA0MCwgMHhkNmEyNzUwOSwgMHgwMDcxYTZlMSwgMHgzYjYzNGVhOSwgMHhiMzMwODhhMywgMHgyMzMxZTFkMiwKLQkweDMwNTRkMzUzLCAweDMyZDc0MGEzLCAweDVkYTk2MjU1LCAweDY2ZDQyZDhiLCAweDg4ZDQ2Yjk4LCAweGYxYTZjOTM1LAotCTB4YTE5ODY2NTUsIDB4NWVmN2ZjZTcsIDB4ZDYwODZmNzYsIDB4ZTZjY2RkM2EsIDB4ZTczZWZmZWMsIDB4OWNmZjhmM2IsCi0JMHhhYTM2YzAxZiwgMHg1Y2ZiMDE5NSwgMHg4YmRmZjAxNiwgMHhlZDJiZjFmNiwgMHg4Y2EyYzAyMCwgMHgwNmFjNDNiMCwKLQkweDI3YzhmMmQ4LCAweGZiMGRiZDdmLCAweDk5MGRlZGQ0LCAweDQ3ZjE4YjYzLCAweDQ3NWY4ZTNlLCAweDVjODA1NGIzLAotCTB4MDAwZWE1ODAsIDB4ZDRjMDE1NGYsIDB4YmVlOGI0ZmUsIDB4ZjA5N2Y1MDAsIDB4ZDliMDAzNTAsIDB4ODA0NTNmODcsCi0JMHg5Yzk0NGU4ZiwgMHg4ZmYxYzZlZCwgMHg4NzAzYjBkZSwgMHg5ZjFiMjc1ZCwgMHhkYjEwN2M5ZSwgMHhmOWE3ZjY1YiwKLQkweDA1OWUzNDljLCAweGVmOGQzZTZhLCAweDM4YWE4ZDJiLCAweDZhN2UzZWUxLCAweDI3MDczYmE0LCAweGZiNGJhNjBlLAotCTB4YmRjM2ZjNzEsIDB4YzYxZmNmYTUsIDB4YWZlNzg2ZjYsIDB4YWVjZDg4OTcsIDB4ZDk4ODNjNWQsIDB4MGQ4ODVmZDgsCi0JMHgzZTZkZmZlYSwgMHhmZDdlMDc1YiwgMHhmZDJlNzVkYywgMHg5MmUwZTE1YywgMHhmOGQwMzc5ZiwgMHhjZTg5NmNjMSwKLQkweGNiMzlhNTY5LCAweDc1ZWMyZTAwLCAweGYwMGU1MGNiLCAweDdkY2FjNDE5LCAweDczMWYwMGM1LCAweDFiOGYxOGVhLAotCTB4Y2Y4N2YzYjcsIDB4YjNjMDNjNzMsIDB4ZTQ5NGE1MGUsIDB4MzdmYmI4ZGUsIDB4Nzk0N2FiN2YsIDB4ZTc3ZTBmOWEsCi0JMHhkZmM4NjVlOSwgMHg0MGI5MzM4NiwgMHg1Y2YyYzBmYiwgMHg3ODdlMDE4NiwgMHgxYTcyOGI5OCwgMHg5NzA4YjVlNywKLQkweDYwMDg1YWJjLCAweDA2NzE1OGZhLCAweGI0Zjg5Mjg0LCAweGRlZmI3MjFmLCAweGUyYjgxOTc3LCAweGQzMjA3M2I3LAotCTB4Y2ExYWVlZDIsIDB4OTY1ZmJkZjcsIDB4OGU4M2I3NmMsIDB4ZDljM2RjMzEsIDB4N2QwZWZmNjgsIDB4NjU3OTg2MDgsCi0JMHgwOWQ1ZjEwOSwgMHgwODA4MDM5YSwgMHg5Nzg0NzI5OCwgMHg5YzA4NTQwMCwgMHgxM2ZmODQwYywgMHg2NWZmODY0ZSwKLQkweGE0OTBkY2ZhLCAweGY4Y2YyMjJkLCAweDE5NDFlMGU4LCAweDZjZmNlMGYwLCAweDcwMmJmOTcwLCAweDk3ZTNhMmI5LAotCTB4ZGY3NGEyNzgsIDB4YWQ2NmM0NGUsIDB4Y2Q1MDA1OTgsIDB4YmQ1OTJkZjYsIDB4OGI3ZmM5MjQsIDB4MTVlOWIyMzAsCi0JMHg5NzdhN2ZkYywgMHhlZjYyNzI1MywgMHgwY2VlMWJiOCwgMHhhNzNlYWU4NywgMHhlYjY0Y2M1NSwgMHgwNTNlYjlkNywKLQkweDdmYjI3NjViLCAweGFkYmZjZjUzLCAweDUxYzgxMGVkLCAweDI3ZDE1ZjVjLCAweGI0OGZkZTU2LCAweGFmY2JkMGRiLAotCTB4MGMzNWUxZmMsIDB4OGYyNzgxZjcsIDB4ZWU3ODY2OWUsIDB4M2ExZGUwNzksIDB4ZTk4Nzk0ZjcsIDB4YjhlYjRlMGYsCi0JMHgyMzY4MzgyNywgMHhkNmZkY2MzOSwgMHg1NmMwYTZiOSwgMHhjNzNlZmM0OSwgMHhjN2ZiMzVmOCwgMHhhZTViMzk5ZSwKLQkweDQ3NjNmZWUwLCAweGRhMDM5NzE2LCAweDdjNDI1ZGYzLCAweDY3YzQ1OWVjLCAweGZlN2UzZDMyLCAweGE3ODNhNDYxLAotCTB4ZjE1NzMyZmUsIDB4NDc2ZmNkNWMsIDB4Y2ZkYjM0Y2YsIDB4MWM3MzhmNmMsIDB4ZTQ4M2I3OTMsIDB4ODI5YmZlYzAsCi0JMHg5ZTIyOGRlMSwgMHgwOTkwMzYwMywgMHg0YjlkZDFiZiwgMHg0MjJkN2UxOCwgMHg5ZmY0ODMyOCwgMHhkZmNhYzhmOCwKLQkweGZkY2QzZTRjLCAweGZkY2NmZTRkLCAweGE0M2Q3OWNkLCAweGMyNjFjNDJmLCAweGMyY2YyZjExLCAweGEyNDUzOWZlLAotCTB4NmYwOWFlNDUsIDB4NDNkMzNjYmMsIDB4M2ZkNjNlZmQsIDB4MTRlZDg1OTEsIDB4OWZhMzZiN2IsIDB4MTczNmRmYTgsCi0JMHhiZjkwNzNkOCwgMHhlYTRlMzZiNiwgMHg0MmFmZDYwMywgMHgwNTMxYTMxNiwgMHgyZmZjM2JjNywgMHhkODQxYjgxYiwKLQkweGFiNzY3Njg1LCAweDkzOTA2NzYxLCAweDVhM2YyMzZkLCAweGRmNWRiYTAzLCAweDhiYzdmYjVhLCAweDc2ZTAxNzljLAotCTB4ZmEwM2IwMTgsIDB4ZjdiZTM5Y2IsIDB4ZTNhNDJlYzcsIDB4MTNiNGJmMDMsIDB4YmUxMGU4N2UsIDB4NGU1ZmI0MzEsCi0JMHhiY2JmODc3ZCwgMHg0ZGI5NmFmOCwgMHhhNThkODA0YSwgMHg1ZjgzMWJjNiwgMHgyMmNhMDliNSwgMHhjZjg0Y2ZiOCwKLQkweDAxNGJmMmEzLCAweDFiMzkxMTllLCAweDg1MDg1NzliLCAweGE1YzcwZjM0LCAweDNhODFkYTE4LCAweDkwZmE5NGU4LAotCTB4Nzg3YzRiOWYsIDB4ZTFkZmUxMmYsIDB4MWY5Mzk1ODgsIDB4ZjEyZWViOTgsIDB4ZTcxZmViMGEsIDB4N2QyM2FmNGUsCi0JMHgxZTU2MmQ4MywgMHg2NDdkNDc0ZSwgMHg0MGNiODAzYSwgMHg2NWM1MmI5YSwgMHgwY2ZkNDNjNCwgMHgyMzAxNWM1OCwKLQkweDk1MThmMWZlLCAweDFkODQ5Y2U4LCAweDhmOTEwNmRhLCAweGZkMzdlYTQ2LCAweGFhYTRlZDEzLCAweDdhMGM4Zjk5LAotCTB4ZmM5M2YzOTIsIDB4MDE5NWRiNWIsIDB4YjJhYWNmZGQsIDB4MmNjMGM4ZjksIDB4YzMyN2YxZmUsIDB4NDA2MGZiMGYsCi0JMHhkNjE3ZmRkMCwgMHg3YWU3MTBiOCwgMHg1OTAwNjcwMywgMHg2NGRmN2YyMCwgMHgzY2I5MzdiNCwgMHg1NGUzMDEzMSwKLQkweDA1NTJlYmMyLCAweDE4ZmViZmU0LCAweGY1ZGIwMWVhLCAweDQ0YWJkOGI2LCAweDA3YTFlYmQxLCAweDMxMDc1OWY1LAotCTB4NmIyMWJmN2QsIDB4OGY3MGU2ZmMsIDB4ZmMxYzcwM2IsIDB4YTkxYzU5OGIsIDB4OGRiYmQ0MzMsIDB4ZDFlOTAwOGIsCi0JMHhlZThjZmQwNSwgMHhkMTAyZTJlNCwgMHhhMzE0YzE2ZiwgMHg0NDZjZjgzMiwgMHg5NzQ2NzYxMSwgMHgxNWQxOTg0MywKLQkweDI1NzQ2MTEwLCAweDBhYmEzM2Y0LCAweDE5YmQxODA2LCAweGEyYzI4Y2UyLCAweGY4YjAxZjU4LCAweDU4ZGYxM2ZmLAotCTB4ZGY2ZjkyMWEsIDB4NWE0NjVmYzcsIDB4NjY0NDFiNzUsIDB4YzMyOTg3ZjMsIDB4MDc4ZGFmY2UsIDB4YWY5YWY1NDYsCi0JMHg1MDBhYzc4ZiwgMHg2YmFmOGNmYywgMHg4Y2JmMzJlMSwgMHg4Yjg5YjlkOSwgMHhkNzExZWM5MywgMHgyN2VhMjFiOSwKLQkweGRiMWEwOGRhLCAweDVjMzIwNmU3LCAweDEwNDZlN2RjLCAweDA2NmVkNDZkLCAweGJlNWJiNTk5LCAweDlhYjUxZTIyLAotCTB4YjM0MjUzNjIsIDB4YmIzY2QyZTAsIDB4NzAzNDVjOWQsIDB4YWIyYzI1ZTksIDB4MTg1YWZhOTMsIDB4ZDRkYjU5MTAsCi0JMHgxNDlmMjAxYiwgMHgyN2Q2YWZmZiwgMHg1NTlmMTExNCwgMHg4ODlmNGQ2OSwgMHgwM2IyMjIxOCwgMHhjNjFiNjFiZCwKLQkweGE2Y2FhYWQ3LCAweDJmNmM2MmVlLCAweGI3YTkzYzA4LCAweGVkMmE5YmViLCAweGZiZDM5ZTEyLCAweDhjNzJmMDhiLAotCTB4ZWUwYzJlYWIsIDB4Mjg0NWM0NmUsIDB4YTkxNmEwMTYsIDB4MDM5NmY2ZTIsIDB4Yjg1Mzk1ZmEsIDB4NTRmZjIyNWYsCi0JMHgxMGYxMDBkYywgMHg0MGI5ZTM3MywgMHhjMjU2ZDBmZSwgMHgzZTJkYmZlZSwgMHgzYWVmM2Y1ZCwgMHhkYTAwZjQ5NCwKLQkweGU2MmJhNzc3LCAweDJkZTcxMTE1LCAweDc0NzkyZGJkLCAweGU4Nzc2ZTBmLCAweDJiOWJiZWZiLCAweDY1MDU3ZTJlLAotCTB4YWUzOWUyNzIsIDB4MzgzY2E0OGEsIDB4YWRiMWJhYWUsIDB4NGY3NzYyNzEsIDB4NTdlZTc5MjAsIDB4NTAyMGFmMzgsCi0JMHg5YWYzZWQ3ZCwgMHhmYzQ4OGFmYywgMHg0ODA0YWI4MCwgMHgzZGM2MDVjZiwgMHgyZjU4MzgzZCwgMHhlZjlkM2M0OSwKLQkweGU5NmJlNzYzLCAweDM4M2RkZDI1LCAweGJjM2ZhNGY0LCAweGE0NGJmNjkwLCAweDkwYjVmNmViLCAweGQyNGRjZmYwLAotCTB4OTRiOTAxMzUsIDB4MjdmNjY3YzYsIDB4MWEzOGJmN2EsIDB4MWYxMzdkYzMsIDB4YWViOGMxZTAsIDB4ZDM5NGEwMzEsCi0JMHg1NmJjNWRiOSwgMHhmODdhODk1NCwgMHgwNzc5ZGE2OSwgMHg0ZmI0ZGZlOSwgMHgwNzcyOTUwZSwgMHg0MzI3ZGJjYSwKLQkweGJlZWNjMWQ0LCAweGFmMjU3N2MxLCAweDc3ZGE0ZTJhLCAweDBmZGM1ZWUyLCAweDg3MGFhODcxLCAweDVjMzhlZDliLAotCTB4NDkzOTE2ZDMsIDB4NmZlOTU2YjQsIDB4YTczYTExYzYsIDB4MTJlOWY4OWUsIDB4YmU5MWQ2YTYsIDB4MzhjZjMzMjcsCi0JMHgzN2ZlNjAzZSwgMHgyMzMzYjc1ZiwgMHgzMTNmMWQyZSwgMHhkZTgxNzBmYywgMHg3ZjhhNDMwYywgMHhmOGI4OWQ3NSwKLQkweDFlMzAzZmY5LCAweDI0N2I0ZDc2LCAweGVjN2Y1ZTlhLCAweDI2ZjA2ZTk5LCAweDNhYjMwYWZkLCAweGZkMzBkYzRiLAotCTB4MTljODZlYWMsIDB4ODViY2Q4MTMsIDB4YzZmY2QyZjcsIDB4MTRjNTIzMzMsIDB4ZDExODZmNmYsIDB4NDJkYzMwZmEsCi0JMHgwMmQ5ZjhlMiwgMHg3YjhkZGVkZCwgMHhmYjgyZmU0MSwgMHg4YjQyZjczYSwgMHhiOGM3NGE4MCwgMHgxMDg4ZjliZiwKLQkweDliNWNhMjc1LCAweGRhMzA0ZjI5LCAweDc0M2ZiNjJhLCAweGQwNjQ5ZGExLCAweDhmOTNkOTdjLCAweGU0MzdhZDcyLAotCTB4ODNmZTFjZWEsIDB4NmQzYTgzMDMsIDB4MWJiYzkyYTMsIDB4ZWZkN2ZlMGMsIDB4Y2E2NmZiYjksIDB4ZWQ0NDM2ZmIsCi0JMHhkZjhlZjhjOSwgMHgzNmU4OTFmNiwgMHg5MGZkYmJlMiwgMHgyMTIyOWZiNSwgMHhhYzY1ZGZjOSwgMHhhYmJjYTBlZiwKLQkweGViMzdmMjk4LCAweGZjNzgyZWJjLCAweGJhOTcxNDVmLCAweDliZmRhYzg2LCAweDRjMzllOTAyLCAweDA2M2RjNjBmLAotCTB4OWY3OGJlNDYsIDB4YTNlNDg3MzEsIDB4NzFmMzc5YmMsIDB4YjI4OWQ0NDcsIDB4MmRkYmRlNmQsIDB4ZTg1ZGE4ZjksCi0JMHhkZDFjNTg5MSwgMHg1YmIzMjhmMywgMHhjOWVjM2U3MywgMHhmYTYyMzY2NiwgMHhjMDFkODZlNywgMHhjNzEzNjBmMiwKLQkweDMyOWMwN2E1LCAweDgxZTk2M2U5LCAweDYyZGY5NjNjLCAweDBhZjJjZTVlLCAweGNlY2MxMzhjLCAweDFjMjYyMjk3LAotCTB4OTkwYmRkZGEsIDB4Y2YxZTQxNTMsIDB4OTk3OGUxNzksIDB4Y2JmMzc5NDQsIDB4NmY3ODY1NWIsIDB4MzMzZjkyNDEsCi0JMHgwZTExNmY2ZiwgMHgzZWQwM2IzNywgMHgxZjAxZWZhNiwgMHg1MDM1N2RlNSwgMHhhZTAzNzRmNiwgMHg4NzY1M2VhYiwKLQkweDgzNGY4ZTI4LCAweDBiZTk4ZmFlLCAweGViYmZjYjNjLCAweDY0ZmQyYjg2LCAweDIzMWNjMjA3LCAweDRmMzFmODZlLAotCTB4MmRjM2MxNGYsIDB4MjUzMTAxY2UsIDB4NzVmMTM1Y2YsIDB4MmI0YjdhMWEsIDB4YTc4Y2IyY2IsIDB4ZWIyY2YzNGIsCi0JMHhkNjgzNmEzMywgMHgwZjFjYWFmNSwgMHhkNjljNTBkNSwgMHg4YmNhNjdkNywgMHhjMzQxZjMyYywgMHgzMDZmMWMzZiwKLQkweDVkZWVkYmUwLCAweGI3ZWM4YTcxLCAweDY2ZmViM2QxLCAweDY1N2IyOWMyLCAweDUzYmU2NTg1LCAweGZmMTAyNjM4LAotCTB4MmNkYTlmMGQsIDB4ODQyNmZjN2EsIDB4Y2U1MWQzOWIsIDB4MGYzMWI3ZGEsIDB4YzZlYTczYzEsIDB4NGQ2ZWUzYWQsCi0JMHg3ZWU3NWEwNSwgMHhhMDFmMjUzYiwgMHg3YjZiNDRmZCwgMHhmOTg3YjRjMCwgMHgxZWQ1M2YzMCwgMHhhZTdiNzg5MiwKLQkweDUwZjY0OWUwLCAweDc4MmMwYjAzLCAweDBhZWJjNGNmLCAweGYzMDcxZWZlLCAweDZlZTFiYTg3LCAweGQ4NmU1ZmM2LAotCTB4OWI1ZTdiOGEsIDB4YzU3Y2Y3MTUsIDB4N2FjMTczOGEsIDB4MTE4NWNlMmIsIDB4ZjVkN2NlMmIsIDB4YTgwZDcxNTgsCi0JMHg3NzhhZGM1NiwgMHg1ZmU2NTlkNCwgMHg2OTY0ZGZkZiwgMHg2NTVhZWU5NywgMHhiYTMwYmY5OSwgMHg3YzVlZDJkYSwKLQkweGZjY2I3NmU4LCAweDU5NzcwMzI1LCAweDZkMGU5N2M2LCAweGY2OWI4Y2I0LCAweGRmZmY1MzM1LCAweDYxOWU2ZDg4LAotCTB4NWZmMDNjNWYsIDB4NTNjYWZmYTIsIDB4OTljZTU5MGYsIDB4ODg4MDc3YTksIDB4NmJkNmY4NDAsIDB4NTcwM2JiMDAsCi0JMHhlZGZhYmRlYiwgMHg1NzhhZjA3ZSwgMHgwZjAyOWRlYiwgMHhmNTMzOWRlNSwgMHhhN2ZhNDUzZiwgMHhmZmU4NmYzOCwKLQkweGM2MjlkMjMzLCAweDE3YmQzN2I5LCAweGZkMzcyNzFlLCAweGNmMWU5YTZlLCAweGI4ODY4NDVhLCAweGIwNmQ3YTRjLAotCTB4Y2ZlYjdhYjMsIDB4M2E3Mzc2NjIsIDB4MWVlMzAzYzUsIDB4MThmNzFiMGIsIDB4ZWNjMWRmYWMsIDB4ZGJkM2VjMjEsCi0JMHg0OTNhNWM1MiwgMHg1Y2UyYWM3MSwgMHhhYWY4OTliOCwgMHg1MTI3MjJkMiwgMHhkMGI5YTg0YywgMHhmMzQxOWNkZiwKLQkweDM4N2QxMDY1LCAweGZhZjAzMzlmLCAweDM2MDcyZDVlLCAweDdiNjEzZjhiLCAweDViY2YxMjZlLCAweDAzMjE1ZWQ0LAotCTB4OGE1ZmQ3MjcsIDB4NGIzMGIxZjYsIDB4YmY5ZTBlYzUsIDB4NmFlNzE4ZGEsIDB4NTVhMjdiZjUsIDB4MDUyZDgzNzYsCi0JMHhmMzVhYzY5NywgMHhmZTMxMDhmZSwgMHgzMTZmZmM0YywgMHhlN2NjMDhlYSwgMHgzY2Y5NDFjMSwgMHgwNWY2OGFlZiwKLQkweGE0NWZjYjY2LCAweGFmY2IwMjVkLCAweGJkNmY5NjE0LCAweGEyNzYyOWNlLCAweDIyZjE1YzZiLCAweDllNGFlYjhhLAotCTB4Yjg4ODJmMzIsIDB4Yzg5MmYyNGQsIDB4ZWI0ZTMzZjIsIDB4MjQxMmExMjMsIDB4NmE1NjVkMTgsIDB4NzU0Y2FiNjYsCi0JMHgzMGEzOTYxOCwgMHhkMTlmMjkwZiwgMHhmYjE4N2FhYSwgMHgyZjQ2YWQzZSwgMHgxMjUzZTk3YiwgMHgxODgzOGE1NCwKLQkweGRmMzk0NzE3LCAweGZiNWM0YWI2LCAweDQ1YzdkZDY2LCAweGNhMmQ2Zjc0LCAweGZmNTAxNzkwLCAweDNjOGVmNzk1LAotCTB4YWJlMzBiOTQsIDB4NDEyYThiYzYsIDB4YjFjNDNlYTAsIDB4ZGE2M2UxZmEsIDB4ZGY4YTU5NjQsIDB4N2JiM2IwZWUsCi0JMHg2YTdhOGMwYSwgMHg1OTkzODFhZCwgMHg5YzYxZGQ0ZiwgMHhhYzViOGEzYiwgMHg3NmJkZjhjNywgMHg0Nzg2NzVlOCwKLQkweGQ1OWM3ZmJiLCAweDkyNmY2ODlmLCAweDdiYmZmNzBmLCAweGVhODJhN2JlLCAweDI1MmI5MDQ5LCAweGViMzcwZWJkLAotCTB4N2ZlMTAyYWIsIDB4N2FjZDQ3YjksIDB4ZGJmMzVhZjQsIDB4NzUyYzE3ZmQsIDB4ZWZkNjFjMmUsIDB4YWZlZjZiOTcsCi0JMHhjYTRkN2IzMiwgMHhmYTNmZWZhZCwgMHg3N2JiMWE1OCwgMHg2YzJiMWY0NiwgMHg3ZmRjOWEyMiwgMHgzNmJmZWQ5MiwKLQkweDNlYzU5NmYyLCAweGJiZjllY2VlLCAweGE0N2VlZWM1LCAweGQ3MTk2YmJlLCAweDA1ZWNhNjcyLCAweDM0NzZiZjI4LAotCTB4MTAwZmM1N2YsIDB4Y2UyMzg5YmYsIDB4NTEzM2FhMWEsIDB4YTYwZmRmNWYsIDB4MTNkYWMxZDQsIDB4YmNlOWNiYTUsCi0JMHgzZmU3MmVmZiwgMHg1YjIzYmUxOSwgMHg5MDViNjBlMywgMHhkNmZjZjM5NCwgMHg2ZGFkYWM3MywgMHgyOTlkMThkNSwKLQkweDlhOTc1OWE3LCAweDI4N2JmMWQ0LCAweGE2N2VhMWIzLCAweDZjZDIzOWI4LCAweDQxMjMyY2VmLCAweGI5MWY2ZjNkLAotCTB4ZGQxMzZlNzEsIDB4MGU4NTIzYmYsIDB4ZjQ0YjRlOWIsIDB4NGJhZDdlNzYsIDB4NDk1OGFmNmYsIDB4ZWNmNzYxMzQsCi0JMHg4NDc0YmFhMCwgMHg3YjQzOTkwMywgMHhmOWY3OWQxOCwgMHg1MTZlMDcwMSwgMHg0MDNjYTc5NywgMHhhNjlhMjY3MiwKLQkweDI5NzdhNzNlLCAweDI4OGFkMWM4LCAweDJhNjY0YzllLCAweDg3M2Y1MjBmLCAweDE2N2U1ZmM5LCAweGYyODRiM2UzLAotCTB4ZmFiYzBiZmYsIDB4NzAxOGMwNmIsIDB4YWQ2ZGRmNjAsIDB4N2E0ZmQ3OTQsIDB4NjQ3ZmJiNzUsIDB4MmFhZDJkZGYsCi0JMHgxOTk5NTJlMiwgMHg0MGViNGFkZSwgMHg5MTdiZDhkNiwgMHg4ZWY5YWZjOSwgMHhkNTJmNzU0MiwgMHg0ZWI3MDkyMSwKLQkweDI2MzkwN2I3LCAweDc0MTk4ZWZmLCAweDI4ZDRkNTM3LCAweDFkMDY0YmRmLCAweDM4NGFmYmU1LCAweDRlZGQ4N2YyLAotCTB4N2U2MDFmZDgsIDB4MzE1ZTUzMjAsIDB4ZmJhOWNjN2QsIDB4OGJjMDBkODEsIDB4NzExZGVmZTMsIDB4M2NmNjQ3M2UsCi0JMHhiY2E2NzkxNywgMHg5NjMzYjMwNSwgMHhjZWZjNTdmZiwgMHg2MTM4YTMxOSwgMHgxNGU0YmZiZSwgMHhlMTBiM2Y4YiwKLQkweGVjOTc5Y2ZhLCAweDRjOWZjZWFjLCAweGJmYzg2YjE3LCAweGIyYWZiZDNiLCAweGEwYTZlYmJjLCAweDQwZTRjMDMyLAotCTB4OGM3ZTI4NDksIDB4ZGJlZTc1MWUsIDB4MmE0ZGZjYzksIDB4N2ZmZTlkNWEsIDB4MTAzYjY3N2QsIDB4YTY4Yzc1NjQsCi0JMHgzYmM2OTFlNywgMHg4Yjc3Mjk5YiwgMHg3YjkzMzhmMCwgMHg0ODEzOTc3YSwgMHhlMzdiODljZSwgMHhiYmQ4ODU0ZiwKLQkweDdjNDQ1NDkyLCAweGRmM2FmMjhlLCAweDdjYTZiZjI2LCAweDdkYzkxY2E2LCAweGNkNmVkY2JlLCAweDdiZTRhMmY3LAotCTB4ZjIxMmY2ZDYsIDB4N2Y1MWM0MDMsIDB4M2JiODEzYzcsIDB4ZmViMmNmNTcsIDB4OWFhYmU5MGMsIDB4YTA5ZGE3YmQsCi0JMHhhMjMxYjYzOCwgMHhmNTI1YTdiZiwgMHgzYmMwZmZkZSwgMHgwZjYxYjdhNCwgMHg1YWQ3NjM4YiwgMHhjZWNlNTMzZiwKLQkweDBmMGNjMzEzLCAweDI0ODdmMzk0LCAweGE3OWM4YTVmLCAweDdlZWYyOTgzLCAweDNlY2ZjNzEzLCAweGJlYmYxMjE1LAotCTB4MzhjMjg5N2MsIDB4M2M0Y2RmN2IsIDB4YzQ0OGIxNzcsIDB4NWVjNzlkZjUsIDB4ZDI3NjQ3M2YsIDB4MzNmZmQ0NjksCi0JMHg3MzlkYTlkZiwgMHg5YWNjN2ViMCwgMHg2ZjFhN2RlZCwgMHhjOTdjOTQ4NSwgMHg2ZjlmYWU2OSwgMHgwNGM3YWViMywKLQkweDg4NmNmYzk5LCAweDBhZjI5MWZjLCAweDVlMjkyN2JjLCAweDhiZTRmNzliLCAweDY5YzE5ZDQ2LCAweDRkNzhiMWFmLAotCTB4NmVmZDkxZTcsIDB4NWY3NjU0ZTMsIDB4N2QwNWVmOTksIDB4NTQ0N2RlMWMsIDB4MmNkZDJiOTcsIDB4NzlkNzBiOGUsCi0JMHgxN2NmYjIyNCwgMHg3NGUzMDZkMSwgMHgzNGU0ZDhmZiwgMHhhMzNjMmVmNiwgMHg1NGU3OWQ4ZSwgMHhkOTNiMjUzZSwKLQkweDFlNTM1NmYyLCAweDZmODNiOWQ1LCAweDI3ZWEzMmFjLCAweDM2YTkxZWZkLCAweGNlOWFiMmVjLCAweDE5NDNmZTI3LAotCTB4MzJhOTNlZWMsIDB4NDU3MWFiZjgsIDB4MGNiYWRlNTgsIDB4MTc3ZjQxNTQsIDB4MWUxOWRlMzAsIDB4Nzc1MmNkN2IsCi0JMHhhMmJmMDdmZCwgMHgxN2YwODQ2YiwgMHgwMDAwMTdmMAorCTB4NDI0ZTRjY2UsIDB4NGMyMmYyMTIsIDB4MjFhMDg4MTIsIDB4OGE4MGFmMGMsIDB4MjIwMTI3N2YsIDB4MjgyMDM5ZjUsCisJMHg0MjAxZDQ1OCwgMHhkNDgzNzkwOCwgMHhjZGVkYWY0YiwgMHgxMTEwMjQ4NCwgMHgwNTQ3ZjQzNSwgMHg1MDg4NzY4YiwKKwkweDM0MGRhMmQxLCAweDBlYzE2MGQyLCAweDZkN2IxNDIwLCAweGMwZmFmMDZmLCAweDQ4MGJmNWVhLCAweGIxMmYzMTQxLAorCTB4Y2JjNTdlMjAsIDB4ZTdkYWQ2YmYsIDB4MjY0Y2U2NjQsIDB4YWZkYmQ4ODAsIDB4YjRmZGZmZmYsIDB4ZWNlN2Q5YjgsCisJMHhlYmRhZjdiMywgMHg3YjVhZDdiNSwgMHg3NTkyM2RlZCwgMHhjN2JmOTMwMiwgMHgwM2ZjNDVkOCwgMHg4YzRkNGZlNSwKKwkweGYyYzEwOWIxLCAweDgwZjY2NjY3LCAweGM5YjE4NzI3LCAweDQ3M2FmZWJkLCAweDZkNTU2MzNjLCAweDlkYTIzYjE5LAorCTB4OTllYzI1OGMsIDB4NTAyODE0MjEsIDB4MmMyM2Q1ZmUsIDB4YmZkZjgyNTAsIDB4ZjA5N2MzNjUsIDB4NDIxOWI2ZmYsCisJMHhkMDk3N2MzZSwgMHhjM2U2MTFlOSwgMHgwMmQ1ZTRmYiwgMHg5MzNhODc2YiwgMHhlYTBjMzE5YywgMHg0YjE5Yjk4YywKKwkweDEyNmIyYzY0LCAweDRiMjIzZmEzLCAweGUwZmY4MjhkLCAweDhmMzkyNTczLCAweDI3ZmMzNGIxLCAweDYxNDY3NTc0LAorCTB4YzY3OGMwYWUsIDB4NWM1MzFlMzIsIDB4MzhhOWQwZDQsIDB4ODQzZjc4MTUsIDB4YmNkMmM2N2YsIDB4MDczMWI3MjUsCisJMHhiYzAzY2Y2MywgMHhiY2YwNzFjOSwgMHg2MWRlM2E1YSwgMHhjMjJlZWZlNSwgMHgzYWYzYTFkZiwgMHhhZTU4Y2Q2YSwKKwkweDMyNzczZTMwLCAweDQxNjU4OWE3LCAweGYzZTMzZWJmLCAweDNkNjM0NmFjLCAweDRmZTNkOTliLCAweGVjM2ZjMzQ2LAorCTB4OGM1MTdlY2MsIDB4YjExMzhmMzAsIDB4Y2IzYzAxOGMsIDB4NjMyZjBlNTQsIDB4NTQ2N2IyYmQsIDB4NmE5YjFmMTAsCisJMHgyYzMyYTI1OCwgMHg4NTJmMGY1OCwgMHg1NjMzODc2NSwgMHhlZDk3NWUwMywgMHhmODE2NWMxNiwgMHgyZjZjMzlmZSwKKwkweGJlZDdlNjMxLCAweDE1ZWFkNjZiLCAweGEzNjI1OTNlLCAweGI1MDQwNGExLCAweDY3ZWZmNGU0LCAweDExYmZjYjExLAorCTB4MmIzMGZlZjEsIDB4ZWE0YWIyYTAsIDB4YWY4MDU1OTUsIDB4ZmI3NjVhYWEsIDB4NjdlZGZlOTUsIDB4NTRlODg5MzMsCisJMHg1YmY2YjkyOSwgMHg1YWRlZmM2MSwgMHhmMTg2NmFlNiwgMHgwMmQ1OTk5NywgMHg5MWZiMmZhYywgMHg3YTgzZTVkMywKKwkweDIxNDc2MzY2LCAweDM2ZDBmYTgzLCAweGMxMTk4OTgxLCAweDllMDBhZmVmLCAweDAwN2Y5MWRiLCAweGE1MmIyYTFlLAorCTB4NzQwNjQyZGUsIDB4YjAyYmRkZWMsIDB4ODcxYzBjZTYsIDB4Nzc2Y2JiZjcsIDB4MGM2NWYzMDYsIDB4NjY1OGU3MGMsCisJMHgzMmU3MzgyNiwgMHg3NDg5M2E0MSwgMHhkMjA3MzA3MSwgMHhmMzI0YmNjMSwgMHhjZWE4NDI4OSwgMHhiMGYzZGM1NCwKKwkweDlkZTI5ZjdmLCAweGU3ZjRlZDg3LCAweDM4ZTYwYjQ5LCAweGYyNTcwMGJkLCAweDU3YTA2NjUwLCAweDlkM2FiNWIxLAorCTB4ZWE1NjMyNjUsIDB4YmU0NDI5NjksIDB4OGRlY2I1MzgsIDB4OWUwMjU4NTUsIDB4ZjdjMDI0MTMsIDB4MDhhNzhiN2MsCisJMHg1Nzk4YTlmYiwgMHhhNzgwY2Q5ZCwgMHg4ZDE4NTllNiwgMHhmZjJkYjQzZiwgMHgwY2Y4MDkzMywgMHhjNGM1ZjNiYSwKKwkweDc2MzEzZjIxLCAweGYwNGY4NDNjLCAweDVhMTFmMWNmLCAweGRlOTgxYzVkLCAweGIwOGIyYjk3LCAweDA1ZjEwOTFmLAorCTB4MWYwMTE3NzIsIDB4MjZhMDQyM2YsIDB4NTQ0ZDI4ZTAsIDB4MjlmYzU3M2EsIDB4ZDBhMGQ4NmIsIDB4YzM1OTViZmEsCisJMHhlNTAwNjljNiwgMHgzZjBjYmMxMSwgMHgwODQzYWM2MSwgMHgxY2JkNGJlNSwgMHhiMGZmM2JiYSwgMHgzYzMwM2I5NCwKKwkweDA0ZjNkM2ZmLCAweGFiN2UxMjc0LCAweDFmYzhiNzAwLCAweGJmZDk3NjE1LCAweGNhNjFmODEyLCAweGY3YzBlNmFiLAorCTB4MzYyYTNmODAsIDB4ZDQwYjdlMGIsIDB4ZThkYmFmNGQsIDB4NWUyNmY3N2QsIDB4Mzc2NWQ4MGYsIDB4MTZkNzRmZjIsCisJMHhiZGYwMGJhOCwgMHgxYmYxZmRhNSwgMHgxNTVlYmY5MSwgMHgzYjc2MzM1OSwgMHhmYTg0Y2EyMiwgMHgzYjA2YTRlNSwKKwkweGMwNzUwZjFiLCAweDU3OGRiMTQ3LCAweGJiZWYzNjJiLCAweDY5MmZiZjFmLCAweGY0MWIzMGIzLCAweGYxN2JiMTU3LAorCTB4N2Q0MjM3MWQsIDB4YzMzMzYxZjEsIDB4NmI1YjE1MjYsIDB4MmZhODE0ZTUsIDB4NTgyZDBiZjEsIDB4ZjBlMDI5ZWYsCisJMHhmZTg5NzZmOSwgMHhjN2JlZDBhZCwgMHgxYjM4OWVkMSwgMHhjNmJhNzNlOCwgMHg2MzMyOWNjYSwgMHhjNGY2ZjY3NSwKKwkweGE1NjdjMDU5LCAweGY4ODUxZGZlLCAweGMxNzZlOTVkLCAweGYyOWY2ODg1LCAweGM5NDNkNmVhLCAweGI5MTdhZjM4LAorCTB4OGI2ZDk3N2MsIDB4N2YxZDRlNjYsIDB4YWI2NGY3ZjAsIDB4YmMxZWY4MTgsIDB4NjRmMzA2NWYsIDB4ZDY2MmVmZDAsCisJMHhiMDdhODg1NCwgMHhkOTNhZWI2MiwgMHhlYmUyMGY2OSwgMHhlMzRhOGQ3NCwgMHg4YmRmYzlmNCwgMHg1NzdjMGUzMCwKKwkweGMyZTA4YWY5LCAweDk4OWE1NjI5LCAweDdiYjBlNTE3LCAweGYzY2U2ZGI3LCAweDU2YWZjZTBhLCAweGJjZTNiNmNlLAorCTB4NmVkOGNiNTYsIDB4MmVmZTdmYjEsIDB4ZmVhNWNkNTQsIDB4YmMyMTcyY2QsIDB4NTliNGRkMmYsIDB4ZGI5MTBlMmUsCisJMHg4YzgzNmRiMiwgMHgxYWM4NmQ3MCwgMHhkNzIwOGRlYywgMHhkNzgwNzg0MSwgMHg1MmY1ODNiMiwgMHgwZmE4MDNkNCwKKwkweDIzM2NiZjI1LCAweDg1MmFjZjg0LCAweGIyY2JlMjU4LCAweDFhNzMyMjZkLCAweGRkZDM4OGY4LCAweDEzZmMyZWY3LAorCTB4NmJkYmU1ZjAsIDB4NzRlYWJjMjcsIDB4MWFhN2QzZWIsIDB4MWFhOGNlZGQsIDB4YmNkZWE1MWQsIDB4ZjhmODExMTksCisJMHhjMDAzYTQ3MSwgMHg4Mjc4ODRkMywgMHg5ZjA2YWQ3MiwgMHg5N2NiMzI2MywgMHg5Yjg3N2ZhMCwgMHgzY2JiMDJhOSwKKwkweGQ5OTkzNjVmLCAweGY1NjMwNjdjLCAweGQyZGQwN2IwLCAweGQ5OTc1MGY1LCAweGY1ODJlNjUyLCAweDdiYjFmYTUwLAorCTB4MDQ5M2Q0MmEsIDB4OWYzODY3ZWYsIDB4YzI1YmMxN2EsIDB4MjQ5NmFiZDcsIDB4OTU3OWUwMGYsIDB4ZmNlMGU2YzAsCisJMHgzMGQwMjE4ZiwgMHhjMGM5NTVhZiwgMHhhNmY3ODA5ZiwgMHg4YmNmNzk2OSwgMHgzYzdiMDY4MiwgMHhiMTdmOGJkNiwKKwkweDM5ZmE4MzI2LCAweGExOThmZDQzLCAweGY3Y2JhYzlmLCAweDMyNGUxNmEzLCAweDk2MTZhM2Y0LCAweDhkZmNmZGU4LAorCTB4NTk1ZGIxZmEsIDB4Mzc4NTRkM2YsIDB4MmMyOWUxMTgsIDB4MDQ5MWZiZDUsIDB4YmY2ZjU3NjgsIDB4MzdhOTc5YjIsCisJMHg3M2MyMzY0ZiwgMHgxM2Y1Mzk3MywgMHhiY2M1ZDUzYiwgMHgxYWU3YWUwYSwgMHhiNzc2YjAzZiwgMHhlZDk1ZWYwOCwKKwkweGIwZDc2M2IxLCAweDUwMjhiZTUwLCAweDBlZGI4MDA1LCAweDE3Y2ExMjUyLCAweDBjYTI5MzMxLCAweDhlZWIxODdjLAorCTB4MjdhMWQ0MzMsIDB4NDE3NWU0ZjUsIDB4OTU4ODEzZmQsIDB4NDUzOTdjNjksIDB4OWY5MGJkMjYsIDB4NDNmYWE1NjIsCisJMHg4NWU5MGEyOSwgMHg1ZWYwNmU4NywgMHg4ZTIwZWI4MywgMHgyZWExOTJjZCwgMHgxMWFiNDc3YiwgMHgxNGUwMWFmOCwKKwkweDYwOTYxMjU4LCAweDdmZjUyNDE3LCAweGYxY2NkYWJmLCAweDIxN2E5MDUwLCAweDVmN2MxOGZiLCAweDhlY2RlYTY1LAorCTB4YTYzNWZhODUsIDB4NmYxMTZiZmMsIDB4ZTVlYjgxMmUsIDB4NjM1NTkxMjgsIDB4MjMwYjI4YmIsIDB4MjMzYWI0ZmQsCisJMHgwODVmNzllZiwgMHgwMDg3MWE5ZSwgMHhiZjYwODVmZCwgMHgxMjZmNjY4ZCwgMHhkYWY4ZDdmMiwgMHhjMDEyN2M2NywKKwkweGNjMDg2YWI3LCAweDEyYmEwNTI3LCAweDYwZjgwOTllLCAweGE0M2Q1YTNkLCAweDY5ZjEwOTM4LCAweDQzYmU0MTkxLAorCTB4ZmM2MTk3YzcsIDB4MDZmZjFhMWMsIDB4YzcxYmEzYzQsIDB4YmUzZmU4NGYsIDB4NjE5MjczMjUsIDB4ODk3YTZiN2MsCisJMHgwY2FiN2M2MSwgMHg0ZmJmMDNlMywgMHhjNmQ2NmRhZCwgMHhjMGRkZmMwNywgMHg5OWExMzRkOCwgMHg5N2E0YjdjNiwKKwkweDY1YWJmOGQwLCAweDNmMTg2MjU2LCAweDViZmM2ZmFhLCAweDgxOWVmZTcwLCAweDgzNzk5ZmU2LCAweGE1ZTlmZTcxLAorCTB4N2NjYmY5YzYsIDB4NWY2YWIzZmUsIDB4YTI4ZmM2ZDIsIDB4NWUxNmNmZjksIDB4MmY0ZmYzZTIsIDB4ZjBiN2YzZTUsCisJMHg3N2M2ZmI3ZSwgMHg1ZWZmZTFmNCwgMHg4MDc3YmY5YywgMHg5MzU5MmRmMSwgMHg1YTFmZjM4ZCwgMHg4NWJmOWM2ZSwKKwkweGJiNTQ1ZjhmLCAweGExNWYxYjUzLCAweDNiMDkxN2YxLCAweDk2ODdmY2Y5LCAweGM1YjJmOGQzLCAweDkyM2U0MmViLAorCTB4ZmRhYWEzNTMsIDB4ODFhNDRmNjgsIDB4MWQyNjBjNDAsIDB4MDQ3MmE2ZTUsIDB4MWZhMDA1MTgsIDB4MDQ5OTBhODYsCisJMHg5YzUxNDNjNywgMHgwMTQ1Y2VlZiwgMHg3ZDQxMjliZiwgMHg1MTIwZmNjNywgMHgzNTJhY2ZhMCwgMHg5ZWRiMmY5ZSwKKwkweGE1OWVhMzJmLCAweDM3Njg4OWY3LCAweDZkNDUzZmYxLCAweDZjMzdhZDIyLCAweDFjM2ZjNWJkLCAweDEzNmVlZGUwLAorCTB4NWEyZjU4N2QsIDB4YTQ1ZjkzN2YsIDB4ZTVkYjhlZjUsIDB4ZjAwNWM2NjAsIDB4MWM5ZTVmZjksIDB4YWYzYTFjZDUsCisJMHg5MzUxNzJmMCwgMHg0MTg3NjRmOSwgMHhiZTNjMzg4ZSwgMHgxYWEyMzYwMiwgMHgyNjQ3NmJlMCwgMHg5ZmFjMTA5OCwKKwkweGM2MGEzZDA0LCAweDdhMGUzYjJmLCAweDY2NTNjYjE0LCAweDAwOWM4ZjZlLCAweDUwZTRjYjNkLCAweGY2ZTVhOWI5LAorCTB4OTNiZDhmODgsIDB4NWJiYWYzMDMsIDB4YzRhNGZmODMsIDB4Yjk3MjdkZjEsIDB4OWZmYzQ3ZTAsIDB4NDY1NGI3NWIsCisJMHgwOWE4YjRmZCwgMHg3OTEwZTk4YywgMHhkNGU4ZDJhZiwgMHg2ZmUyZGJiYiwgMHg0ZTlmMDgxNiwgMHgyNDNkY2ZjNCwKKwkweDk3ZmQ4YzhhLCAweGRlMmZkNzY2LCAweGRkZjBjODMwLCAweDQ4NmZlNjNjLCAweGQ3MGJmNjgyLCAweGMyYTIxZmNlLAorCTB4YzczMDdmZmMsIDB4NTNlZDE2MzIsIDB4MTM1NDg0OTAsIDB4MzU0YjMxYzksIDB4YTczMTZmODEsIDB4MTUzOTlkNzUsCisJMHgzMWNjZjcyYSwgMHhiOWZhZWMxYiwgMHgwN2ZkNjM1ZSwgMHhiNzdhYzYyNSwgMHhhMTM2NmZkOSwgMHg2MDQ0YjFiZCwKKwkweGZiZGZhMTliLCAweGY1ZWY4ZGFhLCAweDcxMDkzNjcxLCAweDc4ZGFhZTljLCAweDc4NzIyNzc3LCAweDJjNzJjM2VmLAorCTB4YWU4OTU2M2UsIDB4NWJmY2FiZjcsIDB4ODdhYTllMWQsIDB4ZWI0MDJjY2QsIDB4NDMwMjQ3NjUsIDB4YzgxMmZhM2EsCisJMHg3Y2FhZjM1ZSwgMHhkZWYwZTFkZSwgMHgzZGJhYjY2ZiwgMHgzZmZkY2YwMCwgMHhlMTlmMDkxMiwgMHgxZWJjNzdmMCwKKwkweDFkODEzNmVkLCAweDRiZTFiMWQ3LCAweGUxYjdkYTMzLCAweGZmODcwOWYzLCAweGYzZTExNTgxLCAweGY3ZDQ2NTUxLAorCTB4Y2ZlMTdkZjMsIDB4ZjM4NDlmMzksIDB4ZmU1YjU1NTMsIDB4ZWQyMTEzYTAsIDB4M2ZiZTVhMmEsIDB4N2YwODQ0ZTgsCisJMHg2MTliNmQ5NSwgMHhjZmYxMmZhOCwgMHhiYzVmYjQzNSwgMHhmZGUxYmU2MSwgMHg4NjI1YTZhMiwgMHg5NzFiMGJmNywKKwkweDdkZjNlYTFhLCAweDdmYjQzMjNmLCAweGUxYWQ0NTYwLCAweDhmZDU3ZGZkLCAweGEwZmZkZTE4LCAweDNlYTE5ZDY0LAorCTB4ZDBkMWJiZDcsIDB4OWIzOTllZmUsIDB4YWY0ZGVmMGQsIDB4ZTUxM2JjOGYsIDB4OTE1ZGVlYTgsIDB4NTY3MWJhZTEsCisJMHhkYTM4ZjkzOSwgMHhjOTE1Njc4MywgMHhiNGY4ZjQ4NSwgMHhlMGU0ODkyNiwgMHhjYTkzOGQ3NCwgMHg1NjcxYjZlZSwKKwkweGM1ODNkNzJmLCAweDVlOWM0YzBjLCAweDcxYWY5Y2UxLCAweDQ2NjVlYTMyLCAweGMyYWZmM2ZhLCAweGVhMGY5ZjA1LAorCTB4ODQ5YzEzN2YsIDB4Y2M4MzcxM2YsIDB4MDJjMmMwMDIsIDB4ZTNlM2ViOGIsIDB4N2RlNDMxNWUsIDB4NmZkZTY1YzcsCisJMHhkNzFmNDEwMCwgMHgxMWQ4YmRmZiwgMHhmMzU1NzlmOSwgMHgwNDZhYTFmYywgMHhiNzI4MjFmZiwgMHhiOWQ3MTUyYywKKwkweDBmN2Q2ZDFlLCAweDMwMmU1ZjdmLCAweGM2NzNlODRmLCAweGQ3OWM5MjU2LCAweGI5NGNlYjY5LCAweGY5NDFmNWNjLAorCTB4ZjQwMmU0Y2UsIDB4NDBlNWNiYmYsIDB4YzZhNWY1NzYsIDB4YTJhNDAxNmIsIDB4M2NlYjQ0OWUsIDB4YTQwMWY5MDEsCisJMHg1OTJmYzBjMCwgMHhkY2VlZjkwNiwgMHg5NTVjMTIyNywgMHhhZjQwMTNhOCwgMHhjMTllNjNhZSwgMHg4MTMzZDQyNiwKKwkweDhkNzdlOTAzLCAweDQ5ZGMzODQyLCAweGEwNGI2ZjU0LCAweDY2YjNiZDc1LCAweDEyMTNhMGZhLCAweGU1NDNjN2QyLAorCTB4YTg3MzM1YTcsIDB4YTVlMzU5M2MsIDB4MDk0ZDQ0ZjIsIDB4YWE2YmM3OTUsIDB4NTlhOGVjYTksIDB4MzVjN2U1NDEsCisJMHhhYTNmMmEzZSwgMHhjZmYyYTQ2OSwgMHgxZTU0NGQzNSwgMHhlNTQwZDlhZCwgMHgyYTdlMzU3YiwgMHg1NGRjNmJiYiwKKwkweGJhMmJmOWY2LCAweGVjZDc4ZGZlLCAweDgwYWZjZDU1LCAweDY3ZWE4Nzk1LCAweDQzZDRiOWI0LCAweDczOTI3NmRiLAorCTB4ZjljYTEyNTcsIDB4MzY1Y2U1MTksIDB4OGU2N2UzZGEsIDB4MzE5OTYzODIsIDB4ZjljMmJlMzAsIDB4YmEzYTYwNmQsCisJMHhmNjI5NWVjOSwgMHhmNWM3ZmQwMywgMHhlMjhiNmY3ZiwgMHhkODk5YjI3NCwgMHhkOWE2NzA3NCwgMHhlMTdmYzMyMywKKwkweDc1NDM5MDVhLCAweDE2MDY1OTA5LCAweDdiMGNkNzI0LCAweGVkNjE3ZTg0LCAweDhlNWQ3YTQzLCAweDliZGRjYzRlLAorCTB4NzFlODEzM2IsIDB4ZTViZjk5ZjIsIDB4ZGE3NWJmNjEsIDB4NDA3NTE3ZmEsIDB4MDU5ODc1YTQsIDB4YmQyMTc3OWUsCisJMHhlYjQ2ZjA0MiwgMHg5YWFiZWY1YSwgMHhmZTBjYmZiZSwgMHhkN2YwZmFiYSwgMHhmYmZlOGU5ZSwgMHhmZWE1NDE0MSwKKwkweDk4NWFiNGNmLCAweDEzZGM3ODg0LCAweDY3ZTYwN2VkLCAweGVmM2YwZTY3LCAweDk2NWM3OTQwLCAweDQ0NGY1MjY0LAorCTB4NTY1ZTgzYzAsIDB4NGFhODY0YjQsIDB4NjZkM2ZhZTgsIDB4MTI2OTlmYWMsIDB4N2FkMGI3YTYsIDB4MzU5OThjZWMsCisJMHg1NTRhZjkwYSwgMHhmYTQzMGM0ZiwgMHhmN2E5NTEyNywgMHg1NjQ5MmNiMywgMHg5ZWJjODA0ZiwgMHhjMzE1OTZkZSwKKwkweDVmM2Y2ZmQ3LCAweDEyYzdiNzA3LCAweDQ4NWY4MmJmLCAweGYwZGVmZmVkLCAweDBlOGZkNDBjLCAweGVjYWQ2MzBmLAorCTB4MDNlYTJiMTMsIDB4ZWRmNTk3NzgsIDB4ZmQyNjcyZmQsIDB4NmM1N2UyOTUsIDB4ZGExY2Y5OGYsIDB4N2JmODE2MGIsCisJMHgxMjA3ZTI5MSwgMHhhYjdlZjVkNSwgMHg2NTlmNDQ1YSwgMHg2ZWRmM2UzNCwgMHg3M2JlMGYxOCwgMHhjNWY3M2VlYSwKKwkweGFkZjE0YmNjLCAweGM0ODY0ZWM0LCAweGYxNjlkNjExLCAweDM2NmRiMmM2LCAweGM0YWViOGQ1LCAweDZkNTVlYTFhLAorCTB4OWQ2MWFhYzksIDB4ZmM4MDdmYzEsIDB4NDI0MTZhYjMsIDB4YjhkNzI5YmUsIDB4MWE1MjQ3YTgsIDB4ZGNhZjgwMDUsCisJMHhhYjdlYTRlNCwgMHhjMmFlZGUwNCwgMHhlMTdiMjFkYSwgMHhhNzJiNTc1MSwgMHg5ZGYwNDBkYiwgMHg5NGVjMzlhZSwKKwkweGFjNGJkZTQwLCAweDdjMDIwMWUwLCAweGE3MjMyZDI1LCAweDZhZWI5ZWEyLCAweDdiNDQ0YmFkLCAweGYzM2M0Y2IwLAorCTB4ZjdjMjI3OTAsIDB4OGQwMjRkM2IsIDB4ZWU2ZmM0YjcsIDB4MWFhM2FlMzUsIDB4NTdlODMwN2YsIDB4MTY3ZTRlN2YsCisJMHhkNDg2NGU1MywgMHhjZWRjNGQzYiwgMHg4MGY3ZWYwZSwgMHhmMGU1ZWZkNiwgMHg0OGZkYjk1MywgMHhmZWNlOGRlMSwKKwkweGZiNmNhYTc4LCAweDFjOTJmNjQyLCAweDgyZjJmZmMxLCAweDU3ZjFkMjc4LCAweDQwMWNmMjZlLCAweGVkYmE1YTdkLAorCTB4OWZhM2Q5MTgsIDB4MGZkOTdkOWEsIDB4ZjUzZjQyNWYsIDB4NDQ5MjlmOWYsIDB4NWU3ZDUyNzEsIDB4NjEyOTMwM2UsCisJMHg3YzVhMDU5YywgMHg5ZWY3ZjgxNywgMHhmZDNkNjEwZiwgMHg2Y2NkZGZlYywgMHgyZWM3YzAwZCwgMHg2Zjc4MmI0MCwKKwkweDEzMzM1ZmQ2LCAweGExN2Q0MTMzLCAweDVhZDA1YjU2LCAweGNmZGQ3MTQ2LCAweDJhOGVkYzRjLCAweGQxMDcxZTYyLAorCTB4YTFlNTM1ODEsIDB4NGNjNWQ5MWQsIDB4NWQ0ZjExZDMsIDB4YjhjNzZkZWMsIDB4MzI5YzNhMTAsIDB4MTY2N2E0YzksCisJMHgxOGVkMWEzNiwgMHhmNTBkN2ZiMCwgMHhmNThjMWJjNSwgMHgxMTMzMzY2MiwgMHg3YWYxNDlmNSwgMHgzNDBiZjMzMywKKwkweGY3ZmJjMzNmLCAweDdmZTEyYTRkLCAweDg1NWVhYjMxLCAweGY5YTRhYWViLCAweDI2NTQwYjIzLCAweDE1N2MwMmE1LAorCTB4NmYzNjc5YmYsIDB4NGM1ZmM2M2UsIDB4ZTNkMTBmZGMsIDB4MzhlMjRiMjMsIDB4N2VmMWE1ZmMsIDB4M2ZlZjBkZDksCisJMHhmNzc3MWQ2OSwgMHg4YjA2NDg4ZCwgMHg4OWM2MTU3ZiwgMHg2ZDczMGM1OCwgMHhmYmYxZmQ2NSwgMHg4NzBmZTE2ZCwKKwkweGZiYWY1ZjU3LCAweDM4MzQ2OWM1LCAweGRiODI2ZGM0LCAweDJmN2Y4MTFmLCAweGViYTY3YzY4LCAweGQ1NDQ1YmViLAorCTB4OGRkYzE3ZTAsIDB4MjFiZjEwZjUsIDB4YjJlMmQ0NDYsIDB4ZWU5MTEzMjIsIDB4NjdkNWFhNWQsIDB4MTRmN2ExOGEsCisJMHhiNGVkZjdiNywgMHhkZTgwZWFiOCwgMHgwNjc5MzczZiwgMHg0ZWM4MTM4OSwgMHhlZDIxNjVjOCwgMHhkMmYyNmU3ZSwKKwkweGFkZTE0ZWYzLCAweDk5NWJiNDYyLCAweDNiNDVjODE0LCAweGUyMThkNjE0LCAweDA3ZTM1OTUzLCAweDhiOTFjYTMxLAorCTB4ODMzYjY2ZjEsIDB4NmZlODE0NzUsIDB4OWZhMGY4NDEsIDB4ZGI5MmY2NTUsIDB4YmJjNjJlNTgsIDB4YmZhMWRlNDEsCisJMHg4Nzg1MWNjNywgMHg5NGRiYTgwNSwgMHg1OWZkODY1NiwgMHg3Y2YxOGM5MiwgMHhhZjU4ZDM5YiwgMHgxZDIwN2ZjMiwKKwkweDNmOGEzMDQ2LCAweGMyOTA4ZjQ1LCAweGE4NjAxOGYwLCAweGUzMmVlZDBmLCAweDg0ZTg1MWYzLCAweDIwMWZkZDkxLAorCTB4OGIxMDc2M2UsIDB4MDI1NTY5NDMsIDB4MjZjZjhjMjIsIDB4ZmU3ZDlkNDksIDB4N2JmYTI2NTYsIDB4MmY4YTdlMWMsCisJMHgyYWU1ZmI0MCwgMHhjNWE5NWY2ZiwgMHg1MDdmOTdjZiwgMHgxMmVlMzgzMCwgMHgzY2VhYThmYSwgMHgyMTQxOTA2OCwKKwkweDdmYmUzZDc1LCAweDcxZmU2MjVlLCAweDNhNmY0MWRmLCAweGQxMGQ1NTYxLCAweGRlNGQ3MzliLCAweGQ0MGY0ODY5LAorCTB4MDA5ZjA4OTMsIDB4NzYwZDc4ZTMsIDB4MmExYTlhNjAsIDB4ZjhjMjBiZTcsIDB4ODhlMWFhZTMsIDB4NWRmZDA2NjcsCisJMHgyZGRlZjI2ZSwgMHhlMzg3ZjQyNiwgMHhlYTRmZmJhYSwgMHg0ODgyZmZkNywgMHhmZWVhYmNmMywgMHhiZmViZjU4NywKKwkweDE1ZmY1MjMyLCAweDk3Nzk3OWJmLCAweGY0YTlmODBmLCAweDgwM2E0ZjU3LCAweDUyNjdkOTk5LCAweGU4MGJhMjUzLAorCTB4YzFiNWJlNWUsIDB4YTlmOTcyODEsIDB4NWQyMDczZTQsIDB4ZDM4YmYzM2YsIDB4MTZlN2M5MjMsIDB4Yjc0Zjk3NTEsCisJMHhmZjExZTQyMiwgMHg3ZTlkMWYxMCwgMHhkMDNiZDFlOSwgMHhkNWI3M2FhZSwgMHg2MDdjNTJhYywgMHgwMTYwMjU5YiwKKwkweDVkNmNhY2E2LCAweDliNjNlNWMyLCAweGFmYWYxOGU1LCAweGIzZjkwMmZlLCAweDJmYThjZGFhLCAweDMyNzg1ZjRhLAorCTB4NDBjZGUzMTEsIDB4MGU3ZmNkNDksIDB4Yjk1MDdmOTAsIDB4Njg4NTJmZTUsIDB4NWViMTU1NzcsIDB4ZGZlMTdiZDIsCisJMHhlM2U3ZjhlMSwgMHgyZjk4MWVjOCwgMHhhZjdmZjRjNywgMHg2OTU1ZjNlZiwgMHg3ZDZhYTk3OCwgMHg4NDkxMGJmNCwKKwkweGNkZmM4M2E1LCAweDlhMjVmNmYwLCAweDY4YTRmZmJkLCAweGRmMzhhNzhmLCAweGY5MTEzNjQ0LCAweGYzMDdjNzRjLAorCTB4ZWViZjdiNzMsIDB4OGY3M2E3YzUsIDB4NWI5ZDNjMDEsIDB4ZTQyMWRkZmUsIDB4ZDcyN2YyODQsIDB4MTY1YTY3N2IsCisJMHhlNzM1ZmNmZSwgMHgwZGQ0ZjJjMCwgMHhhZWQ0MzE3YSwgMHg2NzY3ZDdkNiwgMHhlY2E3ZTY5YiwgMHgzOWI5NjVlMSwKKwkweGIwM2Y0MGUwLCAweGU1ZDliMzdjLCAweGZjYmViYTQzLCAweGMxOWUyZmZjLCAweDE2MDdjY2I4LCAweGJmZTg3MGQ3LAorCTB4ZWY4M2U1ZWMsIDB4YjJmNTAwZGQsIDB4ZGJmOGU2MWQsIDB4MjExNDM0ZjgsIDB4MmE5NzQ4MzEsIDB4NmM2MmJiZjgsCisJMHhiZmE1MGU5MCwgMHg0NzNiMjgzZSwgMHg4ZTNmZTdmMSwgMHg2Y2EzZDIwYiwgMHg4ZDk5M2VjNywgMHgyOThmOGZlYSwKKwkweDBlZTRmYjJkLCAweDVhNWQwMjI1LCAweDNmYTIxNThlLCAweDU3ZTJmNzUxLCAweGNmYWZlYTMyLCAweGUwZDgxNzVlLAorCTB4ZGNmODA4OGMsIDB4NjJlYzkwN2MsIDB4NTFkMTEzYzQsIDB4ZGQxZjUzYTMsIDB4MDE1N2RhYzIsIDB4ZWFiZjUwNWQsCisJMHhmZjdmMGE3NCwgMHhjN2ZlOWEyZiwgMHhjNDM5OWNmZSwgMHg4NmJjYWZjZiwgMHhiNjdmMjhmYiwgMHgyNWZlNzBiOCwKKwkweGMwZTgzY2FmLCAweGFhOTI5Yzc5LCAweGRiM2Y1ZjM5LCAweDcxODZlODkwLCAweDQ0YmVjYzRiLCAweGJjZmU0YTk1LAorCTB4MTIxZmI5ZTQsIDB4ZjIzZTJkYmYsIDB4N2Y4YTQ0YzMsIDB4ODliMjc3MzAsIDB4MzI1ZjA1NmMsIDB4YTZkMTZmY2UsCisJMHg2MmJmMzRkOSwgMHgyYmJlMjVlNiwgMHhlMGY0NTY3OSwgMHg4OTU5ZTBmZSwgMHg0MTExZGY0ZCwgMHhhZTI0NTIyZSwKKwkweDViMzU0ZjhmLCAweGE3NjU0ZDcwLCAweDdkYzBlMTcwLCAweGZmNDViNzg1LCAweDJkZmY4YTU2LCAweDBmY2FmOGE1LAorCTB4YjYyMGZkZjUsIDB4YWQ2N2VhOGMsIDB4ODg1ZjRlOWMsIDB4YWMxYWJlZmEsIDB4YmFmY2ExM2MsIDB4ZDIzYjc1NjUsCisJMHhmNzEwZjRlNywgMHg1NzFiOGM2MCwgMHhlMWE3YzkzMSwgMHhmZDA4Yjg0MywgMHgwZGE2NDc4YSwgMHg0ZTYxZjRlNiwKKwkweDBlZmI0ZjI5LCAweDdjMTRmZGY0LCAweGNkZGJlZDhlLCAweGUxYWU1YjZlLCAweDIzMzE3NjNiLCAweDZkNzJmZTM4LAorCTB4MGEzYjgwN2MsIDB4ODk1M2Q1ZWQsIDB4OTg0NWZmNjAsIDB4YWZhNGExNWYsIDB4ODU1NzYwMzcsIDB4N2M4ODU3ZjAsCisJMHhmMmRmNzk3MywgMHg1ZDZmOTcwOCwgMHhhNjMzZmRkZSwgMHhiZWJmZmJlMywgMHhiZjA3ZTVjMywgMHhlMDA1N2I0MywKKwkweGY3YTYwYzBhLCAweGE0MDk2NmZiLCAweDEwMmMyYzBmLCAweDk4YjdhZTQ5LCAweGJlMzZiOTM1LCAweGUwMDRmOWQ3LAorCTB4ZWRkZDcwOTYsIDB4M2ZlYzE3ZTMsIDB4NzY0ZmYwOGUsIDB4Zjg3YWYxNmMsIDB4NTY1ZjQ0MmUsIDB4ZmU4ZTc4ZTEsCisJMHhiYjcyZTlmZCwgMHgwNGZmOTM1OCwgMHg2Y2ZmMjhjOSwgMHg4MWZiOTcxMywgMHg4ZjFmMDlmZCwgMHhiZmZkOTg0YiwKKwkweDE1ZTUwNjc4LCAweGFmZjcxM2U0LCAweDdiMzY1ZmNiLCAweDZmOWZkZTcwLCAweGJkZGVmMDNmLCAweGI3OWZhNzIwLAorCTB4ZDQ2YTcyZTgsIDB4NWE3MmUxOWYsIDB4OGIwMjczYjIsIDB4NjM5ZmE3MjQsIDB4MzkyNDQyMWEsIDB4ZTUxMWU3ODUsCisJMHgzZTIwZTk1NCwgMHg0ZmU5NDdmZSwgMHg4NTM3N2YxZCwgMHg4N2Q3NGZlMSwgMHg1YzMxZTEwMywgMHg3NDU5ZmUxZiwKKwkweGYwODdkNDQ2LCAweGQ3OTYxZGU3LCAweGJlNzRmZjlmLCAweGY0YWRmOWQzLCAweDI5NDMxNTk3LCAweGE1ZjNhNjNlLAorCTB4N2M3ZDc3Y2UsIDB4YmY1ZGYzYTksIDB4N2YwMWEzNzgsIDB4MTgyZGVmZTEsIDB4M2NiODAxODMsIDB4NDcxNGNkYmIsCisJMHhmN2MzZGYyOCwgMHg0M2JiZTE3ZiwgMHg0ZjA5ZTNhOSwgMHg1OGM2NWE2ZSwgMHhmOGQ0YTFkMywgMHhhYzNmYmFkMCwKKwkweGRlZDYxMmRlLCAweDg0Zjc1NjFkLCAweGQ1ODZmN2I1LCAweGNiZWQwZGFiLCAweDNjYzgwZWRiLCAweDY4NjAyNWFmLAorCTB4ODY3OGFlMjcsIDB4MTIyODMyN2QsIDB4NWZiOWZhYmYsIDB4ZWM4NWZhZGEsIDB4N2E1MGJlNDMsIDB4NGFmMzdiZTksCisJMHgzYzYzYjNlNiwgMHhmMTQ4YWY3YywgMHhmMWMwMWU5MSwgMHg2N2E3MTgyYSwgMHhmMzFmODY3YiwgMHgzYzZjMWEyNCwKKwkweGY2YTNkNGVlLCAweDZjNWVkMDNhLCAweGRlZjVlNTg4LCAweGVhMTU3OTA0LCAweGFmNzlmZDNkLCAweDdhZjVjNzhkLAorCTB4ZDg4ZWJkM2MsIDB4ZDhlZGZiMTAsIDB4NzZmNDkxMWUsIDB4OGY0ZDlmODcsIDB4OGFjMjY3ZTQsIDB4YzFkNDcyNDIsCisJMHhlM2NmN2EwNiwgMHgyNTQ0ZDNmZCwgMHg1ZmM2MDU3ZCwgMHg4NjE3NDQ5YSwgMHhlZjZhOGE3NCwgMHg0MTllNjA3MSwKKwkweDNiYWM5ZWNmLCAweDQ1ZjNjMGU3LCAweDhkYjQ4YTZmLCAweDdiNzY4M2Q4LCAweDJkYzc5MjBjLCAweDc3Zjg4NzI1LAorCTB4NTNkZjMyOWYsIDB4YmY3ZTMxOTMsIDB4NDU3OWZiODcsIDB4MTFlY2MzNmIsIDB4YTlmODk2YjYsIDB4YTMyZTU5NTgsCisJMHhlY2JmMDUzZSwgMHg4MmZmNzFiOCwgMHhkNmE5NDVjYiwgMHhlMzI2Yzk1ZiwgMHhkYzdiZmQ3YiwgMHhiZGZiNDVjMSwKKwkweGJkZjE4Yjc0LCAweDM0MDc4YjU3LCAweDg2MzI3MmViLCAweDcxZmNkMThkLCAweGY0ZDI4ZjFlLCAweGU3MzEzNGYyLAorCTB4OGY0MDM5Y2UsIDB4YzMyMmMzOWUsIDB4N2IzM2ZiZmQsIDB4OTljN2EyNDQsIDB4OWViZjdjZWQsIDB4MjNkN2Y2ZTIsCisJMHgzZTkyZjc3ZiwgMHg4OWQ0ZjFkNCwgMHhhYzBmMjRmMiwgMHhmZDVmM2FhZiwgMHg5MTg3YmNhZiwgMHg5ODdkNzY2ZiwKKwkweDNiMjgzM2ZiLCAweGZkOTA3ZDc3LCAweGU2ZmZhYzViLCAweDU5MGZmNGZkLCAweDVlNTNmNmZmLCAweDQ5M2VkMWI3LAorCTB4ZTI3NmViY2YsIDB4N2ZiZDllZjcsIDB4ZWIxODdmNGMsIDB4OWYxNDJkYmIsIDB4YWJmZDc5ZWUsIDB4OWU5ZmU0NWMsCisJMHhkNDEyOTY5NSwgMHg4MDQzM2Q3NywgMHhlYzFmNjhmZSwgMHg4M2I3MmFmZCwgMHhhMjdhZDdkNiwgMHg5OTI1MWZkYiwKKwkweGZlN2I0N2RiLCAweDhmMTBiMWY2LCAweGVkMGFjYzI1LCAweDQ5YTNkNzg2LCAweGIzNWVhYTllLCAweDY3YWQzYzUxLAorCTB4YTE3OTU3ZWYsIDB4OWQ3N2ZmNzYsIDB4N2ZiNmE1NGYsIDB4NzM2NzYzZDksIDB4YjE3YzIyNzYsIDB4ZWFhN2RmN2MsCisJMHg1ZjNmZDdiNywgMHhhZDE3Zjk4YiwgMHhmMDg1ZTRmYiwgMHhiZWVmY2E3ZSwgMHhkYTNkNDVjOSwgMHg0M2RiOTNiMywKKwkweGU3OGVlNmRkLCAweDY4ZWU3ZjcwLCAweDY2OTVkY2ZkLCAweDBhMzc3M2MwLCAweDliYWMwYTU1LCAweGEwMTRjZjBkLAorCTB4Y2JjN2Y0ZGMsIDB4YmMyNzE0MzcsIDB4ZmNmNDdjNTIsIDB4YzEwZjgzNWYsIDB4ZGQ5ZGY1Y2QsIDB4ZGU3MDE1NmYsCisJMHgyMWZjN2Y1ZiwgMHgyZGQ3ODVlYSwgMHg3Y2ZhOTdjNCwgMHgyNWE5NmYzZiwgMHhmMzcyZTU3YiwgMHg5Yzc5OTg3NiwKKwkweDc5OWRmZmU0LCAweDk5MmI4MTBiLCAweDNmZjMyOGY3LCAweDJkN2ZiZDM3LCAweGUxMmU4OTM5LCAweGNmOWZkMDcyLAorCTB4ZjU0NDNlZjcsIDB4ODIyZWVkOTcsIDB4ZmRmOTBhZjcsIDB4ZjlmMjdmZjYsIDB4ZWZiYTZiN2YsIDB4MmUzYmJhMDQsCisJMHg3ZmYyZWYzZiwgMHg0YzBmNzlmMiwgMHhkN2VmMzdmNywgMHg3ZTYyYWVlOCwgMHhiZWVmZDU0YiwgMHhhZGJlZjgyMSwKKwkweDRmZmI1YjllLCAweGNkMDNlZjJlLCAweGQ3ZWJiNzVmLCAweDk5NGQ1Yzk4LCAweGFmNDM5ZjE4LCAweGM1NjlkNjAxLAorCTB4YzMxMWIzM2UsIDB4Y2M0NjZiODUsIDB4MTRjZWQxNTQsIDB4ZjUyYmY2YzMsIDB4ZmI5OWFmNzIsIDB4NWJlZTIyNGQsCisJMHgwODZmOWM2MiwgMHhjZDMxZjM4ZiwgMHgzZDJkYTI4ZiwgMHg4YTUyNWExOCwgMHg5NDk1OGVjOSwgMHg5NmJlZGM1NSwKKwkweGMwNmVlZDVjLCAweDE3NmI5YWNiLCAweDg4NzcyOGI4LCAweGM1ZWEzZDhkLCAweDE3NjRkYTdhLCAweGZjYzNhZmM1LAorCTB4Yjk4MTdhYzksIDB4YTU2ZmIwMDUsIDB4OGMzOTZmNmIsIDB4ODQ3OThkZmUsIDB4YTVjOTYwMjksIDB4YWI5NjE4ZjIsCisJMHg1OWE0YjhiNSwgMHg4ZjdlMGQ5NSwgMHhkYmFjNjM5MiwgMHg0NWJhYzY5YywgMHgzOGNhY2ZlYiwgMHhlNjI0ZDZmYywKKwkweDM4YjRmOGM3LCAweDc5OGFiZjcyLCAweDg5MThlMjZkLCAweGIxYjc1MDA5LCAweDE3ZmExZjI2LCAweGY3ZTMyNDk2LAorCTB4MWVjMDMxMWIsIDB4NWFiZGNmMTIsIDB4ZTFmNmY2M2MsIDB4MWJiYjZjNzEsIDB4NDRkMjM4ZjEsIDB4MmU0YTZiNzEsCisJMHhmY2I4YmMyNSwgMHg4ZDllNzg2YiwgMHg1NWQ3ODhkNSwgMHgwOTRmODhlZCwgMHg3ZjZlNWZmZCwgMHgzNGNjZGY5MSwKKwkweGJhZDI1OTdmLCAweGRjOTg0NjkwLCAweGNkM2I2MzM2LCAweDlkMmNiZTRmLCAweGNiZDI1ZDM4LCAweDMzMmQzYTM1LAorCTB4NDNhNzQ1ZDAsIDB4ZTgxOGZhMDQsIDB4ZGJmOWUzYTIsIDB4MmU5YzI3ZDIsIDB4NmZkZmY4ZTEsIDB4MDdmZTEyNzYsCisJMHg5NzRlOTdhMiwgMHg1MGNkYzUzNCwgMHhiZjlhY2Q1ZSwgMHg0OWZkMTUzMCwgMHgxODc5YTdhYywgMHhmZTZiMzNlZCwKKwkweDY2ZWYxNDgyLCAweGVhOTNhNDNlLCAweGY0MmY0ODYyLCAweGI3ZTAwMmRiLCAweGYzZmI3ZWZkLCAweDdhZWEyNzE0LAorCTB4MDgxZGQ4ZTksIDB4NDU2ZmQ5NGYsIDB4NzVmYzA1NjYsIDB4MDBiM2I3NmYsIDB4NjVmOTJmN2UsIDB4NWI0YjQzZjQsCisJMHgzM2ZiOGE0NSwgMHg1Nzc3OTAyOSwgMHg2ZWFmYmVjOCwgMHhjYWZkOTdmNywgMHhkZDI5ZjM0ZSwgMHgwNmRmZjE2OSwKKwkweGZhZWU5N2RmLCAweGIwZWM5NzI0LCAweGQ3ZTRiZDk1LCAweDM4MTI1ZWY4LCAweGI5MWQ3ZGRkLCAweDJhNWJhZmI4LAorCTB4OWMyM2ZmNzEsIDB4OWU2NTYyNWYsIDB4M2JiOWQwMjcsIDB4NmRjNjBlN2EsIDB4ZGYzYzZkODQsIDB4MWVlNWI0YjYsCisJMHg3ZjkwYzViMywgMHg5MWRiZDY2NiwgMHgyOGJkZjA1ZSwgMHhjMjEzYmU1MCwgMHhhOWU3OWExNywgMHgyZjlkMWRmYiwKKwkweDM2YmUxYzBhLCAweDc2ZjMxZmIzLCAweGU4ZWRiNzRiLCAweGU5NTNmOGM2LCAweGMzMGI4YjUxLCAweGJlZGI1NWQyLAorCTB4Mjk4ZGZkYTAsIDB4ZDFkOTdhYmYsIDB4NjhiNmZlNDEsIDB4ZjNmNDNmODgsIDB4YzQ4OWI3ZmIsIDB4MTVhZDk1MWYsCisJMHg5ZDQwODdlNCwgMHgyNWIyYTJmOCwgMHg3MmViZmM3MiwgMHhhZmQ5NjlmZSwgMHgwMWYyZWVmNiwgMHhmZDdlY2IwYSwKKwkweDViZTMwMzgyLCAweDNhYjdkYmE3LCAweDc2ZGZmZmM4LCAweDNmNWJiOGU5LCAweDkxZTViZjNmLCAweGE3ZjlmYTRiLAorCTB4YmZlMDFmZjEsIDB4YzU4NzIwZGMsIDB4MjIwZGI2NDksIDB4Y2JlMDA0N2YsIDB4YWRlZjk0OGIsIDB4Y2JkOTViZjMsCisJMHgzOGMzOWY2NywgMHhjZmNlZTc3NCwgMHhjYjc4NDM5ZiwgMHhlN2NiZmJmZiwgMHhhZjYwOWZkMCwgMHg4OGFkZDRkYiwKKwkweGE1ZGU5Nzk3LCAweGRkZmU5ZTM4LCAweDlkYzc5OTJjLCAweDgxN2M1ZmJiLCAweDFmZGQ5ZmUyLCAweDdmMDFkZjgwLAorCTB4NGE5ZWY3YmEsIDB4N2JiMjdmNDcsIDB4MTg4OWQ3YzcsIDB4NzdiZTU5MmYsIDB4ZWY5YzYwZGEsIDB4MGNhNzU3ZjIsCisJMHg4OGY0MTE2NiwgMHhmYWRmMjI1ZSwgMHgxYWZlMjBhZiwgMHhhZDAzYWY0ZSwgMHhlOWVmYzgwNywgMHhkZmEzN2EwMiwKKwkweDY5YjcxN2Q5LCAweDMwNzFlMGE5LCAweGQ5YWYxNmE3LCAweGRkY2UzOTFlLCAweDdhZDMzZTJmLCAweDhkMzc5ZGQ3LAorCTB4NzJlY2QyYzcsIDB4ZDM4ODJiYjIsIDB4MWM3NDAzYmMsIDB4ZGJmNDA1N2QsIDB4N2ZlNjg4ZmUsIDB4MTc1ZmE2NDYsCisJMHhiNGU4MDNmZSwgMHg2NzdlOGMyYywgMHhmY2ZkMTc1YiwgMHgzYWQ3N2MxOSwgMHg0ZDM4YzA2OCwgMHhhNmYwMGFlMCwKKwkweDI3YmZkMWM3LCAweGEzMjI3ZmJiLCAweDI1ZmNlZDdjLCAweDZlOTBjNWM1LCAweGJiNDRjMWI3LCAweDhlOWIzZTVmLAorCTB4OWE5ZjBmZmIsIDB4ZTdlN2VmN2IsIDB4YzYyYTJjMzIsIDB4YmVmNzRhMWIsIDB4ZmRkM2YyNGYsIDB4NTM4YTExZWEsCisJMHhkZDllMmQzMywgMHhmMGZlZmFjZCwgMHg1Mzk2YTNmOCwgMHhjZWM1YjU1OSwgMHhmZTFhM2JlMywgMHg3NGUzZmUzMSwKKwkweGNlMmQ3M2QwLCAweDhmNThmOWMzLCAweGY3MTQwY2ZmLCAweGRlNzk5NTY5LCAweGFmZGYxZTg4LCAweDE2YTFmMmQ4LAorCTB4NGJkMjA5NGYsIDB4M2E3NDg0OTgsIDB4MDhmZGM5NzYsIDB4ZTIyYTBmMWQsIDB4MWM2ODYyNjEsIDB4YWQ3YzcyMzMsCisJMHhkMWFkZGUyZiwgMHhmMTg3ZTkwYiwgMHgyNTM4YmVjYiwgMHg2ZTMwZDNkNCwgMHg2N2RlMTdlNSwgMHhmNzQxZjQxMSwKKwkweGVjZmYxZTY2LCAweGEzY2U0NzM2LCAweGJmOWFlM2QyLCAweGZmNTM5NzBhLCAweDJmMzNjNTk1LCAweGM1YjdmZjA3LAorCTB4NTI3NjVmOGYsIDB4ZWE3OGUxYmYsIDB4OGY1OTEwYmMsIDB4NzVmMzJkYmYsIDB4YzVmN2FhZmYsIDB4YmU0MzA1Y2EsCisJMHg3YmM5Yjk0MSwgMHhhMmIxZjkwNCwgMHhjZmNjOThmNSwgMHg1MmYzZjBhNSwgMHhiNTNiN2NmYSwgMHg5N2NlZDFiYywKKwkweGFkNzc4YTQ0LCAweDdhNDAzOTZhLCAweGU4NWY1YzNjLCAweGYwZTFhNmZiLCAweGFkZTBkMDllLCAweDQ0ZWJlMzZjLAorCTB4NWZiYjRlZTcsIDB4ZjczYTdlODEsIDB4YWU3ZTI2ZWYsIDB4ZTI4YzdlZGMsIDB4ZmRiNjg3NmQsIDB4NTkwOGVlNWEsCisJMHhmMDlkNzE1NywgMHhmOWRmYzA4NywgMHgxZTVjYmVjYSwgMHhlYzc5ZTViNywgMHhkMTljZTNlMSwgMHg5ZWQ1NjFmNCwKKwkweDZkNTRlM2M4LCAweDRlMzBjMmZmLCAweGU2NDVhZjk5LCAweGM3YTVmZGViLCAweGVmYjkyZDNiLCAweGI3NGVmZWMxLAorCTB4NzllNjE5OWIsIDB4YTcxMTZlOWUsIDB4ZjUxNzNhNDcsIDB4ZWE2ZWI2YWUsIDB4YmQ3MDdlZTcsIDB4MjNmZDdjYTQsCisJMHhmOGNjNWNmYywgMHgxZjI4YTNiNywgMHhlOTkxZjk3ZSwgMHg2M2M0YzYxZiwgMHhmZTg3ODQwOSwgMHg5ZjM5NmI1YSwKKwkweDlkYzRmZWI2LCAweDNkNmVmNDhhLCAweGViODhhZjcyLCAweDZmYzQyZWQ0LCAweGY3OWY5ZDg4LCAweDNiMTRmNTRlLAorCTB4OGZiYzg1ZTgsIDB4NWQ5MWUzM2MsIDB4YzRjZGY1YzMsIDB4ZmMwMzI2YTMsIDB4NWM2MGNlMzAsIDB4MWZhMWVhMDcsCisJMHhmOTgyYTczYywgMHhlODhmMDg2ZSwgMHhmMDhlOWMyOCwgMHhiNTQ5YWE4OCwgMHg2MWU3ZmQwOSwgMHg1ZTc0M2M1NiwKKwkweGFjZDdlZjQwLCAweGIwMDNjZjFhLCAweGQ4OWNlMzBiLCAweDFlNGNkMjRmLCAweDhiYmU0YzQ3LCAweDNjZmQzZTk3LAorCTB4YmY5NDcxNGUsIDB4YTA1OWU2MGUsIDB4ZjAyY2QzNzgsIDB4N2Q3ZDkyN2QsIDB4ZTc4NjQxYzYsIDB4ZGU1MTI2YmYsCisJMHg3OGM1OTY3NiwgMHg1NTRiYWM2ZSwgMHhkZmQwMjY3YywgMHg1OTZjZTRjZiwgMHhmOTQ5ZDkzNywgMHg0MjU4ZDcwNywKKwkweDIwNTgwZmYzLCAweDZmNTFmOTE3LCAweDU4N2RlZmQ3LCAweDdlMWE0MjdlLCAweDFhODhmZDAyLCAweDdlNWE1OTdjLAorCTB4MjFkNjEwYzIsIDB4YzliZDdkYTAsIDB4MGUyN2NmY2UsIDB4Zjg0ZGUyNTUsIDB4YmQ5YWYzZmQsIDB4ZWMzZjlmYTksCisJMHhlYzMxNWU3NywgMHhjZWU1ZTI5YywgMHhjOTRmYzYyNywgMHgwNWQ0M2E1ZiwgMHhjZjdhYjRmYywgMHg4ZjVmY2MxNCwKKwkweDQ3N2YyN2JmLCAweDEyNzk4YWFhLCAweGU3ODI5ZTdmLCAweGM4NWZlMjU3LCAweGY1MGM5MzFmLCAweDljMWZhYjEzLAorCTB4YzhmZmY1NGEsIDB4ZjUwZTkzMWYsIDB4OGRmZjFhNmYsIDB4Y2EwNGNiZDcsIDB4M2Q1ODJkNTcsIDB4ZWJmMjJhN2EsCisJMHgyY2Y5Y2I1NSwgMHhjZTUxODhjMCwgMHg3NWJjNDBlZiwgMHg3YmJhM2U3OSwgMHgxZmYzMTM5MSwgMHg1ZjhlNjU3YSwKKwkweDQzNzZjMWU2LCAweGE1YmM3MTI2LCAweDQwZWQxZjI5LCAweDc1MzUwZDNjLCAweGZlN2YyMmQ0LCAweGIxNTdlZjdjLAorCTB4NGM5YzE3YTgsIDB4YWNhOGZjMjUsIDB4YzFmYTQ1NWUsIDB4MmYxNzQ5YTMsIDB4OWUxNzQ3OTEsIDB4OTNlYmE2NGYsCisJMHgwMWY3OGFjZCwgMHhmOTkxZTM4NCwgMHhlMDVjZTgyMywgMHhhZDMzMjUzMywgMHg5OGNmNWYzYywgMHg3OGQ0YzBjNywKKwkweDQ2OTE2N2EyLCAweDFhZDM4NDRmLCAweDU4YmY4ZjkyLCAweDVjZmNjOWY0LCAweGFmYTY5MzRjLCAweDllMzhhYWE2LAorCTB4MmYxNzJiZTAsIDB4ZTFlZGY3NWUsIDB4NGJlNzUwN2EsIDB4Yzg2OTVjZWQsIDB4MTA4N2M2NzksIDB4N2RlMjlmNWUsCisJMHhmZmQwOTJjOCwgMHgxNjFkZTMzYywgMHg5ZjdjMGFjZiwgMHgxZDNlN2M1YywgMHg5ZjNmNWJmOSwgMHg5MWNlN2UxOCwKKwkweDQ4YTZiZDQ5LCAweDc2YjM1ZmY2LCAweDc4MjA3MWNlLCAweDJhZWY1NjNkLCAweDc3ZjMzNzFjLCAweDQxODc5ZGNlLAorCTB4YzkxNzQ2YmUsIDB4MWNjZDRjMmUsIDB4ODI3YzYyYmQsIDB4NTIxNWNmYzQsIDB4NDY5NTQzOWUsIDB4OTcxMzI0YmYsCisJMHhhMzEwZjY0MywgMHg4YjFlZDY3ZCwgMHhiOWJmNDZlMCwgMHhmNDk1NDFlNywgMHg2ZGQxNWE3NywgMHg0NGY1NTdlNCwKKwkweDNlNjBiNDY3LCAweGZjYzNjZjUwLCAweDRjNjYyOTVjLCAweGQ5MGQxY2EzLCAweGJmNDAxMzEzLCAweDVjZTBlNDBmLAorCTB4MzM5YzFjOTgsIDB4NzFjNjczYWUsIDB4ZGIzYTJlN2IsIDB4NTUzZmE4M2EsIDB4YjAwYzBmZWIsIDB4ZTBiOWUwYzQsCisJMHhlNWViOTExZSwgMHhjMTI3MWE5ZSwgMHhmNmY5ODQzMSwgMHhhNTdlZmFlMSwgMHgxOGI1NmRlMywgMHhkZTAyZmRjZiwKKwkweGU4YmM0MDVmLCAweGMwZTVmZjc4LCAweGEzNDU3YmY0LCAweGU4OTEyYmRmLCAweDc0ZmU3ZTE3LCAweDZiZmJjNWJlLAorCTB4ZjhhYTdmNmMsIDB4MTU3NDJhZDAsIDB4ODY5ZGNmYzMsIDB4NmE0YWI1ZDMsIDB4NzhhZTg4ZGEsIDB4NjgyZjllZTIsCisJMHgzNmU5ZDE5ZCwgMHg0MTJiODU3YSwgMHhlM2EwNjQxYSwgMHhlOGVmZDhlYiwgMHgxMDk4NWYzZCwgMHg0ZjdlOWQ1ZSwKKwkweGZkZWY5MDBmLCAweGNmNWYwYjA3LCAweDljNGJjN2MyLCAweDhkZTI5MWQzLCAweDEwNjBmZWI0LCAweGNmNTgyMTJlLAorCTB4ZjhkMWU2YjUsIDB4ZGUzYzRkODMsIDB4MTBiZGJmZDMsIDB4N2ZkMDNlNzEsIDB4MzBmMmE1ZTYsIDB4MmZkZTU1NzMsCisJMHg1MGZkZmZlMCwgMHhmMTEwZmZiZSwgMHhmZTIyMjIzZiwgMHgwM2JjNDYzZiwgMHhmNmM2M2ZmZSwgMHg0ZmZmODA1NywKKwkweGRkN2Y4NTJlLCAweGY0ZDMyZmFlLCAweDJiZWUxOTQyLCAweGM1ZmNmZjAxLCAweDEzMzEzMzM5LCAweDE1MTQyZGM2LAorCTB4NWIyNWZmZTIsIDB4ZDIxZjZkNDUsIDB4NjI3MjViN2QsIDB4YjkyYzhmNTAsIDB4MTk5ZjdhYmUsIDB4YjNjOTcwZjgsCisJMHg5MTY5ZjEwMiwgMHg3M2ZkNWU3NiwgMHg3ODRiNWNlZCwgMHgxY2YxNWY1ZSwgMHhjYmM5ZTkxZiwgMHg0OWY5ZjdlNywKKwkweDMzNmQ5NTBmLCAweGU0MTBiZjNlLCAweGM3Y2E3NGRiLCAweDkzZjNmMWY1LCAweGUxMTcyNmEyLCAweDY4YTMzZmY4LAorCTB4ZDYyOGEyZmEsIDB4MGU5YzJlZDAsIDB4ODY0ZGFhNDMsIDB4MjllNGYwM2MsIDB4OWY5MGZkN2QsIDB4YmU3MjY0OTcsCisJMHgzZmI1ZjE0ZiwgMHgwN2M2MTk5OCwgMHhmOGZjNTJkYywgMHhiYzYzZTIwMCwgMHhjZGZiMTUzMCwgMHhlZjU2ZTRkNywKKwkweGUzMGFlODZmLCAweDMzZTE5ZjNhLCAweDZhY2JmYjllLCAweDFiZmI5ZTM0LCAweDY4NjI5NGRlLCAweDRjODZjZDdmLAorCTB4ZmU5MWZiYzMsIDB4YWZlZjBkNmIsIDB4NTBkNjM2ZGIsIDB4ODM3MmQ1MWYsIDB4YjZlOGZkYTEsIDB4NGM3ZDQzMDIsCisJMHhmYjQzMTZlMCwgMHgxYTY3ODc3MSwgMHhlZmRhMTNlYSwgMHg3ODlmYjQzNSwgMHhmZGUxODE3NCwgMHg4NmE1MWRmNSwKKwkweGJhN2UzN2Y3LCAweGE5YmY1MGNjLCAweGVkMGQ1ZmY3LCAweDVlYjg4YjAzLCAweDk0OTM1ZmRjLCAweDc0MGFlNzg2LAorCTB4MmE1ZmVjYmMsIDB4YmU3YzU0OWIsIDB4ZTZhNGRiMzQsIDB4NzQ0ZjNlODYsIDB4Y2NiMTczM2IsIDB4MzU3ZmEzNzMsCisJMHhiMTRjYmM5MCwgMHhhZTg1YTcyNiwgMHg2Y2NjZjljZiwgMHhhYzUzNmJkMCwgMHg1NTgxN2FjNiwgMHhlMDc0OTdlMywKKwkweGNkZmUyMDE3LCAweGE1NWNhMzU2LCAweDAyNmJjZjU2LCAweDJjYTU5YmIzLCAweGQyZjk0NjE5LCAweDU4Yjc1ZjIwLAorCTB4YzViYjdlYjksIDB4ZWRmYTY1N2EsIDB4YWE3ZjZjNGUsIDB4ZWNlNzQwMzIsIDB4NDQ0YmU1YzMsIDB4ZDJhMmNhZjksCisJMHhjY2E5ZmI0NywgMHgxYjk2Zjk0NSwgMHg0ZDNlNDY2ZCwgMHhjY2FmNDAxYSwgMHhjM2NmMWFiMywgMHg5YjYxZWE4YiwKKwkweGZkMTM5MDY0LCAweGQwYThmOWY5LCAweGRiZTJjMmU3LCAweGEwNjc2ZjI4LCAweDA1YTRlNTdlLCAweDdkMDE2ZWI3LAorCTB4YTk3YjI3MjksIDB4OWFhZjlmZDQsIDB4OTc5ODhhNjMsIDB4M2JmNTkwZjcsIDB4ZmExYjQ5ZmEsIDB4MjEwZjRmZDksCisJMHhkZTkyYmI3ZSwgMHhjY2YzMGE3ZSwgMHg5MmY1ZTcyYSwgMHgzMTZjOTRiZiwgMHg3NzU4MjVlMiwgMHg1NDc5ZTYwZCwKKwkweDUwOGU3ZTRlLCAweDU0ZGNmZmU1LCAweGFlMmI3OGQzLCAweDE3M2NmYWY3LCAweDExMzMzMDdkLCAweDA2ZDIwM2YzLAorCTB4ZDU1ZTlmZjAsIDB4NGQ1Y2YxZTYsIDB4YzM0NWFkYzksIDB4MTRkNTNmYjAsIDB4N2E0NWJmN2EsIDB4ZmQxMGFhYTAsCisJMHgxZTVhYTE5OCwgMHhjOGE2NTNmNCwgMHhkNTNmNGFmOSwgMHgwYThjMTlmYSwgMHg1NTAzZWQxNCwgMHhhYmEwZmIyMSwKKwkweDA0ODcyM2Y4LCAweDkzNzdmOGYzLCAweDE3YzhhN2Y3LCAweGU3Yjc0NjBiLCAweDZlY2I3M2YxLCAweGFiYjI0Y2Q3LAorCTB4ZDc1ZjgyNTQsIDB4ZTc4YWU5NDMsIDB4ZTkyYmQ0MjksIDB4NjY3MzEyNDksIDB4ZjA2Nzg3ZjQsIDB4MDY2MzZmM2MsCisJMHgzMzhmYWZiYywgMHhmN2FhMTRiOSwgMHhlNTllMzgwYSwgMHg4MjBkOGNjNywgMHg1YmZmZWFmMSwgMHhmN2VhZjgyNCwKKwkweDNjZjk0ZjVmLCAweGUyOWFhNTE2LCAweDk5M2NmYWE3LCAweGM3YWZkZmI2LCAweGNkMjZjZjhiLCAweGQ2M2M0MThhLAorCTB4NmU3N2RiNWYsIDB4YWNmZDYxODcsIDB4N2VjNzZkZTIsIDB4ZDMzN2FlY2YsIDB4ODIwNWY1YjgsIDB4NmYzZWJkZTEsCisJMHg3NDFkYzM2OSwgMHhlMTVkMmIxZSwgMHg3OTg2MmVmMywgMHgzNDk2ZGMyMywgMHg3M2ZkNTcwZSwgMHhiODIzNGIwMiwKKwkweDQzZDJmN2ZlLCAweDhhZWNiZmU4LCAweDBkYmM2MTc2LCAweGU4ODliMWYwLCAweDY3MzhjZWVkLCAweGYzMGYyN2QyLAorCTB4MzRhNDE4YWEsIDB4MjVmYjIxYWYsIDB4OTZmYTFmYjIsIDB4NGNkYmFmOTUsIDB4ZjY4ODk1OWQsIDB4NDYzNWYyNTQsCisJMHg2NmY1YzViOCwgMHhjNTE3MDdmMiwgMHhlMGFmOTQyYSwgMHhkMWExNTlhZiwgMHg1NWVmMzhkNSwgMHg5Y2VmMzM0OSwKKwkweGJkZDRmMDBiLCAweGZkNGMzMjIzLCAweDJkMzQ3NjcxLCAweDE1ZGYwNDNkLCAweGZjYmI0NmI3LCAweGVmNzhmZWNlLAorCTB4MDEzODcyNzIsIDB4NmUxMGI3ZWUsIDB4Y2QyMTQzNzEsIDB4ZGMyMWRhOWIsIDB4MzNkODE3M2YsIDB4ZGU3N2M4MTksCisJMHgxNGZmNDRlOSwgMHg5NzdkYzMxMywgMHhkM2ZmZjg3MCwgMHhlZmM0ZTNjYSwgMHg4NzlhNTU1OCwgMHhlYjdjNTQ5YywKKwkweDE2NTg0MTk2LCAweGI1MWRkYzkxLCAweDdmY2ViODBlLCAweGZjZWJlNTY4LCAweGViMDhkNjg3LCAweGZkZWVlNWZjLAorCTB4N2VkMzlmMjgsIDB4NmRkMTRiMDgsIDB4ZWFkYWVjZDIsIDB4MTk3YjUwZWMsIDB4ZWM0OWQ2ZjQsIDB4MzE4YmFmNTcsCisJMHg3ZWM1Y2UzZiwgMHgzY2NiYjYwNywgMHg5NzE5ZDk0ZCwgMHgxZWQwY2JiNywgMHhlZGQzZmU0MywgMHg4ZDVhYmZiMSwKKwkweDllODg2NDc2LCAweGIzZDM0YWZkLCAweDllYTE1ZDVmLCAweDRlZWQ4MGJkLCAweDY4ODgxYmRkLCAweDkxYzgyNGM3LAorCTB4MWIzOGRjZjUsIDB4MmE5NTdmYzcsIDB4MWJlM2NhMzMsIDB4NmQ5ZjllMjAsIDB4MGUxZjZjOGIsIDB4Y2U1ZDBlYjQsCisJMHhkNjhjYzhjZiwgMHhlZmQ3NTRmOSwgMHhjNTYwZGZkYywgMHg5YzJmZWQzMiwgMHgyNDdmZTBkOSwgMHhlMzI5ZjcxYiwKKwkweGVkZGU1MTg3LCAweGFlYTRmZDQwLCAweGYxMGQ4M2Y4LCAweDg4NmRlM2FiLCAweGMwNGY4OGNkLCAweGY5YzZkM2EzLAorCTB4NjQ4YjY5YzQsIDB4MWUwMzk2MGYsIDB4MGUzYzA2NGQsIDB4ZDkwM2Y2YzcsIDB4ZGZhZDU3ODMsIDB4NmVlNzhjNGIsCisJMHg4MzdjMzViYSwgMHhiYzcxOTc5ZSwgMHhjZTNlYmJhZSwgMHhlNTQ1YjhjMywgMHhlN2E0NzNlYywgMHgzOTljN2FhZiwKKwkweGY3NDQ3NWM2LCAweDAxMWM2MWJmLCAweGQ3N2RkZmU3LCAweGI3NzE2YjdmLCAweGQ1MTc4YTBlLCAweDBjNGQ3YWJkLAorCTB4MGEyYWE3YzYsIDB4OTU4NmY0ZmEsIDB4YTQ5OTg1ZGIsIDB4NTk3NmJiMDcsIDB4NTc2NzA4ZGMsIDB4ZWNlN2NmMWMsCisJMHgxMGYxMzVkYSwgMHhhZjNlMzljNiwgMHg4NTI5OWMzOSwgMHhhZjVkMmRkOCwgMHg0MzMzYzkxYywgMHg4ZjNiNWQ3ZiwKKwkweDIwOTQ0OWU0LCAweGQxN2UyN2U3LCAweGZjNWM1N2RmLCAweDEyOGYzY2NmLCAweGM3ZDAyNzNjLCAweDBlYmU1NjZmLAorCTB4ZjhmMWI3YWQsIDB4Yzc5OGQzYzksIDB4ZjdiMTlhMzYsIDB4ZmFmOTYzYTMsIDB4MWM3YTY4OTEsIDB4ZTNiZjQ3OWYsCisJMHg3ZjdlYTFmMywgMHhjN2U1NzA1NCwgMHhkZDI2MmIwMCwgMHhhYjY2NGM1NSwgMHgwMGE2OGRlNSwgMHg2ZTBhOGY5NiwKKwkweGJlNTVlMzExLCAweDRkM2NmYzkxLCAweDkxMWIxNjUyLCAweDQ3MjhmZDAxLCAweDhlMDgwM2RiLCAweDhkZDdhM2EzLAorCTB4YTdlYTI5ZGIsIDB4MGIyYzNlZWEsIDB4YzQwMmVmMTQsIDB4MmJhZjVjN2IsIDB4MzdmYzdkMDksIDB4YTFiMzhkODcsCisJMHhlMTRkMjE1ZiwgMHg3ZTc3Yjc3YSwgMHgyOWVmMWY5NCwgMHg4ZmI5MzQ0YSwgMHg2NzY3YWE4MCwgMHhjNThjMmYwZSwKKwkweGU2OGI3ZmY3LCAweGQyNThmMmYyLCAweDhlNWMyNjg5LCAweDM4YTAzOTcwLCAweDVhNjY5YmQ0LCAweDcxMGQ5NmRmLAorCTB4ZWY4MjJmMjcsIDB4ZTc4ODRkOTcsIDB4OTgwNWU5N2UsIDB4OTYzOWM4N2QsIDB4MDk2N2UzYzcsIDB4MDBiOTA3MTQsCisJMHgxNGU3ODE3OCwgMHhiNTNlMDJmYSwgMHgzMzE3Y2M0YiwgMHg4OWIwZjQxNiwgMHgwYmYwNTViOSwgMHhlZTQyOTNlYywKKwkweDY4ZmZjMWQ5LCAweDRkNjBmYzc2LCAweDRkMzhmNmZmLCAweDQ1ZTAzMzNlLCAweGQ1ZGIxOTc2LCAweDVjMGNlZTA5LAorCTB4ZmM4MTc3NGYsIDB4YjRmYTAzMGQsIDB4N2NhOTU4ZDUsIDB4MTg0ZDQ2YWQsIDB4YTdiOGYyMDYsIDB4YWZlYTg5MjYsCisJMHgwY2E5MzhkNywgMHhlN2EwOGNkNCwgMHg1NDVjNmJmYiwgMHhhN2I1MzY4ZiwgMHg1NTJjN2FkMywgMHhmZTg3OWJhZiwKKwkweDBiMTJmZGY1LCAweGJjMjNiN2JkLCAweDhlNTY3YmM0LCAweDk3ZjljODg3LCAweDAwOTNlNjJlLCAweDNkMzUyZmFlLAorCTB4MzhkNmZiNTIsIDB4YzZhN2FmZTIsIDB4ZmQzMWQ0MDAsIDB4OGFkOWZmYmYsIDB4MDU0ZDY0M2YsIDB4YTNmYTk4M2QsCisJMHg0MTUzNTljMywgMHg3ODEyOWY4ZSwgMHgxODFlMDJmZSwgMHg1NTJlNzQ4ZSwgMHhiNzMyOWYyZiwgMHhmMGE5YTJjNCwKKwkweDRkZjMxYjZiLCAweGM4YmNjMjRkLCAweDhlMTUzZmRlLCAweGU4ZjZjYzYxLCAweDFkNGVhNjlmLCAweGZkYzdmMzA5LAorCTB4ZjZjNjE0ZmUsIDB4YzdhYmRlZGEsIDB4ZmJhOWQ4NzMsIDB4ODE4YmFiM2YsIDB4ZmM2ZGM4ZjksIDB4ODI4OTlmM2UsCisJMHg3ZDQwNTZhNywgMHgwYmYzOWIzMywgMHg5OGI1M2M5MywgMHgzNzczZDljZiwgMHhiZWZlZTI3MywgMHgxYjVlY2UzZSwKKwkweGRiNzYxM2I3LCAweDUxMzk5ZGI4LCAweGU2YzFmY2UwLCAweDQxMWU1YWNhLCAweGJhZTg2ZTZmLCAweGVmM2VkZTExLAorCTB4OGY3NGQ3YzAsIDB4MmZiNzhjMGYsIDB4MmY1ZTMwZDUsIDB4ZmEwNzExYzUsIDB4ZDdmZjc1MmUsIDB4ZTk1YzhlYjQsCisJMHg0OTFmM2Q3NywgMHhjNDg0N2NmYywgMHhlNmJhMmJmMywgMHhmZGE2NmUyNiwgMHhiYTFmNjg3OCwgMHg0NzIzZGE4ZiwKKwkweGQyZGVkN2I2LCAweGVkMDY4MWQ2LCAweDY1OWZiN2JlLCAweGE2ODM3MmYwLCAweGY1YzYyNDU3LCAweDA1ZDE2YmZmLAorCTB4NjFiOTQ3YmYsIDB4NWZkYTM4ZGUsIDB4MDllMmQzYWEsIDB4ZTU3YTNhOTMsIDB4MmY3ZTc2ZjksIDB4MTNkNDNlNWMsCisJMHgzYzA0Nzg0ZSwgMHhkMWE1ZDcwZiwgMHgxZTYwNTUzMywgMHg2MDQ4ZmZjYywgMHgyODAyODQzMywgMHhkYmNmMzZkZCwKKwkweGMyZDI0ZmQ4LCAweGQxOTdiZTRkLCAweDcxNjVkODVlLCAweGUzYTNkOWEyLCAweGQ5MDNlZWFiLCAweDYxMjFmYThhLAorCTB4OGZkYTMxY2YsIDB4NjQzYTEzYWEsIDB4OGY5N2Y3YTQsIDB4Y2I3MTRkN2MsIDB4MzI3NTczM2EsIDB4MWIxNzZkZDUsCisJMHhiZGI0ZmViMCwgMHg5OWQ2MjM3YSwgMHg2ZmE5ZWJlZiwgMHhkNjBjM2YwMCwgMHgxM2UzZTFjZSwgMHg5MGJiNjNkNCwKKwkweDNiNTgyOWU4LCAweDdlMDZlZjU3LCAweGY1ZTY2NWQ4LCAweDRiMzkxZjJmLCAweDVjY2JiMWZjLCAweGUxOGQ5ZjNkLAorCTB4ZWY5ODdhZjUsIDB4YWE2ZjU4YWUsIDB4NTI5MDU0MDksIDB4ZTFmZDY1ZmIsIDB4YjdhZWIwOWIsIDB4NzdkYTkyZmYsCisJMHgzZjZlNTRkYiwgMHhhNDBjZGUyYSwgMHg4NTVkNWY3ZiwgMHgyZWE0M2RiYSwgMHhmMmIzM2FmMSwgMHhjNTVmOWY1MiwKKwkweDdmMjlhZjgxLCAweGU3MGY3MmI4LCAweGNlMWJjNDQ3LCAweGMzY2RlZjEzLCAweDdhOGNlOTc1LCAweGE0ZWI1MWQ0LAorCTB4ZDczNjczYjgsIDB4OWYwMzAxZDcsIDB4Yjc1M2U3ZTksIDB4MmEyY2JjOTgsIDB4MDg1ZWNmNDQsIDB4Y2U0MmZmNWIsCisJMHg4NGE4YjFkOSwgMHgzOGI0ZmU5MCwgMHhiYjAzM2E3NiwgMHg2ZjE4MmIzNCwgMHgyYTJlNjRjZCwgMHg5NTBmMzE4NywKKwkweGVlOTZkYmQ5LCAweGJiMmRiNDQ3LCAweDdhODlkNWFmLCAweGZhZDczZTJiLCAweDY4ZTg5NzgwLCAweGQwOWUxZmY0LAorCTB4ZThmYWUyZjQsIDB4MDFhMzFiZmMsIDB4Nzc4MmY1OWUsIDB4ZjE3YTg4OGQsIDB4ZTc0YWIzNjUsIDB4YjIyNDNhMmYsCisJMHgzNWI1M2IzNywgMHg1MzMwYWQ4YywgMHhmNzNiNWNiZCwgMHg1ZGU5NWU2ZCwgMHhlZWY1MTIzMywgMHgxOWFiOTMyMiwKKwkweDRmMGNiM2Q3LCAweDJmYmUxOWJlLCAweGFhZTE5ZGRiLCAweGU3YmNjMTY1LCAweGM0OTZkOGIyLCAweGVmMzA0YWIxLAorCTB4YWEzZmFmNTksIDB4YjU0NmQ5ZjEsIDB4ZDJmNzg2YzksIDB4OTU0M2ZiZTgsIDB4NzFkMmViNmQsIDB4N2RiM2ZiN2YsCisJMHhiZDNjOTAxZiwgMHg3YzQxOTUxZiwgMHg0NDdhZDE1YywgMHhiZjY5ZGFmNiwgMHgyOWYzYzY0YywgMHhkNmZhZDk5ZiwKKwkweGJlZjc1YTNmLCAweDBiNzQxOTZjLCAweGViMmZmNWVhLCAweDc5Yjg3NDRkLCAweDA2ZjQzZDIwLCAweDM4MzczZmU4LAorCTB4YWM2YTg3YzgsIDB4NWRjMmZlNTQsIDB4ZGU5YTJkN2QsIDB4ZDMyOTUxMDUsIDB4YmZiNDYwNmMsIDB4OTE1NmU5OTAsCisJMHhiOWFkZTY4ZiwgMHg3YzBhYzFhNiwgMHg4ZWFjODJmNCwgMHgxNzliM2U0NCwgMHg1YjdjNGI5NSwgMHhiZTcyMmIxNiwKKwkweGRkMDdiOTY0LCAweDBkY2ZiNjkyLCAweDY1MzVkNGY1LCAweDNjNTNiZWQzLCAweDZmNjhjOGJlLCAweDg4NTI2ZDU0LAorCTB4YzgwZWMwMGYsIDB4ZGNhODNlNDcsIDB4N2VlMWYyNjAsIDB4NGVkYWM5YTIsIDB4NDVlNzdkZTcsIDB4MzY4ZmNkMzEsCisJMHhhZjVjNGY5ZSwgMHg2Y2RmM2JlOSwgMHhkY2JkZGYxZSwgMHhmMzkyYzUzOSwgMHg1MTFlNzQ1MSwgMHhlNTFmYmZhZiwKKwkweDkxMjhiZTI0LCAweDU1ZmZiNDdjLCAweGU3NDFkZTcyLCAweDM4ZmJiZjE4LCAweGM4NzljMzU2LCAweDA0MjhlM2ZlLAorCTB4Nzk0ZTNlODcsIDB4NTdkMjFjNzAsIDB4MjdlYzFmZTUsIDB4NmI4ZGY4M2YsIDB4NGRkNjdiNzUsIDB4M2JlNWFjNzEsCisJMHg5YjA1ZmNiNCwgMHhmM2Y2MzA3YiwgMHgxODI3YTZiNCwgMHg3NzgwYjFmYSwgMHhlZWFmYTMyOSwgMHgxY2NmNDA5MywKKwkweGY5MzNkM2VjLCAweDkwZDM1MzBkLCAweDZjZjdjMWJlLCAweGI5MGY0MTkyLCAweGMxZDNhMDI1LCAweGZiZWVhZDI4LAorCTB4NTFmNmU0N2UsIDB4ZjUzM2VkNjEsIDB4YTk4NmNjZmEsIDB4ZjNjM2ZiOTMsIDB4Yjc1ODJkYjQsIDB4MWJlOTdiNDIsCisJMHhlMTFkNWY0YiwgMHhhMWY1NzNhMywgMHhlM2U5YzVmZCwgMHhlOWZkNGJkZiwgMHhiNTFhOTdmYywgMHhmODBmYTBmMCwKKwkweDI3YWM2MGVmLCAweDdhN2NmMzFmLCAweGNhMjczMzY3LCAweDhkNDk2NmUxLCAweDIxZDA4NTcyLCAweDM3YWY4YTM1LAorCTB4MzVhZmU3MjUsIDB4Zjc4ODNmZTAsIDB4NGZmZDAzNWMsIDB4ZmIwZDM4ZDUsIDB4OTY4YjhiOGEsIDB4NTQ5ODc5ZDEsCisJMHhjN2NjNWU5ZCwgMHhjYTZkNzdjZiwgMHhmZTI3ZWMzMiwgMHgxNmFlMzg3ZiwgMHg3MDAwZjcwZSwgMHhjMzA3ZmQ0YywKKwkweDVlMzBjMjMxLCAweDAzMWM4ZTEwLCAweDg3MGI1NzdjLCAweDdhNmIzYjE4LCAweDhmNmJkYTA2LCAweDI4MGYyODk4LAorCTB4NjZiM2U0ZDEsIDB4NmZmNjVkYTIsIDB4MGNhNzhhMjYsIDB4ODgwZjNjNjcsIDB4ZmIwZGUzMjksIDB4MmM3Yjk5YjQsCisJMHg5ZWZlMzFmMywgMHhkMmMzYjEyOSwgMHhiNzI3OTQ1OCwgMHhhOWQ3MTZiMywgMHg1ZjY0NDg5ZiwgMHgzOWFiNzNjMSwKKwkweDcyNmU4NzBlLCAweDIwNGZmZGUzLCAweDY2NWZkNDk1LCAweDFmODJiN2I5LCAweDgyZmJlNmYyLCAweDcwZDMzZWZhLAorCTB4YmRlM2U1OTUsIDB4ZTdhMzliYTAsIDB4ZmI4ZDE4ZGYsIDB4YWExZTczNjYsIDB4ZTc5ODNjYzIsIDB4MzUyZmYxOTUsCisJMHg5MmJjODMzMCwgMHgyYzIwZDIxZCwgMHhhYmUzM2IyNSwgMHg3MDFiODdhOCwgMHgxNDcwNzZiZiwgMHhmNjA0NWJiNywKKwkweGU0ZTFjMzcwLCAweGJjYjllZjQ4LCAweGYwZjM1YjllLCAweDM0MWI4YzM0LCAweDhiNWU3NGFmLCAweGNkYjM1M2ZlLAorCTB4ZjMxZmIyZGYsIDB4ZTg1MzFlNzYsIDB4NDdhY2Q2ZGUsIDB4NTA5OThkZmQsIDB4Njg5OWQ3MTcsIDB4ZmQ2MzE0YmQsCisJMHhkZjcxOWFkYiwgMHgxNzZjYzlmZCwgMHg2OGNkMTFkYSwgMHg0N2ZiNjBiZiwgMHg1NjZiZjIxNCwgMHhmMGQzMzhkNSwKKwkweDZkM2E5MjdlLCAweDc2YjJkODFkLCAweGMxNzk4YWIyLCAweDg3MTQ4YWY1LCAweDczMmFkZGViLCAweDc3M2M1Y2Y1LAorCTB4OGRkMWVlMzEsIDB4NTFlYmQ2MGQsIDB4MDcxYWI5OGYsIDB4OTQ5ZWJjYTksIDB4MzM5YWViOGMsIDB4N2I0NjNhZDMsCisJMHhhZTY4YzgwZiwgMHhiMWE4YTY3NSwgMHg2ZmYwZmFjMSwgMHgzZDIwZmFjMCwgMHg5ZGMxYjFiMywgMHgyYjJlZmQ4NiwKKwkweDg4M2JmYWQ1LCAweGUyMTc4YTcxLCAweGVmNjhiYzM0LCAweGQyZjRmYjMzLCAweGNiY2MwNmM2LCAweGY1ODM2YjEyLAorCTB4YWRkZjMwYTksIDB4MzUzZDcyY2YsIDB4ZmI0N2ZhMTgsIDB4YzNlM2U2MGIsIDB4ODc3YjA1N2IsIDB4Y2E0ZTc0NGIsCisJMHg2MDNiNjMwNiwgMHg5OTkxYjY3ZSwgMHgwY2Q3ZGZiNCwgMHgyYmVmMTE3YSwgMHhkZmM5MWRlZSwgMHhmMjM0ZmJlYiwKKwkweGQzZWQxMzcwLCAweDZmNWM3YjYwLCAweGJkYmNjOTZjLCAweDU3ZGY4MzNjLCAweDhhMTVkYjIwLCAweDMwN2FjMDM3LAorCTB4MTQ5ZWYzMTUsIDB4ZjM3MWZmYTYsIDB4OGZiNmE0YjgsIDB4MDFmNzg1MTEsIDB4NzVhM2YwODQsIDB4ZjczYTMyZWQsCisJMHhkYzY2MWQ2OSwgMHg4Y2QzOTc5ZiwgMHgxNjc5ODk3NSwgMHhhYTI3YmZhMCwgMHg0NjM3ZTdjNiwgMHg4MzQxZjk2YiwKKwkweDZkZGEwYTU4LCAweDEzM2U0ZGMzLCAweGZjYzkxYmI2LCAweDAyYzc1ZTU0LCAweDYyOGQ4ZjY0LCAweDhkMWY1NDFkLAorCTB4MWUxNjYzNWUsIDB4NDFkMjcyNWIsIDB4MmRjYzcxYWIsIDB4NDdhYTM4ZjIsIDB4NzEzMTNiNDQsIDB4ZjI0NzFlYWUsCisJMHg3NGJlNDE0ZSwgMHg2MTc2NmI0NywgMHg3ZTNmZWYwYSwgMHhmN2NhMmNjNiwgMHhjZGVmNjlmNSwgMHgzMTNkODYzMywKKwkweDdlYjVlNjBkLCAweDUwY2VkZGM2LCAweDJmNWY0ZWZiLCAweDQ4YWRmYjc1LCAweDY4Y2JmOTgzLCAweGEwYmRhMjIxLAorCTB4MzY0NTc1ZGIsIDB4ZTU5ODRmNWUsIDB4YzYxNDdhN2UsIDB4MjZjZGRiMTEsIDB4NThhZDlmYmMsIDB4NmYxNjYzOGIsCisJMHhiYjQ0NGZjOCwgMHg1Y2RmNjhhYywgMHg0NGQ3ODdiMiwgMHhkMTZjYmI3MywgMHg3N2IyMTlmYSwgMHg5YWY3OWUxNCwKKwkweGZlN2Y3NjRmLCAweDE4MzEwOWJhLCAweGI5YjA2ZmE3LCAweGZlNDdhZTYyLCAweGRmYmYyM2ZkLCAweGIxZWQ0YWY1LAorCTB4MGE2YmM0ZTYsIDB4YzE5YjFlNTAsIDB4OGZmYmM2YWYsIDB4Y2FkZDlhMGUsIDB4NzU4YmU0MTgsIDB4NmNjZWM4YzMsCisJMHhjN2Q2ZjI4ZSwgMHhmZmNkYmY0MiwgMHg0MWQ1NzRlYSwgMHhmNzM2NjdmZCwgMHg0ZTM4MjNmOCwgMHg4ZjdmMTQ0MywKKwkweDZmMjEyNmY3LCAweDNmZjdlZGY2LCAweDFlOGM1YzJmLCAweGZkZjBmYzc4LCAweDkxYjE4M2ZlLCAweDQzYmRmMWVmLAorCTB4ZmVkMDVmYzMsIDB4ZDlkZDkwZjAsIDB4ZGNjNGY2NjAsIDB4Y2JiZGYwODcsIDB4ZWFkNjc5ZTcsIDB4MTEyZjUxODksCisJMHg4NmI0ZmI2NywgMHhkNjc2MDNlNywgMHhlNjQwNThiOCwgMHhiZDYyZDFmNywgMHhkZDNmNjhhNCwgMHgyMmQyNWNhZiwKKwkweDA5N2NkYzUwLCAweDNhM2QyMjZiLCAweGVlZDU4OTRjLCAweGM1ZTYzMWE3LCAweDRkYmQxNjk2LCAweDc5NWI0YmVkLAorCTB4NDJkNjMyZmIsIDB4ZTE3YTc1ZWQsIDB4ODMwMWI1YmQsIDB4ZjBjZTNhMWQsIDB4ZGNkMTFkZmQsIDB4NzhhY2RkNmYsCisJMHhmZmZiNDMxZiwgMHhjNGQ5MTk5MSwgMHgxMTY3YzA0ZiwgMHgwN2UyMmRmMywgMHgzMWI5NzdkOCwgMHgzNzFmYWY5YSwKKwkweGY2YzhkYjYyLCAweGI4NjNmMTI4LCAweGUwNWNiODdkLCAweGMyMDdiM2U3LCAweDkzNzlkNTUzLCAweGRlMGEzZDYxLAorCTB4N2FkMzIxOWYsIDB4NDlmOWFkZDQsIDB4ZWI3YzkzODcsIDB4N2ZmOTg0NmYsIDB4MjQ0YWY1OWYsIDB4MjNiZGRhYTcsCisJMHg0MjVmODI3NSwgMHgzM2JlZmFmOSwgMHgyZDFiZGVlYywgMHhhNmJhNjgwZiwgMHhjYjQzZmUyNSwgMHg2YjNlZjllZiwKKwkweGZkMGRjMzc5LCAweGY0MDJjZWRjLCAweDllZWQ2MWRkLCAweDQ4YTQxNDEyLCAweGFmZDAxOTc5LCAweDNhZGMxZjQxLAorCTB4ZGRiZjU4YzIsIDB4MzlkZmFjNjUsIDB4N2QzZGYyMjksIDB4YjRkNDZiNmIsIDB4ZDZhYTdiZDAsIDB4ZjM4ZTcwMGUsCisJMHg1NzVlOGQyZCwgMHgwYjEyZGY3ZiwgMHgwYjdiZWJjZiwgMHhmOTgxNWVlOSwgMHhjMTdmYjQ5NCwgMHgxYjE0ZmFmMywKKwkweGQ5MWVhMGYzLCAweGZiNDZjZmJmLCAweGJjOGE1NTIxLCAweDU1MTY0MzE5LCAweGJkZTJlZmUwLCAweDlmOWQ4YWYwLAorCTB4MTdmZjQwMzcsIDB4OTk4YTA1ZTMsIDB4OTdkZTBmYjcsIDB4MTI1MWY3YzQsIDB4M2M1YTQ5M2MsIDB4NjMzNDk1YzMsCisJMHgxYjg3YjdkNCwgMHgwYmNhMmFmZCwgMHhkYzQ2ZDg5NiwgMHgyN2U2MGQ3NywgMHhlOGVkZWYxYSwgMHgwZjM4ZmU4YSwKKwkweGNmOTg2M2ZkLCAweGU4NGY4YzZjLCAweDNlN2Q1YTcxLCAweDJjN2YyOGZmLCAweDM5Y2ZiYjVhLCAweDM0NmI2ZTljLAorCTB4YTMwYmE4ZjksIDB4MzlkMjNkNzMsIDB4Yjk3M2RmMDcsIDB4ODdiYjUyZjksIDB4NDNjMTI5ZmYsIDB4MjY4OTY4NzksCisJMHhiM2FjMTcxZSwgMHg5YzUyOGViOSwgMHhlYTBmZjM0NCwgMHhmMzA2YjhiNCwgMHg1NmVmNWQ3ZCwgMHgxMDk1ZWNjMiwKKwkweGVkN2QyMmZmLCAweDM5ZjVmNWQ3LCAweDM4ZjM3N2U0LCAweDE1NmEyZDg4LCAweDM2MGRjM2FlLCAweGZhYTY2ZWJkLAorCTB4MDBhNmU2ZDMsIDB4NWFhZmZkZjksIDB4ODMxZjE4OWMsIDB4NjcxOGRkZWYsIDB4NDExZGNkZjMsIDB4MDY1ZDVkN2UsCisJMHgwZTdiYzE0YiwgMHhiNGNiYjBkZSwgMHg2YWJkZDZmZSwgMHhkOGY1YzY2OSwgMHhkYjc2ZjM2ZCwgMHhiYTQ5ZjI0MiwKKwkweGY5ZDFlZmVjLCAweGY5ZmQwOGE2LCAweGY5MGRmZDBjLCAweGY4YzFmZDc2LCAweGZkNzc4OGFkLCAweGE3ZjYxYmZkLAorCTB4Y2VmZjIyMDIsIDB4NjkxYmY5NDksIDB4YTE3YjFmZWQsIDB4NDJjYmI4OWUsIDB4ZjdmZDRmNzEsIDB4ZTdjZmNhMGYsCisJMHg3YThjZmRkMSwgMHg0ZTE0MTM3ZiwgMHhkNTFhY2U4NywgMHg4ZTVkOGY5MCwgMHhlNTA3Mzc3YSwgMHg2N2Y0OWRhMCwKKwkweDgzMjBjYjQ1LCAweDY5ZjVkNGRlLCAweDY4MWJmOWM1LCAweDU3NDgyY2JmLCAweGI1MjEyZTJkLCAweDM4YWE1ZTkzLAorCTB4YmM2OGJmZmYsIDB4MzQ5ZTkwM2IsIDB4ZjdlOTEyNGUsIDB4MzU0OWM3ODEsIDB4MzhlMGUzZTgsIDB4Zjc3MDBjOTMsCisJMHhjMTMyNjcxZiwgMHhkYWMzOGZhMSwgMHg5ZmU3MGNhMiwgMHhhZTNjY2NlYiwgMHgzMzk4NjY3MiwgMHgxZTgyMzYyNiwKKwkweDgzNzE0YmQxLCAweDYwZmY3MGM5LCAweDYyYjJlNDlkLCAweDRlY2E3NWZmLCAweDI4N2YzNDM1LCAweGVmMDA1ZjdjLAorCTB4ZjAyMTY0YzUsIDB4ODY3YWMxZDUsIDB4ZjMwYjcyYzEsIDB4M2Q0MDVlNTIsIDB4MDcyMjEzZjYsIDB4NjJhNWQ5YTIsCisJMHhmOGMyNjJiZiwgMHhjNjJlZjllOSwgMHhiZGI5NDVmZSwgMHgzMzcyN2QxMCwgMHg4YmQ4MmRmMiwgMHg3ZTNiNTgzZiwKKwkweDQ5ZWMwZjk1LCAweDQ3NjllY2M5LCAweDkzNzY0YWJhLCAweDZiNjhmMzEzLCAweDQ1YzUxMzE1LCAweDY0YWM5MmViLAorCTB4Y2ExMmFkZmYsIDB4YmQ3Mzk0NTUsIDB4MjI0M2E5NWYsIDB4OGY3ZGY0MzgsIDB4OWYyOWU2ODEsIDB4YzMzY2QwNzcsCisJMHg5ZmZiM2JlZiwgMHg3NmExNGYxYiwgMHgzYjU3ZWVmZCwgMHgwZjkzZDczMCwgMHg5MzU0NWJmZCwgMHg0ZTVkNDUwYiwKKwkweDIxMjdkODUzLCAweDQ3ZWYwZmY0LCAweGVjNDUyMGRhLCAweDhlOWRiYzI3LCAweDZjZTkwMWZmLCAweDNkMjA3MGVlLAorCTB4ODhhNWUzYmEsIDB4OTUxYjEwNzksIDB4MzEwNzk4ZWYsIDB4MjcxZjRjMmYsIDB4ZTAwZWNkMWMsIDB4MjM4NzQyZjcsCisJMHhlNWY0ODMyMywgMHhhNWY1MDU0NiwgMHhkYzlmY2NmZCwgMHhiNGNiZDI0ZSwgMHg3ZmFmYWRlZiwgMHg1NmE5ODRlNiwKKwkweGJjNmM0ZjllLCAweGZlMjA2ZjU3LCAweDdkNjJmMWQzLCAweGYzYzY0MWYzLCAweDdmOTRiZDUzLCAweDQ4M2MzOTcyLAorCTB4ZmI0M2NiODIsIDB4ZTIyOTc2MDAsIDB4NDI1ODM2YmUsIDB4NDkzOGZjODYsIDB4MzU0ZmU2MzEsIDB4NjNlMjFlNDgsCisJMHg1NmQ1NGRmMywgMHg1YjQ5MjdkYSwgMHg5MjdkYzU2OSwgMHgwNjMzOTJkNSwgMHgzN2RlZDhmZCwgMHhmOTgzZmVjMSwKKwkweGJlNzkzYTM1LCAweDZiZmY3ODZhLCAweGI0NjYxZWYwLCAweGM0NTMxNTczLCAweDA2YTM3OWZiLCAweDM0YmFhZmIwLAorCTB4NzdkOWFjZmEsIDB4ZjUwMWZlNjksIDB4Mzc3NWMxZTEsIDB4NzE1MjRlMmEsIDB4Mzk5YjM1ZGQsIDB4NGJhZDAzYmMsCisJMHhlMTAzYmY3YSwgMHhmYzdkZDFlYiwgMHgzOTJjMWJmNywgMHhmZmFlM2Y1NiwgMHg0YTM1ZTNlMSwgMHhiYzNlNGYxZSwKKwkweDcwNzgwNDZmLCAweGNkMzFhY2RmLCAweDU0NmRmODRkLCAweGQ1ZmQxNTI1LCAweGNjNTExMWU4LCAweDY1NmZlYTFhLAorCTB4NjdmN2EyY2MsIDB4Y2NmMWUzZTIsIDB4OGY4YzZiMjIsIDB4ZTNhMzk3OWMsIDB4MWRmMmI3NjksIDB4MTg2ZjFkZWQsCisJMHg4ZjdmMGU1ZiwgMHg3YzIxZThlMiwgMHhlODRjYTlkOSwgMHg5MWJiOTdjZiwgMHhmYzM4MTMxNywgMHg1YWE2ZjdhMSwKKwkweGJjNDU4NjMzLCAweDdmMWZiMjdmLCAweGRlNGRmMTg2LCAweGY3ZTc0NjY0LCAweDE5Yjk0MzA2LCAweGVlZDU2ZWZhLAorCTB4YjVjMGFhNDMsIDB4ZjJmNGZjMGIsIDB4YzJhNjE0N2IsIDB4ZTQ3N2U2ZmEsIDB4YzkzOTQwNWYsIDB4Y2ZjZmRmNmIsCisJMHhmMDI2YjRkMSwgMHhlZmI1MWU3YiwgMHg2MjVkYzdjMywgMHgxMmM4ZmVlNywgMHhjYzY1NGFiYiwgMHhmMTJmZjc1MSwKKwkweGRiNWEzN2Y3LCAweDVlNzg5Y2EzLCAweGIyMmUzNWIxLCAweGQ3NjM5MzFmLCAweGI0OWE2OGYzLCAweGI0MWQwODczLAorCTB4Y2ZiN2ExNGYsIDB4Y2RkY2M3OWIsIDB4MWIzZGM1MGEsIDB4MjU3ZmUwYWQsIDB4YTlmZmI1ZjQsIDB4ODIwMjNmYjYsCisJMHhmOWRjZTMwYiwgMHhmOTlhZWJkYiwgMHg3ZjNlNTFmOSwgMHhmYjYyYWI4YywgMHg1YzhlYzRjNCwgMHg3NDBlZmM0MSwKKwkweGY3MGNjNmRiLCAweDNiNTg1NWRiLCAweGU3Y2U1MWIyLCAweDc2OTliYzlhLCAweDY4ZWFhNzE4LCAweDViZDYyMjQ3LAorCTB4NGU5ZDNlZGYsIDB4YjcxZDZmN2UsIDB4NDc3NzdiMzcsIDB4M2ZhMGRjNTMsIDB4NzlmOTZhN2QsIDB4Y2MyOWYzZjIsCisJMHhkZDNmYTgzNywgMHhhZDAwYTVjYSwgMHhkM2U3ZTVhYiwgMHhjZDFjNmY5OSwgMHgwYjhkNjdkYiwgMHhjMmQzYmZiZSwKKwkweGM4YjFhNGQ4LCAweDg4NGYxYzAwLCAweDMwZjQ0ODlmLCAweDdhMDY0ZGRiLCAweDY3NWUzYzgwLCAweDc4ODFlOGQ3LAorCTB4NzZiN2EzZWEsIDB4NzZhNzRiZWYsIDB4Y2Q3MWUwYmYsIDB4ZjcyYTYxNWYsIDB4YTVmYmY1ZDcsIDB4ZTVmNzY3OGUsCisJMHg1YjdkZDA1YiwgMHgxM2Y3MzZlNSwgMHgzYjBiNGY3OCwgMHhlNmJlNTIyMiwgMHhmZWZjMjljMiwgMHg3NzE2ODVjNCwKKwkweDBiNTdkYTBjLCAweDZhMTQ1M2ZmLCAweGYzOTM3ZjY5LCAweDdmMGQyMmZkLCAweGY3NDVjYzlkLCAweGRhZDZmODBlLAorCTB4OTg0ZWJlZjgsIDB4NTRmMTk2N2YsIDB4YzIzZmI4ZmUsIDB4NDRkYThiZjcsIDB4MzA1ZjFiY2EsIDB4YmY2MWYxNDUsCisJMHhiZjA1ZWQ3OSwgMHhlMmY5ZmRjNCwgMHg3NzNhNjhjNiwgMHhhZTdiZjBiZSwgMHgyZGQ3Njg5MywgMHhjNGU2YzI3YywKKwkweGZlNTk3YmRmLCAweDMyN2U2NjQxLCAweGM5ZmNiYmY0LCAweGRmMDdkNTBjLCAweDI0ZjBhZjQ1LCAweDI3YTA1ZDU5LAorCTB4ODg1M2RiMWYsIDB4MzA4MzQ1N2UsIDB4MDYzMGJlN2YsIDB4MGVjN2NhZmMsIDB4OThiOGMyYWMsIDB4Y2Y5NGNkZjQsCisJMHhmNDdmNTA2ZCwgMHg2MTU2NzdiMSwgMHgxOGI3ZTliYywgMHhmNjNiMjZlNywgMHg2M2I0NDJkZCwgMHhmNGQwNDI1ZiwKKwkweGMxYzAzZmZkLCAweDVhNGQ4NzRiLCAweGE5YWFjNGZkLCAweDRkYWZmMmEwLCAweDJhMjkzNTY4LCAweDU2Mjc2NWZhLAorCTB4YzRkOTM5ZTEsIDB4MTMxOGY3MzgsIDB4ZmQ4ZWY3OGMsIDB4NmZlYzQyYjMsIDB4Y2VhMzEzYzEsIDB4ZTdmNzgwNmQsCisJMHhiZWM4MTdlZCwgMHhkZjY5M2EwMCwgMHgwMTRmMzcwYiwgMHhiMjc4YmJiYiwgMHg1ODJkOTc1ZSwgMHg4NjY2OGY4ZiwKKwkweDMzMzliZTM4LCAweGQ5ZGEzZTM4LCAweDhiN2M3YWFkLCAweDcxOGNkZDQ1LCAweGQ1MDVlM2Y3LCAweDNmZTgyNDUzLAorCTB4Y2VhZWExYzMsIDB4YzRkOGM5MTksIDB4MWJhYWY5ZjUsIDB4YzQ3NmNmYzYsIDB4OThmMThjZGQsIDB4ODM3ZGJlZDYsCisJMHgxZjE4ZDVmOCwgMHgwM2RlNjU2YiwgMHhkMzdmNzg2NiwgMHhiNjZlNDNlMywgMHgwN2UzNjIwMiwgMHgzMGE4YzY3OSwKKwkweDI5ZDY0MWZmLCAweGY0ZGZhN2FiLCAweDQ0NjNlNDFkLCAweDBkNTlmM2JmLCAweDkzOTIwNGY2LCAweGY0ZDI4ODQzLAorCTB4YzJkZWZjMTUsIDB4ZTM0ZWY5M2UsIDB4MWY1N2RiN2MsIDB4YzNjZmMxZDEsIDB4NWUyNGY1ZTgsIDB4NTkxOTVkNmYsCisJMHhjMzEyZGM1ZiwgMHgyYTM1YmFmOSwgMHg0ZDY2ZmJmMiwgMHgwM2JlMDAzZiwgMHg4YjZkN2YxNCwgMHgwOGNmMGZmNiwKKwkweDFmOTAwZmVhLCAweGE3OTIyNGViLCAweDgwN2Y1Yzc1LCAweDkzYjRjZDFjLCAweGVmZWM0NmRjLCAweGFiNmJjYWRiLAorCTB4YWI3OWFmNzYsIDB4ZjhjNjhlZTQsIDB4MzBjN2FlODIsIDB4Y2NlMzg2ODIsIDB4ZmEwZDNiYjUsIDB4MDE3ZGFmMzksCisJMHgzMTUxZDdlOSwgMHhjOWM3ODcyYSwgMHhjNTMwOTNmMSwgMHhiNTk4NDdhOCwgMHhkZjc0M2IzZCwgMHgzY2RhNzdmZSwKKwkweGUzZDNhZTMzLCAweDc0MzkwMTNmLCAweDhlZjk2OWRmLCAweDlmOWU0YmZjLCAweDdmMzhjNzJkLCAweDljMWRiZDg4LAorCTB4Njc4YTU0YzcsIDB4ZmExN2ViZjQsIDB4YmJmZDZhNzMsIDB4NWYwNGFlNzIsIDB4MTVmMDY1ZWEsIDB4ZGNiYWY4NGYsCisJMHgxOWZkODMzYywgMHhmYmZkMmZlMywgMHhjMTdkYjU5MywgMHgyMjNhZTMyNiwgMHhhNGYzODY0NywgMHg3ZjgwMjdjZSwKKwkweDJjZmU4ODUzLCAweDllYTlmNGQ2LCAweDZiYmRkMTA3LCAweDA2NGZlNTI0LCAweDMxZTdlNWM3LCAweGM0YmZiZTgxLAorCTB4ODFmMjVkZGYsIDB4OTYzZDQ1M2UsIDB4YzU2ZmI5MjcsIDB4NzFlZDc5ZjYsIDB4YzBlZmRhMmEsIDB4YmYxYWY1NmYsCisJMHgzYTZmYzg0OSwgMHhhYWUzNWI5ZCwgMHhlYmJlNjlmMywgMHhmYTRiYjIwNCwgMHgzYWRhNDFkOSwgMHhkMDI0ZDc5YSwKKwkweDllMGQ5OWVmLCAweDg3ZTcxNWU3LCAweDdiZWJhN2MwLCAweGViNTViZmU4LCAweGU3ZTczYzdmLCAweGY5ZjhmYjY3LAorCTB4Y2QxZjk0M2UsIDB4MGVhZTY3OWYsIDB4MWMzZDVmYmEsIDB4NzMyODg1ZmUsIDB4ZDVlYjIxMDksIDB4ZWI4YTM2YWIsCisJMHg1YWJiNzhlYiwgMHg4NWVkZDdmZSwgMHgyNWQ3MDFmMiwgMHhmODM3N2QwNywgMHg4NGUxYzA2OCwgMHgxZTUxOGI3NiwKKwkweDdjYjU1ZjUwLCAweGI2NjRmNzQyLCAweDdmMGM4OWI2LCAweDhkZTcwMGIyLCAweGQ3NGYyMzdhLCAweDg3OTViZTkzLAorCTB4NWJiMjI0MGEsIDB4NDlkOTdhODIsIDB4MzdhZThiZjYsIDB4YjA2YjU2MDMsIDB4MmJiNWI5ZmQsIDB4YWY1MWViMGIsCisJMHhjN2VjZjc2YSwgMHhjN2M1YTA4YiwgMHg3MzQ4ZTEwNiwgMHg5Mjc3YmI3MCwgMHhkZGZjNDU5NywgMHg1ZGJiMWNiOCwKKwkweDhmMzQyM2Q3LCAweGU4MGEyYjhkLCAweDZkMmE4NTVlLCAweGUxZDQ5ZDNkLCAweDM0NTM3OGEzLCAweDEwNDI3MWUyLAorCTB4N2Q3YWZhMWYsIDB4MTVlM2E1YTcsIDB4ODE5N2JjZWQsIDB4ZDgzYWY1MWYsIDB4YWNhNjk1MjUsIDB4N2VmOGZmNjAsCisJMHhlN2RmMDg2NiwgMHg4NDFmMzgzOSwgMHhlYWJiZTdkMywgMHgwZjgzYzAyNywgMHgwZDQzZjBmMSwgMHhjNzUwMDllZiwKKwkweDA0OTgyZDdiLCAweGZkZTYxN2ViLCAweDZiNWM1MGNjLCAweDU2ZTA0MjMyLCAweDEwNGUzZWI4LCAweDVkOGY1YzRkLAorCTB4MDdlMjJlNDYsIDB4NThmN2VkMzEsIDB4NDFjZjI0ZWMsIDB4ZTViYjcwN2MsIDB4ZTcxNjg3MDEsIDB4M2YyOWVlZDUsCisJMHhhMTM5MDI2OCwgMHhjZjNlMzY3ZCwgMHhkNGM5NWRlZSwgMHhkZGFkNmNlZiwgMHg2ZjJmNGJkZiwgMHg3NDk2ZjJkNiwKKwkweGI1ZTJiMTdiLCAweGY4NDZjZGQ0LCAweDFjYmI3Zjc5LCAweDQ3NzkyZjFjLCAweDhlZDA2M2RkLCAweDVjNTFlZTE5LAorCTB4YjVlNDFmZTgsIDB4Zjk4ZmRjY2YsIDB4ZjA3YmQ5MjQsIDB4N2M4MjA0MDcsIDB4ZTVjMmRkOWUsIDB4YzM0YmI4MTQsCisJMHg0M2RiOWJjYiwgMHhkODc0YWRmYiwgMHhiYmZiMzk3NSwgMHgyOGZiMjNjYywgMHhjYmE0NTdlNywgMHg1YTcyMjE3ZCwKKwkweGJlMzg1MGUzLCAweGM0MTY3ZTYwLCAweGEzZDQ2NGE3LCAweDgzZjdmOTdhLCAweGNmMWZiM2MzLCAweDNlMDM5NTI1LAorCTB4NzhlYjZkNTAsIDB4YmY5OTZkNmIsIDB4N2M3Mjg2ZDIsIDB4OGU1MGI5OTQsIDB4OWJlNjViYmIsIDB4MzE1ZDIxNDYsCisJMHhhMjE5Y2MxMSwgMHg3OWYzZDYxZiwgMHhmMDI4NzZlOCwgMHhlNWYyMGI2NSwgMHgxYTEwYzczYSwgMHg3NzUxZjg2ZiwKKwkweDFmYmMwZTc0LCAweGM2MTM3NjhlLCAweDdlZWM1YjdkLCAweDBlZmMyM2Y0LCAweGUyMDcyZWVmLCAweDE0ZWY1NjczLAorCTB4OGNhZDRmZGMsIDB4ODViNWFlYWUsIDB4ZGY2YmVmM2MsIDB4OGY4OWVkMDYsIDB4MWZlZTIyYmQsIDB4ZjhjMDNmOTUsCisJMHg3Y2RhZjFiZCwgMHgwMmNmYTlhMCwgMHgyMGM4NTVlMywgMHgwZjU0NTlhNywgMHg2NTVhZGUyMCwgMHgzZWY3YmVkZSwKKwkweDU2MTFhNWZhLCAweGY5N2JmMjI5LCAweDk1YmVmZDYwLCAweDUzNmRmM2Y4LCAweGZkMTdkMjFjLCAweGNiOTNiNDI0LAorCTB4ZWUxYTRmNDUsIDB4MTZjMWIyN2IsIDB4ZTAwM2FlMTcsIDB4MWZiZjEwNzcsIDB4MDZjOTMxYjQsIDB4NGExZWZmZmQsCisJMHhjNGQzZDNkNCwgMHg2YjhlNzRhNSwgMHhmYjQwOTY1YSwgMHg4ZjdmYmE0NCwgMHhhNGZkMGI3YSwgMHg0ZDE3YmYzYiwKKwkweDNjMmVjOGZjLCAweGQzZTMwYzM4LCAweDRlOWNkMTA5LCAweGViNTU4ZmQwLCAweDFiMWQ2YWM3LCAweDQ4ZmZiZjk0LAorCTB4OGVmZTQ5MWYsIDB4MTQxZGJlYmUsIDB4ZTBlN2VhMDQsIDB4ZDczNWQ3NGQsIDB4ZDg0MWY4ODUsIDB4ODNmZmVhMWYsCisJMHhhNWI0OGNjMiwgMHgxZjlhZmZjOCwgMHg3YzYxZjY0NywgMHg3YjQ1ZGQ3MCwgMHhjZTIxYWM2NSwgMHhlYmUwZDNlNiwKKwkweDBhM2U0NzQ4LCAweDNlZDE0N2I1LCAweDdkNjdiM2VkLCAweDBjZGY1N2YzLCAweGY0ZTI3NjdhLCAweDcxNWUwMDk2LAorCTB4NmU4YWNiNWYsIDB4NmZlODE3ZmUsIDB4MzZiM2Q4MWEsIDB4OGQzZWMzYzAsIDB4Zjg2NjBlMmYsIDB4M2Q0ZmRjNDQsCisJMHhmYmEwNWMzOCwgMHg3OTQ1MGZkYywgMHhlMDk1YWE3MywgMHg1YzVhODkzOCwgMHgzM2NiNTEyMCwgMHhlNWUyOGM0ZiwKKwkweDFlYjg2MjBmLCAweGFmODYzY2ZjLCAweGJjYTgzN2Q3LCAweDFjODhlODllLCAweGJkYWQ5ODQ3LCAweGViODlhOWZmLAorCTB4OTFmOTM1ZjcsIDB4Njg0ZmQxZjMsIDB4ZWRhYWY1ZmEsIDB4ZmMyMTFjZGUsIDB4OGUxM2VlYmUsIDB4ZGQ3ZGRhMDksCisJMHhlM2M3NmY5NCwgMHhmZTM0MGJmZCwgMHhlODg3M2IwNiwgMHhmOGFiYjQxNCwgMHg4NzZlOWQ3ZSwgMHg0ZDlmNmQ5ZSwKKwkweGY3ODIxM2Y1LCAweDJjMDQ3YmJkLCAweDlmOTA0ZjNkLCAweGYxNDhhZWY0LCAweDZmNThlMmExLCAweDU1YTVlNjIyLAorCTB4Y2I4ZTQ1NDQsIDB4ZjRmMGQyMGMsIDB4MzhhMzBkNTksIDB4Y2ZkYzI5ZWYsIDB4YjdiZmU2Y2IsIDB4MWIyNWY1ODUsCisJMHgxZDdiYTQ5ZSwgMHhlMjlmOTk0YSwgMHgxYTFiNDViZCwgMHhjOGFlYmY2OCwgMHg4MGE3MzAyZiwgMHhjNzg3OTlmZSwKKwkweDk0M2EzNTgxLCAweDcxMGQxMTZlLCAweGI1NTJjNWU3LCAweGU0MTM5YjFjLCAweGFlMWRmYzViLCAweDliMjVmN2QwLAorCTB4NTdlYTE5YzYsIDB4MTgxNjk3NmYsIDB4N2E4MjNiZjIsIDB4YmZlYzkwYTcsIDB4M2U3NTdlZjAsIDB4OGY0ZmI3MGYsCisJMHhmMTBkMzhkNywgMHg4NjFiMDVlZSwgMHg3OGNkZjIxNywgMHg3MzIxN2VkZSwgMHgzNjE3N2NkMSwgMHgxMWVmMTk2NiwKKwkweGIyYjg0YzZlLCAweDFlYzE4MjdiLCAweDUzODQ0NWY1LCAweDNmYThmZDI2LCAweGY3ZjgwZTNmLCAweDE3ZjdjNDg1LAorCTB4ZTA4YzNhN2MsIDB4N2JjMzhiZjgsIDB4OGUwMThjNWQsIDB4YzQzM2U2NjgsIDB4ZGZmMzI2Y2YsIDB4ZjhmMWI0MjksCisJMHhlZjhmZjAyMywgMHg3ZTQwNzY1MiwgMHgwN2Y1NzdjYywgMHgxZmMwMWRhZSwgMHhmYTg3ZmRjOCwgMHhiOTkzNzkwMywKKwkweDAyNGQ2NWZlLCAweDljNGNlMGU1LCAweDY2Y2ZiNDZhLCAweDZlNzVmMGM3LCAweGMxYjQ0Yzc2LCAweDY3OWEyYjNlLAorCTB4NmI1NzM3NmMsIDB4Nzc2YjU3MzcsIDB4YTg0YTM4YjksIDB4YTE2NDI2NWQsIDB4ZTlmZGUzM2UsIDB4NzE5NTFmYmYsCisJMHhmZmNhNmRmYSwgMHhlZGMzMTBkYywgMHg2ZWFhOWZkNywgMHhiYmY0MGM2ZiwgMHhkMDc3M2I1NiwgMHhlZmRhZGU2ZiwKKwkweGY3MzVhZDRhLCAweDVlNTI4NWU1LCAweDFlNmZlNmUwLCAweDA5ZGZjM2FjLCAweGY2MDFkZGU5LCAweGZjYzFlODNmLAorCTB4N2JhMGRmNjcsIDB4NmVlZmY0YmEsIDB4YjQzMmQxNWYsIDB4YTk1NGYwMDgsIDB4OGJiOTczYzksIDB4MTVkY2FmY2YsCisJMHgzZjQxODc5MCwgMHhhZTFjZTUyOSwgMHg4MjdkOTZiNCwgMHg1YTVkZjIxNCwgMHgyMmI3NmYwOSwgMHgyZmYwNmNjNiwKKwkweGZmZDVhMjdmLCAweDY1NDljNjM1LCAweDE4NDA0OTVhLCAweDM2NTJlZDA2LCAweGVjMjQxMTZkLCAweDBiNTc3ZjBmLAorCTB4NjZhOTQ5ZTAsIDB4OTNkZmQwZmUsIDB4ZWRjZjE5NGEsIDB4NmZjN2RiOWEsIDB4MDRlNjE2MTYsIDB4OWE2OGQwZjEsCisJMHg1YzYyYTM5MSwgMHg4NWRhMzEzNSwgMHhhYTQ3Y2NlYiwgMHg1MGYxMGViNywgMHhjZTgwNTFmZSwgMHhhOGZjNGM0OSwKKwkweGJkYmI0MjVkLCAweDIzZDc3NTViLCAweDcwNzhlYjdmLCAweGFlMGE2YThhLCAweDcxMWZkMWEzLCAweGZjZmE5YjM4LAorCTB4MzBiZWJlNjIsIDB4NDc2NmE4ZjYsIDB4ZTk3NmViMzcsIDB4NDJlZGM2NjEsIDB4NTcxMmE3NWEsIDB4M2VmYzMwOGUsCisJMHhiNjljNjI2MSwgMHhlZjMyMjQ0ZSwgMHgzN2RhODU0ZSwgMHhhMzI3YTIzMiwgMHhjY2FlMjRmOSwgMHgyYzc2ZTY2ZSwKKwkweDJjYjRmN2E3LCAweDNlN2MxNmNmLCAweGIxYzhmMDZkLCAweGQ2NDdkZjc4LCAweGJmODQ4MGRhLCAweDI2ZGFmZTNiLAorCTB4NTFmYmM0NTMsIDB4YzNmYzM1OWEsIDB4ZjljNTllM2MsIDB4OWNiOGYzZTksIDB4OTlkYmQwNWUsIDB4ZTg0Zjg4MDcsCisJMHgzZDNkMTBmMiwgMHhkOGMxZGZiMiwgMHhmZjNlZjRlMywgMHhlOTdiZjhkOSwgMHg5OTdhY2FmZSwgMHhjNzRlNGY3ZSwKKwkweDY5ZWFiNzdmLCAweGI0YTZiYzQxLCAweDM3MDgxNjZjLCAweGRjN2E3OGRhLCAweDVjYTM5ZjBlLCAweGU3OGQ5NzFlLAorCTB4ZmI5NDA3M2EsIDB4MTY4NzNiMTUsIDB4YmQ3ZGNhODUsIDB4MWNkOWY0NGMsIDB4ZGJhZmU3OTYsIDB4ZTE4ODdmZjcsCisJMHg1ODkwZWFlYiwgMHg0YmM0M2VjZiwgMHg4YTNhZGI2NSwgMHhjMmQ5MmNlZiwgMHg0MDY3Zjc3ZiwgMHhmZTIxNWNmYywKKwkweDA3ZWUxMjg0LCAweGZiZTFjZjk0LCAweDRhY2ZmOTVlLCAweDdhYjJmZjQ0LCAweGU1YWNmYmZlLCAweGI4ZjA3N2RiLAorCTB4MGI5OThmY2UsIDB4Y2I3OTQzZjUsIDB4MDcyOGExMGUsIDB4ODc3MzA3N2YsIDB4OWYwNDI4YjAsIDB4Y2E3ZWU1YTksCisJMHhhZWM2YmY4MywgMHg1YmQ3MWZjYiwgMHg3MThlZmNlMSwgMHgwZTUzYjQ2MiwgMHhlODdlYjhkOSwgMHhiODdjNTdjYywKKwkweGY2NjlkYzFmLCAweGNlYmI2Mzk2LCAweGU2MTc2OGU0LCAweGZmZjhlOTc3LCAweGU5OWI4ZWZkLCAweGE3N2RiNWRjLAorCTB4YTM2NTgwMjUsIDB4OGFjOTM5YTksIDB4Y2FkNzBlZmIsIDB4NmVhYmU0MmUsIDB4ZTkxMjdiZDUsIDB4NWE3OTI3MTMsCisJMHg3OGQ4ZmJmMSwgMHhiZTE2YWJiYiwgMHg1OGQ4NWE3NSwgMHgzYzcyYjk1NSwgMHg4ZmUzMGM0YywgMHg3MmU2M2Y4OSwKKwkweGY0M2FhNDkzLCAweDI0YjE4NmJjLCAweGViOWRhYTM3LCAweDY3ZDcxMzJkLCAweDFlN2NjYzg3LCAweGY3ODcxOTNiLAorCTB4YjNlZTMxMDcsIDB4ZTM4Nzg3MjQsIDB4ZjI5NGRjNjgsIDB4Y2ExZjlkMDAsIDB4NzBkM2JkMzgsIDB4NWZjODMwY2UsCisJMHgxYjdkYmZlZSwgMHgyYzNmZmY3ZSwgMHgwMDI4NGJhMSwgMHgwMDAwMjg0YiwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwKKwkweDdkZDVmZjAwLCAweGM1NTQ3YzdiLCAweGJkZGNmOGY1LCAweDBkZDkwYWZiLCAweGRjM2JmNzliLCAweDI0MjgwYzEwLAorCTB4MDEwNDllNmMsIDB4ODc4NDI0ZDksIDB4MjgwMjZlMjAsIDB4NDc3OTZiYzgsIDB4ZDIwMjZjOTIsIDB4NmRmYWQwZmUsCisJMHhlNTMxODMxNiwgMHgxNmQ0NmI2YiwgMHg4ODJlYTk0NSwgMHg4MzVhYjY5NiwgMHhiODBkMDZhMiwgMHg0N2Q2MjIyOCwKKwkweDJkOGFhNTIzLCAweDIyMjBhNWRhLCAweGZiMWI2NDg0LCAweDZmY2I1NmMwLCAweGVjOTk5OWNlLCAweDBmMGQ5YmRlLAorCTB4N2NmOWZiNmIsIDB4ZGNjOThmZTEsIDB4ZTY3MzlmNzksIDB4OWNlNzMzOWMsIDB4YjUzMzFkOTksIDB4MjI4Y2E4Y2QsCisJMHgzODlhYTZhNCwgMHhmZDJkMzRiYywgMHg4NGU5MGVlOSwgMHhmMDBiOTA4NSwgMHg4MzIxMjI2ZiwgMHhmMTIxMzI2YywKKwkweGJkM2NhNDg0LCAweDU4MmM1MjRkLCAweDFjNWE3ZmJlLCAweDA1MjYyN2Q2LCAweGFlZDg0YmJlLCAweGEwYWY5Njg2LAorCTB4ODQyMjViYTksIDB4YTBlNDI1OGMsIDB4MzFjYzc4ODEsIDB4MmFlOGI0ODQsIDB4ZmQ2OGQ5NDcsIDB4N2I0ODg0OTYsCisJMHg2NjNiMmQxMywgMHg2OGRiNDU3MywgMHg5ZDYzOTY3ZiwgMHhlYWI0YWMwNywgMHhhMzNlNjM5OCwgMHhkYTRiZjY4YiwKKwkweDQyNjRjN2U5LCAweDEyMTIzMGRlLCAweDhjMWRkYjQxLCAweDZkZDNlZDYwLCAweDQyMjI5MDc0LCAweDA3ODkxYjI2LAorCTB4MjMzZDFiYmYsIDB4YzFkZmRhMTQsIDB4YmZiMDgzYTEsIDB4YTZlYWI3OTcsIDB4YzM3YjY5N2EsIDB4MTlkOGIyMjAsCisJMHg5Yjc0ZWYzMiwgMHg2Y2E1ZGIwZSwgMHhlOGU5MjFkZCwgMHg1YTQ4YjhmNywgMHg1MTNmMzIxZSwgMHg1OTViMDFlZiwKKwkweGNjNjdjYzI2LCAweDQzODQ0ZWQ0LCAweGFlM2Q1NmRkLCAweDFjZThjMmE3LCAweGIwNTQ2NmI2LCAweDhmZTg2OGRlLAorCTB4ZTZlZDdiZDYsIDB4ZmE3ZThjNGYsIDB4YmQyZmM3ZmQsIDB4YmY1MDI0NmYsIDB4YzFiNDcyNTUsIDB4MzdkZjViZmMsCisJMHhhOWExYzljZSwgMHg0OTMyZTdlNywgMHg2MTNhNjQyMCwgMHhmMGJmMzZmZiwgMHhkZmExNTFiZSwgMHg3MGE2ZWZhNywKKwkweDc2ZWFmNWEyLCAweGEzMmZkMmVmLCAweGM1YTk1NzY5LCAweDI0MjY4ZDIzLCAweDhiNmJjY2YzLCAweGRlZmQyMTQ4LAorCTB4NzQxMTIyNjYsIDB4NTczNmRkNmUsIDB4ZmJjZThkOTEsIDB4MGU1MzVkY2QsIDB4NTg4NDUxNDksIDB4MjBmOTMzOWYsCisJMHhjNDIxZjAxNSwgMHgwNmI0ZTE5ZiwgMHgzYTUyMjVlNywgMHg3MjJmY2UzMCwgMHgxMGIzZmQyYSwgMHg1NWVmNDZiMiwKKwkweDk1ZGRmMDk5LCAweGI3ZWI0NTU5LCAweGNjZjgzMGM2LCAweDQyZTBjYzFmLCAweDE1N2JlYzJjLCAweDBiODA5NzVmLAorCTB4OGMwYTdmMWQsIDB4ZGNlNTkxNWYsIDB4MjQ1NGZkMDEsIDB4MzI5YmQ4NDYsIDB4YWZmOTllNjEsIDB4ZWJkYzI5OTksCisJMHg4MjNkOTJlYywgMHg2NzJiOGQ1NiwgMHg1NzlkMGNmMCwgMHg3OWI4NGU2NSwgMHhlMmYxYzA2ZCwgMHg0NGY4ZDk2MywKKwkweDcxODBjZmVmLCAweGVmYjJmMTA5LCAweGY5MjE2OTMyLCAweDM4NzNmNmMxLCAweDFmNzdlOWJlLCAweDNhODY0ZWZiLAorCTB4ZDdmMzgyNzMsIDB4NGQ4MzZmZTIsIDB4ZTg2MWZhYzIsIDB4YTNhYzExNmMsIDB4YzdjZjk4ZjYsIDB4MGY1M2FjZTgsCisJMHhlNjc5OTY3NCwgMHhkMDQzZTIzMCwgMHhlYWI2Y2ZjZCwgMHhkNWZkMTUzMSwgMHg1ZmQ4OGNkOSwgMHg3MDhmNGQ5ZCwKKwkweDFhNzgwY2Q5LCAweDJjMDM1MzRjLCAweGNjMWJhNjlhLCAweGM3ODUwZjVlLCAweDFmMjZmMzliLCAweDdlMjk3MjkyLAorCTB4MjBmYTMxNmUsIDB4YjRiNzQzN2QsIDB4NDhkZmNhMTYsIDB4ZThiN2UzNjEsIDB4ZGYyMTZiNzQsIDB4MzQ4NTk3NzIsCisJMHg2ZTFkNWUyMSwgMHgzNzZiY2Y5OCwgMHg2YTdlMjE0NywgMHgyNmJkMWFlNywgMHg5ZjhmY2ZkYSwgMHg2M2RlNTg5NywKKwkweDY3ZmExMmYxLCAweDcyZjY2YmFkLCAweDIyZTI0NzY4LCAweGZlMDI0ZmVjLCAweDczOGMwNzVjLCAweDRhZTlmZGFjLAorCTB4NTFiZjZlNzksIDB4YjdhN2RmYTEsIDB4ZjAyN2ZkYjEsIDB4ZThjNmRiNTAsIDB4MDEwN2VjNGIsIDB4YmQzYzIwZDcsCisJMHhmMDI0ZmRhYSwgMHg4ZGIwN2YzMSwgMHgxN2E1MDVkMSwgMHhjZWNkNzc4MCwgMHgzMzQ5ZGIwOCwgMHgwMTAyZWIxYiwKKwkweGU1NTY4Y2ZhLCAweDZkOTNkYmViLCAweGYzMDQ0NzI3LCAweGQwMDdmMDM1LCAweDgxNjIwZWMxLCAweDc5ZjJkNjc5LAorCTB4ZWViOWQzY2UsIDB4Njc1NWZkODMsIDB4NTAzNDFmZjYsIDB4MGQxZjE2ZDQsIDB4ODgxZjdlZTAsIDB4ZmZkNjZiN2UsCisJMHgwMTY0ZmIzYSwgMHgwZTkzYWIyMSwgMHhhZGY2MmE2MSwgMHg3ZjdhYTg2MSwgMHg2Zjc4ZTU2ZiwgMHg3YmI2OTQ4MiwKKwkweDRkNGRkMzgyLCAweGNiZWUxYjYxLCAweGI4MGQ5MzlhLCAweDE5NTMyZDlmLCAweDIzMWNiMzVmLCAweDEzM2M1MDhlLAorCTB4ZGViZTQzZjIsIDB4NDU3ZGIxN2IsIDB4OTk2NGRiNjQsIDB4NzFlMmJkYzIsIDB4ZmE0NGQ2YzksIDB4YWJhNDRmY2YsCisJMHhhMzZjZTIyNCwgMHhmNWI2N2RmZCwgMHgwMDI1YThmNSwgMHhjODJlYWZkZiwgMHgzN2FlOThhNCwgMHgzNzc3YWQ4MiwKKwkweDNiNWQzYmU3LCAweGRlOTFjMDI5LCAweGNjMjQ4YzFiLCAweDNmYjcyZjdhLCAweDAxMjIzYmUyLCAweGVjMzg2YjNjLAorCTB4MWYyZTllYmIsIDB4MTdhNTI5ZmIsIDB4ZjZjMWNlY2YsIDB4Y2Y5MmU4YWIsIDB4ZjZlYjNkM2UsIDB4YmJiY2U5NGYsCisJMHhjYmI0NGM3NiwgMHg0ZTRkMzY0MCwgMHg3YzQwOWZhNCwgMHhhNTNiN2Q4NCwgMHg0Yzk5Mzg5ZiwgMHgzN2RlMjg5NSwKKwkweDM1MWViZGI0LCAweGZjZmJiNjhlLCAweDgxZjNhMzk3LCAweGY3Y2RiZjZmLCAweGU1ZTc5OWZkLCAweGJiOTcwMGY1LAorCTB4NzVlY2Y2N2UsIDB4OTVlMzVlNTAsIDB4Y2UzMDRkNjIsIDB4OTVmZmM3Y2UsIDB4ZGVhOWZiNDIsIDB4MjYxMDBmNTEsCisJMHhkNTdjYmY0ZCwgMHg3NGY1YTdlOCwgMHhmYmVjNmRkZSwgMHhhODM2YzFjZSwgMHhmNzEzZjlmNywgMHg2ZWYwMDc1ZiwKKwkweGYyYzI2YjZhLCAweGMzNmM0ZjMzLCAweDdiM2Y2YmZjLCAweDY4M2ZkZjc2LCAweDk0Njc1YWJkLCAweDc5OWRlYTFkLAorCTB4YTVlMjNmN2UsIDB4YzA3N2E1ZDYsIDB4ZWJhMjA3N2EsIDB4MzNmNmJiY2QsIDB4ZTEyNmQ5N2UsIDB4MTk3MzIzN2UsCisJMHgyZDc0MTMxZiwgMHg5ZmYzZjdlOCwgMHgyYTFiMWUyZCwgMHgxNmY3YzQzNywgMHg4MzNiOTcyMywgMHhjYjM5MWM5OCwKKwkweDk5NGQ2ZmY3LCAweGIzZDIwNWE1LCAweDg1Y2M0NGNmLCAweGZlOGRiYWY1LCAweGNmOTg2OGVjLCAweDFmMTc0NjI4LAorCTB4YjZkNDc4NzEsIDB4MmRiODMxYWQsIDB4ZjlmYjFlZDgsIDB4NDg3YmVlODAsIDB4OWU3ZDI4NzMsIDB4NmI0ZWY0YTIsCisJMHgwMDUwYjhlZCwgMHhlYjBhZmRlMywgMHgxMTI1N2FkMywgMHgyZjM3YmUxNCwgMHg3Y2MxMmUzOCwgMHgxODM1NDcyMiwKKwkweGJmOWU3MDZhLCAweGQ1NzRlNTY0LCAweGViYzVlNWExLCAweGU5NmEzZDE4LCAweDA1OWIwYmUwLCAweDkwN2Q4YmViLAorCTB4NGQzMmJiYjIsIDB4YjI2MDNlNDEsIDB4ZDZjZTNlMzMsIDB4NmFlZDUyOTcsIDB4ZDdlZmQyYjIsIDB4NjVkOTczYWYsCisJMHg0Zjk3Yzc4YSwgMHg0YTljOWUxZiwgMHgyMTFiM2ZmMywgMHg2NWZlMjAxNSwgMHg4ZjM5Yzk4OSwgMHg1YmE5YzcwNSwKKwkweGQwNGU0NjVmLCAweGQ5YTJlYWY5LCAweDExYjA0OTdlLCAweDA3YzhiNWZkLCAweGQ3YmEzMWI2LCAweGYyMDViZDEzLAorCTB4ODlmMjAwZmEsIDB4MDcyZTE2YmEsIDB4MTI3OWIwNzcsIDB4OTY2MzIwNzMsIDB4YWU1OWRiMTUsIDB4ODNjZTA5OGQsCisJMHgzMDU4YjNiNiwgMHgyOWI4YzgxZiwgMHg2NzhlZTQwNywgMHhjNTFkY2EyZSwgMHgyMzNkZjM4OCwgMHhlNGYxMDFmOCwKKwkweGVlMDljYzJlLCAweDcxMWQwNGI3LCAweDhjMTNmZTAxLCAweDdlMzBiNTM0LCAweDRmZmI0OTUzLCAweDhhNGQyZThmLAorCTB4MDlhNjBhMmUsIDB4MTZiOTU4ODMsIDB4ZjJmMGI3NGUsIDB4OTIzYjQ1MWYsIDB4M2I1ZTAxYTIsIDB4NjBmMjU1NjMsCisJMHhkYWYyYmUyMCwgMHg2ZTRjZGRjZCwgMHhlOTFjNzJiZiwgMHgwODc0MGRkMCwgMHhhYTRlYmJlMywgMHg2NDcyZjZlNCwKKwkweGY3MGU5NGFlLCAweDVjM2E0NzFjLCAweGFiZjhjZWRlLCAweGI4ZDRiZGJiLCAweDI1OWJhNjhjLCAweGVmZTYxNzMyLAorCTB4NzQwNGY0ZTYsIDB4OWJmOWE3NjQsIDB4N2Q3MWEzYTIsIDB4ZDlmY2ViZWUsIDB4MzliYWE3YzAsIDB4NjFlZjc1ZGQsCisJMHg0ZTg2ZjZmNCwgMHhiY2Y4MDFlNywgMHgzNmU0N2RiMSwgMHhmOTVhMDc5MCwgMHgxMTNiNTUyOCwgMHg2ZjhhNmVkZiwKKwkweGQ2N2EwNDkzLCAweDY3YTBjM2JhLCAweDNiMTM1NWQ1LCAweDZlZjc1N2VjLCAweDA4MWExZmJlLCAweDdiNzcwN2VlLAorCTB4MmZlODcyZTUsIDB4NWQ5YTZlMzUsIDB4OTkyZjUwOTYsIDB4ZWVmMzRhOWMsIDB4ZmIwNDUyNWEsIDB4ZDk2YjY1MmQsCisJMHhkMjBiYTAxZSwgMHgyMGFiOTEyZSwgMHgwZGRjZWQ1ZiwgMHhhYjhmYWZlZCwgMHgyMDk5Y2JiMywgMHg5OTI3YjZmNywKKwkweDQ3ZWJmZDY5LCAweGNkZmI2MzE0LCAweGY0Mjk0YWU5LCAweGI2MjBhOWU3LCAweDcwNmYyMTI3LCAweDljZGIzY2ExLAorCTB4ZjIwZWQyM2MsIDB4ODhkYWVkY2UsIDB4MDY1MTE3N2EsIDB4Yjg5Y2ExZDksIDB4YmVhMTZiZjQsIDB4NmM4MGIzZGIsCisJMHhlM2VjYzI5MiwgMHhjYjAzOTIzZCwgMHgwOGRlOTFiZCwgMHgzYjdhN2VkYSwgMHhlZGRjN2ZkMywgMHgxMzlmMWY2YywKKwkweGExYTkxMWYwLCAweGQ3OGMxMTczLCAweDc4ODk4MmZkLCAweGJkOWQyMGE0LCAweDkzMGE2N2I5LCAweDUwOWEyZmIzLAorCTB4NzQ2ZDllY2UsIDB4MzQ1NDEzOTAsIDB4MTA1NjhjOGYsIDB4MzU4ZTAyYWYsIDB4YTAzYTk5YWQsIDB4OTk2NjQyNWIsCisJMHhmOGNiMWU2MCwgMHg0YzBkNWEzYywgMHgzOTczNDQ2ZSwgMHg5YjJmNzU5MCwgMHgxZmJlNzJjNywgMHg3OGViNDc5NiwKKwkweGFmZmJlNDZhLCAweDliMDVjOTk1LCAweGUwZTQxNzI3LCAweDkyMWUzZTM5LCAweDczOTcwMjQ1LCAweGU1YmFlODc0LAorCTB4YjUyN2RjM2UsIDB4ZTJmZWIzNGYsIDB4ZGJiYzhlNGMsIDB4ZTg1NWU4NDIsIDB4NmM3YTVhNDcsIDB4NmNhNmUzZTIsCisJMHgzMzAxMjAzZCwgMHhhNTVhZDk0OSwgMHg1N2Q3ZTdkYSwgMHg1ZDNkNWYxMywgMHg3NTViZjVlNywgMHhhOGI5ODliZSwKKwkweGZjODJkZDM3LCAweDZjOTE4MzdjLCAweDc3ZjdmYTk3LCAweDViZTMzNDRmLCAweDNjY2ViMTE1LCAweGNkZDdlNDA5LAorCTB4ZmEzZmQ0MTYsIDB4ODcyMGU5ZjYsIDB4YjhmNDAyMmUsIDB4ODRkZWM5N2MsIDB4ZWExNjcwYWIsIDB4MDlkM2JkNjgsCisJMHhlZGUwM2I1NiwgMHg1YThlMWM0NywgMHhiZGFmYWI3ZCwgMHhkMTljMGY0NiwgMHg0MzI1YzllYSwgMHg0MTg2ZTk2OSwKKwkweDU0OWUwMTczLCAweGExOThiNzVmLCAweGE3YjY4ZDlkLCAweDhmYjYxMmY1LCAweGYyMTM2MjdiLCAweGY3ZWMyNmFiLAorCTB4ZWIxYjY4ZjYsIDB4ZDg1OWQ2MjcsIDB4Y2IyZTJjMDAsIDB4MjdjOThlYjksIDB4N2FkYzNkYWIsIDB4OWU4NWEzZDIsCisJMHgwNzRmMjhiZCwgMHg4MmRiMzNmNCwgMHhhZmM3ZTFmYiwgMHhiZDE5NGI0OCwgMHgwMTI4NDE1MSwgMHg0MWZkYjIzZCwKKwkweDUyNzhmZWU4LCAweDNkNDQ3YTQxLCAweGY0ZTBkZGNhLCAweGI2NDdhNzg2LCAweGFmNTRkYzVmLCAweGQyOWIzZDAyLAorCTB4MjdhNjVhZTMsIDB4NGZkYjA4NWIsIDB4YTcyMzJlOGMsIDB4N2MwMDc5MzIsIDB4MTU5ZjU0MmIsIDB4ZWZiYjU0ZmIsCisJMHhlZGY2ZmQwNSwgMHhlZmRjY2JmYiwgMHgxZmI2MDZkZCwgMHg4MDFjMjliYiwgMHhmY2U4ZmJkZSwgMHg5YmU3NDY2NSwKKwkweDQ4ZmRkMDM2LCAweGZkZDEzN2NiLCAweGZmYzIxNGQ4LCAweDk4MWZlN2I1LCAweDA0MDc5YzI3LCAweDczNjYzZGJmLAorCTB4NzQ1ZjAwNzYsIDB4MTlhYjdmNmYsIDB4NDdmMzk2YzksIDB4YzgzZmNiZjcsIDB4NjVkZTk4YmUsIDB4NWZiNGNhODYsCisJMHhhMWFmZGQzMywgMHhlMGE2NjNmNCwgMHhlYTYzZTZiNiwgMHhiOTExMzkwMSwgMHg4OTQ3YWQ1ZSwgMHgyNjY4ODNmNCwKKwkweGRlYjFiZWJmLCAweGEzZDI0MjM4LCAweDU1ZjFjM2RlLCAweDAwN2Q3M2FiLCAweDQ2ZjQxZTdjLCAweDYzMjQxMTRhLAorCTB4MTMxYmQzM2QsIDB4ZGUwMGU2NDAsIDB4NDE3YTQ3YjYsIDB4MjA0ODRlM2YsIDB4Y2NjMmU3YWUsIDB4NjdkZjNmNjcsCisJMHhmY2UyOWYwMiwgMHhlYWM1MTA5MCwgMHhmZjdkZjJmNywgMHg0ZmY3YWYyOSwgMHg0YjljODY5ZSwgMHgzYTI4M2Y3MCwKKwkweDBmMjI3MWQ3LCAweDNiNDQ4ZjJjLCAweDE3MmMyZjNhLCAweGQ3M2JlOWYzLCAweDEzN2NkOTk4LCAweGJlZGVjYWVlLAorCTB4YzE4ZjA0MjksIDB4M2U3NTc1N2QsIDB4NWVlYjM3ZTAsIDB4MjVhOTdlOWYsIDB4OGI5MDhlMzgsIDB4Zjk4MWJhNWEsCisJMHhmNTgxZmM4MywgMHhiODFhOGU1NCwgMHg3ZTdlZWI1ZSwgMHg3MWQwZDMzZSwgMHg3YjVmZGYwNCwgMHhiNDgyYjhhOCwKKwkweDJiZmJlMGQ1LCAweDU2MzVjN2VlLCAweDI1MjJmYTAyLCAweDlkMmM0NzA3LCAweGUxYmVmZDU3LCAweDA4OGQxZjZjLAorCTB4ZWFmYjQzNjQsIDB4MzE0ZGQ3NTgsIDB4OTMzMWRmYjQsIDB4ZGZhMGZlZjgsIDB4YTA5Y2UwYWIsIDB4MGM1MzFlMjcsCisJMHhmNWUwZGRlMCwgMHhkM2Y5ZTA4NywgMHg4ZjdmZDYxOCwgMHhlOTkxZWNkNSwgMHhkNjIzYjhmZSwgMHgzZGVkMGQxNSwKKwkweDAzZWVjNDY1LCAweGU1MDc3MzM5LCAweDg5NmZiMDI3LCAweDRkZjgwOGFmLCAweDAxNDdmMTNkLCAweDVkNThjNzljLAorCTB4YmY0MDMxZjEsIDB4YzkzNjY3NzIsIDB4ZjI1N2ZjYTIsIDB4NjNmN2MyZTcsIDB4ODRiOTUxMTEsIDB4ZmI3MWYzZjYsCisJMHg4NTc5OWY2ZiwgMHhjYWY4NWFiNiwgMHgwM2RmODViOSwgMHgyMjMxN2FmYSwgMHgxOGUyZTgwMywgMHg1MTNiOTdkNSwKKwkweDgzMDY1NmRmLCAweDk0NGJkZGJlLCAweGZjMzBiNmMxLCAweGNjMGJhNDU3LCAweDIwYmViMzNhLCAweDU1NjYzZjk4LAorCTB4N2E0NDJmOWYsIDB4NmZjMzBjNGQsIDB4ZTIxNGY5ZmQsIDB4MDlmZTg1ODksIDB4NjI3YmJmOWUsIDB4MWY1ZGY2MTQsCisJMHg1NmVhODIzMCwgMHg3ODgzM2U3ZiwgMHhlYjFmN2Y2OCwgMHg5ODViNzU0OCwgMHgzMGM1Mzc3MSwgMHhjODRkZGI3YSwKKwkweGY3ZTU3MGQ0LCAweDBmNzY3MWYxLCAweGIwMzBmYjY1LCAweDdmMDJmMjRkLCAweGUxYmY1ZWFjLCAweDA3ZTUzMmNmLAorCTB4M2VhY2ViZDUsIDB4ZTgzMTY5NGMsIDB4OGYzNmQ1NmYsIDB4YzdmMzQ3NGYsIDB4ZDExZjhjMGMsIDB4YzVjZGIzN2YsCisJMHhlYjQ3Yjk0MSwgMHgwZTAzYzdlOSwgMHg0YjIwZjQzYywgMHgyZTUyZTBmOSwgMHhiYzM1OTZiNywgMHgxM2Q4MjVmOSwKKwkweDNjYzRmNWFhLCAweGRjYjNmNjllLCAweDRhOTgzY2VjLCAweDJjYjMzZThiLCAweGJmYjYwMjhmLCAweDI1YjczYmYyLAorCTB4NWM0YTVjODAsIDB4MzJlY2NhZDAsIDB4ZjQwZDkyNjQsIDB4NDMzMWM5NWUsIDB4MzE3OTEwYmUsIDB4ZmE4ZjRiM2QsCisJMHhlMjlmZTIzMSwgMHhlNzE4OGJlYiwgMHg4MmY3YzA0YywgMHg4MGY1MDRjMSwgMHg3YTQ1YjcwNSwgMHhkMDdjMjEzZCwKKwkweGE1YTFlMWNjLCAweDdlYjg0ZjliLCAweDc2N2ZlZGE1LCAweGZlODExOTZjLCAweDczOWNhMjNhLCAweGRjMTYzZTgxLAorCTB4Y2ZjNTRlNzYsIDB4NTNmZjI1YmEsIDB4YWQ1ZDAyOGYsIDB4NjQ5ZmRhYjEsIDB4NDMzODY1ZGQsIDB4NjIzYmZlZTgsCisJMHhjNDNhZjNiYywgMHg2NzVlNGY1MywgMHhhMDRjZmFmNiwgMHg4N2M2NDBkZiwgMHgzMGVhY2Y2MCwgMHg5NDBhM2NkOSwKKwkweGEyY2YxMTFiLCAweDI5MWE5ZmRkLCAweGU2MGVjYmUzLCAweDM2MWU5ZTk3LCAweDE5NmJlODE5LCAweGRlMDMzN2IxLAorCTB4MTI0NGI1OTcsIDB4MDMzZjA4NGYsIDB4YzNlODE4MDUsIDB4M2Y2MDllN2QsIDB4M2NkZTNiNGIsIDB4YWRkY2ZjMGEsCisJMHgyYzlkMjNmNywgMHg4ZjEwNWIzNSwgMHg5YzdhZjNlZSwgMHg3NDMxNjkwNywgMHg4YTdiNDVmOSwgMHg4ZTUxMjNmYiwKKwkweDllN2Q2MGRiLCAweDlmNDdjNjdiLCAweDI2M2Y0OTFhLCAweDdlYjhlZmQyLCAweGZkZjBlZGQ3LCAweGUyMjhjOGExLAorCTB4NGI3OGZhMDAsIDB4ZjNhNzBlZjYsIDB4ODMyYjM1ZWYsIDB4ZWFiYzI4NjMsIDB4NDYwZTk0OGQsIDB4NzM0ZTM3NjMsCisJMHhkMjQzZmU4OCwgMHg3N2ZjNmFhYywgMHhjYzI1ZjViYywgMHg2NWQ5Yjk2NywgMHhjMmJlMzkwNCwgMHgzMmE3Y2Y0MSwKKwkweDY0NTdjOWUwLCAweGVmOGExNTFiLCAweDkxODVmMmYxLCAweDQ1ZWY4Zjk3LCAweDZjN2ZiZjdjLCAweDY2MWZmNGE0LAorCTB4ZTFjN2RkMWYsIDB4YTVlYTIzZGYsIDB4NzFmMjdkYjAsIDB4MGU3ZWE5MDYsIDB4NGE2ODZiZDIsIDB4OTQzYzdkZGIsCisJMHgzZTc5ZjNlNywgMHg2MDRiZDc5YiwgMHg5ZjdjMWRmOSwgMHhlYWNiOWM3YywgMHhjNWYxYzc2OSwgMHgzYjM2ZmUzMCwKKwkweGUwMTViMWQ2LCAweDhjZjlkYjQ1LCAweDIyZmIxNzQwLCAweDE2YjdhOGJjLCAweGZjMDc3ZTUyLCAweGVhM2E2ZDZkLAorCTB4ZWRhZjk0YWQsIDB4YzRkOTdhYzAsIDB4NGNmNThkMTcsIDB4MDM0ODU3MjgsIDB4Y2ZiMDdiZTUsIDB4Y2Y4NDE0OGIsCisJMHgyNzRhNTJhNiwgMHhkN2IwM2NiNCwgMHgwNGFlZGI2NCwgMHhhOWYwMmFmMSwgMHg4YzdiNjNjNSwgMHhjM2M5ZWZmNCwKKwkweGQ0M2U5MjUxLCAweDYxZTU0MjhlLCAweGEzYjMwYzdiLCAweGQyN2Y2MTE4LCAweDllOTkxODk5LCAweDg1ZjEwYzM2LAorCTB4M2U1ZjIyNzQsIDB4NjA4YzZlYmUsIDB4ZjRmYmEwNzgsIDB4N2JkNDE4YjUsIDB4ZmJhMTM5N2QsIDB4OTdjNzA0ZTUsCisJMHgwZjFmNjdlMCwgMHg4YWI1ZTM1MiwgMHg1ZTZkZTFlMywgMHg4ZDhjNTE2ZiwgMHgwMDdiNGZjOSwgMHgzMWM3ZGRmNywKKwkweDE2NWM3ZWFjLCAweDBmNDI0MzkzLCAweGNiODcwM2ZmLCAweGM4NTQ5YTRkLCAweGQ1NTMzMTk1LCAweDFjNGRjNWZhLAorCTB4NDRjNTM3OWYsIDB4MDg3ZWJjMDksIDB4ODhmMjE1ZjMsIDB4MzQ1ZjE3ZjIsIDB4NWUwYjBmZGQsIDB4MjE3ZjIxMzUsCisJMHhiMGQ5MDMxYiwgMHg2M2JkNjhmZiwgMHgyYzBhNmU1OCwgMHhlNDcyYTU4YSwgMHgxOGRmYWEyNiwgMHgyMmRkYjFmMywKKwkweDNjZWZkZjY4LCAweDg1ZDA0YTNmLCAweDNlOWM4MDk1LCAweDE4NTNkNjI1LCAweGU1NGY3ZTQwLCAweDI5NmJhZTFkLAorCTB4YmE0MzdjYTEsIDB4ZDAzN2ZlMzQsIDB4ZDY5NGM5M2EsIDB4ZDg1NjBjODcsIDB4MDNhNjRlZjksIDB4MjA4ZmVkMDIsCisJMHhlMTQ3ZjQwYSwgMHhiODUwZTdmZSwgMHhjNjNiYzc2YiwgMHgzMTlmZTBlOSwgMHg5NmYxMWU5MiwgMHg5ZjcwZjI0NywKKwkweDc1ODVmZmJkLCAweDljZjJlZDIxLCAweDUxZDFlY2NkLCAweGNlYjhmZmJlLCAweGU5ZmEwMTc1LCAweGQ0MmRmZGJhLAorCTB4N2QxOThmY2IsIDB4MzA5NmFkZDksIDB4NjNkZjQ2ZTUsIDB4ZjJjMTQ5MGYsIDB4M2Q5NzNmYzUsIDB4NzYyZmNhNDYsCisJMHhlNGZkNzY3NywgMHhhNWVlYmE2NiwgMHg4NjFkYjI5ZCwgMHg1ZmU3N2E1YywgMHg3YTAzMWRkZiwgMHgwZWMxYTc3NSwKKwkweGRmMmE0NmU3LCAweGJjYzNkNWVmLCAweDc5MWU5ODFiLCAweDgzYTZhNzRjLCAweDlmNTVkZmIzLCAweDE5NjJkMjczLAorCTB4ODNkZWE4YmUsIDB4M2JlMDljZmEsIDB4NGFkZjdlNDIsIDB4NWM4MTU3N2MsIDB4NDYxYzQ2NWYsIDB4NjZiNGZmNDgsCisJMHhlMTQyMGNkNSwgMHgwZWIyYzJiNywgMHg2YmU3ZDFmOSwgMHhiYzFlYTFhNywgMHg3Y2IwNzg5MiwgMHg0ZmUxOGI1OSwKKwkweDQ1NjFmMmExLCAweGVhYmYzYWFiLCAweDU2ZmU3NTYxLCAweDY3ZGYzYWFmLCAweDJmMGYyZTdmLCAweDMyYzdhN2RmLAorCTB4ZDk0YjNlM2EsIDB4YjAzZmUwM2UsIDB4M2QwNWU0YzEsIDB4OThhZjViNDgsIDB4M2NhNGNiZDcsIDB4MjRmODEzYjEsCisJMHg0NzYwZmI5NSwgMHg0OGUxMTc1OCwgMHg2ZWJlYmUwNCwgMHhjNWUyNjk2ZiwgMHhlN2Y1N2NlYywgMHgxMGRlMjFhZiwKKwkweDM3YTgyMzdkLCAweDZjNmYxMmU0LCAweDYzY2I3ZWZmLCAweGY0MjM4NDE1LCAweGUwNzFmMGFiLCAweDJjYjY3MWJjLAorCTB4YzYyNjNhZmMsIDB4MTA2NTNkMGEsIDB4OGJiZTI3ZjYsIDB4NDVlMzgyN2UsIDB4Y2ZlYTNjZTEsIDB4OGY5ODA3OWIsCisJMHg1ZDlmZGIwNSwgMHgxYjljN2UxOSwgMHhhOWIxYzZmYSwgMHg3ZGIwNjRlNCwgMHhmYzZiOTMxYywgMHhhM2U4MmQxYywKKwkweDdlMTI3Y2ZlLCAweDA3YTE3OTE3LCAweDMxYTVkYjA3LCAweGQ5YTQ4YWZkLCAweGY5MDY0NTRlLCAweDhiNjNiMDk0LAorCTB4MjI0MjcwZmQsIDB4M2JiNDY0ZTYsIDB4ZWJjZmNmZGQsIDB4NWZiMDVjZjYsIDB4MDgzZDAwOWYsIDB4NjUxNGUzZjYsCisJMHg3MTRlOWY5ZiwgMHg2NmM2ZjdkOSwgMHhmNzA2ODdlYiwgMHg5NDFkNzY4YiwgMHg0M2Y4Y2VhZSwgMHg1OGIyZWVmOCwKKwkweDZiOGUxYzZiLCAweDU3MTg3NjI3LCAweGRiYTJmYmQwLCAweGU4YmIwNjJiLCAweDY3NzhmZjdjLCAweDU0NmJhMjc5LAorCTB4MzBmNTNmMjgsIDB4ZTg1MTg5YmYsIDB4OWM5NTE2NWYsIDB4YmMzOTFhMjUsIDB4ZDQyZGZkYWMsIDB4OTViZWE4YmIsCisJMHhkM2U3NGMwZCwgMHhiZDIzYjdiZCwgMHgwNGNlMjRhZiwgMHhiZDllZjNhMCwgMHhmZjVjMzNjMywgMHhmMzE1ZmM4NiwKKwkweDYyNTllNTk5LCAweDliYTc5ODIwLCAweDJhYmZlZTk4LCAweDFkNTk5ZjNlLCAweDk5ZDNlZjRjLCAweGM3MWMwNjFkLAorCTB4MDI1YjE0NDEsIDB4N2NkOWE1MWUsIDB4ZDNkNGYzMjksIDB4ZjliZTg0ZmMsIDB4OTA4ZTkxODMsIDB4MTJmZTdjZjEsCisJMHg5ZGYwYTdiNCwgMHhkNGIyNTNjMCwgMHgzNmYzMDQ5NSwgMHhiYzc0YjhjMSwgMHg4MjRkZTIwOCwgMHg1ZGFjNjliNCwKKwkweGU0YTI3NDgxLCAweDMwNzliM2Q0LCAweDBkMjY0ZjNjLCAweDY3NWY1MDY5LCAweDlkNmNjYmY2LCAweGQwMDkwNjc0LAorCTB4OTg1ZTBmYmUsIDB4YzZmY2YyYjcsIDB4NTY4YmJkZDksIDB4MTU4Yjc3YzAsIDB4Y2Y5MTg4ZjksIDB4ZTUyYzQ3NjMsCisJMHgyZmU0NjY4NywgMHhjOWI3NTg2NiwgMHhmZDFjZmJlMiwgMHg5NGY1M2M2NCwgMHgzZDhmYjgyOSwgMHgzYmRhMDk0MywKKwkweDAyMzY5MTA2LCAweGU3MmM1YWUzLCAweDFiNThiMDNjLCAweDhmOTA0OWIxLCAweGUwZmFmNWIwLCAweDY2Y2U3MGZjLAorCTB4MjM0NmU4ZjEsIDB4MGIxOWRjOWYsIDB4Njc3YTUyN2MsIDB4ZjI4NWUwMjUsIDB4MTlmZjY2NjUsIDB4YzNlZjVjYTgsCisJMHg3M2UwYjc3MywgMHg0ZDdlN2MzMSwgMHgxMzI1Y2Y5YywgMHhlMjU4ODcwNiwgMHhiMDFlZjFjMCwgMHg0MDQxOWNhZSwKKwkweDQ5ZDY1OTg0LCAweGQ0NGI3ZWQwLCAweDI1ZWZmNDU0LCAweDc5NjllMDAwLCAweDhhYmQ1NGVjLCAweGQ1M2JjNTZmLAorCTB4ZWFiOWM0ZjksIDB4OWQ0YmIyN2MsIDB4M2Y5M2QzMzcsIDB4Y2Y5MjhiZTgsIDB4MTYyMTc0OTksIDB4YzAyMzU5Y2YsCisJMHhmY2UwNjJkZSwgMHhlYmNmOTlhMiwgMHgzZDc0YTQwOCwgMHhmZDNlNzFlZiwgMHhiYjEzZjU4ZCwgMHg4ZWVlYmNmYSwKKwkweGUzYjQxMjMxLCAweGQwY2Q5ODI1LCAweGRlNTdkNTNmLCAweGNhZmE2NThiLCAweDk3MjgxZTI3LCAweGYzY2ZjODAzLAorCTB4YzBmOWI2MjYsIDB4ODM3Y2QzYWUsIDB4N2U4YmJmNjQsIDB4MWIyYWI2NmYsIDB4M2Q1NDk0ZjQsIDB4Yzc2NjI0ZDMsCisJMHhmNTRhZGJkMSwgMHg4NjViN2NiNCwgMHhlNjg5YmVjZCwgMHgxZDdlYzFlYiwgMHhkNWI3ZjMwYiwgMHg0OWY2OGQzYywKKwkweDAyNDdhYjEzLCAweGRjOGZlMGNkLCAweDgzNjZjOWI2LCAweDgxZTU3MTdhLCAweDhiZDA0NmM5LCAweDc2ZGIxMDU3LAorCTB4YmZiZTg2MTIsIDB4Y2U4NmZiYTIsIDB4NTNjODA5ZjcsIDB4NWU5YzQ4YmMsIDB4ZjMyOTBmMjIsIDB4N2NiYzBkNzEsCisJMHhjNTlkZmMwNywgMHhlMThiMTNmMiwgMHg2NWZlY2E1YywgMHgzYTc1ZTQ3NSwgMHg5MGUwZWVjMCwgMHg3N2Q2MmU1MSwKKwkweGExNmViZGU0LCAweGNlY2Q2NWUzLCAweGIzYmMzYjQzLCAweDA5NzNmOTljLCAweDM0NjNmN2RmLCAweDkwNWM2YWZiLAorCTB4OGYzY2IxY2UsIDB4NzA3NTg3ZTcsIDB4ODk5YzZlYmIsIDB4NzQ2ZDZiZjksIDB4MzY2NjYyODgsIDB4OGM3MWZhYzAsCisJMHhmYzQ0ZWRmZSwgMHg1YWYyZmI2MywgMHhmZDA3ZmMxMiwgMHg0N2ZiMDc5NSwgMHg1ODI5MzQzZSwgMHg3NDY3ZGMxYywKKwkweGJkYjM3Y2E4LCAweDFiZDY5NmE5LCAweDg3ZWRmN2EzLCAweGE3OGUzYzdkLCAweGEzN2QzYzc5LCAweGJmOTQwNmY0LAorCTB4NjI4YjNhOWQsIDB4NmQ3ZGIxZDQsIDB4ODYxMzAyY2UsIDB4MTRiODA2NTMsIDB4MDRkMDdlZGIsIDB4N2M5MDRjZmQsCisJMHhiZDRjNjY5OCwgMHg1ZmE2MDliZiwgMHhkMTQ3ZWRjNSwgMHgwNmVmNDY0OSwgMHgxMmE2OGViYSwgMHg3N2I0Njc4YSwKKwkweGQ4MjBmOWZjLCAweDQ5MDdlNWE1LCAweDg4ZTllMDAxLCAweDA3MzljODQxLCAweDdhMTVkMzllLCAweDNhMWFmYjFjLAorCTB4ZmQ0MDZjOTgsIDB4MmE5MzJmZmMsIDB4ZDUwMTNiZjAsIDB4ZDJiYmNlOGMsIDB4YmUyMTE2YzYsIDB4NzU1ZjJjMGYsCisJMHhlMzZhM2YyOCwgMHhiMzM3ZTQ2NCwgMHg2YWJmMzJhNiwgMHg1N2IzNWNmZCwgMHgxMGNlNDA5MiwgMHhiYmQyNzdlNiwKKwkweGIxMGE2ZjMyLCAweGM0M2YwODk3LCAweDc3MzIwNmZiLCAweDQ0ZjM5ODU3LCAweDRmZDMxYzZkLCAweDNiMzA2NmFiLAorCTB4YTM0NmZkNmYsIDB4MWQ1MzdmY2EsIDB4MzM1ZWVjYzcsIDB4OGM4ZjI2ZTMsIDB4ZmNjNDc5NDMsIDB4NWM3MTc5YTcsCisJMHg0NjQxMWI2ZiwgMHhlMTBhOWYwMCwgMHhhZjUwNDUyMywgMHg4MWVkZjRhYiwgMHg5Y2JhOGNmOCwgMHg4ZTM5OTlmMywKKwkweGZkZWEwMzAyLCAweGJlMDhkZjljLCAweGY2YzQxY2VlLCAweGQyNDIzY2YzLCAweDkzNjdhZTgxLCAweDg3ZmZlNDA2LAorCTB4N2U0NTZmNGIsIDB4MThmMTEzNzMsIDB4OTUxZjZmMDAsIDB4MzEwMjc4YjEsIDB4ZDU1MzU5ZWYsIDB4YTcxY2QyN2EsCisJMHg1Y2YzN2YzYSwgMHhmMGM1MWVhZCwgMHhlNzlkYzYyMSwgMHgwOTU3OTc1MiwgMHg1YWFhNzgzZCwgMHhmZmYwNWUwZiwKKwkweGI5NDY4YWJlLCAweGRkNTRmODlhLCAweGU3ZTAyMTg1LCAweGMwMDBmNjYwLCAweGU4NzNmMzBiLCAweDFiZGM2ZTkxLAorCTB4YmViYzNmOTksIDB4Mzg4ZGVmM2QsIDB4MTI3NzY3ZDgsIDB4NDk3NmNmYmUsIDB4YjJmZmQxY2IsIDB4ODIxMTVhNGIsCisJMHhhZjVhZDRmZiwgMHhiODY0NzIwNCwgMHg5ODdkZDg1NSwgMHg3OTM0ZTRkZSwgMHhjM2RmODNmNywgMHg5MTEyODM1OSwKKwkweDQ5ZTNjZWJjLCAweDQ5M2M0MDBlLCAweGFkYmU5MDdlLCAweDU3MTY1NjY1LCAweDMwYjUxYzQxLCAweGE0NWIzNDlmLAorCTB4MTZmZWY0MWQsIDB4NjVkYTNlNWQsIDB4MmFhY2EyNWIsIDB4MGRhNmZhM2IsIDB4MTNkNDA1NGEsIDB4NDRjNTU4ZjYsCisJMHg2ZTljNmRmMiwgMHhkNzc3OWRjMiwgMHhiYWZlMzFjNSwgMHg3MTc2NjI1OSwgMHg5ZTMzM2NjZiwgMHg5Y2IzZTMyYiwKKwkweGJjNDEzZjJhLCAweDlkODI4ZTRjLCAweDIyOWM2NDcwLCAweDYzZmRhM2VhLCAweDVjOTVjMWIzLCAweDQ0YWY1MzQwLAorCTB4ZDIxNzExOTcsIDB4ZDExYjI2NWUsIDB4NGZlMWE4YWUsIDB4YjQ3NmIxZjEsIDB4Y2UwZmM3ZWIsIDB4OWNmZDNiNDEsCisJMHgyZmI0M2M4ZSwgMHhmZDg0NGIxMiwgMHhmZmQ4MjkyYSwgMHhmNGRiZDk5YywgMHhkZjUzYTcxMCwgMHhkY2JmNGRiMSwKKwkweDdiYmJhNDEyLCAweDhkNWNiOGUyLCAweGFmNDA5MTI0LCAweGU3YmE3NjdkLCAweDdiYTc2ODRjLCAweDVmZmNlNzVjLAorCTB4YTM1YWNiYTAsIDB4MjE3MWVkMGYsIDB4MDdkZjhhZjQsIDB4MzhhYjhiOTIsIDB4OWNjYTE4YmQsIDB4ZjlkMDU2ZjMsCisJMHhiNDZiYmNmNSwgMHgxZDE5ZjljMywgMHhlN2ZmYjQ2ZCwgMHg5ZGEzNDRmNywgMHg1MDQ1NWY1MSwgMHg2NTJjNmQzZSwKKwkweGVjMDdhNDdjLCAweDlmMWQ3NDVmLCAweGY5ZTM1NzQ1LCAweDhhZDRhMzYwLCAweDY2M2JhM2YyLCAweDZhZjFkMjMyLAorCTB4MDczYzAxY2IsIDB4NzRhNTZmNTcsIDB4NTY5ZjIyMTgsIDB4NmJlNzUwZWYsIDB4ZGY5ZTI3NDgsIDB4NDdlZTlmNmIsCisJMHgwNTE3YzhjZiwgMHg1NmVmNzYxZiwgMHhkNGMzMjNiNywgMHhjYjhmMzc3YywgMHg3ZGE3N2M4YiwgMHg3ZDRjMDU1NiwKKwkweDlkOGIzZGFlLCAweDg2NDFlOWMzLCAweDFkZThhM2FlLCAweDJlZWZiNzIzLCAweDAwOGE5ZGIwLCAweDc0OTRmYjU2LAorCTB4YzdhZGZkMzEsIDB4ZmI2NjVhN2EsIDB4MjI4M2M5OWYsIDB4NmU1NjhlM2UsIDB4ZWRiZDcxMTUsIDB4ZTBiZmNhM2EsCisJMHhiMGY0MmFmYywgMHgwN2YyYzIyMiwgMHg5MjcyMWQ3NCwgMHg0MmRmMzgyZSwgMHg3ZmU4NGVkZSwgMHg3YzA4NGU0MiwKKwkweDUyMTA5Njk1LCAweGE3NDNmNzQyLCAweGM5NDM0ZmUwLCAweGVkMzdjMDUwLCAweDA0ODlmNzFmLCAweGQ4MzE0MzkxLAorCTB4N2RjZTA3YmYsIDB4OTQ3OGY4ZTMsIDB4YjcyMDNjMWUsIDB4MTdiMzNhM2QsIDB4NmE1OWFiZTgsIDB4MDY2OTM5NDAsCisJMHg5YmE2OWYzZCwgMHg4M2NhMTcyNCwgMHgzMjNkYWE5NywgMHg2OTJjN2JjMCwgMHhkNjgzMzU5OCwgMHg4Y2VlNmYxYiwKKwkweDNhNTEzODA0LCAweDNmNGExMjM5LCAweGIxOTdjNDRkLCAweDExZDE1MjRiLCAweGJmNDU3Nzk2LCAweDg0OGU5NjFkLAorCTB4YzQ3ZGYzM2MsIDB4NzRlOTk4ZjQsIDB4MDU0ZmQwYzUsIDB4N2E2ODdlMzgsIDB4YzhlNzYyNDAsIDB4ZWIxZjk2MjksCisJMHhiYWRiZmRhMSwgMHg1MzI3NDg2OSwgMHhmMzBmNTc4OSwgMHhmMWE5YjBhYiwgMHg5ZDQ5MjUzZiwgMHhhM2Y0YTY5ZiwKKwkweDcwYzM4YzBmLCAweDFmNGU3ODcwLCAweDA4NzcyZWExLCAweGZjZDQ0NzdlLCAweDg1N2M5MzJlLCAweGMxZjkxODdhLAorCTB4NWQ4MGVmYzEsIDB4MTkzZDcyMjEsIDB4ZDUwZGZhMDEsIDB4NmExZjcxNDQsIDB4YjhlYmUwZTksIDB4ZjI2ZmRkNmYsCisJMHhiZjE4NWM3NSwgMHgxM2I3MGY0OSwgMHgyYmZjNGI1ZiwgMHhkM2ZhOTY5ZiwgMHhlYjFiZjc1OSwgMHg3YTEwYTRlNSwKKwkweDY1ZTJmYjE0LCAweDkwN2Y4YjAzLCAweGE5ZmU2NTVlLCAweGU1MTkzMzEyLCAweDY0MmFmYTAzLCAweDNmYjE0NTc2LAorCTB4OGNmYTA1YWUsIDB4MzE1ZGQyMDksIDB4Y2YxMTllZmYsIDB4MTkwODZjZTksIDB4YTEzNjc0MDIsIDB4NTMyN2MyM2QsCisJMHhmZWYxZTRiYywgMHhjYmJhMDVhZSwgMHhlMjIzZWEwZiwgMHhkMjU0ZDE1YywgMHhhNTMyYmU4ZiwgMHg3MDVmZDQyYywKKwkweGE0N2QwOWRmLCAweGQyNmI2YTQwLCAweGI5MWYwMjY3LCAweDFiZTYwOWE3LCAweGUzNDM0ZjQyLCAweDUxMmY4MDhiLAorCTB4ZGE3ZGMyN2EsIDB4Y2JhYWNlNGYsIDB4ZjAyNmY0MzUsIDB4NTJlNWY0MmUsIDB4MzY3NDgwZDIsIDB4ZWE2MGE3NWIsCisJMHhmMjg1NWNhYiwgMHg1YjMyZGNiNSwgMHhhY2RmZWQwZiwgMHgwOTM2ZjQ2MiwgMHhlYTBiMzFlOCwgMHhkY2E1ZTlhYiwKKwkweGU5NmJjZWFjLCAweDBiYTg4ZTkxLCAweDlmNGI1NzFkLCAweDEwZGJkMTAzLCAweDVmMjEzN2EwLCAweDZmNGQyZjYzLAorCTB4NzViZmUzZDMsIDB4N2YxZTliN2EsIDB4ZDJkMzdhMTEsIDB4YmI1ZmUwOTksIDB4YTBlNTZjMjIsIDB4NGI1N2Q3M2YsCisJMHhkZTBhMGYyOCwgMHhmOTA0ZDYxZCwgMHhhODk5NzVlMSwgMHhiNjhhZWY0ZiwgMHhkZjVkN2VhMywgMHgzYjBiY2FjMCwKKwkweGJkYzQzMjFkLCAweGU1ZTNhZDY0LCAweGM4NzJjZTk5LCAweGU1YTdhZmQ3LCAweDIzYTJlYmI0LCAweGQ4NjYyZTJjLAorCTB4ZWYzY2FjOWQsIDB4YWRkNzg2YWUsIDB4NTg3ODY3YTAsIDB4NmYzZjk3ZmIsIDB4Yjk2OGEzOTYsIDB4MmZiNzk5YjcsCisJMHg3Yzg3MmQ2ZCwgMHhmZjZiMGI3ZCwgMHg0NmE5ZjgxOSwgMHhiNzlhN2M0MywgMHg3ZDVmYmUwOSwgMHgxZDlkYTY2ZiwKKwkweDNlZmU5OWFiLCAweDk3NzdhZjkxLCAweGQ4ZWJkY2Y0LCAweDViYjU5NWFlLCAweDg4M2NkMDc1LCAweGU5OWZmOWUwLAorCTB4NzVmMWQ3ZTUsIDB4ZDZjYWRjNGUsIDB4ZmFlMjc3MTksIDB4OGJhNTBhYTksIDB4ZWEwZjAxMTUsIDB4YjU3NGE3NmYsCisJMHgwNmRmYzhjNSwgMHg0YTk3M2YzOCwgMHg0ZTkwNjlhZCwgMHg1MjE3ZWNhMSwgMHgyMmRlZDk4NywgMHhjYzdlNjUwZiwKKwkweDdiODg3NGVkLCAweDQ1ZmQ5OWUyLCAweGNlMjBmZmY4LCAweDlmNDQzMmEwLCAweGQ5OWUyN2I4LCAweDg0YmQ0NTYzLAorCTB4YTAwMThhMTgsIDB4YThhYzQ3ODcsIDB4YTRmZjBiNWYsIDB4ODEyMjIxZWYsIDB4NzIzNTg3YmMsIDB4YmZhYzI0M2QsCisJMHgwMzU2NGE3MiwgMHg4NjUzMTFlYSwgMHg1ZmE1M2YwOCwgMHg5YjhlOTRiZiwgMHhjOThiZTE3NywgMHgzZjQzZWNlMSwKKwkweGU2OWVlM2UyLCAweDdhN2QxMzcxLCAweDA3NTMzN2IyLCAweDg4MGJiMTc0LCAweGY0ODAwNTI0LCAweDdmNDFhZmRlLAorCTB4NDg3ZTA1ZGIsIDB4YTQzY2E0MjYsIDB4ZjJjYWYwMDQsIDB4YmQ3ZmUzNWIsIDB4ODUzYzY1YTksIDB4ZWY0MWFlYWYsCisJMHgyMTk2YTEwMSwgMHhjY2M5ZGM2MSwgMHgxYzFiZTI0ZSwgMHg1M2ZlN2ZkNSwgMHhjNDY3YzRmNCwgMHhmZjM2MjYzOCwKKwkweDFlNTQ0ZDk1LCAweDdlMzFkMTIzLCAweDhmZTM4NzM2LCAweGU5MGFiZjhjLCAweGQzYzczNjc3LCAweDJhN2YwNWNmLAorCTB4OWZjMDA1MjAsIDB4ZGRiYzcwZTYsIDB4MzQ3YWE2NjQsIDB4ODM1NmMzZjIsIDB4MTMzYzZmODYsIDB4Y2I2YTcyMGYsCisJMHhiYWJiZmE4MCwgMHhhYTU3YzM1YywgMHhiOTJiYjhmOSwgMHgwOTJiN2VkZSwgMHg0YTcyN2VhMCwgMHg3YTdhNjJmMiwKKwkweDZiZGJkMzBiLCAweGJmNTA0NzJjLCAweGU5ODQ3OWU5LCAweDhmYzRiNWVkLCAweGJlZDY4ZmZhLCAweDlkNTNiMzU5LAorCTB4ZTc1MzZiYWYsIDB4ZjlkNWRiZWIsIDB4OGUwZjFjOWUsIDB4YWVhNWIzZDMsIDB4ZDU4YWVjMTgsIDB4NzY4YmJmMGYsCisJMHg1ZmMxNmFlYywgMHg0MmZlNmFiYywgMHg1ZmM2NzExNSwgMHhlZDA2YmExZSwgMHg2Zjk4ZGY1MSwgMHg2ZjRmNGQzYywKKwkweGQwYjhhYWM1LCAweGZhOWMwMmRmLCAweGIyMmYzNWVjLCAweDYxMzcxNGY4LCAweGViMWU4Mjc2LCAweDRlNzBmOTg4LAorCTB4YTQ3OTFhMjUsIDB4OWM3OTI3ZTUsIDB4ODZmYjA4OWYsIDB4ODQ3OTJmZTAsIDB4OGU3YTIzYzksIDB4ODI0MWQ3N2QsCisJMHhkN2FiNWM3YywgMHhiZDczYzRmNSwgMHg4NGQzOWY5NywgMHhmYTA3OTNmZSwgMHgzNWQzZDAwZiwgMHg0MTY0NDgwZCwKKwkweGRiN2Y2NDM5LCAweDlmYzg4NzI0LCAweGMwNjY4NTc5LCAweGVlOTliZTczLCAweDZjOTc4MDY3LCAweDU0NTk3MWM5LAorCTB4Y2EwNWYwZjQsIDB4N2JjZjgxOTksIDB4YmQwZDcyZWEsIDB4MmRkNmYzODgsIDB4ODE2NjVlOWMsIDB4ZmY4ZTg1MjcsCisJMHhlNzgxYzk3YiwgMHgzMmI3YzNiYSwgMHg1OTYzOTk3YSwgMHhkMWZhZjQ4NywgMHhlMjJmNDY2YSwgMHhlN2U1NzdkYywKKwkweDRkZmM4NzNjLCAweDc0N2Q3OWNlLCAweDVlZjU0MTEyLCAweDE3NDkxZTlhLCAweDhmZTY3Y2U3LCAweDFkMTg5N2FmLAorCTB4Zjg3ZDU1ZDQsIDB4ODJjZmU4MTgsIDB4MjQ2ZTFjMmYsIDB4M2UxMGZhZjEsIDB4NjRjZDM0ZDEsIDB4OTM0YTNiMDYsCisJMHhhYTgzOWQ4MSwgMHhiYzVjN2ZhNiwgMHgzOGNmODQzNCwgMHgxMzEzNGEyMiwgMHg4OGVlNTk0MCwgMHg1ZDZjZmI0NywKKwkweDY2OWM3YWE0LCAweDdmYmJmM2E5LCAweDRmZDJmMzgwLCAweGQ0NGVkMTIzLCAweDk1NDEzMGZiLCAweDcwZWI3N2E0LAorCTB4NmIzZWRiOGMsIDB4MzE1MjdlNjAsIDB4NzcwNzU1OWYsIDB4N2VjM2YzZWUsIDB4MDhlYmZmNWMsIDB4MzU5Zjk1M2QsCisJMHg1YWM1Zjc5MiwgMHhlNGM0YjY1YSwgMHg2YTcxODZjYSwgMHhiMzIzM2U3NCwgMHg1ZmEyNzY2MywgMHhiMDNiOGM1NywKKwkweGYyODNkNjVkLCAweDkzMWFmOGQ1LCAweDEwNjkwMWMzLCAweGVmZDJlMWM2LCAweGI1ZmVhMWQ5LCAweDRmOGM4OWQxLAorCTB4MmFlYjExZGYsIDB4Y2EwZjg4NDgsIDB4YTQzZjYxNGIsIDB4YzZhNDk2NTIsIDB4YzEyNmZkMDQsIDB4Mzc2NjA2ZjgsCisJMHg1YzcxMGJmOSwgMHg2MzYxYmUzMiwgMHhiNjllN2Q4OCwgMHg1NjhmMWIwZiwgMHhmNWY4YzA5NiwgMHg2MWNlMjlmNywKKwkweDFkYTMwN2RlLCAweGQzOWYzMGU1LCAweDlhN2I4ZmRjLCAweDQ3NGVmZGZiLCAweGNjZTAzZjMxLCAweDc1MmNmYWJlLAorCTB4ZjczNGY0ZjEsIDB4NTE4ZTllMTMsIDB4YmQ0NDg3ZmIsIDB4OGVjYzA5YTUsIDB4NmNkMWIyNzIsIDB4YmYwN2E4ZGUsCisJMHgxYzZmMzEzYSwgMHgyMWVjNDk0NiwgMHg5M2M2MDM1MywgMHhlYTc4NjAyYywgMHg2ZGJkMTNkOSwgMHhhNWZmODg1MywKKwkweGZiZjRhMTJlLCAweGQ4N2Y5ZjMwLCAweGJhNDMzNzljLCAweDMxYjhmNWJjLCAweDIzZGYwZWQ0LCAweDBmNzdmM2IxLAorCTB4MDg5ZTk3YTcsIDB4ZWI3MThhOTYsIDB4MGZiZjJhMTIsIDB4ZTc5OWVjNzgsIDB4ZTVmNjNjNDcsIDB4MTNiYzhhYzcsCisJMHhjMDk5ZWZmYiwgMHhmZTVmNmJmOCwgMHhiODRmMmMzYiwgMHhmNWQ4NDNkZCwgMHg2OWY3ZjIwNywgMHhkMDU0N2JmZCwKKwkweDA0NDA3M2IwLCAweGZkNmJjZmIzLCAweDNmMDUwYmYzLCAweDA1ZjlmZWUzLCAweGVjMmQxZjljLCAweDQ1ODI3ZTYwLAorCTB4NGE5Y2QyNjYsIDB4MjQ3NzE3Y2IsIDB4OTQ2ZTczYjIsIDB4OWZlNTViMjcsIDB4NTE1ZTQ0ZjcsIDB4Y2JhMDg2M2MsCisJMHgzZWNlZjQ5ZSwgMHgyMTIzZjY3ZiwgMHhlZTNhZWNmZSwgMHhlYjEzYWNjZiwgMHhkZjVlYWRkYiwgMHhiYWRmMDkwMywKKwkweDg0ODFmYjNmLCAweDZkNmNmZTMwLCAweGEwOGJjM2RjLCAweGUyMGIwYzQ3LCAweGMxOGRhZDYxLCAweDJkYWU0MmFkLAorCTB4ZWY2ZjdiMDcsIDB4ZTg3MTgyNzIsIDB4ZDY1YWRmNmIsIDB4YjVlMGY2MDQsIDB4MmEwYjAwM2YsIDB4YTdkNDMxZjIsCisJMHgwNzljMzhlYiwgMHg1M2JjNTc1YSwgMHg5ZDk1MTQ0NywgMHg0MjUxMTA3ZCwgMHg4YWVjOWZlNiwgMHg0MzUxZTU1MSwKKwkweDRkMDM4OTBmLCAweGI1NTE0ZWFkLCAweGFhMTg2ZjRmLCAweGZkNjQzZmFhLCAweDRjZjJhYTM1LCAweDlmMmFiZTRmLAorCTB4YWFhZDcyZDUsIDB4NjVhZDU1ZmUsIDB4ODdmMGZjYWEsIDB4Y2ZkNTU3YWYsIDB4YTMwNzQzMjMsIDB4MGM5MGVjZmQsCisJMHhiNTcyMjFiNiwgMHgzZTU1NGFiNywgMHhhYTJkZTc3MiwgMHg4NjkxOWZmNiwgMHhiZDY5ZTNjZCwgMHg3OWZlNDJkZCwKKwkweDhhYTM5ZDFjLCAweDM5Y2U3MTgzLCAweGVkNTU0YjZkLCAweDYyYjZhNDliLCAweDlmNDZmMDFmLCAweGJkNjg5M2U0LAorCTB4Y2I1ZjFjMTUsIDB4NjJmZjk5M2IsIDB4NTU2YWZiNzQsIDB4ZDhhMzY3ZmYsIDB4NWZhZDE4M2QsIDB4YTMyZTc2OTYsCisJMHg5MTJlZDYxZSwgMHg3ZWZlYTQ0NywgMHhmYjhlZWFkYSwgMHhhOGVlMjE5YiwgMHhmMjk2YmZiZiwgMHgzNTZlZGE0ZCwKKwkweGZlODBiZjNkLCAweDhlNmZkNWE2LCAweDVkM2Y3MDI2LCAweDc0NjE0OTBhLCAweDBiMGJhNWFkLCAweDViYmQ3ZmVhLAorCTB4ZTYyN2I0NjUsIDB4YzY4N2VjOTEsIDB4YzQwY2JjMjMsIDB4NWZjN2Y0YWIsIDB4YWU3NjYxMmYsIDB4NzZhZGE3ZGUsCisJMHhmNTU5ZmY4OCwgMHg0N2E0MzJkNiwgMHgyZTlhOTI1MywgMHg1ZDM1MTQyMiwgMHhkMzUwOGU0NCwgMHhhNmFlZDU4NSwKKwkweDZhMjVjMTgzLCAweDNkYzJkMDNhLCAweDBiYTZhMWRhLCAweDQzZmZhN2UyLCAweDJhZTAyZGUwLCAweDU1M2IxZWUwLAorCTB4Nzg1YTM3NGQsIDB4ZGEwMDkzZTcsIDB4Yzk1ZWRkZDksIDB4ZmM2MTIzZWUsIDB4NzBkYmVkZTIsIDB4MWZkMjk3NWQsCisJMHhmODZhODlmNSwgMHgzNDcwMWMxNiwgMHgyYzZlMTA1OSwgMHg2MWU4NGNiZSwgMHg2OGZmYWUyNiwgMHhhZjQyMTNmZCwKKwkweDdhZTQ0Yjg5LCAweGY4NDdlZjE1LCAweDBmMjU5YTE3LCAweGZlN2Q1MWVhLCAweDg2NWYxMmMyLCAweGE3ZjQxMzJmLAorCTB4NDRlY2MyMDYsIDB4ZjBjNGE0Y2UsIDB4M2VmYzQ2NzYsIDB4YzA1MTlkOTAsIDB4MjYyMGY2NzUsIDB4MDM4ODZiMmYsCisJMHg4ODJiZTFlZCwgMHhjOWRkZjkwYiwgMHgzZWQxNWJjYSwgMHg2M2YyY2FiNCwgMHhhZDllYmJmNCwgMHgzNTUyN2E2MiwKKwkweGJmOWYyMmYxLCAweGFhMDJiOGUyLCAweGZiMTA5Mjg3LCAweDUyOGUxNmFiLCAweDAyYjNlNDg3LCAweDIwZjJlMWJmLAorCTB4NzkwODc0ODUsIDB4MTM3OGMyZTAsIDB4NjJlNjg2NGEsIDB4YWQ0NzFmOTUsIDB4MzBkZjgyZTcsIDB4YmQwOTdmODQsCisJMHhlMDI3OGM1NywgMHgxODlhZjgyOSwgMHhlNDFhNDRjZiwgMHgxYTE3ZDgyNCwgMHg2ODQ2NDczZSwgMHgzYjZhNDhmZCwKKwkweGUwZjNiMDhkLCAweDIyZmUyMTYwLCAweDQ0MjY1ZGFkLCAweGU5OTE2ZTBmLCAweGNjOTBmMjM4LCAweDU3ZjE0MjI2LAorCTB4ZGRhMDczNjAsIDB4Y2U3NDg4YWYsIDB4ZTYyNWVmODcsIDB4YzJiZDI2YjYsIDB4OTM1NzEzZWQsIDB4ODBjNGZiM2UsCisJMHhmZTEyZWFmMiwgMHhjOTFlNTllOCwgMHg3ZjY2NjhmZiwgMHg2YmYwYjQzZiwgMHhmODlmZTVkMywgMHg1ZTNjNmQwMywKKwkweDU1ZWYxMDUyLCAweDA3OGYwZjJmLCAweGE3NmZlYTdhLCAweDg1N2QxZmI0LCAweDAyZWIyM2Y2LCAweGMzZjZhMWIxLAorCTB4OTIwNmZiYmUsIDB4MTM3M2Q3MWYsIDB4NDI0ZGRjNzEsIDB4NjkzNzEwZjQsIDB4MTMzZjNjOWIsIDB4NGU1NGM0ZWMsCisJMHhlY2NhNDE0NiwgMHhhYjVkYTQ1OCwgMHg4ZWQxZWIwNywgMHgwMTJiYTNhYywgMHgyMTIxYWZiYSwgMHg2MGNjZGE3ZSwKKwkweGZlZTVlNjM5LCAweDc0MzcxMTc5LCAweDQyZTI3ZDI5LCAweDNmYzc4ZGEyLCAweGMyMjc3OGIwLCAweDVmMzhhMGY5LAorCTB4MTM5ZTc0MGUsIDB4Y2Y3MDE0NzEsIDB4MjIyMWZjMTYsIDB4OTEzOWE4NGUsIDB4NDk3MzgzOWYsIDB4Zjc0ZmY0MmUsCisJMHhiNDQ0YTZkYiwgMHgyOWZkZDAxZiwgMHhiZWM3ZWU4NSwgMHhlZjJjMjJiOCwgMHhlYjM1MWZiNywgMHhiMjE0NzExNywKKwkweDQyZWQxMGI1LCAweDdiZDc0MmNiLCAweDdhMTBmMDE5LCAweDNlYTg2ZmNiLCAweDEyMzRmNzgwLCAweDBkZDdhNjE1LAorCTB4MDM4MWY2M2EsIDB4NTUzYjBiOGEsIDB4NDZmNTllNzEsIDB4N2IwMTgwN2EsIDB4OGUzYzhiYzEsIDB4YWZhZDRkYWYsCisJMHhlM2M4OWIzZiwgMHhlNzM5Zjg5MywgMHgxODFhZjA1MiwgMHg0ZWVlM2MxZiwgMHhmNTMyZTNlMCwgMHgyNzc3MTEzMCwKKwkweDdmNDJmOGUwLCAweGMxNTFlZmI4LCAweGQ4YmNlZmI1LCAweGUxM2RmNzA3LCAweDcyZTAyZWUwLCAweDI5ZjNhOGFlLAorCTB4M2Q2Yzk3YzAsIDB4ZWVmMDAwOTIsIDB4ODNlZTcyODgsIDB4ZmQ0N2U5ZmEsIDB4NzA1ZDI0YTcsIDB4MTc3MjE1NWUsCisJMHhiNmY2Y2JjNiwgMHhjZjNmNzhjYiwgMHg1YmM1ODEzZCwgMHhjOGM4ZjdiOSwgMHg0YzNiYmExYSwgMHg2ZWFkMzdlOCwKKwkweGMyZjUxZDdmLCAweDY4Y2E0NmFlLCAweGE2NzYxZWE5LCAweGJmYTkwZTkxLCAweDAzNDBiZDg4LCAweDQ3Y2U4MWVmLAorCTB4NjgxZjNkNjIsIDB4NzVlMjJmZDYsIDB4N2Y3ZjNhZTgsIDB4M2VmYzM4MDksIDB4ZTQyYTFjMWMsIDB4OWVlMTgzNTEsCisJMHg5MTljNWY1NywgMHgxNTUxOTAzZSwgMHg3NWRhMWY0MiwgMHhiMGY0ZTY2YywgMHgwMTNjZWY1NiwgMHg0Y2VmMWRmZCwKKwkweDU1ZmQwY2RiLCAweDUzMDcxZGM4LCAweDI0ZWIzZTAwLCAweGQxMzU3ZmJjLCAweDI2Y2JlZWM0LCAweDI1NzRmYmYzLAorCTB4ZGMzYjA2ZmUsIDB4YjM0YTRlMzcsIDB4ZTFhOWZkZTAsIDB4ZTA5ZDkxZGYsIDB4ZGQ3OGZlMTcsIDB4NGY3MDMxNmQsCisJMHg1YzNmZjQ0YywgMHg0ZWZkZTFkMiwgMHhlNGZiOWU0MiwgMHg1N2YwNDI4ZSwgMHhhMjZmYjAyZSwgMHgxNjI2ODViOSwKKwkweGRkZjk5MTk3LCAweGU1MTY1ZjQ4LCAweDg5MWFhZjIzLCAweDYxYTNmNjE5LCAweDZiZGUwMzY4LCAweDY4Y2I0NDA5LAorCTB4Yzk5MzhjYjcsIDB4MzEzYmEwMjQsIDB4NTYxZjcxNmYsIDB4ZmFmYjg3N2MsIDB4N2M1MmVmNzAsIDB4MjgxNGQ4OWYsCisJMHgwZWQzNGI1OCwgMHhkZDYyMGY0ZSwgMHgwNTAzY2IxMywgMHhmYzIwOTYwZCwgMHgxNmE2NWM0NSwgMHgzYzM4NWIzZSwKKwkweDY2YzZmMWRjLCAweGNkYmIxN2QwLCAweDUyYzlmY2UyLCAweDlmMjNkMzYyLCAweGZiNjY2NzU5LCAweGUyNTVkOGU2LAorCTB4YzJiM2VkZmMsIDB4ZTExZGQ0YjksIDB4ZjYwNjNjMTgsIDB4NzkzMmZiZGYsIDB4YjE3ZjI2OTIsIDB4ZTM0NzA2MzksCisJMHhjN2Q0MTVmYSwgMHhiYjU4ZDlkNywgMHhiZjA3MWU2ZSwgMHg0NGIyYTNlZSwgMHg2ZjhlNWY4OCwgMHhhNjZmMWYwYSwKKwkweDVjNzNiMTI0LCAweDhiZWZmNzJkLCAweDFmN2FiNWVmLCAweDQyZDU4ZGM2LCAweGYwNDE3NmJjLCAweDZiYzY5NWZiLAorCTB4MDFmYzc4OGIsIDB4MjdhZDEwZTEsIDB4ZWY3OGQxZmEsIDB4N2FiMTc5ZGMsIDB4MGU0YmZjYWYsIDB4M2ViZWJlN2IsCisJMHgwZmUyMjc0OSwgMHhjZjRkZWZkMSwgMHgwYmUzNjE1YiwgMHhmOWQ4OTM0YiwgMHhlODA3MTgyYSwgMHg3ZGMzN2JjNywKKwkweDRhN2I4NWYxLCAweGNlNDVjOTEzLCAweDBlZjNlZWZiLCAweDg4OWZkYzU1LCAweDlmOWY3NzM3LCAweGZkN2U3MTg0LAorCTB4MjlmZGE1ZmEsIDB4ZTE1YzYwOTYsIDB4OTJkZmYwNDAsIDB4ODZlNWU2YzgsIDB4ZDA4MmJmNzgsIDB4ZGVmYjBhZWYsCisJMHg4ZjFjNGUzNywgMHhjMTQ3ZjNkZiwgMHhiYjQ1ZmQzZSwgMHg3ZmVhZjc4YywgMHg3NTM3NDg3MSwgMHhkNzc5OTg3YiwKKwkweDVkYjgzMTI3LCAweDdkYzdhZjEzLCAweDFjNDdkMjMzLCAweDJmOGNjMmRiLCAweDM1ZmI4OWVhLCAweDc2YWE5ZWUyLAorCTB4ZmNjYmJiN2UsIDB4MTBmZTYwOGIsIDB4YmM2ZTFjNDcsIDB4YzQ4ZTljYTUsIDB4MzBjNzc3YmMsIDB4OTlmN2I4N2MsCisJMHhlZDA1OWVmMCwgMHg3N2JkZTMxNywgMHhlMjU3ZjhjNywgMHhmMWE5YjBiZSwgMHhkN2I3M2I3YywgMHg5ZmRlYmVlYywKKwkweGE2YmNmNzgxLCAweDQwYzMzYjMxLCAweDcyOGRlMGY0LCAweGQ4ZjUwNGZkLCAweDRhNjU2OTliLCAweDA2ZmFjNTNmLAorCTB4ZmZiMjE2YzksIDB4NDEwZjQ1MmUsIDB4Nzg1NGViYjgsIDB4MjM3NzBmZWQsIDB4ZmJmNDU3ZTIsIDB4NGZiZTYxZjksCisJMHhlNzAyYzM4OSwgMHhiZTVjMjViNywgMHg4MzUxZDkyZCwgMHgxZjM4YWZmYSwgMHg4Y2IwZmU3ZCwgMHgxMzlmMTdmMSwKKwkweGJjZjkyN2U2LCAweGNmZjNjMjU1LCAweGViMjExNzUyLCAweGY5NWExZjI5LCAweDg4MzM0MTY0LCAweDg0NDkyNWI5LAorCTB4YmVjMzE3NWMsIDB4NDZlOTA5ZGYsIDB4Zjk3YzlmYjUsIDB4ODdlY2ZkYmQsIDB4YWVhZTU0MjQsIDB4NTcyODBkMjAsCisJMHhkZDU4ZmU1NiwgMHhmYmRjOWFhZSwgMHhiNDlmZDA2NywgMHhkY2UxZmJmZSwgMHhiMWQ2MjcyZSwgMHg0NzllODkzOSwKKwkweDI2MjllZjQwLCAweGQ2MWYyMGM1LCAweDMxODVmOTNlLCAweDFmNzgxOTRhLCAweDc3N2NhNjljLCAweGFmZjgxZTk4LAorCTB4NDZhZWQzMTksIDB4NDhiZmE2MWIsIDB4NDQ5NjNjNzIsIDB4YzkyN2I3ZjEsIDB4OWVkMjBkYjUsIDB4YmRmZjU5ZjcsCisJMHg3ZTRjYmRiNSwgMHhiOTQzOGQ2YywgMHgyZWZkNjRkNSwgMHgwODc5NzVmMiwgMHhjMGY3ZWJlMywgMHgxZTE0MDkzYiwKKwkweDk3ZDMxMzI2LCAweDcyMGQ3NDEyLCAweDVlMmRlYTE0LCAweGYxZTM4N2E0LCAweDYyNjZhYTZiLCAweDc0MDQ5ZWRlLAorCTB4MjljYmY3MWYsIDB4ZWZjZTMxNTMsIDB4ODAwZTkxOTcsIDB4NDc1MmE2ZjcsIDB4MzYyNWQ4MWUsIDB4OTk3YmIyNTUsCisJMHhiM2YzMTM2NiwgMHhmNjMxN2Y3YiwgMHgwYzgzNzAzNSwgMHgwY2JmYmI2YiwgMHg4ZWI2YzFjZSwgMHhmN2IwM2VmZCwKKwkweDdjZmVlOGI0LCAweDVhNTdlMjEwLCAweDhiZjE2M2FlLCAweGZlZmYzYTA5LCAweGUyZjE5MGQ0LCAweGUwNDliZDIzLAorCTB4NjkxZjhmODcsIDB4Mzg4ZjM4YzQsIDB4MjFhZjM0YjksIDB4Y2RjYTVlMjQsIDB4OWVkYmQxNzEsIDB4MWVjMjc2ODUsCisJMHhiNjFiYjA4MywgMHhhOGJkZTA0NSwgMHg4MTgzYTFkYSwgMHgxODQzNWM4ZiwgMHgxYmRjNDU5ZSwgMHhkZjU0MjFjYywKKwkweDg0NzBhMmVkLCAweGJmOTE0YmEwLCAweDE5ZjI0ZGE2LCAweDEyZmRmMGEyLCAweGRlZDRlM2Y0LCAweDBmOTg0YmU1LAorCTB4N2FlN2VhNzIsIDB4Zjk4OTgzZjQsIDB4NWM5YWJkYzUsIDB4MjEyZWZlMDYsIDB4MzY0YmU2OWYsIDB4ZmFlMzQ3NjYsCisJMHhmZTIyM2NmYywgMHg1Y2Q5N2YzMSwgMHhiOGYzMjc0ZSwgMHg5MjNmM2YxZSwgMHhiMTI5N2JjMSwgMHg1YmJiNDA2NywKKwkweDQ3NGEyNGNjLCAweGYyZmNkNGI3LCAweDY3NWMyMmI2LCAweGY0MWEyMThkLCAweDE5ZjdlMTA1LCAweDZmMDhjZjU4LAorCTB4NjUzZjcyZmYsIDB4YTU4ZGY3NjUsIDB4NzI3NDM2NDAsIDB4NjJlN2MyODYsIDB4ZjljMDMwZmIsIDB4ZGQ5YjNiYjIsCisJMHg4OGMzMjNiYiwgMHhlZThjZmMwMywgMHg4MWI3YzM3ZCwgMHg4ODM0YzI3ZCwgMHg3ZjI5YWZmOSwgMHhhM2U0OTczMiwKKwkweDczODY2ZDVlLCAweDQ0YWZhZGQ0LCAweDJmMjJmOGYwLCAweGM4ZWM0ZmJmLCAweGZhOWNmODgzLCAweDhjN2NiNGFhLAorCTB4YzAxYTM5MTMsIDB4MGRiYTM3NzcsIDB4YzdkYzBjZmUsIDB4NTQ0OGVmOTQsIDB4ZjJkYTBlMzYsIDB4Yjg3YTE5ZmQsCisJMHhmNTQyOTlhZiwgMHhkOTJmOWEzNSwgMHgwZmNiMmY3MiwgMHhkMWQ0YWZmNSwgMHg0ZjJkOTJmYywgMHhmZGQzZDBjZCwKKwkweDdmYzZiZWUxLCAweDViMzVmMjBhLCAweGJlN2NiMTc2LCAweGYzNGNhNTdmLCAweDY1NWU1YmNkLCAweDQ5NjBlMWY1LAorCTB4MmRjMWVjMDksIDB4Njg3ODY3MDcsIDB4YjlhMjY3ZmYsIDB4ZjFmYmI3YmMsIDB4ZTVmYmI1OWUsIDB4M2I1MGJhZTEsCisJMHhlMzMyNjM2YiwgMHg5ZGI4Njc1YiwgMHg1OTI2NGNmOCwgMHgxZWYwMDU1YywgMHhiMmZlYmUxMSwgMHg1YTBmMWQ2NCwKKwkweGFjNTRjNTY5LCAweDQ5MjdiNDU3LCAweGYzMjVkYmUxLCAweGY3ZTU2ZTcxLCAweDkyNDYyN2EzLCAweGI3ZTYwODk2LAorCTB4M2M1MTQ0ZjMsIDB4OGUxOGU4MWMsIDB4OTNhZmM3N2UsIDB4NmU5ZTk4NjIsIDB4MzhmYmUzZjMsIDB4NGYwMTFmYTIsCisJMHg3NzE4OWZkMSwgMHhlMDY3YzgzNSwgMHhhYzc4OWFjYiwgMHgzZjg2NjRlYywgMHgxYzQ2Y2UzYSwgMHhkZDgzOTg2NywKKwkweGNiNGFhZTJiLCAweGJjNTFmYzAzLCAweGY0ZGUzOWU5LCAweDhkYmJmY2VjLCAweDFiZjY4ZmNkLCAweGEwNzI4YjlkLAorCTB4MDdmOGVjMDAsIDB4MzNmNWEyYmUsIDB4ZDJkNmYzODMsIDB4OTMzMjQxNDksIDB4MzEzNmI3MmYsIDB4M2EyMDZiN2YsCisJMHg2MjY5ZTkwYiwgMHhhNTY3N2YyNCwgMHg2NjhlYmQ1MCwgMHhlNGM2ODcwZSwgMHg0NjZmN2U2OCwgMHhjMjUxMmJjMCwKKwkweDFjMzg5YTcxLCAweGNmNzhmY2QzLCAweDVkZDc0YWYyLCAweDc3NWExZmYxLCAweGYwMWNiZTA4LCAweGY2ODFjYTVlLAorCTB4ZjViM2I3YWIsIDB4Y2Q3YmYwYzQsIDB4ZDQxODhjZmUsIDB4ZjU1N2VlZjcsIDB4YTY4MzY2NzcsIDB4YjhjMTA5N2QsCisJMHgxNjRjNzczNiwgMHg4MjI3YmZiNiwgMHhkOTNiZjE5OCwgMHgzMzJlZDdkZSwgMHhhMGFkZTk5NywgMHgyYzc3OGFjZiwKKwkweDEyM2FlNzg4LCAweDdiZWM0N2VhLCAweGM1OGRhMmFmLCAweDM5ZDcwNjY3LCAweGQzYWY5MGEzLCAweDYzNjlkN2M2LAorCTB4ZThhYWY0ZWIsIDB4NjQwOTFjOTUsIDB4YTdmNmI2Y2MsIDB4ZjdmODNlZTMsIDB4OWYyYTM3ZjUsIDB4ZTdkYWE3ZjcsCisJMHg3ZDgzZmFlMSwgMHhkNjVlMTAzZCwgMHhkNmY5M2E3MywgMHhhOWU2MjJmMCwgMHg5YzFmNjc4MSwgMHhmMDEzZjMzNSwKKwkweGVkOGRmZDg0LCAweDUyZTlhOTQ2LCAweDU5MjZiM2NjLCAweGZiMzU5MzljLCAweDhlMWJmMzNiLCAweGQ1ZGFjYTU3LAorCTB4YjllMmNlZGQsIDB4ZWJhNmEyODksIDB4M2E5OWRkYmEsIDB4ZWQxMDJiODgsIDB4MTAyN2MxNmEsIDB4M2RmZmI0MWYsCisJMHg4OWVkY2M5YSwgMHg4MDZkMjQ2OSwgMHg5M2M3YzRmOCwgMHgwZGRhYzI4YiwgMHg5Y2Y2YmJmMSwgMHhlMmNkMTNkOCwKKwkweDhhZjZiNWQ1LCAweDI3N2I3ODllLCAweDljZjRhZmRjLCAweDhjMGFlZjYzLCAweGMwNmZkOGQzLCAweDI1OWNmNGNmLAorCTB4NWYyODJlZDgsIDB4OWM3M2Y5ZDQsIDB4M2ZiN2Y2M2YsIDB4N2U2MDMyMDUsIDB4ZTdiMmE2ODUsIDB4NDdkNTNiMTUsCisJMHg3ZTQzMWNiNiwgMHhlY2I4Mzg1ZCwgMHg3ZjlhNGNiNiwgMHhjODhmZjkzNSwgMHhjYjUzMGJjZiwgMHhmY2E0YzhiZSwKKwkweDlmYjI3ZjdjLCAweDdkOTY0N2U1LCAweDViZjIxNDMxLCAweDQ0ZmVhY2ZjLCAweGVmYzBmM2M3LCAweDYzM2ZjNzg5LAorCTB4YWY1MDcyNTIsIDB4NDE1OTJkNzgsIDB4M2FlNWM5YjgsIDB4MDI2NDc0MDIsIDB4YzdhZTg2MjUsIDB4ZTMwOWFhZjQsCisJMHgwNzVjMDRmNiwgMHhiYTRkMGI0YSwgMHg2ZmY3NzA4NiwgMHgwN2EzZWVkZiwgMHg4MTI5NTdlNiwgMHhmM2IwMTUzZiwKKwkweDVmODAzYjcxLCAweGY0MDNiMmFmLCAweGRmN2JiMTQ0LCAweDhlZmY3YjNkLCAweDQ4M2U1ZGY3LCAweDFlMDI3NTc2LAorCTB4MTZiYjIzZWEsIDB4NWRmY2QyNjUsIDB4MWZhMDlmOTEsIDB4M2RkMDcyNGYsIDB4YzUxNWY2MDEsIDB4ZjlkMDE2NDYsCisJMHg5YzliNWQ0YSwgMHhkNTkxM2ZhMCwgMHhlMTFlYjM3NiwgMHg3NDVlZWRjYSwgMHhmYzI4MTc4ZCwgMHhmM2Y3ZDk1ZSwKKwkweDYxYjJhNWVmLCAweGIxOGYzMDljLCAweGVmZDQwZjljLCAweGUwNmZmMmZiLCAweDYzM2ZhZGY3LCAweDdhZjk4M2IxLAorCTB4ZGI5NmM3NmMsIDB4ZGIxYWZmNDAsIDB4NGM5N2Y2ZjEsIDB4MzlmYmIzMGUsIDB4YzE2M2RlNjIsIDB4OTdiZjQ5YWUsCisJMHhmZTcwOWJiNCwgMHg1ZWFlM2I2MywgMHhmZGM3ZjUwMSwgMHhlODBiMjNiNiwgMHg1ZjMxYzI2NCwgMHg5ZTg1YjAxMywKKwkweGFhYTUyZmJkLCAweGNmOTBlNWVlLCAweDM5ZDcxYTJlLCAweGMwNGRkZmEwLCAweDU0YWE1M2UzLCAweGY0Nzg0NjBkLAorCTB4ODU3Yzc4MzIsIDB4ZjFkZDY3ZjEsIDB4NjhmZDliODcsIDB4N2ZkZjU0ZmMsIDB4ZmEzYWZhYTIsIDB4MjBjOTdiOTEsCisJMHhjNDMzZjgzYiwgMHhiZGFkN2E3ZCwgMHg1ZDI1NjhmNCwgMHgyMTNlZmQxZiwgMHhhMjEwNjc0MCwgMHg2ZjNjNGY0ZiwKKwkweDk4MjQ4Y2E2LCAweGFhZDEyNTJmLCAweDU5MzliOTdjLCAweDk2YzJiZjU1LCAweDkyOWYyYWE5LCAweDdjYWFiNTc0LAorCTB4Y2FhNzkyOWEsIDB4NTYzMTFmNGYsIDB4N2IwNmZmNTUsIDB4NjM3ZjJhYTksIDB4ZmQ1NTM0YzksIDB4MmFhNTQ3NGEsCisJMHg1MzZiZTc5ZiwgMHhkNDM4MmZkNSwgMHg0MjNmMmVhZSwgMHhmZTQzYzA2NCwgMHg5MGViZmI1MSwgMHhhMDc0OWQxNiwKKwkweDc0ZjhiNWQ5LCAweDhlOTBlYmMzLCAweDg3MDMwYmZkLCAweGVkN2M1ZWQ2LCAweGUxZDdiNmY5LCAweDZiMTdiMGJiLAorCTB4ZmIwOTMzZWYsIDB4YzViMmNkZjEsIDB4Mjc2ZjBjNmIsIDB4MDU2N2QyNGUsIDB4NzU5MDFmZGYsIDB4MThkMzNlZWMsCisJMHg5NGVhZWJhYiwgMHhhNjdkZTBhMiwgMHhhNjJmNjA4OSwgMHg3YzU4YTg0OCwgMHgwMGUzNDdlZSwgMHgzZDk4MGI0ZiwKKwkweDA2MjAyOGVkLCAweDY4YWRiZWUzLCAweDY4NmEzYzg3LCAweDJjMGZlNjc4LCAweGY4MWQyMDBlLCAweDVjYzA4NGRlLAorCTB4OWUyN2JhZDUsIDB4NWRkNmE5NzcsIDB4ZTBkNTZlNGEsIDB4NWYyYThkNjksIDB4NTU1ZGJiNjEsIDB4MDZkMjRhN2YsCisJMHhlNTM0Zjk1NSwgMHhkZDNjMWEwNywgMHg2MGRmY2FhZiwgMHhkM2MxYTJkZiwgMHg3ZTllMGQzNiwgMHhmNDE3MmFhZSwKKwkweDVhZWRjMWRkLCAweDQ1MWVjMGZiLCAweGNlZmVmMWQzLCAweDc1YzNjMDcyLCAweDhmODgwM2E3LCAweDcyZDZjZTkyLAorCTB4NDdiNWQzYzAsIDB4ODU1ZjEwZGIsIDB4YjAzOTY3M2UsIDB4MGQ0M2UyY2IsIDB4YTNlYTQzYWYsIDB4Zjc2ODMxZTcsCisJMHhhNjEyNjM1YSwgMHhiNDE1MWEwNywgMHgxYzZjMWQ2YiwgMHg0NmExZTk4MSwgMHg3NWZmN2UzYiwgMHhlZmE2MDk2MywKKwkweDdkMzAzYTM0LCAweGE2MmE3MWFmLCAweDRjNGU4ZDlkLCAweGIwZGIxYWRiLCAweGVkOGQ3M2ZlLCAweGRiMTYyZWNjLAorCTB4M2E0NWRlZjcsIDB4NzViYTA3ZDgsIDB4ODI3ODM3N2UsIDB4Nzc5MjNmMTcsIDB4ZWVjYmYwMDMsIDB4Yzg2ZWZlNDEsCisJMHgzN2VjNDVkZiwgMHgyNWY5YTI0YywgMHhiZWU4NDRjMCwgMHgzNzRmMjlmYywgMHg4MDAyM2FhNCwgMHhjYTFjMzc1NywKKwkweDE4ZjE4MjhhLCAweDFlNDczYTZkLCAweGE0NzdlMWU4LCAweDNlYTFmODRjLCAweDM3YmI5MDlkLCAweGQxNmM5MzM4LAorCTB4NzlhNjZmMmMsIDB4YjNjNjM2NDQsIDB4ODNhMWY4NGQsIDB4MjAzM2Q3MTIsIDB4MzNhOWQwNGEsIDB4ZjdjODA2ZTEsCisJMHg3NzcyYjA0NCwgMHg0MDFiODRjYSwgMHhmZWM2ZmYwZiwgMHhmZjNmNDc3MywgMHg2MTI5MWRmOSwgMHg5Y2NmZTdmYywKKwkweGQ3NjBhYzU2LCAweDcwZDVmYzM5LCAweDMwZTNjMDJiLCAweDQ4Mzk2ZmI3LCAweDRkMDk2MTllLCAweDA2NzlmNTRiLAorCTB4MDc0N2IzOTAsIDB4ODBmMGI3YjgsIDB4ZTAwOWI0YWUsIDB4Y2ZiM2E2ZDAsIDB4ZWJlZjc4YzEsIDB4YjdlODA0MGQsCisJMHg1ZmU3NjI0YSwgMHhjYTk1Y2Y1MSwgMHgwZGNmNDFlNCwgMHgxZDRmM2MyNiwgMHg2MDU2MzlkMSwgMHg3ODE0OTk1YywKKwkweDNkYmNlMDBjLCAweGRlZTExMmE1LCAweDAwNjQwZDYzLCAweDRlMjliY2ZjLCAweDNjMGY4Zjk2LCAweGYyNDNkOTI2LAorCTB4MDc5ZjA2MDYsIDB4YjZmYzZlNTIsIDB4Mzg1OGYzZTEsIDB4NjI5MTNjZjgsIDB4Y2ZiNmZhNjMsIDB4ODA3YTBlOTEsCisJMHg3NGE5MWZjOCwgMHgzZTdlYzFkNCwgMHgwYWI4ZWE1MiwgMHg0ZDM4Y2ZlZiwgMHhhZDNhZmY2YywgMHgzZWQwYWJkZSwKKwkweDEzOWEyOGU0LCAweDkyMTllNzYyLCAweGQxZjc2MDZhLCAweGQ4MjI2MmUxLCAweDcxOTE2ZjNiLCAweDM5ZTE2YjlmLAorCTB4N2JlOTk1MjEsIDB4Y2U3MDI3NDgsIDB4ZTc4OTE3OWMsIDB4ZjYzYTIzODIsIDB4ZmViNjgxOWUsIDB4YjNkNzBlMDIsCisJMHhlM2RiYzI4MywgMHhiZDMyYTYxNiwgMHhkZDU2NmNhMiwgMHhmZWQwMmYzMywgMHg2MDQ1ZDY3YSwgMHhlMWNlM2RkNywKKwkweDM0ZjU4ZmE4LCAweDM0MmFlODUwLCAweDhlNzBkZDNkLCAweDFjZWM5Yjk1LCAweDlkYmZlODI0LCAweGYyZDE3ZjBmLAorCTB4ZmI2ZTNhNjcsIDB4ZmQ2OGVmZWIsIDB4ZGE0NWQ2NGYsIDB4YWVkODg2NTEsIDB4YzJkZGY4NDEsIDB4MzU4YzJmMmIsCisJMHhiMGI0ZmVhMywgMHhlNDBjYmQyYSwgMHgwN2VlN2NlMiwgMHgyN2Q1NjQ1YywgMHgxZjUwM2JhMCwgMHgxNzI3ODQ2ZCwKKwkweDlhZjI1Yjk3LCAweGNhYzkwNDI5LCAweDNjMjM0YWI4LCAweGI2OWQ1NTI1LCAweGQ1ZDIxOWE2LCAweGMyMzdlZWMzLAorCTB4YTNiNTI5MTMsIDB4MWE4MzM1NzYsIDB4NzBiNzQ3NWIsIDB4ZmYzZmYyMTEsIDB4NWU3NDhkYmIsIDB4MGFjYmQ3OGIsCisJMHhmYjg5Y2YzYiwgMHgxNDU3MzVhZSwgMHhmN2U4MjJjZiwgMHhhMjNiOGYwOCwgMHhlYWYzYzA0MCwgMHhkMTZmMGUyMiwKKwkweGQ3ODcxMTZlLCAweDNmYWUxNDg5LCAweDBiOWM5MGU2LCAweDY3ZDYzZjZhLCAweDBiNWRlZjQwLCAweGMwMWVjZGRmLAorCTB4ZTcyZWEwY2YsIDB4NDYwN2UzZmEsIDB4ZmRmNmFlMzYsIDB4ZTJlZTMxMTIsIDB4M2FmZTc2NTQsIDB4MDk5NGE0NjIsCisJMHg0YzJkZTRmYSwgMHhmZGNlZTQwZSwgMHhiYTIyYWVlMiwgMHg5YjBlZGNmZSwgMHgxNjE1ZTMwZSwgMHg3ODAwYmRkNywKKwkweDc4ZTc2ZGU4LCAweGQ4NzY5MDM0LCAweDRiM2NiMzRmLCAweDIyMWRmOTNlLCAweDhmNzU0ZTI2LCAweGQyZjI1MmY3LAorCTB4MGYyYjY5ZGUsIDB4N2U4NTk3OTUsIDB4YmNhODc5NjcsIDB4OTZiNDA5MmMsIDB4ZjIxNDVjODMsIDB4N2Q0ZmY4NTEsCisJMHgyZjljZDU4ZCwgMHgzZDNmMjAzNywgMHhmMzFlYjhkMCwgMHg5ODNkMWIwNywgMHhlMTZjNmExZSwgMHhjYjE1Yjk3YywKKwkweDk4N2M2OWRmLCAweGU3MmY2NWYzLCAweDdiZjEzYmNiLCAweDRjNWNlMzQ3LCAweDU4YmEzNWY3LCAweDk1MTljYTNlLAorCTB4ZWNjNGZiMGEsIDB4MzdjNGY4YzIsIDB4ZjgwODk4YjYsIDB4NGMzYjdhZTcsIDB4Nzc0MTlmMTgsIDB4YzY4ZjYzYzQsCisJMHgwOTkxZmM0MSwgMHhlMzZhNzFlZiwgMHhiZTdjYjQ5MCwgMHhmNzc2MWU4ZiwgMHgwNTI1Mzc3YiwgMHgxZjhiZTljNiwKKwkweGM4NzE3ZDAyLCAweDk4NzRmNGMwLCAweDRiZTA1NjI4LCAweGU0ZmU4ZmY5LCAweDBmYWZkMDA2LCAweGY0MTU4YTJiLAorCTB4Y2RkNDgyZTksIDB4YWM1MGVmMmMsIDB4N2MyZjlhMDYsIDB4OGE1ZGU3OTQsIDB4MjJhYzA0ZDUsIDB4NWJlNDIxZjUsCisJMHgzNThhM2Q4NywgMHgxZjhiZTY4MiwgMHg3Yjk1ODg3ZCwgMHhjN2YzM2EwOSwgMHgwNmY1YmEzZCwgMHgyMjU5ZjAwZiwKKwkweDUxZmQ4MDFkLCAweDQ0OWNjZTZlLCAweGQ3OTUwNWM1LCAweDVmNjAwN2E1LCAweDMyNWE0OTRjLCAweGNlYzVmNjA5LAorCTB4NjNlOTA1MTQsIDB4MDBlMWIyOWEsIDB4ZDg4ZmE3ZTQsIDB4ZmFhYjg3YTYsIDB4NDZkZTRiMGUsIDB4NTcxNjU3NjgsCisJMHg5Mzc2ODdhOSwgMHg4NDZjZDZkMiwgMHhkZDg3OTM3NiwgMHgzNzZkMGZhZiwgMHg4ZGFlZDQ3NSwgMHhkZjYxOWY5MCwKKwkweDc0ZmQwN2E2LCAweGY4YjFmMDI3LCAweDJmMjIzZjYwLCAweDE2OWYwNWNhLCAweDNiYTM3MjcxLCAweDcyMGYyODljLAorCTB4MGYyODlkZGIsIDB4NjZjYTVjMDQsIDB4ZjYwZGRlNTcsIDB4Yzk3NmZhY2YsIDB4NjYzY2MxMjYsIDB4MGE0MTdkNGIsCisJMHg4NmU4OTMxMCwgMHhiZjI5NDlmNywgMHg5N2Y1M2ViZSwgMHg1ZGI0MGRkNiwgMHhjNWFmZTQzZCwgMHg3YzM3MGZmYywKKwkweGE2ZmJmY2JiLCAweGZiZmMzMGQ0LCAweDQxZGZiZTQzLCAweGZiZGM0M2RlLCAweDBlZjY0Njg3LCAweDJlMWMzM2NjLAorCTB4YWM0YjFkZjUsIDB4NzEyYThlZjgsIDB4N2FjZjQxNTksIDB4OTdmM2NiOWUsIDB4OWZlNWE1MjAsIDB4N2Y4YmI0ZjEsCisJMHg3MGU3NDA3ZiwgMHg1MmFiMzhjMSwgMHgzZmIyMWZiOSwgMHg2NTQ5YTg3ZiwgMHg4ZjczNWZmYiwgMHhjZTcyODA2NCwKKwkweDZkNTJlYTFmLCAweGVhM2NmN2FhLCAweDc2YmZiYjA4LCAweDZkM2IzOGE5LCAweGVlMzZiODljLCAweDNiNjkzNTY0LAorCTB4MWZlY2M4ZTgsIDB4ZjcwYjUyNmYsIDB4YzdmYWIyZGMsIDB4NmE3ODhiN2YsIDB4ZGY3ODFjNmQsIDB4ZTMxMDZhYjksCisJMHhkNzgxNzNhNywgMHg0OTZlYmE1MCwgMHhkZTRmOTAxZCwgMHhkYzM4MDk3YiwgMHhmZDBlMGUxYiwgMHg5YzU4NDNkNiwKKwkweDI0MzhiZjdiLCAweDVkYWVlZjFlLCAweGIzYzU3MTE3LCAweGZjNzk4ZDc3LCAweDgyN2Q3NmJiLCAweGFmYWZmYTJlLAorCTB4Y2Y1ZmMxOTUsIDB4YmJmNTRmZTAsIDB4MTU3ZTYwYzcsIDB4ZWMwNGFkOGIsIDB4ZTdmY2ExNTYsIDB4M2ZlMTE3NzcsCisJMHg2ZGY2N2U1YSwgMHgxNzliYzlmMSwgMHg2NWJiZTFkNywgMHhmM2Q4Zjg2MSwgMHhiODk4ZjhlMSwgMHg4NTRkYWZjZiwKKwkweGYzZjcwYTllLCAweGRlMTIxZTIwLCAweDdlNzM4MjM5LCAweDFmNmJhMjY1LCAweDE2NTNkM2Y0LCAweGNlMGU5YmY4LAorCTB4ZGRlYzcxYTEsIDB4YWVkMTgzZjAsIDB4MzI1ZGYwZmQsIDB4MTEwNmI4YjIsIDB4ZTc1YTdjOTcsIDB4NmRlODE1ZjksCisJMHgxOWZhM2RlZiwgMHgxMDZlYjNmMiwgMHhiYzhmNzQxNiwgMHg5N2EwZjM0MSwgMHg3Y2U2YzNmZCwgMHg0NjQ3ZTAxMywKKwkweGVmYTE4ZGY4LCAweDdmMTQwZjhmLCAweGZmMmUxYmZiLCAweGRmNmNhN2ZhLCAweDllZDQzODg5LCAweGEwNjY1ZjZkLAorCTB4ZmIxMmVlZmQsIDB4NTQ3ODIwNjIsIDB4NzBmZGUzYzgsIDB4MjRiN2E0M2YsIDB4OTc2N2U1MTIsIDB4ZGVmMDdjNDQsCisJMHgwMjY5NTc3MSwgMHhlOTVkMmRlYSwgMHhkZmE0M2Q0NiwgMHgyYmI4YjlmNiwgMHhkN2ZiMWIzZCwgMHg5MmJiOGY5ZSwKKwkweGRjNmNjYzRiLCAweDdkMjE1M2M5LCAweDIxNTRmOTJmLCAweGYwZGZiZGM4LCAweGEzNzZjYmY4LCAweGIwM2RlMGE3LAorCTB4NDA4ZDhmMGYsIDB4OTI4ZGZlZmYsIDB4YTBlMDEwYmYsIDB4YmQ3NzU3M2QsIDB4Yzk0Y2EwYjUsIDB4YTZiZTdmZWQsCisJMHhlYjA0OWJlYiwgMHhiYmFlM2RhYiwgMHhlOTVkYmUxYiwgMHhmZDc2YmI3OSwgMHhiOWM0MDhkZiwgMHgxNWZmNWI4ZiwKKwkweGFlZWZmNzgxLCAweDE5ZGRmY2ZjLCAweDVlODBhYjkzLCAweDEyMDI2YWUxLCAweGY1NDVkMzE5LCAweDU0YmY5YTA5LAorCTB4ODkzOWQ2ZmMsIDB4NDMzM2QzOWUsIDB4NmYyNWU1Y2UsIDB4OWUyZTM4YjMsIDB4ZmRlN2NmNmEsIDB4ZWQ1YzA5ZGUsCisJMHg5NjBkYzc1MSwgMHg1ZTMwOGFmYSwgMHhlMTQ3ZjY0NSwgMHg3YjFkNjBiZCwgMHg3M2M0NDM2ZiwgMHhmM2NmYzliZCwKKwkweDI0M2ViY2Y0LCAweDlkNzBlZDBkLCAweGZhZjNhYTE5LCAweGZhMmQxZjFkLCAweDA4ODFmMjFlLCAweGE2NzhlZjhjLAorCTB4Y2MzYzQ0ZmQsIDB4ZjE5ZDhmZjUsIDB4MDk0NTc5M2YsIDB4ZWRiZDc3ZDIsIDB4OWRmNDI0NmYsIDB4YmRmNWRhYzAsCisJMHg4NmQ3N2NhYSwgMHg3MDU2ZmJlMCwgMHg1ZmY2YWIxZiwgMHgyYTI1Y2EzMiwgMHg0ZjEwNWFjNywgMHhkYWUzMzVlNCwKKwkweGRhNGFmOTEwLCAweGVmMDdkY2ZlLCAweDU1ZGY5NGQxLCAweGJlNTBjMDAyLCAweGQwNzRjZjM2LCAweDNjZmM5NTc2LAorCTB4OGRlNDQ4NDQsIDB4OTJhZWRhMGUsIDB4Njc4OTFmOWYsIDB4ZTc4ZjJiMjUsIDB4YjA5ZjNkZjUsIDB4ZmYyOGJhN2MsCisJMHg3ZmFjNGNlMywgMHgxYzZmZTg5NSwgMHg3OTE2NGYyYiwgMHgyMmQ1ZGZkZSwgMHg5NjIzNzg5ZiwgMHgyNWY2OGE2NywKKwkweGM2MjM5ZjJjLCAweGFkZWQ2NGFmLCAweGFkZTRmZWFjLCAweDdhMDk5Y2ZmLCAweDMzZjdlMDhkLCAweGUwOWNiOGQyLAorCTB4ZmU1MTUyZWYsIDB4YmEyYjRjZWYsIDB4YmE4ZWJjNjgsIDB4ZjEwN2NiOWMsIDB4MWRjNTU1MGUsIDB4ODVkZjIyZDMsCisJMHg2MTI2ZGM3ZCwgMHg5ZGVkNjFlYywgMHg5ZmU3YjQwNiwgMHgwZGNiNjk4ZCwgMHhlMjJmMmZiZCwgMHg1NmU1OWM3YSwKKwkweDdiYWFmMzhjLCAweDk5NzZmODcxLCAweDFlODEzYmM3LCAweGU5ZmI5Y2IzLCAweGZhMGI2NDJiLCAweDY1ZWY3YTYxLAorCTB4M2QyMDdlN2MsIDB4OTdmYWU1NzAsIDB4NTdlY2Y4NTUsIDB4NDZkM2RmY2UsIDB4ZWYxZDI1NDcsIDB4ZjExMzBmZGMsCisJMHhkNjE5MDI3ZSwgMHhlZTAyZjE4OSwgMHgyN2M0NDkzNCwgMHgxMTZhYmRlMCwgMHg0NTk3MTc1NywgMHg4ZTdlNzAxYywKKwkweGJkODIyOTdiLCAweDEzYjI3YWE3LCAweDk3Y2FlZmY5LCAweDZlYmI3ZDk4LCAweGVmMjhlYmNiLCAweGRhMGFjYTk2LAorCTB4ZWExZWJlOTcsIDB4ZTlmMDA3NWEsIDB4MmY3N2IyYjYsIDB4ODdkZmFlNTcsIDB4YzUzMWY0ZmIsIDB4ODE2MGZkYzYsCisJMHhiY2YwYTE1MSwgMHgzZGZjM2ZiMywgMHg4NTE3ZjE2OSwgMHgzZmZjYmFiZiwgMHg1ZGFkN2YwYywgMHg1ZmQ3ZGM1ZCwKKwkweDdmZjE4NTdkLCAweDA3ZTY1NmRkLCAweGZkM2M3M2I2LCAweDczMTRhNzQ5LCAweGYwMDIzZDc4LCAweDMzYTJiNzNhLAorCTB4MjA4NjVhM2IsIDB4Nzc4YzRlZWUsIDB4MjlkZjkwYWIsIDB4NmY1NmYzODIsIDB4ZGUwMDk1ODMsIDB4ZGNjZWE1YmIsCisJMHg1ZmUwYzMwZiwgMHg5ZjM4YWU3YiwgMHg2OTcxNTQ0MSwgMHhmN2MzZmIzYiwgMHhmN2QwNGJlOSwgMHhmYTRkZmZkMywKKwkweDhkZmJkNDRlLCAweDFmMWJmMDc2LCAweDE1ZTVlZjY1LCAweDE4YzlmZTc3LCAweDRlZjQxZjFhLCAweDBmMDczYjFhLAorCTB4MzE3ZTY3NmUsIDB4MmMxNzE3MTEsIDB4NzEzYzMyYjcsIDB4ZDU1ZDUzZmYsIDB4ZmZjMWUzM2IsIDB4YzRjM2Y2MjQsCisJMHhmZTA2ZDI0OCwgMHg3NmQ3NGEwNCwgMHhhMDc2ZDc0ZSwgMHg0MWJmNDE2YiwgMHgxNzZkMTQzZiwgMHhmYTQxYmUwNiwKKwkweDkxMmUyYzI1LCAweGZkYjdlOWMzLCAweDI1ZTFmYWUxLCAweDdmZTFmYWUwLCAweGE5YmJhZTEzLCAweGRiZmU4YzNlLAorCTB4NGVkMDIyMTcsIDB4M2ZmMzg1YTMsIDB4YmMwNTVjMzgsIDB4MGUyZmQzMjMsIDB4ZmZmNGM4ZTcsIDB4ZDMyMzljMGMsCisJMHg0MzlkOTUxNSwgMHhmOTIwN2JjMCwgMHg5ODhmYzVhNCwgMHg1YTdkOTg3NywgMHhlOWY2NGRmNCwgMHg0ZjljMTkyMywKKwkweDhmMThmZGU5LCAweDRjN2JjNWFiLCAweDI3YmMzZjdhLCAweGVmMWM1ZmE0LCAweDMwZmZmMmVhLCAweGQzNzBiNWRlLAorCTB4OWZkY2I1YTYsIDB4OTg1ZWZkYWIsIDB4ZmJiZjIwM2UsIDB4N2ZmOGUwNTYsIDB4YjBiMDRmY2QsIDB4N2NhYWJmNjEsCisJMHg1NGI3ZmFmMSwgMHhlZjNjNGJlNSwgMHg0MTVmOTY1ZiwgMHg1YmZmZmJkOCwgMHg1N2UxMDVmZSwgMHgyYWZjZjk5OCwKKwkweGI1MWZmODFkLCAweGM0Mzc0MWYyLCAweGM3YTAyM2Y5LCAweDdhZmU1ZjFiLCAweGY5MzA4N2Q0LCAweGI3OGM2Y2VhLAorCTB4ZTVhZjhkYmEsIDB4ZmY3ZmYxOGIsIDB4YmU5NDdiZTQsIDB4ZjY2MDY4YmUsIDB4M2ZmYjYzZDYsIDB4ZmQzOTI4MzcsCisJMHg3OWUxNjVlOSwgMHhkMDg0NzExZCwgMHhlZmY1YzJkOSwgMHg1YWNmNDAxYiwgMHg1NGZiZDg0OCwgMHhhNjBmZmFkYSwKKwkweGM2MzA3YjMzLCAweDMwYmU1MTQ5LCAweDcxMGM0Y2Q3LCAweDlkY2MxZjk0LCAweGNmNGJlZWNiLCAweDBjNjMwNzA1LAorCTB4MmQxNzNlYTYsIDB4M2UyN2E5OWYsIDB4ZDJiYjhmNzgsIDB4ZDA5OWY3YTIsIDB4ZmZiZWE5ZWYsIDB4NzVlZmUyNmUsCisJMHhkNTU4Yjg5MywgMHgyMWQ5NzgzZCwgMHg5Y2RmOWM2MywgMHhiZDJmZTYxMiwgMHhmNzg2ZDJjNSwgMHhiYTFkZTc4NywKKwkweDYwZjdkY2ViLCAweDE0ZjQ2ZjJmLCAweDcxNzdiOGIxLCAweGJhZjdmMGZmLCAweDNlODNmMTJiLCAweDljMmE3YTA4LAorCTB4NWZlZTI0ZmIsIDB4ZmY0MDYzNWYsIDB4MmFkZGI2YmEsIDB4Y2E2NjlmYmUsIDB4ZDlhMzhiMTIsIDB4YzUzM2UyYzMsCisJMHgzYmViYTRmZSwgMHhmNzY3Y2E2NCwgMHg0OGY3ZTA2MCwgMHhiZTBjMWIyYSwgMHg2N2EwYjllMSwgMHhiYjNkNDdlZiwKKwkweDJlNDM2NGJlLCAweDkyN2VhZmUwLCAweDFiOTRkYzc0LCAweGFmZDRlZjNjLCAweGQ3YjYwYmZmLCAweDdhNmQ2N2YyLAorCTB4NGZkNWY2YjksIDB4YmQyMTBmMWEsIDB4YjFkMTczODgsIDB4YjVlNjFmNDYsIDB4MTMwNWQ2ZjYsIDB4OTNmZDE3ZmYsCisJMHg2ZGUyZmY2MywgMHg1N2RjNzQ4MiwgMHhkMGM3MGY4ZSwgMHgzYjFiZmI3NSwgMHg4MjdiMmRmZiwgMHhiYjA4MjNiMCwKKwkweDIxNGVkNjgyLCAweGJmNzg4OGY4LCAweGUzNmU5N2QyLCAweGEyOTZiMmVmLCAweDU5ZTg4M2RmLCAweGMxZWRmODJhLAorCTB4ZDdmOWZjZmUsIDB4MjdkNzE3ZTksIDB4NjFmZmU1ZDUsIDB4ZjRiOTdjZmUsIDB4ZTRjNDliNWYsIDB4OGZlZTk2YWEsCisJMHhlZDBjZmQ1NiwgMHhiNWJlODJjZiwgMHg2MjAwYmZmNCwgMHgwYmY4ZTg1MiwgMHgyN2JjMjVlYSwgMHhhYjU1NzczZSwKKwkweGNkZjQ5YzYxLCAweGU1YjU3ZGU5LCAweDliODMwNjY0LCAweGIxNWMyZTQ2LCAweDNjNzg1MDNjLCAweDBiZTc4Yzg3LAorCTB4MGVjNmJjOTMsIDB4ODc4MTBmNzYsIDB4ZWZkNWQzYWYsIDB4NDhiYzUzMDMsIDB4YWI5NzE3MTksIDB4ZmFmZmYyZWEsCisJMHhhMmU0ZTAzOSwgMHg4OTE3MjY2ZiwgMHhjYjQ4OWY0YSwgMHhlNTZlYjdlOCwgMHhmZTU2ZWIxMiwgMHhiOTBlZWI5YiwKKwkweGQ2NDhiNGE3LCAweDQwZTNlZjA1LCAweDgxYzQzNWZjLCAweGZkZDk3OGY2LCAweDU2Y2NlYWQ0LCAweDUyMDNkZGZjLAorCTB4N2UwMjg4MTIsIDB4OTk1ZWViNzcsIDB4ZGU4ZTllZmQsIDB4NzkwZTRmYTEsIDB4Zjg4YmFkM2YsIDB4NWM3YTAwM2UsCisJMHgzYmJkOWUzNSwgMHg3NjliOGRhNCwgMHhkNWVhNzhmMywgMHhiZjc4ZGQ5NiwgMHg5YTBlZmI1MSwgMHhmMzc2Y2I4OCwKKwkweGExZWZiNGZlLCAweDlkZTJmNjg5LCAweDY4N2JlZDAzLCAweDFjNzgzMjUzLCAweDY3YzkzZTc2LCAweGU3MTcyOTcxLAorCTB4Y2YyMGRkYTMsIDB4ZGQzNWZjNDMsIDB4NWRhMjM1NWYsIDB4NGFjN2M2ZTEsIDB4MDVhNGYzZWUsIDB4YTMyNzMyZjEsCisJMHg5Nzk5ZGYxZiwgMHhhM2JlNzE3MSwgMHhkMzJmZmYyZSwgMHg4MWRkNmNhZiwgMHg5NGFlZDhmNywgMHgzYTY0NDc3ZSwKKwkweDgyN2Y0MGRjLCAweDliZjFmNzJmLCAweDZmYzg0YzU3LCAweDNkZjMzYmM0LCAweGY3YzE5ZTZiLCAweDI0YmU3YTg3LAorCTB4ZDRiZDk3ZTgsIDB4YmIxM2UzM2IsIDB4MDljNDM1ZDgsIDB4NTY0ZGJkMjcsIDB4Yzc3MWQ3OGEsIDB4MWJhZjY4M2MsCisJMHhmNzg1YzQ3YiwgMHhlM2JjYzc3NiwgMHg5MjdmODg4MCwgMHhjMzI5YzA3NywgMHgyMzNlODViYywgMHhmZjIwOWJmNCwKKwkweDc4ZDlmN2UyLCAweGYyZTVkNTljLCAweDM3ZjUyYmI5LCAweDhjZmNhN2ZlLCAweGI3NWQ1ZWUyLCAweGJmMDQ1N2MxLAorCTB4MTNkOWUwZTcsIDB4YTEwM2JmODEsIDB4MTk5M2ZmOWQsIDB4OTNiZThiYmEsIDB4N2FlNTExZGMsIDB4OGIzNGYwMTIsCisJMHg1ZWYxMDljYiwgMHhkZWNjODU3MiwgMHg5NGVkZWY0OSwgMHhlZWI4NWVkMSwgMHhhYmZiN2U3ZiwgMHhkYjRiOTU0NywKKwkweGJkNmRlYTE1LCAweDIyNjVjZjYxLCAweDdiYjFkN2FkLCAweDBhZTVmOTJkLCAweDc5YzI0OWM2LCAweGMyODdlYzBkLAorCTB4N2ZhZGE4OWUsIDB4Mjk3YjI5NGEsIDB4ZTM1YmVkMDMsIDB4ZGVkYTNkZjEsIDB4MDY3Y2Q5ODcsIDB4ZmFmZDU3YzIsCisJMHg2MDNmOGUwMCwgMHg3ZWJmMWYzOSwgMHhmNDJkOTE2ZiwgMHgxOWYzOTU5ZCwgMHhkYjQzZTc3ZCwgMHhkZjEwNzMyOSwKKwkweGZmMTc0Yjk3LCAweDMzMmRjZWQ3LCAweGE4OTFlMjY1LCAweGJjOTFjZDdjLCAweDRjMjVlZjRjLCAweDNhNDA1ZGZmLAorCTB4MDI0NDVkMzEsIDB4YmIwOGJhOTgsIDB4ZDg5NGIwY2YsIDB4OWM0ZTVkMzEsIDB4NWM1NWFlOTgsIDB4MzcxODE5NWQsCisJMHhmOGMwNDgxNCwgMHgzOWZmMTdkMywgMHhkY2U2ZTgwYSwgMHgyMTVhZTM3NSwgMHhmMmRiZjE0NiwgMHhiZWY1NjkyMywKKwkweGJkODUzYzllLCAweDNmYzJmNDk3LCAweGQ5ZjQwNzdmLCAweGNiODYzZmYzLCAweGEyNDcxYmUyLCAweDE4NDg2NDFjLAorCTB4YTU3YmQzM2YsIDB4NTRkN2JiMzIsIDB4MTdkYzVkZjIsIDB4MzI1ZGZkZTIsIDB4OTZlMWY5ODksIDB4ZmVlMjY2MjcsCisJMHhjNGNkZjIwOSwgMHg4MjZmODI2ZCwgMHhiOGU3MzkzZiwgMHhkY2MzYzU4ZSwgMHhjNjdiZTEyYSwgMHg2ZTFkN2VlZCwKKwkweDk5MTU5Y2IxLCAweGI5ZGRmODVlLCAweDNjYWNkZGY2LCAweDJiZGEyZWE3LCAweGQ4Y2U3Y2QxLCAweDI2YmU1NjA4LAorCTB4NGZmNzBiZGEsIDB4ZWUzZjEyMTYsIDB4ZmI3MGM1Y2IsIDB4NGJmYjg2NDQsIDB4ZGY4YTJmOGMsIDB4ODIyN2EwMGIsCisJMHhiZjZkMTJhMSwgMHhlZWNjYzNhMiwgMHgzMGZmMTA1MSwgMHg3MGI5ZmZlMCwgMHg0ZjE3MGE3ZSwgMHhmMWYxODQzMywKKwkweGJmMTk0M2QxLCAweGI2YTY1ZDFmLCAweGU1ZTUwYzg3LCAweGRmNjUyOWY3LCAweDBjYjQ3ODA3LCAweDgxMGQ2NDcxLAorCTB4OWI5ZDMxZmEsIDB4M2IwNDJjMWUsIDB4OWY4MDhlOTAsIDB4YjdiMWIzZTYsIDB4YjQ1MzVmYTMsIDB4MWIyOTUxN2IsCisJMHg5NTlmZjUwMSwgMHg2N2JmYmM1OCwgMHg0YzZmYmYyZiwgMHhmZWExMDkwMiwgMHg3OTRhYjViMSwgMHgxYTJiZDQyZSwKKwkweDQwZDNmOGMyLCAweDUxZGY4NTcwLCAweDJmMzk4Njc0LCAweGQxZDFmODhhLCAweGJiNDM2NjcwLCAweGQyNzdjMTNjLAorCTB4N2U1ODk1OWUsIDB4NmY1YmUzZjIsIDB4NWY0MTY4ZGMsIDB4ZTNmNDA3ODIsIDB4NDRkNzE1MTcsIDB4OTFiNDZmMTgsCisJMHhmZmNjMGIxMCwgMHgxYjdlZmNhNywgMHhiYjAwYzg2OSwgMHg0Y2M3YWFlOCwgMHgzZTJmZDAzYSwgMHhlZTE4ZTJhMiwKKwkweDllODFmY2Y3LCAweDk4ZmQyMWI3LCAweGZkMjE5YjllLCAweDQzMzczZDIzLCAweDliOWU5YzdhLCAweGNmNDEzZDIxLAorCTB4MzhhZTkwY2QsIDB4Y2NjNzg3NmYsIDB4OGUyMTg5YzksIDB4ZjBiZmQwYjksIDB4NWJlNzY5ZjcsIDB4ZDdmMTg0MzksCisJMHgxYWY3ZjFiZSwgMHgxNGZiZmM3MSwgMHgwZmI3YzIxNywgMHhmZTA4N2JkZiwgMHhkMWIzZWRkZSwgMHg4Yjk4OTQ4MSwKKwkweGRlY2Y1YmQwLCAweDc0OWZhM2JmLCAweGZmMDhiODIwLCAweDBhN2NiNmEzLCAweDZlZWU2YmM3LCAweGRjZmZjYTNkLAorCTB4Y2FkNDdmNzYsIDB4ODcyYjdhOTAsIDB4Y2U3ZGIxMTgsIDB4YTBhMzI3MGIsIDB4MWY1YjZlZmYsIDB4NWQxMjFkN2MsCisJMHhjYjFkNGNmMiwgMHhiOWZjN2NhZiwgMHg4MjhlMzcxYiwgMHgwZmJlM2JmOSwgMHhmOWY3NDE3NCwgMHhkYjczNDg2YSwKKwkweGZjMDBmYjdmLCAweDFmZWQyYTVlLCAweGE0N2EyNGUzLCAweDJmM2M2NmMwLCAweDg1YTFkNjY4LCAweGIzZDc1ODgzLAorCTB4YTA5YjlkZDEsIDB4MGMyZmIzZmQsIDB4YmU1MDk1ODUsIDB4MDFiZWQ4NDMsIDB4YWRjMjkyM2EsIDB4ZTdhZTAzNzcsCisJMHgxMGEwNTM0NiwgMHg3OGRkMGJlZSwgMHhhNzFiMGU0MSwgMHg4YTUyOWY3ZCwgMHg3YTA2NGU3MCwgMHhjYWRkZmU0MywKKwkweDAyNWY0NjUzLCAweDdmNzRkZjZmLCAweGUyMjNmYjZiLCAweGE1ZTAxNWZkLCAweGFmYTVjODBhLCAweGFjMmY0MGEyLAorCTB4ZWQwNGYxZTQsIDB4MDZmZDg3YmIsIDB4MjQzOWU5ZDYsIDB4ZGFiZGY4MTMsIDB4ZmRlYTMxZDEsIDB4NDllMzhiYjcsCisJMHg4ZDdiMzlhNCwgMHhiM2Q3YzA0ZSwgMHg4MzBkNGY3YiwgMHg3ZTI5ODlmNywgMHhjNTdiYzE4NiwgMHg0NTVjODZkYiwKKwkweDMxZWY3ZjQyLCAweDhmOTdlYzY3LCAweGY1ODcxODNjLCAweGU3NjlmN2YxLCAweDEwMTU2ZDkxLCAweGJjZGYzMzM3LAorCTB4ZDI1ODBkZmYsIDB4MGFmMWRiNDIsIDB4OWM1OTliODgsIDB4NzQ4NDFkMjQsIDB4MTkzOTkyODksIDB4N2RjNDY1ZTIsCisJMHg0YTIzNjU4MywgMHg5YTk2YzIwZiwgMHg3ZDQ0YWY2MSwgMHg0Yzk4MTRhZSwgMHgzNzI4N2M4OCwgMHhkODQ3ZjI0NywKKwkweDU1OGEzYzg1LCAweGE1MjRhN2U1LCAweDUzNGZlYWFhLCAweGQzZTU1NGIyLCAweDk1NTQ4YzQ3LCAweGQ4Njc3MThiLAorCTB4NDZmNTU0MGIsIDB4YzI4NjA0YzcsIDB4ODNhZThlNzksIDB4YTRmZjAzYmQsIDB4Mzk4NmYxOGMsIDB4N2ViOTFjMmYsCisJMHg3Y2NmY2QyNCwgMHg0M2JlMGU2YSwgMHg5ZjJmMmNmOSwgMHgxN2I5NWNmOSwgMHhlMTQzZDFmMCwgMHhkNTBhYTQ2OSwKKwkweDZjMWY5MmU5LCAweGQzM2ExMDdlLCAweGY3NmExNzljLCAweGExZDA3MTNlLCAweGUxNzljNjVjLCAweDgxODRlNzEyLAorCTB4ZWQxNjRmZGUsIDB4Y2EwNGU3YjUsIDB4YmUwMDFmMzcsIDB4ZDljNWZhMzksIDB4M2VkYmYwMzYsIDB4MTRjYmY2M2IsCisJMHhjZGZkNDc4OCwgMHgwY2FlZmUxMCwgMHg0NDBjM2YzZiwgMHg0M2ZiN2QzNywgMHhiY2RkMTg1MiwgMHhjMzI3OTMyNSwKKwkweGYyNDQwZGQwLCAweGU5NjQzYTMyLCAweDdlZWNjM2NjLCAweGI1ZjI5NWRlLCAweGExYWY4MTRmLCAweDQyNDNjMGJkLAorCTB4NmI1NzdmN2YsIDB4YjQ2ZDFiZGYsIDB4YjAzNmU2ZmYsIDB4YzMyYmJkNDcsIDB4N2JiZWE1MGQsIDB4NmZlMTJiOTMsCisJMHg2NGVmNDgzOSwgMHg5M2JiYjZmOSwgMHgwN2JiZjBlMywgMHhiNzM3NjFmNCwgMHhiODUyMGRmNywgMHhmZmJiNTUzZSwKKwkweDYwYzJlNGVlLCAweDVjNzc1OTM5LCAweDI5ZGM5ZjU1LCAweDFiZjJhYjM1LCAweDdiZjlkNTMzLCAweGRiNDM5YjRiLAorCTB4YWQ4ZmE0MGYsIDB4ZDE4OTc4N2MsIDB4NmVmNzAzOTUsIDB4MzdiZmIwYTUsIDB4ZmZmM2U2MmMsIDB4ZDU4MDA5MDEsCisJMHgwMDgwMDAyMCwgMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgxOWI1ZmYwMCwgMHg2NTU0NTQwYiwKKwkweGNlZjdiYmZhLCAweDc4NjAxOTBiLCAweDc3NDIxMDI4LCAweDg0MGE0NDk4LCAweGIwMjg1Nzg5LCAweGQ3MWVhMDhkLAorCTB4OGY0YzFhZGEsIDB4ZTU5MzU2NTQsIDB4ZTA0ZDc5MDMsIDB4ZTNkOGY0YjYsIDB4YjY4ZmFkMTgsIDB4Njk1YjZkMDcsCisJMHg5NjU2MzU2YiwgMHhiMTM5ZTRlNywgMHgzNjI1NDY0NCwgMHhlYjQ5NWJhZSwgMHg2NmEyNTRkNiwgMHg0MmQ4OTllNCwKKwkweDdhMjY3MDRjLCAweGY3NWE5ZDZkLCAweDVlZmZmZWZiLCAweDViNjAyZTY3LCAweGU3NGVkNjlkLCAweGZmZmZlZjlmLAorCTB4MjdlZjdmZmIsIDB4NzBjYTE0OTAsIDB4ZjYwODAwY2UsIDB4OTk3MGNjYWMsIDB4ZDZmNzA2MDEsIDB4ODAxOGU0MWEsCisJMHhlMmVmZjRkMywgMHhmOWI4ZGFmMCwgMHhjZjAzODM3YSwgMHgzYTM4MDA1NywgMHgwMWNmZTNjYywgMHgwMzE0MDFkNiwKKwkweDdiODEyOTVjLCAweDU5MTRmM2EyLCAweGZmNjBlNzYwLCAweDJmYmRmMTY1LCAweDAwNDkwODAxLCAweGRlOGQxNzllLAorCTB4ZTM4NDU2ZWQsIDB4NmU2NzA2NWMsIDB4ZjA4ZDllZjgsIDB4ZDkxODA2NGUsIDB4YmZlZmZmNzIsIDB4MjVmNWMyMmEsCisJMHg4YzBlZTNiMCwgMHhiZDBkNDNjNCwgMHg1Yzc1ZDc5YiwgMHg5ZmNkNzExNCwgMHg3N2QxZDcwNCwgMHg5ODgwOTY3OSwKKwkweDU1NzA2YjgwLCAweDAwZTIwN2I0LCAweDNjNjM2YTlhLCAweDY3OWUzZTYyLCAweDJlOTkwZTg2LCAweGE2ZjFjODA0LAorCTB4MDE1MjliYjUsIDB4YzAyMjhhOGUsIDB4NzgwNzQ0MzksIDB4ZTNlZjE0YTAsIDB4MjQ1ZjA0MWIsIDB4YTRlZjM5YTcsCisJMHg2N2M4YjlkZiwgMHhlN2M3MmZjYywgMHgzNWIwMzI0NSwgMHhlOTk0MzJiZiwgMHg3ZWQ3N2JjNiwgMHhiZjFjZTc4NywKKwkweGNlOTFhMjAzLCAweDhmNGE4MDNmLCAweDJlNWM0YzAzLCAweDE5YmRiYjA0LCAweDNmMjMzZmZlLCAweDE4MTJiZDRkLAorCTB4ZjA2MTlmOTAsIDB4NjA1YWJhMWQsIDB4MjVhOWNjZDcsIDB4YTdlOTJiMDAsIDB4MDYxZGZiNGMsIDB4MTk2ZmQ4OTAsCisJMHhiMjk1N2Y3MCwgMHhlNTdjYjJiZiwgMHhmMDhiMTBhNSwgMHgyMDQwZmQ1NiwgMHhhNzBmYmQ5YiwgMHg3ZmQ1ZmZmMSwKKwkweGYxOTgzNzZmLCAweGRhNTNmNTdjLCAweDUzMGY0MjdkLCAweGZiZTUyZjkwLCAweDc3YjNmMDNhLCAweDNkZTI3N2ViLAorCTB4MjM1ZWY4NTMsIDB4ODQ5OWZkZGMsIDB4Njk3NjM2ZWYsIDB4YzcyNDVmYmYsIDB4ZTBlNjBkMjQsIDB4MzgyODAyOGYsCisJMHg5MTZkYjEyZCwgMHhmMTM2NmJkZSwgMHhkZjRhZTZmNywgMHhlYTA5N2JiZCwgMHhjOTI1ZTliMSwgMHhkMWFkYzQ2ZSwKKwkweDAwZTJkM2RkLCAweGE4Mzk4M2Y5LCAweGYyZjFkNGU0LCAweDdhOGNkYTZiLCAweGE3YzMwYzJhLCAweGJkZjM0Yjc2LAorCTB4Y2ExNzVmNzQsIDB4NWUzMTllYTgsIDB4ZTJjOTYwY2UsIDB4NWYxYzJjZjgsIDB4MGJkN2M1NzMsIDB4ZjczNWYxMDEsCisJMHg3ZWQwZDBlOCwgMHgxMTQ2Y2YwMCwgMHhjZjNjMDhlNCwgMHhmMmFlMzFlZCwgMHgwN2Y0YzM5YSwgMHhmY2M3OWMyZCwKKwkweDY2MTMyZjllLCAweDFkNzVmMmU3LCAweDFjZWQwMWQxLCAweDk4YmY3MDJmLCAweDA5M2U4MDIxLCAweDYwYjU0MWYxLAorCTB4NWY0YjhlZGYsIDB4YzkyNTcyNGYsIDB4OWYwMDRmYmYsIDB4NTg5ZWMwNWMsIDB4NWNmZDQyNjQsIDB4N2RhMzlmYzEsCisJMHg4ZmUwMjQzMywgMHhlMTFkNmM5NCwgMHhmZGM4YTg1OSwgMHg3YzdmZDI4YSwgMHg4Yjc3ZTAyMywgMHg0MzRmMTY3YiwKKwkweGQ3NTBlMDBhLCAweDBjZDQzZWIyLCAweDBjNmQ5MDZjLCAweGU4ZjAxMmRmLCAweGYxN2QyZjQ5LCAweGE0MTZmNGNlLAorCTB4NjA0OTMyZjMsIDB4MWYxN2RmZjYsIDB4N2YxMDE2MWEsIDB4ZDBiNDQ1NWYsIDB4ZWZmN2IwMjYsIDB4YmU1NWY3YTQsCisJMHg3NGNlZjRmYSwgMHg4ZTZiZTMzNywgMHgyNmY1MTA2NSwgMHg0ZTkwMmUzOCwgMHg0Nzk3OGY0NywgMHgxODNhYWU1OCwKKwkweDcxMmJmNTU0LCAweDljN2YyMTc3LCAweGZiM2VkZDJiLCAweGQxZGJmNDEyLCAweDIyMzE2MGE1LCAweDY4NGI5N2JkLAorCTB4YWJjMzA4MzgsIDB4NDlhYjhmZGMsIDB4YWU1MTMzZDYsIDB4ZTg4MTNmODIsIDB4NmUxNzk2NmMsIDB4ZTRiYmYxOTEsCisJMHg5NzQxN2JkNiwgMHgxZDM3MjExOCwgMHgyZjU1MzNmNywgMHhkM2M3MWNhYSwgMHhmNzJkZTJhMSwgMHhkMWJmOTAzYiwKKwkweDlmYjMwMjFkLCAweGVjY2NiYjQ2LCAweGU0ZmNiMWIzLCAweDdmMTA0YjgzLCAweDBiYjI1ZmEzLCAweGVlYjJjZjQ4LAorCTB4N2U0ODQ3YmQsIDB4NDAzYjZiMWQsIDB4ZTc0MDFlNzcsIDB4MmViNjZlZGEsIDB4NTI3ZDk5MzMsIDB4ZDk4YmUzMWUsCisJMHg0MTQ2ODhhZCwgMHg2MDU2YWQ3YywgMHg3YzM1YTdjNiwgMHgwYzdiZTYxZSwgMHg3YzNmNTFiYywgMHgzODA0Y2UwNiwKKwkweDllN2NlYjE4LCAweGZiZjM1YmY4LCAweDEwOTZmYmNmLCAweGUzY2ExYmI1LCAweGFkOTAxZjk5LCAweDNmYTYxYjlkLAorCTB4NDY2MDAwZGYsIDB4YTNkYjQzZmEsIDB4M2MzMDRmYmQsIDB4NjEyNWFmNjgsIDB4MjdiMTNkN2IsIDB4OWUwYjcwZWIsCisJMHhjZjUzNzg5ZiwgMHhjNTVmNzVjYywgMHg0MTZlYTdjMywgMHg2OGY2Y2Q3OCwgMHgwOTEzZTcyNiwgMHhmM2E1NDllMCwKKwkweDNkN2JhNjI3LCAweDE4YTU2MTc4LCAweGI5MjE2ZmVhLCAweGI3ZDhjNjc3LCAweDQ3ZjFmOWUzLCAweDEzYmIzZmE3LAorCTB4YTc2N2RhZTEsIDB4ZjI0Yzg5ZDksIDB4N2RlNTE5MWYsIDB4ZGEwMTFkM2MsIDB4N2Q5NTNlN2YsIDB4ZWYxYzI5MDcsCisJMHhhNTJmYzUwYSwgMHg1N2RjNjY2NywgMHgyNGNmZTc0ZSwgMHhhYThmMDlkYSwgMHhhMzQ3YTFiZiwgMHhmYWYyODAxYywKKwkweDE2Nzk3YzEyLCAweDgyOTNiZDM0LCAweDg3YzQ1MDY3LCAweGM3OWRjNGViLCAweGRiY2JiNDA0LCAweGM0ODNhZTBjLAorCTB4ZmU0N2VhZjcsIDB4ZjkwY2E4N2EsIDB4MzdlNjdhYTksIDB4ZmE0NGNmMGYsIDB4MGM5YmRmNmEsIDB4YWY1ODRlZjQsCisJMHg2YzQwZTJlMywgMHhkZmZjOTcyMCwgMHg5MTVmZmRjNiwgMHgyODhlZGQ0ZiwgMHg3MTExYzdjYiwgMHg1ZTIzYTFhNiwKKwkweGE3NzUzNzAzLCAweDg4OGUzZTVhLCAweDY1YzA3NTM3LCAweDhlODJmNTBjLCAweGZjNTdhOWY4LCAweDFkNzQ1ZWFhLAorCTB4MjAxYWJhMjUsIDB4ODQyMmUzYzAsIDB4MDU1NzY0MGMsIDB4NzhhMGUwOTIsIDB4YzhjN2JhMTAsIDB4Y2VkNjNmZTQsCisJMHhkMTkxNjU0NiwgMHg4YjgyMmY1MSwgMHgyMjQxNzllMiwgMHg2ZmM4NTI5OCwgMHhjMTdlNWM1ZCwgMHg3MTNmYTY3YiwKKwkweDkyNjZjYTE3LCAweGZiZjU0MTM1LCAweDIyMzM4NWFjLCAweGYxYmZiM2VkLCAweGNkY2ZiMjE1LCAweGMzOWY2NjQ2LAorCTB4OGQyZjNjNTEsIDB4MzkxZmYzYzUsIDB4YzJiZjdkOWUsIDB4ODdmMzA1ZjQsIDB4ZjVhNGY5MzMsIDB4MTczODVhZGYsCisJMHgwYWVmMTQxYywgMHg5YmMyZTRkYSwgMHhmNDUxNmQ3MCwgMHgyOWM1MmM3MiwgMHgxZGVlNDk1OCwgMHhjMDNhZWZmNywKKwkweGU2ZjViOWU0LCAweGJmNzc4NGEzLCAweDBlMGZlOTk5LCAweDA1MDdiOTcwLCAweGY3ZDUyNzllLCAweGEwNDI5ODU2LAorCTB4Yjc3YTI0MmIsIDB4ZmRkNTdhMzEsIDB4ZjM4NzJkYzEsIDB4ZTBmZWY4NWMsIDB4ODA3OTM5MGIsIDB4ZjI0Y2JjZjYsCisJMHhlNTA1ZmUwZiwgMHg3ZmM2MmE3MywgMHgzYjVjMzZlYywgMHg4NTNiYmZmNywgMHg3YTU4ZTBmMiwgMHhkOTQ3NWJlYiwKKwkweDJjM2MyYTdiLCAweDRmNTQzOGYwLCAweGY3ZmVlMDdjLCAweGEyNjRjZTk5LCAweDhiMDhjMzEzLCAweGNkNzcwMzBmLAorCTB4MmI5YmYyNjAsIDB4ZmU5MWM2ZTUsIDB4ZjRiNDI3ODMsIDB4N2Q1M2E1OGQsIDB4N2Q0ZmE1NWYsIDB4Y2QzN2JkNWYsCisJMHg4ZTM5MzIyYSwgMHg5NDc5ZmMxOCwgMHg5MGNjNWZmNywgMHhjNDhkN2MzNSwgMHhjZGUyZjNmYSwgMHg3NWUxNmZiNCwKKwkweDExYzIwMjQ0LCAweDNmNDM1NmY2LCAweDI2MzViZjUxLCAweDVmNDhkYjhjLCAweDZmNjA4ZDRkLCAweGExZWZiNjAzLAorCTB4Y2ZhYjg5YjgsIDB4MjlmNWU3ODUsIDB4MDM3MjJiMmYsIDB4NzhlZDA5YTcsIDB4OTA2NzYyYjEsIDB4NmVlY2M4OTQsCisJMHg1ZWJiNzAxMSwgMHhhYmVkYzRhYywgMHhlODBmNDNhMCwgMHg3NWM0NDcyZiwgMHhmZGEwMzViZiwgMHhhMDNjNzcwZCwKKwkweDVkYzY0NTc3LCAweDc0ZjE1MWNmLCAweGJiOGY0ZmNlLCAweGE2Yzg0YTllLCAweDMxNjIzZGY4LCAweDllNjZiYWIzLAorCTB4N2JiMWQwNTUsIDB4Zjc0ZTkwZTksIDB4NDNlZWRjZjAsIDB4MWE3NGYwM2IsIDB4Y2Y0ODZkZWQsIDB4ODE3M2EyZTMsCisJMHg2ZjUzZTUxNSwgMHgxZjkxZTVmMCwgMHgyZTNkZGZhOCwgMHhiMGZlZDhiYSwgMHhlOTA1NjA3MCwgMHgzY2JlNzQxYiwKKwkweDFiYzRlZjU2LCAweDIzM2FjMDQwLCAweDc3ZWVkOTM4LCAweDI1ZjY1ZDUwLCAweGQ0MTJiOGIwLCAweGUyMjc0ZDQzLAorCTB4ZGQxMmFhMmQsIDB4M2M3MGU2OWQsIDB4NTE2N2UzNTQsIDB4NWNhM2VlMGUsIDB4ZjU1ZjY4MmIsIDB4YTI5YmI0NTcsCisJMHgzMGZkZWQ3YywgMHhiOGY4NWEzZiwgMHg1MTVkZmI5NSwgMHg5OGVlZThhMiwgMHg1NzZlNWZjMCwgMHgxZDA2ZGNmNCwKKwkweDllNjdmNzEyLCAweGI5MTRjYjQ3LCAweDQ1MjJkZDYzLCAweDRhOGQyZGQ2LCAweDlhYzYwZjljLCAweDUzZjIxMjNjLAorCTB4ODJmNTFiYjYsIDB4YjdjZTk5NzAsIDB4MDI4YzU2OTcsIDB4OWRmYThhZDAsIDB4NWVmZTNlMDUsIDB4NTM5ZTM2YjcsCisJMHhmMmNhNTkwZSwgMHhjYmNiMGU3MiwgMHhhZjc1MTRiMywgMHg3YTQwZGMxNywgMHhjMmZlNTEzNSwgMHgyZmMxMmVmNSwKKwkweDA4MmJmYWQxLCAweDE2MDFkNWIxLCAweDA2YThhZDFkLCAweDI3MDFjZWI2LCAweDliODFlNzViLCAweDlkYTFmM2FkLAorCTB4ODNhMDBiYWQsIDB4OWY4Mjk3YWQsIDB4YWY4MTcwYWQsIDB4YjgzZTU4MGQsIDB4Zjk4ODMyZGQsIDB4NTJiZDdlMTgsCisJMHhiNDVjYmNhNCwgMHhmYzdhZTI2NCwgMHg2NzVlNDU3MSwgMHhmOTQ2MDc5NywgMHg4ZjJmOWY5MiwgMHg2MTRhZTA3OSwKKwkweDJlNGQ5ZDc0LCAweGRkOTliMzUzLCAweDkyMzE3MmFiLCAweDUxNzdlMjdkLCAweGI1YTE0ZGUwLCAweDlkZWMwMjAyLAorCTB4ZjE5MGM5OGIsIDB4ZWIyMGQ5OWQsIDB4MDcwMmFlMDgsIDB4NDhmZWU3ODMsIDB4NWMwNjk0NzksIDB4MDRlZTU3M2EsCisJMHhkODlhYTk3MiwgMHg3NjI4NzY0ZSwgMHg1ZDM2NGM1MiwgMHg4N2Q3ZDYxYywgMHg1NDE3MWU1NiwgMHg0OWQyMDFiZCwKKwkweDNlYmM2MGY5LCAweDJjZTg4MzIxLCAweDVjZmNhZThhLCAweGRhZjE5MGM2LCAweDNhOWRmN2I2LCAweDg1NDVhMzhjLAorCTB4ODQzNjJkOTUsIDB4ZTUzZjU5MGYsIDB4ZjNlNTU5NzAsIDB4ZDkxZjA4OTksIDB4OWJhOWQyNzYsIDB4NTk1ZTc2NDksCisJMHgxNTYzYjdhOCwgMHgzOWQ4NmViYSwgMHgxODRkY2YwNywgMHg0ZTUwYTNmYywgMHg1MjgyNGQ5MiwgMHhiMTUxNWQ1YywKKwkweDY3N2U4MDc5LCAweDc0ZWJhYzk0LCAweGRiYzY1N2U4LCAweDU3MTljNTgwLCAweGQ1OWY4MDE0LCAweGU0NjU2OGIzLAorCTB4N2ViYzM1MjcsIDB4N2FlMTYzNWQsIDB4YmQ3MDZiZGIsIDB4NjBkYTdlNGEsIDB4YzhjYWM1ZjIsIDB4NzM3NTlhZDMsCisJMHg2ZTVmMjk5MywgMHgzZmY3ZjAzMCwgMHhiY2U3MmM5YSwgMHgyMjMyNzI4MiwgMHg5ODQxNTMzZSwgMHg0NGY3M2M0ZiwKKwkweGU0MTAxYzIxLCAweDE4NmI1Njk2LCAweGY3YzA4ZmZmLCAweDc3YzIxZmNmLCAweDVkZWI4YTZiLCAweDU5NGRjZjE2LAorCTB4NTM0ZmZhNDAsIDB4Njc2Nzc5ZjIsIDB4MjQ1ZDhhNTksIDB4M2Y4NjE2ZmMsIDB4ZDJkNTkzMTAsIDB4NTIwNzQ3OGEsCisJMHg3YmQyMWY5YywgMHg3NzZlMThjMSwgMHg1ZWI5NWExZiwgMHgzMjlhYjZjZSwgMHgyNzU4MWYxZCwgMHhmYmFlMGZkOCwKKwkweGUyOGY5NzdhLCAweDA4NDgyN2QwLCAweGQ1OTlmM2JlLCAweDM0NzQ0MDM1LCAweDQyOGM4MTg5LCAweGQxMWRkN2Q0LAorCTB4Mjc2NDBjYzcsIDB4YTgwYjFkYWEsIDB4N2ZjOGE1YmMsIDB4MDZiYzAzOWIsIDB4OTZlNTFmZTYsIDB4MmQ5OGY1MzMsCisJMHhlNWMxMDdlYywgMHhhNWNhMWVmOCwgMHhkMmFjZTljOCwgMHg4ZDQ5NzFlMywgMHhhNWFkMWY3YiwgMHgzYzJhZjZhZSwKKwkweGEyNDEzYzIxLCAweGFkMGE0OWE3LCAweDE1MzhiYjIwLCAweDEzZTE5ZWZmLCAweGI5NTNhN2U2LCAweGFiZjEyYTNkLAorCTB4NmRlZjRmNjcsIDB4NDI3NDFjNjksIDB4ZWQzNjFmODQsIDB4MGZhYmU2ZjksIDB4YTM0ZGRmNTAsIDB4MGY1ZDNiNjYsCisJMHgxNjk2ZGZmYiwgMHgxYWIwMGJlYSwgMHhkNTE3YzRkNCwgMHgxYjc1NjcyZiwgMHg5NTVmZDQ3ZCwgMHgzOTdmM2VlZCwKKwkweGFmNzhhYmRkLCAweGZhNzE0NmRmLCAweDFiNDBmZWUyLCAweDllYzFjYjk1LCAweDJmZGM2OWMzLCAweDZiZmUzYWQ0LAorCTB4OTNlNGU3ZTEsIDB4NzUwNTEyYjksIDB4OTA1ZWNiYWMsIDB4YWJlNDQ2YmMsIDB4MDUwYmVhOTksIDB4ZGM3YzIwZjYsCisJMHg0NzEzNzY4NCwgMHhhOWJmNzlmNywgMHhiZDBkOTVmNiwgMHgyZmE4MTlhZiwgMHhjNDNjNjdjMSwgMHhmZjQyYWQ2ZiwKKwkweDVjMzdhZGFhLCAweGFkNjJmNTRhLCAweGQ2MmZkYjU3LCAweDEzZDc3YmY1LCAweGI0M2I3NWRkLCAweGQ5YmY2YWZiLAorCTB4NGY1ZjdjYTQsIDB4ZWE4ZDlhZjUsIDB4MjZiZGVkM2UsIDB4YThmMzM3ZWEsIDB4NjdlZWQzZmUsIDB4YTZmZDJhNjYsCisJMHhhOTQwZmY5MiwgMHg3NzJhNTczMywgMHhlYjMzM2Y4OCwgMHgyMzVlMGNmZiwgMHg2OGZjZDZmMiwgMHg3MDQyZGQ4YiwKKwkweGUyY2VkOWJhLCAweDY2MDZmZDZkLCAweGQ4N2RlYWM3LCAweDQ0NmNjODlhLCAweDhkZGFkYmY1LCAweDU1NjdlYWMwLAorCTB4MWI0ZmY5OGUsIDB4ZmM4ZmE0MWQsIDB4NWQ1OTkzYTcsIDB4YWIzY2Y1OGMsIDB4ZjA5ZTMwNDcsIDB4MjI2NTFlZmUsCisJMHgxNzNkZGRhMCwgMHgxMTE0Y2ExZiwgMHhkOTNkNzNjZiwgMHg1ZmI3YWE3NiwgMHg3ZjgwZWI1ZSwgMHg0ZmE2MTc5ZCwKKwkweDRhZTdmN2FkLCAweGQ0MGNhYjNiLCAweDdkODhkZDQ3LCAweGY3MzU2ZTE0LCAweDQyNjZkOTNlLCAweGQwMTM3OWI4LAorCTB4M2IyZDI0MGQsIDB4ZTJhNmVhOGUsIDB4ZTk3ODEyZmQsIDB4NTAzZWYwMWQsIDB4MWE5NzZiOGUsIDB4YmViMDUyNGYsCisJMHg5NDQ3OTA4ZiwgMHgwOWU0MDkzYywgMHhhMmEzNzlmYSwgMHgwNGVjZThiNywgMHhmZDhjNzljZCwgMHg3MWY3Y2QxYywKKwkweGVmZGE5OWE1LCAweDZlN2YwZTNkLCAweGZlNzNjNTA5LCAweDAyZTNiYzdkLCAweGMxMzZmZGNkLCAweGNkOTFmNzZkLAorCTB4YmMzZmYwMDQsIDB4YjE4OGFlNTcsIDB4Y2Q4MmJmYzIsIDB4MTdlNzEyMWQsIDB4ODg2ZmVlNjgsIDB4ZWM5ZmI3OWQsCisJMHhkZDBiZmNiYiwgMHg0YjcwM2IxOCwgMHgwMTY1Nzc2NCwgMHgyZjUwNDc4MCwgMHhlN2I1ODZiMywgMHgyMWRiMDdjNSwKKwkweDFkNDdmMTE2LCAweDU3OTk4ZGQ0LCAweDE2ZWE4MDc4LCAweDVmZGRhY2EzLCAweDU0YzVkYWFlLCAweDQzOTlhYTk4LAorCTB4YjczYjkxOWMsIDB4OTEyMWQxZmIsIDB4OWMwOTQ1ZDksIDB4MTE3OTcwZjcsIDB4NWUwZjU5YzksIDB4NDZkY2JjNzksCisJMHg2NmZiYTU2OSwgMHg1OThiZjMwMywgMHg4YTc2MmRiZCwgMHg1YTlkOTM0NywgMHg2OGQ3MjdmOSwgMHhkMmVhOWZlNSwKKwkweDk1NmQzYmNhLCAweDZlZTlkZTU2LCAweDZkY2ZiY2FkLCAweGVhZDdjYWQ1LCAweGI2Y2ZjYWQxLCAweGZlZTY5NjcxLAorCTB4MGQ0YWY2YjQsIDB4MDJmMzdkM2MsIDB4YmRmM2ZkY2QsIDB4Y2U3MDM1MGIsIDB4ZjczNGFiOGUsIDB4ZDMyYzc0NjcsCisJMHhhZjc3ZTc5YywgMHg3NmFiOWNkNiwgMHgyZTBlZDYzNiwgMHhiMThmMzVmNCwgMHgwOGM0MTEzMywgMHg1NjdhYWJmZCwKKwkweGZmNzBhMGVkLCAweGZmM2MxYWFkLCAweDFmNmZmZDZmLCAweGM4YTdmZmEzLCAweGJkZGUzMWQ3LCAweDM3NzQzYjE1LAorCTB4ZDE2NWViYjksIDB4OTk5ZGFlM2MsIDB4NTllYjk0MjcsIDB4OWNiNmY2YmYsIDB4Nzc0MzE1NTgsIDB4NTRlNmZjOTUsCisJMHhmZjk0MWJmMiwgMHgwZTE2YzM5MSwgMHg3ZGY2ZmRkYiwgMHg4ZTBhY2YxNCwgMHhhZTg4YWIzOCwgMHgxZjdiODBhMiwKKwkweGExOTJmMzg1LCAweGJhMzhhYWY2LCAweDMyZDkwMGVmLCAweGU4OWM4Zjg1LCAweDAyYTVlNWZlLCAweDg1N2UzNGU4LAorCTB4M2NiMDk0ZjAsIDB4OTNhY2YwYWYsIDB4ZDk3MmYwZTIsIDB4MTYzNmRlNzcsIDB4NGJlOWM5NmUsIDB4YTEyMGYzYzIsCisJMHg2YTg1ZTc5NCwgMHgyMmU4MTQ0NywgMHhlY2ExNTJlNCwgMHgyOWU5MjUwMywgMHhmM2FiZjk2MSwgMHhjMDA3ZWMyMywKKwkweDY4ODBmZDQwLCAweDI3NTliNmYyLCAweDliZWM3N2FhLCAweGI5OGY1NjI1LCAweDg2ZjY3ZDU4LCAweGE1NzM2MmUwLAorCTB4MDY3ZjI2NDUsIDB4MjVkZmY3YzUsIDB4YzRjZWRlYmIsIDB4YjQ0YTc2YjgsIDB4MTM5ZWFjY2IsIDB4NTRjNDZkMDIsCisJMHhhNGEzMTg5MCwgMHg3NmFmYTllNSwgMHhlZDg3MWY1MCwgMHhmZjJiY2QyYywgMHhiNTZkNDc3NCwgMHg2ZjkxOTcyNywKKwkweGI2ZjA5NDA5LCAweDY3ZjVmZTk5LCAweGEyNjQ4ZWJhLCAweGNiMDQwN2ZjLCAweGY2ZmM0MmZhLCAweDMzMjc1OWFkLAorCTB4MjUxOTdmMjgsIDB4Y2QwMTQ0OTQsIDB4ZTk0NzFjNGYsIDB4MjRkY2NjZmMsIDB4NzhjM2Y5MTksIDB4MGY2NTEwMWIsCisJMHhhYjczYzI4OSwgMHg5MzkwZmFjMCwgMHgwOGNjZDhmNCwgMHg2N2E4ZGRmZiwgMHhiZTk0MGI3OSwgMHg1ZTQ1MWFlYywKKwkweDU0YjY1ZjZhLCAweDRmODAzZmMxLCAweDdlNzhjMmFjLCAweDRjMWJmNzRkLCAweGMzMjk3NTJlLCAweDZkY2ExY2NhLAorCTB4MzdmYmUwYjcsIDB4NTAxNzM1NGMsIDB4NDI4ZTBhNWYsIDB4ZDVlN2VmM2IsIDB4ZmE0ZDJkM2UsIDB4ZWQ1NTc5MjksCisJMHhiZjc2Y2Y2YiwgMHhkMzQ4NjUyZSwgMHhjNGNlYzMyZiwgMHg2MzkxZTcwOSwgMHhiZTYxNWVlNywgMHg5YjAzZmJmOSwKKwkweDFhMWU1OWEyLCAweGU2Y2U5NGQ4LCAweDRmZjdlMThiLCAweDcxYWZmN2IxLCAweDkzYjFhM2JmLCAweGQ3ZGY1YWViLAorCTB4OWVmNWRmZDgsIDB4ODFlNzM0OGYsIDB4MGQzZTkwYTQsIDB4NGFlYzBmZjksIDB4Y2EzNTc3OWQsIDB4NjMwNWU0NmYsCisJMHhhOGFiZjUwOSwgMHg3MTViMzhiNywgMHgzZGMwZmRmOCwgMHhiZTEwZTdkMywgMHhhN2U3Y2RmZiwgMHg2YmZkYmU0YywKKwkweGE2ZWU2Y2ZkLCAweGVkNmM3OWYyLCAweGQ2MDcwNjExLCAweDk2M2FkODA2LCAweDU1YmZiNTRmLCAweDIwZGZjMzU3LAorCTB4OTBlNWVhOWIsIDB4ZDEzZWM5MzAsIDB4MWIzMWU2YmMsIDB4NjdmYTgzZWYsIDB4N2NhNGE5NGYsIDB4ZDA2ZTlmZGMsCisJMHhjMzhiMzVmMSwgMHgwZTI2YTVhOSwgMHg2YjRmOWJjZiwgMHg0OGRlNmY1MCwgMHgwMGJmNmRmZCwgMHg2MWVkMDEwZSwKKwkweGVjN2NlMGE5LCAweDNhYmJlNDdhLCAweGEzNmI5NWQ5LCAweDI4NzU3MjdhLCAweGQwZmU4NzRmLCAweDU2YjgxZjk0LAorCTB4MWViZTdkNDAsIDB4ZmUyN2NhZWYsIDB4NTMwNjJjMDUsIDB4NTk5ZDE4MTMsIDB4ODkwYzM3ZDQsIDB4NjMwMTNjOWUsCisJMHg3NjRmNGRjMSwgMHgzZmZkNTM1NywgMHg4YTczYzkzNCwgMHhhZGFkNzYzMiwgMHg4M2ZhOWFhYiwgMHg4ZmY3MDMyMSwKKwkweDg0N2M5ZTViLCAweDE2YjdjM2Y5LCAweGU3N2E0Y2Q3LCAweDMxZjI0MTEzLCAweGYwNDk3ZTdiLCAweDE2ZjY2NzZlLAorCTB4Zjg4YzJjMzAsIDB4YWYzYTgyYmIsIDB4ZmE5YjdlYTEsIDB4NWYxNDYwOWIsIDB4ZGZmOGRiNjcsIDB4YWNjNzJhNWYsCisJMHhhZTNjNmQ0YiwgMHgzMTZiNDJkZCwgMHgyY2VlZTVlOSwgMHhlOGNhN2JmYSwgMHg1ZjkwMjM2NiwgMHg0ODg3M2UyMCwKKwkweDVjZjg3YWY4LCAweDQwZjIwYTc2LCAweDZmNTYwZDc1LCAweDc4Mjg1ZmFjLCAweGY4YTNlOGQ1LCAweDE2NzVjZWExLAorCTB4YmRlY2FjZGIsIDB4ZDc5ZjFiMjQsIDB4ZjQ2N2RkMjQsIDB4ZWVmY2IxYjYsIDB4M2E0NmE4Y2YsIDB4ZWY1OGY1ZGIsCisJMHgxMDcwZGY1MCwgMHg4NDZkMWNkOCwgMHg3YTExNjFlNiwgMHhmZGUzNmM1OSwgMHhjMDA4ZGMxNywgMHhkMWI3OTNjZiwKKwkweGMwZWY0Mzc5LCAweGRmMjc4YTMxLCAweDI0YWViYTY3LCAweDcyODgwYzM5LCAweDg2OTNjNTA5LCAweGRlYWNiZGQ4LAorCTB4ZWNjOWI2NmIsIDB4ZjE5N2E0M2IsIDB4NGVlMTcxOGYsIDB4MzgyZmNmZDIsIDB4ZmE0NTVjMGYsIDB4NzgwNTMwNmQsCisJMHgwM2NjYWFkZCwgMHg5MWI3MjZjZiwgMHg3Mjg3ZmVlNSwgMHg5ZWNiZmNkOSwgMHhmNGE5ZjQ0MSwgMHhiNmNkZmQyMiwKKwkweDRhOWRiOTg4LCAweDFmOWRmODdmLCAweGFlNzUwYmY2LCAweDViODNjMmE1LCAweDlmOTE2NDM2LCAweGJjZjg1ZWExLAorCTB4NWJhZTEyNTEsIDB4MGZmN2MxMzgsIDB4OTYzZWZhMmEsIDB4ZmUxMGY0ZTIsIDB4ZjczZTZlZDUsIDB4ZmI0ZGRiMGIsCisJMHhjZjQ5NDdjZCwgMHgyNzE2NjZiZCwgMHg1OGZkZjZjZiwgMHhmNGY2MWIzZSwgMHg5ZjIwNzkzMiwgMHgxMTdmMTJkNywKKwkweGM5MWJkZTdjLCAweGUxY2Y0OGU3LCAweDlmZTU3Mjg3LCAweDlkMzA1ZmNmLCAweGI4MjkxZGZmLCAweDE5MGM5YmVkLAorCTB4ZmRkODZmYmYsIDB4YmJiMjExYzYsIDB4ZGYxZTc1MDYsIDB4MTgzMzlkYTUsIDB4OWFmZjYxMjcsIDB4MWQxY2QxMzAsCisJMHg1ZDQ0NGZiMywgMHg5ZmJmNTQ2NiwgMHg4ZjdlZDNhYSwgMHhhOWNkMzkwNSwgMHhhOWRmYzliYiwgMHhiZmYwNzE3ZSwKKwkweGI4ZjlhOThiLCAweDg0NmJlOTRiLCAweDFmMmNlYmMwLCAweDg3ZjIzZTEwLCAweGU1ODc4MmY1LCAweGQxOGU3NTQ1LAorCTB4MjNkZTYwMjYsIDB4NTg1YWJhZGQsIDB4MzVjZTkwOWUsIDB4YmI5ZWM5ZGIsIDB4ZTRmZDA2ZDAsIDB4MzQ0NzNhMDcsCisJMHhlOThmNWY5YiwgMHhiODM1YmZhMywgMHhkNmZjOTE3NiwgMHg0Yzk5NTNiYywgMHg5YmU3NzY3ZCwgMHg4ZDdlOTQwYiwKKwkweGM1NjJhOWU3LCAweDNmMDk4YjJlLCAweGM3MWI5ZmQxLCAweGExNDhiNWVjLCAweGY1ODRjNGFmLCAweDdjODUyNjUwLAorCTB4MTVlN2M0OGYsIDB4ZDM2M2ZjY2EsIDB4ZWYzZTlhZWIsIDB4Njg1OTMyYmYsIDB4MDAxZTAwNTMsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdXNlbV9pbnRfdGFibGVfZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNhYjY3OGEsIDB4MzJlYTc4MzAsCi0JMHgzMWU5YzgzMCwgMHg0M2QyNGMzMCwgMHhiNzEyZDM4OCwgMHg5ZmE2NTE3MywgMHg4MTgxODU5ZCwgMHg4MWI5ODgxMywKLQkweDVmODgxNzk4LCAweGJjMzAzMjMxLCAweGZmNWUyNDY2LCAweDNiMDQ2MTQ3LCAweGUxODE4MDRiLCAweDBiNmY5MDEzLAotCTB4MzIwODlmYTQsIDB4YjIwNzVjMzAsIDB4MDM3MTAzM2YsIDB4ODgwNzNmOTAsIDB4MzViMTAwNTcsIDB4NDgwZmJmOTAsCi0JMHhhM2UyMDRkZiwgMHgxODQ1ZmM0MCwgMHgwOTVmZjliZiwgMHg0MjE1NmZjOCwgMHhlMzQ0M2ZlNSwgMHhhZmM0MTU5ZiwKLQkweGY5ODA4MjVmLCAweGIxZTQwNDcyLCAweGU0MjI2OWUxLCAweDBhNmRjN2M3LCAweGRlMDQwZWY0LCAweDY3Y2E4NmE2LAotCTB4ZTA2MDY1NTMsIDB4YWFjNThhMDcsIDB4OTFkYmY4NDMsIDB4NjI4MWYzZTQsIDB4ZjYxMGFhZWMsIDB4ODYwNjM5NmIsCi0JMHgxZGI5NDA1ZiwgMHg3ZGNkZDg2YSwgMHgwZGZmOTQwMywgMHg5YTg2YWI5NCwgMHhmMWI5MDAwMywgMHgwMzY4NTA1NCwKLQkweDAwMDAwMzY4CisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgxOTE1YzU4YSwgMHgxOWQ0NDQxOCwKKwkweDE4MzQ0YzE4LCAweDIwNjg1NjE4LCAweGI1ODk2OWM0LCAweDlmZDMyOWI4LCAweDkwYzBjMmM5LCAweDQwYjljNDBkLAorCTB4N2NjNDBmOWMsIDB4ZmMwYzBjNGMsIDB4MTdlYmM0NGMsIDB4ZjViMDQ1MTQsIDB4ODQxODE5MDQsIDB4MDI2ZmZjODAsCisJMHg4NWQ3MGMwYywgMHg4YmJlMTgxOCwgMHgwMzA4MzAzMCwgMHhmMTQwMmVmOSwgMHgwMWNlMjAwNCwgMHg1OGEwNmY2MiwKKwkweDA0NWU5MDBiLCAweDJjNDBkZGM0LCAweDdjZGY4YTIyLCAweDZiZjIwMjUxLCAweDM3Zjk1MTg1LCAweDg0N2JmOGQxLAorCTB4MTA1N2ViZjAsIDB4NDdhZjJmYzEsIDB4MTYxYjFlNDAsIDB4M2UzZjIyZDEsIDB4M2JkMDI5MjIsIDB4MDE1ZjU4MTAsCisJMHhjNzI2NWY5NSwgMHgwZjI3ZDBjMCwgMHhiOGE4N2Y4YywgMHg0YmZjOTIwMSwgMHgwZTVjYmIyMCwgMHg2MDk2ZjZjMiwKKwkweGYyMDYyODYwLCAweDliYjAxNTBkLCAweDJmOTQwM2ViLCAweDg1N2RjYTAxLCAweGNjMDAwM2NhLCAweDY4OGNiYWNjLAorCTB4MDA2ODhjYmEKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdXNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweDQ1NTQ3ODA5LCAweGJlZGQ3MGI2LCAweGU5ZDNiYjdkLAotCTB4ODQ4NDlkMjUsIDB4MTY3NGIwOTAsIDB4MjZjNDM1MTAsIDB4NjMwYTA4NDAsIDB4OTQ0YzIxMjcsIDB4NjE1MTUxYTgsCi0JMHg4NDA4ZWM0NCwgMHhmOTcwN2Q5MCwgMHgzN2Q3ZDQ3MCwgMHhkZjk1MDEyYywgMHgzZTMwZWI4OSwgMHgwZTBjMWE3NCwKLQkweDEwMzZhMGMzLCAweGM2YzA2YTMwLCAweDY4MGU4MzAwLCAweDhjYzA4Mzc4LCAweDM2NDU4NGNiLCAweDVjNzEwOTIxLAotCTB4N2Y5ZTY0NjYsIDB4YmI3NTUzOWQsIDB4NDhlOWJkZWYsIDB4OWJkZmZjNzQsIDB4M2Y2ZmVmMzcsIDB4NTU2ZWEyYmYsCi0JMHg1YjNhYWE5ZCwgMHhhYTc1M2E5ZCwgMHg0MjA0OTQ2MiwgMHgxYmU0MjZhZSwgMHg3MWY0ZDFmOCwgMHgxMDkyMTA5MSwKLQkweDY5ZjJiYjRlLCAweGI5MTA5NjNhLCAweDk2YmZjYTI3LCAweGZmNmUwZDU2LCAweDQwMTkwNGZhLCAweDViZTZiOWM4LAotCTB4NDI1NGU2NWMsIDB4YzE1MTNkM2MsIDB4MzlmOTY5YWIsIDB4NGNkZjllN2YsIDB4YmNiNjBiY2IsIDB4N2NkMjMwZWYsCi0JMHgwOGQxMTZmNSwgMHgxNmVkODZlNSwgMHg0YWI5ZGY2YywgMHhkNmJlNDNmMCwgMHg1NWQ4ZmVkYywgMHg0NWJkZGYzNCwKLQkweDY4Mjg2YjI0LCAweDIwNjZjZWIyLCAweDg4OWM4NDM5LCAweGI0NjdlYzIyLCAweDIxMjI0ODFiLCAweGFkOTYxNjY1LAotCTB4MTY2M2JkNWUsIDB4NjJkZTU3ZjQsIDB4ZmVkYTE2MjYsIDB4ODFlOGIzNDQsIDB4ODJiNTgyZmMsIDB4YWFmZWQwOWYsCi0JMHg0YTY2NWI1ZiwgMHhmOWU2ZjBhNiwgMHg0NWM1ODA4NSwgMHgzNzFmNmJmMywgMHgyYzg0ZWNiOSwgMHhhMzgxZmVkYSwKLQkweDE5Yzg0NmMzLCAweDk5NzExNDVmLCAweDgxZTUxZTcwLCAweGZjMmE0MjRjLCAweGQzMjRhNzFiLCAweDA0MWIxNWY2LAotCTB4YWZjMjgxYjcsIDB4MTNiZTc1NTgsIDB4MmNkMTU3YzYsIDB4YmMyOTE3MGQsIDB4ZTI1Njc1Y2EsIDB4ZmVmYWM5MWEsCi0JMHg2ZDdmNDA4NiwgMHgyZGJmYjBjNywgMHg1N2Y0MDY1MiwgMHgxMzZlZTE3ZSwgMHg5MjllNjExMSwgMHhkMzU1ZGEwNywKLQkweDk1YmNjMDcxLCAweDFhZjhjZjdlLCAweDE4NDQ2Yjg5LCAweGExYmZkNTlmLCAweDM1N2FkMWZkLCAweDk4NmUwYjJmLAotCTB4Nzg4MThkNjIsIDB4YWY5ZDFjNjEsIDB4NjBiZmE2NTksIDB4OWJkNWY5ODMsIDB4ZjNkNWQ4NDYsIDB4ZjMwYWRkMjgsCi0JMHgzNmFmZjBhOCwgMHhmOGMxYjE0ZCwgMHgzMmNhOWI1NiwgMHhkNzJhZjBjMywgMHg1MTVjNDkzZCwgMHg0Y2FkZjFhYSwKLQkweDk1NTVlODFmLCAweDNlMzNkM2ViLCAweDA1NGYxOWEyLCAweDA2YzA1OTI1LCAweDZlOWJmNjc4LCAweDdlZmUxNTFjLAotCTB4N2E0NTg4NTgsIDB4MzUxM2FlNTcsIDB4ZjFlNTI5ZjAsIDB4ZmQzZWZjYmIsIDB4YmM4M2M1MjcsIDB4OWI1ZmVlY2QsCi0JMHgwMmRiYTYxYSwgMHgyYmI3ZmQyNywgMHhhNzFlYjc0YywgMHgxY2VlYzc0MiwgMHg3ZDI1N2MzNSwgMHhjNzQxZTgwYywKLQkweDYyNzNlOGQzLCAweDA5MmY4NGZhLCAweDJlN2NhN2QzLCAweGJlMzNkM2E0LCAweGY0YWU5ODkxLCAweGIzZmJmMWI5LAotCTB4NTc0YzVjYmUsIDB4M2U5ODNjZjksIDB4ZDRjMjJiZWYsIDB4N2FjMTJiZWYsIDB4MzFkMzdjNmIsIDB4ZjE3OWYyNmQsCi0JMHg3MmJlOGJmYiwgMHhlYWY5ZDc0YywgMHhkZjdhZmJmMCwgMHhmODM3NGM0MiwgMHhiMmZlZmM2NCwgMHgwMWE2Mzk2ZiwKLQkweGJlNGRhNzRlLCAweGZiMzY5ODk1LCAweGFiNmY1OGZjLCAweDJkYTYxZDZmLCAweDVmN2UwMGJlLCAweDk4ZTdmMWMxLAotCTB4NzQ4Y2YyNDgsIDB4NzEwZjBlZmUsIDB4Yjg5MzcyNTIsIDB4NDQ5ZTRmNjIsIDB4MmMyNTcxZjMsIDB4Y2U1MzM4OWYsCi0JMHhhMjdjZDEzMywgMHgzZTI5ZTY5NywgMHg3OTgyYWI5MiwgMHhhZTRmOWE2NiwgMHgxZjQzZTU2MywgMHgzNDUxZjkyNCwKLQkweGU1NjY1NDNmLCAweGY5M2MyYjY5LCAweDZiNGY5YTE2LCAweDU2MjNlNTY0LCAweDM0ZDFmOWM5LCAweGNhY2ZjMjNmLAotCTB4Y2MxMGRiMmYsIDB4NjVmY2QyYjcsIDB4ZDU5ZTU2MDEsIDB4MzQ2YzBhNGEsIDB4Zjk2NDE1OWYsIDB4MDI5ZWJkZWMsCi0JMHhiNzY3Y2QzYiwgMHg4N2NlN2NiMywgMHhlNjgzODE3MiwgMHg3YjU4M2E3MywgMHgxMjAzZGUzZCwgMHg2ZDI4NGQ5OSwKLQkweDNjOGI5NTllLCAweDZmMzQ0MWM2LCAweDM3MTM3NzIyLCAweGEzN2M4YmM1LCAweGUyODEzOGM3LCAweGY5NjE3MjQxLAotCTB4NTgyN2Y5NzYsIDB4YzJlNGM5YmUsIDB4MzY3OTc2ZjIsIDB4MWU0YjM3OTYsIDB4NTcyYTNmMmMsIDB4YzliMzc5NjEsCi0JMHg5MTdmZTU4MywgMHg1NmZjYzVlZiwgMHhhNmU1OGJjOSwgMHhmYWMzN2ZmYSwgMHgyYzVlNGQ1YiwgMHg4NjVmYWE0ZiwKLQkweGM2NDkxNmY5LCAweDFiZWFjYmYyLCAweDQ5OGI3ZWIxLCAweDk2MjdmMmM2LCAweDk5MzNkMmZjLCAweGVmMDRmYjk2LAotCTB4OGI2N2MwNTMsIDB4NDkzOTZmMDUsIDB4MjQwOWZlMDcsIDB4NjlmZTUwOTUsIDB4ZTA3NGM4MTAsIDB4Yzk4MTA3ZDcsCi0JMHgyMGZjZDFjNiwgMHg2MDVkY2ExMywgMHgyMDBiY2U1NywgMHgwMDFiZjhhZiwgMHgxZjE3YjJmOSwgMHhjZjM4NDU0OSwKLQkweGMyODkxYzIxLCAweGM3MGUyZjExLCAweDAzNTczYmJkLCAweDVjYmJiZGM3LCAweGQ0MjJmMzgxLCAweDFmZTk2YzViLAotCTB4MmJlZWMwOWMsIDB4NWRkOWUzYjUsIDB4MDU3OWMwYTEsIDB4MzdmYmQ4ZTEsIDB4MjZlZmY3MmYsIDB4YmJmM2M3NmEsCi0JMHgwYjRlMDUyYSwgMHhkZmVkODljMiwgMHhkM2VkMzY3OCwgMHhiZWQzNjdlMiwgMHgyMDc2N2UxMCwgMHgzN2ZhMTI3ZSwKLQkweGI1NzdlYzllLCAweDM3N2VjOWY4LCAweDcwNzc5Zjg0LCAweDA3ZmE4MzNjLCAweDVhYmJkMzY3LCAweDM3N2E2Y2ZjLAotCTB4ZTAzZjlmODQsIDB4NmZmNDg2NzgsIDB4NjllZmQ5NWUsIDB4NWVmZDkzZjEsIDB4MjIxZjNmMDgsIDB4YzFmZWQ0OWMsCi0JMHg4YjVmN2U2OSwgMHg0M2Y3ZTY5ZiwgMHhlMTA0ZjlmOCwgMHhiY2RmZWYwYywgMHhlMmQ0MWVjNiwgMHgxMGMxZWM2NywKLQkweDNmMTEzYTdlLCAweDRlMGZmNjk3LCAweDdlMmQ0MWYzLCAweGYwODYwZjlhLCAweDY3OGUyNWYzLCAweDM1ZTZmZjU0LAotCTB4M2YxNjkwZjYsIDB4ZjA4NTBmNjMsIDB4MzM4MDA0NDMsIDB4ZDllMzdmYmEsIDB4M2YxNjkxZmEsIDB4ZTEwYTNmNWIsCi0JMHhjNjcwODJjNywgMHgzOTNjNmZmNSwgMHg5M2YxNmIxZiwgMHgzZjA4NzFmMywgMHg0MjY3MDg3MSwgMHhmZDZjZTBmZiwKLQkweGFkOWY4YjU4LCAweDkzZjA4NzFmLCAweGY1MjY3MDgyLCAweDdmMzk1ZTZmLCAweGU3MjdlMmQ2LCAweDY0ZmMyMWNmLAotCTB4M2UzYzljMjAsIDB4ZDhlMTQyMWUsIDB4ZjJkMzg2ZmIsIDB4MmQzZjE2ODksIDB4MzNmMDg0OWYsIDB4ZjIxNGUxMGEsCi0JMHg0ZTA0NWNmMSwgMHg3ZTJkMDllZSwgMHhmMDg0NGY3MiwgMHhhZTcwODM5MywgMHg5NjljMWZlOSwgMHhiNGZjNWExMywKLQkweGU3ZTEwODljLCAweDVkNzM4NDZhLCAweDdiOTVlNmZmLCAweGRjOWY4YjUyLCAweGEzM2YwYzkzLCAweGMxYjQ5NmY3LAotCTB4NDBkNzQzN2EsIDB4NGM5YjQ4YjcsIDB4MDhmMWVlMzgsIDB4NjRlOGJlYjQsIDB4MjZlOWQxNzksIDB4OGE4ODg3NjAsCi0JMHgzZGRhNDE3ZCwgMHhkYjZmYWQyMiwgMHgwOGZkOWIxMCwgMHhmOTE5ZGI1MSwgMHhlYzc4YzAzNywgMHhkYjUyZmFkNCwKLQkweGQxYjkzMTE5LCAweGQ2MmJiYjFhLCAweGM3YzlhNzEzLCAweGVhNmIyNTE3LCAweDY5YTQ5NDI3LCAweGJmNGUwN2NhLAotCTB4YzgzZTUzNGMsIDB4YTdjOWFkOWIsIDB4YTlhOTVmOTQsIDB4NWYyZWE0M2YsIDB4ZjBiNjFmOTMsIDB4NTRmZDRkNWEsCi0JMHgzZTRkMjZmOSwgMHgzNDRmZjk3ZCwgMHhkZTM3ODdmNSwgMHg2NGJmMjlhNSwgMHhmY2E2ODU2NSwgMHg0ZDAyZmY1MiwKLQkweDNmNzVmMmZlLCAweDE1MWZkNGQzLCAweGJmMjlhNDU4LCAweDRkMTFlNWEyLCAweDEzZTBlOGY5LCAweDNkOThmYzlhLAotCTB4OGZlYTZhY2YsIDB4MjlhMzVmNmIsIDB4YmQ3ODdmMWYsIDB4Yzc0MjdjYTYsIDB4NTI5ZTRkMjYsIDB4NzJlMjc5YzIsCi0JMHhjZjgxMTc5ZSwgMHgwN2ViYjMwOSwgMHgwYjllZDA5OSwgMHgzNzk4NGRkYSwgMHg0ZWQwZGIyNSwgMHg1Y2NiZGEwZiwKLQkweDRkMWQyOWM3LCAweDAwNmJhZjA2LCAweDg0ODY4MTRkLCAweGM5NzlkYmFlLCAweDUwNzQ5N2U1LCAweGE1NzdkZjNhLAotCTB4ZmQyNzEyZjcsIDB4N2JjOTlmN2UsIDB4ZmQ4MjMzODUsIDB4OTAyZmU5NDksIDB4MDY1ZDQ4MjQsIDB4Y2JlNWY1NDgsCi0JMHhmOTdmYzYyNCwgMHgxYzQ2MTcyOSwgMHgwZDZiZWRhMSwgMHg2OTYyMjNkZCwgMHhmNzkwY2JiZSwgMHhmMWY5NDA5NCwKLQkweDdjODBjMTU5LCAweDNhOTIyZDE5LCAweDI2NmQxN2E4LCAweDRiMmZmNzY4LCAweDU2NDE3OWNkLCAweDIxZjJlN2YxLAotCTB4MzA4NGVlNTQsIDB4Mzc5MmU1ZGMsIDB4ZTc4YWVjMDksIDB4YzE5M2RmZWIsIDB4NDIxODY4Y2UsIDB4Yzg0Yzk1ZTcsCi0JMHg4MmY3ODRhZiwgMHgzZjZkMDY3MiwgMHg0YmM5MmNhNCwgMHhkNDRkOTllMSwgMHg2ZmY3NTcwZSwgMHg2MjY3ZmRhMiwKLQkweGZmZDA0ZGZmLCAweDM3ZmEzZWZhLCAweGZhNmFlNWE3LCAweGFlNWExYThmLCAweDQ0Y2EzZmU5LCAweDNiNTI3N2ZiLAotCTB4ZWYxMGZlYjMsIDB4NGFlOTEyOWYsIDB4MGUxMTVlNDIsIDB4YTFlNmZmNjEsIDB4MzJmZmQ4ZTUsIDB4YTg4ZmRkMTMsCi0JMHhmNTBlOGZmYiwgMHhmMWYyMGNkZiwgMHgxMDlmZjQzYSwgMHg1NzY5ZmU2MSwgMHhiNDNmZTc2YSwgMHgxMzdmM2I0MiwKLQkweGZhZjZmZjliLCAweGEzZmVmMzNmLCAweDBhNmZmZTcxLCAweDFmZjM2NjdmLCAweDZmZTZjMTVhLCAweGZkNDM3MDY2LAotCTB4ZGZmODQyM2IsIDB4YTc3ZmYzMDksIDB4NGZhN2Y5YWYsIDB4NTg3ZmNlZDQsIDB4NjZmZTc2OTUsIDB4ZjViYmZmZDYsCi0JMHgzNmZmNzkyNywgMHhlMTNkZmZlYywgMHhiMGZmOWIyNCwgMHg2NGRmZWMyYSwgMHg3ZjgxYmFmNiwgMHg3NWQxMjk0YywKLQkweDE5M2ZkYTdlLCAweDQwZDExNTRjLCAweDBmZGExNzYwLCAweDI4ZTMyM2E0LCAweGIwZjIxMzEzLCAweGI4ZTM4NjkwLAotCTB4ZGJmMTlhMmYsIDB4ZGY5NGQxMTcsIDB4ODhjOGJmNTAsIDB4OWFhN2UyMWYsIDB4NmE0M2VlOGMsIDB4NmU1NDJjYjgsCi0JMHgxZTgxMzNjOCwgMHgxZmJhNzJjMiwgMHgzYTg3Y2I5OSwgMHhmZTQ0NDVhNywgMHhmZDk5NGYyNiwgMHgzYjc4ZTljMywKLQkweGYyMTk0NDViLCAweGU0OWE5ZTczLCAweDZiNTc3ZDA3LCAweDQwOTY3NzI2LCAweGMyMDkyMzNiLCAweDFlOWU0ZmY3LAotCTB4MmYzZDQ2YjUsIDB4NTFiNzNhN2QsIDB4OTFhMWQxM2EsIDB4MzkxZTM2MmYsIDB4YTNhYzhjOWYsIDB4MjYwNDJiZTMsCi0JMHg5ZmNlMTcxOCwgMHg0MjFkZmJhMCwgMHhlOTQ3MTFmNywgMHg5M2QyMDI3ZSwgMHg3ZThmZWQxMiwgMHg0M2Y3NGUzZiwKLQkweDliOTZhNGM0LCAweDY0NDc2YzdhLCAweDc0MTlmYmNmLCAweGU1MTJiN2ZjLCAweGRlNzljMWU3LCAweGUxNDUyMjgxLAotCTB4NGZmZTE5MTksIDB4ZDAzNTdkZDAsIDB4OTVhMzZlNjMsIDB4MWUzYzNmMjIsIDB4NmY5YzFmM2EsIDB4NWZlMGE5NzcsCi0JMHhkMmJjNzAyMywgMHhmNmYxYjdmNiwgMHhlMTQ3YzYwNCwgMHgzNmIyNzJjZiwgMHgwZjcyNTExZiwgMHhiNzlmMjhhMiwKLQkweDY3MDM1ZTMyLCAweDRkMmZmMTA2LCAweDVmNmZlZGEyLCAweGI0MjI0M2IxLCAweDc0YTE0MWNlLCAweDk3ZTAwMmM4LAotCTB4YzQxMjI0MDcsIDB4MDI0NzY0N2QsIDB4NDBjY2U0YzksIDB4MGM5ZDdiZTEsIDB4YTVkMzZkZmUsIDB4MzgyYTFkZTMsCi0JMHg0ZjI4YTRiMywgMHhhY2NmMWQwOSwgMHhlZjFjNDVmYiwgMHhiY2I2YWYwYywgMHg2M2Q1YmI2MywgMHhjYWU5YTJjOCwKLQkweDQ5NDIyNGNmLCAweGI2Yjk3YjdlLCAweDZkM2E4ZWZjLCAweGRhODVjZWZlLCAweDA5OGY5ZDNjLCAweDU5NTJiNWQ2LAotCTB4ODc0ZTlkZmYsIDB4ZDBhZWYzY2UsIDB4NjljNGU5YmMsIDB4OWIyZjM2N2UsIDB4MzU5MjVjYmQsIDB4Njg2ZDg0NzQsCi0JMHgwMzRmMmYwZSwgMHgxM2M0MTNiNCwgMHg1ZGVmNGZiNiwgMHgyNjgxZjI5ZiwgMHgwZWE1NmYzZiwgMHhmZjhiZTcxZSwKLQkweGRkZmZmZjRmLCAweGM5NmRhZmY0LCAweDFhYWUzZjhiLCAweDlhZTA3NTU3LCAweDdhYWFlM2Y4LCAweGQ0NmVlYjk1LAotCTB4NjdmYmU3ZTQsIDB4NWJjZmVhNjgsIDB4OWYyOWFhNTksIDB4NTM1ZjM4ZGIsIDB4NGZmOTdiM2UsIDB4Zjk1MmY5MzUsCi0JMHgzYmZkNGQ3ZSwgMHhjYTZiZDYxNywgMHg1ODdiYThlZiwgMHhmOTdiN2U1MywgMHgwY2ZjOWFlMywgMHhmNTM1MmZlZiwKLQkweDVhYmU5YjZmLCAweDlmNmMyZTUzLCAweGQ3MDNhYzNmLCAweDQxYjBlZjRkLCAweGEzZmMwZmUwLCAweDI5OWYwMDk5LAotCTB4ZmJmMGFjZmMsIDB4YTYxMjVmMjksIDB4NGMyZTdjNjcsIDB4NTMwZjQxZWIsIDB4OGQ3ODZlZmQsIDB4NGE2YmI1YTUsCi0JMHg1NzNlODE4NywgMHg1NGE0ZmZmOCwgMHhhNWY0MTQzNywgMHhmYWY1OWY5ZSwgMHhmNGE3Y2Y1NywgMHhjZWM5MTI5NywKLQkweDgxMmFkMjUwLCAweGQ2M2FjMDk0LCAweGU1NWVlZGM1LCAweGNlYmUzOWZiLCAweGQzMDhiMjExLCAweGNiOTMxMzJhLAotCTB4ZjI4MzRkYWEsIDB4YzFmMjAzODksIDB4YmViNjc1MTEsIDB4ODA4MDkyZTEsIDB4Y2RlMDIwZjMsIDB4YTViYTAwNGMsCi0JMHg0ZDRiYjVkMCwgMHgzOGNkNzRkNywgMHhiMTEwZWVjZiwgMHhjOTkwMWFmZiwgMHg5NGRjYjAwOSwgMHhmZjQwMzI2YywKLQkweDM3YTFiNmMxLCAweDc4ZjE4MjhmLCAweDI1YmU2MzM2LCAweGIzYWRlZDAxLCAweGUzZjhhMmJlLCAweDA5NWZjMDQ2LAotCTB4ZDM3Y2E3YTYsIDB4ZjNlMTNkMzEsIDB4NTdkYzdhNjIsIDB4NWY1MWU5OGUsIDB4YmUxZGE2MWQsIDB4ZWM3ZTk4ODUsCi0JMHhkMGZkMzE5MywgMHgzZmQzMWNiNywgMHgzZDMxMWFmOSwgMHhlOTg5NWJlYywgMHhkMzFmOWY0MSwgMHg1MzA3OWY0ZSwKLQkweDU1ZmY0Zjg1LCAweGYwY2EzYWU4LCAweDczZDc0ZWRmLCAweDMyOGViYTZhLCAweDM4NzhkOTM4LCAweGYxODUxZjVkLAotCTB4OTM5YmIwNDYsIDB4YTcxOTE4YzEsIDB4NTYzYzQ3YjIsIDB4ZTAyZWFiZjQsIDB4ODk2YTcwZmUsIDB4ZWYyYjNmMzEsCi0JMHhkNzA1MzE3YiwgMHg3ZjhiNzY4ZSwgMHg5ZWUxZTgyNCwgMHgwMTFiN2Y5MSwgMHhjMzllZTQ3ZSwgMHhlZDQ4MDE3NCwKLQkweGZhN2E3ZTdiLCAweGUyMDc4OWY1LCAweGNjYmRmYjQxLCAweDMxODcxNzRmLCAweGQxMmRjYmJkLCAweDAzMTZhZjBjLAotCTB4ZDRkOTIyMjksIDB4YTJmZTFiNWUsIDB4Y2M0Y2FlZmIsIDB4YjQxYzQ5MWIsIDB4YjQ2ZmJiZjcsIDB4NmQ0YjgwNDcsCi0JMHhjNWVmYzA0MSwgMHhmZWQ4YmFmMCwgMHgzYmMwMTY0NSwgMHgzOWQ3ZWNmMSwgMHhhNDMyOGU5MCwgMHg0ZGI4YmIzMSwKLQkweDA0OTRiYjQ0LCAweDdlMDM3MDVmLCAweGVjZDY3YTQzLCAweDZkM2YwMjRlLCAweDEzOTM3MGY3LCAweGI4YTdiZGQ3LAotCTB4OWZjMTVhOWYsIDB4ZmUwYWYyY2MsIDB4YWZlMTBlMWUsIDB4OTdmMTA5MzEsIDB4MTRiZmM1ZjEsIDB4M2JhNzg4ZmUsCi0JMHg2MTUxYTZlYiwgMHhiZTEzOWRmYywgMHgzOWNhN2YxZCwgMHgxYmJmYmU4OSwgMHhlMjc3ZTM0NCwgMHgwNTQ0YWVjYiwKLQkweDA5NDNlZGFmLCAweGUwMmRlN2VkLCAweGE3YmYwYTdmLCAweGMwMTg5MmY5LCAweGQ5M2VjODczLCAweDg3ZjdmNjYyLAotCTB4NGU4MGU3NGUsIDB4NmFiYzMwYjYsIDB4M2Q5ZWJjMWQsIDB4ZWVjMDM4MmYsIDB4NzA2NDkwNWYsIDB4Njc4MDhmMWUsCi0JMHhhNDBlYWQyNSwgMHgzYjZhNmQzYSwgMHhlZjliNDVhOSwgMHgwMjhhMTQ2OSwgMHg2MmI4Y2Y2OCwgMHhmZDAyOGRhNiwKLQkweGNmMWU3NGViLCAweDg0OTkzZDAwLCAweDQxNjcwMmE5LCAweDNjNzljOTkyLCAweGU0YzNlOTFlLCAweGNhMmM0MzdhLAotCTB4MTQ1ZjE5ZmQsIDB4YzdhMWZiZDYsIDB4ZjA5YzE3ZDEsIDB4MzFjOTlhMzgsIDB4Zjk1MDFlZGEsIDB4ZjVkZjdhNGQsCi0JMHhlMzUzZTRmYiwgMHgzN2UwNGM1ZiwgMHgxN2QyYWQyMywgMHhkMTQ0YmY2MCwgMHgwMzgxYmZmZiwgMHhiY2M0NjIzMiwKLQkweDIwMzZiNzAyLCAweGUwMmJlNmNhLCAweDdmNGQwNmZiLCAweDM5NGI5ZGI0LCAweGVkMjZmYmMzLCAweDQ4YzFlNGRiLAotCTB4NGFmYzI4NGUsIDB4ZjA0NjhhOTcsIDB4YmUwMzhkNDksIDB4ZjZiNTM4YjUsIDB4NWYyNmFjNTEsIDB4YTljODMyZGIsCi0JMHgxZmUwOTdiMSwgMHg3MjkyOGY1NCwgMHg1NzdjMDhjMSwgMHhjYmE2ZDljNSwgMHhkMDJlNWI2OCwgMHg1MzgyNTVmMSwKLQkweDYwNTVmODBhLCAweDNhYTNhYWY1LCAweGYwMTc1ZTRjLCAweGFmNWJlMmNiLCAweDQ2Y2Q0MTcyLCAweDdjN2VhZjljLAotCTB4MWEzNzdlOTQsIDB4YmY4ZjdkOGQsIDB4YWZiOWVjNTIsIDB4NmM3YzgyMjQsIDB4Y2FiYjdhZTEsIDB4MjQwYWZjYzAsCi0JMHhmOWMwNzY0YSwgMHgxZDkyNDkxNywgMHg2ODcxZDkzNywgMHhkMDdlMTBiNiwgMHg1MWZiNDcwZiwgMHhmMzM4MTVlNSwKLQkweGQ2Yjc1MmZkLCAweGNmOTE5NTdlLCAweGJmOTgxYWNmLCAweDZlZWZkZjQwLCAweGUyZTEzN2U4LCAweGIwZDlhYmY4LAotCTB4NWJjYzBhN2YsIDB4OTY5YWM3OGYsIDB4Y2EyZjI2ZjMsIDB4MjcyZmZkMTUsIDB4YmYwNTQ3OGMsIDB4NmVjOTYyOTUsCi0JMHg1OGFmYzI5MSwgMHhkNWY3MDQ3NywgMHhjNDc5MjRhNywgMHgxN2EyZGYwMywgMHg5NmRmOGY3YiwgMHg5YWFhYzI3NCwKLQkweGExZGE0Y2I3LCAweDc5NzJiYjlmLCAweGRiNzVjNDQ3LCAweDlmNWY1NDA3LCAweDFlNDRiZGZlLCAweGEwNWNiYTAxLAotCTB4YTBlMzU0YjUsIDB4ZTQzMTA1MTYsIDB4YmJmNWVkODQsIDB4NjE4YjJiOWEsIDB4ZmIwZDNlZmQsIDB4ZTcyZmFhMTUsCi0JMHgzODA3MTI5MCwgMHg2MzQ5Y2IxZCwgMHhlN2U3ZDgwZSwgMHhmMDA4YTE4OCwgMHg4N2ZjOGU3NCwgMHg0ZThhOGM2MywKLQkweGUyMTM0NDY3LCAweDQ3ZWZkYTg5LCAweGY2YTNlM2Q1LCAweGVkNGYyNmJiLCAweDhjYmU0ZDc3LCAweGU3MDg5NGRjLAotCTB4NDk0ZjY1ZDksIDB4ZmNlMDJmYzQsIDB4MTI3ZmU1MzQsIDB4NzlmNzQ4OWQsIDB4ZWMwMWFlYTQsIDB4NWIxMmM1OWQsCi0JMHgxMjcyZWZkNywgMHg1ZjFkMGE2MywgMHhlNWNmYWJmNSwgMHg3OWZjZDI5NCwgMHhjYTIzZDk5MSwgMHgzOGZjZWM3OSwKLQkweGMwOGFmZTM2LCAweDk2ODc5MzZhLCAweDczMWU2YjFmLCAweGRhMDQ1NWViLCAweGZkNjAxYmZiLCAweGVlMDhiNzkxLAotCTB4ZjhkZWFlYjUsIDB4ZDdlM2FlZmQsIDB4ODdiMTU3OGYsIDB4ZjMwYjlkN2EsIDB4MTNhZjU0NzEsIDB4NzY0OGZlM2MsCi0JMHg4NTMzZTcxMSwgMHg0ZThjNjMxZiwgMHg0NTIzN2Y4ZCwgMHg5NzQ0YmY5NywgMHg3ZmNiYTMxZiwgMHg0MDFmNzk2ZiwKLQkweDI5NWVmMjM0LCAweGUzOGM1MzdhLCAweGZlYzM3Yzk4LCAweDIzNzYzMDRlLCAweGY4NmY3ZjNmLCAweDVmZTBiZDQ5LAotCTB4MWZjMjgzZjIsIDB4ZDEzMzkzYWMsIDB4ODUwN2U2M2IsIDB4ZmM2YmQxOWYsIDB4NWY4MjQ3NTcsIDB4NWI0YmVhZmQsCi0JMHgyYTlmYWE2NSwgMHg0MWRhNzk1ZSwgMHg2ZDNhN2VhOCwgMHg1Mzc0NGM2YywgMHg1ZGFkNTdmYSwgMHgzODNlMDBlYSwKLQkweGMwMWQ5NDY1LCAweDYyZmRhN2NmLCAweGJlODIzZjkxLCAweGYwYThkN2JiLCAweDgwMjZjNzgzLCAweDQ5ZmUwZGZmLAotCTB4ZmY1OTlmZTEsIDB4YWViMGY1ZTgsIDB4NzI1NmIxN2YsIDB4OWQ2ZDVmYTIsIDB4ZjJhNjY4MzksIDB4YmYzY2QzNWEsCi0JMHhmZTYxNjQ5OCwgMHgzYjJmY2IwOCwgMHg0NWJlNDIyZiwgMHhiZjE1OWZjYiwgMHg4NWQxM2E3ZSwgMHgzMTRlNTJmYSwKLQkweDg4MzhmZmEwLCAweGQzNGQ3ZmY2LCAweGRkNjA1MzI3LCAweDI4ZGQyNWFmLCAweGQwNzZmYTY3LCAweGI4NzE1N2ZmLAotCTB4NjI5YTk1M2UsIDB4NDZlMzk3N2EsIDB4YjNkYTExM2UsIDB4YTNmMzZkNWYsIDB4ZmMwNzQ1ZTcsIDB4MDZmZDAzYWIsCi0JMHhkY2U1ZmFmYSwgMHhkYTMzMmY4ZSwgMHgxYWZlYTAwNywgMHhmZTgzYzY0ZiwgMHhmYzQxZjA1MiwgMHg1ZjE3OGVjYywKLQkweGZjMGIyZTdkLCAweDdlOWI2N2E3LCAweDc4NTQxMGVmLCAweDI3YWNlNDUyLCAweGFmNTdmYjMwLCAweDk3ZDZmYWJiLAotCTB4ZDUwZTU0OWQsIDB4NGY2MmEzZjYsIDB4ZmVmODVhYjgsIDB4NTVhNTk1YTMsIDB4MTU3MWQwNTIsIDB4YWI1NTkzZDUsCi0JMHgzZjRjYjcyNSwgMHhjMmY0YmQ1NywgMHgzZjgyY2Y4YiwgMHhmNzY2OGZmMywgMHhmMmJmMGE3MCwgMHhhZjA3NWRhNSwKLQkweDhkY2FmOWE0LCAweDM2NjI4MGQyLCAweDE4OTA5YjBkLCAweGZkMmQ0YmE2LCAweDk4NzY2MTdmLCAweDc3OWIxNTBlLAotCTB4ZDhhMzVjOTksIDB4YzJlMzA3ZjcsIDB4YjhkY2E4ZjQsIDB4ZjU0NjQ0YzMsIDB4NjA0MTQ3YzYsIDB4MTZjM2E5ODcsCi0JMHgyMzgxMmU4MSwgMHgxMmZlYzA1MywgMHgwOWJiZmQ1ZiwgMHhiYjdhN2VlOCwgMHg0NmE2MDY0MCwgMHg1ZGVhZTdjMCwKLQkweDllMDE5ZjY4LCAweDRlOWM4ZTkwLCAweGVhZTliYTIxLCAweDgwYmE1MmQ3LCAweGE0ZTg1NzNlLCAweGZhZTIyZjJmLAotCTB4MzJiOWUwMDQsIDB4N2U1ZjlmOTEsIDB4ZmU4NGUyMWQsIDB4ZmNjMzc2NjQsIDB4ZGJiZTVmY2IsIDB4NjkzOGYzMDEsCi0JMHhmZDdjNjNhYywgMHgwZjQ0ZDJkYywgMHg5MjVjYjdlZCwgMHhiMjk4OWQxMywgMHhkZmNmZTVlZiwgMHg2ZjM2ZmM4YiwKLQkweGNjODliZGZmLCAweDY0MTllNThmLCAweDFlNDliNWMwLCAweGJiOWJmMzA0LCAweDVmOWMxNmVhLCAweGRmMjJmMTE5LAotCTB4OTYyNzNmOTUsIDB4ZGNmYzdlODAsIDB4NDYzNjhhNDgsIDB4OGQ0ZjhiOTAsIDB4YjkzODBlY2MsIDB4NzRiODFhODYsCi0JMHhiMmU5Mjc3ZSwgMHhmZjMzNzE4MywgMHgxNGZjNjIyMSwgMHgzZjQ1M2YyMSwgMHgyZTdjYmRkOSwgMHhmY2MzODJkNCwKLQkweDRlOGM1MWU3LCAweDVjMGQxOTZmLCAweGFmMTVhOGFlLCAweDY1YTZkN2U2LCAweDMzOWY0MGVkLCAweGUxMDMzYzQzLAotCTB4MTg5NmE1YmMsIDB4ZTEwZjhlNjUsIDB4ZGM1NzBhMWIsIDB4ZDE5MDM4NWYsIDB4Mzk4Y2I4ODcsIDB4YzNiNTFkYmMsCi0JMHhkNDNiZTAwYSwgMHg5NjNjOTc2ZiwgMHhmMjNiNGQyYywgMHhmZmI4NmE0ZCwgMHg3NGZmNzg3YiwgMHgzZjYwZDFkYywKLQkweGJjOGM0YzlkLCAweDI5MjgxODBmLCAweDcxZDc0ZjcyLCAweGU0YTk3ZjE1LCAweGQzN2JjOTliLCAweDE1YmU0Y2MzLAotCTB4NThkZmY3NzksIDB4Mzk3ZmU1MDQsIDB4ZGEwN2U0YzAsIDB4Yzc0OGZhYzEsIDB4ZTU4ODFjMTUsIDB4YTgwOWE2M2IsCi0JMHgxODI0Y2MwZiwgMHgyNDliYWU0OSwgMHg3MmRhZDcyZSwgMHhiOGU4NGY4NSwgMHg4YThjNDI4ZCwgMHgxYzdlMDA1ZiwKLQkweGE2ZWQxZmUyLCAweDNiNjhhN2IyLCAweDg1YWNiZTk1LCAweGUxYmQxY2ZlLCAweDhmM2I3MjI5LCAweDkwMDlmZmNiLAotCTB4ZjJjM2NiZmYsIDB4YjkzMTU2NGYsIDB4OTViZWRiZWYsIDB4OTI1NTNmMTEsIDB4NDE2N2M1ZmYsIDB4Y2E3Y2E5NWUsCi0JMHhhOTU3OTAyZSwgMHhlOWZkZTYwNCwgMHgzZjgzYjY4NiwgMHg2OWYyNzJhMSwgMHhhZDUzOTE0MCwgMHg2OWNiZDRmZSwKLQkweDA5N2JhNmY5LCAweDRlNWVhN2YwLCAweDQ3NWMxZDNmLCAweGZkMjljYTIyLCAweDA3NGU1MTFlLCAweGVhOTdmYzc3LAotCTB4MGU3ZjA1NGYsIDB4MTUzZmFiNDksIDB4MWUxN2Q4N2QsIDB4YjdmMGZhZjUsIDB4NTNlMjE3NDYsIDB4ZWZlOTBmYWYsCi0JMHhjZGU5YzkwMCwgMHgyOWRmMGE3ZiwgMHhkYmYxNTZmYywgMHg3N2EwNjFlYSwgMHhmMGE5N2M0MiwgMHgxNTJmODg1ZCwKLQkweDU3Y2ZkM2JlLCAweGY5N2QzZjhiLCAweGQxOTlmMDYxLCAweGY2YmM5NTcxLCAweDRhMTQ5NGZlLCAweGMxNTZhYWNmLAotCTB4YmI2MTc2NmQsIDB4NzhhNzkwZGQsIDB4YmZiMzMwZjIsIDB4MDBjYTc3NzEsIDB4Y2JhZmRlNzUsIDB4M2RmNTc0MDcsCi0JMHhhZTg5N2NiYSwgMHhhZjk3NTdiZSwgMHhiM2Y3ZDVkMywgMHg5YjRiNDg3ZCwgMHgwNDFmMjA4OSwgMHg0NWE1ZjUzNSwKLQkweGZjNzM4NjQ0LCAweGVlMjI2ZGVlLCAweDk4ZThiYmJiLCAweGFlZmI2ODFiLCAweDk5N2VhOTBkLCAweDE2YTU4M2VhLAotCTB4NGVlZmJmYjYsIDB4ZmU4MDM1MzAsIDB4M2I3NjcyZWEsIDB4NjE2ZjIwZTIsIDB4OTJhZWI1ZmUsIDB4Y2FhYzQ3NmUsCi0JMHgyYWQyM2MzZSwgMHhmMGVkZmVhMiwgMHhmYjQ4YTI5MywgMHgyMmQxNmExMywgMHg1ZjQ4M2E5ZSwgMHhhM2JjZWNlNSwKLQkweDVkMGRiNDUwLCAweDQ2OTc3ZTA4LCAweDgxYWUwZGQxLCAweDM5YjdmNTM5LCAweGFiYTFiY2UwLCAweGU5ODZmZDM1LAotCTB4YjdkY2ZiZjQsIDB4ZTg1ZjBjNDUsIDB4YzE2NDc2OGEsIDB4MzFlYzg4YjgsIDB4MGJlZDUyMGUsIDB4OTlmOTExNGUsCi0JMHhiMzNlNzQ4OSwgMHg2MGZlZDk1YiwgMHg1ZDlkMGFjZSwgMHg1ZjIwNTY0MSwgMHgzMWVlZDk5NCwgMHhmNmE0NWU4MSwKLQkweDlmYWQ1MWZjLCAweDA1NzdmMTllLCAweDRhYmU1Nzg3LCAweDU3YjRhZTViLCAweDRkMTU4ZGY2LCAweGRmMmY3MmRhLAotCTB4NWM0OTU2NjcsIDB4YTMyNjhjNWYsIDB4MzA4ZjNlZDksIDB4YWZkNzA5M2YsIDB4MGRlNjYyODUsIDB4YmJmZTI5ZDMsCi0JMHhmODA0ODhmNiwgMHg0NDU1YTdhNSwgMHgxMDZjZjdmYywgMHgyMjZmZTBmYywgMHg0ZGNhMDI3MiwgMHhiZDQ2ZTkwZCwKLQkweDJjZTllMGE2LCAweDZmYTk4NWM4LCAweGNiNzY3M2JkLCAweGQwMGYzOTQ3LCAweDNmNWI1NTJhLCAweDlhNzdmYWM4LAotCTB4YzdmYWRkOWUsIDB4ZmU0MDZmMTEsIDB4M2Y0MzQzZDUsIDB4MTdlYmJkMjAsIDB4NzllMGI3NmMsIDB4M2I3NmQ3NmUsCi0JMHg2ZDc2YWZjNiwgMHgwMWY0MzdkYiwgMHg3NjY2YmZjOCwgMHhiNmJiMzhjMywgMHhmYzA1OTk3ZiwgMHg1Y2M4YjVkMywKLQkweDZiYWI3YTBlLCAweDJjZDdkYjA4LCAweDU2NjVmNmRlLCAweDRiOTNhZTA3LCAweDkwYmY2ZTkwLCAweGE3YWFiZWQ4LAotCTB4ODU4ZmViZjUsIDB4NTlkMjkwMDEsIDB4ZGRiZmZhYzEsIDB4ZGE5ZGZlOGEsIDB4YTcxODJkZDcsIDB4Y2JlZGI1ZGIsCi0JMHg4N2VkYWYxYywgMHgzZjBkNGY5YiwgMHg5M2IyZWZiZiwgMHg3YzYwOWJlOSwgMHhiYTdjZWNiMSwgMHgyZjA5OGRmNiwKLQkweGFiZmVkM2Q0LCAweDY2OTg3NzliLCAweDM3ODJmMmQzLCAweGZhMDU5ZWZmLCAweGIzMTM2YmIwLCAweDhlYTUzYTZiLAotCTB4N2E3Y2UxZTcsIDB4OGJlZGQyY2QsIDB4NGVlNzhhMjQsIDB4NDI2NDhhMTAsIDB4NGRmMGQ0N2UsIDB4MDkxOTljYmUsCi0JMHg3ZjQ3N2YyZiwgMHhmMWYxN2Y1MywgMHg3YzE4ZmZkYSwgMHg1M2VmMTgwOCwgMHg0N2Y3NmFkNSwgMHhiZmVmMzAwOSwKLQkweGU4MDFmYzdlLCAweGU0NjZlZDgxLCAweDlmYmU2NTRiLCAweGVlZDFlYTA2LCAweDBmYmNkOGI4LCAweGZkYzdiY2MzLAotCTB4MDg1YmNkMmIsIDB4NWZkZTY3ZjYsIDB4ZmJkMzkzZmUsIDB4ZTM4NWM5MjEsIDB4NmY0MWNiZDMsIDB4MWY3NmRmM2UsCi0JMHhiYmIyNWZlNiwgMHhlNGZkYmM3MSwgMHg3ZmE2ODFmNywgMHhhMjZmYmEzMSwgMHg3YzVjNzc3NCwgMHhlNGZmMzlkZSwKLQkweGVlOWJlZWYzLCAweDc0ZTJjZjZmLCAweDhjN2RlMjc3LCAweGUzOGVmZjM3LCAweGVlN2FhZWZiLCAweGYzYTFmZmQ2LAotCTB4YjM3M2VjNTcsIDB4OGYzZGE0YTEsIDB4NjkzYTZmOGUsIDB4MzE2MTgzYjQsIDB4MmY2N2ExMjMsIDB4ODc5OWM0ODQsCi0JMHg4YzAwNjVmYywgMHg4YWU3ZTI1NywgMHgzMzJkZjFmYSwgMHgwNDhmZmRiMSwgMHg1ZmI0YzZlNywgMHhmN2MwOGI3MiwKLQkweDc0M2Y2Yzc1LCAweGFlMWZiNzNkLCAweGY2ODY1YzFmLCAweDY2MWVmNWU4LCAweDQ5NjMxM2FmLCAweDg4NThkZTQ5LAotCTB4NDZlMzlhZmYsIDB4M2VjOTI3M2YsIDB4MmRmYzg1ZWMsIDB4YmI1ZTc4OTMsIDB4MjA1NzdjMmYsIDB4ZTNkYTgxMWUsCi0JMHhkYTJkMGZkNywgMHgwZGU5ZjYwMywgMHgzMzQxOGQ4MywgMHhmYTQwOGY0YiwgMHhjZjdmODNiZSwgMHg2NjVmZWVkNSwKLQkweGRiZjliNTc4LCAweGI3ZjM2YmE2LCAweDgyYjc3ODcwLCAweGJmZmI0NTcxLCAweDgzZjA0NGI1LCAweGYyMWE1MzVmLAotCTB4MzlmODAyNTQsIDB4MTExMmI5YTUsIDB4YTkxMzg4MDQsIDB4ODRmYjBhNWIsIDB4ZWRiNDRhNWIsIDB4NzY3ZWMzNjcsCi0JMHhmMzhmMTg1YywgMHhlMTUzYmNhMywgMHhhNDZhMjFmYywgMHg2MWI4Zjg4MCwgMHgyNGZhODg4NSwgMHhmODQwNTMyYSwKLQkweGM2MTJiOTI1LCAweDI4NjI3ZTEzLCAweDE3M2MwMWM5LCAweGYzNWYxOThmLCAweDBkY2UwNjMzLCAweGYxY2Y5ZGYzLAotCTB4ZDBlYTQ2NTUsIDB4YmUxNzIxZGUsIDB4MGU2MjY2ZjksIDB4ZGEwOTczZjgsIDB4ODQzZGYzNGIsIDB4ZjVlZDQ3NWMsCi0JMHgzMDQyODliMiwgMHgzY2U1Y2E5YSwgMHhiMjYzOTEyMywgMHg5MDI5Y2ZjMSwgMHhhNzNmMWFhMywgMHgxZmJmMGYzNiwKLQkweDVjZTE4NjI1LCAweGZjNWY3ZWFjLCAweDdmYTc0M2Y4LCAweDM0N2ZmY2E2LCAweDkwY2RkYTgzLCAweGYzM2JiOWUyLAotCTB4YWFmYjI5ZDcsIDB4MWUxOTViM2IsIDB4N2YwNGFiNmIsIDB4NTA1NWYyMWEsIDB4N2M1MzlmNTIsIDB4ODVmZTYyNmQsCi0JMHgwNjM4M2YzZiwgMHhlN2VmMmFlNSwgMHg3ZWQ4NjJhMywgMHhjY2VkMDMyZiwgMHhmNjY3NmU1YSwgMHhmMDE4YWVjOCwKLQkweGE2YjRmNDZmLCAweDAyYjFmM2YzLCAweDNmMDIzNzg3LCAweGFkZmJlN2VmLCAweDNlZjljMDNmLCAweDBiMjZiYjRkLAotCTB4ZmRkODIyOGQsIDB4NzhmZDFiYTQsIDB4NTkwYjY0ZjIsIDB4ZWUwZTIxMWIsIDB4YTdlMjkzMDMsIDB4MWZmZGMzYTgsCi0JMHhhMDFjYzRmYywgMHhhM2NkZmIyMywgMHg1NGUyNjM0ZCwgMHhkZDcxNWI3NCwgMHg2ZjU2NjM2OSwgMHhhOGVmYzAzYSwKLQkweDFmZTgzY2VhLCAweGVmZWMyZmM1LCAweDJkZmJhZjAwLCAweDIyNGE1MzFkLCAweDk3MWNmN2NjLCAweGZlYjdlMmRmLAotCTB4NmViNWY3OGEsIDB4MDA5NTRkNmEsIDB4MTY0ZDM3MmYsIDB4OWZhNmU3MzUsIDB4NzViZWY4OTgsIDB4ZTMwMzE5MGMsCi0JMHgxYWViN2UyYSwgMHhjYmEwMDRjNywgMHhmNzBkZDExZSwgMHhjZjViNmFiMywgMHhjZTExYmM5YiwgMHgwNGY4ZjQ4ZiwKLQkweDk3ZGZlOGY4LCAweGNmODA2NWRjLCAweDQyYzdmZjYzLCAweDhmYjU5ZjYwLCAweDQyNjRlNzlmLCAweDZlMjY3NGJjLAotCTB4NGZlMDNkZTUsIDB4NzVlMzgyZmEsIDB4NzQ4OWQ5YWEsIDB4NGYzOGI5YmUsIDB4NjZmZGEwNGEsIDB4YzM0NzNiMzYsCi0JMHhhZjMyNTY5MSwgMHhhZDE2MTUzZiwgMHhjMTFjMTA3MSwgMHg5MmY1MjlkYSwgMHgyM2JkNThhYiwgMHhhNDRkNjcyNiwKLQkweDEyOGEyZmY5LCAweGZiODU3OWY4LCAweDlmZTE1Y2JlLCAweDNmNzk2ZThmLCAweDYxZjMwN2I3LCAweGVlY2M5OTNkLAotCTB4NmJlNmY1ZDUsIDB4NTNkMWYyODIsIDB4ZGY0MWY4MjQsIDB4ZjMwOWZlYzMsIDB4ZTAzZWVjYzUsIDB4OTcyYjAzM2UsCi0JMHg1OTdhNjI2ZiwgMHg5ZTNkN2JlMSwgMHhjZjBjY2RkMywgMHgzYzA1ZmY0YSwgMHhmMGNjZDIzZiwgMHhjMTU5ZTBhMywKLQkweDRhYmM3ZWFmLCAweGFlYWZhYTdkLCAweDZlMjFmYjU2LCAweDMyZmQxOTY4LCAweGFkMzU4N2FjLCAweDQxNDBkMzgyLAotCTB4NGMzYjE4ZDUsIDB4MmRiNTg3MjAsIDB4NjdlMDRiOGYsIDB4NzA2MmUxOWYsIDB4YTU5MDdhZTksIDB4NmE5ZGQ3M2UsCi0JMHg2ZGViZTc2NiwgMHgwMmNkNTdkOSwgMHgwNTZjZjkzZSwgMHg3YjY4NGJiNSwgMHgwZWYzOWNjZiwgMHgxOWY3Nzc1OCwKLQkweGJkYzFlZmRjLCAweDkxNWRmOTQ5LCAweDdkMTZmZGFjLCAweDc5Y2Y4MWY1LCAweDFhYTM2NGVkLCAweGYzOGUyYTZlLAotCTB4MDkzY2FhZTYsIDB4NTdiNzI2ZGMsIDB4YWEwNjkwZWQsIDB4MzlhYTY5ZjgsIDB4ZWY5NWNiMGUsIDB4NmNhZTU1YzksCi0JMHhjM2ZiNGVmOCwgMHg5OThmYzg3MSwgMHg2Nzg3YzQwOSwgMHgzZWYxZGEwNiwgMHhiMTc1ZWRkYSwgMHgwM2NiMGY4YywKLQkweDRmOTg0YzNiLCAweDdmNGFmYWM1LCAweDc5N2EzZjRhLCAweDhkYWM1NjlhLCAweGQwNWQ5OWZiLCAweDUyZjAxODMxLAotCTB4ZTNkZTBlNmMsIDB4OWRhN2MwOGUsIDB4YmJlNDBlOWMsIDB4Y2ExZTEzYWUsIDB4OGJmZjU5YjcsIDB4OTQ3Yjg5ZDYsCi0JMHgyYTQzYTI3NSwgMHg2Yzg5YzU1MSwgMHhhNzNkMzMzNSwgMHg0NjA2Mjc1YSwgMHhkNDE2Mjc1YSwgMHgxZDAyMDZiYiwKLQkweDFmNGI2YzE2LCAweGUwYjI0MjA4LCAweDQ4YzRjMmVkLCAweDNlZmJjNGViLCAweDg4Nzg1ZTc2LCAweDlhZWNkZmRmLAotCTB4MmI4OWQ3NDYsIDB4MzRjNGViNTQsIDB4YmU4OWYyMGIsIDB4YzRhY2RmOWQsIDB4OWQ2NDVkNjEsIDB4NWZmNmU4NTAsCi0JMHg4N2RlNmZhYywgMHg3YzgyMjI3NSwgMHhkNzZiMzY2ZiwgMHg0YjViNWI4OSwgMHg3NWI4OWQ3MSwgMHg1N2I5YTg5YSwKLQkweGIxN2NkZWIxLCAweDcxMmYyMjc1LCAweGI3MjVlNjA2LCAweGJjZmYwMjM1LCAweDQzZTFlZGNmLCAweGZhMGViZTNjLAotCTB4MzRlMmY1ODEsIDB4ZGU4NGZmZTgsIDB4N2E1ZjQ2ZWIsIDB4ZWFmZWIxZmQsIDB4M2MyNmZmZjUsIDB4YzE3ZDdhMmIsCi0JMHg3ODFlZWMyZCwgMHhjODI0M2U2ZiwgMHg1MDY2MGJjZiwgMHgzZjAwMmViZCwgMHhlMGJlYmQzMiwgMHhkMzE3ZWUwZSwKLQkweGQwMTJkOWU5LCAweDdhZDU2M2IzLCAweGYxYWZiNTk2LCAweGI2YTE3NWIyLCAweDMzMTdmNTI1LCAweDFhNGZmOTY5LAotCTB4YWQxNDc3MjUsIDB4ZGViMDkzZmYsIDB4ZGRlYjUxY2QsIDB4MTM3N2EwZDMsIDB4NzJkZGU4MjIsIDB4NmIzZjc3YTYsCi0JMHg1M2Y2ODMxZCwgMHg4OGZiZjM1ZiwgMHhjZmFhNWJlYiwgMHhmODExZGMzMiwgMHhhYjRjZmE2MywgMHhiMWNlOWVlNiwKLQkweGRjY2JiZmQxLCAweDRmYjJmMjBjLCAweDRmYmI3M2M0LCAweDc3YjAxZGI4LCAweDgyYzZlZmY0LCAweDE0NGE3YTlmLAotCTB4YTcxYzRmMWIsIDB4NWM4ZmE3NjcsIDB4ODFlYTk5M2IsIDB4OWVjYzM5ODIsIDB4MjIyMGRlYWUsIDB4OTk5YTZhZmUsCi0JMHg0NDY0ZDdmYywgMHgzZjM0NWRmYiwgMHgyNmFmZmIyNSwgMHg2MzZlNTdjOCwgMHgwNjc0NmZlNywgMHhmYTJhNzljNSwKLQkweDY4ZWJlZTU3LCAweGU1NzAzZjAwLCAweDBmY2YwMTZhLCAweGYwMTljZTIxLCAweGIzZTM4ZjM5LCAweGZiODk1ZGNjLAotCTB4ODBmYzdkMTUsIDB4ZTZhZDE3ZTIsIDB4YWViN2U2ZjUsIDB4M2VhOWZmNDYsIDB4ZTMzYWEwYWUsIDB4YWZiMGQzZGEsCi0JMHgzYTMzMzYyOCwgMHhmYzE2NmYxNCwgMHgxY2UxNTNhYiwgMHhmZGNmNTc1YiwgMHg1NDFiOWUzMCwgMHhjN2RmYjQwNywKLQkweDE1Y2VmOWYwLCAweDYxOWI5OTgzLCAweGU4OWVmNTVmLCAweDhkY2ViNDhlLCAweGZjYTVlM2QxLCAweDdlY2JjNDFmLAotCTB4ZmZiMTk3OGEsIDB4MTdkMmYxZWYsIDB4OGY3ZGE4MWUsIDB4M2UzZDY0ZmUsIDB4YmQ3MTQ1YzYsIDB4ODJjNjRkOTIsCi0JMHhmMDYyN2UxYywgMHhkZjkxNWVhMCwgMHg2NDJlMzExMSwgMHgzNWMzZTNjZSwgMHhhMjBiZmVmNywgMHg2N2RhYmU5OCwKLQkweGRjNDAzNmYwLCAweGUyYzM1Y2FlLCAweGRhYWRlNjQ3LCAweGU2OTEyYmI4LCAweDY4YzgwNjY3LCAweDViY2Y0NzcwLAotCTB4NDM4NzVkYTksIDB4MGJiMzdlZWIsIDB4NzU5OWY1ZDcsIDB4MTM4ODA1MWIsIDB4ZmRlZmNiOWMsIDB4YzcxZmZiOTQsCi0JMHg1OGVlMTJmNywgMHg1YTc5ZDc0OCwgMHhkOWI2NzY3ZiwgMHhmYjlmZTcwYiwgMHgzN2E4ZGQyZCwgMHgxMDVkYmUxNSwKLQkweDNhOTdlY2M1LCAweGM5NjM4ZTNlLCAweDdkNzE5M2RkLCAweDI4OWMxMTZhLCAweDViMGI0MThmLCAweGUwOWQyOGFmLAotCTB4MDliNjg3MWQsIDB4NzRlMTRlNWYsIDB4MTY4ODdlNjEsIDB4NGE1YWM3NDYsIDB4MjllNzkwMzcsIDB4OGViZjNjYWQsCi0JMHgyYmI3ODFkOSwgMHg3N2UwODBmOSwgMHg3NzU3YTAwOSwgMHgwODVkZWM0OCwgMHg5YzBiYzQ4MSwgMHgxMWY1YWEwOCwKLQkweDEyZjJkNWNlLCAweDc2ZGU3NDU1LCAweDVhZmZmMTg0LCAweGZjMWY4ZGMxLCAweDQzZWZiZmY0LCAweDllZjkzZWU3LAotCTB4ZTVmZDMxZDksIDB4MGI0ZjA1NzcsIDB4NmZkZTc0NzQsIDB4ODMxZTJmNjksIDB4MWI4MjMzZTcsIDB4OGQ2OGM3ZGYsCi0JMHhlMzg1NzNjNSwgMHgwNzlkZWM4ZCwgMHhjYmQzYjc5OSwgMHg1YzNiZWMwNSwgMHg4ZGNhYmYyYSwgMHgxZjg4NzAzMCwKLQkweDljNjBiMjJkLCAweGM2OWJmNjFlLCAweGJkZWQzMmVjLCAweGQ3MTM1OTQwLCAweDRlZTM1ZGYzLCAweGRhM2I0OTZhLAotCTB4MzE3OGUxNjMsIDB4ODAyNjM3ZWYsIDB4YjUxODI0NTcsIDB4YzhkZDVjNzEsIDB4ZmMwMDNmZTcsIDB4MDJkZmNkZDcsCi0JMHgzMTM5MjQ5ZiwgMHhhNzZlZjQ2ZSwgMHhlZWM5ZGRmMiwgMHhkYjdjZjA2ZiwgMHgzMzQzOWM5MCwgMHg1YjNmN2UyOSwKLQkweGRkNzllMjJlLCAweGMxZDcwNjZkLCAweDFlNmZhMDg5LCAweGNiYzgwODkxLCAweDBmMjU3YjY3LCAweGI4YWMwNzViLAotCTB4M2JlZTk0ZWUsIDB4NGE1ZWY3ODYsIDB4MjkxMWVjNTksIDB4MmZhZDg4N2QsIDB4ZmU3OGY4YzcsIDB4MGY2ZGQ3NDQsCi0JMHg2MDQ4NDRmOCwgMHg0ZGZiYzQxYywgMHg3NDI4ZWY3MywgMHhlYzY0ZGY4MSwgMHgyZTcwYTVmZSwgMHhmMzgxNzM3NiwKLQkweGU3YTA0MWUwLCAweDkzYmRlY2MzLCAweDcwMGJjYmEzLCAweDRmZjc3NjlmLCAweGMzYjc5NDA1LCAweGZlZDA2ZTk0LAotCTB4MDdhOTY5OTYsIDB4ZWY3ZWQyMGYsIDB4ZTc4MDllNTgsIDB4MDkzZDMzNWMsIDB4ZDdiOWMyYjcsIDB4ZGJhMmJkY2MsCi0JMHhiZWNkZWI0NSwgMHg3MzgzNmVjMSwgMHg0NTIzYTlhZiwgMHhlN2UxNTVlMiwgMHg3ZThlZDIwZSwgMHgzZjc1OTk5YSwKLQkweDVkYzYwNWJkLCAweDMxNDNkNzRlLCAweDg1ZmRkMjE1LCAweDRhYmYyMTAzLCAweGIyYjVmNmMwLCAweGIyOTAzNGQ3LAotCTB4ZjNjYWZiNGUsIDB4ZmZiNGIxYTYsIDB4ZDAwZjVhMzIsIDB4ZDU4YWJiNWUsIDB4ZGMxMjZkYWIsIDB4ZDY1YjdhMTAsCi0JMHhjYmVhMzhmYSwgMHgxZjAxMjZiMiwgMHhmNmE3Njg5NiwgMHhlYjgzMTQ2ZiwgMHhkYjcwYTI4ZiwgMHgzNGY2ZDE1NywKLQkweDAzZGEwZjNmLCAweDViZDhhNmRjLCAweDk2YWIzY2UxLCAweGU3ZGIxMzhlLCAweDY0NzllM2Q2LCAweDhiNDc2ZDE5LAotCTB4NGZkMzdiNDksIDB4NTVmY2RlMTEsIDB4NDQ3YjgxMDIsIDB4OGZhOWI5ZTUsIDB4YmRiYzAyZTUsIDB4MGZjYTFiOTIsCi0JMHhjNjI1ZjhlZCwgMHhmZGEyY2M4ZCwgMHg2N2YwYTIwZCwgMHhlODg1MWQ4YiwgMHg3MDQwN2I1NywgMHg4MzIzM2JlMiwKLQkweDVkN2U5MDMzLCAweDcwNjg2MTMwLCAweDY0ZmQwZDNjLCAweDQyZTlkNzE4LCAweDcxZDUxODM0LCAweDE2MTZjOTA4LAotCTB4YjBiNjVjZGYsIDB4ZDVlNjAxYmUsIDB4MWFhNDI3MjEsIDB4OWJjZWFmOTAsIDB4NGUzZjFkNjAsIDB4ZjZhNWVkZjEsCi0JMHg4YjEzMzFlYiwgMHg4ZjkzNjg2ZiwgMHg3YTU0M2E5OSwgMHgxZDI1YmM3NCwgMHg5NjljZDhmNSwgMHg5ZjJmM2MzYywKLQkweGJjZjA0YTRiLCAweGVjY2Y1YmRjLCAweDJkNGIyMzkxLCAweDMwZWMwMTdlLCAweGJlMTQzOWM5LCAweGUzMzUyZGI3LAotCTB4ZDg5N2NlZjcsIDB4YTQzOWQzZmEsIDB4MjdhMWZkMDMsIDB4ZWUwNDQ5NTcsIDB4OTU1ZTJkMzksIDB4ZjFkMDBjZmUsCi0JMHhmOTA5MDZlNCwgMHg0MjRlN2M0ZCwgMHgyNWVmMzYzZCwgMHg1YjZiMjdlNiwgMHhiYzllZTBjNSwgMHhjZmRlYzRjNywKLQkweDlmOWE3MjgxLCAweGZmNjUxYmY3LCAweDY1NjNkNWFiLCAweDUzZDQwYWFlLCAweDJiZDRiZDdhLCAweDdhYTllZmVlLAotCTB4MmY2Y2IwMTMsIDB4MTRjZjc1N2QsIDB4NzQxNTU3ZDQsIDB4ZWI0NjAxZGQsIDB4MzcwNmFmYTUsIDB4YWY1MmJmYTAsCi0JMHg0ZDg5NmFhZiwgMHgxMGQ5NTNkMSwgMHgzZDVhNTIzNywgMHhlMDRhZDY2NCwgMHhjMDU4M2JlMywgMHhiNWYwN2I3NiwKLQkweDc1ODY5ZmNmLCAweGUwNGVjYWI3LCAweGY5ZDE4ZDRiLCAweDgyZjhjMDhjLCAweDZjY2NiYzgwLCAweGM4MzlmOGRkLAotCTB4MGI0Y2Y5NDEsIDB4MDI3M2JiYmUsIDB4YjM3MjAwZTgsIDB4NTljNTllMjIsIDB4ZGYxMTRiZjksIDB4YmNlNTFjNGEsCi0JMHg1NzNlNWE5NSwgMHg3ODY3YjVjZSwgMHhhZjUxZTI0NSwgMHhlMjU2ZTU1ZiwgMHhmNDNiZDU1MSwgMHhkYTU3ZTUxMCwKLQkweDgyMmQ5ZGNmLCAweGZlNDAyMmRmLCAweGM3N2JlZWM4LCAweGUzODlkZTYyLCAweDgzZWRjODVhLCAweGU3ZTQ3NjE1LAotCTB4NWY5ZmY3NDMsIDB4ZWIzYWZjMGEsIDB4YmQ4MDgxNDEsIDB4MDM2ZjY0NGUsIDB4MmIzNTg3YWMsIDB4NjVmODE3MDUsCi0JMHhkYWM4M2RlNywgMHg2MWVkYTNjZiwgMHhjOTdlODdkYywgMHhiN2YyOGFmOCwgMHg2NmJmZjgwYiwgMHhiMWJiZTNkNSwKLQkweDAyZTA5MzdlLCAweDk3NTY4N2Y4LCAweDJlNTEzZGEyLCAweDliY2IwNDhiLCAweDgxZmVlMDhlLCAweDVmMTg1M2FlLAotCTB4ODk4YjI2ZDQsIDB4NGIzNWZmYzAsIDB4OTUzMDRlY2MsIDB4Zjg1MjNlMTQsIDB4MTdiZjA4ZjIsIDB4NTlkY2EyNGQsCi0JMHg5Zjc2ZDMzNywgMHhkZTg0OTAwMCwgMHgxNzRlMjhmYywgMHhmMDI5ZWI0MiwgMHhmOGNjYWQ0OSwgMHg5MjRiYzhlYywKLQkweGUyZTZkODFiLCAweGMzZWVjOTdjLCAweGFiZWJlNDllLCAweDUzMmRkY2Y4LCAweGQ3M2NjMTA2LCAweGI2ODYzOGIyLAotCTB4YjAyNjA1NTUsIDB4MDVmYTRlMjMsIDB4Y2RlZjhmM2MsIDB4YjZhNmM0OTcsIDB4N2NiZTE0YTMsIDB4ZmFmYTYwNGUsCi0JMHhiZGE4NzE2MiwgMHhhNWYzOGVmOCwgMHhhOTk0N2ZjMiwgMHhiNTU5NWY3MSwgMHgwZjcwMjI1NywgMHg1ZThmY2Y1NywKLQkweGM0MmI3MDI5LCAweDRjYmU5NDBiLCAweDViYzc0M2U3LCAweGRhM2Y3MGQwLCAweDY5MWUwYWViLCAweDY1ZjIxMTNlLAotCTB4YTFlZjE2NDYsIDB4OTFiNTQzYzgsIDB4ZTc3ZDA1YzUsIDB4MzdmYWU5ZjEsIDB4Nzk2MWVjNWIsIDB4NGFkYzU5MTAsCi0JMHhiYmZiZjY5MCwgMHg5YzYwMmYwZCwgMHg0N2Y1YjlkYywgMHhlNmZiNDdhZSwgMHg4MDA3Y2EwZCwgMHgxMjc2MGRmZiwKLQkweDFmODdmZGM0LCAweGIzNDU1MGY1LCAweDQyMzhjMWU4LCAweDY2ZTczMDYzLCAweDg5NWRiZWQ1LCAweGM1N2NhODk3LAotCTB4ZDhhZWY4OGUsIDB4ZDMxN2Y2NjQsIDB4OGY1YjE1ZjYsIDB4ZjVmOWUxNjUsIDB4ZTc4YzZlYTIsIDB4NjgwYmQ3OTAsCi0JMHgyM2I5MTMxZiwgMHg1NDZmZWUwYiwgMHg4NmRjNTkxOCwgMHg2NDU4MmVkZSwgMHhiM2FhN2U2MSwgMHg4M2E3NTlhZiwKLQkweDYzYWMyNmRkLCAweDA0NTU2OWVmLCAweDJhY2M5MzZlLCAweDE2ZmRlZWJmLCAweGU3ODdhOTQ5LCAweDMzYTUzMjI5LAotCTB4ZjE4NjkzZGMsIDB4NTI3MWRmYTksIDB4ZmVjZTM1ZTIsIDB4NDU1ZmYxODYsIDB4NWNmNjg0OGIsIDB4OWQ4ZGJhYzUsCi0JMHg3MTU3N2YxMCwgMHhkY2ZiOGNkOCwgMHgzMWU3NzVkYSwgMHg5NWUwYjg5ZSwgMHhhZTFkZjA5NywgMHgxMzUxMTZkYSwKLQkweGVlMmJkNTdmLCAweGU3ODg5ZDY5LCAweGQ1Y2QzNTFiLCAweGYzNDFiZjE4LCAweDEzNTFjZTc4LCAweDc3ZmYxYzg4LAotCTB4Y2E5Y2Y4YjEsIDB4OTU2ZGI2NTcsIDB4MzcyYjBhMjksIDB4ZWY4MWRhZmYsIDB4NzVhZmI1NzIsIDB4NzU5M2JkZTAsCi0JMHhkODc3MWVkZiwgMHhmMDI5Y2UyYiwgMHgzOWM2YjdmMCwgMHg1MDdmODE5ZCwgMHg0NWFkZmFjNiwgMHhkNjQ0ZTcxYiwKLQkweGM3NDZiZDMxLCAweDllZTkxMzk3LCAweDdhZGVjODQxLCAweDIxZTdmM2U5LCAweGE2ZWNmNzBlLCAweGYxODc5ZjRmLAotCTB4NjdlN2ZkNTYsIDB4MDYxYzQzY2YsIDB4ODI3MTZlZDksIDB4ZmViYjUyM2QsIDB4NTQ2MzhjN2QsIDB4MzBiMmVkZGEsCi0JMHgzN2YzYWZmYiwgMHhjZmY4YzZiZiwgMHhkZDlhM2ZjZSwgMHhkYjczYWQwMCwgMHg2ZjYwYTFjOSwgMHg2YmZjNmU3NCwKLQkweGRlNzVjNDIyLCAweGZkMTBhZGIzLCAweDI5NmNmNzM5LCAweGY4MjI0ODE4LCAweGY4MTQ5NDBiLCAweGY4OGZkZmQ2LAotCTB4ZGFiZDNkNTMsIDB4NWUzMGRiOWEsIDB4MzdhNTFjZTQsIDB4ZGM1MDg3ZTgsIDB4YzU5YWEwNWEsIDB4YmM3OGJhMDEsCi0JMHg3MWM4ODZkYSwgMHhkM2UyYmRiZSwgMHg2MWJlNmY5YSwgMHg2NmM1ZTgxMiwgMHgzNDVjMTc2NiwgMHhhNTAwZWQ0ZSwKLQkweGEwZmQxNWUzLCAweGI5ODc4NmRmLCAweGJmNGM4OTNlLCAweDRhMGZmMDczLCAweGZhM2E2M2E3LCAweGY3M2NkZTdkLAotCTB4NTk0MmNmNTcsIDB4NzE5ZjdjNzMsIDB4ZTA3ZWMxNmEsIDB4MGUyMzg5NGQsIDB4MTY5ZDNjNTgsIDB4YmY0ZDliOTAsCi0JMHhhMDQwYjhjNSwgMHhmNDBiYjE1YiwgMHhjMTQzZTdmMywgMHhlYTRhN2MyZiwgMHhmNzQzZmY0NiwgMHg1YmRlMzMzNiwKLQkweDA4NzZkOGFiLCAweGNiNzNhN2U1LCAweDI1ZDM4YzdlLCAweDkzYjc5ZTNjLCAweGZlMmM3ZTg0LCAweDZhN2FmYjkyLAotCTB4YmUyY2VjOWIsIDB4ZTIxZmUzOGQsIDB4ZmMwZTVjZGYsIDB4MThkY2UzY2UsIDB4NmZmMTJiMWYsIDB4MGRiZGM1N2QsCi0JMHhlZmUzNGU4ZiwgMHhiY2Y4YjAyYSwgMHg3ODBmYTZlYSwgMHg1ZTk4NTkxYywgMHhlOWQwMmU0MiwgMHgxM2M2YjdjOCwKLQkweDAyNzA3ODJhLCAweGUzYWJjNjFlLCAweDE3YzcyMzM4LCAweDM5N2RlMjg2LCAweGEwN2U4MGJkLCAweDlhNzE0M2E3LAotCTB4ZTIxODNmMzQsIDB4MjFjMmZjZjYsIDB4NzQxZjQxMTIsIDB4OWZmMTY2YWUsIDB4MWVmNjkyOWQsIDB4MmMzZTk4NjgsCi0JMHhhZDE1ZDNhZSwgMHhmZjdmNTM5MywgMHgzNjJmMzllMiwgMHg5ZjhhZWZmZSwgMHgyNjk3NjhkOCwgMHhkM2MxNTFhZSwKLQkweGY1OTEwYmQ5LCAweGYwYjQ0MTc4LCAweDlhOTNkZDhmLCAweDA1ZWZlODIzLCAweGMwMjc0N2U0LCAweDEzMTFmOTc5LAotCTB4N2M1ZTdiYzEsIDB4MzdkY2E0ZmYsIDB4YjNiNGZlZTIsIDB4MGI4YzQ1ZWIsIDB4YTFiNDA4NmMsIDB4OGJlYmQ3MWUsCi0JMHhhMjRlN2UxYSwgMHhkMTJkZWYxZiwgMHhiNGQ1NGY0YywgMHhlY2UyNzViMCwgMHg0NmRmYmIyNiwgMHhlYjdkOWNlMSwKLQkweDlhZTdlNDM1LCAweDMyNGM0NzBkLCAweGRkN2JiNzg1LCAweDJiOGIxMzY2LCAweGViMDNmMjYwLCAweGZlMzU1Zjg0LAotCTB4YzhlZjJmYjMsIDB4ZGZjZGJkNDIsIDB4MzNmN2QyMTUsIDB4ZGI1M2Y3OWIsIDB4ZGE5ZmI5MWEsIDB4ZmQzNWU3MGQsCi0JMHg5MzAxY2E1NCwgMHhmZWYxNzZkMywgMHhiNzNkMThjZSwgMHhlZDMzYmMwMSwgMHgxMzNhNWVjYywgMHhkZDIyOGIxMCwKLQkweDJkMTI5OThiLCAweDIzNzNmZGYxLCAweGY1ZDM3M2YzLCAweGIyNTdkZjEyLCAweDQ0OTRmN2IzLCAweDVmZGEzNDQ3LAotCTB4MGY3M2Q4ZjcsIDB4ZDQ4MDBjYzcsIDB4OGIxMjcxODQsIDB4YzU1Yzc5ZWIsIDB4YTAyNGVlNDMsIDB4YjVmYjYyZjcsCi0JMHgxNGJiYzYwNCwgMHhjN2RhYWJmMCwgMHgwMTJmNGU0YiwgMHgyYTRhNGRiYiwgMHg2NzNlYWIxOSwgMHgxYTZmYzY1MSwKLQkweDE1N2UyMDYwLCAweDE3YjFlZmZkLCAweDI3ZmQ4NDBkLCAweDYxODNjYTMxLCAweDdkYTdkNzFjLCAweGFmZjU4NDY5LAotCTB4ZjdmY2M3ZGQsIDB4MGNiMWMyZTQsIDB4NzQ2ZWRlZjgsIDB4NzBhNzhhZWUsIDB4NmUwYjI3ZGIsIDB4ZTZmNmJkNzAsCi0JMHhlNDNmMDY3YiwgMHhkZjY4ZjA0ZiwgMHg3YTU4ODQ4NSwgMHhkYjhmNWY5OCwgMHhkZGEwZjY4MCwgMHgyYWQyNzQxMCwKLQkweDRmNjk2ZWM0LCAweDhiYWMwZGMyLCAweDE4ODk4Y2I4LCAweGU4NzE4ZjAyLCAweGE2YTJmODhmLCAweDA3M2FiZGMxLAotCTB4ZDQyOWU2YTEsIDB4ZWYzNTFiNzMsIDB4MWFlNGM0MjQsIDB4OTAyNmVmNzUsIDB4YmQ3NDE5MDMsIDB4NTU3ZTcxYjEsCi0JMHhmNjc2NzJmYywgMHgwM2I3MGE2ZiwgMHhjZDg4NjNkZiwgMHhiZWMwZjUyNCwgMHhiNDVlZWMyYiwgMHhlZmU0OWUxYiwKLQkweDQ4ZGZkMDU4LCAweDIzODg2Nzg4LCAweDNiZjU2ZWQxLCAweGNkNWZiNDJlLCAweDVmYjQxMGZiLCAweGEzZDYzZTRkLAotCTB4MTkxN2M3Y2QsIDB4NWY1YTQ3OGYsIDB4YTYzOGY5ZTIsIDB4NDNjNDM2ODgsIDB4ZDk0MWExNmMsIDB4NGYwZjE1YWYsCi0JMHgzNjNiOGYwYywgMHg1MDgzYjg4MSwgMHhlMzBkOWQ3ZSwgMHhjOTc4YTljMCwgMHg2Y2Q4NzllYSwgMHhmMWQzNzFkYSwKLQkweDRjNDRmNDY5LCAweDYwNmM4NzY2LCAweDc3N2NkNGUzLCAweGYzODA5NzEyLCAweGQzYmY2OGY3LCAweGRiZjI2YWYxLAotCTB4YWEzYzc5YTMsIDB4ZGY0MTE4OTEsIDB4MDlkYWEyZDksIDB4MDY4ZjdmYzcsIDB4N2I4YzRiZGYsIDB4N2QwMjI0ODcsCi0JMHhjYjU3ZGYwOCwgMHhjNDExZWUwNCwgMHhmZWQwNzlmMCwgMHhlMDlkZjUzNSwgMHg2YmZkNjAxZCwgMHg0ZWMxOTBlMSwKLQkweDJiYmY3ZGY1LCAweGNjYjdmYWY4LCAweGU4MWVmMjVhLCAweDc1NjE5YzliLCAweDMxM2JjODE4LCAweGJkZTI2NDg5LAotCTB4YTgwMWQ2ZDUsIDB4ZTYxNmQyOWYsIDB4MmYzNDYzOTMsIDB4Y2FiZTMyMzQsIDB4NmU1MDQxNTgsIDB4OWM1OWJhMzIsCi0JMHg4ZDEyNTkwYSwgMHg4YTM5YThmNiwgMHhiODZjOTZjOCwgMHgyOTY0NDRjNywgMHhmM2YxN2ExYiwgMHgyMmQ3MjVmMywKLQkweDVjNjUwNTAzLCAweGI2OGQ3OTRlLCAweDM3Y2VlZDZiLCAweDA4NDRhNWNjLCAweGJmODUxMTQwLCAweDMxZjNkYTM3LAotCTB4YTM3MGRmZjQsIDB4MWEzMGM5MzcsIDB4NzRiN2RlM2UsIDB4ZGE5NDYwZTcsIDB4NjgyM2MxNGIsIDB4YjVkZGVlMTAsCi0JMHhlOTBiMDg2NywgMHgwODlhZjc4MSwgMHhmMDE3NzdiOSwgMHg0ZjI4NjM3OCwgMHhiYWNmNzA4MiwgMHhmNzk0M2EzMSwKLQkweGRmN2Q1MTQ0LCAweDY3ZjJjNjk4LCAweGJhNWRlZmEzLCAweDNmYmJjMjljLCAweDM0NmNlNGE2LCAweDc5Y2EyNzhjLAotCTB4MDU3NzllMTksIDB4MTdmZTcwZTMsIDB4NzE5NDVmNWIsIDB4OThlYTZjOGUsIDB4Zjk5NjNkMTIsIDB4Y2YxZGUxNGQsCi0JMHgzZGQwZjZlMSwgMHhkNzg3NWM2YSwgMHgxMDdjOTRkYSwgMHhjZDI1MTFmNywgMHg1NWFmNTFmYiwgMHhiOTYzZjYwNywKLQkweDFkMzRmMjAxLCAweDI1MzFkZjE2LCAweGViMTA5NjI1LCAweDkzMGI0YmEzLCAweGZkNzg4NTJlLCAweDlkMDMyNGQyLAotCTB4OTc0NzgwZTcsIDB4NjBmYjgyZWUsIDB4YTIzYzNjNjEsIDB4YjBkMTgzYzEsIDB4NDk5ZWQ3N2MsIDB4ZGYyYzNjNmEsCi0JMHg3ZjQ4NzYwNSwgMHhiYWMwMzBmMSwgMHg4OWYyZTk3YywgMHhlNTM3OWZmZCwgMHhjNDJiNzg4YiwgMHhmMDE5ZTQzYiwKLQkweDg3ZjFhNWRkLCAweGExNWZlODZkLCAweDQ3YWUwYjNmLCAweDNlZWFjZTFjLCAweGZiMmFiZmVlLCAweGM1MjcwYTExLAotCTB4NWZjYzJlM2EsIDB4YWY4NTNiNGEsIDB4NzQ5YmUyZmEsIDB4YmQ4Y2JjZTIsIDB4OWZlNWE3YWYsIDB4MDMyN2FiNjIsCi0JMHg3YWI3MGRlMCwgMHhlMWM2ZDlmNiwgMHhmNjNlZjFmYywgMHgzZGQ3YWY1NCwgMHhhZjk4NGM3OSwgMHgwNjNiY2Q4OSwKLQkweGIzMmVmN2VlLCAweGFhY2EzNWRlLCAweGNkNGVjYmYyLCAweGQxYTYyMDViLCAweDJjODE2NmYxLCAweDkzZTc4NDI0LAotCTB4OGNiNjUwYjAsIDB4ZjA0Y2YzYTAsIDB4N2FjZTMwMTgsIDB4MDYzYmQ1OTksIDB4ZWY0YzcxZmEsIDB4ODQ5NWQyMGUsCi0JMHgzMWRlMDA5YSwgMHgwYjk2MTg4MiwgMHg2ZDg2YmZhNSwgMHg1MGRlYmY2YywgMHg2MjJmZjA2YSwgMHhjMDAyYmRlNywKLQkweDg3NDdmMzBiLCAweDE5YmEzZjhlLCAweDQxMWNiNDdmLCAweDNkNjlhOGZlLCAweGE1YTNmOGMyLCAweDBiZjgxZjNlLAotCTB4OWY2MGNkY2UsIDB4NDdiYTQ4ZGYsIDB4NzlhZmRkMDMsIDB4NDhkMGE5YjQsIDB4YjU5ODdmZjksIDB4ZjI4NTIxYmIsCi0JMHgxNGQ2NDQ4NSwgMHg3ODhhNWYxNiwgMHhhZjhjMzFmZCwgMHhmOGY4N2QxNywgMHg0NWY1Nzk5NCwgMHg2OTNkYzZkZiwKLQkweDdlYzI2NjhmLCAweGNmMDFhZjcyLCAweDg1YmMxNGJiLCAweDhiMmIwN2VjLCAweGY3NjQxYzIzLCAweDZhN2U4MzRlLAotCTB4YzM3NjNiNzMsIDB4ZjllZDM3ZjQsIDB4NzBkYjhjMGYsIDB4MDc2OWJkZWMsIDB4YTM0Yzc3YjQsIDB4ZmI4NTcyMTQsCi0JMHgwOGJiZGM2ZCwgMHhhNDZkY2JkZiwgMHgzMTkwMDBmMywgMHg3NTg2NWJhNCwgMHgzMDdjNmZiZCwgMHgwM2UxMDlmOSwKLQkweGMwNGM5ZWVjLCAweDk3OTQxMWM3LCAweDEwOWVmY2Y1LCAweGZmYmMzYjk1LCAweGRlY2FjYzNhLCAweDY1Njc5ODY1LAotCTB4YWMwN2U3ZmIsIDB4MWQ5OTRmMjIsIDB4YzdiN2IwOTYsIDB4ZGFhZGZiMDQsIDB4OWZhYzA2MjUsIDB4N2FhNjY5MDAsCi0JMHhkZWIwNGJmZSwgMHgyNmEzNTYwMywgMHhhN2ExNGU1ZSwgMHg5MzU0NGZjMiwgMHg4NzdkZTE1YSwgMHgzZGVmNTg4YywKLQkweGIzODlmZTVhLCAweDI5ZTBhOWE2LCAweDExZjMxZWVkLCAweDRhMGM5Y2Y3LCAweGRkNzc5ZDg3LCAweGU1MmFlYjBkLAotCTB4ZWQzNTFiOWYsIDB4YzAxNjQ5NDYsIDB4ZjgxZjUyOWIsIDB4Njg3ZDEyMzMsIDB4YWU4YzQ1YmIsIDB4MTdiMDU2NzEsCi0JMHgyMDVjZWUzNiwgMHg3ZjQyZjljMiwgMHhlZjAzOWFlOSwgMHgzOWZhZDFjNywgMHg4OWI3NTI1NiwgMHhhMTg5Y2ZiNiwKLQkweDc5ZTNlNDI5LCAweGE3Y2YyMDdlLCAweDQzZmQzNGIwLCAweGRmYTA0MWI3LCAweGViYmY3MzU3LCAweDE3MWU1NmIzLAotCTB4MDY1ZTc0NjAsIDB4Y2IzYzUzZWYsIDB4MjkzMTNhZjEsIDB4NDUwNWQ3MWEsIDB4ODA2NmMxNmUsIDB4M2YyMzZiNzMsCi0JMHg0ZWViNGViZiwgMHgxNGRkMDAzMywgMHgxYjc2MzYzOSwgMHg2OGJhNzY4MiwgMHgwNjVkMTlhNSwgMHhjNzc4NjM4OCwKLQkweGVjNmRlNzQ3LCAweDdiNWNlZjViLCAweGE3YmZiYjI5LCAweGE3MzJmZWZmLCAweGFmYjZmN2YzLCAweGFmNzVlYWJmLAotCTB4NGJhMDY1ZjcsIDB4NjNjNzU0NzUsIDB4Y2Q3Y2QxMzcsIDB4ZjllMTlmYTUsIDB4Y2Q2YjIyZTAsIDB4M2I3M2VhNTUsCi0JMHhmZjFmYWE3ZCwgMHgzYTRlMTczYiwgMHhmY2VjM2VjMCwgMHhjOTE0NWNjYSwgMHgzMmIwZWVjZSwgMHg2ZjhmNzdmYiwKLQkweGVjNTNiNjNhLCAweGU4MTUyNDJlLCAweDQxM2RmNTY0LCAweDU3NjhhNjMzLCAweDFlNTUwOGZkLCAweGM2MzY1MWQwLAotCTB4NjU2YWZhYzEsIDB4NzVhYmE0ZmUsIDB4MTQ3ZjAzZjcsIDB4NDJiZDdlNjQsIDB4ZjQxMjM4ZDIsIDB4NWZkNThlNjQsCi0JMHhlNWMzOGI4YywgMHg0ODE3MThlOSwgMHg1MWY2NjJiZSwgMHhjZTBmZmQxNCwgMHg3OWY5MGE5NywgMHg3M2IwZTc5OCwKLQkweDM5N2YyYzI3LCAweGUzOTM4ZDMxLCAweDJhNGM3ZWEwLCAweGRhMjNjZmMyLCAweGUyNzJiOWY3LCAweDVkZTgyMzY1LAotCTB4ZjA4YTllOTIsIDB4ZTU3NGEyMGEsIDB4ZDFkYTA5MDMsIDB4MzBjYjkyZTQsIDB4YTg5MGFiOWUsIDB4YmUzYTMxZWMsCi0JMHg2ZmM2NzQ5YywgMHhiYTk2NDc1MywgMHg5ZmVmZjMyNywgMHg2Y2ZhZjMwMSwgMHhkNjEzMTljNCwgMHg2NmI4ZDdmMywKLQkweGVjNmIyN2I4LCAweGU4Mzc0Njk0LCAweDVkZmZkZmVkLCAweDNjNTIzM2JjLCAweGUzMWI3OGM1LCAweDEyYmUzZGM3LAotCTB4ZWIzMzljMzcsIDB4MTJlZjlhZjEsIDB4YmQ1ZGQ4OTYsIDB4OWZjN2FiZjEsIDB4M2UwYWRmMWUsIDB4ZmJjYjc4ZjUsCi0JMHhjZTM5M2RkMCwgMHg3YTNmMWJkNSwgMHg1MDc0Mjg3YywgMHhjN2M3YWNmMCwgMHg4YTZmZjAzYiwgMHhjZDMyNzdhZiwKLQkweDNiZGFjZWY4LCAweDc3ZGY4NjQ2LCAweGRlYzhiOWE4LCAweGZkYTBmNDZkLCAweDQzYzdjODVhLCAweDRmYjQ1N2VkLAotCTB4NmVlYzEyMGIsIDB4ZTI5ZTFlYzYsIDB4NzhmMGM0YzIsIDB4ZTNkNTc4ZjUsIDB4ZTNiZjg3MzEsIDB4N2M0NDYyNDIsCi0JMHhlMDM3NzQ0NywgMHgwMTYxZjI4YiwgMHg3ZWQwNGMxYywgMHg3MDk5YjYwYiwgMHg1NzgyNDhmZiwgMHgwNmZjNzUxMywKLQkweDQ3YmUwNjFkLCAweDE3OTczNTc3LCAweGQ2MzkyZjA1LCAweDAwYjE5ZGJhLCAweGU3OGE5Y2NmLCAweGE1N2Y1N2Q3LAotCTB4NWIwYjY3YjUsIDB4N2YwNjljYTcsIDB4Nzc4YzRlNDAsIDB4ODk0MWY4MDksIDB4NWYzODRhOTgsIDB4MTVmMmQ1MWQsCi0JMHhkNTM1OTcxZiwgMHhhOGVhZjljZiwgMHg5MTk4YWY4ZSwgMHgwYmNhY2YxMywgMHg3NGYyYmE5ZCwgMHg4NTUwN2U4MiwKLQkweDU2ZjNmNGVmLCAweGY4MTVlYmY4LCAweDllMzdhMTMwLCAweGIyY2FmZTE0LCAweDk5M2JmYjcxLCAweDM4N2IwNjBjLAotCTB4MzFiMWI1ZWIsIDB4NmI0OTlmYTAsIDB4YzNiZjQ0NWMsIDB4MjEyNWMzZjgsIDB4OTE0ZjljMzgsIDB4MGRlMjA1MGYsCi0JMHhmZmE2Nzc3ZCwgMHg5ZGFhN2EwMywgMHgzZjJhODJhZSwgMHg1YmQxMGNjMCwgMHhhN2EwOGI2MCwgMHhjNDk5M2UxNCwKLQkweGM4ODkzNWU5LCAweDM0N2ZjMDNiLCAweDEyZmYxODg5LCAweDU1NTNmN2IyLCAweDk5ZTY1N2YzLCAweDllNjA1MjQyLAotCTB4NGM1ZDU4YWYsIDB4ODY3OWYzYmYsIDB4NDdjZDRkZTYsIDB4ZGU0NGZiYTAsIDB4MWIyOGM0ZmYsIDB4ZGQyMGI3ZGUsCi0JMHhmYzIxYjNjNiwgMHgzMmJiZTFhNywgMHgzYzJlMjliMiwgMHgyN2Q3ODkwZSwgMHhiMzA4ZWI0MywgMHg3YmUyNjZkNywKLQkweGU0MmYxNGI2LCAweDFjNzg2YjFiLCAweGM0NjA5YjVlLCAweDM4Zjg1Njc3LCAweDkyOGJhZGNlLCAweDc5ZWQ0ZTIxLAotCTB4ZWMwNzNiZDEsIDB4ZGVjMmIzYjgsIDB4MzE5ZjljMmMsIDB4MzdkNjAyMzgsIDB4MmQ2N2Y5N2QsIDB4OWNhMDZiM2IsCi0JMHg3YWMzMmJkNiwgMHgyMjk1ZmM3YywgMHg2Zjc0MmZmMywgMHhhNGQ3ZmIzMywgMHg1Mjg3NmRmNiwgMHg0MDc1YzY3MSwKLQkweDcwODk5ZjkxLCAweDkwMGFmMTVmLCAweDhjMGE2MGI3LCAweGNhNTg2YWZiLCAweDdjZmRiYTY4LCAweGYyZmJlZTM5LAotCTB4ZDA4ZGIyNWEsIDB4Mjk5ZWFlY2YsIDB4NGY5Zjk3MTgsIDB4NWZiMDQ2M2MsIDB4ZTdhZjdjZjUsIDB4ZWIzZjNkNmYsCi0JMHg4ZmVjMzdmOSwgMHhmYjBhMWVlOCwgMHgyZmNhZWY5MCwgMHhlMjE2OWQ4YSwgMHg2Zjk0YzM5YiwgMHhjMjliZWI1NCwKLQkweDFlN2Y5NDJmLCAweDhkNzViYzA1LCAweDMwMTllNGZkLCAweGZkOGRmN2FiLCAweDM3ZDYxMTJjLCAweGRiMGYwZWM1LAotCTB4YTBjNzllMWIsIDB4YjhmNjVmNWUsIDB4YmJmZjg3NjIsIDB4ZjAzNGZiY2QsIDB4Y2Y3NDkxYTMsIDB4MjM2OWY2ODIsCi0JMHhlZmI4MDY1ZCwgMHhmM2NkYjZmZSwgMHhlYzU3N2MwYywgMHgyYmVkOGI5MywgMHhlMWJhNGVjOCwgMHg4YjMzN2NhNSwKLQkweDIwNjAyMWQzLCAweGJjYWJkZWY4LCAweDc1M2Q0MDQwLCAweGEwOTZlOTA3LCAweDI0ZWEzYmJmLCAweDk2NzVmZWNkLAotCTB4MDdlM2ZiYTUsIDB4ZmViMDNjZTAsIDB4ZjIwNzhjMTIsIDB4ODg5YTk0NDIsIDB4NzE1YzU5ZWQsIDB4MzFlZmJmMDMsCi0JMHhlMDA0N2JiMiwgMHhkYTg1Y2VmNSwgMHg2NGQ4ZjhmNiwgMHhjZDVkZjg0ZSwgMHhhZmI2MDU4ZiwgMHg0OGU5NjU5ZiwKLQkweGE1YjQ3YjgwLCAweGJlYmViNmIyLCAweDdhMWU2NTdmLCAweGI1NzZmYWI4LCAweDc4MjE5ZGZjLCAweGIyYWRkOGI3LAotCTB4MzFiNTVlMGIsIDB4ZGUzNDI2M2IsIDB4MDNiYmY4NzcsIDB4ZjAwNmRmMTQsIDB4ZWE1ZWI0ZDcsIDB4ZmYwMjI0N2YsCi0JMHgyYTM3YTkyYSwgMHhhZjE4ZDMyZSwgMHg5OWI2MmZiMiwgMHhmZjdhNDdhNywgMHhjMTQ3ZTk0MywgMHhhZWQyNGNmNywKLQkweDkxNmZmM2UwLCAweGU4OWEyZmRlLCAweGMzN2RmYjY1LCAweDc5Y2Q0MTUzLCAweDc0NjY5MmJiLCAweDJlYmI0NjRmLAotCTB4MWRhMDIwMjMsIDB4MzNjODE1NWQsIDB4ZjNkOGQ2Y2MsIDB4Y2JkYmJmNmMsIDB4Mjk3Nzg3OWUsIDB4MGVmMzdlYTAsCi0JMHhlYTA3Y2Y2NiwgMHhkNTUwNWY3MSwgMHhhYjM3ZjZjYywgMHg5OTM5OGNlMSwgMHhlZDEzMjQwZiwgMHgxNWJlZDBmYywKLQkweGUxYWFhMGUyLCAweDFlNTYzZjlkLCAweGU5ZTZhYjg0LCAweGQ3ZmVhYzhkLCAweDg3YTY4NWI2LCAweGU5ZGY2MDMzLAotCTB4MzRkYzkyNGQsIDB4ODZhMWUyYmYsIDB4NmEzZmJhMjgsIDB4NDIxNjI1NDgsIDB4NWQ3ZjQ3ZjcsIDB4MTU5NGQwZjEsCi0JMHhlMmNhNTRiOSwgMHhjNTg5MDIzYywgMHg0MjZkODM3YywgMHg1ZmM5ZjdmZiwgMHgwMWIwNzhhZiwgMHg3Zjc0YzlmNiwKLQkweGVkNTM2M2Q1LCAweDhmOTJmYjViLCAweGUyMTczNmUzLCAweGVhZmRhZmIxLCAweDVmMjUzMWZkLCAweDA3N2U1NGRiLAotCTB4YTI3YmZkM2QsIDB4N2ZjMDMxNWMsIDB4ZjQ3ZGYzMGYsIDB4YzJlZjBiYjUsIDB4OTJlNTgxZmQsIDB4ZGUyMTQzMGIsCi0JMHhiYmE3MjI2YiwgMHhhOWZkY2VkOSwgMHgzYWNmNzY1NiwgMHhlZDlhZjQ1ZiwgMHg1ZDZmZGYyMCwgMHhlMjdlMDExOCwKLQkweGMzMWU0Njc3LCAweDdmMmI1OTdkLCAweGFmYWY3MTZmLCAweDg1MjNlZDFjLCAweDY2NzY3MThlLCAweDY5N2I1ZmQ3LAotCTB4MTVmNjAzOWIsIDB4MDNmYjhkZDcsIDB4NjczZjBmZGUsIDB4OWQ5OWVmNjQsIDB4ZWM2OTM1Y2QsIDB4ODU2Yzg3ZDgsCi0JMHg0OTVmMDA3MSwgMHhkMDQ0ZGEyOSwgMHhlZWM3MTNjYiwgMHg3Y2ViMGMzYywgMHg1ODQzZWI1ZiwgMHhkMDA0N2JmZiwKLQkweGZlYzJlNGZmLCAweDY5ZGYzYzQ0LCAweGJmMDBlNWRlLCAweGRmN2U1OWNkLCAweDViNzM1Y2ZjLCAweGFkMzQ1ZGUyLAotCTB4MDcwN2Y4ZGUsIDB4ZjlkMmE3ZWMsIDB4ZGIxOWNlZmMsIDB4YWE5YjdkZjEsIDB4Y2JiZTIyMmQsIDB4YmM0ZGZiNDAsCi0JMHhjZGM3ZmMxZCwgMHg2MTFlNzNiMywgMHhkN2E5NDRkZCwgMHhkNWRmYzIzZiwgMHg0OWJmZWM1MCwgMHhhZjlmYjI1MSwKLQkweDEyZGY4YTg3LCAweGJhYjhlMWRmLCAweDFjNThmNDU5LCAweDczYzBlZGJkLCAweDJjOWVkMjdiLCAweGM5MTA3YTA2LAotCTB4MWEzZTFjM2QsIDB4MGJiNDRlYzksIDB4ZmQwZGY5ZjksIDB4N2VmNzg0ZWQsIDB4OWJjY2YzYjcsIDB4N2NkZDlmY2QsCi0JMHg3MzkxMzIxNSwgMHhkODAyZTVjOSwgMHhjYzAxZGU0NywgMHhiMGY0YzczOSwgMHhmZDVkYmY2MiwgMHhhOTNmZDY5NSwKLQkweDViZjMxZmI3LCAweDIxNDkyZjQ3LCAweGRlZjYwZjg4LCAweDFmYzliNzdiLCAweGVjMmVjZWM5LCAweDllZDExMjllLAotCTB4YzQ3MWU0MjQsIDB4ZjQ5NmY2NTcsIDB4NGNmZWYwYTksIDB4MjcwNmRiZjYsIDB4Y2VjODNiZjQsIDB4ZjliNmIxZjgsCi0JMHhhNTFmN2MzMywgMHg4NTZmMDQ4NiwgMHhkMTY2OWFmMiwgMHhhNmRmMjQxOSwgMHgxZWZjOTc5ZiwgMHg1NzU0NWVmZSwKLQkweGJlMDJlNGFiLCAweDE1ZGQ2YWVkLCAweDE2ZjkwNTk1LCAweGI1NWRmZDExLCAweDBlNWUyNmZiLCAweDJhZDlkNjdjLAotCTB4YjUyMTNiZTEsIDB4ODA3MTNlZGIsIDB4ZjdkNjUwMWUsIDB4N2VmNjU2Y2UsIDB4MzFlYjU3NDgsIDB4ZWRjMGFlZmMsCi0JMHgxY2JmODk2YywgMHgwNjhkOWRkNiwgMHhiOWRjYmZiNiwgMHhkMDU2NmZmYiwgMHhlODVlNmYwYiwgMHhhZDdkYzc4OSwKLQkweGI2ZjczZWIyLCAweDA1MmYxMTdmLCAweGJmZTQzMTc2LCAweDQ0YmZkYjU1LCAweGUyMDA3ODljLCAweDI0NjMwYTlmLAotCTB4M2I2MTBhMjIsIDB4ZmNmYWQ3YjUsIDB4Mjc2MjU5MjEsIDB4N2NlOWQ3YmQsIDB4MDhjNWY3NTgsIDB4MzdjNzM1ZWIsCi0JMHhmYzA4Y2ZlZCwgMHhlZmJmNWZhZSwgMHg2YTdiNzNiNSwgMHhmNzg2YzkwOCwgMHhjNDJlNWFmNSwgMHhjZGJkZTI1NywKLQkweDExNzNhYjU2LCAweDVkOTg1ZmZhLCAweGNjZjNiNWQyLCAweGZiZTE1MzEzLCAweGRiZGQ5MTVlLCAweGRmMjIyMGJmLAotCTB4NzJiZGI1YmYsIDB4OGQ0ZDg3NTgsIDB4ZDdhNDA2ZjcsIDB4NzdjZTgzMTcsIDB4N2ZlYjQxYmUsIDB4Zjk5YTJiYjEsCi0JMHhjYmVlOGRhMywgMHhjMjA2ZjdkNSwgMHg1ZjFjZmRmNSwgMHhhZTc2NjRjMSwgMHhiYmMzMjcyNSwgMHhlZWRiZGYzOCwKLQkweDJlZjVlZWVjLCAweGI0NzYxM2Q1LCAweDgwYTdiYjNiLCAweGVhYjExZGZhLCAweGM1ZjQwOTg4LCAweDUzYzk3YjIwLAotCTB4YWMwNDBmNGMsIDB4ZTQ5OTE3ODAsIDB4NmZkYTEwYTcsIDB4MDdjOTM0NzksIDB4MjdhZWVhZmUsIDB4ZGJhMzg4NGUsCi0JMHgwMDYwYzdiMiwgMHg5YjVkOGNiYSwgMHhlYjJlZjE4YSwgMHhmY2RmYjlmOSwgMHg1NTI5YTM0MCwgMHhmM2U2NWZhNSwKLQkweDkyNTNhMzczLCAweGY1NGUzNDNjLCAweGY0YzFkOTNkLCAweDE1NWRhOWMwLCAweGY5M2Q0MmJmLCAweDFlMTkzMzQ3LAotCTB4MWJmYzVkNjEsIDB4NGQ5YjY3ZDcsIDB4NTAwZGQ0ZjIsIDB4ZjcwMWE4ZWYsIDB4YmY3NzNiMWIsIDB4NjlkZTFiYmUsCi0JMHgzNWQ4N2Y5YiwgMHgwMzk5ZDYxYSwgMHg1ZWI0MGYyMCwgMHgwZGY1ZGVjYiwgMHhmMmRiMmYxMCwgMHg2YWVmNDEyMSwKLQkweDY4YTk1MzRlLCAweDQxYmVmZGEwLCAweDc2MGZjYzVjLCAweGUwZmI4MGMwLCAweDc4OTBmZjkwLCAweGZiOWU2MWUyLAotCTB4ZjliZjZjZWQsIDB4ZTY4MzFlYzYsIDB4ZmUwZGU5OWMsIDB4NzY1YmU4M2UsIDB4MzNiN2MxODksIDB4M2RhNmQ0M2YsCi0JMHhiN2EwZjFmOSwgMHg2ZmJkZDkwNywgMHg4ZjZiMWUwMCwgMHg1YzM4MzQ3NywgMHg2Mjk5YmY2MSwgMHhiMDM4NGQyNywKLQkweGZhMjhlYTY5LCAweDBkNjcwOWNmLCAweGViYjcyMDRlLCAweGU2MTExYWMwLCAweDQ4NDUzYWViLCAweGQ5N2E0MGFjLAotCTB4MmVkZTE0NGQsIDB4Y2UzN2JjMzUsIDB4MWM3NDc4MzIsIDB4MmE5YzgxNmYsIDB4ZWYyYmE3ZjgsIDB4ZmYzNDk5YTMsCi0JMHgwZTMxYmI0NiwgMHhmYzE0YTRlMiwgMHhmYTUwZjMyYiwgMHg2Nzg4MDU3NywgMHhjOTQ1MGRiNSwgMHhmYzViZTliMywKLQkweGU2OWM0YWI3LCAweGRlNTEyNzE4LCAweDljYmU0NzI3LCAweGNmYmNmNzZhLCAweDNiNDY0MWY4LCAweDY4YWVkNGY2LAotCTB4ZjMzNjQ3YjQsIDB4OTUyNDhjNzUsIDB4MjlmYzAzMGUsIDB4YTc4MmZhNzQsIDB4ZWFmYTc4Y2EsIDB4MDc1ZjNjZmYsCi0JMHhmMmJiZjQ5NCwgMHgyNWM5N2FmNSwgMHg3N2YwZGYyMywgMHgzMDcyNWNmYSwgMHhiMWUyMWQyYSwgMHhlZmYxZDI1YSwKLQkweDU1ZTJhOGExLCAweGE5M2UwM2NmLCAweDg3ZjhkNjAyLCAweDA2MGMzYTVhLCAweGIzNTU0ZmI4LCAweDY3YzU4ODRkLAotCTB4ZDc2OWZhNDIsIDB4MThjY2Y4ODYsIDB4Mzk2YmZlNDAsIDB4MmI4ZTUwNGMsIDB4Zjk5NGZkZDYsIDB4ZTFiZWE4ZWYsCi0JMHg3OWUxNTdlZiwgMHgzZjBmYzgzNCwgMHhkMDI0MWU5NywgMHhlYWViNDI3NCwgMHhkZjg4MjljNSwgMHgyYWU0MDNhMCwKLQkweDM3MmEyNzhjLCAweDlhMzVkNjkwLCAweGRmZTc1ZjgwLCAweGZjNzlkMmMzLCAweDRhZmU3NzdjLCAweGQ5NjdjYTJmLAotCTB4NjdhNzE2MmEsIDB4MzhlMmE0NzUsIDB4MjU3ZTcxY2UsIDB4ODg2NGU4ODYsIDB4MWJiMDY4ZTMsIDB4NGZjOWYxMzQsCi0JMHhkZDNkYmU3MCwgMHhmNDFiNjRmYywgMHhkNjJiZjk0YiwgMHg2Y2FmY2I0MSwgMHgxODE5ZmM3OSwgMHhhN2FmYzJhZSwKLQkweDUzODQyNDliLCAweGZmM2RhZDFlLCAweDc4MzA3NDRlLCAweDdlMzAwZTViLCAweGU1MjRkMDlmLCAweDEzNDlmYmMzLAotCTB4N2YwNGUyNjQsIDB4NmI0ZDFiZjAsIDB4NmZkZmQwNDUsIDB4MzJhNzNmMDAsIDB4ZmQ3NTg3MzksIDB4YWM0N2FlZDQsCi0JMHhlZWY1ODMzZiwgMHhkZjgwODE4OCwgMHg5NDg5YjM3OSwgMHhjNWM5NTQ2ZiwgMHg2YWFmZDVjZSwgMHg1ZDYyYjdlNCwKLQkweDZmZjQ1NGZkLCAweGEwMDljNDc3LCAweDU1YjkxNWU3LCAweGU0ZDliZWYwLCAweGZmZTUwNmJlLCAweDRmZmM5ZDdhLAotCTB4NDE4YmVkNjYsIDB4MjdiZDY4NTgsIDB4NTkzZmZjYjksIDB4N2U5ZmU1NDQsIDB4MTU4YTZkOGEsIDB4NTM2NmNlMDAsCi0JMHgyNmI0ZjdlNCwgMHhmZjFmYmUzOSwgMHhmMWVhZjQ4NSwgMHg5Mjc1N2E1ZSwgMHgxZGU3ZWQ4MywgMHg5YWZmYjRlOSwKLQkweDNmNzA3YWViLCAweGU3MWYxYTFmLCAweDJiMjcyNzliLCAweDAwMmE5MzdjLCAweDA1MjkxYmZlLCAweDE0NWYwMDMzLAotCTB4NjhjZmMwYWYsIDB4Y2RiZTgyYjcsIDB4ODI3N2MzNGIsIDB4MjJlM2YzN2EsIDB4MjM0ZGRjZTUsIDB4YTZiZDYxYjcsCi0JMHgwNmY3YWZjOCwgMHhlNGNlNGYxOCwgMHg1ZjYwYzViYSwgMHhjOGNiMTdjNywgMHhlZjA1YTdhNywgMHhhZWJhMzhiMCwKLQkweDhlNzkwNjlkLCAweDM5NDYxN2EwLCAweDQyZjkxZTk4LCAweDExZGU2YWYyLCAweDkyMGUzZGVmLCAweDRlNWQ3YzBjLAotCTB4MmYzMDZhNzcsIDB4MDI3MDRhYjIsIDB4ZDc3Mjk0N2QsIDB4ZTA5ZmJlMmEsIDB4NGFlZjk0ZjAsIDB4ZmRlMzdiZmUsCi0JMHhiZGZjYmQyZiwgMHhiODcxOGU1NSwgMHg2NDIwOTk5ZSwgMHhhZDlmODQ3MywgMHg0N2M4NDQ2NywgMHg2Yjg2MjBiOSwKLQkweGU2ZGU0MTkzLCAweDI3ZWM3NWQzLCAweGI0ZWM3NWFhLCAweGFhZmM4OGQ0LCAweGNlM2VlMWUwLCAweGIyYzQ1ZmVmLAotCTB4ZmNlNzBmNzksIDB4M2Y2YzBkMzEsIDB4MTczZjM3YzQsIDB4ODE0NjhjMTMsIDB4MzAyOGI1YzksIDB4ZmUwMTE3NzksCi0JMHg1ZTU3NWRlOSwgMHg1ZDdmN2M4MywgMHhkY2FmYmU2NCwgMHgzM2Y5MWFiMCwgMHhmNzg5YzhiNiwgMHhiYTM0OWU0MSwKLQkweDkxOTliMTJkLCAweGQzMWZiMWY0LCAweDgxN2Y2YjlkLCAweDYzZTAyYmZiLCAweGU0YmVmYjkwLCAweDgwZTQxY2EwLAotCTB4M2Y3ZmUwNDQsIDB4ZmQxNTdmZTUsIDB4N2NhMDNlMTQsIDB4YTU0Mzg0ZjEsIDB4YTE3Y2Y0MjcsIDB4NzgyOWRmOWMsCi0JMHhmZjNiYWNkOSwgMHhmNWMxYzhmYiwgMHg3ZDVkNGYzYywgMHhmMzI4YTFjNCwgMHgzZTc0ZGVmOSwgMHhiZmNlOGJkYiwKLQkweGNiMGU3NDYxLCAweGQxNWJkMDE3LCAweDljODE4ZjEzLCAweGNlNWJlYjhkLCAweGFjNGUzMTZjLCAweDZjZDFmMGQ3LAotCTB4ZTQ2OGZiOGMsIDB4ZGUwMTQwZTcsIDB4ZTdkZDY4NWYsIDB4MzlkN2Q5ZmMsIDB4ZjdhYjMyY2UsIDB4ZTBmZTM1NzUsCi0JMHgxOTk1ZDFiYywgMHg2ZTQyOGZlNiwgMHg2YjU4MmVkNywgMHg4ZGY0NzNjNiwgMHhiY2IzYzk4NCwgMHhiZWFmZGEzMywKLQkweDUyMzRlOWE3LCAweGZhYTI5NDAzLCAweDA5ZTdkMDFkLCAweDIxMDcwYWI4LCAweDIyNjg1YWVmLCAweGY4M2Y3NDE5LAotCTB4NGVlOTZhNDUsIDB4NzFmOWE3ODgsIDB4OGEzYzVjYmIsIDB4NDlhMzYzY2UsIDB4ZWUxZDc2OWUsIDB4MDBkN2RjMGIsCi0JMHgwZDhhNmJmYywgMHg4OGFmODg0ZSwgMHhmMDA1MzhmNSwgMHgwMDRiYTA0MywgMHhlYjJmNzBlNCwgMHhmYmJhNGM2NywKLQkweGJhYWZkYzcyLCAweDFmNDA2M2RjLCAweDUyZjRlMDFjLCAweGExZTBhYmU4LCAweDJmYWVmNWFmLCAweDk4NjJkYWJhLAotCTB4NzJmMDI0NWMsIDB4OTk3OTFlYmQsIDB4NGYwMzRkY2IsIDB4NjQ0N2FlMmYsIDB4NDFjOWU0MTEsIDB4MTg0NDhiYmMsCi0JMHgwN2E2NDRmZiwgMHgyMjY0N2E0MywgMHhjZmJlNzNjMSwgMHhmM2U0N2E3NSwgMHg3YzhmNWUxZiwgMHhiOTIzZDFhZSwKLQkweDA4ZjUxMTFkLCAweGZmOTQ0NWZkLCAweDY4YjlhNjg0LCAweDkxYzM5MmNmLCAweDg2Mjk1OWVkLCAweGIwMDljN2FkLAotCTB4MDk3YWQyOGUsIDB4YTFmYmZiMzIsIDB4NTJkZjM4MDcsIDB4YzQzOGM0OGUsIDB4YzYzMzI2YzYsIDB4Yzg3YTJiNWQsCi0JMHhjM2U0OGQzMSwgMHhjMDc1M2JkZiwgMHhhNmI1MGJiYSwgMHg4MjRmMGY3OSwgMHg5MzI0ZDdmMywgMHg0ZjgzY2UwYiwKLQkweGY3NDhkZDRiLCAweGRjYzM3NGQzLCAweDIyNTFmYzg4LCAweGU4MjNiZDAwLCAweDBiN2UwMjIzLCAweDk5ODM0ZmY5LAotCTB4NDU2YzVkZGYsIDB4NDg1MDU5MzksIDB4YjlkZDFkNzAsIDB4NTVmMjNjNzYsIDB4MDA5YTcxNzksIDB4MmViMTViN2MsCi0JMHhiOGYyODA1NiwgMHhlODAzNGVjOSwgMHhlMzFlNjUyYiwgMHhjNjQ4MWExNywgMHg5NDgzOTQxOCwgMHg4YzFjOTUxOCwKLQkweGMwNDRlYjk3LCAweDZmNzhiMGQ3LCAweGM4NGIxNDkyLCAweGZmNGYzMTY1LCAweGI5YjdlZDU4LCAweDdlZDVlNjg0LAotCTB4ZjY1ZjlhMWIsIDB4OTczNmZjNWQsIDB4NjVjOWZjZmQsIDB4NzNjOWI3ZTAsIDB4OGNjNjQ2NzgsIDB4NjVjZGZmNDMsCi0JMHhhYzBjZTY5MCwgMHg2ZjRhODkxMywgMHhmYjhlY2M1ZCwgMHhjYjUyZmNiZSwgMHg0MGU0NDNmZCwgMHhhY2VjN2YyZiwKLQkweGM3ZjQyZTc1LCAweGQ0N2MwMjRlLCAweDA2Nzg5ZjI0LCAweDE1M2JlMWMwLCAweDM2NmVlZDExLCAweDJmNWMwMThlLAotCTB4ZDIwOTBmOTAsIDB4OWQ0OTQwNjMsIDB4NDUxMmZlMDgsIDB4ODcwMzVjZWYsIDB4MWVkNDI4YWUsIDB4MTQzM2NlMDEsCi0JMHg4NWJkMDM3OSwgMHhjZTNjNmVlNywgMHg3NjU1ZmMwMSwgMHg5MWZiZDdmNCwgMHg5MzFmMjA4ZiwgMHgyYjQ3ZDYxZCwKLQkweGRmMTEwZDhhLCAweGM2MzNiZTExLCAweDY3ZWE4M2Y2LCAweGQ2ZjVmYWQyLCAweGY4ZjBlNTlmLCAweGU5ZTUxMTVmLAotCTB4M2Q5NTE4Y2UsIDB4ZDFmMTY0ZjQsIDB4YzEwZTc2NDQsIDB4OWJiYmU1ZGUsIDB4NDVhYmYxZjcsIDB4MTkyZWY3ZWUsCi0JMHg2MTVmN2UxMCwgMHg0MzI0ZDliNCwgMHgxMGYxMjkzYywgMHg0ZjE1NTM5NywgMHg0MTBhYjQyYywgMHhmZWE3YzQzYiwKLQkweDc0NmU3NjBkLCAweDAzMzdmZGJmLCAweGI3ZmFiZmE2LCAweGIwNTRhMjkyLCAweDZlMGM1YmU3LCAweDdjNDExOTZhLAotCTB4N2I4M2NhMDUsIDB4MjY3YmMxMTgsIDB4NjE2ZWZlMDEsIDB4MjNjZDliNWUsIDB4ODg0M2JmODEsIDB4M2RhMGY3ZTIsCi0JMHhkYzhkZjNkYSwgMHg2ODFiYTFlZSwgMHgzMzU2ZTJmOSwgMHhhZWJkY2RmZSwgMHgxZWVmZTUzYywgMHhiMjFlZjFiOCwKLQkweDdkYWNkZjgyLCAweGI4YzQ4ZTRmLCAweDFiYTM2MzRkLCAweDg1OGQ2Y2U0LCAweDUxNjM1ZmMxLCAweDYwNjJiYmVhLAotCTB4MWNlYmVlYmQsIDB4NjRjMmUyN2QsIDB4ZmUyOWY3ZjQsIDB4NDFkZDg5YzUsIDB4ZDY5MmYwMTEsIDB4ZTBiMDMyZWQsCi0JMHhiMThmZDYzNSwgMHg5NTdjZTA5YiwgMHhjNzAwZjVmMywgMHg5YjNkZTZmYiwgMHg3M2M3NTg0NCwgMHg4NjJlMzcyNiwKLQkweDc2NGJjZWZkLCAweGYzYzAwYWVmLCAweDc2YjUxMzk1LCAweDBlYTE1OGRlLCAweGI5MjQ2ZWZmLCAweDQ5M2VlMDg2LAotCTB4MGVmODhmOTEsIDB4OWE0YzAzYjIsIDB4MWUxZGMzZDgsIDB4OWU1NzNkNTAsIDB4ZmQ4MGVjZjIsIDB4MTEwOTRjNjQsCi0JMHhhZTJhOWUwMCwgMHg1ZjIwMTdlNywgMHhiODQ3ODA2NCwgMHhiZGZjMDA2ZSwgMHgwOGI3ZmU0ZSwgMHg3YmNkOWMzOSwKLQkweGY3OTAwNWYyLCAweDA1OTNlZDAxLCAweGZlNmY2NjU3LCAweGVlZmIwOTVlLCAweDA0ZmUyY2IxLCAweDA3ZWNhYWU4LAotCTB4YjJmNmZkODcsIDB4NTM0ZmUwYzksIDB4NjE4ZDZmZWEsIDB4YWYyYWZjN2EsIDB4YzQ1YzAwYjcsIDB4NDIyZjNlNzQsCi0JMHhmYmE2MTNiZiwgMHhhOTI5ZTBkYiwgMHg5YjcyZTVmMSwgMHhjZjlhYTVjOSwgMHg1MmYwODI3YywgMHhjNzljNjQzYSwKLQkweDNjZGVjM2EwLCAweDYyZDlmNzQ4LCAweDRmMmJkZmIxLCAweDY1NmUzMTA1LCAweDcwYzExZDYwLCAweDA3ZWQyMTllLAotCTB4NTIxYTdlZDAsIDB4MWQwMDJlZDcsIDB4MGI3OWVmMzcsIDB4N2RiODNiYzcsIDB4NWNiOTRiMjcsIDB4ODBmNmUyNmQsCi0JMHgzNjdkYWUzMiwgMHhlM2VlNWViNiwgMHhlNzBkZDFlNywgMHg3YWY5N2FkOCwgMHg5MmUzMTc4YywgMHhlNDM0Nzk5NCwKLQkweDI4ZWE5Mzc5LCAweDZmMTA5NWZjLCAweDc4ZWZiNjMzLCAweDQyNjNiNzliLCAweDAxNmYzNmYxLCAweDc3YTc2YWJkLAotCTB4ZDNkZTA2ZWMsIDB4ZjcxMjBkZmIsIDB4MjQ3YTQ1MWUsIDB4ZjFkYjY0MmUsIDB4MDgxNzdiOTUsIDB4Y2U1NjI3YTAsCi0JMHg1MDM3ZWM4YywgMHhlZTRhYzVmNCwgMHhiNWM1NTU3NywgMHg1YWEzMTdiYywgMHhjNjk2YTcyZiwgMHhmYTU0ZDM1OSwKLQkweDRjZjc2OTQ4LCAweDMzNjVhZTM4LCAweDUzNzk2YjhmLCAweDUyZDQ2ZWQzLCAweDBjZDNmMDBiLCAweDhjMTBlNzliLAotCTB4M2Y3YmY5NWIsIDB4ZDFkZmY5ZWIsIDB4MGFiMWY2NTEsIDB4MGM5ZDUyYmUsIDB4ZGNjN2FmNWYsIDB4OGRjZTBmYjgsCi0JMHhjYTRlNGYwMCwgMHg5MTJkZWJjNywgMHg5YzEzYzNlMywgMHgzMDZmNmUwNiwgMHg4Y2VkMjE3ZSwgMHg2YTFlNjA1ZiwKLQkweGI3MDJlYmJiLCAweDc4ZjJhZTNiLCAweDRmOGM4YzBiLCAweGM5M2U0NTNlLCAweGRmMDFiN2Y1LCAweGRiOTIyZjhlLAotCTB4MTA4N2ZmODAsIDB4OGM0NTI3Y2UsIDB4MWVmY2Y0NGYsIDB4N2NlMzhjZWQsIDB4ZWYwMDRkZDIsIDB4YjFiZGUxNjMsCi0JMHgzZmYxZmEwOCwgMHgwNjdjZDg2MywgMHhmZjIzZTdiNCwgMHgwYWY4Nzk1MCwgMHgzYTk0OWJkNywgMHg0OTIzYzI1MSwKLQkweGMzOGM1NGU3LCAweDdlOTk1NTg0LCAweDY5ZWI5MzFmLCAweDdhNzM3ZTAzLCAweGQzOWU1MDRhLCAweDA3NjY0ZWFkLAotCTB4YTBmZTMyYTUsIDB4NDI2NzA1ZWQsIDB4MmZmZTllNTgsIDB4NGY4NDJjZTcsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHhiM2RhZThiOSwgMHg2NDkzMjY2NywgMHg2ZjI2NGM5MiwKLQkweDgwODQ5YWYyLCAweDNjODcwMTA4LCAweDRlM2QyODc4LCAweDBmNzg2MDFlLCAweDAyNDgzNTA4LCAweDQ4MDQyYmMzLAotCTB4ZDJkMDQxMzIsIDB4MjAxOTZmMWUsIDB4ODM1NDgwODYsIDB4YTk2YTFlYTUsIDB4NWFmMTFlMGUsIDB4ZDUyODM2OGEsCi0JMHhmMDlkODM2MCwgMHg0MWQwNTgyYSwgMHgzOTZiNDJkMSwgMHgwYThhMjM0MSwgMHhmNDFlYTAwOSwgMHhmZmZkZTNkMCwKLQkweGNjY2RhZDdmLCAweDIyODg5OWRlLCAweGI5ZWVmYmY2LCAweDYyZWNmZDM3LCAweGRhZjZiZGVkLCAweDhmZGZmYWZmLAotCTB4ZmIwY2Q3YjUsIDB4MzNkNmM2MGYsIDB4MmExZDc2YzYsIDB4OGNiOTZjOTYsIDB4Nzk0YmZiYzUsIDB4YzVhMzk4Y2IsCi0JMHg4Y2YzZDhjYywgMHhmZjQwYjU5NSwgMHg5ZGJiZmMyYiwgMHg3NDYzY2ZiMSwgMHgxNjMwMjU4YywgMHgyYjE4OTE2YiwKLQkweGE0NmZhYzY0LCAweDU5OGRmYTg1LCAweDE4N2FlNGFlLCAweDE1ZDIzNmJmLCAweDc5YzA0OTZkLCAweDI2MDkwZTc0LAotCTB4ZWNjMjdlMTksIDB4Zjg3NDMwNjUsIDB4OTk5OTdhZjIsIDB4YzRiZjVlNzEsIDB4ZDVhY2M2NjQsIDB4YmMyMzIyOTYsCi0JMHgyZWM2YjUzNywgMHg3ZWZlNjBiOSwgMHgwYjc4Y2U5MSwgMHgwYjE3MDNjZCwgMHg3OWQyMmRhMCwgMHgyZDczYzBkNywKLQkweDY2YTM4ZWQxLCAweDY3OTJjZjc4LCAweDI2OWQyZGMyLCAweGMxNWY3ZjQ2LCAweGIxMmRiNTdmLCAweDM1YmJiZWFhLAotCTB4MjAzOWQyYzUsIDB4ZmY4MjVmZDAsIDB4MGVmZjgxNDgsIDB4YzYxYjEzMzEsIDB4YzViZjBkNTgsIDB4MmNhZWM4OTYsCi0JMHg2YjU3Y2MwYiwgMHgwZTY4NzhlYSwgMHhmMzdlZWJmNCwgMHg5MmMxOTFiOSwgMHg4MDVlYjg2YywgMHg3OTQzZjllMywKLQkweDgxY2Q3MzkxLCAweGQ2MmFkZWY1LCAweDU1YzM5Yjc5LCAweGNmZjE4N2EyLCAweGM2NmViOTQ2LCAweGYwOGU0N2U3LAotCTB4YTFlMTkzZWUsIDB4N2Q5ZTY1ZTEsIDB4YTQwYjY4N2EsIDB4YjA1MTdkZmEsIDB4ZDk5NjM2NWUsIDB4YWUzZjQxYjcsCi0JMHg0MzQ3YjU4MywgMHg4NzQ0ZjYzNywgMHg0N2ZhMWEyMywgMHhhNzg0YjFjZCwgMHhiNDc0M2Y1YiwgMHg2MmZhYzJlNywKLQkweGU3YzI0YzljLCAweDM4Zjk1ZjAxLCAweGU1Nzc4YjFmLCAweGRlMjMwNzNiLCAweGUwMGNjYjk2LCAweDYxZTkwMTc4LAotCTB4OGUzZDM2YmUsIDB4ZGYwNDc1OWEsIDB4NTM4NzMzNTEsIDB4NDg4NGMzYTEsIDB4NWQwYjI4YzcsIDB4NGY1ZWY0NjcsCi0JMHhkNzgwMWIzMSwgMHg5NWQwNGMzNywgMHg1NzllODM3OSwgMHg0Y2M1YTc1YSwgMHhjZjFiYWVlMywgMHgzMDdkMzA5ZiwKLQkweDdmZGI1OTllLCAweGU4MTNmOGJkLCAweDMyZGZmMWJiLCAweGYwMjlkZGUxLCAweGQ2MTdkZDFlLCAweGVmMDlmM2ZkLAotCTB4OTVlMGJhMjYsIDB4NjFmNzUzM2EsIDB4ZGI1MWYwMDksIDB4NTg2NGRiMjYsIDB4OTY2NGEwYzIsIDB4ZDhjNzE5ZGIsCi0JMHgwZWFkZmI5YSwgMHg1YTI3ODNlNCwgMHg4YzE4N2IyNCwgMHhiMzY2MGU2NywgMHgyNTY0MzIyNCwgMHhkZmY5ZDYyMiwKLQkweGI3NjEwY2M3LCAweGFjMTcwYjQwLCAweDYyOTNjZTMwLCAweGRlNDM2ZWY0LCAweDQzMzM3ZmQ5LCAweDAyYjFkYzM4LAotCTB4YzNlODA2OGUsIDB4MDUxNjVkNzMsIDB4MGRmNTA3MzAsIDB4NDU5ZmVhZWMsIDB4Zjg2MWYxODIsIDB4NmE0Yjk4MmYsCi0JMHg4MDk3NmY2OSwgMHgzMDQ2NmI3MCwgMHhkZWUwMDE5NywgMHgzZjEzMjZkNywgMHhlMTE4ZDEzZSwgMHg3ZmY5ODMwZCwKLQkweGUxZTJlM2JiLCAweGI5Y2ZkMDk5LCAweDgyY2I4NzVmLCAweDMzOTYwOWJmLCAweDQzYThmODkxLCAweDM5NWEwYWZhLAotCTB4MGY0MDM0ZGEsIDB4ODQ3MmVkZjcsIDB4MmRmMTg2NWQsIDB4NTg0M2QxMTEsIDB4ZmI0NTYzMGMsIDB4OWFkOWY5ODgsCi0JMHhiYzBmMzA3ZSwgMHgwNDdiNGQ2NywgMHgzZjRkNmZhZCwgMHhlMjJjOGY5MCwgMHhmZjkxN2I4MywgMHg1OTE5NDdmNywKLQkweDA0YmY1YzBhLCAweDg2ZTM4MzcyLCAweDQ2Mzc4ZWIzLCAweDc0ZTgwNTY1LCAweDU5ZDNmNWE5LCAweGVlZmQ2MTdiLAotCTB4ZDc2ZjNlNDgsIDB4OTFmZDJiZGUsIDB4ZTNmYjk1N2YsIDB4OTdiNWNjNTYsIDB4MmM1NjMzZTYsIDB4ZjM4YTdlYmIsCi0JMHgxZDVmZDcyOSwgMHhlMjM0NWVmMCwgMHg4MjM0YjE5YiwgMHgwNzI3ZTg5NywgMHgzNzhhYmJlMCwgMHgxY2FmYzcwYiwKLQkweDc0NzVhN2E1LCAweGFlM2IwOGIxLCAweDYwZThjNWJiLCAweDI5Y2YyNzQ4LCAweDVlMGFkZmNlLCAweDc0NmYwNGViLAotCTB4NzA5ZTE1YjUsIDB4Mzg5ZWZhYzEsIDB4ZTdjNzY2OTEsIDB4ODUyZjVhYmIsIDB4YjM3ZGUwZWIsIDB4MjMwZjVjNjMsCi0JMHhlZWY0ZTVkZCwgMHhlMjJlNjc2OCwgMHgxZGNkZDJmMywgMHhlNzVlYjhiOSwgMHhkMmVmODQ0NiwgMHhhZWFjZjc5MSwKLQkweGRmNWFlYmRjLCAweDdkNjRkZjYzLCAweDQ5YjliZDZlLCAweDNmYzllOThhLCAweGRhOTAzZTVhLCAweDg2OTBiZmRhLAotCTB4ZDQzMDljOTAsIDB4ZTYwYzllNWIsIDB4NmVlYjAzNWQsIDB4NDliNDNjMWMsIDB4NjM0ZjQyNDYsIDB4YzY0Zjk0MzYsCi0JMHgwNjY3MmMyYSwgMHgzMTNkZTgwNSwgMHgxMmRkYjljNiwgMHgxODhlNWYyNCwgMHgyZjVjMGVlNywgMHg4ZjM1MjdiZSwKLQkweGRlMWNmOWQ2LCAweDVlNzQ3MjFmLCAweDVkNzc0MWJlLCAweGY0Mjk3Y2ViLCAweGFmNDQ3ZDNhLCAweDVhOWViMTVhLAotCTB4MDMyN2Q5OTMsIDB4ZTE5NzZjZmMsIDB4M2U0NTBlOTMsIDB4MGJjMjdiYjMsIDB4ZjA4YmQ4ZjQsIDB4MjdlZDhhNzksCi0JMHhiZmNmNDg1YywgMHgxMDZiZWQ5YSwgMHhjNWJmN2ExZiwgMHhlZmYwNDUxOSwgMHgxMWIxZjdjNywgMHhiZDcxOTI3MywKLQkweGZmMWQyMzZiLCAweGY2ZmU4NjY1LCAweDgzZjM4YzU1LCAweDEyN2Y2MTE0LCAweGJmNzNiNzE2LCAweGU0ZjUwMjM1LAotCTB4OWZkNzE4YzQsIDB4YmE4MWJlNzEsIDB4ZDA5Y2IzOGIsIDB4NzUzYmYwMmYsIDB4NzgxZGI5NzMsIDB4OTJmYmFjNGQsCi0JMHg5N2E4ZTA5ZSwgMHg1OGViZmU3MSwgMHhhZjQyNWZmZiwgMHhmZTFkMDdiZiwgMHgwNTA3NGMxNiwgMHg3ZDA0YTMzZiwKLQkweDUwN2UyMTQ3LCAweDNmZWI3NzIxLCAweGYwMDUzMGU5LCAweDRmNTI4MTIzLCAweDhmOWNmNmI1LCAweDg0MGM4ZWIxLAotCTB4MDdmNzdkYjcsIDB4YmU2MDNiZmQsIDB4OTgzZTU3YmEsIDB4Zjc1YmYyODUsIDB4YjcxMTE4NzIsIDB4NjM5YmU1ZjQsCi0JMHgxN2NmOGY5MCwgMHg3MzE2ZjJiMSwgMHhjOWZhN2Q0ZiwgMHgzZWJiN2FjYSwgMHg0YjRlYjE4NywgMHgxYWQ1ZTkzNiwKLQkweGJlYjIzN2U2LCAweGRhOTc0ZmE4LCAweDE0ZmE0MWY1LCAweDQ3ZmJhNjIwLCAweDM4MDlmZTBjLCAweDk5NDI5MWZmLAotCTB4YmJiZTAyYWQsIDB4YzQ5ZTFmNjQsIDB4YTU2OWU4NDIsIDB4YjMyNTZkN2QsIDB4N2ZkODA3Y2YsIDB4ZjAwZTdhOGUsCi0JMHg0MTc3NjQzZiwgMHhjZGE1ZTEwYywgMHgzYjU4ZmE0YSwgMHg2YWNhYzhmZSwgMHhlZjRlNjk3YiwgMHgxYTE5MWRmMywKLQkweGJiNDVlZTVlLCAweGIwNjczMTIxLCAweGU1ODg0OTdkLCAweGI0NTcyNTc2LCAweDA4MWQyOGEwLCAweGEzMTdiOWU3LAotCTB4NzRiODFlYmMsIDB4NjhhZGVmMmUsIDB4YjczYTc4MDYsIDB4MGY3Y2NkZWIsIDB4ZTYzOWNiZjAsIDB4OTQwN2Y2NWYsCi0JMHg2Y2NkNGY5ZiwgMHhhMWM3NmExYiwgMHg4YWFmZTU2ZiwgMHgwZmRiYzgwYSwgMHhmZmI1ZjA0NiwgMHhkMWEzYTVlMCwKLQkweDYxM2YxODM2LCAweDRmNzhiZWU3LCAweGMwN2VmZTEwLCAweGU1NWU5ZmY0LCAweDJmN2MyY2RmLCAweDdkMzBmYzIzLAotCTB4MDdhNDdmNDcsIDB4NDRkOWMzZmIsIDB4NzYxM2I0MWIsIDB4N2NlNzg4MWYsIDB4M2E0M2E4OTAsIDB4ZWI3YTE3MmYsCi0JMHg2NDY5Nzg3NywgMHgyYjA5YmU2MCwgMHg5NDhmODhlYSwgMHgxMzY1ZWQ3ZSwgMHhmNTA1YzZmMywgMHg5YTIzN2VmNSwKLQkweDY2Y2JkYWJlLCAweDVmNzE4NWU2LCAweDQ5ZTJhMjU4LCAweDdkNjFmNDdmLCAweDUzN2M3ZjUwLCAweDJiYWY2OWJjLAotCTB4ZjQzMjNiNzgsIDB4ZWZkYTA2NmMsIDB4ZjlhMWUxZjMsIDB4NzcxODg0NjQsIDB4MDkzMjNlYzksIDB4NDYwOWEzZmQsCi0JMHhjNDI1OGU1ZiwgMHgzNGJjYzYzOCwgMHg1N2FlYmI0ZSwgMHhhNWVjYmE1NywgMHgxYmUxZGVmYSwgMHg5NmFlNjQ2ZiwKLQkweGY0MzQ3YzEwLCAweDk5YzM3YmVhLCAweGQ5N2FlNDA3LCAweGExZDkwMzU2LCAweDMyZmU1N2EzLCAweGY3ZTgxZjJkLAotCTB4NjU4MzE2YzEsIDB4ZmFiM2UwMzUsIDB4N2VkMmZiZDcsIDB4ODdhYmY3MGUsIDB4ZTgyNDU5ODYsIDB4ZTVmMzYwN2YsCi0JMHhmYzJmMWYyMCwgMHg3NWM0ZWNiNSwgMHg1OTY1YjA3ZiwgMHgzZjY4M2NlMiwgMHgwMWFjN2UwNiwgMHgzNTZlMTYzOCwKLQkweGFkZWFmNWQwLCAweGIzZjVkMmY3LCAweGZlMTc0ZjgyLCAweGVhMTA2MTNhLCAweGQ3ZmJhM2Y5LCAweGFiM2FlMjI3LAotCTB4ODdmNmIxZmYsIDB4MWE3NjJmYTgsIDB4NDI4NjgzMmQsIDB4YjI0M2IzNWIsIDB4YzVjOTA2OTcsIDB4NTVjMmE3ZTIsCi0JMHg1NjNhOWRmZCwgMHhkNjUwZWI4ZCwgMHhkNWQ3MjRjZCwgMHhhNzgwMzZmYiwgMHhkZGY3NTYyYSwgMHg2YWZkOTdmYywKLQkweDk1ZmMwNWZmLCAweGYyMDRkOGFhLCAweDA5ZGQyNjU3LCAweGJjMmJhZWViLCAweGJlZTI3ZTQ0LCAweGM3NjQxMTgzLAotCTB4Yzk5NjY4ZmYsIDB4ZmQwZGYwMWYsIDB4MDJkZjNmY2YsIDB4ZTg3ZjkyZmQsIDB4MDg0M2U0ZWQsIDB4ZjQyZDFmM2UsCi0JMHhhNGM5NjMzMiwgMHhiYzRjYWE4NywgMHg0ZjViYjI1ZiwgMHg5NDQ5NDRmZSwgMHhmMTg2Zjg0YywgMHhmZjcwZDFlNiwKLQkweDFmNzhjNDVmLCAweDM3ZTQwZGU4LCAweDM0ZGE4ZjI2LCAweDhlOGRjNjEyLCAweDEzZjQzMDMxLCAweDc4YjdjNWZmLAotCTB4N2VmZDAzMDIsIDB4YmJmZDY1ZmIsIDB4MjllYjQxMWQsIDB4ZDAwM2NkNjYsIDB4MDY2MjI5MTEsIDB4MWU4Nzc1Y2QsCi0JMHhkNDk4OTdhZiwgMHg4Y2U3NDdkNywgMHg2ZTc2OGIzYiwgMHg1ZDdkNDViNCwgMHg1ODg2OWI5MSwgMHgwMTQxZmZlMCwKLQkweGYwNzdkZmZlLCAweGMzYzY0N2EzLCAweGM4OGVhYWZhLCAweDg2YmIwZmRjLCAweGUxMGQ3OTdlLCAweDVmOWQyM2Q3LAotCTB4Y2YwMWQ4YWQsIDB4Mzk1ODE1MWQsIDB4ODY4M2U1N2EsIDB4MTFhYmU0MTQsIDB4ZmQwZDViMTIsIDB4OTU4NGFlMGYsCi0JMHgwYjg3OTI4NSwgMHhiY2EzNmZlOCwgMHg4MGVmYTAzMywgMHhkYTI3N2QwMCwgMHhhM2VkNWQxNywgMHhiMTFlNGMzOCwKLQkweGUxMWY2YWY0LCAweGVlN2FlNmZmLCAweDExZDFlNWViLCAweDZiZjdhNDZiLCAweDZlNTZhMGY1LCAweDM4M2QyZmJlLAotCTB4MGM4MWU4NjEsIDB4NGZiNTE0NGYsIDB4NGVjOWZiNjMsIDB4N2FiNDVmYWUsIDB4MTRmN2FiNTEsIDB4ZDZmMGI0YjgsCi0JMHhmNGE5ZDY1ZSwgMHgxYjU4ZDBkZCwgMHgzZGU4MGI4ZCwgMHgxYmJkZTkyMywgMHg4ZDFkNWYxOCwgMHg4MTVmMTEwZCwKLQkweDc5N2MyNjVkLCAweGFlMjllOTg2LCAweDBkZTFiZjAzLCAweGI2NmI5NzFjLCAweDQ4MDExNWM1LCAweDQ4ZWM5NjBkLAotCTB4Y2MzM2U3ZDQsIDB4ZWU1MGI3YWUsIDB4YjAzYjdmMzIsIDB4MWViZDgxOTQsIDB4ODc1OWEzYjQsIDB4ZTI0YmEzN2EsCi0JMHgxMDZlZGFmNCwgMHgwMzczZjYyZCwgMHg2MjNiY2ZmMSwgMHhiY2IxZWRmZCwgMHhjNTBmZjEwZiwgMHg4YTJiZDk4ZCwKLQkweGZlYjA3YmQ5LCAweDg0ZjMxMzMwLCAweGY3YmQ5MWU3LCAweGYzMDJmMjE4LCAweGEyZTMxY2JmLCAweDhjNDU4ZDcxLAotCTB4ZGNiMTlkYzcsIDB4NjAxZWNiZWYsIDB4N2U2MDU5ZDMsIDB4ODc1OTIwMzYsIDB4NzAyNjVhZjQsIDB4MjVhNTc2YjEsCi0JMHg3YmY4MTNiNywgMHg2YTY0Y2FkZCwgMHhlN2M0NWZkMSwgMHg2ODIzN2IzYywgMHhjZTRiZWY1ZCwgMHg2Yjc3MjgyMSwKLQkweDdhNWE3YzA1LCAweGZlMTU1YjY0LCAweGY2MGZmNjc2LCAweDg3MTQxNjg3LCAweDU2ZDFkM2Q2LCAweGU4YTdhZDNkLAotCTB4ZTgxOTE5ZDEsIDB4N2VkZmJjNmYsIDB4Y2ZlYTA2NzcsIDB4M2Y1ZTAxZjcsIDB4M2RiZDNmZGEsIDB4ODRmY2ViZTYsCi0JMHgzZTNjODU4NywgMHg4YzQ0ZWMyOCwgMHgyNjdmMjM4OCwgMHhjN2Q4MDRlNCwgMHhiNWZkMTNiMSwgMHhiZmJhNGU5NSwKLQkweGI1Mzk2NTZlLCAweGEwYWU1NzFiLCAweDU5YjFkZGZiLCAweDkxZThmZWY0LCAweDgxYjNmYmNmLCAweDY0MWI5ZDdlLAotCTB4OGMwYjAzYjIsIDB4ZjBiMWZlY2UsIDB4OGU5MzRlZGUsIDB4ZWFmN2QxZTIsIDB4Y2NiYjY1Y2QsIDB4NWM1MTlkNzgsCi0JMHhmMWQxZTBiMywgMHgxNDJlNTBkYiwgMHhmNTYzYmEzOCwgMHhkNmRlZWViNCwgMHgzZWJkNmQ5OSwgMHgzYWNiNWRmZCwKLQkweDVkMWVkMWEyLCAweDAwNzdjN2U1LCAweDdlMDE4OTNiLCAweDMyYmIyMTljLCAweGM3MTgwOWFkLCAweDM4ZTIyNDc0LAotCTB4YmZlZmU0YjcsIDB4ZWU4MDgyODMsIDB4OTU2ZmY0MGMsIDB4ZWNjYWZmZjcsIDB4NjIxNmI2YzgsIDB4YTEwNmMzOWMsCi0JMHg3MDQ0YjQ1YywgMHg3Mzg1YTM3YiwgMHhkOWYzOTVhMCwgMHhjMTM2OTVkYSwgMHhmZGE4MDMwNywgMHhlZjYxZjg1OCwKLQkweGExMGE5ZGEzLCAweGNmMTE2ZTU3LCAweDZlM2IzNjFkLCAweDY2MzBmN2MxLCAweGQ2OTM3ZjI2LCAweGRhM2JmYTgxLAotCTB4NDI3MDg3OTEsIDB4Zjc4MDUwYmMsIDB4Y2JkNTI1ODcsIDB4ZGJmOTA5MDYsIDB4ZjgwZGY1YzIsIDB4NzcxZmRjYTUsCi0JMHgyYzcxYzQ4ZSwgMHgwNDRkMjFkZSwgMHhmOTEzMGM3YSwgMHgwNWYyZGU5YiwgMHhiNGRlMzg1YSwgMHhlNmQwZjk3MiwKLQkweGM5NTY5NDExLCAweGY5NWE5NDIzLCAweDZiMTZmZTdhLCAweDZjNzdlNTUxLCAweDJhMTFjYzJkLCAweGNhZDViMDdmLAotCTB4YzNiMjY2ZjUsIDB4N2FkYTQ3MjEsIDB4ZDcwMmJiOTcsIDB4ZjMxOTFlYmIsIDB4ZGVjY2U1MjQsIDB4NTFhNDlhMGYsCi0JMHgzZjk4ZWQyZCwgMHhhZWY1Mjk0OSwgMHg2MzRhZmNjMiwgMHgzZDBlNTZhYywgMHhjOTU3OThlMSwgMHgzZDEyZTk3NiwKLQkweGVmZDEyZTMwLCAweDFjMDIzMjJhLCAweGU5MTI2MjViLCAweDdlYWM0OTdkLCAweGMwYWJkMjE1LCAweDE3NDVhM2E1LAotCTB4NGFmMDhmZWMsIDB4NDMwNzkwNGEsIDB4MDQ3ZTg1ZjIsIDB4Nzk0NzBkMDksIDB4OWFlNTFmMWIsIDB4NWY5ZGY4NDMsCi0JMHhjMzY4YzZiZiwgMHg0NjQ3OTNmYywgMHgwMjU2NzJmZCwgMHgzOGZlMDEzZSwgMHhhNDIyMjA3YiwgMHgyMjhmNzczZiwKLQkweDFmNzE1MmI3LCAweDRmMDVlOTM0LCAweDA1MGYwODE5LCAweDE2NjJmZDRmLCAweGQ0ZjA1YmMyLCAweDI4Mjk3YTFkLAotCTB4NmFjODdmNGUsIDB4M2Q5ZGZjMjAsIDB4ZTI5MzM4YjAsIDB4YWM2MTkzZTYsIDB4NzljZjU2NWYsIDB4NTQ1ZjA1MWIsCi0JMHg2MGJmN2MwOSwgMHhhYjc3Y2QwYywgMHg1YmFmZmJjNSwgMHg3ZjgyNzc0ZiwgMHhkM2QyYTg5MywgMHg4MTA5YWRhYiwKLQkweGVkNWQ0YzdjLCAweGIzZDNkMjQ1LCAweGZjM2VkY2FjLCAweGIwNzJkZjRhLCAweDU3ZjNlMDBmLCAweGYxMWQ5OWYzLAotCTB4YWQ5OWY4YmUsIDB4YzE3YmE3OTQsIDB4MDc3NjMyZDgsIDB4Yzc0ZWE3YWUsIDB4ZmZiMDBmMzAsIDB4ZmIwN2NiZTAsCi0JMHhkZjM4N2ZhMCwgMHg4M2ZkMTQzNiwgMHhkOTFmY2ZhYiwgMHg3ZmQ3ODhkZSwgMHgyMjg2Y2Q1NSwgMHgxYmJjNTNmZSwKLQkweDdjMDdjYzI1LCAweGY4NGNkZTFlLCAweDE4NWI3Y2ZhLCAweDVhNGIwNTViLCAweGVjNjVhYzc0LCAweGI5YmZhMDRmLAotCTB4YWY1MGM3NDYsIDB4NmYwZGQ3NjgsIDB4YjE5MmU4MzIsIDB4MjM3NDE5ZjUsIDB4ZmY1MWZkMzgsIDB4YzYwNzc0MjksCi0JMHgxNDNkMjIzMiwgMHg1MGZlMjFiYSwgMHhmNmRmZWQ5ZiwgMHhjMGFmYzExMiwgMHg0NmM2MjViNSwgMHhjY2ZjNWJmOCwKLQkweDI3YzhiMWNlLCAweDEyYWM2YTdkLCAweGI4MTQ2N2U2LCAweGI4OWRhYmJlLCAweGY3ZjNmNjgxLCAweDNmNjY2ZmQ2LAotCTB4NjlmYTQ2NWYsIDB4NmVkNmE3ZWQsIDB4ZjYzYjMwY2UsIDB4ODZiYmZlOTAsIDB4ZjgyMzFjZmQsIDB4MGY0MjM3ZjAsCi0JMHg0MWVkOThkYiwgMHgyM2IyNTNjYywgMHg2OGY3Y2EzYSwgMHhmODJhNTJlOSwgMHg3YTJmMjgzMSwgMHg3OTFkN2FjNCwKLQkweDJiNTY2MWQxLCAweDE3OWI1N2JkLCAweDdhZTQ2ZWRkLCAweDY2Y2FkOWI0LCAweDg3ZTUwOTRmLCAweDliNzU3ODA5LAotCTB4MTc2ODhkYmEsIDB4OTBhNGRiZTMsIDB4OTlhOGU5N2EsIDB4OWJkMDI1ZWIsIDB4OWY3MjQxZmYsIDB4ODZhZjVhMWEsCi0JMHhjNDE5ZWZjMCwgMHg3YzNiY2RkYiwgMHg1ZTU0NzE3YiwgMHhiYTI0NGU2YywgMHgwZmNmODA1ZCwgMHg3ODE0Zjg1NCwKLQkweGUwYWFmMDU0LCAweDg4YTYzMWIzLCAweGYwYmI2NWY4LCAweDcwYzRiNzMzLCAweDk5NzAyOTdjLCAweDhlNzE5NGUzLAotCTB4N2E1ZjM4MGIsIDB4MGJmYWZhMmYsIDB4ZmY4MDY3ODEsIDB4YmYxZmMyMzIsIDB4ZWFmMmE5OWMsIDB4YmUzZDNlNGEsCi0JMHgwYjE5MjNkZSwgMHhjYTMwMmNkMCwgMHhiOWM2NjViZiwgMHg1YzYwMTk1NiwgMHg3ZjY2NDhmNywgMHgxNTMxZmExMiwKLQkweDc3ZDQyMjk2LCAweDNiN2I2YWQ2LCAweGNmMWJkZGU2LCAweGUzNjZiY2YxLCAweDRkNWRlNjUyLCAweDdmZmUzMGYzLAotCTB4YTNjYTZjYWUsIDB4ZTY5ZGRlMjIsIDB4NTk0MTc2OWUsIDB4NTMyYmQ4MWYsIDB4MTVjMTIxNWMsIDB4ZjYzNWY3MTEsCi0JMHg0NWNhMDZlYSwgMHg5MzM3ZGM3MiwgMHgxMGI4ZjQ4YiwgMHg3MzFiN2I3NCwgMHhjNzIxMDk4MCwgMHg0Mzc5YzVmNywKLQkweGFmMDczOWQwLCAweGI3Y2U4YjVmLCAweGU1ZTU3ODg5LCAweGNkNDcyOTk4LCAweDBjYjU2ZmMyLCAweDRiNWRkMDA5LAotCTB4ZGY5MWJlY2YsIDB4YzRmNzhmNTEsIDB4MDk3MTZkY2IsIDB4NjFiMmYxM2QsIDB4MWU4MDZlODIsIDB4ZWMyMmM5ZDcsCi0JMHhhNGNlZWNhMSwgMHhkZjNkZWZiOCwgMHg0NDJlMjkzZiwgMHg1NGZlMWZiZSwgMHhhYjEzZjRmZSwgMHg4NGRmYWZlZCwKLQkweDUzMjZiZTcwLCAweDRmYzRmNDljLCAweDI3OTg4YzNiLCAweDBhZDJmMjU2LCAweDgxMmZlZWJjLCAweDc3M2Y0MGEzLAotCTB4NTZhM2E5N2QsIDB4MjZkNzVlYjksIDB4NTVkYzYzZTUsIDB4ZjkwYWVmYjQsIDB4NWZlZDVkYzcsIDB4YTVkYzdmOTIsCi0JMHhmNzk1OGZmMSwgMHg4OWVjMDNkZSwgMHgzNjVhMzFmMiwgMHhkYzVmZmYxMywgMHg5OTc4ZTNjMiwgMHgxNDZkZmVkOSwKLQkweDY0M2VlMWMwLCAweGYxMWI1ZTYwLCAweGI0MGZmOTJmLCAweGM0NWZlODVlLCAweDYzM2ZjNzE2LCAweGUxNmY3OGE0LAotCTB4Zjk4NjE3ZTEsIDB4MDhjYzUyZTAsIDB4ZTEwNWIzMWQsIDB4YzExMWQ2MmIsIDB4OGFmODQxNmMsIDB4ZmFhYWIzMmIsCi0JMHhhYTNlY2UwOSwgMHhkOWU1NDlmMSwgMHhhZTI5ZmJhYSwgMHhhOWZiYWE4MSwgMHg3ZWFhNzlkNSwgMHhhYWFkZmQ3YSwKLQkweGI3NjA5OWYxLCAweDllNTlmYjgyLCAweDdkZjFhYTcxLCAweGZhYWFhNjliLCAweDU2ZWY5YWZkLCAweDg3MWU2NzhkLAotCTB4MzlkNjA3M2YsIDB4YTZmM2FjNWYsIDB4ZTM1NTczY2QsIDB4NjFmMjRmOTksIDB4MjA4MTY0N2QsIDB4YzdkYmM3ZjMsCi0JMHhjOGZhYzIxYywgMHhiODhmOTE3YywgMHgzNTU4YmJkOSwgMHg3NTY2ODJkZiwgMHgwOGYwODE1ZSwgMHg5NTZhYWI3OCwKLQkweGI3ODg2M2Q4LCAweGQ1ZmJlYWNkLCAweDUzMWIxYjZkLCAweDU1ZTQ1ZGExLCAweDc1OGM1ZjVmLCAweDUzZjkwOTBmLAotCTB4M2FmN2ZkN2QsIDB4ZTNmNDMyZTcsIDB4Y2VhNzE5N2YsIDB4YmU5MzVkZDMsIDB4NDVhZTliOWUsIDB4YzcwZmJiNWYsCi0JMHg3ZjIyODhlZiwgMHg3OWUxZTE2NywgMHhjOTYxNDcyNCwgMHhkYjg2ZmE2YSwgMHg3ZjE2YmUyMiwgMHg5YWFjMDM5MSwKLQkweGFmYmZmMGZiLCAweDVkOTQ1ZmMxLCAweGZjNWEwZmNkLCAweGMxZjc1OWU5LCAweGNlYWI4MDU0LCAweGFjN2RkOTJiLAotCTB4YjUxNmZlMjcsIDB4YjUzODI1NmUsIDB4ZWRlMmQzZjgsIDB4YmNlYTcxOGYsIDB4ZDc0OGRhY2UsIDB4OTcxYmQ0NWUsCi0JMHgwY2NiOTc1YSwgMHhiYzY1ZjNmMywgMHhmNWE5NzhmZSwgMHg2YzQ3MjFkMywgMHg3ZWY5Nzk0MSwgMHg1ZmU1ZTZiZCwKLQkweDk3OTEwYjhkLCAweGNiN2FjMmVmLCAweGQ0MWJlYzJkLCAweDgxN2RmNjViLCAweDhiMDMwODc4LCAweGIyN2EwMDYzLAotCTB4ZDVkMzc2MTEsIDB4MjA3ODRhZmEsIDB4NWJkNWFmMGYsIDB4ZmI3YTBiNGEsIDB4Y2ZhNDcxNmYsIDB4MzVhOTc1MDMsCi0JMHg5OGIwZjRmMCwgMHhhZjA4OWRiNywgMHhlZjE4Yjc1MiwgMHhiN2JjMTE3MiwgMHhlMTIzMjAyMCwgMHhhNzVmMzMzZiwKLQkweGUxZTAwZjMyLCAweDdjNjc5YzNkLCAweGUzMTIzNTkxLCAweGVmZmI5ZGE3LCAweGI1ODA3OGExLCAweDA3M2Q3M2M1LAotCTB4MWYxZTBmMjQsIDB4ZmU5Mjk3ZTQsIDB4YTY3ZmMxNmMsIDB4NDhmYzNkOTAsIDB4NzA0ZmMzZDgsIDB4MzIxZWM1M2UsCi0JMHg1N2JmOTU5ZiwgMHhlNmRlYzNkOCwgMHhiZDE2ZWE1MSwgMHg5OTVlZDJiNSwgMHg1OGRkMmZlYSwgMHhjZmExMDk3ZiwKLQkweGQxZGZmMThkLCAweDIzZDI3Y2FlLCAweDBmOGM2OWZmLCAweGJkZWUwZjhlLCAweDNhZjUxMDc0LCAweDFlM2MzZGUwLAotCTB4MDUxNTE5ZDYsIDB4ZDgwYTUyZjYsIDB4OGM4YjdmY2IsIDB4M2VlYjc5MjYsIDB4ODI2ZjdiMmMsIDB4YjY0ZDE3MGIsCi0JMHhhMDZlNmIxOCwgMHg3Nzg1YTJiZSwgMHhhYjlhYzk5NCwgMHg2ZGUzZDIwZiwgMHgzNjVlZGE5MiwgMHgyM2ZmNzFlNiwKLQkweDFkZmI5ZTMxLCAweDJmZGNjYzkzLCAweGU5ZDYyYzFkLCAweGVlZWJmOGQ2LCAweDgyOTcxZTI2LCAweDA1Yjc1NDM0LAotCTB4ZTM4MzgxZjksIDB4M2JmYzY4YTMsIDB4NzE4MzQ1MTEsIDB4NWM0NTViM2QsIDB4ZDEyNTk4ZGYsIDB4ODkyNTFhZmIsCi0JMHgzMTJkZmFlYywgMHg5ZGZmNzRjNSwgMHg2YzVjYTJiOCwgMHgwZWY3ODlmYiwgMHhkYTA4OWY0NiwgMHg4ZjBlNmNlNiwKLQkweDUwMTNlYzRkLCAweGM3MTBmZmU2LCAweDRjNWI2MjE3LCAweDhiNzhlMGVkLCAweDA2NThlZmM4LCAweDQ0OGZiZDIyLAotCTB4YTM1ZTY4MzgsIDB4MjlmY2FiMmMsIDB4ZTc4YmNkYTUsIDB4OTlhNzQ0N2UsIDB4MmE5MzdlMjksIDB4ZTg0NjNjN2YsCi0JMHg4NzE3Y2MzMSwgMHgyNjM5MzA5MSwgMHhlNDBjNGU4YywgMHhlYTNjOTk4YiwgMHhlNDVlMzFiOCwgMHhkYzdhMjU4OSwKLQkweDVkYmM3NDgxLCAweGJjYjdiMWQwLCAweDY1ODA2M2IxLCAweDQ0MzliYzNmLCAweDFjOTdkOGRlLCAweDFmNmM2ZjMyLAotCTB4Nzg2Mzc5NDMsIDB4ZDJlYjhmNTIsIDB4MGU5MThmZTYsIDB4M2M4MGQ2OTEsIDB4YWFiZjhjNGMsIDB4ZGY1MGQyNmYsCi0JMHgzYzc1NjYzNCwgMHhlM2Y5MWUzMiwgMHgxMjdmNmNhOCwgMHgxM2M3N2Y0MSwgMHhiNmUwMDQzOSwgMHg3Yzc2NzVkOSwKLQkweGI2MTZlNDY0LCAweDBiZmExYzNhLCAweDJmY2EzNjNkLCAweDhhZmUyMDE5LCAweGVmYzgwYmNhLCAweDRlMmNmODkyLAotCTB4ZDMzZTEzZmYsIDB4ZmMzZmI4MTAsIDB4ZTYzYjY3MWQsIDB4NjM0ZmZiOTMsIDB4Y2RmZjU0NTYsIDB4MWEyNGI5YWMsCi0JMHgyYzJkODhmZCwgMHgyNTUyYmM2NCwgMHhkMTdjNjZmOCwgMHgzY2U1MTk1ZSwgMHgyNWY4MWJhMSwgMHhlMmFhM2QwNCwKLQkweGJkYmY4YTc1LCAweGJjMzZlOTAwLCAweGY1MDk3NWRiLCAweDQ4MDdhMjg5LCAweGI0NWM2MTk1LCAweGIyN2U0NzVmLAotCTB4ZTg5NmY5ZjYsIDB4MDdjNDI1OTIsIDB4OTI3OWQwZGUsIDB4ZTM4NzMzNGUsIDB4Mjk3Mzg0NDIsIDB4NTc3ODNmY2UsCi0JMHhjZGY1MTE4NywgMHhjZTZmNDU0MiwgMHhkMDNkMzFkNywgMHhiZjQxNGVmNywgMHhiYWYwYjczYiwgMHhkNWYyYmIzNCwKLQkweDVmZTJiMjU3LCAweGExOWY5YTMxLCAweDJkMzg1ODNlLCAweDg3Nzk4YmNhLCAweDFlNTk2ZDg1LCAweDUxMjljYjgyLAotCTB4NzZkZGM1NWUsIDB4ODVmZDg5Y2MsIDB4OGMxNjA1MDUsIDB4NjU3ZjFkNzMsIDB4ZTQwMTk5ZDIsIDB4NzdhZTMxOWEsCi0JMHhhMjhjZWNmNCwgMHhjNjdlYzgwNywgMHhhYTYyOWQ1MywgMHhiMzRlYWJlMCwgMHhmZDA0ZTA4ZCwgMHhlODEyMjFiYywKLQkweGFhY2I3MGIwLCAweGUxMmZiOGJkLCAweDU0Njc3ZmFkLCAweDc3MjEzODhmLCAweGE2YzljMzBmLCAweGU0NTY3MjAzLAotCTB4MTU2N2FiNjEsIDB4YWYzMGY4NzksIDB4ZjMxMzRjNzcsIDB4Zjc4NGJlNzgsIDB4OWRlZjAyOWEsIDB4ZDY5ODc2ZGUsCi0JMHgzY2MwYzI3MywgMHhhZTk3ZTAyNiwgMHhkMGQ5NzczZCwgMHgzMDRjNmQ0ZiwgMHg0NTdmODlkOSwgMHhlYzk0ZWI5ZCwKLQkweDg3OGM4MDdhLCAweDQxMGViYmJlLCAweDY5MTZkMTliLCAweDU4ZWIwZjU5LCAweGFmZGM2NDYzLCAweDExZDg0NWQ1LAotCTB4MWRjZDEzZmYsIDB4Zjg5N2UyN2EsIDB4ZjFlMjNkNmUsIDB4ZjQ2NzQxMGQsIDB4NGZjZmM5ZWQsIDB4MzkyNzQ0NjAsCi0JMHg5NmU5Yzc1NSwgMHg0NGZiZTM2OSwgMHhiZmY5ZDQ3MiwgMHhjMWRkMDQ5NywgMHhlYmMzNGM2YiwgMHg1OGRmMjMxMywKLQkweDdjY2UwMzZlLCAweGM3MGZkMzc2LCAweGRlYTI0N2U5LCAweDE2Nzk2MzdiLCAweGRkMzY1YmY0LCAweGZjOGY0ZTM1LAotCTB4YTdjNmZhOWQsIDB4Y2ZlYTIwNTksIDB4ZjdlNzJhNmYsIDB4NjlmMWJkMDcsIDB4NmQ3N2Y0MzYsIDB4ZGZlZmMxOWEsCi0JMHg1ZWNmYmM0NiwgMHgzOGY3NzRkYywgMHg3NGJmZWJjYywgMHhmOWYwMmY1NSwgMHgxMjQyMjA5NywgMHhjMzk1YmZhZSwKLQkweGUyYTFmNTc0LCAweDkyYmM1ZjBiLCAweDdjMDY2NjVmLCAweDRmZWRiMzhmLCAweDNhY2VkMDI3LCAweGMzYjdmYTk1LAotCTB4MjM3ZmFhYTAsIDB4ZGY4MDk4YzcsIDB4NjJiZTBiYzYsIDB4MDc2NGQxZjEsIDB4OGRmYTA5YzYsIDB4M2Y2OGZiZDcsCi0JMHgyM2U0Y2U4YywgMHgxYWM0ZGVmYywgMHg4MDM3YzgyYywgMHhlNTVmNGRhZCwgMHhjMDdmN2NmNywgMHg0YmY5YTlhZSwKLQkweDAyYjYzMDcyLCAweDJjZDkyZGU4LCAweDU2NmIyN2M0LCAweGRhMzg1NzMwLCAweDVkZGQ0MGZkLCAweGNjZWVlYmM3LAotCTB4ZTA1N2VmODksIDB4MDNkZmRlNTEsIDB4ZGVhZDIwMmUsIDB4MTZkNzBjMWEsIDB4YWI4MTQ3OWEsIDB4MDc5ODY4NmIsCi0JMHg5ZmIxNDllNSwgMHg1MjVkNWMwYSwgMHhmNDk4ZTNmNywgMHgwZjJmZDlmZSwgMHg3NWJhNDA0ZSwgMHg0ODY3NzU0NSwKLQkweDcwOTBkZmQwLCAweDk1ZDhlODkwLCAweDY0YjhmZGQwLCAweDM4MWJlYTBmLCAweDVhNmNjZjFkLCAweGVmMDNjZTM2LAotCTB4Y2UzYjI4ZDksIDB4MTk4NmRjYTAsIDB4MjY5MmJlZjksIDB4M2RlMDUzOGMsIDB4M2NiODI2MGYsIDB4YmUwM2NmNTgsCi0JMHhlZjkwZmJiMywgMHg4N2E0OGRkMiwgMHg3OWQ0MGI0YSwgMHg2N2MxNmU4OSwgMHhkZWI4MTNjYiwgMHg1Y2Q2MWQxZiwKLQkweGQyZjgwYzdmLCAweGFiNjI0YmJkLCAweGNhZmJiYzYwLCAweDg5ZGEyMzI1LCAweDhkYTc2ZDg5LCAweDc2ZWI2ODBlLAotCTB4YmVhMjM2OWQsIDB4Y2MzZWMzYWEsIDB4MThjNWI3NTMsIDB4MTI3OTZmNTIsIDB4ZDQzZjYxNjQsIDB4ZjQ4MWYwN2UsCi0JMHhlM2M0MGZmZSwgMHgxMmY5ODViZSwgMHhkOWVlZTI1NSwgMHhmYjFhM2IxZCwgMHg1NWMxY2NmNywgMHhhOGY3NzYzMiwKLQkweDVkOTFhMzlkLCAweDBmZWQ5ZDJhLCAweDc1OWIzYjYwLCAweDlhMTY0MDFjLCAweDdlNTU5MmUxLCAweDQ4ZWFjY2U5LAotCTB4NTk1YjVmOTUsIDB4Y2ZlYWE3MWYsIDB4ODBlYTA2NmUsIDB4OTE1ZWNmNWMsIDB4MTgxZjhlYWEsIDB4Y2YwMGFiYzQsCi0JMHg0M2Y4MTYwYywgMHhlODJlNTZmZCwgMHg4Mzc5MjMzOCwgMHhjY2FkZjcxZiwgMHgxZDNjMTk3MCwgMHg2YzRkZjM0MSwKLQkweDIyYjdhNTViLCAweDlkOTJmNWRjLCAweGQ5ODdhZmQ0LCAweDdjOTliOWYwLCAweDNkZWFkMDg1LCAweGQxYjBmNWMxLAotCTB4NTE4OTNjYWQsIDB4N2YyMjZlNTcsIDB4ODBmYjAyYmYsIDB4ZDkxYThhZDcsIDB4MGYxMDkzNmIsIDB4NmVlZmJhNDYsCi0JMHg1YmJlZTg5NSwgMHg0YjU3NzdkYywgMHhlYzk2MWQ0YSwgMHhlMzAxNmNlZSwgMHg0NmM3M2RjYywgMHhlMTEwYjZkMywKLQkweGNlZjAyYmRmLCAweDRiM2IyZjJlLCAweDdhZmMyOGZjLCAweDM2ZTU1ZDY1LCAweDdkNzBiM2IwLCAweDA2ZGJmYTZkLAotCTB4OGZmNjc3OWMsIDB4NDU5NzE2MjQsIDB4NTBlY2VhZWIsIDB4YWZkZDUxZTEsIDB4MTlmNzU3YWMsIDB4OWU2MDMwZWIsCi0JMHhmNTBhZjY3YSwgMHhjMjA5ZTFmNSwgMHg4MzYyMGU5ZSwgMHgyNTQ2OWU1MCwgMHgyZjkyN2E0OCwgMHhmZDI0ZmZkMSwKLQkweDAwN2NkN2VkLCAweGYzYjJlM2RmLCAweDgzZTAwNGY2LCAweGVhOGZhMzFhLCAweDJlY2I4ZjUwLCAweGUxZjcyYmVhLAotCTB4YjkyMzFkN2EsIDB4ZTQ4MDdmMDMsIDB4NWNmOTIyNTgsIDB4OGE1ODcwNjMsIDB4OTVhZThmZDAsIDB4YjI2NzZmODgsCi0JMHgyYjIxN2YyMCwgMHg3MmZhOWUzMCwgMHgwOTNkZmVjZiwgMHgxMzVhNWZkYywgMHhmNTRlNWNlZSwgMHg2NTkyM2RiMCwKLQkweGQ1MmE1YzFiLCAweDA3ZThmNDNiLCAweGU3NDI5MWFlLCAweDcwMjU5NjQzLCAweDQxOGQ3ODc5LCAweGY1NzAwZWY0LAotCTB4YmI0NTI2NDcsIDB4ZDc4YzY3N2UsIDB4ZmZlZGVmMDMsIDB4ZjQxZTM5YzcsIDB4MDNlN2ZiZWYsIDB4ZWU1MGQ4MWYsCi0JMHgyZjE5YmRiOSwgMHhmMDI0Y2RlYywgMHhlYmZmZDEyZiwgMHg5Mzk0YjcyZiwgMHg2OGM1YmY3ZSwgMHhlYzJlZmQyMSwKLQkweDFjMmZhMjkwLCAweGExZGI1MWJmLCAweDI4ODc2OWYxLCAweDc5YjQ5OGZlLCAweDhiZDQwNWMzLCAweDc5MWQ3ZDM5LAotCTB4MDdiZTAxMWIsIDB4MWZmYmY5YzMsIDB4NzE3OTJkZGMsIDB4ZWU1ZDRlMWYsIDB4NDk5ZmQyNDEsIDB4ZGVmODFlYzAsCi0JMHg0N2ExNjRiYSwgMHhhY2ZiZDU1YiwgMHgyMWFmNTA5MiwgMHhhNWM4NGNjMywgMHgxNDk4YTZmNywgMHgxZTkwNzc2ZSwKLQkweGJhYzU3Yzk0LCAweDQ5N2U4MGFmLCAweDY5YTliZGUyLCAweGUyNTdjMjM2LCAweGQ3MDkxNmUyLCAweGFiM2NjZTlkLAotCTB4NDVjZjhlZDAsIDB4YjQwYzJjMjEsIDB4OTdjZmVkZDcsIDB4YmU3ZjVhNGEsIDB4ZTRmOWZjOWIsIDB4N2JjNTIzMGUsCi0JMHg5ZGY4ZGJhYywgMHhlNzNkNzNmMiwgMHhmY2Q0MzJmZiwgMHg1M2FhN2NiMCwgMHgyYmYyZTIwNywgMHhiOWE3OThkMSwKLQkweGFmZGY0ZjY3LCAweDliMjRkZmRkLCAweGMxYjc3MWQ0LCAweGM3YmI4ZWEyLCAweDlmZWI1MDBmLCAweGRlYjU3Njg5LAotCTB4YWZhMjNjOTksIDB4YzcxNGZlZWEsIDB4M2JmZGQ1MjAsIDB4ZmQ1NWYyY2IsIDB4NTRkYmNlZTksIDB4MmYyYWVmZTMsCi0JMHg5MmMzZjU1MSwgMHgwMGYyNjljNywgMHhlNDRhYmNlYSwgMHgyNTVlNzUwMCwgMHhhM2NlYWVjYSwgMHg3ZGZlMWQ4NCwKLQkweDMxNzgwNGI5LCAweDJlMWQzYzlhLCAweGM4MTM0M2MwLCAweGMwNmIwOGM2LCAweDM2OGEwYzhlLCAweDIyMzY3MTUxLAotCTB4NmQ4Y2RjM2YsIDB4MWYzMGQwZDMsIDB4MWY1MzQ5ZjIsIDB4MWQ4Nzg3MWUsIDB4MDdkOTM3YmUsIDB4NzY2Mjk4ZjMsCi0JMHhmMTA0YjA5OCwgMHgxYzViYzk1YiwgMHg5YTAwNzMwNywgMHhmMDNhOWVhOCwgMHgzOWJmYjU3ZSwgMHgxN2RiODUzMiwKLQkweGI4MjVmNWE1LCAweDM2ODQ0ZjVlLCAweDJhNWIxOWY3LCAweDE0ZmQ2N2Y3LCAweDE4MjI5ODlmLCAweDM0NWU4YmY3LAotCTB4YzRhNDVmOTEsIDB4ZTkzY2NhYzksIDB4NTAwNzQ1NjksIDB4ZWZkZWU0N2YsIDB4NmIwOWJhYTAsIDB4MjdjYzE2NjUsCi0JMHg3OTE0NjkzZSwgMHhiZWY5MTdkNCwgMHgwZWQ2ZGNkYiwgMHhiZTQ4MjM5ZCwgMHhmYWU0NGNlZiwgMHhlMmNlMTdlMCwKLQkweDVkN2YzOGIxLCAweDk0NTk1ODFiLCAweDFhZWZjZGE3LCAweGQ3NTkzZWIxLCAweGY2OGQxZWQ2LCAweDVkZjM4ODZjLAotCTB4MDJlYmU2MjMsIDB4ZDM5ZDg1ZDcsIDB4NWQ2MDQ3NzcsIDB4NzIyZDc3ZTUsIDB4NzJjYWZkYzgsIDB4MWZlYmNmMjIsCi0JMHhmMmJkN2ExNCwgMHg1NDdjNDBkZSwgMHhhZmEwMmMzNCwgMHhmNWYyNzcyYiwgMHg5MjM3NGU1NSwgMHg0NmMyYzEzZSwKLQkweDdhMGRiZDI4LCAweDJhZGU2N2JhLCAweGYyOGMxZWQ4LCAweDAzYmE4MDNlLCAweGRjNmFiN2Y0LCAweDJlM2M2OWVjLAotCTB4OGRiZDAwYWEsIDB4NWNmYTBjNzIsIDB4OTFhZDNmN2QsIDB4NzNlODBiZjQsIDB4MDEwYmY1ZDUsIDB4MTVmYjllN2QsCi0JMHgxOWMyNzczYywgMHhlOGY2NWY3YSwgMHgzZjM3NWUxNCwgMHhmYzIxMmFlMSwgMHg4OGYwMDJmZiwgMHg3YTJmZjI3ZSwKLQkweGYzZTM4ZGUwLCAweDE2N2FmODVhLCAweDM3NDQxZjY5LCAweDI5MjliOGVkLCAweGI2N2M3ZmRjLCAweDQzM2Q3ZDE3LAotCTB4Yzk0OWY1ZDAsIDB4ZDRjYTg3OWYsIDB4YmUyMDhjZWQsIDB4OGQ3MjY5OWQsIDB4N2E0N2NjZWYsIDB4ZjU4OGRlN2MsCi0JMHg0YmRmY2E4OSwgMHhkZmVjZWQwYywgMHg3ZWQzMGZkYSwgMHgwM2NlZTMzZCwgMHhkMjhmYjg4OSwgMHg5MTIwNzJkZCwKLQkweDE4ZDVkZjAxLCAweDhmZDBhYjZjLCAweGEzYjBiZTA3LCAweGVhZDc1M2RmLCAweDViNmJmODIzLCAweDdhZjFkYmYyLAotCTB4NDc2NGFiNmQsIDB4NzVkZWVjNTUsIDB4OTNhZDBjNjEsIDB4YmQ2MjM0NzUsIDB4ZTA1ZWM5ZWYsIDB4NzZlNDRjY2EsCi0JMHg4ZGEyNjA2NCwgMHg5ODVjMDdlNywgMHhjM2U3YzExMywgMHhmOTA5NWViYywgMHhjMjEyZjQwMCwgMHhjZDYyNWJiNSwKLQkweDlkNzI3ZmQwLCAweGI3OWQ2NDI5LCAweGZmN2JlMDUyLCAweDU3YzUyMzNhLCAweGFlM2NmMDM1LCAweDQxZmE2MGUzLAotCTB4NjhmOTA5YTMsIDB4YzI0YmFjMjcsIDB4MWU5YjFjNzUsIDB4MzcyZmYzODksIDB4MTQyZmY0MzAsIDB4ZmJhNWNlZjgsCi0JMHg0ZmZhZTE0ZiwgMHgwNzAwODdjZSwgMHgyZjk5YWZhZSwgMHgyZTRmYmUxMywgMHgwNWM4NzkxNywgMHg1OGNmZWEwNiwKLQkweGRkN2UyNDY0LCAweDQ2YmRmZjM3LCAweGFjOWRlZmNjLCAweDRiZGNmYmUxLCAweGY5NDY3YzE2LCAweDI0OGIxOWJlLAotCTB4OGE5OTNmNjUsIDB4ZDU3ZTE1OWYsIDB4N2Y5NmE3ZjIsIDB4ZjU2OWYwN2IsIDB4OThlOWYxZjUsIDB4M2E3Y2FiYzQsCi0JMHhkMDNjZWQwNCwgMHhmMjEyNzQ3ZCwgMHhjZTIxOGZjZiwgMHhiMmI5Zjk0NiwgMHhmMDA0OTBjZiwgMHhlYzVhMzc2NiwKLQkweGIwNmJhZmI4LCAweDExMjA3ZGVjLCAweDdlM2VjNGY1LCAweDU2Y2Q2ODdmLCAweGRiMWJlYjg5LCAweGE5ODcyOGRkLAotCTB4MWViNjQ2NGQsIDB4YWU0NGNiZmQsIDB4YmQyMDY2OTcsIDB4ZGQ2OTcxMGEsIDB4N2JjNTI0NTIsIDB4NGJkNDZjZmUsCi0JMHgwZWY3Y2E1OSwgMHgxM2JlNTYwNiwgMHhhZTdhNzFmMywgMHg5NGJmMDY2ZiwgMHgxMDdkNzViYywgMHgzOTEyOWFkZiwKLQkweDcwN2EyYWJmLCAweDc2Yjk5MTkwLCAweGE1YmZkZTUyLCAweGU3OTgxNGNmLCAweGRiYWYwMzU5LCAweGZhZjk4ODY0LAotCTB4MzMxZWVkZjUsIDB4MDg5ZmRhMDUsIDB4ZTAyNzk5N2UsIDB4MGFmN2ZhNTAsIDB4Y2Q0ZjY3ZmUsIDB4MzQ0ZWZjMjAsCi0JMHg1YjhmYmM3MSwgMHg3NWMwYWJlMSwgMHg4YjVkMTkzNCwgMHg4NGZlZTExMiwgMHhkMDZiYjc4YywgMHhiZjY1MzVjZSwKLQkweDQyZjk0YjlhLCAweGE3M2IyMzY2LCAweDQ2ZmJlN2M0LCAweDE5NjViMDdlLCAweGU2ZmMzN2FjLCAweGY4NjNhMjA4LAotCTB4ZTQxNjhkOWUsIDB4MDU3ZWYwZTMsIDB4N2MxMGFlNDksIDB4Y2JlZWI0YTcsIDB4MzkwMmU2MzYsIDB4NGQ5Y2JiYWEsCi0JMHhiMjlmZDJhZCwgMHhmNjkxYWNmNywgMHgxODVkYjcyMSwgMHgzOTcyNzI0MywgMHhjZjJiYWU5OSwgMHhmOTExNGEyZCwKLQkweDUzZGZiMTJhLCAweDllODI1ZmM5LCAweDBiYzg4ZmQ2LCAweGMwZjA1MzhjLCAweDIxNWUxNzcwLCAweGQxMTRmM2MyLAotCTB4MzY1MmQ5NmIsIDB4MzdkMWE3OTQsIDB4ZDY2N2ZhZDIsIDB4YzBlNjkzMWMsIDB4MWMxOTc3M2MsIDB4ZDYxNjczMDYsCi0JMHg3N2M3Y2FjZiwgMHg1MzdlZTBlNiwgMHg3MWZkNWNjNiwgMHhiOTg5OWQ5ZiwgMHhjZmRmYjg4YywgMHhjYWZmN2Q0MiwKLQkweGIxYmZlYTY0LCAweDYzZWQ0NmQyLCAweGQwY2ZlNzI2LCAweDVmZGY0Y2RlLCAweDRkZjY4ZmRmLCAweDJjZWEzZmE2LAotCTB4MWQ3NGY3ODYsIDB4YjZiZTA4MzEsIDB4M2E5NGJlMTAsIDB4OTkzNmE1ZDAsIDB4YTVmZWUwOTksIDB4MzVkNTEyNWQsCi0JMHg1ZDY3ZjgxNSwgMHg3MTVjYzNlZSwgMHhkZjE1ZmQ4YywgMHg1ZGE5ZWYwNywgMHgzYmU5MjZmMSwgMHgzMTg1ZjU3YiwKLQkweGFkMGQxNzE4LCAweDdkODhkZDM5LCAweGM2Y2Y4YWY3LCAweDBhNzEzZmEwLCAweGY1ZjkwN2VjLCAweDRiMjdkZmUwLAotCTB4MTk4ZTQ3YTgsIDB4YzU1ZDdmNzEsIDB4ZjNjZDJiNjUsIDB4MGM3YmFlYWMsIDB4MTVlNzk3Y2EsIDB4YTc0ZGVhODksCi0JMHg5MzE4MmY1YSwgMHgwODYyN2RiOCwgMHg5ZjU4MTZjYSwgMHgxODk1ZDcwMywgMHhiNzcxZjg0YiwgMHhmYTcxZDUwZCwKLQkweDRhYjhmMGU2LCAweGMwZmI0M2YwLCAweDFlOTFhMzJmLCAweGQ3YjYxNWE2LCAweDBmZTdjMzZmLCAweDc3ZTUwY2M5LAotCTB4YjQ3NzcxN2QsIDB4M2RmZTg0MjUsIDB4ZmViMmYzMDEsIDB4NmFkODFkN2MsIDB4M2QxYjk3ZWYsIDB4NWNmMGVjZmQsCi0JMHhmZWY0MmViOSwgMHg5ZjA1NTdhOCwgMHgzZTI5YTYwMiwgMHgxMTI5M2ZjMCwgMHg1NWZmOTllNSwgMHhhYzYyOTJjMiwKLQkweDIyZjhmNzE0LCAweGRiMmI4ZTQwLCAweGIxZWFjZTRhLCAweGJiZDg5N2FkLCAweGJkOGM3OGVhLCAweGY3YjdlNDFiLAotCTB4YjRkZjg3YzYsIDB4ZjRmOWMzYWQsIDB4ZTIwMWY2NDEsIDB4MDdlNDE2NDYsIDB4NTRjOGRjNjEsIDB4YmNmMGY3ZWYsCi0JMHg5MjRlN2E1MiwgMHhhZjNhYzQyYiwgMHgxZjQ3NDFjYSwgMHhkNTdhMDM2NiwgMHhmM2JhMDEzNSwgMHg1MjA3ZGY5MSwKLQkweDVhZjc3ZTdiLCAweDI5OGZjYTFiLCAweGI0NTFmYmEyLCAweDhlYmZhYzEzLCAweDhmNWE4Y2UyLCAweDkzZDlmZmRhLAotCTB4NGY3OGU1Y2MsIDB4NzdlYjk3MzIsIDB4MTJmMWQ1MTMsIDB4YTNlZjQ1YzQsIDB4MTQ1YzQzMWMsIDB4YTBkZjg1OGQsCi0JMHg5ZDdiNDk3OCwgMHhjYTEzMjVlMiwgMHgxMDc3YmMxNSwgMHgxMGY5ZTdkMCwgMHgyZTRlMWY3MCwgMHgzZGY5MDhmZSwKLQkweDlmMTMzNTgzLCAweGU0NzNlMDMzLCAweDNmM2FlZDJmLCAweDkxNTNmNjEzLCAweGQ3MjgxOWViLCAweDVjYWRiZmM4LAotCTB4MWVmM2I1YWUsIDB4MGNmYTJlNGYsIDB4ZmI4NzU5ZTEsIDB4OGRlODQyYjUsIDB4NmIzYWM1NTcsIDB4OTdjMjMzMzcsCi0JMHhmMDk1YjM3YiwgMHg3NjZkOGU3NCwgMHg5ZTVmMDMxNiwgMHhmZWIwMzgwMywgMHg0Njc0ZTVkZiwgMHhjNjdkNjJjNiwKLQkweDlhYjQ4Y2U1LCAweDZlYTA3YTAzLCAweGI3M2QwNDczLCAweGRjNmE2NzJlLCAweDI0NDdlODFjLCAweGRmM2ZiZTcxLAotCTB4M2M0MjYyNWEsIDB4ZTVjY2RhY2YsIDB4MjlkZjc5NGYsIDB4OTQzODhjZGYsIDB4Yjc0MzQyYTcsIDB4ZDNmNzBlZDEsCi0JMHhhMzQ3NGVkYSwgMHhmYmI4NTdkZiwgMHhjMzk0MzhjZSwgMHg0N2ZjZTBkZSwgMHhlZDc3NWYxMiwgMHhlM2M2N2I4YSwKLQkweDg3Zjg1ZGY3LCAweGZlYTU0Y2Y5LCAweDMzZWQ1ZWU2LCAweDA1NzhkZDUyLCAweDdmNmRmZTIzLCAweDI4NzU2ZmYxLAotCTB4MjJkYmU3YzcsIDB4Y2YzNzY4MmQsIDB4YTBmNDg5ZWQsIDB4MjU3YWVmZmUsIDB4Mjg5M2FiY2MsIDB4ODBjNGYwZWUsCi0JMHhlODY3M2I1ZSwgMHhlNWZlNDQ5OCwgMHhmZTgyZDk2ZSwgMHg4Zjk1ZmI5ZCwgMHg3NDc5NDUxZiwgMHg5ZTg2MThiZiwKLQkweGI2ZDI1YjFlLCAweGJkZGEwMmY2LCAweDY3YjFiNjlhLCAweDlmNjg0M2Y1LCAweDFlNTUzZmY5LCAweDQ3ZGM1NzZhLAotCTB4ZmZkMjkxN2UsIDB4ODljOWE1NzgsIDB4OWViY2Y0N2EsIDB4YWQyNTg5ZWIsIDB4YmJiZjkwMmYsIDB4MjFhNWNhZTQsCi0JMHhiNzNlZjc1OCwgMHhhMTg2YmZlNywgMHhmMWZmNzM1ZSwgMHg2N2Q0MzBkMiwgMHgxYTVjM2ZlZSwgMHgyZmRkZjc4NiwKLQkweGYyODdkNjQ1LCAweGM4YTU1NjU3LCAweDVlYzU3ZjQ0LCAweGFiZDcxZDY2LCAweDBiMWY0M2YyLCAweDY4NmFjOGZlLAotCTB4OWJmZGMzMmUsIDB4ZDlhNmM3ODUsIDB4ZGNhYjdmMzEsIDB4YTNhN2VjMmYsIDB4NmY4NWZhZmQsIDB4MDgyZGM2OTUsCi0JMHhhZmMxYWU3YSwgMHgwNWViYzMyZiwgMHhlNzIzNGFjNywgMHg0NzY1ZjEwNywgMHgyZmM5NDFiMiwgMHgwNzVlNTc1ZSwKLQkweDA1ODdlYWVmLCAweDNhZmM3MWU1LCAweDViOGMzODQ3LCAweDdkZjNkN2U3LCAweDE3OTJkNWI0LCAweDVmZjAwYmUzLAotCTB4ZGY5MWNmYjQsIDB4Y2UyOGI1ZDQsIDB4MDRmYzllYmIsIDB4MDVjMWY4ZTcsIDB4NWY2N2VmZDgsIDB4NjJiNTQzNmYsCi0JMHhlNDEzOTAzYSwgMHhlYmYwY2QyNywgMHg0N2MwNjE3YywgMHgzZTYxNmRlNSwgMHhmYWZkZWZmMiwgMHhmZTE3ZDRkMywKLQkweDFmMGJhY2QzLCAweDIxNDk2NTQ0LCAweGRlMDMzM2YyLCAweDVjN2E4ZDE4LCAweGJmODFhNzliLCAweGYxNWI4NDI4LAotCTB4NWRlYTJhYjcsIDB4MzZiZjA4ZTksIDB4ZmNiYjMzN2YsIDB4NjkwZmNhMGUsIDB4N2U1OTM3ZjMsIDB4MDE2MjZlYmQsCi0JMHg0ZDc5ZTdkNiwgMHg5MzdmOWQ3NCwgMHhmMTQ1ZTUwOSwgMHhiYjdlOTE0MywgMHg2N2ZmYzg0MiwgMHg4YTdlOWM0OSwKLQkweDc1ZjgzNTVjLCAweDdmMDY5NzQ0LCAweGRhMDcyOWIxLCAweDJlZmVlMmYzLCAweDFkZjhhNzMwLCAweDlkZGI0MzQ3LAotCTB4ZDA4ZjMwZGIsIDB4NDhhZWU1NzAsIDB4MWMzNTVkYWMsIDB4M2JmMGNhOWYsIDB4YjE0YjJlOGUsIDB4NzczZTFmYTksCi0JMHhmNGQzMGVlNSwgMHg2OGJmMDBkYywgMHg4OTI3YjdkZiwgMHg5ZjgwY2JlYiwgMHgzZGVlZGExMCwgMHg5ZmY5ZTQyNywKLQkweDI3YjZmZjY1LCAweGZmY2ZjZDVkLCAweDIwZmY2ZDVmLCAweDk0OTlkZjBlLCAweDRjZjg3MTQwLCAweDcxZTEyNzllLAotCTB4Mjg2ZWQ2YjgsIDB4Zjc5OTU4ZmEsIDB4OWVlNzQxNWQsIDB4ZjkyY2Y4ZmEsIDB4OTMyZjEwMzcsIDB4YzkzNzdlM2UsCi0JMHhkYWQyZTM0NiwgMHgxYzUxYzRhNiwgMHg5YzVhN2M3ZCwgMHhmZTczZGNjZCwgMHhjZWJiN2FiZSwgMHg3ZTczZGI5YSwKLQkweDdiNzM4ZmM1LCAweDE4NGMwNzFjLCAweDNlZjgzOGU3LCAweDg5MzRmNzMxLCAweDdlMmFkNWY2LCAweDkxMjlkYjlmLAotCTB4MzBhZWVlM2YsIDB4MDI5YzcxNzgsIDB4Y2YxYTdmOTcsIDB4MTg3NzRlYWIsIDB4YzA1MmUxYmMsIDB4YzdmYzU0M2YsCi0JMHgxMmVkZjdhYiwgMHg0OWZjNTdkZCwgMHgzYmY0NmZjNSwgMHg1YTc3MWU3OSwgMHg5OGZmYmYwMSwgMHgwOTMyNzVjOSwKLQkweDcwYmU0MWViLCAweDkyMzg1ZWJhLCAweDc5Y2M2NzVmLCAweDc3ZmExNTIwLCAweDI0NjI1MGZkLCAweDU0OWZjMmZmLAotCTB4NmZlYjU0ZjgsIDB4ZmJlYjZjNWUsIDB4YjdlNGZiYjUsIDB4ZTQ1NGZlMDgsIDB4MWYyMzQzMmMsIDB4MTA4YWZkOGEsCi0JMHhmYjQzYWE3OCwgMHhmYmY2ODcxZCwgMHhhZTVmOTUwYiwgMHhmN2VjMTc5ZCwgMHg4ZTdhMjRiOSwgMHg2ZjA1ZjNkMSwKLQkweGUyYTE5ZGU5LCAweGZlNjI5NWYzLCAweGEwZmQyMDdmLCAweDJmZWZmMzRkLCAweDk5ZDM3ODQyLCAweGY2YjlmNjlmLAotCTB4ODViYjU3NjYsIDB4ZmRkYmQzN2YsIDB4Y2YyODZmODgsIDB4Zjg5ZDg0MDMsIDB4NGU3M2M5NjcsIDB4NzkwY2ZmZjIsCi0JMHhmNjE3ZWFiZSwgMHhlMWRkOWRmMiwgMHhjOWMxYTJlNCwgMHhkZWI5N2Y0OCwgMHhmN2YyODQ1ZiwgMHhmYWM4NDM2NywKLQkweDdmODExNWY0LCAweDdjNTU3Mzg4LCAweGE4ZGQyMDdjLCAweDVkYzhiOGMzLCAweDRkMDNmM2NkLCAweDI5ZDdiNmIxLAotCTB4ZDMyYzM5N2UsIDB4MTAyNWViZmUsIDB4YjZmZmEyMDcsIDB4ZGE4NWIyZjgsIDB4YTE5M2Y0MWEsIDB4MzFjY2Y5OWQsCi0JMHg5OTk3ZWEwMywgMHg5YmY4NmFkNSwgMHhjZjhiNzczMCwgMHhhMmYyY2QyZiwgMHg0YWM5NWNkZiwgMHhkOTU0YWYyOSwKLQkweGZkYzE2YjE2LCAweDJkMDk0ZGNjLCAweDNjYWU1MTA3LCAweGI2ZGI2NGRiLCAweDA2ZWJmMWUwLCAweDllMjZmMThhLAotCTB4YTU4ZWFiNmYsIDB4ZTM0YzkzZmQsIDB4NmJkNjU0MDcsIDB4NWZiNTdkZmQsIDB4MTNjODliNzAsIDB4ZmMxZmU2ZjUsCi0JMHhlYjljM2RhMSwgMHhjOTMyNDM5NSwgMHg5N2U2MWQ3OSwgMHhkOGNjNjE2ZSwgMHg3YjgyZjVjNiwgMHg0ZGU1Mzg0NSwKLQkweGI4NDM1ZTMwLCAweDc5MjE1YzNlLCAweGFkNzcwMDRkLCAweGRlYTFmNzE4LCAweGFhMjdmOTRmLCAweGIzOTBjMWE3LAotCTB4NTExMzFiNmQsIDB4NWQ0Mzk5MmUsIDB4ZWE3ZGFhM2YsIDB4ZGE5YmQyMmQsIDB4OTc3NTkyM2EsIDB4YWQ1ZDBiYTgsCi0JMHhiMDkzMGQxYiwgMHg2NGYxMGI1ZiwgMHgzNjk3ZmExMiwgMHgzZmM0NjRkYiwgMHg0N2RhYTdjMCwgMHgxNzA1ZjhhNiwKLQkweGYxNDdiZDBmLCAweGJjZGRjY2U3LCAweDdlYTNkM2ZlLCAweGQ3OGUzNGQ0LCAweDBkM2VjNDhmLCAweDc2NzIxZTZkLAotCTB4YTkwM2MxZTYsIDB4OGRkNzZiYjYsIDB4MTk4ZjVhZWEsIDB4ZTFlOGFlMzAsIDB4OGVmYzY4N2YsIDB4ZjNhYjI2OWYsCi0JMHg5ZTdhOTk4YywgMHg5MzZjY2RjNywgMHhjYTlmOTgyYywgMHhiZTFjNzgxNCwgMHhlYWZjODIyZSwgMHgxZjlmN2YzMSwKLQkweGExNDBmYTg3LCAweDFjMjlmOWQzLCAweDdlNGZlN2FmLCAweDA0NWI0NDVhLCAweDg0YjdhZWZlLCAweDcwZmViYWMzLAotCTB4YTk5YmY5NzIsIDB4ZDkzMzZmYmMsIDB4OTFlNWI5ZjAsIDB4ZGZmNDNkZjQsIDB4YmM0NDg5ZWYsIDB4ZGM1YTAxZmUsCi0JMHgwOWQyZjk5NywgMHhhNDdjYzg3ZCwgMHgxZmU1YzI5NCwgMHg5M2NmZTFlYywgMHgyZmRlMWVkMSwgMHhiMDdhZDJmMiwKLQkweDdjODE1MTg3LCAweDliMzlmNjhlLCAweGMyMDlhZTc4LCAweGVlNjNjYTE0LCAweGE2ZmRmNWU2LCAweGVhMzhkNzE0LAotCTB4NmQ5YjMyZmYsIDB4NDFkMGZmMjMsIDB4ODAxN2U3NzksIDB4MzQ1ZjMxYWYsIDB4ZjU4YjE2MDgsIDB4NTgyMmU3ZTcsCi0JMHg5YThiZDYwMywgMHg5MmFmNWMxMiwgMHg2NzUyZmQxYywgMHhlNzgyMzk0MywgMHhkOWU0Y2VhOSwgMHg4OGZiMjM2OSwKLQkweGNlN2FjMzI4LCAweDI2NDliMDEwLCAweGY3YzBkN2RhLCAweDc0MTQwYzQ3LCAweDE2Mzg4MTRjLCAweGNkMDA0OWViLAotCTB4MGYzN2FjMzQsIDB4MjE5ZDc1MTIsIDB4ZjM4ZjRjMTEsIDB4YWQ3MDY4M2YsIDB4NDhlYjE5YmYsIDB4MmFmYjdhZWQsCi0JMHhkYzdiMDIxMiwgMHhmNTllYTg5NCwgMHhlYmMxYzkyNSwgMHg0OTlkNGFlMiwgMHg1NmY3OGZhOSwgMHgzZGYwOTI2NywKLQkweGFmMGUxZjdjLCAweDcyN2Q4OTJiLCAweGZkODkzZDRhLCAweGFlNDU0OWQwLCAweDE5ZWEyMzM1LCAweDY5NDlhZGM2LAotCTB4MGJlZGJiZWMsIDB4ZjllNzU5ZWIsIDB4ZGFiOWM2M2IsIDB4YzA0N2NmM2EsIDB4YTEzZjNjZTMsIDB4MWZhZTJiYWUsCi0JMHhlOWYxM2NmMCwgMHgwZTI3YWRiNywgMHhiODM3NjY0OCwgMHhhM2YxYzVmZSwgMHhmNjIwYmI4NSwgMHg1YmM1MjI2MiwKLQkweDY4Y2ZmOGZmLCAweDk3NmRiM2IyLCAweDc1NzYxZWM4LCAweGU1M2YzMTg3LCAweDllNzgzYjFkLCAweGVmN2Y4ZGJkLAotCTB4NWI3MTA1ZDMsIDB4YmQ5ZDkwNDIsIDB4N2I1YmY4NDMsIDB4ZmY4ODRhZGIsIDB4MjM0YmY5NzcsIDB4YjBiZDdjNzEsCi0JMHg0ZjhlZWJlMywgMHhkM2JmMTNiYiwgMHhiNGY1ZjhmMiwgMHgxZTMxODcyZiwgMHhlYmYyZWQ4NywgMHhiOTZmZDEwYiwKLQkweDIyZjk3NDgxLCAweGNkZmQ0NDI5LCAweDkzZWRjMTE0LCAweDRiOWU4ZTU2LCAweGU3YTRmOWU2LCAweDk0N2YzOTkyLAotCTB4OTdmMWU0OWMsIDB4YTNhZjM5N2IsIDB4NzA1ZTg0NTgsIDB4MGY0OTE5OTcsIDB4OTQ0ZjRjMWUsIDB4NTI3OWZjOTQsCi0JMHhlZWNiM2FhOCwgMHg5NTFiYjI2ZSwgMHgzZmRhMjQ4YiwgMHg5Njc1ZGQ3YiwgMHhiNzYxNzZkNiwgMHhiMmU5ZjkzNCwKLQkweDdiMzdhNDMxLCAweGQ1MDc1YmNiLCAweDMzZjc1NWNkLCAweGUxM2VjNDUyLCAweGRkN2YzY2MxLCAweGY1YTE2YzljLAotCTB4MTY4N2ViNWEsIDB4YWNhNjRiYTEsIDB4ZTFkMjA2ZmYsIDB4NWJmN2NhNjgsIDB4ZjNlYWVkNjcsIDB4MjdiZmNlZmQsCi0JMHhkYzljODQyMSwgMHhmYjNmZjljMCwgMHg0Mzk3ZTc5ZSwgMHgzODFiYTdlOSwgMHhlZmM0ZGY3ZiwgMHhmOTNmZmYxNywKLQkweGY3OWZlNzllLCAweDY0NjdlMzNkLCAweGZmZjQzZDI4LCAweDZkMDAzZWVhLCAweDJmYmI1ZjlkLCAweDBmZWY1YjQwLAotCTB4ODNjMGJjM2IsIDB4MWI0YWQ2ZjcsIDB4OWFkMDdkYmEsIDB4OTcyYzVmYTIsIDB4NjNlYjU1NDAsIDB4MWRhMTMyOWYsCi0JMHhkNzkyMzA5ZCwgMHg5YTk1ZDZjMSwgMHhjMGE1NWJiYywgMHg1ZjA1MDBmZSwgMHgxYzc5NTNhNywgMHhlMGJkYzk2MSwKLQkweDY3M2MwMzg5LCAweDcxYTVmYzM4LCAweGM5MWIyNzk4LCAweDBhZWUwZTI4LCAweGE2MzBmNWU3LCAweGExNGNhNGI3LAotCTB4OTQ5NmY2ZmQsIDB4OWIzN2EwYTksIDB4ZTk1ZWY5N2EsIDB4NmY1ZjMxNDEsIDB4YWQzZDI0NzYsIDB4MjE0YTcwZTgsCi0JMHg5NDNjOGVmZiwgMHhlYTI1OTZiZiwgMHhiZTU2OTY1MiwgMHg2ZGU5OTZkZiwgMHhiZGU5NTMyOSwgMHg4N2Y0MTRiNiwKLQkweGViZjNmNjYyLCAweGQ4ZTYzZWQxLCAweGIyZDk3MDRhLCAweDY4M2M1MmE2LCAweDFlZjg0MmNiLCAweGViNWVmNTExLAotCTB4OTg1OWZlYjgsIDB4NWY4MmI2OGYsIDB4OGRjMGY1ODgsIDB4NzhhNDE3NTgsIDB4OTRlMzQyZDYsIDB4YzNlY2NkZjcsCi0JMHhjMGM0N2RlMSwgMHg3YWRmYWMyNCwgMHg5OWZiZTY2ZSwgMHg1NTQyZjM1OCwgMHhjMTg4ZWYzZCwgMHhhMjQ3MzlkNywKLQkweGVhMjc1ZTdhLCAweDVmM2FhM2ViLCAweDgyNTk5M2VlLCAweGI5YmYwMTg5LCAweDY3NTQyY2JiLCAweGZmZTQ2ZDdjLAotCTB4NWJiZmMwMWUsIDB4NjViZGY1ZTIsIDB4MWY2NDNlMTYsIDB4YzcwMGNkYzYsIDB4YzRmOTNkYjIsIDB4OGVmNzMzYmYsCi0JMHhjNjA1NGJmYywgMHgxY2ZjMzkxZCwgMHhhNTcxMWU5MCwgMHgxMDljMTdjOCwgMHg1ZjI1MGVmOSwgMHhkZWI1ZDRhMCwKLQkweDUzOTI3OTExLCAweGI2ODE3Zjk4LCAweGQwMjFmMzAzLCAweDM3NzQ3ZDRhLCAweGExNDkzZWRhLCAweDEyMjNjN2VjLAotCTB4OGU3OTBmY2YsIDB4YmU1MGZjZjIsIDB4NzgzN2RlZDEsIDB4YzBiNDY0ZGYsIDB4YWYxZjFjZWIsIDB4OWVmOTI4NWIsCi0JMHhmOTNkNjJlZCwgMHg2MTdkOTYzZiwgMHgzN2U2OTdlMCwgMHg5ZGEyMzYwZSwgMHg4ZjRjNmZjZiwgMHhjMzg4NzZjMCwKLQkweGVmMTJjM2FiLCAweDc1M2JmOThjLCAweGYxNDJmZDBhLCAweGVlMWY3MjUxLCAweGQ0M2JhYzhmLCAweDE3YmQ3NTRkLAotCTB4OTlmZTc1MzQsIDB4ZmY3NDhjN2QsIDB4OTljN2UwYjgsIDB4OTdmNTE4N2QsIDB4NDFhZmQzZjUsIDB4OTQ2NjMxZjcsCi0JMHg0ZjU1MGU0NSwgMHgxOGI4ODRhYSwgMHhjNGQzOWNlMSwgMHg1ZGYwNTZlMSwgMHhlMDk1YjNlOSwgMHhlODFmNGU3YiwKLQkweGFmMzZjNDZlLCAweGYyODRhYjNhLCAweDFhMTczNWVkLCAweDVmNzM3ZmQxLCAweDc2ZjA3NGI5LCAweDZkMTk5N2NhLAotCTB4ZWFjYzRmMTgsIDB4MmVkZGU3NTAsIDB4OTZmZGYyYTUsIDB4N2JmYzQ4MmYsIDB4M2Q1OGNmNGMsIDB4NjNmOWM3YzUsCi0JMHhkNjNmYzRmNSwgMHg1ZjhhNzBjYSwgMHg5YjI2MDZhZCwgMHhmYjg1M2ZiMSwgMHhmMTY1Nzk0NSwgMHhkMzY3ZDgyNSwKLQkweGNjMWZjOTYyLCAweDVkOGI2NDNiLCAweDgzYzgxYjkwLCAweDRmMmVjNzU5LCAweGFiNWQzYzQwLCAweGQzZTRhYWJlLAotCTB4NDYzOTMzMWUsIDB4NmRiZjNkMjIsIDB4YzhmNmI1N2QsIDB4YWE1N2RhNzEsIDB4OGJjMTRiYWMsIDB4YWRlZDI3NTIsCi0JMHg3M2VjYWFiZSwgMHhhYTdkOTc3MCwgMHhkNmUxOTdkYSwgMHhmY2MxOGY3NywgMHhkMzllZmU2MywgMHhkMmNmYjE0NiwKLQkweGE4MTU5YzkyLCAweGJlZWZlNmJmLCAweGE1NTc3NTQwLCAweGJmYWVlYWNlLCAweDNjMzU3ZTQwLCAweGU0OTBlNzQ3LAotCTB4NDA1M2Y5MDMsIDB4Yzk1YWVlNGYsIDB4MDIyZmFmZWIsIDB4YzJiNmQ4M2MsIDB4ZDcwMDFkZmEsIDB4NmM3ZWIwY2IsCi0JMHg3OGZkNjBkYiwgMHgwMzk1OTVmZCwgMHhiNGFkZjVhOCwgMHhlNTc3YmI1MywgMHg2ZGRkNmEwOCwgMHhlYjVlYTgxNywKLQkweDdmNjNkM2VhLCAweDFlZjNkNTI0LCAweGZhZjM5ZDk3LCAweDUyNDdmN2E4LCAweDkzZWY1YjVmLCAweGM2YmU3ODIzLAotCTB4ZGY0MGM4N2QsIDB4OTg4ZmI4MmIsIDB4YjUxNzdmNDgsIDB4ZjhjNGM5Y2QsIDB4YWU2M2YzZTAsIDB4MGViYjg0NGMsCi0JMHg3YzQxNmRlYiwgMHgwZjYxZGU3MSwgMHhjZTMxNzNjNywgMHg1OGUxZWQzYiwgMHgzZjZmY2I2NywgMHgyZmZkYzQ2YiwKLQkweDExYmY3YTc1LCAweDcxMDA2MWYzLCAweDc0NGQ2ZTJhLCAweGY3YzBiYWVmLCAweDg1MTViNmY3LCAweDU5YWY3ZTIzLAotCTB4ZmZmZDZiMTcsIDB4NTM2ZmIxNzUsIDB4MjAyYWZiMTcsIDB4ZjI0N2E0OWYsIDB4NTZjNzNhOWMsIDB4YzIzOTBmNmMsCi0JMHg4OWU5MDQxNywgMHg0ZjVlNGU3NSwgMHg0ZDkzOTc1OSwgMHg5OWM5Yjg3MiwgMHg2ODNmM2IxZCwgMHg5ZTMyODZiZSwKLQkweGNkOGViMGJmLCAweDNlYmUwZjA5LCAweGYzNDBjZDM1LCAweGEwOWNmMTViLCAweDE1NmZlZjEwLCAweGVhMDZlY2ZhLAotCTB4MjEzZWQ2ZWQsIDB4NDdmM2I2ZmMsIDB4NDhkZGY0NGQsIDB4OTk4NWVlZmIsIDB4ZWE1ZmM0MWQsIDB4YjJiYWRjN2MsCi0JMHhmZGY4OTlmOSwgMHgxODQ0ZTdiZCwgMHg3NWYzYzdlYiwgMHhkMzFjN2NhYSwgMHhjYjdhZTNkNCwgMHhkMzJjY2RjYiwKLQkweGNlMjljMjM5LCAweGJiNDBjZWVhLCAweDMxOWJjZGFkLCAweGI3MDY3NzdkLCAweDdlNTQ4ZWViLCAweDk1Mjc4MzVlLAotCTB4ZWEzZDYwOGQsIDB4ZGU2NTdmNzIsIDB4ZmM2MDcyYjcsIDB4ZDkxZDMyOGMsIDB4OTczZWE1MGIsIDB4MmI2N2E2NTcsCi0JMHg1NmYzM2Y4MSwgMHg5NzU0YmMxOCwgMHhhNjlmZDMyYiwgMHg2YzZlMjJmYiwgMHgyMmE1ZTRiMCwgMHg2MjNhOWY5ZiwKLQkweDU3ZGE4NGI0LCAweGFhN2IyZjZkLCAweGI3OWUxYjI5LCAweDVjNzY0OGQ3LCAweDc3ZWFiNWQ2LCAweGEzZWRhZDk1LAotCTB4MTZmZDY5NTMsIDB4ZjEyNGU1MTksIDB4NTNlZmEzMjAsIDB4ZjhmM2Q2N2IsIDB4ZDYzY2VmN2UsIDB4ZTMwYTU0ZGMsCi0JMHg4MmNlOGU1OCwgMHg2NzliNTFmNiwgMHhiZjQzM2U0MywgMHhlZjg3OWI0NCwgMHg0YmJiZjYxMiwgMHg0OGMxY2ZkOCwKLQkweDhmOWMwNGRiLCAweDczY2E0YmZiLCAweDRkMjlmZTVhLCAweGFmMzZiZTk1LCAweGZkY2E5MDVmLCAweGJjYjI4NmFhLAotCTB4ZGY0ODM5NzUsIDB4ZjY4NjNhMDksIDB4ZDhhY2ExYTQsIDB4OWYzNDEzOTQsIDB4ZTM0ZjU1MmUsIDB4NjBmYWMxMWUsCi0JMHg5MDdkNzA3YywgMHg3NWI1MDFkNywgMHhlNWNmNDU0MSwgMHgwNjMxN2ZiNywgMHhmNDA5YmRmMSwgMHg3NzMxZGEzNSwKLQkweGU0MWZhZjMyLCAweDA4NzQ1MmJmLCAweDRlMDA0NmY1LCAweGM5NGRiZWJlLCAweDhlYjdiZjU3LCAweDBjNWQ3YzY1LAotCTB4ZjY3OWNiZjcsIDB4Y2I5Zjk0NDgsIDB4ZGVlOWYwOWIsIDB4MTM5ZmM0NDgsIDB4YjVlYTFlZWMsIDB4Y2M2YjM5MjMsCi0JMHhlODI2OGZhOCwgMHgxZGZiZjEwYiwgMHg1YWJhNTNiNywgMHhkMjdhYzI2NywgMHg4ZjU3YWY5ZCwgMHhmMjA5ZWZjMywKLQkweDg2M2QwZmE3LCAweDYxNWU5Zjc4LCAweDc3ODBmZGEwLCAweDA2M2U1ZWJlLCAweDJmZjYyYmFmLCAweGQ1ZDZmYTdmLAotCTB4ODA3Zjc4MTEsIDB4ZTFiNzBmNjQsIDB4YmM2MmIyZmQsIDB4MGY4NzdlM2YsIDB4MjI2Y2U5MzMsIDB4ZGNmYTA3NDIsCi0JMHg4ZjUzYTQ3ZiwgMHhjOTk4ZjM3MiwgMHhmMDBhOWQ5NSwgMHg3NTExNGZlNiwgMHhhNzZlMGFhNiwgMHgzMTRkYjdhNywKLQkweGFhNGZlZTMwLCAweGY0YmVlNmVjLCAweDc0MWYyOWNmLCAweGVhOWYyZGE5LCAweGVmYjg3MTQ3LCAweGFmNjAzNzIxLAotCTB4MWQ4MGY3ZjIsIDB4YjFkODBhOGIsIDB4NGFiZjZhZWYsIDB4Y2Y4NDJkNTMsIDB4MjE4ZWMwNWIsIDB4YmMyOWQ2M2MsCi0JMHhiZmE1YWYzZSwgMHgzN2JmZDA0ZSwgMHgxZTliZDRiYiwgMHhlNzgzZmI0NiwgMHg0YTdjYTBhOCwgMHhiOGVkM2RjOSwKLQkweGMzM2VmMzBkLCAweGYwOTc1ZmQxLCAweGY5NWU5NTkwLCAweDZmZDBhOTZmLCAweDczZjhiZGIxLCAweDdhZjgwYWY3LAotCTB4ZmFkNTM3ZGQsIDB4MmQzM2E5Y2YsIDB4NTIxZmZkNGQsIDB4OTdmMTEyNjcsIDB4ZTI1MjZmNTIsIDB4OWUwNGQ3YjUsCi0JMHhhMTc1ZjY5NSwgMHg3N2YzYmUzNywgMHg0MzVjNjgwYywgMHgwZDYwYzc3ZSwgMHhhY2MzMWRmZCwgMHg0NDg3M2ExNiwKLQkweDgwZTE4ZWY5LCAweDhjZWQxNTkxLCAweGUyYjNmZGM3LCAweDkzYWYyNmJiLCAweDhmMDNhNGZjLCAweDM3ZjFiNWZkLAotCTB4OTM1ZGY4ZjEsIDB4ODA2NzI3ODQsIDB4NzY0NjNjM2QsIDB4YWU4ZjM5NWUsIDB4OWU2M2VkYWUsIDB4ZmJlMTZkNmYsCi0JMHg0MzViNmJjMCwgMHg5OTEyZWI5ZiwgMHgyOTdiZWRjNiwgMHgzM2VhODdhYywgMHg5OGVkN2Y2MiwgMHhlNDRlYTI1ZCwKLQkweDU5NmQ3YTMwLCAweDRmYmNiNzk4LCAweDc0Yjc5YzFmLCAweGNhMDlmY2RiLCAweGM1MmY1ZGJlLCAweDY2M2NlYTdiLAotCTB4M2FjYjc5NmYsIDB4NmFmYzNiZTUsIDB4ZDFkZjhlYzksIDB4ZDMxZTc3NWMsIDB4N2VlMWY3YzEsIDB4NGJlNjNjZGIsCi0JMHhjZTNhZWFhOSwgMHhhZDBiMTQ4MSwgMHhkMTI1ZGNiZiwgMHg5ZDI2NGNiOSwgMHhlN2Y2ODZiMywgMHg0MjU5MjJiZiwKLQkweDlhM2VlYmVkLCAweGJjNzVlNWNhLCAweDZkM2M4M2E4LCAweGY0ZjFmY2U0LCAweDhiZWQxMmFkLCAweDkwZWRlZmM3LAotCTB4YzJiZjRmZWUsIDB4M2E3OWI3YmYsIDB4YTM2ZjdmOGYsIDB4ZWY5NDNkZDQsIDB4ZDQwZTZlNjgsIDB4M2IzYmU4M2QsCi0JMHhlNTFiZmJlNSwgMHhmYmU1MWE3YiwgMHgyMzliMjljZCwgMHgwN2UyM2NlOCwgMHhkY2M5MmQwZCwgMHg1ZjEwZjVlZiwKLQkweGY2MWUyYmZlLCAweDMwZDBmNTgwLCAweDVlNGExZjU2LCAweGZkMTZhNzc3LCAweGJiOGQyYTZiLCAweDQ3NmY3MWUxLAotCTB4MjlmZjA4NmEsIDB4Nzg0OGUzMDksIDB4NWVkNDk5Y2YsIDB4YTliMzg1ZTMsIDB4ZmE4MTc4ZWEsIDB4NDZlMTc4ZGEsCi0JMHg0YmVlM2RkNSwgMHhkZDdhMzc2NSwgMHg4ZGY5NDIwMywgMHgyZGZlNzAzNywgMHg5YmZjZjNkZiwgMHg0ZDZkZDE0MywKLQkweDE1ZjNlODc4LCAweDFkNDRkMzJiLCAweDM4MGU3MzVkLCAweDI0NWRmMWViLCAweDkyNGRlYmI3LCAweDUxYjcyZmVkLAotCTB4ZjU0MGRkM2QsIDB4MzZhZjQ1NzQsIDB4NzNmOWYxNDUsIDB4N2I0YTdjYzUsIDB4YjNkNzFhNDcsIDB4ZjlkMDg2NGQsCi0JMHhkYzYyYTliMiwgMHgyODMxZDk0NiwgMHhjZjQxZGEwZCwgMHg4Mzk3ZjNhOCwgMHhjYmY5ZDQ1YiwgMHhlN2Q1NWE1YiwKLQkweGE5ZjUwYzg1LCAweDNmYzkwM2NmLCAweGE2MWYzZWE0LCAweDFmM2VhZmQwLCAweGY1MDlmODY2LCAweDNiMjMzMGY5LAotCTB4ZGNjM2U3ZDQsIDB4N2NmYWExZjYsIDB4YWI3NDFmOTgsIDB4NWZiNzk3ZjMsIDB4NWVmOWFhOWUsIDB4NzdjZmNiZDMsCi0JMHg3ZTBkY2UwMiwgMHg0ZjM0YzRhZSwgMHg0ZThkMmU3MywgMHg4NDRkMmU3MywgMHhjZDFhNWNlNiwgMHhkZTYyMjgzOSwKLQkweGNkMWY0ZjJjLCAweGY1ZWEzNGY5LCAweDk3MWViMTU5LCAweGI4ZjVmZDdiLCAweDQ0ZDhmYTY3LCAweDM4NmZhZTNkLAotCTB4NTk0OGY3M2UsIDB4NmRmYTM4NGUsIDB4ZmZkMzc3Y2EsIDB4OTdjY2Y4MjEsIDB4ZjQ4YjlhZTYsIDB4NWIxZWFkNzEsCi0JMHhiMWQ1N2M4NywgMHhmMzAzMmMyYSwgMHgyOWQ1YWUyZSwgMHg4M2YwM2M3MiwgMHhiZTg5MjFlYiwgMHg5ZDVlMmY5YiwKLQkweGU2N2JmYjQyLCAweDNmMjUwYzM1LCAweGM4Mzk4ZjI5LCAweDYzOGNhYTRmLCAweDU4NzNjZjIxLCAweGQ2ZjVjNjlmLAotCTB4MzMwMzdhZGMsIDB4NmNjYmUwYzYsIDB4ZDBhODFkNDYsIDB4NWIxMjRkNzMsIDB4Nzk4ZGVkY2YsIDB4MzU2MWYwMjIsCi0JMHhiYjU4N2NlMywgMHhkNTM0NThlZSwgMHg1OWRkODViZCwgMHhhYWMxNTFjNCwgMHhiOWQyMTdlYiwgMHg1ZDczZGEwZCwKLQkweDMxOGI1ODZhLCAweGJjNTllNjA1LCAweDQxZTQ5ZGExLCAweDYyOGJjZTdiLCAweDllNjJkYzg3LCAweDdkZjUxNmRhLAotCTB4ODE3MGRiMzcsIDB4MWQ2Nzg5Y2UsIDB4ZWUzM2I0NDYsIDB4ODZmZGY1NTYsIDB4YjMyZjUxMzQsIDB4OGRjYTNiMzMsCi0JMHgxMzI4YmVlYiwgMHgwMmM1OTdmYSwgMHg0ODM2NzMyZiwgMHhjZTBmYWMxNiwgMHhiODRmNjg2YiwgMHgwZWYzZmEwYiwKLQkweDI5NmYxNGM5LCAweGNlM2Q2MTc4LCAweDczYTVjOWUxLCAweGVhMWUyZmQyLCAweDQ1ZjNmZTQ3LCAweGM3MDkyZDliLAotCTB4YmM3OWEyYjksIDB4YzM1ZGU5MjAsIDB4OWM2NTdhZjEsIDB4NWY5ZTM4NmIsIDB4MGEzMjdkZDYsIDB4YTc2MWYxYmYsCi0JMHg1ZmM4ZWIyZiwgMHgwODY4MWYwMCwgMHgzNjE2NmRmOSwgMHgzYmNmMzgyNCwgMHhjNDQ5NjBjNywgMHhkZDg3OGIzYywKLQkweGE2NzE0YzkzLCAweDc1OTU3Yjg4LCAweGM3MTA0ZGJiLCAweGUyMWY2MzQ2LCAweGU5M2ViZTU0LCAweDQ2ZTg4OTJiLAotCTB4ZmMxYmFkMjYsIDB4ZjgwZjdjMjIsIDB4OWFjNzE0M2YsIDB4ZmExNTY5OTgsIDB4Y2Q2ZDY3M2YsIDB4M2FmYWU4ODksCi0JMHg1ZjkwMzAxZiwgMHgyYzQ3NzczMSwgMHgxYjczMTVmOSwgMHhmZTc4OGM0YSwgMHhiMTVkZGNjMSwgMHg3OTk2N2ZiNCwKLQkweGFlMzFjNzFjLCAweGJhNzhlODU1LCAweDMyNjBmZjIxLCAweDI1YjczYmNjLCAweGU5YWIyZWNiLCAweDE3MTM4YWE3LAotCTB4ZTg1NjlkMzcsIDB4YmEwZDc5ZDYsIDB4MWJhMjg2NzUsIDB4ZmQ3NTRiZDAsIDB4MTdlMTM0ZTUsIDB4ZmJiMTdhMDgsCi0JMHhiZGZiZThlMywgMHhmYTA3YTU4YSwgMHg2MmVmYmU2MSwgMHgwZWZkMzg3ZCwgMHhjMDM4Y2Y0NSwgMHg1YTY0ZjVjMywKLQkweDI5ZGUyYWJjLCAweDhlMzU3M2ViLCAweDJmYmE3M2EzLCAweGJhMjQyODZkLCAweGY2NTVlOTY5LCAweGUzODZmM2RmLAotCTB4YWZlYzU1ZjcsIDB4OGRmZDBjNTEsIDB4ZjY2Y2JlY2EsIDB4NWIzZWI4NTQsIDB4Yjk1NWYyZTIsIDB4ZmExOTZjNjYsCi0JMHg3ZDBhNmYzOSwgMHg4Yjg4YmFmOCwgMHgwNDVjNjE4ZSwgMHgxODliZmM3ZSwgMHgyZGZmNDExNywgMHgwNWZkMTcxMSwKLQkweDRmNjgyMmUzLCAweDZkMDQ1YzYyLCAweDRmZmYzOGE3LCAweDAwNjAzMzkxLCAweDQyOTNkN2UyLCAweGQ1NWU0ZWJlLAotCTB4MzE5M2NiZjMsIDB4ZGZmNjU2OWYsIDB4ODBlYTE2NmYsIDB4YjUzYzEyZTcsIDB4MzNhNzQ2OTMsIDB4ZjZhMWQ5MzYsCi0JMHhhOWE3Y2JhNywgMHg4MzBlZTlmZCwgMHhlZDMyNGM2NSwgMHg4MWY1ZTI2YiwgMHg1NGRiY2ViOSwgMHg2NmRlOTllMywKLQkweDFiMDczY2M0LCAweDRlYjgxZjkwLCAweGM0NjZjN2Y2LCAweDA5OGNjNzNjLCAweDNmZjFhYTcxLCAweGY1NTU0YTZjLAotCTB4MGM1ZmEwMmYsIDB4ZWIyOTRkZjAsIDB4Nzc3ZWJhYWIsIDB4N2Y1NTIwYzUsIDB4NDI0MDY1Y2UsIDB4OTVhZjcyM2UsCi0JMHhlMjJjZTc5ZiwgMHgyNzk0Y2EyNCwgMHg5ZjBkZWEwNiwgMHhmYTRmMGZkNiwgMHhlOWZiYzAxMSwgMHhkN2RkMDMxMSwKLQkweGViYTE0M2QyLCAweGNhM2FjZGZjLCAweDBjZGJjZWRmLCAweDNiNzk4MzZiLCAweDVjOTFlNzliLCAweDhhMjI3YzdkLAotCTB4ZGM2OTg3Y2UsIDB4MDhkYWZmOTEsIDB4NjFkZTlmZTgsIDB4YTc2NGZkYTAsIDB4YzIxZWUyMWIsIDB4ZWY0ZmFhZjMsCi0JMHhlZmM2ODg0OCwgMHgzMjhkNWNmMiwgMHhiNTllOTFmMywgMHhlNjU1OWU5MCwgMHg0NTU4NjkyZCwgMHhjNzMwN2ZiZiwKLQkweGY5NDc2NjFiLCAweGYzZGZiMzlmLCAweGZkYzdkMmI4LCAweDA2NDViNDAxLCAweGVjYjhlM2U1LCAweDNmNDQ0OWY1LAotCTB4N2I3N2UxMDcsIDB4M2ZjNWU1MzgsIDB4MDU4ZjMwMzQsIDB4MWQ3OWNiZmMsIDB4MjUwZmFlMWMsIDB4YjNmZDgwZDYsCi0JMHhmZmY0ZWZlMSwgMHg2ZTcxYzAxMSwgMHgwZTk1NzM2MiwgMHg0OGY5MjhmZCwgMHhlN2NiZTkwMiwgMHg1YjdjODY2NSwKLQkweGU3NDBkNGIxLCAweDRiN2EyZjA5LCAweDI2N2Q4YWRlLCAweDdhNzJhNWU1LCAweDFkM2JmNGNiLCAweGNkMTg3YjZjLAotCTB4NDM4MWJhY2YsIDB4ZGZmMmRjNjAsIDB4NWViOTNkODQsIDB4ZmZhOGI5ZTQsIDB4ZjVkZWMxZmIsIDB4OGY5MTNmODIsCi0JMHg4ZTY1OGMzZSwgMHhlNzk2MDI1OCwgMHg5NjNhM2UxYiwgMHgwMDllNzU0MCwgMHg3MDQzYmQzZSwgMHgzYmQ0YmZkZCwKLQkweGJkODNhNWZiLCAweDNiY2FhOGZhLCAweGZkZGFmNDg0LCAweDVhNTcyNDA5LCAweGI5MWE3N2JjLCAweDFjYTBmMmRlLAotCTB4MTk3ZDAxNDgsIDB4OWRmZTMzOTAsIDB4M2Q4MzNjZDUsIDB4YWFmYTRlZDEsIDB4NTVmNTA1MjAsIDB4ZTUwMzA2ZTcsCi0JMHgxMWRlOTkxNSwgMHhjZjcwZWJjZCwgMHhlZjJiMWYxMywgMHhjNmRiZDRlOSwgMHg0ZDlkN2MyMCwgMHhlMTFkZjQ1OSwKLQkweGQ5MzIwZGRjLCAweDNlM2ZlNDNiLCAweGViZTNjYmRlLCAweGUzMGJiMjhkLCAweGU0OTM0Zjc1LCAweGNiNWQ3OGMyLAotCTB4MGU5NmNiMzcsIDB4OTgxNWRmYTcsIDB4ZDkxOTM4ODUsIDB4NGY5YzBmNTMsIDB4YTUwNzc1ZTEsIDB4M2YwZjc4YmYsCi0JMHg3NDE1OWZkNywgMHgwZTBkYTdlOCwgMHg3ZjAzNDc1ZSwgMHg1ZjlmMzI1ZiwgMHgyNmJjNzczOSwgMHhmMGE3NGZmYiwKLQkweDg3OGJhNjY4LCAweGY3ZTBjNmZhLCAweGNiOGY2NzM4LCAweGIzNjc2N2M0LCAweDAzMjU4NzliLCAweGVkZDEzZjNkLAotCTB4ZTgyM2Y2MWQsIDB4NzNkMTNjN2YsIDB4NzBmZDhmNDYsIDB4ZWJjNDU0ZDcsIDB4MGM4NmRkMTIsIDB4YWJiYTFlZmMsCi0JMHg2ZTg3YmRlZCwgMHg3YTNlZTc4MywgMHgzMTI3NjBkNiwgMHhmYTQwOTE1ZiwgMHg0NWY2ZjE2MywgMHg3ZGY3NWY5OSwKLQkweDNlZjA1ODEwLCAweDQ4ZThjZjNjLCAweDRiOWYwMDkxLCAweDMwNjMyZDZjLCAweDM5ODBiMDdmLCAweGY4ZTIxZDg1LAotCTB4NzllMGVkYjEsIDB4OWUyNmNiMGMsIDB4MzBhZjc4ZDcsIDB4NjdlZTNkNmEsIDB4NWJjOWE3OWIsIDB4MTNiZTI3YmMsCi0JMHhhOTJlOTA1YywgMHhhMmVkODRmYywgMHhmOWM3NGYzZiwgMHhmM2M3M2Q5YiwgMHhkMmE3ZjA1OSwgMHhmYmYxNmVmZiwKLQkweDU3ZGU4YTFlLCAweDZiMGQ3NWY0LCAweDdmYTlmM2E2LCAweGYwNGQ5ZTk0LCAweDM0YmM5MjJjLCAweDlhNGYwZWFlLAotCTB4NjU1NTE1MDYsIDB4Y2Q2YWYxZTEsIDB4OGE1ZTYxMzMsIDB4ZTk2MDZkNDcsIDB4ZGQ4MGZjODIsIDB4NmU3YTM2ZTksCi0JMHg0N2Q5ZjFiMSwgMHgzMjE3NmQ5MSwgMHg2NjlmNWYzZiwgMHg2ZjA2NDdkYywgMHhhN2FiM2Y5NSwgMHg2Y2IyYTliZCwKLQkweGZjZDJiMDZkLCAweDU3ZWUzYjA2LCAweGI0ZTQyODVjLCAweGZhZjI1OWI2LCAweDZlYzgzYWY4LCAweDJjZjMxMDJlLAotCTB4NmI1Mzc2MTAsIDB4MjNkODdhOWYsIDB4YTA1YTFkOGQsIDB4NTlhY2IzYjEsIDB4NWUwMTU3NmQsIDB4ODE1Yjk3M2EsCi0JMHgzM2E3MGI1NywgMHhiMGYwOGEzMiwgMHhjZjlmOTliOCwgMHgxZWYyZTU1MSwgMHg0YjcwNDQ5YywgMHgwZjY0YTA3NiwKLQkweDY3MzIxNjc4LCAweGUzYWUyYzY5LCAweDZiOGYxZTE5LCAweGFiYWVkM2UxLCAweDlkNjJiYzA3LCAweGVjYWJiODVhLAotCTB4MDE3MjdjMTcsIDB4ZGEwYTNkZmYsIDB4ODc1OWE5ZGYsIDB4YmZhZDBmNDIsIDB4Y2FhNWQwYTYsIDB4ZDU1YmYxYzMsCi0JMHhkZjNkMTEyNiwgMHgzMjA3ZWFiZiwgMHhmMGFhMDdkYSwgMHhmZjgxNmIwYiwgMHg0ZTc3OWVhOSwgMHg3MGI2N2Q0MiwKLQkweGFjZGZlODEzLCAweGZjMjhmZjAwLCAweDQ0YjU5OGI0LCAweDMxZDRiZjIzLCAweGQ0OTYyMzVmLCAweDdlNWFmYWNmLAotCTB4Y2YwYjMyMzgsIDB4ZTc0NjNhNjUsIDB4N2Q1ODU1NDcsIDB4ODBiMTc0ZmQsIDB4MWZkZmNmNDIsIDB4ODA0MWZiMmEsCi0JMHhiZTc4YjVhZiwgMHgxN2FmNWQxNiwgMHgxMWQ0NGM2ZiwgMHhkM2MwMzllOCwgMHhmYTY0YTc4MiwgMHg5YzY4MjdhZSwKLQkweDI0M2Q3Zjg4LCAweDhmMWVkNTRmLCAweGQ1Y2JlYjExLCAweGRjM2U3ZTdhLCAweGViNzRlMGI1LCAweDVkMjllZmY5LAotCTB4ZmM1ZWRlMTMsIDB4ZjcwYWVmYTQsIDB4ZjliZGU5MDcsIDB4NDI2MmZkNTksIDB4OWQ2NTI5ZTksIDB4NzJiZDA4ZWYsCi0JMHhiN2FlZmI0ZCwgMHhiZWM4YzVkZiwgMHg4Zjk4NDgyNywgMHg1NzVmNGRlOSwgMHgwMGJlYmIwOSwgMHg2N2I0M2NlZCwKLQkweGU3NDBiZjM2LCAweGU5YmZiZTJlLCAweGQ1NWYzYTA1LCAweGRhMDJlY2Y4LCAweGYzNjY3MDk3LCAweGY3ZjA4N2JjLAotCTB4OThlY2NlMjMsIDB4ZTE3ZDc2NDcsIDB4Nzc1ZDhhNjMsIDB4ODVmZDgzMTksIDB4OWU3M2NkOTIsIDB4YWZjODVmZjgsCi0JMHhkZDUzODRjZiwgMHg0YmJmNmFiOCwgMHg0N2EwMzljNCwgMHgzMzZkOWM2MSwgMHgxMzZjOWJkNywgMHhkMTBiYTNkNywKLQkweGZkOTJlNWZlLCAweGRkYzcwOWJiLCAweDA5YmFlNTU3LCAweDNhZTgzZWY5LCAweGU2ZmJjNWQ5LCAweDA3Yjc3ZWI5LAotCTB4YjdlZmJkZTYsIDB4MmQwZjc2OTEsIDB4NzllM2UyZDksIDB4ZWQwZjhiNjcsIDB4N2YzZGVkNWYsIDB4MGJiZjQ1MzksCi0JMHhlYjc5MWYyNSwgMHg4N2JkOGFjNywgMHg1NzdhZWRlZSwgMHg5N2NhMDY0MiwgMHhmMmI1ZjNiMCwgMHhmYTBiMGNkNiwKLQkweGZjMmVjMjA1LCAweDE3M2RmMWIzLCAweDE0ZmU0ZGYxLCAweDRkYmJmN2M3LCAweDZkZWZjZjFjLCAweGRjNmY3OGUwLAotCTB4ZDNlMjk3ZDEsIDB4OTJmYTliNzcsIDB4OGVlZWY1MWYsIDB4ZjllZjg0N2UsIDB4ZTRkZjAxZWIsIDB4N2VkNGRiNDcsCi0JMHgxYmUwMTM1NCwgMHgzN2M0MDRlMywgMHhiZjc3MzVjMCwgMHhjZWRiZTA0ZCwgMHhmMWM0ZGRmMSwgMHg3NmYwMzZjYywKLQkweDdhYmMwZjdlLCAweGZiZjRmY2U4LCAweDhlY2MzZGZlLCAweGUxODdjMTdlLCAweDNlOTdmMjNlLCAweDk5ZDMyOWRjLAotCTB4YTU5ZjhhNjcsIDB4YjE5ZjM5ZjgsIDB4MWZkMWM3ZTYsIDB4YThiZGYwNTMsIDB4ZWEwODdmYmYsIDB4N2Y4ZDhhOTcsCi0JMHgyZmJjNDY4YSwgMHgyMzkzYzlkYSwgMHgxY2NkZjAzZCwgMHgwNzZmZTg0OSwgMHgyZmQ1N2ZkZSwgMHgwODQ4Y2IyYSwKLQkweDIxYmU4YmYyLCAweDkzOThlYTVkLCAweGUxZDcyM2Y2LCAweDgyNDM2NDc5LCAweGJmMmIzZGY2LCAweGU3ZGRhNjViLAotCTB4YzhmOWUzNmMsIDB4OTkzNzY2MzAsIDB4ZWQzNDllMTAsIDB4MThiOWFmZWYsIDB4YmNmZTdiZWUsIDB4Zjc1OTg1ZGYsCi0JMHhhYjc3MWM5MCwgMHgxMjYzNGY3ZSwgMHg5Y2YwMTlmMywgMHhkMTIyZDYwMiwgMHhlNWRhOTY3ZSwgMHgxODhiYTM0YiwKLQkweDRmNWEzZjllLCAweGUwY2RhYzcwLCAweGJjMmJiZDc2LCAweGIyZmM4MzNiLCAweGVmMWM2MTNkLCAweGYzYWFmMTlkLAotCTB4NmZkZDI3ODksIDB4YjQ1N2Y5OGYsIDB4ZjlmODQ3ZmIsIDB4NzYzYzkzYzQsIDB4MWE0ZTY3Y2EsIDB4MmFiOTM0MzEsCi0JMHgyZTBiYWU4OCwgMHhhYjg5NzNmMywgMHhmMmU2MDMyZSwgMHhjNmZkZjdmMSwgMHgwNTg3YmVkMiwgMHhjZWE4NTNjZCwKLQkweDQ5NmQwNTVmLCAweGJlNWVmOGYwLCAweGMxOWI1YmJmLCAweGI4NTM5YmUzLCAweDk3M2MzY2E2LCAweDlkN2VmYzQ5LAotCTB4ZWE4ZDE3MzgsIDB4NTM5YjgwYjQsIDB4MzczYTRlZTEsIDB4Yzk4MjU0ZWYsIDB4OGJiYWNmY2UsIDB4ZWZmZGYzYTEsCi0JMHhhNjcwN2ExNiwgMHgxM2VkMjBmOSwgMHhjYzNjNzk4NywgMHhiZmQ2ZTc4YSwgMHhhYjAxNDA2OSwgMHg4YjNjNzUzMCwKLQkweGU0ZWNmMDIxLCAweGU5MzVlZWY3LCAweDgzN2Y2YjcwLCAweDc3NzNlNDQ1LCAweDEzZDcxNTdkLCAweGQ1MWQwMDllLAotCTB4MjNiOWI5ZTcsIDB4OWEzZmU3NDIsIDB4ODcyNTVlMDUsIDB4NjEwY2VhODMsIDB4YmMwNDc3MzAsIDB4MzYxOWU3ZmYsCi0JMHg2ZmVjNWQ3ZSwgMHg5ZTgwNWI2NywgMHg4NWNmM2Q1MSwgMHgwZjMzYWU1MywgMHhhNmI2MGYzZiwgMHgyYjdkZmUxOCwKLQkweDdhODQ4Y2UzLCAweGZhYTlkNjQzLCAweDdmN2U0NjM1LCAweGM5YzRjNjdiLCAweGY2MzE0NjliLCAweGY3YWMwMzA2LAotCTB4ZjE5NGJmNDUsIDB4OGM0ZTdmMzgsIDB4NGQ3NWY3MTcsIDB4YWNhMzczYzYsIDB4YWY4OWVhZDgsIDB4NDc5OWVhYTYsCi0JMHgzMzI2ZGJjNywgMHg3OWM0M2JkNiwgMHhmZTA0OTM1MSwgMHhiZTYwOGZhNiwgMHhkZjdkZTAxOCwgMHg4OWI5ZjU2MSwKLQkweGJlNzRmOTc3LCAweDkzYWYwMDliLCAweDIxYmE1Y2YxLCAweGNkOWNmZTc4LCAweDM4Zjc4MTYwLCAweDhjM2NhNGNiLAotCTB4N2Y1NjZhNGYsIDB4NjRmNzc4MzMsIDB4OTRkZTRmOTQsIDB4OGU5ZDdkMDYsIDB4OWU2M2Y5YzMsIDB4Zjk4OTk4OGYsCi0JMHgyY2MzYzA3OSwgMHhlNzJmZGIzZCwgMHg1ZTIzN2E3MSwgMHhlZDFiNTZkYywgMHgyYTVlZThmMywgMHgyNTE0N2VkMSwKLQkweDdiZDBhZjJmLCAweDRmMmYyMDY4LCAweGUwMjk5Yzc0LCAweGEyOWE3OTgzLCAweDY4NjM3OWYxLCAweDUwY2UxZDdhLAotCTB4OGExNmU4ZTIsIDB4ZjkwODk3YWYsIDB4ZTVjOGEyNWMsIDB4OWU1Y2I1MGUsIDB4N2U4MjNhNDUsIDB4Yzg4OTNkYzYsCi0JMHgwYjQ1MzM1NywgMHg2YmY5YTRlYiwgMHg3Mzk0N2JjNCwgMHhmMDY0Y2ZkMywgMHgwYzk5ZTk3YywgMHhmZTM4N2Y1ZSwKLQkweGNjYzdkZjJkLCAweDQ1NDY5Y2ZjLCAweGY4YzM2YjNlLCAweDI3ZmJjYWZjLCAweGMzMzNiNjhiLCAweGYwMmJmMzRhLAotCTB4MWZmMWYzNjgsIDB4N2U0MzU5NmMsIDB4Y2NiN2Y1NTIsIDB4MWJlOTA3YzcsIDB4YzY0OTdiYWEsIDB4N2E4OGY5ZWUsCi0JMHg0OWMyNWZlOSwgMHg1YjFhNjZlZSwgMHg3YjliZDVmYSwgMHgxZGNlNTM4ZSwgMHgwMzdlNjBhYywgMHg1NTMwMGZhZiwKLQkweDZjYjQ3NDFkLCAweDJiMmM3M2E2LCAweDlhZmJmZTI0LCAweDFlNTE0NTVkLCAweDZiZTYwYzVkLCAweDhhZGE0NDBjLAotCTB4ZTk3M2YzMWYsIDB4ZmJlNzA5ZGUsIDB4ZWU2MzJiM2IsIDB4NjA3ZTg0OWIsIDB4NGY1MWI0NDUsIDB4N2YzMWVjZTcsCi0JMHg0MDU2NTY1NCwgMHhjOTE2MzZlZiwgMHgwNDIxNGU3NCwgMHg2ZWIxOTM4MiwgMHg3ZmViMDZiNiwgMHgyM2IwZmZiYywKLQkweGEyNGJiMjhkLCAweDUxZDdiM2ZmLCAweDAyYmI0ZDFmLCAweDQzZmVhN2Y0LCAweDBmMTAxZDkzLCAweGY3MTAxZDc1LAotCTB4N2NmNGMzZDksIDB4OGY4MjAzZDcsIDB4ZmRlNzNmM2QsIDB4MzdmNzI4NWYsIDB4ZTUzYWZlZjMsIDB4ZmZkZTE2ZmUsCi0JMHhlOGJmMzI5OSwgMHg1ZmRjZDQ2ZiwgMHg0YmZmYjlhNSwgMHg2MjdjNGZkZSwgMHhmYTBmNjRjYiwgMHhhNTljYzVhZiwKLQkweGU4OTU2ZTJiLCAweDA1Y2EzNTc3LCAweGY2YWM1NTlmLCAweDc0MmI3ZTExLCAweGNjNWI3OTdiLCAweDZiODJiYTdjLAotCTB4NzRjZTJiOGYsIDB4MjExZmEzOTYsIDB4YTE0Njc1NDcsIDB4ZTU5MDllOWQsIDB4NzViYjQ3MjgsIDB4MmIyYmJhNmIsCi0JMHg1M2M1ZGExMywgMHhkNjExOGYyNCwgMHhjOTdiOGVjZCwgMHg0NWVhNGM2ZSwgMHhiZTBiOTcxZiwgMHhmOWYxYjIyZCwKLQkweDNjYzM3YzE0LCAweGJmMGIzMzAzLCAweDg0N2UzY2ZkLCAweDRmMzU0MTJiLCAweGYzYzBmNWZlLCAweDc5OGY1YjZiLAotCTB4M2NjZjVkNDYsIDB4YmFmNTJjYmEsIDB4ODllODNmMTQsIDB4Mzg1ZGM3NmMsIDB4MmUxZWQ2OWYsIDB4MDYzZGE5ZjksCi0JMHgzNWVjNTBmMywgMHhlYWUxZmRmMSwgMHg5ODdjOGM5NiwgMHhiYjczYzk3ZiwgMHhlZmQwYWEzMywgMHgxZDQwZmUxMiwKLQkweDNjN2NjM2RhLCAweGMzZGI4MmU3LCAweGYyNGZkYjhmLCAweGRhYmI3MDdkLCAweGJmMzA2MzhkLCAweDNkYjA2ZDBmLAotCTB4Y2UwNWU5YWMsIDB4ZDg5ZDRjOGEsIDB4ZDc5MWIwNDcsIDB4YWIzYjllYzUsIDB4ZDEyZTdhNDcsIDB4MGM3OTljYjUsCi0JMHg1MmFkZmJlZCwgMHgxMTI3ZGZlOCwgMHhlNWVhOWRjZiwgMHg2NmU2OGU3NywgMHg5MGQ0M2Q3MiwgMHhlYjgzOThlMywKLQkweDM0NjRjOTJjLCAweGU4NGQ2NGJlLCAweDliN2Y5YTczLCAweDg1NzJlZGM5LCAweDg2ZjM3YmIwLCAweDgwNmM5OTQ1LAotCTB4YWVlM2MyZTcsIDB4YWFiZmI4MzUsIDB4MWU1NjRiNmEsIDB4YTU2Nzg1ZTYsIDB4ZmNjOTJmMTcsIDB4Mzc2YWJjZGEsCi0JMHhmMWI2YWJjZiwgMHhkNTg1NmFiYywgMHgzNzk0MWNiZiwgMHhlZGIzM2E3YiwgMHg2MzNhNTM2MSwgMHg5MTRkZmZlMywKLQkweDc4NTkxMDMzLCAweGU5NGMyY2I2LCAweDc0YjkzOWJmLCAweDYxN2JjZjE0LCAweDQ3MTNkZDdmLCAweDM5Yjk0NjFlLAotCTB4ZmU2MGYwODQsIDB4MDhlMGY4N2MsIDB4NTkxZDBiZDQsIDB4ZTgwYjNhOTEsIDB4NzM2OTU5OGIsIDB4YWNmZTQ2OWUsCi0JMHhkYTAzZmUxYywgMHgxNjE0NTMyZiwgMHhjZjBlN2ZkNSwgMHhjYzVmMTNjZiwgMHg0MmFlNzM0YSwgMHhlNjNjNzEzOCwKLQkweDVmNDY1YzQzLCAweDBlYjA1ZGMyLCAweGVkMzJhYmQ3LCAweDg5MGQ3NTUzLCAweDRlZmM4NTc0LCAweGU5ZTFlMDU5LAotCTB4ZWJlMTBiNGMsIDB4ZmQxOTkwMTAsIDB4ZTUwZTA1MTQsIDB4MmZlN2UwZmQsIDB4OWQ3Y2MzZjcsIDB4ZTI4NjUzYWIsCi0JMHhiNGJlNGU3NywgMHg4NTk5NmRhMiwgMHhkMmZiZjc4MSwgMHhiZjA0OGY1YywgMHhmYWM3NTNiZiwgMHg0ZGYxYTg2MywKLQkweGMwNTg3OGUxLCAweDA2ZTkwZGIxLCAweGNjOTQ3M2FkLCAweGRlZjE0MTFjLCAweDU1NDhkMmQ0LCAweDM4ODRkYTdmLAotCTB4ZDdjZTA4ZTYsIDB4ZjU1NTRiNGUsIDB4YWFmYTJiY2IsIDB4N2YzZGRmYzYsIDB4YzRmZWVhOTAsIDB4N2Q0MTdmMzAsCi0JMHhiYmRiYmY5MCwgMHhlN2UxZTQ5ZiwgMHg0NTQ1NDU4ZiwgMHhiZmJjYmVlMCwgMHgzNmY2N2RiNywgMHhkNzc0NWVmZSwKLQkweDdkMWRiMjUzLCAweGI2N2I0NWRhLCAweDAzNDc4ZGJkLCAweGIzOWZjNDVmLCAweDhkYTQzY2EwLCAweDFkMWY2NmYyLAotCTB4ZDczZjE5OTIsIDB4YWUwZmExYzIsIDB4ZmU2MzlkMGYsIDB4MTA3N2YxNDcsIDB4MjkwN2FiN2EsIDB4Y2IxMmVlZjEsCi0JMHg4MDFkZmE3ZSwgMHgzYTBmNWQxYiwgMHg0MWVhMjk5OCwgMHhlZDBmMmM3OSwgMHhiN2ZhYzVlMSwgMHg2NzU3NmYyOCwKLQkweGI3M2JlYmU2LCAweDhiNGY5ZjliLCAweDA1N2Y1M2U3LCAweDNlMDc3ZWZjLCAweDY1ZTFmZTg4LCAweDRiYjVlNTBmLAotCTB4ZmQ1MzRmNWEsIDB4ZWI5MzJhYWMsIDB4YTViNGJhZTksIDB4ZGQ4YmY0N2EsIDB4MTgxZGEyZDAsIDB4MDYyYWZhMDMsCi0JMHhjZWRmYzVmOCwgMHg3ZGMyZWYwNiwgMHhkYzUxNTk2YywgMHg5NTNjYmY1ZiwgMHgyYmU0MzhiMSwgMHg5NDM5ZTc5ZSwKLQkweDUzYmY0YjE4LCAweDhjYTlhNGJjLCAweDhlNWRkN2FlLCAweDk3NWZmOWEwLCAweGNkNGZiNGZkLCAweDc1NDQ5MmYzLAotCTB4OTVhOTg5ODgsIDB4YzZiZjcxYWIsIDB4ZWU0ZjA4YTEsIDB4YzRlZjc4MzIsIDB4ODY1MWRkZGYsIDB4YzVkYmFiNzgsCi0JMHg5NDRjOTFmNywgMHgwYTU4MjhkZiwgMHgxOTczNGQ2ZCwgMHg2NjUxM2YzZCwgMHgxN2YwMjQ4NywgMHhmYjcwOTdjNiwKLQkweGJlNmQxMTNiLCAweDQ2ZTBmNzE1LCAweDJiYmI0N2FkLCAweDdmZmQ3ZDFiLCAweDE4YzY3YTg1LCAweGU2MjY3YTQ1LAotCTB4N2VmNGRkZjIsIDB4M2QxMzY1ZjcsIDB4ODhmNDI1ZGYsIDB4MzVjMzgzYTEsIDB4YWU5M2IyZmEsIDB4NTlmMGZjMmIsCi0JMHg3N2VhYjY2NiwgMHg0ZjA5MGM3ZiwgMHg5MWY3ZjFlOSwgMHhjNjhjMWQwZCwgMHg5MDNjYmI4ZiwgMHhhZmJkNjU1YSwKLQkweGZhNzdmODBlLCAweGMyNDM1YjVkLCAweGZhNWZiNGE3LCAweDQyYzk3OGQ1LCAweDBmNDY4ODZlLCAweDFlMWZhYTVmLAotCTB4YTllODQyYzMsIDB4ZjExMWVmYWIsIDB4NWZlYTE4NDgsIDB4NzJjY2JmNjgsIDB4MzAxMmRhNDQsIDB4NjNkMGU5OWUsCi0JMHg0ZDk5ODg1ZCwgMHhmZmU0NGZiNCwgMHgwNTM4Y2QwMCwgMHgwMDgwMDA3NiwgMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLCAweDM5OWVmMGI1LCAweDY2NDkxZTY3LCAweDk5MjEyNzI2LAotCTB4NGNlMjEwMjQsIDB4ZTAxMDI0NWUsIDB4MGYwODA0MjQsIDB4ODYwMjQwY2IsIDB4MDg0MDEzYTcsIDB4YmM4MGU4MzQsCi0JMHgyYjEwMTAyNSwgMHgwMzM3ZTk1ZSwgMHg2MGQyMjA0OSwgMHg0NTQwNTI4MywgMHg2OGIwNTAzYiwgMHhhYWY4ZmY2ZCwKLQkweDAxMzFmNWE5LCAweGU5NGEwZmU0LCAweDdhYjdiZDYwLCAweDUyMDM2YjZmLCAweGUwOGQ0NTA0LCAweGIxNmRjZmVkLAotCTB4YmRhZDZiZmUsIDB4MzI2NzMyNGYsIDB4ZmRlZGVkNDEsIDB4YmUzZWY5ZmYsIDB4M2VmNjc1OWQsIDB4N2FmNmIxZmIsCi0JMHhiMzBmYjVlZiwgMHhjYjVkOGFjYSwgMHgwYWZiMTg4YiwgMHg5MzE4MTM3ZiwgMHhiYjMwMmU4ZSwgMHhkYTY2MzI4NiwKLQkweGIxZWNjNjdkLCAweGIyODE2NjMxLCAweDk2YmVhMjNjLCAweDA0NmI0ZjMxLCAweDJlNDk5NWFjLCAweDE5MjM2MzIzLAotCTB4Mzk1MGI2ZmMsIDB4ZmJjMWRiMGIsIDB4NjMxZjc3Y2MsIDB4NTc2ZWM2NGUsIDB4NGE2ZGZmMTgsIDB4YjE4MzJjNjUsCi0JMHhlZDA0ZGZiZiwgMHgwZmRlN2I1MywgMHg4NTJlYTAxYiwgMHg5NjhiYzBiMSwgMHhiYmY4NjFlMCwgMHhjNzJmYjY1ZiwKLQkweDg5ZTFmNTA1LCAweGVjMzlmYWFjLCAweDU1NjcwZTQ3LCAweGNkZGZhMWQ5LCAweGRhMTViMjlkLCAweDM5NTU5YjMxLAotCTB4OWZmODA2ZWMsIDB4NmY4MmZmMzQsIDB4OGJhNzdmMzksIDB4MTJiN2ZmY2YsIDB4ZmRmZDg0ZGIsIDB4YjA4NGMyNzYsCi0JMHg3ZWQ1ZTYwNywgMHg5MjExODhmZiwgMHgzMWRmYTdhYiwgMHg2M2I1MzMyZSwgMHg1Njc1ZDc0YSwgMHhkN2JhZDhjYSwKLQkweDYwM2I1YzEyLCAweGMxZmIzMzdkLCAweDVlYmI4MDMzLCAweGJhMGYwNGI1LCAweGE0MzMzOWU5LCAweDY4Mzk2OTYwLAotCTB4OGU3NWZhODAsIDB4OGMyZjdjYWUsIDB4NWM3YWZlNWYsIDB4N2U4MzBkODgsIDB4MTk5MzhmNWYsIDB4YWU1MmYzOGMsCi0JMHhhNWUyMGM2ZiwgMHgxNTQxZjVmYywgMHhmMjRjMDcwNiwgMHhhMGNjOGIxNSwgMHgzYzliYTRkZCwgMHg1Zjc5ZjE2MywKLQkweGFmNWU4ZGYzLCAweGY5YzYwMjU2LCAweDE4YTdjZWZjLCAweGFkYmJiZGYxLCAweDU1MjliNWZjLCAweDIyNjI0MDg2LAotCTB4Yzk1NGQ3NzQsIDB4MTZjNjA4ZDgsIDB4OWIwZDliNWYsIDB4NmI5MmQ4YzIsIDB4NWFmYjA0ZjEsIDB4NzVhYmYzZjgsCi0JMHhkZjcwNTM2OSwgMHg0OTg2NmVhZSwgMHg2Yzk2M2FjMywgMHgwMTdkMGMzNiwgMHg3NjVjYzVkNiwgMHgzMGYwMGYzNSwKLQkweGFkYTJjMDczLCAweDUzMzllNjBjLCAweDY3N2FkMjMyLCAweGQ2MGE0OTBlLCAweDcxZGJkMzQzLCAweDczZTBjN2JmLAotCTB4NjY0ODYxZDYsIDB4M2RiOTdhNmMsIDB4ZDZmMTg0NjAsIDB4ZGZhODUzNWMsIDB4MWEyZTZiZGEsIDB4NjRiNWVkNmYsCi0JMHhiMzVkZDc4MiwgMHhkYWU0Yjk1MiwgMHhiOTZlN2E2MCwgMHg4MDFlNjQ2NiwgMHgxYzAzNWU5NywgMHhkYjI3M2MwMCwKLQkweDNmZDcwYWI3LCAweDRhOTZmZWIzLCAweDM1YjdjZjFjLCAweDhiNjdkNGEzLCAweDgyYjMxN2E0LCAweDkyZjQwNTc0LAotCTB4YjNkNmRjYmUsIDB4MDVmNmZhZmUsIDB4MmZlODU1MzAsIDB4YjJmNDRiYzUsIDB4ODhmMmNhMTQsIDB4MGU4MjY1ZmEsCi0JMHg1NmI2ZjFhMiwgMHhhNTM3ZmZlYywgMHg1ZjQxMWE5NywgMHgzY2ExNmM0YiwgMHg1NGMxZTAyMywgMHg4NTZlYTcxNywKLQkweDcxNDk1Y2Y5LCAweDZjYmM0MTRkLCAweDZmZTM4MDc4LCAweDZlNWJjOTgzLCAweDc4NmVmOTg3LCAweGNlYzJhMGM0LAotCTB4ZDk0NzNiYjAsIDB4MzJmMDBjYWQsIDB4YjMzYWRkZWEsIDB4MTc2ZTgyMmYsIDB4NWNjNjFiNWMsIDB4ZDczOWZlYjAsCi0JMHg3ZGJjYTk3MiwgMHhhZTMzNmZhMCwgMHg3OWI1ZjE3ZiwgMHhhOGMzNGYwMiwgMHgyMzY0ZDY2NCwgMHg0NmQ4YzUxYiwKLQkweDRlMTc1N2RjLCAweGIzZWY5OTI4LCAweDc1MTdkZjk4LCAweDg1ZWVkM2EzLCAweDY1MzhiZmYxLCAweGI4OGJmYWEyLAotCTB4NTUzMDI1MmYsIDB4OWMwOWUwNGYsIDB4NTE2ODI5OTcsIDB4MmViY2MwMGYsIDB4ODE0MDU4OWEsIDB4OWY3M2I4YWQsCi0JMHhkZjAwMDU5MSwgMHg0MWY0YTE0YiwgMHhiMDdiNWQwOSwgMHgyOTFkZTU5ZCwgMHg5MmVkOGVkOCwgMHgwNGE5Mjc5OCwKLQkweDJkZWIwOWYxLCAweDA1N2M2M2UwLCAweGMyMTkyZWZmLCAweGZkNDJmN2Y5LCAweDk2NWIzMzI3LCAweDgxZTA3MzFiLAotCTB4ODY1NTJhNzQsIDB4OWNmMjdlNzUsIDB4YmU3ODI0YzQsIDB4NGUxYmZkNmEsIDB4OTVhYjFlNTgsIDB4NTAyOTY0MGUsCi0JMHhjYzEwZDFiZiwgMHgzZDhjNDkzNywgMHhlMmY2ZmIyMiwgMHhkODVhM2ViYSwgMHhkMDY1NmZmYSwgMHhmM2NiN2NlZSwKLQkweDBkNTdkYzBlLCAweDI4NzJhZGFmLCAweDA1NjlmYjBmLCAweGVlNjAwNjdjLCAweDY1NTJjZGFkLCAweDI2YzM0NmQwLAotCTB4YTFlZDBkNTQsIDB4YTM5ZThkNmYsIDB4YjVmNTdjZTksIDB4YWJhN2EyNmMsIDB4MmZhMTk2NzUsIDB4ZGQwMzFkMjAsCi0JMHg0MTVhZjNlMiwgMHhmZDIxNzdlZiwgMHhhY2VhNjk0MywgMHhlOWM4ZjQxNCwgMHg1YWViYTM1ZiwgMHg1YWFkY2I5OSwKLQkweDAwMzA2MjViLCAweGJmZjk5YmYzLCAweGY1MDBmZTgwLCAweGYyYTg1ZjZiLCAweDJiYmE0NDRlLCAweDUwNzlhODMwLAotCTB4MzJmYzExYWMsIDB4ZTBmODNhNTMsIDB4Y2Y4M2U0NTgsIDB4Nzg3YWQ0NTIsIDB4NTc5YWY5M2UsIDB4YzFmM2Q3M2MsCi0JMHhjNjc0ZmU0YiwgMHhiYzRiMTlmMiwgMHhkNWM2OTBiNiwgMHhlODIyZGZlOCwgMHhkZmY0ODRkZCwgMHgyZDgzZGU4ZiwKLQkweGQ5ZmZmZTA1LCAweDc3ZmY5ZWRmLCAweGRiOTBmM2Y4LCAweDZiZTIxNmY3LCAweDdmY2ExYzlhLCAweDNiNGIwNTJjLAotCTB4OTRlNGQxZDEsIDB4ZTdlOTE5MmEsIDB4YjNjZmNiOWIsIDB4ZDU5ZTdlNDIsIDB4N2RiNWNmYzksIDB4YjdmMGNmYzgsCi0JMHgwNGQ3ODdlNCwgMHhkODVhNTQzZiwgMHgyZTIyZGUxZCwgMHg3YmRiNjdkZiwgMHgzZDk3ZWJmYSwgMHhlYTBiOWNlOSwKLQkweDc4MTk3NDNmLCAweGYzNDNmZjdmLCAweGNhNWJmMGZlLCAweDg2ZmQ3ZmZkLCAweDQyYWZmZjcyLCAweDc5Y2I0N2VlLAotCTB4OWNhMWZkMDYsIDB4YzJkNWVjZmYsIDB4Zjc4MWVhMjAsIDB4ZDQwNWU4MTksIDB4YjgyNGFmN2IsIDB4NDAzZDBiMGUsCi0JMHgzMTNlMjI3YSwgMHhkMDNkMjM3OCwgMHg1ZmU3N2I5MCwgMHg3ZjAzZDBmYiwgMHhhM2ZkYmM0MywgMHgzZmEzNDA3YSwKLQkweGZlMzQ1ZjhkLCAweDlhMjFmOGQwLCAweDk4N2UzNDdmLCAweGYxMzUwM2ZlLCAweDQwMWZkYzVlLCAweDFmZTQ2MWNjLAotCTB4YWUwY2YwMzksIDB4NTA5NWQ2YTMsIDB4ZjFhOTdjOGMsIDB4MGMxN2RhZDEsIDB4ZjRiZDY3YzQsIDB4MWU5YmUwODMsCi0JMHgwYmViZDEzZSwgMHgzZTM0MWY4ZCwgMHg1NmE2ZjhkMSwgMHgyOGIyYzNmMCwgMHhiNTI2Mzg3ZSwgMHhkZTE2M2MzZSwKLQkweDE1ZjZlZWRiLCAweGY4N2I1M2I5LCAweGQxNzNjZDYzLCAweDdhNGZhMTdhLCAweGNiNGY0ODYyLCAweGQyMThlYTUyLAotCTB4OTE5NDJkNTMsIDB4ODNlOTY0ZjQsIDB4ZGZkZDhhOWUsIDB4MTI2ZTllOGUsIDB4OWU4ZWJmZWQsIDB4NmE2NmRjMmEsCi0JMHg0ZjQ4M2ZmNywgMHgzMTkxZWUxNSwgMHhmYmIyNjllOSwgMHg1YzU3Njg5ZiwgMHhhOTdkZmJhZCwgMHhiNTczZTYwYiwKLQkweGJiYWNlNDE0LCAweGJmYTZkZTg3LCAweDkwZGRiOGM1LCAweDdlOTE1NzYzLCAweDNhZjllMjNhLCAweDgzMDNjYzNiLAotCTB4MmJlZWQ4ZjUsIDB4ZDQ3ODg3NTYsIDB4NjdkYjUyZTgsIDB4ODY1ODBlY2QsIDB4YjZlNTAwNzQsIDB4OWMyYWVmNmMsCi0JMHhhMDdjNDc2ZiwgMHg5MzM3ZmQ2OCwgMHg5NmNmYjQ3NywgMHg1M2Q5YjA5NCwgMHhkNjFkZmI4NCwgMHhlY2JlZmZlOSwKLQkweDcyZGZiNWM1LCAweGRmZGM2YjlmLCAweGRkZjg2ZTRjLCAweGQxN2I3NGZmLCAweDI3MmQ4ZWVmLCAweDdkOWRmZjAyLAotCTB4N2YwZTU5OWQsIDB4OTRmMDQ3ZjYsIDB4ZjYxZTMzZDcsIDB4NjYwMjg3ZTcsIDB4Y2JmMjJmNjEsIDB4ZmVhZDMyYmMsCi0JMHgxOTFlMmQzNywgMHgzZGZjMDNlNSwgMHgzMGYwNDY5NiwgMHhjMzgxZTEyYiwgMHgwYWUxZDM4MSwgMHg4N2Y0ZTc5OCwKLQkweDU4MDNlYmJiLCAweGEyN2M3OTNmLCAweDBjNzk4ZmU4LCAweDhmZmRhN2FjLCAweDZlMTViYzBmLCAweGMyZGVmZDI2LAotCTB4OTRlYmVmZjEsIDB4ZTAyMzQzYmQsIDB4MTFlZDgwNTIsIDB4YmMxNDU5NzAsIDB4Yzg3N2I3OWYsIDB4N2VhMTRjOWQsCi0JMHhhMGFmOWM4MiwgMHhjMjA5NDM3ZiwgMHg3ZTgyN2Y1YSwgMHg1NWY4ZTc5OSwgMHhjNTJjZjNjMCwgMHgzZWMwNzZjMCwKLQkweGYwMzk0YmFkLCAweDZiOTQ1NWM2LCAweDcwNjYwNjZkLCAweGZkODFlMDQ1LCAweDA0YzllYmRlLCAweDIwYzU3OGJhLAotCTB4N2IwOGZmZTAsIDB4Zjg1YjE5NzIsIDB4Yjg0Zjg3MDIsIDB4YzgxMmQ0ZmYsIDB4YmUwMmZkMTUsIDB4OWI3NDA4ZDcsCi0JMHgwOTFlMGQ1YSwgMHg2NjUzNWJmYSwgMHg3YmJiNjYwOCwgMHg1Yjg0ZmJlMywgMHg3Y2RhYWJkMywgMHhkZmVhNTU0MCwKLQkweDZmOTRlNjY3LCAweDZkMWEzZWY3LCAweGJkMzY3ZWY0LCAweDhiN2NiMjFmLCAweDY3OGZlN2YxLCAweDdiMGM2MDllLAotCTB4MWY4MjBmZjgsIDB4NjMxMzRhMmEsIDB4NGI3NzlmZDYsIDB4MDFkN2ZmMWMsIDB4NDc4N2M2ZDYsIDB4YzFmZDYwNzMsCi0JMHg1OTc1ZmMxOCwgMHgxYTM2MTdmNCwgMHhkNmZmM2UwNSwgMHgzNjE2NzQ4MiwgMHg2YmZlZjg2YiwgMHgzMjdiZTIwYiwKLQkweDgyNzRkZDYzLCAweDEzZTMwMzc0LCAweDdmZGM3ZmZjLCAweDdjYzkzNmY1LCAweDdjMjg5ZWI5LCAweDZmYmQ2OGRkLAotCTB4MjA1N2MwYzYsIDB4MzcyY2JmNmEsIDB4NmVlOWY3YzAsIDB4YmVmM2QwYjksIDB4ZTg3ZWZmNGIsIDB4NGVmNWZiNDYsCi0JMHhkZDA1ZjFhZiwgMHhkOGU4ZDRhZSwgMHg0NGY3YTNhMywgMHg5OWY0NGJkOSwgMHgwMjUwNjI5OCwgMHhiZDZiOGY0MCwKLQkweDJmZThjZDcxLCAweGE5YTdmMGY0LCAweDhlMTRmMTBhLCAweDg3YTllM2QzLCAweDE1NTVjY2ZmLCAweDQ0OGZiMjM2LAotCTB4ZTQyZWViN2IsIDB4YmJiMWFmNWYsIDB4NmVjN2U3M2QsIDB4MDI5ZTY2YmEsIDB4ZDI5YTJiYzAsIDB4NDFkMjdlZjgsCi0JMHg4ZDgwYWVjYiwgMHgwOWVhODJlOCwgMHg3Nzk4OGRjZSwgMHg0NmI2M2YzNCwgMHhmOGEzZTNjMSwgMHhjOTFmZjA1NywKLQkweDgwMDdkNDBmLCAweDZmOTQzY2E3LCAweGFlY2Q2NzI5LCAweGIzNTEzYTA4LCAweDMxM2U5ZTM5LCAweGE3OTQ2YWIwLAotCTB4OGVkYzQ5ZTEsIDB4ZDJmMzY3MGMsIDB4ZmFhMDZkOWIsIDB4MWZiZTZjYjIsIDB4ZTM4NjUxMWUsIDB4YTdhMGYwMjMsCi0JMHgyYmZhMTA5ZiwgMHgzYzI2ZWIxMSwgMHhkNmQxNDgyZCwgMHgwMzM1NTA1ZCwgMHhlNjRlMTVkNiwgMHg3M2IyZDNmNSwKLQkweDdiMzIwNTc3LCAweDY2ZmVlOGUwLCAweDA1NTQxNzY0LCAweGNmZmIyMjhhLCAweDVkNzg4MzNmLCAweGNkZTZmMDIwLAotCTB4ZWIwNjc0MWUsIDB4NGI1MDc5MzUsIDB4MTFmNDQyODQsIDB4OGI1MDc5NDAsIDB4NGRlODYxZjQsIDB4YmRkOWU5MWYsCi0JMHhmNTEwMzNlOCwgMHg4Mzc0YzdiZSwgMHhiZjdhYjNmNywgMHg5ZjdhODllZiwgMHhjZGJlNTI5OSwgMHg2NmRmNjJmYiwKLQkweDY1NmJlZDQ0LCAweDQ0NTZiZWQ0LCAweDFjMWEzNWMxLCAweDRkNWZjOWQ0LCAweGRiNjkyZjJlLCAweDc5ODRlOGQ1LAotCTB4ZTQwNDc1ZGMsIDB4ZTdhNDhiMmMsIDB4NzdjZjQ0NTEsIDB4OGVmZDFhMjksIDB4YmI3YTgzM2UsIDB4MDhjYjllODcsCi0JMHhmNjJhZGQ5ZSwgMHgxNzY2MzAyZCwgMHg5NDJhOWZlYSwgMHhlMDdiNjNjMywgMHgwODg3MjgzOSwgMHgxOWU1NWIxZSwKLQkweGM2YWZhOTFlLCAweDNkYjk0MmVkLCAweDNmNmI0OWJmLCAweDZjMmZkYTllLCAweDk5YmJmYWQwLCAweDY0N2RiNWVhLAotCTB4ZDE1NGVmODEsIDB4YzNiOTBhYmUsIDB4NjBjZTEzMDIsIDB4Zjg1N2VhZmQsIDB4M2QwN2Y1ZmIsIDB4MGZjODZlNjcsCi0JMHhkOTc4NTEyZCwgMHhhMjA3MDUxZiwgMHgxYWZlZWZkYSwgMHhmNTEwZDZmZCwgMHhmYWE4ZTZmZSwgMHg1Zjc4MjhlNiwKLQkweDdmYTRkYzE0LCAweDAzNTJmMTdmLCAweGEwNjJlMWYxLCAweDY4ODhkYzA3LCAweDhmYTY4Y2JlLCAweGVkYmJiMzg3LAotCTB4NmU3ZDZlOWMsIDB4YTc3ZDkxYjAsIDB4ZjVlOWFiZTMsIDB4ZTBmYzdlMWMsIDB4YTJhNmFhY2MsIDB4ZDZmYjM4MDgsCi0JMHhkZmY3MDBhYSwgMHgyNjk3NDgwZCwgMHg3MzIwN2ZjNiwgMHg4M2QwMTIwMywgMHhmOWI5MGZhOSwgMHhiMmU4YmU4MywKLQkweGYzZGY1YTIwLCAweDlmZTEzZmZhLCAweDMzMmY2ODE5LCAweDRjNzI1ZDlkLCAweDkyZWRjM2QyLCAweDY3NDVlZjM2LAotCTB4NDNlMTE2MzYsIDB4NDJhOWFlMGQsIDB4NWVmYTdhN2YsIDB4OWZjMGJhZmQsIDB4YWFjMmYwMTUsIDB4YmIwOGNjOGEsCi0JMHhjYWEwYjAyOCwgMHhhZDRlYjExMywgMHhiZjJmOTRmZCwgMHhlN2JjNzA5MiwgMHgxZDU0MTdiMywgMHg0OTlhZmE4MiwKLQkweDk4M2FiY2ExLCAweDJmMzI0ZDY3LCAweGE4NGE1ZjQxLCAweGY4ODlkN2FmLCAweDI1NTc5NGNkLCAweDlhY2JlYTJmLAotCTB4ODZkZTUwZjgsIDB4YjI3NTg4YTIsIDB4Njc1YzdjZDYsIDB4ZWQxMmZkZmIsIDB4ZjYxZWEwNGYsIDB4OThiNGYwMDcsCi0JMHg4ZjBhMjM4MSwgMHgzMzFlNjRlZSwgMHhjNGZhODFjYiwgMHhjMjRmNGRjNCwgMHg5N2VlYzc3YiwgMHg3ZTllYTEzNiwKLQkweDI3M2Y1MzdmLCAweDM5Yzk0M2ZhLCAweDk2M2NlZWRjLCAweDE5NzM5Mzc4LCAweDc3MDllZGMwLCAweGRmNmRiYzkwLAotCTB4YTNjYTk5M2UsIDB4OTc1YjY3OTIsIDB4ZDlkYmQ4YzIsIDB4ODU2Y2FhYWIsIDB4Nzg0ODlmNTgsIDB4Njk3MDdkM2EsCi0JMHhlZmEwMTZkNSwgMHg3YTJlZDkzMywgMHgzOGFjOTdkZiwgMHhkZWRlZDBkYiwgMHg1ZDg3NjI2MSwgMHhlMjk1MmYzOCwKLQkweDVhNzc4YjQ4LCAweDdjZTA3NzhhLCAweGEyNzEwY2I2LCAweDQ3ZTRiOWZkLCAweGEwMzI1MzU1LCAweDkzNDY5MmRkLAotCTB4YTc1NDc2OGEsIDB4ZjljMmM5NTEsIDB4MzY0Yzc2ZjksIDB4MDZkMmZkNjMsIDB4YTE2ZTA2NTEsIDB4ZmZiZmY1ZjIsCi0JMHhlZDAxZGVhNCwgMHhhODM3MWViYiwgMHhjZGZkYTEwNywgMHgzNWJlYjQ1ZiwgMHg0ZDE1ZTAwYywgMHhkMTZlMmEzOSwKLQkweDI4MDdlMDZiLCAweDdkYjljZTMwLCAweGQwMTI4MjgzLCAweDc1NzEwN2U1LCAweGY2ZjE2NjI3LCAweGI4YWZkYjBjLAotCTB4YWIzZDNhZWUsIDB4Y2E0YmRiMTQsIDB4MDE3ZjY4NTYsIDB4N2NmZGEzOWUsIDB4YTBlOTAxZTEsIDB4YjBlNWU3MDEsCi0JMHg0OTYwMWJjNywgMHgxNDY0YmUxNywgMHg2OGQwYjljZiwgMHhlZTdjNjIwOSwgMHhmYjc3Y2Q5YywgMHg5ZjY3MWMzZSwKLQkweDc2N2QyZDA5LCAweDE4NzJlMGMxLCAweDFkOWYwZjAwLCAweDNkMmFiN2JjLCAweGM0NWI5ZjAzLCAweGI0OWJkZWZlLAotCTB4ZDhiMGYwMTgsIDB4YTQzZjRkZDgsIDB4NzEyNzk2NGYsIDB4N2JlY2IzZjgsIDB4M2FjMzBlYWIsIDB4ODgzMjNjMmUsCi0JMHg3MjJiNTdlMiwgMHg4MGQ5NWQzYywgMHhjZjVjYzJhZiwgMHgxMDdlNThlNywgMHhlYmQ2ZjVjNywgMHg0MGVlOTc3ZiwKLQkweDk3ZDdmZTNiLCAweGJlOTEzODk3LCAweGQ2ZjQyNmZlLCAweDM4OTZkNzZiLCAweDU1ZDg0NDk3LCAweDg5OTEzZmNiLAotCTB4YmIzNzVlMGUsIDB4NWY3Y2UyMzYsIDB4NDA2ODFmOGYsIDB4YTBlODFiM2YsIDB4OTdjOWM2MWYsIDB4ZTgwNWJmMGEsCi0JMHgzMWYzZDM3OSwgMHhjZDdmYWJlYywgMHhkYWJmNjg5NiwgMHhkZTNhOTA3ZiwgMHg2ZGViYTNhNSwgMHhkZmM4YTdhNCwKLQkweDkzZjZkODAwLCAweGEwMDJiYmFkLCAweDM2NWJjZmRiLCAweDhlNTAwZmIxLCAweDcxNDdlZTZkLCAweGM4NGNhNWRiLAotCTB4ODJlMjY3ODEsIDB4ZjRiMTU3ZTgsIDB4ZjhjOGZjZDYsIDB4OGExZjM3NGQsIDB4ZDgwYzdmZjYsIDB4ODQ3ZmFmMDksCi0JMHhmZGY3ZThmNiwgMHg3NjFmZjAzMSwgMHg3ZWRkZWI2NiwgMHg0MDFlYzM4NSwgMHhiYjQzZTJlMywgMHg3OGZkYzY1ZCwKLQkweGI4NWZmNjVmLCAweGZlNWJkZTBmLCAweGMwZjQ4OWI4LCAweDM3NTNjN2YyLCAweDQwYjhlMTc3LCAweDhiNTcxODM3LAotCTB4MWM4MmQ3NWUsIDB4ZjQ2MzhmMTMsIDB4ODc4MTk3YzUsIDB4ZmU3NDJhYWIsIDB4YmYyNGMzY2EsIDB4ZmNjYmUyZmIsCi0JMHg3NTU0M2M5ZiwgMHg1ZjM3ZDZjOCwgMHg3Y2I4NTBhZSwgMHhjOWI4ZjI5YSwgMHg2MmI0ZmM4YiwgMHhhMDY2NWRhNCwKLQkweGZlM2QyNjRmLCAweGNmYzQ2MWM2LCAweDI1NzFmNThhLCAweDhhZjg5ODE2LCAweDVmYjQyZGM3LCAweDQwN2I3NjlkLAotCTB4YzM5ZjdhODEsIDB4NTk0MTI3MmUsIDB4ZDZlNWMzOWEsIDB4ZWQxNzFjYmMsIDB4NjRjNGI5NzMsIDB4MGQ5NTA5NmIsCi0JMHg4MmJkNmYxOCwgMHgyZjgwMGRlMSwgMHhjZjc4N2E2ZCwgMHgyM2U3MTg2OCwgMHgxYTM3OWMxNiwgMHhjM2M1NzdmMCwKLQkweDBiY2FmNGU5LCAweDk5MWRjNTEyLCAweDgyNjc5MWVjLCAweGI4Yzk1Y2JjLCAweGY5M2RhODljLCAweGZjMjI3OWJjLAotCTB4YzU2ZWIyYjksIDB4NTcwN2Y0MGMsIDB4M2FlNzRkMDUsIDB4ZjE4ZTBmODUsIDB4ZjlhYzc1ZDgsIDB4ZWExODY5NzMsCi0JMHhhMjczZmQ1NywgMHhmM2Q2MjcwNCwgMHg0OWQ2MWFkZiwgMHgzNWI2YTM3MiwgMHhkYWViZmJmNiwgMHhlNDY3Y2ZmNCwKLQkweDBjMmU1M2Q4LCAweDJlNDMxODYxLCAweDJiYjEwYzAxLCAweDA2N2NhNjc1LCAweDAzNjE1YzRiLCAweDk2ZjU4MmZlLAotCTB4YmNkMDM3ZWYsIDB4ODI5MjZjNTcsIDB4Nzk3Nzk4MTYsIDB4M2UyZjFlM2YsIDB4MzdmZDg3ZWYsIDB4MGEwM2JhZDMsCi0JMHg3Mzc2MmJjMCwgMHgxOTgyYjNiZCwgMHhmM2Y4NTY4MiwgMHgyOWViZmQ5NiwgMHhjODRjNzk3ZSwgMHhlNjA2YzU5OSwKLQkweDIwZmVmYTQ1LCAweDNmNDJjZDRlLCAweDcxZTNmOTdmLCAweDRmMTVkZjg0LCAweDQ3YjdmYWFjLCAweDJkY2ViZGUwLAotCTB4ZmQyMjUzMzMsIDB4MTc0ODI1ZWEsIDB4OWFjY2JmMWMsIDB4ODdjZmQzZGMsIDB4ODU5ZmJlNWIsIDB4NjNmZTVmZjQsCi0JMHgzZDYxOGZmMCwgMHgyZmQ4OTIyYiwgMHhiZjcxYjgxNiwgMHhiNjVjYjIzMiwgMHhiNjJiNzY5ZSwgMHhkYmNmOWZkZSwKLQkweDdlMGQ3ZjgxLCAweDI0MDdlMmY0LCAweGQxN2IwNzVhLCAweDc4MTA3YTQyLCAweGRiYzQ4OTVkLCAweDY2OTM4NmQyLAotCTB4NWJmZjExNzMsIDB4ZGFmYjBhNzEsIDB4MzliYzcyODUsIDB4ZTdmYmMxMmMsIDB4MTFiMjVlYTAsIDB4MTE5ZDAyZmUsCi0JMHhiMDNiZjI3MSwgMHgyMzkyMGNhZiwgMHg4ZDVmNWMzZSwgMHg2Y2M3NzBkMSwgMHg4Y2NiYTdlYSwgMHg4NzMzYmQ3YywKLQkweDQ0MWI0M2M3LCAweGJkNGIzOGI5LCAweDBmY2ZlMjlkLCAweDZlYWRkNDVhLCAweDRhMzQ4ZmRlLCAweGJiZmMwM2NjLAotCTB4Mzk3ODYzNWEsIDB4MmZkOTgxYzYsIDB4NTk1NzE0MmQsIDB4ODllNzEwZDcsIDB4ZTIzZjkwNzMsIDB4NWRmYTBlNzksCi0JMHg5Y2Q5MzMyNywgMHhmYTcyZmQ4YywgMHg3MmUyZTM1YiwgMHgyYmJmOWUwMywgMHgzYjVhZjNjMywgMHg0OWI1OGI5NywKLQkweDk3YWU2ZjgwLCAweGZmZTg0NjNkLCAweDg3MmJmYzMzLCAweGFjMzE5N2Y3LCAweGYxZWVmZGU3LCAweDg1ZjUzZDBkLAotCTB4ZmQ1ZjEwYzMsIDB4M2NlMzU1ZTYsIDB4ZGYxMTJlN2UsIDB4MmMxZTMyMDIsIDB4ZTdlZWZiNDMsIDB4YWJmNDA4ZDIsCi0JMHg2YzcwM2YxNywgMHhiYmQ5Y2EwYSwgMHhmMDU2MmQ5ZSwgMHhmOGJmYzVkNSwgMHhiYjg5ZTkxZCwgMHhhMjc3M2VjNCwKLQkweDAzN2E4ZjlkLCAweDdjYTE2N2UwLCAweDQ1Y2I4NzMyLCAweDQyZTNjNDlmLCAweDY4N2MwYTRmLCAweGQ3ZDVhZGZiLAotCTB4ZjFlMjYwM2UsIDB4MjhlNzkwNzksIDB4ZmNiNzZhNDAsIDB4YjVhZGZhOWUsIDB4NjcyODlkODcsIDB4OGQzNDVmNmIsCi0JMHg5NGZjNzk0MiwgMHgyZDkyZmY5OCwgMHgwYmJmYzcwMywgMHg5NGM0YjNmNCwgMHg1YTVlYTBhOCwgMHg0NjY5OTgxMywKLQkweDgxOGI0ZDc4LCAweDUyZjc5ZWUwLCAweDNmMWU5MGIzLCAweDgxYzk3ODZlLCAweDVjNDFmMjc0LCAweDRmZjUwZjI4LAotCTB4ZjUzOGZhZDcsIDB4ZTE0MDJlMjAsIDB4MWI4ZmI5NzEsIDB4ZmM2MjBlZjIsIDB4YjYxMmE5NjYsIDB4ZTk3ZWEwMWIsCi0JMHg5NDY0OWNjNiwgMHgyMTJiZWZkMywgMHhkZmJmZDYzMywgMHhlYzIyMzZlYSwgMHgwOGYxOTQ1MSwgMHgwNGUxZTQ3YiwKLQkweGFiMjIwYzdmLCAweGNhMGZkMDU1LCAweGJlMDZiNTk5LCAweDM5OWU2YjlmLCAweGYxODZjZTY2LCAweGZkYzM5MzdlLAotCTB4ZmU3ZTRmOWIsIDB4ZjM4YzdjYmIsIDB4ZjM4NTY2ZDQsIDB4N2VjMDdmNTEsIDB4M2M0MDBmZTcsIDB4ZmQyMDZkM2YsCi0JMHhjOTE5ZjZiYiwgMHg2N2FjMzcxMywgMHg3ZWUyZDdiZiwgMHgxNmFkN2YwMywgMHg4NWY2YmNmYiwgMHhiYTQ1ZWU5NywKLQkweDVkZmI4YjVmLCAweDgwNWU5YmQyLCAweGYzZDM4ZjZlLCAweDYxNGMwZWU3LCAweDQ4ZTNmZGZjLCAweDAyYmU5YTE3LAotCTB4OGM5NGMxYjgsIDB4OWYwZTNhNzEsIDB4MDJmY2UxY2UsIDB4ZjNmODJiY2YsIDB4NGJjOTExNDAsIDB4Njc2ODIzOTAsCi0JMHg1ZjdiZDM0NiwgMHhkOGIxZmJmYiwgMHgyYzViMjViZiwgMHgxNjNmNTcyNCwgMHhjMGY5ZGJmYiwgMHhiZmRjMGU4YiwKLQkweGVjN2U3ZTRmLCAweGQ0YTM5ZTA0LCAweGQ4ZGEwNzNlLCAweDA1ZWU4MzE1LCAweGZhZTFkNjNlLCAweGIyN2YzNDFkLAotCTB4N2FlMWQ2MjMsIDB4ZWZlYjNkMWQsIDB4NmZjMTczYTYsIDB4OWY1ZjE4ZWIsIDB4YjI3NWRlYjYsIDB4MmY1NmJmNTgsCi0JMHhkNjJjYmZkZSwgMHg3YzA5ODZiOSwgMHhmMzg4MzBiZCwgMHhlNDI3ZTA5NywgMHhiNGM3YjQ1NywgMHhmOTkyZjlmNSwKLQkweDI2N2QxYWZiLCAweGZmYjk3MmU3LCAweDk5ZmYyMTM3LCAweGZjNDBlYWQyLCAweDljYTJmZWUwLCAweDk4ZjFmYTAxLAotCTB4MDFiOTA5NDcsIDB4MTY3OTNlNGQsIDB4NWZiMTFmZTYsIDB4NzNiM2ZjZGEsIDB4YWU0MDNjZjksIDB4N2I5MjkyNzksCi0JMHhjOGQzYjFmNiwgMHhiNzNhYzY1NiwgMHg3OGU1Yzg0YywgMHg5Njk4ZGIzYywgMHhmYmY4MDZkNSwgMHg4OTJiZmMxOCwKLQkweDIzOTU3YTcxLCAweDQ2ZThkM2M2LCAweDY3ZmNhZjFiLCAweGRkNzBkMzU1LCAweGZiMDg3ZmQwLCAweDNmN2RjNmQ3LAotCTB4M2Y2MzIwOTAsIDB4MWZjZTMzZWYsIDB4YmUzNWZjZGEsIDB4MzQ1ZmFmMmMsIDB4ZWQ4MWQ4YWQsIDB4MTRlN2IxM2UsCi0JMHhkZDM5YmFlMSwgMHg1NDJhZTc2NiwgMHg4MDJlZDA3YSwgMHgwNjZkM2RmNywgMHgxNTlmNGY4YSwgMHhjNmQ5ZmNmZSwKLQkweDhhNGIxYzk3LCAweDI1ZGRlODdhLCAweGQ5M2Y4ZGU2LCAweDFhOWU3YmQ5LCAweDMzZDA0NWZkLCAweGZiN2NiM2NkLAotCTB4NmIwODY5ZmMsIDB4NGJhNjhkZjMsIDB4N2QxYTZmMGQsIDB4NjRhOWNkYjIsIDB4ZTlkMzQ0YWYsIDB4NjZiM2NjYmEsCi0JMHhiOWZhMmYxYywgMHg4MDdjYjc2NiwgMHhmZmU0MTVmMSwgMHhmMmUzYzY1NCwgMHg2ZTc4ZWMwZCwgMHg5Zjg2M2U4NCwKLQkweGQxZWE4ZDhkLCAweGQ3OWM5YTBmLCAweDE0YmFmM2Y0LCAweDJmYzIyNWNmLCAweDQzNzAzYTBiLCAweDUzNjZlNzM2LAotCTB4YzcyOTc3YmYsIDB4ZmRlMDM5YjcsIDB4NzRjM2U3MzEsIDB4ODdkOWFiZmUsIDB4OTIxMTdmMzcsIDB4ZjQ4ZTMxMTIsCi0JMHg1MjI0YmI4MiwgMHg3Y2I5YWRjZiwgMHg5NmI2ZTg5YywgMHhiZmExYjc4NSwgMHhkZjgxZjhiMywgMHhmNDhkMWNjZCwKLQkweGNlODk5NGY5LCAweDRlMzcxNjViLCAweGJkZGRhMzM2LCAweGEzOWRmMGVhLCAweDM1Y2ZkZjcwLCAweGE5NzYzZDcxLAotCTB4Njg5M2U0NjEsIDB4N2E2YjlmMzcsIDB4MTE2Nzc5ZDgsIDB4NjUzZTU3YmUsIDB4YmM1ZjNjMmMsIDB4ZjVmNjk4YWIsCi0JMHg0Y2YwYjg4MywgMHg5MWVlYmI4NCwgMHg2Zjc4NDFkOCwgMHg5YjkxZTFkYywgMHhjZTNjMDIxNywgMHhhZTEyNTM3ZSwKLQkweDUyNDNmZGVmLCAweDNhMDhkOGM1LCAweGNkOTRjYTU4LCAweDkzNGVkMTBiLCAweDhiZTQxNTEzLCAweGFiM2M4NWY3LAotCTB4NWE3ZGYxMzcsIDB4NTE3ZmU4MmUsIDB4NDVmM2U3MmUsIDB4ZWJjYjdmNjIsIDB4N2NmMWYzZWIsIDB4YzgwMGViYmMsCi0JMHg4ZDYzYzA1MSwgMHhjMjFhZDVkOSwgMHgyMzRkNWY3MSwgMHhkODFkN2ZiYiwgMHg3NGM5ZTkwOCwgMHhkMjc2NGQ0ZSwKLQkweDY2YjMzMzRhLCAweDZiNzNkMDk0LCAweDY5M2YzYzA2LCAweGViODNkZjBhLCAweGJkOGY3OTM5LCAweDU4ZTIwYjc4LAotCTB4MDk2YTNlYmEsIDB4NWY4OTZmYjcsIDB4ZjFhNWFlYzAsIDB4MzE2OGVkYmIsIDB4MmU4MjY1OGYsIDB4ZGVkM2ZiYTMsCi0JMHgxZWJiNDBlZiwgMHhmZjk4OWVlNSwgMHhlNmE3ODZhNSwgMHg3NGJhYmVhMSwgMHhkNzE5MmYyNCwgMHg3MWFiZTFmZiwKLQkweDdjZGY2ODRkLCAweDRjNzJlMjY4LCAweGFlZWMxZmViLCAweDExZjY5MWYzLCAweDE4M2E1YmQ4LCAweDBjMWQyYWVjLAotCTB4NmY1ZTc1ZjQsIDB4YmMyNTZkOGYsIDB4YjdhYjliZGMsIDB4YWQzYTM0YWIsIDB4MTg5NzlmNTksIDB4Y2JkMDE3OTksCi0JMHgwYTQzZmVmZSwgMHg5Y2Y3ZmY5ZCwgMHg2NDRlOGNiZiwgMHg3NzQyZTQzMSwgMHg4ODBmZDVkYywgMHgzYzZjNjdjYSwKLQkweGNmMThmYWRhLCAweGY5ZjJmODRkLCAweDJkZGZkYTMwLCAweGViMDJjNTE2LCAweDhlNzQ4ZjNjLCAweDRhMmY0YmU3LAotCTB4NzJiN2VlZGMsIDB4ZTJmZjNmYmEsIDB4NzdmYTIwODgsIDB4ZTFjMGZmY2IsIDB4MjA4NmFkZTUsIDB4ZGYxZWRkMWUsCi0JMHhmNmMyNWRiNSwgMHg0YmVlYzBjYiwgMHhiM2Q4NDQzMywgMHgwM2NkNzdiYiwgMHg1NDU3NjdmMiwgMHg2ODBjYjZkZiwKLQkweGNmMDhlNTdmLCAweDViNmE4MDc3LCAweDIyN2IxZDk0LCAweDFkYjdkNWMzLCAweDVmYjZjZmZiLCAweDYxYzBiOGI1LAotCTB4NTMyYWRmMGQsIDB4OWUxYWRmMTEsIDB4NzVlNjdmMzUsIDB4OTJiMjg3YTAsIDB4ZWE3ZGJjMWUsIDB4ZWJmNjQ5NWYsCi0JMHhjYThmYmY2NSwgMHgxZjY3MGNjZiwgMHg2Yzc0ODcxYywgMHg1ZjkxNTQ0ZiwgMHhiMGY2ZGQ3ZSwgMHhmYmY3MDAzNCwKLQkweGU4ZWJlMjg1LCAweDI1YjU4ZTk3LCAweDlmYjdjODJhLCAweGI5ZDEzN2ZhLCAweDFkN2Y2NWU2LCAweDZiN2VkYTk1LAotCTB4NWY5YmIxNzEsIDB4M2VmN2E3NjgsIDB4Y2FmMTFiNmQsIDB4MzVlZjc4MzgsIDB4ZDc5MGEyNWIsIDB4MzVmNzMxYzksCi0JMHhlZWUzYmYzYSwgMHhmMGQzYTNmNSwgMHg4ZmFlYjZiOSwgMHhhYmZiZTNlZSwgMHgyM2EzZmJjZCwgMHg1ZDcwM2E3NywKLQkweDdiZjU4ZmVkLCAweDZiZWUwYzY1LCAweGY2ODJhMjQyLCAweGRmOTEwYWQ5LCAweDk3MWY2MTcxLCAweDg5YWQxNzBmLAotCTB4ZmQ4MGNlNGYsIDB4OGU3ZmI4YmQsIDB4NWM5YzgxOTMsIDB4MWU3NzNlZDYsIDB4YWFmZTVmM2UsIDB4NWNmYjQxNDEsCi0JMHg4MWNhYjU3ZCwgMHhjYjNmOGRmMSwgMHg0YjA1MGU5ZCwgMHhmMzg0MmY3OCwgMHhjYTEyODM5MSwgMHg2Yzk1YjFhMywKLQkweDFiMWZiNjBlLCAweGZhMGI5OTkyLCAweGQzODMzMzE5LCAweDcyY2I5OGM5LCAweDNlNzgwZjEwLCAweGI3MTRlNzg2LAotCTB4NzE0ZjFlYjgsIDB4YzNmNWY4MGIsIDB4YmY2NThkZmMsIDB4MGQwZWYxZTIsIDB4MzVkZjlhZWYsIDB4MDRkYmFjNGUsCi0JMHgyZTc0NDdlYywgMHhmMTk3OTc5ZSwgMHg3ZmVlMWZlNywgMHg3N2Y2MTY3ZSwgMHhjMTQ5OTBlOSwgMHhjODdhN2Y3OSwKLQkweDA2YWZmZDQ0LCAweGUzMDhjOTdmLCAweGZkYzIzYzVkLCAweGRjZTM4NDEwLCAweGRmZGNjN2M4LCAweGZkY2FkZDU4LAotCTB4MjZmNWRhOGQsIDB4MzdiMTM5OGYsIDB4YjQ0Nzk2M2QsIDB4OWUwZWJmNDMsIDB4NTVkYzcwYjksIDB4M2EzNGRlODIsCi0JMHhlYmUxZWQ1ZCwgMHgwZDdhMGQ1YiwgMHhiNzRkMWJkNywgMHgxYjc1YWM0OSwgMHhlOGViZTllMiwgMHhlZGQyOWJmNywKLQkweDEzNWU5MGRmLCAweGU4N2NiNzU4LCAweGU4YmVkN2E2LCAweGY5MTNlMDQ0LCAweGEzNTVlOTFkLCAweGY4ZmJkNTg3LAotCTB4NmI3MjdhMzksIDB4M2JhNDQ0ZjEsIDB4NzkzNDNlOGQsIDB4MGFjNDk4MTIsIDB4OWJkNjZmNTAsIDB4ZGRlNjAxNTksCi0JMHgyYWYxOGMwNCwgMHg5YjJhODFjYSwgMHg3ZjcyODRjYiwgMHgwNTY3NGE0ZSwgMHgxZTQ5NjVhMiwgMHhiOTUyYTc5NywKLQkweGZkNDQ2M2QxLCAweDc5MjE2ZjUzLCAweDUyNmYyZDExLCAweGRmZmNiOGYyLCAweGVkMDc0NDgzLCAweDJhMTRmMjhiLAotCTB4ZmM4ZWFjNGQsIDB4ODU4NGFkMDcsIDB4NWNmZDQ0MGMsIDB4OWZmYzkwOTUsIDB4NTM3MjY4MmUsIDB4NjViMzgzZGUsCi0JMHhiOGQ1N2Y5OCwgMHg1NDcyN2JlNCwgMHhlZGU1MDZjNiwgMHhlNDg4ZjBlNiwgMHg5N2E4MjY5MSwgMHg1ZDlhMWZlYiwKLQkweDllNDU3MDAxLCAweDQ0NWU2MDY3LCAweGE3MGU5N2JmLCAweGMwZjVjNDBkLCAweDhjMWU1NzczLCAweDk3YzUzZGJiLAotCTB4YjMzYWU1ODMsIDB4NjdmN2U0OGQsIDB4OWI2MWFlODYsIDB4Y2ZlZDNkZGMsIDB4ZmY3ZjZhYmMsIDB4YjgxZWFlZDcsCi0JMHhkNGIyYzRkMywgMHhjZDE5ODQyMiwgMHhjYWVmMmI1YiwgMHhlM2U2MGNmMywgMHg2MTJmOWZlOCwgMHhlMmYyOTFhYywKLQkweDVkZmJmZjAyLCAweGU3ZTA0M2I0LCAweGRlZmVjMmI1LCAweDg5NjllODJhLCAweGZkYzIxNmQ1LCAweGNiYTY0ZDY0LAotCTB4YTgwNTc2ZGQsIDB4Y2EyNmE2N2UsIDB4MDRiMzA3NDgsIDB4ODcyYWRjMWQsIDB4NDJmZGYxZGEsIDB4YjA1Y2EwZDYsCi0JMHhmZmIzZTk5MiwgMHgzYTM3N2VhYiwgMHgwNWQ5OTVhNywgMHg4N2EwM2ZhZCwgMHgzZWIwNGNjZiwgMHg5MDAzNjdhMCwKLQkweDE5NjAyNmQ3LCAweDA2YjEyMDAzLCAweDk1ZTE5N2U0LCAweGQ4NWZmZGZmLCAweDc1ODA3ZDZmLCAweDZiOWUxMWM2LAotCTB4MDY3Yjk0MTQsIDB4MDU3ZTMzZTYsIDB4NjM4MjZkNjUsIDB4M2MzM2M2MTgsIDB4MzY0M2Q5MmYsIDB4M2YwZGM3ZDgsCi0JMHg1ZmJhMjA0ZiwgMHg1MjE3ZWMyNSwgMHhhNjVmOThjNiwgMHg3NGIwZjVmMCwgMHg4ZjdmZGU3ZSwgMHhmZDBmYjdhMCwKLQkweDU4MTczNzJjLCAweGY0NzYxM2ZiLCAweGIxZTYxOTUzLCAweDFiMzdjZTJhLCAweDc4YzZiZGYxLCAweDBiODM2YjJhLAotCTB4ODFkZWI0ZjksIDB4YmYyN2M1NzYsIDB4MDkxNDU0OTAsIDB4YzhkZDg0NmIsIDB4N2UwYWE1MGUsIDB4YTAxMzQyOTcsCi0JMHg3ODVkYzNiZSwgMHg4ZDRiZjUxMCwgMHg2ZWNiOTdhMCwgMHg2MDZmN2U0NiwgMHhmYWYyODU4YiwgMHg1OTYzZjVkOCwKLQkweDk5NWMwM2Y3LCAweGZlOGE4YjdkLCAweGI3NjdlNWU0LCAweDdkODMyZWU3LCAweDBlZDhjMGIyLCAweGU4NTRlNzU4LAotCTB4NmFhNjBjYjMsIDB4NzNhMjU4MDIsIDB4MDNmNTIwZGUsIDB4M2MwNzAxZjUsIDB4Mzg3ZWU2ZGYsIDB4ZjMxOWQzOGIsCi0JMHhmZGI0N2FlMiwgMHg2YmRlZjBkMSwgMHhiNDY4NjAzZiwgMHg2NjU2OGQyZiwgMHg5MGIxZmY0MiwgMHhmZjkwNTdlZCwKLQkweDhjOTk3ZGI0LCAweGZmZjAzZGNlLCAweDljNzkxNzg2LCAweDc1ODE4MzYzLCAweGY5YWYxOGMzLCAweDhkNzgwYWQwLAotCTB4NGY2YTVmMjEsIDB4MjY3NjQxYmUsIDB4Mjc0MDViYjAsIDB4MTlkZmY2NTcsIDB4MWQ5NWZmNWIsIDB4ZmZkNzYzMzAsCi0JMHg5OGQ4M2Q2YywgMHgzMTVmZjQyNywgMHgwMzdiMjYyYiwgMHhhZGZkMDY5NywgMHg0YjI2NmQxMCwgMHhkNzE5MmUzNSwKLQkweDkxNTU2YTkzLCAweDllM2MzNjFlLCAweDFkODY3YTQzLCAweGEwZjQ0ZGQ5LCAweGZiZmI2M2I1LCAweDczNmM5ZDExLAotCTB4NTVmZjg0NGIsIDB4Y2M0Y2IwNmQsIDB4NGZlYjY5ZDMsIDB4ZGEzMzhiNzksIDB4NWM3NGE5OTIsIDB4OTdlN2E3NGIsCi0JMHg5NGFiN2M5ZSwgMHgzZmJlMWJjYiwgMHgzNjlhN2YzMywgMHg3ZTgzZjI4OSwgMHg2ZDRhODgzYSwgMHhiZDA0MWIxZSwKLQkweGUyYmU3ODY5LCAweGM5M2U3ODE1LCAweGJiMDZkNWY1LCAweDM5N2RmYzk5LCAweDc5NDg5ODUwLCAweDBiMTIxZDhjLAotCTB4ZTRmNzNjMDIsIDB4NTdlMjEzMWMsIDB4NmQ3NGU3OGEsIDB4NTczMjM3NDksIDB4YzQ1OWJjMGMsIDB4ZTJiOWM0N2UsCi0JMHhkZWQyMmI5OSwgMHg2OGMyNzgwZiwgMHhmNTE3Y2ZkNywgMHg1MWM5MDUwOSwgMHhlNmRmN2NmNSwgMHhiN2NmZTU4OSwKLQkweGYzODE5Y2FkLCAweDc1ZmRhYmI2LCAweDRjNzc2Y2UzLCAweDkyYmEyMGU5LCAweDVmMzhjYjJlLCAweGViMDMwNGNiLAotCTB4MzUyYmU3ODcsIDB4M2I5ODdkZmEsIDB4YzY5YjBmNTcsIDB4ZDVmMjRlN2YsIDB4YmY3YTNlMzQsIDB4NGRmZDA5OTksCi0JMHhmY2ZmNDc4YiwgMHgxN2ExM2NiNSwgMHhlNDYxNTkwYSwgMHg5ZmMyZjYzZSwgMHgwZDdjNGFjZCwgMHg3OGVmNzlkYSwKLQkweDk4NzVlNzgwLCAweGVkYzVkMDU4LCAweGFmYzdiNDM1LCAweGI3NDQyYzc4LCAweGRlMDRlM2RiLCAweDIxZTlhNTBjLAotCTB4YTY1ODlmNjgsIDB4NDc5MjVmYzcsIDB4OTU3ZWFmOGYsIDB4N2FhNGZjN2EsIDB4YWI0ODc4ZjUsIDB4NjdkNWQ2Y2UsCi0JMHhlYWViMDZmOCwgMHhkMTJjYWMwNywgMHhjNmViMDNjMSwgMHhiNGRmZGFlYSwgMHg3NjBlOTI2OSwgMHhkYWU5YTYwNywKLQkweGQ2Y2QzNGU3LCAweDBiMmQ3OWMxLCAweGVkMDdlZDc1LCAweDJmYWJhMjViLCAweGQ1ZDZhZTBjLCAweDQxYjIzOTBmLAotCTB4ZmQ2ZDBmMDcsIDB4ZTFmYjVkMTcsIDB4ZjU3NTViNmQsIDB4YmExZGExYzUsIDB4MGYxZDExZmEsIDB4ZTE5MWUwZTksCi0JMHg0N2VkNzU0NywgMHg1NzUwN2JiZiwgMHg2OWYzYTYzZiwgMHg4YmI4ZmQ1ZCwgMHg5YmUwZTljZiwgMHhiNWQ2NWViYiwKLQkweGE4ZWQ3MDlmLCAweGRlYzg5ZTBlLCAweGI3MmZiNWQyLCAweDRmMDc0ZWZlLCAweGQ3NDNmZTU2LCAweDBmZjQ5NmZlLAotCTB4NWQ1M2Y1NzQsIDB4YTdlYWViMWYsIDB4YzFkNTVjMTcsIDB4MDk3ZDk4NzcsIDB4ZWE5N2M4ZjksIDB4Y2RlZjc0ZGYsCi0JMHg4ZTFmYWU2MiwgMHg5ZjllM2EwNywgMHgwMDQzNTQ2MiwgMHhmYzg1ZjNkYiwgMHg4Yzk3NzQxMCwgMHhkYWVkMTNmYSwKLQkweDc0ODU5NjVjLCAweDFmMWE1OTNhLCAweDMzNmJiYTIyLCAweDQ0NTdlOGE4LCAweDYzZjkyN2ViLCAweDY1ZTMwN2FmLAotCTB4OGE4MzI1ZWMsIDB4YjA0NGFjNzEsIDB4ZjE4OGU0ZWIsIDB4NzA1NjNjOTIsIDB4N2VlMDdiMDAsIDB4NGUwZThhOTUsCi0JMHhkYWViYTZmNSwgMHg3NGJiNTVhNywgMHgwMmJlMTlmNSwgMHg5NTgwZmQ1ZCwgMHg1ODFlMGVhYSwgMHg3ZjZiYTY1NywKLQkweDBlOGYyNmQzLCAweDc1MmEwNzc2LCAweGJjOWE3M2VkLCAweGE1YWYzODNhLCAweGQwN2VkNzVhLCAweGJlYWU5ZjNlLAotCTB4NTc1MmI4MzAsIDB4OWQ0OGU0M2YsIDB4YmFkYTFlMGUsIDB4Nzg3ZWQ3NDksIDB4NWY1NzQwNWIsIDB4ZDVkMjZhMWMsCi0JMHhkMTY4ZTg4ZiwgMHhmYmMzMjNjMSwgMHhiZjQ3ZWQ3NCwgMHg4ZmQ1ZDQxYiwgMHhhYmEyM2NlOSwgMHg1NWIxNzcxZiwKLQkweGQ1ZGNkZjA3LCAweGUxM2Y2YmE2LCAweDRmMDc0ODVhLCAweGVkNzUyNzY0LCAweDc0NjdhZGNiLCAweDNkZTU2NGYwLAotCTB4ZDI1YmZiNWQsIDB4YTdlYWVhY2YsIDB4ZWFlOTJlYmEsIDB4N2E2NDdiMzUsIDB4ZTdmYWU3YzEsIDB4YTk5OTNlYzIsCi0JMHhmZGVlOTdmZSwgMHg0MzBmMjRjMCwgMHg2NzNjMDhmYSwgMHhhMDVkZWI1MCwgMHhiOWIzZjJmZiwgMHgyZDEzMDczZSwKLQkweGM2N2I0MjRlLCAweGM5NDVmOTRiLCAweDcyMDdhMDk4LCAweDIwNjAzMTJiLCAweDViOTU0MmJhLCAweDE0OWVmMTQzLAotCTB4NTJhNDUzZDIsIDB4MDM0Nzk4NWMsIDB4ZGU4MWRlN2EsIDB4ZjY4ZGRiOTMsIDB4OWQ4ZjQyNmQsIDB4ODhkNWY5OTUsCi0JMHg3ZDY3NmU2ZiwgMHgzMDM4N2QxZiwgMHg5NDRkYjY1ZCwgMHgwZGU1NjNhYSwgMHhjNzlmM2Y3ZSwgMHhmYmU1MGUzOSwKLQkweGEyYTdlNDM2LCAweDE0ZWNmMTFmLCAweGIxNTdiM2I0LCAweGU3OWMzNmMwLCAweGIxMjhhOTY0LCAweDcxYThlMzEzLAotCTB4NTY4NTM4ZmEsIDB4NjQ1ZWI1NGUsIDB4NzdkZDg0NzIsIDB4YjMyNWFlMzIsIDB4ZmNmZTA2ZTQsIDB4MjY2NWViNTQsCi0JMHg1N2U4ODg4ZiwgMHhiMDBjMmZjNCwgMHhmZDExMGRmZSwgMHg4MDdlMDgzZiwgMHg4YjdmM2UwYywgMHg2YzBhZjgxZiwKLQkweDBhZmM4N2E0LCAweGU5ZmRiYmMxLCAweGJiZjFlZjA0LCAweDJmZTdkY2E4LCAweGJmNTFmMmEwLCAweGZkZmJmNTRhLAotCTB4ZTEzZjA0NjUsIDB4ZjQxYzEwZjcsIDB4ZDA3OTUyNTcsIDB4ODdlN2E1ZWYsIDB4M2YwNGQ1ZmMsIDB4OTYzMTdlMDksCi0JMHhjNjRmYzA0NywgMHg3N2YwNjlmMiwgMHhmMDE5ZmViMSwgMHg4NWZlMTE3ZiwgMHhhYjY1NDAzZiwgMHgzZjllODliZiwKLQkweGY4MjE2ZmU3LCAweDgyM2VmZjA1LCAweDUyMGZlOTdmLCAweDQyM2ZlNmQ5LCAweDU2ZmVjYmU1LCAweGRmYzU3ZmFhLAotCTB4ZmU2YmYwNDYsIDB4N2YyMWMxMTAsIDB4ZmQ0N2MxMDcsIDB4ZmI4ZjgyNjEsIDB4ODRmODI1ZGYsIDB4MGVjYTkzYmYsCi0JMHhkZjJhNDVmZiwgMHhmZDUxNzdmNCwgMHg4MjM1ZmYyOSwgMHg2ZjUzZjY3YiwgMHhmM2UzNDZmZiwgMHg2NTU3MTEyMywKLQkweDIxNWM0ZWMyLCAweDcwYTU4N2U4LCAweDI3Mzk3MGZiLCAweGQwNDJiNjA1LCAweGE4MTI2OWFkLCAweGZhM2ZiNDU3LAotCTB4M2NjNDFmZTcsIDB4NTc0ODkxZDYsIDB4YTc1NzQ0MDUsIDB4MWVmZDhkYmUsIDB4MjU2OTdmZWQsIDB4OWJmNzE5ZDAsCi0JMHgzYzc4MWJkNywgMHgyMmVmZDM0NiwgMHhlZmQzNDA1ZiwgMHg3ZjcwZjczNSwgMHhiYmQ4MTE3NSwgMHg0M2ZmZmYxOCwKLQkweGFmM2ZiNzFjLCAweGQwMGE5OWQ0LCAweGM0MzFhYjhlLCAweDVkMmY2OGFiLCAweGQ5MzNmYmE5LCAweGFmY2YwYzQ3LAotCTB4NzhlZTQ1ODEsIDB4NDc2MDcyYzUsIDB4MDM1NmRmODQsIDB4ZmRlMTFiZWYsIDB4MThiNDU5OTksIDB4NGMzYWMzNTYsCi0JMHgzMzJhMmU3NCwgMHgzNTdjMDQ4ZiwgMHgzN2VmYTA3NiwgMHgwZjU2MWZhOCwgMHg3ZmM4MDYzNCwgMHhkMWYzMDViNiwKLQkweGEwN2RiYjZmLCAweDdlZjQ4YzJmLCAweDA5ZDk2ZWE1LCAweGQyYTI4ZmMyLCAweDRiNGNlMGI5LCAweGM2M2U3NTI4LAotCTB4MTQ0YTRlNDksIDB4MWYwYmViZGYsIDB4Nzg1ZTQ0ZWIsIDB4NWRhZmY1OWYsIDB4YmMzYjQ0Y2EsIDB4MGY5MmVmZjIsCi0JMHhjOWI0ZTdmNywgMHg4MzcxOGQ1ZSwgMHgxZmI5ZjIwZiwgMHg1MWJlNDFmYSwgMHhlODFlNWU1NywgMHhmY2YzODczYiwKLQkweDc2ZWViZDhiLCAweDJmZjBhMDIzLCAweGU0ZmY1OWRmLCAweGJmMWVlZWRkLCAweDNkNzQ1NmY5LCAweDYyYWU1ZWMxLAotCTB4MjllNTEzMmUsIDB4NmUxYmNmMzIsIDB4ZTYzNmVhZTgsIDB4MGIzZTc4MjMsIDB4YTY3Yjc5NTAsIDB4ZDc1YzYzZWYsCi0JMHhkODI0MTYwMiwgMHgxNTkyZDYzNywgMHhmM2QxNWQ2YiwgMHgwMzkwOGJmYSwgMHhlYTM3Yzk3ZiwgMHhiZTU5ZmVjYSwKLQkweGYyZjNlNGZmLCAweDhmNGViY2QwLCAweGQ3MWYyNWI5LCAweDYxNmJjZGE1LCAweDNmZTY4Yjk2LCAweDgxM2Q3NThiLAotCTB4YWJjYmZiZjMsIDB4ZTQzMDVmOWYsIDB4ZmY4ZmE2ZjQsIDB4NjFiMGJhMDEsIDB4MzFkYTA1OTgsIDB4YzdhOGRmM2MsCi0JMHhhZmE4MWNjNCwgMHhmOTQwY2ZiZiwgMHhkNDVkMWFkOSwgMHhkZjEwNDA2MCwgMHhiY2EwNmNkYiwgMHgwMTNhMWVmZCwKLQkweDJiYmY0MGZhLCAweGYxZWU4YmE1LCAweDBmMjQ5ZDAxLCAweDIzMTkzYTQyLCAweDRmNjBjYzA1LCAweGYzMDYzNjllLAotCTB4YmM1ZTc0MGQsIDB4ODQ3MThjY2MsIDB4MWY0MDI5MTUsIDB4YzFkMzdkZDksIDB4NDA5ZjcxNWEsIDB4OTVmNDBlN2IsCi0JMHhmYTdkZmQ4OSwgMHg4ODA1ZDFhYiwgMHg4ZGFmNzVhZiwgMHhlYWJlMjE3MSwgMHhlODBmYjA4ZCwgMHhhOTI5YmUyNywKLQkweDhiODUxZjNjLCAweDUwZGM2OTdlLCAweDU5MzI1NzhhLCAweDM0Y2UzMTU1LCAweGRlNWIxMmQzLCAweGU5YzQxZjhlLAotCTB4YTliYTc0ZTcsIDB4ZTlmZDQ4MzIsIDB4MDc0YTU1Y2YsIDB4MWQyYjdkZjEsIDB4YzM3M2Y3YzQsIDB4NDhkNzBmZmEsCi0JMHg0N2QzZWYzMCwgMHg5NDdkZDEyZiwgMHhmNGRmZjM1ZSwgMHhjNDZlNjE2NiwgMHg5ZGI1ZDdiYywgMHgyMTg5ZTI5ZCwKLQkweGZlOGJlN2JmLCAweGNjOTFiYTM0LCAweDViMDFkZjc2LCAweGU5YmFiY2U0LCAweGZiYWUxYzc4LCAweGM3NDA0OTJmLAotCTB4MTdjNzQ0MzksIDB4OTY3MGZjZjAsIDB4MWYzODk1YzUsIDB4MDk0MDRlY2EsIDB4MWZiZWU5ZGEsIDB4MmRmZmU0MmIsCi0JMHg0Yjk1MmE2MSwgMHgxNWNhOTc5OSwgMHhiNzQ4ZWRiMCwgMHgzMzJlYzBkZSwgMHg2YjM1N2JlMiwgMHhjYjZiZTdhNSwKLQkweDFkMjI3NGVlLCAweGM4ZmEzNzJmLCAweDk5ODM1ZTJmLCAweGNiOWU3OGI3LCAweDAxZDIyYWJhLCAweDZkMzViNzZmLAotCTB4ZDAxZDIzNzksIDB4ZDc2NWE3MzcsIDB4Y2VjZjhjNjQsIDB4MDM3ZTJlMGUsIDB4ODY0M2FhY2IsIDB4MGE4Nzk4MGIsCi0JMHhlNzBiMzE3YywgMHg2YmE4NjlkNSwgMHgyZmUzMGZlYywgMHhlMzYyNjY3YywgMHg0YjNlNzgwMCwgMHhkZWMxZmJlMiwKLQkweGM5YTFmYmUyLCAweDAzNzVlODhkLCAweDk0MWJjYzFmLCAweGQwZjJlYjhhLCAweGE1NDcyNGJhLCAweGI2NmEwZjhlLAotCTB4YTUyMThmMzIsIDB4OWJiZTFmMjcsIDB4ZmFlZWNhMmYsIDB4NWY5NDAwZDMsIDB4MDdjNTE3NzIsIDB4NDk2NmJkZDYsCi0JMHhjZDVlN2RjNiwgMHhmMDYwM2RiOCwgMHhjZDBmZjE2OCwgMHhlNzQ0NjAwZSwgMHgxNTc4YjE3NywgMHhlODI0N2RkYiwKLQkweDhjODFhM2ZhLCAweDAzMjNmYWU4LCAweDNkMjU4NDM4LCAweGYyY2IyOWY2LCAweGY0ZTQ5N2E1LCAweGM2NzVlYmU4LAotCTB4OWUyMTg2NjcsIDB4ZTJkNzlmNDAsIDB4ZDA3ZjU3N2MsIDB4OGRkOGFkYmEsIDB4ODU5ODNmNzIsIDB4NjllOTg5ZjYsCi0JMHhkNmVmNWE4YiwgMHg1NWY2MTVlOSwgMHhlYjVjNGY0MiwgMHgzYjhmMTM0MSwgMHg1MGNiY2Y0NSwgMHhkMGJmZTI3NiwKLQkweDU5OThiMTFlLCAweDgwMzljZjAwLCAweGU0MjhkOWFmLCAweGUyNjZmZWU3LCAweDJkNDQ3YWFiLCAweDc5MjZjN2M2LAotCTB4NTU3Y2ZjNWQsIDB4MzE2OWZmZGYsIDB4YjkyZjhlZGYsIDB4ZjU4MDFjM2YsIDB4ZjdhNDljNjAsIDB4NTk0ZjVjMzgsCi0JMHgyMWM2N2JlMiwgMHgzNDY0ZTFiOSwgMHg5YzQxY2VjZSwgMHg5OGYxYjU3ZiwgMHhlZDEzMzNhZCwgMHg3ZGUzZmJmNywKLQkweGQ1ZmRjMDNmLCAweDNmOWEzZGUyLCAweDMwZmVlMWQ5LCAweDhkOTllZTk3LCAweGY3NDM1NGJkLCAweGU4NThjNjM3LAotCTB4MjJhZGRmN2UsIDB4MTk2Yjc2MGUsIDB4YWFkZDgzOGYsIDB4NDdjNmJkYzUsIDB4ZTJhMmJkYzUsIDB4ZWM3YzZjMmYsCi0JMHg5NzI2OTgzOCwgMHhlZmM5NTMxOSwgMHhkMDdmNjQyZCwgMHgxN2YxNGZkNiwgMHhkMmY2MGU0ZCwgMHgzMDkwYjBhYiwKLQkweDE0NWRhNWM1LCAweGNiOGVlOGFmLCAweDFlNzk5YjE0LCAweGFkMzA2YjhkLCAweGU0ZTQyY2M3LCAweDRmOTcyZjRlLAotCTB4ZDU2OWZiZGEsIDB4ZmNlOGMyZTAsIDB4ZDVjYjJiMDgsIDB4MGU4YTExZjksIDB4YWU5NzU4MWUsIDB4MjZkMzdmNmIsCi0JMHgxZGRlYWU5NywgMHhlN2Q1ZDAyOCwgMHgzODNhYTkzNCwgMHhkNzRjYTVhZiwgMHg4ZjNlZDA3ZSwgMHg1NjBjMmUwZSwKLQkweDM5MGZkYWVhLCAweDQzYzFkNWUyLCAweGVkNzVhYjViLCAweDc0ZjliNzg3LCAweDk1YTFjNWY1LCAweDFkMTFmYWJhLAotCTB4NjQ3ODNhNzUsIDB4ZmRhZTkzNzgsIDB4YmEwMzc3ZTgsIDB4NGQ5ZDMxZmEsIDB4MTc3MWZhYmEsIDB4Y2RmMDc0NWIsCi0JMHhlZDc0ZmI1ZCwgMHhlYTBiNWMyNywgMHhhN2IyMjdlYSwgMHhkNmU1ZjU3NCwgMHg2NGYwNzU2NywgMHhmNmJhNTdlNSwKLQkweDc0ZmQwYjhmLCAweGVlYmI3YTRiLCAweDQ5ZDc1NGY5LCAweDBiZDM3YmRkLCAweGM3ZTBlOGNlLCAweDBmOTE5ZjcxLAotCTB4MGY4OTk4MTYsIDB4ZTllZmFhNjYsIDB4MTBmMjY3ZGUsIDB4ZTM5YjkzOGEsIDB4MWRmZGIzZjgsIDB4M2NhMzE0NmYsCi0JMHgxNzBjNmZkYywgMHg2ZTNlOWYyMywgMHhmOTYzNzRlYywgMHhiNWI1YzE4NCwgMHhjZTQ5ZDAxZiwgMHhkNjE0ODlmOCwKLQkweGJjNThhYmNlLCAweDMzNDFjYjE1LCAweDVkNTMxOGI2LCAweDBmNzMxZmIwLCAweDM5M2Q0NTZjLCAweGU4ZGRhNmE0LAotCTB4ZDJlODc4MDQsIDB4ODg5ZDViYjMsIDB4MjkwNjM1ZjcsIDB4ZDFiZGYxMGQsIDB4ODhlNThmNWQsIDB4NzRhNTEzY2QsCi0JMHhiMGQ5MWZhOCwgMHhlOGU1MWViOCwgMHg4YjMzZTZlOCwgMHgwMDc0OTZkMSwgMHhmZTMxODdjZiwgMHgzZTg4N2IyNSwKLQkweDY5MTg2NjM3LCAweGM2NDcxYmRlLCAweGNlZGNkZTUzLCAweDlkMTkzNmIxLCAweDljM2I5ZDk2LCAweGRjMGYxODBkLAotCTB4MDlhNGEzYjksIDB4YmY2MDZkY2IsIDB4MzU4Y2NkMDcsIDB4ZTU4ZWZkODEsIDB4ODNkZmIwMGUsIDB4M2M2YzhiZTAsCi0JMHhlNDI0ZTdmMywgMHg1M2E2ZTU0NywgMHhiZjJlNzhlOSwgMHhhYTQ3ZDI3ZCwgMHg0YTE1YzU1MSwgMHhiZjQzOGY3MywKLQkweDIyZjFhOWNkLCAweDNiOWE1MTVmLCAweDRlZmI3NDExLCAweGRmODA0OWU0LCAweDE3MzA5MjNmLCAweGUxYTM3MGYzLAotCTB4YWQ3ODg3MTcsIDB4NzJmN2M4MDUsIDB4YmFlZDFiOGIsIDB4YWMwNmZkNWUsIDB4ZmUwMTdlZmEsIDB4OTI3YWZkNjYsCi0JMHgxZTc4NWZiMSwgMHhhZDIxNmYzMywgMHhmN2UxZWI4MCwgMHhkZTVhOGMwYiwgMHg3MTViZTUzYSwgMHhiMDRhMWM1MywKLQkweDllNDExMjNmLCAweGYwZTk4ZjM1LCAweGNhYmMwMGFkLCAweGVlODE5ZDRhLCAweDI2ZmI4YjA5LCAweGY4YTZhYTE4LAotCTB4MjZhZmY1ZWUsIDB4MmU5YzAzYzQsIDB4ZTQ1MWRiZGUsIDB4ZmU4MDJiY2IsIDB4OWNhMDYwNmMsIDB4ZjQ5N2EwOGIsCi0JMHhkMDQ3MDBhNSwgMHhlZmMwNWVjNywgMHhmOTllZGNiOSwgMHgwNjMwZWU5OCwgMHhhNjBiOTA2NCwgMHgxNTU1Nzg5ZiwKLQkweDUxNmM3OWM2LCAweDdiOTczOTNjLCAweDIyM2I3YWNkLCAweGRjOGRlNDRmLCAweGY3MTQ2MDU3LCAweDY4YThlNjVmLAotCTB4YzA1N2RjZmYsIDB4ZmUyM2RjZjUsIDB4ZTdjZmYzOGIsIDB4ZjM1ZGZmNjIsIDB4MzI5ZTAzY2YsIDB4MGY5ODg2OTYsCi0JMHhmNTRkOTllNCwgMHg2MTFhOThhYSwgMHhiMTc1NjdhYSwgMHhmMTliYzhmYywgMHg2ZmJjMDYxMiwgMHhlZTkyNzYzYSwKLQkweDcwMmFhZmFmLCAweGQ0MzI1ZTExLCAweGZmNzc1YTE2LCAweDY0NmZkMGE1LCAweDMzYWU0ZDljLCAweGRhNDAzZTYwLAotCTB4Y2UwMzNhZTYsIDB4YWFmMTRkMmYsIDB4YWNjNzhlNzgsIDB4YmNmZGRkNGUsIDB4OTk3ZjRkYjQsIDB4YTdlNDFlN2YsCi0JMHhiMTU1ZWZjOSwgMHg0NmJhNjk5ZCwgMHgyMjJiMjE4ZiwgMHg5MjVhYWFmYiwgMHg0N2NjNjJjOCwgMHhmYzlkNmQyYiwKLQkweDdhYWZhOGZjLCAweDc1OWJjOTQ3LCAweDYyNWEzNzk0LCAweGQxMTFlMTczLCAweGVhYjZjNWUzLCAweDdiZjYzMTAzLAotCTB4NjZlZmQ4OTUsIDB4OWI3YzdlODcsIDB4ZTQyMDNlNzYsIDB4NzE4NTU1ZjQsIDB4ZjdmODIxM2QsIDB4NmIwZTI0ZWUsCi0JMHg1YzVkZGNmZCwgMHhmOWMzNzY5MiwgMHhjZTc0NjNlZSwgMHgzMGNkYzFhOSwgMHhmOWE5ZTIwZSwgMHhkNzE1YmI3YSwKLQkweDBiNzk4Y2RmLCAweGU5MTgyZmE0LCAweDU0N2UyNzg5LCAweGExODc2MDcwLCAweGEyZjYzZWY3LCAweGM0ZmNhMDQ3LAotCTB4Y2U4ZmE0MTIsIDB4ODNmMDNkNjAsIDB4YTJhY2Q4YmQsIDB4ZGVmYjY0NWQsIDB4ZGVlYTAzNzIsIDB4ODk0NzU2NzQsCi0JMHgxNTkxYjYzNywgMHgxYmIwZjIxZCwgMHg0ZjVhYWZjYywgMHgzZDNlNjk4NywgMHg5N2Q5MzI5ZCwgMHg2MmZhZjk0MSwKLQkweDFjM2QzNTFmLCAweGFmYTY2ZmJkLCAweGM4NzJkMjcyLCAweGQ5NzllMmVlLCAweDY3ZmU0ZTFiLCAweGVmMDIyZjljLAotCTB4NTU3YzEyM2YsIDB4ZTQyNDVhYzYsIDB4OTVhY2IxOTMsIDB4NGMyY2YxY2EsIDB4MTc1ODc3ZTUsIDB4YzhhNjFlOTUsCi0JMHgyYTYyNGU1OCwgMHg0YmNjMTU5NSwgMHg0NzU2MTRlNSwgMHhhMTZiMjU2NSwgMHhhNTZiMWE3MiwgMHg1MzBiMDY3MiwKLQkweDk1MGFmZTA5LCAweDVmOTBhNjVlLCAweDM2ZjQxYjM1LCAweDk3OTk3Mzk2LCAweDhlYWM3OWNhLCAweDFkMjI5ZmNhLAotCTB4NTlhYjNlMDMsIDB4NTkwYmMxMGIsIDB4YzA2ZDk1MmIsIDB4ZmFhNTc4N2YsIDB4NTg2ZjkwNjUsIDB4MGRmMjAyYmUsCi0JMHhlOWZjZDdjYiwgMHgyZWZjODY1NCwgMHhiZjQ3Y2FlNiwgMHhlM2NhODBiZiwgMHgxM2NhOTU3ZSwgMHgzYjJhMzJmZSwKLQkweGY3NmExZWZjLCAweGNhOTJiZmE2LCAweDk1MmY3ZTUzLCAweDU0ZDVmZGE3LCAweDZhM2VmZDg2LCAweDI1N2ZiNmY3LAotCTB4ZWJmOGVmOTUsIDB4ZmYzN2ZjYTgsIDB4ZjVkZjJhMjYsIDB4NzdmY2E4MDcsIDB4Nzk5NTEzN2YsIDB4Mzk3NjQ2NjYsCi0JMHhjZjE1MDgyYiwgMHg3ZTY3ZmMwNiwgMHg2MGI4ZjY2MCwgMHgzYzBhYWYxZiwgMHg1MzE4ZjMxZSwgMHhmZjcwNTMwYiwKLQkweDRkZjE4NjY0LCAweDIyMzFjNTViLCAweDQ4Y2I5YjBhLCAweDVjOWFkZGY3LCAweDI4OWRkOTQ3LCAweDNiNzM0ZjA3LAotCTB4Mjc2NjllY2QsIDB4NzJkNmQwM2IsIDB4NjEzZTYxOWMsIDB4NGE1M2ExOWIsIDB4NzkzY2JkODAsIDB4ZDZiOThlZTQsCi0JMHhhZjkzZDA0MiwgMHgxNTA0ODZiMCwgMHhhZGJiYTVlMSwgMHgzMDllMDdhMCwgMHgwMjdlZWI4NSwgMHg5NjBiYzdmNSwKLQkweGNlODJiNWNjLCAweGZiN2Y2YjFhLCAweDRjMzlhN2UzLCAweGIzOGU2M2Y1LCAweGRmZTAwNTdhLCAweDFiYjE1OTFlLAotCTB4M2NlMTMwYWYsIDB4NTdiZWRlNTAsIDB4ZTYyZTdhYjAsIDB4ZjIxNTVmZWIsIDB4MDBjMzdjMDIsIDB4YjdhZDJkZTUsCi0JMHhiMTZmMzEwNSwgMHgzMTY4ZTViOCwgMHg3NTMxYjYyYSwgMHgzN2Q0MTJiNiwgMHgxZTI4ZWQxMSwgMHhlOGJiNTdkMCwKLQkweGM3YmRlZDdhLCAweGUyMTI5ZDZhLCAweDY0Y2ZmOWExLCAweDljY2NiMzdlLCAweDlkYzYzMTUwLCAweDdlMzVmYjIyLAotCTB4NzQ5OWYxYjMsIDB4ZGIyM2YxODMsIDB4ZGZkMDZlMTksIDB4OWZjZjIyOGUsIDB4ZmZmY2NmNTAsIDB4ZmE2OGYzYTYsCi0JMHhlYzc1N2QzNiwgMHgwNjJlZmE1OSwgMHg3ZTQzOGFlYiwgMHhlNWM0OTgzZSwgMHhhNWQ4MTc0ZCwgMHgwYjM0ZGZlOCwKLQkweDM2NGI3OWI4LCAweGI1MDdhOWQ5LCAweGNiZWZiMzdjLCAweDVlMzA3ZjU0LCAweGYwODFkMmJkLCAweDM3OGE1Yzk2LAotCTB4ZTI3OTI3MzQsIDB4NjM3ZGIxMGIsIDB4Y2M5ZGM5MzYsIDB4NjM3OTQ2MDQsIDB4OGExM2Q1M2IsIDB4ZTNlZjgyMmIsCi0JMHhiMmZjYjkwYiwgMHg3Mjg1ZmNkZCwgMHhlZmU1Y2EyNywgMHhhZThmMGNjYiwgMHgzYmZlZmE2ZiwgMHhkZTAwYjcxZCwKLQkweDA1NDY4ZDVjLCAweGU2ZjEyZGY3LCAweDdlNTEyYTc3LCAweGEzY2IzNzA0LCAweDE4ZTMyMTI0LCAweDEyNzkyZmQ1LAotCTB4YWE5ZGE2ZmQsIDB4ZjYxZjNlMzksIDB4MGVhMjAwZjUsIDB4MWIyNmFjZWQsIDB4ZmQ5OTU5ZDksIDB4YzM3N2M1NDIsCi0JMHhjZjMyOGQ3OCwgMHg2Zjk2OGFmZiwgMHg5Y2I5MGJiMywgMHhjMzRiZGEzNywgMHhjMGI3NmU3NCwgMHg0NDc4YzJlYSwKLQkweGQ5YjBmMjVmLCAweGYzYzJjYWVmLCAweDZmYmM2NzY0LCAweDI4N2UwMzMxLCAweDRhNjc2YTdjLCAweGE3NzMyODIzLAotCTB4YTMxM2RiODMsIDB4ZjY0ODNhOWYsIDB4MjdjOGIzNDQsIDB4ZDIzMTRjNmQsIDB4MjU2YzQ5ZjcsIDB4NDQ1MjAzY2UsCi0JMHhjODczMzZiZiwgMHgzNmY4ZTc4NSwgMHhiMTYzZTBhMywgMHgzMjA3ZTY5ZSwgMHhmN2I3NWYyOSwgMHhlZmJhNWQzYywKLQkweDk4NTVkOTE1LCAweDZlMWM4NDQ3LCAweGVlODE3MTE2LCAweDNmZjQ0NmYxLCAweGNkYzQ0NTIwLCAweDRhOTA5NjZjLAotCTB4NGJmYTY5ZTMsIDB4M2ZjNzZmMWIsIDB4OTE0ZWRlMzYsIDB4Njc4ZGE5MjcsIDB4OWY1ZmE1MWYsIDB4ZjVhNjFjZGQsCi0JMHhhMWZkODVkOSwgMHhkNzEzYjc4ZCwgMHhlMzBmMjMxNywgMHhmNWMzYzc2YiwgMHg1YTM3OGU0NSwgMHgyNWJiM2ViZiwKLQkweDRiYjNlYjRjLCAweDFlZTk1ZWRjLCAweGYxZWM0NzZmLCAweDRmNjcxYWZhLCAweDU2OWNmZTU0LCAweDcyZTQyZmNlLAotCTB4NzYzMmNjMTUsIDB4ZDMzZmY2MGUsIDB4MDlmOWU5YzIsIDB4ZDljNWQzMTMsIDB4N2U3YTA5MzcsIDB4YTY5Nzg4YjIsCi0JMHg5OTJlNWMwOSwgMHhjZmJhNjY5YywgMHg3MTc5ZDEzMywgMHg2ZGI1ZDIxNywgMHg5ZGNlOTFiNywgMHhjODI3Mjk2YywKLQkweDRlZDM5MjdlLCAweDQwZmM4OTMxLCAweDlmY2Y4YWQ2LCAweDAyZjdmMDMwLCAweDc5OThlNmE5LCAweGUxZmM3YjJiLAotCTB4NzExMWI5ZjksIDB4Y2ViNTM0ZTMsIDB4MTM0ZmY5ODAsIDB4ZTMwYzFkOWQsIDB4MzMxNGI2ZWMsIDB4NjI5NmRmYWQsCi0JMHhmY2ExYzYwZCwgMHhjZDgwOTk1NSwgMHhkYjgwMDRjMSwgMHgwYjFiN2M4YiwgMHg5NTRlM2Q2MSwgMHhjNTMzOGJmMywKLQkweDkyZjMwMDdjLCAweGRmYTFhYWQyLCAweDg0ZmY3ZDA4LCAweDc3MjY2M2EwLCAweGVlMjJhYmJhLCAweGM0NWIzY2Q3LAotCTB4YWY4ZDQ5ZWQsIDB4NzIzN2U3YTMsIDB4NDFmZjVmMzAsIDB4NGYzMWU3ZjAsIDB4OGYwYzZiYTcsIDB4ZGMzZTljOTMsCi0JMHg1OTg3ZmM5ZiwgMHhkMDdiYzYwZiwgMHhjMGZkM2U4ZiwgMHg3NzgyMGFlMCwgMHhmNWYzYTU4YywgMHg0ZWM3ODdkMywKLQkweGQ2NjI3ZjQxLCAweDgyNDY2OThlLCAweGUzMDNhYzBkLCAweDJjNzZiMzFmLCAweGNjZjNlMjM0LCAweGRmZmI0NjFjLAotCTB4ZjI0Y2Q2NzUsIDB4ZDU4ZWQ2NzUsIDB4NGNiZmZkYTIsIDB4YzY2NWY2YzEsIDB4NmUzMGNmYzAsIDB4OTFlZjc2NTAsCi0JMHg4YzhiOGMwNCwgMHgwMDM3M2ZiNSwgMHhjZWM2ZDNjYiwgMHhhMDdkZjg4ZCwgMHgxYmY2MTU1YiwgMHg1YmJjZDczNCwKLQkweGIyMjhlZDkyLCAweDM2YzgxZWFiLCAweDQ0ZjU5ZmExLCAweDk5YmYzZjIxLCAweDllMjYzY2MzLCAweGJmMjVlMTg3LAotCTB4ZjA5MWZjN2UsIDB4ZmJiMmJjMzEsIDB4NzJhZWQ2OWQsIDB4YjRmNmM2M2MsIDB4OWNiMWM3MjksIDB4ZGFmMTUyMTQsCi0JMHhmMGU4YWIzMiwgMHg0YTcyYzcxZSwgMHhjZDAyYWViOCwgMHg1Yjc3Y2FkOSwgMHgzMTU5NjM4ZSwgMHhlMjA0ZjdkYywKLQkweDQ2ZjdmMGY3LCAweGM2MTRmYzk1LCAweDZlNmZiYWM5LCAweGQ5M2JkYTNjLCAweDBmMjc0MzViLCAweDQ0ZDY1YzUwLAotCTB4OTRmNmMyZjcsIDB4MTgyNDliNzksIDB4NmJjYjhmNmYsIDB4MjdiNDNkNDUsIDB4ZjI0OGRiMjUsIDB4MjU2ZWE5MzUsCi0JMHgzYzYwNzNhZCwgMHg1MWVlNzVjMywgMHg0NWM5NzE3YywgMHhiZWM5NzcyNCwgMHgxMWVjMTM3ZiwgMHhlN2VlZmZkYywKLQkweDMzZjlmY2YxLCAweDE1MWFmZTgyLCAweGY4ODkzNWFmLCAweDAyN2NhMTQwLCAweDlhY2JiMDliLCAweDE1MWQyNzk5LAotCTB4MDRmNzZjYTEsIDB4YzdiNzJlMzEsIDB4YzA3OGU1YzMsIDB4NmM1MmZkYzYsIDB4NThlYzBkYmUsIDB4ZWM2OTkyYmEsCi0JMHg5NTU5NGZkOSwgMHg2MGM3NzlmNSwgMHhiMmJmNjBkZSwgMHgxMGIyODc2OCwgMHhhNmJjNWZlZCwgMHgwZmU4MzA4YSwKLQkweGM2MWQ1ZGZlLCAweGU2ZGRhMWY1LCAweDM2YmUzOGE0LCAweGZhMTRiOTdmLCAweDljMzNhMDhiLCAweGNmNWI2Y2ZmLAotCTB4NjdiOGRhN2IsIDB4MjM3ZTdhYzQsIDB4MWYxZWY0ZTQsIDB4ZWY5YjRmZWYsIDB4NDYzNzI4ZGIsIDB4NDY1ZGJjZDIsCi0JMHhlNjI0OGY5YywgMHg0NjMwZWIwMywgMHgxZGEyMjdjYywgMHhkZTdiYWZhZCwgMHhmN2U3NGQ0YywgMHhkZjhjM2Q0ZCwKLQkweDM5MmU2NTQzLCAweDhiMGVmZDYyLCAweDFlOTEyYWQ3LCAweGJmNDgyYTM0LCAweGY5NDhkNTc2LCAweDJmZGI3NmZjLAotCTB4N2EzZjBmMjksIDB4NzkwYTE3MWQsIDB4NzI4N2VhYmMsIDB4MzY1ZmExODgsIDB4ZTQzMGY1NGQsIDB4MWUyYTFmY2IsCi0JMHgwMTY0YWJiMiwgMHgwZWRjMjljYiwgMHg2MjRmYzc5MywgMHhjYWY1ODhhNiwgMHhkZGE4OTMyOSwgMHhmMThmNjgzNCwKLQkweDA5NjU2OWM1LCAweDc0ZWJkMjJhLCAweDcwYTBkYWQ2LCAweDJlNzhlMDNmLCAweDMxOGYyZmNjLCAweDJjYjc1ZTVkLAotCTB4OWZhYWM3ZTAsIDB4ZjBiYjcyYWIsIDB4N2I0YjU5MmEsIDB4Zjc0NWRhMDEsIDB4OWRiY2E3MmMsIDB4M2FkMzBkODYsCi0JMHgwNWU5YmU3MCwgMHhhMTkzZGJlYiwgMHhkZjM5ZmJkZSwgMHhlM2NjNTY3NywgMHhjYjc2MDM3MiwgMHg4Y2RmYmNiYSwKLQkweDllNDcwMDk1LCAweDMwZjRmYjVmLCAweGJkYWU4M2QwLCAweDQzMzY1NzQ2LCAweDg0NzY4MmE1LCAweGFlZmFlMTMxLAotCTB4ZWNiZjk4M2MsIDB4MmMxYmZhZTAsIDB4NDYzNzM2NWMsIDB4NWQxN2JhM2MsIDB4ZmI2YmZjMDksIDB4NGI5YzFmNjMsCi0JMHgxYzZkOTRmOCwgMHhiNTRiYWNlZiwgMHg4OWY3YzZkZSwgMHg4NGZlOGRlOCwgMHg2ZDgxZWFmMSwgMHhiZWJkMWYzMSwKLQkweDdkZTIwYTQyLCAweDdiNzc3YjRhLCAweDFhZmI4YTk2LCAweDk2ZDk0ZmJkLCAweGI4Nzk1ZGFlLCAweGNhNDY3NWZlLAotCTB4MmJjNjhmMGYsIDB4YjliNzExZDgsIDB4YTRkNmNlOTEsIDB4YTczYzNkNTAsIDB4ZThjYzZmN2MsIDB4OGE0N2VlZTksCi0JMHhlM2Y3ZWIwNSwgMHhjYTNmZGFlYiwgMHhiZTc4YmI4MiwgMHg3YTc5ZmVhOSwgMHgwNTliYzk0YSwgMHg1MDA3MTRhNSwKLQkweGViZWIzNmY5LCAweGY3ZWEzNmYzLCAweDI4M2E2MzE1LCAweDE2NTRkM2M3LCAweGZkYmZiOTBjLCAweDM5NGI0ZTdlLAotCTB4YmQ2Y2MxNTgsIDB4YmJhMzU1ZjcsIDB4ZTViMTdlY2MsIDB4Y2U0MjFiZmMsIDB4ZDMyODI2NjcsIDB4YTdjZTUwMGEsCi0JMHhmM2ZlYzkxYSwgMHgyMzUzMWFhNiwgMHg4MzI5ZGVmZCwgMHhmMDljZmViOSwgMHgzN2U0OGQ5MiwgMHhmNzRhYzBmYiwKLQkweDM4NTBkNGQ2LCAweDQ5YzRlZDAxLCAweDNlYzkxODVmLCAweGQxZDRlMzdmLCAweDM5NDFhNzg3LCAweDliNGIzN2Y5LAotCTB4MGNlNGRkYjAsIDB4ODZlZDBlNzgsIDB4YzQ3ZDc0YmUsIDB4ODRiNzY0OWQsIDB4NWY1ZjkxMGIsIDB4ZWQ5M2ExNjYsCi0JMHg0YzNiMWZhOCwgMHgyZGE3YmRmNCwgMHgyNjUzNmM5ZiwgMHg0Y2FiZmVlMSwgMHg2ZDI5ZGNjNSwgMHhkYzYyMTVkYywKLQkweDVlMDI5YjVmLCAweDk5NmVhNzkyLCAweDUxZTdlNDFkLCAweGY2ZDJiZmQ3LCAweDI4NjVjNzg5LCAweGYwMzY1NzdmLAotCTB4YmFkNTdiYjUsIDB4OTk5N2QyM2EsIDB4ZjE0MmNjNDUsIDB4ZDIyYWYwZWUsIDB4MTllMzFiYzcsIDB4YTU2Y2NiZjIsCi0JMHhjZjA4YmJmNSwgMHg0NjY0ZWNiZSwgMHhlYWI2NmZlOCwgMHhmM2M2MmQzMiwgMHhjZTY3NjExOSwgMHg0NGQzNTQ1MSwKLQkweDNmOTU1NTJjLCAweDczZTdmMmI3LCAweDlmM2QwZjE1LCAweDczZjg3YWFiLCAweDZmZWZmNzFiLCAweDNmNjEwMjUzLAotCTB4MmQ5Yjc3ZjQsIDB4ZGRmZDg1ZDksIDB4ZmQ3OTdhYTYsIDB4OWZkNTBiMzUsIDB4MTcyZmZmMDIsIDB4MTcxYWMxNTgsCi0JMHhiN2FlNTA1MCwgMHhmM2YyMzQ1YywgMHhkMTNjNWYyZiwgMHhhNGFkYTM3YiwgMHgyYmYzODVjMywgMHgzNmZkZDIzNSwKLQkweDNlZTg5M2IwLCAweDRiYzU0ZWYyLCAweDMyZjc5MWY3LCAweGY4MjIwNjVmLCAweDY0ZDlkMmU1LCAweDYyOWNiZjQ3LAotCTB4MmY0YjdiYTQsIDB4YmYwYzhjN2IsIDB4OTFhODE0MDMsIDB4NDE0MjNkZjksIDB4Njc1NzJmNDcsIDB4MzY1NGY5ZDIsCi0JMHhlYmY3MTMyMiwgMHg0M2IyNTZiYiwgMHgwZmEwZjExYSwgMHhlN2Y3NTdkYiwgMHhmNmU2NDJmYSwgMHgyOTUxYmVjMywKLQkweDYxNjFkZWQ0LCAweDA3NDg5NWM5LCAweDNiY2E2NTg3LCAweDFlNzhlMWZmLCAweDY1MGY5NDNmLCAweDczNWVkMTA3LAotCTB4NWRmOWU4ZDYsIDB4ZTljNDlkMmUsIDB4ZjIwYTY1NDEsIDB4MjU1NTBjYzEsIDB4Y2RkZmFmYmEsIDB4Zjg4YmEzNTQsCi0JMHg3ZDg3ZGU5ZSwgMHgyY2VlNzVhNSwgMHgxZmEyYmI3ZCwgMHg1NTU0NmJjMiwgMHg5M2ExOGNlMiwgMHg2ZmE1ZjUxNywKLQkweDhjZjgzYzczLCAweGIzYmU0Nzk0LCAweDliZWZiYzU0LCAweGQ3YzcwODc0LCAweGUwYjA3Y2Y4LCAweGY0YWU0ZDRmLAotCTB4ZjUyYTQzOTYsIDB4YTQ5YTRmNjMsIDB4MzA2ODAwZWUsIDB4YmZmYzgwMGMsIDB4NTFjZjBjY2YsIDB4NzRjYjI0MmUsCi0JMHhhOTcwNmFkZiwgMHhmNTg2NTIxYywgMHhlODg2N2RmMCwgMHg0ZmUwYjA3NywgMHhjZjllODhmOSwgMHhlMWU5MGVmMiwKLQkweGVlZmYwNDQ3LCAweDFmYjkyMTYzLCAweGU4YzJkYmY2LCAweDhiNDA2YTVjLCAweDNlNzgxZGJlLCAweGQxNjM5NDA2LAotCTB4MjJhYmZjN2MsIDB4ZDQ4ZjE2ODMsIDB4OWUxN2ExZTEsIDB4ZDlkN2IxN2QsIDB4NWM0MGFlYjMsIDB4YzhjYmFkM2UsCi0JMHg1ZGU0MjVkNywgMHgzZDJiNmRhZSwgMHhkNTY0NTVjZiwgMHgyZDYyZjM4NSwgMHgwN2ZhZTM2ZiwgMHg0MGMxOTIxYywKLQkweDM1MmFmZDg1LCAweDc4MDFjZWNlLCAweDcxMjY0MDQ2LCAweDQ5ODU5MzM3LCAweGJhZGQ3YzVlLCAweDJiNWM0NTFiLAotCTB4ZWJkMTlkN2EsIDB4NDRiMDY1YmIsIDB4ZjFjY2NiZWIsIDB4Y2E2ZWM5NzksIDB4MzI2ZWM5OTAsIDB4MThjMjAwNmQsCi0JMHhiZGIwZDc4ZSwgMHhhMzcxNmUzYiwgMHhkNGZiM2IzZCwgMHhlNjQzOTA2MCwgMHgxODJiNTY3YiwgMHhlNDIzM2UwZiwKLQkweDg5MmJlOTkyLCAweDU2ZmRkN2QzLCAweGRhNTM1N2EyLCAweGZiYzg4MjhjLCAweDRmODY5NzJhLCAweGYzMTgzMzNhLAotCTB4N2FiYWJmYmQsIDB4NGY4ZjEwNzIsIDB4ZTVhM2ZlMTEsIDB4N2Y0NTVmZGMsIDB4ZjlmNTNhNjMsIDB4YzYyZWUzODYsCi0JMHhlOWM3ZTU0NywgMHg1YzI3MGRmMywgMHgxZjk1MWZlYiwgMHgxZjk1MTM5NywgMHgzZjU3NDQzNywgMHg5NTExMTk1OSwKLQkweDJhMmUzNzFmLCAweDA3NWNhZTNmLCAweGFlOTgyZjRmLCAweDlkNTMzZjZiLCAweDJkNmY4M2EzLCAweDdkYWVhZWZiLAotCTB4NWQ0ZWU3OTUsIDB4YmJjYTljZmQsIDB4NzliN2Y1NzQsIDB4ZjNjMWQ2ZWYsIDB4YjVkN2VmYWIsIDB4ZDdhYmUwNWYsCi0JMHhlNTc3N2ZkNSwgMHgyMGY1NzQwZiwgMHg4YmM2NjIyZiwgMHhmNzRhM2MzMSwgMHg2MTNkZDM4NiwgMHgzMDE2YTBmYSwKLQkweDNkODYzN2JjLCAweDU3NzIyOTIwLCAweGY0NzFmZWE0LCAweDFlNGM1ZmUxLCAweDcxZTNmN2MyLCAweDNiMDkzZmNkLAotCTB4YzQ1OTFjNzgsIDB4ODM4YjU5NWYsIDB4N2M1YWIxZTIsIDB4OWE3NjM0MzYsIDB4YjcyMmZkMTUsIDB4YmQ0MzRkNDUsCi0JMHhmNWNiN2VjZSwgMHg3NDM4MGIwNiwgMHhkZjg5Y2I3MSwgMHgxYjc2YTRhYiwgMHhmY2U5YjI5MiwgMHhiM2IwNTFlMywKLQkweGVmMzBmOTdkLCAweGU5MjdjZjIwLCAweDFjNmIwMDFmLCAweDUwMGRkYmUzLCAweGQ3ZmViYjQyLCAweDIyMzdjY2NjLAotCTB4OWUyYzFlNjIsIDB4M2NiNTg1YzcsIDB4ZTY0ZjMxMDcsIDB4OGJmM2UwNDksIDB4NjFmN2NmZTMsIDB4ZmQxZjMxM2MsCi0JMHgwZjk1MmIzOCwgMHg0MTczYjUzYSwgMHhmNmJmNjE5NSwgMHhmMjgwNzMzMiwgMHhlZDgzNGIxMSwgMHgwMzZmOTg2NiwKLQkweGM1MTQ0N2M4LCAweGM3NGU1ZTEyLCAweGJkNGRiODM4LCAweDdhYWEzZGUxLCAweGIzZGQzYTdmLCAweDA1MGQyZGIxLAotCTB4M2FhNWQwNGMsIDB4M2QxZmQxZTQsIDB4N2NkYmVmMDIsIDB4ZTMxNGUyOGMsIDB4MTFmZmVjODcsIDB4NDMzY2UxYzYsCi0JMHhiYjNmMzQ1YywgMHhmN2JjZjFjYywgMHg3NGI5N2ZmNiwgMHg5MjY1ZTUxOCwgMHg0NWY1ZWU5MywgMHhiMWRkYTdkNywKLQkweDZlMzdmM2Y5LCAweGQxNzdiZjUwLCAweDc2NWJkZWY3LCAweGRmNmZmN2EzLCAweGEyMzFiNjc0LCAweGNiZjlhZmJlLAotCTB4MTNjY2ZlYjYsIDB4NjY1OTA3NDEsIDB4YWQ1NWZkZmQsIDB4ZmFlMTBlZjQsIDB4MzM1OGRkN2QsIDB4NDkyNzJmYzUsCi0JMHg2MDQzOTliZSwgMHhmZWM2Y2ZiYywgMHhlMWRiN2JmNSwgMHhiZTJiNGZiZCwgMHgzYmZkMWRiOCwgMHhlN2M1ZWU3OCwKLQkweGZhZjA4ZWQwLCAweDJjOTVlNjY5LCAweDA0Mzk5ZTdjLCAweGIzZDQ3ZmVjLCAweGJlNjYyYzcxLCAweGFkZDA1ZjljLAotCTB4NDVkMzU2OWMsIDB4OTlhYTc5ZmUsIDB4NmI0ZTQzZTIsIDB4YjBmM2ZjZTcsIDB4ZjE1MTZkZWYsIDB4Y2JmNDY2ODIsCi0JMHg0NDdiYWYwMSwgMHg4ZjhiNDQ3YywgMHg1OWZhMmRkZiwgMHhlOTQ5NGEyMSwgMHg2NjBlNzNhNCwgMHg1MjdkZDAwZCwKLQkweGM1ZWM1ZWNkLCAweDg2MzI4ZTBmLCAweDkzNmNhMzdlLCAweGM1Y2E0NDJmLCAweGM1MzM1NGY2LCAweDRjYzUyNDA3LAotCTB4MzI5MmU3NzksIDB4MjgyM2JlOGEsIDB4ZTc4ZmEzODEsIDB4OTg1Yjc2MzcsIDB4ZDRmNjhjZmMsIDB4OTAwZjE0NTEsCi0JMHhjZTI4NjM0MiwgMHhhODg1YjM2MCwgMHgyZmI2YmYzZiwgMHg3N2RmZGVhYSwgMHhiY2QzY2Y1YSwgMHg3NTlmZWVmYSwKLQkweGM3NzA0ZjNmLCAweDFlNmEyNzE4LCAweDQ3ZDYxZTM4LCAweGNjYzA3MzhmLCAweGRjYjlkZmI4LCAweGYxYmUzMzFhLAotCTB4MGQ4OTkwZTIsIDB4NWY5MTUyNDMsIDB4ODJkZDc3M2IsIDB4ZDhiYmZhZmMsIDB4MzEyYjU5NzIsIDB4ODExODNlOGYsCi0JMHg2NDg2ODc5ZiwgMHhmZTYwNWQxMywgMHg1YzYyMzA3YywgMHg4NDhmOTdjYywgMHhkZWU4MDI4MSwgMHg2YWEwYzEwNCwKLQkweDcxNDI1YTA2LCAweGExM2M3MDgzLCAweDZhY2Q5YTA3LCAweGEwODdkOTNhLCAweGY3MWY3MGZlLCAweDBhN2U3ZTA5LAotCTB4NTFmYzhkNjgsIDB4MDNlZjg3ZTEsIDB4NTFmMmM2M2UsIDB4ZGE3NjQyYmYsIDB4ODQzZmUwN2UsIDB4YThiYmYwOWYsCi0JMHhhODBiZmEwYywgMHhhOTU3ZTgzYywgMHg4Y2JmOTBmZSwgMHgxZWZkMjdlMCwgMHgyYmY4OGY4MiwgMHhlZmRhN2NhOSwKLQkweGY4Y2ZlN2E1LCAweDg1ZmUwOWFiLCAweGFiNjU0N2RmLCAweDdmM2QyNTdmLCAweGYwNDc1ZmNlLCAweDA0NGRmZTBiLAotCTB4NDJlZDEyZmYsIDB4OWEyN2NmMTksIDB4ZGZkOTdjYTgsIDB4ZjhhZmY1NDIsIDB4OWFmYzExZjcsIDB4Yzg2NTQ4M2YsCi0JMHgxZjllODQ3ZiwgMHg3YzEyYjdmNSwgMHhmMDQ2ZGZkYywgMHhlMDg4N2YwOSwgMHg5NTA3N2YwZSwgMHhmNGMzZmE2ZiwKLQkweDVkZmY5NGZjLCAweDI3NThhZmRlLCAweGZjNjcyMjc4LCAweDQ1YjQ5NzgwLCAweDc5ZGExNzQ2LCAweGNjOTY4YjY5LAotCTB4NmY3ODAwYWUsIDB4NmRmNzRjYjUsIDB4NGJlNDBiOWQsIDB4MWUyZTgwMDcsIDB4ZjdmMjY1NTUsIDB4NTIzNGFlZjYsCi0JMHgyYmIzNDdkYywgMHg0ODZjZDZmNywgMHhiOWZhYTcyYSwgMHgxNTkyZGY1NCwgMHhiZWQ5NzY0ZiwgMHg3N2JhNjZhNSwKLQkweGVkYzU1YjZkLCAweDQ2Y2NiNjU5LCAweDMyYzU2ZGVkLCAweDcyYmEzZmQ1LCAweGNkOGRkOTJlLCAweGFlMzAwNTM4LAotCTB4MDc4MThjMzIsIDB4MjViYjYzMjYsIDB4ZmJkZjkyNDYsIDB4ZWZiYWUyYTIsIDB4NmY3OWZkODksIDB4NDVlZmNjODgsCi0JMHgyMjUzODkxZCwgMHg1YjZiMjFjZiwgMHhiYWYwNzQ5MywgMHg3Y2U1MGNiNiwgMHgyNWRjZGQwNCwgMHg5ODliNjFjNiwKLQkweGM0OWRmOTFjLCAweDMzYmRmNjRmLCAweDc5ZDYwMmFmLCAweDBmN2JlNDk3LCAweGZiYTdjOGU1LCAweDM0MDNjZGNmLAotCTB4Y2JiNWEzMzEsIDB4YzhlNGZjOGMsIDB4YmVhN2FkODksIDB4NGIzZmU0ZDQsIDB4ZGJmODg5M2YsIDB4YmY4NGNhYWIsCi0JMHg2OWM2ZWFiZCwgMHgyYzVmZThiOSwgMHgxMzdiZTk5MiwgMHhjZmU0OGI2OSwgMHhiZmU5OWZkMSwgMHg5OTdiYTY0MCwKLQkweGM1MzI1NWI2LCAweGEzMjJkOTAzLCAweDVhNDZjN2MwLCAweDczMDVmZjc3LCAweGU5Yjk1ZWE5LCAweDlkZDFjNTE0LAotCTB4Mjc4NzhlYWIsIDB4ZjgwMmRkYTMsIDB4Mzg3ZGEzY2EsIDB4NGZkZjg0OTQsIDB4ZDc3MTEwY2EsIDB4OTRmMTI5N2QsCi0JMHg5ZjNkMTYzNywgMHhmOGJiZmYyZiwgMHgxOWY4MGNkOSwgMHg1ZjNmMTMxNSwgMHhhM2NmYzJjNiwgMHg3Zjc1ZmVlMiwKLQkweDY4ODU3ZGYxLCAweDMxZGY2OTNjLCAweGNmN2M1NDdkLCAweGM3OTFiMDNiLCAweGE1ZGJhM2VmLCAweGU2MmFiODg4LAotCTB4NGZmN2QxNzQsIDB4MWY5MjY1NmEsIDB4ODFmMDU5ZmIsIDB4YzU5ZDgwN2MsIDB4N2RlM2RkMzIsIDB4YjNlYWQyNjQsCi0JMHg3MzNlNjAwNywgMHgxMTRhN2M4YSwgMHhjODU1MDM5ZSwgMHgyNmM2NTE0NywgMHg2ZmZlZjI1NywgMHg4OTNmMjM1YSwKLQkweGJhZjQwNTc0LCAweGI3Njg0OWVhLCAweDk5ZmE2MTdkLCAweDA1ZmIyODdjLCAweDdmMThlZDVjLCAweDlmZGU4ZmI1LAotCTB4OGRmMzEzZTEsIDB4YzViMjE3YTUsIDB4NDQ3YmY2M2MsIDB4ODFlNjE0ZmMsIDB4YWFkYjNiNzEsIDB4ZjljNzg1ZGQsCi0JMHg1MDQ1NTliOCwgMHg2NTdhY2NlZiwgMHg3N2ZkNWUyYSwgMHg5ODMyZWRjZCwgMHgyYzVmZWNhMCwgMHgyY2YxYzdhZiwKLQkweDg5M2Y0ZGRmLCAweDNjMDZhNWUzLCAweDM4YzU3OGRhLCAweDUzYzUzN2RlLCAweDY5MTU3ZGQ2LCAweGY3NWRlZWIxLAotCTB4NGViZjBmMjUsIDB4MTIyODhlMGUsIDB4YjAwNjc0ZjcsIDB4MWYwNzI4MDEsIDB4OWM1Mjc1MzEsIDB4Y2I4NjcwM2EsCi0JMHhkMzI2YTY0MSwgMHg3MWU4Yjg3ZCwgMHg5OGZiY2FmYSwgMHg2MTkzZjAyOCwgMHhkMTBkZTdlMSwgMHhmNmViNGRlZiwKLQkweGVlNTQwMjViLCAweGEyYWZmNGY3LCAweGIyYzlhODNjLCAweDIzM2QwZWY4LCAweGM0YzM3YjdmLCAweDBkY2I2NTc4LAotCTB4NDIxZTYzY2UsIDB4MzY4NDBiZjksIDB4N2U4OTg4YmUsIDB4N2VmMmE3MzIsIDB4OWI5ZmJjOGMsIDB4Mjc4MjdhZDksCi0JMHgwZGMwOTRkYSwgMHg4Yjc2MDFjZSwgMHg1MTU3NTA3ZSwgMHg5NWMyYzQ1ZSwgMHgzZGUxMWFiYiwgMHhjYTI2NWJmYiwKLQkweGJlNGJiMzU1LCAweDdlNzcyNDVkLCAweGU0N2Y5MTJiLCAweDNhYWNiNjM0LCAweDYyZGZkMTE2LCAweDFjZWQxZWIxLAotCTB4OGEzNWYzMDIsIDB4ODhmMzllZTQsIDB4OTFmMDFhZjQsIDB4YmRhZGYwMjIsIDB4ZDFjNDUwYjcsIDB4NmY3ZWJiMWYsCi0JMHgxNDQ1ZTUxMiwgMHhmYjQzOGM2ZiwgMHgxMmIzMmY2ZiwgMHgyMTRjZDgxZCwgMHg3ZjAyMzhhNSwgMHgwZWZmMDMzNiwKLQkweGViZmNmNDRlLCAweDFlNWFjYzhiLCAweDI4ZTI2ZDgwLCAweGZjNjQ0NzNjLCAweDUxY2EzMGJlLCAweDNlYWJmNzk4LAotCTB4ZDFkZWZmMDcsIDB4MGZhNjc3YTIsIDB4MTdmYzc4MDcsIDB4MzgzZjlkMzIsIDB4N2JmM2M1OTcsIDB4NTIzNjdmZDAsCi0JMHgyMjZiY2Y3ZSwgMHhiNTlkZjg1ZSwgMHgyYzNmNzQxNSwgMHg0ZmY0NGIxZCwgMHg3ODA1NGZkMSwgMHg4NmE2NjZmYywKLQkweDhkOWY3ZGYwLCAweGFmOWJjMWZjLCAweGVkMjJlN2M5LCAweGVjMTUyNDEyLCAweDQ2NDVkYzZmLCAweDVkNzFlNWYxLAotCTB4ZDgzZWVlYjIsIDB4ZjZmYThiOTgsIDB4ZmExMmZmYjAsIDB4ZmE5ZGU5YjUsIDB4ZmU0MjY5NzYsIDB4ZThkYTQ3M2IsCi0JMHgxZjc2OWQxZSwgMHhkZWU1ZjljZiwgMHgxM2QyNzJjMiwgMHgxZmZmMjRmMSwgMHhlN2UyNjU1MywgMHgwNzZkNGFjNywKLQkweDJiNzZkZGIwLCAweGEyN2U4NGJiLCAweDQxNTU4MTdkLCAweDhjZWVkMDM5LCAweDFiNmFiOTI3LCAweGYzZjY0ZjExLAotCTB4ZDZhM2NjZjYsIDB4NjU5ZmMwNGUsIDB4ZGEwYTNiZTQsIDB4YmUyZDAzMmIsIDB4N2ViYjE4MDMsIDB4YmNjNjY4YjQsCi0JMHhjNzI0MzFmNCwgMHg1YzAzYmU3YiwgMHgyZjA3N2EwNiwgMHg3MzNjMTAzNywgMHhiZGE2OTIwZiwgMHhlOWRmNDhkOCwKLQkweDYzMzQ1ZmRhLCAweGI2OGM4MDRmLCAweDViOTc5YTE2LCAweDdjZjMwNjUyLCAweDM1Nzg2ZWMwLCAweDljNzYwZGRhLAotCTB4NjNiNDE4ZmIsIDB4ZDBlMDFlYTAsIDB4OTQwMWRmNzAsIDB4NzUyOWU5NDcsIDB4Y2Q1NzQ4ZWQsIDB4MjkyYmEzYjYsCi0JMHg0MjlhNWQwZSwgMHhhYmU0ZDU3MiwgMHg2ODljYTEwYiwgMHg5MWFjNGI1NiwgMHhjOWYxYWRmYywgMHgxYWZiZTViNywKLQkweDNhZmVmNzExLCAweDdlYmFmZmZlLCAweDRkZjNlMmZiLCAweGZhZWY5Yzg1LCAweDdlNjgwMzhhLCAweDlhN2Y3NDdlLAotCTB4NjBjNmZmNWYsIDB4OTBhMzdlZmUsIDB4ZTZiMzgxZTcsIDB4NzBiZjcyOTgsIDB4NjUyNzk3MjgsIDB4NTY2MWVmMjIsCi0JMHhhZjdkMjU0YSwgMHg1M2EwNTY3ZCwgMHhhMWQzZmNhNiwgMHg5YmQ4MGZkYywgMHg4NjdjYTc2YSwgMHhjMjE2NmViZCwKLQkweDAxNjA3OWY4LCAweDJiYTQwZmQ3LCAweDI5YjI5ZTg4LCAweDA4NmNkNTRlLCAweDNjMWM4MTJiLCAweDcwYjkwZDBmLAotCTB4OTdlMDljNWYsIDB4ZDE3YmZmZTEsIDB4YTQxOGQwYmMsIDB4N2QwNWQ4ZWYsIDB4MzkzZGY4NzEsIDB4MTdlNzQ3ZTgsCi0JMHhjNTdiNGFkOCwgMHhkNzdlYzlhYiwgMHgxZjc4ZDBlMiwgMHg0MzliYmYxZiwgMHhhMDk4MjBhZSwgMHg3ZDIzNmFmNiwKLQkweGJkZmEyNjFmLCAweGYwZjRiYjliLCAweDc4N2E2Yjg0LCAweGU3N2ZkMzIyLCAweDg3YWFkY2E1LCAweGY4N2EyYjI3LAotCTB4NmU0NzIxNTMsIDB4OWYzZmQ3NDksIDB4ZmRjM2QyZWEsIDB4MzM4YzFjMTcsIDB4MTQxNWZiZjIsIDB4ODI4ZWQyYWYsCi0JMHhjNjBlZjdlMSwgMHgyMDA4MDZjNSwgMHhmY2ExNmE0NywgMHg2YjlkMDFhMCwgMHgzZjM0MWU0OCwgMHhiZmY4ODMzOCwKLQkweDdjN2QxYWZmLCAweDZkZDU5ZDM4LCAweDljNjAzNjQ5LCAweDU5ZGNmZjVhLCAweGVmZDY4Njc0LCAweDA3M2ZkMWFjLAotCTB4ZmM2MGU4M2MsIDB4N2RkMjA5ZWMsIDB4M2M5ZjcwYzUsIDB4Mzg3ZmU2MTQsIDB4ZTY1N2U3OWYsIDB4Nzg2OWRlNDgsCi0JMHg1YTAyNjNlNCwgMHhmZGY5MTViYiwgMHhkYjhmYmU3NiwgMHhmZTBiNWY2NCwgMHg0YWRiMTZiZiwgMHhhMGFmMjg1MywKLQkweGI1ZjdjMmNjLCAweGY3N2M1OGFiLCAweGRmODUyNWE2LCAweGJjYjM1ZWRiLCAweGE2N2YwZGM5LCAweGZiYTZjYzhkLAotCTB4ZmVkZDZkZDgsIDB4MmJlNDhmYjUsIDB4ZTI5MWJlM2IsIDB4NjQ2YjdiZmYsIDB4ODY3NmFlZmEsIDB4ODVlYjQwMzUsCi0JMHhjNWQxNWM3NSwgMHg1Y2JhMzRhOSwgMHg2MDQ5Y2ZjMCwgMHg1ODdhYmEzZCwgMHgzZDNkMTVjZiwgMHhhODc0NDQzYywKLQkweDMxZjkwYmFkLCAweGU0NWViMTEwLCAweGZiNDQ0MGMzLCAweDcyZmI4NmY3LCAweDhmYzhkZDcxLCAweDcyZTNjZjkxLAotCTB4MGY3NDRkM2IsIDB4MmZhN2FjNTksIDB4NDJlNGQ0YmUsIDB4ZDY4ZjM4OTksIDB4MTBiZWQyZjIsIDB4Njk3OTZhNjMsCi0JMHg2OTVlNDUxYiwgMHg4NzhmNDM5YiwgMHg1MTI3YWEyZiwgMHhmMDhiZTExYywgMHgwYzVmNzg5YywgMHgwZmJlNDUzZSwKLQkweGM3YmU3M2U0LCAweDg3YmMzYjcyLCAweGZhZTdiZDdjLCAweDFlMzhhOWUyLCAweGM0NDA4MWNhLCAweDA4NGUxYmY3LAotCTB4ZWQ4N2ZjM2EsIDB4YmIyODk2Y2EsIDB4M2ZiZmVjZmIsIDB4YWVjOGNmNTksIDB4ZWIwYTFjYWMsIDB4OGU3ODFkYWMsCi0JMHhkZjE3NGZkZiwgMHhmNDIxM2FiNywgMHhlOWMwOTRiZSwgMHhlYmJjYWZhNiwgMHg1NmJjOWVmYSwgMHg4YTViYWUyYiwKLQkweDEyYmJlM2NhLCAweDAyMGRhZjg1LCAweDU3ZmJkYTVmLCAweGQzYzI2Yzk0LCAweDZiNzI4ZTk1LCAweDQyNjI3ODVmLAotCTB4MWYyMTMyM2UsIDB4YjMyYTdiZjEsIDB4NGM2ZWNmY2EsIDB4M2E1YjE5NTUsIDB4Zjg3OWI5ZjQsIDB4Nzc1OTg4N2QsCi0JMHgwMmNkMmQ5ZCwgMHhkN2QwZjM3OCwgMHhiM2QzZmMzOCwgMHhhNjgwMGMyZiwgMHgyZGZjZmQxZiwgMHhmNjdjM2YwZSwKLQkweGY5MTU0YzhiLCAweGUxZTczZmYyLCAweGUyMWMyM2Y3LCAweGFmOWI0NWRjLCAweGExZmFkZTM2LCAweGI3NThkZWRjLAotCTB4MjM4ZjFjZTksIDB4YmYzYTVlYzgsIDB4Yzk3YTc3YWMsIDB4YTUyY2ZmY2YsIDB4MDdlNzgxY2IsIDB4OWNiYjUyZWIsCi0JMHhkNzIwNmU0YiwgMHg0MGJhNmRkNywgMHhlOTg2MGM3MSwgMHg1ZjMwYTM1MSwgMHg5ZjEyOTE4OCwgMHg1N2M3ZTVhZCwKLQkweDFkZTNmM2VhLCAweGQ3YzRkNThlLCAweDUwNTAxNjE2LCAweDNkNTljNWRlLCAweDdkN2U3ZTc0LCAweDczZTY4YmE4LAotCTB4ZjlhYjUzMWIsIDB4MGYyYmI5ZjksIDB4NWRkNjY3ZjcsIDB4NWZmNjk4ODYsIDB4OGY5MTUwZTMsIDB4NjhkZjQyY2EsCi0JMHhmMmYyMjY1YywgMHg3Njg5OTRlNywgMHg3MTE3ZjhjYSwgMHg5ZThjZGI5YywgMHhmZmZiZDQ0NiwgMHgyYTUxNjYzYSwKLQkweGJmMmQwOThhLCAweDNkY2Y0ODY5LCAweGU2ZGY0M2I3LCAweDBmYWNlNGZlLCAweDI0NTc1YzBjLCAweDUzZjE3OGYyLAotCTB4Y2YzNDVkYzMsIDB4ZWEwMDM4YzgsIDB4ZTVmNmJlODUsIDB4M2Q1M2QwODgsIDB4MzhhMWUyZmIsIDB4ODdiMjdkNjcsCi0JMHhlNWQyOGJlZiwgMHg5MmZiODJkOCwgMHg1YWRjZTVkNCwgMHg3YmZhZjdkNCwgMHgzZTE0NGZlZCwgMHhjZDMyODc1YSwKLQkweDdlOTA5NjdlLCAweGRhN2YwZWJmLCAweDYwNzk2OGZlLCAweDFlNTcwNmY1LCAweDg3MTcyYmQ5LCAweDYwOWZlMmU4LAotCTB4ZjZiY2JiZTgsIDB4NzE4ZGY0ZDgsIDB4YTczNjBkNGEsIDB4NjQ4ZTI5N2IsIDB4MzAwYjUxNGEsIDB4ZWZmZWI4NGYsCi0JMHhlOWJjY2M1MiwgMHhiNzRlODI3MywgMHhiZWU5ZTIzOCwgMHg0Y2MzYmQ3NSwgMHgxZGRhYmRmNywgMHg2MWRhMTgzYiwKLQkweGMyMzZkYjU2LCAweDg5YTM4NTRiLCAweDgzNWM5ZTYxLCAweGI3ZDJiNTliLCAweDgyZjJhMjBmLCAweDc5MGJlYzFiLAotCTB4NjU5ZjJhN2QsIDB4OGU0ZDU0YzMsIDB4YzZkNjdlNzEsIDB4ZGM5NGFhYmIsIDB4NzcyYTJlMzAsIDB4YTNhZmZmZjIsCi0JMHhmMjQ3N2FhZiwgMHhlYzFmOWUzNCwgMHhiMDdlNTMzMCwgMHg4YmFlNjg5NCwgMHgyNmRjMWY5NSwgMHg1Yzc2OGRlYywKLQkweDgzYWUwYTU3LCAweGY1YjRjOWM3LCAweGFmM2M1ZDU4LCAweDljNjM5ZjExLCAweGQxZjJlY2NjLCAweGFkYTJlM2ZmLAotCTB4ODdlYzRkYmIsIDB4YWFlMmRlZDYsIDB4MjVlZjI4NjMsIDB4Zjk0MmVhYjMsIDB4ZmY3M2M1MmEsIDB4NDE0N2Y1MWQsCi0JMHhjNmQ0OWM4NCwgMHg4OWE4N2U3ZiwgMHhhZTFiMGJkZiwgMHgyYjM1ZmNmMCwgMHg3ZWIzMTdkNywgMHg3ZjE5ODg2YiwKLQkweGYzNTQzYWJmLCAweGJmMTliZWI3LCAweGRiMzJmNDY5LCAweDM0NjFmM2M4LCAweDMzNmI5ZWJlLCAweDk4MWVkMDdiLAotCTB4N2NhNzRiNmIsIDB4ODA0MGI5OWQsIDB4ZGEyMzkzMTcsIDB4YmYzZTY3N2YsIDB4ZTlhYjI5YmYsIDB4MWJiZjQ3NDgsCi0JMHhkZmM1ZTEzNywgMHg0YzM2ZjgwMSwgMHhmNmY0ZjExNywgMHg2YmRkMTM1NCwgMHgzY2MwZGI3YSwgMHhlNzQ2NTJlOCwKLQkweDQ5YmQ3YTIzLCAweGI3OWE3MTkzLCAweDgwZGIzOGNlLCAweDMxZDg3ODZjLCAweGNiZTUwNGJlLCAweDEzNzI4ZWUxLAotCTB4M2IwMDY3ZGUsIDB4Y2ExODZlMjEsIDB4NDZlZWE1OTksIDB4YmYzMGVmYmMsIDB4N2ZiZTk4YTYsIDB4ZDc3ZmM1YTIsCi0JMHg0OTMwM2QwOSwgMHhkZGIwMzlmMiwgMHg5YTNmNjM2NywgMHhkZTZjNDE1NSwgMHg3ZmRmNDU5NSwgMHg4OGRmZjExNCwKLQkweGJiNDRmZDc2LCAweGFjYTI2ZWQzLCAweGMwM2VmYTJlLCAweDQ1ZThlNTE1LCAweDgzZjY4YjlmLCAweGYxYTIxYWYyLAotCTB4ZjkxMmZiODksIDB4NzI2OThiZmYsIDB4OGIzYmY1MDIsIDB4ZTEyM2IzYjIsIDB4OTQ5ZDg5ZWQsIDB4YTllOWFmNmYsCi0JMHhjZGYyM2VhNiwgMHhmMjEzMGRiNiwgMHg3MTRmZTM1MSwgMHg3Y2M3MTA5ZSwgMHg2NDkzYzQ1NiwgMHhmMzdiNzJmMCwKLQkweDNmNGZkM2M4LCAweDM3YjFlY2VkLCAweGE0M2QwODc3LCAweGQwNTA5M2Y1LCAweDIyMDk5NTRhLCAweDc4YTBjNGVmLAotCTB4MjU2NGZlODgsIDB4NzU4MDFlOTAsIDB4ZmIxOTdkMzYsIDB4NjFkY2Y4OWUsIDB4NzE2ZDhlNWMsIDB4ZjZjNzRiNmYsCi0JMHgzYTZhYjkxNSwgMHg3OWQxNGJmYSwgMHg1MWVlZjVkZSwgMHhmNTdmYzhlOSwgMHhhYWZkMzU1MywgMHhhZmY5MjM1YSwKLQkweDdiZmY5ZGRkLCAweDc1YjQyZjNjLCAweGI5ZTQ1ODk4LCAweGM2Njk3NDdjLCAweGU0MWJiNTczLCAweGZkYzU5YmVkLAotCTB4Yzc0NzZkYzgsIDB4YmNiZTMxNTgsIDB4YzYxMjU2Y2QsIDB4YjY2ZGQ5ZjMsIDB4YmI3MjEyOTQsIDB4NDc4ZjNjNmMsCi0JMHhmMWIzNmY2YiwgMHhjYTliM2FiYywgMHgxYjM2ZDVlMywgMHhmMmQzN2JjZiwgMHgyN2RkZGE2ZiwgMHhiYjVhMGYwOCwKLQkweGZlZjhjM2UxLCAweGZmN2U1NGQ5LCAweDUyMGQ1ZTIxLCAweDFiZDkzOGJiLCAweGI4YWNiY2MwLCAweDY2ZjY0NjE0LAotCTB4Yzc3Zjk1OWMsIDB4YzhjMGExMmYsIDB4ZjlmYzMxYWMsIDB4ZWEyNjYxODIsIDB4NDk2NjViNjcsIDB4OWI1NGVjOTgsCi0JMHhkODc2NDJlYywgMHg0ZTkyNWU5NiwgMHgwZGYxMTI3MiwgMHhiYmRiZDZlMywgMHgxOWY3NDVmMSwgMHg2YjdjMDg1NiwKLQkweGYzYjdkNGZkLCAweGE5YmVkZTc1LCAweDA4YzU2ZTcyLCAweDhiYmQxM2I0LCAweGQ5Yjc0ZTkwLCAweGJmMzE1ODk2LAotCTB4ZGU5N2IyNTQsIDB4YzNmNWJmYjAsIDB4Y2E3Y2JhMGMsIDB4Nzk5NGZlOWUsIDB4ZDgxNWJmYTIsIDB4NTEyZjY0OWYsCi0JMHg4YjEzM2ZiMCwgMHhmYTBjZmZmZCwgMHhiYmZlYmNjNSwgMHg4MTk4MTVlNywgMHg2MGUzZGY0NiwgMHg5ZTRmYmI0YywKLQkweDY4Y2Y0YjFlLCAweDQzOWM1NWE1LCAweDBmZjdiZjQ0LCAweGZhY2Q5NWRiLCAweDkzZDgyNTc4LCAweDc1ODMwZDBmLAotCTB4M2I5ZTY2ZDUsIDB4NzA5ZTkxMzEsIDB4NWUzMWIyN2IsIDB4ZDg0OTE3N2MsIDB4ZGJjMmIyODUsIDB4M2RmOTFhMzcsCi0JMHg2MzdiZWQ0ZCwgMHgyNzI4OWQ5YSwgMHg3M2QwZjFlOSwgMHhjM2VmOGE3ZiwgMHgzMWM3ODU1NSwgMHhjNTE4ZGFhZSwKLQkweGY5ZjlhMjU3LCAweGJhNjNhOWVhLCAweDY3YTgxMDdiLCAweGM2ZGVjMjNkLCAweDhmNDhlZDEyLCAweDM4OTVjZjE5LAotCTB4OGVmYzZiNWYsIDB4M2YyOGJhNzcsIDB4Zjc3ZjlhYWEsIDB4MjkxOGE2YzQsIDB4ZjQwMGMyNWYsIDB4ZGRhZDc0NGIsCi0JMHg4YTRhZjlkZiwgMHgxMTVkN2Y2OSwgMHhhYjQ4NmFmYiwgMHg2ZGJmODk1MSwgMHhhMzJjNDJhMSwgMHhmM2JmN2JmOSwKLQkweGYzZjIyMTU0LCAweGZhZGQ2OWZlLCAweDZkNzVjMTU2LCAweGY3ZTVjYTQ4LCAweDU2NGU0ZjE3LCAweDVmYzNkOTYyLAotCTB4NzFjMjVmNzcsIDB4YTRkZGM3NmUsIDB4Y2Y1YzlkNjcsIDB4M2ZiZWJmZmUsIDB4YWYzNGU4ZDEsIDB4NjZkZWJkNDQsCi0JMHg5N2Y3ZmJkMCwgMHg1MGZkZGM4NSwgMHg5YWZkOGZmMCwgMHhkYmJjZjc0YywgMHgyMmVmN2M4YiwgMHhkZThjOThiZCwKLQkweGZiMDdkNDZhLCAweGJmOTM2NmViLCAweDUwMWUwMzI0LCAweDMwZGZlZWVmLCAweGMwYWYyYTJkLCAweDA4YjBmZWY3LAotCTB4MzI2YjJlN2UsIDB4MWFhNjc3ZDMsIDB4YmYyMDhmYzAsIDB4YTMxZjZhMmUsIDB4YjdlZGE3ZjEsIDB4ZjlhYmRiMDYsCi0JMHhiZmI2OWEzOSwgMHgyMTZjZDMxMywgMHg3NjRiYjc5MSwgMHhiOTY1MzM4NywgMHhiMzk4ZTUwMSwgMHhkOWYwNjdkYSwKLQkweGVjOTg3ZGIxLCAweGZkZGFiZThkLCAweGFkM2JjODRjLCAweGI3ZmIwZGJkLCAweDNjNGFmY2UxLCAweDhjNGM3YmZjLAotCTB4NmIyNGFlZjIsIDB4ZWM3ZmZmZWMsIDB4ODEwZjBhMzAsIDB4Y2JhYzJiMWYsIDB4ODJhYTc0NzEsIDB4ZWVjMjRhZmQsCi0JMHhlOGY5MTQ2ZCwgMHhkNWE5NGFmNSwgMHg5NGJlZjExMywgMHgxNDlkNmE1NCwgMHg3ZGY1MmY0MSwgMHg4NzRhODdjNCwKLQkweDk0MmJkYjc3LCAweGZjZTVhN2U3LCAweDYwYWY2ODRiLCAweGJlNGQ5ZjVlLCAweDIwNDcxZGRjLCAweDY3NWUyMGZmLAotCTB4NDdlMzZhMmYsIDB4OWNmN2JiOWYsIDB4YmUzYTczYjMsIDB4YmQ5Mjk0YWEsIDB4YmIwMThmMjgsIDB4NDMwN2VjMDAsCi0JMHg0ODliZDJkMiwgMHgzZjdjOWEzZiwgMHg3NDNjMDM0ZSwgMHhmY2ExNjdiZCwgMHgzZjA1ZjdkYiwgMHhlYzdlMGE3NiwKLQkweGQ4MDU2ZTRiLCAweGI3ZGNiYTUxLCAweDRiYzcxZDk1LCAweDI1Mjc0MDFlLCAweGY1Mjc0ODg5LCAweDM5ZGQ0Njk5LAotCTB4OGIxNjU2OGMsIDB4NWZiMGM2NzUsIDB4ZmM4Zjg3ZjIsIDB4OTBjYmY2NDYsIDB4MTdlYzMxZTEsIDB4Y2YyMjRmYjQsCi0JMHhmMTJlZDFjZiwgMHhiNDQ1Yzg0NCwgMHhlYzMxM2M0YiwgMHhmMGEzNjY5NywgMHhlNzc5YzRkZiwgMHhhZGFiOTM2OSwKLQkweGZhNzBmMDEzLCAweGNlZmE0NGU2LCAweGRiYjQ2OWNkLCAweGZiM2VjMDRhLCAweGRjNWNkOWU5LCAweGVlODY1OTk0LAotCTB4M2IwODUzZWYsIDB4NzYwYzExOTEsIDB4NWU3MDc3ZGEsIDB4MWFiYmNjNTUsIDB4MWNkNmZmZmYsIDB4ODgzZjFiYzksCi0JMHhmZmQxOTdlNywgMHhmYjc1ZjJhYiwgMHg0MGI4MDcxOSwgMHhmYmM3NmNiYywgMHgxZjc0NDU3MCwgMHhmOWQ2MzJhZSwKLQkweGU5YmFmN2RhLCAweDg4OTc0NTA0LCAweDYwMWUxMWMzLCAweDViZTIyMjE3LCAweDUxNzZlMmJkLCAweGEzMGMzYTcxLAotCTB4ZTZmZGU3NzQsIDB4ZmRiZjZlZjQsIDB4ZGFlMjgxYmEsIDB4ODgyYzdkM2IsIDB4YjViZmI5ZGYsIDB4N2I1NzFmNGMsCi0JMHhlZDk5ZTQ0MywgMHhjZjg4Y2E1YywgMHg4NmI0MTY3NiwgMHg1MzQ5NWZkMCwgMHhhYmM5YzUxOSwgMHg3M2Y2ZmEzYywKLQkweGUzYmZhMzJhLCAweGRkYmY4ZmFjLCAweGNmNDUzNWU2LCAweGQ2ZWJiZTk3LCAweGMwNmZhYzVmLCAweDk3MTRkNWVlLAotCTB4OGI4ZjE1ZWIsIDB4ZmFkMWMzOGEsIDB4ZjI5NDNmNTAsIDB4NDZhZGJjNzgsIDB4NmY2NTVmOWYsIDB4N2RkZjQxOWUsCi0JMHgxMmFlYWM2NiwgMHgzNGNjZTdkNywgMHhkYThmOGMzMiwgMHhjZmYzYTNhYiwgMHgxZWNmMDIwMiwgMHg5ZTFhNWExMiwKLQkweGQ4NzhlZmI1LCAweDdiZmM4ZDhhLCAweDU0MDk4MWE0LCAweGUxYzFlNWFmLCAweDNhMjcwNWY3LCAweDViNjVkNjdiLAotCTB4MmM1M2U2MmYsIDB4ZDg4MWFjZTIsIDB4ZjE4OWRhZWIsIDB4MmU1N2NjNDYsIDB4ODNjNDgzMGEsIDB4MzAyZTcwZmUsCi0JMHhhMzBkNDY0ZSwgMHhiYWMyOTllZiwgMHg4NzA1ZTc3NSwgMHhkMDM1NmY3NywgMHgwM2UxNDdmZiwgMHgzYzI2ZWQ3MSwKLQkweDk4MTNjZmU4LCAweDVhZmI0MGNmLCAweDgwN2YzZmEzLCAweDY4ZTBlYTc1LCAweGVjZWJmZWJiLCAweGIzYmJjM2Y5LAotCTB4NThmZjdlNjMsIDB4NTAzOGI1MmIsIDB4NzYxMGY4YWYsIDB4MzgzYTQ4MDAsIDB4NmNhNzdjNWMsIDB4ZjY4YTFiMjgsCi0JMHgyMzc4YWQ4ZCwgMHg0Yzk1YzNlZCwgMHgwYWNhZjc5ZSwgMHhhMWJiOWY2MiwgMHgwZGRmOGY5ZCwgMHgzMjdjOGE5YSwKLQkweGE2NzlmZDEyLCAweGYzMDJjZWZiLCAweDZmOWY5NGM4LCAweDM1NzNlMzI4LCAweGE2NzJmM2Y0LCAweGQ3YzQ2MjJiLAotCTB4YjEzMDc4OTYsIDB4YmNmZmYwNGEsIDB4MWZhMGY3OGEsIDB4OGMwMGIxNjcsIDB4ZGYxMDYzZGYsIDB4YmRjNDk2OWYsCi0JMHgyNjA2MmRhNCwgMHhkNTE0Y2MyMywgMHhiNWU0ZjNjYSwgMHhlOTA0M2NlZiwgMHg4ZDdkMGYzYiwgMHg4YjA3N2RhMywKLQkweGRhN2JmODA1LCAweDM3ZGZkMTM4LCAweDc0ZmJkMWJhLCAweDdlODk0ZDFmLCAweDNhZTI4MmJmLCAweGUxN2RmOGRhLAotCTB4MTdlZmFmYmQsIDB4OWRmY2IxZmQsIDB4OTUzZTNjOTEsIDB4YzM1YTc0NDksIDB4ZWJhNzFmYjQsIDB4MmI3NGRkYzUsCi0JMHg1M2I4M2M5MywgMHgwZjBmNGVhYiwgMHg3NzNlN2U0NSwgMHhmNzRhODI0ZiwgMHgwNDc1YjU2ZiwgMHg4ZWI0NGJhNiwKLQkweGY3NWZkOTZmLCAweDU5NWRkMjNjLCAweDU4ODFkZWZjLCAweGRiZWZlODk3LCAweDExN2U4YmFlLCAweDkzMDFhY2YyLAotCTB4MWE4ZTgxNmYsIDB4Y2Y5MWVmODEsIDB4MmU5MzI5NmMsIDB4YTEwZTc0YzksIDB4YmY4YmNmYmYsIDB4MzVmZDExNzMsCi0JMHhmOTQ5M2QxYywgMHhiZGM0N2IzYiwgMHhhNzVjNmQ3MCwgMHg4YTA0MzNlYSwgMHgzYzEwN2VmMCwgMHhkMDhmMTE4ZiwKLQkweGRmOGNhNWNhLCAweGY1ZTZkMjhmLCAweDM1MDQwMTdmLCAweDdmZTA1ZjZhLCAweDAwMDA3ZmUwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHg0NTE0NzgwYiwgMHg3NGY1NzBiNiwgMHg5OTI0Y2NmNywKKwkweGYyMTI0Yzk5LCAweDAwNDkzZGUwLCAweDIxMGUwMzExLCAweDk5NzBjMDQ0LCAweDQ2YTJjMDI0LCAweDE0MWEwMjBkLAorCTB4ODQ5MjAyNzUsIDB4N2U4ODk3OTAsIDB4MzNmZWFlZWMsIDB4YThhMDg5MDEsIDB4MTdhY2I5ZjEsIDB4Mzc2MTQxZGQsCisJMHgwYzA2ZThiMiwgMHg2MGUwMzUxOCwgMHhiYTJlYjMwMCwgMHhlN2MwNDVjMSwgMHgzNmJjODAyNiwgMHhiOWYwNDMyNCwKKwkweDlkNmY1ZWNiLCAweGRkMzNkNTUzLCAweGM3YzQwOTlkLCAweGZmZWY3ZmRlLCAweGE1NWY5ZjhmLCAweDcxZWJhYWJhLAorCTB4ZTlkNGU3ZGUsIDB4Mjc4ZjMyNDIsIDB4ZGYyMTBhNjQsIDB4OWY5NjhmYzEsIDB4Zjg5MDg0OGIsIDB4MjA2ZjU5NTAsCisJMHg4ODQxOTIyZSwgMHg2ZGY0NjZkNywgMHg4OGNmYTY0YywgMHg2OGU2N2EyMywgMHhkMTFkOTg1YSwgMHhlZjQzNTgzNywKKwkweDllZDVjYmU5LCAweDE4NjkzNGE0LCAweDFjNzkwZjIxLCAweDIzZTIxMjU4LCAweDVhYjU0ZTg0LCAweDE2ZjUwNTIwLAorCTB4ZTA5MzNiYTgsIDB4MjEzZTNhN2QsIDB4MGZmOGU4ZmQsIDB4MzBmOGUyNDYsIDB4MWExODk5MmQsIDB4ZTAzMTEwNjcsCisJMHhmOWFkNTM3YiwgMHg0MjFlYjA4OSwgMHhjM2U2NDc2YSwgMHgyMTNiMTZmYywgMHg5ZjlmN2JmZCwgMHhhN2ViODg4ZSwKKwkweGY3YzEwZGVmLCAweGI1OWVmYTI0LCAweDY1MjllZmVmLCAweDEzZmQwZTU3LCAweGY2NmRkZmY2LCAweGYxMDgxNDZkLAorCTB4NzFjN2ZjZWYsIDB4ODY5OWVmNTgsIDB4NWQxMzBlMzksIDB4ZDliNzc2NmYsIDB4YmVlYTA1M2YsIDB4YjY4OTlmNmMsCisJMHhjMGZiNmVlNywgMHhlNWZlZDEyNiwgMHhkYTA5NDRkYiwgMHhmMDIzM2IwZCwgMHg4Mjc1Y2VmZCwgMHhhNjk1ZWEwZiwKKwkweGE0YWU0N2Q2LCAweDkxMzZjMGY1LCAweGY4ZDMwZjNjLCAweDQwOTIwNjJkLCAweDYxMzM3MWM4LCAweGViMTU4NzNmLAorCTB4NWFhYzExNDUsIDB4NmRkNzdlYmUsIDB4YTM0OTVmMzAsIDB4ZjdkMDQ0ODksIDB4MmU4ODM3OGYsIDB4MjhkOTJmYTgsCisJMHhhZjlkMDhmOCwgMHg4YzA3YjVmYywgMHhjNTc4ZTgwMywgMHhjMjNlYTEzZSwgMHgxZjFiZWI0MSwgMHgzZWU4M2EzMywKKwkweGQ4ZmNlZjk3LCAweDdjZTE0NmQ2LCAweDBlMjY2M2RhLCAweGE0YTNlZTIzLCAweDUyOTA4ZDNlLCAweDAzZTk5NmRmLAorCTB4OWJhNWZiZTgsIDB4YmU4MDI3MDUsIDB4NGVkOWRkNzQsIDB4ODM2OTVmNTgsIDB4ZTNhNDVjM2MsIDB4MjI4YmFlMmQsCisJMHhlZTZjOTE4ZSwgMHhkN2NjMDhlZiwgMHhkYmU3MTQ3YywgMHhmOTgzMGYyNiwgMHg2NWRmY2U0YSwgMHg2ZWU1MjQwNCwKKwkweGNhMmU5MTkzLCAweGRmNjAzYWU5LCAweDNkYTdiY2NhLCAweDA1M2U3MTZiLCAweGQyMmZlNTllLCAweDhhYmY2OGY5LAorCTB4NmMyNzA1OTcsIDB4ZGM0MGMyYjEsIDB4ZDdjZThlYjAsIDB4YjA1ZTBhMjIsIDB4OGRhYWZlYzAsIDB4N2RlYWFjMjMsCisJMHg3ZDg3NmUxNCwgMHgxYmQ2ZmE5NCwgMHg3ZDYwNWJhNywgMHg2OTQ1OGRlYiwgMHhkNzE2ZjFhMSwgMHg3ZDc2YTdmZCwKKwkweGRkMTM1MzZiLCAweGYzZTNiZDY5LCAweDc0ODI4N2I0LCAweDRhNWVhODQ0LCAweDRmZTkwYjg4LCAweDhlODExOWYyLAorCTB4ODVlN2U3OTUsIDB4ZTJmN2M0MTgsIDB4Y2MzODkxM2EsIDB4M2ExNWYxYTEsIDB4ZTljMDdlZjAsIDB4ZjE5NTg3NzQsCisJMHgxMmRiYzcwMSwgMHg4NDJjZTAzYiwgMHhjNzNiNmViNywgMHg1NGM4MTRhMywgMHg4Zjk0YWY4ZiwgMHg3YWU4M2UwMCwKKwkweDJjNzYzZDZhLCAweDYxMjRmNzFmLCAweDgxYzdhNGY5LCAweDMzZGE3YjcwLCAweDFlYjVjYjEyLCAweGM2N2YzZTI3LAorCTB4NzVjYjAxMzMsIDB4Y2Y5NjE3MWUsIDB4ZTk2MDY2NzksIDB4YmY2M2U0ZjMsIDB4NTgwNTNkZTcsIDB4ZjFiOGYwNmUsCisJMHgyNTNkNmZmOSwgMHhhYTc5ZDY1OCwgMHhjZjI2ZjlmMCwgMHg3YjM3MmMzMiwgMHg2NWZjZjhiYywgMHhlYjJjMmFjZiwKKwkweDZlNThiNTNkLCAweGIyZDE3YzA1LCAweDdlYzNlM2MxLCAweDU4NzUzZGRiLCAweGYxZWE3YTM2LCAweDQ2OWVlYmY5LAorCTB4Mzg3MGQ3MmMsIDB4YjY0OGIyZGEsIDB4NzM2MGUxNDQsIDB4M2I0NTNiMTEsIDB4NjU3M2NkODksIDB4OWIxZWI0Y2IsCisJMHhmMzA5ZWFjZiwgMHg1YTQ2ZDliYywgMHgzYWQzNzA0ZiwgMHgzMjgwY2I4NSwgMHhkNjg5YjY3ZiwgMHhmNmIxNTQwNywKKwkweDFjOTJmNzIxLCAweGYxMGZhZDMzLCAweDM1OTRmNmIyLCAweDVhMDg5Y2FlLCAweGVkNjVhOTRmLCAweDczNzlkNjIzLAorCTB4ODQ3ZDY5MjIsIDB4ZGE4ZmI1OGYsIDB4YTI4OWNmZWMsIDB4YWNmNTUxZjUsIDB4YzkxMzRjN2QsIDB4MThmYWQwYjUsCisJMHhlZmE3YWIzZiwgMHg2OTVhZTU3MywgMHhkNTk1YmQzZCwgMHhlNmYxM2YzMywgMHhiMzNkNjhkYSwgMHhhOTNmYmQ4ZCwKKwkweDJjM2EyN2MzLCAweDU1YjBmMTNkLCAweDE0MjAyYzc2LCAweGI5ZGU0ZDU3LCAweDliY2E4OTJlLCAweDVkYzc0NmFkLAorCTB4N2JjODQ5YzQsIDB4ODkyZWY5ZGUsIDB4ZDkwNjg3Y2EsIDB4ZGU2ZGVkODUsIDB4NzQ2ZWFjYzUsIDB4NzdiNzdiNjEsCisJMHgyZWRmZjYyOSwgMHhhYTVkYjFiYiwgMHhiN2RiMGZiZSwgMHg5ZWQ4ZGQxYiwgMHhlZDgzNWQ1MCwgMHhkYjE3YjI4ZCwKKwkweDhhM2Y1NjQ3LCAweDJmNDY4ZGVkLCAweDVlYWE0ZmI2LCAweDY1ZDdmNThiLCAweDU1ZTdiNjFmLCAweGFmZmVjN2FmLAorCTB4ZmVkODdkMWIsIDB4NWM5YmZkZjgsIDB4MDVmZDY5NTMsIDB4ZTQxZGJkYzEsIDB4NWRjMTBhZGUsIDB4OWU4MTUyNDIsCisJMHhlZTQwOTNlYSwgMHhmOWY5NzBkNSwgMHg2ZDFkMTAxYywgMHg0NDZmZTlhZiwgMHg2ZWZhZGMzZSwgMHhiZmMwMGJlNiwKKwkweGY1MDdlYmY4LCAweDk4M2VkZmEyLCAweDg5YmNlMzhjLCAweDFjNzRjOGUzLCAweGE0ZTNlMmYxLCAweDMzNDEzN2JmLAorCTB4MjU3YmZhNGUsIDB4MzgyZDM4Y2EsIDB4YzZkZjQ0NGUsIDB4MjRkZWZhZDksIDB4MmJkZTdhZWQsIDB4MGZkOWM2NTUsCisJMHhkYWMyYjRmYywgMHhmZmE1N2RiNywgMHg5ZWJiNGIzOSwgMHhlMzI5OTczZiwgMHg4OWViODQ3YywgMHgxYTdhZGJlOSwKKwkweGE3YzJkMDNlLCAweDdjMjA4M2UxLCAweGYxMzhlMjhlLCAweGM2NGY1YjdkLCAweDMyN2MyZDQxLCAweGQzZTEwNjBlLAorCTB4ZWZmNGUzODEsIDB4MDcwZDM4ZGIsIDB4Mzg2OWYwYjUsIDB4OTdjZjg0MTgsIDB4N2RjMTlmMDgsIDB4MjFjNjU3ZGIsCisJMHgwZTMyN2MyZCwgMHg1ZmYzZTEwNSwgMHhiZWU0OWViOCwgMHg1M2ZkYjM4ZCwgMHg3ZmI2N2MyZCwgMHg0OThmODQxYSwKKwkweGVmMGNmNTgwLCAweDNmMzJiZWRiLCAweGYzMjdjMmQzLCAweGVjN2MyMGIzLCAweDdkYTVjZTM4LCAweDY3ZmI2NzFiLAorCTB4ZmY2Y2Y4NWEsIDB4ZmU5ZjA4MmMsIDB4YmVlOGNlMzgsIDB4YWZmMzJiZWQsIDB4ZmU2NGY4NWEsIDB4MTQ5ZjA4MzUsCisJMHhiNjMzZTAwMSwgMHhmYzY5ZWI2ZiwgMHhjNjlmMGI1YywgMHhiOWYwODNjZiwgMHhkZjE5YzcwYywgMHgzODRjZjViNywKKwkweDg0Y2Y4NWFlLCAweDY0Zjg0MWUzLCAweGY2MjZiZWUwLCAweGUzYzY5YzZkLCAweDFlMzRmODVhLCAweDMyNjdjMjBmLAorCTB4NmZiOTMzOGUsIDB4NDI3MDlhZmIsIDB4MjcwOTlmMGIsIDB4OGU5OWYwODIsIDB4ZWJiYjY0ZTMsIDB4Yzc0NjUxOTgsCisJMHhjZTNlZjZiMSwgMHhmMGI0NjdlYiwgMHgxMDRjZmQ3OSwgMHgzOGUzZDczZSwgMHhhOTM4ZThkMywgMHg1MjY3MWYxNywKKwkweDkzM2UxNmE3LCAweDI5ZjA4MzNhLCAweGVhYWU3MWMwLCAweDc3YWYzOGRiLCAweDdhZjNlMTZhLCAweDg1M2UxMDY3LAorCTB4N2RiNWNlMzgsIDB4MmVhNGQ3ZGIsIDB4NzUyNjdjMmQsIDB4M2I4Y2Y4MzEsIDB4YTM2Yjk1NTAsIDB4M2ExNzU0ZWQsCisJMHg5NWNhZmE0NSwgMHg0MDk3MmUxZCwgMHhkNTlkYTJlYiwgMHg4MDkzYmI0NSwgMHhmNjJhMjI1ZCwgMHg4OTc1NjkwNiwKKwkweGU2Y2I3ZGY0LCAweDg5MDdmNDk4LCAweGI5YzhlZWRhLCAweDRhYzdlODEzLCAweGRkYjUzMWFkLCAweDUyMjEzZDExLAorCTB4YjhjNGU3NjMsIDB4YjhmNTM1NjIsIDB4ZmQzNDAzMTksIDB4MzQ1M2YzZTMsIDB4YTMwNTg5ZWQsIDB4ZGRmZGVkMzQsCisJMHhjMGZhOWFlOSwgMHhmZTlhNDk5MiwgMHgzNDcyYWI4MywgMHhhZWNiYTFmNSwgMHhmNjRmZjRkNiwgMHhhN2E5YTBkZSwKKwkweGQzNTliYWFlLCAweDdjZWQ3ODdmLCAweDZiMjVmYjRkLCAweDk3ZWQzNTRiLCAweGVhNjg5NmZhLCAweDQyZmRkNTk3LAorCTB4ZmQ3NDdmZDMsIDB4ZTVmYjRkNzIsIDB4ZGE2YTBmOGQsIDB4ZDcxZmZhYzcsIDB4M2NiNWM3ZDQsIDB4YmUzZmU5YTMsCisJMHhmYjRkNzlmNSwgMHg2OTM3ODcxNSwgMHg2ZGI2MjdkYSwgMHgzY2FmZDRkNSwgMHhjZWNlYmFmOSwgMHg1ZjhmZDhiMywKKwkweGQwMjJlYmM2LCAweDdmNzY2MTNkLCAweGY4ZjdlNjdmLCAweDFiYWM0NmFkLCAweDhlZDA1ODA3LCAweDcyMmQ2NWRmLAorCTB4MzVmOGEzMWMsIDB4ZDFjMGI1YmUsIDB4NzAxN2UyOGYsIDB4ZjY0NTdlMGEsIDB4ZGE0YjkyODAsIDB4MjY3YmYzZTgsCisJMHhkM2IxMmZiOSwgMHhkZDE4ZjdlNywgMHhkOGMzZGI5NywgMHgwNDFlOTRhNywgMHhjM2E1MDQ5MiwgMHhmZGJlYTUwMCwKKwkweDYzZDE5OTAxLCAweDIzZjNjMGNlLCAweDk1ZmJlOWRhLCAweDE4ODhjMDg2LCAweGIzMTJjZjVhLCAweDc3N2U4MTFiLAorCTB4OGEyZmNjMGEsIDB4ZjQxNTQ5MTQsIDB4ZjQxMTM0OGIsIDB4Y2U0ODFlMGIsIDB4YTJhYmMxN2MsIDB4Mjk4MzU1ZDcsCisJMHg3MWExMGExZiwgMHgyNGVlYzk1NywgMHhhYWRlMzNiMCwgMHgxZDgyZjc2ZSwgMHhlZTk4MzM1MiwgMHhjZDIxMDA2YiwKKwkweDRiZGZiYjQyLCAweDA2MDdiNGZkLCAweGU5YjkyNTE3LCAweGI1MjMyNjc4LCAweDFiZjNkNWQzLCAweDM4NjlmY2U5LAorCTB4ZWJkMDBiN2YsIDB4N2M3ZjMwN2IsIDB4Mjk0ZGY5Y2YsIDB4OWJmMzM0MTMsIDB4ZTY2ODk0ODcsIDB4ZmNlOTFiMzcsCisJMHhhZmRlNDI3NiwgMHhhN2U3YzUzZSwgMHhjODQ0OTg0OCwgMHgzODUzODQ1ZiwgMHgwOTQ4NjliZiwgMHg5MTgwZmZjZSwKKwkweGY5ZWEyYmZhLCAweDFmZjM4MzIzLCAweGQ2N2ZmZDg2LCAweDI2NTNmZWRiLCAweGE0M2ZmNzY5LCAweDIzN2ZiYjU0LAorCTB4ZWE5MWZmZGIsIDB4NDhmZTdjYjMsIDB4ZTE1MWZmZGMsIDB4OTBmZmRiMmMsIDB4MTM3ZmI2NTIsIDB4YmYzODM3MWIsCisJMHg5M2ZmMDgyZCwgMHgyZjY3N2YzMCwgMHhiMzUyOWJmMywgMHg1YTFmZmJiNCwgMHg4OWJmZGRhNiwgMHhmZDVkZGZjZCwKKwkweDgyZGY5ZjJkLCAweGJlMTM5ZmYzLCAweDVhMWZmYjY1LCAweDRkMWJmMzg2LCAweDhmZDAyNzZlLCAweDk1NjQ2MDcxLAorCTB4MWQ0ZmNlOGYsIDB4MDQ0OTA3NjEsIDB4NDBmM2ExNzIsIDB4ZmQxNjMyMzksIDB4MTQ4NDk3ZTQsIDB4OTEzZGM3NWMsCisJMHg4YWJlZGU4YywgMHhmMjg2ZjRhNCwgMHg1OGZjY2JjNiwgMHg5OTZjOTUxZiwgMHhiNGUyZWZkNCwgMHhiNjczNzhiZSwKKwkweGI2MTJlNDExLCAweDIxNjU3ZjUzLCAweDhkMWRlYTVmLCAweDc5MzdkMjIyLCAweDRlMWJlNGQyLCAweDI4ZDlkYmQ3LAorCTB4Yzc3ZWExN2EsIDB4MjA3ZDkzOTMsIDB4ZTQ0ZDJhZmYsIDB4NGY3ODdjZjYsIDB4ZmU3ODdlMjIsIDB4OWZhMzUzZjksCisJMHg1ZjRiZWY1NywgMHg4Zjk1YWMyZSwgMHgyZGY4YTliNywgMHg5MGU1NDdlOCwgMHg5ODE2NTU5MSwgMHgxZmE5YWVkNywKKwkweGExMTA3ZWExLCAweGQ0MjdjNWZlLCAweDI0OTQyMGNmLCAweGJlNmNjYThmLCAweDA0YmZhOGNmLCAweDJmZWEzNmY1LAorCTB4ZDUyMTNiNDEsIDB4NzVlMjVmYjgsIDB4YWU4YzMwN2QsIDB4M2YyODlmM2YsIDB4MjZmM2VlMTcsIDB4OWUzYTI5NjQsCisJMHhjOGY3ZjhjNCwgMHhmODA3YzExYSwgMHgxNDU5N2RiOCwgMHgzZDY4N2UwNSwgMHg0ZDM4ZGU4NSwgMHhmYjBmZWU5ZCwKKwkweDdjMTJhZTA3LCAweDg2MzgwYmNmLCAweDkzMzNlMDFiLCAweGJkNjA0NzhmLCAweDY3NjA1ZWI0LCAweGU4YTIxY2VmLAorCTB4YjA1MTRmZWYsIDB4OGE0MGQ1NjAsIDB4YjMzOGQwOGIsIDB4YTQ0ZTRiODgsIDB4NWE1OWNmZWYsIDB4YTJlODQzMjgsCisJMHgyZjA2MTA1NSwgMHgyMDU5ZmEwMSwgMHhlMDExOTc1MywgMHg2OTI3OGRlNywgMHg3YWU4Mzg5YywgMHhmMWIzYjY2ZiwKKwkweDYzZTRiYTY3LCAweDE0ZjVhYTZkLCAweDNlNTc2NmM4LCAweGExNDE0ZjVkLCAweDM1OWZlYjg4LCAweGQxZmVkYjQzLAorCTB4NjE5NzI4Y2UsIDB4M2Q1NzJkMGMsIDB4YzljY2YzODEsIDB4NTRkZmI2ZDcsIDB4NzVjZmFkYTAsIDB4ZWY1NGViNmIsCisJMHg2ZWY3YTBjOSwgMHhhNzNmZDEyOSwgMHg5Y2ZiYTE2MCwgMHg1ZDJiODQxNywgMHhhZGU3NWQyOCwgMHg1NmI3MGUxYywKKwkweDVlMGQ1ZWM5LCAweGRhNTU2ZGMxLCAweDI2ZTBhMDIxLCAweDVmN2MyZmI4LCAweGY2ZmZkOWVjLCAweGExN2FkYTY1LAorCTB4YjA1ZjViNTcsIDB4YTczZTM3NGEsIDB4ZmYxY2UzOWIsIDB4NjgzZTgwNDcsIDB4ODNlODAyNzksIDB4YTcxOGYzYzIsCisJMHhkNTVjOTA4ZiwgMHhjMThkYzdkMiwgMHg1MGZhMzA2ZCwgMHg2MjVjNzFmNiwgMHg4ZWJlMzgyOCwgMHhkYWMyYzdkMSwKKwkweDUwZjRmMGE4LCAweDk3MDdhNDE4LCAweDdhMTRiZTlhLCAweGMzZDM4ZGI4LCAweDhhMWU5Y2E3LCAweDZhZTk2YWQ3LAorCTB4NGNhZGYxMmUsIDB4YjJkZmVmYTIsIDB4ZTllMjE3NjYsIDB4ZThjODUwYTAsIDB4M2QwYTk3ZTEsIDB4YzFlODY5YjQsCisJMHg4ZjQxZTljZCwgMHgzZDM4ZGJiZiwgMHg0NjczZjZkYywgMHhiNjdjN2EwZiwgMHg1YjY4N2E3MSwgMHgyOTI2NGU3YiwKKwkweGYxNGFmMTNkLCAweDNjNTNhOWEwLCAweDM3NmVmMGU4LCAweDdjNTAzZDAyLCAweGY5ODdhNTg0LCAweDhkZDM3ZGMxLAorCTB4ZGUwMmZhZDMsIDB4OWM1ZjAzZDYsIDB4MDUzZGIwMWUsIDB4NGUxMDRlYzAsIDB4Y2Y2YTdlZjgsIDB4Njg0ZTU0ZmUsCisJMHhjMzZiYzVlYSwgMHgzMWIyYmZlMywgMHg2YTk4ZWUzYiwgMHg1N2Y1ZTU1ZCwgMHhmNTUzMWRjNSwgMHg1MzM3NWM1YiwKKwkweDliZTQ1ZjUzLCAweGJjNWZlOWFiLCAweGJlZDM1MGI2LCAweGE2OTE3NmIwLCAweDNiYWFjMTdkLCAweGVmNDJmNTM1LAorCTB4NmZmZDM1Y2YsIDB4NjlhZDU2NWYsIDB4YjU2YWI1YmYsIDB4OTI5NmZkYTYsIDB4YjlmNTM0YzcsIDB4ZmE2YjVmZWUsCisJMHg1ZWIwNTRkZiwgMHhmZjI3M2VkMywgMHhhY2ZiNGQ0NSwgMHhmNTM0NWIxOSwgMHgzNGQ3YWU5OSwgMHgyZjNiMGRmZCwKKwkweDMxZTgxZWJkLCAweGMwNDhhMGViLCAweDcxZTYzOGZlLCAweGY3MWZkZDIwLCAweGE0ZjJjNDhjLCAweDcxN2M4OWM3LAorCTB4Y2IwMTMzZGEsIDB4NGZjZDhkN2QsIDB4N2NiYjQ5NWMsIDB4MjY4ODI4MTksIDB4OTExNjdmNGMsIDB4MmNmNjQyMTgsCisJMHhjYWFmNTc3NywgMHg1MDRlN2QwMiwgMHg3OTcxZmVlZiwgMHgxMDc3YjU1MSwgMHgwNzA2NTM5NSwgMHhhZDZmMzljMiwKKwkweDExYzdmODkxLCAweGUyNTI4MDIyLCAweDUwYzQwN2YzLCAweDZkMWI1NjdiLCAweDNkYmRlYjhmLCAweGI2MTRhZDZmLAorCTB4MGE0ZGFiM2QsIDB4ZTNlNTZlM2IsIDB4NjFlZDQzODUsIDB4N2UyMTMzZTIsIDB4M2VjMTAzMjYsIDB4YjlmNmUyZWEsCisJMHgyMDRjYmRiZSwgMHg4NGU3ZWFmOSwgMHg4ZmZlNDcyYywgMHg1Y2ZkMzAzMSwgMHhhMjcyNjQ2NiwgMHgxY2ZmNmI2YywKKwkweDdmYmE4MzYyLCAweGU2ODVkNTQ0LCAweDk1Y2NhN2FiLCAweGFhOTFmNDA4LCAweGI1ZTJlM2UxLCAweDNjZTQ2OTk3LAorCTB4M2M2ZGU4ODEsIDB4Y2QzOGQ5ZDAsIDB4NTc3NWM1ZjMsIDB4ZDhlYmRlNmEsIDB4MmJiYWUyMjUsIDB4N2Q1MDg2NDAsCisJMHgwN2U0OGMzZCwgMHhmZDk3YTAwYywgMHg4ZDY2NDNjZCwgMHhjZWJhNzU4NiwgMHgzNTVlNDAxYSwgMHhkOGZkYTNjNiwKKwkweDc3MTE5OWUxLCAweGU2M2MwMjRjLCAweDUzZDI3OTYzLCAweDhmNzFlNTgwLCAweDllNjNjYjFiLCAweDc4OGYyYzEyLAorCTB4ZjM2Y2IwYWEsIDB4MzNmMmMzMmMsIDB4NGZjYjE3OGYsIDB4ZmNiMGFiM2MsIDB4ZTU4YjUzYzgsIDB4MmM1YWNmNjEsCisJMHg1ODdjN2EwZiwgMHg2MWQ0ZjAxZSwgMHgxZWE3YmVmOSwgMHgyMzRmNTZjYiwgMHgxNzFlOWQ5NiwgMHgyOWJmMGE5NiwKKwkweGRkZDNkMGYwLCAweDRmYTdhZTQ5LCAweDgwNWRmZDAzLCAweDA3YzRlMmNlLCAweDBhMGQ1N2FhLCAweDhhZTI1OWQxLAorCTB4NTliZGFiODcsIDB4ZDZmMzcxYTEsIDB4MjQ5ZDM4OWEsIDB4MDg2MWU4NjgsIDB4ODFlMzY0ZjgsIDB4NWU5YzRjNWUsCisJMHhhZGU3YjdjMiwgMHg5ZWQ4MmY5NSwgMHgxZDg3MjZkNSwgMHg3ZmY5ZjJiZiwgMHhmOWNkYmQwZCwgMHhhMjE2ZjQ5MSwKKwkweDdhM2E4MWE3LCAweDNkMThiZDRhLCAweDg3YzcxMjRkLCAweGMxOGU2OWU4LCAweGE3MWZmNGNlLCAweDFmNjA4N2E3LAorCTB4NjI4ZmZjNjEsIDB4YWJjNmVhMzAsIDB4MTQ1NzNhZWMsIDB4NzNmMzY3OGIsIDB4YjJkMTZhMDcsIDB4N2I5ZjM2NzgsCisJMHgxNWFlMWQwNSwgMHg0OGRmM2ZlZCwgMHhjOGY3NzNjMCwgMHg3ODgwOGZiZiwgMHhhYTYxZjc3ZCwgMHhkZjdiOTMyOCwKKwkweDdhNWU5ZTlmLCAweGZkMGJiYjg3LCAweDU1MWYyMmEwLCAweGI2N2FlM2EyLCAweGI4MzI0NDQ3LCAweDBjYzgxODQ2LAorCTB4ZWFjODRlOTIsIDB4Y2U3NWJmZTEsIDB4NDRiYWMzNGYsIDB4OWY3ZGUxNjIsIDB4ZjM5ODY2NzMsIDB4NGY2NzAyMjgsCisJMHhlYjg3MTc4OSwgMHg2MzU3ZWIwYSwgMHhjZmUzYmM2MCwgMHhjYTEzMjNmYywgMHhlNjE0ODYzOSwgMHg2ODhiMzRkZiwKKwkweDBiZmYxM2RmLCAweDUwNmY4MDRlLCAweDQ5OWM5OTFmLCAweDBjMGYwNzEwLCAweDNlZDFkYTM3LCAweGYwYjQ1OWYwLAorCTB4NjY3YWQyZjMsIDB4MjlhYjdlMDgsIDB4ZGY1MTVhOGMsIDB4ZmMyMTI2ZDcsIDB4YTIzNTdkODYsIDB4NzdlMDFmN2YsCisJMHgzMTdmMzkzMSwgMHgwZGY3Y2U3OCwgMHhmM2MwOTdmOCwgMHg2MmYxZjI2MiwgMHgxY2I4OTE3MiwgMHhmZGQyMzcyZiwKKwkweDlkMWNlZDc3LCAweGU0MDNhMGZlLCAweGFkZTE4NWUwLCAweGQ3ZTk1ZjljLCAweDdkMjhiY2YzLCAweDRhZWUzYTJmLAorCTB4NzViOGU4NTAsIDB4ODhmM2ExMDgsIDB4ZWZjNzFkYTIsIDB4Yzk4NGI4NmUsIDB4ZGJlZWM1MmYsIDB4MDVmNWYyNjYsCisJMHhiNTkyNjdhZiwgMHhmOWM1M2RlMywgMHhiYmFmMTk0ZiwgMHhmODFiMDVlNSwgMHgwYzkyNGI1YiwgMHhmMDYxNjNmNiwKKwkweGY1ZTU5NGEwLCAweGRhOGI3NmM5LCAweGQ2ZDQ2Y2ZlLCAweDE5ODU2YmJiLCAweDNhMjc2OGY1LCAweDA2OGY2N2EyLAorCTB4MWZiNzYxM2QsIDB4M2I3MjA2MWIsIDB4OWM2NTRiMDksIDB4ZmI0NjQ5MjUsIDB4NGVmNzJhMzEsIDB4MzM0NmE1ZDcsCisJMHhlNGM3Y2YzZiwgMHg5NDE4ZTZjMSwgMHg2NjNkYTcxNywgMHhhZjUzZmZlYywgMHg5NDcxYjdhNywgMHg0MGQyMTBmNSwKKwkweDFlNDE5YThlLCAweGRlZDRiNmQzLCAweGNmNGFmN2ZiLCAweDNjNDYxN2QyLCAweGJmOTI2ZGY3LCAweDRjZDBmYjAyLAorCTB4ZmMwZWZmZmYsIDB4NWQ2MTIyMGQsIDB4NWViMmI3MTksIDB4ODcyZTlhZjQsIDB4ZjMzNTliZTcsIDB4Y2ExY2Y3ZDEsCisJMHgyOTc3ZWIxOSwgMHg4OTFiZTIxNywgMHg5NmU4NTcxYywgMHg1YzYzOGJlYSwgMHg4YmFlMmM5ZiwgMHhjZmVkNmJiMCwKKwkweGIyYmQ0ZDE4LCAweDYzNWRiZmIxLCAweDU0MWZjMjhmLCAweDQxMmE5MmZlLCAweGUzMjlmYTAyLCAweDU5MjVkM2U0LAorCTB4N2Q3NDA5NTYsIDB4MTA5MDQyNmYsIDB4ZmQ2MDU2ZTgsIDB4NDY2ZGNkY2EsIDB4OTVjZTAzYjcsIDB4NWI3YWRlMTksCisJMHg0Y2RmYzUxZiwgMHg4OTdjOTI4OSwgMHg2MWNmMTZiOSwgMHg5ZDJmZWE0YiwgMHg0Y2U2N2EwYSwgMHg4ODA0OGFjMywKKwkweGJiMTYyYzFiLCAweGYzMGZjOWVmLCAweDc5MzEyY2JlLCAweDA3MjdjOGJmLCAweGE3M2RmNmI0LCAweDU1Yzc0MjBmLAorCTB4OTQ1YzYzOWUsIDB4ZWFhYjhlNTgsIDB4OGYxNjA2MWQsIDB4MDA5YjhmZDEsIDB4MWM1ZmM2ZTMsIDB4Zjc5YjE1M2UsCisJMHg0MTNiMDc0ZiwgMHhjNjhhYTcwZiwgMHhjYTM3NDZiMywgMHg2NjVmZmE0NSwgMHhmYzBhNGUwOCwgMHgxM2YzMTRkZSwKKwkweDY5N2UzYTI0LCAweDJkYzYzYjVkLCAweDExZGVjYTRlLCAweGJjODBiY2JmLCAweDRiM2ZiOWVjLCAweGQ1MjhmMWQyLAorCTB4MTVhNGJjYmUsIDB4ODEzZjk5ZTYsIDB4MzcxYzQ0NGYsIDB4ZjhlNTRjN2QsIDB4MDRjOTNmYTksIDB4NGYzOTEwZTQsCisJMHg0ODYyNjU3YiwgMHgwNjNiZmI4NiwgMHhmOTBjYzg2MiwgMHgxNjFiZjMzYiwgMHg0ZmJjMDFlNywgMHhlNTQ3YmY4MSwKKwkweGRmMjQxZGU2LCAweGI1MjA3ODg2LCAweDljZGZlMDk5LCAweDAwMTk4NjIxLCAweDdkZTQzM2E3LCAweDFlMTUzOGRiLAorCTB4ODcyMzI1NzIsIDB4OTQ4Mjk1MzMsIDB4ZjFjMTRjMWUsIDB4ZWZjMWZkZGQsIDB4YjRkNDE1MzIsIDB4YjllMDYzOGEsCisJMHhjMjNmZjhhNCwgMHg3MjQ3MTg3NywgMHg1MGI3OTgwYiwgMHg4OTdiOWVjMCwgMHg5N2U4MWFiOSwgMHgzZjFhNTFmYSwKKwkweDlhNTFmYThkLCAweDM0YTNmNTNhLCAweDQzNzIyMmY1LCAweDE0MjVlNDAyLCAweDlmMTMyOTNkLCAweGI0ZDI3MDgwLAorCTB4ODhlYzkyOGYsIDB4NTU1MjYyYzcsIDB4YWZkMWY2MDMsIDB4YmU2ZGZjNzksIDB4ZTkwMzQ4OWQsIDB4N2Q1ZmNiM2UsCisJMHhlZTkwYjMzNiwgMHhjNTg5NmFlNywgMHhmNTczOTRmZCwgMHgwZTBjYjE0NSwgMHhhMzNlMjVhNSwgMHg3ZjczZDJjYiwKKwkweGRkYzYxYjQ3LCAweDhjM2YyNTQ4LCAweDZmY2ZjZWM3LCAweDA1MWU2MjM2LCAweGRjOTk0YWI0LCAweDdkZTk0OWY0LAorCTB4YTIwZDg5ZmYsIDB4ZmQwNmMyMmIsIDB4YmQ2NTczZTgsIDB4ZmY3ZmRmYzksIDB4ZjIxMmZkZmEsIDB4YjRhM2VlMzgsCisJMHhmYTAxMjY2ZSwgMHhjMDI3OTFlYiwgMHgwOWQ3MjNmNywgMHg3ZTE4NWYyZSwgMHhhZjc0ZTQyYSwgMHgwMTNiYTdlOCwKKwkweGYxNDNlMzdlLCAweGY1NzRmYmFjLCAweDRhYmUxY2Q1LCAweGZiNWQyOWZkLCAweGZkMmY5NjBmLCAweGJjYmU0Njg4LAorCTB4OTNlZmJhMjksIDB4MDI3OTMzYzYsIDB4MDBhNDE3ZjAsIDB4MWUwZmQ3ZjIsIDB4ZjhjN2E5M2YsIDB4N2YxZjgxYWIsCisJMHg2OTA3ZjFiMiwgMHhmZjhlOWVmOSwgMHhmZWJhNGZkNCwgMHhiZmQ2M2Q2MSwgMHhjYmZhZGMzZSwgMHhiYjY5N2Q1ZiwKKwkweGQyOTdlYTk3LCAweDIzNjUzYzNmLCAweDQ5NGVkZjk0LCAweDhhNGUwOWI1LCAweDJiOGRiMmY3LCAweDNiOTAyZTZkLAorCTB4N2MwNmQ3OTIsIDB4Y2UyN2NhNzEsIDB4ODcwZjQ3MDgsIDB4MDZhNTdjYjgsIDB4Nzg4MDQ1ODgsIDB4Yzc0OWZjMmIsCisJMHhhMWU5YmQzZiwgMHhmODllYzBlYiwgMHhjNzZjYTM2YSwgMHhjOTlkNmEzOCwgMHg1Y2Y0YTI2ZiwgMHg4ZjI4YjBkMSwKKwkweDNiN2FjMThjLCAweDE2NzAzZmFiLCAweDUxYjJiZmU4LCAweGQzYTZhMjNlLCAweDk1M2RkZmQyLCAweDk0MzU3OTAwLAorCTB4OTIxYTA2NTIsIDB4N2ZhM2Y0YTAsIDB4ZjNlMWIxNTIsIDB4NTQ2ZjYwZTksIDB4YWJmMjAwOTIsIDB4ZmY5ODNkZmUsCisJMHg4N2Q0NTg5YiwgMHg5ZWU4YzY4NSwgMHg0OTk4MThlZCwgMHhhZmQ5Zjc4MCwgMHhiM2ExZTFiMiwgMHg2YWZlMGRhMiwKKwkweGJlOTAzOGMzLCAweDM3ZjcwOTdmLCAweDNmNmIyNDVhLCAweDgyYjkyNzNjLCAweDU0ZjIwMTVjLCAweDMxZjEwNzgxLAorCTB4OGJjNTYzN2YsIDB4NGVkMzFhYmYsIDB4ZTFiMWQzZDcsIDB4MDU0MTM2NGYsIDB4ZWE0ZmM1MjcsIDB4OWJmMDVmYWUsCisJMHhjYmJkMWRkNywgMHg4N2NhNGVlZiwgMHhkMTU2YmI2YSwgMHhlZTQ2OGU0ZiwgMHhiMmIxMzUyNywgMHhhZWRiZjY0YywKKwkweDZjYTRmMmE0LCAweGQyZjRlY2JkLCAweGJkMmY2NWM3LCAweDIwNjdkYmYwLCAweGM5YTFmZDdlLCAweGJmOGU5YzM5LAorCTB4MDczZGE1ZjgsIDB4ZTJmYWQxMjcsIDB4M2NiZjcyMmQsIDB4OTA4YjBkYjYsIDB4MjU0YmMyMTAsIDB4N2E1OTdmZmQsCisJMHhhZmE1MGYwOCwgMHg0NjNhMzFlYywgMHhjNmY3ZTdiMywgMHg3OGIxZjA4NiwgMHgxOTIzMmVjYiwgMHhiOTFlMTNkZCwKKwkweDZkOGNiYmY1LCAweGE5NzgzMDk2LCAweDc2MGU5ZjZmLCAweGJmMTc4YWRmLCAweDNiYmM4MjM2LCAweDg5MjA1M2I1LAorCTB4YjllMDYxYzksIDB4ODVkYTBmN2UsIDB4MjNjNDI3MDAsIDB4NmYxMDUzYzcsIDB4MTQ5NWZlYmEsIDB4MTQ1ZmEwMmYsCisJMHgzN2RiZTkzYywgMHhlMzAyNzk3MSwgMHg5ZTkwZDIzOSwgMHhjZTlkN2U1ZiwgMHhjOTkxZjI1ZiwgMHg3OTJmZmIwOSwKKwkweGVjMWIyZWY5LCAweGM1NTQ4NGUzLCAweDk1ZDlmYWU4LCAweDRhZGYyMDA5LCAweDFkODI2ZjY0LCAweGU0YmNmNjRiLAorCTB4ZGU5MWJiYjksIDB4OWRkZmY3OGEsIDB4YWU5MmUyYzAsIDB4OTVkNDA2ZmUsIDB4YmZiMGZlZGUsIDB4ZTBlNmViODUsCisJMHgxYjg4OGFmZSwgMHg1OWU0YWVlOSwgMHhjYjQ3ZGYzMSwgMHg2MzMyMjUyZiwgMHhiOGJlMTg0YiwgMHhmMjcyNjY1NiwKKwkweDIzNTRmM2M0LCAweDUwOWRmZGQwLCAweDIyZmJjMGY0LCAweDYyNzcwM2Q3LCAweGJlNmVmM2RjLCAweDYyMzE2YTE3LAorCTB4YzMzMzRiZmQsIDB4YzBkOTMwZDMsIDB4MmJkMzJjZTUsIDB4ZjBkZDdhNDEsIDB4ZDM4YmVhMDAsIDB4NzA4OTVkODMsCisJMHhkMjE5NTZiZSwgMHhjNDM3YTgwZiwgMHgxOTEyZDNmZCwgMHhjMTllOTg3ZSwgMHhjOTllYThmNywgMHhiZmQwZTc4NSwKKwkweDhjNDU3NjU1LCAweDdhODdiY2QxLCAweDI5N2Y5OTQ1LCAweDNiYWU5ZjlmLCAweDEzYjVlYzEyLCAweDhmZmRlMTA5LAorCTB4ZGYwYWNiOWYsIDB4NDU0MmJiNTMsIDB4NjZmZTJhNWYsIDB4MzU2MWJlZmMsIDB4ZGY4NTZmZTMsIDB4NDA2NzMzN2QsCisJMHgxODA3MTdmYiwgMHhhMDdiYzBmZiwgMHhmY2JhZTk2NywgMHg2YmJlZDg4OSwgMHhjMGYyODBiNiwgMHhmOGUxZmM0NCwKKwkweGY5Y2M4MzdhLCAweGQwYWVkYjVhLCAweDI0Yjc1ZDA5LCAweDA1ZThhYjQ0LCAweGY4NDU4ZmM2LCAweDdhMmY1ZWEzLAorCTB4OTJhN2JlOTIsIDB4OWYzMDk1OTcsIDB4MGE3OGU3YWQsIDB4ZmU3MzE2ZGYsIDB4Zjk2YjIxOWYsIDB4ZWY4YmFjOWYsCisJMHg5OTY1M2U1MywgMHgzM2VkZmJlYywgMHgzZjk0YWZjMCwgMHg1N2UwMGViZCwgMHhmZGY2MWYzOSwgMHgwN2NkY2RiNywKKwkweGZhN2NhNjZmLCAweDRmODU3YWI3LCAweGNmNTNmMmI1LCAweGVmNWIyNWE3LCAweDdhOWY0MDI2LCAweGEwZGJmZDNlLAorCTB4NGY5NjEyMmEsIDB4N2NiMGYzZTksIDB4N2ZlZGE4M2EsIDB4ZjAyYTdlNTQsIDB4NDVmODAyYWIsIDB4YzhhN2UwODUsCisJMHhhOGUwZGVjMywgMHhkOTU2ODc5NywgMHhkMjFlNTYxMSwgMHhkOTkyMDFkZiwgMHhiYTE0ZmU5MywgMHhmNGFkZTg1MywKKwkweDQxNDNlNWY3LCAweDUyZTkwNGVlLCAweDVkMjBiYmExLCAweGRmYTc3NDJhLCAweGZhN2UxNmFmLCAweGMxMzI0OWY2LAorCTB4MjZiZmU1NzUsIDB4ZDY1Y2ZmYTMsIDB4ZTk0MmYyYzQsIDB4NjYwNzdiN2IsIDB4YTg1YzljMjAsIDB4ZGVlZDQ4YzYsCisJMHg3NWQ0ZmQ4MSwgMHhhZjVlYWU5ZiwgMHhkNWQyZWZlYiwgMHhkZGZkNzVmMywgMHhhNjk1N2FiYSwgMHhiMzYzNTk3ZiwKKwkweGZkZmUyMDkxLCAweGIyZTI3ZTlhLCAweGI4ZDFjODY3LCAweDYzZWFmNDcwLCAweDU5YzM1OTdlLCAweGMyZTgxN2EzLAorCTB4ZTVmN2MwMTIsIDB4NzkwYmM0ZTUsIDB4MjIxZDgxODYsIDB4MjhiYTA1YzYsIDB4N2UyMDZiOGMsIDB4ZTdkOTM5YjEsCisJMHg2NTYzNzJhNSwgMHg3NDNmOGIwNCwgMHg1OGI2MDNkOSwgMHg2MThjYWU1YSwgMHhiMWJjNDBmNSwgMHhmMjllZTQwNiwKKwkweGUyYzExMDNjLCAweDAxZjk1ZDhhLCAweDlmY2E4YzViLCAweDUxMTI2ZjZhLCAweGM4ZjliNzZlLCAweDE2N2U3MDhjLAorCTB4NDdjODI4ZDUsIDB4NzZiN2E0NmQsIDB4NGQzNWVlNzYsIDB4MDY1OTBjYjQsIDB4ZDE1YWE1NzEsIDB4MWRmODM2MDksCisJMHhlMGQ5MzdkNSwgMHgyOWFiYTlkYywgMHhmYTAyZmFmNSwgMHg0NTFmZTE3YywgMHg4YWU5N2I0YywgMHg3NTgxOGRiNCwKKwkweGVhNGJhZjExLCAweDRlNmZmMmFmLCAweDU5ZDNlZjEyLCAweDlhMGI3Zjc0LCAweGM3NzM5Zjk4LCAweDQyM2Q5ZDFhLAorCTB4MTUzZDIwZDYsIDB4NDExYTk2NTksIDB4ZTI3ZjUyOWUsIDB4ODZiY2Y2ODgsIDB4MWYyOTQ1ZjEsIDB4YjY5ZDY0YWYsCisJMHhkMjlmNzk1ZCwgMHhhNWYzZmEwMSwgMHg2ZWVkYjQxYiwgMHhhMDdmMGZlZSwgMHgzMjU4YzlmMCwgMHgyY2EzZmI5NiwKKwkweGYyZTVjMzBlLCAweGZhZWQzMTM0LCAweGFlOGY4YTAyLCAweDY4OTg5MTE2LCAweDQ0NDliYmJkLCAweDE2NmY3NDdjLAorCTB4MjM0ZjEwN2MsIDB4YjdlNDc4ZGUsIDB4Nzk0MDEyMGEsIDB4MDNhOWMwYTgsIDB4YmJkOGM5ZjgsIDB4ZjZkOGVhYmMsCisJMHg4MTJmZTY2OSwgMHgzYzdmYjY2ZSwgMHhkOTY5M2ZlNiwgMHgxMWMzZmRiMSwgMHhkNWZkNDA2ZiwgMHgyNjNlNDM0MywKKwkweGVlZTdmYjNkLCAweGZmNzNjMDhjLCAweGE0NTY5ZGFlLCAweGVmMWRhZWY3LCAweGQ0MjVmOTBlLCAweDYxMzkzMzVmLAorCTB4YmYzYjVkOWQsIDB4ZDNmNDAzMWUsIDB4MDI1NGRjYjUsIDB4MzA2YmFlZjIsIDB4ZDhhZWM3OGIsIDB4MzY5OGY1ZjEsCisJMHgzM2Y3YWZkNCwgMHhmZTY0NjFmZCwgMHgzZmQzNzc2MSwgMHg0MWZhMTMzZSwgMHg3NjA1Nzc0OSwgMHhlNDI4Y2VjMywKKwkweDIzZDdjYWE3LCAweDZiYmJkZjMwLCAweDZlOTlkN2M3LCAweDlmYjc0ZmNiLCAweGQxZTc5ZTBhLCAweDViMDUyNTY1LAorCTB4MmMzMTdkNjEsIDB4OGRmMmExOGYsIDB4ZDM1NDJmODksIDB4NzYxYmNiZjksIDB4ZjZkMDE3MTksIDB4MzlmZjM3ZGMsCisJMHhkNzY4ZTQwNiwgMHg3NTBmNjY1NiwgMHg0MWNmNmRjYSwgMHhmMTk0NDMxZSwgMHhlMjk5NzJkYywgMHg4YTk4MTNhYiwKKwkweDMzYmZjZDNhLCAweGRmMDJlNDY2LCAweDNmY2I4NGY0LCAweDU3ZDYzZTMxLCAweGFmZmNhNDc4LCAweDYyZTA4NzgxLAorCTB4MzNlYWNlZjIsIDB4NmZlZmIwMGIsIDB4ZTMxOGZiM2YsIDB4NGJhNDI2OWEsIDB4YWI3ZmJmNjUsIDB4ZTU3YjQ2YWYsCisJMHhmZWNlZmI2MiwgMHg4MmRmNmU3ZiwgMHg3NmZiMmZiZiwgMHhmYmVmOWJmZiwgMHg3YWJiZDczOCwgMHhlNzQ5ZTgzZSwKKwkweGZhYzFlZTNiLCAweGFlMjc1NjRiLCAweGVlZjQ4ZmI3LCAweGZmYzdmZDg1LCAweDdiZmZlZWZiLCAweGM1MmI3ZGUzLAorCTB4ZmJlMmVkYmIsIDB4NWFmZmNkZmUsIDB4MzZmMWZmYmMsIDB4N2UzYjc3OGUsIDB4M2ZlNmYzZDcsIDB4NTdkZjdkNzEsCisJMHg2ZmY5YmRjZSwgMHhmNmRlZjc4ZSwgMHhhZGY1ZDhhZiwgMHgwNjdiMmE4NiwgMHhhOTAxNWY1ZCwgMHgzMTYxODJiNSwKKwkweDkyZGJiZTM3LCAweGQ3NmM4MGUxLCAweDhmMzBmZDczLCAweGMzNGJjZTBlLCAweDIzMDE0ZGY4LCAweDkwNGQwYmYzLAorCTB4ZmI3ZTA3NDcsIDB4MGI4OTQxMWMsIDB4MWQ3NTFmYTIsIDB4MWJhZTFmYjcsIDB4Yzg3NjgyNTQsIDB4OTk4N2FlNzUsCisJMHhiNTU1MjBkZCwgMHhhZGZlZDM2NiwgMHg5ODljMGIzOSwgMHgwZmQyNDk3MywgMHg3YjNlYTFiYiwgMHhmZDZiYWYzMiwKKwkweGUyMDRmN2M5LCAweDdmMWRhODEyLCAweDJkMzVjZTVkLCAweGVmNWVkNzYwLCAweGE1ZWVkMTEyLCAweDFmYmJkYTI1LAorCTB4OWVjZTk5MGMsIDB4M2RmYWQwNGYsIDB4ZmFkYWRkNzMsIDB4ZmFkYTA1NGQsIDB4OGRkZTNlMWMsIDB4YzZmZmFkODQsCisJMHg3MTA3YzE3YywgMHgxM2Y2NTM1NSwgMHgzNTY3MTBmMSwgMHg5MDg5OTQyZCwgMHg1NTQyZjkwYywgMHg5OGJmYzEyYiwKKwkweDdmN2RhZjkzLCAweGUzYzFmODFmLCAweDUzMWMzYzdmLCAweDk3MWMwYTRkLCAweGI2NDg1YzIwLCAweGZhNDhkY2U4LAorCTB4ZWViZTQ3MDAsIDB4N2Q2M2Q5ZDYsIDB4MjQ0Y2NmOTAsIDB4OGRlMzgzMjcsIDB4ODM4YzRlZTUsIDB4ZTY1YjdmNzMsCisJMHg1NTk2Y2JlZiwgMHhiMmNmYzBhZCwgMHhmYzU2Y2ZjZSwgMHg0ZGUwZGVlNSwgMHhlMzhkZmZiOCwgMHgyZmUwODRhNCwKKwkweGJmZjQ0NGJiLCAweGFkZmY5ZDY1LCAweGUyZmJlNWUwLCAweDhmZTNjMTQzLCAweDNhOTdjYmM1LCAweGI4YjIwY2JjLAorCTB4Y2NhYmYwMDgsIDB4MTZhOTg1ZmQsIDB4Y2EwZmFiMjcsIDB4YzhkZTc4MjcsIDB4OWZhOTA1ZmQsIDB4NDJkMzc4OGIsCisJMHhjYzhiZGY3OSwgMHg1ZjM4NmNlNiwgMHgzMDE0OGYzMywgMHgxYWZkNzFkZSwgMHgzOTgzZjUxMSwgMHhlNTc1YzA0ZCwKKwkweDhmMzE5MDRmLCAweDdlNDM3M2Y4LCAweDZmM2JlMDI2LCAweGJmMTUxNWRjLCAweDAyNzBjYjYwLCAweGI4NzExNzNjLAorCTB4YjQyYTkxMTcsIDB4ZWZmOWM5NWYsIDB4ODRjYWNiYmUsIDB4ZjY4MjA2NzMsIDB4MjExNzIyZWYsIDB4YWRiZjUyZDcsCisJMHg0N2YwNGIyOCwgMHg0YjE1Nzg1MiwgMHgwZTlkMWJjNCwgMHgxYzgxNmY3MSwgMHhiNWJkYzRkMSwgMHg0N2ZkZjg3NSwKKwkweDhiOWM2ODQyLCAweGJlNGRlZmY1LCAweDVmZTVkNGZjLCAweDMyM2IzY2E5LCAweDFlNDFmYThjLCAweDU4NDliYjllLAorCTB4YWZmMTU2ZGMsIDB4NzA2MjZmNmYsIDB4N2MxMzJjYWMsIDB4N2U3NzQ4MjksIDB4ZWU3NTVmMzksIDB4ODNlNzFjZjgsCisJMHgwZTNiZGViZiwgMHhhM2Y2NjRlNSwgMHhlZmQxYTNhMywgMHg2ZmQwMzk3NywgMHg0MzdlZTRhOCwgMHgwZDExZDdiNywKKwkweGE2ZWVhZTcxLCAweDliM2U3ZTU0LCAweDU1Y2I1MzZiLCAweGZkY2ZkY2E1LCAweDdlNDBiZmVlLCAweGE2YmIyZDIxLAorCTB4ZjgyMmI1MGEsIDB4ZjE4MDI0NzEsIDB4MDhkNGVmNWMsIDB4ZmU0YzMxYjIsIDB4MTkzMWZmZWIsIDB4NjE1NGZkMzgsCisJMHg2MjdlMDAxYywgMHhmZDkxZTAyNiwgMHhkMWFiZTk4YSwgMHhhZGJjMmFiMSwgMHgzNDk0ZjZiOSwgMHhlMDFlMjdhNiwKKwkweDBlNzU0NDc3LCAweDBiZTE2M2Y5LCAweDc1YzAzZTdlLCAweGY0ZGI0NDdmLCAweGFkZmIzMGZjLCAweDU2MzhiMTM1LAorCTB4ZTJkZjViZGUsIDB4MzQzNzljNzcsIDB4OTcwMGNiMjUsIDB4OWE4YWE2MWIsIDB4MjY1NWZiNzMsIDB4MjM4ZDk3ZWUsCisJMHg3OTVkNjBlMywgMHg5YjY1NWQ2ZiwgMHgxMTY5NzgwOCwgMHg2NmRkZjA5ZCwgMHhhMzU5ZDM2NSwgMHhiMDc5Y2MzYiwKKwkweDNlMzA5ZTFlLCAweGNhOGZkNWM0LCAweGU3ODAyMmNlLCAweDA4MjM4N2QxLCAweGYyZWZkMWY4LCAweGY4MzRjNjczLAorCTB4NDMwZDIyNmUsIDB4MmI4ODJlM2EsIDB4YjVjMzlhZmUsIDB4NzJjNzY0ZDMsIDB4MWNiNjVlNTYsIDB4NmI0ZGU3NGYsCisJMHhhMzg1OGZiMCwgMHg3ZmJjMDFkNCwgMHhlMzIxMTgyNywgMHhiZDg3ODkyMSwgMHg1MDFiZjRhNywgMHgxYmI1ZmFjNiwKKwkweGY2ZTExNWVkLCAweGVkODIzYzNmLCAweGVmMzg5OGJmLCAweGZiZmMyMDk5LCAweDUxZmIyZGUxLCAweGVjMDczZmFiLAorCTB4YWUzY2E5ODMsIDB4MDlhZTgzZDIsIDB4MGNmNzQ3ZjIsIDB4MWJmYTA3YzEsIDB4ZTdhYzYxZmMsIDB4ZGY4NGVmYjEsCisJMHhiZWIzYmU1NSwgMHg4NTU5ZTk4MSwgMHhkZTcwZjVlZSwgMHhjY2FjZTFjYiwgMHhlMmM0ZGM3ZiwgMHhmY2UyN2ZhZiwKKwkweDgxNTljMGE1LCAweDRhYmQ3ZWFmLCAweGE2YWYyYTdmLCAweGQ3NTFlM2E4LCAweDE5N2Q4ZTM3LCAweDI2OGE5YmVjLAorCTB4NDNhMDZlYzEsIDB4NDY2ZDQ4NTUsIDB4YzZjYWMzZTAsIDB4NmYzODY0YzcsIDB4ZTM2MGViOTksIDB4OGM3ZjI5MTIsCisJMHhkM2EwOWYzYSwgMHg5YTNiZjJjNCwgMHgwZGJjYWZkMywgMHgxYWRjZTRlOCwgMHhlMjQyZTgxMywgMHgwZGFjZTNiYSwKKwkweDA2YmJmMGU0LCAweDdiZTE5ZmU3LCAweDIyN2JlZjZhLCAweDc5MDE3OGQ5LCAweGNlYTdiMWY1LCAweDhmNTI1NTM1LAorCTB4OWNlYjhjOWIsIDB4NDMyZDk2NTUsIDB4YjI5NmVjZjgsIDB4OGFhMjcyNWQsIDB4YjE0ZDNhOWUsIDB4MWYzY2FlZDgsCisJMHg4NzQ4ZTY1MCwgMHg1YzNlNzRlNywgMHgxMzExZjc4NywgMHhkMjQyZWY4MSwgMHhmYmYxNWJlYSwgMHg2MmFhNWJkNCwKKwkweGQ0OTYxZDE4LCAweDNkNjIzMmVmLCAweGYzMmJmYjE5LCAweGY5ZThmMzI5LCAweDM2OWU3NjY5LCAweDZlNDE3OGVmLAorCTB4NGI4MDIwZGIsIDB4ZDRiZmM5OWUsIDB4MWY0ZTg2MTksIDB4OGVlNzJiMzMsIDB4Yjg0ZjUzZGYsIDB4Zjk4ZWRkMjgsCisJMHgyYzRmNDhmZiwgMHgxYjQ0ZjQ1NSwgMHhlZjJiYjllNiwgMHgzZTMzMzVjZiwgMHhjNDg5ZTk1NywgMHg0OTYyN2E3MCwKKwkweGYwMTEyM2I1LCAweDZhNDc2NGIwLCAweDkyYzkzMDIyLCAweDA4NGI0ZTNmLCAweGYwM2UyN2E3LCAweDQzZTM3M2IwLAorCTB4YWVlZWJiZmMsIDB4NWM0ZjU0ZDksIDB4YjMxM2QyYWUsIDB4ZjQ0ZTkwMjMsIDB4OTU5YWU1ZWYsIDB4ZTg4YjhkNzMsCisJMHhmZjZmMDUwOSwgMHgwM2U2ZjJjMywgMHhmODYxMTNkMCwgMHg1NmIzNDZmYiwgMHg1NGQ4ZGM0ZiwgMHhjNmUyN2E4OCwKKwkweGZiZTZhMmQ5LCAweDE3Y2Q2YmFhLCAweDA5ZDkxM2QzLCAweDNiMmViMTczLCAweGNmZDBjMmEzLCAweDM5YmZkYzA3LAorCTB4NjFmYmYzYzQsIDB4NmIxN2QwMWUsIDB4OWI4NDc2Y2MsIDB4MjZmNDZmNWUsIDB4NTVmNmM3ZDcsIDB4ODI1ZmZmYWUsCisJMHg5N2Q3MjJiMywgMHg0M2Y3NjFjYywgMHg4MjQzYTRmNCwgMHgyZTY0YmNmNCwgMHhkMDAyZWI5NSwgMHg0YmViOTMyMywKKwkweDRlNzFlNTZlLCAweDA3Y2Q5YzlkLCAweDk2YTE5YjM5LCAweDBhZmRlY2IzLCAweDk1MGJkMzM3LCAweDlhYmZjOThkLAorCTB4YWU2ZmRiNDcsIDB4ZGE2NjlkOTUsIDB4ZGM5MGU2ZmYsIDB4ZGRjYjU0Y2QsIDB4ZTEwOTY2MzUsIDB4OTZlZTQzZGMsCisJMHhhZTdiYjkzMCwgMHg0ZmRhMWM2OSwgMHg1M2VmZWRiZCwgMHgzY2E5NmYyZSwgMHg0MzBjZTYxYiwgMHhhMmYzMDUxZiwKKwkweDFkZGZkZjM0LCAweGRhNzZmYjFkLCAweGVmMmZjMDJiLCAweGZiN2U3ODhhLCAweGY2MDNiNzM5LCAweDAzM2I3ZDhkLAorCTB4N2M1M2U5ZWMsIDB4ZmNiOGRiM2QsIDB4NWNmOGY0ZWIsIDB4YzgxY2E5NTMsIDB4ZDNkOTgzYmQsIDB4ODQ0NTliZTUsCisJMHhlMzAzNDU1ZiwgMHg5MTYxOGFmZiwgMHg0ZmFkMDczZSwgMHhjZjE2ZmY0ZiwgMHg2MGVmMTc2MSwgMHgwNzc0YjBlNywKKwkweGZjMmFkOTc5LCAweGFkYjc3ZTJmLCAweDE2MDVjZTA2LCAweDFjZjAxN2FmLCAweDAwNWZiZTE5LCAweDc4NzMxNjc4LAorCTB4ZTMxNzM5MTYsIDB4ZGFmMTRhMzksIDB4ZTUzZmU3ZjAsIDB4YTZhMmRmYmMsIDB4NWYwZjE4ZjUsIDB4MmJmNmQzZTQsCisJMHgyOWY1NzYxZiwgMHg0Y2YyNDdmMCwgMHhhZjc5MGYwYywgMHhjOWY1YmUwOCwgMHhlYmEwY2Y5MCwgMHhlNzhkNWNlNywKKwkweGRhZjVlNTQ3LCAweDdlZjkwN2U3LCAweGI0ZmU4YTE3LCAweGU0ZmJlODU3LCAweGQzYmZjY2NmLCAweDFlYTBmYmMzLAorCTB4MTIzZjI1MmUsIDB4NWMyOWZiMmUsIDB4NzBmNWZlMzIsIDB4ZDQwZTBkZTksIDB4MDFmM2M3YmUsIDB4MmIwZTNjM2QsCisJMHg2NDlkMjU3MiwgMHg2ZTdlMWYwMCwgMHhmMTVjYTE3MCwgMHg0MmUxNDNiZSwgMHhiMWUzYmJlNywgMHg0MGZiOWFlMSwKKwkweGJjYjg3MzhlLCAweGY0ZDc3MDZiLCAweDAyMTU3ZTg3LCAweGI3NWUyYmY2LCAweGFkMDI0ZjY1LCAweDYzMjdhYmNmLAorCTB4NzhhMTc4ZTEsIDB4MDcwZjU2YWQsIDB4MDM4MzdlZjUsIDB4YWFiY2ZhZjUsIDB4YzdlNDAyMmQsIDB4ZmJkZmU0MmUsCisJMHhjMzFlZjg5NSwgMHg1ZDZlNTQ3YiwgMHhlZDNjZjU0NiwgMHhlNGRkMjBiZiwgMHhmZGYwNzM4NiwgMHg5Yjk0MDExMSwKKwkweDQ3YzZkZDBhLCAweDhlMjVmYjMwLCAweDAzYTNhMWNiLCAweDNmNTE1MzAyLCAweGU0NzYwYTM1LCAweGQzMDQ3ZjQ3LAorCTB4NzA0ZjE0NTcsIDB4YzRmMzRiYmYsIDB4YmM3M2E3YWYsIDB4MjM1MmI4YjAsIDB4YzUyNTYzYzMsIDB4ZjRmM2YwMWIsCisJMHg2M2FmNWUyNiwgMHg0YTJkZTA3NiwgMHgzOWYwNWViZCwgMHhiYmFiOTAwNCwgMHg4YzVmNzY2NCwgMHg4ZTA0ZTI0MCwKKwkweDg0N2U5NTA0LCAweDA0ZWNkNWYzLCAweGI0Nzc5ZTE1LCAweDI4ZGZmYTMzLCAweDhmODFmMTM4LCAweGYwNDNmN2ZlLAorCTB4MzNkZDJiZGMsIDB4ZjRhZmE2M2IsIDB4M2UyOWMwYWUsIDB4ZmRlNzhiNDIsIDB4ZTM3OWFkMTEsIDB4OWJmOWMxZmEsCisJMHg3MzdiYzRlMCwgMHg5Y2YwNjI5YSwgMHhiYjJkNThlOCwgMHhiZjk1MjVmZiwgMHhmMDBiZTdhNywgMHhkMWY3ZDQzYiwKKwkweDQzODU4NGNjLCAweDA4OGNmMzdlLCAweDc5YzUwZmNjLCAweGE2NWQ5ODUzLCAweDdiZmE0Zjk2LCAweGZlNmZiZTgwLAorCTB4NDU2OTI1NTEsIDB4Yzc5NDJjN2IsIDB4MDRkZTdlZTgsIDB4MzQxMGNkZTMsIDB4MDkxMDRlZjksIDB4MDlmZjNhMDMsCisJMHg3Y2Q1YmZjNiwgMHg5MjQ5ZjE4MSwgMHhlZjk2ZjMxZCwgMHhlZGNmMmJiMiwgMHg1ZTJjYmJlYywgMHg3OTljMWU2ZiwKKwkweGVmODUxZTY4LCAweDEzYTI1NWI5LCAweDBjOWJhODVjLCAweDIwNTk4MzhlLCAweDA5OTQxZTZmLCAweDdkYjljYmYwLAorCTB4ODFlOThiYjIsIDB4ODUzYmQ0MjgsIDB4ZWZjNTFlZWYsIDB4MGU1OTBhZDksIDB4OGZiYzI5MWEsIDB4N2NhMzk3ZTksCisJMHhiZDUxMWYzZCwgMHgwYTU4ODJlZCwgMHhmNzBmMWZhOSwgMHhlZTc2Y2NlMCwgMHg3ODgwZTY5YSwgMHg5NWZlYzY0YiwKKwkweDJiMzljZTcwLCAweDIwZjA3ZWQ3LCAweGJiMzU3M2UwLCAweGFhYzhlOTA3LCAweGVlZDNmNDVjLCAweDdlNDA1M2JhLAorCTB4MDZmMTRjM2IsIDB4OWQ5OWNmZWYsIDB4OWQyMGYwN2MsIDB4ZjE1NWQ2ZjcsIDB4Y2YzOTZlNzgsIDB4OWMyMzdmMTUsCisJMHgyN2RiY2U2MywgMHhkZmI0MWQzYSwgMHgxNmFkZWI4MiwgMHg2NmJjYzczOCwgMHgyYWRjNDhhNCwgMHg1YTRhZGNmOCwKKwkweGFmMzNiZTMxLCAweGIwMzljZWVhLCAweDBmYWExMmVlLCAweGY3Mjg2NGM1LCAweGZhODQ0YjRmLCAweGFmZGYwMTNhLAorCTB4ZjA4ZGJhZjQsIDB4ZGFlYjY2YmQsIDB4M2EwY2M2YjMsIDB4MDdlZDExN2YsIDB4Yzc1Y2FmNjAsIDB4MTA2ZTU1ZmEsCisJMHg1ZGZhOTA5YywgMHhjYTE4ZjRkNCwgMHgwMjBkYTJjYiwgMHg0YWQzMzQ1ZSwgMHgxYjMzNWZlZCwgMHhlM2E2NjdkNywKKwkweGVmYTNhZWI2LCAweGJjMzE3YWQzLCAweDg4NmVlMzBmLCAweDI3Y2UxMWI5LCAweGYxM2FlOTJiLCAweDc4ZDUwOWZkLAorCTB4ZGY0NDVkMmUsIDB4NzVhNGNkYTMsIDB4ZGUzODlkYzMsIDB4ODEwMjc1YTIsIDB4MjY0YjAzZWYsIDB4MDEzMjNmMjQsCisJMHgzYjI3ZGJjNiwgMHhhZWQwZmRhMSwgMHhkZDYxMWI1ZiwgMHhmYWY5ZDFiNywgMHg4ODE3ZjFkMywgMHgzZmEwZDM2ZCwKKwkweGM3NjBhNWY5LCAweDQ2ZWE4N2ZiLCAweDBiYWRkYzYwLCAweDU0MmYwYzM2LCAweGU2M2FjNzBkLCAweDBjMTAzYjEzLAorCTB4NjUxZjNhOTIsIDB4NGVmYjA0NDcsIDB4NzU1OTY4YjgsIDB4Y2RhYmVjMGQsIDB4NDA2YzlmMWIsIDB4MDQ2YjNhYmEsCisJMHhjMjhjN2UzZCwgMHgzYzg3NGRkYiwgMHgyZTc5NjQ2YSwgMHhjNmEzZGVjZCwgMHhmZDFjOTUzNiwgMHhkZjE1MjIyOCwKKwkweDFiMzFhM2JmLCAweDkyMTYyNmYzLCAweDcwOWJjYzdjLCAweGE0N2IzMzU3LCAweDBmODQ2NTdkLCAweGIyZWQ2YWUyLAorCTB4NmYzYzA4N2QsIDB4ZTdjMjY5NWUsIDB4ZmQzMTJmOWQsIDB4MGRiODM5ZDMsIDB4ZDYyN2RiZTMsIDB4NWZiZTA0YzksCisJMHhmNTJlYjE1YywgMHg4OWUzYzA2OSwgMHg5YmQyMzJjZCwgMHgxYmNiMmNmOCwgMHhjNTg5N2UyOCwgMHhiMWQ3OWFjOSwKKwkweDM1MmM0ZjcxLCAweGEwYjU3YmIyLCAweDVmOGJkNjlkLCAweGI0MGFmMjU0LCAweDUxYzhhYzcyLCAweDJmNGE3MjhhLAorCTB4NmI3MmY0OTcsIDB4NDZkNTkzZDEsIDB4ZjIxZWQ5MjAsIDB4OTQ3NGU5NmEsIDB4ZWY1NGE1NTcsIDB4OTBmNWExMDAsCisJMHgzMDZhODM1NywgMHg1Nzk3YWE2ZSwgMHhjOGEyYzQ5NSwgMHg1Zjg4NzRhOSwgMHhiZTBmOTYxNiwgMHhmMWQwMmQ2ZCwKKwkweDgxODNlY2FkLCAweDVmNmJmZjU2LCAweGI3N2EwNTNlLCAweDQ5ZTA0YWNjLCAweDVhN2Y2NDg1LCAweDgwNDE3NDYwLAorCTB4NmQzNWU2NWYsIDB4YTBmODEyZjksIDB4ZGUwNDVlNjQsIDB4ZjAxYzc1YzcsIDB4MjZiMzdjMDAsIDB4OGJhZmNmMGUsCisJMHg2ZjA4ODU3YywgMHg3OGI3MmYyNSwgMHg5NWNlOTZhZCwgMHhiNzVjZTNmOCwgMHhmZDZhNWM0OCwgMHg1YzQ1MTI1NSwKKwkweGVlODc3ZWFhLCAweGU3NGFmNGEzLCAweGYwNTFiZGI5LCAweDc0M2NhODgxLCAweGJiZGVmYjVmLCAweGM3NmViMDMzLAorCTB4ZjZlMzJkNzUsIDB4ZDIyYjFhYzEsIDB4OWY5ZmExZjMsIDB4N2FmNDA5NWQsIDB4MDEwMmJkZGIsIDB4ZGQ3ODlkN2IsCisJMHgyYjBmYTAzNSwgMHg4ODBlMGFkNiwgMHhjYmRmMTcwZiwgMHhlZmE2MmZkZSwgMHhmZDBmYmFjMywgMHhhNTE1ZDE5YSwKKwkweDdmZDAwNzZmLCAweGY2YzdiYWM1LCAweDgyMGRmZjYyLCAweGI0M2ZjNjAzLCAweDg5ZWQxMGJlLCAweGIwNDhhZjEyLAorCTB4ZmEzYjQzN2QsIDB4NjE0ZjU0MGYsIDB4NTdiMzU5OWUsIDB4YWZmYTAwNGMsIDB4MDc2NGRmYjgsIDB4MjNhMTQ5NTMsCisJMHhmOWRiMmU4NSwgMHhlY2M0MDg3ZCwgMHhiZThiMzMxYywgMHgxNTE2MGFiNywgMHhjNTFlOTNkZiwgMHg0ZmE4MjEwMiwKKwkweGJkMmE0ZTgxLCAweDVmZGFjZThjLCAweDM2NDA5ZDkyLCAweGY2NGJhNzE3LCAweGFlMDlmYzFkLCAweGU3NjdjNTVmLAorCTB4NzRlZjg3NGMsIDB4MDQ3ZWE5OGEsIDB4OTc1ZTZkM2EsIDB4ZTIzYjA0NmIsIDB4ZmNjMDRmODQsIDB4NDk3NDllOGEsCisJMHg0YTNiNmEyYywgMHgwNTY3Y2JhMSwgMHhkMDdiYWYyNiwgMHg3YjBlOGVhMywgMHg0YmE3MWRkMCwgMHg1MTI4ZmU4NSwKKwkweGI2NTk1ZmEzLCAweGZkZjAyNjRmLCAweGRkMWU5ZWJkLCAweDkwOGRmZDcyLCAweDMyZjg1MWZmLCAweDZmNWQwZmRkLAorCTB4ZDFjZmNkNmUsIDB4NDhlMDU3NWUsIDB4MmY1MDA5ZWIsIDB4OGZkZTU4OTIsIDB4MTJlNTBmYzIsIDB4ZGVmYjBmY2IsCisJMHhiZmNkZDNlYiwgMHg4N2U3ODIyOSwgMHgyYzg4M2YwMSwgMHhlNzRmYzk3ZiwgMHgwYmYzN2I3ZCwgMHg2Njc5MmY5OCwKKwkweDY4NzVmYjUzLCAweGU5NDFiY2RmLCAweGQ5YmZlMDAwLCAweDdmZThmYzRhLCAweDk1MGU1MGY4LCAweDZmOTg4ODM2LAorCTB4ZTY3ZjI0NGQsIDB4YWVkZjk1MmMsIDB4ZmUyY2JmZTQsIDB4NWRlMTE1ODMsIDB4Y2JlNGQ1YmEsIDB4NmU5N2VmYTMsCisJMHhmMzA2M2EzZiwgMHgzMDA3OTYxMSwgMHg0OWJiYzdiZiwgMHhkZTFmZTc2MCwgMHhmZGYwMzFiNiwgMHhmMmM0YTk1MCwKKwkweGMxNzZmNDcwLCAweGU3MTY0OGYwLCAweGFhMmQ3OGVhLCAweGExMzZlYzAwLCAweDU3YjNkZDhlLCAweDZjOTM3ZjVhLAorCTB4MDc3NWM1NTIsIDB4MmYzOGNhNDUsIDB4NjNlNzg3ZWQsIDB4Yjg2NzhhNWUsIDB4YTdkNjAxMWYsIDB4Yzk0ZGRmYmUsCisJMHg5MTc4ZTliZiwgMHhhMzY5NWZkMSwgMHg2OTVjZjY4YywgMHhjODRlOTZkZCwgMHg2YzNkMmNjMywgMHhiMmI3M2Y0MiwKKwkweGZjMTFhY2VlLCAweGJjM2ZkY2Q4LCAweDU1ZjNmNzg0LCAweDNjOWE4YTM2LCAweDZmZjkxZWJjLCAweDA0ZGZhMjc1LAorCTB4ZTUwZDViZjksIDB4ZWI0MzdlNzgsIDB4MGZhZjU4ZWQsIDB4YjE3YTA3OWYsIDB4N2ZjNWFkM2MsIDB4NGJkZGIxZDgsCisJMHg5NWY4Yjg0MSwgMHhiZWYwZDlkZiwgMHgzNjhkZDZiZSwgMHhlZWE5ZWVmYywgMHgzZGE3ZjljMiwgMHg1N2VhZGRmMiwKKwkweGVkZGYzMDVmLCAweDA5NDFmYzM0LCAweDVkNDhiYWViLCAweDkzMWQ2MGJlLCAweDk5N2Q3NDZiLCAweGM0ZTI2MWY5LAorCTB4YTVlYjdiNDEsIDB4N2M4MzlmMmYsIDB4N2ZhZDhlZWMsIDB4NWJkNjBlN2IsIDB4OWVlNzVmZjYsIDB4YjIxYWJjODMsCisJMHhmNjBlYzIzMywgMHgwZmE2ZTU0OCwgMHg3OTU1OWYzMCwgMHhkOTkyMjRhZiwgMHhmZTJmOWQ3ZiwgMHgzYjgwZjMwZSwKKwkweDYxMzkzNDNmLCAweDI3MWRjZWI0LCAweGQxYmQ4MDg2LCAweDA0ZGJlNWI5LCAweGJhNWRlZmM4LCAweDczYzYxYTYzLAorCTB4NGRjYjZlOTYsIDB4MDVlMjYxMjQsIDB4ZWI3NDA5NGEsIDB4YjIxZTQzZWIsIDB4MGRjZDVmMWUsIDB4NzNmZjk4Y2QsCisJMHhlNDFiZTI4NiwgMHhiMTdmMzA0MywgMHg4M2U1OWNiZSwgMHhlMmRlNzgzYSwgMHhkZWY5ZjBlNiwgMHgxYjE0ZjIzZCwKKwkweDE5M2Y1ZDY2LCAweGIzMDM2MmU0LCAweGFmOWEyZTBiLCAweGYxZTI4MDc4LCAweDZmZTAzZWYyLCAweDRmMmU2YWYzLAorCTB4MGNlZmUzYzIsIDB4NTRmMTQxZmMsIDB4NTdjZGE5MTMsIDB4ZTE2MWIyZmMsIDB4YjY4MTllNmYsIDB4ZjM1ZWI4ODYsCisJMHg4MDdkZmQxNSwgMHgzZTRmOTI5YiwgMHg1OGY1ZDIyYiwgMHhkNmNkZjAyNCwgMHgyODdlNjNkZiwgMHgwMWNmMmRlMCwKKwkweDIxY2JmOWYyLCAweDI5M2UxNzEwLCAweDEwZmUzMDA3LCAweGVmYzI2MWQ4LCAweDFjNzc0YjJjLCAweGRjZTlmZTQyLAorCTB4YjVmMzFmYjYsIDB4ZWVlYmNmMDksIDB4Y2IxZmMxMjQsIDB4OWViMWU1YzMsIDB4OTY1NjBkY2EsIDB4MGZlMWM4ZTcsCisJMHgxYjBlOTA3OSwgMHg4ZWY5ZTczZSwgMHgzYzk1OGU4YywgMHgxZmYyZGVjOCwgMHhmODUzMjI1YiwgMHg0ZjJjMmE3ZCwKKwkweGM3YzM3Y2IzLCAweDg0MzBhZjNjLCAweGUwMDI2MTJmLCAweDc5ODJmZGE5LCAweGVjMWMwYWE1LCAweGQ0MmI4NzAwLAorCTB4ZjNlMWJjZjksIDB4ZGY3OTgzNGMsIDB4M2Y4MDVmMWMsIDB4N2NjMWQzOTAsIDB4MDQxZjVhNWQsIDB4ZTEzZTliZjksCisJMHgwZjIzMDkxMCwgMHgzY2IzZDczYSwgMHhmYzM5NGVlMCwgMHg3ZTRhY2NmNywgMHg0ZjllYjM2ZiwgMHhlYmNiN2Q3ZCwKKwkweGJmZmFkOGJkLCAweDIyMWE3YzJmLCAweDFlYWUzODFkLCAweGMzZTcxZDRlLCAweDljZTNmMWNiLCAweGY3ZjA3ZmVmLAorCTB4ZmU4MjY1MjEsIDB4ODFjZjkzZmIsIDB4ZGExYmNiMWUsIDB4ODk5Zjc4OGQsIDB4ZmRmMTNmZTIsIDB4NWE3OGYwNzYsCisJMHhmMzExMjZjNywgMHg5YmVhNmIzZSwgMHhlNWViOGU1MSwgMHgyNzNmMDU0NSwgMHgxYmY3YWZkMSwgMHg0NjhhZGViZSwKKwkweGI2M2EyN2E2LCAweDNhMTY3ZDVhLCAweGFmNWJjNzRlLCAweDZjNTczZDIxLCAweGQzYmNjNzZlLCAweDE4YWY3NWJkLAorCTB4Y2JlNzU0ZGIsIDB4YWE3YzI3YTAsIDB4YmNiYzc3ZjUsIDB4NmRjYTBjNmIsIDB4N2U5OGJmN2UsIDB4OWIxNDYzMWUsCisJMHhmYzI5YjJhNywgMHhjZjliOTUzYywgMHhlYzU5ZTY2YSwgMHgyZGRhMzdhZCwgMHhiNGVmOWYxNywgMHhjNjA5YmFlNCwKKwkweGVjY2FkZDNiLCAweGUyZjVkM2E1LCAweGY5OTg1ZjBjLCAweDQ5YmQ3MTRmLCAweDBmM2IyZDQ4LCAweGVmMTJmYWE1LAorCTB4N2JiMmIzNTksIDB4MjQ1YjQ0ZDUsIDB4YWQ0YjVmZGEsIDB4Zjc0NzBlMTMsIDB4Nzk4OGQyODMsIDB4NzlhYTJiMmYsCisJMHhjZTdkY2M5ZSwgMHgwYWY3YzAyNCwgMHhkNjA0ZDVlYiwgMHhhYmUwMTJiYiwgMHhiYjY1ZTNmMiwgMHgyNmRkODA5YiwKKwkweGE4NjdlNTI3LCAweGY1OTQ1OWNmLCAweDg4MTlmYjFiLCAweGE1ZmY4NTRmLCAweGUwODkxOWQ2LCAweDNiYzkxMjdmLAorCTB4NWQ3MWQ2MDgsIDB4ZTgxMmQ3Y2EsIDB4OGIwZjU2YmYsIDB4NDdmMzkzZGYsIDB4NTZmM2MxODcsIDB4OGUyN2JlYzksCisJMHg1NTNhZGI4ZSwgMHhiNWU4NDI3MCwgMHgzNGZiZGQyNywgMHgyZTk5ODY3MSwgMHhmOGIxN2RlZCwgMHg1ZmRkMWMwZCwKKwkweGY2ODBkM2I3LCAweGI3ZTBkNWEwLCAweDFhYzQyZWQzLCAweDBlODQ5YWQxLCAweGE0Mzg4M2FjLCAweDAyMTRmYzA0LAorCTB4ZjQxZTIxZjMsIDB4ZmRjMTY3OTgsIDB4Y2Q0MjM2YzgsIDB4OTRlN2U4NTMsIDB4NDQ5ZmY3MzQsIDB4Zjc3NDkwNGYsCisJMHhjMzAzOTBhMSwgMHgzODVhYmQyOCwgMHgzOTcxMmFiZCwgMHg4ZTliZmIyYiwgMHhhY2Y3ODZkYiwgMHg2YTkxYTRjNCwKKwkweDU2MzVkZjIwLCAweDRmMGRkYTM3LCAweGU4NjlmYmYwLCAweDQxZTQyNDZmLCAweGE3NDg5MmM0LCAweDNhMjZmZWZhLAorCTB4MzhmYmU2YWYsIDB4MWVhNmFmM2EsIDB4ZTNkNmQyZTMsIDB4YzJjNzQ4NjYsIDB4YmUzODk3ZTksIDB4MDVhMmU5OGUsCisJMHhjZDMzMTBlMSwgMHg3OTZiZjhhMCwgMHhlYjQyMTNjMywgMHg0ZTI3ODk4ZSwgMHg2YjVmYjQzZiwgMHgyODAxZWZjMSwKKwkweGZiZDU3OTdiLCAweGViYjQ1OGIwLCAweGM4ZDNlYmE2LCAweDM2YjRlODg5LCAweDUzYWQ4MWFmLCAweDFjNGVkY2YzLAorCTB4YTVkZmVlMDIsIDB4YWJkNzRlN2QsIDB4NzE0NjE3YTksIDB4MDkxMTI3NzksIDB4ZGNjNTlkZTQsIDB4YmJmYzM4NGEsCisJMHg1ZmJlZjAzNSwgMHgwMTM4MzdkYSwgMHg1ZmI4NDNmMCwgMHhjZjkwMjVlZCwgMHg0MWY3Y2QxMiwgMHhiN2Y0ZDdlNywKKwkweGNkODA3NDQzLCAweDBjODcxZGFmLCAweDQzYmZhYmIyLCAweGJmZWI5Y2JkLCAweDI1ZmM5NjUxLCAweDMyOWU5NDUxLAorCTB4NjI2MTU2ODcsIDB4NDkxMjU2NzYsIDB4OWJhNWVmYzMsIDB4NGE3Y2ExZmEsIDB4Nzk4Mzk2NTksIDB4YTMyZDQyMjcsCisJMHgwODZiNjFhYiwgMHgwMGIwY2RmMiwgMHgzZmJhOWJjZiwgMHg5MzUxZWQxMiwgMHhkMjIzNzg5OSwgMHhlMjM2N2JlMSwKKwkweDE2NjFkMzk1LCAweDcwNDNjZjFmLCAweGExZDAzNzJjLCAweGQ2OTQ1NWE0LCAweDgxNGQ3YmU4LCAweDhhNDJjMzFjLAorCTB4YTI2ODdhODQsIDB4Yjk0NjU3ZTMsIDB4OWYyOGEzYWEsIDB4Mjc3NGNjZDYsIDB4ZjZjMmM2MTksIDB4M2JiOTVlZGUsCisJMHg1MmY2YjkwYiwgMHhhYTFhMDg4OCwgMHgxOTY5ZWVmNywgMHhlZjA0MjI4YywgMHhiZGRlMjBmMSwgMHg2YmM2ODA3YiwKKwkweGVjMTUzYTk1LCAweDZkN2Y5ZGYwLCAweDMyZWViMDY0LCAweDliNWY3OTUzLCAweDNlOGZlYWMyLCAweGRjMjU3N2I0LAorCTB4Y2Y2ZTkzMzcsIDB4NDlmNjE0N2YsIDB4Nzg1MWY2Y2MsIDB4ZDU4ZmU1ZGUsIDB4OWJkZGYzZGMsIDB4MzlkNjUxN2UsCisJMHgxNzNmODM3MiwgMHgzYWJlMDVlZSwgMHgxZGY1ZWVjMCwgMHg3NzdlMGQ2ZSwgMHhhMzc4N2E4ZiwgMHhkMWZiYTk0NSwKKwkweGQ4NmZjODhmLCAweGJjYWQ3MjhmLCAweDFiYjYzZjdlLCAweGExY2I0ZWEwLCAweDgxZGNmZTcxLCAweDQ3MmY5Zjc0LAorCTB4NzQ5NjlhMWQsIDB4YTFhZjFkMjksIDB4ZDkzZTA5MzAsIDB4ZDBlYTM1N2YsIDB4MzBlZWY4MWUsIDB4NTc4Zjg3MDQsCisJMHg4MjE0MWVlZSwgMHhjM2ZjYjQ4MywgMHhkNTkzMmQzZCwgMHgwZjcwZjg3MCwgMHg4NTdkMjFkOCwgMHg3ZDBmYWJjMywKKwkweGViZTg3MDg4LCAweDZjNWQyOWJlLCAweDkzNWNiYzA3LCAweGQ2ZmJjMDZkLCAweGMxNmMzOGFlLCAweDQ1ZmQwYWY4LAorCTB4ZTNlMjNlYTAsIDB4YmJlNWVmYWMsIDB4YTExZmM1NmMsIDB4ZDM1NGVjZTMsIDB4NDI5ZWYyOTcsIDB4NGRkMWJkNTcsCisJMHg2MjhmYjEyYSwgMHhlOTZhNmNmNywgMHhmNWNhMmJhNywgMHgyNWFiYWMzNiwgMHgzNThmNzVjYSwgMHhmNzhmZjcxZSwKKwkweDc2ZTM1YzAwLCAweDBiOGVhNzNiLCAweGI4YjEzNWQxLCAweGVlZmRjMWM3LCAweDViZjMyY2EzLCAweGYyZjI1NGEzLAorCTB4NjIyNWVjOWEsIDB4ODFjOWM0MGEsIDB4ZmI0M2UyMTcsIDB4OGRlNjVmODksIDB4MTlmNzQxMTgsIDB4ZGU2MDMyZWYsCisJMHhmYjhiMjhmYywgMHgyYjYzY2MyMCwgMHg3NzIxZjgwOCwgMHgxZWUyMGFlYywgMHhiZTIxODgyNywgMHhkOWFiZTY1MCwKKwkweDlhZjVmY2MxLCAweDM5NmY4MzQyLCAweDYwMTVlZjNiLCAweGI0N2QxMGJjLCAweGMwMjNlOGU5LCAweDFkYjFhM2U4LAorCTB4YTlhMmEzZTksIDB4NjM0N2QxOWQsIDB4MDY2NDRlNzUsIDB4M2YwMzM3M2IsIDB4YzYwNDk2YmYsIDB4YTIzYmRlMDIsCisJMHg1MTI2OWFiZSwgMHgxNTFhMWZmYSwgMHg5MWJhMDFhOCwgMHhlNWE2ZTdiZCwgMHgzZDcwOGE1ZCwgMHg3YzNmMTYxZCwKKwkweDdhYmVjYTdkLCAweDRiNmQ2ZmMzLCAweGUwNjk0M2NhLCAweGUwMzNlZTRmLCAweDM3MDI5Nzc5LCAweDg1OGM1ZmE1LAorCTB4NThiNmM1ZTUsIDB4ZmMwMzVmZGQsIDB4ZWRiNDI3MmEsIDB4NmQ2ZmVkODUsIDB4MzZmMzFmNzksIDB4ZDg2ZWZiNmMsCisJMHg2NmRiZWYwNSwgMHg0MjM5MGM1MywgMHg1YmVlZDZmMywgMHhkNzY3Zjc4ZSwgMHhkODdkZDgwNiwgMHgwNWUwMjRkMSwKKwkweDNjM2JkZWJkLCAweGUxMDRmZjE4LCAweDFhNGY3NjAxLCAweGY5MWRhM2MwLCAweDVlZmYxMzY1LCAweDcwNTFhYjJjLAorCTB4MWExZjllODEsIDB4ODkwZGVlYzUsIDB4ZWJmM2IwYjQsIDB4ZDcxMTE2MjEsIDB4Y2VjMmM0MzksIDB4YmRmN2UyNTksCisJMHg5NWJmODIyNSwgMHhmYjAxYmY3NSwgMHhhNjk5NDNjNywgMHhiY2ZkZmZkZSwgMHhhZjg5YTRiZiwgMHhlODU0ZjgyYiwKKwkweDI4ZDI0YTg5LCAweDRjZTQ3ZmI4LCAweGEyZDEzYjhjLCAweGE4ZDg5ZmExLCAweGNhNzhkNTE0LCAweDg4Nzg4ZjdiLAorCTB4NDdhYTBlZjMsIDB4ZmYzZGQ4YWYsIDB4OTRhYmQwMmUsIDB4ZmMwMGJlN2UsIDB4OTY4ZGZiMDQsIDB4NGE2ZTAwMjMsCisJMHg3MGNmYTA3ZiwgMHgwZGVmYTFmOCwgMHgxZTYwZjk4NywgMHhlY2I2MTdiMCwgMHgzZGUyMjI1ZSwgMHg2YmM0N2QxYSwKKwkweDQ5MWJkYzI2LCAweDkxNDY2N2ZiLCAweGZkZjRhZGFhLCAweDQyNWE2OGNjLCAweDEzZDc4ZTNkLCAweDJiMjA3ZDc5LAorCTB4MWE3MTNmNTMsIDB4M2Q3Y2ZhMDQsIDB4YjY0ZWJiOGYsIDB4YzkzMWZjZjAsIDB4ZDE4NmVhM2UsIDB4NWM3NjY3NTAsCisJMHhlYTI0NTI1NiwgMHhlMTZmODUwNSwgMHhiNzM4MDgwZSwgMHg3NWY5Zjg5NiwgMHgwMGM1MjA0YSwgMHg1OGY4NTM3OCwKKwkweDU2ZmMxODBhLCAweDI0NTJiNGFhLCAweDE4ZjIwMTg3LCAweDdkZDBmMWRlLCAweDlkY2JiZDRiLCAweGRmNjUyZmFiLAorCTB4Y2Y5ZmVhNzEsIDB4YzFmOWViZTQsIDB4M2QxN2Y1ZjYsIDB4MDk5ZWVmYmUsIDB4YjczNzJkZjAsIDB4YWQwMzcyM2QsCisJMHgwZTdhNWM1NywgMHg0Nzk3MDdjZiwgMHhhMTc5NWM1NSwgMHhlYmY0MmY3YiwgMHhkYmZjZTc3ZiwgMHg0ZDg3NDA1MSwKKwkweDdlYzI5OGRmLCAweGUxYzM1NTBmLCAweGMwMjllMmQ2LCAweGJkZjkzMmY3LCAweGM5NTEyNDJlLCAweGIxZTU1NjMzLAorCTB4Y2JiNzFiNDIsIDB4ZjgyOTk1MTAsIDB4ZmZhY2VkMWMsIDB4ZjgwODExNDAsIDB4ZjBiMTRhZjQsIDB4OWUzMjU0N2UsCisJMHhlNWQxNGUxZiwgMHg5Zjg3ZmVhZCwgMHhjMTMyZjljNSwgMHg3MTI1MDAzMCwgMHhjZjM2MjhjOSwgMHgzMjRlY2MzNywKKwkweDljZTBmZmQzLCAweDE3M2YxYTY5LCAweGFmNzI0NzdiLCAweGRlZjFkMmIwLCAweDM1N2NlYzIxLCAweDE5YWFhZTMzLAorCTB4YzZjNGM0ZWEsIDB4ZmJkYTI2Y2YsIDB4NmIxMzMyMGEsIDB4YjhjMmM2YTcsIDB4ZGYxOGM5ZDEsIDB4ZGFlYjM1Y2EsCisJMHhjODEyYmQ1MywgMHg4YzlhOTI2OSwgMHg4OGQzODk3OSwgMHg3YTYzM2VjYSwgMHgwOGVlZWQwMywgMHhlMzkwMmViYSwKKwkweDc0MmM4Y2Q3LCAweGU3ZWRlNTRlLCAweDRkNDNmZmU4LCAweDJhOTlmNmU0LCAweGM3MmFlMzdmLCAweDhkNTRlNzVjLAorCTB4Zjc4YjUyZmQsIDB4OWZlOWZkMDEsIDB4ZjJlMWVkZTIsIDB4ZmNlMzNlMmMsIDB4NzdjOWUyZGYsIDB4MWViM2Y5YzIsCisJMHhlMTBlMzk5ZSwgMHgyN2EzYWI3ZSwgMHhkNDcwZjVkYywgMHhhYjgxNWRjMywgMHg5ZmQ5OGUxZSwgMHg4NmM2YTczOCwKKwkweDJlMWU5MzgxLCAweDQ4ZWQ0OGQzLCAweGRjMGE2M2QwLCAweGM3Nzk3MGY1LCAweDlkZTJlOGNjLCAweGFiZGUxMzM0LAorCTB4ZTBjNDhlZjgsIDB4MjMzNTBlZjgsIDB4OWJhNDFlYTEsIDB4MDFlZjExNjgsIDB4ZjVlMjhjY2UsIDB4YmFiMDQ3MzcsCisJMHg2NGE4ZWY4MiwgMHhhZTFlYjdjNCwgMHhjNjY2Mzg3YSwgMHg1OGUzZjdmMSwgMHgyZjAwYmRmZiwgMHhlMjAyZTUwOSwKKwkweGNjOWJhMTQ3LCAweDMxZGRhYWQ0LCAweGVjNTA3YTJhLCAweDJlMWM2OWViLCAweGZiNDZiZWQ0LCAweDhhZGUzNzM5LAorCTB4YWZiMDI2NzEsIDB4ZTA4NDI1YTcsIDB4ZDZjZTViOTYsIDB4ZjJkYzNiOTUsIDB4ZjRhOWY4M2MsIDB4NzJiZmJjNzUsCisJMHhmZjNmZTEwYSwgMHhjYTJmM2MxNCwgMHhjZTA1NTVlNCwgMHhkYWQxYmU1MywgMHhhNjlhZDNjOSwgMHhjMzM4ODI5ZiwKKwkweDdlZmI5MzUwLCAweDEwODBjZmEwLCAweDE0NzVlNzgzLCAweDcwNzQ0N2VlLCAweGQ3NjdiZWQ3LCAweGY4NzBmNWQ2LAorCTB4YjEzMWZjMDMsIDB4M2ExNGJjMjcsIDB4ZTNjMmMwZmIsIDB4MjBjODAzNGUsIDB4YmNjNzk3YjAsIDB4ZjIwZDExOTYsCisJMHg4NmM1MzQ5YiwgMHg3MTVjNGI4ZCwgMHgwZTM4M2YzOCwgMHg2M2E0NTdhNywgMHhjZjgzYjg4MSwgMHg0MjNmYTllZCwKKwkweDVhYTNlZDhlLCAweDM2YzcyNTUyLCAweDk2ZDNlZThiLCAweDRjNzI5ZWY4LCAweDhlNjRkM2MxLCAweGJiYzRjOTg3LAorCTB4OTM0YmUyMGIsIDB4ZDA0NWY0ODksIDB4ZWQwZTQ4MWYsIDB4ZTdkOTViYmYsIDB4ZjYxMDMyNDAsIDB4YzFjNTgzNzksCisJMHg2N2RmM2ZlNCwgMHhiY2Q0ZGY3MCwgMHhmOGIzZjk4NCwgMHgwYjY2NTlmYywgMHgwMjQzNWY3ZSwgMHhjZTEwNDc1MiwKKwkweDkxZGY3ODI5LCAweDVhMWIxOGQ3LCAweDRmYmY5Mjg3LCAweDY2MTE1NDg2LCAweDdiYzNjZGNmLCAweGM4NWMyOWFlLAorCTB4NzVhMTUxNzcsIDB4ODQ4MmFjOTgsIDB4NzVmMGZkZjcsIDB4N2IzM2E5OWMsIDB4NWJhZDhmMjEsIDB4OWQ4MTQ3NzQsCisJMHgxYmVjMjFkNywgMHhmYzkzZmI4MywgMHhlOWZmNDAyMywgMHhlZTM1Y2ZkYiwgMHhkYTc2ODBhZSwgMHhmMWZiMDhhZiwKKwkweDU5MTYyZmY1LCAweGMzYjAyMWZjLCAweGI5M2U3YmU0LCAweGIyOTUzYjc3LCAweDg1MDllYTM1LCAweGZiZTBiMzdlLAorCTB4ZGU4MWNiZDQsIDB4ZGQ2MTAzZmQsIDB4ZDFkNTQwNTMsIDB4ZjY1OWU3NzIsIDB4NjM3NjQzMWQsIDB4ZWNmMzA0YmEsCisJMHhmZjc5NjZlOSwgMHg4MTI1YzQzOSwgMHhkZmE3YWI3ZCwgMHhhMWE3NGJlZiwgMHgwODYwNDU3OCwgMHg1ZDhhMjlmOCwKKwkweDFlZWFkNTM2LCAweDU3Y2ZhNTY5LCAweDliNjZlZmYzLCAweDA1MTg4ZWNlLCAweGY0YzFmOTc4LCAweDRmNGI0MDc0LAorCTB4YmE1MTFkMGEsIDB4ZWNmMDBmMWEsIDB4NjlmY2Y4Y2EsIDB4Y2RkZmM3MzAsIDB4N2EwMDk3MzgsIDB4NDNkZmIxNTEsCisJMHgwMjZiOGE3NiwgMHgzYjM3YTdhYywgMHgzZGQ1ODk3ZSwgMHgzYjAxN2FjNSwgMHgyZTY3YjE1ZSwgMHhkZDkwODdlNiwKKwkweDc0YTY0MWQ0LCAweGNiYzcxYjc0LCAweGNjYWI3MzNjLCAweDYwMGZjZGVlLCAweDQ4ZWFmZGZlLCAweDQ3M2I1ZWU1LAorCTB4Yjc5MWQ4MjQsIDB4NTRkOTRlYWQsIDB4ZDU4NmU3MDcsIDB4NmI3ZWZlMmMsIDB4ODNmMWFjOTUsIDB4ODZkZDkwZGQsCisJMHg2NmZiYjNlZiwgMHg2ZGE2NWY2ZiwgMHhmZTYwNGNmZiwgMHhmYjU3YTE3ZSwgMHgzNDEyNTg5YywgMHg5Y2Y2ZWRmNywKKwkweGMwMzVlMGQ3LCAweDMxMjNjM2JjLCAweGFmM2Y0MTNmLCAweDc5ZmE3ZjdlLCAweGU2YWRmM2Y1LCAweDYzNmFkNTdlLAorCTB4Y2FhNzQ4ZWQsIDB4NjU2MDU5MmUsIDB4YWFmNzUwZjYsIDB4Y2FlMGViYzcsIDB4ZTdlMGRlYmEsIDB4OTM0ODBmMzYsCisJMHhiNWFiZjc1NCwgMHgwODJjOGVhZCwgMHgzMjhjNmY3NywgMHg3OWVmMDI5ZSwgMHgwMGUyY2ZjNCwgMHhjM2RmZjI1NSwKKwkweGU1OWI4M2RkLCAweGRlODFmMTY2LCAweDk4MTYxZGU2LCAweGUxYTA3NjhhLCAweGY2MDhiZjQ5LCAweDQxMDBiMGZjLAorCTB4ZTAyYjNiZmIsIDB4ZjhkMDJjMzIsIDB4ZWU0ZmNjMDEsIDB4YmRjMDA3ZTEsIDB4ZDY1ZWI0MjYsIDB4MDFmOThiYjAsCisJMHg0ZmU4ZDVmNSwgMHgwMjdmNTE5NCwgMHgzODdhY2NmNCwgMHgxN2MwMWU5YiwgMHg0MWZlODY5NCwgMHhmYzg1ZGZkMCwKKwkweGNmYjgyY2E5LCAweDEyYzNmYjkyLCAweDVhZDQ5N2E1LCAweGY1YTM3ZmQ2LCAweDA5NmFlMzVkLCAweDkyNzc1NWZjLAorCTB4ZTM2MzI5NGMsIDB4OThkN2VmYzMsIDB4OTM1NTVmYTksIDB4ZjUwODIyNGMsIDB4Zjg3ODVlYWIsIDB4YzA2YmU5ZmQsCisJMHgwOTc1OGU1ZiwgMHhhZDI4N2Y3MCwgMHhmN2ZhNThkNywgMHhmOGRlYmZkZCwgMHhiODFhZmVmMCwgMHg2NWZhOTQ2ZiwKKwkweDdmMmFhY2ViLCAweDc4ZmUzN2I3LCAweDBiOTE4YzA0LCAweDNkYmE0N2YwLCAweGExZjAyMzdmLCAweDhhNjhhZjEyLAorCTB4MTExZjdjZTAsIDB4ODA2OGJiYTQsIDB4NTcyNzQyOTcsIDB4N2U4ZjliMmYsIDB4ZTcyNWM0NDUsIDB4NTg5ZTQwODcsCisJMHgxNmZmYzcxNiwgMHg0NmMzOGYyYiwgMHgxMjlmZjdiMSwgMHhiZjkwNWJkZCwgMHgwMjNmM2FkZiwgMHg4Y2VmY2JlMiwKKwkweDVjZmU4YTNjLCAweGU3YzU5NTkzLCAweGQwNGE3OWY3LCAweGI5ZjA1MjdlLCAweDNmNzAyYWNiLCAweGY4MTAzZmM5LAorCTB4Y2RmMWRhZWQsIDB4NjQ5N2UwNzEsIDB4NDNkZTAyYzksIDB4OWVmYjI0ZGEsIDB4NzkwMGNmNGMsIDB4ODJiZWRiMzQsCisJMHhhMjZiMjk2ZSwgMHg2YjEzYmYxMSwgMHhiYzBmZjA4YSwgMHgzNWE3NjU1YiwgMHg5YjRjZmJmMSwgMHhhODFkZWVjZSwKKwkweDY2MWU2M2NlLCAweDQ1NjVkZGNkLCAweDMwOGJmM2ZhLCAweGVlYzY1NjdlLCAweDdiZWZhMGMzLCAweGZkMjEyZmQzLAorCTB4N2Y0MDEyZTEsIDB4MTNmYmYzOTAsIDB4NjFhOGZjZjAsIDB4NDJlMjBkOGYsIDB4ODI3ZWZjMWQsIDB4MDljZDBkMzMsCisJMHhiZTU5NjlmMywgMHhmMDM2MmZlNSwgMHg3MGU3ZGVkNywgMHhlMmI1MjMzOCwgMHhkYjY1NGEzZCwgMHg4M2ZmYmM0NCwKKwkweDBiNzA5YmNlLCAweDE2MWJhN2M0LCAweGY3ZWZiMjY0LCAweDhhNjc3N2Q4LCAweDY3ZmY0Y2ZlLCAweDE2N2NjMGYzLAorCTB4YzhlZmM0MzQsIDB4YjI3MjdiMTQsIDB4ZjU4M2ViZDksIDB4MTg4YjU1MzUsIDB4YmJhYzllMmYsIDB4YmYwYTZjMzcsCisJMHg1ZjZmNGMzNywgMHg3MTJhYjQ5ZSwgMHg4N2NjMDRlOSwgMHhmMzY3NmE1YSwgMHg1OTRmYzZmNCwgMHg5ZjEyYzRkZiwKKwkweDI0YjJkZjhhLCAweGNmZWIwOGJmLCAweGMwODEyNmZhLCAweDVhNjc5NzE1LCAweDAzYzg5ZTUyLCAweGNlYzg5ZTNmLAorCTB4NDRhYzMwZTEsIDB4Y2FmZGEzNzYsIDB4NmZlODlmY2YsIDB4YmU0M2RjMzcsIDB4NmNkZTU3OTMsIDB4NGFlYjM3MzgsCisJMHhmZGZiNjYyNCwgMHg3NzYwMDk5NywgMHhlMGIxZmJiOSwgMHg4YTA3ZDMyMiwgMHgxYmU1Mzc3ZCwgMHg2ZjU1N2M2ZCwKKwkweDhkMzRlNmU3LCAweDQxMjA3ZmJkLCAweGE3N2ZiMzc4LCAweDU1ZWVjMDIyLCAweDA2ZmY2MWViLCAweDdiYjU4N2E2LAorCTB4ZTEwYzc5MDksIDB4ZjUyZGJlOTAsIDB4Mjk0N2I4MWEsIDB4M2IwNjhmZmQsIDB4N2MwMmRiY2MsIDB4M2NmODBmMTEsCisJMHg1NGZjZjc4NywgMHhkMDhkZmYxMCwgMHhkYTIwZDE1ZSwgMHg5MjdlYjBmZCwgMHg5NWYwMTk3MSwgMHg3MDI4Mzc2MiwKKwkweDZjZGYzYzY5LCAweDkxZDc0MzFlLCAweDVmNjBkNjc1LCAweDMzNzg4NzRlLCAweGNmZmEwNWYwLCAweDJmYmNmZWUzLAorCTB4NTM1N2Y0MGUsIDB4ODI3M2MyNDAsIDB4YTNiYmIzYWMsIDB4NjBlNGE4MTYsIDB4M2UwMzc5ZDMsIDB4NWJmY2YzN2YsCisJMHhkODgxZTdkYSwgMHgyZGJkZTBjYiwgMHhlZjE3ZTYwNiwgMHgyOGY3ZmJkZSwgMHg5ZTZmNGI5MCwgMHg4MmYxYzZlZiwKKwkweGJiNGY0Mzc2LCAweDZiOTFlMTE4LCAweDY3NzE4MzE1LCAweGM0NGM1ZGI1LCAweGI3OTAwM2FjLCAweGFhOWEyZDM1LAorCTB4YmI3N2ExMzEsIDB4NzIxM2ZiMzcsIDB4YjRmNDk1YmYsIDB4MWVjMDcyMWYsIDB4MTFkOGMzMTEsIDB4M2U3NGNlMWMsCisJMHg2ZjQ4ZjgwOSwgMHhlMzZlNWM1NywgMHgyNGMxZTZmMSwgMHg2Y2EzZWUxZCwgMHgxOGI3MWYzYywgMHg4YTZlMWZiZiwKKwkweDdkNDcyZmIyLCAweGFlYTVlY2NjLCAweGJmMWZhN2RkLCAweDEzZWY5ZTA2LCAweGU3MTFmZGQ5LCAweGI3YTdlNDQ1LAorCTB4ZGExZTJlNzYsIDB4MmE1YmUyYTYsIDB4NWY0ZjExMzksIDB4ZjlkYjNmZjUsIDB4ZDVmZmVkMDYsIDB4NDcxNjQ4OWUsCisJMHhhOTk3OWM5NywgMHhmNTA4NzdiZiwgMHhmOTc4NzFmNywgMHgzOGYzYjAwNywgMHhkN2I4MDBlZiwgMHgyZmRiMDdlOSwKKwkweGZhZmMzZDFkLCAweGMzZGExYjNjLCAweDFlYTBlOTgxLCAweDM3NmJhYzQ2LCAweGFjNWJmZTAyLCAweDkwZDlkN2Y5LAorCTB4MDBhM2VhZGYsIDB4MzM5MjVlMmUsIDB4ZjM4MDRjOTAsIDB4NzQwMzkyN2EsIDB4NzYyNmE4MTUsIDB4YjViNjI3ZjAsCisJMHg5NzgwMGMxOCwgMHg5OGM5OGQ4YywgMHg5Zjg5YjNhNywgMHhhZmFhMmU1NywgMHhlOGFiMjYzNSwgMHhlZjNmMTE2MiwKKwkweDg3N2IyOTNhLCAweDFmOWVhYWM0LCAweDcyZjkzMWIwLCAweDZmZTk0ZjcyLCAweDQzZTM0ZjMwLCAweGM2MWUxOTEzLAorCTB4MzFiMDZjZGUsIDB4ZDE4YWZiN2QsIDB4ZTg2NmNkN2IsIDB4ZGY4MGM0NzcsIDB4ZmJkZWVkMGQsIDB4Y2ZiODVlZmEsCisJMHhjNzYxZDE3OCwgMHgzZGZmODg1OCwgMHhiZjYwNzM2MiwgMHg2YTliN2RjNiwgMHhmMWI3Y2YyMCwgMHg1NDUyZDAxMywKKwkweDE0Mjg2Y2FmLCAweDM3ZGU3NDBkLCAweGVmYzU4Mzg4LCAweDFmZDAxODBlLCAweDg5M2RjNjBmLCAweGY5ZjYwZTJiLAorCTB4MWJjZjVmMTAsIDB4ZjljZDA2MmQsIDB4ZGVmYzFiZDgsIDB4MzI2ZDdiZGQsIDB4ODliMTJmYjYsIDB4MmRhZGM3ODgsCisJMHgzN2EwNzEzOSwgMHhiYmVlYWM1YSwgMHg4ZTJmYTA2ZCwgMHgxMmMwZDViNSwgMHg2MjlmNzg5NCwgMHhiMDNjNGRhZiwKKwkweGY0ZDE5YWY1LCAweDA2MWQ4OWNmLCAweDcxZGJhMDNiLCAweGY2MTE3OWUwLCAweDQ4NDkzOGViLCAweGQ4N2E0MDhjLAorCTB4OGYzYzc0NmYsIDB4M2EzN2JjN2EsIDB4MWQ3NDc4ZDgsIDB4MmFiZjAxNmYsIDB4ZmY5YWE3ZjAsIDB4N2Y1YTM0YTEsCisJMHg4NThhNTVhMywgMHhmZTA1MmVmYywgMHhmOTk0M2VjYSwgMHhiNWM0ZjUxZCwgMHhlNGFjODJkZSwgMHhiODgxN2FkYSwKKwkweDNhNWY5MmIzLCAweDdmOTQ0ZWNlLCAweGQyZTkwMTJmLCAweDZhM2Q3MzY4LCAweGRhMGVmNjYzLCAweDMwZjcyN2Q3LAorCTB4YWUxNWU4YmIsIDB4ZTE1MjQ5NDcsIDB4ODI5ZjgwNTAsIDB4OGIxYjdhYTcsIDB4ZTllYjJhMzMsIDB4ZGJkZmZlNmQsCisJMHhjYTU0OWU5OCwgMHg5YmQ3NGJlZiwgMHhlOTE3ODc2NCwgMHgwZmNiMWI2NiwgMHhlNmZkNzg3NywgMHg2YjIzYzg1NCwKKwkweGNmN2ZjNTRjLCAweGZiNjc5NTQ5LCAweDkzZTdhNDdiLCAweDFiMDU3YmRhLCAweGY4MDYwY2RiLCAweDg3NjJhYzBlLAorCTB4NmRlNjgzMTAsIDB4MjBlYmVkMWYsIDB4NDhmNTQ5OWQsIDB4MDk4NzhkN2YsIDB4ZGQ2OTcxZjIsIDB4NDhlZTJjOWQsCisJMHg3ZmJmMGRlNSwgMHg4MWQxY2YwZCwgMHg3YTc5Zjg3ZiwgMHgxMzk2ODE3ZiwgMHgxOGFmZDY5YiwgMHhkYmY1ZjA4OCwKKwkweDcwNDJhZjgwLCAweDY1MDM3Y2EyLCAweGU4MTFhZDU1LCAweDU2NTJkMTc1LCAweGU5NzNmMzE2LCAweGM4ZGQ2YjQ1LAorCTB4NThlYjQ1OWYsIDB4NWIxZWUxN2UsIDB4MGNlN2FlMzIsIDB4ODg2MjU3YTcsIDB4MjdmOTAwMWMsIDB4NjU3ZjBlMmUsCisJMHg2ZTljNzlkZCwgMHhkMTNjMzU0ZiwgMHhmYTUyZjMwYywgMHg3M2UwMTNmYSwgMHg0ZjYzZTM1MiwgMHg3YTE1NzJjMywKKwkweGM2NDFiNTNkLCAweGI1MjI0YTcxLCAweDdjYWRmNmU3LCAweDE4MDc2ZGJjLCAweDIwZGM0ZmJkLCAweDVmZmRjMGU3LAorCTB4MGVjNGJkMTMsIDB4MzYzN2VjNzEsIDB4N2U0MTE0NmMsIDB4OWNmNDAxYmYsIDB4ZjQxY2Y4Y2MsIDB4MGYzZGM5ZWQsCisJMHhmNDAyZmQ0NiwgMHg0MDgxYmI1YywgMHgyMzE1ZmNiYywgMHhlMmEyZDkyOSwgMHg1ZmViZGQ4YiwgMHg2OTZmZjBkNSwKKwkweDE4MzVmNTVkLCAweDE1OGI2Zjk3LCAweDdjMmJjZTQwLCAweDE1ZmRjMGFiLCAweGU0MmFmM2EzLCAweGZjNzRlYmZmLAorCTB4MmZiZDk1M2YsIDB4ZGZiMDNiNDcsIDB4OWZmZjljMTMsIDB4OWZmOTQxOTgsIDB4MTBkOThhM2UsIDB4YWYzOGMwMjMsCisJMHgwN2RmYzMxOCwgMHhhNDBmZjVmNywgMHg2ZDVjYTBiZiwgMHhiZjU3MjFlYiwgMHhjZGI1NzI2NiwgMHhhZmU3NGE5NiwKKwkweGUzMWJiNmI4LCAweDcxZjVjMTBjLCAweGFhNjI3OWJhLCAweDAyYzkzNzQyLCAweDYyOTZiZmMwLCAweDhiYzAxODcwLAorCTB4OTllODE1YzIsIDB4ZGZiN2NkZGEsIDB4ZDk1Yzg2OTAsIDB4MGYzOWUxMjIsIDB4ZjllMjQ3M2YsIDB4MDI3N2NhMWYsCisJMHhlNDg2YmYwYSwgMHg2ZWI3YzI5OSwgMHhkNWQ4MzQ3MywgMHg4MDU2YWI1MywgMHhlNzk3MWY1ZCwgMHgyNTNjZmE0NSwKKwkweDUyYzY4N2I4LCAweGY4MGE3NjdkLCAweDM4M2M4YzM4LCAweDU3YzdlNWMxLCAweGY3NjJmYmIyLCAweDdhMDAwZmVlLAorCTB4MjIxZWExMmUsIDB4MTNhYzg3ZWMsIDB4YTUxNzgwZWMsIDB4ZGQ4ZWIxZGQsIDB4NWEzYzNhYzMsIDB4MmJiZjljZDAsCisJMHhlZjBjMWZmNSwgMHg0MWZiOGY0MCwgMHg3YzYzNDc4NywgMHgzYzg0NjAzYSwgMHhhNjNlMTFkNSwgMHg4MzkwODhjNywKKwkweDU3MGM0MGZjLCAweDViM2UwMDBmLCAweGNkZDdmNTQ0LCAweDRhNzVmZDJhLCAweDU1M2E0NWFlLCAweDM0Nzk3MGUwLAorCTB4YzU1ZjVmOTMsIDB4OTVmZjdkYjAsIDB4ZTIxNTg1ZDMsIDB4MmY3M2FhODUsIDB4MDI0ODkwZWEsIDB4NjA1MTY3ZTMsCisJMHhmOGMyMmU3YywgMHhiYTRjZjZhNywgMHhkYWZkZTkwYSwgMHgwNzZlZjRmMCwgMHhmZTE2MmFmZiwgMHg0OGY1YTczZCwKKwkweGVjMzMzMTlmLCAweDEzY2IxZGY4LCAweDQ2MjIzMzkyLCAweGIwZjkxZjYzLCAweDU3ZjFiZGRjLCAweGZkMDFkN2U4LAorCTB4NDZmN2JmMDIsIDB4ZmY0MDI1ZmYsIDB4ZmJkZDBjMjQsIDB4ZjBhYmRkMjgsIDB4YTUwMWQwYTcsIDB4NTVhMjZiOGIsCisJMHgxNzRmNDFmMiwgMHgwMmEzNzljYSwgMHhlNzc0NTc5NywgMHgzMzQ3NGY5NSwgMHg5NzgwYjA3OSwgMHg2NmYyNWU4ZSwKKwkweDYwZmNmZDk0LCAweDgxZWM5ZjNjLCAweGNmMGNmOWU3LCAweDdjMDJiZTIxLCAweDY3ZTFmMjJiLCAweDNkYWZlMTE3LAorCTB4YWY2Yzc2ZDEsIDB4ZTYwMTc0ZjksIDB4NzNmMmQ0YTksIDB4OWYzZTdhYWIsIDB4ZDFhNWVlYjIsIDB4NGI3Y2U2ODIsCisJMHhjYTM0ZWU3ZiwgMHg1YTJiYmVlMiwgMHg0OGVhM2U3NywgMHgzNGM3ZDEwYiwgMHhkOTJlY2Y2ZSwgMHhmZjczYzI2OCwKKwkweDc4MDJkMDJkLCAweGJkZmVjZGRiLCAweGJiM2RlNTZjLCAweDBhNGYwZDQ0LCAweDRjZDExNWVhLCAweGUxZjQyYjhlLAorCTB4YzMyNDY2NTgsIDB4NTVmMmZmYTgsIDB4Yzg2ZWUxNzIsIDB4YWI1OWY5ZmYsIDB4ZGQzNDZmMzcsIDB4NzdhMzE2YzcsCisJMHgwN2U4YjVmNiwgMHhmMTgyYWYzOCwgMHhkODMzY2FhZiwgMHhjNjI0MWYyMSwgMHhkZTIwMTc2NSwgMHg3YzBhMjQ4MSwKKwkweDMzY2Q4ZmI4LCAweDE5NzlkNTJlLCAweGU3MGVjOWZhLCAweDBmMDc5MDM4LCAweGY4Mjk3YzczLCAweDliZDBlMDU1LAorCTB4YWYwZGViOWUsIDB4ZTI3YzM4N2IsIDB4OGU1ZWJiNzksIDB4OWVmZTczMTQsIDB4NWM1ZGZiYzIsIDB4ZTA0NTc4OGUsCisJMHgyZjcxMWIyNywgMHg1OWZkNjExNywgMHhlNTA1ZmU0YywgMHg3M2MxMTY0OCwgMHg3Mjc1OTdjOSwgMHg1ZTlmZTVlNCwKKwkweDkxYWNiYzhlLCAweGMyZGExMzIzLCAweDBiZmExMWNhLCAweDFiZjFmZmNiLCAweDRiMWRhMjE2LCAweDYzYjc4NzBlLAorCTB4M2QzMzQ2NzcsIDB4OTNmYTBmMWMsIDB4YjJmNzhiZjYsIDB4Mzk4N2RlZjMsIDB4YzQ4YTUyZGQsIDB4MGRkYWM5YmMsCisJMHg1NzEzY2MyNiwgMHgzNjZkOTBlNCwgMHhhZjdmODFjOSwgMHgxNmZhMDZkOSwgMHgxZjc2Y2Q3YSwgMHhjNWU3MGM5ZSwKKwkweDljMDc0NjQ5LCAweDAzOTI5ZjVmLCAweGQ0NTNmNzg4LCAweGZhNDVhZjAxLCAweGM3ZmJjN2M4LCAweDAyMjNjOGMzLAorCTB4NDdlZjEyZjEsIDB4OWNlZmQwODMsIDB4OWYyMTM2MjYsIDB4NTA0Njk5MmMsIDB4NzhkZWVlN2YsIDB4NDk1NWQyMDUsCisJMHg3NDAwOGE1ZSwgMHgyMzE3NWE1YiwgMHg1NGVjN2I0MCwgMHg5NGU0MDFiYiwgMHg5NjJiOGZiMiwgMHg3MWIwYzgxOSwKKwkweGQ0MDcwN2M4LCAweDZmMGFlNDcyLCAweGNkYmJmZTE1LCAweDQ5ZGNlMzQzLCAweDQ3MjEwYzcyLCAweDMzZmIzZDFmLAorCTB4OGRhOGJjNzUsIDB4MjJmMWQ1ZDYsIDB4ZmJlMDdmNWEsIDB4NDY4ZThiYzQsIDB4Nzg4MDFlMDcsIDB4YWU2YzNmZDEsCisJMHg5NDc3OTg3NiwgMHhlYTI4ZmYyNSwgMHg5MTJhYzRiNywgMHhjNWQ2ZTRhOCwgMHg0YTFmYjdlYywgMHgyZTNjOTUyZiwKKwkweDM0YTk1YTQ1LCAweDgxYzRkMDRlLCAweDYwNzNhYjZmLCAweDU4MmJmODFjLCAweGUzODBjNTRmLCAweDc4NzBjMzRmLAorCTB4N2I1ODQ2YWYsIDB4MWZhM2FkOWIsIDB4MTNlNDBiOTcsIDB4OTdlOGY4ODIsIDB4ZmM0MjI1NWYsIDB4MDYzYjkxNDUsCisJMHgyZmUyYWM3YiwgMHhhMTk3OTAwYiwgMHgwMzdmZGJmMCwgMHhkN2I1N2QxYywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKKwkweDAwMDAwMDAwLCAweDdkY2RmZjAwLCAweGQ1OTQ3ODA5LCAweGU3N2RmMGQ1LCAweDI0Y2IyZDlkLCAweDc2NDJjOTkzLAorCTB4MDNiYmVjMjYsIDB4NGViMWFiMDksIDB4MDQ5MDYwMDgsIDB4OGQ0NDEwMDcsIDB4YjA5MDA5MzgsIDB4ZDI5MTAzNjQsCisJMHgyMDgxOTZkNiwgMHgyYjE4OGEwNiwgMHgwZWIxNTRiNSwgMHg0NTUxZmExNCwgMHhkYjFhYjYxYiwgMHgxYTQwMTNhMCwKKwkweGFkNTYzNDE0LCAweDYxYTVhZmQ4LCAweDgwODkxZDkxLCAweGU1OGFkM2ZkLCAweDdiZGNlNzNiLCAweDI2NGVmMzMzLAorCTB4ZTc5ZjZhMDIsIDB4Y2RjZjBmMGYsIDB4Y2Y3YmRlNWQsIDB4NzczZGZiM2QsIDB4Nzk2MzJkNDksIDB4OWIxOTIyM2IsCisJMHhlZDUwYjM5MCwgMHhjY2M5YTkwNiwgMHg4MzFiMTYzYywgMHg0MzYzMmYxZiwgMHgwODdhM2U3OSwgMHg2Yjk4NTllNiwKKwkweGYyNmI2MzIwLCAweDAxZGU3OTc1LCAweDlmYzc1ZDhjLCAweGEyNjlmZDNiLCAweDY3OGUzZTE1LCAweDMwZDZmZTZjLAorCTB4YjUzMzQ5ZWIsIDB4N2ZlMWQ3NjcsIDB4MjY4YzVkNzksIDB4NjQ5ZjU5NWYsIDB4OWZjN2Q5M2QsIDB4MjRiZjhmOWYsCisJMHg0YzMzZmZjMSwgMHgyYjE4MTJjZiwgMHhlMWE3ZTI2MywgMHg3MGZmZGZjYiwgMHhkZmM3YjQxOCwgMHg1NGRlYzY1NSwKKwkweDgwNTY4OWRkLCAweDEyZGNkY2E3LCAweGQ4Y2VkZGQ1LCAweDEzYzdmOTMzLCAweDUyZDQ5MWRjLCAweDIyM2RkZjg3LAorCTB4Yjk3MTc4YzYsIDB4NzFkZWJkZTMsIDB4NTVkZTc5OGMsIDB4MGZjODE2ZDksIDB4NGEzZDE5MzYsIDB4NjRlMmZjMzQsCisJMHhlODgyNmI3NiwgMHgwNjk0N2UwZiwgMHgwNDE5NjdjNSwgMHg1NTQzN2ZmOSwgMHhmZTk3NjMyYywgMHhjNWY0YTNhZCwKKwkweDMyZjJiODlmLCAweDdhOGFmYmUwLCAweGI0Mzk2MzlkLCAweDE4NTA2OGFiLCAweGQxY2M2MmNiLCAweDE5Y2Q3OTk1LAorCTB4NDc4NWQ1OGMsIDB4NWZkMDYyMGQsIDB4YTc0OGJlY2UsIDB4MjkyZmNhMDEsIDB4ODMyOWFmNjYsIDB4ODcwODAwZDEsCisJMHhhMjNmYzI0MSwgMHhkNDFiN2QzNSwgMHhkODk4Mzc1NywgMHhjYTVlYzg2YSwgMHhlMTE5YWM2MSwgMHhkOWEyM2JkNSwKKwkweDA3N2UzZjAwLCAweDBmYTY3ZTFkLCAweDZiY2EwMGNjLCAweDYzMGIyZTFkLCAweGZmNzhjMjliLCAweDdiNjRjMjliLAorCTB4YjQ4MzM0N2IsIDB4ZWNkMTkyZGIsIDB4ZDdhN2MwMDQsIDB4ZjQwZDE2MzMsIDB4Njk4M2M0ODEsIDB4MDM2ZTkyZjYsCisJMHgxZjMwOTlmNCwgMHg4MDE4ZjMzZCwgMHgzZWFkZDk0ZSwgMHhhZGQyZjExNSwgMHg5MTYzYWVkNSwgMHhhZGY0NzFmZSwKKwkweDRkZGJlNjhjLCAweDYwMzlkNzZmLCAweGY3ODEzYWZjLCAweDU0M2I0ZDlkLCAweGQ4NzNlMDNkLCAweDE1NmFkYTk4LAorCTB4ZjcyOGQyZDIsIDB4YThmM2M0NTgsIDB4MmM2YWFhZWMsIDB4YThmN2NkOGYsIDB4YTU5ZjY4NmUsIDB4MDBiM2VkNTQsCisJMHhlNjc4ZDg1ZSwgMHhjY2U1MDJkOCwgMHg4NDhmODMwNywgMHgxOGQ2MTZmYSwgMHgyMzk4ZDkwNSwgMHgyODI4Y2UyZCwKKwkweGQ5YzY3NTFmLCAweDFkZTYwMDM4LCAweGY2MGE2MmVkLCAweDFhMzJkOGM3LCAweGNiYTQ1ZmJmLCAweDM4YjJmZDg1LAorCTB4ZmQwMDUyYTcsIDB4MjMwN2ZiMGMsIDB4NzY3ZWM4YmMsIDB4ZWM1NjhkMzYsIDB4ZjM1YzZmMDAsIDB4YzAxZWM1MTgsCisJMHhlMjRkMzA1ZiwgMHhmZWNjZjVhYiwgMHg3M2Q3ZWM1MywgMHhiYTQwZTc0OCwgMHg3Mzk4ZWJkYSwgMHhmYWVmYjQyMywKKwkweDJjMzFiZjcyLCAweGQyYmVkZmNhLCAweGI3NzhkMGFhLCAweDQ2YjlkZGJiLCAweGQ4NzlmMzQ2LCAweDljOGZkZjBhLAorCTB4MDA2N2RkZWUsIDB4ZjFjZjg2NzgsIDB4MDNkYTMzZWMsIDB4NTE5NzMzZTYsIDB4MWUyZDI5N2YsIDB4MTFkMjQ3OWEsCisJMHg4YmE2MGU3NywgMHhjZmQ0MzEyZCwgMHhjNmJlMzNhOCwgMHg0YmFlZDAwMSwgMHhjYTA3Y2MxNSwgMHg1NDNmOWFkMywKKwkweDU1NjlhZjEwLCAweDcxZDIwYWNkLCAweDgyNWVkMzY3LCAweDNmNzliNTM3LCAweGVhMTE4MTRmLCAweDcyMDFkZDIwLAorCTB4OGYzMDE3NTUsIDB4Y2QxZDE2YzUsIDB4YTE0NWIxNjMsIDB4OTljNWU1NzQsIDB4N2ZhODJlODksIDB4NmM1ZWVhYzQsCisJMHhjNzlmZWExOSwgMHg2Mjc3MWNjYSwgMHhiZWJmZjQxNSwgMHg3Y2ZiNWJhOSwgMHhiN2JjMDI3YiwgMHgyNzg4NjdjMSwKKwkweGFiNzJkZmQ5LCAweGIyNjlmYTkxLCAweGYzODQ3ZmI4LCAweDcyZGU5Y2FiLCAweDQ3NmY3OTAwLCAweDQ4YTM5ZmQzLAorCTB4ODhlMjFhMmUsIDB4OGU4NzA5YmUsIDB4OTYxMjNkMTMsIDB4NzhhMGNlMDAsIDB4MGE4NWExZmQsIDB4ODVmNWFhODMsCisJMHgyM2E1MzM0MCwgMHhkZGI4Mjc5ZSwgMHg4ODk5MzE4ZSwgMHhmODlmODA2ZiwgMHgwOTMxMWFjNywgMHg4YzYyZjJmOCwKKwkweDkxYzcwNmJiLCAweGQ5MTQyN2VkLCAweGI0NWY1MDIyLCAweGNmNzdjNWU3LCAweDU5OGU2NTJlLCAweGZiY2YwMDNkLAorCTB4NmViMjc3OGIsIDB4MTJmNzc3NDgsIDB4YmI3YjdiYTQsIDB4MjE4NzhmODEsIDB4YjM4YjMxM2YsIDB4YTRiYmZiMTYsCisJMHhjZTM4ZTliMCwgMHhmOTQyOTg0YiwgMHg5NzllMDY0YiwgMHg5NWFiZmFmOCwgMHhlYjExZWJlMywgMHg3ODk2YzVhNCwKKwkweGYwMmIyNzhlLCAweGJjNjE0YmYxLCAweDdhMWViMDVkLCAweGIzYmZjYWQ3LCAweGNkNjE3ZTBiLCAweDFlNzA1ZjljLAorCTB4YmI2NGJmYTgsIDB4ZGJkZmEyZGQsIDB4M2Q1Y2VlOWQsIDB4MDhjZDkzZTcsIDB4ZGUxMWM4ZTcsIDB4YzNiN2M4N2QsCisJMHg5MGZiM2NmMywgMHhlMDk4ZDNmZiwgMHgyN2NlM2M5MywgMHhjZmJlZmNjMSwgMHg0NjdlYTM2YSwgMHg4ODY1Njk5ZCwKKwkweGI5ODUyY2Y3LCAweGQzMmVlOTAyLCAweGExYWUxMGQ3LCAweDg5YTNkZmM4LCAweGI2MWU0MDdmLCAweDUyYzM3OGUzLAorCTB4ODAwMzU0YWEsIDB4MTNhY2M3MTIsIDB4ZGVjNjc3NTgsIDB4NWRhOWRhYjYsIDB4M2VlNzA4ZTYsIDB4ZDNhYjM3ZTQsCisJMHgyMDdjZjI0NSwgMHgyYmU1NGFjMiwgMHhjMDdmMzgzMywgMHhmYzQwN2ZmNywgMHgyZWQzY2IwNSwgMHg3ZTAxYTM5NCwKKwkweDdlNDM4YTM5LCAweDhmYzhlYzhjLCAweGJjZjAxM2JmLCAweDYzYTVlNDJkLCAweDYxM2ZlZWZmLCAweDNhY2Q3MWZmLAorCTB4MGM5ZDAyYTcsIDB4NjVlOTEyM2YsIDB4YTJmODc0ZDAsIDB4OGZlMTE1MmEsIDB4MDBmZmMwNjMsIDB4MzU4ZTZkYTAsCisJMHhhNTJjZTUwNywgMHg1ZDIwYTFjYywgMHg4NzVjMjI5YiwgMHgyMzBmZDRhZCwgMHg0NzMyYjliZCwgMHhlZjg2YWRlNywKKwkweDg5M2I0NmU2LCAweDNlZDhkZjdlLCAweDM2NjY2N2VjLCAweGMwMWY2ZmNjLCAweGUxMTVmYzFlLCAweGI2YjA3YjAzLAorCTB4NmZmNGY1MDgsIDB4M2Q0NDY5ZmYsIDB4ZDdmMjk3NmEsIDB4MzhhMjI0MzQsIDB4NDhhZTNmODAsIDB4ZjdhN2UwYmQsCisJMHg0MTBiZDI3MSwgMHg3M2Q2MGVmNCwgMHhlYmY2ZjRjMSwgMHgwMzllYWQwNSwgMHhmNGUwNWQ3YywgMHg5ZjIyNjc3MCwKKwkweDUyMmYzNWM1LCAweGVhZDA3ZWI5LCAweGQxZThjZWI1LCAweDNhMDgzZjQxLCAweDdlNzA4YTVjLCAweDBjNWNmODgxLAorCTB4N2FlMzg4MzIsIDB4NTgzZWIzNDYsIDB4MGUxZDk5ZGUsIDB4NzZhNDg5OGIsIDB4MWMzYjQ1ZmYsIDB4ZDFkZjEzMTYsCisJMHhhZGNjZWIwZSwgMHg0N2MwMTUwNywgMHg1NzZhODM3OSwgMHg4ZmQ1MGE2MSwgMHhmZjQ4OWNkOSwgMHg4NzE0ZWIxNywKKwkweDQxYTRlNTA5LCAweDcxNzg3ZTI1LCAweDRiZDkzODY1LCAweGJiNjdlZjA5LCAweGRiYjEwN2EzLCAweGNmZjIxNTIwLAorCTB4OGVjOWRkZGMsIDB4ZjE4OGM2NTYsIDB4ZjE4NzkwZWQsIDB4ZDY3OTU5MmYsIDB4YzUyNzc1NjgsIDB4MTc5M2U4MDQsCisJMHg0MzA4YmUxYiwgMHg2NDRmZjczYywgMHg2MmM2NGUwMywgMHgwZWQ2YTcwYiwgMHhmMDI5MDg4MywgMHg1MzdmMDliZCwKKwkweDZiODNhZjEwLCAweDY5YWMxNDU0LCAweDk1MjY5ZGVlLCAweGZiMWRkNmU4LCAweGZlNWFjZTFiLCAweGJkNzAwZDljLAorCTB4Y2ViNDZkYmMsIDB4ZjUzN2M4MWQsIDB4MDVlYzY3NTcsIDB4YjgyMzJiZjgsIDB4ZjdiNGJlNWQsIDB4MzNlNDJmNWEsCisJMHg5MmY3N2Y1OSwgMHgzZjdiZDI2MiwgMHgxMzE5MmIwNywgMHhlZWRmMWZhMCwgMHg2MWViODI3MywgMHhkNTNkNjg1NiwKKwkweDJhNzY4NzFmLCAweDg1MDAyM2Q3LCAweDdhM2VlNjUxLCAweDcwZDQyN2Y0LCAweDI3ZjVhYTg3LCAweDdiYWEzOTg4LAorCTB4N2YxMDdlMDIsIDB4YmY4NGUxOGQsIDB4NzcyMDllZWEsIDB4NDhlNzA0MTksIDB4YzViZjdmZWMsIDB4ZmNhMDkyYzgsCisJMHhiNjIzYzgwYSwgMHgwMzdmNzA5MywgMHhlMjA3NDc3OCwgMHhhYTZmMGZkMSwgMHhlMDg0NTRmNSwgMHg1ZjBmZDUwYiwKKwkweDBlOTA1ZDNiLCAweGQxNmFiZmQwLCAweGIxMmUzY2QzLCAweGIzZDIwNzcwLCAweDQ4NjRlOGNlLCAweGUxNTFjZjdmLAorCTB4NTViYTA4MWYsIDB4ZDRiYjllMDgsIDB4MWI4OGY0MzAsIDB4OTFlMmY3ZTYsIDB4N2Y3ZTA3NTQsIDB4OTg0YWZlYTksCisJMHg0NmZkMTIyZSwgMHg5NzljMTRmNywgMHg4NTFhZDY5YSwgMHhjMzVmNzBmNiwgMHgwMzJkYmU5NSwgMHhjNTRkYmY0OCwKKwkweDRlODcyYmYyLCAweGJlMDNkY2Q4LCAweDg0NjZmY2QxLCAweDdlNzY4N2E2LCAweDlhYzhmYTk1LCAweDYxNTBmZjQwLAorCTB4N2NjMTdlN2MsIDB4ZmUzNDM0YTQsIDB4ZjI0NDE5NGIsIDB4N2ExZjUwYzcsIDB4MWFiNzk5ZDIsIDB4YTA3MmJkZTYsCisJMHg5OTdiYTdlMCwgMHg5ODNlZTUxZCwgMHhhYmFiNDZkZSwgMHg2ZTQwMjYyMiwgMHhhYWVkMTVmZiwgMHg5YzcwYjg0MiwKKwkweGNmMzQyMTk0LCAweDc0MWY5ODg1LCAweDQxYTY2Njc4LCAweGMzMWJmMzg3LCAweDdmNGE2ZWQwLCAweGIwZWZmZDBmLAorCTB4NGVmZjdlMjEsIDB4ZmU3ZGFmY2UsIDB4M2EwZGFmM2QsIDB4M2ZiZTY4YzQsIDB4ZjgwMDcxYzYsIDB4YWY4MDNhZTUsCisJMHhlYWMxOGMxMiwgMHhmYjc5YzA4YywgMHg2MmU1MWU4OCwgMHg0OGU2ZTU3ZSwgMHg2MWYzMGE5ZiwgMHg1YTE3MGNiYiwKKwkweGQ2ZTgxZWE0LCAweDRmYTA3ZTExLCAweDE5ZTdjMjBkLCAweDQ2ZTIzOGVkLCAweGQyMzVmZWZhLCAweGQxZjg4ZDUxLAorCTB4NWZkMTViMzcsIDB4YzZhY2Y5ODUsIDB4MjhhMjM2N2EsIDB4MmZkZmU3MTEsIDB4ZjUwNWI5ZDIsIDB4MThjYjRiZmMsCisJMHg1N2E1ZjNmMSwgMHg0YzEzNzc5OCwgMHgxZDdlZmI3NiwgMHhkNjQ2Y2JmMSwgMHg5ZmJlZjg4ZiwgMHg1NzBjZjJlZSwKKwkweDNhZjNjOTI0LCAweGI5YWIzYjg0LCAweGI3N2E4NzU2LCAweDQzYWVkN2E3LCAweGI5YjdkYTdkLCAweDNlMjNhNzRlLAorCTB4ODYyMmZmNzAsIDB4NTc5OWU0ZmMsIDB4ZmY1ZjAwZjQsIDB4MzdlYTU1NmQsIDB4Njg2ZjA3ZTQsIDB4YWY0MGVmN2UsCisJMHg5MmY0ODFjZCwgMHg3YzE2Y2I3OCwgMHg0Mzc4OGQ5MCwgMHhiZmFhZDA4MywgMHhlM2Y2NjJkMCwgMHg1MmMzZTgwZCwKKwkweDYzZmIxZDZjLCAweGYxMWQyNWFjLCAweGU5ZmFmOGQ0LCAweDVmZDAyZDVlLCAweDY3YTcxYmM1LCAweGZlMmE1ZTIwLAorCTB4MTgyNjIyNjAsIDB4ZDFiZTg3ZjMsIDB4ZTU5ZmVmYzgsIDB4MmU2N2Y2ODQsIDB4ZTg3MmFkMmMsIDB4MjU3YTlmYzEsCisJMHg4NWQ5MWJhNiwgMHg0NDZjZDYzMiwgMHg2ZWJjYTEzZiwgMHhhMDFmNDM4MSwgMHg3NmZmYTVjZiwgMHg4ZjljZDBjOCwKKwkweGFhMWExZmZkLCAweGU3ODA2NWIyLCAweDVkZTE4ZTJiLCAweGQxM2IwODU4LCAweGJmYTEyZmVlLCAweDQ3MmZiMDA2LAorCTB4YWZjZjExZDgsIDB4ZmY3MzQ1NjcsIDB4MjBmNjQ2ZDEsIDB4YTVhMWZkYjgsIDB4N2E2MzFjNzMsIDB4YTFkZmRlNzQsCisJMHhiZGQzNjFjMSwgMHg5MDdlN2RmMCwgMHg4NjM0NzQxZiwgMHgxOGI2YjVkYiwgMHgyMTQxODc2ZSwgMHg4YmNlMTEzYiwKKwkweDNkNzhiN2JmLCAweGM4NzE3NDUwLCAweGZkMGM1MTQ3LCAweDY0MWY1ZGNjLCAweDJlOGY4MDdhLCAweGZlNDdlNmIyLAorCTB4MzU3NjcyODgsIDB4Zjk3MWQ2OTIsIDB4NWNjYTNmODMsIDB4ZTVjYmYxNjYsIDB4ZGNmODIzMWQsIDB4NzBlZDc4ZWYsCisJMHhlN2RhMWQ5NCwgMHhlNzE3ZGY2ZiwgMHgxZGRmYzAwOSwgMHg5ZGI1N2Y0YywgMHg1YzcwMzNhZiwgMHg3ZDMzZTM0NiwKKwkweDA3YTQyZjRiLCAweDA0ZDllM2ZiLCAweGFmZjlhNDNiLCAweGY5YzcxNWJmLCAweDc0ODc0MTIwLCAweGRiZjQyNDVlLAorCTB4YzAyOGIwZWYsIDB4NTI1ZmNlZGYsIDB4ZjMyNDdjNDEsIDB4ZTY2NjZkZTUsIDB4ZWJjODBkOGQsIDB4MDRiODhkOWIsCisJMHg2NDhiNmYyZSwgMHgzN2I3Njg1ZSwgMHg3YTQ3MTJjNiwgMHhhMzI1OTkyNiwgMHg1ZjE0ZTk5ZSwgMHhlMGNmODkzNywKKwkweDQzY2Y4OTcyLCAweGEzYTZjZjgzLCAweDI3NTlmMTVmLCAweDFiNmY3MGZlLCAweGY3Y2VkNzZmLCAweGQ3NGZjMTRiLAorCTB4N2NlZmYzZmIsIDB4MGFlYzNlYTUsIDB4OGQ4NDVkZjEsIDB4NjM4YWU5ZDMsIDB4ZjdmNDE3NjQsIDB4MWViZThkZjIsCisJMHhlNGVkMTBkNiwgMHg0ZjE4MzJmYSwgMHg4ZDJiNWY2ZiwgMHhkZjdmN2VjMCwgMHgwNTBiY2E2NiwgMHhmYmE2ZGU5NywKKwkweDIxY2E3ZTc2LCAweDFmYzAyYTgwLCAweDUzYmFhNmRjLCAweDljMWZjMjZkLCAweGJlOGFmOTBjLCAweGJhZDFjNjU3LAorCTB4ZDA4YmYyNWEsIDB4NGYzMDc3N2IsIDB4MzA2ZmNhMjMsIDB4Zjc3YTQ4N2YsIDB4ZmFkZDAxYjAsIDB4Mjk2NjcyYTMsCisJMHgzMThiYjc0OCwgMHg0MjM3Y2U3NiwgMHgwNDdjYTQxZSwgMHg5ZDM4MzFlMywgMHg1MGVlNjQ2MCwgMHg2MmFmODBlYiwKKwkweDk4YzM1ZTI0LCAweDIzZTFmNDA3LCAweGRmNjQwZDFiLCAweGY4ZmI1ZjBmLCAweGY3ZTA0Y2RlLCAweGQ2MGMxYmQzLAorCTB4OWNlNDMwZTUsIDB4M2VhNWY2MTcsIDB4MDY3M2Y1MDMsIDB4ZTQwYWFjOWIsIDB4M2Q3ZGRiNGYsIDB4NWY0YmVlNTAsCisJMHgwZmM4NWQ1MCwgMHg5MjNjMzdhNywgMHhmM2QyMTMzMCwgMHgwMDY1YmYyMCwgMHgwMzQ2ZTk0NywgMHhmOGQ5Y2Y5NSwKKwkweDE1OWY5NTI4LCAweDQyZmE1ZDcyLCAweDk3ZDQ3ZjdjLCAweDRlYWZmNzg3LCAweGY5Y2UzYTQwLCAweDQ4Njk4OWVhLAorCTB4NmI0NmVkOTcsIDB4OTY5MGMxZmYsIDB4NjMxYzUzNmQsIDB4NmYzZGYwMDIsIDB4YmYyNjk4NzMsIDB4ZTBlNmM3NWQsCisJMHg5OTVkMjQzYywgMHg0N2FmNmVlMiwgMHhhNmQ1M2YxMywgMHgxZjcxNzZmYiwgMHgwNGRmZDY5ZiwgMHhhMGFhNzJmZiwKKwkweDMwMjljNGUzLCAweDU3YTE4YWVmLCAweDc3ZGZhZmM4LCAweGM5ZWM5YzIwLCAweGY5MmE5MTliLCAweGZmYzFiZThmLAorCTB4MjBkYjlkZWYsIDB4ZGU5NWZiOWYsIDB4YTA5ZGJlNDEsIDB4Njc0MTU4ZjMsIDB4YjdhNDVjYjAsIDB4OWYzY2NjNGIsCisJMHhmYzllYmFmYiwgMHg0YThiNWNjZiwgMHg5MWY2ODZmOCwgMHg3YmZlYTE2MywgMHhmNDBmYmRhMiwgMHg1MzIxY2EyYywKKwkweDg0OGRkN2IzLCAweDBkYTM2Mzc2LCAweGY3ZDBlZDBjLCAweDE5ZjJmMzdjLCAweGRiM2JjOWQ4LCAweDAyNWJjN2Y0LAorCTB4ZDU5YTMzZTYsIDB4Mzg3ZjQxZjYsIDB4Y2E4MjE5ODcsIDB4Y2YyYzdhOWQsIDB4YzdjYjZiMzUsIDB4MmNmYmI4ZjYsCisJMHhhZDYzMGZmYSwgMHg3N2M5NzJkYSwgMHhmYWI0ZDg4ZiwgMHg3MzgxZGY2MiwgMHhmMzAwOWIzZiwgMHg5MmE0MzkyYiwKKwkweDdkMjM3Y2ZmLCAweGFmYzIyZWZjLCAweDVkYmYzYTQ3LCAweDNiYmUwZGI4LCAweGY4NzJiMDJjLCAweDQ5MTVlOWRhLAorCTB4MTQyMzU3YzgsIDB4ZDNhY2YxODYsIDB4ZTNjYjQyZDcsIDB4NjY1ZWE0MWYsIDB4N2UzZWRmNDAsIDB4ZTYzODE2ZmEsCisJMHhkYzUxZTdiNiwgMHhhMGIxMTllZiwgMHhkZmYwOGYzZCwgMHg3YWZiMWViYywgMHg4ZDliNzUzZCwgMHhlZDgyMzNjNywKKwkweGZjZGNiMDQ2LCAweGZlNDZlY2I3LCAweDNkZDJiN2UwLCAweDgzN2Y0YTE2LCAweDVjZWQ4NWU5LCAweDg5ZWIwNmVmLAorCTB4ZTEyMTNiNjAsIDB4YmNiNzg2MGEsIDB4MGZiMWE3NGQsIDB4MTkxZWExNWYsIDB4OGMyNzY4MWEsIDB4YzNiZTI3NjQsCisJMHg2ZDgzNzBmNSwgMHgzMGY1Yzc2OCwgMHgyZjg0MzFmOCwgMHhhZDNkMzBjZiwgMHg2YWRmYzFjMywgMHgyMjAzNzZjNCwKKwkweDAwMzliMWVkLCAweGI3NmIwYWQyLCAweDE2N2ZiMjA4LCAweDQwNWI3ZWY3LCAweGI2ZmZhYTFjLCAweDhkZWExZDVhLAorCTB4NDE4Y2Y4ZjYsIDB4ZWI5MWE3MWIsIDB4OWQ4NDc3ZDUsIDB4MWNmYTEzYTgsIDB4Y2ViNGFiZDYsIDB4NGVlZTE4ZGYsCisJMHhjOWI4ZTNkNCwgMHg4Yzk2Yzc0NiwgMHg0OGY5Zjg4ZSwgMHhjZmNjZWZiNCwgMHhiZWFjN2U5NSwgMHg4ZmIxZmI4NiwKKwkweDM4OWE1ZDU4LCAweGE4OTNlYjE5LCAweDVmYTJmYjg5LCAweGQ5ZWRmMjhlLCAweGZjZjM0ZTFiLCAweDQyMGQ3MTU0LAorCTB4ZTczM2Q0MzksIDB4ZjQwMTZkZGYsIDB4Zjg3MDM2YTksIDB4OGY4OWUxODMsIDB4MzE5Mjc2ZTUsIDB4YjIwN2Y5MTcsCisJMHhkMGU4ZjY3YywgMHhkNTg5NWM3YSwgMHg2NzljZmI1MywgMHhmZjQ3NGZlZiwgMHgwN2M2ZDNlZCwgMHg3ZWJmNTFkMiwKKwkweGVkZTcxNDFhLCAweDE2OWUxZTRjLCAweGIwYTRmYWYyLCAweDJlMjIzMTIzLCAweDExY2ExNGYwLCAweDlkZGE0MWU0LAorCTB4NTVmYmUxZGIsIDB4NTcyNDVkNGIsIDB4OWQzYTVkM2YsIDB4MmU5NjY3ZDIsIDB4YjYxM2ZhYTEsIDB4OWFkZjFhMGMsCisJMHg3NzU3NjdmMywgMHgzNWM5ZDNjMCwgMHhkOTg5ZDkyYSwgMHgxOGFmNTc0NiwgMHg1OWE0ZWVmOCwgMHgxMzg1ZjE0NywKKwkweGJiNzk5MTU1LCAweGQxOWNiMTIyLCAweGIzZjY3MjdhLCAweDAyNzhiNjEzLCAweDZjMjc3ZWUyLCAweDY3NDNhMjdhLAorCTB4ZmQ4ZjhjZjMsIDB4OWNiZGZhNjYsIDB4YmRhMTQ0YjUsIDB4MjNkN2U3NmEsIDB4MmRiNWVjMWQsIDB4YWM3ZmUzMTYsCisJMHg1NWRiMDEyNSwgMHhiNmJkY2QyYSwgMHhiN2M3MWQyOSwgMHgyYzdjNjczMiwgMHhmNTkxOTdmMiwgMHgwYmE5Yjk0NywKKwkweGI4MjhmNmU3LCAweGU3MmM0YTVkLCAweDFmYTFiZmMzLCAweDhhN2VmZDBiLCAweDllODQyYjc2LCAweDJmM2EwYmIxLAorCTB4YjFlZDM4YjQsIDB4YzkyMmVmYTQsIDB4ODFiODI3NWYsIDB4NzI4Y2JlNWYsIDB4NjBiODQ3NzYsIDB4ZDMxM2Q2NWQsCisJMHg3Yzc4NWQ2MSwgMHgyYWM1YjE2ZSwgMHhmMGE5YzNmOCwgMHg1ZmFiOGU3NSwgMHg1YmY4ODg2YywgMHg2MDllZjE2NywKKwkweDc4MTFkZTM4LCAweGM5MDM4ZTBkLCAweDg2ODFjNjU0LCAweGJjZjlmMmM2LCAweGUyNmFiMzZkLCAweDBlZmYxODQyLAorCTB4NzlmOWZmMTUsIDB4MWJhM2Q3MmMsIDB4MmEzYzViYzMsIDB4N2MwM2MzY2EsIDB4ZGIyNWRlM2QsIDB4MmI3YzYwYTMsCisJMHgwNzM2YmYyNSwgMHhjNTc3NWZlMywgMHgyZGE1YjhmMiwgMHhlYjg4OWRjZiwgMHhhMzQ0ZTRmNiwgMHgzNzM2ZTMwMywKKwkweGVhMDM4ZjJiLCAweGMwNWY3YzljLCAweGQ2MzgyM2FkLCAweDdhYzI3YjM3LCAweGNkMDk1YzAxLCAweGE0MjMxY2VlLAorCTB4MGQzMTcxNTMsIDB4YWFjMmVkZjgsIDB4YTBkZDIxOTYsIDB4NmIyMzIxMWQsIDB4OTE1N2I4N2YsIDB4OTI2ODZjOGIsCisJMHg0MDI4ZjQyOSwgMHg2NzcyODYxYSwgMHg0NTRmNzI4YywgMHg1NTliMGNiYSwgMHhmYTcxOGQ1NSwgMHhmZmJlMzI5NCwKKwkweDc3NzE1NjcwLCAweDljOWYwMWI1LCAweGE0M2MyYjdkLCAweGU4MjI1YzNmLCAweGM5ZDE5NGNmLCAweDM2YjNmYTY4LAorCTB4YWNhZTA4MWIsIDB4ODE5ZjNmY2QsIDB4ZjliNTlmN2MsIDB4YTAxMmJkMmUsIDB4MWFjNzk2ODcsIDB4ZGY2N2ZlNjgsCisJMHhlMjk1ZDc5YSwgMHg1ODk4OWYxNiwgMHhlYTdhMTBjZiwgMHgxZTVmODI4NywgMHg2OWQ4NzQxMCwgMHg4YjdmY2QwYywKKwkweGFjNmZiYjQ1LCAweDU1NDA1YmNmLCAweGUyZjlmNTY5LCAweDViMzg4MGQ4LCAweGQyNjVmOTQ1LCAweGVkNjM5M2U3LAorCTB4ZmFmM2NlMzQsIDB4ODBjOTAzYmEsIDB4MzE2N2U3Y2YsIDB4ZTY4YTA3ODcsIDB4ZjE0OGRkNmQsIDB4YmFjNjlkZDcsCisJMHhlNGVmYjhmMSwgMHhhNDMxZDBhOSwgMHg3ZjAzZmVmYiwgMHg3ZThjOTAzOCwgMHg2MGZiMmNlNCwgMHhiZmRhMjNmNCwKKwkweDRhZDJmNDNmLCAweDBlN2U3ZjJjLCAweDRmZjg4YzFiLCAweDYwYWQzZWYyLCAweDYxOWZlNjNjLCAweDdmYWY4NGI1LAorCTB4NjViMTMxNmUsIDB4YmY3ZGI3MTgsIDB4MjEwZmZjNmUsIDB4Yzc0Y2JlYmYsIDB4Y2YwNGJmNTAsIDB4ZTgzMjQ2MWIsCisJMHgxOWY1MzExMiwgMHhmZDM4MjM3NCwgMHhiYTRhMGY1MSwgMHg5MTE5MDMwMywgMHg4ODZlOTIxZSwgMHhlZTkwZWRiZiwKKwkweGMxMWFmMmRmLCAweDJhOWFlMTJmLCAweGI2ZjNkZWUyLCAweDdjOGYxZjZlLCAweDUzNjY1YzkyLCAweGUxMjA0ZTMwLAorCTB4NzkzZDkxYmEsIDB4ZDlkYmY2MzEsIDB4MGVkMGVmOTMsIDB4MjIxYjEyYmYsIDB4MGVjMjFkMmUsIDB4NjEwZDg4ZWYsCisJMHgyZmVkODM4NywgMHg2Mzc3MzhiMywgMHhlMWQ5MWJiYiwgMHgzNmZmODJlMSwgMHg3ZmVkMDZjNiwgMHgwODU5N2VlMCwKKwkweGVkOGQwZGJhLCAweDFmZGYwZjEwLCAweGUzZmY2MjFiLCAweGRlZjBmMTQ2LCAweDQzZmY3MmIxLCAweGM5N2YwZjFiLAorCTB4YWQ2ZmY1YzgsIDB4MjkzYzNkOGQsIDB4MTM3NGJjODQsIDB4YjVkNmViZTMsIDB4YzY3ZWQxMWEsIDB4ZjUyMTI4MzUsCisJMHg1MThiNjJkOSwgMHgxYzdlMWZlZSwgMHgxMjVmYjAxYiwgMHhlMDQzOGZhYywgMHhlZmI2MjhmNywgMHgxN2I3Y2RiYiwKKwkweGU5ODkwZDViLCAweDViZWU4MTExLCAweGRlYjBlYmJmLCAweDI5Y2UzMTBkLCAweDIyZmIzZjgxLCAweGY2YTZmYjQ2LAorCTB4MGFmYTQ2MmEsIDB4MTQxZTVlZjIsIDB4MzcxNDI5ZjQsIDB4OTM0ZjM4YjAsIDB4YmVjMWJhZGQsIDB4MWNkNjlkZDUsCisJMHgzZWU0ODNmMiwgMHhkNmFiNTRkNSwgMHg5MzhiOGM0ZiwgMHgyMzlmOWNlZCwgMHhkODlkNjk5YywgMHgzYzA5N2Y4OSwKKwkweDcwZGJmY2MxLCAweDRjNDViOGRjLCAweGY3MjMxZmIzLCAweDNjYWFlMjYxLCAweGNkMGIzMThhLCAweDZhZjhhMzExLAorCTB4MzJmNzU4ZDcsIDB4MWQ2YmI0MDMsIDB4MjA5YjFjYzksIDB4Y2Q2ODVkMWYsIDB4OWI2YTdkNDEsIDB4ZmRjNDY4ZTMsCisJMHg3OTE3OTU5YSwgMHgwMmU1N2UzYywgMHhmZDRlNWRlNiwgMHg3NzMyZjlmMCwgMHgxN2NhMmYzNywgMHgyZTMwMmRkMiwKKwkweGUxYzcxMTEwLCAweDcyZTM4ODg4LCAweDFjZDI3NjA2LCAweDhmMGFlMWM3LCAweDkyOTNiMDBiLCAweDNlNzViYTFlLAorCTB4MWFkYWU4OTUsIDB4ZDAwNTRlZGEsIDB4NzdkZjQ2ZDUsIDB4NTBlZmQ3NDIsIDB4Mzc3MWVkMmUsIDB4OGNmNzFmZTcsCisJMHgxOWJlMDViYiwgMHg3YzczNzcxOCwgMHg0YjRjMTRmMywgMHg4ZjA0ZGZlYywgMHgwZmYzODk5NywgMHgyY2Y4MGYxZSwKKwkweGY4MjZlZTJiLCAweGVlMmRlYWVjLCAweDUwODgxZThmLCAweGE1ZGM1ZGJlLCAweGM0Mjc1ZTIzLCAweDZiNzdkMDg1LAorCTB4NDg3ZDc1ZjIsIDB4NDc3MGIzNWYsIDB4MjMzYWJiMjgsIDB4N2RiZmYyMmUsIDB4YTA4NjY0NWUsIDB4MTc5ZDJkZjcsCisJMHgyZDI3ZjE3OSwgMHhkY2IzYTQ0NiwgMHgwNmYwOTBmNywgMHhlNTkxMTM5ZiwgMHgyNjRhMGQxNSwgMHhmNjczM2ZhZSwKKwkweGMwNzVhMzVkLCAweGQzN2ZjNmE1LCAweDc5ZTNhMDNhLCAweDQyZWUzZTBmLCAweDY3ODAwM2U0LCAweGNlYTAzYWFjLAorCTB4Nzk3N2YyMDcsIDB4ZWE1NjkxOWIsIDB4MjJmZmIzMmEsIDB4NGRmNmUzMWIsIDB4NTNiNWU2MDYsIDB4ZWZiNjMzN2IsCisJMHg3ZWZiNzhjNywgMHg2MzM2NTZkYiwgMHhkMzFmYWFkYywgMHg1NDdhYzQ3YiwgMHhhOGZkY2ViOSwgMHg3ZWUzOTQ2OCwKKwkweDhkNWIyYTRkLCAweGJlYmNhZGY5LCAweDYxOTc5OThhLCAweDg0N2EzYTVjLCAweGYwMDNkOThlLCAweDY3MGNlMzE5LAorCTB4YzY3YzAwZjYsIDB4NzkzNGQ5ZTYsIDB4MmY5ZTRlYjksIDB4MjU3NzhkYzYsIDB4MzJlZmJlNmIsIDB4N2RhNjliYmQsCisJMHhhNjlmYmI5MiwgMHgxMGNlNjUzZSwgMHg2YWFkM2U0ZCwgMHg1NzdkYTY5NCwgMHhmOTgxY2ZiMCwgMHg5YWRkY2YwYywKKwkweDI2NmJkZGY2LCAweDZiM2RmMjZiLCAweDNmYjRkMDFmLCAweGNkOWVhYWNkLCAweDljN2E3OWM2LCAweGNlMDAzZGNkLAorCTB4ZGVjZTAyNTksIDB4ZGYzNThiZWIsIDB4MGRkNWQ3ZjUsIDB4ZjkyMGExZjMsIDB4ZmZlZTFmMTQsIDB4MzI2YzE2Y2QsCisJMHhmYTczYzQ0YiwgMHhmYTY5ZTc3YSwgMHg1ZTZhZmYzZCwgMHg5ZGY4MDI5MywgMHgxOTM4NmI1ZCwgMHg3YzIxOWYxOCwKKwkweGVhNGI3ZTAwLCAweDhjMWNmNjE1LCAweDViNWViYTViLCAweGU5ZTFhNzNmLCAweGNlOTAyOTk1LCAweGU3Y2I2YWY1LAorCTB4ODI5Y2JlZTEsIDB4ZGYyZGFkZmMsIDB4ODIzZDczYWQsIDB4NzFlZDlkZWIsIDB4ZTIyOGNlMjIsIDB4N2YwM2FjM2QsCisJMHg5N2I4ZDI0NCwgMHg5Nzc4ZjAzNywgMHhjNDFkZTllYSwgMHhiMTNhNWExZiwgMHg3NjJmYzk2ZiwgMHg0NGE2MmZjMSwKKwkweGQ5ODRiZjJkLCAweDdhNTJmY2I1LCAweDFmMzBlNzcwLCAweDg4ZmY4OGViLCAweGU0N2M0MTNlLCAweDc4MDE3ZjgxLAorCTB4Zjg5NWY4OTcsIDB4N2NiNDM4YjcsIDB4OWRlMTVkZjUsIDB4ZGI5MWFmMzEsIDB4M2ZmOTZkMGQsIDB4YjVmMWI0ZTIsCisJMHhlM2VlOTE3ZSwgMHhkNGFlYjdhOCwgMHhiZjcxNTIyZiwgMHg3ZGYxZTU4ZCwgMHg1N2Y1MmJmYiwgMHg2YmIyMWQwNywKKwkweGRiM2FkN2Y2LCAweDE3MTczYTRmLCAweGZiMTc1NzE4LCAweDNmNzA5NzQ5LCAweDEzNzYzNmYxLCAweGZlZmI4OWZiLAorCTB4ZDkwMGY4ODUsIDB4MWY4MDFiNzcsIDB4Yjk4NzA4ZDgsIDB4Y2MzMGZmN2QsIDB4YWMxNDdmYmYsIDB4NzYwYTY1MzcsCisJMHhiMjM4Y2JlMywgMHhkNzdkZmUyNywgMHg1ODdhZjg2YSwgMHgwODVjNWZmNCwgMHg5Mzg3ZGNhZiwgMHhmOWU0NzJlNywKKwkweGU3YzkxNjIxLCAweDNjMDFmYjI5LCAweGYxNDNmMWE4LCAweDAyMmQ5ZmZjLCAweGY3ZGJhZGQ3LCAweDk2ZjVhNDJmLAorCTB4YzRjNDNmM2MsIDB4N2UxMGJmYjksIDB4M2FlZmU5M2YsIDB4ZmM4OTM1ZmMsIDB4NmU3OGYwODEsIDB4NmQzMTIzY2YsCisJMHhmOWM0MDdmNywgMHgzYmNmNjkyZSwgMHhiN2VlNDdlYiwgMHg3YjJhOTY3NSwgMHg2YzNmZGE1NSwgMHg5YjFkYzI1NSwKKwkweDVlOTNkODQyLCAweGZkNzJkZmYxLCAweDFjNDNhNjc1LCAweGUwN2M1N2JhLCAweDJiZDFlYmZhLCAweDAwYWVkMDA3LAorCTB4Yjk2MmZiZGUsIDB4NWFmNjAyYzUsIDB4NWZlYmRiZjEsIDB4YmYxMTQ0NDQsIDB4YmQ1NDFlYjYsIDB4YjJlMGExYmQsCisJMHgwMzZkMWVkOSwgMHg2OTg0MzYzYywgMHhhYjRjODhlZCwgMHhmNDAzYzljYywgMHgzZGFmNThiMSwgMHgxMWY3MjdlNywKKwkweDYzNjdkYjgzLCAweDI3ZmQ4MGZiLCAweDhmZTM0ZWY4LCAweGZkYzIxY2FjLCAweDZlNzhlY2I1LCAweGU0ODhiZmRmLAorCTB4OTExNGMxZmUsIDB4MTc1YTBjYWYsIDB4YmY3MGQ2NTUsIDB4ZTlmODIzNmMsIDB4NGNmZDAxMGQsIDB4ZmI1MGI3ODksCisJMHg1MzM5MTFhNSwgMHhjMDhlMjllMiwgMHgzMzJiYmJkNywgMHg1NjI3ZjIxNCwgMHgyMWY5MGEyYSwgMHg1MzQ3YTI2NywKKwkweDljYjhiNWZkLCAweDYyM2ZjNGM5LCAweGJiZTgyOTljLCAweDZlZGFmZmMxLCAweDM4YmIxZTFjLCAweDM3ZmIyMzhmLAorCTB4ZTZmNmYzYzcsIDB4NGU5NGQxZjgsIDB4Yjg4YWI3ODksIDB4ZjIxZmI1YjMsIDB4OTM4NDY1NDcsIDB4YTFhYTM1ZmEsCisJMHhjN2E2YTVmNywgMHhiNWFkNzlmMywgMHg2YTI3ZTkzMCwgMHg4NGUzZmVlMiwgMHhiZjM4YzRkZSwgMHhmOWEzZmI4OSwKKwkweDcxZmMxMzYzLCAweDdmNjZhNjdlLCAweGYxMTM4YzY4LCAweDc3M2U4NTdkLCAweDUzYmE5ZWEyLCAweDc4YjNiZGQwLAorCTB4NzU4ZmIzYmYsIDB4NzUyNzZlM2YsIDB4MTJmYmY3OGMsIDB4MWRmYmM2NDMsIDB4MGZkZTI4ZTMsIDB4NWU3MWVhNWYsCisJMHhhNDdmNzFjMSwgMHgyZmNkODQ0MywgMHhiN2M0OGYzZiwgMHhkNDU0ODNkYiwgMHg3NzQ2ZjU0ZiwgMHg1YWJiYWUzNSwKKwkweDBlZmY4Mzc3LCAweDJkYmM3ZGM1LCAweGYwMzAxZmI0LCAweGFlMDc3NzUwLCAweGIwNjY1NmFmLCAweGI3ZTQxNmJkLAorCTB4N2ZhMThjNjUsIDB4NWJhMmRmNWYsIDB4NmJmNTA2MWUsIDB4ZjU4YWNjM2MsIDB4NzVmMDM3MjMsIDB4YmI3YWU5NWIsCisJMHg4MDY5YTcwMywgMHg4ODY1YjA3NSwgMHg4YmFjMWY1ZiwgMHhkN2JjMjE4ZiwgMHhjNDZlNGNiNywgMHhmNzM1ODFmZCwKKwkweGExOWExYjMyLCAweDFiOWI1NjVhLCAweDA2ZDBmZTg1LCAweGY4ZGQ3MjE2LCAweDA5YjM5MDk0LCAweGQ0NTU3YjM5LAorCTB4ZGZlOGYxMTcsIDB4NTNkM2EwODcsIDB4MGZhMDRlODIsIDB4ODc5ZDIyZDYsIDB4ZjBhZmJhYjcsIDB4NGZhZTM4ZmQsCisJMHhmYWUyMjU0OCwgMHgxYmNlYmY3NCwgMHgzNzNmM2Q2YSwgMHhmMjFkNzczYSwgMHhlODZmNDBjMSwgMHgwYjVhYzNmNSwKKwkweDExNzViN2U3LCAweGRkYThlN2FlLCAweGI1ZWU3ZTJlLCAweDU5ZGZlYTU0LCAweGJhMDdhNjNhLCAweDlkNzQxMTRmLAorCTB4ZGY5ZjgxYjIsIDB4NWZhZWQ3NjAsIDB4Yzg5ZmE1NTcsIDB4N2E4NjdmYTgsIDB4OGI1ZWY0YTUsIDB4YTU0M2UzMTcsCisJMHg4MjFlMTkwZCwgMHg3YTM4YTVjYiwgMHg3ODY4YmVhMiwgMHhkMmY5ODVkZiwgMHhjNjJiMmNhYywgMHg2NTdmOWMyMywKKwkweGU0M2VhOWNhLCAweGJmYWUzMjYyLCAweGQ0OTRlY2Y0LCAweGUzYzc2NDI3LCAweGIyNjlkZjY4LCAweDE2YjViN2UwLAorCTB4MGQ0NzNmM2IsIDB4ZmMwMDhlMjgsIDB4YjY1ODZlOTcsIDB4N2NlZmNmMTcsIDB4ZmI0NjZiZjQsIDB4ZDZkNDQ3NGIsCisJMHg1NGQ5ZDg2MSwgMHgyMTkyY2U0MCwgMHgyMTU5ZWE5OCwgMHhmZWY4MmJjNSwgMHgxZmEyYmRkNSwgMHg1YzYxYmZjZiwKKwkweGE5ZGM3ZmIzLCAweDNlNjkwNzBkLCAweDYzY2MwYzQ3LCAweGI0YmEzZTA2LCAweGZhM2IzZWU3LCAweGNkZTMyYmRiLAorCTB4ZmI5M2M3MTQsIDB4Zjc1NTQ3YjIsIDB4ZjQ4NDY0ZTMsIDB4ZGEwODE1YWQsIDB4NTYxMTBkZmQsIDB4NDNmYzdmOGMsCisJMHg4MjQ2NWRmMCwgMHhjN2QyMWY3YiwgMHgwNTdjN2NiZCwgMHg2NTk2YzFkYSwgMHhhM2M0NzRhNiwgMHgxYTkyNzk3YiwKKwkweGQ3YmE3MDA3LCAweGQxZWYzNDJhLCAweDc4OGM5M2NiLCAweDhhZTY2MTdlLCAweDRmNTBlM2MxLCAweDk1Y2U2MTBkLAorCTB4Mjg3OWRmMTgsIDB4ZDM5NDg1OTYsIDB4OWQ3Y2YxZjMsIDB4NjA2NTVjNTgsIDB4ODQ5YTY4YzYsIDB4MTcyZmUzMTEsCisJMHhiZjhhMTQ2YiwgMHgwMTViZmVlMCwgMHg5ODhlNjdkMCwgMHhmN2FhZjk1ZiwgMHhlYzNmODhhMywgMHgxZTE4NmZmMCwKKwkweDczM2ZlNWNiLCAweDFlNDk0YWFhLCAweGU0NmJjZWMxLCAweDE5ZDU4Y2E3LCAweDc5OWZhMDkzLCAweGRiMzk2MDZiLAorCTB4ZjFmZGVjOGQsIDB4YzA0M2ZlMGUsIDB4M2FmMmVmNzksIDB4NWIyNTdkNmQsIDB4N2Y5ZDM5ZjMsIDB4NWJlZmUwNjEsCisJMHhlYjY4MmVkMCwgMHhlOGYyOTUzZiwgMHhhYmE0MGU2MCwgMHg4Y2M1YjE3YiwgMHgwYjQ2ODRlNywgMHg1MWFkMTRiYywKKwkweDY2NWZhOGFjLCAweGJmOGM2OGFlLCAweDliMzNmMjBmLCAweGI0ZjIwNzU0LCAweGU4ZWIwYmM0LCAweDhmMzlkM2VmLAorCTB4NjkzZDRkY2IsIDB4NmVkOTcwM2QsIDB4ZGNlZDgyZWYsIDB4MmJmZjVjNTEsIDB4MmM3MGY3N2EsIDB4M2RkNjI4N2YsCisJMHhhZGYxZDcxYywgMHg5ZTE4NTg5ZiwgMHgwNmQ2Mzk5YiwgMHgxZWM2MThmZSwgMHhjNTEwNmNjZCwgMHhkMDZjYWMxZiwKKwkweDVhM2IwMGE0LCAweDYwMjZiMDY0LCAweDE2YzNkZmJjLCAweGI3YmUzMjI2LCAweDc3OWMwZTY1LCAweGY5MGQ3OWE1LAorCTB4MDdlODk1ODEsIDB4MWY5MWY5ZjIsIDB4NjcyYzUwZjgsIDB4MTVkN2Q2ZDUsIDB4ZWFjMzlmM2EsIDB4OWEwN2U0MGQsCisJMHhkNjc4MWY4NSwgMHhhZTAwOWI1ZSwgMHg2ZTNkNzMxNywgMHhkZTJkMzkyMCwgMHg2ODdlNDMxNiwgMHgyMzVjOGFmMSwKKwkweGFlZjE2ZmYyLCAweGUwNDNkMjE4LCAweDYzZDg3ZTA3LCAweGM3OGU5Zjk4LCAweDQ4MWU2NDU2LCAweGViOGI3ZTg0LAorCTB4OTZhYTFjMzIsIDB4YjhmZjVhN2UsIDB4NWJhNDk4ZTYsIDB4NGI0ZmJmNDcsIDB4ZThhMTkzYjcsIDB4OTRkMmY0MDYsCisJMHhmZjA4MjRhNywgMHgzZDhiZDA0ZSwgMHg0NzdlNGIxNiwgMHg3YWI3ODJlMSwgMHhjYjllMDE5YSwgMHhlZTc0NjE1NSwKKwkweDgzZmYzM2E4LCAweGJlZDFjNmE1LCAweGU2MTc1YzllLCAweGRmYWZiNzI1LCAweGNhZmNkZjY4LCAweGI3NDRhMTlhLAorCTB4ZmRlNTdhNjAsIDB4YjQ3MGU2NjcsIDB4MTZhZmVjMjcsIDB4YTFlYzdhODYsIDB4YzllMWVjZWUsIDB4YzJiMGZlNTAsCisJMHhlYWExZWJlNSwgMHhhNzI4NzlmMSwgMHg2ZjVjMDk1OSwgMHg2NjE0YjdiZSwgMHhmZGVjNjQ2OCwgMHhlY2U2NjZhNSwKKwkweDRiMDdkOGM1LCAweDY4ZmY5NGFkLCAweDNmZTUyMjY5LCAweGY0YTc2YTVlLCAweDI4N2RhNTkzLCAweDY4ZTIyOTNkLAorCTB4MDE4MGNlNTIsIDB4MjU0NzVmODgsIDB4OTUxYWY5NzAsIDB4NmNkZWUyMjAsIDB4OGNhYTIyNTEsIDB4MzA3Y2ZmYmMsCisJMHhhMWM1Njc1NCwgMHg0ZDhjMjdkMiwgMHgyNzFlZWM2MywgMHhkZmMwMjMyMCwgMHgwNDZmN2U5OSwgMHhkZjNkYjkxMiwKKwkweDRiOGViMDYyLCAweDk1NzFmZjQ0LCAweGQ4YmVmYTQyLCAweDNkYTZiYjc1LCAweDNjNDYyNWY4LCAweDY0ZmFjZGZmLAorCTB4OWNlOWNiZmEsIDB4MTkzOGRkOTgsIDB4ZmNmZWYwZjgsIDB4NjlmYjRkNTgsIDB4ZmM5YTI5MzUsIDB4Y2QzYjA0ZTQsCisJMHg3NzVlNTI3YiwgMHg4NTAzZjk0ZCwgMHhhMmY5MzVmZCwgMHg5ZTAyNDAzNiwgMHhmOGRiMzAyZiwgMHhiN2Q4YWFmZSwKKwkweGQ3YzZjYzY3LCAweGY2ZGU1NmViLCAweDJlZjBkNTZhLCAweGFmNzgwN2RmLCAweDdkNTAzMjFlLCAweDVkMjQzZDMwLAorCTB4MzFkN2FkNjcsIDB4NzMzNjgwMzcsIDB4ZmEwZGNjM2QsIDB4OTMzYjU5M2QsIDB4MTFmY2VhZTQsIDB4OTVmZGQ5MGIsCisJMHgxZGRmMzJkYiwgMHhkYjYzZjkwMSwgMHg3ZWJmYjQwYywgMHg1YWVjNDU2YywgMHhiNjNlM2ZkYywgMHg0MThhM2UyZCwKKwkweDMyYTk1ZWVhLCAweDdhYzFmYTFmLCAweGU4MDU5MWFiLCAweGNiMTVkY2I3LCAweDkxNTZmY2U4LCAweGY5NDBlNGQ3LAorCTB4ZjllZmRhMmYsIDB4ZDFkYmNjOTUsIDB4NTEyMDQ0MWYsIDB4YmQ1NDNlM2UsIDB4ZTdlODg1M2UsIDB4MTRiZWZjMjQsCisJMHhmOTAyZGRlNiwgMHhmMWFmYTAzMywgMHgxNmNjZjhjOCwgMHg4NTE5ZDcwZSwgMHhkOWZjYzBhZCwgMHhmYWY1YmZiMCwKKwkweGIxNzFjMDNlLCAweDg3NDRiNmEwLCAweDUwZjUwMWViLCAweDFkY2JlOTNjLCAweDJkYmU0MzJhLCAweGZkYTA2MDVjLAorCTB4YTkxZmI5YmIsIDB4OTRjZjMxMWIsIDB4ZGU5YzI5MjEsIDB4NjQ0NzlkMmEsIDB4N2ZhODk5MmYsIDB4MDIxYzBhZDYsCisJMHhkNmZkMTZlZCwgMHg3N2Q2ODliNCwgMHgwZjc3ZTQ0YywgMHhmYzE2YWVmNCwgMHgyNjc0N2M4OSwgMHgwODYzMzk4NiwKKwkweDNkZTA4NTU4LCAweDQ2ZmM3ZWY3LCAweGQzZTNmN2FjLCAweGZkZTcwODNiLCAweDMyYjVkZWE1LCAweDVjZWJmODAxLAorCTB4ZTkxMDc3ODksIDB4NDllMmM3YjUsIDB4N2VmMTgyYWUsIDB4OTZmNWM4ZDIsIDB4ZjE0MGU1MDcsIDB4OWNiZjRiZWIsCisJMHg5ZDNlMjcyZCwgMHgzODI0NzA2OSwgMHgyNTY1NWY0OCwgMHhiOTNhYmVhMSwgMHg5OGU3NDBjNiwgMHgzNTE5ZGU5OSwKKwkweDNiM2ZkNjg5LCAweDM4ZTU4Zjg4LCAweDcxZjZmNTI3LCAweDlhYzlkZjA4LCAweDk2ZmI4NjBjLCAweGYyNTQ2YmM1LAorCTB4NzhmZjkwMDcsIDB4ZmZlNzJmN2IsIDB4MWIzNzU1YTcsIDB4MjhkNmZkMGUsIDB4MjNhNWQ2NmUsIDB4NjBiMjNjZGYsCisJMHg5YTYzOWQzOCwgMHhjMTQxZDYyMSwgMHg5MDMzZTA3YSwgMHg3ZjJmNzc1NSwgMHg3ZTFlZGU3ZSwgMHhiNTY1ODZjZSwKKwkweDE4MWRlZmU4LCAweDdjMTU4ZjM4LCAweGJmZGU0NGJjLCAweGQ2NTAwNzNjLCAweGQxNDc0ZmVkLCAweGQ0ZGNiZWU1LAorCTB4ZjBlZDFhM2QsIDB4ZTI1NTBmZDksIDB4NmFkZGIzYjMsIDB4M2QwMjI1ODcsIDB4MGVmNmU4MmYsIDB4Y2ZlNDNlZmIsCisJMHhlOTRlNzgxNywgMHhiODU0ZmYyMSwgMHhhZTAyNjc3YiwgMHhkMjZiNzQ1NywgMHgzZTc4NmU5NSwgMHhkYmRhYzRmNiwKKwkweGFmNzNiYmUxLCAweGU2MjQxYzE4LCAweDdmNDllMjRiLCAweDZlNjk3YmNjLCAweDhlZjNjMGQ3LCAweDJmOTdmNTFkLAorCTB4MzhiZmVmOTksIDB4ZTdjMDE0OTMsIDB4MzhkZDdiN2MsIDB4Nzc1YzAwZWIsIDB4ZTIxZDg0YmIsIDB4ZTZlM2IxZjgsCisJMHhiYWM1ZTAyYSwgMHhjMzQzYzE0ZSwgMHhjYjUwYzRlYywgMHgzZDc3M2M2YSwgMHgzMDI0YzQxMywgMHhlYzQyNzg0ZSwKKwkweDdhMTAxZjhmLCAweDExMDlmYTQ1LCAweGE2N2U3ODVkLCAweDdiMzdmMzhlLCAweDBkYmYyMTU1LCAweGJmZmEzNDdlLAorCTB4OTQ0ZjljNTIsIDB4ZWJlYTVmN2EsIDB4ZmI0YjU2MzIsIDB4ZjgxMjQ3YzEsIDB4OGFiOWM2MzksIDB4ZTA1NWRhOTcsCisJMHhhOGE4MmVjZSwgMHg0MjBmMmIxMiwgMHg3OTM1NmQ5NywgMHg5N2Q0MTliZCwgMHg0ODBmZDAzNSwgMHhmYmU3NjJlZSwKKwkweDllNTdjNjQzLCAweDY1MmRiNjQ1LCAweDQxN2U3Y2NkLCAweGJjMTljZWVkLCAweDFkMTljZDI1LCAweDc1ODk0ZGVkLAorCTB4ZjUxYjBhZTMsIDB4ZmM2MDcwNmYsIDB4NjljODU0YTQsIDB4ZjVlMmFkNzksIDB4ZGQ5MDc5ZjEsIDB4ZDk4YWYxOTQsCisJMHhkYjA2NmVjMiwgMHgyOGY2MGVhNywgMHgwZWNkMGVjOCwgMHg1NmFjYjNiMiwgMHhkZTAxNTc2YiwgMHhjMjQ3MWM0OCwKKwkweDJiYTcwYzFiLCAweDk4Nzg0MmMyLCAweGJkYTE3MDA3LCAweDBmN2I3MTJkLCAweDE1YjgyNDRjLCAweDAzYjI1MDA3LAorCTB4MzVjY2E1M2MsIDB4MDFlNzA2MjYsIDB4NDc3YjNlZjUsIDB4ZDVlNzgyZjgsIDB4Y2YzMTVlMDEsIDB4MWM0YmI4NjAsCisJMHhmZjcwZmI5ZiwgMHg1MTg3Y2YxOCwgMHgxZTY4MjliYywgMHhmZWMxMWU5MiwgMHg4OTRiYTQ5YSwgMHhhNGI3ZTM4NywKKwkweDdlN2EyMTQxLCAweDMyMDdlZWRhLCAweDdlNDkxYjhhLCAweDlkNTAwNTgxLCAweDQ0ZDc3YmY2LCAweGViYTU2N2Q0LAorCTB4Zjg2NmZmNDAsIDB4ZDNmMjQ3ZjksIDB4ODUxNzU2M2MsIDB4N2NjMTUyZmMsIDB4YmU1MDkzMmIsIDB4NDZkMzc1N2MsCisJMHhlMWJlZGZhMiwgMHg0OWNhMjM3ZCwgMHg1M2Q3Y2RhMSwgMHg1YzI4ODMxNywgMHhiNGJjZDNmYiwgMHgxMDQ0ZjU4MCwKKwkweGQ3NDQ2ZjllLCAweDljMzc4YTZmLCAweGJkYzY1ZTk1LCAweDM3YjM0ZjAwLCAweDQxYjBjZWFiLCAweDFjZTI3NjlhLAorCTB4NjBlNDg3OTEsIDB4YzQ2M2M3OGUsIDB4YjExY2M2ZjgsIDB4OWMxMWJmZWUsIDB4NmU3ZTdhOTUsIDB4NzZmMDg2ZmMsCisJMHg1YjdkMjdlMiwgMHg2OGJhZjNiOCwgMHg5ZmJmNjJmZCwgMHg5NDNhMzNkNSwgMHhhZmY3NmE5ZSwgMHhkZmZhZWM4MiwKKwkweDIxN2UzYzBjLCAweGJkNTVmMWY1LCAweDUwMjVlMjkzLCAweDJhYWVmYzJlLCAweDA3OWI4ZjJiLCAweDJjYjRmMWU5LAorCTB4YzIyNWUzZDIsIDB4NGU3MWNiYWUsIDB4ZjE0OWRmYWQsIDB4Zjc2OGQ5YjcsIDB4NWQzZmNhMDMsIDB4ZmVlMjkzYjcsCisJMHg0NzY2NTdjNiwgMHg2YTdkZmZhMSwgMHg3OGI1Y2NmZCwgMHhiNmQ0ZWJiZSwgMHg0YmU3NjQ5OSwgMHhkZTc2OTM5ZiwKKwkweDFmZjQwYzZkLCAweGJkMTdkNzcyLCAweGRmZTQ2M2Y4LCAweDlmMTQ2MWFkLCAweDE2ZWZkOTJmLCAweGFiZDAxZWViLAorCTB4OWViZWNlZDAsIDB4OGViNjUxZWIsIDB4YjQ1MmQ1ZWIsIDB4MWVjODAzODcsIDB4OGI3NmM2ZjYsIDB4NTFiZGRjNGIsCisJMHhjOWNhMDIwZSwgMHhlOTllMmU0ZSwgMHhlODFlZGRmZSwgMHgxMWNiZjE3NywgMHhjMmExMGYwZSwgMHhkZjkxZDNlYSwKKwkweDNkYTFmNTZlLCAweGYxZjg1ZjJjLCAweDBlZTczYzUxLCAweDFmYTNmZmY2LCAweGQ5MGZmYjQ4LCAweDkyZjc3YThkLAorCTB4YzI2ZjI4MmUsIDB4MWJhYjk3ZWUsIDB4MjdlOGFkZDMsIDB4NWZmMTNiMDgsIDB4MzQzOWJmYzAsIDB4ZmUxMDg3ZmUsCisJMHgwMWZmMTE4YiwgMHg2YmM3MjBmYiwgMHgwNjY3OWUzOCwgMHgxYWM0ZmZlMSwgMHhkYjk1OTc0ZSwgMHhmYWUxNDdiYSwKKwkweDc3NGQ3OGYxLCAweDZmOGViM2YyLCAweDlmZjg0OWViLCAweGNmZjAxYWI1LCAweDNmNWE1ZmUzLCAweDhmZjAwNmFiLAorCTB4M2ZjNDA4ZWIsIDB4ZGZiYzViYzAsIDB4ZTBlZmYwMmUsIDB4NzhlMWFmZjgsIDB4M2E3ODZiNjcsIDB4M2Q5ZTAzYWIsCisJMHhmMTYxOGU3NCwgMHhmNDBlNGRhZiwgMHhmOTg0Y2UxYiwgMHhiMzNhOWZjOCwgMHgwMWQ1NjU1ZCwgMHg4M2Y0OTg3ZSwKKwkweGJmYjU2MGJlLCAweGUyNGQ3ZjQyLCAweGU2YWY2ZTdmLCAweDBhN2ZhODQxLCAweDE0NTNmZTlmLCAweDc2ZWU2MWQyLAorCTB4ODBlZmE0MWUsIDB4ODJlY2U2N2YsIDB4ZmM3ZmI4ZmUsIDB4OTVlOWJmNzYsIDB4N2UwMWYxMmUsIDB4YTlkMjRkZDMsCisJMHhkOTE4Yjk4MiwgMHgxZDNmODZjNSwgMHhlMjgzNzVjMSwgMHg3ODZkNGY4NCwgMHhkN2RjNDY4ZiwgMHhkN2RlZDdhOCwKKwkweDg1MTkzM2MwLCAweDM4MmY4YzM2LCAweDI3ODQ2NmNjLCAweDhhMWVmODM1LCAweGY5MWM2MTliLCAweDlmM2YzZDlmLAorCTB4YmNlNDkwYjEsIDB4NmRiZTczNTUsIDB4YmExOWYzMjIsIDB4YTc1OGZmYTAsIDB4ZjJjNmZkZDAsIDB4Mzk1MTM5NDUsCisJMHg1NWQ0ZTMwYywgMHgyZWU5YzcwNCwgMHg3OGZjZTY4YSwgMHhmZjIzYWFiOSwgMHhmZGM4Y2NiMSwgMHhmOTNmYjk0OCwKKwkweGRlMGZmMGFlLCAweDI1ZDdjMmVkLCAweGQyYjE3NWVmLCAweDE4YzI5Nzc3LCAweDE2NGI4MWQ5LCAweDIzZWYxN2EzLAorCTB4MTEyYTdhYzAsIDB4MzFlY2Y3YzcsIDB4MjI4ZWRkMTEsIDB4ZDU3ZjgwNGMsIDB4NjAzNmUyMjgsIDB4MWY0ZjkxMDIsCisJMHgxZjRmOWM2NCwgMHgzOGEyNmM4YywgMHg1ZTU0YWMzOSwgMHhkMGY4YmI0MCwgMHhmYzgzOTMxMiwgMHg4YTY4YjhkYSwKKwkweGY0MjAzZWQ3LCAweDJiOTE4M2RkLCAweDFlMWY2ODVkLCAweDMxM2EzNDhhLCAweDc4M2Q3ZTg1LCAweDFhMzBjZTg4LAorCTB4MGRmMTg3ODYsIDB4YWZiYTQ2YzksIDB4Nzk2ZTY4NTMsIDB4MGZiZTk3MDUsIDB4ZDQ3ODllMjcsIDB4MDZkZWEwMGMsCisJMHg1NWM2MzdlZSwgMHhkNzVkZDdlMCwgMHhjNWQyM2I2MywgMHg5YzZkMWY0ZiwgMHg3NDNjMzJhNywgMHhlMDU1YTNkYywKKwkweDI5M2E3MTRiLCAweGJlODI2MzllLCAweDJiOGUwMWMzLCAweGRjYjEyZjY4LCAweDlkZjFlNTZlLCAweDhiMjc0MDBkLAorCTB4ZTVjMWJlOWYsIDB4MDNmN2MzY2MsIDB4ZTM1Y2YwY2EsIDB4NjQxOWM2MjgsIDB4OTM1ZmUxMDQsIDB4ZmFmMjMzMmYsCisJMHgyNmFmYzRmMCwgMHhlYzY2Y2JhYywgMHgxMDNlY2NjZiwgMHgzYTg2NTZlOSwgMHg0NWY3ZDcwNCwgMHg5NzhjNWVkMSwKKwkweDI1ZjE4M2RmLCAweGUyN2FhNjFiLCAweGU2N2FjOTk3LCAweDI2YjRmMWQxLCAweDg5Y2NjZjEyLCAweDgxNDRkMzc4LAorCTB4OTgyM2E5Y2YsIDB4ZWVmMDFhMmYsIDB4Nzc4ZGE4M2IsIDB4ZjlkM2U3ZGQsIDB4ZWY3ZTAzN2EsIDB4OTExYWZiZDEsCisJMHhiYjY2NzUzZiwgMHhiOGUzMGFjMSwgMHhiODIxOTRmMiwgMHg3ZTViMjkyZSwgMHgyNWE2ZjA3MywgMHhhNWQ3ZjM5YSwKKwkweGNmYzc1ZTQyLCAweDgwZmViNTg1LCAweDA0MWUyMWM3LCAweGNkYmM0NTYxLCAweGVhZmRiM2QwLCAweDg4MDdjZTEwLAorCTB4ZGQ5YjRhOTcsIDB4MjgxNmVkNDMsIDB4NzE5NTBmMTQsIDB4YzFmZjQ5MzYsIDB4MWQyMDdkZDAsIDB4NDFmMDE0MWYsCisJMHhmODUxMzUzZiwgMHhiZDM0MzFiZCwgMHhmNWNhMjZmYSwgMHhhYmFkMWQ3MywgMHg5YmI5MGJlNywgMHg5YjZkZTUyZiwKKwkweDI3YzZkZTU2LCAweDgyYmRhOWRhLCAweGVkZTAzMDdlLCAweDI2NzY5MTQxLCAweGZmNDRlMzE3LCAweDVjYjkxMmUzLAorCTB4NzhlMmRkNjQsIDB4OWQzNWIyMmMsIDB4NzkwOGI3Y2UsIDB4ZmVmMTM3MjksIDB4ODhmN2Y4ZTUsIDB4OGRhMjRjNzQsCisJMHgwMGYwOTVmYSwgMHg3ZWM3MWViZiwgMHg5MDAxYTA3NCwgMHg1NmQ2NGY1ZiwgMHg4NzM0N2Y5MywgMHgzM2I1YzQwNSwKKwkweDVmMjRlZGZjLCAweGViYjdjYzc3LCAweDRjNzVkZDExLCAweDEwYjNhZDhkLCAweGMyZjdjYWY1LCAweDFmNDdhODFjLAorCTB4YWNmNWQ2MzQsIDB4NGVkOGVjOGEsIDB4YjIxNGRiZWUsIDB4M2QyMzAzNjYsIDB4YzI2MWUyMjksIDB4MjM1NThjZmUsCisJMHhhMTQwN2NlOSwgMHg1ZTBmZWZjMiwgMHg3NDc4YjFjYSwgMHgzMWE3MThkMSwgMHg2MzBiNjkxMCwgMHhmMTNmM2ExNCwKKwkweGYyN2ZiMTM3LCAweDg5ZTJmNDUwLCAweDUxODVkNzI4LCAweDMzYTYzZDQ2LCAweGZiZjUyYjU4LCAweGU4Yjc2Yjc3LAorCTB4MzNkZTE4ZmIsIDB4MGU3NjMxNTYsIDB4NzdjODhmMDMsIDB4YThkNWI4YzIsIDB4OGQ3ZTc4NzcsIDB4NGFhMjliMzMsCisJMHgyMWM3N2YyMiwgMHhkZWUxZTAyNywgMHhjYTdmNDA2YiwgMHgwOWRmMmY3ZiwgMHg0YjdhNWZmZCwgMHhlOTNiYjNkNCwKKwkweDBiOGY0YmZiLCAweGYyZTRmNjNlLCAweDdkNjVjZmZjLCAweDkyYWZjZjFlLCAweGZmM2NmOWY1LCAweGU0NWZlY2E0LAorCTB4NWZhYTBlOWYsIDB4NGJmZjU0MTYsIDB4M2ViYzVmOWUsIDB4N2U4M2RmM2YsIDB4ZDJjZTY4ZWIsIDB4ZDIxNGEzODUsCisJMHhiZTg0N2I1MywgMHgyM2VlNWMyOCwgMHhmNmVhMTZmYywgMHhmMzM0NzRmMiwgMHhkYzZlYjJlOSwgMHg2YmEyNTM2ZSwKKwkweGQ1MWZkYTBmLCAweGY2ODJkMjcyLCAweDI3NjRkNWY3LCAweDcwNGY5ZmU1LCAweDc1YzQ0YjJmLCAweDYzYzUyNGQ0LAorCTB4YTFmYjdkNDQsIDB4YzRjMWVjOTcsIDB4ZWQxZmNlNGUsIDB4ZjhlM2MyZTksIDB4YmZhMDkyOWIsIDB4MDVmYjdlYTEsCisJMHg4YzRlYWNmZCwgMHgxYzdlZjViZiwgMHg4MGFlMWM0OSwgMHgyNmY5OWU3ZSwgMHgyM2E3ZmNmMCwgMHg0OWJlMWIzYywKKwkweGI1OTJiMzNmLCAweDQ4N2Y0OGZkLCAweDg2YmU3NTQ5LCAweGUzMjc2M2YzLCAweGU2NDVlNzM0LCAweDhkMTFjNGZmLAorCTB4ZTc4NjI3ZjEsIDB4ZjNmNTAwNDUsIDB4NjdhNWQ3OTcsIDB4NWZmM2ZmNDIsIDB4MDRiZDNkN2QsIDB4ZTc2MTI1ZmQsCisJMHhjYzc0ZGEyYiwgMHhkYjM0Zjc4OSwgMHgxYmU3YTUxOCwgMHg3ZGUyMzEzZiwgMHg4ZDVkOGFiMywgMHhhZWQwNzFjNiwKKwkweDAwZGNkMjEyLCAweDljMDRjYWI4LCAweDkzZjRlNzYwLCAweDgzNzNlYzAzLCAweDNkOGMxYmQwLCAweDVmMzdmN2NkLAorCTB4N2E0N2FiM2QsIDB4OWRkNWQ3Y2UsIDB4ZjZlZDBlN2EsIDB4M2VlNDI1MjgsIDB4ZGRmMTY2Y2QsIDB4MTdjZTRlZDEsCisJMHhlODdhMTVlZiwgMHgxMWIzOWE2YSwgMHg4YzZiZjllNywgMHhiNzNlNDAyMSwgMHg2MGZiOTNiYSwgMHg4NTVmMWM0OSwKKwkweDFjY2RlZWMyLCAweDAxZGIzMTY2LCAweGU0M2Y0M2NmLCAweDFiMjU1NGZiLCAweDNjNjA4NjMyLCAweGQxODRjZGY4LAorCTB4NmQ3ZTI0ZWYsIDB4Yzc5NWI1M2MsIDB4M2M3ODFiNTMsIDB4YmNkNmQwYjUsIDB4MzMzNzk0MDgsIDB4MzFhZDk1MjYsCisJMHg4NGQ4YzFkZiwgMHgwMzM5NDg1ZiwgMHhmMzZmODU5MSwgMHg5ZDVmMzI0YywgMHhjNzliMjYzZiwgMHg3NjdmMzBiYiwKKwkweDUwNmI2M2ZkLCAweGI5YzI5YTZlLCAweGYwZDBmYjFmLCAweDE3YThlMTgxLCAweDc0MjIzMjVhLCAweDM3ZTc5MDU2LAorCTB4NDk4YzhiZTMsIDB4OGVmY2IxNDMsIDB4NjM5ZTU4NzEsIDB4MjIyYWY0YjIsIDB4OGJlMjMyZmMsIDB4Yzc1ZGUzMzcsCisJMHgzZGIwNWY5MCwgMHg0NmRjNDFjNiwgMHgzMDdkZmM1ZiwgMHgyYWRiZjcwZiwgMHgwZjc1YTc5ZCwgMHhkYTg3NzA4YSwKKwkweGMwODdmYTc3LCAweDRhYzkzMWFiLCAweDE5OTAxMzY5LCAweDg3MDkxN2ZkLCAweGY5ZmMxZjFjLCAweGRmZDBjZDQ1LAorCTB4ODM0OWU1YzksIDB4OWY3MWRiNTcsIDB4MzQ5MGM3MjUsIDB4NDY3ZTNmZDQsIDB4ZTA3MmZiODIsIDB4YWM3NTI3ZjgsCisJMHg2ZTI5MmUxNywgMHgwMjRiOGUxNiwgMHg1ZGVlMDMwZSwgMHhkOTVkYmUwMywgMHhhYzA2NzMyYSwgMHg4OThmMjZmMywKKwkweGNkZWZlNGQwLCAweGMwY2U2NThmLCAweDI5YmRlZDM4LCAweGMyZjRmYzlhLCAweDBmZjY5YWVlLCAweGE5YWZlYWNjLAorCTB4NjczNTMwMmYsIDB4YjFmODA1NTUsIDB4MWU0OWZiOWQsIDB4NjJkMmE3ODIsIDB4ZWU3ZjQ3MDksIDB4ZmM1ZjBkZWYsCisJMHhmZmY0NDFlNSwgMHhmNDBlYWIzNiwgMHhkOWVlZTc1NSwgMHhhMWRiOTdmMiwgMHg0ZTNjNjVkNSwgMHgzYjQ3ZjE0NSwKKwkweGM5Y2VjYmM1LCAweGE3N2EyOGYzLCAweGU4NWY3MDNlLCAweGYzYTY2YjIyLCAweDAzZWQ5ZDNlLCAweDdjZWU3NWM5LAorCTB4NzczYTdlZWIsIDB4MDNlZjVkZjYsIDB4ZWIxMjRhZjUsIDB4MDg2YzIxZGQsIDB4NTVjYmMzZGEsIDB4YWViYzUxMWYsCisJMHhlZmNmOTIyMiwgMHg4Y2M3ZWJlMiwgMHhmYjhhMGZiOCwgMHhkZjgxZDc4YSwgMHhkMTBmYzJlZiwgMHg1MGYzNmMzZiwKKwkweGZlYjczYjNjLCAweDFkOWJlZDE4LCAweGJhN2FlNDQ4LCAweDFlODE3NTIyLCAweDQyNTUxZGVmLCAweDFjNjg3NjhhLAorCTB4ZTA2OGFiZTgsIDB4MzY0NmU2OTcsIDB4YmJlZTE3NzAsIDB4MWZiODU4NjYsIDB4YjE5OTM2ZGUsIDB4MWUyYmU0NTgsCisJMHg4ODRhNjlkZiwgMHhmM2Q3N2JhMSwgMHhiY2E4ZjI2YiwgMHhmYTljMmRhMiwgMHgxZTZkNGY3ZiwgMHg1ZjA5ZTc0NywKKwkweGExZmY2ODUzLCAweGU1YTFlNTIwLCAweDI5Yjg3ZTc4LCAweDExZTAzM2RjLCAweDc3ZTBiNzE4LCAweGRlMjFlNTc3LAorCTB4ZjNmMTc2MmEsIDB4OWZlYTA1YjUsIDB4NWE0MDE2YjMsIDB4ZGY0NzliNTYsIDB4NDlhY2E4MTcsIDB4NDI2MTdmMDEsCisJMHgwNWJmYjcyZSwgMHhhZjIxZjM2OCwgMHg0NmFjYjMwZSwgMHg3ZDFhYWJiYiwgMHgzZDQ3OWViZCwgMHg5ZTkwYjQ2MywKKwkweDgwN2I2ZTg5LCAweDMzNmNhZmM2LCAweDI0ZjdmN2QzLCAweGQwZDc3ZjcxLCAweGRiMWFlMWMyLCAweGM5NzJhMmU2LAorCTB4YmE5MzUzMGYsIDB4ODYwZmQ2NjksIDB4N2M3YWNkZjgsIDB4YzJkMGMzOTcsIDB4NmRkZGZkYTgsIDB4ZjM5NTI4ZmQsCisJMHhhZmNmYmI3ZCwgMHgyMWFlM2VlOSwgMHgxNGI4ZWFmZSwgMHg3MWRiZjc5OCwgMHg5MGRjOTU4YSwgMHhhNTdjM2QyMCwKKwkweDBiMzQ3ODZhLCAweGM3ZGFhN2ExLCAweGY0ZTdlMzY5LCAweGRjZmM2ZDRjLCAweDczOGE2MTVlLCAweDMxYzAxMjdlLAorCTB4M2QxNmIxZjEsIDB4NDhiMTA3ZWUsIDB4MzVmMTE1YjMsIDB4N2I2MGM0NzEsIDB4YTk3YzgwNDksIDB4MjIzN2VmN2IsCisJMHhkZWViMGM3ZCwgMHgzNjlkYTIzNywgMHg1MDFiOWE0MSwgMHgzM2NlMmU1ZiwgMHgwNWU5ZWIwNCwgMHgyZjRmNTI0OSwKKwkweDFkZGE1NGEzLCAweGY5MDY3NTc2LCAweDgyYWMzM2E5LCAweGNjZmM4NTAxLCAweDdlNTRmYTEwLCAweDFhNmI0Y2RmLAorCTB4MWU2ZWUzYTAsIDB4YzUzNDdmYzcsIDB4NDVmNTAyYmQsIDB4YmU5YjBlNzMsIDB4NzM2NmY0ODMsIDB4N2NjM2VlM2EsCisJMHg5ZDAzZjA1NywgMHg4OWY5MGFjZCwgMHg3NTFlNzQyZCwgMHgwZWJiMDhlMiwgMHgwNGFiZmZlMywgMHg2ZjhlNTI1YywKKwkweGEyYzU4ZjM0LCAweDViMmE3YmZkLCAweDc3YmVmZDgyLCAweDRlY2Q5ZGU3LCAweDQ3ZjFhZmU4LCAweDBmNjg5OTk5LAorCTB4MjVjZmI4ZTQsIDB4Y2MyOTdiZjEsIDB4ZDcwZDdhZGEsIDB4NDQ2Zjk1ODMsIDB4MGJkZTUxZDgsIDB4ZmI4NjMxNzAsCisJMHhiNDRjN2I5ZCwgMHhkYTcyODE0ZSwgMHhjMzdjYThjZiwgMHg4OWVmMDliNCwgMHg3YWMxNDY1NCwgMHg3ZGNmYzYxNSwKKwkweDdjODdjYzMzLCAweDk4NjZmOGRjLCAweGVmNDZlZDFlLCAweDQ4NzNmNzc0LCAweDdiMzdkY2NmLCAweGExZjVjMThmLAorCTB4NjdhNGMxYjMsIDB4OWYzOGY3ZTQsIDB4MDlkYjNkMjcsIDB4NWJkMjM3YmMsIDB4ZTUyNjdjYzEsIDB4ZTVjMzVkZDMsCisJMHg2OWYwNDhhNSwgMHhiNzNmOTBiMSwgMHg1NTJiYTM5MCwgMHhhZjBlNDg1ZCwgMHhlMzQwMDYzYywgMHhjYTYzZTkzZSwKKwkweDI3ZTg1ZGMwLCAweDdlZjQyZGQ4LCAweDAyY2I5NDkzLCAweDc5NDEwZjVjLCAweDNhMThmZjQxLCAweDhkZmQyYmZmLAorCTB4NmIyYzM5NjAsIDB4ZTViZjUyYjMsIDB4ZWYyMTc2NmQsIDB4Yjk0YmNhMzYsIDB4NjM3MjE2MmIsIDB4MmNjNjdlMTIsCisJMHg1M2JiZTdjMSwgMHg1ZTIwZWZkYywgMHhlZTQxYWEwYSwgMHgzZjFmNjhhMywgMHhjZmM5ZTUwYiwgMHhmMjJiNDYzNywKKwkweDYyNGRmMDE3LCAweDU0ZmM4MDQ5LCAweGQwY2ZkZTM3LCAweGI5YzUzMTNmLCAweDQxNjY2Zjg4LCAweGNjOWZlODFhLAorCTB4YWM0ZmY3NmUsIDB4ZmUwMDEyZTMsIDB4NzQzMjJiODksIDB4OWRhOWRmNzgsIDB4ZTZmOWRiN2YsIDB4OGY3ZmY4ZTYsCisJMHg0OGUyOTc5MCwgMHg2N2Y0NGY1ZiwgMHgwZTYxNTUwZCwgMHgzOTdlODczYywgMHgyY2Y3ZWY4ZSwgMHhiOGYxYzU1YywKKwkweDQ1Y2FlMGQwLCAweDJmZTE2MmZmLCAweGExOTc4YTE1LCAweDY5N2E4MWRmLCAweDYzMmE5MWQ4LCAweGZlZTUxYzYwLAorCTB4MGVjYzQxYjYsIDB4ZDZkMjk4NzgsIDB4MTMzN2QyODMsIDB4MGYxMTQ3ZGMsIDB4MDRkMzZkNDUsIDB4YTM3ZDA2YmUsCisJMHg0ZWExYzVmZCwgMHg3ODMyNDcxZSwgMHgxOThkOGU0ZCwgMHhhYjcyNDcxOCwgMHg2OTMzZTc0OCwgMHhlMDRjZmFjYywKKwkweDFkN2FkZTdlLCAweGJlZTRjM2M1LCAweDk5MmI4Y2EzLCAweDgwN2NiY2YwLCAweDVmNDJmZDFkLCAweDM3ZWY0ZTliLAorCTB4NzI5OWM3MDQsIDB4YjBiZmRkYjgsIDB4YmY3NjQwZDksIDB4YzNjZmYxYWMsIDB4MmU3ZjUwNzQsIDB4ZWQwNWQ5YzMsCisJMHg3NzdhOTdjOSwgMHhiY2Y1ZjIxYiwgMHgwZDU3ZGVjOSwgMHhlNGZmOWY5MCwgMHg3NjkxYThjZSwgMHhmNGViM2UzZiwKKwkweDQ3Njg5ZWJlLCAweDE4OGYwMGViLCAweGEzNWJhYWVmLCAweGJmYjk3OWU2LCAweGM5ZjdjMTEzLCAweDdlNGI3ZjM4LAorCTB4NzlmM2U2MGUsIDB4OWY4OGRkNmQsIDB4Yzg5OTU0YWUsIDB4YmUwMTVkMGUsIDB4NDg3NjAxNjUsIDB4ZTdhOTFkZGEsCisJMHg3YzkxZmRhNSwgMHhmYWU3YWU1ZCwgMHhkYTMyM2NhYiwgMHhiNDA4YzllYiwgMHgzOTVjOTMzYiwgMHhmODdkNzdjOCwKKwkweGRkYmYxYTc5LCAweDE0NzZiNGQ5LCAweDM4YTVjMWNhLCAweGVkMjhiNzNhLCAweGJjMWNiMDQ2LCAweGQzMWMxNGI2LAorCTB4OGVlZDFkNWUsIDB4Y2Y1MmViZDQsIDB4ZmEzNWJiNGIsIDB4ZmU3NzJmZTUsIDB4OGE1NWNkMTUsIDB4ZTAzMjQwN2IsCisJMHhiNzNkNmVlYiwgMHgyZGViNzc1ZiwgMHhlMzYzM2ZjNCwgMHg2ZjkxZTkyNiwgMHgxZThmNWU2ZSwgMHg5OGY0N2ExMywKKwkweDc0NTY4ZjQ2LCAweDI3MDYwNzYyLCAweDc0MWM5YWRmLCAweDRjZjNlZDE1LCAweDNkNDQ3ZmRjLCAweGEzZGZkODFmLAorCTB4ZTBjN2EzMjksIDB4NzMyN2M2M2MsIDB4YzE1ZGZiM2IsIDB4MWZmZTk5ZGQsIDB4ZmE2YjdjOWYsIDB4ODhiMjU4N2YsCisJMHhmZjQwZGRmNywgMHhmZDczMjYxNywgMHg5OWVmYWMxZiwgMHg3M2E3YmY5NSwgMHgyZjVmNGY2OSwgMHgwY2EzODNkYSwKKwkweGMxZGEwM2VjLCAweDE2ZmIwODg2LCAweDVlYzgwZjYxLCAweGJmN2I0Nzg0LCAweDRkNWMxZWNlLCAweDc4ODg1OTliLAorCTB4MWUwZjYxMGEsIDB4ZjYxNmZlNGEsIDB4OTRhMWYyNDAsIDB4NTIyNzI5MWIsIDB4NDhlNTgyMmUsIDB4OWY4NGM1Y2EsCisJMHhlOTExM2FjMiwgMHg1N2JmMWVmNCwgMHg2Y2Y3YWU1MCwgMHg3YjQ2ZmRhMywgMHhjZjk0NjBjNCwgMHg5NzZlM2Y3NiwKKwkweGMxZDZmMjQyLCAweGYxZjkwODRlLCAweDZlZDY4YmNiLCAweGYyOTBiOTQ4LCAweDVjYTdlNTIyLCAweDIwZWNjNWM4LAorCTB4ZDZhN2Q4YjksIDB4ZjcwYTMzM2QsIDB4NmJkZDkyY2IsIDB4NzJmZGUzOTMsIDB4ZDgyM2I2NTIsIDB4NTdjYTc0M2UsCisJMHhiMzY0NTkxOCwgMHhmMjE4YWFlMywgMHg4MWE0Mzk1NSwgMHg0NGVhNjU3YywgMHhiZTQ5OWUxZSwgMHhkOTY4YmYzNSwKKwkweDZmZDNmMjRkLCAweGY0ZmNmYmZlLCAweGU5Zjg0ZTliLCAweDNmMGRiZTdmLCAweDNmNjNmNDc1LCAweDNjMDNiMmNlLAorCTB4ZGY0MGIyNTcsIDB4NmRmOWY4NjYsIDB4ZmI4YzNiYzIsIDB4N2FmOWRkMGYsIDB4MDQ5N2Q2MDAsIDB4OGQzMTkzNzcsCisJMHhhZTEzM2VlMiwgMHgyZjhhMmFiMywgMHg3NDk0YmUwYSwgMHg2Y2MwZmU5NiwgMHg5MzM4NzcxMSwgMHhlMTA3N2FlMiwKKwkweDgyYzBmNWM1LCAweDQ0N2JkMzliLCAweGIzNWM1MzY3LCAweGIzMjdkNzExLCAweDAzZjQwZDIxLCAweDliN2ZmMzNhLAorCTB4YmRlZjUxNmYsIDB4M2U3NDkzNzEsIDB4ZmI5ZGZjOTYsIDB4NDM5MmM3OGQsIDB4YjFjNzhkZmIsIDB4YjVkMjliZmMsCisJMHhmODg5OTcyMCwgMHgzMDBiOGZkZSwgMHgyOWUxMzhkZSwgMHgwYWNiNjc5MSwgMHg0NmQzOGYxMCwgMHgzYzlmZmFjOCwKKwkweGZhODFlY2U5LCAweDM4YjhjOTgxLCAweDUzZGUzOWM1LCAweGY0YjNkZTQ1LCAweDNmNjgxOGYwLCAweDhmZTYxOWUxLAorCTB4ZDhmZDQzOWIsIDB4YjhmNmU4ZWMsIDB4ZWRmY2MyODgsIDB4M2IxZmU3OTUsIDB4NTFlODg2YmMsIDB4ZGRjY2U1Y2IsCisJMHgzZmZiZTdhMiwgMHg3OTA1OWYyMiwgMHg0NDdlNDA0YiwgMHg2ZjAzN2U1MCwgMHg2MTZmYTUxZiwgMHg5MDQ1ZTc4MSwKKwkweDljMjE5NDlmLCAweGZmMDBhZWNlLCAweDdmZGY4NjAxLCAweDU1ODVlZDA1LCAweGE4ZDcxODYxLCAweGQ2ZjhkYjhjLAorCTB4ZjU2YmQ0MTUsIDB4YjU0NWVkMGEsIDB4MTRkNTgxZTMsIDB4ZmJjNTUzMzgsIDB4NzM1Zjk0YjksIDB4YzIzZTA5ZDgsCisJMHhiZTc4YmIwMywgMHg5M2VkNGE0ZiwgMHgzN2U4YmQxZSwgMHhhMWJkZGNlMCwgMHhiOWQyNzE0ZSwgMHhiNzhhMTE4MywKKwkweDdjNDc0NjViLCAweGRhZDE0OWY3LCAweDZiZDFmYzI3LCAweDFlNzg2N2JmLCAweDZmYmU1NmVmLCAweDhkZDZjZmJmLAorCTB4NmU5OWY3YmUsIDB4YjJmYmZjNjEsIDB4ZmU3ZjlmNDMsIDB4ZWZlNzBhNWUsIDB4MjFkMTU5MzEsIDB4YThhNWM3ZWIsCisJMHgzNzExMWZiYywgMHg2OGExZjFhMCwgMHg3YmU4NWQ0YSwgMHhiOGM1MTNiMCwgMHg0MjVmYjhjZCwgMHgyNGY2ZGNmOCwKKwkweDI4ZDliN2UyLCAweDkzZjJmZGYxLCAweDE5NjM3N2M4LCAweDYwY2ZjNGQzLCAweDlmZGZjYTdjLCAweDhkNDE3MmYyLAorCTB4MTlkNzRmOWUsIDB4OWJhZmFmODQsIDB4YTkxNDgwZWYsIDB4ZjJmOGZkYmYsIDB4ZjRjYmQxMDQsIDB4ODQ3NmY4MzUsCisJMHhmYjVkYjdjMCwgMHhlOGViZWZiZCwgMHhmN2MzYWMzNSwgMHg0OGU3NmY4MiwgMHhmODZhNzYzZSwgMHgyMmVmNWEzZCwKKwkweDUzOGU4Y2ZlLCAweDU3NDdlOGFjLCAweGUwZDZjMmI4LCAweDlmMmZjMTdhLCAweDZjYmUyN2JmLCAweDFkMDNmYjk2LAorCTB4MDJiNWVmZTQsIDB4ODkwYWJmOTQsIDB4NGZlYmNmNDcsIDB4NzRiYWZjYTIsIDB4M2NiOWVkZWQsIDB4NzMzNWYzYjYsCisJMHg1MmJjMDFmNiwgMHg3ZmJlMGZjOCwgMHgyN2ZhZjllNCwgMHg3YzA5MmUzMSwgMHhkNzk0ZjU0MSwgMHgyYzFkYzAwNywKKwkweGY5NDE3NThmLCAweDE1ZjkyMGVjLCAweDAzZmE0N2YyLCAweGE5ZTAwMWVkLCAweGI4YjdlYTI3LCAweDAwN2I0NjYzLAorCTB4ZDA0Y2ZjOWYsIDB4MjdiOGEyZTksIDB4ZmI5YTNjZGEsIDB4NzhkZGNkOTMsIDB4ZmI4NTIzYmEsIDB4N2MwOWNmOGYsCisJMHg5YmVkMTI2ZSwgMHg5MGYwMDNjMywgMHgxZjFmZTFhYSwgMHhlNjAyNWJhZSwgMHgzZmJhNzg0ZCwgMHg5M2ZiY2U0ZSwKKwkweDYzZDA3YzgyLCAweGJmNWUzNmNkLCAweDI3YTNlNTJkLCAweDdjZmVkOTNkLCAweGE2YWY3ZjcwLCAweDc4ODA1MjdjLAorCTB4ZjFmZmY3ZjEsIDB4ZWUyM2Y0NjEsIDB4OTFkYjc4MTcsIDB4MjdiMGU0NzIsIDB4YzEzOWQwNTIsIDB4ZjAyMTRlZmYsCisJMHg1MTYzYmQwNywgMHg3NGExZmM4ZSwgMHg3NjFmOGZlNCwgMHhkMDRmNGZlNCwgMHg3NzRlZjRmNywgMHgzYTdiZGY2NywKKwkweGZhMGNlZjdlLCAweGVhM2RlMTllLCAweGQwNWVmZjliLCAweGFlODgzZjJkLCAweDFkNzQ0MTc5LCAweDk0MmY5NDEzLAorCTB4ZmY0NmFmNzksIDB4NWM1Y2JkNGEsIDB4MDllM2Y0ZmYsIDB4NTRkZjE4NzEsIDB4OWZiZjM4ZTgsIDB4YmQ5MzRmOWYsCisJMHhmYzk1NmY5OSwgMHhmMjMwZTY3YiwgMHhjZjlmOWZhYiwgMHhkNzI3OWUxMiwgMHhjZTc5YmEwOSwgMHg3ODdhODkzZCwKKwkweDUxZTFlYTEyLCAweGQ0MTRmY2ZlLCAweDVmM2Y5NDQzLCAweDdlNjFmYjgwLCAweGVhODE3NTdiLCAweGVkOTFhYmVmLAorCTB4N2FmZDkyMmYsIDB4ZWZlYzg1NjAsIDB4M2E0YmNhMzMsIDB4YjIyNWNmMzIsIDB4YmQwYmY3NzcsIDB4YTRhZDNjYzMsCisJMHhmMDM1ZTdmNywgMHhmZTdkM2ZlZiwgMHgyYjVmYzNmMywgMHg3ODQxYjUwZiwgMHhmNzk0MTBkOSwgMHg3NzVmYjUwNCwKKwkweDIyYjZmYjAzLCAweDgyYzdmYmU4LCAweGU1MDRkN2VhLCAweDZiZTUwN2Q3LCAweGNkMTdkZmI0LCAweDhiMGU0ODUyLAorCTB4YzlmZGYwNDYsIDB4ZTYwY2I5NjAsIDB4ZGE1MjJmOGYsIDB4ZjZlZDYzZTMsIDB4ZmYyNDg5NWMsIDB4MTM1NzIzNGUsCisJMHhmYWZlNzlhYSwgMHhhODI5ZmZmMywgMHhhN2M4MGM4OSwgMHhiMjFlODliMCwgMHhjMDVhMzBlZiwgMHhiOWQwNDFmZCwKKwkweGMxZjgxNTFlLCAweGJjZGU4OWQwLCAweGVjZGU5OWQ4LCAweDc5ZWY2YzEzLCAweGQ3ZjAzZmZkLCAweGQyMmZkYTI0LAorCTB4NTRmYjI1ZjgsIDB4OTU1MWJlNmQsIDB4YmJiZDQ3NzAsIDB4NWY2MDMyMjgsIDB4ZTIyNjU5OTUsIDB4ZmRmM2JhYmEsCisJMHg2Mzg5ODg5YiwgMHgyMmZjMDM1MiwgMHg2NzQ0Zjg0ZiwgMHhmYjY1M2NjMCwgMHg1NzVkNWY3MSwgMHhkNGY4YmM3MSwKKwkweDcxOWI4OWYwLCAweGQ4YjQ2ODdmLCAweDE0ZjFiNGQ3LCAweGY2OGFhNWVjLCAweDZmYzQ1MmJhLCAweDVkMzllMWM2LAorCTB4ZWJlZTE3NmMsIDB4MGZkMDMwYjksIDB4NzBiZDc1NjIsIDB4NTIzZjhkOWUsIDB4ZDU1MGJiZjksIDB4NTNjMDFmNDAsCisJMHg3OWQzYjMxMSwgMHhlYTc4OTlkMywgMHg0N2Q0M2JiZSwgMHgwZGY5MmY0NywgMHg0N2VmYjc3YywgMHhkM2I0MTJlYSwKKwkweGQyYzQ5NzQ3LCAweGE5NDVhNjM5LCAweDE3ZGNlZmRjLCAweDM2NjEzNWRkLCAweDFlMjMxYmU0LCAweGY4ZGI3ZDI2LAorCTB4Zjc0YTU4YzQsIDB4YWQ5NWNlYWEsIDB4MzUzYWU4NTYsIDB4NWY2NDYyNzksIDB4M2MyNjhmYWMsIDB4NGZjNDM2MzksCisJMHg5ZGZjMDY1YywgMHgzODI3NmE5OSwgMHg0MjZiMzZkYywgMHhhYmRiZmEzZCwgMHgwODVmYjQwZCwgMHhmYzQ1N2UyZCwKKwkweDMwNjlhNGYzLCAweDk2OGJiN2FlLCAweGIwZmRhN2Y1LCAweDFhNGY5ZmUyLCAweDhhYjBmNzg3LCAweDNlZDAzNzFmLAorCTB4NGFjZThiNDksIDB4ZWFmNzIyNzEsIDB4NmEyZTc0YjEsIDB4N2E5MTBhZDYsIDB4Y2RmNGEyZWUsIDB4MWFiYWZjZmYsCisJMHhiZWI1NjllZiwgMHgwZWZiZDBhMCwgMHg3YmFkNWM3NywgMHg5YjllMTA2NywgMHhmNzRlZTlhYywgMHg3NTgwZGUyZSwKKwkweDNlZmI5ZTAwLCAweDE3YjdiZWJlLCAweDA4OWYyMWNmLCAweGE0NzNhMmFiLCAweDhiZWU5ZWQwLCAweGJmYjM1ZTk1LAorCTB4ZGIwYjMxM2IsIDB4ZDBlNWQ2YWIsIDB4YTM5NDE0ZmUsIDB4OTU2YTdjZmYsIDB4NDFlZjA5YmEsIDB4YzI1OTQ1MTUsCisJMHhhOWY2ZmNmMSwgMHg3NWM1MThhZiwgMHhhMjZlM2Q0ZSwgMHg0NzhlMjI3NywgMHg4ZmFjNjdiYSwgMHhlOGI4ZmJhMywKKwkweDhhNTNiM2U5LCAweDNjMDE0YTNkLCAweDY3ZDBkYTRjLCAweDk2MTI2MjYyLCAweGZiN2QwNDliLCAweDFlMDExNTQ0LAorCTB4ZmNlZDc0OGEsIDB4MjRhNGY2NDMsIDB4YTUyN2U3ODYsIDB4MDViODk5ZjYsIDB4OTdlYTcxZTYsIDB4ZDg3Y2U5YmQsCisJMHhlNGU3NTRjMSwgMHgyZmQ3YzA1NCwgMHg1MjUzOWNkMiwgMHg2ZTVlMTFlMywgMHgwZmZjZGViNywgMHhlM2ZjOGZkZiwKKwkweGU0MDRlMjg1LCAweDM5NTI4N2FmLCAweDU2ZDFiZjVmLCAweGJlZjgxMDljLCAweDNkNDVjOTc3LCAweDQ2OWJjMWYxLAorCTB4Mjc3YTIyZmIsIDB4YzE0ZDNjMzAsIDB4NDFmMDM2NzUsIDB4NjdjZGM2MmMsIDB4ZjAwYjc1ODksIDB4MjE5ZDkyZjMsCisJMHhhOWUxYWJmYywgMHhmMWFiZDEyYSwgMHg0OGQ5ZjFhNywgMHgwZjVmM2Y1ZiwgMHgxOWY1MTc3ZiwgMHg1ZjIwMzdhZCwKKwkweDJkNzMyMWIxLCAweGE2OTNiOWRhLCAweDBmNDRlYzI1LCAweDkxZmU3ZWQ2LCAweDNjMjMwYmVkLCAweDc5ODViNjE5LAorCTB4N2UzMDMyYzMsIDB4ZmM4NzFjZWEsIDB4N2FlYjEyY2QsIDB4YzgwNGI2NGQsIDB4NzdmZjY4YTEsIDB4ZmJlNzNmMGYsCisJMHhlYjhmNjg3NywgMHhmZTdiYmZiZSwgMHg5ZmI4MTJkNywgMHg0Njk3ZGIyMSwgMHg1Y2U4M2M1OSwgMHhmNDU4YjY5YywKKwkweGZhYTM4ZjQ4LCAweDNjZjBhN2E1LCAweDA2MGJjOTVhLCAweDJmMjUwM2IyLCAweDhhZDYzZmM0LCAweDA2ZjgwN2ZhLAorCTB4ZjNjMTZiZTMsIDB4ODFhYTYzZmEsIDB4OTMzYTMxYzcsIDB4YWQxOGNmNGIsIDB4MTMzMWIyNWMsIDB4Yzk5ZGJlNzEsCisJMHhkYzg2Y2Q2NSwgMHgzYjIzOWI4OSwgMHgyYjUyY2I5NywgMHg1ZWUzNGZkNywgMHg5NjUxZWZlMCwgMHg3MWU4YjUwZSwKKwkweDBiZjQ3MzdmLCAweDdiYTE2ZDZmLCAweDg2YzIwYjc0LCAweGQyODliZGUwLCAweGFmNDQ0YzE3LCAweDYzYzU4YjE2LAorCTB4MTNlZjBkYmQsIDB4OTAzMWY0NTgsIDB4ZWRjYTliM2UsIDB4OWY5MGJkNjksIDB4Y2RlOTk1NWMsIDB4N2JhNTI4NDMsCisJMHhmMGRmNzIxMiwgMHg5ZTY3OTJlYywgMHhlNzk3ZTNjNSwgMHg3MGRhNzc5OCwgMHgyNzY1ZGZjMCwgMHhiYmNiZDNlNywKKwkweDA2M2Y4YTU0LCAweDFmOTYyM2VmLCAweDYxY2M2OWRjLCAweDc4OGZiMTM3LCAweDMyYzNmZDgzLCAweGRmZGUyMmQ2LAorCTB4ZjA3ZGZkMGQsIDB4YTlhYmUxZmUsIDB4MDY4N2ZiYzEsIDB4MmE1ZTRmYmEsIDB4Mzc3MzBmZjYsIDB4ZTk3NzA0MjgsCisJMHgzZmNmN2UxMiwgMHg4ZGM3OTYzNywgMHhmYTA1MmU0ZiwgMHgxZWRlNjkxYiwgMHgwZjNjMTBlYiwgMHgyOTRlZWRjZCwKKwkweGY4NjZiYzUzLCAweDBiMGRhZWY1LCAweDEzZDk4ZTI4LCAweDZlNzE4NGYxLCAweDg5ZTI2ZWYxLCAweGFlM2E0NzMwLAorCTB4MDg1ZTRiZjMsIDB4ZmU5NmZjMjMsIDB4N2U1ZmVlNmEsIDB4ZmFmNzg1OTksIDB4ZDcwMmUyMGEsIDB4MmY5MWZiZDUsCisJMHhkZTE5N2UzOCwgMHg5Y2ZkOTQxZiwgMHg3YTYzZjY1ZSwgMHg0NWY3MzFhNywgMHg3Y2MzMWY1OCwgMHhhYmQ4NjM0YSwKKwkweGJkMjA2N2Y3LCAweDlmNzFkMjkyLCAweDVkMmJiNjUzLCAweGJjNWVhM2ZlLCAweDYxYWZhYzFkLCAweDRhYjQ1ZDFkLAorCTB4ZWNjN2VmZTUsIDB4MDQxZDkxMzYsIDB4MDE2NDRmNTksIDB4YWQ2NzJjZjcsIDB4NzIzNDY4MzgsIDB4ODcxMmM2M2IsCisJMHhlZWRhZmYwOSwgMHgxYzc2OWZiZiwgMHg2ZWVhZjFlYSwgMHgyNjg3YjhhNSwgMHg1MWVmMjdmMSwgMHhmYmY4ZTkxNSwKKwkweDg1M2E4NTc0LCAweDI2ODE1N2VlLCAweDk3NDk3YmEzLCAweDdiNWZiOTUzLCAweDY3OWY5NTNhLCAweGQwNzc0YTI4LAorCTB4YjVmMjljZmQsIDB4MGNmMmM3MjYsIDB4N2RmYjRmZGUsIDB4OTVkZjU4NGYsIDB4Njg0YjlhZWIsIDB4MjZmN2YzM2YsCisJMHhhZTU0YWI4YSwgMHg0NTg2NzMwOCwgMHgzYjE3ZjNmMSwgMHg2YWY5ZDAwNiwgMHg1MWYwMTFiZCwgMHhlMmZhZTc2NiwKKwkweGE1NmY5OGIyLCAweDc0NWRkMjdkLCAweDhlY2Y0MTlmLCAweGRjYmVhMWU4LCAweDc5NjNmNWMyLCAweDkyM2RlMDBjLAorCTB4MTg2ZThhMzMsIDB4ZThjNzY3YmUsIDB4OWJmNjI0ZGMsIDB4N2M2MDI4MzQsIDB4M2Y0Mzk0NDUsIDB4YmY3ZjI4ZjYsCisJMHg4MzU2M2E0ZCwgMHhkZjZjMWI3MSwgMHgzMWUyMTA3NywgMHg4NDc0ZGE3NiwgMHhlNDk1MTVlZiwgMHg3NmI0OTAxOSwKKwkweGFmN2RmYTA0LCAweGRlYjg5OWE4LCAweDZmYjU1YTJlLCAweGY5ZGZlYTFjLCAweDhkZTMwN2RiLCAweGVhZjQ1NjA5LAorCTB4ZTYzZjY0MDcsIDB4ODhiN2ZhMGIsIDB4OTBjNTY3NzMsIDB4MjJiNjc3YzcsIDB4YjkzY2I4ZDIsIDB4OGEyZjFlNTUsCisJMHhlZjM0NTM0OCwgMHhmMmZhYzkxMCwgMHhiZjFlMDY1NSwgMHg4YThmM2QwNywgMHhjN2Q5N2NhNSwgMHhhNWI5NmZkNCwKKwkweDZmZjUwMTM5LCAweDMwYzM2ZWY5LCAweDY5NTFkM2Q0LCAweDk3OGIyZTVjLCAweDAxMWY2NWE1LCAweDQ0MzYyYWJlLAorCTB4NjU4M2JiZDMsIDB4ZTYyMzAyOWUsIDB4Y2ExNTZhY2IsIDB4NGY4YmJmZmIsIDB4YmYzZDNlNDcsIDB4ZTQyOGI1ZTIsCisJMHhiZTYxMTM5ZiwgMHg1YTk3Njg5ZSwgMHhlODM5ODQxNywgMHhjNzk1YTFkZSwgMHhlOGFmY2VlYiwgMHg2Njk1Zjc0OSwKKwkweGY4MmQ5YjU5LCAweDQ1YWNjMTllLCAweGJmYTg2ZGRkLCAweDQ2N2Q1YThmLCAweDk3NWEzZmFjLCAweGQzYmNjM2ExLAorCTB4YmNjNmNkNmEsIDB4ZTUxYjdmNTMsIDB4MmRmMzhiY2YsIDB4YTU3YzgzZjQsIDB4NmQ5NzNhNzAsIDB4YmZjNDY3ZGIsCisJMHhjYzQ0MzI0ZiwgMHgxZjJiZTJmNywgMHg0ZmY4YzJmNCwgMHgyZjczN2E3OSwgMHgwN2MwMmJiNCwgMHhjZjEwNTJiZCwKKwkweDk3NjQyOTJmLCAweGYzZjFiNjJiLCAweDJhMGY5MmVlLCAweGVlNDAwZjkwLCAweGE4M2UwOWU2LCAweGY3ZGFmNWQ4LAorCTB4OTAyYTFlNTEsIDB4ZjIzYTQzZmUsIDB4N2VmM2YwMTEsIDB4NzFiMWRmMmEsIDB4ZWZkZmUzMWMsIDB4NzY5MTNlNDcsCisJMHgwYzJiZjIwYywgMHhmMWRmOGMzNiwgMHhhNzFhNjY3YywgMHhlMThmOTQzZiwgMHhmYzAxOWVlNSwgMHgzOWZiNWQxYywKKwkweDc0MWM4ZDA0LCAweDFhNTc1ZjQ2LCAweGNiYzU4N2I3LCAweDVkNmZhNDRjLCAweDVhMWU1YzY5LCAweDQyOGVlZDU2LAorCTB4NjU3YzVkZmEsIDB4NjdkYzAxZGYsIDB4NTYwMWRmMjksIDB4MWU0MjFlZGEsIDB4NzEyYTNlMDQsIDB4M2YwNDUxZmUsCisJMHgzODk1MTdmOSwgMHhmY2ZmMjhkZiwgMHhjODVlZjlkYiwgMHhmM2UzMjU2MSwgMHhkNGFkZjM5MywgMHg3YWNiZjk4YiwKKwkweGMxMjRmZGYxLCAweGUwNGM2NTJmLCAweDJlNmY1NzZiLCAweDUwY2U0Mjc3LCAweDBlYmRlOThlLCAweDRkYjczZjMxLAorCTB4ZjdlNTBlZmIsIDB4MjJkY2ZjYzUsIDB4MjhiYWQ2NjUsIDB4MTdkMjBmYzQsIDB4MTAzZTBmZjUsIDB4MDRmYTk0NjksCisJMHhiZWRjNWM5YSwgMHg0YmYxY2U5MSwgMHg1N2Y4NDk3YSwgMHhkZjQwMzgwOSwgMHg3ZTZjNjMzOSwgMHhmMjc0YjYzYSwKKwkweGUwOTU2NDRlLCAweDc3OGY2MzliLCAweGZjMDdhZjQ5LCAweGNmNGFkZjlkLCAweGVhYmYxMTZjLCAweDdjOTNjNjAzLAorCTB4N2RjYmM3MjMsIDB4MzhkZGQyNzksIDB4ODdkZmU4NmYsIDB4OGY3MWNiZmQsIDB4ZDhmNDIyN2EsIDB4ZTVjNjUxY2YsCisJMHhlNTJmYzI0MywgMHhhMWZhYjczMiwgMHg2MTQ3MDdiYiwgMHhlZTk2OGJiYiwgMHg5Y2RlNzAwMywgMHhhY2QyYWI4ZSwKKwkweGZkMTNiZGY0LCAweDU5ZGVmODA1LCAweGZhZGM1MGFmLCAweDFmZTc1ODk4LCAweGE4YjVmYzdiLCAweDdlN2UwMWUyLAorCTB4Mjc3YzQyN2YsIDB4MzA3ZjBjZjksIDB4NmRlMTI2M2UsIDB4NzAzOGYxYjIsIDB4MGY1MmRjMzAsIDB4OWY3M2I4NDksCisJMHgyYzZlZWZiOCwgMHhiZWUzZjA5NywgMHg0YTlmMjA1MSwgMHg5NTdlNGEzYywgMHhmOTgyZjVmNywgMHhkYTRlNzg5NiwKKwkweGZlNzNiNTRmLCAweDQ2M2Q0Y2FlLCAweDk0M2E3N2U3LCAweGZjMjdmNzA3LCAweDVjZTIxM2EyLCAweGUzM2M2Yjc5LAorCTB4ODkxNWZmNzEsIDB4OGFmNzM1ZmIsIDB4YjQwYzhiMTgsIDB4YzA4ZWQyM2YsIDB4ODA3ZDFhY2YsIDB4YTdiZjY5ZmQsCisJMHg4YjNjZTcxNiwgMHhkNjkwYmI3NCwgMHhjNzNmZmE4ZCwgMHhkMDM5OGNlYSwgMHhlNjk5ZDk2ZiwgMHg5ZGNlZjg3MSwKKwkweGI4ZWY0M2Y0LCAweDMxYTM1M2VhLCAweDlmOGJiNTVlLCAweDUyZmM5Mzc3LCAweGM5M2Y2MTc2LCAweGZmYjhiOTQxLAorCTB4ODNlYWI0NTQsIDB4ZWZjOGUxODIsIDB4YmVkMDM1YmYsIDB4NjNlM2QxNGUsIDB4Y2ZkZmU4OGQsIDB4MTg3MzMyZGQsCisJMHg0MWVmMDFhMiwgMHhiYjNmNWVhMCwgMHhiZjI2Njg3OSwgMHg5ODRkNjA1OSwgMHgzNjIxZjc4NiwgMHgwMWVkMzMzZiwKKwkweGFmNTU5ZjI4LCAweGQ4MGRiYmQyLCAweGQxNmZjYTBmLCAweDVmMTQ5OWEzLCAweDUyZDYxMTNkLCAweGY4ZmQwYTMwLAorCTB4ZjQ1NmE4MWYsIDB4MzJkZjZmZTMsIDB4N2Y2YzMxZjQsIDB4MGM2YmE1YmIsIDB4MzliMWI2M2QsIDB4N2Q0ZWYyOTYsCisJMHhlOTA3ZDkzNCwgMHg4MDczY2FmNywgMHhjN2RlZTJkNSwgMHgzZmRlODQ1ZiwgMHhlMjJhOWVkYywgMHgyZjc1NWZmYywKKwkweGRkNmY4ZmRjLCAweGFjZWY0NjE4LCAweDc1ZWQxYTE0LCAweDRmNmYxYzNlLCAweDU0Njc1YTE3LCAweDIzZWFmMTFhLAorCTB4YmYyNTViZGQsIDB4OTk5MThlNmMsIDB4Yjk1MDg2OTMsIDB4MGZjYTA5MzksIDB4NDUxZjlhMWEsIDB4NTFmMDcyM2IsCisJMHgzZjdjNjBjYiwgMHg4NmQ3YTk5MiwgMHg5YTdmNzMxNSwgMHg2YWM2M2JlZiwgMHg3MDkxMmRkZiwgMHgwZmM2MjQ3YywKKwkweGRmN2U0ZmVlLCAweDFiMDhlYjg0LCAweGVmYTQ0ZmRkLCAweGVkZjhhZWNmLCAweDY3ODNiNDM0LCAweGUxYjRmNmI3LAorCTB4MDllZjRmYmMsIDB4YTcwM2ZiYTMsIDB4Y2Y3N2RhMGQsIDB4NTdkZWY1NmUsIDB4NzkyOTdkZjAsIDB4OWE3NGY1NmYsCisJMHhmYzkzOGZkNiwgMHgzNzdiYzM3ZSwgMHg4MzllZDM3ZiwgMHhhNWI5ZDFiYywgMHhkZDE5NGIwYiwgMHg4ZDM5N2VmYiwKKwkweDIyNjNmN2QxLCAweGU3ODlkYWJlLCAweDRkNmE0YjA4LCAweDczMDdiYzU2LCAweGY3MWVmOTEyLCAweGZjYWI3NmIzLAorCTB4Y2I5OWE1ZmUsIDB4OTlkZGM5YzEsIDB4ZTRiN2JmNzQsIDB4NTI1ZjNjNmYsIDB4M2VmMTc4YTcsIDB4OWZhN2ZlZjIsCisJMHhiMzBhZjNhMCwgMHhhYmM0Y2ZjMSwgMHhmM2ZlZWQwOSwgMHhhMWE3YTdiYSwgMHhiODc2NWMzOCwgMHhmZTdkZTI1NywKKwkweGY5Zjk1YmNiLCAweDMyZWYwZThhLCAweDIwNzlkYzFjLCAweGRmYjlkZWM5LCAweGNiZmI1ZGZjLCAweDlmMTEwZTMyLAorCTB4MmZjZmJkYWUsIDB4NGZkNzJjZjEsIDB4OGMzZjAyNmYsIDB4ZGJjN2UyMTgsIDB4OTBlNzRiNjcsIDB4YTk2MTdjYmYsCisJMHhjYTRiZDI5YiwgMHgyM2I3YjViMSwgMHhlOWEyNWIxZiwgMHhlYjFmYzBiZSwgMHhiZGYxNTE5ZiwgMHg4MzVkZjJhOCwKKwkweDc4M2FlMWFmLCAweGJkMzQ2NDU0LCAweGQyZDlmMjkzLCAweDdhOGZiNDI1LCAweGE1MTU2OTYxLCAweDBlMzJkZTkyLAorCTB4NDZhZWM3NzcsIDB4ZmFiM2VlZmEsIDB4OWZiYzA2Y2MsIDB4YjQ2NDQ2ZmIsIDB4OTBiNjAzYjAsIDB4ZGVlY2VkNzQsCisJMHhiOWQ3OWNiMSwgMHg0YWZhNzAxZiwgMHg5ZDZkY2ZiOCwgMHg2YWYzODUxOSwgMHg2MWI2M2U3YywgMHgyMjM1ZDIyNCwKKwkweDVmN2U4YWRhLCAweDcyNDczOGE5LCAweGFiZjczZDZhLCAweDdmYTM5OGNmLCAweDNkZjQwZjkzLCAweDAyNGE2MWIzLAorCTB4YmIzNzM3YmUsIDB4NTg2OWRlZjEsIDB4YjE0N2IyNWUsIDB4YjFjMDdhZTIsIDB4YWUxNDUyNjcsIDB4YjdkNTNlZGIsCisJMHhhOGZkZTE0NCwgMHg3YmNiZDc0ZiwgMHgzYmZhNWU1NSwgMHhkOGYyYTM1NCwgMHhjYTNmNmMxNCwgMHgwY2Y2NjdhNywKKwkweDdjOGQ3NWJlLCAweDllODJmMjMyLCAweDg3OWViZmVlLCAweDVjOTM4YTcyLCAweDA5MzhhNzBiLCAweGI5ZTJjNGZjLAorCTB4ZjNhZmQ5OTEsIDB4M2FmYjRhZjgsIDB4NmVmM2FjNTcsIDB4MzQ3ZWYzMTcsIDB4MzFmNzI2ZGQsIDB4MDQ3NzNjYTgsCisJMHg2MWJkM2YyZiwgMHhlZmVjNDRlNywgMHgxNTgzNjZlYywgMHhiMzZjZmVlMSwgMHgwNzlmZmE4MSwgMHhjMDFkMzNlYiwKKwkweDVmMmI2NjdiLCAweGQ3MWU2MGY3LCAweGYyYjc2N2NiLCAweDNhYmNjZGY1LCAweDVmMjliZWJlLCAweGZiZjI3MDYwLAorCTB4Y2M3ZTVhYTIsIDB4ZWY0NzY4MGQsIDB4NWVmMjc0ZmIsIDB4OWYyNzNjYzgsIDB4OTdiMDNjZGYsIDB4YmU2MGRmMzgsCisJMHg3NDc1NjE4ZCwgMHg5ZTliZWM4ZiwgMHhkYmU2MGQxNywgMHg4NTVmOTJmOSwgMHhkN2U3Njg3ZSwgMHhlMDQ0ZjhjZSwKKwkweGY5MWRlNTEzLCAweGJjYzNmMjU1LCAweGRlZGY3Y2Y1LCAweDA3MzgzNzU2LCAweDQ3ZjI0ZWY5LCAweGQ1NTkzYmYwLAorCTB4NTdkZmM2NDYsIDB4N2JkMzg1ZDQsIDB4ZWQyMjkzYjgsIDB4NTMwZmI0MDYsIDB4MjBjNjVhZTIsIDB4ZTc0ZTNlNWEsCisJMHhhYjlhODA3ZSwgMHgzN2JkZTI3MywgMHhmOTBhNmQ1NiwgMHg3NDhhY2VjZSwgMHg3NDQ1NTdlZSwgMHhkZWVmYzQ2NSwKKwkweGNmM2YyYjc0LCAweGM5N2ZlZTI5LCAweDg2OTIyNjE0LCAweDg0NTI3Yjc2LCAweDM0M2IwYmVkLCAweGFlZmQzYTc5LAorCTB4Y2ZjMGY0N2IsIDB4M2RiNzZlOTMsIDB4ZDhjMWRkZGEsIDB4ZWUwYmQzMmYsIDB4MjY3Y2MzZDEsIDB4Nzc3NmRhNjUsCisJMHhiZmYzZmM4MywgMHhiN2YzYzA5YSwgMHgyMDFhODZkOSwgMHg3ODk5NGNiZiwgMHhkN2M4MThjZiwgMHg0YTlmM2JhNywKKwkweGVjZTcxODBmLCAweDM4NjkyZTk2LCAweDE5ZmYyODNmLCAweGJiYzVkNzk2LCAweGE1Njk4ZTdmLCAweDQ5NzYwZmI4LAorCTB4MjRiNDFkNjksIDB4ZmRmZWRmYzMsIDB4N2ZhMzk2M2QsIDB4MmRmM2ZiYjQsIDB4MThlZTk2MDYsIDB4N2YwOTc5ODAsCisJMHhkZDI1YjRlOCwgMHhmOGY0YWJmOSwgMHg4Y2M1ZTU4ZSwgMHhmNWU3NGUzZCwgMHgwZTFlZmMzYywgMHgwOWNjYjhmYywKKwkweGYzOGE0Zjc4LCAweDk3YmNiMTViLCAweDJmNzQxMzUzLCAweDlmZWZjMWM3LCAweGYyNTJmYmM5LCAweGZmNWY1NDNlLAorCTB4YjcwZGIyN2QsIDB4OTJlYzlmNzIsIDB4MmExZGZmODEsIDB4MGZiZGE5YzUsIDB4ODlmYzM0YTYsIDB4ZjZhOWY5ZGUsCisJMHhhMjMwOTZiMCwgMHg0ZDllZjY4MywgMHg3NzUzYmUzOSwgMHhhMjBiZGQxYiwgMHg2ZjRjODdmYiwgMHg1NzMzN2QyNywKKwkweGFjNjgzYmZhLCAweDI5ZGZmOTg3LCAweGZjZmM4OTYwLCAweDFmODJhM2MxLCAweDNkNjUyZjRmLCAweDlmZTg4MDdhLAorCTB4Y2EzOWI3N2YsIDB4OTg1YzcwMGUsIDB4ZmE4NWViZTgsIDB4ZmRkYzMyMjAsIDB4ZTlkN2M0MjcsIDB4MGJhOWQ1MGQsCisJMHhhYTFlZjBlMywgMHhlZDBmOTFjOSwgMHg3ZGY5NzhjZiwgMHhiN2UxMzJjZSwgMHg0MmYxY2RiMiwgMHgzYmJlYTgyZiwKKwkweDQ2NTM1ZGExLCAweDg3Njg0ZGRmLCAweDc1N2MxN2RlLCAweGZlOTdjMzIxLCAweDE5MmJkNDIzLCAweGVkMDQ5ZDdjLAorCTB4ZGU1ZDNjZTgsIDB4YjFlMmJiZjIsIDB4NGZlZDg1ZGQsIDB4NzAwZDk4ZjQsIDB4YmMwNjAwOWIsIDB4ZmExZTM1YTcsCisJMHhmN2EzNjExYywgMHhmYjRhOThhYSwgMHg3ZWZlNWVjZiwgMHhhMjc5OWU5MiwgMHhkNWVlZjg2YywgMHgzZWUyZTkzMywKKwkweDk0MTNkZDExLCAweGVmZjg5Mjc0LCAweDFhMTgxNzQwLCAweDk5OWQ1OWZkLCAweGJlZWUxMDE5LCAweGZkZmQwMzZjLAorCTB4ZjkxZjQ5MmYsIDB4ZGRjMmUyY2UsIDB4Nzc0MmZlM2MsIDB4ZTMxZTQ1MjQsIDB4ZTJjZGE3NDgsIDB4YjA3NTlmZWYsCisJMHhiZjkxNmY4YiwgMHhkMWU5NjIwYSwgMHgzMzBkOWZlOCwgMHgxMWM5ZGI0MywgMHhmNWQ4OGQxYiwgMHhmZjJmNmQ3NywKKwkweDkyZmMyZTlkLCAweGUwNzA2Y2MxLCAweGEyYTU5MjNiLCAweGQwYjU1OGNkLCAweDJkNWJlZjhlLCAweDdiZDMzNzhjLAorCTB4ZTg1ZjBiMjUsIDB4OTZjMWZjNGUsIDB4YjYwNTkwZmMsIDB4ODk2MjFiNjMsIDB4YTg2NjU2NWYsIDB4ZjViOWZmODQsCisJMHgyYTFkZGU4YywgMHhmM2E2NGZhOCwgMHgzNmY1Zjk5NCwgMHgxMmRhYTM0YSwgMHg2ZmVjZmNhOSwgMHg3YWUyYzlkZSwKKwkweGUwYTdkMzg5LCAweGE2OGNiYTdmLCAweGQzZmY0YjczLCAweGQ5ZDY1MjliLCAweDY2OTFhNzdiLCAweGYwYmJjZmJhLAorCTB4MGI2YmI3MjAsIDB4YzdiZmNhYTcsIDB4YmJhZmVmYzIsIDB4YzhhZTM4MDQsIDB4YjkwYjhhMWEsIDB4ZTc1M2RjM2EsCisJMHhmMGJhNTdlZiwgMHhlNzdlMDBiZSwgMHg2NzdkNTAzNCwgMHhmYzRhNTdlZiwgMHg4MmRkMDQ5YSwgMHg3YTljYjNkZiwKKwkweGRlOTEzMzMwLCAweDU5ZWYxNDdmLCAweDlhZWQxNzRlLCAweGNlYjNiZGM1LCAweDRmYmNiNWRlLCAweDZhMjI3YmI0LAorCTB4ZGRmMjEzNWMsIDB4Yzg2OTY3NzQsIDB4OWVmNTJkNzcsIDB4Y2ZmYTA3MzAsIDB4N2E0OGQ0ODYsIDB4MzczZWUxNDcsCisJMHhmNTlhOTdmOCwgMHhmMTFlOGI0YywgMHhiZjliMmQzMCwgMHhiYTc1Mzk3MywgMHhmZDkwZGViNiwgMHg0MzczZTkzOSwKKwkweDkyNzc4Nzc2LCAweDRkOGZhODBjLCAweGVjZmI2ZDJlLCAweGY1MGVjMmFlLCAweGY2YmY3ZDY1LCAweDIzNTRkMTVkLAorCTB4YmUzZDRmZDksIDB4NjlmOTBiM2IsIDB4ZjQ1MTVkZTIsIDB4YmZmZmQxMGYsIDB4ZmYxMGI0ZWMsIDB4YjgzYmM0OWIsCisJMHgxMTJiMmNjZCwgMHhiZWFkYzJmNSwgMHhkYmZmZmIyNywgMHhlZmMxYjFmYiwgMHgwM2JmMDZjNCwgMHg0MmViN2ZkYiwKKwkweGRkNjA3ZTRkLCAweDZmZWQzNTBmLCAweGE5YWU1ZmFiLCAweGFkNWJlYzFmLCAweGZhNmNjZmE5LCAweGI0M2YyNjk5LAorCTB4ZmI0ZDM5ZjksIDB4NjkzNjQ3ZTEsIDB4YmNiNjQ3ZWEsIDB4ZmRiZmE5YTQsIDB4ZmU0ZDBlY2MsIDB4NjgzZmQ2OGUsCisJMHhiNmQ5ZGZkYSwgMHg2MWNmOTM1NywgMHhlN2RhNjhlZiwgMHhlNGQwM2Y5YSwgMHg1N2ZmNWFjNywgMHhjNGFlZmVkMywKKwkweGYxZmE5YTEzLCAweGZhOWFmM2Y2LCAweDY4YWU3ZDA5LCAweDJmOGUwNWYyLCAweDM3M2ZlZDM1LCAweDQ1Nzc1N2JhLAorCTB4MGNlYTIyYmYsIDB4NDMzYWFkZjEsIDB4Zjk0NGY4NjEsIDB4NjYyOWE2ZTUsIDB4YmE2YjA3ZDQsIDB4ZjgyNDdkMGEsCisJMHhkM2IwYjk2ZiwgMHg3YmEzMDdhYywgMHg2Y2Q1NjNhYywgMHgzZDVmZjExZiwgMHhjMWEwYmJmZiwgMHhkZTdmNGY3NiwKKwkweDFmZjhjNGU1LCAweDZiZGY4ZDdiLCAweDUyN2YwNjhiLCAweDhjN2UzMDFmLCAweGZmMDJjY2QzLCAweDllNmM1ZGVlLAorCTB4Nzc4ZjkzNTUsIDB4NzdkYTZhMjUsIDB4ZDRkNzZlOTksIDB4NjhmYmI5MjcsIDB4MzhlNjUzZWEsIDB4YWFiNGY5MzQsCisJMHg1ZGY2OWExMSwgMHhmOTM1Mzg5NywgMHhhNjllNGYwYywgMHg5NzFhZjc3ZCwgMHg3NmIzZGYyNiwgMHhlZjdkYTZiYSwKKwkweDdkNGQ2ZWY1LCAweDRkMWNlZjVmLCAweDU1YWRmZjdkLCAweGJhYzBmYzlhLCAweGI3ZjY5YTI1LCAweGY1MzQ3YmQ1LAorCTB4OWEzNTdkODMsIDB4NWFhNmNjZmEsIDB4ZjM2ODdlNGQsIDB4ZTFmYjRkN2EsIDB4ZmE5YWJjNDcsIDB4MzU1YjJkOTEsCisJMHhhOTlmYjdmNSwgMHg2OGVmZTRkMywgMHhiZmI0ZDdhZCwgMHhjOWE3Y2RiMywgMHg5YTgzYjBlNywgMHhmN2U2YjlmNiwKKwkweGQ2YjFmOTM1LCAweGVmZWQzNDRmLCAweGE5YTYzYzRhLCAweGFiM2Y2ZjFmLCAweGNlN2U5N2E5LCAweDZiOWYzZTg0LAorCTB4NTNkZjg1Y2IsIDB4ZTY5N2Y4ZTAsIDB4NmVmN2Y2ZmIsIDB4MWY3NDI4NzcsIDB4NmVkNzVjZWEsIDB4OTZjNTdkZjIsCisJMHgyNGZkMTUzMCwgMHg2Yzk5YzUxNywgMHhmNTExMTA3OCwgMHhiNzI3ZGUxNSwgMHg4NTM5ZjNmMSwgMHgyMzhhYWYxNCwKKwkweDk0NGM4ODdmLCAweDgxMGJjZjFkLCAweGFiODUxMGRmLCAweGY0MGM4Y2I2LCAweGZlZmMyM2FiLCAweGNjZjVlYTViLAorCTB4ZGFkZmY3OWIsIDB4ZDVkY2ZmODQsIDB4ZjI4OGJlZWUsIDB4ZmI2ZWFmMzEsIDB4OTg5ZjdhMzgsIDB4MWMyMjU2NzksCisJMHg3N2JmZmRmMiwgMHg5NTZkZGU4MywgMHgxOWYzNzhlOSwgMHgxN2YwMGZhNiwgMHhhNmQ1ODYwZiwgMHgzODlhZjkwZSwKKwkweDA1ZjM3OGMxLCAweGI2YzFlZjg2LCAweDIyZTIyYmY3LCAweDE3YmRjN2Y4LCAweDE2YmZmNDA2LCAweGY3ZjgxN2Q2LAorCTB4OWE5NzZiMjMsIDB4ZmZjNzZmZTksIDB4ZjI5NWE5NmMsIDB4NTIyNjk2ZWIsIDB4M2EwMGZmZmUsIDB4MDA0N2JmMjksCisJMHgwMDAwNDdiZiwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHg0NTU0NzgwYiwgMHhlZWRkNzA5NiwKKwkweDlkMjQ4ZmRiLCAweDc3NzU3OWQwLCAweDQ5M2NkYzllLCAweGYwOWQwODQ4LCAweDNhM2UwMGQ4LCAweGMwNDA2MDIxLAorCTB4NDkwNDM1ZTYsIDB4NDFhOGMxYTQsIDB4Zjg4MWJhNDMsIDB4YmI3NTc0NGYsIDB4YjIwMjEwMzEsIDB4MTBkMTkxYjMsCisJMHgwMTg2YzE5NSwgMHgwOTlkMTk2NCwgMHgwOWQxYTMyZSwgMHhlMDlhZjA5YSwgMHgxYzYwNGMzYSwgMHgzNzE5ZDljNSwKKwkweDhlZTJhM2EwLCAweGNmZTMxZTEwLCAweDdmYzM4ZmVlLCAweDkzN2JhOWNlLCAweDM4MGU5ZGJlLCAweGY3ZmYzYWZlLAorCTB4YjRmYmZhM2YsIDB4YWI3NTU1MzgsIDB4NzM5ZDU1NGUsIDB4MmFhYTNjZWEsIDB4ODk4OTVlYWQsIDB4ZGU2ZDYzMjIsCisJMHhmMzlmNGExYywgMHhjOTk4OTlkYSwgMHgzMTZmMzZkOCwgMHgwZWJkZGJjMSwgMHg3MmRlZmQ4MiwgMHg5ZDdhNzc0YSwKKwkweDViY2JiZjk0LCAweGFmMWVmMDQxLCAweGRlYmRkMjhiLCAweDc5Zjc0YTFhLCAweDkyZmU1NDNkLCAweDlmZTA4MWI3LAorCTB4YjY5NDdkN2EsIDB4ZmYyOTliN2IsIDB4YzEwYjZmMTUsIDB4MDQ2ZGJjMDcsIDB4NTNmNWVhYmYsIDB4NGJkZGUxZGEsCisJMHg3NmRlMWJlOSwgMHg3NmY0ZWYyYSwgMHhiN2E2ZmMxMCwgMHg2ZjJlZTA4YiwgMHhiYzg3YzEwZiwgMHhmMTFmMDRiZCwKKwkweDk4ZjgyNjllLCAweDFlZDI4ZmI3LCAweGJlOTQ2N2VmLCAweGYyYTdlZGVkLCAweDA5NTdiYzc3LCAweGRiYmY4ZWJlLAorCTB4Y2QyYWZjMTksIDB4MjYzMWU0OWYsIDB4N2FlNjk3MzAsIDB4YzljY2MyMWUsIDB4MDBmNjMyMjYsIDB4ZmY4MjRiZmUsCisJMHhjYzg4NDZlMiwgMHg4Y2ZkZDhjMiwgMHhiMGQ3M2VmZiwgMHg5NDEzNzY5YSwgMHgzZmYyZmU3NywgMHg3NGM2MDI4NSwKKwkweDFmOGQ4Y2E1LCAweGY2NjI2OTBmLCAweGM2MzRjNmNlLCAweGU2NzViMDI2LCAweGQzMTg3MjRmLCAweDYzZDc1NzQwLAorCTB4NGUwOWZiMDcsIDB4ZDYxOTEzMTksIDB4MmQ3NWRmYzMsIDB4NThjN2RmZmUsIDB4OTRiZmZjM2MsIDB4ODM0Yzc4ZTUsCisJMHgxNDA5NTM2OSwgMHg1NWJlZmI0MiwgMHgxYTc3N2Y4MiwgMHgzZTIwZDc1NSwgMHhiZjFjOGRhYiwgMHg5NTEzNWE2OSwKKwkweGY4MmMzZTU3LCAweDU1NjMwMjBkLCAweDhiZTlmMzIyLCAweDU4N2RmYjE4LCAweGMxMWIwMTU0LCAweDJlOGYyNWQ4LAorCTB4MjE3MmM0NDcsIDB4MDQ4MzBlZGMsIDB4NDQzYThmZjgsIDB4MmM1ZDdlMGUsIDB4OWRhNWIxOGUsIDB4ZDI5YjFkODYsCisJMHg4NGFhZjEwNiwgMHhmZGYwMzVlZiwgMHgwYzFhNTYyYiwgMHgzYTNkNjRhYiwgMHgxZGYyMDNjNCwgMHg5ZWM2MThkYSwKKwkweDRiYTZiOGI3LCAweDhhNjBmZjkwLCAweGY2ODdhN2M2LCAweGVkOWZjOTk5LCAweDJkZWM2NDhjLCAweGU2MDY2YjhiLAorCTB4NzdkY2YyNWYsIDB4YzA3ZjFiMGMsIDB4N2VjNmNmNmMsIDB4ZTJiYTFiNjYsIDB4ZmRmZjQxMTcsIDB4OWRmNmI1YzcsCisJMHhlMWYzZjBkMiwgMHg2YzY3Mjk2ZSwgMHhkZmNhMGRkYywgMHgwMmVjOTczYywgMHhhMmZmY2EzYywgMHg5ZmZjZTE3NSwKKwkweGY4NTY0NWQwLCAweDQ5MmYwMWYzLCAweDFhNGE3OGUwLCAweGVhZGIzYTU1LCAweDdjZjg4MjVhLCAweDQ3YjllOTE5LAorCTB4ZTVmODUzMDMsIDB4YWNmNmFiNmQsIDB4YWU1NTIxODEsIDB4ODJlMTFhY2EsIDB4MjU4MmVlZWYsIDB4Y2Q4YzE5NjMsCisJMHg0MThlOTI2NSwgMHgzOGU2N2NmOSwgMHgyZDRkMDY5YSwgMHgxNzgyMmU2NCwgMHg2ZmE1MWYzMSwgMHhiMWFhYmJjNSwKKwkweDRmY2NjNTlkLCAweDIxYjI2YmIwLCAweDgyYjhkNDM1LCAweDc4Y2I3MmYxLCAweDk0N2M2NWI5LCAweGFiYWI3MWY0LAorCTB4MjBlNWUzOGUsIDB4YmE0YzRlYmMsIDB4YTVjNzFiMjMsIDB4NTU5NmY1ZTAsIDB4NTg3MzdhYTIsIDB4ZWZjNDc2ZmYsCisJMHgzZjE3ODNjYiwgMHhkMjg2MzIxMSwgMHgxNzQwNzdjNywgMHhlYjFlNjgyNiwgMHg3M2FjM2QzMSwgMHhmN2QxOGVhMywKKwkweDdlMDg4ZjhkLCAweDJlODU2YmE0LCAweGI3OTE5OTJhLCAweDBiZTQxOGZiLCAweGY0MDI3NDgxLCAweGQyZmM4NDUxLAorCTB4OTIzNzNhOWYsIDB4MDk0OWU0ZTgsIDB4OTI3MDdjMWEsIDB4MGIxZmE3ZDYsIDB4YjNmOGQ0ZTMsIDB4ODdkMTJkMDUsCisJMHgxZWZjMDA1ZSwgMHg0OGZhMDM4OCwgMHhlYTBlOWUxZiwgMHhlMDBkMjE5YSwgMHg2N2FmYTAxZiwgMHhhZmYzYmRiMCwKKwkweGNlMGU1ZGZmLCAweDQ5Y2RmYjk3LCAweGEzNTdjZTEyLCAweGU4MDFkNjA2LCAweGQ2YjZmN2Q4LCAweDk5OTI1YmJlLAorCTB4OTRlZDYwMTQsIDB4NmJhNDdlMzEsIDB4NzNlZGRhMjYsIDB4YjE3YWUwYzcsIDB4ZGZhODRlYTUsIDB4ZmIwZDY1YWQsCisJMHhmYmY2ODdmMywgMHhiNDE3YWUyYSwgMHgyYmE2YzI3ZiwgMHg5Y2JiNTNmNywgMHg5ZmYyOTVjZiwgMHg2M2M1ZmFlMiwKKwkweDVlYWRlYmNhLCAweDE2YWQ2OWY1LCAweGU4NzEzZmYwLCAweDEzMWE1ZTljLCAweDZmMGQxYzYyLCAweGUwMDY2NmU3LAorCTB4MzMzOGVlZWYsIDB4ZTQ0MjYxZGQsIDB4NDVlN2YyZmEsIDB4OTQ5ZmU2MGUsIDB4MWZhMTQ0ZTksIDB4YjVkMjNlYWQsCisJMHgxNzg4MTRjMywgMHhmOWU4MTdlZiwgMHhkMTM3NDRlNywgMHg0NDE5Y2Y0MCwgMHhlMGY4OWZjZiwgMHg2OTA2MzlkMywKKwkweGZiNDgyMmM0LCAweDIwYmE2YTYwLCAweGQ2NjBiZDc1LCAweDY3MmNkZDIzLCAweDk5YWI0YTc2LCAweDYwMDdkMjkzLAorCTB4OWQ3ZTkxZjksIDB4MzhmNGE3YmUsIDB4NzZiMjBmZWYsIDB4YmUyYmFmY2EsIDB4N2NmNDgyZDcsIDB4OGE5NWM2YmYsCisJMHhhNWViMmQ3MCwgMHgyZmViMzc3YywgMHgyZGZjYzFiMywgMHhkNDdiNWU2YywgMHg2ZmNmNTgwNiwgMHgwMjVhNmE3OSwKKwkweGZmM2NlZmNjLCAweGNlOThhM2IyLCAweGUyN2MyNWRkLCAweDdhM2Y4ODkzLCAweGMxM2VhZjEwLCAweGZhMTEzZWIzLAorCTB4OTJhNWZiYmYsIDB4M2Y5MDQ5ZjUsIDB4ODVkN2NiNDcsIDB4MTc1ZjJiZmQsIDB4OGYwNDdlNDUsIDB4OTdhMWY4MWIsCisJMHhlMzQxY2I4ZiwgMHhhYjk1NDZkMiwgMHgwOWYyYTFmOCwgMHg5ZGEwMTBlNiwgMHhmZjA2ODNmZSwgMHhmZTAwYjRjZSwKKwkweGRmZTg3ZTI4LCAweDg5OGU1MDkzLCAweDdhZTBmN2ZkLCAweGM0MzRkZmJiLCAweDA4M2Y3YWUwLCAweDI5YzcxYmUyLAorCTB4ODA2YjE4MzgsIDB4MmFkNjkwZmUsIDB4ODgyYTg4NjMsIDB4ZTE2MjFmZGUsIDB4YjlmN2FjNzYsIDB4YTc5ZmRmNGMsCisJMHhjZmVmYTIzMCwgMHg0MDYwZTYwNSwgMHhhNjc0MTdiZiwgMHg1YWU1MDE2NiwgMHgwNDU2Y2JhYSwgMHhiZTYwYWNmOCwKKwkweDZlZTUwNjI2LCAweDM4MDU0YmNkLCAweGQ3MjUyMzRmLCAweDFmZDc0NGE3LCAweGE2MTUzN2I1LCAweGE3ZjdmY2ExLAorCTB4ZjdmZjI4MGEsIDB4Njk4ZGVjMTksIDB4NWQ4NGZkYWEsIDB4ZTMyMTQwOGYsIDB4M2Y5ZjM4NjEsIDB4MGVjNzc2YzAsCisJMHgzZTI4NGJjNSwgMHgxNDQyOWZmNiwgMHhmMzNkMDY2MywgMHhiZjg4OGIxOSwgMHhlYmU0NDRkOSwgMHg1N2YxM2Q0NCwKKwkweDA2NmQ0ZTIzLCAweDNjOTRlM2Y2LCAweDlmZWRhMWE2LCAweGY5ZWRmMTkwLCAweGVmNzQ0YjRhLCAweDE2ZWNmMTgzLAorCTB4ZjdjM2Y1NDIsIDB4NjBmODQzMmIsIDB4MmMzZjI0M2YsIDB4YTdkMWZhOGMsIDB4ZmE1NjNlNzEsIDB4NjRiZWE2NjMsCisJMHg2YTc1ZDAyNywgMHg4Njk3NGI4NCwgMHhjNzE2YzE4MiwgMHhjYjk5OGJlNSwgMHg0ZmI0OWU5NywgMHhlNjdkNzEzMywKKwkweGM4YThkZTRjLCAweGRkOGY2YTY1LCAweDA5ZDFlNWM2LCAweGY4NDNlNDlkLCAweDFkOWE0OTQ0LCAweDljODBkNzI0LAorCTB4OTdmOGFiYmQsIDB4YmI4ZjExYTcsIDB4MmQyZWE2OGMsIDB4ZGQxNmVjYTQsIDB4N2Q5NGZhOWYsIDB4ZmY3MDdkMzAsCisJMHg3ZmQ5NGJiZCwgMHhlZmZiZTE2ZiwgMHhlZmI1OTkxYywgMHhmMWJhYmIxMiwgMHgzYWVjYzY3YiwgMHhmZDk3MmZjNCwKKwkweDZkOGY5OTVlLCAweGYyMmFkZmI4LCAweDBiN2VjODcxLCAweGY5YzVlYjAzLCAweDgzMmIyNTEzLCAweGM3YzBiNTc0LAorCTB4ZGMyNTNhYmYsIDB4MzZjNDdjOGYsIDB4ZjRmOGQyZTcsIDB4ZmUwY2ZjYjIsIDB4NThjMTVhZGUsIDB4MTNjNjUxYTYsCisJMHgxOTcwNGJmZSwgMHgyMGNlNjY1OSwgMHg1NjYzNTQ5YywgMHg5YjFlMjljMSwgMHgwNmM4ZmVhYSwgMHhlNjllNTU0OSwKKwkweDY3OTU1MWNiLCAweDcwNTVkYjM0LCAweGFhYjE0YjU2LCAweDg3MzZhOGZlLCAweDk3ZjVjZTBhLCAweGVkZTdlYWFiLAorCTB4MzFlMGFhNzUsIDB4ZmFhYTE1ZWQsIDB4YWE1YzNiNjMsIDB4MWFhZWMyZjIsIDB4MWViOGY5NTUsIDB4ZDA5ZTBhOGYsCisJMHhmZmFhYTBkYiwgMHhhYTdkYTc3NywgMHhjZDdkNDlmMiwgMHg5ZjI5ZjJhYSwgMHg1YmUwYThiNSwgMHhmNTU0ZGJmYiwKKwkweDU3ZWFiZjZmLCAweDdmYjA5Nzk1LCAweDM1NGY5NTU2LCAweGQzYzE1N2VlLCAweGVhYWJhZmNjLCAweDE2ZmI4MGJmLAorCTB4YjYxZGNmZjAsIDB4MGNmZTU1NmUsIDB4YmJlYWI4ZTksIDB4YWE0ZTczM2IsIDB4NzVlNDE3ZTAsIDB4MjcwZTJkZjYsCisJMHhlNzJkNjhiZSwgMHhmYjZjZDFmYiwgMHg1ODc2YWEwNywgMHhmZWJlNjhlNywgMHg3YjZmM2M2MSwgMHg1MTBiMWZjZiwKKwkweGY0ZDc2ZTRlLCAweDRhZGQyMWE3LCAweGYyMjI3MzVhLCAweGRjZjE2NjcxLCAweDJjNjY0MDQzLCAweDE0YWFiMWRiLAorCTB4Zjk0ZTViYzUsIDB4MWQzMDg3NTMsIDB4OGE1ZmRjZWQsIDB4NzE1ZjkyNmMsIDB4MDVhNjEwZjIsIDB4ZDBhNThiYWUsCisJMHg0NGQ3YjMxYywgMHhjOGI0YzYxZiwgMHg4YWQ1Mzg1MywgMHgzZGNjMzRhOCwgMHhkZjQ0ZTk4YywgMHg1NzI4YTlhYSwKKwkweDNmNWM3ODVmLCAweDJhMjhmOTFhLCAweDA3NGZhMTQ2LCAweDgyN2Q2N2QxLCAweDdlYjlmODg2LCAweGYyOGZjOWIxLAorCTB4MjRjNTMyYzcsIDB4OTYxMzkwMzIsIDB4YjFkNjVhMWYsIDB4OWE4YjRjMDIsIDB4MWFmNjZkMzEsIDB4ZmEwZjVmOTksCisJMHhiYTUxOTc4MCwgMHhmZTY2NmJjOSwgMHhhZjY3MjA2YywgMHg5M2ZhZTA4ZCwgMHg0M2E3OTVmNywgMHg0NGFiMjMzYiwKKwkweGU2OTlhYTMzLCAweDQ4MjU4ZjUxLCAweGU1ZjViZWQwLCAweDc2NWQ5Yzk2LCAweGIwZWRkNmM2LCAweDQyZTVkN2NmLAorCTB4YzU5ZTE5ZmYsIDB4NGUwMWEyM2IsIDB4MzAwNThlNjMsIDB4MjM5ODE2N2YsIDB4MjViMTk5MzYsIDB4ZmE3NmRmM2IsCisJMHg5N2MyODdmMiwgMHgyNDRkOWQzMywgMHg1Y2Y2YzQxNywgMHg3Njk0ZmZkNCwgMHg2ZTdlOTYzNywgMHhkZjIxOThkNywKKwkweDExZTc0YmY3LCAweGYxYWRmNzk4LCAweGMyMWRmNGUxLCAweGE3NWY5OTI1LCAweGI2MGI0NzVkLCAweGY2OWVmOTBiLAorCTB4NGNmYzdjMTAsIDB4OTc3ZmRmMWEsIDB4MGE3ZDczYTQsIDB4NjZlYjg0ODcsIDB4YWNjNmNiZTUsIDB4ODA4Y2E3YTAsCisJMHhhOTNhZGNiOSwgMHhmMGVhMGNlMSwgMHhhMDI3ZDlhMiwgMHhlMGQ3NjI3YywgMHg4OTJiOTA3YiwgMHhlMDgzMjk1OCwKKwkweDRlMDFjM2RiLCAweDZjNjI1ODQwLCAweGM3ZWI5NjdmLCAweGM1ZDVhZmQ4LCAweGZhMDBkOWQ4LCAweGMzNTFhODQ5LAorCTB4Y2Y5ZTYxNWIsIDB4YTNlMjBlNjYsIDB4ODlmMWFhNWIsIDB4OGZkZDA2MzAsIDB4ZjQzYjc2OWQsIDB4YzYwYWFkYjMsCisJMHgzZDU2ZjAwYiwgMHg3YTk0MzdkNywgMHhmNjhjMzRhMywgMHhmOGQzMmZmNywgMHhjZGFlY2U3ZSwgMHhmNDllYTNiNywKKwkweGU3OWUzY2E1LCAweDNlOGJmZGJjLCAweGViN2I0NGNlLCAweDM1ODlhNTJhLCAweGYyMDVjMTFlLCAweGI0ZTk1YWNkLAorCTB4YWU5ZWEwZmIsIDB4ODQyM2U2MTEsIDB4MzQ4YmYyZGUsIDB4MWRkN2JlOTEsIDB4YTA5MDQ0N2UsIDB4MTI2OWE3ZGUsCisJMHg3ZTk1ODljMSwgMHgwZDUyNzcxYSwgMHhiZjgwMWJiNCwgMHg2NjA5ZjQ0ZCwgMHhlNjNkYjdjOCwgMHg5YjNmMTAxMywKKwkweGYwNjc2OWQ5LCAweDg4NWEzMzFkLCAweDNjYzhkN2ZlLCAweGNiZjg2YjYxLCAweDBmNDE4ZmEyLCAweDc2OWQ3OWQzLAorCTB4MTNiYmE3YWMsIDB4MjcxZjMzZTgsIDB4Yjg2NjYzZDQsIDB4NDdlM2M5NGUsIDB4YTNlYjEwYjAsIDB4MGQzZTg2YTQsCisJMHg5ZjQwZGM3MywgMHhkNDdkNGE4ZiwgMHhkZGM1ZmI0MywgMHhlODBiMjkyNiwgMHhhNmM1ODVmYiwgMHhkYTIxMWQ4YSwKKwkweDlmOWU1NGZiLCAweGZlZWEzMTBkLCAweDFmM2U1YTJkLCAweDZjYmVkYzhhLCAweGYwYThlYmU2LCAweGE2Njg5YWYxLAorCTB4NTI2YmUzOTIsIDB4ODQ2ZjViYzYsIDB4YzhjZGI1YWYsIDB4NmVmODAxNWMsIDB4ZDBjYzdlODUsIDB4NTVhYmUxYmUsCisJMHhlODNmMWM2NiwgMHg0ZmVhNGVkMCwgMHhjNzY0ZjJlNCwgMHg2ZWM4NzI4ZiwgMHgyMWM3NWUwYSwgMHgzZjk0MDhmNCwKKwkweGEzZTkwOGEyLCAweDdjMDhkZmNmLCAweGRiZDJhODY4LCAweGZlYjI2ZjUxLCAweDdiODA5MzQzLCAweDExNmIyMjczLAorCTB4NTM1OGJlNTAsIDB4ZGM0NDdhY2EsIDB4YWU1NzQ0ZDcsIDB4NzkzZTg0MzMsIDB4ZDY1NGJhMzMsIDB4ODM5ZmQ5NGYsCisJMHgzZDc3NGJkNywgMHg5YzEyZmRlMywgMHgzMWQ1N2ZlZiwgMHgxZjU2YzdkNCwgMHgwNTcxOGY4ZiwgMHgzYTRjNTNkMCwKKwkweGQ2NjJjYmE3LCAweDk4ZmU0NWEyLCAweGJkMjlkYWNjLCAweDdhNTJmNTg1LCAweGQ0YTdlYjFiLCAweGE2MjJjY2MxLAorCTB4Njk0ZWNjYTUsIDB4M2E1MjczMTksIDB4MmQyODc5OWQsIDB4Y2U5NDJkNjcsIDB4Y2U5NGVkNjQsIDB4ODI5NGJkNjIsCisJMHg5M2E5NDMzZCwgMHg5YWVlYzk5OSwgMHhhNjM3ZmIwNywgMHhkMjkzOTgwYiwgMHhhNTBmMzFlZiwgMHg3ZTljZTk5OSwKKwkweGMxMGI1ODJiLCAweDRhNzZiMzc3LCAweDI0ZWY4MDNiLCAweDhjMDFmYTNkLCAweDljODI3Njk0LCAweDkwNGRmNGMzLAorCTB4Nzk3Njk4NzMsIDB4YTM2NTI2MjUsIDB4ZDI4NzIwMWYsIDB4YTUzYjVlMjMsIDB4OTRjNWJjYzcsIDB4NTQxZDc4ZjYsCisJMHgzOTZmNmRlZiwgMHg5ZDc4ZWZhNSwgMHg1NmYwOWU5NCwgMHg3NWViZGE1MCwgMHhkZTUzYmQ1MSwgMHhmNWRmNGExYSwKKwkweGNmN2QyODdhLCAweDY5ZTk0MGRiLCAweGRmZDI4ZmFmLCAweDFkMjk5Yjc5LCAweGM2N2UwN2E1LCAweDJiZTljZGY5LAorCTB4ZjUzZTdkNDQsIDB4MDI0M2JkMjMsIDB4ZTU5MWVjZjksIDB4ZTY4NzYxZDIsIDB4YjhmMWRjOTksIDB4NDA2NjFhNmUsCisJMHgyMzViMjgzYSwgMHg3MzU5ZmQyMCwgMHhhNDNmMGUzNCwgMHgwYjU2NzI5YiwgMHhlMWJhNDJmNywgMHgwY2RmZDcwNCwKKwkweDBmZDI0OGQ2LCAweDgyZjU2ZGFkLCAweDA4NzZlZDA0LCAweDU4MDhkYTdkLCAweGE5ZTllOWNiLCAweDlmMjA4ZDczLAorCTB4YmFkOTNhNGIsIDB4MTljMjNiMDgsIDB4ZWU4MTE5NGYsIDB4ZmQzY2U4NzYsIDB4NjRiY2EwM2IsIDB4MDhkNzM0YTcsCisJMHhjOGU0ZDY3YiwgMHg4ZmIxZmY1MywgMHhlOTNlNTRjMywgMHgwMzM0NmIwOCwgMHhmYjNkMmIzYywgMHhlMzgxMzhhOSwKKwkweDdiZWZjMjgxLCAweGFlZTY3MzNiLCAweDI1M2M0NGNkLCAweDM0YzVmM2MyLCAweGJmNTEyYzMwLCAweGZhNDRjNDdlLAorCTB4ZDlkYjYxNzUsIDB4OTNjMDBkNDIsIDB4Njg0NTRjMWEsIDB4ZWJkNDA2MTcsIDB4YWUxZmJhNDIsIDB4ZjJiOTcwNWUsCisJMHg5NjU1YjZkZCwgMHgwZDg3OWM0NiwgMHgwZTVhODA5ZiwgMHg3ZDE5YTk1OSwgMHhkNWYzYWI4NSwgMHg1ZWJlNmFlZCwKKwkweDgzN2I0Y2ZmLCAweDA5ZWIwM2ZlLCAweDdmNmY2ODM3LCAweDdkMzJhMzk2LCAweDNhN2VmZmMyLCAweGRkNmZhNjBmLAorCTB4NmJmNjhmZjUsIDB4OGU2NDBmYzgsIDB4NTc3NGZkYzEsIDB4ZmQzMzk3MzQsIDB4MDRlZTlmYTAsIDB4YzhjNTc3YmMsCisJMHgxYTRjYzZmMCwgMHg1YzQzY2ExNywgMHhkMjliMGRiNywgMHg3NzgwM2VmZCwgMHgxZjU3Mzk4NSwgMHhkNDdmZjJjNywKKwkweGQxNDI3N2Q4LCAweGE2ZDc3MGFlLCAweGM5MzM4MjVjLCAweGM2MjFiMTNmLCAweDhmOTMxMzkzLCAweDk3ZGYzY2ZhLAorCTB4MGQxZjkzNWEsIDB4YmZmODAyOTMsIDB4YWZjYjlkMzksIDB4ZTk1Y2I3YWQsIDB4NDQ3NjgxZGQsIDB4YzE2NTg2YjMsCisJMHg5NzliM2I3NywgMHg3NjgxY2M2ZiwgMHhmNDE5YmM3ZSwgMHhkYzQ3ODAwNywgMHgwYjMxYmQ1YSwgMHg2YTM3ZDNjYSwKKwkweDE5NjU2YTI2LCAweDc4ZmM3ODg3LCAweDRkOWVmNTczLCAweDhmMjU1ZmE4LCAweDc2ODZjOThlLCAweDk5Nzk2NDMzLAorCTB4Yjg1N2RiMWEsIDB4NTViY2U4MDYsIDB4OTVhN2I2YWYsIDB4N2U2NDlmZjQsIDB4Y2U2Njg2YTksIDB4OTU0ZDZjODIsCisJMHgzYTFkZjRlZCwgMHhkZmI4MTE1NiwgMHhlZmM2NGNmZCwgMHhkNTNjNTk1NywgMHg1N2ZkY2VkZCwgMHhmZWUxOTE4NiwKKwkweDI1ZmM2MDI3LCAweGMzYmZiOTIzLCAweGZlNDhjZWIyLCAweDdmZjI0YjBlLCAweGNhMDNiYzlkLCAweDc2MzRkYjJkLAorCTB4NmI0NGU5NTQsIDB4ZWExZDVhZWQsIDB4M2I1OThiZmIsIDB4ODEwZWUzZjIsIDB4ZTE0YmVmN2YsIDB4MGEyODIxN2EsCisJMHhlYzAzNzNlOSwgMHhkM2RlYWRmMiwgMHhmYzAzMzI4YiwgMHg5ZjBhYjY4NCwgMHhjOTdiZjY4MCwgMHgwZmExNWFjOCwKKwkweDA3ZTQ5ZmY3LCAweDJkZmJiNDA1LCAweDE1YzEyZTE1LCAweDg3ODFmNjg5LCAweGI5NjVjZmNhLCAweGY4MGU5MjdlLAorCTB4ZmJlMTJhZDksIDB4Yjk5MmZkNDAsIDB4YTE1ZDcwMTIsIDB4ZDI3NjhhZGYsIDB4NjA1MTU4ZjMsIDB4ZjhiM2E3N2YsCisJMHgzYjA3YWMzYywgMHg3NWQ1ZjQ5OSwgMHg3ODJiYzI3YSwgMHg5NzY1NGViZSwgMHg5NWY2YzAxZSwgMHhmZjJlMGM3NSwKKwkweGFiYjcwNjdlLCAweDVkMDEzZDc3LCAweGUyNGMxZjIwLCAweGRkODlmMzc2LCAweGNlM2ZhNDg5LCAweGEwNzcwZDY5LAorCTB4YTllMjc0ZmQsIDB4NmYwNDY1ZDEsIDB4M2Q0MGVjOTksIDB4YzllZWM0ZjIsIDB4YjM5ZDMxZDMsIDB4M2JkNTI2NjUsCisJMHhiNDFlYjAyMSwgMHhiOTZjZTc4NywgMHhkNGZjYzQ1YiwgMHhkYjBiYzAwYywgMHg3YTI3YTMzYiwgMHg0MWU1YjM5YywKKwkweGNiNDdmYmY5LCAweGUzNThiY2IwLCAweDkxZGEwOWZiLCAweDIyZmI4ZGM1LCAweDFjOWU0ZWQwLCAweGE2MTI0YWY5LAorCTB4ZjU3ZDM0MjcsIDB4NWRmZmQwZGQsIDB4ZGMyYmY2NjYsIDB4ZTMxYjlkOWUsIDB4ZmUxY2IxZmUsIDB4NzRhOWY3MzEsCisJMHhiZmQ3ZWExZCwgMHhmNWE3NGY0YiwgMHhjNDFjY2Y5YywgMHhlYzgzNTAwNywgMHhmNmY2NWJiYSwgMHg4YTRkMDYxZSwKKwkweDNmZGVkNmRkLCAweGU2NWNjYzE1LCAweGMxMWYzMGU4LCAweDVlY2JiNGI0LCAweGQ2NTdkMzg2LCAweGU5ODIzY2UzLAorCTB4MTk0ZjVlZjQsIDB4YTdlNTJmYWEsIDB4YmE2MDhlNWIsIDB4M2JmNWQ3MjQsIDB4ZmYxNzlmOWMsIDB4YmNhZjdiZTEsCisJMHhjN2M4ZjAwOCwgMHgwN2E4Y2RlYiwgMHgzN2QxM2U2NSwgMHhlYmY5Mjc2MywgMHgyMWY5MGM3NCwgMHg0NWE3OTI2YiwKKwkweDc0NmMwNDhiLCAweDc4N2NhMGM2LCAweDgzNTE2OWY2LCAweGFkMjFiOWZiLCAweGMzNjEwYzI1LCAweGI0MWFlOTdkLAorCTB4Yjc0NTc3MGIsIDB4YjNiOGQwZDQsIDB4ZTNjZTE5YzIsIDB4MjEwZmIwZGIsIDB4M2I0NTY0NWQsIDB4ODA5ZjkwNjMsCisJMHgzZTFkNjkyZiwgMHgxMGQzZTk5MywgMHg2MzQ3MzFlZCwgMHgxZmNmMTg3ZSwgMHhlMWNlMTdhOCwgMHg1YWY1MDNmMywKKwkweDI3ZWEwNGMyLCAweDEzZmIyMDQ2LCAweGJmZGMwNmQ0LCAweGRkZmVmMjZkLCAweDM4MDkzY2M2LCAweGNmNDhkNjFmLAorCTB4NjRlYmY0MGUsIDB4NjdmZTcwOTUsIDB4YjAyZTljOTEsIDB4ZmE0NGQzN2EsIDB4OTZjZDljODQsIDB4Yjg5ZGNmMTYsCisJMHhlODk3NTYwZSwgMHgzYmE0MGJlYiwgMHhmNDA3MDZkOCwgMHgxOTgyNzQ5MSwgMHgwNTViZDdkYSwgMHgyMTljODMwZSwKKwkweDdlODdmMGJjLCAweDQyYzk4YjBjLCAweGJmODI4ZDdhLCAweDBiZGEwMmI1LCAweDFjNzAzM2QwLCAweGRmODM0Y2YzLAorCTB4OWIxNzc0MjksIDB4NDIzNWM3YzEsIDB4NjVhY2JmYTYsIDB4ZGYwNTNkYmMsIDB4OWYyZTBjYjgsIDB4ODM0OTZmMDEsCisJMHg3YzY1NjhmOCwgMHgwMDlhMWM2MCwgMHhkMWVhMDI3YywgMHg2NmYwMDZmOCwgMHgwNWQyMWI3NiwgMHhhNzgxN2E0OCwKKwkweGM3MDMxMjRjLCAweDg0NzFhZDVmLCAweDdhNjQ1ZGExLCAweDRmZThmYmY1LCAweDAyMzk0Mjg5LCAweGY3NTNmZTc4LAorCTB4NjlmMjIzMjQsIDB4MzI3MjM4ZjAsIDB4NDZkZjA4ZDIsIDB4NmY1MTg3ZDAsIDB4ZmNlMmU5OWYsIDB4MTFlOTU4ZGIsCisJMHgxODQyM2VjOCwgMHgzYTJjOWZjNywgMHgzNTY4MWZkMCwgMHgwMTc0MTZhZCwgMHhmMzI2YjVlMywgMHhhNTY2N2E3ZCwKKwkweGNhZTUxYmE3LCAweDNiMDhlMmNjLCAweGFjOWRmN2QyLCAweGYzOTk5ZDdkLCAweGMwNGM5MWY3LCAweGY4MWIxNDZmLAorCTB4NDFjNGQ4OTksIDB4NGY0N2YwYmQsIDB4OTcxMjdiYmYsIDB4OTdiNTk5MzQsIDB4ZjlmZWUyZTQsIDB4NzBiM2ZkZjgsCisJMHgzYTNlYjZmZCwgMHg0ZmYxMDdiMywgMHgzYmFhNzljYywgMHg1ZTc0MWEwNiwgMHgxOTdkZDc5NCwgMHg2Y2E0ZWJmNywKKwkweDFjMGUzZjEzLCAweGUwMDc5MjQ3LCAweDhkNDRiZjQwLCAweDQxZTgxY2JhLCAweDY1NzQyYjA1LCAweDcxYTIxYTEzLAorCTB4ZTQ0NGQxYmYsIDB4N2E4MTljY2YsIDB4ZTQ4Njk0NGEsIDB4NjEyOWM4M2IsIDB4MzNmZDQ4NDEsIDB4ZjllNGFlODgsCisJMHhhZWU3ZDY1NywgMHgzNzVhNGM4YywgMHgwM2FmODlhYiwgMHgxNzFiYjdlYiwgMHg1NTgzY2E0NiwgMHg2ZGZhMDlkNiwKKwkweDAxMWYzNjA0LCAweGE2NThkZjc0LCAweGQ3NjgwYmY1LCAweGFjMjhmZDYyLCAweDkxOWRlMmNmLCAweDg3NjlkNzQzLAorCTB4MDMzOTlhNGUsIDB4MWFjM2Y0ZTUsIDB4NzQzNjZlZjMsIDB4N2VkYzgxNWUsIDB4YzNlZDdhNGIsIDB4ZjkwZTU0NzEsCisJMHg3ZGZjOTFhMiwgMHg0MzZhZjgwMSwgMHhiOGY1ZWFjMSwgMHhhYzZkZmQ1OSwgMHhiNDhjZWU2YiwgMHhjOTg5ZjlhMSwKKwkweDNlZTI2NjBiLCAweDY4Y2I1ODliLCAweDQ3Y2I4M2ZkLCAweDU3NWVhNjNkLCAweGEzYzczN2IyLCAweGJiZjk4OGZmLAorCTB4Y2U3YWMxYmUsIDB4ODY1NWRlNGMsIDB4YmFmMDdjZmEsIDB4MWE5Nzc0MmEsIDB4MTA1ZjdhMWIsIDB4YTY1ZjM5MzMsCisJMHg5NTRmZDg0NiwgMHg5MjIxNWU5MywgMHgxMTRjZTA5ZSwgMHhhMmVkMDNlMywgMHgxZjdjMTkwZCwgMHgxMzM1ZmRiYSwKKwkweDIzZWM0M2VkLCAweDVjYjcxZmEzLCAweDkzZWY1NzdiLCAweGE1MGViMGI5LCAweGFlNjgzNDU3LCAweDFjZWZhM2IwLAorCTB4NDg0Y2UxZmEsIDB4ZGRlYWZkYTcsIDB4ZjUwYWZmZDUsIDB4MWE2NTdkYTYsIDB4YjA2ZmY5ODcsIDB4MTBlODE5YmUsCisJMHg5ZDgwZjVmMSwgMHgyZmRhZjAwMSwgMHhhM2EwYjRmNiwgMHhkOTkyYjFhNCwgMHhmYTU1ZGY3MSwgMHhmM2Y3MjNkOSwKKwkweDQ5ZGY5ZDBiLCAweDY0NTczNWYyLCAweDgyMGU0OTNiLCAweDJmNDAxZTY1LCAweDdlODk2OTAwLCAweDU2NzMxOTc4LAorCTB4NjhkZDkwYjYsIDB4NTkwN2NjY2QsIDB4ZjZiZDZlOGQsIDB4ZmU1ZmI0MjUsIDB4ZWZkMGNmNDksIDB4ZDI0MmFmMzgsCisJMHhlN2Y4YzA5NSwgMHg2NWJhNGE1NSwgMHg1OTE3YzdlOCwgMHhmMzExZWEzOSwgMHgzZjk0ZWMyYiwgMHhmM2NlZDJiZiwKKwkweDQxN2YzYzhkLCAweDE3ZjI4Mzg1LCAweGJlNzgzYTU0LCAweDNlNjFmMjA5LCAweDdiZjg1NjE2LCAweDQyZWVkMGJkLAorCTB4NDFhNDhjNTMsIDB4OTNhNTc4M2YsIDB4NTAzNTVmOTcsIDB4MGY2MDNiZjksIDB4ODdjOTAyNjQsIDB4ZGU0OWY5ODcsCisJMHhlMWE2N2NiNywgMHhiODRmMTJmMSwgMHgwZDVjMDA1ZiwgMHgxMjNkNDU5MSwgMHgxYTdkZGZjZSwgMHg4NjI0MTY3YiwKKwkweDAxOTk5MTE0LCAweGU5YzJiNjdlLCAweGYzZjk0MmQ3LCAweDEzODA5ZmNjLCAweDZhZjU0NmY5LCAweGJmZTQzNjY3LAorCTB4NzE5YTJjOTEsIDB4YzAzODZmN2MsIDB4YWJmOWM2NmUsIDB4ZTlkZTY5MTUsIDB4MzUxYmYwMDcsIDB4ZDhjZjE0YzksCisJMHg3ZGFkZmIyMSwgMHg2N2U0OGMyYiwgMHhmYzg3NWQwNSwgMHhhMjQ1NmNhYywgMHhmMmYwYzdhYywgMHg3ZWNkY2I2ZCwKKwkweDBlNDBjN2Q0LCAweGRmZjYzYWQyLCAweDAwMWU5MjI3LCAweDFjZWRmMGYyLCAweGNhNWU4YmQ0LCAweDQ4NDk4N2I0LAorCTB4YjM3ZTZhYjcsIDB4YTEyZjJmNTQsIDB4MTk5OTJhZjYsIDB4OTU1OWYyZWQsIDB4OTdjNmJkYmMsIDB4ZWEwZDdlMzQsCisJMHgzMzc5YTY1NSwgMHhmNzFhMGU5MSwgMHhhZmRhM2IzMiwgMHgyYTlmNTZjZiwgMHg5Yjc4NDU4YiwgMHg4N2U1Y2VkZCwKKwkweDU2MzQyZTVhLCAweGUxMmUzOTZmLCAweDczMWEzYzc4LCAweDdlZTdkNTE2LCAweGU5NGY0NmFkLCAweGM4MzBhZDJlLAorCTB4ZDJkZWI0Y2YsIDB4MmExOGZjYTAsIDB4ZDgzZGVjNmYsIDB4YTk1NTQyNGUsIDB4YjNkNDEzN2QsIDB4OGZkMTM4YzAsCisJMHhmM2NmNGRiZCwgMHgxNDg4Zjc3ZCwgMHg4YjU0YjA2NywgMHg0MTgyZTY1ZCwgMHhhNzkxNGVmZSwgMHgxODdjODJkMCwKKwkweGM1NDVmMjQ1LCAweDUyNWZhMzVmLCAweGY5OTIzZmMzLCAweGM0NWRmODE0LCAweDMxNzZmOTcxLCAweDVkOTVjOTNiLAorCTB4MjcyMDdhZWEsIDB4NTJhZjI4MzUsIDB4NjdmOWQ0ZGEsIDB4MmZjNTA0YjIsIDB4ZTA4NzlhYTUsIDB4Yjg3YWI2NzksCisJMHhlNzFlMGJkYywgMHhjMmJhYjhlMCwgMHgzNGI4ZDE0NiwgMHhkNzI4NWM3YywgMHg3NGQ3M2YyMCwgMHgyYjczZjI4OCwKKwkweGExMjRiYjQ1LCAweDg1M2Y2YmJjLCAweDkyZjUxZmUzLCAweDllMDBiYWM4LCAweDEzMzQ1ZDU1LCAweDY2ZDY2OWU5LAorCTB4NjY0M2I5MGQsIDB4MGI5MjVlYjMsIDB4ZTJiNzFiMzcsIDB4NjcxZTA4ZGYsIDB4NjQzNmY4ZjAsIDB4MWNkZjY5NjgsCisJMHgxYmQ3MDdkMCwgMHg3ZDZjMWY0OSwgMHhiOGMxYTRjNCwgMHhlMTViZTgyMiwgMHg5NzM4NTdlOCwgMHgwOTllMWE1NSwKKwkweDUzMjIzMGYzLCAweDZiYWZkN2Q2LCAweDM0NjkzY2I5LCAweGFjZWE5ZDExLCAweGZhMDRlNThmLCAweGE1ZDE4NDFmLAorCTB4ZWViZWIwMjMsIDB4NzJiY2VjN2EsIDB4NjhlOTFiOGEsIDB4YWM3MmMxZGMsIDB4OTM2Mzk2NTgsIDB4MmE3YzYwZmEsCisJMHg5MzM4NzNmZiwgMHhkNmY3ZTYwMiwgMHg3YzE1MThmZSwgMHg1NTQ0ZDVmYiwgMHgyZTEwMTJmZCwgMHg4ZDUzZTU4MSwKKwkweDY5ZjJhYTc5LCAweGY4MmE3MWU2LCAweDU1MTRkYjBlLCAweDU0ZDIxOWZkLCAweGNlNjc3YzE1LCAweGIzZmFhYTlkLAorCTB4ZjA1NWYzZWQsIDB4NTQ0YmM1NWQsIDB4ZWUzYWU3ZjUsIDB4MmZjZjk1NTUsIDB4YmU1NTQ4N2YsIDB4MDU0NmI5ZDAsCisJMHg3YmY4YWEyZiwgMHhhZWM1ZmQ1NSwgMHg5MmY5NTU0NiwgMHhlNTU1Mjc5YSwgMHg5MjkzZjZjMSwgMHgzZjcyNjY5NiwKKwkweGU3OWI1NmNmLCAweDhiZTQ4M2E0LCAweDBlNDY3MDRiLCAweDE0YTk2N2FkLCAweDNkZDcwM2ZiLCAweDUzZWI4MjJhLAorCTB4ZTUxYWY1YzEsIDB4ZTA0MTc4ZjUsIDB4NDhmZWIxZmQsIDB4ZTI5ZGYyMGQsIDB4OTFlZDYzN2YsIDB4ZDc1Y2ZmMmEsCisJMHgzZWM2YzllNCwgMHhlYzcyZmExMywgMHhiMmRkMjNlZiwgMHhjNTFmZGMxMywgMHhjNTNiZmNmYywgMHgwNGZkZDU3ZiwKKwkweDU2ZjY4M2Q0LCAweDcxNWJhNjQ3LCAweGFiYmY0M2JmLCAweGY5ZmQwZjRiLCAweGI3YmZlNDM1LCAweGI0MGJkNzM2LAorCTB4ZTdhZTZlMGYsIDB4N2FhYjk1N2UsIDB4YzAwZDhhZTYsIDB4N2VmMzg1ODMsIDB4ODI4ZTc4ZTUsIDB4NzA0NDczMjcsCisJMHhjZjE4NjBmZiwgMHg5NWZiMjZkZiwgMHg1MmJmNDM5ZSwgMHhiMDNmNjMzNiwgMHgxNzc4N2UyOCwgMHhhYzUwOWJiNSwKKwkweDQ2N2ZhMWY3LCAweDdhMDhmNmE4LCAweDY2MmU1Yjk0LCAweDA3Mjg0ODM2LCAweDk3ZmY1Mzk3LCAweDU4MjNlYzJiLAorCTB4ZDI1Njc5ODgsIDB4Mzk4ZGFmNTYsIDB4YmQ1YjdkYTAsIDB4YzYxZWFkNmYsIDB4NjkzOTk3NTYsIDB4YmNkMGIzY2IsCisJMHgxZmM4YzNjZCwgMHg5NGU2NjhmMywgMHhlNzgxNmIyZCwgMHhhMjUzMjFmZiwgMHhmOTEwNDk3NSwgMHhmNzVmM2YzYywKKwkweGQwM2RiOWM2LCAweGE1OTU2YjVmLCAweDcwNmFlNTA4LCAweGYzYmI5Mjc5LCAweDk0MWJiMWUyLCAweGQ1ZjJiZjNmLAorCTB4ZDFiZmVlMGYsIDB4NjcxZDc1ZjcsIDB4ODdjYTAyOWEsIDB4MjQ1NjhiZjUsIDB4MWQwMDQ3MzIsIDB4N2VkMDg2NDgsCisJMHg3NGM4MWZmOSwgMHgyN2FjOWVlNSwgMHg1YTMzZDYzZiwgMHhjZmM4OTNkNywgMHhkN2ZmMjYxNywgMHhkZGYwYmRjNCwKKwkweDNkY2FlOTc5LCAweGZlNDNhN2E4LCAweGVhMWYzMDBmLCAweGNmOWViY2QxLCAweDI5ZTc0NGJjLCAweGJmNDBmMzUyLAorCTB4MmMzYmZkNDcsIDB4OTQxZWRkMzQsIDB4OTVhZDE3ZGIsIDB4NWEwN2U4ZmQsIDB4ZDA5N2E5MWQsIDB4N2UzMjRmY2UsCisJMHgwZWVhN2U0NiwgMHg4M2FiYjcxZCwgMHgwN2U3ZjdlZCwgMHhiMjc2ZWRlYywgMHhlZGNiZjdiZiwgMHhhZDUzOTZlYywKKwkweDhjY2Y3Zjk5LCAweGU0NWEyNjNlLCAweGY5ODg0MGY4LCAweDA5YjU0NmQwLCAweGFiMTJhZjI4LCAweGY5MDI0ZmM1LAorCTB4NGY1MjNiYTIsIDB4NDk4YjA0N2UsIDB4NmE5ODNiZjYsIDB4YzUwMTdlNTQsIDB4NzkxZGQwNmYsIDB4NmY3NDgwYmYsCisJMHg3ZTQxNWFlOSwgMHg2MDE3ZjQ3YSwgMHg3NWU1MDc3YiwgMHgyNDE3ZjYwOSwgMHhlOGI0ZmYxOSwgMHhiNTFiZDhlMywKKwkweDIzZjIwNmNmLCAweDA0ZmQxMDg0LCAweDI3ZjhhMWUxLCAweGEzZjFmYjgyLCAweGNjZmI4MTNlLCAweDI3ZDI3MGNhLAorCTB4Mzk3ZGM3ODIsIDB4NjY1MGU0YjMsIDB4ZmY0OGYyM2MsIDB4N2U1MDNiYzksIDB4N2VkMWQyOWYsIDB4ODRiZDFjMzgsCisJMHgxZmNjZTE0OSwgMHgyNjZmN2VkMCwgMHg3MjIzZWZiNywgMHg5MWY5NTQ2MiwgMHgwZmU2NDRmNiwgMHg2NGIzNWZmNCwKKwkweDMyMTEyN2YzLCAweDQ4Y2M1YjBjLCAweDUxYzZkZjdkLCAweGJjZGJkZmQ4LCAweGJiM2ExM2JmLCAweGQ4NDFmNDhkLAorCTB4N2JmZWQwZjYsIDB4ZWVlN2U2NGYsIDB4YWI2OTQ2NWMsIDB4MDFiNzk3NmMsIDB4OWNmYTYzMWYsIDB4ZDlmYTRjZDcsCisJMHg4NDNmZTAzNiwgMHg0YTI1N2JiNywgMHg0YTFjZGVmZCwgMHg1NGVkN2E3NywgMHg0YzViY2JiZSwgMHg4M2FmMWVmMCwKKwkweDcyZGViZGUwLCAweDlkNzlmNzRhLCAweGI3OTJmZjk0LCAweDdhOWZlMDgyLCAweDdiYjY5NDVkLCAweDE1ZmYyODZiLAorCTB4MDNlMDg3YWYsIDB4NWY4MjA2ZGUsIDB4NDQ1MDdkNDUsIDB4YTUzMzc1M2YsIDB4YTg1Yjc4NmYsIDB4NDZkYmQzYmMsCisJMHgzZjVlOWJmMCwgMHhiZGRlNWRhNSwgMHhkYmM4N2Y5NCwgMHg2ZjExZjA0ZSwgMHhiY2M3YzEwNywgMHg3OGY3MDQ1ZCwKKwkweGRiN2QyODdiLCAweGVmZjk0YmRiLCAweGRjMTM0Zjc4LCAweGIxOTM4ZjJiLCAweGZhMmY1ZWU2LCAweDg0YTI1YzJiLAorCTB4YWViM2RkZmEsIDB4ZDdlYTMzNmEsIDB4MzMxYTY1YjYsIDB4OTczNmYzOGEsIDB4MzlmYTA1NjYsIDB4NzhmMjU1YjYsCisJMHg4Njk1NmQ5ZiwgMHg4N2EwNDBmYywgMHhiMzlmNTFmYSwgMHhmOGZhN2IyZCwgMHg0MDVmMmEzNCwgMHg0OWIxNWJlNSwKKwkweGFiYWM0YTMwLCAweDU2Y2FmZWI4LCAweDE1OWVhOWVhLCAweDc3YzEwMjBmLCAweGZkMmI2YWRiLCAweGIyNWI4MDVhLAorCTB4YmFkY2E5YzMsIDB4ZWRiYjI0NGEsIDB4M2EyNzhkNzksIDB4MjQ1ZGViOWIsIDB4YWUzYWFkYmYsIDB4MTA3NDI4M2YsCisJMHgyMmU5ZmIyMSwgMHg5NzRhNDRiMiwgMHhhM2ZjNzM2NSwgMHgyM2VmNDIzMiwgMHhmYzRhNTkxOSwgMHhjNzA3YjlhNCwKKwkweGYxODJhYjY3LCAweGY1NTViZTIxLCAweDVhNWY4YzQ2LCAweDQ5ZjE4M2VmLCAweDNhYWUzZmE0LCAweGMzMjQ3ODA0LAorCTB4YzA3ZjExNzgsIDB4NmNjMmZjODcsIDB4YWQ5N2Q3MTksIDB4YWYwOGViNTUsIDB4OTRmMzY1ZTQsIDB4ZGEzNDY3NzgsCisJMHhmYTllNmRlOSwgMHhhNTZmODRiOSwgMHgzNmNkN2U0OCwgMHhmYmU4YTFkNywgMHhlN2NhNGU1MCwgMHhlMWYxYWM3YywKKwkweDUwZmU3ZjRlLCAweGYwODIzMjdjLCAweGRkYjhjNmRmLCAweGQyZmEwYzkwLCAweDAwZTMxMGZlLCAweGM3YTk0NzhiLAorCTB4MTk4Zjc4ZmQsIDB4MjZmMWZhNDMsIDB4YjI2MjdhY2IsIDB4M2Q4ZmY5YzAsIDB4NmRmZjEyMmMsIDB4YzFmN2EwNjcsCisJMHg3ZTgxY2Y3NywgMHg1MDM5NDNlNywgMHhmYTE1NmZiYSwgMHg3MmNkMWVhYiwgMHgzYzAyY2M0ZCwgMHgzZjhkMjQ3ZSwKKwkweDUzMWMwMjI0LCAweGFmNGZkYmNlLCAweDFlYTBmNzE3LCAweGFlN2RlYjBkLCAweDNlMzdmMjA5LCAweGI2ODlkOWI4LAorCTB4Njk2NmVjNzEsIDB4ZGI1YmIyMmQsIDB4ZDAxMzU3YjIsIDB4YTgyYzk1ZmYsIDB4Y2I0OTQ3ZDcsIDB4M2JiNjNjNjUsCisJMHhkNWNmN2I3OCwgMHhiNjRmZTQ4YiwgMHg3NjkwM2FhZSwgMHg4NjViZjc4NCwgMHhmYThlMjZmZCwgMHg2MWJhMTg3ZCwKKwkweDFhNDgxNjMyLCAweDU1YzkxOTE0LCAweDJmZWM0NWUyLCAweGU1Y2RhMWVjLCAweDY2ZmM1ZmQ4LCAweDIxNWZkMjg3LAorCTB4ZTc3NWY3ZjYsIDB4NjVlM2U0NjksIDB4YmMwODU3NTYsIDB4MzcyNzkzODYsIDB4YjM4YjIzOTMsIDB4OGU0OGUzMjIsCisJMHg5NDI0YjEyNCwgMHhiOGViY2YyMywgMHhlNDlkZjJkYywgMHg4NjFkMjRmYSwgMHgxZmI0MzQ5OSwgMHhjNGFlN2UyNSwKKwkweGU4ZTM4M2QzLCAweDI0M2QzMjM1LCAweDYxYzc0MjE5LCAweGZkZTgwZDU3LCAweGRkYjdhYTNlLCAweGU3NDljOWIxLAorCTB4MGIzZTMwNGIsIDB4NmM3NWFiNDUsIDB4ZWFmM2FlMDUsIDB4ZGFmMzcwOTIsIDB4YTRhMGY0MTAsIDB4MDE4ZTUwNWIsCisJMHg0NjhiZGZkZiwgMHhiOWIzYjUyMywgMHhlMWEzYjc5YywgMHg1NmNhZGNlZCwgMHgzMjYyNWMxMSwgMHg2YmM4NDJmYiwKKwkweDZlNWE3ZDI1LCAweDRlMmM4MWU3LCAweGJlMGY0OWI3LCAweGFlMThmMWI0LCAweDNhM2FkYmVmLCAweGM2OWNmNDEzLAorCTB4MDRlZDExYmYsIDB4YzkyZDA5ZGYsIDB4ZmI2ZDQ0ZDcsIDB4NzgwMTNkOGUsIDB4NzllM2NiMzUsIDB4YjVjZmVmNGUsCisJMHg3YjQwZmYyMywgMHg5MTU3MjhmOSwgMHg3ZmM5ZjI1ZiwgMHhjYzA1NjZjMSwgMHg1YWRkZjJiYiwgMHhhM2ZkOGZkOSwKKwkweDI5YTIxYjZiLCAweDJlYjU1Y2JlLCAweDM2YTNmNTBjLCAweGIwN2EyNDY2LCAweDg1ZDEzY2VhLCAweDQ1NjBmNDAxLAorCTB4MWY0MTBjYmEsIDB4NGFmNGIyZmIsIDB4MzI1NGQ1M2MsIDB4N2MzMmUzMTEsIDB4NzI4YTllNWYsIDB4NTgzZWYwMDksCisJMHhlMWZiNDUxZCwgMHhkZWVmNjVkNCwgMHg1YmUwMTYzOSwgMHhkNDc2ODhhZSwgMHhlNWFiOWVjYiwgMHhmZDI3MTNlNywKKwkweDI2ZTc0MzUxLCAweGRiOWM3Y2RlLCAweGI3ZmRiNzdkLCAweDdiZjQxZWIyLCAweGIzZTljODI3LCAweDdhNDFlNzY4LAorCTB4NzdiMzMzNGIsIDB4NTJkY2JhYzEsIDB4Y2RmZjIyNmQsIDB4YjNjNTU3YWQsIDB4YjkxYTc2ODEsIDB4N2RhM2M3YTQsCisJMHg1MzM1ZmRjMSwgMHg4MDNjYTFmYSwgMHhhNjdkMjZmZSwgMHhhYTMzMGZhZSwgMHhhMTIzM2Q0NSwgMHhhYjZmOWQ0ZiwKKwkweDFhNjY3MDNhLCAweGNiNTZkM2Y0LCAweGY2YmI2ZTNmLCAweDdkODQ3MWZlLCAweDkzZjIxYWY1LCAweGY0MjlmNTAwLAorCTB4NGRmZTQwOTMsIDB4ZTc4MDk3ZDEsIDB4MTkxYTM3MTYsIDB4MzJlYjczYzksIDB4NDFlNTE5YTMsIDB4ZTQ5YzI1YjcsCisJMHgxMzYyZGI1ZiwgMHgzMjFiYTFlOSwgMHg5ZWExODc1NywgMHg4ZmFhYTg2YywgMHhkZWE0NzRjNiwgMHhhNzdkMDNiNywKKwkweDdkZmZiYmRkLCAweGU0ODEyZDllLCAweDgxN2YzZjJkLCAweGZhMGM1OTg0LCAweGFlN2FiZGMwLCAweGI2ZmFmOGU0LAorCTB4Nzk0NGNiNGMsIDB4YzNmMmExYTksIDB4OGI3ZGZmYmIsIDB4YWMwNzdkMGYsIDB4MzQ5MGYwODUsIDB4N2UwZjkxMmMsCisJMHhlMjliYmUwMCwgMHgyZmRmMDJkNCwgMHg0NDRlNjc0MCwgMHhhYmFlNzRmOCwgMHg0MjQzZTUwNywgMHg4YjFiYWY5YywKKwkweDU2Y2U5YWI2LCAweGNhZTJmOWQyLCAweDVkMzNlMjM4LCAweDMxZTk4N2I1LCAweDE4YzhiMmJmLCAweDlmMGFlN2M4LAorCTB4ZmZmY2I1ZmMsIDB4YmJlNzFjYjQsIDB4NTliODFjOTksIDB4ZjdlMzM3YmIsIDB4YmU3M2E1OWYsIDB4MzY5ZWNlMTksCisJMHgxNTRmMjMwYywgMHg5YWNmMThmYiwgMHg0YjZjOGE2MywgMHg3ZDU5ZWFmYiwgMHhmNmVhZmQ0OCwgMHhjNTY3Y2U2YywKKwkweDY0M2U3ZTdhLCAweDcyZjRjNTRlLCAweGZhZjhjMzhhLCAweDk2YzczYzQ0LCAweGE5ZjljZDkzLCAweDcxNDkxMmNkLAorCTB4ZDY3NGI2ZTIsIDB4ZGYwMzcxODUsIDB4ZjdmNzBkNzIsIDB4ZGFmZmYxYzQsIDB4M2ZjOWQzMmEsIDB4YTI3ODJhZDQsCisJMHgzZTc4MTk3ZCwgMHhlYjg2OTVjMiwgMHgxNDczMDZkNywgMHhhNmI3ZmQwOSwgMHhmY2NlYjk3MiwgMHhhYmM2MzMxZSwKKwkweDQwOWE5ZGExLCAweGYzZGVjMWZjLCAweDkxOThlOWE5LCAweDBiZmU0YzNlLCAweGE0OWVmMTJkLCAweGEzYjdmMDBmLAorCTB4MTdmZDFjNWYsIDB4ZGFkZGRmYzEsIDB4YmY2Zjg2YWYsIDB4OTg0Yjg2YWEsIDB4MzU0ZjA1NGUsIDB4NjY2OWUxYWEsCisJMHhlNmM5NmMzNSwgMHgzNjFkZmE3YSwgMHg0OTBjZmU3NSwgMHgxY2E3MjcwZCwgMHg3M2YwZDMwOSwgMHg3ZjAxYTZlZCwKKwkweGJiZjA0NGIzLCAweGEwN2UwMTk5LCAweDAxNzY5YTBkLCAweGFmYTUyNWU3LCAweGFkYjJmYzk2LCAweDkzZGZkY2E5LAorCTB4NzNmNmFmNWMsIDB4YjU5NmIyMjQsIDB4NmRmOTAyMzEsIDB4ZmNiNmY5NTQsIDB4NzNmYTAyNTUsIDB4N2NlYWQ1NmMsCisJMHg4YzE1MDc5OCwgMHhiZmY0OGFjYiwgMHg5Zjk1ZDcyNCwgMHgwMmU5NzE4ZCwgMHg0YjNhZWU3ZSwgMHhjNWNkZTllYiwKKwkweDIzOGI2ODc1LCAweGNmOTM0YTNlLCAweDFmZGQwZDA1LCAweDk1YjhkMGI3LCAweDdjMGY5MDc2LCAweGZhNDVlMzAxLAorCTB4ZTYyZjg0MGYsIDB4Yzc2NzI2YmEsIDB4MDVmMDNlNzMsIDB4N2RmOTk3ZWUsIDB4YTUwM2U0M2EsIDB4NDFmOGUxYmYsCisJMHgzOTYyYzdlMSwgMHhhYjljYTI2ZSwgMHhhNWI3MjJiOSwgMHg5N2E5YWI5YywgMHgwNDc1YzdjZiwgMHg5MmI5Yzc5ZCwKKwkweDgxZTc0NjVjLCAweDA5YWVmNGFlLCAweGM4NzdjNTBmLCAweGNlNmNiZTY3LCAweDk0NmU5ODc3LCAweGRmMjBkN2NmLAorCTB4ZWY5Y2Y0ZjksIDB4ZDVmMGRmMzAsIDB4ZmQyODY3MmEsIDB4YWZiY2JjZjAsIDB4Y2MzN2I0M2MsIDB4ZjhjMDcxZmMsCisJMHhhYjQ3YjY1NiwgMHg4MjQ3Nzc2MCwgMHhkM2JjZjAzOSwgMHg3NDBmZjg0MywgMHgzYTMzMzdiYSwgMHgwZjJiNWE0NywKKwkweGJmMzM4YmU3LCAweGU5MDhkM2RiLCAweDBiOTc1YTViLCAweGQ2NjU2N2Q3LCAweDMzOGYzZDU5LCAweGZlNTFlYmY1LAorCTB4ZGZmNzk3OWUsIDB4MzhkZDgyMGQsIDB4ZGI5NGMwNWEsIDB4YmI2NjhkYTUsIDB4Y2NiZGZkMTEsIDB4NTdmMmExOWYsCisJMHhkNTg3N2UyOCwgMHgzMWFjZDIyYiwgMHgwMTg4ZmY4MCwgMHg0Y2QzODIzZiwgMHgzM2UzNGRlNywgMHgzNTExOGZjOSwKKwkweDJiMzc3MWQ1LCAweGNjZjczYzA0LCAweGEyMDQ2Zjk4LCAweDU1NGU4NWRjLCAweDY1OGZjNzkwLCAweDk3ZDBmZDk3LAorCTB4MDM1ZTM4M2MsIDB4Y2UwMmFiZmEsIDB4MGY0NDE5MjMsIDB4MzU3M2I5MjMsIDB4ZTcwMTQ5OTUsIDB4ZmY2NTViY2EsCisJMHg5YjFmMDBjNSwgMHg3ZjYwOTc5NiwgMHg3ODk2Y2MzZiwgMHhkNjc5ODYzYywgMHhkYTlmZmY3MiwgMHg2YWI4NjY1ZiwKKwkweGQ4MzNiNTUzLCAweGRmYWFiMjdlLCAweDcyMmZkOTU2LCAweGZlZDVmNmYzLCAweGY0ZDVjMzM3LCAweDBlY2ZkYTYxLAorCTB4YjIxY2RmNmEsIDB4ZDU3NmMxZmQsIDB4MTFhZmJjN2UsIDB4M2U0MzZmMWYsIDB4YjVmZmNlMTgsIDB4MWJhNzk2NWYsCisJMHhmNDVlOWU2YywgMHhkODE4ZTk3ZiwgMHgwNjA3MTQ5NSwgMHg2YTg4OThmYSwgMHhjMzY5ZmYyMywgMHg1ZDUzNzlmOSwKKwkweGE2MGZkYWIyLCAweDFmOTI3ZTYzLCAweDkwZDY0N2NmLCAweDNlNjA0OGZjLCAweDk4NTlkZjhhLCAweDQ3ZDdmMjg3LAorCTB4YmJmMWU3NGQsIDB4MTM3MWI5NjAsIDB4ODc5OGMxNzksIDB4ZmQwMGRlYTEsIDB4M2Y1N2YyYTksIDB4NDZkM2Y3YzIsCisJMHgzYzQyZWVjMSwgMHhmZmYzYzc4MywgMHg4OWFiZGQ4YSwgMHhmYTRiZGYxYywgMHg2NGI4NGE3MywgMHhkYmRlODFiOCwKKwkweGUzMjU3NWVhLCAweDNkYzIxYmY3LCAweGZlZWIxODM1LCAweDc2MmViYjNjLCAweDFiM2RlODNkLCAweDdjMDhjNjMwLAorCTB4NzFiYjM1NzYsIDB4ZmI4NGNmYmUsIDB4ZjU4ZmE3MjQsIDB4MjdhMjFhNzEsIDB4MWQ5NmRkY2IsIDB4YjI3YTAwZGEsCisJMHhhODY5NWRlOCwgMHhmMjM0NWFmNywgMHhhMWZjMmYzOSwgMHg2NWJkNmNiZiwgMHhmZDEwYTZlNywgMHgwMjliZmEyYiwKKwkweDhmMDAyYjViLCAweDk1NmRiYTAwLCAweGZlODFlNmY1LCAweGQwZWUyNDk2LCAweDMxNjNiNDA2LCAweDNmYTkwYWI4LAorCTB4ZDJhMzVjZTUsIDB4ZWIzN2QzNWYsIDB4ZjdlY2FiNmYsIDB4ZGViM2ZhNTIsIDB4NTU5ZjFlYTMsIDB4NTlmMWExZWYsCisJMHhlOTQ3ZmRlNSwgMHgyZjhlMmI2ZiwgMHhiNGRkNWYwNCwgMHgxZThlZDkzZiwgMHg3YWE5NmZlOCwgMHg4NzgzNTY3YywKKwkweDcyZDU2N2M2LCAweDdmNDBlMWZmLCAweGJmYWNkZjRkLCAweDkzMWVmOTM2LCAweGUxZDNlNjRkLCAweDBlMzdmZGNlLAorCTB4MWE3NmFiOWMsIDB4MjliNGFlNTEsIDB4N2Y3OTQwZmUsIDB4YmZiNDE0YmIsIDB4MzdmNzk2YWQsIDB4NzE0YmZiZTUsCisJMHhiZGRmZTRlOSwgMHgxOGRmMzNkNCwgMHhmZGMzNWY2YSwgMHgyNDdhYzk4YywgMHgyNjQ4ZjU5MywgMHhjZjA4OTFlYiwKKwkweDNlYTY3YTk5LCAweGYwYjBlODFlLCAweDIyZjliNmM1LCAweDFlNzNlM2VjLCAweDE1M2UzMzNhLCAweGY2MmYxOWUwLAorCTB4NWY2MTE3Y2YsIDB4OTllMmYzOWEsIDB4YzlmMDQ5MDMsIDB4Y2NiZTJmY2IsIDB4ZTY3ODdmY2IsIDB4OWI5NDMyNGEsCisJMHgyZmNkZWY3YywgMHg5NjJhMzgwMywgMHhkZTBhYzdlZiwgMHg4ZGI3YmY0YSwgMHhiYmEzN2FlMiwgMHhiZmVlNzNlMSwKKwkweGZiOGFmOTA0LCAweDg3YWE2MzU2LCAweDQyZjE3ZmExLCAweDMyZDQ3ZjcyLCAweGU5NGVlZmE4LCAweDMxMGYyY2I3LAorCTB4NmVlYTRhMmYsIDB4NDY3ZTRmMzgsIDB4ZmYyODc5MTQsIDB4NDBiZmUxZTYsIDB4ZWU1M2NmYjQsIDB4ZWZhYjk0NjcsCisJMHg2ZDQ1NDQ2NywgMHg4YzJmZmQyMiwgMHhlZjI4Y2RmOSwgMHhiYTBlOGMyMiwgMHgyOGQ2Zjg0ZiwgMHg2NDJjMWZiZSwKKwkweDM3NmUwYWY2LCAweDM5ZjI1OTQ4LCAweDMxY2ZiYTBkLCAweGQ3NmU1OGJmLCAweGIxY2ZjYjdjLCAweGIxYzZhMTdjLAorCTB4ZGZkOWVkMWUsIDB4NDc4YWFhNGUsIDB4MTczOTU4ZjUsIDB4N2Y3ODM3OTcsIDB4MWJmNWQ3NzIsIDB4YmUwZTFmOWMsCisJMHgyM2U3MzkzZiwgMHgyM2MyZWI4MSwgMHgzYmE1YmZiOCwgMHhiOWY3ZTI1NywgMHhhODg2ZmMwMiwgMHg5ZjM3MGVmNywKKwkweDdkYjhhM2I1LCAweDBlOWYzODNmLCAweDBlMzE5ZjNlLCAweGZlZTY5ZjNlLCAweGZlYjBiNWE4LCAweGNiN2VlOGVlLAorCTB4NWQ5ZmM0MTMsIDB4Yzg2YmU3MjEsIDB4NWZjZDA2YmMsIDB4ZDhhNjI4ZmQsIDB4YjdhNDVhNzksIDB4MzJiN2NkOWIsCisJMHhjMWY5Y2FhZiwgMHhhMmNhNDE0NiwgMHg3OTRmZWFmZCwgMHgzMTgzZmQyYSwgMHg4ZTJhMTRiYiwgMHhiODE5ZjQ4MywKKwkweDRlNmRlYWJmLCAweDVkMTlmZTg2LCAweGNmMDczZDljLCAweDQ1ZmUzNzk1LCAweGRlNWNmMjFiLCAweGQ2M2U3OTZlLAorCTB4YjlkMzg1NDYsIDB4M2QyOGM2Y2UsIDB4NTFkZGRiZDksIDB4OTdmYTE5MzMsIDB4OWE3NGQzNDUsIDB4NzJhOGIyOTcsCisJMHg4ZGE5NmYzYSwgMHg4ZjY4ZWQ2NSwgMHhkNzIzOWYwNiwgMHhjZTliYjg4ZSwgMHg2OGFkNjkwMSwgMHg3MDNhNDA0MSwKKwkweGE0NjFkOTJlLCAweGU4Yjk4OWY4LCAweGM1YzhlNzg2LCAweDhmMjM5ZDliLCAweDkxY2ZjOTk5LCAweDc0MjVlOTQ3LAorCTB4ZWE0NWI0NTksIDB4N2YyMzllNDMsIDB4ZjdkZjE0NmMsIDB4NzEzYzcxYmIsIDB4Mjc4YzNmODgsIDB4YTIxYzcwNmQsCisJMHgzMWQxYzc5OSwgMHhmNWYyMDIzZiwgMHg3ZjIzMTc2NiwgMHhjN2RlM2NiYSwgMHhlYTUwNzVlNCwgMHg4NjFlY2MxYiwKKwkweGI3YWI0MGYyLCAweDY4YTdhODRiLCAweDYxM2VmOWMzLCAweDRlNTg2OWIwLCAweGY3YzhiZjA4LCAweGZiZThlOTQ3LAorCTB4MzRjZDcyNGYsIDB4ZDcyMzFhYWYsIDB4NWFmY2U3Y2IsIDB4N2E0ZmU5MDgsIDB4NGZlMjk0NzUsIDB4YzM2NzRkMGEsCisJMHgwZDNjYzlkMSwgMHhmMGE3NDczZiwgMHg5ZTkzMDJlMSwgMHgzMDJkZjdjZSwgMHgwZmQxNGFkOSwgMHhlZjA4MDBiMiwKKwkweGZhODA5OGIzLCAweGY3ZTIyZGI3LCAweDBkYmI0NTgxLCAweDUzMzdlN2U5LCAweDZmZjlmZjZlLCAweGI5ZjliYTE4LAorCTB4NDMzNTNlN2MsIDB4NGVlM2Y3NDcsIDB4OGY2MWNjMDksIDB4ZDU3ZTdhMTksIDB4ODY5ZThjZTksIDB4NjZiYjlhNmUsCisJMHhlYzg3NTk5ZCwgMHhlZmYyZTJmNywgMHg4NjdiNjExNSwgMHgxNjc1NTNlMywgMHg3NzlmZWM4OSwgMHhhODVjYTE0NiwKKwkweDBmMWY1YjRlLCAweDQyY2FhMmYwLCAweDk0ZGZkZDFkLCAweDA4ZWU0NGUzLCAweGQxOWZjNzJlLCAweGEyOGU0ZWJhLAorCTB4NTFlN2QxNzgsIDB4NjI0NzQ4YTUsIDB4YTNlMjJhN2YsIDB4ZWEwMjg5YzQsIDB4OWUyYTM3YmQsIDB4ZDdlMWNkZWEsCisJMHgxOGRlYTBjNSwgMHg3ZjY3ZDM5NCwgMHgxZWI0NjJlZiwgMHgxMjdhNTBiNiwgMHgzMDJjNGZkYSwgMHgwN2NiMjM2ZSwKKwkweGYzMDJhM2I0LCAweDAxNjI3ZWQxLCAweDJmMmMyN2ViLCAweDkwODVmNmI2LCAweDYwOWE0YTE3LCAweDBkNTI5MmRiLAorCTB4ZDA5MDllN2MsIDB4ZmY5MmE5NDIsIDB4ZWU1YjQzYWMsIDB4NTdhZWIxMGYsIDB4YzZmZDc1ZTUsIDB4NjAxYjRjNzYsCisJMHg4ZWQwNzEzYiwgMHgyYWU1ZmIwMSwgMHhkNTE3ZGJjZSwgMHg2MWUzMmNhNywgMHgxNzY1NzU0OCwgMHhlOWIxOGVjOSwKKwkweDg4OTMzZTE1LCAweDFlNjEwNmJmLCAweDQ1ZmIwNGFmLCAweGQ1YjBkZTc1LCAweGZiYTE0YmViLCAweDZkMzhmMmZlLAorCTB4YTM0NmQ2MmIsIDB4MWM1NTAzMWQsIDB4YmNkYjlmNDgsIDB4OTk2NTI5NmQsIDB4Y2VjOGUzODMsIDB4OGQxM2U5OTEsCisJMHgxN2E4ODliNiwgMHg1YzcyNWZmMywgMHg5N2Y0MGNjYiwgMHg3NDM0OWIyNCwgMHg1MzI2MDEzZSwgMHg2ZTYxMmY3NSwKKwkweDM4YjRmNDU5LCAweGNjZGQ0NTM0LCAweDJlZDA5MjZlLCAweDNmM2QyNWVmLCAweGY4OTZiYWUxLCAweDYyZjBlMTIwLAorCTB4YTRhYjcxODYsIDB4ZWYwMTc2YjgsIDB4MjNmNDBkMDMsIDB4OTdhZTZmZGYsIDB4NWM1N2I5ZTMsIDB4MDQ4ZTM0NjUsCisJMHhjZWZlYzBlYiwgMHhmMzhkMGVjOCwgMHg3NDc5NDVjZCwgMHg1MThlNjllNSwgMHhlNWQ1OGZjMiwgMHhkY2ZjNzFjOSwKKwkweGUxZDVmZGMyLCAweDNhZTgwOTdlLCAweDQwNTdiNmE5LCAweDM4MGMwMTM4LCAweDVjMjdjNWY0LCAweDQyNmI0YzZmLAorCTB4MDQ1YWYyNzksIDB4NmRiNThiZjksIDB4ZjIwN2NjOTksIDB4NDU3NDU1MjcsIDB4ZmIzY2UwZTUsIDB4YzlhNmZmYTUsCisJMHhkZjBiMDc5MCwgMHg5YzIwN2NhZCwgMHhhMTM2YjNmNCwgMHgyNWQ5MDY2NSwgMHgyODU4NjlmNywgMHgxYzk4Y2YzZiwKKwkweGM4MjhjN2VlLCAweDYwOWZmY2UxLCAweDFlYTk0ZDZiLCAweDQ0ZDNlOTg3LCAweGNmOTc1ZjM3LCAweDFkYjM5MDY3LAorCTB4OWYxMWQ5ZjQsIDB4MWM1OGZhMmQsIDB4NzU5YTdiZDQsIDB4OWI3M2U5YTEsIDB4N2VjMGVmZGMsIDB4MTg1ZmNmMjEsCisJMHg3ZjkxMTk3MywgMHgzYjkzODJiNSwgMHhkYmVlZjczOSwgMHhjZTgyY2ZiNywgMHg1NWU3NDYxMywgMHg4ZDdhYzkzNiwKKwkweDRlNDQ0ZWQyLCAweGQ4NDYxNTNiLCAweDQ1Y2YwYzFkLCAweGRmMDc2NjBhLCAweDliM2VjYzA3LCAweGY5YWJkNjBmLAorCTB4N2I0ODZkMmIsIDB4NzkxY2MxZWIsIDB4YjI2YjQ5MWYsIDB4NGNiMmZkNjEsIDB4OTRmZDBkYmIsIDB4MWE1NWY3YzEsCisJMHg3MGRhMjZkMywgMHgwYzY3MWE3ZCwgMHg3MDMxYTlkMCwgMHhjYjRlZTg1ZiwgMHg1M2NmMWY3ZSwgMHgyYzc0N2E5OSwKKwkweDcwNTkxY2YwLCAweDIxNzNjN2FhLCAweDk3MjgzN2IxLCAweDFkMzc5N2NmLCAweDliNDJlN2UyLCAweDc4YmQ0NTRjLAorCTB4MTRjOWExMGUsIDB4ZmVjNzQ0NTcsIDB4YTk5Y2ZjNGMsIDB4M2E2NGRmNTIsIDB4NjRkZWYyNDYsIDB4MTM1NmYxZTcsCisJMHhhMjAyMGZlZSwgMHgzYmExZTdjNywgMHg4M2NkMThlZCwgMHgwZTVhNmY1MiwgMHg3YjI2YWI5NywgMHg1YmZiYzMxNywKKwkweGQ1M2Y3NmUxLCAweDNlOWQxMzBiLCAweDE2MWZlMDBkLCAweDRmZmVlOGM3LCAweDU1ZjM5MTk4LCAweDMxOGZhYzA0LAorCTB4N2U5NWVmODAsIDB4ZDFkMWNiNmYsIDB4MTcyNTM1YmMsIDB4N2UxMDk2ZjUsIDB4NjcwNGRlMjIsIDB4MWIyMmI2NGQsCisJMHhkZjM4ZGJlZCwgMHhiNDYzNmZkMCwgMHhhZjljZGY0MiwgMHg1YmU3OTcxZiwgMHgzZTUxYTc2OSwgMHg0MzRmN2FmZiwKKwkweDU4YjJmY2NlLCAweGQ3MzkxM2Y0LCAweGE2YmI2MGU0LCAweDgzYjQ0NmU1LCAweDZmZTM5MWI0LCAweDYxODZkZWQ4LAorCTB4Mjg1ZTZiZGIsIDB4ZjIzOGY3YjcsIDB4YzhiMjM2ODUsIDB4NTBlOWVkOGMsIDB4YzNhMDg0NWUsIDB4ZmU3NmU0NjcsCisJMHgzMGVkZTM1NywgMHg5N2RmNzRiMywgMHg5ZjMwNWE2MCwgMHhhM2RlOTQyZCwgMHhhMzhjNDZhNCwgMHhkZGZhMWI4ZiwKKwkweGViYmY5NjM3LCAweDkwMjQ3ZWQ0LCAweGZjNzE3YmJmLCAweDFlY2Y5MzJiLCAweGVlMWNhMTJiLCAweGRiMmVkYTNmLAorCTB4NjE5ZDhhMjcsIDB4MmVkZWRiOTEsIDB4M2VlODdiZjAsIDB4ZWY0ZWRjMjEsIDB4ODc3NmM4MzYsIDB4MGYzZDRjMjUsCisJMHhmOTQxZjc4MywgMHhlMGFlNWMzYSwgMHhjNzJlZTZlNywgMHgwNDZiOGEzMSwgMHg3N2U1ZjNmMywgMHhiNDBlOGEzZSwKKwkweDczZWY1MDRmLCAweDA0YmI3MzY0LCAweDFjNGJiNDUzLCAweDYxMGQ5ZmIyLCAweDlkYTAxYmY0LCAweDgwZmRmMGEyLAorCTB4ZmE0MmI3NWYsIDB4M2YwMDViYTcsIDB4MGQ2ZmM4MDMsIDB4N2IyNDJiYjQsIDB4YzkwZGJlODgsIDB4ZTdjODY5N2QsCisJMHgwNTNiZjJhOSwgMHg1Y2Q3ZjY0MywgMHg0Nzg1YTcyZSwgMHhmZTQzNGIzZiwgMHg0ZmViOGIyZSwgMHhmOTgyZWZjMCwKKwkweGFlNDc4NWZjLCAweDVlNzhlMDI2LCAweGNlNzAzMTk4LCAweGFiNDNlMjg2LCAweDdiZjNhNzE3LCAweDFjZmZjN2Q5LAorCTB4ZmVkMTBhZWQsIDB4NDU3ZmVlY2QsIDB4ODZiNGRkOWQsIDB4NWNlNWMwZjQsIDB4ZGY1YmZjMGYsIDB4OGNiZWRiMDcsCisJMHg4MjFkOWRlYiwgMHhjZGE0ZWZkYSwgMHg1ZmU3N2FlNSwgMHg3YWNjN2RlNCwgMHgyZGY3YTQ1NSwgMHgyZWI5NjVjZSwKKwkweDBhYjYxZjIwLCAweDdmMjhlNWU2LCAweGU3ZTExZjUzLCAweDVlM2Y1NmU2LCAweDIxMDNkOWZmLCAweGVkMTg0MWY4LAorCTB4ODA0ZTczZmEsIDB4YWNkYzVjM2QsIDB4YTM1YTNmMjcsIDB4OGRjNDdkMjksIDB4YWZjMzFjZTIsIDB4NzFjYjg3YjMsCisJMHgxZTRiN2Q3OSwgMHgyNGYzZjIzNSwgMHg1YjE3YWUyZSwgMHgzOWQzZjc1YywgMHgyM2YzZTA5NSwgMHgyNDNiZDVjMywKKwkweGJlYTUzZGNiLCAweDc5NDdkYjAxLCAweGZlNDc5YTYyLCAweDIzNjg0YjgwLCAweDk2NGRiZmEwLCAweDc2NzhjMTdiLAorCTB4ZjNjODY0ZTIsIDB4MTJiOTA0NjMsIDB4MTg0NTY4NzUsIDB4ZWQ5M2FiYjYsIDB4M2Y4YWVkYjEsIDB4ZThjOGEyYTMsCisJMHhiNzVlZjgwOCwgMHgxYTU4YzhiOCwgMHg4YzhkMmY0MCwgMHg2ZTBkZGY5ZiwgMHgwMWRjY2VmZiwgMHhhZmE1NWE3ZCwKKwkweDQ1OWY3MGU4LCAweGY4OWM1MGRmLCAweDQzMzkwMWE3LCAweGNhYjg2NThhLCAweDBmZmE1MThlLCAweDcwMTYzZjNlLAorCTB4ZjM4YzJjNWUsIDB4NWE2N2I3MjksIDB4ZTgxOGRjZjEsIDB4OTYyYjZiYjcsIDB4NmRmOWM0OGYsIDB4NTgyZjVkMTUsCisJMHgzZmZhMWU2MSwgMHhlNzM5ZDAzMCwgMHhlY2JlNjUwZiwgMHhiODcyZjk5MywgMHg0M2IxZjNmNSwgMHhmNjMxOGNhMCwKKwkweDk3ODIzYjA0LCAweGM2NGU4MGQ2LCAweDY4ZmU0MDhmLCAweGZiOTRkNGNjLCAweDVjYjM4YzQzLCAweGZkMDg2NzFlLAorCTB4YWZkY2Q2ZmEsIDB4ZTY5NzVmYTcsIDB4NTFhZmQwODYsIDB4YzUwNDc2N2YsIDB4ZDQ2MTAyMWYsIDB4ZjQyMTFkOWIsCisJMHhlYzgyMTNlYiwgMHhlZGNmOTAwZiwgMHgxZDQ5ZDA5YywgMHgyNzBmMzA3ZCwgMHg2ZjYxMWQ2ZSwgMHg5MTllZTg5NCwKKwkweGY2MDQ1ZWMzLCAweDMyNjc4YmMzLCAweDIzOWY2ZjUxLCAweDIzYzdiYzBjLCAweDYwOGMzMWRiLCAweDIyMTYyM2IwLAorCTB4Njc5OTczNWUsIDB4YzUwMjAzZGYsIDB4NDhlZTVhNTEsIDB4NWMwNGVlYTMsIDB4YTdhZDliOGYsIDB4MzcxMWZiMjQsCisJMHhkYzYxM2FjMiwgMHhiMmRhZjVhMSwgMHgwY2UyYTExOSwgMHgyNzQwMzhmZiwgMHhlZjAyYmEyOCwgMHgwNDJhYzAwNywKKwkweGM0ODY5NWM0LCAweDYzZTI4MmNiLCAweDM4MTk0ZTE4LCAweDVhMWRhYmZmLCAweDc1NjJhZWZmLCAweDM1ZTM2YWZjLAorCTB4YWMzMGJmZWUsIDB4MDQyN2ZlNjAsIDB4MmVhYTFmM2MsIDB4MGJhZTVmOWYsIDB4ZTJhOWNmOGUsIDB4YmE5ZDBiNWEsCisJMHg4ODdjN2M2MCwgMHg2ZjhjYjI2ZiwgMHgyOTA3YjZjYSwgMHg0NTJkM2UwZSwgMHg2NGFjZmRlNCwgMHhjNzA3Y2Y2NCwKKwkweGJkODUwY2JkLCAweGMzZWEyZDBlLCAweGY3ZjQ4YzE1LCAweDllMzYzZjYwLCAweDVlZmYyNTE3LCAweDA5Y2Y2MzA1LAorCTB4N2Q1YWRlNzQsIDB4NTllOWU0ZGYsIDB4MWNmYmY4ZTcsIDB4OGZkOGU1MmQsIDB4NTBjMzUzMmQsIDB4YWZiZTBlM2YsCisJMHhmMDliYzRhMCwgMHg3ZGUwNGM5OCwgMHgyMmRkZTU2OSwgMHhlMTBkNjJjYiwgMHg1M2I3N2NjNywgMHg4Nzk3ZTJiOSwKKwkweDRiMTJhNmZhLCAweDU1ZWViOWMwLCAweGRkM2VhMDZjLCAweDFlODVmMmEzLCAweDU5ZDZkNmY3LCAweDFjNGZlZjE0LAorCTB4ODJlYzI5ZWYsIDB4YTMzYjI0YTIsIDB4NjZhYTQ4NzksIDB4M2NjMDA3NjQsIDB4ODZmYWUyYTgsIDB4Y2UzNDVkOTQsCisJMHhjNThjMzU0YiwgMHhhYWEwMzhmMiwgMHg3MDc2MDEzYywgMHhiZjE4NGZhNCwgMHhlMzBmY2UyYSwgMHg3NmMxYzE1NCwKKwkweDRkZWNjZGU3LCAweDBkZTY0YTQzLCAweGZjY2RmOWU1LCAweDVlMzkwNjhkLCAweDY0NmU0NmY4LCAweDYzM2JlOTFjLAorCTB4NzdkNDE4ZDgsIDB4YTY5ZjhiMmMsIDB4ZWIwNGI4ZjUsIDB4MzQ1OTdlODEsIDB4MDNjNTQyODQsIDB4NjhmYjQzMzcsCisJMHg1ZjkwYmEwNywgMHhjNGRmZDFlMiwgMHgzMGNhZWY1NCwgMHhjOWY3NDg4NywgMHhiMzhlNjI4NCwgMHhmMWU0ZWIxMCwKKwkweGZjNDY3Y2UxLCAweDk1MDcwODZkLCAweDk4NTlmODBiLCAweGJjZTA3MDZjLCAweGMzMDAwYzFiLCAweDMzM2QwNTkwLAorCTB4NTZiZTQwMjYsIDB4MTVhZjM3ZjYsIDB4MzMzMDg4OTgsIDB4NGZkYzhkZGIsIDB4ZTM2YmJjYTgsIDB4ODY2ZDc3YTcsCisJMHhmZjc0MDdlYiwgMHhjZmVjMzBiZSwgMHhmYTUzYmZjNywgMHhkYjhlZjIxOSwgMHhmYjI3YmUwZCwgMHg3ZGZjMWNjZCwKKwkweDk1MWRmOTE5LCAweGZmOWI4N2ZlLCAweGZiNmRkZWUxLCAweDI3NzdkNGMzLCAweDMyNjdiZjcwLCAweDIwZTU2YmQxLAorCTB4NGNiYzEyYmQsIDB4MWVmYzQ3YTYsIDB4NGFiZGMyZTUsIDB4MGM3N2FkYjEsIDB4ZmIzYzM3ZGUsIDB4ZmQxZDg0NzAsCisJMHhmMGUzMDNlMCwgMHhlZmU1YTlkZCwgMHhlZDc1ZmRkMSwgMHg5MzYxZTAwZCwgMHg4YzBmYmU0OCwgMHhhZmVmNmU0YiwKKwkweDAyZmQxNzFkLCAweGJjMDZkYWU0LCAweDRmZTc4NDM0LCAweDI3OWQxOTJhLCAweGNmNGFiOGIwLCAweDAwMGU3NDg5LAorCTB4MTM5MmEwYzYsIDB4NDAxM2VmMDEsIDB4ZjEwZTFiN2IsIDB4ZjE1YmFmNzMsIDB4YjA3MTBiOWQsIDB4ZDAyYmQ0NWYsCisJMHg0MjU1YjA2ZSwgMHg0ODNiMDg3ZSwgMHhiZjE5YWI0OSwgMHhkNWUwYWMxZiwgMHgxYTNkMDdhOCwgMHhmNWMzNTJlOSwKKwkweDNlYTZkOWU4LCAweGU5MzVjZjExLCAweGU0NDVmYWUyLCAweDJlNjhlNzFmLCAweDM3ZTgwN2M3LCAweDBiZjlkMTllLAorCTB4Y2U3YzkyNmQsIDB4ZGZjNGE0NzEsIDB4ZmJlNGNiNGQsIDB4ODRjZmQyOWIsIDB4ZmU1OTFhZDEsIDB4NDdmYmQyZjcsCisJMHhkNTRlMjNiMywgMHhmMmM2NzY0YiwgMHg0NDJmYzVmNiwgMHgxMWVjZmNmZiwgMHgwMGQzZWFhNywgMHhlMTY3ZDgyZSwKKwkweDJiYTlkMjcwLCAweGVjYzY2NjY5LCAweGQxMGJhY2ZiLCAweGVmM2IzZjlmLCAweDgwNzQ5NWQ0LCAweDc4ZDlmNjhiLAorCTB4NDY0NjE0ZjksIDB4MDk3ZGY4Y2UsIDB4MzE5ZmQxMGIsIDB4ZDU1OWI0NjEsIDB4ZDczODViZmUsIDB4ZDUzY2RmZjEsCisJMHhjZjIxMzQxYSwgMHg1YTM2ZGY2MywgMHhlOGM5NGYzOSwgMHhmM2IzYWQzZSwgMHgyZTMxYTc5NywgMHg0N2Y2NTRlOSwKKwkweGRmNDgyZTg3LCAweGRlMGIyMjgxLCAweDcxN2Y5MzIzLCAweDlkMGYxNDUxLCAweDlkZDlkMzI5LCAweDE0NTJlZWY4LAorCTB4NjhiYjJkZmEsIDB4ZmEwZDQ3N2UsIDB4NmJmZTlmZTksIDB4NDM4MmY0ZmMsIDB4Y2NjYTk3NzksIDB4MWJmZjgxMmEsCisJMHgyYzJiOTgxYiwgMHg5OWVlODAyMywgMHg5ZjlkNzM0MywgMHg4MWI4YTYwMywgMHhmZmQyOGY4MiwgMHg2OTYwYmMxMCwKKwkweGJjNDA5OGM1LCAweDBhM2I1MWI2LCAweDBkMGExNzVlLCAweGM3MDU4N2E0LCAweGZkMDgyZTg3LCAweDU0OWNmMWRiLAorCTB4MmZkNmNmYzQsIDB4MTBiYTc1YzIsIDB4MDAyYTlmZDksIDB4OWViNzllMWMsIDB4N2M0MmVkZDYsIDB4MWVjMTc2ZmYsCisJMHgzYWY4ZWIwMCwgMHhhMjJiZWY1NiwgMHhkNmEzZmM3NSwgMHgwMjdhM2Q1MSwgMHhkZmM1ZGJiZSwgMHhlMzk2Njg2ZiwKKwkweGJiYzY0ZjUwLCAweDAxOWY2ODdjLCAweDMyYjlkMWRkLCAweGZjOWU4YTVmLCAweDA1ZTM2NTQ4LCAweGIwM2ZhMDQ3LAorCTB4Y2JmNzM0NmUsIDB4NjlkMzkyNWMsIDB4NDljZjE2ODYsIDB4MDFmNzRiYTAsIDB4ZmE4NWFkODEsIDB4ZjU5NzZiZWUsCisJMHhlZWNjOWZhOCwgMHgzZDQ3YTMzYywgMHgxOWMwZWViYSwgMHhhZDRiZGUzZCwgMHhhOWRhMTg0MywgMHg4NDc3YTZkYiwKKwkweDMyZmVmZmQyLCAweDk3ZjJhYjVhLCAweGQxZDc3NjI5LCAweGU4ZjVlYzk0LCAweDE2YWJhYjc3LCAweGVhZGUxZWU4LAorCTB4NmUxZmI5ZDcsIDB4MjUxYzMyZjUsIDB4YjJkZjc3NjMsIDB4NTViOGZjOWYsIDB4OThmNWVlY2UsIDB4NDc3ZDY1MmUsCisJMHhjNTg4ZGRmMSwgMHhkY2VhYWQyZSwgMHgwODlhOTJjMCwgMHhjYWJlM2M1NSwgMHg5NzgyYWIxMywgMHhjMGVhYzBiNiwKKwkweDIxYjRiYjNlLCAweGMzMWRmNTQ5LCAweGVmODJjZjVkLCAweGQwZmUwZTI4LCAweGQ3OTBhZmZlLCAweDczNmRiMTcxLAorCTB4MTZiYmZhMmYsIDB4Y2M3YWQ0YmIsIDB4NjJiNWNlZWMsIDB4MTFlZGUyMGMsIDB4ZmVjZTFhZWMsIDB4ODRiNzdlMTIsCisJMHgwMGQyMTA4ZiwgMHg3ZGU2MGFiZCwgMHhhM2Q3MDc1YSwgMHg2NDhjMmFlYSwgMHgwYzIyNTQ5ZiwgMHhhYjU5NWFmMywKKwkweDczOTNlM2Y1LCAweDU0ZjQ1MzQ3LCAweGE4MTBlZWVlLCAweGJiOTcyZGRjLCAweDU3NmUwNDZiLCAweGE5NzVmMmNiLAorCTB4ODM5MmUzOGMsIDB4NzVkMWE3MjcsIDB4MzdhMzlmNTIsIDB4YTVkZjAwMzMsIDB4ODhlN2U1MTUsIDB4NDM3ZDY1MWUsCisJMHhjNDg1NTcxOSwgMHgyOTBkOGRmNSwgMHhkZGIwZTllZiwgMHg1ODE3ZGZhNSwgMHg0YjhkMWE2YywgMHhhOTJkNDdhNSwKKwkweDFlNTVjMzUxLCAweGQ1OWU5MDVkLCAweGJkZjk0M2E3LCAweGZmOWQ0MWI0LCAweGJlZjJkMWYzLCAweDkwZjJjNzllLAorCTB4MmQxOGRlOWYsIDB4MDcxODlmODgsIDB4YmNhNTNmZTEsIDB4ODFlZjAyNzcsIDB4MGYzYWQyNWQsIDB4ZWFkNjdkMjIsCisJMHhkZjcwMGFiYiwgMHgxMTc1YTRiYiwgMHg3ZTQzOTRhYywgMHhiOGFmZGYxZCwgMHhjZTAxYTJiZSwgMHg3NTFiZWZjMywKKwkweGE3ZGUzMzBlLCAweDg4MTRhZGY1LCAweDAwYjA5NzZlLCAweGIwNmQyN2JkLCAweGExZGFjMTNlLCAweDc3MjJiZjcwLAorCTB4ZTRmNTljYzMsIDB4OTgyODNkMGYsIDB4MTMyODZmNTEsIDB4ODNkZTIyMWQsIDB4OGZjNjFjNmYsIDB4ODNlNjUxN2UsCisJMHgxZjJmYWMxMywgMHgyMjQ2Y2FmMSwgMHg5ZWNhNzU4NSwgMHg5OWY2ODIzZiwgMHhmOTk2YjdlYywgMHgzZDk0OGUzMCwKKwkweGM0YmYyMDRlLCAweDQzNzE4MDlkLCAweGM5MjJhNjExLCAweDM3YjAzOTkxLCAweGFkOWE0MTg0LCAweGY5MjBhZjZkLAorCTB4ZTY2ZjU2M2UsIDB4NThkYTYyZWYsIDB4ZmM3MGJjYTAsIDB4YmU3MDEzMzMsIDB4MGJiMjc1MTAsIDB4ZmRlODdiOTMsCisJMHg5YjZkMzliZCwgMHhjYzVjYTIyZiwgMHgzZDE0NzBjYywgMHgxOTNkZjgwNSwgMHhmMjdmZmJjNiwgMHgxNmJmYzE3NSwKKwkweDNmY2JhOWRhLCAweDBhZDNmMjQ2LCAweGQ2ZmQ4MWU0LCAweGRhMzk2NGQ5LCAweDVhY2ZmNmExLCAweGMxMjFhZTUxLAorCTB4N2VhN2NhY2MsIDB4MzJmODk0MTMsIDB4YzNlZDE1ZDAsIDB4OWZhNGE1NWQsIDB4OWY3ZWU1NTgsIDB4ZGRiODk0MmQsCisJMHgyZTdjYTBmYywgMHhlMmQ2Zjk4ZCwgMHhkMWJlZmFmOSwgMHhmNDk1ZjI4YywgMHhjYWFiZmIxYiwgMHg1ZTI4MzEwNCwKKwkweGU2MWEzNzUwLCAweDRmYWRhNTc5LCAweDViZTlkZTc1LCAweGU5MDFiZjZjLCAweDE4N2RiODJjLCAweDM5NWUyYWJlLAorCTB4OGEyZDdiNGQsIDB4Y2MxZDc3ZWUsIDB4ZmVlOGRlYjAsIDB4M2VhOGQ2OTQsIDB4ODczM2E0YjcsIDB4NTNiYmRkMDcsCisJMHhmNmQ5OWZjYiwgMHg3NzdiYTBhNCwgMHhlZWY3NDExOSwgMHhkZGVlODJmMiwgMHgyZGY5ZWZhOSwgMHhiYTA5NGU3NCwKKwkweGU3YmVhNzc3LCAweDU0Y2RiMDY3LCAweGU2OTMwZmQ1LCAweDljODhlMGE5LCAweDIzZjU1NWJiLCAweGU3ZDVjYmVkLAorCTB4YmNmZjhlYWUsIDB4NzdjNzQ4NDIsIDB4MmU3ZDdkMDYsIDB4ZTA2Njg3OTgsIDB4YzE5OGUyOGQsIDB4MGEyZjI0N2QsCisJMHgzZTFhNDMyYSwgMHg2OTg0Y2MyZSwgMHgwYmExYTE3MywgMHg5MTM5YTRlOSwgMHhlMzg2ZTdkYiwgMHhhMGJhZGIwZiwKKwkweDk3ODhlMzFkLCAweGZjNmZlODhjLCAweDQ1MmZlMDg5LCAweDlmMjhjNGZiLCAweDE4ZmQxOTUzLCAweGFmMzNlZDUzLAorCTB4NTJiZTcwMTUsIDB4NWNmMmRiZDIsIDB4N2Q2MWYzYjMsIDB4NDk0YWY3ZjIsIDB4ZGVlMDFkZmMsIDB4NDYzZWI4ZDEsCisJMHhmOTAzNmM3YywgMHhhZjdlNTVlNiwgMHg0NzZjYWM3OCwgMHg1ZjNjZWQyOCwgMHgwZjM1MzI1OCwgMHhjYzdmY2ZiZSwKKwkweGVjZTI4MzMxLCAweGYwN2VmYzFkLCAweGE3OGYzZDRlLCAweGU3ZTU1ZWY4LCAweGZhM2JmMzViLCAweGZlMDA4ZTM0LAorCTB4ZjVjNzk5M2UsIDB4YTU5YzY3OTAsIDB4ZWJhOTFmMTQsIDB4ZjkxNjVkODQsIDB4MWVhY2VkYTksIDB4NzVkNDY1ZWYsCisJMHg3ZWUxNDc3NiwgMHhhYjNjZTA1NiwgMHg2MGM5YmY0NywgMHg4OWNmYmNiZSwgMHhhZjY4ZTFmZCwgMHg3NDNkYWNmZiwKKwkweDllNmQ2ZDNjLCAweDk4ZTNmODllLCAweDFlYWJkNzJjLCAweDkxYmI3MmQ2LCAweGI5ZTE2NjM5LCAweDU3NWU0NTcxLAorCTB4YWJlM2U3ZWQsIDB4ZTdlN2E4NWEsIDB4MWQxYTMxNjAsIDB4OWM4MzZlNDIsIDB4YzM5NmFiM2UsIDB4NzA3ZWY1MGUsCisJMHhjYTNkN2Y4YiwgMHhhYWRmOTAwZSwgMHg0YzE3NGI3YSwgMHgxMmI3YmIyNywgMHgzMWYyMzZlNCwgMHg3OTc1NzNjOCwKKwkweDE3YzkxMzcyLCAweDdjYWFlNzkwLCAweDNjODBkZTc3LCAweGRmMGViZmNmLCAweDQyNmE3NjlkLCAweDgxNzBmMzhlLAorCTB4ZGE3OGYzNDgsIDB4ZmZlNjk1MzUsIDB4ZjQ0Nzk4MTksIDB4NjQzMzNkYTcsIDB4ZGU3Y2Y4ZGUsIDB4YzY1ZWJlNmMsCisJMHhiNzU4MGZiNSwgMHgyZWJmN2FlMCwgMHhmMmY2ZWJlMCwgMHg3ZGZhZjIzMCwgMHgwYTc3NWQ3OSwgMHg0YzI4NDViZCwKKwkweGEyNzBjZWRkLCAweDYzNDYyNWRiLCAweDM4N2I5ZTA5LCAweDEzNjVmMjk2LCAweDdlYWFlMWM2LCAweGZkM2RkMDJlLAorCTB4NmUzZWViN2YsIDB4YmY1ZmZkNDEsIDB4ZmQwNWE4ZmYsIDB4YTNmNmVlNjEsIDB4NTk0ZGIwMTYsIDB4OGI1YTRlYWQsCisJMHg4NWQwM2M3YSwgMHhiYTllZjUxZCwgMHg3ZmMyMmU4ZSwgMHg2ZWI4ZmI2NSwgMHgyMWQ5NWZjYywgMHhlZTNkZmJkMCwKKwkweGQzYTcxNzAzLCAweDEzNWY1OTM4LCAweDBlNzcwYmM2LCAweGYyOGZkNzgzLCAweDM3YmVmZWI4LCAweDMwN2VlMjRmLAorCTB4ZmI4OWY0MTcsIDB4ZGY4MzAxZmQsIDB4ODAxZDIwMmYsIDB4NWViYzQyNWMsIDB4MzVlNWYwMTcsIDB4YjFhMzczYjYsCisJMHhmNTFlOTQyMiwgMHgxZjdjZjI2ZiwgMHhlODY3YThkOSwgMHhlZjg1YWZhZiwgMHg1MmM3MWM3MSwgMHg0ODhkZTk4ZSwKKwkweGIyMDVmYjQ3LCAweDI3ZWRkZGI1LCAweGZiNjA0NjE3LCAweGZhODYzYWY1LCAweDE3ZGY4Mjg1LCAweGUyMWZiZDI5LAorCTB4ZDZhODNmZjgsIDB4MzU4MGE3YTEsIDB4YmU2OTZiNTYsIDB4NTJkN2E4M2YsIDB4NzRmYmRhM2IsIDB4YzE1ZTJmMDQsCisJMHhhZTFjNTVjZiwgMHgwOTI5YThmZSwgMHg1NmEwZmRkYSwgMHg1MzBjN2JhMCwgMHgzMWYzZmJlZiwgMHhlMGFmMTc4NCwKKwkweDNkMzA1YWZhLCAweDRjMWFmNDJiLCAweDNiZjRjMTlmLCAweGJlNmI0ZTg0LCAweGM5MWU5ZDE5LCAweGU0ZDVlZjkzLAorCTB4ZTdkYzAyYjEsIDB4NTlhN2RkNjEsIDB4ZTExZTdlOTEsIDB4YWUyYmUzZjcsIDB4N2ZhMWQ2MWQsIDB4NmNjOWJkMzMsCisJMHgzMWUwMDI3ZiwgMHgwYjdhZmY1YSwgMHhiY2MzODljYSwgMHg4Nzc2YjBiYywgMHg3NDhkZTVjMCwgMHg1MjYxZjIzNywKKwkweGJkYTE5ZWIzLCAweDk3MWU3ZWZiLCAweDdhZTNlZjRiLCAweGZhZDBlM2M1LCAweDMxYWY4YzA1LCAweGU1MWQzN2IxLAorCTB4NGYxYzlhNTIsIDB4MmFjNzQ1N2EsIDB4OTA1YzUzZjYsIDB4YWYzMTliY2IsIDB4OTZlZjU0ZDksIDB4YmQ3MWU1MzcsCisJMHg0MDgzOTE0MywgMHhlNGZkYWVlNiwgMHhjNDRmNmQ5NywgMHhjYjJmMTQ3YiwgMHhlNTUzNDFlNywgMHhmYTMyYjJmNiwKKwkweGY0ODVjZmE3LCAweDY3MmY0Y2FhLCAweGY4MTQzYzY0LCAweDZjZmY0Y2IyLCAweDFmNjhjZmRiLCAweDU5YzcyZDlmLAorCTB4ZDE3NDM2NjYsIDB4ODMzY2NjNzksIDB4ODc5NDUzZWIsIDB4YWJkZjUyYjMsIDB4MzlhZTdkYzUsIDB4M2E3Y2VkZmQsCisJMHgyNTM3OGQ2NywgMHhjOWZiZTIyNiwgMHhkMjc4NzdmYywgMHg2MGQ2ZGJhNywgMHg5YzM3MmZkYywgMHhlMGVjMzFkNiwKKwkweDM4MWU3NDUzLCAweDM1YmM2YjJjLCAweDQ5NDM5YzU0LCAweDdhMjU1N2RkLCAweDZhZWViMDhmLCAweDNjMGFhNTNhLAorCTB4N2QzOWQwZjcsIDB4MTcwMWQ5MWYsIDB4NWM5ZjEzYTcsIDB4MmRkZWE5YjUsIDB4N2JjNjU0ZmMsIDB4NWQzZWYyOGMsCisJMHg4MGYzZjcyNywgMHg4YjhiMTY5YywgMHhmMzI5ZWIwNiwgMHgxYzY1OWU4MCwgMHgyZWQ2NTg2ZiwgMHhhYjM1YWY1YSwKKwkweDc1YTkyMTU4LCAweGNlZmUyOWVjLCAweDAxNDllZDY2LCAweGE0NThiZGRmLCAweDMwNGNlODczLCAweDYwOGRlZmRmLAorCTB4ZmM4YjFmMjUsIDB4MzY1NzI0MWQsIDB4NzQ4YzRkYzYsIDB4ZDc4NGZiMmYsIDB4ZDdhZjcwNGMsIDB4YWYyOWYwNDYsCisJMHg2MWFkZTk0NCwgMHg2ODdjODhjZSwgMHg0ZjExZTE2NywgMHhlMWRiY2UxNiwgMHhkZTI3NTY5NCwgMHg4ZWYwYmM1NywKKwkweDMzNmJhNjRlLCAweGQzMmUyZmJmLCAweDJkNGVlNWRhLCAweGViOWM2MjMzLCAweGMyZTNlODAwLCAweDVjZjdmZTIwLAorCTB4ZGRmYmE0NGQsIDB4YTBmZWMzYmYsIDB4YmYwZDk1OWYsIDB4YWY2Nzc5MjEsIDB4ZWQxZDM4YjksIDB4MzNkYWMyYTIsCisJMHgxYmJiMDg0ZCwgMHhmNTFkM2NmZSwgMHhmZjYxMGY4OSwgMHhmNDFlYmQyMCwgMHg3MjgwOWI3YiwgMHhkM2JkMjRlNCwKKwkweDg2MzU3OTVkLCAweGQzNTk3OWRhLCAweGNiZjkxZDNmLCAweGY3NDBhNmY3LCAweGI4ZWMzZTZmLCAweGZkZjJiN2E4LAorCTB4Nzg3M2RjODksIDB4ZjJmZDFjMmYsIDB4YjlhM2YyYjMsIDB4ZDQyY2U5MWMsIDB4MjQzYWZhZDAsIDB4ZGRlYjNiZDUsCisJMHgwYTJiZmZhMywgMHgyMGQ4YzNkNywgMHg3ZTBhN2FmZCwgMHhjODY1YTNkZiwgMHhmYjRhOWJiZiwgMHhlNDIxY2NhMywKKwkweGRmZjQ2OWVmLCAweGIwNzFmMzY1LCAweDE1ZTVhMWVjLCAweDllMTY1ZjdhLCAweGU5OTBhYzkzLCAweDNjYmNiODM4LAorCTB4YTEzZmMwN2YsIDB4ZWJlZmNhNzMsIDB4YTFmZTAxMDgsIDB4M2ZkZmM2MmEsIDB4MmJhN2JiMDUsIDB4YWFiOGY4MWMsCisJMHg2N2Y5MmE3MywgMHgwZGMyM2NhYSwgMHhkMWMzMzNmZCwgMHhlYjRkZDdlMSwgMHgyOGNmZjcxOCwgMHg4MThkZGEzMCwKKwkweDFiYjQ0ZDdlLCAweDFmN2ZhYTk5LCAweDI1MmIwNzdmLCAweDc0Zjc4NmYzLCAweDE0ODk3ZGRjLCAweDY2NmJhZmNmLAorCTB4Nzk1YWVmMTQsIDB4ZTdhNTM0NzUsIDB4MjEyMGRmNWYsIDB4ZmJjMzE4ZmYsIDB4NmI3ZWU5NWIsIDB4OGNlYzg2YjYsCisJMHhmZWI1M2U5NSwgMHhjYjgwYTUzMywgMHg3YzA1Mjk4NSwgMHg2MGY5NWNkZSwgMHgwMWIwZTUyZiwgMHhhMmVjMDk3YiwKKwkweDVkYjlmMzdiLCAweGE5ODg3NTE0LCAweDdjZTBhNWVjLCAweGYyOGM5N2IyLCAweDEzMTAxZDNkLCAweGUwNDI1N2FlLAorCTB4Njk0MTQ3N2QsIDB4Y2E5NzdlMGQsIDB4ZDljZTg4NWEsIDB4NzJmZWZjM2IsIDB4ZTRkNzM4ZjAsIDB4Zjg1NTNlNzMsCisJMHgzNWYyMzE3YSwgMHhlNzA3NmZkMiwgMHhlNzc2ZTBlYiwgMHg0MWFjOTQxNSwgMHg0YzM4ZGEzZSwgMHhlNjVjYWI3YywKKwkweDhjNmQ5NWZiLCAweDE2ZGRjYmU2LCAweDA1ZjRmMzQzLCAweDAyOTY3MzZiLCAweDc4MDE3ZTVkLCAweDBiZDIzZGUwLAorCTB4MzQ0NDY3NGUsIDB4ZTVjMTdmN2MsIDB4M2RmM2MwOGMsIDB4NmJhODFjOGEsIDB4MzZlZmE3MGIsIDB4YzU4YmNlNjYsCisJMHg0OGNkYTM3MywgMHhmOWRlZDBmNywgMHg5YzQ2YTk4ZSwgMHgzOGRhN2JlNywgMHg3ZGZkMjlmZiwgMHgxNjM4YjVkOCwKKwkweGFlODI2OWY5LCAweGYyODc2ZjVmLCAweDUxMzNjZWU0LCAweDc4NGRmN2E4LCAweGYyMmM3ZTdkLCAweGZlNzg3MGUxLAorCTB4Y2YxOTE4ZmQsIDB4MWUxMmM0ODYsIDB4NzBiZDg3OTcsIDB4MDA0ZjZjYTIsIDB4YmEyN2VlN2UsIDB4ODdmYTlkZTgsCisJMHg2ZmQxMTgxYSwgMHg1NmZmYWJmNywgMHhiZTdjN2M4NywgMHhmYjhjYzIzMywgMHgyMzA3MTdlNiwgMHgwYmNhYmRlOCwKKwkweDNkZTgxYTZmLCAweDdkZjk1YTlhLCAweDdkNzQyZmQ1LCAweDdjYmY0ODczLCAweDIyZjc0YjVkLCAweDQ3ZmU2ZmRkLAorCTB4ZmJhM2YyMmIsIDB4M2I5ZDAzNTUsIDB4YzM3M2E4N2MsIDB4NmFmN2RjNDUsIDB4YzM5YzY3M2IsIDB4NWY2YjU2NzcsCisJMHhjM2YyZGJmYSwgMHhkMjU0ODZjYSwgMHgzZmY4MTQ4YiwgMHhiZTI3NDZiYywgMHhlNDVlN2JmMywgMHg4ZWExZTI3MiwKKwkweGY3N2QyMTdmLCAweDBiOTc2YmExLCAweDE3Y2E3Y2YwLCAweDQ0YzdmZjA3LCAweGI3ZWU2Yjk0LCAweDc5NDQ0ZjJlLAorCTB4ZTVjNWZlZTYsIDB4N2VlZTU4ODksIDB4NGExM2MyMmQsIDB4YzA1ZWI5NWYsIDB4N2VjYTNlZmQsIDB4YThhZWY2OTksCisJMHg5MGFkMGZmMiwgMHg1ZDZkMjNlOSwgMHgzZDA3YmQwYiwgMHg3YjAyZTRlMSwgMHgxMzBmYmJlMCwgMHhhYzRlMzRiMiwKKwkweDY1YjdlMTNmLCAweDdjMDVmN2IxLCAweGE0NTdhZWI3LCAweDkzZjhlMzM4LCAweDAxZDUxMTY1LCAweDgxNGY3OTc0LAorCTB4N2UyZmYxNGUsIDB4OTMwZWJmMjMsIDB4ZjAxOWM3ZGYsIDB4NzdmMmY0ZTMsIDB4OGFmNjM2N2YsIDB4MWFhMzdkZmMsCisJMHg4M2ExZWU4MSwgMHg1ZWU0MzJmZSwgMHg4YWZmYWQxYSwgMHg4OGRmN2E1OCwgMHhjNzNiY2U4OSwgMHg4YjM4NDc4YywKKwkweDNlNjIwNWRlLCAweDAwY2NkMWUzLCAweGFmNzE2OTNkLCAweDc0MDBjYmE2LCAweGU4NjlkMTU0LCAweDU3YmVmZDIyLAorCTB4YWNiMDQzM2MsIDB4ZjE3M2RkM2YsIDB4MjEzNGM4ZDMsIDB4ZTcyNjdmODQsIDB4ZTM5NDM0ZDQsIDB4ZjgxYTdlYzEsCisJMHg4YWRlMjI0NSwgMHg3MWU5NTViZSwgMHhjMWZlMjBhNSwgMHgxNWE1OWJmZSwgMHgyODdmOTA3NywgMHhkNjkzN2ZkOCwKKwkweDhmNjY2YTJiLCAweGU5ZGZmN2M3LCAweGY3OGMyZjNhLCAweDhiZjIyMzY5LCAweGZhZTI4N2EyLCAweGZmYzEwODFkLAorCTB4Mzk3MGM2NmIsIDB4YmFkNWYwYTYsIDB4NWRmZjFlNWUsIDB4Y2M2YTViZDcsIDB4ZTY1NmI0ODQsIDB4OWRiMDAzYWIsCisJMHg3NWZkYTBmYSwgMHhhMzc3ZjM5ZCwgMHhiNWRkNjExZiwgMHg2MDYzMTE0NSwgMHgzYmJkZDZiZSwgMHhmYzgxM2Q4ZiwKKwkweDY2MzUyZTZmLCAweGVlZDc3N2UxLCAweDFmY2MyZTMwLCAweGZlZTA5N2E0LCAweGYyZTE4Y2E2LCAweDE4NGY0MDcyLAorCTB4OTdjYmRmNjYsIDB4ZWQ1YmZhZjEsIDB4ZTQ2MzM5N2YsIDB4ODdmZjZjZjMsIDB4ODc2MDdmZWYsIDB4ZWRjMzFkOGYsCisJMHg0ZmRjMjVmMCwgMHhlMGYwZWRjMiwgMHhjNzkxNDM3ZCwgMHg3OTJlYmI0YSwgMHg2M2NhODc5ZCwgMHhjMDQ4NzdmZSwKKwkweGVjNzkyNjVlLCAweGJkNTEyMzFhLCAweGIxYjljZWU0LCAweGJiYmY0NzY0LCAweDBkMzI1NjIwLCAweGI0NDMzZjZkLAorCTB4ODdmMjYyNmIsIDB4NzFlOGFmYjYsIDB4YThlMzlmNmUsIDB4ODcxY2VkMTEsIDB4MTc0OWZiOTYsIDB4OTliZWY0MDgsCisJMHg5ZGI5ZjdhMiwgMHhlZWUzZTkwMiwgMHhlYjFmOWQ0YSwgMHgyZWY1NzgyOSwgMHg4NWQ1N2VlMCwgMHg0YzNmOWQwZSwKKwkweDE1MGZkNDE4LCAweGRjYTA3MWZkLCAweGEyYjk1MDJlLCAweDYzN2EyYTRmLCAweDcxZmI5M2FmLCAweGU1ZTc4YzE3LAorCTB4MTZiOTg2YjcsIDB4ZDg3ZDdjZTEsIDB4MTNmOTQ2MTUsIDB4YzY3Y2YxMjYsIDB4MDA5MzQ3OWMsIDB4ODEzZGY0NWUsCisJMHhmYWNiZmYxMSwgMHhjMWE3NDJhNCwgMHhjZWE1ZTZmYSwgMHhkN2JlMWI4YywgMHg0ZmE2NGRiMywgMHg4MzUyY2Y4NSwKKwkweGJmZDk0M2Y4LCAweGRkMzlmMzlhLCAweDFkZmVlMWQ3LCAweDdmZjdmYjhiLCAweGUwZjJmNGFhLCAweDdlZmY2MTc2LAorCTB4NDY2ZmYxMDgsIDB4MWZiZTEyMWQsIDB4MTlkMTViZmYsIDB4NGFmZjNlY2EsIDB4NWVmZTBiZDYsIDB4MjNkZWJmNTksCisJMHg3MmFmODgyNSwgMHg3ZGI4NzY0ZSwgMHg2ZmQ2NGViNSwgMHhjZTZmMmI4NiwgMHhiY2ZjN2FmZiwgMHhkZmRmMWU0NywKKwkweDhlNzc5ZjhhLCAweDlmNDNiZmY5LCAweGY1MGJkMDFkLCAweDQ3NzljN2ExLCAweGM2NGZjOTQxLCAweDZiODZiY2MwLAorCTB4NzM5ZTc0M2QsIDB4MWVjZGY3YjgsIDB4YjA1NWY1OTUsIDB4N2M3NDU1NzMsIDB4NDFhZjQ1MzQsIDB4YzM1ZGM4YmIsCisJMHhkMWNkMDNmZCwgMHg3ZWM5YWZkMiwgMHhmN2E1YWUzOSwgMHhlZjkyMWU1NywgMHhkNTc4M2U3MywgMHhlYTJkNjk0YywKKwkweGQ5MmU5MGM5LCAweGQ5ZGU5MjdiLCAweGM2YTM1MjVkLCAweGI3N2QxOWJmLCAweDM0YWFmZGY4LCAweGIxNTdlYjhhLAorCTB4NTUyYmYyMzIsIDB4ZjE5YjQ2NzUsIDB4N2M3MzdmYmMsIDB4MmJlNDMxZmIsIDB4YjRhZDZlZGYsIDB4YzZmZWIwM2IsCisJMHgyMzdkNzJkMSwgMHg0NGQ1YjdmNywgMHg2MThmZGZkMywgMHg5NTQwN2E0MSwgMHg1N2RmNTgyNywgMHg2NDUzMDVlYiwKKwkweGZhNzBkMTNmLCAweGMzYmEyZmMxLCAweGQxZTk1Y2I4LCAweDM5ZDc5ZjEyLCAweGQwNTVkZmY5LCAweGUwYjk3Mjc3LAorCTB4YmYyMzA4NmUsIDB4ODg2YmRhMDksIDB4ODIwZDY3ZDcsIDB4NWYzZGRmMWYsIDB4NGNmYmQ3MjksIDB4MTNmZjI1ZWMsCisJMHhjYWEwZDNjNSwgMHgyY2E3Y2ViOSwgMHhkNGRmYjIwZSwgMHhiYjk1YTNmMSwgMHgzMzcyNGI3ZSwgMHg3MzE0OGUzOCwKKwkweDBkMGI4ZTQwLCAweGQyMjY4ZGM0LCAweDYwOTU5MDc5LCAweGJjOWZlMjRmLCAweDVkZDI0YjcyLCAweDFmODBmZjM4LAorCTB4NzFkYzkzZjMsIDB4OTczMGZjYTgsIDB4ZmIyMjNlN2EsIDB4M2NlYmM5NzMsIDB4N2UyNDMzZmUsIDB4Yzc5MzNjZDQsCisJMHg5NWRkZjA4ZiwgMHhhNWM4N2UxMCwgMHhjNTFkOGYyMywgMHhiMzc0YTNiZiwgMHhjNzVkNTFiOCwgMHgzMjQ3YmE0OSwKKwkweGQyMDhmZjQ0LCAweDUxOGRhZTNiLCAweDhhNDcxOWZiLCAweGIyM2I4ZmRjLCAweDdmYTMzMDUzLCAweDhmM2NhNDZhLAorCTB4OWMzMWI3N2YsIDB4N2ZlOWVhZjQsIDB4Nzk0NThlYTgsIDB4ZjlkM2FjYTAsIDB4Y2Y1ZTdjYjksIDB4MDRhNTcwN2YsCisJMHgwN2Y4OWJiZiwgMHhlMzA2MWNkMSwgMHhmNTA3YzVmYSwgMHhiMGUyNDliZiwgMHhiYmYwOTQ2NCwgMHg2M2I0MDhmYSwKKwkweDc1NjFmZmNlLCAweDJmZWJjZTA0LCAweDJmYmZjNTIwLCAweDMxNjlkYWYxLCAweDJiZDIzZmE0LCAweDBmZDgyZGNiLAorCTB4YmZjODBiYTMsIDB4NDVhNWZiMmMsIDB4MDcyMzBmZDgsIDB4ZGZjMTM5ZmQsIDB4NmJiZjk3NmQsIDB4ZmM4NTMzMDYsCisJMHhmOGYzYWY5OCwgMHg2YjgyNzM3ZSwgMHhhNmNmYzEyNiwgMHhhNjFlZmUzMywgMHhmZmNlZmM4MywgMHhmZThkNzQwMiwKKwkweDJjMTgzY2EyLCAweDFhN2Y5ZmM2LCAweGJjNjFkNmNlLCAweGY1ZGUzOWE4LCAweGIzZDFmMTM2LCAweDA4ZjkwOTFhLAorCTB4OTMzOGE3YmUsIDB4ZmI0NGJmNmYsIDB4YzYxOTRlMjMsIDB4ZmNmNDBhNzMsIDB4MGNlYTQ2NWQsIDB4YmNiNDZiZDYsCisJMHhjNzYwMDk4ZSwgMHhiMDA5M2M2MiwgMHhlNmYxODA1OSwgMHg1M2FlMzkzYywgMHg2YzQ0Y2UxMCwgMHg2YjlkNDlmZiwKKwkweGY5OTdiZTEzLCAweDVmNjhiNzY0LCAweDhmNjA0YzRiLCAweDgzYmY3N2M1LCAweDgzODI0YmUzLCAweDM4OTVjNWM3LAorCTB4MWYxZjEyOTMsIDB4NjAyNGNlMmUsIDB4ZWU5YzA1M2YsIDB4ODcxNWI5ZjgsIDB4MjU3MzcxODAsIDB4ZTdiZWM0OWUsCisJMHg2MzU3MjBhNCwgMHhmN2NlODdiMSwgMHg0OGM4NTMzZiwgMHg3MThiN2ZhZSwgMHgyMWY5MjU5ZSwgMHhjODM1NDhlMiwKKwkweGQ1Y2YyNDYzLCAweDM5NGRjNTcxLCAweGZlOWQxMGFmLCAweDNkYzRmMWI1LCAweDFjYjdkODYzLCAweDEzZjNlMmZmLAorCTB4ZThmOGY3OGMsIDB4YjdiMjE2NGIsIDB4NTFlZmZhYmUsIDB4NWU3NmNmYjQsIDB4NDJmMGZkYTYsIDB4OGZiZTQxYmYsCisJMHhlY2ZkYzdkMCwgMHgyZmYyM2E5ZCwgMHgyZGJiMDA1YywgMHgzZDlmNjAzZSwgMHgzZGRiY2Y5YSwgMHhlODk1MzlkNCwKKwkweDU5NmY0MGZmLCAweDJmM2ZkNjA0LCAweDc3N2M2ZmU3LCAweDQ4ZDlmY2MxLCAweGJkMjJiZDk3LCAweGUzZTc4YjA3LAorCTB4ZDAzYjBlZDAsIDB4YmQ0MDRlMmIsIDB4OTc1YzViZTUsIDB4YjEwOThmZWYsIDB4ZDBmMGM2MmUsIDB4Y2JlNDRjZWYsCisJMHhjMDVmOTQ3YywgMHgwN2VhNjNlOSwgMHhkNzcyZmVkYywgMHg1OThhMzhmMywgMHg3MmVlMGI5NiwgMHg2M2MxYzkzZCwKKwkweGYxNDExNjI5LCAweGM1NDM1YjlmLCAweGE3ZWY1ZTU5LCAweDg1NmFhMzdkLCAweGJlMWNmNzQwLCAweGEzYTU5YzcxLAorCTB4ODJiN2RlNWIsIDB4ZDNlNWQzZmMsIDB4ZTcwZTZlNDksIDB4OWI4ODBlYjcsIDB4MTViN2NhYWIsIDB4MjM4NzljMGMsCisJMHg4MTU0NzVmZiwgMHhlMzFkYzY5OSwgMHhiM2MxMmMyOSwgMHhiZmY4Y2E4NywgMHg3M2I4NzVjNSwgMHhmYjNhMDg2YywKKwkweDY5NWZkYjE2LCAweDlmZGI2ZWZmLCAweGI2ZGRmNzkyLCAweDZlM2JlNmJmLCAweDc3ZGU2ZDdmLCAweGYxZGVlNzFiLAorCTB4ZjU3ZmUzMWQsIDB4Y2NmZjZlM2IsIDB4YWYzZjNjNzcsIDB4NzNmZmZmZTUsIDB4NzA3MDAzMDAsIDB4NWNmODNmOWMsCisJMHhkZmJjNzA0MCwgMHgxZjNlZmM3MCwgMHgzNjEwNmQ5NiwgMHg2YTQxNzdmNywgMHg0MmI1N2E4YywgMHg0NjJkNTEwMCwKKwkweDA4NzdhMmVmLCAweDcxZTI0ZDY2LCAweDQ2NjU4ZGIwLCAweGYwNjEwZWZmLCAweDVmMzI4MDdjLCAweDFkYjkwYjRiLAorCTB4ZThiZmNlNjEsIDB4NGU3OTg1OGIsIDB4YzU5NmY0NzUsIDB4MTI2YzlmYTIsIDB4ODJmZDg3N2YsIDB4MTMyYWNlZmMsCisJMHgxOGNlZjRjZCwgMHhmYmMwNGNkNCwgMHhhMTYxY2RmMSwgMHg3MjYxYWFlMywgMHgyM2VkYzM3YiwgMHhkYzk2MTdjZiwKKwkweGZlOWUzNjMxLCAweGZiYzg0MzZjLCAweGZlYzgyZjFkLCAweDIzMDc3MzQ3LCAweGE1MTMyNGJmLCAweGFmZDQ3OTg0LAorCTB4ZDBmYTgwOTQsIDB4M2YzYzIzODgsIDB4NzYzOThiYWEsIDB4ZGE1MjVlMTAsIDB4YTUwN2IyM2MsIDB4OGI2ZmM0MzQsCisJMHg5OThkZWYxYywgMHhmZTg2OWQ5OSwgMHgwYmQwMThlOCwgMHgxNGY4MWUzMSwgMHg4ZTI5MDVjNiwgMHg0YTdhYTY2NSwKKwkweGU1OGMxZjdmLCAweDMxZDE2ZGZkLCAweGU1NWJlZTgxLCAweGFjNGNmM2YyLCAweDllMmFhMGY5LCAweGViYWU4ZWY3LAorCTB4YzUwMjY1ZTMsIDB4ZmUyMzk2ZjMsIDB4ZTU3NGQyYmYsIDB4ODk5MzRjZWYsIDB4ZmYzN2U2MTgsIDB4OGNlMjk5ODAsCisJMHg0OGJkMjYyNywgMHg4OTU2Nzc3ZiwgMHhmMzMxYWRlZiwgMHg2ZWQxODcyYSwgMHgxY2Q2M2MwNiwgMHhiYmY0NDcxYywKKwkweGY3YTRkMGU0LCAweDc3MzNlOWYxLCAweDc1MGY2OGE2LCAweDE3ZjE1MTRmLCAweDFkZmQ5NjljLCAweDg5NDBiZjhhLAorCTB4ZjY1ZWZkNmIsIDB4ZmU4ODdjOTMsIDB4MjIxZmJhMTcsIDB4YWIxZGVhNTEsIDB4MjdmN2I2ZjksIDB4ZmMxMGQ4ZWYsCisJMHhmZWUwNDViZiwgMHhiOGFmZGYyMSwgMHhkZTljNjg3ZiwgMHg2ZTc4MTE5ZSwgMHhhZjNjYjM3MiwgMHhkYzc4YmFjYiwKKwkweGVjZjdmMTQyLCAweGVlMzNjNzkzLCAweDAxOTc2ZDExLCAweDRkNzFkMmY2LCAweGNmYjhmNDYzLCAweDA5NGE2YjhmLAorCTB4ZTFjMGI0YzcsIDB4ZjA3ZGUwZDcsIDB4MzVmYmQ1YzUsIDB4YTI4NWZhY2EsIDB4YjJiMWQ2YTMsIDB4OWZhN2EzMWYsCisJMHgxMmZmN2FlMiwgMHg2MGZmZTcxNCwgMHgzMGJmM2YyYywgMHhmMWUzOTBhZiwgMHgwODI0ZDgwMSwgMHgxYjEyYzlhZiwKKwkweDcxMWM3ZDUxLCAweDJhMWI1OThiLCAweDc2MDU1NDllLCAweGFjYjllMjMxLCAweGNjYWRlMzk5LCAweDM0OTc1NTc3LAorCTB4NzMzOWZiMTUsIDB4ZDMwOWJmYjQsIDB4YTliNDlhYTIsIDB4YmRhZjZmZTQsIDB4OWJmYTg0ZDgsIDB4NjNlNWRhZmIsCisJMHg0Y2JmOTNiNywgMHg3MTNkYTEyZiwgMHhlZmRhOWY0ZiwgMHhhNWEzMGFiNiwgMHhmZDI3ODRmMSwgMHgwY2RmNWE5ZCwKKwkweDcxZTNlYzkxLCAweDlmYTI0NDMzLCAweGIyMzBhYTk4LCAweDRjNzQ2MzVmLCAweDJlNzg0MjZiLCAweGNhOGE4YmQ3LAorCTB4Y2MyMmE2ZTMsIDB4M2U5MzQ0MTYsIDB4NDUyM2Q0NTgsIDB4ZTgzZjk3ZGYsIDB4NTE5OThiMDcsIDB4NzRmMzhmMWYsCisJMHhlMmFhZjhiMywgMHhjYzM1YmI0ZiwgMHhlN2FlMWFmMSwgMHg1ZDVmMWI1ZiwgMHg3NGJiY2VmOSwgMHg5NzE5NTRhZSwKKwkweDljNGEyZjMyLCAweGFhZjhiODc0LCAweDVkYzFjZTcyLCAweDJlNzU0NTdlLCAweDRmZjYyZGMzLCAweGI4ZTNmZjQ3LAorCTB4ZjJmNDY3ODMsIDB4ZmUzMzRiMzksIDB4ZmUyNTYxMWQsIDB4OGJmNWVlM2EsIDB4ZTI1NTc3MTQsIDB4NDVjZjZlYWMsCisJMHgzYmUxYWJkMiwgMHgwZTNmN2UzZCwgMHgwNjIxM2Y5NiwgMHhmMWUyMTdkZiwgMHg5ZWYxNTdkNywgMHhmZmVmMWU5NCwKKwkweGQ0YmVlOTk5LCAweGM1ZmRmMjFiLCAweGU2M2YxODRlLCAweGExY2RlOWJmLCAweGE3NmJjYmI0LCAweDk4Yjc5MGY0LAorCTB4NDVlNzc3NTIsIDB4Mzg3ZWQ3OGEsIDB4NTNlZjFkNTYsIDB4YjQ5Nzc5ZTIsIDB4ZDU2MzMzY2UsIDB4MGUwOTIzZTcsCisJMHhjMzY5Zjc4ZSwgMHhkZGM2YmZiOSwgMHg5N2JmYTNhMywgMHg0OGM3N2VlMSwgMHg3M2E0YmJmMiwgMHhmYWViZGQxOSwKKwkweDI0NmJhNGYyLCAweGYxODc1ZGUyLCAweDM4YmEwMGI2LCAweGUxODdiMGVmLCAweDlkZTc2MTNiLCAweGIzOGMzMGY2LAorCTB4YTczZWViOGQsIDB4NzUyZmYzYzcsIDB4ZmQxZWFmNjIsIDB4MTI3MTgwNjEsIDB4MWY3NDRkMWUsIDB4ZjdjZmM4YjgsCisJMHhkZmQwOTY3NiwgMHg1YzY5YmFlMywgMHgxMzZmZTNhYywgMHhlNTlmZmIxNywgMHgwMDIxMDE0MSwgMHgwMDAwMjEwMSwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDE3YjVmZjAwLCAweDY3NTM0YzVkLCAweGI3Yjc3Y2Y0LCAweDBiZGY5NmU1LAorCTB4NzIyMjNmMmEsIDB4YTI5ODYyYzEsIDB4YTc0MGMyZGMsIDB4YWM3NDE2MzEsIDB4NGE4YTVjMTMsIDB4NjZiNTAxMDIsCisJMHgyZDA5OTIyZSwgMHhjYmMyY2NkOSwgMHgwMTg5M2FkMiwgMHhiOGIyYzNkZCwgMHgyNmE5ZjM2NCwgMHg4N2I2ZTg4MywKKwkweDZlYWQ5M2ZhLCAweDg0MGIwYjU1LCAweGMzZTIyZTI1LCAweDUyYzk3MTljLCAweGJhMzMzMzBkLCAweGQ4ZGM2MjgxLAorCTB4ZGYzOWQ4NWMsIDB4ZDhiZGI1YmQsIDB4YTRkYTJjYmQsIDB4ZGYzZjNkMzksIDB4ZmZmOWRmMzksIDB4MDczMDAwMGEsCisJMHhiOTU2ZTdkYSwgMHhmODRjZTcwNiwgMHhmZmM2Y2ZhNSwgMHg0ZmE0M2QwZiwgMHhiZGRkZTM4YywgMHgxNzI2ZWI0YiwKKwkweDNlYmJmMWM0LCAweDAzNjkzNWM5LCAweGNlOWM1ZGY4LCAweGY2MDAyYjk0LCAweDFjNWFjZTg3LCAweGFjY2YxZjA0LAorCTB4ZWRmYzIxNzYsIDB4NGFiNWRmYzIsIDB4ZDJmNzgwM2EsIDB4ZWUyMDJkNGMsIDB4OTZhNjY2ZmQsIDB4ZDJhZmRlZjgsCisJMHg0ZmU5MDI3YSwgMHg4ZWQ3N2JkYiwgMHg3MDA0NWU5NywgMHgxMDZiNDE5NiwgMHhjMTJlNTVmOSwgMHhiOGUwODI3MSwKKwkweDQ1NDZmYWMzLCAweDI1YzA2ZTVjLCAweDgwZmNlOTM4LCAweGU4OWIzNGFkLCAweGQ5YTU1Y2M3LCAweGY1ZjQxMzdiLAorCTB4MDA2NzQ1MzksIDB4ZGFhZjM5ZTksIDB4MDlmNDg5YWMsIDB4MDZhMDE5YmIsIDB4YzE1YzBjZTksIDB4NTU2YmY2MjQsCisJMHg3ZmRmZGI4MSwgMHg0YTRmMmFkMiwgMHhkYmYxMWM3YSwgMHhlMDM2Y2MxZCwgMHgzYzgxNTBkZSwgMHhmN2M3MWU1OSwKKwkweGZjMDI4ZmQzLCAweGQ0MjI2NjZlLCAweGI5ZTk3NDAyLCAweGQ3NzI2NGI4LCAweDNiYWZhOGFhLCAweDUyODE2YTNmLAorCTB4NWM1YjRjYTIsIDB4ZGY1ZTMwYWIsIDB4MTJhY2ZkNGIsIDB4YmVmY2Y4NjAsIDB4MTcwNTY4ZTIsIDB4YTAxNzIwOTUsCisJMHhlMDM3M2Y0ZCwgMHhiMTljNWJkYywgMHgzZDdmYzAxMCwgMHg0Njk4Y2EwNSwgMHg0YWRmOTExMywgMHgyYThlMTQzZiwKKwkweGE3NjlkYTIyLCAweGI2ZTU3ODVmLCAweDRjMjdmN2ZjLCAweGNkYmExMWFiLCAweGJkYzI2OGZlLCAweGMzODI5ZGRhLAorCTB4MmVlZGM5OWEsIDB4NzkyMGNlNmQsIDB4MjEyZmNlMzEsIDB4Yjc0YmQzYTUsIDB4NTFjYzIyYWQsIDB4ZjQxM2U0MjgsCisJMHgwMjVhYzIxNywgMHgzNmFkYThkMiwgMHgwNDA2ZWY2ZSwgMHg3Y2ExYjA3ZSwgMHhhNDg4NTM5YiwgMHg3MGQ2OWRhMCwKKwkweDZmNTAwNDRhLCAweGRmMDQ1Mzk1LCAweGNkN2IwODhiLCAweDdjNDYxMjgxLCAweDJiZTcyNmYxLCAweGJmMTEzNjZmLAorCTB4MDQyYWFlNGYsIDB4Y2JlN2UzZjQsIDB4MDk0MTc5MTYsIDB4MzQ2NGRmYmYsIDB4ZjNhYThlMjEsIDB4M2M1MmZlZDMsCisJMHg5NTMxNzZhZiwgMHgzNGVmNmFkYywgMHg0MTkzZjFmMiwgMHhlM2Q2ZWU3ZSwgMHhmYzM0MzNiMiwgMHg1ZmY3MjE3MiwKKwkweGNiOWUwMTM2LCAweDhlMzgwMzFkLCAweDE4ZjY3Nzc2LCAweDc1NmVlZGNmLCAweDNmNzQ2MWRlLCAweDMzN2ZhMGY4LAorCTB4OTA0ZDgxY2EsIDB4NmJkZTg5MDcsIDB4M2IzYWEzOTQsIDB4MDAxZmYxOGQsIDB4NDNkNjI2NzAsIDB4MGQ0MWQ1MzcsCisJMHhlN2UxYzY0MSwgMHg0NWQ1MTNlOCwgMHg1ODJhMDYxNSwgMHhiZjM3M2YxMSwgMHhmOTc0NDY3ZSwgMHhmMDYyZmFmOSwKKwkweDUxMTdmMTBjLCAweGQ4MGQ1NjdkLCAweDAyNGRiZjI4LCAweGY1ZTEwMTk0LCAweDlmNDEyZDkyLCAweDllYjkxNTVmLAorCTB4ZmMwMTY1MGYsIDB4ZGUxN2Q3MjgsIDB4N2UzMGM4M2UsIDB4OTE1ZjhmN2QsIDB4NGE2ZTUwNWEsIDB4ZDJjYTk3YWUsCisJMHgzMmY3YjhlMywgMHg0MDE2NTNkNiwgMHgwMzZjZjBmNSwgMHg5ODU4ZmJjNSwgMHg3OTRkMTU4MSwgMHgyOGJlZjFmMywKKwkweDZlYjE3ZDU3LCAweGJjNGVhZDljLCAweDMxZGZlNmE3LCAweDNhNDRmOWNjLCAweDBkOWE4MWQ1LCAweDYxMjA1ZjlhLAorCTB4NTgxN2ZjYmMsIDB4NTVlZDEwNjAsIDB4NDkxYzNkMzUsIDB4YjJiOWY4YTMsIDB4ZWM4NTMyZDUsIDB4MjNhNTBlZDgsCisJMHg2YjEyNmRlZSwgMHgzYzJlZTExOCwgMHgxNjBlZjg0MCwgMHhmNmU3ZjA5MCwgMHgwMDViOWQyYiwgMHhkOGI3NTRlZCwKKwkweDViZGM1MmFmLCAweDE1YWFjYzNhLCAweDQwZGFkZTg4LCAweDUwNTk2YmY0LCAweGZmMTIyOTM3LCAweGM0YTk3YmM0LAorCTB4NTVhYTY3MmYsIDB4OWViM2JlMjEsIDB4NDQ1ZjhkZjgsIDB4YWRlN2FhNDQsIDB4Nzg2NWE1MTQsIDB4OGQyOGNiYjcsCisJMHhlYWMxYjM3ZCwgMHg1NTFmNTAwZSwgMHhmNDExYTMzNywgMHgzNTg3NDc2ZiwgMHg4NGI1ZmU0MCwgMHhjZTkwY2Q5YiwKKwkweGJlYTA0MWViLCAweGVkY2Y1YjdiLCAweDMyOGY0NWI3LCAweDA5OWY0OGEzLCAweDVmOTE2NzU3LCAweDE2ZDNjYzBiLAorCTB4ZWEzNTYxMTUsIDB4Nzg0MWM4MmUsIDB4YjAwNWJlZTEsIDB4YjRlMmJjMWYsIDB4NzNiOTQ2NDUsIDB4MDVhYzRjM2UsCisJMHhjNDlmNGJlMCwgMHg4MzI3Yzg2MSwgMHhkN2MwMzk2MywgMHhjMzBlN2NiZSwgMHgyZmQzODUzZSwgMHg4YzM5Y2FmYSwKKwkweDQ3MGU1NGY4LCAweGE4MzU2YjdjLCAweDk1OWUzY2NhLCAweGRkMDJmYmUxLCAweDcwNTlhNzI3LCAweDdlNmY5YjI1LAorCTB4Zjk2MjNlYmQsIDB4MjllZjBiYWEsIDB4YmEzZTdiYTYsIDB4OTM5NjJlZWEsIDB4NWEyMGM3YzgsIDB4NmFkNjE0MmMsCisJMHg2NzMwYzlmZCwgMHgwNmMzZTc1ZSwgMHhlODgxZTNiMiwgMHg2MGE3M2E2MSwgMHg0NjBkNjFiZSwgMHhlZjMwODQyMSwKKwkweGFhNmZlYmJmLCAweGQ5NmY5YjUyLCAweGYxOTNiODAyLCAweDA0ZmFmNDY3LCAweDNjZDAyMjg3LCAweGZhZDI0YjdhLAorCTB4NWZjNTc4N2YsIDB4NDg1MjllM2MsIDB4ZjMxZWIyYjksIDB4NDEzNzE5ZTYsIDB4ZDQ4ZmQyMGEsIDB4YmU3ZjczNmIsCisJMHg0ZjE4ZWI5ZSwgMHhjMGRkYjhjMCwgMHhjZjljMTI3OCwgMHhjYmY4YjU2ZiwgMHg3NGFkMWYyOCwgMHhhN2U3MjQ4ZiwKKwkweDBhYzRmYWY0LCAweGI0MzJiYjMwLCAweDRmYmMzMjljLCAweDYwMGU2YzQ3LCAweDhmMzBiMjIwLCAweDQ5MTYyMTFkLAorCTB4MTlkZjNlYzUsIDB4MjQ0Nzc0ZGUsIDB4OTZlMGMzZDgsIDB4ZDczYzdlNzEsIDB4NDZlNmQ4N2QsIDB4YjZmMzg5YTUsCisJMHhmOTI2OGQzMywgMHhkNTRhNWMxMywgMHgzNDU5MmNlMiwgMHhmNmQ1NmZkOCwgMHg4YjVkOTM1YSwgMHhiNTZlMGM3MywKKwkweDk0NzE3NTZiLCAweGZiZWIwNTlhLCAweDM4MTY3OWU4LCAweGE5ZTdmZDg4LCAweDczNGViYjE4LCAweGQwMDFjZjJjLAorCTB4OTNjN2MzOGIsIDB4ZDEzMTFlOWYsIDB4ZWY5OTBmM2MsIDB4ZDhlMzk5M2QsIDB4MGM4YTc5MWYsIDB4Mzc5NDM5MWQsCisJMHg0MWY2MjYwYywgMHgyNDA3N2U4MSwgMHg2Mzk0NmRjMCwgMHg2ZTYxMWM5MSwgMHgxOTJkY2EyNSwgMHg5ZjdkMjU5ZiwKKwkweDJmNmUxNWQ4LCAweDAxOTA1Nzc3LCAweGZlMDQ1MGJhLCAweDQ2NWYzNDgzLCAweDFhNzc1MDJkLCAweDYzOWQ3N2VkLAorCTB4M2JmYTkwNzAsIDB4ZjcwNTAyZTAsIDB4MWJmMWU4ZmQsIDB4ZGQyMTRmODcsIDB4YjRjOThlNzMsIDB4NTc4M2JhOGUsCisJMHgxNmVmOWVmOSwgMHg3OGZmNzgyNywgMHhiYzJkNzdjMiwgMHgzNTM3ODMxZSwgMHgwMjM5ODg3YSwgMHg0MDNhZjI0OSwKKwkweDZlZWQxZGZiLCAweDZlNjg3ZjQ2LCAweDA1MzAxZjc0LCAweGMzNmVkMDUyLCAweGJkYWZhZDM5LCAweDQxNDA0YjBlLAorCTB4MWRlOGFjN2MsIDB4ZTc5ZGYwOTEsIDB4MWNkMWU0MTksIDB4YTUxNjI2NTMsIDB4MTk4MGZmMTEsIDB4YWZkYzI1MDIsCisJMHhmZDg0YmFhNiwgMHhmYzg1NWY4NCwgMHhkOGNmZWQ4ZSwgMHhmNGMwZjFmZSwgMHg2YmQ1MjE1OCwgMHgwYTIzNTMyNywKKwkweDhjYjczZmRmLCAweDkyMmYwNWZiLCAweGVkMmZkZjFiLCAweGNkMzM2MWExLCAweDA2NDNkYzFiLCAweDg2OGVkZGI5LAorCTB4NzEzZjM0M2IsIDB4NGJlOTE4Y2YsIDB4ZjllN2RmMGUsIDB4NTNhZjI4ODAsIDB4N2UwNjJmZGMsIDB4ZTE2MzNkOGQsCisJMHg1ODA5MmM2ZCwgMHgzODczMTUwOSwgMHhjYTU1MzZjZiwgMHg2ZWFkZGYzYywgMHgxZjE4ZGNjNiwgMHg5MTc1NzA0OSwKKwkweGM5OTE3MDlmLCAweGM3ZTc2ZjM0LCAweGY1YWVkMWFiLCAweDQxOWZhMzQxLCAweGM4NzdlNjJmLCAweGQwYzdkNWEyLAorCTB4YTNmMDE2M2EsIDB4OTRhMjIzN2MsIDB4N2I4YmExZjcsIDB4MWNmZDBjZmMsIDB4NDBhYTYyYWEsIDB4OGMyMTIwZjEsCisJMHgzZTNkMTZjNywgMHg2ZTFmODAyZiwgMHg3MGE5ZmM0YiwgMHhlMDFhYWU2YywgMHgyYjYxYWMzNSwgMHg1ZWEzNTNkNiwKKwkweDZlMDEwMDBmLCAweGQ0ZTNmOWE3LCAweDhlMjNiZDA4LCAweDJhZjk4MzlhLCAweGY5Zjg5NzdmLCAweGUwNTU2NzdkLAorCTB4ZTgxNGQ0ZmMsIDB4NmJhZmQ2NDksIDB4NmFiMzc1ZWMsIDB4ZjMzZGM5MGQsIDB4N2IyZWQzZjcsIDB4NDdkM2Y3OTIsCisJMHgzYjIyNzZmOCwgMHgyNDRjZWQ3YiwgMHgyYmJlMzBiZiwgMHgxNWVmYmZhOSwgMHg0MTFjY2I1ZCwgMHhiNWM5ODFmNCwKKwkweDU5NzVjZThmLCAweGJlYTlhYjIyLCAweDFjZGM5ODFmLCAweGVlOTFmMThmLCAweDhiODJmZGExLCAweDkxZjUxNmVmLAorCTB4ODdjZjhjMDAsIDB4Y2M2N2U1MjMsIDB4YTI3Njk3OTQsIDB4MTI1YmVlYzcsIDB4ZTliOGUzOTcsIDB4MGFhMWZjNjksCisJMHhhMWVmZGFjZiwgMHhmZGE3OWFjYSwgMHgxN2ZhODY3ZSwgMHg3ZjU3Y2ZhYiwgMHgxZGJjYjI2ZSwgMHhhNDk3ZjlhMiwKKwkweGU3ZDI3ZTdlLCAweDk5MTJjMDFmLCAweDM4OTNjYmY3LCAweDY0ODdiNjgzLCAweGFhM2M3NWUwLCAweGE2N2VmNWVmLAorCTB4Yzg3YjQ4ZmMsIDB4MDYxOTlkZmYsIDB4ZWQ1Y2Y4OTUsIDB4N2ZmNGQwY2YsIDB4YzE4YmViYTYsIDB4OWJmNjFkNTEsCisJMHhmNmY5YjkzNSwgMHhmYzM5ZjQyNywgMHg4YTcxYzk4YiwgMHhhNGYyYmRlZSwgMHhkZjgyNGEwMCwgMHhhMGE5ODJhYiwKKwkweDE5NWRmODI0LCAweGY2ZTAzMWNhLCAweDdjODM2MmM4LCAweDgxYTk3OGY1LCAweGMyYjEzMzVmLCAweGJkNzM1ZmMwLAorCTB4MTRiZjgwY2EsIDB4NWY5MDY3NWQsIDB4MDFiZDZiZmYsIDB4YzViZDMwZGYsIDB4Y2ZmMWJmMjAsIDB4ZDYzYzA2NmQsCisJMHhiOTU4NzViZiwgMHg0OTM2ZTc4OSwgMHgwYWU0MWJhZiwgMHgxNTdlOGQzYiwgMHgyYWZkMThmNSwgMHgxNWZhMzVlZSwKKwkweDM3ZTI1YmQzLCAweGRmYWNiN2ZhLCAweGY2NGU1ZmU4LCAweGRlODU1YzgzLCAweDkxZmNmZmExLCAweDIwNjBmYjQ5LAorCTB4MzRmM2MzM2MsIDB4MTMwMjlkMzUsIDB4YThjNDQ3MzQsIDB4NjZjMjFmYjYsIDB4ZjBhNjE3YmUsIDB4ODRhMmUyZmYsCisJMHhkN2E3MmMzYywgMHgwOTE5ZGEzZiwgMHhiOWQyYjMyZiwgMHgyYjM2OWQwZiwgMHg1MTJlZGJiZCwgMHhmZTNlNjAwZCwKKwkweDJlNzZkNzA1LCAweDAwMGVlMDE3LCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGU3MzNmZjAwLCAweDUxZjg2MDYyLCAweDM5ZmJjMTBmLCAweDcxNmUxODE5LAotCTB4MDE0M2Y4MjIsIDB4ZDk0MzMxMTcsIDB4MTAxN2ZhNDAsIDB4NjA2NDYzYmYsIDB4YmM0OGNmNzgsIDB4MDQwZTM1N2UsCi0JMHgwMzNiMmY3YiwgMHgzZTIwMGFjMywgMHhmZWYwM2VjMCwgMHhjOTVjNDgxYSwgMHg0ZWJiM2Y0ZCwgMHg2MjJlZDFkMCwKLQkweDA2N2UyZWYwLCAweDBjMDIzZDg2LCAweDEwODI1OTBjLCAweDU0NDE3ZmZlLCAweDA4ZmNkZGY5LCAweDY1MTg5OGI2LAotCTB4ZjUwMTI5NzYsIDB4OTMzMjAwMDMsIDB4MDM4MDA5ZDMsIDB4MDAwMDAzODAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGUzZTNmZjAwLCAweDUxZjg2MDY2LCAweGI4ZDNjMTBmLCAweDcyMzYxODE4LAorCTB4MDE0M2Y4MjEsIDB4Njg0MzMzYjcsIDB4MDYwNjE2M2UsIDB4Yzc3ZTIwMDEsIDB4OWVmMGMwYzgsIDB4MzgzMzA0OTEsCisJMHgyMDdlZWMxMCwgMHgyNzg4MGFiYiwgMHg3ZGNmNTA3MSwgMHhlNTJmMTE0MywgMHg1ZjVkOWZhMSwgMHgxNTNkNzZhMCwKKwkweDgzN2Y3ODE4LCAweDAzMTA4M2IwLCAweDAzMzA5YjgzLCAweDg0MDhiNDgzLCAweDU1MDQ1ZmJmLCAweGMxMDg1MWRlLAorCTB4OTk0MTJlN2UsIDB4ZmE4MTlmNWQsIDB4YmJlYjhkMDEsIDB4MDAwMzgwMzEsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9wcmFtX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZDVmZjAwLCAweGM1NTQ3YzBiLCAweGJkZGNmOGQ1LCAweGVlY2RkZDhmLAotCTB4MjEwNzliMjYsIDB4MDg2ZTNjMjEsIDB4NGJjNjBhMjIsIDB4OWJhZGUxMDIsIDB4ODhiNDYyMDQsIDB4N2Q2MDhhODksCi0JMHg4NDIwMTgyZCwgMHg5NmQyMjI0NywgMHhlZGY3ZWQ3ZSwgMHg1YWIxMTA2MiwgMHg2OGRiMTUxYiwgMHgzNDEwNWRiMSwKLQkweDA2MGIyOGRhLCAweDJkZjA5ODBjLCAweGFhNTY5NGEwLCAweGQxZjU4ZGYxLCAweDkwY2JjOGEwLCAweGY4N2U4Nzg0LAotCTB4Y2U3ZmViNjksIDB4N2JiYmI5OTksIDB4N2M0ODZlZWYsIDB4ZmVmZGZiZjQsIDB4NzMwZWNmZTksIDB4MzM5OWRlZTcsCi0JMHg5Y2U3MzVlNywgMHhjOTJiMzMzOSwgMHgyMTBjYjEwMiwgMHhiYmY4MWJlNCwgMHgyMmFkOTA5YywgMHhhNDZjNjQyMSwKLQkweGU1YTIyYWVjLCAweDc5ZmM0MjE4LCAweDgxMjZjMDhlLCAweGFmYWVkMDkwLCAweDQyMzQ5MDhlLCAweDU0Y2QzNjRlLAotCTB4ZWM4NGQ5YWQsIDB4MmU4NDczY2UsIDB4MDMyN2VkYTcsIDB4NmQyYjAxODUsIDB4NzZmNmRlMmYsIDB4NGJlYjQ0YTIsCi0JMHhiNDEyODliNiwgMHhmMWQ5NzY1YiwgMHg0Mjc1Y2VmYiwgMHhkNmQ1ZWEwMCwgMHhkMTI2MDdiNiwgMHg5MTM2Zjc3YSwKLQkweDkzNWRhMDZjLCAweGQyNDJkMzkwLCAweDIzNjIzOTA5LCAweDYxNzU0ZmVjLCAweDU1OWRiZTdkLCAweDdkZGZhYzk3LAotCTB4ZDk1NzhjMmIsIDB4ZmE3NjI1NmMsIDB4ZDEyNjkxZmQsIDB4OWI2NWY1MDMsIDB4ZTNhMTAwODQsIDB4OGY3MWQ5MmQsCi0JMHhiN2Y2ODAzMiwgMHhlZDA0MjAyMCwgMHg3YTZmYWQyYSwgMHg4NDVkNTE1MCwgMHhmZGViYjVkYywgMHgyMTI3NzZjNCwKLQkweGEyMzY3YzI3LCAweGNhOGYzODJhLCAweGFhNDIyOGUwLCAweDA2NGE1YjAyLCAweDFhYWJlZmQwLCAweGZiNDJjZDA1LAotCTB4YWE3NzVhYWYsIDB4NmFhYmUwMTMsIDB4NjkxMDJmOTIsIDB4MWMxYThiN2YsIDB4YzZjMTFkNDQsIDB4NzhjMDg2ZmUsCi0JMHhiYzcwM2I3YiwgMHgxODMwZjI2ZCwgMHgzYmViZjJhZiwgMHgzY2MyMjIxNSwgMHhiNzdjMGY2NSwgMHhmMzAxYzI4NCwKLQkweGUxM2RjN2Q2LCAweDc0ZjFjN2FiLCAweDlhNzkyZTdjLCAweDViZGY0NzhlLCAweGMxYTA5Y2ZhLCAweDg4NWE5NzE0LAotCTB4ZGNlOGUwMTcsIDB4ODRmZDlmNjEsIDB4NTJiN2U2MTMsIDB4OWU4YWVlMTksIDB4MzBlZDljYzcsIDB4N2FjMGFhOGYsCi0JMHhmMDA5YzRhNSwgMHg4ZmU2NTdhZCwgMHhhOGI3ZjQ4YSwgMHhmODQ2ZjdlMSwgMHg3YmZhNzNlYSwgMHhlNWNkZGFhMywKLQkweGU5NDUxZjA5LCAweDhhYmQ0OGYwLCAweGY2OTA0ZjEwLCAweDUyODBhNDRiLCAweGY5ZTQ0OTdlLCAweGQyMzI0MjA3LAotCTB4NDg4MzUxN2IsIDB4N2ZhNDViNTQsIDB4ZmE0Mjc5NGEsIDB4OWI3ZmZmZDEsIDB4YzFlMjkzZmUsIDB4NmMwYWVhZGYsCi0JMHg2ZGQwOGVjYSwgMHgxNjY4MWI5OSwgMHgzNzY5ZGJhMSwgMHg1ZGQ0YTNhNywgMHg1ZWJmZGQxMCwgMHhhMGY0MDAzZSwKLQkweGRjZjlkNGYwLCAweGNiZTQzZTU4LCAweDRmYWQ3MmMwLCAweGQ2ZmRiYzQ1LCAweDdhY2IwMjM3LCAweDFmY2Y4NjlmLAotCTB4NzJjNzhkZjMsIDB4ZTU4M2NmOWQsIDB4NThhNTdjMWYsIDB4Zjg2NTdjMDYsIDB4NmNkZjA2ZGUsIDB4YmNmYTM3MmMsCi0JMHg1ZjQ5ZmNmOCwgMHhiZTBkOTYyNSwgMHg4Y2ZlN2MxYSwgMHg4ZDk2MDU2ZiwgMHg3ZjNlM2YzZSwgMHhjYjA2YjdjZSwKLQkweGNiMGVhZmEwLCAweDVhMmY0MGFkLCAweGY4MDJmOTM2LCAweDAzNWY3NmRlLCAweDIwYmVjZDk2LCAweDZiZTlkZjNlLAotCTB4OGU3ZWYyYzYsIDB4YTRjOWM0YzcsIDB4NDg3OGEyNTAsIDB4MjUzNzEwZjQsIDB4ZWU5OTQ5M2IsIDB4M2Q2OTk0MjksCi0JMHhkM2Q1OGNhNSwgMHgyYTE3ZjY2ZiwgMHhhNWVlOWViNCwgMHgwMTk3OGE3NSwgMHg1Njg1NDM4YiwgMHhjMzUwMWY1YSwKLQkweDkyZmYwN2RhLCAweDdkNjhkOTE0LCAweDBmYjU5ZmIwLCAweDY0NTNkZmJkLCAweDc1YTFmNWE3LCAweDNhZjg3ZGFjLAotCTB4YWQwMjUxN2YsIDB4ZjZiMDBmMGYsIDB4NDU0MzFiOGIsIDB4MzhiZjVhMGUsIDB4NWI3M2RhYzgsIDB4ZDY5M2IxNDgsCi0JMHg5ZWFjNDM3MywgMHhlYzUzYzA3NywgMHgzNmJjZjVhMiwgMHhjMGY4MmY1NiwgMHhlYjQ4OWM1ZiwgMHhmYmVjZWQwNSwKLQkweDUxMDExZDg5LCAweDYxZDJjNjc1LCAweDRlZGVhY2FiLCAweGY5ZDZhZDI4LCAweDEzNDhmNGFmLCAweGVmNTE1ZDY4LAotCTB4OGZjNTFhMjQsIDB4OTQ4ZjVhZmYsIDB4N2IyMWYxNDksIDB4YmZlNDNkYjAsIDB4MTQ5YmRiMDksIDB4ZTFiZmI2MGYsCi0JMHg3NmZhYzBhZiwgMHg4N2VkOGJkOSwgMHg1ZDU4NGJmZCwgMHgxN2ZiNjJmMSwgMHhiZDYyOWZmZSwgMHhiYjYzZjY1OSwKLQkweGQ1OGZhNTZkLCAweDBmYjYzZjE1LCAweGZiMDZiOTU4LCAweGIwMDcyOWRmLCAweDA3Y2FkNDdkLCAweDEyYTc3ZGIxLAotCTB4NTY4N2Y2YzAsIDB4NGE5OWU2M2QsIDB4Zjc4MmI1ZWIsIDB4YjQ4ZmMwYjcsIDB4YzAzOTI0YWMsIDB4MzI4Y2MxNGYsCi0JMHgwNWFiNGZjYSwgMHhmN2Y4MWIzMiwgMHgyOGU5ODBiZiwgMHg1NGNlYWU1ZiwgMHhmZWI3MGU1MCwgMHg5MDA5ZTBhZCwKLQkweDgzNGJmYzVmLCAweDdmMjdmY2ZhLCAweGZmZGY4ZDk1LCAweDY5OTFmYjExLCAweGZkZWY2MjNmLCAweGRlM2FiZGU0LAotCTB4YWJkZTRmZDAsIDB4MGQzZjdhOTUsIDB4YmRhZDVlZjAsIDB4N2Q2Y2ZkNmYsIDB4OWUxMWEyNzUsIDB4N2VmNGFiNTcsCi0JMHhhZTNjMjBiNiwgMHhlZjJiY2RiZSwgMHg3ODQ2YzliNSwgMHhmN2FjNWI1ZSwgMHg0OWUxMTNiMywgMHg0ZDNjMWJlZSwKLQkweGQzZjExYjZmLCAweDNmMTg3NmY0LCAweDdlOWUxMTdiLCAweGNjNjc4MzdkLCAweDhjZmM0NjNiLCAweDlmOGMyNzc5LAotCTB4NjY0ZmQ4MDMsIDB4N2E2OWZhZGYsIDB4YTY5Zjg4YzcsIDB4NzlmOGMyNzcsIDB4YTgzNWU3MWIsIDB4ZjMxYWYzNmYsCi0JMHg2MzNmMTFhZSwgMHhlN2UzMGRkZSwgMHhiYjI3ODQyMywgMHhmZjZjZmQ2ZiwgMHhlZDlmODhkMCwgMHg3M2YxODYxZiwKLQkweGEwYjlmYjE0LCAweGY4MmFmMzZmLCAweDgyOWY4OGM4LCAweGU5ZjhjMjhmLCAweGVhMmU3ZWM2LCAweDNmZGIzZjViLAotCTB4ZmI2N2UyMzIsIDB4N2NmYzYxNDcsIDB4ZDI1Y2ZkODksIDB4ZmMxNTc5YjcsIDB4ODI5Zjg4YzMsIDB4NjNmMTg0N2YsCi0JMHhkMTlmYTAxMSwgMHhmOWE3ODM3ZCwgMHg5YTdlMjM1MywgMHhjN2UzMGQzZiwgMHhlZDhjZmQ4MSwgMHg4ZmUzM2MxYiwKLQkweGZlMzNmMTE4LCAweDY5M2YxODQ4LCAweDQyN2RkMDAyLCAweDNlNjlmYWRmLCAweGYzNGZjNDYyLCAweDA2N2UzMDkxLAotCTB4ZmE1MzNmNjEsIDB4NDdmMWFmMzYsIDB4N2YxOWY4OGQsIDB4ZTE5ZjhjMzQsIDB4MmE0MmFmMzgsIDB4YTEwZjAwZjcsCi0JMHhlZTdhYjhmZCwgMHgyMzQ5ZTc2NywgMHgwYzllNzY3ZSwgMHhlYzUyZTdlMywgMHgyN2VkMWE2NywgMHgyNjdlZjdhNywKLQkweDMzZjExYTc2LCAweDlmOGMzM2IxLCAweDk1Y2ZkOGYxLCAweDY3NjdlYjdkLCAweDNiM2YxMWE3LCAweDI5ZjhjMzNiLAotCTB4ZGQ1Y2ZjNDQsIDB4ZWM0ZDc5YjcsIDB4NjI2N2UyMzIsIDB4ZmU0ZmMzMTcsIDB4ODljNTM1NWIsIDB4ODVhZTlkYjQsCi0JMHg5OTNmNDg5YSwgMHgwOGYxZTFkNCwgMHg1OWJhMmViNCwgMHgwNDZiNzQ1ZCwgMHhiNzUxMTJlYywgMHg0NzliNDgzNywKLQkweDFiM2JkZmE0LCAweDQ1N2VmMzkzLCAweGEyOGVlZGEyLCAweDhiOTc5ODcyLCAweDc2ZDE2MzVhLCAweDA0ZjhkMjQ3LAotCTB4ZWM5MzlkODMsIDB4NTNkNDMxNDksIDB4ZGUxODA3NGIsIDB4ZDQzNjU3ZWYsIDB4ZjY3ZmRlZDAsIDB4NGNmNjg2YzUsCi0JMHg5ZWExOWU2ZiwgMHhmMGQxMzk1NSwgMHgyMjlhYTBmZSwgMHg4YWM4N2Q0MywgMHg2N2VmMGNhYiwgMHhkNDM1YWZmYiwKLQkweGQ4ZmNkNjczLCAweDc1MDVmZWYwLCAweDE3ZWQwZDczLCAweGRhMTk1N2Q2LCAweDMzMmMwYTJmLCAweGZjMzY0N2Q0LAotCTB4NGJmZGUxODcsIDB4ZGExOTc3ODIsIDB4OTVmZTZkMmYsIDB4ZTg3NDdkYTEsIDB4N2YzZDQzMjEsIDB4Zjc4NjYzZmYsCi0JMHgzMDZkYjZjNywgMHhmODNiOGZiNCwgMHg0MjdkYTE4YywgMHg3ZDQzNTZmYiwgMHgyNjlkYjFkMiwgMHgzZWU5Y2YzYiwKLQkweDQ1ZDc5MjMyLCAweGVjYzI3YmUwLCAweGVkMDU0Y2ZlLCAweGMxNGI5MGJkLCAweDg5YzAzMmJhLCAweGQ3NmVmYzc2LAotCTB4YTUzMGY1N2MsIDB4NzZlN2IyYWYsIDB4MTdkMjhkMzUsIDB4YmFlODRhNjgsIDB4ZjJhMDM4NWUsIDB4ZmNmYTc2YzIsCi0JMHgxN2JkMTNhNywgMHg5ZmYzZTliYSwgMHhkZDRiZGUyYSwgMHhjYTUzZWM3MSwgMHg4MGM5MDIwZiwgMHg2OTQwYjU1MiwKLQkweDY2NDdiZjZlLCAweGY1OTQ1OGZjLCAweGY0NDNmMGY1LCAweGY3NGI2YWZiLCAweGI3NWE2NGYwLCAweGMwZjU4NTg4LAotCTB4MmMxMDdmYmYsIDB4MjIwOWE3YzgsIDB4MTJmNzgxYTksIDB4ODJmZDA0YWMsIDB4OWUwYmIyN2IsIDB4ZWJmMTQ3ZjAsCi0JMHgwZTU0NDE5YSwgMHg2YmJmNDg4NSwgMHhkODA2NmY2NCwgMHhiZTU2MWIxOSwgMHg2NDNiMDdlZSwgMHhhZjNhMjBmNSwKLQkweDIxM2M4NDAxLCAweDBmZjIxZWJjLCAweDlhMGZkZmEzLCAweGZkYTVlMTlmLCAweGE3NmExNTU5LCAweGQwYWY4ZjQ3LAotCTB4ZjhlMTQ3ZjEsIDB4NzNmZTMwMGQsIDB4MWQ2ZjhjM2QsIDB4YmUzMGRlM2EsIDB4NjFhNTcwNmQsIDB4Yzc0MjliN2MsCi0JMHg2MDdiNTM3NywgMHg3YzdjN2JlNSwgMHg4NDg5ODQ0YSwgMHg4N2JjMmYzYywgMHg1NzA3NWJlMywgMHgyOGY3ZjhlMiwKLQkweDFlODk1ZmQ0LCAweDdlM2MyMTNmLCAweDJlY2JjODMzLCAweDljNmM3ZjE4LCAweDY4OWQwZmY5LCAweDJhZTBmZjljLAotCTB4MzYxNWZjZTMsIDB4MGYyYjNkZmYsIDB4NzAxM2YxZjEsIDB4NDM4NTdiZmUsIDB4YWI4M2ZlNmMsIDB4YWNhZGZjZDgsCi0JMHg4OWY4ZjBkZiwgMHg4N2VmZmM2MSwgMHhkM2RhYmZmOSwgMHgxYjI2NzNmYywgMHhiMTY0M2ZlNywgMHgzNjU2ZmU3MSwKLQkweDhmMmIxYmZlLCAweDM4OWRmMWYzLCAweDcxYzI5YmZlLCAweDhiMjFmZjM2LCAweGVhYzU3YzcxLCAweDk0N2Y4MGQ1LAotCTB4MDA5YTg0YWMsIDB4YTQwYzlmMWQsIDB4YjAzZmE5OGEsIDB4Y2EwNzFkMGIsIDB4YTk5NDI5MTEsIDB4MzBiNWY5MDksCi0JMHg2OWY4ZTExNCwgMHgyZmI3ZTMwMiwgMHhhMWJmMjgxMiwgMHg3M2UzZjFiZSwgMHhhZDlhYTAxMiwgMHg5YzVkZmE4MCwKLQkweDE2MzUxN2Q3LCAweGIwOTdhMDJhLCAweGYzMmJmYTlkLCAweGNkMTVhODM4LCAweDU5MzdmMjIyLCAweDQwNWMwZDZiLAotCTB4MTY2Y2VkZTEsIDB4NThhZjUwZmQsIDB4ZmEwMDI1M2IsIDB4NmU0YWRhYWYsIDB4MjRlZjgzMmIsIDB4OWZlNzgyMTIsCi0JMHg4NmM5NzIzZSwgMHhjYjk5NzllOCwgMHg5MWYyNzU3OSwgMHgwYjc5MjhmNiwgMHg2NDQ1NTFmYiwgMHg2Zjg1MGQ0NCwKLQkweGQ4YzEzMDFhLCAweGVhNjNmZDQ4LCAweDVmZWExMTA3LCAweDBjZmQ0MDdjLCAweDEzZjI1OTQyLCAweDExZjc4ZDk5LAotCTB4ZGVhMDk3ZjUsIDB4NjgyNWZkNGUsIDB4N2UyNTY0MjcsIDB4MmI3YmJiNDcsIDB4YzY1ZmMyODMsIDB4NjI1OGZmZTEsCi0JMHhjZGYxZmFmMiwgMHhlNTRmYzA0MiwgMHg4ZjlmOGJmMywgMHhiNmY1M2Y0NiwgMHhmNDhhMGUxNSwgMHhmYzczMWMwOCwKLQkweDlkM2E4NmE5LCAweGQ0ZTgxZjk3LCAweGQ4MWFjM2JkLCAweDU1N2UyMDIwLCAweDhhMzk1N2MwLCAweGFmYjcyMTI2LAotCTB4OGViOGEyYzksIDB4MjUyZWZmYmMsIDB4ZmQ0NTI2N2IsIDB4ZjcyM2M0MGQsIDB4YjJkZmVmYTcsIDB4YTZlNDE4NWMsCi0JMHg1OGY0Y2VlMywgMHhlMTNhZDhmMywgMHg1Y2EwYjJjOSwgMHg3OGNiMmM5MywgMHgxYTZkYWU0MiwgMHg0ODFlZDMyZCwKLQkweGI4ZmU0N2I5LCAweGViZGM2YTNkLCAweDk5ZjU4ZDRhLCAweGE3N2FjNjY1LCAweDE0MmQ5MWVjLCAweDgxNzJjZWFlLAotCTB4Y2VmZGE3YWMsIDB4ZDc2YzZkOWEsIDB4NTI1YTcxYzcsIDB4NzhmOTlkMTgsIDB4YmUwY2U5NjUsIDB4YzFlNjUwNTksCi0JMHg3OWQyMzc2MywgMHhhYjdkOWJiNiwgMHhiYjdkNTNjMywgMHhhMDU4NWQ0YywgMHgwMTFmYmZhNywgMHhmMGQzZmFiYSwKLQkweGQ5YmIxZmJkLCAweGNlZjBjZGJjLCAweDMyOWU2ZDk2LCAweDczZDljZjNhLCAweGI3ZjAwMGM0LCAweGVmYmZmZTE5LAotCTB4YjkyYzc4NzIsIDB4YjBmMzVjYjQsIDB4ZjNiMTJjNGMsIDB4YTM3ZmMzMzEsIDB4YTA5ZjNjZDcsIDB4NGRmMGViMGMsCi0JMHg4Y2U3ZTY5NSwgMHhmYTcwOGU2ZiwgMHg0MWZjMGM3ZiwgMHgxZmMwYTNjYiwgMHg5Y2MzZmUxNCwgMHg5NTdhMjIzZiwKLQkweGQ1YjU0N2YxLCAweGExZjgwMzNiLCAweDIwOTE1MWZiLCAweGRjYmYzOTVkLCAweDVlNjVmOWMwLCAweDA4MmY5MTlkLAotCTB4Yzc0MGNhZjEsIDB4YmM4NWIzMDUsIDB4YzFmMTQ1NWYsIDB4MGIwN2NlMmMsIDB4NzM3YzhkZWEsIDB4OTljYmYxMGIsCi0JMHhlMzcyZTg3MSwgMHg2Nzc3ZjVkYSwgMHhmYmYzYjFhOCwgMHg0ZGNkZjM5MCwgMHhmYzQ2ZWZmNywgMHhkMTkzY2VjNCwKLQkweGE3NGU1NmU5LCAweGVkOGM2YTViLCAweGRlYmE3MDM3LCAweGJiM2FlOWMyLCAweGE5OTdjMWZlLCAweDU2M2YyMGZhLAotCTB4N2JjODMyMDMsIDB4N2E3NDJmZjUsIDB4ZTllODFiYjYsIDB4YzMzNGY0ZTUsIDB4ZTdhNzJiNzksIDB4ZjQ2NzNmYWQsCi0JMHhjZWRiYzMzNCwgMHg3ZjVlZDllOSwgMHg2MzQzMjY0NiwgMHg3N2MzMzVlMSwgMHhmOTk4OGFkYiwgMHgzOWNmNDAyOCwKLQkweGFjZjRmOGZlLCAweDNkNGMyZTZlLCAweDQ5N2NmNTFjLCAweGMzZDRjYWYwLCAweGE4YjY3MjUxLCAweDVmNTBkY2ExLAotCTB4ZjBkMWI4MTgsIDB4MzlmYTgyZmUsIDB4NzU3OWY2ODYsIDB4YjdlZDBkMGIsIDB4NTBjM2I5YWYsIDB4YjlmZmUzOWYsCi0JMHg1NmRiZmRlMSwgMHhkZmI0MzRhYywgMHhhMWFmNzM1MiwgMHgwN2NhYTZmZCwgMHhiZDFiZjUwZCwgMHg5ZmRlMWE4ZiwKLQkweGExYmQ3YjM1LCAweGQzZDk2NjdkLCAweDRhZWJmNjg2LCAweGU1ZWExOGI3LCAweGY3ODYxZDllLCAweDg3MGI1ZDg1LAotCTB4ZWFiYWUzYjQsIDB4ODg3ZjYzZmQsIDB4NDU2N2JlMjcsIDB4M2JlYjM1M2UsIDB4ZjYxZTJmNWQsIDB4ODhmY2Y4YTksCi0JMHhjNzk2MDQ2ZiwgMHgzZjNlMWE3YywgMHhlNThmMWJlMSwgMHg3NGRmZDA0YSwgMHg2MGVjYjA1ZCwgMHg3MzQzZjU2NSwKLQkweGUyYTNiODg2LCAweGRhYzg5ZjFlLCAweGJkYjNkMDYwLCAweDdkZmQ0M2U5LCAweDdmYTNkZWIzLCAweDE0ZWNmMTU5LAotCTB4OTAyYzVjYmQsIDB4YmIwNzU4MzIsIDB4M2ZhZDFkYjgsIDB4NDlkN2M1M2YsIDB4Yjk0MmVlNDIsIDB4YjkzMGFjNWMsCi0JMHhiMzM1YmM1ZCwgMHgzZDQyMjQ4OCwgMHg0ZTI2YmMzNCwgMHhjZjJjMjY3YywgMHgzM2U3MDE0MSwgMHgwMGM3MmVhZiwKLQkweDkxZmE4MmU3LCAweGUwMzZmODI2LCAweGY5MDMwYjM4LCAweDFhOGJlNzg2LCAweGViYmUxOTI2LCAweDdjMjIyZGQ4LAotCTB4MjdjNjQxNGIsIDB4YjY1NjcyYzAsIDB4ODVmMDAyYzcsIDB4ZWViZTBlZjYsIDB4YjNkNzgwMTIsIDB4NGJlYjAyZDcsCi0JMHhlN2I0M2Y3MywgMHhhOWE1N2MzYSwgMHg3M2MwMjU4NywgMHg3Y2M3OTYxOSwgMHhlMjNjYjFiMywgMHhkODc5NjJmMywKLQkweGM3ZTU4OTU3LCAweGRiMmMxYWJlLCAweGZjYjAyYjdkLCAweGYyYzdlN2M4LCAweDJjMWFkZjAzLCAweGMzYWJlZWZmLAotCTB4MWVhZmEwZjIsIDB4MDE3Yzc3Y2IsIDB4MzVmMmRmMmMsIDB4MmY4NmY5NjAsIDB4YWY5YjY1ODgsIDB4OWY0ZWNiMTksCi0JMHg1ZTVkNGIwNywgMHg0ODY1ZjhhMiwgMHhlOGJmMTQ2NiwgMHg4ZmQ3NGZmYSwgMHg5Y2JmMzhjNywgMHhjNzg5N2UwMCwKLQkweDdjOGMxYjE3LCAweDQxYWU1NDcxLCAweDQzZWIzMGJlLCAweGZhY2MxZDMzLCAweGMzZjJiYmVmLCAweGRiYjMwYjU4LAotCTB4NDQzZjJmYmUsIDB4YTI2NTlkZTgsIDB4ZjQ2ZjRlNzcsIDB4YmQxNDYyMjYsIDB4MGNkYzVhYzcsIDB4ZmJlZjRlMWUsCi0JMHhmNjM4ZGUwMCwgMHhiOGIwMjVmYSwgMHg4M2IyOGJmNywgMHhmZjE2MGUzYywgMHg2YTdhNzFlNSwgMHgyZmY4YjIwMSwKLQkweGJlOTZiYjFmLCAweDUyZjY4NmRiLCAweGUzZTgwNDYwLCAweDc3ZmUyM2QzLCAweDRmYjdjNDM4LCAweDY3NTJiNDFmLAotCTB4OTlmOWU3YWEsIDB4MWUyM2Q3ZTksIDB4ODZmZDA3ODgsIDB4MjhiYTAxZjksIDB4ZGJiNmM3ZTQsIDB4ZWQ1ZTE4MTMsCi0JMHhlODRhNTIxNiwgMHgwNWVmNzE3YSwgMHg0NzczNmE0ZiwgMHgyOTIyNWQ2MSwgMHgyYjQwN2RmMCwgMHg5N2U5YzU3NywKLQkweGRmODBhMGRhLCAweGViNWFmMGRlLCAweGZhMTcyMmZhLCAweDU3ZDhmMjNiLCAweGI1OGU1MDA1LCAweDYxMzQzYjMwLAotCTB4MzBmNjg4YWYsIDB4MDFhMTNkMDksIDB4ZGVmYWMzN2UsIDB4ZGM0MDY1YWEsIDB4YzUwMmZiYjgsIDB4YzA3MWViOGQsCi0JMHg5ZjlmYzQ2OSwgMHhmODIyMGJkNiwgMHhhOGUyOTdiYiwgMHhiYWIzZDcwZCwgMHhiMGRmYzQwYywgMHhmNjY3ODYyZiwKLQkweGU5YmQ3ZjAxLCAweDM5ZjBkZWM5LCAweGRmZTAzMDM3LCAweGY0ZGVjZjgyLCAweDhiN2E2ZjU3LCAweDlhZTdkNDc4LAotCTB4NzZiYmZjZTksIDB4MmJmNzkyNWQsIDB4NTBkNGY0MTUsIDB4ODBmNGZmZTYsIDB4YzdiZjdkNmYsIDB4ZjAyNTRmMGMsCi0JMHhmM2JlZDhmMSwgMHhjZWJhNTc3MSwgMHgwOTgzNmRjNywgMHg5MDZkZTcxZCwgMHhlOWZmZGExNywgMHg4MDkzMGJhNiwKLQkweGI0MWZiNDJlLCAweDcxYjdiYmJiLCAweGJhMTdiOWZiLCAweGY2MzZjYzllLCAweDJmZTVjZDU3LCAweDQyOTI1ZmRjLAotCTB4YjhlOTRiODQsIDB4NDkyMTQ1MmUsIDB4YmQxNjFkNzQsIDB4MWJmNDQ0MmIsIDB4ZjgzZjc2YjQsIDB4NWExY2JiZTMsCi0JMHhkOGZlMGFhZCwgMHgyYTQzNTc4OSwgMHhkYmY0NjhmNCwgMHgyMjdmZWY0ZiwgMHg2NTliZmMxMSwgMHhlMWY3MTYxOSwKLQkweGNiZDQ3NDM4LCAweGI3NmNjMTI1LCAweDY4MGZkYTMzLCAweGQ3NGZkNjM2LCAweGY0NDFhNTA5LCAweGViYTRkNDkzLAotCTB4YzA3NTgxMmYsIDB4MGMzYzNlZWQsIDB4OTYwNjcyZjQsIDB4MzJjYjNmN2EsIDB4NTRlMWY3MTQsIDB4MjNkMzNmYTQsCi0JMHg2N2E4Yzk4ZCwgMHhmODZjZjg0ZSwgMHg0NzBkMGZkZSwgMHhlMDQ0ZmQ0ZiwgMHhkMDlmMjI2OCwgMHhkZjE0ODFlZiwKLQkweDdlZmNmNGU0LCAweDlkMjA3MjhmLCAweDQ4NWUyMDU1LCAweGMwMmZlNDVhLCAweGZmZDNiMzdmLCAweGZkMGExOWJlLAotCTB4ZmJkNzU4NGEsIDB4N2U4YTBlYWQsIDB4YmNmMGE1ZWIsIDB4ZmQxZTMwZDEsIDB4MzJmN2Q1NGUsIDB4ZTU5ZWJiZTEsCi0JMHg3NDQ3MjI0ZCwgMHhkYjc0YTc3ZSwgMHgxNzViZjdjMiwgMHg0NmRkZDgzNSwgMHg1MGQ5MzBiYiwgMHg3NGNlNmVhZiwKLQkweGY4NDRlYzFiLCAweDk1YzIxODA3LCAweGI3N2MwNDgyLCAweDk3NWRiMzk4LCAweDdjMDM1Y2U0LCAweGUzMDQzZjc0LAotCTB4ZjYwNWRmODAsIDB4YmI1YjEyZGUsIDB4NGM1MTU1ZTIsIDB4ZTcyZjgwZGEsIDB4NWVmOWQ3OGUsIDB4ZDUzZWY1OWQsCi0JMHg5MTVmYzc0ZiwgMHhmOTE3YzgwOSwgMHgxMDU1NDI5YSwgMHhhMGFlOGZlOSwgMHhiN2ViNDJjNCwgMHhhNmRjZGFmMywKLQkweGJkNjFkMzQ1LCAweGY2NjE2ZTNhLCAweDRiMjkwNTc4LCAweDkyYjM3ZjA0LCAweDdjNDAxNWQ0LCAweDk0YjEyNGYyLAotCTB4MjQ5ZTVjODIsIDB4NDdlNjI0NmYsIDB4YTJmYmUxYzksIDB4YmVkY2YwODIsIDB4NTMxNzY4YzYsIDB4NWY1MGQ5N2YsCi0JMHhjZmFjNmY1MCwgMHhjM2E2ZDcyNywgMHhiNWZjZjJiZSwgMHhhMDA4MDkzMiwgMHhhZmVkOGMyZiwgMHgxNjhlNGM4OCwKLQkweGIwZDU5YTkwLCAweGQ5OTVhZmJlLCAweDRkZDczNjNhLCAweGRmMGEyY2E0LCAweDJmMWUxNzkyLCAweDFmZWI0Mzk4LAotCTB4ZDMxZWNjOGIsIDB4YTYxNzQ1ZjcsIDB4ODJhYmY4MzAsIDB4NmQwZjE1ZWIsIDB4ZmYyOWE0ZmYsIDB4ZTg3OWFhMDYsCi0JMHhiMGQ1ODFmNywgMHgwOWI3Zjk1ZSwgMHg5NjM1MjZkYSwgMHg3ZTE2ZGY3ZSwgMHhmYWZhYmMzMywgMHhjYjNmYjMxZiwKLQkweDIwZDI1OGUxLCAweGVjNzEwMjc4LCAweDBlYmU2ZTgwLCAweDRkMmU3YWViLCAweDA4ZTIxYjcyLCAweGUyYTNkNDJhLAotCTB4OWY5OWRmMGMsIDB4OWY4MTg4ZDIsIDB4MzZiZDE3ZWUsIDB4MWZlMzFmYTksIDB4YTkwNGE3ZjAsIDB4OWY3ZWYxNWIsCi0JMHhmYTYyMzNmZSwgMHhmZWM2OTM0ZiwgMHhhNDBmZmQ4MCwgMHhmYTE4MTdmZCwgMHhmODUwN2Y1NywgMHgzZmMwYzU4NywKLQkweDRiZmY1ZTJhLCAweGJiNzY3ODVlLCAweGFhOTNlYTlmLCAweDEyMjQ4ZmNkLCAweDk3MWUzZWJhLCAweDRhMzVkMmVhLAotCTB4ZWU5YmM1ZGYsIDB4MWYzYTA0NGUsIDB4YzA4OWZjOTMsIDB4NjIwM2M3YWYsIDB4N2FjZTIwNjksIDB4ZTlkMjU3MzUsCi0JMHgxMDBhNzFlZCwgMHhkMjdmODJjNywgMHg3MzNjNGZmZSwgMHg1ZmY3ZmExZiwgMHgxOGRkOTI2YywgMHg4NmIwNmE5ZiwKLQkweDk3MWU1NGFjLCAweDRlOWMyZDM2LCAweDg4N2ViMTcyLCAweDI1MzllZmQ1LCAweGM4ZDliZDQyLCAweDNkNGY1NTdmLAotCTB4MGFmOTBlOTIsIDB4YmM3ODUzOTQsIDB4ZWNmNjg0MjYsIDB4OTY5ZjhkZDIsIDB4YmE0NGJhZTAsIDB4ZGZjYzhlNTEsCi0JMHg1MmU3ZjhjMSwgMHg1MWNkZmY1MCwgMHgyOWRiNjI5MiwgMHg1Nzc3ZTg5YywgMHgzNzU0YmM3MywgMHg0YzRhNzdkZCwKLQkweGEzYjU3Zjg0LCAweGJmN2U2YzNmLCAweGQ3YTVkYjkyLCAweDIzYjRhZTQ5LCAweGUzMjcwNGQ0LCAweDg3ZDAzOGM4LAotCTB4ODA0ODNlM2EsIDB4MGJlMmE1ZDksIDB4MWM0MmU3OGYsIDB4MmJlMzYzYjIsIDB4OWUxNDQyODksIDB4MWQzYTM5NzQsCi0JMHgzYjhmZmRiYywgMHg2ZGY1OWVkNSwgMHg2OGIzOTUyNywgMHhhZjVmNDdmYiwgMHg0ZjZlNjZkNCwgMHhiMTcyYjBiNywKLQkweDQ0OWM0YTFjLCAweGY1ZTJlMGY1LCAweDhmYTdlNmIyLCAweGM0ZmIzZjE3LCAweDVjNDE4ZjkzLCAweDc2YWIzZGYwLAotCTB4ZDE3ZmVkMDEsIDB4MzNiZjJmYjMsIDB4NmQxN2Q2OTEsIDB4YjNhNmQzOTEsIDB4ZjQ4NTM4NjksIDB4ZTlhYTVkMDgsCi0JMHgyMmYyMmI3ZiwgMHhmZTdhYTg3NCwgMHg4NGJkNDU2NSwgMHg0YTY1ZmYzZCwgMHhiNjhiMWU4NCwgMHgyNWM4NTZlYywKLQkweDBlMjhmOGIxLCAweDlkZGE1NmVlLCAweDNjMTJlODcxLCAweDgxZjYwMjU0LCAweDE1M2ZjMmY4LCAweDVkZjFmYmEwLAotCTB4MWQ5ZmU5MDIsIDB4NWZlYjlmMDcsIDB4ZjAxZmY1YzYsIDB4NzRlNDc0ODQsIDB4ZjRjZGQzMGEsIDB4MGJhNTM1N2UsCi0JMHg0ZTlkNmJlOCwgMHg1Y2IxZjZlNiwgMHhlYTdmNDBiZiwgMHhlN2U3ZTQyOCwgMHg1NGZjNTI3NiwgMHhjMWFhZGRmZSwKLQkweGJiOWYyYmZjLCAweDcxZTYxMTMzLCAweDdjNjFhYTU0LCAweGU5ZGRmOGZkLCAweGE1NmUzYTFlLCAweDYzNzc0ZmVjLAotCTB4ZmU1NzllYzksIDB4NmZjODI3ZTEsIDB4NDlmZjVlMGIsIDB4ODg2N2M2M2EsIDB4NmI4MmQzMjcsIDB4ZTYxMzNmOGYsCi0JMHg0Y2RkNmYzNywgMHhlMjdjZGY5YywgMHg3Y2FiYmU0NSwgMHhmZDAzMmM1YywgMHg0YTQ0YjlmNywgMHg4YjkxYzRiNywKLQkweGUzYjMxMjgzLCAweDA2YTA2ZThlLCAweDUxZGY5ZDE4LCAweDdlNjBhY2JhLCAweGU2MjIxYmNhLCAweDA3NzIxMTI5LAotCTB4MDlmZmY5MDEsIDB4MTBiNTBiOWYsIDB4OGRiOWZlYjAsIDB4YTRiMzY5ZDEsIDB4Y2FkNDYxZmIsIDB4OGRkN2U2OGMsCi0JMHg3ZDAxYjRmNywgMHhmNGYyMGM0ZSwgMHg2YThiN2Q4NywgMHgzZTM5ZjkyMiwgMHhiZjY4NmY4NCwgMHhmYWQzZWJlMiwKLQkweDU1NTBmYTMzLCAweGEzYmZjMDViLCAweDNjMzE3Y2ViLCAweDY0ZGJmNzg3LCAweGYwZDczZDhmLCAweDNiMjZmOTFkLAotCTB4M2U3MmZlMzIsIDB4MDEzYjg1M2UsIDB4ZTlhM2U3ZDYsIDB4NDk1NGVkZjEsIDB4ZGFmODc0MTYsIDB4NDU3ZjE0NDgsCi0JMHhmNzkzMzdjOSwgMHhmOTMyZjc4ZCwgMHg1MDNkZTVkNiwgMHg2N2VkMGE1ZSwgMHgwM2YyNjJkZiwgMHg0N2ZhYzFkZiwKLQkweGM3ZjUwYWUxLCAweDBiZDdkZGY2LCAweDI0YWMwZmE4LCAweDM3YWU0ZjE0LCAweDhkYWU1Y2NhLCAweDUwOWYzYWVkLAotCTB4MjkyMTI1YjgsIDB4ZmZhMDVmOGEsIDB4ZWUzZmM0MTQsIDB4NGI1ZmNjNTcsIDB4OTdkMjhiYmYsIDB4NjI1ZTMwZDUsCi0JMHhkY2JhN2Y2YywgMHhmZmYyZTAyZSwgMHhjOGZmYzgyNiwgMHg3NTkzZmM4OCwgMHhiNjdiZWU0YywgMHgxN2E4ZmM5ZiwKLQkweDI3ODFjYjE3LCAweGE1NzkwMzFmLCAweDQxNTdlOWYyLCAweDk4MzJlNTVlLCAweDdiOGQ2N2Y3LCAweDk1MzFmOWRmLAotCTB4YmE4MmNmOTMsIDB4YTdmNTFhOWMsIDB4YjcyYjRlNTksIDB4ZTRmMTI1OGUsIDB4NDZhNzMzZjQsIDB4N2QyOWNhZTIsCi0JMHg5ZDRlNTcxZSwgMHhmZmM3YzhlZCwgMHhjNzUzZmE1NywgMHhmYzI2NTdkZiwgMHgyN2IwZmFlOSwgMHg2MWY1OWEzYywKLQkweDNlMjJhNGJkLCAweGZlOTBmYWNkLCAweDYyMGE0NWJkLCAweDNiZTc0ZmY5LCAweGZlYWFkZjlkLCAweGU4MDg2NGI0LAotCTB4ZWE1ZjMwOWQsIDB4NGJlNjE3N2MsIDB4ZTI2MmVmOWQsIDB4OTlmYzA2YTEsIDB4MTg4NjVmZGIsIDB4ODE2Yjg1MTAsCi0JMHhmMDMyZmVhZCwgMHg4MDlhNmMyMywgMHg4NzYxN2U3MiwgMHg2Y2VlZjMwNSwgMHhiZmY0MDQ2MywgMHg1ODRiZDQ0NiwKLQkweDFlZTJkZDdmLCAweDhjZTg3NjBiLCAweGY2N2MyZjQ5LCAweGVkZWRmMjczLCAweGJlNWFlZmZmLCAweDMwN2I2M2UwLAotCTB4ODYxY2EwM2IsIDB4NzRkMTRiZTAsIDB4ZTBjMmQ3MWMsIDB4MDI0MDNlYWMsIDB4NzgxZjUxNDMsIDB4N2YyOGIyYzQsCi0JMHhmNzk3MGU3OSwgMHg5YWQ4M2UxNywgMHhlYzJjNzgwZiwgMHg4ZWQ0OTUxYSwgMHhmYTMwNzI3YSwgMHg2ZjVjZDU5MywKLQkweDQ5YWJmNjljLCAweGI3NGY0ZmEwLCAweDc4YmZhMGU0LCAweDhhZThiZjdhLCAweDM0ZjdmZjk3LCAweDIwOWZlZmE3LAotCTB4YWVjYjQ2M2UsIDB4YTQ0ZWE0OGQsIDB4YmE0NWQ2ZmMsIDB4NmZmMDZlZDEsIDB4NzE0ZDkxYjQsIDB4Y2JhNmFmZjYsCi0JMHg1ZjdlMmY0YywgMHgwMWZkMDA3YywgMHhkYmRiNGYxZiwgMHhkOGUyY2E0YiwgMHhmOWYyYjdiMSwgMHgyNWYzZDhjZSwKLQkweGI3MTc4ZmFlLCAweGJkODBiN2FjLCAweDhiNDZmMTc0LCAweDQxYmZlZmMxLCAweDQ3OWQ3Y2U2LCAweDY3YWY4MGYyLAotCTB4YzZiYmIxZWMsIDB4OGJmNzFlMDAsIDB4NTY0OWU0MWEsIDB4YmM1MjljYjcsIDB4ZjM0MmZjNzEsIDB4YjA3ZmExZmMsCi0JMHhkZDkzZWViNywgMHhjYTJmNGZjOCwgMHgwZjAxZGJjMSwgMHgxMWI0OWUyZiwgMHhhMWRiMmZkOCwgMHgwNzhhMmRkNCwKLQkweDgzMGE5ZGU3LCAweDQ2NjFjNzczLCAweDJmMGExZjk3LCAweDUwY2U1ZDg1LCAweDM2NzNjNDExLCAweDU4ZGJlNDEyLAotCTB4ZjNlNDEzM2EsIDB4YjAyNDBkZDMsIDB4MmRlODFiMzIsIDB4YzEyMzdhYjIsIDB4Y2EwYTU3YmMsIDB4NzdjMzI3YWYsCi0JMHhhMzVlZDM1ZiwgMHhlNmMyZjNlNCwgMHhlODEyN2YyZCwgMHgwNDViNGI3YiwgMHgyZmI2ODViNywgMHhlMDE1ZGE5NSwKLQkweDY0ZTZlYTk3LCAweDY4ZDhmNDExLCAweDc0ZmZjZjU1LCAweDE0N2Q3MjVmLCAweDRiMjdkZGZmLCAweDEzYmQ5Nzg4LAotCTB4ZjAwOWJjNWYsIDB4MjE0M2E2NzIsIDB4NzllZmNmYjAsIDB4NjhmMzFiYTksIDB4MjNlNGI0Y2YsIDB4YWYzNGY1YmYsCi0JMHhiMmU0N2RlNywgMHg0M2Y0MTJhOSwgMHgzYTY2NWYxMCwgMHgzMDRjNmE4ZSwgMHg3YjE1MjdkNCwgMHgzMzVjMDAwNywKLQkweGI1Y2JlZGFjLCAweDJiYjc3ODM4LCAweGExZmRlZWNjLCAweGIyYjdiM2U0LCAweDk2ZmJmMmNmLCAweGIxNWViZjJlLAotCTB4ZmVlZjhhMmMsIDB4ZmRiZjJiMWUsIDB4YjJlZmM5ZTMsIDB4OTg3ZjZhOTUsIDB4OWNkNmIyZjcsIDB4NjVjZjgwZmUsCi0JMHhjNWZiOTE3ZiwgMHg3ZDY3YWJlMywgMHhjY2RjMmZjYywgMHg5YWJiNjVmMywgMHgxYTVlZmNhOCwgMHg1NDRkYmYyNSwKLQkweDAxYzRlMzdlLCAweGU1ODFmYTVmLCAweGRmOTA1OWY3LCAweDJiYmRmMDM4LCAweGYyZThmYTMzLCAweDA4NzJkYjliLAotCTB4YzliNzM3ZTUsIDB4NzkzM2M4NjIsIDB4N2Q3NmU2NTUsIDB4ZjQyYmYyOGYsIDB4ZWEwZDNlYmIsIDB4YTM4OGU2YjIsCi0JMHgxMDBmMDFhZiwgMHhlM2NjZGNjNywgMHhjODBlMzBmYywgMHg3MWI4YTRiMSwgMHg2Mzk1N2Q5ZSwgMHg4ZTU5YmZkZiwKLQkweDk4MjM2ZDk3LCAweDZmNGIxMzE3LCAweDc2Y2JjNzI2LCAweDgwMTYzOTUwLCAweDk3OGU0Y2VlLCAweGNlMzk1MmI1LAotCTB4MTFkZjk1OGUsIDB4YmVjYmYyMzEsIDB4ZGY2MjFhNWYsIDB4ZmY2NzM3NTcsIDB4NWUzYTY2ZWUsIDB4NmNkNjQ3OWUsCi0JMHg4OGJjZmRmNCwgMHg5NjhkOGYzYywgMHg3MDkxNDk2NywgMHhiY2YyMzFiZSwgMHhiY2YyNmZiZiwgMHg5NTMzY2I4ZCwKLQkweDFjNWFhMWQzLCAweGM2MmQ2YWJhLCAweDI3MTdhY2ZjLCAweDFlN2M2ZDFjLCAweDIyNmZmMmY4LCAweDViYWY0OWZhLAotCTB4ZWFmYjVkOTgsIDB4ODA2M2EzODQsIDB4Nzg3MGE2MmYsIDB4NzQzYTcwODYsIDB4N2ZkOGZjZmEsIDB4ZDM0N2M0YzksCi0JMHg1ZjhhNGU0MSwgMHhlNDJkZmJhYSwgMHgyOGQ5MmYzNSwgMHg0Yjg3ZDAxMywgMHgxZmExMGU5YiwgMHhlOGFiOGU2YSwKLQkweGJlMzk5NTc2LCAweDczMTFlYmEyLCAweDgzNTE2NTljLCAweGM3Yzc5ZWIxLCAweDExZGIxNzJmLCAweGE4OWFmMjVlLAotCTB4NzdjMzhhNmQsIDB4YjljMTNkNzksIDB4ZTcxZGVlYmYsIDB4YmQ5YzA4OTgsIDB4NzlmNDdkYzUsIDB4M2U5NzA2ZjQsCi0JMHg5NzBhMzFhZiwgMHgxZjI0ZDE5NywgMHg4ZjE0ODllMiwgMHhiZmZlMmYyOCwgMHgyYTg3MTg4YSwgMHg5MGMwYmMyYiwKLQkweGViOTEzZmVmLCAweGMyYmFmY2M5LCAweDk0NGIwODYyLCAweGY4MGUzZTQzLCAweGVjNzdmNTUxLCAweGIxYjI3ZDgzLAotCTB4MzAzY2Q1MDcsIDB4YjQ0ZDI3YTcsIDB4N2E5ZmMxN2EsIDB4ZjI4ZGRlZGEsIDB4MDk2NWQzYWMsIDB4YmMwZGNiYTcsCi0JMHhkNDA3MTc5ZiwgMHg1NWJmMDExNCwgMHg1ODZlMGIzNywgMHg1ZjQzYWE3NywgMHhiZDg2YjllMiwgMHgwMjUxN2U4ZiwKLQkweDU1YjBiNDdjLCAweDBmOTE1YjcwLCAweGU3ZTAyOTRmLCAweDE3ZjVkMDk1LCAweGU1YmYyOWY4LCAweDBiYmRkYTE0LAotCTB4Zjg0NTBiNWIsIDB4MDEwZWUxN2UsIDB4YzM3YmQyMTMsIDB4YjZlOTVmNGYsIDB4NTllM2QzODgsIDB4NzAwOWRmODAsCi0JMHg4ZDc1YjM3NiwgMHg1N2I3YTdjMywgMHhmYzAzN2U0YiwgMHg1YjlkOGZjNSwgMHg1NmUwYzU5ZCwgMHhkZTA0NmFhZCwKLQkweGU3Nzg2MWIxLCAweDNlYWYzODg4LCAweGJkZTNhYmMyLCAweDk4OTc3ODM3LCAweGU0ZGFmOGU4LCAweDIyMGYxODMzLAotCTB4ZjI3ZGM5MmQsIDB4NWM2ZGJlNmIsIDB4YTFiNDlhYWEsIDB4YTdjN2E2N2YsIDB4ZjNiZDE3ZWUsIDB4OTUxYjg4NjQsCi0JMHg4ZTMxOTIwYSwgMHhlZGYxOGRkYiwgMHg4ZmZmYTAxZiwgMHhmODNmZDdjZSwgMHg2ZWJhMjExNywgMHgwOWYxYjlmZCwKLQkweDY3YzlmN2M0LCAweGJhMDBjZDBlLCAweDI0NTE3YTJjLCAweGNlOTc0YTM2LCAweGUxMDkxNzQ2LCAweDAxNDA0ODNlLAotCTB4ODkzNTU0M2EsIDB4NDhmNzhjMWUsIDB4NWNlYjgyYTEsIDB4NjVhOGY4ZDEsIDB4NDJlY2Q4ZjgsIDB4ZDViNTU4M2QsCi0JMHhiZjRlOTgxYSwgMHg0OWZlZGFhZiwgMHg5ZDMzZDgyZSwgMHhjYmVmNzU3NywgMHgxOWZmYmYwMiwgMHhmODk4ZTUwMSwKLQkweDFmNjE3M2RiLCAweGZiNjI0YWE4LCAweDZlZmM2NjNiLCAweGQ4ZmFkODU0LCAweDFiMzFjM2IxLCAweDYwNjg0MWU0LAotCTB4ODJhYThiZTcsIDB4OTQ2YjY0YjMsIDB4NDU3YmZjM2QsIDB4N2JlOTcxYzYsIDB4N2ZlNmQ3OTgsIDB4MzBiY2MwNWEsCi0JMHg1Y2ZhMmY4MCwgMHhkMzZmOWU4YiwgMHg0YmYzMzRmMSwgMHgwMGU1OWFhYSwgMHg2YWFhNTM5YywgMHg3MTA5ZDJkOCwKLQkweDU2ODNhYTkyLCAweDFiYWFkNzVjLCAweGI3NWM2MTRlLCAweGE4YjNmMzc4LCAweDQ1OWJhYjdmLCAweGUzMWM5ZjgzLAotCTB4MjE4ODM2OWYsIDB4NGQ1N2Y4MmIsIDB4NGVjZTMwNGIsIDB4MWViMDg3ZWIsIDB4ZTlhNzFmOGMsIDB4YjQ1YThmY2QsCi0JMHgxZmJiNzViOSwgMHhhN2Y5ZTRlNCwgMHg1MjljZjExMiwgMHhmNDQ0YTZkYiwgMHgxZmNlMWI1MywgMHg0N2YxOGExZiwKLQkweGQ3OWVmNzgzLCAweGY5YzEzZDFmLCAweDMxOGE2ZmUzLCAweDUyMWE0NzllLCAweGYwYTU0ZmQxLCAweGIxYzU5NDE1LAotCTB4ZmY3Y2MzZDcsIDB4ODA3ZmU3ZWMsIDB4ZDZjNzY5NzgsIDB4ZjAwMGZlY2YsIDB4OTlkN2ZlMmUsIDB4ZTI4MmZjM2YsCi0JMHhiYmIyZWM5MSwgMHgzZjU1ZmY0MSwgMHg5YmM2MzZmMywgMHg3MjhlZWZmNCwgMHhmNGY5ZDViZCwgMHhlYmE3MTg1MywKLQkweDQxYWFjZjdjLCAweDQ3YWQ5ZDZmLCAweGFhYmM0MzA3LCAweGU5OTdjYjczLCAweDZmMmM5ZjYwLCAweGQ2ZjY4NjlkLAotCTB4ZmRjNTZkZjIsIDB4NDBmYjFjNDksIDB4MDM2ZjgxMmYsIDB4OWExMzg4N2QsIDB4NjliN2I1ZTksIDB4ZjM4MDYwZWYsCi0JMHg2YzM3YTUyNCwgMHgwYmUzODYwOSwgMHg1ZTJjMjVjMSwgMHg0MmI4ZjJhMywgMHg2Yzc4ZmM2MywgMHhlOWExMWM0YywKLQkweDhjYTY2YmJhLCAweDU0ZDY1MjgxLCAweGMyNzg4N2QyLCAweDk3OGU5NDViLCAweDhkN2U4MWY2LCAweDg5ZWY2ZmNjLAotCTB4MWZlMTI3N2UsIDB4ZDViMjRlOTQsIDB4OWJjZmJmNDgsIDB4MzFmMWZkZTYsIDB4ZWQ0YTZiNjgsIDB4ZWExMDllMzEsCi0JMHg3OGY0ZGUwMywgMHhjNzhhMWJlZiwgMHhkYWY5MDU2ZCwgMHhkZjhjMjdmYSwgMHhkM2E2ZGQwMCwgMHhmYjNlNzY4OSwKLQkweDkzODg2MGY5LCAweDZmYmI5MzFmLCAweDU2ZDU3ZGM1LCAweDU3OTdlZTJiLCAweGYyOGJiZWI1LCAweDc1ZWRiOWQzLAotCTB4OGYwOTM3YjQsIDB4ZjA5Mjc2YmIsIDB4ZjE5MzhiMWYsIDB4OGRlYWQzZGMsIDB4ZTA4NzE2MmUsIDB4ODUzODg3ZjgsCi0JMHg3OWNmODg5YSwgMHhiMWYxODIzYywgMHgyOWU4YTcxZSwgMHg3NTg1NzEzZSwgMHg2NTIzY2YyOCwgMHgxYjI1OTQ3MSwKLQkweDI5ODg1N2RmLCAweDhmOGMyM2VlLCAweGQxM2RmM2FjLCAweDFiODNjNzQ5LCAweDNhMmUzMGYwLCAweDBlM2YxNmRlLAotCTB4NzJjYjhlMTQsIDB4MjBmZDAxN2EsIDB4YTc4ZTE2Y2UsIDB4ODg0MGZhZDEsIDB4Nzc4NDA0YWYsIDB4ZDA3ZDFjNDksCi0JMHhlOWM1OWViOSwgMHhmZTYzNjUzYSwgMHgyYzNlODQ0OSwgMHhhMjY0NTZmZSwgMHhkZWNmM2ViMywgMHhlMGRlYTdkNiwKLQkweGM5ZjhiNmZmLCAweDZjNzljNTg3LCAweGJlM2E5ZTJjLCAweGU3YzdhZjhlLCAweGI3ZWY4NTU5LCAweDk4MjE1YTVmLAotCTB4ODAyYTZmZjcsIDB4MWQzNDk3MWYsIDB4NTEzZjIwNTIsIDB4ZjlmNGM3NWYsIDB4YmMzYjcwNzYsIDB4ZjMxMTE5ZTMsCi0JMHhmNzA3NTc2YiwgMHhlYjM3MWVhMiwgMHhkZTcwYTU4YiwgMHgzZmJjMGUyMSwgMHg2ZDJlZjBlMywgMHhjNzQ0ZWI2NiwKLQkweDQ5YzA1NzU2LCAweGIzZDhlOWZiLCAweDY5NzlmOTAzLCAweDRmYzUyMWUzLCAweGYwZDdkYmZiLCAweDQ2ZmNjMmJjLAotCTB4NGViMDNmMjYsIDB4ZWZlMGEyMDQsIDB4MmU3NzZlNzgsIDB4YmIzMjJmOGIsIDB4ZGRjZTNjZGYsIDB4ZDNhNzllNTYsCi0JMHhlYTljN2YxMiwgMHg3MTg2NTNjNiwgMHgwYTgzZjkxNiwgMHhmZjNlOTdjYiwgMHhjZjI0Mjc3OCwgMHg0NGVmZTgyYywKLQkweDVmMjA0YzliLCAweDJjNTA0NGYyLCAweDU5M2ZiNzhkLCAweGRjNzk5NTY5LCAweDc0OTU4ZWJhLCAweDI1ZjNjNGJkLAotCTB4NDQ5ZTc2MmUsIDB4ZGUzMDUxNGMsIDB4ZmUzNWRjYjEsIDB4OTQxYTUyNjAsIDB4NTA3ZTBhOGEsIDB4NWZiNjRhZWQsCi0JMHg1YTlmZmI1YiwgMHgzNmJiZDAwNiwgMHhjNzhjMDZmOSwgMHhlYmYwOTlkNiwgMHhjMjE3NzM0ZSwgMHhkNGY3MTMzOSwKLQkweGFlYzAzMWIyLCAweGVjOTM3ZDY2LCAweDVmZTAxOGIxLCAweGFmZWQyYWVlLCAweGQxNTczODUyLCAweDI3NWNlMDdlLAotCTB4ZWYzYzM0OTEsIDB4OTQ5NjI2MjIsIDB4Yjc0NDdjYzIsIDB4MTM4ZjZkYzUsIDB4NjU5ZDkzMDcsIDB4MTc4NTFiYzQsCi0JMHg5ZjNjNmRkOSwgMHg1N2NlYmU0MiwgMHg5ZjdkMWZhMSwgMHg2ZGFkYjE3NSwgMHgzZGJhMzYxZiwgMHhjNDk1ZjAwMiwKLQkweGFmMGJkNWY3LCAweGJiYmNlMzc3LCAweDU4MGQwNTFhLCAweGQ1NjNhYTljLCAweDA1ZjJjZTlkLCAweGRhZThkZDYwLAotCTB4MmU0Yjk0OWEsIDB4ODc4OTBmYzUsIDB4ZmUwZTI3YWUsIDB4YmRkYzY4NWMsIDB4YWFkMWY0MWIsIDB4YTY0OWUyNDQsCi0JMHhhYWIxNDY3MiwgMHg0ZTcwMzk4YSwgMHhjODRkYjQ2NywgMHhmNTNkM2UwMSwgMHg1ZmI0OGJlYSwgMHg2MDQ4OGI3YiwKLQkweGE5Y2JiZjhiLCAweDkyNzkwYmU3LCAweGU0MWNjZTQxLCAweDAxMGJjYzdlLCAweDM1MjZmZTU2LCAweDVmMzlhNzAyLAotCTB4ZTkyYmMwODQsIDB4ZDNiYzczOTEsIDB4MzljNjI3NDQsIDB4ZDExM2FmNGUsIDB4YzVjOTE1OWYsIDB4ZmNjYzliYmYsCi0JMHhmODAwMTI3MywgMHg4OGIyN2FmOSwgMHg0YTFhNzljMywgMHhjMTQyYmY3OCwgMHg3ZjA1ZGEzYywgMHg0NDIwYmU3OSwKLQkweGYxYTIxZDE4LCAweGY0NmE1YTk1LCAweDg5ZWRlYjE3LCAweDQzNmZiMGI5LCAweGM4MzY5ZWZjLCAweGZkZTBhZTRiLAotCTB4OWUzMzJiZjUsIDB4ZTdlMmExZjMsIDB4Y2Y1MmZiMDcsIDB4N2U2Y2ZmZDMsIDB4N2ZkMDdlYzksIDB4YThmOWRlMTUsCi0JMHgzNmNmZmJkNywgMHhkYjMyMDM5ZSwgMHhlNDJmMDhlZiwgMHg3YmI5NTAwZCwgMHhlN2I1ODg0YywgMHg1YzFlNWIyYiwKLQkweGIxZTBmOTBkLCAweDA0NjRmM2ZiLCAweDkxNTQxYmU0LCAweGExZjIwZDA0LCAweDA3N2RmNmNkLCAweGYxYzg0ZGU4LAotCTB4ZTAyNzEyNzEsIDB4ZDk3ZDY3YjEsIDB4ODdkYjdlMGIsIDB4OThmMjZlZmYsIDB4MGI1N2UyZjMsIDB4MmU4ZGZiYzEsCi0JMHhmMDU4ZGZkYywgMHgzZjUxZGI5NywgMHhmODhjMzM1OSwgMHhmYzQ2YWJiNSwgMHhmMTk4NDYzYSwgMHg0YmIzYzQ2OCwKLQkweGIyOGRlMjMzLCAweDc4N2NlMDc5LCAweDNjNmYxYTRlLCAweGIzYzY2NTVmLCAweDBlMWRhODQ0LCAweGQwNDA0YWY2LAotCTB4ZjkzMWZlODAsIDB4MTFlYmNkMGYsIDB4YTZmY2RlZWUsIDB4OGY1ZjFiMzQsIDB4NWZlOTVlMzgsIDB4YTk5ZDJkOTksCi0JMHg1MzNiODA2YywgMHg5ODVjYTEwYSwgMHgxOWNiMjhlNSwgMHg4M2RmZTAxMiwgMHhmMTJiMDJkMiwgMHg3ZTg1Y2QyYiwKLQkweDhmOWYwNjQ5LCAweDczYmVjMTUwLCAweDAwODkxYzgwLCAweDA0NzI4NmFmLCAweGNmNDAyODI3LCAweDZlMDdjODNiLAotCTB4N2M4NWE3YTAsIDB4ZDkxOWJlNDIsIDB4MmNlZjNkMzMsIDB4NWNkMGU5N2YsIDB4ZTAzYWQ1ZmEsIDB4YWU1MTRiZGYsCi0JMHgxNGE5MzlkOCwgMHgwNmNkYTgxMiwgMHhiMGRjZDUzOSwgMHgzNjdkMDc2ZSwgMHhmMzgyNDJiNSwgMHgxOGFkNDRlNiwKLQkweGRkY2NlNzA2LCAweGM3OTAzZTU4LCAweDQ1MWFlZmRlLCAweDE4MmM1ZjMwLCAweGZhMGU5YjNhLCAweDI5MWU3YWE5LAotCTB4ODBmN2ZkMDMsIDB4ZmMwMzNkZDIsIDB4Y2NlZGZiZGIsIDB4YWVjOGI5NGYsIDB4YTVmZjNlYTAsIDB4OWNhZmRmNWQsCi0JMHhhOWNiOTdmYSwgMHhjOGI1NzYzYywgMHhlYmMzOWMyYSwgMHhiYjY0ZDk2YSwgMHgyMmNkZWEwMCwgMHg0ZWFlZjc5ZSwKLQkweGM2MDhiYmFlLCAweDE5OTE2Y2VmLCAweGMwYjYxNTVjLCAweGI3YzdlMDA1LCAweDc0MWViOGNhLCAweGYzYzY0YzU2LAotCTB4YWRiYjYxMmMsIDB4NzYxM2VkODUsIDB4Nzg5MjdjYjUsIDB4ZWYzZTk0N2IsIDB4MjJmODdlNmMsIDB4NmEzYzMzODgsCi0JMHg3OTNmYmY4OSwgMHg5ZGYyY2RiZCwgMHhmYWYwZDRmYywgMHgzZjkzMTRkYiwgMHhlNThkYmQ3MSwgMHg5NDMwM2M0ZiwKLQkweGY5Njk2M2NlLCAweDMzMGViZTY5LCAweGU5YzQ5ODc5LCAweGFiZmNkMmZjLCAweDVhZGJmZTcwLCAweGU3NGYzZmE4LAotCTB4ZmNkZTIyNTEsIDB4M2NlODRiYTMsIDB4MzEyZGJjMjcsIDB4ZDMzYzRhZmQsIDB4YTNiM2E0ZTcsIDB4MGVmZWYwM2MsCi0JMHgzZTAwNjVhMiwgMHgwMjIxNGMyNiwgMHhmNzg0ZjNjOCwgMHg4ZmViZWUwOCwgMHg3ZThmOTlhOSwgMHg5NDg5OGJkNSwKLQkweDRjNWYyOWNmLCAweDBiN2NhMTZkLCAweDg5YzNhZTdhLCAweDM2ZDhmYmY2LCAweGM5OTdjMGM5LCAweGMxN2JiZDUzLAotCTB4OTA3NzFjY2YsIDB4NzcxZGJlYTAsIDB4OWUzZWQ4ZDAsIDB4YTcxYzQ0MDQsIDB4ZDI3Y2Y4ZGQsIDB4YzZiZDYzMzEsCi0JMHgxMjMzZjdjNiwgMHhmN2YwM2E0OSwgMHg4NDQ1YWZkYSwgMHg2ODliYWJhYiwgMHhiYjdlZDE3NywgMHhmZGUwMDYyYSwKLQkweGUxNjc1ZDAyLCAweGJmMmQxNDk0LCAweGFkZTM0YjE2LCAweDhjNmQyYmYzLCAweDA4NTUxZTJmLCAweGNlOGYyZmFlLAotCTB4YzEzZWUyNzcsIDB4OTg1NWY5OWUsIDB4Y2ZjNWZkMjcsIDB4OWRlMjQzYmQsIDB4NGJkMjhiYmIsIDB4ZGRmZjZjNDksCi0JMHhhNzgxNDQ5MywgMHg2MDRhYmQ3YywgMHg4Y2NiYWVmOCwgMHg0YmQyOTdkZSwgMHhiZTc1OGY5ZCwgMHg3MzM5ZjlkNiwKLQkweDVlMzc4MjdlLCAweGNlYzM4YWRlLCAweGY5YTI5ZGVjLCAweGZjMDUwNDIzLCAweDAxMDI1ZGIyLCAweGU1ZGU3NmJjLAotCTB4OWI1ZmU0MzUsIDB4MmJiOTNmNGIsIDB4NmVhOWUwMGIsIDB4YjY3NjgzM2UsIDB4MWU3ZTI1YWQsIDB4MjI1YjA2ZDQsCi0JMHhmMmVlZmJmMywgMHg4ZDdjODRhZiwgMHgwNGExNTI5ZiwgMHhiZjczZDhmZCwgMHg1YWFmZDE2YiwgMHg4ODUzNDEwMywKLQkweGU2ZWFkOWViLCAweDc5YTdiOWUwLCAweGUyMDFiMjM2LCAweGU2NWQ1MmIwLCAweGZiZTAyZWI1LCAweDUzNTcyYmUyLAotCTB4YjMyYjFmNzgsIDB4OTUxZjlkMjAsIDB4YmZkZjg0MzUsIDB4MmY4YzEwODQsIDB4MDc3ZTRjNDgsIDB4YTNlYjIwY2UsCi0JMHhkYTM1N2ZjZiwgMHhiNDZkOWIwYSwgMHgxYjliNjZkZiwgMHg2YWY1NGZmYiwgMHhmZGFmYzAwMiwgMHhjMTEyN2ZmMywKLQkweDY3M2FlOTllLCAweGUwMGUzYTQ1LCAweGRkZmU4ZmZlLCAweGFmNjYzNjliLCAweDZjZjc2MmRkLCAweDk1MjdmZTA1LAotCTB4OWExZjI4NjksIDB4NDhhZDUxMzcsIDB4MTRhMDczODUsIDB4NGZlMjcxZWYsIDB4ZTI5YTVkYmEsIDB4YzI4ZGJhYTUsCi0JMHhlMGI0ZTI5MywgMHg3OGYxMTBiZSwgMHg5NzllYjc1NCwgMHg1MTdiZjg0MCwgMHgwMjQyNDBmMiwgMHg1ZDA1YmM4MSwKLQkweDQyMmQwYTlmLCAweDdmZjk0NWM4LCAweDAyMTljZDhjLCAweDkyYTUyMzNmLCAweDYwODI5YmNlLCAweDVmZDYzNjI3LAotCTB4M2UxMWQ0OWIsIDB4OTA3OTg2YzcsIDB4MjAwYjJmOTQsIDB4ZGU2MDlkZjksIDB4NDE1YTI0MDMsIDB4ZDU5ZWJhZmYsCi0JMHg2NGFhZjNmNSwgMHhkNTY2ZmE4MiwgMHg5NmEwNTI4MywgMHg2YTRlYjNmNiwgMHgyNGZjNDNiNywgMHhjMTE2YTNkYiwKLQkweGE0OGE3MzU2LCAweDQxYmFmOWUyLCAweDFkMWU0Yzk1LCAweDg3Mjc4ZjM5LCAweGVjMmExNWVkLCAweGRlMjVmZmEzLAotCTB4ZWY4ZTJmMTYsIDB4OGI3NTdjZTYsIDB4ZTAzZWZiZGQsIDB4Zjc3Zjc3M2IsIDB4MzQ2YjMwMWUsIDB4N2I0ZjFiM2IsCi0JMHg3OWY2ODZkOSwgMHgzYjcwNmY1OCwgMHhiYmFmODRhYywgMHhmYjY1M2UxMywgMHgzOTc0MjRjNiwgMHg3MWU4NjNlNiwKLQkweGEwZGViMzdhLCAweDA4YTZmMDcyLCAweDQ0YTlmNTcyLCAweDg3OTQzY2YwLCAweDRmNDBhZmZlLCAweDFmZDI4OGM5LAotCTB4NjgyYzlkN2MsIDB4YjY4YmQ5YWUsIDB4MmY2YTM4OWIsIDB4NTdhNGUzZjAsIDB4OGM3M2VjZjAsIDB4YzA3NzE5MWUsCi0JMHg3ZWYwMGI1YiwgMHhlNjYxZmQ1NywgMHgyYTIxZDE4NywgMHhhMzNlOWM4ZiwgMHhlYzE3Mzg1NCwgMHhmZGExZDcwZSwKLQkweDkzN2QyNjVmLCAweDNmYTYzZTU2LCAweGNmOWNiNWRhLCAweGU1ZDVmOGNjLCAweDc5ZWYyY2RhLCAweDU2YmRiNDJiLAotCTB4NDg4MDM1ZWMsIDB4ODQ0MzhmMzAsIDB4MGU2YTFjMDgsIDB4MjIwM2EzZTgsIDB4ODU1ZGY3ZDgsIDB4NWMyODVmOTQsCi0JMHgyOGVlNDExYiwgMHgwZDlmMjZiZiwgMHhiMzdjMDk1YywgMHgzYjBhZTViNiwgMHg1ZTc3YzdjOCwgMHhlYmY0NDIzZiwKLQkweDdmZTNiOGE4LCAweDc2ODFkZTg4LCAweDA4OTgzZjk2LCAweGZiYmE1ODc4LCAweDQyM2Y1ZjJjLCAweDVkMzBlNzQ4LAotCTB4Yzc0NDdjYTksIDB4MzdiZTc0NDMsIDB4MTcyZWI5ZjMsIDB4Mzk0MDcwYjUsIDB4MDA5YjlkODcsIDB4MTA0Mjg4ZmEsCi0JMHhlYjI1NmIwOSwgMHhlOGE3NjBkYywgMHhkODZkNzVmNiwgMHg3Y2M2NGQ5ZSwgMHgzNjZlZTVlZiwgMHhkYmFjYWQ1ZSwKLQkweGU2MGQ5YWU1LCAweGQ0NTVkY2JiLCAweDJlZmI3Y2ZmLCAweGZmYThlN2Q1LCAweDVkMmY5NTEyLCAweDdmYTM3NTJkLAotCTB4MjE0ZTdkNTYsIDB4ODFlZmQ0ODEsIDB4N2EzYTE2YWYsIDB4NDU1ZjAxYmEsIDB4ZjhiMTdlZjYsIDB4ZDQ3MjA4MWEsCi0JMHhmOWNiZmZlZiwgMHhjZjllNmNkYywgMHgzZTY0NmEzZCwgMHhjNWY3ODg5MywgMHgwYTE3YWE3NiwgMHg2NGNmYWNlZSwKLQkweGNhZGU0MTdjLCAweDdlMGJlNjg4LCAweGY5MjdiMWRlLCAweDFiZTU0ZjFlLCAweDc5MThjN2RjLCAweDg0ZjFjOTM2LAotCTB4OTZjNzJhMTYsIDB4ZTRkNjM5NTgsIDB4NDgyN2JjMzIsIDB4YmVhMDc1NmIsIDB4NTlmNWNiMzMsIDB4MDc2YWFmM2UsCi0JMHhhMjRkZmJjMywgMHg5ZjMwNjdmNywgMHg2MGY3NGI2YSwgMHg5NTVjYmJlMCwgMHhjMGE3NGVhNCwgMHhlODhiMzZlNiwKLQkweDU0YjY5MDA3LCAweGJiMTIzYWMzLCAweGRjNTlmYmJlLCAweDdhMDdhZjhhLCAweGE2Njg1MjljLCAweGIzZTc0ZDdjLAotCTB4MGJiZGVlYzksIDB4Y2RkNmE1ZTQsIDB4NTgzODRhZmMsIDB4YTM3MDc2MDQsIDB4M2MzNzdiY2QsIDB4MTJkODUwNzcsCi0JMHg4OGM3NWNlMCwgMHg4MzhiMzY1MCwgMHhkNDcyMGM4NCwgMHg0YzM4ZGM5MywgMHg0OTBjMTE3MiwgMHhlOWY5M2ViOCwKLQkweGQwODE3NGZhLCAweGY2YzUzYzMzLCAweGQ1MmYwNjY0LCAweDBjN2Y2MDE2LCAweGIwNmMyMDJjLCAweGY5ZjMwNGE1LAotCTB4ZjNiMmU2MDYsIDB4ZDhmMzAzZjgsIDB4ZDg0ZjU5ZmQsIDB4OTFiOWJhZDksIDB4ZDk3YTA3YWYsIDB4MDc1YjJiNjgsCi0JMHhlMjI1OTM3OCwgMHg3NzdkZTZiNywgMHg4ODU0MDFiOCwgMHg3YmIyNmUwYiwgMHg2Y2ZlODMxZSwgMHg0NzljMWVhNSwKLQkweDAyNjg5Yjk2LCAweDI5MmNhM2U1LCAweDUzZmVjMDI4LCAweDYwNTU2MmNhLCAweGQ2YzI0MGYxLCAweDdmNjkyODEzLAotCTB4NDJkNWQzNTksIDB4MjBiMjhmNTgsIDB4MDdkZTAwOTcsIDB4OWM4ZTI2M2IsIDB4ZWZlNWRhYjQsIDB4OGU2YWM3MTcsCi0JMHhiOTViYTNiMSwgMHhlODUzZWMxYywgMHhiM2E3NTM3YywgMHgzYzcwZTQzYywgMHhmODBmODI4NiwgMHg4MGRkNzRlZCwKLQkweDljZmNlZDkzLCAweDkzZjgzNWU1LCAweDdlY2Q5ZTE5LCAweGU2MGMxMDE1LCAweGRkZmFmMTI1LCAweDI5ZWM5MTBhLAotCTB4MmRmOGY3ZTgsIDB4ODZjNTlkZjAsIDB4Njg4MzhmN2UsIDB4MDc4YmQwNDEsIDB4Y2U1Y2VjZWQsIDB4MDM1YjQxNmEsCi0JMHhkZDQ4ZGZmNSwgMHg0MGI3YjgzNiwgMHgyNjA3ZWJlNywgMHhmNDQ5YWI1ZiwgMHhhNzI5YzQ5NSwgMHhhNTE3YzE3MywKLQkweGYwMjZmZTdjLCAweGQzZTRlNzViLCAweDBjZTE1N2MzLCAweDdlMzMwN2JhLCAweGJjODY4OGYzLCAweGNkNmU5ZDQ3LAotCTB4NzY2ZTgxYjIsIDB4ZWI0NDczODgsIDB4N2U4Mjk3NjEsIDB4YTA5MGE3N2IsIDB4YjlkMzlmODEsIDB4MGE3MDYwNTAsCi0JMHgyYTE3OWUzNiwgMHg1YzJmZTMxOSwgMHhmZGZhZTljZiwgMHhlOWJjZDgyYiwgMHg4ZmYxZjMwNywgMHg2YzU2N2JjNiwKLQkweGQxZTAwZDlhLCAweDFiOWYwZmUxLCAweDMxZWI5ZDMyLCAweGM4YzlmYjlmLCAweDMyNjNjNzA5LCAweDRjYWI0ZjMxLAotCTB4Yzg1MmJiODEsIDB4ZGEwNzE2ZTksIDB4NGM4OWQ1NTUsIDB4ZDBmY2NkYWUsIDB4NzljMjk0MWYsIDB4N2M1MGNiY2UsCi0JMHhlZGY0MDk3ZCwgMHg4MzI0ZDcyZiwgMHhjYjdmZWQxZSwgMHhhZmEwNDRlMSwgMHg4MjVkMGYxOSwgMHhkODNlZjQ3ZiwKLQkweDFjOWJmYWI3LCAweDJmNWI3Zjc3LCAweDk0MDYzMjMzLCAweDkxOTk5ZDgzLCAweGZlYTU4MTk5LCAweGM1MjlkZWJjLAotCTB4MjZhNWVmOGQsIDB4NmJiOGNmN2MsIDB4NDZkYmU1ODAsIDB4MDI2YTZiZjEsIDB4ZjdhNGVmZWQsIDB4MjgzYzc3OGQsCi0JMHhmNzE4ZGRlZSwgMHhmODYwNGZhZSwgMHgzYzc0NTdhZSwgMHg2NzIwNDlhYSwgMHhjNDk2YmE5MSwgMHhiMzI3NzljZSwKLQkweDhjZGMxYzdiLCAweGI2N2Q2YjllLCAweDdlOGE0OTcyLCAweDQ2NzY4M2NmLCAweGYyYjllMjNmLCAweDZiMDI1MDQ2LAotCTB4ZjkwOWIyNjUsIDB4ZjQ2NWM1OWEsIDB4ZThhYTVjN2MsIDB4MTk5MmZkMTgsIDB4OGRmNWJmNWMsIDB4ZmY3ZDg3MmUsCi0JMHg5YzY0ODRkYywgMHhkM2I1ZDllZiwgMHg3Mjc0YmM3MCwgMHhjNTM4N2Q5NywgMHg4YjMyZmNlYiwgMHg5MzlhZjEwNiwKLQkweDA4OWVmZjczLCAweDY2ZTZmZjQ3LCAweDNjMTAxNWI1LCAweDFhYjM1YTYyLCAweDE2ZmZhZWZjLCAweDk0MDliOWJkLAotCTB4NTRmNTY5NGUsIDB4M2UzMmE1MTEsIDB4NzRhM2I5MDAsIDB4MTNmNzEyYjksIDB4ZTZlMjU4ZTcsIDB4NjA0ZDhkZGYsCi0JMHg3NmE3ZjU3ZSwgMHg5MTliOGUzNywgMHgyMmJjYjgzMSwgMHgxMDNlYmEzZiwgMHgyM2YzYTRlOSwgMHg4YWNjYzM5NSwKLQkweDYxNzM5MTMxLCAweDI0YTYzZjk0LCAweDJlYTc5MWM0LCAweDdlYzMzNDk5LCAweGQzMGZhZTgwLCAweDdkNzVmZTM4LAotCTB4MWE0M2NiYWMsIDB4ZWZlYzE5YzgsIDB4YThmZDUxOTUsIDB4N2YyODczZDMsIDB4OTBlMzFkMzUsIDB4ZmNiNDI3ZjgsCi0JMHhmM2IwNGJmOSwgMHhhMTE0YTcxMywgMHhiZmYyYTNiZSwgMHgwNDY1ZTUwNiwgMHhkMDc2ZGZkMywgMHhjN2YxNTFhNywKLQkweDA3NzdkNmFlLCAweDg3ZGViZWMxLCAweDA1YzY3OWZmLCAweDkwZmYzYmZiLCAweDNmYTA1ZGJhLCAweDRkZjJmZDhmLAotCTB4N2MxMWU0MTcsIDB4ODcxNjRiZjgsIDB4MWZlNGQ1YjgsIDB4OWU5ODEzNzksIDB4Y2Q5NDI2MGYsIDB4ZTZkZDc5ODIsCi0JMHgzNzgxNjdmYiwgMHgwYWM5MmY4YSwgMHg5MGIxNWZiNiwgMHhmM2M2YmIyZSwgMHhiY2YzYzY4MywgMHhmM2U2ODI0YiwKLQkweDc3ZWM3ZWJiLCAweDhlM2YxNDg5LCAweGMzYTcwOGZlLCAweDRhZjVjNmMyLCAweDdiZTMwYTk2LCAweDhmM2QwMjE3LAotCTB4NThlZmZmNzEsIDB4NDM2N2JiMTMsIDB4ZTM2ZTY3ODcsIDB4YTI3YzA1NjgsIDB4Zjk1OGI0N2YsIDB4Y2M5Yjc2YmUsCi0JMHg3NGNmMDVkNiwgMHg3MmYyYTdkOCwgMHhkY2UxOTliYywgMHhmZDgxY2JiNywgMHg0NDQ0N2JjZCwgMHgxZDBlNjRiZiwKLQkweGFmZDUwNTZiLCAweDY3OTYxNmRlLCAweGJjYzc5ZTZiLCAweDM4MTJkNTBmLCAweDVlZWYzZjJmLCAweDc4NWRmZDAxLAotCTB4OWQ3NDk3ZmYsIDB4MDdiOGFlZjIsIDB4ZjNjY2IzZjcsIDB4NjAzZmRmMzQsIDB4ZmJhNGI3M2UsIDB4ZmQzODBiNDksCi0JMHhlNTE3ODgyYiwgMHhhMjBmMjYyZiwgMHg5YjNiZWQ4NSwgMHhmN2E3N2FlMywgMHhmZTYwMzhlNywgMHgzZjcwMjVmNywKLQkweDgzOGM4MGEzLCAweGZiYWQ4NzdjLCAweDJmOWQyNjg3LCAweDlmODNhYWNmLCAweGYzYzEzZWQ3LCAweDA4Zjk4ZjMzLAotCTB4NTQxMmIzOTYsIDB4ZTViYTJlNzYsIDB4YWJlMDEyZjUsIDB4ZjA1YmNkYTUsIDB4YWI2Zjk2YmUsIDB4MWNiNDk2NmYsCi0JMHg4OTMxZmM0ZiwgMHgxZjZhMWRlOCwgMHgyMWZlMDdhZSwgMHgzNzYwYzE1ZSwgMHg0NjdmNWQyZSwgMHhjMzJjN2U2MSwKLQkweGY5ZmNjZGMzLCAweGRjNWYzMGNkLCAweDcyZjc2NTI3LCAweDNlNThiY2RjLCAweGNiOWY3ZDFiLCAweDdjYzYwOWQzLAotCTB4ZjlmMDhlZWIsIDB4MjU4ZjM2NzMsIDB4OWY0ODFmN2MsIDB4Njc5Zjk5OWYsIDB4NWU3OGIwMjUsIDB4ZDVmMmM2YzUsCi0JMHg2Yjk0ZTgwMywgMHhlNjBlOGY1YiwgMHhkZjMwMGFlNywgMHgzMzE3ZTc1YSwgMHg2NTIwMmMzZiwgMHgxNDQyOTkyNSwKLQkweDhkN2U1YmRkLCAweGE5ZjRlYTcwLCAweGU3YzM5YmE4LCAweGZiZTBjZmUzLCAweGU3MTAxOTZmLCAweGNjMGY4ZGU5LAotCTB4ZGI5NGVlZjQsIDB4OWE3YzgzMDcsIDB4YzNkOWRkZTksIDB4MDlhZGYwZjksIDB4NTBhZmRkNmMsIDB4ZmZhMDI1M2QsCi0JMHhkNWIyOTFlNiwgMHhlM2JiMjhlZSwgMHhlZmI3NTQ5OCwgMHgxYjM3MjAxNywgMHhhZDQ2ZGYxOSwgMHg3YjM4Y2NhNywKLQkweDc5ZjVjNjQ1LCAweDBmZWQ0Yjk5LCAweDFkMjEwY2Y3LCAweGJkZmVjMDI2LCAweGU5ZWYwZmQ1LCAweDc5ZjExY2UzLAotCTB4ZTAxMjYxYjQsIDB4MTNjYjE0YjksIDB4ZDg2ZDMyYmUsIDB4ZmNmYjQ4YjAsIDB4NDIyNGNmNDcsIDB4MDQ2YmI1M2MsCi0JMHhhNzRiNzhjMSwgMHhjN2VmMDhjYiwgMHhmM2MyMjIwOSwgMHg2MmMzYTczMSwgMHhlZjVmZWRhOSwgMHhkOGQ5Y2U4MywKLQkweDQ3MDk3OTg2LCAweDlhZjFlNmJlLCAweGYxYTVhZGFmLCAweGJlNGZmOWU2LCAweDlmN2UxMWZlLCAweDZlNWNhZGNhLAotCTB4MzZlMWZmNzQsIDB4NWI1YmI3NGUsIDB4ZGNmM2JlZDgsIDB4MGY0OGU1NzUsIDB4MDcyMGZkZjMsIDB4MTY0OTc3MDQsCi0JMHgxYzFiY2FlZCwgMHhjZGZkMDBhZCwgMHg1ZGE3OTlmNCwgMHg2YmY0MWM3MSwgMHhmZGM4OWQwYywgMHg5OGJkMmY5YywKLQkweDJmNTE1MzRmLCAweDRjYzI3YzYyLCAweDliODcwYWJmLCAweDM1YWJjZGU1LCAweGVhMmQ2ZmU4LCAweGU1NWRjZjQxLAotCTB4YWZhZTdhNjAsIDB4NjNjZjMxZjMsIDB4N2E4MDkzNGUsIDB4ODJmZjBjY2YsIDB4MGY1NzJiOGQsIDB4MzY3ZjMwMjAsCi0JMHg4NDc5ZDhiZiwgMHhlMTllYTIwNiwgMHg1NWU3ZDRmMywgMHg0NzNjMzQ0MSwgMHhkMzhmYjMxYSwgMHhjZTg5Mzk3ZSwKLQkweDcyZDg1Y2FiLCAweDJlYzFlNjNiLCAweDJjMjdmM2E1LCAweDFiZjE4M2RlLCAweDVlMWQ3ZTFkLCAweGM0NGEzY2YzLAotCTB4ZjEwNmQ5MGUsIDB4MDY4MjE1ZDYsIDB4ZGVmNjM2ZmEsIDB4NWVlMThmMTYsIDB4YmIwZDM5YTgsIDB4OGVmZDAyMDcsCi0JMHgyMWFiZWQ0OCwgMHgyZmM0N2JmZSwgMHhmNWQ2ZmZhMCwgMHhiNDQ1YzEwMSwgMHhmYjgwOGQ2YiwgMHhhZmQyM2Q1ZSwKLQkweGY0ZWRlNTg1LCAweDA1MWFjNzRjLCAweDU4YWEzOWVlLCAweGUzYTVjNDI3LCAweDZkNDJmYTgyLCAweDU5ZGU5NDU4LAotCTB4MWI1MmI4MTgsIDB4ODgzNzgwNjYsIDB4MWE4YjFjNzksIDB4YTdjZjBkY2EsIDB4YjhmYThjMzgsIDB4MzUyMzc5MzcsCi0JMHg3NGQyZjNmMSwgMHg0ZGU1ZDJmOSwgMHg4NzBhYmY5NywgMHg1MmZmZTJjYSwgMHgzNjU2NWY2MCwgMHhkMTA3ZTllOCwKLQkweGY2N2FhMGNmLCAweGMzOGIwNzZhLCAweDdkMjM3MDNjLCAweDY3YTNlOTY1LCAweDc5ZmM3MTBjLCAweGU2N2QxOWUzLAotCTB4NzlmMWQzODksIDB4YzUwM2ViNGYsIDB4Y2VkZjQxODMsIDB4ZWRmNTE4NzIsIDB4M2U4ZjlkZjcsIDB4ZjQyZTVkMGYsCi0JMHhjMmU1OTlmOSwgMHhmZTNkN2Y4YywgMHgxOTgzYTY2NSwgMHhkODE3MDBmZiwgMHgxZDVhMDdmYiwgMHg5MDA0YmI4MSwKLQkweGJmYTcwNjc3LCAweDc2NzA4ZWQ1LCAweDcwNjkxNDY2LCAweDdjMDBlNTllLCAweGQyZGNmNTQwLCAweGZkNjMxZmNjLAotCTB4Yjk2Y2IxMjYsIDB4ZWUzNGZkMDMsIDB4ZjNmMTY5MDcsIDB4MGZmNmMyNmQsIDB4ZmVjNDYzYjcsIDB4MWUzMDExOTYsCi0JMHhjODM0MTMxMSwgMHgyY2IzMTcwYiwgMHhiY2U5NWIzNSwgMHgxY2I0MjFjNCwgMHg5YWMxZTkwNSwgMHhlYjlmZTcwOCwKLQkweGUxMTMyZjhhLCAweDdlNWE4NmRlLCAweGMyZDZiYTNlLCAweGZkZTk2ZGNlLCAweDc1YjA3MWFkLCAweDM5NzcyZjQ5LAotCTB4NjgzYjU2Y2EsIDB4NmI1ZjI3ZmYsIDB4NzhiMDcwMmIsIDB4MzgxOWZhMmYsIDB4OTNlZTExNGYsIDB4ZDgzMTdlYTQsCi0JMHhjYzEzMmZiMywgMHgyMzRiY2Q0ZiwgMHgwZWJlODE3YiwgMHhmMjBmMTllMiwgMHg4NTIzOGNmZCwgMHhmYjY1NWY5ZiwKLQkweDBiMmZmNDZjLCAweDc5NmFjZDRhLCAweGY5MDhkNTVlLCAweGE2MDc3ZGZkLCAweDVhNzAzZGMxLCAweDZjY2VlNTkyLAotCTB4ZjFjMjdmNWEsIDB4NTk2N2FiM2EsIDB4YTliYjY0Y2UsIDB4ODM3OGVkZmYsIDB4Y2U1YTQ3ZDUsIDB4YTdmNWE1MGMsCi0JMHgzYWIyNmYxYywgMHgwNTUxMDg2YywgMHhhZGUzYjRmMywgMHgzMDUxZmU2OSwgMHgzZmRmOWI4ZSwgMHhmMjA5MTllMCwKLQkweDVmOTg1OTIwLCAweDMwNTFlZDJiLCAweGEzZWZhY2ZlLCAweDJjMDZhMmFmLCAweDAwY2ZhZmY4LCAweGJhOWY4MmZmLAotCTB4MGU0ZmU4YjIsIDB4NzkxNWVmODgsIDB4YmYxZmQ4NTQsIDB4ZmRiNjgyMWYsIDB4ZTNhOTdiYmUsIDB4ZjA1ODc0NTUsCi0JMHgwMTI4MGE1ZSwgMHgzZTM4NWJmZiwgMHgyNjkwYmE3NSwgMHgyM2M4NDhjZiwgMHg0OGNmNDEyNCwgMHhlNWQ4NzdkOCwKLQkweGRkMDEzNmYwLCAweDVkYjQwZmYzLCAweGY0ZDQ3MjA2LCAweGYwMGJkZmM2LCAweGFjMjFjY2ZlLCAweDI4Y2E3YzlmLAotCTB4YzllNmRmNzAsIDB4OGZhZDA2MTcsIDB4ZTVkYmJmZGUsIDB4ZjQwMWRjMjgsIDB4M2I0MDY0YTEsIDB4ZTRkZDUwNDEsCi0JMHhkNDE3NmE2NiwgMHhjOTVlM2Y1MiwgMHg2OGM0N2YwMSwgMHg3ZTcxMzc4NywgMHg2Y2ExMmQ3YiwgMHhjMGQ5ZjIzNywKLQkweDhlMWZkMzEwLCAweDhmZDBiZGIyLCAweDJkYTQ1NzJlLCAweGE3N2M0ZmE1LCAweDQxMTBhZWU0LCAweDM1NjRhNjNmLAotCTB4NzIwYjljMWYsIDB4OWNlY2RmZjgsIDB4NjBmMWUwYWMsIDB4ZjBlNmRiZmUsIDB4M2Y2YzIwZmQsIDB4ZTlmYjAxZGQsCi0JMHg5MjM1YWZhMCwgMHg3MWU3NGZlMSwgMHgyMzhmMTYwNSwgMHhmZTUxMDU2OSwgMHhmZDA3OWYwNSwgMHgzN2RjMmE3ZSwKLQkweGY2YzFjZTMyLCAweDQ0YmNlOTViLCAweDEzNDYxZjU4LCAweDg4N2NjYjE1LCAweDZhMDBlNDEzLCAweDQ5ZGY1OGJkLAotCTB4NDE3ZjA3ODIsIDB4Y2VjODdmZmIsIDB4MDM1Yjc0ZmMsIDB4MmM1ZGM0MzEsIDB4NWY3ZWI2NGUsIDB4N2RkOTkyZTgsCi0JMHg1YWYwNzIyZCwgMHhhNzA5ZTNkMCwgMHg3OGY0MWI4OCwgMHg4NDhhZTNkNywgMHhmYjkyMThmOSwgMHhiMDlmYjg0NywKLQkweGRlMDA0MmNmLCAweDFiODBlNGE3LCAweDE3ZGRkOWUyLCAweDEyMDZlYTQ5LCAweGQzOGJhZmU5LCAweDIxZjdlZjViLAotCTB4ZTIwOGJkNDUsIDB4Y2M1Y2EzMWQsIDB4OTBhYTc4YmUsIDB4Zjc2OGZlNjAsIDB4ZmIwMDI1NzEsIDB4YjY1OTI5NGMsCi0JMHhmYWJmNjg5YSwgMHhlZjdiMDcyYiwgMHhjZmEyYTRkNiwgMHhkNmMxMWU4MSwgMHg4ZmUzMDIwNCwgMHg0NDBkNDVkYiwKLQkweDM1M2Y4NzRhLCAweDFmODFkOWU2LCAweDI4OGUwMzM2LCAweGVlYWM1MjFlLCAweDk0YmZhMDNiLCAweDZjZGUxNDMzLAotCTB4ZmM0MWVlN2MsIDB4MjRlOGVhNGEsIDB4NTc4OWRmOGEsIDB4YmZiODU1MzksIDB4ZjA3YjI5ZTEsIDB4N2I5ZmNjMmEsCi0JMHgyNGY3ODJkNiwgMHg3MmI0NTY2ZCwgMHhhZDNlNmZhOCwgMHhmMzVlMjFiYSwgMHgwMTMwNzY1NCwgMHgwNWFjZjNlNywKLQkweGExMzliM2U3LCAweDE0NjVlMmZiLCAweDYwOGQ1ZmVlLCAweDIwZTRiZjdlLCAweGU0MDUyZDkyLCAweDgzYmQ0OGE4LAotCTB4MzI3MDRmM2UsIDB4YzJjYWI4N2QsIDB4OTM4YTY4ZTQsIDB4MDI0M2NmYzksIDB4ZGUwZjNmMWQsIDB4ZDFmOTQ0MmIsCi0JMHhiYWJhMWJmMywgMHg3ZTg4NzlkOSwgMHhjMDg5YjdkNywgMHhiYWU1MDljNywgMHhjMTEyMWUzZiwgMHg0NjVjOWU4ZiwKLQkweGVjOWNmZDcwLCAweDNhMmEwMzk0LCAweDFjZTcxZTlmLCAweDA4Y2JmZjRhLCAweGZiMmUxZjViLCAweDVmYzYzMTYwLAotCTB4ODJkZTA1MjksIDB4ZWJkODBiZGYsIDB4ZjA1MmY3ZTQsIDB4MzljYjk4N2QsIDB4ZWQyMTRjOWYsIDB4NTNlN2FjMjIsCi0JMHg0NDJkMTFjZSwgMHg5Y2ZjYmJjNywgMHg5ZjNkNzcxNCwgMHg1MjdkZmJjNiwgMHg3ZDEyNTIyMCwgMHgyYWFjZjBhZiwKLQkweDEyMTVkZjAxLCAweGFkM2I3YWUzLCAweGM0MzhlNGJlLCAweGE2NmQ4YjdiLCAweDIzNWViMGU3LCAweGY0MDkxZTNjLAotCTB4YjFiNzM0ZDcsIDB4YWY5M2E0N2QsIDB4ZTBjOTgzNGYsIDB4M2QxYWJjZTgsIDB4MWM0ZDNlNmUsIDB4MGJkYTI4ZjUsCi0JMHg3ODA2OGFhNSwgMHhiY2Y0ZTJkOSwgMHg3ZTQ0ZmIwYiwgMHgyZjllMjZlYSwgMHg4ZmE0ZjMzZSwgMHgzODhkM2ZlNSwKLQkweDcyZjE4MDk3LCAweGUwNGU5ZmNhLCAweGViZWI4YjhiLCAweGVmM2E3NmZjLCAweGZlYjE4NzhiLCAweGFmNDEwZjgxLAotCTB4NWE3OGY4NWMsIDB4ZjdmOWU4MmEsIDB4NGJkMWJlYjksIDB4YmY4MGVmOWQsIDB4YmY4YzQ5ZGMsIDB4ZTQ0Njk3ZGMsCi0JMHhjNDkyMTRiMywgMHgwZGU0NDZjNiwgMHhkOWZhMGVmOCwgMHg4YTZlMDcyOSwgMHhhOTJmN2U3YiwgMHgwZmQ5ZDRhOCwKLQkweDRlZDA0MWU2LCAweDM2ZDMyZmJlLCAweDFmNGNlNDFiLCAweGUzMjcwMWU3LCAweDdhYjk3MzZiLCAweDEwZGRiMmU1LAotCTB4Y2U3ZmY3MDcsIDB4MDNhOThiZDYsIDB4NWExZTYxY2UsIDB4NjI0ODhmZDgsIDB4ZDZhZDU2N2MsIDB4ZjIwMzM3NWQsCi0JMHhjNjMyOWM2MiwgMHhmOWY5ZDNiYiwgMHhjOTdlNjhhYiwgMHg5ZDE3ZTI4YywgMHhjYzlkM2FlZiwgMHhhN2Y5ZDY4ZiwKLQkweDk4OWJjNzc4LCAweDM5ZmM1ZmRmLCAweDEyNmNlZTIxLCAweGZlNzUwN2I2LCAweGY4Y2ZjY2I5LCAweDZjZmRiMmYwLAotCTB4N2Y4ZGU4OWQsIDB4YTllZWRkM2MsIDB4Zjg2MzFlYTAsIDB4OWJlMzNmNjYsIDB4ZjgxZmNhMjIsIDB4ZjAzZDEwZmIsCi0JMHg5NjZmOTk4ZiwgMHg1ZjM3Y2FmNSwgMHg5NjdlMDIyNywgMHg3NzlmMTZiNywgMHg2N2Q5YTU5ZiwgMHg5NzMzOTNjYywKLQkweGYzZjExYzEzLCAweDYyNGQ5ZjI4LCAweGE5NDNiMWZjLCAweGU4MmU1MWZiLCAweDFhMmRhYjhiLCAweDE1Y2EwM2U4LAotCTB4M2U1MmQ3NTksIDB4ZGZhMDkxZGYsIDB4MDM5MzVhN2IsIDB4ZDMxMjJkZjUsIDB4YWM1YTViM2YsIDB4MzhiNjdmYTgsCi0JMHg2NzhjNWViZCwgMHg2OGYzYjA2NSwgMHg0M2I2ZjI0NCwgMHhjMDM2YjQxZSwgMHhmM2RmNDZhNiwgMHg4ZDkzYTU3YywKLQkweDEzNDM5NDEzLCAweGY0MWQ4MjhlLCAweGYxZmY0NjE3LCAweDhkYzFlNzU3LCAweDgyYjMyNDMwLCAweDMxY2M2MWQxLAotCTB4MGQ5OGJkNjUsIDB4OGY4NTNiZTksIDB4MDBiZDdmMDAsIDB4NTc3ZTgzM2EsIDB4NzNjMTU4N2QsIDB4MmIwZjRiZmUsCi0JMHhkODVmMTdhOCwgMHhjNDA5N2FmNSwgMHhjYjdjZjQ4ZCwgMHgyZjVmM2I3MSwgMHhlZjA1MWEyOSwgMHg5YzdiM2UzMywKLQkweDhlYmQ2M2ViLCAweDI3YTBlN2E5LCAweDRlYTZmNzRkLCAweDk5N2Y0YzIwLCAweDAzMmQzZGVmLCAweGI0OGRjOWZlLAotCTB4OWQwM2VmOWIsIDB4ZDYxZTQ1NDUsIDB4YjVkYjZiOWQsIDB4Y2MxNmEwNjksIDB4MGFjZTgxZjcsIDB4ZmZmNjg1NWQsCi0JMHg2OTllODNjYywgMHg3ZGNlMzUyZSwgMHg2ZTFmOWNhMCwgMHhjMWRiNmQyMCwgMHg0ZmRmMzUyNSwgMHg2ZGU3ZDc0OSwKLQkweGFmOTNmZjMwLCAweDJmODgxNDg0LCAweDkxOWE5NTA2LCAweDlhZWViZWVjLCAweGJhM2ZkMDFjLCAweGM1MWZlMWRjLAotCTB4MTFjM2YwNWIsIDB4YmY2OGZiODYsIDB4NWZiZWYzZTQsIDB4MDhiZGQ4OTMsIDB4YmZlZTBhZWQsIDB4ZWZiMDlhZmMsCi0JMHg3YWRkN2M4MiwgMHhkZGUyYzlkMywgMHhiYjlmY2I3OSwgMHg3ZTYxZjQwOSwgMHhiOWY3MDdhNSwgMHg5Zjk4OTM0YSwKLQkweGIyMTIxYmZjLCAweDM0YmQwMGU1LCAweDQxYzhlMzA5LCAweDJhM2UyZDU5LCAweDUyMjNkZTQ0LCAweDBmMzgwOGQ5LAotCTB4NDI1ZmIzYjUsIDB4YjlhZjhjM2UsIDB4YzEzOGVmYmMsIDB4ZjdiYTkwYWUsIDB4MjZlMzc3YzMsIDB4ZGU4M2U1ZTYsCi0JMHg5NTVlOGU3NiwgMHgwZTk4ZWIwYSwgMHg3NGFiODUzNywgMHg4NzAyMzM5MywgMHhiZTVlZDcwZSwgMHgzOWFlNjhjZSwKLQkweGUxZmNjMGVmLCAweGNkNDNkMDNiLCAweGUwZDg4ZTg3LCAweDgyMGY5ZDdiLCAweGZkMThhN2FkLCAweGU4MDFmOGEzLAotCTB4ZTEwN2UxMWYsIDB4NzhlYmE4MzYsIDB4ODdlNzA3ZjgsIDB4ZmM2ZGZmMmYsIDB4ZjE1OWZkNDAsIDB4ZmUwMGZjM2MsCi0JMHhlMmY3ZTI2MCwgMHhlNjg5ZmY4NywgMHhmZGFmNmEwNywgMHhhZjY1MTlkMywgMHhhNzk2MTUwNSwgMHgzZTc1ZDdhNSwKLQkweGM0MjhlNDU4LCAweDYwODUzNGY3LCAweDY1ZDkwNWJlLCAweGUyZGZiZjY3LCAweGYwMzhjNjRkLCAweDQ2MzY2ZWYzLAotCTB4MDY0Nzg3ZDcsIDB4NzZlMjJmODMsIDB4ZTM3OTMwYTUsIDB4MGU4ZjVkZjcsIDB4OGU1NzY4MDksIDB4NjZlMTBhYTYsCi0JMHhhMjA2ZTNiNCwgMHhiZTM4ZDQzZSwgMHg4MDQxMTFjOCwgMHgxNzMwYWM3YiwgMHhjYmVjMGIzNywgMHhjNWM4MmE1MCwKLQkweDEwZjRlYjY4LCAweGM3NTZmZmYwLCAweDFmNjA1OTY1LCAweGU3MjYzOWU2LCAweDFmNmQ3ZjAwLCAweDU4MTVmY2IxLAotCTB4YTgwZmI2YjIsIDB4MWFhMzdlN2MsIDB4YmQ3NDlmYjEsIDB4YWI3Nzk3YjcsIDB4YzVjNDNmOGYsIDB4MGY3MmUxZjgsCi0JMHg3YTAxNGYzYiwgMHg1ZDBlMWEzYiwgMHgwMDU5MDNmZiwgMHhjYjM0MjEwZSwgMHhmNTAzOGRmMiwgMHhlODNiNGI3NSwKLQkweGUyODM4MDczLCAweDlhNDBiNzc1LCAweGI0MjgzZWMwLCAweGMxOGFkMjc4LCAweDkyMTdlYmNlLCAweGQ2YWVjZTAwLAotCTB4YmM0MzA3MmYsIDB4OWZjYjdhNjgsIDB4ZDNiYzAyMGYsIDB4Y2QyNjdkZjUsIDB4YjY2NGNmYjgsIDB4NDc3Yjc1YTMsCi0JMHg3Yjc0MmJmNywgMHhkMDg4YTI0OCwgMHhiNzY4MjZlZCwgMHhiODZlZTdmMCwgMHhhZmQ2MWIxZiwgMHg3MWNmMGQ5MCwKLQkweGJkNWE3NDNlLCAweDU3ZTVjM2M4LCAweGNlOThmM2EyLCAweDY5MGQ3MWU3LCAweGQ3YzhiODQzLCAweDk5MzM3Y2RmLAotCTB4YzcwNjY3ZDIsIDB4MjRmZGY0YzcsIDB4ZWQwYjkwOTQsIDB4ZjE0ZDVjODQsIDB4ZmM0NGI1NzAsIDB4YWI5Yzc0NDksCi0JMHgxYzdjODEzNSwgMHg4Y2Q3MjdjNSwgMHhlZmUxZDYzNywgMHgzZjQ4ZjRiMiwgMHg1ZTZmYmRiZCwgMHhlMjk5MjYxZiwKLQkweGRjYjdkZmYxLCAweGFiZTc2M2VmLCAweGU3NjNlYWZmLCAweDE1MGUyNzY3LCAweGE4MmMxMmZkLCAweGI5ZDkzM2UzLAotCTB4YzNjMzM3NTksIDB4N2FmZTI1N2UsIDB4Yzk4Yjg4ZjUsIDB4N2I0YjQ0ZjEsIDB4ZGMxYjljMmUsIDB4NWMyYmYzYmQsCi0JMHhmY2VjZjcxZiwgMHgxM2IwMWRlYSwgMHgwODk3MWMyNywgMHgzYzRlMDFlNCwgMHhmNzA5MjYzZSwgMHhlMDY3YzczZCwKLQkweDZmZGU5ZDNlLCAweDBlNGRhN2Y1LCAweGZmMjM5ZWMyLCAweGVmODJmN2U4LCAweDE0NzhmMGEzLCAweGU1ODZjZjgwLAotCTB4M2QwZjFkOGIsIDB4M2Q5ZGZkMGMsIDB4M2NlODkxMmMsIDB4M2JjNTEyZjMsIDB4MjU2OWUyMGMsIDB4N2RmODdlZmMsCi0JMHhmNDk3YjMwMiwgMHg1ZWZjN2RmNiwgMHg1OTcyZmZlNiwgMHg5YjZiN2VmOCwgMHg2MjVlZmRjNCwgMHhkNWYzYTI4ZCwKLQkweGU1MjRmMzU0LCAweGY1N2FlODQ1LCAweDUyZTNkMmIxLCAweGUwN2QyYzZlLCAweDBmOWQ2M2VmLCAweGRjNjc5M2NmLAotCTB4NTc5ZmE5NWIsIDB4MjNmOGUzYWUsIDB4ZjNjM2RmN2IsIDB4ZGQzNDU3MDAsIDB4N2U3ZDgxMjEsIDB4M2M0ODg2NDUsCi0JMHhhOTVlZTM1MSwgMHgyYTNlMGY1MiwgMHg4YjhmNzFlZSwgMHg3NmVhZTVlNywgMHgxZmE3ZGVjYSwgMHhmNzA2OTE5ZSwKLQkweDdhOTg4ODU5LCAweGU1YjJkZDU1LCAweGI3YTg1Yzk1LCAweDcxY2Y3MTg5LCAweDQ1N2JmMTliLCAweGYwMTIxZGNiLAotCTB4MjYyZTE3ZmYsIDB4M2Y4ZGJkMWYsIDB4MjdjYTYyZjEsIDB4MDlkZDAyOTcsIDB4MDQwYWYzYjMsIDB4N2QzMzIzOTQsCi0JMHg3ZGZjZWNmNywgMHg5ZWE4ZmI2YSwgMHhmZDEzZGRmMSwgMHhiMTc4NzRjZCwgMHgyZmY3MDhhMywgMHg5OTg3YTM3YSwKLQkweDc5ZDE3NzZmLCAweDQyZmNlOWZhLCAweDZhN2U5ZTc0LCAweGI5ZjFlZDhmLCAweDJmOTJmZWIxLCAweGJmM2FlYjAzLAotCTB4OTEzZWI3NTYsIDB4Y2U5Y2Y2MGEsIDB4MTk1MmQzYTcsIDB4ZjFkODRjZGYsIDB4NDY3MTJhNzAsIDB4ZGJjNjY1ZTgsCi0JMHg2NmZkMzk1ZiwgMHgwY2U2NmQxMSwgMHg4MjZkY2ZmYSwgMHhlMTdkNDJlNiwgMHhjZjkwNmQyNywgMHg5YzYxYzY1MiwKLQkweGRhMDk1NmY1LCAweGNmZTc4NDFmLCAweDU5YjFkNzliLCAweGQ3YmMyOGUyLCAweGQ5N2JkN2JhLCAweGEwY2ExNTg3LAotCTB4MTVlYmNkNmUsIDB4N2MwZTE3ZGMsIDB4NGFhNzVlNmQsIDB4NzA0OWQ0MGYsIDB4YjQ4OTU4YWQsIDB4NmUzMWU5OWMsCi0JMHg5OTcwZWJhNywgMHgyOTM2ZmNlOSwgMHgwNGY0NzljMywgMHhjYzBmOTlhNywgMHhiOWY2ZWFmMCwgMHhjNTM5NGY3ZSwKLQkweGRhMTRiNGM3LCAweDIxNmFiNWRmLCAweDFkNjYyZmNlLCAweDY5ZTk3OGU2LCAweDVlNjllZGZkLCAweDdmZmM0ZDQ3LAotCTB4ZDdkNGQ4ZTYsIDB4YzkzZGJkMDAsIDB4ZTY2ZTk5OWIsIDB4OTQ3ZjVkNzYsIDB4NTg3OTAwYzAsIDB4ZjkxZWMxZmEsCi0JMHhmNDhlOTVjMiwgMHgxMGE3MzkyZCwgMHgwZjFiZWMwZiwgMHhhMjRmOTNiNCwgMHg3ZDMyMjFkNiwgMHg5ZGRiZjIwOCwKLQkweDI3YWNmNjZlLCAweGNlN2E1YjdlLCAweDExYTliYzQyLCAweDFmOWI5M2JlLCAweGVkZGYwMDc0LCAweGIwMWNlYTkwLAotCTB4NTljNTMzYWYsIDB4ZjE0NDliNWUsIDB4YTJkM2Y1MzUsIDB4NzRiY2YxZWIsIDB4Yzg0MDg1YmIsIDB4YTljYjVhNmMsCi0JMHhhODQ3MTBiZCwgMHg5ZjMwNDgzZSwgMHg3NzY1YThiYSwgMHg0YmU5ZjAzMSwgMHg1MWZhMWI1MiwgMHg3OTA5Njc1ZCwKLQkweDZjY2VjYTMwLCAweDgwNzVhOTZlLCAweGM2OWNkNjFkLCAweDRiZWQwM2NlLCAweGNkYmM4NjI2LCAweGJmMTkxMjQ3LAotCTB4M2QzZTFmMzYsIDB4ZmRhNzEzYzMsIDB4OGViZjZmMDAsIDB4NzE3MmQyNzgsIDB4ZmM2MTc2NWQsIDB4MDU4ZDY0YTMsCi0JMHhkMDU1M2ZlNywgMHhiYjAzNGU1ZSwgMHgwZjc2NDZlNSwgMHhiOGViNTc2MywgMHhiYzI4ZDM5NywgMHhhMzI0Yjc5ZCwKLQkweDdjZDY5OTllLCAweDRhNmUxZGNmLCAweGYzM2ZlMDg4LCAweDFjZjc3OWYxLCAweGRmNDBkYjQxLCAweGFjMzU1MTJiLAotCTB4ZTM2NDU0OTcsIDB4N2ZiOGY4YmUsIDB4MWQzNzVlYTUsIDB4ZDE5NGFmZGEsIDB4MmUyNjk5YmYsIDB4NzUxZTIwOTYsCi0JMHgwM2M4NDMzMiwgMHhkMGE3NzE3ZiwgMHhhNzdlMTJiZSwgMHhjNmNlNWZjZCwgMHgyYTdmNmUyMSwgMHg0YzZmOWZmOCwKLQkweGJmOGQxZDRmLCAweGY1ZWFhMjZkLCAweDZiZjdmMDBiLCAweDViNGZjOTg4LCAweDZlY2NlZGJlLCAweDNlNWY2ZDJiLAotCTB4Yzc3Y2MwNTMsIDB4ZTIyY2VlNjksIDB4OTI5ZmUyOGYsIDB4Zjk5ZTk0MzUsIDB4ZmE1YjJmOTQsIDB4NWY1ZjAxMTcsCi0JMHg2NzNjNmE1NywgMHg0MWNjYjMzNSwgMHg2M2YxZDEwMiwgMHhjMmMzMmRjMSwgMHhiNWU3OGZiMywgMHg3ZWZjMGI3NiwKLQkweDU3ZTcyZTU5LCAweDM1OWY3ZTcxLCAweDVkZjBkNTNiLCAweDY2NzY2MTM5LCAweGRkOTEzNmY1LCAweDdlYzg1MjU3LAotCTB4YWY5NzUxMjcsIDB4YmMzOTcxMWYsIDB4MzdjN2ZiOGEsIDB4NzAwY2IzN2EsIDB4MGQyODg3NGMsIDB4NjkzMzM0ZmQsCi0JMHhkNzVkZGEyOCwgMHhlNWM3NmQ5YywgMHhlMGZjNWNiOSwgMHg3OGU4OWJhZCwgMHhmMjYxMWEzZiwgMHhhYmM1YzU2YiwKLQkweGQ4MzIyZjkwLCAweGM4NGNjYTdlLCAweDZmNDExMjJlLCAweDY2YmJkZjFhLCAweDQ3MWViMWJjLCAweDI3YWJjZjhlLAotCTB4YjMzMDdkNzQsIDB4OWJmZGM0NTUsIDB4Y2YxNDg1OTksIDB4ZDNiMTg5MDIsIDB4MThiZWFkYmYsIDB4ODY1ZWQxNjcsCi0JMHhlN2I1ZDA3OCwgMHgwNGJiZjgzYywgMHg4M2UyZmEzMSwgMHgyZmE0ZWZkMiwgMHgzODMyYTA1ZSwgMHhkMmY1Y2E5ZSwKLQkweDBmZGZlZTQ0LCAweDZmNDA4MzIyLCAweDFmMWIxMzRjLCAweGEyZWEzZTA2LCAweDBlMzVhNmViLCAweDhlZWJlOTFmLAotCTB4NTA5N2VmZWUsIDB4MjFiZTA2MzksIDB4OGYxODY5MWQsIDB4MDMyZTc2OWQsIDB4N2Y3NDQ5ZjMsIDB4YTg0N2FjM2YsCi0JMHhiMWM1YTI1ZCwgMHhjYzRiZWU5NywgMHgxMzA3ZGMzMSwgMHg3NjUxMmJkNiwgMHhmZGYwNWM4OSwgMHhkNDY5OTJlZCwKLQkweDAwZjI1NTFlLCAweDlmYzQ4MWJlLCAweGUzMGNmYThmLCAweDcwOTAyNTkyLCAweDhjYzFmMTAyLCAweGE5ZTcxODUzLAotCTB4OGFmZmE4OTYsIDB4NGMxM2YzZWIsIDB4MDk3ZmQxY2YsIDB4MzBmOTExMjksIDB4OWM3YTJiZGIsIDB4ZGJhNDlhZDksCi0JMHgwOTNlNDY1MywgMHg5N2FmMWJjNywgMHhmM2EzZWUzMSwgMHgxM2UwMDk0OSwgMHgxMTdhZmZlNCwgMHhmMWJkM2FlMywKLQkweDZmN2UzZThkLCAweGZhYTIxMmZjLCAweDBmMzg0OTI4LCAweGZiZjk3MGJmLCAweGJjZjJmY2I2LCAweGM4YzMyN2NlLAotCTB4ODlmMGJlYjAsIDB4YmYzYTFmY2UsIDB4YTYwOWQ4YzQsIDB4ZWI0ZjUwNzgsIDB4ZTk4OTRiY2QsIDB4ZDY5ZWRmODgsCi0JMHhjODQ3OTc5YiwgMHhiMzdiZDdhOCwgMHgzMTI2NzY2YiwgMHg3NDRhZWUzZCwgMHg1ZDU3N2Y2MywgMHg3NjA5ZDMzNCwKLQkweDExZWI5NThkLCAweGM3MGFkZDdkLCAweDlmMTllYWI1LCAweDU3M2VkY2JjLCAweDZhYTNmZDgyLCAweDExZDkxZmQwLAotCTB4NjBmMWU4M2EsIDB4YWU5NzJmOWQsIDB4OWNmZjE4MjEsIDB4Njc1NmY1Y2UsIDB4NTYwNzhiMmIsIDB4NzAwMzE1NGYsCi0JMHhlNWI4YTI4NCwgMHg5ZDU5ODdjMSwgMHhkM2EyY2JkZCwgMHgyN2NlNmFmNywgMHgwOTZlZDI4NSwgMHgxYWYzNzc3ZSwKLQkweGJlMjBkMDRkLCAweGM0ZjFlMWU0LCAweDgwOTRlNzE5LCAweGFmYWIxZDlhLCAweGM3NWZiYTc0LCAweDBiYmYwN2JmLAotCTB4MjNjNmJmZGUsIDB4MWM0YmE4MDQsIDB4M2JhZWNmYTMsIDB4MTg4YWVjYzcsIDB4Y2ZiYzJhN2IsIDB4ODkxZTYyYWIsCi0JMHhlYjRlNWY5OSwgMHg4NjQyMWY3NCwgMHgwYWVkM2JmYywgMHg3NmZjZTkyMSwgMHg2ZjdkZmU4NSwgMHgxZTA2NGU3NCwKLQkweDY1ZWU3YTA2LCAweDFkODBhZWY3LCAweGUyYmU3NDBmLCAweDNhZmQ4NDljLCAweGNjZjE4YzkzLCAweGJmNzkxZGIzLAotCTB4YmY5M2RmNDEsIDB4Y2RhZmJlNmYsIDB4YzZkZTlmM2MsIDB4MTdmNzQ2ZmYsIDB4OGZhMGZmYjgsIDB4Y2VjNDk1N2IsCi0JMHgyN2Q3OWJjNywgMHhkNzVlOWM3ZCwgMHg5OWJkZmUyMywgMHhlMjkzYzM3ZSwgMHgzZWJhN2RkYiwgMHhkNzNmYzE4ZSwKLQkweGFmZDEzZGQ3LCAweGViYWQ3ZDM3LCAweGJlYjc3ZmM1LCAweGQ3ZDdmYmQ2LCAweGIzNWM3ZDEzLCAweDhmYzllZjFlLAotCTB4ZWFmMmY1ZDQsIDB4ZGY4YzE2ZjUsIDB4ZmFmZWUxNGMsIDB4OWUyZjFlMTQsIDB4NmNlMmM0OTksIDB4ZWVkZWI4YjMsCi0JMHgwMTY2ZGNmYSwgMHhiMzI4MmViYiwgMHg2ZWZmMzBmZCwgMHgzNmExYzYyNywgMHhkMGY2NjJlZiwgMHg3MjRlM2M5YiwKLQkweDljNjIyMGI3LCAweDE2YjFlZWU0LCAweDE3ZDRkYmQ0LCAweDRiNzk4N2NhLCAweDgwOGM4NDQ1LCAweDJjMDFkY2ZkLAotCTB4ODUyOGRmNGUsIDB4NmJlZjUwY2EsIDB4NmY3MzgxMTIsIDB4ZWZkZmVhYWYsIDB4ZmQwNGRmZjEsIDB4NzBmMWZkZGYsCi0JMHhhM2M2MmQ0YiwgMHhjN2UwNmQ0MywgMHg3MDkzY2I4ZiwgMHhhYWQ5MmM1ZiwgMHhiM2JhZmM2MiwgMHgwM2Y3OGFkNSwKLQkweGQ5ZjhlZDc1LCAweGY5ZmExOTZlLCAweDVhZTA2ODljLCAweDBkNmFkNGJlLCAweDFlODE0YmVmLCAweDEwMWUyNjk5LAotCTB4YWJhMzNmMjEsIDB4NTlmZGUwOWIsIDB4OGE4NzY3OTMsIDB4NDI5YjNmYzEsIDB4MGUyMTZhZGEsIDB4Zjk2MTUxMzAsCi0JMHgzZDNjNjZlOCwgMHhjYzMxZjdjYSwgMHg3ZGUxMTRmYiwgMHg5ZjY2NTY4OSwgMHg3NjQ0YmIxNSwgMHhmYjRmNTgwZiwKLQkweGU2MGFjZDEyLCAweDJmYjZmNzU3LCAweGEwOTY3ODUxLCAweDJmYjMxNjlkLCAweGQyZjRjY2QxLCAweDk4OTdkZGI3LAotCTB4ZGY4N2I4MDgsIDB4OWZmOWQzNjcsIDB4YzNkMjI3ZWIsIDB4ODU2NmM0ZmUsIDB4YmY3NTY3ZWQsIDB4YmZiMDEzMmUsCi0JMHhiOGI0YjFjOSwgMHhmNmRlYTM3MSwgMHg0YWVjNzYyOSwgMHgxZDNkYzBmMCwgMHg0ZGVmZjk5YiwgMHhjMDM1ZDhlYywKLQkweGZjZjZlNmEzLCAweDc3N2I2ZTdlLCAweGNkYTRhODExLCAweDk4NGFkNzhkLCAweGI5ZTNjNmY3LCAweDE5YTBiOGUxLAotCTB4NjZmZjFjYWYsIDB4YzgxNTZlN2MsIDB4MDdjNDA3MmEsIDB4ZTBhOWI0NWIsIDB4YmZiOGY1MTcsIDB4NzFjMWVkZDMsCi0JMHg1ZDQ3OGFmYSwgMHg0OTFmMzY0ZSwgMHg2ZjlmMDBmMCwgMHgwM2MwMzIzZSwgMHhmYzAwM2ZlMywgMHhhYjU5NzEwYSwKLQkweDkzZjAxNWZiLCAweDlkM2UxYzc3LCAweDhhYmNmYjgwLCAweGE0YmYwNTQ3LCAweGIxYTZkOTNiLCAweGVmOGM4OTczLAotCTB4MDNjMzk5ODMsIDB4OWFiZDBmYjAsIDB4ODRlNmY5ZjMsIDB4NGM4ZWJmZWUsIDB4NjFhZmRlOGIsIDB4MzlmYTMzZmIsCi0JMHg2MDg1NWFmZiwgMHhjMmRmODgzZSwgMHg3OGNjNDFmMiwgMHhlYjY2ZTQxYiwgMHhlYmM0ZTZiNSwgMHhhNjljODljMywKLQkweDM1ZjJmMThhLCAweDdmOTY2MmI1LCAweDgwN2U3ZTYwLCAweGYwMzk3N2YzLCAweDcxNDdlZDAxLCAweDg5NTZiODMzLAotCTB4YWVmZjg0NjUsIDB4Y2VmNTgxMjgsIDB4YmZlNWFmNWMsIDB4YzY3YjQzODcsIDB4MWNkNTY1ZGYsIDB4ZWQyYTMzOTYsCi0JMHg2N2QyNzhlMywgMHg0MGVmYzA1NywgMHgzYjk2Zjk2YiwgMHgyZjcwZGM3MywgMHhmMmNhNTA4MywgMHhiMmY5MmMzYywKLQkweGM0OTNjODQ2LCAweGQ2OTUzYTUyLCAweDBlY2I5MjJiLCAweGI4ODNmNTI2LCAweGU0MGQ3M2IxLCAweDQ3OWU0MzMzLAotCTB4MmY0NDVhNWUsIDB4MGFkNzQ3ZGMsIDB4MmUyNDVlNWIsIDB4YmYxMmIwZWIsIDB4M2Q3MGVjMWQsIDB4NzllNzlmY2YsCi0JMHhmYmViYjUyYywgMHgzZWVjZWRkMSwgMHg4NmZlOGFlYSwgMHg4NTBlNGU3MywgMHhiZmJmNDc3ZSwgMHg5YTNkZWFkZSwKLQkweGExNGNmOTg0LCAweDdkZDI5NTQ0LCAweDc4Njk4ZWY5LCAweDc2ZTI5MDdmLCAweDNlNDc3Y2UzLCAweGY4MDMyOTNmLAotCTB4ZDlmNWMyODEsIDB4ZmY1YzMxZmYsIDB4YzgyZTBmMWIsIDB4M2E3MTgxNmYsIDB4MDYyYzhlYjYsIDB4MDg3MjMxZmQsCi0JMHhkMDhiNTk5YywgMHg3YzQxYWE4NywgMHhiYzEyMGY2ZSwgMHgwMWZmZjEyZiwgMHg1MTI4MDljMiwgMHgwMDAwODAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDViYjVmZjAwLCAweGQ1NTQ3NDBkLCAweDc5YmZmZjlkLCAweGJlNGNkZWYzLAotCTB4MjEyNjRjZGYsIDB4MDEyZjA4NDIsIDB4MWM0MjQyNDIsIDB4NjFmMDgwNjIsIDB4YzQ0NDNlMWQsIDB4NjAyYTAzMjAsCi0JMHg0M2UxOTZlYiwgMHg5YTFhZjkwOSwgMHg3YWI3NmViYSwgMHgyOTA0OTMwZSwgMHhiNjkzZGIwMiwgMHhiNjU0ZTU2ZSwKLQkweDI4YmI1NjBlLCAweDgyNjA5ZDg5LCAweDA0ZWMyNjgxLCAweDZlYjUwMzE0LCAweDViNjA0MDQwLCAweDZhNDQ1NDc3LAotCTB4YmI4ZDMyNDMsIDB4YjI5ZWVjNTQsIDB4ZjdiZGZmZmYsIDB4NjBjMzMzMjUsIDB4MzkyZGQ5ZTksIDB4ZGRmNzM3MzksCi0JMHg3ZmZkZWVmYiwgMHhmNzVmZmVmYywgMHg1OTVjMDAzZSwgMHhjOWEwMDM5MiwgMHhlN2I3M2FhNiwgMHgwMDFhYTgwMiwKLQkweDZkYmNkYzY0LCAweGEwNTU2MDUyLCAweDMyNGU0MDE4LCAweDYzMjQwYTZkLCAweGQ0ZGE2NjliLCAweDY2OGE2ZDg2LAotCTB4OWFhOWUzNjIsIDB4NzA4MDVhY2UsIDB4NmMxNGIyY2UsIDB4ZjJjZTcwYjQsIDB4YzZlZmJjMjksIDB4YzM0Yjk2NTYsCi0JMHhmZGVjMzJjMSwgMHg0NWYzOGE1ZCwgMHhlMWQ5MGE5YywgMHhmZWM0OWUwZiwgMHgzOTE0OGZmYiwgMHg0MmZmNjNiNywKLQkweGE0MDk2YTYyLCAweGU3ZjJhYzAxLCAweDNmYjA4NTM1LCAweDFiMWZlMmQ1LCAweDY5Y2ViYTQ0LCAweDFhNmQyYzllLAotCTB4ZmUyZGQ3YzAsIDB4N2JlMzIwODksIDB4Njg1MjliYzksIDB4ZjAwNWM5N2QsIDB4YmFiNjNiMWQsIDB4MjI5NDhmMDYsCi0JMHhkNWQwMmU3ZCwgMHg2MGEzMDBmMSwgMHgwOGE5NzZiNywgMHhlYjgyYTkwMCwgMHgwNWY2ZjFlOSwgMHg1ODA3NGMyYiwKLQkweDhlZmYxMzM5LCAweGYxOTIxN2Q4LCAweDUzZDIyNjc5LCAweDc0MWI5ZmNlLCAweGI0MDVmZWUwLCAweDMwY2Y0MWJmLAotCTB4NWRhZDkwMWQsIDB4ZWZmNjAyNGEsIDB4OTZlZmY2M2EsIDB4OGZiODE4NTEsIDB4ZGY5MzEzZjcsIDB4YmY4YjYxMjIsCi0JMHhhMmZkN2ZkNCwgMHhiZmMzZWZjOSwgMHhkYjlmNjgwNywgMHg3OTJiYjY2OSwgMHhjNDM2NzRjZCwgMHhlYmY5OTlmNiwKLQkweGViMTE5OTQ2LCAweDNlN2MxZmMzLCAweDY1MDkyZjhkLCAweDkwMTVkNTlkLCAweGYzM2VmZDhhLCAweGQ4YWIyMTQ3LAotCTB4ZjQ2NzdmMDcsIDB4ZTMyN2U2N2EsIDB4NDVjZTMzN2IsIDB4ODE3NWM3M2YsIDB4ZDYyZDlmZTgsIDB4MGNiZjA3MmQsCi0JMHhhMTk5OGYyOCwgMHg2MWIzNzllOCwgMHg1YzY0MWZlNywgMHhlOGU1ZjY3NywgMHgxNGI0MGJlNywgMHgzNDY3ZTMwNywKLQkweGY4Y2ViZThjLCAweGJkNzBhYTQzLCAweDZmNWYyYjdhLCAweDM0YmM5ZGU4LCAweGNkOWJmZDQwLCAweGJiOTQ1MzI4LAotCTB4OGU1MGNiYWEsIDB4NzdmYTc1ZWQsIDB4NjZmYjQwMTcsIDB4NzAwZjk3OWMsIDB4YjU5NWIzNjAsIDB4ZWI2YjRlNTMsCi0JMHhjZGNlZmU4OCwgMHhlMDE1MjAwOCwgMHhkNjJjZTZkMCwgMHg5OGM2OWFhYSwgMHg1NjFhNzI5YywgMHgzZWM0NDk0MywKLQkweDkwYzdkZjFhLCAweDJlMzlkMGUzLCAweDgyYTFhOWM3LCAweDVmNjBlNmU3LCAweGFmYzA1NWU5LCAweDRiMzlmMDhmLAotCTB4YjgwODY5YzgsIDB4OTUzNDg3OWMsIDB4ZjFmYTc5YzksIDB4YzQxMWRkOWYsIDB4MTMyYzk2NDcsIDB4MjVmYzExZTgsCi0JMHgxN2EwODllOCwgMHgwYTkzZjQ4YywgMHhkOTdkNTFlYywgMHhkNWNmOGZkMCwgMHhkZmViODU5NywgMHg3MTRmZDYyMSwKLQkweDA3NWE4ZThlLCAweGExMTNmOGZjLCAweDg1ZjY0M2JmLCAweDcxZjIxMmJkLCAweDA1NjU3MjQ3LCAweDllNTY5M2YxLAotCTB4ZDk2ZWI1MTcsIDB4NDI3YWIxM2IsIDB4ZDNjYmUxYzEsIDB4MjA5ZmM4OTAsIDB4YzY5ZmE2OWUsIDB4MzNmOTg4ZjEsCi0JMHgwMDkyM2UxYywgMHhmYTI2ZmY5NCwgMHg0Y2IzNDAzOSwgMHg2MmViMzQ3NiwgMHg2ZjI3ZjNmNCwgMHhjOTliYjdhNiwKLQkweDliOWU0YTEzLCAweGU1ZWJmOGUzLCAweGNiNDU3MzY5LCAweGI0NTE3ZDMzLCAweGQxZGMzMzNjLCAweDJhYjUxY2YyLAotCTB4NzliNzZlNWEsIDB4YTYzMmU1YTIsIDB4ZjhkNDcyNzIsIDB4NTFhNTRkZDgsIDB4OTlkZjcxZmQsIDB4ZDczZjM1MTUsCi0JMHgzZmFhMmYzNywgMHhhOGUyZGI3ZSwgMHg5NzliMTNmOSwgMHhlZDI3ZjU0NywgMHhmY2Q0N2FmYSwgMHhhOGRhZmY0MiwKLQkweDU1YmRhMmYxLCAweDI5ZmZhNGI3LCAweDc5YThmYTgxLCAweDU3ZDM1ZTI0LCAweGNlZjZmZmU4LCAweGYzZWQ0NmVmLAotCTB4MmZmZmQ2YjcsIDB4OWM3ZmY0NjMsIDB4ZDIzNGQ5N2MsIDB4ZjQ0N2ZhMTcsIDB4ZjI0YTgzOGIsIDB4ZDk5ZjA5MzYsCi0JMHg5M2YyNTY5MCwgMHhhZmI3YWViNiwgMHhiZTk3Njg0OSwgMHhlODhmYmE3OSwgMHg2NzA2MmRmMCwgMHgyYjNkOGUxMywKLQkweDZiZjIyNWJiLCAweDI2ZDQ1MDYzLCAweDRjNWIxYmY0LCAweGZlZmU0OTUwLCAweDZhZDMyNmZiLCAweDlkODhmMjc3LAotCTB4YjYyNGQ3MWYsIDB4OTgyYWYzZmUsIDB4ZjNkMWVjMTMsIDB4Y2M4ZjE3OTYsIDB4MTRkM2RhMzMsIDB4Zjg4ZGE2MWYsCi0JMHhmNDViYWZkOSwgMHgzZGYyMTBhNiwgMHgxNDdlZTY1NSwgMHhmMjY5ZWJmZCwgMHhhN2E0MTdhZiwgMHg4YTk5NzIxNCwKLQkweDhhNzhhN2MzLCAweGVkNTliYzU5LCAweDBlMDZkNmM2LCAweGI0ZGIxZWE5LCAweDVmYWViZjExLCAweDUwNWNlNTQ3LAotCTB4OThmZjJmZmQsIDB4M2IyMTNmZTgsIDB4ZGZmYTQ2NWYsIDB4ODZkYzgxMjUsIDB4ODliYjU2YmYsIDB4YzM2MWYzZWMsCi0JMHg5YTdhZTk2ZiwgMHgyMWFlODIyZCwgMHgwNDhmYTVlNCwgMHhkMGQzZDY2YywgMHhmYWQwYzNlNywgMHg5ZGFmY2NmMSwKLQkweDQ4MDVhNmZmLCAweGNlNTVlN2ZmLCAweGIyZmYzMThmLCAweDA5OWY2YmYwLCAweGZlNGZkNmJmLCAweGJjNjQ3ZjJjLAotCTB4NTI4ZmNmNzIsIDB4N2NlNzVjNzQsIDB4NDQwYTJjMDEsIDB4ZTQyYzI5YzgsIDB4NThkMDY2MDQsIDB4NzVjZDk5YmMsCi0JMHg4NzZhYTE3NiwgMHhiZmFlMThmMiwgMHg0NGQ4N2RmMiwgMHgxM2ZjYWNmYiwgMHhlZjdjOGE2YywgMHhkZWMyOWFjZiwKLQkweGIzMjZiM2ZiLCAweDU5MzYwNTc2LCAweDE4MTVlNzI4LCAweGFjYTU2Y2NiLCAweDVkYjA5NDFmLCAweGU0MGEwYmRhLAotCTB4ZTRmMzJjMDEsIDB4Zjc5NDI0MmEsIDB4MDNhNjc5YzAsIDB4YTI5MmI0YjcsIDB4YzEwN2JkZjEsIDB4M2ZmZjkwYWQsCi0JMHgxNGRhY2RmYiwgMHhjZWJjMzc5YSwgMHg0ZmRkNGZkYiwgMHg4YTgxNWQzOCwgMHg3ZGZmNjFiNiwgMHg0NGM5NGY5YiwKLQkweDUzYmUxMDdmLCAweGY3MTFmMTYyLCAweGY3NzNkMmIxLCAweGE2OWU2MzIzLCAweDNjMTY3MzM4LCAweGJlYTBjZTU3LAotCTB4YWQ5MzgzOTYsIDB4NjAwYmFjNjcsIDB4MTczM2YyOGYsIDB4ZTNhNjA4NTQsIDB4MTYwYmJlM2EsIDB4NDc0OGNiZmYsCi0JMHg0NTYxYjIzZCwgMHg4Zjc3ZDRmZCwgMHhiMDY0N2U2MiwgMHgzZmFkOGZlYSwgMHhjN2FiNzljNiwgMHg5YzUyYzY4NCwKLQkweGE3ZjU1MGJlLCAweGMzZjNkMjdjLCAweDIwYWZkMGJiLCAweDNkMTI0YjZmLCAweDExOGNiNjE5LCAweGZmNWY5YzM5LAotCTB4NjM4ZDBhNzksIDB4ODY3YTY1YmMsIDB4Y2JlNzE2N2QsIDB4ZDhmYjdlNGMsIDB4NzFiY2M2N2IsIDB4NmRhM2I5YjYsCi0JMHg1YzcyZTcyNCwgMHhmODhkZTY2NCwgMHhiMDBhNWEzMywgMHhhOTU0OWY5NCwgMHgxNzdlOWZmZSwgMHgwYTEzODRlOSwKLQkweGNiYzBjZjViLCAweGZhOTc4MTQ2LCAweDI0NTQ3ZDVjLCAweDg2NTNlYTVlLCAweGYwOGEzMmYxLCAweGNjYjJmZjUyLAotCTB4M2JiZWE2ZWMsIDB4OTcyODBmYzEsIDB4ZGU3NzAyMzMsIDB4ZmI1ZWQ3N2QsIDB4OWUxZDRlYWUsIDB4Yjg4YzdjZWYsCi0JMHg5ZjI3MTFkMSwgMHg4Yzc0NmUyMCwgMHg2ZTIyOWY3YiwgMHhkOTBkZmZhOCwgMHhmZGU4OTUzZCwgMHhhOWM3ZTc3OCwKLQkweGMxZjc1YTFlLCAweDUwN2JhMzViLCAweDA2ZmQ5ZjBhLCAweGM3MzhmN2M5LCAweDlkMGMxMGZiLCAweGJkYmE3ZTY1LAotCTB4MWQyMWY3NTAsIDB4M2I1YzBmZjMsIDB4NWQ1Y2Y5NGIsIDB4NjBiNzQ1YmIsIDB4NzQyZDhhZmYsIDB4N2Y5YTc5ZWMsCi0JMHg1ZjlhMDI1MCwgMHg0ZTYwNGMxNywgMHhmMjVkYWVhYiwgMHg1NTc4ZTAyNywgMHgzMWQ2ZGI2NywgMHg1OTZhYWZkOCwKLQkweGMzNjE0NjU2LCAweGJiYzEwYTliLCAweGU0YmY3YzY4LCAweDRiZjFjNDZmLCAweDE3MjU4MzliLCAweDg3YmFlMDI3LAotCTB4NzVhMjVkYWUsIDB4NzVmMTBlMDcsIDB4ZTYwZTZmMmYsIDB4YjAzMDBlNTMsIDB4YjQwN2NkN2YsIDB4MDViYjRkNWUsCi0JMHhiMWJmMjgxMiwgMHhiNDMxZDUwNSwgMHhhMDE0OWI1ZiwgMHgzZjAzMmFmZCwgMHhjYWZkNjk1MCwgMHhhMDRkOTY5NywKLQkweDZmN2FhNmY0LCAweDExMDljNGNmLCAweGMwZTA2YjdlLCAweDM5NDc1NTQ5LCAweDYwZmZiNjU1LCAweGM2NTc5OGExLAotCTB4ZTE5Zjk3YzMsIDB4YTM3ZmUwZDcsIDB4MWNkZjI3YmYsIDB4NmZmMTNmZTksIDB4ZjA5M2Q5MWYsIDB4ZjIxNmJmYmYsCi0JMHhiZTM1ZDU1ZiwgMHg3ZTg5YzQ4OSwgMHg4OTc5ZTNhNSwgMHg4NGQ1OTVmOSwgMHg1Yjg3MGJhNywgMHhkYTRiZmI3ZiwKLQkweDRlYmZlMGVmLCAweGQ5NDBkYzI0LCAweGRjMWJjOWFkLCAweGViMTcxNjNlLCAweGY5NzAzZWM0LCAweDQyOWRkNTNkLAotCTB4NDUyZTUzZjIsIDB4ZmYzZTczZmIsIDB4NDM1ZGNkOTAsIDB4MmE5ODYxZmIsIDB4YzQ4NDQ0ZDgsIDB4ZDBkYjg3ZTQsCi0JMHg5M2U0ODAxZSwgMHg0M2VjYzg5YiwgMHg2YmFiMGU0ZSwgMHhkMWVmOWU5MCwgMHhhY2M3YTQwNCwgMHhkOGI1ZDU4NSwKLQkweGYzMTc2NmRmLCAweDk3ZmVhY2YyLCAweGFmYTQ2ZjczLCAweGYyNjY2NmMzLCAweDI3ODFlNmIxLCAweGVkMTg2ZmQyLAotCTB4M2E0NzFhN2UsIDB4YTY3ZGU2OGUsIDB4NGViYzcwODYsIDB4NmUxMmFjYmYsIDB4NTNiZjgyZWIsIDB4ZGJkZmE0NzUsCi0JMHg1NzQyZTFmOSwgMHgzNjAyZjc5YywgMHg5MzE0YWZlZSwgMHhkOTRmNzJiYiwgMHg0YmQ0N2Q4OCwgMHhmMDg5MjE4ZCwKLQkweGNlOTI3MDdlLCAweDJmOWI1OGYyLCAweDQ4ZWJlOGM0LCAweGY5OGY4OWQwLCAweDNkMzc3ZTA3LCAweGVmZGViMTE0LAotCTB4MjYxMzFmMTEsIDB4N2VlYmY0OGMsIDB4NDI4OTYxZjEsIDB4YzNmZDdiNzIsIDB4YzhjYTczMTIsIDB4ZTRjYzgxZjMsCi0JMHgzYTVjN2Y0YSwgMHgzYTc4YmM3OCwgMHhmNjk5N2RkNSwgMHhkMTYwM2RhZCwgMHgxM2JlMTkxYiwgMHg3N2MyNDE5YywKLQkweDNkMTM5MjU3LCAweDZkNWJlMTM1LCAweGY3YzQ4YjJjLCAweGJhZWU4Y2MzLCAweDQ4ODlkOTJlLCAweDY1Y2ViYTg3LAotCTB4M2YzNjA2OWUsIDB4OTA2YTQ5YzUsIDB4MDhmYWU3M2IsIDB4NjZlNmIyNjcsIDB4YzFmZjg0NzgsIDB4YTU0NzEwZmQsCi0JMHhhM2ZhMzdmNCwgMHhjZmNmMzY5NSwgMHhlNGU2N2Y0OSwgMHhiYzQ4YzRlMCwgMHgzOTQyOTlkNSwgMHhjZmU5MTI4ZCwKLQkweGMyMzczY2QzLCAweDlmNjRlNGZlLCAweDc5MjBlOGRlLCAweDdkNjUzYmE2LCAweDg5OGE3ZjQ0LCAweDBmNDA2NWViLAotCTB4OGUyOWRhYTUsIDB4NTBmNWM2NmQsIDB4ZGZjMTAzMWUsIDB4YjdmYzkyYTUsIDB4OTJiM2FlNzYsIDB4YTZjNzdmZGQsCi0JMHg1NTU5M2QzMSwgMHhmZjYxYWU5ZiwgMHhiZTQ3ZDRkYiwgMHg0YWVlYTliNywgMHg5OTZkYWJiMiwgMHgwZDc2NDA4OSwKLQkweGVmODY3NmQ5LCAweDAxZDc4NGJmLCAweGJkNTQ1N2IyLCAweGI4YTAxZTAyLCAweDM2ZjAyMDNhLCAweGZmOTgxNjMwLAotCTB4NzA4ZmRjYTUsIDB4MzdiZTUzMjYsIDB4YTNjOGNjOWUsIDB4Njc2ZjNjZDEsIDB4MDhjNWM5NGYsIDB4YWUwZTA3N2UsCi0JMHg0YTdkMTI3NCwgMHgzMjFmN2YyMiwgMHhmNzYzNWUzOSwgMHhjMzgxNGZmZCwgMHg5YjZiNGRhNywgMHhlMWM0NDZlNywKLQkweDE1YmY3OWQ4LCAweDAwZTQzNDc4LCAweGFiMTY1ZjY2LCAweDhjZjEzMTA3LCAweGRiM2FkZjg3LCAweDFmZTQzM2JjLAotCTB4MGJiYmI2OWYsIDB4ODk5YjBmYzgsIDB4YWVhM2MyMzAsIDB4ZTcwM2E1YzYsIDB4Y2RlOTA3ZmYsIDB4Yzg1YzdmOTgsCi0JMHgxYTNjNTU1NSwgMHgyMTRkZjVjOSwgMHgzMzc1NDU1NywgMHhlYjYxYTMzOSwgMHhmY2MzYzc2NCwgMHhlZDcxYTllNSwKLQkweGRmYzEwYmVjLCAweGJkNjhkY2I2LCAweDJhYmJjZWM3LCAweGJlNGM1M2Y4LCAweGU3NDRiNWFjLCAweGNkZDk5OTYxLAotCTB4ZmE2NjFlYTAsIDB4MDYwZGU2MzcsIDB4NzdmZDcxYWYsIDB4OGJiZjdlN2QsIDB4MDU3NzNjZWMsIDB4YWY2N2U3YzMsCi0JMHgxMWNhOTYxNCwgMHhjZGIzOGVlYiwgMHhmZmUyMmZmYiwgMHg4YTBmMDMxMywgMHgwZWU4OGIyZiwgMHhkZWIxZjBjNSwKLQkweGY4OTJmZWU2LCAweGM4M2JmMjM2LCAweDRlMTJkYzc2LCAweDRlMDdkNDQwLCAweDNlYjBlZjExLCAweGFiZTMzMDI4LAotCTB4MjRlODkwODMsIDB4ZjIyNmRlZmYsIDB4MTliODMzNjAsIDB4YTljMDkyNGUsIDB4MDVkNzdhYjMsIDB4ZmM4ZDlhYmYsCi0JMHg2MDk4ZjUzNSwgMHg5YjUzNzYzYiwgMHg4MTM5Y2EyNCwgMHg5Y2NkNjA4ZCwgMHgyMjhjOWIyYSwgMHg1MmM1NjVjMiwKLQkweDBjOGM4OGFmLCAweGY2ZWQ1M2M3LCAweGJkMjBiNzdiLCAweGYzMjdjMTA3LCAweGZlYmEzOWJhLCAweDkyZTQ5NzA1LAotCTB4MzdkZWViMjIsIDB4YmRkN2UyYWIsIDB4NjQ0ZDNkYmIsIDB4ZWVhOTdmZDcsIDB4YWQzNDE5OWQsIDB4ZmFmZWQzNTEsCi0JMHgxZDgyNzdmYSwgMHgxODIyZThmMywgMHhkYjI3YTNjZSwgMHhhMDU0NDY3NSwgMHgxMDJmZTM4MCwgMHg3YjMzZjQ0YywKLQkweGYwOWY1NGM0LCAweDFhN2U0ZmRiLCAweDkyMmJmOWU1LCAweGE1NTNjZTI5LCAweDBkYWIwMjgxLCAweDc4ZWVjNGEwLAotCTB4ZGEzNjViNjYsIDB4M2ZjZTA0ZDcsIDB4ZWZlODliZjUsIDB4MGM2NzllNWUsIDB4NGU2ZmQzZDcsIDB4ZmEyNzc5NjYsCi0JMHg5M2Q1OTkyMSwgMHg0NjI1YTA5YSwgMHgxZjk4NjU2ZiwgMHhkODhkM2E0MSwgMHhlMGYxZWFhMywgMHhjOTUzMmZiMSwKLQkweGY1ZGFiNmVmLCAweDg0YmQyNzdmLCAweGY5NDBjYjhmLCAweGE0Mzk4MjViLCAweGQ1ZDhlMmRhLCAweDMxNjNjYTAxLAotCTB4Y2VkYzc5MGYsIDB4OWRhYzZiY2YsIDB4ZmI4ZmNiOTIsIDB4NTAxNzc1NWIsIDB4YjRkMDRmN2MsIDB4N2Q4NDcyYTksCi0JMHgzNjI1ZDgxNSwgMHg4NWQ4ZjZhZiwgMHhjN2YzMTUxYywgMHg1Mjc3YTYyYiwgMHg5YWZkNzE4YiwgMHg3NGE5ZmQ4ZSwKLQkweGZlN2Q1M2FjLCAweGVkNGE3NGQ0LCAweDBhOWVjZDhiLCAweDRjZmJjZTNiLCAweGE1NmY5M2RhLCAweGJmOWI3MGJjLAotCTB4MDgxM2U0ODQsIDB4YmM1MWE1ZTYsIDB4OWYwNjYyOWQsIDB4N2E0NmY0YjksIDB4NTk0YWJiYmMsIDB4Y2JiNzU1OTEsCi0JMHg1ZDI5ZGFjZSwgMHhiY2EwNmM3NywgMHhmY2U0MWJkNCwgMHgwZTBhMWVkMiwgMHhlYjAyNzYxNSwgMHhkOTM2NzQwZiwKLQkweGJmZWYzZDY5LCAweGZmMjY4Zjc1LCAweDU2MDMyZmI0LCAweGY1NzhmZjkxLCAweDdkZmNjOThiLCAweGZlNjk5ODMzLAotCTB4ZTA0ZGJiMWEsIDB4ZjNhMjZmZGMsIDB4ZGNlMjdkYTcsIDB4MTMwYmUwNmEsIDB4M2ZlYzY3OWIsIDB4YWNhZTczYTUsCi0JMHg4MzhhMGUyMSwgMHgwZmM4NDdjZCwgMHg1ODU5NzQyNCwgMHgxMmYwOTUxZSwgMHg2MTc0Nzk3MCwgMHgzOGU3NDc3ZSwKLQkweDhhMDFlZjg3LCAweDcwMzY4MzQzLCAweDlhZGUzODRhLCAweDRmNzk2NjE4LCAweGJmYTJkYmI4LCAweDlhZGM5MTI4LAotCTB4NTViY2VjODEsIDB4MjE0YWY1ZTUsIDB4ZjI3ZjcyMDIsIDB4YmY2MzczYzgsIDB4ZThlN2FlODQsIDB4ZTE3MDg5OGMsCi0JMHg2MDk3YjhhMiwgMHg5MzNiODY2ZSwgMHhjMjlkZTUyMywgMHg3M2I0NmVlOCwgMHgwNjI2YjUzYywgMHg5Nzk0Yzk0ZCwKLQkweDkxNzgwNDRmLCAweDI3NDIzNWQxLCAweDNhMGQ3ZGIwLCAweDZmN2Y5OTBiLCAweDllOTdjMzU1LCAweDM0YmEzMDc0LAotCTB4NzAyMTQxYzIsIDB4OTI2YmExM2EsIDB4NDEyZGZlNGUsIDB4MTIzZTMxNzMsIDB4OTNlOWRkMzQsIDB4NWJjYmE0NmUsCi0JMHhkYTE3ODk4MiwgMHg2MTFiZjdjZCwgMHhhZWM5OGVkOCwgMHg3ZDIzODliZCwgMHg2YjQyZGEyYiwgMHhmODM1YzcxZSwKLQkweDIwYjMzZTE2LCAweDBlNGZhMjNiLCAweGZkZTQ3Y2E2LCAweDNlZjdlY2U3LCAweDlkOWIyNWIzLCAweDU0NjRmOTE3LAotCTB4MjliNjEyNzUsIDB4Njc1M2UyNzYsIDB4NzRkN2EyN2MsIDB4Mzk3Mjk0NjUsIDB4NDk0ZTUxMzgsIDB4M2MzZTNlNTYsCi0JMHg0YzllNzExZiwgMHhjZjNlNjRmZCwgMHgxNjkyZDE2OSwgMHgwMTdiMzJlNywgMHgyZjIzMTdiMiwgMHg1ZTBhNWM3YiwKLQkweGI1ZWQwYmJhLCAweGI0ZWUwN2ZmLCAweGRmYWJlNDYyLCAweDE2ODllNDc0LCAweDM1ZmJmNzljLCAweGY2MjBmYzgxLAotCTB4MTc5ZWE5NGYsIDB4ZmM2ZjlmMDksIDB4Mjk4ZWVkNjYsIDB4MTU1YjZmZTQsIDB4OWRmOTA1NjcsIDB4MmM4N2VmOTAsCi0JMHhkMTU1N2RmZiwgMHgxZGQ4NDdiNywgMHgwOTMzODc2NCwgMHg3OGZiYjFiZiwgMHg5MGZlMzdjZiwgMHg4M2MxZGJmMiwKLQkweGM5ZDU2ZTkyLCAweDg4NzM4NmVmLCAweDRmYWViYWVlLCAweGRlZTdmMjU1LCAweDdjYjIxZjgzLCAweGU3YmE2ZTc2LAotCTB4YWZlYTNiMzUsIDB4M2U2MWIzYmMsIDB4MzQyNjc1YzksIDB4MmViZjkxMzcsIDB4MjA0MTc5MTIsIDB4YTE5M2ZiOGIsCi0JMHgzNjJmZjlkMywgMHhiNGUxZTg0NCwgMHg3YjA4MzdiMCwgMHhlYTdjNTFjNiwgMHg5ODdhZjYxMiwgMHgzYjZjNGVlYSwKLQkweDRmMWUxZTdhLCAweGJhODg3N2ViLCAweDAxYWY3OGQ4LCAweGI5MjE4YzhlLCAweGFjOWJjMjM3LCAweDdlMzc4ZTFkLAotCTB4NTljMjIyZjMsIDB4NmFlYjU5ZDEsIDB4NzdmY2M0NTcsIDB4N2FiZjNjZWQsIDB4YmRmM2NlZDcsIDB4Mzc5ZWU5ZjUsCi0JMHgzZGQ1M2U0OSwgMHhjNGE5YTkxZiwgMHgwZTQwYzVlNywgMHhhYzAxOTNkNSwgMHg3ZTM4YjU4ZiwgMHg2MzdlZDg2NCwKLQkweDBlNmJjOWVjLCAweDdiZGYzNGFiLCAweDQxNWY5ODE5LCAweDQzNDk2ZjdkLCAweGRiM2JlZGZkLCAweDNlMGQ3OTM5LAotCTB4YTQ5ZDQwZWYsIDB4OWU3MDllNTEsIDB4OGExZDg3ZDcsIDB4NmZjZDBjN2IsIDB4ODRiNTczMzgsIDB4MjIwMWQ4ZmMsCi0JMHhkYWI5ZTkwMiwgMHhlNDhlM2Q1ZCwgMHg5NzlmZjg4NiwgMHgwNmQ2NzY0OCwgMHg3NjE5YWZjYywgMHg4YTc2NGM1YSwKLQkweGZlMTMxN2VmLCAweGM4NWZhOGNiLCAweGRhYWI3MmZjLCAweDY1ZDk5OGI3LCAweDJlYzgwOTg3LCAweDFlY2NmZjExLAotCTB4YzUxYWZmMTAsIDB4ZWQwZDYyZTMsIDB4ODkzZmJkODEsIDB4OWY2Yjc5ZDksIDB4NThmMmM1YzksIDB4NTkxM2ViZjQsCi0JMHhkNDAzZGU3ZiwgMHhhMDViZWQ2ZiwgMHgyMTM3M2IzMSwgMHg1ZWM5NGI5ZSwgMHgzYWQ4NDc4MywgMHhhNDg5ODAwMSwKLQkweDkxZGMwOTNhLCAweGY2MDUwM2U3LCAweGMzMzdhNjU0LCAweGY2MTc0ZTVmLCAweGQzZDAyODFiLCAweDkyNDdjODljLAotCTB4NDdkOTQ3MmMsIDB4N2RlNDljNDQsIDB4M2Y1ZDQ3MTEsIDB4OWU2N2M3ZmEsIDB4ZmI0ZjgzOWQsIDB4NDRkMDljNDQsCi0JMHhmZGM3M2M3YywgMHhhYzQ1YjdmZSwgMHhkNjZiN2ZhYSwgMHhjN2NhMTZkMiwgMHhmMWIzMmQ3ZiwgMHgyMjdjZTJjMywKLQkweDQ0NzI3MDI4LCAweGRjNTA0ZjljLCAweDZmM2Y1MWQwLCAweDY5ZDc3MzhhLCAweDFmYTE3N2Q4LCAweDM0ZGFlZTlkLAotCTB4ZjJhYTcyOWYsIDB4YTk0N2NkNDUsIDB4Y2MwZWU1OWQsIDB4Y2U3MTU0YTcsIDB4MGFhM2JlYWEsIDB4YzIyMmYzMzcsCi0JMHg3YjkxZmI1ZiwgMHhmN2U0Y2M4YiwgMHhhZWZhZjNjZSwgMHgwN2YwY2JmZCwgMHg5ZTFjYTJhZiwgMHg4ZmYyOGMzOCwKLQkweDFkOTBhNzEzLCAweGFmY2MzZjg2LCAweDhkZDY0MGM2LCAweGUxOTI4M2UzLCAweDRiZGU3NjQ3LCAweDk3NjgxYzc4LAotCTB4NDg0OGZhNDcsIDB4ZmE5YjAyMWQsIDB4OWZkYmU5MTksIDB4OWZkZjYxZjEsIDB4NDc0YWNhZWUsIDB4Nzg3MTFlNzksCi0JMHg5ZTUxZDJiMiwgMHhjY2JmMjc4MywgMHgzOGVjYjMyNCwgMHg5YmFiMTFmZCwgMHgxMTU3NTVkYiwgMHgwZjNkYTdlMSwKLQkweDM4MzhjZDRiLCAweDczZjNhNzM1LCAweGY0NGIzMjk0LCAweGNlZDE4YWY5LCAweDMwNzFlNzRlLCAweDI0M2IwN2RmLAotCTB4OWFjYjE3NTYsIDB4NzZlNmVhOWYsIDB4ZmU2MmE1ZDksIDB4MmI3YzE5NzMsIDB4MTFiZjkzNjYsIDB4ODI4ZjgxZTcsCi0JMHgxZmMyZTdmOCwgMHhhMjYzY2ZkNCwgMHgyYmU1MjhmYiwgMHg3YjFlYjcxOCwgMHhhZjM5ODk1NiwgMHgzYzIyNjRkYiwKLQkweGUwOTJlODZkLCAweGU1N2JjODI3LCAweDE3NzFkOGVlLCAweGM0NmE1YmNiLCAweGY3M2IxYjNhLCAweGZhODMxYjFjLAotCTB4N2EyOTdhYWMsIDB4MmJlNTBkNWUsIDB4YzAzYzljZWMsIDB4MTY5YWNmZWEsIDB4NDk5ZjNhMjUsIDB4NzhjYjc5MTcsCi0JMHgwYjc5NGYxOCwgMHgwN2Y5ODllMiwgMHgxNmJkMGNjNSwgMHg4NzQ1ZWZjNCwgMHg2YjRjOTBhNywgMHgwOWNiODk5ZiwKLQkweGNiYjMyYWZkLCAweGI0YmY5MTQyLCAweDI4ZmVlM2NlLCAweGNjZmMwNTdjLCAweDhlMDZmNjZlLCAweGIzZGQyMmE2LAotCTB4YjQ5ZDcyNWEsIDB4MWYzMzJjYzcsIDB4Y2I5OWQ1OWYsIDB4ZmQ5ODBjZTIsIDB4NDQ1NDMyZjIsIDB4OTBiM2NiYjksCi0JMHhkNzNlZDNlNSwgMHg0Nzk0MmNlOSwgMHhhMDkzZjBhNSwgMHg4ZGFlZjNmMSwgMHg5MTRhYWY4MiwgMHg0N2Y0NmRjZiwKLQkweGZjMTMzZGQzLCAweDg2Y2ZiNDRkLCAweGE4MzM5MmJkLCAweDEyODBmOWQzLCAweDhhZjNhZjM3LCAweDlkNzY2YTc1LAotCTB4N2JjNzQ2M2MsIDB4NzllODgxYjUsIDB4NmYxZjIxNWUsIDB4ZmRmM2Y0NjcsIDB4ZDU4MTM2YzAsIDB4MzQ3Y2UyZTksCi0JMHhmOWQ4NzIwNywgMHhkNWFkZWY3OCwgMHg3ODU3YmY1MywgMHhhYzRhNzE3ZSwgMHgxNjZmOGM2MywgMHhmMjQzYTliOCwKLQkweDdlMzViZjQ4LCAweGE5Yjg0ZmQ5LCAweDNjYTk3Yzk0LCAweDM1ZTQ4NWJmLCAweDAzM2FmNzQ4LCAweGEwZmUzYTJmLAotCTB4ZjkwYmQ2M2MsIDB4NjE3ODEzYWMsIDB4YjVmYmUxN2MsIDB4ZGQzZjI1YmIsIDB4MTlkZmFkMmIsIDB4ODFhM2ZmNGQsCi0JMHgwZjA5MGIzNSwgMHg2Y2FhYjhiMSwgMHg1YjdlNTg1MSwgMHhjYTU0OWIwNSwgMHg1NTcxNjM2ZiwgMHg2Njk3OGMzNSwKLQkweDJjNThlMjk1LCAweGQyM2NlYTllLCAweDc5ZTZlODRkLCAweGVlOTVmZmY5LCAweGNlYzgyNTZhLCAweDU5ZmZhYTdkLAotCTB4ZmU4OGZhNzIsIDB4NzRhOTZmZjYsIDB4N2RhMzc4ZmUsIDB4MTk1NmZkNzAsIDB4ZmQ3YzExMzgsIDB4NmYzY2ZjYjUsCi0JMHg0YzMyN2ZlMCwgMHg5NDVkZmE2NiwgMHg1MDc1OGI3ZSwgMHhhNmRkM2U3NCwgMHgzMjE4ZmI3MiwgMHgwMzYyZjNmMywKLQkweDJmZWZiMTNmLCAweDNkZjhmOTE0LCAweDU3YjU4MGJiLCAweGE1NGYzZjNhLCAweGJlYzFkZmYzLCAweGFkNjA1NGExLAotCTB4M2ZjNTExNjksIDB4ZjA4ODRmZWEsIDB4NzlkMmZiM2IsIDB4ZWIzNWI4OWQsIDB4YmU1M2VmZTMsIDB4ZTI5YjRmN2UsCi0JMHg2YTBlNGNjNCwgMHg4YTZlMmFjNiwgMHhkZjYzMzVkMywgMHgxMTEwOWNjYSwgMHg3OWQyZGE1NywgMHhkYjRmNzlmZCwKLQkweDc0MDk4ZGEzLCAweGU0OGFmMGNlLCAweGVjMWJmMzI0LCAweGQ0MjNmYmZhLCAweGNlNDhiNWY3LCAweGIxZmVmODg5LAotCTB4Njc3N2ExYmUsIDB4OTJiMjNlOTMsIDB4ZGU3YWQzYTYsIDB4NWE4YmJiZWUsIDB4YzVlYzdmYjEsIDB4NzU5MTljM2IsCi0JMHhlNzNiMzFlNSwgMHgwYWIxOWVlZiwgMHhhM2ZkOWI4YiwgMHg0MTU2N2U5MywgMHgzZGFlODBlNywgMHgwZmZiOGVjYywKLQkweDlkOTJhZWJkLCAweDkwNGFiNjBmLCAweGNiMWQxYjg1LCAweDhmOWFmYTNhLCAweDI3MDM5Y2VhLCAweGU3YzY0YTU1LAotCTB4NDM1NDlmYjcsIDB4NWMwZjkxNWYsIDB4YzgyYjcyYzEsIDB4NTU5YjQ5Y2UsIDB4MWRkYzZiYWEsIDB4Y2EyMWE4OWYsCi0JMHg5MGZhNWU4ZiwgMHg3NTU1M2Y5ZCwgMHg1NDhmY2M0YSwgMHgzYWZkOTZlZCwgMHhmYmI0NzlmZSwgMHg1NDcwOTUwZCwKLQkweGE4YzEyMmQ3LCAweDg1NzFjOGRjLCAweGEzYmY5MzhkLCAweGRjMmRhN2ZlLCAweDVjZjgxYTdmLCAweGUwNjhmMDJiLAotCTB4NWFlYmMwZDMsIDB4NmRkNjY3ZTEsIDB4NjNlM2M2OGIsIDB4MWEzYWRhZTAsIDB4NjViNDdmZGYsIDB4Y2Q3OTRhOGQsCi0JMHhmZGYxY2RhMywgMHgzNmFmZTE4YywgMHhmZTg4ZmQ1MCwgMHhlOGFlYzM3ZiwgMHg3MTg3MWI3OSwgMHgzODdlNjNlOCwKLQkweDFiZjU5ZmQ2LCAweDQyODQyYzM4LCAweDcwNTBlMWMyLCAweGUyMzMzOGVkLCAweGFhYzllYWZlLCAweDVlZTcxMDcxLAotCTB4YjcxMTFkZTQsIDB4MzM3OWI4OGQsIDB4N2U3NDBlYjksIDB4ZjNiYzUyYWUsIDB4NmVhYzJiNjYsIDB4YjdmZjY2ZjAsCi0JMHhhYjkzODkxYSwgMHhiYjBiMjcwMiwgMHg1M2Y0YzBmZSwgMHg4MGIzZDVkMSwgMHg5ZTAyNWJmNiwgMHg5MmVmOTIxYSwKLQkweGYyOGQyNGFlLCAweGI3MTA4YWUwLCAweDE2NWRjNWRiLCAweGZhMjI1ZmJmLCAweDJkY2UyYzRjLCAweGQyMTZjMDgxLAotCTB4MGI2MWUwZmYsIDB4MjQzYzc3M2YsIDB4ODQwODdjYjEsIDB4ZTQyMGRiMWYsIDB4NzdjODQxYmQsIDB4NjM1OWQ2MDMsCi0JMHhlNjJmMjk0YSwgMHg4MmM2ZjQ3NSwgMHhhNTI4YzczZCwgMHg2YmNmMTNhZiwgMHgyNTRkMWY4ZSwgMHhlZTA2MmYzOSwKLQkweGI4MDcxNjY3LCAweDY1ZjQzMTlmLCAweGUzMWI4OWM0LCAweGE0OWJmODYxLCAweDBiMmVlYWVmLCAweGY3MDhmN2QwLAotCTB4NWY3MzNmMDksIDB4ZTkxOWZhMGIsIDB4YmMxZmJiNDYsIDB4YzVlMTg5MmQsIDB4OGRlOWMxZDcsIDB4ZWQ3NThiOGQsCi0JMHgwZTRkZjNkMSwgMHg4OTBlNWY5ZSwgMHgxMWNmMzZiYywgMHgzMDhhYWZhZCwgMHg3YWUzMTUyNCwgMHhlOWQ5NzU4YiwKLQkweDk5ZjU2ZjY3LCAweDEyZGVmZjY5LCAweGY1ZDNkZDg5LCAweDNjZDNlM2VhLCAweDljMzhmNDcxLCAweGRkN2M4YjU3LAotCTB4ZjNhNTJmZTgsIDB4ZDAxZjljMmQsIDB4ZWIyMzkzOWEsIDB4OWUwZTlkZjEsIDB4OTRjZDU3N2YsIDB4ODhmZjI0N2QsCi0JMHg2OTY5NjVmYSwgMHg2NWZhZGM2ZSwgMHhiZmU3MDNhNiwgMHhlNzZlYmQ5ZCwgMHhjNWZhYzhkNCwgMHg3MDlmMjdiNSwKLQkweDFmYWNiZGY4LCAweDdmOTI5NDU1LCAweDY0ZmVlMTY4LCAweDRkZDcxY2EwLCAweDU4MWM3Y2EzLCAweGIxNmRlYjdlLAotCTB4ZjBjZWE5ZjgsIDB4ZWYyODhlMjIsIDB4NDI3MDg3YmEsIDB4ZGQyNWQ5ZjYsIDB4ZmNjMTM4NGQsIDB4Y2QxMjZlZmYsCi0JMHg0MzdhYmEzMiwgMHg2Mjc1OTdmZSwgMHg5N2U1YzYzYywgMHhjMzAzZjgyZCwgMHg5YzA5ZjFkZCwgMHhhOGRiOTQ2ZiwKLQkweDUxODBmNTc4LCAweGMxN2RkNDA3LCAweDc5ZTM0ZGYzLCAweGVhYzQzOTlkLCAweDg5MmViYTgxLCAweGM4ZmRiNmUxLAotCTB4YTQ1YzljYjUsIDB4OGZmYmIwNzcsIDB4ZmRiMDZiMzksIDB4YTM4ZjA3MDcsIDB4MWYwMmYzZWQsIDB4NTcyMDc3ZDEsCi0JMHhmMzcxYWQ1YiwgMHgyZGJmNjFjYSwgMHg1Mjc2NjE2ZCwgMHg1OTMyODRhNywgMHhmMzEwNzFkZSwgMHgzZjU4MTliYiwKLQkweGQ1OGNmYTljLCAweDEyNDdlZDBmLCAweGY2YjlkMzU2LCAweDM4Y2Y1YWMwLCAweGQ0ZjQyYmVkLCAweDNmMmM4ZDAwLAotCTB4YWMyZDg0NmQsIDB4MzIyNWZjYTUsIDB4ZjFhMGRiOWYsIDB4MTMxZTRhZWYsIDB4NGZmYThlZjEsIDB4YzMxZmFlMjEsCi0JMHg4ZDJiNWZiOSwgMHg1YjdjMTdlNywgMHhmYTM3NGI2NywgMHhkNGFmYzMwMywgMHgxNzU3YmMwYSwgMHgyOTRhZDllZiwKLQkweDUzOWU2YzU3LCAweDMzMDhlYzJiLCAweDYyZGYxNjc4LCAweDBlOWQ5YmYzLCAweDljMDhiZjkxLCAweDY0NGE5YzM2LAotCTB4NzFlMGVhZjksIDB4NWQzM2EzNTksIDB4NDc0ZmViOTQsIDB4Nzk4NmZlNTMsIDB4NzM5YzVlN2EsIDB4MmUwNGNmY2MsCi0JMHg2NWZkYzVmYiwgMHhlNGNjYjk0MywgMHg1YmM5OWE2NiwgMHhmOTQyMWYyMywgMHg5ZTBjYmMzMSwgMHhiZTUzZjY0YywKLQkweDhkZjg3NDVmLCAweGY1N2ZkMjNjLCAweDY5MTc5YzVlLCAweDBmM2ZhODc3LCAweGNmYzdhZWZiLCAweDQ4MWI1YzcwLAotCTB4YzYzMjc3NjIsIDB4NmZjM2JlZjgsIDB4MzU5YzI2NGMsIDB4OWYzMmZhOWMsIDB4YmU1YWU1ZWIsIDB4N2QzOWI4ZWEsCi0JMHhiYzQ5MmI0NiwgMHhiYzQ5MzU4ZSwgMHg4NzMwZWQ4ZSwgMHhmMjdlYTk1MiwgMHhmZWRkOTQxZSwgMHg3YTFhN2QwOCwKLQkweDQ3NjExN2ZlLCAweGZhZjVlNjYwLCAweGZhY2U4NzFlLCAweDE3MWM1ZDBkLCAweGUyZGU2ZWE2LCAweDc5ZjgyYmZlLAotCTB4YmZmNmMyOGQsIDB4ZTIxZTdjNjEsIDB4MWFlMjJiZTUsIDB4N2JhODVkMTAsIDB4Yjg2NjEyYWYsIDB4MzEzNDllZjMsCi0JMHg4NzI3YmM3YSwgMHhiYmUzMjMzMiwgMHg0NTFkZDY4ZiwgMHgwNmExYWY3ZSwgMHgwMjQ5MWY5OCwgMHhjN2U4YjNmMiwKLQkweGRlZjc1NDdjLCAweGU1ODEyZTc3LCAweDc2ZjJjNzRiLCAweDk1YmYzMDU0LCAweGFkZjkwMzI3LCAweDRkNTU0ZTI3LAotCTB4ZjkwZjhjOGEsIDB4MjdlNzk5MGUsIDB4Y2EyYzg3MjQsIDB4ZmJlNTllNTYsIDB4YzIzNDM5MGIsIDB4NzNlZjUxNzIsCi0JMHhjZTkyYmYxYywgMHg1Mjc1ODBlNSwgMHg2YzcxZDkzNywgMHhmOWFiNzQ5ZCwgMHgwNWI3NDM2ZSwgMHg3YmQ4MWNlOCwKLQkweDEzYmVjMmMxLCAweDgxYmRkYWI5LCAweDg1ZjBlMWQ1LCAweDE5ZjkxMjY3LCAweGE3NmU3OGYwLCAweDFiYzM4OWY2LAotCTB4YWJmM2QxMjYsIDB4Y2VkZTM3ODcsIDB4YzZhNTJmY2UsIDB4MjNlNWY4YTgsIDB4MmYyOGIyZmEsIDB4ZTNhOTkzM2EsCi0JMHg5OWY3NmQ3OCwgMHhjMmFkNjA0YywgMHg2NDdlYTdlOCwgMHhjMWQ3N2FmYywgMHg0ZjYwZDdlMywgMHg5MGE3M2IwMiwKLQkweDAwZTM4ZjIwLCAweDViYWQ0NDI2LCAweGNiMTZmZWQzLCAweDY1M2E2YTIzLCAweDhjMWUyNDU3LCAweGYwNzAzZWY3LAotCTB4YzIyM2VhZmMsIDB4OTAxM2YxMDEsIDB4NmRjZjRjNWMsIDB4N2NlOWFkYmMsIDB4YWQ1M2QxOWQsIDB4MWIxZTk4MDQsCi0JMHhkZTNlMTQ1YSwgMHgyZmNjNWJjYSwgMHhiMDNlMWQxOSwgMHgzNmZlODhmYiwgMHhmN2U2YmYzYSwgMHgwMmJjZWMxYSwKLQkweDE4ZmIzMjY3LCAweDZmZjQyODJhLCAweGU4YWZmZWM3LCAweGM4NzVjYTExLCAweGRjZmUwMjZmLCAweDliODNlZWMyLAotCTB4MTFhN2M3N2EsIDB4NWY3YTg3ZWUsIDB4MTc4YmM0NzcsIDB4MDgzZGQwZWYsIDB4OTcyMjdhOTIsIDB4ZTNiMTE3ZDcsCi0JMHgzOWY4MzI3YiwgMHhkY2YzODljMiwgMHhlYjk4OWQ4ZiwgMHg5ZmNmMTQ5OSwgMHhhZjFlNjBmOSwgMHhlZjIxMjViNywKLQkweGJjNTE2NTc2LCAweDMyMTdiNGZiLCAweGRlY2YzOWY4LCAweGUyMDlkZjZjLCAweDgxMmRiZmE3LCAweGRiZjVhN2RkLAotCTB4ZmNlOGI5ZjgsIDB4ZTljZGM3ZmQsIDB4YTVkYjc3MTQsIDB4YWEzZjE0NjksIDB4NDA1ZmRlMGIsIDB4MmZkOGY4ZjcsCi0JMHg3ODJiN2U2MywgMHhkNjFiZGQ5MCwgMHg3NDJkYjRiNiwgMHgyZWEzYTFjNSwgMHhjNWYxZmI4MywgMHhjOGZiZmM2YSwKLQkweDdiZjhjNWRiLCAweGY1MTBjY2UwLCAweGVlMTMwZWQxLCAweGEyODU1ZWY3LCAweDg2Nzk2NzZkLCAweGY0MzZmOTJiLAotCTB4ZmYwYmY3YmYsIDB4ODUxMmMwZmIsIDB4ODFlZjI1ZTUsIDB4MDc3YmYwYWUsIDB4NTRiMDNmN2UsIDB4ODVmYmQxZjgsCi0JMHgxZTVhNWU1ZiwgMHhlZDk3MjdlZCwgMHg3ZWU5YTc4NiwgMHhiZTJiOTk2MCwgMHhhYzQ4N2UxZiwgMHg2YzVjMWNiZiwKLQkweDQ1MTYwN2RkLCAweGU0NDg3YmNmLCAweGEzYjkwZjc3LCAweDEwY2E0ZjlmLCAweGYyMWYzN2ZlLCAweDMwMDZmZmM5LAotCTB4ZWJiZTkwMWUsIDB4NWM1ODEzMGIsIDB4YzRjYTZmYmQsIDB4YjFjMTc5YjgsIDB4ZmRlZWMwY2QsIDB4YmZmZGM1N2IsCi0JMHhjMjg2ZjdhMSwgMHgzYWJjNTlmNywgMHgzNWZlNzNkMSwgMHgwOWRiZjMxYiwgMHg1ZWU3MTc5MCwgMHgxOTVlMjQ2YiwKLQkweGQ3MjBmZWY2LCAweGE4MmZiOGI3LCAweDg2OGQzOGQ1LCAweGU1NjBhZmRlLCAweDY1MmU3OTEzLCAweDkwYjE3ZGU4LAotCTB4MDRkZWY1N2YsIDB4YWY5ZWYyMmQsIDB4ZWE4YjYwMzYsIDB4ZDM2ZjNiN2IsIDB4ZjlmODQ2MmUsIDB4ZjQ2ZjgxNmEsCi0JMHg3M2M4ZTZmZCwgMHg2N2IyOWQ4YSwgMHgwYmRkMDY3MSwgMHgzZTU5ZmI1OCwgMHhiOGIwMWM4ZCwgMHgwOGU1N2M4NSwKLQkweDExMmM3MmJlLCAweDZkY2FlOGYxLCAweDc3ZTJlMjZiLCAweDhmYmIzZjg0LCAweDZiMDc3ZGZiLCAweGNjMmQwYTdiLAotCTB4OTIwMzZhZWUsIDB4NmFhM2VlOWYsIDB4YWM5ZWJjODMsIDB4YzllYmMwNWQsIDB4NTc5ZTc2ZmMsIDB4ZjI1MDc4YWUsCi0JMHhiZWU2MjRiYiwgMHgwNjdkMTM0ZSwgMHg3OTVhOTY3ZSwgMHgzMjcwMzZmYywgMHgxZjgxMmYyYywgMHg3ZTc4YTcxYSwKLQkweGIxZTc4OGJmLCAweDdkMDQ5YTM4LCAweDc3OWNlOTBiLCAweGQyNzI0YmE1LCAweDc4YjE3MWY3LCAweGVhNmFiZTVhLAotCTB4NmY5ZWU0NWIsIDB4OWJjNDFmODYsIDB4MTYzMjdlNDIsIDB4ZjBjZjNmNDcsIDB4MWE2MzJiN2MsIDB4NGM1NzBiYWIsCi0JMHgxNDRmNzVjMSwgMHhiODQzOWE3ZSwgMHhkZDg5YmJhOSwgMHhkYjdhMTRlYywgMHg0MTNiZWM5YiwgMHhiZjY2YmVmMSwKLQkweDVmZGYwN2I4LCAweDc5MjIxOWQ4LCAweGY3Y2IwMmY0LCAweDViN2Q2ZGZhLCAweGNjMWU3OWViLCAweDgzNmJjMWVlLAotCTB4ZGVmYTRlMDksIDB4YzkyYmI2YjUsIDB4ZjZmZDQwOTksIDB4NTRjOWM0ODYsIDB4Y2VjOTc2MWYsIDB4YjQ1N2VjMjQsCi0JMHhmMjQwNWM5ZiwgMHhkZmUzMjhhYywgMHg2MWE5ZDQ2NSwgMHhiNGFlNmY5NiwgMHg1ZTkyYjY3OSwgMHhhMjdiMzg5NywKLQkweDNhMGRiZmVlLCAweDU4ZjM4NjZmLCAweDA5MDJmNmJmLCAweGU3NmZlMzI3LCAweGUwYzg1ZTZmLCAweGY4ZmVhZWYxLAotCTB4NzE5Mzk5ZTcsIDB4Y2YzNmU5YWIsIDB4ZjA3YmEyNmUsIDB4YmE1NTU3YWQsIDB4N2U0ZWYzMjYsIDB4NGViYTYxNjMsCi0JMHg2ZjM2NzRmMywgMHgxNmNmNGI0OSwgMHhlODM1N2UzYSwgMHhlZTM0M2IwZiwgMHgzNjdmMTU1ZiwgMHg2ZjhiMjNjYiwKLQkweDg2OTA3YmVkLCAweDUwOTc2ZjgzLCAweDczZDAzY2RlLCAweGMwOGQ0NGJjLCAweGZhM2Q3Zjc3LCAweDZiZmEzOGU3LAotCTB4NWJiMDkzMDAsIDB4NjkyNTZiMzMsIDB4Yjg2ZmM4YjksIDB4OGZiYjdiMWQsIDB4NDFiOWQyNjYsIDB4MzE2ZmQ5M2YsCi0JMHgyOTUyNjdiNSwgMHhiZGI2ZDYyZSwgMHhmMjkxM2E5NywgMHgxYWRlMGU4YywgMHg5MmU5NWRlYiwgMHg4NzMwM2NkOSwKLQkweDg5NGExZmYyLCAweDQ2NjllZmE0LCAweDVmMDA5NWRmLCAweGZmOTQyMDA3LCAweGYxYzg5NGMwLCAweGZiNmZmZmE2LAotCTB4YWUzODQxM2YsIDB4ZWNhMjg2YjUsIDB4NTYxMzkwZGYsIDB4NDc1NjNlZWQsIDB4N2JiMGI2MWUsIDB4ODkyN2JhNzUsCi0JMHg5MmVhOWVmYywgMHgyYzBjZjVjMCwgMHg2NzRlYzg2ZSwgMHg3OGYwYmRkMiwgMHhmMGNjYzU0YSwgMHgxMGNkZjUwOCwKLQkweDllZTlkYjM0LCAweGVmZjMyODM2LCAweGZmOTliMmNjLCAweDlmZjYyZTllLCAweGQwZjYwZTYxLCAweGM1MzM5NmY3LAotCTB4ZTgyY2UyYmQsIDB4MDZiZWYzNjMsIDB4NDBiYWQ2NjEsIDB4MGYzYjUzMzMsIDB4YjcyZGFjOWMsIDB4MzJhM2VmMDYsCi0JMHg5MDEwMzhhZiwgMHg0Y2MxZmY0OSwgMHg5NTkyZWRiMywgMHhmMTAwN2Y3ZCwgMHgzNzIyM2RmNCwgMHhlNDMyNWMzMywKLQkweDEzZmRkMzIxLCAweDk2MmY1ZWZmLCAweDhmMDJlYjlmLCAweGVmZGM1YzMzLCAweGRmNDEyYTUwLCAweDgwNDM5NjU5LAotCTB4MDlkZjc3ZGQsIDB4MWRlZjcxMjEsIDB4NThkOThmOWYsIDB4ZDc3ZGQxYTcsIDB4ODkzYjY4OWQsIDB4MzY3ZTFlNGMsCi0JMHgyM2YxMGU3ZiwgMHg3NDI3ZTNjNywgMHgyYzMzNTMxZiwgMHgyOTNlODhkMCwgMHg5ZWJhNjk5OCwgMHgwYzdjZWI3NCwKLQkweDM3NWIwMjY2LCAweGUwNzg1ZDc1LCAweGZiOTFiMmM5LCAweGRiZDc2NzQyLCAweDUwYmJlOGU3LCAweGRmNjJlNWM5LAotCTB4YzlhZDNhOGQsIDB4MDQ5NzU2NDEsIDB4N2VjM2ZkY2QsIDB4MzkyMDBmMmMsIDB4NjY2MjZkNzMsIDB4Zjc3N2M4YzYsCi0JMHgzZGY2MDFlMCwgMHhmNzc3ZWM0NSwgMHhjY2U1ZWVjNCwgMHg4Y2I0ZWY5MSwgMHhmYWY3M2ZlZiwgMHhjNDI2ZWI5NywKLQkweGQ1ODcyYWM3LCAweDRhM2UyMzI5LCAweGQwNzczOWFkLCAweGNkMzllMGY5LCAweDhkMzk5ODkzLCAweDk5NmQwM2JlLAotCTB4ZmIzMTE2YzgsIDB4NTNiY2IxYTcsIDB4NWMwOTJhZTAsIDB4ZTRiZmM0ZTUsIDB4MDdmYmJlMzIsIDB4Mzg5ZjE3ODYsCi0JMHg4MjY1ZjZiZiwgMHg5MjUyYWU5ZiwgMHg5MTU4N2MzMCwgMHg0Mzg4MWRhZSwgMHg1ZmExOWRhYiwgMHhlMTU5ZWZhNywKLQkweGU1M2FmOWE5LCAweDU2NmQ1YmI3LCAweDE2NmZlNTI3LCAweDg0NjkzN2EyLCAweGZmMmIyNmRlLCAweDdlZjhjMWVlLAotCTB4NGQ4ZTU2MmIsIDB4NjYzZTgzMjgsIDB4Y2IyYjRlN2YsIDB4NjI4ZmQ3OGIsIDB4NmI4ZjM0ZjcsIDB4YjI3ZmJmOWMsCi0JMHhmZDEwYTY3OCwgMHgxYmNjYTc4ZiwgMHhkMTZlZjk0NSwgMHhiMTY0ZTYyZiwgMHgzMGU1MWJmYywgMHhlOTgzOTBjNywKLQkweDgwZTdmZmM2LCAweDNjOTE5NzdjLCAweDgxN2ZmZjYzLCAweDgwMmEyZmMxLCAweDcyMTM0NjgxLCAweDQ4ZDdmODM0LAotCTB4NWM2ZjE0M2YsIDB4YmY0MzFmYTgsIDB4ZDk3MjIzNzksIDB4NTdmOWM4OTEsIDB4ZjE4ZjRiZTgsIDB4ZWM5ZDVkZWMsCi0JMHg4MzZmOTYzNCwgMHhjZjA1ZmZiZiwgMHgxMDc4NTA3MywgMHgwMDEwNzg1MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU1NDdjMGIsIDB4NzMzZWY3YjUsIDB4OTk5MzMzMWUsCisJMHg0MjBmMjY0YywgMHgwODRmMDA0MiwgMHgyMTg0MmEyMCwgMHgzODg4MDg0MCwgMHg4ZDA2OTAwOSwgMHg4ODA4MDg5YSwKKwkweDQyMDEwMGNhLCAweGE5MTEzMjQ4LCAweDY3NmQ1ZTk3LCAweDZhZDExNDIyLCAweGEzNmQyZDFiLCAweDQxMDFkYTk3LAorCTB4MTgwZDQ1YTMsIDB4MWQwMzQwZTgsIDB4NWFiYzQxNGMsIDB4NWI0YTBhOGQsIDB4M2MzMTQxYjUsIDB4ZTg3ODQ5MGEsCisJMHhlZjViZDZjNSwgMHgzM2VmNmI1ZSwgMHg0MjY2NzM5OSwgMHhmZGRmYjZhMiwgMHg3ZjE3ZGZiZSwgMHhlY2ZiMzZmZSwKKwkweDdiNWVmNjczLCAweDdiNWFmZmFkLCAweDIzMWZiNWVkLCAweGQzMTNjNjU5LCAweDA1N2M4NDE1LCAweDcyMTNkNzdmLAorCTB4ZjQ4NDI0NDgsIDB4MGIzYjRlZWIsIDB4MTA4ZTNhNjgsIDB4YjAzOThlN2YsIDB4YjQyNDIwNTUsIDB4MjRlZGVmZWYsCisJMHg0ZGIzOTA4NSwgMHgyNjczNTViMywgMHg5OGM3ZmIyMSwgMHhmMmQzZDc0MywgMHg4MGZjODFiMywgMHhkZDRmOTY5OSwKKwkweGQxMjFjNDc5LCAweDUxNGVkNTdjLCAweDNlZDM3MjgyLCAweGIxZGY3ZTJiLCAweGRlNDAwODUxLCAweGYxZmQ2ZTZiLAorCTB4YjVkZjM0YjUsIDB4Njk5YjI0NTMsIDB4Mzc2NDI0ZDUsIDB4ZGE0MjU0OTEsIDB4YTlmZDg0MmQsIDB4NmE1Zjk4ZjEsCisJMHg0ZGFhZDk2NSwgMHhmNjgyZWZmYiwgMHg2MjY2ODNjYSwgMHgzN2I3ZGZhNSwgMHhhZmM4NmU4OSwgMHgwODA0MmFkYywKKwkweGY3NmFhZjZkLCAweDVhMDBjYTgzLCAweGQwODBiMmRmLCAweDdlNjk1NTY4LCAweDFhOGE2M2ViLCAweGZiMDNjODRmLAorCTB4YjM2OGVjZmUsIDB4NjdkYTcyMTMsIDB4ZmQ4MmFhMjEsIDB4NDkxYzZmMjgsIDB4N2I2MDQ1NDgsIDB4N2RmYTAwZTEsCisJMHg2NWMxMzZjNSwgMHg2YzU3ZjVhMiwgMHhmNDAxZDczYywgMHhjM2M5MzQ1NSwgMHg4YWRmNWE0NCwgMHg0NzUxMWIwNiwKKwkweDIyYmZiNmIwLCAweDA3Y2I1ZWQwLCAweDc5NGVkZWQ4LCAweGZlNTdiNDI4LCAweDExMGEzZGU1LCAweDFiYjI5ZmExLAorCTB4NzRhMmFiYmUsIDB4NzZiNWJmNDAsIDB4YjFlYWZiNGYsIDB4NTU5ZjhkM2QsIDB4ZThmNmQxY2YsIDB4MGEyZmQ1N2IsCisJMHhiNTYyZTgyZSwgMHg4ZTgwNzg4OSwgMHhiOWQ2ZGQ4ZSwgMHg3ZmExZGI0ZiwgMHhmOGYwY2FiNSwgMHhkYzJjN2VjOCwKKwkweDA4YThmZDA1LCAweGVkMGE1MjZjLCAweDY1MjZkZjQwLCAweGZhZWVjOGU5LCAweDg3ZmMzNDU2LCAweGFjZmFiZTllLAorCTB4NzI4ODllZmUsIDB4NDdkYTdhNjMsIDB4M2JiYzNhNTksIDB4YmI4ODQxNWYsIDB4YTQ0YmQ2OTEsIDB4YWEzYTUyODAsCisJMHg0MjA3ZjlmYiwgMHhhMWUzMjEyMiwgMHg5NmE4OTE3ZSwgMHhlNGE5ZmFlZSwgMHgyM2ZlMDcxMSwgMHgwZjk0OWZmNCwKKwkweDgxZjFiZGZlLCAweDcyZGQ5OWFkLCAweDk5MDRlOTViLCAweGJjZWRjYjc1LCAweGVhNTFjYjkzLCAweDVmYWM4ZGNhLAorCTB4ZjIwYzdmNGIsIDB4ZjlkNGY0YTAsIDB4ZWUzZTk4OWMsIDB4ODM3NGMzNGIsIDB4ZmRiZTQ1NGYsIDB4ZDMwMjM3ZGMsCisJMHg5ZjBiOWY3YSwgMHhjM2NiZTkzZiwgMHg4ZGNmYTM3NCwgMHgyMmJlNTNlOSwgMHgxMmJlMDM0YywgMHg2ZmIzNmY3YywKKwkweDdjNWJhNjJlLCAweDhjZmU3YzFlLCAweDA2ZDMxY2FmLCAweDdmM2UwZDVmLCAweGQzMWFiN2RlLCAweDNlM2YzZTZkLAorCTB4MWViN2QxN2YsIDB4MWQ1ZjQ2ZDMsIDB4NWU0MDNiYTYsIDB4MDVmMjZkMzQsIDB4YmU1ZGJkZjAsIDB4YmU4MzRjMDYsCisJMHhjN2JlN2M0NiwgMHgxMWY0YzQxNywgMHg2NGM3NDdjZSwgMHgzZTUxMmY5MiwgMHg0OWM0ZGMzOCwgMHg4YTkyNGVjNSwKKwkweGNkMzJmOWRkLCAweDdjYjA5NTI3LCAweDdjZmUxZGVhLCAweDNkNTNlNjg1LCAweDMyZjk0ZjM0LCAweDZmOTQzMmEwLAorCTB4MzUwMWY5YTYsIDB4ZmRmMDdjYWMsIDB4ZjM0MmMwYTQsIDB4N2NhY2ZkODMsIDB4MDJlZTIzYzgsIDB4YTkwZmNkMmIsCisJMHgzN2MzZTU2MywgMHg2OGUyMGJmYSwgMHg5NTgwNzg3ZSwgMHg1NDJkYmQ1ZiwgMHhhYmY5YTM2MCwgMHg3Njc5NTkxYiwKKwkweGE3NmE5OTMzLCAweGNiMTBlY2Y5LCAweDllZTFiY2U3LCAweDM5ZjM0ZjFhLCAweGZiOWYyY2FkLCAweDgzYWE3ZjgxLAorCTB4ZDhkYjczZTYsIDB4MDRjZTkzZjcsIDB4MmQxZWQ1NDQsIDB4YmFiMjFkODcsIDB4NmQ1OTUwOTgsIDB4NGI3MGNmZjQsCisJMHg1MTVlNjkxMywgMHhjYTJlMjFlZiwgMHg2ZWFkZmYxZiwgMHg0M2YyOWQyOSwgMHhjODc5NjM3NiwgMHg5YmNiMWYzZiwKKwkweGJmOTYzNzE0LCAweGZjYzMyZmUzLCAweGU1ODNkOTJlLCAweDJjNTVmZGM3LCAweGZjYjA3OGFmLCAweDk4YmRmZjczLAorCTB4MmM3ZWNhMGYsIDB4NThmYWQ0YjcsIDB4Zjk2M2YxNWUsIDB4NThmNWRhODAsIDB4ODAzOTFlZmYsIDB4MWY2YjIzZTUsCisJMHg0YTNkZjJjMywgMHg1ZjFmY2IwMCwgMHgxYTdiYTRmYiwgMHgzYzExYWZjZCwgMHhkMjNjMDczZiwgMHgwMTY0OWNiNCwKKwkweDRhZDMxYTllLCAweDA5ZDY5ZTI4LCAweGY3ZTAyZTY0LCAweDhhM2EwMDA3LCAweDBhZTk3NWNiLCAweDNmOGVlMWVhLAorCTB4ZmEwZDNlZTQsIDB4OTAyOTdmOGIsIDB4YzNjY2ZhNWYsIDB4YWZmZGY4OTksIDB4ZDY5OTFlYjAsIDB4NGY1ZWY2MjMsCisJMHhiYTc5OWJjZSwgMHgyY2RlNzI3YSwgMHg4MDY5ZWFkNywgMHhmYjU4ZDZmNywgMHgzNzhlY2Y1NiwgMHg3OWU5ZTkyNywKKwkweDY3YWI0MmIzLCAweGRmMTNkMjNiLCAweGJjZTU3ZWI3LCAweGNmNGY1OTM1LCAweDNkNWE5NTViLCAweGM0OWU5MDdiLAorCTB4NzRkM2QxYmUsIDB4YTY5ZmNmNDQsIDB4YjRmZTYxMjMsIDB4ZmFmZDNkMjAsIDB4ZjdiOGNmNDYsIDB4ZjcxOWZjZjQsCisJMHg2ZjNmOTg1ZSwgMHg3ZGU5M2Q2MCwgMHgzZGU5YTdhYiwgMHhkZTlhN2YzZCwgMHgwOGU3ZjMwYiwgMHhkZjUwNmJmNiwKKwkweDdkZWUzNWZhLCAweGJkYzY3ZjNkLCAweDQ3Y2ZlNjFmLCAweGRmNjY0ZjQ4LCAweGExZjVkOWVhLCAweDNlYmIzZjllLAorCTB4MDRlN2YzMGMsIDB4NmZhYzMzZDYsIDB4NDhmZGNhZmQsIDB4OGZkYzlmY2YsIDB4YzJlOWZjYzIsIDB4NWJlYWFlN2EsCisJMHhkMjNlYmIzZCwgMHg0N2Q3NjdmMywgMHg4MTdjZmU2MSwgMHg1YmVhOGNmNSwgMHhhMmZmNzJiZiwgMHg1ZmVlNGZlNywKKwkweDA5MzFmY2MyLCAweGJlOThjZjUwLCAweDU0ZmMxM2QxLCAweGE3ZTA5ZmNmLCAweGIwZDhmZTYxLCAweGEzN2RmMTllLAorCTB4Y2Y1ZGFmMjcsIDB4MzBmNmJjOWYsIDB4OTAwNDUyN2YsIDB4ZDViZWM0ZmIsIDB4ZjNkNzZjMTMsIDB4ZTYxZWQ4MjcsCisJMHhlN2FjMjBjZiwgMHgyYmY1YmViYSwgMHgzZjllODRlZiwgMHhmY2MyMjc3OSwgMHhjYWZkOGUxOSwgMHhmNDBmN2FhNywKKwkweDdjNGY1YTEwLCAweDM5ZWNmNWNmLCAweDllY2ZlN2FiLCAweDhjZmU2MWIzLCAweGQzYTY3YWM2LCAweGFmN2FiMjdhLAorCTB4OWU4NzUyNjcsIDB4YzIzYTkzM2YsIDB4N2FjM2M5ZmMsIDB4OWVhZGY0NjYsIDB4ZmU3YTFkM2QsIDB4ZjMwOGU5ZWMsCisJMHg3M2Y5MWYyNywgMHgzNWZhZGY1MywgMHg5ZmNmNTNhOSwgMHgzZjhjOWQ0OSwgMHg0Y2Q3MGY2MywgMHgzYTcyZDA3NSwKKwkweGZhNDRiYTE2LCAweGRjNjdiNWM5LCAweDQ1ZTY4MTZlLCAweDRlOGJjYjI3LCAweDQ0YmYwMTE3LCAweGQyMGRmY2Q0LAorCTB4ZjdlOTE2ZWEsIDB4Mzk4OTZkZjYsIDB4YmY0ODkzMGYsIDB4ZmExNGEwYTMsIDB4YjFiZDRmMTUsIDB4MjEyM2JmNDgsCisJMHhlN2U3NGUyZiwgMHg3NDkzYmEyNCwgMHgwMWEyZTRmOSwgMHg5NWZiZjdiYSwgMHhmNzk1ZDEwYywgMHhhZWI1N2I5ZiwKKwkweGEzOTNkZDNjLCAweDRmOTQ2N2NiLCAweGE4M2ZiZGQyLCAweGJmOTc0MGE2LCAweGJhMGRmNTYyLCAweGI3ZmQzM2Y3LAorCTB4ZWI1OWYyZWEsIDB4M2ZiZGQ3NmYsIDB4YWU5MTZlYWMsIDB4MGFmYWNhZmMsIDB4ODE1NWY5NWQsIDB4MzVmY2JhOTUsCisJMHg3YmFlZmYwZCwgMHgwM2UzNTQ3ZiwgMHhjMWQxZjJiYSwgMHg2M2U1NzU4NywgMHhmMmViOGY0MiwgMHhhOTNkMGY2MywKKwkweGViN2M3ZjdiLCAweDg0Zjk1ZDY2LCAweGNhZWJjZmEzLCAweGQwZWRiNjI3LCAweGI5M2RhZmU1LCAweGQ5ZTdlMGM3LAorCTB4ZjBkN2VkOWQsIDB4MjdiODA4YmMsIDB4NTc0ZmVmY2MsIDB4YzUwYmRmZDAsIDB4MDY1Nzk4MmIsIDB4ZGY4ZmQxZDgsCisJMHgzZDU0YmYxZiwgMHhiY2FiZTU0ZSwgMHhhMTRkNThiMiwgMHgxMjk5MDVmMiwgMHgwZmU3YWUzYSwgMHg4ZGIyYmYyOCwKKwkweDkyNzdiZjNlLCAweDdkMjc0YWU3LCAweDE5ZTJhZjdlLCAweDlmZTE4Y2VkLCAweDI0MDgzYzUyLCAweDA0ZDU1MjBkLAorCTB4NDFmY2IxYTksIDB4MjBiMWUxOTksIDB4YzdlMWNiZTMsIDB4NTM1ZWY3ZTgsIDB4OWE0NGYwZDcsIDB4ZDdlNjJmZWYsCisJMHgxMjllNWUwMywgMHgzOGQzODg0YywgMHg3YmMwZDQ5MSwgMHhmMzgyNjY3MSwgMHg3MzMzMDc4MiwgMHhlMDQ3ZjY5ZiwKKwkweGFhMjBmZDc1LCAweGJkNzc0Mjg3LCAweDFhNGY2NWViLCAweDZiOWIxOWY4LCAweDFmODNmNmRmLCAweGVkMTA2ZWIyLAorCTB4OWU0MjAwZDcsIDB4ZjkwZWRlMTYsIDB4MDdlZmQyODcsIDB4ZDBmMzRkMmQsIDB4ZjUwYWNjZmEsIDB4NTdkYjIzZDMsCisJMHhiMTIzZmI2OCwgMHhmZjY4MDZmZCwgMHgzN2RhMWVjNSwgMHhiNWQzYzkwZiwgMHhhZTVjMTk2ZiwgMHhkMGEyZGY2YiwKKwkweDFmZDQ5ZGY2LCAweDZmMjNmZGE4LCAweDEyNjEwYTlmLCAweDdmMGIyZjIxLCAweDgzY2RmNmM0LCAweDA3ZmRiMWNiLAorCTB4ODk1ZjNhMTUsIDB4ZGMyZTNmNmMsIDB4NzdmNDEwN2UsIDB4M2UzZmI0MWYsIDB4NGM4N2ZmNDYsIDB4NzA3ZmY3ZDIsCisJMHgwYWZmYmU4NSwgMHhiNTJiZmZlYiwgMHg3MWZiNzhjNywgMHhlMTE2ZmZkOCwgMHhlMGZmZWIxOCwgMHgzMzdmZDYwYSwKKwkweGJlZGMzN2FiLCAweDQzZmZjYzIzLCAweDdiMzdmZmQwLCAweDY0ZDY3ZmVhLCAweGE4YWZmZjdkLCAweGNjZGZmN2Q0LAorCTB4ZjZhNzdmZGEsIDB4OGVkZjZmMTQsIDB4OWMyYmJmZWQsIDB4YTJiZmZkNjIsIDB4Y2M1N2RiMTIsIDB4NDdlMDE3MWUsCisJMHgwOWFiODhjOSwgMHg0MGM5ZjZkMCwgMHgwM2ZhOTg2YSwgMHg5MDNiNjg1YywgMHhhMGEyNDg4ZSwgMHg2MTUxZTQyNiwKKwkweDZmNzFkMjA4LCAweGU3ZGJjMzFjLCAweDY4NmYxNDcxLCAweDljZjhmYzZmLCAweGNiNjVhODA0LCAweDhlMmVmM2E1LAorCTB4ZjJkYjE1ZjUsIDB4NTg0YmIwMTUsIDB4NGIyYmU3NGUsIDB4NDE2NWE5MzgsIDB4MzY0ZGYxMTEsIDB4MjhjMzAzOTgsCisJMHhkMTQxMWRiZCwgMHgwZGIyZjkwZiwgMHhmZWMwMDVkNywgMHg0MTY0Y2Q3OSwgMHg5MTI3N2MwOSwgMHhmNGZmM2MxMCwKKwkweDQ3MzZhMzY3LCAweDJlOThjYmY2LCAweGRiZGI5M2E5LCAweDNjMmRmNDIyLCAweDIzMjAyYThmLCAweGQzN2QyODZhLAorCTB4YmJlMzA0MDEsIDB4NzlkMzFmZjMsIDB4OGJmM2ExMTAsIDB4ODMzY2U4MGYsIDB4MjI3ZTQ4NTAsIDB4YTIzZWY2YjMsCisJMHhiN2M4MjVmMywgMHg5NDEyZjlkMSwgMHhkZjhiNTIxMywgMHhhNzBlZWFkMSwgMHgzODRiZmE1MSwgMHg0YzRiMWZmZCwKKwkweDQzYmUzZjVmLCAweDdlYTlmODA4LCAweDMxYmRmZTdlLCAweGIwNWQ0ZjM4LCAweGRlOTk0NmRhLCAweDdmNDJjNzRkLAorCTB4ZmI0ZjJlYjIsIDB4NzUzOTA3ZTUsIDB4MzYwNzM2ZWQsIDB4MTU1ZmM4MGIsIDB4YWE4YTU1ZjgsIDB4ZjVlMmM4NDksCisJMHhkZGQ3OTQxOSwgMHhjNTRmYmZlZiwgMHg3ZjU5NGU5ZSwgMHhmZGNiNzExYiwgMHhhZTc3ZmJlOSwgMHg2OTM5MDYxMiwKKwkweGU2ZGRiM2JiLCAweGI4NGUzNjFjLCAweGQ3YTg0YzMzLCAweDQ3OTRjMzI0LCAweDYzNGRhZGM4LCAweDI5MDM1YTY0LAorCTB4YjcxZmNiNzUsIDB4YjMzYmI0NDUsIDB4NWQ5ZjlmNDgsIDB4Yzg3N2NmYTIsIDB4ZTk0NGQ5NmUsIDB4YzgxNTI4ZWEsCisJMHg5Y2VmNWEyNiwgMHhhZDcyZmFiOSwgMHg4OTI5YmIxZCwgMHg1N2I3OTljOSwgMHg5YmU4Y2E5MiwgMHgzYzBlNjkwMywKKwkweGU3OWNhMjc2LCAweDFhYjdkOTNhLCAweDMyYzVkZTNkLCAweDNjODJjMjlkLCAweGM4MDhmZGZkLCAweGVmODI5ZmQ1LAorCTB4ZmQ2NGVlZGQsIDB4NTczYmQyMzYsIDB4Njg0YmI4YjYsIDB4MTQyZWU3M2YsIDB4MjM2ZjgwMDMsIDB4NjdkYTdmZmQsCisJMHg2OWIyOWI3MywgMHgzMmE3ZmViYSwgMHhjN2Y3NDUzMSwgMHg4ZjNjZmY0OCwgMHgzMjhkM2ZiMSwgMHhjYmYzYzM4YywKKwkweDZlMTljZjhkLCAweDNmZmNiOWRhLCAweGY0ZDA3YzA2LCAweGQyODNlMDA0LCAweGEzZTM5YzdmLCAweDdjMzJhZWRiLAorCTB4OWI5ZWNkNzgsIDB4NGY1ZDBmMDEsIDB4Y2FlNTA0ODgsIDB4YzcxYjcyZjEsIDB4M2QzYTkyY2IsIDB4YzhmMTA4MmUsCisJMHg3MzY1YzcyMCwgMHgyMzg3OWM4NSwgMHhlMzg3MzA3MCwgMHgxZWJkNTk2MCwgMHhiZjEyNzczNywgMHgyZTQzMWU5YywKKwkweGZhNmMzNmYzLCAweGRkMWE5YTYxLCAweDZlMzkwZmJmLCAweDFmYjIzZmU2LCAweDRmZGQxM2Y5LCAweGI4YmJhNzI2LAorCTB4ZDFhY2VlOWMsIDB4ZTVjNmRmOTcsIDB4ZWI5NzI3N2EsIDB4MGVjN2ZhZGMsIDB4NmU0MWYzNTAsIDB4ZTgzMjAzNTcsCisJMHg0ZDNlZjdiYiwgMHg3OTNhNmQ5ZSwgMHg4ZDNjYjg3YSwgMHhlNWM1ZGU3NCwgMHg5OGY3ZDc3OSwgMHhiNmY0OGQzYywKKwkweGQ1YjY3OTcxLCAweDkwYzk5MDVmLCAweGY0OGQ3YTY4LCAweGQ1MWQ1ODJkLCAweGI5ZTQwNTFmLCAweDllNWIxZmQwLAorCTB4ZjI3ZTYwZGUsIDB4NTVlNzg4ZjEsIDB4OGY5MjMzOGQsIDB4OGFkOWU4NDcsIDB4N2U1ZDUyODYsIDB4ZWU5ZTYwNzksCisJMHgwYmY1NjVmZCwgMHhlYTRiZTU3NSwgMHgxN2NhZWI5NiwgMHg5NzViYmZhZiwgMHg5ZWZmZTg1ZiwgMHhhYjA1ZmRlZSwKKwkweDc3ZTU3NTZiLCAweDJiYTQzY2Q2LCAweDk4ZmU1ZjlmLCAweGYzY2YzZjJlLCAweDM5ZmRlZTg0LCAweGNhZTkzNzczLAorCTB4YTczYzk3NjcsIDB4YjQ1OTlmMmIsIDB4NzUyZjk3NWQsIDB4NmZiZGQ2ZWYsIDB4MmRkNTc3ZGEsIDB4OGUzN2NmODAsCisJMHg4OWZjMDQ4OCwgMHgzMDI3NWNjZiwgMHg0Yjk5ZjgyZSwgMHhjNzNiYzE3NiwgMHhiYWUyMmE3ZCwgMHhkMzAyMzdkZCwKKwkweGUyMTczZTkzLCAweDBmMmZiNGZlLCAweDhiNjA4ZWQzLCAweDNhMDljNjFkLCAweDg5MjUyZTJlLCAweDZlOWJjY2Q0LAorCTB4MTAzZjVkYWUsIDB4ZTM4MjY5YzYsIDB4YWNkMzE2ZTksIDB4NDI2NGZmNWEsIDB4OTE1MjZkN2UsIDB4MGFmNWM1ZGYsCisJMHg0NDI1OGQwOSwgMHhkMzg2YzE4MCwgMHg5NDQ2MjVkMSwgMHg1ZTUyZjViNywgMHg3MjdmMGQ0ZiwgMHg1YjcxNzk3NCwKKwkweGM3ZGVlN2VjLCAweDhjZTE1ZTE3LCAweGQ2ZTk3NzExLCAweDdlMDE5MjUzLCAweGJiZjcyNzRmLCAweDAyOTVlNThkLAorCTB4NGU3Yzg5MjksIDB4ZDdhODAzYzgsIDB4NWJiOGY4ZTcsIDB4YWZmZDMwYTksIDB4NDA1ZTkxZGMsIDB4MGQwZjkwMWMsCisJMHg3YjVjYjlhZiwgMHhmZGU0MTQ4ZCwgMHgzYTU5MjcwMSwgMHg3ZjU2NWUzZCwgMHgxM2JlY2U4ZCwgMHgwM2Y2Y2E4OCwKKwkweDNkZDU4ZGJjLCAweGFkNzBkMTVmLCAweGZiMzNiYmVlLCAweDFhYmJhNDQ1LCAweDE4NDRjNTZjLCAweDM3NWU0YjE2LAorCTB4YjUwZTFkODEsIDB4MGEzOTllMGMsIDB4NjFiZjc0ZTgsIDB4ZDgyYTcxODIsIDB4MzNjMmZkMGYsIDB4ZTNlNGEyYmUsCisJMHgwNGFmYzgxMiwgMHhiOWJlOTNkMywgMHgzY2ZiYjY5OCwgMHg5NWY3MWU5OCwgMHhhZmIxZmE2MywgMHhkZjM2ZDMwNiwKKwkweGYyM2Y0YzZhLCAweGMwZmQzMWY5LCAweDNmZDMxZWI3LCAweDNkMzBlYWY5LCAweGY0YzdhYmVhLCAweGQzMDA1ZjNkLAorCTB4NGMwNmJlYzMsIDB4NjIzNWYxZGYsIDB4NjIwYmVhZGEsIDB4NjM3M2UxZGEsIDB4NmY1ZGU5YWEsIDB4YzdjOTNiYjgsCisJMHhiZjgwZDNlMSwgMHg3OGViMzgxOCwgMHhmYWVkNTU2MCwgMHgzYjM4ZGRjOSwgMHhkNmFmYmE2ZiwgMHhjZjliYjAzZiwKKwkweDhlNjZmNWM1LCAweDFlMWQ1NDg3LCAweDMzNjA4MGJlLCAweGYyOTdhY2UyLCAweGIwZTM5OTdhLCAweDk3NjNlZmE3LAorCTB4NmJmZjM3N2IsIDB4YzRkZTM2ZjAsIDB4OGE2ZmNjZmMsIDB4NjUzYzZlYjcsIDB4ZDU5NGYwMTgsIDB4ODlmYTllMWIsCisJMHgzNGYxYmJlMywgMHg3ZTY0ZTRkZSwgMHg4ZmQzYzcwZiwgMHhlNjMxMWZhMCwgMHg4NGUwMDUxNSwgMHhkN2YwOGJmNCwKKwkweGE3MTYzNmRjLCAweGQ0MDllYmU2LCAweDZhNzE2NTUzLCAweGZhMWFmNmRlLCAweDc1ZmEyYjZlLCAweDZlMzAxMTgxLAorCTB4YjdmMTFmOWMsIDB4M2Y4NzEwZTEsIDB4Mjc0Y2Q0N2YsIDB4Y2ZmNzNkN2QsIDB4Zjk5ZTkzODgsIDB4Y2RmOWM2ZWUsCisJMHhiYzFkMDBkMiwgMHg1Yjk3NDZjNiwgMHhhZDVmMThlMywgMHhlODQ0NTIyNiwgMHhiMGQwZjZiOCwgMHg0NjhiNWM2NywKKwkweDQ5MjI1ZTYyLCAweDU1YzA3ZGYwLCAweDVlYTMxZjFhLCAweDdmMDMyYmVhLCAweDlhZWJlMzdiLCAweGExYjNjZmY4LAorCTB4ZmYyN2Y2YmUsIDB4NzhlOTBiOWUsIDB4ZTM5N2YzMTMsIDB4ZGJmNDQ0NWEsIDB4MTc2OWU4NDksIDB4MmUzYzM3ZjAsCisJMHgxMDY5NWQ5OSwgMHhhNjFhZWVkZiwgMHgwODZmZDEzOCwgMHhmM2ZjZjVkOCwgMHgzNzZlN2NkMywgMHgzY2EyMWVmZiwKKwkweGI3NzFjNTZhLCAweDM3ZjkwZDJlLCAweGU5ZTFmM2Y0LCAweDZmNWZlMDdkLCAweDdlMzdiZGY2LCAweGY4MGMwYTJlLAorCTB4MzdiM2YwOTcsIDB4NWQ5YmQ4ZmIsIDB4YzVmNTZlMjQsIDB4ZTc3ZmVkMjAsIDB4MGYzOTUxYmUsIDB4ODcwNzYwYWIsCisJMHgwZjVhNzliMCwgMHhhNWQ2ZDZmYywgMHhmZjdjZjQ4YywgMHgzM2I4ZTI2YiwgMHhlYjcxYzM1NSwgMHhmOWRiNDI2MCwKKwkweGY5Y2JlYjg4LCAweDQwMTMyYmE2LCAweDljMWViNDJlLCAweGU0ZWQ3NDFmLCAweDcyMmY3ZTdlLCAweGFmYTk5YjNkLAorCTB4MmZhYzZiY2YsIDB4NjhjMjIxNDEsIDB4YTJiYzZlZGEsIDB4NmE0MjA0OTAsIDB4MjJhM2NmNDQsIDB4NmQ1YzZmY2UsCisJMHhlYzFiODg3ZSwgMHhhOGQ2YjliMywgMHhmZDNjNmYzMCwgMHgxYTg1NDg2NiwgMHhmMzg1ZjFmNSwgMHhjMDc2OWU4NywKKwkweDlhNjU2YzNjLCAweDg2M2M3OWM5LCAweGFhYjRiNTFjLCAweDhmNjlkMzMxLCAweGY1MDRhZjljLCAweDQyNzVmM2Y5LAorCTB4ZTdjZTIzNTEsIDB4YTM1OTg0ZDQsIDB4M2E3MTljNjAsIDB4YmIwNTBmOGYsIDB4NTZhOTg2OWYsIDB4YzUzNGNhY2YsCisJMHhkZGRhOWM3OSwgMHgwOTU5MGRkMywgMHg2MDE3ZmU2YywgMHgyMjViNjRmNiwgMHgzZWQzOWJkYSwgMHhjZmZmYmUwYiwKKwkweDdhYTdhN2E2LCAweDY5MDg3YTM0LCAweGMwNTg5ZjIyLCAweGFjYjJkMzllLCAweDUxZWZkZjllLCAweDBhOGJhNDFmLAorCTB4YjM0OTM3YzQsIDB4MzdjYzM5ZmMsIDB4YWZmZmY0YWQsIDB4MTJiZDQwODYsIDB4YmQ3YWI1ZTYsIDB4M2NkZmEyOGQsCisJMHhkMzZmOWUxYSwgMHg1M2JmNDdiNSwgMHhmODU3YjViNSwgMHg5M2JkNjdhZSwgMHg3Yjg2YmI0OCwgMHhmOTU3YmYyYSwKKwkweDA2OGFmMGZhLCAweGM3ZWY1M2FiLCAweGRlZjJlYTI2LCAweGU3NTNiYTYwLCAweGMwM2ZjMmQ3LCAweDI0MTFhZjcxLAorCTB4ODcyNTVmYzAsIDB4NWY2NGE3NWYsIDB4MGNkYTc4MGYsIDB4YmY5ODQzYzEsIDB4MmFiZGVjMDgsIDB4NTFlMjliNGIsCisJMHgwMTVhNWQ1MSwgMHgzNGYyOGI5ZiwgMHhmZTczYWJmYywgMHhhOWQ0ZWQ0YywgMHg3YTAyNjVkNywgMHg1NGE0YmU0NiwKKwkweDIwYTlmMmU1LCAweDRjNDRjZGUyLCAweGJmOThiZjM0LCAweDQ1NjlhOGJkLCAweGE3NWI4YzMxLCAweDUwZmU2YzRjLAorCTB4MzAxYzRhNDYsIDB4NzUyNzJlM2YsIDB4M2Q0ZjEwYjksIDB4YTA0NTRjNGIsIDB4M2JjOTY3OWYsIDB4ZmExMWIxOGUsCisJMHhiMDU0NGU3OCwgMHhmNWViYzVkMiwgMHhkZjlkM2M3ZSwgMHhlYWNiZjJlYiwgMHhlNGE1ZjlmNSwgMHgwNzU4NTRkNiwKKwkweDI2NDFiYTVmLCAweDg2ZWMwMTAxLCAweGU4OThmY2JlLCAweDkxOTc3YWM0LCAweDZlMzA3NTlhLCAweGJiYzc5Y2ZmLAorCTB4OTQ4OTM5MTYsIDB4ZmFhYmU5NDEsIDB4MTc3MzJmY2QsIDB4ODkyZTNhNTIsIDB4ZDZkNWZjNmMsIDB4MzEyNzk3NzEsCisJMHgwNTY2MmJmYSwgMHhmZjdkMzcxNCwgMHhiN2IxYTY5MywgMHhiZjQ0MGI1MSwgMHg3NTgzYWMwZiwgMHg3MTI5N2Y2ZCwKKwkweGYyZDEyNTZkLCAweDFiZjRiYWZiLCAweDgxZmNkNWU5LCAweDRlNjRmNWE4LCAweGUwODM0YTQ3LCAweDYzYjBjNDBlLAorCTB4M2QzMDI0OGEsIDB4NmFlZWY2ZTMsIDB4ODM4YmE5YzksIDB4MjIzZTQyZTQsIDB4ZjE4ZGYyMGUsIDB4Nzg3NDQyOTQsCisJMHgwNjdhMmNkYSwgMHg3ZTE5ZTM0YiwgMHhkNDgyMGYwMCwgMHg0ZGJlNzhhNSwgMHhmNTUxNjlmZCwgMHhmYmY1MmQ1ZiwKKwkweDkwM2ZkNjI3LCAweGFiYWI5ZmQ2LCAweDRhOWZmNzNmLCAweGZhMjhkMGZmLCAweDVmZDU2MjBiLCAweDc2MTc5YmY1LAorCTB4YTkzZGE5ZjksIDB4MGU2N2U5NzgsIDB4NTNjOWM3NDIsIDB4OGJhYTVkNTIsIDB4ZWI3MmI1Y2EsIDB4OWE2ZTFkMGYsCisJMHgwZWZjOTQ5ZSwgMHg4MGE5ZWJjMCwgMHhkZTRiMTQ1OCwgMHg3NmYyYzNhYiwgMHhiYjg4MDVkYiwgMHhmZDY5M2ZjMSwKKwkweDExZmY5ZmE3LCAweGRmM2UyM2M2LCAweDllMzEzYjJhLCAweDk5MGU2MGQ2LCAweDM3NTYzZWE5LCAweGQ5MjYyZjJkLAorCTB4ZjJjNjNmOTgsIDB4MjExMzllMGYsIDB4YWZlM2Q0MWYsIDB4YTU5ZmQ5ZTIsIDB4OGEwYWZlYzIsIDB4MGE1ZjFlMTQsCisJMHhiZDViM2ZhMSwgMHgxYzQyZDNlNSwgMHhlYTE3NDg5ZiwgMHg2ODNiZjE5MSwgMHhkYTEyNTJmZiwgMHg0MjRhODViZiwKKwkweDEzYTUzOTc0LCAweGNlNWUwNGUzLCAweDhmZDM2ZjE3LCAweGY4MGU4OWNlLCAweGRmY2UxYjU3LCAweDczOTdlZjhkLAorCTB4MTRiOTc0ZmYsIDB4YTM2ZWQyOWYsIDB4MjY0MDllZmYsIDB4ZjhkNDNkODAsIDB4M2ZjYzAyNDEsIDB4MmZkY2YzNWQsCisJMHg3YTUxOGZiMiwgMHhkZDc5NmNjZSwgMHg0OWYwNDQyMSwgMHg4ZGYzYTNkMywgMHg0N2I1N2Y4YiwgMHg3NmRlZDllZCwKKwkweGY0OGIzZDUwLCAweDRhZjFiNDgzLCAweGJhYmY3MjBkLCAweDcyOTVhNTk5LCAweGQ1MmQ3MWM4LCAweGIyNGRjYWZiLAorCTB4NTcxZjRmY2IsIDB4MzNmNGYwYmUsIDB4ZjMxYzQyNGYsIDB4MzBkNzY2OGYsIDB4MTc4YWZmNWEsIDB4ODkzN2JjMGUsCisJMHg5NzZjNTdlNiwgMHgzNzU5OGE1MywgMHhiNzZhNDJlYywgMHhmZmY0YmM1YywgMHg3MmRkMzlkNSwgMHg4MGY5NzhhOCwKKwkweGNmNjI4ZWEyLCAweDk2ZWE0ZmVmLCAweGZiZWQ4YWM3LCAweDlhMmEzMjE1LCAweGY3MWI1MzFmLCAweDE4ZjY2ZDJiLAorCTB4NTYzYzY5NzIsIDB4OWFjMjdlMDgsIDB4ODE0YmZlZTcsIDB4N2RhOWUyZjgsIDB4MTk5ZmU5MDIsIDB4MGU5YjlmODMsCisJMHg3YzAwMWZhMCwgMHgzOTcyMzk0MiwgMHg3ODY2ZTU4NSwgMHgwMmU1NGJkZiwgMHg5MzkzNWFmNiwgMHg2ZTQ2ZmNiMSwKKwkweDc1M2VhMDRmLCAweGM1ZjllMjI0LCAweGYyZmRiNDNkLCAweGQwNWQ5OTNmLCAweGVmMTdmMmZmLCAweDRlM2Y0MDcxLAorCTB4ZDcwYzM1NDgsIDB4MmE2MWZjYmYsIDB4ZDk3MmFmZDgsIDB4OTRjNGVhOWYsIDB4ZWE3ZjJmM2QsIDB4NjViNzg4YmIsCisJMHgxNTM3N2Y2ZiwgMHg5ZGM0NDllMywgMHhjN2IxYzI2ZSwgMHg1YmZkMGU5ZiwgMHhmNjM2NzFiMiwgMHgyMGYxMjk2ZiwKKwkweDI5N2ZjYWVlLCAweGZhNjgwNDk2LCAweGI2OGE0NDk5LCAweDBlOGJkMGM3LCAweDM2MjcxN2FlLCAweGY2OGM0NzUzLAorCTB4MWZjYzA0ZWYsIDB4MjNiZjVlYzEsIDB4NDIyYWJlZTIsIDB4ZmZhMDI2ZWUsIDB4YTE3ZGU1ZGYsIDB4M2ZlNjAyMWUsCisJMHgxZDM5MzBiMywgMHhhZjVjNGM5MCwgMHg4OTE5YjdhOCwgMHhiNjBmMmRkNywgMHgwZjRlN2M4MiwgMHg3NTg3Zjc3MiwKKwkweGZjOTEyZjE2LCAweDU3YzIxZjljLCAweGVkZjE1ZWI0LCAweDdjOTlmZGU5LCAweGYyZTUyYTg4LCAweDNmMzhlOGVmLAorCTB4ZmJjMzllMTUsIDB4OWFkYmIyYWQsIDB4N2M4ZWZiYWQsIDB4ZmVkZGQ5OTUsIDB4YTUzZWRlMmEsIDB4ZTdjNjBlM2IsCisJMHhmZGIxYTkxMywgMHhhNmIyMDFkNSwgMHg4ZTljNzRmNywgMHg3ZTg0NTdjMCwgMHhmMmRmN2QzMywgMHg0ZDZmZDMxMCwKKwkweDQ1YTUwM2RmLCAweDMwZjE3ZTUwLCAweDBlZjgxZmQzLCAweDU3NGEzZmM2LCAweGVmOTYzZmE4LCAweDNkYTAyNTlmLAorCTB4NThlNmYzYTAsIDB4ZTY0NWJkN2EsIDB4ZDcyZmFkN2EsIDB4OTZlOTQyNzAsIDB4YmMwODg0ODQsIDB4Yzg0OWZkNDAsCisJMHg1OTVmNWM3ZiwgMHgxNzdlODFiYSwgMHhkMGJkMmY2MSwgMHgzZWJhMjM5ZSwgMHg3MTk3NmY0ZCwgMHhmYTA1M2ZmZCwKKwkweGZlYjc0ZDdmLCAweGVmNGM4ZDkzLCAweGZjOWZmNjdiLCAweDA3MjM2ZTJjLCAweGY0MTI3OTllLCAweDVmYTdlYTk1LAorCTB4NGI5NTdkMDUsIDB4ZGQ3ZmRmYTAsIDB4ZWRkZWYyZDYsIDB4ZGFmZjRmNTQsIDB4ZGVhOWU5YTgsIDB4YjRmNTFhN2UsCisJMHgxMjc4Yzc3YywgMHg2YWZmNGY0YiwgMHg3YTk4OTE3NywgMHhkNGM3OWY0YSwgMHhlMjFiN2I1MywgMHhmZDk0ZmZmOCwKKwkweDI4OTdmOGQ0LCAweGQ5YTdmOWViLCAweDY4Zjg5ZWMzLCAweDRhMmY4N2I0LCAweDY4ZDNmMjJhLCAweDYxZGZlOTBmLAorCTB4M2Y4ZDFiOTIsIDB4ZGUxYTc3MGQsIDB4NzU1ZDdlMmEsIDB4MzA5ZGQ4MDUsIDB4ODVkYzM1MmUsIDB4MmVlMWE5NzEsCisJMHhlM2FiN2UyYSwgMHhjZmZjYjE5ZiwgMHg3NGEyNmIxMCwgMHg0ZmQ0YjdjZCwgMHhhNTg0Nzk4MSwgMHgyYmJjZTA4YiwKKwkweGViODg5NjdmLCAweDA0OGI5NmE2LCAweGM4ODBiZWY1LCAweDdkZjA2ZmI4LCAweGYwNzhjZDUzLCAweGZkZmNhNzQzLAorCTB4NTJmN2IzYjYsIDB4YmYxM2U3N2EsIDB4ZWJlNWQ2Y2MsIDB4YmZlYmY0NjQsIDB4YzlhYmVhZmMsIDB4NzNiNzNmYjQsCisJMHhlY2E3Y2VmZSwgMHg2M2NhODliZSwgMHhlMjg0MjRhZSwgMHgyNGYzOWQyOCwgMHg4MjQ4NGZlMiwgMHgzZTQwYWNmOCwKKwkweDdlNjNhMDhlLCAweDdmMGYzZWI5LCAweGViYmI1MjUzLCAweGFmZmRlZGU5LCAweGE2ZjkwZjNiLCAweGI2M2VkYmU5LAorCTB4YTQyZWY1NzYsIDB4Mjk3OWIxNDMsIDB4MjBhNTRmMTIsIDB4ZWYzZmNhNTcsIDB4MDQzMDIxMzgsIDB4NTQ5YjUyZWQsCisJMHg3YWFmMzExMiwgMHhiNzlkZGI5YywgMHgwZjFjY2RhNywgMHg5Y2ZlNGJmZSwgMHhlNzBjMDk1MSwgMHhlYjdlNzE4MywKKwkweGJjZWJmNmU1LCAweGJiMDA0ZDVmLCAweDBiMzliZTdlLCAweDBmZTdhZmU3LCAweGI1OGY4ZTJkLCAweGUzODViMjZmLAorCTB4NTc1ZjAwZWMsIDB4NzUwYmI0ZTksIDB4Mjc3ZGM1MjIsIDB4YzVmZjQyZTksIDB4YWQ5MmI3NmYsIDB4YmVmZGQ2MzEsCisJMHhlNGY4OWIyZiwgMHhmZThkY2I4MywgMHg3MzZlNTQ4OSwgMHhkMWU3MGUzOSwgMHgyMjcyMTM0ZiwgMHhhNmViMzZlNCwKKwkweDVhMjM5MjUzLCAweDcxZjdmMDBlLCAweGRiZWIzY2M0LCAweDBkNzAxN2YyLCAweGI2YjE2ZGZjLCAweDg4YzQ5NjE1LAorCTB4ZjM4NGZkZDcsIDB4NWYyYmNhNmYsIDB4NjlkNWZlZTAsIDB4ZjAxMmY5Y2QsIDB4ZDQ1ZDlhNzEsIDB4ZDQxZTM5YzUsCisJMHgxOTI0NzVmNCwgMHg3OTRkNzQwOSwgMHhlM2EzZjk2NSwgMHg4N2JkOGUyOSwgMHg1N2VjMTc0NCwgMHg1MzlmMzZmNSwKKwkweGJiZTYzMTNjLCAweGZkNDI3ZTQ2LCAweDkwMWU0N2UwLCAweDIzYWZjODlkLCAweGUwMTJjOTcyLCAweDU2ZDk5MWViLAorCTB4ZWY5NmViMDIsIDB4NThhYWFlMmEsIDB4YjMzNzRlNzQsIDB4NTIzY2M4NzgsIDB4ZTEzOGQ5ZjIsIDB4ZTZmZTNlZmYsCisJMHgxNTBmODljZiwgMHhiNzljN2U1MCwgMHhkMWMwZmRiMywgMHg3ZjdhNjNmOCwgMHg2YTA0MjlkZSwgMHhjOGExYzAwNSwKKwkweDAwNDIyOWYyLCAweGM0ODU2NGUyLCAweDAxNjRlOGYzLCAweDQ4ZmFmZGY1LCAweDJjMWY5NWZiLCAweGQ1ZjYwMTdkLAorCTB4NGUwYjM3NTQsIDB4OTZhZjJkMTMsIDB4YjFjMDE0ZGEsIDB4MDI1ZGI4MzcsIDB4OTU0NmZjZmYsIDB4MjBkZTMxYjgsCisJMHgxNTlhOGNkNSwgMHgyMDNhZDcxMSwgMHg5NmFmYzg0YiwgMHgyNzdlZGRiZiwgMHgyY2MyZjdmMCwgMHhkY2JhMDEzMywKKwkweDYwMzljZjIzLCAweDNjZDBiZmRjLCAweGE3YTBmNTE2LCAweDQ3YzFmZDdlLCAweGEwOTM0Y2E2LCAweDMwZjg4MjFlLAorCTB4YzUzMGExZTIsIDB4OWVjZmNiYTYsIDB4YThiYTA2NGEsIDB4ZGI5OGE2ZGMsIDB4OTBjNTcxZWUsIDB4ZTE4NTMyZGYsCisJMHhjZGY2Y2ZhYywgMHg3ZDk5ZmZmMiwgMHgxYmVkNGM5YiwgMHg2OTFjYjVjMywgMHg1MTJiNDZkZiwgMHgyYzdmYWRmNiwKKwkweDU2YjJiNmZiLCAweDU4YjgwZmVkLCAweDNmYWIzN2I5LCAweDZiZTU3NWM4LCAweGIyYzVmYTRiLCAweGQ4ZmFhZjZmLAorCTB4YmUzNWZkZmMsIDB4MjA3M2JiMGYsIDB4MjNhMzZmYjUsIDB4NmE0MGRiZWMsIDB4NmRjNDYyZGYsIDB4ZmZjZDE1ZDMsCisJMHg1OWJlYzVlYywgMHhlZmY0NzdmZSwgMHgzMTZmYjA1NSwgMHhkMTUyM2JmYSwgMHhlNmEyYjdkYiwgMHg0NTZmYjQ1YSwKKwkweDdlZGQ0NTAzLCAweGNmODUyY2E4LCAweDZmYjQ3YWU3LCAweDFiMzY3ZjBiLCAweDE2Y2JiMmYzLCAweDU3YzAzZjAzLAorCTB4NzFhZjZmYjAsIDB4ODBlZDA3M2IsIDB4MzhhNDViOWQsIDB4ZGFiZWZkYjEsIDB4ZGFiZWQyYjksIDB4M2UyNWZmYjksCisJMHhlNTZlNzY2YiwgMHgyMzllNzYyMCwgMHhjZWNjODcxYSwgMHg3NjY0Y2NhZCwgMHg2NjVlZTU2ZSwgMHg2MzBlNTZlNywKKwkweGRmNjhjZTc2LCAweDFiZWNhMjBhLCAweDA0N2FiZWZiLCAweDhiZTcxZWZkLCAweDgzYjhiZjk5LCAweDk1Y2YxNzk2LAorCTB4N2VmYTE2NWQsIDB4NWY5ZGFhYjEsIDB4NjkxZjE5YTgsIDB4MTIyOTE2ZWYsIDB4ZGVjYTM5ZjIsIDB4MzllMWNlYjksCisJMHhkZGVjZGU5MCwgMHg4NmVmNjA1YiwgMHgwYTFiMWRhMiwgMHhjN2M0NjQ3YSwgMHhiYTZkNDMwZCwgMHhiZTQ3NzJmZCwKKwkweDRiZjVmZjY4LCAweDEwN2YyZmEwLCAweGJlZmQ5ZTcxLCAweGY2OGJjZDg5LCAweDE2M2VkMTdkLCAweGE3Mzc2ZWY0LAorCTB4Yzk4NTUxZTcsIDB4NDdlN2MzYjMsIDB4MjQ3NTNhN2IsIDB4NDNhYWY3ZDMsIDB4NTQ0ZTM4NzEsIDB4YmZhYzA5MzcsCisJMHgxNTAxMGJmNywgMHg1ZGJmODFjNiwgMHg5ZGYyZjljMiwgMHg3OTdjZDk3YiwgMHg4M2YxOTk4ZSwgMHhjZWM4OWJmYywKKwkweDJjMTY1MDVkLCAweGRjYzNjMDhjLCAweGQ3MTgxNTRiLCAweDBiMTEyYjljLCAweDBlMGJhZmY4LCAweGZjMGE3MGRkLAorCTB4ZDY5NzA1ZDYsIDB4MDBiYmJmYTMsIDB4ODliZWMzOWUsIDB4MzJlYjZkZWQsIDB4MmU3N2JiNjgsIDB4YTFkZTcwMTcsCisJMHgxNzk4ZWZlZCwgMHgzZjdhOTdiNiwgMHhlYzczN2U3NiwgMHgzODUzMWE3ZCwgMHgxM2VlNTMzZCwgMHhhNzJmYjAwMiwKKwkweDJmMTA3ZGI3LCAweDIzOWJmZDcyLCAweGM4YmYyMWI2LCAweGY4Y2M2MjViLCAweDk4NWVmNmE0LCAweDk3YzYyZTRmLAorCTB4NmZjYzU1YWEsIDB4ZjI4OWYzMGUsIDB4ZjlhMjE1NGQsIDB4YmM1ZDI1NDQsIDB4MmY5YmI1MzAsIDB4ZmRhNGVlNzcsCisJMHhiZmI5ZTk0ZCwgMHhmN2EyZGYxYSwgMHgzZTcxYjhlMSwgMHhkN2JmODBiMywgMHgzZTM0MWYxMywgMHhmMzlmZjU0NywKKwkweGI4YTlmYTlkLCAweDhmYzhjNzlmLCAweDVjY2VjZDQ2LCAweDVlODE0NjQzLCAweDNjZjI2ZmJlLCAweGY0NzAxZTNhLAorCTB4OTQyZjk0OWYsIDB4MGRlNmRiY2UsIDB4ZDllNzlkZDMsIDB4OTM3MmY5YzUsIDB4NTRiNGQ4ZTcsIDB4NmE0OGY4MTUsCisJMHg5N2I3NjcwMCwgMHg0YTkwM2Y2ZiwgMHgzYjhiNzdmYiwgMHhlNjQyMDczMywgMHg3OGE2ZmZiMywgMHg2MmQwZmUyMCwKKwkweGE4M2I0MmVkLCAweGNjY2QzMGUxLCAweDhlNTdmODcwLCAweDljMDMyM2MzLCAweDA5YmM3MGQzLCAweGFmZDQ0ZTBhLAorCTB4ZjFjZWMxOTAsIDB4Y2E1ZTY0N2QsIDB4NmY1ZmQwNjcsIDB4MTQ0ZjhmOTAsIDB4ODU5ZmEwOWYsIDB4NzIwNTc4ZGEsCisJMHhhOWJjZmZhMSwgMHg1YmM1Yzk5OSwgMHg2ZTVjYTAyMywgMHg4MTA3NWQyNiwgMHg4MjI5ZDVlZiwgMHgyYWFiNDQyYiwKKwkweDIxZmY2ZTBjLCAweGQ1N2FiN2VjLCAweDllODM5ZjRhLCAweGNkYWUwYjk3LCAweGY0ZjYxZDhjLCAweDk2Mzg5OGQ0LAorCTB4MzcxOGUxNjIsIDB4OWI4YzQ2MDksIDB4MjRiZGUwMGIsIDB4YzY2OGI3ZDgsIDB4MWVmY2VmZjYsIDB4M2Y0NjQ3YjMsCisJMHhmNWI5OGE2NSwgMHhlNTMzZDAwOCwgMHgwOWIyNjRkZiwgMHg3ZmU4MDYxZSwgMHhmYTMwMzgxMSwgMHhmMDdhNTEzMSwKKwkweGE0ZmRmNzM1LCAweDJhZmRmYjcyLCAweGZjMGVjMWM4LCAweDFmYzA1MmVlLCAweGY4ZDg4NmYyLCAweDI1N2I5NWEzLAorCTB4NGRmMjFhNzUsIDB4OGU5MDQzOTMsIDB4MWM5OGUzMmYsIDB4YzhkZmE5NjAsIDB4M2NiNDViZTcsIDB4NmZkZTFmZTAsCisJMHg3ZWY4NjQxNiwgMHgzMjRmOTUwNiwgMHhmYTZhOWEyZCwgMHg3Nzg2YTBlMiwgMHgyZmNkMWFiMywgMHg0N2E0Mjc4OCwKKwkweDZmYjAwZGQ4LCAweGQ1OTZlYjkxLCAweDRmOTFiN2MxLCAweGVlYTJhYzM3LCAweDI3Y2QxYTk5LCAweDA3NjAzZTRkLAorCTB4MjhhZmM3MmYsIDB4OGZlZTA5ZmQsIDB4OWJlYTdmYjksIDB4NTk5YTRmZWEsIDB4YWNmYjNmYWYsIDB4ODY4ZmFmNWQsCisJMHgwMTVlZGEzOCwgMHg0ZTY5MGFlZCwgMHhmMjBmYzVkNCwgMHhkNjVlNmNjYywgMHhjZTIwZjU2MiwgMHg1ZDkzNWViYiwKKwkweGZiNjhkNTliLCAweDBiOTcxNTczLCAweGNmMjI1N2NjLCAweDBlODU0ZGVmLCAweGQzYjFiYWMxLCAweGZhZDEzZTRhLAorCTB4MmNlMTg0M2QsIDB4ZDU3ODNjNzIsIDB4ZjVmOTQxZWEsIDB4NWUwNGZmNTQsIDB4OThmZTRmN2YsIDB4YjQwZWZmOTYsCisJMHg1NTE2ZmIwNywgMHhmMWM2N2I3ZCwgMHhmNTI3OGI0OCwgMHg2NjY5YWZkNiwgMHg2OWJlM2Y2NiwgMHhiZTc2YjRiZiwKKwkweDk3ODNiYWVlLCAweDRkZmM2MmI0LCAweDJjZDg3ZjViLCAweGMzMmU3ZTdhLCAweGQwNDhiOGZjLCAweGNhNTA3M2FkLAorCTB4OWZmMmZkNzEsIDB4ZTU1OGZmNTAsIDB4ZmM0M2Y1MzIsIDB4ZmNmOTQ0MjgsIDB4MzFhN2I2ZWEsIDB4ZjlmNjdkNWUsCisJMHhmZTgzMzc2MywgMHg0OGFkZjhhYywgMHgzYTlmNTQyYywgMHgxMDkzYzViNiwgMHg4MGEyMDdkYiwgMHgyNGQxNTA5ZiwKKwkweDkxMTY3YWUyLCAweDIzMzNiOTQyLCAweGQ2NDIwY2ZjLCAweDE0YmM3ZTMwLCAweDYyYTc3NjhmLCAweDRjNTAzOTg3LAorCTB4ZjVkOGFmYmYsIDB4ZGRjNDM2NDksIDB4ZjY2MDFlM2EsIDB4YzczY2ZmY2YsIDB4MWIyZGJmYTMsIDB4MjQyYmZiZDYsCisJMHg5NDZmOGViNiwgMHg5ZjFjYmRjZiwgMHhlNmRiNzY2NywgMHgxYTE2ZmQ4MiwgMHg4YWQ3NzlkOCwgMHgzOWIyMzljNiwKKwkweDY1NTBjZTIyLCAweDdiNWM1OTk2LCAweDU5ZjcwZGI3LCAweDcwMTM5ZmZiLCAweDE3ZDAzMjlmLCAweGRiNTJjZTc5LAorCTB4MzllNjc5ZmYsIDB4ODIyYjk3NjYsIDB4Y2RjZTAwNzIsIDB4ZWY2YzM0NTYsIDB4YzU3ODM4ODAsIDB4YWZmYTMzNTEsCisJMHgwYTczODZkZSwgMHg1ZjUzYTdmOCwgMHgyM2ZkMDE3YSwgMHhjNWQ0NTA2ZiwgMHg4ZmUyYTM0MSwgMHgwY2M4NjIwZCwKKwkweDJhYTZiM2YxLCAweDdmMzQwM2I0LCAweGIxOGRmMzBjLCAweGM1YmRmMGUzLCAweGI0YmM1NmM5LCAweGIyOWY5Nzc3LAorCTB4Y2ZjYmM1NzAsIDB4NmNkY2YwM2EsIDB4YzYwNzU2ZWIsIDB4MWYyZTFiMjEsIDB4Mzc4YThmZmYsIDB4ZDk3NDNlMzYsCisJMHg4ZTY5ZTM3OCwgMHhmNTk5NWY4ZiwgMHgyMWE0MzVlYiwgMHg5NDkwZTMxOSwgMHgxODkyZGNiZSwgMHhlZTMwOGI3MSwKKwkweDI5ZWNmODVmLCAweGIzM2IwZjU4LCAweDAxNGZhZmUzLCAweGI4ZmY5NWJkLCAweGUwN2RkNGYwLCAweDNhYjNlZDhmLAorCTB4M2VmNmJjNjEsIDB4MTNkNzA0N2YsIDB4NzM3NmVmYjQsIDB4ZWU3OGVmM2QsIDB4ZTk4NzVjNTksIDB4MDVkOWEzZjgsCisJMHgzZGVjNzViNSwgMHgyM2Q2MTgzMSwgMHg5MTdmYjYzYSwgMHg1NWRiNzEwYSwgMHgzY2UzYTc3YiwgMHhhOWNlZDU2ZCwKKwkweDc5OGM0OWZkLCAweDZlMDI5NjgwLCAweDA3NTg3ZDAzLCAweGE1YWJjYTMyLCAweGQwMzA2NWE5LCAweDFiY2E5Njc5LAorCTB4ZmM3MGI2NWMsIDB4YzU4YWIxYjgsIDB4MzcxZTU1ZTMsIDB4YmQ3YjE2ZGUsIDB4ZGM0ZTJhMmQsIDB4ZWI5NmYzMzQsCisJMHg5MjZlZmM2MCwgMHg0M2U5MmE1ZCwgMHg5NTMwZjhiYywgMHhjODNlZThlMywgMHg5YTQzZGI2ZiwgMHhiZjI5OGZiZCwKKwkweDJhMGZmMGIzLCAweGYyMGRmN2E3LCAweGM5NjlhY2ZiLCAweGIyODQ5ZWFmLCAweGUzMWVlNGE2LCAweGYwM2VhMWM1LAorCTB4ZGJjZjViNGQsIDB4NmM3Zjc2NjIsIDB4ZjFkOWJkMDYsIDB4ODNjZjhjNmIsIDB4ODM1Y2U4ZGMsIDB4ZDlmMGJjNzQsCisJMHg5Y2IzODg2MCwgMHhjMmVlYmI5NCwgMHhjZDdiMzNmZCwgMHg2MmFhMmZiOCwgMHgzZmE4ZmJlZiwgMHhjNmRmM2IxZCwKKwkweGQ3YzIzMmY1LCAweGY4NDgzYWQ1LCAweGYwODNhZDhmLCAweDRiNzc5YzM5LCAweDczMzM4YjNjLCAweDVhMWM0M2ZlLAorCTB4MWU3M2UwNzUsIDB4ZDYzODY2NmYsIDB4YzUzZGQwZTIsIDB4NmMyZGQzOWYsIDB4Y2ViNjkxM2YsIDB4Y2ZlNWI1NTgsCisJMHhmNWM0MzEwYSwgMHhkMzkwM2M4NSwgMHg4YmFlY2JiMSwgMHgwMjcwN2M2YSwgMHhhZTQ0MjYxZiwgMHhmMzhlYzRhNywKKwkweGI4ZGRkNzg3LCAweGUwN2U0MGJjLCAweDRiZDc4NTdmLCAweGM0MjA3ZTY4LCAweGZiYzIwM2NmLCAweGU4M2Q4NjI0LAorCTB4NjFkNmM0ZDgsIDB4ZmJkOGU0M2EsIDB4OTVmNWI1MGYsIDB4NGY0MThiMTQsIDB4NTc1YjdkMDMsIDB4YWZmZThkZTksCisJMHgyNjE5MWZjYiwgMHhmOWEzZTM5YiwgMHhkOGNiZTY3NCwgMHg0NTgyN2M3NiwgMHg2MWZiNzZmOCwgMHhmNWE4ODUyYSwKKwkweGNmYWMwYjdmLCAweDYwNTMxZDM3LCAweDYzOGRhMWZlLCAweGYwY2Y3ZjVhLCAweGU3OTlmMjc5LCAweGIxZWYzYzQ1LAorCTB4ZWQwNWIxYWUsIDB4NTQ1ZWQxYjgsIDB4MzQxZjE2MTMsIDB4ZDM4MzNiZDIsIDB4ZTM2NDFkNWIsIDB4ZjExZDk5YzQsCisJMHhlN2FkM2IwMSwgMHgxMWJiMmJjYywgMHg4ZWRiZDVjZiwgMHhkZjVhN2UyOSwgMHg5NTk3ODZjMSwgMHg1MmZkODhiNiwKKwkweDIyMDQ0ZTMwLCAweGUyZjMzZmU4LCAweDdlYjY2Y2ZlLCAweGM2ZTVlNmM0LCAweDc2ZjBlNjc2LCAweGRiYjFjZGJjLAorCTB4YTczYjZlZjEsIDB4YmY4NTY3NmIsIDB4NzdlNzYxNTEsIDB4NjlkZWRmMmUsIDB4ZWEwNzNkYzksIDB4MTMyYWRkM2IsCisJMHhiYTdmYmZkOCwgMHhjNDBhMmM1MSwgMHg0NTkyN2Y2OCwgMHg0Y2YyZTJkNiwgMHg4OTc4ZTg2ZiwgMHhkOWUzMWRlNywKKwkweDQ5MzE0NmY5LCAweDU1N2FmZjQxLCAweDg0ZDFkZTdjLCAweDE1MTU0ODE0LCAweDZhNmIxNGUyLCAweDM1ZDJmZWQ5LAorCTB4ODFhNTc3ZGYsIDB4ZGUyNGQ3YmMsIDB4NzU2ZGViODYsIDB4NTMzYWZlMDYsIDB4YmYxMGY5OWMsIDB4MTkyYjRlNzAsCisJMHhkYTM1NzAwNywgMHg0OWI3NDQ5YiwgMHhmOGFhZmY0NywgMHgxZTcwZmVhMiwgMHhjN2Y3MmQ3ZiwgMHhmM2MyZTQ4OCwKKwkweGIwYTNhMjk3LCAweDNhMjNmYTA4LCAweDhjNmI0ZTRkLCAweDVlZDkwNWY1LCAweDdjMTEzYzQyLCAweGYzZmE5ZDkxLAorCTB4YjFjYmU0OTIsIDB4ZWRhM2Q0MmEsIDB4YjRiNGE5YTMsIDB4YTc0MmM0MWUsIDB4NGIwYWI3MWIsIDB4ZmNkZGVjNzksCisJMHg3N2VjNGU1OSwgMHg0ZjNlMzZlNywgMHg5OWQ1MTM3MCwgMHhjMTgzZjZjYSwgMHgyM2I5ZDFiOCwgMHhjNjhjOWIyMSwKKwkweGUyOWI4OTBmLCAweDBiOWZjNmQxLCAweDA3ZWZmNmRiLCAweDQxZDZiNDdiLCAweGNmNTQ4OWRjLCAweDMxNTU1NzI4LAorCTB4OGU4ZGNlMGIsIDB4ODA1OTA4YjEsIDB4ZmU2ZjczZDMsIDB4NmQ2YmQ2OTYsIDB4ZDBmZTcxMTYsIDB4ODVmNmQ3NjksCisJMHhjZjQxMTNiYSwgMHhkYzExZTQ2YywgMHhmZTUwMDdmZiwgMHg0ZTliYjkyYSwgMHgwMjQwYmVlMywgMHhkZjc2YTRhZiwKKwkweGI0NWQzMTJiLCAweGZjZTdiY2UzLCAweDEwMDcxNjQ2LCAweDk4YmZkNWM5LCAweDI0NzBlMmNjLCAweGYxZjNmNDAwLAorCTB4ZjNhNzA1NjQsIDB4N2VmMGE0M2MsIDB4M2FlNzgyOTksIDB4NzJmNmJkOTYsIDB4MzkzMDg4NmUsIDB4YjkyYmYyNDQsCisJMHhiNGJlN2Y0OCwgMHg4NmM4ZWFkZSwgMHg3N2UyNzk3NSwgMHg5OTM5YzJiNywgMHhiZjVmNWUzMiwgMHg1M2I5ZmQxMiwKKwkweGQwN2U3ZWFhLCAweDRmNWMyNWQzLCAweGYwYjRiYWZmLCAweDMyYmZkODEwLCAweGViYjQ1MmNmLCAweGNmZWFlN2ZkLAorCTB4NTlmNzFhYTUsIDB4MmZiMGJkMjEsIDB4OTNkZGVhOGMsIDB4YWJiZWY0NDIsIDB4ZDZjN2U2ZjIsIDB4N2EzOTdjYzEsCisJMHgwMTE5MTVmZiwgMHg0ODJhYzlmYiwgMHhlN2NlMGI5YywgMHg5N2QwNjhhYywgMHg3OWJiMDNlZiwgMHhkODkzYjAxNSwKKwkweGViZWYxNzJmLCAweGMzNmRiZjk1LCAweGRjNzkzMTdmLCAweDBhZWJmOTY1LCAweGUyZGJmYmMxLCAweGVjYjJhZTMxLAorCTB4OWY2OGM1YjUsIDB4ZmU3YTY5Y2MsIDB4N2YzZDU1NWEsIDB4N2M4YzIzNmQsIDB4ZGUzOWYzZDQsIDB4MzY5YmU3YTUsCisJMHhjZjg5ZWNmZiwgMHhmM2ZhNzkwOSwgMHg0YjNlNDZiZSwgMHgwMjFiYzc4NCwgMHhiNTExMGUyYywgMHgwOWI4MmRiZiwKKwkweGQ5ZjIzNmU5LCAweDBiNzZkN2M4LCAweDdjZTJmNzVmLCAweDk2MjU3ZmE1LCAweDgxYjI2NjU0LCAweDg0Mjk3NGVlLAorCTB4YTNkNDYxN2EsIDB4ODA0ODdiMGMsIDB4MDk0YTBmN2YsIDB4YWU1N2UyZDQsIDB4NjllZmI0NzgsIDB4MTk0MjNmYmMsCisJMHg3YTA2Y2VmYiwgMHgyZWJkMDIyNCwgMHhkMTM4MjNkNCwgMHg0NmRlNzYwNywgMHg1YmI2NzAzZSwgMHg5MDlmNTg0MSwKKwkweDU5ZTlhZWFmLCAweGZlOTRmNzllLCAweGZhMjJkOGZlLCAweGVmYzA0NmQ1LCAweDc2MmJkNDY4LCAweDA0ODkzNzZlLAorCTB4OWU4MjY0ZDYsIDB4NmUzMDljYmEsIDB4NmEyY2ZhMzcsIDB4OWZmNzA0OTksIDB4Mjg2Y2I1MTAsIDB4YzRlMjdiZGMsCisJMHgxZjdjYzdmNCwgMHg4MjQ4ZTc0YSwgMHg0MzFiODJmYiwgMHgzZWMxNTMxNywgMHhlYmE3MzhmZCwgMHhkZTdiYjA2NiwKKwkweGVjMDRhNDI1LCAweDZjNzFjZGUwLCAweGE3OThiMjllLCAweGRjMmFiNzdmLCAweGVkN2I0ZWFlLCAweDU5YmVmODdhLAorCTB4Nzg1Y2UxNTYsIDB4Y2I1NmYzNjcsIDB4NDUwN2M4MzAsIDB4OWJjNDdmYmMsIDB4YjQxNTc3NTgsIDB4MzMyY2QxZGYsCisJMHg4MTJjY2FiYSwgMHhkOGJmMTA2MSwgMHgxZGJiNjMyYiwgMHg3Y2YxOTM2NSwgMHg2YjZmZDg2NSwgMHgzYTQwZmI2NiwKKwkweDJjNzEzZjliLCAweDFkZTdiMDhlLCAweDA1NWU5ZmMxLCAweDRjMjdhY2YxLCAweDBjOWZmN2IxLCAweGZkZjg5YWI3LAorCTB4ZmM3MGRmMzUsIDB4N2ZkYThjNmQsIDB4ZjZjYWRjMzcsIDB4MDg3OGZkYzcsIDB4ZTk3NTQ3ZWQsIDB4MzMwZTNlNzksCisJMHhjYjk2Yjg3ZCwgMHg2ZjRiZjdmOSwgMHg2Y2VmZmVjMCwgMHg0NzE4NTQxNiwgMHg2ZTNiYzUwYSwgMHgzOWZiNDUxYywKKwkweGUzYzQ4OGYxLCAweDM5MmUyYzMwLCAweDliYmZiZjhlLCAweDFmODBkMmI4LCAweDAyMjNhZjEzLCAweDNmYzRmM2U4LAorCTB4MzViN2RjMTIsIDB4Y2UyOTY2YWUsIDB4YTBlYjdlYWIsIDB4NzU4NmNmMzgsIDB4YjA1YjhhNTIsIDB4ZThlYzY3NzMsCisJMHg5NTZmOGZiZiwgMHg5YzRjYjg3NCwgMHg3OTgxNjllNiwgMHgwNGEzODRlNiwgMHhhMzg0ZWRlZCwgMHgxMjNjZjJmYSwKKwkweDM2OWRiMTEwLCAweDRmNmJmM2ZkLCAweDU2MDVmM2VhLCAweDQ5MDc2ZjhlLCAweGY4NmY3YzA1LCAweDNhYmE0NDUyLAorCTB4MDFlYjg4YmIsIDB4ZDk2NzZmNWEsIDB4YTZlZmJjMDAsIDB4ZGE5YzIyZjMsIDB4NjI5N2U5YTUsIDB4N2U3MWFjNTEsCisJMHhmMjgxZTAyNiwgMHhlMDg1MDllYiwgMHg1MmM0ZjJmOCwgMHg1ZmVmYzYzYiwgMHgwNTcxNWE1OSwgMHg3ZjlmZWI4YywKKwkweGFjNDU3M2NmLCAweDc2MTFlMDczLCAweGFmZWQ4MTI5LCAweGUyNTAyNzcyLCAweDBhZDdhZTI5LCAweGU5NzVkZjhjLAorCTB4ZWJmNjMxMjUsIDB4NzBkNjM4NmIsIDB4N2QzOWUxYWQsIDB4ZDYyNzljNjksIDB4YWQwZmM0YmUsIDB4NTgyOTBmY2MsCisJMHg2MDUwNDIzYSwgMHgyMDRmYjY1ZSwgMHgwNzhlZDdjMCwgMHgzNzNkOTczYywgMHg2NDBmMjdlMywgMHhlMGRlM2QwMCwKKwkweDJkYjNmNDA1LCAweDk2M2I4MmNkLCAweGVhY2FiMTlmLCAweDA3YmVmMzYwLCAweDFmYjBiNWZjLCAweDk0YWE1ZWVmLAorCTB4YWU3YjFmNjAsIDB4YWJjZTAzNzcsIDB4MmJhMDg3NmUsIDB4NWJhOTY3N2MsIDB4OTc3MGU3ODgsIDB4ODg2NmM4NTgsCisJMHhlOTc1NGI2NywgMHhlZTAzYzZiNywgMHg0NzU4Y2VhNywgMHhjNGIyN2RlOSwgMHg0MjdlNzI4NCwgMHhmZWZkMjE3NiwKKwkweGJlMzA0MjJhLCAweDAzYjVlM2MwLCAweDIyOWIyNjZmLCAweGMwZmYyM2NmLCAweDk1YjBmZjlhLCAweGQ1YjBmYmQ2LAorCTB4ZjY0OTcyODksIDB4ZGZhMDA0YjgsIDB4ZTVmZmRmZjUsIDB4YmNlZWJkMDAsIDB4MGUzOTQ2NjQsIDB4ZWQxZmYzZTAsCisJMHg0ZjljYWRiYiwgMHg2YmRjZTNhMywgMHgzY2E0ZmYwMSwgMHhlNWMzZjUwNSwgMHhjOTY1YTg3MSwgMHhlNTAxMmY3MCwKKwkweDU0NzU4YzdiLCAweGYyNGQyZmNkLCAweGU5NDZkYjUwLCAweGYwOWJiMjQ5LCAweDc2ZTIyZTdlLCAweGRmNmQ0ZWFiLAorCTB4NDVlZmUxMTksIDB4MDkwOTAzZTgsIDB4NjlhNWY2MDQsIDB4MTY2ODU0ZjYsIDB4ZmYxNGYxNDIsIDB4MTBmNjJjZTMsCisJMHhjYTkyMzNjYywgMHgwOTI5YmY2OSwgMHhmNTYxNjI1NiwgMHhjMjY3NGFiNSwgMHg5ZjcxYWFlNywgMHgyZTY1YzUzYiwKKwkweGI4MjI2ZTFjLCAweGQyMzYwZGFmLCAweDlkOWFmZDQyLCAweGRhZjNlY2Q1LCAweDY2ZjY4MjQ0LCAweDYwNTI2M2VkLAorCTB4YTM2N2FkMGQsIDB4Zjg4NTY2ZDQsIDB4MmQ1YmE2NDksIDB4NDk0NGFkODAsIDB4YmRlNzhhOTIsIDB4N2QzMzk1MDcsCisJMHgzMmZkNjViNCwgMHg1MGFmZWMzMSwgMHgwZmYzMWY2NSwgMHhmNWFjNDE3MSwgMHhmY2MzOGZiYSwgMHhmYzAwYmNmMiwKKwkweGY1ZDQzZWNhLCAweDJlMzViODBhLCAweDc1Y2Y2YjJiLCAweDc5ZmU4MmMwLCAweDNmNzA2ZWQ4LCAweGJiOGY5MGFjLAorCTB4YjEzNTNmMTMsIDB4ZWJhMTAyZmQsIDB4YjY5ZGJmNzEsIDB4MWJiNDY2OGUsIDB4MTVkZTBmNTQsIDB4OTUzZWFmNDEsCisJMHg3NWNmOWUwOCwgMHhiNTcyZmZkMywgMHhmNjExNzcyZCwgMHhiOTkzOGY4MywgMHhmNDE2OWFjMSwgMHgyZDkxYzRkZCwKKwkweDVmNmJjNzgwLCAweGEyMzhiYmM3LCAweDM3ODRjOGVjLCAweGRlODA2YjNjLCAweDhjM2Y2YTZmLCAweGEyMTMxODc4LAorCTB4MzNlNWM4ZmEsIDB4MmE3Yjg1NTIsIDB4OTQzY2UxOWMsIDB4ZmNmOTVhYjcsIDB4OTQ5YmRiOGUsIDB4ZDFmZDcxZDIsCisJMHgzMzM4ZTVhZiwgMHg2YmQzNTdmMiwgMHhhY2U3YmVhMywgMHhiMTk4YjU3NiwgMHhjMTMyMDBkNiwgMHhiYTExMGVkOCwKKwkweGMwYjM1MGU5LCAweDgyMjFiZDFlLCAweDRmOTlkZjdmLCAweGJhZTk0MmYxLCAweGZjMGVmNDE3LCAweDE5ODE4YmYzLAorCTB4Y2QwZDliODAsIDB4N2U4MmIxZGYsIDB4YTNmMWUzN2MsIDB4YjExZDdlOTksIDB4YTIyN2ZhYmYsIDB4ZjZjYWMzYTcsCisJMHgwZjgwM2I4NywgMHhmMjJmZmJkNSwgMHg3Mjg0MjNmMSwgMHhlYTk1Y2IwZSwgMHg0NDNjNjQ0NywgMHhlNzExYmRjMywKKwkweDgxYWM1ZTlhLCAweGYwYjIzMzBiLCAweGY5MDExYzdjLCAweDBhMjM0Mjg4LCAweDNhMzY0Y2Q2LCAweDdmOWFhZjgxLAorCTB4Y2ZlYzI2YmQsIDB4OWViOWUyMjYsIDB4ZGVkNjRlNTUsIDB4Y2JmMzU5MWEsIDB4ZWZlODE2NWQsIDB4ZmU4MmY4YWEsCisJMHhmNTE3NWI5NywgMHg5N2YzYTI1ZSwgMHg1ZTMwZjM4OCwgMHg2N2U3MGJhOSwgMHgwOTBhNGJkZSwgMHg3ZTBiN2YyNCwKKwkweGI5ZWI2OTA1LCAweGM0YTU3ZTNhLCAweDA3NTdlMGM1LCAweGZmZjhkMWU4LCAweDZkOTNmYjI3LCAweDZhODNjZmVjLAorCTB4MjVhZTdmNzcsIDB4NTFiNmRmOWUsIDB4NGY3YjkwYmIsIDB4MDVjMzNhN2QsIDB4ODkxNjljMzksIDB4ZDk1ZWJlMGIsCisJMHg1MWU3N2U5MywgMHgyZGQ3MDZmZCwgMHg3YTBkOWY0YSwgMHhlYTk5YjEzYywgMHg4ZjVhMjliMSwgMHhkZTA5NzI1ZCwKKwkweDZiZGFlNzViLCAweGQ0Njc3YjQzLCAweDVmYmM4YmViLCAweDdiZTMxYjVlLCAweDExOTllODhkLCAweDUzNzFmMzA3LAorCTB4NWRjMDYwZDcsIDB4OGI5MjRhYjYsIDB4NDFkOWIxMjksIDB4YjZhZmFkOTEsIDB4OTFjNmViMjYsIDB4OGZkZGYxZTgsCisJMHgyZmYzNTI3NiwgMHhmOGQyYmYzNSwgMHhlNGFmZDg1ZSwgMHhjZjE2ODZlMywgMHhmZjE0ODIxNCwgMHhjN2Y3ZGZiNCwKKwkweDVmMDFlNjc5LCAweGZjZDkzOGQ3LCAweDgyOWEwZTEzLCAweGFiMDNmY2JmLCAweGNmYTAwZWU3LCAweDA3MTBmYjQ2LAorCTB4NDIyMzFhZWIsIDB4MTI1ZTJjOTksIDB4NGY1YmU5ZDIsIDB4ZTgzMzY1ZmEsIDB4YzI0ODYzNGYsIDB4Yzc0ZmNjNzEsCisJMHhjZjQyNjFiMSwgMHg0YjhiZjRmNCwgMHhhYjUyZjQ2NCwgMHhjMGNhN2UwMiwgMHhhYjFhYzI1YywgMHg3YmFmYjgyNiwKKwkweDQ3YmIzNjYwLCAweGJiMGU2MDY2LCAweGUzZGZmMWY3LCAweDdkY2M3YWQ4LCAweGQwZGM2YzcxLCAweDRiNTgxZmQyLAorCTB4Yzk3ZTgxZWUsIDB4NzM5YmYxMTIsIDB4NDBkZDM5YmUsIDB4ZWYwZmM0MmEsIDB4MGRkZjczOGYsIDB4YjkxNGIwZmMsCisJMHg0ZTE5MWZiMSwgMHhkZTI4MTJlMiwgMHgwMTQ2YTQzMiwgMHg1NTI0MzdmNiwgMHgxYjhiMDJhYSwgMHg0MGVlMzYxMiwKKwkweDI4Y2JlYjRhLCAweGRjNjFmMzU2LCAweDE2YjZhMGNhLCAweGNkMTkyMGUyLCAweDZjZjVjZmIxLCAweDVkYmY5Mzg4LAorCTB4ZWEyOWFiYmMsIDB4Mzg4NmNhM2MsIDB4NTQxZjZmZTYsIDB4OGI5MzdmNjgsIDB4NzA5NDc5ZDksIDB4MGY5Mjg2ZGMsCisJMHhiZjg4ZWRmYywgMHhmMWRiM2IwZCwgMHhmNTBmNWIxOSwgMHgxYjNlMzIyNywgMHgzMDIwNWZlNywgMHhmM2M0OTdlOCwKKwkweDY0ODg1NDNmLCAweDkxZjljMjRkLCAweDk5ZGYwNGRmLCAweGIyM2YzODJjLCAweGQ4MjM1NzExLCAweDU4ZTI5N2NmLAorCTB4ZTA5ZDc1NWMsIDB4OWZmOTBmNWEsIDB4YjgxNjVkNDgsIDB4ZmZjMzQ3NmYsIDB4ZWFkZjI3OGYsIDB4OGUyYmU4OTIsCisJMHhjMzY3Y2VlYiwgMHhjM2VhOTU5YywgMHg4ZWFmMjBmMywgMHhhZjg3ZTdjOSwgMHgwZDc0MWVjNSwgMHg4YjczNzg2NiwKKwkweDlhZWZmZGJhLCAweDRlYjI4MmRjLCAweDg3ODg1NjZlLCAweDc4ZWJkYTQ0LCAweDFkZjdlNzA1LCAweGU2MGI5YzQyLAorCTB4MDVjYjFkNDMsIDB4ZTE2MGE3NDYsIDB4N2QyNDAzZTcsIDB4NDNkYjg2OWMsIDB4Mjc3ODFjNmQsIDB4YjdlOTEzMmUsCisJMHhiYzE4ZmYxMSwgMHhiMmUyY2MxZiwgMHhmZDFhM2QwMCwgMHg4NmE0NzNlMSwgMHg3M2M2OWU3MywgMHhlMTU5NjlhMCwKKwkweGVlM2E0ZGI4LCAweGUwNTEyZDkzLCAweGJlNzIyZjhlLCAweDk3ZmU4NmQ5LCAweGRmZjRjMWQ3LCAweDYwZmU4Nzg4LAorCTB4NmU3MzJlM2MsIDB4MTVhYmYyOTIsIDB4YWU1ZmRiZTQsIDB4ZGI3YjA0NDksIDB4MGVlM2NlZmYsIDB4MGY5MWFmOTAsCisJMHhjYzdmODI5ZCwgMHhmYWRmNTg0MSwgMHg5ZjczMWM4MywgMHhhNWE2OTY4OCwgMHg3ZjA1MjgwZCwgMHgwZDNkMmQzNCwKKwkweGJkNzllZDUzLCAweDA3MTk4YTVkLCAweGVlZjVjZDNjLCAweDllYjVlMzFiLCAweGMzZjMwYzU4LCAweGIzOWZkMGQzLAorCTB4NzNkZTc3OWUsIDB4NjE3N2JhYTMsIDB4OGUzZWJjN2MsIDB4ZDE1ZWJiZjEsIDB4ODAyNmE4ZjgsIDB4NWRlNzc1OWUsCisJMHg5MjdlZWMwOSwgMHg5MGZmNzY0NCwgMHg4MzczYzk5MywgMHg0OTJhNTJjZiwgMHhkMWI5ZWY5MSwgMHhkYzQ3ZTkxZiwKKwkweDExODFlNjMzLCAweGFkOTMyMGQ4LCAweGJmMTY2Yjg4LCAweDUwNjVjZWQxLCAweDk3ZTRjNzQzLCAweGI5ZmFlOGM4LAorCTB4ZWMyOTRjNmYsIDB4Y2M2ZDkxOWYsIDB4MzBkYzVkMmUsIDB4MjU0YmRiMWQsIDB4NTM4NzU4MGYsIDB4MzEyZDJlYmUsCisJMHg3M2FlMjBiOSwgMHgxYzlmZDE3NiwgMHg1MTdjMTQ3MCwgMHhlMDJlNmI0NiwgMHg5MWU4ODhmZCwgMHhkNDMxZTM2ZCwKKwkweDY1YjdmMzhkLCAweDg4NDA5NTczLCAweDllYTUyYTQyLCAweDk3MjYyNDFhLCAweGI4ZWViODE5LCAweGZmNzMxNGQwLAorCTB4ZTZjNmRkYjMsIDB4NGU3MWNkZGYsIDB4MDZkMmQzNGMsIDB4OGQ4ZDk2OTcsIDB4Mzk0NDBmY2MsIDB4N2FhNDc4NjksCisJMHhhZTM2NWU5OCwgMHhjNTMwOWNmYiwgMHg2ZmI0MGE0NywgMHg5OTRlYTdkNCwgMHg0MGRkNjEwNCwgMHg5YzI5ODdiMywKKwkweGQ2M2Q5YWZmLCAweGY0MDUyMWY0LCAweDRiMDFkNjBjLCAweGU0ZDQ3ZGE4LCAweDlhYmY4NDM5LCAweGZjNGFmMThhLAorCTB4ZmQ1ZjlhMTMsIDB4OGUwM2U2MDIsIDB4ZGVkMDBhZWIsIDB4OGY1ZmZkNTEsIDB4ZDk4MjMyZmEsIDB4ZDNkODJiNmYsCisJMHhlNzY1Mzg4OCwgMHhjMTA3ZjdkZSwgMHhkZjg3ZGZmYSwgMHhlYjBmMTBiZiwgMHhiYTkxN2Y0MCwgMHg5ZTdlYzFlMiwKKwkweDc4ZGRmZmJjLCAweGUxZjQzNzM4LCAweDcxNWUyY2ZkLCAweDM1MWU2MTk3LCAweGZhZWNjNmMxLCAweDZjOTJiNmEzLAorCTB4ZGYwMmQ3ZTgsIDB4MjI3YWU3N2YsIDB4YjM1NjQ5NzAsIDB4MDFlNThkNzUsIDB4NWM5ZTcwZDEsIDB4NTU0ZjJmN2YsCisJMHg5ZWUxYjI2MywgMHg1YmQ2M2YxZSwgMHgzMmU3ZWZjNSwgMHhjYjkyYTFjYSwgMHg0ZGI2Zjk2MSwgMHhlZDBhODY0YSwKKwkweDdlYjZkYzdiLCAweGEwOGY2ZTcwLCAweDE0ZDkzY2JkLCAweDhkMTFmMzhmLCAweGM2ZGI0NTllLCAweGZhNzczMDI4LAorCTB4YWY5OWIzNGIsIDB4NmNjYWI3N2YsIDB4YzMxNzcwNWMsIDB4ZjM4Nzk2N2EsIDB4YzFlNzQ4Y2QsIDB4NmZhYzM2N2QsCisJMHhmZWQ4Y2ZjOSwgMHhhZGI0ODU5NCwgMHg3YWJlZDRkNSwgMHgwYjc5ZDk5YSwgMHg3Yzk2M2Y2MywgMHhhN2Y2MTZhOCwKKwkweDkwZjI1YmMyLCAweDc4NjJmMzgwLCAweDRlM2E3ZWZmLCAweDg4M2Y1Njc5LCAweDdlYzY1ZWViLCAweDMxY2RlZjFhLAorCTB4ZTZkNTVmOWUsIDB4ZmNiOGNiNTMsIDB4ZjUwNzg4Y2IsIDB4NmI1Y2VhMmYsIDB4MzY5ZjViMzMsIDB4MWZjZWZmYzYsCisJMHhmZjYxYjJjYSwgMHg5MWZlM2M2ZCwgMHg3OWMwMjY0YiwgMHg4Njg3MWRlOCwgMHgzZWVlNWMyNCwgMHgxZWZjMzNlNSwKKwkweDFhNTdiODI2LCAweDgyM2U5M2QyLCAweDY1NGRiNjY5LCAweGJmMzQ2NGY3LCAweGFhZTAyZjdkLCAweGVmMWRiODNhLAorCTB4ZjZiYWZiMTksIDB4OTRmOWFhYTYsIDB4NmIzMGY2MDMsIDB4OTFmYTg3NzYsIDB4YTQzZjAxYWIsIDB4OTdmOWQwNGMsCisJMHgyODJlOWJkNSwgMHhmOGNiYmU2YywgMHg3ZTdmMDc3MCwgMHgxYjM3ZjQwNywgMHgzZmFiNTlmNiwgMHg3Y2U1NGM5YSwKKwkweDMxN2NhNTQ3LCAweGJmMzIxZWYyLCAweGE2ZWU3ZjRkLCAweGZhZDVmZGFmLCAweDJiNWJmNWE5LCAweGQxZmJlMmFmLAorCTB4Zjg2OWRmOGMsIDB4MmM3OGU2Y2YsIDB4NmViYTUyZGIsIDB4OWFkMTY1MDAsIDB4ZjMwNjI3YmQsIDB4NGU3ODY4ZjMsCisJMHgxMTk3YzM0NywgMHg0OTQ4Y2IzZiwgMHg4MTEwYmE2MSwgMHhiMTQ3ZTY5MywgMHhjYjNjOWE1ZiwgMHhmZWYyMTZlYSwKKwkweGJhZjhkM2ZiLCAweDhmYzQxYTVlLCAweDExOGRjMzdhLCAweGRiNzIxZDFmLCAweDIzNjdkMDYwLCAweGI4N2EzYTNlLAorCTB4MzYyN2U0NWYsIDB4YTk5NDI3ZTYsIDB4Njc4ODQyZWUsIDB4OWQ3NjM3NTEsIDB4Mzk0ZmMyMzMsIDB4YmMxZGQ1MjksCisJMHgwYjZjZjQwZiwgMHhmOGM0NzljMywgMHhkN2I5OWNjYiwgMHg1N2NmMWM2NSwgMHhlMWZkYWJjNiwgMHhkYjk0M2QzZSwKKwkweDYwMTdkODQ0LCAweDVhN2JjM2Y2LCAweGI3M2VlZDNiLCAweDdjMDRhODZiLCAweGI0ZjRjMjJmLCAweDc0MzVjNGFmLAorCTB4ZDJmOTc3NjgsIDB4YzAzODJlMjcsIDB4NDExY2VlOGYsIDB4MTFkMzhlMzAsIDB4NzdmN2E3YWYsIDB4ZjllOTExMzYsCisJMHhhNTQzOTcxZCwgMHgzZjhmZmFkNCwgMHhkMmRhOGQ4MywgMHhkYTFkZmI4YSwgMHhhMDcxZTRiZiwgMHhiMTQ1Y2QyZiwKKwkweGZlMjdmOWZhLCAweDg2ZjdlMTFkLCAweDRjZjVjNWRkLCAweGUwMmM5NzliLCAweDk5YWJiYjcyLCAweGRhMmY2N2FkLAorCTB4MzBmMjhhNTgsIDB4NDM3YWQ3ZWUsIDB4ZDA2NjE2NzAsIDB4NjM4ZDNjYWEsIDB4NTFiZjkwMTQsIDB4ZGY1YzRiM2UsCisJMHg1MTYwN2RjMSwgMHhmMDhmMjI3MiwgMHhkYzFlMDE3ZCwgMHgyZjU2NTNhNywgMHgyOGMzZGM2MiwgMHg5M2JiN2NiZiwKKwkweDZiNTdhMzlkLCAweDQyYjcxZTcwLCAweDc5MGViZDhhLCAweGI1ZjRkZGE1LCAweGM3ZWM2M2ZhLCAweGVkMDEyNmMyLAorCTB4NjVmZTkxYTQsIDB4MGRkNzZhNWIsIDB4ZDY3ZmQwMjAsIDB4ODQ3ZWU4YmYsIDB4ZTI1ZGEyMDYsIDB4NTVmYWQ0ZmQsCisJMHhmZjc4NWM0NiwgMHg1MGZhZDQ0MCwgMHg3MjI0ZjVkYiwgMHhlNmYyZjUzZiwgMHhiZjJmYjhjNSwgMHhiMDlmZjY5YSwKKwkweDg1YzYxMjM4LCAweDdhMzVmYTM0LCAweDE0MjhmZDhkLCAweDg4MTZjOGNmLCAweDVjMTZhZWUzLCAweGVmYTM5ZjYwLAorCTB4ZWVlYjczMjcsIDB4YjBkODVjM2YsIDB4YWZjODIwN2YsIDB4NjZmYjYyNWQsIDB4Y2UwMmZkZGIsIDB4MjAzZjNiMGIsCisJMHhiZDYwN2Q2YywgMHgzZDY5ZWI4MCwgMHhlZDk5YWZjYSwgMHg4ZTU5ZWEwNywgMHhlN2RjMGEzNSwgMHg4ODUxYjY1NywKKwkweGY1NjVjNzI5LCAweDExYTFhZWY5LCAweDYwNzk2YTc2LCAweDhlYTg2Yjg2LCAweDFmZGM0NmRlLCAweDU0YTFhMmIyLAorCTB4OWQ4MDdjZjcsIDB4ZmRiODkzYzcsIDB4NDhkZjRkZWUsIDB4MzhjYzYyNGQsIDB4OWE1ZmE2OTMsIDB4OTdmYTY5YmUsCisJMHgzY2Q5NTc2ZiwgMHhjYzFjMGE0NywgMHhmZWJiMDRjOCwgMHhhODRiY2UxOCwgMHhjZWRhYmU1ZCwgMHhkMWU2MDdkNywKKwkweGI4OWZhYTU3LCAweDU4MWY1YmEwLCAweGIzZTRjNzkyLCAweGU3YzYyYzQ0LCAweGNhNTdkOTNkLCAweDFlN2Q5ZDA3LAorCTB4N2ZlZmQ3NjcsIDB4ZDFmZGI2ZjgsIDB4ODVlOWExZmEsIDB4NWVhMzNmZDYsIDB4YzVhZmY5MTgsIDB4MzA3MjhjZDUsCisJMHg4MmU4MWZmMiwgMHg3YjFiYzFmOSwgMHgwNDA3ODE2ZCwgMHhhNzQ2NzdkMCwgMHhlOTE1YWY3ZiwgMHg3MDJiNDhlYywKKwkweDNmYzgzOWMxLCAweGNlOTQwN2MwLCAweDMxZGJmNGVhLCAweDk0OTYyMzVmLCAweGM3NWU3MWRhLCAweGZhZTM0ZGU3LAorCTB4ZTFjODNmMTYsIDB4YWI0ZWQ2N2UsIDB4NDczYjJjN2IsIDB4YjgwYzkyNTQsIDB4MzZkYjUyOTgsIDB4ZjhhNGUyZDMsCisJMHgyMTc0NjQ3YywgMHhlNTNhMmJkYywgMHgxMDk5YjZiMSwgMHhjOGYyNWVmYSwgMHg1ZmI4NDI5OCwgMHhiNmQ2Y2E3ZSwKKwkweGVhMmUyZDc3LCAweDJkOGVkNWQ3LCAweDU3ZTVmYjg0LCAweGY2ODBkZDgwLCAweDEwZGI5NjA3LCAweDg5ZTUzZDU3LAorCTB4OTU3OWYyZTcsIDB4NWNjZTNmYmQsIDB4Y2JkZDlmMzIsIDB4MjkyYmNhY2MsIDB4M2M3NDJkOGYsIDB4ZmMzYzNjYWIsCisJMHg5NTlmYTBmNywgMHgxMDQ1YzVhZCwgMHg4ODg0YTliNywgMHhhYWNmMWQzNywgMHgyZDkwOGVkYywgMHg5M2U3OGQ5YiwKKwkweDZjZGI3YmU4LCAweGYwNzY1NTllLCAweGM1YWQyZWViLCAweGIwZjJhZGYxLCAweDBlNDRmYTg0LCAweDQ0YThiOGIxLAorCTB4ZGZhNTZhZmIsIDB4N2VhMzhkYWQsIDB4ZGFlZmU1MmYsIDB4ZTYwYjhiMjQsIDB4MWZiOWY0YWYsIDB4OTM2YmI1ZTYsCisJMHhmMTFhYWFkYywgMHg3YzFmOTM1YywgMHgzNWFjNzQwNywgMHhmZGZiNzViMSwgMHg2ODRmMGRhZiwgMHhiZjc4Y2NiYiwKKwkweGMzMjY0N2RmLCAweDY3YzVhNDNjLCAweDllNThkNGMxLCAweDdjZjEzOGFmLCAweGM1ODliZTQ0LCAweGJmZTU4YzM1LAorCTB4NTEyY2VjZDIsIDB4ZDUxNzAwMzMsIDB4YWYxNjE0ODcsIDB4NGZlMDdmYTYsIDB4MTdhNjExNTYsIDB4ZWI5ZDg0ZDUsCisJMHhmMDRjM2FhYSwgMHhhMWY1NGIxYywgMHgwMmM3M2M0MiwgMHhkNjNmZmNmYiwgMHg3MzVmZjBlMSwgMHg1NzFiYTU4ZSwKKwkweDkyMDU0ZjhjLCAweGMwOGE1OTMwLCAweDU1YmIzNGY1LCAweDliZmIxNzk3LCAweDg4N2Y0MDQ2LCAweDczODJlNzE4LAorCTB4YTk4NjYyMTgsIDB4YmZlZDA3NjYsIDB4Mjk0ZDA1NzgsIDB4NGJhNzI0M2YsIDB4ZWE1YWZiODQsIDB4ZTExMTRlYTYsCisJMHgzMjM1YTliZSwgMHg2MjYyM2ZkZiwgMHhmNmI1Y2NlNywgMHhiNDdmMzg5YSwgMHg2NGJkYjRmNCwgMHhlY2ZkYzgwNywKKwkweDM2YjlhZDViLCAweGYzODE3ZWI2LCAweDZiYmZhZDYxLCAweDYwMTEzNzA0LCAweGUwODA3NWRlLCAweDE0OWM4MGY5LAorCTB4YjNmYzAyZDIsIDB4ZTAxZTc3MTEsIDB4MTI3YjNkZWQsIDB4Mzc1YjM3ZTcsIDB4OTAxOTdmYTYsIDB4OTdhNmNjYmEsCisJMHg1N2Y3OGE1NSwgMHhmYTg0NTkxZiwgMHhkZDMwNGFlMCwgMHg2ZmYzNDk5MywgMHg3Y2IxOTdkOSwgMHgyNjQyZTk4NiwKKwkweGY2ZGJmMDg1LCAweGM2YmY5NjcyLCAweGNkMDg2MTc0LCAweGNlNWY2YmJmLCAweDQ5YzBiMGYyLCAweGY2MjNiNjA3LAorCTB4NDhmZjQyOGEsIDB4N2RlMzg3NjgsIDB4YzAxYWZiOWIsIDB4ZjE2MjY0YjcsIDB4MDUxNWU5MTcsIDB4N2RiNDUzZDcsCisJMHg0NGU5NmIyMSwgMHgxZWY4ZjAwYiwgMHhhNzg4NGRkOCwgMHhkYWZjMTZkNCwgMHgwMmVhZjEwNiwgMHgzZGZiMGFiNywKKwkweDgzN2JmMzM2LCAweGYxYWE2OWJlLCAweDcwOTliNDU1LCAweGYwMjkwM2ZlLCAweDRmY2U0M2ZmLCAweGM5YTQyZTRkLAorCTB4OGJlYzBkN2QsIDB4NmJlZThkMjUsIDB4YjRlZDFkNjAsIDB4ZjYwNmQzZGQsIDB4YWQxYmVjNjYsIDB4Mzc3ZWMwNTMsCisJMHg1Y2E3ZjNiZCwgMHgwYWZjOWZiYywgMHgzN2Q4Y2Y1NiwgMHhmNjkwOWNlOCwgMHgwNjZmZWNlNywgMHg4ZjVjOGE2ZCwKKwkweGZmY2Y2ZDNlLCAweDYyYTNiZTE0LCAweDUwNTRmZjQwLCAweGFhMGVlNDlkLCAweDQ0ZGM2Yjg3LCAweGJlNjBiMjU1LAorCTB4MzYyZjlmYWMsIDB4YjY5ZjY2MTEsIDB4ODJjZTRhZDksIDB4MTBjMGM5NWMsIDB4ZjY0NTViOGUsIDB4NmJjODRlOTIsCisJMHgyNmI0OWNmNiwgMHg5YjVmNjlmNSwgMHg4NDVhYmQ5MiwgMHgyMzI5Mzk3MSwgMHhkODExNzQ3OCwgMHg3YmIxZGZmZiwKKwkweDFiYjcwNDNkLCAweDE0YmU3M2Y3LCAweGVkOGNkN2JlLCAweGZlYzFiMTBmLCAweDE3N2ZkMDEwLCAweGYyYTdmMzQ5LAorCTB4MmY4YjE3ZjgsIDB4ODhkYzk0OTMsIDB4MDdlZjMwNzksIDB4ZWMxYTdlZmQsIDB4NjM2MDlmMzcsIDB4YmY2ODA3ZmIsCisJMHg2M2FiYjA0NCwgMHg1OGU5OGE4OCwgMHg4MTY1Njc4OCwgMHhkZjk4M2QyOCwgMHhkZThmMWE0MywgMHhkYzdmZWI0NywKKwkweDk2NDllMmNhLCAweDBmOGJhMjA2LCAweDM4YjNjNzY2LCAweDhiMDc0Y2NiLCAweDhkYzljNjBmLCAweDEwZmY4MmI3LAorCTB4YzEzODhlNzcsIDB4YTVmY2U4N2YsIDB4MjJmZWUxMjIsIDB4YWUyMzc5YzksIDB4MTEzNDFkOGYsIDB4Mzk1OWY3YTAsCisJMHg5OWY1ODRlMCwgMHg3NTI0YWJhZSwgMHhhZmFlZTkzMywgMHhhYjViY2I5MywgMHhiZDQ1NzFmNywgMHg3MzcyZTIwYSwKKwkweDdkM2ZjYzFkLCAweDdlZTA5ZjM2LCAweDRhNTNhZWU4LCAweDkzNGRkNjAwLCAweDkxMzUyYzMyLCAweGY5MmI5ZmYxLAorCTB4MGIzOTBmNzcsIDB4ZmUyMWUzMzIsIDB4NDA4ZTM3YmMsIDB4YzVmNjEzZmIsIDB4YmYwZTQwOTksIDB4MDU2Mzk2ZGUsCisJMHgzYzA0YmMzYywgMHgzMjQ4N2NhMiwgMHhmYTg2ZWYzYiwgMHg3YTUwMmU5MiwgMHhkYjM5ZjEzMywgMHg2M2E5MmYyNywKKwkweDI3N2YyODEyLCAweGUxNTc2MGRkLCAweGFkNjdhOWJlLCAweDdlZTAzNzhkLCAweDc4NGMxN2QwLCAweDhhNGJlZWJmLAorCTB4MmZmMjE0YWIsIDB4NjA5ZDU3OWQsIDB4NmNjZDlmN2YsIDB4YmNmZWMzOGMsIDB4YmNmZWMyNjAsIDB4ZjU3NWQ3MTQsCisJMHhjM2Y3NGE0YSwgMHg0YTdjNTgyMywgMHhlYzA5MTFiMiwgMHg1MDJhNjRiMiwgMHg3M2NmYTZlZiwgMHg0OTNjZDllMywKKwkweGUzY2JkM2IzLCAweDJlM2NmZTk5LCAweDIwMGYzYzEwLCAweDdmNTFmMjk5LCAweDlkM2FmZGI0LCAweGViZjcwNDVkLAorCTB4MmFkNTliZjQsIDB4NGFlMzhlMDIsIDB4NDg1MWI4YjUsIDB4ZTRjZjc4ODQsIDB4ZGI3ZTgyMTIsIDB4ZTc4Y2JiNjQsCisJMHgzMDdmNjA3MiwgMHhjMjliMWI5YywgMHgwZjk0ZWZlZCwgMHg4MTNkNzEyYSwgMHhkYzMwZTA0YSwgMHhlNzYyZDk3ZiwKKwkweDc1ZjE2OGY3LCAweDRlMzllYmM1LCAweDIyNmQyM2FlLCAweDVkZDc5MWY4LCAweDA3ODgyZTIyLCAweDhhNDk3ZjVkLAorCTB4ZTc0ZTQ3ZTksIDB4MTAyMzNlZjUsIDB4OTdiZTgxMjksIDB4MDA5NTUxN2YsIDB4ZWY0NGY5NzcsIDB4MmZhZjRkZTcsCisJMHhlMGUzMDUzYywgMHgzOWUxOGI1NCwgMHg4ZjQ4ODlmOCwgMHg0ZmY3Y2YxYiwgMHg0ZmVlMWE3NywgMHhkNmYzZTc4ZSwKKwkweGU0NzA2NGMxLCAweDFkNmQzMTNlLCAweGYyMzhiYTY4LCAweDhiNTNmNDA5LCAweDY1ZjAxNzE0LCAweDNlZmRkZGJiLAorCTB4NWJmYTdiYWMsIDB4MzhiOTcyNjUsIDB4YjYzZTMzZTIsIDB4YTVjNDZmOWYsIDB4YTFmZjVjMzgsIDB4MmUwM2I0ZjgsCisJMHhmM2FmYWVhZSwgMHhhZmJmNjk1YiwgMHgwN2VhY2ExZSwgMHhiOTVkODIxYywgMHhjOTI5OTdmMiwgMHhmMWNkZTc2MCwKKwkweGE5NjhkZWNjLCAweDk3YzAzYjg2LCAweGNiZTE4MTMzLCAweDNmNWJiYTM5LCAweGUyNjdjNTU3LCAweDAxYmU5YTdiLAorCTB4M2Q5ZWEwZWUsIDB4YWM3ZTYwNzIsIDB4ZDc4YTY1NzUsIDB4ZWRkNzgwNTUsIDB4YjNmMzgyNzYsIDB4ZTY1YmE1MWYsCisJMHhlZDY5OWU4MiwgMHhmODY3ODllYywgMHg2YWViYTYzNywgMHg3NTg3ZWU1NywgMHg2YzY3ZmYxZCwgMHhlMDM2OThiYywKKwkweGRlMzkxMjkyLCAweDM4NjRlODdmLCAweDMzNzVhYWYzLCAweGYzZmRhNjZmLCAweGJmNWM2NWRhLCAweDhiZTdlNTQ5LAorCTB4MWU5MmYxMjIsIDB4NzcwZDE3ODEsIDB4ZWYxNjc2MWQsIDB4NzUzM2YwZDEsIDB4M2MyMmJiZjcsIDB4MjExOWZhOWYsCisJMHg5ZTEyNGNjZSwgMHg5OWY4Njg4NywgMHg5YzM4NjdlMiwgMHgxMzhkODg3MiwgMHhkZGM3ZTFiZCwgMHhlNjA2OWNlNSwKKwkweDg3MzcwYTMxLCAweDI4MGE2ZTE4LCAweGI3ZjdmMDNlLCAweDExOGZjMDdhLCAweDhhZjU0ZjM3LCAweDNjZjEyZjliLAorCTB4NTNiZGFhZmMsIDB4MTg2ZWJiMmYsIDB4N2RmN2U5ZjQsIDB4YjY4OWQzMWEsIDB4OGY4MmZiZDgsIDB4NTZlZjdlNzIsCisJMHgwNmNjNmVlYSwgMHg4OTkzNzE3YiwgMHg0ODkzN2Y5ZCwgMHhlNzE0YWRjNiwgMHg3YmI0ZTNiYiwgMHgyMGIyNmJlNSwKKwkweGY2NjI1ZGJmLCAweDE5YjM3YjY3LCAweGJiNzZjZmVkLCAweGQ3NzE4M2M3LCAweGNiOWUwYjM0LCAweDBkYTc5MjI2LAorCTB4MDZiYmY1ZjYsIDB4ZGZjOGQ0NTgsIDB4YzcyZWY4ZDEsIDB4OWExY2EzNjEsIDB4ZWZmYzAyNzgsIDB4ZjNmYzk4ZDcsCisJMHgxYjgxY2E2ZSwgMHgxOTdhNDhlYywgMHg5M2I4YzM5MywgMHhlMjExMjZjYSwgMHhmZGZjOGU0MiwgMHhlMDRmYWY4MCwKKwkweGMzYzAyZDRlLCAweDI1ZWYwNTcxLCAweGEwYWUzZWFhLCAweGJlY2RmYzVkLCAweGJlMjEwYmI3LCAweDllMWZlZGE5LAorCTB4YzJlZGU3YjAsIDB4M2VmMDkxODIsIDB4ZGM2YmQ5YzMsIDB4M2M3OTZhYWUsIDB4ZDI3NjAxNGEsIDB4YzRmZDJmNzAsCisJMHhmZDI2NzlmMCwgMHg4MDI1ZjJiZCwgMHg3MmVlZWM5ZiwgMHg3M2ViN2RlMywgMHgxZDE3ODRlMCwgMHg3MzZkNmU3NywKKwkweDYwYjMwNzRkLCAweDRlN2Q2ZmJjLCAweDliMWY5ZDg4LCAweDFkM2RkNDdkLCAweDdkZDQ2NTRjLCAweGI3MGYxY2ViLAorCTB4NzE1ZGQ2OTEsIDB4ZGZmZGY0NjIsIDB4MTYzZTdjNzQsIDB4ZDdmYmYxMGYsIDB4YzFjNDBhNDMsIDB4NmI5YTk1MWIsCisJMHgyNmEyN2NkOCwgMHhhNjhmZWMwYiwgMHhmOTQ3Zjg3NywgMHgwOGUxZjhkNiwgMHhjM2ZmN2RkZCwgMHg4OGYzZjhmOCwKKwkweDM4Zjc2MjRiLCAweDRlYjgyOWI1LCAweGRmNjEyOGY4LCAweGViNzFmMjM1LCAweDM5ZjdhZTJiLCAweDBmOWM1ZWFiLAorCTB4Yjk2YzcwZjYsIDB4NTc2ZGQ3MWIsIDB4ZmU3YzQ1MzksIDB4NjRiMjEyMTMsIDB4MTI1Y2JjODEsIDB4Y2EzNDc3YWUsCisJMHg0MjEzZDRlYSwgMHgyYTQ0N2JmNywgMHhlNWE3NjExOSwgMHg4ZGM1ZmE3YiwgMHg3MGVmZjY4NSwgMHhmMDBlNGM3OCwKKwkweDQzYWVhNDJiLCAweDQ5ODRkZGYwLCAweDZlYzE2MzM5LCAweDRkYWNjN2RiLCAweGEzNGM3MTg2LCAweGI0NTVkMjliLAorCTB4ODc0ZGRlZDUsIDB4YzcyNzU3NDYsIDB4ODU4ZTFkYzksIDB4ZjY3OGM3MjYsIDB4ZTBhMWQ4MWQsIDB4N2MwYjc2YjEsCisJMHg3MWEwZTFhZiwgMHhmZjI2MzllZiwgMHhmYzgwM2MwOCwgMHgyYzIwZjFiYiwgMHgwN2M2YmM4MCwgMHhmY2I1NGYxYiwKKwkweGExMGYxZjNmLCAweDFlOWYyMDgxLCAweDA4NzEwMGYxLCAweDQzYzJiN2M3LCAweGMzNTVmMDE2LCAweGFlZDdmNTAzLAorCTB4ZmU2OGZlMDIsIDB4ZjZjMmEzNWEsIDB4MGQ3OTZhMWQsIDB4N2NmNjQ1MDcsIDB4MTBhNWNmN2MsIDB4ZjY0NDNmZGMsCisJMHg2ZDM5ZDk1OSwgMHg1N2FlMjI0ZiwgMHg2ZDY0ZWNiYywgMHgzZWQ4N2U3NCwgMHg2NDk4YmE5OCwgMHhlYmY5ODNiMiwKKwkweDhjODllZmRhLCAweDU3ZTgwOTA5LCAweGUxMDZhMThlLCAweDA2ZTNmNDBlLCAweDcxNzQzZGEyLCAweDQxNzY5MTdlLAorCTB4NzEzNzdiODAsIDB4ZjgwNjc5NmYsIDB4ZDA2NGExOTcsIDB4ZTJlNjMxOGIsIDB4ODc3ZmUwMTAsIDB4ZjgwNjRhNmQsCisJMHhjOWI2Mzk4NywgMHg1ZGFmODA1OSwgMHgwZWJkNTYyMywgMHgwMWFlZDY0MywgMHg1MTZmMmZlNSwgMHhjZDI3ZmRiYiwKKwkweDZhZjBiNWVlLCAweDc0NmZmNmI1LCAweGJkNzRmYjMwLCAweDAyMGY5ZDliLCAweDg3NDkxZGJiLCAweDJjNDFmZjY2LAorCTB4OWExMDg3NDAsIDB4ODZjYWZhNjMsIDB4MGRiOWJhZjYsIDB4NDFkMDM5ZWMsIDB4MjA1ZmJhZjksIDB4ZTQxZmUwNGQsCisJMHg1MzI5ZGM5YiwgMHgxN2ViY2ZjMSwgMHhjZWNlODA5MiwgMHg4NjBjNWZiZCwgMHhmMzcxNjUzOCwgMHhkZTgxNDdhYiwKKwkweGQ0M2Q2ZDYyLCAweDM1MGY1ZmE1LCAweGJmOWFkMWZhLCAweDM0MmJjZGEzLCAweGNmOWI0ODdmLCAweGU1MDRkZjgyLAorCTB4ZDNiOWZjZDksIDB4MjZhZGQ2Y2MsIDB4NmU3ODJjODcsIDB4ZWFmM2YxZjksIDB4YmZhZTZlNTUsIDB4MzE0N2VkMTIsCisJMHhhNDJkYzdlZiwgMHhlZWQyZTkxNSwgMHhmMzk5YjkxZCwgMHg5ZDEwZjhhMywgMHgzOTQzNjY4NywgMHgzZTUxMzcyMSwKKwkweDFkZWZjNGRjLCAweGJmYTVjOWI5LCAweGJjOTZlMTU3LCAweDY4OGVmN2Q4LCAweGJlZjZmNGY1LCAweGQ2Yjg3YzcxLAorCTB4NmRmNDZlYjAsIDB4NzYzZTQzZDMsIDB4ZmE3ZmM4Y2YsIDB4ZDI3NzNjZDgsIDB4YzEyZmQxMTAsIDB4Y2U5NzlhODAsCisJMHgzMjcwNjllZSwgMHg2MjUyMWMzZSwgMHhiOWZiNTc4ZiwgMHhiNTMyNGVmZSwgMHhlNWI5YzM2NSwgMHg4ZWZlN2JmZCwKKwkweDdiMmJlM2UzLCAweGY4MWVmZWZlLCAweDQ5NGYxMzg5LCAweDRlYjVmNjA0LCAweDAxMmUzNTNhLCAweGQyZjNlN2Q3LAorCTB4YWI1OTNkNzAsIDB4OTM2OWZiZDcsIDB4ODhlN2IwOGQsIDB4NTc3N2VkMWYsIDB4ZGM3YTUyMGUsIDB4YzE2N2QwMGEsCisJMHgxZTY3YjdmNCwgMHg3N2Q0MjlmZiwgMHgyMjQ0YjhmMSwgMHgyYTE0NGRjZiwgMHhjNzEwYTE5ZSwgMHhiZmJmZTQyZCwKKwkweGZlNjA1MDczLCAweDkwN2U1NjkyLCAweGYzYzVlZWZmLCAweDIxYjBiNzFjLCAweGM0OGZiYjQyLCAweDliZTcyMTFjLAorCTB4OWExOTNkZjgsIDB4NTkzYTZmNWMsIDB4OGVjYTRhNzQsIDB4ZmRmYzBmOTYsIDB4NWEwYmUyMzMsIDB4ZjM5OWExNWMsCisJMHgxMWZjYjQ4ZiwgMHhhNzdjYjdjZiwgMHhmYzA5NmVlOSwgMHg4OWE0ZWZmMywgMHhlZWQxMWRjNCwgMHhlMGNlOTUwYywKKwkweDJmMWNlMjIzLCAweDRhN2UwYzNiLCAweGJkM2Y3M2NiLCAweGRlMmI4ZTk5LCAweDRhZGM0NDM3LCAweGZlZGU2ZGU4LAorCTB4NWJlNDM2N2EsIDB4OGZmNzk4YzUsIDB4OWRmYmY5MTgsIDB4ZmVmMWJiZTYsIDB4MmEwOTIxOTEsIDB4ZmI1YmQzZDIsCisJMHgzOGE2YWU5MywgMHgyNzcyMGQxOSwgMHg2NWNiY2ZjYywgMHhlNTE4NzdmNywgMHhmZjllY2FmYiwgMHhkOTFiNmU0OCwKKwkweDkyN2JiZjMzLCAweGJmMGU1MWJmLCAweGViODA1MzNkLCAweGMzYzliZDRlLCAweGI0N2RkYjg4LCAweGJmZGE3ZTlmLAorCTB4OWZhN2VkMTAsIDB4ZjhhZjYzZmEsIDB4YmRmZjk4OWMsIDB4MWFmMzBkMmYsIDB4OWY3YmJkNWUsIDB4NGU3ZjA2NGUsCisJMHg2NGY0ZTljMywgMHhiYjg5OWI4NiwgMHhlYzRjOWE3ZiwgMHhmMjMyZjJkZCwgMHhmMzA3NzNlZCwgMHhkNzEwZTY2YiwKKwkweDNmZTk5YmVjLCAweDc4YWUwYTc3LCAweGQyN2UxN2I0LCAweDRhYjNmYjBhLCAweDBlNzM4ZDM4LCAweDQxZmZhMjE3LAorCTB4ZTMxMDc5ZjgsIDB4MWM0NzM2MzgsIDB4N2JkZWU3ODksIDB4YTE5YmRkZmQsIDB4NWI5ODMyZjksIDB4YmYwNTc4ZTMsCisJMHgzNmI4MDJjNywgMHg2ZjQ1NTM4ZSwgMHhiMmUwNDlkNCwgMHg5OGFiNGExNSwgMHhiYTdlZTMxZCwgMHhjZTUxOTc0NiwKKwkweGY2MDk0ODQ3LCAweDhkM2EyN2EzLCAweGFiZDIzMDM4LCAweGVmZGFlN2Y5LCAweDRjN2U1MGMwLCAweGRkZjVhMjRmLAorCTB4ZmY2M2U2YWEsIDB4Y2U2MWM2YTIsIDB4ZGZjNjllOTcsIDB4OWM5NWZhOWUsIDB4MWNkZWUzYzAsIDB4NGU0ZTE3ZmYsCisJMHhkYmQ4MGI3YiwgMHhlNTE5YmU5MywgMHhlY2Q3MmM2NiwgMHg5MDM0MjE0NywgMHhmYzFmYTk4MywgMHhhOTA5MjE5MSwKKwkweDk3ODUwZmE4LCAweGUzYTZlMjE0LCAweDNmYTgxOTBjLCAweGFmOGE0ZWZmLCAweGUzZGRiYzQwLCAweGMyN2FjZjY0LAorCTB4MTMyNWY1NWIsIDB4ZTM3NzI0ZjEsIDB4NjYzZTBlNGUsIDB4OTZlZGRjMDMsIDB4MWYxMDZjZWEsIDB4YmE1ZWNlYmQsCisJMHhkYTZmNTQwNiwgMHhmMGIzMDVhNywgMHgxMzM2ODc5ZSwgMHhmNGQ5OTA4MSwgMHgxMDJkNzNlNiwgMHgyNTFlZjA0NywKKwkweGEwYTAzZTc4LCAweGMwNTRmZjc5LCAweDU2YTVlZmU5LCAweDVlNzU0NzljLCAweDA4YjFlNDI0LCAweGJjZDgzMzNmLAorCTB4NTg3ZTA2YzYsIDB4NmY5ZDg1MzAsIDB4NzQ0ODk4M2IsIDB4MjdmNzkwZmIsIDB4OGYwNmJjMzAsIDB4MWRkOWJmOWYsCisJMHgyZjEyZmNhMywgMHgyOWRjNDk5ZiwgMHhjNzJlMzhkOSwgMHg3MGEzZmM2MywgMHgzZmZiMDliZCwgMHg0ODFkNzA0ZCwKKwkweDllNjViZjAxLCAweGNlODVmMzgwLCAweGE0MGUxM2JkLCAweGVlM2I3YTUwLCAweDMzM2I0NDRjLCAweGRkZTBmODNkLAorCTB4YzY4ODJhNGUsIDB4Y2Y4YjFlZmYsIDB4NzgwYTE2YmIsIDB4ZWFhMTQwY2YsIDB4NTk2MTdjYzIsIDB4OThkZmVlMjYsCisJMHg5OWU0OGZmMCwgMHg0MzNlNTBjNSwgMHg3NGNkZjljNiwgMHg3ODgyNTJiMSwgMHgyMTM0ZDlkNCwgMHg3YjhiZTYwNywKKwkweGY4NWFiNjg0LCAweDI5N2Y1YzFkLCAweGZkMzg4NzZiLCAweDdjZmYzMGM5LCAweDBjNzkzOGE3LCAweGFhOWM3NmZlLAorCTB4ZWZlMTg3ZTUsIDB4M2NjMzEyMDMsIDB4MGJjZWQ1NmQsIDB4N2NiNGNkZmIsIDB4ZjcwMTZjZDUsIDB4NjY3NzRlZWYsCisJMHg3ZTA0N2YxMCwgMHg3OTUzZDcwYSwgMHg2Y2I4YTU4ZSwgMHhiODAwNWZlZSwgMHgzZmE0NTk5ZSwgMHhjNGJiMzgzNywKKwkweGViOTEwMjQ2LCAweGVmMTM4MjE2LCAweGY3YzgzYjIxLCAweGZjMDk3NzY5LCAweGU3YWU3YzVlLCAweGNmYmM3MDM3LAorCTB4ZmJhYzliOTksIDB4M2YzMDk0YWUsIDB4NjQ1M2JiZDMsIDB4YjNlNDcxZjcsIDB4ZjRkNmExZGYsIDB4ODdhZTQ2ZWIsCisJMHhmMWY5ZjAzNywgMHg4ZTg2NGYzYywgMHhkMjg4NjI4ZSwgMHg1YjNmNDA4OCwgMHg2MmU1YmU0NywgMHhhNWNmMGUxYiwKKwkweGU3ODcwN2UyLCAweDFjNmVmNmQzLCAweDhhZDc5ODYxLCAweDE3MTE2Yjk1LCAweDZmMWQ2YzY5LCAweDEzODJlYzM2LAorCTB4ZGZlYTZlYzEsIDB4OWY0ZjI1YmIsIDB4OTdjN2ExOGYsIDB4M2Q5YTEzYjUsIDB4YzQ1N2JkOTgsIDB4ZjlkOWMzNzUsCisJMHg4OTAyY2Y5NCwgMHhhZWJmZDNmMiwgMHg3MjYwOThiZCwgMHhkMDc4ODAxZCwgMHg3OGRjOTdhZCwgMHhiZDk0NGU4ZiwKKwkweDFiZThhMGY4LCAweDUwZGY4YmQ5LCAweDdhYTNjYzFkLCAweDFmMDI2NGZkLCAweDQxOTEwNzM3LCAweDhiYTYzNzYwLAorCTB4MzgwYTdlZGIsIDB4YTZlM2E0ZWEsIDB4YjQ4ZTA2MzksIDB4ZWY5YjQ3NzEsIDB4MDYzZDUyMTcsIDB4NmMzMzkwZGMsCisJMHhhNWZhNjU5ZCwgMHhhNGVmZGMzNCwgMHg3NmMzZjdjZCwgMHhhZTI1ZmE4NCwgMHg2ZmQyZmUxOCwgMHhmNzc0YjIxMiwKKwkweDRhZWQ4NDdhLCAweGU3MjI1Zjg0LCAweDY0YmY3YjdlLCAweDk1NDdmNTNhLCAweDIwNmZhMDFjLCAweDdiNDU4ZmYxLAorCTB4NDJjOTcxODYsIDB4ZjEwNTE4ZDgsIDB4MTg3M2I0YzEsIDB4NzQ0YWYxZTcsIDB4ZjNlMzhhZmUsIDB4YjAyZjg4ZDMsCisJMHhiNzUyNDI3ZiwgMHgxNWZkMTg3ZSwgMHhkNjNjY2UyZCwgMHg3YTUzZjlhOSwgMHg4ZGUzODQ5YywgMHhhNTdkZDhiMywKKwkweDgxMGE0ZTFhLCAweGIzZmZhMDlmLCAweGY0ZWI4YzQ0LCAweGZkYWQxYjg2LCAweGEyMTJmMGRlLCAweDU2NGMwOGY2LAorCTB4ZmFlMTc4OGYsIDB4ZjJmMTc1ZjcsIDB4MTk3YzZkMTcsIDB4MDVmNjg2NGEsIDB4MzQzZTFhMjcsIDB4OWJjNzE4YmMsCisJMHg4M2M0MzRmZiwgMHhiYTZmMWE3YSwgMHgwZTZmMTk3YSwgMHhhZWQxOTA4YywgMHg3Y2Q3ZTZmNywgMHhlYWYzZTRlYSwKKwkweDM3YTYyNzA0LCAweDdmMWIzNTVjLCAweGQ4MmM2ODk3LCAweGY5MzdmMDExLCAweDZiOGUxNWI4LCAweDFjOWMzM2Q1LAorCTB4YzEyNDViNjgsIDB4ZWMxNzkxZmEsIDB4MWNiNzY2NDcsIDB4ZmZmMDc4YjQsIDB4ODFjNGM2MDAsIDB4MDA4MDAwZDUsCisJMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3Y2JkZmYwMCwgMHhkNTU0N2MwYiwgMHg2N2I3ZWZiOSwKKwkweDMzMjQ3OWVmLCAweDQ5OTI2NjQ5LCAweDFkODQzYzMyLCAweDA5MjEyMTA4LCAweDExYmMyMTBlLCAweDExMDg0OTM3LAorCTB4ODhhODBjYTIsIDB4MWYwMWQ2OGYsIDB4NGQwOTIwNjAsIDB4NmY1M2Q1YWQsIDB4NTI4MTIxMzMsIDB4YmQ1ODNkNmMsCisJMHhmNGY0N2JkNiwgMHg0MWVkNTgzNywgMHgwMTA4NzUwZCwgMHgyNjcwMjc4MywgMHhkMGYwOThhMCwgMHg3YWMwZjgyMCwKKwkweDQ1Mjk2OGRhLCAweDVhMTg5MjFiLCAweGY1Y2Y2YTBmLCAweGY2YjdkZjdjLCAweDgzMjY2NjRlLCAweDczZGVmN2E1LAorCTB4ZDYyZTlmODcsIDB4ZjVhZjZiNWUsIDB4NWZmOWVmYWQsIDB4NGE5YjVhZGYsIDB4NTAwYTlmYzAsIDB4OTgyMDE1YjMsCisJMHhlMWY5NTAwNiwgMHgwNjQ4NGE4NiwgMHgwMTIwM2JlOCwgMHg5NmQ0MDMxNCwgMHhmZTFiNDFjOSwgMHhiMWZkYjRiNSwKKwkweDBjZGQ0NWM3LCAweDUxZGY4OTU2LCAweGY1YzAyNjYxLCAweDk1MGI3ZTIwLCAweDA2ZTZjNTBlLCAweGJjOTVlNjU4LAorCTB4ZDY4MDE2NzIsIDB4ZTFiZmRlMmUsIDB4NjJhODI1OTIsIDB4ZjlhZjdhZmQsIDB4ZTg5YjFlZTMsIDB4NWZmZjM1ZmIsCisJMHhiODAwYzgwMywgMHgxOTdmN2Y1MSwgMHgyZmZiMGZmZCwgMHgxODYwYTRkMywgMHgzYjM2NWQ1ZiwgMHg5NzhkZmZiYSwKKwkweGE2OTEzZmNhLCAweDYyZDcyYzAyLCAweDNlNGZjMzllLCAweDIyZjJhNzkzLCAweGFjMjRiZWNjLCAweDhmYjc0NDU3LAorCTB4Y2ZiOTI2NzMsIDB4ZTMyZmYxZDksIDB4MzJkN2ZjNjEsIDB4NjVmM2M1YzAsIDB4YWZmNzUxNmYsIDB4YzhlZDc3ZTksCisJMHg1MjNkNDhmMiwgMHhhY2U4MDE2NiwgMHhkYjE5NzFiNywgMHg3ZjAxNmU1ZSwgMHg0ZDI1ODFjOCwgMHgwMDY1YzQ1MCwKKwkweDlkMGEwMTUyLCAweDU4MTk5OGI4LCAweDBkMDE2NGJmLCAweDEzNjMwOGY5LCAweDNhYjlmN2UwLCAweGRmODYxMzFkLAorCTB4MDdlMzg4M2YsIDB4OGUzMGRjNzAsIDB4MzgwMWM4MWYsIDB4ZmFlNGVmNTQsIDB4YWUxZWY1NmIsIDB4MmY4MjkzNWYsCisJMHg4NzdmZTNhNCwgMHhiOGE4YjBiZiwgMHhkZmVkYzU5ZSwgMHhkZjM4ZmM1MSwgMHg4ZjBhNGJlMiwgMHg5M2Q2OWIzYiwKKwkweDcxODMwYjRmLCAweGY3M2Y5ZWI0LCAweDBkZTNmZDE2LCAweGI2YmZkYzMwLCAweGJmOGIzM2ZkLCAweGY5ZWJmMmYwLAorCTB4YTdlN2YzNWIsIDB4Y2QzZjNjYTgsIDB4Y2YwYzE1YWIsIDB4MTgwMTQ0YmIsIDB4OWE1Y2ViODMsIDB4NjM1ZmNkMWIsCisJMHhjNmY5NTg5ZSwgMHhmZWI5NmZjYSwgMHg1NmZjYWM3ZSwgMHg5MGM3YWNjNCwgMHgzMmEyZjQwZiwgMHhmZmMzOGE4ZCwKKwkweGE2ZDAyNjRiLCAweDQzN2U1ZTVmLCAweGIzZjhiMWYyLCAweGRiMjMwNWJkLCAweDcyYzk3ZTAxLCAweDk3NGYxZTFhLAorCTB4YmUyYjc0MTcsIDB4MTk5NzQxNDIsIDB4Yjc1MmJhZjUsIDB4NDBlZmQ0MGIsIDB4YjJiOWNhMGEsIDB4NDg4OWMyMTMsCisJMHgyYmU3ZjVkOCwgMHhmNGE4NTEzZSwgMHg5NDcxZjA0YSwgMHg2YzdjMDMzZSwgMHgxZTFlNWJjOCwgMHhlNDI1ZDE3ZiwKKwkweGJjZjBkYTZiLCAweDc3NjQxNDhiLCAweDBiMWYzZDExLCAweGE4ZWIzODgxLCAweGVhMTQ3MWExLCAweDZjMzk2MDFmLAorCTB4MTU1YTYxZDksIDB4NjM1Yzc1YzIsIDB4NTQ3ZDNiODEsIDB4ZTAzMjhhMjYsIDB4OTM3ZGI4OTQsIDB4ZjZlM2M0ZDMsCisJMHg4MjY2YzVmZiwgMHgzZTVlMDFhYiwgMHg0ODAyNTk5OCwgMHgzY2VhZDc5ZiwgMHg0MjAxMTMwNiwgMHhiZmY3ZTA2NiwKKwkweGRmYjk1MjRlLCAweDI0MDgyNGU2LCAweDc0YTBmY2UwLCAweDk0NWVjOGRiLCAweGI0NWM4MDEyLCAweDI1YjQ2NTNiLAorCTB4MzY0Mzg4ZDgsIDB4ZDkxZjYxMmIsIDB4ODE1N2JmNjEsIDB4MmZkYmI0MDYsIDB4MDUwZWY3OGQsIDB4YzkxNDA3NmUsCisJMHg0YzczOGZlNiwgMHg3ZWY0NTk4ZCwgMHhmNjFlN2JiOCwgMHhhOGE0NTU5YiwgMHhjYjhiYjBkYiwgMHhkYTg3N2VhYSwKKwkweDlkNTgwZWZiLCAweGZlZmY1ZWY0LCAweDY5OTg3N2VmLCAweDE3ODBiZjljLCAweDBlZDc4NDI5LCAweGU3ZGE4MTU4LAorCTB4ZjI0MWNjM2IsIDB4ZTNlNDhiMWYsIDB4ZmRlYjA5YjIsIDB4ZWM1NjAwMDMsIDB4Yjg1NTdmM2YsIDB4ZDc2ZTUwMTQsCisJMHgxM2EzNzc0MCwgMHhjNzI0YjljYiwgMHg4ZDdiZjIzOCwgMHhmZWNlOWJkNiwgMHhlNTBhMzFjMywgMHhkMzk3NDBiNCwKKwkweDk1NmZkZDAyLCAweDhmZDk5MDFlLCAweDQxYzkyNjk0LCAweDUzZjYxYWM4LCAweDVhMzJlYWQ3LCAweDNhMjU2YzgwLAorCTB4N2FlMWI0MTYsIDB4NGJkYWZkYjEsIDB4YjRiZjVjNGEsIDB4ZTE3NzFmNDgsIDB4OTMyMTQxOWYsIDB4N2FkMTA4NWMsCisJMHhmODRkYThiYiwgMHgxNGQwMTJhMywgMHg2ZDRiMjljMCwgMHg5N2U0ZWQzMSwgMHhjZTQ1OWU5MCwgMHhjOTczZTdlOCwKKwkweGVmNWVhMjc3LCAweGY4NGJmMThlLCAweGY3YmNkMTMzLCAweDhiYmNjNTNiLCAweGY3MjZiZmU0LCAweGI2NWZmYWUwLAorCTB4NDNjZGVmNjgsIDB4OWE0ZTA3N2EsIDB4MGU3YzU5ZTEsIDB4NjczMmIxZTcsIDB4ZDBkYTVmMjQsIDB4OTczOTgzYWUsCisJMHgwN2ZkOGJiNywgMHhlOTE1MzUxMywgMHhjN2Y0OTk3OSwgMHg5YWQxZjU0MSwgMHhmZGYyZjUzYSwgMHg5NDBjZjZhNywKKwkweGI5Nzg3NzYwLCAweDEzMDI4NTc5LCAweDdiNGYxZDU4LCAweDNkZjk4NjMyLCAweGZmM2FhZjgyLCAweDIyZDlmOTYzLAorCTB4ZjkxZDkzNDEsIDB4NWJkZGIwYmMsIDB4MDQ2NWFlNDYsIDB4OGY5MTNiMWYsIDB4ODBjOTVlZjgsIDB4Mjk1Y2YzYzYsCisJMHg3OGZiMGQxZiwgMHg0NmEyNWNmOSwgMHhiOWYyZmVmYSwgMHhmZmNkMWFkMSwgMHhmYTZiZTkyYSwgMHgzZmVmZmViMCwKKwkweGZlNDg5ODNiLCAweDJhYThmOTEzLCAweDJlMDMxN2E4LCAweGQ2NTlmNzliLCAweGExZjdhMTVmLCAweDZkYzEzOTUxLAorCTB4ZjVkMTZmNTgsIDB4ODFjNGU1ZmMsIDB4ZWZjNGY5YTMsIDB4NjdkZTRkZWIsIDB4ZTM2NTFhNjksIDB4ZTQ4NTE1YzQsCisJMHg5Yzk2YjczNywgMHgwZDI0NzdjNSwgMHg3ZWQxMDdhNCwgMHg3NzA5ZDUyNCwgMHhmYjQwMTk2MCwgMHhhNDBiN2QyMSwKKwkweDE5OTNlYjAyLCAweDM2ZjM0MDQyLCAweDk1MzRmMDZhLCAweDI5YWJlNjBiLCAweDFjNDFlZmM0LCAweGUzNDFkYmIzLAorCTB4ZTdhNDI5YTksIDB4MzM4YmQ3ZjAsIDB4ZjkyMzg1N2QsIDB4MGE4ZjUyZGUsIDB4ZDZiNGYzODUsIDB4MWIyNTM0ZGIsCisJMHg5M2JkNWY2MCwgMHgxZWY1NmRlYiwgMHg1N2FkNWYyZSwgMHgyYzc0ZGNiOSwgMHg4ZTIwYzFmOSwgMHgzNDU5YWI1MywKKwkweDdkZjg2ZDI1LCAweDhmYjBhYTU3LCAweDg4NjdlODA1LCAweDA1MjAwNWFlLCAweDBiNzNhODAzLCAweDVlZjVkNjFlLAorCTB4MjQ5YjgyOTEsIDB4MjdhZTEzOTIsIDB4OTcyODlmODIsIDB4MDhkYzllYzEsIDB4NGQyOTM2ZmUsIDB4MzViMjY2OTMsCisJMHhmMjhiYmNiMCwgMHgwNjNlZmM0ZCwgMHg1OWYzZTBmZiwgMHhkY2EzZmIyMywgMHg0YmFhZWFhMywgMHhiYWU2N2U2MiwKKwkweDk2MTcyNGI0LCAweDUyZjg3NDNmLCAweDZlOTE2Y2E4LCAweGI4MDE3YzM5LCAweDViZjUxMmVlLCAweGZlMzgwYmU1LAorCTB4Nzg0MmYwZjQsIDB4NzRjM2UzMTAsIDB4MTVmMTBjMTQsIDB4ZmQxM2I3N2YsIDB4NDAyYzNhMzMsIDB4Y2E4MGMxZjIsCisJMHhkM2E0NTk3NiwgMHg0OTJlN2RhMywgMHgzMjNlNzBlNywgMHhlMGM3YWY5ZCwgMHgzMGNhZDY3YiwgMHhlODNlZDFlOSwKKwkweDE3YmUyMzQ5LCAweGI0NzY3Y2RiLCAweGM4NDNhNDI4LCAweGY2NmU5MzU1LCAweDljZGUzODQ4LCAweDI2NTc4Yjc0LAorCTB4YTZmYTI2ZDIsIDB4NzVmZTQ0NmYsIDB4ZDg4NGUzYTQsIDB4NjMyM2EzYmYsIDB4YTZmNjhhYWMsIDB4NGZiYzZmMjksCisJMHgxY2Q5YWQ3NiwgMHhjYzJiODE2MSwgMHg3MTExM2RiZCwgMHg3MTllMTMzYywgMHg5ZjIyYmM1MiwgMHhiZGYyMzVmNiwKKwkweDAxYzk3N2YzLCAweDczODg2YmY2LCAweDllNzU4ZmM4LCAweDcxODZmNjRhLCAweGQ5MmU2YjllLCAweDdmZDI1NmJjLAorCTB4ZjVlZDExN2EsIDB4NTRmMjYyNjAsIDB4NWRkMGNmZjIsIDB4ZDZiOGViYzYsIDB4NmY5MWQ2MjYsIDB4ZDhiYjE3ZjYsCisJMHg5ZjBmODU5ZiwgMHg2ZGZlZjdjMCwgMHhlOWZjODAxMCwgMHhjYTFmZGQzNSwgMHg5YTk0ZjQ4MCwgMHg5MDdiMzJmMiwKKwkweGU0ZDJjM2NlLCAweGZjOWYyYTE0LCAweDk3MDE3MjVkLCAweDg5N2I5MmE3LCAweDc2NGQwNzNmLCAweGE3N2RlNjk1LAorCTB4NDZjZTJkNWUsIDB4NzJkZWQxN2QsIDB4ZDYxZDAwOTgsIDB4MGExY2I3ODIsIDB4YTFlYTI3OTUsIDB4ZTVmNTFiMzgsCisJMHg5NzFiN2FhZCwgMHg1YzlkZWIyNywgMHg3MGY3YWE5ZSwgMHg0OWRiMTg3OSwgMHg3NmM3NWU5ZiwgMHhiMDM3YjdkMiwKKwkweGQ4NWRlYTlkLCAweDFjMzFlNTRlLCAweGRiYTJjYTk3LCAweDk2YmM3ODkzLCAweGI0MmM5MmRiLCAweGQwYzk4MzhlLAorCTB4ZmE0ZmNjNmMsIDB4YjcwYzRlMTQsIDB4M2ZlMDE3ODIsIDB4YWI2YWZiMWUsIDB4OTc4YzJhZWQsIDB4MzRhMTdmNTYsCisJMHhiM2Y0ZjkwZCwgMHhhYzE0MmFhZiwgMHhlZTNjNWIxZiwgMHhiYjYwYmZhMSwgMHgxZmE2NjdmOSwgMHg5YmRlOTBkYiwKKwkweDhmNWEzOTRlLCAweGFhOWVkZDYzLCAweGZhNDFkOGZjLCAweDlkMTEyYzc5LCAweGI5YjU5OTIzLCAweGE2M2E0MzRiLAorCTB4Y2QxYzZmOTMsIDB4MzY2MGQ3NmMsIDB4N2FmNGQzZDYsIDB4ZDk1ZDdjYzAsIDB4YTU5NTgwN2MsIDB4NDJlMGY5M2QsCisJMHhhZjU5NzEyNSwgMHg1NzdmMjFiMywgMHhhM2RmZmRkYSwgMHhhYmIwMjViYSwgMHhhYTJhZWNhMiwgMHg3YjI0ODg2MywKKwkweGI2NDFjYzk3LCAweDdiOTJiMWY3LCAweDk1YmJjNjA1LCAweDEyN2ZmZjBlLCAweGQxN2IwZGJmLCAweDkxYTQzZmE0LAorCTB4NDlhOTk4N2YsIDB4YmNiMzcyZTAsIDB4ZTFhNDkzODMsIDB4OTViZjQ2ZTcsIDB4NDlmZjQ1OGUsIDB4MjVkZWJhZmEsCisJMHg5OGNkN2RiMywgMHhjNzQxNjkyZiwgMHhmYTM1ZmI0OCwgMHg5NmFiMzhjZCwgMHg5ZTY2ZmM5MSwgMHg3MmEyNmYyZiwKKwkweGViOGI4NTU5LCAweDlhYjM1NWJlLCAweDFjY2JmZWM4LCAweDk0YmY3Yjk3LCAweDY1ZDA3ZmRmLCAweDUxMmRiZDY2LAorCTB4Mzg5YzVmYjAsIDB4OGU5YmY0NjgsIDB4N2JiODQ2NGEsIDB4ZjgzMTJiYTAsIDB4NjlmNWU5MmMsIDB4ZDYxMjYzN2YsCisJMHg4YWIyNzkxNywgMHgwMzM3ZGQ2NCwgMHhiNjNiNWRkNywgMHhlYmU1N2I1MSwgMHhkZTU3NmNhZCwgMHhmMmUxMmYyNCwKKwkweDY5OTBhODk5LCAweDIxZDBiZWQ4LCAweDJhNjRjMzc5LCAweDRhNmEzZmYzLCAweGU0YTc3NmEzLCAweGQ0MmRiNjI1LAorCTB4YTYyODlkYTYsIDB4YmJkOTZjZjYsIDB4ZDVhN2VhOTAsIDB4YTc1MTBhMzIsIDB4MmVmMzg1OTQsIDB4YjljNWJmNjAsCisJMHhiZTFiNWUyOSwgMHhkMGZjMmE3NywgMHg4NWRmZDI0NSwgMHgwNGRlNDliOSwgMHhmMDRhZjNmMiwgMHg3YmFhMWFlOSwKKwkweDk1MDZkZWFkLCAweDY5NThmMWQ2LCAweDRhYTM4ZDMyLCAweDViZDYxMzVlLCAweDFmZmQyODZlLCAweDJmODk0NzQ0LAorCTB4ZGE4OTI0MDUsIDB4ZDdlMTBhNWQsIDB4YzNmNzdmMjcsIDB4NmJmNjI3MzIsIDB4ZDkwMTI3MTksIDB4ZGU3MGE5Y2YsCisJMHg4NWZlODg5ZiwgMHgwMjZhODk5ZCwgMHhiMzhiNjlmOSwgMHhiMTZiZGU4YywgMHg1YzRkY2U0OCwgMHhmZjUyOTVmNywKKwkweDdkNTk4ZTQwLCAweDdlM2RjNzFlLCAweDQxZTM5ZDliLCAweDhjMDU1YmU1LCAweDM2ZGY4ZTgzLCAweGU1NDJlMzg2LAorCTB4YTg0YmYzNWIsIDB4NzgxMjZlM2MsIDB4Y2FhZGYyYmQsIDB4NDEzNzZlMGEsIDB4ZTU0YTljOTgsIDB4ZjdlMmRmZWQsCisJMHhiMGZlOTdiNiwgMHgxZmUzOGRjYywgMHhkZjYyZWYxYiwgMHg1NjJhNzI4MiwgMHhmNjI0ZmMyMiwgMHhiZmRlODkwNywKKwkweDc3ZmI5YWJkLCAweDlkMGY5OTQ4LCAweDBiMTdmZWM1LCAweDM4YWM4YTUyLCAweDIxM2JiOTdmLCAweDU4YzU3ZmFhLAorCTB4NDk3ZDU0NTcsIDB4MjU2MmE4ZjYsIDB4MTY1NjRmYzIsIDB4NmZkNTQ1NjQsIDB4YjM4YTk2MjgsIDB4ZTZmYmZhMjMsCisJMHg1N2Q1NDQyNywgMHhiMzhhYjk5NCwgMHg1NGRmZmEyMywgMHhiZWFhMmEzOSwgMHhhOGFjYTZmMiwgMHgxY2QzNDJmYSwKKwkweDYxZWEzZmUxLCAweGYzYjA5OTdlLCAweDIwZDk2NWY5LCAweGE5ZmM4OThjLCAweDAzN2RmNDUzLCAweDNiMjZlZmRiLAorCTB4YTlmODEyZWYsIDB4MDlmODg1YzgsIDB4NTVkNjUyZTUsIDB4ZDhiOTcxY2MsIDB4MDBhZmZiYWUsIDB4OTI2NjdiNzQsCisJMHgyZWJmMTdmZiwgMHg4M2RlOGYxYywgMHg0OTk5ZmUyMCwgMHgxNmZjNDg3OCwgMHgyMDFlMjM3NiwgMHhkYzYwYTQ3YywKKwkweGNjYTdhMDhlLCAweDJiYzcxZDExLCAweGZmMjdjZDQwLCAweDg0YjlkMTViLCAweDY3Yjk1NGYxLCAweDMxOWExOTc5LAorCTB4YmRmYTMxZjIsIDB4ODE2MWY5MGEsIDB4MmVlODYyNDMsIDB4YTVjNzMyZWEsIDB4ZjQ2YzYyYjcsIDB4YWJhZTA2ZmIsCisJMHgzMTZiZTlkMCwgMHgwOTUyOWJmOSwgMHg2ZWI0MDU4YiwgMHg3YWM2MzVjMiwgMHhiNzJlM2EwYywgMHg4ZWY5MGE5ZSwKKwkweGRmZmYxNDMyLCAweGZkMmM1NzVjLCAweDdmNzkxYjAwLCAweGEwZDc0YjExLCAweDg4ODFjNzRiLCAweDc2MDcxOGE3LAorCTB4YzQzZTMyYTYsIDB4M2UxZTNiOWYsIDB4MjU0ZjcwMzAsIDB4YTQ1NzM3ZmEsIDB4ZWU0ODczN2YsIDB4Zjc5Nzg1ZTUsCisJMHg5N2I4YzY2ZiwgMHhiOGM2N2JjMywgMHgyY2QwZmJjNiwgMHhmYmM2ZmNmMywgMHgyOTU1Y2Y0MywgMHhkODlkZjNmZSwKKwkweDczY2UyOTNmLCAweGY5ZmYxNGI3LCAweDE3ZmRkMTczLCAweDAzYTM2YTI4LCAweDQ4MjhmOGVkLCAweGZiZjEwMGRlLAorCTB4MjQxMGFhYjgsIDB4MzVhZDNkMmIsIDB4NDNlOGI5NTEsIDB4NzQ3ODQyYmYsIDB4MTM0MGQ5ZjEsIDB4ODM3YWYzOTUsCisJMHhmZWI4YWRjNywgMHg5NTY1NzJlYiwgMHgxZTA2MGRmMiwgMHg4Y2Q3NWQ4YSwgMHgzYTRmYjE1NCwgMHhhYmI1NDk3YSwKKwkweDUwMTJkZWQ4LCAweDY4YmZiNGVkLCAweGQzYjU1ODc5LCAweDgzNDVhYTNlLCAweDZhMmZkYTBhLCAweDY5MWI0ZDEzLAorCTB4NjNlNWExYmYsIDB4NTQ5Y2Y1ODksIDB4NTJmM2U3ZTEsIDB4Y2EzMThlMDUsIDB4NWU3ZjY1NjcsIDB4YjZkNTk2MmEsCisJMHg4YjA5NDc5ZSwgMHg2MDMxN2NkNCwgMHg5NDcwMzAyMSwgMHg0OGMxNWU3MCwgMHgwOTU0Nzc5YywgMHhhM2JlNjgzYSwKKwkweGJlMWQwNzBmLCAweGE1N2UzZjA4LCAweDI5MTQ2ZjM4LCAweGE3ZTkzYTViLCAweDkxZmE0NWE0LCAweDE2ODI1YjUyLAorCTB4MzkxNjM3ZTksIDB4YWZmNTUxNWQsIDB4YzdkOGFhOWMsIDB4YmQ0NTQ2N2IsIDB4MTU5YTlkNzcsIDB4NmJmMTBmZDUsCisJMHg0NmEwZTEyZSwgMHhlNDJhZTQwYiwgMHg1ZTg5NGQ0NywgMHg3Y2IxNzdjMiwgMHhmZDdkMTdmYywgMHhlMDkzODc1ZSwKKwkweGFhZGQ5ODEzLCAweDk3MTM4ZmVjLCAweDdmODJhNWJjLCAweGE0NTdjZmIxLCAweDZmZWE3ZDhhLCAweDZlNTgzZDY4LAorCTB4MzVmNDE1NGYsIDB4ZTIwMTNlYzksIDB4M2U5MzM3MTAsIDB4NGY3MWQ2YzQsIDB4YzNjNjhhYmEsIDB4NzdhNDNkOTEsCisJMHgyMmU5YmI1ZSwgMHg0ZWY4NmY0MiwgMHgyOWQ3ZDVlYSwgMHhlOWRlY2ZhOCwgMHhjNDRlZWZhNiwgMHg4YmE5MjNmYSwKKwkweDY5OWU3ZDQ0LCAweGZmYWMwNGNmLCAweGQ0NWNiNTM0LCAweDM3NGQzNmFmLCAweDA1N2UwMTdiLCAweGMzMmJhZjhiLAorCTB4ZTdkYmJhN2EsIDB4ZmI3OWM1NGYsIDB4MTJhZDhlY2QsIDB4MjRjNTE5ZTIsIDB4Nzg3YjkxNDEsIDB4MDU4OGZiZmYsCisJMHgxNjBhMjllMywgMHgyMTczNGM5NSwgMHhkOGFiNzZhZCwgMHhhMDI0ZDcyZiwgMHgyNWZlYTNmZiwgMHhhYWZjNGE5YSwKKwkweGRjZTQzMDQ5LCAweDFkNzE0MTkzLCAweDkxMzRjZWVlLCAweDZmZjYzMGJmLCAweDg3YmUwYjc2LCAweGZjZDhlN2VmLAorCTB4YzI1ZjQyYjUsIDB4YTVmYTJhYzksIDB4Y2EyZmY3ZmIsIDB4OWVkOGJkMjQsIDB4ZTdmNWU0ZWEsIDB4MjFlNzk5ZWYsCisJMHg3ZDc0ODU3ZiwgMHg3ZmZkZmE5NywgMHgzYzUzNmJhNCwgMHg2MmNjOWFiYSwgMHhmYzk2ZGU5ZSwgMHhmOWJiOGE1MiwKKwkweGQyMWM1MWUzLCAweGJiNzBiY2IwLCAweDQyMTNjZmNmLCAweGNiOGMyYmE4LCAweGY1ODQ4ZjM1LCAweDRiYzU5NzQ2LAorCTB4OTBmYjdkMzgsIDB4NmNhY2FmN2MsIDB4YjIxM2YzZDQsIDB4OWM4ZGU4NWQsIDB4MWJiOGRhNjIsIDB4ZmFlYjlmY2IsCisJMHgzYmNkMTRmMiwgMHgxODE5ZTY4MywgMHgwMWY1MWNiNywgMHg1NmUzMDM5YywgMHhlOTNhOGExNCwgMHgwZDE3MmM4MywKKwkweGY4MWVkZTEwLCAweGY3OTc5MjU2LCAweDdlMDc2M2M3LCAweGJmYWMwM2ZiLCAweDk3YmU0Nzc3LCAweDg5MDdmNDcwLAorCTB4ODJhYjNmODIsIDB4YjA3YjFhMTMsIDB4YmMxYWNkM2UsIDB4M2U3NDhjMmEsIDB4OTY3ZmU2OTQsIDB4NmIzNmUwZjQsCisJMHg5YmViMTI3MCwgMHg4ZDEyNjM2MywgMHhmYmMwNjkyZiwgMHg4NzdmNjMxMCwgMHgzMmQ1MzhmYiwgMHgxZmVlMjQ3MSwKKwkweDg4ZDgyZjM5LCAweDExY2NiN2NmLCAweDQ1ZTYzNjdjLCAweGVlMjhkYTllLCAweDNjNWIzN2JjLCAweGY5YzBlODM3LAorCTB4MDZmZjg4NWIsIDB4YzA3NDQzM2QsIDB4MDNjNzI3NTgsIDB4NDVhNDc5MTAsIDB4NjFlNDQzYjIsIDB4YmNlMjYwZmYsCisJMHgxZjE5MmQ0OSwgMHgzNTljZjdkNiwgMHhjZmFlYmVmMSwgMHhlNjgwNTdkOCwgMHg5YjkzM2Q1OCwgMHgyNzM5OWU3OCwKKwkweDZjNGNjOTM2LCAweGQ0Y2NmZjAwLCAweGI2YWY0ODU5LCAweGZhN2RlN2FkLCAweDdkZThlZThjLCAweDdmNGVhY2ZhLAorCTB4OWJkZjAzYTksIDB4N2NmYzdlZjUsIDB4ZGM3ZDNjYzgsIDB4Mjk5NDEwZDksIDB4ODllOWNmNWUsIDB4ZGY0ZjM3ZWUsCisJMHgxZjNiY2ZhNywgMHg1NGNkZmNmZCwgMHg4NjhkYmUzZCwgMHg4ZTc5OTFkMSwgMHgzM2ZmN2QzYSwgMHgwYTQyN2M3OCwKKwkweDNhZjkyOWU5LCAweDUxNmVmOTE5LCAweDNhOWQ5ODY1LCAweGViNWEzN2VjLCAweGY5MGU1ZmIxLCAweDg1OTcxYjQ3LAorCTB4MTE3NzlkYTcsIDB4YThmNTZkZmQsIDB4OTNmMjE2ZDAsIDB4N2IwZDJlMWUsIDB4NzcwZDNjMmEsIDB4Nzk4OGQ0YzIsCisJMHhmODM3YmQ3NCwgMHhlMGJlZjgzOCwgMHhkYzllYjRlMywgMHhiYWM3Y2Y5ZiwgMHg0MTBjZDNiOSwgMHg3MzlkNzg3NSwKKwkweDgyMGQzZTc1LCAweGQzYTBmM2UwLCAweGQ5OWU3Y2MyLCAweDYxZTljYmY1LCAweDk4ZjU2NDdjLCAweDVmNTg4ZDQwLAorCTB4NmEwODlhODIsIDB4ZTdiNTNmODQsIDB4NjVkNTQ2YTYsIDB4Y2UzYTNlNDMsIDB4OWY4ZmFlOTgsIDB4MzUxZDFkZTQsCisJMHgwYzM3ODE4ZSwgMHg1YTlhYmRmOSwgMHg2NDM4NDlkZSwgMHhlMzFkNjNiYSwgMHgxM2Q5OTQ4ZSwgMHgzZTJkYzZhMiwKKwkweDY0MjcyYjFlLCAweDI0NzZlMTFjLCAweGQ3MDg5ZmYyLCAweDcwYTI1NjlmLCAweDgwNzcyY2M2LCAweDNmYjMwMDM4LAorCTB4Yzk3MDYyNTQsIDB4NjhlYzk5NzYsIDB4ZTdlOGQ5ZWUsIDB4YzhjYmI0ZTYsIDB4ODRmYzcyZWQsIDB4ZWY5ZjNmYTksCisJMHhlOWY5ZmJmZSwgMHg5OWY5YTJkMiwgMHhjZmNkMTE1NiwgMHgzZjM0NWY3NCwgMHhmMzQ1NTczMywgMHg5YTNmOTQ2ZCwKKwkweDRkZDY2MzJmLCAweDZhYmY2YTg5LCAweDdkNTQ1MTYzLCAweGEzNzM4M2ZjLCAweDAwNjE2N2ZhLCAweGRjNGZhYzhjLAorCTB4ZmZhYTI0YmEsIDB4YTIyYmVkYTQsIDB4YmE5ZjkzZWEsIDB4NWU3ZmFhMmQsIDB4N2I1NDRkNzAsIDB4MmJhYWNlZmUsCisJMHhhODYxN2Y5MiwgMHhiMTFmYWEyZSwgMHhmMjBkZjRkNywgMHgxZmVkYmFiZiwgMHhlZmY5ZTZhMiwgMHgzNGEyZmY5NiwKKwkweGNiYWYyZjNkLCAweDQzOGU5OTdmLCAweGM3ZmExYTVjLCAweDQ1MzhlMWEyLCAweDkzZjIxNWU5LCAweGJlMzdmNmFlLAorCTB4YTA0YmZjYTAsIDB4NTNiY2U1NDQsIDB4MWI3ODA5NjAsIDB4ZDkwOWVkYjEsIDB4MWI1ZjkxMjcsIDB4YTEzNmFjODMsCisJMHhjMTMyNjhkZiwgMHg4ZmY3ZjIzYSwgMHg4NzljNGM5YSwgMHgyYWJjZWMzNCwgMHhhYThiZTA0ZCwgMHg5ZmY3ZTEzNCwKKwkweGY4YTY5YjQ2LCAweGVjY2ZmMDY2LCAweDc4NDQ5ZWRlLCAweGEwOTkzNjQzLCAweGUyOWFlMjliLCAweGM2NzFiZjY1LAorCTB4NzE2YmUxMDEsIDB4NzAzNDc5M2UsIDB4NzkzNGFiNWUsIDB4YTg5OWIyZjYsIDB4MzI5YmYyODcsIDB4ZDFlNTFmZWYsCisJMHg3ZDcxNTA3ZSwgMHgzZjFmYzc4ZCwgMHg4YjlmZjk0MSwgMHhmYTRhOWIwZSwgMHgwM2ZhYTcyYSwgMHg3ZDcwYjcxNCwKKwkweDI0NjFlN2ExLCAweDNlYWY3OTVlLCAweDQ5ZjY4OTNjLCAweDY3OTU3ZDQ2LCAweGJmZWE2NmUzLCAweDkzODU4ZWVhLAorCTB4ZjQzYWZmNjgsIDB4NDk4ZThlZmMsIDB4ODg3MjExNjUsIDB4Mzg4YWRmNWMsIDB4Njk3YmU4ZjgsIDB4YzQ2NzNmMjIsCisJMHg2YWFjZGI4NywgMHg2YmNhMGY2MywgMHgzZmZjMmM5YSwgMHhhNWVmODVjNiwgMHg5MDNmZmFlMSwgMHg5YzBiMzYxZSwKKwkweGJhZDMzMDE1LCAweGRlNzI0ZTMxLCAweGJhODA4NWRmLCAweGUxOTRjYjBlLCAweDhkN2VhNDc4LCAweDg0YzFmNTRhLAorCTB4MjZmOWRjNjgsIDB4MDhmYjQ0MTEsIDB4ZmZjNzJhNWIsIDB4YmI3ZjBkNWIsIDB4MzZmOThmMmUsIDB4M2ZlZTg4ZTgsCisJMHhjMTQ0Zjc3OCwgMHhkNzIzNmZjZiwgMHgyYzY3ZGY5MCwgMHhkZDA2MWQ2MiwgMHhmYzNmNzVlNywgMHg3Yjg3ZWVhOSwKKwkweGU0NDZmZmM5LCAweDc4ZWRkNzliLCAweGY1ZjA4OTNjLCAweGE3ODE1Yzk5LCAweGU4Y2ZlNzhkLCAweDRkMjY3ZDcyLAorCTB4M2JmNWU5ZTAsIDB4Nzk5MTljMTMsIDB4MmI5MGVhYzcsIDB4MzZkYjVlYWEsIDB4NDIzNjc5Y2EsIDB4ZWIxYmQ3MGYsCisJMHhhZDBhNGJmMCwgMHgzZjZlODM2MywgMHhjOTNkOWRkNSwgMHhmMWUzMDFiNywgMHhkYzcwZDNhNywgMHhiZjE3MWQ5YSwKKwkweDM3ZGU4ZmJkLCAweDM4ODg2NDBkLCAweDZlZjllMDFhLCAweGQ3MTgwZjc5LCAweDQ0MTVmMmRmLCAweGQyOTdkMmUxLAorCTB4MjVlNTdlNDQsIDB4OTVjYjBiYTIsIDB4ZGY1MTM4NTgsIDB4Nzc2YzYyNTYsIDB4ZmNjNmY5NTEsIDB4N2MzYmIyNzIsCisJMHhiZWIwOTYxZSwgMHg4NGNjMTNhYywgMHhiM2ZiOTZkMywgMHg1M2Y0YzRjYywgMHgyZjY3N2RlMCwgMHg5YTVmNmQyZSwKKwkweDA0ZGNmM2NhLCAweGM1YzUzMzNlLCAweDlkNWRiZjc3LCAweGM2ODZmZDQ0LCAweDQzMTljNjMzLCAweDJiZDQ1OWI5LAorCTB4NDE5Y2MwNTcsIDB4MjQ2YjlhZjksIDB4OWYzODBkYzYsIDB4ZWVmYjllOGQsIDB4ZTI5OWIzMTgsIDB4YmJkZjMxYWYsCisJMHgwZWYwYmZlMCwgMHhmMDBhYzVlYSwgMHhmOGM2YjhmMiwgMHg3ZTUxYTkwMCwgMHg5MGNiMDNmOCwgMHhiZjI0ZWQxYywKKwkweDk4NTMyZWJhLCAweDY3NzUzOWYyLCAweGQxZmU3Y2FjLCAweGViZjAzMGRmLCAweGRmY2U5MDA3LCAweDU3YjE3ZDU1LAorCTB4YmI3ZmJhNDIsIDB4ZmI1N2UwN2EsIDB4NGZhZGY5ZjAsIDB4YjVjNWRmYTEsIDB4ODdmZGRiNjYsIDB4YzNjZTIyZDMsCisJMHg5MTdkZGNjZSwgMHhjOGYxMGNlZCwgMHgzMzkyNGZmMywgMHgyNWVhYzk3YSwgMHhlYWEwZjhmYiwgMHhiYzQ4OWNhNSwKKwkweDYxNmQyMjdmLCAweGIzMDdiZDI3LCAweDQ3OWVlMmQzLCAweGFiMmJlZWM0LCAweDZlZDkzZjQ4LCAweDg2OTljNjU1LAorCTB4ZWJhN2RlNWUsIDB4OTMwYmRkNjUsIDB4ZDI1ZDc5ZjksIDB4ZmQ0NDdhZDAsIDB4NTdmMzk5NzksIDB4YmNhYzA3NzUsCisJMHhkNzQ3N2ZiZiwgMHhiZjE3YWE4NywgMHg5Zjk5MTk5OCwgMHg1NGJkNDE2YiwgMHg3Mjc0YTg3MywgMHgyYTljZTc0OSwKKwkweGYxY2Y2NmYyLCAweDZmZDRhOWMxLCAweDIxZWZlY2EzLCAweGU5NzgzOTNkLCAweGVmYWE2NGUzLCAweDVlNGJmMzc5LAorCTB4NjU3NGRjMGYsIDB4ZjMyM2Y3ZjQsIDB4OWI1Y2Y5MjIsIDB4ZjkyZWYwMzQsIDB4NTY3ZGVhOTMsIDB4YTU1MGYyOTUsCisJMHhkZDhlZjJmYiwgMHg0ZTlhZjU4ZSwgMHg5ZWI4M2JmNCwgMHgyMzllYWUwYiwgMHg2YTdlZDM0ZiwgMHg5Nzk0MDRiZiwKKwkweGIwMjcwOWFhLCAweDk1NjlhZjczLCAweGFhYzc5NDgyLCAweDY1YmRkYjZhLCAweDlhYWJkNjBjLCAweGJhOTMxNzk3LAorCTB4M2YwYjI2ZDYsIDB4MDUyMmQzNTYsIDB4YTdmMDNjNjksIDB4NzQ4YTdmMzEsIDB4MzU3ZDI4ZGIsIDB4YjAwYjFmZWYsCisJMHgxOGE4ZWZiZCwgMHg3ODdkNWNmZiwgMHg0ZmY0NTllYSwgMHg5ZDlmMmQ3ZCwgMHhiNDM2M2EyMywgMHg3NjNmMzk1OSwKKwkweDE5NmMyOTJlLCAweGQ4NWVmMzgzLCAweGVhMDI4NTJkLCAweGI5ZjZkZGIwLCAweDVkNmEzZWM0LCAweGNkMGIzMWU4LAorCTB4ZTViOWVlYmIsIDB4ZmIwZjA0ZDksIDB4OTBiNDlkZjYsIDB4ZmFkNzVjN2YsIDB4YmNmZWI5NTgsIDB4MjBmYjg0NTgsCisJMHg5ZGZhYzVkYiwgMHhmMzIyOTMxZCwgMHhmYzIxZjc0OSwgMHg4MWY4Yzg4MywgMHhmNzA4MDVmNCwgMHgwOWUzOTA4MiwKKwkweGRhYWIzZTVkLCAweGJiMTIzNjI3LCAweDdkZWRhZmQwLCAweGU2YmY2MjVhLCAweDNiZGY5Mzc0LCAweGZmZGZlYmI4LAorCTB4ZmZkZGU2OTUsIDB4ZmY5ODkzMmYsIDB4N2ZjNjU3YzUsIDB4NGYxODA1ZjAsIDB4YzBmM2U4ZDQsIDB4ZGExNjUzZjksCisJMHg5YWI0ZDYxZiwgMHgxNzNiYzVjZiwgMHg3N2RiYmVmYSwgMHhmMGM2N2I5NSwgMHg1NzE2MzZmZSwgMHgzODgwYjE2ZiwKKwkweGMxMDA5OWI3LCAweDM4MWUyOWU3LCAweDkxYWIyYzA2LCAweDA3NTExZjllLCAweDBlNzE0N2E0LCAweGRkNjBkNjU4LAorCTB4NzE0Njc2NDYsIDB4YzYwOGUzYzIsIDB4YjlkNzE3ZGIsIDB4ZjcwZjllMTUsIDB4OWRlMzFiMDgsIDB4ZWRlYWQ2NTcsCisJMHg4NThmNmFhNSwgMHg5ZTM1NzBmMiwgMHg3NWU5MGI1ZSwgMHg3MTEzZjg0ZCwgMHg1MWY2ZGY1ZSwgMHhiZjY3MTZiOSwKKwkweDdlMTZlZDVjLCAweGMzMDNkMGQzLCAweGE3ZDJlYmRlLCAweDg3OTg1ZGIwLCAweGM2Yzg2MGUyLCAweDY2Yjg1Zjc2LAorCTB4ZGQ1M2UyODAsIDB4ZGEwZWQ0N2UsIDB4MDNmY2I4MTcsIDB4NmY2MDc3NDQsIDB4MmJlYjRhODIsIDB4Y2NjOWY3ZGQsCisJMHhmZTc5ODg5ZSwgMHg1MTg3ZGJhNCwgMHhhM2Y5NzlhZiwgMHhlN2UyNjZhOSwgMHgyYWE2OGY5ZSwgMHhmYmNmYzM0OSwKKwkweGUyZWIxYzMyLCAweGRkYWE1NWU1LCAweDRlNmY0ZTIyLCAweGI2OGY5ZGY2LCAweDE4NmYwNDgzLCAweGI3NjlhZGU3LAorCTB4ZGEwN2Y5ZjMsIDB4ZTI4ZTk2YzEsIDB4NzViODNiNDgsIDB4ZjNkMjBlZGQsIDB4MTY4YmQ5NzYsIDB4Y2I2ZDM1MDEsCisJMHgzZmRjMGRmZCwgMHg5MWUyNGJjOSwgMHg0ODA2MTZkYiwgMHg4ZmE3NjUwZiwgMHg4YWZlMTNmNSwgMHhjZmQ0Y2RmMywKKwkweGFlNTIyNjdkLCAweGU5MWI3ZmRiLCAweDRmMDhlMjkxLCAweGQ0NmJjYzhhLCAweGQxN2U3YTk4LCAweGI3NWM5MTIxLAorCTB4YWY5YTI2NmIsIDB4Yzk2ZmQ4MDgsIDB4ZWYwZjVmMGUsIDB4NTQzMzhhOWYsIDB4OWUxZWM3ZGEsIDB4YTdjNDBlNTEsCisJMHgzODkwMWU5ZiwgMHhmNTRlNmI1ZiwgMHhmOTIyY2Q2ZiwgMHhiZmI5OTUxZSwgMHgwMTBiZjBlNSwgMHg5YmVlOTczYSwKKwkweDlmNDRjNTA2LCAweDRlOWZkZWIxLCAweGUzOGM4MzBiLCAweDJmMDQyZTZjLCAweGZmNzliYjRkLCAweGRmZDIxZTJkLAorCTB4NjExZmE2OWYsIDB4ODZmNzYxN2MsIDB4MjM0YWZjODAsIDB4ZTdjYTA2ZTIsIDB4NjE0MjBiZDgsIDB4ZDcyMTI3MWEsCisJMHgzY2UzMmM1NywgMHhmMzI3NmU3OSwgMHg3YmY1NjJjYiwgMHg0ZDk0MWYyOSwgMHg0ZDg3NWM3NSwgMHhmYTIzYWRmMSwKKwkweGIxNDRlZTZjLCAweDY1N2IxZTlmLCAweGIyM2ViYTc5LCAweDFiY2U4NTdmLCAweGU5MmY5Y2ZkLCAweGVkM2QwYjMzLAorCTB4NWYxODBhYmIsIDB4Mzk5ZDFkZjMsIDB4YmUwOWE0ZDQsIDB4NmIyZTc2YzEsIDB4NDZhNjNhZGIsIDB4ZjA0NGRiYzYsCisJMHhkZjc5ZThkYiwgMHg0NGJjNWJmZSwgMHhkNzUxMzliZiwgMHhiNjQ0OGNmNywgMHhmZmY5ZDg4YiwgMHhlNDk5ZjQ5OSwKKwkweDM1YjM1YTZlLCAweDdjNGNmODhiLCAweDdiZjY0NzUzLCAweGYwNjdlZjVhLCAweDJlN2YxNDAzLCAweGFhOTIyYmQ5LAorCTB4OGQwZmNiYzUsIDB4NGUzYzk3NzcsIDB4ZWE5Y2RkNzIsIDB4ZjAxNTc1Y2IsIDB4YzMwMGFjZjEsIDB4NzZiOGM0OWUsCisJMHg1N2ZmZmQ4NywgMHhlOTFmZmY2NCwgMHhmOGEyZGNmYywgMHg0ZGRmYzQ2ZCwgMHhmMTZjZGQ3YSwgMHg3ZmI2NGVhOSwKKwkweDBmZjM0YTlmLCAweGZjNzQ2ZmFkLCAweGY2ZTliNWY1LCAweGZmODI2NWJhLCAweDRmYjdkNzFiLCAweDE1Mzk5ZjVmLAorCTB4NGJjNjhkZjUsIDB4NGU2N2VlMDYsIDB4ZmY0ODA2MGUsIDB4NzhhMDkyOWEsIDB4ZWMzZTNlMTMsIDB4ZGQ5MGY3MmEsCisJMHhjNWY0Mzk2ZCwgMHhhNmY3YjIzOCwgMHgyODA3YWYyNCwgMHhkNjYwNzVhZiwgMHgyZGZiYjIyYSwgMHhmZDYzNmZhMywKKwkweGJjODVmNGZmLCAweDllNjIzOTIyLCAweGFkMjU2OTEzLCAweDY5N2ViZmU0LCAweGNmZTJjYmFjLCAweDQyZmM3NWE1LAorCTB4NWQ2MzIzZDcsIDB4YWJkZjZlZTksIDB4MTFiYzg4ZWUsIDB4OTE1Zjc1OGMsIDB4OWZiZTgwZmUsIDB4MTdmMWVhZjMsCisJMHhmZjljNzNmNywgMHgyZjQ0ODdlYiwgMHhkNmVlMjc5ZCwgMHgzZTAyYjc3MSwgMHg3ODNiMWJkNiwgMHgxYTU1YzY1NSwKKwkweDFmN2JhMzFjLCAweGQ4MjYxZDhkLCAweGU0YTZjYjQ2LCAweDVkMzljNDU0LCAweDM2MzI2Y2IyLCAweGI3MGQ5YTdkLAorCTB4NGM2Yzc0ZTYsIDB4ZWJiYTZmZWQsIDB4YmQyMTM0OTYsIDB4MGIyMDIxZmIsIDB4YWY5ZDE2N2MsIDB4YTRkMjRkMDAsCisJMHg2YmM1M2NjOCwgMHgxNGYzZjE1NSwgMHhjOTFiZjhjZiwgMHg5ZTU2ZmYyZSwgMHhiNGQ4NGU2MiwgMHhmN2YyOTJkYSwKKwkweGJhY2UyYmU3LCAweDlmM2RmN2EzLCAweDJhMjY1NWJhLCAweDMxZjQyYjk0LCAweDhhMGM0ZTE0LCAweGE3NGMxN2JjLAorCTB4ZjEzMzUzN2QsIDB4MDY3YmZmMTIsIDB4MmRmNmNhZDcsIDB4NWNkYWU1ZjUsIDB4ZmJlZTRmNjgsIDB4OGIxZDZkYjcsCisJMHhkNjJkOTc3NiwgMHhmYTQ2ZjU0ZiwgMHgzZGMwYTc3YiwgMHhkNzhmZjk0MywgMHg0NmVlMzBhNiwgMHhmZWYzMjczZiwKKwkweDEyZDNhOWRmLCAweGM0NjJiNzIzLCAweDg4ZjdjMDZiLCAweDI3ZjJhMzUyLCAweDI2NWYyM2UxLCAweDRhZWQ3ZTkzLAorCTB4YjkyMmRmNTUsIDB4N2NjOTc0MGMsIDB4ZTk0MTI0NGYsIDB4ZDhlMmI4YjEsIDB4MDNjMjNlZDksIDB4ZDM4YmY3ZTgsCisJMHhkNmM0M2VjNSwgMHg2ZDE3Y2UyNiwgMHgzMTdlYzZhYSwgMHgyNjljZTljMSwgMHg3OWM1ZDg0NywgMHg1NzlmYzhiNywKKwkweDljNjBmOTFmLCAweDA1ZGMzMTA1LCAweDAyZTRmMWQzLCAweGRlYzM3ZjFjLCAweGMzNGE2NDk2LCAweGY2ZjMzZmFkLAorCTB4NTM5MmJhNGMsIDB4ZTkxZGY4YTIsIDB4YTU0ZmZlYjgsIDB4YzIzNjM5MWQsIDB4NTM4MzViYTksIDB4ZjBhMTNmODksCisJMHg5M2YyMTQ4NCwgMHg5NDA0MGE4NSwgMHhmMWYxMzhhMiwgMHgxNGRlMjJhOSwgMHg4N2M1M2NkNywgMHgzZWQ4NTBmZiwKKwkweGU1ZTEyZDdkLCAweDJmNThiMGRhLCAweGE2YzY2MWNkLCAweDdhZTAzNmJjLCAweDJhNjM1YjVmLCAweDZmZmI1NzhkLAorCTB4YmY5MzQ2MDcsIDB4ZTA1ZDI5N2EsIDB4NGQyZjE3OWEsIDB4YTAyYmVmMTEsIDB4NzRhY2ZmNTAsIDB4NDFlN2FlOTcsCisJMHg1ZjBiZTUxMywgMHg3ZDhjZjNkMiwgMHhjZmRjNGM5NywgMHg2ZGIwYmY5OCwgMHgzZDQ0ZWNhMSwgMHgzZjZmMDgyOCwKKwkweDc2Y2Q3OWM0LCAweDRkZjI0YWFiLCAweDNmMDQwZTc4LCAweDc3MTgxM2RhLCAweDBjNWMxZWQ2LCAweDVkZmFlNzE0LAorCTB4N2RiMDk1ZTAsIDB4NmZjMGUyNTcsIDB4MGUwNjFmNDksIDB4NzczYTU1NTgsIDB4ODc2ZTcwNGQsIDB4OTc3ZjFjNTQsCisJMHgwZjJiNGY3ZSwgMHgzMWM1YjIxNSwgMHgyZjk4ZGNmYywgMHg5NGU3ZmRhMSwgMHhlMGJkMjQxMywgMHg2NTA0ZGZmMywKKwkweDg4ZTM1YzNiLCAweGQzMTI3N2U0LCAweGQ1ZWJhMjVkLCAweDg5YjBjNGFlLCAweDI2MDY0NWNlLCAweGU5ODc1ZWUxLAorCTB4NzgxM2E2MWEsIDB4M2NjZTgzNWUsIDB4MmNiYmZiZjYsIDB4ZTA3ZWU3MDMsIDB4YTQ5Y2JhNjYsIDB4ZTgyMDc5MDcsCisJMHgyYWM5ZjY4NCwgMHhhNzA0ZDFmOSwgMHg3MDQ4ZWJjNiwgMHgzNDgwZGVhYSwgMHhhOWRhYWU5MiwgMHg2ZWQwZmMwOCwKKwkweDM1ZTcyNTFlLCAweDZiYWVkODc3LCAweDM2ZWI4NzEzLCAweDEzNWQ4NWI0LCAweGZmOGYzZjQwLCAweDhmM2EzNmQ1LAorCTB4ODM5M2FhMWYsIDB4ZmVmYzNkOTksIDB4NmMyZmU5MmQsIDB4ZjljYjFhNmIsIDB4YTI4YzgwYmQsIDB4OTQ5OTYzYjYsCisJMHg3OTU0ZWI0YSwgMHhiNTQ1ZTg3ZCwgMHgwN2MxMjJmNCwgMHhiNzY3YWZiYSwgMHhmZWExZjY4OSwgMHhhYTBlZTdhOCwKKwkweGFmM2Y0NDNiLCAweDkyNWY2OWQ1LCAweDg3NDJmNmM1LCAweGYwNzg0M2Q3LCAweGVlN2MyOTdlLCAweGRlZDdiNDVhLAorCTB4MDUyOTdjYzcsIDB4ZDM1ZWFlYjgsIDB4YjE5YTA3YTEsIDB4ODc1NjlmZGYsIDB4ZTkzZWU4NzIsIDB4MWFmZjU2NzMsCisJMHgzZTU3Y2ZkMiwgMHgyMTQ4ZjM1YywgMHg2NjVkZGJmOSwgMHg5ZGY5MjU2ZiwgMHgxOGNmYzA5ZSwgMHg1NjY4YmY4NywKKwkweDFkZDg0NWI3LCAweGUwYzgxZDhjLCAweGYzMzE4MGZiLCAweGY0ZDk5ZWQ0LCAweGZkZDdjMjMzLCAweGNlOTUyNWZiLAorCTB4MDNjZGZiYmQsIDB4OWFlZTg4ZTMsIDB4ZTg1YTNmZjYsIDB4ZmVlZDY0YmUsIDB4NGI0ZjE4OGYsIDB4OWExYWZlMTksCisJMHgwMzViNzY2ZiwgMHgwMzliNmJkZiwgMHgxYjVlZjlkYiwgMHg5ZmJlNDNmYSwgMHg3ZjA4ZjIxOCwgMHhlNzNhNzgzMiwKKwkweDM5MDg4NmQ5LCAweGVjMmU5MTNjLCAweGUzZmMwNjBkLCAweGViYjU1ZTI5LCAweGY2OTA3YWY2LCAweGVkZWU1OGRkLAorCTB4OGQyMjc1YjgsIDB4MDdjZjU3YmYsIDB4YzAzNWVmMTgsIDB4ZjdjNDMxYTEsIDB4OTcxYWYwNGQsIDB4YTBmZWYzYzYsCisJMHg5NjdhNDE1MiwgMHg0ZWVkYWVmZiwgMHhhM2ZmYTIyZCwgMHgzZGJmMDJlOSwgMHg2NjcwMmU5YSwgMHg4OWJmODY3NiwKKwkweGYxZGY1ZGU4LCAweGQ2OTkyNWIxLCAweDhlMzQzNjc5LCAweDQ1MjFiOWY2LCAweGYxYzY3MTRkLCAweDFiZjY0MzIzLAorCTB4Y2FiNTRmNjMsIDB4ZDdmYTg1ODAsIDB4MmJmNjA3OWUsIDB4MTRhNmVmMjgsIDB4ZWY0YmRmOTQsIDB4OGQ1OTRkYjYsCisJMHg0Y2EyZjdjZiwgMHhlMmFlMjg1MiwgMHhlZmUyOTRmZSwgMHgwYzZmYjM1ZSwgMHhlNzc4NmZmNSwgMHhjN2U0YTlmMywKKwkweGU3NGY0ODFlLCAweDYwN2U3ZmY1LCAweDFiZTI3OGZkLCAweDIyNDk3ZmVhLCAweDYwNmVkOWQ5LCAweDY5ZDg2NmJmLAorCTB4YmUyOWQ5MDEsIDB4NWZmYTQwNWYsIDB4ZjYzY2Y1NGMsIDB4ZGQyY2JiY2IsIDB4ZjcyZWQ4NGIsIDB4MTJlYzgwOWEsCisJMHgwMWVkOWZmNSwgMHhmODQ5ZGZmNSwgMHhmNjg5YzBhZSwgMHg2NjRmZWZjMCwgMHg2ZGQ1ZGYzYiwgMHhhMzI3MThkMiwKKwkweGY1YzQ5ZjVmLCAweGJlYTkxYjkyLCAweGM5Y2NiYmFiLCAweDA1Zjc0ZTc2LCAweGMzNWVjODhhLCAweDEwOWM3ODg3LAorCTB4OWQxMjI0YzAsIDB4ZmNhOGJlMDQsIDB4ZTk5OTNiODgsIDB4ZTdlNWZjMzYsIDB4ODZlM2QwNmUsIDB4NzVjNWUyOWEsCisJMHhjYTM5NjVkOCwgMHhhNGUyMjIzZSwgMHhmNDcxMWJhOCwgMHg5ZWRiMzNjOSwgMHhlZTgxN2I0MCwgMHgwZmRjMjhkNCwKKwkweGZmYmYwYmVmLCAweGQ1NTYzZDVkLCAweDU5NzczZWJkLCAweGVlYjNhZTMzLCAweDA3ZWRjYzg0LCAweDU4NWU3ZGY1LAorCTB4N2E0MzkzZDcsIDB4ODZlMjg2N2UsIDB4ZWZkYzVkM2EsIDB4YjAzM2U3YTUsIDB4Njc1ZGY3NGUsIDB4MDk0YjFiNmEsCisJMHhkOGFlY2Q2MywgMHhiOWNhOTg3ZSwgMHg0MTI5NTBiZSwgMHhiYWFiZjljOCwgMHg5OTg1OWIwZiwgMHhiNWZlOTNlNywKKwkweDlmMmViYTFlLCAweDlmZjVjZGVlLCAweDkyMDI0MmIxLCAweGMwZTVmYWQ4LCAweGI1YzQ1ZjZmLCAweGY5MTA3MDNkLAorCTB4ZTE0ZTI3MWYsIDB4MTBmZjU4NzIsIDB4Y2YwMThkNmYsIDB4Yzk3ZWY2YzgsIDB4NGJiZDIzZjAsIDB4NWFmYjFmNDgsCisJMHgxMjNhZTFlNSwgMHg0ZDhhODM1MiwgMHgzZmQyNzdmNSwgMHhiYWMwMTZkZCwgMHg5ZjdiNDMzZiwgMHg5OWM3ZTI1NCwKKwkweDNmNDlmN2ZlLCAweDk5N2U0ZmZiLCAweGY3Yjk2NjQxLCAweGI3YzdkOGI0LCAweGQyN2NiNDVhLCAweGI4MDlkNjlmLAorCTB4YTdhMzhkYjUsIDB4M2M4YmE1YWYsIDB4ZTIxNWIxNGYsIDB4YTU3ZTRiOWUsIDB4MDA5Y2MxYzcsIDB4ZmVmMTIyM2MsCisJMHg1MTA2NzY1YywgMHg2NTVhMTdlZSwgMHhlN2Y4ODJjZCwgMHhjZTU2MDQzYywgMHhlN2EzN2YyMywgMHhmZDAxZWY2ZiwKKwkweDk0MWZlMWE3LCAweGY1N2FiZGNmLCAweDE4MmJjMjFlLCAweDYyN2RlZWI3LCAweDg5YmZiOWM0LCAweGJiNmQ2OWY0LAorCTB4NmI4NGZmMDQsIDB4ZmM0Y2Y3NWYsIDB4NWU0NjA5N2IsIDB4MWRiNmJlZWIsIDB4M2NhMGM2NDcsIDB4ZWU4YjllYWIsCisJMHg5ZWU4NjFiNywgMHhiZGY3ODg3YiwgMHhlZmEzOWExYiwgMHhhZTk1N2MxYiwgMHgzMDg5OTZlMywgMHhlYTBiNzA5MSwKKwkweGIzMDdmYjEzLCAweGQ0NTY5ZDAyLCAweGZkMzI1N2RmLCAweDdlNWUxMDlmLCAweDg0ZjgyNGM5LCAweGYyZWQ5NTdlLAorCTB4NjcxZWI3MTMsIDB4MWEzZjg0NGEsIDB4OGY3YzAwYjgsIDB4ZTg2NzZmMjgsIDB4OTlkN2RkMzAsIDB4YTVlNTljZGIsCisJMHhhMjJhZTYzOSwgMHgxNjViNmU3ZCwgMHg4MjUwMTljNywgMHg5ODM3ZGQzMiwgMHgxOWNiZjlhZCwgMHhkM2I0MDc1ZiwKKwkweDlkNjQyZjc0LCAweDg5YzEyN2VlLCAweGEzYmYyODdmLCAweDhlOWQ2YmFmLCAweDQ2MGJlZWU3LCAweDgyMDczZGQzLAorCTB4ZGFjZjM0OGQsIDB4ZDFmZWUyOWQsIDB4YmZmMTlkZmEsIDB4YzdkNWE4MTMsIDB4YzlkNGYwZDksIDB4YWMwZTk0MjMsCisJMHhhYmY3NDUwZSwgMHhkYjUzZjlkNSwgMHgwNWJjZmQxNiwgMHg5ZjE4MTI3OCwgMHhmY2NmN2QxMSwgMHhmYzQzZWY0YSwKKwkweGM1ZjAyY2M5LCAweDQ2MzhmYWRiLCAweGMyMTliNWZiLCAweDc5MjBkNjdmLCAweDQxMGRkZjI0LCAweGIzN2E0ODM5LAorCTB4MGIyNDBhNGUsIDB4ZDU4ZTBiN2MsIDB4ODY1ZGY3NDgsIDB4NjVmN2U4YmUsIDB4NzNmOWQ2ZWYsIDB4YmMyZmFlOTcsCisJMHhmYWJmN2MyZSwgMHhlNzQ4MjkxOSwgMHgyNGZmNzc4MCwgMHg0MjdiZmU5YSwgMHgxZjQ5Y2JhYiwgMHg1ZDZhZjU2MiwKKwkweDZkZjE5OWIzLCAweDEwYjQ2YzE1LCAweGFiZDU4ZGJlLCAweGQ5N2QyMWFhLCAweDE2MzhhMTZlLCAweDdlMzU0ZmFiLAorCTB4MGI3NDMyZTksIDB4NGI3ZmZlNWMsIDB4OTg3MzdhZjcsIDB4ZmZlYjRjZjMsIDB4M2NhNWU0YTcsIDB4ZGZhZGJkZDQsCisJMHg3NDVlNTBiMSwgMHhmOTA4N2RhNCwgMHhhMjdhMTk1NiwgMHg1ZGVmZWJhZiwgMHg3Yzg2ZWRjZiwgMHg5NjE0YzBhNywKKwkweDE1ZGE0NTZmLCAweGYxYTI4M2VlLCAweDUwY2I2ZWY0LCAweDdjZjM5MjllLCAweDM4MTM5ZDgzLCAweDUxZTg2ZTNmLAorCTB4M2FlNTM4ZWMsIDB4MTRmYzVmMmUsIDB4YWRhMTc5NzAsIDB4YTJmODRlZDQsIDB4MmJjOWI4ZmYsIDB4NGM3ZjljYTksCisJMHg0YzNlNDQyZSwgMHhlMTAzMjAzZiwgMHg4OWY2ZmU4ZCwgMHhmZTkwMDc4ZiwgMHgzN2M1MTNhMiwgMHhmYTdjYmU1MiwKKwkweGQ4M2Y4YzA5LCAweGY4YjNhN2JlLCAweDExNWZlNDU3LCAweDdkOTFhNGUxLCAweDRlY2FlYzJmLCAweGM3ODNiZGZiLAorCTB4N2ZkZGY4ZTEsIDB4NGFmMWU4YmMsIDB4Y2JjN2MzZjIsIDB4MDk1YzY5OGEsIDB4Nzg3ZWU5ZGIsIDB4MWE4NzFlOTEsCisJMHg3YmQ5MTc4ZSwgMHhmZGQxZTIyMiwgMHhiZWRmMjIxOSwgMHg0N2ZiZjNjNSwgMHg3OGIwNWY2OSwgMHhmOTRiZDliNywKKwkweGZmNjZjNThlLCAweGFmYTQwNGE2LCAweGRiYzkwNWU4LCAweGU5MWRiMzgwLCAweDhkMjRmNDNlLCAweDUyYTRmNjhiLAorCTB4ZWVmMTY2YmUsIDB4ZjZhMjFkZWYsIDB4ZDMxMjVkZGEsIDB4MjhiZWRmZGYsIDB4YzdjNTE3N2YsIDB4YjhhNWVjYTAsCisJMHg1NzdlZGZkNywgMHg3Mzg0YmRjMSwgMHg3MDUzZGMwZSwgMHg0NzdjYzQ1NywgMHg1OTVmODU1MiwgMHhlMzk5OTU3YywKKwkweGZiNjhlZjcxLCAweGNmMjkyYjJmLCAweGZmNjBlZGE5LCAweDFlZWFmYmQwLCAweGIwNTc3ZjBiLCAweGFlMGYwMjRiLAorCTB4ZjBlNzg4ZjMsIDB4YmQwZjg5YWYsIDB4MDg1YTRlZmIsIDB4OWViNjk3ZTQsIDB4ZjFjNGY0YjQsIDB4MDE3OTQ2Y2YsCisJMHhjZTYxNzFiNywgMHhmMGI3NmViZiwgMHg3ZmJkY2EzZCwgMHg2YjdhZDBiMCwgMHhmMzg4ZmI5ZSwgMHgxMjZkNTU2OSwKKwkweDY3YWFhN2ZiLCAweDc5NGFhMGU0LCAweDU4YWYwMzllLCAweDlhNmIzZjQ4LCAweDhhY2NjODI1LCAweDNiNzMzNzZjLAorCTB4ZmZhYTUxZjksIDB4NjVmODU5YjEsIDB4ZThkN2VmNDMsIDB4YmRlODZlN2EsIDB4NzQ2YjA3NjEsIDB4ZDZkNzc1ZmYsCisJMHgxN2JmM2Q2OCwgMHhmMWEzMmRiNCwgMHg1NzlhN2JmZCwgMHg3YmEwM2RmMywgMHg1ZmY3YzdiNiwgMHg0YjVjMWY4NiwKKwkweDJiOGM1MmZiLCAweGVlOGE5ZjZiLCAweDdlOTBkZjc3LCAweGM3YmZkODA3LCAweDMyNTdjOWZhLCAweDNjZDhmM2Y0LAorCTB4MWVmZDIzYzgsIDB4YWYxOWFmMGMsIDB4N2U3ZDNkYTAsIDB4YzQzYzZhYjIsIDB4ZDcxZTNiYzksIDB4OGYxMTgwZjEsCisJMHg4ZTI2YzMwNywgMHhmYWZkYjE2NywgMHgyODVhMmVkYSwgMHhmZTc2ZDY4ZSwgMHg3OTZiZjE5OSwgMHg4NzJjNjdmYiwKKwkweGJlMGVmNmNhLCAweGY4M2Q3YWFmLCAweGFmMWYxMDM3LCAweDA5M2JiNzZmLCAweDA4ZjY1NzQ3LCAweDZlZDI1ZmJiLAorCTB4NmEyNTA2MGQsIDB4N2M5MTM1MGYsIDB4ZWY4YTBmZmIsIDB4NGFhZjAyM2IsIDB4Zjc0MGEzOGMsIDB4N2U3NTZiN2YsCisJMHhiN2Y5ZDVhZSwgMHg2MzY3ZjcxNiwgMHhiZThhZGVlOCwgMHg3NzJmYmVmZiwgMHhlMmJhMTFjNywgMHhkZjNmYTM1MSwKKwkweDk5Mzg3NWQwLCAweDg0MDRiOGY4LCAweDEyMTI1YTdmLCAweDg3OTBjOWZlLCAweGM2NDY1ZjExLCAweDkzNmY4MWQxLAorCTB4NWJiN2Q3M2MsIDB4NTJmOGJlZjksIDB4NmQyZDNmZGQsIDB4YzU5M2RmMTYsIDB4NTFmZThiZmEsIDB4ZGRmZjkxNzYsCisJMHg4ZDhkZTgyYiwgMHhkMWFkMzVhNywgMHhkMjMyYmJmZCwgMHhlYTBmZGZkOSwgMHhjMzEzZjg3OCwgMHhhOGYyZThkZiwKKwkweGU1M2IwMDFjLCAweGIyYTg5N2U3LCAweDc1NmZjODM3LCAweGU3N2YzNDJiLCAweDYzY2Y4OTU0LCAweDI5ODlkNTNiLAorCTB4MTk0YmVlZjEsIDB4Y2UzYTliZTUsIDB4MjhjYmVhMzcsIDB4NDNmZDg2NGYsIDB4Yzg4ZWVkY2UsIDB4OTk4ZGZjN2QsCisJMHhjZDU0YWYwMiwgMHhjZjI0MDM5MSwgMHhiMmNmN2Q4OCwgMHhmYmI4YWNhMiwgMHhiYTQ0YzgxZSwgMHhkNzdiMThkZiwKKwkweGVlNDVhNjRmLCAweDM5MWRiNDdiLCAweGYyM2Y2N2E0LCAweGY3NDk1ZTNjLCAweDg1OWI2YThjLCAweDhkOWJlODdmLAorCTB4OGUxMGE2ZTMsIDB4YjVjNWM2MDcsIDB4ZWQyMGQ2Y2QsIDB4NGY1MTZhNGYsIDB4ZDIzMDdiZjgsIDB4NzZiZmIyMGYsCisJMHgwN2U5MTE2OSwgMHg5OTFjMWJlZSwgMHgzYTcyY2Y0OCwgMHgyZmY1YzRhYSwgMHg4ZTM4YzM2ZiwgMHhmYjJmMmZjMywKKwkweDJiYWFmNThjLCAweGY5MWJhYzViLCAweDFmNmYxOTk2LCAweDZhMWZlYzYxLCAweDZhOWMwOTJlLCAweDdhNTFhZjNjLAorCTB4ZDM1MTFmNzgsIDB4Yjc0OWVlMmUsIDB4NWM2MmZhMWUsIDB4N2ZkYmQyMTYsIDB4YWRjNjNmZTAsIDB4YTY0MTcyYzYsCisJMHgyNWFkYmY4OCwgMHhiZWU5OGZhMSwgMHg2Y2JiZTdjZiwgMHg5MGU4ZjE3MSwgMHhkODlhOTdiZiwgMHgzZGNjNmEwZSwKKwkweGY2NTc4YzE5LCAweDg1OWMyZTIzLCAweDRmZWRmMzdlLCAweDdhZDFkZjc5LCAweGNhNGVlMTI4LCAweGYxYWRmNWM3LAorCTB4ODM3ZTc3OGYsIDB4MTM2MDFhOWMsIDB4ZDA0ZGRhZTMsIDB4OWVlMTI1YzQsIDB4ZDZiODFjNDgsIDB4ZGQwZmVlMjksCisJMHhhYTQ5YzdhYiwgMHg3ZDdhOGMzZiwgMHg1MDVkZjYyZiwgMHgwM2VlY2YxNCwgMHgyMzQ5ZTY1YiwgMHgxYmYwZGRlZCwKKwkweGFmYmViYWQ1LCAweDg1YjFkODJmLCAweGYxNjNlMDhlLCAweDQ3NmViNTUxLCAweDJlMzlmYzg4LCAweDFiYTJlMmM2LAorCTB4YjRmNWEzMzMsIDB4YzY0NGVkZTEsIDB4YjI1ZGZkYjksIDB4YzhjNDcyOTMsIDB4MjY4YzVmZDcsIDB4N2VmODg3ZGMsCisJMHhlYjNjOWM0MiwgMHhmNjVlYmFhNywgMHgwZGJlZTdlYSwgMHg5YmU2NjViMywgMHgwZDI4OGU2OSwgMHg2M2ZjODUxYywKKwkweGU5M2ZlOTdkLCAweGNiMWM1MjA4LCAweDA0Y2FmODNmLCAweDlkZmFmZjkyLCAweDI0NDVlN2QxLCAweGRmZGYzZjNmLAorCTB4YWFmY2IyMGEsIDB4NDMzZTc2NDMsIDB4M2E1ZmRhMzIsIDB4ZDIxNGNhZjgsIDB4YmZiNzg2YjMsIDB4Zjk3MjExY2MsCisJMHhiZWUyYzcyMiwgMHgyOTQ2N2QzYywgMHg2YmZmNjI0OSwgMHg3N2ZlYzQ5MiwgMHg0YzkzZDJhZiwgMHhmZGRhYWVmYiwKKwkweGZlZjIyZmIyLCAweGJiZTcyMWJjLCAweDQ1MDFmZDc1LCAweDY1ZDdmM2VjLCAweDY4NmY1Y2FhLCAweDNhNjE3YTE3LAorCTB4N2Y5YzRhMjAsIDB4OThmM2M4YTUsIDB4ZWQxMWZlNzksIDB4ZGYyZmE4MjUsIDB4ZTg4MGI3MTAsIDB4OWFkN2Q5NDIsCisJMHg2YWVmNTgwNywgMHg5ZTk4OWE0ZiwgMHgxOTgzOTNkYSwgMHgwNWVmMTFkOSwgMHhmMjRjZGM2OCwgMHg4MDFiMGQ3YiwKKwkweGM4MWQ4OGZkLCAweGVmYTUyZWJmLCAweGY0YmViMTBmLCAweDU5YzYwNGZkLCAweDUyM2MyNjQ3LCAweDY0YWRjZTI5LAorCTB4YzBmNWJmMjAsIDB4MjM5MzU1ZGIsIDB4M2QwNWZmZmQsIDB4YzFmMTAzZWUsIDB4MDllNzI4NDMsIDB4ODdjZWJmMzEsCisJMHhjZjQyYjA0ZCwgMHhhZTNkMDgxMywgMHhlZTJjNzFkMiwgMHg4ZWM4OWFhZiwgMHg1NzU3Zjc2MywgMHgwZTFiOTM4YSwKKwkweGM3ZjI4MTU4LCAweGY5NTgxZmI1LCAweDA3ZTdkMDNlLCAweDFkZmVmMmQ2LCAweDkzMjdmOTJlLCAweGZmYmYwMTlmLAorCTB4MzgxZjJhNmEsIDB4M2QzMjc2YjgsIDB4N2RlMGZjZmYsIDB4NTNkZTczNTcsIDB4YWY5NTE0ZGEsIDB4MWU3ZDEwMDgsCisJMHg3OTdmNTFjMiwgMHg5N2MyNzZmNywgMHg5MGUzMGE1ZCwgMHhlZmQzYWVhMiwgMHg5ZWVhZjlkMiwgMHg5YjdmMzM1NiwKKwkweGM2NzdiZDU5LCAweGMyMjQ4MWUzLCAweGU5NGI0NTRmLCAweDlkM2Q5ZGJiLCAweGUyMWZlYjBhLCAweGQ5NDcwMzJhLAorCTB4Mjg5ZDQ3MTksIDB4ZTM4NTFjNjYsIDB4MTY1YzgyZjgsIDB4NzFhNGFiMWYsIDB4NTMxNDk0NGYsIDB4YzlkYjA5MzcsCisJMHgxYzI3NGQ5ZiwgMHg1NWM2MThlNSwgMHg5Y2ZmM2QwNiwgMHhkZmQ5ZjgyOSwgMHgxM2Y5YzA5MSwgMHgzZDA4MjYwOSwKKwkweGJhMjhlYzgzLCAweGNlYmViNDM3LCAweDliNDM2NDM4LCAweDg2YmRmNTFjLCAweDRjZWVkZWYxLCAweGQ3YjBhZTcxLAorCTB4YTQ5MGIzZDAsIDB4MTZlZDFlYjEsIDB4M2RiNjg2ZTUsIDB4ZjU4ZWI0MTksIDB4NDllYjEwZTYsIDB4YjQ1OWIzNDMsCisJMHhkMDI1MTJlZiwgMHhmZTBjY2RmOSwgMHhmYzQwMzhkOCwgMHg1MDhmNDYzOSwgMHhjMTJjNGIyZSwgMHg3N2RiODRiMSwKKwkweGVhMDc5ZDBmLCAweGUyODIzOWY3LCAweGU3NjM1ZDVlLCAweDY4NmVmZTQ0LCAweDNiOGY3M2IwLCAweDRlMzlmYzVlLAorCTB4ZGE0ODMzZTcsIDB4Y2ZiMTJjZDEsIDB4ZjNhZjZkODksIDB4ZDFjNjdjODgsIDB4MWUyZmMyMzMsIDB4MWM5ZmU4NWQsCisJMHhhMDA2M2ZjZiwgMHgyNWZiZWM0NCwgMHhlNmFkN2U1ZCwgMHg4NmU3Nzg4YSwgMHhkZjIyM2QxYiwgMHhlMDZjNzNiNCwKKwkweGVmNzFlOTI4LCAweDM3M2UwNGVlLCAweGZjODk3NWVjLCAweDk3NGI2OTZjLCAweGFjOWZkZjQyLCAweDUwNjY5NTZmLAorCTB4ZmI5ZjVhM2MsIDB4ODI5ZjdmMWUsIDB4ODNmNjYyZjUsIDB4NmU3Y2ZkZTEsIDB4YmJiY2RkNWEsIDB4Yzc0MzhiNWMsCisJMHgxZjExMWViNSwgMHgwMWRmZTg5NywgMHhiZDU3ZDA4ZiwgMHhkMzc4MTRmZCwgMHgyM2RhN2RmNSwgMHhhYTczNWU3NCwKKwkweGRmMTRlY2QyLCAweDRhZWY4OTk5LCAweGY5ZmRkMDZmLCAweDE5OWJkNzhkLCAweGQ1MDI5ZDM3LCAweGM0M2ZjZTJjLAorCTB4ZGQzMmM1MzksIDB4ZmJhMGRmMmYsIDB4M2JkZjExZjksIDB4ZTk5YjAzM2YsIDB4N2JmNjIyOWMsIDB4ZGZhZmMzNjcsCisJMHgwMmJmOGZhYywgMHhmNjM3MWUzNCwgMHg3NTliZjViYiwgMHgyZmIzNzgzYywgMHg0Y2E1ZjlmYSwgMHg0MGU2MDcxZCwKKwkweDEwZjNmOTBlLCAweDFmYmUxN2M2LCAweDcxYzA5NzkxLCAweGE0ZTE2OTdhLCAweGJlODMzOGI4LCAweGVmZjU1NzAzLAorCTB4ZTQzNGE5YzAsIDB4MWVmNzkwZGUsIDB4MWRhM2JmYzcsIDB4ZGZjZDdlNjcsIDB4ODA0OTljMTMsIDB4YzVjZTcxMDksCisJMHhlMTlmZTM4NiwgMHhmMjEyNmUzZiwgMHhhYTJkY2ZkNiwgMHg0MzQ2ODI5ZCwgMHgwNzcwMTdlZSwgMHgzMzFmOTkxNiwKKwkweGU3NDYzZWU0LCAweDNkZjFmZmZmLCAweDIyNTA1Y2EwLCAweGNhY2YyNWYzLCAweDNhMWUzMWZlLCAweDMyZjViMDlmLAorCTB4NzAxNWM2ZmUsIDB4OGQ3NWM0MWMsIDB4Y2UzNWQ3ZDMsIDB4MmVkZjExMWEsIDB4NTcxZDVhOGMsIDB4OTdkNzg3N2YsCisJMHhjNDcxMTAxYSwgMHg5ZTQ3NjVjZCwgMHg3NTYyNzE5NSwgMHhmYmVmZTI0OCwgMHg1ZjYyYzNhYSwgMHhmNjI2NWQ1YiwKKwkweDAyYWQzOWI1LCAweDQ5YmNhZWE3LCAweGJiMTI2YTBhLCAweDlmNDRkM2MzLCAweDZjY2IzZmExLCAweDdhMTgwZjAyLAorCTB4NWQyZmM0MzIsIDB4ZjA5ZGE4N2YsIDB4M2UzYTBkYzEsIDB4YzlhM2Q1ODgsIDB4Zjk0ZTVkZDAsIDB4YzkzNDViZTYsCisJMHg0NzJhZjc0YiwgMHg2YWJmM2Y3YywgMHhlZWU0ZWJkYSwgMHhhODNmYTcyZiwgMHgyMmVmZmM2ZiwgMHhmN2QxZWFjNCwKKwkweDBmMTJmZTNkLCAweDA3YmFkM2U1LCAweGI4ZTIxNjU3LCAweDM4ZmVmMzQ3LCAweGU2YTZmNDhlLCAweDJkZjM3NjMyLAorCTB4M2IxMzg4OGYsIDB4N2NhMzgxMWQsIDB4M2Y0NWE0ZGYsIDB4NmJjOTZmZWYsIDB4NzQ3ZTIxZWIsIDB4NWVjN2UzMDIsCisJMHgzYTk2Zjc1NywgMHhiY2Y5YWI4MSwgMHhjMDljM2FiZiwgMHhiNzU2NDNkZiwgMHhiMGJiZjlkYiwgMHhjNDg2ZDZlYSwKKwkweGRiN2ZlNDI5LCAweGViMWRhZjY1LCAweGNiMjdhZDk1LCAweGM1OTU5Zjg4LCAweGFkNGEzZWUyLCAweGIzOGJkYzVkLAorCTB4MTBiN2ZkYjksIDB4M2I3YmQ3N2QsIDB4MmRmOWNmYTIsIDB4ZmJhOGJmM2QsIDB4ZjU4ZjNkMDYsIDB4YTMwOTFiNmIsCisJMHhmOWY3ZmZhNSwgMHg1ZjNhOGQ5YiwgMHg2NjJlYmFlYSwgMHhmZWE5YzE0YywgMHgyNmFmZTY5MCwgMHhmZDdmZWM3ZCwKKwkweGQ3MWQwYjQ1LCAweGE1Nzk0ZWQ1LCAweDZkODhhZTljLCAweGVmZGNhOGY0LCAweDI2OGVlNmZhLCAweGY0MWFmMzRhLAorCTB4ZjkzYTY0NzcsIDB4NzA3MzUxZjksIDB4ODJkMmUzMmMsIDB4ZDMwZmJiMmIsIDB4YTk4ZGZmYjAsIDB4M2FmYWE3MTQsCisJMHgyMjVhYTZiYSwgMHgwZWI3YmJmNCwgMHhmOTFjNzNmZCwgMHhiNzQ5ODAzNSwgMHg0OTRiODU1YiwgMHgyNWUzYTE1YSwKKwkweDA3YjVjNzYxLCAweDNlNTA2NzBlLCAweGI3ZWM5N2EyLCAweDkyNzdjYTgwLCAweGRlYWNiMWIzLCAweDEyNzkyYTdkLAorCTB4YTJiZDk2ZTEsIDB4ZWQxOWMyMWMsIDB4YTUwM2Y3MzIsIDB4YTRlNmU3MjcsIDB4MzMzNmZhNDgsIDB4NjI0MjE3N2QsCisJMHg5YzllODAxYywgMHhkYjIzMGIxYiwgMHhkYjVmZmYxYiwgMHgyN2E0ZDNmZiwgMHgyODllYjZkNSwgMHg4NGY4MzdmYiwKKwkweDNlZmU3Y2JiLCAweGNhZDA3MDM3LCAweGJjZTgwOGY3LCAweGM3MjExNWM2LCAweDM0N2Y3NDU3LCAweDY0NGIzNzBiLAorCTB4N2NlODczYTcsIDB4M2I0MTIyN2EsIDB4YmFhMGVlMDUsIDB4OTUyNTYxMDIsIDB4YjJjMzhiY2UsIDB4OTYzNzdmYjgsCisJMHg3ZDRjZjdmZCwgMHhiODRhNTlmZSwgMHhjZWU5ZWU4MywgMHhlNzM3Y2ZkMSwgMHg1YmY3Mzc0MiwgMHg2YTVjMDMwMCwKKwkweDhiZWZlNGUwLCAweGU1Y2JjMDRiLCAweDI5Nzg1YjZjLCAweDUwODJmMWMxLCAweDA5OWZiZjg4LCAweDczYWUyODY3LAorCTB4ZTYzYmZkMzYsIDB4ZTYxZWYyMzgsIDB4MGNlNzAyOWIsIDB4MGU3NGM4N2UsIDB4YzUxYmVlMjYsIDB4ZDc1YmE3YWUsCisJMHhmMDlhNTljNywgMHhlODFkMDQzYiwgMHgwODZjZWU3ZSwgMHgzNWZiYjlmMSwgMHhiZjlmYTNkMCwgMHgzY2M3NWZjNywKKwkweGI5ZDFmN2RjLCAweDNiNjgzNWRiLCAweDIwOGZjYzg5LCAweGViNGY5ZmY3LCAweGE3YWRlMzkxLCAweDE5OGIyOTY3LAorCTB4OWY0NDljY2EsIDB4N2QzMGNlMTQsIDB4NzVmMmJmNmQsIDB4NGQ2ZGQzZjQsIDB4MzVkZjU3Y2EsIDB4ZTI4M2Y3ZDAsCisJMHg2ZjRiNzNlMSwgMHhkM2VmMWJmYiwgMHhkMzQ5NjI3ZCwgMHg5N2IxYmVmOCwgMHg3ZGE2YzdiZSwgMHgxZGU5NTg0ZSwKKwkweDAwMTM2M2YyLCAweGU2YjNkZGZlLCAweGM2NmY2NDM3LCAweDA3ZTAxYWY3LCAweGZiMTFlN2JlLCAweGY3MmQwNmJkLAorCTB4M2RmMGM2N2MsIDB4ZWRmZWUzMzUsIDB4OTUwYWUwY2UsIDB4NzJhYzZmZWUsIDB4YWRkZmY4ZGIsIDB4OWI4ZGIyMjksCisJMHg4N2NhNzk0ZSwgMHgyMWJmZmNkMiwgMHg2YTQwZmFiZCwgMHgyODgzYzQ5ZSwgMHg2MzhjMTljMSwgMHg4M2IyYmQ3NSwKKwkweDJmZDY5YjM2LCAweDIyZjdjNjY5LCAweGY0MzJmYWMwLCAweDAwNjQwMWVmLCAweGI3NjNiNzdmLCAweDFlNjllZjhhLAorCTB4YTViNDNkNDEsIDB4NzRhYmY2YjIsIDB4MmUxZTFhMGYsIDB4NmYyZjA5NTUsIDB4ZjRiY2Q5NzEsIDB4ZTg5NWFlNWQsCisJMHhkYmQzMGZiNSwgMHgyZmY3MTM2OCwgMHhiMTZiZmI4YywgMHgxOWI0NmM3YywgMHg4ZGFmNGE3OSwgMHg3N2NjNzY3MSwKKwkweGZjZGE3NzNlLCAweGJmZTg5YmZmLCAweDkzMjRhOTNmLCAweGNiZmU2MDcwLCAweDNmN2MzZGYzLCAweDc3NThjMTI5LAorCTB4YzNlYjhkODksIDB4MzcxOTFhZjcsIDB4NmE3ZGQxMzYsIDB4MWQzMWFiYTQsIDB4ZTFlMjFlZjgsIDB4YmExNDljYTQsCisJMHgyNWQ4ZDUxZiwgMHhhNjM3NTNlZSwgMHg5YjdmZDgwNywgMHhmM2ZiMTJmZCwgMHg0ZWQyY2VjNiwgMHgwZTgzMDc4YSwKKwkweDZlYWJkZjBiLCAweGFhMzRmOTc0LCAweDQ0MjFkMjA3LCAweDNlZjg5ZmZlLCAweDY5YmJlMGRmLCAweGZkMjFlZjk4LAorCTB4ZWQ5MTUwNWUsIDB4ZGU1MTU3ZDcsIDB4NGExYjlhN2YsIDB4NjE2OWJkZTksIDB4YzBmMTEyNmQsIDB4ZTUwNjFlZjgsCisJMHg0ZTk1MTllMCwgMHg3YmVmYTNjZiwgMHhmYmU0ZTI4MSwgMHg1MDFjODYxNywgMHg5ZDk5NTgzMSwgMHhiOTBkN2NiYSwKKwkweGY4ZWY4ZDM4LCAweDNiZWEyNTM1LCAweDhmNWU0MzdlLCAweDk4YjkwYTI0LCAweDQ0Y2MyNmU5LCAweDcxYTU1NzdlLAorCTB4ZjA2MWU1NjMsIDB4OGYwMGJmZmQsIDB4MzBiMWFlNDAsIDB4MDAzMGIxYWUKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9pbnRfdGFibGVfZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4OTRmM2ZmMDAsIDB4NTFmODYwNjYsIDB4MjU3YmMwOGYsIDB4Nzk5YzE4MTksCi0JMHg4OTY4YzU1MCwgMHgxODE5MzkwYiwgMHgwYmYxMDMwZSwgMHhkYTAwNTYyMCwgMHhjMGM1Y2FlYiwgMHhmZGM0MDZlMCwKLQkweDg4MDEzYzQwLCAweDNlYjEwMGJmLCAweDAxODMwMzM3LCAweGQ5MDJhNzEwLCAweDczNmU2ODUyLCAweDE3YmEwMjY0LAotCTB4ZDg4MTVkODgsIDB4MzJiZjg4MWQsIDB4NjM3YzMwMzAsIDB4NzY3ZWRlMjAsIDB4NjIzZGEwMjEsIDB4MjAzOWZlMDgsCi0JMHhmZDA0YjJmYiwgMHhmMGQ4M2ZmYywgMHhkYWZhNjU1ZCwgMHhjMGMyYTgxNywgMHgyYTgzYTMxMCwgMHg4ZmM2OGIxNiwKLQkweDQ2NmZjMWQzLCAweDAyN2M5YTNjLCAweDhmMTEzZjFhLCAweDU0NzM3MTdlLCAweDJhMDE5ZDdlLCAweDgxODhjOTNmLAotCTB4OWE5MjBmNjEsIDB4NmVmYzAzN2EsIDB4ODFhZmM3NDEsIDB4MzEwMGRmN2EsIDB4NzQ3NjlhMDAsIDB4MDAwMzY4NWQsCi0JMHgwMDAwMDAwMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4MjQzYmZmMDAsIDB4YTNmMGMwYzMsIDB4NGFlZjgxMWUsIDB4ZjEzMDMwMzEsCisJMHgxMmQxOGFhMiwgMHg2MDY0ZTNlZiwgMHg2MDYyZTAxMCwgMHhmYmUyMDUzMCwgMHgzMzBjMGMzYywgMHgyMDRjZjQ4MCwKKwkweDYwNjZlNTE2LCAweDFhZTIwMzEwLCAweGM0MGRkZTIwLCAweDE5Zjg4MDdiLCAweDEwMzlmYzUwLCAweDFiZTIwMGVmLAorCTB4YmVmZDEwM2MsIDB4ZmUwYzBjNGMsIDB4YzQwODFjNDAsIDB4OTVmYzQwYzEsIDB4MWJlMTgxODEsIDB4NzNmNmYxMDMsCisJMHg0YzMwMzMwYSwgMHgyZmYwNDcxNSwgMHgyNDlmZDkwMywgMHhjMWZmZTdlOSwgMHhlOTBjNDM4NiwgMHhhMDcxZGY2YiwKKwkweDEwYWNmMzdkLCAweDdiMjA0NjdjLCAweDlhYWExNWJlLCAweGNkZjg1NjA1LCAweGJmMjY4ODU4LCAweDE4YmY4ZDA4LAorCTB4MDM3MmZlOGYsIDB4NGQ1YWZlNTQsIDB4ODFiNWIzMzQsIDB4Y2Q0OTA5ZTksIDB4NmVmYzRkM2EsIDB4NDBhYWM3NDEsCisJMHgzMTAxYTlmZiwgMHg1ZmYxYWQwMCwgMHgwMDAzNjhjYSwgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB4c2VtX3ByYW1fZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4NDU1NDc4MDksIDB4YmVkZDcwYjYsIDB4NGU5ZGVmNGIsCi0JMHg2MjU4NTkwOCwgMHg4MTUxMTAwNywgMHgwNWU0MmNlOSwgMHg2MmQ5YjFjNCwgMHg5NzA2MjFmNCwgMHg2Njg1NDYxMSwKLQkweDQ0NzQ5ZWNiLCAweGY5ZDFjMWM2LCAweDE1MzYxMGQzLCAweGM3MTMzMDlkLCAweDYwZWM0NGUwLCAweDgxYTBkMDUwLAotCTB4NjAyNDEwMDksIDB4M2NjMGVhMDMsIDB4NjRmZmUzMWQsIDB4YjgzMDY2ZGMsIDB4YzVhNGM2YjAsIDB4ZmNiOGRmMGQsCi0JMHg0ZGQ1NGU3NSwgMHgxMWQzN2JkZiwgMHg3ZmVmOTk5YywgMHhjYTNmYmZmMywgMHhmYjViYTk1NywgMHg1MzljZWFkOSwKLQkweDJjOTIyYWE3LCAweDQyMjJlOTEwLCAweGFiOWY4M2JlLCAweDQwOWJmOTA4LCAweDRkMTcxOTA4LCAweDY5ZTVhOTA5LAotCTB4MjRlMDUyOTUsIDB4YmZhMmUwMjQsIDB4ZTE1MjEzNjYsIDB4ZDNjYjQyNTQsIDB4NDNiMjk5MDksIDB4NDg5NTVmMGUsCi0JMHhjODQyOGRmMywgMHg3ZGE2ZjM0YywgMHg2ZWVmMmM1NiwgMHg1M2IwZjk2MCwgMHhmZTVhMTFmMSwgMHhkM2NkMTM3MSwKLQkweDhlZTYwMzNlLCAweGU1YTBhZTg3LCAweGQ5MjIxZDkxLCAweGIyOGVkZDA4LCAweDIxMTI0ODk5LCAweGZkODQyZGM3LAotCTB4MGU3Y2QzNjQsIDB4OTY1Njg1MjEsIDB4M2ZkYzY4YWQsIDB4YjcxN2RhMDcsIDB4ZjY5NTg5OTksIDB4NjhiYmIxNTcsCi0JMHg1ZjM0MTVjNiwgMHg1MDI2NDg3NCwgMHgzMmQzNjJhNSwgMHg5N2NkMTA2NSwgMHhjODE2ODQ4NCwgMHhmMzY2NGNmNywKLQkweDQzMTRlZTBiLCAweDFlZmQ2ODliLCAweGNkZDI0NzU3LCAweDU3NGU0MjBlLCAweDIxNDc4ODViLCAweDkxZDljNmE0LAotCTB4NDI2OGQzNzQsIDB4ZjJkYjQzNGEsIDB4YjM2OTVkYTAsIDB4NTgxMTM1ZTAsIDB4NTM5N2E2YzcsIDB4MDQ1YjVkNjEsCi0JMHg0ODQzZDlhZiwgMHhmMTNiNjZkOSwgMHhmODczNjI4YywgMHhkZTNiZmU4ZSwgMHhhMmFmODYyYSwgMHgzYWU5OGJlNSwKLQkweDg4YjdlZDA5LCAweDExMTFlNmQ0LCAweDc4YTc1ZmM2LCAweDlkZjg1MTljLCAweDM4ZTM3NmFlLCAweDBiNjJiZTZhLAotCTB4YWJiNjg3MWQsIDB4YzJmMDU2N2MsIDB4YzQ0ZDJiMTIsIDB4ZWZjNzQyZGYsIDB4ZjU5ZDZkZGUsIDB4YjdkNjAzODQsCi0JMHg4NGU5MTk0YywgMHhhMDU2YWQ3NSwgMHhkZTY4NTE1ZSwgMHhlNjA3YWI0ZSwgMHhkMWU0YThkNywgMHg0Njg2ZDJmMiwKLQkweGI0NzQ3MGE1LCAweDAzY2RiMmJmLCAweDFmYWFmM2Y0LCAweDk0ZDdlYzllLCAweGQ1ZDNkMzFiLCAweDQ2NDY3ODg0LAotCTB4Zjg4NGE1ZjMsIDB4NDRiZjY4NWEsIDB4YzczMzI5MGEsIDB4NDA3ZmJmNDQsIDB4MDgxOTA5ZTIsIDB4NjNjNDhiZmQsCi0JMHgyMTRmZjY4OSwgMHg0NzgzZGY4OSwgMHg1ZTE0YWZlOCwgMHg4NDRlYmRjMSwgMHhjNWI3OGFhYiwgMHgyN2JiZmE2ZSwKLQkweDZlYjNiNzhhLCAweDkyMjk0NzhlLCAweDRkNWZlZGEzLCAweGQwM2MwMjFmLCAweDljMDJkNGY5LCAweGNmOTZiYTY4LAotCTB4NGM5MTM1Y2YsIDB4MmVmZjY4OTIsIDB4ZTkwMzcxMWYsIDB4MzUxZWI3ZjUsIDB4M2NjOTk1YWQsIDB4MTg1YWM3NDIsCi0JMHhjNjkzZTMxYywgMHhlZTQyYmNkMywgMHg3ZTQyNWUyMCwgMHgzN2M3MjJiZCwgMHgyNDFmZTY5NSwgMHg2ZjMwMzlmZSwKLQkweDA2MmZlNGQxLCAweDkyZDIxMTNjLCAweDRhYmJmNDAyLCAweGZkNjBiMzIwLCAweGQzNDk4MTNmLCAweDk0YTk1NWYyLAotCTB4NmJkYzI5M2UsIDB4MjEzY2U1YTcsIDB4ODllZTdjMGEsIDB4ZjI3YzJmOTAsIDB4YTdlYzc0ZmUsIDB4Njg1MWZiMDgsCi0JMHhkZmNmYzMzZiwgMHg1NzJmM2I4ZiwgMHhhZjNiOGZkNywgMHgwYWE3ZWQ1OCwgMHg1ODVkYjFmYiwgMHgxMzc5YjUzZiwKLQkweDJiYzlmM2Y0LCAweDFiYjlmYjU1LCAweGQ4NWQ3MWZiLCAweDRmNTdkY2JhLCAweGVhZTdjZmQ0LCAweDdlMjdlYzcyLAotCTB4NjlmODk3YWEsIDB4MDdhNTUxN2QsIDB4NjkxM2UxZDIsIDB4M2UzOWEzYjksIDB4YTVhMjdlZjMsIDB4ODEyYmM5OGIsCi0JMHg0Yjk0OWRmZiwgMHg5NzExNzRiNCwgMHg2MWQxZDM2YiwgMHg5NzQxMmZiYywgMHg4ZmI5M2RhNywgMHgzMGYzY2U1ZiwKLQkweDdjODJjYjg4LCAweDUwNTIwY2E5LCAweDY0MWE0YzJlLCAweDM1ZGNmOWMxLCAweGUxNzI4MWM4LCAweDRiZmUwOWFlLAotCTB4MzAxZTc0ZGMsIDB4NzlhNTQ5MzYsIDB4NzcyM2ZmYzUsIDB4ZjNhNmJhMGMsIDB4YTQwYTQ4MTQsIDB4YzZhNDEzMWUsCi0JMHg4MzMyZDVmMiwgMHg1ZmMxZTRjMywgMHhkYjQ2M2M4ZiwgMHg5MTkxNGMwNywgMHg0ZWJmMzRmMSwgMHhhYzM4ZjQ5OCwKLQkweDIxMzExMzYzLCAweGE5MjI2YzdjLCAweDMzMzY3YTgyLCAweDNhYjRmOTQxLCAweGEwODllNzNkLCAweDg2NmI0ZTA2LAotCTB4ZDEwYmZjNTIsIDB4ZmVjOGQ3N2UsIDB4MmRhZmEwMTQsIDB4ZDAyMGU2ZTQsIDB4OTRhMWFhZGIsIDB4ZjIxMTA3YzksCi0JMHg3MGE2ZjA3NCwgMHg4N2VkYTI1MCwgMHgzYzAwYTYxNiwgMHg2ZmU1MGFjZCwgMHgxZDBhZjhlZCwgMHhmZjhlMzQ3ZiwKLQkweDAzYmY4YzFjLCAweDc3ZDcxZmM2LCAweDVjYjBmMzdjLCAweGI0OTZmOGRkLCAweDE2ZjhkZDYyLCAweGU5NGY4ZTg1LAotCTB4OWRiOTM3N2QsIDB4MzdlMTRmOGYsIDB4ODNlNzkwODEsIDB4ZTZmOGUxYjcsIDB4N2YxYzYyYjQsIDB4NzU4YTQyYjUsCi0JMHhjNzdhZGJlMywgMHhmZGQ2MDE3ZiwgMHgxZmViN2Y1MiwgMHhmZWJmNDEzNiwgMHhmYWZkNTJiNCwgMHhjM2ZlYjYxNSwKLQkweGRmMWYxMTY0LCAweDYzZmZlYjg2LCAweDdmNWIyMTcwLCAweGJmNWIyOTVhLCAweDNiZGJmNTk5LCAweGZlMTdhYmJlLAotCTB4OGZiYWMxYWYsIDB4ZTFmZWI3ZjQsIDB4YmZlYmY1MTMsIDB4N2ViZjVjYTgsIDB4NmRmZjFiMzMsIDB4NzdjN2MxNTIsCi0JMHgwNGVmZjhlMCwgMHgyZmZhZDljYiwgMHgxNWYxYzcyYSwgMHg3NDBiZGZiMywgMHg1NWI2MGNhNCwgMHg2NGY4ZTg4NSwKLQkweDY0ODg2NTA4LCAweDRjM2U1MTk0LCAweDQyMTAyNTQ3LCAweDYxOTFkN2RiLCAweDZjYmI4NzA4LCAweGIwYmVlZThjLAotCTB4NDQ3MzdhNTEsIDB4NTEwOTFkZTUsIDB4YWNmMmEyOGUsIDB4NTk3Y2QzOTIsIDB4ZTQwNTI0ZjMsIDB4Yjk1Mzk2MmMsCi0JMHg3NTRmODhiNywgMHg3NDg4OWI2MSwgMHhhMWNjZWE0ZCwgMHhiYjdjZTk4YiwgMHhlNDIwYzRkYiwgMHgxOTVkZDYxNywKLQkweDIzYmY3MTEyLCAweDlkYTAwYjczLCAweGZkZjBjMjQ0LCAweDZjYzc4N2EzLCAweDk4Y2JhZWQ0LCAweDhmOTVhYTJlLAotCTB4ODhmOGVhNzcsIDB4OTkzODI3Y2QsIDB4ZjNhMmFhOGMsIDB4MzA0NDA2OWIsIDB4NGUzZjlhMmUsIDB4ZjJhMTI4ZTUsCi0JMHg0NzJhN2RmMywgMHhkMzIxM2QyMSwgMHgwZmY3ZThmMSwgMHg4YTI1OWNhOSwgMHhiMTk2NmY5NiwgMHhkZTQ4M2M3ZCwKLQkweDcyMDQ5NTE4LCAweDk3MWNmZDgyLCAweDJmOGZiYzE4LCAweGZmMDA0MjExLCAweGExZGRkNjJmLCAweDU0NWE3YzgwLAotCTB4OGY0MGE3NmIsIDB4ZjFjMDIzY2UsIDB4MGU2ZGQ5MTQsIDB4OWUxMDE0NmQsIDB4MmRjZjgwMWUsIDB4ZmM4NDhhYzgsCi0JMHg5NTM1YTI5NSwgMHg3ZWE4YjY4MiwgMHg2ZGRkYWU4MCwgMHg4NTMyYjQyNCwgMHg3NmIwNWZkNiwgMHg1ZDM3NTBkZSwKLQkweGNjYjNhZGZmLCAweDFmZWMyMjk5LCAweDg0ZDgzN2M0LCAweDliMDY0YzdjLCAweGQ1OTkwOTcyLCAweDRjMWU0ZWJhLAotCTB4OTJjY2I3MzMsIDB4YjRkNGVmZGYsIDB4ZTdkN2VkOWYsIDB4ZTdkNjJkNmYsIDB4NmM5MGU1YmIsIDB4NDRhMzdkMDIsCi0JMHhkZmI0OGQyMCwgMHhlNWY0YWJkYiwgMHg0MmYxMzhlYSwgMHgxZjJiYzMwMiwgMHg2YzQ5MjdlZiwgMHg5YTQzYjdiZSwKLQkweDg4ZGQ5ZjA5LCAweGQ2NmUzOWQ3LCAweGUwNGY5ZDU2LCAweDcxODQ5OTFlLCAweDQ4MWNlY2JmLCAweGIxMDNmZjEwLAotCTB4ZDZjZGRmOWUsIDB4MWNlZjljNmQsIDB4YTAyYmUyZDksIDB4Yjc3Mzk5ZjMsIDB4Y2UzNGYwODgsIDB4ZGQ5ZjczYmYsCi0JMHhkMzRiMWE2NywgMHgyMDY1NGZmYSwgMHg4YzdhZTM0MSwgMHhkNGJiOWZmMywgMHhlYTM3MWViOCwgMHhjNjgyZjM2MSwKLQkweDhjNGU4Y2VmLCAweDliNjgxNGY0LCAweDRkNDNlMDM0LCAweDZiOTY4YWJkLCAweGExYTg3YzA2LCAweDMzY2RiMmFmLAotCTB4ZDA5MmY5NzUsIDB4YTJmZDVkNmMsIDB4ZjJiYTc5ZmEsIDB4YmEyNWI1NDUsIDB4ZWU2YjA1ZjIsIDB4MDVlN2U1ZDAsCi0JMHg5ZmQ1ZDZlZiwgMHhhZTk5NzRiYiwgMHhmYmFhZjZmYywgMHgxNmI3ZTU3NCwgMHg2N2U1ZDNhZiwgMHhlYWViZDdmYiwKLQkweDUxYWIzMmRmLCAweDJiZWMyZTU3LCAweGU1MTNhOGI5LCAweDU0YTJmZmFhLCAweDM2ZGYyYmQwLCAweDk1NDdhMDEzLAotCTB4Mzg3ZTU1ZGUsIDB4ZTk4MjlkNTksIDB4YTYwZjZhZTksIDB4Mjk0ZjgwY2IsIDB4YjM3NjliZmYsIDB4ZGU3MWIwMzQsCi0JMHgyYWVmYzA0NSwgMHg1NWM4NGU5YywgMHg0NjRmYzA2OSwgMHhkM2MyMzdiYSwgMHg2N2Y0ZGY0OCwgMHg0ODdkYWM3MCwKLQkweDUyMDVjYjRkLCAweDg3YWU3MjAwLCAweGY3ZWFjZmVmLCAweDEyMGU1YzczLCAweDcyZDMxY2IyLCAweGY5NmRmMTg1LAotCTB4YzRjOWQ0ZjYsIDB4YzhmMGY5MDUsIDB4ZmRmZjQ3MmEsIDB4ZDcwMTE2OTIsIDB4MWU4YjQwNDEsIDB4ZDRhMzc4MDgsCi0JMHg3MGViYzNhYSwgMHhmNmJiM2NkZCwgMHgyNTdlMzg4YiwgMHgwMDc4ZWVmMCwgMHgwMTMyYzE1NSwgMHgzMDdjMjFmOCwKLQkweDMwMzFjNmVkLCAweGNjNzJkZjFmLCAweGZkYzQwZGI3LCAweDdmM2FhYmI3LCAweGMwMTI4N2MwLCAweDkzZDMwMGFmLAotCTB4M2QzMGIzZDUsIDB4ZjRjN2VkNWUsIDB4NGM2MmVhYzMsIDB4YzJhZWFmZGYsIDB4Mjk3YWIzYjQsIDB4ODNhYjQ3YTYsCi0JMHg3YWE1ZmU5OCwgMHg1NGVmYTYwZCwgMHg1NmZhNjJkNywgMHg3ZmE2M2Q3NSwgMHhkYTYxMGVhZSwgMHg1NGMzZWQ1ZCwKLQkweDM5NWVkYmE1LCAweDRhZjVjODk5LCAweDFkZDNmZmFlLCAweGY5NjdmMzAyLCAweDdiZmE0NDVhLCAweDM3YTNmMjA3LAotCTB4YWNmMWY4MDUsIDB4YTA5MThiZTMsIDB4Y2I3ZDlmMzcsIDB4ZWYyZjQwNGMsIDB4N2E0NjVlMGYsIDB4YzRhZTE3ZTgsCi0JMHg2MTQ1N2E4NywgMHhhYzg3MGE4OCwgMHgxYjU2ZTViZSwgMHg0NGQ1OTNjMywgMHgxYjk1MDlmMiwgMHhhNGZjNWRmNywKLQkweGNjNjhmZTc3LCAweGRhMDEyNDRiLCAweDlkMzNiYzg3LCAweDQxMWRmYTMxLCAweGMzZTc1ZjEwLCAweGM2NDVmMTEzLAotCTB4NzFmMTQwZGUsIDB4ZTViZmQxZmMsIDB4ZjhlN2JmNDAsIDB4MjgzYjY1M2UsIDB4YzI0OTdlZTIsIDB4NWYwMTc4NGYsCi0JMHhmZWUxYjgxYSwgMHhlNWMxZDkxMywgMHhmN2UwNzlmMiwgMHg3ZTE1NDBmMSwgMHhhNjg0NjkxZCwgMHhkMjM3MDQxMywKLQkweDMzNTZkOWRmLCAweGVkOGUwMDkxLCAweGZkYTExMGY2LCAweDg0ZjQzZDljLCAweGM1YmJmNjBiLCAweDg3ZjcyNjI5LAotCTB4YTZhMGUwMzEsIDB4NmVlOTJkMTUsIDB4Njg5Zjc2ODcsIDB4ZDZjZmU3ZDMsIDB4MjgyZGY5MGEsIDB4Mzc3MTNkMzcsCi0JMHg3MmJhMDE4ZCwgMHgwMTFjM2ZiYiwgMHg1NGMxNGZmOCwgMHg4YTcxNjdlZCwgMHgwMDcwZmVlMiwgMHg0NWYxOGZjMiwKLQkweDI5ZDIzYzczLCAweGRlYjBkYmI1LCAweGZkMWU3YjNmLCAweDQ3OWQxM2Y1LCAweGI2ODBmOTJiLCAweGY4NjQ1YjQ3LAotCTB4M2U5MWVkZjksIDB4NTMzZTk2ZjgsIDB4ZWQ0ZjAwMGEsIDB4OWZiMDE3ZjIsIDB4ZWZiZmU4ZGIsIDB4MTJiZjQxODYsCi0JMHgwMzdlZDVlNiwgMHhmY2QwNjIyZCwgMHhhY2RlZjgyMywgMHhmM2I2OGYxYiwgMHhiNDMxMzZhOCwgMHgyNTVlOWZlYiwKLQkweDI3YTU1YzcyLCAweDBiZmVkYTJhLCAweGNlM2I0MDNhLCAweGZkY2JkNmVhLCAweGQwM2U1ZDc4LCAweGVkZDZlYTk2LAotCTB4ZTUwYmYwMDMsIDB4NDgyYzUyN2IsIDB4OWNlNTJmNDAsIDB4YzcyNDdhN2EsIDB4ZWZjZTgxMWEsIDB4ZjQ2MWUwODgsCi0JMHgxNTdhYjAyNiwgMHhlZmM1NGU5NiwgMHgwMGVjMzI0MSwgMHhhZTdlNjAzZCwgMHg1YjllNmY0YSwgMHhmOTcyYTVkZSwKLQkweGU0Yzg3ZmQ0LCAweDlhZmYyODdlLCAweGRhMjcyYWNlLCAweGM0YzA5NTFmLCAweDc4MGJmMzQ0LCAweGQ5NmI3ZTZlLAotCTB4YTc3NzkwNzQsIDB4NWUxZjZjNGMsIDB4NjA1YzBhNDgsIDB4ZGE5MzE0OTQsIDB4M2U0M2QwMWMsIDB4YTA3Y2E2MjYsCi0JMHhmZmM5OGZmYiwgMHhlYzY5NjU3NiwgMHgwNTI2MTE4MSwgMHg4ZDYwYjNlNywgMHhmYWE0MWY3ZSwgMHg1NDVmMmU5MywKLQkweDkyMTdjZmFmLCAweGNlODA5MjFiLCAweDEyNjRlYjBiLCAweGY1MWY4MDEyLCAweGM2MjY4OWU1LCAweDZhYTQ0NTBmLAotCTB4MmIwZmVjMTUsIDB4ZGYzMTNkYjgsIDB4NzRjMWE0NGQsIDB4MWViYjE1N2UsIDB4ZTc0Nzk5Y2IsIDB4Yzk4OWI5NzEsCi0JMHgyZWJlZDU2ZiwgMHgyZmYzNjA0OSwgMHg3YzU0Njk2ZCwgMHhkNjgzZmNiNCwgMHg0MTVjOWZhYywgMHgxNTY4N2RhMCwKLQkweDNiODIxOWY4LCAweDRmMjZlZjA0LCAweGQwZmRmYzVmLCAweGFiZTcxYmY5LCAweGVjN2QxZmVlLCAweDhhOGYzZTdjLAotCTB4MTQyZjgyY2QsIDB4NmYxOTFmNjMsIDB4MTNmZWY4MTIsIDB4MDM1ZTM4NDQsIDB4OTllOGQ2ZWIsIDB4YTgzODczMzcsCi0JMHhmMjg2NzlmOSwgMHhlZmZlNDMwYSwgMHhhMjQ0YjdhNiwgMHg4MjIzYjdhMywgMHg0MGQzNjZmZiwgMHg1ZmEwNWY0NiwKLQkweGYxNDQ1MjA5LCAweGE3ZmQyM2ZmLCAweDllN2ZlOWY0LCAweGIxM2ZkYzY5LCAweGZmYjQyMWZmLCAweDE1ZmY1ZDFjLAotCTB4NDdmZWQ0ZmYsIDB4ZGRmZjk5ZjQsIDB4ZDhhZmZhYjEsIDB4OTA2Nzc1YjUsIDB4ZTdkMjliY2EsIDB4YmExMTc2MWUsCi0JMHg2YTkyOWNmZiwgMHhmZjE0YmM5MywgMHhiYTU2OWJlNSwgMHg0YTRlMGU4MCwgMHhmM2QwMTc0MSwgMHgxZjk4OTBhOSwKLQkweDNmNTc2MThhLCAweDNlMGY0YmQ3LCAweDBmNzYwMDg3LCAweDNmZmI0YWZjLCAweDMzMDNmNGZkLCAweDYyZjk3ZjYwLAotCTB4N2I0NmVjOTMsIDB4NmMzOWIzNjYsIDB4ZDk1YWZjYTYsIDB4OGM5ZDMyNWEsIDB4OTYzMWZjYzUsIDB4MDg4OWZkNWYsCi0JMHg3ZDNkMzZmOSwgMHg3MGY1M2U5NiwgMHgyOGM3ZjgxMiwgMHgzZjdkNzBhNSwgMHg2NTUyZmE4YywgMHhiMDc5NDdkMywKLQkweDA0NDgwNGZmLCAweDBlZDhjY2Y5LCAweDgwOTczZmM2LCAweDEyOWU3MWYyLCAweGNlOWNiN2Q3LCAweDAwZjBmNTEzLAotCTB4ZjVhMDRiODcsIDB4ZjA0NDRmODEsIDB4ZTY0ZTkyNGQsIDB4MmZkNDM0YTcsIDB4Yzg0ZjdhZTYsIDB4NGUzYzRjZTQsCi0JMHg2ZmYyM2M1NSwgMHg1ZTQwZGZlNCwgMHgyMTIwZjBhYSwgMHhiYjg4ZjdhNiwgMHg3NjBiMWIxZSwgMHg3ZmQzNTc2YiwKLQkweDljMGQwNGI4LCAweGRiM2IzZTU0LCAweGU3ZjFlMGIyLCAweGUzY2JmZDNkLCAweDQ1ODc2ZTZlLCAweDlkYjA4NWRiLAotCTB4NmJlYjhkYTcsIDB4OTcyZDJjZWQsIDB4NjNmMDJlYzMsIDB4ZGVjYTM3OTYsIDB4YmU1Y2ZkMjAsIDB4MWYyNzg5ZjUsCi0JMHg2ZGYyM2IwNSwgMHhkYTYyZjdiMywgMHg5N2Q2ZDk3ZiwgMHhlNjgxM2NmZSwgMHg4OWM5YjZjYiwgMHgxYzMyZDlkMywKLQkweDJmMTQ1MjQyLCAweDY5NmZmYTAxLCAweGE1MGYxNDY2LCAweGYxNDk3ZmJmLCAweGVmZGY2MThjLCAweGEzZTI4ODRkLAotCTB4ODU3ZWRiNmMsIDB4OGYwYmU5OGMsIDB4OTVmYjJkMjksIDB4YmMwYzQ3NGUsIDB4MDNjYjFjYjQsIDB4ZjVkYzRhYmQsCi0JMHgzZjc4MDI4ZCwgMHhjOTIwNGZiNSwgMHhkOWUwMzFlOSwgMHgwN2VhMTJmOCwgMHgyM2M0MjcwMCwgMHhkZTJmNTNjNywKLQkweDE0MDNmNTBjLCAweDU1Y2YyMDJmLCAweDk3Y2IxOTNjLCAweGZkMDM3OTczLCAweDNkMjM0Njc5LCAweGY4M2NmYjNmLAotCTB4N2IzMWRmN2QsIDB4Y2ZjNWZkNjEsIDB4NzU4MmU5ZGUsIDB4MThhYTkwOWMsIDB4MzJiNjNmNWQsIDB4MmRjNzQ3YzksCi0JMHg2ZTQ5ODM5NiwgMHhlMmY3ZDk0YywgMHg3YTQzM2YwZCwgMHg2N2ZkN2EyYiwgMHhmMzVlY2M0OSwgMHg2ZjcwOWFhNSwKLQkweGZhYzJhNjBhLCAweDhjZGMzNTE2LCAweDdlMjQyYmViLCAweGM3ZTJiYmE0LCAweDhmOTAwMmM0LCAweDdmMjQ0YjlmLAotCTB4YjhiZTBjNWIsIDB4NzE3YzY0NTgsIDB4YjQ1NTIzNjIsIDB4ZDA0ZWZhZTgsIDB4YTBmZDA3NmQsIDB4NmQwYzViZmYsCi0JMHgxZGM1N2Y0MiwgMHg2N2ZmZjgwNCwgMHgyYzlhZmZhYSwgMHgxNmU3ZmNjNiwgMHg0ZGFmYTc4NiwgMHhiNTRmOWVhYSwKLQkweDM2YmQyZDNjLCAweGZjMDBlZWFkLCAweDRiZWExZTljLCAweDgwNTczZjA2LCAweDBmMGU0MTQ4LCAweGFmZGEzYmUxLAotCTB4NjRiNGZhZjgsIDB4OTFlMjFmODYsIDB4YWEzYjc4NzIsIDB4ZWY4MTRjMDcsIDB4ZjY0M2JmNTAsIDB4ZGFlYWM3NTksCi0JMHhhM2QyZWY5MSwgMHhlM2UxMmZlMywgMHg2MGRiNzlkMywgMHg0NDkxM2VmZiwgMHhhYzYyNWI4YSwgMHhmMmE4YTY2ZiwKLQkweDM1YzdkZDNkLCAweDZmZTFhNWY0LCAweGY3NGRlZmM2LCAweGY5NTZmZTMxLCAweDFmMzMzNDNkLCAweDgzN2IzZmNhLAotCTB4ODNiNDBmZjEsIDB4MmJjZTkxZmQsIDB4ZmJlNThjOWMsIDB4MWU1MDEyNmYsIDB4MTYzODQ5OTgsIDB4OWNjOTM3NWYsCi0JMHgyYWU1ZjVhZiwgMHg0Yjc5ZDA5ZCwgMHg1ZTg2OWM0MiwgMHg4NDA0ZmZhMCwgMHgwYWI3ZmEzZiwgMHg4ZDNiNjhlYiwKLQkweDc4YzAwY2JjLCAweGE5ZmRiZWFlLCAweGY5YzQ1YjdjLCAweGY5ZWEyM2RmLCAweGJlMzAzNDlmLCAweDBhYmY1ZmVmLAotCTB4MmU1NzNlZTIsIDB4MTQ3YzllODcsIDB4NjdmMjk1ZjgsIDB4MmFmYzAzZDAsIDB4Y2ZiYWMwMTcsIDB4ZjNmYzFmMzQsCi0JMHg5YzlmMjk0ZiwgMHg1NGY5NTE2OSwgMHg3YzhkM2YyZiwgMHg1YzdkYmM1YSwgMHhiMzNkM2U0YywgMHg5ZjM2MjMzNiwKLQkweGY5MzFlZmQyLCAweGQzZTMyZDc0LCAweDUzZjI1YmZmLCAweGMwM2U1Zjg1LCAweGZjMjhmMmVmLCAweDFmZDg3OTU0LAotCTB4ZjBmMjhkMWMsIDB4ZTEwNzkzMjMsIDB4ZjQ4Nzk0NjksIDB4ZDM5MjBkZTcsIDB4YmE1NGZlOTcsIDB4ZjRhZGU5NTMsCi0JMHg0MDhiOGE5OSwgMHhhNWQyZjRlZSwgMHg3NGJkNzc0YSwgMHgxZjVkZDJhOSwgMHg3ZTBlODhmZiwgMHhhMDA0ZjJjNiwKLQkweDA1Mjc0YTA1LCAweDBkZTQ4ZmJiLCAweDZmMmNmOGE2LCAweGI0NDBlNzY3LCAweGE3OTBjYmRkLCAweDM2ZTFmMjcwLAotCTB4MWU1ZjZhNDYsIDB4ODdjZGE4OWMsIDB4NDMxNmY5MGMsIDB4NWYyMTlmN2QsIDB4MzdlZmE4NjAsIDB4ZjUwY2FiZTQsCi0JMHhkMDNmY2M0MywgMHg0ODIxNTA3NiwgMHg3ZDVkNjEwNywgMHgzYTA5Mzk3OSwgMHg1N2I3MmZjMSwgMHg4N2FmZmI0NCwKLQkweDZkMTU3OWNlLCAweDFlOWNkM2RmLCAweGIwNzk1MjBhLCAweGVhZWNjYWQyLCAweDE1NjU0MGM4LCAweDc3MWVhZmM4LAotCTB4NzkwMDk1YzQsIDB4N2I2YmQzMmIsIDB4NzhhZTIyMGEsIDB4YWM3ODdlOGQsIDB4ZGJmOTQ0NWQsIDB4NWFmOTIyMTksCi0JMHgxZjk0NDU3ZiwgMHg5ZDdmMTA2YSwgMHhlNjcyYmZhNCwgMHgzYTI2OWM2NywgMHgzZDgyOTZkMiwgMHhjMTdhMmI1OSwKLQkweGVjYjg1ZDQ0LCAweDNjYjgxNzE2LCAweDVmODdkYTdhLCAweDVmN2U4YjNmLCAweGUzYzQ1ODc0LCAweDZiOWIxZThiLAotCTB4MDQ4YmNjMmMsIDB4YzZhYTUyN2QsIDB4ODI0OTM4MmUsIDB4N2UwODlkYmYsIDB4MWY2Njc2YzMsIDB4ZDA2YjVjMmMsCi0JMHhhNDVhYzgyYiwgMHgxMmM3NDI4YiwgMHhkNTIyZTQwNSwgMHhmYmQ3ZGZlNywgMHg5NzdkMTk0ZCwgMHgxYjhhZmVmMiwKLQkweDdiNmFlNWY0LCAweDNiMDIzOTM4LCAweDVmNDliNGFkLCAweGNlNzZlN2VlLCAweDY3YmQyYTkzLCAweDE3OTQwYzkwLAotCTB4N2Q4MGMwNjAsIDB4MzRlYmU1Y2QsIDB4YjNmNWY0NzEsIDB4MGU3YmZjMjgsIDB4ZTVlODA0ODksIDB4ZjA4OGJiNmMsCi0JMHhjZWNjZGIzZiwgMHgyMDcwNDkwOSwgMHg4OTI1NGRmMiwgMHhlMTUzNWNhMCwgMHhhMTdjMDVkNCwgMHhiYTc3MmZmNCwKLQkweGU3MzVmYzc2LCAweDdjYTU1YTFlLCAweDdmNjNiYmU3LCAweDlkYWVkMzQ3LCAweDAzZGM4ZjZmLCAweGE2NmY1ZGY5LAotCTB4ZDZmYTRiYmQsIDB4OGFjZmIyOWYsIDB4N2Q5ZWQ5ZmUsIDB4ZTk0ZjNjNGUsIDB4ZGE2YWZiZDksIDB4NmRkZjkwM2QsCi0JMHg3YjNjYzJmNiwgMHgxNjM5N2RmNiwgMHhiOTY3YTdlOCwgMHg1NmU0MThiOSwgMHg3ZjhhNTBjZiwgMHhmZGVjZDY5YSwKLQkweGVlMjc2YzcyLCAweDZmMTAyYjkzLCAweGQzMGE4YmFmLCAweDc2ZmZkYTczLCAweDk0ODQ0ODU0LCAweGZmZjYwYWFlLAotCTB4MzNmNDc2N2QsIDB4YTJiNzllMDQsIDB4ZWY2N2EwN2YsIDB4Yzc3ZTM5OTcsIDB4OTUzZDZmM2YsIDB4YzdhNGRjZmMsCi0JMHg4NzZkNjY0OSwgMHg3ZjMzYzVmOSwgMHhmOGNmNjA3MywgMHhiOWMxOTYyNywgMHg2NTdlZWI2ZiwgMHhmMjlmMmQwMSwKLQkweDQxNjMzN2MyLCAweDY3NmNmNjFlLCAweGRjYjc0ZDdhLCAweDA1Y2UwMWI5LCAweGVlZjM1MmZlLCAweGI5YzI5OTMyLAotCTB4MTA2Mjk4MWIsIDB4ODYyYmI5OTUsIDB4NjIzYTBlNGMsIDB4ZjQxYmU1YzEsIDB4M2MyODVjN2IsIDB4MDY3ZmZkM2UsCi0JMHhmNzllMDIxZSwgMHg0MzNiYjc5NSwgMHhmZGQ2MDExNiwgMHg0MTc3ZDFkNSwgMHgyMzMzZWMwZSwgMHgzZGViYWE1ZCwKLQkweGY1MGNiMmQzLCAweDNiYWRmMzhlLCAweGY1ZjY2MjQxLCAweDBiNzU5Y2ZmLCAweDc3NTkwYmUxLCAweDhkYWZmNDg2LAotCTB4MDdhMjVkZWYsIDB4ODNlNDYyZjEsIDB4ZjdiZTc0YmUsIDB4NzU2ZmNjMmUsIDB4MTdiZTcxN2EsIDB4ZmYzM2VmNDgsCi0JMHg4M2ZmZDdjNSwgMHhlMjlkYmVmMSwgMHg3NWZlNzVkZCwgMHhhZjhiZmQ1NywgMHgxZmJjN2ZiYiwgMHhlZWYxYzM5ZSwKLQkweGMwZjU3Mzg2LCAweGZjZTBkZjBiLCAweGFiOWNhODdlLCAweGY3ZTcxN2ZkLCAweGVhYWZkNmZlLCAweDc5MzA3ZmU3LAotCTB4ZjVhMGM4ZGUsIDB4MDNhZDQ5ZjMsIDB4MmE2YjhiMTQsIDB4YTBjZTFjMGUsIDB4NzIxODdmYTUsIDB4M2JlNjFlMzAsCi0JMHgxOGMzOWY5OSwgMHgxMjVmYjdlNywgMHhjMTY0ZmRiMCwgMHg4OTFkNzY4NCwgMHhjNzVkYjgxNywgMHg1Y2MxYTFlYywKLQkweGE0YmMxODdmLCAweGMxOTBmNTEwLCAweDdhNjQxZTQzLCAweDgzYTllNDgzLCAweGE0M2ZiZTczLCAweGNjNjJmMDJkLAotCTB4Y2I3Y2M5MDIsIDB4OTVmNzc5MGYsIDB4MGJiN2FmM2MsIDB4MWYxMDI3N2YsIDB4NGUwZTQxMWMsIDB4YTA0M2Y3ZmIsCi0JMHgyMjE5MGU5ZiwgMHg1MzRhZmVhMiwgMHg3NDVmNWJkNCwgMHhlNWVmYjNlNSwgMHhiOTdlY2U4YSwgMHg2N2I3YTNjNiwKLQkweDc2ZjUxMmYyLCAweGRmZGU1NGNmLCAweDNmZTZjMjM0LCAweDQyODQyMWNkLCAweDg3OTMwZTE0LCAweGZjMTEyNmZlLAotCTB4OTYyZjkzOWMsIDB4NzlmMzQwODksIDB4ZWMwMmJmYzQsIDB4N2QwZWE5ODQsIDB4MTljMThmN2YsIDB4NTgwZmM2OGMsCi0JMHgxNmJiNjk2NCwgMHhhZjE2ZGZmYywgMHhkMjVkZmQ4MCwgMHg2Mjc5NDI2NSwgMHgwZTkwMTZjOSwgMHg5ODRiZDU0NiwKLQkweDFlZTRkZDdmLCAweDcxOWU3MDA3LCAweDc3MzNhZWM1LCAweGZhOTdmMDEzLCAweDUyOGYxNjE0LCAweDVmZGVmY2MwLAotCTB4NDRkZGY3N2YsIDB4ZjBlMmUzODgsIDB4YWVmZmEyMmIsIDB4MDM2ZWZmMDMsIDB4N2FlOGRiMDksIDB4MTgyNDQ5MTcsCi0JMHg0ZWZlMDA5NywgMHhmM2FmYmM4MSwgMHhmMGYzZWE3NywgMHg2OGE0ZTNmMywgMHhkZmFiZTczZiwgMHhiM2ZlMWQxZiwKLQkweGVlOTQ1ZGQzLCAweGRiYjBhN2RmLCAweDFjMDhlOTBkLCAweDUzZGFkMjVlLCAweGUwY2VkNmZmLCAweDg0ODU3ODE1LAotCTB4NmVmM2IxODYsIDB4MmU3MzQwYjEsIDB4ZWNjY2E5NzQsIDB4ZDk3ZjVkZWUsIDB4Y2NmNjA1OWUsIDB4NzFkMTllYTQsCi0JMHhhMDQ3MWY4YywgMHhmYWUwMTk3ZSwgMHg4OWUyNTllNSwgMHgxZjgwM2FmMywgMHg3OWUxYzc4NywgMHgxOWQxMjFkNywKLQkweDBiNmJkZTJiLCAweDgxOWViM2I3LCAweGY2OWE1MDczLCAweDExNWE5MTM0LCAweDQxMTI3ZGY0LCAweGM5YjA1ZGZmLAotCTB4ODhjNTM2NDIsIDB4NGQ5NDQ4M2IsIDB4ZTM5YzVjZmMsIDB4Mzk4OGZlOGQsIDB4ZTM2Nzg3ZTAsIDB4ZTM0ZGEyMmYsCi0JMHg5YWViNzhiNCwgMHhkYjFhNGE3ZSwgMHhmM2YwMGYxNywgMHhlMjFjZTZiZSwgMHhkODJmODUxZiwgMHgyZGRmMDA3NSwKLQkweDgyYmNjZWQ2LCAweDkyM2I3YzE4LCAweDgxYzY2ZmMzLCAweGJlOWVkMGFmLCAweDA0ZDFiZGFjLCAweDkzNTk3ZTdjLAotCTB4OTY5ZTc3NDksIDB4M2RmZDczMjYsIDB4YmNjMjY0OTMsIDB4M2FiMDFjNjYsIDB4ODcyZjAxYjMsIDB4ZDljNDJmNDQsCi0JMHg1MTNmZGEwNSwgMHg4M2NlMzFmYywgMHhmZTg0ZjA4YywgMHg5YjdhOGZjMSwgMHhlZDc4NDZlYywgMHgwMDE2NWI5MSwKLQkweDZjN2NmNzVjLCAweGVkNjc2MDIxLCAweDYyY2I2YTU2LCAweDBhNGZmM2NkLCAweGQyMjJlNzliLCAweGY0ZDhlNzcyLAotCTB4NGVmODNkN2YsIDB4Mjc4NDcxZWEsIDB4NDRkMmJkODMsIDB4ZDJmYmFmOTAsIDB4M2UzYTQxMWYsIDB4NDA4NDk5YmIsCi0JMHgwMzdkODMxZSwgMHgzMzZjZTE3MiwgMHg4MjgwZmRjMSwgMHhkM2IwNDFlNCwgMHhhNTVmYmYyOCwgMHg2OTJmZGZiNSwKLQkweGVjMGNmNmRiLCAweDgyZWQ5NTIzLCAweDk1Y2I1YzFiLCAweGZlMDJhNzUyLCAweGJjNWI0MGI5LCAweGMzM2I3MjA4LAotCTB4YmEyMWM2YTMsIDB4ZTFhNGRjYzcsIDB4MDk2NGRiOGIsIDB4YzI3MDdiZTEsIDB4ZGM2MTViOWUsIDB4MDIxNGJiNGYsCi0JMHhjNWVmOWFmYiwgMHhmZWU0MGI4OCwgMHhjODU5ZWRhNywgMHhlYmFkZmQwNywgMHhkYWU0ZDVmNywgMHhjM2Y0MTJhOSwKLQkweDFlOTE5YWU0LCAweDc0ZGIzNzQ2LCAweGZmNDQyYmY5LCAweDE5YWZlMDIwLCAweGRlMjVjZWU2LCAweDk2ZmJmODE4LAotCTB4Y2IwNWQ5ZDMsIDB4NjdmZmQwYjcsIDB4NTUwZGVkZjIsIDB4MDJjNWY5YmUsIDB4MmNiZDFmMGQsIDB4MjM1NTdkYjMsCi0JMHhjOTYzOTJkZiwgMHgyNzgyYzViNywgMHg3OGJlZTAxOSwgMHhjMDY0ZjBlZiwgMHhmMmMzZTJlYiwgMHg2ZGYyNThjMCwKLQkweGRmM2IzNTZiLCAweDhmYzc4ZTdhLCAweGY5NTJiNGY2LCAweDdjOGQyM2Y2LCAweDJkZjJhNTZiLCAweDhiN2ZmOWM2LAotCTB4Y2Y1ZmZhYWMsIDB4ZmY0MmRmMjMsIDB4MTViN2ZjM2QsIDB4ZjU4YzViZTQsIDB4NTNmMGU0MWUsIDB4ZjZkOGRiZTUsCi0JMHhjNmRmMjg2MywgMHg3MTc0OWFiNiwgMHhkY2NiY2Y5NiwgMHg3Y2FmZDk5ZiwgMHgwNGRlMDYxMywgMHhkOTIxZDRmYSwKLQkweDNmNDE4ZjZiLCAweGY2ZmViOTViLCAweDgxOWY4ZjFjLCAweDdkY2U0MDcxLCAweGRjZTUwM2Y1LCAweGU3MmExNzNiLAotCTB4YWNlMDliZmUsIDB4M2JjNWI5Y2EsIDB4ZjY5ZmM2MDgsIDB4ZTcyNjQzYTUsIDB4NzJhNmVmMTYsIDB4NjQ3YTAwNGUsCi0JMHg1ZWYxNmU3MiwgMHgwNjM4ZmNjMiwgMHg4ZmFhMzZmOSwgMHhiZjU4MjM3YywgMHgwN2RhY2MzMiwgMHhiOTFmZDJkYSwKLQkweGU5OTdmNjhkLCAweDVhMTZiZDkzLCAweGVmMmEzMzNmLCAweGRkZTU2OWM2LCAweGJiYzlmZDU3LCAweGVmMjYxNzQzLAotCTB4NDc3OTcwNzYsIDB4OTAzMGQ4ZTUsIDB4ZjBmYTQ2YWYsIDB4NzRlM2ViYjYsIDB4ZDEzZjhjZjcsIDB4OTdlMDdiZmMsCi0JMHg2NzNjNDU1NywgMHhjZWM0ZGQ3YSwgMHhmZTM0ZmUwNSwgMHg1N2QwMzY0NCwgMHgzM2U2YzI4MSwgMHhkN2Y0NjE0MiwKLQkweGZlYzQxZDVkLCAweGQ2YzhiY2E3LCAweGYxNjBlMTU3LCAweDRjYWQ5NWJiLCAweDE2NmNhYzNmLCAweDZiZmExZTQyLAotCTB4ZjBhZjg0ZGUsIDB4YWY2NGE4YmMsIDB4N2U2OTkyNDAsIDB4MjdkNTk5YTYsIDB4MjRlN2E5NGYsIDB4ODY4NjdhNjQsCi0JMHg5NmU2MTYxZSwgMHhhMTc3N2ZhMSwgMHhiZmUwMmM0NCwgMHg5ZGU0NzMyZCwgMHgyY2I2M2QwMiwgMHhjYjdiZjk5NywKLQkweGMzOTJmN2Y4LCAweGRmYzBhYjlkLCAweGMwNWViMjU5LCAweGVlMzUzMjczLCAweGVjYmY4ZDUwLCAweGJlZGU1ZTczLAotCTB4YzY4MWZkMGMsIDB4M2MxOWYzNzMsIDB4MzNjNjY2NGUsIDB4YzYzMWE4NDIsIDB4NjZkOTdmYjksIDB4YTcxYTdlN2QsCi0JMHgyNzYyOTllNywgMHgyNmJjOGJjMiwgMHhlMGM1Mzc3YSwgMHgyZjVlYjUxZiwgMHgzODcxMGU5YywgMHg5ZmI4ODkzNSwKLQkweGMyODljMmY2LCAweDE3ZGU5M2NkLCAweGQzZDMxNDRlLCAweDcwYTI5MjMzLCAweGFlOTU3OTI5LCAweGY1ZmZiYjM3LAotCTB4YWUzMzcwYWEsIDB4OTY3N2Y1NWIsIDB4ODNmYTdlZjEsIDB4M2VlNzBhODMsIDB4Mjc3MGU3ZWIsIDB4ZDI3Mjg0MjQsCi0JMHg5NWFiOGYwOCwgMHgxNjY4M2Y1ZSwgMHhiYTUwYTdjNCwgMHhmYzEzMzk0MSwgMHgwZDcxODhhMywgMHhkNjJlOTMwNSwKLQkweDhlYjg0M2RkLCAweGVkNTY0ZmQzLCAweDhjNzAyOWE0LCAweDdkZTIxMzNkLCAweGZlYWRkY2UxLCAweDZlMjE5NzhlLAotCTB4OWU1YmRjNmYsIDB4YWY0ZWQ4NGMsIDB4YzNmNjYwOTgsIDB4NmIxNmRiZjksIDB4NGFhMGU1MDQsIDB4ODc0MDhkODcsCi0JMHhmMGY3YWUxNCwgMHhhYTBjZjY3ZSwgMHg2MTc2OGM5YSwgMHgzZDA2ZTA5YiwgMHgyMmI2MTAyNCwgMHhhZTE0MDM1YywKLQkweDIwMjQyZjcwLCAweDI4MDZmYzMxLCAweDFkZmYwMjNkLCAweDgzMDVmZjVjLCAweDAzYzE1ZWUzLCAweDc1M2M4MGZlLAotCTB4ZDBiYzAyYmYsIDB4MGNlZDU5ZmEsIDB4ODA5MDgxMmYsIDB4MTEyNmM5NzgsIDB4ZDY1N2JiZjQsIDB4YzAzMGRlMGIsCi0JMHhlMTExYWRhZiwgMHhmYTY3Y2FhNywgMHg0OWUyZDBlMywgMHgyYzUyYmY0MywgMHg5YTRhYzVmYSwgMHhkNzhjYjJmZCwKLQkweGZkYWU2MTliLCAweDhjZjNkMDMzLCAweDg4ZDI2NGE3LCAweDdkZmZhNmUwLCAweDI3OWYzZDFmLCAweGE3ODhjM2ZlLAotCTB4YjZiYzM5YzcsIDB4MDAxZDNjMDIsIDB4YmJkMzA4YjcsIDB4M2RlMTVmYzIsIDB4MjAzY2I1MTUsIDB4OWNmMDc1MDUsCi0JMHhlZmI5ZThmMiwgMHgxNTM4ZDc4NSwgMHgyMGM3NDA1ZSwgMHg4OWU3ZGFkZiwgMHgxMzZjMmY5MCwgMHhiZWY0ODBjOCwKLQkweDMwNzM4NWViLCAweGVjOTdiZjJkLCAweDdmZmFjNjNkLCAweDE4OTJmMDRjLCAweGJhNjBiZWViLCAweDhiOWU4N2VlLAotCTB4N2Y4MmRkMjksIDB4MzZiYTNmYmQsIDB4ZTE1MWE5YzIsIDB4ZTdhNzI2ZmIsIDB4YWYyMzU5M2YsIDB4ZWYzZDAxNjQsCi0JMHg0OWNmOTAxNSwgMHgzY2VlYmM3YiwgMHhmNGMyYmY2YiwgMHg0YTU2MmQ4OCwgMHg5MWRkNzRmNywgMHhhMzc3YjJjMywKLQkweGQ4M2NhZmE3LCAweGY2MGJlMWNlLCAweGQwMWVmNjgzLCAweDg4MTBiMGE1LCAweGMxNmNkYzBmLCAweGM3OWMyZjM4LAotCTB4NmE5ZmE2MzAsIDB4MmI1NmYzZTUsIDB4NzY1Mzc4MTksIDB4Nzk4N2ZkZmYsIDB4NDdlOWZkZmYsIDB4OGMwYzdlNmEsCi0JMHg2ZGNkNzEwNywgMHhkMTUxYmM3NCwgMHg4M2ZiOGNmMSwgMHg2ZjlmZjc2YSwgMHgzOTcyYWY1ZCwgMHg0YmFlZjdmNywKLQkweGM2ODdlNzFkLCAweDA3NDgwNGMxLCAweDg3OGQ1NWUyLCAweGM3ZjgyMjM5LCAweGU1Y2ZhMGM4LCAweGFlM2U5MjBiLAotCTB4ZDZlNWMyMmMsIDB4MWZmZmRjM2YsIDB4OTI3ZmFmYmYsIDB4NGU3YmM2ZTIsIDB4ZWZkNWJhNzcsIDB4MDJjZmE0NmUsCi0JMHg0MWU3ZTEzNywgMHg3ZDg0ZGYxMywgMHgzYjFmNTNmZiwgMHg5MTM2Y2FmNywgMHhmZjYxMTMyMywgMHhhMDEzMmM5OCwKLQkweDkxNWY0ZmFiLCAweGU5Zjk2ZmQxLCAweDc5NjcxNjU0LCAweDI1MDdhYmZkLCAweGNmNWNkZDcwLCAweGY1YzhhMTYyLAotCTB4YjNiNDA0ZTMsIDB4YzdhZTg3NWUsIDB4MjE2ZTFlODMsIDB4YmYwODkxYmUsIDB4OTU0ZmI4MmMsIDB4YzUzYjU0ZDEsCi0JMHg3MzNhZjk0MywgMHg1MjA2YTg3MywgMHhlMjQ4OTRlZiwgMHg5MzZmMDA5ZiwgMHhlYjc4MDI0NCwgMHhlMjk4MGRmMCwKLQkweDNmM2JmOWEwLCAweDMyZTAxOTIyLCAweGI2MDFmYWEzLCAweDA2NDQzY2NmLCAweGJlMDliZDQyLCAweDhjYzY2ODgxLAotCTB4OGRlY2ZkNmYsIDB4YzYzY2U5MWIsIDB4M2Q3YTIyYmYsIDB4ODNjY2RlYjQsIDB4ZmFhMTA3MGUsIDB4MTMwNmE4ZjQsCi0JMHgzNWUwNmJmMSwgMHhjMDZhODQ4MSwgMHg0M2ZlMzQ2ZiwgMHhlZjMwOGRkZiwgMHg0MGVmYWE2MiwgMHg3YjcxN2VmYywKLQkweGYyMGI4ZDYzLCAweDBmYjYwMjBkLCAweDJlNzlmZDA0LCAweGY1YWQ5ZWJhLCAweDBlNWRlNDlmLCAweDgzZDY4MTcyLAotCTB4YWMwZDAyNmUsIDB4ZjA0OWEwNWUsIDB4NjE2YTQ4NDIsIDB4ZTUwNTNhZmIsIDB4MTc4MDkzNDYsIDB4MDQ4NmI2YmQsCi0JMHg4NmZkNjE2MiwgMHhhZGRmYjQyYywgMHgzNjdkYjQwZCwgMHgzZGI0NWZlYywgMHhjOWY0ZGJmNCwgMHhkYzgyMzcxYiwKLQkweGY2YzRmM2ExLCAweGI2M2NlY2NkLCAweDAwZjNiNjkwLCAweDgxZGQzNGJmLCAweDA4MzQ5NWZkLCAweDE0MTllZTA0LAotCTB4YTk3ZGIzMzcsIDB4MGJkOTE1ZjgsIDB4ZDdmYmFkZTUsIDB4OWQzYjdlZTMsIDB4MGU5YTk3OGUsIDB4MmE3ODUwZmIsCi0JMHgxMmM4ZDdkZSwgMHg2ZDhmNzhkYywgMHg1ZmM0NTBmYSwgMHgyM2Y4NjEwZiwgMHgxYzk4NDM4OSwgMHhkYjllNzgxMywKLQkweGY3ZGVhYTNkLCAweGU0MzBmMzJiLCAweDMyZWY0MjgzLCAweGU3ZWQwMDY1LCAweGQzMDNiOTRmLCAweDlmNTc0ODRkLAotCTB4N2RhN2EwMjgsIDB4YTdlZGUxNDgsIDB4Yzc5ZDdlZjAsIDB4ZmRjYzFjMjksIDB4ZWNkNGU5NDAsIDB4ZTFlNmNkOGIsCi0JMHhkYjYxN2VkOCwgMHg1YTdmOGMyNCwgMHhmY2YwMGE0NCwgMHhhNjc4YzY3ZSwgMHhhNTc2YmU2ZiwgMHhiYWZlMDQzNSwKLQkweDEwYzhlNGQ3LCAweDRhZjA3ZWY4LCAweGRlZWY3ZTMzLCAweGY3NzBlNGNhLCAweGNmZjQ0ZWQwLCAweDA5OTA2ODllLAotCTB4NjlhODJmZGMsIDB4OWM1ZTUxMTAsIDB4YmNmMTk2NjgsIDB4NDY0YzdjNWEsIDB4OTViNDVkYjksIDB4MWIwNzFmZTksCi0JMHg0MDI3YmY1OCwgMHgzOTNmMDM2ZiwgMHhkMTdjZDM5NCwgMHhmYmRiODExNiwgMHhmNmFiNGU0YywgMHg5ZDliYTE2NywKLQkweGI3NzJhYmJiLCAweGNmYmJhZjgyLCAweDRjYjc1NDNlLCAweGNhMzU5MjAxLCAweDhmMmUwYWRiLCAweDAyYTRhOTRiLAotCTB4ZGRjYTMzNDIsIDB4NzU3NzM4MGEsIDB4ZTMxYTVmMDEsIDB4M2I1MTFjODMsIDB4ZmMyMGU4MDYsIDB4ZTU3NWQyMTUsCi0JMHgzYjAxMzIyYiwgMHgyYmEwZjg0NiwgMHg2YTdkZTYwZiwgMHhlZTdlODBhZiwgMHgwZjgyZWRmMSwgMHhkZjhiYmRjZSwKLQkweGZmNTA4NzMyLCAweGZiOWJjZDBlLCAweGRlNWZkODBiLCAweDU1MDgxMzM2LCAweGEwNzgwZTNkLCAweDFjZDcyYTcyLAotCTB4ZTg2ZmNiZjksIDB4NWJhZjUzZjcsIDB4ZDI4NDEyMjAsIDB4YmI4NDNjY2QsIDB4YmQ5OWRmMWEsIDB4NjQ3MWM1ODksCi0JMHgwNDk3NWViZiwgMHhkNGM5MmNmNywgMHg4YTA3MjgwMSwgMHhkN2UyNDVlYSwgMHg4MjUzODljOCwgMHhiMjlmYzZlZiwKLQkweDhkYWRjMWZkLCAweDZhNTZjY2UzLCAweDNkN2Y2MTBiLCAweGQxZjI2NjZhLCAweGQ4ODY0OWIzLCAweGNjZDJiMjA4LAotCTB4MGZiNTM0ZTQsIDB4NjRiMmZlMzAsIDB4NDUyNGJhZjcsIDB4N2IyNTA3NDMsIDB4ZjQ4OTI1ZDcsIDB4MDcxZTJhZmIsCi0JMHgyYmZiMDM1MSwgMHhiMGEyNTc2ZCwgMHgwOWY2NGE3MSwgMHgzOGNkNDZlZSwgMHhiZjZhM2Y2YSwgMHg2ZWQ2NmVjYSwKLQkweGY2OTY1ZWY4LCAweGNjMDk3ZmQ3LCAweGI5ZjlkNzBmLCAweGQ4YzJmMjAyLCAweGZiZjE5ZjRmLCAweDNmZjcyN2U5LAotCTB4NzQwOWQ1Y2YsIDB4ODlhZmI5NWUsIDB4ZmI5Y2E0MTgsIDB4ZGFlMWY0YzEsIDB4NTUzNTAwNzMsIDB4ZGU3MjE1ZTMsCi0JMHgwNjlmMTEzMCwgMHhiMTdmYjk3ZSwgMHhkZjA2OWYxMSwgMHhkZjI4ZTNhZCwgMHhkNzVkZmM1MywgMHgwMmFjODQyNiwKLQkweDE1Mjk4ZmU0LCAweDAzNzc5OGQ5LCAweGZmNzI1NzlmLCAweDc2NTRlNTczLCAweGYxOWFkM2JlLCAweGZiZTAwYWZhLAotCTB4ZDIwMmQ5ZTksIDB4OTVmYTA5MDMsIDB4YWZhODg5MDEsIDB4YjhjZTIwNzksIDB4MmZiNTliMjgsIDB4MWY4MWVkYTIsCi0JMHhmZTMzZDc1YiwgMHgwM2MyNzJhNCwgMHg2MWIyYTQ3MiwgMHg2ZmQ2MWU1ZCwgMHg3ZmQwM2MxMiwgMHhkNDNjZTM2YiwKLQkweDQ1NzM4YTQ3LCAweGM3NGRlNTgyLCAweDZlMmEzZjUwLCAweDdjMDg5NjNiLCAweDBlYjZmOTRjLCAweDg5Y2E4MWY0LAotCTB4NzFjODM3NjYsIDB4ZmU1NTFmOTUsIDB4MDVjNzhkN2UsIDB4MGM3YjhiMTMsIDB4MDA2N2UzYzQsIDB4Y2JlYzBkZjMsCi0JMHg0YzJiZTJkNywgMHgxOTlhMDdhZSwgMHgxOTcyMDYzZiwgMHg1NWI2YmViZiwgMHgwODVlMTU4NiwgMHg5ZjNmMjM3ZiwKLQkweDU1ZjhjY2Q4LCAweDNjZTZlYzdjLCAweGI0NWNhN2I4LCAweDFjYTdjNTg5LCAweDgwYTI5ODZjLCAweDI0MjI3ZDNlLAotCTB4OTdkMzdlZTAsIDB4NmFkZTk5YmYsIDB4ODExYWVmZTQsIDB4NTQzZjdiZWQsIDB4NWJmOTU0YmYsIDB4NzNmYTYzZTUsCi0JMHg0ZTU3OGMxZCwgMHhiNWVlMTRmOSwgMHg4NjdhZjkxOSwgMHgzYmU3ZjJkYywgMHg3ZmFmN2NlOSwgMHhjZTg3YWU5NiwKLQkweGVmOGZjYTc3LCAweGU0NmE3NTc2LCAweDQxMjdjZDI0LCAweDcxNjI1MGJlLCAweGE5NWNhYTNjLCAweGQ3YmM1ODkwLAotCTB4NjE5ZjllMGYsIDB4N2FjZDFiZmMsIDB4NzM0YWM4ZmYsIDB4NmU2YjhiM2MsIDB4Y2ZlZTkxOTIsIDB4Zjg3ZDlmYzcsCi0JMHhmM2Y5MDJlYywgMHg3Y2VhZjk0MiwgMHgyZjhlYTlmYywgMHhiM2Y3ZDVlZSwgMHhiMTliZDM5MiwgMHhkNzBhNmViZiwKLQkweDFmZWI4NTMwLCAweGI4YzA5ZjlhLCAweDNlOWY4ZmIxLCAweDUzZjAwMzM2LCAweDM5ZDI4N2I2LCAweDkzYjM1N2QwLAotCTB4NDljZTQxODQsIDB4NGFhZmRjMjEsIDB4YzYxZjQ1NWIsIDB4OWNlMTRhYmYsIDB4M2U1YTlkMWIsIDB4NjUzZTcxNjYsCi0JMHg5ZTkxMzljZiwgMHg0MzliYjc0YSwgMHhkMmZiNjlkMywgMHhjNThjMWY5ZCwgMHgxMWU1OGJiOCwgMHgzZTBhNDM4YywKLQkweDYwZTVmNWNkLCAweDgzZTA1OGU3LCAweDFiYzU4OTUyLCAweDAwYzJlNTE5LCAweGU4NjczYjBiLCAweDA1OWY2ZGRhLAotCTB4YjMzNjEzZWIsIDB4MmRhNWZkN2IsIDB4Y2Q2NmM4YjcsIDB4MjJjZDg0YjksIDB4MWNmMGY1YWIsIDB4MThlOTQ4MzAsCi0JMHhmY2MyNTVlZSwgMHhkNWM5ZjdiNCwgMHgyZGFlYTMzOCwgMHhiNjk0NGU0YywgMHg5NjA3NjhjOSwgMHgwZGQ2ZGU2ZSwKLQkweDZmYTVhMzcxLCAweDE1ZGZkMTk5LCAweGM2MDlmY2Q4LCAweDZlNzk0ZmMxLCAweDAyNTNmYTJiLCAweGZjZWVhMjZkLAotCTB4ZGViYzRmYWMsIDB4ODY2YzMxNjYsIDB4MGFkNmIzNzgsIDB4ZjlhM2VmM2MsIDB4ODk2Zjk4NjMsIDB4YmU3YWI3MWQsCi0JMHhlN2IyYjJiOCwgMHg1MjBjZWVmNiwgMHhmZWZkOTYxMCwgMHg5N2M4MTcyOSwgMHg1YzliMWRkMywgMHhmOWI3YjcxOCwKLQkweGZiNjVlM2ZiLCAweGRjYjVlN2M0LCAweDc5ZjFiZGY3LCAweGNhMTdlMWE3LCAweDg2MmQxMzM4LCAweDAzY2RjNmY4LAotCTB4ZjNhNDhmNTAsIDB4NzE4ODI5Y2IsIDB4OTdhYmQxY2UsIDB4MDM3Y2ZkNmYsIDB4NmQ3NzhmYzQsIDB4ZTYwMWIzM2YsCi0JMHhhN2VkZmU1YiwgMHg4ODdlMjAxYiwgMHg3ZWUyYjNlYywgMHgwOGZhNzgxNywgMHhlZGFhZGZjNiwgMHg3ZWUxNjI3ZSwKLQkweDYxNGYyZDhmLCAweGRiZjc3MmRjLCAweGQ2ZjQyZjY2LCAweDFhNDRmN2JkLCAweDZmNzU4ZmM0LCAweGZjMDkyYWZiLAotCTB4NGVmNjRiOTYsIDB4OTJlZWJmNDMsIDB4NDk5MjUzMWQsIDB4NGQ0MmZkOGMsIDB4MTc0MzZlODEsIDB4YzQ2ZDM3MTAsCi0JMHg4M2Q2YzFkNywgMHgzMWY0ZTcxOCwgMHhiZmM4MzdjNSwgMHg5NmNiNzhkZSwgMHhlYWJmMTYwYSwgMHhjZDk2NzFlMSwKLQkweGZiZDNlM2IxLCAweGRlYjY1NWM0LCAweDIwOTVmZDc4LCAweGZlOTk1YmY3LCAweGNhZjhkZTc4LCAweDdmMWUyODM3LAotCTB4NmJmODAxNzQsIDB4YjEwMmZkNTYsIDB4ZmMzMWY3ZjEsIDB4NzZlMjFlMzIsIDB4YmNmYmY4ZjUsIDB4OGZlM2QxNzUsCi0JMHg4MGViNTk0MiwgMHhjMzJiZTM3ZSwgMHgzNTM3MDAxNywgMHhjNTkyN2RmZSwgMHhiZTAxNmQ1NywgMHhjNjBjZmVkOSwKLQkweGE2ZGUwMmIzLCAweGY5ZmY2MDdiLCAweDBkZWUwZDNjLCAweDczMjM5NDljLCAweDVlZDkzZWYwLCAweDA5ZTIxYmIzLAotCTB4ODliZWY3NGIsIDB4ZTNiZGQzZmMsIDB4MTM0M2Y0NzUsIDB4NGRkZTg3MWUsIDB4ZGM1ODdmN2EsIDB4ZDlkN2MwYjAsCi0JMHg5OTcxNjRlNCwgMHhiNzEwZmUxYywgMHg3N2UxNzFlOSwgMHhlOGM5OWYxZSwgMHhlY2RiOGQ1OCwgMHhhNzczNWUyZiwKLQkweDZhZDllOTg1LCAweGQzNDU3ZTVjLCAweDMxZmUzY2JiLCAweDE3MjEyZjhhLCAweDdiZWM3NGYwLCAweDcwYTgxMWVmLAotCTB4MWMzOTczNzAsIDB4MWQ4ZTNmOGQsIDB4YTcxYmRiMTcsIDB4ZjgwNWYxY2UsIDB4MzdhODdkODMsIDB4ODdlNjk4YmUsCi0JMHhlOGRmYTI2NCwgMHgxZTQzMTI0ZCwgMHhiOGIyMzc3NCwgMHg3ZjU5NmVlNSwgMHgxZjhhMzNkZiwgMHhjZGJjOGYxNiwKLQkweDBiYTFhN2M4LCAweGRmM2U0MzhiLCAweDdjMjg3ZmZjLCAweDMzZjI4MjM2LCAweGJhOWMyZmIwLCAweGM3MmQ4ZWJlLAotCTB4ZmY3Y2UwZGYsIDB4NTk2N2RmNzcsIDB4YjNlZjE4MjgsIDB4NjNkMDI3ZmMsIDB4MDUzMWViNDUsIDB4M2I1ZWUwZWMsCi0JMHg4YmI3YWY5YiwgMHg5ZWJiZDVmYiwgMHg3NTllMzExNiwgMHg5NDQxY2I1NSwgMHg1MTc5NDZlMywgMHhjNDU4ZWYwOSwKLQkweDBiNzFlZjk4LCAweGQ4ZGJjM2Q3LCAweGRkYjVkMTNlLCAweDdlZDA3MjE5LCAweDQ2ZWMwZWJhLCAweDNlNmNhZTdhLAotCTB4ZTA5YzQwYTYsIDB4YWY3ZjliY2IsIDB4YzYyOWYzYjAsIDB4ODQ0ZmIwM2YsIDB4N2FlZmYzMzQsIDB4MTY1OGZmNzYsCi0JMHhmOGZjY2Q2ZiwgMHhlMzNlNzFjNiwgMHg2M2RhMDRlMywgMHhmZTY4MTM4ZiwgMHg1OTRlMzc0NCwgMHgzYjcxNDViMCwKLQkweDY5ZGUzZmNlLCAweGY0MGI3N2M5LCAweGU5ODNiYTc3LCAweGM0NWJhNzgzLCAweGI5Zjc1OGZjLCAweDY2ZmJlNGRlLAotCTB4NzQzZDdiZWYsIDB4NDE3N2M0YmYsIDB4MTAxZGVjOWMsIDB4ZmQ0MzY1ZDEsIDB4ZjczMzg5NzIsIDB4NDg0NGI4YWQsCi0JMHhhOWVmOGMxNSwgMHg4MWUzYzY1OSwgMHgwMTRkZTk3ZSwgMHhhZjM4ZDc3YywgMHg5NWRmMzAyNSwgMHg5ZjhkNWYwMCwKLQkweDA5ZmI3NjQ3LCAweDRhNzJhNWU4LCAweDE1ZjgzNjQxLCAweDQ5NDZmMjhjLCAweDA2OTA5MTM0LCAweGY5OWM0YmZmLAotCTB4ZWYzYzFlYzksIDB4N2MwMTBmMDgsIDB4MjEzOGNkMWUsIDB4MTllZmJmNDMsIDB4NDllZjU0ZmMsIDB4OWQzMjU1NjQsCi0JMHhjMTQxN2JkZiwgMHg0YmY2OGNiYiwgMHg2ODYwZmViZSwgMHhmZjZmYjM4MSwgMHhhZjdmZGU2YSwgMHg1NTJiZjNhOCwKLQkweGMxNDcyMzlhLCAweDU4MmYyMTJlLCAweGRjNDFiZTMxLCAweDE3ZjdjNTY3LCAweGI4YWMxYjAyLCAweGJlM2I4M2RlLAotCTB4ZWJmNTEyN2MsIDB4OWQ4NGNkYzcsIDB4ODVlYjUwZmIsIDB4OWI5MTVmZDIsIDB4Yzc2MjcxZjUsIDB4MDZmZTFiOTcsCi0JMHhhNjM0MzNmYSwgMHhhMDZkMTdlMywgMHg2ODZlYzFmNSwgMHhkMzlkYTNiNiwgMHgyYzZlM2RiMywgMHg1ZThhNDVmOCwKLQkweGM4MDY2N2I4LCAweGEzM2IyMmIzLCAweDkyZTdhMmM3LCAweGJmYjQzNTQzLCAweGZlNTkwM2UzLCAweDc4YTFkNmY4LAotCTB4YmI2Y2JmZGYsIDB4MGYwY2UzMTMsIDB4MDk1NWQ4ZWUsIDB4NzNmNzUyZmIsIDB4NTJmYjAyNzYsIDB4Y2Y1YzBiZjcsCi0JMHgxZmJmODY3ZiwgMHhiNDdiMmY1NCwgMHg0NDI1YzZmMSwgMHg3MWVmNjhmMiwgMHg5NTllNDE5NCwgMHhmYzEwN2RlMywKLQkweDA0N2NlMWM5LCAweDM4YjZhYWZlLCAweGY1NDFmZmJjLCAweDFmM2Y1ZDVmLCAweGJjYmI5MWNiLCAweDQxYzFjNzQ4LAotCTB4Nzg0YmRlZWMsIDB4NjMwM2M4MTAsIDB4NGFmY2I1M2QsIDB4OGY3ZTMwZWIsIDB4NDQ3M2I2OTgsIDB4NDg5NDA3ZWIsCi0JMHgwZWQ3Y2IyMSwgMHgwM2E0ZjI2MiwgMHg2NTZiNWZlYiwgMHhmNzk2YWZmYywgMHhjZmQ1OTdlZCwgMHhkNWQzMGViNywKLQkweGYyNTdkYjUzLCAweGY0OGM0MWY3LCAweGUwNTViMzdiLCAweDJlNmZjMWZlLCAweDQ1ZmVmNTg5LCAweGY3ZTNmOThjLAotCTB4NjgyNDA5OWYsIDB4OWI2NTNkMDIsIDB4ODIyNWRmMTUsIDB4ZGYxMGYzN2IsIDB4ZTc2MTUzYmUsIDB4MzBhZWU1NWEsCi0JMHg4N2IyM2ZiZSwgMHg1YjcyZTNjYiwgMHgxOTQzZGYxOCwgMHhmNTAxZTdjNCwgMHg5ZDJjNGYyMSwgMHg1NmJiZTJjZiwKLQkweGRlMDRhY2JiLCAweGMxNzhhOWM3LCAweDU3N2MwM2U5LCAweGY4ZjJmY2VjLCAweDhlMjFiMmVmLCAweGQ0NzE4ZWNkLAotCTB4MWNmYzJmMTUsIDB4MWNjMmEwZTksIDB4MTBmYzAzOWUsIDB4MWIyNjY2ZDksIDB4MWRiN2NmODEsIDB4ZWQ3ZTAzNGUsCi0JMHgwOTY5YzM5MiwgMHg1NzVlNzNkZiwgMHhiYzM2NjJkMSwgMHg3MWQ2YzAxZiwgMHgwYWZlYmFiYSwgMHhkZWFjZTdiOCwKLQkweDQ3ZWQyY2E3LCAweDY1NmIzY2NlLCAweDU4NWZlODdlLCAweDc4YWQ0YjdkLCAweDY3N2ZhZGFlLCAweGFjZjU3NGU3LAotCTB4YWY1N2I4MmMsIDB4YzRiNTJmZDYsIDB4YWQ2YjhiOTYsIDB4NGY3NjNmZjIsIDB4NWVlN2QxZDgsIDB4NDBlYjVhZTIsCi0JMHg5MjNhNjNkMCwgMHg0OTUzZWZjMCwgMHhlNzkwNmVmNSwgMHg4N2QzOWJhNSwgMHg4MGUwOWY4MCwgMHhlZTc3YmQ1NSwKLQkweGU4ZmQ4Mzg5LCAweDdiNDFlYzgwLCAweDNlZWQ1MjFhLCAweDliZGFiMjczLCAweGZmMDA4ZDI1LCAweDg5MmNhOGNkLAotCTB4ZjFhN2EzYWUsIDB4MDQ0MWMyOTMsIDB4YjNhZDBlZTIsIDB4MGRiZGM5NjIsIDB4YTNjMjNiNTYsIDB4YzVmNjYyZDQsCi0JMHgwY2Y4ZDdiYSwgMHhjMTA3ZDdhNywgMHhjNmM3MWZlOCwgMHhjNzUwZmUwMywgMHg1MDg3MjAzZCwgMHg3OWI3MGYwZSwKLQkweDJlZDQzZjU4LCAweDliNjVlZjgyLCAweGRlZTk2NzY3LCAweGIxNmE5MGM1LCAweDg0NTNlNTFlLCAweDUzYTkwOTY3LAotCTB4NWJmMjM1YjIsIDB4Njk2NGFmMWQsIDB4MDU5NDk2NzYsIDB4ZWFmZmE1ZGYsIDB4OGEzMTU3YTUsIDB4NDQ0YzEyNjcsCi0JMHgzMGUyNTBiZCwgMHhiYWE5NzUyNiwgMHg1YzkyMDRmYiwgMHgyOWY4MDE2MCwgMHg4OTJkYzBhNCwgMHhjOGI1MmE0MCwKLQkweDgyZDIzNmVmLCAweDViYWE4M2E5LCAweDJhYThmZGVjLCAweDY0ZjI3MjAyLCAweDA0MTdiYmVmLCAweGVlYmMyOGQzLAotCTB4MWMxZmI5NDYsIDB4ZTljNWM4NGEsIDB4MTNkZmZmNzAsIDB4YWZjMGQ2ZTcsIDB4ZjljMmVhY2QsIDB4YzIyYWE1OTgsCi0JMHgzNzc0YzVlNCwgMHhkMDQyMjNlOCwgMHhmNGEzYmU0ZiwgMHg5ZjlkNTM1NCwgMHg3ZjQ4ZjQwNSwgMHgwY2ZmNzA3YywKLQkweDNmM2EwZjRkLCAweGFmZTVmYjk3LCAweDc0YTIwZjQwLCAweGZiNTlkZWNhLCAweDUwZDUwOTMxLCAweDI4Zjg0MzEwLAotCTB4MTMyNzU1ZmEsIDB4OWFkODNlZjYsIDB4ZGVkNjg4YjcsIDB4NmZlNzJiZjgsIDB4NzI4ZmRjMTIsIDB4M2ZhMjQxY2MsCi0JMHhiMTA3OWExMSwgMHgyNmI2ZjIwYSwgMHgzODVjZGJlZSwgMHg0OWI4NzQ0NywgMHhiYjQyZjQxOCwgMHgzNGVkODQ4MywKLQkweDRlOTY4Yzc1LCAweDk1ZGZmOTZiLCAweDNhMWFmMzRkLCAweDk3ZDQ0Zjc1LCAweGNhODJmOTFiLCAweDJkYjhjMzM1LAotCTB4ZWZkYTNmMDgsIDB4M2Y3ZTg2NjcsIDB4ZDlmYmY0MzMsIDB4YzJhYmY1ZjcsIDB4ZThkOTYwMjksIDB4NTYwOWY3ODUsCi0JMHhiODcwMTc1NiwgMHgxYzJjZjFiMSwgMHhhMzNlMTQ2ZSwgMHg2MjMzN2RlMCwgMHg3OWY5NzliMiwgMHhjNmQ1YzIzOCwKLQkweGZhODY2MzY3LCAweDZjODNhZjE0LCAweDA3YTcwOGU5LCAweDIwNDVmNmUyLCAweGQ2MjQ5NjZlLCAweDU3N2JiMDEzLAotCTB4YTY5ZjZjMDgsIDB4NGQwZTA1M2YsIDB4MjBiNmUyM2IsIDB4YzdjN2RlMWYsIDB4ZjQ2MzY0MTksIDB4ZWY1YmRlYWUsCi0JMHhlNzhhZGY1YiwgMHg1YmVhN2QxYSwgMHg4YjZmYWJmYiwgMHhkZmQ5ZGY1ZCwgMHhlNzMxZWM3YywgMHg0Y2U1NDNmMywKLQkweGZlNmYwYmU1LCAweDdiNjFjZTA5LCAweDgyOWI4ZGU1LCAweDZmMjc0NzMyLCAweDljMjhkOTA2LCAweDdmOGZlMjJhLAotCTB4OTg1Zjg5ZGIsIDB4YTIxOTY4ZGUsIDB4ZTgwZDlmYzcsIDB4NmQ4ZmQyOTUsIDB4MTFiYmZlODQsIDB4Y2JkMWZkZWYsCi0JMHg5YTBlYmUzYywgMHg3NWQyYTQ3NywgMHgzZjhmOTRmZCwgMHg2MzlkODliNSwgMHhmOTg0YjZkZiwgMHhlN2I5YThkZCwKLQkweGYyYjdmYTgzLCAweDE0YjUzZmZhLCAweDE4ZTBmZmExLCAweGI2ZTkxNzdmLCAweGRlMTdhNjdhLCAweGU3ODhhZjc2LAotCTB4ZmRkZTdkY2QsIDB4ZmYyODVmODEsIDB4MDg1NGJlZGMsIDB4YmQ2M2QzODUsIDB4ZTA5YTQ0NjMsIDB4M2U1Y2Q0N2UsCi0JMHgyMDVkZjFiZSwgMHhhZGU0ZjEzZiwgMHgwYmJkNjMxMSwgMHhiZDRjZThjNCwgMHg2ZjdjNjU1NywgMHhlMDI5MjE2MCwKLQkweGJmZTkzZGVmLCAweDkxYmFiMjZmLCAweGQ2MWU0MTBlLCAweDRiZWU4ZThlLCAweDhlOTQ3NWMxLCAweDc0YTQ5ZjQxLAotCTB4NzBlY2U3MGMsIDB4M2NlMzA2M2QsIDB4ZjM4YjBhNWMsIDB4ZTc4YTE4ZTgsIDB4M2IzY2FhNjMsIDB4ZTFjNGYxZWIsCi0JMHhkMzRkZWFmZSwgMHg3OGI4MTdiZCwgMHg1ZTM5MjdiYywgMHg3M2E1YWYyMywgMHgyYjdiZGQzNiwgMHgwNTM3YjIzNSwKLQkweGVlN2M5NWU0LCAweGE2YTFlMjMyLCAweDFlOGQ0MmFmLCAweGVhOWNhNjhmLCAweDEwY2NjOGExLCAweDI3NzI4NGE2LAotCTB4OWM4MTBhNDUsIDB4YTQwNWRjOTMsIDB4OTk1OGY0MDgsIDB4NWY1YWE3ZDEsIDB4NTdhY2JjNDksIDB4ZmU4ZDdjNmYsCi0JMHg4Nzg4MDFiYiwgMHgzYmUyZTVkMiwgMHhkNzI4YzkzYywgMHhlMDBiMDVlZCwgMHhmNWNhZTg5MywgMHhlOTdkMWRmYSwKLQkweGFkOTViODIxLCAweDlkZDYwNmJiLCAweDM1M2Q3N2RlLCAweGZhOGJkNzhhLCAweGY3ZGU4NGYzLCAweDNmMzAyYzY5LAotCTB4ZDM3OWVjZDEsIDB4MGZmYmYzMDMsIDB4YTUxZjgwOTksIDB4MjdiYzdjMmYsIDB4Njc3ZTE0NDMsIDB4ZGUzMTgzNDMsCi0JMHgzZTliOGM0MywgMHhkZjU3YzYxMiwgMHg5ZDUzNWM0NSwgMHgyYmFkZTc4MiwgMHgyYjg5N2JmOCwgMHhmZTYxNDdhYSwKLQkweGU1OWVmZTdlLCAweGE2MGY2YWFhLCAweGRlMmNmYzJhLCAweGNmYzc3YzVhLCAweDZmZjU4MjMyLCAweDI0ZmM3MzcxLAotCTB4ZmM3YzM4OWEsIDB4NTI1OTJmYTgsIDB4ZDAxY2YwYWEsIDB4YzMwYWFlZWEsIDB4MDg2NDU5ZmIsIDB4ZGE2MDI3ZGQsCi0JMHg5Zjg0NWFlZSwgMHg4N2U4MjZlMiwgMHg2ZjMxZjVhNCwgMHhlNTRkM2M4NiwgMHgwZjg4ZDFmYSwgMHg4YTQ1NWRjOSwKLQkweGRkYmU3OTY4LCAweGNkYzAyMGZmLCAweDdiYTQxOWVhLCAweDMyOWNkMDFmLCAweDAzZGY3YmVjLCAweGY1YTdhNWVjLAotCTB4NzIyNjJlNGMsIDB4MjdjMjMyN2EsIDB4NjVlZjYxNTEsIDB4OWZkNDc0YWEsIDB4ZTNjMzU1NWUsIDB4ZjZhZTFmNzQsCi0JMHhkZmMzNWE2MiwgMHg3NzgxYWE4MSwgMHgzZDQ4MTQ3ZiwgMHhlZGM4MWY5OCwgMHg0NzBhMWFjNCwgMHhkZjA4ZmVmOCwKLQkweDczYWE2YjM3LCAweDk3MmNmY2IxLCAweGFhYTY4OTU3LCAweDI1YzAzMmZkLCAweDY2ZmYzMDgxLCAweGM5MGM5MDYyLAotCTB4MTQwNDJjMjEsIDB4YzQ4MjUyN2UsIDB4OWNmNTc5MDMsIDB4ZTZjNjlkZDAsIDB4NzQ0MWU5Y2QsIDB4ZGM3Nzg2NGIsCi0JMHg1ZTAwOGYzYywgMHgyNmNiMGVlYSwgMHg0YjhiOTNmMCwgMHg2ODFmMjVhZiwgMHhlNTljNTllOCwgMHg5OWJmMDc4YiwKLQkweGIwMGJmMGU4LCAweDc4MDAzZGZmLCAweDQ3NTlmM2E1LCAweDk2ZWY4NWU3LCAweGM5NTg3YTcyLCAweGQzOWFiZWYxLAotCTB4MWY0MDdkYzMsIDB4ZDM5MDdkMzQsIDB4ZmFlOGFmYzUsIDB4NjVlMzVmMjEsIDB4ZTZkNjAxZjcsIDB4YzRiNzc4YjMsCi0JMHhjNzdmMTMwYywgMHhmMWI0NGMyYywgMHgxNmRlZjE2NCwgMHgyMjc1ZDBhMiwgMHhjNTMwN2E4ZiwgMHg1YmM4ZWE3NywKLQkweGZiMTdhNDY2LCAweGExMTNlMjY4LCAweDQzYmJhZGZjLCAweDgyYzkxZGVjLCAweGUzMzdkODU0LCAweDI3MjM3N2Q1LAotCTB4ZTM2N2UyN2EsIDB4YzRiMGQ1NDUsIDB4OTkxMzczZGYsIDB4ZjMxMWQxZGQsIDB4ZWYxYWM2N2QsIDB4ZWZkODBiMDEsCi0JMHhlZWM3Y2RmZCwgMHhhNGFmYTVmNSwgMHhkOWViZDllMywgMHhmZTAxYzViZCwgMHg2ODhiZDk4MiwgMHhmNTRmNTFkZSwKLQkweDhjZTUwMjZmLCAweGRlNzQxZDJlLCAweGM2N2QxYTQ1LCAweGJmZmQ4ZmRlLCAweDUxY2Q3ZWQ0LCAweDdiZTdjNTFiLAotCTB4ZTQ1MTQxYjAsIDB4Yjg3ZWJhZmYsIDB4NjE0YmUwMTUsIDB4YzczZjAxZWQsIDB4MmE0MTcyYzMsIDB4ZjFjM2ZmZjAsCi0JMHg4NzM1ZmRiMSwgMHg4M2QyMzI2ZCwgMHgxZDMyZmIyYiwgMHgzZWM5ZDczZCwgMHg5ODllZTc2YywgMHgzYWZiYTNhOSwKLQkweGE2MTI3NzJlLCAweDU3N2RkMDRlLCAweDZkZWZjY2U1LCAweGIxMmVlZjRjLCAweGJjYzJjZmZiLCAweGM1ZDFjZTkyLAotCTB4YmM0YTdlNTEsIDB4YTlkY2I2MjEsIDB4ZGMyMDk1OTEsIDB4YzMxOWFmZGYsIDB4YTY3MDVjZTQsIDB4M2VhYmY0YzIsCi0JMHhhN2M5ODQ3MiwgMHg2ZjMyZTRiMywgMHg2NDVmNDM1MCwgMHhmMDNkNDExNCwgMHhlZThhOTk4YiwgMHhjMDM1YzFkZCwKLQkweDdlNWU5NDFmLCAweDA1N2VlOWNkLCAweGM1NGQwMWYwLCAweDRkZDIwYTExLCAweGRhMTM3NGMyLCAweDVmMzhhYmE5LAotCTB4NjhmOWNmZGQsIDB4ODdhM2U3MmQsIDB4YzI0NjdmODAsIDB4ZGY4Y2FlM2IsIDB4MDUxZGUyMjQsIDB4OGI4ZDQ4ZmIsCi0JMHhjMDI1OGZiZCwgMHg4ZDQ5YjRmZiwgMHhlODVjZmU2ZCwgMHhiMzJkZTZhZiwgMHgzNTBmZTcwMCwgMHgxMTc1MmY5MiwKLQkweDk3N2UyOWU0LCAweGVmOGYzMDdiLCAweGVkZWIwNmVhLCAweGJiZjE1ODllLCAweDkyOTNlZDRiLCAweGM5NWUxNGVjLAotCTB4ZGZiZjg2NzYsIDB4ZmUyMTY3ZDQsIDB4MzE2ZjZlMmMsIDB4ZDg3MjRiYWMsIDB4MTlhZmFlZDAsIDB4NjU4ZTI5NjksCi0JMHhiZGVjZDgxZiwgMHg1M2I3NGVmMCwgMHg5ZmM4MGY3OCwgMHg4MTdmNmJkMCwgMHg2NjZlYTE3YiwgMHgzN2ZkYzIwZSwKLQkweDA2Mzk5ZjcwLCAweDMzYjE4Y2ZkLCAweDA0ODY0MDc5LCAweGZmMGQwOGM5LCAweGRjZjdmMWQ3LCAweDQ2NDgyNzg4LAotCTB4ZjJjMGU0NjksIDB4ZjgwOGYzOGIsIDB4N2ZmMmZhNzcsIDB4MTM2ZmYyM2YsIDB4MDIzNTdmOTMsIDB4NzgwYzU3ZGYsCi0JMHg1NTMxZjc1NSwgMHhkNzgwNDlmZSwgMHhiOWU3N2QwMSwgMHhkZDVjYTJmMiwgMHhjYjk5N2IzZCwgMHgzY2JkNjM2ZiwKLQkweDRmOWQ5ZGJiLCAweDJmYzQ2ZjExLCAweDcwYTcyZGY0LCAweGNlNmJiM2NhLCAweDA5YzQ5NDk1LCAweDVkOTVlZmJkLAotCTB4NDYxZDYzMTUsIDB4ZjYxMjc3YjksIDB4OTIyNTkwM2YsIDB4NTkwNWRmMWYsIDB4MTkxZTc4YTgsIDB4OGZlNGYyMGYsCi0JMHgzZmE1ZmUyYywgMHhhZjFkNDBmZCwgMHhlZTMxNWNlOCwgMHg3MmU3ODVmMywgMHhhZTI5OWY3MSwgMHgyMGZlNDVjZiwKLQkweGQ4ZDc4ZGUwLCAweDdlMWEyNzQ5LCAweDlkYmMwMmU2LCAweGEzZTdlN2E4LCAweGUyMDg3MjBkLCAweGJjNmZmNjUyLAotCTB4MTRkOWExZTcsIDB4ODgzNzBiOWUsIDB4ZDdmZWZlZWMsIDB4NmEyNzdkZGYsIDB4YjY0ODFiZTIsIDB4ZjUzYWY1MDcsCi0JMHhhMTEzYjQzZCwgMHg3M2RhNWQzYiwgMHg1OGRmYzJlYywgMHhmNjJmYTA3ZCwgMHgzNjE0Y2ZiNywgMHg2YmRmYjZjNCwKLQkweDUzZDA1N2UwLCAweDFlODAxZjI5LCAweDQ4ODFmNTRhLCAweDVmODVmNDE4LCAweDA4YmRmMTViLCAweDY4ZGMxZjM1LAotCTB4NTQwZWY5OGYsIDB4MTk1YTdkYmUsIDB4ZGRiZTY3ZDAsIDB4YzRhNDI3NzcsIDB4ZmFmZTgwOTEsIDB4OGVhMWU2ZmUsCi0JMHhhNjdjMWM3YiwgMHgyOGY2NGU3MCwgMHg3MGE1YjM4ZiwgMHg5ZmYzYTk5ZiwgMHhlM2IyNzNiMSwgMHgyYzQyMWZkYywKLQkweDc4ZGI5NGZkLCAweDcyOWZhN2I5LCAweDIxNjc4YjE3LCAweGVhZTVkOGVlLCAweDNiNzE0ZTdjLCAweDdiNDZlMTcwLAotCTB4ZmQ4Yzc5NjgsIDB4ZWZiZjIxN2MsIDB4NDc5ZjkwYjcsIDB4ZDUzZmY4YTgsIDB4YmEzMTM3YWIsIDB4M2YyZmZiNTEsCi0JMHhkZmUxOGEzNywgMHg1M2MyNjc0MCwgMHgzZWFlOTA2MywgMHg3ZmEzMjQzZCwgMHg0YWVhNzg0ZCwgMHhmMmE1MmY3YywKLQkweDk3ZWIwNTljLCAweDQxNWZkZThiLCAweDRkNzkxNjFjLCAweGYzYmJiYTQ0LCAweDg3M2MzOGYwLCAweGMzYmMzMmVhLAotCTB4YjdmMzg3YjgsIDB4MmI5ZTE2OWEsIDB4ODU5OWU5ZDUsIDB4ZWMwYTA1YTEsIDB4MmFlNzg1Y2IsIDB4ZGUyMTFlOTEsCi0JMHgxMzk3ZWUxMSwgMHg5MzRiZjZmMiwgMHgxMzU3NGUyNCwgMHg2OTkxZmRhMCwgMHhhMmJkNjljYiwgMHg2NGJmNDY0ZSwKLQkweGZkMTJiMDYyLCAweGVmNzY4ZDg0LCAweGRhZTQzMWZkLCAweGU3NDdiYjFlLCAweDJjZWEyODM3LCAweDIzODlmZWM3LAotCTB4ZTczNTEyNDgsIDB4N2JmOTBiZjUsIDB4ZDhlNzQ1ZTEsIDB4MWRjNDg0N2IsIDB4Y2Y0MDI5MjQsIDB4ZTk0NGRlNWMsCi0JMHg2YzZlZmY1MiwgMHhjYmUxODk5NywgMHhmODU3ZGViOCwgMHg1ZGU5NWYzYSwgMHhkNjdlODRlZiwgMHg1ZWI2NjNmYiwKLQkweDc1MTdjZmJlLCAweGY1ZDYxYWU2LCAweGQ2YjFmMWJiLCAweDQ0Y2Y1ZDE1LCAweGRmY2U1ZjZjLCAweDMxMzcyZGY5LAotCTB4OWZlNWFiYmMsIDB4ZjRkNWYxZjMsIDB4YjgyY2Y1NzgsIDB4Zjg0YTQzNjEsIDB4YTE4NTkwM2IsIDB4ZmY3ODE1M2IsCi0JMHgzZTIxYjBhOCwgMHhiM2FjZDA0MSwgMHg1ZDU2ZmVhOCwgMHhmZDYxNDk1YywgMHhhYWZmN2MzYywgMHgzMjllNjFhOCwKLQkweDdhNDcyMzVmLCAweGVjZmMxNGYxLCAweGEyMjM0OWE1LCAweDgxZmNmYTc4LCAweDFkY2I2OTllLCAweDFjMTRhZmIwLAotCTB4ZmUzYjNlMDMsIDB4ZTc5Y2M1NjQsIDB4ZjBjYmY0MDksIDB4OGUwOTUyNzYsIDB4NzJiOTQyYWQsIDB4M2RkNjJiYTcsCi0JMHg3ODhkY2Y5NCwgMHgxYjc4ZTdhYiwgMHgzNWEzMjQxMSwgMHg5N2M1NDY3MiwgMHg0ZGYxZmRiMSwgMHhmOWMxNzc2NSwKLQkweGVjZjVmMWY0LCAweGU1ZmU4Zjc1LCAweDFhN2M2YzRjLCAweDMwNzZlOGUxLCAweDcxZTlhOWY4LCAweDJmZmIyZmJhLAotCTB4ZWI5NzhlMDgsIDB4ODVmYTliZTIsIDB4MGFiZmM3MjMsIDB4ZDUzYmY1MjcsIDB4MWMwZWFjYWIsIDB4YTM3YmIwOTcsCi0JMHgwNDE3YjlmNSwgMHg4Y2Y4ZThiZiwgMHhiZTJhNGUzZSwgMHg3ZTQxZWI5MSwgMHg3YzA5Mzk1MSwgMHgwN2M5ZWE3YSwKLQkweGU1ZGI2YWM2LCAweDg0MGQyN2RiLCAweDg1ZWQ0ODcxLCAweDZmZGQ4ZjlkLCAweGZkNDFhN2Y3LCAweDIxZWY2NGUwLAotCTB4ZDE1YmNhMGYsIDB4NWRkNzQzNWIsIDB4Nzc2OGY3MTIsIDB4ZGZhYjU3MTgsIDB4OTM1NjU2YmYsIDB4NGE1ZmMxMmIsCi0JMHhjMTJiODdlZCwgMHgwNWI1NDM2ZiwgMHhlNmE4YTNkNCwgMHg4NDdkMDVlMCwgMHg3YWM1ZjE1NiwgMHg4MzkyNmExNywKLQkweDU2NTZiM2Y5LCAweDk1YmZhMTU3LCAweDBkYzQ4MjU4LCAweGY4YzIzZDdlLCAweDQyY2M5YzkyLCAweGQwZTQ5N2ZmLAotCTB4ZWM4YTAxZWIsIDB4NGRiZjgzNzcsIDB4NjU5MWY3ZTEsIDB4M2QyNmJmYzksIDB4YzRkOWVjMWIsIDB4YmUwNmEwOGMsCi0JMHhiYzU4Mzk1NywgMHhjNTk0ZGFjNCwgMHhiNzQzODg0MSwgMHgzODcxOWY4MCwgMHhlYWNlMzdmYSwgMHhhNTE3ZmJlYywKLQkweGRkMjgwMzg1LCAweGRhN2RjZmE5LCAweGU1Y2JlODQ2LCAweGZlODIxNmM0LCAweGJiZjRkMWI0LCAweDc0ODkxZTc2LAotCTB4NGM3ZGJhZGUsIDB4ZTJjOTE3MGYsIDB4ODkwZjczYzIsIDB4ODcxNWJmNzAsIDB4NzI4MmZkMDcsIDB4YzM5NzM1NzgsCi0JMHhkYzJlZWRjYiwgMHg2NDVkNTY3ZiwgMHg4ZWEwZmI0MiwgMHgwYjdlYzNmYiwgMHg4Yjg0MzA3ZSwgMHg4NDMyNzY4NCwKLQkweDI1N2Q0MGRkLCAweGIwZWI4ODJlLCAweGQwNDQ3YWMyLCAweDc3OThjM2RiLCAweDIyMzI4YmMyLCAweDQwMjViMTNlLAotCTB4MDQ3ODllM2UsIDB4ZTEyMDBmYzgsIDB4ZjY4N2EwNTUsIDB4MGJiY2VhNGMsIDB4ZmQ1OGE3YmUsIDB4NWZiZjAxYjMsCi0JMHgxNTFjNzZhNCwgMHhlMDVhMGZjMCwgMHg1Y2UwMDRiZiwgMHgzYzMzMDYyZiwgMHg2MmUzZmViNCwgMHhhNWVhMDMyNCwKLQkweDEyYjdhMmQxLCAweGM0MTE3YTU4LCAweGU3MzVmYjQxLCAweGNlMWRlYzJiLCAweDliZWM1ZTY4LCAweDY0YTk2OGJmLAotCTB4ZmFmODZmMzgsIDB4MmZmOTZkMTIsIDB4MDc2MmJlYWMsIDB4ZjY1NmZiZWMsIDB4MDdlMjRkN2UsIDB4OWFiOWNhMDIsCi0JMHgwMTc3M2Y1ZSwgMHg3MWE5ZGJkZSwgMHhkMjNkN2YzMCwgMHgyMWQ1ZDAwNSwgMHg5NTlmNGZiNiwgMHhlODA5NzEzYywKLQkweGY1OTUxYjNmLCAweDVlMWU2ZWEyLCAweDc2ZTI1ZTVkLCAweDUzYTUxMzRkLCAweGY0YWI4YmYwLCAweDk5ZjI0MjMxLAotCTB4YWUyZThlODAsIDB4NzhiNWRmYTUsIDB4YzE1ZmExOGMsIDB4MzlmYTIzMzgsIDB4NDdlNzUwNGYsIDB4MTU3YTQ1YzcsCi0JMHhmZGIwZTVjZiwgMHg3YjBmNDBkNiwgMHhhMGZmMzYwNCwgMHgwZmVjY2VkNSwgMHhhZjAxMTQxMiwgMHg5M2MyNTViMywKLQkweDNjN2NiMDU2LCAweGRkZjA3ZjUxLCAweDNmNTViN2NmLCAweGYyYzE1OTM3LCAweGNjMGI5NjZlLCAweGM2NmFlNzY3LAotCTB4NWY2ZWNjZjksIDB4ZTVmZTAxZGQsIDB4MGJhOWVkZDksIDB4YjY2NTljZTAsIDB4MjA4ZmYyZTUsIDB4MGU0NzIzZGQsCi0JMHhmYzRlNDFkOCwgMHhmOWEzYmQ4YywgMHhjYTJmMjNkMywgMHhiYzc3OGEyMCwgMHg0M2VmMTFiMSwgMHg3MWY5Y2UzZiwKLQkweDgwYzg4OTBlLCAweDJiNzEzZjdmLCAweGMyMWU0ZmNjLCAweDVlMjdjZGY1LCAweGMxOTE2ZjllLCAweDFjMmRiZDdlLAotCTB4OWEzYWY5YmEsIDB4ZDBjNWZkYmIsIDB4Y2Q1YTYwNzUsIDB4MDk3OTE0MzksIDB4NzE2ZmU2ZDAsIDB4NWEyZmExZTcsCi0JMHg3ZGU2ZDc2ZCwgMHhiYjU5ZTU5OSwgMHhkZmY4MWMyOCwgMHhiODJjOTBjMSwgMHgyZGJhZThhZSwgMHg5ZDc1MDcwOCwKLQkweGEzZTIyNmI0LCAweGZkZmM0ZTE3LCAweGJkMmUxNTIwLCAweDdhZGZiNmViLCAweGZiMGJmODJkLCAweDJkYjM2ZjkzLAotCTB4NzE2MjNlNjMsIDB4NDY1ZTZjYjksIDB4NDUwNjdkMzgsIDB4YzM5MTVlZjAsIDB4ZjJlODA3YjcsIDB4MWRhZjg3NjEsCi0JMHgxMmRjYTRmOCwgMHgyMTg2OTM0OSwgMHg1ZjIxODRkZiwgMHg0YTJmZmEyOSwgMHg3OGY4NzBhMiwgMHg4MTkyZmZhOCwKLQkweDAxOGU4ZjAwLCAweGJlNjdhNDE3LCAweGQ1ZmNlOWNhLCAweDgzZjdkZWY0LCAweGJlOTlkMTEzLCAweDY2YzFmOTg2LAotCTB4YjU1YjdhNzAsIDB4OWI4YzRkZTMsIDB4N2IzMGY4ZmMsIDB4ZjQ0MmE5MGYsIDB4ZmEwZjdmNWMsIDB4NGIxMjQ0YmYsCi0JMHg1N2QzNTVlZiwgMHgyZGU2MWZiOSwgMHg5ZDFmN2E4NywgMHhjNDg2NzNhZCwgMHhkNWEzM2RlMCwgMHg2NjdhZjc4ZSwKLQkweGZkM2E4YjY0LCAweGMwYjY0NjdiLCAweGM2M2FkN2UzLCAweDRiZDNhNGRlLCAweGVlYmE3MDU3LCAweDExYzQwZmRiLAotCTB4YjA1OWZiMTgsIDB4NTVkYTMyNzQsIDB4MjRmNzE1M2IsIDB4MGRjMWZmOTAsIDB4NGMxNmNlOGMsIDB4NjcxMDg5ZjUsCi0JMHg4MDhkNjEzYywgMHgxZmYxODhmZSwgMHg4NzkwMTI3NiwgMHgwOWUyZWEwYiwgMHhiODJmODM5YywgMHhiYzE2NzE3YiwKLQkweGUxZDk1MDk3LCAweDM5MDRlYjY5LCAweGUwYmMxMjE5LCAweGVmMTY0YjQ3LCAweDlkMjVmOGM4LCAweGQ4MDdjM2Q3LAotCTB4M2JmOTBjM2UsIDB4OWYwZTllNjAsIDB4MmJmMWExYzcsIDB4MTk1NWM5NzcsIDB4ZGJlYmEwNmUsIDB4MGI5MDNlMWQsCi0JMHhiZGYyNmVmMywgMHg5MjJkNzgwZCwgMHg3NmI1ZmJjMiwgMHgzY2RiYmNjOCwgMHhmMzFmNDBiOSwgMHg0YzNlYWM1YSwKLQkweDUxYjI0NDJkLCAweDIyNGYzNmI5LCAweDE1OTM0ODE2LCAweGRmMjE1OTIyLCAweGVjZTdkNGZlLCAweDNiYWQ4NmIwLAotCTB4ZWMyYzQ2ZDksIDB4ODBhZmUxZmIsIDB4YWNkZjJlNGUsIDB4YTYzZGQ2ZTgsIDB4NTFmZjlmNDUsIDB4MTE5ZjNlOWIsCi0JMHgwZWIzZTdkNiwgMHg4MGI3ZjNlOSwgMHg4N2QxYTMxYSwgMHhlNzY1ZWMwZSwgMHhkODY3NjVkYywgMHgwNWU3YzEzZCwKLQkweDdmYzA4M2Q4LCAweDM3Yjk0NjZhLCAweDA3M2RhY2E1LCAweDNjY2Y0ZGNlLCAweGY5NDEzNGViLCAweGZkOTg2ZjllLAotCTB4YzU2MmQ5MTYsIDB4YmZmNmNiZjcsIDB4NDRiNjIzNjMsIDB4YmFkNGM3NzgsIDB4ZDhjZmNhMTEsIDB4ZmZjMDcyNWEsCi0JMHhmYzYzZWI0NCwgMHg0NzM1ZGQwMywgMHhmM2IxZmQ4MiwgMHgwY2NlZDUzMiwgMHhjZWM0OWM2MSwgMHg3YjljNTk2ZiwKLQkweDA0Mzk4YjY0LCAweDc2NjdiMWU3LCAweGQwMmNmNTNmLCAweDgzMmQ5OWRkLCAweDVlNzllZjUxLCAweGRmYTA5YTA4LAotCTB4YWYwYzdkZTAsIDB4OWQyZTZjMTMsIDB4YWNkYjI5ZmMsIDB4Mzg0NmViYjcsIDB4NzNkNTNlOTksIDB4ZjEwYjk5NGEsCi0JMHhlYmQ0OTc0ZiwgMHg0ODY5N2RkNywgMHg2NGVkMWY5ZiwgMHhkMTNlNjdmMiwgMHg3Mzg3NGY3YywgMHgxNGFhY2Y2NiwKLQkweDQ4Mjc4YmEwLCAweDU5ODNmYmNjLCAweDlmN2YyNjRlLCAweGVkNTE1YTdlLCAweDMzYmY5MTZjLCAweGQxNDkzYzQ2LAotCTB4YTI3YjRmN2IsIDB4MDY0YjNmZTcsIDB4YzAwMDFjNDMsIDB4N2JmNDU4NjIsIDB4YjU1YzYxOTksIDB4N2NiOTZmZmYsCi0JMHhmYTdlZTQ0ZiwgMHhjMjIyYWJjOCwgMHhiMTc1NzRlNywgMHg1N2I4OWNlZSwgMHhhNmY2YWQzZiwgMHgzM2VjZDU0YywKLQkweDkzZmJmNTg1LCAweGI4NWVhMWU2LCAweGQ2YmU2OTNmLCAweDMwNzJkYjJlLCAweDczODg1NmU5LCAweGRmZTEyY2Q5LAotCTB4ZmQ5ZjJhNGYsIDB4MTIxMzQzZTQsIDB4MDJkOGJiZTEsIDB4MWY3Mjg1ZjMsIDB4MmYyZDFmZDgsIDB4ZDUxZWEwYjksCi0JMHg3MWI1MzMzZiwgMHhlM2Y1NDUyMywgMHhmNjZhYTY1MiwgMHg5NzRhMWZkNywgMHhiYjRhZWZiZCwgMHhlNTc2N2MxOSwKLQkweDFkNzhkYzE2LCAweDgzNTk3N2M1LCAweDY1NmE4NWU4LCAweGZiZmYzNzJkLCAweDgzN2I4MDE4LCAweGNiNWNmNzhjLAotCTB4YmVmOGM5YjcsIDB4MGFmMWEwNzksIDB4MzU5NDEzZjQsIDB4ZWY4NzllYmYsIDB4ZTc5ZmFkZTgsIDB4NDhlNTc5ODUsCi0JMHg0NGNjNDBhNCwgMHg5MDRkYzBkNywgMHg4MWRmNmM5ZSwgMHhmZDk1ZDVlZiwgMHgzYzkxNGViNSwgMHg3ZDNkNWYzMCwKLQkweDNmNDM3YTUwLCAweDcyODBkNTE3LCAweGYwMWUwMDZlLCAweDU0ZjhjMzJkLCAweGFlMTFiYmY1LCAweDdiN2QyMTI1LAotCTB4MTdmZWJlMjMsIDB4MzNmYTM3YTcsIDB4NjM3NzhiNGEsIDB4ODNkMzAxYmQsIDB4Y2E0ODc3ZjgsIDB4YTNiOTUyOTcsCi0JMHgzZmNhMmZiMSwgMHgzOGY4YzVhYywgMHg1NDI4MzhlMywgMHhiMGQwZTczNSwgMHgxZjkwNzk3ZiwgMHgyNzFmN2NhZCwKLQkweGM3ODcyNTgyLCAweDc5NjcwZThmLCAweGU4MGYzNzdjLCAweDE5N2ZkNjBiLCAweGZiODFlYTk5LCAweDdjOTAzNzhkLAotCTB4YzIxNzlmNDgsIDB4ZTMyMjg5MGYsIDB4NmMzYmY0NmIsIDB4Nzc1ZjIzYjUsIDB4ZmM5ZjNiYjksIDB4ZjM0M2QwMWQsCi0JMHgxOGM3M2MxOCwgMHg3NjdiZWZjNCwgMHhkZWY4YzI3OSwgMHgwZmY3ZmFhMCwgMHg1ZjJjZGNiYSwgMHhmOGM1NmVkYSwKLQkweDJiMWYzMzhhLCAweDQxOTZjZjI4LCAweDdmZDQxNzVjLCAweGQxMzI2YWQ2LCAweGI2Y2NlNjdkLCAweDRlMjE5MzAxLAotCTB4YmQ4NWFiYjAsIDB4NjViYTdiMmYsIDB4N2JlNTY0YzAsIDB4ZmYyMzQ3ZjYsIDB4MzFkNmZiYWEsIDB4NmZlZTk1ZjgsCi0JMHgxYjdkMzg0ZiwgMHgxNWRmMDA5YywgMHg3OTMyOGUyYywgMHg1NTQ2NTU0MCwgMHhlZGE5M2MwYywgMHgwY2FhOTUxMiwKLQkweGI3MjIxZmIwLCAweDk5MWJiYzNiLCAweDcyMGU5M2JlLCAweDA1M2ZhY2ZmLCAweGRjNzlmOWVkLCAweGFlMzdiMTdmLAotCTB4ZDdlODE5ZTAsIDB4ZThmYWViNDksIDB4ZTI0Mzg0YmYsIDB4MGZhZmEwNDYsIDB4ZWU1ZGVmNDQsIDB4YjVmM2QxZTEsCi0JMHhiYzdlZDk4NSwgMHgzMDU2NGE0ZiwgMHg0NDgxNjYzYiwgMHg0ZmQ1MTJjMiwgMHgxZmJjODAxNywgMHg4Mzk0Nzk4YiwKLQkweDhjMDQxYTBiLCAweDU2Yjg1YTJiLCAweGVmNzgxZWJmLCAweDAzNzdmYjU0LCAweDVlMmZlMThhLCAweDkxMzg4NzBkLAotCTB4MWI4YjRjMTYsIDB4YjAyNWU1ZjQsIDB4ZmUzMGI4N2YsIDB4NGJjZmNmMDMsIDB4NzBlNWY0OWIsIDB4YmRmNDEwOTMsCi0JMHhjY2VmZTZmMiwgMHgzOWY2ZTBiMSwgMHg3YmU3ZDc1MSwgMHgxZjkzYTljOSwgMHg4ZjhmY2EzMiwgMHg1ZjVjMDJjNCwKLQkweDkwOWI1ODE5LCAweDcwMmFmZGYyLCAweDQyY2E2ZTc3LCAweGE1OWVlMjBhLCAweDY2MTY1MjEzLCAweDA0MTgzYmUxLAotCTB4MTY0NWE3ZjYsIDB4YjI2NTc0MTIsIDB4ODAwM2JjM2MsIDB4YzlmYzgzYWMsIDB4ZjU4MjViZGUsIDB4OTQ4N2VmNjksCi0JMHhhMWUxMjU0ZCwgMHg2MTNhZThhZSwgMHhmMjcyZGE3ZCwgMHg1OTYzYzMwNiwgMHhlMzFlMTBiYiwgMHg4MjM3ZGU4YSwKLQkweDk1ZWI2YTc1LCAweDM3OTdmNWYzLCAweDgzN2U3NTliLCAweDg0ZjM4ODBhLCAweGVmZDY5NTM4LCAweDc5N2ViYWNjLAotCTB4MzdkZDFjZmMsIDB4ZTdlMjk1ODksIDB4MWJiOTVlZTEsIDB4ZmM1NjM0YmEsIDB4YTcwZTUxZjksIDB4NGMyZTZmODcsCi0JMHgxNWZjYmUwNSwgMHgzODgzODFlOCwgMHgzZGE5NzMyMCwgMHgwMjcxYzIwYSwgMHg4ZTg1YjgwMywgMHhjZGVhY2I2MywKLQkweDcyY2U3OTYzLCAweGY5ZDRmZjk2LCAweDEwZmQ1ZTU1LCAweDdlYzkzNzZhLCAweDIwNTg1NzNjLCAweGY3MGNiYzE2LAotCTB4ZmRiYTY2OWEsIDB4MTdmYzAyNWYsIDB4MTI2OTdjOTgsIDB4MjQ2ZmE3ZjIsIDB4NjUyZTQ3YzYsIDB4YjMyNDdmZWIsCi0JMHgxOGFhZDJlYSwgMHhjNzhhYTlmNiwgMHg3ODJkMGFkZiwgMHhjZGRjMTdiZSwgMHg3NjY3M2RmNiwgMHgzYmZhZDY0NCwKLQkweGVlNGM1ZGUzLCAweGM0ZTgxZGM0LCAweDBlYzhmZTc4LCAweGFlMTFlZjAxLCAweDNkZTE4ZTE3LCAweDc4ZDdmNWJiLAotCTB4MjljZmQ4MDgsIDB4MTcyMDZmMTQsIDB4MDU2NDBiZDcsIDB4ZGQ5NTYzYmMsIDB4OTc4ZWYzM2EsIDB4MzZkOTdmMDAsCi0JMHg1YTJhNzdkNCwgMHgwZTE1ODkyNywgMHg3N2QzM2Y1YywgMHg3MDhkNTVlYywgMHg3NzNjOThjZSwgMHgzM2QwMjY1NCwKLQkweDFiZGNmNzVkLCAweDgzY2JiYmUwLCAweDE4M2FhNWUzLCAweDBmMmNhNDFkLCAweDBkMWUyZmE2LCAweGYxZGMxN2UzLAotCTB4MThkYmYwMTIsIDB4NGQzZmRlMWIsIDB4MjY3MmIwYTYsIDB4ZjQwNmJhNjAsIDB4YjE5MjE0OTcsIDB4Y2E3N2U0MWYsCi0JMHhmODI2NGY3NCwgMHhiMTc2MWY1YSwgMHhjNDlhMDY3MSwgMHhjZjQxMzNiOSwgMHg4NGY5NjRjYSwgMHg0NmRmMDU3YiwKLQkweGI4NzVhZTI0LCAweGM5MzM2NGZlLCAweDc3YzJmOTg3LCAweDYwMmQxM2QwLCAweDg4Nzk2M2NmLCAweDU1NGE3OWUxLAotCTB4M2M5ZjhjMDYsIDB4NGE4OWE1OWMsIDB4NWU4MmUzMTgsIDB4Y2VkZWYxNTEsIDB4Yjg5NjczZTIsIDB4MjVlM2NhMDksCi0JMHg0ZTRhNGQ1ZiwgMHhlOTVmZWRhMCwgMHg5NTJkODZhMiwgMHg1MTBjYWY1MywgMHgwM2IwZTFmNSwgMHg2MjMyMTBmNCwKLQkweGY1Y2ZhYjE0LCAweDJjMTkyNWUxLCAweDRkMzEzZGVlLCAweGJkNTg1N2Q1LCAweDk3MTdkOTFlLCAweDc1ZjNmMjA1LAotCTB4ZTY3ZjE3YTYsIDB4OWM0MWM1ZjAsIDB4ZWM0YTE1ZGEsIDB4MWM0OWRiYjgsIDB4MzY3MzgxNGYsIDB4ZmZmOGQyMTIsCi0JMHhjMGJlYjMwMywgMHg3MzgxMWM3YiwgMHhlY2QyMTIyZSwgMHg5YjJlZjAwNywgMHhiY2IzN2UzNiwgMHgxN2JlMDBmOCwKLQkweDMwM2E0MTVjLCAweDQ1YTJiODBlLCAweDg1N2E2ZjFmLCAweDJhYjhmNjJkLCAweDk5Y2UwNzlkLCAweDQyZWQxMDQ4LAotCTB4YzAyNzFmMGEsIDB4Y2UwYWIyMjcsIDB4MDU3YjgyNzEsIDB4Y2UwNmFmZjQsIDB4MTlhODI0MjksIDB4NDEyZTcwM2YsCi0JMHg2NzlkZWY5ZiwgMHhhZDEzZjYxMiwgMHhkYWY1ZjQ0NywgMHgyNDdhYzRiZSwgMHhlMzA1ZDNiNywgMHg3MTNiYmI3NCwKLQkweDkzOWMwOGJmLCAweGFmYmE5ZGIwLCAweDQxNGM4NGY0LCAweGRkNmZlYTk5LCAweGMzZGU1NjFlLCAweGViNTVhM2RmLAotCTB4Y2Y3NWZkYWIsIDB4OTc3ZGY4NTIsIDB4NTVkYmY2MDgsIDB4ODUxMTA1NGQsIDB4OWZlZGEzY2IsIDB4YmNiMzlmYTAsCi0JMHg0NWMyM2Y3ZCwgMHg3YzI4ODdhNSwgMHg4MWE4MjRlYywgMHg0NzRkNTI0ZiwgMHhmYjc5NDRkOCwgMHg1ODRkMGZlNywKLQkweDRhNTJmYTNkLCAweDFmMzgwNzVhLCAweGY2YWUyNzA3LCAweGEyZTVhNDRkLCAweGY2ZDdjNzQ5LCAweDQ3M2U1ZWVjLAotCTB4NDliMGYyZjEsIDB4MmJjOGZlZTQsIDB4YTg5ZDRmNTcsIDB4YmRmYWYzYzksIDB4YmUzZjgzZWQsIDB4NDdiM2NhMWEsCi0JMHgxZWNiZjZiMywgMHhjYjBmZWFiYSwgMHhhMjVjYThhNSwgMHg3MDJiNDhlYiwgMHg0MzE2ZjI2YSwgMHg2M2YzNDFkZSwKLQkweGExYjc3OTM0LCAweDllNTBkMTNjLCAweDYxMGZjODYyLCAweGUxOWNiYmY1LCAweGM4NGJkMTM0LCAweDVjYTY4N2RhLAotCTB4MDNkZmMxMmQsIDB4ODFjZjBkNGEsIDB4YzU2YmZiOWIsIDB4ZWZlMWFiYmMsIDB4YjM2NDU2MmIsIDB4ZDk1ODE3YmYsCi0JMHgzODU5NzgyZSwgMHg2NTVmODMxMywgMHhhNzZjZjllZiwgMHhjMDM0NjBiMiwgMHg5MDY1ZTNhMSwgMHg4MjZkZTUwMywKLQkweDQ3NzBmNDFiLCAweGU2MzBiNmNiLCAweGQzNDc5ZGExLCAweDdiZGQ4NWFlLCAweDg2Mzk2ZjJhLCAweDdmZWRmYWVkLAotCTB4ZjhmOTA5OTQsIDB4NjNlZjUxZmUsIDB4MTVjNWYzYmQsIDB4NzhmYWU5OTEsIDB4MTllMmZlZjMsIDB4MjZmZTA4OGYsCi0JMHgzYmU4YjhkNywgMHhkZWRiNWRiZCwgMHgzN2JkZmU4YywgMHg1M2JhNDcyYSwgMHg4ZTUxMDc3ZCwgMHgwNjdmZWUxYSwKLQkweDI4OGUzZTYwLCAweGJjNzBhODlmLCAweDdjNTlkNDdmLCAweDMxZGRmMGI3LCAweGRiNjA0N2VkLCAweDY0ZjkyZmI3LAotCTB4N2Y5MWU4MTksIDB4MGUzMTM4YWQsIDB4ZmI3ODJhZjQsIDB4ZGY4ZGY2MTAsIDB4NjE0YmExMGEsIDB4Zjg5NDdhMWYsCi0JMHg2ZjcxODUyZiwgMHgzZjc4YjhhZiwgMHg1NDdkOTEzYywgMHhkZTBjN2NlZSwgMHg4N2NmZmRiNSwgMHg3ZjBkNWVlNiwKLQkweGIzYThlZWVmLCAweGE5ZmMyODczLCAweDUyYWUyMzllLCAweDgxZDFjN2M0LCAweDQyOTJmODlkLCAweGNiMTk1YzY2LAotCTB4NmExY2VkMGYsIDB4NWRiN2Y5YTIsIDB4ZTJmZTU5ZWIsIDB4MmYyMGM3Y2UsIDB4ZWQ2MzJkYzQsIDB4MTUwZTc0YzcsCi0JMHgyYzMyNjBkZCwgMHg3MjZkZmM0NywgMHgzZmY3ZTZjNywgMHhjZWEzMzk3MiwgMHhiZWUxZWVlZiwgMHhhNDJlMDA5NywKLQkweDcwMzdlZDljLCAweGU1NDJkMGJkLCAweGQzZDI5Y2U5LCAweDc4NTEzNzViLCAweDFkODVmOWNjLCAweGFlYTZkY2U1LAotCTB4ZmE2NWFmMWIsIDB4ZTIwMGIwNzAsIDB4YmMzOTkyOGQsIDB4Yjk0NDNmNzEsIDB4OTBkZWExMmUsIDB4NDI2MDdiMGEsCi0JMHhiNGNlOWYxNCwgMHgxN2VlMGYwZSwgMHgwMzZkNTU5NywgMHhjZTc5MjA3ZCwgMHgxYTJmZGM2OCwgMHhiOGFjYmU5YywKLQkweDQzNzRkMTcxLCAweGUyYjM0YjIyLCAweDhiYWU0Y2RjLCAweDk2MWZiYzI2LCAweGY1MTM4ZjdjLCAweDc3ZjE1ZmE1LAotCTB4MjFkZjI5YWUsIDB4NWUzODM4N2QsIDB4YmIzMTczZGUsIDB4ZjMxNzNkZWMsIDB4NGU3NDFjMmIsIDB4MTFkZTdlYzMsCi0JMHgyMjJkZWI3YywgMHgwNTY4MjRhNCwgMHg1MGQ4OTZiYywgMHg5MWI1YjkwZiwgMHhkNzJhMTVjYSwgMHhlYmJjZjhlYiwKLQkweGZlOGE1ZGQ2LCAweDVmYzE1YjgyLCAweGZiYmUxYTNiLCAweDQ3NDYxMzUyLCAweDBjYmFmY2Y1LCAweGVkNDQ3NzlhLAotCTB4YmU5OWJhYjAsIDB4ZGE3YmVkNTQsIDB4NWNhYzhkNzUsIDB4ZTk3NTViOTUsIDB4NWZiYWJkYWMsIDB4NzFiMGQ3MjUsCi0JMHhlOTc1N2Y5MiwgMHg1ZDg3NTg0NiwgMHg4YmY1ZTc2MiwgMHhiOGRjOGQ2NiwgMHgxYmZmZjcwYywgMHgxZmMwZTJiMiwKLQkweDgyYTVmM2UyLCAweGM5NjFmY2RkLCAweDlmZTgxMzMwLCAweDg2MWE3ZTJhLCAweGQxNzJiZWZiLCAweDczZjI5ZmYyLAotCTB4YmQ0ZjE1MTYsIDB4NWIxYzY1ZjYsIDB4ZWE5MTAyZjcsIDB4M2ZiZDc0MGYsIDB4ZmQ3MWZiNzIsIDB4Y2IxODlmNTQsCi0JMHgzZTk5YjMwZSwgMHg0Y2Q3NDU5MSwgMHg1MjI1ZjAzNCwgMHhmZWY4MzhlNywgMHg2OTRlMDgzZiwgMHgxNDdmZWViMCwKLQkweGJjNzc3ZjRlLCAweGY3M2VmNGY0LCAweGJlNjEzMjVlLCAweGU4NGY0YjE1LCAweGI4NzBiZGVmLCAweGNiMDg1NmZmLAotCTB4Zjc5YWQ5YzksIDB4YjA3N2U4NDgsIDB4ZmE3NmJmMzMsIDB4Y2U2OWM3YzcsIDB4NTNkY2U3ZTcsIDB4YmFhNzdhODEsCi0JMHg3N2NmZmIxZSwgMHg2NGRmYzNlNSwgMHg1MWE3ZjIzNCwgMHg4ZWZhM2MyZiwgMHgzZmY4MmQ2NSwgMHgyODJkMmE4ZSwKLQkweDRiNWU4ZjhmLCAweDUxYzVmZWYwLCAweGFhOTQxZWZlLCAweGEyZmNlNmQ3LCAweGQzYjAxNWVjLCAweDQ4ODljNTM2LAotCTB4YmUwOWY3MWYsIDB4N2RjNzgwNTQsIDB4ZmVlMDFlOTQsIDB4YTI4ZjFhYjYsIDB4ZjE3NWM3ZWUsIDB4NDA4NWY1YTEsCi0JMHhjNjhmMzcwZiwgMHg4ODFlZWY3MywgMHg0YjdhODQ4YywgMHgyZWI4ZGY5OSwgMHhmMGVkMTNiZSwgMHgzNzFlZjFiYSwKLQkweDA3ZDAwOTlkLCAweDViMzIzMWUyLCAweDVkNGZmZjQxLCAweGJhYjNhMzA2LCAweDNlZjBjYjkyLCAweDIwOTdhNTA1LAotCTB4ZThjZDlmYjYsIDB4NDEyNjZlYWUsIDB4NzY2ZWExYmIsIDB4OTU5YmQyMGEsIDB4OWYzMGFjODQsIDB4YTkyN2U4ZmUsCi0JMHgxMGEzYzU4NiwgMHg3YjU2MzdjOSwgMHg2MzhjMWQ2ZSwgMHg3NjdiMTE3ZSwgMHg0MTM3OGVlNywgMHg0NTZiNWQ4ZiwKLQkweDg5NTAxNjNkLCAweGM5YjUxZGU3LCAweDA3NGE1ZjM4LCAweGFhNTc0OGM1LCAweGQ0OWJmNjdkLCAweDBmNjhmZGQwLAotCTB4NWZlZWQxN2EsIDB4YzNjZGY0ZWQsIDB4ZWVkMmZmZjksIDB4NTgzN2Y5ODEsIDB4MjY0YjFhYzksIDB4MDU2NDM1OTgsCi0JMHgxZjNlNDljYSwgMHhjNjA4ZmI1MiwgMHg3YWU1Y2MyZiwgMHg2N2M1N2JlMSwgMHhmYzdmYTA5ZCwgMHhmZjUwNGUzYywKLQkweGVjMGZhNTJlLCAweDk1ODRmOWYwLCAweDdlZDdiZmNmLCAweGY5YTllYzBjLCAweDYyNzdiMmY3LCAweDNlNjk5YWM5LAotCTB4OWQwNWY5ZmQsIDB4YjlmODEyNmIsIDB4YzQ3ZDRmZjksIDB4ODdlMzc0MDksIDB4ZmZlODJlNzYsIDB4ZmY3MDljYmYsCi0JMHhiYjJmN2ZjNiwgMHhiNDgyNGFjZiwgMHhmYjY4YThmZCwgMHhjMWRmODFmYiwgMHhmOWIyMmU1ZiwgMHgyN2JiNmE5MywKLQkweGY3YTBmYmQ2LCAweDQ0YmY3MWM3LCAweGVkM2UyM2VkLCAweGM2MzhlYTc4LCAweGY4YmRhOTdlLCAweGMyOGJjMDAwLAotCTB4OGNmNzBjM2QsIDB4N2Y2NGJmMjIsIDB4ZGYzOGMwOTcsIDB4YTBmMjI1NDQsIDB4YTljZjk2OTUsIDB4ZWZlMWUzMTYsCi0JMHgzYTk3ZmI4OCwgMHg3Y2VhYmQ3MSwgMHhhZTQ3MjZlNywgMHhhMTg0N2Y0NCwgMHhjYWY2ZTNmZiwgMHhhYjY3ZjAxYywKLQkweDU3YjkwZmY2LCAweDVjMjFlZjYzLCAweDg0NWU2ODk0LCAweGI0MTFmODdiLCAweGU3N2NmYWEzLCAweGVlZDFiMWY2LAotCTB4YjM1YmU0MjQsIDB4ZGM2ZjVlYjYsIDB4Y2MzMDQ3YmUsIDB4NDc5NWQzOWYsIDB4N2U2ZjAwOTAsIDB4MjhhZjFlN2UsCi0JMHg1ZWY4Mzk5MSwgMHgyYWRlNjE5NCwgMHhiYTczNzczYywgMHgwOGMyZTk1MywgMHhjMGZkZGRlZiwgMHgxY2U5NTEzYiwKLQkweDk3ZmFmZDBhLCAweGM2NGUxMTlhLCAweGY0ZmRkNWZlLCAweDFmZTUyYjExLCAweDgyZjU3NzRhLCAweDdmNWFmNDgwLAotCTB4YzdmNzFkYjcsIDB4NDllNDZiMWUsIDB4ZWZiOGQ3YmMsIDB4Nzc3N2M0NmEsIDB4NDEwM2NkODksIDB4YjU1MjhmNWEsCi0JMHhmNjMzY2YxZCwgMHg5ZThjZjNiMSwgMHg4MTIzOWQ5MSwgMHg5YWU5YmE5ZiwgMHhkZDNmMTQ3ZCwgMHg0MThkOGFhZiwKLQkweGQ1MDQ5ZDQxLCAweDM3MTU1ZThmLCAweGVmNzdmZDAyLCAweGIzZjU4NmJlLCAweDg5ZGVjZWNjLCAweGJkYzMwODA2LAotCTB4YWFkZmUwYzQsIDB4ODFmMzlmYzEsIDB4MDAyZmJkODksIDB4NmI0NThmN2YsIDB4ZDFiZGMzNzcsIDB4YmNhOGNjZTIsCi0JMHgxODAyODFlOCwgMHg1NzNkNGRiZiwgMHgzOGUwOTdmMiwgMHgzZGYwZGFiNywgMHhlMDkzNGE4MSwgMHhiMmFiYmQwMywKLQkweDY3YmMzMmY0LCAweGQxZGZmODQwLCAweGE1NjhlNTUxLCAweDk5YTNkYTg5LCAweDM0YWZiZTUxLCAweDMxNzIzZmJkLAotCTB4NDkxMjkzZjMsIDB4ZjVhMzQ3ZTMsIDB4YjAzYjA0NWUsIDB4MDNiNmIyZGMsIDB4NDliYjUxZWYsIDB4Njg0M2VmZjQsCi0JMHg2Yjk1YTVmYywgMHhmMzAzN2NjZiwgMHhmODM1NmNhZiwgMHg4M2ZlMGMxMSwgMHhhNTNkMmQ1MiwgMHhmNTA0ZTk0NywKLQkweDUzMWY5MDdlLCAweDc3NWJkZTA5LCAweGJmM2RiY2YyLCAweDAxOGVmZDAzLCAweGYwMzBjZTdlLCAweGQ2ZDc3YjAwLAotCTB4YzA0MmRkOTksIDB4YzkzODFhYWYsIDB4ZWQwOTk2ZjQsIDB4MGVjMTA3OGQsIDB4MThlZmNmOGYsIDB4NzAwZGNiMGEsCi0JMHg5ZWYxOWYzZiwgMHg3NWY2ZjhjOSwgMHhhYTk1ZDgyMiwgMHg2YmIxYTNiZSwgMHg4YzYxYmQyZiwgMHg0ZGY3NjUzNiwKLQkweGYxODY0ZWMxLCAweGYwMTNlMTNhLCAweGM5ZjZjNDhkLCAweGY3NDgwM2ZmLCAweDgwMDAyM2FkLCAweDAwMDA4MDAwLAotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RjNWZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4OTk5MmJjY2UsCi0JMHg5MjY0Y2NlNCwgMHgwOTI3ZGU0YywgMHgyNzAxMDA4NCwgMHhkNDUwMDQyMSwgMHhlNmEyYmMyMSwgMHhhMmQxMDFkYSwKLQkweDNjMjQzOGI1LCAweGEwOTkyMTEyLCAweGY3YWQ4Yjk1LCAweDI0ODQ0MDMyLCAweDExMWEwODA0LCAweGEyODRlMDI4LAotCTB4MTdlZGFmNjIsIDB4MDRjMDYyMmMsIDB4MTZjNDU0MDcsIDB4NmI1ZWM1ZmIsIDB4NDZmN2Y2ZDUsIDB4NDg1Y2EwMDgsCi0JMHg2YzVjYjA0NiwgMHhhZDdiZmNiNSwgMHg2NzMyNGZiZCwgMHhkZTk1Mjg5MiwgMHgxZTlmN2NkZSwgMHhlY2ZiZDlmNiwKLQkweGFmNmI1YWM3LCAweGE1YjNkZWY3LCAweDkwZDc0YjMyLCAweDQ0YjQ0ODQ5LCAweGM4NDg1NDg4LCAweGJiMTFhNmMyLAotCTB4ZmU4NDA5NTcsIDB4NWI2NjczYjksIDB4ODYyYTc5MDksIDB4ODNjOWUwM2MsIDB4MzNjOGFiYjIsIDB4NzI1OTkwODYsCi0JMHg5ZTNjOGM3MSwgMHhiMTcyMjM5MCwgMHhmNzg3OGU1OSwgMHhkYTFlOTE4MSwgMHgwOGUzZjg4ZSwgMHg1NWM4NDQ5OSwKLQkweGUwNzViYmY4LCAweDI0MjAzNjkzLCAweDYyNWRiZmJlLCAweDhkN2U0ZDc2LCAweDBlNzZlODY1LCAweDgzYTdmZDAzLAotCTB4ZDhiNmQwOTAsIDB4OGY5ODZlYzAsIDB4ZDE3OTYwMjQsIDB4MGQyZGY0NmYsIDB4NjEzYTNmMzgsIDB4NzY4N2RmM2EsCi0JMHhmZTYwMDY2NiwgMHg0MGM5YTQxNSwgMHg0YTU5MDliMiwgMHhkMjIyMDYwMiwgMHg4ZmUyMjY3NiwgMHhkYTRmYTAyOSwKLQkweDE3M2U5NjJjLCAweDI1MTIzNTZmLCAweDU1ZGZlMDk3LCAweDQwNjU1ZmZhLCAweDZjY2QyNjViLCAweGUwYTU0YjVlLAotCTB4OTA4NjIxMTEsIDB4ZmIxM2E0MjUsIDB4ZGI1N2IyNTksIDB4MTIzNGU5NmUsIDB4MmFmYWQyYjQsIDB4YzM0NjA5MTMsCi0JMHg1ZjViNTViMywgMHgwZjM4NDI0ZCwgMHhhMzU1ZGI1ZiwgMHg0NGQyN2ZhNiwgMHgzNmRiODUwOCwgMHgzYjY2MjEzMywKLQkweGY5OWRjOWNjLCAweGU4N2Y5ZDM4LCAweGI3NmJiZDZkLCAweDY4NjljODQyLCAweDg3MGZkNDkyLCAweDM4ZTJkODhlLAotCTB4YTg5NDczODAsIDB4NTY4Njc1YzMsIDB4ZDM3NjA3NDUsIDB4NDhlYjc2NzUsIDB4YjcwYTNlYzUsIDB4YzBmMjM2NGQsCi0JMHg1OWVjZmE2YywgMHgwZDg3MzhhOSwgMHg5ZDhjNzA0MywgMHgzYzIwNjYzZCwgMHgyYjk5MGUxYiwgMHg2ZTdmMTQwMiwKLQkweDU1NzA4NzU5LCAweGQ1ODk1ZmRmLCAweDQwY2JiOTYzLCAweDdkNjk1YTJhLCAweDVmZGE2YWQxLCAweGY1N2Q3ZjVlLAotCTB4N2MyZjE2M2QsIDB4NzAxNjUzMzcsIDB4YmJlNzgwZGUsIDB4MGQ2NGNmMDAsIDB4M2RlZDA3N2UsIDB4NzFhOGZjNzQsCi0JMHg3NzdlYTllYywgMHhjZGZiNWY2NywgMHhmZTE0ZGYwYywgMHg5NTJkZmYzMCwgMHgyNzgwMmQ1MSwgMHgwNDkzYjkyMiwKLQkweDA0NzU5NDA3LCAweDYzY2YyZWU5LCAweDBmZWZkMmYwLCAweGZkN2U3NDA1LCAweDU4NDlmNDBkLCAweDMxYWQ3ZjdiLAotCTB4OTdiNjJjZjAsIDB4ZTVhMGFkZTcsIDB4YjllNjlmNDMsIDB4NDg5YzI4MWEsIDB4ZDAzZTdiYWUsIDB4NTE3M2QyYzEsCi0JMHhmMWMxZDAwYSwgMHhmZjVmM2Y3MywgMHhmMTdmNWE1YiwgMHhhNDYyODM1MywgMHgzNjgwMGJmNSwgMHgwOTBmMWUyOCwKLQkweGU3Njg0YWRlLCAweDNjOGEzN2JmLCAweDM1MmRkZjRiLCAweGJiOGMzNzEwLCAweDgwODhjMGY0LCAweDgwN2JmNjlmLAotCTB4YjBmZWIxOTYsIDB4MWE1OWM3MTUsIDB4OTBiNmRkZTMsIDB4YTVmNGIzZjYsIDB4NDBhNTE3NzgsIDB4ZjAzZWFhZjIsCi0JMHhkZjUwNzNjMiwgMHg0YjNkNzY2MSwgMHhjNTFhNWRmYiwgMHhhMWU5NzFlOCwgMHhiZTdlZmMxNCwgMHhmMDE0YmJkOSwKLQkweGZjMGM2YzkzLCAweDdiZTkyZmM3LCAweGY1ZDE5YWYyLCAweDI0NWM3ZDJjLCAweGZmMzA0NWMxLCAweDAxNjZhZDhiLAotCTB4NzU4NDlkZGEsIDB4YWQyN2QyYzUsIDB4ZWQ1ZDYwMTMsIDB4YmZiNjNjNzQsIDB4ZWZkMjE2OTIsIDB4YjIyN2Q1NGUsCi0JMHg5ZDM4NzE3NSwgMHhlOTFhMzBkYSwgMHg4ZDllOGI3OSwgMHg2MDI4M2ZlNywgMHhjZjdhOTNmYiwgMHgzZTVhMjQ4YywKLQkweDZiYmU3MmY5LCAweGY1ZWFhZDE1LCAweDRhMDY4MjE4LCAweDRiNGRiZTdmLCAweDg0YjE5MDRlLCAweDVkOTRlYjk0LAotCTB4Mzg3MjI3MDAsIDB4ZTJhYmU3MWEsIDB4NzE3MWI3YzMsIDB4MWVmYmQ0MjksIDB4MTI0ZWVjN2MsIDB4ZjRmZWY0MzMsCi0JMHgzMTA5MTliNSwgMHgwZjZiZDNmNSwgMHhmZDAzYTUwOSwgMHg2YWM4YWY2ZiwgMHg3YjcxZDIwZCwgMHg0NGJhNDdkYSwKLQkweGU0NTI3NWFjLCAweDU5OTBmYTUzLCAweDgzM2Q2ZWRiLCAweDhmNDNhODZiLCAweGZiNWFmNGZiLCAweGI0NGFmNTg3LAotCTB4NWJmYzFmMWYsIDB4ZjBkZDI3ODQsIDB4YmMwMTdlZWEsIDB4YzFjNTk3ODcsIDB4NzQ3ZjE0Y2EsIDB4ODk0M2JlYmQsCi0JMHg3YWM4YWYwOCwgMHgwYmJiZDViMywgMHgxM2Y1NTNmOCwgMHgwYWYxZjNmZiwgMHhmOTA4NmY4NCwgMHhjNzhhNjkxOSwKLQkweDFkZTc0NjdkLCAweGJiZWZkMTM0LCAweDVmNzE1OWI3LCAweGI0YTYzYzY1LCAweGY3N2UwMTc1LCAweGI2OWQ3MGRiLAotCTB4MGFkMTZlNjksIDB4NTg5OTFkZTUsIDB4MzE0NTcxYmUsIDB4ODZjNzE1MzksIDB4YWY5NDA5MjUsIDB4YTRmZmE0NGMsCi0JMHg0OTEyMmVmZCwgMHhkZjAwYTlhZCwgMHhlZGEzNmNlNywgMHg4NjljYmNjZiwgMHgyNDY0NWNmOCwgMHhjZmJhMjY3NSwKLQkweGViYzMyMzQ5LCAweGE3Y2ExNjk5LCAweDhkY2E3YzI4LCAweGM5NjdjODVkLCAweGU4MDQwODdmLCAweDg1YWJiNjg1LAotCTB4MjBlOTRiNzYsIDB4ZTEwMzA1NDksIDB4MDM0YjdjMDYsIDB4Mzk1ODQwYjcsIDB4YjVhYmNlOGIsIDB4ZmY3NDI0NDUsCi0JMHhmYWE3Y2ExMCwgMHhjZmQ1OWZkNiwgMHg2OTNmODBjNywgMHgzMzdmMjdiZSwgMHg1N2U4ZTE2YSwgMHg2M2VlMmRmOSwKLQkweDU5YzRhOGJhLCAweDUxZjlmYTYzLCAweDE4ZTdhYzQ3LCAweDEyYzNmM2UzLCAweDQ0Njc3ZTAxLCAweGYyOTk3MmVmLAotCTB4OGZjNGM1YjcsIDB4MDQ5MmIxZmMsIDB4NDc4ZWE5ZjEsIDB4YmJlMzJkZjksIDB4ZTE3N2M2MjYsIDB4ZmMwZDc1MTksCi0JMHg4YWQyNDFmNywgMHgzODBhYjM3YywgMHhmNzdjNjBkMiwgMHhjNzc3Y2EzMSwgMHgwOTc3Y2QwZSwgMHhiODA3YzlhOSwKLQkweGI4YjdlZWZhLCAweGY4MDNjZTAwLCAweDJhZWZlNzJmLCAweDhjMGQxMzFlLCAweDU4ZjhkZjBmLCAweGZkNzkyNDQwLAotCTB4ZWFkZDc4NzAsIDB4Y2ZhMGU3M2UsIDB4MDZlMjQyZTgsIDB4YzBmYmU3ZmUsIDB4ODA2ZTUyNjQsIDB4NTE2NDg3YjIsCi0JMHg0ZWIwZWNmOCwgMHhhZDAyN2VmOSwgMHgwZGM0NDlmNywgMHg5M2JhMzM3YywgMHhmYmU4NWJiOCwgMHg4N2UyNjY5ZCwKLQkweDI4MjZhNmZlLCAweGMwZDM4ZmQ4LCAweDc5MmY0MmU4LCAweDJmYWQzZTQ4LCAweGVhMGNlZTJhLCAweDEzYzQ5ZjYwLAotCTB4YjViZGY4MTksIDB4ZDNiZmY1OTMsIDB4ODAyYmJmNGEsIDB4YWVmYzA0ZWYsIDB4YTkxMzdiZWYsIDB4YmVmYjBhOGQsCi0JMHhlOTE5OTBmOCwgMHg2YjQxZjJlOCwgMHhkMGYyODhjMCwgMHhmZGEzNjE5YiwgMHg0OGQxZmMyNSwgMHg4NzNkYmQ2MCwKLQkweDdiZTdjOGFjLCAweDJiNmU2NGY0LCAweDQ5MTBlZjZkLCAweDczZTIyYjRkLCAweGQ4MjdmNjJkLCAweDI3ZTlmMTMyLAotCTB4NjgwNDI5YzUsIDB4MDUzZGI4NTcsIDB4YWIyMTMyYjYsIDB4NjU1NzVmOTEsIDB4ZjI4M2RlNzYsIDB4ODE1MTlmNzYsCi0JMHhkNmQ5N2M3ZCwgMHg3NGNhMWNiNSwgMHhlNWE3ZTIzYywgMHhkYjA1NjUyZiwgMHhjZDRmZjZmOSwgMHhlZjdkMDlmZiwKLQkweDBjNWM1OGYzLCAweGEwN2NkZWJhLCAweGEzZjhhMzE3LCAweDZmMTQ0YzdiLCAweDQyYzdjNDMzLCAweDU2NzlkMjhmLAotCTB4ZTA2NDU5YTUsIDB4ZmUzMmQzYzcsIDB4YjRiZGZlZjQsIDB4M2Q3ZWQ5ZmMsIDB4OWZkZTAyMzEsIDB4NjQ5NzNhOWQsCi0JMHgyYTI3Y2QwZCwgMHg1ZDkzZmEwMywgMHg2NGJhZjQ2MSwgMHhkNTVjYjZhZiwgMHhkYWZiMmRhYSwgMHg5YjU0ZTViNCwKLQkweDFhMjY3MWQ1LCAweDJhZWJhNmY3LCAweGIxYTMyN2E1LCAweDNhMTZkM2U2LCAweDQ2YWJlMzVmLCAweDk2N2Y5YmU0LAotCTB4ZTAzNjk5YmQsIDB4MzFkMGJhMGIsIDB4ZTMzMWEzODAsIDB4ZTAyZjU4ZmMsIDB4MDE3M2ZkYjksIDB4MWI0YTQ2OWUsCi0JMHhiZTBjNzk5ZCwgMHg5YjJlYWZiMCwgMHg3OWM4NjdlNywgMHhmZTk3Y2Y0MywgMHg0NzA4NzQ5OSwgMHg5M2MxODliNywKLQkweDliMWYwN2YxLCAweGVlNTdkZDEyLCAweGY1ZDA4ZWNmLCAweDI1MWQ5YTJmLCAweGVlMzdjNmFmLCAweGEwNDVmMWQyLAotCTB4ODkxY2UwYWYsIDB4OWY2ZGViNmYsIDB4NWRiMTYzMDksIDB4NTk4OWYyMjUsIDB4NTc5ZDFkYjQsIDB4YjdjNjU2YzUsCi0JMHgxOGNlOTI5NywgMHg1NGQ1MGZkOCwgMHgxNDUxMzFhZiwgMHg3ODYzNmMzZSwgMHgyYTFiNTI1OCwgMHgzNjdmZDIwYSwKLQkweGMyNDY0YmRiLCAweDI1YWZhNTNjLCAweDFkN2ZlMDBmLCAweDg3YTYxYmY0LCAweGIxZDM2NmRkLCAweDcyY2Q3YmY2LAotCTB4MzY4ZTA2YjcsIDB4OTZkN2Q5NGQsIDB4ZWQ4Nzc3MjQsIDB4ZmY3YzI1OTcsIDB4NjA5MDQ1MTMsIDB4N2FmOTRiM2QsCi0JMHg2Zjc4MmY3ZSwgMHg5OTU1ZjgwMywgMHhlODUzMGNiYSwgMHhmZDdlYjdmOCwgMHhjNWVmY2EwNSwgMHg3NWM2Y2EyYiwKLQkweGRiZDcwYjhmLCAweDE3NTdjODhjLCAweGY3YzVlYTNmLCAweDM5OWI2ZmFmLCAweGNkYjdkNzFmLCAweGNmZGMwMGFjLAotCTB4OWU5MDE0ZWMsIDB4MDI1YWE3MTcsIDB4NWJjZmZhMjYsIDB4NWI5ZjRjNmQsIDB4ODQxM2JmNGMsIDB4ODQ4YzcwODEsCi0JMHgzMzFkZDlkYiwgMHg2NzQ3NDA5ZCwgMHhkZmNmMWIwOSwgMHg1OWU0ZTRjYSwgMHg5YjJiYzI5OSwgMHhjZWZlODFiNSwKLQkweGViYmUzMWI2LCAweDMzZjMzYWRiLCAweDc3OGI0ZmUwLCAweDY3OTAyZThhLCAweDFhZWFjM2E0LCAweDdkM2NhMDRlLAotCTB4ZjQwYjQyZTQsIDB4MGE2ZTI5NzcsIDB4NmJiY2RmNmQsIDB4N2JlMjJjYmEsIDB4ZmQ4MDEzZDEsIDB4NmYzYmI5MjMsCi0JMHg1ZGE1ZWZhNSwgMHg3OGRmNTAxMywgMHhjZDkxYTc2MywgMHgwZTdhNjZkMywgMHhkN2ViNzFkNiwgMHg5MmM3ZWEyMiwKLQkweDJmNDE3ODhlLCAweDQ3YjgzNjZiLCAweDc2NTU3ZWMyLCAweGYwMDMzYjNjLCAweGIyNTY3NjcyLCAweDQyZmZkYjBlLAotCTB4YzNjMDMyMjAsIDB4ZGUwMTIyYjYsIDB4MGYyNDE2MmYsIDB4YWQ4YWNmZWMsIDB4NzJlMWE1OTUsIDB4MTExMzZjZDksCi0JMHgxZTMyNTM1ZiwgMHhlMGIyZTg0YiwgMHhlNDA3YmE3ZSwgMHhiYTRlZDU1NCwgMHhkOWZjNjA3ZiwgMHhhZjdmYmQxZiwKLQkweDNkM2Y3YzIzLCAweDYxNzQ0NDVjLCAweGJmYzc3NjcyLCAweDVmYzEzZDIwLCAweDM0ZjgwOGIwLCAweGVlZjVjNTgzLAotCTB4YmFiNDYzMmIsIDB4ODA3MjZhMmYsIDB4NWQ1ZTJlNWYsIDB4YTIwZjIzOTMsIDB4OGJlZGY3YmYsIDB4OGUxZjc0MWQsCi0JMHg0ZDgzNjQyNiwgMHhiMDc1NTcyMCwgMHhmZDFhZWQzMSwgMHhkZmJkMjg3NiwgMHgwMzczYWI5MiwgMHhlMjJlNGRkYywKLQkweDEzM2U5NjdlLCAweGEwYmY1NDhkLCAweGEwMjVmMDdjLCAweDFhNzg3ODhmLCAweDk3ZDIzZTEwLCAweDg3N2RlZDBmLAotCTB4Y2Q5MjZiYWUsIDB4YzdhMDUzZmIsIDB4MDdjZWUyMGMsIDB4YjkyMTJiYmMsIDB4MDA1YmFhOTgsIDB4YzgwZmQ0NjIsCi0JMHhiN2QzMjMwZSwgMHg2ZGVmYTYyNCwgMHg4MWNmMjc4OSwgMHhmYjhlYTBiZSwgMHgxZTJmZTg0YiwgMHgxYjFlYzJmOSwKLQkweGMzZTdiN2VkLCAweDVjMDE4ZWFmLCAweDhmY2ZkM2FiLCAweGJiZWNmOTA1LCAweGExNDE4NWYyLCAweDBiYjRiNWViLAotCTB4MmUyZGFmYzgsIDB4ZjE3YTAxMGYsIDB4MGIyMmNmYjUsIDB4YWNmOWZhZjIsIDB4NDBlNGM1Y2YsIDB4NmFmZWJhZTQsCi0JMHhjZmI2N2E2MywgMHg0ZTdlYzIxMSwgMHg2ZGZlZDlkYiwgMHhkY2ZhMzFiNiwgMHgwMDJhMjJiZSwgMHgyM2JiNzVmYywKLQkweGZmNDk4NjYwLCAweDdjOTRmYmJkLCAweGM1MzhhNTQ1LCAweGUxODlhNTczLCAweDU3ZTdiNGQ5LCAweDNiZTgxMTZlLAotCTB4YTFjM2M4MjAsIDB4ZDFmZGIwYWMsIDB4MjAyZjMxNWIsIDB4ZGIzZTcxZDIsIDB4ZjJjN2VkOTMsIDB4OTEyZTI5ZmUsCi0JMHhmY2Y2NTlkNiwgMHhlMDBiMmVhYywgMHg0MTc3YTZkNCwgMHgyYmFiOGI3YiwgMHhkOWY3ZDYwNiwgMHhiMDMxNTM5ZSwKLQkweDIyM2Q4YWJlLCAweGYwMjJiYmFlLCAweGJjYzJjMjc5LCAweGJhZjBiZTdlLCAweGMwMGRmZGUwLCAweDRiMDQzODhiLAotCTB4NmNmODdmMzgsIDB4MDU4NGE1Y2YsIDB4OTgzOTU0MTYsIDB4MWMxYzJjN2MsIDB4MjllNDQ3MmUsIDB4NWJiNzgwOWQsCi0JMHgzOTc4NjE2ZiwgMHgwMDYzMGJmNywgMHgzMzM5ZGVmOCwgMHhmYzYxNWY5NSwgMHhjOTk1OWNmNiwgMHgyNjM2OTNiMywKLQkweDRkNjkwOTFmLCAweDU3ZDM3OTA3LCAweDA3NTczZmJlLCAweDY2NDhmZmUzLCAweDVhMTg3N2ViLCAweGZlM2Y2MWQzLAotCTB4ZTdlZGEwYjcsIDB4MDkxZDNhYzEsIDB4NTk1ZWRlNTAsIDB4Zjk0MzQxNDcsIDB4NWUxN2I5ZDEsIDB4ZmY3ZTA3NDksCi0JMHhhNGFmYjNkOSwgMHgyZmNkODU5NywgMHg3OWY1M2JmMiwgMHg5YWVkYzZkZSwgMHgyNmRkYTdhNiwgMHg1MTE5NWUzYSwKLQkweGMyYTYwYmM3LCAweGUzMmU2NTc4LCAweDQ4NWZjMDI3LCAweGRmNzc3NGRkLCAweGNmNjJjOWJlLCAweGFiNjRmNmYwLAotCTB4YWY2MGY5MWIsIDB4MWQwMGE4Y2IsIDB4NTZmNWRmYWEsIDB4ODA0ZGI5NDQsIDB4ZmU0MjYyMTcsIDB4MDYyZWQ2NTcsCi0JMHhkYjlmZDA4ZCwgMHhmYTAxY2MzZCwgMHg0NDdkZmFiNiwgMHg0NjM4YWVmZiwgMHg4MDliNDI0ZiwgMHg1ZTc0Njk3NiwKLQkweDc3ZjFmOTA4LCAweDJkNGVmN2U2LCAweDdmOWUyOTNlLCAweDMyYWU3ODAxLCAweDEwYTU4ZTg1LCAweGMwMDMwZmE0LAotCTB4OTE2ZDUwY2QsIDB4YWMyNTNlNDAsIDB4N2ExNWY0NjEsIDB4YmZmYTg3NDQsIDB4MDE2OWQ5MjEsIDB4NGU2Yjc2N2UsCi0JMHg2ZThlYWQ1NCwgMHhjYzU0NDc0NCwgMHhhN2Y1NDI1OCwgMHg2YzVjZTRiNCwgMHg3NDY2MmZlZiwgMHg4MTIwNGZlZiwKLQkweDU5MGMwMjM1LCAweDk2YmYyMDIzLCAweDNhOWM1ZTk5LCAweGI0MGRjODkxLCAweGQzM2IzZGY4LCAweGI1YzQ5YzU3LAotCTB4YmM0NmNjNTUsIDB4NTA3ZmUwMGIsIDB4MDVjYWExZTEsIDB4OGZlMDFmYTAsIDB4ZDIxMzA0ZTcsIDB4YTAyZWQwOGYsCi0JMHg1YWVhMjg5ZSwgMHg0M2JmNDFlNywgMHg1ZDllNTNkMSwgMHgzZDE5NTNiNSwgMHg0OWZmOTVmNSwgMHhlNzY0NTRmNCwKLQkweDllODAzYmY0LCAweDkzZDIwYWJjLCAweDNkMzgzNGQzLCAweGJiZjkwMjI5LCAweDA3YmYxM2RhLCAweDBlNDRhY2VjLAotCTB4ZWY5YzRkYWYsIDB4MzEzMTFlODQsIDB4MTkwNTBhYmYsIDB4Zjc5NGI3YWMsIDB4MDRiMjZhNTcsIDB4MmUxZjkwNDUsCi0JMHgzMGFlZjlmZCwgMHhkNTA3NjI3YiwgMHg0OTRlYzE2ZiwgMHgzZTllN2QwMiwgMHg1N2NjZDY1MywgMHhiM2E0NmYxMCwKLQkweGU4ZGFlYzBiLCAweDhmOTQyNjA5LCAweDk5OWQ3NWViLCAweDhlMjRhZmEwLCAweDc0MDdkOWFhLCAweGFmMmYzODkxLAotCTB4NjdkYTBkNjAsIDB4MDc5MDM2YTksIDB4YmZkMTViMjAsIDB4ZDNkOGEyYjAsIDB4MmZhNjE3MWQsIDB4MmZhODA4NzQsCi0JMHhjNmVhM2Y1NCwgMHg5OWRiNTNmNywgMHg2NjFiZTA3ZSwgMHhkN2Q3N2Q0MCwgMHhjZjAxZjgyNiwgMHgwMDQzMWVkNSwKLQkweDgxN2FhMGY0LCAweDFiZmMwMWY5LCAweGVmZDgwYWNjLCAweDE1NjUzNmNkLCAweGJmZjM0ZmQwLCAweDVkM2YyZTI5LAotCTB4Zjk4MDZmNDcsIDB4ZDc0OTdhMTMsIDB4YmQwMDlmYWUsIDB4M2VkMDU4NTUsIDB4YjYwNWI2NmYsIDB4Nzc3NjgyMmQsCi0JMHgwM2JiNjFlNywgMHhmOGQ5MTM3ZiwgMHhkZjhlMDljMywgMHg3YThhZGY5YywgMHgwYTZkZjM3YSwgMHhmYzcwMDNmMywKLQkweDI3NzJjZjM1LCAweGE4MWY0MGQ5LCAweGU2ZTdlZWQzLCAweDlkOTI3NzE2LCAweDUyYjVlZmJlLCAweGNhZjFkMGMwLAotCTB4ODc4OGNkMWEsIDB4OTljMTkxNjQsIDB4ZmM5ODlhYzQsIDB4NGMxN2M4MTksIDB4ODk4NGY3MDAsIDB4NGY0ZDMxMWMsCi0JMHhiN2QzYmVhMywgMHg4MGE3MjljZiwgMHg2ZmFmMzI3MiwgMHhkMGUzYTRjZSwgMHgzY2YzNTg3OSwgMHg5Zjc5YTA5OSwKLQkweDNjN2U1YTZhLCAweDAyNGZkMjhhLCAweGM0NmU4N2Y4LCAweGViZDA3ZTI2LCAweDU2NGM2MWEzLCAweDRmNzBjMzc2LAotCTB4OTI0NGU4ZTksIDB4ODZjZWY2YTEsIDB4Y2FjMzkzNjksIDB4ZjdmZjdkYmMsIDB4NjlmNmVmZmYsIDB4ZmI3NzI4YTksCi0JMHg1NGRhNjFlYSwgMHhiNzY1YWIxZSwgMHg5ZDZiY2U5OSwgMHhhMjVlYmZiNSwgMHg0ZGE5YWVmYSwgMHhkN2ZiZGY2MCwKLQkweDhhOWQzZWRmLCAweDFkNDE1ZWU4LCAweDM3N2FjZWZmLCAweDQ0Y2NhOWY4LCAweGZjZjg1ZTMzLCAweGY1ZmU4OGE0LAotCTB4YTI4YjdmYjQsIDB4MDI1NjVmYjYsIDB4YTA1NTNkZmQsIDB4NzNhZWRmOTYsIDB4ZDI2ZGY5ZDMsIDB4OTA0M2ZiNmIsCi0JMHhhMGExZWZmMiwgMHg0ZjhiZTc4ZSwgMHhkYzljNjg2YSwgMHgzZDUwMTdhZiwgMHhkZjFmNjAyMSwgMHhmYmFjMWZhZiwKLQkweDA2ZTliNGE4LCAweDdjYjQ1NjNhLCAweDU3NzIwMGM5LCAweDg3M2VmMzk1LCAweGU0NDdmYTgwLCAweGVmODk3ZDdlLAotCTB4NTdjY2VmZDcsIDB4YmEzZDUxODcsIDB4YmY0N2EzNDgsIDB4ZGFiZTQ3NjQsIDB4MjRiNjAzMzUsIDB4NmY5MDNmYjUsCi0JMHgxMGYzMWVmYiwgMHgzZWE4ZTdkMCwgMHhmYThlYzA3MiwgMHg0NzMzZjljOCwgMHhlY2NmN2Q2OCwgMHg1MTRiMWNiZiwKLQkweDc5YjJkZGEwLCAweGFlZmFmN2EwLCAweGJlYjc0ODQ4LCAweGEwNDA2MmJkLCAweGZiZTI2Yjc0LCAweGMwZjFjYTg1LAotCTB4OWU5ZmExNzAsIDB4OWQzOTk0MWUsIDB4MDc0NGZjZGEsIDB4OGMyMWRmNzQsIDB4ZDU3ZDIzZjcsIDB4NzE0ZGRmYTQsCi0JMHgzZWU3MTI5OSwgMHhiN2VmOGY2MiwgMHhmZGQ3MjMxYiwgMHgwZmQ5OWQ5MSwgMHg2ZGUyZGNiZSwgMHgxZWZmZDAzOSwKLQkweGQwOWU4MDgxLCAweDYxMzI3YjkwLCAweDlmNGRkYTAxLCAweGZiMGMyYzI0LCAweDI5ZWRiMmFlLCAweDVlZTU2Nzg0LAotCTB4ZmM3MGEwZmQsIDB4MWMyMjJlYzgsIDB4ZWNiZTBmYWIsIDB4MmU3MWJlMDYsIDB4YTg0ZjIwMjAsIDB4MzdmNTAyOTAsCi0JMHg4NTQ1NzJkMiwgMHg1MjQxMzQwZSwgMHgyZjdmOTgxOCwgMHgzNWNjOGZhYywgMHg3ZDc0ZTE5MCwgMHg0MDliZDA0MSwKLQkweDk3N2JkYThmLCAweDM3NTg0NmZmLCAweGFmYTA0ZmZkLCAweGExMTY3YmI2LCAweGQ3M2VkZDNjLCAweDMwOTkyMTY0LAotCTB4MDg2NWIyY2YsIDB4MGRjYTM5MDcsIDB4MmRjODY4NzAsIDB4YWE3MTgyNGUsIDB4NDU5MGNkNjcsIDB4MWM3YWE3YTgsCi0JMHg3YTNmNTdkNCwgMHhkMzBjNDA1ZiwgMHhmNGRhMWIwMywgMHgxNGU3YTAyNSwgMHg1N2VlN2Q1MSwgMHhmNjY5ZGU3NCwKLQkweDc0NWM0YmRiLCAweGZiODhhNzFmLCAweGU1YTYxZmYyLCAweGYxZjA0MzJkLCAweDZlNGMxYzQ3LCAweGZmMWUwYWQ0LAotCTB4NWZkMTBhZjcsIDB4NmZmZGMyNDcsIDB4NmY0YzZkMTksIDB4NjgzNzY4YmMsIDB4ZWQxN2FmZmMsIDB4ZDkzNzdlMTIsCi0JMHhjODE1MzlkZiwgMHgxNWQ0YjBlNywgMHg4ZmI0ZmEwZCwgMHhmYjA3M2ZiOCwgMHhjYTJjNzg5OSwgMHhjNjI3ODhiMywKLQkweDE1MmIxYzhmLCAweDFjOTkyYmY0LCAweDgwNmZlYjVkLCAweGRhMTJjOWZhLCAweDdhZWE0NDJmLCAweGE5ZWRjNjEyLAotCTB4MDgxYWI4NzcsIDB4N2U1MDA3ZGYsIDB4OWVlZDBmMzQsIDB4YWJkZTcxZjksIDB4NWM0NTQ3NDAsIDB4MzgzOWVkNGYsCi0JMHhhZjJjYmYzMywgMHg3ZmFhZWY1ZiwgMHgwZDU4MWFkNiwgMHgzY2FhZDRmYywgMHhmNGZjMDI1MSwgMHgyNGY5MDk0YiwKLQkweGE3M2E4NTMxLCAweGZmMmE3ZWQyLCAweDFiN2VjNzZhLCAweDcxNTFiZGEyLCAweGU2ZjVmZTc0LCAweDgxZDAzZDQwLAotCTB4NzZjNDQ1YmYsIDB4MjBhNmQ5OGUsIDB4NzNkOWYzZjQsIDB4MmZkMDE2ZDYsIDB4MDIyNjhlZjUsIDB4MTVjZDRjNzQsCi0JMHgxYzk4ODdmNCwgMHhmMmQwYTIxZSwgMHg0OTdjZmY1NCwgMHhhMTExNzkwMCwgMHhiZjA1NGNjZiwgMHgwZTJiZGExMSwKLQkweGYzMTYyYmY0LCAweDUyOWMzMWZkLCAweDZlMTMxOWMxLCAweDcxYWJkYTg1LCAweGYxY2RmYWZkLCAweGYwNDhlNmFmLAotCTB4NzQ3YmQ1NTIsIDB4OWRlN2U2MjYsIDB4YzA4YTM3MzYsIDB4ZTg2ZDY0ZjgsIDB4Y2FmYzBlOTgsIDB4N2EwMjRlOGUsCi0JMHg4MGFiNTU3MCwgMHhiZWU1NTRlMywgMHg2NWJiMDA2NCwgMHhkZmRiMmI0OSwgMHg1MDY3NmUzZSwgMHg1ZTgzYTVmOCwKLQkweGNkMTcxZDkxLCAweDQ2NWFjYmY1LCAweDU4ZjNhNGVmLCAweDQ1ZjljMDBhLCAweDY4NDI0Zjg2LCAweGJkYjg2YjNiLAotCTB4ZDVkOThhYjIsIDB4ZjcwMzNmYmMsIDB4YmY3MTU3ODcsIDB4NTg4NDk1MTEsIDB4ZDU0ZTM2M2YsIDB4NjdmMzU2MzMsCi0JMHg3MWYyN2IxMywgMHg2ZTlkMDhiNywgMHgyZjk5ZTAxMSwgMHhlYWI2ZmM2OCwgMHhlMzFjN2E3MywgMHg0MzQ3YjEzYiwKLQkweDg2ZmY2MDMzLCAweGZmODE3ZDI4LCAweDZiMzA5YjY4LCAweDdkNzQ5YmQ5LCAweDcyOGZjNmRiLCAweGE0ZTYwYTgxLAotCTB4YzAxNjI0ZTQsIDB4MTQ4YTRhN2IsIDB4OWY2ZDg1ZWUsIDB4MjFiYTAwY2YsIDB4NmJmNzA0MjUsIDB4YjExNGRiNzUsCi0JMHg0MDBkYzc4YSwgMHhhZThjNDg1ZiwgMHhjNGZhODE2OSwgMHgzZTUxNzIwNywgMHhmYzFmMWY4MywgMHhiODcwNzdmZiwKLQkweGZmOTg1OTI2LCAweDlmZGFiOWNlLCAweDhjMWU1MGY5LCAweDI2ZjY1OWVmLCAweDBhMjYzZjhjLCAweDE0ODkxNWUzLAotCTB4M2UzYjU2MzcsIDB4ZTU3ZmMwZWIsIDB4NDA0N2Y5MjQsIDB4OTU0YjNhZmUsIDB4MWE4Zjk4MDIsIDB4ODlkNzhhMzcsCi0JMHg0M2NhY2MwZiwgMHhiYjY1OGUzZSwgMHhhNmVmNzA0YiwgMHg2Y2UzYmJjZiwgMHhkZjZhMmViOCwgMHhlMTdjYzA5NSwKLQkweDBkZGI4MDdkLCAweDRlMjc0NzYwLCAweDcxODdjOWFkLCAweGNmMDQ0ZTIxLCAweDg0YTBhNDllLCAweGNmMmE2OGZlLAotCTB4NmQzYTA1OWYsIDB4YWYwMGNhMzMsIDB4M2ViN2I2ZDIsIDB4NmE1Yjc5MDAsIDB4ZTgyMmFkMjIsIDB4NGI3YTExM2YsCi0JMHhmMzVkY2M1NiwgMHgyZjdiNmU4MCwgMHgzOGY1ZDk5YywgMHgwM2VlZWJjYywgMHg0N2UyMmYyZSwgMHg3YWRjOGZhYiwKLQkweGNmY2JkMzBiLCAweDgwYWQxYjNkLCAweGYzOWJiOTFlLCAweGIyM2ZhYTZkLCAweDk4MmZjMTM4LCAweDQ3YTkxOTFkLAotCTB4YjVhNzEyM2UsIDB4ZmZjYWZhNGIsIDB4Y2Q5MjNkNzAsIDB4ZjdlNzRmY2YsIDB4Zjc3ZjE4NmMsIDB4YjdhZmJiNzEsCi0JMHhjODBjNjJlMiwgMHhmNDdkNTVhZiwgMHg1MTdmZTU0NiwgMHhiNjUyOWViZiwgMHhkODEzZmEyNywgMHg0NTc2N2Q2NywKLQkweGI1MjIzZTg0LCAweDg0MDUzOGIwLCAweGRhZWY5MGQ5LCAweGUyZmUzYzBjLCAweGZmMDdjZTc2LCAweGY5MDcyZDg3LAotCTB4YTJlN2YxY2YsIDB4MTczNzQwZmQsIDB4OTdhOGNkNWIsIDB4MTA0MzM2NDksIDB4YjJmYjU1ZTYsIDB4ODAxM2EwMzEsCi0JMHg3NTc4NzIwZiwgMHg4MThhYjhmMCwgMHgzOWVjNmJjNywgMHgwNzE0MjgwYSwgMHhmYmU0MWUwYywgMHgyY2Y0OTdmZSwKLQkweDc4MTMxMmFlLCAweDVlNWEzOWUxLCAweGM3ODkzODdhLCAweGVmZjYwODVkLCAweGYwOGQxODNmLCAweGM0YTUxYTVlLAotCTB4N2Y0YmZmNDIsIDB4OWUyMDQ3MWQsIDB4MDNjNzRiZDIsIDB4N2IzN2NmM2MsIDB4NGQ3ODBhN2YsIDB4YzlmZWIyMzYsCi0JMHhjNTg1NDY2YiwgMHgzNjM5ODI3OSwgMHgwMDk2ODcwYSwgMHhlNTRlZmZkMywgMHhiYTA2ODJlYSwgMHgxN2QwMTZlZSwKLQkweDM1NDZkZmEwLCAweGQ5ZDZjMmZlLCAweGM1ODUyMWJiLCAweDAxMTk0MDBmLCAweGZiOWVhY2JiLCAweGNhYjhkNWU5LAotCTB4MmI4N2U2NjEsIDB4NTM5M2YxZTcsIDB4MDMzZDE3YjMsIDB4YTE1YWI0YTEsIDB4YjRlYzA0YTYsIDB4ZDA1MzBkY2IsCi0JMHg4OWZjYmQ2ZiwgMHhhZjJjZjg1OSwgMHgxN2RiZmFkMywgMHhhZjdjMWE5MSwgMHgzZjU1MjdjNiwgMHgxOTcxMTk3NywKLQkweGVmZGNmZTk4LCAweDdkNTFkNDNmLCAweDhhOTNhOTQ2LCAweDEyNjY3ZTQxLCAweDAzYzgzNTc5LCAweDM3YjE0ZmM1LAotCTB4ZTk2YjNlODEsIDB4ODE3ODk0MTMsIDB4OTNiNjk5NDIsIDB4ODA1MTFkZWEsIDB4M2FiNTc1ZWYsIDB4NWFmZTViOTQsCi0JMHhhOWRhMWI5ZCwgMHgxYzU2ZjJmNCwgMHg1N2ZkMjNmMywgMHg1MDk3ZjMxYywgMHgxYzYwMDc1MCwgMHhlN2FiNTlmNSwKLQkweGRmZGU3ZWZlLCAweGMyMGJhMjJhLCAweGU3YjAyNzUzLCAweDE5MmE1OTNhLCAweGZkYWI3ZTRjLCAweDRjNmJlYWQ1LAotCTB4NGU2ZjQwNTMsIDB4ZmIzZmExZDMsIDB4MTczZGMxYjIsIDB4MWNmNmM1ZmQsIDB4YjVhZDUzYzQsIDB4ZDU4NGFlYTYsCi0JMHg2Y2JhNWVlMywgMHhmZWIwNzkwZSwgMHg5NjI5ODk2NiwgMHgzZjAzYjE0NCwgMHhmYTYzODhlZCwgMHgxNmRjMjQ0NSwKLQkweDkxY2I2OTM2LCAweDgwY2E5MDcxLCAweGJjNGU1Y2I2LCAweDU5YjI5MjIzLCAweDdkZmMyMGRjLCAweDk3NjdlNzA3LAotCTB4YmMzOTMyMWIsIDB4YmJlMDA2NWQsIDB4YTU1N2ZhZWEsIDB4ZDJlOWI4MzIsIDB4YWQyYjMzZDgsIDB4NDFkMDJlNzgsCi0JMHgzMjg1ZjgxNiwgMHhhYWZjYzllMSwgMHhmZjM4MjU3NCwgMHgwMjFkOWJhYywgMHg3Y2M0NDdkMiwgMHg5ZThjNmQ2YiwKLQkweDBmY2NmNWZjLCAweDNmY2VmN2Y5LCAweGUzNjdkZTcyLCAweDc2M2VmODEyLCAweDU2YmUyMTNiLCAweDVlMzAxYjJlLAotCTB4MTJmZWFkN2EsIDB4ZGY2YjQzOTMsIDB4ZjFmZjk1ZjYsIDB4ZTdiMzJkZjYsIDB4MmZjNjQ1ZWIsIDB4YTk3YzhjODgsCi0JMHgzOTZiNjY0YywgMHgwYjllYjgyNSwgMHhkNTBiN2JjMiwgMHhmNTFkNjAxYiwgMHg5MWYwMDE2MiwgMHg3MDU5NzdhOSwKLQkweDI5ODdkNTFkLCAweDU1ZjVhMTFmLCAweDgzYTU3NThmLCAweGVlMmVhZjVjLCAweDgwYmM4MWNhLCAweDZjYzJmODQ4LAotCTB4ZDE5Zjk1MjUsIDB4NmEwZTY1NzYsIDB4NTBkZTgwOGYsIDB4MGQ4NzhkYTcsIDB4ZDNiYTAzOGMsIDB4ZWVjMWUzMWMsCi0JMHgyZGVmYjUzOSwgMHhjY2ZiNWY5MCwgMHhiZmU4YmYyOCwgMHhmZjYxMTg4ZSwgMHhiZTQ0Y2MxZiwgMHgzYmM1ODlmNiwKLQkweGJlM2VlMjFjLCAweGU3YWVlMGE4LCAweDYxOGY0MTMzLCAweGJiNTU1NDdhLCAweGM0ZjQwNWIxLCAweGY4YjBkYWIyLAotCTB4NTFhZmZjMWEsIDB4NzUyMzZmMWIsIDB4OTNiYmY0NzYsIDB4OGFmYmVkNjYsIDB4MGRkZjExMWQsIDB4MjEzNWJmODgsCi0JMHhiYzE4YjY1ZSwgMHg1M2JmNjEyMywgMHhmMWYxODQzOSwgMHgwMjNhOTUwYiwgMHg1ZDE3MmRmOCwgMHg1ZDQ4NDA4YiwKLQkweGYzZjU2YjMwLCAweGFmODY1NjBiLCAweGZlNTUwZTY5LCAweGNmMDA3MmI4LCAweDc4MDFlNTdkLCAweDllMDBlNTc2LAotCTB4MWJjNDc1Y2IsIDB4ZTAxNTRmZGUsIDB4Mjk3N2UyOTksIDB4OTc4NWYzYzcsIDB4OWUwMGU0MjcsIDB4OTA5YmVmY2YsCi0JMHhhMmRlNzgwMywgMHhiZWMzNzI2ZiwgMHg0YjdiMjU5OSwgMHhkM2RkOGUwMCwgMHg0MTVmYTgzZCwgMHhkMWY2MTNiYywKLQkweDdkZTNkMmI1LCAweGY0NjRmMzdkLCAweGYzOTBkZjc4LCAweDViZjhjN2ZjLCAweDhiOGY5Mjg2LCAweDk1YTFlNmZhLAotCTB4OTI4MzBlOGYsIDB4Y2NhMGZjMGEsIDB4Mzk0NmZjNjQsIDB4ZmE4MzdmMDksIDB4ZjQ0NjRjZjMsIDB4ZWFmZTFjN2YsCi0JMHgxYmNjNDZkMiwgMHgzZjUxMTc2OCwgMHgyYzNiZmI1MSwgMHgzZjQxYjM3OSwgMHhkMzgxZmMzYSwgMHhlZTg2MTdlNSwKLQkweDhhZmMwYWRmLCAweGUwZmNmZmM1LCAweDAyZWQ1MTY3LCAweGU0OGNiZjU1LCAweGZiZTYzZmM3LCAweGZkYzNiMzdhLAotCTB4ZDgzYmZkOTksIDB4YjhmZmFhYTcsIDB4MDUzMWI3ODIsIDB4NzdiZDMxMmUsIDB4ZmU2MmUwOGYsIDB4MjdmNDU2ZTMsCi0JMHg5N2NjNzc1NywgMHg2OWZjNWZjMSwgMHhhYjhmZjk4MCwgMHhmZjQ3Y2U1ZiwgMHhmNWUwNjU3MSwgMHhkZmM4MGE2MCwKLQkweDdiMDY0MTc2LCAweDI3Y2Y3MmE0LCAweGZkMmM4YjMxLCAweDczYjUyZjc2LCAweDg4NmU4MDliLCAweGZhNDcxYjQ5LAotCTB4YTYyYTcwMzQsIDB4M2VmMzgyZGMsIDB4NzY4ZWYzMGQsIDB4Zjc0MDBjODQsIDB4MjNmZWQ0ZDUsIDB4NTJkNTQ5NzQsCi0JMHg1YmY0MThlOCwgMHgxN2E4MjBlZCwgMHhlZDY5YjYxNCwgMHhiODA1NGE0MSwgMHgwMzFlZWRlZSwgMHhlZGVkZGRmMiwKLQkweDc1ZjgwMDQyLCAweDk5OWJjMTgyLCAweGE0OGQ3MjBhLCAweGU0MDcxOGNhLCAweGMzOTc2Y2ZiLCAweGU4ZjMwMWRkLAotCTB4MDNiYjZiOGYsIDB4YTMzY2IwOGUsIDB4NDhiMTZkYWUsIDB4ZTI3YTVkYmYsIDB4NmQ5ZjgxOTYsIDB4MjY3ZTcyYjMsCi0JMHhmM2ZiN2YyMSwgMHgyMWEwNWIwZSwgMHg3M2Y4NmY0YywgMHg5NTA5ZTk4MCwgMHg0NDkxYmU2YSwgMHhkN2M1MTI4MiwKLQkweDBmZWUzOWEyLCAweGVmYzBkZjAxLCAweDNlZmMxMTgzLCAweGEzYzZhY2JjLCAweDNjZmM0MDk3LCAweGRlMWRlZTIyLAotCTB4MWY4ZTJmYWUsIDB4ZjRkNmY3MTYsIDB4OTVmMjZhNDMsIDB4NWJkYzZkNDIsIDB4NzY2N2VmNWIsIDB4MmIwZmRkMzMsCi0JMHg1N2U5ZmEwYSwgMHhiZjRhODNjNSwgMHhlZDFmZGNkNSwgMHgxNmI5MzhhYiwgMHgyNmQ3ZDdlOCwgMHgyZjVmNjBjOCwKLQkweDVkZmEzMTc1LCAweGUzMmZlZDRhLCAweDlkZmI4MWQ4LCAweDBkZmE1MmI0LCAweGVkNDM3N2UzLCAweGU0MjI4ZmZmLAotCTB4N2JmZjQ3ZDEsIDB4M2I1MDY4ZjIsIDB4ZjhkZjc0ZmQsIDB4ZWJhYmRmNmMsIDB4N2RmN2ZkNTcsIDB4ZDgxNzZjZWIsCi0JMHg1NzU4OGNiZSwgMHhlOTFhZGRhNCwgMHhjZWVkNTc3NywgMHg1Zjg3ZTU2YiwgMHhhZmMzZjA0NSwgMHhhMWY4OGZmZSwKLQkweDdlMjg3ZTI5LCAweGZjNmI4ZGE4LCAweDdmZjBmY2RkLCAweDRjZjFiZTM5LCAweDNhMzFkM2M3LCAweDMzMmEyYWNhLAotCTB4ZDdhNjRlZmQsIDB4ZTJmMTM1YjksIDB4Y2RjNWEyMTksIDB4Y2IyMmE2ZTIsIDB4YmI4Yzg4OTcsIDB4ZGM3ODMzMmIsCi0JMHhkN2U3ZWQ5ZCwgMHg1ZjExMTY1ZiwgMHg1YzNlM2M1NSwgMHg0MTc1NjFkNSwgMHg2MmNiMGFkMywgMHhjNjQ2Y2Y4YywKLQkweGZiMjQxZjRmLCAweDIyOGEwMDY2LCAweDYxNGJhOGUzLCAweDdiN2Y2NzFmLCAweDllM2YzNTNjLCAweDVjZTk0N2M1LAotCTB4YTE0ZjIxMzIsIDB4ZGZjYjU4YTgsIDB4OGE1Y2I3NWYsIDB4YmJlMTg2ZjMsIDB4MDIxYThmMzgsIDB4NDliNWQwODMsCi0JMHhkODdiMTNmMiwgMHg5OWUzNWJmYiwgMHhjZjNhZmQzZSwgMHg0ODFhNzFlNywgMHg2Y2ExZTQxZCwgMHhjMWJiNDZiMiwKLQkweDU4ZWE3MThlLCAweDljNGE1MWJlLCAweDc4ZmM0YTY3LCAweDllMWNlZmUwLCAweDc0NGZiZjA3LCAweGU4Y2YyZTE0LAotCTB4Zjg5ZjkxNWIsIDB4ZTAyZTJjYWIsIDB4NDcxZmFhN2YsIDB4ZjcwNzdmZWQsIDB4OWQyYjVlODMsIDB4ZGRhZjFiZGYsCi0JMHg3ZmU1N2RmNywgMHg1NzJmYmVkMiwgMHhlMzdiZmJjNywgMHg2YzI5NWI3NiwgMHgyMDgxZmIzNCwgMHgzODgwOWVmZCwKLQkweGJhNDBlNjUzLCAweGExOWZhYTFkLCAweGJjNzk3N2U4LCAweGVlM2M1OTY3LCAweGNjNThmNzNiLCAweGZlNDZiZDlmLAotCTB4M2ExODVkMTIsIDB4YjIyMmZlMDUsIDB4N2Y4MGE4ZGYsIDB4MjgyNWZjMTMsIDB4Yjg5MzFiMTcsIDB4MDIyYWVlYmQsCi0JMHgyZWJlNDMzOCwgMHgwYzdkNmJlNCwgMHhiNDM0OWNmZiwgMHhiN2Q4ZDhmZSwgMHhkOGZlOTlmZiwgMHhlOTA3ZmU1NywKLQkweDllYzgzNzhmLCAweGVlY2ViMDhkLCAweDkwMWNlZTI5LCAweDc0YWNlYjZmLCAweGJlMTc2MGZlLCAweDc2OGNmMmMwLAotCTB4ZWU3ZDE5OTgsIDB4OTI1ZDE4MTAsIDB4ZTRkNzcxMTUsIDB4YWYxM2Q5NzcsIDB4ODY3YjlmZTUsIDB4MmVmZmY3OWMsCi0JMHhhN2ZkNmNmZiwgMHhjNGJmY2ZmMSwgMHhlODc1MWY4MCwgMHgyZjJjZmM3ZSwgMHhjZGQzYjhiNywgMHg3NzY0NjllMywKLQkweDA3ZGI3Zjk4LCAweGZiZjQ2NmY5LCAweGVhYmU3YzIzLCAweDJlNWM5ZGZiLCAweDQ3ZGMxMjVhLCAweGZmOWMxZjgxLAotCTB4YjEyMjY0ZDAsIDB4NjQyOWU1NTQsIDB4NjNkYWIxN2MsIDB4NzU0MmY4YzEsIDB4YTk3YmNiMmIsIDB4ZmYyMDhjN2UsCi0JMHg2OWZmMDZhZSwgMHg2NzE1ZjgxZSwgMHgyNmY3ZDAxMSwgMHgwMDI3YmNkOSwgMHhiMjNlZWJjZiwgMHhmMDU4YzVmOCwKLQkweGEwMjZjZmJiLCAweGM4N2NmNWRmLCAweGJkOTY3ZmNhLCAweDdiZWY1MDlkLCAweDE5ZTMwYmFjLCAweDYxY2ZiM2NkLAotCTB4ZDVkMTU1ZGUsIDB4MGE0YjZiNGIsIDB4NDdlOGJlNzEsIDB4NGQ0OTE4NzAsIDB4MWFmZTllMzgsIDB4ZDU5NmYyY2YsCi0JMHg3ODNlOTVlNywgMHg3ZmFmZDFiYiwgMHgxMWU1ODJiZSwgMHgxOTZlMWNmYiwgMHg1ZmFhMTFmYywgMHg0NGU5NWEzYywKLQkweDdlZjU1MzNmLCAweDg5MTViNGE2LCAweDI3ZTQzZDZjLCAweGQ1NGY0OGE5LCAweDgzZTRhN2ZiLCAweDlhYjQ5NGZmLAotCTB4MmRjZjQxZjMsIDB4ZWQwNWEzZmEsIDB4MjY4ZmYzYmQsIDB4ZmNjNDllNjMsIDB4OTg1OWVmMzgsIDB4NzAzMGI1YWYsCi0JMHgxOWE1ZTgxYiwgMHg3N2QwMWM3NCwgMHgyZGJiZWZjZiwgMHhmMmFkZTYxZiwgMHgzZmUwMmRiZiwgMHg1OGI3ZWRhNywKLQkweDYyNzE3ZWI1LCAweDk1ZGRmOTYyLCAweGZlYThhN2NmLCAweGI3ZjQxMGYzLCAweDYyNDNlZjg1LCAweDM1OWEyYTY5LAotCTB4Zjc1N2JlYzgsIDB4YzNhOGEyN2IsIDB4NjA3ZjEzZmUsIDB4Y2FiOTM4YzIsIDB4ODllOGI2MGYsIDB4Y2ZkZDk0ZDcsCi0JMHhjZjEwZmU0NywgMHgzYzFjZmJkZSwgMHgxNjdkYjE1ZiwgMHg2NWUxNGZjYiwgMHhmMGFhN2YwYiwgMHhmZTk4ZWNkYywKLQkweDFmYzc5ODA3LCAweGNiZWJhNWUyLCAweDRiMDU5MzBiLCAweDc1ZWIzYzc4LCAweDc4ODdmYmMxLCAweDgwMzJjZjE2LAotCTB4OGEzMTRlN2QsIDB4MmJlODk2N2UsIDB4OTJjZTdmNGMsIDB4NTY0NzQ4MGQsIDB4M2UzMGRmYmEsIDB4ZjQwOGU5NDMsCi0JMHhjZWExYzlmOCwgMHg5ZDc0YjFhOSwgMHg5MzgzOWFjMywgMHhhZjg3YmUwMSwgMHhkMjRmMTBlOCwgMHg5ZjE4MTNhYywKLQkweDc4ZDgxNTg5LCAweGY1NWQ4ZGQ5LCAweDIyZmZjMDIzLCAweGEwMzM3N2JmLCAweDhiOTI2OTUyLCAweGM5MzdkNDIxLAotCTB4NDA0ZTQ5ZTYsIDB4MmU0ZDdhN2YsIDB4N2JmYzU3OGMsIDB4ZWM5M2NiM2QsIDB4NDJiZjQ2ODgsIDB4Y2M1MmZhNzMsCi0JMHhjOGY5ZWM5MywgMHg0ODljZmU4OCwgMHhmZDNlYTBmOSwgMHg0NWU2MzU2NCwgMHgyN2ZkYjU2NiwgMHhmYmFjMDljNiwKLQkweGQ0ZGMwZDA1LCAweDBiMDRmOGU3LCAweDNiZjk1ZjhiLCAweGNkNmU2MDY3LCAweDU3ZjIwNzY0LCAweDE4OGZlM2E5LAotCTB4MjVlYTk2OWYsIDB4NTZhNDNjZTAsIDB4ODE5OWQ2ZWYsIDB4ZTgyMmFkN2YsIDB4MmNkZTFjZTcsIDB4MTk1ZjAwZWIsCi0JMHhmN2E2MmYzYywgMHg3YWM3NWZmMCwgMHhlMzUxNGVkMSwgMHhkNzk2MDEwMiwgMHgwYjVhZWZhNCwgMHhhYWI0OTdmNiwKLQkweGUwM2YxNmViLCAweDU3NGRiZjYzLCAweDg1ZmQwNzlkLCAweGQyY2ZkMWFhLCAweGNmODA0ZDExLCAweGFmNjViNDY3LAotCTB4MzM5Njg5YmUsIDB4ODM4YzY0ZWEsIDB4OTI1YTFlZjUsIDB4YmE1NTdlODEsIDB4YWM4M2UxY2UsIDB4ZTU4MTNkMzMsCi0JMHgxODEzMzkyMSwgMHhkMTFkNDhiZCwgMHhkMjY3OTAzYSwgMHhkMTgyZTI2NiwgMHgzMmRkNmIzMywgMHhjYjg3NzlmOCwKLQkweDI1YjlkMjEyLCAweDcwMDI1YmMxLCAweDgwN2NlNjhkLCAweGI4YzI4OGFjLCAweDdlNjI1NWEyLCAweDhmOGFlYjExLAotCTB4NDRlNzAxN2UsIDB4MDNmM2YxNzYsIDB4OWU4ZjBmNDcsIDB4N2FiZGZlOGQsIDB4NWZiODAwNDksIDB4YzliY2IxYjYsCi0JMHg3M2RhMDkzOSwgMHgzZWYwZmQwNywgMHg1OWE3Zjk4YSwgMHhlNGM5ZmYxZCwgMHhmYTBiMWQxNywgMHgzZThjZjQ5NywKLQkweDBiNDc3YWE0LCAweDU4NzcxMWY4LCAweDdiNmY5OGJkLCAweGM0NTA2ZDczLCAweGZkZGM5OTM4LCAweDY2MTI4OTY0LAotCTB4ZjI2NTZjY2YsIDB4YjMyZjdhYTQsIDB4OTdlZDIzYmYsIDB4NTUyMzkzNmYsIDB4ZDIzOTVhMDksIDB4ZTkyN2ZlNTcsCi0JMHhhZTEyMmIyNywgMHg1YTIxMmVkMywgMHg0ZjUyMmU3YiwgMHgwNmRmYjQ4OSwgMHhmZDExZGJlOCwgMHhhOGFmYTUwZCwKLQkweGZkYzUyNzc5LCAweGQ5YmQzMGUzLCAweDdlNDNlYWFhLCAweGIxNGU1ZTRkLCAweDRjNGI4ZDg1LCAweGRiMjdmZWRhLAotCTB4Y2M4Zjk2NjUsIDB4ZDYxMjc0ZjMsIDB4OTAyNGFiMjgsIDB4ZDA0NmZmNTcsIDB4MGJlNmE3MmYsIDB4NWU1OThiZjksCi0JMHhmOTQ3NWY4ZiwgMHg5N2M0MjY1ZiwgMHgyODRmMzA5YSwgMHgwMTA1MDQ4NSwgMHgwNDVkNjZmZCwgMHg3Yzg0NGJiZSwKLQkweGUzZGRmYTIxLCAweGVmMzg1OTA5LCAweDI3NTVjNDlkLCAweDA0NTQ3ZjIyLCAweGYyMTliNzk4LCAweDM1MmYzMDRjLAotCTB4OGMxMTZkYjAsIDB4YzcwNWI3NzMsIDB4Yzk5ZTQzMzEsIDB4NzAxNTQ4MzgsIDB4M2E3ZTAzNmYsIDB4MTFjNTgyYjUsCi0JMHgwNWRjYTk5MiwgMHhjNjFlNGRmYSwgMHg5NzNjZDBlOCwgMHhmOWE4OWJlNSwgMHg4N2ZlNmEyNCwgMHgwZTYyODcwYSwKLQkweDhiMTFlNGRmLCAweGQ1ZWY4MTMyLCAweDQwMTdkZTBiLCAweDE4MTdhOWNmLCAweDk4MWJmYzdjLCAweDQ2ZDlhMTFmLAotCTB4NmU1YTY4ZjUsIDB4Zjk4NTFjYWUsIDB4ZjU4NGJkN2UsIDB4MjFkMGFmZWYsIDB4ODBmOWFhNWQsIDB4NzYxNWMzY2QsCi0JMHgyMjZmZTUzZSwgMHhmOWNkZWZlYSwgMHg0MDY0YmYyYywgMHg1YzA0NGExZSwgMHg2ZTk0M2NkNSwgMHhmNjAzYjdhYiwKLQkweGU0YzhiMjZkLCAweGEyMzc5YWE4LCAweGZlMTg0OWQyLCAweGRlM2E2NmZjLCAweGJmYTYwZWY2LCAweDcwMTg1NzE3LAotCTB4Yjc5NWJkMWQsIDB4YjdiMWZmYTMsIDB4Y2U0MDQ3NTIsIDB4MTkxYmI3MTcsIDB4Yjc4YzQ1ZGQsIDB4MDQ4MWFlN2QsCi0JMHg2MDI5NWZhMSwgMHg4ZTc5ZmNjNiwgMHg1ZmQzNmZmZiwgMHhjMTczNWUyOSwgMHg2NTc0N2JiZiwgMHgwYTZlYjhjOSwKLQkweDdhNTYzN2UzLCAweDE2NmJkOWYwLCAweGQ3Yzg0NTVhLCAweDAxZTY4NzMxLCAweGY4OWNkYTQ3LCAweDQ5YTQzYmEzLAotCTB4NGExMzU3OTAsIDB4ZWNjOTI4MTcsIDB4NTRhMGZlNzAsIDB4MzdhMDcyYTIsIDB4OTQzMWY0M2UsIDB4OWM3YzRjNWYsCi0JMHg3Njg3ODc5NSwgMHhkMWZkYjQwOSwgMHhkOGE1MWRhNywgMHg5OTMxNjgxZSwgMHg5ODI1M2Y5MCwgMHhlYjk2ZmQ0YiwKLQkweDQwNjQ2ZjkwLCAweGMwYTdjNmJlLCAweGQ3NDhhYTg3LCAweDBiZjQ0ZWRhLCAweGM4NTZmOTcxLCAweDY2OTkyMWY4LAotCTB4OTRiZjMwMGMsIDB4NzdiMWZlODIsIDB4ZWU1MTMyOTMsIDB4ZjZiMzcyNWIsIDB4YWE3ZDQyNzcsIDB4YjQ2OWZkMTEsCi0JMHhkZGZkZTkxZSwgMHhiZDU4NTNlMSwgMHg1MjRlZjBjMiwgMHg4MzZmMmNhZCwgMHg5ZjgxZjk3NCwgMHgwNTM5OWJiZCwKLQkweGIwNTVkMmZkLCAweGY0ZmVhODFmLCAweDA1N2JjNWE2LCAweGU4NDE3YWYwLCAweGUwZmIwZTVjLCAweDlhZmZlOWRkLAotCTB4ZTE3ZGY0MDcsIDB4MDE4NjRmYzAsIDB4YTA2OTk5YmYsIDB4ZmMyMGY5N2EsIDB4ZTMyNzcxZTUsIDB4NGI3YWJkMmYsCi0JMHg3OWZiNDA5ZCwgMHgxMjE1ZTJkYywgMHhlODgzZjk2OSwgMHg5NTIwMzM3OSwgMHgxNGRjNmU3YywgMHgyMDBkMWMwMywKLQkweGUwNDQxN2ZlLCAweDdmMWNmMTc3LCAweDVmNGMzOWI2LCAweDA4ZjM0ZGI0LCAweGM2YjlmNzkwLCAweGVmMTFlNmNjLAotCTB4YmZhOGRjOTUsIDB4NzcwOGU3NzgsIDB4MTFhZmY1ZDMsIDB4OTQ0MzNlYjgsIDB4MTQzYmI0NTgsIDB4OGVlYzE2MjUsCi0JMHhjMjFlMmJhNSwgMHhlZjkxNmZiYywgMHg5YmFkNDllNywgMHg3Zjk3ZDA0NSwgMHg0ZGY4ZjJiNywgMHhlNWExYjBkMiwKLQkweGY2MTE1ZGYwLCAweDEyNTRmYTg1LCAweDhiNjYzYWQ5LCAweDhmYTAxOGNhLCAweDZmZTM0MmI1LCAweDNkZTA5MzRhLAotCTB4MzFlOWIzYTMsIDB4NWYyMTBhMmIsIDB4NGQ3NDY2N2EsIDB4MjJjZGM2MjEsIDB4ZjdkMmM3ZGYsIDB4MjM2NTYxNzksCi0JMHgxNGQ0Yjc2YiwgMHgzZDI4OTc0YSwgMHg2MWRlY2QzYiwgMHhmM2NiOTcwMCwgMHhmYjBlNTkzZiwgMHhiYmYyNzk3NywKLQkweGMyYmU0MzFmLCAweGQ2ZTI3YWJiLCAweGUyNGQzZWMzLCAweDFmMmE0MzcxLCAweDMyYzdiZjAxLCAweDI4NmUyYzZjLAotCTB4MDMxYTlkNmYsIDB4ZWY4NjZjZTUsIDB4ZTMwMDQ4ZGIsIDB4ZDg3M2E1ZDQsIDB4NDgzYmMxMzksIDB4NmQxNzZkNjcsCi0JMHg1N2E5ZDMzNywgMHhlY2U4YzJiYSwgMHhiZTViNDUzNiwgMHgyZTViNTcyMywgMHhmZjExNzllNSwgMHhiZmJlZDJlMiwKLQkweGMwMjQ4NDkzLCAweDdlMjZmN2ZmLCAweGZkZmMyMjNkLCAweDFiZWVjZDhmLCAweDBhYWZmZTYxLCAweDNmZDI4ZjJjLAotCTB4ODdhOGM4ODksIDB4ZTgzZjA0M2EsIDB4NDk1ZmEzMDUsIDB4NTkyNmU3ZTYsIDB4YjljZmRmYmUsIDB4NDRjYWYzMWQsCi0JMHg3YjA5ZjU4MiwgMHgwZjIxYmI0ZCwgMHg4YjA3ZjU1ZiwgMHg5M2I0N2ViYywgMHhjOGVjMzI5OCwgMHg4NGFlNTA4ZiwKLQkweGU4Mzc5ZTA0LCAweDM5MDkxOGMwLCAweDdlNjY0Y2IwLCAweDQwZDZkYTUxLCAweDVmMzAzOWZiLCAweDU4MjRiODQxLAotCTB4YTAxNmU0NzQsIDB4ZDIxMzQyZWIsIDB4Mjk4YTUxNzUsIDB4MjhlMGU4MGEsIDB4M2YxZjIzYTcsIDB4NTVkMmEzODcsCi0JMHg5MDNjNDQ5MSwgMHg5ZTg3NDBiZiwgMHhmNTc3Y2YwMywgMHhmZmYwMTFmMiwgMHg3ODIzM2ZmYSwgMHgyOTkwOGE0ZSwKLQkweGYyMzFlNjEyLCAweDg1NTkwOGIxLCAweGJkMzlhN2U1LCAweGVkZjk1NTFlLCAweDZmYzg0OWJmLCAweDcwMWFiNGRmLAotCTB4MTZiZjg5NWYsIDB4NDM5ZjgwNWIsIDB4NWZkNjk5MWIsIDB4ZjM4NTFjNmMsIDB4ZGQwM2Y3NTMsIDB4MDkxY2MzYmQsCi0JMHhmZGU2NzJlOCwgMHg0NDk4M2E0YSwgMHgyYWNhY2NhZSwgMHgzOGY4NjJiZCwgMHg0MTBmZTQwMSwgMHg3MzhkNTIzZCwKLQkweGJlZmE5OWE1LCAweDQ5NzdjMzczLCAweDc0YmI5ZmJjLCAweDhhNGNkZTJjLCAweGRjOWQxYzc4LCAweDNmN2NjNDY1LAotCTB4YmZiNDJmNWUsIDB4ZjdlMDI1ZjUsIDB4ZGM0Y2M0ZjEsIDB4Yjc4ODdiNzQsIDB4MzQ0NmU4MGIsIDB4NGJhMDE0YjgsCi0JMHhkYWU1Y2U5NSwgMHg5ZDI5YmY0MywgMHg3OWM5ZWIwNCwgMHhiYjczZDcwNCwgMHhlNGY1ODY1NSwgMHg2YjljMzI1MiwKLQkweGFlM2JhN2M3LCAweGY0NjFmYTAwLCAweGVmYjE0NjJlLCAweGZiNzkyYWVmLCAweDNlOGMyOTI2LCAweGVjNTVmN2U4LAotCTB4ZjdlZDY4ZmIsIDB4M2RiZGZhNGUsIDB4ZmExOGZiZWMsIDB4ZWZjMGRlN2QsIDB4NzIyMjA5MDksIDB4YmZmM2U3NmUsCi0JMHhlZTg5ZTc5ZCwgMHhiYTgyOWFiMSwgMHg5MTdmZDBiMSwgMHgxM2JmNDVkMiwgMHhjM2Y3ZDgxMywgMHhlMDdiZTg2MiwKLQkweDdjZGFiOWZiLCAweDY1ZDEzMjBjLCAweDg4ZGUzY2MyLCAweGMyOTk4YmZjLCAweGQ3NDA0OTYzLCAweGRhYWE5OWI3LAotCTB4NmZmZjY4YmIsIDB4ZDRjY2ZjNzEsIDB4ZjM4MGJmNzksIDB4Y2JjZDZmNjYsIDB4NTdmYzAzNzksIDB4YmZiYTI2MjUsCi0JMHgwNTVmNjBiMiwgMHg3YWQyMDJkNywgMHhiMTlmNzhhNywgMHhkZGZlZTM2NSwgMHgyZDVmZjQwMSwgMHg2OWQ4NDc3YSwKLQkweDY5YmU4MmY5LCAweGRjNGNiMmQ4LCAweGUzMTMzYjE3LCAweGM1NWZjZTA3LCAweGEwMGViYWJmLCAweDNlYTdhMDAzLAotCTB4Yjc5ODg4M2EsIDB4Njc3MjJmOGEsIDB4ZWRhYzI2MmIsIDB4M2MwODdhYTQsIDB4OTA4NGJkNTUsIDB4YWM5Zjk2MWEsCi0JMHg4YmFmZjVhNCwgMHg1MzBjY2IxMiwgMHgwYmQwMzBjZCwgMHhlM2Y0YWFkZSwgMHg3YjY5OWRiZSwgMHg5ZTk3ZjMxMiwKLQkweDA0YmVmMjRmLCAweGMzN2I5ZGYzLCAweDM0MTJlOWU3LCAweDAxMWZjZTc2LCAweGRmM2EyMDdlLCAweGNlNWZmZDVmLAotCTB4MDZiZmQ1NTcsIDB4NjY3ZWU3ZTQsIDB4MGVlN2U0ZDAsIDB4NzFkNDdmYjUsIDB4ODk1N2EwN2QsIDB4ODJkYmM3OTAsCi0JMHgzOWJlYjZmOSwgMHhhYjljMTcxNiwgMHg2OGJlNDFmMCwgMHg1MDc5YzYyMSwgMHgzMDI0M2FhZiwgMHg5ODJmZDU3ZCwKLQkweGFkNzQxZWI4LCAweGU5ODRiYzc5LCAweGZhN2Q1NTRiLCAweGJkMGYyNjkyLCAweGJiY2Q5ZjM5LCAweGZhODI5OTc5LAotCTB4NmIwMmFiZDYsIDB4OTg0ZjlmZWYsIDB4ZDc4YjM2M2UsIDB4NWViMTk0MmYsIDB4NmU2ZjU3Y2QsIDB4ZTZiNWZlNjEsCi0JMHhkMDI4NDc5NywgMHg1MGEzZDUyZiwgMHhhZTU4OTMxZSwgMHhmZTMyNjVhNywgMHg5MTQ5M2NkYSwgMHg0NGRjMGNmZCwKLQkweGFmY2ZlODQ4LCAweGZhNjdhMmRlLCAweGFiOWQ3NmRmLCAweDBjNDFmMzA4LCAweGYxNjIzZjU0LCAweDg2OWZjNjViLAotCTB4ZmQyM2YxYjMsIDB4YWEyNzVmNzAsIDB4YzNmMzAwNzYsIDB4NDFmZjk1ZjUsIDB4YjI1OWI4N2UsIDB4N2Y2OTM4OTcsCi0JMHhlOWRjZjMwYiwgMHgxNzk4MmNmYSwgMHhmYTUxYzdmMywgMHgyMDQ5ZDFkYywgMHgxODY2YWM0ZCwgMHg5MWI3Y2RlOCwKLQkweGQ5NzRmNzlhLCAweDY4MDY5ZjQ4LCAweGE1MzQ3NzNmLCAweDdkMGQ2Y2NmLCAweDhjZjE5ZDFhLCAweDIyYmNjMjFmLAotCTB4MWQyNDQxZjksIDB4NjU3OGM1NjYsIDB4ZDZkOWE3ZTgsIDB4ZDA2YWM3ZmEsIDB4MmU4ZGRiMzcsIDB4ZjJjYTdmOTYsCi0JMHg0MGY5MjJlOSwgMHg0ODE2N2NkOCwgMHg1MTBlM2U2YywgMHgwNzM4ZjljNCwgMHhlY2I1Y2Y5YiwgMHg0Y2ZhNzA5MywKLQkweDBjM2Y2YzI0LCAweDI1MTI1ZmI1LCAweGY0MTZiN2UyLCAweDliMWY5N2VmLCAweGJkNjAyM2JkLCAweDJkNjZmYjdkLAotCTB4Y2MwNjJmYjMsIDB4N2QyMGI0NWIsIDB4OGIyZjczZGQsIDB4OTlhMmY4MzcsIDB4NDNiODgzNWMsIDB4MTY3ZjFkMTIsCi0JMHg3YTllZmYxZiwgMHhmY2Y3ODc0NiwgMHg0Yjc0ODBkMCwgMHhmOTg0MWZhNywgMHhiM2Y1ZTZjZiwgMHhkZjMwYWJkYSwKLQkweGZkMzRmNjY4LCAweGZmMGQyZWM5LCAweGU3YmMyMzc1LCAweDFjNzM3NmYyLCAweDAyZDg3YWY5LCAweDcxYjU0YTczLAotCTB4YjNmN2I5ODUsIDB4YTRkZGM2YjgsIDB4YmRmMzBmNDYsIDB4OWZiNjhlNjcsIDB4NzNmMWE0YjksIDB4N2I5YTlmYzgsCi0JMHg1NGZkZjZiZiwgMHhjOWI5ZGY2NywgMHg3ODhmMTAxMSwgMHhiZGUxZGI4MywgMHg3ZWMwYmY3NCwgMHhmMTdlMzM3YSwKLQkweDdlOTQ2NThlLCAweGFmMzRmYzQ3LCAweGQzMDNmYzAwLCAweDZjZjcyYTEzLCAweGI3ZTdlNWE2LCAweDliZjJjMjhmLAotCTB4ZDFmODNmMDksIDB4MmJiZjUwYmIsIDB4MjBkM2NiMDcsIDB4MDhlYzBjMTksIDB4NmYyMDhmZDgsIDB4M2RiZGVlOGEsCi0JMHg4NmZiOGU5MywgMHg4Y2JiZjc5OSwgMHhhMzNiZGJlNSwgMHg2OGIzY2RiYywgMHgyY2Q4ZTczYiwgMHhjNjljMWJjYywKLQkweDQyZWY0ZGY5LCAweDBkYzc3ZjU2LCAweGZhMWE5NjU2LCAweGI5N2U4MjgwLCAweDc5YTE1MTY5LCAweGYyMjdmZjQwLAotCTB4NzkwMDUwZmYsIDB4NzhiMmQzYWMsIDB4NTFkNWUwYjksIDB4Zjg0MzdlNTAsIDB4NGRkODFlN2MsIDB4MDkxNjU1M2QsCi0JMHhjYzlkNWZlMCwgMHg3M2EzOTlmYywgMHgwYTQ4ZTA4NSwgMHhkZTc2Njk5NywgMHg1NzViMTU3ZiwgMHhjOTBiYzE2OSwKLQkweDE1YTYzZmIwLCAweGJiNDY3ZWIzLCAweDQzNjdkNGE2LCAweDJjNDVkZDNiLCAweDYyOWIyNGY3LCAweGZiYWExZjgwLAotCTB4ZmI5Mzk5NmMsIDB4ZTQ5ZWI4MDcsIDB4MTVmZWZiZTEsIDB4NzFiNTI3ZjcsIDB4NDk4ZjVmYjQsIDB4M2QxMmMxNzAsCi0JMHhmYjQxM2YxMywgMHgzOWQ4NTg5NCwgMHg1MzNiOGYyYywgMHg1NGU4N2YwMiwgMHhkYzczY2IzNywgMHgwMmFjOGFiYSwKLQkweGNkZWI2NDdkLCAweGFkMGQ2OTZlLCAweDdhMjI2YTlmLCAweGNlOTQ2YjkwLCAweDliN2EwMTFmLCAweGY0ZjNlMTNiLAotCTB4OGIyZTIwMTgsIDB4M2E1NWNlOTYsIDB4ZjdkMmE1OWEsIDB4ZDMxZDJkMzQsIDB4ZTcxM2Y5ZmQsIDB4Y2ZlNzZmZjgsCi0JMHhmNzM2M2ExYSwgMHg3YTUwZjFkMywgMHgxZDU3OWQzOSwgMHhiNDliYmZlZSwgMHg5YzZmYWFmMiwgMHgzOTE4N2Q4OCwKLQkweDAxZmM1MGVlLCAweDY3ZjljMmZlLCAweDcxNWFmY2ZmLCAweGI2NDJhNWJmLCAweGM3ZWMzNjU4LCAweDZlM2Y3NTI2LAotCTB4NzQxOGY4MDMsIDB4MjRmZTc4OWQsIDB4YzI4ZDcwNDMsIDB4ZTg0MzliMDMsIDB4ZDJmY2VhMTUsIDB4MzA1OTI3YzAsCi0JMHgyN2YwNWU3MCwgMHhmYjFkN2FhOSwgMHg5YjFkODA3MywgMHg3N2U5ZWJjYSwgMHg5ZmVmNjI2ZSwgMHgwNWZmMWQxNywKLQkweGQ5NmI3ZmU0LCAweDM1MGE3NjdjLCAweGJkNzA5ZjhjLCAweGFiN2ZiNTVhLCAweDY5YjZmNWQ1LCAweGM1MTQ1YmQ3LAotCTB4YzEzYjdiY2UsIDB4ZTkzZTgxNGYsIDB4ZjM3ZDUxZmMsIDB4YTgzYzA2YmUsIDB4Mzk3MWYxZWIsIDB4YjFlNGM3M2QsCi0JMHhlZWRhZTgxYSwgMHhmZDIzOTViNiwgMHg1ZmY4OWY3YywgMHhhMGU4N2QwNiwgMHhlNjE4N2JjNSwgMHhlZmU3NTQ3OSwKLQkweDIxNjNmYjAwLCAweDkyNWM2MzcxLCAweGNlNmJjN2QyLCAweDlkNDJmZDMwLCAweGFhOWMyNDZmLCAweDkxOWZlMDg3LAotCTB4NGY4NDg5ZWIsIDB4NTEzYWRlM2YsIDB4NzdjZjUzOWYsIDB4MWFmN2FkZjUsIDB4MjFlYWE5ZDcsIDB4M2ZkNjgzMGUsCi0JMHgxY2ZlZTc2NCwgMHgwMGRmZjczYiwgMHgyZTNjODE0NSwgMHhkMDJlNTEyNSwgMHgwNGJhYTdlYiwgMHg4OTRhMjdkNCwKLQkweDY5NzBmOTA5LCAweDc2ZGY5MzA5LCAweDU0MzdkMzBiLCAweGZlZDQzZjM5LCAweDgyMTZmNWI4LCAweDI5NzRhOWZjLAotCTB4ZDhjOWU3ZTEsIDB4MzBlOTIyYmEsIDB4ODIzZDc0OTEsIDB4ZDk0OTllNzYsIDB4MzlmNjAwYjYsIDB4ZmY0YTI1ZTgsCi0JMHhjYzJkNGJmYywgMHhhOWM1N2JjZiwgMHhmMWFlZjVjYSwgMHhjYWZiZDcyMCwgMHhkNzdhZTQwMywgMHhmMzM3ZTA3OCwKLQkweGEzZmM2ZDQ0LCAweDJmZjMwYWY0LCAweDdjMTBhZmRhLCAweDE5M2ViYTk2LCAweDVlZGQ3MjBmLCAweGY4MWUzNWQyLAotCTB4ZWViMWFkZDYsIDB4MWY5ZjAxMmYsIDB4MzYxZjk4ZWIsIDB4MjRmYThlMTIsIDB4YmM1ZmVhOWQsIDB4ZGM4Y2ZhMjYsCi0JMHhlOTVjNmEzZiwgMHg5NGQ3OGI0ZCwgMHgxZmRmYmUzNCwgMHgyY2U4NDE3MSwgMHgzOGFlNDY4MiwgMHhjZGVmZjc5OSwKLQkweGY0YTYzYTA0LCAweGYyODk3Mjg4LCAweGMxNTdhYmM3LCAweDgzN2Y4Mzk4LCAweDUzMmM3MjFjLCAweDA5MmQ5YmY5LAotCTB4MmUwOGRiZjgsIDB4OGY4YzNkYzcsIDB4ZGI3NThiOWMsIDB4MGQxYzU4OTMsIDB4ODcxMGYyZTEsIDB4NTcyZTc0Y2IsCi0JMHhkMTEwZWUyZiwgMHg5ZGNkM2Y5ZiwgMHhkY2I4MzRmYiwgMHgyNGY1Yzc3ZCwgMHg4ZGQ3ZmI4MCwgMHg1ZjA5NzE3MiwKLQkweGE1M2E0NWQ3LCAweGQxN2ZiNDIwLCAweGUyYzY3YThhLCAweDFlMzFjYmI3LCAweDhlYWI2MjMxLCAweDcyNzI2MTI4LAotCTB4NzM0YTIwNjQsIDB4YmRlOGM0N2YsIDB4NGM3OTRkNzYsIDB4ZmRhNmIyNmIsIDB4OWE1OTZkMGQsIDB4MjhlMGZjZmEsCi0JMHhlM2I4ZmQ0ZCwgMHhmOGYyOWEwNSwgMHhlZDM1MWJjZSwgMHhhYzUwN2MyNywgMHhiYWVhNGYyOSwgMHhhNmZlZDM1ZCwKLQkweGNhNmI2NzRmLCAweGFjMTIzMDE0LCAweDAyODNiOWZiLCAweDdkZDc0ZWQ5LCAweGNkM2VlODczLCAweDdkYmRmZmY3LAotCTB4MGI4ODcxYzYsIDB4MzNmNmUyOWUsIDB4NzMzYmJiZjEsIDB4YTgxNjFjMjksIDB4NGNhNTdjNzQsIDB4MDg1MDVmZGIsCi0JMHgwN2MwNDUwYSwgMHg0NjgyZGZkOCwgMHg4NTNjZDc5NiwgMHhkZmJjMmU0MiwgMHg3ZDVhNGQ4NSwgMHg2ZDU2ZjE2MiwKLQkweGYzN2RhMmI5LCAweDAzOTVlMDVhLCAweDhhNmEyMWYzLCAweDY0NmM4OGUxLCAweDc5MzRjNDNlLCAweDc1ZTgwZWJlLAotCTB4MmZkNTEyNzYsIDB4OTFjNjMwNDAsIDB4MWFjN2M4MzgsIDB4MWI3ZmRmNmEsIDB4YjBjODczZmUsIDB4NmIzZmMzNmYsCi0JMHg3YTgwZDViZiwgMHg3ZmI3ZTJmZCwgMHhhZmE0MTQ1NSwgMHhmZTJkNGU4YywgMHhmZjE2OGFjZCwgMHhmYzVhYjlkMSwKLQkweGZjNWE1ZDViLCAweGUyZDQ0ZWM3LCAweGUyZDZlNmRmLCAweDhiNDRhZTNmLCAweDE2OGY3OGZmLCAweGI1NzM4OWZmLAotCTB4NmFmMjRmZjgsIDB4YTE1MjlmZjEsIDB4OGQ1YTdmYzUsIDB4MmIxOWRmMTYsIDB4ZjRjY2Y4YjQsIDB4ZmZiZGE4M2YsCi0JMHgyYWZmMDIyNCwgMHg3YmFlY2NmZiwgMHgxNDllZTIyOCwgMHhkMTg1ZDExZCwgMHgwYjQ3NGE4MSwgMHhlNzk4MTUzYywKLQkweGM3ZTliYzMyLCAweGU5MjI3MTlhLCAweDNhOGRkYTgxLCAweGRhOGI4N2JjLCAweDZiODVkYjcxLCAweGJkY2EwZmE3LAotCTB4NDkxYTVmZDAsIDB4ZjEyNDRmMWYsIDB4YjEzYjE4M2MsIDB4ZWVmOTQ1NWYsIDB4NDBmODEyN2UsIDB4ZjJhMTVlYTQsCi0JMHgxZTM5NzBhZCwgMHhjNTBlZmY2ZSwgMHgyN2M4MDZjZiwgMHgyOTBmMGY2ZSwgMHgzNjFlYzA5ZiwgMHg0M2MzZGJmNywKLQkweDkwODdlOWQxLCAweDUzZmE4MzhkLCAweGVlOGJmYTIzLCAweDJlM2NkOTk1LCAweGUwNDlhYmMxLCAweGYyMjVmZDVmLAotCTB4MDRlOTBmYmIsIDB4N2VmOWQyMjcsIDB4ZTNhMWViMDgsIDB4MWEzNTE4N2YsIDB4MjAzZjE4ZmQsIDB4N2ZjZmQ0NDEsCi0JMHg3NDg3MTkwOCwgMHg3MTIwMDdiMCwgMHgxM2U3M2U5OSwgMHg1Y2U1OWYwNSwgMHg3ZWU0MmY1ZSwgMHhkYmQ5YTcwZSwKLQkweDE2YTk3MDA2LCAweDMwMDkxOWJkLCAweDllMjc2YTZlLCAweGUyMjcyMjFmLCAweDg1NWVlOWFlLCAweDk3NmZlMDkzLAotCTB4N2YwNmU5MDgsIDB4OThmNjdkM2IsIDB4NTE5YzdkMTksIDB4Mjg5Yjg3ZjksIDB4OTY3ODMwOGUsIDB4NTE3MjE1NGQsCi0JMHgzMGEzMTU3ZiwgMHhmYmVjYTgwZiwgMHhiMmE1Y2EwMiwgMHhjZWNmNjFmZiwgMHg0NzA3YTYyNCwgMHg1MGFjZDczZSwKLQkweGY1YzRkOWUxLCAweGZjMGZhNjAwLCAweGUzYzI5Mjc3LCAweDQxNmJjNDMzLCAweGUwNjRiOWI4LCAweGU2M2ZiNGZiLAotCTB4ZjMxOWZlZmYsIDB4NDkyNWQxOTMsIDB4ZWM3OGVjNTcsIDB4ZjgwY2YxMGEsIDB4YTI0MWYzODYsIDB4OGM3M2NkODksCi0JMHhlODU3NGM0NCwgMHg4YmM0ZDFmYiwgMHg0OWM3ZGZmYSwgMHg3YWVlMzg1OSwgMHhkNjMyYjI4OSwgMHhiN2U4MjhlZiwKLQkweGVmYTNjNjBiLCAweDA0NWM1YmE3LCAweGQzYTJiZGZjLCAweGFiZmZkMDQ1LCAweGMzMmIwOTk2LCAweGY1NWJhYzFmLAotCTB4N2E3MmE1ZWIsIDB4Y2MyNTYzZDgsIDB4ZTdlMTE1N2YsIDB4MjcyOTExNGIsIDB4M2QxNTdjODUsIDB4OTRlZDBmM2IsCi0JMHhmMGJiMzJiNiwgMHgxOGNlYWI5OCwgMHg3OTJhMmViNiwgMHhlZDdlNzA2ZCwgMHhjODFjZjRkYiwgMHg5NjEzM2QyZiwKLQkweDVlZTE0ZTBmLCAweDNmMWM5ODMzLCAweGE4ZTJjYzllLCAweDZlOWE1NjZiLCAweDBmNDk3ODg2LCAweGJlM2QwNzhmLAotCTB4ZjgwY2RjOTIsIDB4ZTYxNzI1MTQsIDB4NDE3ZGMxODEsIDB4MGRlZmIwYjYsIDB4YjYxZjVhMGUsIDB4NDk4YjI0ZGYsCi0JMHgzYzViZDY1MywgMHhkYWM2NTk3OCwgMHgxNzQ4MzU5NSwgMHhkMWFmN2U3YSwgMHg2NDg3ZDRiYSwgMHgyMTdmOTg2ZiwKLQkweDRjNGY4ZjlhLCAweDEwMjcyMjdlLCAweGJmZDJmMmFlLCAweDU4MTJhNzRmLCAweDY3NGIyOGFmLCAweDlmZWFmNjM0LAotCTB4ZGMwMTQ2YWUsIDB4YTkzZDM4YWEsIDB4ZTkzYTM1ZjMsIDB4ZGVlZDYxMzgsIDB4MjU1N2Y0ZTEsIDB4ZmU2MDFhNzcsCi0JMHg3NDFjNTBlZiwgMHhlYTQxM2M0MiwgMHg1NmJkZTA3NCwgMHhmZmI4ZTk3NSwgMHgzN2YwZTRlZiwgMHg5MDgyMTdlZSwKLQkweGUwOTQ2ZmY3LCAweGQyZjQyNjhjLCAweGQyOGUzY2Q5LCAweGY0NzdkYWU5LCAweDZiMjVlMjA0LCAweDdlNDRjZmM3LAotCTB4YjhkN2IwNjYsIDB4MWU0ZjA1YTgsIDB4ZWNhMTY3N2UsIDB4ZWE5ZTA0MWQsIDB4MmU5NGU4ZDMsIDB4NjFhM2YzODcsCi0JMHg5ZTBlZGNjOSwgMHgzZTAwMjY0MCwgMHhjYTBmOTkwNiwgMHhmNjY1ODdhNywgMHg1OWUzYzNjZCwgMHgzZmMzYzFiZSwKLQkweDRjN2Y5ODI0LCAweGEyYmZkMDU2LCAweDEzYzRmODdlLCAweDFiMWJmMjE3LCAweGM2Y2JlMTA5LCAweDUwMDM3NDk1LAotCTB4YTU2MWI3MWIsIDB4YTg3Mzc4ODksIDB4YTgzNTIyMWMsIDB4MzcxMDI1MWYsIDB4ZmU2MzUxZDIsIDB4ZmQzOTU3MDksCi0JMHhlYmYwNTJjZSwgMHgzNzg3YjA1YywgMHgwZDUzZmY4YywgMHgxZjQ1YWQ5NCwgMHg2MWI5NDA1NSwgMHg5MGFkOGJlNCwKLQkweGI5ODE2NDJiLCAweDIzYmYzMDM4LCAweGEyYjY2NzAwLCAweGVmN2NmZDQ2LCAweGVmMDc2ODZhLCAweDQyNWYzZTIxLAotCTB4YWNmOWQzZGYsIDB4ODIxZWQzMWYsIDB4MGY2M2QxZjYsIDB4NTFmNTBhN2QsIDB4OWIyOWEwOTYsIDB4M2Y3NTE3N2UsCi0JMHg0NWIwNDk3MSwgMHhiMjUzODU1YywgMHg0ODU2ZDNlOSwgMHg4ZTI4YTE3YiwgMHg0ZjQ3ZGZlNiwgMHhjNjQ2ZmQ2NCwKLQkweGJiMmQxMjAzLCAweDkzMjE3ZGQ5LCAweGIxNjc4ZjA5LCAweDFmYWFlYzczLCAweGJiYjJkZTNlLCAweGM2ZjgxOGE5LAotCTB4NTNmZDZkMzAsIDB4OTY3MTFlMWMsIDB4NDE2NzhlOTcsIDB4ZTc2MTJhN2QsIDB4OTNmZDc5NTcsIDB4Nzk2NmRlYmMsCi0JMHhlNTk4YjNhOSwgMHhkZmJlNjgxYywgMHhiNThmZmJjYywgMHg1MGJmMThlOCwgMHhiMWI3OGYwOCwgMHhkZWJjNGRmYSwKLQkweDA5M2JkNmFjLCAweGZhYjFhNzhmLCAweGI0NmY1ZTdhLCAweGJhMTJmY2IwLCAweGFmZGYzNWFkLCAweGRjMjdlM2UzLAotCTB4MzBkZTIzYWYsIDB4ODljYzc0ZmEsIDB4ZmEzMGRlMjIsIDB4MzVkYTk3YjAsIDB4OWQ4NWJkNjUsIDB4MjVhNzk1MjMsCi0JMHhmYjUzYmU2YiwgMHgxYjhmOWM3ZCwgMHhmMzRiMzkzMywgMHgyOGQ4Njk5ZCwgMHgzNGNlZmI2ZCwgMHg3MTBmMjM5NCwKLQkweDBiNTIxYjM4LCAweGY5ZWFmNTM0LCAweGIzYTcyMjZjLCAweDI3NmIzMjc2LCAweGY0ZDQ2ZTM5LCAweDYyNTE1MTdiLAotCTB4OTk5ZmZmNjEsIDB4Y2JhZGQyYTQsIDB4OTBmYjc0MDQsIDB4ZTIxMTJiMzUsIDB4Yjk5NTgxYjQsIDB4MWYwMTQ0YTAsCi0JMHgzZjk5NGZlMSwgMHg2Njc0Nzg5ZCwgMHhjYjA1NGFjZCwgMHhiOGJmZGM5OSwgMHgyYzQ0ZTU2NiwgMHgwYjc0YTZlZiwKLQkweDc0YWNjZmY1LCAweDJkMjc3OTYxLCAweDUzZjlmNDJiLCAweDU4OTUwZmRhLCAweDA3ZWQxYjY0LCAweDdlZDM0ZmNhLAotCTB4ZWQxNGY5ZTAsIDB4ZDI0ZjllMDcsIDB4MzM3ZWEwZjEsIDB4OWJjYTBlZmQsIDB4ZGU1MDdmNjgsIDB4ZTU4ZGQyYjAsCi0JMHhiMDRiMmJmNSwgMHg4M2QyYmY1YywgMHhlNzJiNzVlNSwgMHg5NWYxZjNlMiwgMHg1OWFlN2M1ZSwgMHhiYmY1ODE1OSwKLQkweDNiZWI4NTkzLCAweDIyNDg1ZjdmLCAweDkzYmJiOWUzLCAweGRkZTdmN2M3LCAweDE2ZGNmMWFiLCAweGQ0NzZlMGMzLAotCTB4MzJmZmNlMDEsIDB4ODk4OGU3ODgsIDB4YTVjNjNmZDEsIDB4OGY1YjFhZDIsIDB4ZTcxOWJkODAsIDB4NmE0OGY4NjEsCi0JMHg1YjdhYzFhYywgMHhmZDQ3MWIwOSwgMHgyNGZjMzg4ZSwgMHgzMzFkODhiNSwgMHg1OTUwZmM2NCwgMHgyMzBkZjk4ZCwKLQkweDczMTdjYjA5LCAweGM0NTI4OWZhLCAweDlmYzI1ZmNmLCAweGJjZmY0MjE0LCAweGFiZTVhYjk0LCAweDcxZjkxMTk5LAotCTB4OTkyM2IzZWEsIDB4YjBlMjc5ZDksIDB4YzcyYzM3MWEsIDB4ODQxM2QxMzQsIDB4Y2I4YjVlN2MsIDB4MzNiMWU3OGIsCi0JMHhhOWNlZDBhZSwgMHhlNTdiMWNiZCwgMHg1ZjgwYTIxNiwgMHhiZmFiNTRiZiwgMHg2ODE1YTdkYSwgMHg0YWYxNDRmNCwKLQkweGE1MzNiNjM1LCAweDY3NjlhN2RlLCAweGRhNjk5NDcwLCAweDVjYzkyZDk1LCAweGE0NzgwNGViLCAweDFiMTg3NWIwLAotCTB4YmQxMDExNTcsIDB4ZTMzNzliMGIsIDB4OTk5MzY3YjgsIDB4ZWJkNzRiYmQsIDB4M2VmYmZmNDcsIDB4ZWI5N2FkODEsCi0JMHg3Y2NiY2Y0ZCwgMHhlNDQ2YTZiZCwgMHhhYzZjMjNhYiwgMHhkN2ViMTM5OCwgMHhmZjNjM2YwMSwgMHhhZmRjNThhYiwKLQkweDQzYTMzZGNmLCAweDEyNDhkZmZmLCAweDQ2YmUwMWQwLCAweGY1MGNmMTUzLCAweDk2MTc0ODYzLCAweDRhZWUwMDZmLAotCTB4MTE0NGY5Y2IsIDB4ODQ4ZTNjYTEsIDB4N2FhNGJlZDAsIDB4YjMyNTdmZDMsIDB4NjYzM2QwYjgsIDB4NzlhNTBiODgsCi0JMHgyM2Y5Njc5ZiwgMHgzOTJiOTQ0MSwgMHhhYTM5MWYxYywgMHg4YTU1YjhmZSwgMHg0ZTlkYTdmNCwgMHg3YjU2ZmI0NiwKLQkweDViOGQ0NDllLCAweDI1MTZiMmFlLCAweDMzZDEzZTgyLCAweGI0NGY3ZTQ0LCAweDE2OWJiZWYzLCAweDI3NDYzODUwLAotCTB4ZmFhN2M1Y2QsIDB4MWJhMmJkN2UsIDB4NTVlNTdjZjQsIDB4NGNlZmFmMGUsIDB4NzdjNjAxZTcsIDB4NmFmY2U4YzIsCi0JMHgwYmJmYTUzMiwgMHgwYzgzYmY3OSwgMHgyYzNkNTIxOSwgMHgxYWYwZjY4NCwgMHg5NDFmY2FiZCwgMHhmZDBmZTA1OCwKLQkweGU2MmM1NzY1LCAweDIxMjdiNDczLCAweGMxOTk0NDdjLCAweGRlOTViOWU3LCAweDdmYTkyNDliLCAweGY5OTdlMjlkLAotCTB4ZTQ5YmU0MzIsIDB4YmRiNjdjZjAsIDB4MzRkZDk3MmIsIDB4Yzc1ZmVhNGQsIDB4NWZiNjE0ZTgsIDB4ZjIyYjQ5NzMsCi0JMHhjZTg3NWNmYiwgMHhhNzM1ZWNjNSwgMHgwZjMzYmVjNiwgMHg3OWMzNzI2YiwgMHg3MTE0NzE1ZiwgMHg0OGM0MmU0MSwKLQkweDVlZTc4NGQyLCAweGM4ODliZmM1LCAweGI3YTNjNDdmLCAweDE3ZWE4NTExLCAweDQwODA3MjUxLCAweDJmZGE4NzNlLAotCTB4OGZlMjc2ZTEsIDB4YzJmY2JmMzgsIDB4MmRlNzBkMzIsIDB4OTRmN2FiYTYsIDB4ZjlhZjUxYjksIDB4OTBjOTc2NDIsCi0JMHhiMzQ1ZjJjZiwgMHg0ZjEyM2YxZSwgMHg2NTczZWI2YSwgMHg0YTVlMDdkNywgMHg0N2Y2OGI5NywgMHg1MTdhNjBiYiwKLQkweDVmNzg0ZGI5LCAweDIwNGJiODliLCAweDgzY2UwMmE5LCAweDk5ZDlhN2U1LCAweDVhZGZhYTdlLCAweGUwZTNmYzQ0LAotCTB4MmUzN2FlZDAsIDB4YTVkYWUwMDUsIDB4YzJhOWQwMWMsIDB4OGFhYmI2OWUsIDB4M2YwNmVjMzMsIDB4MGI4MDA4ZDQsCi0JMHgyZTU4NzNjMCwgMHg1ZjIxNzFjMiwgMHhhYjk1ZGVlZiwgMHgxNGVlNGUxMCwgMHg2OTM1ZTc4NiwgMHg3Y2Y5ZGMyYSwKLQkweGY3MGRkYjg4LCAweDU2NmEyZGJiLCAweDNhZWQ1YmVkLCAweDdmMTVlN2Q3LCAweDNiNmJlYTBmLCAweDhiZDNjYzQ1LAotCTB4OTg4NWU3ODQsIDB4Mjg2MjYzZjcsIDB4MzM0NmNiYTIsIDB4YTc5ZDBjZmYsIDB4YzEyOWU2MWIsIDB4YmUwMGUzYmMsCi0JMHg1OGIzZDcwNCwgMHg1Y2UwMDQzNiwgMHg1YWQwOGY2NiwgMHgzMWE5NzE4MiwgMHg5NzFlMTIzYSwgMHg1MzMzOWY1MiwKLQkweDI3N2FmZjE4LCAweGI0NjdjNjU5LCAweDBiNGRkZTczLCAweGVmOTc4NWM2LCAweGMzMWViYTQ3LCAweDEyMmM0ZmQ3LAotCTB4YmI3MDkzY2IsIDB4NWFiZjcwOTUsIDB4ZjA2NzZhODMsIDB4M2UyOGVhM2MsIDB4YTBmYmJlZGYsIDB4MmYzY2IxNDYsCi0JMHgwYWRjZTkwYiwgMHhkOTQzMTc3OSwgMHg2MTRjM2YxMSwgMHgzYjdlZjJmMSwgMHhlODA2YTI4MiwgMHhmMzA5YmM2NywKLQkweDdjZDQxYTFiLCAweDA1NWRlNTE0LCAweDEzZTk2YmYzLCAweDljNGM1MWYyLCAweGQ5NTlkNzRlLCAweGZhZWEwNDNkLAotCTB4YmUzMGE2NTYsIDB4YTNlMzkyYjksIDB4MjJlY2M0ZDcsIDB4MjdlNGRiODgsIDB4NmY5ZjlkODQsIDB4NThmYjQ3MmYsCi0JMHhiNmY0ZjM4ZCwgMHhkNTUyZmNiMywgMHg0OWM5NTBmZiwgMHgwNjBkZjdhMCwgMHgyMjFkZGU4NywgMHhkYjJhNzdjNiwKLQkweDBlZjc2MGVmLCAweGY3ODkzYzc2LCAweDE0YmVkMjM1LCAweGRlNzI4N2EwLCAweDZiNGViY2JlLCAweGUzZDgyZjBmLAotCTB4MGNhNTFiNTksIDB4YzExN2JiYjQsIDB4MDNkOWFiN2QsIDB4M2I0OGVkZWQsIDB4YWUxNGIxZmIsIDB4M2U0OGJhYmYsCi0JMHgzNTRlNzFjNCwgMHhhMjhiMWY2NiwgMHgxMjY0MzVmMywgMHgyMjk3YmYzYywgMHg2ZWY3ODRiZSwgMHgwOWIzZWQ1MywKLQkweDc5MjQzYmVlLCAweDQ4OGZiZWVjLCAweDZhOTJiZmJjLCAweDE1ZWYzODQwLCAweDVhNWI4ZjA4LCAweDhlZjdmZTkwLAotCTB4ZWY3ZmZiNjcsIDB4MGU3NzhiOTEsIDB4OTNkY2ZkYTcsIDB4N2VhNmUwYzEsIDB4Y2IwNjRmNzcsIDB4MDYwN2RkMzMsCi0JMHg0YWRmN2QxNSwgMHhmOTYwYzk0OCwgMHhkYzM4YmIzYywgMHg5YjlmMzNiZiwgMHg1NTczZTVhYywgMHhhMmM3NWQ2ZCwKLQkweDNiNzdlNDE1LCAweDhmN2JkZTgxLCAweDBmMjYyNWZkLCAweGVmMDg0N2Y3LCAweDgzM2Y3ZjJkLCAweDBkZTYwN2NkLAotCTB4NzRmYmY0NzksIDB4YTcwYmNmOWYsIDB4MTIyOTdkODMsIDB4ZmFlZWI3OWYsIDB4ZGE2OThjZjQsIDB4N2JjODVkNzksCi0JMHgzNjc2ZTEyZiwgMHg1Nzk4NTZhZiwgMHg0MjY0ZjA0ZiwgMHgzYWI0N2U3OCwgMHg4M2M1N2RhZiwgMHhmZDdjZWY5ZiwKLQkweDkxMzNlNzdhLCAweDUwNjhhN2NlLCAweDI2ZmQxZDM4LCAweDBjMzNlZDM4LCAweGY4MGY5ZjNlLCAweDBkZTNmZTdjLAotCTB4YzBjMGVmNzYsIDB4ZDNkNGViZmEsIDB4ZWZjMDQ0NzYsIDB4ODA3YmNlYzUsIDB4N2VmOWQzNWQsIDB4ODQ3YTAyOTAsCi0JMHg2MzAxM2JiMywgMHhhZDdlMWM0YywgMHgwYjNlOWM4NSwgMHhhMTcxZGYzOSwgMHgxZjdjNDQ0ZCwgMHhhNGJjYzA0ZCwKLQkweGZiZDU4OTU2LCAweGFiMDI4YmVjLCAweDhlYmFmZDI4LCAweDc5MDBjODJjLCAweDg4ZDBmZDYwLCAweDg2ZjhjNWY3LAotCTB4NGI4YjM3YzgsIDB4OTdkOGViNjUsIDB4ODcwYTBjMmMsIDB4ZTQ3ZjVlMTgsIDB4YjdmNjE5NDQsIDB4MDEyMzAzZmUsCi0JMHhmNWNiNTA3ZSwgMHhhYjcyZjVmNCwgMHg1NTAxZWUwOSwgMHgwMmU1MDhlMSwgMHg0MjE5ZjRmYSwgMHgyZTUwNWM4YiwKLQkweDU4YTRjMmZjLCAweGM3NGYxOTA2LCAweGIxMTRkYmM2LCAweGQ0ZjFkNDZmLCAweDk3MzUyOWE3LCAweDM3ODVkZGY5LAotCTB4ZGVhM2M4NDQsIDB4YmMzZGY5MzQsIDB4YTE1MzY3YWYsIDB4M2JmNzNjODQsIDB4NGI1OWJmYzMsIDB4ZWY4MjE3MmYsCi0JMHhlOGM5ZGMyNSwgMHg3YTBhOTRjNSwgMHhlNjNhNzA5NCwgMHgxM2VjYjQ3YiwgMHgwM2NkYmY0MiwgMHhiOGJjMTlmOCwKLQkweDQ2NDdkZjdlLCAweDg0MGMyMmQyLCAweDJmNGUyNWQzLCAweGY1ZDRmYWVhLCAweGRlYjZmM2FiLCAweGQ2ZjMwMGJjLAotCTB4ZjEzMDFmMDEsIDB4N2E5ZDU0OTgsIDB4ZDVmMjFlMmYsIDB4NjBmNzJlNTgsIDB4MjYyNzI4NWQsIDB4N2QwZjJjNGIsCi0JMHhkZDc4ODRiYywgMHgzYzQ2ZjEzNCwgMHhjNzhmYjAyNywgMHgwYzkzNDM5YiwgMHg3ZTQzZGU4MywgMHhmZDdmMWYwYiwKLQkweDA0ZWNmZjk1LCAweGFlZGZkNWZiLCAweDQ0ZDlmM2M3LCAweDQ1ZGU3MmVhLCAweDhlZjdjOGU5LCAweDUyYmRmNzg0LAotCTB4ZmI4MTJhN2EsIDB4Yjg5YzhlNjcsIDB4ZGQ3YTAzMTgsIDB4ODQ3YWE5NGQsIDB4MGZjMDRkZjMsIDB4MTE1YzNlNDEsCi0JMHhmZjdmMzA0YiwgMHgxOGIyMTdjNCwgMHg1MzkzZmY0NiwgMHg3NDk3YWU0NSwgMHhmZTVlNDI3NiwgMHg5Nzk2MDJjNiwKLQkweDgwN2FlMTZjLCAweDA1Nzc0NGU1LCAweGYxMzJkZmNjLCAweDRjMjE0NmM3LCAweDFhYTVlNmNlLCAweDg2OGRiYmYxLAotCTB4ZjY4YjgyNTAsIDB4NDkxMGViZTcsIDB4MmU4MWY1MTAsIDB4ZWZhYjQ3YmMsIDB4ZTBjYzkxZGMsIDB4MDU0ODVkNTAsCi0JMHg0N2RjMWU0YywgMHg5YWQ3ZWVjYSwgMHgzZTMwYWE5YywgMHg4MDdkZTc0YiwgMHhmOTFhOGZiZSwgMHhmNTBlNWM4NSwKLQkweGFjYmM3NDg1LCAweDMyYWRlZmZlLCAweDc4ZDQ2N2MzLCAweGE2YzU5Zjc2LCAweGUxOTNiZmM5LCAweDgxNThhZWZlLAotCTB4YWZiNDNkZTAsIDB4NzkzNWVhYTQsIDB4ZTg2NDlmZmEsIDB4OWQ5ZGJmNzgsIDB4NjVmOWJmYTAsIDB4NWIwOWYzMDksCi0JMHg0MDk5MGY4MywgMHhjNWY3NTdhZiwgMHg4NmRkNTRkMywgMHhmZGY4ZWI3NiwgMHhlNjI2ZWJhYSwgMHg4MDVjZTAwNiwKLQkweDRhN2ZjNzRhLCAweDYxNTI3YWY1LCAweGJjNWY3NDdkLCAweGE3NTc3YTg0LCAweDQ3YzIyYTY3LCAweGM5N2M4N2NlLAotCTB4ZWYxM2E0MzEsIDB4MDY4NTIxMGQsIDB4YWU0YmU0MTksIDB4NmZkOWE3NGUsIDB4ZWE2ZjFjMmQsIDB4YThhNWVhOTMsCi0JMHg2OWMyM2NlZiwgMHg2MmY3OTU1OSwgMHgzOWUwODk4YiwgMHg2MmIzMmJhMywgMHhkMzE1MmY0MSwgMHgyNWNmM2Q1NCwKLQkweDZjZmYxYzAzLCAweGUxZmE4Mzk5LCAweDhkMmQzN2Q5LCAweGY1N2NmMWUxLCAweGIzZGE5YTc5LCAweDc5N2Y0MzQxLAotCTB4MDMzM2NiYTEsIDB4ZGUyMjJmZGEsIDB4MmU4ZmEwYjUsIDB4ZTczNTE2NmEsIDB4N2RmMmNmYWUsIDB4MTQ0YWYwYmUsCi0JMHhmNWU5ODYwOSwgMHg4N2RlMjcwYiwgMHg1ZTE2NDdlNywgMHhhYTQxMjE4OSwgMHhlN2U1OWQyNywgMHgzY2YyY2U3ZCwKLQkweDY1NGY3ZjlmLCAweGFmODFiMmYyLCAweDc1ZWE0YjY3LCAweDA4YWVmYmVhLCAweDBmZjNiOTdlLCAweDdlMzE5NWNmLAotCTB4ZjcwMGVmZjksIDB4MDBjYmExMmEsIDB4OGRlMzZlN2MsIDB4ZmUzY2MxN2YsIDB4MGY0ZWQ0ZDMsIDB4M2FkMzdjZTYsCi0JMHg2YzMwNDhlMywgMHg1Nzc2YmU5YywgMHg3ZTllYjg0YywgMHhmZjM4MjhiYywgMHgxMDVhZjVmZSwgMHhmZGE5YTcwZSwKLQkweDRjNzBjZGZmLCAweGJmYjFjMGQxLCAweDFjMGQyY2ZmLCAweDgzOWZmNjA3LCAweDk5NWU5ZmUzLCAweDhmZmQyZGZiLAotCTB4NDU3ZmEyMWUsIDB4N2VmZWZmMzMsIDB4M2RiOGUxODcsIDB4OGY5ZWNiNDcsIDB4NjhlNWZiYTYsIDB4NTdmNmY1NzAsCi0JMHhiMGVkNWYyMSwgMHgyNzJmZWYxMSwgMHg3OGM1YWQ2ZCwgMHgwNDE3ZTg5ZSwgMHgzZjJkOTljZiwgMHg5MGM3ZTVmYywKLQkweGI3N2NiNjg3LCAweGY0NjMwNWMxLCAweDVjZjM0M2VhLCAweDYxODdjODgzLCAweDdkYzNmNjQ0LCAweDZmNzNlYTNlLAotCTB4MjdhZTM2NmEsIDB4MGE0OWJkZjIsIDB4NjY2ZjkwYzgsIDB4NTVlNDk1Y2EsIDB4OWQ2NWU4MGEsIDB4MWZiOGQ1ODEsCi0JMHg1NDlmYzg0YywgMHg2ZmRhYjgzZiwgMHg5ZWE4OGE2ZCwgMHhhZDdkYzU2NywgMHgxMGQwZGJkZSwgMHg3YzAwZWRlZCwKLQkweGU2YTUxNjdmLCAweDgyMzdmOTFkLCAweDY3ZjJhZDFmLCAweDg1ZWVjY2EyLCAweGEyMWRhMWIzLCAweGUyMjViMWZhLAotCTB4OTFhM2JmNDUsIDB4ZTVlNDA4NzgsIDB4ZGY3ODY1ZTcsIDB4NTNmZWZlMDAsIDB4YWZjMDA2Y2EsIDB4ZTNkOThlMmQsCi0JMHhiNzIzZmY0NSwgMHgzYjk4MzZmNywgMHg3ZTMwYWU5ZCwgMHhlOTU0ZmJmNywgMHhkNmZjZTRmYSwgMHhmZTMzMzkwOCwKLQkweDRjODJlN2ZkLCAweGU2MWVmY2NlLCAweGZlNzYyNTUxLCAweGYyMTMyY2IyLCAweGJkZjhiYjA4LCAweGUzMDE4YTNkLAotCTB4ZjBjNzg1MDUsIDB4ZDUzMmFmYmUsIDB4OGM4YmFmNWUsIDB4NDBkOWE3NWYsIDB4ZWVmZDU1ZmYsIDB4MDQ0ZjkwMzEsCi0JMHg5NjQ2YzIzYSwgMHhjZDFlNWRiZiwgMHg4OWJmZTVjYSwgMHg5MDc1NzNjMywgMHhmMDA3OWZjMiwgMHhlYzVkMTU2ZSwKLQkweGUxMTkzNzllLCAweGExYWY5MTdhLCAweDFkMzFiNGQ3LCAweGUxY2JkOWUwLCAweDc1ZmRiMTdhLCAweDYyZWU1N2JjLAotCTB4N2ZjNDcwZGQsIDB4YzEzZjZiZjksIDB4MjVmNmExN2IsIDB4MGVhNzdjZjMsIDB4NzI5ZmNhMmIsIDB4ZWUwOGFiYTMsCi0JMHhjYzk3ZGIyZCwgMHgyOTU2Y2NmNCwgMHhhNjEwNTMxOCwgMHgyZDRiYWU3NywgMHhiZTdhYmU0NiwgMHhmNDBlYjg2ZSwKLQkweDdmYWUxNTcyLCAweGEzNjBmY2U2LCAweDQyOTNlZmVhLCAweDJlYmJmMDQ1LCAweGJmODMwYmU3LCAweGRmYjdmOTQ1LAotCTB4YTI2N2JmOGMsIDB4MTE2NWYwM2IsIDB4ZDFiNzZmZGUsIDB4MTc4MmY3ODgsIDB4NjViOTE4MWYsIDB4Y2FhZmFkMmUsCi0JMHhhNTllNjFkMSwgMHhlNzE5ODBlZSwgMHhkZDgxYTE3MywgMHg4MmRmMDNhZiwgMHg5MDNhYWU5YywgMHg1MmMzYmY4MiwKLQkweDNjYzIxZDFlLCAweDU3MjhhYWE5LCAweGNhNDFjNDBlLCAweGY3ODRkYzBmLCAweDMwZGE5ZjdhLCAweGU1ZjgxZDMyLAotCTB4MWQyNTc4YzksIDB4NDBkZDM1ZWYsIDB4N2RkNzRlODEsIDB4N2IwNDYzYjIsIDB4Y2YwMTNmNWYsIDB4NDYzNzU5YWQsCi0JMHg1ZmYzMDc3YiwgMHhmMjI0NzJhOCwgMHhjOTdkOWVmZSwgMHgwMDZkM2RmOSwgMHhkNzI2OTE5ZiwgMHgyZDNlNWE2ZSwKLQkweGViOWM1OGI4LCAweDgyYjY2ODc4LCAweDllMTcxNjcxLCAweDljYjcyYmRmLCAweGRiZWYxYWZiLCAweDdlZTRmZTZhLAotCTB4NDgxZGVmODIsIDB4MTYxZGFhYjcsIDB4OTczOTVlMzksIDB4YTEwY2ZiMzMsIDB4Mzg3YmYwNzksIDB4ZGMzODZiZTUsCi0JMHhhYjlmMmMwZCwgMHg4MzlmOTc1YywgMHg4ZGY3MGU2NSwgMHhlNjVjZjcxMSwgMHhhYjc4MzFhNSwgMHgyNDI3NTNjZiwKLQkweGNhOGMyZmJjLCAweDY3Yzg3NGZmLCAweDg4ZDg3NTNlLCAweGUzNmE3Njc0LCAweGFhYWYzYzY4LCAweDYxNGU1NzhlLAotCTB4Nzk3ZGQzMjIsIDB4MDU4Y2FlZDIsIDB4NjM0YjhlYmMsIDB4MGQ3Y2FhZmMsIDB4ZjdkNTJmYjMsIDB4MjVjZGJhZTUsCi0JMHg4NzUwZTc4MCwgMHhiZDJiZjk4OCwgMHhlMjA2Mjg3MiwgMHhiNTNiNmExYywgMHg3NjllYjdkYywgMHg2NWQ3N2YxMSwKLQkweGM0MTFmMjVmLCAweDAyMjdhNTM3LCAweGNkN2JhNGY0LCAweGY3ZDVmMjhhLCAweGUwMzc3MTlhLCAweGYxMjE3Y2YzLAotCTB4ZmU1YzgzNDcsIDB4Y2U0ZWZkODAsIDB4ZWEyMzBlZDEsIDB4MzIxZmJkYmQsIDB4ZmRjMDc0YmIsIDB4M2E1MDk2NDksCi0JMHg3YmU4MWZkYywgMHg1OGY5MDUyZCwgMHgxNzY4NWE2ZiwgMHhlY2NkOTNkMywgMHhiZDc3YjU1ZSwgMHgyYzNjNzgxMywKLQkweDk2NDdkZjg5LCAweGU1ZDlmYTA0LCAweGY0MTA3MzBlLCAweGY4YzRmYTMzLCAweDcxZWM5Zjg2LCAweGQxYzNmYmUyLAotCTB4ZjQzNmZjMDQsIDB4NTM4NTQwMTksIDB4ZGZjNGVmZDgsIDB4ZmM0ZDIwOTUsIDB4N2VmYzRlZmIsIDB4MDQ3N2JhNzksCi0JMHhkOWU1ZTVmMCwgMHg3YzBiN2ZiNCwgMHgyZWVkOGRkZiwgMHg4MDZmNzk2NywgMHhlNjRiZmQzMiwgMHhiZjYzMjVlMywKLQkweDdjMGNkZTY5LCAweDY0ZTE3YzJmLCAweGM0ZDBhN2JmLCAweGRlYjEzYmViLCAweGMwNGVmNDY3LCAweDRhZDFmYzc1LAotCTB4ZTc1OTA2NWEsIDB4NTViYmRlZjUsIDB4Nzg4NzE2OWMsIDB4ZTE0ZGU3NTQsIDB4MjQ1ZWZhOGMsIDB4OThkMjZhNWMsCi0JMHgyM2MyYTQ3ZSwgMHhmMGZiMmU5MiwgMHgwM2YzMmRmOSwgMHg5N2MwMDliZiwgMHgzNjNjMzNiNCwgMHgzZTMwMzQ4YywKLQkweGY1MWEzZjUyLCAweGE1MWI1MjVhLCAweGQ1NWExM2M5LCAweGY3NjFjZWMxLCAweDllMjJiMDZjLCAweGE3ZWVmNTdiLAotCTB4ZGU4NTFlNDEsIDB4YWY3NjEzZDUsIDB4YzAwOGQ1MTUsIDB4ZjA3MTMwYmYsIDB4ZTc4ZTcyZmQsIDB4YjNkNjU3MDksCi0JMHgyZjczYTI3YywgMHg2ZjlmNGQ5YywgMHg2NzhhZjM4MSwgMHg1NTE1ZTczNSwgMHgyNGVkMWYzZiwgMHgxNjI4ZmMwNiwKLQkweDk2NTMxMjk3LCAweDExNmNmNGM3LCAweDM3N2VjN2U3LCAweGMxNWVhMzY3LCAweDZmZjIwN2RmLCAweDg0N2U4OTE4LAotCTB4MDBlNTA2NTMsIDB4YzM1MThlZmUsIDB4NTVkMDFkMTgsIDB4MWVmMThiYmQsIDB4OWY1YjEzN2YsIDB4N2E4ZTVmN2EsCi0JMHg3YzI0NGRlZiwgMHhkOWIyZDM1YSwgMHhlZjEwOTFlZiwgMHhmMjg3NzAwMywgMHhmMDI0YTI0OSwgMHhmZmRlMWE2MCwKLQkweGEyZmYwMTU1LCAweGE2MThhZmEwLCAweDNmOTE5YjczLCAweDE4NWNhMGQ0LCAweGUxOTZjZjc4LCAweGU4M2Y3ZTViLAotCTB4M2ZiY2I2ZmYsIDB4ZWIzYWUwOWQsIDB4OTAxOGZlNWQsIDB4Y2NjYTlmYWIsIDB4NTNkOGEzZGUsIDB4NmM4YmFlNTAsCi0JMHg2OWE3Nzg5ZCwgMHg0ZjZiYzgxMiwgMHhkNjNjNWE1YiwgMHg1NGZjM2YyMywgMHg5ZjJhZjU2MCwgMHhhMDdlYjAxYiwKLQkweGRhMDdlODE3LCAweGE3OGViZWQxLCAweDMyMTliZjMxLCAweDhjYTdiODA5LCAweDhmOTAwZGY4LCAweDlmMjdjYWE2LAotCTB4M2NlMGU5MjAsIDB4ODk0ZGI3NmQsIDB4YWVlYzdhMDEsIDB4YmQ4M2I2Y2YsIDB4MTI1MzY2NWMsIDB4YzJlOGMyMGEsCi0JMHg3M2MxMDZmNywgMHgzN2RjMGFhNCwgMHg1ZjdlMDEzYywgMHhmYzE2M2RjMiwgMHg1YWVjZmI3NSwgMHg3Y2U0NDE3ZiwKLQkweDM1ZDI5YTVlLCAweDc3ZmViYzJmLCAweGVkZmY0YzY5LCAweDhhMjhmYmUyLCAweGRmOTA2M2MzLCAweDJmYmM0Mjc5LAotCTB4NzdhZjc4ZTYsIDB4ZmI0MTZmNzksIDB4ZTJkZGEyMzEsIDB4MWU5Y2IxYWQsIDB4YmQzN2RlMjIsIDB4Zjc5OGFmZmEsCi0JMHg0ZjdiNDNiMSwgMHg3OGY4Y2ZkYywgMHhmODM3MWU5ZiwgMHgxOWUwMWI4NSwgMHgxNWJhZjk4NSwgMHhhYjlmMTk5YiwKLQkweGU3MzRiYjc4LCAweGYzYzY1NjUxLCAweDFlNWE1M2Q1LCAweDU4ZTNkZmM3LCAweDBlN2E3YmIwLCAweGYxMGI3YzYxLAotCTB4ODJlM2QyYTAsIDB4ZTgwZTc3NzQsIDB4YTI2ZGExNzEsIDB4NjJhMmZiMGMsIDB4YTlmMzg4YWIsIDB4ZGI0YzlhOTcsCi0JMHg1YjMzZmJlOCwgMHg1NWRmYThmNSwgMHg0OTljZjlmMCwgMHhkZTIwYzZmNSwgMHgyODE5MjIyNCwgMHhkZTQ4Y2ZkYywKLQkweGI3NWZkNDE4LCAweDg5MWRkZmYxLCAweGY3NmQwNzU4LCAweDA4MzA1NDllLCAweGNmMGM0YzdjLCAweDQxZWM5ZjA4LAotCTB4MWQ1ZGUwZTgsIDB4ZmMwMTY5ZTIsIDB4YTNjYzE5N2UsIDB4ZTRiZjQwNDUsIDB4MDNlZjM0OTksIDB4NzZhNmVlNTAsCi0JMHhkYmZmZGUzYiwgMHg1OWY3ODk1NCwgMHg4Y2ZiYzI0NCwgMHhiOWY0OGJjOSwgMHg4NTQ3YWY5OCwgMHgyYTM4ZTQ2NywKLQkweDllMDE3YjNjLCAweGRmMWQyZmEwLCAweGY3Y2Y3MjhlLCAweDRiMTQwODk0LCAweDQyNWZiNDhlLCAweGM3NGE3YTdiLAotCTB4ODI2ZjhmZjQsIDB4ZGVhOTliZjcsIDB4Y2Q5YzgwYTIsIDB4NDAwZmVkZmEsIDB4Zjg4OWQ1Y2UsIDB4MWQ2NTI2N2IsCi0JMHg0MjI0MDlkOSwgMHg1OGRkODM1ZSwgMHgxODljY2VmNiwgMHhhYzljOTg1ZCwgMHg3ZTMxMTY2ZiwgMHg3NjZjM2Y1MiwKLQkweDdmNmM0MmNjLCAweGFmYTA0ZWYxLCAweGExMmI4YTkzLCAweGU4ZGRhYzIwLCAweDgxNzhiZWY0LCAweDliZTU1ZjA2LAotCTB4ZTMwMzFhZmYsIDB4NzFlYTM0NTQsIDB4N2E1ZTJhNWQsIDB4ZmY5MDljZTksIDB4YmZhMzQ1MzYsIDB4ODQzNTM3YTgsCi0JMHhlYTc4YWFmZCwgMHg4M2MwNmZhMywgMHhkZGI0NGY0YSwgMHgxZjMyZTk1ZCwgMHhhOGZjOGZjNywgMHhlNDViZDMzYiwKLQkweDE2NGU4NDFhLCAweDg1Yzc0OTNkLCAweGYxNWFiNmZlLCAweDFkNmJjMmZlLCAweDFmNDc4NTU3LCAweGM2YmVmOWJlLAotCTB4NTc3MWUwMzIsIDB4NzViZmZhMjYsIDB4NGM5ODRhZWYsIDB4NjY2OWIyN2QsIDB4NzJlM2VjM2EsIDB4ZGZjMDJmMmEsCi0JMHgzZTg0MmU1MCwgMHgzYjI0N2JjNiwgMHg2YjBmNzg4YywgMHgwZjI1ZTZmOSwgMHgxZmU1NzhjMCwgMHhkZjUwNzUxYSwKLQkweDU4ZTY3ODdkLCAweDVlMDQ1NzljLCAweDA3ZDI5YzI5LCAweGNjZGVmN2EzLCAweDBjMmJiYTUwLCAweGMwOWY1NDdlLAotCTB4MjdhZWFkZmQsIDB4MGYzOGRlNmMsIDB4N2RlMTRmNmEsIDB4MTQ5OWJkMjQsIDB4NjA3YzYxOWYsIDB4YmJkMzNhNzYsCi0JMHg4MGQ5N2I2OCwgMHhjM2VlY2RmNCwgMHgxY2FmNWJlOSwgMHg2MjM5NWViMSwgMHhhNDExZWZiZCwgMHhlMmYyZTI2ZiwKLQkweDY0N2MxNjdhLCAweDA1ZmJjMWQ0LCAweDAzOTFkYzRmLCAweDg2ZWViNWZlLCAweDZlYWViOGE5LCAweGVjMmM3YmJiLAotCTB4ZGE3NGVlYWYsIDB4NzJmYzIwZmYsIDB4OWQ3NDEzYzEsIDB4Y2ViMGRmNzksIDB4NmJlMjMzMjYsIDB4NDNkYTc1YzgsCi0JMHhhYzM3YzhiYiwgMHg1MGU5YzdkMywgMHg0OTY5ZTc1ZCwgMHgyYmRmYzE4OSwgMHhmMDEyMjgzYiwgMHgzY2QyZjg5NywKLQkweDY1NjI2ZjFiLCAweDlmMjg5ZGZjLCAweDZmODNkMTllLCAweDMxZTYzNDczLCAweGZiYjNiNGY2LCAweDQwM2U1NWM5LAotCTB4N2E0NmJiYzcsIDB4NzQzZDIxZDAsIDB4MjY1YjJiMTcsIDB4MTA2ZDdkMDIsIDB4ZWQ4YmM4NjUsIDB4NWJmNzE4NmUsCi0JMHhlZWFmMWRmOCwgMHg3YTBjYTI4ZCwgMHg4MzMxNzc0MiwgMHgyODA3ZTUxZiwgMHgzZGQzYmJiNywgMHhiMGY5NjI3NywKLQkweGVhOGY3ZjFlLCAweGRmNWZkMzU0LCAweDFkZTE3M2M3LCAweGZhZTA4NTdhLCAweDQyZTcxYjNjLCAweGY4MTdjZTk5LAotCTB4M2RjYjg1MWEsIDB4ZTNkNTVmNGMsIDB4OWVlYmViZmEsIDB4ZmY3YTgzYWEsIDB4ZmNmMDFiZDYsIDB4YWNmOTQwYzMsCi0JMHhhMzQ1NzM4NSwgMHg0NDg3ZDlhOCwgMHhkZjNjNzA1MiwgMHhhZjc4MjkxMywgMHhjYTY3MGE4MywgMHgxZWMwNzM2MSwKLQkweGU1MDFlMTUyLCAweGUxZmE2MzM5LCAweGEwZTdlM2UyLCAweGY3NjAyZjQxLCAweDA2N2U3MTIwLCAweDcyNjJjOWYwLAotCTB4MDA4MWNlMDIsIDB4MjhmMzgzMWYsIDB4NDhhYmM5NDMsIDB4NDdhOTEzZmUsIDB4YWY4ZmJjZmQsIDB4NjU3MWY5NjgsCi0JMHgzZTE4ZWZjNCwgMHgxMjVlNTExOCwgMHg0Njk2MzdjMSwgMHhkNDQ1NTdkNCwgMHhlNzdjZjk1MywgMHhlNGU3ZmU2MCwKLQkweDJiNWYyZDBjLCAweGZkNTQ3MGUzLCAweDA0MWJiZGEwLCAweDI0Y2I0M2I0LCAweGNmZjYwMGM1LCAweDdjOTg1MzRiLAotCTB4ZTk4ODk3MmUsIDB4ZWM5N2RjMTYsIDB4NDQ5OTRiN2MsIDB4ZjAwNThkNmEsIDB4YjcwODY1ZGUsIDB4YjU3ZjY4OTMsCi0JMHg0NzJkM2I0NiwgMHhkYjQ0M2UzMSwgMHhjYWMyMTg5NSwgMHhlNzU1YmYyYSwgMHg4Nzg3MDFmMywgMHg3ZWNlZmNmYSwKLQkweGUzMjFkMjgxLCAweDhmYTQxZjE1LCAweDI4YWYxODFmLCAweDc1N2ViMzEwLCAweDgzYWJlYzAyLCAweGJlOTVkYTIyLAotCTB4MjFmYzk5YjcsIDB4ZjJkYTVkNWYsIDB4OTdlZTAzYTIsIDB4MzBiY2M2Y2QsIDB4NzA5MWZkNzUsIDB4MTRiYjZkZWMsCi0JMHhkN2ViYmYwMywgMHhlNzgwZGM3MywgMHhlM2RhY2I5MywgMHhiMmZlZDE4YSwgMHg3Yjg1MDY4NywgMHhkYTlmNWYwZiwKLQkweDE1ZDQ4ZjVmLCAweDZmNWMyYjMzLCAweGUxMzE1ZDI2LCAweGQ2NWFhM2JmLCAweGQ4MjU2OTc2LCAweDdlN2UxNGIzLAotCTB4OWY4ZjhjMzEsIDB4MDYyZjg4ZWEsIDB4ZDdmY2IyYmIsIDB4N2U3MGM1YzksIDB4ZGFhMTk2ZDYsIDB4MWFjZmNhZmQsCi0JMHgzNDFjZGY2MSwgMHhlN2EyM2ZhMiwgMHhmODNhYjllZCwgMHgwYWVkZTdiZSwgMHhmNzhlNWNmZSwgMHgzZTljZjViOCwKLQkweGM3ZTMwZTk1LCAweGZlZTdiNGU4LCAweDViNmZkYzBkLCAweGQ3NjRmYmFlLCAweDBmZmZjMGNkLCAweDA5YWU2NjI1LAotCTB4ZWI5NzM3ZjMsIDB4N2UxZWQwMGEsIDB4MDc5YTFmNTEsIDB4N2U3YWE2ZjMsIDB4YWE1N2U0MWQsIDB4MTQzMmQ4ZmQsCi0JMHhmMDcxYWY5NiwgMHgwZmUwMmVlYywgMHgxNWE2MzZhNywgMHgzOWU5NWIwMCwgMHhkZmVkMDIzOCwgMHhlNWM3MGY5ZSwKLQkweDI0N2Y2OGM4LCAweGJjMmY4MGI5LCAweDMzOTY1N2E4LCAweGRhZWFjNTdiLCAweDFmZGZkOTlkLCAweGM2NzEwMzhjLAotCTB4OGExMzgzOWUsIDB4ZjNkMDVmYzAsIDB4MmQyZjliMjEsIDB4YjY4MGZmYTMsIDB4YTUxZTQzZjMsIDB4NGU4YzZmZGEsCi0JMHhkZDc5MDRkOSwgMHhiNDdhZDdlNCwgMHgzYWZhMWUyMywgMHhiOWVlMTEzYiwgMHgxZTBjMzE4OCwgMHg0MWJiMDE5ZiwKLQkweDFhYmNkNzliLCAweGFiZGVhZGU3LCAweDJjNTc2OTFkLCAweDRmOTYxZTIwLCAweGE5N2Y2MTFiLCAweGRhNDc3M2Y3LAotCTB4NjlhNDE1ODksIDB4ZDAzMDk3NmQsIDB4Yjg4YWE0NWUsIDB4ZmIwMDlmYzksIDB4NDU2YmZkNWEsIDB4ZWY2NGJmNzksCi0JMHhiZWY2YTM1NSwgMHg5ZmRmM2Y2MiwgMHg2NWM3ZTQyNiwgMHhhMDM2M2Y3NCwgMHhmY2MwMjliZiwgMHhhMGUyNzU3YiwKLQkweDY1ZWZkNzcxLCAweDllM2FlMjY0LCAweGJjZGJmZThlLCAweDllYmMzMGFlLCAweDQ5YzkxMWQ0LCAweDQwZDI3YWUxLAotCTB4YzE4MmNlNGMsIDB4ZTljYmM2ZWMsIDB4YjQwZDlmNjAsIDB4MWZhMmNmMTcsIDB4YmVmYzNjYTMsIDB4NmVkMDMyMzAsCi0JMHhjMDFjNTkzYywgMHgwZDkzYmRiYywgMHhjMDllZmUyMiwgMHg5MThkZGFmNSwgMHg5N2JmYWJkZiwgMHgyYzIwYzllMCwKLQkweDY3NzIxOTFmLCAweDM3NjRkZmVkLCAweGMyYWJlNzZiLCAweGM3N2ZjY2QzLCAweGUyZmRiMjIyLCAweGNhMzcxNjBjLAotCTB4NmUyNDVhZmQsIDB4N2ExZGY3ZDgsIDB4ZGQxM2JmM2MsIDB4MWY5NmM1ZjIsIDB4ZWJiNjdkMDAsIDB4ZTMwNTRjZTUsCi0JMHgwYjdiZjgyYiwgMHhmOTg4YTBlNCwgMHhhN2VkYmQ3ZiwgMHgzOTA0MWU2MiwgMHgxZTFjNzA3MywgMHhkNzkzZWIyMywKLQkweDkzOGM0NTA3LCAweDRhNWRiNGY0LCAweGVkMGE3ODgwLCAweGJlYzZlMzA3LCAweDQwNWNhNzhlLCAweGUzY2Q0M2JmLAotCTB4ZmFmMTBjZDEsIDB4MDhlZWY5ZmMsIDB4MWY4ZjI4YmYsIDB4Yzk5Y2I0ZjcsIDB4Zjk0ZWZlMDEsIDB4YjAxOWEzZTAsCi0JMHhlMmJlNzMzZiwgMHgxNTc1NmNmNywgMHhmOWQxZmQwMSwgMHgxYmRlZmVhMSwgMHhhNWZhOGNiOCwgMHhmNDFjNWRhOSwKLQkweDE5ZjVhYWZlLCAweGNmZTNlYjg2LCAweDhiZjIwMzI1LCAweGY3YzQ2N2Q2LCAweDA5NWFiM2NmLCAweDdlY2U0MDE5LAotCTB4YjRjNTFlNWIsIDB4YzM1NzBiODMsIDB4NGRiZDMzZmQsIDB4Yjc3ZjBiODIsIDB4Yjk0NDVkYjksIDB4M2EzZGEwYjUsCi0JMHg0Y2JjNTBhMCwgMHg3MmMxNjExYiwgMHhlZTc2NGVmOSwgMHhmOTM4ODY2MywgMHgyZTZmZjA3ZCwgMHg3ZmEyMjBkZSwKLQkweGYyY2I0OGYzLCAweDY3OThmNWY3LCAweGU1ODMyN2ExLCAweDVkZTdmNDYxLCAweGM2MTQ3YzNjLCAweGRjMTRmYzU5LAotCTB4YzRmZjQzMTIsIDB4NmZkMDBkZmIsIDB4ODEwMmQzZTUsIDB4Y2M4ODRhOWYsIDB4Nzc5ODE4YmYsIDB4MTQ0ZjM1ZDEsCi0JMHhjMDVkZTYwNywgMHg2OTA3ZTVmOSwgMHg0NjZkMTViZiwgMHgzYzBmYWZmNCwgMHgxYmM4NDBlZiwgMHgyMWY3ZmQwOSwKLQkweGJjNmYwZWU1LCAweDlmNmQyOGVmLCAweGY5NjA2MmRiLCAweDNlMzU2NjdmLCAweDBlZjY4NWQ1LCAweGQwZjNiMjA5LAotCTB4YTc0ZjA3M2QsIDB4ODc3ZDFlMDMsIDB4YjFmZDA3ZmUsIDB4ZDIwZmVkNDMsIDB4MGUzY2YyY2UsIDB4NTdkZmIwNjYsCi0JMHhkMmZhZmRjYywgMHhkYTQxOWU5ZCwgMHg4YjNjZjIzNywgMHgzMjdmN2FiZCwgMHg1YjQ3YjFlOCwgMHhlODNmMjMyZSwKLQkweDZjZmNjODNkLCAweGZjNGZmNjQzLCAweDBhZWZlNjY2LCAweDU3MGZkMTlhLCAweDBlZGYyYWQ4LCAweDgzZWE4NGZiLAotCTB4ZWVkZjVlYjAsIDB4ZDM3N2IzYjUsIDB4YmQ1NWY5YjIsIDB4NmY5NWFhMDIsIDB4MGJmNzA1YjgsIDB4ZGZmMDhmZWMsCi0JMHhjOWY3NTIwMywgMHg1M2E3MWU1ZSwgMHg3OTFhNDdmMywgMHgzZjlhOGRiZSwgMHg0NDkzZTZhMiwgMHgyN2NkNDNjZSwKLQkweDdjNjE0YzY5LCAweGYzYzMyZjIzLCAweDk0NWJkMDAxLCAweGU3N2VjZmNlLCAweDY4Y2YyMjMzLCAweGM4YTFiY2E4LAotCTB4NzE5MTA3NzMsIDB4OGFlMjQxODIsIDB4NDZjMGFmMmMsIDB4YzZhMDZlMzAsIDB4YmU1NDBkMTcsIDB4MzFkNjQ3YzMsCi0JMHhkMDY1MzdiMywgMHgyMjdiZmQ3YSwgMHhjNTQzNGZkYSwgMHgxYzc1ZDUxYiwgMHg3OTg2NTEzOSwgMHg4YjJmNTU1NiwKLQkweGIwYmZhZmU4LCAweGJjZTNjZjVmLCAweGU5NDM4YzIxLCAweGM4NjE3YzRmLCAweDdlY2U3ZTQ0LCAweGNiNDdjOTVmLAotCTB4NTkzN2RlZjAsIDB4ZDI4ZWZjZDIsIDB4ZTcxZTFjNTcsIDB4ZDlmMDcyMzMsIDB4OTc4ZmI5MjMsIDB4ZTQ3YjdlZDIsCi0JMHhmNWU4MDMzMiwgMHg0YTBiMTNmYSwgMHg5ZGU4ZGU0MCwgMHhkNzk4MDY2NSwgMHhhNmM1MTM5MSwgMHg0ZDliYzA0YywKLQkweGI2YjM3ZGMyLCAweDUzYjcxZDVkLCAweDNmZmZmZTg2LCAweDFmMDEyYTgwLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RiNWZmMDAsIDB4NTU5NDVjMGIsIDB4ZTc3OWY4ZGEsIDB4MzgwYzJiOWQsIDB4YTUxMTcyODAsCi0JMHgzODBhMGVlMSwgMHhkYjk1OTAyYSwgMHg5Nzg0MjY4ZSwgMHg0ZDMyZDQ1YSwgMHhlNTQ1MDc1NywgMHhkYjY5ODAzMiwKLQkweGNiYmFlZWU3LCAweDVhY2Q0ZDc4LCAweGI1YWNhOGRkLCAweGJjYzBjMWJlLCAweDFhMTYzYjYwLCAweDI1YTNiNjE0LAotCTB4YjY4Yjk1OTksIDB4M2Y5YjViOTksIDB4MDI4NmYzMjgsIDB4ZmZiOWY1NjIsIDB4Y2ZmZWJmNmQsIDB4M2FmMzljZjMsCi0JMHg3ZTk4OGVmMywgMHhiZjY3ZGZiYiwgMHhkZTczODc3ZSwgMHg3M2NlN2Q3MywgMHg5MzM5Y2YzZiwgMHgxOTZlMzlhNiwKLQkweDllYjE5ZmQzLCAweGNhZGIyZDFjLCAweGM4N2IzYjE4LCAweDYzMGQ4MWJjLCAweGY3ZmMwN2VjLCAweGFjZjJjNjUzLAotCTB4MTgwMzYzMTIsIDB4MzE5YWJhZmIsIDB4M2U1N2RlYWYsIDB4N2M4MWZiM2YsIDB4MDJkOGMxOTYsIDB4MzE2MzU4ZTYsCi0JMHgzMzIzNWE0MywgMHhiZmQxOTFhZiwgMHgxZDFmYjAxZiwgMHhmMjgxZWU5YiwgMHg5ODgzNTdmOSwgMHg1ZGFmYzIzNywKLQkweGI2M2QxNGY0LCAweDk0MzU3ZjliLCAweDNkNDI0Nzc5LCAweDM2NzdhZjEzLCAweDRmMjg1MjA0LCAweDE4NzJmMWMwLAotCTB4OWRlOTEyY2IsIDB4NmVkZjJkMjIsIDB4ZWJmNjljYjIsIDB4YTYxM2MyYmYsIDB4YzUzNTU3Y2EsIDB4ZjlhNzRlNTgsCi0JMHg0N2Y4ZTVmMiwgMHg2MzZmZmMwYywgMHg5OGM5MTY0NiwgMHg5NzYyN2Y5MywgMHhkYjc0ZmM1ZSwgMHg5MTNmNDg1YywKLQkweDU4NTYwOTFjLCAweDllZDQ4NTU3LCAweGIxMGMwZjdmLCAweGVmNTdiYTI2LCAweDJkM2FlMzMwLCAweDYzZjI5YmNjLAotCTB4NWU2MDhjZWIsIDB4ZDVhZTcxYmYsIDB4ZjVhNDZhYmIsIDB4MjU2NmUwZjgsIDB4NmJkNmY5YjgsIDB4NWQ3YzM4MjYsCi0JMHgzODEzN2QxZCwgMHhlOGUwYWFjNiwgMHgwNTQxM2ZlYiwgMHg0ZmZiZWJjNywgMHhhZWJmZjFhMSwgMHhmZjQ5YmI0ZSwKLQkweGJmZDA2ZjQzLCAweDVmN2YzNTU1LCAweGVlMzQ0OWJmLCAweDBiMGQwY2FhLCAweGE0ZjQ4NmNkLCAweDVlMDBjZGMxLAotCTB4Y2IyMzU1MDAsIDB4MWQ4MGNjNjUsIDB4Nzk1NjU0YzEsIDB4NjZhZDE5YzcsIDB4NzUyNTdiNWYsIDB4NmNiMTcxYjEsCi0JMHg5NDZmN2MxNCwgMHhmZGYwZGMwYiwgMHgyNWFlNjU5MiwgMHg5ODVkNTIxOSwgMHhhMWRiYjE4NiwgMHg3MDVlY2ViZCwKLQkweDA4NmJmNDE3LCAweDQxNzA4ZjBiLCAweDg5YWMxMzNmLCAweGMyZWZhZWI0LCAweDI4MzAxNTE2LCAweDA4ZjA2ZWZmLAotCTB4ODM4ZjE1ZDksIDB4ZmNjNDJhMmMsIDB4ZjJjNTQxYWEsIDB4ZTM3ZjFjN2EsIDB4YjVmNzBjNzMsIDB4MGZjN2M4Y2EsCi0JMHhmYzMzMmZkOSwgMHhiYTMwZWVjZSwgMHg3NzdlYTE5MywgMHg3OTk2YzdjYiwgMHgwNmRmY2UzMCwgMHgzZWUwZTYzOSwKLQkweGM5MDlmMzJiLCAweDNlZTE5Nzc5LCAweDZkYzcyNmIzLCAweDNkOGMyMTg1LCAweDBkYWM2MTZlLCAweDUwZjZkYWYzLAotCTB4NzI1ZWFmNWMsIDB4NDA1ZGU3ZmMsIDB4MDZhZmVjMGYsIDB4NzdjOTBmNTYsIDB4MjVhYTQ3MjYsIDB4Y2FiZWQ3YzMsCi0JMHgwMWY5YTdhYSwgMHg2OGIyYzQzNSwgMHhhNTBkNWY1YywgMHgwODU3NGQ1NSwgMHg4OTE2ZDZjZSwgMHhhZjdjYTVkNiwKLQkweDc3MDQzZDYyLCAweDg4NTFlNTg2LCAweDdkMmI1YTkzLCAweDE2YTQ3MjZmLCAweDcxZTZmYTY2LCAweGNjZjdmZmFkLAotCTB4OWZkMDBkMmUsIDB4NDMzZmZmNjEsIDB4ZGFkZDllMTEsIDB4OTA2ZGZiOWUsIDB4NjBlNDVhN2EsIDB4MTFhZWY4N2YsCi0JMHhmMDc2Mzk3NCwgMHg1MGVkNTkzNywgMHhmYWVkODk1ZSwgMHhkYmQ4ZjYzMSwgMHhmMzBjYTllNSwgMHg5YzJjOWU4NiwKLQkweGZmYjdjMWY3LCAweGU5MGVkNTkxLCAweDZmY2JmYjc3LCAweDUwZWRmMmMzLCAweDZlZjkwYWRmLCAweGNkYTU0ZjdkLAotCTB4NjYyNGJmYWYsIDB4Zjk0NjY5NzEsIDB4MGZiMTZhZDIsIDB4ZjdkYmU1ODEsIDB4ZjM4ODFjYWYsIDB4ZGNjMWQwNjgsCi0JMHhhNTljNjFjMywgMHg0NzRmMjM2NSwgMHg5ZmQ4M2EyMCwgMHhiNWI4NDc4ZSwgMHhlYzNkNThlOCwgMHg1NGQzNTc0NywKLQkweGU1NGFmOTE5LCAweDQzMDU4YzI3LCAweGY2MTliYjNlLCAweDgzZDlmMjA3LCAweGZiMDM1Yjk5LCAweDkzZmZiOTUzLAotCTB4OTU1ZmI4ZTksIDB4MDY4YjdhMzksIDB4YmMzNDEyOTYsIDB4YmUwMmJkY2QsIDB4MmQxOGU1MDcsIDB4MmM1M2UyMTIsCi0JMHhlY2NmNWYxZiwgMHhmYjYyMjU4YywgMHhiN2RjMDhiYywgMHgyYTMxMDYzNywgMHg0MWY5OTdmZiwgMHg2YmRiYzcxZCwKLQkweGJjN2JjMGZjLCAweGFiYzYwMWIyLCAweDQ3ZWZkYjkwLCAweGExN2MwMDNlLCAweGYyYTVmMTFlLCAweDY2OGU2ZmEzLAotCTB4NGY0NmIxNTgsIDB4NzhjZmVlMjQsIDB4ZDBmODE3MWMsIDB4MzY5ZmEyYzcsIDB4YWMwZWUxNmIsIDB4ZmJlMGZkZDcsCi0JMHgyZGU4YjA2YiwgMHhmNWMwZTFjOSwgMHhiNjhjNjJiOCwgMHg2OGNmYzQ3YSwgMHhiZjE0YzI3NywgMHhhYWNkN2Q3ZCwKLQkweDRmZjBmNmExLCAweDIyMWRiYzQyLCAweGEwN2JiYWU2LCAweDIyNTg3MTY3LCAweDQ3MGVlNWZlLCAweDMwZDJhODdjLAotCTB4MzY0M2YyMDcsIDB4MDc3YTgwMDksIDB4ZTY2MTY1ZTIsIDB4ZTllYmNjOTQsIDB4ZDQxNWIxOGEsIDB4N2I1NmRiZGYsCi0JMHg1N2M3MzViMywgMHgzMzY5OTNmZiwgMHhkMDdkMWQzMywgMHhjMTJhNjIyMSwgMHgwNDc5ZWY1MywgMHg2MTUzZDllNywKLQkweDdkODU2ZGI2LCAweDgyN2UwYmY4LCAweDMzNGYyZjc2LCAweDU4NTBlNTc4LCAweDU2YmNjZThmLCAweDE5M2EzYzAyLAotCTB4MDA3NWJiM2MsIDB4ZDliNTdmYWMsIDB4NzNhZTFlZjEsIDB4ZDdlMzQzZmEsIDB4MTgzYTVlNjAsIDB4Nzg4YzVkNjEsCi0JMHg4YjllZDQ1OSwgMHg3MjZkMTJmYiwgMHgzYmUzODA3YywgMHgyMmRiOGU4ZCwgMHgwNjk3ODk2MSwgMHhjMWZiNTIzYiwKLQkweDA4YzJiMzU2LCAweDk4NTY2ZjBlLCAweGZjZTdkODU5LCAweDc5N2M3Y2Y5LCAweDU0Yjg0MWE2LCAweDM2ZjRiODA4LAotCTB4N2M0M2Y2MjYsIDB4NWZhZDdhZWQsIDB4NzRmOTgzMTYsIDB4Y2EwOTU4NjksIDB4ZGYzMTJlODcsIDB4OTg4ZjIwNzMsCi0JMHg3MTJlOWYxZiwgMHg0MTE3ZDMxZiwgMHg2M2JhZDJmZCwgMHhlYjdlYjlmYSwgMHhlZWNjNjBhZiwgMHhmYzdlYjhjOSwKLQkweDMwMWZiODhiLCAweGZmZDc4NWZlLCAweGExYWZkZGY4LCAweGY3NmZjZWFiLCAweGMwMDRiMGE1LCAweGFkMjJlOTEzLAotCTB4YzcxZGJiZWIsIDB4OWRmNThiNjYsIDB4ZDYzZmY1YzUsIDB4ODdhNzEzZGIsIDB4MDczZDM5NzUsIDB4ODg3ZjljZjQsCi0JMHg1MjdiNjlmNSwgMHg1ZDdkNmM3ZSwgMHhjMjdjYjY5YSwgMHhhNTkyN2Q4YiwgMHhhZWQ3ZGUzZSwgMHg3ZTU4ZjFhMiwKLQkweDQ5N2JlMDJjLCAweDk5MDhkODVkLCAweGUyMGE1OWUzLCAweDA2MWJhOTU5LCAweGE1NWJjM2YxLCAweDhiM2UwNTFmLAotCTB4NWRlYmJmMDUsIDB4MTQxM2UwMmEsIDB4NWFmMjg1OWEsIDB4ZmUzMjhmODEsIDB4Y2NmODAwYTksIDB4ZTFlNGY2ZDYsCi0JMHgwYjJmNjYzYywgMHhlYTdlNzBkMywgMHhiZTUxZmMyNiwgMHgxZWFhNTljZiwgMHgzMGUyMjU3NywgMHgxYmY1Y2ZjYywKLQkweDY2ZjM0ZGM5LCAweDJiODZmZjNjLCAweGYyMWViZGNjLCAweGJmOTVjZDA2LCAweDIxYmQ0NTRjLCAweGJkNDM2MzUzLAotCTB4ZjAxMDRiNjEsIDB4ZmQ4YzExODAsIDB4OGJjZmVjNTksIDB4ZTE4YzFmYzAsIDB4Y2IxNmJlNTQsIDB4ZmI3ODgzYTMsCi0JMHhlZTM1NjdlOCwgMHg3MGJlZDA5NSwgMHhlMWUxMzM2YywgMHg5YjY2OTVjYiwgMHgzMTE1NjMwYywgMHg4NTMwYWM2MCwKLQkweDQ3YWVjYzc5LCAweGU2M2Q3ZmI4LCAweDYxZGJmYjFmLCAweDFkZTI4MzlkLCAweGZlYjBmMTUxLCAweGI4OWExMTM5LAotCTB4MWMzY2QwYmYsIDB4OWMwMzI3NDMsIDB4YzcwZTY4ZDgsIDB4YzIwN2I4NDAsIDB4ZThiMzBhN2YsIDB4MzZjNjVmYjAsCi0JMHhhN2VlOTA2OCwgMHhlNjUyZjg1OCwgMHhhNzhlOWM0YiwgMHhjNzBlYmIzMiwgMHhhODM5OTA3YiwgMHhiZDJlZjFkZSwKLQkweDFjMWQwMTlkLCAweDMwNjBmNDA3LCAweDhiOTg4N2VmLCAweDM3MzA2N2NhLCAweDk3OTkzM2E1LCAweGI1OWNmZmVhLAotCTB4MDNhMTVlNTMsIDB4ZmQzOWZmYzAsIDB4OGQ5ZmZlMzksIDB4YjI2ZjA5OTIsIDB4YzdiZTAxZTIsIDB4MmYwNmIzODIsCi0JMHg3ZTRjNzU4NSwgMHg2MTk5MzUyZSwgMHgwODAzMzU5ZiwgMHhmNzliMzczZSwgMHhiMWMzODk2NCwgMHgxZGI4ZWFjZCwKLQkweGYwNWJkZmQ3LCAweGQwMzU0YmVkLCAweDI1ZThjNjhmLCAweDI3YzZiYmZjLCAweDc4MTAwZGM2LCAweGEyN2NlM2Y4LAotCTB4MDllMzk3YWQsIDB4MDYzOTgzOTAsIDB4ZDhhZjcwZTAsIDB4ZTVlZDdiZDIsIDB4OGNiZDcwOTMsIDB4ZmU5ZTQ4NTksCi0JMHg5ZTVmZDA0YywgMHhiM2ZkNjY2YywgMHg2ZGQ5N2M3MSwgMHhhNWQ4YjljMCwgMHhiZTQyNDY4ZiwgMHhkNmNjOGM2MCwKLQkweDViZGUzY2MzLCAweGJlZGU0OGNlLCAweDEzNzY1YzM3LCAweDg2OWYyMGFlLCAweDdlOGJmN2Y2LCAweGJhOTk4ZDI3LAotCTB4Y2JkNDFmYWEsIDB4ZGIzZGJlZmYsIDB4MjBjMTY5MGIsIDB4N2VlZDk3ZGQsIDB4N2ZiZTM1ZjgsIDB4NDgzMGFhZWQsCi0JMHhjYmE5MjQyNywgMHgyZDM2YjIyNywgMHgwNjUyNzVjMiwgMHhmM2YxZmI5NCwgMHhmNWQ1YjNmYiwgMHhlMTk4ZTAwZSwKLQkweDIzMjhkYjk4LCAweDBmOGNjZGZkLCAweDE4MjY3ZmU5LCAweDkwZDg0M2IyLCAweGJkMWY2NDFmLCAweDlkZTllYjI4LAotCTB4MGRkZjQ1NzQsIDB4ZWYxMGQ4ZjMsIDB4YjJmYjhiOTgsIDB4NjdhZmJlZjgsIDB4MmQzM2JkMjMsIDB4Y2EyNDY4ZmIsCi0JMHg1ZDdjYTNhOSwgMHgwMGRkMDI1ZiwgMHhkNWQzYjIwNiwgMHg3ZTgwZDEyMCwgMHg4ODNlODBjZSwgMHhiN2EwNzNmOSwKLQkweGRhYTE3YTYxLCAweGQwNDVlOTRhLCAweDU3N2JmMGIzLCAweDllZjI4ZGI1LCAweGVjNzJjMmY4LCAweGNiZGFlZTc3LAotCTB4NGUwNjQ3NWEsIDB4NmRmMDg1MmIsIDB4MzZiN2MwODksIDB4OGMxMzU3OGQsIDB4YjI1NWI0ZjQsIDB4NjI1YzdjYTEsCi0JMHgwYzFiMWI2YSwgMHgxZjUyNWJmMCwgMHg2NzFkODM2ZiwgMHg1NjllNGQ2NSwgMHhiN2IxN2U5YywgMHg3NWI3MWYzMCwKLQkweGFkNDVlMWMxLCAweDA1NWM1Njk4LCAweDZjYmQwNzhjLCAweDFmZjg1Y2FlLCAweDdmNWQwNzg4LCAweDdkZGE3MmY5LAotCTB4N2FiNjdlNTAsIDB4YmU3ZjhkMTQsIDB4NzdlMzRlZGEsIDB4ZmE1MDE3NTYsIDB4MzdlM2JjN2UsIDB4NGI3YjBmMzgsCi0JMHgxNTg0NmI0NywgMHhlMTMyZTU3NywgMHgxZDBkN2RjYiwgMHhlN2M4NThkYSwgMHhkMjNiMjVkOSwgMHhlNjc2ZGRlMSwKLQkweDZkM2QwMzc2LCAweGI1Yjk3MWQ2LCAweGQyMTZlNDE5LCAweDI5Y2M5OGU1LCAweDUwY2EzZTJmLCAweGM3MWUzOGFlLAotCTB4NTA5YzFlZjEsIDB4ZGNmZDg3OWEsIDB4OGI0OGFhM2YsIDB4OWVmYTFlZjUsIDB4MWY3ODg4YjEsIDB4OGYwY2RkZGUsCi0JMHhiZjVmMDA1OSwgMHg3ODQ0YjZmNCwgMHhmZDYzNDk3OCwgMHhhZTU5ZWExOSwgMHgwYmU5MzIyMywgMHgyYTk4NWFiZCwKLQkweDcyN2JkZmY0LCAweDdiMDVkYjg4LCAweDYyNmY3OGJiLCAweGM1YjdmMjE0LCAweGI4NTQ2YjNhLCAweDBjZWI1ZjFmLAotCTB4YmI5ZDZiZTAsIDB4OTdmNjhmNmYsIDB4OWVlMTlkNzcsIDB4YmU0MzNlZWYsIDB4NGJlNzA1ZjQsIDB4NWU2NzMzYjAsCi0JMHg4ZTY1YmU0MCwgMHg3NmZlZTFiNiwgMHhmNDA0YmIwOSwgMHhjZjk0NjBjOSwgMHg0NzQxN2E5NSwgMHhkZjMwNTdjMCwKLQkweDE0ZTZjNDE5LCAweGQ1ZjczZTQyLCAweDE3NDhiMWQ4LCAweDdjYWExZTM4LCAweDc5NDlkZjBhLCAweDVmODRiOWY1LAotCTB4NmRlMzdkNWIsIDB4ZWNmZmNjZjcsIDB4NzI1ZmM4MDUsIDB4OTAzYTVjNmIsIDB4YTc5ODk3NTMsIDB4NTc1YzRkZWIsCi0JMHhmYTg2ZDk5ZCwgMHgwZGE0OWE2MywgMHhlYTc4NGE1YSwgMHg5MzRjM2EyNiwgMHhjMGE1ZGFhYywgMHhmYWJjNzY1NywKLQkweDMwM2ZjMGUyLCAweDFiMTgxYmQ0LCAweGRhZGZkZjA1LCAweGU3N2M0YzE0LCAweGQ0ZWQ5ZDJkLCAweDIyZmY2YzUyLAotCTB4NTNjYWZmNmYsIDB4MDliMmZjYmYsIDB4NDYyYjI3ZDMsIDB4M2VmMTEyZmMsIDB4NWFlMDljM2UsIDB4MjFkMmZiZmMsCi0JMHg2MzQzNjc4OCwgMHhiZmEwMWI2MSwgMHg1ZTQ4NmY1ZCwgMHg5OTYzMTY1MywgMHhjNDU2MDczNSwgMHg2ZDg2N2NjMCwKLQkweDg0MGNkMGU5LCAweGI0OWQ3ODc0LCAweDIxYTFkMzEyLCAweGY4NjU4NzA1LCAweDk1YmM1ZWZlLCAweDIxYjIzMWU2LAotCTB4NzI0NThlNWUsIDB4ZWNmZWU4MTksIDB4YTg3ZmE0YTcsIDB4OWE4YzkyZjUsIDB4MzIwNzYzY2IsIDB4NDQzMjdlOWYsCi0JMHg3ZGMwNWNmMiwgMHg2MjcyMTk1OSwgMHhiNjNmYzkwNCwgMHhkYmQ5ZmE5MSwgMHg5OWUzZjUzMiwgMHg3Y2QwMGViNCwKLQkweDdhNDVkZTcwLCAweGI3MGJjOTFiLCAweGVjZjExNmFiLCAweDQ2Y2QyMzkyLCAweGViYTE3YWZhLCAweDRiZGZkYzc5LAotCTB4Y2ExYjQ4OGUsIDB4NTcxYTdkOGYsIDB4ZmY1ODlkZTgsIDB4ZjlkNjk2OTQsIDB4NTBiMWRkNDYsIDB4MzVmYmU0MWQsCi0JMHhiZTA5OThlYSwgMHgyMWVmMGM1NywgMHhkODMxNTliOSwgMHhjMWRjNzBjYSwgMHg4MDViZGQyZiwgMHhkYzZjYTlmMCwKLQkweDM4ZmQ0YjViLCAweGVhMDkzNjhkLCAweGQyYmRlYzk1LCAweDhkOTQ3MjhhLCAweGM0NjRiNjY3LCAweDdmOWU0NmFmLAotCTB4ODZkZDljNjIsIDB4ZjZhNGI1NzIsIDB4MmI2ZjllNWIsIDB4NTgyMTdjYTQsIDB4M2ZhYzVhMTMsIDB4Y2Y2OWViOGYsCi0JMHhkYWM1MzkwOSwgMHgxMTdmODhiMywgMHhmYjdkNWFjYSwgMHhjNjdjMDRmNSwgMHg1ZGUzOWJlZiwgMHgzZWNjOGIzMSwKLQkweGU5NzIwNmY5LCAweDhjNTlkMjAyLCAweDFiNmZiNzllLCAweGUwOGUzMzNiLCAweDQ5NzI4YjcyLCAweDNkMzllN2U5LAotCTB4NGU1MDk5NzMsIDB4YWNmY2I5ZWEsIDB4Zjg4MTdlMDcsIDB4MTdmZmZkMDEsIDB4ZDFjOGFmZjYsIDB4NmNjYTU5NTgsCi0JMHgzZWM3NzU4NCwgMHhiNGFkYjA2NywgMHhkMzM4ZmFkZSwgMHgzOTIxYWRmYiwgMHg1NTc1ZThhYSwgMHg4OTU4NWY0MiwKLQkweDM2ZmRhMDU1LCAweDgwNGU0M2IzLCAweGI5MGJlNjcxLCAweDBjZDZiNGNiLCAweDMxOWU0M2Q0LCAweGE0MDliNWRiLAotCTB4YTNkZTgxZDcsIDB4NGM2Njc5MjEsIDB4MDY1OGJkNDAsIDB4NGZkMTJmM2QsIDB4ZGY4NzMzY2YsIDB4MzY2YjNjOTIsCi0JMHhmZGIxNDNkYiwgMHgyZmVmZDZhZCwgMHgzMTU3ZjllNiwgMHg0NDRiNDI0ZiwgMHgzMWM4NTc0OCwgMHhmMjNkZTAzYiwKLQkweGExMjc3NjRlLCAweGViMDM1N2FhLCAweGU3OTA3MDFiLCAweDZkZmExMjEzLCAweDdhYmEwNTVhLCAweGZhOTU4MjUyLAotCTB4N2MxMWY4MDEsIDB4Y2ExOWU3NjEsIDB4MjQzY2E1MDksIDB4Yjg0MWUzOWIsIDB4NDdmYTQ4YzMsIDB4ZTFhMmM0NTQsCi0JMHg5YWYwZmM4YiwgMHgxMTIzYmQ2OSwgMHg1YmZmZWIwZSwgMHhiZmE4NGFmNiwgMHgxYmIzM2ZmZCwgMHhiZTcwMjVmMSwKLQkweDNmZGMwOTQ1LCAweGI5ODkwYmYxLCAweDk3NTc4ODM0LCAweDQ1YWY1NGY1LCAweDhmZWJiZWQ3LCAweDM0YTVhZWQwLAotCTB4ZWQ3Njg2YzMsIDB4ZDgyMWU0M2UsIDB4ZjQ5ZWE4NGYsIDB4ZTYxMDk2YTksIDB4OTk2OTdhNDIsIDB4N2Q0NmU5MWMsCi0JMHhhN2I0MmRlYywgMHg4ODY2MWU5MCwgMHg3YzQ2MjZmNiwgMHg0MGM2NjViYSwgMHgwZDAzODdlMiwgMHhmMzVjMTgwMCwKLQkweGFmNmYwMzRhLCAweDI2NDFmNDViLCAweDk2M2NiZmY2LCAweGM5NGFjN2U0LCAweGY0ODEzNmJkLCAweGNiZTQ5OTM1LAotCTB4NmE4ZmMxNDksIDB4NjUzM2JjYzIsIDB4OWNiOWFmMjgsIDB4OTM5YzcwYzIsIDB4NjE1Njk3NjAsIDB4YTIyMDkyYmQsCi0JMHg3YjMwOWFiYiwgMHg3ZGQ3ZjIwYywgMHhkZjEzMmRmZiwgMHg3OTBlMTlhYiwgMHhmMjI1ZjEzMywgMHhiNjRjZDRjNywKLQkweGZlNDE4NGM3LCAweDM1MWZiMTYxLCAweDY3ZmFlZWI1LCAweDY5YzliZmIxLCAweDMyODFhZWI0LCAweGUyZjU0NDViLAotCTB4ZTk5ZjNmNzksIDB4ZmRjNzNiNzgsIDB4ZGJkNDVhYzEsIDB4MjBjNTAyNDEsIDB4NGUyODVlZmMsIDB4MmEwN2M4NjYsCi0JMHg0NGNlYzYxMywgMHhmN2VjNTJiYywgMHgyOGRmODJlOSwgMHg2MzAzNjNmZCwgMHhmYzYzZWEyZSwgMHhmNWY5OGNkZiwKLQkweDA3YWJhNDI2LCAweDIwMWQ0YzRiLCAweDkyYzlkODM5LCAweGJmNjgyMTE1LCAweGJkOTBlODNlLCAweDFlNWJkNDA2LAotCTB4ZDM1ZmIzYzgsIDB4N2ZiMDEyMGIsIDB4YjNjMjRjZmIsIDB4ZjI3ZWM1NjIsIDB4YmRiODQzY2UsIDB4ZWI2NDYzZGQsCi0JMHg3ZDg0N2Y0OSwgMHhkZjFlYmNjZCwgMHgyMjYzM2MyYSwgMHg1MmM3ZWRmYywgMHhmMzk3YTcwMywgMHhkNzQ4MmYzOCwKLQkweDcxNGEzYjA3LCAweGUzNGQ1NWRlLCAweGNhZWRmYzIzLCAweDg3NTdmMzE5LCAweGYxOGJkZDEyLCAweDIzZGI1NjJlLAotCTB4NWVhMTI3NGUsIDB4MzJhOTQwNTAsIDB4YzE0ZTMyOWUsIDB4ZWE1ZGEzMTQsIDB4ODE4ZGY2OGYsIDB4NDIzOWFhZjQsCi0JMHg3ODMyYWQwZiwgMHg0ZGZkMjFhNywgMHhhMzFlMzkzNywgMHg2NDJlY2E3MSwgMHg3ZmQ4YmVhMSwgMHg5YzNmNWE0YSwKLQkweDMyZmJmNzdmLCAweDI1M2QzYzQzLCAweDMyMTRmNWY2LCAweDQ1YTdjNDZjLCAweDRjMmY4NDIxLCAweDhlYmYxZGU0LAotCTB4ZjQxY2ZkMjAsIDB4YzczN2MyMWEsIDB4ZGU1Mjg2ZWYsIDB4Y2NjN2I3YTEsIDB4MWM1Y2ZjNDcsIDB4Y2E3MWY4NGMsCi0JMHg3MjlmYmZjMiwgMHhjZDdlMTE4NiwgMHg4N2Y5NWRmYSwgMHhhYTdiZTAwYywgMHg3ODc4NGY1MCwgMHgzZjI2NDVhYSwKLQkweGNhOTZkZmNmLCAweGI5YzAzZDVlLCAweDY3ZDVjYTZiLCAweGQ3NWRhMDUzLCAweDM3NzJhZmIyLCAweGUyYmVkYTQzLAotCTB4M2Y5NDM4ZjMsIDB4NGM1NDU2YjMsIDB4Y2FiMzc2YzIsIDB4ZmM4ZmRkOTYsIDB4M2Q3NDQ2ZjksIDB4NDQxMDY5Y2IsCi0JMHgzNWI2ZTFjYywgMHhkNzExYmVjMSwgMHhkNWNhN2ZkOSwgMHgwM2NiZTQ3YywgMHhjZmNmOWRjYiwgMHgwOTgzZjI4NywKLQkweGNmODg2NzhlLCAweDExMmJkYmU4LCAweDdkNmY5NTFlLCAweDczZmE4NzExLCAweDdiMmJmMzc3LCAweDZkZmQyMTVhLAotCTB4ZmE3OWUzODgsIDB4ZjhkZWUyYmUsIDB4YjA5OWQ4ZDUsIDB4YjBiNTJhYmYsIDB4YjczZjgwNWYsIDB4YzQ1ZTNhMjcsCi0JMHhiY2UzNTVlZiwgMHhhMmVlZDgyOSwgMHhlMTFmMmRhZSwgMHg5YWRkOTZjNiwgMHhhNWExN2RkZSwgMHg3Njg0OWY3ZSwKLQkweDI1NGI1MDYwLCAweDBiM2JiMmE1LCAweDc5MjlkMWU3LCAweDg0NDRhNTQzLCAweGIwMGJlODIzLCAweDZmMTY4YmVlLAotCTB4YjllMjE4NjgsIDB4YjdjYmMzZDAsIDB4NTM0N2Q3YWIsIDB4MDc3ZTE0OGIsIDB4OTFlZTU3NjgsIDB4YjNkMjI2ZWQsCi0JMHg2ZjljN2FkZCwgMHgyODcyZmQ2MCwgMHg1OGI3N2FhNywgMHhiYzNjYzY1ZSwgMHhhOWU5YWMzYywgMHg3YjdlZjhiYiwKLQkweDE3OWZiMGJkLCAweGM1NmYyNDc2LCAweGY3YjRiZWZkLCAweDNiN2YxNDk1LCAweDdlYmQzMDM4LCAweDE3ZmQ3Y2JlLAotCTB4OGUwMGJmMTEsIDB4ODc0NGExMTcsIDB4NTA2MGQ1ZjgsIDB4M2I1ZDdmZDksIDB4ZDVmODU0NjIsIDB4YmRkNTIzYjUsCi0JMHg3NjJmOGZkZSwgMHg2Y2MxYmUwOSwgMHg4OGM5ZGM5ZSwgMHgyZTRmNzZmNywgMHg5ZjBhNTVlYSwgMHgxNjRmNDY2MCwKLQkweDllNjk2ZmQ5LCAweDE0NTdiNDJjLCAweDNkMGFjMzNlLCAweGY2ZWU1NDI5LCAweDdkZmQ2MGE0LCAweDdkOWFjZjY4LAotCTB4OGFlZDk2ZTMsIDB4ZmRjZjVkYWQsIDB4MzY0ZDJlOGUsIDB4YzU2ZTg3ZTYsIDB4Y2RlZmQyYmMsIDB4NTliYTk3ZDYsCi0JMHhiYmE3Y2FhZiwgMHgwOWQzZjlkNSwgMHg3M2I2OWZkYywgMHg4M2IxNWVhNywgMHgzMDQ3NjE2NSwgMHg1NjhmYjJhYiwKLQkweDVjMTFhZmFlLCAweGUwNTdhYWZlLCAweDJlNmM2OGYyLCAweGFmZTAwZGZhLCAweGU3Mzc5YTA0LCAweGRkYjkzYmUzLAotCTB4MjNiODZmYmMsIDB4NjJhOWY5MTYsIDB4ODMwYmVmOWYsIDB4NTFjYTA2N2MsIDB4YWYyNTZmM2UsIDB4ZGU3MDIxYzAsCi0JMHgyMGJhZmUyYiwgMHg5NjdiZmQxNiwgMHg0ZTUwOGQ0NCwgMHgzZjg4NTE2YywgMHgyZjljNGQyYiwgMHhiZTgxZDRhZCwKLQkweDQ5NzY4MTlhLCAweDVhZDNjOGM5LCAweGQxNmM1N2I0LCAweDFjMWY1YWM1LCAweDZlMWU2YzE2LCAweGI4NWQzYTQ0LAotCTB4MWZkMWI4NjUsIDB4MWY2ZTU2MWYsIDB4ZjMwYWQ4NzksIDB4NmI1ZGI4YmMsIDB4ZDRhZjI5YzMsIDB4N2Q0MjlmYmEsCi0JMHhkOTc2ZTU2YywgMHhkZGY0NjJlMywgMHgxN2ZhODc2OCwgMHg2MjhmMDdjZCwgMHhiODViMDViZCwgMHhiZjY5NDI5ZiwKLQkweDc0NGU3MzcwLCAweDg3M2NkZmIxLCAweDMzYzM1NzZlLCAweDBmY2VhM2QzLCAweDA3ZTc1MjZiLCAweGYzOTFhZWEyLAotCTB4ZGMzNzZmM2YsIDB4M2M4ZmNlYWIsIDB4ZmQ5ZmNlYWMsIDB4MTBkM2EzY2IsIDB4ZDc2NDRhZWQsIDB4ODdlYTMyNTMsCi0JMHg0NjFmZTc5ZiwgMHhkZjZlNzFiOSwgMHhkZmU0YTExYiwgMHgxNWI4YTJmOSwgMHg5Yjg1ZGVmNSwgMHg3ZDg2NzBkNSwKLQkweDcwMWY1MDkzLCAweDJlNDg5MzZkLCAweGU5MDNiYTk2LCAweDY1YmE2ZmEzLCAweGQ3ZTJiOTZjLCAweDkzYzdmMzRiLAotCTB4ZDU2YWU2MzIsIDB4YmY1ZjVmYzYsIDB4ZDlhNjc5OTMsIDB4NzRiNDhmZDEsIDB4MjNkM2M4ZjEsIDB4ZTFkZWZkN2QsCi0JMHg3YjQ3YTRkOSwgMHgxYmRjNzAyNywgMHhkYjMzMjlkMSwgMHgxNjVmNjhhZCwgMHhlZWRmZTI4ZCwgMHg3ZDk2M2E1YywKLQkweDZkODgyMjA1LCAweGY4OGY5NjM4LCAweDQ0ODRmNDU3LCAweGY1ZThiNmYyLCAweDJmOTE3N2Q0LCAweDMxOTllYzc3LAotCTB4MDU2OWQyODEsIDB4Y2ZjNTBmMDQsIDB4ZjI0NWIwYjIsIDB4MzJkZTQwODYsIDB4ZmNlZGUzOGEsIDB4YzE5YjkyY2QsCi0JMHgzMmFlZTdiYywgMHhjNTQxZmNhOCwgMHg1OGYzZDQxYiwgMHhiZWZlYTM1MCwgMHhkZmMwZTliMCwgMHhjNGJmZTgyNSwKLQkweGU1MWU5MmY4LCAweDQzMTZjOTU2LCAweGZkY2IxZjgwLCAweDY1ZTFlYTBlLCAweGQ5ZDkxOGU3LCAweDE4M2Y3NTY1LAotCTB4Y2Q3M2YyZmEsIDB4YmFlMWQ2NTcsIDB4YjhmYWUxOWIsIDB4MDdkM2U3OGEsIDB4ZjgwNjYzNGYsIDB4ODU3ZWZlZjgsCi0JMHhmZWExMTIzMywgMHgzMmI1MzU5ZCwgMHgzOTgyYWRjMiwgMHg5MjI0YjMxZSwgMHg4NjBkZTk5ZCwgMHg3ZDAwMmM3OSwKLQkweDkwNjlmNTA5LCAweDJiYWViNGI3LCAweDBkYjlmYjliLCAweDRjY2U1NGYxLCAweGI1ODU3ZTUwLCAweGJlMWNhMmU1LAotCTB4ZTM2MjE4ZDIsIDB4NWNiNmIwZmUsIDB4NDIxN2U0MGIsIDB4YzI1NmUxMWUsIDB4OWM3YzEyMzYsIDB4OGU2NTdmYzgsCi0JMHhmOWJmNzYyZiwgMHhlN2Y5M2VlMiwgMHg4ZmFlNDZkOSwgMHgwM2RlYjUzYiwgMHhkNjcyODcwOCwgMHhmZjcwZWQ0ZSwKLQkweDYxMzllYmZjLCAweDUxYzMyNzVkLCAweGNmNjgwOGRmLCAweGFmMGZlNDZjLCAweGRmNjllYjMyLCAweDMwN2U5YWFhLAotCTB4ZWM1NzdmZjgsIDB4NTEyZWM1MDAsIDB4NTlmZjZkZmMsIDB4ZTIxMDcwZjYsIDB4ZmVjOTZhZjUsIDB4ZDRjNjUxYmMsCi0JMHhmMTE1YTdiZCwgMHg3MjRjZDRiOCwgMHhjZTVhZTFmZSwgMHhkOWQwNmJjZiwgMHg2Y2Q3ZmQwMiwgMHhmMzdkMjc0YSwKLQkweDgyOWVjOTYxLCAweDRjOWI2NWViLCAweDFlODEwNzY0LCAweGRiM2FiZjE4LCAweDNlODFkN2E3LCAweDlmYTEzMmU4LAotCTB4YmRjODM0YjgsIDB4ZTcwZmJmMTUsIDB4OGNjZDc5ZjYsIDB4ZGUxN2QyMTQsIDB4ZTQ1ZTNjOTIsIDB4Mzg2N2FlYzMsCi0JMHhlNjRjZDRiZCwgMHg2NGYzNTNmOCwgMHgwY2ZmN2QwYywgMHhmYTgzMWFhNywgMHg2YTRiZDcyMiwgMHgzZDcyYTUzNiwKLQkweDYwZjNlNjU2LCAweGZlMjEwYmJmLCAweGU2MmYxMzU4LCAweGYzNGFjMDM1LCAweGM5ZjVmNDUyLCAweDg5NzNjNzE2LAotCTB4NWUyY2ViN2UsIDB4ZjQyNDdhMDEsIDB4OTk1YmZjNWYsIDB4OTU4MjlmYTEsIDB4M2M5MmRjNDQsIDB4YWE3MjE3YWYsCi0JMHg4ZGM5OTM2NywgMHg1MmQzZWVmZSwgMHgzZjllMmI2MSwgMHgxM2RmYjM1YywgMHgxZGNmZGYzOSwgMHhlYTI2ZGY2YiwKLQkweDU4YmM1ZjkxLCAweDRmZmQ3OTMzLCAweDM1NjdiYzcxLCAweDdlZjE5NWQ2LCAweDUzZGJiN2YwLCAweGJkM2ZjZjUwLAotCTB4ZjcwMjM0YzksIDB4Y2U3MGQ0ZTksIDB4NzJjNzczYjcsIDB4MjVkODAxYmYsIDB4ZWU5MGFkZjYsIDB4ZmNhOGQ0NDksCi0JMHhiOTEyN2JhYiwgMHhkMTNmYjA5ZCwgMHgzY2U5ZTk0YSwgMHhjOTBjNDdlZSwgMHgwY2ZmMjQyZSwgMHhmMWYxMTVlYywKLQkweDE3ZWM3NWMwLCAweDg1ZjU4YWVkLCAweGM3ZDI3ZTQ3LCAweGIwZjgxNDdjLCAweDRlN2Y3YzcxLCAweDVjOTEyMjNmLAotCTB4NThhNGY1ODQsIDB4N2JmYjlmMjAsIDB4NGU3NWY5MTMsIDB4ZWNhMmY5MGIsIDB4MGU1MWUwMGIsIDB4YmZjMTViYzksCi0JMHg0OWZjNDU5ZSwgMHgyN2YwMTRjNCwgMHg1MWZjMmZiYiwgMHg2MGMzYzdlMywgMHg3ZjEwOThlZiwgMHgxZjY4M2YwMCwKLQkweDMyN2FmYzE1LCAweGYwMTFmNjkzLCAweGU3YTFmMDg3LCAweGYwMGRkMzQ5LCAweDI4NWY2ZDQ3LCAweGU1YTlhZGViLAotCTB4NWRhMDQ3ZjYsIDB4MzI3MGY4MDEsIDB4YTBiY2VmZDEsIDB4MDQyN2FjMjYsIDB4M2MxNGI3Y2YsIDB4OGU3NzVhNjAsCi0JMHgyMDVhMzlmZiwgMHhlNmM5ZTQxZSwgMHg0YmVmZTQzNCwgMHhlYTFiMjBhNCwgMHg3Zjg0NGJkZCwgMHg0NjdjYzk3YiwKLQkweDhiNjU4ZGYzLCAweDY4ZDdhNDI0LCAweDBlYzg5NWU2LCAweGVjMjY2ZDY2LCAweDAwM2QyN2VmLCAweGZjM2EzZjczLAotCTB4ZjMyMzU1ZTksIDB4NTg2MzdiOTcsIDB4OGY3ZjJhOTgsIDB4M2Y1NTQ2MzEsIDB4ZmFhZjEyY2YsIDB4YmE3NDZmN2UsCi0JMHhlYjc4ZmJlYSwgMHg2MjdlNTU3MCwgMHhmYWFhMWRkYSwgMHhhOGM2ZDlmNywgMHgzNTFiM2ZmMiwgMHhiMjdmNTU1ZSwKLQkweDZmMmFiMjdkLCAweGNlMmQxNjY3LCAweDYwYmFhNWJmLCAweDZmMWZkYTI0LCAweDVlOTIxNzU3LCAweGQxOTcwODEwLAotCTB4NWJhZjgzODYsIDB4ZWE0NjIwNmQsIDB4MDBiNDUzYjQsIDB4MGVmZGQxYmYsIDB4N2M4Nzg5MmUsIDB4MTRkMzNhZmYsCi0JMHhlOGM3ZTAyZCwgMHhlMjU3ODNkOCwgMHhkNWEyNjAyZCwgMHg0M2VmZjEwNSwgMHg4MDQ5NWUwZiwgMHgzMDVkNzQ3YywKLQkweGM4YzVkZmNmLCAweDY3NTgxZjFlLCAweDkzMzJlMjllLCAweDA5MzYzMGJmLCAweGVhZWQzY2UwLCAweGY2Njg0M2EyLAotCTB4Y2E3Y2IyN2QsIDB4NzVhNDc4ZmMsIDB4M2ZmMzMyNjcsIDB4NzU2NmQ4YjcsIDB4ZTUzZDYxODQsIDB4NTQ3ZjUyYmIsCi0JMHhlZmI1MjE1MiwgMHhmY2Y5Y2NiZSwgMHgzOTNmYjgyNywgMHg3NjBhN2FmZiwgMHhiMThmYzkxNywgMHhhYzZjMzQxYywKLQkweDViZTc0Y2QxLCAweDc4YmJhOGNjLCAweDdjMGNhZmNkLCAweDg2MzNiMjUzLCAweDZhOTZiOWZlLCAweGMyMmQ2N2Q4LAotCTB4YjdhOTQ4Y2IsIDB4YzFlOTQyZGEsIDB4ZGY0YTY4ZWEsIDB4NjJiMmI2YWQsIDB4NzU2YjY3ODAsIDB4YWI4N2E1MWEsCi0JMHhhNDdlNTQ2ZCwgMHgxZmE1MTQ3YSwgMHgzZDI5ZGI1NiwgMHg2OTQwNWQ1YSwgMHhhNTIxNzU1YiwgMHhiMzRmMjgxMiwKLQkweGIzNmM2ZjkwLCAweDNjMjFkNWFkLCAweDMzYjBkYTVjLCAweGQ5ZmUzZTMwLCAweGUxZjJkZjE3LCAweDUxOWQ5NmFkLAotCTB4ZmYyYTE1ZjYsIDB4NGRjZjY0Y2EsIDB4YjIwZDc1YTIsIDB4OTQ1YjlmOTAsIDB4YTlmZmRhMWYsIDB4ZThkMWY5MTUsCi0JMHhmNWUxMjM2YywgMHhkNTliNzM2OCwgMHg0OGYzY2Q5OCwgMHg5OTk3NzU2NywgMHhlYmNhMTM1NywgMHhmNWViZmQ2OSwKLQkweGZlNDcwY2Y3LCAweGE2NjlkYTMwLCAweDUwYmQ0OTdhLCAweGJkZWIwYjJmLCAweGYyYzVhMzE3LCAweGNhMWI3YTQ1LAotCTB4M2YwNGU3Y2IsIDB4OTAxY2QxMGUsIDB4NWU5MDljNzEsIDB4YzgzNDM2N2UsIDB4MTQ0ZWY5YzAsIDB4NWRmODVmYTgsCi0JMHhmNWQ1YTNmMSwgMHg4NzA2ZjFmMiwgMHg5ZGYzYTIyZiwgMHhjNGNkYjNjMSwgMHgxNWI5MTQ3ZiwgMHhjMThkZTExYiwKLQkweGQxMmVjNWY5LCAweGU2ODg3OTUzLCAweDJlZmQxNWI4LCAweDA5ZGVkNTVkLCAweDg0ZTNhZjg4LCAweDY3YTcxZjljLAotCTB4YTYwZjM4NjksIDB4OTRmOTIyMDksIDB4MWFkZjdmMjcsIDB4Y2RjNWY5MGIsIDB4Mzk4YzcwZDIsIDB4ZGMyODY3MTgsCi0JMHg5NmExZjY0MiwgMHg2ZmViMzFkMywgMHhiNmI4ZmFlMiwgMHhhODE1ZjRhZCwgMHhkNjMyM2M3NywgMHgxNWExMWViNiwKLQkweDgxMjU4ZmJkLCAweDU1NTc5NTllLCAweGYyNzI4MTkwLCAweGY0NDhkYjM4LCAweDMxZDQzZjNkLCAweDZhNmRmMTBmLAotCTB4NDZiZGQwMDYsIDB4MTNmNDA5MjAsIDB4ZmM0YzEwNWQsIDB4NmE3ZjdiYjMsIDB4NTNjZGVhMGUsIDB4MGNiZGQ2MGMsCi0JMHgyOTJjYTJlOCwgMHg0YTdlZjA4NywgMHg2NDhlNmIzZiwgMHg0NDVkZmNjMSwgMHhhY2EyNTMyNywgMHg5ZTFiMjU3YiwKLQkweDE5NGNlNDllLCAweDcxYmZjNzc3LCAweGQyNDkzZDJlLCAweDdjYTljN2ZhLCAweGMzMWUzOTIyLCAweDVjMTQ1NWY5LAotCTB4ZjVmOWYzZDIsIDB4ZWJmODllOTAsIDB4YjNmMTJiMjQsIDB4YzkxOTA3MDEsIDB4MjFmMTllZGYsIDB4N2ZkMTVmYzQsCi0JMHg2MWY5MThiNSwgMHhlYjA3MzU4NiwgMHg0MjdhZTljNSwgMHhmYmEwZWUzMSwgMHg1ZGM1MmQ3YiwgMHgwN2QwY2Q0MCwKLQkweDJmMWVmY2ZjLCAweDhjNzhmMGI1LCAweDlhMWJiYzQwLCAweDU1NGRlNWNjLCAweGFhMDM4ZjEyLCAweDI5MWEzNjhjLAotCTB4Y2Y5Y2I5NmQsIDB4MzBhMjRlMjgsIDB4ZDAzNmVkMDksIDB4NTc5NGZiMWUsIDB4ZGNiOTkzODMsIDB4ZTdhMzVmOGIsCi0JMHg0OTY0M2FmZSwgMHgxMDdiNjUzMCwgMHg4YzJlZjI1MywgMHgyYzdkYTkwNywgMHhlY2VlNTE0OCwgMHhjN2E2NGUwMCwKLQkweGU4N2Y5NDc2LCAweDU0OTJlM2Y3LCAweGRmNThlZGY1LCAweDExZDk5ZGY3LCAweDlkZmI0YTljLCAweGJmN2U5Mzc1LAotCTB4NDNjNjJiNGEsIDB4ZGNjMDU5N2MsIDB4N2U0MDg0YjgsIDB4Yjg3MjQ1ZmUsIDB4ZmI0MTFlNzIsIDB4MTM3ZjYyZmMsCi0JMHgzMjQ5OTNkOSwgMHg3MWUwMzdlMCwgMHhmYzg3YjA2YywgMHg4ZTI2NzU3ZiwgMHg5ZTFhNDllZiwgMHg3N2Y4NjlkNiwKLQkweDkzZTgxMDdkLCAweDc5MGMxZjkwLCAweDNlZmE3NzNjLCAweDFlNDllMWQ5LCAweDA1OTllZDQwLCAweGE4N2JjYmRiLAotCTB4ZDBmMzBjN2QsIDB4MjhmN2NhNzgsIDB4OWQ0MzVlZjQsIDB4MzA0ZjIwNDEsIDB4ZmE2YjJkMWQsIDB4ZTQ5OGRiODQsCi0JMHg3ZDIxMWYzMSwgMHhmOTFmMDE3NywgMHg3NzVmOGZkYSwgMHhmNTJlODcwNSwgMHg2YzRhYTdkZiwgMHgzNzZmZjY2ZiwKLQkweGVkMjlkYTk2LCAweGQ4NmE5NjJiLCAweGZmYzQxMWQ3LCAweDkyMmE1ZjA4LCAweGI3Mzc3NjM0LCAweDUwOTVkZjM3LAotCTB4N2E2ZDYwNGYsIDB4YmI0YTZiOTQsIDB4YmVlZmMwMTMsIDB4MDVmZjc4MDYsIDB4MjdhNjFmZjgsIDB4ZjhlMWVmODEsCi0JMHhjM2RmMDE5ZiwgMHhmN2MwNmZmNCwgMHhmMDE0ZmNiMCwgMHg4MWRiNGMzZCwgMHg5N2Y5NjFlZiwgMHg5ZDMwZjdjMCwKLQkweDFiMjQzMzM2LCAweDY5YWFhNGU5LCAweDg1NWFmYjBjLCAweGZmODczYWY3LCAweDMxODlkZGY5LCAweGQ5Y2JlMzdkLAotCTB4OWVkNzZlMjQsIDB4ZmJmYmVmODgsIDB4N2M3MTI3N2YsIDB4ZGYzNzcxM2EsIDB4ZDc5MDZlYjcsIDB4ZmUwMTlmYTgsCi0JMHhkZjg0YjJhZCwgMHg4Nzc3NmU1OCwgMHhlZjllNzNmMCwgMHhkNzdlYjhkMiwgMHg1ZmYzYzMxZCwgMHgzZmE4ZTkyNiwKLQkweGM2NmQ4NmJiLCAweGU5YTVkZmY2LCAweGU2NDllZjI5LCAweGY4NWJhMzcyLCAweGE4ZmYwMTJmLCAweGMzMWU2NTdmLAotCTB4N2FhYTRhODYsIDB4ODE0ZDI0ZWUsIDB4ZGVmOThmYmIsIDB4MjNjN2NjOWQsIDB4MWMzZDQ0ZmMsIDB4MGZkZTMxZjEsCi0JMHg4NGFkMmIzZiwgMHhmMTc4ODE5ZiwgMHgyNDliYTA4NSwgMHg1OGJiYzcwMywgMHgyN2M4ZjFlNCwgMHhiZTc0NGNhMywKLQkweGUzYjVmMzBhLCAweGM0OWQ3NDc5LCAweGZjM2FmMWYxLCAweGU3N2I3MGQ0LCAweDdlODRmYzNhLCAweGU3ODA0ZTA4LAotCTB4MDkzZmE0MTIsIDB4MzUyNTFmYzAsIDB4NDViNzc5ODgsIDB4ZTA4MmZjODYsIDB4YTBiM2EyZGMsIDB4MzIyN2VmZmYsCi0JMHg2YmRiMTYwMCwgMHg4NGNlOGY3YSwgMHgxMGM4ZDhmMiwgMHhlNDFkOWUyYiwgMHhkNDVlNmUzZCwgMHhlYmI4ZmYxNywKLQkweDM1ZmY1ZGRmLCAweGZmYWY1NDdhLCAweDczOGI3NWJhLCAweDM3NWQ1YjkzLCAweDk3ZTQxM2YxLCAweGYwN2QzZjg4LAotCTB4MWZjODIxODcsIDB4MzNmODdjNzIsIDB4ODQ5ZWQ5MjYsIDB4MjY0Yjc0ZmQsIDB4YmI4MWZhMmQsIDB4MDIyZjFjNGQsCi0JMHgxYTVkZmJkNywgMHgzZjA1NWZjNywgMHgxOGZjNDBiZSwgMHhiYWMzZmQ4MCwgMHhiOWViN2QxMiwgMHg4MGEwZmYzNiwKLQkweDE0NjQyZGY1LCAweDhmYjgxMTBmLCAweDViZjE1ZjBhLCAweDM5YzkxZGQ3LCAweDI2MDFiODNlLCAweDA0MWVmYzkyLAotCTB4NzFmZDFiZjIsIDB4YzcwYjY0OWUsIDB4Njc2NzAxZjMsIDB4ODFmOTQyNmYsIDB4ZmZlYTAyNzIsIDB4ZmFmZGMzNDEsCi0JMHg1NmJlZGYwYSwgMHgyNjczYzkyZSwgMHgzOWY4YTg2NywgMHg2N2IwN2I0MywgMHhjYmU4ODFiZiwgMHhhZjI1NjFhYiwKLQkweDQzODI1ZGExLCAweDhmNTlkOWY5LCAweGY2ZjVmMzI1LCAweGEwZDY0ZjRlLCAweDlkZjVkNGRlLCAweDI3ZjE0NWQ5LAotCTB4YTE0ZTdiMDMsIDB4NTliNWQ2N2QsIDB4NmQzZGI4YzcsIDB4M2M4MTI0OWYsIDB4MDU3ZThmOWIsIDB4OGRjNWZhMmIsCi0JMHhhMTdiNmU3NCwgMHhkNDNkOTkxYSwgMHg4NTNlNWNmMywgMHhmM2Q1NjE3NiwgMHhlODAyMzMzMiwgMHg5ZGJmZTdlNCwKLQkweDYwYjJmODg2LCAweDdhODJjZWJmLCAweDRmY2RjYWM3LCAweDNiN2M0NjFmLCAweDUxNTkyOGQzLCAweGMyMzU3N2RlLAotCTB4NDU3ZWExYjIsIDB4MDRkYjg4NGQsIDB4OGYyMWYzZjUsIDB4ZjU5YTE3ZjUsIDB4OGYxZjJiNmUsIDB4MThhNzRjZjQsCi0JMHg2NTUzNmJlZiwgMHhlZmE1ZmEwMiwgMHg3MDQ3NWU3OSwgMHhjNzgzYjA1ZSwgMHg3OWIzYmMzMSwgMHg5ZjYzOWQwOSwKLQkweDBhMmM0YjcxLCAweGNiY2JlNWRhLCAweDlmZDA2MzVhLCAweDMzNjRhMmY4LCAweDM5YTczYjQwLCAweGVmZGEzY2ZmLAotCTB4Y2Q5ODNiNjUsIDB4M2Q4YWZlOGIsIDB4YjJiZTc0MjEsIDB4N2YxZDQ2YTAsIDB4YTRkZWUyNTAsIDB4NjRhMjdkNDcsCi0JMHhhY2JjYmE4YiwgMHg5ZDg3OWQ0ZSwgMHg2Y2ViN2UyMSwgMHgzYzMzYzc1MCwgMHgxNWUyMmM5MiwgMHhmMjcwZDlkMiwKLQkweDkzODRkNjMzLCAweGQzZjBhMDFlLCAweGY2MzFkOTFiLCAweDMyNGY5Y2M1LCAweGZhMjQ0ZGY2LCAweGRmZmRlNTQ5LAotCTB4ZTY2OTdkYzYsIDB4ZGYyMmM5ZjksIDB4ZGY0YmY5MDEsIDB4ZTA1MTdkZjIsIDB4YmY5Y2E5NTIsIDB4NGY2Y2IwYzcsCi0JMHg5OWRmYzYzNiwgMHg1NWM3NjgyYywgMHhjYTE1N2YzNiwgMHhhODJjZWUzMCwgMHhjZmEyN2VmZCwgMHg1MzhhNjUzNywKLQkweGJiMjRkNzVhLCAweDJkMTViZTEwLCAweDNlMzE5N2E2LCAweDMxZWY3MmFmLCAweGUxMDQzNWJkLCAweDAxZTkwOGZlLAotCTB4MWFkNzMyZjcsIDB4MWFiY2JmYjQsIDB4M2MyMzZiMGQsIDB4MTVmZjIzNmEsIDB4MjAyY2Y3YjMsIDB4YzliMzcwYmYsCi0JMHg2ZjNkZTc0MiwgMHgxMzNhZGE3ZSwgMHg2NjI1N2JmMywgMHhkYzFjN2RjMiwgMHhlMGIyNzg0ZSwgMHg3NWNlOTk3OSwKLQkweGI5M2U2YTE5LCAweDcxOTEzYzNlLCAweDNkOWY3MTVmLCAweDE2YmY2OGZkLCAweDNlZTNiZWUyLCAweDNlZTNiZWMzLAotCTB4ZDg5ZmI4Y2IsIDB4ZTZlZjQ0M2UsIDB4Y2NlZGMyNzgsIDB4ZmVmOWRiMzMsIDB4MmY5ZWZiMmEsIDB4ZGY5M2QwNmYsCi0JMHhmM2VmOTZiOCwgMHgzZmQ3Y2YzZCwgMHhhMDc4NDQxYiwgMHg2ODBmMDI2MywgMHhlMTZjY2ZkZiwgMHhiZmRmYWVmYiwKLQkweGYxMTAzZjVhLCAweDBmMDAzNmI3LCAweGYwZDcwZDlhLCAweDFkNzdlNzAwLCAweDdmZWMwNDFlLCAweDA3Y2JmMGE5LAotCTB4ZmVlMDQxZTIsIDB4NDRmODJiZGYsIDB4MTBmYTNjOWUsIDB4ZmUyY2Q5YzYsIDB4ZjE1NzFmMDUsIDB4ZWYwZWNkNzMsCi0JMHhhYTA0NzhhYywgMHgxMWZmMWE5YywgMHgzOTJjZGQ5YSwgMHgwNDk2MzVmYSwgMHhiNDIxYmQ3MiwgMHhjMGY5MDliMCwKLQkweDg2YmIwOWYxLCAweGZjMDk5YzUzLCAweDljNTI0NjMzLCAweGRkZWZjMTFiLCAweDA1M2RmZDVmLCAweDdlM2JiZmU5LAotCTB4ZTIzNzk2ZjIsIDB4NzAzYWZmNjksIDB4YzE2MWRkMWQsIDB4OTZlZTdlNWMsIDB4MWI5NTEyZGMsIDB4NTM4MDA2YmMsCi0JMHhhNDUxZjAxZSwgMHg4MWI2ZjY0MywgMHgwN2JhOTFjZSwgMHgzMWU4ZjQzYywgMHg2OTNmNzdjOCwgMHg0OGY2ZTFiNiwKLQkweDk1MWY2ZTc2LCAweDEyNzdiY2I3LCAweDMxYWM4NmZkLCAweDlmYjJhZWNmLCAweDhlNTM3ZDg0LCAweDZmN2UxNWY2LAotCTB4ZWZjYWZiMDAsIDB4N2NiMjRlM2MsIDB4NGYzZWVkNDQsIDB4Y2FmNWEwNGUsIDB4YjI2NmRiMWEsIDB4OTU5OGVhODMsCi0JMHhlM2FmNjNjZSwgMHhiZGY4OGNmNywgMHhhMWJhMDdlMiwgMHhmN2MwMTYzZSwgMHhlYjllZmM3ZCwgMHgyODM1Y2M2MSwKLQkweGIxNGJlOTBjLCAweGI0N2UxNGIzLCAweDBmNGJmODUwLCAweDFiNDQ3NjNkLCAweDAzYWNlYjgxLCAweGI1YmVlM2I4LAotCTB4OGZlYTFmMDAsIDB4ZGI5ZDNkN2UsIDB4OGRkMWY5MmEsIDB4ZjExNjdmYTgsIDB4Y2U3OGUwMGEsIDB4NDY5ZjY4YjUsCi0JMHhkMzMyZmM0NiwgMHgwZjAyOWQ3YywgMHg2MDVmMTEyYiwgMHgwN2Q5NjU5ZCwgMHg3NzVmNTE0MiwgMHg2Y2UxZmUwYSwKLQkweDQ5N2YyMTBlLCAweDhmOThkYjE5LCAweGUzMDY1NWY4LCAweDliYzBmYjc5LCAweDQ4N2JlZGIyLCAweGRlMTliZmNmLAotCTB4NjU1YmZhMjgsIDB4M2ZkZWJhYTMsIDB4MjUwYzlmOTAsIDB4MDNmOTkyN2UsIDB4ZmM2OWRmZTAsIDB4MzdjN2M3M2IsCi0JMHg3ZThjZTRmMiwgMHhjYmRjMDcxOCwgMHg2ZTkwZmRhYywgMHg1MmQ3MjQ2ZiwgMHhmYjI5MDMzNywgMHgzNmVlOWJmNSwKLQkweGNmY2FhZDMyLCAweDMzZTU1MTZmLCAweGZhYWFkMTNkLCAweGFhYWM5YWMzLCAweDY5YmRjM2VmLCAweDBmMjNlZmFhLAotCTB4OWNmOTU0ZGIsIDB4ZmFhYTUxYjYsIDB4YWJiNDlmYjcsIDB4MTdiNDc3ZjIsIDB4NzVkZmVhYTgsIDB4ZWY5NTUwYWUsCi0JMHhmY2Y1ODBjZCwgMHhiZGQ3MzljOCwgMHhmZWFhOTJkMSwgMHhkNTQ5YWI3OCwgMHgwNDJhNjgzZiwgMHg2MTY5ODk5ZiwKLQkweDMzNWVmMmFhLCAweGZhOGRkMzg3LCAweGVlYTZjZmJkLCAweDdmNmZiMTU3LCAweGZmZGQ0YTM2LCAweGRmYmFiYjY0LAotCTB4NmQ4N2RkNWIsIDB4YTBiNTI3MjAsIDB4YjkwNzZmNmYsIDB4ZDA0ZWU5ODksIDB4NmZhMGI1Y2IsIDB4OGU1ZTgwMzcsCi0JMHgyZjQxNTdmOSwgMHg3YTAzZDRjNywgMHgwNmJmOTYzOSwgMHgxYmU2Mzk3YSwgMHhmY2M3MmY0MSwgMHgzMDIzYjAzZSwKLQkweDQwNWQ1NGRmLCAweDg1ZDU5YmU5LCAweDc4MzM3ZTU0LCAweDBmNzE4YWI1LCAweDg4OGY3MThiLCAweGM0ZGIxOTcxLAotCTB4ZTA0ZGZlZTUsIDB4N2Y2OGExZjIsIDB4YzM2ZmI0NTQsIDB4M2MzZTQ5ZjYsIDB4ZDY0ODI4YWMsIDB4MWQzYTA1NWMsCi0JMHg4ZjVlN2UxMywgMHhjNWY2NWFlNywgMHhkNzY4ZjllZCwgMHhiMzJmYmNmNywgMHhjYzI3NDBhZCwgMHhkZDVjM2VlMSwKLQkweDA0NTJlNTFmLCAweGVjMmZhZjNmLCAweDBlZmQwMGY5LCAweDJkMTM3Yjk1LCAweGFlYjA2ZTc4LCAweGY4YTNlM2U5LAotCTB4YjY1MWFiYmQsIDB4NmMxZGRkMjIsIDB4ZmIxNDJhZmEsIDB4MTQxNTc4YjksIDB4OWU0MjkxYmMsIDB4NzdmOWRlNDEsCi0JMHhmMGY1Zjk0NiwgMHhjN2Q1ZTMxZCwgMHg5NjQ1MDFlZiwgMHhlNDg3OTRlNCwgMHgyNTI0YzVkNCwgMHgwZTdiYTZlZiwKLQkweGY0N2IwZDg1LCAweGI2ZmU3NGVkLCAweGVmYmZiZTg3LCAweDZmYmZhOWQxLCAweGI3N2Q1NWFmLCAweGY3M2M3ZDYwLAotCTB4Y2VjOWJhZDUsIDB4ZjRhNGQwYmUsIDB4Y2VmYWE1ZTcsIDB4ZmE4ZWM5MjQsIDB4ZWZlZDg1ZjEsIDB4YjczOGMxYWMsCi0JMHgxMTQ1M2Q4YSwgMHhkZTU2N2U3OCwgMHhkZTcyMmM3MCwgMHhkMmZmYzA4ZiwgMHhjODE5NWRiZSwgMHhhMTlhMmJkNywKLQkweGJmYWZiMzNmLCAweGM4OWQ2NjhhLCAweDkzM2JmOWYzLCAweDIzODdlNGY2LCAweDE4OTA2ZWRmLCAweDZjOGI5MjhhLAotCTB4OTUwZGM1MjMsIDB4OTEzYmQ1MzcsIDB4Y2RhNzk1MmYsIDB4NGUzOWUxZDQsIDB4ZjYxNjQ3YjcsIDB4NzNjMzhmM2YsCi0JMHhjN2Q3MTg1YSwgMHhlNzQyNTczYywgMHhmMjdmYmY0MSwgMHhlMzFmYmExYywgMHhkZTViYmE2OSwgMHhiYjcxYzUwOSwKLQkweGRmODY5ZWYxLCAweGMyOTEzZWZlLCAweDUyMjdkYWY1LCAweDhiODdiZGY4LCAweDYyODRlZjhkLCAweGNmM2FjNWZjLAotCTB4NWFlZTFjM2IsIDB4YTBmZmFkMmYsIDB4NGE0Mzc3YzgsIDB4Njk5MjZlZjAsIDB4MzU1N2E1ZmQsIDB4N2Y0YTBmYjQsCi0JMHhkNGM4YTZjZiwgMHhlNGE2ZjhjZiwgMHg3MWQ3NWMxMCwgMHg4ZGNmMWYwZiwgMHhjZTMwMDVjMSwgMHg2MmEyYTRmOCwKLQkweGU4OTFmZjljLCAweGU5MzIzOTE5LCAweGRjNmZkYzc1LCAweDNkNjI2NDNkLCAweDhlNzgxM2VhLCAweGY1ZGQ5N2RlLAotCTB4NTViN2U4OWEsIDB4OWZiZGY3YzQsIDB4ZjIyYjdhZjQsIDB4MTEwNTIzZGIsIDB4ODgwNjQ5YzMsIDB4Yjg1MzNiN2EsCi0JMHg3N2FmOTE5ZCwgMHgzODljYTEyNCwgMHgxZjkyYjY2ZSwgMHg2MjQxNDU3OSwgMHg0MWVmZWUwOCwgMHhlMGJjYjE0YywKLQkweDk3Y2JmMjY1LCAweDhlZjFmMjM1LCAweDExNDJkYTViLCAweDhlMzc4ZWVmLCAweDUxNmY1MTk0LCAweDcxYzNhYmZhLAotCTB4NmZhY2Y4ZmQsIDB4NGZiNDVjZGYsIDB4MzM1YWVlMjUsIDB4M2ZkYmUzZjYsIDB4YjE0ZWVlNWUsIDB4ZWUyM2JiNTAsCi0JMHgzZjUwZDM2MywgMHg0YzE2OWUzYSwgMHg5ZWFiNDVmYSwgMHgzNzk3N2I5ZiwgMHg3OGY2ZmQ3MCwgMHhlY2FkNmM0YiwKLQkweDE2ZTE1ZTc3LCAweGE2OWRkMWZiLCAweDZhZWQ3ZGExLCAweDMzN2E4OWQyLCAweDllYWE5OWViLCAweDlkNTdlZjhlLAotCTB4NzcxNjNlN2EsIDB4NTdhODUzYzcsIDB4ZTk5NDVmM2IsIDB4Yjc1MzhlZWUsIDB4N2ZkNzEyMjgsIDB4N2U3YThiNzYsCi0JMHg0ZWNlMDIyNSwgMHhkMjMyMzc5ZCwgMHhjZDlkNWYwZiwgMHg0Y2M2ZThkNywgMHhkMGFjZGU3OCwgMHg1M2Y2OTU4OSwKLQkweDY5ZTNjN2Q5LCAweDFlM2IyZjVjLCAweDM5MGJlZmNkLCAweDVlMTNkNGY3LCAweDViN2RlNGZiLCAweGIxMWRlYTNjLAotCTB4NGVlM2MxZmYsIDB4MmFkNzY2NmYsIDB4NWQ5ZjgwZmEsIDB4ZDNhZWQwYzQsIDB4NjhlNjI0MTUsIDB4M2Y3MjdjMTIsCi0JMHg3OWZlYzUyYiwgMHg5N2I0MDBjYSwgMHgwNDBlYzkwYSwgMHgzZjIxMGY2NCwgMHhmZGMzZWEwOCwgMHhlZGZlZmY5MCwKLQkweGI3YjcxYzU5LCAweGQ0NDBmNDExLCAweDEzNGQ4YzgzLCAweGFmNGFmZWYwLCAweGU2MDQwODBkLCAweGU3NDViYmRiLAotCTB4MTk4YmY2MTYsIDB4NDIwNWQyZjUsIDB4NzU2YjNkMmYsIDB4YmU3OGNhZTQsIDB4ZWI0MzVjYjgsIDB4ODFkZDgyNzIsCi0JMHg4MjVkOGE3MSwgMHgxM2RhNWRkZiwgMHgwN2QyMzNmZiwgMHhiNDE2Y2IwZSwgMHg3MGYxZWU2NywgMHhjMGQ5ZDYzZCwKLQkweDRmNGFkMmY1LCAweGEzNDZlZmZjLCAweGIzYTBkZGRlLCAweDUzNWEwNTU5LCAweDJmZDBhYzVjLCAweGY1YmQwOGNlLAotCTB4M2QxZWYyY2MsIDB4MjVmYjI3ZDksIDB4NWZmNDM0ZjYsIDB4Y2U4OWI0ZDIsIDB4N2U4NDJiYWIsIDB4OTAzNzIxNTEsCi0JMHhiMzcwYjA5ZSwgMHhiZDAwMmY1YSwgMHhkZjJmOTU0NSwgMHgwODM3YTgxZSwgMHg1ZDQ3OTA3ZiwgMHg3Mjc3ZDhhZSwKLQkweDIxZmQzNWVhLCAweGQwMTFlZDFkLCAweDBlOTBhMzRiLCAweGRjYWQ1M2EyLCAweDkzZWMyNjZmLCAweDI4YjY5OTI1LAotCTB4NWE3NWY3YTQsIDB4NGZjNTA0ZWIsIDB4ZGFhYWYwODAsIDB4Y2UyOTdhZmYsIDB4YjIwY2VkZGIsIDB4ZjRiMGJkOTEsCi0JMHhmNzZiODI0ZCwgMHhlOTBlZGMzNywgMHg4ZjA0NjY4ZSwgMHhkYmUxYzY2ZSwgMHhiYmYxYzRkZCwgMHg4ZGI5Mjc0YSwKLQkweDk1ZDAxZWQ4LCAweGVlNGEzM2ZhLCAweGJhODdhOGU1LCAweDJmODk0MzdhLCAweGY0ODA1NjMxLCAweGI3MDY3OGIwLAotCTB4MGJlOGVkMzcsIDB4ODUwYmY0ODUsIDB4MjlmOTE0MGUsIDB4NWJiZmJhNzEsIDB4Zjk4NzJlZGIsIDB4NTRlNDg3ZjEsCi0JMHgxMzhlNzdhZSwgMHg0MjRiM2I3MSwgMHgwNmJmMjQ2YywgMHg5ZDllYjkxYSwgMHg4ZTE5ZTI1NywgMHhlYzEwMzBmOCwKLQkweDlmOWY4MzY4LCAweDJkZDlhMDdhLCAweDUyYmFiZDYxLCAweGU0NTcxN2VlLCAweDQ1YWQ2NGYzLCAweDdlMmJmZDg3LAotCTB4NGNmY2U1MjIsIDB4Yjc4OTVmZTksIDB4MTZmZjY5YmYsIDB4ZWJlY2RmZTgsIDB4MGZkZGUwMWYsIDB4ZGIyNTdkZTEsCi0JMHg2ZTM5ZjI0NiwgMHg2ZDJmNzJiMiwgMHhiMmEzZDExMSwgMHg2ZjgwOGI5ZSwgMHgxZjQ1MWZlOCwgMHg3MzliZWUwYSwKLQkweDdlN2M4MWNiLCAweGY3NDZkZGZlLCAweGY5NDNmMmNjLCAweDVjNDVmMjNjLCAweDRmMTA3ZTczLCAweGJmNzJhNGM3LAotCTB4MGU1NGNhY2MsIDB4MmE5MTY2YjcsIDB4NTQ5YmViN2MsIDB4Yzg1NGQ4ZmIsIDB4ZjIzYWE3YjcsIDB4NDJkY2E5NTMsCi0JMHhkYWU0YjlmOCwgMHhhODhjODA3ZCwgMHhlZWY4M2VmNiwgMHhiZGY4OGZlMiwgMHgwZjQwMmJiYiwgMHhiZTdlN2ZjOCwKLQkweGE5MjZiMjQ4LCAweGU3OGUyMmY0LCAweGUzMDhiYzU1LCAweDQ2OGM0ZTFmLCAweDZkZWNiODM4LCAweGNlNzg5MTY5LAotCTB4Y2U2YmU5Y2UsIDB4YzkzNTkzNTIsIDB4ZWMyZTRmZGYsIDB4YzRkYjBjMmYsIDB4ZDE1MjljNzMsIDB4NGE1MmM0YmUsCi0JMHg0YjFjMTVmNywgMHhkN2U4YWQyMywgMHg0ODdhNDJhZiwgMHgwN2ZlMzliOCwgMHhkYmZjM2RlMiwgMHhjOTU2Zjg4MiwKLQkweGRlN2UzNjBjLCAweGE2ZGRmODFlLCAweDQxN2IzZDQ1LCAweDA5YzQ1ZDAwLCAweDQ4NzVhZDNjLCAweGZiNTk4ZTc0LAotCTB4YjlmYjk2YmQsIDB4ZDdlNDQ5NjYsIDB4NzkwYTEwN2EsIDB4NTdhOGI3YmMsIDB4YTNlMjg2MzIsIDB4OWQyYzg0MWUsCi0JMHgxN2Y0ZDUwMywgMHhlOWZkYWZlNywgMHhiMTAxZWE3YywgMHhkYzQ1MDdmZSwgMHgyNzlkMjFjMCwgMHg4NzMwZmQxZSwKLQkweGNkZjlmODJhLCAweDczYTFlNjBjLCAweDhkYWM1OWUyLCAweDk1YzExM2QyLCAweGI5ZDRiZDdiLCAweGQxZGEzMDZiLAotCTB4ZTQwYzNhOWYsIDB4YjU1ZGE5ZmYsIDB4NmJmOTA0MzUsIDB4YzE2NTViMTYsIDB4OTMyMDIzNzMsIDB4YmM4YzNmZWQsCi0JMHg3ODExOWViMSwgMHhiZGM0YTRiZSwgMHg5ZWRjZmIyYSwgMHhmMTFhYjg1YSwgMHg1MWVjMWNlMCwgMHhkYmViODhmNCwKLQkweDk3YjI3Zjk3LCAweDFmM2E2OWUyLCAweDQzZGE3ZDdkLCAweDFlOWJlZDBjLCAweDViMjg3NzhhLCAweGVlOWEzYzM0LAotCTB4NWI1OGI4NTUsIDB4N2Y2ZmFlNWEsIDB4ZjY1NGZkOTUsIDB4YWFhY2NhMGYsIDB4MGNiNTg1N2QsIDB4Njc0Y2Y4MDIsCi0JMHhlOTVlYjkzZCwgMHhjMGE5ZmJlNiwgMHgzM2Q3NGUzOSwgMHhmMjA5NDExNSwgMHhlMDUwZjg4YiwgMHhhZjcwMmIzZSwKLQkweDNkYzQ4YjY0LCAweDY3NDc0NWEwLCAweDU3ODdmZDQwLCAweDRmYThhYzY5LCAweDM3ZWZiNzVlLCAweDg5YWYxZmQ5LAotCTB4NDg4NmYyN2YsIDB4NjhkZWE3NjQsIDB4ZmE3ZDk0YmYsIDB4NzQyZmI4YjksIDB4M2JiNzhjMzIsIDB4ZmM5OTczZjksCi0JMHhmYmRiZmY3ZCwgMHg2M2FhNGRmNSwgMHgzYmM5MmE3ZiwgMHgxYjc0OWY0YiwgMHhhMjM3YTc0OCwgMHgwMzRiMzljYiwKLQkweDRlODAzN2U4LCAweDBkYTVkMWFmLCAweDNmZGJmM2ZlLCAweGEyNTBkMmM3LCAweDlkN2Y2NTQ3LCAweDUxN2ZiMDU2LAotCTB4ZDg4NGI1ZmUsIDB4ZmRmYWVjZGMsIDB4ZTcxNjNiNDQsIDB4YjEyOGQ2NTMsIDB4YTE1YmE0MTcsIDB4N2JiMjc2ZDcsCi0JMHg3MDBiZjcwMywgMHhlMGYyOGVjNSwgMHg1NTNhMDBmMywgMHg3YzQ2ZjFmNiwgMHgyNzdiZTE0YiwgMHhiYjllNWNmNCwKLQkweGZjZTk5MzFlLCAweDdiYzkwYmYwLCAweDJjN2M4MmM4LCAweGQ3ZGQzOGZkLCAweGIxN2ZlYTUyLCAweDIzZjA2ZGJjLAotCTB4NjMxN2NmZDAsIDB4Y2Y0MjdhNzgsIDB4YmM5NGY5ZTMsIDB4ZTVmYjg4M2QsIDB4YjgzMTg4YmUsIDB4NDg1ZmZkNzAsCi0JMHg5ZTUxNjNlOSwgMHhjN2ZkMjE3ZiwgMHhhNTFmM2NmZCwgMHg0NjdlNjJiNywgMHhlNDBiNThkNCwgMHgzZjE0ZTg0ZiwKLQkweDg3YzEwYWRlLCAweDNjN2ZkY2RkLCAweDU0NzFmNmUzLCAweDMyZWY2MjRmLCAweDJmZjViZjdmLCAweGNmNWJmMjI1LAotCTB4ZjM4ZTk2MDEsIDB4NWNmYjFmOGIsIDB4OWY5NDAyNDEsIDB4NzBlMjU1ZmEsIDB4YWM1YjVmM2EsIDB4NjJlNTBmZWUsCi0JMHhiOGZmZjkzYywgMHhkNWY3NzZkZCwgMHg4NjUxNWQxZSwgMHhmMjZiOWM2ZiwgMHg1ZTY1ZGM2YywgMHhmNjRjOWM1ZSwKLQkweGFkODA4OTQxLCAweGRiOWQzYzNkLCAweGNmN2U2ZWE5LCAweGJkMzc5MTUwLCAweGZiMzc1Zjg3LCAweDBiY2YyN2ZiLAotCTB4N2NiNWVlN2YsIDB4ZmU3MTkzZmEsIDB4YjZjMGVhZjIsIDB4OWZiMDUyMjcsIDB4MGIyYmJkMTIsIDB4YWI5ZjFiZWYsCi0JMHhjYTFjNDNmZCwgMHg4ZjZkOTJmNSwgMHhiOTllOTBhNywgMHhkYTBhNWQ2ZCwgMHg5ZjViMjUwYiwgMHgzZTUzYjE0OCwKLQkweDhhZjY0MWQ4LCAweDczYmJhZjk2LCAweGFmMmYxZGY3LCAweGViNmJkM2Y3LCAweDNmOWViOWQzLCAweDBmMjA3OGNiLAotCTB4NDMwOWNkZjUsIDB4M2Y0NmFkMmYsIDB4MjRhZmYyNzgsIDB4ZDZmNDRjOGIsIDB4ZTBlNTFhYjYsIDB4ZWY4ZTM0ZWMsCi0JMHg3YzQ4YzZhYywgMHhhMmZkZTE5OSwgMHhiZWZlZDhmZSwgMHg0N2M3ZTQzYSwgMHgxNWQyYmVkMiwgMHgzNGVjYmQ0MywKLQkweDM2NjNjMTJkLCAweDgyODg2ZjczLCAweDY0YWQ2Y2VmLCAweGY1ZmU2N2E5LCAweDYxMzlkMzA3LCAweDFmNDkyYWQxLAotCTB4NWJlNTFmZGQsIDB4ZTNiNDcwZDgsIDB4NjhjMmQzYjIsIDB4MGVkNzczMWUsIDB4ZDlmMmM1NmYsIDB4MDRmOTc4Y2IsCi0JMHgzOGYxYmI4MywgMHg5ZTljZjNmNiwgMHg4MDQwNjdlMiwgMHg5YmM3ZjgyNSwgMHgzYjcxYTc2NywgMHg4OTA2Y2U2YSwKLQkweDljNjU2YmY0LCAweDZiMjM2N2U0LCAweDlkOTlkN2ZkLCAweDM5ZjNlNDI2LCAweGU1MjFmMTM3LCAweDY1YTRkYjFlLAotCTB4ODY4ZGRlYzcsIDB4MWQ2YTBmN2UsIDB4ZjdjMWE2NzcsIDB4NDk5Y2NmYTMsIDB4MmUzMzNlNDIsIDB4ZGEwNjdjZmMsCi0JMHhjNzdhYzkxOSwgMHhlZWI4YTUwYiwgMHhjYjhhMDZhZCwgMHg5NThhY2VjYSwgMHg4OGZlYTBhMywgMHg4ZDNjYzc0NywKLQkweDQ1NjU5Y2U5LCAweDNmYTI5NDJmLCAweDM4NzFiMzc1LCAweGYzZTU2ZjBmLCAweDM1NTkyYzViLCAweDUzYmUzZjY4LAotCTB4ODQ1Y2QwZmIsIDB4OGM2N2I5ZGIsIDB4YWUyZjFmYTQsIDB4M2Y2MjhkNGQsIDB4MDJiZmVmNjIsIDB4NjE0ZDZmZmIsCi0JMHhmYmQ4MDc2YywgMHg3YjAyZWU5OCwgMHhlZDRiZWYxZiwgMHhmY2E2OGVhZSwgMHg5NGFkYWIxZiwgMHhiZjFjZTliMiwKLQkweDFmMzg1YjE2LCAweDIzN2Y1MWI5LCAweDAyYjc4ZWMxLCAweDBiNWVjOTFmLCAweDc4ZmU4MWZkLCAweDEwN2Y2ZjQ2LAotCTB4YTQzYzk5ZDcsIDB4YjEzYWViNjIsIDB4M2Y2ODY0YWUsIDB4MGY3ZjE1ZGMsIDB4ZGQ3YjIxYzIsIDB4NWFhOGFkMjMsCi0JMHhlN2UzNDk4ZSwgMHg1ZjFjMWY3YSwgMHhmMWZhNDcxYiwgMHg0YTk3OGViMiwgMHhiNDg2ZmJlMSwgMHhkZWQ4ZDljMiwKLQkweGQ5MzJlNWI4LCAweDNmMzRlZmVmLCAweDVkZTExYjNlLCAweGQ3YzBkNWIyLCAweGVlN2RkNjI3LCAweDE3YTg5NDk5LAotCTB4ZmJkNzdmYTAsIDB4YWJhN2IyM2EsIDB4YjRiYzc0YjYsIDB4MWI3OWQyMGUsIDB4ZTNmYmQxMWUsIDB4NzdhZWFkZmIsCi0JMHhjZGNmOTg5NiwgMHg3MDQ2ZWFlOCwgMHhkNWQzOWZmOCwgMHgzZjQ0NzExMywgMHgzMmFlODE1YiwgMHhhYWJhNzVmZSwKLQkweGUwOWNiNjVhLCAweGUxNWE1YWY3LCAweDlmYzgzNGVhLCAweDkwZTJiOWQzLCAweGZmYTVjZTllLCAweGI1ZGNmMDg0LAotCTB4MmJmODIyNWYsIDB4YmY2OTU1ZmMsIDB4OWJkYjhkMzIsIDB4MDZjZjFhZTUsIDB4N2YwNGVmZDIsIDB4M2EyYzE2ZmQsCi0JMHhlNjgxZWY4NCwgMHhkZmE4MjliMywgMHhlMzM0ZGI3ZSwgMHhhZmJkZDc0NywgMHhkMjMzYmY5YSwgMHg3ZmY1ZjAwNCwKLQkweDczNDk0MmM3LCAweDFiNDQ4ZWY1LCAweGM0NTcyZmFjLCAweGRmN2UwN2RkLCAweGNlNTFhNjlkLCAweGUwNWU0OGYxLAotCTB4YWUyZmM5M2YsIDB4ZDYyNjAyYTIsIDB4OTJlNTFjMmYsIDB4N2I0MjBkZTQsIDB4ZjNkZWU5YWEsIDB4Mzc5NDUwZGEsCi0JMHhhZDUyZmIxMiwgMHhmZDJmYjIxZiwgMHhlNjhkZWRlNCwgMHgxMmI0YjM3YiwgMHhmOGZhZDFmYiwgMHgzNTI3ZWRlZSwKLQkweGVlNDNmN2FhLCAweGJkNTIwZjY4LCAweDhlY2Q3MWM3LCAweDlkM2QzMjgwLCAweDJhZDRjNGEzLCAweGJmMThmNmYxLAotCTB4NGU5Y2Q1ZDMsIDB4YzVlN2ZkZjEsIDB4N2RhZWEyN2QsIDB4M2Y3MTJmNjAsIDB4ZGVmZDkzMDksIDB4ZGNkZjM4MzUsCi0JMHgzNjdjODU5OSwgMHg2Zjk1YmQ3MCwgMHgzODdlMTI3NiwgMHg0Y2JmMWU5YiwgMHhmOGQzNjRmNiwgMHg5YmFjZGFmMywKLQkweGI2YzBmZmFmLCAweGUyNjc3YTRlLCAweDE3M2RhZWJjLCAweDdkMmVhMmVkLCAweDQzZWUxNjdiLCAweDlmOWM1YmU1LAotCTB4YTBlMTRmZmYsIDB4ZDVhZTk3OTQsIDB4NjQ5ZGJmNzMsIDB4NGYyZWZiMjEsIDB4NzlmNjQ4YmUsIDB4OWY2ZTYxZDcsCi0JMHg0Y2JmMzY1NywgMHg4NWI3YjRmYywgMHgzNGFhNDdmYiwgMHhlODUxZjk2ZCwgMHhkMWQ0NTg0ZiwgMHgzN2FjZmM4YSwKLQkweDk1NGJkYjlhLCAweGU4ZmY5ZWUyLCAweGI1MDcyMTQ0LCAweGZmNzg3MTNkLCAweDlmMzg5MmUwLCAweDdjMzRlYzU1LAotCTB4YjVlOTAwMzcsIDB4NTI3MWUzNGEsIDB4MzA1NjUwZGMsIDB4MGI4ZjczYzMsIDB4M2U1MGNmNDgsIDB4MWFmYzY5N2IsCi0JMHhlZTczZjNjNCwgMHgzZjkwMjMwMSwgMHg4ZmY1OTA3ZSwgMHhmZGE3ZjI0YSwgMHg5MzIyZDgyOSwgMHhlMmFiMjk3ZSwKLQkweGMzYWRhZjlhLCAweDE0YzBmMzJkLCAweGMxYWJlOGE2LCAweDJhZGVmOGFhLCAweDY0NjdmNWJkLCAweGU3ZTExZWVmLAotCTB4Mzg0MzU1NWUsIDB4MzkzN2IxM2QsIDB4M2FhYzU1M2QsIDB4ZWJmNjhmYTAsIDB4OWU4MmFmZWYsIDB4YzI2ZjNkMTQsCi0JMHg3NDQxZmU5ZiwgMHhmYjY0Y2ZmOSwgMHhhMzNmMjE3ZiwgMHg1ZmQ4NmZmYiwgMHgyNGI3M2Y3NCwgMHhiZWI5N2E4OSwKLQkweDhiNzMzZTczLCAweDY0MGJhZmIwLCAweDI0ZDU1ZWZhLCAweDYyZWYzYzMzLCAweDFlNzQyMWQxLCAweDUyMzZjMDVmLAotCTB4ZTYwNGUwOWMsIDB4YjE3YTRkMTksIDB4N2MyOWZkYjYsIDB4OWZlMjY1ODcsIDB4MzcxODkxZTQsIDB4OWQyZTdhMDUsCi0JMHgzOTA3ZTcxYiwgMHhlOGFlMzA5MiwgMHg3MDEyNDY4NCwgMHhmNjRmNjRmNSwgMHhlOTM5Njc5MywgMHg5NjhkNGU1YywKLQkweDNkNjM5MjI1LCAweGE3YTRjMTMxLCAweDMxNWU5ZjhjLCAweGZhN2Y1ZmNiLCAweDRmZWRjNDg3LCAweDI2ZjQ4N2U4LAotCTB4ZjdlMWVlZTYsIDB4NTkzZGJjNDAsIDB4NGM2NGVmZmUsIDB4MjJmMDUzZmIsIDB4OTNjYzhiOTIsIDB4OWM2ZmNkM2QsCi0JMHhhNzFlNzRmYywgMHg5ZGNmMDU3MSwgMHg4OTU0OWY4MSwgMHhmOTNjY2RmMywgMHgwZWQxNjdmYiwgMHg5ZjlmYmM1YSwKLQkweGM0ZDA5ZGViLCAweGM5NzE0YTdmLCAweGMyNThhZjc4LCAweDFlZmNiYmZiLCAweGJiMzA3MzM3LCAweDczMjdlOTFkLAotCTB4YTk1ZmRkMDAsIDB4OGMzMTJkZGEsIDB4MzY2Y2FiMmYsIDB4NGQ3ZjQ1NmMsIDB4MTIzZGFlYTUsIDB4ZDM1ZDc5ZjEsCi0JMHhlN2M0N2EyNywgMHhjY2VmM2MyYSwgMHhiOTdmZjdlNCwgMHhmNzQyZGFmZiwgMHg4YzJjYWJiOSwgMHg1MzQ1NTdlNCwKLQkweDQ3ZThhN2VhLCAweGE1Y2MzOGFiLCAweDE4ZjY4NTY4LCAweGI3YzhlOWQ5LCAweGM2ZjJiYzcxLCAweDNiOTc2NDNkLAotCTB4NzJlYzk3OTksIDB4NmYxYTgzNjcsIDB4ZjZmYmEzN2EsIDB4NWJhN2U3YTMsIDB4OGM2MmVmNTUsIDB4NjNlOWNjZGYsCi0JMHg5YWMzYzYxYSwgMHg0M2Y5MzlhOSwgMHhkNTQ3NDdjNywgMHhjOWJiZGZmYSwgMHhiNWYwZTc0ZiwgMHg1MWFiOWRjYiwKLQkweDkwNGVlOThmLCAweDRhOGVmODZjLCAweDE1NmI5MDc3LCAweDE0YWU0N2VhLCAweGJmNzRkN2FlLCAweDAxN2IyYmJkLAotCTB4ZjY3NzE3ZjEsIDB4MDc3YzRjZDQsIDB4ZTNiMWViODYsIDB4Y2FkMjZlZDcsIDB4ZGYxOWYzN2UsIDB4ZGQ3ZmZkYzIsCi0JMHgxZjY0YWM0MSwgMHgxMDYzYmJlZCwgMHgyOWZkYzdlZSwgMHgzOWU5MDU4NSwgMHhkMWNjN2VmNCwgMHgyMzRmZDBiYiwKLQkweGFlMDRlOWVlLCAweDlmMGE2OGUzLCAweGRmZjQxMWNmLCAweDNkZTZmODY0LCAweGYzOTYzNjMxLCAweDNjMjZlNjMzLAotCTB4NjJmNzE1NmEsIDB4YTUxNmY4OTQsIDB4NTc4MTE2ZmQsIDB4ODkxN2VjZDcsIDB4YzQ2ZTlkZmIsIDB4MDRiY2YwNWYsCi0JMHhiY2YxMzJlMywgMHgyMjlkZDMwNCwgMHg0YmNmMTM3ZSwgMHg4OGFhZmYzMCwgMHgxMmYzYzRkZiwgMHgxMmYzYzcyYywKLQkweGY4OGEzN2NjLCAweGMxMmYzYzRkLCAweDYwOTc5ZTNjLCAweGRmODhhNmZhLCAweGE1NTM4MjNjLCAweDFhZTZiM2I4LAotCTB4YTQ1NjhiYzQsIDB4ZmNiZTgxYjUsIDB4ZmM4MGYwODksIDB4MTNmZDc1NDAsIDB4M2YzYTkyZTEsIDB4OGJmYWEyNTAsCi0JMHg1YzZiOWJkMiwgMHhiNGE3ZTgxOSwgMHhmZGM1NzkwOCwgMHgxZDgzZWI5NCwgMHgyYWY4NDBiZiwgMHgxNWNmMGVmNywKLQkweGU5MGZiZDNjLCAweDhjZjg1YzY4LCAweGJkNWY0ODU5LCAweGY5MGMwZGZkLCAweGM3NzRhZWQwLCAweGY4NzdhYzMyLAotCTB4OWI0OTNkZjAsIDB4ZTg5YTNmODgsIDB4YzNjNGY4ZmMsIDB4MDVmNzU1NDMsIDB4NWM4ZGE0YzcsIDB4MzFmOTBkOTUsCi0JMHg2YmRjNDk2NiwgMHg1MGFjMzhkZSwgMHg1Y2YwZmJiMSwgMHg1YjI4YTViYywgMHgwNTgyZjljYiwgMHhkOTNjZTRmNSwKLQkweDJjZTM4YzU5LCAweDQ0OGQzMThlLCAweGQ1M2MzYmZlLCAweDFmYmE3OGYxLCAweGI4MWZjZWJmLCAweGExZjUwOTMwLAotCTB4NTNmNTlkNTYsIDB4M2ViYTk3ZjQsIDB4OWJiNDMxZDIsIDB4NTI5YWJmMTQsIDB4ZTYzYTkwY2YsIDB4M2UzNzZjMTksCi0JMHgwOGQ1NzEyZCwgMHgwYzg4MWZlYywgMHhjZjVkOWNmOSwgMHg3NjdlNzAxYSwgMHhkZmM0YjA0ZCwgMHg5MTZhYjA4ZCwKLQkweGY2MjMzYzBmLCAweGViOTVhYzdiLCAweDU1YmQ1ZWM1LCAweDc2NzY4ZTFiLCAweDc4ZmU5OGQwLCAweGY2MmFkYTdlLAotCTB4ZGZkOGIwZjcsIDB4ZjE3ZjYyMjMsIDB4OTY5YzY5YmMsIDB4OGE2MTM3OWYsIDB4MmE5ODRkZTcsIDB4ZDJjNzVhNzEsCi0JMHgyNzRhNWYwYSwgMHgyMWM0ZjZmOCwgMHhkZGJmMTU3YywgMHgxYTNlZTUwNCwgMHg5ZWExYzRmMywgMHhkN2MwOTlmMCwKLQkweDkxOWYwNDA3LCAweDc5ZWIwYWQyLCAweDJmZGQwZjNiLCAweGI0ZmUxNzJjLCAweGEwYmU3MTRlLCAweGU3Njk1M2FjLAotCTB4OWRjN2NmNmIsIDB4NjdmMzhjMzIsIDB4MTNkYzRmZDYsIDB4MTg1Y2M0MWIsIDB4OGRlNTNhZjcsIDB4NzUwN2YyMTgsCi0JMHhjZTNkZjliOSwgMHhjOGRiNDAyOSwgMHhmYzFiZDhiZiwgMHg3MzQ1OWRmYywgMHg3YWYyOTkzYSwgMHgyOTViZDUxNCwKLQkweGUxMTU5YWZjLCAweDA3MTgyOTZkLCAweDQ5ZTgyNWRmLCAweDc2ZjcyYmM5LCAweGRlNDA0NjJiLCAweGFmYWI4YmVjLAotCTB4ODI5NmQyOTgsIDB4OTI1ZGY1NzEsIDB4NTQ3ODgzNDksIDB4M2Y3Zjk1YjEsIDB4MjJhZGU4MmUsIDB4YmNhN2Y0NDEsCi0JMHhjNGY0NjA4NywgMHhlZjc0M2VlMSwgMHhlZjBlMjM3ZiwgMHg3YjM3YWQ4OSwgMHhlZjdlNzAxNywgMHg5OGYyZjdlNSwKLQkweDg0ZTMwNTM3LCAweDI5Y2YyNTNhLCAweGRmYWQ4NzhjLCAweDhjNDFmOTM5LCAweDc5ZDRlZDg3LCAweDhlZmNjMjVlLAotCTB4YzQxZjUzOWQsIDB4Njk0ZWQ4NzgsIDB4ZmY4YjI5Y2YsIDB4Mzg5ZTAxZjcsIDB4ZGZhZDk3OGMsIDB4ZjdlNDQ1MzksCi0JMHhmMzY2MTRiYywgMHgzYjVlZWJjYiwgMHgyYmY1ZGY4NSwgMHhmMTg4M2VhNiwgMHhlZTBkMTNiMywgMHgyZjg4ZDVjMywKLQkweDY1NzhlNDdmLCAweDBjZjdiZGRhLCAweDk5YmNhN2MyLCAweDc3NjNlYmViLCAweDFhZjhiZGVmLCAweDIxYmRlM2NhLAotCTB4NTVmZjZlNzQsIDB4N2JjMTNjN2EsIDB4MWIyYmYzNjUsIDB4ZjZiYWNmMTAsIDB4ZDYwZTg4ZTgsIDB4ZDJmMjdjMzcsCi0JMHg4MTllYTlhZiwgMHg2ODliMmI5ZSwgMHg2YmEzNjRmMCwgMHg5NzlkZDVlNCwgMHgyNzcxYzAxZiwgMHhjMWJlN2IwNiwKLQkweGNjODY5ZmZjLCAweDhjNGM3OWE2LCAweGVlZmM3NGUwLCAweDMxMDdhMjkwLCAweGVmNmJiZDllLCAweGVlOTBjN2VlLAotCTB4ZmM2M2Y2MjYsIDB4MTMyZWY1ZGUsIDB4ZWJkOTRmZWQsIDB4YWVkMGUzZTksIDB4OWI2OTBhZWYsIDB4ZWU1N2ZkOGQsCi0JMHhmZGYzZjAzNCwgMHhiZGU4YTNkNywgMHhlZTc0OWU4OCwgMHhiMjFkMmU2ZiwgMHhhYmU1MGUzMSwgMHhkYjFkY2RlNiwKLQkweGM2N2U4ZDdlLCAweDZmM2EyNjlkLCAweGZhZTcwYWE5LCAweDliNWM5OTVkLCAweGRmZWQwOGZiLCAweDgwZmVkYmNiLAotCTB4YTI2MWRlZjMsIDB4ZjQ1MmNmZjMsIDB4NzRiZTQwYWQsIDB4MTdiZjMyNWIsIDB4NjZhZmNmZmUsIDB4YzllNDNlZTMsCi0JMHhjYTdlZTg1YiwgMHgwZDI2NzUzNywgMHhkZWI4ZTFjMiwgMHg4M2VmMGZkZSwgMHhjOGViOGViOCwgMHhmOTE1MmNjZSwKLQkweDdjMTExM2QyLCAweGY5ZWRjMTNlLCAweDM3ZmQ3ZmI0LCAweDJkN2NhMWM2LCAweGZkZTVmODhiLCAweGYyODllZjM4LAotCTB4Y2VkMDk3YzYsIDB4ZjdmMGFmNjEsIDB4MDBlZmNlY2QsIDB4ZjNiYjQxYjgsIDB4MGU4YTNhZjUsIDB4NDIxMWRhZWQsCi0JMHhhNTNiYjZmNywgMHhkZGYxYjM4ZCwgMHhhZjNkNTcwYywgMHg0OGRhNjlkNywgMHhhN2Q1NzRmMCwgMHg3NmJkZjdmMiwKLQkweGIwYzNhNzQwLCAweGY5NTUyNmRlLCAweGIyNTdmYWY5LCAweGIwYmQwZWQwLCAweGEzZDkyMjczLCAweGY0MmI5ZTBhLAotCTB4NzgxNzU2NTIsIDB4YWZkZjhjMmYsIDB4MzM3ZjEzMmMsIDB4ZmQ5OThiOGIsIDB4ZjYxNzRhZmMsIDB4MDJmNWRmM2QsCi0JMHhkMGJmYjVmMywgMHhjOGZiYTNhMCwgMHgwYWI2MDZhNSwgMHg3YTE1NzFlMywgMHhiN2JkOGIyOCwgMHhhNjU3ZDcwMCwKLQkweDdkNDE0ZGE5LCAweGZiNjQ3NGE1LCAweGYzOGJhNDZjLCAweDg2OGM2NjI2LCAweDM5MDgxZjdhLCAweDdjYjhkNjU1LAotCTB4MzdiZGVhMzIsIDB4NDMxZGNmOWEsIDB4NTZmYTFmMzgsIDB4NGRiN2UxZDAsIDB4NzlmZmI3MjYsIDB4YjdmYTYwNWYsCi0JMHg1MGZkNjY2YSwgMHg3Y2ZmY2JlYiwgMHhkYzllZmE5MSwgMHgxMzhmN2EwNywgMHg3MGNhYjNlZCwgMHg0MTRlM2ZjZSwKLQkweDVmZTAwNmZkLCAweGZjZTEwZmI3LCAweDc1NTJjZTYyLCAweDNjMjE4Y2ZkLCAweGRmNTJiMTBlLCAweDRlZjI4MjllLAotCTB4ODg3ZDNmZTksIDB4ZGE4M2ViODUsIDB4MmEyNzdhNzYsIDB4NTk0NGRkYjAsIDB4ZmM1ZDliZjAsIDB4YTM1OTY5ZGUsCi0JMHgxZGY3NDFkNCwgMHgzZTkxYTQxMCwgMHg1ZDE5OTY3OCwgMHhlOWQzOGM2ZSwgMHg3M2EyMWY2YiwgMHhiZGUwM2VjNSwKLQkweDM0ZjEyMTgyLCAweDg5ODM1OTVlLCAweDA3OTcyZGVlLCAweDdlYTI4N2I1LCAweDBmNjkwY2U0LCAweGViYTdiZDQ1LAotCTB4OGJkZTk5NGQsIDB4YWZlYmVkYzQsIDB4MWJlMDlmZjQsIDB4OTYxN2YxNGYsIDB4NTM3Njc0N2EsIDB4NzJjMWUzNWYsCi0JMHg4ODVlMmVkMCwgMHgzZTI4MDM3ZiwgMHhlYjQwOTIxYiwgMHhlNjBhNjkyZSwgMHhlZDJkYTRmNywgMHhmMDM4NmY3NCwKLQkweGQzYWUyMTFlLCAweDVkOGY0N2UyLCAweGZhNDcyZjRkLCAweDg3YjNlN2RiLCAweDU3ZmYwYmM0LCAweGY3NGRkMTA3LAotCTB4NDM4Y2JmM2YsIDB4YjBkMzI4M2MsIDB4Nzg1ZTc4NTUsIDB4MTVmN2UyNDEsIDB4MTVmNzRmMjAsIDB4Yzc3Mzg4MmUsCi0JMHg0MWNjZWZiMiwgMHhiZTE3M2Y4OCwgMHg3NzFkMTI3NSwgMHhlN2M0ZWQ0OSwgMHg4OGFhYmJjYywgMHhkYWU5NzQzZiwKLQkweDQzNDljZjg5LCAweGFlN2M0MTdmLCAweDM2N2RhYzJiLCAweGQwZjMyZGYyLCAweDRjN2JmYzM1LCAweDRmYmM2Y2ZiLAotCTB4Yzg4ODYxNzMsIDB4ZjcyNDY2MGYsIDB4NDBkYWVlMDcsIDB4Y2NhMjY0ZmMsIDB4Y2JkODE4ZTMsIDB4MGJmNzBiM2EsCi0JMHgxNDJmNzg3MSwgMHhlZDZjNjI3MCwgMHgzYmIyNmE4OSwgMHg4ZmQ0NTY3NCwgMHg0MjRhODc2MiwgMHhkNmZiZDdmZiwKLQkweGE5ZThmYjJmLCAweDM3Nzc1OThiLCAweGYwOTY3ZDIyLCAweDlmNDA2Mjc3LCAweGY1MGQ3ODZhLCAweGY0OTExOWJlLAotCTB4ZGMyMDRkY2UsIDB4ZmViZTczOTQsIDB4ODA1ZjdmZTEsIDB4NzEwYTY0ZmIsIDB4ZTc4MjFjYWMsIDB4NjRlZDE5ZDUsCi0JMHg5M2I2MDA1NywgMHhiNmY5NWVmZSwgMHg2ZWNiZWM4MSwgMHhlNDM2Y2Y1ZCwgMHhjNzY2MWQ1ZiwgMHhhOWNmNThlMywKLQkweDJkOTM1YjZmLCAweGY2ZmE3ZGUxLCAweDliZGYzYzU2LCAweDdiZTNkY2EwLCAweDU3NWJlMzg1LCAweDllZmNjYmM2LAotCTB4N2MyNzM4ODIsIDB4YmUwM2VjNGUsIDB4Zjg4YjU4ODEsIDB4N2U3ZGYxMjEsIDB4MGZmNWU5YTcsIDB4YjU3NGRmOTEsCi0JMHgwZTlmMTIyNSwgMHg0ZGYzYTdhNCwgMHgwYTdiZDM0ZiwgMHhiYmFlNDEyNywgMHg5M2ZmZWNmYywgMHg3OWQwYWY0NSwKLQkweGMzOGM3NGZjLCAweDNmN2Y1ZjMwLCAweGE5ZmJmN2I1LCAweDBkYjIwNzY0LCAweDhmODhlNTdlLCAweDIwN2NlYTM1LAotCTB4YmQyZjEwNWMsIDB4MTE3MDNhMmEsIDB4NWJhNzhmZGMsIDB4NjNhM2JiZjgsIDB4ODIxZGU4ZGIsIDB4OTAyOWY5NmIsCi0JMHgwN2YyZmQ5NywgMHhmNTAxZjIwMywgMHhlYTNiNWVmMSwgMHgyZjUxYzcwZiwgMHhmNjBlMzg0MCwgMHg3ZGJiMjA5ZSwKLQkweDVkOTM4ZjM3LCAweGYyOGQ3MjA5LCAweDljZTk4MzdiLCAweGU0MWJiMzU4LCAweGI3MmU3ZjU2LCAweDg3OTQ1ZTUwLAotCTB4YWFiZjkxYjYsIDB4Y2U4MWFmNmIsIDB4OWYzNDU2MzcsIDB4MDNmNWMzOGQsIDB4YTY1ZjkyM2UsIDB4NDg4ZGY5YmMsCi0JMHgxMmJmZTdiNCwgMHhjN2M4MDM3NiwgMHhkOTRiOGE0OCwgMHhmNjg5MWNkYiwgMHhkNGVlNTI4NywgMHg3YzQ0NTI3OCwKLQkweDBmZjIxNjdjLCAweGY2NDJiY2E1LCAweDU1M2RkMGE2LCAweDM5ZGU4ZGE5LCAweDRkZTcwYWY4LCAweDYzMmYyMWY1LAotCTB4OWMzYWQxOWUsIDB4ZDY3YmE3MTIsIDB4MGE2YmRmY2MsIDB4ODIxM2I3ZGMsIDB4YTA3ZjAxOWYsIDB4YmM1NzI3NzcsCi0JMHgwYTA1ZmRjOSwgMHg3YzE1MjgzZiwgMHg2Nzk2MjBlNSwgMHgyOGI3ZmE3MCwgMHhkZTc4NDNlNywgMHgwN2RmNzQ4MywKLQkweGUxNDA3ODlmLCAweGY5MTE2YzdiLCAweGIxMGY4ZTczLCAweGY2OGFiODcyLCAweDM3ZjcyZmQ0LCAweGI3YjhiOGYxLAotCTB4MzIxMmIzM2EsIDB4ZGFmNTlkYjAsIDB4ZmM2YjhmN2QsIDB4NWZjN2QxMjgsIDB4MTM0NDBmOTAsIDB4OGJhMTU4MWYsCi0JMHhiZDk1NzU4NCwgMHgzYWJiZDEyNCwgMHhlNzk2YjNhNSwgMHg1MGI2NzU0MywgMHhlN2JkMDhmYiwgMHhhZTcxODI1OSwKLQkweDE1ZTdlYmU2LCAweDQzMTU0Nzg4LCAweDM0Y2E5YzM4LCAweGRiMmVlZWRjLCAweGNmMzlkMTI2LCAweDNmM2YxZDA1LAotCTB4NzE0MzdlMDMsIDB4MmRjNzBiZjQsIDB4OWJmYTQ3Y2YsIDB4ZWY0MmJmZGYsIDB4YWNkZjFmNmYsIDB4NWJlZWViZmYsCi0JMHgxZjllNWEyZiwgMHg5NzlkMDdkNSwgMHgzYWQ0ZGQyZCwgMHg1ZmRmNWQ4MCwgMHgzZjM2YTNhOSwgMHhiOTdkN2FkMiwKLQkweDI2MGJlZjMyLCAweDc1NjM5ZTY1LCAweDMxZTFmYzAzLCAweGJlM2U3OTdkLCAweGY4ZDBiOGZiLCAweGFmODNjMmFmLAotCTB4YzFiMzQyZmIsIDB4ZTAxNzcyOGIsIDB4NzdiNWU3NGIsIDB4ZjJhNDVkNWYsIDB4YmZhY2RlYWIsIDB4NzNhNmU2NTIsCi0JMHgzZmNkMWI4ZiwgMHhkZTRhNzUzMCwgMHgwYWQ3MTQxMywgMHg3NDRmNTVmNCwgMHgzN2UzNzQwNiwgMHgwMjQzNjNkZSwKLQkweDQ1MjUxMWZjLCAweDE1N2JkMWI3LCAweGZjZGJhMjhlLCAweDI5ODExMWZkLCAweDFhODFjYTMwLCAweDUxNzBkOThhLAotCTB4ZGIzODc0MGEsIDB4OTQzYzA3ZDYsIDB4Yjk0Mzg5ZmEsIDB4ODEzMWY1NWYsIDB4OTYyNzAzYzcsIDB4MjMxYWZmM2YsCi0JMHhlODZkOGUzZiwgMHhjN2RmMWI4MCwgMHhmZmYwNDNiOCwgMHg3MThmYmU1YiwgMHhiN2FmMzA0ZiwgMHg1NzQxNjRkZiwKLQkweGJmZmVmNzRiLCAweDdiYjgzZjkzLCAweDNmM2E3OWI1LCAweDE4YjMzMDY3LCAweDlkMWFkZWY4LCAweGVmZGZkNWI5LAotCTB4YjdiODg5ZmIsIDB4ZTk5NmY3ODAsIDB4ZWU5YTc5ZmUsIDB4MTk0OWZkYzcsIDB4NDlmY2Q3MjEsIDB4MDQ2NDZmYTQsCi0JMHg1NzRhZjlkMywgMHg2ZjkyMTVkMywgMHgxNjM5MmRkZCwgMHg2YWU5MDczYywgMHhkZTkxOWI3MywgMHg1ZmY5ZmVhYSwKLQkweGJiODcyODkxLCAweGI4YTZiZTVhLCAweGNmZWZhZWIwLCAweDNhZDhiYzUyLCAweGIwNzdiNzExLCAweGI1NWJjNDQ5LAotCTB4YmNiMDQzNTksIDB4N2NhYmUwYmIsIDB4YTQ1ZWI3YWMsIDB4ZjcwMjdmM2UsIDB4ZTJhOTJiYTcsIDB4OWY3YmYwMmYsCi0JMHgxY2QwZDY2NywgMHhkZDZiM2Y3YywgMHgzZTMwZDk1MywgMHg0NWNjNmUzMywgMHg3Mzc2MDA3ZSwgMHg5ZjBkY2EzOCwKLQkweGY1MWFjMTFmLCAweGU4OGJmMTYzLCAweDcyZDI0ODQ3LCAweGU4YTYwMjNmLCAweGUyNGE0ODQ3LCAweGEzY2MwNDdlLAotCTB4ZjQ1MzAxMWYsIDB4ZmEzOTYwMjMsIDB4N2U4ZjMwMTEsIDB4MWZhM2NjMDQsIDB4NDdlOGYzMDEsIDB4MDhmZDE0YzAsCi0JMHhiODhkZmU1OCwgMHg4YzBkZDEyZiwgMHhjZDM5ZmI4YiwgMHg2MDk3ZjdjNCwgMHg2ZmMwMzBmYywgMHg3OGJmNzg4OSwKLQkweDc3N2YzZDQ5LCAweGEwNGJlZjA3LCAweDdlMmViYmZjLCAweGNmYzQ1MWE2LCAweGY5ZDEzNjc4LCAweGQ5NWVkNTVmLAotCTB4Zjc4NDViODYsIDB4MTgyOTVjMmEsIDB4MDg3M2QzNDcsIDB4N2I1NTNmZmQsIDB4MmI3MmRiMjQsIDB4NzlhNzRmOTYsCi0JMHhmOWM5NmJhYywgMHhkNzk2MTY3NCwgMHg1ZWY4NmNlYiwgMHhkZjEzZTAxNiwgMHhlMjg5NWFjZiwgMHhlYTVhY2E5OCwKLQkweDJlMzU1ZmM5LCAweGNkYzUzZjZhLCAweDBjNDgzNTU3LCAweDBjZDNhY2ZkLCAweDkwYWU0ZWRjLCAweDlkMDQ3NGExLAotCTB4NWQxZTkyOTcsIDB4ZmIyMzY4NjEsIDB4NjRiYjdjYTUsIDB4NWM5ZmJmZjUsIDB4ZjEzMmVhMzUsIDB4NzhkY2U1MDksCi0JMHgyYWM0ZmYwMSwgMHhiMTZiMjYzYywgMHg3OWRhY2U0YSwgMHg2OWZlMTNmYywgMHg5MTM3YzVmNSwgMHgxN2E3ZTIxZSwKLQkweDY0ZjNjMDJkLCAweGE3YmY5NzJjLCAweDYwMTUxYjdiLCAweDM3NDg0NmUwLCAweDZiMmE3ZjhmLCAweGUzMDZiM2Q5LAotCTB4MGUzNTZlYTYsIDB4ZTJhMWU1ZWEsIDB4YmYzODc4ZmMsIDB4NGNmMDUxOGYsIDB4MzBiZGVlZjEsIDB4MDM0NmVmNWUsCi0JMHhkMmJiMjllOSwgMHhiZjExM2IxZCwgMHhlNGVjZTkwZSwgMHhkZmI0Mzk2ZiwgMHhlOWQ2NzY0NCwgMHg3ZjJhYTk0ZCwKLQkweDg4M2M5ZTRiLCAweDc1OGIxZGZjLCAweGUxZWZjOTEyLCAweGI2MGYwZWE5LCAweDFlNjBhN2JiLCAweDg5ZWU1OWY5LAotCTB4NTYzYTIxMGUsIDB4NWE5MGQwZjAsIDB4ODFmMjFhZjgsIDB4ZjI1Njk5YzUsIDB4ZDgxOWU1NmYsIDB4MTEzZmE4MmYsCi0JMHg1M2VjYTU1NywgMHhkZTg5NGFkZSwgMHgzNjYyMmU0ZCwgMHhjNzMwNWZiYSwgMHg1Mzg5ZGZjZSwgMHhjMzliNzVkZSwKLQkweDgyODM5Yzc4LCAweDQ5Mzc4YjU3LCAweDM2NGVkZGZjLCAweDViM2NlMDg4LCAweGNiNGU3M2MwLCAweGM3NGVmNDdiLAotCTB4NTc3ODgzM2MsIDB4YmZjZmMzNGUsIDB4NzhmM2Q3NjMsIDB4YzJmOGY5ODYsIDB4ODE3N2JlMTEsIDB4N2M5MzI3ZDgsCi0JMHhjYTFkYmI3ZCwgMHhlMjgzYzExZCwgMHg4ZDZmN2ViOCwgMHg4ZThiZmVjMiwgMHgzNzNlMjhlOCwgMHgxNGJlZWEyZiwKLQkweDcxZjljOTA3LCAweDc5MjBjNzE0LCAweDBjM2ZjYTY3LCAweGE5ZmUzMWZkLCAweGE0Mzg2MzhlLCAweGViODQxYzJiLAotCTB4MjUzYzQ1NmUsIDB4ZDI4MzhlZmYsIDB4OTQyNWQ1MjMsIDB4MjUxYzdlMmEsIDB4ZmY3YmIwNmUsIDB4ZmM3MDdiMWIsCi0JMHg2ZWZlMmFiYywgMHhjNWVmMGRlYywgMHgzZjdkZjUwNSwgMHhmMDI3Yjk0YywgMHgwZTI5YzYxOSwgMHgxZjFmZjVjMCwKLQkweGM0ZGJlZjg5LCAweGUxYjY2NzdlLCAweGY2YTJmM2ZhLCAweDQ0YWFiZGQzLCAweDkzM2ZmZmQxLCAweGZlZTBjZjBiLAotCTB4MGI5OTQzZDgsIDB4Y2MzOWUxZGIsIDB4M2U2NzgwNDYsIDB4M2Y0MjQwMmUsIDB4Zjc4ZWM3YjksIDB4NGJmNjdhNTMsCi0JMHhiZTVmOGExNiwgMHg1YTZlNmY4ZSwgMHg1NTIxZjE4ZCwgMHg2YmJkMTI0OSwgMHgzMWI0MWY5ZCwgMHhjZmZhMTIyZiwKLQkweDIxYjc4ODRmLCAweGUyNmFhZWRmLCAweDQ4MmVkNjdlLCAweGU1ZGZiZWY5LCAweDE4YWFmN2E2LCAweDgyNmEzZjdmLAotCTB4NTNmYmI3ZDgsIDB4M2ExZjdmMWMsIDB4NTEzZTU3YzAsIDB4Y2I3NzU1ZDAsIDB4N2JiNzFlMTUsIDB4MWQ2YzNmNzMsCi0JMHhmOGM3M2ZiZCwgMHgwZmY0MWY3YiwgMHhlODcxMzVlNiwgMHgyYWM3ZjI2MCwgMHgxMGRiZDM3OCwgMHgyNmYxMTViNSwKLQkweDliYjc4MzI0LCAweDBlOThlYjM1LCAweGNkMjkwNmY1LCAweGZjODBjYzYxLCAweGFiY2JlMmVjLCAweDdkOWQ2OTIzLAotCTB4Zjg5NGM1ZmIsIDB4OThiZjQwZjYsIDB4YmZmZDdmM2YsIDB4YjBmZjZiODgsIDB4NDdhNTExN2EsIDB4ZGE1Mjk3YWIsCi0JMHhlZmEyZWQ1NiwgMHhjYjZlMTcyMCwgMHg2YTdmMzViOCwgMHhmZTFmNDY0YSwgMHhmNmI0NjY1NCwgMHhmNDBhYjkyMywKLQkweDAxZDZmZGNkLCAweDZiYTA1M2ZlLCAweGRmNWQxZjhkLCAweDc3MzYxMmQzLCAweDM1MWRlYTJkLCAweDEyOGY3YTdhLAotCTB4OTg5NzhjZTMsIDB4MzJkODBmODksIDB4MmFhM2Y0ZmEsIDB4ZGY5MzMzNzAsIDB4NDY5OTk3YjUsIDB4YTZjN2ZjMjAsCi0JMHhmMDM1NmEyNSwgMHg0OTBjY2VmZCwgMHg3NDg2NWU3NSwgMHgzYTQzZWI4MiwgMHg0NGU5MTRjMSwgMHg3Y2VmZTdlYiwKLQkweDljMjQwZjUxLCAweDE3MDBmNWNkLCAweGRhMjYwMWU5LCAweDgxY2IzNWQ3LCAweGVlZjg0ODdmLCAweDNmYzU0NThmLAotCTB4MGZmMDA2MmUsIDB4YTYxZTU4MzAsIDB4MDYyZDU1ZmIsIDB4ODk0Njg3N2EsIDB4YzkwYjFjYjcsIDB4ZjA3ZDExZDUsCi0JMHgyN2U3MGYxMywgMHgzYjNjODM4MywgMHg2NTdmYmVlOCwgMHgxZWYzYzUxMCwgMHgzYWZjNzFkMiwgMHhjOWM3OGViNCwKLQkweGZlNDJiMzE1LCAweDdjZjVkMGRlLCAweGNjY2JlZTg1LCAweGY1MzllODhiLCAweGVmM2ZhODA3LCAweDMzZTkzMzA5LAotCTB4ZTQxNjYyNmIsIDB4MjU3YzNiZmUsIDB4ZTAxMDY1MDcsIDB4NGIyYzZiOWQsIDB4OWJlMGI4YzMsIDB4MDNiYmNhYTUsCi0JMHhkMDIxZGVkNywgMHgyNzFjZjc4YiwgMHhhYTZhNzdmMCwgMHg1OTUzZmU4NCwgMHg1NGZhMjE2YywgMHg2YTU2NjFlZSwKLQkweGIwNmIxZDNkLCAweDFlMTBmZjVlLCAweGY0NjVhMWVmLCAweGNkNzFjOGNlLCAweGE5ZWVmZTQwLCAweDEzZTNiM2EwLAotCTB4MWI5ZmM5MTIsIDB4YzVlM2QyYjksIDB4OTNlZTdiN2UsIDB4NzFkYTdkZTgsIDB4ODMxZGZjYzEsIDB4ZjNhMTRkM2MsCi0JMHhhZWZlZjgxNSwgMHg3ZDQ3ZGY4NiwgMHg5MDI5ZGYxMSwgMHg1ZmI5NWY3MSwgMHg5M2VmNzdjNCwgMHgwNWIxNjllYiwKLQkweDdmYjk1YjIxLCAweGIzZmJiZjk4LCAweDAwZmUxMjUyLCAweGI3NGI2ZWYxLCAweDFmZGRlMDNiLCAweDM3NGFlZWYxLAotCTB4MDhmNTljMmIsIDB4Y2FlOTgxZjIsIDB4MjdkNjhmZmIsIDB4YTZhMDdjZjEsIDB4Zjc3ODg4NzQsIDB4Y2Y3ZmUzODcsCi0JMHhmOTBkYTM2NCwgMHgzZTcwY2Q1OSwgMHgwNGQyOWFmZiwgMHhhYzk0OGZlZSwgMHhiOThlNTFjYiwgMHgxYzY4YzM3ZSwKLQkweDgzM2ZiYmRmLCAweDFmYjJiYmU5LCAweGE3MmUzYmNhLCAweDQzYmYxYzQzLCAweDllZjgxMWJlLCAweGUxNTJiM2NiLAotCTB4NGZkOGY5OGMsIDB4MjdhZjlmMjYsIDB4NDNlM2YzOTksIDB4YjkzYzg2MzMsIDB4YzgzOGUxMGQsIDB4Zjg3YTgzOWEsCi0JMHhiOTYxNTFkYywgMHhhYzQ3ZTAxMiwgMHg4MDBjYjk5NiwgMHhhNjliZTg3ZiwgMHg2OWQ2NmU3NywgMHhiYzYwMmJkZCwKLQkweDJmNzE1YTQxLCAweDNkZjgyYjVmLCAweDgyMzQxOTc0LCAweDkwZjVkYmVhLCAweDIxN2E3YTJmLCAweDhhYmNhM2IzLAotCTB4NmM1ZWY0NjUsIDB4ODc5ZjkxOTIsIDB4Mjk4NjNiNDMsIDB4OTQ2NDY5YmEsIDB4ODVmYjhjODMsIDB4ZmVmMWZhOGEsCi0JMHg3Yjk4YTI4YiwgMHhkOWZkNDQ4NSwgMHg2NzNjNGEzNSwgMHgwMjBlZmUyZSwgMHhiNjE3M2YyMywgMHhlZDQxMWQwZiwKLQkweGRlZGUxYTVkLCAweGI2ZjQ4NWFlLCAweDUxZGVmZTQ0LCAweDlkMDM2YWNmLCAweDNlM2QxNjgzLCAweGE0ZTNlNDk4LAotCTB4ZWRmYmVhYjEsIDB4MzhmMDY3ZGYsIDB4OTg1ZDI1MDUsIDB4ZjlkMTU1NjksIDB4NzRlOTU1ZGMsIDB4ZDU3NzM4OWUsCi0JMHg0M2Q0MGE4YywgMHg3NGMxMGQxYywgMHg4MWYzYWYxZiwgMHg5ZGYwYmI5NywgMHhiZGQ5NzJmMSwgMHg2YmI0MTNlMCwKLQkweDIxNmYxZDMyLCAweDU5MjBiOTVmLCAweDBhODVlZjY3LCAweDQ3N2MxZjczLCAweDBlMzE3MThmLCAweDZmNGJlNGNmLAotCTB4ZWQ3MGRjYTIsIDB4YmFlZjhhMzksIDB4NGM4MGZmZGQsIDB4ZmM2N2VmZWQsIDB4OGFiNjY0N2QsIDB4OWY3OTAzYmYsCi0JMHgxYTM2YjJlYiwgMHhiNDZmYmZmYSwgMHgwZWYyN2U0NCwgMHhmNTBlMjU5MywgMHg1ZmIxMjJiYSwgMHgxNGZmODJhZCwKLQkweDgyOWMxOWFkLCAweDc4N2RmNTc2LCAweDljODdkZWNlLCAweDNkNzkzMjkxLCAweGY3NmRmYmU1LCAweDYzNWQ5NTMwLAotCTB4OTkwZGRmMTAsIDB4MjViN2JkN2MsIDB4NmJjNWVmZjIsIDB4YTE4OTFkMGQsIDB4YTliY2VhOTgsIDB4OGQ4NmRhOTAsCi0JMHg2NWYxMThmZCwgMHhkZmNiMDI1MiwgMHgyNWZjNzA4YywgMHg5ODc2MzNmNywgMHg5N2NlOTc5OCwgMHhhZTA5MzNlYiwKLQkweGYxZDNkNjBlLCAweDZlYTNhZTM4LCAweDYzYTNhZDI4LCAweGRlOGUyNThjLCAweDhhZWYxMGJmLCAweGZlNzBiN2NlLAotCTB4OGY4NjMxZDQsIDB4MWVkMmNhNzMsIDB4ZTljMTllMTIsIDB4OWQxN2RmMDcsIDB4ZWJmNGI2MjcsIDB4YmE5ZjJiYTUsCi0JMHg1YmNkZWExZCwgMHg5MjdiYTQ2NiwgMHg0YTk5OWZmMywgMHgxYWJjY2E3NiwgMHhiMjQ3ZWU5OSwgMHg0NWY3ZWEwZCwKLQkweGUyNzQ5ZTQxLCAweDBiZGYwMmZjLCAweDE0MTc3YzBkLCAweGEwZjExY2Y3LCAweDc4NDQ4Mzc4LCAweDliNGFkYjc0LAotCTB4N2JkZmNmMWUsIDB4MDA5ZTgxMzYsIDB4ZGVjZDhiZGYsIDB4OGEwYmQ0MjQsIDB4MGFkYjI2NmQsIDB4NDM3NzhmYTksCi0JMHhlNWI4MDdiZiwgMHg4Y2NiYmJlMiwgMHg1OTIxMjZmYywgMHg2ZTM4YWI4ZSwgMHg3YTIyYzZkMSwgMHhjMzM4MzNhNywKLQkweGRiYjBmZTQxLCAweGZkNDQxZWMwLCAweDRlNGM4ZWU3LCAweGJjMDA5MzNmLCAweGI2ODNjZWY0LCAweDlmZWQwNjNkLAotCTB4YWYxYzE5M2QsIDB4NTI1Yjg1MjYsIDB4MjY5Nzg0Y2MsIDB4M2JiYmY3ODYsIDB4OWMxNDk2NzQsIDB4OTM2YWM3NWYsCi0JMHg0OTllZjUwNiwgMHgwMjdlMzgyYiwgMHgyM2I1MThkZCwgMHgwNTlmYmUzMCwgMHgxMTFlZmQyMSwgMHhkNzJkNjdlZCwKLQkweDdlNDJkNjE2LCAweDkwZWQ4ODEwLCAweGUxOWJjNDcwLCAweDBlOGY5Zjg0LCAweGYxMTlmYzczLCAweGQ4NmZkY2VmLAotCTB4ZjM5ZmU0MjgsIDB4ZjNlMjZjMzYsIDB4YjRjZmZiMTIsIDB4OWVmMGUzNmQsIDB4ZjhmYWI5ZTUsIDB4YTA1NzE4MTEsCi0JMHhjM2EzYzNlMCwgMHhmZDMyNWFjNiwgMHg4OTAxZTBmMSwgMHg3M2Q2MWZmNiwgMHg2ZDhkZTUxOCwgMHhjY2M4ZGNkOCwKLQkweDAwN2U1NDAxLCAweDU4ZDI2M2YxLCAweGU0MjFjNTJmLCAweGU3ODY0ZWM5LCAweDhjZDFiZGY4LCAweDE5N2JlOWUyLAotCTB4YjVkZWQ3YTcsIDB4MGE2ZmUyNWEsIDB4MDFmODUwOWYsIDB4ZWYxZDgzZTAsIDB4YWRmYjJhYzcsIDB4MmJmZjg1ZjAsCi0JMHg0M2UwMDQzZCwgMHgxYmUxNDU3YywgMHhmMDUxN2YwYSwgMHg4MTMzZTE0YiwgMHhjMDFiMzU3OCwgMHg2YTA4Zjc3YywKLQkweGUxNGNmYzRmLCAweGNkMGViODYzLCAweDUxN2YxZjA4LCAweDc2Yjc1OWY2LCAweGFkZmM4NjhjLCAweGU0ZjM5ZjYyLAotCTB4NDBkZmJiOGIsIDB4NDk5ODk0MzgsIDB4MTcwNmI5NmYsIDB4MTJlMDkxYjMsIDB4Zjg0ZDY3YTcsIDB4NDdjYWVhM2UsCi0JMHg0MDJjZjcwYSwgMHg0MTZkZmM3YywgMHgzMzFmZWEzYywgMHgxOGY3ZDQ0YiwgMHg3ZDQ4YmU3ZiwgMHg1MmNlNzE3ZiwKLQkweDU5YzVmZGY1LCAweDg0M2UzZjRiLCAweDUwODZhNzdlLCAweGJmZGMwNGM3LCAweGYzM2RiZjUzLCAweGZlNTBhN2UyLAotCTB4OTBiZGJmOWYsIDB4OGJlY2VkY2MsIDB4YjhlMWNmZjUsIDB4M2NjNDgyY2IsIDB4OTZiY2Y5ZGEsIDB4ZGNiZTQ5ZTksCi0JMHhmYzMwZjQyNiwgMHg5NzMyZmI4NywgMHg4YTJkM2E3MSwgMHhmMjhhM2IwZiwgMHgyOWMyMmU2ZiwgMHg2MTFmZGYwYiwKLQkweDg5YmZjZjA0LCAweGY2MjUzOWZkLCAweGY3MzU2OGE3LCAweDI0Yjg3NDNiLCAweDVkY2M0M2YyLCAweGFkNzRlODI1LAotCTB4OTdmMjVlZmEsIDB4MzgzZGFjMzEsIDB4Zjk3Zjc3ZDEsIDB4YzRhNGRmY2IsIDB4ZjcyYjVkMjEsIDB4Zjk2YjFkOTUsCi0JMHhlOTY5NjY3ZCwgMHgxYzVmZDI2MSwgMHhhZTUwZmJjYSwgMHg5NmExZjc4MCwgMHhjZjdiZjJiNiwgMHhjNGZiZWFlZCwKLQkweDNkNzZkOWMxLCAweGI3MTgyOWY5LCAweDFkYTZlNmEzLCAweDFiMzVmMWU0LCAweGIyOGEwYjI1LCAweGJjNWU1MTYyLAotCTB4NTdkZDUyNTYsIDB4ZGY5MzI0N2IsIDB4ZDBjYzZiMTcsIDB4ZmEwYmJmNzIsIDB4MWYzODk0OWMsIDB4N2MwNGJlM2YsCi0JMHgxNWNmZWU4MywgMHg1ZmFlMWM2ZiwgMHhlNzQ3YzdlMCwgMHg2OTc5ZjI4YSwgMHhmMjk1NGExYSwgMHg1NzFlMGNjNiwKLQkweDAzNDQ4YzFhLCAweDRiNGZhZWZkLCAweDdlMjdjZmQwLCAweGE4YmYyNTY3LCAweGRhNmU3ZjUyLCAweDM3ZTgzNTg4LAotCTB4N2YwMWJiOTgsIDB4ZmVkN2M3OWQsIDB4NmE1YTk5MzcsIDB4MjZmNDI4ZGYsIDB4ZmNmODBkZTcsIDB4ZmMyYTM4YjUsCi0JMHgzNzlhMGVmMywgMHhhZjY1ZDNkOSwgMHhkZjE1N2FlZSwgMHhkY2ZiMmZiZCwgMHg2Y2E2NzI0MCwgMHhjZjVmMzg5OCwKLQkweGE1NGVlNzcwLCAweDlmN2U2M2YzLCAweGY3ZWM1MmFhLCAweDg0NWY1ZGI4LCAweGQ1NTA5ZGEyLCAweDg2NzFkZmM4LAotCTB4Y2FkMzAzYjQsIDB4ZWY2NDI1NjUsIDB4MWU4MGRhNTcsIDB4Zjc4ZmFmYzIsIDB4Y2ZkNWY3N2UsIDB4ZDk1ZmI5NDMsCi0JMHg5ZjQxYWIxNSwgMHhhNTlkZjg4OCwgMHhjOGFmYzZjYSwgMHhkZWZjYTBlZiwgMHgyYWJiNjA1MiwgMHg2ZTUwZmJlOSwKLQkweGZmOTg1YWJmLCAweGVkZTQxMWVmLCAweDU0OWQxMWQ3LCAweGI5N2I3MzM1LCAweGYyMTVlZjZhLCAweDVmZWQ1NzliLAotCTB4NjNlOGU5MWQsIDB4MTNkZmQ3ZmQsIDB4ZThlMmFiYjEsIDB4Y2I4NmQ4YWIsIDB4MDZmZTBmNzQsIDB4NGM5ZWVhZjEsCi0JMHhlZGMzZWVmMSwgMHg1MzhhNzZlYywgMHgyYjhhMzJkNywgMHgyZWJiZjZiYSwgMHg4ZDFmZTRlZSwgMHhhY2RhYWM4ZiwKLQkweDVlYTA3OGExLCAweDllMWZiNWFkLCAweGZiOGI3NWM3LCAweGJlZjU4MTUxLCAweGQ3NzZlNGNkLCAweDdjMjNhMDI1LAotCTB4NDFiYmEzNzcsIDB4ZWU5ZGYzYTYsIDB4YWJiZmVlMDYsIDB4MTViYTc4NmMsIDB4ODI1NmE1ZWYsIDB4NWVjMzBjZTEsCi0JMHhkOTU0M2ZiYiwgMHg3ZmEzMzMyOCwgMHgxZmM2MWFkYywgMHg5ZTc4ZGM0NSwgMHhlODQyYmJlNSwgMHg4ZjUyOTgxZCwKLQkweGY5ODdhZjY0LCAweDM0YmQ4MmY0LCAweGM3M2U2ZmMwLCAweDFiOTU1ZTA1LCAweDJmYjRiOTNjLCAweDAzODdmZTYyLAotCTB4OTZkMjlkZjQsIDB4MmI5ZWU5YTcsIDB4ZmQyMmViZDQsIDB4OGNjMThmZTQsIDB4MWNmNTkzOWYsIDB4NmU3Njc5YzUsCi0JMHg1YWU3NDkxOSwgMHg5NTNkOWVhNSwgMHgwODZjNzdlNCwgMHgwYjk1NzhhNiwgMHhlOWJkZjUzYSwgMHg1M2JjNjI1MywKLQkweGFmZWUzYzk5LCAweGIxMjRlMzEzLCAweGU5MzJhYmZkLCAweGE0NGYzOGE3LCAweDNhOTIwYmM3LCAweDY4YjRlMzhlLAotCTB4NmRjMDVhNzcsIDB4YTU0YmEwOWQsIDB4MjNhN2E5N2UsIDB4OWZlYTA5MzQsIDB4ZDI5OGZhNmQsIDB4ZDRiZjUxMmUsCi0JMHg3Mjg1OTZkYywgMHgzMDYzNmNmMywgMHhkYjNkNjNkZCwgMHhiN2ZjODdmOCwgMHg5ZTRiYmM2MCwgMHgzZjI1ZmQzMSwKLQkweDc0YjI5MmZhLCAweDg4YjYzZjdjLCAweDA4ZWViOGZiLCAweDQzYzRjZjcxLCAweDg4NmNlOWViLCAweGFjYmVkMDk1LAotCTB4OWQ1ZWYxMTAsIDB4NmE4N2FmOGQsIDB4ZmY1ZDdlODgsIDB4NGQ1ZGVmZGUsIDB4YjE1ZGVlYmYsIDB4ZmVhMDQ2ZWYsCi0JMHhiZDU3NmM2MiwgMHhkNWJmZjYyYiwgMHhmZjI4YTU3ZiwgMHhlMzE0MmE0NCwgMHhiOWM1ZThmNCwgMHgxMDFkZmYzMCwKLQkweGUxM2JhMDhiLCAweGNjM2Q5ZDhmLCAweDdmZGUxMGZhLCAweGRmZjAxZjY1LCAweGZmYmQwMzBkLCAweDY2OGZiNDM5LAotCTB4ZWM4MjM5ZmYsIDB4MGZmZGZjNGYsIDB4MjFmMzdmY2MsIDB4M2Q5YjJmM2YsIDB4ZTg5NWYwNTIsIDB4ZDdmNDFjZjYsCi0JMHhmZDczYzQ3NywgMHgyODE2YjljMSwgMHgwZTVhNDAxMSwgMHhmODAyZTVmOCwgMHhlNjFhZGQzOSwgMHgyY2QwZmM4MCwKLQkweDAyNzUzZjZlLCAweGUxODdlYmZlLCAweGU1OGUzY2M4LCAweGY4NzdkODE0LCAweDM1ZWI4YzllLCAweDRjZWM4ZTdlLAotCTB4YmRlMGE2ZjAsIDB4NGYxMTRlYmUsIDB4YTZmNzBjZTAsIDB4MTdiZjQwNDQsIDB4YTczODllMDUsIDB4ZGZmYzUzNzgsCi0JMHhmNTZlNzRhOSwgMHg0NWNkM2M1MiwgMHhkZjg3M2YxMSwgMHgxY2U3OWZkMSwgMHhjNDc1ZWJjMSwgMHhkZWU4YmE1YiwKLQkweDg2MTBkZWM2LCAweDhkZTZhYWZhLCAweDhhYzNjMjEwLCAweDBkNWI0YzU3LCAweGE4ZDI3NjdlLCAweDVmMGZhZTJjLAotCTB4YWQ3N2YzZDQsIDB4N2NmOGRiNWQsIDB4NTIzNzQzNGEsIDB4N2UwNTE3M2YsIDB4YTQ2ZDA2OTcsIDB4ZjcxMjlkZjksCi0JMHgzY2Y1NGI4MywgMHhmNDYzYTFkZiwgMHgwZWNmN2M5ZSwgMHg4NWNmNmVmZSwgMHgzODdkYjY5OCwgMHhlOTFkODVjZSwKLQkweDExZGE2NzE0LCAweDQ0ZDA1ZWVmLCAweDQ5N2M3OWRmLCAweDE3ODM0ZWQ5LCAweDQ3N2U3NWU3LCAweDJhMDNkZDA4LAotCTB4M2E2NmVkZjgsIDB4MzNhZGVjNWYsIDB4Y2VmZmM4NDgsIDB4Y2Y3NDYwMGYsIDB4MDBmZDdjZTEsIDB4MjVlN2Q3OTIsCi0JMHhjZjM3ZjkyYiwgMHhmZDQxMWZiZiwgMHhhNTJmNTU5NSwgMHhjMDY1MmNmYiwgMHg4NGVmNTAyNiwgMHhiNWY1MDBiNCwKLQkweGM3Y2ZmNWYzLCAweDdlNDJmZDIxLCAweDZjMWRlNjJkLCAweDIxNWZlY2UzLCAweDI2MGY2ZTlkLCAweGNlYzJmMzNiLAotCTB4OWZmYmE0N2YsIDB4ZTA2OTI4ZjcsIDB4OWZiMjg5YjksIDB4NTllOWY3Y2EsIDB4MmU5ODZlZGMsIDB4Y2IyYjM0ZTAsCi0JMHg4MzJkY2ZjMiwgMHhkMDI2Y2YzZCwgMHgwMzdkMzhmYSwgMHgwMDJlYzk5YywgMHg3MTc3YTI3YSwgMHgyMzlhNzk0ZSwKLQkweGVjYTdlODI1LCAweGNhM2IxMDhkLCAweDM3OWQwZWY3LCAweDg3MDQwZmU1LCAweDMwYmJmMTYwLCAweGYzYzJlYzhjLAotCTB4MmVjODIyZGIsIDB4ZmE5YTJkMDcsIDB4OTMyZGJmMzksIDB4Mzg5NTQzZTIsIDB4YWJhODQ5OTMsIDB4MTI2NjNlZDEsCi0JMHgyZGU0ZjM3YywgMHg3MDZlZjQ1OSwgMHhlMWM1MzA1ZCwgMHhiYjdlM2Q5NCwgMHg2NDRlZTI4NiwgMHhiZDk3NzdhZSwKLQkweGM4OTI2ZjNhLCAweGE2OWNmMWRiLCAweDU2YmY1N2VjLCAweDQ5ZmU0NWUwLCAweDI5ZDQ4ZTI1LCAweGUzYzU2OGY4LAotCTB4YjhjM2Y1NzcsIDB4OTk2N2Y2NWIsIDB4NjhhZWUzZTIsIDB4MjA2MzljNzksIDB4MDk2NDc2NWMsIDB4NDVlZmJhM2UsCi0JMHhlMDI3NWJhMiwgMHg1MDJlZmUzOSwgMHgyZjAzODhiOSwgMHgyY2ZkYzlkZiwgMHg3YWVlNmJlNSwgMHg1MWUzZjg4ZSwKLQkweGRmMzhjMzFkLCAweDQzYTc5ZThiLCAweGI0ZmVlMWZkLCAweGRlZDdjN2U4LCAweGExY2JmNTQ2LCAweDQxZmY2ZjNlLAotCTB4OWI2N2NkMjgsIDB4MDM5MmUyOGUsIDB4ZGI5NmViZjcsIDB4YTVmZjk0ZWYsIDB4ZDAxZTY1ZjYsIDB4MDczOGZhMDMsCi0JMHgxZWRhYzJiZSwgMHg0MGY5MWNmYiwgMHhhMmU2Yzk4MywgMHhkN2I3MWU1MiwgMHhlMDJjZjNhOSwgMHhjNDRjMTlmNywKLQkweGM0YzMzYTFmLCAweGYzNTY4OWVmLCAweDM1ZjI4MWY4LCAweDcxNDc3ZjEzLCAweGQyYTdjNzBhLCAweGVlODVhNjFkLAotCTB4MzZlOWNmYmUsIDB4MTE1Y2ZlMGIsIDB4NzQ4N2ViNjEsIDB4NDFmYjAxNTgsIDB4YmYxZjA5ZjcsIDB4YjM3NWVlOGIsCi0JMHg3ZGE4ZWIzZiwgMHgxMzFlN2FlMCwgMHhlMWQxYWVlZCwgMHhkY2ZmMWU2ZSwgMHg0YmVmOTAzOSwgMHgyNGE5YWJlNywKLQkweDM4YzIzYTc3LCAweGM5N2NjMzVlLCAweGUzMGNlZDRlLCAweDYwNDgwNTI5LCAweGUzODU4ZGRjLCAweDBmMThlNzQzLAotCTB4ZDI5ZGRmZDksIDB4NzQzYjRhMWUsIDB4NTJkOTVkYmMsIDB4NWUxNzdiZjEsIDB4NDRlMjM3MWUsIDB4NzdjNDRkOWMsCi0JMHhhMWI0MzY3NywgMHgzOGZjODFiZSwgMHg1ZWE1MDQ3NywgMHhlZmY1Zjg0MywgMHg5MzFlMDM4NiwgMHhjNTkzZDc3ZCwKLQkweDdmMTI5YmU1LCAweDkzZDZlZjQzLCAweDQ3YTNkMzVmLCAweDdhMTBlYTdlLCAweGZhZTFiMzlmLCAweDdiYTAzM2RmLAotCTB4YzUxMjBkZWYsIDB4ZTk1OWZmMWQsIDB4OTRmZmM0NDcsIDB4Y2FjZjBlNzMsIDB4ZTM5ZDEyNWQsIDB4YTQ3YWFmOTcsCi0JMHg3Y2JlZjExNCwgMHg0ODk5YTZkMSwgMHhjYTNhY2EwZiwgMHhlZDAwYWNiNSwgMHhhNjQ5MGVhZiwgMHgzZjVkODBmOSwKLQkweGY1YzY0YTY3LCAweGZkZjAyOWUzLCAweDUxM2ZkMDRjLCAweDgwNjcyMjhlLCAweDU5NjU0ZWQ2LCAweDZkOTUzZDE1LAotCTB4YWI5Y2ZlODQsIDB4NGUzNDBkYTQsIDB4ZjI3NzYyYmMsIDB4YzI3MDI5ZjUsIDB4NjM4YzFmNzMsIDB4MzcwMWZjNTQsCi0JMHhjZjMyYmY1YSwgMHg1N2E3Y2QxYiwgMHg3ODhlYTFmMCwgMHhlMzQ2ZWZlYiwgMHgxMzI0N2Y3ZSwgMHhmZGYyYjkzZiwKLQkweDNmZTE3ZWM4LCAweDJmZDFiN2EyLCAweGUxZmQyYTU5LCAweDExZDQxMjdkLCAweGM4ODM5ZmExLCAweDA0NmUzMGNmLAotCTB4M2NjMGJiNmYsIDB4ODA4N2U4NTMsIDB4ZDVhNmUzN2MsIDB4MWE0M2YzYTksIDB4NDY4Y2Y5ZDQsIDB4NDVhYjNlNzUsCi0JMHhhYmJkYjc5ZCwgMHhlMzE1OWZjZSwgMHgzYjQyNzAyYSwgMHg2YzNkZWYxOCwgMHhkMDFmZjcxNywgMHg0YmZiYzYwZSwKLQkweDFlNjMwNzY4LCAweGQxNGM2MGVkLCAweGI0NzJjNjBlLCAweDc2OGYzMTgzLCAweDBlZDFlNjMwLCAweDFkYjllYWI2LAotCTB4YzFkYTI5OGMsIDB4OGMzNTllNTgsIDB4Y2I1OWM5YzMsIDB4MGZiMDkwZmQsIDB4OWY4ZjNhNzYsIDB4MDI2ZWZjYTEsCi0JMHg4ZmE4ODVkOCwgMHhiZDIyMGU5NiwgMHhhOGJlN2QwZSwgMHhlZGZmZjQzNywgMHg0Nzg4MDVkNSwgMHhkNDQ3MTBhNiwKLQkweGMzOGMxY2IwLCAweDgzMTM1YjZhLCAweDkzZTIwM2Y1LCAweDY2NGMyMzljLCAweGFmYjQzN2Y0LCAweGQ1MDZiYjNlLAotCTB4NjNiMzBlOTAsIDB4ZTI1N2Q2MTAsIDB4YmU5NjJhOTYsIDB4ZDZlZmJmNDMsIDB4ZTdmYWRjYmUsIDB4MjI3ZGYyOWYsCi0JMHhmYmYyODdiZiwgMHhiZWY4NjU0MywgMHgyZTdlNGNiYiwgMHgzOTFkZmYyMywgMHhmN2FmYjE5YiwgMHg4Y2UzMDNhMywKLQkweDIyZjg5NWZlLCAweDM2OGU4YWJiLCAweDUzZmU1YzEyLCAweDdjODMxM2Q3LCAweDQ2MWRhYmZlLCAweDJiZjU2NzdhLAotCTB4NGQ5MzFmNzEsIDB4ZTc3ZWE4YjcsIDB4ZGU3OWRhZjEsIDB4Y2I5ZDEyOTMsIDB4OWMyYzNkZGMsIDB4MDYxZWY3ZGEsCi0JMHg3OTBmYmJmZCwgMHhkMGYzYTRhYSwgMHg5Zjc3ZWY1OSwgMHg0OTA2ZGU3OCwgMHhhNmRjZTM4MywgMHgyNzY0NzBlNywKLQkweDFjNmYxMTY0LCAweDRlYTc3ZmNhLCAweGY1MTUzMWNjLCAweGE3ZjliZjczLCAweGY4NTQ4M2JiLCAweDc4N2I3NDMzLAotCTB4MGMzNWVmYzAsIDB4ZDYxZmQ1NTQsIDB4N2JmMDEwOTQsIDB4YmZkNDQzMGQsIDB4ZjJjMGYwMjMsIDB4NGY2NzY4MDMsCi0JMHg1NTUyMzBkZCwgMHg2YmQyMGFlZiwgMHgyOGQ1Y2EzNiwgMHg4NWM1OTdlMiwgMHgyN2M0MDU3NywgMHg0ZjdlYWE4NiwKLQkweGE3YWU4OTZmLCAweGJmYTg3MWUzLCAweGM5MGM2ZjY0LCAweGI3OTg2MjgzLCAweGYzODhhNDdkLCAweDQ5YzdhNTgxLAotCTB4YjdjNDM1YWUsIDB4M2RmYTI1NmIsIDB4ZGU0Mjc5YjIsIDB4Zjk2YWE1YjAsIDB4ZTdlNWEyNWIsIDB4MzY0NmY4N2EsCi0JMHhiZGNlODNlYSwgMHg4NGZlZjQ1MSwgMHgxNjI1OGY4MiwgMHg4MTFiMGY2NiwgMHg1OTZkYmNmMSwgMHhkZTFmYjQ1ZSwKLQkweGYxMTczOTdmLCAweDhkYWU0MmFhLCAweDc4MWJkZmMzLCAweGMzNmY3MjU0LCAweGMyMTdhNzhiLCAweDAxZGU0NGY3LAotCTB4MzhkNjNmZGYsIDB4MmYwZjExMmEsIDB4M2EzOWNlMWUsIDB4YjE3Y2UwMGEsIDB4NGI3YmE2NDEsIDB4ZTQ2ZjNhNzEsCi0JMHhmZjBmYjMwOCwgMHgyMDk2NzRlMiwgMHg4ZGRhZmZkYywgMHhmNDFiZmRmYywgMHgzZWUxYzk1YiwgMHgxOGRkYThmYywKLQkweGY2NjQ5NDExLCAweDg3YzE1YmFkLCAweDQxZGVmNGRiLCAweGFmNWQ3MDRiLCAweDAyYWY0ODk5LCAweGQzZTQ5YTNkLAotCTB4ZTkzMmMzOTUsIDB4MjQ2MzI1NmYsIDB4NjJiOWU5MTcsIDB4NGI3ZGNhOWQsIDB4ODVhNzNkNjUsIDB4NzhkMmM4M2QsCi0JMHhlZjhhOGZiZiwgMHg2NDBmZDMxNywgMHhjZTFkNjE1OSwgMHgxOTM4YTZlYSwgMHg2MWE2YjhmOSwgMHg2M2E0MGM1YiwKLQkweGMzNzU4ZThjLCAweGE4ZWZlMDA2LCAweGVmOGE3ZjI1LCAweDIyN2Q5NDk3LCAweGY4ZWY4YzMzLCAweGQwOWVlNmJhLAotCTB4ZGNjZjUwM2IsIDB4ODI0ZGIzYWQsIDB4NWYxYmUzZmMsIDB4NjU5NWZiYTYsIDB4ZWQxZWI3NWEsIDB4YjUxZDkyZDIsCi0JMHg1ZWU2OGY3NCwgMHg4MmQyNmVmMSwgMHg5ZjY0NDVlZCwgMHhjODhiNjQyZiwgMHhjNGE3M2NjZSwgMHg5NDc4MGI5ZCwKLQkweDU4YjY5NThjLCAweDgyM2RkZTYwLCAweDc3ODg5NDZmLCAweGYxZjc5NDJiLCAweGVmZTc2Y2FlLCAweGI4NTAzZjNlLAotCTB4ZjVlNzdlODcsIDB4OTAyZjUxNjUsIDB4OWMzZjdhNWUsIDB4ZmQwMDM3OWEsIDB4ZjZjOTFlNGQsIDB4MWY0Y2Y3NjMsCi0JMHhjMDNmYTBjNCwgMHhhZDU3YTk4NywgMHg3NTcwM2U5NCwgMHg5ZmI5ZDkwOCwgMHhhMTg0YWZlMCwgMHhiMDA4YzhiYywKLQkweGYxZTQzZjc3LCAweGJiZjhiZDE5LCAweGVmNzhmMTQ4LCAweDJhN2ZkYmQyLCAweDNhZGJjM2VlLCAweGMwMGE4N2RhLAotCTB4NzgyMzUxOWYsIDB4OTA5ZGMzM2MsIDB4ZGY1NjhlMTYsIDB4MTcxYWE5ZjcsIDB4ZTlmN2MyYWMsIDB4YTA4ZThmY2MsCi0JMHg3YzE4NjliZiwgMHg2MDdmOTdlZSwgMHhmZWFhYTI1MiwgMHgwZDBjMGY0MywgMHhiZTExODdhMCwgMHg3NDJlNzRlZiwKLQkweGI0NGUyYWE3LCAweDRhY2I5OTYyLCAweGU0ZjFmNGY3LCAweGQyMWNiZmNlLCAweDEzNjc4NDY1LCAweGQ4MmJlZDU0LAotCTB4NzhiZDVmMTQsIDB4NDViYTNiZmUsIDB4N2E2ZDdmODQsIDB4MzQ0YTk3YjQsIDB4YmE3ZDZlM2MsIDB4Yjc5NDQzYTMsCi0JMHg0NDJjMzk1MywgMHgyNWI3OTc0NSwgMHg3MmU1M2VkYSwgMHg4M2UzYzc1MSwgMHgzYTdiMWY4NSwgMHg5N2Q4OWRmZSwKLQkweDE2OGQ4NDVjLCAweGM5ZWZlMmUzLCAweGExYzFmZmExLCAweDU0ZGEzYmQ2LCAweDNmYzIyMjcxLCAweGZkYzY5MTU0LAotCTB4MzZhZTE1NDMsIDB4MDFkZjllM2QsIDB4MDBiMWI1ZmMsIDB4ZmM4ZGNhOTIsIDB4NmZhODA4NWQsIDB4ZjllNzBkOGMsCi0JMHg3ZmFlMjM2NSwgMHhjM2ZiMGYyZiwgMHgwZjJhYzg3NywgMHgyZjQ4NDVjYiwgMHhmMTJiZGY4MSwgMHgwZjljMDI3ZCwKLQkweGU5NDI3M2ZhLCAweGJmZGU3MTlkLCAweGNmYzE1N2U4LCAweGMwOTQzOGMwLCAweGI1ZjFiMjdlLCAweGRmN2ExYzlmLAotCTB4OWFhM2RlOGYsIDB4ODllZmM4NWEsIDB4Zjk5MzNkM2IsIDB4M2MwMGZiYmQsIDB4MTVmZGY4NTMsIDB4ZmQxMmNmN2MsCi0JMHg0M2JlMWZkYiwgMHg1ZGJiZDY3OCwgMHgwMGI3NjM2NywgMHhmNzNiNGE4ZiwgMHhkZmUyMDY3NywgMHhiZTBmNTgwMiwKLQkweDUxYTBiODZmLCAweDVlMjViOWIyLCAweGZmZjJlMTBmLCAweGY0ODJkYzAxLCAweDAwODAwMDM2LCAweDAwMDAwMDAwLAotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWJjZGZmMDAsIDB4NjU5NTU4MGQsIDB4ZjNiZTdlOWEsIDB4NzAwZTAxYzcsCi0JMHgwNDI3ZTU0MCwgMHgwOTRhODgwZiwgMHg0NDEwMWRmNiwgMHgxODI5M2I1MywgMHg1NGRhMTU5NSwgMHgwMjFmNDRhMiwKLQkweDlhMjgyNGZlLCAweDJlZGI1MmVkLCAweDRjNzM1MGM3LCAweDRhOTc2ODY3LCAweDU3YTNhYjFiLCAweGI1YWNjZDM5LAotCTB4OGNjZTlhOTgsIDB4N2U5MjdiYmIsIDB4YTc3MmIyNjgsIDB4YTlhZWFlNjksIDB4NjZiNjYzYjUsIDB4M2I0NDhkYWUsCi0JMHhiNWI0ZDQ1ZCwgMHhkZmJlZmRjZiwgMHgyM2JlZjljNywgMHhiNWNjZWQ0YywgMHhkNzE3NWMzZiwgMHhmZmY3OWU3MywKLQkweGU3ZGVmZTdkLCAweGJiZjc5ZTdkLCAweGM4OTEzMmEzLCAweDFiZWZlMjRkLCAweGZmZTU2ZmZlLCAweGQ1YTIxMmVjLAotCTB4NDQxZjlkMDcsIDB4YWJlNWEzMGEsIDB4YWUwZGVjZmIsIDB4NjBmZDY1Y2IsIDB4Y2JmNWM1ZGEsIDB4YzMyYTYzZjEsCi0JMHg5YzI4NGEyMywgMHhkNzA3NzBjNywgMHg0ZDVkYzY5YiwgMHgyN2I1M2VkYiwgMHg5N2YxY2EwMywgMHgzNDYzZmM2OSwKLQkweDI4NGE4M2MzLCAweDFlM2M1Y2E0LCAweGNhOGQ5MDU1LCAweDBjNjFkNjg5LCAweGYxYzBkMTFmLCAweDNmNjg1ZDNiLAotCTB4YWYyMTRiYjAsIDB4YTA5ZDlhMjIsIDB4ZDQxZWI5NzQsIDB4NjJiYmRlYjcsIDB4Yzg2MTRkM2UsIDB4ZjVlNmNjNjMsCi0JMHgxMTc0MWMyZCwgMHgxYjhkMTI5NSwgMHhlNmU1YzI3ZiwgMHgxNDg3ZmQ3ZSwgMHhiYmY3MGY3NSwgMHhjYTIxZDA2NSwKLQkweDEwZTQxZDViLCAweDZhMjFhY2ZiLCAweGY5YmRmODY3LCAweDlkYzFkMTE3LCAweGVmZWIyNjlkLCAweDYwZjM3ODY1LAotCTB4YmIxN2U4YmEsIDB4ZTg3YTIxY2UsIDB4NmU4OGI5ZjQsIDB4NzY0NWMyNzQsIDB4Nzk4ZGZlZDMsIDB4YTIyZmYxZjUsCi0JMHg3MWZmNGM1MywgMHgxYWY2ZTllMywgMHgwYTI3NTEwZiwgMHg3ZjBjYjhiMiwgMHg4ZmI5MDI1NywgMHg4NjY4OGNhOCwKLQkweGNjZmEzNDlhLCAweGIyZWZjMjY0LCAweGYyMWU3ODZmLCAweGEzZDNhMGYwLCAweDUxMjE2MmVkLCAweDhmMGM2ODkwLAotCTB4YzdhZDIyZWIsIDB4ZDI1OTNjMDMsIDB4YjhlOTJiZDksIDB4NDhjYmU5Y2UsIDB4OTlkZmUyMmQsIDB4M2JmYTU2YzksCi0JMHgzNzI4Mjk3YywgMHg2MWQ4NjljNiwgMHhhM2QzMWYyMywgMHgzZDM2M2VjYSwgMHg4YzY4ZTNjMiwgMHhjOGI0M2U4MywKLQkweDM0NWYwMzZiLCAweDFiY2RiYzdkLCAweDRjNDZlN2M3LCAweGNlNGRiNGZkLCAweGI5ZjZlMjc0LCAweGQ4MDk0NjFiLAotCTB4NTc0ZGVmMTAsIDB4ODM2MWJlYjksIDB4ZjBjNDI2YmQsIDB4YTQ2N2VmODMsIDB4N2QxY2IwNTcsIDB4N2EzOWM5YjAsCi0JMHhjMWYxMGYzZSwgMHhhOTczNTNkZCwgMHg4MDk1NzgxOCwgMHg1YjhjMWZhNywgMHhiYzVjZjIxNCwgMHgyNmQ1MDZhZiwKLQkweDM3ZmFkMWU4LCAweGY5ZGFlNGVmLCAweGUzYjYyN2U3LCAweGZlNzg4YmM5LCAweDkyODc0ZDk2LCAweDU1OWM3ODJiLAotCTB4ZjcyYWRlOWIsIDB4NmRkZDEzZTYsIDB4ZGU1NGRhZDMsIDB4Zjc2NTM5ZmYsIDB4ZTVlODJmNWUsIDB4ODZhNTNkZGQsCi0JMHg1MjAxNWRjNywgMHhkOGVlNWYzMCwgMHhkYzQxOTU1NCwgMHhkZWViZTVhZSwgMHg3OWUzYmRjNywgMHhlOTljMWJiZCwKLQkweDhmOWY5NjM2LCAweDNiMjc2ZDdmLCAweDI3NTljZmNiLCAweGUyNGNiZDA1LCAweDdlNTJmMWIzLCAweDE4OTUzZWNmLAotCTB4M2Y3OTY0ZWEsIDB4OWUyMDUwYWIsIDB4NWZkYTU3Y2IsIDB4NWI3MTgyOTgsIDB4NzU4ODhlM2EsIDB4YmQxZGIyYWMsCi0JMHhiNWZmZjMwNSwgMHhjMzJkZTc5YiwgMHg5OWJkYTFiYywgMHg0ZTBkNTc5OCwgMHg4NmRhYmNjNCwgMHhkMTVhMjkwOSwKLQkweGIzNWFmY2M4LCAweDc1ZDA0NGEzLCAweDk5ZjcwNzZmLCAweGE4ODE3NDQ4LCAweGJhN2I3YzFhLCAweDlmZjAyZGMzLAotCTB4NTlhMTMwNzYsIDB4NjQ3NWY3ZDQsIDB4MGVkOWZjMGEsIDB4MWQzZDgwOWYsIDB4YmJiY2EyODUsIDB4ZGRmOTJiYzgsCi0JMHhjNzVmZWZkOSwgMHg1MGU3MDRmMywgMHg3YzA3OWI2MSwgMHg3ODNhMTRmMywgMHgwOTJhNzdmZCwgMHhhODAyOWM2YSwKLQkweGY3YzE3ODY2LCAweGZmMDRiMzI3LCAweDVkODg3OTBjLCAweGEyN2VhY2NmLCAweDVlN2M5MzI2LCAweDI2YTZlODM5LAotCTB4NDU1ZWZjOTMsIDB4YWU3YzE2YTksIDB4YmVkMmNiM2IsIDB4YTk2NzliY2EsIDB4NTJmMzNhYmYsIDB4M2UzNWZkNGIsCi0JMHhhZWJmMDViZiwgMHhmZGE1YmE3MCwgMHgxNjU1ZWFmNSwgMHg2YjhhYzZmYywgMHgwNDE3ZWQyYywgMHg5YmYwNTgxNiwKLQkweGVkMmQ2YmFhLCAweGIwNjlhZTZmLCAweDY4YmFkZmQ0LCAweDU2YmVhNWE1LCAweDk3YzE2YjViLCAweGQyZGJiOGFjLAotCTB4MGRiNmI2ZmUsIDB4NzkwMGZhOTYsIDB4NzI3MmM0MWQsIDB4NjNlM2Y5OTQsIDB4ZjMxM2ZmYmEsIDB4ZDdjZWYwMDUsCi0JMHg3Y2NjNzgyNywgMHhkNmQ3Mzk5ZCwgMHhkYzhjMzNkNiwgMHgzMmRjODYxZSwgMHgwN2Y1ZGU3ZiwgMHhlNDdjODM5ZSwKLQkweDMyMWNhNGQ4LCAweDUzY2IxMDBjLCAweGY1MTNlYWFmLCAweDMwNTYxNGQ5LCAweDJjYmQ5YjBmLCAweGJiNmM0ZGM4LAotCTB4ODk5OWZhZDgsIDB4MzFmMzNlYzcsIDB4N2ZmZDczMGYsIDB4ZjZjMWM4YjEsIDB4NjNiNGU2NjAsIDB4YmYxOWUzYTUsCi0JMHg5MTZmYmZjOSwgMHhjY2M4ZWQ4MywgMHgwNjdkOGUyYiwgMHgxOWZmMGRmYywgMHg1ZGM0ZGY4OSwgMHhmNmZlZjA2NywKLQkweGYyMGEyYzM3LCAweDk5NWU2NzNhLCAweDNkNjU0ZGJmLCAweGVhOWQzN2E0LCAweDdjYjIzNDUzLCAweDBlNGRkZjYyLAotCTB4MzBjMDZmYjksIDB4MzFlMDIzY2IsIDB4MTdjMDQ3OTYsIDB4MGE5YjFlNTksIDB4Nzk2NjVlODgsIDB4NTBlYmVjMDQsCi0JMHgzYjJmZjk0NSwgMHhkZTNjMDQyYSwgMHg4ZGYwMTAxMSwgMHg0ZjAxNmE4ZSwgMHhmODA4ZDQ3NCwgMHgwMjQ1OGVhYiwKLQkweDEzNDNiYWZlLCAweGIxZDM3ZWZkLCAweDNhNzdjMDQyLCAweDZmZjk0NGRhLCAweDdjMDVkYTNiLCAweGNhMjgyM2FmLAotCTB4YTExNTU3ZGYsIDB4ODIwMmJjZmYsIDB4MDMzOWMyZGQsIDB4ZjZlZDVkZjksIDB4MmU3Y2VkODQsIDB4ZjllNzExZDAsCi0JMHhmYWNhYmIyMSwgMHhlZWQ4MDRhZCwgMHhkZjE0ZGQzMywgMHhkODYzYWE2OCwgMHg0NDkxNDZkOSwgMHg5MWM0NjVlOCwKLQkweDhiZjk4NjdhLCAweDM3ZWRjMzlmLCAweDc0MWQ0NzZhLCAweDFiOGYxOGM2LCAweDM4MWYxM2RmLCAweDM0NDJiYjA3LAotCTB4MzEyNjdiZDYsIDB4MWZjMDdlNWEsIDB4MDNlNTA0ZjgsIDB4MjUzOWY1MDUsIDB4M2ViZDlmY2MsIDB4ZjlmMDUzZWQsCi0JMHg0ZGM2OTJlNiwgMHhhZTM3NmMyOSwgMHgwOWNkYWFmYywgMHg0NmRiNzkzOSwgMHg4ZjkzODYyYiwgMHhiMjNlNWQ1ZSwKLQkweDYzOGMxNDFkLCAweDI5YjgxNzdlLCAweGYwMjY5Mjk4LCAweDBlNjE4YjgwLCAweDg4ZWVjMzk3LCAweDAxNzdkZTNmLAotCTB4ODFlNDNlNjAsIDB4Yjk2M2U1MDgsIDB4YjY3MGNkZGUsIDB4ZjEwYTc5M2IsIDB4ZTVjMzk0ZjksIDB4MTQyZjIxNzYsCi0JMHhjMjdhYzg3MCwgMHhiNDFlNWM3OCwgMHhhOWU3NDVhNSwgMHhkZjYxMjQxYSwgMHg4NDcxNmQ2NiwgMHgxYzkyMWY2MCwKLQkweGM4OTViNjE0LCAweDcyMjVjOWY2LCAweGRjYjNlMDVlLCAweGU1ODU3ZTNkLCAweDQ3OGI1NjY0LCAweDMyN2VmMjBkLAotCTB4MjI1NWRlYjgsIDB4MGNlYzA3ZGEsIDB4ZjczZGZjOWYsIDB4NTE0YzIyOWIsIDB4ZDQ0NGExMzAsIDB4YmQ3MmY1OGIsCi0JMHhhMGQ1NDc1OCwgMHhjZmY0MDE0NiwgMHhlZjRlMzUyNCwgMHg0MWY1OTZlZiwgMHg2YmM1OWZmNCwgMHgzMGMxNWY4MCwKLQkweDljNzlmMTg0LCAweDc2ODlkNjAwLCAweDE4NWRiMjg5LCAweGNlN2MxNGUzLCAweGY0OWIyNGYzLCAweDk2NDJmZWM1LAotCTB4ZGY2NWZiODMsIDB4OWY2MTUyZTksIDB4ZTQ0ZWQyNzMsIDB4M2YzMWVlYzEsIDB4ZmViOWY5YzYsIDB4ZGJkOWQ0YTYsCi0JMHg5YTlmY2MyMywgMHgyNmJmZWYzOCwgMHhmMzRhNWYzMiwgMHhmZjk0MDJiNCwgMHhjMTNmMTk0YSwgMHg0YzE3ZTYwZiwKLQkweGM0OTM1MzE5LCAweGU3YzZjNGY2LCAweDM5ZjYzMGU0LCAweDNmMDYyZjk2LCAweGY0MWJiYTBjLCAweDQ4ZGJlNThkLAotCTB4NGY4OTFhZmMsIDB4MWFhOWZjYjEsIDB4ZjQxYmQyOGMsIDB4NTEyZjk5MWEsIDB4ZmY5NTA1ZmUsIDB4NzU0Y2JlN2IsCi0JMHg3YWM2ZWNmNCwgMHgyYWRjNWFlMiwgMHg3YzZkZjNkNiwgMHhlNjlmYmRiYSwgMHg4NjkzNzBhNSwgMHg4MGNiZGY0MSwKLQkweDVlYjRmMjY3LCAweDVkMjM1MWU4LCAweDlhMGJjZjM1LCAweGUwYzVlZDc5LCAweDBiYmI2YzRmLCAweDAzZTNiNDIzLAotCTB4Nzc5YzU2ZjcsIDB4NmQyNzNlN2QsIDB4OGI1ZmY5ZTUsIDB4YTBhNzNhNjcsIDB4MzNmMWUwM2MsIDB4ZjZlYWU2MWYsCi0JMHg4NGRhOGZhMiwgMHgyOTM3NjczZCwgMHhlYTU0ZmUwOCwgMHhiNDViOWFhYywgMHg5NTk3Zjg1YywgMHgzNmJmYWIxZSwKLQkweDhkOWFhYmVmLCAweGU4ZGU3Nzk4LCAweGNkOTVmZjE4LCAweDZiZDFjZTMyLCAweGE2YWY3MWY1LCAweGY1NmUzMTJlLAotCTB4NmJiYjZiNTgsIDB4ZGFmMGJmNzUsIDB4NWRmOTZiMDIsIDB4Y2JhZmRkN2UsIDB4OTFkODNjYTMsIDB4YmFlNTUyNGEsCi0JMHhjYmYwOWI2OCwgMHhkYzcyYmQyYSwgMHhlM2FmOWQ2YywgMHgwOTlhNzY3ZCwgMHg4MGU2OTFiZSwgMHg3N2YxN2FmMSwKLQkweDdiZDYwMGFlLCAweDdlMDUwNTM1LCAweGJjMDQ4NTBkLCAweDljNjJjMjhlLCAweDAxZDBkOWViLCAweDA5Yzg5MWJmLAotCTB4OWZkZGM1YmMsIDB4NWU5MTYyZWIsIDB4ODdkZWQ3NmQsIDB4OGU0OWYzZGYsIDB4ZWI4NTI5MzYsIDB4ZmJiNWUzMzMsCi0JMHg4OWJkMTdhMSwgMHhlMWFkZDQzNywgMHhjZTk2ZTZmOSwgMHg2M2JmNDAyZCwgMHgyZmUxM2U5NSwgMHgxNzhmNzMxYywKLQkweGRmZTQwYmZlLCAweDhmZDUxNjk5LCAweDE3ZmVkOTU3LCAweGY5N2FkYWYwLCAweDg5N2MwMDdjLCAweDE2MDI4N2NmLAotCTB4N2NmODU3ZjYsIDB4ZTE2ZDdlMDAsIDB4NzliZjQyMDYsIDB4YTYxYzg1M2UsIDB4YWZmZDFiN2QsIDB4NDcyMWNlZjMsCi0JMHhmN2Y2YzhlOSwgMHgxYjNmMjliYSwgMHhiYzljYjFhYiwgMHg5MmE5M2E5NiwgMHg1NWE3MDE5MiwgMHhhNWFmYmY2MiwKLQkweDhjMjRkODY2LCAweDdjNTgwOTczLCAweGZmMzg2MGI4LCAweGU4YmY5MGNhLCAweDMxYzhmMzdjLCAweDFiM2E2NDZhLAotCTB4YTdhNThkNzQsIDB4ODEzZmU3NDEsIDB4NDcwZGNmYWUsIDB4YzQ5NTVlZDcsIDB4M2VlMDM2MzksIDB4MzEzZDlhYjAsCi0JMHhmNjk0NGQ2YSwgMHg4OTM4NzAyMCwgMHhkNzdlNTkzMiwgMHhhMDg3YjIxZCwgMHg4OTYzMWY4ZiwgMHhkMjVmMTg1OSwKLQkweGJmYTUwYTg5LCAweGVmNWY1ZWJlLCAweDE2MzQxZDQ3LCAweDUzYTdhNmY0LCAweGJhNWRmOTQ0LCAweGNmYjczNmNjLAotCTB4ZDY1Y2ZiMTAsIDB4N2RmYTIxNWUsIDB4ODhiZGE3MTksIDB4MDkyZjljNzUsIDB4ODIwZjY0NGYsIDB4OTlkNWRhM2UsCi0JMHhmOWU3ODMzYywgMHgwYWJiNTllNCwgMHhlZWM1YmJmZiwgMHhkNzQyYTZkYiwgMHg0ZmFiYjM1ZiwgMHg1NWY0YjhmMSwKLQkweGU4NDJlZTZmLCAweDg2YTM5M2QzLCAweGI4YjQ2N2JkLCAweDdiOGQxZDI1LCAweDM1Nzk1N2M2LCAweGM4ZWYzOGJkLAotCTB4ZjUyOTlhNWIsIDB4ODVlODE0OTAsIDB4OGQ4ZjNlNzEsIDB4ZjJjMmJiNjMsIDB4ZTEyNWNiYmIsIDB4Nzk3NWU3NDgsCi0JMHgxMmE3ZGIwMiwgMHg0OWQ4NWVkMSwgMHg0ZmRjN2Y4MywgMHg0ZTNjZDllMCwgMHgwZmM4ZWMzOSwgMHg3ZTNmODQxMywKLQkweDllZjAyNTJlLCAweDkyNTZmMzFmLCAweGJmNjU5ZmM1LCAweDgxYWRkODU3LCAweGIzOGU5MmQxLCAweDMzMjNlMjY5LAotCTB4NzNlY2FmMTksIDB4MDdlYjg4NTIsIDB4MWI1ZGE1MmEsIDB4ZGQ4NWI4ZjAsIDB4ZDFiNTdhYWMsIDB4YTlkY2ZiMDEsCi0JMHg0Y2I4OGJkYiwgMHhmNDk4ZjdiZSwgMHg0MDk3ZGUzZiwgMHgyNmZjOTMzZSwgMHhmMDU5YTYxNiwgMHg0YjEyZjUyNCwKLQkweDdjOGE5NGZiLCAweGUwNmE3ZDRiLCAweGE4ZmQ0YjMyLCAweDNlMGIxMmVhLCAweGE1ODY2NmE2LCAweDM5YTJjNjdkLAotCTB4YmI0YjNjMTYsIDB4N2IzZWQyZDYsIDB4NmUwYjQyYzUsIDB4NTk2Y2ExZDgsIDB4OGI2ZDM5NDQsIDB4YjVjN2ZkMmQsCi0JMHhjZmI0YjUyZiwgMHhhOTYxZGUwYiwgMHg0NGUwNjBhNywgMHhkNmFmZjcyMSwgMHhiMmRmOGZmYiwgMHhlNGNmNWFjZSwKLQkweDJmNDM5NWI1LCAweDkyOGZkZmU0LCAweGU2MTRmYmFiLCAweGQ5NjdiNTVmLCAweDg0ZTVlODdjLCAweGViYWM3YmFlLAotCTB4Yzc2NTdmYjEsIDB4YTI5ZDkwMzksIDB4ZmZhNjI4ZDAsIDB4ZGRhYjNlZDUsIDB4ZTJiNGNhYWIsIDB4OGJmZjVlOTUsCi0JMHhhZjVjZGQ2MCwgMHg5ZmIyZWVkNSwgMHhiMjllNDBhNywgMHhmMjk2MWNkYiwgMHhkZGJhMjViMSwgMHhjNDUzNDI5YywKLQkweGY4ZGJmODdkLCAweGUxNjY1ZGFmLCAweDJlYmQyYzdmLCAweGZlMDM4Nzk2LCAweGI0OWJiNzMwLCAweDk3MDcyYWMzLAotCTB4MzA3MmFjODYsIDB4MWNhYjY5ZjksIDB4ZTU1OGY3MTQsIDB4NTYyM2YyZTAsIDB4YWQ4N2YwMzksIDB4NjdkYTUwNzIsCi0JMHgxM2IyODM5NSwgMHhmNjk4Mzk1NiwgMHgwYzBlNTU4ZSwgMHhkN2U1OGNmOSwgMHgzZTU1ODhmNCwgMHhlNTM0NTM0OCwKLQkweDhhZWJmMDhmLCAweDg5Zjk1NmIzLCAweGJmNTEwZmU1LCAweDhmM2NkZmUwLCAweGZkZTY4ZjQyLCAweDE4NWFmY2Y5LAotCTB4ZmUyMWFmYzMsIDB4NzdlMWJkMzAsIDB4NGU0ZjBlY2UsIDB4NjdkNTVlMDEsIDB4ZjdjZjEwYTcsIDB4YWJjZmJlOTgsCi0JMHhmMjc5YjcyNywgMHg3NGVlOWVkOSwgMHhkMDI1NzU2OCwgMHgzYWFlNWQ3MywgMHgwZDVjYTRiMywgMHg4Nzg4MWRmNCwKLQkweDE5OGZhZmRkLCAweDVhNTljN2ZmLCAweDFhMmZkYTAzLCAweDBiYWU1OWY1LCAweDRkYWZkMWYyLCAweDM5ZTk3ZGMyLAotCTB4MWRkZDg0OTUsIDB4ZTdjNzIwOTcsIDB4NDc1OGIyN2IsIDB4YTg3YjFlZjAsIDB4ZDI3MWQ3OTMsIDB4M2VjMGE1ZDYsCi0JMHgyYjZiMjczNywgMHhhMmY2ZmZkMSwgMHgwNzcwODUzNiwgMHhmZTgyYTBhMywgMHg5NzFjZmZmNSwgMHgxYzdlYmMwYiwKLQkweDE1MWU3Yjg5LCAweDI0MTZjYTQ1LCAweDdkNjJlZDQ1LCAweDdhZjM5NzM2LCAweGY3ZTg5NmQ2LCAweGI5ZWI5NTE0LAotCTB4MTkxMmZhZGYsIDB4YmQ1MjQ4YjcsIDB4MjkwZjExMmUsIDB4MjBlMjAwYTIsIDB4YWRjOGJkN2MsIDB4OGUzZDA2MmYsCi0JMHgzZDAyNGZjNywgMHg5YjJhNmRiYSwgMHg3ZDM4OGEzOCwgMHhmMDY3ZDgyOSwgMHhhNTNkM2I1NSwgMHhmZTExM2Y0OCwKLQkweDdmZWU4ZTVlLCAweDRlZmY1MzY1LCAweDBlZDI3M2FjLCAweDk3YWI5Y2IyLCAweDMwZTRkYzg2LCAweGQzZjI3ZGQxLAotCTB4ZGM1ZTBiNWUsIDB4N2Y2OTY5OTMsIDB4YTU5ZjExZjksIDB4YjQyZTFmZGUsIDB4YTlmNjk3ZDQsIDB4NDRlY2JjMTYsCi0JMHhiNGZkYTU4NSwgMHg3YzE2MDI3NywgMHhkMmRhYTQ3YSwgMHgzNWIzOGFmZSwgMHgyMjljN2MxNiwgMHg1ZjdmYWZlZiwKLQkweGUzZTkyZjkyLCAweDdkZTQ0NTYzLCAweGJhOWZkZmQ2LCAweGY3ODhhYjdiLCAweGUxYWQ3YmM5LCAweDIzZDc1MzRmLAotCTB4NGNlMjM3MDEsIDB4ZGVjNzFjYmEsIDB4NDA0YzVjODcsIDB4ZmVjNWNmZjAsIDB4YjE4M2NlMmYsIDB4NmI0N2U5NmUsCi0JMHgyOTRmYmFmNywgMHhkZDNmNTFjOSwgMHhmZjBkYjNmMCwgMHgwMTU1ODI5NSwgMHhmZGMzYjlmMywgMHhmYmEyZjllNCwKLQkweDZkN2Y4NmYzLCAweDhiZDNjZGY4LCAweDcyMWNlMjdkLCAweDI2Y2FiYzZlLCAweGM5MTFjMWU0LCAweGM3ZDc5YzgyLAotCTB4ZmRmN2IwZDEsIDB4YmRlNDRiZTcsIDB4YzZmZDc2MjEsIDB4OWZlNzYyYmEsIDB4ZWQ5NWVjNWUsIDB4NzI5ZjcxZjUsCi0JMHhjMzM1ZWRkMywgMHg1Y2JhMzNmOSwgMHg3MzVmMWMyZCwgMHhiOGY5ZjIxNCwgMHg3OTY3N2Q1MywgMHg5ZTdmN2ZkZSwKLQkweGIzY2ZhNGNlLCAweDJlNWNkZTg0LCAweGIzNjc1ZmQ3LCAweDMxYTNmODg5LCAweDUyYTk5MWNmLCAweDdmMzgwZDVlLAotCTB4N2UzYmZiMGUsIDB4ZTM3ZGVlYTIsIDB4MWZkODc4NzYsIDB4MjFkZGJjNzksIDB4OWZjNzA4ZTIsIDB4MmMxYjUxNWIsCi0JMHgwMTQ0M2Y4MCwgMHhlZjhlMzM4YywgMHg3YzBmZTAwMywgMHhhZTFmZGMwYSwgMHhmZDE3NmE5OSwgMHhiZDQ4OTdjZiwKLQkweDEyNjVkYThiLCAweDI0ODA3OTc2LCAweDVkZGEwN2ZmLCAweDBjMzE3ZWUyLCAweDE4MWM4NWJmLCAweGNjN2M0MWZiLAotCTB4NjJlMzIwNTEsIDB4Mzk4Yjg4ODAsIDB4MDYyZTMyMWMsIDB4NDAzMTcxMWMsIDB4ZmU1MGM1YzQsIDB4ZjAyYTg3NWMsCi0JMHgwMjE1MWQ4MywgMHgyMDIzYmU3ZiwgMHhkNTFkMjNmMCwgMHhhM2JjZmUwMiwgMHg3MjFiOTQ0NiwgMHhlMzJmNGIxMywKLQkweDFmZjA2NjNlLCAweGEzNzM4ODZhLCAweGU3MWU0NjIwLCAweGU1ZjkyN2RmLCAweGQ5YWNlYjViLCAweDZmOWM1YmMzLAotCTB4MjRhNTZhYTMsIDB4YTZkYmNmNGEsIDB4MmRjODc5NGEsIDB4M2I0MDc0OTUsIDB4ZWQ0OGZmZTgsIDB4Mjk0NWVjYWEsCi0JMHg5MDBlYTc4OCwgMHg0N2ZiYzUyZiwgMHg1M2ZmODZlMiwgMHg2ZWU4MzBmNCwgMHhmYWEzNTdkYywgMHgyNDYxZjUyNiwKLQkweGJmZWUzNGJkLCAweGQwYWNmYmE2LCAweDhjN2Q1OGJiLCAweGJhNThkYmQ1LCAweGJkZWIzZjhiLCAweDhkN2JkZTU5LAotCTB4YTdhZTg1ZjgsIDB4YmQwYzVmMDYsIDB4MTZhNDUyNzYsIDB4NjA1NDI1ZjYsIDB4ZWY3ZDA2YWIsIDB4ZDFlYWIyNGYsCi0JMHhiZTkyYTVmNSwgMHg4NjIzZDAwMywgMHg3NGRlN2NhNywgMHg3Njg3Y2UxYiwgMHg1NjA3ZjBhZiwgMHg5MGNjYjZlOCwKLQkweGVjODdlNmQzLCAweGYzZTI3Y2UyLCAweGVkMzdlM2Q2LCAweDdkYjc3OWI3LCAweDZlZWY5ZWE4LCAweGUyMTViZmJjLAotCTB4MjAxZDlkNWMsIDB4ZGE1ZjFmNzEsIDB4NzM3Njg0YTUsIDB4ZjVhMDg2YmYsIDB4MjUyMTE0N2MsIDB4ZmFlNDZmYWUsCi0JMHhlMzVmYjgxNywgMHgzM2YzZDg5NiwgMHhmMjIxZDYyMCwgMHhlNmI1YmMyYywgMHg3MmZkNmIyZSwgMHgzM2M5MWVmZCwKLQkweDYzMjc2MGJhLCAweDk2NTcwYWYzLCAweDRhYTBlN2VhLCAweDVmNzIzN2VhLCAweGRkMTA1ZWUyLCAweGExNTcyZTk3LAotCTB4ODczODI5ZjEsIDB4Y2JiNGFmNzAsIDB4Y2UzODQ2YjgsIDB4MjFmM2FmNzQsIDB4OGEyYTNmY2UsIDB4MGExMzNkMzMsCi0JMHg3NDZlNGU3MSwgMHgxNzdjMTNhOCwgMHhjZjQxYTFjYiwgMHg5ZTgzM2NhMSwgMHhlYWU3MTg0ZiwgMHhlMjNmNzUzZiwKLQkweDhiYzdjZjhiLCAweDdmY2YwNTdiLCAweGJlNzZlODIzLCAweGZmNDBhZWNmLCAweDdhMDhmMjg3LCAweDNiNDFmM2ZiLAotCTB4ZTczZTk5ZDksIDB4YmEwOWM2MGYsIDB4N2UzYjYyN2UsIDB4OTRjZmJlNGIsIDB4NWYyOGI4NzcsIDB4YjAxNWM5NDEsCi0JMHhhOGM2ZmIxZiwgMHg2NWQ2NjFjMSwgMHhmYjIyMmQ0MCwgMHhlMWJmNTg4ZiwgMHg5OWVlMzI1MCwgMHhmY2M4Y2YyZCwKLQkweGJkMzNjYjQ0LCAweDdiMjYwNWU5LCAweDEwZWE1Y2Q4LCAweGE2ZGJiYmZiLCAweGZmMjI5NGI1LCAweDhiOWRkZjYwLAotCTB4NWYxZGRlN2IsIDB4Y2UwMGE2ODYsIDB4YjEyZGUzZDcsIDB4NzdiMjE5ZmIsIDB4NDcyMTE1MzMsIDB4NjEzZmJjMDMsCi0JMHhiMTE1YWFlZiwgMHgwNDk3YjYzZiwgMHg5ODliN2IzZCwgMHgwMmNlM2M5YiwgMHgzNDA2OGYwYSwgMHg5NmRhMDBmMiwKLQkweDIzMDdjMTBhLCAweGFlMTBkMDBmLCAweGI5YjhmYjEwLCAweDgxMzNiOTczLCAweGRlNzY0NDliLCAweDhiZTA5NTViLAotCTB4MzkyMjA3ZTYsIDB4YzdmZTA4YjQsIDB4OWI4Mjc5NDgsIDB4ZGUzMTU1MDYsIDB4ODg2NzA2ZjcsIDB4Y2QyODFlNzEsCi0JMHhjNmQwZmU5MywgMHgxZmUxNmJlZCwgMHgzOTM0ZjY1ZSwgMHg1Mzg4ODc0MSwgMHhhNzRiMTM4ZSwgMHhmM2NhOTQzZiwKLQkweDFkM2MxMzIwLCAweGJhZGZkZDEzLCAweGU3YjA4YTBkLCAweGMwMmJhMGViLCAweDllYzIyYmI3LCAweDVkNjdmODFiLAotCTB4ZjEyNTVlM2EsIDB4M2M0OTM3M2IsIDB4NTE2Y2Y0ZTIsIDB4MTE3ZWU0NTIsIDB4MDEzZWMwMmYsIDB4NmJkYzFmYjEsCi0JMHgwNWYxZTlmNywgMHhmYjEwMDNlYywgMHgxOGVjMzk0MCwgMHhlMDMxZDg3MCwgMHg2MWMwNjNiMCwgMHhjNzYxMDBjNywKLQkweDZhOTRiZTUwLCAweDQzZTcxMTcyLCAweGFjZDJhMzNlLCAweGFhNmU4MzI3LCAweGM4MjVmOTM0LCAweGU0NzE5ODY3LAotCTB4OTFlZGNjMzMsIDB4MjNkNzMwY2YsIDB4NDdhZTYxOWYsIDB4MjM4Y2MzM2UsIDB4OGY2ZTYxOWYsIDB4NDcxOTg2N2MsCi0JMHgxZWRjYzMzZSwgMHg4ZTMzMGNmOSwgMHgzZGI5ODY3YywgMHg3YWU2MTlmMiwgMHhmNWNjMzNlNCwgMHg3MTk4NjdjOCwKLQkweGVkY2MzM2U0LCAweGQ3MzBjZjkxLCAweDU4YWVkZWRmLCAweGIzYjcxZGYyLCAweDM1ZGM4NmY5LCAweGYyMTM0OGVlLAotCTB4YTZhZjM2MzEsIDB4N2VmZTcyMGYsIDB4Mzk3N2Q3ZTIsIDB4YTNlN2MxZjMsIDB4ZWJiNzIxMmIsIDB4Yzk1NDEzNWEsCi0JMHhjOTZhYWVlNywgMHgzZTQ5MWI3NywgMHgzZTBhZDdmNywgMHg3ODkyZWJkZiwgMHgxZGUxOWE5NSwgMHgxZTQyMmZjNiwKLQkweGU2NDBiMmExLCAweDQ3OTEwMDExLCAweDAxMWU0NDAwLCAweDRhODQ3OTEwLCAweDAwMjNjYzg3LCAweDcyODA4ZjIyLAotCTB4OTEwMDExZTQsIDB4MWU0NDAwNDcsIDB4MDQ3OTEwMDEsIDB4MDAxMWU0NDAsIDB4M2Y0MDQ3OTEsIDB4OTEwMDExZTQsCi0JMHhmMjM5NDA0NywgMHgyM2M4ODAwOCwgMHhhZjI0ZmNhMCwgMHg2MzA0ZjkwMywgMHgwYmEzZjA1ZCwgMHg5NjNjZjcyYywKLQkweGNmM2RjYjQzLCAweDQ3ZTFjMTZiLCAweDhmYzNkYjliLCAweDhmYzNkNzM2LCAweDhmYzNkNzM2LCAweGEzZjBlMzM2LAotCTB4NDdlMWVkY2QsIDB4YTk1NzcxOWIsIDB4ZmMxN2U4NGYsIDB4ZjgzZjczNjksIDB4YjhiYzY2ZDMsIDB4NjIxMmY4MmIsCi0JMHhmYWVmZDc0NCwgMHg5MTgwOGJkZCwgMHhjNTcxZTUyNCwgMHg0MWVjNjdjYiwgMHg0ZjdjOGM1YSwgMHg0ZGM5NWUyNCwKLQkweDU0NWNmOTU1LCAweDE5MmI4YjVjLCAweDg0NGIwNmQ3LCAweDdlYTE0ZmRlLCAweGYyMmRmODFiLCAweDJkMzdjY2I3LAotCTB4Y2RlNDIxNGMsIDB4MTRjOGJmOGIsIDB4NTEzZTQ2ZjUsIDB4ZmRkZjMxZmMsIDB4ZTdmODQ5MDcsIDB4NWQ3MjQ1ZGQsCi0JMHhiYzk1N2Y0NiwgMHg3ZGEzNDA3NiwgMHg1ZGJlMWYxNCwgMHgzYjQ2ZmNlYywgMHhlYjRkMmY2MSwgMHgxZjliMGJlMCwKLQkweGJkZmY3Y2Y5LCAweDJjYWQ5MjllLCAweDhhNmQ3YjRmLCAweGIyZjc0ZmYwLCAweDE4NzBiNTlmLCAweGY3NGIzNGJiLAotCTB4ZjZkYWY2OWIsIDB4N2VlMDRiMWYsIDB4YmE4YTBkZmQsIDB4ZTg5ZTg3ODcsIDB4MDk2NzNlYTAsIDB4MDI1NmQ0ZTgsCi0JMHhkNGMyNjIzZiwgMHhkNDdmM2Q1NCwgMHg3MTYxNjMzNiwgMHgzYzQ2ZGQ3NCwgMHgwMDQ0ZWQ4ZiwgMHhmZDk5ZTc3OSwKLQkweDc5ZTI2YWU0LCAweGI5MDdmZDY2LCAweGI5Y2ZlMTlhLCAweDdlODExZmE0LCAweDBlNGRjZmI4LCAweDI2M2Q4MTJhLAotCTB4YWE3Y2JlZjksIDB4ZTBiNGZmM2MsIDB4NWM0ZDE5ZGEsIDB4ZGI1Zjc5M2UsIDB4NzdmODY2OGMsIDB4OGZkZmIyMDksCi0JMHg3NDE2NDg5ZiwgMHhiMmEzNjFiYywgMHg5OWZiY2VjNywgMHhiYjAyOGZiOSwgMHhiZTg1NWRiOSwgMHhiY2ZiYzllZSwKLQkweGFmMzEyNmFlLCAweGNlNmNkNWQ3LCAweDc1Y2FlZmJmLCAweGE0NWY3MGY5LCAweDg4YTY2NTQ4LCAweDNjODQyYmM1LAotCTB4ZGUzNzQxOWQsIDB4MWZkODhiZGYsIDB4YzQzZWY4OWIsIDB4MWQzZDU3NjUsIDB4MjRkMGZkZWYsIDB4YTkzZGFkMWYsCi0JMHg5MWNkN2MxNiwgMHgyNjg3ZWYyYywgMHgxZjg1NWIzOSwgMHhlZWM0MTcyYywgMHgxNmFkY2UyMSwgMHhmNWFiZTU5ZCwKLQkweDlhOTViN2YyLCAweDllNzg0YmNmLCAweDBiYmY3NzU2LCAweDM1MzU5YmY0LCAweDZjMzQ2YWI1LCAweDI3NTI1MWZmLAotCTB4MzZhNmVlNDAsIDB4ZWJjMzFhNmMsIDB4ZDUwMTQyZDIsIDB4ZGFiZDAzZWUsIDB4OTNmODEyNWUsIDB4ZTIxNzAyMzUsCi0JMHgyN2Q2MmU1MywgMHg0MTQ5YzNjZSwgMHhhNGM4OWMyNSwgMHhkYmI4MjFiOCwgMHhlYmYxOWEzNiwgMHhlOTljMWI4MywKLQkweDU0OGZiZjY4LCAweGY4OTMwM2I4LCAweDc0NDk3NjdmLCAweGMyNzQ0NTVmLCAweDVlNDBhZjE2LCAweDQ5OTQ3N2E4LAotCTB4N2M3MmQ4ZmUsIDB4NTdlMmYyMGYsIDB4NThmOTA0OWQsIDB4NjEzYWYwZTAsIDB4OGRmZDYyNmYsIDB4ZWMwZjc3ZDgsCi0JMHhlYzJhZGM3ZiwgMHgyMWQzOWY1NCwgMHgzZmRkM2FmYywgMHhiNWNhZjA2YSwgMHgyOWQxYjY3ZSwgMHg0Mzg2OGZmYywKLQkweDNlYTA3ZmVjLCAweGRlMzBkZmM2LCAweGExZGZiMDQzLCAweDFmOGU3MTg2LCAweDcyMGQ0ZWJjLCAweGI3ZGFjYjU1LAotCTB4NzM4M2JiYzUsIDB4YTliZGExNzksIDB4ZjJlN2Q3MmMsIDB4MDE1MmRmZjcsIDB4MGFlZDkwYmYsIDB4MGRmYjI5ZWMsCi0JMHhiOTY1NGU3NywgMHg1MmY0ZDg2YiwgMHg5MTVkZWUzMiwgMHg2ZmUxMDFlMCwgMHhhMWYxYjY3YywgMHg5MDVmMTk2NCwKLQkweDlkMjY4OWY5LCAweGE2ZmM0NjRlLCAweDkzNDdlNzU5LCAweDAzZTVlZWZlLCAweGE5NmM1YmI2LCAweGYxODZlZTcxLAotCTB4MmJkNzgxNWUsIDB4M2Y1ODhhZmMsIDB4OWJmYmM4OTEsIDB4ODJiZjVjOTksIDB4YjE5NWIzZjcsIDB4MzYxYWRiZTUsCi0JMHhmZWM1ZDI2NywgMHhhZTZmZTFhMiwgMHhiOTVkZTdkMiwgMHhiN2RlMjlkMSwgMHgzODkwYTBhYywgMHhhYzg2NTYwZiwKLQkweGZlZTk1N2VkLCAweGFkYTdhYWU3LCAweGNhOTgzZmU1LCAweGExZjIyNzdlLCAweGRmYTlkZjg2LCAweGRiZDRlZTkzLAotCTB4N2JkZWJjMzQsIDB4ZGE3YmYwYjMsIDB4NTA3NWM4OWMsIDB4MDdlOTA2ZGQsIDB4NGQwYTdlZDEsIDB4YjVjZjgwNTAsCi0JMHg3NzVlMzNjNSwgMHhjMzJhYTAyOCwgMHhiYTliY2RjOCwgMHg5MzFmMzQzZiwgMHgwYzE3M2QzMiwgMHhiMjNiMDgyNiwKLQkweDgxMTJmMDcwLCAweDI5OTgzMmRmLCAweDg1ODNhZGUwLCAweDE5YjExY2IyLCAweDRhYTQ3M2U2LCAweGUzYzdkZDA5LAotCTB4NDFmYmE1YmYsIDB4MjY1ZTBmMzcsIDB4MTk4MjA3ZWEsIDB4NTgwNzhlNDIsIDB4MTRjNTMxOGUsIDB4MTY1ZDNlZGQsCi0JMHhkNjExN2E1MCwgMHgzNmQ0ZWY5ZSwgMHhmOWZhZTE4ZCwgMHg5NWY4NDliYiwgMHhlMjVmYzNkNywgMHg5ZmYwNDU4YSwKLQkweDc5MDdhMTRhLCAweDZmOWYxODU1LCAweDBmMjEzNDZmLCAweDk3NTZiMDdhLCAweDEyMDNkNjdiLCAweGVjMjAyMzc2LAotCTB4MTA4MmU1NTksIDB4ZDIyYzkzZGUsIDB4NmZjMGRiZjYsIDB4ZTBiNWZlNDMsIDB4ZWJmMDA3MjksIDB4NTdjYjhhODMsCi0JMHhlMjE1ZWUyNCwgMHg3N2M4NmNmZSwgMHgyN2Q0MWVhYywgMHg4ZjI2ZjFlYSwgMHhjNTBkMjc4YywgMHg1ZTU4YjA5YiwKLQkweGM1YjUwNTFhLCAweDQ3YWZhZTAxLCAweDlkMTJmMDZjLCAweGE0YWE0Y2IxLCAweDc3ZGY1OTIyLCAweDkxYmM1YjUwLAotCTB4MzUzZmJkY2YsIDB4YjM2NzUxMWUsIDB4YjNmNTdlMDksIDB4OGEwN2I3OWYsIDB4MzJhYTI3NGEsIDB4OTRkYjI3YTAsCi0JMHhlOGJlYWQ5MiwgMHg5ZjI4OWU3YSwgMHhiYTY2NTAzMywgMHhmNWQ1MmYyNywgMHgwMzJlZjU4YSwgMHhkZjc1OGVmNywKLQkweGMzNDE5MDlmLCAweDZjMDYwNWY4LCAweGJmNDMzYTY0LCAweDc3MjI1M2VhLCAweGZlZWE0YzI5LCAweDY0YTgxNGE5LAotCTB4YmU5MmQ2ZDYsIDB4NzlmZTI0NGYsIDB4M2M3NThiOWQsIDB4ZGZmNmQwZjcsIDB4ZmEwOGYxNmUsIDB4ZDRmY2ZjMDgsCi0JMHg0NTgzOGIzNSwgMHhhYzFkODY3ZiwgMHg3N2QwMWM1MywgMHhhZGJlMGVjMywgMHhiN2EwZTc2OCwgMHgzY2M4ZWVhZCwKLQkweGE4YjEzNWYwLCAweGM1YmUwNWRmLCAweDZkYjZlN2QyLCAweDMxMjdkYjNkLCAweDI0Y2I3MjFkLCAweDVkNWNlYWZmLAotCTB4ODBiOGYxNGUsIDB4ZDNkYzRlNDIsIDB4YjllNDhiMWEsIDB4ZWU1ZjBlNDIsIDB4ZjExZjkxMTIsIDB4YjE5ZmI4ODksCi0JMHg2ZmUwMGZlZiwgMHhmNDk3NDMwZiwgMHhjMzZmZTkzMiwgMHhhNGI5ZjYzZiwgMHhmZjA4MGM3ZiwgMHhlMDRmZWYxOCwKLQkweDdmODcwMzFmLCAweDE4ZmYwODBjLCAweDgxOGZmMGU1LCAweDBlMDYzZmMzLCAweGZjMzgxOGZmLCAweGM3Zjg0MDYzLAotCTB4MTZkODdmMjgsIDB4ZjMzZjc1MzgsIDB4Njg1YjUxZjMsIDB4ZDM5NjYxZmYsIDB4ZWU2YjQ3YzcsIDB4NTFlZjllMzIsCi0JMHgyMzhmOTJlYSwgMHg2M2ZiMTM0OCwgMHg2Mjc2MTFiOSwgMHg3Y2IxM2VjOCwgMHg3MmEzY2JiOSwgMHhmNGZkYjRiNCwKLQkweDU0N2U1YjIxLCAweDdjYjY5YTllLCAweGRjMjlmM2JhLCAweDg0MWZkOTgzLCAweDk0NWI2YjNlLCAweDkxOTRkYzcwLAotCTB4M2I4OWVjZTUsIDB4M2NiZTg0MTIsIDB4ZDg0YjhmNzEsIDB4ODlkNzNhZGQsIDB4NTE3OWRjOTcsIDB4ZmVkYmJlN2EsCi0JMHgyNzY5NGViNywgMHgzYzdjMTNjMywgMHg3OGI2ZTJlZSwgMHg4OWZmNzYxNSwgMHhhYzFjOWFmMiwgMHgxNTQ4YjEzNywKLQkweGQ5YzAxOTdjLCAweGIyNTZmODhlLCAweGE1ZjI4Nzk2LCAweDRjZTVlMjc0LCAweDU3ZmY1NzZlLCAweDdlYTJlN2FmLAotCTB4MTczY2QxY2QsIDB4MTFjMzZmZWMsIDB4MWY0Y2U2ZmYsIDB4MjExMzZiZmEsIDB4YWYxZTBkYWYsIDB4ZWFjNWZlMGIsCi0JMHhiY2UyYTk4ZCwgMHg3MTkwY2ZhZCwgMHg5MTQwOTY1YywgMHgzMWY4MzMwNywgMHhkZmM2NGNiYiwgMHg4MGVmNzlmYSwKLQkweDEyN2JmNDE3LCAweGMwYjljODEzLCAweDJkZjI0ZWQyLCAweGI4OGNkZjU2LCAweDJiNWM2YzYyLCAweDcyNzk1ZjFhLAotCTB4MjJlMjNlNGIsIDB4ZjRlZDQ5YTMsIDB4YzQyZjRjNWQsIDB4ZDEyNTVjM2QsIDB4ZmM2YzRhYjgsIDB4NWQ1ZjQ4NjMsCi0JMHgxOWU3ODk2NCwgMHg3ZTk5NGQ3MCwgMHhhOWVmZDc0ZiwgMHhkNGY3NDNjZCwgMHhmMDE5NzlhMiwgMHhiYzU0MWZlNywKLQkweDc5MzczZjg4LCAweDY3NGViNzdjLCAweDg5Y2ZhOWJjLCAweDNmMzQ4ODE3LCAweDYyY2FlN2NkLCAweDhhZmJmZmJjLAotCTB4YmRmODBmNzcsIDB4NTZlYzJmZGUsIDB4ZWJjMjc4MWQsIDB4MjE1MWRhNjksIDB4YzQyOWI2ZjQsIDB4ZmFjOGQ0NzAsCi0JMHhkZWMxZTRiZCwgMHg1ZjYxOWY5YywgMHhlYjBiODBlMSwgMHg1YzA2ZjI2YywgMHhhNzdmMjY2OSwgMHg5ODA5NGJiMSwKLQkweGY4MTlmZGRmLCAweDhlMzI2NWVkLCAweDA3ZDdjNzU4LCAweGY1YjZlZmQwLCAweDg4YTVhZTc5LCAweDgzZGJiMjViLAotCTB4NzQ2YjZlZjcsIDB4NzFmYTMxMzksIDB4NjI1ZWYxM2IsIDB4MGNiZDNlN2UsIDB4N2RlN2VhYjksIDB4YmU2MTZlYzEsCi0JMHg0YmY4ZDMxMiwgMHg3ZTY5YmUzMSwgMHhiNWZjMmY2ZSwgMHg2MjQ5NjU5NSwgMHhlZjJmMDZiYywgMHgyYmQwMGYzYiwKLQkweDEwNzRjOWQ2LCAweGNlZGZlYTc0LCAweDNjYzRmOWUzLCAweGUxOGRlZTgyLCAweDdhYzU1MzkwLCAweGYxODM0ZWYwLAotCTB4MTM5MGRlYzUsIDB4ZThkZDJjZjMsIDB4NmQ3ZWYxMTcsIDB4ZGI0NzljOWIsIDB4ODYyYWVhOTIsIDB4YmFmMGU3M2YsCi0JMHgxZTdlY2M3MiwgMHhiMmU0MWRjYiwgMHhkMWZhOTcwZSwgMHgwZmMyYmQ2MiwgMHhhNTNhNjI2ZSwgMHg2MzRjZmZjMSwKLQkweDMxNzNkN2JmLCAweGY1ZjQxYWJkLCAweDVhYTU3NTM3LCAweDA3YWVjNmZkLCAweGFkNGZlMDlkLCAweGYyYzRhZTdlLAotCTB4OGU1ZDMxZTEsIDB4Y2FiYzZlOTcsIDB4MDhlZmU4NDUsIDB4NTMzZWYwYjgsIDB4NmZmZGU5ZDMsIDB4MjJiN2UzNmIsCi0JMHhmZGRiNTIzZiwgMHhmMThmMzM4OCwgMHg0ZmQyNjVlZCwgMHg0Njc0MGM3ZCwgMHgzYzNmMzgzYywgMHhmYTUzZWYwMSwKLQkweGY3OGJjNmQ3LCAweDJlZGViNWI2LCAweDdhMjFkZmIxLCAweDgxZjRjNDNmLCAweDExYWRlMjVmLCAweDA5Mzk2NmY0LAotCTB4NTM1YWZkZTIsIDB4ZDFiZjk1YjcsIDB4NzE4OTI0ZjUsIDB4ODQxYmJhOWIsIDB4Njg3MzJkZmUsIDB4MWQ3OWFmMmUsCi0JMHhhMDk4NWUzYiwgMHg1OTZhNWQzMCwgMHgzZjljMTVlZiwgMHhmMjE3MmQ1ZSwgMHg1YmExZTY3MywgMHg3OTNlYzU3MywKLQkweDkyNzNhMDlkLCAweGQ4ODc5YmVhLCAweDkwOGRjYjA0LCAweGVhN2U0MzZiLCAweDFiM2VhNTRiLCAweDkzMmMxZGYzLAotCTB4NjU4MzljZjEsIDB4YmZlOWM3YzMsIDB4YjY5YjRmNGQsIDB4NzEwMDUwMzUsIDB4MTU1MjRjYmMsIDB4ZDRmNWRiZTUsCi0JMHg1ZjQzNGZkMCwgMHg2NTM4ZjU2YiwgMHhhNDA1YjZlMywgMHg5ZjBkZWM5OSwgMHgwZGNmNmRkZiwgMHhkZDAxOWY0MywKLQkweGY5ZDYyYzllLCAweDkxN2NmNGM5LCAweGY3YmFmMTRjLCAweGU1ZDY3ZTc0LCAweGUzMWVmNTViLCAweDc1NTdkYzYxLAotCTB4MTM5YmFmYmQsIDB4MjhiNmIwOWUsIDB4Yjc5OGRlZGEsIDB4ODNmNjRkMmUsIDB4NWVjZTQzZmMsIDB4ZjY4MmU5ZDUsCi0JMHhkZDdiNDRlYiwgMHhhMzc2ZTk5ZSwgMHhlYzZlYzg3MSwgMHhiYjBlOTRkYiwgMHg3OTExNWZiMSwgMHhhNWRiNzVhYiwKLQkweDk5ZWViNzVmLCAweGZhZGYxMTI0LCAweGRmODc3NWY3LCAweDlkZGI4NWI4LCAweDNkNzc3ODdiLCAweGFiYWM2YmY2LAotCTB4NDRlZDJjMjksIDB4YjA1M2ZiMzMsIDB4NzNmNGNiMWIsIDB4N2I1OGIzYmYsIDB4YzdhNGNjYTcsIDB4Y2NmNzdmNGQsCi0JMHhlMmM1ZTg0NCwgMHhkZjk5ZmYxZSwgMHgxODc3ZDg5MiwgMHg2N2JkZTZmNiwgMHgwY2Y2ZjE3ZSwgMHgzNTdjZjQ1ZiwKLQkweGNiNzRiMWY2LCAweDNjMWIzOGJmLCAweDdkYzliYTY2LCAweDJhNWMyZDZlLCAweDVmODEzOWRlLCAweDZlMzU3ZmI4LAotCTB4ODFkZTQ0NTQsIDB4ZmZjMjVkZGEsIDB4MmIxZGY4MzQsIDB4YmZhYzBkMDcsIDB4MWNhODllOGQsIDB4YzkxZmZjMTgsCi0JMHhlNTBkNzI2ZiwgMHgwZGZmMjRlNywgMHg2MDcyMWI3ZSwgMHgxM2UwZGJmMCwgMHhmOTM1OWNlMSwgMHhmZmJhYzZmZCwKLQkweGIxN2JhZmEwLCAweGViNWZiZjJlLCAweDQ1NzhiNzdhLCAweGQwOTk2YjllLCAweDIzNTczY2Y3LCAweGFmYWY1ZWU0LAotCTB4MGY5NmIyNmQsIDB4NjQzYmM5ZjEsIDB4MmY0MzM3ZGYsIDB4OWYyNDdhMDYsIDB4NjUzOWI2MDYsIDB4NDVkZjcyMWMsCi0JMHhiOWM1Y2E3YywgMHhiOTYzYWM2ZiwgMHhkNjZjNmYxZSwgMHg3NGNiODZlMywgMHg5NGY5OTgzZiwgMHg2YTY2NWU1NCwKLQkweDUzZTQ4NGY3LCAweGZmYWZiM2UzLCAweDYyN2RjZmViLCAweDZkOGVkMjdmLCAweGUyZmUxMzhmLCAweDgyZmQ5ZWQyLAotCTB4MWU1YmI1NWYsIDB4YmI3MWU2NzQsIDB4NzcxOTcyOWMsIDB4NmRmM2IyMWMsIDB4ZTdlMjJmN2UsIDB4NzZlY2I3OGIsCi0JMHhjYTczZmY0MiwgMHhlNTYyZGQyNSwgMHgwNzdmNGViZCwgMHhlNzE1ZDA2YiwgMHhmNzNhNjI4ZiwgMHg3YmIwZjY4YywKLQkweGY1OWU3OWZiLCAweGYxOTNlMzZiLCAweDY3OThjNmFlLCAweGUzOTRiOTVlLCAweDM0ZDRiNmM2LCAweGQ2ZDhkN2NjLAotCTB4YWJkYzAzZjAsIDB4YWIxZmJiMGMsIDB4YTVlM2E3NzcsIDB4ZjFlNTJjM2UsIDB4YWZhNzk3YTAsIDB4MTVkNzczNTIsCi0JMHgzMzJmOWM1ZCwgMHhjOTcyYWNlMCwgMHg3OTMxMWZiNywgMHgzYjI1OGVmMSwgMHhlMjI3ZTdiMSwgMHgwNDlhYzQxZCwKLQkweDgyZTVmOTE1LCAweGYzMDg0ODgyLCAweDZlYjE4ZTQyLCAweGJjNDVkYjE3LCAweDg5NjgyOTg3LCAweDE0NzU4YTdjLAotCTB4MDJmZjdjOTAsIDB4ZjMyNjk0OTgsIDB4ZWY4Y2U5MWYsIDB4MzA1NzY1ZTEsIDB4ZDg0YmI3Y2MsIDB4MjEwN2QzYTgsCi0JMHhlOGQzZDQzNCwgMHgxZmY2MTk0OCwgMHhmMjQ2Yjc2YiwgMHgzNGY5MGMyYiwgMHg1M2I1ODljNiwgMHhjOTZmZWQyMywKLQkweGU5ZGZkYzc3LCAweDUyNWUzZDNjLCAweDc5YmFlNmE4LCAweDRlMWZmYWRlLCAweGZhM2YxMTUyLCAweDEyYmE3ZGI2LAotCTB4Njg2OWJlNjQsIDB4MTVhYzJjYmYsIDB4YjdlY2MzNjksIDB4NDY4M2RlNDAsIDB4NTU3NzZmZGUsIDB4YmRmYjMwZmEsCi0JMHhlYmFjMGYyOCwgMHg3YmQ2ZjE4OSwgMHgyNWQyM2YyOCwgMHgxNWE3MjNmMywgMHhkZmI4YjczZSwgMHhlMmYxYjVlOSwKLQkweDJmYjE5OWJkLCAweDVkZmYzZTIzLCAweDk0NzdlN2RmLCAweDhiNzFlOWE3LCAweGM5ZmMxMjQ4LCAweGZmNWQwNGJhLAotCTB4Zjk0NzEyYzMsIDB4NzFiOTUzMDIsIDB4NDZmNDlmZGUsIDB4ZjY0Y2QyOTIsIDB4ZmQzNmMzZjksIDB4NzZjOGE0M2MsCi0JMHgxZjZmODMxMSwgMHg5YzczODg0ZiwgMHg2NDlkM2FlYywgMHhjYTdjODIyYiwgMHhkNmZkMTlmNSwgMHhlZDkzZDUzYiwKLQkweGUyOWI3M2IwLCAweGY2NmVmYmM0LCAweDhlMjMzNjliLCAweDE1NGMxY2Q0LCAweGRhZGI5OWYxLCAweGUwZWNjZjRiLAotCTB4OThkYjZlNzEsIDB4NWViZjBhYWQsIDB4ZTk5N2YzZjcsIDB4N2Q3MTJmZjYsIDB4Njg2OWU2YzMsIDB4MGJjZjIzYmYsCi0JMHg1M2Q5YmUzZiwgMHgyZGZjNDJlMywgMHgyYjgxN2JiMSwgMHhmMmJkZjg1ZiwgMHhhYmU0NjAxZSwgMHgwMzU0MmJkNiwKLQkweGZiMGU1YmZkLCAweGJkYjJiZDA4LCAweDY2ZjM4MDUwLCAweGZmZTkwZWY5LCAweDE2ZDFiN2NmLCAweDc1YzczYmU0LAotCTB4ODJjYmNjZDYsIDB4YThhOWQ4N2QsIDB4MTc2OTI3ZjAsIDB4N2VlMzUxZGIsIDB4NjkyM2I2YzYsIDB4NzJjZWNkNGEsCi0JMHg5NjJiZWJkMCwgMHgzMmZmMWUzYiwgMHhlYzc2YjE5YywgMHg3YjgwMjdhNywgMHg4MTdmYjEyNywgMHhhMDNkNjBmZCwKLQkweGI0Yjk1NjRiLCAweDRmYmIyNzhmLCAweGEyOGFmOTI1LCAweGJmNTNmY2Y0LCAweGMyZTQzMTdmLCAweDIzMzU5YmM4LAotCTB4ZjIwYTMzZWUsIDB4ZjkwZTk3NTEsIDB4NjNmM2QyNjgsIDB4MGFlN2JiOWIsIDB4NGRmNzc5YmMsIDB4NGU5NzNiZTIsCi0JMHg2NDdiZTYzNCwgMHgwZjU1ODNkMywgMHg3MzNlNTkwNywgMHhiNTM0N2E3NSwgMHg3ZTAxYmRjZSwgMHg3MTNkOGFkMSwKLQkweGUzNWVlMmE5LCAweGZkOWFlNjBjLCAweGY3ZGRhNmQwLCAweGNlNWVlZjhiLCAweGRmMTc4ZWVlLCAweDE3N2E1NGJkLAotCTB4M2VmMmE2NTQsIDB4ZjU0YWVkOTcsIDB4YzJlNzRkZGIsIDB4ZGRmZWJhMmIsIDB4ZjJkNzNhZDEsIDB4OGYzMzRhZmQsCi0JMHg3ZmYxZTVlOSwgMHhkZTI4OTNkZiwgMHhhNWRmMTkyZiwgMHg4ZWQ2ZTU1YywgMHhmYmUzNGVjMSwgMHhmOTNlZTk5NCwKLQkweDY4OTY0YTVkLCAweDNlMzYxYmVmLCAweDFkMzNjMDZmLCAweGQzMDczYmYyLCAweGQ0MzczNjc3LCAweGQ2OTZmZjcyLAotCTB4NjcxOGM5MDMsIDB4OTU2ZjQzZDUsIDB4ZDcxMDg1MzMsIDB4MWE3YzAzN2EsIDB4ODc2NmNlZmEsIDB4ZjlhNmNlZmMsCi0JMHg3N2JmZTFhMSwgMHgzZTQzNWM4MSwgMHg0YjIxMWM1NywgMHg1MGI2ZjE3ZSwgMHhiNTQzZjA4YSwgMHhlZjkwYjkzMCwKLQkweGZjMjRiY2Q2LCAweDZhNzZiM2RjLCAweGY4NmViOWM3LCAweDQ0Nzk0NjI1LCAweDk0ZDljM2E3LCAweDdmZjA1Y2FlLAotCTB4NzI0N2RlZTUsIDB4OWM3YzZlNzEsIDB4YmRiYWYxMjQsIDB4NzYxMmZlYjcsIDB4NGUzMjdiNDgsIDB4MTIwZWRmZmEsCi0JMHg1MDYzNmRmZSwgMHhmN2M2Y2JmYSwgMHgxYmFhNDQ1MywgMHhlNTczZjBmNywgMHg5NWJjNjI4OSwgMHhjNjM4NzdmYSwKLQkweDEwYmZkOGJhLCAweGE4M2IxZmU1LCAweGY3YzBlYjFhLCAweDc3ZTc5MDM1LCAweGYwNjZlMTFkLCAweDQ3ZjY1ZGYzLAotCTB4NDU3OGVmOTEsIDB4YmI3N2JmOTcsIDB4N2JjNGYzZWMsIDB4ZjgwNDU2MjIsIDB4MWQ3NmVmMTUsIDB4ZDExZTQyNDgsCi0JMHhlY2FhYzNmMCwgMHhmMGVjMDVlZiwgMHg3ZTI5MGU5NywgMHg0NTg5YzM5YywgMHg4NjNkYzQyNywgMHg2YWM5NzhmNCwKLQkweDc1Yjc5NGFmLCAweGNiY2U3MzNmLCAweDJhZmMyZDFlLCAweDA4ZTJkMjUxLCAweGQ3ZTM4NmJiLCAweDM0ZGZiYTFkLAotCTB4MmZkYzFmODQsIDB4ZmIyZDY1ZWUsIDB4ZDJkMDVmYTQsIDB4MDVmODRhNzMsIDB4N2M2MTlmODYsIDB4ZGY2YWI3NDcsCi0JMHgxODI3ZTEyOSwgMHg5NDFmNTZmZCwgMHgyODNkNjk3NCwgMHg2ZDBhMWJjYiwgMHhhMDI1YmM0NiwgMHhhY2JlZTAxNCwKLQkweGQ5NzI3YzA4LCAweDM4MzY0YmZkLCAweDI1ZTZmOGNjLCAweGJkMDAwYTFiLCAweDVmYTQzYzdhLCAweDBiNWJlNWY4LAotCTB4MzNlZTI1N2YsIDB4NzFmNTFiYWQsIDB4ZTY5YTc3MTksIDB4NDYzNjk5NGIsIDB4ZTVjNWM3N2UsIDB4ZWZlODNkZTMsCi0JMHg1YWRmZGNiMywgMHg1MGZiY2EwZiwgMHg4YjYxMzViOCwgMHhkYWJiMTc3OCwgMHg2Y2VjMDBlMywgMHg3Y2YzODhmNSwKLQkweDEwYWQ5YjU3LCAweDRhMDNjOWVmLCAweDhlZTdmMDgyLCAweGM2YjllZmVhLCAweDNjNGRmYWFjLCAweGQ0NTkwNGUyLAotCTB4MTNjYjZiZGYsIDB4YTdmMmI4ZWYsIDB4MTQxOTNjZjEsIDB4OGNiYWVmMTQsIDB4ZmMyZTY3ZWYsIDB4MThhNTQ3ZTMsCi0JMHhlNDVjNzY3ZiwgMHg5NzgwMjIwMCwgMHgwOTZjN2I0ZSwgMHg1M2IzMjVmMiwgMHhmOGEwYTUyMiwgMHg5NTFmODdhNSwKLQkweDAwZTQ0Njc4LCAweDYwZGU1MGUyLCAweGU5Y2E5MmY3LCAweDY5NWM0NjdmLCAweGFmODk2MmJlLCAweDY1NjhhZGJmLAotCTB4ZTBlYjQxMjAsIDB4NmI4Yzk3NzksIDB4ZmU3YzhiZjQsIDB4OGU1MjY5OGMsIDB4N2JlMzFjYzYsIDB4NWY1MWVlMjQsCi0JMHgzMDNkYzQ3OCwgMHhmODliNTQ2MywgMHgyMjhhOGJhZSwgMHgxNDc3NjhhNSwgMHg4MjNlNTg3ZCwgMHhmMDg0MjY1ZiwKLQkweGM5M2M4YzNlLCAweDk4M2NjZjMyLCAweGE4ZWYxMjFmLCAweDMwZGYzMmRjLCAweGYwMmU5ZmQwLCAweGI0MzFjZTMwLAotCTB4ZGEyZGQ0ZmYsIDB4NWRkMWNhYzcsIDB4YTBmZGU0ZDMsIDB4NjNlNjRlMjYsIDB4Mzk5YzU0NmYsIDB4OWI5MzAwZmYsCi0JMHhmYTBiNWRhNywgMHg4YmRiZTRkNSwgMHhkZWYxZTNmZCwgMHhiZjAzYmU0ZSwgMHgwZDZkZTdhMCwgMHhiZThlNzk3ZiwKLQkweDllZmQxY2FmLCAweGQzMjRiYWU3LCAweDAyNTNmZDAzLCAweGU1ZGRmMTAxLCAweDFhYzc0NTdkLCAweGZkMDNmZjMxLAotCTB4ZDBmZTQyNmUsIDB4YTczOGM3NzgsIDB4YWJkZTQxM2YsIDB4ZTcxNmE5MmUsIDB4NTA3M2UyYWIsIDB4NTYzZmI3MWQsCi0JMHgxZGUzMGI2NCwgMHgxNmU0MDNmZiwgMHhjNzcyNjU3OSwgMHg3OGI2ZDlmOCwgMHgzOTViMWVmMSwgMHgzODE3Y2FmYSwKLQkweDlmZWRiMjY3LCAweGZlZjBhNmY2LCAweDUxNTJmZmIzLCAweDA3ZWI4MzYxLCAweDI2ZjYzY2NlLCAweDNkYzFiYWMzLAotCTB4N2Q4ZmIxZmIsIDB4ZjYyMzVhYzksIDB4ZmFhMDcyNzEsIDB4N2UyNGM2OTQsIDB4NTZlM2RiYzAsIDB4ZTY0NWY5ZTUsCi0JMHhmYmJkMWZmNSwgMHg1YjM0ZTQ4YiwgMHhmYTE3NWQ3NCwgMHg3ODczM2NjZiwgMHhjNDViYTAyYSwgMHhiNTFjZTdhNSwKLQkweGNjNTYzOGNiLCAweGZhNjQyZTdhLCAweDZlNzBiYmM0LCAweGMxN2VlODI3LCAweDVlZTEwYjYzLCAweGVmNjhlNzM4LAotCTB4MWNkZjU4M2IsIDB4N2RjNjc3YmMsIDB4NmYzY2VkYzEsIDB4OTdjOGU3M2UsIDB4MWFmNzhhOTMsIDB4NjRkZjlkMzAsCi0JMHgxYWMwZWQ0NywgMHhlZjRhM2NmZCwgMHgwNTc5YmRmNCwgMHhlZDU3YzljZSwgMHg3MzAzNzg4NCwgMHg5NjNmZjA1MiwKLQkweDFmYzE2ZjdmLCAweDY5OWNlM2MxLCAweDJhMzZkZWYyLCAweDRkMzgyNmJmLCAweDA3Mjg2M2U4LCAweDNlZDMzOGZhLAotCTB4ZDBiNTNiZmMsIDB4NjM4ZjQ1MzQsIDB4ZmMxYTdlNDksIDB4ZjA2M2Y4MzIsIDB4ZGQzM2EwYzMsIDB4MTRhNWUyNzAsCi0JMHhmOGI3ZDA0NSwgMHgzZmFlOTI4NywgMHhlMmZkNzQxMCwgMHg0YjU2MjZmOCwgMHhkNzBmZTRiYSwgMHg3ZmZlZmEwYSwKLQkweGZiYzhlYmEzLCAweDBkODVkZjkzLCAweGRlMWVlZmVkLCAweDdmNjU5ZTVmLCAweGRhNWZmZDNmLCAweGVmZjdkMDlmLAotCTB4ZDYxM2JmYmMsIDB4ODY3N2E1ZmQsIDB4NGU0MTI3ZTMsIDB4N2YwOWIyMWUsIDB4MjhiZGY2MmEsIDB4OTdiMDkyMTUsCi0JMHgxMTA0ZjZmNSwgMHhlNDEyZDUzNywgMHgyNzZjMDZmNywgMHgzNDlkODI1ZiwgMHhlYWI4ZTNlYywgMHg4YWZjMzE0OCwKLQkweDYzOGY0NDkzLCAweDhmNWIxMTVkLCAweDVhNzhmZjI4LCAweGIxOTM5MGJlLCAweDdjNGIyMjc0LCAweDk0ODhlMTM3LAotCTB4NTRlZDZmYzEsIDB4NzZkZDNiMDIsIDB4ODczM2M4YzAsIDB4N2E1NjVmNjEsIDB4NDJlZGRlNDQsIDB4ZjI3NDE2YzgsCi0JMHhhMWE5ZGRmOCwgMHhkZTc4Y2I5ZCwgMHg0NDhiOWJlZSwgMHhkMTAyZTUxZSwgMHgxZjM4MjM5NCwgMHg3ZjA4MjQ1NywKLQkweDg0OTUzYmI0LCAweDlkYWVlYWRkLCAweGU3OTZmYzI4LCAweGMyZTdiNmJmLCAweDRkYWZlZDVmLCAweDZlZGJmOTEwLAotCTB4ZmMzYjY0N2YsIDB4M2UwOWVlY2YsIDB4N2Y0ZGM4MzUsIDB4Zjg0NGQwYTEsIDB4NmUwNWMxYWIsIDB4MDJmNzRmMzEsCi0JMHhiN2JiMDc2OSwgMHg4M2Y3YzhlNywgMHhmMjA5ZmExNCwgMHg0OGFlOGY0OCwgMHhlZWMxNzkxMCwgMHhjNDJjODFkZCwKLQkweGQyNGMzZWNmLCAweDJlMWY0MzRlLCAweGI4NzNjYmIxLCAweDE5Y2I4ZjNiLCAweGQ0ZDRhYzNlLCAweDYyYmM2MzM2LAotCTB4NmQ0OGVlYjksIDB4Nzk3YmIzYzIsIDB4MzYwMmY4OTQsIDB4YjI3ZTVjOTksIDB4NmJlNDQ5M2QsIDB4ZTIzMTdkMGQsCi0JMHhhNzgyZTNkNSwgMHhjNjRlODI3NiwgMHhlYmVmYjY3NywgMHg1ZGQwNjVmMiwgMHgwZWVmYzgwOSwgMHg3MjFiZmEwZCwKLQkweGJiYTc1YTM2LCAweGI3OTRhZjcyLCAweGFiYzdmN2ExLCAweDFlM2ZiYzQ5LCAweDc3YzA0YmNiLCAweGFhNzFmNTZhLAotCTB4MzJiZTc0MGYsIDB4ZWIxMmZiNDUsIDB4N2NjYjVjZWUsIDB4OTJmZDYzYjEsIDB4MWRmMTI3ZmUsIDB4OTVmZTMwZTEsCi0JMHhkMzhmNDJiMywgMHhkNDVmZGZlOCwgMHhmNTIzYjQ5MywgMHhlZDE2ZjdjNiwgMHgyODJkZWZkNiwgMHg3OTE1MzYzMiwKLQkweGRjNDcyMTNiLCAweDlhYmVmN2ZmLCAweDhkZDgwYWI4LCAweGMxMjVkZjgyLCAweDRmZmYxYzZlLCAweDgwZWZiMGZiLAotCTB4YmNmMjE1YmMsIDB4Mjk2YmM0ZjAsIDB4ZmRmZWJkYTIsIDB4MWY1ZmUxODksIDB4ODM5NDdmZjcsIDB4ZGRlNGUyNzMsCi0JMHhmYzA1OGNhZiwgMHhhZDI2YTkyYSwgMHg3MGY1ZDc4MiwgMHg3MGYzZTdlZCwgMHgxNTlmYmQ3NCwgMHhiY2NkZGYxMSwKLQkweDhlNjVmYjVmLCAweGZiZGZiNzg4LCAweGVmZjc5MDhhLCAweDAyZmZjZWJhLCAweGIzOGI3YTVmLCAweDAwMDA0MGQwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTk0NzgwOSwgMHhlNzdkZjBkNSwgMHg5OTI2NjY1ZCwKKwkweDZjODFiYzk5LCAweDQ0ZDg0ZWFjLCAweDQyNDI3NDBiLCAweDYxZGIxMDFhLCAweDgzMTE2ODhiLCAweDk4MTcwNTRiLAorCTB4MjY0ZjY0MDgsIDB4ZGFjN2Y1MjAsIDB4MDA0MGNmZWYsIDB4OGI0MzUxNTEsIDB4MDNiNDVhMzUsIDB4MzQxYjA1MDQsCisJMHgwMjQxODBkOCwgMHgyZDgyZTAwZSwgMHg1ZDZhZDhkNSwgMHhjOGEwZDJkYSwgMHgxYjgwOTMxYSwgMHhjZWZjNWRmZSwKKwkweGM5YmVmNzM5LCAweDgyMjY0ZWZiLCAweGY1ZmZmZmI1LCAweGY4ZjhmZWZiLCAweGY3N2JlZTVjLCAweGNlNzNkZGIzLAorCTB4ZTI4ZWY3M2QsIDB4OGI5NGM3MTgsIDB4ZmYxMmZiMTgsIDB4ZGQ5OGM3YmUsIDB4ZDcxYjE4YzYsIDB4MjM1NjMyOWQsCisJMHhjZjJkNGFkMiwgMHgwM2QwNThjZCwgMHhhYzYyY2NmZiwgMHg5Nzg1YWRkYywgMHg2NTM2MzNhNywgMHg1ZWY5MWE4NywKKwkweDQ4MzdlNDEyLCAweDZkZTQzYjYxLCAweGRlNTQ5ZDdiLCAweDIzZTc5ZWJlLCAweGEwY2ZjZDZlLCAweGM4M2FhM2ZjLAorCTB4ZGVkZWQwNGIsIDB4NTA2NWMwZjIsIDB4NjY0M2I5ZGUsIDB4OTFkYmIxMWIsIDB4YzI5NjM2NzEsIDB4ZTMwNzMxZDgsCisJMHhjZjkwNTk3ZiwgMHhjOWMwYWM2NiwgMHhmNjFiZTViMywgMHg0NWY2YzVjZCwgMHg4NGU2NzY0ZCwgMHgxNTc3Y2FmZSwKKwkweGYyMGNiY2NlLCAweDg2NTUwNzg1LCAweDJmMzdjYTU1LCAweGJlNDNmYWQzLCAweDYwMzUyYzM4LCAweDlmMzI2M2JlLAorCTB4MWNhNzY4NWYsIDB4M2JmNTBjZGUsIDB4MzcyOTJkM2MsIDB4NTUzYjE4YjgsIDB4OGQ1ZTYwZTUsIDB4NGI3NzZhYjEsCisJMHgxOGEzZjVjYSwgMHhjZjZmMDkyYiwgMHhmNTI1NzZjNSwgMHgzYTk3MGY5MiwgMHg5N2U2Yzc2NSwgMHhiNmJhZTFmYiwKKwkweDk3YmIzZTRhLCAweGYxMmRkMmIxLCAweGNmOTIzYmNjLCAweGZmZjg0YmUxLCAweGY5MWNhMzU4LCAweDg2MmY5NDFlLAorCTB4YjdlODMyNzUsIDB4MzJlNGQ1OTAsIDB4YWI1ZmM3MTksIDB4ZjBkZGRkNzksIDB4ZDNhNTU1M2IsIDB4N2NiZTQ2MzgsCisJMHhlZDAzOGMyYiwgMHg3Yzk2OWUyYSwgMHgxYjBhYzRiOCwgMHhmOGMwMzQwYiwgMHhiMzljYmJlZCwgMHg3ZDcwYjkzNywKKwkweDZlMTFiNGNiLCAweDFhZGRkNzVjLCAweGU3MGMyYmQ2LCAweDcxN2E3NGVmLCAweDVjYjQxYjdlLCAweGJmNTkyZjI4LAorCTB4ZDUxODJiNDEsIDB4OTZlOTVmZGQsIDB4ZDU3OWQ2YmUsIDB4OTgwZDRkMGUsIDB4NTNkM2EzY2EsIDB4NDc3OThjNTUsCisJMHgxODRiZTc3NCwgMHhiZjQwMzdmMywgMHhiMzZiMDk0YywgMHhmZjdmNzc0NiwgMHg5NjMyMjU4MCwgMHhjY2NiZmQ4YywKKwkweDFmZWVlOGViLCAweDQzZGY0OTIwLCAweDAxM2ZjMTZmLCAweDZlM2RhMTVlLCAweGI3ODFhYjgyLCAweGRiZmMzYWM1LAorCTB4YjNiNzhkZGIsIDB4ZDJhM2MwYmEsIDB4ZGZlZTZkOTksIDB4M2M0MDFmNDgsIDB4MTA2YTdjYzAsIDB4MTFhZTkwNGUsCisJMHg2NDRjZjNmMywgMHhkZmU4MTQ5MywgMHhjNGJhNjdlMywgMHg5MThmNWY3YSwgMHg5ZjJjYThkNiwgMHg0MjBiNThjMSwKKwkweDc4Y2FmZGEzLCAweDExNmM2YmM4LCAweDkzZjYzMWYzLCAweGE5ZmVkOTE1LCAweDA1OWZiZjkwLCAweDU3YmNlMmU2LAorCTB4YzQyMjgxNDgsIDB4NjkwZDYzMTMsIDB4MjRhYmJmNDgsIDB4ZmZkNzFiMzYsIDB4OTQzNDljMDMsIDB4ZjQwN2VhYWYsCisJMHg5OWFmNzAwOSwgMHg5NjQ5YmQ5NiwgMHgzMDkzZGNjNCwgMHhiZGM0ZjA1ZiwgMHgyMTRmZDRlOSwgMHgzZjQyYTNmNSwKKwkweDhmZGZjZjQzLCAweGU5NjM5YjllLCAweDMyMmRjZjQ3LCAweDdlYTRhOWZhLCAweDRmZDYxNzljLCAweGViMDRlZTRkLAorCTB4OGM0YjcyN2MsIDB4N2VhNGVlN2UsIDB4MmViNjE3ZGMsIDB4ZDY4OThhZmQsIDB4NDY1MTVjZjksIDB4ZjU0ZTI0ZmQsCisJMHg5N2Q0MDBiMSwgMHgyZDYwN2EwZCwgMHg1ZGNhMTk3ZSwgMHhlZjYzODlmNSwgMHg5OGJhNjY2NSwgMHhkZmY5MTJiYywKKwkweGE2NjI1YzBkLCAweDM4OWM4NDhiLCAweGZhMjYxZDBiLCAweGQwZjI1OGZiLCAweDViZWM3ZTkzLCAweDQ0ODMwZjIyLAorCTB4NWYxYTM1MTIsIDB4NWM5MWFmZWIsIDB4NDFkZmQ0OTgsIDB4YmJmYTNiZjksIDB4MzFkYzJlNDgsIDB4MGViMTcwMjEsCisJMHg1OWIxYzBmMywgMHg4MTZiYzgzZiwgMHhlODMxZWI2ZiwgMHhiMTI5ZTYxYSwgMHgzNmJkNGMzNCwgMHhlZmNiYTM0YywKKwkweDI2MWMzOTU2LCAweDg4ZGJmODBmLCAweDY4M2VkMDIzLCAweDA4OTExY2ViLCAweGE0ZDJmNWY5LCAweDM2NWMyMDVmLAorCTB4MjdjMTFiMzMsIDB4NTg5NTY2NGUsIDB4NDhjZWNlMmYsIDB4OWU5ZGRkM2UsIDB4ODI2NDI5YmQsIDB4ODA0MWVhZDMsCisJMHhkZmJiYTk3ZiwgMHgwZDIwNmFkNSwgMHhiYjJiNmJlOSwgMHhiNmY0ODQyMSwgMHhhN2FjMTA2YSwgMHg4NTRmNjMzZiwKKwkweDE0ODQ4ZmFlLCAweDIwYTgzZjY4LCAweGQ3NjllMTBkLCAweGUzY2RiZjgwLCAweDI4ZmUzMDZiLCAweDFjMTlmZjFhLAorCTB4M2Y4ZTA3NzcsIDB4ZjZmOGU3YWUsIDB4ZjE5NjM5MjEsIDB4MmM4YjgzMWQsIDB4MTgzNDNiZTMsIDB4MTc3ZGU4MWYsCisJMHgwZjhjNTViYiwgMHhkOGMwOWJmMCwgMHg2ODViYTFmMywgMHgyMmUwZmI3YywgMHg4ZDZlZmYxYSwgMHg4ZmM2NTkxNSwKKwkweDA1ZmYxYWViLCAweGRlYTVmNzFjLCAweDgyNjQzZmQ2LCAweDRiODNmZDc1LCAweGY4ZDdlYmFjLCAweDBiNjU1ZmZhLAorCTB4YjQ3MWY4YzUsIDB4MTY4NzVmZmUsIDB4MmUwZmY1ZjAsIDB4ZjNiN2ViZTEsIDB4ZjdjNmJiN2UsIDB4NzVmZmMxNzQsCisJMHhkZWFkZjcxYywgMHhhMjc0M2ZkNiwgMHg5NTE3ZmQ3NSwgMHhlNzZmZDc1OSwgMHhjYWNiYmZlMywgMHgxYTJlZjhjNSwKKwkweDE5NTBiZGZmLCAweDY1NDVmZjVmLCAweDBmNjZiZTM0LCAweGI0OGU5MGY4LCAweDYxOTU3MTAxLCAweDA0MGQ5ZjE4LAorCTB4MTkyNTQ4ODYsIDB4NjQ3NGE3ZTUsIDB4ZmRhMGM2MWYsIDB4ZTA4NDM2M2EsIDB4YTcxYzQ3NzAsIDB4ODBlMmNmYmIsCisJMHhmMmRkNWNkZSwgMHhhMzgxODU4ZSwgMHgwODU1OWU0MCwgMHg5ZmFkMmY5YSwgMHhhNTljYTFhNCwgMHgwYjdiOTA3MiwKKwkweDM0MTc1NGM1LCAweGIwZGZiNGM5LCAweDcwZjBmNjc1LCAweDkzN2I2Zjk4LCAweDgyZmNjMjFjLCAweDY1ODc5Nzc1LAorCTB4YmNkOGVmZGEsIDB4YjBhNzZjM2MsIDB4ZjBmZjdlMDgsIDB4Y2QxYmQxYTEsIDB4MTc0ZThhZWIsIDB4NWFjN2E4ZDYsCisJMHhlN2M0N2MyZCwgMHg0NmNjOWExMywgMHhhNmZjYzI1NiwgMHhlYjhjMTEyMSwgMHgzOTAzMWZjZSwgMHhiZTdlNDBjYSwKKwkweGQzMTQ3MjBmLCAweDA3OGMyYWUzLCAweDljODI4ZmRmLCAweDZmOTk5YTY1LCAweDNjN2RmMTk2LCAweDk5MWNkZWM0LAorCTB4ZmY4MjcyODIsIDB4YmMzODUzMWQsIDB4YzI5MTJkOGYsIDB4ZDZjZmZmMDgsIDB4M2U1MGQyMmUsIDB4MDc4OWFjMmQsCisJMHgyM2NmNzdhMCwgMHhiOWQ0ZjAyOCwgMHgyOGRlMWVjYiwgMHgwOGJkM2MxMSwgMHgxNTg5MWI5ZiwgMHhhMDMzZmIxOSwKKwkweGI2ODAxZmI1LCAweGE1YWZiNmIwLCAweGJjMmMyZGRkLCAweGNmZWEwZDMyLCAweDQ4M2Y5MzVmLCAweDNjZGZmNTg3LAorCTB4YzY1NjNlZGIsIDB4MDdmOTgzZmQsIDB4ZDk4Zjg4ZDgsIDB4NjMwZTViMDAsIDB4YWFkNzFiYjMsIDB4ZTM3MzIwMDMsCisJMHg1NmZkZjU2YywgMHgwMTM5ZmI1MywgMHgyMmU2ZmU2YiwgMHgwZDVkYmU2YiwgMHgzN2Q0MzZhYiwgMHgwMWI2MjU4YSwKKwkweGQyYjViZGZhLCAweDkzOGM2ZTVhLCAweDc4ZTFmNTI4LCAweDIwZmRlMzE1LCAweDU2ZjdjZjg1LCAweDY3ZTJjNzRjLAorCTB4NTczYWYwOWQsIDB4Zjk4ZDZkZTcsIDB4NTk1MmVmMDQsIDB4ZDZjYmY2ODQsIDB4NGZmODQ2NjQsIDB4OWQwMTdhYTYsCisJMHhiZTdhM2JhZiwgMHgzZjg3NTU3MywgMHhmNzMzZTYwZiwgMHgxOWUwOTk0ZSwgMHhiZGQ2ZmYzZCwgMHgxOGRiN2VmMSwKKwkweDU2M2Y2YjQ4LCAweGQ3YTMwNDkxLCAweDc5ZmYzZDEzLCAweGEzZDdhMzRiLCAweDFmOTYxZTkzLCAweGU5Y2VmZThhLAorCTB4ODI5ZTlhMjQsIDB4MWVmYTkzNGQsIDB4NmYyYmQ1MzUsIDB4NTFlZmIyYjgsIDB4NmU5NTdkMTMsIDB4MTdjOTY1OTksCisJMHhlYTU4ZTc4NywgMHg1YmU2ZDYxNywgMHgxNGQ2MTdjYSwgMHhhZmU3Y2E1YiwgMHhlN2M5NjQ1ZSwgMHhkNGI0ZWU4NywKKwkweDk5NzRiNzlmLCAweGNhZDZmY2E1LCAweDM3ZTUyYzdiLCAweGU0YjVhZDE3LCAweGIxMWUwNGU3LCAweGY2NzFiZmQ0LAorCTB4NmRiOTRiMDYsIDB4MjBkNzI1ZWYsIDB4MjViZjU1MWYsIDB4M2UzN2RjMzMsIDB4MDA3YjFkNzUsIDB4NWQ0ZmMxZjUsCisJMHg3MWYxMGY4YSwgMHhmODhkMmFhMiwgMHg5Nzk1NTRlMCwgMHg0Y2E2ZjZkMiwgMHhjMWNiODA0NywgMHgxNjcxNTQwMiwKKwkweGFkMDg2YjJlLCAweDk5NzI4ODllLCAweDVlMmNmYzkxLCAweDFhMTQzM2I2LCAweGU0YWRkYTA4LCAweGI1YzlmODI1LAorCTB4MDkwMDhiMWEsIDB4MTc0ZmFjNGIsIDB4YTZjYTc3MWQsIDB4OTRmM2Q2ZjIsIDB4NjdhMzAyZDcsIDB4NWI5NzJjZjYsCisJMHg2ZTBmN2Y2MywgMHhlNTA4YmZjYywgMHgwMGYyNmY0ZSwgMHgzZWUwMDZmZSwgMHhmN2Y2MjFkNywgMHg4OTMyZjJlOCwKKwkweDMzYmY5OWU1LCAweGZjZjg5Y2I2LCAweDY1YjM5MDljLCAweDY1MDc5NzFhLCAweGNjOWJmNmNmLCAweDhjOGY5ODNjLAorCTB4ZjFhYWZjYTgsIDB4MjhhODAwMWEsIDB4NGYzYjUxMjcsIDB4MmUwMDdhNDYsIDB4NTBjYmQwYjAsIDB4ZWRiNzdmMGIsCisJMHgxNTVlNjk5MywgMHhhM2M2MTMyOCwgMHgyMzViYzljOCwgMHgxYzg5OWNhMSwgMHg2OGRkN2MxOCwgMHg3ZWZmODc5YywKKwkweDI5YWVmOTA5LCAweGI2ZjVmNjk5LCAweDhmN2RlOWFhLCAweDNjOWY4ODJhLCAweGNkNTQ0ZjRhLCAweDU1NThmNGE2LAorCTB4NTVhM2QyODAsIDB4NWZiZTk0NDUsIDB4NmI2OTQ5NTUsIDB4MGY0YTUyZDUsIDB4ZmQyODg1NTcsIDB4NGE2YWQ1NTMsCisJMHhhMWFhYWJkZiwgMHg1YWFhOWRmNCwgMHgxNTUwZmY0YSwgMHhjYWJkYjRhNiwgMHgwZmMxYTk0ZiwgMHg0OTM3ZjI1ZCwKKwkweGFlYzJhYmU4LCAweGYyODc5ZDgwLCAweDU2NWFjNTY3LCAweGUyMTZkZDQwLCAweGYyMWE1ZjczLCAweDY3ZDc1OWY5LAorCTB4M2YxZjUwMjMsIDB4YTE5ZDhlZmIsIDB4YmMxYmRmYmUsIDB4NzdhZGU5YTIsIDB4NWY0OWZhM2MsIDB4ZmUwMzA4MjksCisJMHgzYjk2N2IzMywgMHg5YzllMzhlMywgMHg4MTlkMzYzNiwgMHhmODY3YmEzYywgMHg0NmRiYmUxMywgMHg5MjQxNWU1MSwKKwkweDM3YzkwZDgxLCAweGRmYTMxZGNiLCAweDc1ZjA4YzYxLCAweDdmMzEzYzNlLCAweDAxNmI5OGU3LCAweGZkMWVjNzFmLAorCTB4N2JmNjM2NmIsIDB4NzE3ZmVjNGUsIDB4ODdkYTY0MDcsIDB4MGY5MzY0NTksIDB4MWI4MjY1ZjEsIDB4M2I5ZDZiZWQsCisJMHgwZjNmYmM4NCwgMHg4MmVhM2VmYywgMHgwNjYwY2I1ZiwgMHgyNzQ5MDRlOSwgMHg2OGRiM2JmYSwgMHhiMWMyMGE2NywKKwkweGM0MGMzZTM5LCAweGRjMWVjZWNmLCAweDVjN2U0MWU0LCAweDhmZDM2NjljLCAweDkxODM4MGM2LCAweGViYTQzNzk2LAorCTB4ZDNmZWYzMmUsIDB4YWQ5ZmNkNjQsIDB4OTAzN2E2OTEsIDB4NWMyNmY2M2MsIDB4NGFlOTFhM2YsIDB4NDMwZThmZDcsCisJMHg2YTUxYTdmYywgMHg0ZDM4YjNmNCwgMHhiZjAyOGZkMywgMHgzNDMyZGE5ZSwgMHg2MWRmZWY4MSwgMHgyN2Q2MGZiZSwKKwkweDVkODJiZDEyLCAweGQ1ZmZmNTQ4LCAweDFmYWRlOWYzLCAweDM1OGMzZTYzLCAweDI4MWMwZmIyLCAweGU4NmNhMDBmLAorCTB4MWU5ZGVkZjksIDB4ZDEzZTU3NzgsIDB4Y2Q1ZjEwZjIsIDB4MmZhODY3ZWEsIDB4NWZmZmMxYzQsIDB4MTU3ZWMxMGUsCisJMHgwNmZkMWJjYSwgMHhmZDkwZTQxYiwgMHhkZWJkZjhkYiwgMHhmM2I0MWUzMiwgMHhiNjM3MzYxYSwgMHgxNTZlOWRlYiwKKwkweDJiYTBjYzc2LCAweDFhMWE1NzkwLCAweDNhMjc2NGNiLCAweDkyYmVlYjc1LCAweDliMDdjOTY4LCAweDdkOTZlOWZhLAorCTB4ZmMwMWZmMDYsIDB4NDE1MjgyMGYsIDB4NTQxMzI5YmEsIDB4NTZiOGExZDQsIDB4MjNiZjMwNGIsIDB4MmYwMTNmMjgsCisJMHgyYmQ3ODk0MSwgMHgwMTZhYjQ3NywgMHgwYjYzOTEyZiwgMHhlNWI3MTllYSwgMHhiZGU3NzQxOCwgMHhlZjIwOGZmMSwKKwkweDY1NDZmZTRmLCAweGRmZjk2MmY3LCAweGFlNTA1NjYwLCAweGY3MjBjNTFhLCAweDJmOWY5MDZjLCAweDk2MzViNzcyLAorCTB4NzdiOTQwY2UsIDB4ZjlmN2M2ZDIsIDB4ODNjZjJjMDUsIDB4YWIxMTRmNDYsIDB4ZTczZDQ2YzksIDB4OGU5YjY2MjMsCisJMHhmYjExZmZmNCwgMHg2NGQzMjc5ZCwgMHgxYTZjZjg2ZiwgMHg2YWZlNzNhZCwgMHhmYTBiM2VlYiwgMHg1ODVmMjU5OSwKKwkweGIwMTdjZDZiLCAweGRlOTA1MzZiLCAweDJjYTlkNjBiLCAweDVhNWYyMTJjLCAweDlkMzZiZGNiLCAweDk1NjQyZGZhLAorCTB4NDFkZWM4YWIsIDB4YmRjNjA1N2IsIDB4MDBjYTY3NGQsIDB4NzNmOTVmOTgsIDB4NDNlNzY1OGYsIDB4YWUzNjNiZmUsCisJMHg3YmY2MWJhNywgMHhmZjNlMWY3MSwgMHhlNmIwYTQ5MiwgMHgxYTBmZjI4NywgMHgxOTcwN2YzMywgMHg1NWUxZjZjMywKKwkweDZlNDJhNzI4LCAweDdhY2NkYmU2LCAweGNlZWJlZmUyLCAweGM2YmU3YTNmLCAweDhmYzNkMjdlLCAweDZmMjFlNjIwLAorCTB4MThlMWZjOTEsIDB4OWIzNGRhNzYsIDB4MTBhZGY0MjQsIDB4YmFlMDM3YTUsIDB4YmU2YjdhNGQsIDB4MmY5MTgzODAsCisJMHgxOWRmY2E4ZiwgMHhlOWE3ZmY5NSwgMHhlODU5ODkyZCwgMHhjODE0ODhlZCwgMHhmYTczMjViNywgMHg1MjQxN2Q0MiwKKwkweDM3YzBiNTNhLCAweDQ3YWQzZmU5LCAweGQyZmZlNWZmLCAweGZmNDIwN2ZlLCAweGVmZmU5NmQ5LCAweDNmZjY5N2ZjLAorCTB4NTdmY2M3YWMsIDB4ZmNiZmVhYzYsIDB4NDMzYjZkYjksIDB4OWU0YTZmMjAsIDB4NjBjM2M4NzksIDB4ZDRhOTNhMWYsCisJMHhlZjAwZjhhNCwgMHg3YTU3OWI2NSwgMHgyODRlMGU5MCwgMHhmM2QyMGYyMSwgMHgzZDNjYjBjOSwgMHg0NmVjM2QxNiwKKwkweGEyM2YyMDdhLCAweDVkYTEyNWRmLCAweGZlODRmZjg1LCAweGRmNzUzZDRmLCAweDNlNjdkYzRjLCAweDY0ZWFhY2RiLAorCTB4NDdiMTZkMmYsIDB4MTVhZmMwZWMsIDB4ZDgzM2M1OGQsIDB4ZTExZmNhMTgsIDB4YzhjZmJiZjksIDB4ZDJiMjZmOTgsCisJMHgwZjkzYzk2NywgMHgwZGZmYTBhNSwgMHgxM2Q4NDUyOCwgMHgyYTk3ZDIxMSwgMHhjNWNjM2VlYSwgMHgzYWM4Mjg3ZCwKKwkweGRiYTJjZjg5LCAweGZhZTdmOGUxLCAweGQ3Y2M3YzkwLCAweGMzOTY3YTEyLCAweDBmY2Y0OTNjLCAweDFiMDRiODBhLAorCTB4YTMyMzNiZWYsIDB4NzJiNTkzZWYsIDB4ZmQ1NDY4M2YsIDB4ZDRmZmExMjIsIDB4Yzc0OWRjZGIsIDB4ZGY2Mjc0YzAsCisJMHg3OTQxZGY2MSwgMHg4NTgzYzA2OSwgMHhiZDUzZmViOSwgMHg0NzMxZTFmNSwgMHg3NTZkM2U2MCwgMHgyNjQ4ZjFiZiwKKwkweDc2N2MxOTM4LCAweDJmZmU2MWI2LCAweDJlZjZmNzllLCAweDlkODVkYjhmLCAweDRjMmVkZGQ3LCAweDQyNGRiY2VkLAorCTB4NjllNjZiNmYsIDB4YTBmMTFhOTksIDB4NDFiNjVjNWUsIDB4NzNlMDg1ZjUsIDB4NGY0ZGI2ZDksIDB4ZWE3NjhhM2MsCisJMHg3MGRmNzZiYiwgMHhkYjc0YmZlOCwgMHgwMDk4N2Y0YiwgMHg2YWVkZDJmOSwgMHgwY2JlMGNkMiwgMHg4ZGQyOTQ5NywKKwkweGJmZmMyMDk3LCAweDFlMzc2Yzc0LCAweDkyZjU3ZTRhLCAweGJmY2QxZGU2LCAweDM3NGZiOGZmLCAweGVmYjc0YTNlLAorCTB4OWVlOGQ4ZDMsIDB4YjBkMjk4ZjAsIDB4YzU3NTZiNGYsIDB4OTFjMzRiYzAsIDB4YWFhZmQ0NWMsIDB4YTFhZTdlYjcsCisJMHhhZjcyNzkzZCwgMHg2M2QzNTJjNCwgMHg0YmMzNzNjMCwgMHg5YzIwMjdhNCwgMHg0ZjAyOGYwOCwgMHhhYThiNzg1ZCwKKwkweGEwYmMwNDFmLCAweDE0ZjAzNzNjLCAweDkwODBmZTVkLCAweDc3OWZkODNmLCAweGQzZjNkMTE0LCAweGY5NWZhM2NmLAorCTB4ZDcwZmJiM2QsIDB4ZWRmNGY0NWYsIDB4NzFjNzVjMWUsIDB4ZjVkMzkyYTUsIDB4ZmM1MzJiNjMsIDB4MWE5MTZlMzAsCisJMHhlNTI5ZDE0YSwgMHhmZjFlOGJkZiwgMHhlMTViZDEyMSwgMHhlMTRjM2YxYiwgMHg5ZmJmYTBmNiwgMHg1MGE2ZjY4ZCwKKwkweGMyZGY1YzNmLCAweGZhZDAzN2Y1LCAweGU4ODA1ODBhLCAweDM5MzFlOGFlLCAweGE3ZTkwYzJmLCAweDNkYmU5YjBhLAorCTB4Yzg2NDVmMDYsIDB4NmY4ZTJmOWMsIDB4ZDYwYjg1MDQsIDB4MTJlZDFjNzcsIDB4NGVmZWIzZjQsIDB4N2YyNjZmMGUsCisJMHhmYzg2MjJjOCwgMHgzZmMzNDNmZiwgMHhmZTUzMTZjZSwgMHg5M2M3MDc1MywgMHhiZTA5YjY0MywgMHg0Y2NmNmQwMiwKKwkweGI3Nzc3NWFmLCAweDBkNGU3ZTIwLCAweDFmYTJhN2YyLCAweDkwOTRjODJkLCAweDI1ZjQ4NzgwLCAweDMxYmYyYmY0LAorCTB4ODdlMzk1MmQsIDB4ZDE2Yzk1NzksIDB4Mjk4MGY0MGUsIDB4YjdlYjFkZjgsIDB4MThlNzdlYTgsIDB4NjVmNjNiNGIsCisJMHg0YmY4Zjc3YSwgMHhlZjMwZjhjNCwgMHg4ZmJmZGMzOCwgMHg4NmEyYjBhNywgMHg1NWJiZWIxOCwgMHhmNjFlZjgzNiwKKwkweDk5N2QxMzcxLCAweDdiZjM5YmY4LCAweGJmOWMzZGRkLCAweGNmMGY3ZTBkLCAweDlmZTU4ZTlhLCAweDA3ZjljOWJjLAorCTB4MDhmZWUxZGIsIDB4NTJhNDhhZjMsIDB4MjVlYmJlZjksIDB4MTY3NjA3OTIsIDB4NzVkN2M1ODksIDB4NmI2YmUwYWEsCisJMHgzMDI3NDFiOSwgMHgzMDRhNDU2ZiwgMHhkZmY2MGJkMSwgMHhmZTRmZTA4NywgMHhkMDc1ODJiMywgMHg4MzJmMjRjZSwKKwkweDY3YTc5ZTM4LCAweDE2ZGYwNjdmLCAweDI1MWZmZTBhLCAweGFkOWZmOTViLCAweGJiZGY3Y2U3LCAweDdkYTIxNTdlLAorCTB4M2YwZDRjYWUsIDB4MmJmMjI4ZjEsIDB4OGJjODY3ZjAsIDB4ZTFlNmFhZmMsIDB4MWZkNzRmYmEsIDB4YzA0ZGMzZjgsCisJMHgwYzFiYTdhNywgMHhjZmNhYjUzZSwgMHg3YTJkM2U2OCwgMHhmNDg0YjM3NiwgMHhhN2E3Y2QxOSwgMHg4OTFiNDA4YiwKKwkweDNkZjBhN2M1LCAweGI1MTY5ZjI2LCAweDlmOTUzZmZlLCAweDhmYWVmYzA2LCAweDBmMjE5ZjgyLCAweGI0NjM4MzdiLAorCTB4ZjM2MzNjM2MsIDB4ZTVhMzNjMTIsIDB4YzliZGZjMjEsIDB4OWZkMjdiYjIsIDB4YmQwNjc3NDEsIDB4ZmNiMmZjOTUsCisJMHgxODE3ZjIyMiwgMHg1ZGQwNjk3NCwgMHg3NDFhNWQxNywgMHg2MmZmYzNkNywgMHhmOTc0NWY4MSwgMHhhMDA1YTQ2MCwKKwkweDJhNWRiYzkzLCAweGNkNjU1NWQ5LCAweGRhMGMzY2ZjLCAweDhiMjAzY2JkLCAweDZkYTdlNGUwLCAweDNjYmNkNThjLAorCTB4MGY5Y2M5MjAsIDB4YTIxYmU1NDcsIDB4ZjJhM2ZiZWEsIDB4MDNmNTUxNzksIDB4NGI0YWY5NTEsIDB4MDNhNmIyZmQsCisJMHg0N2ZjMjMxYSwgMHg0YmVjZjUyYywgMHhjNDFmNjUxZiwgMHhmZDhjODdiMCwgMHg0Njc4ZDgyNiwgMHgwYzVkMjEwYiwKKwkweGRlNTBkNGVjLCAweDA1NDFjYmE5LCAweDFlZTBmZjQ1LCAweDBlYzVlYzk5LCAweDE4MmFmMTgwLCAweDNkM2VhM2E3LAorCTB4YjFiOTAyMWMsIDB4ZjBlZGM5ZDIsIDB4ZDNkM2JkMGUsIDB4ODk5NWQyMDcsIDB4YWM5OWRmM2MsIDB4NjdiOTQyYWQsCisJMHg3Mjc0ZWY3YywgMHg1ZTQ3NDczZiwgMHhlNGQxMjdhNywgMHgyY2QyMzhhNywgMHgwZDZlZGM5MywgMHhmY2IxZTliMywKKwkweDEwYTNiMDIwLCAweDZmNTk1YmRlLCAweDM5ZmZkY2U1LCAweDVlMGQ3NjRkLCAweDhkNjhmNjhhLCAweDc3MTM0M2VjLAorCTB4M2QxYmIyYzEsIDB4NjhlOTJhZTgsIDB4NmNjZDdhMWUsIDB4NTVmMGJlZjgsIDB4M2E1NThlOTksIDB4NzA2MzNjZTIsCisJMHg1N2U0MmM1ZSwgMHg4OWVjOTlmYSwgMHhiM2Y0MmMxMywgMHg2Y2NmZTg4OSwgMHg4MmM1NzZlNiwgMHgwOGZhNTEzNSwKKwkweDU0ZjQ0MzViLCAweGExYTI1YWUwLCAweGUwM2IwNTNjLCAweDk3M2ZhYjdkLCAweGU4ODk0NWYzLCAweGI1YmQ2OGFmLAorCTB4Mjc4ZjY4ZGMsIDB4OTVkZjY4NWEsIDB4MDNjYjU5ZDQsIDB4NjVkYTNlYzIsIDB4Y2IwNjQ5ZjAsIDB4ODY4MzM5MjAsCisJMHg0MmU3ZGEwZiwgMHg0NzkzNGYyZSwgMHhmMDFiMzM1ZCwgMHg2NjUwNzFkMSwgMHhiNjc5OWU3OCwgMHg5YzdjMjY1OSwKKwkweDk3ZTdlN2FkLCAweGZjNGM5NDJjLCAweDQ5M2FjMTU2LCAweDZhNzAxYTFlLCAweDdhZDI3ZTQzLCAweDNiNmQ1Nzk3LAorCTB4MTc3ZDljZmUsIDB4M2ZjZWNkZDIsIDB4YTQzOWY5OGUsIDB4MWRkZjNiNmQsIDB4Y2ZmMzFiYjEsIDB4OGZmODNkYmQsCisJMHgyOWZkNjdhYywgMHgzN2U0OWQ3YiwgMHgyNmViZDhlZSwgMHhmM2Q4ZWY3YSwgMHg2MTc3YzFkYiwgMHhmYzlkOTc3ZSwKKwkweDNmN2IxZDc1LCAweGQ3ZjQ4MzFmLCAweDg0NWVkY2IxLCAweDEwNjNhZWYyLCAweGY3YWE4N2I3LCAweDk1YTYzZTdjLAorCTB4ODQxNWQ3ZjYsIDB4YzZiMmEzYjcsIDB4YmZlNmEzZjUsIDB4MzA5Mjk2MWUsIDB4ZGVhMTU1ODUsIDB4Zjg5ZTM3YjAsCisJMHg5M2JjZjgyOSwgMHg3YjFkMGJmYywgMHhiODBlY2YzZSwgMHhhOWViNzVmZSwgMHgxZDM5ZTcxMCwgMHg1OWZiMzY2ZSwKKwkweGY3MjI1ZjljLCAweDhmNzcwNzgzLCAweGNmMGNiNGRmLCAweDY5ZjcxYmEzLCAweGNhN2NhMWYzLCAweDgzMWY3ZjBiLAorCTB4NTllM2I0NzIsIDB4YWJiNTBmYWUsIDB4NzllMzhmYWQsIDB4ZTFmYzg3NDUsIDB4ZGNlMDE1MzIsIDB4OWZkNTRjOGUsCisJMHgxMTk0ZmJiMSwgMHg2MmEzNDM5MywgMHhlNGVmZTVjMSwgMHg3ODUwYjkzNywgMHg0ZmI3MGE2OCwgMHgyMWUxZmRmZiwKKwkweDczYmNiOWY5LCAweGFlMTIxZDg3LCAweDdmYzM4YmZiLCAweGQ3YjBiOTQ0LCAweGFjNjk3NDRlLCAweDMyYzM3NGY3LAorCTB4YjdjZTU3ZDIsIDB4N2ZjYWUxZWUsIDB4ZDBiODNhMTcsIDB4MGI5MTRiNzUsIDB4N2ZkNGY3NTksIDB4NWFmZjdjNzMsCisJMHhhMmZjZDJmNiwgMHg5ZDI3YTBmOSwgMHhmMjgzYjllZiwgMHg5YTNlZGNkYiwgMHhmYmQyMDVlZiwgMHg3ODY5ZmY4MiwKKwkweGVlZjAxNjdmLCAweGFiYmFmZjM5LCAweGRkZDdjZGZmLCAweDlkNWZkZTNiLCAweGUzYWVmMDJiLCAweDg1ZjA3Zjc5LAorCTB4YmVmY2QzYmYsIDB4ZjRkYjljYWUsIDB4MGRlZTk0ZGYsIDB4OWIxNWZlYmQsIDB4YTgwY2NkZjcsIDB4YjhkNTlkM2YsCisJMHhiMmI4YjE1MCwgMHgxOWFiZmY3YywgMHhjMGNhZmE1MCwgMHhkZjM4ODkwMywgMHgzN2U3NTFjOSwgMHhjMmE2ZmE0NiwKKwkweDkyYzlhNmVkLCAweDk2NDFlYzhkLCAweDkwN2IwOTI4LCAweDg0MDM1MWRiLCAweDQ5NjAzMGZlLCAweDAzMjFlOTAxLAorCTB4ZjVjZmRlMDYsIDB4MGViYmM1MDYsIDB4MTk1ZjFmY2YsIDB4YjE0N2RmM2MsIDB4M2JlYzZjMTQsIDB4OTdlYmNjMDEsCisJMHg5ZWQ1YmM4YiwgMHhmY2M0YjlmYywgMHg2MDNhMzQ3OCwgMHhhMjBmZjdmMCwgMHhhMDcwM2I1ZSwgMHhhNDJmN2E0YywKKwkweGU4YmVlZmE0LCAweDk3YmZjZTk5LCAweGU3YmIxNjY5LCAweDBlZDVhZjRhLCAweGRhYjI0ZGNhLCAweDdmNDU1MzRiLAorCTB4ZmY5ZjE4ZDMsIDB4MGUxNDk3MzQsIDB4MGYyNjFjMDMsIDB4ZmExMjY5ZmEsIDB4NTcwZjI3NDcsIDB4NWNmOTA0OTksCisJMHhmNjgxNTgxNiwgMHhiNTk3NTRjNSwgMHhjMzNjMDZiZiwgMHhlMWNkZjcxOSwgMHgzODBkNTc2OCwgMHg4Nzk3NTkwZSwKKwkweDkzMjQxYzcwLCAweDcwYmNmNDlmLCAweGRjMTM3OWM0LCAweDJmMThjMjMyLCAweDg3MWYxNGMzLCAweDFmNzI5ZjYzLAorCTB4YmQ4NTlkZjksIDB4OTA0ZDQ3NGQsIDB4NWFhYjVjNTcsIDB4YjQxNTlmOTAsIDB4YzgxYzM5OTcsIDB4ZTVlYzM2Y2UsCisJMHg4NGNkZTBkZSwgMHgyMTg4YWRmZCwgMHgwMzJiZjgwZCwgMHhkYWQzYmY2NSwgMHgwNmRmZDkxZiwgMHgzZTJlYmU1ZSwKKwkweDUzN2UzYzBjLCAweDg1MWJiY2JjLCAweDQ1YWU4MTk3LCAweDc0ZWJmMjBhLCAweDYyZmExN2I0LCAweDFmOWUwY2ZkLAorCTB4ZGNlODUyMTgsIDB4NTcwYmQ4NGQsIDB4YTQyOTE3NzgsIDB4NTBjYzBjZjcsIDB4OGU4NTVmMTAsIDB4MWNmMGFiYTYsCisJMHg2ODkzZTFjNCwgMHhkOWI3MTcxZSwgMHg2NDcwN2Y2OCwgMHg5MWY3MDQ0OSwgMHhkZmU1MGFiNSwgMHgxMGUzZTliMCwKKwkweDdiMmYzM2RmLCAweDBjOWRmNGVlLCAweDhkN2VlNmZkLCAweGYxZTUzZGM3LCAweDdkYmY4ZmYzLCAweDhjNDRlNWY5LAorCTB4MmM3ODE0MTcsIDB4NDZhZmZmODQsIDB4MTY3YWZmM2YsIDB4MmQzODAzODksIDB4YTEyODU4NTQsIDB4MjViZGZhMGYsCisJMHhlZmM1YmVmNiwgMHhkZmUzY2Q2ZCwgMHhmYmJhNTM3NywgMHhkZWZkNWYzOSwgMHgzYWJmY2FlNCwgMHhkOGU0MGU3ZCwKKwkweDVkZjMwMGZiLCAweGUxYTMwZTk4LCAweGZkNWRiMzE1LCAweGFmMGU2NjlkLCAweDFlMTYyMWUwLCAweGU0MmFlM2MyLAorCTB4ZTEzOWQzM2MsIDB4OWZmZTgyMWQsIDB4OTliM2QzZmIsIDB4ZWE0ZWQ3NjgsIDB4ZTVjMDk1MTgsIDB4MTdiMjMwZWIsCisJMHgzODVlYzI4MiwgMHgzZTA5YmNjYiwgMHhhMWQ3Y2ExNywgMHg3OWZlNzQwOSwgMHg4YWM3NzY1MCwgMHhlYzJhZGMyYiwKKwkweDdjNjI1ZmVkLCAweDc1MWRhNDA5LCAweGZiNDY0NmFjLCAweDFmOTI3NThkLCAweDYwZTc1NDM3LCAweGI3YzQ2MzliLAorCTB4OWY4NmFiZTQsIDB4ZmUwZGUwNGEsIDB4OGYzYzZjZTQsIDB4ODQyZmUzZTEsIDB4YmM2NjA5YTYsIDB4YTkzOGNkYjUsCisJMHgwNzg5ZTk4YywgMHg3NGRmN2JmYywgMHhlMTRkZjUxZSwgMHhjMjNkZjY4YiwgMHgzNWIzYWI3NywgMHhmYzg2MmYzNywKKwkweDZmYzA1ZGI4LCAweGM4MmZmZWU2LCAweGYzNjk3OWZmLCAweGVmZDIxYjA2LCAweGNiMzY3NWE1LCAweDJhYTk2YWY5LAorCTB4NmNiMWIxZWMsIDB4ZTY2YmNlMmMsIDB4MGIzYmE3N2UsIDB4ZjY1MDcyZjEsIDB4YjA2NzNjNjEsIDB4ODgxNjhjZjksCisJMHgwZDE4MmU3MSwgMHhmZDFmZWM0ZiwgMHg5ZDU1NWJlOSwgMHhkYWI3NmJmOCwgMHhiYWUxMWYzMCwgMHg0MzA3MjNmYiwKKwkweDU2OTc3YTNiLCAweDllNmIxYTUzLCAweDllN2NlYzAzLCAweGVkYzM1OTBiLCAweGZkZmZkMjYzLCAweGMzYTkzYmUwLAorCTB4ZjY4Yzk5MTUsIDB4N2UxMzFkNjcsIDB4NjNmYTY4OGYsIDB4Yjc2N2M3NDQsIDB4YWZlZTMwYjAsIDB4NWNhMmFmNjgsCisJMHg2OGNmNWIzOCwgMHhkYzkwMDc3ZiwgMHhmMDM3NzY4ZiwgMHg3ZWNjZjdmYiwgMHhiNjliOGI5YywgMHg4MmY1MTJmZiwKKwkweGM3NDk2NjhhLCAweGE1MGE4NjIzLCAweDZkM2Y0MzU1LCAweGM2NTEyOWIwLCAweDZiYzMzODdkLCAweGEzZWFiYmM0LAorCTB4YzVmMTM3YWYsIDB4ZjgyMTU1NTYsIDB4ZmJiMDk4MWUsIDB4ZTNmNzFjNjYsIDB4OWVhMThkMzYsIDB4ZDNiMTdmZTIsCisJMHhjN2Y4ZmI4MywgMHgwN2M0OTljZCwgMHg1N2ViYWRiZCwgMHhhOWFhZWM1NSwgMHg5NzJhMzc0OCwgMHgzMGY0ZDE4NywKKwkweDkyY2UzZWFhLCAweGY0MGU0Y2JmLCAweDY5OWFmZTQ3LCAweDhiZTI1ZDZmLCAweDZiZWZiZjgxLCAweGJjMTczODkyLAorCTB4ZmUxNmY5NDAsIDB4YmRiZTRjZmYsIDB4ODBiN2M4NjksIDB4YTNlMjY3OWMsIDB4ZjkwZjVhYmUsIDB4YmU0YjFhOTYsCisJMHhhOWJjOTYyZCwgMHg3YmM1ZjcwOCwgMHg1ZTIyYTY4NiwgMHgyNmFhYmYxNywgMHhkYjZmOTJjNywgMHhlNzM5ZjhhYSwKKwkweGI5NGUyMjMzLCAweGRiZTQxMWEzLCAweGFkZjI0ZGI3LCAweDhjNWJlNDExLCAweDVmYmY5MDc4LCAweGZmMGI3Y2E4LAorCTB4MzZkZmYwZDcsIDB4ZDYzMTZmOTQsIDB4Zjk1NjZiYWIsIDB4MDhmOWE2MzYsIDB4OGQzMWI3YzksIDB4YWYzYzRiMzYsCisJMHg3YzlmM2I1ZCwgMHg0N2FmOTI5MywgMHhlYWEwZjhmZCwgMHgzZjQxOGY4YiwgMHhmZTNlODRkYiwgMHhjNDRiODg4YywKKwkweGU1Y2U1MDcxLCAweDdmOGQzYTZhLCAweGUyZWU3MmExLCAweGZmNzM5NTBiLCAweGU0MzY3MDQ1LCAweDhjMWRlMmRjLAorCTB4ZDI3YjljZTIsIDB4OGI3Mzk3MjEsIDB4OTM5YzgxNzcsIDB4OWNiOTFlOTAsIDB4NzE4N2JjNWIsIDB4N2M5NDVjYmYsCisJMHhiZTQzZDkxYiwgMHgxMTVmYWEzMSwgMHg0ZDgzZWRlMSwgMHgwMmRmMGZlOSwgMHhhYmY1OGRmZCwgMHgxZmQ0MDczZSwKKwkweGM2ZWYyZGRiLCAweGFlNWRlNTk5LCAweDdhZGMxMGE2LCAweDE3ODNiYmM4LCAweDA4NzZlZjI2LCAweDZjNzIwNzc5LAorCTB4NjhkN2NhMDgsIDB4NWIzNWYwZmEsIDB4OGY3N2MxZTMsIDB4MmJmZjVlM2YsIDB4Y2FkZjk3ZTQsIDB4ODZmOGRlNzQsCisJMHhiZDBmOWY4ZCwgMHgxNjc4ZmUzNiwgMHg2MjYzZDdkMiwgMHhkYzg0OGIzZSwgMHg1MTBhYWY2YiwgMHhlNDVlNTNmZiwKKwkweGYxNzcyYmViLCAweDQ2OGFmMTM4LCAweGQ0NTYxZmFlLCAweGZjMmY2MTRiLCAweDE3YzI3NzMzLCAweDc4YmZjZTFhLAorCTB4MjE1MmM0OGYsIDB4ZWJjZWNiM2YsIDB4ZjM4ZDI3YjMsIDB4YzMyMzM2MzIsIDB4NzIwYjBmNDQsIDB4YmZjZmM5NGEsCisJMHhmNDBlNjE0MCwgMHg3MmJhOTdlMywgMHg1YmZlYTI0ZiwgMHhmZWZkYzM5YSwgMHhmMTdiZTJhNSwgMHhkMGFiYWRhYiwKKwkweDg4ZmM1ZGZmLCAweDQ2YTVlNzQ0LCAweGU3MTFhYjdjLCAweGEyNmUyM2RiLCAweDc3ZjkxOTc5LCAweDY2MjdlM2EzLAorCTB4OTlhOWI4OGEsIDB4MWJjMjk0YmYsIDB4OTQ3ZmM0NjIsIDB4N2ZlNmIxNmUsIDB4OTY2ZmY4MjIsIDB4NjJmMDRhZGMsCisJMHhlMzMxY2JhZiwgMHg1ZDdhOGMzOCwgMHhlMDI4M2E3MCwgMHg3ZWQzMjc1NCwgMHg4MDI3MDVkYSwgMHgyN2JkMzc5YiwKKwkweDMzZDMwMDljLCAweGUxYmE1MjMyLCAweDU4NWJmYzUyLCAweGViZWY1NjZmLCAweGJkMTZlMDM1LCAweDVkN2ZjMzZlLAorCTB4MGRlOWZhMmEsIDB4N2I5YzA2MGUsIDB4MWRjMDVmYWMsIDB4OTM5MjAyZWMsIDB4YTc1OGYwZDEsIDB4MzNiNWY5NzUsCisJMHhlODA5NGUzMSwgMHhlODRjZTQ4NiwgMHgxODE3MDBkNywgMHg3MGQyNmYyZiwgMHg0Nzk3N2RjYiwgMHhkNjY0ZmQwNSwKKwkweGUxODI5YTRjLCAweGFlMzBiMzBjLCAweDZhMGJjYTFjLCAweDBmZGNiZDE3LCAweDFkZWUzMWUwLCAweDRlZGM1OGVmLAorCTB4MGY2MDliMmYsIDB4NTZlYzM5ZTAsIDB4NDFjOTI3NjcsIDB4MzVkYjBlODMsIDB4MTQxYzA3YWUsIDB4YmZkZGRkZjAsCisJMHhmOWQ5MzI3MiwgMHg3YThlOTI0ZCwgMHgyNGUyMzA0OCwgMHhhZTAxMDZiOCwgMHhhODI4ZmY3OCwgMHg4MTA2ZmM3MCwKKwkweDBlZmY5MTFlLCAweDg3MTlmMjNjLCAweDhiYzkxZWUzLCAweDYzNWM5ZGZlLCAweDQwYmM0MmJmLCAweDhlNjZjY2ZkLAorCTB4MjI1ODYwOTcsIDB4NGViMTY0YmMsIDB4YThhOTdmM2EsIDB4ODQxMTdjOTUsIDB4ODIwNmQzNWYsIDB4ZTE5ZjIxOWYsCisJMHg5M2M2NjVjZiwgMHg1ODk1N2U4OSwgMHg0Yzk1NGJmNCwgMHhhOGE5NjVmYiwgMHhmMzVlZDMzNywgMHg5OWU3YTQwNywKKwkweDAzNmNhYTRmLCAweGZiZmUxYjgxLCAweDRmM2U3YTJhLCAweDllMzQ1MDFjLCAweGI2YmMwNGRhLCAweDA4NWQzYzIxLAorCTB4NzdhZTRlYjcsIDB4ZmJhMGJlNDUsIDB4NTA3OTQ2NTAsIDB4MzllMDU5MDksIDB4NWY3M2QxZTUsIDB4MDY3MWFmMDksCisJMHg1MThlOTBiYywgMHhjYmU3MzViZSwgMHg5MjY4MmY5OCwgMHg5ZWY0ZGY1OCwgMHg1MGYzYzVlYiwgMHhlZjE3YmYzMywKKwkweDdmZmJjMjM5LCAweDE4YjFmMjRjLCAweGJhNjBiZWViLCAweDhiOWU4NWVlLCAweGJjZjE2ZTgwLCAweDhlYmEzN2E0LAorCTB4ZDIzYjUzODYsIDB4ZTliYWI3ZjMsIDB4ZTc2NzM1ZjksIDB4ZTdhNDRjYTEsIDB4NDNmNzEyM2QsIDB4Y2U1YTI3MzQsCisJMHgxZTc2M2QzNSwgMHgwOWQ1YjVmNywgMHhlZWViMGY3NCwgMHg2ZGY1NTU3YywgMHhjYjkwYzZmNCwgMHg3ZWQxZWU4MiwKKwkweGJiMzdkZjMwLCAweGYxODIxNzA0LCAweDE0MWM1YmEyLCAweDE4ZjM0N2VmLCAweGIzNTNmNWMyLCAweDY0ZTZkZTdjLAorCTB4ZjU2N2Q3YzksIDB4MmVkYmJmZGUsIDB4MzcyNzhjYzUsIDB4M2YyMzIzZjQsIDB4ZjhjM2M3MWEsIDB4NmYxODI2ZjksCisJMHhkMTc4Zjc2NCwgMHgyZmUxODNmYiwgMHhmYWJhZGYzOCwgMHhiYWQ5YmZkYiwgMHg2ZWJlNzE4YywgMHhiNTkwNTQzYywKKwkweGI4OGQ1ZTEwLCAweGUwNTIyM2E4LCAweDczZWEyYTQ3LCAweGZjNGIyNWQzLCAweGM4NWNjYzE1LCAweDdmZGM2ZmFkLAorCTB4N2JkYzk2YWEsIDB4YTc0ZDJjZmYsIDB4ZWJiNzc0ZmIsIDB4ZTg5ZDc3YzYsIDB4ZTI2NzRmMzMsIDB4ZGJlMjZmN2MsCisJMHhlYzdmZWZiOCwgMHg1OTk4ZTdlNywgMHg0NGQ2ZjYzNiwgMHhhYjI2M2ZkYywgMHhlM2VhZTkwYywgMHhhMWY5MmE0MywKKwkweGUzY2E5ZTNmLCAweGVkZjlhZjZlLCAweDNlNWQwNTAxLCAweDM4OThmMGQ3LCAweDg5MzhjZDc2LCAweGIwMzdhY2VjLAorCTB4ODdhOGYxZWIsIDB4MDQ3Zjk4M2IsIDB4ZWYxMzJmYzEsIDB4ZDVkNDY1ZWQsIDB4NWYwMmYxNGMsIDB4YWUxMmRkOGYsCisJMHhhNTM3ZDRjNiwgMHhjNDM1ZTkzMywgMHgyMTk5MjRkYiwgMHg3ZGZjNWFkZSwgMHg3ZjIwYjhhNywgMHgwMzJjODdmYiwKKwkweDFmYTBhMDVkLCAweDA3YjFmYjUwLCAweDliZDYzMjU5LCAweDMzMjY0ZmUwLCAweDI3ZTM3YzY2LCAweGYzMDc1ZTZmLAorCTB4ZjY0ODdmMTgsIDB4YWNkZWExNzksIDB4MDMxNzJlMDMsIDB4N2FlNDdhN2QsIDB4ZTA5ODBiMWIsIDB4YWI4NTgxMzUsCisJMHhmZTM0ZGZkMSwgMHg5YzNhZmZhOCwgMHgzYmU4MTE3NywgMHhhOGE0NGY3OCwgMHgwN2I1NDM3OSwgMHg2YTI1ZWJmMywKKwkweDcyMDUwYzFmLCAweDZkOWViMDNkLCAweGJmNzI2N2I1LCAweGVhMDE3Mjg1LCAweGY1YzEzNzYxLCAweDRlYjA1ZWJjLAorCTB4NzI4ODYxZjIsIDB4OGE1YWYzNDEsIDB4OTNhODJhMmYsIDB4YjZlMTQyZTgsIDB4YmMxY2M0YjAsIDB4ZmEwM2IwZGYsCisJMHhkYTFlYjZkZCwgMHgwNWZlZTE2NywgMHhiYWRmYjFlZCwgMHg4NzVlNmYzMywgMHg0OWU2MDc3MiwgMHhiOWY5ZWJlZCwKKwkweGYzYjQwMTdjLCAweDJkZDRiZjIyLCAweGQ3OGFmZWEyLCAweGIzZWYwYzRiLCAweDdkZjNkNTE0LCAweGVhOTBlOGE5LAorCTB4N2RjNmYyYzMsIDB4M2I3ZWQwOGYsIDB4OTdlYmM2MDMsIDB4NjQ1MGZiOGUsIDB4Y2EwYmRkMmEsIDB4MmZiYTc0OTQsCisJMHhmODRjMWExOSwgMHg3ZjFjNjBlYiwgMHhmMjIwZmE2YywgMHhhYmJjNTIwYiwgMHg5OGEwYzA5NywgMHg2NGZlNjNlMywKKwkweGIzZjI0MjFmLCAweGViNGNiN2MwLCAweDk2YmNmZDBiLCAweDIzNmU5YzkzLCAweGU3NDMzYWJhLCAweGRlMDE0N2VkLAorCTB4MWJmNzgwMDEsIDB4NDBlNTVlMjIsIDB4YWI1YTA3Y2UsIDB4YzJmYzVmNjksIDB4OWI5Zjk0M2UsIDB4MzhhMjRkMzQsCisJMHg4ZjJjODU4ZSwgMHg4ZTY2MzhlMiwgMHhlYmU2ZmFlNywgMHhlOGMzM2I5NywgMHhlZDVkN2JlNywgMHgwZmRmODgxYywKKwkweGVmYTc2ZTVjLCAweDFjYjhkYmVkLCAweDRhZDQxZjZlLCAweGViZTNmNmZlLCAweDU4Zjc4NjU1LCAweDI0Y2JkN2FhLAorCTB4YWJkNzhlMmYsIDB4N2U1NjNmNzQsIDB4MTQzMWM3OGMsIDB4YzdmYWUzNmUsIDB4ZGZiY2Y1ODEsIDB4ZTFiN2E4ZTMsCisJMHg0Mzk2MDdiOSwgMHgxMWFiNzBiZSwgMHhiNGU1YzBlNywgMHhlODE2N2Y2MSwgMHg5MGMyZmUzYywgMHhkZDYyZTViYiwKKwkweDc1YTFmNjNkLCAweGQ5MjQzNGNiLCAweDJlNWI3OTY4LCAweDhiMDk3MWU0LCAweDJkMWNiZDkwLCAweDFjZjFjYjc3LAorCTB4MTk3YzgzZGQsIDB4ZWFlNjI3MWQsIDB4MGU5MDYzYjYsIDB4NWQxMDVmMjIsIDB4MTk1MjFjNTcsIDB4MDdkMjMxZGEsCisJMHg5NzE0Yjk2ZCwgMHg3M2EyNDdiNiwgMHg5MmNkZjE4YiwgMHg4YTFhZTMxZiwgMHg0OTg3YjFkZSwgMHhjZmU3MGVmZiwKKwkweDJmZWUxMWZiLCAweDg2MTlkYWVmLCAweDNjNDMxZjJjLCAweGIxY2E5YzgwLCAweGE3ZTlmZTc3LCAweDFiZTRmZGYwLAorCTB4MDIwODhjMGUsIDB4YjgyN2M5YmEsIDB4NTliZTcxMWIsIDB4NGYzYzc5OWIsIDB4NTJlYjFiZDYsIDB4OWIyZjNlZjAsCisJMHg0MGU0OTdkYSwgMHgwMmNjYWQ2MSwgMHg1MjcxMzkyNiwgMHgxMzc3NWZmMiwgMHhkNDc0MWZkZiwgMHg2NjdjMGM3NywKKwkweGI4MDUzNTY5LCAweGMxY2I3ZWJmLCAweDY2ZWY1NWY3LCAweGQ4NjQ2MzE1LCAweDA0M2Q4NGVmLCAweGY1MWY4MWY2LAorCTB4NmI1ZGUyOWIsIDB4MWQxMzM0NTMsIDB4OWI1OWVmMTQsIDB4NTVmN2MzMjIsIDB4MWFhNjFlMjIsIDB4NTc2ODU3ZjcsCisJMHg4YTcxZjFhYywgMHgwNmZhNGFmNywgMHgzZjQ2MzhkMywgMHgyZWRhYmY0NiwgMHgxZWU4NmVkZSwgMHg3ZmQ2ZjY5ZSwKKwkweGQ2OGZjZTMxLCAweGYyODZhOWY5LCAweDFlOWZiYTIyLCAweDRmZDJmN2UzLCAweGFkY2ZlZmNlLCAweDM5NWU2MDkzLAorCTB4YWMxNGNiYWYsIDB4OGNjMWYzOWUsIDB4MWQ3M2U2YTEsIDB4Y2FmYzM1MjMsIDB4OThkYTZmZDksIDB4OWNiZjA0ZGYsCisJMHhiZjMxYzUzZiwgMHhlMzhkZGYwOSwgMHg3ZjAxZWY4MCwgMHg2MTQ5Mzc1NywgMHgyM2Y5ODRhNywgMHhlNTE2Nzk1YSwKKwkweDBhZjNlNDc1LCAweDk4YWU3ZmUxLCAweDFhZWJjZmNhLCAweDgxNThkZTMzLCAweDRiMjMzZjdjLCAweGExNjA3YTIyLAorCTB4ODkzN2Q2ODAsIDB4ZmEyZjM1ZjQsIDB4NzhiMzBiZmQsIDB4OGY2ODQyZmIsIDB4MDhmOGQ4ZmMsIDB4MTM5MDRmZTcsCisJMHgxNTIzOTQ1ZSwgMHg1MmU2ZDdlYiwgMHg4YmM5M2FmZCwgMHhjODZlMzdmZCwgMHgyOGE0N2QyNywgMHg1ZTU0NjY0NywKKwkweGEzZjQ4NDc3LCAweDQ5MjNhNmEyLCAweGI3YzBjN2M4LCAweGE4MWY1MGViLCAweDUxZDc2ODk4LCAweDY4ZmMxYjhlLAorCTB4ZTJlYmY3ZjAsIDB4ZTg3MzJiM2UsIDB4YzY3ZWYxYTMsIDB4OGJlNjQ2ZmYsIDB4MjFmMmQ3YzEsIDB4ZjU4M2Q3MmUsCisJMHgzOTgzMWY5YywgMHhkZjVmNWY5YywgMHgyZjBhZTJhNiwgMHg5Zjg5YmY4NCwgMHhmY2UxNmY4ZiwgMHg0Mzc2M2YyYSwKKwkweDJmODdkZTJlLCAweGMzZWZjY2RjLCAweDQ1M2Y1ODFmLCAweDc4ZmE3ZDQzLCAweGE2ZmRhMjU4LCAweGJkNzM3ZjI3LAorCTB4YWJiZjlhMzUsIDB4N2RlZmJlMjUsIDB4ZTBkMmZkNWQsIDB4ZTE4ZjgzNmYsIDB4YWYxYzZhZWYsIDB4ZWYxNGY4MGMsCisJMHhmNWYzNDY0ZiwgMHgwZmUxYjU0YywgMHhhZjdjYzNiNywgMHgwM2Q2MWE3OSwgMHhkZGYyOWRmMywgMHgyNmFkM2QzYiwKKwkweDE0ZjkwOTM5LCAweDNjMjgxN2NjLCAweDJiOTBjYjllLCAweGZiOGYwYWU1LCAweDhiZjNkYWZiLCAweGI3NmMzZjFhLAorCTB4Njc3ZTQ3ZmEsIDB4ZWJmMWU0NGYsIDB4ZmRkMTJhNzUsIDB4MDdiM2Y4ZjksIDB4N2YyMDVkOWYsIDB4OWQ1ZjI4NWUsCisJMHhmMThkM2Y4ZiwgMHg3ZWQ2M2RlNSwgMHgyZGU4Mjc3ZSwgMHg4MDc2YmZiYSwgMHhmYWUwMDQ2YiwgMHg4YTI2ZmQ0YSwKKwkweGE5ZThmZGYzLCAweDNmMTEzMzIzLCAweGNlODFiYmE1LCAweGRkZWFiZTkxLCAweDRlNzI4MjJjLCAweDU1N2VkMzA5LAorCTB4M2RkMzI4ZDIsIDB4YjI0NGE2MDEsIDB4Zjk5YjczYWYsIDB4OTU2ZGM3OTgsIDB4N2EyNmUzM2UsIDB4MWVkNjc5MmEsCisJMHg0YmVkMDE5ZSwgMHg4NjMwN2U3NiwgMHg3Nzk2NjhlMiwgMHhlODVhNWM1MiwgMHg4NzJmYTEyOSwgMHgxZjIwYzc1YSwKKwkweDdlM2MyODk0LCAweDA0MmU1YTJjLCAweGQ3MGZkYzFjLCAweDM2N2UyYmI2LCAweGMyZGE0ZmFlLCAweDY5Mjg4ZmRmLAorCTB4OWJiNTUxYjgsIDB4NzQ2ZTI1Y2UsIDB4M2EzZDQ2YTgsIDB4MWQwMTBkZDcsIDB4OWM1ZGZkZTMsIDB4MDJkZGY5OWYsCisJMHg2ZGFjNmUyMywgMHgyNTEzOTcyYiwgMHg4MWQ5MmE0ZCwgMHhiN2I2NWIyNSwgMHhjOTcwZmM2MywgMHg3N2YyNzYzYiwKKwkweGExOWNiNzA1LCAweDllNTMxMGZiLCAweDk0ZmU0NmQ5LCAweDM5NmM5MzYwLCAweGI3MTFlYjdmLCAweGQ4OGU0NWI5LAorCTB4YjFiMGVlMzEsIDB4MjExZGNlOWMsIDB4MGRmMjg0N2YsIDB4Y2Y5N2UzYjEsIDB4ZmE1ODVmMTcsIDB4MjE5ZDllY2MsCisJMHhhZmU5NjEwMCwgMHg3Y2EwZjQ5ZSwgMHhkOWIyZDUzOSwgMHg3ZTg3NzA4MywgMHhiYTZlMzJiZiwgMHhjMzY2OWM0NywKKwkweGE3MTk1ZjNkLCAweDAxZmYwYTc5LCAweDQzOGY3MzhjLCAweDljNDYzNWQ4LCAweGE0YmU5NmViLCAweGIyZmNjMjQ3LAorCTB4NzM5YzYyZjMsIDB4ZGJlNWU5NzQsIDB4ZWYxYzdkM2UsIDB4N2IzZGI0MTEsIDB4NmY5YzcxZmEsIDB4N2UzZTNmZDksCisJMHhkOGMxZTMxYywgMHg3N2VkMjc1ZSwgMHhhMmRlYTdjMSwgMHhkZGEzNmMzOCwgMHhiNWRmYjEyNiwgMHhlMjkyN2Q2ZiwKKwkweGI1ZGZkYmQ3LCAweGY2YjdiMGZiLCAweDYzMDdjNzNkLCAweGY2ZmI2MDNjLCAweDZmZDA1MjJmLCAweDM0Y2Y2NGI5LAorCTB4ZDkyZWViZjIsIDB4YzU5NTI1MzEsIDB4MTQ4YzJmZDgsIDB4MDE3YzM2ZTksIDB4ZjhkMWYzZjEsIDB4ODA3OGQwM2EsCisJMHgwMjNlZDZlMiwgMHhlYmZjYTM3YywgMHgyODZkYmI4YSwgMHg1ZWNjNzFlNywgMHgxZjViNmYxMSwgMHg4ZjQyOWVmYiwKKwkweGViYzZkYWY4LCAweGU1MWNiOWFlLCAweDFmZDcyMzdlLCAweGZiNjcxYmNmLCAweGRiZjFlMDI2LCAweDdhYmY4MDE3LAorCTB4MWIxMDJmYzMsIDB4M2ZlMTFmN2YsIDB4YTJmYjRmMDAsIDB4ZTM2OWY3ZjAsIDB4OGEzYzVmYzIsIDB4N2I3ZDhkNjUsCisJMHg1YzhkYjM4ZCwgMHg3YjhjZGMwMCwgMHhmYzM4MGYxMCwgMHg4OGM5MWM4NywgMHg1YzUyNWZlNywgMHg4NjZkZTIzMywKKwkweDRmOWZmNzE3LCAweDkxZmRlMzA3LCAweDVjZTc2YTEzLCAweGM3Yjg1ZmJhLCAweDY4YmM2M2FlLCAweDg5Yjc5ZWM5LAorCTB4YmM3N2RhN2YsIDB4MjY2ODdlNDEsIDB4YjNiNDIzZWUsIDB4M2YxZTNmYWUsIDB4ZDY3NTg5MmUsIDB4YWU3Yzc5YjksCisJMHhlZmM2M2Y4MCwgMHg1ZGY0M2Q3YSwgMHgzYTcyZTljNCwgMHg3Yjc3ZTIzNiwgMHg5ZDk1ZGI4YiwgMHhlZTM2Y2Y1YywKKwkweGZkZDc5NDY3LCAweDc2YzNjNDUxLCAweDQxY2E0YmUzLCAweGNhZjkxZDNjLCAweDBlMDM2ODc4LCAweGRkYzM5MGJhLAorCTB4ZTNiMWU4NzEsIDB4MmJlZWJiYTMsIDB4ZmUyMTdjMDgsIDB4OGFlYTFmNzAsIDB4YzBmYzg3MzMsIDB4N2EzN2U0YjEsCisJMHgwNzkwYzU5YiwgMHhmYzc4MWJlZCwgMHhmYjFhYmI3YSwgMHg5NzExYjA1ZSwgMHgzZTY4OGZmZSwgMHgzYzU4NWYwZCwKKwkweGZmZTZmOWZhLCAweDgxZDNlMTc1LCAweDRmNzI0ZmNhLCAweDJkZmRiNTM4LCAweDc3NGYxY2I2LCAweDllZWNkZjRhLAorCTB4N2QxNDk5NjEsIDB4MWNlYmNhNmYsIDB4NDczYjcxODcsIDB4YmI4M2I0MzQsIDB4ZGViMTZjZWMsIDB4NmY1N2UxMzYsCisJMHg3OGE2NGE3YiwgMHgwNzBkNTVlNSwgMHhjYjQ3OGU0OCwgMHgyZjdjMGE4YiwgMHgzMzdjYzYyNSwgMHg5YTJiN2NjNSwKKwkweGY2ZDEzZWY4LCAweDgyZWMzYmFjLCAweGVmZjZkYTdlLCAweGE4YWU3YTIyLCAweGQyZjE0MjNmLCAweDk1Zjk2ZjJmLAorCTB4OGI4YTZhZDYsIDB4NmMyMjdkYzAsIDB4ZDNkYjdmOWEsIDB4ZGM5MGM2ZmIsIDB4NDRiMmVmMTYsIDB4OGM0OTMzOGYsCisJMHgzZDhlNmMxMywgMHg4Y2ZlYjA0ZSwgMHg1MGQyOWM2NSwgMHhjZWJiYTY4MywgMHhjNTI5ZGUzZiwgMHg3N2Y2MjM3ZiwKKwkweDgzZWI4NWFhLCAweGU5ZTQxYWE3LCAweDBmZTMxOGUxLCAweDc3ZDZhYTczLCAweGE0YmY2MGExLCAweGZjZGM2N2Y3LAorCTB4MTNkOTE5YmQsIDB4MTJlNWZhNDcsIDB4MDkzYmNlNzcsIDB4MTQ2YTk4NDksIDB4NGNiZDU1YWYsIDB4ODdmZDc3YzQsCisJMHg1ZGYxMGQyZiwgMHhlMThhYmVlZCwgMHg3YzIyNTc3YywgMHg1NTFlN2U0ZCwgMHg0YmQ0MzAwZiwgMHgyY2JjYjRkNSwKKwkweGNiNDQyYmY0LCAweGM2YzkyZDFiLCAweDJmZmMyNmMyLCAweGY1NGY0ZjcxLCAweDY0NDc3OWQyLCAweDcwZjNlMjIwLAorCTB4ZmIxNTcxYzYsIDB4OWY5NDRiZmQsIDB4NWIwYTJmZWEsIDB4ZmJmMzBhOTUsIDB4MmRmMjQ4NGIsIDB4ZGZkOTdlODMsCisJMHhlNzk0MTgzZSwgMHg5NzdmZDllZSwgMHhkOTYzZjExZSwgMHhiMGFhNTdlMiwgMHhiYjQ2MWU3NywgMHhhNGUwYmQ4NCwKKwkweGFmNzkwNmY4LCAweDA4ZjlkZTkzLCAweGY1YTRlZTNlLCAweGY5ZjFkODFlLCAweGZmNWZhNDEzLCAweGI5ZjhjZWMyLAorCTB4MjAyZjU4MGYsIDB4ZGU3NTBhYWYsIDB4OWYxZGYxYzcsIDB4ZDQ1N2ZlM2YsIDB4OGMzMWIxOWYsIDB4ZDQzOGY4NWYsCisJMHgzZWExYmI0NywgMHg4ZTljZWM5ZSwgMHhhMGM2MTM2NywgMHg4NWYwYTQ1ZiwgMHgzY2EyNjZiYiwgMHhmNGU3OGMyYiwKKwkweDZhNGNmODU4LCAweDNiZmExYWI4LCAweGM3ZjNjYzk2LCAweDc3YTIwZGI2LCAweDc1OWY0YTI1LCAweDgxZThkYzUzLAorCTB4ZTA1NWNmMWQsIDB4NGNmZWQ0YmUsIDB4YTk3ZGMzM2MsIDB4ZTdhMTA1ZmQsIDB4NTNiYzUyZmYsIDB4Y2Q3YWFiNTUsCisJMHg0Y2M1ZTNmMSwgMHhmM2VmOWFmMSwgMHgxMmRlNjI5NCwgMHgyZmM4YzRhZiwgMHhmZTg0N2M0MSwgMHhiYTA0YTZhYSwKKwkweGFmZmEwNDA3LCAweGQ0OGY5ZmE1LCAweDQ0N2MzYmNlLCAweGZjZmVhMWM3LCAweDNmYTQ1M2ZlLCAweDdhZTg4M2NhLAorCTB4Y2ViZGY5NDYsIDB4Mzk1ZWUyMjEsIDB4ZDc3NTczYjQsIDB4MDU5ZDZhMGYsIDB4OWZkMzVmM2MsIDB4YWExNjkzY2IsCisJMHhmODUzYjBmZiwgMHhjZjc5NDU4ZiwgMHg4N2ZkNzk3ZSwgMHhlZWVlZmM4NCwgMHgxMGFmYjc4NywgMHhkMzQ0ZDBlZiwKKwkweDZmZDE0NmVmLCAweDVmYmY5NmU5LCAweDk1OWRlYjFjLCAweGVmYTdmMzE4LCAweGM4NTg5NDNmLCAweDc2Y2E3YTg2LAorCTB4ODU3ZmJkMjcsIDB4N2RlMDI4ZWYsIDB4M2YxYTlkODUsIDB4NDRmMzJhZDcsIDB4ZGQ5YjlkZTgsIDB4YzU5NzFlNDIsCisJMHg5ZGRkZTg0NSwgMHg1ODFlNjJmZSwgMHhkMWNjZjMxZiwgMHg5ZmJkMzRmYSwgMHg2MTkzOWNmNiwgMHgwYmY5NTk1YywKKwkweGJiZTIzZjZlLCAweGM3ZTdlNzdjLCAweDcxODU5ZTdlLCAweDE3MTRmMTg5LCAweGZmYzJmZTVmLCAweGI3MjgzYTIyLAorCTB4M2YyMmU2NDcsIDB4YjNiNzZlNzQsIDB4ZGJlN2M4OGQsIDB4ZmM4YzFkNWYsIDB4MDY0NmE2ZGEsIDB4ZjM4YWY5ZjcsCisJMHhiYjA2ZjJiYSwgMHg1OGJmZmVmNSwgMHhkYWFhYTljNywgMHhiYmJlZjBjYiwgMHhhNGI2YWY3MSwgMHg1N2YzMzkxNywKKwkweDVmYTNkNzI3LCAweDcyNWZmYTcxLCAweGRmNWJiZjEyLCAweDM1NTUzYTczLCAweDU5ZGYxMzNiLCAweDM4OTdlYTMwLAorCTB4NzdjNWNiNjIsIDB4MTM3YzVlNTEsIDB4NzFlYWVlMzksIDB4OWM1ZGY1M2YsIDB4MjVhYzQ3Y2YsIDB4MTUzZWZkMDUsCisJMHgzY2EzNzdhMCwgMHgzZTkyZDkyZiwgMHhmYjA0ZmQxMCwgMHgwNDNiYzY5ZCwgMHg4ZmRjMDRkZSwgMHhiMjVlYWJmNiwKKwkweGVmMzUzMWE3LCAweDdjYWEyNzMzLCAweGY0MzBjYTk5LCAweDU0Y2M4Y2RmLCAweDFiMWQxZDYwLCAweDY3ZjQxNGNlLAorCTB4OWNlYTQ3MTgsIDB4OWRlZTRiMWQsIDB4M2FkM2M2NzYsIDB4OThmNjFjNGEsIDB4MDljZjlkZjcsIDB4OGQwZjdhYmEsCisJMHgxZTNlNjRmZSwgMHhlZTMxODdmMiwgMHg3MjRjMzU3ZSwgMHgyZjM4OGVmOCwgMHhiYjAxMmJkNSwgMHg2ZTk3YmYwOCwKKwkweDc5Njk5Mzk5LCAweGExYTk0NTdmLCAweDA0YTdjMDdhLCAweDRlYjY2MmNmLCAweDZmYzkzMmNiLCAweGE1ZTJiYzYzLAorCTB4MjY0YTk5NTksIDB4NGZmZTU3N2UsIDB4ZGRjYWJkMTcsIDB4MjRhMTY2NzgsIDB4MDExNTBiZDIsIDB4OWZhZWI2NjMsCisJMHhhMjg4N2VlNSwgMHg3ZTEwMzllNiwgMHgxNWQzY2IxYSwgMHg4NmE1NDkxOSwgMHgzNThlM2RmOCwgMHg3NTAyZWE1MCwKKwkweDU2NTNiZjhiLCAweDllNGU1MGM5LCAweGU4ZjZlNzEwLCAweDFiYjRjMmVmLCAweGRjOTI3NzVlLCAweDZjNjIwZDBmLAorCTB4MDdiZTNhNzgsIDB4NGRkMDRkZTEsIDB4MTBmMTUzZjAsIDB4NTc2M2U2MWUsIDB4MTc5NzE5MmEsIDB4OTNiNDc0MzMsCisJMHg3ZDgwNTBhNSwgMHg1ZDU0ZjQwOSwgMHhlOTEzM2QzNSwgMHgxOGZjZmUxMSwgMHgwN2E2NDkwNywgMHhiZmEzY2ZjYywKKwkweDQxZWEwNWZjLCAweDNkZmNhNzQwLCAweDcwYjJlZmJmLCAweGMzMTg4MDM1LCAweDNhYWZjOTgxLCAweGU4NzdmMTk5LAorCTB4Y2NjM2JmNTYsIDB4NzFhNWM2ZjYsIDB4NjhlNzc4OTIsIDB4MTczMWM5MWYsIDB4ODRlYmZlZWIsIDB4OTQ1NThhM2MsCisJMHhmZjA5ZDViNywgMHg0NDczYzFjOCwgMHhhODIyY2U5NywgMHg1OGJiYzYxNywgMHhkNzUyMWUyNCwgMHg5OTk0ZTUyOCwKKwkweDkwNTkzZGZmLCAweDNlYTlkMTM3LCAweGNkMWU1YWQxLCAweGEyZDcyMDE3LCAweGY4MjA2ZGM2LCAweDQ0OWZiZjQxLAorCTB4NTQ0OWZiZjUsIDB4NTU3YzlmYmYsIDB4ODI5YzA2YmYsIDB4N2MzZThkOGUsIDB4NTU2NTYyYTcsIDB4MWYxYjgwOWUsCisJMHgwNmUwMjFjZiwgMHhlZjg5MTlmMCwgMHg5YzViMzFlOCwgMHgxMzg3OWM0ZiwgMHg2Y2M0ZTM1YywgMHhmMDFmNThlYywKKwkweDRlOTcxZTVhLCAweDYxMmZiOTc4LCAweDQxYzYyNzZmLCAweDg2NWFhNGIzLCAweDg5MGFlZjc2LCAweDk3ZjBkM2VmLAorCTB4NjNiNTMyZTcsIDB4ZjBmODgzYmEsIDB4Yjk0ZTMxMWUsIDB4YzMwYWYzODAsIDB4YmVhM2Q1M2YsIDB4MWVhZmY0OTMsCisJMHhkNWJkOWRmNSwgMHhkZjVkOGI4ZiwgMHhlMjdjZGJkZCwgMHhiMTI3Y2Y2MywgMHhlMjZiZmU5NywgMHg3NWZmZjY2MywKKwkweDBiYzU1MmU1LCAweGU3ODZiZjZmLCAweDQ5ZjI1ZGI2LCAweGY1NWJkMDA3LCAweGQ0MzhmMmNjLCAweGZkOGYxMzMzLAorCTB4NzBiZTk1YTMsIDB4ZDAzMWQzM2QsIDB4YTQzOGVmOGEsIDB4YjhiN2EwNmYsIDB4ZDFlZmQ2NjEsIDB4N2QxYmQyNzQsCisJMHg0MDc1OGJlNSwgMHhlMDBmZDVkZSwgMHg3ZjE4OTM3MCwgMHhmNzNmMWQ2YSwgMHhmNzA5NjViZSwgMHhlODc5ODFkMywKKwkweDhiMzdmYWM3LCAweDBhMzkzN2ZhLCAweGM0NzBkZmM5LCAweGJhYmZkZmM2LCAweDkxZWI5NmE1LCAweGE2NThmY2I3LAorCTB4ZWYxZWU5ZjMsIDB4ODAzZmUxNTEsIDB4MmE1ZDZlZGYsIDB4YjFlOTIzODUsIDB4NzU2MmQ3ZGUsIDB4OWU2ZTNmNzgsCisJMHhiZGZhM2YxOCwgMHhlNmYzMDBhYSwgMHhiZDYzOTZhZSwgMHhkMmU5YzU1NywgMHhmZDE3NTdiOCwgMHg5NjAyYzU0ZSwKKwkweGIzMjFkZTI3LCAweGQ0ZWIzZjdlLCAweGNkNjdlNGJiLCAweDJjN2RlZWE4LCAweDFlZTgxNmI0LCAweDdiYTA0ZmY1LAorCTB4ZWJjNzk3M2MsIDB4ZTIxNzE0NjIsIDB4NDg1Yzc4ZDEsIDB4NGYzYTIwY2IsIDB4ZDlkZmU0MzMsIDB4ZGMwNGRlOTEsCisJMHgzMDdmOTlhZiwgMHhlZmYzYWVmZiwgMHhhNmY0YWY4YiwgMHgyYTFkZWY5YSwgMHhlZjJjZTJlNywgMHhiZWFiNTRmNSwKKwkweGVhNmY5NDM0LCAweGMxNWZkMDM5LCAweDBkY2VkNjU0LCAweDM5NTM1ZTYxLCAweGZjYzRhZGU4LCAweDcyNDliZTE4LAorCTB4YTMwOTRkMmEsIDB4M2NmNDU0NWMsIDB4YWY3YTg4NTYsIDB4YThjM2VmNzgsIDB4ZDU1ZDI1YWYsIDB4MGViZTY3YTUsCisJMHg0YjhlNmZmZiwgMHhiYzVjYmUyNiwgMHhiNmY3NGJkNiwgMHhkYmNmOGIzZiwgMHg3YjI0ZjQ4OSwgMHg1NzAxN2M3MiwKKwkweGVkMDg3YTRmLCAweGM2YWVlYmUwLCAweDVjZjdhNzc1LCAweGYzZTZiNTRmLCAweDE1N2RiZTkxLCAweDZmZmM4MDgwLAorCTB4NGZjZTA3M2UsIDB4ZjZkZjdiYjYsIDB4YTM3ZWZjZTIsIDB4ZjRiYmY0MzIsIDB4NDRlZjhmODQsIDB4ODZjZmNhMTgsCisJMHg4ODdjNTAwNywgMHgwNDYzMzA5YywgMHhiYzQ2YmY4ZSwgMHg2YWJhYmE2ZiwgMHhhYTJiYTUyNCwgMHhiYzc5NDg5OCwKKwkweGFmMmE4YWRjLCAweGVhNDQ3MzQ4LCAweGFhNzRlOTE3LCAweDFhNTU2Zjc3LCAweGY5NTU1N2U1LCAweGViZTAzNTI4LAorCTB4ZmJkMGQ1ZjAsIDB4N2M2MThlOTMsIDB4ZjAyZTg3N2MsIDB4ZjAxMzY0OTcsIDB4ZTVmZTkwMGIsIDB4NzNhNGFiNDgsCisJMHgxOTVlYTc0NSwgMHhkOGRmNzdjMSwgMHg3MDc3ZDg0MCwgMHhjMTBkN2E1OSwgMHhmOTE5ZDM1NywgMHhlNTNlYTEzNSwKKwkweDU0ODc5OGVkLCAweGY4NDE5ZGFkLCAweDU2NGFmNDUyLCAweGM1NmZlNTA4LCAweDVjMjI4ZTA3LCAweDJkNGJkZTlkLAorCTB4ZDNkYTVhZWYsIDB4N2ZiZDQ2YzYsIDB4ODM2ZjA1MWEsIDB4Yjg3MWI2ZGUsIDB4N2E3MTJmZGYsIDB4ZmRmYjg2OGIsCisJMHhlMzE3OGI2YSwgMHhiMmJmZWUyMiwgMHg4MjI5NWRlYiwgMHgxYzQzOTgzYiwgMHhlN2U2YmZlZSwgMHhkZWUxM2RiNCwKKwkweDA5YmU3YjMyLCAweGU5ZWNlZWVlLCAweDA0ZmJmNzA0LCAweDcwMTZlZjljLCAweGE4NzgxNmFkLCAweDQ2YWNmMDE2LAorCTB4YTQ3ZTUzYjgsIDB4M2E0NGZiYzgsIDB4YzQ3YmQyOWQsIDB4MTEyYmI3ZmIsIDB4MDhjYTkwMWYsIDB4N2Q4NzgwNzcsCisJMHgzMGM5ODg1NCwgMHhmMTc5YmExZSwgMHg3NDEyZWVjZiwgMHgxZmM4ZGJhYiwgMHhmY2YyYmIyYSwgMHgxMjdiNzcwOCwKKwkweDA1YzNiYjg3LCAweDA2YmEyMDc4LCAweDNjYjE3YmI4LCAweDVkNTRmMDQ0LCAweDlmNTBjZTFjLCAweDE1ZTQ0MWUzLAorCTB4N2UyNjdiODQsIDB4YjgwMGY4ZTcsIDB4ODcxZjhkZjcsIDB4MDU4MjcwZjIsIDB4ZTRkMjVhY2UsIDB4MjNmYjgzMGIsCisJMHgxMjRiN2Y3YywgMHhiZjBkMWU3YywgMHhhZmJmOGQyNCwgMHg2Zjc3ZjA2YiwgMHg4OGI1NzFmYSwgMHhlZjE2YWViNywKKwkweDUxMWMyMjI3LCAweGUwMDg3OWFmLCAweDRmMGUzNGMzLCAweGM4YTQ3ZGZlLCAweDE2NGQyOGZiLCAweGUwMzU3ZmY2LAorCTB4MTYxZmNiMDEsIDB4MTljMjEwZmEsIDB4NzNjNTFmZDMsIDB4NTZjOTNjZmIsIDB4Mzg0NTRmYjksIDB4ZjJlZmUxZjUsCisJMHgxYjEwYTRiMCwgMHg2ODc4Y2Q5OCwgMHg4NWE1ZmUyZiwgMHhjNmYzMTc5OCwgMHg0YWQ3YWZmOSwgMHg0NGFlYjIzZiwKKwkweDdkZTkwM2JkLCAweGRkNmRlOTE4LCAweGNmMGRhYWFiLCAweDU3YTVlNDNmLCAweGNiNjdlZTU5LCAweDVlODlmZGIzLAorCTB4NDI0MDdmODIsIDB4YzEzZWU2YmQsIDB4NWU5MTZiODcsIDB4MWVkYzdlNjgsIDB4ZTBlODI5NWUsIDB4ZWVmZWYxNmUsCisJMHhlZTdlODIzZCwgMHhhMGZjZmMxNywgMHg3ZTNlMzc0MSwgMHg3NGNkNjQzZiwgMHg5NDk4YzcxZSwgMHgyMGVmMTM2MSwKKwkweDRlMzk5ODQ2LCAweGMwZDdkMTMwLCAweGQ5MTc5ODM0LCAweGU5NGE1ZTM2LCAweDhlZjY0YjlkLCAweDdlMzZmODlkLAorCTB4N2QyM2YzMTQsIDB4Njc3M2JlMjUsIDB4OWI0M2JmOTgsIDB4YTFmNTBmZDcsIDB4ZDlkZGUzNDQsIDB4MzljNGRlODksCisJMHhhMjNkMzE3NCwgMHg2NTIwZjc4OCwgMHhjNGI2NGY2ZSwgMHhkYWI1ZGY3YywgMHg3ZTgxZGZiNywgMHgxM2U2ZGU5OSwKKwkweGFmYTdmM2VmLCAweDZiZTJmMTg0LCAweGY1NDc2NGRkLCAweDU5Y2RlNDBkLCAweDJkNTc3OTA4LCAweGNiMGM1NWQ4LAorCTB4YzE3MDdjYjksIDB4ZjQ0ZDBiYmMsIDB4NWY4YmRmMTEsIDB4NTk1ZDc1NDcsIDB4ZjY0YWY0ODAsIDB4YTkzZmE0MzgsCisJMHhmODQ0ZWExZCwgMHhlOGJkYWMwMiwgMHhjZDQ4N2FiZiwgMHhjMWZiODdlYiwgMHhmZGIxODk0MywgMHhiOWUyYjM3MCwKKwkweDc1OTNjNGJmLCAweGIwOWZjNWE5LCAweDNiNTNmNTRlLCAweGRlNTVhMjdkLCAweDQzZmIxM2FjLCAweGZlNTZhOTlmLAorCTB4Y2I4M2Y2MzAsIDB4YzU5ZjdmNDQsIDB4MGYxNDdlMDcsIDB4NmU3Mjk2NzQsIDB4YTRjZmM5MmEsIDB4MGZlZjYzNmIsCisJMHhjMjE2YWFkNSwgMHg0N2FhMzlmNywgMHhlNTBlYmU3MywgMHhlZTZmNWM2YiwgMHg5ZDE4NzcyMSwgMHg4YzBkOWM4MywKKwkweDJmZmU4OGQ4LCAweDMzOTZiZTgzLCAweDhjNDJlNzJlLCAweGJhYzY5M2ViLCAweDNlZjQ4NjdlLCAweDlkMDFmNzAyLAorCTB4MDFmNzFlZTgsIDB4MzRjM2NiY2MsIDB4NWI5NDliYTIsIDB4NTg3ZmU0NmMsIDB4NWVlY2Y4MjUsIDB4MDQ2YjVmYzEsCisJMHg3YzgwM2Q1ZiwgMHg4MWRmMDIzNSwgMHgxM2ZhNTFmNiwgMHg5MGViNGZjMSwgMHgxMmRkMjBmZiwgMHg3OGY1Y2U5ZiwKKwkweDYxOTdiZWYxLCAweDhjNzcyY2M3LCAweGFiMWNmN2E1LCAweDBmZGEzNjVkLCAweDYxZWQ3Nzk0LCAweGZiMDVkYTE3LAorCTB4ZjdlOGViYzYsIDB4N2E1OWRkOTEsIDB4NTllNThkYzAsIDB4NDNjMDNmMGUsIDB4OTFkMmNjNGEsIDB4MmY3MzNlNWUsCisJMHhlMmFiZThiOCwgMHhmNGZkMDE1YiwgMHg3MmEyYjBhZSwgMHg5NDllYTQ3ZiwgMHg0NTFmZGVjNywgMHg5ZWY0NTNhNywKKwkweGNiNWZhYTgwLCAweDcwZmQzZmQwLCAweGUxMTNhNTUyLCAweDhmM2M3MGZjLCAweGNmY2RhYWQzLCAweDNlMDNiODI2LAorCTB4ZTI5YmM1YjYsIDB4NWY2NzUyYTUsIDB4MWYxZWY1ZDUsIDB4MmY3MGZmNzYsIDB4MTJlYzEyZWYsIDB4MGMwZDgyZjIsCisJMHhmOTI2NjFiMSwgMHg3YmRlMmI1MCwgMHgxYjEwZGU2NCwgMHhjYjEzOTI2OSwgMHhmNDMyZTc4NywgMHgwZjk0ZjVlYiwKKwkweGNkY2JjOGJkLCAweDkwYWU1ZTVjLCAweDQzNGJjYjYyLCAweDY1ZTQzNzdmLCAweGQyMzE1Y2I0LCAweGI3NGQxNzk1LAorCTB4NWQ1NGE3ZGMsIDB4NjZmMjQ2M2UsIDB4YzFmZjZjNjQsIDB4ZmNlZGUzZWYsIDB4ZjNlNjZhMWQsIDB4MmNmN2E3ZTUsCisJMHhkZWZkNzgwNywgMHg4M2Q0MmYwYywgMHhmN2M1N2YwYywgMHg1YTI3YWM2MiwgMHhjYWI4OWUzZSwgMHhmNDAzNTdkOCwKKwkweGNkMDJkMDNlLCAweGFmZjhmMGZiLCAweGZiYWQ1N2RjLCAweGQ1YjllMTQxLCAweDljMTQwZmE0LCAweGE4YjRhMWNiLAorCTB4MTFmMTNhNzYsIDB4OTMxOGQzYzMsIDB4ZmQ3YzdjOWQsIDB4ZGY4ODNkMGYsIDB4N2NlMmI1ZTMsIDB4YzYxYWJkN2MsCisJMHgxYjdkYTRiOCwgMHgwZTYwN2FlZiwgMHhlM2MxNzVjMCwgMHhlMzhmOWQzMiwgMHgxNGQ5MGQzZCwgMHhiY2IyYzJkZiwKKwkweGVmMWJhN2E0LCAweGRmMGYxZTIzLCAweDMxYzczMWVlLCAweGU5ZDRmYzE0LCAweDM3YmZmZDQ3LCAweDFmNTgyYzdhLAorCTB4OGQ1MzdmZGIsIDB4ODNiYjQ0ZmYsIDB4NWRhMjQ2ZjksIDB4Njc1ZGZhMDEsIDB4OWZiZmY1MDQsIDB4MThkZGU5MzgsCisJMHgxOGRhMWYyMywgMHg4ZmM3MzNlZiwgMHhmMTViZTkxOCwgMHhkYzIxY2VkMywgMHgzM2Y3OGFkZiwgMHhhYjlkZDIxNywKKwkweGY0ZDc5ZDBmLCAweGRjN2MxN2NlLCAweGM3MzNlODYzLCAweDQ1NDdkMjczLCAweDdkYzAzNTljLCAweGNhN2ZjNTk2LAorCTB4MDk4ZjQ5Y2YsIDB4ZjQ3MzE4N2YsIDB4Y2EyNzFlNTIsIDB4N2I5NGJkYmQsIDB4ZDMxMzNjNzgsIDB4ZDNmZjk3NjMsCisJMHgzZDUxYTQ3ZSwgMHhiODIxYjRlYywgMHhkM2RhZjJmZSwgMHgyZmE1ZGVhYiwgMHg2MjgwZjNkNiwgMHg2MGJkYzcxMSwKKwkweDc5Nzg3YzYzLCAweDIwNTliZTBjLCAweDEwMmYwN2VlLCAweDdkMDY1ZGU3LCAweGQwZGY3ZjE1LCAweDQ2NWQzOWIzLAorCTB4ZDRmNGFkZDMsIDB4MWZhNzQ0MjUsIDB4NWZjOTU0MWYsIDB4ODdmNDAxNWIsIDB4ZDRmNDk4N2EsIDB4Njk4ZjdhNzgsCisJMHgzZDk3MTNkOSwgMHhmOWMwMGI3OCwgMHg5NTMyNDM5MywgMHgxMDczOWQ5NywgMHg4N2ZmYjY1ZCwgMHgzYmZjZTI4ZiwKKwkweGVmZDJhYjdmLCAweDcwNzI3YzI2LCAweGI3ZWJjNTFhLCAweGJiOWVmNzhiLCAweGVkYzVjZWY4LCAweDVjNWMxYmRhLAorCTB4YmI5YzE0YWUsIDB4OGJiYmU4OTcsIDB4MzVmM2MyYWUsIDB4NzM4MmRiZTQsIDB4NTY1ZTkwMGYsIDB4NGViZGVmODAsCisJMHg3ODhmNzVjMCwgMHhlODIyOTI3OSwgMHgxZmI2MDI3NywgMHhlYTFjYmI5MiwgMHgzZTcyYjYxNSwgMHgxNTQzMTM2MSwKKwkweDEwZGU4ZmU0LCAweDA2MzdiYmVmLCAweGYyZTBkZjNmLCAweDBiNDVlMjVhLCAweGZmNTBkNzViLCAweDI0YzNmNDBjLAorCTB4MDJjODVjNTMsIDB4ODUwN2ZiZjEsIDB4ZTU4NGI4NzgsIDB4MjFhNTg4N2EsIDB4ZDZmOTA4ZGYsIDB4NzdkNmZmNGQsCisJMHhkNjlkZGJiMCwgMHhjMmU5MWE3NSwgMHhiMDRlNzVhZSwgMHhlYmRkNjFkOCwgMHg3M2U3MmVmYywgMHhiNjE0NmZhMSwKKwkweDc1NzlmMGU2LCAweGUzZTdlN2FkLCAweDdiYTdhZDYzLCAweDdkYTkxMzFkLCAweGYxZWM2MjdiLCAweDFmZTMxN2VmLAorCTB4OWJjMjJhYWIsIDB4YmM0NGFjNWIsIDB4YmUxMDViYjcsIDB4ZDVmN2MzNWQsIDB4ZjYyN2Q2MGEsIDB4MmFlYjRjOTEsCisJMHhjNGI1MmRhYywgMHhlNmQ0MTUyYiwgMHg4NTdhZmJkMywgMHhkYmI1ZjNlYiwgMHgxNzUzZmI0YywgMHg5N2ZlNDI1ZSwKKwkweGM2ZWIwZDI3LCAweDJlNmJmZGNiLCAweGFlYThiYzIzLCAweDdlOTEzYmJjLCAweDdjNTUzZDhmLCAweGVjNWU3YmM3LAorCTB4ODRlOWUzOTcsIDB4NDk1MzFhMTYsIDB4NGY3NmVhZjIsIDB4Zjc0ZGZiYWMsIDB4NTZhOWUzNDcsIDB4ODBlYzA5ZTAsCisJMHgwYzllMTMyYywgMHgzZmI3NDRmYywgMHg4ZWZjYjliNiwgMHhlMjFjZjBmNywgMHg1MDlhZmUxMSwgMHgwYTJiZjJlZiwKKwkweGUxYjFlOTdmLCAweGQ3YTBhNGY3LCAweDA0MGZhMDYzLCAweGRmN2UwODJlLCAweGY1Y2JjNGIyLCAweDZmODEzZjBhLAorCTB4NzdjNjNlMDMsIDB4MDhjMmU3ZDAsIDB4Mzc5MTI3YjcsIDB4NGUzZmIxOTMsIDB4NWI4M2U3MGYsIDB4MWU4MmY4ZjcsCisJMHhjZjVlYzUyNiwgMHg1OWViNWQ2YiwgMHhjN2EwNDJjYSwgMHgzZWI4ZDQ5YywgMHhlZTdhZmJkMSwgMHgwNWM3MjE2MiwKKwkweDRmOGJhN2FjLCAweGZhN2MyZGYzLCAweDM4NWI5YWRhLCAweDlmZmMwYTlmLCAweGQxMGY3ZmRjLCAweGJjNzBiMWY1LAorCTB4N2E1NGUzMGYsIDB4NDg2YmNmNWIsIDB4ZDA2MmUzMDcsIDB4MWIxMGIwYzEsIDB4OGY3ZmZkOTUsIDB4ZmU2ODRlMGUsCisJMHgzZWUwOGYxMSwgMHhlZTE1ZmIwMiwgMHhkZTRmYzVkMywgMHhiZjNjYzYzZiwgMHhmZDI3ZTJiNywgMHg5YWE1ZjY5ZSwKKwkweDBlYTczYjBiLCAweGY0MWRmNjRkLCAweGZiMjc3ZWQyLCAweDQzNDk2MWFhLCAweDYzM2Y4MTVkLCAweGEzY2YxMmZiLAorCTB4NmU5ZmExOWYsIDB4YzZjZmUyNDUsIDB4NTc4YmQyYzQsIDB4YzcyZTA1NTYsIDB4YWFlYThiZjMsIDB4OGZkMWNiYTIsCisJMHg5NzNkMGFhYSwgMHhjZTliOWVhMSwgMHhkNjIzMTc3ZiwgMHhjZGNjN2Q3YiwgMHhhYWIyYmJmMSwgMHg5ODNmY2U5MiwKKwkweDk0ZjRjNDIzLCAweGQ4MDA3N2VlLCAweDQ3ZjI0Yzg5LCAweDdlYWIyZTJiLCAweDFkMDFhOWE2LCAweDc4OWFkZmZkLAorCTB4MDI1NTQwYTcsIDB4ZDBiM2QzYWIsIDB4MTE5NDk0NWYsIDB4MWZlZmMxMzIsIDB4YjJlZTdlMmUsIDB4OGViZjZkMjYsCisJMHhlODc2MWFlNywgMHg4ZTYwZmQxZiwgMHg4YjU5Y2E4MSwgMHg2NTQ1ZWNmZiwgMHg5M2MwNWY0MSwgMHgxYzczMWNmMSwKKwkweDEyNGJmMDZiLCAweDQ2Y2YxM2Y5LCAweDVhY2YxM2Y5LCAweGYzMDQ5MWU2LCAweDViM2IwYWZlLCAweDFjZTg3ODcxLAorCTB4OGZjMjYxNTIsIDB4NWYwMWUwMmMsIDB4NWJiYjFmNjgsIDB4MWU1Y2ViZTcsIDB4NjA3ZDIxZWYsIDB4YjIzNjQ1ZDUsCisJMHhmZjA5ZDZlYiwgMHgyZmQwY2ZmNCwgMHhlODUxNzA0ZCwgMHhlMGMzMDFiYywgMHhjMDk2YmViMCwgMHg3M2M0ZTFkNywKKwkweGFkZWQxOTBjLCAweGY4ZGRlNTA4LCAweDRmNGM5NzYyLCAweDRmOTg0YTFmLCAweGYzMDk1ZTY0LCAweDE1NjQ1OTdkLAorCTB4OTMxZDBmZGEsIDB4M2YyMGVmNWEsIDB4ZTY5MDMzYTAsIDB4ZDY3ZWJjMDYsIDB4ODRiMGU1YWYsIDB4ODE3OTEyZTcsCisJMHhiNWNlMTE4YiwgMHgwYmMzMjg3MiwgMHg3NzIxN2ZmNSwgMHhjMWJkNjA2NiwgMHgxZjRlZjQ1MCwgMHhmNzg0NWU5ZSwKKwkweGYzYTYwMjEyLCAweDhlYjQyMWNlLCAweDMzZGNiY2VlLCAweDI1NTJkMTdmLCAweDZmZWZmY2VhLCAweDVmY2I5YjE3LAorCTB4YzYyZmZhNzEsIDB4ZjkzYjU0NzksIDB4MWY0OTYwZmIsIDB4NTdiZTc0NDgsIDB4OTRlZTc1ZGQsIDB4NjRmMmZiNDcsCisJMHhkMTIzYzczNywgMHg0MWQ1ZDIwNSwgMHg1NTlkMzdhZSwgMHhjODdkMDliYywgMHhmMzMyM2Q5ZiwgMHg3YzNjY2I0NSwKKwkweGVjMjJiYzk2LCAweDUzYTAzYWQxLCAweGU4MzJhNzNjLCAweGI3ZTI5ODYzLCAweGFmMGQxZDIxLCAweDNjNjZlZjgxLAorCTB4ZmI3N2QwYzYsIDB4ZjA3OWU4YjgsIDB4MzFiOWZhOTgsIDB4ZTg5NzE4M2YsIDB4Y2I5NzNlNTUsIDB4N2EyOGUzZjcsCisJMHhmOWYxMmRkOCwgMHhkY2VkOGE4NywgMHgxOTIxNjQ2ZSwgMHgyMGM3M2FmMSwgMHhjZjA1NjUzYywgMHg4ZmUzMzIyNywKKwkweDhkNzdiNWVjLCAweDgyYjYyNzczLCAweDBiOWU3NWU3LCAweGI5Y2ZjNmRlLCAweGE3MzNlN2EzLCAweDNjMTZlZWY5LAorCTB4ZGNkMzk5ZWYsIDB4N2I5ZTNlNmYsIDB4ZjhiYTI5Y2UsIDB4YWI3NzRjNDMsIDB4NTFlM2ZiOWQsIDB4MjI1MGZjNWUsCisJMHhiN2E2ZjY3ZCwgMHgyMWUzNTQ1ZSwgMHg0NmU2ZjFkZCwgMHhhZTYwOWY3YSwgMHg3M2JmZWY5YiwgMHhmODhhYTc1OSwKKwkweGUzNWQzMDBmLCAweDVhNjE1NmU3LCAweDI3Y2M2ZGRmLCAweGZhMmEwZGYyLCAweDg0ODk2ZTFkLCAweDcyMWFiODZmLAorCTB4YmUxOGJlYjcsIDB4YjliZGQ1MWEsIDB4NDI1ZjNiMDcsIDB4ZjQxYTA1YjQsIDB4MzIxYjNhNWMsIDB4NWVmOTM1ZGEsCisJMHhhZWRlNzllNiwgMHhmMTRlMGUwYiwgMHg4MzhhNDdmYiwgMHg2ZWJkZDVkNiwgMHg1OGMxYzEwNywgMHg3YzI0ZDQyNywKKwkweGJjNDljMTc0LCAweGE1YzA2NmNmLCAweDM3ZjFkZDZiLCAweGY4ZmU4NTVmLCAweDFjZGNlNGRlLCAweDc5MGZlOGM3LAorCTB4NTc5ZjNjOWMsIDB4YzEzZTljMzQsIDB4MGI5MzkwMjIsIDB4YjkxZmZlZGQsIDB4Yjc3YWZjYTEsIDB4Y2I0YzJlZmYsCisJMHg5NTgzOWQxYywgMHg1NTM3YzQyMSwgMHgwMzkwYWY5OCwgMHgxYzAwYTUxNywgMHhiODE0MWEzZSwgMHhkMWUxMTkzOCwKKwkweGY0ODJmN2QyLCAweDJlNGVjM2ZlLCAweDFiYTcwZTBmLCAweDFiYWI2ZDdhLCAweGM4YmQ5YmU5LCAweGY3ZTM1YWY1LAorCTB4MzhlZDU2MzIsIDB4MDA4ZGZmN2UsIDB4ZTU1ZThmOWYsIDB4Y2I5NWNkZWYsIDB4MjJlZTZiZGUsIDB4NjJjY2IyZmYsCisJMHg3YTQ2MjFkOSwgMHgxZTBkZjg1OCwgMHg3YmM0ZGI3NiwgMHhmMzlkN2NkMSwgMHg3OWVmMGUxNCwgMHhjZjc0ZjE4ZCwKKwkweGQ5NTJkZTZlLCAweGJjZmRiZWYyLCAweDk1N2UzY2E1LCAweGFlNjMyZDI5LCAweDJiMDlkOGI3LCAweGVjZjc1ZDA0LAorCTB4ZDExYWZkMDcsIDB4M2E1ZmNjZmQsIDB4ZDkyZGRlOTksIDB4Yzg5M2U5YTksIDB4YTczOGYxY2YsIDB4ZmQ1M2Y5YjMsCisJMHg0ZmZkYzYzMiwgMHgxZjkxMmQ1OCwgMHg2ZjUxZmM2OSwgMHhlN2U0MmI1MywgMHhjODdkMTM4NywgMHg1Y2VmZjNhZSwKKwkweDk3ZWY4OTljLCAweDNmNzBiNDU0LCAweDI4YmNhYTY3LCAweDdkMjAzZmUzLCAweGVmZGYzZjY4LCAweGUxMDhiZjMxLAorCTB4NWQ3YmYyZTQsIDB4MzY5YWYzYTYsIDB4NDc0MzMyYjUsIDB4ZTVkNWJlN2EsIDB4N2Y5MDc5NDcsIDB4YzQ1ZGZmYmQsCisJMHgzMGU3ZTFhNywgMHg0MGU3ZGRmNiwgMHhjZTM4YzAwZiwgMHgzOWJjNWJmYywgMHgwZGY5MWY0OCwgMHgwZWE1M2Y0ZSwKKwkweDVjODFjNGE2LCAweDAzOTg1N2NiLCAweDI5OGQ1NGQzLCAweDk4ZTM0YzRlLCAweGU1ZWNkMzAzLCAweDlkYWE3ZjQyLAorCTB4Mjc4M2ZhNDUsIDB4ZjdjMzRmMjcsIDB4OWY5YmYzYzQsIDB4MTdkYjE0ZmMsIDB4OTI3ZDkxMmEsIDB4OWJmMjllODksCisJMHhlZTgyZmQ1ZiwgMHgyOGYzZjljMywgMHg1YjViZjc0ZSwgMHgzOWRkOGIzNCwgMHhmZjlhYzFiYSwgMHg5ZjM1OTM3NiwKKwkweDMzZTZiMTExLCAweDAzZjM1YTBmLCAweDdkMjY2ZDcwLCAweDFlMWVmZjczLCAweDlhN2E1MjlmLCAweDFlN2RlZmRmLAorCTB4M2MyMmEwNjAsIDB4M2U0OWQ5YjYsIDB4Y2U2ZDI5NGUsIDB4ZDM4Nzc4YzYsIDB4NTg2ZGJiNGYsIDB4ZGNlZmZiYmUsCisJMHhlYWRjZWVlZSwgMHhmNzI1NzdhNCwgMHhlMmM3MTdiZCwgMHg2YTFkZjA5MiwgMHgzZjJjNDZlNywgMHg4ZDkwZDcxZCwKKwkweDRmYTg0NWZlLCAweGJiYjA0YjcxLCAweDcxYmI0MDhlLCAweGJkMDZhNWU3LCAweDY5YmUyOTg2LCAweGZkZjgzZmU3LAorCTB4ZjZhZGNlOTQsIDB4OWM1MWM2MzAsIDB4ZDNlNGY1ZGUsIDB4YjdhNzlmNDgsIDB4ZWM3ZDIwMGUsIDB4YzM2NDI5NzksCisJMHg3MGY3NDM3ZSwgMHhmMzg4NGZmYywgMHhlOTU0ZTQ1OCwgMHg3ZTNkYWIxNiwgMHgxZDAxZTg0MiwgMHhlODc5YjUyNywKKwkweGQ2YjhiYTE3LCAweGMyNGJlZWJhLCAweGE4YTc3Y2Q2LCAweDdkMzMxYjdmLCAweDEwZjhjNzRmLCAweGRjMzRhYWVmLAorCTB4N2VjNTM3NjcsIDB4YzE3M2ZkYmYsIDB4YTUzZDRmMTcsIDB4OGIyYjc0MTksIDB4Mzc5OTFlZjcsIDB4ZTJiZWZiYTUsCisJMHhkYjczZWVlZSwgMHg4ZTgwMDMyNSwgMHg0MzE2MTE0YSwgMHg0Njk3YmZiYSwgMHgwZjg1ZGI4ZCwgMHgzODkyN2ZkMSwKKwkweGFkZmNlYjJmLCAweDU1MzlmMDRjLCAweGVmODk2NDU1LCAweGFhZmJkMmU4LCAweDRkNTM2OTdjLCAweGVkNDE1MWZiLAorCTB4ZDI3Yzk0YmUsIDB4ZGNhNWY3NTcsIDB4Y2E2N2RhNjYsIDB4Yjk0ODFlYjYsIDB4ZGI2YmZhMTksIDB4ZWJlZmQwYTIsCisJMHhlMjc5Y2Q5NSwgMHhmODQ5MDk4MSwgMHhmOWMwNmU1ZCwgMHhlN2ZhMzk2MiwgMHhmMjVlMWFkYSwgMHg4YmQwM2Q2MCwKKwkweGJkZTM5YWM3LCAweGE1Yzc2YjBhLCAweGU5ZjEzNTRkLCAweDgzNGJhNWQ3LCAweDBlNzRjYTlmLCAweDVhNzJlNzlmLAorCTB4NDYxZWYxNzIsIDB4MWRmZjJkNjksIDB4MWI4NmQyYmUsIDB4ZTExYWJiYWUsIDB4NGZkZjllYmUsIDB4OWU1ODU2Y2YsCisJMHhiNjUzZmMwYywgMHg4ZmVmODZmZCwgMHhjN2MxZWY4NiwgMHgzZTcwZjljNiwgMHgyZDI0ZjhkOSwgMHgzZmFkYmJkZSwKKwkweGVlNzZmNzQzLCAweDQ0ZmY3MWI1LCAweDdiNDY1YzM0LCAweGZkZWY3ZTM4LCAweGU1MDhhYjgxLCAweGEyZjdmNDEyLAorCTB4M2ZiNTJjNmQsIDB4ZTQ3ZDAzNjgsIDB4NmJkMGU0YzQsIDB4ZDM5NTQzMzcsIDB4NTcwZmUxYWMsIDB4OTU5NjVjNTMsCisJMHgyNTNlODA5ZSwgMHgzNzNhYjdkNCwgMHhmNDhkYmU0YiwgMHhiNWY2Nzk3NSwgMHg5N2ZiNWFhOCwgMHg5NDNhM2M1MSwKKwkweDhhMzdiNGM3LCAweGEyN2VkNmMzLCAweDQ3YTU3Y2YxLCAweDY4Zjc3ZTMyLCAweGEyNWU5OWE0LCAweDExOWRmNWViLAorCTB4MmFiN2RmYTIsIDB4Y2Q3MjBhNWIsIDB4MWQ5N2VmYTQsIDB4ZDg3OGExYWQsIDB4MTljODcxZTgsIDB4YzEzYjhhNjgsCisJMHg3YzRiZDFmZCwgMHgwMjdhMTRlYywgMHgyMmQ5MWM5MywgMHhjZjI4N2M1ZSwgMHg0OGE3YmJkMywgMHhhNTEwNDA5NywKKwkweDVlYTliMjk3LCAweDZjYjVlYjg0LCAweDRiY2ZhNjNhLCAweDk5NjQwNzkxLCAweDMzZjIwM2NiLCAweDc5Mjc4YjZkLAorCTB4M2ViN2E2ZDAsIDB4YTNhNDczZjEsIDB4MWU3NGQxZmEsIDB4ZWZkYzVmZDYsIDB4ZTg0NmYzNmUsIDB4NzdlMzU4YmQsCisJMHg5ZTc0ZGE3MSwgMHg1Mjc2NjkyZiwgMHg4ZmU5ZDUzYywgMHhjYjk3OTIzNCwgMHhlYjEzOGUzMCwgMHhkOWI0ZWQzZiwKKwkweGJkM2I1ZjQwLCAweDhjNjRlZmJkLCAweGUwNmI2ZTBiLCAweDZhOWY4YWVmLCAweGZiNTkzYmU4LCAweDlhMzdmZDhhLAorCTB4ZjE3ZDhkZWYsIDB4ZGYxM2ZlMDgsIDB4OGJmOGY1NGYsIDB4YWNkZmI4M2QsIDB4YTlkMzcxZTAsIDB4MmEzMzJiN2QsCisJMHg2OGM5ZTA2MywgMHg2NjU1YTQ5NywgMHg3OWQyYmRhMCwgMHg5MWI3Y2JhYiwgMHgwYWU5NTNlYiwgMHhjOGQzZGRmOSwKKwkweGZjMmY5MmFmLCAweDc5ZTlmNzQ5LCAweGJlYTA3ODc3LCAweGUxZmFlYTFiLCAweGU1MDczZWZmLCAweGZjNzdlODhkLAorCTB4YTFkZGY2NDAsIDB4MWYzZWVkMGYsIDB4YTAxNTkwNWYsIDB4MDNmNGUzZmIsIDB4N2NmZTMwMzYsIDB4YTAxNDQ1ODUsCisJMHhhZmI4ZjliNywgMHhjOTNjYTE4YywgMHgyNWViZjljZiwgMHhiMDVjMjM4YSwgMHg3YzFlYmFjNiwgMHgxZmJjZGFlNywKKwkweDI5MmZlMTE2LCAweGIwYjhjNTBlLCAweGQ2OGI0YTA2LCAweDcxOGJjYjViLCAweGJjNTBmMGZmLCAweDk0Y2JjNTE3LAorCTB4MTljYjU5ZDQsIDB4YWQxZjkwOGIsIDB4N2I0YmZlYWMsIDB4Y2E3ZGI4MmMsIDB4NmJmOWY1OGMsIDB4YTNiOTE2M2MsCisJMHg1MGY5ZGM5MiwgMHg5NWY1YTNjZSwgMHhkMjAwMzdhMiwgMHgxY2ZlYzQ5YiwgMHg2ZDI3MzNiYywgMHg0YjFkYTQwMSwKKwkweGM4MmRhNDI3LCAweDdjZWU3YmM0LCAweDhlZDMyMzFmLCAweDhmYmY5OGY4LCAweDQ1OTUzYTU3LCAweDcxNzdmMTA2LAorCTB4YTU4ZmVlMTgsIDB4MzQ2NDUyY2QsIDB4ZTQyYzFkZTYsIDB4ZTNiZmNiMTksIDB4NmViODIwZmIsIDB4NjMzMTNkZjMsCisJMHhmMzVlYjhkZCwgMHhjNzI2ZjY3NywgMHgxMGNmNzFhYiwgMHgyZjJlNmJkNywgMHhhYjI4NzAxMywgMHgzYWZjNWJiNywKKwkweDkwYTVlYTEzLCAweDdmNzhkYmZiLCAweDU1ZGE5NWE5LCAweGI3Njk3ZTM0LCAweDVmZjYyYmY0LCAweDEzOTliN2Q4LAorCTB4NjhhMTM1ZjAsIDB4Nzk4YjhjODMsIDB4ODc4ZTRiYTgsIDB4MGY3NTg5MmYsIDB4ZGY4MGIwZTUsIDB4ZjQxNDM3NDMsCisJMHgxMDdkN2U0MywgMHgwMmZlY2ZmNSwgMHg5ZjI0MzljMCwgMHg0NTgwOWY4NCwgMHg1YzVlMzAxYywgMHhjYTllNTc2NiwKKwkweGZjZjM5N2IzLCAweDhhZTA0ZjNlLCAweGFmNjA4MWRhLCAweDg3M2EwMWE5LCAweGJkZTcyZjlhLCAweDQ3MWJmNzhjLAorCTB4NDI1ZTA2MjYsIDB4ZjliN2NjYmMsIDB4YjdjNDJiMDcsIDB4MTdlNDExZmUsIDB4ZjBlMWNhNWQsIDB4NGJjYWQ4ZjAsCisJMHhjNWQ5NjMyYSwgMHg5MzNmYmYwMiwgMHgzZTVjZTgxYSwgMHhhM2VmOGJiNCwgMHhkNTRlYWNlZSwgMHg4YmZlZjdlYywKKwkweGZiMDk0NzkwLCAweDRmNWVlOTViLCAweGVlODkwZWU3LCAweDFkMjIzZjEzLCAweDhmYjZmYmExLCAweDY4NjVlOTVjLAorCTB4OWUwMWE3YzcsIDB4MjIzZWVlNTAsIDB4NWVmODE1YjEsIDB4YWNlMzU2NWUsIDB4OWUyMTJmNDUsIDB4Nzg3Y2UyYjMsCisJMHgzOGRlNWZkZSwgMHhkMTc3MmU0OSwgMHgxNWJlYjlmYSwgMHhjZjAxYjk1ZiwgMHg4ZGU3NTI4MywgMHgwZTc0OGIxYywKKwkweDJkNzc5ZWViLCAweGUzZDBmZjdjLCAweGI5ZmFmMWE1LCAweDk2ZDNkZTM4LCAweDhmMTdkMjg3LCAweDE2ZjNmMWMyLAorCTB4Mzg3Yzg0YmQsIDB4YTFlZThlM2EsIDB4ZGNhYzAyYTcsIDB4OGQ1ZDI4N2QsIDB4Y2IxYTU0N2EsIDB4NjBmYTg3ZDgsCisJMHg1OGVmMGNkYSwgMHhlNDNmYjlmNCwgMHhkYjI0ZTNlMSwgMHg1MGIzNzllNCwgMHhmM2NiMWJjZiwgMHhmOTJjN2U3ZCwKKwkweGFlMTExMjM3LCAweGVkNTI3MWE1LCAweDE3Y2UzYTZjLCAweGU4NWVhM2JmLCAweGNiODIzZjQwLCAweDk1MjllZjg0LAorCTB4ZWE3ZTM4MTksIDB4NjkyNjllNTAsIDB4M2MwZjhhMTEsIDB4OTliZGUwNjQsIDB4ZDEyZGU5YzcsIDB4MjVlOWM5MTksCisJMHg0NTRhNGM1ZiwgMHgxYjUwZWUzYiwgMHhiZjIwZDQxOCwgMHhlYzM0MGQwZSwgMHhmNDhiODhjYywgMHg3OTIzNjFmMCwKKwkweDJkZjc2MTdkLCAweDVmZjdlMGM5LCAweGZhMWIwNjkyLCAweGExZDdhZjBmLCAweDUxMzIxM2ZhLCAweGY1YzFiZWFlLAorCTB4N2U1YzRmZjEsIDB4YTY1ZjU3ZjIsIDB4NGZiZjhlYzUsIDB4MGE3OGUwNDgsIDB4NjE2MzhiOWUsIDB4MzgzOGZmOTMsCisJMHgxM2QyMzNmYiwgMHgyYzNjZTc4MywgMHhmMDI3ZGE2YywgMHgxYzczNGRiZCwgMHg3ZWQxNTk3NywgMHg3Mjg0MWRmYSwKKwkweDAxZjc0MmQ2LCAweDcxYWMxYmNhLCAweGM1YzU5N2U3LCAweGYzYTBkNzFlLCAweDBiMWIzOWUwLCAweDFlMzIyNWY1LAorCTB4MjFkN2Y2ODgsIDB4YzJkNTczYTksIDB4NGIxN2JhMjQsIDB4NzNjMTNiZTcsIDB4YzY5OTBiMWEsIDB4NjNlYjllMGYsCisJMHgzM2NkNzdjZCwgMHhhZWU5ZmE4NSwgMHg5YWY1YWNjNywgMHgyYzdhYTczZSwgMHhlMzgzZDVhNywgMHhiNGFkZWJiNCwKKwkweDI5Y2YwNDhmLCAweDZmZDhjZWQ0LCAweDkwYjZjMjNhLCAweGVlZGNmYzBhLCAweGUyMWRlNWU1LCAweDZmYThjZjNjLAorCTB4NWIzZWQ3ZjQsIDB4ZjhkZWY3MTMsIDB4NTU2ZGU4YmIsIDB4MmUwMDc4MjAsIDB4MjE5ZjM2OGYsIDB4ZjM1OTc0N2YsCisJMHg0MThiODIzZSwgMHg4OWYwZGQwZiwgMHg3YzEzMjE2NywgMHgyMjViYWE1MiwgMHg2OWVkZTAzNiwgMHg3YmI4NmUwZiwKKwkweGM5OTBkODE0LCAweDg3MWYwNWZiLCAweDlmZWRkZDM2LCAweGJiZjhlNTA4LCAweDhlYmUyNjBmLCAweDczZTJlYWNmLAorCTB4ZDkwZjMzMTIsIDB4NDIxNzJlNjQsIDB4OWQ0Zjc3NzUsIDB4ZmE4YmNhNjgsIDB4OWI0M2VkNWQsIDB4MzQwYTk4YWYsCisJMHhiNzhhMzU5NSwgMHgyN2MxZTZiZiwgMHg0ZTRlNTk1ZSwgMHhkZjExMWE4YiwgMHhjZjM4MzlkZiwgMHhhMjNiY2E2ZCwKKwkweDhmYzgyZWYyLCAweGE4ZjVlNTM2LCAweGYyYThhNGYyLCAweDQwZmNhOGI0LCAweDFkY2RiZjVlLCAweDQwZmIyYzE5LAorCTB4ZDRmODNmZGUsIDB4OWVmYmY4MTUsIDB4NzMyMmZkNmQsIDB4MzU4ZjA1ZjEsIDB4ZjAyYmI2ZjIsIDB4YjNjYjdjZjcsCisJMHg1NmQzZWZmOCwgMHhjOTNlNGIzNCwgMHhiYTJiM2YyNCwgMHhiNTViZjNjZSwgMHgwZTEwYTNmOSwgMHgxY2EzMmYyZCwKKwkweDc0OTI2YjI4LCAweDBkNWRlYmQ0LCAweGM3OTQyM2RiLCAweGJiNTM1ZTc2LCAweDk2M2Y2ZTA2LCAweDc2YTExYzM1LAorCTB4ZDIzZmY2YmQsIDB4ZWY3YzdjNDYsIDB4ZGVhOWY3YzgsIDB4ZDg5ZmNlZjksIDB4NWJlZmViMGMsIDB4NzUxZTc2ZjUsCisJMHg0ZTJjMGE0NCwgMHg3ZjdlZWU0OCwgMHhkYmZiNmRiZCwgMHgwYTJmYmZkZCwgMHhmOWZiZGJkZiwgMHg4ZDFjOTAwZiwKKwkweGM0MWUwN2JhLCAweGY5YmFiOGY5LCAweGJkZTM4MGM0LCAweDdiZDJjZjIzLCAweGRkMWM3ZmI0LCAweDAzYWExNmZjLAorCTB4MmNjZTRiZjEsIDB4OWZkZGEwNTMsIDB4NDM4ZjhmY2IsIDB4YjRkZjBiN2QsIDB4NjdlMzdkYzUsIDB4ZGMxMmY4NTIsCisJMHg4MTY1MWU4ZiwgMHg1YmRjNzA0YiwgMHhjM2VmODdjYiwgMHhhYzM4NGM5ZiwgMHhlZjg2M2ViNiwgMHhmMDc4NmY5NSwKKwkweDk4MTQyYmU1LCAweGViNzc2MWRmLCAweGI3MDlmYzIwLCAweGYwNmYwOTRkLCAweDdmMmI3MjdjLCAweDFkZmY0NTUxLAorCTB4YTBmMGU3ZTEsIDB4YzgzNjQxZDYsIDB4YTZjMDk5M2YsIDB4ZWI3ODdlNTMsIDB4M2Q3Zjk4NjMsIDB4M2ZhZjA0ZTEsCisJMHhhYzkwNzViYSwgMHhmMjcyMDlhMywgMHhkZjkwYTk4YSwgMHhmN2U2YzdhYywgMHgzN2FlMDRkYSwgMHgzNjliZjMxYiwKKwkweDg0NTNmZmRjLCAweGZiZTMyYjBiLCAweDc2MzM1ZTBkLCAweDViOWQzYzgwLCAweDY2ZGI2YTcyLCAweDFmZGNjNzgwLAorCTB4ZGI5YzkzYzUsIDB4NTVkZDc2ZGMsIDB4NTA4NzA0NzksIDB4YTYxMWM2MWUsIDB4N2VkMzc4MGEsIDB4MjE1ZDcyNDgsCisJMHhlZTFmYTI3ZCwgMHhmMWJhN2Q4MSwgMHhlMmRjMWVlOSwgMHhkMmUyZmRhNSwgMHgzN2E4ZWRjYSwgMHg0NTFkY2VhNCwKKwkweGM3YTE0NWZiLCAweGRkYzllOTJmLCAweDUyMTkzODY5LCAweDNhZTkyZmE4LCAweDhkYjJlYjk3LCAweGVmNTIyM2UyLAorCTB4ZjUxZTkzNzIsIDB4MDMzZGY4YTAsIDB4MGZhMjNiZTAsIDB4MzZjYmMwOTcsIDB4MDk2ZDllYjEsIDB4ODBmNmJmZGMsCisJMHhmM2Y1MWE2NywgMHhjNDdmZTQ5ZSwgMHg0MmNhNjMyMSwgMHhjNWE3ZjI0ZSwgMHhmMzcyYmU5MSwgMHgyMDJiOTAwNiwKKwkweDc5ODlkN2Q3LCAweDA5N2I1YmFmLCAweDQ2NmUyOWY5LCAweGZjMjhmMTNmLCAweDY3ZDdlZmVlLCAweGJmZmViNzU0LAorCTB4YWVmMjAzMmUsIDB4ZGQ2ZWJiNmUsIDB4ZjMzZjdmMmMsIDB4MGRiYWY2YjksIDB4NWI5MGRjYmMsIDB4N2I3OWQyZWIsCisJMHhhZDRhYmY2MywgMHgzZWE0ZTNlNiwgMHg1YzQ2Yzk3OCwgMHgyOGMyYmM0NywgMHhlY2UxN2I3ZSwgMHhkMTk3MWIxMSwKKwkweGFkMmQ3ZmZlLCAweGZkZmRmOTlmLCAweDVhM2YwZWQwLCAweDdhODZjNDNjLCAweGMyOWY4MWE5LCAweDEyNTdmZWUxLAorCTB4ODkzNzNkNjAsIDB4ZjAzNWVmZGYsIDB4Yjc0ZjhjNjQsIDB4OTA3ZjUxZTIsIDB4M2I0MDdmNDEsIDB4ZWI0MDMxMzUsCisJMHgwYzYyN2QwNywgMHhmYWUwNmUwZiwgMHgzMzE2ZDIwNCwgMHhhZDI5OTdjMSwgMHhmZmZiZjBlMywgMHhmZGI1MzgyMCwKKwkweDRmZjRlMDJiLCAweGM5NDc3NzlmLCAweDBjMzc5MDIxLCAweDdhNWYyZmZiLCAweGVkZmY3MmRjLCAweDIzZDEwMTNmLAorCTB4ODAwMDcwMmEsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RjNWZmMDAsIDB4ZDU1NDc4MGIsCisJMHg3MzNlZjBiNSwgMHg5OTkyYmNjZSwgMHg5MjRjMjY2NCwgMHg4NGUzYzg0OSwgMHg3MTEwMDg0MCwgMHhmMDQ0NDMxMiwKKwkweDUxODg4NDMxLCAweGQ0NTAzYjY5LCAweDIwNzE3YWQ4LCAweDk5MjYwMjNjLCAweDRiNjJkNWE4LCAweDc5MTIwY2ZmLAorCTB4MjIzNDE4MDksIDB4MDI4MWMxNTAsIDB4MDZmNTViYzUsIDB4NzAxYThjNDUsIDB4YWY3YThhNDQsIDB4YjdhZDhlZjYsCisJMHhmZjdmNmM1NywgMHg0YThmODgwOCwgMHhkMmY1YTIzMiwgMHg1YWQ3ZmQ5NywgMHhjZTY0ZWY3YiwgMHhiNmI0YTkyNCwKKwkweGRjM2VmOWJkLCAweGQ5Y2ZiM2VlLCAweGQ3YjVlZDdiLCAweGY2YjVhZjZiLCAweDRjZjVhNjFlLCAweGQ4YzA1YzBhLAorCTB4Y2U2YTI1NjYsIDB4N2MyYzY0YWUsIDB4NjFlZGYxNDgsIDB4NjdjZjA3ZjAsIDB4ZjdmYjE5M2IsIDB4OTVkNWEwYjQsCisJMHhmMTlmZDhjOSwgMHhlNmM2MGFlZiwgMHgyNzI5YmY3ZSwgMHg4ZGVkMDY1OCwgMHg2MWNiMTgyMywgMHhjZmJiZjUyYywKKwkweGQ1MDBkZWQ0LCAweDdhM2Y0YmI5LCAweDNmN2MwZjdjLCAweDhjYTk3YmY3LCAweDQzZWYwM2U5LCAweGY3YzE4YzhmLAorCTB4NWI2ZGJjZWYsIDB4ZDI4NDJlY2YsIDB4NzkzNTE5ZDIsIDB4Zjk4NmJjYTAsIDB4ZWY3YmMwNTYsIDB4Mjc0MzU4OTgsCisJMHhiZTBlZjdmNCwgMHg1NTYzMDk3YSwgMHgzNWU1YmJkZiwgMHhkYmIxOTEzNiwgMHg5MzYzMmE1ZCwgMHhmOGFiNWIxOCwKKwkweDI1OGE5ODczLCAweGJiZTBkYjBiLCAweDY0NGIyY2YwLCAweDdkNjMxMTRmLCAweDBjZDg1MzExLCAweDIzYjg3NWZkLAorCTB4YjhjMTE3NWIsIDB4Zjk5NWQ3MWQsIDB4MWY1ZmQwYzIsIDB4ZWY4NjdlNjMsIDB4ZjdhNTRiMmQsIDB4NGMzZGRjM2EsCisJMHg3NDRiZjZjMywgMHgwZWMyNDAxNywgMHgxOWZhYTE3ZSwgMHg1YTM3ZTNkNCwgMHg3ODE0YmIyMiwgMHg3NmMyY2U1ZSwKKwkweDNlMzI1ZjZjLCAweGYzZmE4NjEyLCAweDdmN2QwZTMwLCAweDBmNjQ0YTYzLCAweDhmODJjZmI2LCAweGEzNzFkZWEwLAorCTB4ZmU4NjEyMzcsIDB4NDc2MjJjZWMsIDB4ZmE3NjNhNzgsIDB4OGMxYzMyNzMsIDB4MDVhY2FhZTUsIDB4ODIyOGVmZTEsCisJMHgyYjU5OTQzYSwgMHgwNzAxY2RkOSwgMHg3MTNmY2ZlMiwgMHgwZjAwNzM5NiwgMHg2ODk5Nzc1ZiwgMHgzZDk1YTkzZSwKKwkweGY0MzdmZjRmLCAweDdkZGJkNmM3LCAweGUxYjBhMDYzLCAweGNmNmY1OGFiLCAweDNiOTk3ODI2LCAweDY2Zjg4NTU4LAorCTB4YjgwM2ZjMWEsIDB4ODljODFmZWEsIDB4Y2NlN2MzYWMsIDB4YjFlYjg1NTcsIDB4NDc5ZmU5ZGEsIDB4NTUyMGZmZjAsCisJMHhiNjFmZjg0NywgMHgwYWI2MzViMywgMHg2NmQ2MTUyOCwgMHgwYmZjMDBjYiwgMHg0M2ZiNTg3OCwgMHgzNzYzMGMwMCwKKwkweDk3ODAwMGUzLCAweGQ2NzBkN2ZmLCAweDJiZjNjM2E5LCAweDA3YWQwYTVkLCAweDU1NmRmOWZjLCAweGJjNjdjZDhjLAorCTB4ZDRmMmZlN2QsIDB4NTg4OTk1NzcsIDB4MWE2YjUxYWEsIDB4YTU3MzViM2MsIDB4ZWY0NmM3YmYsIDB4ZTI4ZjNmYjEsCisJMHgwYmZhMGRhNSwgMHgyNWI3ZjEzMiwgMHgwOWJhNDRlZSwgMHhkODY5NzdlMiwgMHhiYTlkZWZmZiwgMHhmZGYwZWIwMywKKwkweGY4NzY1YzQ0LCAweGZiZTA3NGJlLCAweGY5YTMxNzNhLCAweGZjMzk1NWNmLCAweDQ3NTUzNWFjLCAweGM4ZmM0YWZjLAorCTB4ZDdjMjRlYjIsIDB4NzEzZjkwZmUsIDB4NzI0ZTM5M2MsIDB4ZmNiYWY3YmYsIDB4MDBiZTIyMzcsIDB4MGY3NGQxZWYsCisJMHg3NWE1NDVlMiwgMHg2M2Q3ODY0ZCwgMHg0M2IwNmY4OSwgMHhkNTU2ZGNmYiwgMHgzM2UwMzc3ZCwgMHhmMzQ5Y2NiOCwKKwkweDljZGVmMDk1LCAweDE1OGNiZjFkLCAweDc0ZmZlZTBmLCAweDg2OTU3MzZhLCAweGU5YzY1ZmYzLCAweDAyYjcyZDlkLAorCTB4NjJmMTEyZTIsIDB4NWQwM2E4MTksIDB4NjNmMTY0MmMsIDB4ZTc4ODY1MjYsIDB4ODQ0NWY0NWEsIDB4YzI0NzUxN2YsCisJMHgyZmRmZjRmNywgMHg0OWVmODlhYywgMHg5MmJhNjE3ZSwgMHgyYmEwYmYwNCwgMHhkZDcwZDE1ZCwgMHgzNzVmMGE4MiwKKwkweDM3M2UyNThiLCAweDZlMTgzNjUwLCAweDgyZDVjZjg5LCAweDI0NWQyNGVlLCAweGUyMzU3YmUzLCAweDdjNjBkMjdiLAorCTB4ZjkzZDJjN2IsIDB4OTk3MDZmZDgsIDB4ZGM5NGYwOTUsIDB4ZmExMTYzM2YsIDB4ZjAzYjIxZWUsIDB4MTZkZGQwMGYsCisJMHhkZDdhMjE0NSwgMHg2NDZhNTc3MiwgMHgzZGE3ZjIyNSwgMHgxOWYxMTdiZSwgMHhhZDE1N2MzYSwgMHgxNDkyZWY3NywKKwkweGRiMmJjMTlkLCAweDk0NDEzMDJjLCAweDljOWQ4NzMzLCAweDRhN2E0YjhmLCAweDYxN2E5ZjkwLCAweDlmNTg3ZWNlLAorCTB4OWRkNWQ3ZGUsIDB4YzEwMjQ1NjEsIDB4ZWFlYmYzNTgsIDB4ZGVmZmE0MmUsIDB4ZmRlNmFmNjcsIDB4MTlkNTQ4YWMsCisJMHg2MTg4NDNkNCwgMHhmZTE0MzcxOCwgMHhiYzAzMmI0MywgMHgyY2M1MzQ5ZSwgMHhlMDE3NWUzNCwgMHhmZjA5YzI1NywKKwkweDQzNWZlMTdhLCAweGU4YmM4MGM1LCAweGJmMWMwNmMzLCAweDk4MDdjYjhiLCAweGU3MWExMmUxLCAweDFkNmMyOWRiLAorCTB4NTI2Y2RiOGMsIDB4NmY2ODI2ZmMsIDB4YjIzZTNhNWUsIDB4NDM2MWMzOTIsIDB4MjAxNDZhM2UsIDB4OWI1ODliMzUsCisJMHhmN2MwMzE1MiwgMHgyNTEzYTZjZCwgMHgzNmYxOTViNywgMHg4NWJiZGUwZCwgMHhmNzgxNzVmMSwgMHg1ZjAwMmE4ZSwKKwkweDRjN2Q2ZGEzLCAweGZhNDViYTQ1LCAweGQ4YTVmNjg3LCAweGZmODAzNDVlLCAweGY5YmZmNWU2LCAweDdjZGZjMjEzLAorCTB4OGQxNzQ4YzAsIDB4YjFlNzE5OGYsIDB4OGE5ZTkxMzQsIDB4YjUyNGU4MDYsIDB4ZDU4OWUzOTIsIDB4ODAxOGM4YjAsCisJMHhhOWVhMjlkNywgMHg4YTg4YjFiNSwgMHhjZDU2NWE3OCwgMHg2NmU5MDI0ZSwgMHg4MTk5ZTkxZSwgMHhlY2FjZTNmNCwKKwkweDBjYTFmMzY0LCAweDExZmNjMDdkLCAweGY3NGE3YjgwLCAweGMyNDY5N2NlLCAweDU4ZGFlZWZiLCAweGI0Mzc0ZTNlLAorCTB4NGU4YmI2ZWMsIDB4YmViMDM0NWQsIDB4YmE0YmNlMTIsIDB4NDFjY2E5MzcsIDB4MDA3N2QxZTMsIDB4ODNiZjdmOGEsCisJMHhmYjM3MWJkZSwgMHg2ZWYyYzQ4MiwgMHhhNGQzMmVmYSwgMHhlMGY2YmQxMiwgMHhjZDFiZTQyMywgMHgzOGMwYTM5ZiwKKwkweDMyOGM5NzliLCAweDgyYTY3YWUxLCAweGJjYjk0MzdjLCAweGFlZWM3ZGIwLCAweDdmNjc4NDE1LCAweDA3YjdjYTA5LAorCTB4MDljZTgwZDMsIDB4OTQyYWJlOWYsIDB4ZWFlZWE1MmYsIDB4YmZhMGJiNWYsIDB4ZmZkNWRjYTcsIDB4MTM4ZTI1OGQsCisJMHg0N2Y0ZTI3MCwgMHhhNjQ4YmU5MCwgMHgyM2JkNjRlNywgMHg2ZTJlY2JkZiwgMHgwYzcxNmYyOSwgMHgxN2YwMWVmZiwKKwkweDM1YmUyZGUxLCAweDRkMGZjYjlkLCAweGZmYTJmYWExLCAweDQ3NWNlZjMwLCAweDM3NDQ2OWYwLCAweDIyMmY2ZGI3LAorCTB4ZGFjMGRjNzksIDB4NTkxYWRlODksIDB4YmJmNDgyYzQsIDB4NjljMmM2YzgsIDB4ZTA4YjE3NDAsIDB4MTcyODc0YjUsCisJMHgzZDMyYjE2ZiwgMHg0NDk2ZmQ2MSwgMHgyMTQ2ZjU4YywgMHgzMTYxNmUwZiwgMHg3ZDk2ZmVmYSwgMHgyYzM1ZWQ0OSwKKwkweDI2ZjY4NGVhLCAweDYyYTY4YjFiLCAweDZmNmM2OWQ5LCAweGVmNDE3MTY2LCAweDNlMjZiNjdmLCAweGJlN2MxZDY3LAorCTB4Nzc3NThiMzcsIDB4MjBkNDQ0ZDcsIDB4MWRhYjdiY2MsIDB4YmUwNjU3NzQsIDB4MzNlYjRlZDAsIDB4NWE0ZWY5NjUsCisJMHg3ZjBhZjRjZiwgMHg0ZmE4M2RkMSwgMHg3NmZiMzU1ZSwgMHgyN2JlZGQwMSwgMHhlN2UyNGJkNiwgMHhiYmY1NTc1ZSwKKwkweGQ1MTRmNzg4LCAweGRmOGZmMzQ0LCAweDljZmMyNTYzLCAweGViOGRiZDAyLCAweGRkOWI5ZjdmLCAweGRlY2ExYjNjLAorCTB4N2EzYmRkNTYsIDB4NTVjOWEyMzQsIDB4MTgzOWRiMzAsIDB4YjM5ZWViY2YsIDB4YjhkZDIwMzcsIDB4YjdjMjI2ZGQsCisJMHg2NWNjN2U3YywgMHhkZGQ1N2FhNiwgMHg1MjJiZmYwMiwgMHgwODhhYmIyMywgMHg5ZTkxMTNkZCwgMHg3ZDQ5NDZhYSwKKwkweDgyY2UyNmNhLCAweDU2NjZiYmZhLCAweGU2ZjUwOWQ3LCAweGVjNDExZGViLCAweDA3ZWQwN2FmLCAweGI5YjgxN2E4LAorCTB4NWI3MDI4ZGUsIDB4MmViMjdlNjgsIDB4MDZlOTJiZTcsIDB4NTJmZWExYzYsIDB4ODRhNWUyMmUsIDB4Yzg1YjhjNjMsCisJMHg3Zjg5YjY0MSwgMHhlNmVmZjQyNywgMHg0OTNiMjkyNSwgMHhhZmQzZjZmZiwgMHg5NmZkMTE4OSwgMHhkNzg4MmMwNSwKKwkweDc5NWM4NGU3LCAweDM2OTVjYTRlLCAweDlhMmI5NzJiLCAweGE4MzJlZTZiLCAweDk5NDFmNzNmLCAweDk1ZTAxZDZmLAorCTB4ODNkZTgyOTUsIDB4NGEzZjFiZWYsIDB4NWU5ZTkxZDEsIDB4ZWY1ZmU4ZjksIDB4OWZiNDE5ZmQsIDB4NWJhMmMwZmQsCisJMHhkMjAxN2RhMSwgMHg3M2RiYWMxOCwgMHg2MDQ3OTcwYSwgMHg4ZmQ0MzA3ZiwgMHgzOGY2YzA4ZCwgMHhiMWMxZTM2ZSwKKwkweGI0MWM3ZjY0LCAweGM4NDZmYjA4LCAweGUwYjRjNmNmLCAweDRmZDA4NWQ2LCAweDNlOTk5M2UzLCAweGJjZjY2NGEwLAorCTB4NWVlOGYyMzksIDB4Zjc2NDNmNmMsIDB4MWI3ZTgxZWQsIDB4MWI1ZTM4NTMsIDB4ZGY0OTFiOWYsIDB4NGUwZjYxM2YsCisJMHg3MzNjYzM3NywgMHgzYzlmOTFhZCwgMHgwNWUzNzI4MSwgMHg2NzdiZDkyYiwgMHhjMjExNzQ1OSwgMHhhZWQzYjY3ZiwKKwkweDcwMjc3YmUwLCAweDQyNTBlOTVlLCAweGVhZjM4MjliLCAweDA0M2Q5Mjc2LCAweDEwYjM5YTdjLCAweDM2YjkzYmJlLAorCTB4ZTA0YmNmOWIsIDB4MDk4NmU0ZTksIDB4Y2Q5YjE3YzQsIDB4YjNmMGJjN2MsIDB4YzI3ZmJkMGEsIDB4MDM5MTk4MWMsCisJMHg5NzRmMTNmNSwgMHg1MzQwNTZmYiwgMHhiNTEyYzA1ZiwgMHhlZTg3M2QwMCwgMHhiZDVlNzZlMywgMHg3ODgxZGY0OSwKKwkweDA5NTM4NzYyLCAweGExMWViOTVlLCAweDYyNjc4YjhkLCAweGYyZTk2ODdiLCAweDFjN2NhM2FmLCAweGRlNTFjZjhlLAorCTB4ZDliOTA0YjMsIDB4YzgwNWUyY2IsIDB4NDYxYWRiNGYsIDB4OWY1MTQ2NzUsIDB4OTFmMzhmNzQsIDB4NTg1ZTY1NWEsCisJMHgxNzFiYTA3YywgMHg5OTk0Zjc3ZiwgMHhjODdlMzVlMywgMHhiZTdjZjQ0YywgMHhiNTdjZTNmZCwgMHg3MDdmYWUyYSwKKwkweDY1YzgxMDljLCAweGU0OGZmOTI2LCAweDFkNWQ0MjcyLCAweGZlYzhjZWFhLCAweDJkOTczZDBjLCAweGZiNjMzYWVjLAorCTB4MWRlMGNlZWIsIDB4ZTZiZmEwNmUsIDB4OWRlN2ZmZmIsIDB4MzhkZjg0NjUsIDB4OWVkNjQ1YzksIDB4Y2E3OTdjNDksCisJMHg3NDhiOWZlYywgMHg1YTg5YWVlYiwgMHhmM2U4MjdlNiwgMHhlYWFmODIwZCwgMHg2M2ZlYzJhZCwgMHgxZjIyNGI1MSwKKwkweDZhYWFmNmNhLCAweDcyY2JkZDIzLCAweDY3N2ZhMGJkLCAweGMxZjdjYjhjLCAweDFmYzEyNmVkLCAweDFlYTJiNGRmLAorCTB4NjY0MWMyOWIsIDB4MWM0N2E4ODUsIDB4ZmQ0ZWJmZDgsIDB4NmEyMGY5NGYsIDB4ZTE3YTg3YTksIDB4OTE2NWE4ZjIsCisJMHgwMDRmOTEyOCwgMHhjYzFiNTFkZiwgMHgyNzU2ZDRmYiwgMHgwMzQwNmZlNywgMHgzMjY4YjNmNiwgMHg0OGI5N2QyMywKKwkweDAyYjVmYjA1LCAweDNkNWRlYjlmLCAweDlmYTcyZWIwLCAweGZhZmE3Mzc2LCAweGYwMDU2MDIzLCAweGY3ODk4ZjNkLAorCTB4ODJlZjYwYWMsIDB4NGRhNjdiMWMsIDB4NjA3ZWUyODksIDB4MmVlYjE2ZGUsIDB4YjVmMjExN2IsIDB4N2FlMjc1NWYsCisJMHg4ZTQ4NTc2ZSwgMHg1NjliNmJjZCwgMHg0YmVhMTViMiwgMHhlYjQwNWMwZiwgMHhkMzk5MzY5ZiwgMHg5Yjg4ZDJlNSwKKwkweDIxMTRlMmY0LCAweDExYWRlYjFmLCAweDNmZGZkOTBiLCAweDAxZjIxODUxLCAweDc0NzY0ZmY0LCAweDUzOTQ3YzIzLAorCTB4MjgwZjE4MzEsIDB4MTBmNDBkZDcsIDB4NWQ4M2E4NDksIDB4Y2I5M2E1MzQsIDB4OWNmMjA2NTUsIDB4NTI0YmQ4MjUsCisJMHg2NzFjYTNkZSwgMHg5MTlmZjY0OSwgMHgxZjUyYzIzZSwgMHhmNGM3Yjk3MSwgMHg1MjdiOTQ2YywgMHgwYWViZGYyZSwKKwkweGFlNDliOTc0LCAweGY1YzZjZThkLCAweDcyZTRmNTg1LCAweDc4NDJiZjczLCAweGE0MmQ2MjZkLCAweGU4MWVhNDRmLAorCTB4OTFlODU3MWYsIDB4ZWI5ODZhZDMsIDB4MmEyNmViMmIsIDB4ZDExNzc3NWYsIDB4Mjc1OTRiNzgsIDB4NTdhOTEzZTksCisJMHhkNzgzYTM4NiwgMHg3ZTBlODRiZiwgMHhlZDAwNzQ4NiwgMHhlOGIwMWY4ZCwgMHhlMzVlMzA2NSwgMHg5YTZkMTY3MiwKKwkweDQ0ZTc0YmM4LCAweDRmNWM4ZmQyLCAweGM0OWViOGRhLCAweGY0M2NlNTMyLCAweDRjN2ViMjY1LCAweDdhYzk4N2Q2LAorCTB4ZjVjMmRiMzAsIDB4Njk2NzVjOWQsIDB4ZTc0ZjY0Y2YsIDB4ZTU5NGMwNzYsIDB4ZmNjMTk1MTEsIDB4M2ZmOWE2MzYsCisJMHg2MDM0OWNjZSwgMHhiMmRlODRkNywgMHhiMTBiZjRkOSwgMHhlMGEzNjAxZSwgMHhkMzY5YzViZCwgMHhmNjg2Y2E2ZSwKKwkweGM4ZmNjNjkwLCAweDk3ODBhOTU3LCAweGJiN2NmMDlkLCAweGIzNmI3YmIwLCAweDJkN2JkZDM5LCAweDVhY2Q3ZTljLAorCTB4NzAzYjk1ODAsIDB4Y2ZiNDYyNWQsIDB4MTczMjY3OGQsIDB4ZTdjNGEzZDIsIDB4NTc3YzI3NzYsIDB4ZmQ3MWRmODEsCisJMHg4ZGJkZmZkNCwgMHg3YzI0YTViNSwgMHg5ZDljZmQ1ZiwgMHhjZmU3ZWFlNCwgMHhiMjU2MjMzYSwgMHg2ZTg1ODI0NywKKwkweDU3ZWIyZmU4LCAweDdiNTNiMjU2LCAweDNlOTI3MzlmLCAweGQwZmExNWVkLCAweGQxMjhmNjgzLCAweDVmYWUyYWNiLAorCTB4MjEyNzVkNzEsIDB4NjQ4ZjU1MzUsIDB4MzVjYWZiNDgsIDB4NGEwNDUxMjMsIDB4Y2RjOWFjZmIsIDB4ZjZjMWFjZWQsCisJMHg4YTJmNjg5MCwgMHhjYWU5Y2Y1ZCwgMHhjZmNjZmI0YSwgMHg2Mjc3M2RkZCwgMHg2ODYxZTAxZCwgMHg1ODhmZmY5ZiwKKwkweGU5ODFkMGU3LCAweGU3ODdkZmU1LCAweGM3YzM4MGExLCAweDQ3MmMxZmIxLCAweGRmYWFiNTdhLCAweGY0MDZkZWI5LAorCTB4MWU1ZDQzMzUsIDB4ZDFlNjBiYmYsIDB4YTE3MGVmOTQsIDB4ZmMyOWFiOWUsIDB4ODQ2ZjJmZjUsIDB4Y2MwNzg3ZmEsCisJMHhiY2ViOGFjYywgMHgxYjFkN2E2NywgMHg1ZGZjYmMzNSwgMHhlODlmMzExMiwgMHg1Yjk3ZTA0OSwgMHg0ZGViMTlmNiwKKwkweGE4N2FjNjlkLCAweGM4MmY1OGNiLCAweDRmNGU3YTcwLCAweGZiZTFkOTIwLCAweGQ1YjVkMDMzLCAweDRlYzFmMmRhLAorCTB4YmNmYWQ3ODAsIDB4YTdkMWY0OTUsIDB4MDY3MTYwZWUsIDB4ZmM1MzViY2EsIDB4NWFkOWUyMTgsIDB4ZjQ0NGYxZjgsCisJMHgzZmJhODQ2ZiwgMHgwMmI0YjA1MSwgMHgzOGNhYzRlZCwgMHgzZmFmOTFmZSwgMHg3NDJiY2ZiNywgMHgwMWI3ODEwZCwKKwkweDg5OWIzMWZjLCAweDNhZDYwY2YwLCAweDg1Y2U0OTJmLCAweDJjNzg5ZjA0LCAweDg0NWYwZmZlLCAweDlkOWEyZmY5LAorCTB4OWU5YmJhZTIsIDB4YWE0ZTY3ZjgsIDB4NjA5MjdiNDIsIDB4NTcyZGExNjQsIDB4MmRmYjg4N2YsIDB4YWUwOTZmNzgsCisJMHhmMDU5ZTlmZiwgMHhiMGQ1YzAxZSwgMHg0NmMzZWI4NSwgMHhiZTQzNGIxNiwgMHhkM2JiMDY2ZCwgMHg0NzdjNGIwNiwKKwkweDViODc1ZjA2LCAweDUxNTVlMmRhLCAweDhjOGVkZmY4LCAweGE3MDg3MWRhLCAweDgwMmQyN2Y2LCAweGZiMWFiMWY0LAorCTB4YWY5M2IwNGQsIDB4ZTA3YWUwY2QsIDB4ZDc3NjdkOTYsIDB4ZGQxZTAzMjksIDB4MmJhODdhODYsIDB4OTEyYTc1YzcsCisJMHg2MWZjODRmZiwgMHhiODk2OGE3OSwgMHgwOTU3N2ExZiwgMHg2YmY4OGI1ZSwgMHhhNjU4ZjViMiwgMHhmYzU3ZjhjMSwKKwkweGY3OTIzM2U5LCAweGE3Y2Q5NzhiLCAweDVkODBjNDdkLCAweGI0ZjkyNTZkLCAweDNkMjBhZWY4LCAweGRmMmI2OTdmLAorCTB4NmFkZTllMTcsIDB4YTdlZjExZDcsIDB4ZTNmZGYzYjcsIDB4YzQ0NzNjZTIsIDB4ODU3YmZmMDYsIDB4OGJkYmRiOWIsCisJMHgxOTQ1M2JlMSwgMHhiYzY0Yzc4YywgMHg1NWYwZmZiZCwgMHhmN2EzYTQ1ZSwgMHhkYzJmMWYxOSwgMHhmNzhmZWRjOSwKKwkweDYyYWY4MDVkLCAweGY3ZjYwZWZlLCAweGVmZDgxNzdlLCAweGFhZjllMjBhLCAweDJlMmU1MTBmLCAweGQwZmFhZWRlLAorCTB4OWM4NzYwNGUsIDB4YmM1OThmZTQsIDB4MGI3MWNhZmQsIDB4YTdkZmQ4MWQsIDB4NWZhMWE2MjMsIDB4ZTg5NWM3NjgsCisJMHgwMmY3YzI4OSwgMHg4OWQ3ZWUxMSwgMHhiNWNmMDE1ZCwgMHgxZDkzMTcxZCwgMHg5NWJiNzQ3NywgMHhlZGI2ZTljMywKKwkweGYxNWM3OWM1LCAweDRhZjg5NTI3LCAweGRhMjBiMTMzLCAweGZmMTYxZGM3LCAweGZkNjdlNDM4LCAweDcwMzMzZGUxLAorCTB4OTU5ZmRlNWQsIDB4MWZmN2EyNmIsIDB4ZjEwYjk4NTcsIDB4ODU5NjVlZTEsIDB4NWEyYjE3Y2YsIDB4NjFiN2Y5MDAsCisJMHg4OTk5OTJjYiwgMHg4NjZhNGVmNiwgMHhhZDM1ZWI0YSwgMHg4ZjU2Nzk3MCwgMHg3YWU5Zjg4MywgMHhkYjRkYTNkNCwKKwkweGZjNzA3ZjgxLCAweGYyZmY2ZmQ5LCAweDNmMjI0ZjQ2LCAweDRjYzU1ZWRkLCAweGMzY2JmNjA5LCAweGMyN2EyMzVmLAorCTB4NmJlMDI4YmYsIDB4NTdkN2MwYjEsIDB4YWE2YjJiZTUsIDB4MTI5NjhiZTQsIDB4ZWY4YmEzOTQsIDB4MGQ3MTI5NmUsCisJMHhmM2Y0NTc2MSwgMHgwZjljYzNjNSwgMHhiODUwY2JlZiwgMHhjMzJmMjBmZiwgMHg2ZTE4Y2ZiMCwgMHgzNTI4ZTY1ZiwKKwkweGY5YjE1ZTkxLCAweDk0MGY3Zjk4LCAweGM2MmRiMGQ5LCAweDBjODFmN2ZkLCAweDY0MGZkYThkLCAweGZiNWY3YjcwLAorCTB4NWVmYjZkZGQsIDB4Y2Q0ZDc5ODcsIDB4ODBjZjZlMDgsIDB4OTdmMzIxN2EsIDB4NzFlYmJhZTMsIDB4YjE5ODM1NTcsCisJMHhiYmIyNjI4OCwgMHg2ZTU2YzNkOCwgMHg4ZWRjNmFjNywgMHhmNmM5OWNkZSwgMHg4ZmQ4NGJhZSwgMHg5OTdmNjI3NywKKwkweDYyZjYxNzI0LCAweGZmYzdiZDNmLCAweGRhZjEwYzc4LCAweDQ0ZjFmMDVjLCAweGU3NDIwZmI0LCAweDFmYTBiMzNlLAorCTB4OTBhZGQxY2QsIDB4MDJmODc3M2MsIDB4ZDQyNWU5MGMsIDB4MjgyZDhiM2QsIDB4MjFjMzkwMWIsIDB4YzkxM2Q3MWYsCisJMHgwNjUzZmFmMywgMHgzYzg0ZWZkZiwgMHhmZGU3ZWE3MSwgMHgzYjdmOWMxMSwgMHhiNzNlOWNkYywgMHgzZjIxNGIyZCwKKwkweGM0NGYzNmU0LCAweGI1ZmY0MDhlLCAweGE1ZWQyYTdjLCAweDY3ZWZjMjI1LCAweDVmOTRmZGRiLCAweDI4OGVmYTQ1LAorCTB4ZDc1ODMxYWUsIDB4MzVmNDdmMzksIDB4MzBhODhkY2MsIDB4OGJiYjg3Y2UsIDB4NzdkOWRmYzksIDB4ODU0ZjlhNjAsCisJMHgxZmVlYzczNiwgMHg3ODg1MTlhZCwgMHhmMGZiMzJlYSwgMHgyN2FmODc3ZCwgMHhlMWY3ZTcwZCwgMHgzODY5OTNlZSwKKwkweDJhZGQ4NmJmLCAweGYyMjFiYmNkLCAweGIyYzJkNjQ5LCAweDMzZjBiOTAxLCAweGNhM2FmODI1LCAweDFjNTJlNjAxLAorCTB4MGY5NGJlMzgsIDB4MzRmZWVlMWYsIDB4ZmI4MzgxNmIsIDB4NTY3ZjQ4MGIsIDB4YTc5NzhkMGUsIDB4OGU3ZWQzZGMsCisJMHgzOTcxNWZkZiwgMHgxZThmOTc1ZiwgMHhlZTUwNDZiNywgMHhmZDA3NjQ3ZCwgMHgzZjZmMjA5NiwgMHg3NzdkNzI3MiwKKwkweGVmZWU0MzJhLCAweGRmNTAwYjNhLCAweDJhNmZkN2Y0LCAweGY4OWNhMTM1LCAweGRmY2Y4YjhlLCAweDQwMmNlOTYzLAorCTB4NjI4ZGZjN2UsIDB4MWFlOTY3ZWMsIDB4NmM4MDhiMTMsIDB4NTAwNmIyNWYsIDB4YTNlOGYyMDMsIDB4NDAyOTlmNDcsCisJMHg5ZWUxZmY3OSwgMHgyN2U2MGE2NywgMHg5ZGZjOTdjMCwgMHg3OGU1N2IyYywgMHhmZDI2NmZjMiwgMHgzNDRiMWVhOCwKKwkweGVmOWJjNzBmLCAweGU1N2Y3MmIzLCAweGY5NTQ3ZTMwLCAweGZkYzJkYjNlLCAweGFiM2U3ZGExLCAweGJmMjg3NDhlLAorCTB4ZjE0ODZiZWIsIDB4YzdkYjdkYTMsIDB4ZTZmZjI0NmMsIDB4YWNiZjBiNzcsIDB4ODNkYTNmZGYsIDB4N2RmOTE4ZmIsCisJMHgxZTE1ZmY1MiwgMHg5NzRhNGY0ZSwgMHhkNDgzZmU0MiwgMHhlM2M5MzhiMiwgMHg3YmRlNTliZiwgMHhlNDEzM2Q2MCwKKwkweGJmZjNhYzNkLCAweGQ5MzQ1ZjIxLCAweDMyNDZjN2UyLCAweGUyMGIwZmEyLCAweGQwZWNkMmNkLCAweGFkNjUzZjUwLAorCTB4YmYxNWY0ZTQsIDB4MmFmYjQ0YzMsIDB4ODFkN2FlNGIsIDB4OTI4YWVjZjIsIDB4MzAxMzM2OTQsIDB4NmQyNTI3YTIsCisJMHhmMjAxYzYyMiwgMHhmZGU5NGI3MywgMHhmYmE3MzU3MCwgMHg3ZjIzMTY3MCwgMHg1MTZiMGU1YiwgMHhiOGJiNWU0OCwKKwkweDMyNmYzZWRmLCAweGVhODNhZDczLCAweDllZGMxMWFjLCAweDE2ZGYzMmYxLCAweDVkZDY5OGI1LCAweGM0OTBmZjQxLAorCTB4NDgwYmQ0ODcsIDB4M2YxZjI4M2YsIDB4M2Y0NDZjNTIsIDB4NzY0MmI3NGEsIDB4OWNlYTZhYTcsIDB4NDcwZWZkOGIsCisJMHhjODQ3MTM0ZiwgMHhhN2E3M2ZmZCwgMHg4OTNmZmFmZSwgMHgxODhmMjY5ZSwgMHgzYTgyOWU4ZSwgMHgzNmQ3OTNkMSwKKwkweDNmMDkzZDM0LCAweGNmYmY3OWYxLCAweGJmZGMwMWMyLCAweGRkN2MwYjY2LCAweGZjNGVlNDI3LCAweDliZjQ5YjBlLAorCTB4OTlkZjM4MmIsIDB4MzY5OWJmYTIsIDB4ZmQ0NTU0NDcsIDB4OWM3ZjMzZTEsIDB4MTg3ZGZmZTgsIDB4MjdkYzVmZWMsCisJMHgwZWZkYTBlNSwgMHhmMzk1YzhlNSwgMHgxNjM3NWE3NCwgMHg0MTdmNDFlYiwgMHhkMjM2YzVlYSwgMHg2MjlhZjc4ZiwKKwkweDY0YWY2ODQ1LCAweDhmZDk2ZjhmLCAweGI3M2Q5MTc0LCAweGVkMjU2MmFjLCAweGE4ZGNmMmZmLCAweDkyYjc1MDBmLAorCTB4NzU1OTc0MWYsIDB4MDQ4OGQ0ZTAsIDB4ZGYxMGUxN2IsIDB4ZTVkZjM0Y2YsIDB4YmJkM2U3YTcsIDB4MWExMDdkYjksCisJMHgzODdiMjE2ZCwgMHg3MTg0YTVkNCwgMHg5NjAzOWI5ZCwgMHg2YjQxZGEwOCwgMHgwOTVmZWUxNSwgMHgzY2ViYjA2ZiwKKwkweGEwYWZhM2VlLCAweDc0MGZjZmI4LCAweDQ4OGExNzFlLCAweDhlY2Y2ZmZmLCAweDM1YmQyM2VmLCAweDkxZWZjODM4LAorCTB4ZjgzYTNmMWMsIDB4MWZjN2NhODUsIDB4OGVmYzY4YzMsIDB4ZWFhZjFlNzIsIDB4ZmVlNzVhYjgsIDB4MWQ3ZWIxMTUsCisJMHg2ZTM5ZmNiMywgMHgxOGQ2MDdiNCwgMHg4NWM2NTlmOSwgMHgxODgwOWNmYSwgMHg3YWZlNmYxOCwgMHhhZTQzYWQzYiwKKwkweGQyY2NmMWNhLCAweDBjZmY1YzZkLCAweDY3ZTQwYjk2LCAweDE2MmM5YWNlLCAweGZhNmZjNDQ2LCAweDA1MjQxY2Y5LAorCTB4YmI0NTczZDYsIDB4Y2IzOTM3OGMsIDB4Nzk2ODQ1MDIsIDB4YjdlOWJiYmYsIDB4YmQwMGE0YWYsIDB4OGU5ZmExNjYsCisJMHg2OGMyY2E2ZiwgMHg5ODdmOTNmNywgMHhmYzdkYzlkNywgMHhjOTAwMDlhMCwgMHg1Y2ZmZDZjNSwgMHg0MjY5NzM1NywKKwkweGYwM2ZiYzVkLCAweDZiNmJkY2ZkLCAweGY2ZWY0OGYyLCAweGEwZDgyM2I3LCAweDZmZGQ2NThmLCAweDM1MWUzMWQ3LAorCTB4YmQ4MWFlZDAsIDB4Zjg1MmViNmIsIDB4YjVjNzYxZjcsIDB4M2MwNjhlNTcsIDB4ZmZmYzcyMjgsIDB4N2Y0N2ViNWMsCisJMHhjNjE5OWRhMSwgMHg0YjRmODQ0YiwgMHhmZDBjZGZlYSwgMHg3ZWY5NzQzYiwgMHg3ODRhZjZiYywgMHg1OTBhYzFlMSwKKwkweDFmYWQ2NmJmLCAweDZjY2ZiYmUwLCAweDJhNTA4ZmVjLCAweDFjOGFjN2JlLCAweDZkYWNkNmVmLCAweDBkZTdkNmViLAorCTB4Mjc2MDA1ZDgsIDB4Mzk5MTFhZWMsIDB4N2VhYzFmNjAsIDB4ODVmYjY2N2IsIDB4ZWJhYTU2MzAsIDB4NWRlYTBiNTMsCisJMHgxZTQzZTdhOSwgMHg2NDhmZWM4NSwgMHhlNDIwM2Q3ZSwgMHg1NzJjZGZjMywgMHhmNDc2NDFmNSwgMHg1NzI0MTE4MSwKKwkweDRiMjA2NjdiLCAweGU0ODNmZWMyLCAweDgwNzk2ODc2LCAweGY2MDczZGExLCAweGRiYzIxNzQ4LCAweGQzZTNmYzdiLAorCTB4ZWY3YjQyMmYsIDB4MWIxZmRmZWMsIDB4Yjc3YmUzYTksIDB4MzdiYjQ1Y2UsIDB4YmEyMzRlNzQsIDB4MjM1M2VkMGQsCisJMHg0ZGFkZDAwYSwgMHg3MWU4MGJmMCwgMHg3YTQ4MGI4YSwgMHg3NDEyZWE1YSwgMHg4YzMzMGVlYSwgMHg1MjFjNzQ3MywKKwkweGJlODk4NTI2LCAweDgzYWUwYTVhLCAweGY4ZjdjY2I1LCAweGU0Mzg0MjVmLCAweGRlNzkzMmJlLCAweGY3YzExZWJmLAorCTB4ZWFkMmExMGYsIDB4ZmZkODI1YWQsIDB4OWRhMTg1NmUsIDB4NDRmNGFlYjAsIDB4MzdkYTAyZDYsIDB4MzBiNTliYmQsCisJMHg1ZDI1YmJlMSwgMHg5NzNlMTIwZiwgMHg4OTBmMzNlYywgMHhlMDhmNWZjNywgMHg2N2U2ZGU3MSwgMHhkY2EzZjY5ZiwKKwkweDkwYTIyOGY4LCAweDIyZDA2ODRjLCAweGJkNDBhNzZiLCAweDk2ODRjMWExLCAweGNjOGNhYjIwLCAweDFjZTI5MWJiLAorCTB4MDYzNjE2NzUsIDB4ZWQwNDc3ZTYsIDB4ZGY2Mzg0MjYsIDB4NzA1M2MzMzcsIDB4ODE0ZmYwZGUsIDB4OGIwMmRiNDcsCisJMHhhYjZlOWY0OCwgMHg0ZTI4MzliMywgMHg1NmZmM2E1NCwgMHhjNTJiODNjMiwgMHg1NzU4Nzg4ZiwgMHhlMzgzOWQ1YSwKKwkweGUxOWFjZjM0LCAweGQ4MDhmOGEyLCAweDdjZGVkODcxLCAweDJmYzhiN2Q3LCAweGQ3NWFlMTI0LCAweDNiNDVhZTY1LAorCTB4YjllYzBhYTcsIDB4ZmNlZTAwYTcsIDB4N2Q2YTZiOGMsIDB4ZDUyM2M3YzAsIDB4M2JiN2U1ZmQsIDB4YjQzZTVlMzAsCisJMHgyNjZlZmYxYywgMHgyNTM2OGJhNywgMHgyNTQ2ZmUxMCwgMHhhMjU5NDFmOSwgMHg4YmIwYjM1ZiwgMHg4ZDlmOGRkYiwKKwkweDJiZTIxOGIwLCAweGY2ZTA4ZDlmLCAweGQ4ZTFhNWVjLCAweGMzOWYyNDc0LCAweGRhMmE0ZjVhLCAweGZmZTYyMWQzLAorCTB4MmNjZmY3MDQsIDB4ZDBmN2QwZTAsIDB4ZTQ3OTcxM2EsIDB4M2ZjOWQ1NjksIDB4ZGNmNGYzNjYsIDB4NWZiNjIxN2IsCisJMHg4NWZlZDFhYSwgMHhlMDBmM2Q2OSwgMHgzZDZiYmRiOCwgMHhmMDRjNzViZSwgMHgyYWVmZDYwMSwgMHhiZDRmN2RhMywKKwkweDMyNzhhODI3LCAweDdkNzBiY2Y5LCAweGFhYmQ5ZjdiLCAweGQyODhmZDFjLCAweGE4ZmI1YWVlLCAweDVhZTZmNDlkLAorCTB4MmQ3ZjdlYTcsIDB4NjlkZmQzY2EsIDB4MTZjMDFmM2MsIDB4N2U4NzRkOGYsIDB4ODMzZWZlOTYsIDB4OGY2YjVkYzYsCisJMHgwZmY1YzVhYywgMHhiZGE5NTRlZiwgMHg2MDc0MTFkOCwgMHhiOWJlNGJiZiwgMHgyYmQyMjI2NSwgMHg1MDRhNDQ3MywKKwkweGVkM2Q5YThmLCAweGI2MThlOTBjLCAweGIxMmZlNDJiLCAweGUzMGMwMjc5LCAweGYzYzNkM2M0LCAweDQ1ZjUwNTM0LAorCTB4MWQzMzNkOTIsIDB4NWZiNDU1ZmQsIDB4YjZiZjkwZjEsIDB4MThjN2YwNWEsIDB4MzZkMzgyYTAsIDB4M2ZiNjg1NjIsCisJMHg2ZmIwMTg4ZiwgMHgxY2UzZjk1ZSwgMHhiYjRhMWYwZCwgMHhmZWUzNjRjNywgMHgxNGJhOWFmMywgMHg1YjJkZjY4NiwKKwkweDQyNjYzZjE1LCAweGM2MjdiZDdmLCAweGVhNmUwZWQwLCAweGE2OWM2ODU0LCAweGI4MmQyN2QyLCAweDkzYTViOTZmLAorCTB4ZWM0ODc3ZjMsIDB4MDU3ZjAwMzMsIDB4ZjE4YzU3NjgsIDB4YTA3YjBhYTQsIDB4NTgzOWZiOGQsIDB4YzQ0OGQ4ZWMsCisJMHgzZDdjNjNmMywgMHgxMmY3ODMxOSwgMHhhZDhjYWJmYywgMHhmNDQwZjJlMCwgMHg4NjcxMTE2NywgMHgwMjU3ZTEyNiwKKwkweDNlZWQ0ODRkLCAweGVmNWJiNDhmLCAweGYzYjdmZDE2LCAweDU5YmI4YzUyLCAweGM0NTVmOTg5LCAweGYwNjJiOTZiLAorCTB4MmFmMmNiODcsIDB4OTFmYTdkZjEsIDB4ZGZlNDBjZjgsIDB4ZmExN2QwMzgsIDB4YjMyYWI2OTcsIDB4Y2MyOWZkNmUsCisJMHhmMWE0ZWI2ZiwgMHhiY2MxMzQzZSwgMHgwNTZhNGU0MCwgMHgwNDUyMDczZSwgMHg3ZDc2NTdiYywgMHg4NmU5MDMzMiwKKwkweGQ3ZTIzMmQ1LCAweDZhNjlhZWU2LCAweDZmYzc4MzkzLCAweDRlYzg1ZWQwLCAweGVkODlkOTZkLCAweDkyOTczN2Q5LAorCTB4YzhmOGM2N2UsIDB4MzVmZTc4NmMsIDB4MWNiM2U3MGYsIDB4NzlkN2Y3MDcsIDB4NjExNzBlZWYsIDB4NDhmZDMzYmMsCisJMHhlMjlmZDZlMCwgMHg5MGE0MTdmOCwgMHhkNjFiMzViZiwgMHhlNTQxOTljNiwgMHg3OTZmZjQxYSwgMHhhODhiZjk1OSwKKwkweGY1MzNiZDdmLCAweGM2NDc4NDBhLCAweDM4MmUzMGY1LCAweDM4ZTQ4Y2FiLCAweDhhN2MzM2Q1LCAweDM3OTQxNzdmLAorCTB4MGUzNGRjNzgsIDB4MTE2YWVmZWMsIDB4NzExZTdjNWUsIDB4ZDExOWM0MGMsIDB4NjJlMzg3NmYsIDB4ZGVjYjBmMWMsCisJMHg3ZTQ2YTg5YywgMHg3YmU3ZDA3ZSwgMHhhY2JiNGU5MCwgMHhjY2Q3YzQyZSwgMHg0MmRmOTdhZSwgMHhjNmQzM2I3ZCwKKwkweDlhZWUyOTNhLCAweGQzYzRiNzY0LCAweDNhNDQxOWJlLCAweDdhNzMzYmVkLCAweGQ3MDgzZGM3LCAweDk0N2QwNzc1LAorCTB4OGY2NDkyY2YsIDB4YjczOTcxNWMsIDB4OTNkYTNmY2IsIDB4ZWMzZjIzYWEsIDB4ZWMxYjcyMTIsIDB4Nzk3ZjFlNDcsCisJMHg5MzIzZWY5YywgMHhmNmVmYzhlZCwgMHgyM2I3MmZhZiwgMHg3NzdmZWJmYiwgMHgxN2MzOTIzYiwgMHgyOGYzYzNkZSwKKwkweDg5MGY3Y2E0LCAweGMzNWY1ZjdkLCAweDVmZDQzNGQ5LCAweGFlZDIzZDJiLCAweGQ4ZjdjYTRkLCAweGJhM2RmMjJkLAorCTB4ZDBmN2NlODcsIDB4MGZmOGYyNzYsIDB4ZWU0OTQxODYsIDB4YWUyMjJkYmEsIDB4NDNjZWY3ZTUsIDB4ODRiYjg3ZmYsCisJMHg3YjJiYzBlNCwgMHgzNzQ4YzM1MywgMHg2NGVkM2I2NywgMHg0YjZlNjk5NywgMHg3YjZhZTExNCwgMHgzY2MxMWFkYSwKKwkweGUwNDUzNjg4LCAweDU3ODg5MGViLCAweDJjMWM0NDU5LCAweDgzNDc0NGEzLCAweDQwMjVhMGUyLCAweGE0ZmMzZjcyLAorCTB4ZDJhYmM3OTksIDB4ODVlZThmMjIsIDB4MWNlMWUzN2EsIDB4ZDQ2MmNmMTEsIDB4NTRkOWY4N2YsIDB4OGE2Mzc3YzIsCisJMHgzN2ZkOGU5ZSwgMHg4NjA4ZmJmZSwgMHgxODNlYWE3MSwgMHgwOWY5ZDcwZiwgMHg4N2JiNzA3YiwgMHg3ZmJjNWFlMiwKKwkweGU3NTU4MmY2LCAweDg5NjhiM2YxLCAweDMzYjBmMDFiLCAweDkzYmZlZGMyLCAweDA1YThhNmE1LCAweDg5OTNiZGU2LAorCTB4MzJmNTlmM2MsIDB4ZDllN2M1YWUsIDB4OGYyNDYxYjcsIDB4ODIzMWEwY2IsIDB4ZGNiNWIyZmIsIDB4ZTMyZjU0NWYsCisJMHgxZmI5ODc1NSwgMHhhNWM0NWVhZSwgMHhmNDVlY2U0ZSwgMHhiNDU4YTYwOCwgMHhiOGI1MmQyOSwgMHhkZDdjZmI0ZiwKKwkweGRmOWZmMjM0LCAweDJhMmNmZjc5LCAweGZkMThkN2ViLCAweDNmZDA4YmZkLCAweDNmMTAzYzVmLCAweGY5Zjc3ZTk2LAorCTB4ZjZlMTY3Y2MsIDB4ZDBmZjgwZjMsIDB4YmU4Y2Y2MDQsIDB4ZmQ0NmFiNDYsIDB4Nzc1Y2M0NTksIDB4YzNkMDNlYTMsCisJMHg0MzE3N2FiMCwgMHgxYTI1MDZkOSwgMHgxOTYwMGFmMSwgMHg3YWQ2ZDNkZSwgMHg1N2JkNzA1MiwgMHg2ZjQ4OTliNywKKwkweDdlNGNkYjg1LCAweGNiZDI0ZjdjLCAweDY3YWUxZWFiLCAweGJkNzBmNWRmLCAweGUwOGVhODAzLCAweDMzNmNiMjM4LAorCTB4ZTg4Mzc4OGIsIDB4NDUzMzA1NmYsIDB4YmMyOTM0YjEsIDB4NmFkMmVkNWMsIDB4YjJkZmQyODcsIDB4OGI3MzM2YmYsCisJMHhjZGRhMWE2ZCwgMHg3N2YyMjZmOSwgMHhkN2YxNmU3ZiwgMHhhMzM4YmY5MSwgMHhjZGE5ZDY4NCwgMHg5NmE2YjJkOSwKKwkweDdkMmYxM2I3LCAweGE4MDc4ZjZlLCAweDFiOGQzMmZkLCAweDQwY2Y0Yzk2LCAweDg3ODJmYTc5LCAweGYxOTIxN2M3LAorCTB4NThkZGIwYjYsIDB4MmNjMzhlNGYsIDB4ZjVlYjE4ODksIDB4YTczNjM4MmMsIDB4MTIwZGM3OTgsIDB4ZjQyMGJmOWYsCisJMHg4YWViZTdjNCwgMHgxNjdkYmUwNCwgMHhmZTcyYmI5NCwgMHhkZTM4ZjIyYiwgMHgxY2JjZjk0YywgMHg4NzVkNWY5NSwKKwkweGUzMGEzMDc0LCAweDcyNTg0NWNhLCAweDg0Y2MyYWJmLCAweDk5NzUxZmUwLCAweDQ4ZmEyMTQ3LCAweGNkY2RiNzgyLAorCTB4OTZiYzI5ZTksIDB4NWFmZjIxZmIsIDB4ZmVlMTkzZjgsIDB4ZjgyNTkzZDAsIDB4YjhjNWVmZDgsIDB4NDJjYmJkNjUsCisJMHhmNWYzZTg3MSwgMHgxYTY0YTQ5NywgMHhmNWZkYjdmNywgMHg5NmZlZmZiZiwgMHhhYWQ3ZTdlZiwgMHg0NWM2YmYyMiwKKwkweDhiYmU2OTcyLCAweGUyYTRlNWNmLCAweGU3YzUxYmRiLCAweDcwMWZiMDBlLCAweDBhZDU2YjFlLCAweGJmZDMyMzk0LAorCTB4MzQ3OWEwZTksIDB4ODIzOTA2MWYsIDB4M2RlNWFjNzEsIDB4OWJkN2E4MDUsIDB4MzA0YTdiYWIsIDB4NWY4YzkzNWUsCisJMHhmMjkzNTY4NCwgMHhlZjliZGUwYywgMHhkYTA4ZmQ4MSwgMHhmMThjNmIwZCwgMHg1NWYxYzFiOCwgMHgyNjY2NjE3ZiwKKwkweGVlNGU3YmVlLCAweGQ3ZjUxOTdmLCAweDJmZTkzYjdlLCAweGFkMTdiZmY4LCAweDE2Y2ZmZmM4LCAweDM4OGI1YzkxLAorCTB4MmUzMTYzODMsIDB4ZWU4OTRhMTQsIDB4ZGExMTcxZjgsIDB4NmE4ZWRjMzEsIDB4NDRlZWI2ZWEsIDB4NWI3ZTcxM2IsCisJMHhmZjBmN2M0MiwgMHhlZjE4ZGViMywgMHhjODMyNmI2MywgMHg4YzNhY2VlZiwgMHg0ZTFlMWJjZiwgMHhmYzUwNmVmYSwKKwkweDY1ZDY5ZGFmLCAweDBlMzgyNWIzLCAweDEwZjQxZGY5LCAweDU5OWMxZGU1LCAweGJlYjg2MjYyLCAweDExNmZhYWY1LAorCTB4NzYzM2E5MmEsIDB4YzY3ZTdkYTMsIDB4NDY2YmQ3YzksIDB4M2UzZmQ0YTYsIDB4ZWJmYWJmYjIsIDB4NTdkOWQ2ODMsCisJMHg2ZjVjZWI4MiwgMHg3ZWM0YzE2MiwgMHg2MTlkNzA5YSwgMHgzYWM1MWI3ZCwgMHhlMmZhNzk5ZiwgMHg4ZmU3NWMxMiwKKwkweDgyNWM1ZmY3LCAweGRjZDliY2ViLCAweDI5YmU0N2VlLCAweDQxYWYwNzc1LCAweDMyYmE5Y2ZjLCAweGU2MTVmNjQwLAorCTB4OWQxZjIwZWYsIDB4OTRkZTNkMmYsIDB4ZmQzNzhmNDQsIDB4MmViMWU4ZTMsIDB4NTkzMjFmMzEsIDB4ZTNmNDM2M2YsCisJMHgzZDFmYThjYiwgMHhlNTBmM2QxNiwgMHhmNTliN2NjMSwgMHhmYzQ5ZWEyZiwgMHg2NzlmZDIxYiwgMHhlM2ZmOTJiMywKKwkweGRkM2YxZmYwLCAweGRkMThmOTQ4LCAweGIyMjdkOTJhLCAweGIwNWFjM2JmLCAweGMzYTNlZDE4LCAweDYxN2Q3OTZmLAorCTB4ZDNmZWY4NjUsIDB4YjVlNWZkODUsIDB4NTlmYTMwYjEsIDB4ZGE0MGJlZTQsIDB4NzhmMmM5OTcsIDB4MDNjZjk4YjksCisJMHg4Y2RmZmU5OSwgMHgzY2UyMWJmOCwgMHgyMGRjN2ZkMiwgMHgzZTQ1YjFkZSwgMHg2ZWVmNzZlNSwgMHhjN2ZkYzdjNSwKKwkweDZlNGZlNDlkLCAweDg1Y2YzNDNlLCAweDIyMGZlMmZlLCAweGZjZGM3ZmRjLCAweDhmZjkzOTc0LCAweDhhNWU0NDk3LAorCTB4ZWIxOTNlNjIsIDB4MWZiODVjNTYsIDB4ZGRmYmIyNTksIDB4OTAwM2NjMzQsIDB4ZTdkODVlZmIsIDB4Zjk0OTlmZGUsCisJMHhlZmZkYzYzNSwgMHg2OTkzOTEwNywgMHg3MDAwMzc5OCwgMHhhNzcwOGZiZiwgMHhhNDE2ZTI3YSwgMHhmZmQ4NjZmYiwKKwkweGIzNjBkZTYxLCAweGZkODYzZjE2LCAweGQ5MTg3YjM2LCAweGM2NWQ5NTA1LCAweGVmOGNhMGZkLCAweDQ4NTgwYjZlLAorCTB4NTZlYjZlZWUsIDB4YjNhZjI4MjIsIDB4M2NhMmMxMmMsIDB4Y2YyYzZiZDQsIDB4ODA3NTNhNzUsIDB4ZmU5OTIyY2YsCisJMHgwNzdlOTAxNywgMHg1ZGZlZWFlMiwgMHhhN2ZlOTc1OCwgMHg0NGU5YWQ5ZSwgMHhlNjY2M2RiZiwgMHhkYjNjYTE3NywKKwkweDRjZjIxNGVhLCAweGRiZjZmOTIzLCAweDc1OTFkZDg3LCAweDZmYzM3NjA5LCAweDU4NGVkYzIzLCAweDM0YzFmMzIyLAorCTB4YmQ2MGQ1MTYsIDB4MWZmMWNkMTYsIDB4Nzk0NmY1YzcsIDB4Zjc5MjRkMWYsIDB4YWYxOTc1ODksIDB4NDk0NTg1YmYsCisJMHg5ZWIxMzUyZiwgMHhjNGIwYmNmZSwgMHhmOWUzOTJmNywgMHhmNDM3MDcxOCwgMHg3NWNhNWFjMywgMHhlNGRkOTNmNCwKKwkweGFiOWM1MWYwLCAweDYzNTZjZmViLCAweDliZWY5ODdiLCAweDU1OTYxZjgxLCAweDVjYWZkMDBjLCAweGNkYmY0OTA3LAorCTB4NmExZDFmYzIsIDB4ZTkwYWIxMzgsIDB4YjhhNWQ0MzcsIDB4ZThkZDdmNzAsIDB4MDhkYmY0ZTMsIDB4OWJjYzJmZmIsCisJMHhkNjc3ZTY0ZCwgMHgxZDEzY2M2OSwgMHhkZDdmZmY4ZSwgMHhmZjljNzdjZiwgMHg5Y2FjM2Q3ZiwgMHg1YmY4YzdmYSwKKwkweDNmOTdlZmRmLCAweGZjZTVlZjljLCAweDdmYmVmZmE1LCAweGU3MGFkZDllLCAweDI1NzlhNGNiLCAweGZkOTM1YmVmLAorCTB4NzlkZjcyZWUsIDB4OGJmMGYyYmUsIDB4ZjE3YzdjMjQsIDB4NzBjN2M2MGYsIDB4NmIyNTMwZjIsIDB4NzI0MmZkZTgsCisJMHg5NmFmZTM1YywgMHhmOGUwZmY4NywgMHgxZTg3MjNjNiwgMHhhODgxMzM0YSwgMHhmNjE0NTI1OCwgMHg2ZmNlYmI3MiwKKwkweDUwY2YxNzg4LCAweDM3MWU3ZTFkLCAweDQ1M2U3OTU1LCAweDlmNWRkYzcyLCAweDljZWVlMjIxLCAweDVhN2E1ZjlmLAorCTB4MTI2YWY1YTUsIDB4NDNhNmUxZjEsIDB4ZGFiZTFmNGUsIDB4ZjE0YzU4ZTAsIDB4ZTlmOGU0ZDksIDB4MDY3ZmI2NTIsCisJMHgxYzcyNTEyZSwgMHhiOGY5MTFiNSwgMHhhOWUzY2JmOCwgMHgzZDM5NjUxNywgMHg1Njc0OWYyNCwgMHhjOTBhNzk4NCwKKwkweDM5MmY1YTc5LCAweDRjMTExZDNlLCAweDMyZWFlZjU4LCAweDQxMGMwOGQ4LCAweGNjMmQzNmQ3LCAweDRmOWUxMjMyLAorCTB4ZjRmNmUyY2IsIDB4Yzg5ZjIyNGIsIDB4MDVlN2UxNmIsIDB4ZmFhNjczZWUsIDB4MzVlMzFmNzEsIDB4N2NhNzdjZjEsCisJMHhkNjdhNjA0ZiwgMHgwMmVmOTQyNCwgMHhjMGRlY2Y5ZiwgMHg0Nzk3ODA0YywgMHg0ZjI0OWRjYywgMHgxZjBlNGRjMiwKKwkweGM3ZTkzZmNhLCAweDEwZWZmZDkxLCAweGE1ZjM4YjcxLCAweDE5Njc2ZmYzLCAweGZlYmZiY2U5LCAweDg1ZmJlMjRmLAorCTB4ZGFmZmJlOTIsIDB4YzAxNmRkYjgsIDB4MTgxZjgxOGQsIDB4MTg2YmVmZDEsIDB4NGMxYTJhNjcsIDB4MzNmNWMzYjcsCisJMHhjYjJlZmQxYywgMHg0NTllZGMwYSwgMHhhNDRmZjE3OCwgMHg5NGYzZTZmYywgMHhmMTk1YTkyZiwgMHg2MjJmZTg5MywKKwkweGZhM2FhYzA3LCAweGZjZTI2ZDM3LCAweDIzOWY1YjBiLCAweGFhYmVlYmY2LCAweGNkOTc5NDU5LCAweDczYzg4ZmNmLAorCTB4OGZkOWMzMzYsIDB4OWZmOWZiMWIsIDB4ZjVmZDhmZGIsIDB4YzhmZDkzYmYsIDB4OWM3NjgxZGMsIDB4N2U2OWE5ZTcsCisJMHhlZDVmZmJjYSwgMHg1ZjcxZjgwNCwgMHhjODc1YThmOCwgMHhkY2YyMmNmMywgMHg1ZGY5OTdjNSwgMHhjZGMzZjZmNiwKKwkweGIwZWY2YWU5LCAweGU1NjNmZjcwLCAweDM0ZmY5M2U3LCAweDM0ZmJmOWY5LCAweGRmMGVhM2Y0LCAweDdiZTQ1ODRmLAorCTB4OWUyMmZjYzYsIDB4ZjgyNTc2YzYsIDB4OWUzMTQzYjcsIDB4ODA5MmY3YWYsIDB4NDQ3ZjNlNTcsIDB4NmNmNGM1ZTgsCisJMHhhNzVjNTFmZiwgMHg2Y2RiOGY4ZiwgMHg5ZTRjMWQyYywgMHg5YjE3MmU0YSwgMHgyZjhhMGUwMywgMHhiY2YyNzczNCwKKwkweDhjZTVlNjk3LCAweGZhMzM3N2U0LCAweGFmZDBjYjRmLCAweGJkYTE4YjM4LCAweGY4MjMzNTM3LCAweGY1N2VmYzMzLAorCTB4OWFiMDhlZGIsIDB4ZDlmNzdlOGUsIDB4ZGViYmVkMGMsIDB4YTlmZWJjZTMsIDB4NmM3M2Y4M2IsIDB4YTFlZjJkMGYsCisJMHhlY2M3NDY3OCwgMHhhYWVmMjg4ZiwgMHhhZTlmY2ZlYSwgMHg3ODI0YWRhYSwgMHhiMWUwOGZjOSwgMHg3Y2FkY2YxYSwKKwkweDBmZTNjNTkxLCAweGJmNDNmY2IyLCAweDVmOTNmMTNjLCAweDllMDZlM2ZmLCAweGY4ZjIxZDlmLCAweDkwOGZlODVkLAorCTB4M2Q1NGYxN2UsIDB4ZTZhNjdlNDYsIDB4YWI2OGRjMDMsIDB4ZDg3Y2Y5NTIsIDB4OWU4OGYzZjcsIDB4MmI0YzBmOWEsCisJMHhlYjI5ZmY0NywgMHg5ZGEzOTdiNCwgMHgwNzJiZjU1YiwgMHhiZTNlZjdlZCwgMHgyNGYyOTcyYiwgMHgwZmMxM2RlYSwKKwkweDJiM2EzZTUxLCAweDVkYTM1NzIzLCAweGEwZTMwODVhLCAweGZlZjFmYmJkLCAweDZlMTFjYmFiLCAweGEzMzZmZjI5LAorCTB4ZGZjNjFjZmYsIDB4YzdmYTM0ZWMsIDB4ZDllNzhkOTksIDB4NGY5YmRkMmYsIDB4NDc2MmNiZmIsIDB4NmZlYzUzZjAsCisJMHgxMWMzOWRiMywgMHhhM2NlMjNkZSwgMHgzMjc5YmYwOCwgMHhjZmJlNGJmZiwgMHg0ZTM0NGQ1NiwgMHgxNDZkYjdmNiwKKwkweDYxNzI5NzJmLCAweDZkMDU5OWIzLCAweGU0ZjIwM2M1LCAweGYyMmU5Njc4LCAweDYzNWU0NDRjLCAweGE3OWUyY2Y3LAorCTB4OGYwZWVhMjIsIDB4ODFmM2JmMzEsIDB4MjM4ZjJiY2MsIDB4YjRiM2M3M2MsIDB4ZTYxZjk2YWYsIDB4NDAyZjk0MTgsCisJMHgxODdlNjJmZCwgMHg5YzU4MDVjNSwgMHhlN2E5MmRmYywgMHhjYTNkMWRiOCwgMHg3MjdhMjE2NSwgMHg5YzUxZGYwMiwKKwkweGVkMDllODA2LCAweGIxZTM0YmY5LCAweDZiOWU3OGU5LCAweDUyZjQ0Nzc0LCAweDczZTFmM2M0LCAweDM2OTNjMjI2LAorCTB4ZDM4YTM1ZWIsIDB4YmM3YzJiYTQsIDB4NmIzZGY1ZTIsIDB4YzYxZmEyYzcsIDB4Yjg2NWU2ZjUsIDB4YWJiYjdhYTQsCisJMHgzNTNhNTExYSwgMHg0ZDlmOTAyMywgMHg1Mjk2OGNmYiwgMHhiZmZhYWYxYywgMHhmMjlmM2NjYywgMHgxN2Y5MmE1MCwKKwkweDI5MWEwYTNhLCAweDZkZjdiMjlmLCAweDRlM2NlMWFiLCAweDc3NjYxOTcyLCAweGE4ZTRmZTUzLCAweGJjNTA1ZmFlLAorCTB4MTk0MDc5YzAsIDB4NzI3NjJmMzIsIDB4ZDZmMDgzYjYsIDB4YTBjZDhlMWMsIDB4M2Q0YjliMWMsIDB4NDNiNTY3MjQsCisJMHhiNTM4YTJiZiwgMHgwOTQzNTZiNiwgMHg3ZWNjZGFjNCwgMHgwYjQzOWUxMywgMHhlZmU0NjBhZiwgMHgzMmUxZDMxYywKKwkweDhhMTU3YWUxLCAweGMzYmU5OGZjLCAweGE0MTg5ODdmLCAweDBmOGM4YWZkLCAweDkzN2U3ODQ0LCAweGVlMTU2N2I5LAorCTB4M2QxNWI0YzMsIDB4M2Q3MTg3OTcsIDB4Y2Q0ZGI4MGUsIDB4YmM1ZmQ4NjUsIDB4ODcyZGZjOTksIDB4NGZkMjE5NTIsCisJMHhkZGYxNTc2MSwgMHhiODVlYTE1MywgMHhiMGYxNDVjNiwgMHgyOTZlZTdiZSwgMHhjYzJhZmYyNCwgMHhmMzEwY2M3MywKKwkweGYzMzZjYTJjLCAweDlhYTUwZmZlLCAweDliNjk5ZjUwLCAweGQ1NDcwZjk4LCAweDA0ZDU1OWRjLCAweDg3NTA4M2Y3LAorCTB4M2M4YTQ2N2UsIDB4NDUzZjE5NTUsIDB4YTllYTE0M2YsIDB4ZDdlMGVjZjQsIDB4ZmZiNjNmMzAsIDB4MTRiMmQyMWMsCisJMHhlMzQ5MGU3ZSwgMHhiMmU3MTJmZSwgMHhmM2M3MWZiNywgMHhmYzJjM2IzZCwgMHhjMzkxZTc5YywgMHhkZjkzNjYxMywKKwkweGUwYTZhZDZmLCAweGU2ZWU3YzNhLCAweDY2Mzc5NGY5LCAweDQyZTcwYzliLCAweDg0N2ZmMDA2LCAweDFkNDc1NmYyLAorCTB4NmJkNzA1ZmEsIDB4YWZmNjE2MzAsIDB4NjhiZDM5OTksIDB4ZDEzYjNkNmIsIDB4MmQzOGI4YmYsIDB4OTdiYTc5NDgsCisJMHg4YTU1NDViNSwgMHgzZDRlYjk5ZiwgMHhlYzI3YWI1MCwgMHgzZDcwYjY3MywgMHhlZjhmYmNkMywgMHgzNWY3OTNjYiwKKwkweDZlNWZhNjVmLCAweDJkZGEzNmNiLCAweDkyN2ZmNWZkLCAweGZlODNmMmRkLCAweGZkYzZmZmYxLCAweGYzZWUzMzBhLAorCTB4ZTQ5N2VkOTIsIDB4M2IyMGRkN2QsIDB4ZTFiZmE5M2MsIDB4OGY5OTE4ZWMsIDB4MGUzMDNkNTIsIDB4ZDI5ZGE3YjcsCisJMHhmMjFiMGE0ZSwgMHhlMjFkYWE3NSwgMHhkOGNkYTE3YywgMHg1YzIzZTVmZiwgMHhiZjk5NWYzNCwgMHg1ZjUyYjU5MywKKwkweGYxZmE3OTgxLCAweGQ3ZjIzMDFmLCAweDcwYTIzY2M5LCAweDA5ZjdjZjM1LCAweGVlNzQ2YzliLCAweDI5ZGFjYmQwLAorCTB4OGIyNDY4N2YsIDB4ZDNmOTBhMmEsIDB4NmQ3Y2U4N2EsIDB4YzExMWU2MzYsIDB4NDdiMmViNzcsIDB4OTlkYmJmNTEsCisJMHhmMjRhOGQ2ZiwgMHg2ZTEwNTc1MiwgMHg1MDlmZTYzYiwgMHhlYjY0NmFiZSwgMHgzYWU3MWMyMiwgMHhjNzYzOGQwNywKKwkweDMwOGI5M2ZjLCAweDE1YmZjMDg1LCAweDA2ZjRlYmU1LCAweDA1Yzg1ZjFlLCAweDliZjQ4YzdkLCAweGExZDM5YTNiLAorCTB4YTFlNzhlYmQsIDB4OTkxMzNjYzgsIDB4NTBmMTIyMTcsIDB4M2I5YmYwMmQsIDB4Y2ExMTUxNzYsIDB4ZjA0YWI1YzEsCisJMHg5OWFlNzE1MSwgMHg0ZTBkZmZjYiwgMHhlYzE5NWU3MSwgMHg3OWMwY2Y2YiwgMHhmYmM2M2VlNCwgMHhmODk4MzcwZiwKKwkweGFmMzc2NDc5LCAweGY5ZDE4Yzc3LCAweGY4MmZhMDc5LCAweDcyOGViYjM5LCAweDI4MzI3NzllLCAweGFmMDkyNTNmLAorCTB4YzllNTNmMzIsIDB4ZTQxMWUwYjQsIDB4Y2JmM2U0OTcsIDB4ZDYxMjRlOTIsIDB4NmY0N2NlOGYsIDB4ZmFlZGM0M2IsCisJMHhjZDBiMDZlYSwgMHgzNWM5NmZhMywgMHg1YmVjOTdlNCwgMHhmZmE4NjI2MiwgMHg5Y2FkYmJhYiwgMHhkYmM2OTJlZSwKKwkweDUxNjE2NzU2LCAweGQ4OGI1N2VjLCAweGY1Y2E3ZTUxLCAweDE2YmIzMmZmLCAweGZkMTRiNWQ2LCAweDZiNWE0N2JlLAorCTB4MzgwNTNhMmYsIDB4YTAxYWRhM2UsIDB4NzRhZWNmYjIsIDB4ZjlkMjE3YWEsIDB4YTkyOGI5ZDIsIDB4ZjlmMmQ4OWUsCisJMHhlNjBlNWFiNSwgMHgxNDBiYzRkYiwgMHhiN2U3OTkyMCwgMHhlYTkzMzQ3ZSwgMHhiMDc3ZjE5OSwgMHhjZjE2ZWFmZSwKKwkweGMzOTAzNGQ3LCAweDNiZTI2MzdkLCAweGZmZmY3ODE0LCAweGRiYzQ3Zjc5LCAweDE5NzMxNjkxLCAweDg3YTFmNzdiLAorCTB4NWYxZDg2NjYsIDB4OTFmZGRmNDEsIDB4OWM3MWU3MjUsIDB4YzRkM2JkNDEsIDB4YzhjNTU2N2EsIDB4NWRmNDI0NWYsCisJMHg1ZTg3OTcyNSwgMHgyNWVjODU4NywgMHg2NTNmYzhhZiwgMHgxNTFmMjIzNSwgMHg1ZjUwM2IyMywgMHg3MTRlNTM5OSwKKwkweDBmZDMwNzdiLCAweDhmM2RiMGM0LCAweDc2ODJjZjlmLCAweDYzOTVmZmEyLCAweDI2ZGE3ZmI4LCAweDQ5ZTU4MmU4LAorCTB4MTg0ZjU0YmYsIDB4MjJjYWRiZTUsIDB4MmZkZjdkMzcsIDB4MjM1ODBmOGYsIDB4YzdjNjNmZGMsIDB4MGJlOWUzN2YsCisJMHhmMzI1YmUyOCwgMHhlNTczMTk2YSwgMHhmMjgwYjljZiwgMHhmYmY1MGM2YywgMHhhNjFjZTJlYywgMHg3M2M3Y2FlNiwKKwkweGMyY2QyYmVjLCAweDM2ZjUxNWVlLCAweDhiYzUzMDY3LCAweDA0M2U0NGYzLCAweDJiOGRlZTdiLCAweDdjODY1YmJmLAorCTB4ZjdlMGU2NzQsIDB4YmI1Y2EzNDcsIDB4ODJmYjAyY2EsIDB4ZWVkOGU0MjEsIDB4ZmFjNzJlMWMsIDB4MGEzNThlY2MsCisJMHgwY2UzNTc3YywgMHhmYWMyZjA4ZSwgMHg3NzNhOTViZiwgMHhhODI5MWUwNiwgMHg4MmNkMzExYiwgMHhmODU4MTc0NywKKwkweDlhZjExNTUxLCAweDNkYzRlODI5LCAweGFlZTdjMzg3LCAweDc3OTgyODA5LCAweGM3Y2VkMmJhLCAweDdlNmEwY2NkLAorCTB4OWMxMGY3M2EsIDB4NzAwNzVjYTMsIDB4YmNiODU0YWYsIDB4YzlkMjhmODYsIDB4ZDNkNTJhOGUsIDB4YTM2MTFjZjEsCisJMHgwYWFhZDczOCwgMHhlNzQ5NzFiOSwgMHhmNWVkMTUyNiwgMHgzNWJlYjc5ZiwgMHhlMDA2ZDM1NSwgMHg4Nzg4ODVmYiwKKwkweDc4YzhhMmZmLCAweGNiZGNhMjNlLCAweGNlNTk2MmVkLCAweDkwMGJmNTU2LCAweGYwYWQ1NmZlLCAweDEyZjMzNmJjLAorCTB4ZjhlOWNlN2MsIDB4OTU2NWI0Y2EsIDB4NTU3ZGE3OTgsIDB4ZmEyNTRiNmEsIDB4NGYzZDA3NjksIDB4MDk2NWU3ODcsCisJMHhhZjdmMmI3NSwgMHhjMDJmMTZkMSwgMHhlZDBiZTY3MywgMHg4Zjg4NDljMSwgMHg3YmJkZTdjZiwgMHgzYjg3Y2EyNywKKwkweDA3NzhkZjczLCAweDMwZGUyNGYzLCAweGFmOTEzOTBiLCAweDk4ZWVmNTg4LCAweDc5ZWIwNjllLCAweGYyMmRkOGFjLAorCTB4MGY0NDZjM2MsIDB4M2Y3MmM2YzcsIDB4ZGIxZTdmNjQsIDB4ZmFmMjg1MzgsIDB4ZTdlMWNlNjYsIDB4YjE2NWFmNDksCisJMHg5ZWY4MWViNiwgMHgzZWQwMTU5YywgMHhkOTExNzI2MywgMHhkZTQ1MzM5MSwgMHgwMmI3OGNjNSwgMHg5ODE3ZTg2OSwKKwkweDQzNWM0MzcxLCAweDVkOWMzYTM5LCAweGFjZDc5NTc0LCAweGMzZjAyNGY3LCAweDdlYjFiYWQ1LCAweGZlYjFhOTZkLAorCTB4ZmViMTlmMzUsIDB4MWE3ZmM5OGQsIDB4ZDk3ZjU4OWIsIDB4ZjQ4ZDlmZWUsIDB4ZjNjMmJjZjQsIDB4MzA5N2MzM2UsCisJMHg0N2JkZDExNywgMHgzMmZkYTMwOSwgMHg3MTVjOTllMSwgMHgyN2U3OTcwZSwgMHg3N2Q4YWJmZSwgMHg1MTk5MzMzZCwKKwkweGRiM2VkNjdiLCAweDIwMzczYzJlLCAweDY4YWFkN2ZkLCAweGI2NjVlMDlmLCAweGVmN2UwY2MyLCAweGI4YmJlYTAzLAorCTB4M2QxY2YyMjIsIDB4MDc2MWQzMTQsIDB4M2Y3MTc1NmYsIDB4ODE2YmJjMmUsIDB4ZDNjZTBlN2UsIDB4NDZhYTNmODksCisJMHg0ZTkwNTJkYSwgMHg3NjI2MWNiMiwgMHhhNTUyZjIzOSwgMHgyMzlhZWM4ZCwgMHhiOWU0ZWU4MiwgMHgwNThkMmFlYSwKKwkweDg2MDJjZjMwLCAweDFiZTU4MzljLCAweGU4OGJkNzY2LCAweGM4N2YwZWE3LCAweDY5ZGJlNzE4LCAweDhhNWJlNTFhLAorCTB4NDE1YjE4MzEsIDB4NWQwNDg3ZjUsIDB4ZmZmMjkxMWYsIDB4NTc1ODlhMDcsIDB4ZWYxODQwZTAsIDB4MWU1Y2ZhZWMsCisJMHg3NDY1MmU4NywgMHg2NTZjZmU1ZSwgMHhkZDI1ZDUwOSwgMHhhZTAxZmU0YiwgMHg0MWExOGQxZSwgMHhlOTI3ZjQ0NSwKKwkweDBiNGVhN2Y5LCAweGJmN2E4M2QxLCAweDM0YmJmODQ5LCAweGVhNTkwMjEzLCAweGI4ODA3MDkyLCAweGM5M2Q0MmM5LAorCTB4NzE5NWZlYzgsIDB4NmM5YjdjYmEsIDB4N2VmOGZjZDcsIDB4N2U3NTkzMGUsIDB4ZDQ0YjJiZGUsIDB4YWE2YTI5YTEsCisJMHhmMmZjZmQ0MCwgMHgzYjdmNDhlZiwgMHg4NzljNDE3YywgMHhlNzQ2Y2QyNSwgMHhhM2UzODY5MywgMHg3NjdmODI1ZCwKKwkweDRiOTFmMTI1LCAweGU4Zjg5YWJiLCAweDNiOTJjZWE3LCAweDljNmJlZTA4LCAweGE1YWZkNDJlLCAweDBjYmE5NzMwLAorCTB4MmEyM2ZkMmEsIDB4NGZjZTNiZjAsIDB4NDc0ZjhhNmEsIDB4ZWQ2NmY5YmUsIDB4ODI1YWE5ZjEsIDB4OWJlZjg2OWMsCisJMHhjNmE5ZjdmOCwgMHg3ZGYwYmRlZiwgMHg2OWY3YzI0NiwgMHhlMGQ5N2RmMCwgMHg2ZDNiNzdlZiwgMHhlYzQ0ZDM1MSwKKwkweDIxZWY0YWE3LCAweGM5YTUxODdkLCAweGFkZTYyMzVlLCAweGFlZWZmMTY2LCAweGEzYjE3OTExLCAweGQ0N2RlMGQzLAorCTB4M2NjNmE1NWIsIDB4NjdkOTM2MTMsIDB4YTRlNGZjYTMsIDB4OTRhYjkyYmMsIDB4NTdjODM5ZTUsIDB4YmE5YWRiNTcsCisJMHg5N2JmYTA3YiwgMHg2NTVlM2FjNSwgMHg4MmU2N2UwYSwgMHgyZGNmMmZlNywgMHg1N2ZjOGEzOSwgMHg5ODY4OGI2YiwKKwkweDhiMmQ3N2Q3LCAweGVkYzVjMmFlLCAweGM0N2MxNjliLCAweGUxZjI0YzVkLCAweDY2OTNlNDU5LCAweDAzMzYzODM1LAorCTB4ZWRjYzY3ZWEsIDB4MjIyZDZmYTMsIDB4OWJjZTc5ZmUsIDB4NDk1ZTE4MzksIDB4YTQ1ZTEyMjcsIDB4NDkzZmE0MTcsCisJMHhmNzcwYzkyZiwgMHgzYmQ3ZTdhZiwgMHgzYjZmMTEyOSwgMHg0YTU4NTFkOCwgMHgxNmIxOGFiYiwgMHhlN2FkNzc5ZSwKKwkweDg4MGJjYzBmLCAweDY1YWQ4NjY4LCAweDJmMzVkYTM0LCAweGRjOTMwOTJmLCAweDAwZmRjYWI4LCAweDljYmQ2NWU1LAorCTB4OTQ0ZmZjMWIsIDB4N2UxNzc1NjcsIDB4Y2JlMWEwNTIsIDB4NzE2Mzc5ZGUsIDB4YzZmMDAwZGYsIDB4OTVlMTM3ZmUsCisJMHhiY2EwZTNmNiwgMHg4NjJkMGZlMywgMHhmOGUxZTNiYywgMHg0MjFiOGU0YywgMHhmY2M1NTBiYiwgMHg0Nzk0OWRlNCwKKwkweGYwZTM5YTFjLCAweDEwOTE3OWUxLCAweDUyNTZjMWU2LCAweGMyZWM4YWZjLCAweDZmNmUxNGU3LCAweGIwOWIxNTg3LAorCTB4M2YzN2NlZTMsIDB4YWY3YjcxOTksIDB4MzNkZWRmYTksIDB4OTQ3N2Q3ZTQsIDB4NmUzYmI4NzMsIDB4MzVmZGU1ZDUsCisJMHhjNzljNWVkYywgMHg0YjM5M2RiOCwgMHg1MTc0MmZiNCwgMHhlZmMzY2NiYiwgMHg4NmZkYzlkOCwgMHhkNThmNGYxZCwKKwkweDAzYjA1ZmIxLCAweGU5NjA3ZWM5LCAweDMyMmNjZWMyLCAweDdmODM5YmRlLCAweGRlNDBkNjRhLCAweGI3MzM2NmY4LAorCTB4N2M5OWI3NWYsIDB4NjJlNzk0NTUsIDB4OWNlMmY3ZTEsIDB4MzE4Y2ZlOTEsIDB4ZmY2NGZjN2MsIDB4NjI4ZTZlNjIsCisJMHhkN2Y3NGY4OCwgMHhjNWZlNGVmZiwgMHgzZjMwNzc1MiwgMHg1ODViZmEwNywgMHg0YzUwMmZlNiwgMHgzM2Y3MTcwOCwKKwkweDFjM2U3ZDAyLCAweGQ2ZmU5ODYzLCAweGZlZWQxYTMyLCAweDliY2I1OWFiLCAweGNmYTI2MmE2LCAweGNmYTQxY2UyLAorCTB4YzU5ZjQwMDksIDB4OWQxY2ZhMDYsIDB4MjRlNWM5OTMsIDB4YjNlOTI1YzIsIDB4OTM0YjJlOWYsIDB4MTc4MmNhZjMsCisJMHhlZTFkM2Y2MCwgMHhhMzM1NWZjZSwgMHhmNTZkZGNiZCwgMHg5ZTVhYmNmMSwgMHgwNzJjOTgyNywgMHhhMDU5ZTAxMiwKKwkweGFhM2M3ODcxLCAweGMyNGNmMDRhLCAweDM5ZTE5MzcxLCAweGE0NDkzZTFmLCAweGY5YzY2Y2NmLCAweGM5N2UzODYxLAorCTB4NTlkODU4ZDYsIDB4MmYyZmMwMzEsIDB4MDgzNTgzZGIsIDB4YWNkZjNmN2YsIDB4NDFhM2ZiZTIsIDB4YTIwZWFiNzAsCisJMHhlNDZmZWJhZiwgMHgyYTUwOTQ3MSwgMHg0ZjE4NDdkNywgMHg2N2YxODFjOSwgMHg1ZmFmZjE4OSwgMHhmYWYwZTljYiwKKwkweGRkMTBiMTdmLCAweDg0NTFmODAyLCAweDlmNjhiNjdmLCAweDc5NDRkZGQ1LCAweGNjNmJiMzU0LCAweDAwZWQxMjI3LAorCTB4MTNhOWI3MTksIDB4OTRmMWNkZWYsIDB4ZTYwNTkxOWIsIDB4NGJjNjM0Y2MsIDB4ZjFlMjZlZWEsIDB4OGI1OGViOWEsCisJMHg3ZWJkZTExOSwgMHgzYTlmYjE4ZSwgMHhjYzEzZmViNiwgMHhjOWJiYWIwYiwgMHhkMzk4M2NmOCwgMHg4YjE5NjcxZiwKKwkweGMyYTM5NjcxLCAweGZjMDdkMDhmLCAweGQzZjRmYzgyLCAweGRmMGZjNWNjLCAweGY2M2JmNDBhLCAweGU4MTU2NTg3LAorCTB4NmIzMmJhNzcsIDB4NTA0ZGVlYzksIDB4ZjFiNmYxZmYsIDB4ZDY2OWZmNTQsIDB4MDZmM2JmYjcsIDB4YTEyOGVmYjYsCisJMHhiOTI2MGQ3YSwgMHhmOTA4M2VlMSwgMHhkNTRkZjUxMSwgMHhjMTE0ZDc4ZCwgMHhhMmVkNDdiOCwgMHgzOWY5NWJkZiwKKwkweGIwNGE2ZjAyLCAweGU3YmMxNjYzLCAweGYyOGEzODlkLCAweGJjODQ2YjIxLCAweGRiYzg1YmU5LCAweGM5ZDBiZGFmLAorCTB4ZDY2ZjVlNTMsIDB4OTM1OGRmYzksIDB4NzlmNWVmYzIsIDB4MmJiZmZjYWQsIDB4NjZiNzNmMzAsIDB4M2M1N2E4OTQsCisJMHg0N2ViMWUzZiwgMHgxZWU4NGY5NSwgMHg4NzI2ZGU4MCwgMHhjZTZmZjg4NiwgMHgwOWRhN2VlNSwgMHgxYzc0NGFhNSwKKwkweDQzMjZhNWUwLCAweGU3YzRkZmY0LCAweGQxZTJiMzM1LCAweDlhOGZlNDVjLCAweDA0Y2ZkZTZhLCAweGM1YjViNGRmLAorCTB4MmNlOTllZjgsIDB4NmQ3MzdiZDUsIDB4MjUwZjI4NjksIDB4NzBlN2I1OWYsIDB4YTllZDJjZmQsIDB4NjdmYmUwODAsCisJMHg4ZGI2ZWZmYywgMHgzNjAzN2U4MCwgMHgwYzUzODdjNSwgMHhkZjk3N2U0YywgMHhlN2UwZTU1ZiwgMHgyMmZlMDJjYiwKKwkweGQzYmNmZDBkLCAweGIzN2YzY2ZkLCAweDA3MjJiNmRhLCAweDBmNWZlN2Y3LCAweDVlNzEyYTVhLCAweDUxZjk1YjJlLAorCTB4MjdkMjZmYjQsIDB4Zjk0NDliNGYsIDB4NDY2NjM2YmUsIDB4ZGY3NDA3M2QsIDB4ZjE3ODdjNDEsIDB4NDg2OTA1MjcsCisJMHhkZDIzMGU2YywgMHgyNTlhYmE0YiwgMHg0OGM2YmRlOSwgMHhkYmFmYzBkNywgMHg1Y2JmMzI3MiwgMHhkYWU4MWI1ZSwKKwkweGMzZDc0MDNlLCAweGQ3MDBiOWQ5LCAweGE5YWUwOThmLCAweDNmZDVmZDQ2LCAweDI2NWYxMjRlLCAweGJjOWMzYjhmLAorCTB4Nzk0NGJmYzAsIDB4Mjc1ZjAwM2EsIDB4NjYxZTVmZjEsIDB4N2YyMzE1YzUsIDB4ZWNmZTRiYjYsIDB4YTYyYzM4NDIsCisJMHgyOWIzOWQxOCwgMHhlOWUzN2M1NCwgMHg3NjMwZWE2MCwgMHgxZjJmODQ4NiwgMHg4MzE1YWU3ZCwgMHg0ZDNmYzJlMSwKKwkweGNmZmM3ZmRhLCAweDNjZjJmYjgzLCAweGY5ZGYwZWQxLCAweDVjMDBjNjU5LCAweDI0MmJmZTMwLCAweDc4NzE1NzBmLAorCTB4NWMyZDJiYjYsIDB4NWM3YjA4YmUsIDB4ZTU5YmU3ZWUsIDB4ZjM4Y2JiN2MsIDB4ZTdlMTRhYWQsIDB4NzdlOGJkZGUsCisJMHhmOTdiZGYyMSwgMHhjZmI4N2VmOCwgMHg3Y2U0MWQ2MywgMHhjZjZmNDI0MiwgMHgxNjljMDViMSwgMHhlZTc1ZGI5OCwKKwkweDFiOWZhMjdhLCAweGI0NjlmODU4LCAweDgzMzk5NjhmLCAweDc0ZjExN2ZmLCAweDg0M2UxNGM0LCAweGNjODU5Y2ZiLAorCTB4YTA1N2YxNGYsIDB4MTI3Mjc3OGYsIDB4NmYwOTBkZWMsIDB4ODc5YTllMzIsIDB4ZjNjOWE3OTEsIDB4YzBjZmM2NDksCisJMHhiZWM4YzViYSwgMHhmYWQ4ZTc5MywgMHhmMzllN2JlNywgMHhjNzg5NzY5NCwgMHg2NTc3ZjQ2MiwgMHg4NjU0ZmYwOCwKKwkweDQ1MjE0N2YwLCAweGM5OWU3ZWExLCAweDJmYjg3YzUyLCAweGM4NTNlZTk4LCAweDZjYzk5OGJlLCAweGQ2Njc5NzI0LAorCTB4ZTE5ZTdkNzIsIDB4ZDQ4N2Y2ZTAsIDB4YzdmMWMzZmIsIDB4OTIzMzk3MTUsIDB4OTkxYjMzNTcsIDB4ZTdjNzM3MzgsCisJMHhkOTg3NGM5NSwgMHgyYzBlZTdhYywgMHhhZGY0ZGE2NywgMHhkMWVmOTAwYiwgMHhlMDA3ZDE0ZSwgMHg3ZWUwZTk5ZiwKKwkweDIxNWNlY2VjLCAweDI0Y2Y1ODNmLCAweGY1ZmRmM2Q0LCAweDY3YmU3YTQxLCAweGU0OWZjYTEyLCAweDllNjZjOWZiLAorCTB4OGNkMmZlZTMsIDB4OTljYThjNzMsIDB4YTEyNzc3YmUsIDB4ZWRhOGNmOWUsIDB4Y2M3Mjg0OTksIDB4NzM3YmYyZTksCisJMHgxZmRjMGQyNywgMHhkMWM3OGM5OCwgMHg4NzE5MjZiOSwgMHg0Y2ZhMmYzYiwgMHgzZjE5MWZlNiwgMHhjNzA2NzM2YiwKKwkweGNmZDIzOGUyLCAweDU1ODk0NjcxLCAweDFlMTU0YmUxLCAweDU4M2ZlODk3LCAweDc2ZWM3NDg0LCAweGZmNDM0ZDE1LAorCTB4ZTgxYjFjYzUsIDB4Y2JiYTE4MjMsIDB4MTczMGJjMTUsIDB4MDA4ZmVkZTksIDB4ZjEwZTZlMGYsIDB4NzVlM2MwNTUsCisJMHgzNDdiYzEzNSwgMHhlMWUxMmMzZSwgMHgyYjg3ODEzNiwgMHhmYjNkNWU4NSwgMHg4OWYxNGFiMCwgMHg0M2U5N2YxYSwKKwkweGJkMDg0MjE4LCAweGUyMTE2NjYyLCAweDQ1ZTkzZjU3LCAweDU5ZDhiZjc5LCAweGY4YTJhMDMwLCAweGIyNGU2M2ZlLAorCTB4NWFiZjE2MzMsIDB4YjE5NWYxNGYsIDB4NGY0YzRjNWIsIDB4MjJlMzkzZDAsIDB4MzI3Yjg2MjksIDB4MzBjYmVjMjYsCisJMHhjY2U4MmZkNCwgMHg2MTdmYmMzNSwgMHg3YjQzMjhkNywgMHhhMWJjNzQ3OSwgMHgyYTU3YTJmZCwgMHhiMTQ5ZjUwYywKKwkweDJmZjc4NjI5LCAweDUwZGFhYjdlLCAweDFhZTdhNGJmLCAweDNmNTNmYmMzLCAweDgzYTg2ZDk4LCAweGRlNzBkMGM2LAorCTB4ZDg1NTlmN2IsIDB4NjVmNzk4MzYsIDB4YmUxOTZmZjEsIDB4MTliNmNkZmYsIDB4ZjNiYzYwYWYsIDB4YjJmN2Q4YTQsCisJMHgwYTU2M2ZiMCwgMHhlOTIwNTg3OCwgMHg2MzdjZGNmNiwgMHhhYTI1NTE3ZiwgMHhmM2RmMjE1NCwgMHg3OWViMDViZiwKKwkweGMwMzRmNmJlLCAweDBiYmY2MjVjLCAweGM0ZjY4ZGRiLCAweDdhYzYyZGUyLCAweDU1YTZmNzQzLCAweGU3MDcxYjI4LAorCTB4ZTM1NGI0NzksIDB4NzljOTM5NTUsIDB4NzlhZTM1MWUsIDB4NTBjZmE0MjYsIDB4ZTMxN2Q4MmUsIDB4NjJlYzExMTAsCisJMHg4ZTFiMzNjYywgMHhmZDZjYmZjZiwgMHgyZmU4ZDg0YiwgMHhmZWZlN2Y1YiwgMHhmNWQ5MGIxNiwgMHhhYTdkNWY4YiwKKwkweGFjOGYwYTJhLCAweGRiZmFlMzVlLCAweGE3ZmFlMzc1LCAweGRmZDcxYTk2LCAweDdmYWUzM2U5LCAweGZhZTM2NGZhLAorCTB4ZjVjNmZkYmIsIDB4NWM2YjUxMWYsIDB4NzE4MGNjZmYsIDB4OGNlYmIzZmQsIDB4MzQxMzlmZWIsIDB4MDZjOGZmYWUsCisJMHhiN2U3ZmFlMywgMHg3MGJiZDcxOCwgMHg4YjNkNzE5OSwgMHhlZDBkNGJjMiwgMHhlNTJmZWJjOSwgMHhkYjlhZjE2NSwKKwkweDdhMDFlZjhjLCAweDIwNzQwOTRkLCAweGEwNDE2OGU5LCAweGM2NzdmMjgxLCAweDMwY2Y3ZmI0LCAweGMwM2QzMjRlLAorCTB4Zjc0NGQxYmUsIDB4NmUzZWMxYmYsIDB4ZjRmZTcyOWIsIDB4ZmM4YWQyMDEsIDB4ZjFmNGM5YmQsIDB4ZWVjMmI5NmYsCisJMHhmYTAxNzQxNCwgMHgwYWU1MTNhOCwgMHg2MTRmMTdkOCwgMHhkODU2Mzc1OSwgMHhlZGExODFmYiwgMHgxMmJmMjkwYiwKKwkweGJlZTI3OWY1LCAweDM2YjkzODc4LCAweDdkODk0ZjQ4LCAweDBhN2FiMGYyLCAweDgxZjZjOWY3LCAweGY0NzBmMjdkLAorCTB4OGZiMzFjN2IsIDB4NGY1YThlYzgsIDB4NWQxYmE1N2UsIDB4ZjE0ZjhlMWMsIDB4Y2ZlODI1ZDEsIDB4ZjJmNDgyN2QsCisJMHgzMjcwMDA3MSwgMHhlNzFjN2JjMCwgMHg0ZjFmZTMwMywgMHg4ZGZlNDA5OSwgMHhkOTI4YjM2ZiwgMHgxOTgyZmZlZCwKKwkweGNkZDgzMDk2LCAweGUyYWRhODk4LCAweDk1M2E0ZjNkLCAweDJmNmY0MmY1LCAweDg1OGZmZTE0LCAweGI5NWJlMGY2LAorCTB4OTg1MWVmZGMsIDB4YzVlNmUzODUsIDB4N2IxNGJjZTgsIDB4ZGQ3OWM0NmQsIDB4ZTMwMjcxMjMsIDB4NGY3ODIwMDgsCisJMHhjYTAxMWM2MSwgMHg5YmE3M2I1ZSwgMHhmOGFlNTJkMywgMHhjMDQ5ZWU5OSwgMHg0YWU5ZmNlNywgMHg2YWI1ZDkyOSwKKwkweGNkM2RlNTBhLCAweGZkMjE0MWJmLCAweDc4N2ZmZjM0LCAweDJjZmExNzE5LCAweDRjYjk1Y2I5LCAweGQ4NWRiM2UyLAorCTB4NDgyZWRjMDMsIDB4MTQ5YWMzYzcsIDB4MDc0MTYyNzcsIDB4YzJlN2NkZTEsIDB4YjhmZTg2NzUsIDB4ZmM0N2ZmMWYsCisJMHgwYWUzY2Q3YywgMHhkMDY3MjZkMywgMHg2NzVhMzMzMSwgMHgwZjNjNmY1YywgMHg5YzM4ZGFhNSwgMHgwZDk5OWI4ZiwKKwkweDA1ODEzOWYxLCAweDU3YmMwZWM5LCAweGZiYzZkMTAzLCAweDdiZmJjZjFiLCAweGQzZmExNDYzLCAweDdjZmZmNTU0LAorCTB4Y2ZlMzA2YWQsIDB4OWZmYTJlMzgsIDB4ZmU4NjNlMWQsIDB4NjNlYmQ1NjYsIDB4ZjQxYWJmZTgsIDB4YmExNGMwZmMsCisJMHhjZWJmYTMyNCwgMHg4N2Y4N2JmOCwgMHhjMjdlOTE3OCwgMHhiYjJmNDEzYywgMHhiZGZiOGM5ZCwgMHgyMzg2ZmM5MiwKKwkweDk4YzA5MDU1LCAweGU3ZTY2M2JmLCAweDE2ZGFiZGMzLCAweGU2M2M5ZmJlLCAweDk4NGQ2MzViLCAweDM3NjY2MzM3LAorCTB4MzJmYmU3OWUsIDB4NmRmMzA4N2IsIDB4YzdlNDI3NGYsIDB4NzkwY2JhYzMsIDB4M2NiNGU5OGYsIDB4YjY1N2VmYWUsCisJMHg3MTg2NWMzNiwgMHgwNzExNWVhMiwgMHg3ODM1YTdiYiwgMHhhYWI3YWUxOSwgMHgwZTJmMjhmOSwgMHgyNzcyNTdlZiwKKwkweDQwZjE2ZjdjLCAweDZhOWYwMjdiLCAweGRkNDMwNjhlLCAweDVlMTAwOGVjLCAweDEwYjZiNTU2LCAweDNkYzU5OGRkLAorCTB4NmVmM2FiNTAsIDB4ZmMxMzA1NzMsIDB4MTQ4ZTE3MTIsIDB4Y2MyZDg2ZjYsIDB4OTg0YzU5NWMsIDB4YzFmN2YwYzYsCisJMHg1NWYzODY3NCwgMHhjNGU5ZGE1ZCwgMHgwYmQ1YTg3ZCwgMHgyYmNhMjVmZCwgMHhmYTI1OTBhZCwgMHhiNmI0ZDdhZCwKKwkweDk0YWJkYzEwLCAweGIzM2IxMDYwLCAweDNiNTE2NjhlLCAweGUxYWFkYmUwLCAweGJlNzg1NDU5LCAweDY3OTIyYWY1LAorCTB4M2U2ZGU3MTYsIDB4Mzg2N2Y3YmMsIDB4ZGFiZDU5ZmMsIDB4Yzg3Mjg5ZTcsIDB4ODcyOGQyM2YsIDB4NWRiNTZmZWUsCisJMHhkOTVhZjg4ZSwgMHg5M2M2OGNiYSwgMHg3NTZmNmI3OCwgMHg4ZGY1OGU1ZCwgMHhiZWQxNWVhZCwgMHhiNTRkZGE4MiwKKwkweDcxZjQ4MmJhLCAweDg2MjE2ODFhLCAweGM3YWQxNjcxLCAweGIwM2Q3MTg5LCAweDAzYzYxOTMzLCAweDA0NWI1ZWNkLAorCTB4ZTFlYWM4OTksIDB4MDVhM2IyZjAsIDB4NWQ3MzFmNDQsIDB4OGRmNDA2MWMsIDB4YmM3ZDAzZTUsIDB4ZmI0Y2NjYjMsCisJMHgxZGYzZGJkMywgMHhhZmVkZmVmNCwgMHgwZmQxNzk4ZiwgMHgxZTAxNjA3YywgMHhmOThhZmY1MSwgMHhmMDIzOGZmNCwKKwkweDg4NzIxMTY3LCAweGYyMDBjMTY5LCAweDIzNTcyNTk1LCAweDZiODY3NDdmLCAweGRmZTNhZDM2LCAweGJiYzQ5ZmRhLAorCTB4MWYyOGNlYzUsIDB4MjBlZjkyZDQsIDB4ZTE3Y2ViYmIsIDB4ZjcxNDhkMGMsIDB4MjdiYzA5NTAsIDB4NDRmMDBmZTMsCisJMHg4MTc2ZjQ3MiwgMHhlMmVmZGJhNywgMHhlZmRiYmU3ZSwgMHhjZWM3OTQ2MCwgMHhkNTVmYzE5NiwgMHgxNDhkNWQwMCwKKwkweDA1OWIyNWYyLCAweDA1NmY2Y2E4LCAweGViODI1MmMxLCAweDBiNDE2MzY1LCAweDQ5ZDY3NWU4LCAweGJmZDFkYjJmLAorCTB4Y2Q3ZWVkODMsIDB4NGRlYWExOGQsIDB4NTg1OTllMzUsIDB4YWE3YzljNmUsIDB4YmVmMWQ5MWQsIDB4NjE4YjNmNGIsCisJMHhjNDc0YmU4OSwgMHg0NTgxYWI5NywgMHhjNTFmY2NmMCwgMHgxZDc4M2Q4ZSwgMHg4OWE3YWYzNSwgMHg1ZTNhYjRmNiwKKwkweGU5ZWQxNzRmLCAweGY3Y2Y1ZTAxLCAweDIwZDRhOTNmLCAweDk3ZjE0OTYwLCAweGQ1YzY0NzdjLCAweDJkYmU1MWEzLAorCTB4YjI3Y2ZjNjAsIDB4M2I2MGU3YjgsIDB4OTFjMmYyMTMsIDB4ZGIwNmFiMzEsIDB4YmU3NDYyNmYsIDB4NTBmZmI2NDAsCisJMHg0ZTM4ZTdiNCwgMHgzOTQ2MjlhYywgMHhmZGY4YzczYywgMHg2Yzg3ODE1NiwgMHhlOWY2ODljNywgMHhiNjMxOWYxNCwKKwkweGE2NGFmOGNiLCAweGY0MmJlY2UzLCAweGZkYjE5OTdkLCAweGQzYmRmMTQxLCAweDFkMzYzNjcxLCAweGM3MWI0N2RiLAorCTB4NTNkYTIwZGYsIDB4MDhlZjNjMWQsIDB4NDczZjIxYzQsIDB4MTVlZmRhMmYsIDB4Yzc2Yzc2ZWQsIDB4ZWQ4ZDRiZjEsCisJMHgyYmY4YzU2YiwgMHg0M2FkMDA5NSwgMHhmODg5OWYzZiwgMHg5ZDU2OGVlNCwgMHhmNjdjYzllYSwgMHg3ZTBjYzhlYSwKKwkweDk5ZjA1OThlLCAweGYyMWIxOTZiLCAweDIzYWJmY2RjLCAweDlhNGNiZTc5LCAweDBmZjdlM2RlLCAweDdiNjUwZjIxLAorCTB4YjhhMzRiODYsIDB4MTBiNWVhYWYsIDB4NDIxZDU5MWQsIDB4ZWMzZTA4OGUsIDB4OGI0YTIzOTcsIDB4ZjcxNzEzOGYsCisJMHgzZDE5N2Y5NywgMHg4ZTdlZTEwMywgMHhmZTAwYWNmMiwgMHhiZWYzOWU5MCwgMHgwNGMxNjI2MywgMHg5OGRiOTY3OSwKKwkweGVmMDk4MmMyLCAweDE4NjQxNzdiLCAweGU1Mzc1OWVhLCAweGNjZjdkZTFhLCAweDc3Njg2NTE5LCAweGI0Mzc4ZTU0LAorCTB4ZjEzZTU4YjMsIDB4YWU4MjZkYzcsIDB4MGMyYWNhNTIsIDB4MDJiZWYyZWQsIDB4OTIzZTczYTYsIDB4ZjQ3OWI1NzYsCisJMHg2NzdiYzMxNCwgMHhhNDc0ZjU0YiwgMHhjYjU3ZDNlZCwgMHgzNjdjYWJmYiwgMHgzOWI3MGI5NCwgMHgxZjIzNjU0NywKKwkweDMyNzVhNGZlLCAweGVmMjBkZjFhLCAweDg5NzRhMjZjLCAweGM5NDc0YmQyLCAweGEyZWFiNjU2LCAweGM3ZjU0YTVlLAorCTB4N2FhZjNjZGMsIDB4ZDc4ZmFiNjUsIDB4NmY5ZDE4OGIsIDB4NGI1YWQ5NWUsIDB4MmY4MWM3ZjUsIDB4NTZkN2ZjYjEsCisJMHhhMDdiOTUzZiwgMHhmYjBlMTYwZSwgMHg0M2FmZjQxMSwgMHg3ZmExM2IzZiwgMHhmZDAyM2ZhYywgMHhmYTFkYjk2MywKKwkweGQwODdmMmM3LCAweDg1NmZiNjNmLCAweDEwZmViMTdlLCAweDgzZTU4NWMwLCAweDdmM2UwZmQwLCAweGZhYzdmYTAwLAorCTB4ZDUwMGQ2YTYsIDB4YTNhZDZiZWYsIDB4MjBkNjg2ZmEsIDB4MzZiNmY3OTUsIDB4YWRiNWYzZDAsIDB4ZGQ1ZjU0MmQsCisJMHg3YmNhOGNiYSwgMHhhZTU0YzM1YSwgMHhlZDQzNWQ2YywgMHgxZjM3YTExNiwgMHgxZjFmZTcxMywgMHg3ZGNmYzY5YiwKKwkweDQ2N2ZhZjI3LCAweGVlZDVmMjllLCAweDQ1MDRhOGJiLCAweDkzYzg2NTVlLCAweDdkYzNjOGM4LCAweDJmMzFhNzc1LAorCTB4NzA0N2YxMTAsIDB4OTMxZTM5ZDgsIDB4ZTAyYjE4ZTEsIDB4MmI2MmNmMTgsIDB4YTBkY2I5NTIsIDB4MmU5OGViMzgsCisJMHhjMGE5ZGRkZiwgMHhmODViMjNhNywgMHhjNTc1MTdiYSwgMHg4MWE3M2RhOSwgMHhjYzU2Mzc4ZiwgMHgyY2MyNzk5MywKKwkweGVmMWY4YWFmLCAweDk1N2FmN2M1LCAweDhmMmE3NTU4LCAweDgzMWY5MzM3LCAweDU1M2YwMTc5LCAweDkxMzNkY2UyLAorCTB4NzA4NGM0NzksIDB4N2Y0MTkzNjksIDB4MWZiM2NjMjcsIDB4MjcwZTZlNWYsIDB4NzgyODZkZTIsIDB4N2M3OGYyMmIsCisJMHhlNGVjYWQ0MywgMHhiNmQ0OWJmNywgMHg1MmNkOTE0NywgMHhiZjc0MmRmYywgMHgxMDJlYWQ4OSwgMHgwNGY0YTBkNSwKKwkweGMyNGY3NDgyLCAweDYwMzM3M2Y4LCAweGVkNzIwNTkzLCAweDg3NGNlNWRjLCAweGI4ZDFhZjMyLCAweDUwNWRjYWZmLAorCTB4YThlN2Q4NjEsIDB4ZmQzMjM2ZTcsIDB4Y2NiN2U4MjIsIDB4MTk0YTRmYjgsIDB4M2JlMTliN2QsIDB4MGNmN2RlNWIsCisJMHhkZGNmMTZlZCwgMHhiN2Y5ZjY4NiwgMHgyMmYyYWQxNCwgMHg4YTMyNDczZSwgMHhhZmQ3NTkzYiwgMHhkNzAwMzk2MCwKKwkweDA0NGQ4ZWMyLCAweGJkZTA1MDU3LCAweGZkZjlkMTU3LCAweGVmYzVmYmVkLCAweGZmZmIwODQ0LCAweDJmODEyZWM3LAorCTB4ZDdkYTdhZGIsIDB4NmFmMzc1OGUsIDB4ODRkODdhNDksIDB4YTdlM2U3ZmEsIDB4ZWU4ZTQ5ZDIsIDB4ZmU0NGM0N2QsCisJMHg2MjJjNzFlZCwgMHgwMTMzNzk0MiwgMHhiZjZjNDhjYywgMHg1NjcyNmYwMCwgMHgxNTFjY2FlOSwgMHg1NzRjZTVlYiwKKwkweDhiMTE3ZWIxLCAweGVjMDhiZWQzLCAweDE3YTQzYWZmLCAweGIxMWZmZmIwLCAweDdlNGNmZDQzLCAweGJmM2NjN2YwLAorCTB4YmE3YTRhMmIsIDB4ODk2N2FjNDQsIDB4ZDE2ZDA3ZGMsIDB4NzNjM2ZkOTIsIDB4NjM1ZmM4ZjMsIDB4MjZkNjA3M2MsCisJMHhkYzJiMDFmNiwgMHhlZjE4ZDk1NSwgMHhmZjI2MWRlZCwgMHhkNmZkZTljZSwgMHgxZWIwMDVkNCwgMHgyYTNhOWNjZSwKKwkweGJhMGRmM2U1LCAweGQxNzNjODY5LCAweGJmMmFiZWNiLCAweDYyM2QwMTZjLCAweDA4NjU5N2U0LCAweDlmY2E5OWZmLAorCTB4YWFiYmExNjcsIDB4Zjg5Yzc0NzksIDB4ZTUyY2NkYTYsIDB4NzI4ZTllOTgsIDB4NGJlZWEwNmMsIDB4M2JhMmJiMjcsCisJMHg4OWEzZjA4NywgMHgxYWRiZDlmNSwgMHgzOTAwZmNhNCwgMHhkMzc3ZWQ0ZiwgMHg1NjBmOTg1YywgMHhmNzRmZjIyMiwKKwkweGI1M2FkZWI1LCAweDY2MWYyMTI2LCAweDUyZGZhMGI3LCAweDNkNDVhYjE2LCAweGYyNjY1YTVhLCAweGFmMjdhODQ1LAorCTB4MWY2MTdmYzEsIDB4NzNjN2VlZGQsIDB4ZjMwNTVhZmEsIDB4YzcxZTE4YTEsIDB4YmFiY2U5ZGEsIDB4Nzk0YTg1ZjYsCisJMHg0YjkxZGE0MCwgMHhiMDc2MGU5OCwgMHhlMTY1MTFjMywgMHg5OTdlODFiMiwgMHg0NzdjODNmMCwgMHg1Y2NmZjVjOCwKKwkweGFkMGYzNDM1LCAweDNlNDdkYTQwLCAweDMzZWNkZGQ0LCAweDc0ODYzZjg3LCAweDk5ODc1OWY3LCAweDYzMDllNWIzLAorCTB4OTE4M2E5N2IsIDB4NmE1NDViOWUsIDB4YTYwYWU4ODksIDB4M2RkM2I0MjMsIDB4ODUwZWRhOGIsIDB4MWMyMTE1ZTUsCisJMHg1MGYzYmRkMywgMHgyNTRjMWY4ZiwgMHg1MmRkNGRiYSwgMHg3YmMzNTc0NSwgMHg3OWY1YzE0YywgMHgxZTk5YzcwMCwKKwkweDFhNDlhMGZkLCAweGQzNWVmMDU3LCAweGI0MmVjYjA0LCAweDVlMjJjNzFiLCAweGE1ZDE5YzcwLCAweDYyODVjNzg0LAorCTB4NTc1YWZiYmUsIDB4MTU5ZTllMTAsIDB4ZWZjYjY4ZjMsIDB4ODc4NzNiYzcsIDB4Y2Y3OGZjZjksIDB4ZTkwZWEyZTksCisJMHg3M2NlMzFiZiwgMHgzN2Y1NjU0MywgMHg5NWM2ZGVmMCwgMHg3NGQ4NTUzMSwgMHgzM2FlN2M0NiwgMHg1M2NlMjZjNywKKwkweDM4MDJlMDA2LCAweDU1Mzg0NTlmLCAweGJmZmM5Yjg0LCAweDhmNGQ3ZTdjLCAweGM4MTliZjcwLCAweGJiOGE1YWIxLAorCTB4YzRiMTMyNGUsIDB4YTMyY2FiYjgsIDB4YzhjZGZlNDIsIDB4NGViYzExNzMsIDB4MGJhOWRjZWYsIDB4ZGZhYzRhMmUsCisJMHhiOGZkNzQ0NCwgMHg3NjFmZTdjMiwgMHhjZDJmM2M2YSwgMHhmZDEzZDdlZiwgMHg3ZWU0ZWJjNCwgMHg0ODdmOWM1OSwKKwkweGRmZjZmMDExLCAweGU3OWUzNmUzLCAweDZjNTgzYTYxLCAweDBkMmRlNjBiLCAweDI1ZmUxZmI3LCAweGM0YTRjYTJlLAorCTB4MThlODMwZmQsIDB4NjQ5ZDU3MTgsIDB4NzU5ZjNjYTMsIDB4N2Y0YjhmMzIsIDB4MzM3Y2M3NDMsIDB4OGFmY2YxMmMsCisJMHg2YWU5ZDA0ZCwgMHhlNGFmMzFhNywgMHg3N2I3MWU1YywgMHhlOGY1ODljZSwgMHhjNmJlNzFiMywgMHg1Njc5NjRiOCwKKwkweGRkMTdiZGMyLCAweDkxZmZlNGY1LCAweDZlYmVjYzcxLCAweGZkMmUwZjllLCAweDA5MDQ0YjZiLCAweDc4ZTUxZGY0LAorCTB4YTU1ODdiZTgsIDB4ZWU5MmU1ZjgsIDB4YTE3ZGY5NmIsIDB4N2JhMDFlODcsIDB4MWQyZmExNTYsIDB4YmM1ZWExZTksCisJMHhlOGM2YmY1ZiwgMHgzYmIwNTllZiwgMHgxZjQ1MmFiMCwgMHhjNDVhNTdlYywgMHg0OGQ3ZTRjMiwgMHhmYjI1MjdmNiwKKwkweDI3OWI3ZTkxLCAweDU2M2U2OWY2LCAweDkzY2E3MThlLCAweGE1OGY4YmViLCAweDg4YTY3ZWUwLCAweDkxZGJiOWQxLAorCTB4OGY3NDkzZWEsIDB4ZWRmYjU4MzEsIDB4MmIyOTRmNzgsIDB4MjRmNGY3ZTMsIDB4MDUyNWZiYWYsIDB4M2VmM2MyMTYsCisJMHgxYzYzYWViOSwgMHgzN2Q4NjdlNCwgMHhiZWZmZjM4OSwgMHg3ZDdlY2YxNywgMHg5NmYzZjQwYywgMHg4MWNlMThhZSwKKwkweDA5OWJhNWJjLCAweGFlODFlMzhmLCAweGFjNjRlY2IxLCAweGEwZmJhODc2LCAweDVmNGRmM2IyLCAweGE1YzBiY2VkLAorCTB4NjhkN2RmYzYsIDB4OTYzOWVhZWEsIDB4Y2JiYzkzYWEsIDB4ZmE3ODA3Y2EsIDB4YWQzZWZkOGUsIDB4NGUyN2Y4OGMsCisJMHg1NzUxMDdiZiwgMHhiODQxZTFjNCwgMHg3ZWNiZmNmMSwgMHgxMzczMjdkMywgMHhiZTdjNjBlOSwgMHg3YzgzZWRjNiwKKwkweGJmOTM1N2QzLCAweGNlYjg0NjM1LCAweDc1OTliZDk0LCAweDFjNmI4NzBkLCAweDNkMWJkNWMyLCAweGI3Njg5NTkxLAorCTB4MGZmNmI4NDgsIDB4YTVmYWJmNzMsIDB4OTM0ZjE1NWYsIDB4MDEyMGZhOGQsIDB4MTJmZjUzNGYsIDB4ODY1YmY2OWUsCisJMHhjMDk2Njc4NiwgMHhmMjhlNGZjZiwgMHhiNzA2NDJmYiwgMHhkNWZkNDU3ZiwgMHhjY2Y3ODQ2MSwgMHg1MWViYjE2MywKKwkweGIzYmMwMjNjLCAweDUzZGU3ZjA4LCAweDE1MzMxNDU5LCAweDE0YWNlYmY4LCAweGU0Mjk1OWY0LCAweGE4Y2U4ZjhlLAorCTB4MTdkYmQwYjAsIDB4YTc1ZTdlNTMsIDB4Nzc0M2RiYzYsIDB4NzllMDhhMmUsIDB4MGI4YmRmMDIsIDB4ZTBkZmQxMGEsCisJMHg3YmE1NmUzYywgMHg3OTQ5NDI5ZSwgMHgyZjVjYjIyMiwgMHg1NzNmYjFlNiwgMHhhYjBmMTIxOSwgMHg3OGJjYjlmMywKKwkweGQ0ZjliNWYxLCAweDU5NmZiZGRmLCAweGVkODNjYTE5LCAweDVlZjVkZjIyLCAweGVmMGRhNzU3LCAweGM0Nzg5NWVmLAorCTB4MjE5NDA1N2EsIDB4MmExMTdjNGIsIDB4M2YyYjdiYmEsIDB4MjE4ZWU5YjMsIDB4ZjFmMTMzYzYsIDB4MWJlMjRiZWUsCisJMHg1NzJjOWUzOSwgMHhiYjcyOTdlNCwgMHhlMmFhMzk1NCwgMHgyZWZiODczOSwgMHhkOWVlOTM3ZCwgMHgyMzUyYWZiYSwKKwkweGUzMzdmYjk5LCAweGZlMTI3ZDdmLCAweDdkNjY2ZmEzLCAweDhhY2JkMzlkLCAweDJhYTNmNDdjLCAweDAzN2RhNWVmLAorCTB4ZmUyNTIxZWEsIDB4OWZjNDMyYjMsIDB4MGZmMzQ4MjUsIDB4M2I2NTZkYmQsIDB4NmE3OGMxOTUsIDB4ZTcyYmY0MTQsCisJMHhlMTJmZTcyNywgMHg4MGI2NWU3NiwgMHg3YWUwOTljZSwgMHhjNWFiZTAyMCwgMHhhNDRmNTJmYiwgMHhmMzg3YmQwYiwKKwkweGE5NzEzZDIyLCAweDRjODljZmM2LCAweGVmNWQ2OGQyLCAweGNlODUzYzliLCAweGY5MTdlY2Y1LCAweDJjNGJmMTE0LAorCTB4YzMyZWZlNDMsIDB4Zjc2ZjAyMzMsIDB4MGM0NWZiOWUsIDB4NzcwZGE5ZWYsIDB4MDU1ZWU5OWIsIDB4YmY3OGY1YTYsCisJMHg3YTE0NzQwOSwgMHg5YTdiYTM1ZCwgMHhmMTZhOWU4MSwgMHg1ZjE3YThkZSwgMHhmYjg2OWIzYiwgMHg2NmY5MDNlOCwKKwkweDNlNDBmYjgyLCAweGU3N2Q4Nzk3LCAweDZmM2E1YWQ0LCAweDJlNjdkYWYzLCAweDlmZmU4MTM1LCAweDVkODU1N2NlLAorCTB4MzllMThiMTIsIDB4ZmMxNThkOWEsIDB4ZDg0MzgwZGMsIDB4NGVkNzhlMDEsIDB4OGVmYzIwMzUsIDB4MmFiM2RmYzksCisJMHg0Zjc2N2EwOSwgMHhkYmJlOTViZSwgMHhmOTY3ODk2OCwgMHg0ODc0MGUzMCwgMHhkZmVlNTE2NSwgMHhmYWVmZmJhMSwKKwkweDM4YmEwYmNmLCAweDhmMmI5YTFlLCAweGU4ZTA5ZDkyLCAweDNkZTJmN2U2LCAweDVjMTNhZjlkLCAweDc4NDFmNzA4LAorCTB4MzNlZTMyOWUsIDB4NTdiNjNkNTcsIDB4MDZhMzc4YzIsIDB4ZjhiYTc3YmUsIDB4ZTI0Y2E2N2EsIDB4NzdkY2QwZjcsCisJMHg3ODVkY2ZlOSwgMHhjMmJhNWVlZiwgMHg0YmU4ZmVlOCwgMHgzOTA2Y2MwYSwgMHhkN2M0NWY1ZSwgMHgxNjMyYjNhMSwKKwkweGU1ZmM4NTFiLCAweGI2YWYyOGQyLCAweDBkOWI3YTMzLCAweDE3Yzk3YWVkLCAweGY0YTk0N2EzLCAweDk3OTE2YWRkLAorCTB4Mjk3MjdhYmUsIDB4ZTNhNDk5ZjEsIDB4NTdjMTA1YjksIDB4MDIzNjZlOTEsIDB4NzY0OTNjNWYsIDB4OWQzMDJjNGUsCisJMHhjNzJhZTNmMCwgMHg5NWM3ZTNmYywgMHgzZmI3MWQ1OCwgMHgyZmQ0MmUyYywgMHg4MTkzMjZhNSwgMHgzODBiOGFkZiwKKwkweGVjMTJjOGRkLCAweGVlNzdiMjUyLCAweGY1MmNiNDEwLCAweGM2YzQ1YjdkLCAweGI3ZmZiZjMwLCAweGEzYTU2NmU3LAorCTB4Mjc5NmRhNWQsIDB4MGRiZjNjZWQsIDB4MDk1ZGI1ZjEsIDB4MzhlMTE3YTQsIDB4YmVkMmE1ZmYsIDB4NGVkN2M1ZWYsCisJMHg2ZGI4ZTAzNCwgMHhkYmU0MmYzMCwgMHg1OGVhN2U3YiwgMHg5YjQ5ZjY4ZiwgMHgyYTdjNGZjYiwgMHgyNmRjZDdjNywKKwkweDlmYmMxZWIxLCAweDJiZmYxNmZkLCAweGJiOGM2ZmU4LCAweDQ3NDQ3ZGY5LCAweDQzNjM1Y2E2LCAweDRjZjc4N2ZhLAorCTB4YWQ3YmNmZDgsIDB4ZDgxYTBiZjgsIDB4MDdmOTBkNGYsIDB4Y2Y2NmJhMTYsIDB4YjExNmVmYzAsIDB4NmJiNDJhZTAsCisJMHg4NmE4NzUxNywgMHgxMWVlMTc3YiwgMHhiOWUxNjJmMiwgMHhkODRkMTYxNCwgMHhmYzljMmMxZiwgMHhiNjM3M2EyZCwKKwkweDhiMWE1Y2YwLCAweDhmNzViZDgyLCAweDhmN2QxNzM4LCAweDBhYzQ1NzM4LCAweDQ0M2IzZDM4LCAweGRmZTUxNWU5LAorCTB4MjRiZWY3Y2MsIDB4Y2JmOTk1YmQsIDB4ZGYzOWYzYmQsIDB4YjdlODAyYjMsIDB4MTRiMWU5NDksIDB4YTcxYjEwYzEsCisJMHhlYmNlOWVmYywgMHg2MmVhZDdiYywgMHg3ODA0OTJkMSwgMHgwNDczY2QwNywgMHhkMzhjMjY4YiwgMHgxYjM5ZGVmZiwKKwkweDdkNjA2N2NkLCAweGNjMGVmZDM5LCAweDc4Nzg0MWQ3LCAweDc4NGJkNWFmLCAweDkxZmZiZTFjLCAweGY0MGUzYzA2LAorCTB4Yzc4MGNhM2YsIDB4ZDA5N2ZkYzEsIDB4OTZiNWVmZjgsIDB4MTNmZjQ5N2UsIDB4Mzc1ZmU5ODYsIDB4ZWZkMDNmYzAsCisJMHhmN2I3MWE2OCwgMHhhNzFmZmNjOCwgMHg4OTFkZGYwMiwgMHhmOWVkYmRkZSwgMHgzMzFkZmM0YSwgMHgwMTdlZmQyYiwKKwkweGE2YWNlYWViLCAweDMzOGY4NDczLCAweGU3N2E2NzNhLCAweDgzYmRkZmUxLCAweGVlNzc5YWY5LCAweDhjNzBmOGIyLAorCTB4YWU3YzczM2UsIDB4MzMzZDA4NmYsIDB4NzhjMmI5OWEsIDB4YzcyYzk3OWYsIDB4N2NkMzE0MTcsIDB4YjRkYjlmOTIsCisJMHgzMmYzMGI4OCwgMHgwYjlhYTU2ZCwgMHhjNmQxMWY3ZiwgMHg3MWJiOTE2MiwgMHgyMzY5NTJkZiwgMHg0MmUzMjczOSwKKwkweGU1M2ZkZmIyLCAweDNiM2NmMmE5LCAweDZmNzkwN2M5LCAweDk3OTExMmNiLCAweDVlMDhlYzU3LCAweGQ0YmVlYjgxLAorCTB4MTNmY2RlZDQsIDB4ZDI4M2Y2ZjgsIDB4Y2MzNzNhMzYsIDB4MzNmNjliOTgsIDB4ZTFhMzZlMzIsIDB4YTMxNWJmMmYsCisJMHhmMGMwMzA1ZiwgMHg3YTEzY2RmYywgMHhmNzdlMDY3MCwgMHgxODI3MTA0MywgMHhkODJmNTFjNywgMHhiNWJjYzQxZCwKKwkweGI4ZGY2MjBkLCAweGZhZjMxZWMxLCAweDBkZTZlNDEyLCAweGIzNTdkYTA1LCAweGU4OTNkYTE3LCAweGY3MmZkMjc2LAorCTB4ZGVkZDM5NDYsIDB4MjI3ZTgwNTAsIDB4ZmNjNGY2MzUsIDB4ZWRiN2NjMjIsIDB4ZTk3NmY3MTEsIDB4NTU3NzhhMTYsCisJMHhmZWZiYTMxZSwgMHhmZjdkY2JlNiwgMHg4ZWJjZTQ5YSwgMHhkMWRhMzc3YywgMHg4Njk0Y2UzMiwgMHg2YjY4Nzc3OSwKKwkweGJlZjdlNDZjLCAweDdhZjJhN2Q1LCAweGEwOGM3ZmZkLCAweGZmYjAxMDczLCAweGY5NDMyZDQ5LCAweGZlZTU1ZmIyLAorCTB4M2FkZjExMjAsIDB4NjdkMGU2MmIsIDB4Zjk0MDU4ZGIsIDB4ZTQxZjIyZjcsIDB4NzQ0YmY3NmMsIDB4MzVkOWU0YWYsCisJMHhlYmZkNjg2MywgMHhkZDNlZjg1ZiwgMHg5NzNmYjcwYiwgMHg0M2JlYjFlYiwgMHhmNTYzZDI0ZSwgMHhkZTE1NWY1NiwKKwkweDk3M2ZiODViLCAweDVhOWRhYmRiLCAweGMxMjJhZDM0LCAweDU3OWQ1ZDdlLCAweGUzZjlmMjRkLCAweDg5NGM2MzM1LAorCTB4MGFlZjhmZjEsIDB4ZmE1MWIwNzksIDB4MTU3OGI1MzcsIDB4YjhmOTY3OWUsIDB4ZDIzM2ZhMzIsIDB4ZjRlYzA3YTMsCisJMHg4M2E2NTEzYiwgMHhmYmEyYWJiZiwgMHhlOTVhMzcyZCwgMHgwZmFhMDE3NywgMHg4NzVjZGI4ZSwgMHg4ZDM0YzNmYiwKKwkweDA3NGQ5MWYyLCAweDk5Y2YwNGVkLCAweDJkN2VmYzc1LCAweDVkZTUxNmZjLCAweGY0OTFjMWQzLCAweGE5ZjU1NmZiLAorCTB4NmMyN2NhNzEsIDB4NjA5NWYxNGEsIDB4ZTBmZWFmZGMsIDB4ZmZkN2JhNTQsIDB4MDU3MTg2ZTQsIDB4NjQ0ZWZmMjgsCisJMHhhZjc0MDVlYSwgMHhmNDNjMDZmMSwgMHg2MzQzZjUwOSwgMHgxN2I1ZjNmOSwgMHhlNzU1NzlkMywgMHg1MGUwZDRjNiwKKwkweDhmYTkxMDdlLCAweGRhZWZlZjkyLCAweGRiZGU1YjlmLCAweDY3MTlmODg1LCAweDdkZmNhMWYzLCAweGI4ZjFmMTRmLAorCTB4ZDlmMTJiZWYsIDB4ZjkxNWM1M2EsIDB4ZDc3YWQyZjksIDB4YmM3ZGZhNjksIDB4NmY3NzhlZmEsIDB4NDNkY2Y0NjIsCisJMHg3M2Y3MmI3NCwgMHgwYmQ1ZTNjOSwgMHgxMmRmYjU3ZCwgMHg0YmJmOGI5ZiwgMHhlMDUyYmY1NiwgMHg2MjRlZmM1ZCwKKwkweDdlOWNhOWJkLCAweDdkZTI0ZmFmLCAweGI3M2RkMjYzLCAweDI0ZmQwODRmLCAweDY5YWY5M2NiLCAweGQ4MjA1Zjc0LAorCTB4MWZlODA1MTEsIDB4NGFkODc5M2EsIDB4ZTM3Mjc2NzQsIDB4MmVhZjNhMDQsIDB4OWMwN2FiYzcsIDB4NGYyZjgwYjgsCisJMHg3MTEzZTg2NCwgMHhmMjE2OWY1ZCwgMHhkZjI1N2VhYSwgMHgzMGU3Y2FhNywgMHhlNzdmMGM3ZSwgMHhhNTQ4N2UzMCwKKwkweDU3M2VhZWJjLCAweDkyZTMwZDNjLCAweGVmNTkzZGYyLCAweDRhYjc0ZjlmLCAweDNmYjU5N2JmLCAweDZmNWE0NWY3LAorCTB4ZjQ4NjI3YTAsIDB4NDljMTdhNjQsIDB4ODJmNDNhN2EsIDB4ZTdhZTE3NzUsIDB4OGMyYzk1YzcsIDB4NWJmMGNmZmUsCisJMHg4ZWM3ZjdmYywgMHhmZDkyYjIxYywgMHhlZjljNzdkYywgMHg5ZmRkMDc2ZiwgMHhlMDE3ODhlNiwgMHgxN2ExYTFmZCwKKwkweGViMWM5MjQ2LCAweGUwZWY4ZmNiLCAweGRmOWRiNmY2LCAweGYwNDZmOGFiLCAweGNkZmYxMTYyLCAweGU2MTFmNzExLAorCTB4ZjlmNzlkYTAsIDB4ZWQxNDdiMjEsIDB4OWUyOTI4M2MsIDB4YmRiYjY2MTAsIDB4MmE3MGZjZjQsIDB4OTQwZmZmNDMsCisJMHhjYTYzY2YxNCwgMHhlZWZkMmYwMSwgMHhkZjE3NmIwYywgMHgzYmZiZThjNywgMHg1MTYzODIwYiwgMHgwYzU5ZGYyZSwKKwkweGZiZjAzYmZkLCAweGU3ZGVmNDUzLCAweDUyMTc4MmEzLCAweDVjYjE4YTBjLCAweGY1MmU1ZTMxLCAweGE0MmMxZjliLAorCTB4NWU2N2NhZTcsIDB4ZWQyYTdiZmUsIDB4ZWQ0NjNkYTIsIDB4NjJmMDZiMjEsIDB4OWNhZmM3OWEsIDB4ZjMxMGU3NmMsCisJMHhlZWY3YWFmYywgMHg0MTE4MmQxZCwgMHgwNmUxMjhlYiwgMHg5OGRkOTMzYywgMHgwNWIzOTc4YywgMHgzYjdiZjEyNiwKKwkweDc0YzkxZjFjLCAweDVmOWViZmQ5LCAweDVmZmExZjAyLCAweDIxZjZiY2U4LCAweGM2ZWI4ZWJlLCAweDU5MWNiODU5LAorCTB4NjNlYzgxM2IsIDB4Yzg2Mjk2ZDYsIDB4ODg3MTViOWYsIDB4YmJkMGMzZGYsIDB4ZGNlYjQ5YzEsIDB4ODQzZmY2NjcsCisJMHg4NmZlMjhmYSwgMHhlZDdiZjE5OSwgMHgzZjQwMjJjMCwgMHhmOWExZTRjNSwgMHg0ZjkxMjNlNSwgMHhjZjJkNjRiZiwKKwkweGQxZThmYmIzLCAweDM5ZTYwYmY3LCAweGZiZjI1Y2YwLCAweGQyYzk3Mzg2LCAweGE0OWQwODVmLCAweGUxYzYzZmExLAorCTB4OTdlNmQzZDMsIDB4MjU1ZDdiNzEsIDB4N2FlZmY4ZjgsIDB4ZjRlYjM0NmQsIDB4MGRlMTZiYmIsIDB4NzExZmM4ZTMsCisJMHhhNDFmYTJkMiwgMHg3NzViODdkZiwgMHg0YWU5MDk4MSwgMHg3N2YyMTcyZCwgMHhiYzlmOWYxMywgMHg3YmRlNGIyZiwKKwkweDhhOWY4Yzk1LCAweDdmOTI2MmMyLCAweDMzNzgyYzRkLCAweDgyN2VhMWRlLCAweDYxYzI1OWU5LCAweDkxZmZmNzQ2LAorCTB4Njk4NGRmN2IsIDB4ZTI5ZjlhODgsIDB4ZjQ4NWFjYjYsIDB4ZjY3YmUwYzIsIDB4YmJmMjVmMmMsIDB4ZjViYmZmNmMsCisJMHhmNDJiNWMyYSwgMHhkMzg3OTVlZiwgMHhlMDdlYWY1MCwgMHgzYTQ2ZmJlMiwgMHg1ZDdhOGY3ZCwgMHhjMzZjZjNlNSwKKwkweDgzYWYzMDBmLCAweDRlMTRhNjA1LCAweDg3OTI3NmEyLCAweDVkYmMyODFmLCAweGYzNDFiOWNhLCAweDdlYzE3YTQ3LAorCTB4ZWJlODNkZjAsIDB4N2ZlZTQyOWEsIDB4NzEwY2FlNjMsIDB4YzE2YzJiYzgsIDB4OWZhOTRkM2MsIDB4YzI2NjhhNDIsCisJMHhkY2E3ZjM3MywgMHhlM2QyMWE3YSwgMHgxOWM1YjVhOSwgMHhjNjBmMzAyYiwgMHhkYTI1NjdhZCwgMHg4Y2EzYTFkNSwKKwkweDc4ZWI4YmNlLCAweGY4YzVmOGRmLCAweDg5ZmUzMmZiLCAweDlmZGJmN2U4LCAweDI0M2JmNDYxLCAweGI0ZTRmM2MzLAorCTB4ZWQ4OWI5OWUsIDB4OWViOTBhNzMsIDB4ZjYyODVmOWIsIDB4ZTQ0Yzg1OTksIDB4OGRlMzI2NTcsIDB4YjE2MmZiYWYsCisJMHhmMDc5NmFlZSwgMHgyNjg3ZGE3MiwgMHg0Yjc4YjdiZCwgMHhhNDg3YTBiYSwgMHg3ZmNmZWRlNywgMHgxZWEwZjI5NywKKwkweDQ5MTNkZTM2LCAweGVmMTg1ZmIxLCAweDYxMmM1NzgzLCAweDUzMmM0MmU1LCAweDYxYmRhZjI4LCAweDBkNzM5NzEzLAorCTB4YjkyY2NlYWYsIDB4NWVlOWQ3OGIsIDB4ZWYzYjY5ODUsIDB4NTllM2RmYTEsIDB4MTJjYWViYjAsIDB4YWQxNmU1YzYsCisJMHgwNWM3YTQ4MywgMHhiNDEyZmUwNSwgMHg1NTViZTJlMywgMHhjMzQ1ZjIxNywgMHg1MWUwOTUxNiwgMHg1NmQ3M2VjZCwKKwkweDhiN2E3ZTc4LCAweDA2YmJlYzk5LCAweGJjZTljZjAxLCAweDliYWQxYTYwLCAweGUwMGIzNGM2LCAweDRjMTZiNGZkLAorCTB4YWI3NWZiMjMsIDB4YTRhMWRkZjgsIDB4NmY3YmMwNzksIDB4ZTA0MzE1NmEsIDB4OTlkN2M2YzcsIDB4MDQzYzUzZjAsCisJMHhhMjYxYmMxZCwgMHhiZjgwNWE3NSwgMHhlYzcwODkwYiwgMHg3OWJmYzg1NCwgMHgzMzc4M2YzYSwgMHhmZWMxNGZkNiwKKwkweGFiZTljZjFmLCAweDdkZDA5NjliLCAweDNlZjhjOTM2LCAweDdkMTIwYjZkLCAweDkxZjMxNjJlLCAweDQ3MWU0Y2Y4LAorCTB4ZjEwZmIzZTIsIDB4MmJkMmY2ODksIDB4ODVlZjQ4NTMsIDB4NjI5MTU0MWUsIDB4OWZkZDhiZDksIDB4ZGE3Y2JlZDIsCisJMHg5OWRmMmJhMSwgMHg4MTM3Y2Y4YSwgMHg5ZWEzYTJkZCwgMHg2ZmIzZjUxZCwgMHhhMzViOWVhMywgMHhmZTdhOGM1MiwKKwkweDk2MmNlMmExLCAweGZmNzFhZmE0LCAweDM5ZjVmZjM5LCAweDNkMDRhNjY5LCAweGYxYzgzZWE5LCAweGE0ZTczYWE0LAorCTB4Y2ZmN2E0MmQsIDB4ZWJlOTFkN2UsIDB4YWFjYmVlODQsIDB4ZjFlZjc4NDgsIDB4ODNiOGZlYzIsIDB4MzdlYWJkNjEsCisJMHhjNzBkMjFmZCwgMHhhNjZmNTg2OSwgMHhlOTc1Yzk3OSwgMHg3Y2EwNzljMywgMHgyMDhkNGY2YiwgMHhjNWU1ZjdmZCwKKwkweDRlYjk1ZmE5LCAweGViOGRmNGZkLCAweGRlMDllOTIwLCAweDk3NDJhZmZiLCAweGYyNGMyNzE4LCAweGIwNTE1NGU4LAorCTB4OWQwNDM3Y2EsIDB4YzYwMDdhMmMsIDB4MzhiNmZlYzUsIDB4ZjNkMmZlZTksIDB4YTNlMjU3MWQsIDB4NWYwNWJkN2YsCisJMHg3MWQ3MWQ1MywgMHhkMWY5MTE0NywgMHg3NDY4NmY0ZCwgMHhmYjQ0ZTBjOCwgMHhjN2M4MDU1NSwgMHhkMDJmYTBmNSwKKwkweGM0YWY1MTZmLCAweDY0N2JhMWRmLCAweDFlZTk1OTBmLCAweGI3NGRmYWU2LCAweGQ1ZTM4Y2RjLCAweGIwOWFiNzFmLAorCTB4YWJlMWQ0ZmQsIDB4NDk1YzEyMjYsIDB4MmE3ODBhZWIsIDB4ZmJkZThhMTgsIDB4YmUwNWUyOGEsIDB4M2Q4MWZjMDQsCisJMHhlNzJkZmM0MSwgMHhjMTM3MDA5MywgMHhiYTI5ZmIwMSwgMHgwOGFmYTg4ZiwgMHgwZTQxMzNkNiwgMHhlZGM4NTliYywKKwkweDY1ZGY3ODJlLCAweGY3ZTZmYTIxLCAweGQ3Y2ZmNTYxLCAweDU3NWYzNDk1LCAweDY0ZGY3Y2QyLCAweDE3Y2NkZjQ0LAorCTB4NzgyY2Y5YTQsIDB4ZTdjMjZhZGIsIDB4YjZiZmVlMGIsIDB4YTczZGY3MDQsIDB4NzlhNzRkZDYsIDB4NGZmMGNhOWQsCisJMHg1NTNhZmU0NCwgMHgyMTBmZmQwMCwgMHgwZmRjMTcyZiwgMHgwYmZiMmNmMywgMHhkM2I3NmNmMywgMHhjZjNiMGQ3YSwKKwkweGY2MGVmODhjLCAweDg5ZjllNjE3LCAweGNmMzk0M2EwLCAweDBkM2QzNGY3LCAweGNmNDNmOWYzLCAweDJlZmQwY2FhLAorCTB4YzZjMGZjYTEsIDB4YmY0ZWJjYTksIDB4NzMzMjE3MTMsIDB4NGE2ZDA4N2EsIDB4ZGVkZjdjYTUsIDB4MDRmYmZlNmUsCisJMHg3OGMwMGU1MiwgMHgyNjBmNDllNywgMHhkNTUzODdhMiwgMHhkMGM5ZTZmYSwgMHgzZjA3ZmZkZiwgMHgwMGI3MTczNywKKwkweDAwMDBiNzE3LCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkY2RmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmZmI1LAorCTB4NjQ5MzI2NjYsIDB4MDgxMjRjOTIsIDB4M2M5ODQwODEsIDB4NDk4NDkwMDksIDB4NzY4YTg4MDIsIDB4MDJkMTA0NzgsCisJMHg4OTc5NGYwZCwgMHg0MjEwMDc5MywgMHg2OWI1YTA1ZSwgMHgwMjQwY2Q2YiwgMHgzNTBkNDVhMiwgMHgwMWQ0NWEyYSwKKwkweDBkYTJhMjgxLCAweGJjMTUwYTBhLCAweDQ1NjIyYTAzLCAweGI2OGI1N2M1LCAweDUxNDAyNmU1LCAweDVlYTBjNjc5LAorCTB4ZmZkN2I1YWUsIDB4NGU3ZGFkZmEsIDB4NTQ5MGNlNzIsIDB4N2RmYmRlZGIsIDB4ZGYxZjdjZmYsIDB4NWFmZDlmNjYsCisJMHhkN2I1ZWQ3YiwgMHhlN2JkYWY1ZSwgMHhjYmFhM2RjMiwgMHhlNGUyMTZlZiwgMHhmZjZmMDVkZCwgMHhmN2E1MTdiYywKKwkweGZjODEyZWFhLCAweDAyY2RkZjU4LCAweDJjYzM4ZmY5LCAweDkzNGExNGZlLCAweGZlNzBhNjhiLCAweGE1NmI5YjY1LAorCTB4YTY4OWM0MjIsIDB4YTE0MWZkYmYsIDB4MzY3ZDg1ZmMsIDB4MGJmMmEwYjcsIDB4Y2VmNzQ1MjksIDB4ZWE4ZjdlNDYsCisJMHgyZmVkNDE1YSwgMHgyNTlmNjgwYywgMHhkOGI5NzM4NiwgMHg1ZGVhZTU0NCwgMHgyZTUwOWEyMywgMHhjYWU2MWUxZSwKKwkweDBkZjJmMmEwLCAweDA5NjQ0MjYxLCAweDY4NTZmYmZlLCAweDNiZTkyMzdmLCAweDZiYTUwYjUyLCAweDM0Nzg2ZjU1LAorCTB4ZmQyZjRkYTUsIDB4NmZhNWM5NDQsIDB4NTc4ZjM3NTYsIDB4ZjcyNGFiZjMsIDB4Yjk3ZTM0ZGQsIDB4ZjllZDU4NTUsCisJMHgzOTllZGNhOCwgMHhmMzg4NDcyZCwgMHgwMzEzNmQ3YiwgMHgyMzNmMzJkOSwgMHhiMDNmY2I4NywgMHg1ZDhkNzk1MiwKKwkweDdiZjg1YWY4LCAweDBlNmE3ZGFkLCAweGQyYjZlMjhmLCAweDBmYTk4YjM4LCAweGZhZTk0YTkxLCAweGVhNjBlZjE4LAorCTB4OTM4ZDMxN2YsIDB4OGI3ZGUzNDIsIDB4MGU1YzFmYmYsIDB4ZTdjYjBlZGYsIDB4OWZhODhhMGIsIDB4ZjY2MjZkN2IsCisJMHhmNTVkZDk3MywgMHg0ZGRiMzRmNCwgMHg2ZDQ2ZjYxZCwgMHg1NTNiNTc3YiwgMHgzY2M2MjU4OCwgMHgyNDIyYTFlMSwKKwkweDQ3NzkxNGJmLCAweGE0MzJiZTU3LCAweDdjYTQyYWJjLCAweGE3Y2ZiZjQ3LCAweDFmMmYzOTE0LCAweDFmYzYwMzdmLAorCTB4MTJjNzg1ZDEsIDB4MmMzYjhmMGQsIDB4NzJlYjFkZjQsIDB4NDRkODEyOGYsIDB4YmFiMTJkZmYsIDB4ZmUwOWNiZWQsCisJMHg5Yjg4YzZlNywgMHg1NWE5NGZkMSwgMHg0N2NkYWUzOCwgMHg1ZjllMGViZCwgMHg4NjM0NTU4OSwgMHg4N2JiZTNlNSwKKwkweGE2ZjNlOWViLCAweGUyYzMxYWZlLCAweGNlZDExZjI4LCAweDg5YmQ1M2UzLCAweGRhOWU0Mzc2LCAweGFiOWFlMDliLAorCTB4NGJhN2EzYzEsIDB4NGViYjg1YjcsIDB4N2ZhMGYzZWEsIDB4YTZiMTJkNTUsIDB4YmVlZWNkN2MsIDB4N2MwNjkzYWUsCisJMHhmYTdmYzUyZiwgMHgzNDQ5YmZkMiwgMHg4YmMwOTFmYiwgMHhkZGRhYWJmYywgMHhlODkyMzA3YSwgMHhjZGYxNGRhNywKKwkweDE3YmY1Mzc1LCAweDlkMWQ3ZTBlLCAweDFmNzVlNmVkLCAweDliZWI0NDU5LCAweDdmM2VhNmFmLCAweGJlZGJlNjk4LAorCTB4NDI2Y2Y1NDcsIDB4ZmRkODZmYmYsIDB4ZTdmZDBjNGEsIDB4NmUwZjhiOWIsIDB4MmZkNWVmYTcsIDB4ZGRiYjg5YTcsCisJMHhjNTBmZjM1ZCwgMHgxN2RkODVlMywgMHhmYmU5NTNhMywgMHgwOGY2NDNmOSwgMHhiOWU2OGMzMSwgMHg5ZGFjN2UzNywKKwkweDVjNDc2MmU4LCAweGFmNzhiNzdiLCAweGVmNWRkNmQ1LCAweDM1YjViY2VmLCAweGRlYTFhYTdhLCAweDNkMWFkMTc5LAorCTB4MjUyZjQwY2QsIDB4OGJkNjJmYmIsIDB4NWY5ZmM2NWMsIDB4ZWZjMmVmY2QsIDB4YzdiZDdkODksIDB4ZjRiZGY0YWEsCisJMHg1YWM2ZmRmNywgMHhjMzVmYmQyOCwgMHhmNzM2YmRkYiwgMHg2ZTA5NmIxMywgMHhjZjMwOWVmZiwgMHhmY2ZiODIxNiwKKwkweDY4MmRiMzFiLCAweDcyOGRmZTdmLCAweGNiY2RiZDJkLCAweDI0NGY1ZmU5LCAweDhiNjhmYzYzLCAweGJjN2Q3N2E0LAorCTB4ZjcwYjZlMzUsIDB4N2I2OTZhNTMsIDB4OGZkYTFhZWMsIDB4OTNlYmJmYTUsIDB4NTVkMjkwZDIsIDB4Y2ZjOTZhNWUsCisJMHhiNzZmM2FjNCwgMHhkYzAwMmZiNSwgMHg0NmIxMTVlNywgMHhlN2VhZWI4OSwgMHhkYjliYjc3ZSwgMHhjOWYzZGY5ZiwKKwkweDI3MGZlMDYzLCAweDRmOTAxZGVlLCAweDQxZjk0ZDY0LCAweDNmMmEzZWI5LCAweGE2NDE1MWZmLCAweDdmM2RmYThiLAorCTB4ZjgwZjVmNGYsIDB4ZmI5Yjc2YzIsIDB4YmJiN2E2MzYsIDB4ZjdkODNjYTIsIDB4YTcxODdmN2EsIDB4YjllZmZkMTYsCisJMHhlOTBmYTQ2MiwgMHhjYTVlMTI0NywgMHhiOGU0ZmFlNywgMHhhYmJmMjU3ZSwgMHhmYjhiNjhkZiwgMHgxN2UwZDFiZSwKKwkweGI2NzliN2JmLCAweGVmZmNiMjUwLCAweDMxNjI3ZDY5LCAweDZlZTdlYzNmLCAweDRkNzRhMWQ2LCAweGY4OWI3MDk4LAorCTB4YmI4NjRhYzksIDB4MjJlYzc4NDQsIDB4MDMwYjk2NGQsIDB4MjI4OTk1YmQsIDB4YzliMGJlZmUsIDB4ZjExMTdkZmMsCisJMHhiYzVmN2MwOSwgMHg1Y2JkZmNkZSwgMHhhNTZlYWQzNCwgMHg5ODA5MmRmOSwgMHgzZmRhMGJiZiwgMHg2YmVjMDRmZSwKKwkweDVlYzVhZmZkLCAweGZmN2EwNTE0LCAweDRmNTRjYzM2LCAweDQwZmUzNWY4LCAweDI1NWYwOTFmLCAweGM3YzExZmI0LAorCTB4ODEwMjUxOWUsIDB4YmJkZjU4OTUsIDB4ZTg2NzllNTQsIDB4YTc3NWRlYmMsIDB4MjI4N2JiNzAsIDB4YWI0MTY3ZmYsCisJMHg1YjhmNWQ2MSwgMHhmMDkxMzU4NCwgMHgxYzJlZGM3YSwgMHg0N2U4Zjk4OSwgMHhmNWZhODUwOCwgMHg2YzBiMGJlZiwKKwkweDBmNzcyNmExLCAweDA0YjkyYWZlLCAweGMyMzFhZjdjLCAweDViYmUwODIyLCAweDQyN2NlMDVkLCAweDQ5ZjdkOGFjLAorCTB4NWQyOWZhMzIsIDB4MzU2ZGU4NTMsIDB4ZTZjMTc3YzAsIDB4ZDRlN2U4N2QsIDB4ZTI1ZGZkYmUsIDB4ZjhlZjU0ZDcsCisJMHg1OGQzNDBkOCwgMHhkZGY4ZWI4MiwgMHgxYmExYTdhYSwgMHhiMWFmNGViOCwgMHhlMTAxNDA4OCwgMHgwMjIxMmVlMywKKwkweGYyN2Y5NGYxLCAweDVhNjJlNDkzLCAweDdjYjZjZjk3LCAweGE0NjI1YzkyLCAweDM2Y2M0NTdmLCAweDEyOWVhM2QyLAorCTB4ZWYzZWJjMjQsIDB4ZmNkMmVmNjEsIDB4MzA1Y2QzOGUsIDB4NWQ3YWQwOWYsIDB4NTc4NjZiZWIsIDB4MmFiODY3YzcsCisJMHg4N2EzYmI2YSwgMHg1NGY3NDBjZiwgMHg1NTc3ZjU5ZSwgMHhmN2VmYjE3OCwgMHhjZmEwMDJkOSwgMHgzYzVmOGRjOCwKKwkweGI5ZjQwZjM4LCAweGExNGFlNmQ3LCAweGE5ZjY2YmIxLCAweDJkZTY5NTVlLCAweDBjODFhOGY2LCAweDRmN2I2MzljLAorCTB4OWNlMDU3NDQsIDB4NTJlMDUzZDksIDB4ZDlhZWYzMGQsIDB4N2NlMTE2YTMsIDB4NjJmYmJmMzksIDB4ZjczNjY5NDIsCisJMHg0NGVkYzUzMywgMHhhMDNjMDdmYiwgMHhmOGUwOWVkZiwgMHhmN2ZkNWI5YiwgMHhjY2Q3OWZmOCwgMHg3ZjY1Y2VmZiwKKwkweGY4MDM3MDkwLCAweDk5NTNjNmMwLCAweDA3YzRlZmUwLCAweDc5YTZlNmZmLCAweGM2ZmNjZjllLCAweGFkMTBiYzhlLAorCTB4MDQ3ZjQxMjMsIDB4ZTA5YmI0NWYsIDB4MmFmODEwYmMsIDB4OGU1YzEwNWEsIDB4ZDAzN2FhYmQsIDB4YTU0NDNhY2QsCisJMHhmZjRmMTlkOCwgMHgwOTEzN2MzMiwgMHhmODJlODRiZSwgMHg5NGE4OWUwOCwgMHg1NjcwNWQxMSwgMHgzOGVkZGJiYiwKKwkweGEyMzgyZjY3LCAweDY5NGZjMTczLCAweDEyZjI5MzQyLCAweDBkYzlmM2I0LCAweDQ5M2E1YWZlLCAweGJmMWQ3ZjEwLAorCTB4NzBjYWUxNjcsIDB4OGE0ZDBiYzgsIDB4OTdiZThjMjcsIDB4ZGNmOTU1ZWQsIDB4MTkxYmRiMmEsIDB4M2YxODE2YzAsCisJMHhkMmY5YzljOCwgMHgxODQwZDU0NywgMHhhM2E4MjdlNSwgMHhlYTliMzBmZiwgMHhmNTQ3YmUyZiwgMHhmYjE0OGVkMCwKKwkweDA3ZjZkZTM3LCAweDgzNzVkNjFiLCAweDg4MWNhMDRkLCAweDM0NGI1YzAzLCAweGZkZWM5NmI4LCAweDhkMGE2N2UxLAorCTB4MmRkZjc4YjMsIDB4ZTJjZTMwMDcsIDB4MTcwZjE0MDcsIDB4ZThlZGYzYTgsIDB4OGE0M2M5NzcsIDB4Njc0MDU3ODgsCisJMHgzYTQ2ZTNiNiwgMHhjZTY0ZDg1YiwgMHgwYmFkMTIyZiwgMHhjMWZjMTU1NCwgMHg5ZWYwOWRmYywgMHg5NmZkNDE1YywKKwkweGRkNzMwZWVmLCAweGExMDJmMThkLCAweDRhYmM0MmU1LCAweGZmNjhkNGYwLCAweDNiNThjYWNmLCAweGNmZDUwMGY3LAorCTB4M2M2NzY4ZGEsIDB4ZTIxNzBmOWMsIDB4YjVhYmY2MDgsIDB4MGQyMDQxMzUsIDB4MWQ2MzI2YjYsIDB4NmJmOWVmY2YsCisJMHhlNmIxZDYzMiwgMHgyOTk1ZmY3NywgMHhjZWJmNTliYSwgMHhhYTM3YjRmZCwgMHgyMTQ4YTlkNywgMHhjNDUxNGVhZSwKKwkweGZiYTBhOWI3LCAweGJhOGE1MzhiLCAweDIwMWI2ZmE5LCAweDliMzZjNWY3LCAweGNhODc5ZmJmLCAweDhhZmM2YzBmLAorCTB4M2Q4NWMxZjksIDB4NmVhZTgxYmUsIDB4YmY2YmI3ZTgsIDB4ODkyZGMzZmEsIDB4MDJlMTgzNDgsIDB4ZDcxNmYwZTksCisJMHgyNDI3ZDgwZCwgMHgzNWJlNjIwZiwgMHhkYjRmNTY5YiwgMHg5N2YwZjk0NCwgMHg0NGI5Mzg2YywgMHhmNzkzODY0ZCwKKwkweDQyYzdmNjBiLCAweDNlZmFiZjQzLCAweDgwYmUwNmQ5LCAweDBmZTQ4NDc0LCAweDFjZjIwMWI2LCAweDdiOWRhYTNkLAorCTB4NGM3N2Y2ZGIsIDB4OWUwNmU4YzksIDB4ZDcxYjZlYTMsIDB4NWMxMDBkYjMsIDB4ZDE3NzU5ZWYsIDB4ODQ1YmQwNWMsCisJMHhiZTBkMWZjNSwgMHg3NzVlYmMyZCwgMHhhMmIzYzIyZiwgMHg1ZDQzNTdkMSwgMHg4OWVmODJhZCwgMHhmZWQzODlhMiwKKwkweDQ3ZDM4NWEyLCAweDUxMzlmMDg1LCAweGMwNWM3ODVmLCAweDYyMDMxMGIzLCAweGYzZGUzZjgxLCAweGNjYmVjZjhjLAorCTB4YWRhYzdmMzcsIDB4ZTgzNTc4MjEsIDB4MDIyYjFmYzQsIDB4ZWFmZmU4NWIsIDB4NjM1MDg3NDYsIDB4NDZiNWVkMjAsCisJMHhjZTU0NTFhMywgMHg1MjA2ZmJiNCwgMHhkNTAzZWRiOSwgMHgxZGRlNDBhMiwgMHhjN2E3YWZhMCwgMHhhNWY3ZmQ4NSwKKwkweDcxOGM0NjczLCAweDJlMWZmNmZkLCAweGFhZmU4ODk5LCAweDhjMjJhOTc2LCAweGQzYjczYmZhLCAweGQ0NGU4MjI2LAorCTB4N2MwMmZkYTcsIDB4OWVjMmZlMWMsIDB4NTdiNGJlMDIsIDB4NmI5NzkwMTEsIDB4MzVlZjhmMjgsIDB4ODBkZWFkYTMsCisJMHhhNDc3MmYwMSwgMHhkNTBmMThkOCwgMHg5Y2YyOTkyOSwgMHg0ZDBmN2FiNiwgMHhiYmNmN2VhMiwgMHhlYjkwZWM0YSwKKwkweDI2Y2I4NzZkLCAweDI1YjFiY2UyLCAweGQ3MDFkODk2LCAweDFkNjNjM2ZlLCAweDU4Yjc1ODI5LCAweGQ1OWJlZjJiLAorCTB4OGY3MWY1N2IsIDB4NTQ3ZmQwYjgsIDB4NmYwYzA3ZWMsIDB4NDQ0NWI2NjMsIDB4YTNjNmJiNTMsIDB4YTY0NjAxNjEsCisJMHgzMGExZjI0MywgMHhjMThkYWYwZCwgMHgzNzc3MGVmMSwgMHhlMzE3ZTNlYiwgMHgyYTI4YzQ5MywgMHgwNDRlYTlkZiwKKwkweDI1NWNlNzljLCAweDJkYTNhYzJlLCAweDBhZWVlODk2LCAweDRlZjM2ZjZhLCAweDBkZmE5YWJjLCAweDA3OGI4ZDhiLAorCTB4ZDI1MjZiN2MsIDB4OGFiZjNkNzgsIDB4YmYzODY1YWQsIDB4Y2ZjMmYxMjIsIDB4MDhiNmI3ZmIsIDB4NjVmZWM2ZjksCisJMHhlOWJlZTMyYSwgMHgzNWNmZGUyMSwgMHhkNDdlMzkwZSwgMHg1MWNmOTUzZSwgMHhlMzQzYTU3MSwgMHg0YWJiZWZkYiwKKwkweGM5MDU5YzY5LCAweDBmNDE0N2JlLCAweGM0NmRmYzlkLCAweDM5ZmMwMmFiLCAweGY5NjE2MmNiLCAweGU3MzVmMWFjLAorCTB4YmQyMWYwNWEsIDB4YTQ4YTZjZmMsIDB4NTYzZDdkMzcsIDB4YzBiYWIyZjUsIDB4ZThkNTFlM2YsIDB4YzhhYjk1NzMsCisJMHhhNzk4NmY5MSwgMHhjMzQ1YjdhZCwgMHg3ODAzOTE1NywgMHgzYTJmNjFkYSwgMHg5ZGE1ZjM4NCwgMHgzY2RjZTNiZSwKKwkweDAxY2QzODkwLCAweDU5ZWE4NTNkLCAweDdhYTljZmQwLCAweGY0NzYzMWRhLCAweGZjMDFjMzNiLCAweDMyNTVlYTJlLAorCTB4OGIxNmVkMDEsIDB4NmZkOGQ1ZGEsIDB4MjJhYmQ3OGIsIDB4OGRhYmUwNjgsIDB4YTJlZTM5MzYsIDB4MTgyMjExNGIsCisJMHgyMmVlMzVkZiwgMHg3ZjZlM2Y1YSwgMHhlOTA0NWEyOSwgMHg5NzBjNmRkYywgMHhlNGEzMWFmNSwgMHg0NTIzNzlmZSwKKwkweGI1MGY5ZmVlLCAweGY5NjliNGY5LCAweDdiYWY5OTdmLCAweDVjZmQ3Y2NjLCAweDk2YjYxZmVjLCAweDQ2ZmVmZTQ4LAorCTB4YTU1YmY1MGEsIDB4YTE0ODRlYjQsIDB4ZWM0ZWFkZjksIDB4YTdiZjAzYjAsIDB4OTgyMjVkZWEsIDB4YjJmNzgwNjksCisJMHhhMDhiYzY3OSwgMHg3YWNlZGM2MSwgMHg5ZjNjMWM5NywgMHgzMzcwZjVhZSwgMHg3NWYzNWRmYywgMHhkNTRlMWUzMiwKKwkweDdiMWUzMjI3LCAweDg0YzkzZmVlLCAweDUzZmVhZWM3LCAweGJjYmM3ODRkLCAweGZmMWU0Y2ZmLCAweDc3ZDY3ZDU0LAorCTB4ODdiNDNmZjQsIDB4ZjgyNmRkZmUsIDB4ZTc0ZGZhYmIsIDB4ZGY2ZWM1NzEsIDB4M2I5N2YwNDAsIDB4OTgwZmM0NWQsCisJMHg1MDVmODg2ZSwgMHgzZGYxNWRiOSwgMHhkYmU0MzU3ZSwgMHhlNDA0YzI4ZiwgMHg3ZGMyYWZiZSwgMHhmZTA2NWM4MywKKwkweDY1Y2UwZGYwLCAweDQ5ODJlN2Q2LCAweGQxN2ViN2UwLCAweGVlY2Q2OWNjLCAweGRlZDAxMzhiLCAweGZiMDE3YzRkLAorCTB4MTFhZjJmNDksIDB4ZjgyNzBjZWQsIDB4MzU4M2U4ODUsIDB4N2NiOWJhYjQsIDB4ZjQxMDZmYjcsIDB4NGU4ZTFkMjIsCisJMHhhNzc1ZTY3OSwgMHgyMGZiNDJkZiwgMHhhM2RmZGY2YywgMHg1ODJmOGZiMSwgMHgyODc4YTdkYiwgMHg0NmFiZDk2ZCwKKwkweDdjNzVmNzFhLCAweGIxYTdhNGFhLCAweDZkYzhiZTAzLCAweDY4ZDVlZmE1LCAweGI2ZWY3YzQ3LCAweDAyMGU5Nzk3LAorCTB4ZGFjM2FhN2UsIDB4ODFmNzAxNzMsIDB4OGI5NmZmOTcsIDB4N2RhYmU0NzMsIDB4ZmJlMjA3NGIsIDB4ZjJjZmFhMzYsCisJMHhkYWJkYmQ4NywgMHg1ZDJmZTg2MywgMHg1MTk2ZmNiOCwgMHg1NTMzYTk1ZCwgMHhlZmQwZmZlZSwgMHhmNDM1ZjZkYiwKKwkweDg5ZGIxYzAzLCAweDBiOTIwOWJkLCAweDBhMmFlYmFiLCAweDBkODNjNjRlLCAweGZmMDdlZjc5LCAweDU4YjdjNDEyLAorCTB4NWQzZGRhMWYsIDB4ZWVmOTAzMWQsIDB4Mjg3OTkyNDMsIDB4OTQ4ZjdjM2YsIDB4MTAwZjg2MWIsIDB4ZTQwYTRiMDEsCisJMHg4MzY3MGZiZSwgMHhiMDhmNTQ0ZiwgMHg0NzBhYTBiYiwgMHg3OTYxMWRlNCwgMHhjMzg0NjIzYiwgMHhiZmZkNTBhNSwKKwkweGRiZTM5N2Y3LCAweGExYTQyZjIxLCAweGU4M2M2MTdkLCAweGYxNjRjYWY5LCAweDFiNmRjOWVmLCAweGYwNGZmNjQyLAorCTB4MzRlZGVhYmQsIDB4M2FkYTk1NWUsIDB4ZmJjMjljNjUsIDB4N2MxNTNmMjgsIDB4ZGUyZmFkZmIsIDB4MDRkN2Y0ZDYsCisJMHg5YzAxY2ZhYywgMHhmYmNmMDQ2YiwgMHhhOTY1M2Y1YSwgMHhjZjUwMmJiZSwgMHhlN2JkNjhlNywgMHg3MzM3YWEwYSwKKwkweGU4NjRkZjU2LCAweDdlOWFjNTQ3LCAweDUyMTEyNjI2LCAweDk0N2U2NGFlLCAweGU1YzgzYjAzLCAweDgzZDRiNmU3LAorCTB4M2U3YzUyNWUsIDB4ZDdkZmMxZTAsIDB4MzVmOWMxZTEsIDB4ZmEzODQ5MzQsIDB4NjI0NTVlMTIsIDB4OGQxYTc1MjAsCisJMHhhMmQ1MjEzYiwgMHhjMDE0MGZkYiwgMHhlMzliNDQzZCwgMHg5NjVhZmQzMywgMHgxOTM5ZjJjNywgMHhmZDFkMDM4OCwKKwkweDRiNGVlM2IzLCAweGZjMDY0ZWY1LCAweDY3MGZmZDdhLCAweDc1ZjFjYmNkLCAweGYyZTg2ZTczLCAweGIyZGVkZGJjLAorCTB4NTdiNjcwMGMsIDB4ZmM3ZjU5MzksIDB4ZWVkNDQ1MDAsIDB4NDE2MTU5ODksIDB4OGE3YTFhMzUsIDB4ZjlmNDBkNzMsCisJMHgwZTBiOTFhMywgMHg4YzdjMjZmNiwgMHg0M2NkZjI4ZiwgMHhiYzZmYjNmZiwgMHhjYWYyMzU3ZSwgMHg3MmY3Nzg4MSwKKwkweGViNzE3M2QwLCAweGMyZWZkNjQ4LCAweGJjYTMzNzdkLCAweDk4MWJlMWQyLCAweDM3M2M1MzQwLCAweDA2MjgzN2MwLAorCTB4YmM1MTdjODcsIDB4OTQ1MTI3NWMsIDB4ZmMyZGQ0NTMsIDB4NDU2MjllMTIsIDB4ZTUxOGRmOGUsIDB4YzUzZjQ3MmIsCisJMHg1ZDhmMjM5NiwgMHgyM2Q2NmY4MSwgMHg4ZDEwNmY2YywgMHg3MzlmYjliZCwgMHg5ZGRlNTE3NiwgMHhlMWUzYWZmYywKKwkweGZkOGYzNjk4LCAweDI1ZWQ3MTM2LCAweDc1ZmVkZjlhLCAweDgyMDY5ZTMxLCAweDFiY2VlY2I3LCAweGJhNTBkNDE3LAorCTB4MTA5NDUyZDAsIDB4ZGY3MDRkNTQsIDB4NTc1ZDRhOTYsIDB4ZjYwNzhiZmEsIDB4OWNlZTc5MjUsIDB4NGViYjgzNGQsCisJMHhjYWVhZGI4MywgMHg1MGU3ZWUzNCwgMHg3OTc0MWJiOCwgMHhlYjBhMTdlNSwgMHhmOTQ3ZmM4MywgMHg4MWIxZmQxNywKKwkweDY2MWYyOWJiLCAweDc0YzFmOGI5LCAweDE2Mzk1YjljLCAweDg4NmM5M2I2LCAweDdhNDViZGEwLCAweDljMWEzYmU0LAorCTB4NzNiZWQyOGYsIDB4MzVmN2YxYzQsIDB4MjExODllZjgsIDB4NjgzZTI3ZGIsIDB4NTA3ZWMwMDksIDB4YWYwZjc2MzQsCisJMHg0ZWQ1MTNkMywgMHgxNTYzNGE4ZiwgMHg3MjFkYjcwYiwgMHhiMmYwYTk1MCwgMHgzMWQ3ZmNmZSwgMHg0YWQ3ZGI3ZiwKKwkweGY1NGU2YWYzLCAweGRkYmMwN2RkLCAweGZlNDk2ZjFjLCAweDBkZjBlMTgwLCAweDZiNzkwYTlkLCAweDNmYzc5Y2I0LAorCTB4MWU3OTM3OTAsIDB4YzZjYjg0ZDMsIDB4NmI1ODk5NDIsIDB4Y2QzMWZjODEsIDB4NTBiMmE3MjUsIDB4YmE2M2ZiOTEsCisJMHhkZTMwZGFmMCwgMHg3YWUzZTE0YywgMHg3YmI3OWRlZiwgMHgwN2JjNGZhMSwgMHhiZWUwODg1ZCwgMHhmYmY5Zjg1MSwKKwkweDc0ZTAxMTFjLCAweGZkNzIwODllLCAweGU3MmI0NDliLCAweDdkMTM3Yzc1LCAweGQyNGJkY2RjLCAweDU0N2QyN2M3LAorCTB4YzA1NmZmYzYsIDB4ZWU2NDZlZmQsIDB4Yzc5YTNhODAsIDB4NjUwNjg3ZDQsIDB4ZGNkNTdlYjAsIDB4NWRmM2YxOWIsCisJMHhlOGQ1NGY3MCwgMHg2ZmVmZjY4NiwgMHhiZmQ4OGViMSwgMHg2OTlmYTgzMywgMHhkZmVjODQzNywgMHhmNWY1YmRmMSwKKwkweGZiNDdmOGNjLCAweGE3NDc0OGU4LCAweDRiZWNlNGZlLCAweDViNGViODc4LCAweDRiYmNlYmQyLCAweGMyMTI3ZjU5LAorCTB4OGZkMWYyYzUsIDB4YTg1YjdkYjQsIDB4NWEyZjQ1M2EsIDB4ZDI2ZTIzOWYsIDB4ODk5NjA4OTcsIDB4NjIyNTk2NjMsCisJMHgxMGFmYWZiZSwgMHgzYWQwMTU2ZiwgMHgxNTQ2M2ViZSwgMHhjYmQzNWMwZCwgMHhmZDY4YTZlZCwgMHhlMTNmZTk0ZCwKKwkweDBmNWJkODMzLCAweGUxYWY2MDhiLCAweDkyZjBhZWQ0LCAweDgyMThkNWVmLCAweGJkYmE4YTdiLCAweDI3Y2E5NjMxLAorCTB4YzZiZDI3ZjYsIDB4ZWZhZWVmYzAsIDB4ZmQwYWMzYjUsIDB4ZjM3NDg2ZWUsIDB4NjZkOTQ5ZjcsIDB4NjhiMjY3ZmQsCisJMHg5NGZlMzE1MiwgMHhmYjdhZTZlMSwgMHhiM2EyMjc4MSwgMHhmZWE1NTNmNywgMHgyMTg4ODYyMiwgMHgwYjdhZjJkZiwKKwkweDFkM2U3MThiLCAweDJmZGEyZTkzLCAweDY5MTExYzEwLCAweDJlYjE4ZmJlLCAweDc1ZmYyN2NiLCAweDU2MTVjNjAxLAorCTB4YjdlYTlmMzksIDB4MWRlYmI2NTUsIDB4Mjg4Yjc5MjcsIDB4YTdhYzljNTAsIDB4Y2E1MzIyOTMsIDB4NGE3ZmM4MjUsCisJMHhkM2QyMDNmMiwgMHhjZjRlNmVmNSwgMHhmMjhmNzlkMiwgMHhjZTFlZjVmMywgMHg5ZDE1YTQxNywgMHg2YjI1YmY0MCwKKwkweDdkNjJiNzNlLCAweGY4OTcwY2VlLCAweDlhNjk2ZjJlLCAweDc2MmFiMDAwLCAweDVhNDQxY2I3LCAweDgwOWEyYzE2LAorCTB4YTFkMTc2NjMsIDB4ZWY0ODgzZGEsIDB4NmFkYmQ0ZWMsIDB4ZTFkM2JlNTksIDB4ZDNhMzQ1YmUsIDB4ZmRhNmEyNWIsCisJMHhlMWQ2ODczMCwgMHg4N2FhM2Q5NiwgMHg0ZGE2MDNmMywgMHg3OTBiZGM5ZiwgMHhhMjdiZTcxYiwgMHg0NDRiYWFhMywKKwkweDU0NTcyNDMzLCAweDAxMmZkZWFiLCAweGRiNmY3Nzk3LCAweGRmOWE3OGMxLCAweDE4YTNmNTI3LCAweGJkZWFjZmVlLAorCTB4ZmE5OWY3MGMsIDB4NGE0ZTljODksIDB4ZTgxYmZhMmIsIDB4NjczZTJiY2MsIDB4ZjZmMjZjNzksIDB4ZDUxMjZiMzYsCisJMHg1ZTJhZjQyZiwgMHhiZDZiZGJlYywgMHhmZGEwMTAyMiwgMHhjZjI2ZGViNywgMHgwZTc0ZjU4MSwgMHhjOThmMWY2MCwKKwkweGFkZThmNjk5LCAweDY3ZGE3YzAyLCAweDY2NzFhMzRiLCAweDEwYTRiMGRlLCAweDU1MTk0Y2UzLCAweDFiYmQ0NTZjLAorCTB4MjAxOTIxYmYsIDB4YmY0ZThiYTUsIDB4ZjlmNWVlOGIsIDB4NzZlYjY5NTcsIDB4ZjE4NTY1ZWUsIDB4MmQzM2IxZDgsCisJMHhmMmMxNzIwNiwgMHg5MDdkNjk1ZCwgMHhmNWQ0YmYxMiwgMHhhZGUwNDhkZCwgMHhlMTg1OTJlMywgMHhjMTFhMzhlYywKKwkweDZlZGU4NmZhLCAweGU2NDhhZWY5LCAweGQ4MDdjYjNiLCAweGI3NjBjMjAzLCAweDJjZWI0MzNjLCAweDk5ZTZmMjBjLAorCTB4MzZlMjdlNjcsIDB4ZTI2NzJiOWUsIDB4MThmYWJlNWEsIDB4OTIyZmVkZmMsIDB4NzM2NDkxYmYsIDB4YmZmMDExZWEsCisJMHhhMDNjZmRmZSwgMHg5YzlhZjM5MywgMHgyNDQ2N2E0ZCwgMHhjZDZhYmZjZSwgMHg4NGZlMDhhZSwgMHg2OTA4OTlmYywKKwkweDZjZjkxZGNmLCAweDJmZWM1OGQyLCAweDRlMWM0NzhjLCAweGYzMmJmY2U4LCAweDdmNTI4N2Q5LCAweDZmMWFlZWVlLAorCTB4OGZjMmNiNWIsIDB4YjlmY2ExMWYsIDB4YTM2ZmM1ODAsIDB4Njg5Y2U5ZjMsIDB4ZjAzYmZmMzksIDB4YjY0ZWNkZGYsCisJMHgxMGE5ZGRlYiwgMHhiNzdmMzgzYywgMHg5NjdjZTNmNCwgMHhjM2E4OGQ2MiwgMHhiYzAyMmJmOSwgMHhiNzE0YjNiZiwKKwkweDU1Zjg4ZWI1LCAweGY3MGY3M2U1LCAweDQ0YmRmZDAzLCAweGU1NDUxODM4LCAweDY0OGJhZDJmLCAweGNkOTJmNjdlLAorCTB4ZmQwZWFjNzMsIDB4ZmJmYjJhM2QsIDB4M2QzZmJkY2QsIDB4M2RlOTFiYmUsIDB4YzUzZmY5NTUsIDB4MzFjNWE0ZjIsCisJMHhiNTdlY2JmZSwgMHhkM2RhMDg2NCwgMHg1MmZhMmVmOSwgMHhhOGJmNGY3ZiwgMHgzZjY5YzMwNCwgMHg1ZmVmMzRlNywKKwkweDFiZTA5N2Q5LCAweGQyY2RhMWI2LCAweGNkYmNkMjhmLCAweGExZDIwMzRhLCAweDA0Mzg2ZTAzLCAweDY5MGRmM2JiLAorCTB4YjA1ZjZlNmUsIDB4YzI0ZDQ1M2QsIDB4ZjgxN2VjMzYsIDB4ZWU3YzA3ZjgsIDB4ZWM4MWU1OWIsIDB4ZjZjN2NmZTYsCisJMHhjMTcyNWQxMywgMHhmNGU1YTUxMCwgMHgyYzM1ODI0NiwgMHg4ZmJlNjhmOSwgMHhmM2M0ZDdmMSwgMHhmYTc3YjVkOSwKKwkweGU2MDRmM2ZiLCAweGUwMDcxMjQxLCAweGY4N2JiNjJlLCAweDM3ZjgwYTFjLCAweGY5Y2YzZDYyLCAweGQ3YWMzY2IyLAorCTB4MDYxZmY5MTUsIDB4MjVmMzlkOWQsIDB4YmQyZTcwNzgsIDB4NTVmYzdhNDAsIDB4Y2FjYzdmYTgsIDB4ZjM3MTdjZjMsCisJMHhlYmIwZDFiYiwgMHgxYzdlOTBjNCwgMHg1ZTQ4N2YwZSwgMHhhZmQ0MDRmYiwgMHg3ZTE2ZTAxYSwgMHhiMWUwM2Y2YSwKKwkweDNmMDIyNmViLCAweDZkNzczYmQ1LCAweDFkMmE3ZWU0LCAweGU1YjllODFlLCAweDRjMWUyZWJiLCAweGJkNzg5YzgyLAorCTB4MGU4MDY0ZjAsIDB4MmZmY2NhNzcsIDB4MmEzZDdiYzcsIDB4ZTM3Y2I1NGQsIDB4YTQ3ZjMyOTcsIDB4YTQ0NWYzODgsCisJMHhiZjUxNWE3NSwgMHgwZjQ3Y2E1NCwgMHg2ODlmZTc2OSwgMHhjOGZlNjVjZCwgMHg1YWVlZWRhNCwgMHgzMTUyNWZhZiwKKwkweGY4YTdkN2NhLCAweGFkYWVjMmZiLCAweGRlNzQ5YjlmLCAweGFiNjFhNTU1LCAweDIzZmI2NWQ4LCAweDMzMjVlNzYzLAorCTB4NzllN2JlNWUsIDB4MmRjZWQ3NjcsIDB4ZWM4N2JmYmQsIDB4ZmQ0ZTFmYzIsIDB4M2IwMzZjYzAsIDB4M2NiYjA2ZmEsCisJMHg3ZjEwYjdhNywgMHhlN2U4YmQwMSwgMHgwYmZiOGQzNCwgMHhlZjZhNWZlYywgMHg1MjRkM2YwNSwgMHg4NDlkOWM5NSwKKwkweGMyODdhNDhmLCAweGJlZjhjZTU4LCAweDU5OGVjZmUzLCAweDJlYjZlN2NkLCAweDQ4NDRkNTY3LCAweDA1NjdjODNlLAorCTB4ZTUxODVmYjUsIDB4NWJmMzBiYmIsIDB4YzJmMzlkYTgsIDB4MWM4NmNlZWEsIDB4N2JjYTIzMzIsIDB4M2E1N2JlMzcsCisJMHgwNzMxOTNkYSwgMHg0NWVmM2YzYSwgMHhiOTI1NWFiZSwgMHg3NzIwY2QyYiwgMHhkN2JlZTMzOSwgMHhlNTE3NTlmOSwKKwkweGJlN2NjNjZkLCAweDkxYjFmZDZmLCAweDUyMGM2NzA0LCAweGFkMjJjZjVkLCAweDljN2U1YmEzLCAweGZjMDViZGJhLAorCTB4YzkzMDgxZjgsIDB4OTgwYWEzOGYsIDB4MGJmM2U5MWYsIDB4ZGExNWZmZWQsIDB4MzNlMjNlZjcsIDB4ZTI3OWQxYWYsCisJMHg3MzhmZGMyMywgMHg3YWYyYjE4ZSwgMHgzY2E5NmFiZSwgMHhhMTcwZTc0OCwgMHg2Yzg0MDExYywgMHg3OWNlMWQ4ZCwKKwkweDZmZTExNDZmLCAweGJlMTU1M2JjLCAweDNkNDVmNDZlLCAweDFlN2FmNWE1LCAweDJiZDA5OWY4LCAweGIwYWY1NGQyLAorCTB4ZmIxZGFjNTcsIDB4NWJjZWZiZjcsIDB4OGQ0N2Q2ZDUsIDB4YmJhOWY5ZDAsIDB4Mzc3NjcwOTcsIDB4NWJjZjM5NmYsCisJMHgwMWY0NDdjMiwgMHhkZjJhYzY1ZSwgMHg1YjBlYmU2ZiwgMHhjM2FjNDFkMSwgMHg5ZjFlNjczOCwgMHg1MzljZTM4YiwKKwkweGMzMDRmOThmLCAweDQzZGYxODdmLCAweDFmM2ExOWU3LCAweGYyN2VmOGUxLCAweGUxMTU4ZmQyLCAweDdkZmY2MGI3LAorCTB4ZGFmYjY3NmUsIDB4ZDNlYjViNWUsIDB4ZWU3YzI1YmYsIDB4ODFlZDkyNWQsIDB4ZjAwNWU4OWQsIDB4NjhjZmYwNWUsCisJMHg3YmIzY2IzYiwgMHg3YzFmODRhMywgMHg4NGQ0ZWY2NSwgMHgyZjQ1ZWMwMCwgMHhkZjA0NGY0MSwgMHg3OTY0MmRlOCwKKwkweDc3YmZhY2I4LCAweDdmNTM5NTBlLCAweDVmNjhjMmZkLCAweDJmMzQ1ZWMwLCAweDA2OWZlYjQyLCAweDdkMTVmYjQ2LAorCTB4NTI4MzdkYjgsIDB4ZGEwZTY2ZmIsIDB4YmU2NDg4YWYsIDB4ZjkyMDM0NzMsIDB4NzA2YzczNzgsIDB4OWJkZjRhOWUsCisJMHhhODE0Y2YzZiwgMHhkNjA0NTQ3NywgMHhlZGRlYTJhNCwgMHhlNTQzNWZkMiwgMHg2ZmQ0MzU0OSwgMHgxMjIxOTJmMywKKwkweGY5NTFmZmNlLCAweGYzY2U2OGRjLCAweDMyNzM4ZGY2LCAweDRjZmI2NzFmLCAweDVmNmY1NGYzLCAweDY5N2FhZmY4LAorCTB4NTFiY2Q1ZWIsIDB4M2Q4M2Y3OTYsIDB4OTQyOWU1MTQsIDB4OWI2M2Y0YTcsIDB4YWI1NzNmYWMsIDB4OTc0NjkxZjcsCisJMHgwZjk5Y2ZiNCwgMHg1YTQ0YTZmOCwgMHhkMmZkZTc0MSwgMHg5OWQyYzI0YiwgMHhjMmZiNzkyOSwgMHg1OTQ4ZjNlZiwKKwkweGU3MjhkYjA2LCAweGMyOWY1YzU2LCAweGNiZDlhM2Y0LCAweDViN2M2YjY2LCAweDFjMGQwZmVmLCAweGNiMmYyMTIzLAorCTB4YjcwYjM5YmYsIDB4Njc5ZTgzODQsIDB4NDFiNzg3OTYsIDB4YmU1YTNiZWUsIDB4ZmI3YTBhMzIsIDB4MGMxYTlmNGMsCisJMHhhMzM5NWM4MywgMHhhZjI5ZGJkMCwgMHhhZjVjNjJhNSwgMHhkNzRjYjcxYywgMHhjMGE1ODJmZiwgMHgwZWVkY2JlYiwKKwkweGY3Y2IzNzcxLCAweDNlYTMwMmMxLCAweDU1NmZhZmE1LCAweGEzNzg5OGNiLCAweDI3NjE1Y2RlLCAweDJjZjA0MmZlLAorCTB4OWE2ZGY2ZDEsIDB4N2QzYmQ3ZDMsIDB4ZWJlOWY0MDQsIDB4ZjRmYThkZTMsIDB4ZTQwZjY1YTcsIDB4YzZkMmZlZjIsCisJMHg4ZGVmNWIzYiwgMHhiOTBlOTkzZiwgMHhmYWE3MjI2ZCwgMHgwZjdhOWQ3OCwgMHg1N2U3NGRkNiwgMHgyNWRiOTdhMCwKKwkweGZiNmIwOGJkLCAweGRmMjk4YjQ3LCAweDA3ODg3YjMwLCAweGQzODllYWY2LCAweDFkNmY0YzFjLCAweDFmMmNlMTJkLAorCTB4ZjA4ZWNjMzcsIDB4YjBkNzZlYzIsIDB4MDZlZDhjMmIsIDB4ODNmYjZiMzcsIDB4MWJhNjI4ZjQsIDB4ZWUyOGJlZmYsCisJMHhmMzJlZDJhNywgMHgzMDY1Y2Y5NSwgMHgwZjYwYmNkZCwgMHhlNTE1YjkzYywgMHg3ZmIzODcyZiwgMHg4ZTVhMzJiNiwKKwkweDI0YmJmOTViLCAweDI5YmQyZThkLCAweDVmYjE3YWFiLCAweDMyYTVlOThlLCAweGU1YzMxZGMyLCAweDdhNjc4ZmJmLAorCTB4NTdkYzM2N2EsIDB4N2QxMjdjMDAsIDB4ZDJiYzVkYjIsIDB4MjU4Y2NjMWUsIDB4ZThkMzFmZmMsIDB4ZmIyMzdhMGYsCisJMHg5OGEzNmFmNSwgMHhmNzk2ODU2ZSwgMHhmNTllM2NmZCwgMHg3OTdmOTIzOCwgMHg0MzdkZGYzYywgMHg3YmIzZWYzOSwKKwkweDNlYzQyZWZiLCAweGYwYzkxZTVhLCAweGYyYzk3MzFjLCAweGJjYjE5NTYzLCAweGI3ZGZlNjBmLCAweGM1ZmMzMGY0LAorCTB4YmNlYzhhYzcsIDB4NTVlZDhlNWYsIDB4NzNmYWRlNTksIDB4OWY4NDFhOWQsIDB4OWFjZmE3NWIsIDB4ODZkZmM3MjUsCisJMHhlMWJhYThmOSwgMHhkNGRkZTRhMywgMHg1NTk1ZmNjZiwgMHg3ZTZlZDA5MywgMHg3MDUzZWRjNSwgMHhmNjlhZjZkZSwKKwkweDQzNjlmYjI5LCAweDRhZmNmM2Y3LCAweDk3ZDQ3ZmIzLCAweGY5OGM5ZGVlLCAweDc2MDc2NGQ1LCAweDFlN2VhNDFjLAorCTB4MTE2YTczOWMsIDB4ZWU5ZmQzZDYsIDB4M2VmNTg2OWIsIDB4ZTE3ZDZmNmYsIDB4ZWI3NzA0NGYsIDB4NWViMjNmOGEsCisJMHg2ZmI0N2Q3NCwgMHhkODVmYmUyNiwgMHg1ZmFlMWJmMywgMHgxNmJmZjJiZCwgMHhiNmFmY2U0MSwgMHhjZmQxN2E0YSwKKwkweDdlOGQxYWUzLCAweDFlNmY4NjQ1LCAweDdjYWU1N2VhLCAweGM4ODFmNTlkLCAweDdmOTIyM2VjLCAweGY4ZmRmZWRlLAorCTB4NWJiZGU5Y2UsIDB4ZGRhODUwNWUsIDB4ZDViZDg4ZDIsIDB4NWM4MWFhOWMsIDB4OTQ2NzZiOWMsIDB4MDY5MmI0NjAsCisJMHhlZDNkNGE3YywgMHg4ZDE4MmJhYywgMHhhNDU5ZjE3NSwgMHg1Yjc0Yjg5YywgMHg0YjE4MWY4OCwgMHg3ZmQ5YTA5MSwKKwkweDE2ZDJkZGE4LCAweGYyNDJiZjE5LCAweDE5ZjQxZDgyLCAweDdkMjk3ZjVhLCAweGYzZGY3YWU3LCAweDkxNjg4NTdiLAorCTB4ZGY3NzYzZGYsIDB4Zjc1Y2I1N2IsIDB4ZmMzODcwNjAsIDB4YjA5YjE5YWUsIDB4ZmQ3NmU3ZWUsIDB4NzdlOGQzMjYsCisJMHg4NzJmNGQwZCwgMHhhY2ZmY2U1NywgMHhlYWNlNWZiNiwgMHhiZGI2NjVmYiwgMHhiOTAwNWVkMywgMHg3ZDMzZmNlYiwKKwkweGZlNzY3NDRjLCAweDNmOWNjMWM5LCAweDExMmJiNGFkLCAweDU3N2Y5NzRhLCAweDcyNDY1YTc4LCAweDY1Yjc4ZDdjLAorCTB4MDdlN2U0MjQsIDB4ZTM0YmVmYjUsIDB4YWY4MjQ2NWIsIDB4Mzg0ZTdjZTksIDB4ZmY1OTcyNWEsIDB4ODVjOTZhY2YsCisJMHg0N2YzYWJiZSwgMHhjOTkyZDQ1MSwgMHg5OTJkMDNkZiwgMHg0NTgyZmY2OCwgMHg4ZmY4NTNkYSwgMHgzYTc4YThlMCwKKwkweGQyZGRlMzY5LCAweDBjYjdlMTBmLCAweDI2ZTg3ZTQ3LCAweDFhNzFmNWU0LCAweGU5MWYyNWMyLCAweGE1OGZiZTY5LAorCTB4ZjllNjNiNGIsIDB4YmQ5YmY2MzksIDB4N2FkMDdmNTQsIDB4NzA3Y2E5YmIsIDB4OWFkZjljYzAsIDB4MDNlN2VkMmUsCisJMHhmYTZmZTI0MywgMHhjM2ZiZWRhOSwgMHgyMTNjOGU3MCwgMHgzZmQ3ZjViYSwgMHhkNGYzOGRhMywgMHgzYzcxOWQ1MywKKwkweDBhY2ZhNmFhLCAweDZlMWY0ZWI3LCAweDgwZGJkZjI5LCAweGYxM2E4ZmVmLCAweGYxMTI2YjdkLCAweDYzOThhNWU1LAorCTB4OWU1ZmNmMmEsIDB4ZmI0OTRmNjcsIDB4YmU3OTBiY2QsIDB4ZTcxNzljMjQsIDB4ZmY4MjE3ODEsIDB4NjdjYTU4ODUsCisJMHg3ODkyYmU0MywgMHgzZTNhZjNkNSwgMHhmMmJmZTc0MywgMHhiMDQ5NDVhMywgMHhhZTk0N2VkZiwgMHg3ZDNjZjlkYiwKKwkweGRlM2E5NzQwLCAweGVmYTQ2YzFhLCAweDJlM2Y0MzY0LCAweDg1NjkzODJmLCAweDJjNDllY2RlLCAweGRhZWMxYWIzLAorCTB4ZDgxY2YzZWIsIDB4ZTQzNzhiNTcsIDB4ZDY3NDhjMzksIDB4MTBlMGFkYjAsIDB4ZWNlMjFjNDksIDB4MjAwN2FiMzYsCisJMHhmNzAzNTgzNywgMHhkODZmN2U0MiwgMHgwNWY4YjZhNiwgMHg1NGJjM2I5NywgMHhjMGYzYWNmZiwgMHg2OGI3YThkYiwKKwkweGU0M2U2YzQzLCAweGUyZmRiZDZkLCAweGNiMTIyM2Y1LCAweGRkMGU3MDBjLCAweDljODc1ZTY2LCAweGQ4N2U3MzE2LAorCTB4MDRmZTczNmUsIDB4ZmZkZTgwY2UsIDB4YTBiY2JiN2MsIDB4Yzg3MDVmMzksIDB4ODNlNGZmOWMsIDB4OWM4MTY3NWIsCisJMHhiZGZmNTVjYiwgMHgzZjg5ZjQyYSwgMHhmMzg0Mzg0ZCwgMHg1ZTE3ZDNmMSwgMHgyY2ZhYzY4YywgMHg0MWQ5NGJmZCwKKwkweDcxYTE0OWU4LCAweDBhNmViNDIyLCAweDU2ZmYwOGY0LCAweGIyZTNlOTg1LCAweGY4MWU5MTc4LCAweDgxMGYxZTgxLAorCTB4OTNhNDYxOWQsIDB4NjgzZmUxMGEsIDB4ZmViY2I5NGQsIDB4Y2IzMmQxMTksIDB4NTk1NTc0NGIsIDB4NjRlMGJjYjcsCisJMHg1N2JmNTc0MSwgMHg0M2IzYWNiNiwgMHhiNzFkMGJjZSwgMHg5YzJmZmRhNywgMHg2YWVjMzc1ZSwgMHhkOTY0YTNjNSwKKwkweGM1NjM3NTU1LCAweGQ2MmRmODA5LCAweGY0MDEzYmJlLCAweDg1NGJmYzU3LCAweGU3ZTI4YWU1LCAweGJlMGFiZDA3LAorCTB4Y2U2M2I2ZGYsIDB4OWFjZTljMGQsIDB4ZWRkMGY4YzgsIDB4MmFmNzhiN2QsIDB4YmJjYTI4YzEsIDB4NWRiYTQ5NDYsCisJMHg3ZDYxNWViOCwgMHgxY2QxYTRiZCwgMHgzNmI2NTc0NywgMHhkOWE2ZGUyNCwgMHhmNzc4YmU1YywgMHg5Zjg2ZmZmZSwKKwkweDE4ZjFkY2JlLCAweDFlNWMzM2M3LCAweDA1NzgxODI3LCAweGE3YzU1YjdhLCAweDE1M2RlZDgyLCAweDMzMGRiZjliLAorCTB4MmQ3OWNiOTcsIDB4YmZlMWU3ZDQsIDB4YWVlMWUzOTYsIDB4Y2YzYTU1OTIsIDB4ZDBjODkzYjcsIDB4NTc0YmYwZjksCisJMHhlMTA2NmE1MSwgMHg4ZGU2YWFmZCwgMHhiZDliOTRhYSwgMHg3NTk3ZWNjNSwgMHhiMGNlMzlkYSwgMHg5MTgyMjFjYSwKKwkweDI4YTFjZjA0LCAweGRmNDVkN2JiLCAweDYyOGZhZTJmLCAweDE4NTE2MTc5LCAweDljZjk5ZmM5LCAweDQzOGU3MDhhLAorCTB4ZGRhMGM0ZjQsIDB4OTY1NDc3YTksIDB4MjVlMmFhODMsIDB4NTcxZWFhMWUsIDB4NTZjNWIwMDIsIDB4ZmM4YTQ4YzEsCisJMHgwNGJmMzIxMywgMHhkMjU1MjZkZSwgMHgzZjAwZDc4ZiwgMHgxNzk4Y2RkNiwgMHhhYjZmNTI0ZCwgMHgwM2Y3MDZiNCwKKwkweGMwZTc5ZDJmLCAweDRhYmQ3MzM2LCAweDM4ZDFlNzlhLCAweGVmZTY1OWM4LCAweGViOWRhMmQ1LCAweDM2ZmVlY2Q3LAorCTB4NjBkZGY4Y2MsIDB4NTI3ZDY1ZGYsIDB4Yzg1NTZiZDcsIDB4N2FhNzA0MzMsIDB4YjNjYjA0NDcsIDB4NDAyMzk4YzQsCisJMHhlZjE0YWI1NywgMHgyOTE1MGVjMywgMHhlZmEwZTM5ZCwgMHgyZjk2NGUyNSwgMHhlNzk0NmVlNiwgMHg4MzhjMzM0NywKKwkweDBkZDc4MzkwLCAweGFlNjdiOTY2LCAweGJlMDRjZGUyLCAweGQ2NzBiYWM0LCAweDFmZGNhOWE3LCAweDY0ZTU4YmRlLAorCTB4NGU0ODQzOTYsIDB4N2RhYTM5NjYsIDB4MTJlMzlkOGUsIDB4ODI1YWYzOWIsIDB4MWY5YWM3OTAsIDB4MGFkMGYxNDgsCisJMHhmM2U0N2YzMiwgMHg5NjcwOWVlOCwgMHg0YWE3OWE3YiwgMHg1ZDc5YTdiOSwgMHgzMWZmNmUxZiwgMHgzOTBiZWI0MCwKKwkweGY5YjllMjVhLCAweGI3MWUxYzllLCAweDg5ZGIyYTlmLCAweDIwMGY1MjNlLCAweDdhMTMzYWI5LCAweDQxZTVjMTAyLAorCTB4Njc0NzJlYjksIDB4YjA0YWZhYzUsIDB4OWJmY2ZhZWUsIDB4ZTBhM2RiNjMsIDB4ZjFlNTEyYzcsIDB4ZDg2ZTRiZGYsCisJMHhlZDg3OWRhMiwgMHhmMDAzYzJlYiwgMHg4YTU0OWM1MywgMHhmNjBjNWEwZSwgMHhlNDMyNWJhOSwgMHhhYzcyMzFmOSwKKwkweDhmNTZhYjc3LCAweDk2NjUxOWZkLCAweDgwZmY3N2E5LCAweGQwN2IyOWUwLCAweGU5NDg2ZWUyLCAweGY1ZTEwNzVhLAorCTB4MjdmZTYyNjYsIDB4ODNlNzg1ZDcsIDB4OTU4ZTQ2ZWUsIDB4Nzk2M2E3ZjYsIDB4MGU0NzlmOTIsIDB4NzNiZjFjMTcsCisJMHhlZGVmZDZiYiwgMHg5YTUzMTYxOSwgMHg0OGY0NDExOCwgMHg5NDJjOWNmZCwgMHhlMWE4ZWRmNiwgMHhhNDA3NmM0NSwKKwkweGJiYjliYTM1LCAweDE5MzU5MDM4LCAweGIzMmE5Y2YyLCAweDlhZmVmZDE3LCAweGE0ZTllMDZlLCAweGRlNTJmMThiLAorCTB4ZDk0Y2I5M2QsIDB4NzJmMmUxMjQsIDB4NWZjOGRmYmMsIDB4ZjBmZGIzODUsIDB4ZThkZTc2YTQsIDB4MzQ3NDQxZWIsCisJMHg4ZDcxY2Y4MiwgMHhlOGQzYWQ5ZiwgMHg3NGNmNWQ2NiwgMHhiOThiYTI2MywgMHgzNzQxYjc5MCwgMHhkOGI5ZTQ3MywKKwkweGZhZGE1NzQ5LCAweDdhZjBkZDEyLCAweDQ4NWQxM2I3LCAweDZiZTIxMWJhLCAweDRiNzQyZmI0LCAweGRmNDQzYjc5LAorCTB4N2JiN2Q0ZWEsIDB4MGU4OGI3ZDAsIDB4NmRlOGM4OWUsIDB4MDc0MjE3YTgsIDB4ZjExODFhYzIsIDB4MjUyY2ZjOGYsCisJMHgyYTQ3NjJhMywgMHg1NjQ5MDRiNCwgMHgyY2RjNDdlMSwgMHhkN2M2NDZjZSwgMHg0YWMwZDY1ZCwgMHg1NWJmYTc4MiwKKwkweGFiMDBjYmFlLCAweDY1M2EzYmE0LCAweDVjZjkxMWZjLCAweGQ5Zjg4YmRmLCAweDBiMTdmYmUyLCAweDRlMmZkNTJmLAorCTB4NGFiNzZjMTIsIDB4MjYyNmY5MjcsIDB4YTQwOWRiOGUsIDB4YjBhYTA3NzAsIDB4ZjY4YTUwZTcsIDB4ZmZiMjMxYzUsCisJMHhjNDZmYTI2MiwgMHg1ZTdmNTFiMywgMHhkY2M2OWM0YiwgMHgyYTdmYzI0NiwgMHhmYjQwN2U1OCwgMHhlZjZlN2NlOCwKKwkweDVlZjZjOGI3LCAweGQzMDNhNTJiLCAweDVmNmEzZWU0LCAweDJiZjhjNjE1LCAweDI2NDA3M2JlLCAweDU4ZDI2NGU4LAorCTB4NjYyNDlkMzMsIDB4NGY0MTM5NGEsIDB4YmFkZDMzMWIsIDB4N2UwODkwZGMsIDB4OTgzOGQyNTAsIDB4ZjA4Njk5Y2YsCisJMHhkODVkYWFhMiwgMHg3ZDQ4Y2ZhNywgMHg0ZGY1NzhhMywgMHhiZTAwNDc5MywgMHhkODNkZTM2NywgMHhlY2E3YTdjMiwKKwkweDQ5NGFmZjYwLCAweDdmMWY5Y2UzLCAweDViNjUzZDA4LCAweDk4ZGY3ZjM4LCAweDc4MGY3YmU5LCAweDE3YjhhZDNmLAorCTB4MjUwZmEyZWMsIDB4MjdiMTVmMzMsIDB4Y2I1ZjdiNTIsIDB4YTNiZjczZDQsIDB4Yzc3ZjhhNzQsIDB4YTYyMzkwZGIsCisJMHhmZWI5NTBjYywgMHhiOWVkMjExNCwgMHgzMzhlNTFhMiwgMHgzNWI5ZmZkOSwgMHgzYzliZmE5MSwgMHg5NGYwZTE1YSwKKwkweGYyNTc3MGI2LCAweGI0NTVmODMyLCAweGQxYTYzZGY1LCAweDk4Yjg0Mzc3LCAweDcwMTM5Y2ZkLCAweGNkNGNjODBkLAorCTB4MjQ4MjFmODYsIDB4ZTRlNDZlZDQsIDB4ZmQ1YTk5MDEsIDB4YzgwNmNhMzEsIDB4YzljNzAzNDMsIDB4NDdkN2E3ZmQsCisJMHgyZDM3ZTgzZiwgMHhjZmI3ZWU1MywgMHhlN2E3N2RiNCwgMHhiZjVjYWYwOSwgMHg1YjU4NGQ2YywgMHg1YjUyMzQ1YSwKKwkweGYzYTUxMDcwLCAweDAzOWVjNmIyLCAweDJhOTQ5OTlmLCAweGRlMDdhYzI2LCAweDRkOGFhYTdmLCAweDMxN2I2ZjBjLAorCTB4NGNhODg1ZjMsIDB4OGY4MmY4MzcsIDB4ZmJhNjU5MTQsIDB4ZWU5OTgzNmQsIDB4YjdiNGM2ZGIsIDB4YjZmOTQ5ZGQsCisJMHg3ZWQyMzkyZCwgMHgwYmYzZTlhNywgMHg4MmU1ODI1ZCwgMHhlZjkyMzFiNiwgMHg2NDg5NmZiNSwgMHhkNWNjNzNmZSwKKwkweGVkMjcxNTFhLCAweDk3ZGZhYzVkLCAweGQ3ZjEyNDZhLCAweGUxN2I4NmJhLCAweGRhNzUyZTM3LCAweDJjN2U3MGRiLAorCTB4ZmIzYTYwN2MsIDB4NDk5YjRiZmIsIDB4ZmQ1YzQ3YmYsIDB4NGY3ZWIzNWEsIDB4NjY1ODc4N2EsIDB4YTg3YWZhMzcsCisJMHgwMTlhMGU1ZSwgMHg1NWFkOTUxZCwgMHgzNjA3MGU5OCwgMHg5OTdkZWM3OCwgMHhjYzJlMjljZiwgMHg0YzE5Y2NhZiwKKwkweGYzMmZmZjA3LCAweGYwNWM3Mzg0LCAweDM3ZmI3YTY1LCAweGIwOTFmNzg0LCAweGJhMGUwYjFmLCAweGQ3YzgzYTFhLAorCTB4MzcxNmUzMGIsIDB4MWE3ZWIzMTUsIDB4ZmU2M2VkOTksIDB4YmMyNTUwMzUsIDB4ZDRjZjFkMTAsIDB4ZWMxMjZmZTgsCisJMHhkNjRiZTBhMCwgMHg5N2Q4YmVkNiwgMHhkZjY4NjVhZiwgMHg0ZTk5NWNlMywgMHhiZTcwZWJhNiwgMHg3MzY2ZDA2ZiwKKwkweGI2YmUwMjY1LCAweDljMTZlMTU1LCAweDRhNTY5M2I3LCAweGU3N2RhNmZhLCAweGJiODBiZGMwLCAweGZjMDIyMmFjLAorCTB4N2VkNmI4ZTAsIDB4ZDE2YjBhZmUsIDB4NzdmN2NhNDYsIDB4MWM1NDZiMDgsIDB4ZTk4ZjJiZTgsIDB4ZmJlNTkwM2IsCisJMHhlOWY3ZWIwYywgMHhjODI4YzQyZiwgMHhkNzZiYTUwZCwgMHhmYTM0Yjg0OSwgMHhlMzIzZDYxMCwgMHg0ZjljNjllMywKKwkweGMzZTRhNGI3LCAweDUzZDNhMGFlLCAweDc2NmM2YjIwLCAweDVkMDMwOGU2LCAweDFlOTg1MGNjLCAweDYwODczZTY4LAorCTB4NTU5NzlkOWYsIDB4ZmE3MjhmOTIsIDB4MzJmNDFmYmUsIDB4MWQzMDZjNjksIDB4NmE4NWQ4NzEsIDB4NzZhYmM3MjUsCisJMHhlMjBmMGEyNCwgMHgzYjQ0M2E4NywgMHgyNDFkMjNjYiwgMHhlYTNmODA4ZiwgMHgyN2U3NDY3YywgMHg0NzVlMTc0NCwKKwkweGViN2FkNzQyLCAweDNkNmI2NTdjLCAweGRlNzg0NjgxLCAweGY0ZTBlZjU2LCAweGIwOTc3YWE5LCAweDVlZDg0ZjEyLAorCTB4NjdmOWM4OWYsIDB4YjY5Y2RkZWIsIDB4ZjdmMTY3ZDQsIDB4OWMzZGVhZTcsIDB4OGEzZjU5ZGYsIDB4N2JkNDJmZjMsCisJMHg3ZWJiYmYzOSwgMHhhYmJmYTcyMiwgMHg4NGVmZTIyZiwgMHgzYTRiZTYxZiwgMHg5M2Y5ZDFkZiwgMHg5ZjNhNWY0ZSwKKwkweDA1YWJhNTBhLCAweDMzZGM2Njg0LCAweDBmY2NmNmEwLCAweDc5ODgzZTc1LCAweGY4YmJmMjU4LCAweGE5Y2ViZTkzLAorCTB4MTEzZjkxNGEsIDB4Y2ViNDUwZmMsIDB4NTQyOGZmMDEsIDB4MjJmMzNlY2YsIDB4ZGNhM2I5ZTEsIDB4MWRhMWYxYzksCisJMHgwZWMxZjI0MiwgMHg4ZGNmODNhNywgMHgwZGQ4YmI2NCwgMHgzMmMzNDBmYiwgMHg4NjlkZGI2ZiwgMHhiOTVlNzg3MywKKwkweGJhMDZhYzIyLCAweDVjMzZhOWJkLCAweDdkNzQwZDU4LCAweDI5YWM1ZDczLCAweGZkZWViZjNmLCAweGZmNTBmYWQ3LAorCTB4MmRmMThiM2YsIDB4YmIxY2ZhYzIsIDB4N2ZhM2Q0ZTMsIDB4ZGY4ZmVmYTQsIDB4ZWIwMzNhNzEsIDB4Nzk2YzcwNGUsCisJMHgxZWRlZTMwOCwgMHgyYWQxYzFhMSwgMHhjZWRkYmFlMSwgMHgwOGMwZDJmMiwgMHhjZmUxNGZhOSwgMHgyZDczODg2MSwKKwkweGZiN2Q4OTRlLCAweDMxZTcwNDM3LCAweGRhMDYxZDZkLCAweGMxNDZiMzVkLCAweDc1NGFiMzJlLCAweDFmMmFhNGFkLAorCTB4ZmJlOGJkNjMsIDB4MmFmNWI1OWYsIDB4N2M2MzBiYTksIDB4ZmI2YTM0OTYsIDB4NGNmZjE4ZDQsIDB4NTdkZTNjZjgsCisJMHg3OGE3NWNiMCwgMHhlOTFmODA4NSwgMHg0MWVjMmZmOCwgMHg3MWM0MTE5MiwgMHg2ODUwMTFjNSwgMHhhZDk0ODUxYywKKwkweGFlMTdiMGY5LCAweGU0MjhmZDc5LCAweDEwZWVhNTc0LCAweDg3M2VkNWNiLCAweDg0MjhlMzkzLCAweGQ4ZDY3NmRmLAorCTB4OTA3NzUyOWYsIDB4ZmVkNjg5ZWIsIDB4YzhjODM4YTYsIDB4ZjgzYjVlZTEsIDB4ZWIxYjY4MDUsIDB4NDA3NTkyNTYsCisJMHgyNjhiOWY2MCwgMHg5NGYxZWY4NSwgMHhkNmNiZGY2OSwgMHhlMmY4YTYyOCwgMHhlNjU1MzM3YiwgMHhhYzMyODc4YiwKKwkweDE0Y2EwZTljLCAweDg5YTUxMzlhLCAweDVlOWQyOWNmLCAweDNjNzA3Zjg5LCAweDllNTM1OTYzLCAweDJmODE5MTdkLAorCTB4NGJkZjY4OTcsIDB4NzhhNjJjYjMsIDB4MzIxOTQzYzcsIDB4OTgxMDZhMmUsIDB4Njc3N2E1MDUsIDB4MzIxN2RhYTUsCisJMHhkYzczNzNkZiwgMHgyNGJmNWViZCwgMHhlYTc1N2YyYiwgMHhlODgzZjQ3MCwgMHg4ZmY2YWVhMCwgMHhkZGI5NWE2NCwKKwkweDg0OTcwY2ExLCAweDU5ZTc0MWM3LCAweDc0ZTljNzE0LCAweDcyZTgyZTdiLCAweGVmZjhhN2NjLCAweGViM2YwYzk1LAorCTB4M2VjZjE1NTksIDB4N2JmYzJjZmQsIDB4ZTMwYTdmMTUsIDB4OTg2MmE5ZjMsIDB4MGVjOGRmNjYsIDB4ZjJjZTljOGMsCisJMHg4Y2E5ZDc4ZiwgMHhkNzJkZmM4NCwgMHg3ZmQzZmM3ZiwgMHg1NDdjNDY4OSwgMHg1NzY5NGVjZCwgMHg2OTBkYjRhNSwKKwkweDZjZTVlZGY1LCAweGQwZjZhYjU3LCAweDlmMDM4OGZlLCAweDVmY2RmYjM1LCAweGQxNGZmNjdkLCAweGY4OTdhY2FkLAorCTB4NWJmOGI0OTMsIDB4ZGVhYWY3OGUsIDB4YzBlMzgyNzksIDB4ZDBhZmI4ZjQsIDB4MzdjYTM1NzYsIDB4NzFlYWE3YWMsCisJMHhiNjNmYmEwMSwgMHhmNzhkOWY3MCwgMHg4NTFlY2Q0ZCwgMHg1ZDlhOThmNSwgMHhlN2MwMTMxNywgMHg0YWFkZjY2YSwKKwkweDI3MmUyZWU4LCAweDVlM2Q1ZmI0LCAweGQ1YmZiNzQwLCAweGMzOWZiNTg4LCAweGMzODQ0ODdmLCAweGZmYWQwZmY4LAorCTB4YWY1NDY2NzYsIDB4NjIwNTQzNTMsIDB4M2I2MGFlZDUsIDB4MWM3MDU1ODgsIDB4OGUyZDcyYzcsIDB4YzE5MDIzYjMsCisJMHhlNDllZTE3ZSwgMHhjNGY1OWFlZCwgMHhlZGJmNDlmMCwgMHgxMDYzYmFiMCwgMHg4ODQxN2NhZiwgMHg1M2FkZGQ4OSwKKwkweDdlNzkyMGZjLCAweDA0N2RhMzlmLCAweGVkODVmMGJmLCAweDE3OTFjYjJhLCAweDdlZjE0N2I2LCAweGZmN2VkZWE4LAorCTB4NTVkYmM0NDEsIDB4OGRkODU2NmYsIDB4MzA4ZTI1NTcsIDB4YWE3N2FhZGUsIDB4MGZlMDYxYzIsIDB4YzUwYmIwMzUsCisJMHhkMmU3MGNmNywgMHg0MTZhYTNhNywgMHgxNDVhNGI1ZiwgMHhhZGY4MTZlZiwgMHhkZTk4ZWUxZCwgMHgzNWRhNzgwNiwKKwkweGQ2MWE1YWZhLCAweDQ1ZDc5MjMyLCAweGY4MTRmZjgzLCAweDVjY2U0MTlhLCAweDhlN2VmN2IyLCAweGU3N2FhNDEzLAorCTB4NmRmOWFlNTksIDB4NTFiM2M3MjQsIDB4Y2UwMzZmMGYsIDB4ZDgwYTFiMzMsIDB4NjVhNGJkNGYsIDB4MDVjYjM1NDcsCisJMHgxMDVkMjNkYiwgMHhjY2RiNGU2OSwgMHhkMWJlMjlmNywgMHg5MzQ2ZmJjNiwgMHg0ZmMwY2VkMywgMHhhYWNmZjY4MiwKKwkweDRlMDMwZjJjLCAweDVhZDNjYmVjLCAweGNlZGVhYjNjLCAweGIzYjY0ODMyLCAweDBkZmI3ODY4LCAweGFlODhlN2Y2LAorCTB4ZGE1YTRiZmEsIDB4ZmVhOWQzYTIsIDB4ZTdkZmJiMjcsIDB4ZWU0ODM5ZDQsIDB4MjNjZTI1ZTMsIDB4M2Y0NzM4YjksCisJMHhmN2M5MTlkOSwgMHhmOWQ5M2VlZCwgMHhkMTJmMDllYiwgMHhjNjVhZTc3OCwgMHhmYjBjNTJmNCwgMHgxYjIwZTA2YywKKwkweDQxYjczZmQ3LCAweDI1ZjMwMWM2LCAweDVhMGZkNjExLCAweGI2NjczZTc4LCAweDI3YWMyOTI3LCAweDlmODRkZjAzLAorCTB4OGY5ZjNiMzMsIDB4ZjYzZWYwYjYsIDB4YWI3MTdiZmYsIDB4Yzg2YjE1YjMsIDB4YjJlYjg0N2QsIDB4NWJmZTgwNDcsCisJMHhlZDExZmJiNSwgMHg3ZmU1ZmQ5YSwgMHhlZDZhZmZhNywgMHhhNDUyOWI3YiwgMHgzYmVmMjM4ZCwgMHhjMjBlM2QwOCwKKwkweGQ1M2JlZGE1LCAweDc5NmVmYmM5LCAweDJmZWY5ZDk0LCAweGJlZTYxODJjLCAweGU4ZjgxZTcxLCAweDUxOGUzMjliLAorCTB4MDQzZjc3ZjQsIDB4M2JjMTZmZmQsIDB4NTk2ZjZjZjEsIDB4NDFmNzczNmUsIDB4MzZjMzhiZmUsIDB4MjgyYzEzZjYsCisJMHhhMWY1MWNmMCwgMHhlZDlkOGM3ZSwgMHg3NWIxMjI0YSwgMHg2ZGFkZWMwNCwgMHhhOGJlNTIyOSwgMHg5MzNiNDM1YywKKwkweGU4OGZkYzUwLCAweGFjZjg0ZmNkLCAweDhmODQ1ODBjLCAweGE1MDc5M2YyLCAweDUyM2ViYWYyLCAweGQ5ZGFmMTZlLAorCTB4ZmJlNDEzZmYsIDB4YzJlY2M3OTIsIDB4ZmUyZjdiOGYsIDB4NWQ3ZWE0ZTcsIDB4MGVmZDJhOTksIDB4NTE3ZjYwOGYsCisJMHhjYzE3MTk1YSwgMHg0ZWRkODc4YywgMHg2OWNhOWJhMywgMHg5ZmEwNmU1NCwgMHg0Y2MxNGRjYSwgMHhlZDY3NGZjOCwKKwkweDcyODkxZWQyLCAweGY5OTU0ZGU4LCAweDQ2ODM1ZWIyLCAweGZkMDdlOGE3LCAweGNlYjhhNWI2LCAweDJiYmJiY2IzLAorCTB4YjBlZjQwNGEsIDB4ZWQyNTE4YmMsIDB4ZGYwOWJmMjEsIDB4YWYzODY2MTQsIDB4ZTkyNDFhNmYsIDB4MDdmMzQxYjgsCisJMHhmODQ4YjdmYSwgMHhmOGU0MTcwMCwgMHg0Y2E2ZjYyNSwgMHhiOGZhYjljOCwgMHg3ODliYTI0YiwgMHg3OGRhYjNiYywKKwkweGE0OWEyMjRiLCAweGM3OGI0NGZmLCAweGRmMWU3ZDQzLCAweGQzYmZkODI2LCAweGNiMTg2NGZlLCAweDFlZmJhN2NiLAorCTB4OWZlMzAxNzksIDB4YzczMDcyN2UsIDB4MDRhNWI0MTEsIDB4ZjJlNmVkMTYsIDB4YWVlMzhlNzAsIDB4MDgyYzJhNzgsCisJMHgzMjdiM2Y3OCwgMHg5ZjU4ZWQ4YSwgMHhmNjFjYTRkOSwgMHhjYjAyNTQ1OSwgMHgxZWEyODc2MSwgMHgzYWZlODA1YywKKwkweGUwMjk4NzM2LCAweGMyMjk5ZmEzLCAweDJkZjI4ODllLCAweGE4MGU1OWJkLCAweDNmNjNhZmE4LCAweDE3YjEwNTQ5LAorCTB4NGU5NGFmYzgsIDB4ZDlmN2RjODQsIDB4Mjc2Y2MxOTYsIDB4OTUwZGVjZmEsIDB4ZjdkMDI5MmYsIDB4MTNlZWY4MzUsCisJMHhjNjdlMGI0ZCwgMHgzZmY0YmZmMiwgMHg2ZmVhN2U5ZSwgMHhhZmYzYmI4MywgMHhkYjM2NmM1NCwgMHhkN2Y1ZjRjMywKKwkweDI0MThlZmNiLCAweDBjNzcwM2VkLCAweGNhYzk3YTkyLCAweDdmZTkyZTQxLCAweDMwNzk2YzhiLCAweGY5MjllNzk1LAorCTB4ZWIwM2FkMDMsIDB4MTMxZmI0N2YsIDB4ZDYzZjZmNjAsIDB4NzE0MTI3YjIsIDB4Y2NjMWNmMDIsIDB4ZGJlZjAzNWYsCisJMHg3YTc1OWVhNCwgMHg0MmZkOGRiYiwgMHg3OTQ2MmYxNSwgMHhlNzc0ZmVkOSwgMHhiMGVmN2MxNSwgMHg3ODcyOTU0MiwKKwkweGRiZGU0NTg1LCAweDk5ZWVkMGFiLCAweGIyNjc0NDU2LCAweGNkZjA4YjdkLCAweDE2ZmI2ZDdhLCAweDhlNDcxYjU1LAorCTB4MDFkNmQ5ZmIsIDB4ZDQxMDlmZDIsIDB4ZjBlNDJmZjIsIDB4NzE0OWI4M2QsIDB4MmM2OWU2ZTIsIDB4MDVjODZkNWYsCisJMHg4ZTZlMmY1ZSwgMHgxYTc5ZjhlNCwgMHg4N2I4OGJjNywgMHg1Y2ZkOWY4YSwgMHgxMTY2MzNlMiwgMHhhZTc0MDdlYiwKKwkweGQ0YWU3ZjMxLCAweDlkZDU3M2Y4LCAweDVlZTBjNzU3LCAweGU1NDc3ODgxLCAweGFkMTcxMmZiLCAweGJmZTAzZTllLAorCTB4NGY3YWY4YTEsIDB4NWY0YjYzZTMsIDB4NDFmOTk0NzgsIDB4YzQxN2VkMjUsIDB4ZmNkNTJkNTksIDB4NTI5ZjRiY2IsCisJMHhiYTVjOWU1OCwgMHg5ODg3ZWFmYSwgMHgxMzZkYmVlZiwgMHhiNjcwNWZiOCwgMHhlMzY4ZmVlNSwgMHhmOGQ1ZWM3YSwKKwkweDBmN2I1NzY3LCAweGY1NGE1ZmQ3LCAweGEzMzdmYjY1LCAweDM2YWQ5ZTE5LCAweDVkMDllMDBmLCAweGZlZGRlZmM3LAorCTB4NmE1ZmY1MjksIDB4ZjI0MmQxNWYsIDB4ZjNlNWVlNDUsIDB4ZGM4ZTI4YmYsIDB4OTVmMDI3ZjYsIDB4Njc2Y2UxZWQsCisJMHg3YmU3ZjVhMywgMHgyZDZjNjc0NiwgMHgzM2ZmMzA4YiwgMHhiZjMzODRjZiwgMHhmNzJiMTMzOSwgMHg5ZTc0MjdmZCwKKwkweGU3ODBlZGZhLCAweDVkYjFmNzg3LCAweDAyZTliZGVkLCAweDgwZTJkMGU3LCAweGFlMWQ1ZmI5LCAweGFmZGYxYWZkLAorCTB4YzBjNGY3OGEsIDB4ZWI0NTUzNGYsIDB4N2Q2OGZlODEsIDB4ZGZlZGM0N2UsIDB4ZDBmYjcxYjEsIDB4NzY4ZTNjZjksCisJMHhmNGZiMGMyMywgMHg5YmE2NDg5OSwgMHhiYWU0ZmQzMywgMHgxMDc2Nzk5YywgMHhiMTZkNjc5ZiwgMHhkZTA5ZGU5MiwKKwkweDY3NGJlODY0LCAweDFiOGE2NTYyLCAweDBhODdhMDNlLCAweDMzODdhNDk3LCAweDFlZDg1YTYzLCAweGMxZDk0NjcwLAorCTB4YjY0ZDliNjksIDB4ZmNkM2E4YWIsIDB4ODk3ZjQ0ZGEsIDB4MjZkMDFmYTAsIDB4YjU4ZWE5ZWMsIDB4ODBjNzIwNDcsCisJMHhlN2NjOGZjZiwgMHhjZWZiODgzNCwgMHhkMDczNzZhMSwgMHhiZWJmY2UyOSwgMHg4NGRjZjI1OSwgMHhjZjNlMDU3OCwKKwkweGUzZjYxYjdlLCAweDczM2RmMGI0LCAweDU2NGYyNjlmLCAweDRmZGNiZjZlLCAweGRjYWE3NTg4LCAweGViM2ZiMGFlLAorCTB4MDJmZTc2OTIsIDB4ZGRiYTVlZWEsIDB4YTk3MmU4OWYsIDB4NmUyMmYxNWYsIDB4YjJlMzY5NmIsIDB4YTVmYmEwMjUsCisJMHg4MWU2ZWJiNSwgMHgyYzc5ZjVlZSwgMHhiNzVmZWVkNSwgMHhkM2MzMmEyOSwgMHgyN2ZiNGUxNiwgMHg3NGYxZjJmYiwKKwkweDhhNTlhYWZjLCAweDVjMjc5ZjFlLCAweDdiNDVmOWZhLCAweDJkY2IyYzM4LCAweDRkYjI4OGU5LCAweGEzNjU1ZmQ0LAorCTB4NDljNzk2YjIsIDB4Mzk1YmY1ZDEsIDB4Yjg0ZjFkM2YsIDB4NWVmYjAyY2QsIDB4YjlkZjc2OWIsIDB4NzBlYmY5YTcsCisJMHg1MjRmMDRmNiwgMHg2ZDRmZTQ5NiwgMHg2ZjllZjIyOSwgMHhiZWYyNWJmYiwgMHgwYTZmYzVmNiwgMHg4MWZlZTI2MiwKKwkweGZhOTFjODNjLCAweDdmMDQ3ZjdhLCAweDcyMTA2ODE2LCAweDk2ZTdjNjhmLCAweDcwNGVhZWMyLCAweGZiMzA2ZTY2LAorCTB4OWIzNmIyNzMsIDB4OWJiNjQzZjMsIDB4Y2QzYmQ5ZjMsIDB4ZTZiZGRjZjksIDB4NzM1NWU3YmMsIDB4N2I3MTg1ZGUsCisJMHhmYTA5ZTE3NywgMHhhMTAzZTIzNiwgMHhiZTg1MjM2ZiwgMHhmYTk0Y2VlZCwgMHhiN2QwZjIzNiwgMHhjNmRmNDI5MSwKKwkweGM4ZGJlODc3LCAweDFlNDZkZjQzLCAweGQwZjIzNmZhLCAweGRmNDI5MWI3LCAweDFhMzlmN2M2LCAweDdiMzUyYTllLAorCTB4ZTM4MWQ2MjksIDB4ZWI4NGY2ZDQsIDB4NWZiYzAwZjEsIDB4NjA0OWNjMmUsIDB4NTJhYzJhM2UsIDB4MjRiMGJkMWYsCisJMHg0ZWM3ZTU5YiwgMHgwNzU0ZDMzYiwgMHgzOGY0OTlkYiwgMHg3Y2EyYjdhNywgMHhjMzdhYjJlMywgMHg3NTY0N2I3ZiwKKwkweGM3NmUxNGRmLCAweGRmOWFlN2Y2LCAweDY1NzNmYjQ5LCAweGY2MTNiODdlLCAweDlmNTVkNjhlLCAweDEzZDg4NmFjLAorCTB4NDQ0ZGYyODgsIDB4ZjZiNjBiZmQsIDB4NTU2ZmMwYWQsIDB4NmZlYzJiZGQsIDB4N2VlMTVkNmYsIDB4ZmQ3MjA3ZTcsCisJMHhjN2EyZWVkOCwgMHhkY2UzMTUyZCwgMHg3ZDI2ZGYwMywgMHg3YjZmYzY0OSwgMHg2YTNiNDYxYywgMHhhYzQ4NWZhOCwKKwkweDNmMjFlNDM1LCAweGExZjM5YjM1LCAweDM1ZjAyMDdlLCAweDM1NWY2OWFmLCAweDZlM2MxZDMxLCAweGJlMGJlZjZiLAorCTB4MDc0OWUyN2YsIDB4YTEzYWYzZGYsIDB4NmNjNGVkZDksIDB4YmE2M2NiMTcsIDB4OGYyOWRmM2MsIDB4YzI2Y2EzZGQsCisJMHgyYjI0YmRmOSwgMHgxYzc3ZGI4ZSwgMHhkM2RkMzBjYSwgMHgyZjRiNGQwYiwgMHhkYWJjYjNlNSwgMHg1OGFiNWY5OSwKKwkweDhjZDk0ZTMwLCAweGFmNTlmYjE1LCAweDczZTY4YzRlLCAweGI2MGQxNmU5LCAweDBkZmY5MDQxLCAweDQ0MGUwZjcwLAorCTB4ZTg2OGU4OTgsIDB4YmYxMGI4YjYsIDB4ZmQ1MzNmNjUsIDB4NDM1M2JiNjEsIDB4NGM0Mzk2ZmMsIDB4MTZkN2QzZTUsCisJMHgxN2I1ZWY5OCwgMHgxZjJhNmQ1ZCwgMHg4NzhjZWY2OCwgMHg5NmZmNDg3MywgMHhkNjRiOWYwNiwgMHhlN2NjZThiOSwKKwkweDRiZDY4NmY5LCAweDg0N2YzYzU2LCAweDI1YmM1NmJmLCAweDlhMzJkM2U1LCAweDdiNDBiNzg3LCAweGZlMWYyMzlmLAorCTB4ZTAxNGVmMzksIDB4MTZjNWJjYWYsIDB4NTRiZWYzOGIsIDB4OWQ0NDg3M2IsIDB4YjcyZTVjZjksIDB4YWUyYmJmMGEsCisJMHg1ZGNhZWU4YiwgMHhlZDRiMWJjMiwgMHgyNTM2YjRiZiwgMHg3MWRkMWQzMywgMHgxNDI1NTkzNCwgMHgyNDcyMTkyZCwKKwkweGU1N2QwODM3LCAweDgyNDYyNzhkLCAweDhkZDRhYWFlLCAweGJmMmEyZWM5LCAweGM1NmMwOTU1LCAweDcxZDNlYzQ1LAorCTB4YTRhZTEyM2IsIDB4ZjhiNGZmZjIsIDB4NzVhMmM5MWUsIDB4ZWYwNWI2NGEsIDB4YmEzZTBmOWQsIDB4YmRlMDRkMjMsCisJMHg5ZjZiMTM5MSwgMHgzY2I4ZTY4ZiwgMHg2ZDkyZmU4ZCwgMHhjMWQwMDhhZSwgMHhmNTk1MjZjNiwgMHhkNGNkZDgxNCwKKwkweGQ5M2EyZWI4LCAweDAxMWYxNGQ4LCAweDhjN2NhNmJkLCAweDcxNzI5N2UyLCAweDBiZGY0OWI0LCAweDlhYTE0N2M1LAorCTB4ZTY5YjhlZmQsIDB4MmE5MGYxN2IsIDB4ZjM2YTQwZWYsIDB4ZjU5MmVlNWMsIDB4YWY2Y2JhNDUsIDB4ZTdkN2IzZGYsCisJMHg0N2QzNTI3YiwgMHg5NmJlMzYyYiwgMHgzZjdkMGI3OSwgMHgyZTdmNzgzYiwgMHhkNjU3ODRhZSwgMHgyZjc5ZTZlZiwKKwkweGRhZGY2Y2I1LCAweDFkN2JkMjk3LCAweGQ3OTg1ZGJlLCAweDQ1YzZiN2YyLCAweDdjZTM0OTVmLCAweDg3YzY1ZGI5LAorCTB4ODlmOWI1ZmYsIDB4NGZjNGZjYzcsIDB4YzI3YTZjZWYsIDB4ODU0MWZiMGUsIDB4MWU4NzYwMzUsIDB4NDZlNGZlNWMsCisJMHhhZTE4ZTIzYiwgMHhiZjkxYjZkYiwgMHhjYzU2ZGEyZiwgMHhiZWZkMDBmNiwgMHg3YzdhYTdkYSwgMHhmMjhmODZiMywKKwkweDE3MDZjYWIxLCAweDYwZmZiM2NkLCAweDIzY2E0ZmM5LCAweGExNGIxYzY0LCAweGRjMzVmYTNhLCAweDRkYjhiODEzLAorCTB4NjZiY2MzYzksIDB4ZTNiMGVkMTQsIDB4MWEzYmZmMWUsIDB4MzdkZDA5ZGYsIDB4MTdhNzg3MWQsIDB4YWJiZDg2ZjYsCisJMHhkZjIwZjE0NSwgMHg4OTk5M2VkMywgMHgwZjQ0NzJjYiwgMHgzOWI5MmZkMywgMHgwODY5NzE5ZCwgMHgwYTFmZDVlYiwKKwkweDhlNzBiZWQyLCAweGQ3ZTg4NzY0LCAweGNmNjk1NTg3LCAweGFkMTIzYzQzLCAweGQ4M2RiOTczLCAweDg1ZTQzYTZiLAorCTB4MGZmYmU1OTcsIDB4OGQwZTc0NTUsIDB4MmVkZTg3Y2EsIDB4MTY5NDU1YzQsIDB4NzQ0ZDU2OGQsIDB4ZDIzZTMzNWUsCisJMHgwYjY2MGZiNCwgMHhmZWEyYmVjMywgMHhhNjdlODk2NiwgMHg2OTQ5OGNmYywgMHhjZTM3ZmFhNiwgMHg2N2UyMWExOCwKKwkweDY3MmFlZmNlLCAweGU5OTU3NWZlLCAweGRiYWE5NzVkLCAweGUzODU2ZWZkLCAweGJmOWFjNjdiLCAweGQzM2I3YTUzLAorCTB4ZjZhNjBkZDksIDB4ZTk5YTYyNTUsIDB4OWIyNTk3NWQsIDB4MTMzYzY1ZGYsIDB4OGZhMWQ5OTUsIDB4NDFmNzZiOTUsCisJMHhiNGRhZmI2NiwgMHg5ZGZjYWRlZiwgMHhhZmRhNjIyNiwgMHg3ZjNjZDMwMywgMHg4ZGE1ZTc5NCwgMHgxZGJhMDhmZCwKKwkweDlmZmUzNjdkLCAweDE5NzlkZGQ2LCAweDg5OGYxOWQxLCAweDNiZDg1YmY4LCAweGU0Nzk2NjdjLCAweDQyYTllYjA4LAorCTB4NjY5NTQzYWUsIDB4OTJjYWFhOGYsIDB4ZmYyYWE4ZjYsIDB4OWJlMjNiMTEsIDB4MjRkNmZmMDksIDB4OTM3NTQ5NDIsCisJMHhhYTQ2ZjZjMiwgMHg5MzhhNDhlZiwgMHg3ZGYxZGJmOSwgMHgwNzVlZjlhNywgMHhmMjg0YmJmYSwgMHhmNjMxNmE0MywKKwkweDM1Nzk2ODU3LCAweDQyZTcxYmNkLCAweGIwNDdlYzM1LCAweDZiZmRlOTgzLCAweDE5ZjRlYWZkLCAweGI0M2VjZjdhLAorCTB4Mzc2MGRmMWYsIDB4NmQ4YWU3ZWYsIDB4MjNmNjBlM2IsIDB4OGEyZjRjYmMsIDB4NDk3YzQzY2QsIDB4NWI1NGNiNjUsCisJMHg3NGU1ZjY3MSwgMHg4YmZkZjNhNiwgMHg3ZmI2MTZlNSwgMHg4NTdlMWM3NSwgMHhkY2EzYWNlOSwgMHhkZGYxOTFlYSwKKwkweGQ1MWYxOGZmLCAweDBkNmY2OTVlLCAweDM0NDViZmE1LCAweDE3OTlmODFmLCAweDAxM2M1NGVkLCAweDVlMDNkNjQ1LAorCTB4NDMyZTgxZmEsIDB4MGRkNDkyZjAsIDB4NzUzYzc0YmUsIDB4N2NhNDJkZTIsIDB4MWMzM2ZlMzEsIDB4MDA0YTExZjEsCisJMHhiYzMyZjI3YywgMHhmYWQ0NzhlOCwgMHgyYzEzZTQ1ZiwgMHgwMTNjMTI2NywgMHgzZmE0Mjc4NiwgMHhmZjc0MmEzMSwKKwkweDIwZWZjMmRkLCAweDg0NTA2Yzc0LCAweDNjNmVmOTRiLCAweGVkMjRiYjRjLCAweGU0ZDMwMzM2LCAweDI5NzdkYmJjLAorCTB4YjNlYmM4MWUsIDB4N2JmOTU5MmUsIDB4YzkxNGJkMjcsIDB4OTMxOWY1MzgsIDB4OTNiM2ZiY2MsIDB4N2VlNDhhN2UsCisJMHg4MTI5Nzk5OSwgMHhkMzZmZmRkYiwgMHg4ZmQxNzdkMSwgMHg4ZDA5OWZlZSwgMHg1ZGVmZDZmZiwgMHhkZGFjMWEyZCwKKwkweDQ2MjExYTRiLCAweGM0NGZmYjdjLCAweDQwNzJlYmFmLCAweGU3NDllNzRmLCAweGYwZDJlMzc5LCAweGY2ZWQ0Y2VmLAorCTB4OTUxZTVlMWMsIDB4M2VkYWYxY2EsIDB4ZjNhODhlY2QsIDB4NGVkNjlmNjMsIDB4Y2E5OGI3MWYsIDB4ZWZhMDA1ZGQsCisJMHgxN2IwMDlmZSwgMHg0YjRjNmVhZiwgMHhlMzE3YmUzNiwgMHgzYjYzNjU1YiwgMHg3ODhhZjI2ZiwgMHg1ZGMzOGI0ZSwKKwkweDhhNDczODA5LCAweDRkNzdjODU3LCAweDI3ZDVkZjhlLCAweGUzODhmZTAxLCAweDI2YmQ2Y2FiLCAweDdmYzdkNzUxLAorCTB4ZTQ1OTNjM2EsIDB4ZTljODVmMjAsIDB4YjM2MTc1ODksIDB4M2Q3ODc2OGQsIDB4ZWQyYzFhNmQsIDB4N2UzOWZhMzUsCisJMHg3YTM4NzJjZSwgMHhhYWRmZjYzNiwgMHgwNTA4ZDE1ZCwgMHhmZGVhYmE1YSwgMHhjZjNhMmU5MSwgMHg4ZjdjNTk1NywKKwkweGVmN2Y2NjBmLCAweDg1Y2YzZTQ2LCAweGVjMmU2MzZiLCAweDUxM2NiYTcwLCAweDBmYjBhYWIxLCAweGZmY2FmZGNlLAorCTB4OWMzMWU1NzksIDB4YjYxNWJlZmIsIDB4OWZhM2M4MDQsIDB4ODQwYWEwN2QsIDB4YzY3OWQwY2UsIDB4ZTFhN2M0NzIsCisJMHhkZDNmYWU5MiwgMHgxMGY3YzkxMiwgMHgxNzg0NTUzZiwgMHhlYTI1YTZmZSwgMHhlOTk3NWNmZSwgMHgwYjNiZGQ1YywKKwkweDQxZGVmZmUzLCAweGI4YzA4ZWUzLCAweDE4ODlhZDgxLCAweGM0Y2ZlM2Q3LCAweDE5MTViZWI4LCAweDU3ZDlkZDMxLAorCTB4YmQ2NmI0ZjQsIDB4ZWFiNmYzOTQsIDB4ZWVjZDY0ZjYsIDB4NzkxZWY5MGMsIDB4NjI3MGY3YzgsIDB4MWU0N2JlNDEsCisJMHhjODUyM2RmMiwgMHg0ZGJlZjhmNywgMHg2YzBjMmZmMywgMHg3ZTgzY2Y2OCwgMHhiMjJiMWZlYSwgMHg3NWJjZjk2YSwKKwkweGJmN2U0MTY2LCAweDgwZjA4OTQ1LCAweDc4YTJkY2ZmLCAweGMxYmM3MGZhLCAweGM0ZGVmOTY2LCAweGQ1NzU5MGYyLAorCTB4NDlkYTZiZDMsIDB4ZWRkMDMzMDYsIDB4ODQzOTJlMGYsIDB4OGM2ZTZlMzEsIDB4YzdlNTM1ODgsIDB4ZWE5YWZhMzksCisJMHg0YzUyYmExNywgMHgwZTI1ZDdlNSwgMHhlZjVmOTUzNiwgMHg3ZmU1MzNjZSwgMHhhOWE1NzU5OCwgMHgxOGNmNjRmZSwKKwkweGEzNDdmZTUzLCAweDlmZDUzN2FlLCAweGNhNmE5ZGVhLCAweGM3Mzg5ZjRmLCAweDUxNjY3ZjU0LCAweGM2ZmNhOWIxLAorCTB4ZTU0YzRiZDksIDB4NGNjYjdjNzMsIDB4M2ZlNTc5ZjksIDB4YTliZmQ1MzUsIDB4ZGNhOTg1NzYsIDB4OWM1NjVjMmIsCisJMHg3N2ExN2I3NywgMHg4NjVmZGUxMSwgMHgyZGU5NDVkZSwgMHg4ZDM4NjU2ZiwgMHg5YzdhM2FlYiwgMHg3OTc3ZGJhNSwKKwkweDUwNzI2OTRlLCAweDM2ZGVhMWJmLCAweGQ3ZWUyNWQwLCAweDY4MDcwZTgwLCAweGMwYmU2N2Y3LCAweDdlMWJkMmI5LAorCTB4ZjUyMmEwYzksIDB4NDE3ZDIzZGUsIDB4NDJmNWExMzcsIDB4MWU0NzQ3Y2IsIDB4MzVhNmU4YjgsIDB4N2EyYTdhMmMsCisJMHhjNGY4OTVhNiwgMHgxNDBlMmJlOCwgMHhmNTdlNTFhNCwgMHhhZDMzODU1MywgMHg1ZjQ2NWZjNCwgMHg1NGY5ZTA3ZCwKKwkweGI1M2QzN2NhLCAweDNiMGY5NjRhLCAweDUxZTUxMTcwLCAweGYzMjBkZjRmLCAweDFhOGIwNWQzLCAweDdhZjkwYzhmLAorCTB4MzFlNjlmODYsIDB4NmJhOTA3ZmEsIDB4ZDI2ZWQyM2QsIDB4YTc2OWJjNmQsIDB4ODBmMDg4M2QsIDB4MDFlMDRkNzgsCisJMHgxM2U4OTA2OSwgMHg0ZmEyMDFlOSwgMHg3ZDEyYWZhNCwgMHg3MTBiYTU5NiwgMHhlOTEzZTg5MCwgMHhmMTNmZDIyMSwKKwkweDdmYTRmN2ZkLCAweGZhNGMzZDIyLCAweDQ5YjdkMjI3LCAweDg0N2E0NGZmLCAweGVmYTQ0ZmY0LCAweGY0ZTZjZmQ1LAorCTB4YjcxZjdhODMsIDB4Mzk3ZDQzZmIsIDB4NmJlYjQ3YTcsIDB4ZjVjN2ZiZjksIDB4YjlmZTljNzUsIDB4NWRkZmNmZGUsCisJMHg0MzNiNzQ0MywgMHhiYTMxZWQ5MCwgMHg3ZTFhYWJmZiwgMHg3NmVkZDg0NywgMHhmZDFhY2VkYiwgMHg5ZTU3OGFjMiwKKwkweGIyYmZiYWE3LCAweDQ2YjQ1NmExLCAweDVhYjY5ZjYyLCAweGJhMzk0ZjYzLCAweGYzM2Q5MGZjLCAweDY1MzhhYjViLAorCTB4MGY1ZWJmOTAsIDB4ZTEwZDI2ZjcsIDB4OThiYmZiZjEsIDB4OGZkZjZiNmYsIDB4ZjIwM2U5ODksIDB4NTIwYTlkNjksCisJMHg5ZjI4Mjk3ZCwgMHgyYWJhNWY5OSwgMHgwZmM3Zjg4NiwgMHg4MWI1YTliZSwgMHg3NGI0M2U1ZSwgMHgwYmZiN2Y3ZiwKKwkweDg3ZGE0ZThkLCAweDhjODczMzc4LCAweGViYmJmMmU4LCAweGY4Y2VlZjdlLCAweDFlNWY4MzFhLCAweDhlM2Q2Y2ZlLAorCTB4ZjNjN2Y3NDcsIDB4NDczZTIxOWYsIDB4ZjFlYjkzZjcsIDB4ZWY2YWQ3NDEsIDB4NzA3ZWU5MjMsIDB4ZWY0N2ZlM2QsCisJMHg2MDkyZjBiNywgMHgxYWNkNzdiZSwgMHg1MTJkY2IyYiwgMHgzOGM0MTE1NiwgMHgzNWNmOWM3YSwgMHhjNDNjOTY4ZSwKKwkweGU5NTM1YzNiLCAweDNlYjczOGU0LCAweDIzZWYxZGY0LCAweGRlMmYzZDUyLCAweDI1ZmNkYjk5LCAweGYyZWRjZmQ1LAorCTB4ZTZkMWY3YmIsIDB4OGYzY2U1NDEsIDB4YjYzZTRiYzIsIDB4YzVhMzVlZDcsIDB4NDNiZGEwMWQsIDB4NzUzYmYzOTYsCisJMHhmYzgzMTE4OCwgMHhlMWRiMjk0MSwgMHg3ZGE4NTUxZSwgMHgwMDFjNTc3ZSwgMHhmYWNhNDdlYSwgMHhmZTk3ZjQ0MSwKKwkweGRkMTc4ZDE1LCAweGM0MDY4ZmI1LCAweDZlMjFlNGI1LCAweDkzYjU0MDZjLCAweDhjMzZjNmUzLCAweGI5YmRmMjA5LAorCTB4ZGVkN2IxZTksIDB4NGUyMmFhZDMsIDB4ZDhjN2U2MzgsIDB4ZmFhNzRmNDcsIDB4ZWZjZjAyNjYsIDB4ZjAwZjczZWUsCisJMHg1YzVhN2U1MCwgMHg1M2E0NmY1YSwgMHhlYmI1ZGU0MywgMHg2MmU2N2Q2NiwgMHhlOTdjNzU1ZCwgMHg0YmQ3ZDc3OCwKKwkweDllMjFiN2M3LCAweDVkZmNmMThhLCAweDZlYmExN2ViLCAweGFmYTVlYmExLCAweDJlYTVlMTUzLCAweDk3N2YwM2ZjLAorCTB4ZmFkNzRmYWYsIDB4ZmZmYjNlYzEsIDB4YjcwY2ZhY2IsIDB4Y2M3ZGYwYjYsIDB4MDc4NzRhYjAsIDB4N2FkNzdkNzAsCisJMHgyNjJlZGNkZCwgMHhmMTc4M2VlMCwgMHhhNDQxZjcyNSwgMHg1ZjdjZDI0YiwgMHg4YTk2N2Y4MCwgMHhjMDVjMTMzMSwKKwkweDgxY2Q0YjkxLCAweGRlYjQyNzlkLCAweGVmNTllZmYyLCAweDA3N2E5MGUxLCAweDdjZDYwYWUyLCAweGJkNzk3NjlkLAorCTB4MWFmNTIxZGQsIDB4N2VkNjBiNjIsIDB4Mzc0Y2VkMmQsIDB4ZTQzZDdjZTIsIDB4ZWQxZmIxYjYsIDB4MWUzZDcwY2QsCisJMHhhM2NjZWJjMywgMHhmMWE3MWM3NSwgMHg5NmEyNDNhMywgMHhkNzEyMGZjZiwgMHhmMWRmNThmYywgMHhjYjhmNTJkYSwKKwkweGVlNzJjYzVlLCAweDZlNTlhNzc4LCAweDUxNGRmMDljLCAweGQwOWRjNjIzLCAweGQ2OGU0NDJiLCAweDY4MzdlMWZjLAorCTB4OWEyNzVlZmQsIDB4N2JkMGRmYjgsIDB4ZjI2ODM3ZjIsIDB4ZjkzZGU4NjksIDB4ZjI2ODg2ZTcsIDB4MDE0ODhhNjUsCisJMHgzYzJmMWE5ZiwgMHhiZGVkMmUxMiwgMHhkOTJlZjE4MywgMHgyZjQ2OTI2ZiwgMHg4YzU1NmU2OSwgMHg5ZjA4M2QwNiwKKwkweDU1ZjFjYzE1LCAweDhiOTA3N2JjLCAweGJmOWNmZDcxLCAweGZkMzgwNDVlLCAweDNmNzIwOGExLCAweDIyOTE4OTkzLAorCTB4NmMyMTIzZmYsIDB4NzkwMzlkZjIsIDB4ZjU1YWIzM2YsIDB4MmNlNDI3ZmQsIDB4YzJlNjVlZmQsIDB4ZDhhYmRmNzAsCisJMHg0ZTQ0YWY3NywgMHgyOGY3OGY5OSwgMHg0YjhjMTVjNiwgMHhlMzAzYmI0NywgMHgxYzlmMmNkZCwgMHhiY2IxYTQ3MCwKKwkweDhiNjU3ZDg0LCAweDZmN2ZkYWViLCAweDZlOTJmOWQwLCAweDkxMDZmNzk1LCAweDNhNjBkZWUyLCAweGU5ZDc5NjZkLAorCTB4ODZmZTQxZmMsIDB4ZWQwMjE1YWMsIDB4NzFjZGI4MjYsIDB4MWZmYjdhMzgsIDB4NmIwYWM2YmEsIDB4ZmRmY2NmNDEsCisJMHhmYTdiYjk4NywgMHg2NmYzYWVjMywgMHhiMGYxYTBlYywgMHg3YjE5YmY4MywgMHhmN2NjNzhjNSwgMHgxNjNlZDhjZCwKKwkweDM5ZDk4Njk5LCAweGJkMzE3OWNkLCAweGE3NGU3OTNiLCAweDI2ZjFhZWU3LCAweGNmN2M2YjA4LCAweDFhZjFkNjc4LAorCTB4Y2YxZDRmOGEsIDB4MmY1ZTAyZmYsIDB4MmZkNzg3NzQsIDB4MzcyOTBiMDYsIDB4YTIzZTRhNDcsIDB4YWMyYWI3ZTMsCisJMHgxZjY3MWVmMywgMHhhNTQ0NWM2MywgMHgzM2U5ZTI0MywgMHhiODdiOGM4MCwgMHgzY2YxNTc3NSwgMHhmZDE3YTkzZSwKKwkweDc1NDVlZjgxLCAweGQ0M2NiOGEzLCAweGM3MzYyNTBlLCAweGM3N2Y1ZTcwLCAweGVmODNjY2VjLCAweDdjMTIyNzQ2LAorCTB4ZWE3YzM5ZDcsIDB4ZDljYmMyNTAsIDB4NDkyNjYwZmMsIDB4MGQ5M2UyMzAsIDB4ZmFlZjdjMGQsIDB4MDdhYWIzZGMsCisJMHhlYWE1N2ZmMiwgMHg0ZjAxZWI1ZSwgMHgzZjY1NTM3OSwgMHg5NWU2ZjhhMCwgMHhjNTA5Zjg2NCwgMHhhM2UzZWVlNiwKKwkweGFmMTIxZDJiLCAweDMyYjNmZWJhLCAweGE3Zjc4OGFkLCAweGNhMjQxNTcwLCAweDNkZTRkNWY3LCAweGU4MWU1ZDcyLAorCTB4OGJlMzI2MWYsIDB4M2RjY2ZiZjUsIDB4MjMyMzA3YzksIDB4MWZlYjFmMjQsIDB4YmVhZWY5MjYsIDB4ZjM4ZWQ0OWUsCisJMHg0OGNmZDQ0OSwgMHhmNzQ5NTNlMiwgMHhiMDNlYjA0NSwgMHgxYTRkZTVkYiwgMHg3OGNhN2YwYSwgMHg3NWE3OTI2MSwKKwkweDk3YTNiZmJkLCAweDVhZjAzZjdjLCAweDY4ZDBmOTkxLCAweDY0M2Y4ZmNhLCAweGVmMmEwMTEzLCAweGYxNGMyZjE4LAorCTB4OTQ2Zjg1NjQsIDB4ZmExNmJiZjIsIDB4NDRiMDk4ZmQsIDB4ZmMwY2FmZDIsIDB4NjExZGRjMjAsIDB4MzIzNDZmN2EsCisJMHg4Zjk0Y2UyYiwgMHhkNTMzZjRmMiwgMHg2YTk1MTk4ZiwgMHgwZWY1OGYyYSwgMHg0ZmM3OTUzMSwgMHg3YmU1MzdjYywKKwkweGFhNjU1ZDE3LCAweDU4ZjY2N2RmLCAweGVmYWZiZTUzLCAweGE0ZmQ1MzA2LCAweGJjYTY2OWYyLCAweGU0OTI5N2NlLAorCTB4NzZhMDMxMjcsIDB4YzBmZGE5YWUsIDB4ZmQ1MzEyYmEsIDB4Zjk4NTdmMTQsIDB4ZjdiZjU0ZmQsIDB4OWUwMjU2NDgsCisJMHg2OTdmOTQ3NywgMHhiYzg3OTY2YiwgMHg5NjExNmFhZiwgMHg5MGVmNWQ5MSwgMHhkZTVhM2FmYywgMHg1Y2U4OTkwNywKKwkweDY0OTFlZmM0LCAweDBjY2NmZDM0LCAweDhhOGRmYThmLCAweDQ2MjkyNjczLCAweGFlMjRmN2UxLCAweDYwZjk5YjczLAorCTB4M2YzOWEyNjEsIDB4MmFmNzk1ZGUsIDB4MmI5YzZlOTYsIDB4YTgyOGZlMzQsIDB4NmE5MjllODAsIDB4ZjNlZmE2YWQsCisJMHgzNDdjNmE4NiwgMHg5ZWIyZTQ1NywgMHhlZmViNWRmZSwgMHhmZjVhNjIxYiwgMHg0ZTVkN2M1MCwgMHgwNWU3Y2YwZiwKKwkweDZmOWVkMmRkLCAweGY5ZWMxNzljLCAweDllYzBiYzQ2LCAweDllYzNjYzZmLCAweDdiMGZhYzZmLCAweGY2MWNiMWJlLAorCTB4YzE3OTYzN2MsIDB4OGMxZDMzMjEsIDB4ODNhNjYyMzgsIDB4ZTk5YThlMmIsIDB4ZDBjZmE3NDAsIDB4ZDViMmJhZjUsCisJMHhhN2MyMWY0YywgMHhiMDdmOTRmOCwgMHg2YTdmNTc1ZSwgMHhmNWQwOWZhNiwgMHhkNzhiMDkyMSwgMHgxMTUzODI2ZiwKKwkweGZiZmNhNDhmLCAweDY0MmViNWViLCAweDg3ZDczYWJkLCAweGY2ZjkwZGYwLCAweGJlNTBlMGRhLCAweDQ4Nzg1YjI3LAorCTB4ZTRiNzc4MTUsIDB4ZDc5ZTZkNTEsIDB4MjdlNWFkMGQsIDB4N2Q1YmI2YzMsIDB4YWU3ZGU2YmYsIDB4NWY0MzU1ZDEsCisJMHg4NzFkNTc0OSwgMHgxZjA3MGY5ZSwgMHhmZmE0MzQ3ZCwgMHgwMmY5ZmJkNywgMHhmZTNiM2ZhOCwgMHhmNDFkYjI2MiwKKwkweDQ1ZGYyZWQxLCAweGVlMWYwMzZiLCAweDQ5YjcxNWRkLCAweDc3YmNiYTdhLCAweGUzOTUzM2YyLCAweDlhNTk4ZTE4LAorCTB4ODJlYmYwMTQsIDB4ZjAzNmRmMTgsIDB4NmJiMzliY2IsIDB4MTM2N2Y4MTUsIDB4NDU4ZWQxNDUsIDB4OGZmOWNiODgsCisJMHgxN2U0NjRiMCwgMHg3N2Y3OTQwYywgMHhkZjJiNzY0NSwgMHhlMmY5ZDA3ZiwgMHgxNzE5MjQ4MiwgMHhmMzU0MzJkOCwKKwkweGRjNjQ3YWYzLCAweGE1NDNmM2NlLCAweGUzY2EyNGRkLCAweGUyZTMzOGUyLCAweDgzYmY3OTZjLCAweDA1ZTQ5OWQ0LAorCTB4ZTFjN2MwMzksIDB4NDdjMDQxZjAsIDB4NjlkZjg1YjMsIDB4MzliOWI1NmMsIDB4ODZmZmM0NmUsIDB4ODNmN2UwMmEsCisJMHg3MmY5MGIxYywgMHgzNWRmMjY4MCwgMHgwMDcwZTQ3YywgMHg4NWViNDFmZSwgMHgxYzFkOWNlOSwgMHg1YmUyOTg3MCwKKwkweDk5NzM2ZTg3LCAweDg5MmQzOWYyLCAweDc2YzNmYWE2LCAweDc5ZTU0ZGJiLCAweDc5NTMyY2MxLCAweDI5OGYyMWMxLAorCTB4MjhjOGUyM2YsIDB4OGUyYmZkNTMsIDB4MmJmOTRkN2EsIDB4ZWE5YTI3NWIsIDB4OTE2OWZkNWYsIDB4ZGEyNDlmMjksCisJMHgwNzdlMDYxZiwgMHgzZThmNTIyYSwgMHhlMjU1MzQzMywgMHg3ZTM4MmRjOSwgMHhiMTlkYzE2ZiwgMHhhNmE3ZGVmMiwKKwkweGJhNzJlYjVmLCAweGQzZWNmNzFlLCAweGRlNTQzOWU4LCAweDcxZjc2ODFmLCAweDVmNDM3NTFjLCAweDE4N2JlMWUxLAorCTB4MTI5ZjRkMGUsIDB4YTdjMDNkNjYsIDB4ZGU3NzJkYzUsIDB4ZTM5YmYwYTMsIDB4ZTU3OGY1OTYsIDB4ZDM0MTdkNGUsCisJMHhkZDM5NzQwZiwgMHgzNWVjYWYxMCwgMHgwODJmMmJjNiwgMHhlMDNkZmVlYiwgMHgzZGQ2ZDJmZiwgMHg3NjgxZmUxNCwKKwkweDlmODZkZjM5LCAweDg4ZGVmOWRhLCAweDNjMjg1NzBlLCAweGRhMzhiNTMzLCAweGVmZWU4ZTJkLCAweDI1YjJkOGY1LAorCTB4MTQ2NTI1OWQsIDB4ZmVmNDFkZmQsIDB4Y2FkM2NkOTgsIDB4MzY1ZmRkNmYsIDB4NGZkNWE3OWUsIDB4MGJmMGQ1ZjQsCisJMHhmYmE1NjdiYiwgMHgzMDViYzdiYiwgMHhiZTY3Y2U0YywgMHhkNGYzNzJjNSwgMHgzMmNmOGU2YywgMHgzYmRmODNiZCwKKwkweDUxZmRlYTViLCAweGYzYjc0YWI5LCAweGUzMjMxMDViLCAweGRkOGM0NGE3LCAweDc5ZWRmYTBkLCAweDQ0Y2Y4OTNjLAorCTB4ZmJlNDY4YmIsIDB4ZmY5YzVhNDcsIDB4ZWU1YjZiNGQsIDB4ZjM0NTQ0MTksIDB4N2JkYTRkZWQsIDB4ZTgxYjAxNjAsCisJMHg5MjU4ZDI2MSwgMHhkODg0ZjJjMywgMHhiMzU3NjViNiwgMHhjN2EyZTQ5MywgMHgzZjZjYWNlYSwgMHgzNWRkYmZlOSwKKwkweGNlYjgyNDhiLCAweDQ5MDMxYmZiLCAweDQwN2QwMWVmLCAweGI0YmU4MWI2LCAweDcxZTU0NzIxLCAweDFiOWVjMWFlLAorCTB4NGRmNmZkODEsIDB4ZmIzZDljNjcsIDB4Y2VkMDg0MDUsIDB4NzU0ZmE5MGIsIDB4ODc0YzZmNDMsIDB4YWZmZTNjZmEsCisJMHhmMTQzZWRlMywgMHg0MmFkZWJhNCwgMHhkNzRjMzM4YiwgMHhkN2YxZDJlMCwgMHhmMGQwNzc2OSwgMHg3MDdmZGZhNywKKwkweDZkMTViMzJmLCAweDhhM2RmMjcyLCAweGQyZGI4ODg5LCAweDQ3MjVhZmQ3LCAweDg2YWQ2NWQyLCAweDNmMDNkNDBmLAorCTB4YTE1ZWE5ZWEsIDB4ZmIwMzFkOWEsIDB4Yzc3MDg3NzIsIDB4NDNhMWJhYjgsIDB4YzJiZmZkM2QsIDB4OWVmZjhlOGIsCisJMHhjNGY1NTdlZSwgMHhjMmY5NDIxZiwgMHhlYWI3ZGQ3NywgMHhkOWZmNGU4OSwgMHgzZTA2NTc3YiwgMHhiNDY4ZTMyMSwKKwkweDViYTQwOTc1LCAweDY3N2QzZmQ4LCAweDZmM2Y3OTk0LCAweDhkNzY5NmNjLCAweGEyYmVkYTcxLCAweDY3OTlkZGYzLAorCTB4ZjYwMjE3ZTYsIDB4YWE1NTg2ZjEsIDB4MzllNDJmYzYsIDB4YzQ1MjljNWUsIDB4M2E4YjExZWYsIDB4ZTUzM2NiMTcsCisJMHhjZmQ2MmYxYSwgMHhjODBmODVkNywgMHhmNWFlZTBmNywgMHg0NTVjMjUxNiwgMHg5YjY2OTJmOSwgMHgxNWEwNDhkOCwKKwkweGYzOGZiYmZiLCAweDFiOTNiZjY2LCAweDQ0OWVmZTcxLCAweDM3MjZjZGMwLCAweDQ5YjRiNzFhLCAweGI5NGZlYzA5LAorCTB4YzVlY2JkZmMsIDB4NWM3ZWY5NGUsIDB4OGJkOWJiZTgsIDB4MmYxN2ZkMzUsIDB4ODZkZjYwMmEsIDB4Y2ZlZTY1ZmEsCisJMHg4ZjZiY2VkNiwgMHhlMTJiN2NmMCwgMHgwYmE1YmQ2NywgMHgwMmRlOGQ3ZSwgMHhlODMxMWRmMiwgMHhmM2I0YWFjMywKKwkweDhlOTY5YzcwLCAweDI0ZmMzNzM3LCAweGMyNzk1ZGYxLCAweGNlMTY0NDZmLCAweGI3NmI0NmYzLCAweGY4OWQ3NDcxLAorCTB4OWQyYWZkZDUsIDB4MWNjM2MyN2UsIDB4MTcxYTFmYWYsIDB4NGFmZmQ2NzAsIDB4MWE3ZTc3NzQsIDB4ZDNkMzdmZGQsCisJMHhkZmY0ZTgzZSwgMHhhODVmODc3YywgMHgxZTg5NjljMywgMHhmZjA0M2UwNSwgMHg1N2U4ZGJiZiwgMHg4MjQ4ZjNmOSwKKwkweDMxMjdmZDkwLCAweDZhYjQ4ZmYwLCAweGI5OGQ4OWZkLCAweGY0NGZkZGRkLCAweGYxYzVkOGFkLCAweGJlMmNhYjEwLAorCTB4ZjI1YzQwZmYsIDB4ZWYxZmVhMTksIDB4M2NlNWRlYjAsIDB4ZjhmYjgwOTAsIDB4ZDNiYjM0OTMsIDB4ZTRkNmYzZTUsCisJMHg3ZWYyZDFiMCwgMHhlNTVmODc0MCwgMHgyODk4ZWVmNSwgMHgxZjEzNzNlZiwgMHhiYTc3ZDgxNSwgMHgwOGFhN2YxZiwKKwkweGZiYWE0MmY2LCAweDQ2NmI3YzQ5LCAweDNmNzVmZTMxLCAweDE0NzA3MTQ5LCAweDYxYjMzOWMzLCAweDQ4NGYwZGIxLAorCTB4N2I3YzNlYjYsIDB4Y2JiYjg0NjEsIDB4NDAzYWQyN2YsIDB4ZTRmNGU3YzYsIDB4Yzk3ZTk5NDcsIDB4YjhjZGZkYzMsCisJMHg3M2Y3MTU3NCwgMHhjYTQ1M2IyYywgMHgyY2Y3OGQ2YiwgMHhkOTBkOWQwMywgMHg2Nzk4NmMyNiwgMHhkZmZiYWRhYiwKKwkweDIzOTI5ODE5LCAweGY4NTJkMWY3LCAweGUyMWI3YmQyLCAweGFjMjg1NjdlLCAweDg0NTcyYzA3LCAweDdjYzQwNzFlLAorCTB4NmM1ZmNmNWUsIDB4MzI4NWYyZDIsIDB4OTkyYWNiN2YsIDB4YzVkZWQ1NmYsIDB4M2JkOWFhZGEsIDB4OThhNDRmMzAsCisJMHhlZGYwZjQwZiwgMHhmMzA0M2Q5YSwgMHhlMDc5OGE0MCwgMHhmMjFhZjgzYiwgMHg4M2M4NmJlMCwgMHhiZTBmMjFhZiwKKwkweDBkN2MxNDg2LCAweDUxNDQ0YmRmLCAweGZkMmE5ZTcyLCAweGZiMGRlMzNkLCAweGYxOWVmZTAzLCAweGZlMDliOTA2LAorCTB4ZmUxZTYzMWUsIDB4Zjg3ZDYzMWUsIDB4ZjBlNThjN2IsIDB4ZTFjYjE4ZjcsIDB4ZTFlNjMxZWYsIDB4ODdkNjMxZWYsCisJMHg4Nzk4YzdiZiwgMHgxZjU4YzdiZiwgMHgxZTYzMWVmZSwgMHg3ZDYzMWVmZSwgMHhlNThjN2JmOCwgMHhjYjE4ZjdmMCwKKwkweGU2MzFlZmUxLCAweGQ2MzFlZmUxLCAweDU4YzdiZjg3LCAweDYyOWQ3MzdlLCAweGFjZGQwN2YyLCAweGJhNTAzYmJkLAorCTB4YTNlOThlM2UsIDB4MjkyOGI1MzksIDB4M2ZmN2Q2ODcsIDB4YzdlN2ZmMjMsIDB4ZjNhYzU0YjYsIDB4NmVmYzI1ZGUsCisJMHg0Nzg0NTU2MCwgMHg0NGQzNzNhZSwgMHgyMTE2ZWViOSwgMHgwZTdkYjlkNywgMHg3NmVkZjNhZiwgMHhmMTk0MmY5OSwKKwkweDAzZjRhMWMyLCAweDc0ZjhjYWJmLCAweDBhNDE1N2U5LCAweGY4NTIwYWJmLCAweGFmYzI5MDU1LCAweGZkMmFkZTMyLAorCTB4NTdlMTQ4MmEsIDB4NTVmODc3YzEsIDB4ODJhZmMyOTAsIDB4YTQxNTdlMTQsIDB4ODUyMGFiZjAsIDB4ZmMyOTA1NWYsCisJMHhiZjA3NjgyYSwgMHg1NWY4NTIwYSwgMHgxNTdlMWRmMCwgMHhlMGFiZjBhNCwgMHgwMzgyMzFmYiwgMHgyZTFkMTVmZSwKKwkweDI2ZTlmOWM4LCAweGQwZTg5NDNkLCAweDRjYmE4N2E0LCAweGM2ZjljODc5LCAweDhkZjM5MGZhLCAweDhkZjM5MGU1LAorCTB4OGRmMzkwZTUsIDB4YzZmOWM4NzksIDB4OGRmMzkwZmEsIDB4ODhmMTFiZjksIDB4ZWYyOTZmNzEsIDB4ZGU0MWRiMWIsCisJMHg5YTczZTYzNywgMHg4NmMxYWZmYywgMHhmOWMzNzkzNSwgMHg0NmI2OTE1NywgMHgyZTI5OGYyOSwgMHg5ZTcyZWI5MiwKKwkweDU4ZmYwNTlhLCAweDFjOTJiODZiLCAweDc2MzkyMWViLCAweDhkNjc2ZmM1LCAweDg5Zjg5MmJmLCAweDJiOTc2ZjE2LAorCTB4NmY1ODJkZGEsIDB4YmFkMzdiZjYsIDB4ZTM4MjgyZjksIDB4M2JmZTczODMsIDB4N2Y3NWNiOTEsIDB4YmFkMWZmMmIsCisJMHhhYzE0ZWRlNywgMHg5MGNiNmMzNywgMHgzZGVkZTk3MCwgMHhkNTIyYTVjMiwgMHhiYmU1NzdlYiwgMHhiZTNhMTdhZiwKKwkweGE1Zjk4ZjVlLCAweDI4NTIwZTAxLCAweDkxMDcxMGYzLCAweDFmMzNiYjc3LCAweDJkNWJlZGYxLCAweDVkMGI4YzhhLAorCTB4NDM3MmUzMjksIDB4ZTM0OWFhZTksIDB4M2IyZDViNGIsIDB4YmI1MDQ0MGUsIDB4ODNjNTYyZjYsIDB4NTY5OTA3N2IsCisJMHgwZjk2Yzg3MSwgMHg0M2U2ZDUzYywgMHg4OWNiYTg5ZSwgMHg2YjgzZTJkNSwgMHg5MDNjNDJhZiwgMHg3ZjZlYjcwZSwKKwkweGY3YzEzZTI0LCAweDBiYjc0NmRkLCAweDczOGQxOTdiLCAweDhlYzIxN2NkLCAweDY0OTg1YmRmLCAweGRhMDRmMjk3LAorCTB4ZWExY2RmNDEsIDB4MGM5YmJjNTcsIDB4NDczMmJkZjQsIDB4ZmYzZTdiOWUsIDB4ZThjYWFiYjIsIDB4YjVlZGQwZmIsCisJMHhkZDFlZTE1NywgMHhlZWQ5MDhhNCwgMHgzMzQ3OGYzNywgMHgyYTM0YTcxZSwgMHhjOWZlZjA5YiwgMHg4YmMyZWRlOCwKKwkweGQ0YmZiMWZiLCAweGRkYmExZWUwLCAweDcxZTMyZjY1LCAweDRlZmY3YzVkLCAweDQzNzhiN2VmLCAweDJjMTdkZjMyLAorCTB4MTNlM2FkMTYsIDB4ZjBhMTI3ZDksIDB4ZGUzYWU2ZmIsIDB4NjJhZjdlNjgsIDB4MGZlMmM0N2UsIDB4MmZmYzhlYzEsCisJMHg3MTIxYzNkZiwgMHhjM2RjZmJmMSwgMHg2Yzc4NjZiOSwgMHhjNGRiZTIyMSwgMHhlNDBlZjk1ZSwgMHhhYmM1ZTFlNCwKKwkweGJlNWMxMzdhLCAweGYyMDc3YzgwLCAweDVmNmEyZjlhLCAweGY5NjZmY2UzLCAweGNmOTMyNDBlLCAweGNmOGY4NjQ4LAorCTB4ODU3ZTQxYzMsIDB4ZTI5OGZmZGYsIDB4ZTVlOTY4ZGYsIDB4MTVlMGJkYzYsIDB4ZGZkNDA0YjYsIDB4MGI1MDNjMmUsCisJMHhhZjc5MDkwNiwgMHhiNjU3OWY1NSwgMHg1NzA5NjIzOCwgMHg5NWUyMmY0MCwgMHgxMWZkMDM3OCwgMHg3YTAxOThlNywKKwkweGY4ZDhmM2M5LCAweDU2YTk5MDdkLCAweDQ2ZmMwZDk3LCAweDVkOGE3Mzk3LCAweDc1NDJlYzcyLCAweGY3ZGYwYzc0LAorCTB4MmUxMzkxMGIsIDB4YjhlNmY2MzYsIDB4OGUzZDdmOGQsIDB4OTNlZjgzYTQsIDB4Y2UxNWRmMmYsIDB4Zjg4Zjg1NzIsCisJMHhiOWU2ZjgwNywgMHg1OTc3MTkzYywgMHg5MWMzZWNiOSwgMHgzOGFlZDQ5NiwgMHg4MTI5ZDM5MiwgMHhmM2RmNzhhZCwKKwkweGU4OGVlYTc0LCAweDExY2IwYTUxLCAweGRiNWZjMDg3LCAweDdiZTc5ZjFhLCAweDVlYWJjNTgyLCAweDE3MTBmYmUzLAorCTB4OTY4ODFmMWIsIDB4N2ZhNGFhZjcsIDB4OWJjMzRjYTUsIDB4YTg1YTZmNmUsIDB4MTY5OTRmYWQsIDB4NWViYzc0M2YsCisJMHhlNzRiY2ZiZSwgMHg3MWY3YmYzMCwgMHg3MmM2ZDFiMSwgMHgyOGJjYTg0NiwgMHg4ODBmZWI4NCwgMHhiNDZmMmI3MywKKwkweGM1ZDNkZGYxLCAweDI3NTc4YjZiLCAweDc3N2VlZThhLCAweGNmZTMyYmM1LCAweDM0OTc3MWI1LCAweGE4NGUzOGRhLAorCTB4MmI0NzdiNWMsIDB4OTY1ODc3ZjQsIDB4ZDJlODcyNmEsIDB4MjdlZmU2NmQsIDB4NGZlNDQyNzIsIDB4YWQ0NGZkZmQsCisJMHhhZjViZjE0ZSwgMHhhODM5NjRjYywgMHhlZTcxYzZkNiwgMHhiOTQ4NTdmMywgMHgwMTEwZWM0OCwgMHhiZjk4NjdkYywKKwkweGVmMDU5YzYyLCAweGU1ZGZjYzU4LCAweGQwZGQyOGY1LCAweDdjOWEzYmQxLCAweDEyODMwOTM0LCAweDhhNWVhN2RlLAorCTB4ZWQzMmJlNjAsIDB4Y2ZjZTNmNTIsIDB4ZTljODk0YmEsIDB4ZTRiMjk3OGQsIDB4ZDExZGFjNzcsIDB4YmNhMTZiNGIsCisJMHgyNmJlZmY1ZiwgMHgxYzQ0Y2QxNywgMHhiMmU0MDE2NSwgMHgxZGQ3NGMzZSwgMHgyMjE4ZDc0NCwgMHg0MzU3ZTM1NywKKwkweDMwMmJjYWJjLCAweGY5YjI0ZmMzLCAweDczNGUyMTU2LCAweGY3YzE0NmQyLCAweDdlNDMyNjkxLCAweDkwZDk4MmEyLAorCTB4MmZiMDBhYTcsIDB4M2VmOTBhNTIsIDB4ZWY4NTQ0YzYsIDB4YmUxZTRjYjcsIDB4YjQwN2RiNGMsIDB4MTFmMzA0MmYsCisJMHgzN2MzZjc3ZSwgMHhmMTAwNmE3ZSwgMHgzYjdkYjMzNywgMHg3ZDc3NTgyYywgMHg2ZGZjZjgzZiwgMHg2NGU2MGVmYywKKwkweDdiYzc2MmJmLCAweGNmNGQzZTgxLCAweDc0M2RlOWQ2LCAweGQ0ODgyYzVmLCAweDY5NGU2M2VjLCAweDhmYjRlYWZmLAorCTB4OWM3ZTU4MDEsIDB4YzQ0NmYyMjcsIDB4MmQ4MDJlYjMsIDB4YjBiNjlmYjMsIDB4NmNhOGFhODQsIDB4MWI5YzllNTksCisJMHg5NDIzNjM3OSwgMHg2ZWQzN2ZhYywgMHg5MTYyZGYzMiwgMHhmZTQ4OWZmNywgMHg3MTc1NzhlMywgMHhlNTBmYjBhNCwKKwkweGY5MmFkNzhiLCAweGUxZDc5Nzg4LCAweGQ4ZDg3YWZhLCAweDc3N2FjMzQ5LCAweGU3NDk0MWQxLCAweDAzZWVjY2ZlLAorCTB4NWRmOTYwYmQsIDB4NGNmZjI2MTksIDB4Zjg0YTVhNjgsIDB4MTA1YTNlYzYsIDB4ZmM2M2ZhZDMsIDB4NWM4NGQwZDIsCisJMHg4ODlmMWRlMSwgMHhmOWY1Yzg3NywgMHgwMmUyMjA4YSwgMHhkYmY5NmFlNywgMHg4ZmYyYmQ5ZSwgMHgyNzhjOWM2YiwKKwkweGVkY2Q4ZmNlLCAweDNmZTIyMzc3LCAweDM4ZmU2NWZlLCAweDdmMWFiMTVmLCAweGYxNGRhYTM3LCAweDNkZTU3Mzc5LAorCTB4ZGY1ODA5YzgsIDB4N2U3NmVjYzgsIDB4YTY2NjYwYzcsIDB4MjEyZjllNGIsIDB4NzJkYjk2NzYsIDB4ODQ1ZGYyZGQsCisJMHg2OTRiN2IxMCwgMHg4NDZmM2NiNiwgMHg4ZjNjOWRkNSwgMHhiNjZlM2FmZCwgMHgzZWYzZWE1NywgMHgzM2RmMzM2ZSwKKwkweDVjZWFkM2Q1LCAweGJmZjgzNzY5LCAweGEwZjEyN2JhLCAweDdmZmJkZTQ1LCAweGYxZDgxMmM0LCAweGEwNmJkMTIyLAorCTB4ZTYwMTZmYjcsIDB4YmRlMjA4ZmIsIDB4Y2YxZjdlMTksIDB4YTM0NzdmNGYsIDB4ZWY2OTRmOTMsIDB4NzRmNGU4NjUsCisJMHhkZjIyZWVhYywgMHhkYTcxMjg5NywgMHg5ZTgxYWFkZCwgMHg3YzI4ZDZjYSwgMHg0ZWE0YjExZiwgMHhhZGY2MjdkZSwKKwkweGZjYmRlNDUxLCAweDhmNTdlYzFlLCAweGRmOWFmOWNmLCAweDE3ZmM3YTUxLCAweGMzNTBiMjExLCAweDkxZmI3Y2VmLAorCTB4NWQyOTFjZDcsIDB4ZGQ1M2ZkZjgsIDB4N2Y5MjZjYWYsIDB4NmYxMDMzMDYsIDB4OWMzNmI3M2YsIDB4N2FmZTQxZGYsCisJMHgwMThmZDE1OCwgMHg4N2I2NjQ3ZiwgMHhmMTEyNjlkNywgMHgxYTlmZDQzNCwgMHhiZTI5ZmJlMywgMHgwNzIzODg5NywKKwkweGYwNWM2ZjYxLCAweDdkZjhiN2YzLCAweDI5YmQ5YWUxLCAweGYxNjFlZWZjLCAweDc4ZDViY2VlLCAweDYxZWJlNTQ3LAorCTB4ODk3MjNiYmUsIDB4MmU5ZDhiN2UsIDB4ZWE5MGU0M2IsIDB4OTczZTU4YzYsIDB4ZWVkMWY0MTcsIDB4ZjY3NjhiYTksCisJMHhmM2ViZTllNywgMHgwNzk0YWU2MCwgMHg5YzcyM2M4YSwgMHg0NTNlOWEwYiwgMHgzNTRkYjMwOCwgMHg3ZmU3OTNkNSwKKwkweGVkZDQzZWU4LCAweDk1ZjZhMWEyLCAweGJlMmFmN2QwLCAweDdiMDI5ZWNiLCAweDU3NjBkZDg5LCAweGI2MzFlZGQ1LAorCTB4NzA3M2UzYWMsIDB4NzdiN2NmOWUsIDB4YWY4ZGJiZmYsIDB4NGQ0Nzc2ZWIsIDB4YTlkODVkOWYsIDB4ZTg0ZjY2Y2YsCisJMHg5ZDdmYjkwMywgMHhiZDFkODJlMiwgMHgxMWJlZTljYywgMHg4NzY1ZjVmMSwgMHgxNGYwODg2YywgMHhmMmRjZTI5MywKKwkweGU0YmI5MmRkLCAweGI3MjUyNWJiLCAweDliM2YzMWU2LCAweGM3YzkzNThmLCAweGJjNTE4N2JkLCAweDk0MDJjYjhmLAorCTB4ZGZiY2Y3YzYsIDB4NjU3YmFkZTcsIDB4NTNkMDFlYzAsIDB4ZTBmN2NiZDAsIDB4N2I1ZTVjY2IsIDB4MmEyZTQxOWMsCisJMHhlZjRjNTI2ZCwgMHgxN2Y5ZTgxOCwgMHg3MjFkYTU3MywgMHhjMDE5YTkzZSwgMHhhNmI3NGRkZiwgMHhkMDg2ZjFkOCwKKwkweDEwOGYxMjdjLCAweDQ2YmFmODM3LCAweGFhM2I3YTI3LCAweDkzMjU3MWM3LCAweGY5NDFjNTUyLCAweDlkYzExNGFlLAorCTB4ZmUzM2M3MjIsIDB4OTM0OTUxNGUsIDB4YWEwNjNkZjksIDB4ZmVkZDcyY2YsIDB4YWZlZTI4ZGMsIDB4NGVmMzQ1ZDgsCisJMHgzODYyZWE0MSwgMHhhNzhjMGYwOSwgMHgzZmE4N2JmNiwgMHhlYmMzOGYzNywgMHhkODBjMWE1MSwgMHg4Zjk4Mzc2MCwKKwkweGNmY2ExNjc4LCAweDE4NmMwNTc1LCAweGJlNTFhNGE3LCAweDJiNWJlMjhmLCAweDg5YWRmMWM3LCAweDJlNDBlN2I1LAorCTB4MDNlY2JhYjAsIDB4YTM2MGYyOGMsIDB4YmU3OGNmN2MsIDB4MDQxMWZiZjYsIDB4NjVjYmNiMmYsIDB4ZjNkYzI3ODQsCisJMHg4NjdkZWZkMiwgMHg4MzU4YWJlMiwgMHhkNjI5YWNiZiwgMHhhZDM2NWYyYywgMHhlNjdkNjFiMywgMHhjMzVlZjBmNCwKKwkweDk3MWQxYTk3LCAweGZiZTE4ZTM0LCAweDJmNTY2NWY1LCAweDY5ZjA5N2RmLCAweGIyZWJmZWY4LCAweDI3ZTFiYmYwLAorCTB4OTBmY2QzOTksIDB4OGQ3OTA1MmQsIDB4M2MwOTdkMmYsIDB4ODI5ZTA2ZjcsIDB4ZDIzZWZjMTksIDB4Njc4ZTcwYjIsCisJMHhlMjZhZTM5ZSwgMHhmYmUyNzZmOSwgMHhlNDBmYzIwMSwgMHhlMzExNTcxNSwgMHg4ZmM0ZTg5YiwgMHg2NmIyYzAzOCwKKwkweGMxNzZmYWYzLCAweDY1ZGYyNTEzLCAweGZkZTYyZTZmLCAweGIzZWFjOGI3LCAweGFjNzA4Y2JiLCAweGZiODE5ZmRmLAorCTB4ZGY2ODczNWIsIDB4ZTEyN2ZkZTMsIDB4Y2M3ZGYxZjIsIDB4YzhkYzBmNTMsIDB4MzgwNmZiYmYsIDB4OGYyOGU3ODEsCisJMHgzYmRlMDI3YiwgMHhiYTYxYmEyMiwgMHg0MTY3ZTlkNiwgMHhmYWNmZGM4MSwgMHhhY2MzNTE3OCwgMHhlYzNmMGVkMiwKKwkweGY3YTlmNmJiLCAweDA2ZjNlNDIwLCAweGZmZDg2ZjVhLCAweDc2YTdkYTdiLCAweDcxYTQwMDVjLCAweGRkZjI2NWVkLAorCTB4YWI3ZGQwYmEsIDB4OWY3ZDU3ZWYsIDB4ZGY1NmZiZWEsIDB4OGFkOThmY2YsIDB4MTc0YTg5ODIsIDB4YmRmM2ExZGYsCisJMHhmMDZlYjlmNiwgMHg3NzgzNDkzNCwgMHg4NGFlYjZhZSwgMHhjMTg1NTdkNywgMHg5ODYyMzdhZSwgMHg1M2YzZGZkYywKKwkweGZkMWZmYmNkLCAweGJkNTRkZmExLCAweDAzMzA2YzdjLCAweGZhZjUzZGY3LCAweGUzZjNiOGZhLCAweDAzZWMzYjY0LAorCTB4MzBlYTViZDAsIDB4ZTVmZDY3NGIsIDB4ZTI2MmRmNWMsIDB4ZmM5ZGE1MWYsIDB4MDRhYWZiNjMsIDB4MGExZDhmZjAsCisJMHhkZjk2ZTFmYiwgMHhlNWJlZTUyMywgMHhlMTdiYzhjZiwgMHhmOGJmOTY2NywgMHg3N2FhMmNmNiwgMHgwYjhkYzFmYSwKKwkweGNhMmZmNzhjLCAweDJjNWY5MjgyLCAweGZjMGI3OTI0LCAweDBmMjY5MTYzLCAweGU1ZjRjYzZjLCAweGU3ZWMzMzBkLAorCTB4Yzk5ZmZiYjIsIDB4ZGI5OGZlYzQsIDB4NmYwYTc3OTIsIDB4ZjliY2QxYTgsIDB4M2YzZmEzYmQsIDB4NTc4N2QyZjMsCisJMHg1ZGNlYmJiOSwgMHg2YjI1MWU3ZCwgMHgzYjE1YjVkZSwgMHhmNDkzNzg4ZCwgMHgwNzU2Nzc3ZSwgMHgzOGE1NWI5ZiwKKwkweDY5NTNlOGI3LCAweDYxZjMzMTYzLCAweDhmN2E0ODkxLCAweGExZWViNWQyLCAweGE4ZGM1MGY0LCAweDVhNTc5Y2IwLAorCTB4ZmVhMDMyMzcsIDB4ZDJlYmYyMmYsIDB4OGRmOTUzYjUsIDB4ZjRiZDdkMjgsIDB4NzNmNDVmNzcsIDB4YTY3Zjg3NTcsCisJMHgzNTczNGViNiwgMHg0YzNkOWU3YSwgMHhlNWI5YzNlZSwgMHhiYzQ1ZjYyOSwgMHhmOGVjNTNmZiwgMHg1YTM5Y2RiZCwKKwkweGYzMzI5Y2Y5LCAweDcyZjVjZWY3LCAweGQ1ZmJmMjc1LCAweDlmYjgyN2Q4LCAweDU4ZWFmNTg0LCAweGNiZjY5MzZiLAorCTB4NTdhZDk3ZWQsIDB4MWQwMmU0MzIsIDB4OWQ5YWM1OGUsIDB4NmY2NmExNzIsIDB4Y2JjOWE0NWMsIDB4OGQ4YjVlYjQsCisJMHg3MWY4YjVlYiwgMHhjZmE1NWViOSwgMHhiYzE3ZjViZSwgMHhkM2YzNDY1MywgMHhlZjkzYTNkZSwgMHhlY2I0OTQwYSwKKwkweGIzOWI3NWUwLCAweDg1MmQ5ZDY2LCAweDU4NjRmZGVhLCAweGE4ZmUyOThhLCAweDA1Y2YzNmI0LCAweDM1ZGNmZDNiLAorCTB4MDdlMDZkMWIsIDB4ZjEyNjE5M2YsIDB4ZjNmNzRhMTYsIDB4MWQ2MmY4YjUsIDB4MTQ4ZjM4YWYsIDB4YWY0NzNmODMsCisJMHg4M2I4M2UwZiwgMHg1OTc1YjljNiwgMHg3N2YxYjQ3OCwgMHgzZDFhMDJlZCwgMHhjNmM2ZDY5NywgMHhkYWQyYmM2MSwKKwkweDdmYTE3YmUyLCAweGU4NDBlN2U5LCAweDJlMTEzYmZlLCAweGY1MDk0NWY3LCAweDYyNzlmZDg3LCAweDU1ZWY4NzhjLAorCTB4Mzc3ZWQ3Y2YsIDB4NDNmZWI0MmYsIDB4ZGFmZGRkMWEsIDB4NGNiZmRmMjYsIDB4OTI3OTZjOGEsIDB4MjI2YTNiZTMsCisJMHhlOTEzZTAzYywgMHg4YzAxYWRlOSwgMHhkYzA2N2EwYiwgMHgyZjdjOGI3NiwgMHhmNWIyYmQzMywgMHhhMjQxYzA3MywKKwkweDIwZjVjNzNjLCAweDEwNWI3YmM1LCAweGJmMjgxM2VkLCAweDc5ZWYyMmM5LCAweGRkMzJhYWE1LCAweGE2MDdlMWE3LAorCTB4NWU4Yjk0MzcsIDB4NWYxZWZjYWQsIDB4MjE1MWJiZTcsIDB4OWIxNzZhZjQsIDB4MWZkZGUwZDcsIDB4ZWZjMTJmN2IsCisJMHhhOWY0ZTlhNiwgMHhhN2QzYTNmNywgMHhjZDNkYmY0ZSwgMHg5Y2Y3ZDc2ZiwgMHhjZDE0ODlkZiwgMHg0OWU1OTJjZSwKKwkweDBiYjhkMDc2LCAweGJmYzQxYmVlLCAweGYzNWRmMTZiLCAweDM1ZWY2YmI0LCAweDRjMzdjZTc2LCAweDY1YzdkZWZlLAorCTB4ZmE5NzRkZjMsIDB4NmRmM2NmNTIsIDB4NjZlODRjMmUsIDB4ZDRmM2ExYmUsIDB4NDMxZTg5ZjcsIDB4Njk0ZmU5ZGYsCisJMHgxMzk0ZmU5MiwgMHhkNDYzOWQwYSwgMHg3MGIyYzRlZSwgMHhlN2QzYWI4ZSwgMHhiZmY1ZGJhNSwgMHg4Zjg3YmRlZiwKKwkweGY2NjljNTg2LCAweGM4MjhkNmFhLCAweGRmYjVmMzk3LCAweDk5NDExMTUxLCAweDg2YTlmN2M3LCAweGFmZjlmYWVmLAorCTB4ZjNhNzVmYmYsIDB4ZGFiNTkzZTksIDB4ZWY1YTI4ZjksIDB4NzUxNjdlYzEsIDB4ZjUwZjdjNjksIDB4Mjg4OWQzNTgsCisJMHg2MjczMTNiYywgMHg2ZjRmODQ4YywgMHhkZTRkYWI3NywgMHg3NjUxMTY3MywgMHhiYmNmZGUzNywgMHhmZTNjZDZlOSwKKwkweDhkODU5NGJkLCAweGJkOWY1ODdkLCAweGY5OGQyZWE5LCAweDU4N2U0ZGMyLCAweDFlYTc0NTE3LCAweDgzZTM0OGIwLAorCTB4YWYxNmI3OTEsIDB4ZDdmNTAyYmUsIDB4YzJlZmYwYTcsIDB4NGU3YTc0MmQsIDB4NDNmNmU3YWQsIDB4MjMxMzkwM2QsCisJMHg1M2RhYTc5YiwgMHhmYTk2MWU1OSwgMHhiYjE3ZWU4MiwgMHg3YzQ1MTE1NSwgMHgxMjdjMGQ0ZiwgMHgzZmIyY2JmYiwKKwkweGUyY2ZlNzFkLCAweDk4M2Y1MmY1LCAweGUwNmIxMTY0LCAweDUwZDgxZDNmLCAweGY4MmZhMTM0LCAweGZjOGFjM2M0LAorCTB4ZTYwZDlhM2QsIDB4MGU4NmJjZjcsIDB4N2MwMmZhMmEsIDB4YmM1ZGY0MjYsIDB4NWUyZDZkNWIsIDB4ZTQ4MmE3ZTgsCisJMHgxNmQxZDgwZSwgMHg5ZTU4OGIzYSwgMHg5M2UzNDViZiwgMHhmOGRiOWFjNywgMHhhZjFkN2ViZCwgMHg3OGJmZTA4ZiwKKwkweDdlYzQyYWE3LCAweDFhMjc2YTE0LCAweGZmMDdkOWE4LCAweDdiOGZhZjFmLCAweDAwODAwMDNkLCAweDAwMDAwMDAwLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2NiNWZmMDAsIDB4NjU1NDVjMGIsIDB4Y2U3YmY4ZGEsIDB4YzBjYzJiOTksCisJMHgxMjQ1Yzg4MCwgMHg4NTg0OGI4NywgMHhkNzgwYzAzNCwgMHg1MDgxNTFkYSwgMHhiOWJiYTBiYiwgMHg2NThlMjFiYSwKKwkweDUwMDY2NWNhLCAweGQ3Nzc1ZGRiLCAweGE2YTE4Y2ZlLCAweDQ1ZmE3ZDY2LCAweDgwZWQ2NWE2LCAweDc2YzM2YTk3LAorCTB4YTgyODM0NDgsIDB4NTk5OTBiYzksIDB4NmEzNzYyN2YsIDB4NWI2M2I5MmYsIDB4YmE0MDJkZTYsIDB4NmRiZmVkZmMsCisJMHhiY2YzY2Y3ZCwgMHg1MTE3MzBlNywgMHg2ZmJlZmRkYiwgMHg3OTdiZjlmYywgMHg5ZjVlZjNkZiwgMHhjZmJjZjNmYiwKKwkweDhjMzQ2MzM5LCAweDYzMTgxYjc1LCAweDQxOGU4YjJhLCAweDg5NDg2ODM5LCAweDhkOGM5OTY0LCAweDYxNWY2OTA5LAorCTB4ZjZjMzg5NGMsIDB4YzY0NWRiMjUsIDB4N2NmYjQwNDYsIDB4MTk2MmM4OTMsIDB4ZmEzMWQ3MmIsIDB4MWZiZjhmN2QsCisJMHgzYzFmNzYzMSwgMHg0MmYzYzMzNywgMHgwN2Q2MzRhOSwgMHhjYzM3ZDdmZCwgMHhkNmM5NzJhMCwgMHhmMWFlNmRjMiwKKwkweDI1MDkyNThjLCAweDYwNjM5M2IxLCAweGI2NmFlM2MwLCAweGNlMjU4YTA3LCAweDJiMzA3NzE5LCAweDhkYTRkM2NjLAorCTB4NzNjMzI1ZDIsIDB4YzcyOTJiYjUsIDB4NDk2ZjlmZTAsIDB4MGM0OTQzZTMsIDB4ZDQ2OTlkYzYsIDB4N2I0Mzc3Y2YsCisJMHg0MTRlNjk4MSwgMHhiYTVmOGMxNCwgMHgzMjViMmEzMywgMHg2ZjVkZmJmYiwgMHhjOTFiMTgxMSwgMHg0NjczYTU1OCwKKwkweGNjNjE0YjFjLCAweDY3ZTFkZGYxLCAweDFmYjBhOTRjLCAweGYzMDRkMzk4LCAweDc3MDllNTdmLCAweGEzOGJhMGJiLAorCTB4ODI0OTJkYWUsIDB4YjNhYTNjMjMsIDB4N2ZhMDU4YTcsIDB4NmYzMWQ4OTUsIDB4NGU3M2NjMTIsIDB4YTA0ZGVmNzAsCisJMHg1MzM4ZTZmZSwgMHhlNWExZmFjMCwgMHhjY2M2M2FlOSwgMHhmZjM5OGNlOSwgMHhjZjM0ODdjZiwgMHgzYjg5ZTJlNywKKwkweDg3NzhjMDE2LCAweGNlMDQ3ZjczLCAweDFmZjhmNTUzLCAweDZjMzIwMWYyLCAweGIyY2Y2ODlkLCAweDhkYmNlMWU0LAorCTB4MWMxMjRkN2IsIDB4NTY2MzdiNzQsIDB4YmVlMzljMDksIDB4ZGE0NmM3YzcsIDB4Zjc5ZjJmMzMsIDB4YThiNjY4YjYsCisJMHhkYmNiZGEwNCwgMHg2OTU3YzExOCwgMHhkNDhlZTg1ZiwgMHg1ZWVkZGMyMCwgMHg2OTYxMzFhNiwgMHgyODY4OWE2MiwKKwkweDk1NmM0OGNmLCAweDUyZGJjYTA3LCAweDA2YjlhMmQ4LCAweGUxMGRiYjdmLCAweDg5OWVlYjAwLCAweDAyNTQ5MmRjLAorCTB4OWY3YjE1ZWQsIDB4Nzk0MzMyNDgsIDB4YTVlYmM4ZDYsIDB4OWM3YTdmN2IsIDB4ZGRmZjQwNDUsIDB4ZDVlMjBkNWEsCisJMHgwYjFhNjJhZSwgMHgyNWQ3YmI4YywgMHhiMjUwZGNkOCwgMHgxMmM2NjhmMiwgMHg3ZDZlYTMxMCwgMHg1OWIxOTE5OSwKKwkweGFmOWE3MDk2LCAweDYzMGU3YjYyLCAweGMxN2RmZWI5LCAweGFiM2Y2YTczLCAweDhmYjhjNTYyLCAweGQ5MDNmNTMxLAorCTB4OGJmY2ExY2IsIDB4ZTIxZjdiY2EsIDB4N2FiNTJmZjMsIDB4ZjExOTJiOGIsIDB4ZmNiYzI2NjIsIDB4ODQ1NDhiNjUsCisJMHgwNWZiYWVlZCwgMHhmYWMwNTYzNiwgMHhhYzFhNjM3ZSwgMHg2YWM5MTY1ZiwgMHhmNGExN2M3MSwgMHhjZjA0OWI1NywKKwkweGIyMTAxYzU3LCAweDc4N2IzMGI1LCAweDFlZTZiNzY2LCAweGQxMTY5MTAzLCAweGQzODliNTU5LCAweDc1NzY4YWQ5LAorCTB4N2ZlMDIyNTEsIDB4MmQ0MDhiNDUsIDB4MzM1Nzk1MGUsIDB4MmYyYWJlMWMsIDB4ODBlNjY2NGQsIDB4YjZiNjU2ZmQsCisJMHg4ZWIwY2M2OCwgMHgwOWNlMTlhMywgMHg1MzllMWRmZCwgMHg1ZTc4YTU5YSwgMHg3Y2IxODViNiwgMHg4OWZlMjdjMCwKKwkweGE1M2U2YmY4LCAweDNmMDAzN2I5LCAweDJlMWNhZGQ1LCAweGJlZGU1NmNlLCAweDNiOTAwMzM4LCAweDEzNjJiNjk5LAorCTB4MjZkZWEwZDIsIDB4NmIzZWJkNTAsIDB4YWEzNWZjYzIsIDB4ZmNmZTdhYzAsIDB4OWE1ODY5MzUsIDB4MzU0YzRlMDgsCisJMHhmMDAyNTQ5MCwgMHhhM2QxOTRkYywgMHhkNzNiZmM0MSwgMHg1ZDQyZjNjYSwgMHgwZDVlYjAxZCwgMHhkZTQ4ZTUxMiwKKwkweGYxYzA2YTllLCAweDNjYWYxYTY2LCAweGQxNDZiNjc3LCAweDZjMzNhZjc4LCAweDM2MDliYjAzLCAweDYxNTA2ZDUxLAorCTB4NDQzNGVmNTksIDB4NTZiM2I5NjAsIDB4NzE1OTUwY2MsIDB4MDkxNjYxNzMsIDB4MTYxMWRmZTAsIDB4NjEyMmM1OTEsCisJMHgzZDVlYWFjYSwgMHgzYjUwMTI0MCwgMHhmNjg0NTg3MCwgMHg4M2ZiNDhkYywgMHgwYzcxOWY0OCwgMHgzM2U4MDJiOCwKKwkweDA2MDU3OTkxLCAweGY5ZGZkZmY0LCAweDdmY2UyZTU5LCAweDE3ZGYxOGNiLCAweDVlYWViNjBjLCAweDAxN2U3ZDMzLAorCTB4OGIyNmMzZDAsIDB4NWY0YzhlN2MsIDB4YzhmMWQyMmUsIDB4YjBhZjQwNDMsIDB4NmNkNWE3YmYsIDB4Y2YwNzNlODMsCisJMHg0MmU2YzI1NywgMHgwOGMyY2MzYiwgMHhiOTg0ZGZjZiwgMHhhZmRmYzBmNywgMHhjZTIyNmYzMSwgMHg1NGRlNzRjZiwKKwkweGNjOWFmNzFjLCAweGMzNWEyNWE3LCAweGY1ZjYwMTA2LCAweDYzZmIxNDliLCAweDA1M2I4ZmI4LCAweDExNmNmOGY1LAorCTB4YzU4ZDIwNzEsIDB4ZmU2YWZkN2UsIDB4YzI3OTZkOWMsIDB4NGZmYzAzYTYsIDB4YTM2N2U4ZTcsIDB4NDA2MmU2NDUsCisJMHhmMTUxOWFhMiwgMHhjMTYzYTQwNiwgMHg2MGFiNjM2NiwgMHgwZjMzMDdmZCwgMHgyZTgwY2JkZCwgMHgzMWQwMWUxZSwKKwkweDVlYWY5YzJkLCAweDdkM2RjZmNmLCAweDAwOTRlYzIwLCAweDJhOGY0NmZkLCAweGY0MTY1OTE2LCAweDI5NThhYjM3LAorCTB4Mjk5NDNmZjQsIDB4OWZkODU1N2EsIDB4OWZkOGRjZTksIDB4YmU2ZDBhZTksIDB4ODE5NjU5MGMsIDB4N2E4OGQwZmMsCisJMHg3OGVmZjUxYiwgMHhjYTAxMWJmMywgMHhlMWUyZTk0NCwgMHhlMjU3Mzg0OCwgMHgzZDRiMDUyZiwgMHgzYzFiMjlmNCwKKwkweDg1ZmZmNGZkLCAweDUzNTJmNGIyLCAweGZjYTFlZmNiLCAweDE5YmRhNDc1LCAweGIwNzI3NzUxLCAweDUwMWQ5NGY4LAorCTB4YTNjOWIwZjYsIDB4ZjlmMjY0YjMsIDB4ZjFkZmY3MDIsIDB4YTIyMjZmYWIsIDB4ZmFiZWZmNDUsIDB4N2JlZjRlMDcsCisJMHhjZWE1OGFkOSwgMHhlOWI4YzAyMiwgMHg5YjU3OTIxZCwgMHhmYTdlZjk3NSwgMHhhOWUzNjFlMywgMHgzOWUxOGZkNCwKKwkweDViYTIwZGZiLCAweGUxZmZiMDEwLCAweGQzN2Y3MTBmLCAweDE0YWYwNjc1LCAweDE3ZDRlMzgxLCAweDM4ZmYzYTdjLAorCTB4NzUxZDFlNjYsIDB4Mjg0NjQ2ZmEsIDB4YjE5MTNlZjgsIDB4OGMzY2RjNTgsIDB4NzA2OGI4MWYsIDB4NmZiOWMxMzcsCisJMHhhMTRmZjk5MSwgMHg0ODhiMWVhZiwgMHhmMTkxZTlmOCwgMHhlOTkxYzBhNCwgMHg3ZTkxMjJiMiwgMHg1ZThhZDVlYiwKKwkweDRjYjM4NWYwLCAweGU4ZDY3ZjNmLCAweDVlMGNmZjM4LCAweGZmMzg2ZDEyLCAweGNkZDZiOTYwLCAweDhlYzE4YTYwLAorCTB4NTcyN2QyNTQsIDB4MDA3ZmE3OTIsIDB4ZDc0MGNhNzksIDB4ZmI2YTk3YmMsIDB4ZjkwZmMyMzMsIDB4NzhmYzA3NGEsCisJMHhjMDJmMGM5NywgMHgyNWY5YzMzZiwgMHg2NGJiZmU3OSwgMHgxMDY1ZGRiOCwgMHgxMjdlOWMzOSwgMHg2ZTk5MjcwMiwKKwkweGY2NTBiYTE0LCAweDU4NjM5ODJmLCAweDlmMWZiNDY5LCAweDQ3ZGRkN2VjLCAweDhmMDk5MzIzLCAweGUzODNmZmUzLAorCTB4ZGZjMjEzZWYsIDB4MDFkNjI3MzcsIDB4ZmY1MWIxMWIsIDB4ZmM3ODQ1OTgsIDB4NTc5ZmMwNWYsIDB4ZjgwYmZlYjQsCisJMHg5ZmM1MGVlYiwgMHhlMjNkN2Y1NywgMHhkMmQxNzFlZiwgMHgwODgwZmM4NCwgMHgyNmQyYTFjOCwgMHgwNjU4ZjljMiwKKwkweDkzMmZmZTIzLCAweGUwOWIyY2MyLCAweGZmZTQ3NjdjLCAweDhmZWY4ODliLCAweGZjMmJkZjIyLCAweDM3ZDhhNjNlLAorCTB4NDllNGY1MWUsIDB4N2RjMTllYzYsIDB4YjUwZjQ0ZjksIDB4MTBhNzY2YTcsIDB4YmFjNzVmOWYsIDB4ZjAxZGIwMTMsCisJMHhmMTE3Mzc5YywgMHhlODc2ZDgyZSwgMHhmYjdkMmMyNCwgMHg1ZGY1ODY1ZSwgMHgxZWNiMDYxNSwgMHg1YmJmNmYzOCwKKwkweGZlNjFhOTc0LCAweDhlZjcyODg2LCAweGMzNmViMGE1LCAweDE3MTY5OTVkLCAweGQ1OTYzM2I2LCAweDNjYTA3Mjg2LAorCTB4YmU3YTgyY2MsIDB4ODVjYjhhMjEsIDB4YTRlOTA1ODYsIDB4Mjc3ZTBmODcsIDB4NzNjMmFkMjUsIDB4MzRiMzA4MmMsCisJMHg2Yzg2ZmY0MSwgMHhhMDEzMjNkZiwgMHg2Y2Q2MzBkZSwgMHg1N2Q3NDE3MSwgMHgxZGJlOTYwNSwgMHhkMWQxY2ZjNywKKwkweDM4NzMwZDNhLCAweDMyM2MzNmRkLCAweDA1N2E4ZGRhLCAweDdhZjNjZmY0LCAweDFlNTkzZmE4LCAweDBkOWNmMGM2LAorCTB4Njg4NGI2OGQsIDB4MjI5N2NiYTAsIDB4NjFiM2EzZWMsIDB4NGUyNGEzZmYsIDB4ZDBjOTBkZDcsIDB4YTEzNmU1MGUsCisJMHgzODdkYzE2NCwgMHg2ZmJlNzhkZiwgMHgxN2IwODJkZiwgMHhmYTJjYzJmNywgMHhkMDU5MTAzNCwgMHhiMTk1NzI3ZSwKKwkweDQyYTVlNTA5LCAweDczYTU3Nzk3LCAweDc1YzYzNzc5LCAweGM5YzIwNzZhLCAweGQ0NjU5ZDM1LCAweDkzN2ZmY2MyLAorCTB4YmI4MTRiZTksIDB4NTU2YzYzNjAsIDB4MGFmZTFmYjQsIDB4NzBjOGM1OWQsIDB4N2E3MzU2MTcsIDB4ZTU5NzRkNzMsCisJMHhkNzczMzU2MiwgMHhlNjVmMDgwYiwgMHg5NmY4MDcwYiwgMHg0MjQxNDE2OSwgMHhhZGQ5MzQ2OSwgMHhlNWZhZWZiOCwKKwkweGY3MDkxNzgwLCAweDUyN2ZlMWNmLCAweDYxOWVlNTY0LCAweDI4NDdlN2Y4LCAweDRjODhmMzJjLCAweDMyOGZlNDA0LAorCTB4MGNhM2Y5YzYsIDB4NmZlOTA4ZTksIDB4MDA1MWQwMTUsIDB4NzVkZjMxZmQsIDB4NjVjM2E3NTEsIDB4NmJmMTgyM2EsCisJMHg3MGQzMjU4ZCwgMHgzZjg1Y2ZiZCwgMHg4OWUzNjNlNCwgMHg4N2YzNGE3ZiwgMHgzNjU2Njc1YiwgMHhmNDBiMDM5NywKKwkweDlmZDg5OWY2LCAweDUxMTQ4ZWVkLCAweGYxMzBhZTVmLCAweDdmNjQ0ZWY1LCAweGM1ZjUxYTM2LCAweDc5YmQ1ZmM5LAorCTB4MjNjNzk2MWQsIDB4ODZjYjZlNGEsIDB4N2MxNmRiZmUsIDB4ZmNlMjg0NWQsIDB4MzUzZTA5NmYsIDB4MGI2ZmUzOWUsCisJMHhiNDY4ZmZmZSwgMHhiZjU2Y2E0MywgMHg0M2ZlZjQ0OSwgMHgxOTI4NTlmNywgMHhhZjRlNTAzMiwgMHgxNWE2N2QwNCwKKwkweGIwNzRlNGIwLCAweDc0NDYzZWYyLCAweDg5NmFjODkwLCAweGZkNjVlMzZlLCAweDQ3YTMwYzA1LCAweDAwZjM3NTM5LAorCTB4YmNjYThlZDgsIDB4OTc0N2ZmZjAsIDB4Y2U4OTZjNzQsIDB4YTJjNjlmNWYsIDB4NzQzM2VhODIsIDB4MGJmZDQxMDksCisJMHhjZjQxYzk0ZCwgMHgxNzFmOGQ2ZiwgMHgzOWE2N2NmNCwgMHgzYjNlYTgzYiwgMHhmZjUwNTI2MywgMHg4MmQzMmRkYiwKKwkweDljNGU3N2VhLCAweDhlN2ZkNDE5LCAweGRkNTA0ZTZkLCAweDFmMjQ0Y2M2LCAweDczOGFlYTNhLCAweGUxYmIwMTNmLAorCTB4ZGM5MmJhYjUsIDB4ZTM5NzU0NGYsIDB4ZDBmNmFhNjMsIDB4ZTgwNWIzN2UsIDB4NWYzYmRiMjQsIDB4OTFlYTA5MzUsCisJMHg0MzI2NTY4NywgMHgxMWNiNTM3ZCwgMHhmNDNjNGY1ZSwgMHg2NmUwMzI0NSwgMHhmOWQxY2I3MywgMHg1M2RiZDAyYSwKKwkweDQ1ZjQzYzZmLCAweDZkMWZkNDBhLCAweGE3Y2ZlMmU5LCAweDQwYTM2MmMwLCAweDM5YmNiNmFjLCAweDlhZjgwNWRmLAorCTB4OGFkZjYyOWIsIDB4YTk3NzlhZjgsIDB4Zjk4YTI4ZjYsIDB4YmRjY2Q3ZjcsIDB4Yjk0MjU5MmYsIDB4MDY3NDY3MzAsCisJMHhjNTM3MjdlYywgMHhiZjNlMTBmZSwgMHg3NTllZjYyYiwgMHgxZmZiMDA5MSwgMHg0NmFiNWI3ZCwgMHg1ZDk4YmYzYywKKwkweGExZTkxNWIyLCAweGYzYTcyMmZmLCAweDkxOTc4ODUzLCAweDk2MDk3ZWZmLCAweDhhNjFkOTAzLCAweDNjOTJiZDljLAorCTB4MDNhZGY4NTQsIDB4MTUxMmM2ZjQsIDB4YTU0NzQ5YzIsIDB4ZTU0NGNlYjcsIDB4MmE3OGJhYTEsIDB4ZDk5OWQ0OGYsCisJMHg1NzYzODAxMiwgMHhjNzk1MDY1ZCwgMHg3ZWQ0MmNlYSwgMHg5NTIyNmViYywgMHg1NDZjZWEyNywgMHg0YzU3NWJiZSwKKwkweDA5NWQ3NzY1LCAweGIyZmYwYTk1LCAweDZhMGQ5NmJkLCAweDJhOTc0MjI0LCAweDRmY2ViNGVhLCAweDYzZDI1NzhmLAorCTB4NjlkOTI4MjAsIDB4ZjlkMDlmMDUsIDB4MzlhZGJkNGQsIDB4OWQ3NWNlOWIsIDB4Njk1OWU5MDksIDB4ODFmOWRhM2YsCisJMHg5ZGZhMDQ1OSwgMHgzZDExZDU2YSwgMHg5Yjc0MzU0ZiwgMHg0NzVlNTY3NSwgMHgyMmZiYjhiOSwgMHhiYzExOGFmMywKKwkweDVmYjAyYTlmLCAweGZkMWIyNzhjLCAweDAzMGVhOTk4LCAweDg0MWI0YmY1LCAweGVmZDg1OTdlLCAweGY3OTQwNGNkLAorCTB4MTYzNTZiNTMsIDB4NTA5ZTYzYjQsIDB4ZjYxZTk3MzMsIDB4OTBkZjE0NmYsIDB4MjBlMzFkNzAsIDB4MDVkODZjY2EsCisJMHg5MDNhZDUxOCwgMHg2YmEwNzE1NywgMHg2M2Y0MzlmMSwgMHgwZjc3MjgzYSwgMHg0NzQ2ZjVmMiwgMHhmOTQ3MmVkNywKKwkweDYwY2NiYTM0LCAweDk1ZjJlN2E5LCAweDA4ZTI0YmU0LCAweDJmZWUwMjZmLCAweGRhODZhNTcxLCAweDE5OGY2MjhkLAorCTB4OWQ1ZjYwZTUsIDB4NjlkMjE2NzcsIDB4MGFlNzJjODEsIDB4MzBlZjVjMzQsIDB4ODBiZGU0MTEsIDB4NTc2ZGZiN2MsCisJMHhlZGYzZGEyMiwgMHhkMDJmOWVkYywgMHhmYTQ0ZWM5NiwgMHhmZTcxNTZhZSwgMHhmNzdhMzE2NSwgMHhkNTQ3NWMxZSwKKwkweGY0MmNmMTVkLCAweGI0NGQ4OWViLCAweGM1Njg0MjZjLCAweDYwNjk2NDFmLCAweDE0ZDYxN2I3LCAweGVkZGNhMjY3LAorCTB4YWY4ODViNjEsIDB4MTNmZDVlYzEsIDB4MzM4ZmRiZDIsIDB4OTk0NWRmODEsIDB4Zjg5ZTYwNDgsIDB4NGRhNmYwZTIsCisJMHhkN2FkZGEwMiwgMHhjZTVkMjFlNywgMHgzMDBmOWFkNSwgMHhmNjVmMDdlMCwgMHhkY2ZiZDEwMCwgMHg3YTFlNzM0OCwKKwkweGFmZWNiZTBhLCAweDdjY2UzZDc5LCAweDI2ZTc4MDQwLCAweDAwYmYzMDM2LCAweGU5Y2Y1NWVhLCAweGYwMDQ5ZjRkLAorCTB4MTUxM2QzYTksIDB4NGI2OWFmNTQsIDB4YzAxMjdkMzAsIDB4MDdmODU1YTcsIDB4MDliNzQ3ZmEsIDB4MGViYjk0MmEsCisJMHgwNGE3MmI3OSwgMHhiN2M0MDVmYiwgMHgwZDczZjhiMywgMHgwNjgwZGZkZiwgMHhkOThiZDhlZCwgMHhiMDZmYTI2NiwKKwkweDBmZWY0OTk3LCAweDliYmEzNGNjLCAweDIzNzFiZjYwLCAweGEwNTdiMzZhLCAweGNlNjk5NGZkLCAweGVhNDk3ZWMzLAorCTB4NjNmNDA4ODEsIDB4MTU1NWJmZmEsIDB4MTllZmM5YmIsIDB4NzhjOWY4ODgsIDB4ZDMzZDdkM2YsIDB4Mjg3YjUxMjEsCisJMHg3MGU2YjVkZCwgMHhjZDI2YWY3ZiwgMHg1MGYxMTliMCwgMHg1MWQzYWYxZCwgMHg4OGIxNzFkOSwgMHg5MjU2OWQ5MSwKKwkweDRkYjk3Njg2LCAweGQwY2JmZGMzLCAweGI4NzM3YmYxLCAweGFmNWU0OTFlLCAweGEyNDBiOTIxLCAweDBiNmNiNjA4LAorCTB4YzVkZDRhNjMsIDB4ZjhkNjMyMjYsIDB4YmYyMWIwOGIsIDB4MzRjOWMwMDcsIDB4YzgzZjY1NjMsIDB4NDE0NzYyMzUsCisJMHgxYjdmNTA1YSwgMHg4ZTdhMWZmNiwgMHg4ZmYzMWNmNiwgMHhiYjQ5Nzk0ZiwgMHg1ZTRhYWQ2MywgMHgyOTY1ZTkwZiwKKwkweDE4M2ZhMzczLCAweDcyYWJjNzJhLCAweGMwYjk2NWEzLCAweDhjNzRmY2YxLCAweDljZjExMWJlLCAweGU3N2QwMTI2LAorCTB4NTA0Y2M5NTAsIDB4YjIzMzg2MjYsIDB4ZDc1ZjEzMzcsIDB4NzczZTkxYmIsIDB4YTdmZDM5ZWIsIDB4MmRkY2JjODksCisJMHgzMDlhZmVmMiwgMHg1NzdhNDJlNiwgMHhiOTRkODdmYywgMHg3OWI5MjlmNiwgMHhlNjk3OGYzNCwgMHg5MWIyNWE5MSwKKwkweDg3OTgxM2FlLCAweDI0ZWM1N2Q2LCAweDQzZDgxZmE1LCAweGFhMDIxMjdhLCAweGQ3YzQ3NDgxLCAweDE2MWM0OTU0LAorCTB4YTY3MjI3OWUsIDB4NDQ4Y2U1MTUsIDB4NGZiMWIwZmUsIDB4NWY3N2U0MDMsIDB4NDBhYWM0NzgsIDB4NzhlMzU1ZmMsCisJMHhlOWI4ZTA0MywgMHhlZjE5NGUzNCwgMHg0ZmIyMjU1YywgMHgyNDVjOTA0NywgMHg4OWE2NzIzYSwgMHg0YjU2MmZlNCwKKwkweGZlODA4OGVjLCAweGEwZDZlYjE2LCAweGY1YzY1MzllLCAweDE0ZmMxYzgyLCAweDkwNDdmMGYwLCAweDA4N2U1ODhiLAorCTB4ZmZkNzEwZjIsIDB4MmM0M2M4MzMsIDB4MTBmMjBhZmYsIDB4M2M4MjRmZGIsIDB4ZjIwN2QyYzQsIDB4MDYzZmRiMTAsCisJMHhiY2U1ODg3OSwgMHhlNDU2OGRiYiwgMHg2OWI2OWE5ZiwgMHg3ZTIwZDNlYywgMHgwMTdkZGI1MCwgMHhjMzY5ZGVmNSwKKwkweGE2NDM5MWQzLCAweGUxZTRkZWEzLCAweGUxY2JhZjlmLCAweDJkZWY0NTdlLCAweGEwZmQ5ZjFjLCAweDAwZmZkMWJmLAorCTB4OGE2YjVjYmEsIDB4ZWYxZWIyYmUsIDB4MWVmOWIyMzcsIDB4N2NiNmQzODAsIDB4MjdmNDg3NmUsIDB4MWNkMmZhZjAsCisJMHgyMjZkZDUzNSwgMHhiN2UzOGVkYiwgMHhmYWY4NmJlNSwgMHgzZTM5NjIyOSwgMHg3OWYzNDViNywgMHhiMjQ1ZDM3YiwKKwkweDllNGVhNjlmLCAweDllMDcyNGI2LCAweDNkYTE2MmRiLCAweGJkZWY1ZmM3LCAweDhkYjczZjgxLCAweDdhNDNlZGUyLAorCTB4MjUzZTdlNTYsIDB4ZWZmOGE0ZDcsIDB4NjUyZmRjZTksIDB4YmQwMTI3NjQsIDB4ZmY0YWZjZDMsIDB4M2U3MjI2ZjcsCisJMHg0ZWVmZWQwYywgMHhjM2RkOGIxMywgMHg5OTJkZTNjMCwgMHhkMDJmODk2ZiwgMHg0ODNlNDY5ZSwgMHg2YThiZTAwZSwKKwkweDQyODVmMTMzLCAweDU1ZmQwYTg3LCAweGE3Mzg3MmU1LCAweDA3M2E2NTY5LCAweDQzZjA0MmRkLCAweDNhNzI4MzFkLAorCTB4MjVmNjRmNGUsIDB4ZTBjNmM1YzAsIDB4OTkwNWJiM2MsIDB4MDFmOTQyNWYsIDB4MGEwN2Q0NGEsIDB4YTA3YzI4M2YsCisJMHhmMDIyN2JkMCwgMHgzZmVkMTA5OSwgMHhmNDIxY2RjNywgMHhjYThmOTRhYSwgMHgzNThlZThlNywgMHhkYWYwOWNmZSwKKwkweGRmYTEzNmExLCAweDg3Y2MzMzc3LCAweGMxYzUxM2UzLCAweGZlNDZlZjc3LCAweGQxOWEzNThjLCAweGM4N2MyY2Y1LAorCTB4MWM5YzNiNTAsIDB4YzJlZmZhZWIsIDB4NTcwYjkxNDMsIDB4NzA2NWM3ODAsIDB4NWZmMmYwZDAsIDB4MzljOTAzODUsCisJMHhiZjQ4ZTM5NCwgMHhmZGFkYzhjMywgMHg1ZGIyZDEzOSwgMHg0NGY3ZTljZSwgMHhkMjFmNmQ4ZSwgMHg1N2EwYmY1MSwKKwkweGFmZDBkZmExLCAweGQ5ZGFjMzY3LCAweDdmMzlmMmRiLCAweDA1NTQ3NDI4LCAweDg5ZWIxMDNhLCAweGNiZDRjZTc4LAorCTB4OWU3MjllZTUsIDB4NjMyZTczYTEsIDB4YzJkMmZmMjQsIDB4OWUyODdiNzgsIDB4YzgwNTczOTUsIDB4MDEzOWMzYmYsCisJMHhiOGM2MWZmMSwgMHhkODFkNzE3ZCwgMHg0ZDRmZTgxNywgMHgzZWQzMzVjOSwgMHg1NjdlNDdmYSwgMHhjZmY5OTViNiwKKwkweDZmMGU0NzdmLCAweDg4OTQ0YTdmLCAweDMyZmQxNDFlLCAweDhiNDgyZWQ0LCAweGU5MDY2NGU2LCAweDNmNDI2NjFkLAorCTB4ZmM0YjUzYWYsIDB4ZTY3ZjA1ZWUsIDB4M2U4NzE4MjUsIDB4M2ZlNDliMjEsIDB4NzFlMzIwYmYsIDB4MTE1OGZlNzAsCisJMHhhZmJlYmJlZCwgMHg2M2Q0MmUwZCwgMHg0ZTA2YTM3ZCwgMHg2ZmJlMzAwYSwgMHg2NDM2MTgzYiwgMHgxMzZlZDg5NywKKwkweDA3ZGVlZjQwLCAweGQ0ZjUwNjNhLCAweDJjN2I5MDA1LCAweDcyNzNiMTlkLCAweDczY2ZhMTFjLCAweDczZmEyNGYxLAorCTB4YTYyNDNiMzUsIDB4M2I0YTUwMDMsIDB4ZjQ4NzlhYmUsIDB4NmQ1M2I0YjQsIDB4ZjZkMGI4YTIsIDB4M2QyMThlYzcsCisJMHhjYzE1NmU5ZSwgMHhiNWY0OTc2OCwgMHhiZmExZjFjMiwgMHhkNmU4YzFiMywgMHhhODIyZmY0MywgMHgwNjY1ZmY2MywKKwkweGQ3Y2NkYjhkLCAweDQzODNmOGEzLCAweDdkNTNlZjVlLCAweDg1YzYwYTc1LCAweDEzNTBlYzY2LCAweDJmM2U5N2RjLAorCTB4M2IzZWQxYjksIDB4MGFhNTdkYmMsIDB4MDJkZGE3ZWIsIDB4NDU3MTgzOGIsIDB4MDRhZWVhZDIsIDB4MmQzZTU3YTgsCisJMHhjZTMwYjQ1OCwgMHg4YjNhMjg2MSwgMHhlN2NhODJmMSwgMHhmMzBiYzU5OSwgMHhjOTE4YjY1NywgMHhhMGRhNWRjZiwKKwkweDYwMTdkOGZlLCAweGI3YmI5NDVmLCAweDI5ZWVkMDZhLCAweDVlZGMxOWRmLCAweDBlYjgzYmI5LCAweGVmZjkyMmY4LAorCTB4MDBmNjg2NjgsIDB4OGU2ZGZjZjksIDB4Y2RlYzg2MzEsIDB4ZWQxYjJjNzEsIDB4ZTNjMGQ2NGQsIDB4YmY3YzhhYjksCisJMHg3MTc1NmVkYywgMHhjYjgyYmEzOSwgMHg4Y2JlYzY2ZCwgMHhlYTVmN2Y0NSwgMHg2M2U5MmFmYywgMHg5MWNmYWYwMywKKwkweGZlYTBhN2ViLCAweDJmMWM1N2Y5LCAweGU1YWE1YzBhLCAweDYwNGYzZmI1LCAweGI3OWMwZjU2LCAweDQyNmY1M2JhLAorCTB4ZmRiYWJmZmYsIDB4YjcxODExZWYsIDB4NTFmMzA5YWYsIDB4MjJiZDlmN2MsIDB4ZGJkZWQwOTksIDB4MTBiOTI2ZDgsCisJMHhmZDBlY2ViZSwgMHg1NmUwMTEyZSwgMHg4ZDNkZTA3ZCwgMHg1ZjcwODhkOSwgMHhhZGNhZjY0ZSwgMHhlMzFlYjVjYywKKwkweDY0NTE1ZWRjLCAweGRkNDc0NGRkLCAweGI2NjZhNzE0LCAweDRmMzhhNTgxLCAweDg0ZGViYjVmLCAweDJiZjU0MDc2LAorCTB4OGRkZDc0MWYsIDB4ZDMwMjAzZjUsIDB4ZmI0NzFlMjMsIDB4ZWU5NjRlODgsIDB4MmRhNTg2NDAsIDB4ZmJlNDI2ZGQsCisJMHhiYzQyNDRlOSwgMHg5MTNkOWUyMiwgMHg4ODY1YWY4NCwgMHhlMDMzYzQ3NywgMHgyMTJjZjExZCwgMHg1MWJjNzEzZSwKKwkweDIyNzRlNmUzLCAweDczZjRmZDUxLCAweGRlMGFiZjFjLCAweDFhY2RhNDhiLCAweGU0NmNhZjZjLCAweDYzYjE5ZTc4LAorCTB4YTIzMGI2Y2YsIDB4ZTk5MzM1MDMsIDB4N2E3ZWYwODAsIDB4YTZiYmM3MjcsIDB4MTQ2NjlkNzMsIDB4MDg2MzZmZDIsCisJMHg4NzZiYjQxZCwgMHg3N2Y3MDBlOCwgMHhlMDg0MWQxOSwgMHg4ZGYwMDJiZiwgMHgwZTk0MjA3MiwgMHg5M2RmZjE0MiwKKwkweGQ4MDZlNWMzLCAweDQyOWZhN2RmLCAweDdlMDhkYmZiLCAweDIzYzdmMzAxLCAweDFlZjU1NjQ2LCAweGNhZjU4MThkLAorCTB4OTczYmNmYTIsIDB4ZjhkOGZiNDMsIDB4MDhkYTU4OTcsIDB4ZTQxNTdmOGEsIDB4ZTY2YmZjNjIsIDB4NWQxMGViM2IsCisJMHhjODVlYjMzZCwgMHg1N2E5N2E0NiwgMHg4MTNjZjZmYiwgMHg3MGE4OGI3MSwgMHgyN2Y0ZTM4YSwgMHgzMmY5ZDljZiwKKwkweGZhMjBiYjljLCAweGQ4MTZhNDliLCAweDVhNmJjZDdmLCAweGM5MjhkZWJhLCAweDM1ZWM4NzE1LCAweGYxMjk5NzhjLAorCTB4YzUzM2MwNzQsIDB4NWExZDljYzksIDB4MmQ2YjE3MWUsIDB4NzNmYTA1YjQsIDB4NWNmYzA5ZmQsIDB4YjI4MTlhODUsCisJMHhjMDE3ZThlNSwgMHg2MDhlYjg3YywgMHg1NTVlN2VlMywgMHgyODE3OGYwNywgMHgxMjk1NTk3ZSwgMHg4ZTBlNjgzNywKKwkweDc3YTYwODFiLCAweDJlNDU1ZmE4LCAweGM2YTU1ZjhmLCAweDNiNDY2Y2RkLCAweGIzMDE3ZWJjLCAweDRkNWVhNTg3LAorCTB4Y2M3OGYwM2YsIDB4NzRkZmIyZDMsIDB4MGFmMWZiNDUsIDB4MWJiMTQyN2EsIDB4NmUzODJiOTksIDB4NjVhOWM4YTEsCisJMHg4ZjFlZjkxMywgMHg2YWI4ZTJmZSwgMHg3NmZkYzYwNCwgMHg4YThmODQwYiwgMHg3MDRmOTAwZSwgMHhkYWI3MGFkZSwKKwkweGY4MDIxNjZkLCAweDE5ZmZlZTQ5LCAweGVkYzAxYmQyLCAweGEwZjZhYjhjLCAweDE5ZGQyMTI4LCAweDk5MGViZjY4LAorCTB4OGU5MWFiM2UsIDB4ZDY5NWJjZTAsIDB4OWNmMDIyMzcsIDB4MzhhZTU5MGUsIDB4N2YxNDhkZGEsIDB4OGE1YjY0YWIsCisJMHg2MTJhZWU5MCwgMHhmNDMwZWYzZCwgMHgwYjVjZjk1NCwgMHhhMmQ3MjlmOSwgMHhhY2NlYzUyNywgMHhiN2VlMGQ2ZSwKKwkweGNlNDg3NzMxLCAweGUwMWVmZjhjLCAweDM5NjQwMWJiLCAweDk5MmU3YmQ3LCAweGYxMjMzMmZlLCAweDk5OTA2ZmRlLAorCTB4ODc5ZjkxMjMsIDB4ZWRjMDlmZjQsIDB4NWNmZTQ1MzcsIDB4M2M1ODFkYmYsIDB4NmU3MWRlNjAsIDB4YWMwNTUzMWQsCisJMHhhNjczZTM3ZiwgMHg0Zjc4ZmFhMCwgMHg5YmZmNTA3YywgMHhjZjQxY2NkYSwgMHg0MTE5YmRiMywgMHg1OThmNzNjZiwKKwkweGRkNzllYTgyLCAweDRmZmE4MzEzLCAweDU0MTZkMGY4LCAweDBlMmJlNDlmLCAweDRjZTUzZmVhLCAweDMwN2Q1MDQ5LAorCTB4OTU3M2NlMTMsIDB4ZTM1YmMxZmIsIDB4MzNmZWEwODUsIDB4ZjlhMGZhY2QsIDB4MDU0NDY3NjcsIDB4MzIwZDA3ZDUsCisJMHg1MmJiNjQ3YywgMHhjZTVmNzdiMSwgMHg2ODZlZjZlNSwgMHg3NmY3YzBhOSwgMHg4YTNhZjA0YiwgMHhjNGU3N2ViZiwKKwkweGQ4ZTZmNWUwLCAweGExZmJkNzgyLCAweGZhMGJkOTc4LCAweGMyN2UwNTU0LCAweGIxNWZhMDczLCAweDEzZjgxZGZjLAorCTB4OWExM2YwMmEsIDB4ZmFjMDlmYzEsIDB4NjA0ZmUwOGIsIDB4MDI3ZjAxZTksIDB4N2YwMjVmZGIsIDB4ZTBhZGViMDIsCisJMHgyMGZkNjA0ZiwgMHg2ZjU4M2ZmOCwgMHhmMmE2MmJhYiwgMHg2YTEyYmE5NSwgMHhiYWZjMTZiZiwgMHhjOThmNzVlNCwKKwkweGQ3OTcxZWViLCAweDc0ZTE3N2ZkLCAweDVkZWY5ZTQyLCAweDljNmViZTc5LCAweGRjZmZjZDJmLCAweGJjNTYzYzU5LAorCTB4MmQzY2ZjMDQsIDB4ODdjNmFjZmEsIDB4NWYwYWMzN2UsIDB4MDYyZGM2MTEsIDB4YzYxODkyZGUsIDB4N2RkZDk5YTUsCisJMHhmNTA2MmVhYywgMHgzMzhhMDhkOSwgMHhiNzgxOTJiMywgMHg3ZDUyYWUzMSwgMHhjOWI0ZDUyMCwgMHgwZmVjZmE4YywKKwkweGJlZjNlMmVmLCAweDdjOGNjOTU2LCAweGVmZWRhODc5LCAweDg1Y2YzODExLCAweDVmNzQ2MTRiLCAweGVmMTA3YTRhLAorCTB4NTQ2MWJmMWIsIDB4MzFjZjA0ZGYsIDB4MDViMzNhMGUsIDB4MzdlOTA4MDQsIDB4MGJiN2U5MGYsIDB4NGRkZDRhNjksCisJMHhjZDI1YmRmNywgMHg1M2M0MWEyZCwgMHgzYzI5ZjIxNSwgMHgwZWEzY2I3ZiwgMHg2MzVjZmU3ZSwgMHhmNjEzNzNkMCwKKwkweGU1NGFiMjg3LCAweGI5YzIzOGE2LCAweDJmM2U2NTM2LCAweGYxYTQ3N2Y1LCAweGNmNzNjZjdiLCAweDA1M2Y1ZTFkLAorCTB4ZTJjYjZmZjUsIDB4NWU3Zjc4MTEsIDB4ZWM1ZWZjZDUsIDB4YzdjMTU3YmQsIDB4Yzg1ZjA3ZTcsIDB4NzZjYWZiYTQsCisJMHg5ZmUwY2Y5OCwgMHg5NmFlZDljZiwgMHg4ZWZmN2NlYiwgMHg2OGEyOTZiNCwgMHgwMmNkMWM1NCwgMHgwNWM1MGIxYiwKKwkweDVmZWU4NWI2LCAweDM4ZjZkYWFhLCAweDY1NTU2ZTUwLCAweDAwNjZhZGRjLCAweDI0OGY3ZTlmLCAweGJkZjgzN2M3LAorCTB4YjhjNGMzOTEsIDB4MjJmOWU3MWQsIDB4NWY1N2VmMDIsIDB4YzNiZDFjZjcsIDB4MzhlZGY4ODYsIDB4ZjZlYjgxMWMsCisJMHhmZTQxNGFiNywgMHhiNzJiNjhkMywgMHgzNTViNDc4ZiwgMHhhZDBiYmY4NCwgMHg1ZWYwMjM4NywgMHgzMGU3YTM3NywKKwkweDRiY2FiYjg3LCAweGQ3MjQzZmU3LCAweDc4MjRhMWZiLCAweGZlNzQ0OWI3LCAweGQwNjI0YjhhLCAweDU1ODY3NjNkLAorCTB4YjY2Njc5YTIsIDB4YjllMjM1OGQsIDB4YmQ3YzNjN2EsIDB4Yjc5OWFiMWMsIDB4ODI1ZTJkYTcsIDB4YmYxZTNmZmIsCisJMHg3YjIyNGYyMCwgMHhjYTM1MDQxMCwgMHhlZjY2MWJmMSwgMHhjYWE0M2I0MSwgMHhmMzg2ZDkyMywgMHg3OWU0MGFlZiwKKwkweDRlOWNkNGJiLCAweGRmZGI0YWRmLCAweDc4ZjhmMjg1LCAweGQyNmM4OGYxLCAweDY5OWY4YTExLCAweDkxNmY3NmU1LAorCTB4N2E4NjllYzYsIDB4MzY2MGM3YTQsIDB4NTgzZjlkMjIsIDB4ZmM0NDZhOWMsIDB4ZGIxMmMyMWUsIDB4ZWM2OTc3OGIsCisJMHhlNmM3YmMwNiwgMHhiYTk4ZjVlYiwgMHg3YWVlOTAyMywgMHhiNDI1NzM1YSwgMHhmMmY5OTQ3NywgMHhlODg3NzVlNSwKKwkweDJlNmYwODdiLCAweGJiYjk1M2MyLCAweGY4ZjM4MGQxLCAweDczZGJjN2YxLCAweDdmZWEyNmFjLCAweDNjZGVmZGRjLAorCTB4MzI3YWFiYjQsIDB4ZTkyZWM5YzIsIDB4YTdmMjMwZDIsIDB4NWRiOTlhYWIsIDB4ZDg5MWQzZGMsIDB4OTI0Zjc4MTgsCisJMHhmMmZkOTU2MywgMHhkYWYwOTEwYywgMHhmYjk2YTZkNywgMHgwNTg3YmRkZCwgMHgzOWQzNTNmNSwgMHhkZTBlZWMyZiwKKwkweGVhN2RjOThmLCAweDFkYzdiNDUxLCAweGY1MGM0YjRmLCAweDFiNWQ0M2EyLCAweDZjZmZlNzhiLCAweGNhZmVmMDY3LAorCTB4ZDQzYjM4NjUsIDB4MDBkOGQ4ZGUsIDB4MGZiNDc1N2EsIDB4ZTg4MThkZjEsIDB4MTNlMTVkYmMsIDB4YzE1M2UxMzMsCisJMHhiNzA2NGY2MywgMHhmOWUyN2FlNywgMHg2NWEzYTRiZCwgMHhlNWY1ZDEwZiwgMHg2NGVlYTRmMSwgMHg3ZjEyMWZmNCwKKwkweGU3NzhhM2E5LCAweGM1NjdmY2I1LCAweGFmZjAwODZlLCAweGVhOGJmYTE4LCAweDMxM2NkNGUyLCAweGJjMWY2ZmM1LAorCTB4YjZhYjZiOTYsIDB4YWJiZjQ0OGUsIDB4MWVjYWZjODQsIDB4YWMyY2Y2MDYsIDB4M2E3YjQ0ZTksIDB4YjYxZmYyOTIsCisJMHhhZDgzYmFlMSwgMHg3NmJmYmE2YSwgMHg3ZDY2ZGFlYSwgMHhhMGQ5NzYwMiwgMHhmNjA1MTgwNSwgMHgyZDUzYjgzZCwKKwkweDBjZDk3YmRmLCAweDk1MmVkNzY4LCAweGNjY2ZkYWVkLCAweGY0MDk3Y2Y2LCAweDQ4OGQ3M2FmLCAweDg2NjQ3M2U3LAorCTB4MjdkMzFmOTEsIDB4NWJjZmJkY2IsIDB4YmIyNGVmOTIsIDB4NDI2NDk4ZTEsIDB4ODc4NjY4N2YsIDB4NjY4ZWMxZGIsCisJMHg3YjU2ZDc2ZSwgMHgyYTYzZmY5MiwgMHg2YWNkZWRkYSwgMHg4YTYwZDRjYywgMHhlZDk0ZTIxZCwgMHhkZGIyZDM5MCwKKwkweDgwY2Q3YTdiLCAweDRlOWJmYzg2LCAweDhjOTYzZDgxLCAweGJiNWIyYTc5LCAweDMzYjllMTEyLCAweGIzZDkxNjczLAorCTB4ZWM5OWE5NGUsIDB4ODNkYjY1ODksIDB4NmZiMDA3ZWQsIDB4Y2Y1NWVhODIsIDB4NzIxN2RhODUsIDB4ZGMxM2NiN2MsCisJMHhkYjg3ZjhhZSwgMHhjNjc2NDNhYywgMHgwYTY3ZjQzOCwgMHhjODcxYTlhNSwgMHg3OGM4MmYwZiwgMHg5NTliZmM1NSwKKwkweGI3OTQyZGUzLCAweDllNjU1MWIzLCAweDEwMjFjNGE1LCAweGZiOWQzNTVlLCAweDZlZGY3MDJiLCAweGZjODU5ODQ3LAorCTB4MTBhZjU1OGQsIDB4ZTRiZmZiNWMsIDB4M2M3ZjRjN2UsIDB4MzNmNDc4MjMsIDB4MzZmZWRmMGUsIDB4NmEzNWU3NGUsCisJMHg0OGY5OGRjMSwgMHgzNGI2NDAzNSwgMHhhZjcwNGU5ZiwgMHg2YmIzMzhjMSwgMHgxM2U0ODIzMCwgMHgxN2M4YzU2MywKKwkweDdmNzAxNjJiLCAweDVmMzE4NmQ1LCAweDdlMTU2YjI4LCAweGI3YWJkMTA4LCAweDU0NTI3Y2E4LCAweGIzNjg5YzgwLAorCTB4MDJiZjUwYTYsIDB4M2VhM2IzMGQsIDB4OTBiNDY5NWIsIDB4ZTNhMzFiN2UsIDB4NmFlMTdhNzYsIDB4YzNkMjM2NGYsCisJMHhiNWM3ZjAxOCwgMHgzMWY4ZjEwMSwgMHhmYjAxMDE4NiwgMHhjNzgwN2VlZCwgMHhjMjc4OTVmZiwgMHgxZDQ5OTUxYywKKwkweDE5MWZhMDE1LCAweDk1ZmQ0MzViLCAweGYwYTI0MWY5LCAweGRmOWFkN2YxLCAweGZjMWJmMzA0LCAweDIzYmMwM2YzLAorCTB4NTg1ZmRlMTEsIDB4OTNiN2E0MmQsIDB4ZmZmNzI4ZTYsIDB4Y2E5N2M0YjUsIDB4YmQwMDJlNzksIDB4NjMxODFjNjEsCisJMHhjNzM3ODgzNCwgMHg5ZmM4MzdjZSwgMHhmNWVlYjI3MywgMHg4MjI4YWUzOCwgMHhmNzA4YTNlZiwgMHg1ZTMwZjU4MywKKwkweGU3OTY1MWZlLCAweGJjYmM3OWIxLCAweGY5MTUyZTRkLCAweDdiNjc5MGQ1LCAweDk1ZjUwYWRmLCAweDU5M2ZmNjc5LAorCTB4ODg5OWFlNDksIDB4YjRjYTU3M2UsIDB4OWM0Y2Y2MDIsIDB4YmJmOTE4NmYsIDB4ZjA4OTFkZTIsIDB4MDNmMDA1ZmEsCisJMHg1YWMyZmJmMiwgMHg2NDE2OWNjMSwgMHhhZjNhNzEyZiwgMHgzY2VjNGRlMSwgMHg0NTRlZjRmMywgMHhkZDZjYjgzOCwKKwkweGM2ZDc5ODE5LCAweDVhMmQ3ZjM4LCAweDA1YTczN2E1LCAweGJkMjAwN2RlLCAweDAyNTFmZmEzLCAweDJmZDFmMmZmLAorCTB4NTM3MmJmZTMsIDB4NTc5NDZkYzUsIDB4OGNkNjJhYjUsIDB4YzgzNTE3ZjcsIDB4YTZkNzI5MGYsIDB4ODdiYTUwZmYsCisJMHhiN2E0NGVkZiwgMHhhMGI1YTY2YSwgMHgwYjY5YTk3ZSwgMHhhMTUxNmU3ZCwgMHgwODRkZmUzZCwgMHg3NGM5MjQ1ZiwKKwkweGU4MTc2OGRhLCAweDViZjFiZDdlLCAweDk1YTM4ZjE1LCAweGJiMzcxNDBhLCAweDRlOTExYTBiLCAweGNhZmQ4N2U5LAorCTB4N2U3MWI5YTcsIDB4ZmJhMGIzY2MsIDB4MzkxODg2YWUsIDB4ZWU4NjJiZWYsIDB4OWYyMjdlZTEsIDB4Zjc5NTJlZmYsCisJMHhhM2VmZTQwZCwgMHhjNjMyNGY2YSwgMHhmOTNhOGU3MSwgMHhlNjAyZDUzZCwgMHg1MmRkN2JhMSwgMHg2ZjY1NGRkNiwKKwkweDJmMDFmNTc4LCAweDhkMWFlZTRkLCAweDc2MDdmODdlLCAweDFhOTFjNTJkLCAweDUxMTkzNmQ3LCAweGI1YjE2NmNlLAorCTB4MDMxZmJjMjYsIDB4ZmJlZTc5MzYsIDB4MWJkYjJiZGMsIDB4OTQ2OGY3YTEsIDB4YzdlNzk1OWYsIDB4OTJiY2NhZjMsCisJMHg4M2EwM2NmOCwgMHhmOGEzODAzMywgMHg1N2M3Y2I5YywgMHgwMjIwN2ZiZCwgMHhmZWZlN2VlMSwgMHhjYTdlZjNmZCwKKwkweGI5MDIwZmQwLCAweGQ2NTRmMzA1LCAweGJkZDA2NGI2LCAweDY3NzU4YjhjLCAweGFiZjFmYmU0LCAweDFmYzE1M2UwLAorCTB4ZjA4Mzk5YjQsIDB4MGViOTY3MGEsIDB4MGQ5ZjMzZTAsIDB4ZDM2ZTYzZTQsIDB4YzBhOWYwYjUsIDB4ZjAzZDQ5MzksCisJMHhlODI1MDQ2MywgMHhhMTQzOTIzMSwgMHg1ZWUwNTY3OCwgMHgzY2Q1NmFjZCwgMHhlZWZiNTZmZSwgMHhiM2ZmZTgwMiwKKwkweGVkMTlhMmI1LCAweDdlZjBjYmNhLCAweGY1NzhmYzBkLCAweDI4ZDc5MWZjLCAweDI1N2IzZjkwLCAweDVhNzgyOTdjLAorCTB4ZmY1NGJjYzgsIDB4ZmI4ZjhhMzAsIDB4ZjE0NGExNzAsIDB4N2M2OWZmYzMsIDB4NGJkOWU0MzUsIDB4YjdjMmFlZjIsCisJMHgyNTdhN2NhMSwgMHgyYWI0NWNiZSwgMHhmODQzN2Y4NCwgMHgyZDJmODg3NCwgMHg3ZjAwMmZmMCwgMHhjNDExNTVmNiwKKwkweDFkN2UwYThmLCAweDUxOTNmMDY2LCAweDJkMTg3NWZmLCAweDNlMzk3NjZlLCAweGZkYzVkZmQxLCAweGVjMGFiNjU0LAorCTB4ZjA4N2UxNDksIDB4ZTNmYzhmYWIsIDB4YWQwMTdjNTAsIDB4NTQxZjUwZDgsIDB4YTlmMzA1ZTcsIDB4YzkyYmM3ODIsCisJMHg3ZGVlNDUyZCwgMHg0ZDQ3YmNjNCwgMHg3MDY3ZGQwMiwgMHg5Njg1ZmUzZSwgMHhmYjk0ZTlmMiwgMHhlMmRlZTUwYywKKwkweDZmYWUzY2QxLCAweGMwOGZjYjQyLCAweGEyN2JjMTZlLCAweDIzM2QxOTRkLCAweGQ1ZWJkZWQxLCAweDdiZjBmMzI4LAorCTB4NzRkNjhmZDcsIDB4Y2Q3Y2M2OGYsIDB4YjJmMWE2OGYsIDB4NGNmM2MzNTcsIDB4OGMyZGJhOTQsIDB4NGEzZjAzYzcsCisJMHg2ZTEwYmFkMCwgMHhhNmUzMDkxZiwgMHg5MWYwMWRhMywgMHg3ODNiY2JmMCwgMHhjNjYzNGUzZCwgMHhlOWI4ODJmYSwKKwkweGFhZjdhODI2LCAweDgzZTFmODk1LCAweDUzNzZmY2IyLCAweDA5ODJkMWY5LCAweDYwNGZkNDA1LCAweDY2MWUxMDQ3LAorCTB4M2FkMDk1ODEsIDB4MGM1ZDEwODIsIDB4ZTdlOGY5ZmIsIDB4NWVmMDczNjMsIDB4MDNmZjM5NDAsIDB4ZjQ4ZTNjNzksCisJMHg0MzFjZjkxYiwgMHgwOTVmZjZmMSwgMHgwNDVmNmYxNCwgMHhmNzg0YzNhYSwgMHgyODlmZDMwMiwgMHg5M2Y2ODE0ZSwKKwkweGE2Y2Q0ZWJmLCAweGMxMTVjYWZiLCAweDRkZmVhM2ViLCAweDU2ZTUzOGE2LCAweDRiOTZlNzlhLCAweDk5YzVlYTAzLAorCTB4ZTkwZDdkZmUsIDB4YmM4YjgyY2QsIDB4YTBkOGM5N2QsIDB4ZjQ1YjY2N2MsIDB4YmIyN2VlMzgsIDB4OGY1MTIzNTMsCisJMHhmMDZkN2EyOSwgMHg2MDQzN2VkOCwgMHgxY2FjZjUxYywgMHg4ZmFhMWU3NywgMHg1MDI5MjQ3YiwgMHhmN2IxYmUyZiwKKwkweGE3OWM3NGUxLCAweGIyY2FlMzVjLCAweGY5OGYzMDE4LCAweDFmYjQyNGE5LCAweDk0M2VmN2NhLCAweGRlZWQ3NjRlLAorCTB4OWZlOGU5OGQsIDB4OWMzZDM3OTQsIDB4Yjg3YWEzNmUsIDB4MTUyM2ZjOWQsIDB4N2RmOWY3M2YsIDB4MGE2ZDc2OTMsCisJMHg5ZDZmYTNiMCwgMHg1MmZiZWRjMCwgMHg2ODg1MWJkZCwgMHhmMWJhY2VkZiwgMHhiNzE4NzVmMywgMHg4MTZiZmIxZiwKKwkweDU5MGI3MGUyLCAweGI3ZDQzYWY3LCAweGFmOWMxOTY1LCAweGU0OGU4MzU4LCAweGY3NDdjYzNmLCAweGRkYzY3YmE0LAorCTB4ZmVlNTFiYmUsIDB4YWJiZjhjZjEsIDB4Y2RmZWEwOTcsIDB4NjU3Y2QxNTMsIDB4MGUzOWJkY2MsIDB4MDQxYjZmZTMsCisJMHhmYmY5YmY4YSwgMHhkNzdiYTY4ZiwgMHg0ZDA1NmJjNSwgMHg1MWVhMGM3YywgMHhjN2ZkNzc5ZSwgMHhlMzgyMjhiYywKKwkweGJiYjIxYjNkLCAweDM1NmNiZGIwLCAweDc1YTU5ZjZmLCAweDNjZTBmNmI3LCAweGNmMjg2ODRmLCAweDRhNjUxNDBhLAorCTB4ZjYzZGMwNDksIDB4M2RmOGYzMWYsIDB4NzJjZGEyZGQsIDB4Y2ViY2IxYmUsIDB4OGRiMTZkZDgsIDB4YTNmY2U3ODEsCisJMHhmZTU2N2Y4YywgMHgzYjgzYzkwMSwgMHhiNmRjYmM2NSwgMHhmMTIzYmRmYSwgMHhkYWE0NmYzMCwgMHgyYjk0NjdmZSwKKwkweDNhN2UzZWVmLCAweDQxNTllNTBkLCAweGE0NGNkOWY0LCAweGZiMWFiMWYzLCAweGVlNzgxNTkzLCAweDJiYzUyZDI2LAorCTB4NTI4OTU5YWQsIDB4YjljZmY0MWMsIDB4NTg2M2RhN2YsIDB4ZjhiZDVhMmUsIDB4ZmI4YzBhYzksIDB4MWY5MWQ3NmUsCisJMHg4NTZmZWNhNiwgMHg1ZmQxMTY2MCwgMHhkM2Y4ZGMzZCwgMHg2NzZlMTA3YiwgMHhhNDc5ZTcxZSwgMHg4ZmFmMWEyYiwKKwkweGUyZmU1YWJiLCAweDFmM2M3NWIzLCAweDFkM2FmOWZjLCAweDk5ZDQyZjk1LCAweGI4OGUxOTk4LCAweGVhOWUyZWFmLAorCTB4NTMzM2FmYmYsIDB4ZmE3M2U2YzksIDB4YWVhNmYyNTIsIDB4YTVlZTVmMzQsIDB4YjY1YmNhMzAsIDB4MWU1MWQwNmUsCisJMHhmNmQ2YWU3ZCwgMHg2YmMwMWU1NSwgMHhhNmNlMGRlYywgMHhjNmI5ZjI4ZCwgMHg1NzZjZjhjMiwgMHg4Mzg0MGNmMiwKKwkweDJlZjJlMzc1LCAweGU1NGY2MTM0LCAweGVkZWFmZjcxLCAweDY0NDkwZDllLCAweGY1M2VhZjg3LCAweGNmM2MwNTRjLAorCTB4MGVmOTJmY2MsIDB4NWU3NmViYzcsIDB4ZTFjMTc4YTQsIDB4MTBjYTg3ZjYsIDB4NWE0ZGU1ZGUsIDB4ZGNmOTNlN2UsCisJMHg4ZjRmMWU2NywgMHhiY2UzMTI3YiwgMHg3ZmM5YTk2ZiwgMHhlYTc5ZDlhZiwgMHhkZTUwOGQ5OSwgMHgyNmI5NzliYiwKKwkweGU4N2ZkZTkwLCAweGY3OTViZjc5LCAweGJhYmUyZDczLCAweDc1ZmUxYzEyLCAweDg5Mzg3YWJlLCAweGY4MDlhN2Y4LAorCTB4ZTdkZmYzMmEsIDB4NmJkNTlhYWIsIDB4ZjM3MzdlMDgsIDB4YzNlNmM2NGIsIDB4NWRhOGNmZmUsIDB4Njc0ZmM4NDksCisJMHg3NDRjZGRjNiwgMHgwODE0ZWFlZSwgMHg1NzFjOGFmZSwgMHhmM2U2YTdjNiwgMHhkMTJhZThmYiwgMHg0OGVjOTliMywKKwkweDA1N2Y4ZTU5LCAweGY3YzIyMzllLCAweGQyY2ZmNjhkLCAweGFhZmU4ZWQxLCAweGNmNTVjMTZkLCAweDNkMGViMDdkLAorCTB4ZTk5YjhjMjIsIDB4OWU3ZDBjYTgsIDB4NjJhN2IxYWYsIDB4YzhiZTcxNWUsIDB4ZTdkMGU3ZWQsIDB4NzEyYmU3YjcsCisJMHhjNWI3MWU3OCwgMHhhNzkwMTA5ZiwgMHg0NThkODRlMiwgMHgxM2ZlYTM0NiwgMHg5NzIwNjFiYywgMHg5ZWI3NmQ5ZCwKKwkweDA2ZmZhMTU1LCAweGMxYzdlMTdlLCAweDM4ZmIyODc2LCAweDY5NWZhZjQwLCAweGFiMmFkN2JmLCAweDVmOTUxZTcxLAorCTB4NTBmODRlZWUsIDB4M2QwMGRlNjQsIDB4YzYxN2M5M2UsIDB4MGVlYjAxYmMsIDB4YTZkMDJiZjksIDB4MDQ5ZWZiYTEsCisJMHgzNzg4MGI5MiwgMHg2YmVhODdjYywgMHhmNTg0ZDcxZiwgMHhjNzhlMWFiMywgMHg5N2UwODNiZSwgMHg5MzBjYjhmMSwKKwkweDNjZTdmZGYyLCAweDBiM2U3ZWRiLCAweDc5ZTg2Y2U1LCAweDRmMzk1ZmFiLCAweDdiNjhlMWY0LCAweGU3NDBhMmU4LAorCTB4OTU1Njc5OWYsIDB4YmZmM2VkNzUsIDB4MTY3Y2Y3YjEsIDB4ZGFhY2VmZTIsIDB4NTdmZThmOTcsIDB4ODU5N2M2OWYsCisJMHg5NTdlYTg3OCwgMHgxNTdmZjNjYiwgMHhjNTdiNGEwZSwgMHgxMzhmMGQwNiwgMHgyM2YyMjYwYSwgMHgxNDBiYTUwYiwKKwkweGM2M2JlODA3LCAweGVkZDUwMGUzLCAweDBlOWU0OGJiLCAweDRjNzhmMDc2LCAweDE0NWRkODhkLCAweGRhOGJmMTg3LAorCTB4Y2YyODVkNTMsIDB4NWZiOWUzMDYsIDB4MjhkYmYzMDYsIDB4ZDY1NTIxY2YsIDB4YTQ4MWFhODMsIDB4MWVkNzIwMzksCisJMHhlZTA3YTIxOSwgMHhmZTQxOWUwZiwgMHgxZTNjZTBkNSwgMHg2NTYxZTUwNywgMHgyYmI0MzM4NSwgMHg0MzNmMjFjZSwKKwkweGU0YWFkOTdiLCAweDY3ZTc0OGY1LCAweDUwNzMyM2RjLCAweGY1OWRiZTNlLCAweGRmOGE2YThmLCAweDkyNmUxZWJkLAorCTB4MzA5NThlYzgsIDB4NGUwODc4YzcsIDB4NGI3MGU3NDMsIDB4Mjk4N2QxM2MsIDB4YjMzODcxNzYsIDB4ZDFhYmY0MDUsCisJMHhiZjI0ZWY5OCwgMHg5ZmJmMzhmYSwgMHhmMzgxYjlhYiwgMHhmMzg1N2IxMywgMHgxYmVkNzM5MywgMHhmOTgwZjg5YSwKKwkweDkzZjMyNTdlLCAweDdhY2U0ZjYyLCAweDk3YzQxZmZkLCAweDllZGFlNzBmLCAweDQ3MGNiZTQwLCAweGM1ZjM4ODU5LAorCTB4YjUxZTUyNDcsIDB4NzI4NzFlZjIsIDB4OTBlODY5MWYsIDB4ODk2MmY4ZmQsIDB4NDliNGQ3OWUsIDB4NThlNWVmMGMsCisJMHgwYWYyOTFiYywgMHhjYTE2ZDk4YSwgMHgzY2M1OWNiNywgMHg4ZjVlNzk1MywgMHhmMDI5ZDFlZiwgMHg1MmViZjY3YywKKwkweDgxYTFlNjJlLCAweGRiZjc0ZDNkLCAweDM0ZjY2MTQ1LCAweDE1ZWFkM2NjLCAweDFlYWUxOTA1LCAweDdkMDA5Y2ViLAorCTB4ZjczZTdlZjYsIDB4MDI0YWE3NTcsIDB4ODQ4MWIxZTksIDB4NjY1M2IyNzAsIDB4ZTI5Njc3Y2UsIDB4NWE3ZTk1N2UsCisJMHg5ODMzZWI5MSwgMHhlNjJjZWM4NywgMHg3YmMyYzgxZSwgMHhjODFkZTY1NSwgMHhhNTU2ZmJjMiwgMHhjM2Q3YmNkZiwKKwkweDMyMmY0OTZiLCAweGMwNWU3NThmLCAweDc5ZjNhNzNhLCAweGJjMGJmM2JjLCAweDUyNzkwNzFmLCAweDE2YzNkZjIzLAorCTB4NDM2ZWRmNGEsIDB4Mjc0NTZiN2YsIDB4MTVlYzdmYmYsIDB4M2NjMDNmOTMsIDB4MTljMDE3MzMsIDB4ZjAxZTdhZjEsCisJMHg2M2ZkNDM2YSwgMHhmMjFiMzY2NywgMHg2ZTkxZjhjZiwgMHg3ZDlhOWZlNCwgMHhiZDdjYzMwMiwgMHgxMzZkNzZlYSwKKwkweGQ1YWE4NWM2LCAweGU3YTQ1OGJlLCAweDZiZWY2ZDhkLCAweGYwNmI5ZTkwLCAweDhlM2M3NjVlLCAweGRjYmM3MjY3LAorCTB4MzViZjc5NDQsIDB4ZjVlZmM2MjYsIDB4MDBmZmFlZGEsIDB4NjNjZTc2ZTMsIDB4NTUzYThiNWMsIDB4MDAzYzUxZWYsCisJMHg1N2FlMzZlNSwgMHhmZTQyZGFkNSwgMHhjOTc5ODNiZiwgMHgwNzM0NzdmZiwgMHgzYzYwY2RkMywgMHhmMjg3ZTc4ZiwKKwkweDczN2NlOWM5LCAweGRjY2M3ZjEwLCAweDFlNjNmOWNlLCAweDY4MWI3M2U2LCAweDY3NWZjNTM4LCAweDVkOTFjN2M2LAorCTB4ZjFjNzFmZTIsIDB4YWZjZTkzNjAsIDB4M2ZhNjNiNDMsIDB4ZmM3Y2EwNDUsIDB4NWFkNzMwZmUsIDB4ZTk1YzhmYjQsCisJMHg3ZmU5YWVkYywgMHhiZDJiMDVlZCwgMHg1YjczYTNmNywgMHgzY2Y5OGM3ZiwgMHg3MzNiZGRiMiwgMHgxNDk1NTZjMywKKwkweDFkOTk5ZmIwLCAweDFmZDhkZTNjLCAweDEyMGZjYWM2LCAweDIxZDdlZGRlLCAweDI1Yjk3YzNlLCAweGJlMzFmMjY3LAorCTB4Nzc3ODE5YTMsIDB4NDQ4M2M2MGEsIDB4M2QwZDFmMWUsIDB4NmI4ZTVkODcsIDB4ZmRmYzY3MWMsIDB4YjNkZjY1MjgsCisJMHgzY2I5MTMxMywgMHhhM2EyNmU2MywgMHg1YmJmMzkyZSwgMHhjNjUxZDdjOSwgMHg1MDQxMzJkZiwgMHg5ZmI4ZDFlZSwKKwkweGZhYWU1ODI0LCAweGQ3ZGUxYTVlLCAweGRlMmI5ZTYwLCAweDNiZjk2MGQ3LCAweGVmMTYxZjM5LCAweGEyZmViMDZiLAorCTB4Zjc4YjBmOWMsIDB4Zjc4ZWQ4MzUsIDB4OTU2ZjU4MzUsIDB4YmVmMTYxZjMsIDB4NWY3OGViMDYsIDB4NzIyYmU1ODMsCisJMHhkYzcxZWMzZSwgMHg2ZGYxZTUyYSwgMHhhMmU5MGE3YywgMHg5NDZkNzkwYiwgMHgxZDFiZGViZiwgMHhkYzE1MWY1MiwKKwkweDA4NWEzN2JmLCAweGE4MTI4ZmFlLCAweGM2YzI2OWJmLCAweDc4ZmYzMGE3LCAweGM1MmY5MjkzLCAweGMzYjQ0NmNjLAorCTB4ZmJmOWMyMmEsIDB4N2IwNmE5MWEsIDB4ZjNmNDA0ZWMsIDB4NDVlZDc3OGIsIDB4OWJmODFlN2YsIDB4ODgyYjlmZGUsCisJMHhlZjRhNTA1ZSwgMHgxOTY4YzQ5NywgMHgyN2RiYTNjYSwgMHg4MDRmNDdkOCwgMHhjZDhlYzdmMSwgMHg3MjRhZGI0OCwKKwkweGVjZjc0ZjUyLCAweDMxYmIzZmJkLCAweDZmN2FlMjkyLCAweDI1ODI0YzQ5LCAweGFlZTQ2NWE3LCAweDlhN2Q0MmI1LAorCTB4ODVmYTIwNDEsIDB4NTEyYTZlZjksIDB4Njc5ODRjZmMsIDB4YWI2MmM3NDYsIDB4MTMwN2NiOGEsIDB4OTI4NWNiZGEsCisJMHhiM2FlMDk2MywgMHg4YjlmNDEyMiwgMHhkNTg4Zjg3MiwgMHg1MWZiODE5ZSwgMHg2YTM0NWRlMCwgMHg0NWRhMWE1OSwKKwkweDA3ZjM2YTVkLCAweGJkNzU5ZjE4LCAweDU3ZTg2NmEzLCAweGE1M2M3MTI5LCAweDY5ZDY5M2RmLCAweDk5YmZiOGY5LAorCTB4NzM2YmE5MTksIDB4MzY2MDdlNzAsIDB4MGQzNjc3OTQsIDB4ZDlmZGM2NmIsIDB4OWVhMTcwYzQsIDB4ODU1OTk3ZTQsCisJMHgwMjdmMjBmMiwgMHg2NmU5OWJhNywgMHgzNTdiMWY2ZSwgMHhmYTM0NTU2NiwgMHg2MmQzNjFmNSwgMHg0YmI3NWVmMCwKKwkweDE5MzFmM2M2LCAweDNjNjVjN2NmLCAweDgxNTczZGUzLCAweDYxNzNkZjhhLCAweDU4NWNmNzg5LCAweDJkYTNlNjg2LAorCTB4NGRiMTJmY2YsIDB4MjQwZjc4MjAsIDB4Y2RiM2U2MDUsIDB4MDA5N2RmOTIsIDB4ZDRmN2ExMGEsIDB4ZjMxYzcyOWMsCisJMHgzNGVlNTk0YiwgMHhjYWRjOTVlNiwgMHg5ZTY4NzljNywgMHg3NzhlMzkyYSwgMHg2ZjdjMWQ1ZSwgMHg4ZmYzOGNhOCwKKwkweGJkY2U1NDY3LCAweDE2NmJjYjg5LCAweGJmNzllMWE5LCAweGU2MTczMWQ3LCAweDM5N2RjZjE1LCAweDdkNTBlMjgxLAorCTB4MDZhNWQxNmUsIDB4NWUwNWNmYmMsIDB4NWVjNjc5NDcsIDB4OGIyZWZlZTYsIDB4NzczMzdjZTcsIDB4YWJmNTFjN2YsCisJMHhjZWE5ZTM5NywgMHg3Yzc0ZWVlOCwgMHhlNjRmYTNhZiwgMHhmMDdlYTUyZiwgMHhlNDk3OWUzYiwgMHg4MWJhODFjYywKKwkweGYzYTEyM2RlLCAweGE3NzZlNzM5LCAweDRmYmQ0MTQ3LCAweDVmNDg4YmQwLCAweGJjZmUyNmNlLCAweDY3M2ZlNjQ3LAorCTB4N2M5ZjNjOGEsIDB4MjRmM2E2MWUsIDB4M2JmYTNlMjEsIDB4ZjdjMjRlNWYsIDB4YmMxOTM3MTAsIDB4ZjdmY2I5NGIsCisJMHg2NmRjOTNhNiwgMHg2ZmNjNzRkZSwgMHg0ZTc4MmYzYSwgMHhhZGYxYmU2MiwgMHg5OGE1Mjk2ZCwgMHhlZDVlN2Y2ZiwKKwkweGIzZWIwNjc5LCAweDVkNzhkMmRiLCAweDBhNjkzOTY4LCAweDkzZDIzZTdjLCAweGI3YzhmOTg0LCAweDYyOTZhNWI2LAorCTB4OTFmOWYyM2UsIDB4NTk0NGNmMmQsIDB4OTdlYWVhMDIsIDB4Y2Q3M2UyNGUsIDB4OThhNTY5ODMsIDB4ZWI1YjNjOWYsCisJMHg3NDg3NTYzZSwgMHg1ZjRlN2JmMywgMHg0ZTA3N2RmYSwgMHhkYWFhN2MyMywgMHg3ZDNlZmRiOSwgMHgyZjBiODFkZiwKKwkweDYwM2U3ZWExLCAweDc1ODJiY2E0LCAweGRmMDk5MjEzLCAweDZlY2ZlZGY1LCAweDZiZWI3YTQ2LCAweDZjM2YxMzUxLAorCTB4OTlmZjdlNmEsIDB4MmQzZjUwZGYsIDB4NmI2NjU5ODUsIDB4YzkwYzU2M2QsIDB4YmExZGI0OTQsIDB4M2IzNWY3MWIsCisJMHhkNjI1ZjNkYywgMHg4OWJjNGYxNywgMHgwNDdiMzFmNiwgMHgxM2E1ZWJlNywgMHg0ZjkxNGE3MywgMHhmYmVjMGVmYiwKKwkweGQ5YjNlYTA1LCAweGUyZDg2MDkxLCAweDEzZDA1ZTdlLCAweDhmZjcyYTdlLCAweDQwYjhjMDJiLCAweDBjYmJiMTlmLAorCTB4OWRmZWFmZTcsIDB4ZWMxZmU3OTYsIDB4NzE4ZTliOGYsIDB4YzA5Y2ZmODIsIDB4NmUyYTMxZjMsIDB4ZmE4NDkyZDgsCisJMHhmOWU1N2M1NiwgMHhmOGMxYmZiZCwgMHg3NGY0ZWZlNiwgMHhjZDEzNTNkZiwgMHhhOTRhYmRlZCwgMHhlMTM5N2YzMSwKKwkweGNjNWVkNzZmLCAweDVlN2JlOTViLCAweDE1YWZmNzRmLCAweGUyYjM5MzE4LCAweDI5NjNhYzdiLCAweDNmZWFmZjNlLAorCTB4Nzg4NjVlZmYsIDB4ZWU3Njk0MjgsIDB4NzcyZmY2YzUsIDB4NDM4NDQ1ZWIsIDB4NzkxNmM2OGYsIDB4OGY2MWYyMzMsCisJMHgwYWNlZmM5YSwgMHgzYmQxNWViOSwgMHhkYzI3ZWY4MiwgMHg4YmY4NDQ1NywgMHhmYTg0OTJkOSwgMHhhZmM0NzJiNiwKKwkweGNmN2RjMGVlLCAweDgzM2NiNjk2LCAweDU2N2IwZjdlLCAweDY3MGU3NzRiLCAweGMxYjgwNzlmLCAweGQ0N2JiM2I4LAorCTB4ZmIwMzQ5OTgsIDB4NWU5MGFhMzAsIDB4Y2E1YjBiY2UsIDB4ZjdmOWM0OWUsIDB4ZjVlNzdlZjAsIDB4YWU5ZTA4NWIsCisJMHg1YzMzZDczZCwgMHhkNDMxZmEwZiwgMHhhZDg1ZTdjNywgMHhmNzY3ZWQ0MSwgMHg3ZTg1OWIzYywgMHhjZGRmYjllOSwKKwkweGExNTRmZjI2LCAweDJhNWY4NTczLCAweGY0ODM2Yjc3LCAweDU4ODI0OTIyLCAweDNmY2E1YjhjLCAweDAyMTk4YjkzLAorCTB4MGVlNzU5ZTIsIDB4OTI3YmU4ZWUsIDB4NmI5ZmM3ZjksIDB4MDAzNTdiNTYsIDB4NWIyZDBhYTMsIDB4MGFjZGY5OGIsCisJMHhkZTI2NTQzZiwgMHhhYmU3OGM1YSwgMHhkMWQzMWIxNCwgMHhmNWM4YTk3ZSwgMHg5YzVmMjE5NSwgMHgzYzVkMzNkNSwKKwkweGQ2NWI3YmY0LCAweDZiYWQ5NTViLCAweDdjMWRhMGU2LCAweDQ1ZmNmZGE1LCAweGM5NWY0Nzk2LCAweDliNTVmODdjLAorCTB4ZGY3ODFkZGUsIDB4YjVmZTVhMTgsIDB4YTg0Zjk5OGUsIDB4YjU4NWY1ZmMsIDB4OTVlNWIyNWEsIDB4NzhkNmRlZjksCisJMHg1NWFmZTgxYywgMHg3MWY5NzM0NywgMHg4MzM3ZmExMiwgMHhhYzkzZmIxYywgMHgwYWFkMTZlZiwgMHgwNGVlZmZlZSwKKwkweGFkNTk0ZjllLCAweGZlYTNhNWYxLCAweDdiN2ZlNjUzLCAweDg3ZGI4OTgyLCAweGNhM2E1ZjJhLCAweGIzNzFkMGFiLAorCTB4YmNkZTU5MjUsIDB4YTliYzkwMjAsIDB4ZDE0ZTE1NmMsIDB4ZDIwODI0ZmIsIDB4MmIzYzNmNTgsIDB4ZTYzNzJlNzUsCisJMHg4Nzg3MGQxMywgMHgwZjE5N2NmOCwgMHg3MGYxZTYxMiwgMHhkNjZjYWFiZSwgMHg0ZjMwZjRkYiwgMHgwMjJmOTg1NSwKKwkweGQxODcyNWVkLCAweDUwNzY4MTE3LCAweDZiMTIyYmRmLCAweGEzMTdkMTkyLCAweDVmZTI5ZmNjLCAweDU2NTM4OTRmLAorCTB4ZmQzNmQ0NzgsIDB4NzFjMWViNzAsIDB4ODY1ZTRmZDAsIDB4NTYyODAzN2YsIDB4NTM3Y2U0NGYsIDB4ZWI0ZTE2ZGUsCisJMHgxZjJmOTMzMSwgMHg2NzdjYjZlOSwgMHhhNzNjMzhmMCwgMHhmYjFmODAyOSwgMHgwNmM1NzZkYSwgMHhmNzBjZWJmYSwKKwkweGE3NTFmNzRkLCAweGZmZmE2Zjg4LCAweDA3YmQzMWY5LCAweGI1YjIyOTVlLCAweDRlNzk0Zjc4LCAweDQwODNlZmUwLAorCTB4MzkwN2RlOWQsIDB4NTY3N2RmMjcsIDB4NDMwODZkN2UsIDB4OTVmNzM5ZmEsIDB4NGZiOGY4ODMsIDB4N2I5YzkxZjAsCisJMHg3MjQ2Y2RiMSwgMHgyM2VkNGZhYywgMHg2MjZiYjczOSwgMHhmOTQ3YWYxMSwgMHhiZDZlNTBjYSwgMHgyNGE3ZjEzOCwKKwkweDdjMTJmYTNmLCAweGQyOWVmODY1LCAweDJmOGVhNTY2LCAweGQwMWQ4MWNjLCAweGU0OTBiNmQxLCAweGU3ODk2Y2M5LAorCTB4NmE1ZGIwNTEsIDB4NzExMzhmMTMsIDB4ZTE5MzJmNzgsIDB4ZGU4NmQ4YzQsIDB4ZDQ0M2YyM2EsIDB4M2E5N2I0NjYsCisJMHg0MmY3MmEyNywgMHgyNWY5ZmYxYSwgMHgzMWY1M2YzZiwgMHhlNDU2YmVmMywgMHhjNTAzNzJjZiwgMHg2YWJlYzA3ZCwKKwkweGMwZWQwOTdlLCAweDhjMTZiMTA1LCAweDRkYzI4N2E3LCAweDg5OGM1ZmI5LCAweGUyMjk2NmZlLCAweDdkYTMxZGU5LAorCTB4YmMzY2M0ZWMsIDB4OWY5MWY0Y2YsIDB4ZjY0ZWQ0MDEsIDB4NWE2YmY1N2MsIDB4ZDVmYjM3ZjIsIDB4N2U1MTdiMDMsCisJMHg3MWY2OGRiOSwgMHgwZTllMDExMywgMHg1NDdhZjc0ZCwgMHhiZWQ0MTc3MSwgMHg2N2VkMzQyZSwgMHgxYzkxYmQyMSwKKwkweDk3ZDZmNGUxLCAweDA3YmY4YmI5LCAweDRlNGZkZjIyLCAweGZhMDBmMTkyLCAweDdkMjIzNThjLCAweDg3Y2YxYzA4LAorCTB4NDA5ZmY2ZGIsIDB4OWRkN2QzNzksIDB4OTQzYTcyNGEsIDB4M2RiNmNlOWYsIDB4ZTM3MjgxMTYsIDB4YWVlZmQwNDMsCisJMHg4N2MwNzg4MCwgMHg3Y2E1OWY4YiwgMHgwNzk4Zjk4MCwgMHg2YjNkZTUwMiwgMHhmODM3Y2Y4MywgMHgyZmM5OGZlZCwKKwkweGRhMDM5YjY0LCAweDgyMWIxZTkxLCAweDQxNzBhMWViLCAweGYxMDZmNGJhLCAweDdkZjY4YjgxLCAweGMwMWJmMjNmLAorCTB4Nzc3YTZhYTcsIDB4YTg2MWMyMzUsIDB4NTJlYTE3M2UsIDB4NDg1MGZkNDAsIDB4MmIzZmE0M2QsIDB4ZmRjM2Y2ZTEsCisJMHhlYmNkMTgxMywgMHgyNWVkZWQxOCwgMHhjZjFmN2UzZiwgMHhiZDA3YWRlZiwgMHhlMTAzZjU0NiwgMHhlZTJkM2Y3NCwKKwkweGMzMTViZDAzLCAweDhiZWExNmY1LCAweDhhNmU4OGFhLCAweGQwMWRmNTVmLCAweDgzY2FiZGQyLCAweGUxMjU5ZmVkLAorCTB4MjkxZTgxZjksIDB4ZmVkNTUzNGUsIDB4ZjdmYTJjNzIsIDB4Njk5ODI2ZWIsIDB4YjE4ZmQwN2UsIDB4YTA3MzE3OTQsCisJMHgxMWZkMTYzZCwgMHg3YTIxZGRhNSwgMHgwY2Y3ZTVkMiwgMHgyODdlNTBiMiwgMHg5YmM5NGVlZCwgMHg0MmU1Nzk0ZSwKKwkweDVmM2UxNjc3LCAweDg3MTljYjI3LCAweGViMDk3NTA4LCAweDEwZTFjZThjLCAweDc2YjNkZjM4LCAweDI4N2NlNDg5LAorCTB4ZjRjOTU2ZGUsIDB4OGIyMWYyMGEsIDB4ZTE1ZTM5ZjIsIDB4MWU0NTAzZjEsIDB4ZTU3MmM4NTQsIDB4NzI2N2I2MTAsCisJMHhmNzI5MzdmZSwgMHg4NGNmNzg1MiwgMHg5YzhjM2Y3YywgMHgyMzgxNWFmOCwgMHhjZWY4YTVhYiwgMHhiY2NkMTNmZCwKKwkweDc5YTc4ZjJlLCAweGU3ODlmYzc5LCAweDNlN2FiZGVkLCAweGM3MTMyNTJiLCAweDQ1Zjc5NTk5LCAweGQ1MjhmMmZkLAorCTB4MGU1MDVmMmYsIDB4NzgxYzkzYzQsIDB4ZTcwYjFkNTAsIDB4YjA0NjdjYWEsIDB4OGE5MGMzZDQsIDB4ZDA0NTM1ZDIsCisJMHgyZDUzMmQ5ZCwgMHgxYWI4YTIyZiwgMHgyZTFhZTdlNiwgMHgxZDI4NTdkZiwgMHhmOGU0NGU0NSwgMHgxZmI5MTRhZCwKKwkweGEwNTdiOTVlLCAweDZhNzNhNWZiLCAweGYyMDc2ZjdlLCAweDU4MGZkZTg2LCAweDA4YTZiMDU2LCAweDE4YmVlZmY5LAorCTB4NWZkMDI2YTcsIDB4NGJmY2Q2YmUsIDB4Y2JlYjgyMWIsIDB4YzUxNGQ3NmEsIDB4OTVlN2MzMGQsIDB4OGQ3NmI2YWIsCisJMHg1N2NmOTc2NCwgMHg4YTJjNmY2MSwgMHhhZWRlNWYzNSwgMHg1ZTljZmJlYywgMHhmNTc0ZTdkOSwgMHhjYzc4NDBjOCwKKwkweDEyMzQ1MzVmLCAweDdmYmE2NWNhLCAweGRjZmMxZTE3LCAweDVlYjVkYWU3LCAweDVkMmQ1N2NhLCAweGI3YzRmNzQzLAorCTB4OGEwZGFhNWMsIDB4YmU2YjVlYjMsIDB4N2JhNmU2MGEsIDB4M2ZlZDJiOTAsIDB4ZGUwODc0YjQsIDB4MzEyYjhjNWUsCisJMHhjNDNkYWZlMCwgMHgwMTM3YzA2NywgMHhmNGNiYzVlYiwgMHgyODlmMTQzYSwgMHhmZDA2M2M1ZiwgMHgzYzVmNjY1MywKKwkweDExM2UzMDI2LCAweDMzOWJlMjVhLCAweGI4OGFlNTIyLCAweDJjM2UwNGE4LCAweDBmMDMwY2IzLCAweDg5ZDFmZmE1LAorCTB4M2YxYWNlM2MsIDB4YThmMWQzOTEsIDB4NWUzYjU1ZDksIDB4ZTlkNzE0NjIsIDB4YTU3YmY5NDEsIDB4MjJmZTRjZjcsCisJMHhiZjA3ZWZlZiwgMHg5YzIzMzI2NywgMHg5YmQ0ZWJmNywgMHhkZmQzZmUzMCwgMHg4N2M1MGRmOSwgMHhlNjE5ZDdmYiwKKwkweDAzMDc3YmYzLCAweDVkZTc4MDRiLCAweDAyOWJlM2YxLCAweDI2YWJjMGUzLCAweGRjMjQzYjcxLCAweDlhOWRlZGNhLAorCTB4ZTNkNWY1MGMsIDB4YTFjNjk5NGIsIDB4MWJkOTEyZjgsIDB4ZGY3NGUxOTksIDB4MDVmNmQ3ZDIsIDB4OGVmZWI3ZTksCisJMHg4YmRlMTMzYywgMHgwZGJiNzVmNCwgMHhmZjM1NmZjOCwgMHhhOGIxN2ZmYywgMHgzZTNhZmI4NywgMHhiZWI0YmNhNSwKKwkweDdjYTMzZjZmLCAweGRlNzI4ZGI1LCAweDM5MzZhMWUwLCAweDZjZGJhYmRmLCAweGUyZmVmNmM0LCAweGJmNjExN2JmLAorCTB4OGZlOTcyNGQsIDB4OThmOGYwMmYsIDB4ODNmMTJhNTIsIDB4M2JmOWZmMDAsIDB4NGM3YjUzZDQsIDB4NTRjNTFmMWIsCisJMHgyZGIwY2E5OSwgMHg3ZmMwYmYyNCwgMHhlMWJkNDY4ZSwgMHhlMzk4MmI4ZiwgMHgwNGMzOGI4NiwgMHg1NGQyMTVjNiwKKwkweDI1ODBhZTNjLCAweGQyZDIxNWM2LCAweGViMDE1Yzc4LCAweDEyYzA1NzE4LCAweDhlZDgwYWUzLCAweDYzYWMwNTcxLAorCTB4MThlYjAxNWMsIDB4YzYzYWMwNTcsIDB4YjhjNGIwMTUsIDB4Mjk3ZmI2MDIsIDB4MGZkMWU3YmYsIDB4M2RjNzhiODIsCisJMHg1N2Y3MjQwZCwgMHhjMDMzN2U2MiwgMHhiZjI3NjU2ZiwgMHg0N2I5NWFiZiwgMHg3YzYxN2JhMiwgMHhkZmY1MDNjZiwKKwkweGFkM2I3OTY1LCAweDY3OGVkZTcyLCAweGQ2MDdkZDJiLCAweDg4MmM5MDFjLCAweGM0MWY3YzIyLCAweDNiZjk4ZTk1LAorCTB4MWUzMTQ3MDMsIDB4NTgyMmQzNTQsIDB4N2RiMTk4ZDYsIDB4NjM2M2VkM2UsIDB4YTUwN2RlNDcsIDB4NmQ0N2JlZDgsCisJMHg0ZjQ0Y2QxMSwgMHg4MjhkOWYxYywgMHhkNTdjOGY1YiwgMHg1N2UyODdiMSwgMHg5NDlkNzEwNSwgMHgyY2QzNWZlZiwKKwkweGNlYmI4YzMwLCAweGQ5M2Y3MmQzLCAweDBlNmI0MTI5LCAweDFkOTJhYmRkLCAweDkzNzZkNGVkLCAweDljZjU1MmZmLAorCTB4ZWY3YzBlNjAsIDB4NDVlMjY2YmIsIDB4N2RjYTEzOTIsIDB4ODhmZTUyZjUsIDB4ZjM3YTNkMzksIDB4NmIzZDIwOTIsCisJMHhmODU3NzllMywgMHgyOWM3ZWMyNywgMHgxZDkzNzdlNywgMHgyZDE3NjAxMiwgMHg2YzZjN2JjNSwgMHhmN2E1YmU5NywKKwkweGUwZTA5YzRkLCAweDlkYWUxMDhlLCAweGQxZDk1NTc3LCAweGI1ZjMxZWIyLCAweDU1ZmU2ODdlLCAweGRlZjkyNGUxLAorCTB4NDdiZjliM2EsIDB4OTJmOGZjNTIsIDB4YmQ2MDA3N2QsIDB4YjI1YTJkYzEsIDB4NjA5ZjZlNTMsIDB4MWU1MjZkYmYsCisJMHgyOGQ4MTllNiwgMHg1M2I0NzJlZSwgMHgyN2Q2N2U0ZiwgMHg4YTBmYWY1YiwgMHhkNzRhMTRiYiwgMHg4NTYzZGM1MSwKKwkweDdkZmQyMDVhLCAweDNiOWY2YWM0LCAweDQ2NzJlODA5LCAweDZmMTRiZGYxLCAweDI0NmYxMTk5LCAweGYwZTg1NjNlLAorCTB4NGZjOTZiNDksIDB4ZTMxNWRlNzAsIDB4MGE5ODc3ZjksIDB4MzRlN2VjYjUsIDB4YTVjZjljOWYsIDB4NWViMGE5ZTAsCisJMHgyY2Y3ZTM3MCwgMHhiZDBiMzMxNiwgMHhjMDA4YjAzZiwgMHhlNTUxNzE4NywgMHgxODhiMWZmYiwgMHhlODUwYWZjZiwKKwkweDgxNTZjNTZhLCAweGJjYmU4YWU4LCAweDg0YmRmMDEwLCAweDEwM2RmODQ1LCAweDZhZjc3ZmQwLCAweDI4OWJmZGI5LAorCTB4YzRmMjdiZjIsIDB4ZTI4ZjNjNGQsIDB4ZmNhNzY2M2UsIDB4N2Q0ODY1OTEsIDB4ZDdkN2U5MTIsIDB4MGY2ZWQwN2MsCisJMHhkYjg5MmViZiwgMHg5YzM4ZTZmNywgMHgzNTcxZjE3ZiwgMHhjNjE3MDdlNSwgMHgyNzZlOWVkZCwgMHhmOTQwNWYzZCwKKwkweDZlZjc4MjEzLCAweGFmMWJmYmU5LCAweGYzODMzZjI2LCAweGI5YWE4ZTI3LCAweDkyNzgwMWRjLCAweGY0ODVkNTlmLAorCTB4M2IxZWYxNGEsIDB4Y2FlYmM3OTUsIDB4YmYyMjljYTksIDB4NWVmYTE2MWYsIDB4Y2JlNzdmNDMsIDB4YjBiZTM4MmQsCisJMHhmODQxNjBjNiwgMHhjMDNkZjE1ZiwgMHhmZmJmYWJiMCwgMHhlYmYzOTRlNiwgMHg1YzllYzUxMiwgMHg2YmUzYzIzMywKKwkweDUxZTEwNTgzLCAweGVmNDlkNzE4LCAweGYzY2FhNTg5LCAweGIyNWI5YzNmLCAweDhiNjlmMTA5LCAweDFmNWMyZTYwLAorCTB4MDBiNjY5ZWYsIDB4NDBmMDhiN2MsIDB4M2RkMWM2MDIsIDB4NjZjZjdjMzYsIDB4NTEzMDUzYTAsIDB4NzI2NWY1M2UsCisJMHhjYzNhZWI3NCwgMHgxMzQ5YTk1MywgMHgyZGFmMTg0YywgMHgxODUyZGIwYSwgMHhhNTE3ZjMwYiwgMHg3Njc3ZDMyNCwKKwkweDFjNzhkYTZhLCAweDRlNGEwZmI2LCAweDkyZGM1MzA3LCAweDYyYWFjN2MwLCAweGYxY2Y3ZTMxLCAweDNmYjVjYmU4LAorCTB4ZGZjZjI5M2QsIDB4YjNlNjViM2UsIDB4NzgyZjhlZmUsIDB4ZTNiNWYxMWUsIDB4ZmJlOWJiYjQsIDB4ZWY0ZjRjMWMsCisJMHhmNjBmZDNhZiwgMHhkMWM2ZmIzNSwgMHhlODU1YWYxNCwgMHhhZTM5YjA2OCwgMHg0NWE4ZTkwOSwgMHhhNWE1MTNkNiwKKwkweDhlZDFhOWVmLCAweDM3YjNjYzY4LCAweDk2Y2ExYzIzLCAweDRiMTc1YzVjLCAweDRlM2UxY2U3LCAweDg3ZGZlNGE2LAorCTB4ZTUwMmM5YzYsIDB4ZGU0NmZmZWQsIDB4NWFiYTg5ZmQsIDB4NWJhZGRmMmEsIDB4OWQ3NzY1NDUsIDB4ZTgwNzllOGIsCisJMHhiZjA4MjM4YiwgMHg3ZDZmMTAxZiwgMHhmMTMwZDI3YiwgMHg0NzMzYTY1NiwgMHhiZTA1YmU5MiwgMHg5MGVkZjFlNywKKwkweGJiZjAyYWY4LCAweDMzZWZjMDE4LCAweGQ5ZWVhMjNhLCAweDgzNDhmNjgwLCAweGNkZjc4MmM2LCAweGQyYmNmZjk4LAorCTB4ZmRlMWYyNDAsIDB4NTljNmMzNDksIDB4MjgxOWY4MTUsIDB4ZjRjODNiMmUsIDB4ZTk4Nzg4MzksIDB4MTEyYWE5MTksCisJMHg5MjZkZmY5ZSwgMHg0NGU3MTQxMCwgMHgyMjczYzFiZSwgMHg3Yzg5NjBkZiwgMHhmOWY5NTJhMywgMHhhMzBkNjllNiwKKwkweDdkYTE5NGVmLCAweDQwZmIyMmUwLCAweGJmNWRmODRmLCAweGQ0MGFlNDA2LCAweDIwYTY2NWVmLCAweDQ0MjE3MmI5LAorCTB4ZjMyMzgwYWUsIDB4YWM1ZjdhMzMsIDB4MDkzNmNiNDMsIDB4ZTljZmZjZmUsIDB4MTljYTVjNTAsIDB4Yjg3OGNlNDYsCisJMHhlNjFkMTk5YywgMHhiM2JlOWU3OSwgMHhmOTQ2MWQ1MCwgMHg0NGVmYzBjNSwgMHhmMjM3NDc2NywgMHhhYzI1YmRiYywKKwkweDQ2MWRkNjg0LCAweDNlN2JkMGRlLCAweDM4MTg4ZWY3LCAweGJmZjQxNGY5LCAweGQ5MDM2MWY3LCAweDk2MTNlYjM5LAorCTB4ZTQ3N2ZmZTYsIDB4NzEyNzlmY2QsIDB4ZGY4MTNjNzgsIDB4ZWQ1ZDUwNzMsIDB4MDU5YjBlN2IsIDB4YjE1ZDhmYmMsCisJMHhiZTIzNjU5MCwgMHhjNDM5ZWY5NSwgMHg3YmYyMThjMSwgMHgzOWVmZjVmZiwgMHgxMjNjOTg4YywgMHgwYWUwZTdiZiwKKwkweGRjNDM5ZWZhLCAweDMwZTdiZTE1LCAweDYxNzFiMjZhLCAweDQ2MWNmN2UwLCAweDMwYjExZTRkLCAweGM2MGU3YmY4LAorCTB4YjI5ZGY4ODUsIDB4MzllZmMxZmYsIDB4YmJjZTRmYTQsIDB4MzcwZTdiZmMsIDB4YTBmZjM2NGUsIDB4M2Q4MDM5ZWYsCisJMHg0ZmUzODk5YiwgMHg2M2M2ZDhlNCwgMHgzYjlmMjg5OSwgMHhlM2U1ZmRmNCwgMHg5NzY0M2RmMiwgMHhiMmM1MmY2OCwKKwkweGEyYTVjMjI4LCAweGM1NmRkMTc2LCAweDczZDE2ZGYyLCAweDVmMDNiNjNmLCAweDE1Nzg0NDRjLCAweDAzN2Q5NjNkLAorCTB4NTEyNTk3N2UsIDB4ZjJiY2ExZWIsIDB4NDliNmFkMjcsIDB4Yjk2YmZmMzgsIDB4M2NmOGM5YjYsIDB4MmY1ZmRlMzQsCisJMHg3M2Y2MGY5ZiwgMHhjZDBiZjYwYiwgMHhlMmU4NTMxZiwgMHgwZTVjYzlhZSwgMHhhOWNiOTNjZCwgMHhjN2JmYzNmNSwKKwkweGJmMzI2ZjNmLCAweGJlZDZiZTRmLCAweGUwNzdiZjYxLCAweGQ5ZmVjYTdhLCAweGRjNTZjNTk2LCAweDRlZjdlYzBmLAorCTB4YjdlYzI3ZGMsIDB4ODg2NjRiMDQsIDB4ZjgwZjdhMGUsIDB4Yzk3NTdhNzIsIDB4MmU3NDYyZmIsIDB4M2ZiMzhmOTAsCisJMHg5NTI4ZjZlMSwgMHgxNDc3MmFlOSwgMHgxZWEzMGRkYSwgMHg3ZWUxNDc3MCwgMHhlODBlMzU0NywgMHhkZjkwN2RmMSwKKwkweDY4ZjQwNmJhLCAweGY1NzZmYzNmLCAweDdmZGIxZTgwLCAweGRhZjllMzZiLCAweDlmNmZmM2ExLCAweGY0OTFmZGNjLAorCTB4N2UzNDAzYTksIDB4NGRkZGZjMGMsIDB4MTQ0MGMxZmUsIDB4ZTVlOTZkZGEsIDB4MTRhZTM0NDcsIDB4ZjY2ZDRmN2EsCisJMHg5Mzc2NDEyNywgMHg4YzdiZjg5OSwgMHgwMWU2MzZkYywgMHg4YzNkMjE5MSwgMHgxZTc4YzFkOSwgMHhlOTBjNDE2MywKKwkweGVmMWQ0YWI5LCAweGZkYzBmOTVhLCAweDM4ZDFkMjIyLCAweDgwM2JlYzM3LCAweGFlZGZhZWZlLCAweGFmN2UwYzFhLAorCTB4YWFlMzRiZDcsIDB4NWVjMDI1ZTQsIDB4NjRlZTdhMGIsIDB4OTQ3NGJmM2MsIDB4NWVkMDhmMmMsIDB4MzlkOWVmYzQsCisJMHg3N2QwOGZjYiwgMHgwYjhlYzBhNiwgMHg3OWJlOGY5OSwgMHg1OTRmOTQzMCwgMHhlNmJmYjNhZCwgMHg2MmJlNTMzMywKKwkweDc3YTViZjUwLCAweGZhM2Q2NmZmLCAweDViYTVlNWI1LCAweDJmMTdlNDM1LCAweGE1OGY1OTY5LCAweDI2OWVmMWMzLAorCTB4MTk3ZDkxOGUsIDB4Y2JlYzFmZDQsIDB4ZmI2NWZhYTAsIDB4ZjU0N2Q5MGMsIDB4YzdkNzE3ZmQsIDB4ZDAyZWIzMGQsCisJMHgxM2E0NTZjMSwgMHhhYThlMGU4NSwgMHg0ZmQwZTMzZCwgMHhiMzBjZWEzZCwgMHgzYzFkZjdmMCwgMHgyNjlhNWRmNCwKKwkweDVkZjRiZGY5LCAweGNhZGQzOWZmLCAweDVkMzk2NWYzLCAweDNmMWRmOGMwLCAweGE5ZWE4ZThjLCAweGFmMWRmMmJmLAorCTB4MWM4YTk1NmIsIDB4OGRjZWZhMWMsIDB4NWUyOGI5ODYsIDB4NzI0OGNiMzksIDB4ZmZmNjQ2YWUsIDB4Yzg5ODk3YWEsCisJMHhiYWY4NTExZSwgMHhiNTM5ZTU1YSwgMHgxOGM1ZmIxZSwgMHg4YTliZmU3OSwgMHg3YWFiZjdkMSwgMHhjZjk0NTFjNCwKKwkweGNmYWMzZjRkLCAweGFjZmJhNTRhLCAweDE3OGY3YWQ4LCAweDVkYjgxZGU3LCAweDE1YjllZmEwLCAweDVhYjk3Mzg0LAorCTB4OWUzODk2MjgsIDB4NDQ0N2U3ODUsIDB4YTc4MTVkZmUsIDB4OTg0ODdlNTEsIDB4MzdiZmMxNDcsIDB4YmY5NzI1MzAsCisJMHhmOGNmMTAzZiwgMHhjYTk4ZGI3NywgMHgzNjlkZjIxYywgMHhlZDdhMWUzOSwgMHhlZmYxYjRlZiwgMHhmN2U3Y2Q5MiwKKwkweDI1NTEwZDcyLCAweGY5ZjFjYmE1LCAweGY5ZTgxYjgyLCAweDFmNTJlZmMxLCAweDJhZmVlMmIxLCAweDcxYjRlZjk0LAorCTB4NGU2MWJmN2IsIDB4NTU3ZjNkMDYsIDB4M2Q0MWFmMzAsIDB4NWQ4MDdhZTEsIDB4N2E2ZDNiZTksIDB4ZWY4MGZiZTQsCisJMHhmODg3YmRiMywgMHhkOWY3ZDZiYSwgMHgxYzBmZWY5NCwgMHgyM2MzNzA1ZCwgMHhiZDFjMzk3YiwgMHgzMzU1ZWY3OCwKKwkweGFmZTQxOGNiLCAweDNjMzExN2ZmLCAweDU2YzBkMjllLCAweDAwMDA1NmMwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1faW50X3RhYmxlX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgzM2IzYWY4YSwgMHgyMTcxNjgzMCwKLQkweDlmMDE0M2Y4LCAweDM4NjA2NjY0LCAweDgxNjdjNDBkLCAweDgxODU5Nzk4LCAweDgxODk5N2MxLCAweDc4ODk4ZmMxLAotCTB4MTBjNTMzZmQsIDB4MDYxMTQxNmMsIDB4NWUyMDNiMDYsIDB4ZjBjMGM0MmUsIDB4Y2UyMTA0NGUsIDB4MTBjMGNlMjgsCi0JMHgyMGMwY2EyZCwgMHhhZmUxMGEyYiwgMHg2MjY2ZDIwNCwgMHg0MGZmNzFkNCwgMHg0YzE5NDY2MywgMHgwODkyMDdiMSwKLQkweDc5MTYxMzM2LCAweDI2OGNjYzY0LCAweGNhODUyMGVmLCAweDdmYTAyMTY3LCAweDI1MTdmMWEwLCAweDIyYWNiZTU0LAotCTB4OGE4NDZlODQsIDB4OTc5MzQ1N2YsIDB4NDMyYmNhODMsIDB4MDk0ZGY1ZmQsIDB4NTAyYWI5YmIsIDB4MWFhMDAwNzksCi0JMHgwMzYwNWY4MiwgMHgwMDAwMDM2MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzM3MDI3OGEsIDB4NDVlMzljMzAsCisJMHg4MzgxZTlmMCwgMHg1ZmQzMjkxOCwgMHg1MGMwY2VjNiwgMHg0MDU1YzQwMSwgMHgzZjg4MGJiYywgMHg3YzMwMzJiMSwKKwkweGZmNWUyNTY2LCAweGRiMDQyOTM1LCAweDIxODE4MjQ4LCAweDg4ZDc4ODFlLCAweDQ5YTgzMDMxLCAweGE0MWRjNDIyLAorCTB4MDMyNjE4MTksIDB4YjE1MGExZjksIDB4NWYzYTQwNDcsIDB4MGY3NzMyOGEsIDB4ODBhNjljMTYsIDB4ODcyYWU2MjksCisJMHg5MTYzYTc2MCwgMHg2ODE5YzY0NywgMHg1MGU1NGJmMiwgMHhmNDA0OTlmOSwgMHhhMmJlMzQwZiwgMHhhMmZmY2E4ZSwKKwkweGEwMTNhMTBhLCAweGU0ZDE1N2UyLCAweDNiZTU0MmJmLCAweGE2YmFmZWEwLCAweDRlZGNkZDhlLCAweGMzNWRmZDMyLAorCTB4ZmMwMWExMDIsIDB4OTg0N2IwOTksIDB4MDA5ODQ3YjAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdHNlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwZCwgMHg3MzNlZThiNSwgMHg0OTk5OWNjZSwKLQkweDIxMjY0Y2NlLCAweDYxMDIxMzA5LCAweDQwYTAyMDkyLCAweDIwMGM3ZTE4LCAweGY3ZjA5ZDc4LCAweDgwM2FhNTY4LAotCTB4MDc1MTVhNTYsIDB4NDNmMjEwODEsIDB4YmQxZjUyMDIsIDB4MjQyNjZiZWQsIDB4MWJkNTY4YzEsIDB4YWI0NWE4ZmEsCi0JMHg2OGE5MDA3NiwgMHg2MjM0OGVkMSwgMHhhODA3NDBhOCwgMHgwZGI2YTg1YywgMHhjN2Y0MmFkNiwgMHhjNDA1YWQxYiwKLQkweDk2YWE0NDkwLCAweDZiYjk0YWJlLCAweGU2NGZiZGFkLCAweDQwMTk5MzljLCAweDZmNWZiN2JkLCAweDZmZDY5N2JmLAotCTB4NjdkOWNmYjMsIDB4ZGZkN2I1ZWYsIDB4YjVlZDZiNWUsIDB4ODk3NjI4ZjcsIDB4ZWM2NTBlZTUsIDB4Yzc1ZGZlMDIsCi0JMHgzMTk5MDJkOCwgMHhmNGEyNzU3NiwgMHgwZDBlYmJjMSwgMHgwN2Y4YWRmZSwgMHhjY2RkMjgzMiwgMHgyODYyYjEyZiwKLQkweDJmNmUyY2ZkLCAweGZjNzA3MjgxLCAweGQ2NWU5NjE4LCAweGYzN2UxOGM5LCAweDk1OTkwNWYxLCAweDMyNzFlNjMyLAotCTB4YjA5NDE3ZjEsIDB4ZGFmMmY1ZWUsIDB4NmQ4N2IyYjcsIDB4ZDViMjg0MjgsIDB4NmNjNjUzZjcsIDB4NjdhYWVkOGMsCi0JMHg0NGY2NjE4MSwgMHhmZjU3ODczYiwgMHg5MWMxN2UyZSwgMHhmYTQ4NzBjYiwgMHg4Nzc1NjBjYiwgMHhiYjg3YzE4NywKLQkweGI2ZTJlN2E0LCAweDhlZjU4Yzg5LCAweDdlMmQ4MTYxLCAweDVkZGUwNzE4LCAweGNmZmQwNTliLCAweDMxNmRlYzYxLAotCTB4NzA0NjA1ZTYsIDB4OGE1MGI4NWMsIDB4NGI4MjMxZGYsIDB4ZTczYWY4ZmIsIDB4MGVlNzY4NDIsIDB4MDBjNTVmYWQsCi0JMHg3MzM0Y2Y1ZSwgMHhiOWEyNmQ3YiwgMHhmNTBkMThlZSwgMHhhNWZhODk5MSwgMHg2Y2E2MDNkYSwgMHg4ODFkZTAwYywKLQkweGVkNWMwM2YwLCAweGQ3OWE0ZWY1LCAweDgxYmRlYjhmLCAweGI2MzA1NzYxLCAweGY1NDdkZWE3LCAweDJhN2VmNTdkLAotCTB4ZTkyM2Y1ZTMsIDB4MDBmYTgxZjksIDB4YjA1ODczZDUsIDB4ZWFjN2YwOTAsIDB4NjZjYTJjMzYsIDB4ODUzNmYxYWMsCi0JMHg3NDEyYzdkZCwgMHg4YzNkNjZmOSwgMHhmZWEyNDU3NywgMHgyMjJjZDFhNywgMHhhNGZlZTRjMywgMHgwMDQyM2JiMCwKLQkweDEzMmJjMzZiLCAweGJjYTEzYTMyLCAweDdmNDFkYjFmLCAweDI4MDE4ZDBmLCAweDNmZGEyNmM2LCAweGRjZTVmNmJjLAotCTB4Y2IxODEzOTksIDB4ZGM5MWVhZmIsIDB4YmRlMDAzOTksIDB4NDZjNjE2YzQsIDB4ZDJhZDc4ZTMsIDB4OWRmMDMxYmMsCi0JMHhkYmQxZmJjYSwgMHhlYjYzMjVlYiwgMHhlZDlhMGY4OCwgMHg2NWFmZGZjOSwgMHhmMmNmMDIxMiwgMHg3ZTYwYWMwZSwKLQkweDBmNmJmNDM3LCAweDA3MDEzYmU3LCAweDA0YzY0NGI3LCAweGI4YzMwNjViLCAweDE4NmJlYzQ4LCAweDExMWIzMmZiLAotCTB4MzcwZTAwODksIDB4OGM3OTk3NjEsIDB4ZjM0MmQwZWQsIDB4NWYxY2JiZjAsIDB4OTEyMzBhNDgsIDB4Mjk5YzQwYzMsCi0JMHgyY2FiNjU4YywgMHg0NzBhNGIxYywgMHgyYjcxYzEwMywgMHg0YjA3MzNmZSwgMHgwZjRiZDUzZiwgMHg3ZWY1NzFmMiwKLQkweGU3MTFiMmY0LCAweGNlZTRlNTA3LCAweGRlMmM1YjMwLCAweDc3ZmJlMTk3LCAweGU4NjJkMjQyLCAweGU3YzVkOWJmLAotCTB4NzM2MzAyZjMsIDB4MTI0OWJjNzAsIDB4MTJiOTYxMGIsIDB4MmRmYTEyOTksIDB4MzEyNzMyYzcsIDB4ZTVjNjBhZWUsCi0JMHg2MTczYmFlMSwgMHg1NDdlODQxNiwgMHhjNzg1OTg1ZiwgMHhmYzgzN2VmMCwgMHg2YzhjYTZmYiwgMHgxYjdmOWI5YSwKLQkweGRhOTQ0M2YxLCAweDQ3NGRkYjFiLCAweDg4YjZmY2I4LCAweGVkYzcwMzNkLCAweDIzZWQ4ODNkLCAweGY2YzMxNjNlLAotCTB4MzliNjY4MmYsIDB4M2I0NGI0NWIsIDB4NmU0OTllMWQsIDB4OTY4YjY4NWIsIDB4MTZjODJmZTgsIDB4ZTVkM2ZhOWIsCi0JMHhiZTcyNzY0ZCwgMHg4MWRlZjlkMywgMHhkYTljODA5ZiwgMHhjMjI4ZmJlMSwgMHgzNzA1OTgzYiwgMHhiZGViYzEyNywKLQkweDA3YTViZTYyLCAweDNjMDY0MTVkLCAweGEzNTQyZWFkLCAweGFmYTkyNDJlLCAweDM5ZWIwY2I1LCAweDA2NDA1OTRiLAotCTB4ZTVlYjRlMWEsIDB4MDcwM2I4ZjMsIDB4M2JjYzQ5YzksIDB4MzdjMDAzZTcsIDB4ZmVjMDFkOTQsIDB4MDhlM2U2MGMsCi0JMHhkYTAzYThiMCwgMHg4MjZiNzlhYiwgMHgxZjRmNTA2NSwgMHgxYjAyZDVjYywgMHgzNjcyNjMxYywgMHhjZGM0NzNjOSwKLQkweDk3YTFjM2ZhLCAweGZjMTNjN2RhLCAweDAwZGYxNzQ4LCAweDA2MDRlZjVkLCAweDQxZGJhODMyLCAweDc4MDIwY2ExLAotCTB4YTgzYjhmMWEsIDB4ZTVkYzhmZmYsIDB4ZmQzM2IxNDMsIDB4ZjFmNTUzYmIsIDB4M2U0MTRiNzEsIDB4YTYxZmQ3NGUsCi0JMHg4M2JlYWJiMiwgMHg2M2ZhZWVjYSwgMHgwZjFhYTY1NCwgMHgyNmM2ZDEyNCwgMHg2MGRmOGMwMywgMHg1ZGNhMjc0MSwKLQkweDA3NWQxMmExLCAweGZmZWUzN2ZkLCAweDIxOGZmMzJhLCAweDg3ODgyM2Y4LCAweDJkMTZjZDc0LCAweDRlNjY1ZTQyLAotCTB4ZjgxNWNkNTksIDB4ZTEyYjdjNDUsIDB4OGU2ZWY5YmMsIDB4YmRiM2M0NWYsIDB4ODY2ZDA5NTAsIDB4MmFkOWNmMzIsCi0JMHg3ODZkMWFhZCwgMHhmYzQwNzQwZSwgMHhiODdjMWU5NywgMHgyZWE0ZjEwMSwgMHg4NTVjZTM2NSwgMHg0ZjljMmYyOCwKLQkweDk3Yzg5ZjExLCAweDVmMzgxYWJiLCAweDI4NGVmZDYyLCAweDAyOTUzOWFmLCAweGVmMWM1ZGVmLCAweDUzYTlkYWRhLAotCTB4YzA2MDk5ZGYsIDB4NWM4MmMyOWYsIDB4MjhiZjM5YWUsIDB4NzhjNzdmZjAsIDB4N2IzNDNhODAsIDB4YmRlODI2NDUsCi0JMHhiYzA3N2ZiYywgMHg5ZTdkMjY4ZSwgMHg5MDZiOTVjMSwgMHg5ZTJhZGVhMSwgMHgzMGRkZWJhYywgMHhhYmQyN2UyMywKLQkweDUwNzllZGMwLCAweDk3Y2ZhYzFmLCAweGY4ODk3ZmY5LCAweGZhMDRkY2Q4LCAweGQ1N2VlYjA5LCAweDIxZmJjMmFmLAotCTB4NzBlMGY1YTIsIDB4Y2E1NDVjYzUsIDB4MWVlN2NiNWIsIDB4NjJiYzYwOTIsIDB4YThmZGUzZjksIDB4MjlkNDg3ZGUsCi0JMHhmNDFhNzc2ZiwgMHg2MDQyYzE2NSwgMHg4NmM2MjJiYywgMHgyZjNmMzVhZSwgMHgzMGViOTg4YywgMHhmMzA0MmQ4MCwKLQkweDNmMzE2ZTJmLCAweGQ5ZGNjZTNmLCAweDJlMTlkMjI3LCAweDgwOTA2ZTQ4LCAweGJkNWFmMzdlLCAweDg0OWE0NWVjLAotCTB4ZjU4ZGRlOTUsIDB4MGRkOWFlMmMsIDB4ZjQyN2ExNzUsIDB4ZGM5OWU0YmEsIDB4YWRmOTgxMTksIDB4OTAwNTkyYmUsCi0JMHg0NDkyNjljNiwgMHhlZmM1NmM3OCwgMHgxNDFlOGY4MCwgMHg3ZTk2ZmRlNSwgMHhhYzk5NTJmNCwgMHgwMmVmNTBkOSwKLQkweGY0Yzk4M2RlLCAweGQ2NTRiZTU4LCAweDU2YmM3NDhiLCAweGZkOGJkZTlhLCAweGU2MzEyYmE2LCAweDU0YmY5MGQ1LAotCTB4ZmI2YjEzZTIsIDB4ZjFhMTQ5MzQsIDB4YTA4ZTk0ZDMsIDB4MTRkZWViOGMsIDB4YjZhZGVlYmUsIDB4OWU1MWM2ZjcsCi0JMHgwM2Y5OTc1NiwgMHgwMjhmNWMxMSwgMHg0Y2RmOTI1MSwgMHg1ZTUwYjM1OCwgMHgzNjNjMDEzZiwgMHg5MzYzYzM4OSwKLQkweGY1MTg5YzY4LCAweGRiMmJlYjAzLCAweGJjMzhlMTIyLCAweGZhNTdkNWRmLCAweDBkNGE0NDU5LCAweDJkMTkxZmU3LAotCTB4MTY5OGVjNjIsIDB4M2NmZWM0Y2UsIDB4NzA5Y2E0OTIsIDB4NThkM2U4MjYsIDB4YjM2ZmY0NTEsIDB4YzM3MmVhYTEsCi0JMHg3NTEzYWJmYiwgMHg3YzczOWRkZiwgMHg0Mzc5YzdjOCwgMHg3NzJiZjRjZCwgMHg3ZjIwMTVkNiwgMHhiMzYyODY1NCwKLQkweDdhNGU3ZjkxLCAweDBlZGViYTdlLCAweGY2MDJkZWYzLCAweDlmZjgwMjgyLCAweDYxZTUwY2U0LCAweGVhOGIzNTNmLAotCTB4ZjMwYWEzODYsIDB4ZTMwM2EyZTMsIDB4MWViN2IyNmUsIDB4Mzk4MjRiMDcsIDB4NWZmNDg4NTksIDB4MDE3NWNjY2IsCi0JMHg2N2RiZGUwNSwgMHhmMDNiNzEyYSwgMHgwMWYyN2RhNSwgMHhhYzVjNTdiMiwgMHhjOWM3ZWI4ZSwgMHgwN2I0MzI5MSwKLQkweGVmODMyMzljLCAweDQ1NWVmMGNhLCAweGRlZTc4MDc5LCAweDc1YzMyYjYwLCAweGJjY2MzOWM0LCAweDliM2M4M2NlLAotCTB4YjliNjRhZWEsIDB4NWNjZjRhOWUsIDB4ZjhjYTVjYWEsIDB4ODQwNjllZmEsIDB4YjI2N2ZjMjIsIDB4OTk1ZmUyMjgsCi0JMHhmODQxMjgxYywgMHhmM2U2YmMxZSwgMHhhYTY3ODQ3ZSwgMHg4NGE1ZDdjNCwgMHhkZTcyZTJmZSwgMHhiZmI1ZWY0NywKLQkweDAwMzYxZGM4LCAweGY5NzJiNzlmLCAweGVlNGFmYjVmLCAweDhmODgwOWIwLCAweDczOTc5YTU2LCAweDBiOTI2YWM2LAotCTB4NzMyM2YxMTUsIDB4MTNiOTBmZjksIDB4Zjg3OGViZGYsIDB4OTYxYmNmN2IsIDB4ZjQ5NzlhMDUsIDB4NTAyN2YzOTMsCi0JMHg2ZjNlMzYzZiwgMHg5ZjllYTNmNywgMHg3ZTNkYmNmMSwgMHgzNjZiZDQxZCwgMHg2ZGY3YTQ0YiwgMHg5Zjg0NWNmYiwKLQkweDNkNzk0N2VlLCAweGQ4ODM1NmVlLCAweDUwMTNjY2ZlLCAweDNhZDU3YzA3LCAweDhhOWMxZTNhLCAweDY2NWU3YmY4LAotCTB4MGIzZDA4NWIsIDB4NGVjZmE4NmQsIDB4M2I2OGY2ZTgsIDB4NzhiYjk3YWYsIDB4ZmVmMzY2YjUsIDB4OGFmYmYxZGIsCi0JMHg3ZDQzMDc3NiwgMHhmOTdiYjM1YywgMHhiZWExNTMwZCwgMHg2MTlkYjBmYywgMHgwZDZkOWE5MywgMHhhZmE4MjBlYSwKLQkweGFjMzE0YTg4LCAweGY0ZTc0Y2Y3LCAweGEzOTJlYzg5LCAweDhmN2RhMGRiLCAweDY2ZjcyM2E3LCAweDI3MWRkNzBkLAotCTB4YjgwMDhmZjMsIDB4MzdiOTFkZGQsIDB4NDY1NzFmMDEsIDB4ZGY4ZDliOWYsIDB4MDI5MGVlNTUsIDB4Yzc5ODMxNDAsCi0JMHhmMDc5NDNiNiwgMHg1MjUzY2Q1ZCwgMHg1YzdjMDFjMCwgMHhmOTlkM2RiNSwgMHg4OWU1ZjYwZCwgMHgxZDdlMzkzNiwKLQkweDkzY2MxOWNhLCAweDU5Y2JiZjQxLCAweDRmYTQ2Y2ViLCAweGFhMGRiNmNkLCAweGQzOWY0MGRmLCAweGRmOTkyM2Y1LAotCTB4M2NkN2E4OTEsIDB4NzdjMGUzMDUsIDB4MDI5NTlmMmIsIDB4MzY5NWM1MzgsIDB4ZWY3NTNmNmUsIDB4YWFkYzJkNzYsCi0JMHhkNDFhZmNlMSwgMHhkNzljNmVlMSwgMHg1YmI2MmEzZCwgMHhjYmJjNWQxZSwgMHgzNmY4NDdlNSwgMHg3ZGUxYjNhYiwKLQkweGQ1OWJhM2U1LCAweGE4NWU4MzcyLCAweDY0MGEzZWRhLCAweGE2ZDcwMGM5LCAweDI0ZTE4MWUyLCAweDBmMDEyMzdhLAotCTB4ODk1M2MxMzMsIDB4ZWRkNjg2N2EsIDB4YTU3NjhhYTgsIDB4MmRhYTdjZmUsIDB4NmFiMWY4OTMsIDB4NWZlYTZjYmIsCi0JMHhkN2U0N2JhNywgMHhjODg3ZWM4YywgMHg1NWUxMzc1ZSwgMHgyZjZhZGJhNywgMHhhMDhlZWJlMywgMHhhMGFmNTlkYiwKLQkweDZhNWJkMmEzLCAweDFmMmY1ZmVjLCAweDUwMzgzYTQ0LCAweGZjYTk3YjVmLCAweGNhOGZiZDU2LCAweGEyN2VmNThkLAotCTB4YmY4ODQzY2YsIDB4YzY0ZWRjMTEsIDB4OTdkNzYwZTcsIDB4ODI3YjJmMjEsIDB4YzNlYzBiY2MsIDB4Y2IwNmU2YjIsCi0JMHgwYWNmNTBlYywgMHhhMmVlN2FmMSwgMHhjOGJmZTRiMCwgMHhlYzEyZjVmYywgMHgwNGUwYzVkZSwgMHg3YWZkZmFjMSwKLQkweGY2M2IwMTUwLCAweDhhYmMzNTIxLCAweGE2ZmM2MDA1LCAweDA0Y2UwOGZmLCAweDUyOGZmNzdiLCAweDRhZmE4NjM4LAotCTB4YjgyYjg1YjYsIDB4Mjg3Y2M1ZGMsIDB4ZmFjNWViNzcsIDB4MTNmMjVkYjMsIDB4YTllN2Q2MWUsIDB4YmExZjZmYTQsCi0JMHgyY2FiNzRhZCwgMHg2MzY2Yjk4OSwgMHhmN2ZiZmNiZCwgMHhiYjNmNTIxNSwgMHhmYTE1MWZhOSwgMHgzZjc0YmUyOSwKLQkweDM2NGZiN2I5LCAweDdiN2I5M2Y1LCAweDAxY2ZkZTg1LCAweGYyZWQyN2VhLCAweGY2ZTg3OWZhLCAweGRjZjBjYzZiLAotCTB4ZjNmN2E5NWUsIDB4YjllM2Y1MzIsIDB4ZGVlNTc5YmMsIDB4Y2YwY2NkMzEsIDB4Y2ZkNGQ1MWQsIDB4ZDIwMTQ1YzAsCi0JMHgzZmNlYjJiNywgMHhiNDNiZDYwYywgMHg4ZTY0NzcxNywgMHg1MzQxZmEzNywgMHhjMGRmZDM2ZCwgMHg1MjBkYzVmNSwKLQkweDhjYTNlNDY1LCAweDc5MjY2OWM5LCAweDk5NjYwY2NhLCAweDBjZTYwM2VhLCAweDA5Y2ZiNTMyLCAweDBmZGU5OTE1LAotCTB4ODU5NTc4NWMsIDB4ODllZjM1MmYsIDB4NDA4ZWEyNTEsIDB4ZjY4YjQzYTEsIDB4ZjQ5NTIwZjEsIDB4MjcyMGQ5NGUsCi0JMHgyMGY3N2ZjMSwgMHhkZGNlZjQ4ZCwgMHhlMDQ3ODRkNywgMHhhMmIwOGUzYSwgMHgxYWI3NzM3ZiwgMHhlYTRkZWIxZSwKLQkweGNjNDg3NGM3LCAweDg2ZGZhNTg3LCAweDNkZmRmNWE1LCAweDllOWMxZWMyLCAweGI3ZjBmMWZmLCAweDViNWFmYmUwLAotCTB4YTg0Y2YwZWYsIDB4ZmIyYjZiYmYsIDB4YmNmOWUyMzMsIDB4MzI2OWZmZDAsIDB4Njk3NmMzYWIsIDB4ZWZmYTQ2MGUsCi0JMHhhZGQyYzI5ZSwgMHg1YjVlMDMxMSwgMHg0OGJmMDA4NiwgMHhlYzViN2U4OSwgMHhhM2YyMWY2MSwgMHg5MDFhOTM2NCwKLQkweDUxMGZkNzNmLCAweGZhMDQxYjE5LCAweDFmZGIxZDc0LCAweDllZTczNTgxLCAweGM0M2VlNTIxLCAweDJmZmQwM2JmLAotCTB4OGMyYWY4ZTMsIDB4NzdjNjlhM2YsIDB4Yjc3YzYwZDgsIDB4OGVmOGY5MmQsIDB4ZjFhNmM5YTIsIDB4YTYxNTA1OWQsCi0JMHg4YzJhOWRmMSwgMHg2OTkxZjIwZiwgMHg5ZGYxODk3MywgMHhhZDY2MTdlNCwgMHg4ZWY4ZDI3MywgMHhmZjFhMGE4MiwKLQkweDk4NTU5NTFlLCAweDFiZWI0ZmM2LCAweGM2MGRhMDdmLCAweGZlZTM2MjFkLCAweDE3ZjliZjRhLCAweDdmOWU2MzVkLAotCTB4ZmU3OWE1NDEsIDB4YTE3ZjlmMmEsIDB4OWY4YzUzMmQsIDB4NWEyZmYzNDYsIDB4MmZmM2U1ZTcsIDB4NzdmM2U0YTgsCi0JMHhjNmZiN2VmMCwgMHg3ZmUxZjRmNywgMHgyNjNmOGUwNCwgMHhlMjhlZjhjNSwgMHgwZmY5ZTY2OSwgMHhkZmNmMzZhZCwKLQkweDY3MWZjN2MxLCAweDZiZTMxM2NiLCAweDc1ZjhmZTM0LCAweGExZmYzZTNlLCAweGVhYmUzNGQ1LCAweDhmOTAwNzA4LAotCTB4YmFiNGZjZDQsIDB4ODM0M2RhMjgsIDB4MjQwZGZiNDEsIDB4NzJhNDE4MWQsIDB4YmI5M2Y3MjQsIDB4ZTM4MjIyYTQsCi0JMHg3N2NlMzRlZSwgMHhiZjAxYTUxZiwgMHhjYTdkMDk2OSwgMHg5ZTI5ZWJhMiwgMHg3NGYwNTJiMiwgMHgzNTMyOGVkNSwKLQkweDA3YmM1YTNjLCAweDAwOTk3ZjdiLCAweDRjYmI2OTc1LCAweDNhMzZjZDdjLCAweGJjMDA1N2EyLCAweGY5MzJlZGRkLAotCTB4NWUzNzRiM2IsIDB4M2Q2OTk1MWIsIDB4MTgwOGZlZTUsIDB4ZmU3YzcxOTAsIDB4ZDk4ZjZmYzcsIDB4YjU5NzljNjIsCi0JMHgzZjZhZDY1YywgMHhhYjkwNjlkMSwgMHg5ZDNlZmQzZSwgMHhmODAzYWM4ZCwgMHg1MzVlNDgzNiwgMHg2OWU4MDRmZCwKLQkweDA2ZGVhNjc0LCAweDQ5ZTU4YzdkLCAweGYzYzAzMzhjLCAweGIzOGY0MDc3LCAweDdmZmRmZDExLCAweGQxYjVlZWU4LAotCTB4MGEyZmFmMzAsIDB4MWMyODRmZjgsIDB4NDhkNjI3ZGYsIDB4NDdmZmM0NTEsIDB4YThhOTU2MWIsIDB4YTZiNTk2Y2YsCi0JMHgwN2QzZDFhMywgMHg1M2EwYWQ0NywgMHhkOTA3NmVlZiwgMHgzZjRmODA1NSwgMHgxMjE2ZTdlMiwgMHhiZjdlYzY0NSwKLQkweDI0ODcwYmVmLCAweDZmOTY3YmIwLCAweDZlZmE2MDFhLCAweGZiMzY4YjExLCAweGZiOTJmZGEwLCAweGMyZjEwZjE3LAotCTB4ZTg1ZDZmZmMsIDB4MWY5MzJmMTgsIDB4OTFiN2NjMTgsIDB4MWI3Y2IzMWMsIDB4ZGIwYjRlZjgsIDB4YTFmM2Q4MzYsCi0JMHhiYjQyY2I3MiwgMHg1MmY5NGZjOSwgMHhiNWJmNWNkOCwgMHhiNmVmNWNjMiwgMHhjZjE4ZWQ0NywgMHhiMTIxNWVlYSwKLQkweDZkZWZkMGNkLCAweGZmOGI3Njc1LCAweDYxNTljN2MzLCAweDA4ZjExMmNiLCAweDgxMTdkZTNlLCAweGU4ZjA3OTg2LAotCTB4ZTNjNzJjMzYsIDB4ZjVkMTJmNjMsIDB4NTZmZjJmNzYsIDB4NmJmNmE3ODcsIDB4OTA1NDcwNzYsIDB4ZTgzOTlkN2UsCi0JMHgwZTQ4YjM0NywgMHgyZjYxNzdmOSwgMHhkZTE1Yjc5ZiwgMHg2MGNlZWRkYiwgMHhmZGI5ZTAwOCwgMHhkM2UxMzJhYiwKLQkweGJlZTc3ZjBhLCAweGVjMGRhMGY0LCAweDdmNGRjZWQxLCAweDZlN2RhM2IyLCAweGZlMTU4ZjlkLCAweGU3NWFkNjNiLAotCTB4N2Q3MTU1ZTMsIDB4M2ViMTFjNTgsIDB4NWFlYzk4OGYsIDB4MmY2ZGFjYmQsIDB4ODE4ZWZhZGIsIDB4OWY2MjZhOWYsCi0JMHhlMThlZmFkYiwgMHhmM2VkYWFiYiwgMHhkMTE1ZjU0YywgMHgyZmRhOTkyZiwgMHhmNGQ4YjRkZiwgMHgwYWViNTk3ZSwKLQkweDJkMjVmYmQzLCAweGM1ZjU0Y2FiLCAweGRhOWFhZjkxLCAweGMxYjZiMWRmLCAweGJhYjZmZWY0LCAweDZmZWY0ZDdiLAotCTB4YWE2MGQ4YWQsIDB4YjBmYzI5N2YsIDB4MGIyZGZkYTksIDB4NGJkZTliMzcsIDB4ZWQwYzU2ZmIsIDB4MWUxYWJkMjQsCi0JMHhlYjc2ODc5YSwgMHg1OWY5MDc3MSwgMHhmMmViYmYzYSwgMHgxNmVjMGE3MCwgMHhkZDgzNGYyYywgMHhjYTAzNjU4MiwKLQkweDZkYmZjODI5LCAweGI3NmIyZjM3LCAweDM1ZWExZTJjLCAweGVkMjc2MWY4LCAweDRmMjgwNTc1LCAweGUyYjdiZTU2LAotCTB4ZjBkZmNhZDMsIDB4MWQ2YzlmOTcsIDB4OGM2YWNiZDIsIDB4M2RiZjQxNDMsIDB4MjQzOTNmMTYsIDB4MWYxZWEwZjQsCi0JMHhkY2I5NTZhYywgMHg5YmNjZWY1NiwgMHhiNTdmZmU4ZSwgMHg5NzVlMWYxYSwgMHg5M2VjNGZjNCwgMHhmMzQ0OThlNywKLQkweGU3YTU2ODYwLCAweDViODBkZDIwLCAweGRhYWI3ODBkLCAweGIzODI2YzVlLCAweGUzNGNiZjZiLCAweDA1ZDk0NGFmLAotCTB4MGE1ZjM3ZmQsIDB4ODhmNWM3MWQsIDB4MmMxNjBmYzUsIDB4MDRmMDgzMTgsIDB4ZjZmNTQzN2YsIDB4YmI3ZjVhMWMsCi0JMHg3ZDZjZTdlYSwgMHgwYmY4OGVjNywgMHg3ZWFhNzk1MSwgMHhlYTI3OTUyMSwgMHg1M2JlNTRjMywgMHhkYmU1NDE1ZiwKLQkweDc2NTQ3NWY1LCAweGYyYTVhZmQ2LCAweDk1MDhmYWNkLCAweGExNmZhYmJmLCAweGFkZjUzN2YyLCAweGRmYWIxZTU0LAotCTB4ZjVlYmU1NDQsIDB4ZWJiYjJhNTEsIDB4N2NlYTU0ODMsIDB4NDMyN2E3ZGIsIDB4ZmUxNTZlYzIsIDB4YjcyMjQ4MDUsCi0JMHhlNDVjYzU1YiwgMHg5NmI4YmVkYywgMHhhY2YxZTUwZiwgMHhiNDcwZDFmNiwgMHgwMzFlY2ZjYiwgMHhjNmE2MTcyMiwKLQkweDUyMWY5NTk3LCAweGM5MDU5NWUyLCAweDAyOGYyOGFlLCAweDdmZjQwNzlkLCAweDc0ZTM0YWVmLCAweDFjZDhkOTcyLAotCTB4ZGVlMzdhMDYsIDB4YzAxZmJlMmIsIDB4MTVkNDEzMzgsIDB4NDdkZjg1OTYsIDB4NDlkY2YzMDMsIDB4MTA3ZjA1ZmEsCi0JMHgzYTI5NzVlOSwgMHhjOTZmNjBiMSwgMHg4OWM3YTA3YywgMHg4YTVhZmU0NywgMHg0NTZjODZmZCwgMHgyODM4NWVkYywKLQkweGUyYzk3YWQzLCAweGFmNDgwMzViLCAweGU5Mzc4YTRmLCAweDQwMmZiZjI3LCAweGEzOTMzOWI5LCAweDAwYTNhZmUzLAotCTB4YjJkZjA0ZTMsIDB4YjM5ZmE5NzksIDB4MjBhNjBlNmQsIDB4NDdhNGY3MWUsIDB4ZjY3ZDI0MzEsIDB4YWUwZjU2ZjAsCi0JMHg3MjdkYWI3NywgMHhiMzFmMThkNCwgMHhjMmIxMzU5NiwgMHg0Zjk4NjZhOCwgMHg3ZWI5YmI2ZCwgMHhjMzlhNTViNiwKLQkweDhjZmU2OWUzLCAweDVmMjBjNjliLCAweDUwZWZhMzc5LCAweGE1NDdkMTVjLCAweDlmNmFjZmRlLCAweGZlZThlMzRhLAotCTB4NDk5MWRiMzgsIDB4MjE3ZTBhN2MsIDB4ODZhZmZiYjUsIDB4MDkzZjU1MjMsIDB4MWZkOGRhMzgsIDB4MmUyODc3MDAsCi0JMHhiOTNmOGExNywgMHgwZjk0Y2U1ZiwgMHhiMWJiOGM1NCwgMHg3MDhmZjYzZCwgMHg3ZmMwNzczZCwgMHg2NTkxZDAxNywKLQkweDdlZjVkNTBhLCAweGM0NzI2MzZiLCAweGVmOWYxNjMxLCAweGRmMDc4ZDMwLCAweGZiOWY3NWY5LCAweGY4YzVkMTQyLAotCTB4ZjQyNzYxNTUsIDB4OWI2YTgyNzksIDB4MGU0NDNlOGYsIDB4NmEyYjk1ZjIsIDB4YTY5OWZiZDYsIDB4NWU3YjZkN2EsCi0JMHhlMDBlYjRkNCwgMHg1OWVlNDAzZiwgMHgzYWUwYTQ4NSwgMHhhOGI4MmQ1OCwgMHgyNDVhZDE0NywgMHhlYzhjNmY4MCwKLQkweGYxMjZmY2U3LCAweDRlY2UzNTc2LCAweGJlNDdlYzM1LCAweDU0ZTJmYzY5LCAweGE1NmNiNjNmLCAweDNiZTE1YWY5LAotCTB4YWJkODdmNWQsIDB4NWM3ZTI0NWMsIDB4M2JiZDlmMjUsIDB4ZmZjOGJlZDksIDB4NDhiZWY5OTYsIDB4ZDNkYjhkYjUsCi0JMHhhMGYxMTljYywgMHgxMTdjY2FiZiwgMHhlMThiYzYwZiwgMHgwZmMzZWI0ZiwgMHg4ZTMwNGRmOSwgMHhiM2Y3YWVhMSwKLQkweDRkZWY2YTIyLCAweGQ5NzY0ZWI2LCAweDFkNmM5ZGI4LCAweDdiOGM0NWI3LCAweGRjYWRmYzI5LCAweGNlMzY3NDcxLAotCTB4OTVjNzhhZGIsIDB4YjRhYmVmZWQsIDB4ZmZjMGEzMWYsIDB4ZDQ3ODEzNGEsIDB4MGU0NjNiZjEsIDB4ZGZjMGM4YjUsCi0JMHgyMmRmZGI5NSwgMHgzZDk0ZjI3YiwgMHgxNzZiZmMzMiwgMHhlMWZkNWJkMSwgMHhiNzE0N2NkNywgMHg2MTFkZTdkNSwKLQkweDlkY2UzODFkLCAweGZmNjdmMTdkLCAweDc1ODViZjJkLCAweGVkOTdkZGYxLCAweGY2MmNiZTNjLCAweDcwMzg3NDM3LAotCTB4ZjUwNmQwZDMsIDB4Njc3NmEyMjUsIDB4OWJjNTE1NWIsIDB4M2Q3NWRkZGYsIDB4NTk0YjZmZDksIDB4NjQ0ZTgzYzgsCi0JMHg0NTJkNmIwNSwgMHhiMzBjZjAzYiwgMHg5ZDNjNDFjZCwgMHgyNjdhYWY2MSwgMHg0M2I0ZTgxOCwgMHg5NzRlNDk1NiwKLQkweDEwZWQ5OGI0LCAweGY1NGQ1ZmIwLCAweGY1Y2M5YmU1LCAweDE3M2YzNjcyLCAweDQ2Zjk0Y2Y1LCAweDM0NGE4YjNiLAotCTB4NDdmYmQzM2YsIDB4N2ZlMTJmNjUsIDB4OGY1YmFiMzksIDB4OWRhMzczZWIsIDB4ZTlkZGIzZWYsIDB4ZTgzZTRhNjUsCi0JMHgxZTE3OWFkYiwgMHhmZjM4YzUyYiwgMHg3ZWJlNjQ4ZiwgMHgxNTkzZjFlYSwgMHhhYjhlZGM1OSwgMHgzMTU2NmQ4YywKLQkweGI2ODdmZmJlLCAweGNhOWM1ZjA5LCAweDdhZThmYmYwLCAweGNmMjIxZjVjLCAweGZlNmQ4MTRiLCAweGE0ZmRmOGZlLAotCTB4ZDVlMTViZjAsIDB4NzE3ZWVmZDcsIDB4Y2Q0NzAxMWMsIDB4YmM2OTI5NzYsIDB4ODkyY2JmNzcsIDB4NjNmMzlmZjUsCi0JMHhiYWE1ZTI4NiwgMHg1YmU3ZDc2ZSwgMHgyMmM5YWZlYSwgMHgxOTMzMmMxZSwgMHhlYmM2N2VlOSwgMHhlODMyZDg4YywKLQkweGYzOGUyMDdkLCAweDM0MDhlOWRiLCAweDcyYzJmY2MyLCAweGY2NGM5OGU4LCAweDE5ODRiYzQ0LCAweDMwZTU4NWRhLAotCTB4NWU5MmVmM2QsIDB4OTNiYjQ3MjksIDB4YjQxMmYxMjksIDB4MjFlZDYxMjMsIDB4M2YwNTU1M2UsIDB4MTI5ZTY5YzgsCi0JMHgzMWJiNzc4YywgMHg2NzcxOGJiZSwgMHhkNjBiNjc5NywgMHhlNjJiYmJkNywgMHgxNmI1MWM2MiwgMHhmN2Y0MDFmNSwKLQkweDYxZjY2NzgwLCAweGIyNzA5ZmRjLCAweGY4MTA3OGQ2LCAweGVmMzNlMWQ3LCAweGU2ZmNiODJmLCAweDc1ZWEzYTdhLAotCTB4MDBmODc3ZDQsIDB4OGMwMmY5ZjcsIDB4MjNlOTU0ZTIsIDB4MDFkY2VkY2QsIDB4MWY2Y2ZkNzMsIDB4NWY3Y2UyOWUsCi0JMHhmNzFjNTg5YywgMHgwY2I4YjVjNywgMHg0YWM5YjNlMywgMHg1NGJmOWY1NywgMHg4NzFhZmU4NCwgMHg1YTY0ZWMxZiwKLQkweDc5NzhkNmZmLCAweDdlMjI5NWZiLCAweGY0ZjhlNmJmLCAweDg5MTc1OTgxLCAweDkzOWVkNTQ3LCAweGNlYjBkNDU4LAotCTB4MmFiZDJhZDQsIDB4MzllZDYxZjIsIDB4NmE3ZjllODUsIDB4ZDU4N2VhYmQsIDB4ZjM1N2EwZDYsIDB4OTI5YTcwZTUsCi0JMHhjMjI4ZjVjMywgMHg2MTM4YzEyNywgMHhlMzgwOWYwMywgMHhmOWNhMzVlYSwgMHg3YzNmMGIwOCwgMHg5OWIyMzg2YSwKLQkweDkxOGZiZjQ5LCAweGUwYzlmOWMzLCAweGZiZmRkNGY4LCAweGUyM2ZmNWZhLCAweDYxZmZiNGJmLCAweDkwOWZmYWZkLAotCTB4MTc5YWZmYWMsIDB4ODExNWQ5OWUsIDB4ODdmMmEyZjUsIDB4MzMwMGY2ZGYsIDB4ZDY5NTc3YjMsIDB4YmRkMDAwZGMsCi0JMHgwN2IzNWI3YSwgMHgxMjk0ZjJlNSwgMHhkZjVkMjBmMSwgMHhhMjczY2E4ZCwgMHg1MmExZjg0OSwgMHhhODJlZjlkMSwKLQkweDNmYzRhNTQ5LCAweDlmYTc0N2M0LCAweGU4MGRlNmZlLCAweGNkYjQ3ZmM3LCAweDdlZmYyNWVlLCAweDAwZWUyM2JiLAotCTB4YjZkOTVjYTYsIDB4NzZjN2NiODIsIDB4N2ViYzViYzcsIDB4OWZjOGZiY2YsIDB4N2Q2NmVkYjUsIDB4YjdlNGY5NTEsCi0JMHg3ZWI0ZmQ3MywgMHgxYmZmODQ0NSwgMHhlNTYxZmYyNywgMHg4ZDljN2YxMywgMHhlYjJkNThmNiwgMHhmZDY3YmQyNSwKLQkweDk3M2ZjNzBlLCAweDYyYzJmNjQ1LCAweDdiZmZhMzM1LCAweDU2YjIxZjdkLCAweGVkYjZhNWUwLCAweDNlZTNlZjliLAotCTB4ZTdkYjZkNDQsIDB4ZTlhMTcyNGUsIDB4ZmFkMWJmMjQsIDB4MDdmMDg1NWQsIDB4ZDlkYzU1NmUsIDB4YzQ5YmFmMTQsCi0JMHhlOWJmMjEyNiwgMHhlZTUxNjE3OCwgMHgzYzJmYzgwZiwgMHg5Y2YxODI1NiwgMHhmNjVlMjdhZSwgMHg3YzhkYTM0OCwKLQkweGQ5ZGZmNWNhLCAweGZkZWY5MmQ4LCAweGFlNWE5ZmQ4LCAweDFhM2Y0MWJhLCAweGNlZGQ2ZWVkLCAweDNmMGJiN2YzLAotCTB4YWIyZjBmNjYsIDB4ZWUwZjcxZWQsIDB4YjY2ZjU0MWYsIDB4ZjU1Y2JlZDMsIDB4ZmZiZjViMzMsIDB4OGU1N2M2MDgsCi0JMHg0MDU3MDIzYiwgMHhiY2NmNTVmZiwgMHg1MDM1ZmFmNCwgMHg5ZWNlN2FhZiwgMHg0MzRmOTczZCwgMHhmNDEzNzI5MywKLQkweGQ2ZmY4NWE5LCAweGEzZDA0ZjhlLCAweGE5MmY0N2YyLCAweGNmOGQwZmI4LCAweGEwOTU5ZWJmLCAweGZiNzNkNTRiLAotCTB4M2ZhNjM2NTUsIDB4ZjZjNDY2M2UsIDB4MTI1YTlkYWIsIDB4OWFkZWM0ZmEsIDB4ZmM4NmZlOGQsIDB4ZTkxNTc5YzIsCi0JMHg4OTNlZWVmZiwgMHg4MjRjMmMwZCwgMHg5MTJmY2RjZiwgMHgyMjc4OGNkZCwgMHhmNTdhMGE3YSwgMHhiZWQyY2ZkMSwKLQkweDdhNDJlODE2LCAweDZiMmY0MmQxLCAweGZlNDI2OWJiLCAweGE3OGM1ZmIxLCAweGZiM2Y3ZjAzLCAweGY5NzdkYzYzLAotCTB4Nzg4MDIzOGQsIDB4MmVmNjc4YTgsIDB4YTRlN2NlMGYsIDB4ZmNmOWM3NTIsIDB4Y2M1Y2U2YjEsIDB4NDdiMGE4YjMsCi0JMHhmMjU0YmQ3MiwgMHg3ZjhmMTVlNywgMHhmOTZmZjg4NSwgMHg1MmU0YWZkMSwgMHhmMzA1ODMzYywgMHg0NDNiNjQ2YywKLQkweGNiOWU3MGYyLCAweGU2OTliZDFlLCAweGM0YzJjZTU5LCAweGM5OGYxNTg3LCAweGExZjBmZjk0LCAweDk3M2NlNmMyLAotCTB4MTZkZTRlNDQsIDB4OGI3MjcyNzIsIDB4NGU4NTkyODMsIDB4ZmI4MjQyZTIsIDB4ZDFjYWFmMTAsIDB4NWJjZjE0NmQsCi0JMHhhZjkyZjE0NSwgMHg2YzQ3ZmJlOCwgMHg3NDNmZDUzNSwgMHgyYmI1N2E3MiwgMHg0YjBjMWZiYSwgMHg5ZjdmOTE4OSwKLQkweGU5MDNhN2I4LCAweDcwNDg3YTc0LCAweDZiODFjNjIwLCAweGY4MTExMjk5LCAweGJmNDAyZTkwLCAweDAzNTlkMWYyLAotCTB4NWY5ODlkMzksIDB4ODFkZjE1MjksIDB4Y2Y4MTlmZmUsIDB4M2Q4NzdkYjEsIDB4N2QzMTJhZTgsIDB4MjYxNDJlYzcsCi0JMHhjNjIzNWZjNiwgMHhkMGQzYjgwNywgMHgwYjk5M2RiZSwgMHhmOTkyNjBmNiwgMHgzZDI1ZDg2NSwgMHgwY2MxZDQ2ZSwKLQkweDc3OTA2NjdjLCAweGRjNGZmZjJlLCAweDk3NWRlNWNiLCAweDM5YmNlOGZmLCAweGQ3ODNmZWY4LCAweDc3ZTExY2I4LAotCTB4NWMwMGJmNjgsIDB4N2VmNDgxZjEsIDB4ZTkxMjRkZmYsIDB4Mjc4YjA3MDcsIDB4ZWMyN2YzOTMsIDB4ZWZjZGNlNDIsCi0JMHhmMDAyZmNhZCwgMHhmNzFlYjgyYiwgMHg5MzhlMGRmMSwgMHhmYjIwNzQ0NSwgMHg3YzIzN2NiNiwgMHgzOGFiZDQ2ZiwKLQkweGJmN2ZhN2FlLCAweDE3MmYxY2JhLCAweDhhZjdlMGZhLCAweGZhMTAwZmM4LCAweGY1Y2EzZDgwLCAweDI0M2Y2YTQwLAotCTB4N2I3NWVkYzIsIDB4YTA4ZmZiZjQsIDB4NDZiYzgyZmMsIDB4ZjZiZjI4ZmMsIDB4YmRmZmNlMTAsIDB4ZmY1ZjA3MWQsCi0JMHg3YmNkYzgzMiwgMHhjZDZlNWQzMSwgMHhiNzJhZDU3YSwgMHg2NmFmM2IxNSwgMHgzZGY2ZTRjOSwgMHhjYTkyYzAyZCwKLQkweDJhNGYzYzJkLCAweGYxMjc1YWI3LCAweGFmNWJkZmYzLCAweGVkNTQ3OGVhLCAweGViYWFiZDY2LCAweGI0Zjg1NGM5LAotCTB4OGFjZGM5ZWEsIDB4ZDU2YWYwOWYsIDB4MWFmN2YwOTMsIDB4OGZjZmVkMmIsIDB4ZmNlYTFmM2EsIDB4OWE4M2Y5NTcsCi0JMHhmYThmYThhMSwgMHhjM2U3NTRmOCwgMHhmOWQ1M2UzZSwgMHhkMTNjNWZiMCwgMHhmYmViNDc4NCwgMHgxOGRjNjA1ZiwKLQkweGZiYjQyNWY4LCAweDgxZjNiM2Q3LCAweGY4N2JkNWFlLCAweDc3N2MyY2JlLCAweGFmODBlYjA4LCAweDVhZDM3NzIwLAotCTB4MWI2N2U1MGYsIDB4M2Q0YjUxZWIsIDB4YjQxZjY5NjYsIDB4ZjY5NjQzZDQsIDB4Y2ViZDRiNjEsIDB4ZTNjYTNlZDIsCi0JMHg1NTA3ZWQ2OSwgMHgzNzEzOWY5ZSwgMHg2M2FmYjdiNSwgMHhiMWM2MzcxMSwgMHhjNzE0Y2FmNywgMHhkNzk4MDFlZSwKLQkweDNiM2RmN2MzLCAweGMyOTFhMzBhLCAweDZmNWI1ZTQ0LCAweGY1MWViYThlLCAweGQ3Yjc4ZjU5LCAweGFmNjJmNjgzLAotCTB4N2FlZmM3OGIsIDB4NGM5ZWJkNDIsIDB4ZDZmNjlkODMsIDB4NzFmNDk5MWUsIDB4NDljZDk0NjcsIDB4MDU4MjRmZTYsCi0JMHg2NGViZjQ0ZCwgMHhiOGYzZGVhOSwgMHhkZGRhMGY3YywgMHg1OTJjZGUzMCwgMHg3MThiNTgyYiwgMHhmMjk5NTY5OCwKLQkweGRjMzY5NjY3LCAweDhjZmNjMWUyLCAweDM3YzUzZDllLCAweGNiZTc4NDJlLCAweDliN2NjODhlLCAweGYyNTQxMjMwLAotCTB4MjlkYzdlMGMsIDB4OWE2ODc5MTYsIDB4ZjdjN2ZiODQsIDB4ZWM5N2ZkMTMsIDB4ZDJkZDdlZTEsIDB4NzNmMzkzZmIsCi0JMHg1Y2FlZjhhNSwgMHhkZWEyYTM1YiwgMHg2ZGVjN2YwNCwgMHhkZTgzYmVlMywgMHg5NmEzYzU0ZiwgMHgxN2FlN2JlNywKLQkweGZkZmRjZjdjLCAweGVmY2MyN2NhLCAweGIwM2UyMmMzLCAweDcxZmJlNzRjLCAweGNmZjcxYzZjLCAweGFlNzdlNTE5LAotCTB4OTY3NzdhMTYsIDB4ODVjNmZhM2MsIDB4YzM5ZTg3NDAsIDB4MzliZTQzMzIsIDB4M2EyNjQ3YmIsIDB4ZjdjMWRkOWMsCi0JMHgzZWNlMjllZiwgMHg5N2I1ZjkwNSwgMHhhZjhlOWRmNCwgMHgxMThmOTQyZSwgMHhkNzUwZjVhOSwgMHhmZDJmYmZmMywKLQkweGRlYTkzNDFhLCAweGVmOTJkYmY1LCAweGViYjVkOTQyLCAweGIxMTdmMGY4LCAweDA1MWJjMmZlLCAweGRiZmQ2NWJmLAotCTB4YTJlN2Q4Y2YsIDB4N2Q5ZThkN2QsIDB4ZWM4N2RhNmUsIDB4ODJmM2ZiZDksIDB4Yjc3ZDYxYWYsIDB4ZjY3MDgwMjMsCi0JMHgwOTczZmJlYywgMHgzYWNmNTFmMiwgMHhiMWVhMDU0NywgMHgxZmRjMjE5ZSwgMHhlN2ZiZGM2ZCwgMHgzZjVhNGU5MiwKLQkweDkzN2U3ODliLCAweDY3YzNmYjlkLCAweDRkZjVmY2Y3LCAweDk4NGIxYjI5LCAweGZiMDdkYTE1LCAweGE4N2Y2OWQyLAotCTB4OGEyZWM3ZjYsIDB4ZmRlY2Y1YWIsIDB4Y2VkMWE5NzMsIDB4NTlmM2FjZmYsIDB4N2IxYmY2MjksIDB4NGVlMTZjZGMsCi0JMHhlZjkzMmY4NCwgMHgzOGJlZDRkMywgMHhlNjAzNmI2NSwgMHg1N2VkYjQ2MywgMHgxOWZiYzA5NywgMHg4MjVmMzkzZiwKLQkweDI3NjdiMWZhLCAweGVkYmE3YmI3LCAweDdlZTM4ZjlkLCAweDJmZWQ3N2RhLCAweGJkMDNiM2FlLCAweDA2Mzg1MWJhLAotCTB4M2Y1MjlhODEsIDB4OTJkMTFlOWUsIDB4YzUzY2U1ZTEsIDB4MWYxNzJmMGIsIDB4ZTBjN2ZmM2IsIDB4ZjU3ZGEyNDMsCi0JMHhhOGVlM2RlYSwgMHhmZjc5YzI1MywgMHhhMmRmY2RlNSwgMHgyMGU3ZDgzZSwgMHhmYmU3ZDRiZSwgMHhlYzgxYWM1ZSwKLQkweGZiY2Q0YjkxLCAweGJjZGQzZmU4LCAweGNjZTVmOGE1LCAweDdjMWZmN2JiLCAweGYyNjM3N2RlLCAweGU1ZmRkNWRiLAotCTB4ZWY5ZjNmYTAsIDB4Y2ZlYTliYmQsIDB4ZWYwNDAzYjgsIDB4NTdiYmYyNjUsIDB4ZmQxYzc5NTUsIDB4OWZmZTc0MWYsCi0JMHg4MTNiZWU5OCwgMHhjZjRiOWVlZSwgMHhmODNmZWM3YiwgMHhmZGQzNTNiYywgMHhlZTgyZWRjOCwgMHhhOTQ3Y2M1ZSwKLQkweDgyNzljOWZkLCAweGI5ZWE5M2VmLCAweGNlODdmZjFiLCAweGVmZDdiNzVmLCAweDMxNWEwNWIzLCAweGJkMWQzYjJmLAotCTB4ZTFlNzNjMDEsIDB4ZTE4MmRmOWUsIDB4Y2U0NmZiYzEsIDB4MjhkZGEyZjcsIDB4MmI0YmZkOGIsIDB4ZmI5NTExN2MsCi0JMHhmM2M0YjI3ZCwgMHgxZTEwZDlkNiwgMHg0ZmMyNjNjZiwgMHhkNzEwZjM0MiwgMHgyNzJiNDU0ZiwgMHhkNmQxNTRiYiwKLQkweDk0Y2NkZDkzLCAweGYwMTA0NzQwLCAweDc3NTVkZjcyLCAweDg3ZDcyODA2LCAweGM2MTYzZjhkLCAweDAxNjllMGZhLAotCTB4ZmM1YjU3OGEsIDB4MDU4OTI2YzUsIDB4OTU1N2IwMjUsIDB4MTg3ZjNlYWIsIDB4NDhmYjE2ZmQsIDB4NDI1MWRjNWIsCi0JMHhkZTU4NWJlNSwgMHg3NjkwZTIyMywgMHg2N2YyNmFhZiwgMHhiYWU2ZDFiNCwgMHgzYmFlNmZjYiwgMHhjNjRlN2Y0NCwKLQkweDU4ZmE3N2UxLCAweGYyZDFlMzE0LCAweDk4YmMwNzk1LCAweDUzOGYyNmNmLCAweGJiMmVhNjE4LCAweGZkMDQ2YjU4LAotCTB4ZmNjZjg3MDYsIDB4NzNmNDIyZmQsIDB4YjQ1YmYxMGQsIDB4YjA2MGUzZGIsIDB4YWQ4ZWZiZmQsIDB4ZjMzODNmMTQsCi0JMHg2MDM3NWJmNCwgMHhjYTJmNTViZiwgMHhlOTc4MDljYywgMHg3MTY2ZTFkZSwgMHhhYTI1MWJlNCwgMHhkOTUyM2ZhMiwKLQkweGJlMjkwNzI2LCAweDE3NGJjNGEyLCAweDc1MGJmNjE4LCAweDg3ZWFiMTdiLCAweDcyYWI4MjZlLCAweDE3M2EyM2E3LAotCTB4ZjVkY2FmYmUsIDB4Yjc1YTEyODcsIDB4M2Q5MmY1ZDcsIDB4MGE1YTc5MWIsIDB4M2JlMWEzNmMsIDB4YjAzZjcwNGIsCi0JMHhiZTdlNDk1MiwgMHhlNzk1MTFlNCwgMHg0ZWVkNzUxYiwgMHhiYzdlODg1ZiwgMHg2YmU3OWRiNCwgMHhiMTZlYzY1NiwKLQkweDI4NzkwYzNiLCAweGRlYmI1NDFiLCAweGYyMjhmODhlLCAweDJjZjk0NDk0LCAweDRmMzE5ZjA4LCAweGJiNTdiNzUwLAotCTB4N2MzODkyOWUsIDB4ZTYyOGY2ZWQsIDB4N2Y2ZTU2N2QsIDB4MTFlMzFiYWUsIDB4MDExY2M3OTUsIDB4Yjc2YjFiNzQsCi0JMHhlZmYxNGZiZiwgMHhjNjdjM2YxOSwgMHg5NzdlNDlkMywgMHhmYjQzZjI2YywgMHg2NWRiN2ZmOSwgMHhiNmNhZWJhMiwKLQkweGExNWJiMjFhLCAweDE5NWRmNDRlLCAweDI3ZDZmZTEzLCAweDdlYWE0ZmY0LCAweDFlMTc3N2I4LCAweGQxZmFhODk0LAotCTB4Nzc4YzFlOTMsIDB4ZTZkOGVlOWMsIDB4ZmI3MDNmMjEsIDB4ZmQzMWUzYzUsIDB4YmRkOGJkZmMsIDB4YzJmYmRmYzIsCi0JMHg1NGUzZTQ0OSwgMHhmYzY5ZGVmZSwgMHgzZjUxZDgwNywgMHhmMzdlMmQ1NSwgMHhjNzY0MDFmNiwgMHhjOWE1OWMwMiwKLQkweGZlNzRjN2Y2LCAweGMzZTY3YWE5LCAweGQ5NWUzMWM3LCAweGM3YmRmM2I1LCAweGJmZWFlZTExLCAweGI0NzFlOWZkLAotCTB4OTczZWQ5NDMsIDB4NmEyZGY3MTcsIDB4YzUzNWZlOWYsIDB4ZGVlZmY0NzcsIDB4YTI1Yzc5NTQsIDB4MjkyN2E5ZmIsCi0JMHhmZTBkZDYzZSwgMHhiZGQ2ZjYzNiwgMHhmYTAxNjRmNywgMHhmZGNmZGQyMywgMHhlN2ZkMTcyNSwgMHhkMTY3N2IzNSwKLQkweGNmMzU4ZmY5LCAweDkyYzgxOGNmLCAweDIyNWViMWM4LCAweDIzMmY0NmZmLCAweGRiYTU2NzNlLCAweDY0ODNiNmMxLAotCTB4YmEwMTlmMmYsIDB4ZTdkMmJmYTMsIDB4Nzg2YWM3YzcsIDB4ZmMyZmM0N2MsIDB4ZTNjOTFkZjcsIDB4ZjVmY2ZkYTEsCi0JMHg1ZTM3MDViNiwgMHg2ZGI4Zjk4YiwgMHg4M2FhMDBmNiwgMHhhZmVkZmE0YiwgMHg1ZWM3M2QwMSwgMHg4ODc3MWQwNiwKLQkweDBiZWM0Y2Y4LCAweGNmZGJmNTE3LCAweDVlODAzZmUwLCAweGZjNzQyZGU3LCAweGY3ZDk2ZGIwLCAweDZkNzdjMTFlLAotCTB4ZWRmYTUyMDMsIDB4OWZjMGNiZjEsIDB4YTIzZDZmMWUsIDB4OTQwZTlkMDYsIDB4YTAzZjlkYjcsIDB4NmZkMjA5NzgsCi0JMHhmYmI4NGMyZSwgMHgzMDBiMGY5OSwgMHhkZWNhN2Q1ZSwgMHhiMWU1M2I3YiwgMHhkMTc4NzVlZiwgMHhmYmRjYWQ0ZiwKLQkweGY3NTNjOTA2LCAweDllMjk0N2YzLCAweGIzZGM0NGM5LCAweGYxZmRmNTliLCAweGExYzg5NGY4LCAweGNkYzI3ZGFiLAotCTB4MDc0MTdkZmQsIDB4M2RmODA3OGMsIDB4ZmRmODVjZjQsIDB4NzhmNWFmOWMsIDB4NDAzOGFhNDAsIDB4ZTRmM2MxZDAsCi0JMHhjZDcwMzhmNCwgMHg3ZTE1YmYxMywgMHhkMjZlODI3NSwgMHg1YmQ3YTQ2NCwgMHhlYjVmOGQxNywgMHgxZTIyZjA3OCwKLQkweDVjZTMxOTI2LCAweDdkMmVlM2M5LCAweGRkMGIyZTcxLCAweDVmNTZmOGY0LCAweDgzZWEwYjFjLCAweDk1MTE5ZTMxLAotCTB4MzcxNjQ4ZGUsIDB4ZTNjY2RlZWQsIDB4NzM3NmRkNjMsIDB4NGU4MjRkZmUsIDB4ZDUzNWVlM2MsIDB4ZThkMzhlNjEsCi0JMHgyZjI1NGRmMywgMHg2YTVlZGNiYSwgMHg0ZjE0OWYxZSwgMHhiYjA4ZDBhMywgMHhiYWJlM2ZiYSwgMHhkZmFlNGUzZSwKLQkweGRlNWM3NzZmLCAweGZkY2E3NTdlLCAweDc1OTJhNTk0LCAweGM3MzZlNTNmLCAweGJjM2Y2OGQ1LCAweDU3Y2EzMmE1LAotCTB4MGM3OWU1ZTgsIDB4YzhiOWJlZmEsIDB4NWE3YWVjMTcsIDB4ZmFjOTc4YTYsIDB4ZWZkMjQxZDgsIDB4ZWZhMWZkNTYsCi0JMHhhZGUxNTliNywgMHg2Y2FlZjAxMywgMHhkNzQ3ZWJlNywgMHg4MzU0Nzc0ZSwgMHhlYzBlYmE3ZSwgMHhiOTVlYmUyNiwKLQkweGZkMTUyZGUzLCAweDdmZGI0M2NmLCAweDhiM2I3MmE0LCAweDFmYWUxMWNiLCAweGJhN2NjMzUxLCAweGMyNWZkZDllLAotCTB4ZGYzYzdhZTMsIDB4MzdjZTNhZDksIDB4YTkzZWRjMWMsIDB4OWM3YzkzZGQsIDB4OWJlZjFkZGEsIDB4YzQ4YWE5YzYsCi0JMHg3OWZmOWU1NCwgMHgyYjRlZjFmMSwgMHhiZmIwNWJjMSwgMHgzYTc2MWRkMywgMHgyNjNhNzNjZiwgMHhiZmI2NDljZiwKLQkweDE3NjFkOGJiLCAweDJmMmI0MWY2LCAweGJjYTUxZDYxLCAweGJjZmNhM2VlLCAweGQzNTdjNGM1LCAweGNkN2EwZjI4LAotCTB4YzViZjM5ZDEsIDB4NDA2YjhjNzMsIDB4NmM0ZWQxYWMsIDB4ZGE3Y2UwNmIsIDB4Zjk4MjdmZjYsIDB4YTNiNmVmNDgsCi0JMHhmZDcxOTY1ZiwgMHgzNWY4ODVkYSwgMHhhZmE1OGJkOCwgMHg4MzcwY2RkNSwgMHg1ZGZkMjg3ZSwgMHhhYmIyMjI2OCwKLQkweDNhNGNlZjU1LCAweDBmYzEzMzY2LCAweDc1YzQwY2UzLCAweGMxZmEwOWExLCAweDlmY2M3ZGZjLCAweGNmNjQ3ODQyLAotCTB4OGYwODM5ZWMsIDB4NWQ3OWI1ZWMsIDB4ZWQ1MmYyNDksIDB4Y2FmMjg4NWEsIDB4NWVlZDdlZjUsIDB4YzMzOGRlNzMsCi0JMHg0ZmQwODZmMywgMHg1ZTdhOTVmNywgMHhmMTAzMjg1MSwgMHhjZGM3NjFmNCwgMHgzMjg2NzRiYywgMHg3NzU5MTdiYywKLQkweGQ5YmQwOTRlLCAweGYxNjAxZjU1LCAweDA4MWNmYzExLCAweDdlNDU2YmQ2LCAweDgzOWVjNTcwLCAweDU2MGY1MWIzLAotCTB4MmZlNjI0YzQsIDB4YWRhNDczYzQsIDB4NzYzZjM3MjQsIDB4YTU3M2YyNjQsIDB4NTE1ZGIzNTEsIDB4ZDQ1N2U3YjksCi0JMHhiNzhkYjJiZSwgMHg2YTMxNjJhZiwgMHg4YzQ1ZTc4ZiwgMHg2YzRkNWJmNiwgMHhlMTFlYzU4MiwgMHhmMjIzZGRmYywKLQkweDk1Y2ZhYTQyLCAweGZmMjFiOGIyLCAweDlmODI2N2ViLCAweDI2YmRlYWJhLCAweGYwOGQ1ZjNkLCAweGQ2MWFmYjQxLAotCTB4YzRkNGUzNDEsIDB4ZDFjNjk4MDYsIDB4OWI5Y2Q1ZGIsIDB4NDZhZmVhNmEsIDB4YWI3ZTIwZTksIDB4ZjQyZmY3MzksCi0JMHhlYWJlNGZiYywgMHhkNDg3ODQ3ZCwgMHhlMDliZTdmZCwgMHg4NTNmZjQ0ZSwgMHhlYjI0MjdjNSwgMHhiNzNkMWE3ZiwKLQkweGU2ZmE4N2U2LCAweGRlNjM3OGYzLCAweDg4MmNiZDAyLCAweGU4OGNmZWEyLCAweGQzY2E3M2U3LCAweGJmODA4ZGEyLAotCTB4M2ZmODVhMjMsIDB4ZGNmODFmNTAsIDB4NjI1ZjBiMWIsIDB4MzI2Y2RlNzgsIDB4NzA5ZjU5ZTUsIDB4MGYwNDdjODgsCi0JMHgwNDdjZjBmMywgMHg3NTgzNjIyZCwgMHhjYjZkMTFmOCwgMHhmMjhjNjk4NiwgMHg4YzNiNGUwZCwgMHg1ZTJjMDZmOSwKLQkweDZmNDQ3YTgyLCAweDI1YmRlZmQ3LCAweDdlMzA2MTFmLCAweDE2NTBhYTAyLCAweGRlNjMxNjcwLCAweDhkMDdhYzNmLAotCTB4YjA1YjNjZjMsIDB4OWY5YmE4ZmUsIDB4YmQ2MDJjOTMsIDB4NjBmZjMxZmIsIDB4MGEwM2YwYWIsIDB4ZGM1OGNlMzEsCi0JMHhhN2U0YmNmZiwgMHgzZDk5MjczZCwgMHhkMGQ1NmNhMywgMHg5Y2IzNjMwMCwgMHhhMDJhNjcyMywgMHgyOTZmYjMyZiwKLQkweDBiZGYyZTdiLCAweDNkOWIxOTY2LCAweGIzZDBmMzEzLCAweDk3MWIyYzlmLCAweDRiNThmNTA3LCAweGNiZmY3ZjI3LAotCTB4NTAwNTcxYjIsIDB4ZTJlYWU2M2YsIDB4Y2EyNGFiZWYsIDB4YmU1YjU3ZDMsIDB4N2RhMjMzM2IsIDB4MTM3ZDNkMDYsCi0JMHhhNGQ0YTY2MCwgMHg0MDljYjNhNywgMHhkZmExMzNjZiwgMHgxZjk5NzE3ZCwgMHg1NTdhMWVmMywgMHhjMjE2Njc4ZSwKLQkweDczMjY0Mzc2LCAweDdlZDYwZGZjLCAweDc1ZmExY2Y3LCAweDBkOWQ2ZDQzLCAweGI3YmU1ZmE4LCAweDc0OTljZmY3LAotCTB4MjNmMzBmZGUsIDB4NmIxZTljZjAsIDB4ZTExZDIyZjIsIDB4MTcwYmU0ZDEsIDB4ZTZiM2FmYzksIDB4NzRmY2U5OTksCi0JMHhlYzVjM2I5NSwgMHhkZjM2M2EwNCwgMHgyM2NlOTIzOSwgMHhkZTMxNTIzZSwgMHgyNmUzN2U4OSwgMHg3MGYzYjc5MSwKLQkweDNmMjFiZTVmLCAweDkzYjU3ODk3LCAweDQ0ZjlmN2VmLCAweDBmZDlkNzVlLCAweDJlYjIzMzBhLCAweDdkNmExZmEyLAotCTB4MDYyODI3OGIsIDB4NWU5NDdhYjgsIDB4ZjllZmI3ZGEsIDB4MzFkYmFkZjgsIDB4OTllYjEzMGYsIDB4YzQ5OWQ2NDksCi0JMHg3YmU5NGJmNywgMHhmMzA1M2U2YiwgMHgyZDlmMTM2NiwgMHg3ODg2N2MxNSwgMHhmYWYyMWE3MywgMHg5NTExY2I5NywKLQkweGM1NWJkYTA3LCAweDhiZDMzN2ZhLCAweGQ1MjI5N2YzLCAweDlmNTE4NWYyLCAweGI0Yzc0ZjFjLCAweGQzYzQ1Y2YwLAotCTB4Y2YyOTljZTcsIDB4N2E0NWNlNzUsIDB4NjY3NWNmNWEsIDB4ZTAzNzQzMzksIDB4ZTdlNTc5NzcsIDB4ZmFlZTUwMGEsCi0JMHhhZDRhNjljZSwgMHhlYjNmNDg3OSwgMHhmNGE2NGZiOSwgMHgxOWY5OTJkYSwgMHhjZmI5YzQ1YiwgMHg3MTBmNzA1NCwKLQkweDcxYzM2Zjg1LCAweGRmZTI3ZThhLCAweDdmZTQxODc5LCAweDgwMzU1MmVjLCAweGQ3NjNhNGE5LCAweGE0MjgwYzRlLAotCTB4NDVkZTc4OWYsIDB4M2MyYmUwYWQsIDB4MWVlNzRlYWUsIDB4Y2ZiNDY2ZWUsIDB4ODI5MGUzZGIsIDB4ZGNmN2Q3ZTgsCi0JMHg2MGJiMjVlNSwgMHhlNGI5ZDJmMCwgMHgxN2E0Zjc1ZiwgMHhhOTNmMzBjNiwgMHhkYTdlNmJlNywgMHg0MjdiMDQwZiwKLQkweGIyMWYzOTQyLCAweGYyZWUyMzI3LCAweDY0N2U5YzkwLCAweGNjOGZkMzkxLCAweGI3MWU2OTcyLCAweGJkYmY4MmU3LAotCTB4OGFmM2ZhOTMsIDB4Y2ZkMGMwZmUsIDB4ZWU5ZjljNGQsIDB4ZGY3YWY5OTEsIDB4MzgyN2VmNTMsIDB4N2VjOGIwODYsCi0JMHg3NzJmMWZiNCwgMHg4NTNiYWZiYywgMHgwM2U4MjgxZCwgMHgxMTg2ZmZmOCwgMHg2NmM3NDBmZiwgMHgzYTQzYWZhYywKLQkweGM3NGE0YzhlLCAweGI0NzQ2NGU2LCAweGU0OWRjNzllLCAweGZkODdkZjBjLCAweDQ0M2YyYzljLCAweGU3YWQ3MmU3LAotCTB4YzkxMjk5NzAsIDB4ZTk1OTNjNDMsIDB4M2ViNGFiNWIsIDB4YjlkMjViOGMsIDB4M2IyN2RlN2IsIDB4ZDhkZmE3NDYsCi0JMHg0ZTg4ZTNiNSwgMHg4NDNlN2EwNiwgMHhmM2RkOGM3MCwgMHhkNmUxMGRiZSwgMHgyOTFkZjhlOSwgMHhjMTRjMWRiOSwKLQkweDhmZmJhYmMwLCAweGQzYjBiYjk3LCAweGJlZDI0ZTE2LCAweGY1Mjk2ZDY0LCAweDgyZDlmODA3LCAweGYzZjAxOGUzLAotCTB4OWZiZmQ2MTQsIDB4ZTE0ZjNmMWEsIDB4M2YwMzJmYmMsIDB4N2UwZTVlY2YsIDB4NGFhZjNmNzQsIDB4ZWUxNTcxYzgsCi0JMHhmZjlkMDE1YiwgMHg1YjlmOWZlOCwgMHg5NmNlZTMwNCwgMHgxNWQzZTIzNSwgMHhlZjhhNjRkYiwgMHg3OWI5ZmI0MiwKLQkweDVmYjkwOWI5LCAweDNmNmVhNTMxLCAweGYxNWM1NzllLCAweGI0ZmM0NDk4LCAweDdmYmY5YzU0LCAweGI3YmY5YzRmLAotCTB4MmY5NjAzZTYsIDB4YmQ5ZTkwOGMsIDB4OTQ2MDVlNzQsIDB4NzZkNTQ2ZjQsIDB4MDljM2YzZjMsIDB4M2NhMDJhZmUsCi0JMHg4OWVmNzE1ZiwgMHgxNTgwNWY3ZSwgMHgyMTM1NjdmZiwgMHgzNjVkNGJkNywgMHhmZDAyYmRlMywgMHg2NmNlYjdlNCwKLQkweDliY2YyYmNhLCAweGY5MGZkN2QxLCAweGZmOWIzZWZkLCAweGZkZDM4YTBkLCAweDZlMzBjZWNjLCAweDI3YjI1NDE0LAotCTB4MTMxZjExYzYsIDB4NmZkODk5YTUsIDB4YmQyZjkwOTksIDB4Y2Q2YmExYmYsIDB4YzQ2MTVlNzYsIDB4YjhiMDNlN2MsCi0JMHhmMDNlN2NjNSwgMHhmOWYzNTY4YSwgMHhjYzliMTFjMCwgMHg4Y2FmMDNlNywgMHg4ZTA3Y2Y5YSwgMHg1NGRlM2VkYSwKLQkweGM2YmIxMzFmLCAweGZiNmM3ZWQ0LCAweDVjN2Q1Mzc0LCAweGY2YTZmM2ZjLCAweDM3Y2YwZTEzLCAweGY4ZWVhZmQ1LAotCTB4YTRmZGE5YjIsIDB4ZGU5YTc3NjMsIDB4MzRhY2U5NGYsIDB4NmE3YTlmYmQsIDB4NmQ3ZWE5YjUsIDB4ZGE5YWJmZWYsCi0JMHhmZDcxOTdjNywgMHhlNDdlYTA3NSwgMHhmYTllNjM1NCwgMHhjZGFhNTU4MSwgMHgwZDU3Y2Y4YiwgMHg4YzRiNzliNywKLQkweGZlODM3M2NmLCAweDgzNGIyYzEyLCAweGQyYTc2N2U4LCAweDU3OWMzM2IzLCAweGY3YWUzNTRlLCAweGQyNmVjYzY1LAotCTB4ZTY5YzMzM2YsIDB4ZTIyNWM3YmEsIDB4MmZjMDA1MTAsIDB4MmUwMWZjNDAsIDB4YmM4MTVjYjMsIDB4MWU0MGJhZTUsCi0JMHhiNWE2ZWJmMiwgMHg4M2M3ODcwYywgMHg0MGNiMGM1NiwgMHhjYjM5MDI3OSwgMHg5YzllNWQ3NSwgMHg5M2JiNjNlNSwKLQkweGIxZWJlMzJiLCAweDAwM2VlYzllLCAweDJlZjkxMGI1LCAweGIyOWJmOTQyLCAweGUzMmZmNzM4LCAweGZlMzIxNzNkLAotCTB4YzJhNTQ0M2YsIDB4NWU0YTExMjIsIDB4N2M4NjAxNjcsIDB4ZjVmNzVkNmYsIDB4OGY4YWRlZjUsIDB4MjdjNzhiODAsCi0JMHgwNGYwZmUxZCwgMHhkYzNmMmNjNSwgMHg0YzU1ZjBkZiwgMHg5MmY4MGM1MCwgMHg3NmE2NzViZCwgMHg0OTljZmYwZSwKLQkweGVmODlmN2M2LCAweGRmY2M5MzQyLCAweGE1ZDUzNDJkLCAweDdmMjk3M2U1LCAweDc2NWMxNTI4LCAweDRmNTE5MmRmLAotCTB4ZTdiMzdlODAsIDB4N2Y1MmE2MmQsIDB4OTZkMGJjZGUsIDB4MDZmMDVmMzQsIDB4YzNmNDY3ZDcsIDB4YzlmZjNjYTMsCi0JMHg4MGRkZGY2MCwgMHhmZDkzMzk3NCwgMHhmNzk4NDNlYSwgMHgyZjUxNzJiNiwgMHgwZTc5ZTNmOSwgMHhkNDQ4N2ViMywKLQkweDNhMmYzZGY5LCAweGIzZDY4ZjNjLCAweGViZGViOGQxLCAweDQxOTZkYWU3LCAweDlhNmRkNjIxLCAweGYzZTNiMmVmLAotCTB4NjFhZjMxNzMsIDB4ZmQzZjBhNzAsIDB4Yzc5ZjMxMDEsIDB4OTZhMzIzZWIsIDB4YTczMDYzMjIsIDB4NDE3OTNjZTksCi0JMHhkYTM2NzZiYywgMHg5ZTQ1NDM2MSwgMHhlNGI2NDNmNiwgMHgyZTU1NTNmOSwgMHg0NDBjYWViZSwgMHg4MmY2OGQ0NSwKLQkweGMxM2VkMmE2LCAweDc5ZGZmMjk5LCAweDU1YWJmNTMwLCAweGZmMjE1NzBlLCAweGEzYjYzOWRlLCAweDBlYTM5Zjk0LAotCTB4M2Y3ZTc4ZjgsIDB4NzdkNzViODcsIDB4MjFlODVhMDUsIDB4NjAwNTVmZDQsIDB4ZmIwYmY5YjYsIDB4NTE3MDMzYzMsCi0JMHhiYzIxNGU2OCwgMHgwNWIyY2E2ZiwgMHg0YWY3YWEzNCwgMHhlYmY4ZGU3NCwgMHhiZWQwMzMyMCwgMHhjMTMyNmZlOSwKLQkweDBhNjA3NGQ3LCAweDVhYTkxNWU1LCAweDI3NDY0NTk4LCAweDdlNDRjOWU2LCAweGYwZWZiZTgyLCAweGU0NGRmNjYxLAotCTB4ZDU1ZDM2YmYsIDB4OTE4OGRlNzcsIDB4M2E4NWFiM2YsIDB4MzcwZmRmYjAsIDB4YTZkYzY5ZGEsIDB4N2RlOTkyZTksCi0JMHhlYWJhZDY4MSwgMHhkZTUxYzAxMCwgMHg0YmYxNGU5NiwgMHhlNDBkZDM2NSwgMHgwZTNlYTk3ZiwgMHgxMmUzZDM0ZiwKLQkweDNjMTEyYzFiLCAweGUxZWVjZTNjLCAweDdjM2MwMGY4LCAweDI2NzBmMTA1LCAweDRkOTFmODU4LCAweGFmYmMzNDlmLAotCTB4YmNlOTUwYzksIDB4NzExNDkwZTgsIDB4ZmMzYTZkOGUsIDB4M2EyNjkxYzEsIDB4YzMzMDhkZTcsIDB4ZjZmYzZmMmQsCi0JMHgzZjk4NDNhYSwgMHg4MDdhN2NmMiwgMHgyZTNlYTRhNCwgMHg3NzllNmFlOCwgMHgxYmZjZjY3MywgMHgxYWVkMDRiZiwKLQkweDFlMTk5MzVmLCAweGMyNzdmMGY5LCAweDkxZjM0ZjFhLCAweDc4MjRkMWEzLCAweGYwMDZlOWQ3LCAweDk1N2U0MzZmLAotCTB4ZjlhNmNkMzcsIDB4MmY3YTBhMTYsIDB4M2FlMzdhMDcsIDB4ZTY4NWIzZTMsIDB4NmQ3M2ZkMTAsIDB4OWQ2YmU3MGMsCi0JMHgwN2ExMGVjNywgMHg4NTc5NzE5ZSwgMHhmOTczOTZmYywgMHhmNTFkMmRmMywgMHg3M2QyMDRjNCwgMHg3M2ZmZDg2ZCwKLQkweDczZjY5NGFlLCAweGRkODkyYjliLCAweDUxN2JhOTc1LCAweDFjNzYxN2FhLCAweGNhMGU1MmMyLCAweGQ0MjdlZTAxLAotCTB4Y2ZkYTM3MGQsIDB4ZTI3ZjFmYTAsIDB4NzJjZGY4MzIsIDB4YjA0YmQ3YzYsIDB4ZTFkOTRiZGYsIDB4NjVhMDRhYjUsCi0JMHhlZGE1ZTE3OCwgMHg5MGNmYjQzNCwgMHgwY2ZiNzUwZiwgMHhlNzE0NzllNiwgMHg5ZThiMGJmOSwgMHhhM2Y1ZTgzNywKLQkweDQ0OTllNmM5LCAweGVkOGViZmFmLCAweDllMzk3ZTRlLCAweGJkMDI3ZWQ0LCAweDhlNjQ3NjRlLCAweDY1ZmY1YzlhLAotCTB4ZDQ3YTcxYTQsIDB4Zjk0NjU1N2EsIDB4OTdmNjI5ODUsIDB4ZWRjOTY5NmMsIDB4ZGZlYjU0YzYsIDB4YTI5MGZjYTUsCi0JMHhjMDdlZTY4MSwgMHg4NDdmMjE2ZSwgMHhkZmI0YWI5NSwgMHhjZDgzZjY3NSwgMHgzY2M3MGVmNywgMHhmMjg4YWQyMSwKLQkweDkzZjU1MzgzLCAweDA0Yzk3NmJmLCAweDIyYmZjZjgxLCAweDlkZmM3NDFlLCAweGYwMTVlMGIzLCAweGViYTRkN2Y5LAotCTB4ZDNlMDM1NjQsIDB4NGIyN2MyNjYsIDB4ZjQ3YjBjYmIsIDB4MzJiYjlmZDMsIDB4MTZlYTE3OWYsIDB4ZTA3NTg3NzgsCi0JMHgxNjA3NWEyZCwgMHhmMThhNTliYywgMHg3ZjM3OTU5NywgMHhhN2MwZWI0NCwgMHgzOWExNjcxZSwgMHgwZmM3YTA4ZSwKLQkweDIxZGY5YzYwLCAweGZjMTdiYTllLCAweDNiN2RjNDRkLCAweGY4ZDk1ZTI5LCAweDE3YmEwOGZjLCAweGFlYmE2NmFmLAotCTB4NzQ5Y2VhNGYsIDB4MTE3MDcyZWUsIDB4MmVjY2U3ZDEsIDB4M2NlMTEwNDcsIDB4NjZlM2M1OTMsIDB4M2E0ZDc2NjcsCi0JMHhmNzk5ZjE4NCwgMHgxOTY3MGZlYSwgMHhkOWU2N2NlOSwgMHhlODc2YTVhMywgMHhhM2NlY2NlZiwgMHhmN2U5MGFhNSwKLQkweDlkZGVlOWE4LCAweDJhYmYwYjlhLCAweDNmNWU3ZjQ1LCAweDc3YzdkMGRmLCAweGQzZWJlNGNlLCAweDNmM2Y4Mjc1LAotCTB4NWUzMDFlMjksIDB4MGE1MWZiNGYsIDB4YmJlZDE4N2IsIDB4OWI1NGJjM2UsIDB4NDk5YzE1Y2YsIDB4ZjExNGIzN2YsCi0JMHgwZWI5NzgwMCwgMHg0M2QzYWVlOSwgMHgzMzJiODc4ZiwgMHhkYzYwNjYzYSwgMHhmYzBiZjdiNiwgMHgyZThkYTkzZSwKLQkweGUzNTJhNzFlLCAweGNkNzY5ODc1LCAweGUzNWI4NzljLCAweGM0NzVhNjU4LCAweDNiNTBlZjI4LCAweGQyYzcxMWQ2LAotCTB4YzQxYmQ5ZDMsIDB4NzY3NmE3ZWQsIDB4NWZiMWU3ZTcsIDB4N2VlZjI5ZWYsIDB4MDZmNTY3YWMsIDB4ZDBjNzg3M2UsCi0JMHgwNmFmZTc2NSwgMHhiYjdjMDNiZCwgMHg3MWZhZGU3MSwgMHhmN2U5NGZlOCwgMHhkOThhZjk2YiwgMHhlMGIxYzJjOCwKLQkweGUyNWU2MWJmLCAweDJkY2I4YTU4LCAweGU2MDdlZmMwLCAweDcxYzQxZWRhLCAweGYzNzMyNWE1LCAweDZjNWM4MTk2LAotCTB4ODc5NGE4ZjIsIDB4MWMwOGNjYTksIDB4ZjM3YzIzZjYsIDB4ZWNlZjgyMTQsIDB4MTdkZjk5NjEsIDB4ODViOWNmMzIsCi0JMHhmYzY3YmY5ZiwgMHhmZDliOTIxZSwgMHhhN2Q0YmViNCwgMHhjM2UzZTdlOSwgMHgyYWZlYjg4NSwgMHgxYTUxNmNhYywKLQkweDg1YTcwN2Q0LCAweGQ3MzJjMGVmLCAweDEwZmMzMWQ2LCAweGY2M2FlNzdjLCAweDYwOWMwMjliLCAweGQwYmZjMWU5LAotCTB4Y2FiYjNhYmQsIDB4M2Y3MWZiNDIsIDB4ZTRiNzc3YmEsIDB4YzdmYWMyZGYsIDB4N2U4NWViZmQsIDB4NDhlZmNiZDAsCi0JMHhlZjMxYzc3NSwgMHhlYmJlZmVhYywgMHhlYzdjNjE2NiwgMHhiYTNhYWUzYiwgMHg4MmZlMDVmNywgMHhlN2Y0MWY0ZSwKLQkweDMyY2FkZjBhLCAweDZhNjkxYzYxLCAweGExNmI5Y2YzLCAweGUzZjc4NzZlLCAweGNkNjlmYmYwLCAweDU3N2VkMDRkLAotCTB4YWYxZjM4NjYsIDB4NTM0YjcxYzIsIDB4YzEwZjBmOWEsIDB4YjViY2EzM2EsIDB4Y2QyOWI0ZmEsIDB4ZmU2NjMwMTEsCi0JMHhlM2NiY2QzNSwgMHgxMGI4NWFlZCwgMHhmNzU3ZDRlOSwgMHhhODZkZGQ0MiwgMHg4NTc1MmQzYiwgMHhkNTc5ZjVkNywKLQkweGU1MGJmYzFjLCAweGMzZGNhZTk1LCAweGQ5Y2EyZGVmLCAweDFiZGY4ZjMzLCAweGVlOGYzZWQ3LCAweDEzNGU2YjhkLAotCTB4OWE2MzQ0N2EsIDB4NTg1NjNjZjEsIDB4Zjg4YmRmMGUsIDB4MTk1ZTkyZWEsIDB4OGY0OGU1Y2UsIDB4MmY3OGE2N2IsCi0JMHg1OWMzOWVlMiwgMHgwNmUzYzUxZCwgMHg2MmVlYzFlMSwgMHhiYzc4Y2JiNCwgMHg1MmY1ODBiMywgMHg4YWViYzdhOSwKLQkweDYxY2E4MDU4LCAweDQ4ZTU0NDJjLCAweDU1ZTU0YWQ2LCAweDY4ZTU0NjJjLCAweDA5NjU0MWQ2LCAweGMwMzJhNWViLAotCTB4ZTM5NjMyYmMsIDB4NmNjYTgwNTksIDB4NTlkMWRkNWIsIDB4NjY3ZjRmYTgsIDB4N2MzYTdkMjcsIDB4ODMwM2FhZmIsCi0JMHg0NGRlOTExOCwgMHhjNzhkNjZiNywgMHg2NTZiZDZlOSwgMHhkY2JjMWFkOSwgMHgzZjUwZjgyOCwgMHgzNDhkNTU1NywKLQkweGRiNjJiZTAzLCAweGU4N2VjOGYzLCAweGRlZjYzMjEyLCAweGY3MDQ1YjI2LCAweGY5YTNkOTYzLCAweDljNWFiY2Y0LAotCTB4N2UzZWFlNDcsIDB4ZjdjZGVjODAsIDB4NjBmM2M5ODIsIDB4YmI4YmMwNWYsIDB4OTYzZWQzM2UsIDB4M2VkNjdmNTksCi0JMHg0MWJlMTFhYSwgMHgzOTQwNWY3ZSwgMHg0MTcwODk1OSwgMHhhMGVjZTZkZCwgMHg3NWY2OTc3MywgMHgzZWU5MDdiMSwKLQkweGI0ZWM2N2I4LCAweDE4NTU1YWJmLCAweGJkNDNiMzJhLCAweGEwNjE3NzZhLCAweDdhODcyMGMxLCAweDY2NTU3MDNlLAotCTB4OTZiYzc3MmMsIDB4ZjU4ODhmMzgsIDB4ZGY4MjVhNzEsIDB4Mjg2ZmI2NTcsIDB4NzdmYjdkYzAsIDB4ZjVhNzFmZjcsCi0JMHg4NWU5ODdmZSwgMHhiNjlhOWYzNCwgMHg0ZGQ4NmFhMywgMHhjYTJhN2VmYiwgMHg3ZDM5YmJjZCwgMHg5N2Q5M2FmNiwKLQkweDA2NDBhZWNkLCAweGZkZTk3NzllLCAweDRiNmZiZjM5LCAweDk0ZjdkZmM3LCAweGRmNzE5NzVlLCAweDI4M2Q3MGU0LAotCTB4NWVlOWIwNDIsIDB4Zjk1MWY3YTksIDB4OTUzZjdhOGIsIDB4YjJmN2FiM2YsIDB4NDcwMGY4MjAsIDB4MDRkYTlkZWMsCi0JMHgzMGNlNGY5YywgMHg3YmZiY2EyZiwgMHg0MzJiZDhkZSwgMHg3Y2JlNjIyNywgMHhlNjAxYmY5MSwgMHhjZWZkOThkNywKLQkweGRlZDAxM2ZkLCAweDc0MDFjODBjLCAweDc1ZWVlYzBiLCAweGYzYjQyNTEzLCAweGNmMjlmMzdjLCAweGJjNmQxZWU1LAotCTB4NGYwMDhmZjMsIDB4ZTY3MDEyYTMsIDB4NmIyZmI4YzAsIDB4YTAyYmI1M2IsIDB4MjRmY2ZlYmMsIDB4ZTVmZmNlMjcsCi0JMHgwZmNkMzZlYywgMHhkZGM2MWJmNSwgMHgyNDdkYzVlYywgMHgwMmUzNmZlOCwgMHhmYTJlY2ZlYSwgMHhmNmM0ZWYxYiwKLQkweDVhM2Y2MmY3LCAweGEyZmQ5ZmEyLCAweDY3N2JiZDdlLCAweDU0M2ZiZTM2LCAweGViZWUwOGNmLCAweGIxYjJkYTczLAotCTB4YmQxZjdmYmYsIDB4MTNmMTk1ZWMsIDB4YmE0NzdlZTksIDB4MTdjYWNhMmYsIDB4NjZjYjlmZDcsIDB4ZTZjYmIwNDEsCi0JMHg0MTYwMmI5ZSwgMHhkMzkzYzdhMCwgMHhmOTQyYWVlYiwgMHhkMWJmZDM1NywgMHhhMGZkMDRlYywgMHhhMjU1ZDYxNCwKLQkweGI3YTZmMGJlLCAweDFmNDEzYjM0LCAweDlkMDFiMDZjLCAweGE1OWY1NGJjLCAweGNjNzAwOTVkLCAweGIxODFmYWU0LAotCTB4YTQzMmU2OTYsIDB4YzYyYmIwM2IsIDB4YWU4ZmUxZTMsIDB4ZmE4MjM5OWIsIDB4N2VmZTFhZTMsIDB4ZDc5MTYwZTYsCi0JMHhmN2UzZWQwMCwgMHhlZDBiMzFiZCwgMHg5MThhNmFiMiwgMHg2NmU2YjYzMCwgMHhhNDc5Zjc0NiwgMHhjZTJhMzdiMiwKLQkweGMxYThiM2E1LCAweGJhNjFmYmFlLCAweDQyYTdlNDlmLCAweDRjM2VkMDg5LCAweGJkMGYzOWM1LCAweDVjZmVmY2JmLAotCTB4ZmQ4ODczYTYsIDB4ZmRlOGQzZmIsIDB4N2U3NGFiZTEsIDB4Njc5YzUyMGEsIDB4ZGYyMjczY2QsIDB4ODgxYzE1YzMsCi0JMHhkNzYzYmVlZCwgMHhiOGY2MGZlNywgMHg1N2Q1ZjExMywgMHhjYzNlMjg4ZiwgMHhmZmU3ZDA0MywgMHg0OWZmY2QyOCwKLQkweGVmMWVmMTM1LCAweGY3ZDgxY2Y1LCAweDdmZDEwNTllLCAweGVhMjY5MjNlLCAweGI3OTIyNzkxLCAweDJmYjRiMzRmLAotCTB4MzRjZmViZDIsIDB4MWZkNjljY2YsIDB4MTJiOGVmOWUsIDB4NTdiNDI3NzUsIDB4ZWFmYTNiY2UsIDB4OWIwNmRmMDgsCi0JMHg3ZDJjYmZhNSwgMHhmYzY5ZTdmYywgMHhiNDU5NDJhYSwgMHg1MDUyZjdkZiwgMHg3MjNiZDAzMSwgMHhhYmVmMTlhOCwKLQkweDc4ZWY0NTRkLCAweDliOWIyZmRhLCAweGFlMjNmYmUwLCAweDVmYWQxOTUwLCAweGJmNWEzMzM3LCAweDA2MDJlZTUwLAotCTB4ZTM0ZjE4M2QsIDB4YjljNTU1ZmUsIDB4MjQ3YTI2NTEsIDB4N2E2MjUwZTgsIDB4ZDJlNDEyN2UsIDB4N2NiYjRmYjgsCi0JMHhmZTc0NWRjNywgMHhlN2U2OWUyNCwgMHgzZjA4YjBmZCwgMHhiMTY4ZjU1NywgMHhmZmY2N2Y2OSwgMHhlMTY5ZjFjMywKLQkweGM3MDE0YjI4LCAweDFjMzNiZmNjLCAweDNmZTQ5YTU3LCAweGQzNjhjNzAxLCAweDM4N2VmZmYzLCAweDYzODBhNDY2LAotCTB4MWMxNTNmZjYsIDB4MmY0NTdiNTYsIDB4MmJkYTJmZmYsIDB4Y2FiZGEzNTcsIDB4OWQ2YzQxZTMsIDB4ZjdmZGNlOGQsCi0JMHhlNTJhMmE2NCwgMHhjOTkzNjllZiwgMHhlMTk1MjA0ZSwgMHhkZjY4ZWVhNywgMHhjZDc3OWYyZiwgMHg4YjFjN2JmYywKLQkweDYxNWY5ZGIxLCAweGQ0NzhjYTJkLCAweDExNjcxMTU3LCAweDg1N2Y4N2VlLCAweDBmY2YwM2Y3LCAweDg2ODNhMDJiLAotCTB4MWY2OTNhNjQsIDB4NTQzNGJmZGIsIDB4ZmUwNWZiODUsIDB4NTQzNWU1ODUsIDB4NTQ2ZWViN2EsIDB4NTg3YTVmNzAsCi0JMHhlZmI0MzhlZiwgMHg0ZmQ5NmIzNiwgMHhkZTkzMzMzNywgMHgyZmJhZDA4YiwgMHhiNmJiMjJhZCwgMHg5YjI3OWJlMywKLQkweDYwNzhkZjcxLCAweDY4YzNkZDVhLCAweDkzOTE0YjA3LCAweDI0YTc4N2NkLCAweGQ2ZjVjZjdiLCAweGQxNGZkMzJmLAotCTB4Y2U5ZDE0YmEsIDB4MjkzZjQyYWUsIDB4MGVjNjhhZWEsIDB4YjU5YTNkMjAsIDB4ZjBhM2QyMDAsIDB4MjI5NmQxOWIsCi0JMHhkYWY3MmJhOCwgMHhhZjAwMGQwMiwgMHhiZWRkMTk5MiwgMHgxZTU3ZTAwNSwgMHg0ZDc2NGUxOCwgMHhiNjFmZjUxNCwKLQkweDZlODk0MDdmLCAweGZhOWRmY2MxLCAweDFiYjdjNTAwLCAweGE1YjQ3ZDg1LCAweGYzMTdhZTY5LCAweDMwOTllZDk4LAotCTB4N2FlNTIwNGIsIDB4ZDA5N2RkN2IsIDB4NzUzNGQ3NWUsIDB4YWUwYTczYmQsIDB4MDE5NjgxMDcsIDB4MDFmNzVlNWUsCi0JMHhiMTE2NGY1YywgMHg3OGE2NjcyMiwgMHhiNDZmZWIwZiwgMHgxYWYyMGQ4MSwgMHg2ZmU5N2VlYSwgMHhiYWI3OWYzMiwKLQkweGQ3MGQzODNlLCAweDhjOTVkNWY5LCAweGY3MDg3ZjdmLCAweGQyY2M5ZTg5LCAweGZiZGZjMmYxLCAweDRmNWM3NTBkLAotCTB4N2Q0NDg2OTQsIDB4ZWI3YmNjMjYsIDB4ZjdkZjVjNjMsIDB4ZDFlYmFiYTYsIDB4NDRmOTg3ZGUsIDB4YzMxYjhlYzgsCi0JMHg2MzBlOTNlNywgMHhmNGZlMDA3YiwgMHhiZWI0NDU3MSwgMHhmMTdkNjE0NiwgMHgwYTcxZmJlMCwgMHhmN2QyZjc5ZCwKLQkweDZjNjM5YzgzLCAweGVkODQxZmI0LCAweGMyZWE3ZWU5LCAweDc0MmZkYTIyLCAweDM4ODE2M2NlLCAweDY5ZTcwM2U2LAotCTB4MDk1MTdmN2MsIDB4M2IzY2M0Y2UsIDB4MDRiZjFmNzcsIDB4OGFhNmNlMjksIDB4YTI2ZDEyZmQsIDB4YWQyMDVmMzksCi0JMHg5OWI0NWJlOSwgMHhmY2RhMzY5ZSwgMHg1Y2NjMzlkYywgMHg5ZGMwYjA3NywgMHg2MGVjOGY3NCwgMHgyNjgxYmU0YiwKLQkweGIwMDY4N2Y2LCAweDE0NTdlODQxLCAweDZjMzYyMmRiLCAweGNhODVkYTA3LCAweDc2ZGY3ODUxLCAweGVjODExZTMxLAotCTB4MGM1OGZhYTQsIDB4MzFlMzE2OTEsIDB4MGMxZDNmMmIsIDB4MzI4MmMwOWIsIDB4NjQ4NmEzOGYsIDB4Njk4ZTNiZjQsCi0JMHgwNzk0N2NlMSwgMHg2NmUyMjY5ZiwgMHg4ZGJmNzg4MywgMHgzNmZmNjFhMSwgMHg4ZmYxNGZjYiwgMHhmNWVmYjQ3YywKLQkweGIzNzljNmZhLCAweDRhOTFmZTI5LCAweDg4OWEyMmJlLCAweGVjMzZkZWU3LCAweGNlOWFmN2EyLCAweDE5MTAwNzM4LAotCTB4YzY4ZTZmZjQsIDB4NmY2YjgxZjMsIDB4ZDc3OWY3ZTIsIDB4OTQ3ZWUxZWUsIDB4ZThiMjdlZmUsIDB4OWM0NTM2YjcsCi0JMHgzMjdhZTQxMywgMHhkNjNkZjljMiwgMHg0ODVlZGIzOSwgMHgwZTdjYWNmNywgMHg3NWYzNTZlOSwgMHg2YjRmYzMxYiwKLQkweGRmYjljN2UyLCAweDUzYjdiMTY2LCAweDE1OGRhMWU1LCAweDVmOWY0ZGZlLCAweGYyMThmYzIzLCAweGMyY2U5MDJkLAotCTB4ZDJlYTU5N2YsIDB4NGZiZTZlZTksIDB4YTI0N2JmNDIsIDB4NGY0ZGM4NDcsIDB4YThjNDRhYjksIDB4ZWEwOTgzNDUsCi0JMHhlOTg1MzczOSwgMHgzMTcyODIxZSwgMHg2NTRkZjI5ZiwgMHgyYzFmZThiOSwgMHg4MjI1ZmZkZCwgMHg3OWM2ZDk3MywKLQkweDVlNGJkZTJhLCAweGUxMzE3MWJlLCAweDUyZWJjNzQ1LCAweGE3ZjA3ZjhiLCAweDhkMTcwOWQ2LCAweGI0ZjZlOWE3LAotCTB4ZmVlODFmZWUsIDB4NDg0ZmQ1ODAsIDB4NDdlN2ZkZjUsIDB4Y2MzYTI3ZWUsIDB4M2VkMTk1ZjYsIDB4M2MxYWZmZWYsCi0JMHhlMDc1ODZjZiwgMHg2N2RlMjBiNiwgMHg0NzNmZmJhNSwgMHhmOThlZWNlYywgMHg3MzY1NWNmOCwgMHgyZWMzZjlmMCwKLQkweDU0NTYwZjdlLCAweGQ4NzU4M2RjLCAweGRmODU5YzVmLCAweDdmM2UyOWNkLCAweDNiMmY5NjI1LCAweGVkZWExYTYzLAotCTB4N2EzZTNmOTcsIDB4NGEwZmY5MDMsIDB4OGQzY2MzNGMsIDB4ZmZmNzBhMzMsIDB4ZTc2MzNhZjQsIDB4MGJmMzhhNjQsCi0JMHg3ZWVmNWZiYywgMHhiODY3ZWU5NSwgMHg3NGY3ZjBiZSwgMHhmZGM2YmQzZSwgMHgzZjYzOWQyYSwgMHgzY2E3NjZkMywKLQkweGIxNWRlYmJiLCAweDFkZmRlMzZjLCAweGNkZWUxN2Q3LCAweDc0N2UxOGJlLCAweDgwODhlMWZmLCAweDdiZDE3MGY3LAotCTB4NTcxYTYxMDUsIDB4YjcwNDczZTQsIDB4NTNkMjE3NGEsIDB4ZTdjZDZmN2YsIDB4M2U5OGVjZDgsIDB4YTY2OWU1MTMsCi0JMHgyZmY5ZTkyNiwgMHhjZDk3Yzg4ZCwgMHhmYzkzODdmMywgMHhlODliY2Y2NCwgMHhmMzliZmRlNCwgMHhjNzkxYjI0ZCwKLQkweDQ3Y2ZlZWFlLCAweGVmNTlmZjNhLCAweGYxMjM1OTI1LCAweGUwYTllZjczLCAweDE5YjQwNWFhLCAweDNkYzRkMWQ3LAotCTB4ZWYzZDJhMjUsIDB4MGU4NmYxMTYsIDB4NTRmNmZiMWYsIDB4YWM3OTk3OTAsIDB4NzVmYjRlY2UsIDB4ZmQxNzdlZTIsCi0JMHg0MTc5OTc1ZSwgMHgyMjQyZmRjYiwgMHhkNjI0MmFmZiwgMHg1ZTQ0MzdjMywgMHhhN2U2M2NkNSwgMHgzNzY4MTdlZiwKLQkweDc1YmY1MWQ5LCAweDZlNjBmYjg4LCAweGYxYmI2MTYyLCAweDQyNWVhNjdjLCAweGI2YmQyNmJmLCAweDdlYjk4ZTYwLAotCTB4Yjc1Y2M4NzMsIDB4ZTdhOGEzZGUsIDB4ZGViNGZjY2QsIDB4ODllZjE1M2YsIDB4OTk5ZGZiZDMsIDB4ZDNlYzNmNDIsCi0JMHhiMDNjNWQzZSwgMHg2NzUwN2UyZiwgMHg3MWU4MWY4ZSwgMHg0M2NjMWFiZiwgMHgxZTE4ZmRhNiwgMHhlNGU1OWJmNywKLQkweGJiOGY0ZmUzLCAweDU2YTM3ZjY4LCAweDE2ZTMzNzUzLCAweGM1YjNlYTBjLCAweGM2OTY3Y2YwLCAweDhiYzYwZGY1LAotCTB4NTlhMjllZjAsIDB4NmYxZjdlOGEsIDB4ODBlN2JmNTQsIDB4ZjkwOWNiYmUsIDB4MGRkYzYzMzYsIDB4NWVlOTMwZjMsCi0JMHhkZjFlNzBhYiwgMHhhMDcyMTE1NywgMHgwZWNlMTljNywgMHg1ZTY0NjdmMywgMHg0ZGI1YmY4NCwgMHhiYTllZTliMiwKLQkweDEzYjg5NWZiLCAweDAwZmVlMGY5LCAweGYwNGFjM2NmLCAweDZmMTRkNDcxLCAweDQ5YTkzNmQ1LCAweGViZWJiN2VmLAotCTB4OWUwYWY0MDcsIDB4M2VlMDcyNGYsIDB4MDFmN2QwMmYsIDB4YzYzNWU4MjUsIDB4ODg3YjM0MjMsIDB4ZjRmNzc2ZWEsCi0JMHhmMmYyM2YwZSwgMHhlMzY2MWIwMywgMHg5ODhkMTA1NSwgMHhjYTc2MGMxZiwgMHg2OTU3ZGEzYiwgMHgwM2RiNzY3ZCwKLQkweDYyMWVmMTg3LCAweGM3ZTZkYmI3LCAweGIzNDFiOGY1LCAweGEzNTdiZWQxLCAweGVmZWI0OWNmLCAweDhiZGFhOTdhLAotCTB4ZWJmN2E0ZmMsIDB4YWUwODU0ZWUsIDB4MDY1MTVhYjMsIDB4YWJmZjA4YmIsIDB4ZGEzMzRmZTAsIDB4ODdkZjMxYWYsCi0JMHg5ZTM3ZGZmNSwgMHhkZGZhZWQ0NiwgMHgwYTcwNzViZiwgMHgxMzFkNTljNSwgMHgxN2JjMDE2ZCwgMHhiMWFjMWQ1YywKLQkweGNmYzkyNDNmLCAweDkzNmYxYmVjLCAweDU0OWZiNDkyLCAweDc3NDk0ZmY4LCAweGY1MDdhNzdiLCAweDdjOTZiNzQzLAotCTB4MmRjOGJhM2YsIDB4M2ZjMmZiODksIDB4YjIyYzNjYTUsIDB4NWYzM2MzYzQsIDB4ZWZjNzFlMWYsIDB4OGExYmNlYTUsCi0JMHg4YTNlNDkwYiwgMHgyYjZmMjBkYywgMHhjY2Y1OWRjNywgMHhlNDdjOTNmMCwgMHgyZTFjN2NmMiwgMHhhYmRhOGRiNywKLQkweDZjMzc5ZTRlLCAweDE1MmRhN2JlLCAweDQ5NzhlYTNmLCAweGM4ZTUwNzg1LCAweDM3ZTc4YzVkLCAweDdmNzE5OTg2LAotCTB4NDNjNTJkY2UsIDB4NGUzMmQ3OTQsIDB4YjhhZmJhNDksIDB4NTFhMWUwNTYsIDB4Y2FiZjEwMDksIDB4Yjg5Yzg2ZDcsCi0JMHg0ZjY0MzQwZSwgMHg3ZmZlZTI3NywgMHgyOGNmZTJiMywgMHg4OGYwZmI0NCwgMHhkNjZlMzBjYywgMHg4ZGNiMzVlNCwKLQkweGZiODhiNjVlLCAweDZkYmFlNzQ1LCAweDc1NTllZjQ5LCAweGVlZmY5MmRhLCAweGJlNmU1ZGNlLCAweDlmZWNiNDRlLAotCTB4NTJkZWU3NDIsIDB4ZDQ2ODA5ZjEsIDB4YTVhNWQ5MTAsIDB4ZjNlZjE3OGEsIDB4NWUxY2VkOTYsIDB4MDRmYzhhNTcsCi0JMHhmYzU0ZGZiZCwgMHgxNzdlZWY3MSwgMHg2MTk5M2RmZiwgMHg2NTlmM2E0ZSwgMHg5YzQ5YWYxZCwgMHg3ODAyNmJjMywKLQkweDFhNmRjZWQwLCAweDZjNzg0MWRjLCAweGQxNzhhODlhLCAweGQzZjk3NjhlLCAweDVlZDBkMzk4LCAweGVmNDg5Y2M5LAotCTB4NzhkOTZhY2YsIDB4YTUzNTkwMjYsIDB4NGYxZDNiZTAsIDB4OWY2ZGI5ZDcsIDB4MTZjMmZmOGQsIDB4MGRmOWNiZmUsCi0JMHhmYzBkY2JjNSwgMHhmZjE5M2FiNywgMHg5ODNjODc1ZCwgMHhkZTM3ZTFjMywgMHhmMjY0YTlhYiwgMHhiYzJiM2ZmZCwKLQkweGRlM2U3ZTdhLCAweDlmY2M2ZTg3LCAweDg0NWYwNTJhLCAweDFjOGU4ZGM3LCAweGVjMGMzZTlhLCAweDMwM2FiZWRkLAotCTB4ODZkNzhjMzgsIDB4NzNmYjhlN2EsIDB4ZDEzM2E3NzEsIDB4NjQ3ZGQxYmUsIDB4NzU0MjkzNzYsIDB4ZGYwN2RmM2EsCi0JMHg2Y2Y3ZjEwNSwgMHgzOWZkYzRkYSwgMHhjMWYzYTgzNSwgMHg0NWJlYWE4ZiwgMHg5ZjU4NWU2MywgMHhiYjJjY2FlZiwKLQkweGRhNTFlNzE3LCAweGFiOWY4MDcxLCAweGY5YTFjYjY5LCAweGFkZWY4YjU3LCAweDljM2RjNmYwLCAweDJmMWVlMzlmLAotCTB4ODJjNzE5OTUsIDB4NzdkZmMwM2YsIDB4ZjM0OGViNjgsIDB4MmRiNzFjNjMsIDB4ZDYzOWRiOGIsIDB4ZjViYmNlZWYsCi0JMHhiMTU2ODczYywgMHhmYjQ5ZDFkZiwgMHhmODMzMzkxMiwgMHgzYmJiZDQ3YSwgMHhmZWEzZmM5ZCwgMHhmN2UwNjlmOCwKLQkweDhkZWM1ODY5LCAweDk0MzY3YmJlLCAweGQ1MWRkOTM4LCAweGM3ZDBlZWMyLCAweDgyYzQ1ZDJmLCAweDJmNGJiYmY4LAotCTB4MjcxNmIxYTUsIDB4ODQzYjg3ZDgsIDB4MmRmNjMyMWMsIDB4NzgwYTVmYjEsIDB4N2M2ZmI4MDQsIDB4M2ZlZDE0NzEsCi0JMHgwNGJkZmRlOSwgMHhjZmI2MTJjYiwgMHg5MTJjZWRjZCwgMHgzZmMwY2ZlNCwgMHg2ZmJhNjYzMSwgMHgzOWQ5YzZhZCwKLQkweGJlNDdmNTFjLCAweDQ2ZWRkZTFjLCAweDY3NThlMzNmLCAweDVlZGJkNjJlLCAweGUwZjY0ZDNkLCAweDczZjBmMGE1LAotCTB4NTFjMmJmODEsIDB4NTcxZTdkYmEsIDB4MzVkNjcxOGQsIDB4ZjQ1ZDk1Y2YsIDB4YzYzNTVkN2MsIDB4NTBmZTBjNDMsCi0JMHhlOWIzNmYwMiwgMHhhMTdlYmY3OSwgMHgxZmU4YmYzZiwgMHg4ZDM5MmJlMywgMHhhMDlhZTljOSwgMHg0YzhiM2U0ZiwKLQkweDBhN2QxOGI4LCAweDI1ZDIzZGU4LCAweDFmZDM5YTNhLCAweGRlNjBmOWY3LCAweDYwN2ZkNzY0LCAweDA5ZWYyN2QxLAotCTB4OWY0ZmZkN2EsIDB4YWUyNjM2NmYsIDB4NDBlNTNmMDEsIDB4ZjE4OGU3ODksIDB4OWZiYzViZGUsIDB4NmZjNzk0ZjcsCi0JMHgxNWIyN2Y1YSwgMHhjYjM1NTNmNiwgMHgyYzY5ODdjMCwgMHg4ZGZhODRlMiwgMHhkMTY3Y2U4ZSwgMHhmYWViZDNmZSwKLQkweGM3YzExYmZiLCAweDM5ZmQ4YzlhLCAweGYyZTkxY2I5LCAweGI5MjhiZDViLCAweGVkY2I3ZWRjLCAweDNjMGVmYzIxLAotCTB4YmVlMGY3MTYsIDB4ZmM2MjhiYzcsIDB4ZTgxZmQ4YjYsIDB4NzZiNmIzYmUsIDB4M2Q0ZmUxOTksIDB4OTYxNDVjMGMsCi0JMHg0ZTgyNWFjMywgMHhlYmUxZmJmZCwgMHg2MGZmMmU4ZiwgMHgwYjcyOGU0ZSwgMHg0YTM5NDdmOSwgMHg2YmZkY2I1ZiwKLQkweGRmZThjZjVkLCAweGNmYjQ3OTE1LCAweGVlOGYxZjY2LCAweGM4YWM0ZTc3LCAweDc1NzI0MzkzLCAweDA1ZjQ0MzA4LAotCTB4N2JiZGY5NmIsIDB4YTJmZjBiNmYsIDB4ZDM5ZmRjNWEsIDB4MThjN2RmYTUsIDB4ZGUzMzY5MWMsIDB4NWE3NmY1YmIsCi0JMHg4N2ZkMTQ0MSwgMHhlNWY3ODdiNywgMHhlZDFhZTYwOSwgMHhmMDU3NmFhZiwgMHgxYmJlZjBkZiwgMHg3Y2E2NTQ3NiwKLQkweGMxYmMwZmQ1LCAweDlhMmZlZTBjLCAweDcxMmVhN2ZkLCAweDNmZWU4ZWFmLCAweGZmZGY4YjM1LCAweDdmMzk4MzYyLAotCTB4MWRkMjRiMzcsIDB4OTFmZmIwZjMsIDB4NzJhZjc0OWQsIDB4YTc1ZjJlNmUsIDB4Y2M3ZjczZjUsIDB4ZjY0MjU5ZDcsCi0JMHg1NGFiZTBiNywgMHgwZjM5Zjc3YywgMHg4M2Q0MGY5NywgMHhhZDdjYTQ5MSwgMHgwZGJmOWU5YSwgMHg3MGM0NjBlYiwKLQkweDUzY2VlODRlLCAweGNmMWNlOGMzLCAweDc4YTAxNjEyLCAweDc0OTY5MmU2LCAweGJkZTAzMTE2LCAweGY5ZTRmMWVkLAotCTB4YmU4NDhiMzUsIDB4NGVmNzEzNmYsIDB4NWU3Y2QxYjMsIDB4ZjNlN2JlMDksIDB4MWM5NzViNjgsIDB4YmUwYzllZWUsCi0JMHhmYjg5YjcwZSwgMHg2MDk0ZGJjNSwgMHhkNTI5ZTIzYSwgMHgwNzhmYTEzYSwgMHgzY2E3NGIwNCwgMHg2ZjA3ZjM4NywKLQkweGU2ZmQ3MWEwLCAweGZhMjU3ZjcxLCAweGIyNmZmMTdkLCAweGMwMDM3ZGY4LCAweGQ4MjdkMGEzLCAweDliMWUxYmZlLAotCTB4ZTJiZWJlNDksIDB4YjNmYWFjZjksIDB4MjRmZWI0Y2MsIDB4OWU5MzNlZjAsIDB4OTI3ZDc2N2YsIDB4OTI3ZDA5NzksCi0JMHhmMjUxZWY0ZCwgMHgzYTc4Y2VkMCwgMHg3Yjc1ZWZjNiwgMHhjZTZkYjBmYSwgMHhkYjc0MjQ5NiwgMHhhYWY0ZTQyNCwKLQkweDNmZWU4NTFjLCAweDc2ZTcxNTFiLCAweGI5NzZhYTQwLCAweDYzOWVlMjU5LCAweDdjMmI0NzgxLCAweGY5YzljNWQ5LAotCTB4ZmUwY2E1ZTMsIDB4N2U3NGY1N2QsIDB4MWJkZTMzNGYsIDB4YjI4NWYzOGYsIDB4NzVmZDAwMjAsIDB4ZjQyMmQ3NGQsCi0JMHg2ZmUyNWZmYywgMHg3YWI0OWM2MiwgMHhiZjhmYzNhNywgMHhkM2I1ZDdjZiwgMHhhMjdhODE1NSwgMHg2MmEzYTc2YiwKLQkweDdlOWZkNjhiLCAweDNiNjYzY2JiLCAweDRjY2Y5OWY3LCAweGY1OGM3ZmJmLCAweDcwNTE3NGEwLCAweDVmZDFjZmMyLAotCTB4M2VlOTk3NjgsIDB4OTI3ZjZiNDksIDB4ZWNmMzRkYzcsIDB4ZWMyOWU3ZDMsIDB4YjliOWFmYjAsIDB4ZTc0ZWNkM2UsCi0JMHhmMTE3YjE3NCwgMHg1NzJhZDQ3NSwgMHgxZDNjODU0NywgMHgyZDkwZjIxNSwgMHg3NTg3NmJlZSwgMHg5MmViODljOSwKLQkweDAyMTdlZWRlLCAweDJjYzM5M2RmLCAweGU3YzE3ZGU5LCAweGIxMmUwMmRkLCAweDc2YmMzYzJlLCAweDA0YzNmYjA2LAotCTB4MDhjZTdkZmMsIDB4N2VkYTE5YzUsIDB4N2VjMDJmMTMsIDB4ZGM3OGNhYmIsIDB4MTZmZGZhYzAsIDB4OTk4YzY3YzEsCi0JMHgzMzQ5ZWFlZCwgMHhiOWU2MTJmZCwgMHhjNWU0OThiMCwgMHhmZGJkN2M3ZCwgMHhiN2JmMThhNCwgMHhkM2I5ZmZmOCwKLQkweGRiYzVlY2ZiLCAweDgwN2JiZmM4LCAweGY0OWEyZWZmLCAweDgxZWI4YTUzLCAweDYxYjQxNzBkLCAweGMxOGZkMTVlLAotCTB4NWZmODMzOGUsIDB4MWRlOGIyYmYsIDB4MGJhZjNjMmIsIDB4ZWZjNGRhNzgsIDB4ZWI4ZDMyODcsIDB4ZjU1ZDJiNjEsCi0JMHg3NzlmNGM3NSwgMHgxY2IzMDBmNiwgMHhkN2ZmODJjOCwgMHg5NjQ3MzI4YSwgMHhiOTc0M2M2OCwgMHg3ZDdjNTkxYywKLQkweDVjYzRmOWU2LCAweDQ5ZDJlMjRmLCAweDFlNTg1OWNmLCAweGJjYWY3MDAzLCAweDkwZTZmYzQzLCAweDk1ZGNlZjg4LAotCTB4MzFlZjNlMTksIDB4ZTlkYTNkZjAsIDB4YmIwOTdlYjQsIDB4NmZkYzRkYmMsIDB4YTg4OWRiYTksIDB4NDY2YmM3NGYsCi0JMHgwZTAyMjNiOCwgMHg0YWQ3ZDcxYiwgMHhmMzBkN2Q3MiwgMHhlMmE3YmYxMCwgMHhmNjEyN2VhNiwgMHgyNjJiYjcwNiwKLQkweDE2NmRmYzBhLCAweGIyNWY1MWU3LCAweDNmYjIyNmIxLCAweDM5NzQ5ZTA0LCAweDk2NjE5NTFkLCAweDdmOGNhMmQzLAotCTB4YWNkZDM5MGUsIDB4YTQ3MjdjZjIsIDB4Nzg3ZDMyNWYsIDB4OTQyN2VkMWUsIDB4NzFjMTYzODcsIDB4NDU3MmM3OTgsCi0JMHg1ZmEwMGI0OCwgMHhmZjMxZGE1YSwgMHgwY2YxZTYwMCwgMHg5NDNmODNkZiwgMHhlMWUzOTA5MywgMHhiZmIxOWY4MiwKLQkweDJkZmMwNjQ1LCAweGYwOWI3MGM4LCAweDdmOGNmOWY3LCAweGY4NzdiYjBlLCAweGRmMzdkNjMxLCAweDdkN2EwY2RiLAotCTB4ZTVjNjg2NTUsIDB4OTQyZmZjMDAsIDB4OWE3ZjhhODMsIDB4ZTAwZTg2ZjksIDB4YTA2YWFlMzksIDB4OWQwY2FhM2IsCi0JMHg4YjYyZGEzZiwgMHgzZWQwYjlkNywgMHg2ODAyYzYzZSwgMHgxNmM3Nzc1ZiwgMHg3ZjAwYzZkYiwgMHhmNmUyNmY3NCwKLQkweGRmOWU5ZjYzLCAweDdhMDVmMWM4LCAweGY5N2E4NjM5LCAweGY0YzE2MzhhLCAweDI3NWY1MGQxLCAweDQ1OGFlM2Y4LAotCTB4MTRlN2RmOGMsIDB4Y2ZkMTQ3NzMsIDB4Y2U0NGY1ZDYsIDB4NzAzM2JkNGQsIDB4N2E2NTc3ZGYsIDB4ZjBjYjgzNWQsCi0JMHgzYjdkYWZiYywgMHhlODRjMmZiNCwgMHgzN2Q0NmE5YiwgMHg3ZGY2ZDRmZSwgMHg4ZDNhNDY2YiwgMHhlMjA5ZWI4NywKLQkweDczM2E1NjY1LCAweDk3OWUwMGJhLCAweGVlMzIyMzBhLCAweDQ1NzRiZTZiLCAweGU3YmM3OGUxLCAweDc4NWE1MGZkLAotCTB4N2VmODZhZjQsIDB4MGUzZTFjZDIsIDB4YWY0NDc3NmIsIDB4ZDJmZjEyNDgsIDB4ODhhZTc1ZjUsIDB4N2M4YWU1NGYsCi0JMHg1ZTM0ZGNlZiwgMHg0NWY0MmM3ZSwgMHhjMWYzOTc4MywgMHg5ZWJjYmRhZiwgMHhjZjFlNDllYiwgMHgxN2VmMTFlYSwKLQkweGRjZWY1Y2M4LCAweDJlZGM5NjU3LCAweGM2N2M2NTg5LCAweGIyNDA2M2Y4LCAweDE5NjNlM2M2LCAweDZmOWVlMjM5LAotCTB4ZWI1ZjQyNWIsIDB4N2M0MjczZmMsIDB4MmVkZjhmYTcsIDB4OWNmY2I1ZTYsIDB4ZTU5ZmUyNjQsIDB4Y2RmMTFkNGEsCi0JMHgzZDBhNzNmMiwgMHgxNTIyZTVkNywgMHg3OWZiZTlmZiwgMHg3OGUxMWQ5YiwgMHhiZTdiZDQwNiwgMHhjNjA5NjFmZSwKLQkweGU5ZWYwYTBkLCAweGY4NDhmYmUyLCAweDUyNTM0MDdiLCAweDFlYmU4N2NiLCAweDNkMDZmNGU4LCAweDBkZjE4NmRmLAotCTB4MjcxM2YzZDAsIDB4MThmNDNhZDMsIDB4OWM4NTk3NWYsIDB4MWZmNGVjMWEsIDB4YjY1OWVmZTAsIDB4ZDQ1NTVjNzUsCi0JMHhkZjZiYTA2MCwgMHhmZWUwMTk3YSwgMHhkOTVkNzU4YywgMHg1N2M0Yzk4MCwgMHg4OWQ3OWVhNywgMHhhM2VmMmNjZiwKLQkweDI1ZTFkODUyLCAweGJjM2I1NzdmLCAweGM5M2M2M2I0LCAweDU3ODExMmVkLCAweGM3YTZkZTNkLCAweDUwN2IxOGI1LAotCTB4MTNmNzMxZjgsIDB4ZTRjZDI3N2UsIDB4ZGZmODBkZjIsIDB4OWEzZmYwMjEsIDB4N2RiYmZmZTMsIDB4ZWM5NWJmZjgsCi0JMHgyZjJlNTY4NCwgMHhhNTJiOWRiOSwgMHhmYTJmOTI2MiwgMHhhNGRkZmY0ZSwgMHg1MmFmZDNjMiwgMHgyZjc4ZTc3ZSwKLQkweDEzZmZlN2Y3LCAweGM5NTU1MDg0LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZDVmZjAwLAotCTB4ZDVkNDdjNzksIDB4Y2VmZGY4YjUsIDB4MzMyNGI2NzcsIDB4NWY2NGNjYzksIDB4MjU4NDkzMDgsIDB4MjEyNjEyNmEsCi0JMHgyNjUwNDEwOSwgMHhjNTExNjEwOSwgMHhmYjA5NDA0OSwgMHg1MTU5ODNiMCwgMHgyZmI1Njk2YywgMHg0YTQ0NDEwMywKLQkweDUwNWQ4YmRmLCAweGQxMDFkYTk0LCAweDEwMWFjNTVhLCAweDgzYjA2MDM0LCAweDY3OTU2MjJjLCAweDA1YjA1NGE0LAotCTB4MjEwOGVlM2IsIDB4ZjE2YjQzYzksIDB4M2RkZTVhNTcsIDB4OTk5YmRlZTcsIDB4MDA2Njc3ZWYsIDB4N2U3ZWJlN2QsCi0JMHhkZWI4ZmYwZiwgMHhkZWY3Y2JiOSwgMHhmYjNkY2U3MywgMHgzYWIzYzliZCwgMHgyMTA5NGIyNSwgMHgwYjYyYTIxYiwKLQkweDk5OTQxYzQ4LCAweGM4NGIxMjVlLCAweGJkM2UwOTg4LCAweGU5MDg0NGRkLCAweDk1MjQyNDQ4LCAweGE0MjNhZWZlLAotCTB4NDc1YWVhMGIsIDB4MjQyM2M5MzIsIDB4YmQzODllYWQsIDB4YmVkMTllYjQsIDB4ZmFkMmQyNWYsIDB4ODYzN2Y4NjUsCi0JMHhjOTRhZDMxMCwgMHhmZTllMzBiOSwgMHhkM2I2OTRiZSwgMHgzYTE2NmRkZiwgMHg5ZWQwMzEzMCwgMHgxNjA5ZWJjYywKLQkweGQwMjUyMTNiLCAweDgyMGQyN2NmLCAweDkzNmYzNmY5LCAweGI0YmU3NGI0LCAweDYyOTA4OTc2LCAweDJmMTMzNjVhLAotCTB4NGI4YzBhYzksIDB4OTllZmIwNzMsIDB4MDE2OTVlMWMsIDB4YmI0OGRmZWQsIDB4YWM4NDkxOTEsIDB4NTllNzU0ZDMsCi0JMHgxNDk5NjgxMiwgMHhiZmE1NjhlMywgMHgwN2JhYjA2ZCwgMHg0ZmVhN2VjMCwgMHhkYTY2N2NmOSwgMHgyZWE5YzQ2NSwKLQkweDdiOGU5YmFkLCAweGI0Y2NlYWMyLCAweDYzZjYwNjI0LCAweDI0NjkyZDk3LCAweDUzOTg5MDg3LCAweDM2NmQ5ZDZjLAotCTB4ZmIwNWQ3MzIsIDB4MTc0Y2ZlMjMsIDB4YzYzZjI0MGMsIDB4MTViMjExZjUsIDB4OTMyODliZDcsIDB4YWI0NmM0MjMsCi0JMHgyZjdlODdkMCwgMHhkNmVlNzU2OSwgMHg3ZDYwNTJmNSwgMHg2ZWUyMzY0OSwgMHg0OTQ5NmRhNywgMHg4NGQzYmRjNCwKLQkweDIyOTFkN2ZkLCAweDcwNDhkN2RhLCAweDg3YWI0OTNmLCAweDA1OWY1ZDZjLCAweGRlNzE3OWYzLCAweDM2ZDcxY2FhLAotCTB4ZjkyYWJkZjgsIDB4ZmE1NmEyYmEsIDB4OWYwNmNlN2IsIDB4YjcxZDNlNzYsIDB4MDI2NmIzNzcsIDB4MmJjYzUzZWMsCi0JMHgwOTE2ZDFjYSwgMHg4YzdkZDFjNywgMHg3ZDg5ZmQ4MCwgMHg5Mjg5ZmJhOCwgMHg1YmFlMGYxMCwgMHhiMzQ1ZDNmNCwKLQkweDViZjY4NWZkLCAweDRjYzZmMzg1LCAweDZkMGRmMDYwLCAweDJmNmM3N2ZmLCAweDBjYzI2NWZmLCAweDFhZmQ2ZjU4LAotCTB4MDE0ODMxM2QsIDB4NzU2MTNmZjgsIDB4NGQ3MDAyZGQsIDB4MDEyMmRmNmIsIDB4YTY4YzNlNmMsIDB4ZjAyYzM0NzQsCi0JMHgyOWEzMGZkZCwgMHg3NmIwMTUzZCwgMHg4N2YzODUzYiwgMHg3OTQ3NGE3YSwgMHhiNDhhM2EwMSwgMHhiMjk1ZmFmZSwKLQkweGEwZjBlMTczLCAweGUyM2QxYWZhLCAweDJjOWU4YjY5LCAweDVlMGJjZjZkLCAweGRmNWM2YWRmLCAweGNiMDY4YjIyLAotCTB4MmNkNzU2YTMsIDB4Yzc2MzRmODAsIDB4ZmJjMDdhYzMsIDB4ZTgxZjZkYjIsIDB4Y2VmODU3ZGQsIDB4ZWU5MWMyYjUsCi0JMHhlMjk2OTU3ZiwgMHhiMjVkYWViZCwgMHg0YWU5MjgxOCwgMHhlODEzOTJlZCwgMHhlOGQ2YmVhMCwgMHg2ZmQ0NzgwNSwKLQkweGQ2NGI3NDY3LCAweGExODNiZGU4LCAweGE3YzNiZWRlLCAweGY3ZTllZGExLCAweGZkMzIxZDNiLCAweDBlZmI2ZWI5LAotCTB4N2MxMDUxNjksIDB4MTJiZGViZDMsIDB4NTlhODZiYWMsIDB4MWU5ZjJiOWMsIDB4ZmU4YTk1Y2YsIDB4NDU3ODUxMGYsCi0JMHgxYzNiYmE1MSwgMHg1YTQ2M2M0NSwgMHgzYzliOTc3NiwgMHhiNzZmODUxMiwgMHhmZDBmNWRjZSwgMHgxYzYzNTNiYSwKLQkweGY1ZWZkYTFlLCAweDQ4OGZlMzFkLCAweDc3OWFkY2Y0LCAweGFlNTA3YzFhLCAweDMxNGQ2Y2QzLCAweGQ3NzVmNmQyLAotCTB4NDFhZDFkZWIsIDB4YmFkMzY3NzQsIDB4NmIzOGMxNzYsIDB4OGFiMWQ5ODIsIDB4MjA2ZWNhN2UsIDB4OWMxMzE2NDUsCi0JMHg0N2ZlMjU3NywgMHhjNWNlY2ZkYywgMHhhMzJjNGI2ZSwgMHhlMDhhNDIyMywgMHgzMTZlM2M1YywgMHg4Mjg5M2Q2MywKLQkweGY3ZDI4Y2JiLCAweGQ3NWIxZDYxLCAweGUxZThjMjRlLCAweDgzNmI5YzUyLCAweDIzZTNiZjA1LCAweDNhZGUzYTBlLAotCTB4M2E5NzlkODEsIDB4N2U4OTFmYmEsIDB4MmVmMzZlYWYsIDB4NjIzOTI3ZGMsIDB4NmZhN2I4NDMsIDB4NzViYmYwOTcsCi0JMHhiOWUwYjdkYiwgMHg3M2JiM2FjZSwgMHgyZmZhMWViZiwgMHgyNDUxYTUyNSwgMHgxYjljY2U5OCwgMHhkNWVmY2Y4MywKLQkweDQyNjIzNWYwLCAweGFkZTgxZWJiLCAweGYyYTFmMzhlLCAweDNlOTM2ZTVmLCAweGFmZGZkYTBhLCAweGEzYzIzMjJkLAotCTB4ZmRiNmYzNmUsIDB4NjQ3YmY0NjksIDB4YjYwY2IxMjksIDB4MTNmZGJmNjMsIDB4MDZiNWY3ZDksIDB4NjA3ZmM0MTIsCi0JMHg5ZDZjNzk5ZCwgMHg4ZmY4ODI4YiwgMHgzZTE4N2ZkOCwgMHhhZjU4NWJmNCwgMHg0MWQ3NTRlOSwgMHg0ODdjODdjNiwKLQkweDZhZmQ2MjhmLCAweDdlNzA3NmJjLCAweDNjNGY0ZTM4LCAweDkzZGViYmY4LCAweDFkZjNhNzZiLCAweGY5YzY4ZWNlLAotCTB4NzM4MDVmMDQsIDB4YTVmOWMzNWMsIDB4NjIxM2Q2ODYsIDB4NWEwZWI5ZTgsIDB4OWU2ZjU4OGYsIDB4ODJkM2EyYjUsCi0JMHgzODQyZTg3MCwgMHhlMmQ2NmMzNCwgMHhhZWY0YWJmYSwgMHhjZTgzY2I0MSwgMHhiOWY5ZWZjMywgMHhmYmRhNmQ3OSwKLQkweGZkZmQzZjdhLCAweDgzYmYyZmU3LCAweDkzNjg2OWY4LCAweDQ4Y2ZjMDljLCAweDNiZmEzYmRiLCAweGJmYWMwMWYyLAotCTB4MjExMjQ5OTEsIDB4YjdmYjA4OTMsIDB4N2EzYmY3NzEsIDB4ZDI3ZGZkM2IsIDB4ODZiZjg2MmUsIDB4MGJiNDNiNWQsCi0JMHhjY2ZhMDE0YywgMHgxY2RhZmIzYSwgMHg3Njg2YjNhMCwgMHgwMDkyODkwMywgMHg1ODJlZWU3ZiwgMHgwNTRlOWE4ZiwKLQkweDhkZGYwNDNjLCAweDA5OThjZjg0LCAweDBmMTI4ZjhjLCAweGNmNDg1ZjNkLCAweDczMWFhY2VlLCAweDhhNWY2ZjgwLAotCTB4MzUzYTMwZDMsIDB4MmRiYmRmYjEsIDB4MWZhMDFlYWMsIDB4OTc0MDA3ZjcsIDB4ZDc4ZWQxNTUsIDB4MTU1NDVjZTAsCi0JMHgwMjU2OGU0OSwgMHhmYjg2M2NlYiwgMHg3MDY0YTg0OCwgMHg3NTRmNWUwYywgMHg5OTdlNjQ3ZSwgMHg4NWU1Y2YxOCwKLQkweDYzNTk5ZmQ2LCAweDdlYWY5YzBlLCAweGY3YzdjZmJlLCAweGZjOTk1ZTAyLCAweDQ5ZGZiMWYwLCAweGIwM2YyYmI2LAotCTB4ZDJkZTM1NmUsIDB4MGZmNjEyYWQsIDB4MDExNzRmNDMsIDB4MjZiOTZhN2UsIDB4ZTNlODJmZDYsIDB4MGFiNTliZDcsCi0JMHhlYWIwNjFmOSwgMHg1NTgzM2U3MSwgMHgwOGRiZWI4YiwgMHg3ZTcyYTFmOCwgMHhjYjlkOGVhMywgMHg1ZThjYWI4ZCwKLQkweGM3ZDMxZmU0LCAweDlmMjg5MTFkLCAweGZiZDBjZjM2LCAweDk5YTQzY2EwLCAweDg3ZWQwZjVmLCAweGQ3ZjdkOGQyLAotCTB4NDM3NzM0NjksIDB4MTM2YWRkN2QsIDB4M2E3YzQ1NjksIDB4YTA0NGQ2OGQsIDB4NGJjNDU4OWIsIDB4NmJkZWFkN2QsCi0JMHhmY2ZjZjNhMCwgMHhlYWJmYzY0NSwgMHgwMTJmMjYzZCwgMHhiYTllZTgzZSwgMHg4NDkxYzYxMCwgMHg4MDUzYzcyOCwKLQkweGZkNDFmNzM3LCAweDdhNTBlNjFkLCAweDZmNjNkM2IyLCAweDZhNGZiZmE3LCAweGUwNGNlNzY3LCAweGE0NTFmMjgxLAotCTB4MDRiZjIxMmIsIDB4ZjRmMDAzNWMsIDB4YzA4ZGNlMmEsIDB4MGIzOGE1YzcsIDB4MmNlZTViZTcsIDB4MzNkZDc3ODAsCi0JMHg3MzhmZGU1MSwgMHgxMzJlYjdkOSwgMHhhMmFiNGJhMCwgMHhlYTkxZDRkZSwgMHhhODE4ZDhmZCwgMHgwMGZmYzFkNywKLQkweDUyYTc2YzFkLCAweDgzYWU5NGFkLCAweDc2NWQzM2FmLCAweDZlZmIwNzVmLCAweGViMGZmYTMwLCAweDRmNGI2YTI4LAotCTB4OGViOWUxZjYsIDB4MmI3NWI3NDQsIDB4OThmYjRjZGYsIDB4YTU3NzQzZWEsIDB4MzhhNTgxYmMsIDB4YTU2Y2JhYWYsCi0JMHg3OGU1MmUzYywgMHg5YmNiYzAxZiwgMHhkNDFmOGNhYywgMHg3OWUzYjcxNSwgMHgxOWI4ZmJhYywgMHgwMjY5YjFjZiwKLQkweDUzYTY2N2UzLCAweGM4NGQ3ZTRhLCAweGIyYmViODRmLCAweGM1NTdjNzAxLCAweDI5OTM4ZmI0LCAweDI1N2VhYmRjLAotCTB4NjQ0OTVhNTksIDB4MjI0NGI5N2UsIDB4OWZhNzkwMmUsIDB4M2IxMDNlNmQsIDB4ZTk3YmUwMGYsIDB4OGRmYjhjYjIsCi0JMHg2YzlkZmI2MiwgMHhmYmE4ZTc2NSwgMHhhNDcwMGExOSwgMHgwOTNkNjZmNywgMHg5ZDZiZGZiMywgMHg0YjhlZjg4ZiwKLQkweDBlM2FmNzgwLCAweDk1ZWRlZWViLCAweGY0YTEzZjIzLCAweGNlMjY3OWUyLCAweGRjZjdmYzAxLCAweGY4M2YyOWY2LAotCTB4N2JiYmFlODQsIDB4OWI5NDE4ZGIsIDB4YTQyZWFkMDksIDB4MjhjNGJlOWYsIDB4M2Y0YTU2YzcsIDB4MjA5OTMyMDksCi0JMHg2YWFmYmM1MSwgMHg4YTNiMTAzZiwgMHhiOWZjZmI4ZSwgMHg4ZjIwNDU2MSwgMHg5ZTc1ZjExNywgMHgwOTVlNTE3ZCwKLQkweGViZmQ1OTcwLCAweGY2ODY2ZTE3LCAweDBmMTRhZjNhLCAweDk5ZmJiYzdjLCAweGY4MTNmZDVmLCAweDRkNmRkMmZjLAotCTB4ZDY5MTQ5YTAsIDB4ZjdhNzdlZTcsIDB4ZWYxYTdlZDMsIDB4MzNmYmY2MTYsIDB4ZjdlODE2NzEsIDB4ZGYwZjkzZjksCi0JMHg2ZDZlZjAwYywgMHhiM2Y2YzU2ZiwgMHhmYWMxNmU0ZiwgMHhlMTdlYmY2YiwgMHhmMjA3ZmZkNSwgMHg4MGViMTVkZSwKLQkweGRjNWY2NzdlLCAweDc3YTk3ODhmLCAweGRmYjA5ZDZiLCAweDcxYmQ3NDQ4LCAweDI3YzY3ZWM3LCAweDM5YzNhZTQxLAotCTB4NGJmYzY1YTgsIDB4ZGZhMGI1ZDAsIDB4NzczZDdmY2YsIDB4YTg3Y2IwNjQsIDB4MTIxOTVkOTcsIDB4MzgzNjRmZjQsCi0JMHg1ZTUwOTI5ZSwgMHgxNDM4OWNhMCwgMHg3NDUxYjQ0NSwgMHhkMmQzYWZmZiwgMHg3OTJhY2I0OCwgMHhlMDFkN2VmOSwKLQkweDMzZjE4NzM5LCAweDc5MDkyMWFhLCAweDdmNDMxYmVkLCAweGNjNGM3ZGJmLCAweDJmM2JkNDE2LCAweGNmMDgzM2RkLAotCTB4M2JhMzBjNGQsIDB4Y2Y5MThmM2EsIDB4ODg3OTg0NjMsIDB4ZjMzZWEwOTYsIDB4YTg3NWU2NzYsIDB4Y2QyOTUyZDcsCi0JMHhjZTEyNDlmYSwgMHgxYmE2ZTg3MywgMHgxN2I5YzJiNiwgMHg2YWY5ODVlYiwgMHgzYWJkYTFmMiwgMHhmODg5ZTQwMywKLQkweGU3NWYxZDdkLCAweGRmMjY2OGJhLCAweDUzN2U3MWNlLCAweDA3NWE2MTU3LCAweGEzZTdiOWU1LCAweDhkM2YwMTZhLAotCTB4MmIxMGZmN2EsIDB4ZDE4ZjJmYzAsIDB4MjY1NjQzZjEsIDB4OTdkYmVhODcsIDB4Mzg0ZDFhZWIsIDB4OTc3OWU3MWUsCi0JMHhmMzI4MjlmMiwgMHg5NGZhNzllOSwgMHg2YmRhNTc5ZSwgMHhmMGUxZTVkYiwgMHgzZTMyZGZiZCwgMHg2MGNhNGQxOSwKLQkweDdkNjZkMzFmLCAweDYyZmMwMTIwLCAweDc1NzU5YWYyLCAweDU4ZTdkNzA4LCAweDcwNTJjNTNiLCAweDc2MGFlOTdiLAotCTB4ZmI3NGQ0N2UsIDB4Y2ZjNGQ1YTQsIDB4NjliNzNiMGYsIDB4ZWMzM2FhYmIsIDB4OGUwY2I3YzgsIDB4NTNmYTQxYzEsCi0JMHhhYjc3NTJkYSwgMHhjYjdlZmU5OSwgMHhhNjQzYjcwYSwgMHhjY2Y3Yjc3NCwgMHhiNGU5NzFiMSwgMHg2OTVjZWJmZSwKLQkweDJjYWJkMjM4LCAweDMxZWM3OTMxLCAweDU2MWE3N2UxLCAweGU4OGY5MjU2LCAweGNmYzlkZmI5LCAweDY4ODU5Mjc1LAotCTB4ZTAwYTJjNmYsIDB4YjQ0YjRhYTksIDB4MWY3Zjg0MjYsIDB4NzU4NmI1ZjIsIDB4NjM2ZjVlNWMsIDB4YmVjNjI0ZWIsCi0JMHgxYzY2MjljYywgMHgxNmQxYmE2NywgMHg2NzFkMDc1OCwgMHgyZmJkNjEzMiwgMHg5MDdjY2VmMywgMHg5NDVhOWU4ZiwKLQkweGFlM2Q3NjhmLCAweDVmZTBhY2Y3LCAweDNiMzA1M2M0LCAweGE4MWZjMDNmLCAweDdhMDZlNmRlLCAweDdiMzNkMjRkLAotCTB4YjU2M2Y4MDUsIDB4ZjJlNmY0MTksIDB4NDA5MmQ2MjMsIDB4ZGFjZDE0OTksIDB4NmQ5MjcwZDUsIDB4M2JhZTlkYjQsCi0JMHg3ZWM0ZTZkZiwgMHg4NTc4OTllNCwgMHgwN2M0OGFmYywgMHgzN2ZlMzkxYiwgMHg0MGM1ZmU0YSwgMHg1MTNkOWU2NywKLQkweGM2ZWJhMDE2LCAweDE0NDNmZDliLCAweDUzODcwOTc2LCAweDllOWJhNzBmLCAweDBlNWU4YzNkLCAweGQ4MWUzNDY5LAotCTB4MzdhZGExZGYsIDB4NDI5NTY5NmMsIDB4YWU1MGYxZTUsIDB4NDg3NWE3OWYsIDB4ZGE0YmMwMTYsIDB4ZmUwNTFhZTYsCi0JMHgwYWI3NWVhOCwgMHg1Yzg2Y2FmNCwgMHhmN2Y1MTRhOSwgMHhiZmJmZTU4ZSwgMHgyOTFiZDY4ZSwgMHhiOGRlYTBkZSwKLQkweGFhNGY5ZjhiLCAweGM2ZmY0MmE3LCAweGYwODVlYThlLCAweDg5ODRmNGJkLCAweGZkNDI1OTBlLCAweGFkM2E1YzY4LAotCTB4MTI5M2Q2MzcsIDB4MDcxYmZmMzgsIDB4ZTNhNGY3MzgsIDB4OTRmMjI0M2UsIDB4ZDUyOWU0MWQsIDB4MjY5ZTQxYWIsCi0JMHhkZTNlYTNlNiwgMHhmYTg2ZGVlOCwgMHg3M2Q1YzkzNywgMHhmNTEwYjdiOSwgMHg5OTk0YzZmNSwgMHgyMTVmMzgwZSwKLQkweDJhY2Y2MjdjLCAweGVkMWFmN2Q0LCAweGRhMjg4ZWQxLCAweDc0ODc1MjdmLCAweDRjNzdkMzM3LCAweDcyNDdhZDg0LAotCTB4Nzc5MjdkNDIsIDB4NzNkNjE3OTQsIDB4OTQ0N2MwNWUsIDB4ZjAzOWFlYmEsIDB4MDZkZDllZmQsIDB4YWZlZGExZTIsCi0JMHhmMjhmMTllZiwgMHhmOThiZDA1YywgMHg3NWNhMDMyNSwgMHg4MTIyZDY5YiwgMHhjNWFlN2U1ZSwgMHg0YzFhM2U0OSwKLQkweDljYjgxZmM4LCAweGRiYWNmMDExLCAweDczODFhNTllLCAweGMzYjc5ZTcyLCAweDk3MTI3YjNmLCAweGMzNmJiNDg3LAotCTB4NjdkMjFmNDIsIDB4MTNkYmQ3M2QsIDB4N2JjMmNlMGMsIDB4ZjQyN2YwODIsIDB4NjQxZDM1MjgsIDB4ZDM1ZTE4ZGIsCi0JMHhlMDk0MWYzNiwgMHg3M2YxYWIxMCwgMHg2YmUyNTJjYiwgMHg2NWJiZWJhMiwgMHhhNjM3YzZiMywgMHgxOWFiZjUwMCwKLQkweGU5NTdmN2M4LCAweDc0Mjk1NmM5LCAweGM2MzYyMWJlLCAweDVkZTJhYTJmLCAweGFiMjdjMDg1LCAweGMxMWM5OWE2LAotCTB4ZGEyYWE5ZmMsIDB4ZDIwYTg5YTksIDB4MTU3MTA4ZjMsIDB4MjY3NjNkODMsIDB4Y2ZmMDhjYzksIDB4ZWFjM2Q5YjcsCi0JMHg3OWY2YTE2NSwgMHhiNzRmZGExNCwgMHg0ODBhNzliNiwgMHgxNTVkNmQzNiwgMHg5MmU3MGI1ZCwgMHhmMjEzNjNmMiwKLQkweDBmMWQwYjRkLCAweDUxZDZmZGY2LCAweGJlZmIzMjRmLCAweGIxNGRlNzE1LCAweDhlZjlkODU5LCAweDgzMzcxNTc3LAotCTB4YjVjNzIwM2YsIDB4YjMzMWM5ODIsIDB4OGU3ZWRjMjMsIDB4M2UxZTg1NWEsIDB4NzQwMzUwYTcsIDB4MDBlNGQ1MzIsCi0JMHhhZmU3ZjJiYiwgMHg2ZTkxZjM0OCwgMHhjMjYwNTQzYywgMHgzOGFmNzE3OSwgMHgyYmQ5OTEzNiwgMHhlMjNiYTAwZSwKLQkweGQ1YmVhMmQ2LCAweDg2ZjJlY2Q4LCAweGM3NDYyYmE3LCAweDAyZmY1NDhkLCAweDE1ZDI5YzNkLCAweDgzYjFhZGUyLAotCTB4Zjc2MTFmYzksIDB4ZDYwODlmMDMsIDB4MTJiOWM1NzcsIDB4MzVmODE2ZTcsIDB4MzdhMDhkZDAsIDB4ZjVhZjZlNzEsCi0JMHhmM2YwZjY3YywgMHgxZmY3NDNkMSwgMHhiZGU2OWY0YywgMHhhZmQ3MmU4YywgMHhmYjQzOTdiMiwgMHgwOTYyMmFmYSwKLQkweDc2ZDU1N2I2LCAweDFmMGUxZDkwLCAweDhjOWZkYmFkLCAweDgyM2NjMmYxLCAweGJhYjA2ZGNmLCAweGJkNjBkYTY2LAotCTB4YWI1OGRmNWIsIDB4ZDRiZTAxMjUsIDB4MjFhMWY3YjgsIDB4OGNjZmQyNTcsIDB4ZDE5ZjM2NWEsIDB4YTYwZGUzMWIsCi0JMHhiNzA1MjMxZiwgMHgwZjRiMDhiOSwgMHg5NTk4ZTdmMCwgMHhmNzIzZmRlMSwgMHhjZjRjNGNkYSwgMHg2NWZhYjZmYiwKLQkweDdjMDVhNDllLCAweDVmMzJmZDA5LCAweGUzNmJkZjc2LCAweDA4YTUyNWZhLCAweGU5OTJiOTkyLCAweGViYzA0OTk3LAotCTB4OGQ2YzFmODEsIDB4MTEzZjAyZjEsIDB4N2FmNTI2N2UsIDB4MDk5Y2ZjZGMsIDB4MjMzYjBhYmMsIDB4N2ZmNTk2MjksCi0JMHgzNTliOWY5OCwgMHhiYzYzZGZiYywgMHhmMDVmYjIwYywgMHhlZTM1ZDgzYywgMHg1OTFjODgwZiwgMHhkZjcxODgwZSwKLQkweDdjNGJkZjk1LCAweDM1MjNjODQ3LCAweDQxZmFjMGZkLCAweGFhN2VjMTZlLCAweDZiZjcyMmYzLCAweDM4ZWRjZmRiLAotCTB4ZTFlZjNkMTUsIDB4ZTAxNmFiZTcsIDB4YmM2MjdhMDgsIDB4ZTcwMGVmZmIsIDB4MTljNDcxNTksIDB4ZWIzZmYxNGYsCi0JMHgyN2E0MDY3NywgMHgwNDM3ZGI5MiwgMHgyZDNhZDBlYywgMHg4MDZjMThmMSwgMHgxZmQ3OWQ1NywgMHg3OGE2Yjc4NCwKLQkweDZjZDdiZTM2LCAweDFjZjRjOGY0LCAweDZmNzc4YTVjLCAweDE1M2M3OTg3LCAweDNkMDNlMWM0LCAweDVmOTQ4N2Y2LAotCTB4YmUyNGI5YzAsIDB4NGQyN2UwMTIsIDB4NzAwYjFmYzQsIDB4ZGJiYWM1YjQsIDB4YWVlNTNlOTEsIDB4M2I1M2E4NGMsCi0JMHhmM2JlMDBhNiwgMHg5ZmIzMGM0OCwgMHhiZDkwZGVmYSwgMHgyZTNjMjk0MywgMHgzZWZmZmQxOCwgMHhjMmU3YWU4YSwKLQkweDg3ODcxYzhhLCAweGVmN2E3M2NlLCAweDk5ZmY3NzlmLCAweGZiYmYzZWY2LCAweDdlYzEwMWIzLCAweGVjYTM0NmFjLAotCTB4ZWEwN2M2ZDIsIDB4NmRhOTEyM2QsIDB4YmI3N2MzMGYsIDB4OTg2ZmNjNmMsIDB4YmJmMDgzNzUsIDB4YmFkZWExZjUsCi0JMHgwYzk5Y2EyMiwgMHhmYjE1OWY3ZSwgMHhhNGFmOTNjYSwgMHhhYzVkMzdjZiwgMHgzZjIwZGUyNCwgMHgwZjFkMTM1YywKLQkweDhlMmU5YWUzLCAweGU2NDNkZmMzLCAweDdjODFmM2E1LCAweDRlOThiYTY4LCAweDc3ZDljMzNjLCAweDMwZmM2ZjgwLAotCTB4YzBkYmYxOWUsIDB4M2Y2YzRjZjgsIDB4ZjNmYTUxYWQsIDB4M2M0NWU1ZmEsIDB4NDIyZWQ3YzMsIDB4MWY2Yjg0MjYsCi0JMHhiNWY2Y2YxYSwgMHhkZjlkOWIyYiwgMHgxNzkyNGRiZSwgMHgyYmM1ODNlYywgMHg4Mjk5M2VjYywgMHgxOWZkMzE3NCwKLQkweDE2YzVhNWY0LCAweDBiMTM0ZjhmLCAweGIxZjI4N2ZjLCAweGE5YzY4ODYxLCAweGNjOGY2YTQ2LCAweGY2OGNmMmUzLAotCTB4N2EwNjhlZDMsIDB4MWNmMDU4ZjUsIDB4OWMzOWY5YmEsIDB4ZDdmYWYxZDcsIDB4YWM1ODlmZTAsIDB4NzRkMWM2MjUsCi0JMHhjNzQ2Zjk5ZSwgMHhmYmZhNzRlMSwgMHhiMWIxYTYyNywgMHhkZTE2MjYyMCwgMHhlNDA5MjUzYiwgMHg2NmFjZjI1OCwKLQkweDMyMTIyZmY0LCAweGE5ZmEwMmQ2LCAweDk3Y2I0NjQ0LCAweDBmYTRhZTYzLCAweDQ1OGY1MTY5LCAweGYwNzRhMjdhLAotCTB4MmZhZWYxNmYsIDB4MWQwMjFkMDQsIDB4ZjE4N2JhY2MsIDB4NDlmZmQxMzUsIDB4MTdmMzg2OWIsIDB4MWZiZTFkMjUsCi0JMHhjNmVmZGYwMSwgMHhlODBhZmM1NywgMHhkNzM4YzFlYywgMHg3YmRlNzAzZiwgMHg1ZmY4MmJjZSwgMHhmYTdmZTQ4ZiwKLQkweGU1ZDNhMDcxLCAweDI0NTNjNzY2LCAweGMzODliYzc0LCAweDRiYjBiN2JkLCAweGRlZjFmZTBmLCAweDQ0YzhmZmU1LAotCTB4ZjVmM2I0N2QsIDB4MWJhN2MwOTMsIDB4MGM5ZjI2OGMsIDB4NWQyZWM1N2EsIDB4MDNlYzVmYjcsIDB4MzM5YzYyZTQsCi0JMHhmMzhlOWUzYSwgMHhmYWRhMzgzYywgMHg5MjA5YTUyOSwgMHhmZGM3N2Y0YywgMHhkZTE0NGVkMiwgMHhiYzE5MWI3NywKLQkweDViNzc4ZGRmLCAweGVlOTExM2UzLCAweDc1N2Q4MmU3LCAweGIzOGY2OGMxLCAweGZiZThiZDAxLCAweDI2MzJlM2YxLAotCTB4MzI0M2YwMDUsIDB4NzRiYzRhY2MsIDB4OTk3ODgxYmUsIDB4MDFlYTc0NmYsIDB4MmU5YzBiZmUsIDB4MzhhY2U3NWMsCi0JMHg4MTQ1ODk1ZiwgMHhmMmY5M2M4NywgMHgwNzhlZDcwZCwgMHhkM2ViOWY5OSwgMHg3MzBlNWZlMCwgMHhiODcyODYxZSwKLQkweGQxZmExMGZjLCAweGEzMWE3NGYyLCAweDY0OTlkM2RiLCAweGFmMjg0ZWU5LCAweDc3MWQyNWE3LCAweDhiZDc5YjNhLAotCTB4ZWYwODdkNzgsIDB4MzdlYWM0OTcsIDB4NWQzZGJhNzIsIDB4YmZhOWZhYzAsIDB4Y2VmZjI3NzMsIDB4NjJjZWYxYmIsCi0JMHhlNzFkMTM4MCwgMHg1ZWJlMDNkMywgMHhiZTgyZjI4ZCwgMHg4ZGQ2Zjk0YywgMHg3YzVlOGNmMSwgMHg1NWJlNjBkNiwKLQkweGY4MDQzN2RjLCAweGM1MDk2ZjYxLCAweGZhY2ZkZDFiLCAweDEzY2NiZWYyLCAweDE5ZjY1N2MwLCAweDU3ZWQ1YjJjLAotCTB4YmU2NGRmYzcsIDB4YzcyZDZmYWUsIDB4OTU4ZTU0MWMsIDB4ZTRkOGU0MmEsIDB4MTBjNzI2NzgsIDB4N2EyNTc0NGYsCi0JMHg0MjBkNWZhNiwgMHhjODdkMjBmYywgMHgxYjlmOGVkNywgMHhlOWRjMTlhMiwgMHg0NzhkYTk3OSwgMHg3N2NiZTU3OSwKLQkweDg2ZjdmMTA1LCAweDA0NGU3Njc4LCAweGFkMWQzOTNmLCAweDM4ZGZlM2M0LCAweGZiYzc5YzFmLCAweDY2MTZmMWM5LAotCTB4MzJmYTM5ZWYsIDB4YjZkMzllNjEsIDB4YmJmZjc4ZjAsIDB4OGIxZjFmYWQsIDB4MTk2N2JlODEsIDB4NTNjNGU2ZmEsCi0JMHhlYTkzYmI3YSwgMHhjNDIyZmEwZCwgMHgwOWViMGM4NywgMHg3Y2YzNGZiMSwgMHhkY2YzODU3ZiwgMHg4MDk5Yjc3NCwKLQkweGVmODY2YmZjLCAweDU4OWUyMjI1LCAweDdkOTcyOTdjLCAweDNkNGY3Mjk3LCAweDFmODZhZmQ0LCAweDUyYTdkNWYwLAotCTB4ZjRjOTI0M2UsIDB4NTYzYzM2NDMsIDB4MWFhNzE2NzYsIDB4MTZmM2MxNmQsIDB4ZWU0ZmNmZDUsIDB4ZmE4Zjg2MGYsCi0JMHhiZTM4YTdiYiwgMHhkYTRiYzZkNiwgMHgwZThmMDE0ZiwgMHg3MzcxODBlMiwgMHgzY2MyZjlkZSwgMHg3OWM5ZDI5YiwKLQkweGExYTNkMThiLCAweGJiMmRjZDcyLCAweGJiN2VjM2Q3LCAweGVhMDZmMDdmLCAweGJlZjRhN2JkLCAweDMwYTY2ZDIxLAotCTB4MTNkZjdhZWQsIDB4ZjY4MTQ4OGYsIDB4M2Q5MWJmYjksIDB4Nzc4ZTdhN2EsIDB4NjJmZjc1NzUsIDB4YmJiZmRkMWEsCi0JMHgzOWMwNzY0YiwgMHhkN2ZmZGY3NiwgMHg3ZjQwMjNhMywgMHhjMDM5ZDJlOSwgMHg3NWYyYTBhYywgMHhkMWY2MTY4MywKLQkweDUzYjRmNGNjLCAweGNmZmMyNTFhLCAweDQ3Njk0ZjdkLCAweDQ2ZjFjMzNjLCAweDMzYTQwYWY1LCAweGYxNGUwZmMxLAotCTB4NjIxMmU1YjgsIDB4MTU5ZmJhNDEsIDB4ZWExNWJiMWQsIDB4NmU0YmU1ZmUsIDB4N2NlNjM4ODUsIDB4YTRlYzM4ZTIsCi0JMHhlZWVjZmZmMCwgMHg1ZTc3ZTg4OSwgMHgyZmM4OWM0NCwgMHgxZjc0NzllNiwgMHgwNWQzZjMwNiwgMHg0NWY1OTRlYiwKLQkweGZkM2FjYTZkLCAweDkyZWZkMjIyLCAweDczYmZkNTQ3LCAweGY4NjU3MDdmLCAweDc4ZDFkYWY4LCAweGQzOWQyN2E2LAotCTB4Y2ZkZjZmODcsIDB4N2NiZGJmZGIsIDB4ODM3ODgxYmUsIDB4N2M4MDgwZjQsIDB4ZDVkZmMwMmQsIDB4MzkwMjFlZjMsCi0JMHhkMzkwMTI1YywgMHg1ZDM3M2U0MiwgMHg4ZjMwOGE4YywgMHhiNzNmN2YwOSwgMHhkZmZhZmMzOCwgMHhlOWEzN2NlNiwKLQkweDc5ZTUxNWEyLCAweGZjMDRmOGU4LCAweGQ4NjY2YTlkLCAweGU5YjVlMDRmLCAweGM0ZjEyYTYyLCAweDNmNDJlYTA3LAotCTB4YzBjYjhjMGMsIDB4MmMwMDJhNzYsIDB4ZjgwNGM2OWYsIDB4MGIwM2YwODAsIDB4MjI0MGZlM2EsIDB4ZGZiNDU0YzYsCi0JMHhhYzdhZTYxZSwgMHg1MmZjMDBhNSwgMHhhN2JjODAxZiwgMHgyNzhmNzZmOCwgMHgxMmU5ZmFhZiwgMHgzYTk3ZGRlNywKLQkweGEwMWQ5YjQ0LCAweDI4M2VmNTczLCAweDA3ZjU5YzNkLCAweGUyNGZiOWYxLCAweGFlNzgwOWNkLCAweGYwNjE5MTg2LAotCTB4NzNhNzQxNWQsIDB4MDcxNTUwN2UsIDB4ZjcyZmZlZjIsIDB4ZWIwNzI2NTcsIDB4MGU3ZWZkNjMsIDB4YTg5N2IzM2QsCi0JMHgyZGM4NTUyNCwgMHhmMzZiOTJhMiwgMHgyYjFjYTgzYSwgMHgwODYyYmQ0MCwgMHhmNjhmOGQzMCwgMHhiOTNlNDc0ZCwKLQkweDgwOTIzODkwLCAweDE5Zjc3YjhlLCAweGY4MWZkMTMyLCAweDU4OTllNTJkLCAweDNjY2YxNGNmLCAweDEzMzdkMzFkLAotCTB4ZjBkNzBlNTAsIDB4NjRlOTRmZWYsIDB4ZThjNjhkZmEsIDB4ZTJmZWExZDQsIDB4MTI0Yjc2MjQsIDB4ZWU0Yzk4OWEsCi0JMHhhNWEyYTE1MiwgMHgxZDQ0OWJmNSwgMHg0N2Q2ODc4OCwgMHgzMDQ4Y2RmMywgMHgyNmZmYWU5ZSwgMHhlZWY5OTI1ZSwKLQkweDA2NTczODE0LCAweGVjMGNhZWY4LCAweDY1MDI5YmM4LCAweDFkODc0OGViLCAweDRiOTIzMWNhLCAweGYwYzFkNmNiLAotCTB4NjczNDhlM2MsIDB4ZDE4ZDdmNDAsIDB4ODlmZDMzMmYsIDB4YzYwOTIwYWUsIDB4YmFiMWVmOGIsIDB4NGNkN2Q3OTksCi0JMHgxMTY3MzBiZCwgMHhlMzMyNmVmYywgMHg3NWYzZDdmOSwgMHg3Y2EwNDkwYywgMHgyNDZkZjYwYywgMHhjMWI3ZDg0NiwKLQkweGUzMWNmYmU0LCAweDU0ZjRiYzRiLCAweGY1MmVkMWQ4LCAweDAzZjQxMzY0LCAweDAyNzY5MzQ0LCAweGNlOTkzNWRmLAotCTB4MTZiMzYwN2IsIDB4MWVhMDkxNjIsIDB4YmJlMGI5NjUsIDB4MzM3ZjAwOGYsIDB4OTBjMzM0NzksIDB4MDA5ZjVkYmYsCi0JMHhhZGU5NmY3ZSwgMHgyOGZmYzBjNSwgMHhmMzgwMmQzZiwgMHhlYjVkYjExZiwgMHhmMDVlN2Q0MywgMHg1ZjVmMWIyNywKLQkweGE5NGZlNzJiLCAweGZlYzI0MDU0LCAweDdlOWZjZTY1LCAweGZjOGM1ZTZhLCAweGY2Yjg4MTI5LCAweDE0ZGE3ZjAzLAotCTB4NTNmOTAxM2IsIDB4N2FlMzcxMzIsIDB4MTU2ODI3ZTIsIDB4YTVkMTI2N2MsIDB4NmFkNzI3YWMsIDB4MjNjODdjNTUsCi0JMHhkZDUyZmFjMSwgMHhlNDhkZGZjYSwgMHhjOTA3Y2ExNCwgMHgxY2I5NGFlNywgMHgyZTRhNzY4ZiwgMHgxNTc0MjNmOCwKLQkweDQ0ZjUxY2VjLCAweGI0ZmQ3OGIxLCAweDlhY2ViNjY4LCAweGJmZjMxYjA0LCAweGZkYjhiMTQ1LCAweDIxMDFmNGQ1LAotCTB4MDE3YWQ1ZmYsIDB4YjVkYTU2MjksIDB4NDEzZDM2OGQsIDB4YjUxMjU1M2YsIDB4N2VhMTg3YTgsIDB4ZjRjMDkzNTAsCi0JMHhkMDNkZjc4MywgMHg1ZjIxZjcyZSwgMHgwYmZkYzEzZSwgMHhhYWI4Mjc1MywgMHg3N2RmMTRiNCwgMHg0ZWEzOTFlNiwKLQkweDcyNGIyZTVhLCAweGJhNTAyNmQ3LCAweGI5YTQ3ZTk5LCAweDZiZDY5ZWExLCAweDNlZjkyMmRmLCAweGIxOGUxNjVhLAotCTB4ZjhhNzZkZDQsIDB4ZWNkYjNiNWQsIDB4NmJlYjRkNTgsIDB4M2RkNDhjY2QsIDB4OTdkNDA2ODksIDB4ZGE2OWM4MDgsCi0JMHg4MjkzNDViZSwgMHhmMDI2OTFmZSwgMHhiNDdlNTJjNywgMHg0MDExZTIxNiwgMHhkYTA5ODMxNywgMHg1OTNmNTRkMywKLQkweGI2ZTNhNDZiLCAweGQ2NThiN2FjLCAweGQ1OGZjMWRiLCAweDg1ZmMwZTM3LCAweDY1ODg4YjdkLCAweDNlNzMwOTJiLAotCTB4NDc3M2QxMmUsIDB4ZDQyNGZjZjEsIDB4NGUyNTVlMjksIDB4NmRmN2UyNmYsIDB4YWIwZTdiZjAsIDB4M2IwNTI5OGYsCi0JMHhlOWNiZmQ5MCwgMHhmYzBiMGNhNCwgMHg0ZjJjYjkzNywgMHg1Y2IzYTlhMCwgMHgzOWViNDg5NywgMHg0ZmU4MWQ2MywKLQkweDhjNGY5YzI2LCAweGU3ZTFkZjEwLCAweDVjZTA1NDcwLCAweGFmMjE3YjYwLCAweGI4N2NlYTBmLCAweGNiZTYwOTJhLAotCTB4YWVlZTBlMjMsIDB4NTgyMzljMGIsIDB4NTBmZTg1YWMsIDB4ZTBmMWNjY2EsIDB4MDkyMzdjNzMsIDB4MmFmOTgzZmMsCi0JMHhkZTIzZjMwMywgMHg0M2I2ZjJjNiwgMHg3NmJjNTliMywgMHgxZmI3ZDY4NCwgMHg1ZTI4ZjljZSwgMHhkMzMyZjIxNiwKLQkweDQzYmU1NTI1LCAweGU4YzhiZmU5LCAweDBlZGJiMDM4LCAweGIwYzk3NTIwLCAweDQzY2I1MmVmLCAweDkxZmRmMGFkLAotCTB4ODFlMjc3YWUsIDB4NTIzNjhkYWYsIDB4ZDZjYjQwZmUsIDB4OTJjMzg3MzIsIDB4ODBkNmZiODMsIDB4Mjc0N2E5ZmYsCi0JMHgwZTMzOTNlNCwgMHgxMTYwNmI3MywgMHg5Y2Q1ZmJmNCwgMHg5NmQ2YTY5NiwgMHhmYjBjNWVkZiwgMHhlYzA5OTJlYiwKLQkweDVjMWNhMjJmLCAweGMxMzU5MzI5LCAweDhiZTc4N2YyLCAweDA5ZmJmYTg4LCAweDIwN2ZiZmNjLCAweDIxMzc5YzYxLAotCTB4NzRmODJlMjgsIDB4NzI4M2Q3MDIsIDB4OGZmMDJlNDksIDB4MmNmZGYzYTAsIDB4Zjk3NzViZDAsIDB4YmZjZTkxOWIsCi0JMHhmZjlmOWRiMiwgMHg3NWMzOWMzYiwgMHgzZTcyZWZhOCwgMHg4YmFkZjgyMCwgMHgyNzRjYzVlNywgMHhhN2MwMWQ0ZSwKLQkweDAxZjI4YTJiLCAweGJlNTYzZjVhLCAweDM0YzBmOTBjLCAweGRmZGZjNmUyLCAweGE2ZjA2MGFiLCAweDdjYzFkNzg4LAotCTB4ZjUyODI2NTMsIDB4Y2E1YzNiOGQsIDB4YjU1YWI0ZmEsIDB4OWViZjQyM2UsIDB4NzRlZWY4MTQsIDB4NDZiZGIyYjcsCi0JMHg5NDEzOTdlOCwgMHhlZmFjZTVmYSwgMHg5Y2EyYjI1ZiwgMHhlMWJhN2U0ZCwgMHg5N2YwNDBmMiwgMHg4MjI1ZDU0ZiwKLQkweGU3OTNiMGRmLCAweDE4NGE3NGJiLCAweGY5ZTI2YTFmLCAweDkyMWQ0ZDJlLCAweGE5YTVkZjIyLCAweDg5MDNkZTczLAotCTB4OGQyZWY5NDEsIDB4NzdjYjU3MWQsIDB4MDljOGZhNjEsIDB4ZjgzZjc3OWQsIDB4YTMyYzRmZDUsIDB4MzlkZmE2M2IsCi0JMHgwZTIyZjNjMCwgMHg1MTQ0NWU0MiwgMHg3M2NjZmU4MCwgMHg1MjkwOWY5OCwgMHgzM2QxZmEzMywgMHhkMDBlMzEyYywKLQkweDhhNjlkN2FiLCAweDJlYjhhZmQwLCAweGZmZjBhY2Q2LCAweGFjZTU1ZmFlLCAweDlmYzI3ZTgyLCAweGE2NWNmMjI4LAotCTB4M2I3MzQ4MTksIDB4NjQxZDUzZjMsIDB4OGZjYzVjZjksIDB4YjRmNmU1ZTQsIDB4N2UxMjQxMzcsIDB4YzdlODM1ZTEsCi0JMHhjNGRmOWQ1MiwgMHgyNGYyODI3OCwgMHhmYTJlNjY3MSwgMHgwYjNiNmIwYiwgMHg0YjVmYzE4YiwgMHhiMWZhMTJlNSwKLQkweDFjNzYwOWJkLCAweDQ0MmVlYjVmLCAweGE2MmRkNzNmLCAweDY4M2YxOGU5LCAweDVkYTJkY2VhLCAweGNmZDAwYTY4LAotCTB4YzVkZDA1NWYsIDB4YmJhMDE4OTAsIDB4NGVkMWZmN2UsIDB4ZGM4ZmZhMDMsIDB4YTA2YmViYjIsIDB4YWZiZDdhYWYsCi0JMHgxMmU5Mjg4MCwgMHg3NzI0OGY3ZiwgMHhlYmJjNzA5NiwgMHgxN2QzNWMyYSwgMHgxZWY0Yjg1MSwgMHhmZWMwM2JkNSwKLQkweGUyMDU4YWEzLCAweDU2M2RjNWViLCAweDFhZGE4M2U0LCAweDRkN2VmYzgyLCAweGQ5N2U0MTM5LCAweDRmZjk4NWJiLAotCTB4YmQyZWIzM2UsIDB4OWFmZWY4MTUsIDB4YWE3MjgyNmEsIDB4ZTEwZTM2YzcsIDB4MGY3ODhjYmYsIDB4YTViOGU5M2IsCi0JMHgwNTNkMjk5YiwgMHhiNmJiZmZmMSwgMHhhNGY1ZWIyOSwgMHhmZDc4ZjkxZCwgMHg0NGJhMTBmNiwgMHg1NmY4MjRiZSwKLQkweDNhY2JiMTAzLCAweDUyZWM2Yjg4LCAweDk4ODMyNzhlLCAweDc4NzA3NzdjLCAweDNhYmU3MjE3LCAweGFkYjE4ZWZjLAotCTB4YWUxZjZmMTAsIDB4MmM4NWZjNjEsIDB4YTBkN2E0NzQsIDB4ZjJjYjM0ZmQsIDB4YmFiMDE0NjksIDB4ZTkyYmE1YTcsCi0JMHgzM2U2YmQ0NywgMHg4Y2M3M2IzMiwgMHhmOWYwOTY3ZiwgMHg4NGJkN2NkNSwgMHg2YjM3NDVlYiwgMHgxNDUwYTFhOSwKLQkweDdmNjg3M2QwLCAweDc0ZDQxZmFjLCAweGMwOWEyOWNhLCAweDM4Zjk4YjNhLCAweGJlMDk1ZmExLCAweDVlNTVmMDJhLAotCTB4YTUxOTQ4NDYsIDB4MzkxMzliYjMsIDB4MzY0OWIzYmUsIDB4OGZjZTliZTAsIDB4NDY0MTJlNzQsIDB4ZjdlNzBkOGIsCi0JMHg4YTM0M2Q4MCwgMHg4M2QyOGY3ZiwgMHhhM2NhZTgwNywgMHg3ZTgxN2EzMSwgMHgyOGNkNGFkNywgMHg0N2EwOGM0ZiwKLQkweGU0YmQ3MmQzLCAweGYyZmFmZTQ2LCAweGY0MGM4ZjUyLCAweDRmMzQ5MjMxLCAweGY4MGIzNWI5LCAweGYwMGM1NzZjLAotCTB4MTUyNzRhMWYsIDB4ZmEwMTg5ODksIDB4Y2NiZTI1NjksIDB4OGU4MjkyMWQsIDB4ZmFkYmJkYjAsIDB4MTIzYTU4NjYsCi0JMHgxZWY3ZGZmYywgMHgxMTI2MGJkMywgMHhlZmQxYmZhYSwgMHhmNGM0ZmYzYSwgMHgxMmQyODM5NywgMHhjN2FhMTNhNCwKLQkweGU1ZmQwNDFkLCAweGFmYjMwZDRkLCAweDQwNmRkMjI2LCAweDEyOGIyYWJmLCAweDk0NTNlM2ZmLCAweDEwZjY4OWY1LAotCTB4MDEzY2MwZmEsIDB4YmQzYzNmNjcsIDB4YTRjZjU4NWEsIDB4YTczZjY1NWMsIDB4Yzk0NDVmZTAsIDB4MjVjOGIyYmYsCi0JMHg3NDNmMDc2NiwgMHhiZmIwNWVmOCwgMHg1YzkyNTY2MywgMHg4ZDUyMDc4OCwgMHg0YzM4MzFjZiwgMHhmMTNlYTViYywKLQkweGQ3ZGJmNzNiLCAweGRiZjE4NjI3LCAweDNkYjhlYWY3LCAweGM2YjNhMmEwLCAweDZjZTc2N2MzLCAweDE0N2EwMTIwLAotCTB4ZDI0NmUyZTcsIDB4Zjg1MGE3MmMsIDB4ZjE2M2JmNDksIDB4MGU4MTFiOTEsIDB4MTk5NDVkMjksIDB4M2JlODFlNDksCi0JMHhjM2Y5OThhNCwgMHg3NDEwZjljNCwgMHgxYjZiY2E1NywgMHgyNDBkOWQwNCwgMHg2ZWNlODEwMywgMHg3ZjQyODhlYSwKLQkweDZmNDA4ZGU4LCAweGY5MGI3ZTk0LCAweDBiOWU0MmJjLCAweDJjYjViZGJkLCAweGE0YjJiZTg0LCAweDM5ZWI5NDFjLAotCTB4YWU0MjRmNDAsIDB4OGYxYzk3MGYsIDB4N2EwNTk3ZGYsIDB4ZjZmNTA3YmIsIDB4NDM2YTdhMjAsIDB4M2QyODkyN2EsCi0JMHg0NDI3YmZhMSwgMHg1NWRiMmE1ZSwgMHg3ZWYwMjZmNCwgMHhlNWEzZWI5YywgMHg4NWVkMTlhNCwgMHg0ZTRjZDFhOSwKLQkweDNkOTlhYWZhLCAweGQyMjRkOTRmLCAweDhjMzVlYmRiLCAweDEzODhhYWRlLCAweDI4OWNhZGU5LCAweGE4ZDJhNGU5LAotCTB4OTFlOWFiYWMsIDB4YTRhMzUxN2UsIDB4OWJkMjM3MzcsIDB4ZDEyMzRlOWEsIDB4MzdhMDQwZGIsIDB4YWZlMzJmMjEsCi0JMHgxMzdiNmY0ZSwgMHhmZjMzZmY0ZCwgMHhlZGJkMjg1YSwgMHg3NmI5MmM0ZCwgMHg2YzdjMTM3YSwgMHhkMmE1OTQ0NywKLQkweGE5N2M3MjA0LCAweGY4NjE3Mjg0LCAweDUwYWQ0MWQxLCAweDg1OTBkYTFmLCAweGFiMGVlN2ZhLCAweDM3YjYwMGUzLAotCTB4MmVlMmY2YjMsIDB4MGVmOTBjYTcsIDB4N2I3ODJiMzksIDB4ZWExMmFiOTYsIDB4M2I2OTJiNGQsIDB4MzhlNGJhOWQsCi0JMHg3NDE4ODdjYiwgMHg1YzJmNmIzZiwgMHgwY2MwN2NkZCwgMHgxYjBmMmY3ZSwgMHhiNWYzZjdiZiwgMHhmNzZkMmM3MiwKLQkweGNiZTNlNWFlLCAweGRlYTEyYWRiLCAweGZmOGQ4ZWI0LCAweGMzMjhlMjBjLCAweGRiY2E4ZjIwLCAweGI3NWZiZjBhLAotCTB4Y2NjMWNiMjEsIDB4OGVmN2E2NTcsIDB4MjFkZGZiZTEsIDB4ZTM4MDNjZWQsIDB4MjViOGQ4ZGEsIDB4MDRkMThkODcsCi0JMHhjZmE2NmNlZCwgMHgzOWY3Y2NkZSwgMHg2N2RiMzM2NiwgMHg0Y2I3NDdjMiwgMHhhN2JmODNiMCwgMHhkOGZhODNjZiwKLQkweDUyZmE5YWE3LCAweGVjMTE3M2U0LCAweDJkYTk3MmQ0LCAweGMwZjFjYTAzLCAweGJiYzA2NGJmLCAweGNkOWM5ZDYzLAotCTB4ZTk1YjY4ZTIsIDB4NjQ0YWJlMjcsIDB4N2YxMTBlN2UsIDB4NzU3NzM4ODIsIDB4NTVmMzdlOTAsIDB4OGExM2YzMjIsCi0JMHg4MjM2NDk3ZSwgMHhjYzc5MTJmYSwgMHg4ODg4NzY4YywgMHgyMTFlZjk4ZiwgMHhkODRmOWMxMiwgMHgxNDhiOGMyMywKLQkweGQzOWYxYjJmLCAweGY4YzNmYThjLCAweGU2NGUyMjgxLCAweGRmYTdjZWQ3LCAweGM1ZmNiYzJkLCAweDk4N2U3MGI4LAotCTB4YmQzMjI0N2YsIDB4ZGI4ZjBjZTUsIDB4N2E5N2RmOGIsIDB4MDc3ZjNjNTksIDB4YzAxYTQ5MTAsIDB4ZDYyNmY3NTUsCi0JMHgyYjA4NDRhZCwgMHhiYzAzMjkwZiwgMHg0NmNjN2FiMiwgMHhhOGViYzdlOSwgMHhkMzQ0YmY5MSwgMHg3MDgwZjVhYywKLQkweGZmMzA5NGNiLCAweGYxMTc3MjY4LCAweGFlODZjNWM1LCAweGY4OTZiYzdmLCAweDA4N2YyY2Y0LCAweDU1YjhiZmQ3LAotCTB4ODQ0M2Y5OGYsIDB4MzgzYmI1ZjMsIDB4YzFlOGM4ZmUsIDB4NzJhN2NlNzgsIDB4NzEyNGE1M2MsIDB4MTkzODdkYmIsCi0JMHgwZWVhN2MwZSwgMHg4ZDNiYjc4ZSwgMHhhNzI2M2FjZCwgMHhmZTJhNzRkYiwgMHg3YTA0OTE5MSwgMHhmYTg4YTZjZiwKLQkweGM1NWRiMmI4LCAweGVmZjI5NjVmLCAweGY4N2FlNjJlLCAweGZlODdkMjMyLCAweDFlYjk0ZmMyLCAweGQzMTM2NjdlLAotCTB4ZWQyMmVmYzMsIDB4N2RlYzJmZTgsIDB4MGQ5ZGU5OGMsIDB4MmY0MDdiNzQsIDB4YmU0YWJjY2IsIDB4YjI4Y2Y3NTAsCi0JMHhhY2FlZDBkZSwgMHgwZWIxNTIzNywgMHhhODc1MzdmMywgMHhmMzFlNGVmOCwgMHg2YTZlZjZjMywgMHhkYmZmMDUyOCwKLQkweGEyOGY0N2QyLCAweGUwYTk3N2RmLCAweDlmMjU1ZTMzLCAweGM2N2VlNDIxLCAweDFlYjkxZTY3LCAweDdiNmEzZmZkLAotCTB4ZDRlOWQ4NWQsIDB4MDkyOWJlM2UsIDB4OTk5NjkwZTMsIDB4Y2MzN2EwZjUsIDB4MGY3OTYxODksIDB4ZjkxZjI5YjIsCi0JMHhmNjg4ZDk4MiwgMHhhMGJlMjQ3MiwgMHg1ZTg0ODNiNiwgMHg3ZjBmYWU0MiwgMHgzMjA0YTg1ZSwgMHhlMDgyM2VjMiwKLQkweDVmZWY4MmVmLCAweGI2NTI1ZWMxLCAweGVjMjNmMGFiLCAweDNmMWMxOTk1LCAweGUxZmUyODUzLCAweDc2MTI3ZjNiLAotCTB4OWY4NjMyZDIsIDB4MDg3NWM0YTksIDB4NWRkZWYzZjAsIDB4NmVjMjNmMGMsIDB4OTI3NmU2ZmEsIDB4OTNiNjBlNTMsCi0JMHhhZDc1YmQ4NCwgMHhlZmRhOTJmNiwgMHhjZjViY2UyZSwgMHhkYWNmNjEwMCwgMHgwMjZkOWVkMSwgMHhkZGZlNTM0MCwKLQkweDEzYzRmN2IwLCAweGVmZDAyNDU1LCAweDY4NzEwYjU4LCAweDcyZjU0MTc1LCAweDY2YjU3ZmE1LCAweGM4NTJlOWQyLAotCTB4YWU4OGNjOWYsIDB4NDZlMDE3YjgsIDB4ZmZkMTEzM2EsIDB4ZWMyYzkwZDgsIDB4MzRmZjM2MjcsIDB4ZTE3NWNmOWUsCi0JMHhkYjM4YWNjYiwgMHgyOWM0ZmM5NSwgMHg4MzZiODZmMywgMHg2ZDVlZTNlYywgMHg0M2Q4MmM1ZiwgMHhmYzI0OTdiZCwKLQkweDYxYWRkNDJlLCAweGYxODE1MWUyLCAweGU4N2M3MTBiLCAweGY3YmViYmY3LCAweDRmNzNlMDY3LCAweGYxM2M2MGM0LAotCTB4MmVjYzk3YzIsIDB4Mjg3OWIwYmMsIDB4ZTM5ZjE1ZTYsIDB4ODcwMTU3NzEsIDB4Nzk5Zjg3MjUsIDB4NzBlNzBmZDUsCi0JMHgxMGUxODJlNSwgMHhiYzkzYWViZiwgMHg2ZGE2ZWQ1ZiwgMHg5ZmVlOGMyMywgMHhkM2FkZjljMywgMHhiZThjZjRmOCwKLQkweGVjNDQ1YzU4LCAweGQzZGZiMjNiLCAweGZmNGY3YzgzLCAweDdkYmY5MzFhLCAweDg5ZTYzNDUyLCAweDA0ODdkZmQyLAotCTB4MjczNjg3YzcsIDB4ZjA4MWY4YjMsIDB4ZjkzOTA5YzcsIDB4ZTU2ZjVlNDcsIDB4YTM1YTllZjcsIDB4M2Y5OGZlYzQsCi0JMHhmM2JjNTJlMiwgMHgxZmZmODAyOSwgMHg1N2UwZmQ2MSwgMHhmYzg3NDc3YSwgMHgxMGU2ZmMxYywgMHg5OTUyYTRiNywKLQkweGQ3NDJkYmE0LCAweDZkZjlmMTA1LCAweGRmOWYxMGQ3LCAweGM1ZTRjNDk5LCAweGIwOGI0YTM5LCAweGU3MzY0NWJlLAotCTB4MzNiZGYwOGIsIDB4ODY3OTBlM2MsIDB4YzRjZWIxYzcsIDB4YmVkNmI4YjIsIDB4N2NhY2ZlZmUsIDB4MjI2Nzk3OWIsCi0JMHhiZjQ1ZDFjNCwgMHhhZThjNWI4ZiwgMHgzZWRlOTQzNSwgMHgzNWFlMjE2YywgMHgxZmQ4M2U1NCwgMHhkZTYzMzQzMSwKLQkweGFmYjYyY2NmLCAweGNjNTYzZGRlLCAweGZlZTMxNTEzLCAweDBlN2U1NDk0LCAweGQ1YWNmMWQ2LCAweDg1Y2ExODc1LAotCTB4MzQ3YmNhNmQsIDB4ZDQxZmIwYmQsIDB4N2FiZWQ4MzcsIDB4YmUyOTU4YTMsIDB4ZWFhNGE3ZjcsIDB4ZGVjZjgwNzMsCi0JMHg2N2M0N2VlOSwgMHhhOGE0N2Q3ZiwgMHhkZWZlNzBiYiwgMHg1ZmM4ZmM5YiwgMHgzNDViZjcwOSwgMHgyOTE4ZjNmMCwKLQkweGY4YjU3NjBlLCAweDNjOGUzYTk3LCAweDFlNmY5YzViLCAweGE2YzU5ZTQ3LCAweDFjNzliMzIyLCAweGFjOTE4ZTc5LAotCTB4NzNlZGE3NGQsIDB4ZmZkMTkzM2IsIDB4MzNkNjM0YmUsIDB4ZjY0NzExNDQsIDB4NzhhMzdjYzQsIDB4ZGVjN2EwYmUsCi0JMHhlYzM4ODEwMSwgMHgwZTIwZGY2MywgMHgzYmU5Mzk3YiwgMHg0ZTVlYzM4ZiwgMHg1NTg3MTMwYSwgMHgwMjVmZTljNywKLQkweGMwMTc0MWJkLCAweDA2MTZkZGMzLCAweGJlYjkyYWI3LCAweDE3YTBmYzEyLCAweDhmY2MxMjE2LCAweDhmZDkyNDJlLAotCTB4ZWMzZDA2OGMsIDB4OTE3ODhlODgsIDB4ZmEzZDMyNmYsIDB4NzQ0Yjc4NmEsIDB4ZTE1ZDg4NjksIDB4ZjYyNjhlYmYsCi0JMHhiYWE0ZmRhMCwgMHg2YTNhOGE2ZCwgMHg4Nzc5NDFlNiwgMHgxNGQzNGJlOSwgMHg2NzM0MDdlMywgMHg1YzBmZmEyYiwKLQkweDNkYTJiZDc5LCAweGE4YTQ1M2NiLCAweDUxYmJhY2U3LCAweDViNzA3ZmQxLCAweGY0M2VhMjg1LCAweGZkMTQ1YmQxLAotCTB4MjhkNmYzYWYsIDB4N2ZlMDE3ZWEsIDB4YzhjOWFmOTAsIDB4NjY3ODZlZDcsIDB4OTJmYzYyODYsIDB4ZjUyYzVlMzcsCi0JMHg3Y2I5YjZjMSwgMHg4YjcyZTU2ZSwgMHg3OTVkOWM3OCwgMHgwMmZkY2NhNSwgMHg5ZjZmYzhmYiwgMHhmODk3OThhZiwKLQkweDBhNTQ5ZjI0LCAweGVmZjY0OTcxLCAweDg3YmIyYzVjLCAweGM1OGJiMGIxLCAweGRjNzU4NjA3LCAweDY4NGVmOGE1LAotCTB4YTMyZWQyNWMsIDB4OTEyMWQ1ZGUsIDB4ZjhkMGE0YzcsIDB4ODdjZWQyZTQsIDB4OGFkZTQyZDcsIDB4ZmZhMTdmNWEsCi0JMHhhMGM1YjU3MiwgMHgzZTYzNDRlZiwgMHhhOTlmNWFhNCwgMHhhMDI3MzY0YSwgMHhkMjQ2OTFkZSwgMHhlOWFiNWQxOCwKLQkweDBmMGZkNGMyLCAweDQ4NTFmN2I4LCAweGJhMzIzYzg2LCAweDBhMTc0MTU4LCAweGExZjg1MWZjLCAweDc2YzJlYjdmLAotCTB4MmQzNWU2MzMsIDB4ZDIwMTYzNzksIDB4NDk0NTIxYTMsIDB4MjU3NjUxMTcsIDB4MmFlNGM0NWQsIDB4NTBlY2MyZTksCi0JMHg5OTVjNDFkMiwgMHhmMGQ0MGU5MiwgMHg3NDk1M2FiNiwgMHhiZmY0ZmM0MSwgMHg3ZTNiYzAyYiwgMHhkNDZlOTI4MiwKLQkweDdkMjIyZWYwLCAweGQ4MGYzMTg3LCAweGRmMDAzOTJiLCAweGViMmY3ODZhLCAweGJhZmI4MmQ4LCAweDNjYjhiZTlhLAotCTB4MzkxN2M3OTksIDB4NzQxZjg3N2MsIDB4NmUxMDlhYjYsIDB4Zjg0OTNmMmMsIDB4ZWVkYzBjMDMsIDB4YmY0YTA5MjYsCi0JMHg1NmFiZDA5OCwgMHg4ZGJkNzMyNSwgMHhmMmZjMjNjZiwgMHhkYTBmMjU2YiwgMHhiODcxZmRmMSwgMHgyZmE2NWYzMiwKLQkweDY2ZjllYzBiLCAweGFlNDNmY2MyLCAweGMzMTM5MjA3LCAweGY3ZjExN2ZhLCAweDAxNDVmZTQ4LCAweGZmNWNhOWQ3LAotCTB4ZmYyYzIzYWMsIDB4ZjMxNDc4ZTYsIDB4YmQ1YzdkMGIsIDB4OGI0MmZkMGMsIDB4ZDFlYTMzNDksIDB4NzNjNjZhZTcsCi0JMHhmYjA3YTFmZiwgMHgwMjE5ZTFhOSwgMHg1MjlkMzUzZiwgMHhmOTA0OTU3ZCwgMHgxYWEyZWY1ZiwgMHgxNDI3MjZiMiwKLQkweGU0YTc1MjllLCAweDUzM2RjMzMzLCAweDgxZTQyOWQyLCAweDUwMTNkZDliLCAweDg0ZTg1N2ZhLCAweDEyYmYzMDUyLAotCTB4NWY5OGIwZmEsIDB4MzFmMDRmYzAsIDB4ZmMwMWFmMzEsIDB4NTQwZTcwMzIsIDB4MmFlNDhkN2MsIDB4YzdmNmEyZjEsCi0JMHg5NjMwMzFjMCwgMHhlYzViYzcwNiwgMHhhMzNlMzgyNCwgMHhmYzA0YzNmNiwgMHg4NGZlZDQyZiwgMHhhY2MwZTE3OCwKLQkweDNhMDdiODU2LCAweDNmNDRlMmRjLCAweDlhZTkwOTVmLCAweGZmMGJiZjA5LCAweGFlMjFmYTBiLCAweDg4N2VmZDIzLAotCTB4MmFlYTcyODgsIDB4MWUyOWRkZjEsIDB4NTY3OGZmYzksIDB4YzQ1NzVjNjgsIDB4M2UxODI5ODksIDB4M2MxZDMzZmEsCi0JMHg4MDBmYjI1YSwgMHgxZGVjZDQ3NSwgMHgxNDc0MDg5YSwgMHg5Yzc0OTdlYSwgMHgyM2NlODU3YywgMHhhMWUyZmE2YiwKLQkweDI4MjQxNTVmLCAweDVmN2RjNTA3LCAweDlmYjhmYzk3LCAweDgxZjM4OTNiLCAweDhkZGRmYmUwLCAweDRjZGM3ZGE0LAotCTB4Zjk1MzA3ZjQsIDB4ZjMyNTBiMTgsIDB4YjUwZTkxNWIsIDB4N2Y0NWFkZGUsIDB4MDRlZTg2YjEsIDB4MDQ4ZWJkZTgsCi0JMHgwMmIzM2JjNSwgMHg0Mzk3NThlZCwgMHg0NzlhZDdlYiwgMHhjMmM1MzkzMywgMHgzZTU4MDlmMywgMHg0ZmZjZTEyOCwKLQkweGVkOTE5MWQ4LCAweDE2ZmFlNTM1LCAweDQ5NjYxNjk4LCAweGMxMDVmN2Y0LCAweDc1ODZiOGViLCAweGI4MDk3YzhhLAotCTB4OTA3MTBhMjcsIDB4ZDcwNDI5ODEsIDB4Yzc2Yzk1ZDMsIDB4NGZhMjFiZGYsIDB4NmU4NGViYmQsIDB4YzE5OTVkYzUsCi0JMHg5ZTkzNmU3YSwgMHhiNzYwMzYxYSwgMHg3MTYwNjRiZiwgMHhmZWE1NzZjZCwgMHhmNGMyOWQxYywgMHhlMDcwYzhlMCwKLQkweGJiMmE1OWY5LCAweDhmN2E2YWU2LCAweDRhZWFjZmM4LCAweGY3ZDYyOGI2LCAweDM2MmI5YzYwLCAweGMwNmY3ZTg1LAotCTB4OTJhN2ZmNDksIDB4NGFiZTMwMjYsIDB4YzQzY2M2ZWUsIDB4ZGUzMjFkMGIsIDB4ODliYzZhYTcsIDB4M2RjNjg3ZjEsCi0JMHg5ZWExMWUzMiwgMHgxN2RlMDM0ZSwgMHgwMDcxZGE1ZSwgMHgxNmVlYTVmNSwgMHg3ZWE4ODBjYSwgMHg3ZTg1YjY3MiwKLQkweGUwMTVmMDc5LCAweDI0NmZkYWFmLCAweDMxZTQ0MTdiLCAweDdlZTE0OTBkLCAweDEwNTIwMjg4LCAweGYxMDUwNzljLAotCTB4ZjFiMDk0ZmQsIDB4MjdmY2ZlZmYsIDB4OTNlNzNiNjUsIDB4MWM1ZTcyNTUsIDB4Y2ZlZGEzZGMsIDB4NjVmNmQxNmIsCi0JMHg0N2UxMDRkNiwgMHhiOGFmOGZiZCwgMHg3M2FhNTI1ZCwgMHg3MGExNGYwZCwgMHg2MzJiYTBmYiwgMHgyNTU3Y2MyMywKLQkweDAzNGUxZTc3LCAweDFjOTBhY2Y4LCAweDYzMWI3ZjEwLCAweDBkMWJmNzYwLCAweDczNDc3MmYyLCAweGY0Mzc5ZDkwLAotCTB4NzEwNWQ5NWUsIDB4ZWUyYmQzY2UsIDB4NjlmZGMxYjEsIDB4NDk1MGVmMzEsIDB4YThmMGY3ODMsIDB4MGZmZWYxODUsCi0JMHgzNmVlMjE4YiwgMHhkNjllYjFjYiwgMHg5ZDk4MWI2NiwgMHgxOGJkZjU5OSwgMHg1ZjNkMGU1ZiwgMHhmYmIzZDNiZiwKLQkweDY2ZWNiYTVmLCAweDY3ZDA1N2JjLCAweDk3NmZkMTk1LCAweDQwYjE5MzIwLCAweGUyYmQ2MjE3LCAweDFkZjhhMmRlLAotCTB4ZmU0MzUzZWUsIDB4NGM3ZGY4YTYsIDB4YmJmMGRmNmIsIDB4YjE0YTY5NjksIDB4MTg3YmRlMmIsIDB4YmMzN2Q5NTMsCi0JMHhiYjgwMTRkOSwgMHg0YzZhZDdjOCwgMHhmZDA1YWZkNCwgMHhlYWM4YzdhOCwgMHg3YThiOTljNCwgMHgzYjIzMGFlNCwKLQkweDNkYjhhNzVmLCAweGIwYjA2YTc2LCAweGUwZTY3ZGE3LCAweDI4YzZhODNjLCAweDkzZTYxYzY3LCAweGIwMTMyM2JkLAotCTB4MzhiNGJmM2IsIDB4NWZiOGFjZTMsIDB4YzJjNzliMGIsIDB4ZjllMWU5ZTYsIDB4YWJkZTJiYzMsIDB4YjEyZDdiNDAsCi0JMHg1MzFlN2MzNSwgMHhiYmQzMGE0MywgMHg4YWNhMmZlYiwgMHhhZDdhYTYzYywgMHhlYTkxZjMwZiwgMHhiZjE1ZWEyZiwKLQkweGUyZTE0ODdmLCAweGYzZWEwNDMxLCAweDA3MWEwY2NmLCAweDFjNDA1YmViLCAweDgyZmZhMTZiLCAweDEzYzQzMTc1LAotCTB4M2M4ODk3YTQsIDB4N2MzZDM1NjYsIDB4NjhkZmYxY2QsIDB4MzBlZDEyZDUsIDB4YmFlYzBmYmMsIDB4ZmU1N2JmNTIsCi0JMHg1ZmJkODcyOSwgMHg0NjhhNDhmMywgMHgxZTYxYTFlNCwgMHgzMDM3YjUzMSwgMHhmN2VlYTc5ZSwgMHg3Y2VhMjllZiwKLQkweGU3ZGUzZjMzLCAweGRiMzdjZmVjLCAweDc3YzU3ZTUzLCAweDk2MmYxYTE5LCAweDFiYzFmMjJiLCAweGQ3MTg3OGU5LAotCTB4MmFhYzcxNzgsIDB4NGJjZjljMWYsIDB4MDI5YmIzZTcsIDB4ZTA5MTY2NzksIDB4NWIzMjc1ZmYsIDB4OTFlNDIzNTcsCi0JMHhjZWZmMDdjNSwgMHg5ZGYwMjllOCwgMHhlNjE3OWUwNCwgMHhmOGYzODU4ZiwgMHhmNzhjODc2YywgMHhhMjNkOWY5ZCwKLQkweGNjMzViMDk5LCAweDVjMzkzYmJhLCAweGUyZDQ0ZmFlLCAweDQ3YzFiOTM5LCAweDdjYzI1YjljLCAweGY3MTNmNDVmLAotCTB4M2M3ZGM0MTksIDB4NTU3NmZhZjUsIDB4ZmFjMGU3ZjgsIDB4N2U2NThjNDcsIDB4MmYzY2Y1NjEsIDB4NzU4YWY4NzAsCi0JMHg3YzMxYjJlZiwgMHhmMTRhYmUzNCwgMHgyYzI4Zjk4MSwgMHhjZDk3Nzc0ZiwgMHg4M2Y5MThiZiwgMHg0ZmU3ODk0NSwKLQkweDc2M2FkOTkyLCAweGM0Y2ZlMmRkLCAweGNjODk5Y2ZjLCAweDBmNDQ4ZWFlLCAweDdmZGQ1OGY3LCAweDlhNmUzZDQ1LAotCTB4NDhkNTcyMDksIDB4YjI1OWI2YTksIDB4YWJiNzlkMDQsIDB4ZWUwMDQzZDEsIDB4YTFhZjAyYjIsIDB4YmI2M2Q3NzAsCi0JMHg2M2YzZjc5OCwgMHg3ZTdlZGNlYywgMHg2MTUzOWQ4YywgMHhhOGZlN2MwZiwgMHhmNDAxZjk4YywgMHhhMGE0OWI0MCwKLQkweDA5Y2ZmYjNjLCAweGRlN2MwYjhiLCAweDNmZmVhMTI2LCAweDRhYzg0ZGRmLCAweDZkZTY3N2NhLCAweGUyZmE2M2FiLAotCTB4NzUzMWMzNTMsIDB4OWZiZjdlMDcsIDB4NTQ3OTk3ZjIsIDB4Y2I0Y2RkZGUsIDB4ZjE1NDZiZjksIDB4MDg1NzZlNjEsCi0JMHg4MzcwYmMzOSwgMHgxYjIxZGVjYSwgMHgzY2M2NGJmZSwgMHgyNzk0NjZjZiwgMHgxY2FlN2Y4YiwgMHhhNGRiNzRiZiwKLQkweGVhN2JlMGNmLCAweDRhZmEzNjM4LCAweDcxZmNmZGE5LCAweDRiY2JkNzBhLCAweDgzYzgyOTQ5LCAweDQyZmE5ZmJiLAotCTB4N2M4ZjZiMWYsIDB4N2U1MGNlMWUsIDB4ZjAzMDY4M2IsIDB4ZGQ5NjIzNWQsIDB4MmYyYzE2MmQsIDB4NDFiYjM4YTYsCi0JMHhkZDUzZTgzZSwgMHg3YmQ3YzBiZCwgMHhiYWYwNjFkZiwgMHhjOTgxN2Y1MCwgMHgzOWJjYjgwYiwgMHg4NGI5ZjgxMiwKLQkweDkzMzBjZWYyLCAweDg0MWY3OWM1LCAweDJlMTRlYzdiLCAweGZiOTMwMzA2LCAweDM1ZmRkYzcyLCAweDVlOTU3MTkzLAotCTB4N2UxMThiYTQsIDB4Y2EyYjFjY2IsIDB4ZDAwYTQ3MjMsIDB4ZTM3M2MyN2YsIDB4MTNmYzAwMjcsIDB4YzI3MThiOWYsCi0JMHg3Yjk3ZDZiZSwgMHhjMzdmMDY5ZiwgMHhlOGQxNTVmYSwgMHg1ODFhMzVmZiwgMHg3YjY3Mzk5YywgMHhjMGVjMDZiOSwKLQkweGZiNDk3NmViLCAweGQ0ZDFkZmMxLCAweGRlMTcyYWI5LCAweGEzZDkzMDE3LCAweGFlMjEzZjMxLCAweDkzMTY1ZTczLAotCTB4MDkzYmVjNzMsIDB4ODAxZGFlYWQsIDB4NTdiODA0Y2YsIDB4M2ViNWQ3NDcsIDB4ZjhjMjliY2IsIDB4MWE4M2QzMzgsCi0JMHgyNTdiY2MzOSwgMHgzZGMwN2ZmYiwgMHgzMjFiY2Y2YiwgMHhhMGJjODNkZSwgMHhkN2ZjZjk2NSwgMHg5MTVmODYxMywKLQkweDBlZGYwNTBmLCAweDI5YmFmN2Q2LCAweDQwZDBjOGRjLCAweGM5NzZmYWZkLCAweDc3YzU4YmE3LCAweDUxNWUzMDI0LAotCTB4MzQ5N2RhYmYsIDB4NmZkMWU0MTMsIDB4ZTllZjE4YjQsIDB4NTJlZmQ3NWYsIDB4MjNhZTIwMmIsIDB4Yzk0Y2QwZTQsCi0JMHg1YzQ3ZmNjMiwgMHhjNDRlOWQ5ZiwgMHhhYTE3MTYzZiwgMHg5ZDMyNzRlNSwgMHg2MzMzYjFlYiwgMHgxM2U3N2MxOCwKLQkweDliOGMyNjQ3LCAweDFhYjEyNDYxLCAweDU2NjY5NDdhLCAweGZlZTA5N2I2LCAweGQwNTY3NGVhLCAweDIzN2M0NDA3LAotCTB4ZGUxMTFlYjIsIDB4YjRmOGQzZWYsIDB4OTRjN2RkOTksIDB4MjRjMDg2ZmEsIDB4NzJhN2MxNjcsIDB4M2EzN2YzODUsCi0JMHhjNjlkYzk5NSwgMHg0YjhmY2MyMSwgMHhjNDI3MTEwNiwgMHgxZDVmMWFkMywgMHg3MmVjMDViYSwgMHhkYjhiMzQ0MywKLQkweDg0NjRiZTUyLCAweDgxMGU1NmY3LCAweDVlZmJhNmJjLCAweDdiMTQ0YWY2LCAweGM3ZGM0MzNmLCAweGUxMGIzOGI2LAotCTB4NGQ1MzYzN2UsIDB4YjdkZTExNDYsIDB4ZWY4N2Q5M2EsIDB4ZmNlOGY0MjAsIDB4Mjk3ZTc4OTksIDB4NGNhODkxYmYsCi0JMHhiNmQzNzNiYywgMHhjZTk0YjU1YiwgMHgzZWE4ZDMxYiwgMHgzNjZiZWI0NiwgMHgwYjU1YmNlZCwgMHhmZGIyZTRmNywKLQkweGZlYjQzNThiLCAweDU4YjdhNmZjLCAweDRmZmVmNWZiLCAweGE2ZjJmZWExLCAweGM4YmRhYzEzLCAweGY1YTY1OGJmLAotCTB4NjEzZTliNjMsIDB4YTRkMDYwZWQsIDB4NGQ5N2YyMTEsIDB4ZTg3YWI3ZGQsIDB4NWNhZDY3ZmMsIDB4ZjFmODcxZGYsCi0JMHhkZWUzNmExZSwgMHg3ZjYwOWFhMSwgMHg4Y2E5OWJlMiwgMHg2MjhkOWQ1ZiwgMHg5MTY2Y2VmZCwgMHhlZjAwMzViOSwKLQkweDVmZmRmMGRjLCAweDI0ZjBkNTQ4LCAweGM1MmMzNjhkLCAweDkyNzhjNTdlLCAweDIyZGM3ZTEyLCAweGJmMTk2ZTNlLAotCTB4ODYyNjNhODcsIDB4ZjE2MjhiYWMsIDB4YzUyYzRmMjksIDB4YTFjZWMxYzMsIDB4OTg5YjVmMTgsIDB4ZjM3MGUzNmEsCi0JMHg2MjI1M2JlMywgMHgzMTRmMDExZSwgMHg1ZGVlZjg5ZiwgMHhiZTU5OTcyMCwgMHg5ZTcwNmQ1YSwgMHg3ZjFjZGRmYSwKLQkweGYwNmIzYmY0LCAweGVjOWM4MzNiLCAweDQ2NGQ2NmZlLCAweGUyOGZlMDIxLCAweGE2ZjFjYjRkLCAweDdiODliYzA1LAotCTB4YjVhZjMwZGYsIDB4NzBmZmY5MDAsIDB4YmMxZjViZjAsIDB4MDU2N2ZiNDQsIDB4OTNhNmFkZDYsIDB4YTdjNjU0OTYsCi0JMHhiOGIyYjU5NywgMHgwNzM1OWY2MiwgMHgwYzRjNjllOSwgMHg1OGEyZjc3ZiwgMHgxYzYzOGZiOSwgMHg1YWE2NmYwZSwKLQkweDAxMDczZGY5LCAweGJmMDk2NGFmLCAweDk4ZTFjYWQzLCAweDkzNTIxZmUxLCAweGZkZjdjZGZmLCAweDc3Y2Y1ZjMwLAotCTB4N2MyMGVmYmQsIDB4OGFmZGUxMzksIDB4NmRkNzFkODMsIDB4YjFiMWZiNjUsIDB4Y2Y0YTU0YmMsIDB4MWVmM2Q0MzYsCi0JMHg3Njc3Y2M1NiwgMHgxOTdjNmE5NSwgMHg1ZmIwOTAzZCwgMHg3ZjhlMGU1YiwgMHgyMDc3YmY5MCwgMHg3MTgyZjNkZSwKLQkweDNmNGMwNTU5LCAweGRjNTViZDA1LCAweDliOWUyN2QzLCAweGI0ZmZiMDQ5LCAweDNiN2UzZWZmLCAweGQ4MWIzN2JiLAotCTB4N2NjNWFkZTcsIDB4NGZiZTE2OWYsIDB4NTdhN2RiMGIsIDB4NzhlNGFmNDEsIDB4NzM1NGU2NWYsIDB4YzNmNzFkMjgsCi0JMHhiY2JlN2ZiZiwgMHhlMjlmM2UyMiwgMHgwZjliODc5YywgMHhiYzI0NzVjZSwgMHhmMWFlZmMxYywgMHg4MmE5ZDYyMiwKLQkweDU1OWMzZjY3LCAweDg0ZjAxM2ViLCAweGYyZTM4ZGYzLCAweGQ2Mjk3NDk0LCAweGYzYTQ3MmY5LCAweGJmMmRmNTlkLAotCTB4MzVjNmNlNTcsIDB4ZjdlNTgwZmMsIDB4YWU5MmJiMTIsIDB4Njk2NTc2MWIsIDB4YzYyZTdlMjAsIDB4MmVjZjAzZTUsCi0JMHgzZWJkZjgwOSwgMHg2MDc2ZTU0YiwgMHg5MDg4YzkwNiwgMHgzNTJlNzc4ZiwgMHg3ZjBjYmZiYywgMHhiZDgxZGI1NywKLQkweGFjZWY5NjU2LCAweDI2ZjQwN2Y2LCAweDEwOWNiYTNhLCAweGVlY2YzYTQ3LCAweGY5NTI4ZjZmLCAweGIyOWUyMDJmLAotCTB4MTcxODE0ZDMsIDB4ZmFjYTJmOTAsIDB4YmYwNjM0YzgsIDB4MWY0YmZmNTAsIDB4MzYyZDJmZGUsIDB4Nzc2OGJjNTQsCi0JMHgzMWVlYmI1MCwgMHhiZmMwNmRjZCwgMHhlZTJhZTM4YiwgMHg5OGY1YTJjOSwgMHhjMDZkZGQzNCwgMHgyYmQzOGJiZiwKLQkweGZjYTJjOGJlLCAweDY3YTY5Y2RjLCAweGJlMmExYmY1LCAweDYzZmE4NmM4LCAweDhjN2ZkNjdhLCAweGY3ZTA0NWYzLAotCTB4NmRiZmEzYzQsIDB4OGY0MDZhNmMsIDB4YjNiMzRkODgsIDB4MWE5NTUzZmIsIDB4NWZhYmZmN2MsIDB4MDE5ZGY5N2YsCi0JMHhkNzAxMTdmNSwgMHg0MWIxNjU0OCwgMHg0ZTJlMWNkMywgMHhlODI2OWM5NSwgMHhjYTEzYzU4MSwgMHg5MGVkN2ZlMCwKLQkweDdjZWRjNGY3LCAweGU3NjE1NmJmLCAweGZiYjJjNmY3LCAweGZlZmJiZGI3LCAweGIyMjdmNzg2LCAweDY5MTlkY2QzLAotCTB4MzE0ZDVkNzQsIDB4NjhiMjczZGQsIDB4ZmJjYzc1N2QsIDB4OWM5MmFmMTgsIDB4M2YwMTBmNTQsIDB4NjY0MmRkODcsCi0JMHhkZDRhZjVkMSwgMHgyZmEwNWRlYiwgMHg0NjFjYmI5MSwgMHhmYjk1YzIyZCwgMHgzMTRkZTA3ZCwgMHg1ZTU3YmYwYSwKLQkweGU5N2RjZGZkLCAweDU4MmUzM2VjLCAweDA3Y2U0OGM3LCAweGZhZmQ1ZTlhLCAweDM2NzM4ODJiLCAweGMwMzkzNTlkLAotCTB4NzNiMjNlMmQsIDB4NmZhMDNkZDMsIDB4ZjM3Y2VjOGQsIDB4ZDk4NzI2NmIsIDB4ZWViMTBmN2QsIDB4YTNkN2UwOTEsCi0JMHgxODc1OTdiZiwgMHgzYjIzZmQ3MCwgMHhmZDA0NWJhZiwgMHgzM2ExZmQ0NywgMHhhNmU0ZTgwNywgMHg2MDU2YmU1MywKLQkweDVlZmJiZDBiLCAweDFmZGU1NzRlLCAweDc5OGFlY2ZkLCAweDRkZTMxMThjLCAweGU4OWYxZTAyLCAweDE0OTllODA5LAotCTB4NzgzMzM3MWUsIDB4YWI3Y2MyNWMsIDB4NmI2M2M0OWUsIDB4MmI5N2E4ZmQsIDB4YmQ1MGQzZWYsIDB4MTdhNmUzMWQsCi0JMHhmYzAzYjQ0OCwgMHhiMzVlZTJmOCwgMHhiMjc4NWZkYSwgMHhmZThmZWU5YSwgMHg1ZDFmNTM3ZSwgMHgzY2RlOTA0MSwKLQkweDMyOTFhMmU2LCAweDljYmQ0MDkyLCAweDRhZjUxNTU4LCAweDdmYTJhYTYzLCAweGQxNGIyNTk1LCAweDNhZTUzZTNlLAotCTB4N2I0NGZiNDUsIDB4MjkzZWEyYTEsIDB4ZmZhMmE0NzcsIDB4NDU3MjhlNmQsIDB4ODliMmY2ZmQsIDB4Y2VkNWZlOGEsCi0JMHhkMGJkNDU2YSwgMHgzZmU4YWVkNywgMHhiMjg3NDhmYywgMHgwMTkxMzhmZCwgMHgxZDI3NDUwZiwgMHhmOTJjYTAwNywKLQkweGM3NmU4OWQ4LCAweDA3Y2QzM2QyLCAweDI1ZjkxY2EwLCAweDVmZGE4NzAzLCAweGY2YzVlMzdhLCAweGYwYmJmMDAzLAotCTB4YzdlZmFhOTcsIDB4MzRlOWZmMDgsIDB4ODdkNWU0ZDksIDB4NjhhNjkzZjcsIDB4ZjI1ZTc5NjksIDB4MzU5MTNmMjMsCi0JMHgyZDhjN2VlYywgMHhlMDJmN2RkNiwgMHgxOThmZGM0ZCwgMHg4YTUyZmUwMywgMHhlN2I5YWE4NCwgMHg1OWYwYmRkOSwKLQkweDEyNzY1ZmNjLCAweDY5ZmMwMzEwLCAweDdjZmQxOWJhLCAweGNmY2Q3NTI3LCAweGJkYzU5OWZmLCAweGJiZGYwMDA3LAotCTB4YjE1NmFmYTksIDB4ZGQxNzMxZWYsIDB4OTM5NzdkOGEsIDB4MmQzYzJhNjUsIDB4MmNhYmQ0NTcsIDB4MWZmNDUwM2YsCi0JMHhkMTRhYjI5ZiwgMHg5MGZlZDEzZSwgMHgyYjBmNGYwYSwgMHgzNjM5YjdlYSwgMHg0NWI0ZjBhOSwgMHgyOGRmYTc4NSwKLQkweDcwZWRmYmRhLCAweDE1N2FiZmVlLCAweDFjYjQ0ZWZjLCAweDA0YWFlZmVkLCAweGE2N2NkYzNjLCAweGQ2NTFmMTBmLAotCTB4NzgwOTU2ZDUsIDB4M2I2NGYxYmEsIDB4ZTdkOGFiZTIsIDB4NTk3NjA0YWEsIDB4MDBmOWE0N2EsIDB4N2Y2YTNlOTQsCi0JMHg1YWQ3YjhjMSwgMHhkODNjYjA1MiwgMHhkNWZmNDc2MiwgMHgyYzVjOTZlMSwgMHhmMDM4YjQ4ZiwgMHg5NGI3ZGZmNywKLQkweDhiNTZmOTYxLCAweDZjZmZjYjEzLCAweDU3NjU4MDk5LCAweGY2Y2IwYjhiLCAweGJmZWM3Njk2LCAweGY5ODNhNWIzLAotCTB4ZGZmYmUyYmYsIDB4N2UwMDE4MTUsIDB4YmY4ZDFlODEsIDB4M2M1NmVlMTEsIDB4ZTQzNGQ4ZjcsIDB4ZmVkMTNkOWYsCi0JMHgyNmFmYTgxZSwgMHg5NjM2ZGU3NywgMHg4MWU3OGQzMiwgMHhjYzlkODA4OSwgMHhjZWU5YTNjYiwgMHhiZjk0ZTlkMSwKLQkweGFjMWM4NWVkLCAweDQxZmU0MDkyLCAweDA4NTljNmJiLCAweGI0ZTFmODdhLCAweDBlZDEzZjA1LCAweDU1ODFlNDIwLAotCTB4OTU4YjE0YWUsIDB4OGViNDhkZDUsIDB4NjQzMTg2YzgsIDB4MTk5YzRmYzEsIDB4MjUxMDVlNzQsIDB4NzA1ODRjMTgsCi0JMHhhMzdiZDQxYiwgMHhiNGRlZmI1OCwgMHhmMjc5YjcwNSwgMHg2MzcxMDdmZSwgMHhlMTdlNDg2NywgMHg3MTMwYjRlMSwKLQkweGQ4Y2ZlN2UzLCAweDM5Y2ZlMGNkLCAweDE5YTg2OTc2LCAweGZiOGM3MWUwLCAweDUwYTQ5Y2I1LCAweGU1OTY4ZjM3LAotCTB4YzgxZDQyZGEsIDB4YmQyYTkzZDksIDB4ZTQ1Mzk0NDQsIDB4ZGU2MWI3ZjIsIDB4MGVlMzhkNzYsIDB4NDViZTZmY2MsCi0JMHg2YjdlODA0NywgMHg4YWVmNjYyNCwgMHg5OWQzZGI3ZSwgMHg5YjdiZDBiZCwgMHhlM2E5ZWQwMSwgMHhiYzIyZTcxYSwKLQkweDNkZjUyNzE3LCAweDQ5ZWU3MDAxLCAweGE5Y2EzZWZiLCAweDI2NWY3MzVlLCAweGVkM2JhZmMwLCAweGQ4OWVhYzdiLAotCTB4MDhlNDg0ZjcsIDB4N2MxOGViYWEsIDB4ZjdiYjRmZGUsIDB4ZDljZjg2YmIsIDB4Zjg1MDkyYjQsIDB4NTg1OWE2ZjQsCi0JMHgxY2U3YzBkYywgMHhhZjAwN2E4MCwgMHgzNjc2YWYxZiwgMHhkY2FjOWM2MCwgMHg3MWY2MTgzOSwgMHhlNzYwNjVjYywKLQkweGZiYzY2NWQ3LCAweDJjZWI0NDEzLCAweGJmYzgyM2I5LCAweGMzYWU5NzUzLCAweGEyZTE1MzcxLCAweDY3MzlmODFiLAotCTB4ZDVjZTc4YzgsIDB4OWQyODdjZjAsIDB4Mjc0ODFmZDksIDB4OGY0ZTY3NjAsIDB4YjhlMGJiNDEsIDB4NTczN2RkODYsCi0JMHg5ZDI2N2ZmNywgMHgxMTczZDljOSwgMHgwZGZkODNkZSwgMHg5NGM1N2I4NywgMHhkMzc3ZTc4NiwgMHg0NDU3N2FmOSwKLQkweGFlYmRkNGUxLCAweGY1OGZhOGExLCAweDlmNzg0YjM2LCAweGYzNGNmN2I3LCAweDcwNmVkNjc5LCAweGRjNjA5MDcwLAotCTB4MWZmYzI2NzIsIDB4ZjNiZTdmNmQsIDB4OTFmZWJmOWUsIDB4NDU3ZjdmZjYsIDB4ODg2NTAzOGMsIDB4ZGY4NDdhZTUsCi0JMHg3Njc5ZGUwYywgMHhhN2Y1MTFiYywgMHgyYTAzMzVkOSwgMHhlNGNlMmU0MCwgMHg2NjM5YjA3MSwgMHhjMzg2MTI2ZCwKLQkweDNjM2Q1NmI0LCAweDU0ZDBiODlkLCAweDkwNDI5NmI4LCAweGQ2YTg0ZTJjLCAweDRiNDU1M2MzLCAweDg1YWY5NjMzLAotCTB4MGY0MWFlZjIsIDB4OWYwOWUxZWIsIDB4NmIxZGJjZmEsIDB4YTA2ZDhkNDEsIDB4ZjkwNGI4NDcsIDB4MGI2OGZmOWYsCi0JMHg5NWRjZDc1ZCwgMHg3M2Q5OWRiMiwgMHhlYjNhYWU1YywgMHg4NzFlNTFiZSwgMHgzY2UzZGZhMCwgMHgwMTAyODZhZiwKLQkweGQzNjdkNWVkLCAweGZiN2Y4NTI1LCAweDYxYWYwZTU5LCAweGNjN2Y1Y2U5LCAweDFlZWNmOTI3LCAweDYwOWM3ZjUxLAotCTB4ZWVmYjljMzgsIDB4NDQ4NzQ3ZDksIDB4ZGIyODIzODgsIDB4MmVmOGZlYjksIDB4ZmQ1NmU3N2YsIDB4ZWVmODgzZWUsCi0JMHhjN2VmMWM3MywgMHg0MTMyOTRmNSwgMHhlNGMxOWM5ZiwgMHgxN2VkNDE0MCwgMHhmZWU4NGJhYiwgMHgxYTJkM2EwYiwKLQkweDZkY2ZkMzhjLCAweGI4NzgwZGQ4LCAweGE4ZjFjMWQwLCAweDllNzAxZDIzLCAweGJkZTY3OGE2LCAweGFhNGQzOThmLAotCTB4OTM1N2ExN2IsIDB4NGIyZThlOTcsIDB4MmNiY2IwNjUsIDB4ODMyYWJiZjYsIDB4NWY1OTY1ZTUsIDB4NDVjODI1NWIsCi0JMHgyZDdkMWYyMSwgMHg2ZTNmMzk0YiwgMHhiMDdhM2U0NiwgMHgwZmQ2MjU2NSwgMHgzY2IwNzhiNywgMHhmMzhlYjJkMiwKLQkweDdmNmMzNmUzLCAweGNlNTFlNWFiLCAweDFmOWNiZDhmLCAweDc3YmY4MzNmLCAweGY5NjJkNGI2LCAweGNiMWI4YjZhLAotCTB4MzNkY2UzMDcsIDB4M2UyMjZlMDAsIDB4YzZlOGQ1MzksIDB4OWI0M2QxYmMsIDB4NWZlMjA0MGMsIDB4OTgwZDNhMTcsCi0JMHhjNDRmNDA5NywgMHg0MDI3OGYxMywgMHhlZjAxOGRkZSwgMHg2ZmYzYTlmNSwgMHg5ZmJlN2NkNCwgMHhiN2RmNDIxZSwKLQkweDE4OWU5YzU4LCAweGZhMDMzNzk0LCAweGY0YzhjMGUyLCAweGNkZDg4Yzc0LCAweGVkZmU5N2MwLCAweDBmOTA1N2YxLAotCTB4Y2RkYmIzMWQsIDB4YTRiNzRmYTAsIDB4MzhiY2EyNzcsIDB4NzU5YmI0ZTYsIDB4YmM3OWVlYjQsIDB4ZWRiYmI1OTMsCi0JMHhhZmFkMDM2NiwgMHhkYWM3ZGY0YSwgMHgxNDczNzYzZCwgMHg3YzdlYWZhZCwgMHgxMmY3NmIxZiwgMHhmODNmMjIwYywKLQkweGM3Yzg2YmY4LCAweDEwNzQ4OWNhLCAweDMxYTU0N2NlLCAweDE3MTUyYzZiLCAweDFmOTc1ZTU0LCAweDNlMzE3Mzg0LAotCTB4Mzg1OGRlNjUsIDB4M2Q3MjVmMTcsIDB4ZDU3ZGEyN2QsIDB4Y2E0ZmE4NDEsIDB4YWI4NWEyZGQsIDB4ZTE1MzRlZGYsCi0JMHg5MTU3MTgxYSwgMHg3MTg1YWQ1MCwgMHhhZjk2MzM2MywgMHgwNmUzNzE4MSwgMHgxZTBkYWMzZCwgMHhjNzZmMjEzNywKLQkweGVhZGZhODFhLCAweGZkMDVhMmQ4LCAweGM3Y2U0YmY0LCAweDJlYTIzY2M0LCAweDE2OWYwNWRhLCAweDNhYzM2MGY5LAotCTB4MGEwZjI4NWQsIDB4MGYyODVjM2EsIDB4YTYyYTVjMDQsIDB4N2UwMDNmNTYsIDB4YzkwZWE2YzcsIDB4YTYzYWMxMjIsCi0JMHg3MWMxZmQ0YSwgMHg4NDZiYTVjOCwgMHhiZjI5MjJmNywgMHg4ZWZlOThkZSwgMHhkNzFkMTU3OSwgMHhiMTFiZjUwNCwKLQkweGE2NTU5M2ZlLCAweDZmN2Y5NGVmLCAweGRmMjMwZjRkLCAweDBlZjNmMDRlLCAweGJiZjIxZWYyLCAweDNiZDllODRmLAotCTB4NWMwMzVmMWQsIDB4OWI5ZWYwNGEsIDB4MjRiNWRmMTksIDB4ZTNmYTMzNmUsIDB4M2Q4MzM2NDEsIDB4YjY5ZTcyMDQsCi0JMHgxOTY1ZTcwZiwgMHg2NDUzZmI5NywgMHhjZWY4NzZlNywgMHhjM2Y5OTE4YiwgMHhhYmZjZmNjYiwgMHg2ODQ0NGRlZSwKLQkweDRmNjFmY2U3LCAweDRiZDk4NWJhLCAweDA2ODc1ZGZjLCAweGQwN2U4NmQyLCAweGE5OTdlNWFiLCAweGY5ZDVhMWYzLAotCTB4NTlmZjIyMTYsIDB4NGY1MTVmOWQsIDB4YTEzMDdiZDgsIDB4ZGVlY2NlNzksIDB4YjM5ZTQ4NmUsIDB4MTlhMmFiYjAsCi0JMHg1ZTA1YWQzZiwgMHg3OGY4ZTk0MywgMHgwOTU3Y2YzYSwgMHhhYmM5YzM4NSwgMHgzODY0ZTFjMCwgMHg4N2VjODQzOCwKLQkweDJlZWYzMTc4LCAweDc0YzZmZjI0LCAweGRlYWNmMTFjLCAweGIyMjc3MTE3LCAweDNmODkzNmY3LCAweDVkMDRmZWVjLAotCTB4OGRhZmVlODQsIDB4ZTBjYjVmYzEsIDB4YjNiYmY1NGYsIDB4YjlhYWU3ODAsIDB4YWI3ZTAyNjYsIDB4YzdmM2ZlNjAsCi0JMHgzNTFmZjAyYiwgMHhmOGFlZmI1ZiwgMHgwZGI5YjRlNSwgMHg1MDgwZmRlYywgMHgxYzM5NzYzZSwgMHhjMmY3MTMxZiwKLQkweDUzZDBhNWQ1LCAweGU0MWEzZWUxLCAweDM0M2JjMjAxLCAweDRiZWZlNzYwLCAweDgwNjc0Nzc2LCAweGY3ZDE1NjdlLAotCTB4ZDBlYzA2OTUsIDB4ZjM3ZWY2MDQsIDB4OWNkYjliMjIsIDB4ZTkyMmUxNDEsIDB4Yzg4MTdlNTksIDB4ZjFhMzNkYzMsCi0JMHhiNmY0MTZmYywgMHhjOWU2Y2RiNCwgMHhiMDgzMmZhOCwgMHg0YWM3NjdhMCwgMHg3ZTNmZTBlYiwgMHg4NzhhZWFkNiwKLQkweGFmZDcyNDcxLCAweDNhMDc3ZTBmLCAweDdhNjk5ZTUyLCAweGExN2Y5MzA2LCAweDVmZTQ1MTI1LCAweGZhZjk2ZWY2LAotCTB4OGEyZmRlOWEsIDB4NzkyYThmMDQsIDB4NDFlZTFmYjQsIDB4NDE4YjI4NWMsIDB4MTEyZGQ5ZjksIDB4ZGIzZmJjMWYsCi0JMHg3YTg0OWU1ZCwgMHhiZDAwZjc0YiwgMHhkYWVmY2ExNiwgMHgzMDFlZWUyZSwgMHhkYjU3ZTcwNCwgMHg2NWE5ZGRjNywKLQkweDcxZGRmNjQ2LCAweGQwZWNhMDEzLCAweDA3OWQxZmJiLCAweDA2OTFlMGZlLCAweGNkYmM5MzhjLCAweGM3MjcwZmYzLAotCTB4YjdjM2ZjYjAsIDB4Yzk4MGZkZjksIDB4MDA0YTVlMWYsIDB4ZjY1OTM4ZjksIDB4YTE0ODE1MjUsIDB4MWJmNzc2NzYsCi0JMHgwNWVjMmFiMywgMHhkZDM2ZjZhMSwgMHhlZmQ4NThlZiwgMHg5NzZlZWNkNSwgMHg2MDA2Y2JiMSwgMHhmNWRmZGI1NSwKLQkweDkwMjJiZjJiLCAweGU1NmEzZGU3LCAweGUzZjkwMjI1LCAweGJjN2I3M2ZmLCAweGE0ZjUxMzJiLCAweDk1MzNlNGFiLAotCTB4NDE1Yjc5ZjUsIDB4ODk3MzE4ZmYsIDB4MjI4ZTM5ZTUsIDB4OTUyNWNlMmMsIDB4OWJmMmM5YmQsIDB4ZGJiNmE5NzgsCi0JMHhiZGE4NjhlNywgMHhhNzZhMWQ5ZSwgMHhhNWZkOTJjZiwgMHhkNDIxZWY1MCwgMHhkODA5Y2Y1ZSwgMHgzNzRlYzJlYiwKLQkweDQ1YmY5NjEwLCAweDM4MDZmN2VkLCAweGRkYjllNzE3LCAweDhmMTMzMTRlLCAweDdjM2YyMTc5LCAweGM4N2RjZTZmLAotCTB4OWYzMGEyMTcsIDB4OGY4ZWY5ZTMsIDB4N2ZhZDYxMTIsIDB4YzVmYzRhZTksIDB4YmQwMGY2MmIsIDB4MjJiZTU5MzcsCi0JMHhmNWZhNzljMSwgMHhjMTIwYmYyYiwgMHg3Mzc1YmNlZiwgMHg4ZTliNzczZiwgMHhmZmFhNDNkZCwgMHg4YTcyOGNhNywKLQkweDgwNzViNWNhLCAweDlhZjI3YWE3LCAweDc5MjBlZWZlLCAweGFiZmZkYTRiLCAweDI4YzNkZTFmLCAweDM1ODZhYmZmLAotCTB4YjRmNWJjODEsIDB4N2VkMjc2NGMsIDB4MjIzZWRjZDUsIDB4YWM3NmY5MWUsIDB4MzI5MjdiNzMsIDB4Mjg5ZWQ2NDYsCi0JMHhlYWNiYmZmYSwgMHgxM2ZmNDQwMywgMHhiYmY0OWQ5MywgMHg5ZGEyYTlkNSwgMHhkNzhlYmY4ZiwgMHg2Yzc2ZWU4OSwKLQkweDBkZjMxMmNmLCAweDZiMzM3NTY1LCAweDcyZjhjYjZmLCAweDgyMzFlODMyLCAweGUwY2M2ZmJmLCAweDQ3YmY5MWYyLAotCTB4NjNmZGY5NDQsIDB4Y2M1Nzg5MTksIDB4NzNiNjUxYmYsIDB4MWZkZTIwNzksIDB4YzRlMWZhYWEsIDB4NmU3MGEzOTgsCi0JMHhiNWNjMjVkYiwgMHg4NzVmYmZhYiwgMHhiNjczZmJmZSwgMHhmN2UwODJmNiwgMHg4ZTllNDU0YSwgMHg3OThjZDJhYiwKLQkweDBkMmYwZDUzLCAweDIyNzQwYWRkLCAweDgxMjc4ZjliLCAweGUzYzVkMmRlLCAweDA5YjI1NWYxLCAweDM2MTcyZWUzLAotCTB4NDkxZWJlMzAsIDB4ZjJiYzViZWYsIDB4NDJiZTA1MTUsIDB4YzBmYmY5ZGEsIDB4ZGZhNDk4MTgsIDB4NjQ5M2ZmM2IsCi0JMHhhMGYzM2VmNiwgMHhlODBiY2MyZSwgMHhkZTBjN2NlMCwgMHhjMzdiODQ3YiwgMHgyMTJiZmYyMiwgMHg1ZWMxMzg4NywKLQkweDhhMzk3ODRlLCAweDcxZjk1M2JkLCAweGM1ZGJmMjE3LCAweDc2N2YzMzJmLCAweDI4MDNhNmMzLCAweDc2Y2JlNmRmLAotCTB4Yzg5ZDI3ZjQsIDB4ZjAwYWJmNzYsIDB4MGQ3NzMxZTksIDB4Y2FmODM4YzEsIDB4M2Y1ZDcxNTcsIDB4ZGM3ODViYjIsCi0JMHgxODJmMmZhYiwgMHhlMTQzODc5ZSwgMHhjMGFiZmJmZiwgMHg0YWZmZjdmZiwgMHhmYzgyZWZmOCwgMHhiYjczZTAzMiwKLQkweDRkYmVkMGEzLCAweDBlZjVmYWQ2LCAweDY0OWU2Yjg4LCAweGU3OWU1Y2VmLCAweGZhZWQyYjcwLCAweGY4MTVkZjEwLAotCTB4ZDNiMzA2NjcsIDB4ZGM1ODNhZTIsIDB4ODk2NWU0NDYsIDB4YzMzM2ZlZWYsIDB4MWU3NGVjY2MsIDB4NzlhODY5MWYsCi0JMHg0N2M0MzQ2YiwgMHhjNGM2ZmUwNCwgMHg3N2YwNzY5MCwgMHgzODM4M2M1MywgMHgwNzgwMWMxZSwgMHg5YzQwZWYwMSwKLQkweDBhY2I4ZTg0LCAweGIwYWVkNzllLCAweDIzZGMwNTBmLCAweDdkMzU2MzlkLCAweGUzYWI3NTg4LCAweDBlOTk3NzA2LAotCTB4ZWY3ZTAwOTYsIDB4ODQ3OTg2ZmEsIDB4YjBiNGNmZGYsIDB4Y2M3ZWI0ZjksIDB4ZjAxMWZjMTMsIDB4MWUwMGM0Y2EsCi0JMHhlZjk0MDM3NSwgMHg0NmJjNTE4MCwgMHgyMmI5MjgwZCwgMHhmZmVkOTVkZSwgMHhjMzU3NzhjYiwgMHhmM2Q2NWQ0ZCwKLQkweGY3ZmE5ODM4LCAweGZmMzQwM2ExLCAweGJmZmM3MGFiLCAweGRkOWQ1ZmU2LCAweDNlZDE1ZmJjLCAweGQ3MWJlNTc3LAotCTB4N2UxNTdmZTQsIDB4MWY5NTdmZDEsIDB4ZjVmZjkyMzYsIDB4MTZlZTk5MmYsIDB4MmZjOWJiYTAsIDB4ZmM0MGQxMmUsCi0JMHhmZmJkZjZlNiwgMHg4YjAxM2JjOCwgMHg1ZTMwM2JmNywgMHhjYmRmMGY3NCwgMHhmNmZmYTMxNywgMHg5ZTk0N2RmZSwKLQkweDdlNjY2OGJlLCAweDNmZmI1M2E5LCAweDQzZjNkOWQ3LCAweDQ1ZjY2M2U5LCAweGU4ODMzODk5LCAweDc3Y2FmNjZhLAotCTB4NjY5ZjIwNzQsIDB4NWMyMmNkNTMsIDB4YTcwZDZhN2MsIDB4YTEyN2NjMjcsIDB4NDhkNmEwN2MsIDB4ZmNmNDA5NzQsCi0JMHhmN2IyZDZkNywgMHgxMDIxNmJhNSwgMHhlN2QyYzM2MywgMHhiNTkzZWRhNiwgMHhjN2VmMDdjNCwgMHgzZWI0OWI1NiwKLQkweDk0ODdjNjAzLCAweGZjMGQ2MWY3LCAweDY4NmE1OTdkLCAweGNhYzVlZTJhLCAweDllZjMxOTRlLCAweDcxNjMyOGVlLAotCTB4NzZhNjE5YTUsIDB4ZmQzOGRmYmMsIDB4ZjdmM2VhYzgsIDB4ZTM1ZGQ5YzEsIDB4YmE3OTYxMjksIDB4OWZkMjdlZTIsCi0JMHg1ZTI0ZGYzNCwgMHgzN2U0MDZiNCwgMHgxZTI1OWZmOCwgMHhjM2FlNWM4NywgMHg1YzdhYTQzOCwgMHhmZTc2MDBlZCwKLQkweGNiMTJjYjI2LCAweGYyYzNkODM3LCAweGE0NzljNGQ3LCAweDI4NjIzYmZiLCAweGYwZjM3OTYyLCAweGIzNzU2YWNlLAotCTB4MDBiNDM3Y2UsIDB4YThmZDhmZjQsIDB4YWQ5NTM0N2YsIDB4MzUzYzAwMmEsIDB4MzAzZTk1OGQsIDB4YzBmNDA0MTQsCi0JMHhhMjVmOTVhNiwgMHhjN2U2YTM3ZSwgMHhmZDVhZjJlYSwgMHgxY2I3ZWY1MCwgMHhmYTExN2E0MSwgMHgxZjE2YTllMiwKLQkweGE5N2VkNWQ2LCAweDhjN2U2MzU5LCAweDVmOTE5YzcxLCAweGQ0NzBiZDMyLCAweDExODllNzI1LCAweDZmNmY2ZmY2LAotCTB4ZDg0YjNiMDksIDB4NGUzYjZhNWQsIDB4NWVmMTBiZjAsIDB4MGIwMGZiNWMsIDB4NzdjNmJiOTMsIDB4NWE4ZmZiZDgsCi0JMHg0MDM0YmU1NiwgMHg1ZjA1NzcyOSwgMHhlZjc2N2NhNSwgMHg0YTVmZTQwMCwgMHg4N2M0MWJmZSwgMHhjNTVmZmRiMSwKLQkweGRmNzQwMzg3LCAweDRkZmYwMGVjLCAweDZmN2IwNjZkLCAweGY1Zjc0ZDVkLCAweGFhN2U0YzI5LCAweDk0YWU1ZGU5LAotCTB4ZDM1MTlmNTEsIDB4M2JmM2EwYmIsIDB4N2ZkMDViOWQsIDB4ZDJjNjBiMzcsIDB4OTI2YWNjNzUsIDB4YzlkNTllZjAsCi0JMHhkN2JjMWU5NywgMHhkZGQwOTc0OCwgMHhlMjlkMzNmZSwgMHg0ODZmYmMzZCwgMHhlMDcyYTFmNywgMHhiZTIzYjQ2MywKLQkweDVkMjAxY2I1LCAweDMzZmVlY2QxLCAweGE4NGY0N2MzLCAweGMwYTBiZDFjLCAweGJkMWNhODRmLCAweDVmYzRhZmYwLAotCTB4ZjljZmZkOTgsIDB4ZjA5MDcyNzYsIDB4YzhiYjdmM2MsIDB4NmIyMzlmZjMsIDB4MjZkY2Y3ZDgsIDB4NzkwYTA3OTYsCi0JMHg3NjVlYmQ2OCwgMHg1NjY5NmMyZiwgMHg0ZDdmYmUxYiwgMHhlMDU4YjIwZCwgMHhjOWY2Y2IyMywgMHg3NzhiM2Q2NCwKLQkweGRlODM1MzY4LCAweGJlMjZlYTJiLCAweGUwNDk0Nzc3LCAweDliZjk2MjRmLCAweGY3YjM0NjRiLCAweDlhNzlkNDNlLAotCTB4OTFiM2ZmMjIsIDB4YjRjYmJiOGYsIDB4NTQ3ODhmNGIsIDB4ZTYyNDQzYmQsIDB4ZDQ0M2JmNTEsIDB4NjdmYzdhMzgsCi0JMHhmN2U3ZmYxOCwgMHgwZmVmZDU4YiwgMHhmOWU0Y2EwZCwgMHg4OGE0NDU5ZiwgMHhjY2FmYzdjNSwgMHg1ZTQwN2FhNywKLQkweDdiOGRmOTA2LCAweGJkYTBiNTJlLCAweGY0Mzk5NzkzLCAweDAxMTkzYzNmLCAweDg2NjUxNzdjLCAweDk5YTVkN2U4LAotCTB4OTRiM2Q2NTcsIDB4ZmE2MmZmZWQsIDB4ZjBkYmNkOTAsIDB4NGE2ZjkxM2QsIDB4ZTcyYzg2MWYsIDB4MzhiNzU4MjQsCi0JMHhmOWU3ZmQyNywgMHg2NzllMDMxNSwgMHhlZjcxM2VmMSwgMHhiZGYxZTdmMiwgMHgwOWFmZGU4ZiwgMHhlNmFlODdjNiwKLQkweGNkZDMxOTlmLCAweGY0ZGQwM2FlLCAweDRjZDViN2IxLCAweDk0ZWEzZWYxLCAweDIzMDRmZDA3LCAweGRlZjFiYjhmLAotCTB4OWNiNzg4ZGMsIDB4MGE0YzgxOTAsIDB4NTg2NGJhMGYsIDB4ODQxYmQwYjcsIDB4MGJlMDExMWUsIDB4Y2YwYjdlZmMsCi0JMHhmZTU2YjhmNywgMHhkYzRiZmZmMSwgMHhlOWIzZGM0MywgMHg0ZTRhZjlkMSwgMHgxM2RlZmM4MCwgMHhlZjFkZjYxNSwKLQkweDJiOWE5OWQ1LCAweDYwZjlmZmJlLCAweGUwMzU3YjljLCAweGJmZTcwYTY5LCAweDJhZDAxZGUyLCAweDdiZGJiZDk5LAotCTB4M2Y0NjRiYTEsIDB4ZmQxZjhhYzUsIDB4ZGI4ZmI3ZTEsIDB4ZWI1N2U3NDMsIDB4MmY5NjRkNjcsIDB4ZDI0N2FlNTAsCi0JMHgyYzM0OWJkNywgMHhkMmE4YmVhZiwgMHg2MDVhZjk4ZSwgMHg0MmRmODBmZiwgMHhmZGQ0MzFmOCwgMHg3ZTJiZDkwZiwKLQkweGY3NzY4OTllLCAweGFjMjcyZWU4LCAweDllYjY1MWU3LCAweDVhNmFmODQ4LCAweGJmMGE1ZmY5LCAweDM3ZWZhNDQ5LAotCTB4Y2NiMTJiZWQsIDB4N2YxZjNhMGYsIDB4ZmQwNDk0Y2MsIDB4MDYzNTNlNWIsIDB4NzRhZDdkZjAsIDB4MGVjZDdmZjEsCi0JMHg4ZjEzMmM5OCwgMHhiZTcwZTU0NCwgMHgyNTdhNjVlNCwgMHgyY2U1ZmE2MSwgMHgxY2U1ODVkMiwgMHg5YmE1ODdkMiwKLQkweGY5ZWFiY2IwLCAweDQyZTU4MWM0LCAweDY1ZDNjZjdlLCAweDA5OTFiZjc3LCAweDFmNWQ1NWZlLCAweGZlN2I1M2JlLAotCTB4ZTFlN2JmYTUsIDB4OGYzNzUwM2IsIDB4YTk1YzgzNmEsIDB4YWQ5ZmNhZWYsIDB4MGI3YWFmZDYsIDB4MGQzOGZlZmIsCi0JMHhiZmVlYzdmOCwgMHgwZjUxZGE2NywgMHhiMzc3YjZiOCwgMHhkM2NlNzFiZCwgMHhkZGZjNjE5OSwgMHhiMzJlNTlmZiwKLQkweGVlOTcxNTdiLCAweDVhNGRlZjY1LCAweDM2MzIxOGQ4LCAweDI1NzRmYjExLCAweDA5ZjllMTY3LCAweDJkZTRjZGYwLAotCTB4NWM0MjZmODIsIDB4MGQwM2ZmMmIsIDB4OTMyZmNiOGIsIDB4NzUwNWVmZjAsIDB4YzQ3ODM1ZjgsIDB4Nzk2NTE3ZjIsCi0JMHg2MmVmYTg2NSwgMHg1NjBkZjllZCwgMHg3MTc5MDRhZiwgMHhmYjU4YTMyMywgMHg1ZGZlMmI3MiwgMHg4ZmM0ZDljZiwKLQkweDNjMmU3MmU3LCAweDNkYzMyYjY1LCAweDBiOTYzYjA5LCAweDU0ZDRmYmY4LCAweGU4OTZjZWUzLCAweDQ2OWQ0NWY4LAotCTB4ZmM0ZGNmOTYsIDB4MDViZjYwODMsIDB4YjE4NDlmNjAsIDB4ZjIwNmNiNzcsIDB4ZTMzNjc0MzgsIDB4NTQyYWMzZjcsCi0JMHgwZmNlMDVmZSwgMHgzMzE1ZWMxYSwgMHhlMTcyZDIwNiwgMHg0ODE5Mjc0MCwgMHhhZDk4N2VlOSwgMHgyMGNmZmQ2YiwKLQkweDg2Yjc2MDZmLCAweGNmYWZiZGMwLCAweGUzMDBmZTQ2LCAweDJmZGM2MjJiLCAweGU4M2ExNWVjLCAweGYyYzQ4MmY3LAotCTB4MGNmYjNkOGUsIDB4YTRkNGJkZTIsIDB4Y2JiZDNmNjAsIDB4ZmQwMzE5NWUsIDB4YThiNjE0NmMsIDB4MmI4MDQ1MWYsCi0JMHg1NzJhYmRmYywgMHhlNDRjN2IxOCwgMHgxZDAzMGRiMSwgMHgwNDg1ZmQxMSwgMHg0MTdhMjVkZiwgMHg4MTljZjU2MiwKLQkweDRkN2RiZTNmLCAweDNkMzBmYTFlLCAweGMyZmU4N2EwLCAweDdkODBjZWVlLCAweDYyMTNkMzBjLCAweDkyZmZmNTgyLAotCTB4Y2QyMWFmZGYsIDB4NWYwZjEwOTksIDB4MDM0MTg0ZjIsIDB4NTQ3YmM2N2EsIDB4ODMzZGMzMWMsIDB4MTY3YjUzM2YsCi0JMHgyZWQ0ZDNjYSwgMHhkNDJmZjI4NSwgMHgwM2YyODUyZSwgMHhmOTQyOTc2YSwgMHhhMTRiYjUxMSwgMHgxMGIxNzQ1YywKLQkweGJlMjIyNGRlLCAweGQ4NjJjZTgxLCAweGE4M2I4ODhmLCAweDkwM2Y5YmQ3LCAweGJiMDZjZGM5LCAweDFkNjI4NjdiLAotCTB4OGViOGY0ZmIsIDB4M2Y1ZGFjMTcsIDB4Yzc1ZDE5ZmQsIDB4NjkwN2JiMGIsIDB4MjQ0YmJlZTAsIDB4ZmJlZWY0NzgsCi0JMHhmZTk1ZTY1YiwgMHg3Zjg4OGQzZSwgMHhmMTA3ZGJhOCwgMHhkMmVjMTdlZiwgMHhlODJmZGNhMiwgMHgwZTJlYzdmMCwKLQkweDUwMzE1N2VhLCAweDc3ZjNlMzhmLCAweGYzMGIxYzdmLCAweGUxZmE1OGY3LCAweDU2ZTg5NGVhLCAweGJkNTg2YjI3LAotCTB4ODQ1ZTU3ZTIsIDB4MzlkZDgzNmIsIDB4Y2Y0YmY2MDMsIDB4NGZkODM4ZjcsIDB4N2UxZmM3NDEsIDB4ZTgzYWY3MGEsCi0JMHhlZGE3MThmYywgMHg4MjM2ZmE5NSwgMHg4N2RlYTY3ZSwgMHg1ZjYyZGY3YSwgMHg2MWViZmY3NCwgMHhiM2JiMGJmYywKLQkweGRmOTQyNzYxLCAweGY2NWU3NjEwLCAweDQzNzk3N2IxLCAweGY3MGFiYmY3LCAweGFmYTFiYjczLCAweGRjMmJlZTE4LAotCTB4OWIwZTU5N2UsIDB4MmY2MGRhMjcsIDB4YzU3Zjc4NDcsIDB4MzhmZWQwZjUsIDB4ODEyYmE3MWMsIDB4YWU3YjZmYWYsCi0JMHhmMTExZjNkNSwgMHg1MGYwMDFlZSwgMHg0YmEzYzgzYiwgMHg1NjBmYTBiMSwgMHhjNzY2NzhmMywgMHhlMzZmNDFhZSwKLQkweDMyMjM5N2ZkLCAweDM4NWZiZjgxLCAweDc3M2NhNmNjLCAweDEyNzhlMTNmLCAweGJkM2VmZTY1LCAweGMyZjVmMDBiLAotCTB4YzEwNzRmYmUsIDB4M2YxNGEwN2IsIDB4YzllZmUwODMsIDB4NjBlMDY4ZmUsIDB4ZmU3ZGZlNDUsIDB4MDMxZmFmYzgsCi0JMHhmMWZkYTFmYSwgMHgyNzRlMTVlZiwgMHg2ZTIwYWE1YiwgMHhmZmI4ZDMzZiwgMHhiNjY5NmMxMCwgMHg4ODJhODNlNSwKLQkweDkxNGRjZmRiLCAweGNmMzk0MzBlLCAweGUyMGUzNTllLCAweDc5ZGYyMmY1LCAweDYxZjk2ZTQxLCAweDNhYjc0YTM4LAotCTB4MmI4ZjUxYWEsIDB4MjQxMmU2MDcsIDB4MzE4ZDJhMTcsIDB4MjE2MDUxZmMsIDB4ZjUxNWUyODcsIDB4OGFlOTI5ZjEsCi0JMHgzOWVkMTNmZSwgMHhiOTQ5ZjY4YSwgMHhmYmRhMjgzNywgMHg4NjM4YTFlZiwgMHgwNmNmN2UwNywgMHg0MzY1ZjQ3OCwKLQkweDgzZWU4ZDFjLCAweGE3YjU3ZGZkLCAweGNhNzdjYzY0LCAweDk2ZmM3ZGRmLCAweGYyN2Q2ODFiLCAweDdiZTA3N2QzLAotCTB4ZjZmMDJmNmYsIDB4ZjEyYjNiYzksIDB4NTJmNTliZWYsIDB4MjJhOWVhNzgsIDB4YTFlY2E2NzUsIDB4Yzk4MzNmOGQsCi0JMHhmZDQyZjY1NCwgMHhjMzBmMjdiZSwgMHhkOGRmZDBiYiwgMHgyNzYwODg1ZSwgMHg5N2E2MTFkNCwgMHhkNDE3YjI0NiwKLQkweDliZTUwMjc2LCAweDM5YmUwNTNmLCAweDE2YTlhNWVjLCAweDYxN2YwZmM4LCAweDIwNjlkN2U0LCAweGU0MGZiNjk3LAotCTB4ZmI3MDY2ZWYsIDB4ZjRmZDEyMjEsIDB4ZmVjOTEzOWYsIDB4MjlmZGYwNzYsIDB4YmY4OGZkMzUsIDB4YzljYTJkNmYsCi0JMHhhMTNkZDhjNywgMHgzZWQ3Y2E2ZiwgMHg3Njg2YmUwMSwgMHhhZmRiODdiOSwgMHhjZmY5NTRiYywgMHg2ZjFkZTk4NiwKLQkweDllZmUwM2RmLCAweDk0ZGMzMmEzLCAweGI1YmZiZmU4LCAweDBlNWZmZTE4LCAweGI4NTkzZGQwLCAweDA0ZDQ4MWU1LAotCTB4ZmEwM2RkZmMsIDB4YTdmNzIzNzAsIDB4ZWI5MDM2N2QsIDB4MWZmYmY1NTMsIDB4YjQwZTJkNDgsIDB4MjgxZjE1OTMsCi0JMHhhNWZiOTNmYSwgMHg5YWZhOGFiNSwgMHg0MzdkNjUyYywgMHhmMWUwZGFmOSwgMHhjNWIxZjQ5MSwgMHhiYmQzY2U4ZiwKLQkweDlmOWVlMWYzLCAweDNhZWZmNjE0LCAweDgxMjdhZmY2LCAweDRiN2Q4N2YzLCAweGJhN2VkZjkwLCAweGJkZmUxOTdmLAotCTB4NDZmZjc1NTksIDB4MDFmODFmM2EsIDB4YjM5MDQ3MTcsIDB4OTc0ZDRmODIsIDB4ZWFjMjNiZDksIDB4ZWY4YWJmZjYsCi0JMHhlZmRiYmUzOSwgMHg4ZjYxNDdiZCwgMHgzMzJmNWU3OSwgMHg5YzVlZmJmOSwgMHgxM2EwYWY1YiwgMHhmOWVlZmIzYiwKLQkweGU4ZmYwZjRkLCAweGVkMmI4ODJiLCAweDc5ZDU3NjYxLCAweDA1MWY5MzJiLCAweGMwZDMzZWJiLCAweDE2MWU4YmRmLAotCTB4YzBhYmU4Y2QsIDB4M2RjMGQ3ZTIsIDB4N2UwNmZmOWEsIDB4MDAzMzRjMmIsIDB4MDAwMDMzNGMsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHgxOGFkZmYwMCwgMHhmNTE0NzA3YiwgMHg3YmRiZGJmOSwgMHg3OTcyNGI5MiwgMHg3MTIxMTI0MCwKLQkweGMyMjA1NzJmLCAweDQ4NDlhYzkxLCAweDkyZWE0OTAzLCAweGYwM2VhNDEwLCAweGEyYTIxOTAwLCAweDc5OWUwZmFlLAotCTB4MmE5M2E4NGEsIDB4MDI4ZDM2MWQsIDB4ZDZkMzZkNTIsIDB4NGY0ZTJhMmEsIDB4ZDE5NTRhMmMsIDB4MjU2MmJjMzQsCi0JMHg0MDU2OTQ3OCwgMHgyZjJhN2IxZCwgMHg0MTljY2E2OSwgMHhlZTQyMTkyMywgMHg4Y2MzOGE4YywgMHhiZjdkZmExZCwKLQkweDVlZGRjZGRkLCAweGM5YTc1NTAyLCAweGY2ZmJiZjFmLCAweGNmZGVmOGY3LCAweDA1MDQ4YWYwLCAweDU3MWEwMTkyLAotCTB4MDJhNjJhMjYsIDB4YzhkYzgyODAsIDB4MDBiNWZiNzEsIDB4YmI0YzYxNzYsIDB4OTRlMDBiM2QsIDB4MTU3MDA0YzksCi0JMHhhNTAyOWZkMCwgMHgzMDI3NjEwMCwgMHhmMGVmZGQzOCwgMHhiZGJmNDIzZCwgMHgyMjVmMWM5MSwgMHg5ZTVlZWY3ZSwKLQkweDc3ZGMyMzIzLCAweDQwNTVhNTYwLCAweDVkZmQxMmY4LCAweDM2MWI1ZDE3LCAweDcwOTU2M2RmLCAweGQ0ODAxOTdmLAotCTB4MGZiOTFjZTEsIDB4MWQzMDBhZDAsIDB4ZTdmMDE1ZGYsIDB4MzJhM2E0NTgsIDB4ZTc4NGRiOTIsIDB4ZjcxNmZhZWUsCi0JMHgyNDEyZmM1NSwgMHg4MjhmOWQyMCwgMHg3NjA0OGY0ZSwgMHgxNTc5OGY4MCwgMHgwNjI0Mjc5ZSwgMHg4ZGYzYzQ5ZiwKLQkweDIyYjA3ODQ3LCAweDM4MTAwMzNmLCAweDhlYzcwNzdlLCAweDAwNGFiMzM5LCAweDgxNGZkMzk2LCAweDgxNTg3N2JlLAotCTB4YzAwNWJmNjcsIDB4ZWZiNDJiZWYsIDB4ZGY5N2NiY2IsIDB4NmYwODQ5MDQsIDB4ZjI4NmY0YjEsIDB4NDk3MGZiZDgsCi0JMHg5MGUzMDM0MywgMHhhYWRjZWQ3ZSwgMHg5ZDViYjdiZiwgMHg3OGM5ZmViNCwgMHhmZjFlMDFhZSwgMHhiNWZiYzc4MiwKLQkweGQ3ZWY2NDEwLCAweDdiN2RjMGVkLCAweGY1Zjk3ZWNjLCAweDBkZmJkMzlmLCAweDBhZjc4Y2JiLCAweGJlZjRjNDg1LAotCTB4MGEwM2Y0YTksIDB4YjNlY2YxMmYsIDB4YjZhZGYwODksIDB4ZjlhYWY4YWIsIDB4YjFiYzNmNmYsIDB4ODM3YWY5MTgsCi0JMHg2OWY4NmQxNywgMHg2NGM0ZGY2OCwgMHhkOThmZTJmMCwgMHg5MWFjYTQyOCwgMHg4Y2RjNmM3MiwgMHhlMTQ1YTQ4ZiwKLQkweDVjZmM3ZGMxLCAweDQ3Mzc5ZDNmLCAweDFiNGZlNjcyLCAweDQ0OTA2ZjI5LCAweGI1NjFjOTEzLCAweGJhYjdjNTRiLAotCTB4ODAwNTliZTIsIDB4OWI3NzU2ZjgsIDB4ZTAyYmI4MDEsIDB4MTA4M2M4ZDksIDB4ZGJhMGE3ODMsIDB4YTMzYmYzZTYsCi0JMHgyYTVkODdmNCwgMHg1ZmRkMDU4ZiwgMHhhYWYyY2VhNywgMHgwMWQxMmI2YiwgMHg0MDVlMmFlZCwgMHhhNjdhNDFiYiwKLQkweDQ3NDk2MDcxLCAweDEzOWYzMDdjLCAweGFjNzJlMWI3LCAweGU0OTJhMzNiLCAweDgwODM4Yzc0LCAweGI4OWVjODUwLAotCTB4MmRmNDhlZDUsIDB4ZWZhMzlmNTQsIDB4MWZjNTQ4NGUsIDB4YzI2Njc5OTksIDB4Y2JkMzQwYjMsIDB4MmY3N2QyYzIsCi0JMHg1MTZmNzg3MiwgMHg0ODg5YTJmNywgMHg3NWRmMWMwMSwgMHgxY2Q0MzFlZiwgMHgwYzNjMTUyYywgMHgyYzUwNjJkZiwKLQkweDI5NjM5N2E0LCAweGE0NjZlY2JlLCAweGRkY2YxZTczLCAweDFjMTJmM2VkLCAweGZmMTBlMDE5LCAweGFlMDQ4YWIxLAotCTB4M2ZlZjYzOGQsIDB4N2NlYmVmNDIsIDB4YjJmOGIzMWQsIDB4YjM1ZjE4OWIsIDB4MzdhODdkNWQsIDB4NWZjMjlhNGUsCi0JMHg4ZjI5MTg0YSwgMHhkMGNkNWNhOCwgMHg1Nzk3ZWJhNywgMHg1OWVjODZkZCwgMHhkN2U2YWZkZiwgMHgxZDMxYmFjZSwKLQkweDVjMDRiOGY1LCAweDE2ZmJhNDM2LCAweDYxMGMwZDFlLCAweGRmZTZjYjc4LCAweGUwMzEyNmU2LCAweDVmMjgxOWVmLAotCTB4ZjQ0YTk4MmUsIDB4MmQwNTg0ZmEsIDB4NjhjZmRlMDIsIDB4ZDM5ODM1ZjksIDB4NTY2N2U0NjIsIDB4OGZkNzRlZmQsCi0JMHhmNDkxY2YyZSwgMHhmOWFiZjhhOCwgMHg3Yzg0YTBmMiwgMHg5OGU3NmQwZSwgMHhhYTg4MzUxZCwgMHg5Zjk0MzY5ZCwKLQkweGM0NjJjM2ZiLCAweDQ1ZTQxMGRmLCAweGVmYTllOTBlLCAweGU0OTI3MDNhLCAweDAzYWViMWQ4LCAweGNlODAxNmNjLAotCTB4YWQ2YzVkNzUsIDB4N2MwMzNiYjcsIDB4ZDk4ZmUzM2UsIDB4ODM4ZDA5YWYsIDB4YzFhNTViZjgsIDB4NzQ3NzVmOGMsCi0JMHgxYzdmY2EzZiwgMHgzMDMyY2JiYywgMHhmODAyZTcwYywgMHgxM2JmN2Q5MywgMHhiZjM1OWY5MCwgMHg2MmQ4ZjJmOCwKLQkweDc5NDM3NmEyLCAweGIyMDdmMzBhLCAweGY0YTNhYmI5LCAweDljMDE1ODE3LCAweDViNjQ3ZjQ4LCAweGMzMmI3ZjgyLAotCTB4YTI3ZWFhMjMsIDB4ZmVmZjZkZDksIDB4NzE5YTI3NDksIDB4MGIxZGZmYmYsIDB4MTU4M2RiMzMsIDB4MWNmZTBmNGYsCi0JMHgxMmRiMzVlMSwgMHg1M2ZiOWM5OCwgMHhmZGEyYzk0MSwgMHgwYWZkOTNhZCwgMHg4YTZlNTgxZSwgMHhkYzkzMzRmNCwKLQkweDZkYzUxMzNiLCAweGYzZjlmZmI4LCAweDgxZGQ1ZjkzLCAweDI3NTdjYWYwLCAweGY5MjY0NDhhLCAweGRmODQ1MDkxLAotCTB4ZWZhMDExYjMsIDB4M2RkOGIzM2IsIDB4Y2JiYzU1OTAsIDB4NWZlNGZmMzQsIDB4NzI5YmY2OWUsIDB4NGQzOTdmZGEsCi0JMHhmZWJhM2MyNCwgMHg5MGVmM2VjZSwgMHgzNWY1ZTUwMCwgMHg2ODVkZjIwNCwgMHhhNTM4ZTc4MiwgMHhkNzBmODRjZiwKLQkweGU2OWM3NjlhLCAweDM2YWQzZWQwLCAweDc1ZTkyNzc5LCAweDM5N2ZiM2Q1LCAweDU0ZmM4NjVlLCAweGQzZjM3Y2JkLAotCTB4OTViZTkwMzMsIDB4N2EwNThkMWYsIDB4MTFkN2FhMjcsIDB4ZTQyOTIwZjEsIDB4NTFlMDM4YTUsIDB4OWYyNjgwZTMsCi0JMHhmZjBlZWRkYSwgMHhhNTcxMzFhNywgMHgwMGM1MjNiZSwgMHhmOTY1NzYzNywgMHg0Nzg5OGQzZiwgMHgxOGNhYTBiNSwKLQkweDFmOThlN2VlLCAweDM1ZmU2OWQ1LCAweDIwZGY5NzhkLCAweDQ4NDNkNDdkLCAweGIxMTA5MzhkLCAweGYyMTU1ZDkyLAotCTB4MjE3MTQ0OWMsIDB4Yzk4ZDg0ZjIsIDB4M2VjZWRlM2YsIDB4MmVjYzRjMTAsIDB4NTMyMDRjZWIsIDB4MDM0YzJmN2MsCi0JMHhhZmY5MjY3YiwgMHhmYzJmY2FhYywgMHg5YmFkZTRjNCwgMHg0MmZkMzY1MCwgMHg5M2ZmZWVhYSwgMHhiNThiNGMxNiwKLQkweDM3ODY5ZWNmLCAweGRiMzczZWM5LCAweDM4MGU3ZDk4LCAweDNjNjdmOTgwLCAweDI5MGI3ZjllLCAweGZiMzJmY2VjLAotCTB4ODYxZmNjNTcsIDB4NDVjYjRiZjMsIDB4YzBjNTE3MzAsIDB4ZWUyODkwNWUsIDB4NDUwOWI2MTUsIDB4YWNkYWUwMGYsCi0JMHg5NjRhNjVlOSwgMHhhZGZjNDQyZiwgMHg5ZWVkZjhlYSwgMHhiNzNjOThmNywgMHhmMDhhNzgzYywgMHhmZDMyNzYxZSwKLQkweGRjYWE3YmMxLCAweGM0ZDQxY2MzLCAweGY2NjVhOWU2LCAweDdiZmYzNDJmLCAweDdkY2ZlMGMxLCAweDk3Yzg5Y2NmLAotCTB4ZGRiZWZkZjEsIDB4ZWQwMWYzNTMsIDB4ZDgzZTVlZjksIDB4NjdjYTFjZjcsIDB4ZmE3ODMxMzAsIDB4MGYzYjVjNjEsCi0JMHhmMjhlMzg3ZiwgMHg3NWJkM2M2MiwgMHhlMDFhNWYyZCwgMHg0NzhkNGUwMSwgMHg3ZTA3YzQ3NSwgMHhiYmViOTEzZiwKLQkweGUxODFmNjQwLCAweGRlODdjNTg0LCAweGZjOThkMzRkLCAweDMyNmY3OWFhLCAweDZmZGMzZmU5LCAweDRlOWUyZmE0LAotCTB4M2U5ZDdkZmQsIDB4OWNmZDdkZmQsIDB4ZWJlYWFkZDksIDB4OWY5ODM1YmMsIDB4Y2M5ZmRmOGEsIDB4ZWZhYzE4MTEsCi0JMHhlNjBhNGY5ZiwgMHhiYmU5MzhhNywgMHg4YTk3M2Q0YiwgMHhkNWJkOGM3MCwgMHg2ZmQ0NGZkMCwgMHgzN2UzMWQ4ZCwKLQkweGMzNTM1N2QyLCAweGJlYzA2ZDg5LCAweDcxM2YxNDJiLCAweDVmYjhjODBkLCAweDI2YTZmOTk3LCAweGQxZDlmMDM3LAotCTB4NzY2OTE2Y2UsIDB4NjY2OWU5MDYsIDB4ODJiNzNiY2EsIDB4YjQ4YmQ3NmEsIDB4NzQzYjdkZjgsIDB4ZTVmZDAwNTgsCi0JMHg2N2Y1YTlhNCwgMHgzYTA3NWM3NiwgMHg2MzkxNmY3ZSwgMHhjYTcyYWZlMywgMHhmN2VhNjk3NCwgMHgyNTRhYmY4ZiwKLQkweDNmMWM1MWU0LCAweDNhYjI3MmVmLCAweDMzOWJhMjY3LCAweDkwZDk3M2IzLCAweDVmNzBlNzRkLCAweDI4MWRhMDBjLAotCTB4MGRiMTM2OWQsIDB4ZGY3OTkxZTksIDB4NTdiYzZlMzUsIDB4OTNlNDBkNjcsIDB4NjRmN2U4MWYsIDB4MDdkZjY2NWUsCi0JMHg5MTk2ZjdiOCwgMHhjODFjYzFiZSwgMHg4YTRmZjU2NywgMHgzYmFjMzgxNSwgMHhhMGM1NjNjMiwgMHhiZTUwZjI4NCwKLQkweGUyNTcxNjA2LCAweDAyZDg2NWUzLCAweDQ3NDg5ZDM1LCAweGZkZDc3ZDA1LCAweGI4YTRlZDExLCAweGU5ZDRkNGNhLAotCTB4YzY1ZTI1MWMsIDB4YmQzNDA3YzEsIDB4OWE5OWE3MTUsIDB4OGZmMTQ2M2EsIDB4ZTkxZjY4ZGIsIDB4NWUwZTgzNmIsCi0JMHg3ZjM1NWZmNSwgMHhjNjcyNjk5NiwgMHhkNmM3Y2Y4NCwgMHg1YzVhMGQzMywgMHgxNWQ5MjcwZiwgMHhkYjJmZTkxZSwKLQkweGI4NDA3YTg3LCAweDQwMzgxY2NjLCAweGI0M2Q3YTJiLCAweDQyNjczZWEwLCAweGNiYWY3ZDQwLCAweDY3MjliZjE4LAotCTB4NzhmOTYxMmMsIDB4MzMyMzhiMmEsIDB4ZTdhZWY1MzUsIDB4NjhmNDgwOWEsIDB4ZWI4NTdjYTcsIDB4ZDNjODJlMjYsCi0JMHhiMDg4MTNmYSwgMHg5OTk3MDI1NSwgMHg1YjNiMTQ1NiwgMHhhZDhmODM2NywgMHhhZDg5YTA3MywgMHhhZDlkYTE3MywKLQkweDViMDc0MDM3LCAweDViMjA4MjZmLCAweDBkYTA0YTYxLCAweGViNWZmYzU4LCAweDBjM2NjM2VhLCAweGEyNmU1ZDNmLAotCTB4MThiYzVjN2MsIDB4ODdmMzQ2OWEsIDB4MmViYzlhYjUsIDB4ZWE4YzBmMmYsIDB4MWU1YzNmMjUsIDB4NjRjZTQwNzMsCi0JMHgyZTRlNWQ3NCwgMHg5ZDk4ZjIxMywgMHg5MWIxNzJlYiwgMHgwNzNkZTIzZCwgMHhhZDY5MzNmOCwgMHg4NzdiMTA4MCwKLQkweDk5ZGU5MjVjLCAweGUwOTk4MjA1LCAweDVjMTg5MDJhLCAweDUxZTUxZGZkLCAweGIyY2Q5MjFhLCAweDU0YjkxNDc3LAotCTB4OGYyNzZlOGQsIDB4OTE3MTcyNmEsIDB4ZWE4ZDhmMGQsIDB4NjA1YmFmNmIsIDB4Y2MzN2FlYjAsIDB4ZmYxNDk5ZDAsCi0JMHg3MjEzZWE0NywgMHg4NGUyY2U4OCwgMHgwYzA1MmZjYSwgMHgyMWY3N2UxMSwgMHg2YmUzMTk5ZiwgMHhiMzY1NTE3MSwKLQkweGY3NGVlMTA3LCAweGUzMTk5ZjQ5LCAweDY1NTk3MTY4LCAweDZhYzQ0NTkxLCAweGRmNjNmNWIzLCAweDQ3NjU4NDZjLAotCTB4MWZhMDNlNTIsIDB4M2JjODMxZDksIDB4ODdiYzNlNTAsIDB4ZmE1NGQyODcsIDB4N2NhN2UzOWUsIDB4MTAxZmUzNjksCi0JMHgwNzY1NGZjOSwgMHhhZGQ1OTA0MCwgMHgxN2U0NTU2OCwgMHhhZWVmMzU3ZSwgMHhiYTdhYTk3MSwgMHg0YjNmMjZkOSwKLQkweDBmNmY1ODdlLCAweGMzYzgwOTI0LCAweDBjZWFkNjlhLCAweGFjMWI4N2NhLCAweDhjOWZiYmVhLCAweDg5YmVhNjE1LAotCTB4MWUyMWIxNzIsIDB4MmY5NDYxN2IsIDB4MDgxYzU3ZGMsIDB4YjlhMTM4ODcsIDB4NDdhNTFkYzUsIDB4ZjAxZGZmYzcsCi0JMHg3ODRhZjlmZSwgMHhhZmNhNjUwZiwgMHgwOWJmMjliOSwgMHhjNjFiZWIyMiwgMHhiM2JiNzk2YiwgMHg5N2M0NGNiMywKLQkweGEzMTcwZTkwLCAweGE5Mzg5NDIzLCAweDI2ZGM4NWI5LCAweGRlOTdiN2NiLCAweGY2YWEyNzBiLCAweDdiNmM5N2I2LAotCTB4NzVlZDc0N2EsIDB4ZDNkZGJiNGIsIDB4YjcwZjdlNDcsIDB4ODAyN2IzN2UsIDB4NDMzZjg2ZWYsIDB4NWRlZjc4YzQsCi0JMHhjZThmYmNiNywgMHgzOTQyOWEzNSwgMHg1Zjk3YTg0NSwgMHg5MmI2OWMyNiwgMHhjYWY2ZTgzZCwgMHgyMDk2OTJhMSwKLQkweGY4MTI2ZGRmLCAweGNhMGZjY2FkLCAweDk2NzVjMzVkLCAweGUxZWY2YTI3LCAweGNhMWVmOGE1LCAweGFiZTdkOGEzLAotCTB4NGEwZmIyYzIsIDB4ZDIwZTlhNmEsIDB4NTdiNzJhNWEsIDB4MzllMTBlZTEsIDB4ZjIzNmY0NDIsIDB4ZmZhNDY1OTEsCi0JMHhhYzhmOTRjMSwgMHg5YzdmMzE5ZiwgMHgxNjlkZGFhMCwgMHgxZmY3YmFhNywgMHgwYWJjNzg3OSwgMHhkZmM2MjBmYSwKLQkweGJjNWZmNzFhLCAweDhmOGMyZmYwLCAweDkxNGU0MzhkLCAweDdiZWQ5NzhlLCAweDdkZWE5OWE2LCAweGNhYjBjZmRkLAotCTB4ZGQxMWM0MzMsIDB4ZDk3NjY2ZWYsIDB4NzczYjNjMDIsIDB4NWYzYTUyY2QsIDB4ODc4ZjUxZjEsIDB4M2Q3NWVmZTIsCi0JMHg4MzJhMzZhMSwgMHhjNjI3ZGRjMywgMHhkN2FmZjZhYiwgMHgzZjcwZGZlOSwgMHg2ZTdjNGYyNCwgMHhhNjQ4N2I0NywKLQkweGE3Y2E4YjNjLCAweGVmMzc2ODNlLCAweGFiN2YyMWI3LCAweDYwZDA3ZWE5LCAweGY2YWJmMTg1LCAweDU4ZmY3YTk1LAotCTB4NTYxZmU0N2YsIDB4MTlmMDNiZWEsIDB4YTk1ZGY4ODUsIDB4Y2I2MmJmZDEsIDB4NWQ5MTM3N2QsIDB4ZmIxYmY0YWQsCi0JMHg2Y2FmYmQ0MSwgMHhmNmQ1Y2VkNCwgMHgxZjEzZDdmOCwgMHhlNzhkZGJiNSwgMHhjY2FmYTkxYSwgMHhlYjBjZmFhNywKLQkweDc1ZDUwZjMxLCAweGFhNWJmYjcxLCAweGQ4ZDk1ZjU4LCAweDFmZmVmYzY1LCAweDI0OTVmNjM3LCAweDgxYmYyZDYwLAotCTB4ZDcyZTQ3NTYsIDB4NGU3ZjEwY2UsIDB4ZmQ1OWU3ZDYsIDB4ZjU2ZGU0MzYsIDB4OGJhMmNkZjMsIDB4YzhhNzZjZTAsCi0JMHhmNWQxZWJlMiwgMHhiNjFlN2IxMCwgMHhkMTViMzFhNCwgMHg0NmU1NzVmZCwgMHhjM2M3ZDU4ZSwgMHgzNjRiZGZmZCwKLQkweDc4MjhlODg5LCAweGJkZDU4MzI5LCAweDdhYjNhZjU4LCAweGQ5ODgxZDAzLCAweDg2Y2EwMTZiLCAweDNkN2JmYjQzLAotCTB4NDI2YjkyMjUsIDB4ZTc3N2FmM2MsIDB4ZmY0ZjU0ODksIDB4NjcwNDlkNzUsIDB4ZjRmYTUxMmMsIDB4ZGY5YWJlN2EsCi0JMHgzZWE1NjU1MSwgMHg5M2VjN2VlOSwgMHhlZjIxMGVjOCwgMHgzN2JjNzJlOSwgMHhmYzA1YjBmZCwgMHhhYTA0M2ZiOCwKLQkweDlhY2U4NjNlLCAweGYzM2U1ZDU4LCAweGU0OWU0ZWM4LCAweGZkNTE4ZmNmLCAweDAyNjk5NmQ5LCAweDBlMWU0NjIxLAotCTB4YTMwODBjNjEsIDB4NGQzNmY1ZjQsIDB4YTk3OTA5N2YsIDB4ZjE0NGZkODYsIDB4ZTRmZGMzMmEsIDB4N2VjMzVjZDIsCi0JMHgyYjY5MjM5YiwgMHgwYTQ1MDFlMSwgMHg4ZTI4NGI3YSwgMHg0OGE0ZWZhYiwgMHgyMGY3MGM1MywgMHg1ZmI4ZmY4NCwKLQkweDQzNzE4OWFlLCAweDY0YzM5Y2QyLCAweDE1Y2UxNWNmLCAweDM2OTBkZTZjLCAweDllNzhkMGI3LCAweDVmMTNjYjVmLAotCTB4ODdiODMzYjYsIDB4NjU3Zjk1N2MsIDB4ZTY3NWU4MzYsIDB4N2U5ZTExODAsIDB4MTA5MjFkYjQsIDB4MzlhOGUzYWYsCi0JMHgwMGExNmU2ZSwgMHhjMTM2MjVkNSwgMHhkNWNhNWRmOCwgMHg0YzAyNjJlYywgMHg4NjFiY2MzMCwgMHg5NjFjZWVlNSwKLQkweDA5NDVkOTJiLCAweGY3MjBjOGZjLCAweDFlYTFiOTc4LCAweDM0MzRkZDU4LCAweDQyMmEyOWMxLCAweDdkNjMwZjU0LAotCTB4ZDQ2N2Y5NDYsIDB4MjU5ZmU1MTgsIDB4N2UzZGU1MWIsIDB4ZDlkZTUxODUsIDB4NWY3OTQ2NGQsIDB4YWI5NDYyZGQsCi0JMHhjZGNhMzE1YiwgMHhlMWE2NzFiMywgMHg0YWY2YzRmYywgMHhmMzc5M2MwMywgMHhkN2YzODYwZCwgMHhlMDE4MTdmOCwKLQkweDM3NmZkYmE5LCAweDcxZDY5ZjljLCAweGEwYmY2MWFmLCAweDVmNjE5NTZiLCAweGQ5Y2JiM2I3LCAweGQ1ODFiNWMxLAotCTB4MDI2NmY2NzEsIDB4YTBlYzE1ZDMsIDB4MDY0M2YwZTgsIDB4ZmY3YWYxN2MsIDB4MTJhYWY4MzEsIDB4NDdhNWNlNTEsCi0JMHg0OGMyZGU1MSwgMHgxNDg0NzAzYiwgMHg2ZjE4NzhhMCwgMHg1N2ZhZjEwNywgMHhhYWRmZjRlMiwgMHg5M2Y3OTNlNSwKLQkweGVlNGUzZWNlLCAweDhmNDEyZjNhLCAweGEwYmNkYTdmLCAweGIxZmFjMmRjLCAweDU1NjkwYTdmLCAweGNiNTY3NDg5LAotCTB4YWYyZDNlNmIsIDB4NjQ0ZGY2YzEsIDB4YTk3M2UwMjQsIDB4MGYxNDE4YjAsIDB4M2MyYjFjNTIsIDB4YmIyMmFiZTksCi0JMHgxZDM1MGUyYywgMHhlNGEwZjY0NCwgMHgzMjU1N2I2YywgMHg3MDQwOTc5ZCwgMHg0YjQ3NTM4ZCwgMHg1Mjk2ZmU3NCwKLQkweDcyYjFjYzBlLCAweDhmMzY2NzQyLCAweGExNzFjYThiLCAweGUzMjdjYWQyLCAweGZkNmZiMmUxLCAweDU0ZWNjOTZkLAotCTB4Y2ZhN2MzM2EsIDB4MzU1MmI4N2QsIDB4MWM5N2NjNmYsIDB4NDc5MThlNjAsIDB4NGY5ZWE5NDUsIDB4NWQ1ZThjYmMsCi0JMHgwODljZmFlZSwgMHg1MmIwN2RlYiwgMHhmYmIyNmZiZCwgMHhkNWEzZGNkYiwgMHg5ZTY2ZTIzNywgMHhhYjMyNWZkNSwKLQkweDMyNzEwZWM3LCAweDZhZGQxZjliLCAweDdkOTBlNjBmLCAweDVmOTBjOTlmLCAweDMxN2NjNWM5LCAweDU2MDUxMjY4LAotCTB4MzZhMTcxYmYsIDB4OGM0YzJhNjIsIDB4NmU1MmYyNTEsIDB4OWY1MTJmOWIsIDB4Y2QyYWVkODYsIDB4OGJmMjE3MjcsCi0JMHg0NjVlMmJlNywgMHhhMjU0MmJiZSwgMHhiN2Y0YzViNiwgMHg5OWRlNTcyNywgMHg3MzllNzk0YiwgMHhiYmMyMmZhZCwKLQkweDk3M2NjZmVmLCAweDlmY2M3OTQzLCAweGY3YTJlZDJjLCAweDE5MjFlNzg3LCAweGQ5YzYxN2M4LCAweDQ4NTA0OTkwLAotCTB4MWM0M2NhMDQsIDB4ZDFjZTJmZWIsIDB4ZmM2MjMzMjMsIDB4ZTU4NWEzNzYsIDB4YWRmYWQwMmIsIDB4ZTkzOTM1M2IsCi0JMHgwZDEyZDZmZCwgMHhiMTNlMmY2ZiwgMHg5ZGY4ZTMwMiwgMHgzYzk4ODc1ZCwgMHhiNDA3MzM2YSwgMHg3NDQ5YWQzZSwKLQkweDRkZjdmYmUxLCAweGJmNTIxNjcwLCAweGE4OTE1MjA5LCAweGZmN2FlOWY2LCAweDNlZmY5ZTM1LCAweDU3ZWY1NTc5LAotCTB4MzZiZTc3MmYsIDB4MDdkMGRmYjMsIDB4NTFiNDhlYzMsIDB4ZjNmMThkZTcsIDB4ZWFkZjI4YWMsIDB4MjU4ZmJkZmIsCi0JMHhmYmQzZmNiMCwgMHgxZjliMzY1OCwgMHg2NDFmZGY0NiwgMHg5YjNiODE3MywgMHhjN2Q4MzAzZSwgMHgxYjFmMmRkZCwKLQkweGU1MWVlZWVjLCAweDI4N2VjMzEzLCAweDhmMTk2MjNkLCAweDY0ZjY4N2ZjLCAweGU1MDNiOWNkLCAweGFkYjc3ZTc3LAotCTB4ZDQ1MGZhODQsIDB4NGM2ZTdmNTcsIDB4NjI3YTFjOWYsIDB4ZjdjMjZjZjIsIDB4YzczY2Y5YmYsIDB4MTc1OWU4ZTgsCi0JMHg5ZDM0ZjM2NCwgMHg0ZWViZDNjZiwgMHgyZWI0MzgzMiwgMHgzZTc4ZDZjNCwgMHg1ZjU1YmVmNSwgMHgzYzgzN2ZhZCwKLQkweGMyMjdlYTMzLCAweDliNDcxMThkLCAweGQ0NzlkNGMzLCAweGQ2NjdiZWJhLCAweGMzY2E0YWI4LCAweGIzNTZkOTNkLAotCTB4ZTE1MjRlYmEsIDB4MGFiYjUyYWMsIDB4NmI0Yjk5Y2YsIDB4NDhkY2UyZDgsIDB4MDcwZjZiN2QsIDB4ZDBmNjg3MTIsCi0JMHg5Nzg1ZDU3YiwgMHg3NzQ0ZjhhYywgMHg1MGY1NmM4NiwgMHhiOTE5NWE1ZCwgMHg0ODJiNzM0MCwgMHhlMzc5YjEwZiwKLQkweDQxZDk1NGQyLCAweDA2MmMzOWRmLCAweDlkMTk1MmIzLCAweDM4M2ZhODkzLCAweDAzNWU1MjZiLCAweDJmMjUwMThjLAotCTB4ZjUzZTcxZmUsIDB4YWE0OTgzMDEsIDB4ZjhiZTI3ZGQsIDB4ZTkwNTdjZGMsIDB4OTdjNTI1N2UsIDB4MGE0MGY3NGMsCi0JMHg5NGU3NjM1OSwgMHhmYTg1OWNmYSwgMHhjMjUzZWE2MiwgMHhmMGNkNzUwZSwgMHhjYzhmOGM3MCwgMHg0NzhhNzViOCwKLQkweGQzZDc1NzhkLCAweDlhZjVlZjhhLCAweGU0NzEyNmRhLCAweDgwZGFjZjBmLCAweDA3ZThhN2U2LCAweDQzMTdkNTEyLAotCTB4MWZhYTZjZmIsIDB4NzA5MjAxOTgsIDB4ZGI2ZWNjZmYsIDB4ZTNjZjY0MGIsIDB4NWZhYTY2OTAsIDB4N2Q2MzVhYjAsCi0JMHhiNjViZTE0MSwgMHg3ZDA5YzUwMCwgMHgxMWVlOTMzZSwgMHhmYmM1ZTU3ZSwgMHg2YzJkN2JlOSwgMHgyODk4MzAwZSwKLQkweGQ3N2Y5MDk0LCAweGY1NjAxZDI3LCAweDU5NWM4OWQ3LCAweDE1ZjliMGYyLCAweDdhM2YxNDQ4LCAweDZlYjZkOGY3LAotCTB4Mzk5MWU3NTIsIDB4YWZmZjEyMGIsIDB4MGYxMmI4NzMsIDB4NmE0MjMzZWIsIDB4ZTFjZGE5NWQsIDB4ZjlhYmJlNzQsCi0JMHg0M2RmMTljNywgMHg3YzQwNmQ5YiwgMHg3YzFhNWY5ZSwgMHg0ZWU2Y2JjYSwgMHhkOWQxMGU2MiwgMHhkNmU5NTI2YiwKLQkweGQzZjlkNWU5LCAweDczYmU4OGY5LCAweGU3ZDViYjY1LCAweGQ3NzlkMTQ5LCAweDA3ZTQ0OTg2LCAweGNlNzU0NzI4LAotCTB4MmY3NzczYzcsIDB4N2RmZWU1MTgsIDB4N2NiMmJlYmEsIDB4NTU4Zjg4ZjMsIDB4MmRiY2VhNGQsIDB4MDdmNmY3YWEsCi0JMHg4ZWRlOTE0ZiwgMHhiYjFjNTkzOCwgMHgzZTc4ZmRkYywgMHg2MTFmZjdlYiwgMHhlZjNlNDBmMiwgMHhmODYyZmUyMiwKLQkweDk5ODllMjVjLCAweDNlZWY5ZTBiLCAweGY4NTc5NGYxLCAweGIzODVmY2UxLCAweGY4NzhmOWQ1LCAweDAyMzk4Yjg1LAotCTB4NzdkZmFmZGUsIDB4YzlkOTI0ZTgsIDB4NmUzYzFjZjAsIDB4ODMxYjZkOGUsIDB4NjhlYTY1N2QsIDB4MGFjYzZiZjMsCi0JMHg0ZDkyZjUzMSwgMHg2Y2MxM2ZiZiwgMHg5ZjIxOGZiYywgMHhmYzhiYWNmYywgMHg1ZDg5ZWIxMSwgMHhmOTQyMWY1YSwKLQkweDllYjZlMjkyLCAweGIxZDk3NzJmLCAweGUyZGY0NTRmLCAweGI4YjM2ZjQyLCAweDhlYzk3ODRkLCAweGNiMGE3M2Q3LAotCTB4YTE1Y2ZhNWIsIDB4NDRiY2MzOGQsIDB4NTk5Yjk2M2EsIDB4NzZhZmU3M2MsIDB4YmJhNzY0OGEsIDB4ZDQ4MmY2ZDAsCi0JMHgwNGE1OWFkNywgMHhlYjhlM2YzNiwgMHhlNGRiZDc2ZiwgMHhkNjVlYzk0NywgMHg0MTk5NTA3YywgMHgzYmU3NmZmZCwKLQkweDk1N2Q2ODM3LCAweDZiYTY0ZjlhLCAweGYwOWQzOWY2LCAweDY0ZGUxZjEzLCAweDM1OGE1Nzk2LCAweDRkZWM0YWZhLAotCTB4MzMyMWQ1M2MsIDB4ZjlkNWUxNDAsIDB4Nzg4ZjM2ODEsIDB4OGZkNjZkZWMsIDB4Nzc1NzE3ZmQsIDB4MWM3MGVhOTksCi0JMHgwMDAwMWM3MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4Nzk5MzMzMWUsCisJMHgzMWU0MjRlNCwgMHgxZTRlMTA4MSwgMHgwMzA4NjgyMCwgMHhiNzhhODg4NCwgMHhmNjMwMTAyNywgMHhkNTc4NzZkMiwKKwkweGFmMGUyZDU4LCAweDZiODZmMjEwLCAweDdmYjZiZDJkLCAweDc4NDkwODA2LCAweDExMWZjMWE4LCAweDI5ZTFkNWFkLAorCTB4MzExZDgyZjYsIDB4MDM4OGI2MjIsIDB4YmRhYmQyMjgsIDB4NTU3YzU4MzcsIDB4MGJkMTFmZWIsIDB4MmE0NDkwOGEsCisJMHhlNWI1ZWY2YSwgMHgzZWY2YjVlZSwgMHgwOTkzOWNjOSwgMHhhZmRiN2IwNCwgMHg3Y2ZkZmZmZiwgMHhjN2VjZWU5ZiwKKwkweGY1ZWQ3YmQ5LCAweGZkYWQ2YmRhLCAweDgxMzFjOTE4LCAweGU0MjMwZGE0LCAweDA2ZmJmYzIyLCAweDEwOWQ5MjIxLAorCTB4OWQzN2ExMzIsIDB4ZDcyMTIwZTMsIDB4NjY5MjQyMTgsIDB4OTJkZGZkMmYsIDB4YmFkYzQyMTQsIDB4YTM0OWJmZTIsCisJMHhlNGZlYmJhOSwgMHg1ZjVmOWExYSwgMHhhNGFmZjBlYywgMHg0ZDFmNWI0ZCwgMHgyZDA5NmE3OCwgMHgyZmExZWZiZiwKKwkweDdjZDA0ZmMzLCAweGFkNzllY2ZhLCAweGNlN2ViNGM1LCAweDVkMGZjOTI0LCAweDEwYWIxYTFkLCAweGQ4ZTdlZDAyLAorCTB4NTIwMTc2YzIsIDB4OTA5N2U1ODEsIDB4OTI3ZmExMzAsIDB4NDVmOGU4YWYsIDB4OWZlOGI4ODQsIDB4MzdmZTk3MjQsCisJMHhhNWIyMWM4OSwgMHhkMWU0M2U2MCwgMHg5OTAyOWVhMCwgMHgzMTM2NDg0NiwgMHg3ZTYwNTVmZSwgMHhmNTA5ZmMzNiwKKwkweGQwNjc3NzQ0LCAweDc3OWU3NWVmLCAweDdmZWMxM2U1LCAweGRiMGE1ZjhlLCAweGYyNzM0N2U5LCAweDRkYzg3MjAzLAorCTB4NmQwOGM2ZDMsIDB4ZmIxZGM3NDksIDB4ZjkwODM5NWQsIDB4ZTQ5OTBjYzAsIDB4ZDhiNjg3NjMsIDB4MGZjYTZmZmUsCisJMHhkMjE0NzU0YywgMHgwODBiNjdmZSwgMHg0OWQ5ZjlmZiwgMHhjYzgyZGEzNiwgMHgzYmUxZWRhNiwgMHgxYTFmNGUyMiwKKwkweGQ5OWY2N2NjLCAweGUwZGZiOGU4LCAweDQwZGZkZGRmLCAweDVmYzBhN2ZmLCAweGU1YTEwOTRiLCAweDllMGMxY2NiLAorCTB4YzVkOWQ5ZTQsIDB4MTk4OWNlMzAsIDB4YmY0MzE2ZDcsIDB4MzIxM2E2NzMsIDB4OWQ0ZDU2ODgsIDB4NDQ5MGY2M2QsCisJMHg4OTFhZWJmMywgMHhjZGRiNGVkZiwgMHhjZjFjMGQyOSwgMHhjYmY4ZDk4MSwgMHhlODAyOTNhNywgMHg2MGVlOGU5NywKKwkweGZmYzQ1ZjdkLCAweDY0ZWYzOGViLCAweGNjM2ZkZTNlLCAweGZhMTAyYjFlLCAweDhhOTdmNjQxLCAweGEwNzI1ZGE5LAorCTB4NGJkMTUzZjksIDB4MmQwNTZhNDgsIDB4ZWU1MzE5MWYsIDB4ZDA5YTc2OWYsIDB4ZTZlOWU0ZjIsIDB4NzIxMzQwZjYsCisJMHhjNDI1MjExZCwgMHgxYWVhNzI5MywgMHhjOTE2NzdmYSwgMHhhZDQyMjhiYSwgMHhlZThjMGI2YSwgMHg0YTZiMGZlNSwKKwkweDIyZjlmZGZmLCAweDEyZmEwMWQwLCAweDZhMWZkNmZiLCAweGEwZTllOTljLCAweDdiMzc1YWY4LCAweGY0ZDA4Nzk2LAorCTB4MGYyY2MwZjUsIDB4ZDlmNWVmZTAsIDB4ZDY4ZjEwYjMsIDB4Njc2NjczZjYsIDB4ZmI1ZTAyMjcsIDB4MDZmZWVmMWIsCisJMHhmYTA4ZDAzYSwgMHhiNWIzYzczZCwgMHhlYTQ4OTA3ZSwgMHgzOWZiZjQyMywgMHgzMWMzZDEzYSwgMHg5MzAxZGZmZCwKKwkweDA5NjQyNTRkLCAweGIzNGQxYjMwLCAweGQyYTZkNTI1LCAweGU4OGQ2Y2ZhLCAweDk1ZTMzODkxLCAweDNiNjliMTAyLAorCTB4Mjg5OTQ5OTIsIDB4MGZmMzUyZTMsIDB4MjYzN2JiNjEsIDB4NzFjMzRhZDksIDB4ZWYwNzczZTYsIDB4YjgxYTU1YzcsCisJMHg2ZmE1MGU2NywgMHg3NTEyNzRkNiwgMHgyOTEyYmE1MSwgMHg3NWUyYzZhYSwgMHgxYTU0OGE1ZCwgMHhkZGM3MDM4ZSwKKwkweDY4NDI1ZTFjLCAweGUxYzBjZjdiLCAweDAyZDg2NTcxLCAweDQ3MzI5ZmQwLCAweGY1YzJjNDBjLCAweDQyNjc4MDAzLAorCTB4NGNhMjRhNmYsIDB4MThmOGU2ZWUsIDB4ZmJiZjcyZmQsIDB4MzM4ZjUwNmMsIDB4OGUwMGJiOGYsIDB4ZWNhYTkwMDksCisJMHgwYzhmMGUzYiwgMHhiMjAxOTM3YywgMHg0M2ZjODI5NiwgMHhlMDI0NjNjMiwgMHhiOTFlY2NmYiwgMHhlNTA3MDEyNCwKKwkweDE3ZjBhMThmLCAweGE0MmRhZTE1LCAweDE0MTJkNDdiLCAweDQ3ZWM1NmIyLCAweDAzMjRhNGY0LCAweGRlMTE1N2JkLAorCTB4NGY1MTI5MGYsIDB4NDIxNTdlNTEsIDB4ZDc4Yjg0YWIsIDB4MTI5ZTZhNWMsIDB4MzVmMDY1MzksIDB4MTkzYmE5ZjAsCisJMHg1ZTFjYmZjNywgMHhlNTE4YTA0OCwgMHg4OGQ0MzE1MiwgMHhlMzA3YzA3OCwgMHhlZDRkZjkyYiwgMHhiYWNiYTUwMiwKKwkweDk0N2VlNWQxLCAweDkwMjE4YTZmLCAweGUxN2U0MzMzLCAweDNiZjQ1N2RmLCAweGJkY2NmZjM3LCAweGNhOTFkMjljLAorCTB4ZDMzOTZiOTEsIDB4MmNkZjhhOGYsIDB4OGU5MmViNjcsIDB4YzgyMDA4YjUsIDB4MGY0OWI5NjQsIDB4NDAyNDEyMTAsCisJMHhlYjZmMDM3NywgMHhiYzc4YTJiZSwgMHhmYjViYmYwNCwgMHhlN2M4NmZkZCwgMHhjOTk4MzI2MCwgMHgwNTNmOTMyNywKKwkweDc5YmQwN2ZhLCAweGYwMDc3ZWQzLCAweDVlZGYzYWY1LCAweDVkNmJjYzA3LCAweDdhODI1ZWZlLCAweGU4YzdkMzhhLAorCTB4NWRhZjk1ZDcsIDB4ODFkNmNlNTIsIDB4ZWU4MDhkN2MsIDB4OWVhNzQ4YzMsIDB4YzZhN2QxZjIsIDB4YTY3NjdlMDIsCisJMHg3NDhiZjcyYSwgMHgwODkzM2I3ZSwgMHg2Yjc1ZDllYSwgMHhkMDJiNzg0OCwgMHhiNWU1OTRiNSwgMHhiNWUxNjk2ZiwKKwkweDlkM2I4ZTc0LCAweGQ2OThiZWJjLCAweGVkMDZiY2QzLCAweDNhZGJiZWE5LCAweDY4ODcwYjQ5LCAweDhkOGI2YjdlLAorCTB4ODVhYjFmYjUsIDB4MzExZjlhNDUsIDB4OGExNDg0OTEsIDB4YzJjNTZkNGYsIDB4YmU1YTRlOTUsIDB4MTdlYWEzNzUsCisJMHgzNGZkNWViNSwgMHgyZDY3MjVhMiwgMHhkZWIyZGZiNCwgMHhiZGYwMGFhNiwgMHgzYjIzYWQ4ZiwgMHg0NDM4NDlmMywKKwkweDM5YjFkZmM3LCAweDY5MjM5YmY5LCAweGY5YjIxNDNlLCAweGYyNGZkMzg3LCAweGQ5NDVmYWY4LCAweDAyMjg0NGE1LAorCTB4OWMzYTMxYjQsIDB4YWU1Yzc5MjEsIDB4YTllNTAyMDQsIDB4N2VjYjdjYmMsIDB4YTQ4ZWJmZmYsIDB4NWQzNjNkZjAsCisJMHg0NWEwYWZmMiwgMHg0Y2NmZDYzYiwgMHg3NjllMjhkMCwgMHgzZjA0ODE2OCwgMHhjMGYwN2Y0ZCwgMHhjY2VmY2M3YywKKwkweGRkMDAyNjBjLCAweDlmOWM2ZTc2LCAweGMwZjE0YzAwLCAweDQ2MWI5OWU2LCAweGQyNjE3YjQxLCAweDZjZTkxZDYxLAorCTB4MWY0N2ZmZDYsIDB4MDBlYzNhMjgsIDB4OWU5OTRiMzgsIDB4N2UwZDZhNGYsIDB4YmNmOWEyNTMsIDB4ODliOTEyNDksCisJMHhhZGNmMjE0ZSwgMHgxZmRiZGMyMSwgMHg0ZjU4MTFiMiwgMHg4YjZkZThmYiwgMHhjZGQ0NGViZSwgMHhiNGViNTc3OSwKKwkweDVkN2Y4MThmLCAweDIwMDkxNjBmLCAweDg2MzUzYmRhLCAweDkyMzc0MWU3LCAweGJlZWM4YWYwLCAweGM4NWNlZmUzLAorCTB4NWQyOTEzZWEsIDB4YmYyZTBlODAsIDB4OTY2NzU5NjIsIDB4NDc1NmY4NWEsIDB4M2M3MTcwNzksIDB4MWM3NTVhYjksCisJMHg4OTdhNDg4ZiwgMHg1NzhiZDY5MCwgMHg2MjQ2OWZmYSwgMHhmMDdhZTlmMCwgMHhlOWY1ODEyOCwgMHg4MTYzZTc4YSwKKwkweDdjYTA1ZDI3LCAweDljYWI4MzBmLCAweDFjMWViOWVmLCAweDYzNTdjYWY3LCAweDIxYjFmMWUzLCAweDdmYTAxZWVmLAorCTB4NjE3N2M1MjIsIDB4NTBlYjA0MjQsIDB4MGEyNDYxN2EsIDB4NTdjOWUyZmMsIDB4OWEwYmIwMzQsIDB4YzVjOTMxMDksCisJMHg3Y2ZiZDFhMSwgMHgxMzM3MjAxZCwgMHhhZjU4M2UyMiwgMHg4MzdlOGRkNywgMHg4MTU2OGZjOSwgMHg2ZmU2MzBmOCwKKwkweGI3ZTRmN2I0LCAweGMxZmI1ODkzLCAweGY4NzI4N2E4LCAweDY5Nzg1M2NlLCAweGNiODdiYjM5LCAweDg0N2Y0ZjU5LAorCTB4NzMyNDQ3YWQsIDB4NGY3NWMyMWMsIDB4NWU3NTYxZTEsIDB4Yzg0YzdkMWMsIDB4OTdjYjk0MGEsIDB4ODE3YWUwNDksCisJMHhlZGNkZGVhNiwgMHg2YzA2YTc1MSwgMHg3OTAwZGZhZSwgMHg5MTAyNDBiNywgMHgxMzRkZGYzOCwgMHg0MmQyN2FkOCwKKwkweGU5YTA1ZDc0LCAweDE2MmY0NGEzLCAweDY2NGI5ZDcwLCAweDJlYjJkN2ZhLCAweGJjOWZkMWY1LCAweDE2ZTkxNjVkLAorCTB4ZDQ2OGRmNDAsIDB4ODczNDgwM2UsIDB4MjNjZDMxZjgsIDB4OTI0NzRjMDEsIDB4MjZhZjRjNTYsIDB4NDlmMzRjMTEsCisJMHhhNDA1YTYzYiwgMHhhZjQzNTMxYiwgMHg0MjJhODlmOCwgMHhmYWM0YzQ3ZSwgMHhhNGU3MjBjOSwgMHhlNThiNjNkYSwKKwkweDMyNjRkMGJiLCAweDNjY2UzZWIyLCAweDczNzgyZDlhLCAweGY4ZWJmODkwLCAweGU3NWYwMjFkLCAweGZjOGFhNjQ4LAorCTB4ZjE3YWY4NDMsIDB4ZTgxOGIwNmUsIDB4ZmMyODU0YzUsIDB4ZWZjY2RiYmIsIDB4MGViZTI0ZTIsIDB4NjkzZGVhMzgsCisJMHhkZDMzNTc4MCwgMHhjZDU0NTQ4ZCwgMHhmMDZkNWE3YywgMHgxYzI0NDRhOSwgMHhjNDFmMzJjNywgMHhkNmI4Y2M2MywKKwkweGZiNzM1NmZlLCAweDljOWY5OGM2LCAweDQ5MWYyM2EyLCAweDUwY2Y2NjZlLCAweDcxYmRmNDM4LCAweDA4MjhkMWYwLAorCTB4YWI0MTllN2MsIDB4MjliMjNhZGMsIDB4YjY0OTRiYmYsIDB4NmI5YTVhYzgsIDB4ZTg3NjRmNzQsIDB4ODkzZjJmMzgsCisJMHg3Y2ViNjc0NywgMHhiZTJhZjBhYywgMHhhOWIzYzE4MSwgMHhjYjBhOWUwNywgMHhjMjk3ZmEzYSwgMHhmZWE2NGZmMywKKwkweDFkYjI0Y2E0LCAweDg2YTIwYmQ2LCAweGJjNTZkZTcwLCAweDQyZGVmOWY2LCAweGQyZTRmZThmLCAweDU3ZDY2OTkxLAorCTB4MDJkNzhhNGEsIDB4MDY5Zjg1ODcsIDB4ZTM3YzdmNjgsIDB4ZTQ3ZmVhNGIsIDB4MjExYmZhYzMsIDB4YTllYzJhNDEsCisJMHhlNjAxMDFmOSwgMHgxYTQwYWQ3ZiwgMHhjODVlMjkxMywgMHhhMGVkYTI2OCwgMHg2YWY1Y2Q3MCwgMHg2OThiOGVjYywKKwkweDkxZjQxOTM3LCAweDc0YzkwYjY2LCAweGVlOTJjZmJlLCAweGU0M2VkMDIzLCAweGY0MWQ5MTI3LCAweDZkZjM2N2IzLAorCTB4N2Q2OTViYTUsIDB4NjNiNjlmYWEsIDB4MWU0MDA1ZmQsIDB4MGI2ZDFkYWUsIDB4OWZkMWI5NDAsIDB4ZjUzMjllNGUsCisJMHgxMTJlZmQ0NywgMHhlODM2ZTFmMCwgMHhlNGMzZjE2MywgMHgxZmI0MzZiMSwgMHg2ZmEyN2M5NSwgMHhjNzVmMjM4OSwKKwkweDFkMTU3Y2I5LCAweDllYjBlYTcxLCAweGIwOTRjYWI4LCAweDhmZmExYjMzLCAweGI1M2U0MzE0LCAweDVkNjFmODlhLAorCTB4ZTZjZGQ0OWYsIDB4MzBlMWM2NTEsIDB4NTlmYTlkZTYsIDB4NmE3ZTAwNDAsIDB4YzAzYjMxZjcsIDB4M2ZkMDQ4NTUsCisJMHg3NGRhMzI1NCwgMHhiNGRkMWZmMCwgMHg3ZTQyZjUwZSwgMHg1MDUzMTc1NCwgMHhkODNmYTIzZiwgMHg1ZjNkOWUxZiwKKwkweGQwMGJlZDNkLCAweGI5ZDQ3ZDdlLCAweDkyYmUwNzZhLCAweDlmYTBlOWZjLCAweGM4NTY4ZjU3LCAweGY4YmRmYTYwLAorCTB4ZmZmNjNiM2IsIDB4MTg2MmE3YjksIDB4NDdjZjk5ODksIDB4MGJiMWQxMGQsIDB4YTY3MGMxYTksIDB4NjdhNjE4ZTEsCisJMHhlZDMxZGExYiwgMHhkMzBiNzg2YywgMHg1OTRhZTlmZSwgMHhlYmNlZGE4ZSwgMHhjMGQ3ZTI3ZSwgMHgzZjBmMTAxZSwKKwkweGMwMGYzNDQ3LCAweDVjNzVkNTFkLCAweDEyYTIxYzE3LCAweDgyODAyZWIzLCAweGQzNmZmZjA2LCAweGRhZjBiY2Q4LAorCTB4MDg2YmM0NmMsIDB4NjdkNTRkZTYsIDB4ZTAzNjc4NzgsIDB4OWUwMDBhNWIsIDB4YzIyMjM4ODcsIDB4Nzc4NjdjZDIsCisJMHgwMWQwM2ZjMCwgMHgzYzhlOGJjYSwgMHg1Y2YxMDJiNywgMHg5ZTAyYzY0ZCwgMHgwY2E0YzkzNywgMHgxM2UwM2NmNCwKKwkweDgyN2Q4OWQ2LCAweDAzODAwZWVkLCAweGZlNjlmM2YyLCAweGMxZmE4ZmZhLCAweGY3ODY1OWZiLCAweDllMjk5NzhjLAorCTB4NGI0OTRlMDAsIDB4OGVhZGM2NjQsIDB4OTEzYjk1ZjIsIDB4MjdkNzEyMGIsIDB4Zjk5MjdhYmQsIDB4YmRmNmJkZDksCisJMHhjZjAwZWZmNiwgMHhhYzg5NDY5NiwgMHg2OGE2YmM4NSwgMHhmN2I3MTE0YSwgMHgxNTgyNGE0MSwgMHhkY2RmYzFkMywKKwkweDI4ZmQzZTU2LCAweGUyYjkwYmQ4LCAweDVhNjQ4NzU3LCAweDNhNWViNDNlLCAweDRmMjMxMWQ5LCAweGZkNzQ2NTU5LAorCTB4YjBjMjc2YTQsIDB4ZWNmMmU2ZTUsIDB4MDc0ZjM5OTAsIDB4YjczNDdmNDAsIDB4YzQzZTVjYzUsIDB4ODdhZWY1YzYsCisJMHhhZDFlNDA3OCwgMHhlOGI2NWFmMywgMHhkM2ZkNzE1NywgMHhlYTI0MGQ1NSwgMHgwMmYyNjM5NiwgMHgxNzkxYTdjMywKKwkweDQyM2IxM2JjLCAweDQ2Y2I3ZTc0LCAweDRjMDM4YzExLCAweGIzZjViMWI3LCAweDdjYTNiZTE1LCAweGQ3NGYyZjcxLAorCTB4NTIzMWZhNWIsIDB4NDZkYmEyNjksIDB4MTkzZDMwYzYsIDB4ZGRiYTdkNmYsIDB4NDZjZTNjNTYsIDB4NGRiMDZiZmIsCisJMHg3MmEzNjcxZSwgMHgwNDIyOTJlNCwgMHg1Yjk3NzdlYywgMHg5M2Y5ZTNkMSwgMHg4ZTEyNmRkMywgMHhlYmI1MjA5ZiwKKwkweGZiYWI4NTIyLCAweDRhZGZlMjNhLCAweGVlNGNiZWYxLCAweDJjN2M4MjhlLCAweDIxZmNkNjJiLCAweDMwZmU0NzUwLAorCTB4ZDUxMjYzY2EsIDB4MTVmNjYyNjEsIDB4NzAwMjUzYzEsIDB4NmM0YTc4NTAsIDB4ZmIwNDRlMzgsIDB4MDczOGE2ZTksCisJMHhjYzk5N2RmYiwgMHg0YTM2NWRmYSwgMHhmNjM3NjgyMywgMHgzNjU1ZTcwMywgMHhkODBjZTExOSwgMHgzNGZkMDkwNCwKKwkweDE1NTU5NzRlLCAweGEzNGRmNzM5LCAweDlmNTU0ZWQ5LCAweDI2NjdmZDA1LCAweDc4YzE2NzA1LCAweDdlNmZiOTQ2LAorCTB4MTk2M2ZhMjksIDB4MmJmNGNjYzMsIDB4MDE2N2Q0NzcsIDB4MjIwNjU0N2YsIDB4NGU3ZjgwZDMsIDB4OTI2YzVmN2IsCisJMHgzNmI3YmNlOSwgMHhmMTQ0YmYxMCwgMHg3MDJiOWVmZiwgMHg3MzU3ZjQxYiwgMHhiMDA4ZmQ3YiwgMHg1ZTA2ZGY3ZiwKKwkweDNiMmEwMDk4LCAweGE1YWM3YTgwLCAweGEyNWZhNTY0LCAweDE0ODk3MmU1LCAweGNhM2YyOTk1LCAweDI1YmYwZjEzLAorCTB4MmExYTQwMTcsIDB4OTM4YjM4ODYsIDB4NDc3ZDMzZDQsIDB4MzUyMjRiZjUsIDB4ZjUyMzFjYmQsIDB4YTI3ZTIxOGYsCisJMHg3MmQwM2M4MCwgMHg2MDI1NmY1NSwgMHhkYmE4MzgwZiwgMHhlZjg2MzI3MCwgMHgxZTczNGM5NCwgMHg3Y2Q4ZmE2YywKKwkweDcyZTM3YTdmLCAweDI3ZTc5ODI5LCAweDA5ZmUwMzg3LCAweDQ5ZGRlOWRhLCAweDI2OTI3ZmNjLCAweGRlMDAwYmZhLAorCTB4YTZmZmFmN2IsIDB4YzRmY2YwMDYsIDB4NjdmOTMzNjYsIDB4NWE0ZDdmNTYsIDB4Nzk2OTZmZmUsIDB4ZmVlMjY4MTAsCisJMHhkNWZjYjRiNiwgMHg4MGYxYmNiNCwgMHg5NzljNTY5NywgMHg5NDMyY2E2MywgMHgyNGYwMDUwYiwgMHhiZjA3ZjkzMiwKKwkweGU0MWQ2N2JlLCAweGNmNWJmODc4LCAweDU3MmY1OGRiLCAweGY4MzViYzM3LCAweGE3MjBlMWMzLCAweGE0M2Y4MzFkLAorCTB4MDUyZDU5YzQsIDB4M2U0MmZmOTEsIDB4MWMyOGI1ZjAsIDB4MDk4Zjk5OTIsIDB4NjIxMzRmNzgsIDB4MTgxNzZlNTIsCisJMHg1YTljOWJmNiwgMHhkYzk0NzQ4OCwgMHg5ODhlYTlkMiwgMHg4ZmMwZGRmNSwgMHhjMWRkZmNiMiwgMHhmNDg3OGUxZiwKKwkweDc4YWQ0YzZkLCAweDAxMjBhNDU1LCAweGQ3NjhkMDNmLCAweGUwMThiNzEzLCAweGUyMzRlZmZhLCAweDFmYzQ3OWE5LAorCTB4YTQ3MzM4YTUsIDB4N2E2YTc4YjAsIDB4ZjMwYTI4NWUsIDB4MDlmZDUyNzIsIDB4MjMzZGQzZWIsIDB4ZjBjNTZiNWYsCisJMHgzYjBmYzU4MSwgMHgzZjIwYWQ5NCwgMHg2MWI2OGNiNCwgMHg3ODY1YjM1YywgMHhmOTAyOTBlNCwgMHhkMTQwNmEwYywKKwkweDVkY2E2NzdhLCAweDRjNmQ4ODIxLCAweGUzN2M2M2NkLCAweGQ0ZjViM2Y0LCAweDdlOGMzYzM1LCAweGJkYmZhMTk4LAorCTB4YWQ1ZTFmMWMsIDB4NjdiM2Y1MWMsIDB4MzFkZWQ5YTIsIDB4MmIyNzAxZDYsIDB4ZGIzNmY0YTIsIDB4YTY5NGNlNTEsCisJMHhiZTgyYzU0ZiwgMHg5YjUzOWE3ZSwgMHg2OWU1MWE3NiwgMHgyMzNmYjlhNCwgMHhlMzZlZDFkZSwgMHhjOTZiOGJmMSwKKwkweDU5Mzc2OGI1LCAweGUxZmQxMmUyLCAweDcxZjg2YmNkLCAweGRjYmNkOTEzLCAweGZjMTg0OWQzLCAweDUxODlmNGU2LAorCTB4Y2ZkNzliYzQsIDB4OWJkODY2ZjAsIDB4OWJiZjNlMWUsIDB4ZmMwNDIzNGEsIDB4ZjNmODllYmUsIDB4ZWI2ZjBjY2QsCisJMHg3ZmEyOGJhZiwgMHgyOWVjN2ViNywgMHg4NWJkNjdiNCwgMHhjZTNmMjYxZCwgMHhhMWNhMWVmOCwgMHg3NmM0ZmNmZSwKKwkweDE4ZjZhMWE4LCAweDIzNzExYmNiLCAweDE5ZTlhNzhhLCAweDYxZWJiZDY5LCAweGFkZGJiNzJiLCAweDkyMjc1Mzc0LAorCTB4NDc2M2QwNjIsIDB4ODMxNWE3NDcsIDB4ODRiN2JlZGUsIDB4M2NhYjRlYzIsIDB4NjI5NzU4N2EsIDB4N2VmMmFkZjAsCisJMHhkZjg2N2NkNCwgMHg3Y2Q4Y2I3YiwgMHhkM2Y0N2I2OSwgMHg5Mzk4OWRlZiwgMHhmMjY2ZTMwNCwgMHg3ZjExYjBmOCwKKwkweGViY2JmMWVlLCAweDI4NGY3OGNkLCAweDJkODVjNGI0LCAweDY3ZWFiNzdlLCAweGNjNGI1MmY0LCAweDVmMzlhYmU1LAorCTB4NTdhNzIyMmIsIDB4ZThjZTE5MmEsIDB4NGYzZTMwMzUsIDB4ODRiY2Y4MzIsIDB4ZGYzMjc5ZjEsIDB4ZDEyZjQ4MzcsCisJMHg5MjFkMDEwZSwgMHg0ZGZmOTk0YSwgMHg0ZGYzN2UyYywgMHg1ZThjMWQyOSwgMHgwMGM4OGYzNywgMHhhOWZlZmMzZiwKKwkweDk3NjYzZWRkLCAweDcxMjZiYTMwLCAweGM2ZWZiYzdlLCAweDcxYzgwMjExLCAweDQwMjY4OTcyLCAweGMzM2U3MjdkLAorCTB4MTNjNTMyNTMsIDB4YTVjOTc3YWMsIDB4NGVmNmVmY2MsIDB4NTI1ZGIwZDQsIDB4MGI1YmEzMDksIDB4NWZlMTRjN2MsCisJMHg4OThhNzQwMywgMHg1YjRiM2IxZiwgMHg2YjdmYTA3NSwgMHg3NDFkNGVmMSwgMHhlMWM1MzI1OSwgMHhkNGNmMGEyMCwKKwkweGQ4MWIwYTUyLCAweDgwNWZiNDlkLCAweGM1MTg1M2Q3LCAweDQ5NTI1YWI4LCAweGZjYTVkODcwLCAweDgyYTI0MjdhLAorCTB4MTBmODg3Y2QsIDB4ZTk0YjY4NmMsIDB4N2U1ODI1M2MsIDB4MjBiMjYyNjgsIDB4YTdlZjdlZDAsIDB4ODBmMWMwN2MsCisJMHg4ZjE3M2M3MSwgMHg3ODVmZGZhMywgMHhmZGRjZjUxMiwgMHhjODM2NGRmMCwgMHgxY2ViZjZhOSwgMHgzNmE1Mjc5YSwKKwkweGY3MDdmODNmLCAweGYxMDhlNjk3LCAweGJjYzZlN2UyLCAweDJhY2I4M2ZiLCAweDM1ZjgxMmM3LCAweDk1NzJmYzMxLAorCTB4MTZkZWUzYzgsIDB4MjI0NzVkZmUsIDB4NTdjODJlNmEsIDB4YTVmNzZmNDgsIDB4ODMwZmVhZjUsIDB4NjVlNDdhZmYsCisJMHhmZWNiZTMxMiwgMHg4N2ExODlmNCwgMHhiMjE4MjRkZCwgMHgxZmQ1Zjc2NSwgMHhkZWY4Y2U5MiwgMHg3OTQwMTc5ZSwKKwkweDI0ZWYwM2ViLCAweDhhNTJhZmM2LCAweDkxMzZmY2I5LCAweDVlODY3ZmRiLCAweDE0MDc5MmQxLCAweDAwYTEyNzI3LAorCTB4ZDcyMjc3YWUsIDB4MDJkYTRmNGYsIDB4ZjA1NGM1MGIsIDB4NGViOGMzYmIsIDB4YWU3NGM4YjgsIDB4Y2E5ZjE5MzcsCisJMHhlNmE2ZmY5YywgMHg0YWUyYmQzMywgMHg5Nzc2YjA4OSwgMHg5MDNhYTc4ZCwgMHhhODM0ZDZkZiwgMHhjNjVhMWZhOCwKKwkweDQzOWVkNWRlLCAweDc4NjZiMGYxLCAweDczYmUxZjkzLCAweGI5MTk2YjhjLCAweDNjZGJmNjhkLCAweDJiNzA3OTdjLAorCTB4MzBmZGMwMGMsIDB4YWMyMmJmZDQsIDB4OGQ1ZjhjODMsIDB4MGUwMzMwN2QsIDB4NjFkMjE5OTIsIDB4N2UwOWNjOWYsCisJMHgyNDY3ZTAxMSwgMHgyNDkwNWZkYiwgMHhlYjhmYjUxMiwgMHg0Nzk1ZGYxZCwgMHg2OTY3Y2RlMSwgMHgwZGMxOWYyOCwKKwkweGI2ZWJjOWZlLCAweDZmOWMyYWUwLCAweGEyOTQ2YjdlLCAweGM5OWJjZTliLCAweDQyMjE2YWNiLCAweGViY2MyMjVjLAorCTB4YjIxZTdjNzIsIDB4OWY4ZWJlMzEsIDB4MDI1ZGY3ZjYsIDB4ZTFjNGQzZWMsIDB4ZGIyMmRkZGYsIDB4NDcyZDU5YTcsCisJMHg3ZTA4NTA4OCwgMHhmMjg5ZWQxYiwgMHg2YTZjZWFjOSwgMHhhMzgxYzc5NywgMHhkNTZiZjM5MSwgMHhjM2Y4NjcyZSwKKwkweDg5YWI3ZTE4LCAweDc1ZjI5OTI0LCAweDFmYzIzM2ZiLCAweDc3MTFmYWM2LCAweDUxNGZiODBhLCAweDQzNThkMWNkLAorCTB4Y2YwMGIyM2EsIDB4ZjYxYTI5ZWYsIDB4NDhlYjZiNTcsIDB4ZTkxNzdjODMsIDB4NzgwMjViNGUsIDB4OGI4ZjAzMTAsCisJMHg1Mjc3ZmQ3NCwgMHg5MGI4YzRiZSwgMHhkNmViNjA3YiwgMHg4MWE3ZjBlNSwgMHg0MDg1ZDEwYywgMHgwZmE5ZTRjYiwKKwkweDE3OGU5ODc5LCAweDY5ZTMwN2RjLCAweGQyYmYyYjJhLCAweGY1ZjBlMzcxLCAweDRkN2NiMTBiLCAweDZhNTk1N2M0LAorCTB4MTQ3ZjZiZTUsIDB4MTI5ZGRhZjksIDB4OWZiNzdhYzUsIDB4OGZjMWI1ZjEsIDB4YWQxZjljODksIDB4YmY4YzY4N2MsCisJMHhkNmFmYzc5ZSwgMHgzMzVmM2U3MiwgMHg3MDg1NDlhMSwgMHg5YjUxZGFkZiwgMHgyY2U2OWUzMCwgMHg3YzAxNWNkYSwKKwkweDI1YWEzMmRlLCAweDY0ZGU3YzBjLCAweDE3ZGYzNWYwLCAweGRiMmVmZWExLCAweGEzNWFkMzFmLCAweDcyMjY0ZWIwLAorCTB4ZWVkNDU2YmUsIDB4ZWI3YjkwMDYsIDB4Mzg5MzVkN2MsIDB4YmUwNTM0YmMsIDB4NWYzOWI4MDYsIDB4OTNmODA3YmYsCisJMHhhZTA4ZGRmZCwgMHgwNzZiZDdjMSwgMHg0NWJhZDdjYywgMHhmZWQzOWI2ZiwgMHhjMmQ5MjdmYywgMHhmMTg5MWVkNywKKwkweGQ3YzA2N2U3LCAweGIzMGE0ZjAwLCAweDk2M2VkYzYzLCAweGRmZWE3ZWNhLCAweDA2ZTdlOWM3LCAweDZiOTlmOTg5LAorCTB4ZTVhYzFjYjksIDB4MWZiNmIwNzIsIDB4MjIzZmY4MzksIDB4OWFmZTAzZjMsIDB4Yzk4YjMwNzIsIDB4ZTVhMjQzODEsCisJMHg4Y2FlOTM4OSwgMHhkM2IwMjUxZiwgMHg5ZTdiYzhlMywgMHhlMWI1ZmMyNCwgMHhiYzQzMzRkZSwgMHgyN2ZlM2M3MiwKKwkweGJlODRjZDMwLCAweGNmZDIzNGY0LCAweGU0YzBlNzQ0LCAweDczYzk4ZjNiLCAweDc2YmU3MjdmLCAweGZlMzg3YzY4LAorCTB4YTdmNDY0NTMsIDB4MjY5MjJlZjgsIDB4ZmZiZTM5NWMsIDB4NzIxNTcwNWEsIDB4NDNmMDM2N2UsIDB4YjcyOGM1ODIsCisJMHgzYTY2N2EzMSwgMHg4NmE5MmJjMCwgMHhkMzA0Nzk5ZSwgMHgyOGFkNzlhOSwgMHg4MWJlODZhNywgMHgyYmZhMGE1OCwKKwkweDNiYzYyYjZhLCAweDY4YWQ5OTljLCAweDk4ZjMzOTlmLCAweDI0ZmMzMWJlLCAweGI4OGQ3Y2ViLCAweDMzZDcxMzc4LAorCTB4MDIyMTc5NDksIDB4ODUzZDlmZWIsIDB4OWVhYTNmNzAsIDB4Y2M5OTUxZjksIDB4ZDVlMjMwMWYsIDB4MThhOGZkODYsCisJMHhiYmQwZDQ3ZSwgMHg3OWE3OWY3MCwgMHg5N2RhM2Q3OCwgMHgzYmQ2MzdjZCwgMHgzNmMzZWRlMiwgMHhmMDc3ZWVmYiwKKwkweDNlZDM1ZjRkLCAweDBlNWExYWViLCAweGJiYzlhZWZkLCAweGMzYjNjNDlmLCAweGZiMTg3OThjLCAweDZlM2U0ZTQ2LAorCTB4YThiNTFlNzMsIDB4MzJkZjVjNjAsIDB4Yzc2YWRlZmMsIDB4ZmViMjY3MzQsIDB4N2FlN2JlN2EsIDB4YmJkMWVlNTcsCisJMHg1NDc2OGYyYywgMHg2ZjlmOGM2ZSwgMHgwM2UwYzdlOSwgMHhhMzQzZTg4NSwgMHhlNDE4MzcxMCwgMHg0Y2U3MDkxZSwKKwkweDNmMDQ4NDlhLCAweDkyNGRjN2Q4LCAweDkwNzI5ZDIwLCAweDVhYTk3YjFlLCAweGZmNDAxNjg5LCAweDljYmM2NjI3LAorCTB4M2RiMmY2ODUsIDB4YmNlNDA2YjgsIDB4MDM4MGFiZTksIDB4NTNhYmE5ZTIsIDB4OTZjNmYzNWUsIDB4ZTZmMTlkOWYsCisJMHhhNTZjYzFiNywgMHg3ZWUyZDVkZiwgMHhiMTQ4ODM4ZSwgMHhkYzI3NjNmYiwgMHg0YjdlZDFkYiwgMHhlOWM3MzdjOCwKKwkweDA5YWUxNDljLCAweGNjMTNjNDAyLCAweGJmOGYwYWU1LCAweDcyZTY5OTI4LCAweGE0NWZjNzk5LCAweGU3Mzk0YjE0LAorCTB4YmUzNGI5MGYsIDB4ZWI5Mzc5NWUsIDB4NzYwMmRmMTUsIDB4MWNjNGU3NGUsIDB4NzEzYmQ3MTYsIDB4MzA2NzRmMmIsCisJMHhkYmM3M2VmZSwgMHhjMjM0ZjM3NSwgMHg1MzVmZWVmNSwgMHhmNmU1MjUxZiwgMHhlMjliZWZjMiwgMHg5OTIyZjhjNywKKwkweDNlYmI0NzY1LCAweDJiOWQ4NTJiLCAweDI2ZTdiMTIwLCAweGEyNmI1ZmUwLCAweGNjZmM2MjQ0LCAweGZmOTc4MWExLAorCTB4NjFkNGYxMDgsIDB4MDZjYWJlMGIsIDB4ZWExNTZiM2MsIDB4ZGI0NjU4NjEsIDB4Yzc5YzZjYTUsIDB4MjhmNzQyNjMsCisJMHgzYWU2Y2YxOCwgMHgwMmY1ZmI4YiwgMHg2YTcyZTM0NSwgMHhkYmY0MGIxMiwgMHhlZjg1MjFkYiwgMHgzYTUyYzBiZCwKKwkweDkxMDU3YjhmLCAweDM3YzBlY2JmLCAweDhjMjlkMDIyLCAweGIxNDQ4YmE5LCAweDMwM2E0M2RlLCAweGU2MWIwODlmLAorCTB4NTE4N2UwYjksIDB4MzNjNDRiYmYsIDB4YzYxYjYxNGMsIDB4ZjZjYzdlOGQsIDB4Nzg4OGQ2NDMsIDB4MDNhODgzNmUsCisJMHhlZGM5YmZiNCwgMHg0Mjk3ZjgyYSwgMHgxYWU3N2U4OCwgMHg0MGJlNzdmOCwgMHhjNGM4MzE2YiwgMHhjNjA4YjJlMCwKKwkweDdjZWRhZDkzLCAweGEwMzlkODUzLCAweGFmZmI3YTNlLCAweDUyMzdkZjRmLCAweDU0OGY4MTczLCAweDFjZTgzNzJjLAorCTB4Njk0ZWY1MTQsIDB4NWZmMmRmNDIsIDB4MTJmMzgxODksIDB4ZGM1OGFiYzYsIDB4MmE1ZjVhY2QsIDB4ZGU0MDE3ZTksCisJMHgwYmMyZTVhYywgMHg3ZTA1M2E3ZiwgMHg2NDY3YWFmNCwgMHgzY2E3YTNmNCwgMHg0MWJmNDcyMywgMHgwNDViMzVmMywKKwkweDA3NmQ1M2Y0LCAweDc3MGZlODlkLCAweDUxZjJjMjNlLCAweGZiNDNhMjhmLCAweDhjMDVkYjczLCAweGRiZDlkNTA3LAorCTB4ZTIwMWJkZWYsIDB4MDQ4OGNmOGEsIDB4MTk3MDhkZmQsIDB4ZTI5ZDhiZWUsIDB4NTlmYjI2NzMsIDB4ODAwNzljYmUsCisJMHg5YTFjYjY2YSwgMHhlYzU3ZGYwYiwgMHg3N2Q4MTNiNywgMHhmMTZlNzlhOCwgMHhmOWEwNmZiNywgMHhmNDY0YzdjNSwKKwkweGFjNzY2YTUxLCAweDY1N2Y2MDUwLCAweDQwODg1ODQ5LCAweGMxMzI2YmJlLCAweGM0ZmI0M2YxLCAweGJlZGEwZWYwLAorCTB4MzY5ZWRiY2IsIDB4MmJmYjBkYzcsIDB4NDU1ZGEyMGUsIDB4YTdiNGY2ZTEsIDB4YTlmNGE2Y2QsIDB4MGQzNTNmMGMsCisJMHgyZGRjYWJiZSwgMHg5OGZmYzFmOCwgMHhhMzhlY2NmMiwgMHg5YWJiZjQxOSwgMHhhNzNjMDQyNywgMHg0NWNiYjU1MCwKKwkweDljYmExOGI0LCAweGRmYTMxMzZhLCAweDlkMzNmODgwLCAweDhiYzVmODI3LCAweGMwMzRlYjQ5LCAweDBkOGVjZDdiLAorCTB4YjcxMzE2OGEsIDB4OTIzMGQzM2MsIDB4N2NkZWY2NjgsIDB4MWM3NDEzY2QsIDB4OTNlZDVkZmEsIDB4NThhNjFmODIsCisJMHhlMDQxMjM2YiwgMHg5Y2U3Y2U4ZiwgMHgzMGRjZGI2NSwgMHgwOGNhMTViZiwgMHg1OWFiY2MwZiwgMHhjMzhiNzY4MSwKKwkweDdlYzFmNmYzLCAweDhiNzg2NTdhLCAweDU3ZDY4ZDMyLCAweDI5NDViMjNlLCAweGFhYTdlMThmLCAweDJkMTBkNzVkLAorCTB4NmQ0ZTNmODYsIDB4ZDRiZjRkY2UsIDB4YWU4NjdiN2EsIDB4NTRmMGIxNWIsIDB4ODhiN2E2MTIsIDB4YzQ2NjU2MTQsCisJMHhjODc2N2JlYywgMHg0NTNmOWM0OSwgMHhkZjA2ZmY1MywgMHgxODI3NWU4NywgMHhlZjNkMGFjNywgMHg3NDFhYmM0MSwKKwkweGJkMzJhNjViLCAweGJjZWRkMDYwLCAweDc1MjhlOWNhLCAweGIzODhjZDE3LCAweGQwMmY3YWFmLCAweDJhZjEwZWMxLAorCTB4MWJmYmQzMTUsIDB4NmM2ZTk4N2MsIDB4OWIzZTkwZDAsIDB4ZTE1NzdmMDAsIDB4N2I5NjA2YmUsIDB4ODg2MjkxMjcsCisJMHhhMjc1Nzg4YiwgMHgzYzlmNTJjMiwgMHgyMTk2MmY1ZCwgMHhmOTYwMTI0ZSwgMHg4MjgzZGJiNCwgMHgxYmY5ODk3NiwKKwkweDM4MzkyNmU5LCAweGI3NWM4MjBmLCAweDk2NGM0ZmM5LCAweDQ5YmViYWU4LCAweDdlMjUyZTA5LCAweDc3YjRiZTNhLAorCTB4NjA3NWM5NzIsIDB4YzhlNzA1YTcsIDB4MWQ5ZmIwYTksIDB4ZThmMTYwYWMsIDB4YTJlNDBmODgsIDB4N2NjYmVmODksCisJMHhkNmYyNjY0YiwgMHg3YzYwYTE5NCwgMHg4YmY3ZDM2NCwgMHg0MWVkYTFiNiwgMHg3ZDM2NWUxOCwgMHhlYzI3N2NiZiwKKwkweGU2N2VkMWFiLCAweDFhYWU1NGNhLCAweGVlNGZkYTY1LCAweDliNDlmYmU1LCAweDRmZDRkMTNiLCAweGEzMGFkY2RhLAorCTB4OGZkOGM1OWYsIDB4NmNmZDYwNzMsIDB4MTliZDdiOWEsIDB4NDY5NWI5OWUsIDB4OGZkOGY1M2YsIDB4NGFmMzYwNjcsCisJMHgxOTkyNjNiYiwgMHhiMWFhM2I5ZSwgMHhmZGRiZjQ5ZiwgMHgwNjg4MWY2OCwgMHhkYzc2OTBmZiwgMHg0ZWVmNzUxNywKKwkweGM0OTZiNzFhLCAweDFmZTRkMWYyLCAweDJhMWU3OGMzLCAweDk0N2NiMTU1LCAweDI0YzEzMTM4LCAweGIyN2E0OTRmLAorCTB4NzRhODNmMjksIDB4NmE3ZGE5YjAsIDB4OWY1NGM3MjAsIDB4ODViNTc2NWUsIDB4YmZhOGRkMmYsIDB4OGE4MTRmMzEsCisJMHhhYjM4YjEyNiwgMHhiZDQxNTgzMiwgMHg4MWQ4M2M1MywgMHhiYjA2YmJmOSwgMHg3NWRjZWY1MSwgMHhiMDJhZjA3ZCwKKwkweGQwNTYwMGY3LCAweGMxMjk3N2YzLCAweGJlMWM2YTMxLCAweDA4MTJmM2ExLCAweDFiMzRjZmM2LCAweDMyZWM3ZGE0LAorCTB4NzkzOWVmYmUsIDB4ZGUyMzU3YzgsIDB4ZDlkN2RmYTcsIDB4ZDEyNDQ3YmEsIDB4ZjE0YTQzZmMsIDB4YWRlZjMwMjMsCisJMHg4ZGUzYjMzMiwgMHg5ZDgyNDMzOCwgMHhjZTZiZmVhMCwgMHg4YTE2ZGEyZSwgMHg1MGNiNmJjMSwgMHg2ZjQyMmZjYSwKKwkweGQwNzIyZGJmLCAweDczYjhmYzA3LCAweDRhNTc2ZmY1LCAweGExYTZiZTE0LCAweDdhNmUxZTBhLCAweGUxZWRmZTVjLAorCTB4OWI5OWI1MTAsIDB4MDBmYjk2ODcsIDB4ZWE4NTc2ZmYsIDB4MTVmMWQ4OGYsIDB4OGUzZTdlM2EsIDB4ZGZjNjFiYmYsCisJMHhkOTNiMzMyYiwgMHg2NzNkYmUzYSwgMHg0NzdjNjlhMiwgMHg3YzY5ODU1NiwgMHhhN2M3NDI4NywgMHhmNTZmYjFmMiwKKwkweDhhN2M3YzNiLCAweDc5MDllYmJmLCAweGM3MDc3ZTU2LCAweGUwNTU2N2I3LCAweGE5MGFjZGY4LCAweGQwOWY4ZDMwLAorCTB4OTAwMWZlMzMsIDB4Y2RmZGMzOWYsIDB4ZjM3YWU3M2YsIDB4Y2QyYWIzZmMsIDB4ZmNkODU3ZjMsIDB4ODBmZWFlOGYsCisJMHhmMzgwOWY4ZiwgMHg4MGZlNTk3ZiwgMHg5MmFiM2ZjZCwgMHhmYWNlZGZjZCwgMHhkYmRmMTllZCwgMHg2MTU3ZmY4MywKKwkweDM3ZjVhZmZlLCAweGU2NDlkY2ZmLCAweDM2YWIwZmY5LCAweGM2Y2VkZmNmLCAweDI3ZjU2MzdmLCAweDhlMzc3YzdjLAorCTB4MDlmY2E2ZmYsIDB4NmFiMGZmOWIsIDB4MDdiMTVmMWMsIDB4Y2E0N2MwZmQsIDB4ZjA3YTg0OTAsIDB4YTQ2MWE5OWYsCisJMHhhMzVkNDA2MSwgMHg5MjNhNDBlMywgMHhjODM3YTljNSwgMHg1ZGM3MDgzOSwgMHgzZWVmOGMwOSwgMHhlNmZjYTA0ZiwKKwkweDI0YTdkNWVlLCAweGVhOTAyNTRjLCAweGQzY2U1YWNiLCAweDE1OGJiYjU1LCAweGQwODQyZmU2LCAweDQxYzQ1ODVmLAorCTB4YzQ1ZmI4NWQsIDB4YjQ2YzhjZjUsIDB4Nzg1Mzg3ODcsIDB4MjE4YmY3M2IsIDB4NzhkYzJmYzgsIDB4YWM1YjllMjMsCisJMHg3N2RjMTNiMywgMHhmYTMwNTZhNywgMHhjMGYxZmYxZiwgMHhmM2IxYWRlOCwgMHg1YThiYTZiMiwgMHgxM2ZlY2I2NSwKKwkweGVmMzhjNzgzLCAweGE2YWIyNDU0LCAweGE3ODgyOWZjLCAweDEyN2MzZDUwLCAweDllOWExZmZjLCAweGI0NzhlOTk2LAorCTB4ODNmMDQzZmMsIDB4MWI5NThhYWUsIDB4NzY4YzJlNzYsIDB4Y2U5ZjIyNzcsIDB4ZmUxY2JiZWIsIDB4ZjdjMzEyNTMsCisJMHhkYzA1M2JhOSwgMHhjMzdjZjg0NywgMHhkOWY0MDU1MiwgMHhjOTk3NTZhMiwgMHg3NGUzYTg2ZiwgMHg4ZWNlN2VlYSwKKwkweDc5YzY4ZGZiLCAweDE0NTA1YmJlLCAweGMxZmRmOTA5LCAweGJiMDUxZDZmLCAweDQxZTZmMTcxLCAweDI3NmVlZmE2LAorCTB4MTQ3MGQ1ZTEsIDB4NzlmYWMxNzMsIDB4ZmYzYTU1NDMsIDB4ZTNlY2NhZGIsIDB4ZWI2YjhjNDQsIDB4OWMxYzU4NDMsCisJMHg0OWI4ODEwYywgMHg3OTA2ZGI1OSwgMHg1MmRjY2QwOCwgMHhmOWVjOWIyNiwgMHhmY2U2ODM1YiwgMHg3Y2U2MTU2ZCwKKwkweDZkOTYxY2E3LCAweDExMmNjZjYwLCAweGVmZGExNmM4LCAweGNiNjVlYmY3LCAweDhlMzYwMGI5LCAweDc2ZTY0OTU3LAorCTB4YmJlZjFiMjUsIDB4YjQxOTg2OTQsIDB4OGU5MGZiZTgsIDB4ZTkxNTYyODMsIDB4ZGY2NTU3M2EsIDB4ZGRkNGYwMWEsCisJMHhhZTI4OTMyZCwgMHhiOGE5MWRjNywgMHg0NTRhMTQwZiwgMHhiMmE4MmRiZiwgMHg5ZGUxNWI3OSwgMHgwMGY0M2IyYiwKKwkweDhmZWU2Nzg1LCAweDE1YTdjNDQ0LCAweDJlODM4ZWZlLCAweGYzZWQ0NmRkLCAweDkwN2ZjZDhlLCAweDlkNmM3ZTIxLAorCTB4M2JmZTE1OGYsIDB4YTNlNzViOTYsIDB4Y2MzZWIwMmEsIDB4MTljYjU5MGIsIDB4YTlmOTU4OWYsIDB4MzZmMTdmNmUsCisJMHhmMzdiM2RiMywgMHhiNWZiNThiNiwgMHg1MzBjZDc2YSwgMHg1NmY4NDk3ZSwgMHg5YmM1ZmI1MywgMHgxN2VhOTllNywKKwkweGQ1MzEyZWI1LCAweDZhNTk2ODJmLCAweGZkMGJjZmNhLCAweDhlZmVkNGM4LCAweGY1NGMyYmU1LCAweDYzNWZhZmRmLAorCTB4NjJhZGJmYWEsIDB4NmI3ZjI5ODMsIDB4ZmI1MzIxZjAsIDB4OThiNmNhNWIsIDB4NDcwNzZkZWEsIDB4NjhlNDA3N2QsCisJMHg5ZTIyZWJkNSwgMHgzZWUwYmRmZCwgMHg5YmQ4MmY3NSwgMHhlZTEyZGMxNywgMHhlZDQ0N2U3MywgMHgzMzgzOTAxNSwKKwkweGI0ODE1ZWQ0LCAweGY0NzhmZjczLCAweDJjMWVhOWE3LCAweGY5YTI0ZDg3LCAweDJkNTU5OGNhLCAweDA5OTdhMDk5LAorCTB4NjU3MmNmZWEsIDB4MjRkMGFhYzIsIDB4ZDdiMDE3OGEsIDB4OWI4ODdjYTksIDB4MDQxZDEyMTUsIDB4MGY3MjRjY2UsCisJMHgzMThiNzcxZiwgMHhhOTk3MWRmNSwgMHg3ZDA1NGNkZiwgMHhiMTdhZGY3YywgMHhkZDc5N2UyMywgMHhkNGMzNzlkNiwKKwkweGFmNmE3ZTM4LCAweGIwMjE5MmRjLCAweGNlNTk3NWNlLCAweGI1NjkxODlmLCAweGIxYTczY2U1LCAweGViODE3ZGJmLAorCTB4ZTk4NTZhZDksIDB4MTliZGVhODMsIDB4ODY3MzYxOTMsIDB4ZTIyM2U1ZmEsIDB4ZjllYzliOWQsIDB4MGRiMDIyM2UsCisJMHg1M2ZlYjA0OCwgMHg5ODg2MWY4MSwgMHg3NmFhNmJmNiwgMHhmYmU0OWFlNSwgMHhlMTExMjFlYywgMHg0MDlkMDVhYSwKKwkweDUyMTdlYWY1LCAweDcyMDI4ZDYwLCAweDM1OTIzZDE2LCAweGExYzAzNDZiLCAweGVmNDA1NWFmLCAweDc1YzU0ZmVjLAorCTB4ZTk0MzZjZmQsIDB4M2ZhZmQ4MzYsIDB4ZjRjMDEwZDMsIDB4NGMzMjg2YTMsIDB4MzEwNDM1NGYsIDB4MDJhMWIwZmQsCisJMHhmNTBkOTNkMywgMHgyYzM0NzY5OCwgMHg4NmJkZjRjNywgMHgzNmVmYTYxMCwgMHhiYmZhNjBiNCwgMHhkZjRjNTY4NiwKKwkweGU5OGNkODZhLCAweDRjNjEwZDFiLCAweDRjNzQxYjNiLCAweGQxZTg3OTBkLCAweDBmNmUwMWJmLCAweDg0ZDcxYjFiLAorCTB4MmU3Y2MzZGIsIDB4ZTczZGE5OGQsIDB4ZjdmZjcwYzIsIDB4MTFmM2ZiYmMsIDB4N2Y5ZmVmNjAsIDB4NmNmYjhlY2IsCisJMHhjYWNiZTFmZCwgMHg1MWQzZmQ2ZiwgMHgzY2E1N2I0NywgMHg2MzlkMDgzYywgMHg4MTMzYmQ2YiwgMHgyMzY5YzlkMSwKKwkweGVjMWM2NGE1LCAweGNmZjRlY2ZmLCAweGM0YmNjN2NmLCAweGZkODRmNTJlLCAweGZhNzEzYzMzLCAweGZhNWQ3ODg1LAorCTB4ZjQ0NGU5ZTUsIDB4OTQ5OTgyZWUsIDB4ZmUxZWE3MWUsIDB4ZjdlODIyYWYsIDB4NjA3ZmFjMDIsIDB4NzExMTFjMDcsCisJMHg2ZGQxMjYxZCwgMHg5NWQ3YTA3ZSwgMHhlMTc4NGRlMiwgMHgyZjEwNTlmNywgMHhiZjgzZDczYiwgMHg4Yjg4MmNmNiwKKwkweGQ4YThhYjVkLCAweDNiMzZmOWZmLCAweGY5ZDJmODgxLCAweGNmYmMyZTAzLCAweDM2ZDhmZTc1LCAweDMyZTNjODJmLAorCTB4M2Q4ZTE4OWYsIDB4NmI0ZDYxNDcsIDB4Yjc2MWQ5MjIsIDB4ZTczNmVmYzksIDB4YTUwYWI3Y2YsIDB4Njg5YTFlNzgsCisJMHgwMzQ3YjM4OSwgMHgzODYxYTk1ZiwgMHhlMGQ5ZDIwZiwgMHg2N2U4ZDRjMywgMHg3MWMxNGY5OSwgMHg2NWNhZWNjZSwKKwkweDVlN2UzMzcxLCAweDQyNGVlYzgzLCAweDI3N2VhNTdlLCAweDg2OWZmZmI2LCAweDBjN2ViZmE3LCAweDIzNjkwODc4LAorCTB4NWUwODM4MWYsIDB4ZGI5OGJiNzEsIDB4Zjk3ZWZiN2YsIDB4ODE0Y2ZhNDksIDB4MjAzOTJhZjgsIDB4ODJmNjBlN2YsCisJMHgxMTc3ZmU5ZCwgMHg2MTIyNjUxYywgMHgyZWI3ZThkZSwgMHg2M2VjODYyMiwgMHg2OWI3N2NhMCwgMHg2NjlkZmEzYywKKwkweDczMTdmNGY4LCAweGU2YjdjNTJlLCAweDA0MjIzNGZiLCAweDljNDZiZjY4LCAweDgwZmUwYWE0LCAweDAyZjUzMGYzLAorCTB4Nzg4Y2FiYzYsIDB4NmVlNDk3NDksIDB4YzZmNGM2MTEsIDB4YmM3OGVhNGIsIDB4YTFkMWM2YjgsIDB4YjlkMTY5MDQsCisJMHhlZTRiZGNiNiwgMHgzODY5OWU5ZiwgMHhhZjM5YzJhNiwgMHgwMmFiNDcwYSwgMHg2NDQ1NGZjZSwgMHhiOWU4MDk1NCwKKwkweGQyYWI2ZDczLCAweDEyYWMxZWMwLCAweDJmMTVkZmNmLCAweDY3Njc5YjdlLCAweDYxMjViZDcxLCAweDhlYmNkYmI5LAorCTB4YjQyMGZlNzIsIDB4MWQ5Y2EzNWYsIDB4OGE5Zjc0NzIsIDB4MzFiNTlmYzksIDB4ZWZkYWRiM2IsIDB4ZjZjMGZiMDQsCisJMHgxZjc3NmEyZCwgMHhkNjgzNzY5ZiwgMHhmYmI1NGYxNywgMHgzZTMwNTUzZiwgMHg1YzUzMTEyZSwgMHg3YmRmYzBjOSwKKwkweDlkODI2MDRhLCAweGQ3NzJhOWUyLCAweDdlOGY2OGZiLCAweGRjNDY4NzI0LCAweGQ0ZmQwOTdkLCAweDlmNmU3ZTc3LAorCTB4ODg3MjdjZTksIDB4ZjMzOGMzYjQsIDB4ODg4MWYyMjcsIDB4NzQzYmNiNzYsIDB4MTVmOGZkM2QsIDB4ZTRkYjlkOTksCisJMHhmNjdiODBlNywgMHhmZWJlZjk5NSwgMHhkZjliOWUwMiwgMHg4NGU3ODU1NiwgMHg4ZmY3ZGUzZSwgMHgyNDJkZmY2OCwKKwkweDgxZDIyZjAxLCAweDFkODExNmI0LCAweDRhZDg4ZTc5LCAweGM4ZTc0ZjAxLCAweDMxZjFkZTZiLCAweDNhOTViODc0LAorCTB4MDVlZjQwNGEsIDB4ODYzYjY2MmQsIDB4ZmNhNmJmZGEsIDB4N2NlNmNkZTIsIDB4MDY5OTk5MzksIDB4YTM3Y2E0ZmEsCisJMHhjZTAyYzI0YywgMHhiMzdmNTRjZiwgMHgxNzdlYzU1ZCwgMHg1ODI2ZmE5MywgMHg4ZmVlMjU1NywgMHgzNDg5NTdjYywKKwkweDlhZDVlYTg0LCAweDM0NTY3ZjY3LCAweGI0MTFjMjhmLCAweDg4YzgzZjMzLCAweDY2NDkyY2JmLCAweDRhNjU2MDc2LAorCTB4YzI3ZDgxNTgsIDB4N2ZjNmRhMGYsIDB4ODMyMDA2ZjcsIDB4NzEwNGRjM2QsIDB4ZmM0ODkyMjgsIDB4ZmM1ZjQ4M2IsCisJMHg1NmZjMjk1ZSwgMHhiYWY1OGQ3OCwgMHhjMzg4MWM0ZiwgMHhlMjEyZWUyMSwgMHhkYWQ2MDNlZSwgMHg4NmNmNmUwNSwKKwkweGU3YzAzZDMwLCAweGM3MDVmODZkLCAweDc2MTVmOTJjLCAweDI0NTJkZTdlLCAweDljZmRkMDIyLCAweDEyZDkwOGVhLAorCTB4ODUxZmRlYjEsIDB4YmI1ZWRjNzgsIDB4NzEwNjk1N2YsIDB4N2I2YWMwZmMsIDB4ZGZkYzZmNmEsIDB4MGY2NDk3NjgsCisJMHhlMTU5Zjk2MiwgMHhmNzNjNzJkNSwgMHhmMDBiNDUyMCwgMHhlZjhmMjFkZSwgMHhjNDFmOWMyYiwgMHg5YzAxNmYwNCwKKwkweGRjNDBmNTIzLCAweDNhNzVjZTFlLCAweGRmMjE1YmJkLCAweGYzYzBhOWU0LCAweGVmMjA3NTFmLCAweGJjN2JiZmI0LAorCTB4OWM0MThlZDMsIDB4YTM1YTQxZGEsIDB4YmI1ZmU1M2EsIDB4YTAxZmIyY2YsIDB4OTAyZWYzOTksIDB4NTA2N2QwNGIsCisJMHgwOWEyZTc4MCwgMHgyMzVjYjljNiwgMHg3ZTNjZWRjZCwgMHgyZTMxZmU3MywgMHg0MzgxNzQ4ZiwgMHhkZjM5ZWUzZSwKKwkweGUxNDc3MGU2LCAweDI4OTkwOTNjLCAweGI3ZjFlZDlkLCAweDYzZGZjMDcyLCAweDU2ZmRjM2YwLCAweGNhYTc3ZjY4LAorCTB4N2RmMmQ3ZGEsIDB4OWVkZjNiZGQsIDB4MDk3YzllOWMsIDB4YTVmNzU0N2QsIDB4ZWIzMWMyNDAsIDB4YWRkNDlkNDgsCisJMHg3ZGQ2MWYwMCwgMHhkN2Y5NjEyOSwgMHg1ZDFhOWJkNiwgMHhlNmY0NjM1NSwgMHg1OWYwNGEyYiwgMHgyN2E2MDRmYiwKKwkweDhlODEzZTAxLCAweDY0ZGZiYjEzLCAweDAyNzA4N2JkLCAweDJmNDI2MWY4LCAweDM4NmQ3YzNmLCAweDdmNDk4ODUyLAorCTB4OGYwNGE3YmYsIDB4NmJlMzgzYzUsIDB4ZDNlYmVmZjcsIDB4YmJlMDA5ZmYsIDB4ZjNmZWIxZmYsIDB4MTFkZmY0ZmEsCisJMHg2NzlhZmUwZiwgMHhkMTBiZWNmNywgMHgxN2YyYjVmNSwgMHgxMGUxNzgwZiwgMHg2YjUyYzdkMywgMHhhY2VmOWMxYSwKKwkweDBiZGFiMWRlLCAweDE0OTFmOTcyLCAweDNmNWQwMmYyLCAweGVmNzE4YjBlLCAweDBjM2JhNmU3LCAweDcwZGRkM2JlLAorCTB4ZjM5NmIwOGYsIDB4YWY5Zjk5ZGQsIDB4MmZmODM2ZmIsIDB4NTU5MGVmOWYsIDB4YjJlYzBmOGMsIDB4Mjk5NGVkNDcsCisJMHgzMDk2ZGI2YiwgMHg3ZjY1ZDhmOSwgMHhmMTliZTU5ZiwgMHg3ZWRkNTNiYywgMHg3Y2E4YmViMywgMHgwZDM0ODFmYywKKwkweGI4ODU1NTBmLCAweGZmNDUxY2ZmLCAweDdmZmI3NmEwLCAweGFiYmIwMzRjLCAweGRlYTM3NDhlLCAweGUzMDc3ZWIzLAorCTB4ZjY4Yzk5N2YsIDB4YjEyNTNjYzAsIDB4MGU3MWJkNmYsIDB4YTVlMzhlYWIsIDB4ZGUxZDZkYWUsIDB4YmI2YmFmMTMsCisJMHg5YTEzMzRmOSwgMHhhZDNiZjQwZSwgMHhiYjcwNTVkZiwgMHg5ZjMwZTFkZiwgMHg0MmYwMzRkZiwgMHg1ZmVlY2NjMiwKKwkweDA1ODNjNGY1LCAweGNlYjg1M2VmLCAweDJiYzU3ZjZlLCAweDI5ZjJjN2U0LCAweDIzZTc3ZmQzLCAweGE1ZmIxZTBiLAorCTB4NzU1Y2JmZDYsIDB4NmIxOGZkNTIsIDB4YjRlYjFiNWYsIDB4MmJmYjlmYjYsIDB4MmQ1YTU4MDcsIDB4MGZlMGJkNDcsCisJMHhmMTkxNmY1NiwgMHg5ZWY1N2JiYywgMHg4NjFmM2I2ZCwgMHg3NmRiY2NmOCwgMHg3ZmRhNzBmZiwgMHhkZTk3OWVkNSwKKwkweGFiZTY5ZWI4LCAweGE2NTM5MjllLCAweGUxYjg2OWIzLCAweDlmNDFhMjllLCAweGYyZGZmYTNhLCAweGE4ZjRiZDcxLAorCTB4NDUyNWZhN2MsIDB4N2ZjYWNkMWIsIDB4OTc0YmRjOWMsIDB4MjkwZWE3YWEsIDB4N2M1Zjc0NjQsIDB4NTIxYzg5NGMsCisJMHg4NWI2N2VkOCwgMHhhN2Y3OTEzZSwgMHhlYWIxNWY4MSwgMHhkMDE0MmY4OSwgMHgxNDFmMWY1ZiwgMHgxYzc2N2E0OCwKKwkweDA5Nzk2ZTdjLCAweDEzYzA2M2VkLCAweGFiZDM5M2QyLCAweGY2OTY3ZTg3LCAweGE4MmU5NDc1LCAweGIyZjQyZDE3LAorCTB4YWY5OGZiYjYsIDB4YzQyZmQwMDcsIDB4M2Y3ZjI5ZTMsIDB4YjdkODRiZjksIDB4MGZkZDlkZjksIDB4ZjI3OGE4NzgsCisJMHg5ZjMwYmM5ZiwgMHhlMzNkNTJkMywgMHg0ZWFkOWZmMywgMHgxNTIwZmI4MywgMHhjNTRkMjg3MiwgMHgzYzU3OTU5NCwKKwkweGJmZTQwM2ZhLCAweDkwN2ZjN2M1LCAweGVhYzVjZWM2LCAweDU3NWNmYzE5LCAweGQxNzNjYzA2LCAweDllNzA3MzIzLAorCTB4N2M4ODI0ZTUsIDB4NzYzM2YxNTgsIDB4NDQ4MmZjY2YsIDB4MjM4YTlmNGEsIDB4ZDgzOWY3MjcsIDB4YWI3YTc2M2EsCisJMHg0ZjExMzcxZCwgMHhmYjAyNDJjMywgMHhlMTg5YWYxOCwgMHg2NDBmMTgxZCwgMHg2MDdmMGRlNywgMHg2NTkxM2ZlYywKKwkweDYwZTBiZjk4LCAweDMwZTQ1YWY0LCAweGE1ZDFmMWVlLCAweGI3N2Y5NjI0LCAweDlkMDNiNzM3LCAweGQzZDUwY2NlLAorCTB4NDc1YzhlMjEsIDB4ODdjNzEwYTQsIDB4MmJmNjkxNzAsIDB4Y2U5YTlmMWUsIDB4NTI2ODFkY2YsIDB4ZWE4ZWZmMTEsCisJMHgwZTUwMjlmZiwgMHhkZDY1ZGJlZCwgMHg4ZWZhNjA1OSwgMHgxZGVlY2M1YywgMHgzZTNlNGVmZiwgMHhlYzAxM2I4NSwKKwkweGQ0NjlkM2Q3LCAweGJmMzM4YzFlLCAweDlkNjMwZTAzLCAweDBjNTY3NmE2LCAweDNiYzhjNTlmLCAweDZiZWRmZjkzLAorCTB4ZjIxYmJjOTgsIDB4MGE1MTllMWYsIDB4NjA5ZDlmZjUsIDB4ODFkZjA0NzIsIDB4OGFlMTQyZmQsIDB4YTFmZDYzYTYsCisJMHgwN2VhMDJkOSwgMHg5M2M2ODkzYiwgMHg5NzMyZWRmMywgMHg5NWJkNzM3MywgMHgxMmZjMjg1ZiwgMHg3YzNkYzdhYywKKwkweDIzMjRlMzAzLCAweDJkYmVkMDFkLCAweDhmYmY0OGRmLCAweGFlMzBhYmQ1LCAweDg2YmY2ZmI3LCAweGZhZTYyZjFjLAorCTB4MWY0NWFkNjAsIDB4MDc1MjQ3OTAsIDB4MmQ1YjdmYjQsIDB4MGMzZTc3ODcsIDB4MzVlNTRiZjIsIDB4Y2FmYzgxYTQsCisJMHgyN2MxNWVmOCwgMHhmMWJjOGZiYiwgMHg5ZmI3MmEzZCwgMHgzNWI5MGM0NCwgMHhkY2FiNTVlYiwgMHg0MDlkZWM1NiwKKwkweDI3ZWRjOWUyLCAweDJiODkzZjZlLCAweGFlM2NiNGI3LCAweDkwM2JiYWRjLCAweDdhZDZmZjlmLCAweGQzZTNjMGQ1LAorCTB4N2ExYTNjMTYsIDB4NWE3YzNmYjIsIDB4MWRiN2U0ZjUsIDB4NDkzZDVjNWEsIDB4NDUyMDlkZmYsIDB4ZTBkMWY5N2QsCisJMHgyYWZmODM0MywgMHhjZjA2YTVmZiwgMHhhOWYwZjUwYiwgMHg3YzNkODdjMSwgMHg5ZjYxZjA2YSwgMHg4ZjA5YTQ3OCwKKwkweGUxYmJmYWQ2LCAweGMwODUzYTZmLCAweGNmYzYzMjczLCAweGZkYjAwZmFiLCAweGQxZGRmYTY3LCAweDJmODg4NTIxLAorCTB4ZDIzOTk3MWQsIDB4NGE0ODc0N2EsIDB4Yzk2YzNlNmMsIDB4NzVlZDJjNDcsIDB4Njk2MDNlNGIsIDB4ZWJlNGI0MWYsCisJMHhmN2FiZWQ0ZCwgMHhiOWQ4NTExZiwgMHg5ZGE5YTg5ZSwgMHhlNGE3ZmNiOCwgMHgwMWYxMzg4MywgMHg2YmFhMWQ2MywKKwkweDAxMDk1NGZiLCAweGYxYmJiODdmLCAweDA5MjU3OTdiLCAweGZlNWUyMDc5LCAweGYyZjE4OGJjLCAweDI2ZTM4YTJlLAorCTB4ZWVkNzRlM2EsIDB4NjA4ZjdjNmMsIDB4NTdjNTkzYjUsIDB4MmY2ZWQ0YmEsIDB4OTNhYjkzZDgsIDB4NTUzYmJlNTgsCisJMHg2ODNkMDI2OSwgMHg1OTNiNzc5NCwgMHhkMDJiYWZkYywgMHhiMThhNGRlZCwgMHgyMDNmZGVlZiwgMHgwOGVmMWVhMiwKKwkweDdlNzhkMjkzLCAweGExNDBkZTI4LCAweGZkMjBlZGY4LCAweDgwZmRiM2Q1LCAweDYxZDdiMDJlLCAweDMwYWM4NGJjLAorCTB4ZDE1NGUzZjAsIDB4ZTIxY2I1OWQsIDB4ZGUyMmFkMzUsIDB4ZTJiODViNmIsIDB4MjM5YzJmMTYsIDB4ZmI5MDNhZTksCisJMHhiZTVhMzI5ZCwgMHhkYjIyZDdlOCwgMHg1MmU5MGNhNiwgMHhmODFmOGM0NiwgMHg5YTZkMDkxMSwgMHhmNWZlYzAyNCwKKwkweDA1OWZlNDdhLCAweGI4NWY5ODA3LCAweDc5N2M3ZDcwLCAweDk1ZGZlNGE4LCAweDQwNTRlZmJiLCAweGVlN2Y1MmVmLAorCTB4ODdiZWVjNjQsIDB4MjNjNTRmZDEsIDB4ZmYwM2YyOTYsIDB4MTVhNmU1YzgsIDB4ZGI5NTFmZTMsIDB4MWU0MWY1Y2QsCisJMHhlNGVjMTgzZiwgMHg5MmM3YmVlNywgMHhiNzdmZGNiMSwgMHg5ZTBmZGVjNSwgMHhhNzdmZTYyYSwgMHhlYmE3ZDI4YywKKwkweDNjZTA0ODk4LCAweDIyMDNmOWMxLCAweDZlZmNlN2QyLCAweGUzMDA3ZTc2LCAweGJmMDFkN2ZjLCAweGU3YjEyYjc3LAorCTB4N2M4MmNlYTksIDB4MWViZmQ1NWQsIDB4ZWZjY2ZiM2IsIDB4M2UwNmVlOGIsIDB4YzE0ZWY3ZGEsIDB4NzY3YTY5NGYsCisJMHg3ZTIzZGJkZiwgMHhkZjY3ZjkwNSwgMHhmNDg3N2FjYywgMHhhMGU1M2Y2ZCwgMHhiYTU1ZjcxMywgMHhmZjkwN2EwZSwKKwkweDRkZmY5ZWJiLCAweDdmOTBkZGQ2LCAweGVjZjE4ZWNlLCAweDE0NWY4M2FlLCAweGFkNzUzZjAwLCAweDFlODA1N2I0LAorCTB4ZWZlN2UyZWMsIDB4NDVmZjNkNTYsIDB4YmZhZTA3NDEsIDB4YTljNzQ4OGQsIDB4OWY0ZmU2NGUsIDB4ZWY1ZmYwM2YsCisJMHhmMzgxZmRjMSwgMHhjMGFjZTgwNywgMHg0MmU4MzhiZSwgMHhhNWZiYWFmOSwgMHg1ZDZmZTMxMywgMHgxNDUxN2ZjZiwKKwkweGE1ZmMyN2ViLCAweGZiZTVhOWYzLCAweDUyMWU1ZDlkLCAweDRiZTAxN2I2LCAweDc1NDRmYjYyLCAweDFiNmViYWJmLAorCTB4ZDM1MTJmYmMsIDB4NDA1OTQ4NzYsIDB4ZjBiY2E3ZWIsIDB4YWZkMDAyYTcsIDB4ZGQ5OTdiNWQsIDB4M2M3NzI5ZDQsCisJMHg4MTc5ZmIwYSwgMHhjYTM0MGYzNSwgMHgyMDlkNWU5NCwgMHhmZjY5ODM2NCwgMHgwMTI4ZGU2YiwgMHg5NzhiZWEzOSwKKwkweDcxNWM2MTNmLCAweGZjNThmOGEwLCAweDA0M2UwZDdmLCAweDRmM2ZlOTlkLCAweDI5ODU0YzE4LCAweGRlZjhmZjA3LAorCTB4MGUyN2EwM2IsIDB4OGQyZjkxZGEsIDB4NTkxMjdlZjksIDB4ZTVjY2Y2ODEsIDB4ZmZmNGRkZTYsIDB4ZTg4NWJjZGMsCisJMHgwM2JkZTY0MCwgMHhlZmUxM2RlNiwgMHhjMGQ3ZGU3NywgMHhiZWQ0YTFhMSwgMHhjZjk3ZDA3MiwgMHhmMzBiYmY5ZiwKKwkweDg0N2UzYzdiLCAweGZlZmM4MDc3LCAweGZjZjlkZmQyLCAweDdiZWU5OGFmLCAweDk3YmRkZDI5LCAweDdmODdmNzlmLAorCTB4OWZlZWYzZTcsIDB4Y2I5ZWJmZWUsIDB4NzljMmFlZTksIDB4ZmUxN2JhOTgsIDB4YTk1ZGYwODQsIDB4ZmUxMjkzOWUsCisJMHhiZmJkZTViZSwgMHhmZWY2MWJmOSwgMHgzNWJmOWI1YSwgMHg5M2NmMWIyNywgMHg3MGIwYzAzYSwgMHg0MGI2NjY3YiwKKwkweGM4ZWQ3MTc4LCAweDlkZDgyYTk5LCAweGQ1ZWYzZjYyLCAweDdlNjA0ODRjLCAweGY3YjAyODk1LCAweDE2NTBjODIxLAorCTB4Y2ZkYzI0MGYsIDB4ZjgwZDYzODIsIDB4ZGQ5Yjg4MGUsIDB4NGRkYzkzM2IsIDB4YzkxMzc3NjgsIDB4YmM1M2FlZGYsCisJMHhiZTdhYmRhYywgMHg5MTFhY2YxZiwgMHgyMTA1NmY3MSwgMHg4ZmM5Mzk5ZiwgMHhiZjhiNmVmMSwgMHg1ZDEwMjhkOSwKKwkweDc0YWVmNmEwLCAweDgxOGYzN2Y1LCAweGI0OGYyM2RmLCAweDk4MDVlZDQ1LCAweDMzNjkwZmJlLCAweGFhY2E2MzhmLAorCTB4ZGM4N2YyNjIsIDB4NTNiY2U2ZjksIDB4YmNlZGU3MzMsIDB4ZjA2MTA3M2YsIDB4MGMyNDdjM2IsIDB4ZDQ3MTZjZjEsCisJMHhkM2NlMTU2MSwgMHgwMjI1NjM4OSwgMHg0OTM4YTU0ZiwgMHgwZWZjMDg2YiwgMHg3ZGZjY2ZiYiwgMHg3ZWUxMDI1MiwKKwkweGM3ODY1ZmVmLCAweGE3MTYwNDhhLCAweGVkNzE4NTEyLCAweDk0NzFlMDNhLCAweDc4ZGNlMzBkLCAweGUyZjExYjQ4LAorCTB4MDhiYWY3YzcsIDB4ZjE3YmFmZjcsIDB4ZjgwZWQ0ZGEsIDB4NjYzZmMwOTQsIDB4ZDVmYTE3ZjYsIDB4MTJkM2ZiODQsCisJMHg2OTFhNDJlZiwgMHg3NmU2OWRkMywgMHgyY2JlOGZkYywgMHhiMjVkMTg5ZCwgMHg5NjlkMzlhYSwgMHhkMDYyZTg5OSwKKwkweDRjN2QwZTIxLCAweDdjZjAzMTc0LCAweGQyYjFmNGE1LCAweGViZmY4YWM1LCAweGY3NWYxODEzLCAweDJlODMyZjQ3LAorCTB4ZWYxZDZlOTksIDB4N2ZkY2M5ZDcsIDB4MTMzZjAxMjgsIDB4ODIwMTk5ZjIsIDB4N2ZkY2FiZmIsIDB4YmM3NDUyOTAsCisJMHg3ZWFhMjRhNywgMHg3ZTAwOTdiYywgMHhlMDFhOTQ1YywgMHg4NmRlZWYyZiwgMHgzZjczYTRmMSwgMHgwMGRiZmY3ZiwKKwkweDQ0YWZkNTRmLCAweGViZjhhMGUyLCAweDUxMjFlZGRjLCAweDJiMGE1ZWY4LCAweGI2NTY5ZmUwLCAweDQwNGZiODg5LAorCTB4YWNkMTY4YTQsIDB4YzM2MjdkOTgsIDB4ODVmYWE4MGYsIDB4Yjk1M2U3MDcsIDB4NGU5ZTFlZDcsIDB4ZjdkY2FmYmYsCisJMHg2MWRhMDE0MSwgMHhjZmQxYmIyYiwgMHg2MDVjZmQwOSwgMHgxNDc1MGY3NCwgMHhhNTcwM2VjMCwgMHgyYjExZmNjNCwKKwkweDYwNDlhY2JmLCAweGNmYjM5NmYxLCAweGFlMjBjYWI5LCAweGU3NjJlYzIzLCAweGI3MjMyYjdmLCAweDczOThmNmM4LAorCTB4OTkwNGExNGQsIDB4NzM5ZTliYzUsIDB4M2QwODVlYTEsIDB4MjhmOWUwMjEsIDB4ZGNmNjJmODAsIDB4OWM4N2UxYTksCisJMHhmMDYwNDI3ZCwgMHg5ZGYxOTdlZCwgMHg0ZjVkY2E5OCwgMHhhYTdjNDI3NSwgMHgxZmJiMmRmMiwgMHg1ZGJhZjhjYywKKwkweGM4N2VlMjlmLCAweGYxZWM1Zjk0LCAweDJlMWZhMDc2LCAweDdkMTJlMjlhLCAweDQ0YmIwMWUyLCAweGI2ZGE4ZmU0LAorCTB4Njg0M2Y0MWEsIDB4MzZhMmY5MWUsIDB4MmJlZmZkYzIsIDB4N2VhYjU3ZjQsIDB4YjgzZWZjZjEsIDB4ZjRmNTU2NzAsCisJMHg3Zjg4NWVlMywgMHhlMWRmNjk5ZCwgMHhhZWMwYjhjNSwgMHhmYWU3Yzc0YiwgMHgzNTkxZmZmOCwgMHhkNmZmZmZkYywKKwkweDNiNGY3NjY5LCAweDA2N2ZmZmJlLCAweGYxNzZhMGZlLCAweGZiOTYwOWQzLCAweGIxMDZiYmFiLCAweGI0NDkxNGY3LAorCTB4NzFlZjUyZTgsIDB4ZjBiOWVkNTUsIDB4Y2ZhZmM0MjgsIDB4NTFlNGZkZWUsIDB4Y2ZmYWJiODAsIDB4ZmMxNDc4N2YsCisJMHhhOWQwNzIwYSwgMHhiYTgyN2RjMiwgMHhmMThlYmY5ZiwgMHhkZmJiZTMzZSwgMHhmOWQwM2Q3MCwgMHgyZjE4ZTNjNCwKKwkweGZhOWI3Y2VkLCAweGU3NWZmNDFmLCAweGMwYjNhN2YzLCAweGVhN2NlY2NmLCAweDRmMTA2OThmLCAweGE5ZjlmM2I5LAorCTB4OWRjZTZlZjgsIDB4Mjc0OTRjY2YsIDB4OTE4OWY0NzEsIDB4MDc4NmZmMDIsIDB4ZDJiNWFmMTAsIDB4MTFkYjQ4ZWQsCisJMHg1MWNlN2ZmNCwgMHhkOWZmODNiYSwgMHhkNDg5ZDcxMywgMHhjNjk5NzhiMCwgMHhlM2JiMzllMywgMHhjNGZiYzdjNywKKwkweDdkNjZkYTZmLCAweDQ4NDJjNmU3LCAweDA2NDZiZjY1LCAweDQxMzljNzEwLCAweDAwNjYzOWU5LCAweGUzY2RkYzc0LAorCTB4NWQ2ZjkxNzUsIDB4MGU3MzhlMzIsIDB4M2FmNGEwZmUsIDB4ODVlM2ExNmIsIDB4M2Q4ZjQ1YjYsIDB4ODM2ZDc1MGMsCisJMHg0NGUzOGRmYSwgMHgyMzNmODAwNywgMHg0MTNmYmVmZSwgMHhlNDAxMjJmZiwgMHg2MGJmZWY2OCwgMHgzN2U4MGNmYywKKwkweDczYjg0ZTlkLCAweGQ4MmM4NWNmLCAweGVlNDhmOGJmLCAweDg1ZWY4YjllLCAweDIxNTc2ZjNjLCAweGZjZjk1MTFlLAorCTB4OWQ0ZjI4OWIsIDB4ZjhjNzFjY2YsIDB4ZjA3MWUxMzYsIDB4OGZmM2QyNGUsIDB4OTlmOTJiYzUsIDB4MWVlZGJhY2MsCisJMHg3NGUxZmYxNiwgMHhlNjkwZjg4MCwgMHgwNzFlNzJjNSwgMHhjNDZkN2M2MiwgMHgwYjhiZmE4NywgMHg3M2IxNzE4ZCwKKwkweDQwYmVjNjI3LCAweDc4NzdmNmNkLCAweDZlOTdhNWJjLCAweGQ3YTA0NGMyLCAweGNmZGM5N2ZiLCAweDAyYTBmMDMwLAorCTB4OGQ4ZGFlMWUsIDB4YzM4ZmM2N2IsIDB4MmQzZGM0ZjUsIDB4NDI3YTAzNzQsIDB4YWUyN2IzYmMsIDB4N2IxM2Q4NDksCisJMHhjZGUxNjE3NSwgMHhjZWY0NzE3OCwgMHhkYTVlMmMyZCwgMHg4ZjNmYzcyOSwgMHhhZjQxYzQ2NSwgMHg5ZmUyNTk3NiwKKwkweDNmYzU4MWUxLCAweDJiOGYzNzJmLCAweDk3NjBkM2M1LCAweGYxNWFmZDg2LCAweGY4YWJmNjc1LCAweGFlNWJmZGZhLAorCTB4ZTg1ZjlkODEsIDB4ZGFhZDdmNzcsIDB4M2RlNjFmN2MsIDB4MDVkZDM4MjUsIDB4ZWY2ZDZiZmIsIDB4YTdjZjA0MmIsCisJMHgyYjczYjM3NCwgMHhmOTY3YmU3YywgMHgzZmIzZDNmOSwgMHhkNjJlMzExNywgMHhmYTgyMzkxNCwgMHg4YzNmYWFkZCwKKwkweGJjMmI1N2ZkLCAweDZiNzg3MDc3LCAweGUzZjViM2Y3LCAweGQ4NGY1ZWVjLCAweDdiMzlmYjRkLCAweGViZTQzOWY4LAorCTB4NjNlZmRkZGEsIDB4YWVlOGVlNWMsIDB4OTg4ZTk1YTcsIDB4OGZkNjE2ZjUsIDB4Y2U3Y2NjNzAsIDB4ODBhODc5M2UsCisJMHhkZmUzNzljNSwgMHgzMTcxYWIxYiwgMHg0MGVlYjM3YiwgMHg3NmVhNzFmYywgMHhhNzFhNmE3ZiwgMHg5ODUxMTQyYSwKKwkweGYxZTk3MDFkLCAweDJkZmE0OGNlLCAweDc2OTlkZmQwLCAweDNhNGRkZjE5LCAweGJlZTMxMTEzLCAweGM5NzAxYzE3LAorCTB4OTVhMTFmN2MsIDB4NDc1ZDBmYzksIDB4NzFjMDllZjEsIDB4ZjBhNzdmNzYsIDB4NTczYzA0YjUsIDB4ZDJmMWU3N2YsCisJMHhiN2ZkZTA3NywgMHg4MzU4YTkzYiwgMHg4MmI2ZGZkZCwgMHg0ZmRiNjlmMSwgMHhlZjQwMjFmNCwgMHgxM2RmZTNiNiwKKwkweDA3ZGFmZDYxLCAweGZmYjE4ZGY4LCAweDRmZDQ0ZThiLCAweDUwZmQ1MGYxLCAweDEwYTA2ZWY0LCAweDc3YWFkNWQ4LAorCTB4NjZjYjdkYWUsIDB4OTM4ZTlmODIsIDB4MjM0MmViMGUsIDB4ODNlZTA3ZWQsIDB4YmMzOWI5YzAsIDB4NTY5ZGVlNTcsCisJMHhhYTg4ZjAwYSwgMHg3ZDBhNzU0ZCwgMHhmOWJiMjFlNywgMHhhZmRlNTU3ZCwgMHgyMWVmOWFhYywgMHg2YmM2YWY5MCwKKwkweDI2NmY4ZmQwLCAweGNjNjY0YjhiLCAweDlmMTY1MjMyLCAweDg3ZjcxOTBjLCAweGFiYzIxM2NhLCAweGFmN2Y3Y2U4LAorCTB4MjhiYjM3MDYsIDB4OGQ5ZTdjNWUsIDB4NzgxMTJmZDksIDB4MDZhMjZhMjcsIDB4MmU2M2QzZjYsIDB4NGJjMWRlN2UsCisJMHg4M2JjZWNiYywgMHg3YWEzNjQzYiwgMHhmNmZmNjFmZCwgMHg5ZTA4OTMwZCwgMHg3YzA2ZDg2NywgMHg4MTllNzNkOSwKKwkweDJmODAwYjQ0LCAweGVhN2Q3NjhkLCAweDMyMWRlNzJkLCAweDVhMmExM2UxLCAweDE3MzM4NzIyLCAweGZkNTAyNWVlLAorCTB4Nzc4NjZhYjIsIDB4ZjExZmU0MmIsIDB4YjJjZGY3YjAsIDB4MzgyMWY3NDgsIDB4ZGI4ZGIwZGYsIDB4MTU2MGQ5YTMsCisJMHhlNzdkZjZlNywgMHg2ZmJlZWJlYywgMHg3OGE1MzI5NiwgMHg4NTNmMzBlOSwgMHg1MzVmZjVkMywgMHhjYTdjNWNlMSwKKwkweDBkNGZjNTJkLCAweDJkODU2OTUxLCAweGEzZGMxYTYzLCAweDc4YmM3OTQ5LCAweGNmY2QwNjZjLCAweDM0ZjRmZjVmLAorCTB4ZTJmN2ZmYWMsIDB4ZmYzNDU5YjEsIDB4YjIwZTdiOTMsIDB4Y2YwMTJhZmEsIDB4YWViMGJlYzEsIDB4ZWZmMDFhNzYsCisJMHhkOWZiOTZkNywgMHhiOTY2MzMxNCwgMHg3N2YwMDU3ZiwgMHg3N2VlZjAyZSwgMHhhZTcwNjkxNywgMHhlZmUxNWJhMiwKKwkweGRkYTAwNDY1LCAweDdmMGM4OWQwLCAweDlmNzdlZTk5LCAweDk4NjU3ZjAyLCAweGYwMDU2M2FkLCAweDdmY2Y2M2ViLAorCTB4MTZmNzg0OTEsIDB4MmFhMWZiZjksIDB4ZGNlMTU0NjksIDB4Nzg5YTJkMTUsIDB4ZjNlNzEyZjEsIDB4Y2NmYmJjZmEsCisJMHg0OThkY2JmNSwgMHgzZjgxNzdjMSwgMHhiYzhkZTc5YSwgMHhlZjFkMWE2ZiwgMHgwZTcxOGFlMSwgMHhmMmQwMGU3NiwKKwkweDgyOWFhMzRlLCAweGU5Yzg1ZDc0LCAweGNiM2RmODRhLCAweDhiM2U3YzQ1LCAweDAyYzI5MGM1LCAweDdmNWNhZGRmLAorCTB4NTc1MWVmMTksIDB4MWVmNDU3OGIsIDB4ZGJhYjg3MzUsIDB4NjdmYmVmZDUsIDB4MzM3ODAwN2YsIDB4MDA3ZjgyOTMsCisJMHgzZmRmNTlmYywgMHhiODE1YzU3YiwgMHhlNTE5ZjUwMCwgMHg1YzdkZTI1ZiwgMHhlYjMzM2RlMywgMHhlYTQ0NjhiYiwKKwkweGZiM2VmYjhlLCAweDVhMmVmZTU2LCAweDliZmVmMDdmLCAweDY5YmEyODNiLCAweDY4MmYzOWZmLCAweDM5NTE4ZjdiLAorCTB4ZjE1MGIzMWIsIDB4MzFjZmQxYzMsIDB4ZDJmZDBiY2IsIDB4MDQyNmMyMjAsIDB4MWZhNzEwNzYsIDB4Zjc4OGNmM2MsCisJMHhiODIyZWUxZiwgMHgxNzY1ZGI1ZiwgMHhiYmFmZjA3NCwgMHg3ZDQ1NDlmZSwgMHgzYTcwYjk5ZSwgMHhhZTVkNWZmYSwKKwkweDMzOWMwOGVjLCAweGMzNWJiYWVhLCAweDAxOGEzZDdkLCAweGU4NjllNDAxLCAweGY4MjhjNDgxLCAweDNlMWU1NDg3LAorCTB4ZTdjM2M4YjcsIDB4OGYzN2ZlNjYsIDB4ZGI1MTc1ZGIsIDB4YTlmZDgxZGYsIDB4YTA2YTNmYmMsIDB4ZWQ4YmRjYzUsCisJMHhlZTllOTkxMiwgMHg4ZTEwZDA2YSwgMHgwODc0MjRhMSwgMHg4ZTgxZmRkNiwgMHhlYmU2ZTM5NywgMHg0NmNmYTczNywKKwkweDllZWI5ZTliLCAweGVlMWZmODgwLCAweDI4ZmZjMThlLCAweGNjNzRiZjc3LCAweGU2M2EzMzc3LCAweGQxZDBlM2JiLAorCTB4N2JkZDZlZmEsIDB4Njg1OGUwYWUsIDB4MjhmY2JhNzcsIDB4N2Q2NzVmYmUsIDB4ZGY0YWNlYWYsIDB4MjFmNWE5M2EsCisJMHhlZDJiM2I3OCwgMHhmZWI4YTdjMCwgMHhiMzFiZjQxOCwgMHgyOWQyMmM3YywgMHgwMDkzOWU4NiwgMHgzZTA3MzE4ZSwKKwkweDA2YmMwMWI1LCAweGU3ZWMxZjFkLCAweDliYTk3OTNjLCAweGYxZDY3M2FkLCAweDA2M2FjYWQyLCAweDlmYjRlMzA3LAorCTB4Zjc0Y2Q2ZTUsIDB4NDUxYzBhMGUsIDB4NjljYTg5N2UsIDB4ODdjNThkYmEsIDB4YjdlZmI2ZmEsIDB4OWQ0YjljZmYsCisJMHg1OTUwMmNmMywgMHg3M2ZmMTRiZiwgMHhmZTA2NGYwMCwgMHhmYmYzNzU2ZiwgMHg3ZmYxN2RlYSwgMHhmOGEzYjQzYiwKKwkweDNmZTYxZGJmLCAweGJiY2ZmYzAwLCAweGZiMGRmZTE0LCAweDg3ZWI4YWJmLCAweGEyOWZkODJhLCAweGRhMWZmNDdjLAorCTB4M2ExY2I0Y2MsIDB4OGRkMTM0ZWUsIDB4ODc2NGIwNzIsIDB4ZDkzMWY3YzgsIDB4M2U4NjVmZmIsIDB4ZmQ1ZDcyNTksCisJMHhiOTE3YjgyMSwgMHhmMjAyNjdlNCwgMHhmZWZlNDJlYiwgMHhmZGZjMjdlNSwgMHhjMWI5ZWI0YiwgMHhlYTEwYjJmMiwKKwkweDFmOWZjYmNiLCAweGFhM2VhMzBjLCAweGZmMmU2NWRhLCAweGJiY2Y3NzY3LCAweGRlNzg1OTk3LCAweGFkMzUyNDE3LAorCTB4MmI0ZWJkZjcsIDB4YjliYmNmZmUsIDB4YjRlODU4ZGUsIDB4ZDcyZjdiYzUsIDB4ZGJkNjg3NDgsIDB4MzNjY2U3NGMsCisJMHg4M2Y0ZjRhNiwgMHhhNmNmYTBmZSwgMHhiOGYxODliZCwgMHhjNDA5OTU3ZiwgMHhhNTI5NzQxMywgMHgyMDE5ZGUxMCwKKwkweGY0MDk0Mjg1LCAweGQ3ZTVjYzViLCAweDcyZDg2ZmU4LCAweDFkOWZmYWYzLCAweGNjNDNkZjMyLCAweDQzZGYzMTZkLAorCTB4YmU2YWRlMWMsIDB4NjZkNTc4ODcsIDB4NTFjNDNkZjMsIDB4YzQzZGYzNjEsIDB4MzM4ZDc2NmIsIDB4YWU0NzQ3ZTUsCisJMHhiMzFmYjUzNywgMHgzZjI5YjI3ZiwgMHg1MzRkZmEzNiwgMHg2NmM3ZjFmYiwgMHhkYTEzZjI5YSwgMHg3ZjZhNjdiZiwKKwkweDRkZjM1YmVkLCAweDU0NzVkN2Y1LCAweGY4NmZlYTlhLCAweDdmMjk5OTY4LCAweDliM2ZmNzYzLCAweDMxMTc0N2RhLAorCTB4NjFiODc4ZmQsIDB4NWJkYzExNzksIDB4Nzg3MmYwMzAsIDB4YTE1MzYyYTksIDB4OWIwOGU5N2MsIDB4OWU1YjEwNWEsCisJMHg5MDA1NmJhNiwgMHg3ZmUwZTkxNiwgMHg1MzJmMjdmNSwgMHg4YTJhM2YxYywgMHg4OThiYTc1ZCwgMHg1MzZmZDI2YywKKwkweGQ0N2NlNjFjLCAweDhmN2RmZTZkLCAweDM1NzIyYzk3LCAweGNiNTI3ZWE0LCAweGJjMWQ5YTA4LCAweDYzY2YwZjI0LAorCTB4YzYzYWY5NTMsIDB4MDFiMWRiZjUsIDB4YTBkZmI3ZWEsIDB4OWI0NmQ1N2MsIDB4MmY5NTZmMjAsIDB4OWEwMWJkZTMsCisJMHhhZDhmZDg4NiwgMHgxZjlmNzdiMCwgMHhkNGY5OWE3MiwgMHhmOTVlOGZkNywgMHgwNzM4ZGI5ZCwgMHg1M2ZhY2FkNCwKKwkweDI2NGJjNmNiLCAweDNmY2EzMTM5LCAweDE3MmQ4YzJhLCAweDczYzc0ZjE2LCAweGFiZjVmZDQwLCAweGIzNWMxNmY4LAorCTB4M2JiYzEwN2QsIDB4YTM1MzBmM2MsIDB4MTZjY2E5YmMsIDB4NjdkZmRjZjcsIDB4N2ZkMGJmZWUsIDB4OGVjN2RjZGEsCisJMHg3Y2YwMGNmYSwgMHgyNmRhZjdjZSwgMHg3YjU2YmYzOCwgMHg1MWZhMzc3YiwgMHg1ZTMzNzYxOSwgMHg1ZGVjZjM3YSwKKwkweDQ3OWUwMzYzLCAweGFjM2U0ODFhLCAweGI2ZmRjNmY3LCAweGViZTEzNDQ1LCAweGQxNzdjZTM2LCAweGUwZDMzM2RiLAorCTB4M2Y2NjQxOWMsIDB4ODdhMTU1ZmUsIDB4MWI0N2ViZTksIDB4MDQyY2Q3NDIsIDB4ZTk4NzExYzIsIDB4YjQ1Njc5NWUsCisJMHgzOWY4MWE2ZSwgMHhlYjc5ZjhjMywgMHhlN2Y4YjY0ZCwgMHgwYzNjOTJhMCwgMHg0OGEwZTkyZiwgMHhkZDUwNWVjMSwKKwkweDJiOWMyZjY4LCAweDRmMGJkNzdmLCAweDBmNjhkY2M3LCAweDM4ZTg3OTI2LCAweDE3YjRjN2YzLCAweGJhZDRmYmIxLAorCTB4NWVlOGU2N2YsIDB4OTQ3ZDBkYjgsIDB4MDI2YzBlZTUsIDB4OTNlNTkyZmQsIDB4MTdkZDk2ODgsIDB4ODNkYmY0OWUsCisJMHg3ODhlZjAyZCwgMHhlZmNkYjI2MywgMHgwMGI3N2NjNiwgMHg0YzdmZDllMywgMHg1ZTNhMjBjOCwgMHg4NDQ1OWZlMywKKwkweDc1ZjBmMWFmLCAweGVlYzgzZTc4LCAweGFiYjhjN2FlLCAweGNmYzI0ZjMxLCAweGU2NzExODA5LCAweDg5ZDliZTBiLAorCTB4YWJjNmNmODAsIDB4ZTEwN2VlN2IsIDB4ZGMxNzkwN2IsIDB4ZjdlODc2YzEsIDB4YzcxOTQ2YzIsIDB4OTgyYzljNmQsCisJMHg0Yjc5OGRlYSwgMHhmNzhkYmY5YiwgMHg2Y2RjYjJiZSwgMHhkZTc0ZTVkZSwgMHg5MzNkYjcwMCwgMHhhOGY4ZDVjMSwKKwkweGFlMTEzMjQwLCAweDI4ZjRiZGZmLCAweDVjZmIzNWY4LCAweGM1MDdkZWY4LCAweGM3YzAxMGM3LCAweDczZmIzZDM5LAorCTB4M2E3OTMxOWIsIDB4ZWU0MTlhYWYsIDB4OWVkMTZiYWQsIDB4NGVhN2VmODksIDB4OGZhMWU2MzcsIDB4ZTMzYmQxMzQsCisJMHhlMmZjMzMyYSwgMHhjNmZkMTk0NiwgMHgzYzZlNDk0NSwgMHg4ODZlMTBlZiwgMHhlNzlhZmE3MiwgMHhmOTliZTRkZiwKKwkweDVjMjk1YjlkLCAweGY4ODg0ZWFiLCAweGQxZDZiNmRlLCAweGZkMjhmNGJhLCAweGU1Y2RiY2FlLCAweGYxN2Q2YjBmLAorCTB4ZjA2MzRlN2YsIDB4N2JhN2Y4NTIsIDB4NGYzNmRlNDAsIDB4NzllM2Y5YzMsIDB4MzFmZjgwNmEsIDB4MGQ5YzNjODEsCisJMHg0NTJjMTdmYywgMHgyMzZjMTgzZSwgMHhjN2QzNmZiMCwgMHg3OTMwZjA0ZSwgMHhkOTUxZWQ5ZSwgMHg3MmJlMzU3YiwKKwkweDg1YmU4NzI2LCAweGZkYTc2Y2Q3LCAweDVkZmE3OTk1LCAweGIwZjM2ZmY3LCAweDRmMzZmZjc1LCAweDcyZmY3NTljLAorCTB4OTc1NzA3ZWYsIDB4NTQ4NTFmYjUsIDB4MzdiNDQ1ZDQsIDB4MTExZmE5MDgsIDB4M2Q1MzQ3NmIsIDB4MWJmZDBlNTYsCisJMHhjN2YxMzE3OSwgMHhmZjZmZDAwNSwgMHg2NWJmOWE3NiwgMHhlZGU1ZjY0NCwgMHg4MGNmYjAzNCwgMHhlY2ZiMGQwZiwKKwkweGFlZDk4ZjRlLCAweDNmYmJkMThjLCAweGZiYmQzMGY0LCAweGY0YzBjZjQzLCAweGZkYTE4ZmVlLCAweGUzNDVlZmU5LAorCTB4NGFhOTM1ZGEsIDB4YjRmN2JkN2MsIDB4YWMxZmRkODcsIDB4ZTc4MjE1NTMsIDB4MGZkOWZiMDMsIDB4ZGFlNWM5ZDgsCisJMHhkNmZlZWYzYSwgMHgxZmY5Y2JhNSwgMHg0ZjgzMmUzOSwgMHhmY2ZlZmFjZCwgMHhmNDExMmQzMSwgMHg0MjA3Y2E1NCwKKwkweDg2Yjc3N2RjLCAweDNjNmRiZjJjLCAweGFkOWI2YmQwLCAweGY3Y2MzMzc4LCAweDc4ZmUxNjY3LCAweGY1OWY0ZDY4LAorCTB4MThmMWNjMmIsIDB4NmFjNzhiOGUsIDB4MDk5YjQ3OGEsIDB4OTczYzNiOGYsIDB4YjZiZjBmYjAsIDB4ZGYzMGFmYmUsCisJMHhmOGU0ZTlmMywgMHgwOWJmN2FhNiwgMHhlYjM3M2JjNiwgMHg2Yjg4MjJiZCwgMHgxY2Y5Y2VkNCwgMHgxZWQ3ZmVmNSwKKwkweGFlYmNjY2E3LCAweDFkMzk3ZTE4LCAweGExZTAwNTY3LCAweDc5OWZkNjczLCAweGUzMDNhZTdjLCAweGI5OWVhYjRhLAorCTB4NThlMjExMmEsIDB4N2EwZDkzMzUsIDB4YWE3ZGYwNDQsIDB4NDgzOWY5ZjMsIDB4ZWNmYjczOTcsIDB4MmU3OWMwM2EsCisJMHgzZDEzOWQ5OSwgMHhhM2RhZWZiNywgMHhhNGY4ZjcxMCwgMHgyYzcyNThlMSwgMHg3OTNkY2Y3ZCwgMHhmZGE2NDhiYywKKwkweGJjN2JkYjlkLCAweDc3MDNjMjQ4LCAweGQ0M2JkMzYxLCAweDViN2YxNzM1LCAweGRlZjc3MDE0LCAweDM3ZTFlODRiLAorCTB4MzY4ZjViMDcsIDB4ZTU3YzU5M2EsIDB4MzcxNzM4NDEsIDB4NmFiZmRhODYsIDB4N2E2NWYyMTIsIDB4Mjg1ZWVkOWEsCisJMHgxZGJmMWQxNywgMHgzOTVjMjFmYywgMHhhNjJmZTYzZiwgMHhkMDRhYjI1OSwgMHg3ZWMxMTYzMywgMHhlZTM3M2NkMywKKwkweGM5NzJmOTY3LCAweDlkZmE2Y2M4LCAweGUzODdhZDEyLCAweDZhZjljNGNjLCAweDA0ZWZjMDk4LCAweGYxNDQ0ZWI4LAorCTB4ZWYzYzAyZjcsIDB4M2VmODYwNzYsIDB4MDJiMjQzZjEsIDB4YmRmZmMyOWUsIDB4NzgwOTNjMWEsIDB4MDlhYjNhNGYsCisJMHg3N2M0MWE4OSwgMHg0NzFlNmU4YSwgMHhkMzBhNjk1MywgMHgzYWI3ZGRiZiwgMHg4NDhjZjdmMCwgMHg1M2FhYWYwNSwKKwkweDNjZGFmZWE4LCAweGRkOGVmZDkzLCAweDkyMGI2M2Y5LCAweDU1NjkxZmMwLCAweDBkZjJkZTk5LCAweGI0NjNlMWViLAorCTB4NmJlNzA3OGIsIDB4ZTYyMzE3MzcsIDB4NDA1NzdjNzUsIDB4OTIxZDE5NTUsIDB4OGE2YjZjMzMsIDB4ZjljNzhjMzUsCisJMHgyNWZlOThmMywgMHgzZGZmMWE1MiwgMHgxZWI3Y2EyOSwgMHgxYzQzYTZjZCwgMHhjNWNlZjhkOCwgMHhmYzUyMmJiZiwKKwkweDc4MDNjZWJmLCAweGYwZmNkYjQ2LCAweGFiZmI4ZjRlLCAweDkyY2EzODZmLCAweDI4Y2NmYjY5LCAweDk0NWU1ZmJlLAorCTB4YzM5ZGUxYzAsIDB4ZmJlZjA3ZGUsIDB4ZDM0NWUzNGUsIDB4ZDRiNTE4N2QsIDB4MjdiNzRlZmMsIDB4ZTIxNGI0ZDAsCisJMHg2ZGVmZDBmYywgMHg4YmNlZjhjOSwgMHgzOGEyOWViOSwgMHgwYmJiOTY5MSwgMHgwYWFlZTVjZCwgMHg0N2UxOGY5YSwKKwkweGY2ZDY3N2ViLCAweGFlOTI1Zjg2LCAweDM3ZjYzODMyLCAweGJmMGYxMDM4LCAweDc5ZmQ1MDZjLCAweDM0MGU4Zjk0LAorCTB4YjA3ZjMwZjgsIDB4ZGEzNGMzNDEsIDB4MGZjYjEyMzAsIDB4MmYzMWY4MzcsIDB4OTg2Y2Y0ZGEsIDB4N2ZhZmZhNGYsCisJMHhlZWJiMTQ5MCwgMHg5ZDU0ZWZjMiwgMHg3NWMzZTE4YywgMHhmOWFkZTQ3MiwgMHg4OGRmOGY4MCwgMHhhZjE1YWY4OCwKKwkweGRlZmU0NzhlLCAweDNhOGU5YTM0LCAweDczNjdiZDg2LCAweGZlZmVjNjMyLCAweGQyNTdmMmU5LCAweDBkNWYyODRhLAorCTB4ZDNhZmQxZjksIDB4ZWZjM2M2NGEsIDB4MTdmM2IwOTYsIDB4ZjYzYTQxNzAsIDB4MjU3YWVlMWUsIDB4ZTA5M2Y5YTAsCisJMHgzNGM2MzQ3NywgMHhmYmMyODYzYiwgMHhjOTViYzFhNCwgMHhmZDIzOTQ1OCwgMHhiYmYwODljNSwgMHg2YzMzN2IwYiwKKwkweDk0OWE3ZWI0LCAweDA3ZjhlY2Q3LCAweDY0ZGVhYjgwLCAweGU3ZTdhZmU3LCAweDZjOWYxZjMzLCAweGJjZTNhZmQ2LAorCTB4MGE2NmZmNGMsIDB4NzFiY2UzYzUsIDB4NTM3ZTA5ZjgsIDB4MzlhY2ZkMDAsIDB4MzMwN2I5YzYsIDB4YmY1NDg5MWUsCisJMHhlYjhhNzZlMSwgMHhkZmIzZWZlNiwgMHhjNzU0NDg1ZiwgMHhmN2JkZTFmYiwgMHhjZWMzNWVjZCwgMHhiZWM1ZjdhOSwKKwkweGZmOTliZWU3LCAweGUxZTI0NDBlLCAweDI5MTc2ODI1LCAweDEwM2JmNjNlLCAweDBmN2IwYTI5LCAweDRkOTMwNDg5LAorCTB4ZTVjZGVkZWYsIDB4MDYwNmNjZmQsIDB4MWY1N2QwOWEsIDB4MTVmZGU2Y2YsIDB4ZmIwZTc5MWQsIDB4ODg5N2RmODMsCisJMHhmMDg3ZWZmNSwgMHhjY2Q4YzNkZiwgMHgzNTc0ZDNmNSwgMHhlZDRkZWM1MCwgMHg1YmQ0Njc2ZCwgMHg3NzU5ZWJiZiwKKwkweDBiZDEyMTZkLCAweDg5MDE0M2Y2LCAweGVkMDRiZDgwLCAweGQ0YmI2OThhLCAweGRjMDIwMzBmLCAweGQ3Y2UzM2VmLAorCTB4Y2RmODBiM2UsIDB4OTNkZGZkZWYsIDB4ZWJjMzAyN2QsIDB4OGE3ZDNjOTMsIDB4ZDQ0OTRlZmYsIDB4ZTMwNzk4MTMsCisJMHgxMjNjMTZmYiwgMHhjYTc2MDNkYSwgMHg2MjA2YmIzZSwgMHg4ZmU0NzQ1MiwgMHhmODk0N2VmOCwgMHhlNzAxYzUzYiwKKwkweGJjMGY1M2ZjLCAweGQ5ZTVlZWNmLCAweGJmMzgxNDNhLCAweDdjNWJkMmI4LCAweDQ1NTFjNDEzLCAweGYzMDMzZWE1LAorCTB4ODE2ZjRlZjcsIDB4ZmE5ZTgzZmMsIDB4ZGRhM2Q4ODcsIDB4MWYwMTM3YzUsIDB4MDZmN2YzYTQsIDB4MDEwMDA0MDgsCisJMHhlMWFhMDgwZSwgMHg0M2ZkNjM4ZiwgMHg2NDY1NGViMywgMHgyYmYyY2M5ZiwgMHg4NzM2MzdiZCwgMHgzZjVmMjEzMiwKKwkweGYyMDhmODBmLCAweDdkYmZiNDhkLCAweGMwMjFjMTQ5LCAweDg2ZTE2ZTQ3LCAweDQyMzc2M2U2LCAweDAzN2Y2OGRlLAorCTB4NTc4OWZmYjYsIDB4M2I4ZmZlNjUsIDB4NGFmNjBkOTgsIDB4NzlhNTVlNGYsIDB4NjI1ZTRjNGYsIDB4YTk2MGUyNzksCisJMHgyMzlhYmYzMSwgMHhkMDczYzQ3ZiwgMHgzYmQ4MDdiNSwgMHg2NjA3YTk1ZCwgMHhkNGNmMzAwOCwgMHhmZjEwMzNmZCwKKwkweGJjYjdkNWU3LCAweDg3OGMzNDJiLCAweDA0ZWI2MDhmLCAweGY0MWI5NzhiLCAweGE2ZTFlZTMwLCAweDc5Zjc4M2Q5LAorCTB4OWQ2MWY4NjMsIDB4YzRjNzZjZDcsIDB4MGZiYzI3ZGMsIDB4MWZkM2RkZjAsIDB4MzZjYmFmOGYsIDB4Zjc0YTllZjYsCisJMHhjNmVmZDg4ZiwgMHg1NDdiMDMwZCwgMHg4NmI5Yjg4NCwgMHhhM2RjMmU2OSwgMHg3MGMxZmVhNywgMHg5ODM5NWMxMiwKKwkweGNkZTM1ZmQ2LCAweGI1NWUzYTQxLCAweGE5Y2RmYjNiLCAweGE3NWYyZjVhLCAweDgwNzcyOTY0LCAweGY4YjU0ZTNlLAorCTB4M2Y1Y2Q5MzUsIDB4N2Y4YjUwOGYsIDB4MzcyYjQ4OTMsIDB4ZjBiNWMxMGEsIDB4OGY2ODZjOWUsIDB4OTM3ZGUyYWMsCisJMHg0NzI4MTk1ZCwgMHgyMjhlYjk2NywgMHg1ZjMxODNmNSwgMHhjYmJmZWZjZCwgMHg0NzZiODMyYiwgMHhjNDU5MWU4MSwKKwkweDc2NTU2ZWY0LCAweGRmYTY1OGEwLCAweDhkOTczZDU3LCAweGYwNjcwYmJmLCAweDI0NTI1NTVkLCAweGY3YmI5YzZkLAorCTB4Mzc5MWI3NWMsIDB4MjFlNDQ3N2UsIDB4ZWYwOWQ1YjUsIDB4NWFmYjE4ZjIsIDB4NjQzN2ZiYjUsIDB4YzdmZDNlYzEsCisJMHgzYjQ2ZGU4NywgMHgzNjYyNDk3MSwgMHg3NmQzNTljMiwgMHg2OWRmODE1YywgMHg3Y2EzNmRhOSwgMHhkOGZiYmY0NywKKwkweGEzYzc2M2Q5LCAweGM4ODdmMjVmLCAweGJlMDI2ZmEwLCAweGMzNjhkMGZlLCAweGQ5ZmRkZGNiLCAweGZkNTIyZjU1LAorCTB4ZWE4NWQzYTYsIDB4ZDMwMzgzNjgsIDB4ZDVmZDdhOWQsIDB4ZjA5YzBhZTAsIDB4NDljOWI4MmUsIDB4MWNmMWU5ZjksCisJMHhlYWZlMDU1ZCwgMHhmNTFlYjdiYywgMHgzYThhZTNkOCwgMHhkM2FmZjgwYSwgMHhlMDY2YzNmYiwgMHg5MTI0YWFlNywKKwkweDVmMGZlYmYzLCAweDdlZjhmM2Q2LCAweGI5ZWZjZDNkLCAweGJmYTZlZGI3LCAweGExNjBkZjY4LCAweDdiYTlmZWQ5LAorCTB4NDFmYzhkYzQsIDB4MDJkZjkyZWQsIDB4YjY2ZWQ1MWYsIDB4YjNmZDYwODUsIDB4YmVmMWRhMzksIDB4MWJlODI3NzMsCisJMHhmYmU2NWZkNCwgMHhhNjA1MWI5OSwgMHg1ODczNDMwZiwgMHhmNzcyZmExYywgMHg3NGJlMmIzNCwgMHhmZDhjNzA5MSwKKwkweGU5OTEyNGJkLCAweDg0MjkwYWFiLCAweDVmMTU3NmZiLCAweDJmZmViMTdhLCAweGJhNjljNzFmLCAweDFjNzdkYTBmLAorCTB4ZTMxYmQ2MzcsIDB4ODM4ZWY3NTQsIDB4ZjZmZDUyN2MsIDB4NWZjZmY0NjEsIDB4YWZiMGRhYmMsIDB4NzdmZmQ0NzUsCisJMHg2MWNmYzUzZSwgMHhlODc0ZjUzOCwgMHhkMGQ5NDFlNywgMHhhNGNmZDQyNywgMHgxZWU3ODY3OCwgMHhmOTI0M2U3OSwKKwkweDQ3YTk3OTA4LCAweDJlNmRhY2ZmLCAweGY2ZmEwNGM5LCAweDdlYjMxM2Q2LCAweGI3NGEyNWQyLCAweDNlNzgxMjk3LAorCTB4Yzk3MzdmNzQsIDB4MTNlZDM4YTQsIDB4OGM3M2VkMmMsIDB4N2ZiMTRmZmMsIDB4M2EwZjNjMmIsIDB4ZGEwZWYzN2IsCisJMHhiZDkzZmE1ZSwgMHg2ZGYwMGYyNywgMHg0YmZhNTliMCwgMHg4NmRmYzYzNiwgMHhiN2ZjMTlmZCwgMHg2NWZiYmJjNywKKwkweGE1ZTllZjc4LCAweDEwZjE0MGE0LCAweDIwNjhkZjY2LCAweDE1MjQ1Yjg3LCAweGMwZDE4NzdmLCAweDNlYmUxZWYzLAorCTB4OGQ3OTdjNTUsIDB4NzhiZGZmMDksIDB4OWY5NTMwMmYsIDB4ZmI0Y2QwNmUsIDB4MmUxNzhiYTEsIDB4N2IzZjdiYzMsCisJMHg0MTU2M2FmOCwgMHhkYjNlZWM0MiwgMHg3ZGE2YjkyMywgMHhjNzBmZmZkMCwgMHhiOGEzODVkNywgMHhmZTRhMzgxZiwKKwkweDMyOGM3MGM2LCAweDM4NWU4MWU5LCAweDVmZTU0ZGYyLCAweDY5MzEwZTE3LCAweGVjMzY2OTc2LCAweGExYjFhZDUzLAorCTB4MGI2NjkwOWYsIDB4NmVjMDcyMzksIDB4ZjdlYzVmZmIsIDB4MDczNDIwMWEsIDB4NjFhODk5ZTcsIDB4Y2U1N2RhNmMsCisJMHgwNzlmNjAzOSwgMHg0NDhlNzljNiwgMHg0MGUzNDk4ZSwgMHgwNTZkNzQ5ZSwgMHg5MTNmNTNhYywgMHhlNWExYWZkMCwKKwkweDg2MTkzOTBlLCAweGZkZTFkNTZlLCAweGQ4OTUyYTJiLCAweGIwNzU0ZTVmLCAweGU2ZjUxOTg2LCAweGFiODc2Mjc3LAorCTB4ZTVhMjU4YTQsIDB4Yjg3OWQ1ZTMsIDB4ZGQ5NGU1ZWUsIDB4ZmRmNjA3NTUsIDB4Y2ZlMTc3MzYsIDB4YmM5MzEzNTcsCisJMHg1YWIyN2RhMiwgMHhjN2Y2OGE1OCwgMHg5YjE3YzQ5YSwgMHgzZDM4ZGY2MSwgMHgwMjMzZDk4MSwgMHg1OGY5YjE3OSwKKwkweDI2N2FiYzQ2LCAweGJkZjcyZGFmLCAweDMxYzQxMzc4LCAweGFlZDRhZWI2LCAweGFiNmU3ZjA2LCAweDBjMzkxYzMzLAorCTB4NmUzZGY5ZWIsIDB4ZGNhYTNkZmMsIDB4ZjgxNmUxNzUsIDB4ODM3MTBhYmQsIDB4MzE0YmQ3MGQsIDB4MmI2YmJjMjksCisJMHg2MDc4MTc5YywgMHg4YmVjMWY4NCwgMHg0MGQ3NjBhZCwgMHg1YzZlMzVmYiwgMHg0MjFhNWJmZiwgMHhlMmFmMmY2OCwKKwkweGY1ZjZjMGViLCAweGU3Mzg1NDkzLCAweDkyOTZlOGRjLCAweDkxNmJiZDYxLCAweGI4MDU2ZmViLCAweDY0ZWZiYTVlLAorCTB4ZDAzYWUzYjMsIDB4NDE5NmZlNjMsIDB4ODBjYmVmM2MsIDB4NzFjYjRkNzUsIDB4MTRmNWU1OGMsIDB4Njg1NzViMTksCisJMHgzNDg1YzE4MywgMHg0NGZmYzNmMiwgMHgzM2Q0MTJhZCwgMHg2YjBlZDEyNywgMHgwNGFiMmY3NCwgMHhiZmQ2OGUzYiwKKwkweDdhNzhhMGVjLCAweDg1ZTM5OTNjLCAweGU4ZjRlN2Q3LCAweGEwY2Q5M2E1LCAweGJkMTVjNTA3LCAweGVmM2ExMmY5LAorCTB4N2E2MzNmMWQsIDB4M2ZkYTA5ZWEsIDB4ZTc0NTJiYmMsIDB4MTg3NzgyMTMsIDB4ZTg0OTQ3YmIsIDB4YzEyNDI1ODcsCisJMHg3NGQwYzc2ZiwgMHg5ZGZiMGU3NCwgMHhiZDE3YWE1YiwgMHgzODQ5YzdlOCwgMHg0OTFmNjM1ZiwgMHgwZjdlYzUxOSwKKwkweDdhYzNkYTFkLCAweDgzOTE5MDkzLCAweDBjY2E5OGZiLCAweGUyODM1ZWY2LCAweDY2ZmRlMzcxLCAweGRkNTY3N2UzLAorCTB4YjNhN2Y4YzQsIDB4NjdkZjI5NzgsIDB4NDNkZTU5NzEsIDB4ODk1ZmFlNzAsIDB4Nzg0ZWU5OWIsIDB4NGY4NjIxMzcsCisJMHgwYjdiY2IxNSwgMHgwN2NjMDkxMiwgMHhjZDU0NGI3YiwgMHhlNDQ5YmZlNSwgMHhkODgzNGFmYiwgMHhiNzBlYWRlZiwKKwkweGEzMmVkMDg1LCAweDM1ZTk4NDUyLCAweGQ5ZjY4YTI0LCAweGY5ODFkMjY4LCAweGU2NmRlMDMxLCAweDBkMmMzNWMyLAorCTB4Mjc4ZDhlMmYsIDB4YmJlMmM4YmEsIDB4YzdlYzExMDEsIDB4Nzg4ZDViYjQsIDB4NDRmNWYwNGMsIDB4OTZiZmRlYmEsCisJMHhmYzM2ZTNjOCwgMHg2NjUzOGM3NywgMHg3ZDdlZTIxNCwgMHg1ZmFiMTI2NiwgMHgwZmJiYzgxNSwgMHgzMzhkYmNlYywKKwkweGM2OWM2MWE2LCAweGY1OGNlZmIwLCAweDE2ZGZiMGQyLCAweGFiNTc5ODcyLCAweGMxN2I1YzQyLCAweDNhMTZlYmIwLAorCTB4YjY3NTNlNTksIDB4ODg2OGUwZmUsIDB4MGI1M2I2NmIsIDB4MmZlZTFiMzQsIDB4Zjk2YWY4YjMsIDB4YjAzNGUyZTYsCisJMHhiYTFlMTZjYiwgMHg0Y2U0ZWQxNSwgMHg4YjY1ZDk5NSwgMHg4MjUwY2UzNiwgMHhkYWRlZTFhMywgMHg4YTA3ZjQzYywKKwkweDg0NDg0YzM3LCAweDRlZDU4NDdkLCAweDg1NzVlMjdmLCAweGZiZTI2N2U4LCAweGM3YjUwM2I5LCAweDM1NWRhNmI2LAorCTB4YWI3MWU0MTksIDB4Y2E5MDEyOGQsIDB4ZWViMjRiZmIsIDB4YjE3YzBiMWUsIDB4Y2NlZDBmMjEsIDB4YzZjMTA5YWQsCisJMHhkNmVmZGEyNCwgMHhhYmZjZDY3ZiwgMHg0ZWE3ZmU2OCwgMHg4YzM4ZjBiZCwgMHhkNTgxM2FiMywgMHhjMDUxYmJjMywKKwkweDEyZTczZDliLCAweGM5YmJlMWI2LCAweDNkNmY4ZGZkLCAweDEyNTJmMDk3LCAweGE4Y2E3ZjdiLCAweDdlNTM2ZmZmLAorCTB4ODAwMDdkN2MsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RiZGZmMDAsIDB4ZDU5NDdjMGIsCisJMHg2NmZkZjg5NSwgMHg2NjY1NzliZSwgMHhmMjYzYzk5MiwgMHhjMjEzMDkyMiwgMHg5ZTRlNWU0YiwgMHgxMjRjMjI4MCwKKwkweDRjYjQ0M2MyLCAweGU4MjAyYTEwLCAweGE3OTAzNGYwLCAweGJhZGM1ZDQ4LCAweDMwMDQwY2ZmLCAweDU3MDZiNjUwLAorCTB4ODRlYTJiMTEsIDB4YmJhYWM1NjIsIDB4MzUxYmEzNDEsIDB4Yjg4MDgwZWEsIDB4ZGE0NDZkZDYsIDB4OGZmZDE2ZDIsCisJMHg0ODEwMTU0YSwgMHhmZWQyYjU4YSwgMHgzOWNmNjVkZCwgMHg3Y2NjZGVmNywgMHhiNWYwMTk5MywgMHgzZWZlYjRmZiwKKwkweGU3ZGRmN2VlLCAweGNlNzNkZjc5LCAweDEyZTk3M2JkLCAweDJjNjE0ZGZjLCAweDU2MzBhNDk0LCAweDUxYzFkOGNhLAorCTB4NjE4Y2Y1OGMsIDB4MjRkZWE5OGMsIDB4MDY0ZGNmMDYsIDB4MzRlMmQyNmYsIDB4YTM3ZWZhYzYsIDB4ZjVlMWJiNjcsCisJMHg5MjZmNjYxNywgMHgyNWQ4YzZjMywgMHg3OWZhMmVkMSwgMHhhMGIxOTlhYSwgMHhjZGIzYjE4OSwgMHhjMTFjMTY2ZSwKKwkweDMzNjY5OWQ4LCAweDFmOTY2Yjk1LCAweDlmYTBjNjk4LCAweGI5ODUwZTlhLCAweGM1NWIxOWYyLCAweDNmNjMzNmRhLAorCTB4Njk5MjNiYWYsIDB4M2QwMTU1ZGMsIDB4ZjQ2NDhlMGIsIDB4NWJmZTA5NzcsIDB4ZDUyOGZjYmQsIDB4ZWJjOWRkNWYsCisJMHhhYTBlYjJkNywgMHg0ZjMxOTJiZiwgMHhmNzZiM2MwNywgMHgxY2QwNTk1YSwgMHg1MWRmNWZhZSwgMHg0YTFmNjlhYywKKwkweGQ3YmY1MWQyLCAweDNiMDZmYjI1LCAweDViZGQ4YzljLCAweDJhYmVmYzNkLCAweDVkNTY5Zjc4LCAweGZhZTFmNjYyLAorCTB4MTNlMzhlNTgsIDB4ODdhZmE4YWIsIDB4ZWJlNjNhZjcsIDB4NzdhZWIxODgsIDB4NDlkZTVjMDQsIDB4YWM0ZThhODIsCisJMHgzMmIxZDBlZCwgMHhlMDNhZDZjNiwgMHgxZWM2MmU5ZiwgMHg2YzdjZDg1MCwgMHgxNWY3ZjZiNywgMHhjMjYzMjkxOSwKKwkweDllMmFkNmVkLCAweGY4OThjNzBjLCAweGE4YmM2YTcwLCAweDg4ZDQ4MTY3LCAweGM0NjdkYWIyLCAweDM0NWUzNWY1LAorCTB4MGVmM2ZiZDIsIDB4NjMwNzVmYjMsIDB4M2ZmNGM5MWUsIDB4N2ZhYzJkNzAsIDB4MTk1M2ViMjYsIDB4OTA5ZjUzY2MsCisJMHhjZDVkOGUzOCwgMHg3MTI1OGI1OCwgMHhiYTY3M2UzNywgMHgwOGExN2QwYywgMHg1MzMzMzAzOCwgMHhmODMzN2U3MSwKKwkweGM0ZWJmNjJiLCAweDcxOTQ0NzY5LCAweGVkNDAzZWQ4LCAweGE5OGVkOTY3LCAweGM0NzM0MDBjLCAweDgzMDM3MzVlLAorCTB4OTBiMDM3ZjcsIDB4Y2UwNjBhY2EsIDB4MjhmZGZhMGYsIDB4MjM1OWRmYjIsIDB4ZGQxYmU1YjUsIDB4MDllY2YyZGEsCisJMHg3ZTYzMzJkYSwgMHg5YTRmZDc4MiwgMHgxYTRlY2E5YiwgMHgwNGZlZmRjMiwgMHgwMzExZDZhNiwgMHg1ODAyYjcyZSwKKwkweDVlZWQ3ZWIxLCAweDA0NjRlMDRiLCAweDkyM2JlYjFlLCAweGFlYzZlNTM1LCAweDg4YzljMGFjLCAweDFmZjE2YTcxLAorCTB4MTM1ZmYwNTksIDB4NTg5ZDc3NWYsIDB4ZGY0NjA3ZjcsIDB4NWJjMDBlYWQsIDB4NzExOTBiM2QsIDB4NDZjMTQwZGQsCisJMHhhY2M2NThlZiwgMHg3YzQ1ZTYxNiwgMHhmMTZmZDgxZCwgMHhjZmU4MTJiMCwgMHgwMGI3NmU2NiwgMHhhYmJiMWI3YywKKwkweGRlZjAyNTk1LCAweDMwZWY4NzZhLCAweGUxOTYyNzNmLCAweGZhZjAzNTY5LCAweDBlODgwNThjLCAweDM5ZGE4ZmUwLAorCTB4NWJlZDk5YmQsIDB4YjcxM2U0MTUsIDB4Y2RmZWRhYWIsIDB4ZmYwMGRkZTcsIDB4NGYwMjkzZGQsIDB4MjRhYzNkOTUsCisJMHgwZWEzYWM0NiwgMHg1ZTFlOTFkNiwgMHgwN2ViMzljNywgMHg1ODJmODg2NSwgMHhhNWVjNmZjZiwgMHhhNjQ2MTc0OCwKKwkweGYzZDc4NTI0LCAweDVjYjVlMWFkLCAweDVkYzZhZjBiLCAweDE4MzdhMjM2LCAweDE4NDRiZGU3LCAweGNlYTc2MWE3LAorCTB4Y2ViMjg0NmYsIDB4N2U0NDYzZGMsIDB4M2NlOTE3YjksIDB4MWM3MmRlMDYsIDB4NmYzYzRjNGEsIDB4ZTBjNzNjNDMsCisJMHhmY2FjZWRhNywgMHgxY2M3ZTQzZSwgMHhjNzE4MWZlNCwgMHg2NTI3ZWViNiwgMHg4ZjgxOGIyNywgMHhmYTE3MzdhYSwKKwkweDA1NGRiZWEwLCAweDU0NzE4NmZlLCAweDA4YTliZmY4LCAweDZkM2JkOWM4LCAweGU5ZDAzMjU1LCAweGMzZTczYjI5LAorCTB4N2EyZTg5MGQsIDB4MGFiYzUwZWUsIDB4ZTc1ZDM1ZTIsIDB4ZDVmYTQ3YzksIDB4Y2M0M2I4MjcsIDB4NjZhM2YxYzEsCisJMHhjYjYwMTk0MiwgMHhmOTYyYzFhZSwgMHhlZmU4MWViZCwgMHhjYjFiOTgyMSwgMHhmMDA5ODQxNiwgMHhjYmMyYzg3OCwKKwkweGVmY2EzOTJmLCAweDZlZTMwOGRkLCAweDBkZTVlNjRhLCAweGQ1YjliZDNmLCAweDE2Y2EwOTNmLCAweGU1NDM5ZTU5LAorCTB4NDE2ZDBjODcsIDB4ZmZkZGUwM2QsIDB4NDRmNWM5ODIsIDB4MjhmN2I1M2UsIDB4MzIzMDVlNTgsIDB4NGQ0YzA0ZjAsCisJMHgyMzY1ODQzZiwgMHg0MjI2YTY1ZSwgMHhmNGI3MjBlNywgMHg5Yjc2OWEyZiwgMHhlZWQwNWVhMCwgMHhhNzg0MjdmYiwKKwkweGZiMzlmZjVjLCAweDI2MzYzY2YxLCAweDRkN2U3ZjY2LCAweGFjZGY3OTdmLCAweDUzYmYxODNmLCAweGZiZjg3NTc3LAorCTB4NDE5ZGM0ZDQsIDB4YzJlNzZmM2QsIDB4ZTdhNzJjNzYsIDB4OWZmNDNmMDMsIDB4NmQ4OWEyZmUsIDB4MDYyM2UyODUsCisJMHhkYTE3OWI3NiwgMHg2MzJjNWRkNSwgMHhkNDM5MDhjMSwgMHhiNjc5ZjAyMywgMHg1YjcyNDFkOSwgMHhmOTQzYWZiZSwKKwkweGE5ZjkwNjNkLCAweDdkNzBlNDg3LCAweGZlNDZhYTQ3LCAweDdmNWNiOTRhLCAweDdmNGQ1YWYxLCAweGMyN2M4ZTM5LAorCTB4NDNkYWJkNTcsIDB4ZTJmZWFkZjIsIDB4MTIxZWZhNjQsIDB4NzM2Y2Y0ZjIsIDB4Zjg4OWU5MjYsIDB4YzhkMjBjZTMsCisJMHgxMzM4ZjBmNSwgMHg3MmY4YjA1OSwgMHhlZmEyNGNlMywgMHhjYmU2MWM3MiwgMHgwNmJkYjkyMiwgMHhhNDI0MGNlNywKKwkweDg3YmM4MjM3LCAweDc1MGMyZTcxLCAweDQ2NWYyNTI1LCAweDAyNzZkOTlmLCAweDY3YWM0NTkxLCAweDYzMzQxYTliLAorCTB4MDdkY2RiZmYsIDB4ZmMxOGJlMWMsIDB4Yjg0NGU1MjAsIDB4MWVkYjUxYmQsIDB4ODExYjIzZjQsIDB4NDg2M2VkZjQsCisJMHg3YWFjZmZiNywgMHhkNGZhOTFjYywgMHg1MDM4ZjA2NiwgMHg4YWY2YTg2ZiwgMHgzNDM3MmUyMywgMHg4NjY0N2U0ZCwKKwkweDUxNjkyODBhLCAweGQ5N2YzZDM5LCAweGQxZTg4MWI2LCAweDQxMWY3MDZlLCAweDNhZWRkYWZjLCAweGFmYmUxZjk3LAorCTB4NDgzY2U5YjcsIDB4NzMwZTJkMjcsIDB4NTFiZGYxMDAsIDB4NzI4MWMxYjksIDB4MDc2YmY2NDMsIDB4YjhmMzhmMzEsCisJMHg3YTQyMWI2MCwgMHhkNTdhZGUzZCwgMHgwZjU0ODk4YiwgMHhhOTE5OTI2NiwgMHhjNmY3ZmYxZiwgMHgwZjE3YzU4MywKKwkweDMxYmQ4ZjFjLCAweGZhMGI4OGYxLCAweDZlNzQ0YjU3LCAweDkxMGJlMDBiLCAweDFkMDQ3MWZhLCAweGRmNjNmNzQ0LAorCTB4Nzc5Y2M2YTksIDB4ZmYwOTNkNzQsIDB4ODQzNmY4YjgsIDB4ZTdmZTExMTIsIDB4ODExOWJhNmQsIDB4NGQyZWYzMTgsCisJMHg5ZTliYmU1NiwgMHhkZjI1MTQ1YSwgMHgzYzNiN2Y5MywgMHhkMDk1ZWQ4OCwgMHg0OWYyMGEwZiwgMHhhMzI2OTZmZSwKKwkweDkwYmMyZGZjLCAweDM5MjJlOTU4LCAweDczYjVlZTlmLCAweGI2ZTM4NWIxLCAweDdkOWE4ZWQ4LCAweGVkOTg4ZmE0LAorCTB4M2ViZmQ5MTMsIDB4Yjg0OWZkM2UsIDB4NjRhYWRlMTgsIDB4MDQ2MDFmODgsIDB4NGFlMzdhODYsIDB4NDEyYmIwNzAsCisJMHgxNTk3ZTIyZiwgMHhkM2U1MGNhYSwgMHhhNzZmM2E0MCwgMHg3N2Q3ZjRmOSwgMHhlYjExZTc0MywgMHgwZWRkNTE2ZiwKKwkweDc1ZmQ2YmE0LCAweDk5Y2EzMzFlLCAweGU2Mzk4ZWY1LCAweGFhMzc5NDEwLCAweDIwZjlkOWFlLCAweDAyZGVmYTg3LAorCTB4YjdkNjEyN2IsIDB4MWNjOGFkMjksIDB4YzE1YThmOGIsIDB4MmRmOWM0NmUsIDB4ZDY2OWQ2NGQsIDB4MWQ2NjlmMjMsCisJMHhmN2U4ZGZlNywgMHg5ZWI5OTI1YiwgMHhiMTNmZGQ2OCwgMHg5ZjEyNTNjNywgMHg3OWQyNDA3ZSwgMHhjYjliOGY1MSwKKwkweDU4NTZjNzU0LCAweGU3YzBkZTlmLCAweDA3NjM4OTZiLCAweGMxZTM3ZWNhLCAweDBiN2VjYjZiLCAweGE4NzU2OWM5LAorCTB4NDRmNjgwMzksIDB4NTQ5Yjc4ZjQsIDB4YmUwNzhmNzcsIDB4ZjhmOTgyNmYsIDB4YzdjMzljYjEsIDB4M2FhMjU0ZGYsCisJMHgxNmQ3NDM3NiwgMHg0NzMzMDI1NywgMHg0YjM4MzdkNCwgMHg2YzE3ZmUwOCwgMHhkZjBmNGM2OSwgMHhjNjNkMjEzNywKKwkweGQzODQ5Nzk4LCAweDY4ZWZlNGJjLCAweGU4YTJmOTNmLCAweGMzYjdmNzMyLCAweDVkMGQxMGQ5LCAweGNiYTJjNmI2LAorCTB4NGIzN2E4NzksIDB4Mzk5OWZjZjksIDB4OTM0M2ZlNzIsIDB4OGM3YzhlYmUsIDB4NDliMjliYTYsIDB4OTc3YzgzY2MsCisJMHg1ODc2Y2YwMSwgMHg2NmNhYTc2ZiwgMHg4MDdkNDNlYywgMHg5ODQ0ZDZiNiwgMHhlNjM2Y2RkZiwgMHgzOTNlOTkwMCwKKwkweDMyNjc3Y2I1LCAweGU3YWNiN2FjLCAweDNmMjE5MTgwLCAweDFkNjkzYTc0LCAweGY0N2RhMjc1LCAweDhlMTRhNmI4LAorCTB4ODM4YTUzM2YsIDB4M2RjNzQ5OWUsIDB4ZjgwMTRmNGYsIDB4YjgyNGY2NzYsIDB4OTlkNGY4MTQsIDB4MDYzMGZhMDIsCisJMHhiYzA4OGY3YywgMHg5ZmM2ZDYzMywgMHhmMjFjNjg2YSwgMHhiNjVmYWM4ZiwgMHhjMzc2Nzk4OCwgMHg2YjAyNTBmMywKKwkweGIyYmQ4MzM1LCAweGM2MDdjODRmLCAweDE1NGZlN2VlLCAweDk5YzYxNzE4LCAweGRkZThjYWZkLCAweGY1OGEyZjY0LAorCTB4ODBiNTAyMWYsIDB4NDNkM2QzZjUsIDB4NzdmZDE0ZTMsIDB4NTg1ZWRiYzAsIDB4ZWFkZTA0N2QsIDB4ZGJjMjIxY2QsCisJMHg2YmRmNDZkYiwgMHhlM2M2OWYwOCwgMHg3NzJjNzRhMSwgMHg4NzkzM2QxZSwgMHg3MGI2NzBmOCwgMHgyNWVmYjVmYiwKKwkweDZlZTkwMDZiLCAweGQzZDY3ZTIwLCAweDBlMmVlYWZjLCAweDgxZTJmZTYyLCAweDgzNTNhYjc4LCAweDJlZWI1ZmE0LAorCTB4NTg3N2QxZTYsIDB4MTI5Y2RmYjcsIDB4NmMxYjNlZmUsIDB4MmViMDA5ODYsIDB4NDI3MGU2NjYsIDB4NDdjMmM0ZjgsCisJMHg4OTZiZTBiYiwgMHhhM2ViNTAwZiwgMHgwODFmMDJlZCwgMHgzZWM0OGZhNywgMHg0ZWVmMWZhNywgMHg3ODA2NjZlMywKKwkweGVmZTY2YjNmLCAweGRmMjQ2Nzk5LCAweGZlN2QwOTg3LCAweDAwNWU0MjUxLCAweDBkMWYzM2Y3LCAweDdhNDZjZTA3LAorCTB4OTFlOTVkNTAsIDB4ZTJjZWE3N2EsIDB4YWMzZTZmYjksIDB4NjdhYmJkOWIsIDB4NTk2M2MwNGYsIDB4ZWQxNWFkYTUsCisJMHg0ZjI2NjVhYiwgMHhjYjVkZGExMiwgMHhlYjJiZDNkZSwgMHhjNDg0MDlmMywgMHgzYzA0MmIwNywgMHg1ZGY3MzJjZiwKKwkweDM2ZmYzZjg4LCAweGMyMDllMzhiLCAweDk3ZmY3NjlmLCAweGY4YmNhM2JmLCAweGEyYmY2ODFkLCAweDkzNDZlZjRiLAorCTB4Y2RhNTY5NzEsIDB4ZjU5NmZkOGYsIDB4ODc2ZDNjNTQsIDB4YWQ1YjJiZjcsIDB4MmVmZDA2MmUsIDB4MDRmZWUyOWIsCisJMHhmNzY1YmRlZCwgMHhmMjFiNWM1OSwgMHhhNDM4YmY3MSwgMHg1ZGZhMGIzYywgMHgwM2JlNjBmYiwgMHg5ZDc1ODFlNSwKKwkweDA2ZWNkMzM3LCAweGViN2VlMDkzLCAweDZkZTAyYjRjLCAweDg5NjRiMjkzLCAweDdkYWMwODUyLCAweDE1MTZjYTdmLAorCTB4NTdmZWFjZjAsIDB4MjgxNjY3ZTUsIDB4YzE3Zjc1NWYsIDB4OGM3NWYzMTYsIDB4MWNiMjgyYmQsIDB4ZDBmZjU5ZWQsCisJMHhmZWRmNjg5OSwgMHhmNjQ2YTcxMiwgMHg3ZjZmYjcyZSwgMHhjYTI3NDQ3OSwgMHg4MmE2NWJjNSwgMHhlY2U1MTgwYSwKKwkweGNlNjBkOWQ0LCAweGI3OGE1MzJiLCAweGY0ZmM2MTk4LCAweDBlYTE0ZjE0LCAweDMyOTM1YmM2LCAweGI3ZjYyNjYxLAorCTB4N2ZiMWJlZjQsIDB4NzdkZjA5ZGQsIDB4YTk5YWNjYTQsIDB4NDRkZTEzZTYsIDB4Y2FjY2VmN2IsIDB4OTI2ZWQwYTEsCisJMHg1NGIzY2YyYywgMHg1NjY5N2Y0MiwgMHgyN2E3YjYxNiwgMHgwOTBmYmYwMCwgMHg3N2Y2OGY4ZiwgMHhiZGZkYmY2NywKKwkweDFjZDRlNjYwLCAweDUzNDU0YmMwLCAweGJmZmQwYWE1LCAweDk2ZGI3MjllLCAweDM2MzE1NzMxLCAweDg3NzI4MWZlLAorCTB4OTgzZmM2MDcsIDB4MTVhNjY0YjIsIDB4OTQ2OWRmZjAsIDB4ZjE2ZDk3ZjUsIDB4Y2M5ZDU4YzAsIDB4YmUwMTg2ZjcsCisJMHhiYWZlZjFmZiwgMHg5ZmE4NjY5OSwgMHg3NDJkZWE5NiwgMHhjZDUzZmFjMCwgMHg5MTk5NmZmNywgMHg2NWY4MWRmYiwKKwkweDRmYmQxMmE0LCAweDEyNzE0ODJjLCAweDkwNDYxY2RmLCAweDMzZWJhZGU2LCAweGY4MmFmZDcyLCAweDcxZDM4NzNkLAorCTB4OTQyNDc5N2YsIDB4NGNlNTExZWQsIDB4MTBkY2VlNWUsIDB4NGU5YzdlNWIsIDB4MzNiOTcyZTUsIDB4OGY3N2Y2MjEsCisJMHhlZjAwNGI5MCwgMHhiM2U5MGVhMCwgMHg5NjE4MWFjYiwgMHhjMDI3OTYxZiwgMHhjNDA5ZTY0ZiwgMHgzY2I5ZGI1ZiwKKwkweDYzOWFiZTAxLCAweGQ5OGUzZTI3LCAweDVmZTUzN2RmLCAweGQzZjUzYjgwLCAweGU4YWM3YWE5LCAweDBkNzI5MGJmLAorCTB4NzFjNTY2NjYsIDB4Njk3NjRjYmUsIDB4Y2Y1OTc1ZTQsIDB4YmZiNzkyNTIsIDB4ZWI3YzE1NGEsIDB4NTY3MWYwZTIsCisJMHgzMzBhZTU2YSwgMHhiODQ3MGNmNywgMHhjNThiNzZjOCwgMHg0YjQ3ZjMzYSwgMHg4OGQwNTJmZiwgMHhlMmQ2YjlmYywKKwkweGFjZjljMGM5LCAweGMxOWU1N2RkLCAweGQ3ODc2MzJlLCAweGY4ZDcyYzVkLCAweDk4ZWJjMjRiLCAweGY0MDdlZjRhLAorCTB4NDRiOWZkMGIsIDB4NWYzMWVlZmYsIDB4NTdjOTVlMDcsIDB4N2QxYTU3ODAsIDB4YzMzYWQyYmYsIDB4M2JmZDY5ZmQsCisJMHg3ZWUzZmIwMywgMHhjNTdhMDE5ZSwgMHgxYjllN2IxOCwgMHg0MTVlYjg1MywgMHhlNDIyZWJmOCwgMHg1ZjIxNGFkYSwKKwkweDNkOTE2YTQxLCAweGFiYzVmZTdlLCAweDhmY2Q2Zjc2LCAweGY1MDM3NzFjLCAweDdhN2RmODBmLCAweDQxMmZlZTBhLAorCTB4MmIxY2EyYmUsIDB4YjBiMzNkNTMsIDB4OGE0ZjU5N2UsIDB4YTA3OWVkMDMsIDB4ZGU4MjhkYjcsIDB4ODkzN2E0NTQsCisJMHhhNjk0Y2VlNywgMHg3NmVmNWE3MiwgMHg4NjNiYjFjNSwgMHgzOTEzZjgxZCwgMHg4M2M1MzZhZiwgMHgyMmM2NDlmNiwKKwkweGM0NDk3ZTlmLCAweDg3ZmNhNGZjLCAweGZmNDUzYmZlLCAweDFmOWU5YzI1LCAweGM1ZTdhN2VkLCAweDJmYzIzZmM4LAorCTB4ZGY0MGRjYzQsIDB4NWZjZTA3NjMsIDB4MDhjZTM2YzEsIDB4MjU4MmY1ZmQsIDB4NzA5MWYzODAsIDB4MmZmNGI2ZmIsCisJMHhiOGJhODdlZCwgMHhkYTkxMmE3YSwgMHgyNjBmMWM2NSwgMHgyMTllYTBiYSwgMHhiOWY5YzVjNSwgMHg2YmM0ZTNlMywKKwkweGU5NzU1ZjUxLCAweGViZTJlMjk5LCAweDI2NTFiOTQ2LCAweGU3YmZhNGU1LCAweDc2NGE4NTQ4LCAweGJiMmU1ODRjLAorCTB4NzI5MTllYzgsIDB4ODczNjY4MzMsIDB4YmRiZmRmZWIsIDB4OTQ0NmM2NjcsIDB4MmZiZTI2YWIsIDB4MTQ4M2QzNGYsCisJMHhlM2NmMGEyZiwgMHgyZmFlMTRlNSwgMHgyNzk4ZjgyNywgMHgyNDc4MWQ5NiwgMHgwOGU1MmVkOSwgMHg3NWUxZTNhZCwKKwkweDU4NjNlYzk1LCAweGQ3ZTg1ZDlmLCAweGY5M2YyMTA5LCAweDY2NGM5ZWIzLCAweGYwZTEzZWMyLCAweGI2N2JmYTkwLAorCTB4ZGNhZmY0MjksIDB4NDdhNWE2NGYsIDB4YTUzYjA2NTksIDB4ZWUxMDU3NDEsIDB4ODljZmJmMWYsIDB4ODI2M2ZiYTAsCisJMHhmM2YxYTIwZSwgMHhjMDEzZTU1ZCwgMHg0ODcwOGZjMSwgMHhjODcyZTE0ZCwgMHhlZDA1NjUwOSwgMHgxN2Y0MTUwYiwKKwkweGI1NWNmZmMwLCAweDNmMzViZGNkLCAweDJlMzZkZTYyLCAweDFkN2E5ZDhmLCAweGUwNTc2Mzk3LCAweGZlNTRiNDhiLAorCTB4M2IyNWVmYmQsIDB4MWUxODczZjEsIDB4MmZmOThlZGMsIDB4MWQ3NmY3MDEsIDB4YzE3ZGMxYWIsIDB4MDlmMDFkMjEsCisJMHhhZjhkYTJkMiwgMHg1OThiZmNmMywgMHgyOWU3ZWZkNCwgMHhlZmZlYjkzYSwgMHgxYmI3MmU0NSwgMHhkN2NlM2M2MSwKKwkweGJmZDYzZjY0LCAweDNiNWRhODNjLCAweGRjZGZkZTdmLCAweDY1OGY0ZTU0LCAweDY4ODUzZGM3LCAweGRhZjMwY2M3LAorCTB4Mjg1ZmI4ZGMsIDB4YzA3Mzk5ZWIsIDB4ZGRlMWU1MDAsIDB4NGI2YjAzOGEsIDB4YzFkZTFmM2EsIDB4NGJhODE0ZjksCisJMHg2N2FkZTVjMCwgMHhhNWI1ZmIyMiwgMHhiZWZhM2E3MiwgMHgzOGZjMzFkNiwgMHhjYmM0NTdhNywgMHhjZDNlMDhlMiwKKwkweDc4NzFiNTRkLCAweDA4NGNmYWMxLCAweDQ3MmI1NTRmLCAweDliZmJmM2U1LCAweDAxODBmNzg3LCAweGYwMDc1YmQ2LAorCTB4ZTEyZGIxNDAsIDB4NjRiMWQ5ZDYsIDB4ZjhmOTA1ODMsIDB4MWYyMzczMzgsIDB4YTI1OGVmOWYsIDB4ZGQ3ODhiMWIsCisJMHhlYmJlYzhjOSwgMHhmMDBmMGY5NywgMHgxNDdiNDg3NSwgMHhlOTAzYjJlOCwgMHg1Y2Q0ZWFmMiwgMHg3MWQ4NmYxYSwKKwkweDdjMGM3NThmLCAweDEzNzY4NjFmLCAweGVjM2I5NWZhLCAweDRjNTdkYzAxLCAweDRkY2RmNTRlLCAweGVkY2U3ODQ1LAorCTB4NGEyMDY0YWIsIDB4ZWI0ZGFjMWEsIDB4ZmJlZjExMmQsIDB4N2Q0MTc3ZWIsIDB4N2U5ZjYzYTIsIDB4MzZmM2NlMmMsCisJMHhjMmJhYjZjNiwgMHhmYWE5ODFlYiwgMHg2ZjVhMWZkMSwgMHhhMDJkM2UwNCwgMHhkNmUxMTA3MiwgMHhmYmY1ZTQ2OSwKKwkweGNmOGEzMzE2LCAweDhjZmJlODM0LCAweGY3ZjQxZGY4LCAweGEzY2ZhMjJjLCAweDJmYzQxNGJhLCAweDZlZDA5YmVlLAorCTB4NzM3YmQzYWUsIDB4NjdkN2RjMTQsIDB4MDdhOGRjOTgsIDB4ZjQ0MjFmNjAsIDB4NTRjMmM4N2UsIDB4MjZmZmY0MGIsCisJMHg1NzRlNTEzYywgMHg4ZmQ4ZWZlOSwgMHg1MDJhYWFmMCwgMHhhZTI0MmRkYywgMHg2MGRjODVkYSwgMHhjZDM3ZGM0MSwKKwkweDdhMjU2MjllLCAweDM5ZGQ1ZjY0LCAweGJmZjUxYWI0LCAweGZhMDllMzk1LCAweGNjN2U4YjMxLCAweGZmMzBhMmU2LAorCTB4MmFlZjNhZmQsIDB4ZmQ0OGZmZGEsIDB4YTg1MTQ4NzYsIDB4OGRkNzQzOWYsIDB4YjExMmRkZGUsIDB4NTBmZWMyMmYsCisJMHhhYTUyMWZmZSwgMHhmYTQwZWU3MywgMHhiMjNhZmIxNywgMHg3YWMyZDMwZiwgMHgyMjk1ZWQxNywgMHhmZGRlMjQ1YiwKKwkweDNjYTE3ZTYyLCAweDdiNDhhM2E0LCAweDdlZDNlZDE0LCAweGIxZGZkNjdiLCAweGQ5YzgzYTY1LCAweDgyM2EzM2YxLAorCTB4ZDE1MjA3M2EsIDB4MDFmZjMzZjMsIDB4ZjYwNTUxZDYsIDB4NzBlMDA1YWMsIDB4MzM5NzJhNWIsIDB4ZmFmZGYyODcsCisJMHgzMGRmOWM0NCwgMHgzYWJjM2Y1OCwgMHhkMzFiZTA5YywgMHg5MzhmMGI2NCwgMHhlOTBmZmMyZSwgMHg0ODJmZWU0NiwKKwkweGJmY2ZlMDRmLCAweGU3M2I3MmE3LCAweDFlNWM2OTI3LCAweDk3OGQyMWZlLCAweGZiNjMxM2QzLCAweGY1MTBiZTJiLAorCTB4MWY5NzEzNTQsIDB4ZmNiOWNiNWIsIDB4NDFiN2FlOGYsIDB4ZWRhZGZiZjQsIDB4NjY4YTMxZGUsIDB4ZWY3NjBmN2YsCisJMHhmNzZlNTQ4NiwgMHg4ODVmYjkxYSwgMHgwYTk2MTNjNywgMHg4NzNiMDZmYSwgMHhhYmI2MTRmMCwgMHhkYTUwM2M3OCwKKwkweGNjZjQ1ZmExLCAweGYzNzJmMmEzLCAweGJmZThkOTdiLCAweGU2OWZlZGJmLCAweGI2ZjQ4N2RkLCAweGYyN2EzN2YyLAorCTB4ZjExNDljNTcsIDB4YmVjOTk1ODIsIDB4YmZkYzY0ZjQsIDB4YWJmNmM0MjcsIDB4NzVkNjI3M2MsIDB4MWY5MTk5YmEsCisJMHgxYjhjNTNmOCwgMHg4OTNkZWM4MiwgMHhhZjI4NDM3MSwgMHgzNGUwZjlkYSwgMHgyY2Q1YmZlNCwgMHhlNWUwZmU0MCwKKwkweDVjNTEzNzNiLCAweDYxNDA3OTcwLCAweDY5ZjcwNTJlLCAweDE2MjdlZTVlLCAweDQ3YmQ1OGY4LCAweGRmNGJmMWFmLAorCTB4OTMxOTM2YWUsIDB4NzdlOTg0YzcsIDB4NmUzNjliNDUsIDB4NThhYmIzNTgsIDB4ZjZmNmZlNTMsIDB4NDQwYjI1NjksCisJMHhmY2IwYTFjOCwgMHhhM2VmNDY5OSwgMHgxZWY0OTVmYiwgMHhkNDdlYTc2ZCwgMHhjM2Y4ZDJlYywgMHg0NjFjZWU5NywKKwkweDk3ZjU5N2ViLCAweDc3YWQzNzMxLCAweDY2ODE2YjU5LCAweGYzOTVhY2RlLCAweDQ5ZjliYzQ5LCAweGQ0YmI0NWJhLAorCTB4NDY5ZTczMWYsIDB4MDA4ZmZiY2QsIDB4ZmYwOGZlZmUsIDB4NDM1M2QyZmYsIDB4YTkyZDFlNjksIDB4YmE0MGZmYmUsCisJMHhjYWMzY2YwOSwgMHhkYWJmMWFmYywgMHhiMDI3YzcyNCwgMHg3ZWUxNjY1NiwgMHhmZjIzYTA0OSwgMHg1MDgxZWNlNSwKKwkweDZmZmZhNzJhLCAweDcxZDFmNzBmLCAweGZlZTMwNWY2LCAweGNhMGJlZWJmLCAweGNjMzk3MTI2LCAweDBjMzYxNGRhLAorCTB4NmFhN2UzMWUsIDB4YTBiZmI0ZWQsIDB4YTdjNTJiYmUsIDB4NjE2YmViOTUsIDB4YTQ1ZjJkNDcsIDB4ZDQ1MTc3YWQsCisJMHg1ZGVhMjhiYiwgMHg2OTEyYmZjOSwgMHgyODA1Mjk5ZiwgMHgwZDdmNzhkNywgMHhjZmYzOGY4MiwgMHhhMGJhMzUxYywKKwkweDZlMzRmOGRlLCAweDNkMzkxNmM3LCAweDZjZWY1MDk3LCAweDQzOGUyNGIzLCAweDRiMzZjYTdmLCAweDUyZjUwMDVlLAorCTB4MzhiYWZhZmYsIDB4NDgzMzZkMWQsIDB4MDMzYjhhM2YsIDB4NWZmZWQ2ZTEsIDB4ODhhOGI2NzcsIDB4MGZiMDdkYzcsCisJMHhmZTU4NzkwMCwgMHg4YTE2NDFlOCwgMHhhZTM3NTM5MCwgMHgwMWNiM2M1MywgMHhlZjIxNzZkZSwgMHg3ZDdjZGNlYSwKKwkweDcxYTBlZTc1LCAweDVkOTNmNDI4LCAweGQzOTVlN2M3LCAweDIzNTE1ZmIxLCAweDA4ZDRlNWRhLCAweDQxOWE1ZjdmLAorCTB4YzFjY2NmYjMsIDB4OGQyNTRlMzIsIDB4OWE5Y2UzY2IsIDB4ZWExNDMyYTAsIDB4YTNkYWVmNjUsIDB4ODc1ZmQ4YTgsCisJMHhiYjMzN2E0MiwgMHg0MTEzMDAwOSwgMHhkYzI1ZDk1NywgMHhhNGIxYjliZSwgMHgyNjM2NTk1ZCwgMHg1ZDU2ODcwYywKKwkweGUwMDcxOGY1LCAweGVhZGQzNWE3LCAweDhmNzM3ZDQ2LCAweDBkMjQzN2QzLCAweDE4MjI3OWU3LCAweGY4ZmNlZGM0LAorCTB4ZGEyYTNkMTMsIDB4N2E3NTNmZWYsIDB4NjE5Y2QyMGEsIDB4OGVmNGI4MzgsIDB4ZDZhN2Q0NmMsIDB4NmQ5ZTdjMTMsCisJMHhhZTYzZmJmZCwgMHg0ZGEyMjg2NywgMHhkY2RkYWJmZSwgMHgyM2IzZDE5ZSwgMHhhNDg3ZGI4YywgMHg4YzM3ZDJhZiwKKwkweGU3MjdiZDI0LCAweGY0MjI5ZTk3LCAweDNkZjMzYTQ1LCAweGFkZmFhMzY3LCAweDY4YzlmMDhjLCAweDg2MWJlOTNkLAorCTB4MmNmNmU2ZWYsIDB4ODE1NTc3YzcsIDB4YWZiZTBmNzcsIDB4YThhYWI4Y2EsIDB4NmMxN2RlMDUsIDB4YTE0YmFhMGIsCisJMHg2MmJiY2JkZCwgMHg4NWNiODNmYiwgMHg0Yzc1ODEzZSwgMHg3NWM5ZjVjMiwgMHhjODJlNDk1YywgMHg3ZTM4ODY3YSwKKwkweGQ2MGZjOTBhLCAweDFmZjdiMTE5LCAweDJmN2QyMjMwLCAweDIxNmQzNDdmLCAweGEzNmViN2NlLCAweDMwOTQ5OTkxLAorCTB4ZjRlYTdmZmMsIDB4NjRmOWM2Y2UsIDB4MDgyYmI0NzcsIDB4OTNkZmU5MWIsIDB4MWRmZjRhZTMsIDB4ZmNmZTQ3N2UsCisJMHg5NmY5MjhjOCwgMHhmZTVjNWZkMywgMHgyY2Y3YTc1ZiwgMHgxYjY3OTQ4ZiwgMHg2OTI3ODQ4ZCwgMHhjN2U3ODczZiwKKwkweDY5ZDVmZGVkLCAweGVhYmVjZjVjLCAweGY5YzEyZWY0LCAweDI3NmQ3NDM0LCAweDNkYWFjZjdmLCAweGY5NjMxYTFmLAorCTB4ZTJmOWEzYWIsIDB4NmE1NDcwNGEsIDB4NmVhMGJlZjgsIDB4ZWI4MDM5YmUsIDB4MjU1NDdmMmYsIDB4NjhkZGE4M2EsCisJMHhkZDU5MzhhNCwgMHg5ZmI4ZmIzMywgMHg0NmU2MWVlNywgMHhiMWQ3NTEzOSwgMHhlMzBlNTk0ZiwgMHg0ZmIzM2VkNiwKKwkweGQ3MDExMTU5LCAweDA1MDE3NTQxLCAweDJlYzIzM2U3LCAweGFmY2I5MGY5LCAweDNmNDdiYTY4LCAweDg3MmRkYTMyLAorCTB4OWM0ZTVjMmQsIDB4MTVmOWI3MmQsIDB4ODM1OWViODAsIDB4OWRlYjBlYWYsIDB4ZmRiYWIyY2QsIDB4YmMzYzYxZjksCisJMHgxMWZhNmZiOSwgMHgzZmIwMzdjYywgMHhiM2UyMGE2NywgMHhkMzNiYjc1NSwgMHg0NzVhZjUwYywgMHg1ZjQ4ZGQxOSwKKwkweDM2ZmE3NTNmLCAweDU0NTI1YzIzLCAweDRmYjYyNzZmLCAweGQ3YmJiMzRlLCAweDg5OTc1YjQzLCAweGZiYmNhMTE1LAorCTB4MWYxODcwYmEsIDB4ZWZlMzI3NDUsIDB4ODVkM2ZjZTEsIDB4OTFkYjg4NzIsIDB4ODEzZmM4NDUsIDB4YTdiNGJiMzQsCisJMHgzNjFkYWU0OCwgMHhjNzNjNzVmMCwgMHg5ZWZmN2NmOCwgMHhlODkwNzllYSwgMHg4ZDBhNDhmOCwgMHg1NDE3NWQ5YiwKKwkweDdmOWQ5ZmQwLCAweDZiOTIzOWU2LCAweDlkMzBmZmIyLCAweGU0ODkxZTc5LCAweGIzY2YyYmRmLCAweDU2ZjQ4OGMzLAorCTB4Zjk1MGU0MmIsIDB4OGY5NDdiYTMsIDB4NGJmZGU2MjMsIDB4NmU5MWY0MzAsIDB4YmEwMTlmYjIsIDB4ZmRmN2QxYjQsCisJMHgzZWE4ZDMzMywgMHhiZGYwYjkzMywgMHhlMTZhZWQ0MiwgMHg3OTA4OGFmYiwgMHg0MzExZDcyMywgMHhmNWMzZWNlZSwKKwkweDFjZjQ0ZWQ4LCAweGM4Mjc3MmU0LCAweGJlNjI4ZGZkLCAweDE1N2NmOGQxLCAweDlhN2MxZmU1LCAweGRlOTllYTA2LAorCTB4MzEyM2ZkMWIsIDB4NDg3ODdhMmUsIDB4ZTUyN2Y1MDIsIDB4YmVkZjM0NDAsIDB4ZTUxY2U4MmEsIDB4ZmU0NmNlYTUsCisJMHhlNTJiYjI1YSwgMHgyMmJkNjRmYywgMHgzNGZlYzU2NywgMHhjMTBmNDM4MiwgMHg0YTk3N2VhMSwgMHg3YTMyYTllYiwKKwkweGMxMTFkZTg3LCAweGZkMTZiZjBmLCAweDAzZjliODFkLCAweDA3ZmRjYTIzLCAweGEyNWRmZGZlLCAweDg1MzZmYWM3LAorCTB4ZWRhY2YxZTIsIDB4ZDQzY2UzNWQsIDB4ZjRhN2ZlNDcsIDB4ZTJjZTY3NjgsIDB4ZjFkYjAxMjYsIDB4YTc4NGJiYzIsCisJMHgyZTVjOWQ1OSwgMHg1M2VlNzdkNywgMHg3NGMyZDk5NywgMHhjMGU2N2Y5YSwgMHhmNTY3NDhhZCwgMHhmYjg2MjYxZCwKKwkweGRmYmZhMDIyLCAweGU5YTI3YzIwLCAweGNhNDdjMjU0LCAweGI0Zjg3OGRkLCAweDk0NzJlMGNlLCAweDQ3ZTQ4ZGY5LAorCTB4M2U1NGZkODUsIDB4ZGNhNDI5ZmEsIDB4NGVhYTdiZmUsIDB4ZmJmODA5ZjgsIDB4MWNiYzY5MGIsIDB4YTdkZjFmYTYsCisJMHhkY2IwOGYwOCwgMHhlNDVmMTBiNSwgMHg2MDNhMjk5ZiwgMHg1YmI4N2RjNiwgMHg1YTdmM2YyMSwgMHhlNDY3ODcyNSwKKwkweGM2YzdhYWJjLCAweDU0Y2U5Yjk3LCAweDUwZDQzN2ExLCAweDU4N2IxY2RlLCAweDdmY2JmN2JlLCAweDgxMGJmZWQxLAorCTB4ZTQxZjc4NmYsIDB4ZDQxMGQ5ZWYsIDB4ZDFmZTcyZjMsIDB4NzI3N2NiZjgsIDB4Y2U4MzFiN2QsIDB4MTFkNzFiZmUsCisJMHgzZGE0ZGZhZCwgMHhjOWU2ZTkyMCwgMHg4ZjQ2YWE1ZCwgMHhlYTQ2OWRkOCwgMHg3MzFiMGVjZiwgMHg3MjhlYzc5YywKKwkweDYxZDhjZjFlLCAweGM3NmNmYWUwLCAweGU1MDA3MzdhLCAweDc4MGI5YmM5LCAweGExN2Q5OTVlLCAweDQzY2Y4ODMxLAorCTB4Zjg3NWE1YmEsIDB4MWYzNjUwZmQsIDB4NWJhNzU1YmYsIDB4MGRkNmU1ODMsIDB4Nzg0MmQ2MzYsIDB4NGIzYTI0ZjUsCisJMHgxOTEyN2U5MSwgMHgxZTVjOGY5NywgMHg5NzNjZjAzZSwgMHg1YjdlNzU2NywgMHhlYjNmYzE4MCwgMHg1Mzk3NzM3YywKKwkweGUyY2QzOWRjLCAweGYzMzNiOGM2LCAweGIzY2UzNDFkLCAweGQ3MmJhNDBmLCAweDJlOGRmYjczLCAweDgzYWIzZjc4LAorCTB4MDNjNDlmZjMsIDB4MmZhMjUzYzgsIDB4YWUxMjBmYzksIDB4Yjg3Mjc4NjEsIDB4Zjg5MjdlNGIsIDB4NjdmNGJiZjgsCisJMHhhNzdjYmQwMywgMHhkYTNkYWFiYywgMHg0NmRiZGM3OCwgMHhiZTRlZDVkZiwgMHg3MDZjM2FjZiwgMHhjNzg2OWZhMSwKKwkweDZmZDFlMjE3LCAweGIzYjdiYWVkLCAweGI1MWQ4MjRmLCAweDdhMmRmMzNhLCAweGZkODViZTRhLCAweDI3YmY4NmFjLAorCTB4MzgxN2JjMDksIDB4NzRhZmJlYjksIDB4MmRhOWJhNzIsIDB4YWNiZTIwZTksIDB4ZmM0NGQ5M2QsIDB4ZTVjMTliNmMsCisJMHg1Njg0ZWQ5YSwgMHhjZmY2MzMxZSwgMHhhOGRiYmQ2MiwgMHg2M2I1OTU1ZCwgMHg1NDc3ZTYxYSwgMHg3MDM4YWUzZCwKKwkweDZlNGYxZmJmLCAweGZjZjBhZWRlLCAweGJkNzc0ZmI4LCAweDcyZjk4ODkxLCAweGYyYjAyYmVjLCAweGUxNjI5ZTMxLAorCTB4ZTRlYjlkZWIsIDB4NWVlY2UyNzIsIDB4N2JkMTM4MDAsIDB4ZjY3MmYxOTMsIDB4NjNmYTk1ZmIsIDB4YzIwYTYzYzEsCisJMHhmYWMwNTZiMywgMHgxMzk1MzNlYywgMHhlYzdlODRmZiwgMHg2MWVlNDliZCwgMHg5ZWNmZTRiMCwgMHgzZmVlZTliOSwKKwkweGVlY2ZiY2MxLCAweGY3NDZlMjk5LCAweDk3OGI1YTY1LCAweDY5Y2ZhN2U4LCAweDAzN2VlMzcxLCAweGY0MGNmN2M0LAorCTB4NzhlZmFlMTcsIDB4Njg1YWYxMjMsIDB4YWJlOWZhNzcsIDB4ZDc2ZTUwOGIsIDB4Nzk5ZTc5OGEsIDB4ZTEwZWJmNWUsCisJMHg3ZmM5ZTFiMiwgMHg2YmRmOGM5YiwgMHgwOWFhNGEwMywgMHhmOGZiZDljNywgMHhiZTYzNjc3ZiwgMHhmMjQ2OWVlYSwKKwkweGZkM2NiNTE3LCAweDE3ZjMxMWJhLCAweGZlNzY4MTc0LCAweDAzOTI2ZjdlLCAweGY5ZmU5ZGViLCAweGVmMDhjOWY2LAorCTB4ZmExNjhlOTYsIDB4ZWRlN2U2N2UsIDB4ZTRmMDNlNTQsIDB4NzdmNmJkYmYsIDB4MTM3OGUzZjQsIDB4Y2NlZjU4ZGQsCisJMHgyZjA5ZmJmMywgMHhmMjk1M2U3NSwgMHhmNWQxZTJkYiwgMHhiOWZiN2Q4ZSwgMHg4ZjNkNDRiYywgMHhjYjlmMzA3YywKKwkweDkyZDc0OTMxLCAweDc5M2Y0ZjdlLCAweGJkNDhjNGRiLCAweDBhYjdkZjIxLCAweDAyNmI0ZTdmLCAweDA5OWYyM2Q3LAorCTB4ZTBhZGFkZmUsIDB4OWVjZmNlZjEsIDB4ZmRhN2NjYjUsIDB4MWMzNDMxODEsIDB4NjM3NWM1ZjcsIDB4MmRkYzVkMzgsCisJMHg3MWQ3NTFlMCwgMHg0NmMxYTE4NywgMHhkZjlmYTllZCwgMHg3M2UzZGYwMiwgMHgyN2U3ZDAyYywgMHg2NDg1MjkyMywKKwkweGQ3Y2EyNWNmLCAweDBmYWE1N2Y5LCAweGJmYTAyNmY1LCAweDFmNDVlNmU3LCAweGViMWYzODJhLCAweDJkNDMyNjk4LAorCTB4ZmU2OWYzY2QsIDB4ZjkxZDU2MWQsIDB4NmM2ZDZjYmQsIDB4MzhiZmZiM2YsIDB4ZTAyZWMyNmQsIDB4NTlkZDkwN2MsCisJMHgzOTIyZTM5ZCwgMHg4YjBmNzI2MCwgMHg2YmIzODdiMCwgMHgyNzE4MmQ3YywgMHhjZmFkN2ViZSwgMHhiZTNjMDdhZCwKKwkweGI0ZThlYTdjLCAweDcyN2U1MDQxLCAweGY4NGM1MmE0LCAweGNmNWMyYmQ3LCAweDRlMzQ2ZGY5LCAweDgxYzFmYTNkLAorCTB4M2UwYjc2OGYsIDB4ZjUzMDc3NDksIDB4ZGMwMzkyMWEsIDB4MzJhNTUwMWYsIDB4YWE3ZTQ2ZDUsIDB4ZjUxMzkyM2UsCisJMHhlZTBmNDJhZCwgMHg3MzZlN2UxMSwgMHg3NjRkZGU1ZiwgMHgyNmJiNjc2YSwgMHhlZDA2MWY2MiwgMHhmNzJhMzY2YywKKwkweGYzMTBmZGU1LCAweGU3Zjg2NzRhLCAweDE5NzFkZTkzLCAweGE0NjdiZTY5LCAweGYyN2U2MDNjLCAweDhiN2U0YTdiLAorCTB4YmNhMTFiZjYsIDB4NTdkMWZjYzEsIDB4Mjg1ZGU1OWQsIDB4M2QzM2U1MWYsIDB4ZWZlNGJmOGUsIDB4NzRiOGZiZTIsCisJMHgxNWNhMTc0ZiwgMHhhMzU1MzdiNiwgMHg5NWM5ZTIwZiwgMHhlNzlmMzcwMywgMHgwZjk1ZmI3YSwgMHg5MDFiMGU4OSwKKwkweGRmN2M3MTBlLCAweDVlZGU4ZDQ5LCAweGU4MTVjMjRlLCAweDg5MGZhNWYwLCAweDcxNzc5NzBlLCAweDU1ZDBkYWY5LAorCTB4ZDRmZGM0NmUsIDB4NjlkN2UxMGUsIDB4NzQ4NGY0MTAsIDB4YmZlOGZiODQsIDB4OWM2OTkzM2EsIDB4ZTFhMWM5ODYsCisJMHgwYmNlYTcyOCwgMHgxMmZmM2JiYSwgMHgzYTQzYjdhNywgMHgwZTAxZjkxZCwgMHhkZWRkMWVlZCwgMHg4ZmQ0MGNhMiwKKwkweGYwOTc4ZDRhLCAweGU2ZjgwMGRkLCAweGEzZGFmMzc2LCAweGQ3ZDU2NzY4LCAweDZiZjIzNzMwLCAweDA3ZTBhNzQzLAorCTB4YmUxMTdiYjAsIDB4Y2JkNTVkMGQsIDB4Njk0MWJmYjEsIDB4MGRkZmM5MzMsIDB4NDFiNGM5NzYsIDB4NjNhODZlNTAsCisJMHhkOTZmYzhhNSwgMHg0MjVlMmFiYiwgMHg3YzVkNjBiYSwgMHgwMzVkOWUzZiwgMHg0ZGQyMmNmNiwgMHg5ZjViYmQ1YSwKKwkweGRiOGY3YThmLCAweDJjOGZkN2JkLCAweDcyM2JmNmEzLCAweGYyZTcxNDVkLCAweGYzOGEzMTU3LCAweDE5ZmI0MGVmLAorCTB4NjhkNjVkZjUsIDB4MzZmYjNmNmUsIDB4NWNjNWRkOTIsIDB4NjUzN2U0MDksIDB4ZDYwZDc1M2UsIDB4NjIyZmYwNmYsCisJMHhjZDExZDc5NCwgMHhiNDI5MmZjNywgMHg1ODA4NjgwZiwgMHg1NjY4MWYyOSwgMHgxYTdmYjcxNywgMHg5ZjFmMzhiYSwKKwkweDRmOTFmMDkzLCAweGU0YWRjZjQzLCAweGM0YzE3ZjhmLCAweGQwZmUxMWZjLCAweGNlOWE1ZjM3LCAweDI2OGJlY2Y1LAorCTB4MzU5ZmIzZDIsIDB4YjBjN2Q4N2IsIDB4YmM4NWI3YTAsIDB4NmRhYzcwOTcsIDB4ZGQyMWQ3Y2IsIDB4MDk5Mzc2MzIsCisJMHhjYzRjYjFlNywgMHhmNWMwY2RhMywgMHgwM2QwYjI0NiwgMHgzY2Y4ZGIwNSwgMHg3N2UxNzRkNCwgMHhhNzg5ZDc0YywKKwkweGUyZTc5YjUxLCAweGUxN2Y5M2YwLCAweGM4OGYxODljLCAweDM5ZTg1ZDIyLCAweDc5N2ViYTE4LCAweGVlYTRmODkwLAorCTB4OWE1ZmRlMTksIDB4Njc3ODUzYzksIDB4ZmI0YWJkMDQsIDB4MGIxZTlhMjgsIDB4YmJkOWI4YzQsIDB4NGMyODJhMGUsCisJMHhkMWNkNzdiMiwgMHgzNWY1ZjlmMCwgMHhlYjA4ZDgyYywgMHgyZTk3N2ViYywgMHhkOTFjNjUzOCwgMHg5ZTQ5MGI0ZCwKKwkweDU4YjIzN2FmLCAweGQyMjMyYWY5LCAweDk1NTZmZGI5LCAweGJmNDQyZGVhLCAweDM2Y2RkNTc2LCAweGI5M2ZhNDc3LAorCTB4YjNhM2MxMmEsIDB4MjQ1NzFkYTAsIDB4MTJkZWQ4ZmQsIDB4NGE5ZDFiOGMsIDB4NmYxMWJiYjcsIDB4ZDI1ZGQyZTMsCisJMHg1YmQ4ZDMwZSwgMHhkY2RmZjcwMywgMHhjZGExYmMwZSwgMHgxZmY3MGUzZiwgMHhmMzA5ZjU4MSwgMHhkYTA5YWUyOSwKKwkweDBlZGNmYzhkLCAweGY3ZmI4ZjY4LCAweDljZmVkN2RkLCAweGI4NWJkZmVmLCAweDA3MDQwMmZmLCAweDZmNTQ5OWM5LAorCTB4OWQ4ZmZhMDksIDB4NWNiNWRlMDUsIDB4YjFkZGQ5M2YsIDB4OTNhYWYzZDYsIDB4Y2RjMGU3YWYsIDB4M2VlMjE2YjcsCisJMHg4ZGFlNjFiMSwgMHg1NzgxZTFmOCwgMHhkZTljYTU5NCwgMHhiZWUyMTE0MCwgMHg4M2Y5YzdkYSwgMHhlMTNjN2YwMSwKKwkweDNiMjQ3YTIyLCAweDFiYzlhMWFhLCAweDljOGY0ZDg4LCAweGFlYzAxYTVmLCAweGU4MWIzYjQyLCAweDkzYjcwZDcxLAorCTB4MTNmMzhjNmQsIDB4YmZiOTRiYTcsIDB4NjkxNWI5NDcsIDB4OGQzZTRhY2YsIDB4YmY0OTdiZTYsIDB4MzVmZjdjZmQsCisJMHg4MWJjZmRmOSwgMHg4MDc5ZTNmMywgMHgzZjdiZDIwMywgMHhlOWNjYmY5ZCwgMHhlMDdhZWI3YywgMHgxNWJlZjg0NywKKwkweDQyMjViMWY4LCAweDdmZWY0N2ZlLCAweDFmYjg5ZTcwLCAweDFlZjZmMjkwLCAweDNhNTE3N2E3LCAweDZmZGRhMWNhLAorCTB4YWI1MGM2NmQsIDB4MmYwZDhmOTQsIDB4Mzk3ZTE5NmYsIDB4OTU4Y2NiYmIsIDB4ZjAzMzVmYTEsIDB4NjBmZDI0NmIsCisJMHg0NDVlZDY4YywgMHgwOWVhM2Y0ZiwgMHhmZWQ4YmFlYiwgMHg2ZGQyYmI4ZiwgMHgzZjNmY2RkZiwgMHhhZWU1MmYzMCwKKwkweDc5ODFkMmY0LCAweDczYThlOTI5LCAweGFkYmI2ZjEwLCAweGE1OGZiNDAxLCAweDNlN2EyOTFmLCAweDQ5OWYwNDRiLAorCTB4MDNmZGNhN2MsIDB4ZmViMDIxYzYsIDB4MzdlZjgyZmQsIDB4ODg4ZjdhODksIDB4ODRiZWM0NjcsIDB4ZjNhNWMxZjgsCisJMHhmNjc5NDg3ZCwgMHg2YzkxZjQ3MSwgMHhiNWY5N2RmNywgMHgyZjUyMzhlNCwgMHg4YzhkZDM0NiwgMHhhYTdhZTBhMywKKwkweGQ3YWZjNGM3LCAweGNmZWM1ZmI2LCAweDI5ZjhlOGEyLCAweDgwMGI1ZmMxLCAweDZkZGU3MDM3LCAweGM0MTdlMDg2LAorCTB4MTlkODc3OGYsIDB4OTlmODEzZTUsIDB4NzFlMzE1MjcsIDB4N2NlMDhkYWYsIDB4Mzg2ZmIyMzQsIDB4ZmE2NmI3YjYsCisJMHg5MmJhNDRiZSwgMHg4ZjdjNWQ3ZSwgMHgxMTVhYWE3MSwgMHg2YmRkYWNiZiwgMHg3ZjllNDQwOCwgMHhkMTgzMzdiOSwKKwkweGIzNzZiZDM4LCAweDkxZmMwZjVmLCAweDg3ZGJlOTliLCAweGNjMTVmZGVkLCAweGYzM2Q0NDFkLCAweDJiOGExNjhmLAorCTB4OGE1YjgxODEsIDB4ODU5MWE2ZjIsIDB4ZWZjZTExMTIsIDB4MjA1ZWZiMjUsIDB4MGNmN2Q1ZmEsIDB4MzllM2JmNDcsCisJMHhkZjBlMzQyNSwgMHhkYWZlMTA5ZiwgMHhmYjVmYzIxMywgMHhjZjdiZDc3ZSwgMHgxN2FkMDJiZSwgMHhmMTZlNzJiZiwKKwkweDVlY2U5MThmLCAweDdkMjFlNGI0LCAweGU3ZjRiMDljLCAweGRkYTEyNWJmLCAweDkyYjk4MTdkLCAweDY5MGU3NzJlLAorCTB4NTVlZjU5OTEsIDB4Mjc2N2ZjMjMsIDB4N2ZmZGIxZWMsIDB4MzczYzBiNmYsIDB4NTMyYjc4OGEsIDB4YjdjM2VkMTksCisJMHgxOWY5NzA2NywgMHhlM2M0YmYzZSwgMHhiNGViZWZhZCwgMHgxY2Y5MzdmZSwgMHhkZmUxYzE5MywgMHg1MDFjZTcxOSwKKwkweGQ3ZGYwNjYxLCAweGZjZTEwZTc0LCAweDUwYWVkN2Q4LCAweGRkNjZhZmJjLCAweDQxZWIzZmZhLCAweGI1YWNkNDJlLAorCTB4OWYwOWU5MDcsIDB4NzFhYjhlZDEsIDB4MjgzYTgzZjgsIDB4Yjk3MDMwOWYsIDB4Y2Q3MzdmMDQsIDB4MDdmZDYxNjUsCisJMHhjODQ5ZDRmNSwgMHhjNTA3N2UzMywgMHhmZDBhOTZiZiwgMHhjZGU5YWNiNSwgMHhhMTVmYTFiZiwgMHg0OWU2NjU0NiwKKwkweGYyYzcxODQ1LCAweDlmMDQxZTFlLCAweDRmMmRiNTNlLCAweGYyYmZmMTQ0LCAweGEzYTY3NzQ3LCAweGQ0NThjYTdlLAorCTB4YTZjMWYyMjYsIDB4NTVmZWQwM2EsIDB4MmZlODM3M2MsIDB4NmY2NzJmNTksIDB4MTMyNzY0YTksIDB4MWVkZTAwMWQsCisJMHgyMmY2ZjBjYywgMHhlMjRhMmYxZiwgMHg3NzQ1YzE3ZSwgMHgwOGZlMDM1YSwgMHhmMDU3Yjg3OSwgMHg3Y2ZkMzQ2MSwKKwkweGNkYmNlNzEwLCAweDAxMTUxOTk3LCAweGFhNjE2ZmVjLCAweGVmZDQ2ZmY3LCAweDcyMzRlNzlkLCAweGZhMTJiY2VkLAorCTB4NWY0ODIzYzUsIDB4NGZkZGQ4NzcsIDB4MjJmMmVlZjAsIDB4MDVkMjYzZjMsIDB4MGUzMTZiZmMsIDB4YjdiMWEyMDQsCisJMHhiYWY4NjdiMCwgMHhiZWUzYTQ3YywgMHg1ZmExZGZiYywgMHhmMGU0ZGJhYiwgMHg5MWJiZjBiYiwgMHhmMTc2Y2JiZSwKKwkweGUzZjE0MWUyLCAweGQyMjMyZTQwLCAweDg1NDVjMzQ3LCAweGY3Njk2MWU4LCAweGFlNTFjNzliLCAweGEyMjFhODM3LAorCTB4MWI2NmE1OTMsIDB4YTJlMWIxZTEsIDB4ZDVhOWU5Y2EsIDB4ZGIyNDM2NzAsIDB4YTRkN2VlMDMsIDB4NjAzMmQyN2EsCisJMHgyNzdiZmU5ZSwgMHgwOTNjNTMyNSwgMHgxN2MzODlmOCwgMHhlMzljNDUyYSwgMHgzN2MzMzJmOCwgMHhmN2UwMDMyOCwKKwkweDM2ZjEzNTkwLCAweDMwNWQ3ZmRjLCAweDhmMzA5MmJiLCAweGY0MDhkMWFkLCAweGU3NzUzNTcwLCAweDQzZDg0NzM1LAorCTB4YTVhZWM3MmMsIDB4ZmViN2VlODMsIDB4NmU1YWYzODYsIDB4YWY1MTE5ZjYsIDB4ZDEzNGYwYWYsIDB4NDk0NWIxNzksCisJMHg5OGM3NTJjMSwgMHhkMjRmYmM0OCwgMHhmNWZkMWE1ZiwgMHhjODQ5N2VmMSwgMHgzYzhkZjc5NywgMHg5ZDIwNjQ2ZiwKKwkweGNmNmMzYzczLCAweDM5YjJmNTEwLCAweGM3OWZiY2JmLCAweGU3YzM5ZTZhLCAweGJiNDI3ODI4LCAweDcyODg4N2Y3LAorCTB4MTcwZjI4OTEsIDB4Nzk3OWQyZjUsIDB4Zjc5N2UwOWEsIDB4ZDE3YWYxYzcsIDB4ZTMxNTJjZTMsIDB4OTllMTk5N2MsCisJMHg3NjgyNzA4YywgMHhjN2QyMjM0MSwgMHg2NzNhMTY2YiwgMHhmZTQwNGFjNCwgMHg5MzViYmNhMSwgMHhjODJjNzY0YiwKKwkweDc3MDg2OWI5LCAweDRjOTgyNzE4LCAweDY3YTQ0Y2Y1LCAweDQxYzgxMzU4LCAweGE5NmY2N2MwLCAweGI1YjNlMDhiLAorCTB4ZTMwNWU4MWMsIDB4Mjg5YWFmNDEsIDB4MmJmMTI0MWUsIDB4Y2Y4ZDFhZjEsIDB4NzdjYTE5ODUsIDB4MTgxZjRmY2IsCisJMHg1MTk4NWViZiwgMHhjZDdlMzAzYSwgMHgxN2MyNTBkOCwgMHhmMzhjNGJkMSwgMHhmNWYwZjExZiwgMHgwM2M3M2I2YiwKKwkweDBjZjJlYmYwLCAweGIxYzE4M2QyLCAweDQ5YjM3YzkxLCAweGI1Y2E1MWMwLCAweDc4YjQxM2Y3LCAweGUzOWQzY2ZkLAorCTB4YmJkNDVlYTEsIDB4ZGExZjc2ODQsIDB4ZTIzZWVlZDEsIDB4Nzg1M2Y3YmYsIDB4YWUwMmI0ZmQsIDB4ZmU1ZGE0OTcsCisJMHg1ZjJlMDI0ZiwgMHg1MjlmNmJhNiwgMHhkMWZiNDRjZiwgMHhlMmYyMTRiZiwgMHg0N2VlNzRjYiwgMHg4ZGRlYmMwNywKKwkweDA5ZmE5NWYzLCAweDE5MzA0Y2U0LCAweGViZDE3OGY4LCAweDZjMzM5MjI2LCAweGQ1ZTUxZjYzLCAweDgzZmZiZDQwLAorCTB4ZWE2NDVhZjAsIDB4ZjQxNTM1YmIsIDB4ZGVjMTBmY2EsIDB4YmI1MTE2MzEsIDB4MDY0NzI4NGIsIDB4NDhjN2VmZWMsCisJMHhkNDMzYjBiYSwgMHgwZTE5YWRkYiwgMHhmNDk0MWY2ZSwgMHg0OGQ3YjhmMSwgMHgwY2E1YWViZSwgMHg2NTcyODdlNCwKKwkweDIxMGM2M2ZjLCAweDZiZjBlNDBiLCAweGMxNDJiZjIyLCAweDYyMTRhZWJjLCAweDA3ZjYxNzY3LCAweDhjOTdmZjcwLAorCTB4YTNkYzMwZDIsIDB4ZTgyMTNiYzcsIDB4NDUwY2QxZTAsIDB4YjIxNWJjMjUsIDB4YWRkYmM0NDIsIDB4NWY2ZTdlZWYsCisJMHgxMzllNWQwYywgMHg0ZDkzNjVlNywgMHhlN2VjNzZiZSwgMHg5MTZmZGRlYywgMHgxOGMyN2U5ZCwgMHg4YjY2ZGUxYywKKwkweDdjMThkZGYxLCAweGZjMjUyMWVjLCAweGY0YTdiNmZkLCAweDk4ZDVlMzdlLCAweGMxZjY3ZTdmLCAweDRiZGQ2MTliLAorCTB4MWM2ZWY0N2IsIDB4NWYzZGU5NzIsIDB4ZWQxZTMzYmMsIDB4YzUwMzFlZWMsIDB4NmZkZjQwNmIsIDB4NGRkZTcxNTMsCisJMHhhMTNjYWVkYywgMHg2N2MxZDJkMywgMHgzZGY3Njk3NywgMHg5MDdhMGJhZiwgMHhkY2E1NzJlNywgMHgxNTdjZmE5MSwKKwkweDkzNzk3MzczLCAweGNiMWJiODkwLCAweDNiNzFkZDFmLCAweGNlNWRjYjlkLCAweDAwM2Q4N2JjLCAweDY2NmJkM2Y3LAorCTB4M2I3YzVkOTIsIDB4Y2Y1ZTUxZjMsIDB4MzllZDU2YjIsIDB4ZGE2ZDE1ZGIsIDB4MDczYmVkZjIsIDB4MzkyNWMzOWMsCisJMHhmZDEwMmFiYywgMHgyYmE1Zjg1ZSwgMHhmM2ZiZWI2MywgMHgzMzNmMmU4MiwgMHg3YWZkZjg4YSwgMHhmZGY4Y2M1MywKKwkweDA5ZmM4NWVmLCAweGI0ZmJkOWM3LCAweDJmNTdmYmYxLCAweDhjNmZiZjFmLCAweGVkODdkZjhhLCAweDNkZjhlODg4LAorCTB4NjExM2Y3ZWYsIDB4OTFiZjYwNmYsIDB4MmFjZmZjNzEsIDB4YTNlM2FmNjIsIDB4NThiNzY5MGMsIDB4OWYxOWY5MzUsCisJMHgxMjViYjAwYywgMHg0NWUzN2JlOSwgMHhkOGY5OWM0YiwgMHgyYjY3ZmRlOCwgMHhkN2QzOGY2MywgMHg1ZjM2OGUzZiwKKwkweGU3OWVkYzIwLCAweGI1ZmRjODA5LCAweDhiYzY5M2E0LCAweDY1NjdhNDU5LCAweGUxYzdkYTU5LCAweDNkZjQzOTc2LAorCTB4ZjRiYWJjZmEsIDB4ZjhiZTRiNmYsIDB4MmNlNjYxNTgsIDB4MTc2ZDQ3ZjIsIDB4ZjI5YmJjNzYsIDB4YmI0NjNmMzMsCisJMHhiYTcyZjkwOCwgMHg0YzEwYjVlYiwgMHgyNzhmZDk3MSwgMHg4NDg3NTcwZSwgMHgxZDdhMjZmOSwgMHg0MjY3NWY0MCwKKwkweDk4ZDhmMjExLCAweGZkMjM0ZjY5LCAweDNhNmU2NmViLCAweGZlZTgyNzk3LCAweGU4YWJiYmQ2LCAweGJkZmZjZjdjLAorCTB4MzIyMzMyYTcsIDB4NTNmNzJhNmUsIDB4OGY2OTQ2MGQsIDB4OTZmYTM0ZDksIDB4NjVlM2U5NDUsIDB4MWQ5MTZmNWQsCisJMHg3MGQ3ZjYwNiwgMHg3YTdmM2UxNCwgMHhjM2QyNmVmNSwgMHgxZDM3OTkyYiwgMHhkNWY3YmRlOSwgMHhlNTZlNzQxMSwKKwkweDM5NjFlYWRiLCAweDRiZmM5YjlmLCAweDM1YmYzYzBjLCAweDM5ODdlYzhkLCAweDc1MzczZTYyLCAweDY3NTAzYjczLAorCTB4MWM2ODE4ZjYsIDB4ZDIzOTczMGYsIDB4ZTdjZDhiNjksIDB4ODU1NDQyMGIsIDB4ZjNmZDc1ZjIsIDB4NjMxZGU3NDcsCisJMHgxNWZjYzQ5MywgMHhiZGYwMGY2YywgMHg1MmQ5M2M0ZSwgMHhkYmNlMjY1ZiwgMHgzMWVhZTM4NCwgMHg4OTkwMjYwZCwKKwkweDZlODk5NmNmLCAweDI4YTczZTE3LCAweDgzY2Y5NTVlLCAweDZiMWE3OWUzLCAweDNhZmFjMWNhLCAweGQ3Y2Y0ODczLAorCTB4Yzc0ODMzMDksIDB4YTJmMGZkZjYsIDB4Mzc5NDVkYjIsIDB4ZWI3MGJkY2UsIDB4YjM2ZjdjMGEsIDB4OGEzMTNjOTMsCisJMHgwNGNmNGM3OSwgMHg2ZGZjODhiOSwgMHhiNzVjNjY2NiwgMHg0ZDNjMTZjOSwgMHhmNGYxMzNmMSwgMHg4Zjg4Yjg1NywKKwkweGY5MTg0M2ZkLCAweDA3NTgxMjQxLCAweGQ5YjUzZjlkLCAweGIxNzFmOWNlLCAweGIwNTBlNjBlLCAweDA4NWM3MTZjLAorCTB4OWNlMjdlZTIsIDB4ZjNjN2U2YzMsIDB4NjcyZjIwYzQsIDB4NWYzZmEyNjUsIDB4YzQ0YWQ1ZjksIDB4ZWU2N2M4MGIsCisJMHg1ZGY3OGExNywgMHgxMWYzZjIwZCwgMHg4OGE1ZGU0MiwgMHg3OTA4YjVmOSwgMHg4YWRjYzU5NywgMHhlNDgwYzdiOCwKKwkweDk1ZjZmZGRkLCAweDI2N2VlMDM3LCAweGEzZjc3OThkLCAweDcxMzg3YmJjLCAweDMyZmRjNTA2LCAweDkzZTY4Zjk4LAorCTB4YzhkNTQzM2EsIDB4NWI1N2E3MmQsIDB4NDZhZjk4Y2UsIDB4ZTcwNTNiY2IsIDB4YmVkM2U1OTcsIDB4OTQxM2IzMzcsCisJMHhiZDA0YTQ5NywgMHg2OTUyOTc5OSwgMHhmZDEyMzYxZiwgMHgzNzIxMDYzMSwgMHgzZTc4NTk4ZSwgMHhjZjMxNjZjMiwKKwkweDg4NTMzMzNiLCAweDc4NTk4ZTZlLCAweGI2YjdjMjVlLCAweDdkZGFkYzViLCAweDNmMGE0MzdkLCAweGRkM2U3ZmJmLAorCTB4YzBmMWM2NmMsIDB4ZTExM2I5OGUsIDB4MDdjYzc2MDcsIDB4ZGZjZTE2N2UsIDB4NDFkMjljMmMsIDB4NmY5YjAyNzksCisJMHhlMDFiZGM1NCwgMHg2YmJiNjZmZCwgMHhlYmE0MGFiZCwgMHg3ZjcwYTk5ZiwgMHhjNzI4ZWE4ZiwgMHgzY2Y2OWM3YywKKwkweDQ0ZjMxYjg3LCAweGY3YmU0NTFiLCAweGY2YTM4YjY2LCAweDlhNjNmMjE5LCAweGI3ZDYzZDc4LCAweGVkOTZlMzE5LAorCTB4YWMwZTFkNWIsIDB4MzdkOTU2OTcsIDB4YWFmYjg4Y2QsIDB4OWJiMWNjMTUsIDB4YWZmN2EwYzUsIDB4YmU2MDhmODAsCisJMHhlMDMyYzczZiwgMHg2M2Y0MTE0OSwgMHg4NWJhZTIzZCwgMHhlZmJlMjBkNiwgMHhmMDE3N2ZjMSwgMHhkYzMyOTRmMiwKKwkweDgyYmZmMmJmLCAweDc3M2E0MmVlLCAweGQyN2EzY2M5LCAweDg1ZGQ4ZDk3LCAweGJjNjBkODZmLCAweGU0ODViOTgyLAorCTB4ZjI1NmY3YWYsIDB4NzIxMzJmYjgsIDB4NTcxY2JjNjAsIDB4NjFiNWQ5ZjAsIDB4ODVlZmE3YmEsIDB4NWJiNDNjYTIsCisJMHg0Y2QzN2ZmOCwgMHg4MGViYWUzYywgMHg5MWM0Y2EyMSwgMHhjNjlmYWM0MywgMHhlNGNkYzFmOSwgMHg2YmQzZTcxZiwKKwkweGZiMGZmODU4LCAweDRmZjcwY2FiLCAweGY4NmE2OTcyLCAweDYwZWY5ODczLCAweGJiYjMyMmE4LCAweDhkZWEwZWE1LAorCTB4OTFmYjgzNTcsIDB4Y2YxNWFmYWYsIDB4NTQzY2YxNDIsIDB4ZTVlOTIzN2UsIDB4NjVjZDlkMWUsIDB4MzczZTcxZDQsCisJMHhjM2FiYTAxNywgMHg5NGI4NDdhYiwgMHg2MGI0YjYzOSwgMHg0MTI5ZDczZiwgMHhkOGNkZTY3YSwgMHg5ZmQzODJkZSwKKwkweGM5NGNmYzIzLCAweDllMDBjNjk5LCAweDAwOTk2YjM3LCAweGM4YmYyNjc4LCAweGZmYTMwZjlmLCAweGFjMmZmZjVhLAorCTB4Y2M3NGYxMTgsIDB4Mjc5ZWY1MjAsIDB4YjlmZmU3ODksIDB4MGVkNTNkNjgsIDB4Y2U5NzU5M2UsIDB4YzIyZTdiMzMsCisJMHhjZjNmMjhmOSwgMHg4Yjc0ZDBjNiwgMHhhOTk3ZmVmOCwgMHhkNzk3NDk1NSwgMHgzMDBmM2NiYiwgMHhlNWNmNGIyNSwKKwkweDg3MWUwY2UzLCAweGE2NmY5YzZkLCAweDcxNDZlNWJjLCAweDdkNTMwMzBmLCAweGYwOGMzZmY5LCAweGM1YjhjOGFmLAorCTB4N2YzNjA2YmIsIDB4NDZmZDhjNWYsIDB4MDdiNzE2NGEsIDB4ZmRjMGRjZTYsIDB4MWYyMjhkYzIsIDB4Y2M0ZjdlNDcsCisJMHhiZmIyN2VlMiwgMHgzNzdiNGU2NCwgMHgxZTNkZWM5MywgMHg5NDlkZmQ2ZiwgMHg0OGQ5MjM1ZiwgMHhmMjExNWY5NCwKKwkweDVmMjQ4ZmU1LCAweDI3OGVkZmNhLCAweDg1ZGZiNDdmLCAweDI5ZTc5OWZjLCAweDQwYmVkMDM2LCAweGVmMjkyMWM4LAorCTB4NjhlZjIyYmQsIDB4MTAxOGYzMDEsIDB4MWVlMjNkNGYsIDB4YWJlNWEzOTUsIDB4Y2NkZDBlNDgsIDB4ZjdmZWY0N2MsCisJMHgwMGZmM2MxNSwgMHhmZDgwZDMwOCwgMHg2YjQzMzRkZCwgMHg2YWYzY2QzZiwgMHg4ZmNmMzdjYiwgMHgzZTM4YWZiNiwKKwkweDdjMGJiOGU0LCAweGE0NzNlZmRhLCAweDZiNDMzYzlkLCAweDg3ZmEyZjI3LCAweGNmNDk5MmFmLCAweGZlYTJmYzY3LAorCTB4M2U3MGUwZDIsIDB4M2U1NDYzNTEsIDB4MjdjODgzNTEsIDB4M2MyYWVjNmEsIDB4NGY5MTE2OTQsIDB4ZjNjZGQ4ZDQsCisJMHhhZWJhMWE4OSwgMHhlZGM0NGY5NCwgMHhiMDI5YWYyOSwgMHhkZTI0ZTMxZiwgMHhlYzk0ZDI1YSwgMHg3MjdmOTEwZCwKKwkweDhhNGZmMzEwLCAweGFmNmU3NGMyLCAweDBjM2NmM2IwLCAweGEyYmNhMWU2LCAweGNlOTU4NzFjLCAweDhhZWFiNDVkLAorCTB4OWFkYjhmYzgsIDB4ZGRmOGQ3NjgsIDB4NTU3N2FlYjcsIDB4YmZlOTNkNjEsIDB4NDg0M2Y5OTUsIDB4YzNmNmIxMzcsCisJMHg1ZjdjNTlkOSwgMHg3ZWUxNDNiMywgMHgzMzAyZmY3NCwgMHgwNTlkM2JlZCwgMHhjMTVjNGQ1ZSwgMHhkMWM3NjdhOSwKKwkweGE2NmVmOGFmLCAweDNmMjdkNjRiLCAweDJmODMwZWM5LCAweDAxOWUxOGFiLCAweDg5NzlkMTg1LCAweGI2N2FmNmZlLAorCTB4NTE5MGZjOTEsIDB4ZWE5OWNhNzIsIDB4MzM4MDM4YTYsIDB4ZjVmOTJjNjksIDB4OTIxNzc1ZTcsIDB4MmNkOTkyM2YsCisJMHhiODRhNjFlZSwgMHhkYjczNzlmZiwgMHg2OWViY2M1NSwgMHg5NzU3NmVlYywgMHgzNzc0YzJkYiwgMHg0M2VjNGIzNiwKKwkweGY0OGFjY2FjLCAweDdiZDdlZmRhLCAweGJkN2U0NGNlLCAweDMwYjc5MzY0LCAweDE5ZDdkYTBiLCAweDhiYmZlNDgzLAorCTB4MWY3YTU3YTAsIDB4MmVkZTVmNGYsIDB4ZTE1MGM1ZTgsIDB4ZTYwMmIwNWQsIDB4ZDE4ZWZiZDcsIDB4MGE2YmZiOGQsCisJMHhjZmZmNDFjYywgMHg3ZTRjOTRiZiwgMHgyMzBlNzU0OSwgMHg5Y2IxYjUzZCwgMHhmNDVlOTNjYiwgMHgzZTNhYzE5MywKKwkweGZhZjdlNjRkLCAweGE0NjZhYzZjLCAweDRjYTdjZjVmLCAweGM1NWUzYTIzLCAweGU4M2Q4NzAyLCAweDc0MDVkYjQ3LAorCTB4ZDJjZjc5MTgsIDB4OGViOTZkMWUsIDB4YTlmZTkwNzUsIDB4M2QwMDY2N2IsIDB4ZjI5NDdjOTMsIDB4ZjRiOTllYjgsCisJMHg3NDFiOGMwNiwgMHhhMWIzZGI2YSwgMHgyODVjMzk1YSwgMHhiY2YxNDdmNCwgMHhmZjk4MmRhOSwgMHhmMmUzYWM1MCwKKwkweDBmNzcyZDkxLCAweGY1ZmI0MzlhLCAweDJjNGY4ZTQ1LCAweGExN2Y3MjI4LCAweGViYWVjZTVjLCAweDczZDI5ZmI1LAorCTB4YTE3YWU3ZmUsIDB4YWQxZmY0NTQsIDB4M2Q4NTRhYmYsIDB4MTdlNDE5MzcsIDB4N2RhNTZmZWUsIDB4N2NhOWY1MDYsCisJMHhjZmFkZDc1MCwgMHg1OWU3ODVkNCwgMHhiYjQ5ZGEyMiwgMHg4OTBiZWE1MCwgMHg4YzA5ZjJhZiwgMHhiYmI1NzllMSwKKwkweDFhN2M4NGIyLCAweGJlMjA4NmMyLCAweDEzZTI3ZmExLCAweDI5NTgzNzA1LCAweGY3MWZiZmQ0LCAweGYxOGFkNzg1LAorCTB4YThmYzFlODAsIDB4NzMzYWZkYmYsIDB4YjM2YmU5MDAsIDB4ZDJmYTQ0ZDIsIDB4M2MzZmY2OGMsIDB4ZDIzZTJhYjcsCisJMHhlMzVlZmYwYiwgMHg0YzdkMjNkNywgMHhkZDM3NGQ2NCwgMHg5OTI2ZjUwMCwgMHhiNzI4YWM3YiwgMHgzMWZlNGU4MCwKKwkweDU4NWE3ZTkyLCAweGEyOWY2ZjMwLCAweDdlZmEyM2ExLCAweDk4ZWRmOTM2LCAweDVhZjUyNDc0LCAweDllZGNmN2YwLAorCTB4NzRiY2M1OTksIDB4MGZlNzkzY2YsIDB4YTgzYWVlZGMsIDB4ZDgyNjdkZjAsIDB4ZWVkMTA3OWYsIDB4OTMzNzViN2EsCisJMHgyYzI2NjRlOCwgMHgzOTU1ZWIwMywgMHg5ZTlmZjhiNCwgMHhkZjQ3MmRhOSwgMHg1YWQwYzUwZiwgMHg0ODc0NDMyOCwKKwkweDljNTQwNjc4LCAweDUxYmRmNDRmLCAweDk4ZjcyOTFlLCAweGIzZTVlZTU2LCAweGY4ZGU3OGFmLCAweDQyM2ZjMzk2LAorCTB4MWQ3NTgzZmYsIDB4MGVmNjg5MWIsIDB4OGZjNGFhNTgsIDB4MjdiMGY0ZDEsIDB4Yjc4ZjdiZWIsIDB4MTE4YWM5ZWMsCisJMHg3ZTE1ZTk2ZiwgMHg2ODU4NmJlNSwgMHg0MGNhMzNlNSwgMHg2ODdmM2I3YSwgMHg4MjMzM2U5ZCwgMHhiYzdmMjUyZSwKKwkweDEzNzllMDZjLCAweGFlM2NlYmNhLCAweGM2Y2NjMTM1LCAweDI1MmUxMTA0LCAweGY5MjhmZmRjLCAweGQzYTQxYWUzLAorCTB4OTVmZDMwOTQsIDB4YTQ4N2Y3ODksIDB4MDZjYzE5N2MsIDB4ZDc1ZGJkMjMsIDB4MDFlYTA5NjUsIDB4YmZhMjg1M2YsCisJMHg4YWZlOTA2YiwgMHhkYzg5ZjZjMiwgMHgxODRjYjQ3NywgMHg5OGY5Njc0MCwgMHg0Y2Y2MGUxNywgMHhiNDk1ZDIwMSwKKwkweDhlOTU4YTRmLCAweGZkZTczYzE2LCAweGI2Zjc0YmZjLCAweGU4MjM3Y2UwLCAweGMzODQyZGVhLCAweDhhZTgwNTU5LAorCTB4ZjQwMzZhZmMsIDB4MTQ3YmY2YWQsIDB4NGJmYzQ5ZGQsIDB4MzU5Y2JhN2IsIDB4NmU2NzdlZDEsIDB4YzFiM2Q3MDIsCisJMHhjZjQ5ZGJlYSwgMHhiYTI0Yjg4MiwgMHhhNzBlNzM3YiwgMHgyMWU2MmFiYiwgMHg1YTY3MmJiYSwgMHg2YjM0YTk3YSwKKwkweDA5NzRkMWNiLCAweDc0YjRlYTIzLCAweDhiYmEyM2U3LCAweDc0NzhkN2E2LCAweDRlZTkxODM3LCAweDJiZDRkYmVhLAorCTB4NDhlN2RkZDMsIDB4OGZjNWRmNzcsIDB4M2VlZTkwMzksIDB4YTdjNjcyY2YsIDB4OTM3YTY4YmIsIDB4YzU5ZjZjZjIsCisJMHg3NTc2ODk1MSwgMHhmYTQyOGQ2MywgMHhhMTlkZjhhMSwgMHg1MTFlNTgyZCwgMHhmNjc2NGY5ZiwgMHhkOTM3NjRiZSwKKwkweGZjNGQ4ZGRkLCAweDQ3OGY0OTdiLCAweDA1MzM3OThmLCAweDdjZjdjNTZiLCAweDFiOTYyNTZmLCAweGU4NzdjMWQ3LAorCTB4Y2YxOGY0YmEsIDB4MGY3YTE5YWIsIDB4YTFiODVlZmYsIDB4YmZiYzBkZTksIDB4ZGJjZmQxYTAsIDB4MzM3YTdjYmYsCisJMHg2YzBhODc5ZCwgMHhkYmNiZWQxNiwgMHhkOGRjYjEyYSwgMHg4YTdmZGJjYSwgMHgzMWFiYWU3MSwgMHg4MmQwMmRiZiwKKwkweDk2ZGFhZmVmLCAweDZmZGJlNmVmLCAweDExNGZkNzZlLCAweDNjYTdkZGViLCAweDZiYjUwNmY3LCAweDNmNmVlZGUzLAorCTB4ZTQ2MDRlNmMsIDB4ZmFmNmUwMjcsIDB4MjljZWIxNjQsIDB4ZDMzYWY4YmIsIDB4ODY3ZWJlM2UsIDB4NDU2M2U4MGIsCisJMHhiOWVjOWY5ZiwgMHg2NTc1NzQ0ZiwgMHhlY2UyZWYyNCwgMHhiNjk1Y2JiMywgMHg0NzRlN2MxYywgMHhiYzQ3YTYzOSwKKwkweDQzZjU1YmJiLCAweDM3NzQxYzc4LCAweDM2NzU3MTBjLCAweGY4YzhkM2Y3LCAweDU0MjllNjIxLCAweDU3MTdkODQ3LAorCTB4NDQzYjczNjcsIDB4NjE0ZjRiZDYsIDB4ZmQ4ZDdlNzQsIDB4NzJmZTRlY2MsIDB4M2UwY2RmMTksIDB4MDdkNDE0YzQsCisJMHg5NzYxNDZiOCwgMHg0ZTc3OGNjNCwgMHhiYjIyNjgyZiwgMHgxOTYwZmE2MiwgMHg0YmE5MGNlNywgMHg0YmMyZGM2MSwKKwkweGU1OGI0ZjlmLCAweGU2Y2IyYTQ3LCAweDkxMjlmM2Y2LCAweGQ3ZGYyMTc3LCAweDQ4NzVmMjA0LCAweDQ4OTBmYjE3LAorCTB4OTBmMGZjZTgsIDB4ZGI5ZWQwNzcsIDB4ZTczNGNjOTcsIDB4ZjNlNWY2ZGMsIDB4YmNlY2Q0ZjIsIDB4MDFjZDZlN2YsCisJMHg1NDlhZWFmOCwgMHhlNThiZjdiYywgMHhmMmI3OTQyOSwgMHg0YzE2MWU4MywgMHhmZjM4MWM0YSwgMHgxYTBiMmFlOSwKKwkweGNmOGEwZjI5LCAweDUxOGI2NTdmLCAweGU1YzI1N2RjLCAweDNmODEzY2RhLCAweGQxMTg2OTM2LCAweGE3ODE1Y2VmLAorCTB4MTdhMTZjZWEsIDB4Y2EzMTU5OGIsIDB4NmYwMjc5YTksIDB4MTkzNzM0M2YsIDB4MzM2ZWJlYjgsIDB4Nzk4ZmM5NDQsCisJMHgxZTNmMjhkOSwgMHg2YmNmNmI4ZSwgMHg5N2M5NDdiZiwgMHg0YWVlMzExYSwgMHg2MmFmYzc2MSwgMHhmZDNmZTQ3ZCwKKwkweGE3ZjFkODQ0LCAweGZjNzZlNjFlLCAweGZlNDFkNjZhLCAweDcxOWZkZWQzLCAweDk2MWViZTNiLCAweGVkMTJmNDg3LAorCTB4YWJkZGFkMDcsIDB4Njg3N2Q3MmQsIDB4ZGVhMDBkY2IsIDB4YWVjNmZmYjEsIDB4ODYzM2I5MjgsIDB4MWY3YmE1ZmIsCisJMHgzZjQzMmZhZSwgMHg3N2NlY2Q2NCwgMHgyMzVkZmZjOCwgMHgyYjQwNGNlNSwgMHhlNzQwYzA2NywgMHg1MWExZTY3MiwKKwkweGQ2ZmFiZmU0LCAweGQ4MTllM2YyLCAweGYyNjk5NWQ1LCAweDc2YzllZjRiLCAweDVlNzdmODQ2LCAweDBkMmU3OWU0LAorCTB4N2ExMWZiOGMsIDB4YzE2ZjIzZWQsIDB4ZDI4YjJjN2QsIDB4YTU3MmQxNGYsIDB4ZTkxNWM4NTAsIDB4NWJmMjkwZmYsCisJMHhjNjQyOWJjYSwgMHg3N2VjMTRmNSwgMHg5YjYwZjFkZiwgMHhlMWVmM2IyOCwgMHhjNGFmYTE2YywgMHg0ZGZhNGRmZSwKKwkweDg4NTQ3ZGE0LCAweGQ3ZDIxMWY2LCAweGJhMjIyNmE4LCAweGJmNzI3ZWIwLCAweGU4NDdkMjZkLCAweDY2MjUwNWE1LAorCTB4MTk5MTdiYzQsIDB4YTZlMTFiZjgsIDB4ZDlmNThkYjcsIDB4NjhmMWY0MzQsIDB4ODNmN2U1ZjYsIDB4ZjQ1MWVmZGEsCisJMHgwYjYzZjcyMywgMHg4NGRjZmQwNSwgMHhmZjE4MTg5MSwgMHhiODFmNzIwZiwgMHg1Y2NmZDM4YSwgMHhmNDg0M2RlNiwKKwkweDljZDVmYmYzLCAweGYwYmVlNDdlLCAweDNkMDNlZjliLCAweGEwN2RjOGZhLCAweGRkN2U0ZmRjLCAweGRkM2Y2MGZkLAorCTB4ODYzZWMwNTgsIDB4ZTk1Y2IxZTcsIDB4ZmRmMWUwMTcsIDB4NDVkMzg1NDYsIDB4M2RkZjljZmQsIDB4ZjJjMmM1NTYsCisJMHg3MzMzNjhlMiwgMHhiOTcwODZhYiwgMHg4Y2M5YTY2NSwgMHgwMzE2OTc3ZSwgMHg5OWNkMmZkZiwgMHhkMmQ5N2VmNSwKKwkweGI0MTNmOTA4LCAweGI4NDAxZjk3LCAweGY5Mjc2ZWIxLCAweGRhYWRlYjc3LCAweDNkMmIzNjcxLCAweGY3MTFmZDc3LAorCTB4Yzk1YThmNTUsIDB4MDhlMTc0YWYsIDB4YzJlNTkzMjMsIDB4MGY5NDExYWUsIDB4Yzc4MTk5ZmUsIDB4NmU3Y2U1NWIsCisJMHhiNWY3YmMzZiwgMHhiOTViZDQxMCwgMHhjYzYyOTZlZSwgMHgwMjU1YTgyZiwgMHhiN2MxZDYyZiwgMHg3N2JlYWMwZiwKKwkweDc1NmJiZjkxLCAweDY3MmY3MTQxLCAweGU0MjdjNTBmLCAweGJhZmRmMWI4LCAweGM2Yzc5MjdlLCAweGY3M2Y1YzAzLAorCTB4ZGY5NDA5MjksIDB4NDc4N2VmMGIsIDB4MzhmZWU5YzYsIDB4ZGNlZmNiODgsIDB4YjgwN2RmNGMsIDB4NWI0N2E5MWUsCisJMHhmODI3ZjNmYSwgMHgxYjMwYjQxMywgMHhhN2NlMTI5NCwgMHg3MDRkZTcwOCwgMHg5ODVmY2I3ZiwgMHgxMzc5OGFlNywKKwkweDA0ZTIyMzFiLCAweGJlNjYzZWQwLCAweGNmMjE3OWRiLCAweDAxNzI2MTQ3LCAweGJhNjU2N2NjLCAweDdmZDcxN2E3LAorCTB4NGY4NWM0NGEsIDB4YTllMjM4ODksIDB4ZmM1NzFlNDQsIDB4ZmU3ZDdmN2IsIDB4N2FlMjBkYjQsIDB4M2I4ODk0ZTgsCisJMHhjNmQxNGE5ZSwgMHg0NGJkNjQ5YiwgMHg2Y2Q5M2NmMSwgMHg2MDM0NmVmNiwgMHgzNzc5OWViYywgMHgzZDcwZmU4MiwKKwkweDdjYTI2YTY0LCAweDVmMWM0NTk1LCAweDZiMjUyZmJkLCAweDFhYzgxMWVlLCAweDEwNmEzZTU0LCAweGQzOTlmYmI0LAorCTB4ZTMwNDFmYWIsIDB4OWVkMzZmMmMsIDB4ZjcxNWVhODMsIDB4YmEwYWY2ZGIsIDB4YTdmMGI1ZTksIDB4NTA2YjM3MWMsCisJMHhkNzZjMjhmNSwgMHhiM2RmODBiYiwgMHgyODllNWZkYSwgMHhiZmVhNWVjYiwgMHhjOTEwYmFmNywgMHg4ZmYyZmVhMywKKwkweDNhOWNlMjQyLCAweGY4Yzg5M2Y3LCAweDYxZjhiYzQwLCAweGZhMzBiYzc0LCAweGJjNzQ2OTljLCAweDM3ZTRiMTdmLAorCTB4MjQ1ZmVmMTEsIDB4NmVlMmQ0ZTQsIDB4ZDViODZmMWUsIDB4ODIwZjM2Y2MsIDB4Njc3NWI3ZWYsIDB4MjZiOGZjNTAsCisJMHgxMzVjM2ZkMSwgMHhiZjViZjdlZiwgMHhhNDg3OWU1MSwgMHg5ZWRjZGVjZiwgMHhjZmY4ZjhmZSwgMHhmNWUzZTIyMiwKKwkweDJmNWEzZTIyLCAweDVkYTlkN2Q3LCAweGNmMDE2NGRmLCAweDNlM2UzMWVmLCAweDYwNzM5MDc5LCAweDlmM2EzYzdjLAorCTB4MzNiNDQ1ZTIsIDB4YWMzYzYxMGMsIDB4NTViODcwNzEsIDB4ZDEyYWViZTksIDB4Mzk2MTdjNGYsIDB4MzVmNzNjYTMsCisJMHg0MTZiMmQ2ZiwgMHgyZDlhZjIzZiwgMHg2MTU1OTZlMiwgMHgzODBiZDc3NywgMHhkMzk3NWJjNywgMHg4ZDJlNjNhYiwKKwkweGI5ODEzZWJmLCAweGU1OTNkNjIyLCAweGM5OTRkMTRiLCAweDMzYzg4ZjkyLCAweGFkOTM1NDFkLCAweDM0ZGI5ZjY5LAorCTB4ZjA3ZjUzNDQsIDB4ZWY5YTUxYmEsIDB4NGQyMmZlZjksIDB4MWFmNWEwYjksIDB4NmQ2MWZkNGQsIDB4ODhmMjlhMTUsCisJMHhlYTZiZDc5ZCwgMHg0OTIxYjIxNywgMHhhMjNiNmZlNCwgMHhiYjEyNWY0NywgMHhmMzQ3MzAyYSwgMHg4NWRlZjQ3ZCwKKwkweGIyOWZmNjlhLCAweGEwOTMxZGE2LCAweDdiNDVhNzVlLCAweDdiZjMzMzJmLCAweDg1OTRjNjdhLCAweDc2YzdhOWYzLAorCTB4YzNmNGQ1MmMsIDB4Mjk1MDRhODIsIDB4ZjYzM2RmMGIsIDB4NzlhN2I4OTksIDB4ODc4ZjBmNzksIDB4NWFiNWRkNWMsCisJMHhiZWFkNGUzMywgMHgxZDE4ZjA4ZSwgMHg3ZDYyMmRlZiwgMHgwODZlMzdlNCwgMHgxYjIwZWUyOCwgMHhkNTVkZmYxOCwKKwkweGFlZWQ0ZWQ1LCAweDc4YzhmNzY0LCAweDIyNDFjNmM4LCAweGIyY2Q5N2RlLCAweGQzNDc1ZDM5LCAweGMzZWM4ZDg1LAorCTB4ZTRmNGJiMGIsIDB4YzM2NDJjN2YsIDB4ZjA0NDlhMWYsIDB4NmI4MGIwMzIsIDB4MzAyZWZlMjAsIDB4ZjBiYjE3ZWUsCisJMHg3OThkZGQ4YywgMHhiNWJmYjc0NSwgMHhjYTYzZTY4YywgMHhkZTA1ZDJkNCwgMHg1ZWI5MTgxZiwgMHg1ZDJkNDhlYiwKKwkweDNhNWFkZGQ4LCAweGE1YTA5YTQ4LCAweDI3Nzg2ODgzLCAweGMxNzRiNDdiLCAweGNiYmZmMDQyLCAweDg2NzUzYmMwLAorCTB4YjdmZTZlOTYsIDB4ZjA4MWRjZTAsIDB4NWJlMTg2YjUsIDB4NjJkM2QwN2MsIDB4YmNmMWI4MjMsIDB4OTk5ZjY5MzUsCisJMHgxZDE0M2Q4NCwgMHg0ZTc2OTBkNywgMHhiYmIwOTA3MCwgMHgyZTMyM2Y0NSwgMHg5M2YxNTliMSwgMHg3NzFmZDU1ZCwKKwkweDBiY2MxMDljLCAweGQ1M2RhM2U2LCAweGM5NWZiOGM0LCAweDZmZTUxMDdiLCAweGJkMjRiZjBjLCAweDk0OTdlNzhmLAorCTB4YzA5YjlkNzAsIDB4ZjMyZDY3ZjUsIDB4NjYzZWZjOTIsIDB4OTNhNGZlZTEsIDB4OWZjOGFiZDUsIDB4OTEzNTkyYjQsCisJMHg5Y2Q5ZmRkZCwgMHhlOGVmYzJlOSwgMHhjYTU3N2FhNywgMHg5ZjkwMTg1MywgMHg4YjI5ZjYwMCwgMHgwNmFlZDdmMCwKKwkweDFmZWYxYThiLCAweGQyYTc4NjhhLCAweDc4ZWQwNGFkLCAweDRiNzU5ODZlLCAweGZjYTNlMDdkLCAweGVkZGUwZjE1LAorCTB4NjhmZjg5YTksIDB4NTFlNjVmZWQsIDB4YjQ5N2U1MjIsIDB4MTI3OGU1ODcsIDB4YzlhZTUyOWUsIDB4NDlhYzRjNzEsCisJMHgxMTdjODk5ZiwgMHhjOGQ4ZTcyNSwgMHhkNjkzZjhlOCwgMHg0MWZkMjM5ZiwgMHhlMzIzOGUzMiwgMHg5YmZlZDE0YywKKwkweDU1YjhiYjA4LCAweGMxZDI3MThmLCAweGNlNzgyZGY5LCAweDIxZTFkOGI3LCAweGViMjk2MTNmLCAweDRmZGYwNWI5LAorCTB4YThiNDc3MzAsIDB4YjhiZmUxMmUsIDB4MmZmYmY1OGEsIDB4MmJhYmVhZTIsIDB4ZjI2ZmI1YzQsIDB4ZjI0N2ExMmIsCisJMHg2NWIzYzYwNywgMHhmZjk2MWM3YywgMHhmMWExMWZmMSwgMHg4Yjk1YzUyNCwgMHhmMmYzOThmMywgMHhkM2QyMjcwOCwKKwkweGZiYTZiZjQwLCAweDhmZDAyYmY4LCAweDhhOTdkNzVlLCAweDMxMzBhYWY1LCAweGZkZGUyMjNkLCAweGY1YTIxMmE2LAorCTB4MzY3OTkwZmMsIDB4NmZkYjllNDUsIDB4NmVkMzFkNjAsIDB4ZTgzMjdmMjEsIDB4YTcyN2JjNDksIDB4NThiYmZiOTMsCisJMHhhYzNkYjQ1NywgMHgwNzU5YmY5MiwgMHhhZmJhNDEyYiwgMHhkZTcxMTE2NSwgMHgyYTc3ZjBmYywgMHg2NTk2MDdlYiwKKwkweGVjOTVkMjFlLCAweDgyZjFhNzg5LCAweGUwYTNjYTcyLCAweGM4NGM1M2Y5LCAweDhjZmZiOTQxLCAweGY5OTNjZmI3LAorCTB4NGY3ZWYyMTgsIDB4OTQ1NDc3OTksIDB4MWM3NWY4MjMsIDB4MDNmZDg3MWIsIDB4OTRlNTk1YmYsIDB4ZjgwMTdmYTIsCisJMHhjN2U0ODk1MywgMHhmYTI1M2NmZSwgMHhhMzFmODAzZSwgMHgzMWYzMmZkNiwgMHhmMjEyZjZmNCwgMHg1YzhiMmQxYiwKKwkweDg3ODBkN2VmLCAweDljN2U1YmI0LCAweGM4ZTllOGMzLCAweDNlYjNkMTcxLCAweDNkNmZjNGUxLCAweDQ3YTRiOWY4LAorCTB4NjhkYTNmOTMsIDB4ZmEwZDBkODQsIDB4NzkxNDVlMTMsIDB4YmI1YTFkODEsIDB4OWQxYzk2ZmQsIDB4ZjdkZjFiODAsCisJMHhmMTVlMDk1YywgMHhmOGYyMjFmMSwgMHhhZWJlM2UwNCwgMHhmOGYzMjYxZCwgMHgwYzk3MWMyNCwgMHgwZDBhZmI4NCwKKwkweDhmZjdmYjVjLCAweDExNWY3MGZkLCAweDJlMTJlZTBiLCAweDdlN2I0YWU3LCAweGRiZDJmODgxLCAweGJjMjNhNThmLAorCTB4NTc3YWE2MTcsIDB4ZTNkY2ZkNjMsIDB4NWQxNDRmYTEsIDB4ZmE1NTVlNzgsIDB4N2I4Nzk0YjMsIDB4ZTc0ZjRiYTEsCisJMHhlM2FlMWFmZiwgMHgyNWUxYjA3MiwgMHhmMzg2ODkzZCwgMHhiMzhhMjZkZCwgMHg0MWJkNzRkNiwgMHg2NmQ5ZTE3NiwKKwkweGZjMDZiNDEwLCAweDcyMTgwY2JkLCAweDA4ZmM2NWQ4LCAweGI3OGVmMDUxLCAweGQ5ZWI5MjRmLCAweGU1ZjYyMzkwLAorCTB4ZWYzMmZkNjIsIDB4MzliOWQ2MDcsIDB4NDc1ZTY2MjcsIDB4ZGZiNDFjM2YsIDB4ZjRhYTFjMDUsIDB4MWNmMDkyNjMsCisJMHg5MmJlN2Y1OSwgMHg3OTE3OTdkYSwgMHgzYWY0NWY1ZiwgMHhmZTc4NzIyYSwgMHhmN2IzMjlkYiwgMHhjM2VmZWMzZSwKKwkweGQ4MWQ5YzllLCAweGZiYmU5NTVmLCAweDY3YzIzNjcwLCAweGJiZTc0MmFkLCAweDc5Zjg5OGE2LCAweDVlNzEyY2RjLAorCTB4YzlhODQyNmYsIDB4MzM5OWU3OGQsIDB4NjY3ZGY4NzMsIDB4ZjdhNDdlMjMsIDB4ZmRmOTFjNjIsIDB4ZTBhNjc3YjUsCisJMHhmZmQ5MzQzOSwgMHhlNzQ3NDUwOCwgMHhlZTdiMTk0NywgMHhjMTJjN2Y4MywgMHgzNzIyZTZmOCwgMHhkOGJmNmZkZSwKKwkweGJhMmZlZTI0LCAweDAwMmMxYWNiLCAweDkxYmFmMjM5LCAweDE4NjU0N2RmLCAweDY2ZTc0NGQyLCAweGU0ZjU5MmZhLAorCTB4YjNkMzRjZDcsIDB4NzI3NzQ4YTksIDB4YWRiY2YyZGUsIDB4MDFmNzhmN2MsIDB4N2NiMTVlNjAsIDB4YWZhNWE1M2YsCisJMHg3YmZhMGQ3OCwgMHg3NWM4M2QwNCwgMHgyYmVjYTk0ZiwgMHhlMTg1YjI2ZSwgMHhhMzNjZjMyZiwgMHhmODI1NTNlMSwKKwkweDFiNDNlZTQzLCAweGQwNWI1ZWYwLCAweGJjY2RlN2JmLCAweDZkYWY3ZDFjLCAweDU4NzRmZWZmLCAweGY2MzYzZGZmLAorCTB4ODM3ZWI4YzgsIDB4MWUzNDkzYzUsIDB4NmJkYzUxZjksIDB4Mjc4NzE3ZmIsIDB4YTQ3N2RmODksIDB4YmNmNmE3YmQsCisJMHhiZjk3YjdjOCwgMHhkZWVmMTI1MywgMHg1MWNjZmY5YiwgMHg4MjdiOTdiZSwgMHhjYjg1ZTVlMiwgMHg3MDc4ZmZiYywKKwkweDk5NTY0ODY5LCAweDczOWQzNTdhLCAweGRlYWU1ZWY3LCAweDhmYWRmZjJiLCAweDI4YmVkZmI5LCAweGQzZGZmN2JlLAorCTB4YmNlYzZhZjksIDB4Y2ViMTVlYzUsIDB4ODg2MTdlNzAsIDB4ZTdmNzI5Y2UsIDB4N2U1NGJlMmQsIDB4MWE0NzdiZDksCisJMHgwOGQyM2VmMCwgMHhmNmJjYzgzOCwgMHhiNDhmYmMwNiwgMHhkMGJmNDYzOCwgMHhlNTc2Y2I5ZiwgMHhjNGFhODc3YiwKKwkweDhmMzAxYWJjLCAweDNkZjIzNTMwLCAweDM4ZjBiN2E3LCAweDMwMmYyMjY5LCAweGZiN2M4ODk0LCAweDlkM2QyZWNiLAorCTB4MTFlNWZmZTMsIDB4MzFkZDhjZGQsIDB4Y2I5YjlkZTYsIDB4YTljYTMyZTEsIDB4MGU4ZDFmMTIsIDB4ZTNiNWZiZjIsCisJMHg3OWU3OTNkNSwgMHhlOGQ4YjllNCwgMHg4NDU2NzVmOSwgMHg2M2Y5YzU2ZSwgMHhmMWFjNzI5ZSwgMHgzZjdjYjkxYywKKwkweDk5ZGRlNzJiLCAweGYwZDFmMWMyLCAweDliZGY4OTlhLCAweGYyN2NmMmFhLCAweDRhZDA5NGNlLCAweDE2ODcxM2UyLAorCTB4MWUwNGMzY2YsIDB4ZTUwZmFmM2IsIDB4OTliMmI5ZDEsIDB4OGYxMGVmZGMsIDB4ZmFhNzI2MWUsIDB4YzhiZTUxY2EsCisJMHhkNGNhZWU3YiwgMHhjMTExYzUyNiwgMHg4N2EyNTc4ZiwgMHgxYWY1ZGMzMCwgMHhiYjg0MGViYywgMHg3ZWNiYmU5MSwKKwkweDdjMTUxZjRmLCAweGRjMzYzY2NiLCAweGZhMTEyZGNmLCAweDVhOWVjOTZlLCAweDdlZTU4N2IyLCAweDNkNGVmNGU5LAorCTB4NjY5YzZmZTUsIDB4YmE3MmFlM2MsIDB4ZDBmZGExNGQsIDB4ZWI2MzFmNTIsIDB4N2NhZDJlNDAsIDB4YWEzMzc4YTIsCisJMHhiMDk5MjVhZSwgMHgxZWZlMTQ5NiwgMHhlOTY2MWY3ZiwgMHhiYWY4YThjNiwgMHhiZDQ5NWZkOCwgMHhiZTVmYzcyYSwKKwkweGQ3MTc2YjRkLCAweDQ2N2Y2ZGIwLCAweDUxZjRlOWZiLCAweGIwNTYzZjJlLCAweDJiM2ZkMjI2LCAweDU3ZjZkMDFmLAorCTB4YTdkNjY3YjMsIDB4YmNlOGNmMzgsIDB4OGZjMjExODAsIDB4ZWM1NzJkMzcsIDB4MTk1OGNhNTcsIDB4NGYzNThmZWEsCisJMHg5ZmM0NmU3YywgMHgxN2M3ODk2MCwgMHg0MzRmZmJmOCwgMHg3ZGRmZjE4NywgMHg4ZWZlMjdjMiwgMHhjOTZmM2UwOCwKKwkweDE3MjBmY2Y1LCAweGYyZWYzZWZkLCAweGY1Y2VhZWY5LCAweDdmNDVjOWNkLCAweDdlN2NiYmM5LCAweDcwMmVlYTE3LAorCTB4OGQyYmIzM2QsIDB4ZmQ4YjViZjQsIDB4ZmFmZjkyMmUsIDB4ZGZmZTVjYzEsIDB4MDAzNWY3OGIsIDB4NzEyNjRjOWMsCisJMHg0OWFlYmE2ZiwgMHg0ZGY2NDg5ZiwgMHg0M2VjZTg4MCwgMHg3ZTczMWRlNywgMHgyNjc3NjU0MCwgMHhkM2RhNDNmMiwKKwkweGJmNjA2N2QzLCAweDFlYWRhN2NlLCAweDcyZDZkZjVjLCAweDJmZmEyMTRmLCAweGYzZjM1NmI2LCAweDhmMTM2NmExLAorCTB4Mzk3ZTA3ZGYsIDB4NTM4NjAwZjEsIDB4YWY2Yzc2ODYsIDB4YTM5ZDE3NDAsIDB4ZmQxMDdmN2IsIDB4M2ZiYWFkNDIsCisJMHg5OGJjYzYxZiwgMHg1ZjNjYzlkNiwgMHhkYTE3NWQzMiwgMHgzYzYyMjgzZiwgMHg4OTkwMzVhNywgMHg2OGU3N2RmMSwKKwkweDlhNGU2ZjdlLCAweGNiOTBiY2JlLCAweDM2Mjc2ZTdmLCAweGU4NWM1YzA4LCAweDYyN2YyMDJhLCAweDE3ZmE0MWFmLAorCTB4MmU3NDJjM2IsIDB4MmVmZjhlYWIsIDB4ZjFjNjI4YzYsIDB4NzBlYWYzMmYsIDB4ZjE3NjkxMGUsIDB4ZjlhNjY2ZDksCisJMHgxZDUxODY5ZCwgMHg0ODkwZDA0YSwgMHgzYzUwYThmNywgMHgzMDQzNmVhOCwgMHg2N2Q0MTZmZCwgMHg0ZjE0YTk0ZiwKKwkweDdiNGJmMzkzLCAweGUzMDJhYjNkLCAweGRkOGY1MjY2LCAweGJmYjgzOGEyLCAweDBiZmRkODRkLCAweDcxZTNmYzk4LAorCTB4OWU4MmY5YjcsIDB4ZmY3YjA4MTYsIDB4Zjc4NzJiMTYsIDB4YzNjZWU2NTIsIDB4MmNjZDBiNzYsIDB4NzZhYzA3NTEsCisJMHgyOTQ3NjU0YiwgMHg5MGQ2YjNhZCwgMHg4Yzg1NzY4YywgMHg0N2I3YzUxZiwgMHgxYWM5ZmI2MiwgMHhlN2U3NjE3ZSwKKwkweGUxYmU5NTllLCAweGY0MTljOWQ4LCAweDNmODY1ZDQxLCAweDY5M2M4NWRiLCAweGZmY2ZjZTE4LCAweDgzY2NhMWIxLAorCTB4ZDc4NmNhZjEsIDB4MzBlZmQwNDYsIDB4M2M3ODEyOTksIDB4MTk5NmU0MWMsIDB4ODQzYTExZWYsIDB4YmRkNjFlZmEsCisJMHhjODhiMTVlYSwgMHg3Mzg4MGE1YiwgMHhkOGRlZmNjZCwgMHg0NTM5MzljNiwgMHg3OGYxMWU3NCwgMHg3MWZmZGQxZiwKKwkweDIzY2ExMGRlLCAweDg0NzkwNmZlLCAweDkyYmVhNjM3LCAweGUwMWZiYmZiLCAweGQ5MGRlYmJkLCAweGY5NDFkNzYwLAorCTB4Nzg5ZmVlNzQsIDB4MjU2ODQ4NzksIDB4OTI5OTFiZGUsIDB4NDc5Nzg5NzcsIDB4NzJjMTNlODUsIDB4NmNjMjVlNGUsCisJMHg1Njg1MTcyYSwgMHgzZTNjYTFlYSwgMHg3MTk3OTMyZiwgMHgzNjA0MGEwMywgMHg2Y2YwNmYzNSwgMHhjOTJkZGEzZiwKKwkweDg3NzAyZWMyLCAweGMzNzdiY2U4LCAweDkxNzQyM2NiLCAweDFlNzc1OGZlLCAweDg0Njc2Nzk3LCAweDNlNGNmOTNmLAorCTB4YzIwZTZkYmIsIDB4ZmFlYzY0N2IsIDB4ZGVkMjc5NjksIDB4YzlmNWEzNmUsIDB4MmNmNmNhZjUsIDB4ZmZiYjc2MzMsCisJMHg5NTdlNzIxMCwgMHhjNTNkYTczOCwgMHgzYzJkNWFjYSwgMHgwNDRmZTdmZSwgMHgxZWVjMWMzYywgMHg3ZmNiZjE0MSwKKwkweGZkZTE0ZGNkLCAweDRmNzQ0MjNiLCAweGZhMjdlYzhmLCAweGI4ZTQxYzc3LCAweDdiZmUxNWFiLCAweGYyYTNlNzU5LAorCTB4Y2I5NzdlYmMsIDB4YjM4YzJiZTUsIDB4ZWExOWM2OTEsIDB4ZTc5YmU3ZTEsIDB4ZmUyMjE0ZTQsIDB4YzBhYTZmMDAsCisJMHhjOWY3Y2E5YiwgMHhkMDdlN2NlZCwgMHgxM2ZlZmUyZiwgMHhmNDYyODdlOCwgMHgwYWZjMWZmYiwgMHhlNzg3ZTdlYSwKKwkweDI3Mjc0ZDFkLCAweDVhYWIzOGM1LCAweDJmYjZkYzc4LCAweDY5ZTg4MGI5LCAweGY3ZGM1NThhLCAweGM3NWRhMjUyLAorCTB4OWY2ZTNjZjgsIDB4YzU5MmYzYmEsIDB4YWYwOTFkNzksIDB4NjljNjg1MGMsIDB4MDljYzcwMTEsIDB4ZjYzMzlmMGQsCisJMHhhZmZiYWY5YiwgMHg4ZWViNGJmZiwgMHhlZjA3OTdjMCwgMHhjNWQ4Mzk2ZCwgMHg5ZjFlMzdlZiwgMHhmNDg1ZjFjNywKKwkweGUwNzY0MjljLCAweDY3N2Y0ZDc2LCAweDlmYjU0N2Q2LCAweGFlNWYyOGMwLCAweGRhODBhNTIxLCAweDZmZWUyYmRmLAorCTB4NjFkOWY3OTUsIDB4ZGM3MWZjYmIsIDB4NTdiYjQ1YmUsIDB4ZmNjMWE3ZGUsIDB4MWM2NDU5OTMsIDB4OGNkZWZmYjIsCisJMHg3MGJmNzEwZSwgMHgyODZmM2FmZiwgMHg4ODc0ZWIxMSwgMHhlZjIyM2E3NSwgMHhjZmU3ZWMzMywgMHg3Mzc5N2Q2MywKKwkweGI4ZTkwM2VkLCAweGZkZmRmZTFmLCAweGZkMTIyOThkLCAweDU2M2NmODY5LCAweGYxZDdjODdmLCAweDFlNTU3MmYwLAorCTB4MWJkZjI3OTcsIDB4YTMzY2U0NWUsIDB4ZTcwZmQ5ZTAsIDB4Nzg0OWY5YTgsIDB4YmI1MzdmMjIsIDB4OTRiYTVhMzEsCisJMHhmNDExY2NmMywgMHhmM2JmODAzOSwgMHhlMjc4ZTViZiwgMHhiYmZhZDk3ZSwgMHg3MzM4YmU3OSwgMHhiZWJhZTk2OSwKKwkweGY5ODc1ZjMzLCAweDA3ZGRiMjA5LCAweDM0YTBjMDc4LCAweDIxYmMyN2VjLCAweDczMjdlYzRmLCAweGJjOWM0ZTU4LAorCTB4MzM5ZTZmNDcsIDB4ZGU5MTdmYTYsIDB4N2IyN2VmNDcsIDB4ZDllZmU1OTMsIDB4YmQxYWZkNjksIDB4Mzk3YmZlNGUsCisJMHg3ZWZjNzNmZSwgMHhmY2EzNmI4MywgMHg3YThmMTgzYywgMHgxNzZlMTZjZSwgMHhmMmRhMmZkNiwgMHgwMzdlMDI2MywKKwkweDc5N2Q1NGZkLCAweDUzMTJiZjM4LCAweDNiZjhmM2M1LCAweDRhZjNhYjViLCAweDc3NjBhYjY3LCAweGRjNTUyNDk0LAorCTB4YTZlNTBmOTksIDB4ZmM5M2M2YzcsIDB4ZjE1NDE5MmUsIDB4ZjNjODNlNzksIDB4ZTA0ZDhmMzUsIDB4N2M1NzQ3ZGYsCisJMHg3OWNiMDQzZSwgMHg4YTc5NzkxMywgMHhmNzk0NzllNywgMHg5ZWNjYjQ2MCwgMHgyYmI2MTU5YSwgMHhkMTczY2NlZSwKKwkweDFkNGFmYWI4LCAweDQyNjc2YmRkLCAweDYzZDYwNjIzLCAweGY5NDRkZDdhLCAweGYxYWUxMjgwLCAweDVkMjYyNTllLAorCTB4YmZmM2FjNTMsIDB4MDNkM2Y0ZjcsIDB4YzA0Y2JmOGYsIDB4MWZkMGJhN2YsIDB4MjEwNWZjMjgsIDB4ZTgyZmUzNTUsCisJMHhjZmU3ZTQ0ZCwgMHg5MmZkNWY3YiwgMHg5YmRjZDdjZSwgMHgwNzlmNWJlNywgMHg2N2FkMWJlZCwgMHhmMjg3Y2Q2ZiwKKwkweDE0MDdlYjA2LCAweDYwM2M1M2VmLCAweGM2MWZhMDg3LCAweDYwOGI2MGU1LCAweGFkZDljYWJlLCAweGQ4OWZiNDVlLAorCTB4MjU1OWI3NmEsIDB4MThmZjBhYjgsIDB4ZjAwN2E5ZGUsIDB4YTdiNWU1N2IsIDB4MGY4ODNjN2UsIDB4NGM3OWM1ZTMsCisJMHhmMWEwNzIxNCwgMHgxNWZkYmZiNSwgMHg2NzhkYzRlMywgMHgxYjM0NmU2YywgMHg3YzNmNzYyNywgMHgxMzVmZGEyNywKKwkweDFiZmVkZmJiLCAweDNjZmNjM2Q3LCAweDQ0Zjc5YzkwLCAweGZiYzI3ZmY0LCAweDlhMjY1ZDA5LCAweGFiZWVjNGZmLAorCTB4NmJmZDYwNTYsIDB4NDAyZWViZGYsIDB4NDRlZWI5M2EsIDB4NDJjNTA1YjAsIDB4M2VmZmFiZWYsIDB4ODgwZTczNDgsCisJMHg3Y2Q5N2E3ZCwgMHgzOWYxYjhkMSwgMHgwMTNmOGYwOSwgMHgxZTA4OTNhMCwgMHhmOGYwZTczZiwgMHhjZWQ5ZjI4YSwKKwkweDBlNmU4ZjNiLCAweDdiNTQ5MzkxLCAweDc4ZWMwYWRlLCAweDYwNWYzYjhhLCAweDdiOGM2ZTA5LCAweGQxZmQ3M2M4LAorCTB4ZDVlM2Q1N2UsIDB4N2Y3ODNlYjAsIDB4MjBjYzFmNWQsIDB4NzI5ZTllYzIsIDB4MjQ4MjBjZDEsIDB4Yzk2NzJlNWMsCisJMHgzOWE1NzI5YSwgMHhjYWJmNTM0YiwgMHgzZWY5YWY5MSwgMHhjZDJhZjMzZCwgMHg0MmFlOTlmNywgMHhjOGQ2Nzk0ZCwKKwkweDM3ZmE5YTg5LCAweGU1MzVjYmJhLCAweDZhNjYxM2Q5LCAweGFhN2I1N2VhLCAweDYwYzJlNTM1LCAweGYxN2VhNjg3LAorCTB4ZjdlZDJlOTEsIDB4Nzg4ZjRjNjMsIDB4N2VlZTNhMjgsIDB4MjdhNTlmMDMsIDB4MmQ5ZWU0M2QsIDB4MDZmNGQ1M2IsCisJMHg4NWZlMjczZSwgMHhhZmRhMjM4MywgMHg4ZWM1Y2Q3YywgMHhmNGJkZjAzNywgMHg5ZjlmNDcyYiwgMHg5YmU2N2U5MiwKKwkweDMxODBiNmY1LCAweDUzMzkzZmI2LCAweDgzZGYwODJkLCAweGYzZjFkN2EwLCAweGZiMjVlZjUzLCAweDkzNzg4MGZlLAorCTB4YTBhNmE3ZTcsIDB4NTA5MDE5NWYsIDB4OWZiOWRiNzUsIDB4NWMzMmVmZTIsIDB4NmVmZGM0NTgsIDB4OTQzMTExYzcsCisJMHg3ZjI3NmU0ZiwgMHhkMzQzNzFlNSwgMHg3OWU0N2ZiMywgMHhmNzI4YjkwMywgMHhhZjliZWJhZSwgMHg4Yjk0Zjc1OSwKKwkweGNiYmFjZDNlLCAweDNjMjhhYWQ5LCAweDU3MjlhMWRkLCAweGQ0ZDZlZTM5LCAweDVlYjk5ZTlmLCAweDZiYTY3ZGYzLAorCTB4YjY5ZTE0NGIsIDB4YmEzN2NhNmIsIDB4NTNjMjhlMWYsIDB4OWU5ZTE0N2IsIDB4ZjQ5NzdjZDIsIDB4NWZmYzJkZGQsCisJMHgwYWRmYTFhZiwgMHgzZDQyOTM5ZSwgMHhjOTg3ODg5NSwgMHgxZjA4ZmFhNywgMHgyYWRhN2ExMywgMHgxY2Q3NGYxMSwKKwkweDk1N2MyMGVmLCAweDI4OTViZDA0LCAweDM0OGVjYjJlLCAweDIwY2Y4MWJkLCAweGRkYjBjYmVjLCAweDdhNGNlNjgxLAorCTB4OTE3NjZjMWUsIDB4ZjM3MGViZmYsIDB4NjkxZTdhNDgsIDB4ZmZmYmQzNzYsIDB4Y2Y0MDllNjgsIDB4ZTg3YjM1NWYsCisJMHgzM2NkOWZmOSwgMHhlY2QzZDllOCwgMHg3MzQ3NjdhNSwgMHhhZTdmZDUwNywgMHhjZmZiOGJiOSwgMHhkZGVmZmI1MiwKKwkweGMxYmY0NWM4LCAweDAxYTg1ZDc5LCAweGMxOGVjNjIzLCAweDllOWU0OTViLCAweGM3OWQwODRmLCAweGViN2YwNmYyLAorCTB4MzQyMGE5ZWMsIDB4OTAxZDY3ZjAsIDB4OWUyMDdmMmYsIDB4ZmI0ZjJlNDUsIDB4MWUwZTc4NjAsIDB4MTlmZGY4Y2MsCisJMHg0M2EzN2YyMiwgMHgzYjQ0MjllNywgMHgwZmUzZjQ3YywgMHgzMmU2YTdkZSwgMHgzN2JkNjliNiwgMHgxODNhN2YxMywKKwkweDEzMjg2NmNiLCAweDkwZjdlOWIyLCAweDkzY2ZiYzFlLCAweGE4YjNkOGMzLCAweGY3YmVlODRhLCAweGI5NjM2NzA3LAorCTB4ZTc5ZWZjNTcsIDB4MjQxZmM3ZTAsIDB4Yzc1YmZjM2IsIDB4ZTIwMzNkZDksIDB4YzcwN2EzZWMsIDB4N2IzZmIzODgsCisJMHg3ZjQ3NjVjYSwgMHg0NmFmZDFjZiwgMHg0NzFlMTFkOCwgMHhjM2NiZGY4NSwgMHgzYmY4MGQwYSwgMHhhMTZhZTUxYywKKwkweGYxZWNmNTAxLCAweDU0MjFlNzM4LCAweGUwYzk3OTUzLCAweDdiYjc1YzUyLCAweDVmOTFlNTFlLCAweGUxZGZhMDZmLAorCTB4ZmRmMGEzOWIsIDB4ZWM5N2FjYWYsIDB4ZjdhMGZhZTIsIDB4YTdlZDEzNDYsIDB4MmIzY2U5OGUsIDB4OTU3YTNmOTAsCisJMHhjZTEwYzdiZSwgMHgxNGZlM2QzNywgMHg3YjVlYTllOSwgMHhhZmMyMWU1ZiwgMHhiY2JkZjFmYSwgMHg0YzdiZWNlYywKKwkweDBkOTQ0NzcxLCAweDhmOTUzZTFjLCAweDZmZGIzOTNmLCAweDMzZTE1ZWZiLCAweDBkMTFkNzFiLCAweDFkODNiOTlmLAorCTB4ZjQxMTVmN2MsIDB4MjAxZGEyZTQsIDB4M2RhYWM3Y2IsIDB4MmM1NzE0ZjUsIDB4NzVjMzBjZjcsIDB4Mzg5YWY1MWMsCisJMHg4MWVkN2FmZiwgMHhmMjM3ZTQ2MSwgMHhmMDhiY2U5NCwgMHgzNjBjZjRmZiwgMHhhMmU3ZmFkMCwgMHhlODNmNDRkZSwKKwkweGQ2MjA3ZDQyLCAweDFmOWUxNWVmLCAweGEyM2RlZGNjLCAweDJlNjdkYzEzLCAweGUwYmVkMmIwLCAweGEzZGY4ZTk4LAorCTB4ZWVkZjVkMTAsIDB4Y2ZhM2ZiZTIsIDB4OWM4N2RjZTIsIDB4ZGM1N2JlMjgsIDB4MGJlY2ZmNTQsIDB4NWFlZjVmZDAsCisJMHhlYmRkNzUwYiwgMHg1OGY2NDExZCwgMHgxNzQwMTM2ZiwgMHg1NGY3YmE2OCwgMHhkZGZlMzlkMywgMHhhMTIwMTZlNCwKKwkweGY4MmRlZjM4LCAweDZjZmVmODJmLCAweGZjNWY5ZGY3LCAweGIwN2ZlYTA2LCAweDFkMjZlYWQ2LCAweGYwNDUxOGUyLAorCTB4MmYyYTI4NWIsIDB4ZmQ5MzM1NGUsIDB4NmU0ZTc4YjQsIDB4NWJjNWVhMDUsIDB4NTZmMGJjNDQsIDB4NjE0ZTlhYmIsCisJMHhlOGQ5MzU0MywgMHhkYjk2N2U4MCwgMHgwNDAzMzcwYSwgMHg2YWI0Y2FkOSwgMHg1MzY0ZmUyMywgMHg5YjFkY2U0ZCwKKwkweGU4N2FiOWYxLCAweDU4ZjIyMzc2LCAweDliN2Q5OGRkLCAweDA3YWQ4Y2QxLCAweGY5MjUyZTE2LCAweDE5YTc3YTE3LAorCTB4M2FkYjc1ZTYsIDB4ZTdlZjhiYmQsIDB4ZGFkYWY5ZTQsIDB4MjJmNzk0NmYsIDB4Yzg5OGY3ZTksIDB4ZDAyMDAyNGYsCisJMHhhNWM5MzU3ZSwgMHg0OTQ5ZjY2OCwgMHgxODFmNGU4MiwgMHg2MzMxZTIyYywgMHhkYTRiZDhkOSwgMHhlNDRlZDc3OCwKKwkweGRmOGJiM2EzLCAweDFlMjcxZTE5LCAweGVjMmVmZGExLCAweDdiOGFkZmM3LCAweDRmZWZhMzllLCAweDVjM2FlMzkxLAorCTB4Y2M3NWZmN2MsIDB4ZjY4OTk0MDgsIDB4MDdhZTQyZTQsIDB4N2NmZmNkYzYsIDB4N2ZhYzI5NDMsIDB4NDc0M2I3NWMsCisJMHhkNWI3MGQ3OSwgMHhiODc4ODBiZiwgMHg2OGYwMjVkMCwgMHg0ZmM4NWQ2MCwgMHg3Yzk3ZjkzNywgMHg0YzQyMWJmMCwKKwkweGYwZGNlNjlhLCAweGJiYTVmNDk1LCAweGE5MTk1MWM3LCAweGRlNDI0YjJmLCAweDM5N2Q0OGNhLCAweDEyYWRhZmExLAorCTB4OGZkNGEyZjUsIDB4MjExYWU2YzEsIDB4OGU0ODliOGYsIDB4NDc1ZTZjMWUsIDB4N2VjZGMzZTUsIDB4NmU2OTFlN2EsCisJMHg4ZGI4ZjIxNSwgMHg3OWFhZmZiZSwgMHgwMWM3OTBhNywgMHhkMmY3OGYyMSwgMHhmOWU2ZWVmYiwgMHhkOWFkN2NmNCwKKwkweGE5ODVjZjQ3LCAweDZlMTFkN2JlLCAweGQ3M2I4ZTMyLCAweGRjYmNhM2VjLCAweDE4OWIwZjQzLCAweDc0MmVmMWM2LAorCTB4MDM4ZjI4OWIsIDB4NDdiMWUyMzgsIDB4Yzk0ZjMwZDIsIDB4YTM0NGU3NDQsIDB4ZTVhMjk1ZjMsIDB4NzQzZDNmN2MsCisJMHhlNWI3YjgwZSwgMHhmZWY3ZTQ2ZCwgMHgxN2I0MjMzYywgMHhhN2E3YzcwNywgMHg0NzY1Y2NhMywgMHhlMGYxZjRiOSwKKwkweDhlODcyNGYzLCAweGI0NzY1Y2JhLCAweDJlM2U0ZmE3LCAweGRkOTcxZWNhLCAweDBkM2ZlNTAwLCAweDcxZmQyNWVlLAorCTB4OWJiMmU3ZDQsIDB4ZTNjOWZjYTAsIDB4ZGZiYmZjYmQsIDB4Zjk0MGI3NjUsIDB4ZmM3ZGMxZDMsIDB4ZDA1MTgwN2IsCisJMHgyZmUwZWNmZiwgMHgzMzk1OGU0OCwgMHg0N2YyMjBlNSwgMHgyYTdmMzlhNSwgMHhkN2QwMGJhOCwgMHgyZjkxMDdlNSwKKwkweDk5MmU2N2E2LCAweDYwYjE3YzhhLCAweDcyZTg4YmIwLCAweDQxZmQ2YmE2LCAweGQ5MWFjZjJjLCAweDE1MTVlMmFlLAorCTB4NDZlMTViMWUsIDB4NTY5MTU3NmMsIDB4YTliYjYyYWQsIDB4YzQ2Yzc3MzksIDB4NmU4NmQzNzYsIDB4Y2RkYjIzNTcsCisJMHgyMzZmYjMxOCwgMHhiNzcwNmY5NiwgMHgyZTlmNjhhYiwgMHgxYTU2Mzk0MCwgMHhlNTk2NDdlZSwgMHg2NWE3Mjk3NywKKwkweGRkZDVkZDNlLCAweGUzMDdkMjVlLCAweDBmYTRiY2JhLCAweGU2MmE1YzI0LCAweGZmNDI2ZjU2LCAweGUyOTc2MzY3LAorCTB4YTlhNWRmYzAsIDB4MjdmNGFiOTgsIDB4NjJlZTYwMzMsIDB4MGE5M2RlMDMsIDB4M2RmZmZhZjIsIDB4ODdhYzc3YWUsCisJMHhmOTYyMzY3NSwgMHhhZGI3MmExYSwgMHhlZGZhMDZmZiwgMHhlMmY2MDA3ZiwgMHg4MDAwZTgzMSwgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDNjZDVmZjAwLCAweGU1NTQ3ODA5LCAweDlkY2VlN2I1LCAweDRjOTI2NDJkLAorCTB4ZTI0MjA4MzYsIDB4OTYyNDk5NjQsIDB4MjZiNjQzMmMsIDB4MGM0ODY0MTAsIDB4ZjkwMTMwZWUsIDB4MTAxOTY1NDQsCisJMHgwNDQ4MTZjMiwgMHg3ZWFiMTdlYiwgMHhlMDE3MWExOSwgMHhkMTZiOGQ2OSwgMHhiNWM0NmZhYSwgMHg2MWU0YjZhZiwKKwkweDFkMDk1OGQ0LCAweDg3ZDI1MmFhLCAweGI0MTA1NTNhLCAweDg4YTQ3NDc5LCAweDExOTA5OWYwLCAweGM3ZDI3OGRjLAorCTB4ZjdmY2U3M2IsIDB4MjRjZWU2NjYsIDB4YmVmZDE0ODAsIDB4ZmY5Mzg2MDcsIDB4Y2ZkOWZiZmUsIDB4MDA1ZmZmZjksCisJMHhiM2Y4NTM4MCwgMHgzNDYwN2YwMiwgMHgzZDI1MzhmZSwgMHgwNDY4MDQ4YywgMHhkMWJmNjdmMSwgMHgwMzk1YjI2ZCwKKwkweDhjMDczNGFjLCAweDQxMmZhM2EwLCAweDYwMTBhYmEzLCAweDc2OTYwZWFmLCAweDI0YTQwMDE0LCAweDBiN2FmY2MzLAorCTB4NzRiMDhkOTYsIDB4NWRlNzk2MGIsIDB4MDU0ODAzNjgsIDB4MjBiYWRhNjgsIDB4ZGE4NTgxNmUsIDB4NjA2NmUzYmIsCisJMHhlMjE3NDVmYiwgMHg1MmNlMzhhZiwgMHhlMDU0NmUwNSwgMHg5YmQ0MGE5MywgMHg0ZjM0ODk5YywgMHgxZmQyNGQ5YSwKKwkweDg1NmZjN2NhLCAweDA2NGE3ODUwLCAweDNkOWFiN2U4LCAweDQ0ODAwNGJhLCAweDBkYWM3YjkzLCAweGZiOWJlZGM3LAorCTB4ODc1ODgzNGUsIDB4MzFkNjg4YWYsIDB4ZWIxZWJkNmMsIDB4NmMzMjAwZTMsIDB4Y2ExZjFlNTYsIDB4NWU1NDE5ODIsCisJMHhjODQ2ZWQwOSwgMHhjZmY1Yjg0NiwgMHhkYTIyYTRmYiwgMHgyMzI3YzU5NywgMHg1ZjQzNGU4NCwgMHhmOWVjNWYyMCwKKwkweDYzZmUxNjU0LCAweGUwNTQzZDA2LCAweDZlMDNlOTdhLCAweDcwZDc5OTY5LCAweGVhNTY2MDIwLCAweDc0Mzk2N2YxLAorCTB4MjI2NjcwZWMsIDB4N2VkNDVlZGUsIDB4MThiZjA0NmYsIDB4N2RmYjQzYmYsIDB4YmU4ZGUyMTUsIDB4YmY2OTc1MzcsCisJMHgwZjViNTQwMywgMHgwMjMwNDM4ZCwgMHhkOWRmYjhjYiwgMHg4NTVlZmUxMiwgMHg4NzhmMGRmZiwgMHhjM2MwNjc0OSwKKwkweDEwZjBhMWE0LCAweDFhZjAxZmI1LCAweGQ3ZGU4ZTQxLCAweGE2NmVjYjBhLCAweGMwYmVlNDczLCAweGQxZmNjYTlkLAorCTB4ZjcyMTgxMDgsIDB4ZjQ0NWYyYTcsIDB4ZmUwNWRhZmUsIDB4MjVmZjAyZjUsIDB4NWE3NGU3MzYsIDB4MzhmY2RkNWYsCisJMHg4ZTAwNTM5MCwgMHg0ZDc5MzU2ZCwgMHhhOWZmZGM5OSwgMHgxNzQ0MjkzZCwgMHgyZDgzNzU5MywgMHg1YjViM2U5YSwKKwkweDAwZGU4MzY3LCAweGNkZDVhZGIwLCAweDE0YmFkN2QwLCAweDNmODA3NmY0LCAweGY5NzMzNmI1LCAweDJlMTZkNmFkLAorCTB4MzBmNTY4ZWYsIDB4OGViYWQ5ZGMsIDB4ZGI1YTVmZTEsIDB4ZWI1NzdlYjksIDB4ZGJiZjJlNDYsIDB4NmZlODY1ZWEsCisJMHg1ZmJmOTE3ZCwgMHg4NjY1N2YzYiwgMHhmZjRkMTJkYiwgMHg0NWNlYzlkNSwgMHg3YjllOGZjNCwgMHgzZTk5MTNhYSwKKwkweGM4NTNmN2I4LCAweGM4MWE5ZWFiLCAweGMzNDRiNjZmLCAweDlkNjU4MzAxLCAweDhmNjVjMDk0LCAweGQ5ZTFmNzExLAorCTB4YzM2ZGUzMTYsIDB4OGM3M2ZkN2QsIDB4MTljNjg5YmIsIDB4YWQ3ZTA5YTgsIDB4NGE0MzdjNDMsIDB4MzBkMGYxODAsCisJMHhiZTlhYmRkMiwgMHgzYTFjNDY0YiwgMHhlNGY1NjY4OSwgMHhlYjBlZmUxMiwgMHg2NDA3YmYzYywgMHhkMzliNTZkOSwKKwkweDM4M2U0N2E1LCAweDE3NTU4ZjFhLCAweDY1ODJkYzAwLCAweDc4ZjNjZTBmLCAweGZhODVhYmFhLCAweDQ4YzA3ZTQxLAorCTB4M2ZhMjljZTMsIDB4MDk3YzcxOTMsIDB4M2FmMDc3NjYsIDB4MGUxY2EyMTAsIDB4YjFlODA4YzQsIDB4ZDE4ZjJjNDksCisJMHg0MGRkYzg1MCwgMHg2MGY5OWZiYSwgMHgxOTEzZTllMCwgMHhjYjMzODJiNiwgMHhhOGY4NzBjNSwgMHg5ZTAzYWI5MywKKwkweDY1NjdhNDMyLCAweGQ1ODRjM2FjLCAweGE0ZjgxMjdkLCAweDQ2NTM4NDEyLCAweGQzOGUwMGQ2LCAweDEzZDQ2ZTk3LAorCTB4NTY0NDE0OWMsIDB4OWZjM2M3NTAsIDB4NjMyMmRmYzksIDB4MTRjYmYxODYsIDB4NmI5NGQ0NDgsIDB4ZWQzNWEzY2QsCisJMHg5YTk5YWNlYiwgMHg1Y2Y0YmVmYSwgMHhiNGQyZmYxZSwgMHhmYWVkMzQ4YiwgMHhjNTlhNTc0NiwgMHgyMzJmNTNiYywKKwkweDZmNzQ2NWQ4LCAweDA5NzQ4MDVjLCAweDliMWM5OTU2LCAweDk4YmRmZWIwLCAweDA2MjgyMmY4LCAweGJmMWIxNjk4LAorCTB4MzE3YmUwODksIDB4Mzc2YTVlMTksIDB4MTRjOWMwZWQsIDB4OTM0ZTdkYzAsIDB4MTA4YjIzN2QsIDB4YzZkYjk3NTUsCisJMHg5OWVkYzc2YiwgMHg3NmMzNjM1MywgMHg2OTU3ZTY1NywgMHgyNWMxMjFkNywgMHgxZGFiZGZiNCwgMHhhN2RmMzQ1MywKKwkweGU5YWU1ZTU3LCAweDkzZmIzMmVmLCAweGNlZjVhZDA4LCAweGM2ZjdjZDdhLCAweDlmNDFhZjk2LCAweGU1YjEzMDBjLAorCTB4MDE0YmU4MjQsIDB4MzQzYWZiYzYsIDB4ZWNlZTk0ZTMsIDB4YmYxZmI0ZDIsIDB4ZWIxMjY0MWIsIDB4Mzc4ZTdkOTIsCisJMHg3NDFmOTYwOSwgMHgxNTJhYzRjYSwgMHgyNGRmOWI4NywgMHgzZmE1ZjU1OCwgMHg0ZTAxZjY4MywgMHg5ZjUxNTliMCwKKwkweDgzZGM4YTRiLCAweDk2M2QwMjQ3LCAweGNhZTUyOTI3LCAweDgxMmRiN2EwLCAweGYyMTI3MGU4LCAweDg5YmY0OGY1LAorCTB4NjMyMWMyMzAsIDB4YmZmMmE5NjMsIDB4NGMxZjEwNGUsIDB4MzIwMDIwNTIsIDB4MTZhYmY2MDcsIDB4M2E3OTgwNGIsCisJMHg0NTk4ZDc4YiwgMHgxYmU1MDU2YSwgMHhjOTA2YzFmNSwgMHgzODQ3YTY5MSwgMHg1MDU0MGU0NywgMHg4YTA0MjhmOSwKKwkweDk3M2FjYTA4LCAweDJhNmJmODllLCAweGIyYTU4ZjM0LCAweDA0NjlkYzA5LCAweGJmNzQ0ODNmLCAweDJmZGM3YzRmLAorCTB4ZTJjNGRhMDUsIDB4Y2ZjNGM5ODIsIDB4NjhmZjNmNzUsIDB4MTdhYzZkZGUsIDB4NWMyNjFjNjIsIDB4ZmViYWVmZGYsCisJMHhmZDZiNGE5MSwgMHg5MWY1M2ZiYiwgMHg3ZTIxNmMzNywgMHhjZDdlYjI2ZiwgMHg4ZGNiNTI3OCwgMHg3ZjE5YzcyZCwKKwkweDJkNmZiOTZhLCAweDkyZTE3N2NjLCAweDlmNjgwZGRiLCAweGFmZmUzNjEwLCAweGVkMGE3NmNjLCAweDUzYTIzYWRhLAorCTB4YjhjOWZjMjMsIDB4MWVkNDIwYmEsIDB4YzQxOGJlM2EsIDB4YmZlYTMxNzcsIDB4MDRkMzVhN2EsIDB4NWRkZmQ3YzIsCisJMHg2ZjU3NmM0ZSwgMHg5ZTA4NzIxMCwgMHgxYzRlZjU0NSwgMHgyOTQ2M2VhNywgMHhhN2Q0NGY4MywgMHhiMmExZWQyYSwKKwkweDZhZTljYjllLCAweDZmNjg5NTdkLCAweDU4N2JjNzU3LCAweDk2YWQxZmI0LCAweDUyMmVmMTk1LCAweDljYTJjZGNiLAorCTB4YTBmN2NlYTksIDB4ZTVhYTE3MjgsIDB4Mzk3MTcwZmYsIDB4NjEzZmI0NGUsIDB4MjllZjU1OWIsIDB4NTNmZmU5MDgsCisJMHgwZjE4ZGRhYSwgMHhhMDZlYzllMywgMHhjOTMzOTAzZCwgMHgxYWJiNDgxZSwgMHhlZGEyMWY5OCwgMHhiMTVlYjY4NSwKKwkweDIzN2ZmMzE3LCAweDQ0YzU4YzdiLCAweGRmNjNjYjhmLCAweDkwZWViOTIxLCAweGYxYmFlNDgwLCAweDhiZDM4Mzc2LAorCTB4ZDQ5ZTdmZjMsIDB4MTJjNmI0NTEsIDB4YjdlN2RmYzIsIDB4NmFiYjdjMDgsIDB4YjYzMjljZTMsIDB4ZGU2YWY5NWYsCisJMHgzOTIzZTIyNiwgMHg4NWM4Zjc2ZSwgMHg1NjNhZGRmOCwgMHg0ZWE3N2FjNywgMHhlODgxMzhiNiwgMHhmYmQwYWY3YiwKKwkweGQ4NDhmZjZhLCAweDg2ODZmMmQwLCAweGIyZjU1MTllLCAweDZjYzFmM2M0LCAweGZhZjljMWZjLCAweGY0ZjUxYmVmLAorCTB4OGU1OWMyMDYsIDB4OTM3MDk3M2YsIDB4ZGNmNDI5OTksIDB4OTVhZGQ0NDgsIDB4ZWEzNmYzZjgsIDB4M2RkMjMzNTksCisJMHgzYTljMWIyNSwgMHgxYWYyOWY2YywgMHhmMWEyNjdlYSwgMHhjN2QwYmY0MSwgMHgyNGY4YzVhZiwgMHg4Zjk1OWMxNCwKKwkweDZmZjZjOWJkLCAweDhlNTI4Y2ExLCAweGNmMmQ3YmY4LCAweDdjODk5NzlkLCAweDlmY2UzNDdhLCAweGQwZGI3YzRiLAorCTB4NzVkNzhkYjIsIDB4ZTNjYWRkOGQsIDB4MTA1ODM1ODMsIDB4Y2NlMmNmOGUsIDB4OWU5N2ZjMjgsIDB4M2ZhNWZmMDEsCisJMHg4MjcxZmUyNiwgMHg3NWNmYTQwMywgMHhiZWI0NzQyOCwgMHg3OGI3OTZlNSwgMHhlZjk1Y2JiZiwgMHg0MzMyNWZhYywKKwkweDQ3MmNiOGVkLCAweDM5YzY4Zjk3LCAweDBlMWYwODMyLCAweDc0MDc0ZTg1LCAweDVmMDUwYWI2LCAweGZhYmUxMzU3LAorCTB4MTM3M2ZiMTcsIDB4ZjlmMGVjYjEsIDB4M2VkOWJhNDcsIDB4ODg5NzJhZWMsIDB4NDA3MWNkZWUsIDB4ZjkyYTNmNzQsCisJMHg0MTBlZjY4YiwgMHgwZWQ2OGVmZiwgMHg1YTViY2JiNiwgMHg4NGJlMThiYiwgMHg1NWJhZDA3MywgMHg4ZDEwZGQ3YywKKwkweGMwNjdmOWRmLCAweDEzMWZmY2VmLCAweDAxZjRhM2JmLCAweGFkZmIwM2EzLCAweDRlM2MwN2RhLCAweDExODBmZjg1LAorCTB4MmI0Y2Y0YzIsIDB4MjdlMjI1ZjEsIDB4ZmFlMjRiYTEsIDB4MjEyMGI5M2EsIDB4MTM4ZmE5YTAsIDB4NzM4ZTUyZmUsCisJMHhjYWU5ZjEzYywgMHgzN2FhYmIxOSwgMHg5ODc5MjE0OCwgMHgzMTFkMGIxYywgMHgwZWQ3Y2M0OSwgMHhjNDFkYWY4NSwKKwkweDIyZmYyYWQ3LCAweDExZWE5NjNmLCAweGM0OWQ2ZmNmLCAweDM3ZTA0MzdlLCAweGYzYzBiZmM0LCAweDNiYmE3OGE4LAorCTB4ODgxYmFmMWEsIDB4YWJjMWE3OGUsIDB4YzYwN2ZlYjYsIDB4YzdmYTI3NmIsIDB4YWY4MjM3YTQsIDB4NjUzNzc4YzQsCisJMHg3N2Y5ZTM0NiwgMHg3YzU1NWUwYSwgMHg3ZmU0NTM2ZiwgMHgyMzZmM2MzOCwgMHg3ZjllYTczYywgMHhiNGNiNmYzYywKKwkweGY4OTFiOGYxLCAweDQ1M2VjZTFlLCAweGY3NWQ0N2QyLCAweDdlNWE3MjEwLCAweDJkM2E3MjJlLCAweGRmZjhhYWRiLAorCTB4NDYxNjc3ZTgsIDB4YTI2ZGZkZDMsIDB4Zjc0MzU5YmIsIDB4NTNjODMzOWUsIDB4NGYyOThmY2YsIDB4ODQ4Yjc4OTEsCisJMHgzYWI4MTI4ZCwgMHgzZmRmZDEyYywgMHhkZjU2MWNjYiwgMHg0ZTNjMTc5ZCwgMHhmOGQ2Y2UwYSwgMHg3NWJmOTM2NywKKwkweDI5YjNmYzZiLCAweGZkNjk2MTE4LCAweGU1MzQ5YmQ4LCAweDlhYWRlYjNhLCAweGFkYTY5N2Y2LCAweDZlNWZkNGQ1LAorCTB4YmZhOWFmNWIsIDB4NGQwMWZmMzIsIDB4NjNjNzZhZjksIDB4ZDNlNjdlMTEsIDB4ZTc3YWZhOWEsIDB4NzNmNTM0NmYsCisJMHhlYTZiYjc5YiwgMHg2OGY0YjdlNywgMHhmZTc4MTdlYSwgMHg3OGFiMjlhYSwgMHgxYzBhZGFkYywgMHgzNTZiNmQyZiwKKwkweDY1ZDNmMTJiLCAweGZlMDNhYjBjLCAweDhiODMxMjVhLCAweGRmZDkwNzBmLCAweGQ3YjdmNGFjLCAweGFmYjI0YmIyLAorCTB4MzJkMWZkODMsIDB4YzI5NmFiOWYsIDB4Y2Q5ZDhhYWEsIDB4YjVmNDEyNmYsIDB4MmQ3ODk1NWEsIDB4YWQ1YmUxOGQsCisJMHgzYmVmZDYzNiwgMHhlZTE5ZjM1YSwgMHhmMTI4NzU2YywgMHg1ZGMzMjU1YSwgMHg0ZTI1NGVhZCwgMHhiNDhjMzE3MywKKwkweGJiNjZhZjBiLCAweDNkMjE2NGE3LCAweDQ0YmNiZGE2LCAweGU5ODBiODA3LCAweGMxNjdmODdmLCAweDc3YmM1YTVlLAorCTB4ZGNlMjhlYmMsIDB4OGU1ZWNhMzUsIDB4ZmZiMzdmNTcsIDB4ZTNhZmU0MzYsIDB4OTUwNzI2Y2QsIDB4MzExZmI3N2IsCisJMHhmOWEzMGFkOCwgMHgzMmI3ZWU2NSwgMHg2Y2Y4YzMzOCwgMHgwZDVmY2I2ZSwgMHg0NWNkNjdlNCwgMHgwODYzYmEwZiwKKwkweGE1OWE5ZDM5LCAweGY3MjA3ZTYzLCAweGNjMmY1MDAzLCAweDA1MjE4MzM2LCAweGQ5ZWNjMWY1LCAweGY4MGRhMzkyLAorCTB4MTg5MjA3YmIsIDB4M2Y1OGRjZmEsIDB4MTMzZTBmNGQsIDB4N2EyZGViOTYsIDB4OTc5ZTI5OWYsIDB4M2ZhMzMyZTYsCisJMHgxMzJjNGIzZCwgMHg1MGYwN2E0YywgMHg3MzI0YTQzZCwgMHg3ZDBkN2U5YywgMHgzODNjYTFiNCwgMHhiZjE4Yjg2NSwKKwkweDFjM2YyMmNmLCAweGU5NmY1ZGZiLCAweGJkZGQ5MDMwLCAweGZhMmZlNzZlLCAweGI4N2FjMzZmLCAweGYxY2U1M2QzLAorCTB4MjU2MjVjM2QsIDB4M2U3OTJkZmQsIDB4MzcxYTlkZDYsIDB4MzUyMGJjYmMsIDB4NWYxODUwZTEsIDB4NGUxOTI1NGYsCisJMHhlMWQxZjhhNSwgMHg3YWRjNTI3NywgMHg5Y2YxYzE5MywgMHgwNWRmYmEyZCwgMHhjOWE3N2VjYSwgMHhjMTZmZmIxMiwKKwkweDRkZGU0ZGQ3LCAweDcxM2U0ODUyLCAweGI4NGQzYjdmLCAweDAxZTIyNmNmLCAweGMxYjM2N2RhLCAweDdlNDQ1Nzk3LAorCTB4YjNmNjc2ZjYsIDB4MTZkNzJhOWIsIDB4MmU5YTlkMTEsIDB4MTUzMTNlOTEsIDB4YTY5ZGUyODUsIDB4OGZkOTJmOTYsCisJMHg5MWNmZDQ4ZiwgMHg5MGYxNGNmMCwgMHhmZTY1NmZjMywgMHg5M2JhZGZkYiwgMHg4YjhkNDVmOSwgMHg1YzdkNWI3YSwKKwkweDZhYjgwYjJlLCAweDM5YTNlM2MzLCAweGE2NGRmZjkzLCAweDRiZWFhN2I4LCAweDNjNGNmZjExLCAweDUzZmJkY2U5LAorCTB4ZDVhMDc3ZGMsIDB4MTdlNTJmZmYsIDB4OWE4MmJjZDQsIDB4NWJjYzg4NjcsIDB4ZGU2NDdhYTgsIDB4NmUwOTc1YWQsCisJMHgyYzlhZWZkYywgMHg5NGYzMDY1MSwgMHg1ZWEzYTY3NCwgMHhkZWRmNTU0MCwgMHg5NzY1MTU5YSwgMHhiZDNhYzhlZiwKKwkweGZmZDZkNjdlLCAweDZjZjlmYWMwLCAweDRkMzFiZmY5LCAweGJlNDhkNWQ4LCAweDA1ZTMzN2RmLCAweGU1NTNhZDAzLAorCTB4OWZmZTQ4ZWYsIDB4ZmU3MDdkNDMsIDB4ZDc5MjRkMzksIDB4ZjY3YTdhODMsIDB4NDRjMzc2OTIsIDB4N2RmOWRjZTksCisJMHg4OGEwZTViOSwgMHhjMmVkMjM4YiwgMHgzNjA3YjZmNywgMHgyYjVjOWJhNiwgMHg5MjYxN2M3MywgMHgxZTUwNzI2ZiwKKwkweDQ3NDNhNTQ0LCAweGNmM2FkZDM0LCAweDFmY2ViNzQwLCAweDc2ZDE2ZTkzLCAweDczYmNlMGYxLCAweGYxYTA4YmIzLAorCTB4OGFjYmRmY2YsIDB4YzgzZTI3ZjIsIDB4YTkxZmJkM2EsIDB4Zjc4MWZmYWQsIDB4NjM2YjFkNmQsIDB4ZWY0NDcyYjgsCisJMHhlYTI3NTkzYywgMHgwMTYyN2M0NSwgMHg4MGVmZjIxZCwgMHg3NGI4ZTY1NywgMHgzYzdiNjY2OSwgMHgxOTUwMzNjNSwKKwkweGI3N2QyNzhjLCAweGYyMDY1YmFjLCAweGQ0ZWY0MTBmLCAweDVjZmU0NjhmLCAweDFmNjdmMGEyLCAweDdlMjQzZWY4LAorCTB4N2VmNzA1NWMsIDB4MjU5ODA5NDEsIDB4MjJhZTRiZDUsIDB4MDlmNGI3M2QsIDB4ZmM0ZjA4NDMsIDB4MjdmMzkzYWYsCisJMHhjYjdlOTRhYiwgMHhkYTQ2OWQyZCwgMHhiNTY3ZjJlZiwgMHgxYTcxZDRlZCwgMHgxZmM4OGE1ZiwgMHgxOWZhNWY1NywKKwkweDczZjBkZGIwLCAweGE3NTU2ZmRlLCAweDU5NzdkZmI2LCAweDYyODcyOTcxLCAweDA4NGIxNjU5LCAweGE3ZDI2N2VmLAorCTB4MWJhZWM5NDcsIDB4NWIyN2NhYzIsIDB4M2YyMGJmMzksIDB4OWUwM2UwZjMsIDB4YzRmYTIxYjEsIDB4NzFmMTQ3NjQsCisJMHhmOWU5ZjY1YywgMHgyM2ZmNWI1OCwgMHhmNzFjYjFmMywgMHhmOWU4OTFhYywgMHhiZjc4Zjk3ZCwgMHhlYjQ1OTlkZCwKKwkweGEwZjNmNTU2LCAweGM0YzM3OWRlLCAweGRjYTA2NzdhLCAweDM3YTRmMjI2LCAweDllMmRhZWZkLCAweDM4MDRlNGY4LAorCTB4MmExNjFkODgsIDB4NmE4NWQyZjksIDB4MzY5ZDc0YmUsIDB4Y2ZiOTNhNWYsIDB4NDliOTc5YzcsIDB4NzE2ZGJkMDcsCisJMHhiZDg5Zjc0OCwgMHg1NWRiY2UxZSwgMHg1OWI3NzZlZCwgMHg1ZGQzZmNiMCwgMHhhM2ZjOTk0ZSwgMHg2NGI5NmZmMSwKKwkweGRmZWFiNzVhLCAweDQ4NGVmZWE4LCAweGJlYjBlNThmLCAweGY2NmJiY2UzLCAweGQ1M2JlYmQ5LCAweDMwZjZhYTJlLAorCTB4MDY1NjBlZDIsIDB4ZmVjOTZiZGIsIDB4ZTNiNmY4NGQsIDB4MmJlNzgyNGQsIDB4Zjc2OTFlYWYsIDB4N2ExMzhiZGUsCisJMHg1N2MxYThlMiwgMHg4Y2ZjOTdiZSwgMHhjZjFjNjNkNywgMHhhZmZhZjQ0MSwgMHhjNjdlMTZjYiwgMHgwMzAyY2Y0YywKKwkweDFmMDkxZmNiLCAweDQ1MGNkYmNhLCAweDc2NGZhZTZlLCAweGY1NGQ5NzVmLCAweDk5ZDBiZDhhLCAweGEzYjIwNjlkLAorCTB4MjNkZjcyNzUsIDB4Zjk1ZjEyZDcsIDB4ZGUxYmNlNjUsIDB4YmYwN2M3N2MsIDB4Y2NlZGI1ZmYsIDB4ZWIyNjg1ZjksCisJMHg4NjNmZjY3MSwgMHg3NDlhMzM4YiwgMHhhMmY4YTZlMCwgMHg0YTU2ZDZhNCwgMHg2ZGM1MGM3ZSwgMHhmMzU0NDc5NCwKKwkweDlmZWQ5MThhLCAweGM4YWNkN2IwLCAweGI1NTczY2U2LCAweGQ5ZWI0OWRmLCAweDFjMzNkNjI4LCAweGJlNWE5YWJkLAorCTB4ODczMWU0ZDAsIDB4YmJhOWJmOWIsIDB4NGMzMGJhZGMsIDB4MTZjYTVlM2UsIDB4ZGJkMjJlZjEsIDB4YTIxY2M4N2EsCisJMHhjNWYyZDlmNywgMHg2NWY4YjdmZiwgMHgwOTFlMGM5YSwgMHhlNGExNmNlZCwgMHgwODJmZmUxNSwgMHhmODBlNzgzZiwKKwkweDIwODNjZTE5LCAweGY5NTgzNzQzLCAweDM4MjE2YTdjLCAweDE3MDIyZTE4LCAweGRiYmI3Y2MzLCAweDYwMzM3YzRiLAorCTB4YmUyNDhlMDgsIDB4YmJmNTdmZWEsIDB4ZmU5YmUyMDIsIDB4NTdiNjI3OGIsIDB4NWYzYmY5YzEsIDB4MDZmZmY0OGEsCisJMHhmZTc4ZGJjNiwgMHhkYmJlNTc4MSwgMHg3MDM5ZmM0MywgMHhmNGFjZTE4NywgMHg2NzY0ZWFjNiwgMHhlNDUxZjEyNywKKwkweDUzYmJjYjc5LCAweDAxZDczZTY0LCAweDhiOTY3YWZkLCAweDAzZThhYjdhLCAweDFiNzJhNDk3LCAweGU2NGNkOGViLAorCTB4MWNkZTkwOGIsIDB4MzdhYWI0ZjUsIDB4YzJiZjYwMTcsIDB4ZDdhYzc0NGYsIDB4YjVlNDk5NjAsIDB4ODBhZWQzNjMsCisJMHg3MGFjNDU4ZSwgMHhhNjU3YTY3MSwgMHgyZmE4YTc3MiwgMHg5NWU4OTk1YywgMHgxNTU4NWNiMCwgMHg0YTZmZWEyMywKKwkweGM1MjY0MmY0LCAweGNiOTYwMTQzLCAweDBmYWMwMGY5LCAweDhiZDA4MDE3LCAweGY3OTM4MjM3LCAweDk2NDE5MTg5LAorCTB4NmYxN2ZkODQsIDB4M2U3MDk3MzUsIDB4YTQzOTAyMTYsIDB4OGUyODhiZmYsIDB4Yjc0ZTIyMWEsIDB4MmY3OTA4ZTYsCisJMHhiZWZhMTJjZSwgMHgxNzliNDZiOCwgMHhjOTViMzBmOSwgMHg0YTZiZGIxYiwgMHhlNzU2MTA3MiwgMHgxZDEyZjczOCwKKwkweDFiZmM5MzhiLCAweDdjYTMyYTFlLCAweGExMzYwZTkwLCAweDc1NTY3ZDdjLCAweGFhNzc5ZjJiLCAweDM1ZWQxYWZkLAorCTB4Y2RiZjg0YmQsIDB4ZTJiYzcwMTIsIDB4OWY3OTM2ZTksIDB4MjM4Y2U3MTMsIDB4ZjJjZGNmYzMsIDB4YTgwN2I1ZWQsCisJMHg3YjVhMTFkZCwgMHhjNTc4ZjBmOSwgMHg0N2Y3MWM3ZSwgMHhkNzg3OTVjYiwgMHgxYmIxNGM1NywgMHg0M2YxZmJlNywKKwkweGU1Y2JjZjI1LCAweGViZTY3OWZmLCAweGY4MGIzYmZhLCAweDdlNDNjMTRjLCAweDdkZGRhMzcyLCAweDA0NmZkNzljLAorCTB4OWZmYWQwYjAsIDB4NDAxNDcxMTQsIDB4NDdlNTA2NzMsIDB4ZDI2NTNjOTcsIDB4MTFmMTlmOTEsIDB4MDNjODYzOWEsCisJMHhkZGM2MWJmOCwgMHhlMzFiZmYwNCwgMHhjNzdmODI2NywgMHgyN2UwOTlmOCwgMHhmYzEzM2YxOCwgMHgwNGNmYzYwNywKKwkweDFlM2I3ZjE3LCAweDhkODAyMjgzLCAweDRlNGI0ZTM5LCAweDMwMWNlODc5LCAweDFjODZiZDcyLCAweGY5YzFjZjgxLAorCTB4N2YzYzhkYmIsIDB4ZjhjZGRkOWQsIDB4ZWJmN2E0MWQsIDB4OTk3M2E1ZTAsIDB4MGJjMTg5Y2QsIDB4NmZjMzRlOTIsCisJMHhmMGRmZGQwMywgMHg3ODcwZTlmOSwgMHgyMzI1Y2Y1MSwgMHhlODUzYmZlYiwgMHg2N2E5ZDQ1YSwgMHgxNWQ0NWZmYiwKKwkweDZiMDg2Zjg4LCAweDkxOGU0MTc3LCAweDM5NWYwYmViLCAweDFmZTM0ZjE4LCAweGQ3ZTIwZWI1LCAweGE3OTZlMTI5LAorCTB4ODJmOTQ0ZTksIDB4MDgzMzJkNjcsIDB4Njc3Njc1YmYsIDB4ZTUxYmVkMDksIDB4NTFmNjgzM2MsIDB4ODNjMWY1ZDQsCisJMHg3Yzc4Y2IxMywgMHg3NWEzNjRhYiwgMHhiOGU1MWYwNCwgMHg5MTFmNjIyMSwgMHhiNWY3NTA3OCwgMHg4MWJmZDEzOSwKKwkweDI1N2U2ZmZhLCAweDdhODI3NjhiLCAweDEwZGM4NDA3LCAweGVkNDM0OTFmLCAweGNmZjMyZDc3LCAweGNjYjA1Mzc0LAorCTB4N2U5ZGViOGEsIDB4MGExZTZlNGEsIDB4MjlmNjc1ZmYsIDB4NTQ3N2U3OGMsIDB4YzdjZjUzN2UsIDB4ZTk1MmZlMTUsCisJMHgxZGYyYWU3NiwgMHg2YjkwMWUzOSwgMHg2YWU3N2U4NCwgMHhiMjM2YTVkMiwgMHhjOWUzMjc0YiwgMHhlZTU3YWMyZiwKKwkweGU2NzU3NDE5LCAweGY0ZmI0N2JjLCAweDZlYzE5NGVjLCAweGM4ZDYzZTYzLCAweDVmODU2MmRmLCAweDZkZDg1ODU0LAorCTB4MzZiZDExNzQsIDB4NTljYTFmNzcsIDB4ZTRmYTYxNjQsIDB4YjNmNmM2MmMsIDB4YmM5YWVjNzIsIDB4ODlkNTYxNjcsCisJMHhlMTRhMWZjNywgMHhlYTlhNTZmNiwgMHhjZWJhNzgzYSwgMHg2MGRmZTM4YSwgMHg2ZDM2ZmVkZSwgMHg5M2Y1YWU2OSwKKwkweGNmMmM0NGJhLCAweDEwNzY5MzRmLCAweDljY2I2MDVjLCAweGU1YTM2NDlhLCAweDM3ZmQ3OTdhLCAweDQxZDk0ZmU2LAorCTB4YTM5NTc1MjIsIDB4MjliOWZkOWUsIDB4ZWNjMjY0YTQsIDB4OTYzOWFkNDMsIDB4Y2IwNzFmMGUsIDB4NGQ2NGQ2NzUsCisJMHgzMWI0ZDJmOSwgMHhkYjk3ZjY5YSwgMHg1N2Y1MzViMiwgMHhkNGQzOGZlNiwgMHhlNTVlZjNhYiwgMHgyYmI0ZDUyOCwKKwkweDUxNjYwYTRlLCAweDYwZmI4NzVjLCAweDY0ZTc4MGI5LCAweDdkYTI1ZGFmLCAweDFjNjJiZWVmLCAweDNmM2RhNzk2LAorCTB4Y2E2ZTQxY2IsIDB4ZGE3ZWE1NjYsIDB4ZDEyZjVhOTYsIDB4NjlmMTAwNjMsIDB4NzBlYTg3NDQsIDB4MWY0N2ZhZTUsCisJMHhlMjIyYzFhMiwgMHg2N2VlYzY4NiwgMHhlNzZkMzg3NiwgMHgxMzBjMzcxMCwgMHg3MTAwYWMyZiwgMHhkYzVjM2Y4ZSwKKwkweGEwMmYxOTEwLCAweGY0OTA3Y2ZlLCAweGQ3YWJmMTY3LCAweGRjNzBkYjU4LCAweDJlMjc1NWNkLCAweGVmM2VlMWIwLAorCTB4ODIzOGMxY2MsIDB4NDcxMjhkZWMsIDB4ODMzZmM3MGMsIDB4MDRkOTIyNzIsIDB4ZjBjOGY0ZmYsIDB4MDNmYzEwZGMsCisJMHgxZjg1MGJmMCwgMHgzZWY2OWMwNSwgMHhkZjA1MzNmYSwgMHg0YTdkYmY1ZiwgMHgwN2YzOGRmYSwgMHg1N2VmYzUxZSwKKwkweGFmYmU0NDYwLCAweDZmNzhlOGQ4LCAweGRlYTdlNTBkLCAweGY5Y2U4MTkxLCAweDAzYWUyNGUxLCAweDc3ZTgxYmViLAorCTB4YjBmN2M0MzksIDB4NDZiYmU5ZTgsIDB4MGY3N2YwYTcsIDB4OTRhYmE2YjksIDB4NzMxZmRmZmMsIDB4NzFhYWJmMTQsCisJMHhjYmEzNWRmYiwgMHhmMzcwZjU0MiwgMHg3MGY2OWEyNywgMHhhNmI3NzRiYiwgMHhiNmE2Njc3YywgMHhiYjk0ZWY3YywKKwkweGU3MGZmYmMzLCAweDVjNmMzNTk3LCAweDljYTM3NDYwLCAweDM5MmMzYzM2LCAweDhiZTg0M2JkLCAweDI4YTRmNWMxLAorCTB4MDk3YmExZmEsIDB4ZGI0M2RiZWIsIDB4NzE2ZDE5OTcsIDB4ZTE1N2VkZDEsIDB4NmNiNzk0NzgsIDB4YWFkZWM2MTgsCisJMHgxOTNhZWE3YSwgMHg3ZmFhODc5YSwgMHg3MWNmOWQ0NywgMHgwOGZiZTc3ZSwgMHhjZGY2NGY3MSwgMHhjM2IwOWFmMywKKwkweDhkYjgyNTFmLCAweDJmYjI3Y2UxLCAweGY0N2I5YzQ3LCAweDFkYzBmNjNmLCAweGVlNzlkMzVmLCAweGVhYmUyMmViLAorCTB4YTNmNjE0NGYsIDB4OWQzM2YzYTgsIDB4MDhmMTYxMGUsIDB4ZDY0NTVmYzEsIDB4ZDJlYzhlODAsIDB4MGY1OGQyYzAsCisJMHgyZDM1OWNhMCwgMHg4YWU4ZjM4YiwgMHg3ZTA4OGZjOSwgMHg1ZTRmMWU2OCwgMHg5YTBmMmRjNywgMHhlYjFmY2U5MSwKKwkweDNjYmIxYTc0LCAweDk2MTZjMTQwLCAweGQ5ZmQ5ZWZiLCAweGY3ZTkzYjhjLCAweGU5MmY3MTAyLCAweDJmYjNlZDdjLAorCTB4YWQ3ZDg0MDcsIDB4MWU2MzdhMTEsIDB4Yjc2MjlmZjEsIDB4ZDM1NjU1MDAsIDB4Yzc2ODMwNWQsIDB4NWUxMGNmNDgsCisJMHhiZjZiOWNhOCwgMHhjOTg3ZmRmNSwgMHg3YTExZWZjZiwgMHgzNzBhZjI4MywgMHhiNGUwNWZiMCwgMHgxZDBkZjM2OCwKKwkweGJiZjhlNzJjLCAweGQ3M2VmYzJkLCAweGI3OGZlYjU5LCAweGYzOTY4ZGRhLCAweGQ4NDY0N2E4LCAweDIxODc3OWI1LAorCTB4NTdmYmM1ZjQsIDB4NWU5YjNkMjIsIDB4ZDA1ZWY5OTcsIDB4MDRmNmFkYjEsIDB4OTExZmQzMDgsIDB4MjhkYTZjNzgsCisJMHhlNWFiOWNiMywgMHhjYmU1NWJhMywgMHg4MzBmNmNiYywgMHhkMTg1ZjUxOSwgMHg4M2E3MDZmOCwgMHg1NWI1N2ZlNSwKKwkweGQyN2FiN2NjLCAweDRlYzgzMzM3LCAweDhiZDZlZWFmLCAweGNkYzMyZjRiLCAweDViMDY0ZWIzLCAweGI3OWIzY2Q4LAorCTB4NWQ5Mjk2OTksIDB4NjAzZmQ3NTMsIDB4Zjc0OWY0NTUsIDB4MGE1MzQ5NTcsIDB4ODQzYjVjMDQsIDB4YzBiZjQ1N2QsCisJMHg0MTdlNDI5MCwgMHhlY2YxYzRiZCwgMHgzNTUxZWU5ZSwgMHgxMjNkYTc4NCwgMHgzYzI1NmNmOCwgMHg1YzY2MzVjNCwKKwkweDFjMzE0Y2RmLCAweDVlNTBiNzdkLCAweGY5ZjJkMjE0LCAweGQ3MWFhNTllLCAweGFjZWNmMWFhLCAweGYyNzY1OWVlLAorCTB4NWNlYzNmNjMsIDB4MDcyOTA3YjgsIDB4Y2NkOWVjOTMsIDB4ODc4MmQ3NGYsIDB4ODkzZGVlZmQsIDB4OTNjYTc0YWUsCisJMHgzZmVlNTM0YywgMHhmNjBjNDllYywgMHg2N2JkYmY5MSwgMHhmNzQ0YWM1MiwgMHgzYmZjNzAxOSwgMHg1Zjc1N2M2OSwKKwkweGY0YWUwYzdiLCAweDkyOTdkZTY2LCAweDQ0ZmU3NTJmLCAweGY2N2IxNTNlLCAweDY3YWFhMjcxLCAweGE3ZGJlNGViLAorCTB4ZjdlNzQ5NWMsIDB4ZjE0YWMwNzMsIDB4Zjg1OTc0ZWMsIDB4MjE0N2YwZDUsIDB4NmQ1ZWFhY2YsIDB4NmM0OWZjOTIsCisJMHhhNjMzZWRhYSwgMHhhMzRmMTFkYiwgMHhlNGE5N2U1YSwgMHhmNzM1ZGI3ZCwgMHhhZmQ2Y2YwMCwgMHg1ZmEzOGMxZSwKKwkweDU2N2Y5ODk0LCAweGIxYmM0NDM5LCAweDQ3ZjNmYWFhLCAweDU3ZjljNWFlLCAweGZlNGZiYzYxLCAweGVkYWVjMmRkLAorCTB4OTE3ZjA4ZmIsIDB4N2M2MGZkZjEsIDB4N2JlNjJmZjUsIDB4ZDczM2UzYTMsIDB4Y2RkZmRhMzIsIDB4NzNkZjFjNzcsCisJMHg2OWM3NDQyZCwgMHhlYTgxNzE4MywgMHhjYjE3M2U1ZiwgMHg1OGE4ZDZlNywgMHhmYzI4N2M4NSwgMHhlZTViNjQ3YSwKKwkweDdmNTgzNWRlLCAweDY2MDYyZmU0LCAweGZkMjczN2Q3LCAweDU4YWRlOGVhLCAweDU4YjlmOWJlLCAweDI0OTFmM2M2LAorCTB4MzkxZDkwZjAsIDB4ZWJjZjI5YjIsIDB4NzQ0YjA2YzEsIDB4NmZiMjVlYzEsIDB4Y2Y4ZTI1YjAsIDB4MzI3YjNlNjksCisJMHg1MTJmYjdlZiwgMHg3NmI3ZjI3ZSwgMHg3ZTQ4NDNmNiwgMHg3Y2MyZTg2YywgMHhlODhmZjc0NiwgMHhiOWEzY2JmYiwKKwkweGJjYzViODFmLCAweGNhNWM4YTBkLCAweDVmZGUxNDJmLCAweDI0MmZmNTRkLCAweGE1NDI3ZTczLCAweDYzMjdlMWRmLAorCTB4N2RhYzE0OWMsIDB4MmIyMmJlMDUsIDB4OTJlN2RlYjIsIDB4NWJkZDEwZTcsIDB4Njk3YmExNWMsIDB4Zjk3Yzg0YmYsCisJMHgwNmY3MDhkNSwgMHhjN2YyZjdkYSwgMHg4OWMzZjNmZiwgMHgxN2RhOWZiOCwgMHgxNTU1ZmVhZSwgMHgwN2Q5NmZhZSwKKwkweDg0ZTM0MGE5LCAweGRmYjQzYWU4LCAweGI2NmI2YzcwLCAweDNmMDU3ZjkwLCAweGYxOGM1ZTJiLCAweDI3ZDMwYzFlLAorCTB4MzUxMjNiMmIsIDB4ZDFhZWE2ZTUsIDB4N2E2MTgzZGUsIDB4NzI5ZWYwNjgsIDB4MDRlN2M0YTMsIDB4ZWQ1YzhhOGQsCisJMHhlZGRiYmEzNywgMHhmYmE1ZDc5NCwgMHg3MTNmNGNhOSwgMHhjZTg0YjUxZiwgMHhmN2ZmMDhhYiwgMHg5MWZmMTg5OSwKKwkweDVkYTJmNjdjLCAweGYzNTY2NzM5LCAweDRlNjBjOTNjLCAweDBiNzViOTIzLCAweDk3ZGMwZGZjLCAweDMxZTI4OWI3LAorCTB4ZjE0OTNkOWYsIDB4MzNiOTgyM2IsIDB4YjNmOWMzMGEsIDB4OWMxYmQ1NzcsIDB4N2I4OTMxZTcsIDB4OWY0MzMxOGYsCisJMHgxM2RhNzdlYiwgMHhmOTgzN2RiOSwgMHg2OTllNGQ0YiwgMHg0ZDA5Y2I1NSwgMHgwMTU1NjdmZSwgMHhkMjUwMWZiMCwKKwkweDg5YmQyYjY2LCAweGJhMTQ4N2NlLCAweDdhZWU5ZmRjLCAweGYxZGVmMThkLCAweDE4YmJhYmMwLCAweGYyZGM0ZjlmLAorCTB4ZDNiYmNkMzEsIDB4NWQ4M2Y0YzIsIDB4MTExNjNjNGEsIDB4YmY5ODM1NmYsIDB4NjllZmU0NTAsIDB4ZTg3ZTdmOGQsCisJMHg5NDQ1YmRiMSwgMHhjYWY0MzhmZiwgMHhkM2NhMjJiOCwgMHg4N2ZkOTQyZSwgMHhmN2M5OWQ3ZSwgMHg4NmRmZjY5YywKKwkweGY3Y2VjYjcwLCAweGI5MWUyZjM5LCAweDBjN2JhOGRlLCAweDhkNDNkMDkyLCAweGJhNjQ4ZmI0LCAweGM3N2FlM2ZmLAorCTB4ZjQyZTcyY2UsIDB4ODUwZDgxYzMsIDB4MWYzNTNmOGMsIDB4ZTg2NDcwM2QsIDB4YTc1ZDUwNzgsIDB4M2ViYWJlM2EsCisJMHhkZGI1N2M3NSwgMHg1ZjIyZWNkZiwgMHgxN2Y0NmZkMCwgMHg0MTVmZmQ5MSwgMHhmYjYxMzBlNywgMHgxN2Y3OGZlYSwKKwkweGJiZTg1YTI1LCAweDQ5MTNmODU1LCAweGI3ZTMwZTU4LCAweDJhYmNmNTdmLCAweGYwNmE3Y2YyLCAweDQ3Yzk1NjVjLAorCTB4ZmRhZGQzZWQsIDB4YWZmOTExOTksIDB4ODMyMWUzYWYsIDB4N2VlZjVjM2IsIDB4NzUyYTczY2YsIDB4ZGFmZGVhYmQsCisJMHhmZDg1YWI3ZSwgMHgyNTc2OTM5YiwgMHhlOTBlOWYxZiwgMHgxZGViMGVkNCwgMHhiN2JmZjIzZSwgMHhjN2U0MWM5OCwKKwkweDkwNWM5YTI3LCAweDM0NjlmODhiLCAweDlhZmVmOGZhLCAweGU0ZDEyZmRhLCAweDc5OTFlZmU2LCAweDIzNDQ4MWY5LAorCTB4ODFlNWJkZDAsIDB4ZjdmY2U1NTQsIDB4NDJiZDYwMmIsIDB4OWMxNmU4NzEsIDB4ZDc1NmFjYjcsIDB4ZDIxMmM1YmMsCisJMHgyY2ZlYWE4NywgMHgwYmRmODcxYiwgMHgzZWE5MWVlOCwgMHhkZjIwMjdlNCwgMHhkYjZiMTU5NCwgMHgyZGEzZjY4NywKKwkweGEwYWU3YmZmLCAweDZlYjI1OTYzLCAweDI0YjkzOGM4LCAweDFiNjVjODU3LCAweDllNDJjODc0LCAweGE4OWQxZDg1LAorCTB4YmYwZDFkZTAsIDB4YWNkN2VlMWMsIDB4NDBmY2Y0NTIsIDB4MDc0M2Q5YmMsIDB4OGFiNzEzYmIsIDB4ZjUxM2FiN2IsCisJMHg1MTA0ZWRiZSwgMHgxMjRiNDAwYiwgMHg4OWY0OTk1ZCwgMHhmYWI0YmFmMSwgMHgxY2M4NmM5YywgMHhkOGUzY2JiNiwKKwkweGM4NTA0ZjJlLCAweGNjZDRiNzdkLCAweGY3NDM1YmY3LCAweGMxMzJmZDVjLCAweGQwYzgyMThiLCAweDQxM2Q1NjA5LAorCTB4NGJjMzAzMjQsIDB4MmE3MGM1YzAsIDB4MGNiYzMzMzQsIDB4MDE1ZTE5ZGEsIDB4MDJhZjBjMWQsIDB4ODlmODQzM2YsCisJMHgxZWQ4MGRhZiwgMHhmZjY1NmVkYywgMHgzYTI1ZjJlOSwgMHhkNzY1Y2JiMiwgMHhjZjk3ZWQwZSwgMHgzYzM1ZjA1MiwKKwkweDU3Y2I1MDNlLCAweGE2M2UzYjljLCAweDg3NzJmNzJhLCAweDdjZDhjYmM1LCAweDJmMTU3YmU2LCAweGVjNGZlMjI2LAorCTB4MzRkZTAzMTcsIDB4YzAyMDkzODIsIDB4NDYyNjRjZTMsIDB4ZGQ3OGE2Y2UsIDB4NmI3ZWY3YzYsIDB4YmFlNWM5YzEsCisJMHg2NTQ3YzRiMywgMHgxNzc3YWRjMCwgMHhkYTk3ODEwYywgMHg5ZTY0ZjlhMSwgMHhiOTAzMjdjMiwgMHhlOTUxZjhjMCwKKwkweDhkYWU0OGY1LCAweDMwZGQyYWNiLCAweDdiMjM0YzUwLCAweGM4NGY0ZDEwLCAweGM1OTY3NWEwLCAweGE3YTcxY2Q2LAorCTB4NWYzZmI3MjIsIDB4N2E4ZjUzMzYsIDB4NjZiNGFjYjQsIDB4NWY5MGE5MGQsIDB4ZTUxNTRlZTYsIDB4ZDMyZjM1ODksCisJMHhmM2ZiN2Q1MSwgMHg3MTcyOGE5NywgMHg4MWMxYTk0ZCwgMHhjYmRhZTg1ZSwgMHhmYTgyNWU2NiwgMHgyN2RjYWRkOSwKKwkweGEwMTFhMzM3LCAweGI2NzI2MzdiLCAweDJiNzYxNzM4LCAweDcyNGRjYWY3LCAweDJmYmE1YWU2LCAweDU4MGRiYTY2LAorCTB4MDA2M2I4ZGYsIDB4MjJkN2VjZmMsIDB4YjhiYzkxYjcsIDB4YjM3YjFjNDUsIDB4M2FhZmQwNTUsIDB4MmU0YjdkZDYsCisJMHgyZmIzMzNkOSwgMHhiODc0ODZkZSwgMHgyOGRkNmQ3OSwgMHgxOGY3OWJiMiwgMHhhNDlmZjhjNSwgMHg4MWJkYzZkYSwKKwkweGM0OTkzMmY4LCAweGJmNzU1NmJkLCAweGMxODllZjU4LCAweGFkYjI0MDcyLCAweGFkMGNjOTY5LCAweDU5Yzc1ZDRiLAorCTB4ZTlkNzdiY2MsIDB4Nzc0ZmNkZTYsIDB4MDIzZDIwNmYsIDB4MTVjNzA3MzYsIDB4YmVmYjE0NjMsIDB4MzRjNGNiNjUsCisJMHgxZDcwMzBmNCwgMHgyMDQ3NWU1NiwgMHgwYjRkNzcyZSwgMHhlZTkxZGQ1NiwgMHgxYmM2ODQ3YSwgMHhmODdjMTM4OCwKKwkweDc1MjlkMTA4LCAweDc1Y2JlODc4LCAweGM0M2I5NDNlLCAweGRmYjU4MWY3LCAweGJkMjNlYWJjLCAweDA0MmUyOWY0LAorCTB4YWU0ZGY5YzcsIDB4NDc1YTcxZmIsIDB4NTE5MDJlOTMsIDB4NDVmYmY0OGEsIDB4MDUwMDdhMmMsIDB4OTA5NmJlMjEsCisJMHgwZjEwNzM5OCwgMHgxYWYwNGU2ZCwgMHg3Nzk0NWU1OSwgMHg5OWY5Y2EzNiwgMHg4YjAzMTcyYSwgMHg0ZmM0M2M3MSwKKwkweDhiNTVjYjk5LCAweGNjNTQyMmVlLCAweDYwOTM3ZTZlLCAweDE2YmRiYmE1LCAweDE3OWU2ODZiLCAweDcyNGQzZDY4LAorCTB4ZTRmODgxYjAsIDB4YzYwN2UyNjgsIDB4Yzc2ZTU5NGYsIDB4ZjQ1NGZlMGEsIDB4OWViNmY3NTksIDB4YTI4OGM2ZGIsCisJMHhiMmU0YzIwYiwgMHhhZjg5ZGI2OSwgMHg2Zjc0ODZmZiwgMHg1MDcxNjYzYSwgMHgzZTNjOTBmMywgMHhlNzljNDZiNiwKKwkweDQ2ZmEzNDVhLCAweDVkMDlkMzk1LCAweDljMzgzZTI2LCAweGM1YTJmNWI4LCAweDA3ZDI2ZWQ0LCAweGI3YTRkOWJkLAorCTB4ZGEwNmY3MjcsIDB4ZTgxZTdkYzgsIDB4Yzg0NjNiZGUsIDB4N2ZkN2VhODksIDB4N2Q4YjlkMjMsIDB4ZmM4Y2NjZjksCisJMHhmOTEwNDA5MSwgMHg4MzljNWUyMywgMHg4YWY0ZmM3MywgMHhhZDVmMDczOCwgMHhlY2E5M2RlNCwgMHg3ODhiN2RlMSwKKwkweDU3M2I4ZDU0LCAweGRlMmRiY2Y2LCAweDZmZjA3OTg1LCAweDEyMmJiZDA1LCAweDcxM2U5NjdmLCAweDZmYzQ1NWUzLAorCTB4ZDQ4YmVmOTEsIDB4Njk0OWI0NzgsIDB4N2JkN2EyYjcsIDB4ZjIyN2VkMzcsIDB4YzUxMzUxYmQsIDB4YmZjMzQ1YTMsCisJMHhhMjdhNmEzNywgMHhjOGQxZTM5NiwgMHhiOWJkNDZmNywgMHhiMTRhZmU0YSwgMHhhMWY4YTA4ZiwgMHhiNDM2OTQ0YiwKKwkweDg3YzcwYjNmLCAweGY3MDlhZjQ2LCAweDM1YzlmYWI2LCAweGQzOTUyYjBlLCAweGM3ZDYwZTJkLCAweGUxMGUzZDU3LAorCTB4NjQ4OWUxZWQsIDB4OWU1NTE5ZTYsIDB4ZDg5M2FkOTcsIDB4NWFmMTU2YmYsIDB4NDljOWJjZmMsIDB4N2U3ZTI4ZWIsCisJMHhlOGNkZmIxNCwgMHhlOTdiOGJlZiwgMHhkZTkxM2U0YSwgMHg4MzdiZDAxMiwgMHgyY2MxODljZCwgMHhiOWJhNjdiYSwKKwkweGZlNDFkZjNiLCAweDlkNWExZmY4LCAweDY4NDMwZmYwLCAweDUwM2M2YTdkLCAweDRiNTRiZjI3LCAweDJkOGU4N2VmLAorCTB4M2YwYjM4YzIsIDB4YTY3OWVlYWQsIDB4ZDVlNThjY2QsIDB4MTA1NWU5ZWIsIDB4MTNmMzg0YTUsIDB4ZGYyYWFmYzgsCisJMHhjNjk3ODMyOSwgMHhkNTQzZWYwMSwgMHgzOTE1M2IwOCwgMHhjMGU5YTUzNywgMHgxODhmODYxNiwgMHgwZGIwMDhkYiwKKwkweDI5MzAwZjkxLCAweDRmY2Q4YmY0LCAweDM5YzdkNGQyLCAweDRmZjRkMDJlLCAweGQ0ZDJjY2E4LCAweGY3ODhjNWI3LAorCTB4ZmE3MWUwMzIsIDB4ZWY0MjJhMGIsIDB4M2Y5ZDEyNDgsIDB4MDA4M2Y0ZDEsIDB4YmQwOGFkZmUsIDB4N2UyN2I5MTcsCisJMHg0ZjdlNGVlYSwgMHgzY2UwNmZlMiwgMHgyNTY1ZjI0NSwgMHg3OTI2ZjY5YSwgMHg1ZGZjNGNhYiwgMHg0MzVlYTVmZCwKKwkweGE2NTI5ZmNmLCAweGI5NTZmMTFiLCAweDljMWNmZDFiLCAweGI2OWY0MjY3LCAweDAxZTAyNjNlLCAweDViYjMxN2VhLAorCTB4OTg0YmM5YWYsIDB4ODVmMmRhNmMsIDB4NjI5ZTRhNzksIDB4ZTRkNThjMmMsIDB4MmVmMTA2MjksIDB4NjFkOGZlZjgsCisJMHgwNTQ1ZjMxZCwgMHhiYWFhZmNlNCwgMHgwMDZjZjA4YywgMHg2ZjFhMmRhZiwgMHg1ZGY4NDBjNywgMHgxYzVhYzZjNywKKwkweDQyNmE5NmY0LCAweGM5MzJjYmNmLCAweDhiNGJhYTQxLCAweGI1YjM1MWZmLCAweGQ2ZWQxZmY4LCAweDUyY2M3YmUyLAorCTB4OWJkM2JlMmQsIDB4YjBiZWY4YjUsIDB4NGNkNzhiNDUsIDB4ZDk2ZjE2OGYsIDB4ZGE2ODI2ZWIsIDB4MzQ2YmRiZGIsCisJMHg1NzhkYmNlNSwgMHhlNDVmZGE2OCwgMHg4ZjI5YTE5ZCwgMHg0ZDdhZjE3YiwgMHg4NThlYzJmYiwgMHhhZWUyZmE5YSwKKwkweDk1N2E5YWU1LCAweDgzZTM4NmNmLCAweDExZDViZWYxLCAweGRkMDNhNmZjLCAweDc0YTBmODY5LCAweGYzMzVjZmU3LAorCTB4OWZmNDUwZmQsIDB4MDVlOGE3OWYsIDB4MmJkN2ZlODUsIDB4ZjhkZGU1NzYsIDB4Yjg5MmY3YzMsIDB4N2ExNThiNGUsCisJMHg1MGRmMzA3MCwgMHhlZTc4ZTA2ZCwgMHg2ZDcyNWIzZCwgMHhjNTA1ZTkxYywgMHg3YjE0YjlkZSwgMHg4OTRmMzkwNywKKwkweDFkOTQ1NWIyLCAweGEyYmY3MTdlLCAweDM2YWI5ZjY0LCAweDJjZjc0NmRlLCAweDhhOGFmZGM0LCAweDA5YjVlZGMzLAorCTB4MWRlMjNlZDQsIDB4NDk0YWY0ZDYsIDB4ZjkxZGRlNzMsIDB4NjdhNjZiMmUsIDB4ZDEyMDljYWQsIDB4M2Y3MTQ0YmQsCisJMHg4NDFlZjIzMSwgMHhkZWFiM2VmYSwgMHgyNzM5YTMxOSwgMHg5NmJkZWUxZiwgMHg3OGMyNWY5YSwgMHgyZjE0OGMwMSwKKwkweDNlZmNjY2U4LCAweDcyMWZkYTMxLCAweDVmZDk5NDZjLCAweGY2ZmZiMzczLCAweDc5Y2RjOTY3LCAweGZlY2M2YmE3LAorCTB4ZWNlZmUyMGMsIDB4NzlmNWVlYjEsIDB4M2FhM2I3ODgsIDB4M2RmZDhkODcsIDB4MDBkNmZkZTUsIDB4MmZkZjhjNmQsCisJMHgzY2E0Y2NmNSwgMHhiYjg2MDBlOSwgMHhkZmQ0ZDc5NCwgMHhiZDI2NjNiMywgMHg1YmU1YzQ1YiwgMHhhYzIyMTUwMywKKwkweGU2OGYzZmE2LCAweDcxYTQxZmI5LCAweGJiZDY0ODBlLCAweGJiZWZiMTRiLCAweDIwY2YzZTEzLCAweDczYTI2NjdiLAorCTB4ZmYzZTEyZmUsIDB4ZmMyZjM4N2UsIDB4ZWUxNDdiZmMsIDB4NDA2ZGY1MGYsIDB4NzlmMGYzNjcsIDB4OGUyNWNmZWUsCisJMHhjMWE3M2U1MywgMHg3N2U0YzJhYSwgMHg0Zjc5NDE5ZCwgMHhiOWI2ZTIyYSwgMHhiOGQ0YmUwYSwgMHhmZjMyOGU2ZCwKKwkweDI5NjIxYzAxLCAweDVkYjlmM2VhLCAweGFjYmM2NjdmLCAweGUyNTNlYjQ4LCAweDE1ODc2NmJkLCAweGFjNzFiZmM3LAorCTB4N2JlZjg0YTUsIDB4MjIxZDRiMzksIDB4YjhlMzU3ZGUsIDB4YjFmN2YyMzEsIDB4ODdiYTY3YjMsIDB4ODhlZDIyYjUsCisJMHg5Nzg2OWUyNiwgMHg1N2NjODc5MiwgMHg0MmM1ZTY0NiwgMHgxZmUzMTZmYiwgMHg3NmNiMWY1OCwgMHg3NGZhYzBlOCwKKwkweGM2ODYzZmNlLCAweDg1ZjljYTNmLCAweGZiZGFjZGI5LCAweDNlNWJmM2RkLCAweDAyZGZmMGQyLCAweGZhOWEyN2NmLAorCTB4MzBkMDRhNDAsIDB4NzgxZmY3MDYsIDB4MWJkNGY0NzUsIDB4YWZmZDdmMTAsIDB4OWUyODJhOTgsIDB4ZTRmNWJhNDUsCisJMHgwZmM2ODc5NSwgMHg4OTc3OTdkYywgMHhiNGNlMWJmMCwgMHgxZDc5Y2ZjZiwgMHg1YWZkY2FiZCwgMHg1YmZiOWY3NSwKKwkweGQwMzk3MWY3LCAweGVmYjg4ODFhLCAweGJmYzRkMWU0LCAweDA5ZmUzNDJhLCAweDBlOGZjOWYyLCAweDQzMWMyMzRhLAorCTB4ZTc2NjczZTUsIDB4NTdhOTM4OGIsIDB4YWJkYTc3NzksIDB4NTVlZDNiYmMsIDB4MmFmNjg5ZGUsIDB4OTU3YjQyZWYsCisJMHhiYmVhYTE3NywgMHg5YzA5NWVkZCwgMHg4ZTY0YmY3NCwgMHg4MTZhN2FlNCwgMHgwZjc2ZWZjNCwgMHg5NjliM2VkMSwKKwkweDVkZTg4YjA3LCAweDYwNzE1MzYzLCAweGJiZjMyNDllLCAweDdkZjQyM2RkLCAweDQ1YmI3Nzg4LCAweDY5ZjQ5NTkyLAorCTB4NmVmNDM1ZWEsIDB4Y2YwOGYwZjcsIDB4ZDlkOGIyNTEsIDB4NTBkNzg5ZjksIDB4MjhkODcwYmMsIDB4YzVmNGEzZTQsCisJMHg3YmQyNjY2ZiwgMHhkZDUzYzdiZCwgMHgzZmJmODljNywgMHhmMzFmNjQ5NSwgMHg5ZjEyZWJmMywgMHg2MDMzODMyYiwKKwkweGVmMTY3MTljLCAweDEzY2JiZjdhLCAweGYzMjczNGU3LCAweDBhODliOWM0LCAweGJkMGJlNjQ3LCAweDljYjA0YTU2LAorCTB4MmU2ZjcyZTgsIDB4NjhkYWJiYmYsIDB4Mzg1Nzc3ZTIsIDB4NzYxNzUzOWYsIDB4N2RmMjIyMWYsIDB4NGQxZmM5NWMsCisJMHg2YTFmZDIzZSwgMHg1ZjIxMjdkZSwgMHhiYmQzMzc5YywgMHhjYTY3NWEzOSwgMHg2ZWYxMjZmZCwgMHhhMGNmZTAyZSwKKwkweDBmNzQ3Njc3LCAweGJkZjI0NWNhLCAweDFkZTI5YzFiLCAweGYwYTZkZTVlLCAweGY5MDkzMGY3LCAweDQ1YmQzZGNhLAorCTB4YjdhNzc5YTAsIDB4N2VjMGU3YjIsIDB4ZTVhZjI3ZDIsIDB4NTNmMzkzYjksIDB4NTZjN2VmNDMsIDB4N2Y2NzZmYzYsCisJMHhjNmRmMjBhZiwgMHg3OTdhZTJmMywgMHhlZTE3YThmZiwgMHhjNzljZmEyNCwgMHg3ZTU2NjE3YywgMHhkN2ZmZjQ3OSwKKwkweGY1YmMzODYwLCAweDVhM2ZmNjJmLCAweGY3N2ExOTkwLCAweGFkZGVmNjE2LCAweGFmMmMzZjIwLCAweDM0M2ZhZWE3LAorCTB4NDJlNWU5Y2UsIDB4ZTVhOTdiY2QsIDB4OTNkZDhmNDMsIDB4NzQ4NjcyNGIsIDB4NTk0OGY5MTEsIDB4ODg2MzNmOWEsCisJMHgwNWYzZDNmZSwgMHg3NzRmZWZmZCwgMHg5N2Y5YTA0ZCwgMHg2MGJjOGIzNywgMHg2ZmRhNmY4OCwgMHhkY2U4OThmOSwKKwkweDNlZjIxOTYzLCAweDcyM2ZkYWJmLCAweGY1YjcyYjlmLCAweDlmNzAzZTMwLCAweDYxN2Y2OGYzLCAweGYwOGNiY2ZiLAorCTB4YmZiM2VlYTUsIDB4MDVhM2VmN2IsIDB4ZGZkZjczYjYsIDB4NmU3NzdkZjcsIDB4NmQ3MTgxMWEsIDB4NzY3OTUwZDIsCisJMHg3ZTYxM2ViNCwgMHgzZmVkNDk5OSwgMHg4ZmVkYWY1NiwgMHhiMWU1MzkwZSwgMHhkMWRlNDhiYiwgMHhlMjU0ZTk2ZiwKKwkweGM0Y2JiMjFlLCAweGVlNWRhYTE3LCAweDI5MjBlMjU0LCAweDAyZWQ4M2IwLCAweDcxNzI0YmNkLCAweGZiNjFlNGI3LAorCTB4ZGEzYmU2YTgsIDB4OTQ3ZmI0MjQsIDB4NjFhZjcwNTcsIDB4Njg1ZjIxN2IsIDB4Nzc1ZjEwNzEsIDB4NDlmOWVmMjIsCisJMHg1OGNlZjQxZSwgMHhjNDQ3NzNjZSwgMHg3NThiM2ZkNywgMHhiYzc4NDRkZiwgMHhhMzM1YWZmOSwgMHhmMmRlZmUyOCwKKwkweDM4OTQyYjk3LCAweDcyYWJkODRlLCAweDY5Y2IzZjg1LCAweDQxNDdkYTdlLCAweDk5NmRmMzAyLCAweDczMGFiZWIyLAorCTB4NTVjOWZiMzMsIDB4NWU0NTkxZTAsIDB4YWM5M2M5NDMsIDB4ZGZmMWMxZGYsIDB4MTQxYTAxZmYsIDB4NDNkMGFhYWYsCisJMHgwMDAwNDNkMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB1c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNhOThmOGEsIDB4MzJlOGY0MzAsCi0JMHgzMWU4YTQzMCwgMHg0M2Q0ZGMzMCwgMHhjZjEyZDM4OCwgMHhiZjRjYTJlMSwgMHg4MzAzMGIzMCwgMHgwMzhiMTAyOCwKLQkweDdmMTAyNGIxLCAweGY4NjA2NDYzLCAweDdlYmM0OGNlLCAweGJiMDQxMTVlLCAweDgxODE4MDQ1LCAweDA3MGZjODBmLAotCTB4MTkwNWZmZDIsIDB4MzMwYjNlMTgsIDB4ZjkwM2YwMzAsIDB4NmRmYzgwYjMsIDB4ODgwODdjNDAsIDB4Mzc2MjgwYzMsCi0JMHgyMDY3ZjQ4MCwgMHgwMmM0MGZiZSwgMHgxN2NkZjgyMiwgMHg0MTdmMjAyNCwgMHgwN2ZmOTUwOCwgMHgxMDQyZmY4ZCwKLQkweDYxNjM3ZWJmLCAweDA0OTZmMmZjLCAweDRkZTFiMWU0LCAweDBmOGNkYzA0LCAweGVmNDBhNzdmLCAweDZhODdlMDQwLAotCTB4NTU3ZDdjYTgsIDB4YTAyYjA2MDYsIDB4ODQzYTg3NTgsIDB4N2U0OTA4ZmYsIDB4NDBjYzUwMTYsIDB4OTNlNmMyMTUsCi0JMHgwNTUwNjA2NywgMHg2MWFiMWZmMiwgMHgyODFmOTczNywgMHg1Zjk0MDZhZiwgMHgwMDA3MzUwNiwgMHgxNWU1YWM2ZiwKLQkweDAwMDAwMzY4CisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgxODk0NzM4YSwgMHgxODM1N2ExOCwKKwkweDMyNmIzNjE4LCAweDMxNjg2ODMwLCAweDIwMzE4ODMwLCAweGFmODU2OGU0LCAweDlmYTY1MzcxLCAweDgxODE5NTliLAorCTB4ODFmOTg4MTcsIDB4ZDc4ODEwNTgsIDB4NmMzMDMxMzMsIDB4ZmY1ZTIyNjAsIDB4ZmIwNDUxMTEsIDB4YzMwMzIwOWUsCisJMHgxOTdmMjA1MSwgMHg2NjE0ZWU5MCwgMHg2NDA1NTg2MCwgMHgyZmUyMDMxZiwgMHgxMDgwYmU0MCwgMHgxMDBjODMwMywKKwkweDYwNjExNWZmLCAweGMxZDIwNTMwLCAweGM0MDM2YzQwLCAweDliZjE0NWM3LCAweDdjODA4MjdmLCAweGJmMmEwOGJjLAorCTB4Mjc5ZjhkMWIsIDB4MjVmZjVmOGMsIDB4MGZmMmZjMTEsIDB4YzM2M2M4MDgsIDB4YzdlNDE2MzIsIDB4N2EwNTIyNDcsCisJMHgyOTM3MDIwNywgMHhjYThmZjJhMiwgMHg1NDNjMzAzMywgMHg1MWQwNjA2MCwgMHg5MTliZjA4MiwgMHg2MjgwZWRlNCwKKwkweGVjMjFlNGM3LCAweGI4YzA5MjI5LCAweDI4YjVjYTA3LCAweDJhNzczNzYyLCAweDUwMDRmZTUwLCAweDM0ODk0YmNlLAorCTB4NDFkM2RjZjcsIDB4ODQzNGFmZTUsIDB4M2ViYzAwZDAsIDB4MDNhOGU0MTQsIDB4MDAwMDAzYTgKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdXNlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHg0NTE0NzgwOSwgMHhmNGY1NzBkYSwgMHg3MzI2NGNmNCwKLQkweDEwOTA5MjY0LCAweGE3MDkzMGFlLCAweGUxNWMzODBhLCAweDEwODRjYTMwLCAweGE4ZWEyNDE2LCAweDEzODhhODg4LAotCTB4MmU0MjEwODEsIDB4ZjU3MTc1ZDEsIDB4MTFjM2E3ZmIsIDB4OWUzNzU5NDEsIDB4MWQ0N2ZhY2IsIDB4YTIyY2RjMTAsCi0JMHg2MDE4ODgwNiwgMHhiMjAwYzFjMCwgMHgxNzYxYmI4YSwgMHhjMzYzZDcxNSwgMHgwMTkyMWEwZCwgMHhlNWM1OGYxNSwKLQkweGVhYWRmN2FiLCAweDQ0Y2VlZTk5LCAweGVmZjNlYmEyLCAweGUzZmRmYjdlLCAweDU3NTQ1M2UzLCAweGVmNTU1YmY1LAotCTB4NWRiZDZmNWQsIDB4NzEwMjRhMzEsIDB4MDJlNDI2ZjYsIDB4ZjIxMWM2ZmMsIDB4NDkwODQ4OGMsIDB4ZTM2ZDk2ODksCi0JMHgxNzQ5YzdjMywgMHg5MmNkZTQ0MiwgMHg4ODQwYWQ2YiwgMHgzNDNkYmFmMCwgMHhmYjIxMDQ2ZSwgMHgzMzAxMDk1NiwKLQkweDU4NzY4N2FkLCAweGQzZjVhMTA5LCAweGNjMDdkNzM1LCAweGQ0M2ViNDE5LCAweDlhZmFjMWVjLCAweGJlZTdhYzFjLAotCTB4NDhjM2FlZmEsIDB4OGFhZmE1ZWIsIDB4NzYxYmE4NDYsIDB4ZGIzNDcyOWMsIDB4MzczNzI5MDgsIDB4N2QwNTcyM2QsCi0JMHgyNDU1N2UxZSwgMHhjNDUwZTlhYiwgMHhiMjQwYzUzNSwgMHg0NzFlMzkwOCwgMHhhZDE5NmZkOCwgMHg2ODUyMTJhNywKLQkweDU1ZDJkNTYxLCAweDNjYzI2NzNiLCAweGM0Y2MxYThhLCAweDZlOTRlMTQyLCAweDE1ZWQ3Yjk5LCAweGFmNzczZWI0LAotCTB4ZTk0YmEwNDQsIDB4Nzc1MzRhZGEsIDB4MTAxNzlmNWEsIDB4NjhiZWEwZWEsIDB4NGUzODg3YzcsIDB4NTQ1Mjc4ZGIsCi0JMHg0ZjkwODgzNywgMHgzNWM0NzFmZCwgMHg0ZDFkZDY4MCwgMHhlN2QxMzdhOSwgMHgxMzBkODFjNSwgMHg3YWYxN2ZhMSwKLQkweGZkYTA2ZGMxLCAweDdlNzY2YjhiLCAweGViOGJmMDA0LCAweDg1MjJiZWE1LCAweDRhZDZiZjNmLCAweGQ4ZDkwMzVjLAotCTB4NjNhYzA4MTcsIDB4ZGYzMGI1Y2UsIDB4YzQ0ODNmZDIsIDB4ZTc0NWViNGMsIDB4YzAxMTM2ZWYsIDB4ZTRkYWIxOTEsCi0JMHg4ZmY4YzNiNSwgMHgxODc2NWM5YSwgMHg1MWM3MTZhNywgMHg3YmZhNTlmMCwgMHhhZjdkMGUzYSwgMHgwZGMxNjVlYywKLQkweDEwMzMyYjRiLCAweDc1YTdjYzFmLCAweGYzZmE2NThiLCAweGE1NTc1ODM2LCAweGJmYmMzZmE5LCAweGY0MTM0MWU1LAotCTB4ZDgyODFiOWIsIDB4ZmNjMTcxNmMsIDB4YzIyNjk5NTYsIDB4OTk1NjZiM2MsIDB4ZTE0NTA3MGEsIDB4NTE3ZGFmY2QsCi0JMHgyYmUzYWYzMywgMHhhOWY1NzRmYiwgMHhhN2U1ZjVkYSwgMHg3MzVhOGE3ZSwgMHg4ODRjNWViNCwgMHhmMzA2Y2VhNywKLQkweDFmYWU5ODBlLCAweDU0N2U3ZDFjLCAweGNmN2E0NDQ4LCAweDJiODkxNWFmLCAweDUyOWYwYTJlLCAweGVmY2I5ZjFlLAotCTB4MWYwMjdmZDIsIDB4ZDYwN2I3NmMsIDB4YjVlOTQ0NjYsIDB4OGVmZjA5YzAsIDB4OTNhY2ViZDIsIDB4Y2UxOGNmZDMsCi0JMHhjYTU3YzM1MiwgMHg3NDBlODA0NywgMHgyNzdlZDUzZSwgMHhkM2Y5OGY5NiwgMHhlZmMyN2NiMCwgMHhlNTNkYmM0MiwKLQkweDRhZTU4ODFmLCAweDNmOWYxYmJmLCAweDY1OGQxZmVkLCAweGU1ODNkZjhkLCAweDU4NDlmZWIzLCAweGVjNWVmYzA2LAotCTB4MWQzZmRhYjcsIDB4MWY3ZTM1Y2IsIDB4NWZjMTdmM2UsIDB4YmZhZDY1ODQsIDB4ZjNhZjlmMDIsIDB4YmQ3MmM0MmYsCi0JMHgyZmU3YzY1ZiwgMHg1OTYxOTdmYiwgMHg3MmM2YWZlNywgMHg5NjI1N2ZhMywgMHhmNjAwZmVmNSwgMHhkN2U5Y2NkYiwKLQkweGU3YzNhZmUwLCAweDU4MGRmZDViLCAweDJjMjFmZDA2LCAweDYyZjdmODc3LCAweGQ1ZTM4MmI5LCAweDhjNzI0ZDkxLAotCTB4MGYwZTJmMTQsIDB4MjA3MTUyNzEsIDB4MWM5ZWY5NDksIDB4YmM5M2Q2ODksIDB4NDMzYTllYWMsIDB4N2FkMTMxY2UsCi0JMHgyOWQ2OGZhYSwgMHg4NDk3YmE5ZSwgMHhkZWI0Y2M3MiwgMHhhN2I1ODJiZCwgMHhjN2M2NDAzZiwgMHhjY2JhN2FkMSwKLQkweDc4NTczM2RhLCAweDNkNjg1YmM2LCAweGY3YjU5YWIzLCAweGM3Yzc5MWFmLCAweDAwZmY3YWQzLCAweDdkNzRiZjZiLAotCTB4ZDY5NWJjNjgsIDB4ZWQ2M2FkMmYsIDB4ZDcyNDgyNDMsIDB4NDI0M2ViNDYsIDB4OWY2YzNlYWMsIDB4ZWI0ZWQ3MjcsCi0JMHgzZDU4OWFjMywgMHhkNzM5MjNlYiwgMHhjZDU5ZWI0MSwgMHgyZGIxZmRlYywgMHg1YTA0ZGNhMSwgMHhlZDY2MWIxZiwKLQkweDE2NmY5ZDU3LCAweDY3ZjgzMTVkLCAweDQ1OWJlNGIzLCAweGYyMDMyZDI4LCAweDFiYjE4ZjE0LCAweDc3N2M5YmFkLAotCTB4OTdjNTM3MTMsIDB4MWM2M2Q1M2MsIDB4YzkyM2YxNDMsIDB4YmU0YmJlZDgsIDB4NGMxYmRiMWQsIDB4MjdiZmI2MzIsCi0JMHg1NmZiNjIxNywgMHgyN2VkODAyOSwgMHhkZjZjNzJlNSwgMHhmYjYwMGE2YSwgMHhhYzQyZjJiNywgMHhiNjEwYTUwNywKLQkweGIxMmIyYWRiLCAweGMyMTRkMDdmLCAweDg3Y2FmNGY2LCAweGQ0ODc3ZGIwLCAweGNhZWVlZDhjLCAweDg3N2RiMWM3LAotCTB4MWZkYjE5YTksIDB4OTllMzUyNWIsIDB4MGIwZmViNDAsIDB4MmY4MWE3YmUsIDB4MjJiZTBiMTcsIDB4YWRmODA3ZDIsCi0JMHhmOTRiY2QyZSwgMHhkMzIwNGFhZCwgMHgwMTE3YmY4MSwgMHhhYWY2ZDI1MywgMHg0N2Q0MjY2ZSwgMHg3YWNlM2Y5YiwKLQkweDZmMzgxNDVlLCAweGUxN2E4MTc2LCAweDIwNjUwZjBiLCAweDhlMTFlNzljLCAweDE3ODhlMTQ0LCAweGM5ZjU5Mzg3LAotCTB4YWM5YzBkNjgsIDB4MzgxNDhhNGYsIDB4YTU4ZTExZWIsIDB4N2YzNjcwNzMsIDB4OWYzYjU2MzIsIDB4MzgxNThhNGYsCi0JMHgxNDkxOTJhZiwgMHhlYjczYmQ4ZSwgMHhiNjViZmFjYSwgMHgyYjdmM2U3NiwgMHhjMGVjZTA1MSwgMHg2ZTc2MjRmOSwKLQkweGI0YzcwZDNlLCAweDE2Mzg2OWY4LCAweDM4OWJjZmMxLCAweGNkY2U5NDlmLCAweDJkNzFmNDY3LCAweDhmMWY0NjdlLAotCTB4ZTEwOWE3ZTAsIDB4OWMxY2ViNzQsIDB4ZmM1YWUzODYsIDB4ZTA4ZjFjMzQsIDB4ZDM4NDAzZTcsIDB4MWFlYjczYWIsCi0JMHg5ZjhiNDI3ZCwgMHhmODIyMjdkMSwgMHhjOWY4OGMzOSwgMHhhZDljMWNlOCwgMHhkOWY4YjVhNywgMHg5ZjgyM2E3YSwKLQkweGJmNGUxMGNmLCAweDZjNmJhZGNlLCAweDYzM2YxNmFiLCAweGY5ZjgyMzViLCAweDQ5NzVkNzAyLCAweDZkNmNlMGU3LAotCTB4NmI2N2UyZDUsIDB4ZGYzZjA0NmIsIDB4OWRjMTljMjEsIDB4MzZkOGQ3NWIsIDB4YjZjNjdlMmQsIDB4MTI2M2YwNDUsCi0JMHhjZWQwY2UwMCwgMHhhNWY4MjdjZCwgMHgyZmMxM2YxNiwgMHg0MDQ5ZjgyMywgMHgzNzNiMjMzOCwgMHg1YTczZWM5ZiwKLQkweDhiOWY2NGZjLCAweGUxMGQyN2UwLCAweDljMWNlOThjLCAweDdlMmQzOWUwLCAweGY4MjJlNzgyLCAweDU3Mzg0MGM5LAotCTB4ZDk1ZDZlNzYsIDB4OTNmMTY5NWYsIDB4M2YwNDU1ZmQsIDB4Zjc0MDBhOTcsIDB4NDIxZjNlMWMsIDB4ODYzYmQ4ZTEsCi0JMHgyZDNiZTNiMywgMHgxNzdjNzY3ZSwgMHg5YzcwY2ZjMSwgMHhjZjlmMWU0ZiwgMHhmNTVjZTA0NSwgMHhhZTdlMmQwZiwKLQkweDNmMDQ0N2ZhLCAweDcyNjcwOGQ5LCAweGY4ZWNlMGU3LCAweDNiM2YxNjg3LCAweDRmYzExMWZlLCAweDlhZWJhZTFlLAotCTB4YWFlYmFkY2UsIDB4NWNmYzVhMGIsIDB4NjdlMTgxNzUsIDB4ZGNiYWQxZDQsIDB4NmQ0ZWRhMDQsIDB4YWZhNDViYTMsCi0JMHhmMWVmM2I4YywgMHgzYTJlYjQwOCwgMHhiYTc0NWQ1OSwgMHhhMjJkZjgwOSwgMHgyNjkwOGZlMiwgMHhiN2RmNDg4ZiwKLQkweGY2MWM0ZmFkLCAweDI1ZmI1MTEwLCAweDc1ODI2ZmUzLCAweGE2OTdhOWQ5LCAweDQ2MTI0YmY2LCAweGEwZmM2YmM3LAotCTB4YTY5MjRmNDQsIDB4YmJhOTNjOWUsIDB4Mzc4YTdmYTYsIDB4NzVkZWQzNTMsIDB4ZjY5YWE1ZmEsIDB4OWE2MWJlNmUsCi0JMHhiMWEyOGY3YSwgMHgyYWJkZmU5YSwgMHhiZGVhNmJjNiwgMHhlOWFkNWUxNywgMHhhMGRmMjE5ZiwgMHg3NjU5ZjdhOSwKLQkweGJmN2ZhNmFiLCAweGVkMzUzYmVhLCAweDZiMTY1NjAzLCAweDJjMDkyZmRhLCAweGFiMmZkNGQwLCAweGZmYTZhNWZkLAotCTB4OWE0NWJhZTAsIDB4MWUxYmNiZjYsIDB4MGQwZmI0ZDIsIDB4MGZhOWE2M2QsIDB4YTZiNGZiZGYsIDB4ZDVhNmM4ZmYsCi0JMHgwNzUxZjY5YSwgMHhjN2RhNjlkNywgMHhkNGQ0NmYzNCwgMHg1NWI5MzhhZiwgMHhmMGNhZmZkMywgMHhiOGZhOWExYiwKLQkweGY0ZDJkZmFmLCAweDFlNzM5NGE3LCAweDQ1ZDc4Y2JmLCAweGZiODIwYjkwLCAweDA5OWJiOTAyLCAweGRkOTBjNWZkLAotCTB4Nzc1Mzc1ODQsIDB4ZDgyN2RiMWIsIDB4Mjk0NzVkMGIsIDB4OWYwNjRkZGQsIDB4ODEyZDBiYWIsIDB4ZmRkYTg0ZTYsCi0JMHgwMzQ1ZWU5YywgMHhkYzVmMjk5YSwgMHhjMDM3ZDYzYiwgMHg2YmRmOWY0OSwgMHg4Y2VlNWRmMiwgMHg3ZTUwOWZlMSwKLQkweDk0MWE0ODExLCAweGZhOTQwMzJlLCAweGM2MjUwN2Y2LCAweDljN2JlM2FmLCAweGJlODg3ZmVmLCAweGY3MDg2ZTVmLAotCTB4YmZmNWE0NGYsIDB4YzAwMjcyMWIsIDB4ZDQwODJmZGYsIDB4MTU3Y2E3ZWIsIDB4ZTgwYTkyMmYsIDB4MWUyNjZmMTcsCi0JMHgzMzA3ZGZlMCwgMHg1NTk3OWViMiwgMHgxN2FjYmNmYywgMHgwYTIxNTM5NSwgMHg0YmU0OTk3NywgMHg1ZDY0M2YwMywKLQkweGY4MzJiYmU1LCAweGU4YmQ1NTI5LCAweGYyMTNiYWJhLCAweDQ4NmVmMGEyLCAweGVmZGY0YmVlLCAweGEzZTY5ODU1LAotCTB4ZWEyNmNjZjAsIDB4MzdjN2FiZTcsIDB4ZTEwN2YxZDEsIDB4Y2ZjMDc1ZjgsIDB4OTRmYzYxOWIsIDB4MzM5YmUzZjYsCi0JMHg4ZmM2NmI0NywgMHg4Y2QyMmY0YiwgMHhlM2EyNjcxZiwgMHhhZmJlYTkzYiwgMHg0ZjhmOThmYywgMHg5MDk2MzI4OSwKLQkweDM4YzdjMjZkLCAweDA4YmQzOWJlLCAweDQ0ZDA3ZmM3LCAweGYxZWEzZGY3LCAweDg3ZTMyM2UzLCAweDNhN2JmZDYwLAotCTB4NThlNjdmNWEsIDB4OGJkM2ZhZWQsIDB4YjEzN2ViYjUsIDB4Nzk1NWJmZjUsIDB4OGYxZjhmOGMsIDB4Mzg1YjdmZWIsCi0JMHg1ZTlmZDZjNiwgMHg2NjZmZDZjYywgMHgzYmUzMjM3MCwgMHg4MjZmZjgyMiwgMHhkMWQ3YmZmNSwgMHg2YjY0ZmJmYSwKLQkweDQ0YmJkZmQ3LCAweDFiMzM3ZWJiLCAweGE3OTVhZmZmLCAweDFjMzZmOGY5LCAweDM0ZTE0M2ZmLCAweDEyZWY3ZjViLAotCTB4ZjY2NGRmMWMsIDB4NGM3ZjgxYjksIDB4MDIyYmUyM2QsIDB4OTNkMjdjNzQsIDB4YzBhZWFlMmEsIDB4MjgxYzc0MmUsCi0JMHhhNjUxMjYwNywgMHgyMTQ5ZTQyNywgMHg2ZjcxZTcxMywgMHg3M2I3ZTMzYywgMHg1MGRmOTRmMSwgMHg5Y2Y4YzkxZiwKLQkweGEzZTZhODA0LCAweGNlMzI5Y2ZiLCAweGU3ZDdmM2ZiLCAweDYxNmY0MDk4LCAweGNjZWZkZDNiLCAweGRkOWQ1M2UxLAotCTB4OTM3ZjIyMjAsIDB4N2U4MWNjMjcsIDB4MGRhZGJlNzQsIDB4ZDlmNTBjYTIsIDB4MDAxOTVjNGYsIDB4MjY2ZTU4ZmQsCi0JMHgzZGUxNzg3NywgMHhmM2MxMDkyMywgMHg1ZTBlNGY2MywgMHhiZTk3NWVhZCwgMHgxZDJkNTM5YywgMHgxN2M4ZDY2ZiwKLQkweDllM2M4ZjliLCAweGYzYTBhYzBjLCAweDE4MjYwM2NiLCAweGE3MWZhZDE5LCAweDk4ZDgyOWZiLCAweDEyZmJhNjFlLAotCTB4NzQ0ODRmMjgsIDB4MjhmY2ZhM2MsIDB4MDE5MTZmZGQsIDB4YzRhOWI5NmEsIDB4NzllYzg4ZjcsIDB4ZmY5ZDJmYjcsCi0JMHgzY2ZjYTIzNCwgMHg1MWRiY2ViOCwgMHgyMzNjMjhhNCwgMHgxYWYxZmZjMywgMHg5OGY0MDAyMSwgMHhmOWY3NGQ1MywKLQkweDM3MmZmOTJhLCAweDE3MGVmOTMzLCAweDAyZDU4MTA4LCAweGZmN2QyYmM3LCAweDgxM2VmZTY2LCAweDMzZjg1MWY5LAotCTB4OGY5ZGVjOWQsIDB4NDdiMzVjNzcsIDB4ZWRmZGQwNzAsIDB4OWMwZDY0Y2EsIDB4Njk2MDQ4NWIsIDB4YjZmZjdkMWEsCi0JMHg2MjI1M2IxNSwgMHhlODI4YmUwMCwgMHhlNWY4MDBiNSwgMHg3MDg0ODk3ZSwgMHg0MjljZGE5ZiwgMHhhMDY2NzEwNiwKLQkweDA2NGU3ZGYwLCAweGQyZTllNmZmLCAweDljMTU2NmQxLCAweGM3OWM1Mjk5LCAweGYzMzNlNzRiLCAweDdiZTcxMTNlLAotCTB4ZGVkYjRmOGIsIDB4MzFlYWMzYmMsIDB4Y2FlNWExMGMsIDB4NDk0MjI1Y2YsIDB4YjY5MTViN2UsIDB4NmQwYWY2ZmQsCi0JMHhkYTg1OGVmZCwgMHhlZTBmNWQzYSwgMHhmZDY0MGJmMywgMHhiYTFjYmE3MywgMHhlYjIzM2JjZSwgMHhmNWE3MGJhNiwKLQkweGQ2NmRiYzU5LCAweGQwZDY0OTMyLCAweDRkNzM2ZTkxLCAweDEzM2RiYzU5LCAweDRmMTA0ZWQwLCAweGY2OWY3ZWY4LAotCTB4NjgxZjI5ZmQsIDB4ZWE1NzczZWEsIDB4ZjhiZTcxZTAsIDB4ZGZmZmY0ZmYsIDB4ODZmMmZmNGQsIDB4NTU0N2M1OWMsCi0JMHg5YmFkMmFmMywgMHhhYWE4ZjhiYywgMHhlYmRhZmNkZiwgMHg4MTc5ZjUzNSwgMHhlN2ZkMzQ1YiwgMHhiNGQwMmNhZSwKLQkweGE3OWVhOWNmLCAweGVjYjU5ZjY5LCAweDQwYmQ0ZDJlLCAweGZmZDM0ZmJlLCAweDlhOTU4NThlLCAweDk2MmJkYmY2LAotCTB4MmI2ZmRhNmIsIDB4YmY1MzU0N2EsIDB4NGQ1YmY3YzUsIDB4YWZhNzliZmYsIDB4M2IwYmI0ZDIsIDB4NDY2ZWY1ZTYsCi0JMHhkZGViZTliYiwgMHhmNGZlOTI4ZCwgMHg3YzAyNjYwNywgMHhjMmIzZjBhNiwgMHg2OWZkMjdlZiwgMHg3N2VhN2U1OCwKLQkweDdhMDk1OTYxLCAweGMzNzdlYTk4LCAweGFmOTY1NjE2LCAweGZhMGRlODJlLCAweDEzZmZlMTVjLCAweGU4M2E0NTUyLAotCTB4ZWIzZjNkNGIsIDB4NGY5ZWFmZjUsIDB4MmM0N2FmZTksIDB4NGIyOTQzM2YsIDB4M2IwNWUyMDQsIDB4NjRmZGM2ZDYsCi0JMHhkYzM3ZjllNSwgMHgwY2U3ODJjZSwgMHhjOTg5ODk2NSwgMHg2ZWM2Yzk2NSwgMHhlYTAzODllMywgMHhiNjE1ZmVhMSwKLQkweDNhOTJlMThlLCAweDIwNDFkNzAxLCAweDc0MDI5YTRhLCAweDk3NmQ0MWViLCAweDM0N2RhZTlhLCAweDI5ZDk2Y2YzLAotCTB4MjA2NWY4ZTIsIDB4ZGNjMDYzOTMsIDB4NjAxODc3NzgsIDB4ZmE2MzUwZmMsIDB4M2U2MTgzOGQsIDB4ZGViMWQ3OWUsCi0JMHg1NmZlODI5MCwgMHhlMmQyN2Y4YiwgMHg3ZjAwZmRhMywgMHhmYTRmMmM1ZSwgMHhkYzc5NjNhNywgMHhhOGYyYzNlZiwKLQkweGMzY2IwOGJmLCAweDliMmMwYWZlLCAweGZjYjEwYmZkLCAweGY5NjMyZmM0LCAweDk2MTk3ZjkxLCAweDYzNTdmNTdmLAotCTB4MTJiZmQwNzksIDB4MDFmY2Y3Y2IsIDB4MWVmZDViMmMsIDB4ZmQzZTE1MmMsIDB4MThlYmExNGYsIDB4YWU5Y2JmYzMsCi0JMHgzYWU5YThkZiwgMHhmMzY0ZTBjNiwgMHgxODdkNzRlMSwgMHg2ZmMzMWJlNiwgMHhjOGNlMGZlZSwgMHhlMjNmOTU0OCwKLQkweGRiNzE4Yzk5LCAweDRlY2UzYzA1LCAweGM3MTYyNGM4LCAweGE2MmY2M2U1LCAweDZmZDA5YWUwLCAweDNkMDQwYzA5LAotCTB4YjdlMDc2N2MsIDB4N2Q0ZTIxZmQsIDB4NGEyNTIwZjYsIDB4ZDNlYmM3NDYsIDB4M2M0M2FmZDMsIDB4ZWZmYTBmMTAsCi0JMHg5NzRhMDE4NSwgMHg5NmVkZjZlNCwgMHg4YjU3ODY3OCwgMHhjMzIyNGM4MSwgMHhlZmRlNTkwOCwgMHg4MzlkZjcwNSwKLQkweDQ5MjQ2ZWIwLCAweDdkYzA3ZWYwLCAweDVjMDYzZGJkLCAweDdlMDIwYmVhLCAweGM1ZDc4NjJmLCAweDAwNDM3M2Y2LAotCTB4ZmZhN2YxZGUsIDB4MThlNTA1OWUsIDB4ZTMwN2YzMDMsIDB4NGJmNDQ1MWIsIDB4Mzc3OWU4NDksIDB4NjdhMjM3ZTAsCi0JMHg4ODM0ZWVjZCwgMHg5OWZiODZmNywgMHg5YWY3Njg5YywgMHg0ZmUyZDZhZSwgMHhiZjgzNWFiZSwgMHg1NWZjMTFlNSwKLQkweGZhZmUyMWE3LCAweGMyOGZmYjllLCAweDg3ODRmMTFmLCAweDhhMzgzMGRjLCAweGVmODQ2ZmJmLCAweDFlNzI5ZmM3LAotCTB4MzZlZjFmYTMsIDB4Zjg4M2Y4ZDEsIDB4YzE1NTJkYjIsIDB4YTEzYTUzNmIsIDB4ZjgxMWZjZTMsIDB4NWIzZmMyOWYsCi0JMHhmMDAxMjAzZiwgMHgxMTczODExYywgMHg3ZmFmMDhmYSwgMHhlOGZhMGU5YywgMHgxNmM5ZDAzNCwgMHgwZTlmNzc4NSwKLQkweGNmYmRkOWRlLCAweDVmZWZjMDNiLCAweDQ3Y2EyNjkwLCAweDI5NTllMDYzLCAweDY0MzJlYjRiLCAweDZhNGZkYTliLAotCTB4NTZjZmQ2ZDAsIDB4ZDBlYTkzMGIsIDB4NGMyNTcxOWYsIDB4ZDdmYTBjMWQsIDB4NDA5NTFmMjksIDB4YTk2MWE2NGYsCi0JMHg2NjkwNTljMCwgMHg3ZDI4NzFjMiwgMHg0ZmFmNWM5OCwgMHhkNGZmYjk0NCwgMHg3ZWZkODcxZiwgMHgwNDc0NzllYSwKLQkweDdhOGYzYTI3LCAweDBmYmU4NDcyLCAweDRmYTE3ZjJjLCAweGU0M2JmZGM3LCAweDI2MTdlMzUzLCAweGEwOTFiMzg4LAotCTB4OTdmYzBlNzQsIDB4MDVmZmZhMzgsIDB4NDYyMzc4MzgsIDB4Y2I3MDJiYWMsIDB4N2NkOTQ0ZWIsIDB4YWY1ZjNjMzksCi0JMHhlN2JlOGYxOSwgMHgyZjA2Y2U1MiwgMHgzYzlmN2U2NCwgMHg4NTcxYzkxOCwgMHhhOGE5YTk1ZiwgMHg0OGQ2MTg4MSwKLQkweGFjOGI1YmUwLCAweDM1MTI4ZmY1LCAweDZlODZmMmY1LCAweDgyNWZjNmIyLCAweDRhM2Q1MDdmLCAweGYwMjMwNDhhLAotCTB4OWY2NzA5NGIsIDB4OTk2ZGEzMzYsIDB4MGJmN2U3NDAsIDB4M2U4MTYyMDgsIDB4ZDJiZjU4MTAsIDB4Y2Y5MzY2YjgsCi0JMHg3OGIyZmMwNSwgMHhlODJlMTVkYSwgMHhkNWViOGQ1OSwgMHgyZmQyOGZjZiwgMHgzYzc1MjhjMywgMHhkOWUyZjlmZiwKLQkweGU0MzFiZDdiLCAweGRiZDcyNzYzLCAweDU3MTYwNjI1LCAweDAzYjI3MTIwLCAweDlhNDhkN2NlLCAweDhlYzFiOGVjLAotCTB4ZjA0NWIzNTMsIDB4M2EzYjcxODMsIDB4MGEwZjBhOGUsIDB4MjkwMTc5OWMsIDB4OTk1ZmY1YWMsIDB4NTgxOGI2NWMsCi0JMHhlZTNmNDBiYywgMHg5NGRjNjE5ZiwgMHg2Y2FmZTM4YiwgMHhiMDg5ZmVmZCwgMHhjYjFlM2Q2ZSwgMHg3Yzk4Y2UxYSwKLQkweGJmZjQ1NzI4LCAweDE1MWUyOGFjLCAweGY0NDJmZWZjLCAweGViYTQ1OWZlLCAweDg0M2RhZTJhLCAweDkyOTNlYWZiLAotCTB4ZWZmZWZmZGMsIDB4ZTdlZDhiZDEsIDB4NmUzYjRiNmYsIDB4MjY1YmFkNTUsIDB4OWRjZTMwNGQsIDB4YzQ0MGY5YTMsCi0JMHg1NDg3ZjM3NSwgMHg1YjdhOWY1ZiwgMHg1ZDAxMGYyMiwgMHhhYTVlZDNjZSwgMHg4MjhmNTA3OSwgMHhmZWEyYjIxOCwKLQkweGYzZjU5ZGZhLCAweDlmN2VjMWYzLCAweGY3MDUzY2RhLCAweGQ3ODliMzJiLCAweDIyY2E0MTAxLCAweGZlMDU5ZDUyLAotCTB4OTg2MjY5ZjksIDB4NGQzYTc4MDQsIDB4YWUxOGVjZmUsIDB4ZDEzOWQzYTIsIDB4ZmVhMWY0ODQsIDB4ZmNmNTYxZmIsCi0JMHhhOWFlZmZhOCwgMHg1MzVkZmY1MywgMHhhNDM3MjQyZiwgMHhlMTc4ZjljMiwgMHgwODA5MTIxMywgMHhmYjRkM2ViOCwKLQkweDcwODlkMTcxLCAweDJhOGE5MmU3LCAweDRiMTY3N2YwLCAweGU5ZGZhZWNjLCAweDU0MWVjNjI0LCAweGY2YmU5NzlmLAotCTB4YWQwMTU2NGMsIDB4N2YzMjI3N2YsIDB4OWRlZjM5NDQsIDB4Mzc3Yjc1NDcsIDB4Yjc1YzVlZGEsIDB4ZWRhMWU0Y2EsCi0JMHg0Zjg3ZWE0NywgMHhmYmMwODJiYiwgMHgzZmIwMmE4MSwgMHg3YjgyYWJmMiwgMHg3ZTNkYWJhZCwgMHhmNWZjZTg3ZiwKLQkweGExZmM1NWYzLCAweDdjY2VlNzc2LCAweDgyYjVhNTFlLCAweGNmODMxMDI3LCAweDY3YzY0NmFjLCAweDMwZjYzZjBhLAotCTB4OGRmMTM1M2EsIDB4NzBmYWJhMDEsIDB4YWU5YzdkNWQsIDB4YmRlNWEzZmUsIDB4ZmJjOGQxMGIsIDB4MDBkZjQ0MmYsCi0JMHg2ZjkzMGE2MywgMHhjNjA5ZGZkOCwgMHg4ZmYzZjIzMCwgMHgwZWQ2OWY4NiwgMHgxNDlmZjBmZSwgMHg5Y2FkNGY3ZSwKLQkweDdlZTNmODUxLCAweGRiN2RmODUyLCAweDJjNGE3ZmNkLCAweGJkYWZhNWY4LCAweGZhYTY1OWI0LCAweDI3OTVmOGE5LAotCTB4YTdlYTg0MWQsIDB4NTRlYWM2NTMsIDB4Yzk3ZmE1MzcsIDB4ZTAwZWE1ZGEsIDB4ZDk0NjkzODMsIDB4MmE3Y2ZjMDEsCi0JMHhjNDBhNGUyMCwgMHg4YzhiNzdkMCwgMHgzZGFmZjcwMiwgMHg2ZmUyMDEzNiwgMHhmZjBhNGZmMCwgMHg1ZjBmNzVkMywKLQkweDczODc3MTBiLCAweGM2MjcyNTZiLCAweDIxY2Q2YWQ1LCAweGIyZDM5NTMzLCAweDY0Zjk3OWZhLCAweGIxMGZkNjA4LAotCTB4NDQ2NzgzZmEsIDB4Zjk2ODM3YTgsIDB4NGY3N2Y4YjMsIDB4NWY1MGJhYTYsIDB4MTgwYzNkY2EsIDB4ZmZhMTBlM2YsCi0JMHhkOGU2YjY1ZiwgMHhlNWZiYjA0NCwgMHhhNjcyOGMyNCwgMHhmZmM2MGY3ZiwgMHg1M2VkMDkzYSwgMHg3ZGExMjk4MSwKLQkweDUzZTQ2ZTNiLCAweDJiZjY3ZGUxLCAweDhjZjg3ZmFmLCAweGYyNzI4MGU4LCAweDc0MjdkMDA5LCAweDAzZjE4NGU3LAotCTB4ZGM0NTdiZmQsIDB4NjhkYmJmOWYsIDB4ZjNmMTgyZWYsIDB4ZTgxNDY0NTEsIDB4MjQyZjA1MzEsIDB4ZjE3OWZjYzAsCi0JMHg0MDg2NjdiNSwgMHhjZDY1YjUxYywgMHg4NTQxMGVkYiwgMHhjZWRlNDUyZiwgMHg2ZTdhY2RkNiwgMHhiZDYzYWJhYiwKLQkweDUxZTU0YWQ5LCAweDdlMmE0N2VkLCAweGVmODFhYjg1LCAweDJjYWM4MjQzLCAweGM4MGU0MjkxLCAweDI1NTkyOWFiLAotCTB4YjhmYTY1YjksIDB4NWZlN2E1ZTQsIDB4OWFlMjFhNzgsIDB4ZmRkZDk4MWYsIDB4MmZmOWZjMjgsIDB4MmM2ZjdlZWQsCi0JMHgyMGRmY2ZhZCwgMHhjYjY3Yzk3NSwgMHg1MWE5MDliMCwgMHhmZmQzOTRmYSwgMHhkMjhiMGUxNywgMHg2ZWQzNzhhMywKLQkweDdiMzA2YjkzLCAweDk0NTI0MGZlLCAweGVjMzdmMzJlLCAweGVkYzE5MTM0LCAweGI3NWI5MWYxLCAweDhiNmNkNGQzLAotCTB4NDNiYTlmNDEsIDB4MTMwZmMxMTMsIDB4MDRjZWZiNWYsIDB4NDNiNTNmZjQsIDB4NjIzMzVkMjAsIDB4NmVkNTczZTAsCi0JMHg0ZjAwZDNmNCwgMHhhZjRlNGY0OCwgMHhmZDc0ZmQwOCwgMHg0MDVkMjljYiwgMHhhNWU5ZWJhZiwgMHhmNDE1MzdlZiwKLQkweDBiODMwYTRiLCAweGJmOTQxMmY5LCAweGY5MGFkZTVmLCAweGJiMzU3ZjQ4LCAweDJmNDUwZjAxLCAweGY1ODBlZGRmLAotCTB4MzA1NjMwOWMsIDB4Njk2NjdmM2UsIDB4NWY4ZTg3YWEsIDB4NGVhOWM5MjQsIDB4YTJmM2Q5MmMsIDB4ZmM4ZTdmNjcsCi0JMHhjZmZmNzczNywgMHhjYjVjNTk1MywgMHhiNjgwY2RkMywgMHhlYjA2ZWU0YSwgMHgxMzczNTM5YywgMHhmODkwYjNhZSwKLQkweDllOGIwZjkwLCAweDJmYTBiZDExLCAweDQ5OTIzNGJmLCAweGM5Yzg2MjFiLCAweDRlNGU1Y2I3LCAweGE1YzRhNmFjLAotCTB4Y2Q0MTNjZWIsIDB4ZmNlOWU2MTAsIDB4YzVhYzBjNTksIDB4MTg1ZGZhMzgsIDB4NWYzOWZiMzcsIDB4YjBlOGY1MGIsCi0JMHhhMzFjNjVmZSwgMHhjMGQxOTM1NywgMHhlYWY1MmVmNSwgMHhlNmJiZmNkNSwgMHhkM2EwMjZjMSwgMHg1ZDNjYmRhNywKLQkweDljYTVmY2UxLCAweDBmOGU2NTE4LCAweDJiODUwMmUxLCAweGNhZWJjZmVlLCAweGM2NWM0NGU4LCAweGY1MWVmZTJjLAotCTB4MzllMTcyY2IsIDB4M2M5MjZmZjQsIDB4Zjc5YTIxOTYsIDB4ZTg4Yzg1YzgsIDB4ZjFmMGY3ZjgsIDB4YzFlM2JjZTksCi0JMHgxYTkxM2E5ZiwgMHg0MDMwNWY3YiwgMHhiNTAyZWM1MiwgMHg1MzNlMmFlYiwgMHhmZjkzM2JjOSwgMHhiYzk5Y2IzNSwKLQkweGI4MWZmMjJiLCAweDdmYjQxMjdlLCAweDExYzk4MDcxLCAweDkyZjYwN2JjLCAweDE1ZDQyYmNlLCAweDE1NGU3N2RiLAotCTB4NDk5ODNmNTAsIDB4YWY5Yzk2MjgsIDB4NmI5Y2I4OTEsIDB4NDJmY2Y1ZGIsIDB4MTIxNDZmZTcsIDB4ZTMwMzdjNTQsCi0JMHhkMDFkMjEyNCwgMHg4MjdjMmE5ZiwgMHhhM2QyYWZiZSwgMHhhM2FlMzBlNSwgMHg4ZTQ1NWMzZCwgMHhmMDdkNzJlNywKLQkweDZiMDNlODI1LCAweDFhOTAxZjU0LCAweGY2M2EwN2E2LCAweDUzYzQ2NTdiLCAweGUxNzgxNDg5LCAweDJhNWY5MDY5LAotCTB4ZTQwYmIyYWYsIDB4ZmFjMmYyNTcsIDB4ZjhkZjViM2YsIDB4NmU1NGFkZGUsIDB4ZTQ1M2FiM2UsIDB4ZjU1N2FiNTYsCi0JMHhmMWI0NWI3MiwgMHg1NGY4MDRlNywgMHhmNTlmYjcyZiwgMHhlNTMxMjBhYywgMHgyOThmM2U5NiwgMHhmZjliM2RiNywKLQkweGMxNTU3YTI1LCAweGQ1YTRiYTYzLCAweGVjOWU4YWFiLCAweDNkN2E5ZjA4LCAweDQyZThjNWI5LCAweDI0ZjVlYWJjLAotCTB4NTkyMDFkZmQsIDB4ZTE1MWY5ZWQsIDB4OGFmZjg1NDMsIDB4MGRlZDJjNWYsIDB4YTdjMjI4ZmEsIDB4Zjg0NjFmMGEsCi0JMHhmZDQzZTE1NCwgMHhkNDc4YjViYSwgMHg5ZTdjNjNiNywgMHhjYjc3OGJmMiwgMHg1MDdiMTNiYiwgMHgwNTA0OTZiYSwKLQkweGVmODVkOWI3LCAweGM1M2E4MWVkLCAweDBiNmQ4Nzk3LCAweGU4ZjRmN2FhLCAweDc0MDdhZWEyLCAweDdmNWQzYWY1LAotCTB4ZDVlZWFlOGYsIDB4ZWFlOWY3ZjUsIDB4MDFmZWJhMTUsIDB4Njg2OTRmYjYsIDB4ODdlNDExMzQsIDB4YjRiZmE2OTAsCi0JMHg5ZjkwYzg4OCwgMHhlMjJlZGUxNiwgMHg5ZDFiNDFiOSwgMHhiZjdkMTU3MywgMHg0MDQ2N2Q2ZCwgMHhhOTYxZmFhNiwKLQkweGMzZGJlZDg1LCAweGQwMmFhNjI5LCAweGIwY2U2ZDY3LCAweDE2ZWEwOTIzLCAweGYzNmI3ZjE2LCAweDJhODkxZDg2LAotCTB4NTA1MGYxZmYsIDB4MWNkYzdkNDQsIDB4ZWQ2MjkzMjAsIDB4OGJjN2E4NWYsIDB4MWQyNjZiZjQsIDB4OTBmM2IzYjUsCi0JMHgxMGM3NzhiNiwgMHhiNDRmMmYxOCwgMHhmODg0MmZhNSwgMHg4NmU4YjU0YywgMHg5NWQ5OGUyMywgMHg1Y2UwM2IzNywKLQkweGU3ZDgyZGEyLCAweGY5ZjRlOWJhLCAweDJjODgzZjljLCAweDE4ZjY0MjJkLCAweDBkZjZhOWJiLCAweDU0ZmM4OTI3LAotCTB4OTVmOTAwYjYsIDB4YjNmZTkwMmIsIDB4MzExZjZjODIsIDB4N2U2YzQ1N2IsIDB4MTVlZmU2MmUsIDB4ODEzMWVlZGEsCi0JMHhmZmZlYTRkZSwgMHg1ZjVjNzU2MSwgMHhhMzU0NTM4MSwgMHhjMjljMWU3YiwgMHgyZmVkOWVmOSwgMHhkYjY4ZDc4YiwKLQkweGZhM2Y3YzdkLCAweDBmZGYwYTVmLCAweDdlZDk0MzI1LCAweDA4MzhiMDkwLCAweGUyNzliYmQ3LCAweDUzYTZlYmEwLAotCTB4MTVlZGI0M2EsIDB4ZDljZGYwMDksIDB4Mzg3NDg4YTAsIDB4NDAwODVlYmIsIDB4MjljODhhNWMsIDB4MjQ2NTNmMjgsCi0JMHhjMTRlZmE4YywgMHhjN2M4MGI1NywgMHg1MGY1OGU4MCwgMHg2NzFmYWJjYiwgMHg5NGJiNGZkZCwgMHhjODcwZmU2YywKLQkweGNiNjVhNWZmLCAweDZmZmEwZmU2LCAweGVmNmJmYTgzLCAweGRhNDg3ZmE3LCAweDYxZGRjZmY3LCAweGI2ZGY3M2MxLAotCTB4MjdjYzc2MWQsIDB4NGVmZWRiNmUsIDB4ZGY1MGZkZmEsIDB4M2NjMzc2NjIsIDB4MzU3Yzc2ZGIsIDB4NmRhOGY4MDQsCi0JMHhmNDA4Yjk5MSwgMHhiNjJmNWI1OCwgMHhmZGJjNTlmZiwgMHg2OGNkMjFhYiwgMHhmZDIwOTczZiwgMHg4YjEzMjU2YSwKLQkweGZlZmYwNGQ3LCAweDRhMDVkMDg5LCAweDBmZjAyYWJhLCAweGY5NzI3ZTc4LCAweDIwODA0YjU2LCAweDdjYjJhZmZjLAotCTB4M2Q2ZTlmYjYsIDB4YmY5Y2ZjNjUsIDB4NmZhNjRlY2QsIDB4YjIyNWY5ODQsIDB4NmRmMmVjNzMsIDB4YTRhZjllNjMsCi0JMHhlZmQ2OTdlMywgMHhlZGEyY2QzNCwgMHgzNzdmYWZiOSwgMHgzNzkxZjMwNCwgMHg1NWE3YmYzMiwgMHhjZTE2N2U2YSwKLQkweDZmNDkzN2IxLCAweDllMjg5MjJlLCAweGJhMzg0MTViLCAweDI5OWQ3MjEzLCAweGM1YjY1NzJlLCAweDE4NzdjYmMyLAotCTB4M2UyY2VhOTcsIDB4N2VkODkyZGUsIDB4MWYxZmRmZjQsIDB4OTUxMWU2MDIsIDB4Mzg4MWVkMDQsIDB4Y2RmZGQ2MDEsCi0JMHgzZTgyMWYyNywgMHhiZTQ2NjFkOCwgMHg1OWZiZDY1NCwgMHgyM2ZhMjU1ZCwgMHhhOWY3NWIxNywgMHhkMDdjMzFmZiwKLQkweGExMGI3NWQ5LCAweGNlM2JhY2NlLCAweGVlYmRlZmY0LCAweGNlMTcyNDQ3LCAweGVkMDcyZjRmLCAweGJkZmI3Y2Y5LAotCTB4ZWVjOTdmNTgsIDB4OTI3NmY5YzYsIDB4ZmU5YTA3ZGYsIDB4MjM3ZGY4YzMsIDB4ZTJlM2JiYTUsIDB4YmZkOWZlZWIsCi0JMHhhNjNiYmFmOSwgMHg3MjY2MWZmYiwgMHgxZjIxM2JiYSwgMHhlZmY1ZmNhYywgMHg1NDNmN2U3MCwgMHgxZmZkY2RjZiwKLQkweGJmOGFmN2NhLCAweDliNzgzNjZlLCAweGE2ZmNlODcyLCAweDM4M2I2YTkzLCAweDljYTRiNzE2LCAweDczYTkwN2RkLAotCTB4NzQ1ZjVlZTYsIDB4ZmM0YWY5ODEsIDB4YmYzZjUxZmMsIDB4ZWZiNjI2OTUsIDB4OTk3Y2UwOTMsIDB4MTI2ZTRiOGUsCi0JMHhlZDhmN2VmOCwgMHhmZWU1YWU5MywgMHgwYjNkYjVjNSwgMHhkNmJkMmZkMSwgMHg2Mjc3ZmNjMywgMHg0NjczN2FmNCwKLQkweDZjZDg5ZTQwLCAweGM5NDNjNjM3LCAweGE4M2U4M2IwLCAweGFmMjU3NGRmLCAweDdmOGJmNzZiLCAweGEwNDc4ODE0LAotCTB4ZTliNWY5ZmUsIDB4OWY4MmY2OTMsIDB4NjM0ZjVkN2EsIDB4NDNjYWNjYzgsIDB4ZTBlYmJlNTAsIDB4Zjc2YjQ3Y2YsCi0JMHhiNGY4YjczMywgMHg2YmE3OWJmNSwgMHg3ODcxMzdlYiwgMHhhMmI5YzBkMywgMHgwYWYzNGZlMywgMHg0YTdmODgwMSwKLQkweDgxNDg5ZWJkLCAweDQ3MzRhODc4LCAweGY5MDA4MjIyLCAweDYxNGIxNTI0LCAweDU3OTM3MGRmLCAweGIwM2RmZWZiLAotCTB4YzUxOTFkY2YsIDB4ODJiOGJjZTMsIDB4MTE0ZTcwZjksIDB4N2M0MDUwMzcsIDB4NDQ0MmI3NWMsIDB4NDgzNzEyN2QsCi0JMHhkMWRlZjg0MCwgMHgxZTFkZTYxMiwgMHgwMGIzNzgzMywgMHg0N2MzZjljZiwgMHg4MTkyZmQ5NSwgMHhlNzdhYzM3MywKLQkweDkyMTU3YzcxLCAweGM4NzdmNDBhLCAweGIyMTcwYmY5LCAweDRiZWUyMGIzLCAweGU3OWE1ZmQwLCAweGVhMWFlNDIxLAotCTB4MGI2NjE3YjcsIDB4NjNjODc4YTEsIDB4NjEzOTEyMzEsIDB4MDU0M2M0MTgsIDB4MGYxMzU4NzIsIDB4NzdlMWQ2ZDUsCi0JMHhjZTE0NmE1NSwgMHhjNDc3ZmFjNSwgMHhmOTc1M2Y4ZiwgMHg4N2ZmY2EzNywgMHg0MzNmZWEyNSwgMHgyY2YzZTc4OSwKLQkweGIzZWNhN2FlLCAweDNjMzIwOGVlLCAweDgxMDg5Nzk2LCAweDkwYWJlNDRjLCAweGIwY2YzZWE0LCAweGZkZmYxOTk5LAotCTB4MjhlMTgxZWQsIDB4MWViZjM5NTcsIDB4N2ZmNmMwOWMsIDB4YTBiYmYwMjMsIDB4OWU2N2VlNzIsIDB4MTAwOTVkOTUsCi0JMHhlYzFiMzhmNywgMHg3MmQxY2ZjMywgMHhmYzE4YmUxZCwgMHhiYmVmOWZiYywgMHgwMDc5MDJmZSwgMHgyMDliNmNiNCwKLQkweGZmZTA4YjU0LCAweGZiYzYzMDkzLCAweGIyMTYwOWU0LCAweDVjYmU0NjM2LCAweDg3Mzk0OThiLCAweDIwN2RjMGFmLAotCTB4YTAyY2M0ZmMsIDB4YTVjZGZiMjMsIDB4YTkyNDI2YWYsIDB4OWFlMmI2ZTgsIDB4ZWQyMWM2NTMsIDB4YzNiZjAwZTksCi0JMHg3ZTRiY2UzMSwgMHgzY2ZiMDk2YywgMHg0YjdlZWJjMCwgMHg4YzZmNDRmMywgMHhjYjgzZmVmNSwgMHhkZjFiZmU2ZiwKLQkweDM3NjM3N2UwLCAweGMwMjQzMzA0LCAweDQ0MTMwZGNiLCAweDM5ZWFmOWNkLCAweDg3ZTNmNzEzLCAweGFmMzBlMTkzLAotCTB4M2IyNjM3ZmMsIDB4ZjY1ZDAwYzYsIDB4NGVmODZlOGEsIDB4YzY3ODNjYWMsIDB4Y2U3MThiZTQsIDB4YzAyN2M3YTQsCi0JMHhjOTAwNzNjNywgMHgzY2Y4MDg1ZCwgMHg4MTBiMmJmMiwgMHhmYzNiZDZmZCwgMHhlNDEwNjdkYywgMHhhZGMyMGY2MSwKLQkweDRjZTIwN2JkLCAweDBiOGIzMzY2LCAweDcxM2IzMGNkLCAweGU3ZTYzNzllLCAweGRjNzQyOTQ4LCAweGExY2VmNTQxLAotCTB4OWRkNWY0NzAsIDB4NDYwMTlmZjcsIDB4NTEyNDI0NmIsIDB4N2U5NGY3YjAsIDB4YmY1ODRiZGQsIDB4NTk2NzI2NDMsCi0JMHgxMTNmZjVhYywgMHg3MzNhZTJjNywgMHhkMWRlZmI4OSwgMHhkZDFmYmZjMiwgMHgwZjZkN2U3MiwgMHgzMjdiMDc4ZCwKLQkweGQ4ZTc3ZDgxLCAweGNhMDlhZjllLCAweDQyNDlkOWM3LCAweGVjM2RmNDAwLCAweDJmOWViMDlmLCAweGM3NzliZGEwLAotCTB4MWJlNWRhYzAsIDB4Zjg1NjVlOTgsIDB4MTFlNzhmNWUsIDB4ZjhjYWNmMWMsIDB4MGM3ZDc5NTMsIDB4Y2YwNTJmOTcsCi0JMHhmM2Y1N2UwYSwgMHg3ZDUzZmE1NSwgMHg4ZjFkNGUzNSwgMHhlODYxYWViOCwgMHhjYjBmNjBjYiwgMHg0MGQzODI4MiwKLQkweDliMTk5NTQxLCAweGU1ODcyMDRkLCAweDEwNGE4ZjBkLCAweGM1YzViZjhmLCAweDMwN2I1MmUwLCAweDNiZmU3ZDQ0LAotCTB4ZTFjZWNjYzMsIDB4MzE1ZDg3MWIsIDB4ZjNlNGY4MTMsIDB4YTEyZmQ0MTUsIDB4OWY2NjdiZWYsIDB4N2RkZDgwNzEsCi0JMHgxM2ZlZTBjNywgMHhmZjI5MDc3YywgMHhiZjZiMjQ1MSwgMHhlODdkNWY0NywgMHg5MDRmMTY3NywgMHg3MDMzNzBkNCwKLQkweGU0OTYzNzllLCAweGI5M2UxMDQ4LCAweGQ0YTc2NGFkLCAweDMzNGZjNTU1LCAweGFlZDg0OWNjLCAweGUyNWVlZjNjLAotCTB4ZTljZjA2MWEsIDB4ZjkwZjM4NzgsIDB4M2M4MTMzMTEsIDB4NGQ3NTQxZjIsIDB4NmRkYmZkZjgsIDB4MGY4Yzg5MTUsCi0JMHg5YTc2ZWE4YiwgMHhmZDgxOWViMCwgMHg3MTk0ZjE5NSwgMHgzNTM0ZjJmNCwgMHgzNDFmOWI1ZiwgMHgyN2I5YjcyYiwKLQkweDFjZGYyNWUwLCAweDgzMWRjN2JhLCAweDk1OTgyZjRmLCAweDY4MWY4ODczLCAweDZmOTQzYzI3LCAweGIyMmZmYzg3LAotCTB4NzYyOGY3MTMsIDB4YWFmMjU5YTIsIDB4MzRkZTQ5ZjIsIDB4ZDk1NzM5MzMsIDB4ZWNiMWFlODksIDB4NTc0YTgyYzQsCi0JMHg4MmMzYTA1NywgMHg4MmJhN2RlZCwgMHg0M2Y4MmM5MCwgMHgzYjJjNmE1ZSwgMHg5ZDlmYWVmMSwgMHhiZmNmYmUyYiwKLQkweDRhOWI2ZDIzLCAweDJhZTVjNGVkLCAweDgyZDUzMTNiLCAweDZmN2ZhMjdjLCAweDc2OTNiOTgzLCAweGZmZGJhMTQyLAotCTB4MmVmMzdkNjMsIDB4ZjIxODg5ZDgsIDB4NGZlMzhiYmQsIDB4ODJkMzEzYjEsIDB4YTYyNzY4MDUsIDB4ZGYzNTE1NGQsCi0JMHhmMzMzNmM1ZiwgMHg3Njg3NzE3OCwgMHgxNmY1MjcyMiwgMHg2YjZlNGJhYywgMHg5Nzc5ZmUwYywgMHhmM2VmYzNmYiwKLQkweDA3MTgzYzNjLCAweDVjYjdjNWVjLCAweDQ2ZWRlYmZmLCAweDM3MWQ3YTQ3LCAweGExM2IyMzM1LCAweDc4NDVmZmQ3LAotCTB4MDJmYWY0NTYsIDB4MzM5YjJmZWEsIDB4NDEyMWYxNjIsIDB4MGI3MDVlN2UsIDB4ZjAwMmViZDUsIDB4MGJlYmQzMjMsCi0JMHgzMTcxZTc2ZSwgMHg4MmY1OWU5ZCwgMHhkNmExMWQ5ZSwgMHgzMmZkZWNiMywgMHhlNTBiYjMxZiwgMHg5OWJmMTkwZCwKLQkweGFkNmZkYjQxLCAweGI0NzFkYzk2LCAweGJkNTFhZGZmLCAweGJiZDZhNTliLCAweDc3YTQ3NmRmLCAweGZkZGU5ODhiLAotCTB4ZmQxYzM4M2MsIDB4ZjdkNjhlYTcsIDB4NTRiN2Q3MzEsIDB4Yzc3NWY1OWYsIDB4MzNlOThmZTAsIDB4NzdlZjlhYWMsCi0JMHg3MzdkMGM4ZSwgMHg5NzkwMjZkMCwgMHhkNzNjNDQ3NywgMHg4MGZkYzYzYiwgMHgxY2RmNDM3ZCwgMHhlOWVhZjEwMSwKLQkweGJiZTQ0NjcxLCAweGFkOWU5Y2JlLCAweDgxM2M1MjdlLCAweDM2NzcyZmUyLCAweGQ3NGJhN2YzLCAweGIyYmY4ODhiLAotCTB4NjVmZjI2N2EsIDB4NDVjMDQyYjUsIDB4N2Q4NzEzZWIsIDB4ZmNmYTgyNjMsIDB4OGU3Y2VjZWQsIDB4NDczZjIwYWUsCi0JMHhlZmY5ZmY0NSwgMHgzYzQxNTczNCwgMHgwMTJhZmU3OCwgMHgxZjIxMTdjZiwgMHg5NzM5ZjAxYSwgMHgzZGQwYjNlMywKLQkweGZhMmJmNzFmLCAweGYxZTU4MzNjLCAweDcyZTRkNThlLCAweGQzZjE4Nzg0LCAweGRmM2ZkZTUyLCAweDcyZjhjNjFjLAotCTB4ZjcwNGVmZmUsIDB4MWYzZWQyMmEsIDB4ZDVlZmI0YTEsIDB4MzE5ZjYwYTcsIDB4ZGNmNzU2YmYsIDB4MTFjZjFjYmQsCi0JMHg3MThiNWZhOCwgMHg2ZDNhZDJkNCwgMHg0ZmY3MWU3YiwgMHg0MWExODhlNiwgMHhmNTdmNjA5YiwgMHhjYjFkZDEyNywKLQkweDIyZmQyOWRlLCAweDI3ZmEyOWY4LCAweGUyOWZiM2YxLCAweDg3NGZjNDY3LCAweDlkYzE3OTlmLCAweGExZmU1ZjE4LAotCTB4ZTNlM2QxNzgsIDB4YmY1YzcxNjcsIDB4NDAyMzIzMGMsIDB4M2MxOThmMWUsIDB4YjdlNDVmYTgsIDB4OTkyM2NjNDQsCi0JMHhjZDNmNjhmZCwgMHg3MTM3MDQzZCwgMHhlMGM3NzliZSwgMHg1ZjNjODJhYiwgMHg5YmU1OGNiOSwgMHhiMGQ5YWRjYywKLQkweDY3ZDY5NTNiLCAweDEwYTE5MWQ0LCAweDUyYmI5ZTk2LCAweGY2MjM4ZjZiLCAweGZjYzVkZWJmLCAweDAyMGQ4YTgyLAotCTB4ZTFjZTE1ZTQsIDB4MDUxNTA5ZGYsIDB4MWI3YmM1MWUsIDB4ZWQ0ODVmNmUsIDB4NmIzZmVkM2QsIDB4ZTcwN2Q5OTgsCi0JMHg2MTJkZmJhMywgMHhmZjBhOWZkNCwgMHhmMjYzODkyZSwgMHhlM2NmODhiNCwgMHgwNGYwZjc0OCwgMHg4MjBkNTNiNCwKLQkweDY0MzJlNTEzLCAweGQyOGI3NjYxLCAweDY4OTNlZTA5LCAweDQ0ZDVmMzFjLCAweDhmMTYxNzRlLCAweDJjNzQ2MDY4LAotCTB4YjkwMzc0YTcsIDB4ZjVlNDE4OWUsIDB4ZGUwZmU2M2EsIDB4Y2VjMzNjMTYsIDB4MjUzYjgyYjUsIDB4NDA4NTJmNzYsCi0JMHhiOWRmNTE5MiwgMHhkOGFjZmY3MSwgMHhjYjY3Mzg0NywgMHg3N2QxNTU0OSwgMHhmZmM2MjFmYiwgMHgzZTM3MDU2YiwKLQkweGZlZmZkMDA4LCAweDQwNzZmYTE5LCAweGU5OWZjNTU3LCAweDNjMTU3ZDJjLCAweDc5ZDFkMTJkLCAweDdmMjlhNWJmLAotCTB4MDhkNzllMzgsIDB4MjNhN2JjNmUsIDB4MGJlNzg4OTgsIDB4YmRkOWFiNDcsIDB4ZmU3MThmMTMsIDB4ZWMwNWNiZDcsCi0JMHg2MGY3ZDQzZiwgMHg4NzEzMGY1YywgMHgxNjQ5ZDM3YywgMHg3MWMzZWJjYywgMHhhNjdmOTkzMywgMHhkNjUwOGVmZCwKLQkweGQwZmQwMWU0LCAweGQyNzI5NTNjLCAweDM0NTk3ZTg0LCAweDM0ZTdjY2JmLCAweDI0OWZkZDgzLCAweDVmNzliNTE4LAotCTB4OWZmYjk0NjEsIDB4ZGZkYmZlMDAsIDB4YzVhNDlmMDcsIDB4ZGJiOTdkYTEsIDB4ZjYzNjllYzksIDB4ZjQxOTExMzIsCi0JMHhmOTA5MzJmYiwgMHhlYjgzNjZlOCwgMHgyZmQwNmNiZCwgMHhlNDA0NDkwZiwgMHgyMzdkZjNlMywgMHgwNWQxOWZkZiwKLQkweDhmZTQ0NWRhLCAweDk3ODY3NzgyLCAweDgwYTQ4ODQxLCAweDgyOTEyNmU1LCAweDNhNWQ5OGZiLCAweDJiZmZjN2MyLAotCTB4MDE5ZWQ3YjUsIDB4ODNmMDQ4N2MsIDB4ZjgwMTg5ZmQsIDB4N2JhYTZjYWUsIDB4ZTIwYjllNjcsIDB4MmZmNjIzMjYsCi0JMHgxYmIxZjM4NSwgMHhiZGVmOWQ3MywgMHhjZTVjNzQwNywgMHhiYzM5NWJlZSwgMHg2OWY3MTcyYywgMHhhMDI1ZGY3NywKLQkweGY0YTQxZDljLCAweDRkMzczODAyLCAweDNkZWY3OGNkLCAweDk3ZGJiZjNhLCAweGQ3MzllMGE1LCAweDM0Y2E0ZjBjLAotCTB4YjE5YWY3MzgsIDB4NjhiYjc0NGYsIDB4ZDlkNzU5YmYsIDB4MzY0ZTcwNmQsIDB4N2M0OGEwNjUsIDB4NGVkY2JjMmEsCi0JMHgzMzRlMzA5YSwgMHg5YmFlZTJhMywgMHhhODhhNGU0MCwgMHg1NDdiODQzZCwgMHhmM2ZiODI4YSwgMHg0NmJkNDJiYSwKLQkweDY1Y2JmN2MwLCAweDlkMmJhOTlmLCAweDMzY2FkMzVmLCAweGZjNzQxMWE2LCAweGQwMGZkYTQyLCAweGZhYzM1ZTVkLAotCTB4ZGMxMWFmOTUsIDB4MTg1YmFhOTAsIDB4NjRmNTE0N2MsIDB4MmYwMTFhZTEsIDB4ZmVhMjY4YWEsIDB4MWI4MzFjNmYsCi0JMHg5YjcwYTM4OCwgMHhiNGZiZTg2YSwgMHgwN2RlMTczZSwgMHhhNzEyNmJiOCwgMHgzOTU2NzljMSwgMHgzZmJlMjc5ZCwKLQkweDI1Y2YxMmJhLCAweGI0N2JlOTBiLCAweGI5YWQzNDk5LCAweGFiY2RlMTBiLCAweDZmN2MwODExLCAweGUzM2EzNDU0LAotCTB4NmYwMGQxOTEsIDB4ZjY4NmU0OWYsIDB4MTZmZTc3ZjcsIDB4ZDI2NjRhZjMsIDB4Zjg1MWJhZjEsIDB4M2NlNmM0YjMsCi0JMHgyZmRkYWI4YywgMHg5M2JlZjEzOCwgMHhlZTUxN2RkOSwgMHg5MWRjYjhkYSwgMHhiOWQ4N2Q4MSwgMHhlZjk0NDBiNCwKLQkweGZjZWE4YzdlLCAweDk2MTY0MTg0LCAweGIwYjg1ZDA3LCAweGQ1ZDYwYWIyLCAweDE4NjRhNzJjLCAweDk4Y2U5ZjkwLAotCTB4YTUxZjhlYzAsIDB4ZmY1MWY2ZjgsIDB4ZTU4OTg4ZjUsIDB4NDdjYTM0M2QsIDB4ZmQyYWNkNGMsIDB4MDdkMmQ5MzksCi0JMHg0Mzc2NzFlNSwgMHgzOTk5ZWEwZSwgMHhlN2U3OGJjNCwgMHg4ZmU2NGFiZSwgMHgwOTZhNWExYywgMHg0OTg3ZTAwOCwKLQkweGRlNzg3NGNlLCAweGNmOGNkNGI4LCAweDc2NjI1ZjViLCAweDMzNTdiNWE3LCAweGQ0NGY0M2M2LCAweDg3YmUwNDQ4LAotCTB4ZTdkMzVjNWEsIDB4ODllM2EwMjksIDB4MTM5ZTEyZjUsIDB4YTg0OGNmOGIsIDB4YzRiZWU2Y2YsIDB4MzU4ZDY0ZTIsCi0JMHg1YTg5ZWUwYywgMHg5ZjcyZGZhNiwgMHhlODIyNjliOSwgMHg5NTZiYjllZCwgMHgxZWFkNjU3MywgMHhhMzE1NzQyYiwKLQkweGMyYzY3YTllLCAweDVmNWU5MmY0LCAweDUxNTRmNWU5LCAweDc2ZDhhYWY1LCAweGIxODk5ZWU4LCAweDJhY2Y1MGVkLAotCTB4YzBlY2FmMTYsIDB4OWIxMzk3M2UsIDB4NDE4NmE3YTIsIDB4Njk0MTQ5NWUsIDB4ODEyYjk5YWYsIDB4ODk2NzZmOWYsCi0JMHgyZGExNGRkZSwgMHg3NjA5M2U1ZiwgMHhmNzhlYzRiNywgMHg5ZDE5OTUwMywgMHgzZjhjMDk0ZiwgMHgxOWZmZTgwOCwKLQkweDgyNWYwZGMxLCAweGIwY2QxNDNjLCAweGM3M2ZmZGUwLCAweDQ3MjAxZTgxLCAweGRjZjE5MjJiLCAweDgwNTAzMGIzLAotCTB4MmVmMjU3NzgsIDB4ZjJkNGFlZTcsIDB4N2RjZTcyYmIsIDB4MWUyNDRmOGIsIDB4YjIyYWZkYjUsIDB4ZGZhYThmMTIsCi0JMHhmOTQ1ZmZmYiwgMHg0NzczOGU5NiwgMHgwOGIwMTA4MywgMHhlN2I0M2Y1MCwgMHhlZWIwMjNlNywgMHhlNDJkNzljNCwKLQkweDNiMGFjMWZlLCAweGY3ZmJmNWYyLCAweDdjMGE1OTlkLCAweDgxMDFmMzNiLCAweDY0NGVkZjgwLCAweGMzZDgxNTVmLAotCTB4MGI4Mjk1YjIsIDB4MWY3M2IzZTIsIDB4YTVjZmVmNjAsIDB4ZGZiY2MzZWYsIDB4MmZlMzJkZmYsIDB4OTAyZWU3Y2EsCi0JMHg0NzlhYjI4MywgMHgzNWZmNjBmNywgMHhiZmUwMGI4MiwgMHhmZDAwYWFiZiwgMHgyNDU5MjI4OSwgMHgxMGU2YmVkOCwKLQkweGJkYTgyM2VlLCAweDQ2YTNmY2MyLCAweDM5MDU0YzU5LCAweDc2NjI1YjI4LCAweGMyYjc3OWMyLCAweDFlN2YwYTRmLAotCTB4OTM1MWRmZTIsIDB4MWI5MGY3MzgsIDB4MDBlNzdiZTksIDB4MTRiZTBjNDgsIDB4N2IxMTBiYTcsIDB4MmU1M2ZjMGEsCi0JMHhmNDNiN2UzMywgMHgxMTA2ZTQ5MiwgMHhiMjdmMzhiOSwgMHhmZTE1NjdlZiwgMHg0NmZmODExMywgMHhiMWFmZjk0NCwKLQkweGZjMDRkNzI2LCAweGUwMjAyMjc4LCAweGYwMmU3Y2I5LCAweGVmZTdmMDJmLCAweGIxMGNmODk1LCAweDhiYThmZGE5LAotCTB4MGY5ZWE3ZjEsIDB4ZTUxZmYxZGIsIDB4MGFmM2QwM2IsIDB4YThmYzJhN2YsIDB4NDZjM2MzZTcsIDB4N2RlNjBkMzIsCi0JMHhhZTBiNTJmNywgMHhjYjZhYjcyMywgMHhjZTRjODViNCwgMHhiNzI3M2NmMCwgMHg5MDU0YmVlYSwgMHhjYjIzNDJlYiwKLQkweDVhZjA1MGZiLCAweDQyNzk2NDZhLCAweDQ0ZjVlNmVkLCAweDY3NWJhOWE1LCAweDQ3OWJhN2U2LCAweDJhM2Q4YjM3LAotCTB4NjNjYjIyMGYsIDB4ZGU3MWQxMDksIDB4ZTYzY2ZmNWMsIDB4Nzc1ZTlkZDMsIDB4NmZmNDVhZTgsIDB4MDAzZTUxYjYsCi0JMHg5M2I3YWZmYywgMHgwMjQzZWUxMCwgMHhlYjhhOGZhOCwgMHgxYmU2MGY0NSwgMHgzNzU5NDMxYSwgMHg0YWVmZjZhYSwKLQkweDU3ZmNjNGZlLCAweGUyZWY4OGVjLCAweDNlNDBlNjhkLCAweGYzNzhiZjdkLCAweDhlNzgyMTkxLCAweGRmZjk4OGJkLAotCTB4ZmQwMTNhZjIsIDB4MGYzNzIyNjMsIDB4OGEzZGVmODEsIDB4NDM4ZjJjOGQsIDB4NjEzYzE3ZWYsIDB4OTZmMGZiNjEsCi0JMHhlMGU5ZDYyZCwgMHhlY2I1MDliNywgMHhiYWUyYWY1ZSwgMHgyYWIzMjU5YiwgMHg0NWIwZmJiZSwgMHhiOWUxZmE1MiwKLQkweDBjZTk0YzhhLCAweGZjYzM1NWRmLCAweDI5NGFmN2Q0LCAweGJmMmQxYmY5LCAweGRjNTdmYzY3LCAweDU3M2ZhMTIwLAotCTB4MTVhMWJiNWMsIDB4MGY4YWYzZjIsIDB4NWJiZjcxOWEsIDB4ZjMwNjdiNWUsIDB4Nzk1ZjczOGYsIDB4ZDYzZmRkODksCi0JMHhiMmYyNmEyMCwgMHhkNTQzZTVkYSwgMHg1MWNlNzg4YSwgMHg3OThhNWY1NiwgMHhlNzhlYjQxYywgMHgzYzc1NjUxZCwKLQkweGU2MDdlOGZmLCAweDY1N2ZjY2ViLCAweGEyOTk2NmZiLCAweGRmYTZmZTcwLCAweGIwOWVmMDM5LCAweGZjMGViNWE2LAotCTB4ZmJmNmE1NGUsIDB4ZTVkYjEzZjMsIDB4ZTcyZGQ1M2YsIDB4OWNkNzRmZjksIDB4NjMxZmE4MjAsIDB4MGE3ZDNmZTcsCi0JMHg5NDdiODBmZiwgMHgyN2ZjZGEyYywgMHgxYmY0Y2I1MiwgMHhhYzU2Njc5ZCwgMHg3ZTIyMTNlZiwgMHgzZTVmNGJkNywKLQkweDJkYmJmOTBiLCAweDE2N2IzZjFiLCAweDhmZjI1ZGU2LCAweGJjODU5ZmNmLCAweDA5ZDAwYTBjLCAweGJhZjk0YTdlLAotCTB4NTFkZjMxNzcsIDB4ODVhMGVmNzksIDB4ZmY3ZTgzZWYsIDB4NmQxN2NjM2IsIDB4MDZlY2MwZmQsIDB4NGZkYmFkNjgsCi0JMHhkMWZmODNhNCwgMHg1NDliZTFiYSwgMHg2N2JkMDNjOCwgMHg3N2M2MWU3YiwgMHhiNzM1NzllZSwgMHg2ZjE1ODkyYiwKLQkweDZmZjAyNWUzLCAweGFhZjkxM2EwLCAweGQ2MzViYTdhLCAweGM4ZmU2MjM3LCAweGQwNzc0YTY5LCAweGI2YmM5MTEzLAotCTB4MmY5NjUyYmEsIDB4NmNmOWUyZTgsIDB4MDdlNzYzZWIsIDB4YWI1ZmNiYjcsIDB4MmJiYWYxYmYsIDB4MzNkNjNmNDEsCi0JMHg3OWEyZTEzZiwgMHgzZDI4MDc2YywgMHgxZDA0ZWYyZiwgMHhjNTdjZjNkNywgMHgzN2JlNmJiYSwgMHhmYzM0ZWQ4ZiwKLQkweDJiZWJkMjgzLCAweGYwMWYzNjhiLCAweGNmMzlmYWNiLCAweGY1NmQwZDNkLCAweGIxZTYxZGM5LCAweDNmODEzYTg1LAotCTB4ZDFiOGZmMjUsIDB4ODNjNDMxZTIsIDB4MTE3YzZkMWMsIDB4N2U4MTA3ZjMsIDB4ZDdkMDJlZjksIDB4YmM0M2E2NWYsCi0JMHhjNjE0YTRmOCwgMHhiYjc4NDRiOCwgMHgyYjdiYmYxOSwgMHhjYTNlZmVkZSwgMHhmYmFiZWI1MywgMHhmMDk3YmYzMSwKLQkweDEyNTZlMDNjLCAweDRkN2NiMWY5LCAweDVmMmEwMzFlLCAweDZmZjk2NzYzLCAweDFmOTAwZTljLCAweDczZTA3MmU3LAotCTB4ZjhjNzA3OWUsIDB4ZWI4ZmM5NWEsIDB4NmM2ZTJmMjgsIDB4ZTM4YjI2N2MsIDB4ZDJlOGJjZjEsIDB4M2NmMjFmMzUsCi0JMHg4NGRkMjhiMywgMHg0M2FmNDBkMSwgMHhhODc3OWJkZiwgMHg3ODA5YzFlMCwgMHhmYmNlYTUxOCwgMHgxODg3OWQ4YywKLQkweGQxZDRmYmM5LCAweDdhMDllODBkLCAweDQ5ZDc5MjNjLCAweGJmMjEzZGViLCAweDFmYmMyMDJmLCAweDc1Yjg4ZjJiLAotCTB4NmQxN2NiMTUsIDB4OTNkZmI0OTUsIDB4ZjJjNGU5NDYsIDB4ZWJjNjQ3NDAsIDB4YjlkMDM2ZTQsIDB4YWQ4YmNmZmMsCi0JMHhhOWUyODdlMywgMHhjMzRiYmM1ZiwgMHg1YWJlMGEzNywgMHhlZmQ2YzdjZSwgMHg3Zjg1ZTNkMywgMHhkOWFiN2JlZSwKLQkweDgyZmJmZTgyLCAweGZiZTFlMzliLCAweDI2NDNmYTgyLCAweGYxOGJkZjgyLCAweGRkZjI5NTdkLCAweGI1Yjc4ZjEyLAotCTB4N2YzMTEzYWMsIDB4MTFhZWFhYjAsIDB4N2Y1ZWJiZjUsIDB4MTQ3M2YxOTQsIDB4ZTM4YjdjZmQsIDB4NmIyYWRlOTksCi0JMHg2NWEzZjY2MCwgMHhhMzYwM2RhMywgMHhkOGRlNWE3MCwgMHhiNjVkN2M4MiwgMHhmMjA5OTBmZSwgMHg2ZWQ0ZjZiMSwKLQkweDAzYmNiMTMyLCAweDNmNjA0NzI2LCAweGI3ZjlhYTAyLCAweDA4NzNiY2JjLCAweDlmN2U3M2VhLCAweDg1OWM3ZTkxLAotCTB4NjBmMjljN2MsIDB4ZDdjYTcxZWMsIDB4MzM4Y2QxOWYsIDB4MzkzM2FlNWYsIDB4ZWYxZjE3NmQsIDB4NjZlN2EzNTMsCi0JMHgxMzY5Zjc4MCwgMHhhZDNlYTNmMywgMHhmYWM1MjcxMywgMHg3OGI2ZTZiZSwgMHhhYmFiZWY4OSwgMHgzYjUwZmM5OSwKLQkweGQ5M2FmNzhhLCAweGEyNGUzZGQ5LCAweGIyZmQxZTIzLCAweDBmYTNlYzdiLCAweGY3ODBmZGMyLCAweDQ3OTg0ZGQ4LAotCTB4ZTc5MmI4YjEsIDB4M2I5N2ZjNWQsIDB4ZDhiZGU4MGQsIDB4Zjk4MTM1N2UsIDB4YWFmYzA1MmUsIDB4ZDM5MmY3ZjYsCi0JMHg5MzlmYzA0NywgMHhkNDIzYmNkMiwgMHhmY2NhMzBlNywgMHgyNDBjNWQ0ZCwgMHhiN2JmM2VhMCwgMHhmYjBhZWE0ZiwKLQkweDdiOTQ2MjUzLCAweGNkYWUzY2MyLCAweDc2MDhjYWZjLCAweGUyY2ZjOWIxLCAweDkxZmNlNGZiLCAweGM5YmNmMGJlLAotCTB4NGM5ZGRjZTgsIDB4MTA0ZDM2ZTEsIDB4NmQ5YTEwZGMsIDB4N2UwY2Y3Y2YsIDB4ZDFlMGNlMjQsIDB4MzkwOTVmZGUsCi0JMHhiM2JlYjBmOCwgMHg4OWZhMDM2ZSwgMHg0OWM4NDM3NiwgMHhhNWJiMTBiYiwgMHhiODM3MGQyOSwgMHhhNjMyZTIyZSwKLQkweGU2M2NlYTYyLCAweDhmZTQzZmFmLCAweGU3ZGYwYmViLCAweDViNzUwODM5LCAweGE4ZGI5ZmExLCAweDYxMjE2ZmI5LAotCTB4ZmY3NzUxYjQsIDB4OTdkMDM5MDIsIDB4ZTcxYjFmZGEsIDB4Njc1ZTI1NTcsIDB4NzBhNmZmNjcsIDB4ODc1ZWYxOWIsCi0JMHgxMmE0NDFjNCwgMHhkZDg1NzdkOCwgMHhlM2M0ZmU4NywgMHg1ZjdlMGYwZSwgMHgyMTAzN2Y0NiwgMHhjNDg5MjFkZiwKLQkweGMxZjdkNWJiLCAweGY3MzU3MWQwLCAweDM1NzFkMDRjLCAweGI2OGY0NGY1LCAweDc4YzkzYzllLCAweDQ5YmQ5NjM0LAotCTB4Mjg5OGYzZTYsIDB4ODkwZjEwZGEsIDB4MmZlZTA2NzksIDB4YTVmYmYyN2IsIDB4OTg5ZGU3NDYsIDB4NjgyMWRjNDIsCi0JMHg3OTg2YzZiZiwgMHg2NGJjNTRlMywgMHgzNjZjM2FmNSwgMHhmY2U5YmNlZCwgMHg2MTIyN2EzNCwgMHg2MDZjYjM1MCwKLQkweDc3M2NkNGYzLCAweGViODA5NzEyLCAweGQzOWY2OGY3LCAweDdmZWE2YWY5LCAweGNkZjZlNzg5LCAweGVmYTA4YzQ4LAotCTB4ODQ0ZDcxNmMsIDB4MDZhY2ZmZTMsIDB4ZGU4YzRiZGYsIDB4NGNjMjU0YTQsIDB4NGU5M2NjMjYsIDB4NDgzZmJlMTMsCi0JMHhlM2EwZWJlMCwgMHgyMTNiZmE2YiwgMHhkN2M2YzA3YSwgMHg5ZDNkMjFjMiwgMHgyZjA2ZWZlYSwgMHhjNmIwNzZlNywKLQkweGZhMGEzZGVhLCAweDA1NzdhYjI2LCAweGE3NjZmYTI2LCAweGMzYTM5ZTA5LCAweDBiYjA1YjY5LCAweDg1Y2NhN2VhLAotCTB4YWQwOGU0YjksIDB4YWY4Y2Q1MGIsIDB4MjgyMGFlZmEsIDB4MmNjMzdkMzcsIDB4ODkyYzg1OGYsIDB4MWNkNTNmNDcsCi0JMHgzMGNiNjQ0NywgMHhjODhhMWVmOCwgMHgyNTE4MzBkMiwgMHg1YzlmY2ZjMCwgMHg5NDE0MGM4YiwgMHgzNWU1MTk3MSwKLQkweDNjMzA1ZWZhLCAweDEyODczMGRlLCAweDI4OWEwZWExLCAweDllZjE0M2ZjLCAweGFhZmM2MWNmLCAweDg2Njk3ZGViLAotCTB4NzkzY2IwYTEsIDB4OTQ2Y2FlZTksIDB4NjIyMDRiZGEsIDB4ZWZmNGE4NjgsIDB4NGIyNTdiZGUsIDB4OWY3YjgxZjksCi0JMHgwZGRmZWM4OCwgMHhhOTVhYjg3NiwgMHhkZjBlYzU1MywgMHg0N2M3NTc2YiwgMHhhYTM4OWVlYSwgMHg1OTMzYWJlZiwKLQkweGJmZDg3ODVkLCAweDQyNGY1OTc0LCAweDBhZjA0YjFlLCAweDcxMDdkMDU2LCAweDNjZjE0YmNlLCAweGViODQ5NDJjLAotCTB4NTE3ZDk4YmYsIDB4NGQ3MDM5ZTYsIDB4MTFmOGM0ZjMsIDB4ZjcwYTllMmMsIDB4NDdiM2Y2OGEsIDB4N2I0NmM3YmUsCi0JMHhkNGE2ZDZiYywgMHhmMGJmYjg0MywgMHhiZDQ3ZWZkNiwgMHgxZmI3NWE1NiwgMHhhNzUwMGRkYiwgMHhlNmU0ZWY2NSwKLQkweDI5MTIzZDg5LCAweDc5ZDVhYzU2LCAweDVmODA5NzY5LCAweGEwNjY5MDViLCAweDVhYzRiY2ViLCAweGMxYThkYmJkLAotCTB4M2MxYTEzYzMsIDB4YTYzZDE3MTgsIDB4M2Y2M2MzYzMsIDB4M2M5NzBmMDgsIDB4YTFlMjE4ZmMsIDB4N2NhNmViYjMsCi0JMHhlOTRhZDAzMSwgMHg4MGM3MjUzNywgMHgzYThkMzdmNywgMHgwYmY4YzM2OCwgMHgxZWQwNTlmZCwgMHgzYWFiMzg3MSwKLQkweGQ5NTY4ZWY4LCAweDZlMzg1MGE3LCAweDk3ZjBhMzgwLCAweDU3YzI5ZWYyLCAweDFmNGRmMTFkLCAweGRkOTRiY2UyLAotCTB4OWZlNWE3ZWIsIDB4MGM2N2FiMDIsIDB4ZjU2YjFiYzAsIDB4ZTBhNWIzMWMsIDB4ZWViYmYxZmEsIDB4ZWYwMmJlMjksCi0JMHg1ZjI4ZTQ4NCwgMHgzODZmOWIxMywgMHg2MzVjMjc3YywgMHg1NWJjNzNiZCwgMHg5MjlkYWYxNSwgMHhhNGNjNDBiMywKLQkweDU5MDVjZGYzLCAweDRmNWQxOTE4LCAweGQyZDk0MmNhLCAweGM1MzNhZTlmLCAweGVjM2NjMDYzLCAweDEyNmZhYjFhLAotCTB4MWU5OGUzOGMsIDB4NDhmNTUxMGUsIDB4NzBkZjAwNWQsIDB4YTM4ZThjNDEsIDB4NzZkNTQ3YzgsIDB4MmFhZjhmYjYsCi0JMHhiMTE2MDQzMCwgMHhlMDAxNjBmMywgMHg1OWEzZjk0NSwgMHhjNjYxMWZjNywgMHg5MDg3MGQxZiwgMHg4NzgyY2EzZiwKLQkweDU0MzQ3ZjE4LCAweGU3ZTc4ZjhlLCAweGFlOGZiMDZhLCAweDQwYTFlMTI2LCAweDU3ZDY5OWY3LCAweDI4YmQ4Y2YyLAotCTB4NTVjMzU4ZGYsIDB4NDg1ZjI4M2QsIDB4ZmNiY2ZhZjIsIDB4MzNhZjEwNGIsIDB4Y2Y4N2QyNjIsIDB4NDc1NzU5NGIsCi0JMHg5YmRlYWRmNCwgMHhkODIwZjBmOSwgMHhlMDMzZWU2NywgMHgzNzgyOTg3OSwgMHgyYjYyZGZhNSwgMHg2NjFjYjNjYiwKLQkweGZjMDNjZGY3LCAweGRlNmU4Zjk1LCAweGI4ZGJlNDAzLCAweGQ3OThjZmY3LCAweGMzNzdkOGUxLCAweDMxZGY3ODRlLAotCTB4MTVjODUyOTUsIDB4ZGY3YWI3MWQsIDB4YjdiZmJjMjIsIDB4NDAwM2FlOWEsIDB4MGNiMDkwMjYsIDB4N2M2M2JkNzYsCi0JMHhlMDg5ZjkzMCwgMHg0MTllZmMwMywgMHgyODQzOGY4MCwgMHg3N2Y4ZWIyZiwgMHhmMGVlNTQ0NSwgMHg1NmRlZGEzYiwKLQkweDAzYzNiZjc2LCAweDUyMDc5NjU2LCAweGM5NzkxNTZkLCAweDdkOTRiMGZjLCAweGZmYjA0ZDY3LCAweGMwNjI1ZjJhLAotCTB4MGU1MDI5ZmUsIDB4MDk3ZmFmNTIsIDB4MWFiNmFiZjYsIDB4MGE3NGY5MzUsIDB4YTI3ZTE1NWQsIDB4ZjcwYWQ0OWEsCi0JMHhlODk1NWM0NCwgMHg5ZmU1YWU1YiwgMHgwYWE2NmIyNCwgMHgyM2RlZjI5ZSwgMHg0ZDlkZTI3ZSwgMHhhZWQ0NjUxOSwKLQkweGJiMDZlZjNiLCAweGQwYTdmOTRhLCAweDUzZDNiMmFhLCAweGMwMTY0YjA2LCAweDI4N2Y4NDViLCAweDBmYTJjNjdmLAotCTB4MzAzN2VmN2QsIDB4ZmUwMzhjMWUsIDB4MGI1ZDg2YzIsIDB4ZTg3NzM4NDQsIDB4ZTBiMzVkMmMsIDB4M2ZkYTNhMWUsCi0JMHgzNjJhNGFjYiwgMHgxMmIzZjdkMiwgMHg2NGY1MDk2OCwgMHhlYmNhZWY1ZSwgMHhlN2Q5NTgzZCwgMHhhMDQxYjcyMywKLQkweGI4ZjE1N2NmLCAweDllNTYyYmVjLCAweDVlNzQ2MDM3LCAweGJjNWNmNzBhLCAweDlkOWFmMWMyLCAweGEwYmI0NTY2LAotCTB4YTI5MWFkYzgsIDB4OGRiNWNlMGYsIDB4MzMzYjdjZmMsIDB4YmEwMDY5OWMsIDB4MGM2YzcyMjksIDB4NmE3NjQyMWIsCi0JMHgyZThkMzJiNCwgMHhiYzM5ZTQwMywgMHhlMTc5ZjdlNSwgMHhiZDIzYjBiYywgMHhlYzI1ZjU3MywgMHhmM2ZkM2ZiYiwKLQkweDFmOWYzZTQ2LCAweGRkN2Y1ZmVkLCAweDQ2ZTBmYmVlLCAweDVjNjk2ZmMwLCAweGQwMzcyM2YzLCAweDlmMjVkOTdhLAotCTB4OTE3NjljNjMsIDB4ZjUwYWVjYjUsIDB4ZDRiZTllNzksIDB4ZjNhZGZmY2YsIDB4MWZlMDFjMjcsIDB4OWU2ZDdlYjYsCi0JMHhmZWNmY2IxNCwgMHhkZmZjY2FjYSwgMHhmOGU5ZmViZCwgMHgyMTc3ZTI5ZSwgMHhhYjI3NDBhOSwgMHg2MzM0MmZiZiwKLQkweDU1ZDU3ZTg5LCAweDhlODBmMmE4LCAweGVjMDkzMWIyLCAweDk5YzU5NWFiLCAweDJiYmVlOWM2LCAweGFlYzdjZTU0LAotCTB4NWZiOGIxMGEsIDB4ZTgzM2U4MTYsIDB4ZGQ4MzM1ZGYsIDB4ZjMzNWZlNTcsIDB4N2ZlOGUyOGYsIDB4Yzc5NGVlNzAsCi0JMHgzMmRlYzljZiwgMHg2OWRiMTZmYSwgMHgzYjA4YjdiZiwgMHhhODRhY2Q2ZiwgMHg5M2VmODQ2OCwgMHhjZjAzMzk4OCwKLQkweGY2ODg3MzJiLCAweGU0YWNhZmJlLCAweDhmMzgwOWVhLCAweDQ3OWMwYzg0LCAweGJkYWU5YzZlLCAweDQwMzQ2Y2FiLAotCTB4Y2MwYzlmN2IsIDB4MmEyM2NjNTcsIDB4MjNjZThjYmYsIDB4NzhjMTBmYWIsIDB4Mjk3MDE5MTYsIDB4MTk0ZDg1ZTYsCi0JMHhiNzlmZjk0OCwgMHhlY2NjMGU3ZiwgMHg0MjY3MTFiNywgMHg3NjRmZWY1NCwgMHhhMDlkZTJkZCwgMHhkZGFhNWJmMSwKLQkweGZlZGZjN2EwLCAweDU2MjNiYzRlLCAweDM2NzVjNWZlLCAweGZkN2I5ZmM2LCAweDAzZTQyZjVlLCAweGRlM2NmMWU4LAotCTB4YmJiMTJjMjUsIDB4OGY1YmUzZGEsIDB4MTVmZTNkNGYsIDB4OThmMWVhYmMsIDB4NDI3YjkxZjMsIDB4ZTkzYzBjNTIsCi0JMHhiZjNkMTJmMSwgMHhiYTAwYWMwYywgMHhkMTE0MGRlNCwgMHhkMDc0Mjk3ZSwgMHhjYmY2ODllMywgMHg1ZjZmN2U4NywKLQkweGY5YzFmYjQyLCAweDA4YzJiOGFiLCAweDQzMzcyZjc2LCAweDQ1N2ZkYzIwLCAweGMyMmYzNmZmLCAweDI1N2ZjYzFmLAotCTB4Mzc0OGVkNWQsIDB4ZTNkYjVlM2QsIDB4OTc5ZjkzZDEsIDB4MWVkZjVkMWEsIDB4MzdlNjE3YzAsIDB4M2U0MDBmYjksCi0JMHhjMjRkYTM1OSwgMHgxYzY4NDk3MSwgMHhiYzdiZTc1MSwgMHgwNGU0ZjEwMiwgMHhiYmVmMWUxYywgMHhhYTQwYzcxYiwKLQkweDU3NjJhZWY4LCAweGZmMjg4OGUyLCAweGViNWFmYjhjLCAweDI3MDVlNmU3LCAweDM5ZmYwMjllLCAweDA0YjdjMTJiLAotCTB4Y2M0NGE2ZTIsIDB4OGEzYTNjYzAsIDB4M2U1YWMzYmYsIDB4Y2Q2YmZjZTMsIDB4ZjhhMTNlNDAsIDB4MGM0M2I2ZDQsCi0JMHg2NjRmZGUwNywgMHg1ZDRlNzllZCwgMHhmNGNmOGViYiwgMHhlY2Y4NTdlYiwgMHhhNjMwNzgxNSwgMHgzZTE0YmUzZCwKLQkweDdlZTM2ODliLCAweDEzZDI3Nzc5LCAweDViMjFlNGZjLCAweGRlODAyNDQ2LCAweDk4YTRjMTI2LCAweDA3NTE4OGYxLAotCTB4OWMzODExYmQsIDB4MDUxZjkxNWYsIDB4NzczYzhiZTIsIDB4ZjQyN2Y5ZjYsIDB4OGViNTEzNTcsIDB4MWNjMGY4YWEsCi0JMHgyZDliNzdkMSwgMHhmODUyZmU4NiwgMHhiNzRlNGFlMywgMHgxM2JjODkyYiwgMHgxMjU3NGJlMiwgMHg3ZDkxMTdlMywKLQkweGZkNzQ0NjQwLCAweGRlM2M2Y2IzLCAweDgwZjQ4M2QyLCAweGJhYjJlZTc1LCAweGFmOTk3ZWQ4LCAweGVhNmViMjMzLAotCTB4YjNkZDAyNTYsIDB4NzFkOWY4ZjksIDB4ODM0ZWZjMzYsIDB4MTEyZDhkODQsIDB4YmRlMjY3ZmMsIDB4MjkyOWIyMzUsCi0JMHhmNzg5MGYzYSwgMHg4NDE1ZTkyNywgMHhmMDMzNzFmOSwgMHgxNzhhNWNiZSwgMHg5ZDFhYzE3MiwgMHg2MDliNDJjNywKLQkweGY4NWM3YmM0LCAweGM2ZDc0ZTNjLCAweGI2ZGY5MGM5LCAweDAwM2RmNDRlLCAweGY2MTE2Y2ViLCAweDE5ZjVjMTBkLAotCTB4ZWVjMWZkNDMsIDB4NmYzZmRiZTksIDB4ZWQwNjU1ZDgsIDB4ZjYyMTVmYjQsIDB4MmY5ZmYzZTMsIDB4Nzg0M2I4YjIsCi0JMHgzYWIwMzliYiwgMHg5NGZmNjNhMywgMHgwN2RhMzU4YSwgMHhlMWIyMmU0NSwgMHg0MWNiYzhiYiwgMHhjYzIyYzJjZSwKLQkweDUzY2ZjODNiLCAweGMyMjk5Yzc2LCAweDM4ODdhMGZkLCAweGUxNDY1Yzk3LCAweDExM2IzZWVkLCAweGE5NzNmOWYzLAotCTB4N2E3ZTgxYmEsIDB4YjdmM2Q3YmUsIDB4OTAyNzlmOWUsIDB4NGY3ODRjZjAsIDB4MzYzZmM3Y2YsIDB4ZGZmMTQwMGYsCi0JMHg5MDczN2MyMiwgMHhlZWNhOGRmMiwgMHhmOTQyZmMyOSwgMHg1ZDFiNzllNywgMHg2Mzg4ZGI3NywgMHhmZGJiODE0ZiwKLQkweDUzY2Y4OGNlLCAweGZlMjllZWMxLCAweGYxMGZkNDc5LCAweDNhZmQwMGJjLCAweGZmMTVkM2YyLCAweGY3Y2Q5MzdjLAotCTB4YzIzM2Y0MTIsIDB4OTlmYmU4N2EsIDB4ZjgwNjVkMDMsIDB4Y2Q5MGZlN2UsIDB4NTczYzMyZjMsIDB4ZWQ4Yjk2ZmMsCi0JMHgyMzJlYzgzNywgMHgzYmU3NDgxOSwgMHhjZWExZDM5MywgMHg1OTNlZjA0MCwgMHhmNjgwODE3OSwgMHg5NjEyNzZlYywKLQkweDJiZGJiYzYwLCAweDc2YmVjZDI0LCAweGM5ZmMyNWE2LCAweDU4N2U3MGZkLCAweDk5ZWQwMDM5LCAweDE0ZmFiZTBmLAotCTB4OGY5NjdkZjEsIDB4MTNiZmM1NWMsIDB4MGZlZTE4MTksIDB4MTYzYmJlZmIsIDB4NDNjN2RmNmEsIDB4YmRlOGFjYzIsCi0JMHhiZWQwOWY5ZCwgMHg2ZTAwOTJkZCwgMHg4NzdjMGE3MywgMHhmYjZiMjA1YiwgMHhkNjU3YzdlYiwgMHg3ZmFiODdhMSwKLQkweDYzZGY5Y2FmLCAweGJiMjJmNzA0LCAweDlmYzJmZTU1LCAweDhkOGZjYzZjLCAweDdlMmRmN2NjLCAweDM3YzUwMThmLAotCTB4YzFiM2Q1ZDgsIDB4YzUwZjAyNGIsIDB4ZjRhNTVmZTAsIDB4OGM3YjI1YzUsIDB4ZTZmNWEzYzMsIDB4YjFlOWU2ZWQsCi0JMHhjNjUxMTdlZSwgMHg4MzNkZjA1MSwgMHhmY2Y4MjkzNCwgMHg2NWZmMTYzNiwgMHhjMDFjNThmYiwgMHg3MzQ4NDRmMCwKLQkweDdkOTRhZjRlLCAweGRmZDAxM2MzLCAweGEwMjc1YmViLCAweDk3NTI1ZDdmLCAweGYxYTU5ODYzLCAweGI4M2VkOWYzLAotCTB4ZjcwZjlmOWQsIDB4ZmFmZjQwNWQsIDB4YWZjZmNjOWQsIDB4NDJmZGM0YWIsIDB4ZjdkYjNkNDksIDB4NWNlZjgyYWMsCi0JMHgwYzg5ZjNiYSwgMHhiMjNmZmY0MiwgMHhhOWJjODU5ZiwgMHg5MDQ3Yjg1MiwgMHg1M2UwODdiNSwgMHhhY2Q1M2VmNSwKLQkweDg5N2RiMjdmLCAweGY2MTFiOTY5LCAweGM5MzRiZWEzLCAweDVhYmZlYjRkLCAweGY3NDcxNTVlLCAweGM0MTk1NTRkLAotCTB4MjliZWU4NDIsIDB4MjdjYjU3ZjEsIDB4YjU0ZDE4YWUsIDB4MjA0NzkyNzMsIDB4YjJhZjU4ODksIDB4ZmVmY2U5OGQsCi0JMHhjYjU3ZjkzOSwgMHhlMzY1OTZhYSwgMHhhZWRlMmJiZSwgMHgyNDc2Y2ZkYSwgMHgyZTZkZTcxZiwgMHhmYjQ3NjNjNCwKLQkweGJjMTJjN2Q4LCAweDNjNTU3NmM5LCAweGIzZmY0ZjQyLCAweGUwMDRhZTcxLCAweDdmN2NlNWJmLCAweDU5YzJmNTdkLAotCTB4MGNiMDZmYjgsIDB4ZjkwZTlmMzgsIDB4ZWU5Y2Q5NjEsIDB4YjM4ZjNiMmUsIDB4ZGNmN2Q5NWEsIDB4MDBmNGQ2ZTUsCi0JMHg0NTZiYTllOCwgMHhkOWU2MGI5ZiwgMHhmZWY5YzZmNiwgMHg2YjdlNDcxMCwgMHhiN2RjMTFlMCwgMHg4ZWJkZjkwNSwKLQkweDVlNDVmY2ZiLCAweDY1ZmFiZTc1LCAweDVmNjdlNjc2LCAweDAzYTM0OTdkLCAweDhjZDcxZGY2LCAweDY3N2UwYmZjLAotCTB4ZWVjOGRhN2UsIDB4NmQxOTZiNGQsIDB4NGZiOWY4ZDIsIDB4MDMyZWYyZGEsIDB4ZDE0OTRhZjgsIDB4Y2U3ZTgyMjcsCi0JMHgyMGViYjExZSwgMHhlYzhlZmJkOCwgMHg3ODBlZDQ0NCwgMHhlNDAzYjAwNCwgMHgzYzU0ZmVmYywgMHhlZGRmYWEwNywKLQkweDBiNjVkODgwLCAweDc0ZmQ2ZWZmLCAweDlkZWE2MzdkLCAweGYwZGQyY2I0LCAweGI3ZWMwNzE3LCAweGNmY2NlZGIyLAotCTB4YzI2YzZkM2IsIDB4NWU0YTc0N2IsIDB4MDc5ZWYxMTUsIDB4NmRlYTZlM2EsIDB4OWZhZTVmMTAsIDB4MWIxMGY1OTUsCi0JMHgwNzZkNGUyNiwgMHg0M2FmYmYwOSwgMHg4Y2FmMDdmMSwgMHgyZWRjMDM5MywgMHhiYzRkNzEyYSwgMHhiZDVjNjNkZiwKLQkweGRhMzhiMWU4LCAweGY3YTc4NWZiLCAweDBmOWUzZTY2LCAweDFiOTIyMTc0LCAweGQ5MjMyNWRkLCAweDNmMjI3ZTg1LAotCTB4NWRiZmExZTcsIDB4MGVmMGFmNzAsIDB4ZmViZDc5NWUsIDB4NDBhZjFiZjMsIDB4NDI3NmEyNjYsIDB4ZDdjOTNmMDAsCi0JMHg5OGVmMDU4NSwgMHhiN2ZjNTYzZSwgMHhlMzZiNWY3MSwgMHg1MjdmN2E5NywgMHg4M2UzM2JiMSwgMHgyMGY0OTc0MywKLQkweDhkZDcxNzgwLCAweDVlYzIxZGY4LCAweGU5NGRlNjIzLCAweGYwYmNjZGZkLCAweGNhZmMwZWM0LCAweDM2M2Y5MTQ3LAotCTB4MDJiMWY3ZDYsIDB4MTlkOTg3M2QsIDB4N2ZkNzk2NWYsIDB4OTRhZWY3OGUsIDB4YjgzNGQwOTEsIDB4NWVhY2E2ZmYsCi0JMHhmN2M4ODY3NCwgMHg2ZjI1ZTllOSwgMHg2YWMxZGZjMywgMHhlMDJlNGEwYiwgMHhlZWUwYjZkZiwgMHg2ZjUwMjFiOCwKLQkweDU2MWUzMTEwLCAweDY1ZjY0ZWZlLCAweDQxYWQ2N2MwLCAweDI5MWZlZjA5LCAweDAxY2M3ZWRmLCAweGYzYjE0MGZhLAotCTB4MmY3NjQxYWQsIDB4MDhmMDViNDksIDB4YjZlMDU3M2UsIDB4MDY1ZjI0MzYsIDB4ODE4MzY3ZjYsIDB4ZWQ3NzNmZWQsCi0JMHhmYTBhZDZmOSwgMHg2N2YzZjVlMSwgMHhhYmRmNzE5MywgMHhmZjlkNjlkOCwgMHg3Mzc3YzRhYiwgMHhiZTI0NjJlZCwKLQkweDg5NmZmNmFiLCAweGYyMDA3ZDk4LCAweDI0MTJmMmE3LCAweDdmNTEwYTIyLCAweGZlOWQ5ZGI1LCAweDkzYjEyYzg4LAotCTB4ODIzYWY2ZjYsIDB4ODIzMWUyN2YsIDB4NzdlZGViOWMsIDB4ZmIzYWRmMDQsIDB4ZmI5ZDg4ZmQsIDB4MzBjOGJkOGYsCi0JMHhlMWFmYzdiOCwgMHhmYzdjZjI3YywgMHg3NTY4MzNlZSwgMHgwY2Y4YzIyZSwgMHg3NmRhNGZmMywgMHgxNGQ4ZmE3ZCwKLQkweDY0NGZiZTc4LCAweDE3OWZmZGRmLCAweGQ4ZGZlZjkxLCAweGIzNzdiZjMxLCAweDJhZjc4ZDRkLCAweDZlYjlkN2E0LAotCTB4ZDFiNzVhNjcsIDB4Yzc3NmU3ZmUsIDB4ZDFiNTc4YjMsIDB4YmJmYTk5N2QsIDB4MDBmZjY4ODMsIDB4M2JhODU3YzcsCi0JMHhiYjkyZjczYiwgMHgzZjNiN2RjMywgMHhiNzBjZmZkYSwgMHg0NWVhZmZiYiwgMHhiOGQyZjc5MCwgMHhjMzUwNDRmMCwKLQkweDk5MGU2YmZkLCAweGIzMGM1ZjQwLCAweDdhNjI1ZjdiLCAweDdhMGFjZWEwLCAweDdiZTMyNjQwLCAweDUxNmUzYTEwLAotCTB4ZmMwZjE5M2MsIDB4NGUyNGFlMTUsIDB4NzU3YmMzYzgsIDB4NzQwMGMxYWYsIDB4MDMzNmIxMTksIDB4ZjFkNjY0ZjMsCi0JMHg3NTc5YzE3MywgMHg5NTBjYTZkNSwgMHhjZmM3OTk3ZSwgMHg3MjRhNGU5NSwgMHhmOWVhOTI3YSwgMHgwM2QzMDc3MCwKLQkweDNmMTc3NzI3LCAweDAzZjJmYTg3LCAweGMzMTdlOTMzLCAweDk4M2IyNjNlLCAweDkyNjRkYmJkLCAweDdlODdhY2E3LAotCTB4ZWZiODBkODcsIDB4ZWI2N2I1ZDgsIDB4NmUwZmI4MWUsIDB4NTBkNzQxZGUsIDB4NDFhNzM3YjAsIDB4ODZiYzI4MWUsCi0JMHgyMGFhZWI3ZCwgMHgyM2UxYjZjZiwgMHhiZjU0MTZiMCwgMHgwZDEwMjlhZiwgMHhjNDZkZGM3NCwgMHgwNzY0ZTJjNSwKLQkweDhkZmZiODBjLCAweDI3ODkxN2M0LCAweDI5ZjlkNjE5LCAweGY2ZGJiZmQ3LCAweDUwZTczNDFhLCAweGE0M2RmOGRiLAotCTB4MzlkOWRhMWYsIDB4OGIzYjdlZDQsIDB4M2JkYzZkNTMsIDB4OTQ0ZWY5M2UsIDB4ZDAwMWRmNDMsIDB4OWI0N2U1ZmYsCi0JMHg2OGFlMWNhYiwgMHg5N2YxNGQ1YywgMHgzOGQ4MWNjNiwgMHhlN2ZkMzA2NSwgMHgxMzgzMTY5OCwgMHhiMDNhZWRjOCwKLQkweGJhZjU4NDVhLCAweDI1ZGI1MjRlLCAweDEzZmU3NjkwLCAweDFhODlmNzg1LCAweDA2MTZiNmRlLCAweDBkZTNjZThmLAotCTB4ZmYwNTUzOTAsIDB4M2MzZjAyZDQsIDB4MzViN2Q2ODgsIDB4YmYyMDkzMTksIDB4YjJiZmMxNGEsIDB4NTc3YzY1MGUsCi0JMHhiMmFjZjExZCwgMHgzNjc5MjhhMSwgMHg1NzdjNGY3ZSwgMHhiODdjZjdiOSwgMHhhMGY3Mjg5MywgMHhiNmNlNWYyMywKLQkweDNmMTk1YTdiLCAweDNmNTBlOWM4LCAweGZkMWUzYmI5LCAweDllZGM0ZDkyLCAweGRlODJiNDkxLCAweDRlODUzZjgwLAotCTB4N2Y2NjBlMDksIDB4MzQ3NGY5OTQsIDB4YmZhNzNjN2UsIDB4YmU1MGZlNTIsIDB4NjRiOTI3NWUsIDB4MWY3ZTFiZTQsCi0JMHhjNTBlNGJhMCwgMHhhZTNjODFmNSwgMHg3N2Y4M2U4NiwgMHhhZTc5NTQ1YSwgMHg0N2MwMGVmMSwgMHhkNDdlMzY4YiwKLQkweGMwMzA2Y2QwLCAweGRiNjU1OGY3LCAweDY2YmM0NDg1LCAweDZkZmU5M2E0LCAweDc1OGNjZjg0LCAweDA3MGQ3ZmM4LAotCTB4NzE3MWNhMDksIDB4YmUyYzVkZWQsIDB4ZjgzZDQyNDcsIDB4NWU3ODU4YmQsIDB4Y2ZjM2YyMGQsIDB4YjQwOWJiYWQsCi0JMHhiNTVjMTMxYywgMHgzN2UyMDdiOCwgMHg4YWI5MDBlNCwgMHgwZGNhODllMiwgMHgyNmQ1MTU5NCwgMHhmNzc5ZDdlMCwKLQkweDNmMmU3MmIwLCAweGQyYjc5ZGZmLCAweDU4NTlmMjg3LCAweGZhZmJmMmMzLCAweDdjZDgzMjNhLCAweDQzMTJiZjM4LAotCTB4ZmJjODc3N2MsIDB4N2ZkYjhlNzgsIDB4MDIyZmRlNjUsIDB4YTlmYWQyZGYsIDB4NjExYmM3ZmEsIDB4OTc1ZmNhNWMsCi0JMHhkZWVlMjAzYSwgMHgzMDUzZThmMCwgMHg0ZjVmODU1ZCwgMHg0ZTEwOTFhZCwgMHg3Y2Y2YmM1MSwgMHhkNzRlNzJmYywKLQkweDdlMzAwZjU3LCAweDFhNDZiMzFmLCAweDhkMzFmNzBmLCAweGUyMTM4OTkxLCAweGFjZDZkYmM1LCAweDZmN2Y0MTE1LAotCTB4NjBjZTdlMDMsIDB4ZmQ3NjBlNzIsIDB4YWM4N2VlZTQsIDB4NzczYjA0YmYsIDB4MmUyMDQwYzgsIDB4OGE0NGM5YmQsCi0JMHg2MmU0YTgzNiwgMHgzNGQ3YWFkNywgMHg1YjVjNWJmMiwgMHhkZmUzMDUzOSwgMHhlODAyNDljZCwgMHgxNTZlNDU3OSwKLQkweGI5MzI2ZmJjLCAweDVmZmNhMzI3LCAweDA5ZmY5M2FiLCAweDBlMzlmZGVjLCAweGI5Yzc5NzQ2LCAweDg5M2UzZmZjLAotCTB4OTQ3ZDNmY2EsIDB4MDA1MTI2YjgsIDB4YjE0YzliMzgsIDB4ZjY5YWU5ZWYsIDB4YTIyZmY5MjMsIDB4ZDNiNjhmNTcsCi0JMHg2YzFjZDNhYiwgMHg0M2U4ZWY1ZiwgMHhlNmJiMmZjNywgMHgyM2ViZWUyYywgMHhmMzdjZTNmMywgMHg2Zjg1MDRmOCwKLQkweDdmYzAwNDMyLCAweDVmNjBhNTM1LCAweDJiYzUxN2MwLCAweGFmZmEzM2YwLCAweDMyNzM2ZmEwLCAweGY2YTFiZWYxLAotCTB4Mzk0OGI4ZmMsIDB4NmRjOGQzOTcsIDB4ZjIyOWFmNTQsIDB4N2EwMjJiZWIsIDB4NThhODRkNjcsIDB4NzI3NjdlMGMsCi0JMHg3YTdjOGNiZSwgMHg0ZWY1ZjA0YSwgMHgxNGVkNzZhMiwgMHhiZDBjNzNjOCwgMHhmNGMxZDEzMCwgMHhhN2M5MzljOCwKLQkweGZkYmNhZmI5LCAweGUwNzc0ODNjLCAweDYzYmEyMmViLCAweDFhOTE3NTgzLCAweDUxZjQwOWMxLCAweDZjMzU1ZGRhLAotCTB4YzM5NGIxNWYsIDB4ZjUyYjllNTMsIDB4MmZmNzhkMWYsIDB4OTc4M2M1ZGEsIDB4MzMzZDk4M2EsIDB4N2ZiMDU2YzEsCi0JMHgyMjMzZDk4MCwgMHgyMGI5NDc4YywgMHg4M2JiYWI4NiwgMHg3NmEzY2RiYywgMHgxZDk1NTZlYywgMHgyMzU1MjUzYiwKLQkweGY4NzgyYWJmLCAweDczZjdlNzM1LCAweDU3ZGQ2Yzg5LCAweDgyOTY3OWYxLCAweDY3M2FhN2VmLCAweGEzMDQxYmEyLAotCTB4MTQ1YWU0YzAsIDB4MDA4YmJjOTgsIDB4YjFlZWQ0ZmYsIDB4YWZlZjkxOTMsIDB4ZjNmN2NkODksIDB4ZmU0MmFmZDcsCi0JMHhjNGU0OWM0YywgMHgzNzFlNDhlZiwgMHg4Mzg5MmRiYSwgMHgwMGUzZTk2MiwgMHhmZWQ2YmI5NiwgMHhjMDU5ZjcwNiwKLQkweDFkZjcyMGM3LCAweGM4MTE0MWM5LCAweGZmYzE4OTAxLCAweDJhZmZjYTAxLCAweDQwN2MyOWZhLCAweDg3NDVlMmY5LAotCTB4ZjllODRmNGEsIDB4NTNkZjM5NDIsIDB4Nzc0OWIyZjAsIDB4ZWI4ZTc4M2UsIDB4YmE1ZTQ2ZjksIDB4NTE1M2M4M2EsCi0JMHhlOWEzZjNkNiwgMHhjZThlZDJkYywgMHg0NzNhMzA2ZiwgMHhhZGU4MGJlNSwgMHg4MWRmODllOCwgMHgyYzc0YTU5YywKLQkweDljMTJmZDY3LCAweDhmYWE5ZjM4LCAweDQ4NWU2MTY3LCAweGFhMjczZjM1LCAweGYzMjllM2UzLCAweDQyZjVjMDNlLAotCTB4MzUzY2U3NDcsIDB4MWM1ZmRmNTYsIDB4ZDc0OGYzYmEsIDB4ZTQ3ZjI4YTAsIDB4YzE3NmJmNzEsIDB4YjM5ZTMzNWEsCi0JMHg5ZTRjMjA2ZiwgMHgwMWYxNWRlNSwgMHg0ZTllNzdmNSwgMHgyOTRjNzUyMywgMHgzZTgwOGZhYSwgMHgzODU2ODkxZiwKLQkweDQyZDc3NTA0LCAweGM3NGJlOTEzLCAweGIwNTE5NzNkLCAweDdlNmRmMjBiLCAweDBmZTcyNGQ2LCAweDYwZDhlYmE2LAotCTB4ODM1ZWE3OTIsIDB4NjRmNzAxZmIsIDB4ZGYzOTNmODAsIDB4NmY3ODg0ZTAsIDB4NDAyOWM3YTIsIDB4MDM0MzAyM2MsCi0JMHhkOGZiODcyMCwgMHhiOGZiYzMzOCwgMHhhYjdkYzMyZiwgMHhmNDFjM2RjYiwgMHgyZjRlNjljMSwgMHgxZTBhYmU4NSwKLQkweDFkNzdiMjNhLCAweDAyNWZiNWQxLCAweGVkZTNhNzNmLCAweDI2ZjIzZDdhLCAweDM4ZTc5Yjk3LCAweDQ3YWUyZjFlLAotCTB4YzllNDExNjQsIDB4NDQ4YjdjNDEsIDB4ZDMzNjdmOTgsIDB4OTIzZDExODMsIDB4ZDAxY2YwNGQsIDB4OWU1NWM3YzEsCi0JMHg1MDlmZjUyYiwgMHg1MjEyMzg4ZiwgMHg3NDY0N2E1NCwgMHg0MjNkNGM3MywgMHgzZmU1MzE3ZiwgMHhmNDFjY2Q2NSwKLQkweGQ4YzFjOTY3LCAweDAyN2E2Y2ZlLCAweDYwMjljN2IzLCAweDE0YmY2OTQ3LCAweGQzM2RmZDk5LCAweDUwM2VkY2QzLAotCTB4YzU3Y2M0OGUsIDB4OGM2NjM1ZWEsIDB4Yzg3YTJiZTMsIDB4ODc4Yzk1MzEsIDB4MDBlYWNmYmYsIDB4YTZiZDBiYmIsCi0JMHgwOTVlMGVmYSwgMHgyNjY5YjNlNywgMHg5ZjE3OWMxNywgMHhmNzQ4YzI5MiwgMHg1Y2MzNzQ1MywgMHgxNWUxZmM4ZCwKLQkweGY0MzFkZTgwLCAweDg1Zjg4MTExLCAweDJjOWVkN2ZjLCAweDUxMDYyZWZlLCAweDExZTQxNjRlLCAweGQ2YmJhM2I0LAotCTB4MmFiZTQyOGUsIDB4ODAxNGNmY2EsIDB4MTM2YjhiNmYsIDB4OWE0ZjY4MDUsIDB4YmU4MDM0ZTAsIDB4NmEzMWQ2NTIsCi0JMHg0OWZjODhhMSwgMHg4MjQ0NjBlNSwgMHhlNGEzMWU4YSwgMHhkNWYwMTEwYSwgMHgyNjk3ZDkzYiwgMHhkNmZkZDIyNSwKLQkweDRjZmQ1N2FmLCAweGQwZjFiZjFkLCAweDY4YjQ4YWZhLCAweDFmZDY4NmZjLCAweDdjZWI3NWI0LCAweDIxMzcyNmZjLAotCTB4M2ZlNDIwZjAsIDB4ZTRmMGVhZGMsIDB4NTYzNWI4YzAsIDB4NTk5NDJlNmYsIDB4Y2UzMDJiNWQsIDB4ODhiY2Q5ZGIsCi0JMHhlNTJmY2IxZiwgMHgwZTQ0NGUzYywgMHhjZWNiOGJiNCwgMHg1YzYxNzVhYywgMHhhN2NjMWE3NiwgMHhhN2YxZmJhYywKLQkweDczZGUxYzAwLCAweDY2ZWZkMzExLCAweGY1YzJlOGYzLCAweDIwODhmOTAyLCAweDJiNzhiYTNkLCAweDI4OTc4ODQ0LAotCTB4Mzg0ZWU3N2EsIDB4ZjZhMTQ1OTQsIDB4YTFhZTcwMDgsIDB4MmRlODFiYzgsIDB4M2M5NWE3ZjAsIDB4ZDk1Yjg4MDgsCi0JMHg0MDFmNmUzMSwgMHhjMjdhODIzZSwgMHg1YTNlYThiMCwgMHg3OTg4NmY5MSwgMHgwNGMyZjE1ZiwgMHg5ZmFhNGZkYiwKLQkweDliZWZmMDQ5LCAweDQ3N2NhOTdmLCAweDJkM2NhMjI4LCAweGViZTk1MDRjLCAweGE3MGZmM2M3LCAweDc2MDhmM2IyLAotCTB4N2NkZGRmYWYsIDB4YjkxNmU3OGMsIDB4NGJhMDM0ZmYsIDB4YTE4NjdlZjQsIDB4ZjkwYzkzNjYsIDB4NWM0M2M0YTYsCi0JMHhiMWZlNTU0ZSwgMHg3NjQyMTQxMCwgMHg1NmZkNjNjOCwgMHg4NzRhMWUyMCwgMHgyYzQ1NmZiNiwgMHhkZTNmZmI5ZiwKLQkweGNmZTAxOTQ5LCAweGQ0ZGMxODM3LCAweDBiZmM4MjMzLCAweDZmNzcwNzk0LCAweGQ0YTdkZjgyLCAweDczMTI3YmYxLAotCTB4MDkxZTZkMWEsIDB4MWM0MjFkZTIsIDB4YTNkYThlZmYsIDB4MWQxOGU3M2QsIDB4ZGI0ZjVmNGUsIDB4ZjhjZDA3MTcsCi0JMHg3MmRhZmRiNywgMHhlMGFmYmY5NCwgMHgxNTk4ZWZjNiwgMHhlNzc5MGVmYywgMHhkNzk4ODFmMSwgMHg4Mzc2YWM2OSwKLQkweDMwYjZhZDljLCAweDJjMmRhYmY4LCAweGEyZGFiNzZlLCAweDAwNGFlN2JjLCAweDc5ZDFkZGJiLCAweDFlYzJmNjdiLAotCTB4ZTI1M2ZmMTgsIDB4OTBlMWQ5OGQsIDB4MGNjOWY4MDgsIDB4YzkyYzBjYmIsIDB4MGM2NzhkOGQsIDB4NzJiNzVjMTMsCi0JMHhmMWM3NWYwZSwgMHg0NmVmNjliZiwgMHhkNjc5ZWMxMSwgMHhiMGM1ZWE4NCwgMHhmNzYzZDllZiwgMHg2YmZhMDBiZCwKLQkweGRmZDZiNjZjLCAweGYzZjAyMTFiLCAweGY3MDRjOWUxLCAweDI0OWM4YTRiLCAweGUwOWQ5MzM3LCAweDZjMWUyNGRhLAotCTB4MWEwYTgwZjYsIDB4MTNiM2QyN2IsIDB4NWUwOTk1ZjYsIDB4NTUzYzAwMjIsIDB4ODAwNmNmZmUsIDB4ODQ3OGJhNGIsCi0JMHhkZmMwYmE2YiwgMHhmYjdmZTVlYiwgMHhiNGQ5YzM5MCwgMHg3MjAwYmM3NywgMHg4MjY5YTVkZiwgMHg5ZWQ0MWFlMCwKLQkweGZlYzI1N2NmLCAweDUzY2IwNDdiLCAweGZiMmFmYTAxLCAweDVlMmZkZWMyLCAweGE1ZjAwMTNhLCAweGZhZTI2ZmY0LAotCTB4MmY5ZjBhZmMsIDB4NzRjNjQyMTcsIDB4NzcxODIxM2QsIDB4MjM0MGY0Y2MsIDB4YWEzNTQ5NWMsIDB4YjkzNDZlNDgsCi0JMHg0Nzk5ZWI1NCwgMHg2NjhmNWUxMCwgMHhlZGQxZDcxOSwgMHhjYTA3MmZhMCwgMHgxYzQ0YjY2MywgMHgxMGM5ZWM3NywKLQkweGFkNzRiN2U2LCAweDQzZjY5MDIwLCAweDQwMWQzNTdhLCAweDQ1NTdhYTNmLCAweGRjZjQwMDkzLCAweDljMGRmN2I0LAotCTB4NWRhNmNmNmYsIDB4YjVmMmU0YWMsIDB4Y2EwNWZiOTEsIDB4OThkOThlYmMsIDB4Y2ZjNjNjZGQsIDB4MzM0ZWFiYTksCi0JMHhjMTIwNzliYiwgMHhjYTRiZjk4NywgMHg3YzcyYWEzYSwgMHhmZTE0MTU2OSwgMHgxOWNiYzg0YSwgMHhjZTVlNzFkMSwKLQkweGIyOTMwNDkxLCAweGQ2MDhmZmRmLCAweDc5YmQzZTU3LCAweDNlYTBmMDBmLCAweGVmYmE5MDdlLCAweDc1MjNkMjMwLAotCTB4YWY5NmRiMjEsIDB4MDA0MGI3ZGMsIDB4NDY3MmIxN2QsIDB4YTI4MWY4ZWMsIDB4ZjhmMjU2MzcsIDB4ZTVmZjJhYWIsCi0JMHg0ZjRmNWE5NCwgMHg2NmIyNDgyOSwgMHhmMjkyZjRhYSwgMHhmY2QxNTNkZSwgMHhmZjNjNGQ5NywgMHg3YmNkMDNlNSwKLQkweDgwNWE5NzgzLCAweDc5YjJlZTlmLCAweGU1NzNjMGNlLCAweGUzYWQwYmVmLCAweGQ5NDdiNzdmLCAweGJhZjgyYWNmLAotCTB4ODBmY2M5YzIsIDB4MWZkNzA5MDMsIDB4YzAyNDczODMsIDB4ZjFmMjkzOTMsIDB4M2NlYzRiM2EsIDB4MDY5ZGNiZjIsCi0JMHg3ZTMwNzdlZSwgMHg1ZjhjNGQyMSwgMHhmZjZhMWQ2MCwgMHhiMDAxYmZlYiwgMHgwMGQ3NDMyZiwgMHgwMDAwZDc0MywKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweGM5MzMyNjY2LAotCTB4ZTRjYzk5MjQsIDB4NDAyNzVlNDksIDB4MjFjNDBhMzAsIDB4ZWIxNDEwMjEsIDB4ZWYwYzAxMjQsIDB4MDI0MTUwNDEsCi0JMHg4MDQyMTIwYywgMHgyYTk0MTMyNCwgMHg4MDY1YmQ2ZCwgMHg4ZDUyMDMxOCwgMHg4YmQ0YjQ1ZSwgMHhkN2E1NzgzYSwKLQkweDI5NDFiNjIyLCAweDg0ZWMxYTg2LCAweDNhMGJjMTU3LCAweDk0YjYyYTI4LCAweGFhNTQxNDFiLCAweGE1YWM0MDkwLAotCTB4ZDdmOTdiOTYsIDB4NjYxZjdiNWEsIDB4OTYyMjY0Y2UsIDB4YmZlZmJmNjIsIDB4NzY3ZTlmZmYsIDB4NjdkOWNmYjMsCi0JMHhmYmQ3YjU5ZiwgMHg2NDllY2ZiMSwgMHgxMjU4YzRhYiwgMHhkZDNiMzc2MywgMHhkOGM2N2E2NSwgMHhjMWI3NThiZSwKLQkweDg4ZDhjNDVhLCAweDU5NmVkZjYyLCAweGI5Nzg2YzYxLCAweGRhMWViNzc3LCAweDNiYmY1NjRjLCAweDk0MDYxMTM2LAotCTB4NjgyNmM3MzMsIDB4M2RhYzFkZWMsIDB4YTM4NGRhMGUsIDB4YjgzOGNlMWQsIDB4YTM2YWRmZGYsIDB4YWNmYTZlNzksCi0JMHg4YzJkYjk4YiwgMHhhYjk4OTUwZCwgMHg5NzYzMTA2NSwgMHg2MGQ2ZWZmMCwgMHgzMWQ1NmE5YiwgMHgwNjI3ZjMwNiwKLQkweGUzMDYyNTRhLCAweDZjYjhjNDM2LCAweGU5NjFiZWY4LCAweDQwMDFiMmY1LCAweGYxZDY2NDQ5LCAweDAzNjMxZmFjLAotCTB4MmI4ZDBhYWQsIDB4OTZlZTc2MmMsIDB4YTc1NjNkZTEsIDB4OGI3OWM2NGIsIDB4OWVmNGFjNjMsIDB4NmE3NzFjYzYsCi0JMHgxZDNlN2YzZCwgMHg0ZTg5Njc5ZiwgMHgzN2MwMjI2OSwgMHg1YjE4YmZlYywgMHhmYjZkZGQwMywgMHgxMDY1MjU0YiwKLQkweDZmMTQ2N2JlLCAweGMwYjY3MzE5LCAweDA1NjA1N2Y4LCAweDExNTk3MGExLCAweDlmN2MyNDllLCAweDM5ZWJlZjQ0LAotCTB4NGFjZjNiYmYsIDB4MTI5Y2VhZjAsIDB4YThmYzMyNGMsIDB4ZTg2MGM3YzUsIDB4MzJmNWE1ZjAsIDB4MDJjODlmYzIsCi0JMHg2ZDAwMDMxMiwgMHgyMzEyZDZkNSwgMHhjNmJkMzdiYywgMHhmZTYxYjkyMSwgMHhmOTVjNjI5YiwgMHgwZTYzNWNmOCwKLQkweDZkMGExYzVjLCAweDBhYjdjZTg5LCAweGU3MTAzYjllLCAweGY5ODE2NTNjLCAweGY2NjhiZjE3LCAweGZhMzEzNDllLAotCTB4ZDVmZjA0YmIsIDB4ZmE2ODI0YjYsIDB4ZWYzNGQ2OWUsIDB4N2Y2MGJjYzksIDB4MGQyM2ZlMzEsIDB4NGNjZmRiZmUsCi0JMHgzNTYzMTg2YywgMHg0MDdiMTZmYywgMHhlZjhjZGY3NiwgMHgzYzc1MzVhOSwgMHg3NWZhMTczYSwgMHhjOGNhZjhiZiwKLQkweGFlMGE0OTYwLCAweDY1NzhlMDE3LCAweDNkY2M0MTdmLCAweGE3N2FlMDk2LCAweDk5NzdhNGY1LCAweGJkMjdhOTM1LAotCTB4ZGU4MjRhODcsIDB4NGFkZTgxNjMsIDB4YjI5ZjdhNGYsIDB4M2I3YTA4MjQsIDB4ZmFjMTA3ZGIsIDB4YzI0YzVkZTIsCi0JMHgxMzVmMDFlNywgMHg4NWRjM2QzOSwgMHhiNzg4YzFhZSwgMHgzODAzMzJhNSwgMHg1ODdhNDU1ZSwgMHg1MzhmNGNhZSwKLQkweGE3MWZjZTE2LCAweDJhMWU5YzJjLCAweDM4YzZlNjFkLCAweDc1ZDJiNGVmLCAweDk2ZjVlZjQ2LCAweGJlYmMzY2IyLAotCTB4ZGNhZTgyNzYsIDB4MTZjZjgxMTcsIDB4ZWUzNDJkNTksIDB4MDVmY2YxYWEsIDB4OTllMjg3ZDMsIDB4ZmI2ZGZkYjUsCi0JMHhjMWVmYTEwZiwgMHhmNzg0Y2I3ZiwgMHhjMDM3ODg0NSwgMHg1ODNmNWM3YiwgMHhmODRlYmZmNywgMHg1M2Y5MTkyOCwKLQkweDIwM2FlYTY3LCAweGRiNmEzZTAxLCAweDI1ODY0NTY0LCAweDljOTU0YzBjLCAweDViMTkwYjI3LCAweDg5Y2RhMGY1LAotCTB4OGI1Y2YwN2MsIDB4ZjE4Mjg4ZTQsIDB4NmIxNGM5Y2MsIDB4MjI1NjQzMzIsIDB4NzVmZDlkNjIsIDB4MTFiYjNlN2MsCi0JMHg4MzYwYjg1YSwgMHhhMzM0ZGU3MSwgMHhjZWYyMTM2ZiwgMHg4YzMzYzAxZSwgMHgzODA4MjRmMywgMHgwMDFmZTAxYSwKLQkweDA1NTVhNzQ3LCAweDBkZjc0OWNjLCAweDU1OWZmMmVjLCAweGY4NTFmYjgyLCAweDZhNGI5ODJmLCAweDgwOTc2ZjY5LAotCTB4OTk4YWFiNzAsIDB4ZWY3MDAwZGIsIDB4MWY4OTkzNmUsIDB4ZjY4YzZiOWYsIDB4MmZmY2MxNDUsIDB4NjA3ZjM5NmQsCi0JMHgzZmZiZjQyNiwgMHhjMTY1YzNhOCwgMHgyN2ViMDRkZiwgMHg1M2E4ZjgzMSwgMHgxY2FkMDRiYSwgMHhjM2QzY2E2NywKLQkweGVkMWM4NzdkLCAweDRiN2M2MTkwLCAweDhiM2U1Yzc0LCAweDM3NjRhYzY3LCAweDk1NWIzZjMxLCAweDdiYzBmMzBiLAotCTB4ZDM0N2I1NTYsIDB4ODJlNTU2ZmEsIDB4MWYxMGU0N2MsIDB4ZDlmODg2M2MsIDB4Njk2NDZiMTMsIDB4ZTQxYmJkNzAsCi0JMHg2NzBkYzcwNiwgMHhjYzhjZWYxZCwgMHhiYmE5ZDIwOSwgMHhiYmQ5Y2JmNSwgMHgxODllZmQ2MCwgMHgyNjI3YWYzZSwKLQkweGRlMDBjN2NiLCAweDA3MTc1ZGNlLCAweDViOGYxZjIwLCAweGNhMzVjZjM2LCAweGQ5MjRkOGNlLCAweGFmZTkxZWJkLAotCTB4ZGU2NmY3M2UsIDB4NmY4ODcxYzcsIDB4NWUwODMyYzYsIDB4ODQxYzlmYTIsIDB4YWNkZTMyZWYsIDB4YWM3MmJmMWMsCi0JMHhjOWQxZDY5ZSwgMHhlZWI4MWRhMiwgMHgyMTkzYTMxNiwgMHgzOWM3YmM5ZCwgMHhhZDc4YWI3ZiwgMHhkOWQxYmMxMywKLQkweDBkZDQ3NDU2LCAweDY4ZWU3YmViLCAweGVmOWYwMzg2LCAweGViMzZlZDZjLCAweGUyY2I3ZGUwLCAweDc1YzBiZmRkLAotCTB4NzE1ZDk5YzksIDB4Y2Y4ODQxYWUsIDB4MDYzYmViZWUsIDB4MDk3YTFlOTEsIDB4ZmMxZjc3YWYsIDB4NzQxZWU2ZDgsCi0JMHg4NmRiZWI1NSwgMHg3ZDY5NWZjZiwgMHg0OWE1YmQxZSwgMHgzZmM5ZWY4YSwgMHhiNTIwN2NlMSwgMHhjYTU1ZmZiNSwKLQkweGE4NjEzOTI3LCAweGNjNTliY2I3LCAweGRkZDYwYWI3LCAweDkzNDg3ODM4LCAweGM2OWU4NDhjLCAweGM2NGY5NDE0LAotCTB4MGM5ZmFjMmEsIDB4MmFiYmQyMGMsIDB4ZjEwN2I1ZGUsIDB4OGNkN2NhYWMsIDB4ODQzZWQ3NzgsIDB4NWU5M2RmMGIsCi0JMHg4ZmRjZWI0MCwgMHhmMzQzZmNmZCwgMHhhYmJhMGQwYSwgMHhjOGUxZTc1YSwgMHhmZTEzZjRlYiwgMHg2YTdhYzU2YiwKLQkweDBjYmYxNjRkLCAweDg2NmRiM2YwLCAweGY5NTQzYTJmLCAweDVlMTNkYmVjLCAweDBlMzFjN2EwLCAweDFiYThlM2FmLAotCTB4OGI3YmY5ZTksIDB4NDNlMjE1NjMsIDB4NjJiYWIwMWYsIDB4ZjhlM2ZlMDksIDB4MzczYzU2M2UsIDB4MjFiYmQ3MTUsCi0JMHg4NThmNjljNiwgMHgzMDU3OWJmMSwgMHhiNDUyMGZjZSwgMHhkYzU4NzllMywgMHg2OGI2M2RkNiwgMHhmMTU1OTNkNCwKLQkweGRmMzg1M2VlLCAweGIzZjNiYTBkLCAweDAyYzc2ODVkLCAweGRjM2RkZDJlLCAweGQ3ODY3YzBlLCAweDdhZGRkZDYxLAotCTB4YzY1ZWEzODIsIDB4ZmQ2MmFmZjksIDB4NzFmMzIyZTcsIDB4ZDlmYzNhMGYsIDB4NTRlN2EyMWEsIDB4ZjQxNDhjZmMsCi0JMHg0MWY4ODkxZCwgMHhmZmE1ZGM4NSwgMHhjNDE0YzNhMiwgMHgzZDRhMDQ4ZiwgMHgzZTczZDZkZCwgMHgxMGIyM2FjNiwKLQkweDlmMWRmNmRlLCAweGY5ODBlODBlLCAweDc0ZjhkZWVhLCAweGRkNmZjYTM2LCAweGI4ODhhMjZmLCAweDdkNzM3ZWEzLAotCTB4ZDlmMWYyM2MsIDB4YzViZDM2MTIsIDB4N2U5ZjUzZDIsIDB4YTVkZWJjYjEsIDB4MWZmYWU2MDcsIDB4Y2JkMjVmNmIsCi0JMHg0NDYwMmMzNSwgMHhiMmRiNWQzYiwgMHhkMTBmYTVjNCwgMHhlOTMxMDBhNywgMHhjMDg2ODNkZCwgMHg2MGZmOWMwNCwKLQkweDAwNTZjYzkxLCAweDg2M2I3NWRmLCAweDdhMDhiMGE3LCAweDVhZGY2ZDVhLCAweGI5OTU1Y2NlLCAweGY1MTJmZDhjLAotCTB4OGVkN2YyMWMsIDB4OTc4NGYxYTEsIDB4ZTNlOTFiMzYsIDB4OTcwN2YxZjAsIDB4MTk0NmJiNTcsIDB4ZTBlZjlmN2EsCi0JMHgxZjc0ZjMxMCwgMHhjYzIxM2YzYywgMHg4MTMxYjkwZiwgMHhhMjMxOTVkYiwgMHg0NGU5NDUwNSwgMHg4ZjZjY2YzOCwKLQkweGQyZTE3OWY1LCAweGUyZjc4Mjk5LCAweGNjZTllMDE4LCAweGJkMGI3N2I2LCAweDU4NjcyZmMwLCAweDUxZDdiZWUwLAotCTB4MzBiNGJlN2UsIDB4MGMyNjdiZjQsIDB4NDU3MGFmNzksIDB4NmVkZTUwNmMsIDB4YmY2YmU2MjksIDB4NzE0M2I1ZTUsCi0JMHhiMDlmOGMwYSwgMHgzN2EyNzc3NSwgMHgzMGI3N2YwNCwgMHhmOTk3OTdmZCwgMHhjYmRmMDczNywgMHgxZGY0YzdkNywKLQkweGVjMWU5MDAzLCAweDBhYzlkM2Y1LCAweGVjNzYxM2I0LCAweGEwN2NlNDRkLCAweDRiY2U5MGU4LCAweDE1ZmFkZTg1LAotCTB4OWMxMTFhNWUsIDB4M2FiMmMyNmYsIDB4NjBjMmE4ZDcsIDB4OTk4MmY2YmYsIDB4ZmFmYjQyZjksIDB4NWY0ZDExODAsCi0JMHg1ZDBiMDVlZCwgMHgyNmM0MjdiNywgMHhjM2U4ZmU5MiwgMHhmOGZlYTBmYSwgMHhiZjBiNzhiNiwgMHhlMGVkZTJhZSwKLQkweDY4NTlkMzkwLCAweDIzOWFjZmJmLCAweDYyZWRjOWYzLCAweDQ0NjNiNzVjLCAweDEzNDdmYTBhLCAweGQ2ZmVmZThjLAotCTB4ZjMxOGUzMDgsIDB4NzVmMGI4ZDEsIDB4ZWRkY2I5YmQsIDB4M2JkYjk1MWEsIDB4Y2M4ZGUzN2MsIDB4MWNhZmM5MWQsCi0JMHg5YWZkYzA5ZiwgMHg3OTk5ODc2ZSwgMHhkYmVmYWU0MSwgMHg3NDNiMjA2OCwgMHhkMzA3ZTJlOCwgMHg5ZjdlODEwYSwKLQkweDU3NTgzMDZlLCAweDlmYWIzZTAyLCAweGFmZjE5ZGQ5LCAweDQ4N2FiZjcwLCAweGZlODI1NTk0LCAweDNmYmY4YWE3LAotCTB4Njc4MmYxZjIsIDB4ZmJhZTE3NjQsIDB4MjVmNzBkZDMsIDB4NzNmNjgzY2YsIDB4ODAxYWM3ZTAsIDB4MDM0NmMxNjMsCi0JMHhmOGRlYWY1ZCwgMHg1YTdlYmE3ZCwgMHg2NzgyZTlmMCwgMHg5ZWEyMDY5MiwgMHg0ZDY3YjQzZiwgMHhmYWIzYWUzMiwKLQkweDEzYmUxZmJmLCAweGEzNTZjNWY1LCAweDY4MTBlMDc1LCAweGFlNDhiNjZiLCAweGIxNzIyMTUxLCAweGE2YjMwNWU4LAotCTB4YWFjNzU1YmYsIDB4YmFlYTFkNzEsIDB4N2NiZWU0OTksIDB4YmM3ODAxNWYsIDB4YmEwZmRjMDksIDB4OGY2NWZmNmEsCi0JMHg3ZjAxN2ZkNiwgMHhmZGMwOWJjNSwgMHg2MTUzNDk5NSwgMHhkZDQ1NzVkZCwgMHhkZWVlMjdlNCwgMHhmYzc2NGQxNywKLQkweGZjOTkxNmI3LCAweGJmOTBmZjAxLCAweGQwOGRlN2ZjLCAweGJkNmZmYjJmLCAweGMxMDg3YzgzLCAweDVlODVhM2U3LAotCTB4ZjQ4ZjJjNjYsIDB4Zjc4OTk1NTAsIDB4YzllODc2Y2IsIDB4OTU4YjI4OWYsIDB4ZDA3ZWRmMDksIDB4MDhjOGEzMTMsCi0JMHg2MWEzMmQzOSwgMHhlN2Q0ZjdkYywgMHg0NmViOTFlNCwgMHhmMWQxYjhjMCwgMHhlMjdlODYwNiwgMHgyNjhiZmNmNywKLQkweGI3ZWZkMDMwLCAweGQ0N2ZkMDVlLCAweDUyOWViMjExLCAweDIzYTNkNGU2LCAweDlhMGNjMjUyLCAweGUzYTNhYmViLAotCTB4MDhmZjQ3OWUsIDB4MWVhM2QzMjYsIDB4ZWY2OTMzMmYsIDB4ZWUzZmVlOGYsIDB4ZDFiYmRhMzQsIDB4NTU3NWVkNTYsCi0JMHgzOTQzOWU3ZSwgMHg4Mzk0MTgxOCwgMHhmNGZlZmJkZCwgMHg2NzU4NzhjNCwgMHhmYjk5NDFkNSwgMHgzM2QwNTc2MywKLQkweDcyYmFlMTZmLCAweDU2NmZkZTkxLCAweDBlZTc4MTZjLCAweGJhMWNlYzA5LCAweDFhNDM2OWY4LCAweGM0YjE1N2YyLAotCTB4ZDNmZjQyNTYsIDB4OTFlNTUxOGIsIDB4ZDU0NjIyZTQsIDB4OWNlODBjMzcsIDB4NDRmM2E0MTcsIDB4N2RjYmMyYzcsCi0JMHhjNWM5OGIxNCwgMHgxMWY3MmU0YiwgMHhlZmFmNmZmZSwgMHhlZjJlNTliZSwgMHhmYmQyMzA0ZSwgMHhiODYxZjVjMywKLQkweGZhNTc3Y2ZjLCAweGJkOTBjMjcwLCAweDZhNThkZTU5LCAweDE3ZWQ4ZTdmLCAweDA5OWViOTViLCAweGZhZTE4ZmQ3LAotCTB4MWMyYjg1NGYsIDB4YjIwYmRhZGUsIDB4NGY4ZGVmNDYsIDB4NTA1YzY4NTAsIDB4ZmVlOTE5ZmYsIDB4M2ViMzhjMzUsCi0JMHg2NzEwODg0YiwgMHg3YzI2N2Q4MSwgMHgyOWU5ODc3OSwgMHhlMWZmMDNiZSwgMHg2NDFiOGUwYywgMHgwMDI1ZWM1MSwKLQkweDZmYjU4MzUyLCAweDI1ZjVlYTBjLCAweDVlMTc3NzE2LCAweDg2ZTk3ZWNmLCAweDBjMTdlODUxLCAweDQzYWNkMmRjLAotCTB4NzEyOWQxZmQsIDB4ODgzNjZkN2EsIDB4ODI4M2ZiMTYsIDB4MDQ1ZmQwNzEsIDB4ZmExMzFjZGYsIDB4NTNhMGUyMDAsCi0JMHgyZWZiNjgxNiwgMHhjMzFmNjMyYiwgMHhjYzRjYTJmYSwgMHhiYjIwMmU2YiwgMHgwNDE0MzVlZiwgMHg3ZTAyM2ZlNywKLQkweDhkOTljNjBjLCAweDlmYzc4YzI1LCAweGViZmZkYzA5LCAweGFjZThhNzliLCAweGNiYzNmZjMwLCAweGMwOTNjZWFkLAotCTB4YTc5N2FiY2YsIDB4ZjJmMmNiNTIsIDB4ZmJiZjQ4NzQsIDB4NmZkMDZlMDQsIDB4YmJiY2U3YzQsIDB4YTc1ZDY5YTIsCi0JMHhjYTNlNTcyNCwgMHhiZTAyYzNlNSwgMHg2MmRjN2E3MCwgMHgzNWRiZjk1MywgMHg5YTJmZDQyMCwgMHg1ZjU5MWE1ZiwKLQkweGQzZDM2ZjVmLCAweDY2YTc5MmY4LCAweDcxZGZhMTY0LCAweDJjZWVmZGFhLCAweDAwYTdhM2Q0LCAweDQxZGEwMGRlLAotCTB4OWJmZTIzYmQsIDB4ODRjNzg1ZmMsIDB4ZWMyMjNlM2MsIDB4Mjc4OGJjNDUsIDB4MDRlNDIyN2YsIDB4ZDViOWM3ZDgsCi0JMHhkMTc0ZWI4MiwgMHhhN2NiZDVmZCwgMHhmMmY4ZmI1MywgMHhjNjNmNzQ2NSwgMHgxMmZjNDM5NiwgMHg0MDk1ZTIzNywKLQkweGM5ZGZhMDVmLCAweDgzZDkzMmI1LCAweDgwZDc0NmY5LCAweDQ5ZWY3ODA0LCAweGQyZTI4ZTkzLCAweGU1MmRlYjhmLAotCTB4OWQ3ODJjZGIsIDB4ZmYzMzdjNTEsIDB4NTA5YmYxYTksIDB4YjVjYjJlMmUsIDB4ZWI2ZjQ3NTgsIDB4NzU3NmM1YmMsCi0JMHg3NTk2YmM3YSwgMHhiYTVkYTFjNCwgMHgwMGM3OGZjYywgMHg3ZTQxYzkzYiwgMHg2ZmJiMmY5YywgMHgzYzYxMTViMiwKLQkweGUzOGM5MWQzLCAweGMwNjA1MjNjLCAweGJhMDYwYTE2LCAweGFhM2Y1MGIyLCAweGUyZDU3ZmVmLCAweDg0OTZjNWJjLAotCTB4ODgxYjBlZjEsIDB4Y2QxMmQxNzIsIDB4OWMzODRlZWQsIDB4MWVmZDA1YTMsIDB4YmUwOGFlNWUsIDB4ODhkNmEzYzgsCi0JMHhkZGM2MjRiZSwgMHhlODIyYWY2OCwgMHhiOWUyNzE5NSwgMHgzOGU3MTYxMywgMHg0MmRmZDExYiwgMHgwM2FkMjc3ZSwKLQkweDM4ZWVlNWY4LCAweDBlYmM0NGU3LCAweDZjNjRjMzcxLCAweDNjZjBhNTg3LCAweDU1OGIyOWNmLCAweGUyNTM4YmYwLAotCTB4OWE2YmI5N2UsIDB4YTcxZTQyMmQsIDB4Mzg0MWJjYjcsIDB4M2M2ZDY3MWMsIDB4NGY5ZTEzOGYsIDB4OWYzNTViNTAsCi0JMHhlN2FjNDczMCwgMHgyNmFiMDRhYiwgMHgzMGI0YTNjZiwgMHg0MjNjYTQ2NywgMHhlMzQ4Y2Q5YiwgMHgzOTRlOWQ1MiwKLQkweGVlNWRlOTQ2LCAweGYyM2ZiYTg2LCAweDk5MmY5OGNhLCAweDRlMjgxY2NlLCAweGRhNWIyMzI5LCAweDM2OTI4ZjMxLAotCTB4ZjMwMmI3Y2EsIDB4ZTEwOThkMmMsIDB4NjMzNWU4NzIsIDB4NWJhZmE1N2UsIDB4NzE4NWVjOTcsIDB4ODk3NzAxYzksCi0JMHgxZWQ4ZTAxMSwgMHhhNWYwNGM5ZiwgMHg0ODE1ZmFiMCwgMHgxZDZlYTFhZiwgMHg5ZWU4N2EyZCwgMHgwNmE0OWY2OCwKLQkweDUwYTQzMDdiLCAweDUwOTA0N2U4LCAweDY1NWJjYTMzLCAweGE0NDFmYmFjLCAweGZhY2FiMGYzLCAweGYzMDU0NjU1LAotCTB4ZjUxOTVlNTAsIDB4OWRjOTY5Y2IsIDB4MzhmZTAzNmQsIDB4YTIzYTM3YmQsIDB4OWIxM2Y3NWYsIDB4Njk1MmZiZDAsCi0JMHhlZjBhOTYxZiwgMHg3ODQwYzE3OSwgMHg5M2MyZmExOCwgMHhhMWRlMTFiMywgMHg5N2E2ZGMyZiwgMHg1ZmY1ZTI0MiwKLQkweGRmMDQwY2Q4LCAweGIyOGJiZGU5LCAweDMwZmU3ZTI5LCAweGY0ZTZlNThhLCAweGUwYTM3NzljLCAweGRmMDIxNThiLAotCTB4ZjMyMzFhYWYsIDB4ZGM2MjMzZGQsIDB4OTNlOWViNTUsIDB4NmIyNGU3ZTAsIDB4YjYzM2Y0ZjQsIDB4NWQ0Y2JjOTAsCi0JMHhkM2QyNzllZCwgMHhmNDI5YjAzZiwgMHhiN2QzN2Y5ZSwgMHhmODAzZWJlYywgMHhlNjRhYjdmYywgMHg3YTJmYmM0MCwKLQkweGViZTUyMzcxLCAweDhjYjYzNTVlLCAweGE5ZWI4MmRkLCAweDA3Y2MzMWQzLCAweDliZjdkOWVjLCAweDRmZDA3ZDdkLAotCTB4YTA4NjU0YWMsIDB4ZjlmOTcwN2YsIDB4ZjExYjliODMsIDB4YjM1NWJmZmEsIDB4MzRmZjg4MjEsIDB4ZTYxMmUzZGYsCi0JMHgzNzMyYmUwNSwgMHhkYWJlYmUxMywgMHhjMDU2YzUxNCwgMHg2ZTFlMTY5MiwgMHhlODQzZmIxOSwgMHgzMWQxYWZhZiwKLQkweGViZTEyYmQ0LCAweDc0MTkzNzg2LCAweDBkZmFkOGE5LCAweDdmNGU2MmJhLCAweGRkMmE3ZmQ0LCAweDQ4OGNiMTgxLAotCTB4ODg2ZTk1MGYsIDB4N2I2N2Q0M2YsIDB4ZjA0NmJkMzYsIDB4OGY2ZDcwYWIsIDB4N2EyZDcwZTcsIDB4ZTQ1OGViNzEsCi0JMHgzNjM1M2U5MywgMHgyYTM0ZjMwOSwgMHg5ZGE4ZmY1YywgMHgzM2Y2ODZiOCwgMHgyNTcyZTgyMCwgMHg4ZTFlZjlmYiwKLQkweGUxOWZiNzBiLCAweGM1ODk3Mzc2LCAweDVkYzcxNDc5LCAweDE1Y2U3ZWM5LCAweGU4NDdiNWZjLCAweDhmMjk4NTYxLAotCTB4MWQ5MmJlNjAsIDB4MjdkZTUxZDQsIDB4NmM3MzJlOWMsIDB4OWZhM2YyM2QsIDB4M2YyMmFlZGEsIDB4OGI2NmM1M2EsCi0JMHg2Y2RkMWY5OCwgMHhkOWI0N2FlNCwgMHg4OTRjZTZjNiwgMHgwNDEzMGYyMCwgMHg1ZDc1YmFiYywgMHg4OThiYjQ0NiwKLQkweGJkNDQ1MjZkLCAweGY1YzJjYTc0LCAweGFmY2RlODEyLCAweDIzZDNlZTQ5LCAweGY4MDhkNWViLCAweGZmNzBlYzk1LAotCTB4NWRmZTJkZmEsIDB4YTEyMGFhMzgsIDB4NWRiYTBjN2YsIDB4M2Q5ZDRmODAsIDB4OGYwMjlmMTQsIDB4N2M1NTVlMmEsCi0JMHg4ODRiZTJmYSwgMHgzZjBiMzY1ZiwgMHhhNGJjN2I3MywgMHhiM2FlZTM4OSwgMHgxNjljZTNhYiwgMHgyZjY2NGY3YywKLQkweGNlZDEzYWZhLCAweGVkZjgwMzlmLCAweGE1YzRkZWY4LCAweDU3NWY5MzRjLCAweGY1ODllYWYzLCAweDE0MzhjOTVlLAotCTB4M2NhMzAyY2QsIDB4YmRkZGI2NWMsIDB4YmFlMzAwYzIsIDB4ZjNjNzMwNDYsIDB4YjBhZjhmZDAsIDB4YjNiZWEwOTYsCi0JMHgzMWRhM2I1NSwgMHg4Njc4ZGVmZiwgMHg5NzFiMzdlNywgMHg5YTRhZGYzMCwgMHg3M2ZmZjE4NywgMHgyYTdjYTVmNywKLQkweGU5NjVkZGUyLCAweGY1ZDQxNzY5LCAweDY3ZWFiZDgxLCAweDIyZTU3MGU3LCAweGFiZDliZDVjLCAweDg1MTcyODZiLAotCTB4MTcyNzZmZjYsIDB4ZDZlODkxYzUsIDB4NmJmNWNmMTUsIDB4ZWJkZmYxODQsIDB4ZTJiN2NlODUsIDB4ZjlkMTJiZjUsCi0JMHgzOTBmNTEwZSwgMHhmYzg1M2YxMiwgMHg2YjNmOTQ0ZCwgMHhlMWVlOTA3ZSwgMHg5MThlMmNmNCwgMHg3YjdjYjFmZSwKLQkweDE5ZGNiYzRmLCAweDI3NmIyZjA5LCAweGI4ZjRmMmU4LCAweDg4ZWQxNjRlLCAweGRhMTY3NzY0LCAweGZmYmNmM2JmLAotCTB4Y2Y1MjdiNDIsIDB4NjlmYzNmYmMsIDB4NTZlN2U3ZmMsIDB4MGViZWRlM2EsIDB4YTY0YjdjZTEsIDB4MWZiOWU5MzgsCi0JMHg1ZjMxMTg3NywgMHg1NWE3ZTZhYywgMHg0YjVmM2Q3OCwgMHhiOWZhMDljYywgMHg1YTk5NmJmMywgMHg5YjVkN2FmNSwKLQkweDU3NzE4ODU0LCAweGU0OGJlZWM5LCAweDdmYjY3NzFmLCAweDY3NzFmZTRkLCAweGJlYWM3Zjk4LCAweDRmNjA1ZWY3LAotCTB4YjJkMThmOTQsIDB4ZmNmZmY4ODUsIDB4Y2JjZjFlMDYsIDB4NDhlOWY5NGMsIDB4ZGZiM2MzODAsIDB4ZjEwYTdjYzAsCi0JMHhiNDBmZjkyZiwgMHg2NzlmZTg1ZSwgMHhmMWM3ZTFjYywgMHgxZWM5NjI1YiwgMHg4ZjMwMzgyZSwgMHhhYzVmMWNmMCwKLQkweGJlMDg0YTYzLCAweDRjZDE5YzEyLCAweGJkOTdjMTA5LCAweDI3ZTlhNmRjLCAweGM2NjhmYWI5LCAweGFiZWY0Y2E3LAotCTB4YmVlNjlmYjksIDB4YmQzZjczNDEsIDB4Y2ZkMzQwYmEsIDB4MzM0OWJmYWMsIDB4YTk1OTdiM2UsIDB4MWRlMzlmYTYsCi0JMHhhZmRmMTlhNywgMHgzZjRkNzZlOSwgMHhjZDZlZjliNywgMHhiOGU2Y2RmOCwgMHhlMDBlYTllNywgMHhjM2ZhMDY3NSwKLQkweDdhYzUyYjdhLCAweDhmN2Y1YmFmLCAweDk3ZTYzOWU2LCAweDk5MmY1OGZjLCAweGY5ZmRjODJmLCAweGIxZmIzMWU2LAotCTB4ZjIyOTUyNWUsIDB4MTZmYmQ3MTMsIDB4ZGY5ZGU2NjksIDB4ZTgyZmNkYWMsIDB4NzRiZWQ3NTksIDB4NGY5ZDVmYzAsCi0JMHhiZmExZjg3MiwgMHhmZWY2YmQ2MCwgMHg4NDhkZDZjMiwgMHhlZDNlODVjZiwgMHg2YTJmYzVmNSwgMHhhNjg3ZjlmYiwKLQkweDRjNzFjNDBlLCAweDdmNDQyYWVmLCAweDZkNzZkN2VlLCAweDc0OGFlMmJlLCAweDU1Nzc1ZWY2LCAweGQ1NGE4ZTc0LAotCTB4NjhhY2Q5ZDIsIDB4YmY4ZTFjZTksIDB4ZDg1YjNjOTgsIDB4MzdkZmY4N2QsIDB4YTFkNjJmZTAsIDB4MGFlZjhiZTUsCi0JMHg2YmIwN2Y3ZiwgMHg2MjFiOWNmMywgMHhjZjUxYzdkYywgMHg5NTJlYjc3NSwgMHhjYmViZTYxOSwgMHhiYmIyM2Q3OSwKLQkweDgzZmNjYmY1LCAweDdkM2M4NDRhLCAweGZkM2M4ZjZlLCAweGJiMTBmNjI3LCAweDNiZTllNmE2LCAweDIzNzJmZWIxLAotCTB4OTdmNTE2ZmIsIDB4M2M0NTdmZGQsIDB4MzFlNTgxNDQsIDB4OGFjZGZmODAsIDB4ZjVjYmE2MWQsIDB4MmYzMDczMTYsCi0JMHhkNGJmYWUxZiwgMHg1ZmY3ZjQxNiwgMHg4M2Q3YTRlYywgMHhmMDU1YWE3NSwgMHhmN2Y4YjBmNCwgMHg1YWE3MDg1ZCwKLQkweDllZWYxOGM3LCAweDg4ZGVmMDRiLCAweGZmODA4YzgwLCAweGVhOWQ3YzJjLCAweDRiODc4MDNjLCAweDEyZjhjZjM4LAotCTB4NTFjNjBjNWIsIDB4NGJkY2Y3NWIsIDB4NGI2YjAxNzEsIDB4NDgwZWZhZTQsIDB4YzQzZTNhMWUsIDB4ZGEzZDI1M2YsCi0JMHgyMzRjZmY4MiwgMHhlNDRjNjhiYiwgMHgxODk0ZDE3NiwgMHhiZjMxYzcxMiwgMHhkODU3YmY4ZCwgMHg1MWU2ZGVjNSwKLQkweGI1YmQxOGViLCAweGVhOTkyZWQyLCAweDhmNTg1ZDMxLCAweGZiZDdhMDg5LCAweGY2ODNmZTI2LCAweGY5MWU4YmU1LAotCTB4NDU4OWJlZDAsIDB4ZjdjMjcxMjEsIDB4N2VhMWY3YmIsIDB4MjZlN2JjMDcsIDB4NjM2MjdiYzIsIDB4NDE0YTZlYzEsCi0JMHg5OGQzZjliYiwgMHhhZWI3OTIzOCwgMHgzYWVmYjIwMywgMHhhNGRlNzBiOCwgMHgwNTA2ZGJjNCwgMHhmMGUxMmRlYiwKLQkweDlkZDkzNDhlLCAweGRlN2QxMGZhLCAweDY2ZWQ2OTI2LCAweDQzZjcwMTYzLCAweDlkYjkxMjBhLCAweGY4ZjBiMmFkLAotCTB4N2JlOGFjNzUsIDB4NGY3NmZjYzIsIDB4NDE0ZjhmMTMsIDB4NDJkYmFhMWEsIDB4ODliMWMxZmMsIDB4NWNmZTM0YjEsCi0JMHg1YzU4Yzk3NCwgMHhkZjExNDZjZiwgMHhmNDQ4ZTYzNywgMHgyMjQ5NDZiZSwgMHg1ZjFlNWVmYiwgMHg3NWQ3MTYzYSwKLQkweDhlNTI1ZWMxLCAweDNlMDQ0YWUzLCAweDA0NmZhMmM3LCAweDBlNWY3MzZkLCAweDBkZjYyMjhmLCAweDEzZWJmM2E4LAotCTB4YjYxMjdjNjEsIDB4NGQ4ZWQ0YTUsIDB4YzgzZjBhYjQsIDB4ZmJkMjAzN2EsIDB4ZGU5M2I0NDQsIDB4OGQ2NTk0NmIsCi0JMHg5M2I2YTU1ZiwgMHgyZWJhZjkxMiwgMHgwYTJhY2RhMiwgMHgyMTY4YzljYSwgMHgxZTg0NjMzNywgMHgxNDcxZmNjMywKLQkweGMyNzM5MzA5LCAweGRlNGQ2NGU4LCAweDUxMzE4OGY4LCAweDdhMjU4ZGU0LCAweGJjNzQ4OWRjLCAweGI3YjFkMDU1LAotCTB4Y2YzM2IyM2MsIDB4NjlkNTA3YmEsIDB4YWQ3OTFlNzgsIDB4ZDU5MWU3OTksIDB4M2M4ZjczM2MsIDB4YzQ0YzYzYjIsCi0JMHgyMWQyMzIzYywgMHg4Nzk0MTZjNiwgMHhmNTk3ODk4NSwgMHg5YmVhMDY3MywgMHgyNzhlOWNjNiwgMHgxYzdmMjNjNiwKLQkweDIzY2YxZDkyLCAweDMxYmNjN2U4LCAweGUyYjcwMGY5LCAweDkxZjAzOWQwLCAweDRhZDgxYjExLCAweDc4MTdmNDMzLAotCTB4MTkzM2NhMTUsIDB4MmQ4YjBlMjAsIDB4YzNlZmNhMDgsIDB4OWY4NDM5ODksIDB4YTZmZDQ3YzEsIDB4ZmMzZmI4N2MsCi0JMHhmMzFkYWI5OCwgMHgzMWE2MDNjYSwgMHg2NmZmYWExYiwgMHg4NzE2NWNkNiwgMHgxNjA2YzRmZSwgMHgyOTU5NmUzMSwKLQkweDY0YmUzOWU4LCAweDllNzI4Yzk3LCAweDEyZmMwNWQ0LCAweDA1MmIxZTgxLCAweDU3OGU0MDNkLCAweDc3ODczZDIwLAotCTB4ZWVjOWJiYjksIDB4YWE0MDNkMDgsIDB4M2RhM2UzMGMsIDB4YzM5N2YyM2EsIDB4NTcxMDNmOWYsIDB4N2JkMjMwZjYsCi0JMHhiZTcyMmZiMCwgMHhjMzg1YTJlNCwgMHhmZDcxOGM2MSwgMHhiYzFmZTcwNCwgMHhmYTg4YzNhZCwgMHgzN2FhODE2NiwKLQkweDBmNGM3NTJiLCAweGU4MmE5ZGY0LCAweGFmMDM3NTM3LCAweDk3OGJiMzUzLCAweDlmYWFjOTJlLCAweDg2N2U2OGM1LAotCTB4YjRjMTYwZmEsIDB4MWZlNjFmNTgsIDB4NzhlNWI0MTYsIDB4NDQ5NzJlMDksIDB4ZGI0ZjE1ZjksIDB4MTdmNjE3NjEsCi0JMHhjNTZhMWQwYywgMHg3YmY5ZDc3OCwgMHg0NzkyN2QyNiwgMHg3YWUzMWEyZSwgMHg1MTNlY2Y0NywgMHhjZmQ5MDBmNSwKLQkweGRjNWJhYTQ0LCAweGEyZWFmODJlLCAweDQxMzgyMTQ1LCAweDAxOGRhZjNmLCAweGIwZDgyYzNhLCAweDUzZWUxNzYyLAotCTB4MTlkZmVmNzgsIDB4Y2E4ZTI3ZDUsIDB4YjI3MGMzNWQsIDB4Y2IzOTAwM2IsIDB4YjNkNWIwMGEsIDB4Mzg3YzAyOGEsCi0JMHgyNjk5ZTY5NSwgMHgwZDdlZjFlNiwgMHhkZjA1MzVlZiwgMHgwMWRiNDc3YiwgMHgwMzUxY2Y1YSwgMHg1ZjgwOWFmMywKLQkweGE1ZGU3NzNhLCAweDk4ZGFiZmEwLCAweGZmMTA3MjY0LCAweDcxZDdiYThhLCAweDE5MTBmZGQ5LCAweDFkNTc3ZDBmLAotCTB4MmRhMzM2ODIsIDB4ZDYwNmJhYzYsIDB4YjhjOGNhYjEsIDB4NzY4YmFiN2YsIDB4NWEyN2ZlMjAsIDB4MmZjNGY0M2EsCi0JMHhjNDdhNWQ4OSwgMHg2NzQxNTllMywgMHhkZmM5ZjFmNCwgMHgyNzQ0NjI0ZiwgMHhlOWM3NWQzOSwgMHg3ZGYwYWQ5NiwKLQkweDc5YjVmZDIzLCAweDc1MTM3N2MwLCAweDE5MDJmZTQyLCAweGNjNjI3ZDc4LCAweGUwMTU0YjNiLCAweDJhZWIwM2NjLAotCTB4N2Y0MWU5YzcsIDB4Njc3ZjhjNGYsIDB4MGZmNDBlNjksIDB4NGUzZjliYWUsIDB4MzEzZGZjMGYsIDB4NzMyZjlkZmQsCi0JMHg1YWRmZDQ0MCwgMHgwZmVmYzU1NywgMHhiZWNiZTc3YywgMHg1YmFjMGZkMCwgMHg0Y2RmZWZjMCwgMHg1OWRlY2ZiYywKLQkweGYzMGUzZDU3LCAweGQ2NWVlZmZiLCAweDA3ZmU3YzBiLCAweDU3ZWYyZTY0LCAweGJhNTFjYWRiLCAweGM2NzE0OGZhLAotCTB4Y2YzNTQ0YjEsIDB4MWVmODBjY2MsIDB4OGVlZmRiNTcsIDB4YTk3NTlkYTIsIDB4NDFhNzcwZjUsIDB4OGU0NzBmNTMsCi0JMHg4ZGJmMDEzMSwgMHgxMmM1N2MxNywgMHg4YzBlYzhlMywgMHhhZjFiZjQxMywgMHgxOGZlZDNmNywgMHhmODRmYzk5ZCwKLQkweDU4MzU4ZWJkLCAweDViMDA2ZjkxLCAweGY2MTUyZWViLCAweGFlZDA3ZjdjLCAweDcyNGJmOTY5LCAweGU4MGNiNjMyLAotCTB4ZTI1NjI5MmQsIDB4OThjYjU1OTMsIDB4M2Y3NjhjZGIsIDB4ZjFkNzg3NTgsIDB4ZTE3MzNjM2EsIDB4ZDQ3ODU1ZmIsCi0JMHgwYjgwZjdmNywgMHg4NWI3YWI0OCwgMHhlNjgxYjVjMiwgMHgxY2VhZTE1MSwgMHg3OTQ1ZTUxMiwgMHgwYWE3ZWQ1MiwKLQkweGY1ZDRhNzU3LCAweGI3YmYyNjJjLCAweDAxM2ZiZGE0LCAweGRiMTlkNmU5LCAweGZmNDEyNTk1LCAweDQ0MjNhNGM1LAotCTB4YWVhNGNlYzcsIDB4NDg0NzI1NjcsIDB4YThlOWMwZGYsIDB4MzhjNTcyN2IsIDB4MTllN2JjMmYsIDB4MDI0YmE5ZDksCi0JMHhmOTE5NDZmYywgMHg4YzI2OTMzZSwgMHg4ZjNkZTA1NywgMHg1OGJkYjkyNCwgMHg3M2JlMDNkZiwgMHgzMmVmOTFmOCwKLQkweDQ2ODdhNDhkLCAweDI3ZTZkNTBkLCAweGNmOWM0OTJjLCAweDNhM2I0NTlhLCAweDMwZmViOWFhLCAweDliNjdhNWYwLAotCTB4NzhjMDU2YzQsIDB4MjM2ZWM1Y2YsIDB4NmQ4OTg5ZGEsIDB4Njg0ZThjMjcsIDB4MzA5ZGI2ZWIsIDB4YzNhYWJlYTIsCi0JMHhiNzUzY2MzZSwgMHg2ZjUxMThjMSwgMHg3OTkyNDg2ZCwgMHgwZmNjMzI5ZSwgMHhlMDM5OWJkZSwgMHhjN2RjNDRhMSwKLQkweDQ1NTEyOTUwLCAweDA5MWRkZWVlLCAweGVmN2ZiMWEzLCAweGY4MjU1YzVjLCAweDhlYjcyMzJkLCAweGI5NjZjN2M2LAotCTB4NzZjMjFmZGEsIDB4OGJkOGViMGUsIDB4MmRjMzM0MmMsIDB4OTlkMmZjNmIsIDB4YmYxYTMxZDUsIDB4NWRiZDU2NzYsCi0JMHgwY2QzOWZkMywgMHg5ZWI5MDFkNCwgMHgxYjVkMmNiMywgMHg1Yjg4MzAzZiwgMHgyYzE5OWUwMSwgMHg2ZGZhODdmOCwKLQkweDhjZTNhMGJhLCAweGRjMDFiNWQ0LCAweDZkYzMzMmM3LCAweGNjODQ3NmYwLCAweDg1NmRiMTM3LCAweGQ3NzA4NmRlLAotCTB4YmY1MjBlNGIsIDB4NzNlMGE2NWUsIDB4YTEwYWY5MzMsIDB4ZWI0MzdiZDUsIDB4Nzk1YmEzNjIsIDB4ODZhZWEzMzIsCi0JMHhkODE1ZmJmYiwgMHg1NDU2YmMwNywgMHg0MjQ1M2U0YiwgMHhiZWU5MTgzYywgMHhmYmEyNTVhNywgMHg0N2M3ZDY5ZSwKLQkweGNmMzIzZWUxLCAweDI2ZjI4OTUyLCAweDNjNDQ3ZGM5LCAweDFjZWZlYzI0LCAweDUxZTgyYjAxLCAweGYzMzNjZTAzLAotCTB4YTNiMzEyZmIsIDB4YmVmZTEwZGUsIDB4ZTk5Y2ZmMGEsIDB4M2Y4OWE3ZTUsIDB4YWVhZjlmODUsIDB4NzYwMmJhNzMsCi0JMHhjOWNmYWUxNywgMHhmZTgwYzRmZSwgMHg2NGVmYWMzNSwgMHhkYTlmMDY4NywgMHg2ZDdhYWNmZSwgMHg2ZDMyY2U3ZiwKLQkweGYwOTI2YTdmLCAweDgxYjIwN2RmLCAweDkzZDM0ZjI4LCAweDU1ZWEzZDI0LCAweGU2NDVmZmI1LCAweDAxZjk2ZmZiLAotCTB4NmJiMmNkOWUsIDB4OGQ2N2YyMjYsIDB4YThmNTRmZDEsIDB4ZmE5YmIyY2QsIDB4NWViODdkZWEsIDB4YzBlZTQ4YzcsCi0JMHg5NjM5MjAxZiwgMHgxOTU3M2U0OCwgMHhmNDEyZDY5YywgMHhlMjI1NmJhMywgMHhjNDJjOTlkYiwgMHg4ZTA5Yzg1ZiwKLQkweGIzZGNiZWE3LCAweGQ3MTI2OGZmLCAweGFlY2NhYjNiLCAweGRiMTc1NGE1LCAweGMxMzc1OTI5LCAweGE3N2E1MWE1LAotCTB4NTVjMGZkMWUsIDB4YzhiY2U0NTIsIDB4ZGVkYzQ5NjMsIDB4OGEyMGM1YmUsIDB4MjAwNmI4MDcsIDB4OWY1ZGEyOTMsCi0JMHhjMmYzZWYxYSwgMHg3NmZjMDc3YiwgMHhmYmZkMTdhZSwgMHgwN2MwODUwMSwgMHhiNzNkY2EwYSwgMHhiZDg1ZTMzNywKLQkweDI1ZmUwNDk5LCAweGU0MDM3ZmZhLCAweGRmYTRlOTk2LCAweDQ5NWEzNDZmLCAweGE0M2IwYmJmLCAweDJmZTcwYmVhLAotCTB4N2M2ODc2YjQsIDB4M2Y4YTdlYzYsIDB4N2I1ZmFkMjYsIDB4ZmY2MmY1MGUsIDB4Yzc4MmNlN2UsIDB4Y2M0N2JlMDEsCi0JMHhlYzhmZmRmYywgMHgyZmI4N2M5MCwgMHgzZWQwNmVhNywgMHhjMDI5OWZkMiwgMHhiYWRlZjgxNiwgMHg1YjQ3YTE1NCwKLQkweDUyYWVmYmI1LCAweDJlNjFhZjUwLCAweDdhMjBjMjdmLCAweGU1NDk5YTZmLCAweDQxZTkyNzc2LCAweGJiYWE1ZmM5LAotCTB4NDUyOWZhMDQsIDB4MGNhNmY3YmMsIDB4YmM5NWYwODUsIDB4NzVjMjQ1YTgsIDB4MGFlZjMyNjcsIDB4NDYzZmUzYjQsCi0JMHhiNjBhNGMyMSwgMHg4ZmNmZWQ1NywgMHg3OWZkYzI5MiwgMHg2NWU2MTI0YiwgMHgxNDhjM2I1MiwgMHhlMzJlYjFlZiwKLQkweGViYTc5NDNmLCAweGYyMzI3ZjM5LCAweGIwZmNmODU5LCAweDA3NTdhYTdjLCAweDcxOGJmMmUzLCAweDc3YjlhZjk4LAotCTB4ZGM2ZmJmNjcsIDB4YjQ5YjI0ZWYsIDB4YWFjMWI3NzEsIDB4ZTdjN2JiOGQsIDB4NDRjZmY1NjksIDB4NGNlZjU2ODcsCi0JMHhiOWE3ZWUyZSwgMHg1MDM5YzUzZiwgMHg3OTZhN2Y3MywgMHg4NzdmYTZhMSwgMHhmOGNkNjZlYiwgMHg2OTk3YTZiYiwKLQkweGUzYTk1MWZhLCAweGRhMDBmMmMyLCAweDllNGM0YWZjLCAweGViMTJiZjM2LCAweGEyNTFlNmQwLCAweGJhN2FmYzBlLAotCTB4OWEzMTc4MDQsIDB4YzA2ZTFkYmMsIDB4NDZjODEzNDMsIDB4NDc2ODJkYjEsIDB4YTg5OWM2MDYsIDB4Njg1ZDFiNDgsCi0JMHgzNGRiNjBiNiwgMHg3YzhmY2EyNCwgMHhjNzg3ZDRkMiwgMHhiZTA3NTFlMSwgMHg3OTg3ZWE5ZiwgMHg0YzViZjE0YywKLQkweDQ5Nzg4YTU4LCAweDhhNjI5NWYyLCAweDc1NDRkMDE4LCAweGQ0MWUxYmQ1LCAweGQzZDM5YmZhLCAweGVkYTk1Y2I4LAotCTB4OTlmNzI0YjEsIDB4YmMxYmFjNjQsIDB4N2Y3M2E0YTgsIDB4ODlmMTQwMzYsIDB4YmY3MTlhMjksIDB4ZmM4OWJiNjgsCi0JMHhiZTRlMzUyMiwgMHg5NDY1YTcxYywgMHgwZWJhNDA5YywgMHhmNTQ5ZDA3YSwgMHhhY2NhZDYxMywgMHhkZTdjNTc5OCwKLQkweGRiYTlmMjI4LCAweDQxZGMzZWY5LCAweDY3M2ExZGFkLCAweDQ5MmY3Yzg4LCAweDQ5ZTBmYWU2LCAweDljNThlOTU3LAotCTB4YWMwZGFlYmYsIDB4ZmFkM2NhMmMsIDB4YTc1ODhjOGYsIDB4OGY2YjZiYWMsIDB4ZWY5NjdiNDMsIDB4Nzk4OGM4ZmEsCi0JMHg2MTc1ZTBiYiwgMHhkMTVkZjRlNywgMHg1NWY5NWY1OCwgMHhmZjcxMWM4YiwgMHhmN2NjOTJiMiwgMHg3YTEzZWM2YiwKLQkweDgzZjdkNjdkLCAweGIwYzk1MWYxLCAweGI1OWU3ZWEwLCAweGMzMmZjYmI1LCAweDVlODE2N2ZiLCAweDRhNmJmMmYzLAotCTB4ZmEwZDNkMjQsIDB4M2NjZjEzNTksIDB4YTdlZWE2OTksIDB4YzFlYzZhNzEsIDB4MDM3ZWM1ZGQsIDB4ZWQ2YTlmZDksCi0JMHg3OGQzMzlmOCwgMHg1YzdhMDQ1YywgMHg5MWEzM2Q3YiwgMHgxZDYzMGJmNCwgMHg4MTViY2MwNiwgMHg4ZmRjZDc1ZSwKLQkweGQyNzExNjRiLCAweDEyZTgzNjQwLCAweGFlYTM4MWU4LCAweDJiYjVmYmM4LCAweGM3NDRmNGQzLCAweGEyMzJlZWEzLAotCTB4NGY4MDkzYzMsIDB4ZWM5Zjk3ZjQsIDB4ZDc4ZTNmODEsIDB4NjVlZGUxMmIsIDB4ZmExMDgxZTQsIDB4NGZhYjhmODUsCi0JMHhjYmY0N2VlMywgMHgwN2VkZThiZCwgMHg5NzlmN2QwNCwgMHg1NGE4MDUwMiwgMHhlMjY4YWUzZCwgMHhiOWE2OTlkZiwKLQkweGY3M2Y3MThiLCAweDFhYWZjY2JlLCAweGViMzE1ZWIxLCAweDdiNDMxMmQ3LCAweDAzZjY4N2ZiLCAweGI4Y2Y4ZmI0LAotCTB4ZWUzMjZmNzUsIDB4ZWNiNGY0YWYsIDB4N2ZjMDY2NGQsIDB4MDU2NTA2MzUsIDB4MWZjMGYzZmEsIDB4ZWE3ZmY0MGUsCi0JMHg3ZjA0ZmQ1YSwgMHgzYjYxNGI2ZCwgMHg5NTZkYWY1ZSwgMHgzZDkyYTgxYywgMHhhMThkY2VkYiwgMHg0NjhlYjI3NSwKLQkweGRmM2RmZmFjLCAweDkzMjM1YzBiLCAweDViNzU1ZmI5LCAweDA0ZjNjMmIyLCAweGRhMjc3ODZlLCAweDNlNTE2ZGZkLAotCTB4MDBmYzg0OWYsIDB4ZGFlMTA5ZmEsIDB4ZTg2NmIxMjEsIDB4MTRkYWJmM2YsIDB4YTBmYmVlYjEsIDB4ZDU5ZWY3YzAsCi0JMHg2YWIzOGE0NiwgMHhjNzVjNzllMCwgMHg0NjdkY2NiZSwgMHg1NmQzZjIxMywgMHhlYjg0OTc1OCwgMHgwYzQ3N2MzOCwKLQkweGMwZDRiZmNlLCAweGUxNTBjZmQwLCAweDM4MTk5MzNiLCAweGIwZmZlYjhlLCAweGI4MWQwMjEyLCAweDI2NTJhYWJlLAotCTB4NTRiODdmN2MsIDB4OWZlNzIzZTQsIDB4YjhjNzRjNmEsIDB4NzdlZjk2YTYsIDB4NGRkOTVkZGYsIDB4YWIwZmJlNzksCi0JMHgzNjU2OWZiOSwgMHgzOTcyNDBkZiwgMHg1N2Y3MDk2MywgMHhlNTVhZjljMiwgMHg5ZjA1YTdkYiwgMHgzODZmZjM4NiwKLQkweGQ3ZTBmNmRmLCAweGQ3ZTNhYmVhLCAweGU2YmYyMGNhLCAweGZhMDdkZGEzLCAweDNlNDE0ZThmLCAweGVlZmYwMWZhLAotCTB4ZGRjNWZhNjUsIDB4YmI4MDE0ODYsIDB4ODFkNWEzNmYsIDB4Y2IwNmJkZmIsIDB4NTE5Mjg3YmUsIDB4ZjdlNmVjNmYsCi0JMHg5NDZjZDQ4NywgMHhlZTUxZmViOCwgMHgzN2E1ZjVjNiwgMHgwOTFhZDkxOSwgMHhlZGQzODlmOSwgMHg4NTM3NDEwMSwKLQkweDE0MzE0OTc1LCAweGEyZmEwNWZmLCAweGJmNTFjYTllLCAweGU5YjAzMDg3LCAweGE3M2YzMTViLCAweGYwNjdmYWU3LAotCTB4ZDcxYmE5NmIsIDB4NmU2ZmYwODQsIDB4NTU1YmU3MzIsIDB4MzIzNDBlMmYsIDB4MDdhYTU2ZjcsIDB4MDI5OWY0YjQsCi0JMHhlMDZjYmNmMywgMHgzMTJjOWNmNSwgMHhhZWJmNmU1ZiwgMHg1ZGEwNTMzMSwgMHhlNGY1Y2M5ZiwgMHhkYTg3MDEwYSwKLQkweDgwZTQyNzVmLCAweGY4NGRkYzY1LCAweGY4ZTI2ODljLCAweDVmY2NiNzFmLCAweDk5ZjhlYjgxLCAweGVhMzBmZGQxLAotCTB4ZWY1OTA5ZDUsIDB4NmJkZGEwZDcsIDB4MjBlNmZiZWEsIDB4MDczMjFmY2EsIDB4YmM2YWUxZjksIDB4YTdjNDdiYmUsCi0JMHhmNTgzZWUxYiwgMHgyNjhmYWY5YSwgMHgzZTc3OWFmYSwgMHgzNjdlNDU2ZSwgMHg3MTRkMGVlNywgMHhiNTNmZTA0NywKLQkweDYxYzg1Y2Y1LCAweGQ1ZjAzYjZlLCAweGFhZDQ3ZTg1LCAweDRlYmIyOWZkLCAweDcyOWY2OTFiLCAweDI0MzFiOWRiLAotCTB4ZThkMjE3MmYsIDB4NTM1Y2ZhYmEsIDB4YzFjZjk3MWEsIDB4OWFhODNmNjIsIDB4YWRiZDA0Y2YsIDB4OGUwODJlMmYsCi0JMHg3MGMwZjE1MywgMHhjMjExNWU3NywgMHhlYmQxMDJmMywgMHgwODZjMjViZSwgMHg0ZTNmYWI0ZiwgMHg3MzU5OWZlYiwKLQkweGYzMGI5YTU4LCAweDFhNzA2NWRjLCAweGY3ZWY4MDJjLCAweGM2MmZhN2UzLCAweDJlNmYyZmZkLCAweDg1MWRjYzY3LAotCTB4Y2M0Y2VmZmIsIDB4MDNlZTFkN2QsIDB4YjAzZjUyYjQsIDB4ZWZmYTk1M2MsIDB4ZGRhODU3MmMsIDB4ODRiZDcyNjIsCi0JMHg0ZjYzYmE3OCwgMHhhYmVkMmU3ZCwgMHg1NWNhN2NjYywgMHgzY2U5ZWYwYSwgMHgwNTNiMTA2OCwgMHhhODI3ZTQ0ZCwKLQkweDM2ZWVhMWY1LCAweDdlZTA5OTk5LCAweGVhODkzNmY3LCAweGIzZmMyYTlkLCAweDM3MzNhNDJmLCAweGUzZGY5N2U4LAotCTB4ZGFjMWUwZmIsIDB4ZGU5MmVmNjUsIDB4MWI5ZjU0NzMsIDB4OTBkMjcxODMsIDB4ZDg4ZDEzOWEsIDB4ZjNmYjJjZjcsCi0JMHg4ZTJmZjQxOCwgMHgzZTQxM2Q4MywgMHhhNTlmYmYwMywgMHgwZTRmYTg0YSwgMHg1ZGRmNzExYiwgMHhjZDNiMDVjNSwKLQkweDZiYWViMmYzLCAweGY3OWRjYTBjLCAweDUwZWE4OTBkLCAweDE5Y2Y1YmM3LCAweDYyYmRiODUzLCAweDU4MDZjYTA4LAotCTB4ZmZlMDEzOWYsIDB4ZWI4MTM5MjIsIDB4M2EyMWI2OTMsIDB4ZGNhMWRmNGUsIDB4ZDBmYzExYWYsIDB4NzFkN2MzN2UsCi0JMHgzMmQzMGY0OCwgMHhmMTliZWRlNSwgMHg0MzMyZmRmOSwgMHhkYTUzNWViOSwgMHhhMDhkNjcxNSwgMHhiY2MyOGY4NywKLQkweDc1YzE1Yzk4LCAweDdmN2UxYjYwLCAweGViOWJkMWJhLCAweGViYTZlNzgwLCAweGZhOWJlZjIyLCAweGJlNzJmOTJjLAotCTB4ZmYxNGU0ODIsIDB4MGFiN2UwMjQsIDB4NjBiMzZmYzEsIDB4OGEzNmYxNDksIDB4MjBkMWZjODMsIDB4Y2FkYWIzY2YsCi0JMHhhZGIxZWI0ZSwgMHhkYTQ3ZDg5NywgMHgxNDdkOGNmOCwgMHhjNmY3YzdlMiwgMHhhZGI2ZGY4NywgMHg4MzcyZjljMywKLQkweDU5MjM4YzdkLCAweDcxODQ1Zjg4LCAweGRmYmNkMzI0LCAweDk5NGNmM2NiLCAweDExZGM1M2ZkLCAweDBlNTk3OWQ2LAotCTB4MDNiZmMwM2EsIDB4ZTM4MWQ1N2EsIDB4ZGY5MWQ4YTQsIDB4NzY3YjUyMDcsIDB4Y2EwYWMzYzcsIDB4ZWJiYTI5OGYsCi0JMHg2YzE3YjQyOSwgMHg4ZWUyOGU4MCwgMHgxZmQ2YWY1YSwgMHhlNWNhOTYzYSwgMHhjMGFhNThlMSwgMHg3ZTM2OGE1YiwKLQkweDRlNDkzODgyLCAweDFjNTI3MWUxLCAweGUyNDM4NDE2LCAweDE0ZWJmMGE3LCAweGFlNTA5OTNmLCAweDgxMDNiZGUwLAotCTB4YTI0NGFmM2UsIDB4MjlhOTZhNGYsIDB4YWJlNTA5MjUsIDB4MDE5Y2Y4OTksIDB4ODU3ZjIzOWYsIDB4MjI5ZWQzYWYsCi0JMHhhZTQyZDlmMiwgMHgyMzVjYTA2NywgMHhiOTcyYjZmZiwgMHgzYmI3OWYwZSwgMHhmMzhlYzRiNSwgMHg1YzdkYzZhZSwKLQkweDY5YzZmNDExLCAweGY1ZGFjZWIxLCAweGIzY2JlMTEyLCAweDNhNzg0ZWRlLCAweDRhYmJkNmMzLCAweDAwY2YyZjgxLAotCTB4YTAyZmI4MWMsIDB4NDk4YWU1ZDMsIDB4ZGI4ZDdhYzAsIDB4MDRiMzYzMTUsIDB4ZmFkZDQwZjUsIDB4NzU2ZTdhMTgsCi0JMHg3M2VkZGJmZiwgMHhjMjk3OWZhMSwgMHg2YjZjZmVmOSwgMHgzY2YxMDk5OSwgMHgzZjk3M2Q3YiwgMHhmZGM3N2RmNSwKLQkweDRmMjhlYzMzLCAweGEzMmU4NjQ1LCAweGI0NjdlZTAzLCAweDNmNDM4ODlkLCAweDU0Yzc2OGIwLCAweDZmNjFjYTNiLAotCTB4NzBhODY2NzAsIDB4ZjE2ZmJiMmUsIDB4MDdlNzNiNDksIDB4ZjVhYTZmY2MsIDB4YmY0YWNmMzgsIDB4NzhiZmYxMTEsCi0JMHg2ZGZlMjMxOSwgMHgzYTg3ZmVkZiwgMHg2ZGIzZTM5NCwgMHg4N2I0NTYzMSwgMHg3OGM2NzY2NywgMHhiZTc3ZmY1MSwKLQkweDQ5ZDNlNTExLCAweGUzNzg4NzE0LCAweDMxOWRhZjQxLCAweDdmMjI0Yzc0LCAweGM1NmM4NzczLCAweGM2ZjNkMWY4LAotCTB4M2NhMTRmZTcsIDB4YTE0N2I2N2EsIDB4YjcxNmM3ZTcsIDB4ZWQwZTdjM2QsIDB4ZDhkYjRkNWUsIDB4ZGE3Y2ZhZDMsCi0JMHg5NTRmZmU4NywgMHhmNzY1ZGE4NywgMHhmZWQ1N2FkMywgMHgwYTRkY2JlNywgMHg3YWIzZDFlYSwgMHhiNzE2MjdhZSwKLQkweGVmZmU0YWJlLCAweGY5ZGQ4YmUyLCAweGIzM2YwZjU4LCAweDUwYzM2ZmYzLCAweGRiN2U3OWFmLCAweDk5ZjUwYzNkLAotCTB4NjFlZWY1ZTcsIDB4NWFmM2RmNzgsIDB4YmYyNDdkNGMsIDB4ZjNjNjk3YzUsIDB4Y2NiZGFhNDAsIDB4ZTRkN2EyMzksCi0JMHg1ZDg1YTI4YiwgMHgyZTY4NjljOCwgMHg0NTlkN2RjNywgMHgzMDM5YTc4NywgMHgyZmRlYWI5ZiwgMHg3ZWQxZDVjYSwKLQkweDQ2ZjdhMmZlLCAweDNjODdlN2Q5LCAweDk3ZDAxMGQ3LCAweDg3YTFmNWUzLCAweDg2NTRjNTQ3LCAweDQxYWE2NWYyLAotCTB4NTU1ZTM3Y2QsIDB4ZWFlZjA3OWUsIDB4NzVlNDg1ODcsIDB4MTlhNzNhMDIsIDB4ZTgwZWFkYzYsIDB4NmFkYWZlZjksCi0JMHgwNmYxODdjOSwgMHhjZmUxMmZmOCwgMHhiOWQ1M2Y5MSwgMHg0MzViZWVkMCwgMHhmYzZiODI3ZSwgMHhjZmQ4YTFlMCwKLQkweDUwNTFhYzc1LCAweGY2ZjY5OGFkLCAweDY2OTdmMTBmLCAweDI4ZmU3NDA0LCAweDZkZTlhM2UwLCAweGY3ZjI3ZTUxLAotCTB4ZDQxM2ZhMDMsIDB4ZWNkNDdlMTcsIDB4ZTZjNjlmNzMsIDB4MzRmMjExNDgsIDB4NDY4Y2VmNzksIDB4YWY5ZTFlM2QsCi0JMHg4NDU4YmY4MSwgMHhkZWFmZjU1YiwgMHhhM2Y5ZTM0ZiwgMHgwZWFiN2E4YywgMHgzNDU2NjdmNywgMHhiNWUyMmIzMCwKLQkweGZhNjc1ZTQ3LCAweDBhMmY5NDZkLCAweDgxMjhlZmNmLCAweDRlN2MyNjc1LCAweDIyYjNhZmU5LCAweDhhNWZhYWJjLAotCTB4NDExNmRjNzQsIDB4NzJhNjI0MGYsIDB4YWY5NTQ0YmYsIDB4ZTg4ZTgwODYsIDB4MzUyODEwZDMsIDB4NTYzNjg3ZjUsCi0JMHhhYjM2ZDdjOCwgMHg2OGY3YmU4ZSwgMHgwOWJhOWI2OCwgMHgxNzBkMGJmMywgMHgwYzE5OGFlZiwgMHg3MjM4NjllZiwKLQkweDNkZWZjMzNiLCAweGE2YTVhZDNhLCAweGUyZWU3YzVjLCAweDA2M2JhNjZkLCAweGZjMjZmOTA1LCAweGI4NTJjNzdkLAotCTB4MGJmYTBjZGUsIDB4MjFkZmVkOTEsIDB4NTlmZWNmYTEsIDB4OGE0MGYwNzYsIDB4ZmYzZGU0NGUsIDB4MTA4M2I2ZWYsCi0JMHg3ODUyMDc5ZiwgMHhlNzkzM2U3YywgMHgxZTdjNzg0ZiwgMHhiZDU0M2Y2ZSwgMHgwOTJiY2VhYywgMHhjYmQ0ZjczYSwKLQkweDgxY2ZjOWE3LCAweGIyZjQ5YTM4LCAweGI4ZDBhYTk0LCAweDc2MjliNjhjLCAweDRjOGZhZjhhLCAweDllOTYyYmIzLAotCTB4M2JkM2Y3ZjMsIDB4M2Q0MWI2NzQsIDB4MzlmZDU3ZTcsIDB4ZDdiOWQ3OGYsIDB4OTM4ZjcxODQsIDB4NGNmMzIzZWYsCi0JMHhhZGRmNjg5MywgMHg1Yzc5ZmZlYSwgMHg5ZWU1ZjkxMiwgMHhjNzBmODMwYSwgMHhhNjA1NzBhOSwgMHgxZGVjN2NmMSwKLQkweDJjY2Y4MzRlLCAweGQ1NDRmZDA1LCAweGRmN2NiYzhmLCAweGQ1N2RkMTIxLCAweGM3ZmQ1NGFmLCAweDc3ZTc4YjgwLAotCTB4ZjdlNTBkYTcsIDB4MTdkYzk4YjcsIDB4ZjcxZjJlZDAsIDB4ZDE3YWU5OWIsIDB4MzE5ZDdlMDgsIDB4YWI4YzVlZDcsCi0JMHg2MjUzYmFlZSwgMHg1Zjg0MDdhNCwgMHhiODY5ZjJhOSwgMHhhZGJlNzlkZiwgMHhhM2VlMzdkZiwgMHg1M2Y4MjBkZiwKLQkweDMwYWNiMzk1LCAweDU4ZWQ1MGY5LCAweGM3OTcwYTVlLCAweDg1ZTNiNDNhLCAweGFhZmZjNzY4LCAweGU3YzNjZmYxLAotCTB4NDk2ZTNiMDUsIDB4M2QxOGU3YTUsIDB4YmQzZGY0M2YsIDB4ZmViYzUyMmIsIDB4MGNhNzkwYWMsIDB4M2Q4MTdlOTUsCi0JMHgyNjZmMDgyNSwgMHhkODNlZDAwYiwgMHg3YzZiZWNkZSwgMHhkZWQ3OTcxYSwgMHhiOTA5ZTdlZSwgMHhkZjNjOTJiOSwKLQkweDNmY2NmNDI2LCAweDUyY2I5ZTRiLCAweGI1Zjg3N2ZmLCAweDVlYzNmZDk3LCAweDJjZmJjN2JlLCAweDJhNDI2NGI1LAotCTB4YWU1YTM1ZTAsIDB4ZmNhMDk0MGYsIDB4NjIyMWE3ZmQsIDB4ZDg1ZDNhZGQsIDB4MzU3Nzg4NmIsIDB4Njk5YmQ5ZjQsCi0JMHhlNDdjNjFkNCwgMHg4M2Y5ZTZhOSwgMHg2ZGU1MDRhNiwgMHhjODBlNjM4YSwgMHgzMTdiM2ZiNCwgMHhjN2U4ODNjNCwKLQkweDQwOTBiYTJkLCAweGNiZmEwZDZkLCAweGYxN2NjZWQwLCAweDY2MjNkNTMwLCAweDZmZTE2YjU2LCAweDNlMmU5Y2MyLAotCTB4ODdjNzI0YmYsIDB4MzYyY2YzZmUsIDB4YjM0Y2YyOGEsIDB4YjhhYzEyZGEsIDB4YTkyOWI5ZGYsIDB4OTVjYTFmNjUsCi0JMHg2Y2FjOTM3NywgMHg1MGJmMWQwYSwgMHg3OWUyNmYxZCwgMHhiNDY5NjViOCwgMHhmOTg1OTJiZiwgMHhjM2VhYjMwMywKLQkweDdmYWQ3ZWZkLCAweDFiYzhiMzcwLCAweGJjMjdlNmY1LCAweDdhZTY2ZWRlLCAweDcyNGNiZjY1LCAweGE2Zjk4NzVlLAotCTB4YjYzMzE5MWIsIDB4NTllMGJkNzEsIDB4NzUyNGYzYzYsIDB4N2JlODJiNmQsIDB4ZmY3MTVhYWMsIDB4ZjI4MDdkMzMsCi0JMHg4MzVmNTQ1MCwgMHgxZWRiYTdhMSwgMHg2NDc5NDY0ZiwgMHhhOTNkNmQ0ZSwgMHg0OGY3ODVmNiwgMHg5NWQ3ODY1ZiwKLQkweDVlYjhkYjZjLCAweGEyYzhkNGYyLCAweGMyNGMzNDhlLCAweDkzYzQyZDdlLCAweDJhNWZlODI5LCAweDNiYzQ2NGNhLAotCTB4NTdkOWE1YzAsIDB4Y2YwNWZhYTYsIDB4ZjlkMmJhOGIsIDB4MWM1MzFmZmQsIDB4MmY0NzczM2EsIDB4NzFhNmE0NzUsCi0JMHhmNjI0OGViYywgMHgyM2FjZjQ2ZiwgMHhhZTliZGJlZCwgMHg1NDhlYjk1YywgMHg4MGQ4N2FkNywgMHhlYTk1YzVmMSwKLQkweDVlYTRjZjQ5LCAweGRlNTEyN2FlLCAweGYzY2Y1YjMxLCAweDkyNmRkOWJiLCAweGQ5NTVmMzE1LCAweGMzZGQ3YzZkLAotCTB4N2Y5MzQ3NTcsIDB4OTU4ZmU2M2QsIDB4MmEwN2Q0NzYsIDB4ZTE0ZWNlOWQsIDB4ZTFmYjNkZjgsIDB4NzViNDI1OTcsCi0JMHhhYjdhOGZlMCwgMHhmYWY1ZDYxOSwgMHg0ZGRmNGI4NywgMHhhNGM1N2RlNywgMHg2MzRiNzNlMCwgMHgzZmU5YmJlOCwKLQkweGY4ODMxYmRlLCAweGE0NWExZDdkLCAweGY1NDc2YmNmLCAweGMxOTNmMzkxLCAweGE5MmJmNTdjLCAweGY5MTY3Nzk0LAotCTB4YzNkODNkNmEsIDB4Mjc1ZTYwZDgsIDB4ODU1YmI5ZmMsIDB4NzA4MjZiYmUsIDB4M2I5YWYyODUsIDB4MjliZmRkNzgsCi0JMHhmYThlM2RjZCwgMHgzNmNiZWIzZiwgMHhhNGU4OWY5MSwgMHhjMGFiZjQ3YywgMHgxYTM3OThkNywgMHhiYWM1OGIwOCwKLQkweDU5YTMyZmY0LCAweDlhOTFkNjAzLCAweDkyNmZkYzkyLCAweGE3NGNmZDFjLCAweGYzYzExY2EwLCAweDZlZjI3ZjU0LAotCTB4NjIzZWM4NTUsIDB4M2NlYjBiZWEsIDB4ODU4MDQ2ZjksIDB4N2RmMDNiZjYsIDB4M2EwODM3MTMsIDB4OGIzYzQxYTYsCi0JMHgzMzQwMjU3MSwgMHgwM2QwZWIwZCwgMHgzZjI3YmQ0NSwgMHhmZTcxZTk5YSwgMHgzNWVlMGM0NywgMHhhOTdkNjNkNywKLQkweDQxNThlZjVkLCAweDRmYjBlMDQyLCAweDc3NTllZDg5LCAweDVlYmM5YzkyLCAweGQ0OWZkNmFlLCAweGY1NmY3OWJhLAotCTB4OTNkZjA5MjcsIDB4ZWE4ZmY5Y2YsIDB4OWNmZjYyNGQsIDB4Nzc2MjY3NWEsIDB4YjVmOGE4YmEsIDB4NjE5ZWI4YWEsCi0JMHg4MzJjM2FmYywgMHhkMmZhZWI1ZCwgMHhkNDIzOTJkZiwgMHg0YzI5NGM3ZiwgMHg3YWRhNjdmOCwgMHg1N2JjOWFlMywKLQkweGRlZmY0Zjg4LCAweGE5NmRlMzNhLCAweDFlZmIxZmVjLCAweDBhZGMwN2E2LCAweDBjMzIyZWZmLCAweGU3MDlhMWVlLAotCTB4ZmFlZTI5OTMsIDB4OTFjNGJmZWYsIDB4MjZlYjZkOWQsIDB4MTVkOWQ4N2IsIDB4N2Y5NDAyYzUsIDB4Zjc3OWUwZWMsCi0JMHg1MDNkZmUzNiwgMHg0OTZmYzQyNywgMHg3ZTc2NzYyMSwgMHg1Nzc3OWYwYSwgMHhmZmYxMTk1YiwgMHgxOGE4YzBiNiwKLQkweDBhNThmZjFjLCAweDIzZWFjN2E3LCAweGJmYTJhNmQzLCAweDY5ZTgwZGVmLCAweDNjNjMwZWJmLCAweGQwMTZkYjFlLAotCTB4NzJkZmExMTcsIDB4OWE5MmU5MGQsIDB4ZDEyZTg5MWEsIDB4Y2I4NTNlZGMsIDB4N2Y2MTIxZDEsIDB4YmE3MmE1MGYsCi0JMHhlM2M4N2Q5NSwgMHg1ZTUyY2YzMCwgMHhiZDBhYjE1ZiwgMHg3NWU3YTllMCwgMHhjOTk5N2RmNSwgMHg0ZjRmOWE5MiwKLQkweGQ5N2Y1NDg5LCAweDYzNzY0NWQxLCAweGY2ODk0MmQ2LCAweGZhZGI3ZWQ1LCAweDkxNjkxM2NiLCAweDViMzNmMWViLAotCTB4YmZhZTQ0NGYsIDB4ZmQyMThmOTQsIDB4M2IzZTViZDksIDB4NGI3ZDhmM2MsIDB4MGY2M2M4OWEsIDB4NWZlYzc5ZTYsCi0JMHhiZDY5NWFhNSwgMHgyNTIxZmFiNiwgMHhmYWVhYjJjOCwgMHhiZTFkMjFhZiwgMHg4NzQwOGI0OCwgMHg1YzdmMzg2YiwKLQkweGRmNWI3N2ZhLCAweDdkNTIzMGZkLCAweDZmY2UxYWY3LCAweGUxNmVmZTRiLCAweGE3ZTkyMjU3LCAweGYzYmYzODZiLAotCTB4ZmQ3ZjllM2IsIDB4OGFmZjNjNzcsIDB4NzdmZjE4ZWYsIDB4ZmY5ODQ0YTUsIDB4MDFmZGQ1ZmYsIDB4ZjBmZmY1ZTEsCi0JMHhmYmUxMDJmZCwgMHhjYzBlYTIwMCwgMHg4N2JkZTJmNywgMHg3ZTVkYjVhNSwgMHhkYjcxNGQ2OCwgMHgwN2EwNGJhNywKLQkweDk4MmYwOWY1LCAweDE4NGU4ZWQwLCAweGFiNjFlYmMxLCAweDFiN2M5OTQ3LCAweDAxYmVlMGE1LCAweDgzMmM1ZjE1LAotCTB4NDFkNjExYzcsIDB4YzA3NmJjZTcsIDB4MzAzMzk2NzMsIDB4YjJmOThlY2EsIDB4ZTBlMjhjMTEsIDB4OGJhZjMzNGUsCi0JMHg2ZDM1YmQzMSwgMHhiN2MzZWQwYSwgMHg3ZTBlZGRhNiwgMHhkZjJmNTM0OSwgMHgxNzRlNmQzMywgMHg3NjJmNjE3MSwKLQkweGM5NDY2NDY0LCAweGFjZWZhODY3LCAweGQ1YTVmYjYxLCAweDZhZWEyOWQ2LCAweDBmYmU1NmQ2LCAweGI0OTVlOTk3LAotCTB4NGFiZGU5ZGIsIDB4ZjE0M2ZhMWEsIDB4MzhmNWY4N2IsIDB4MjQ2ZTczM2YsIDB4ZGI5Yzk0YjgsIDB4NzI1NDFlMjksCi0JMHg0NDI3YmUxMCwgMHg2ZTM2ZDdmZCwgMHhhNWU2MGU0MCwgMHg2MjE3ZTA2ZCwgMHhhYzcxZjA1ZCwgMHg2YjNjNTIwZiwKLQkweGZiZWE3MWE1LCAweGJmODdkODdlLCAweDkzMDMwOWVmLCAweGJkZWI5ZWIwLCAweDYyNzNlZjllLCAweDVkNGQ2YTk2LAotCTB4N2ZjMWEwZWYsIDB4NzU0NGFlNzIsIDB4OGMwZmI5M2QsIDB4MGZmM2E0M2YsIDB4MzA0NzNlN2EsIDB4ZDA3N2UwMzEsCi0JMHgxYmQ1MmIzNiwgMHgxZmYxMWFkZiwgMHgyNmJiZmM3OSwgMHhjZmJiZTc1ZSwgMHhjNmVjODdjYSwgMHhiOGUwMTliOCwKLQkweGYxMjE2NzZmLCAweDIzNWRjY2VmLCAweGY4YzBhODNlLCAweDJmM2YzZmEzLCAweDI5NWM0N2E0LCAweDQ1NDcwNWYyLAotCTB4MTdjZDQzYmUsIDB4NjNhZGY1YTgsIDB4MWM3MjRmMjIsIDB4NzZkMDJmZjMsIDB4NWEwNDNlNjAsIDB4NWFlZThmYTUsCi0JMHg0ZmE1MjdkYiwgMHg4NGYyZmQwNCwgMHhkZTQzZjNjNCwgMHg1NDNmM2M0MywgMHgwYmY0NzQ2OCwgMHhiODM5NGZkZCwKLQkweGI5YWJlNzBmLCAweDUwYmY1ZTdlLCAweGM1OWIzZGYzLCAweDIwN2YwYTdhLCAweDJmYzBhM2ZiLCAweDZjMWM2YzJkLAotCTB4ZDg1ZjNiNDQsIDB4NmQ4ZDE5OTgsIDB4YzNhN2QzYmUsIDB4Y2E4Y2VmNTIsIDB4N2U5NTNhYWQsIDB4Yjg2OGY4OTEsCi0JMHhmZGVhZTc1OCwgMHg3YmRmNTQ1ZCwgMHhmZmVlYWMzNSwgMHgzZjdjM2VjMywgMHhjN2UwYjc0MywgMHhkNDYxZjYxZiwKLQkweGJmNTcyZmJmLCAweGY4YzdkZDBhLCAweDUyMzk1NjkxLCAweGM0MTY2OTVkLCAweGRjZTcwOGM1LCAweDhhYjcwZTI2LAotCTB4YTU3ZTU5ZWYsIDB4NjI3M2RmMGMsIDB4YjYyMzU3NmYsIDB4NjUzOWQ1MDUsIDB4MzlhZjc3OTQsIDB4OWJmZTg4ZDcsCi0JMHhiZWY3NjJlNywgMHg2NjVmMjk1YiwgMHg5ODllMzA1NCwgMHhiYmNkYTFkZCwgMHhmZTc4MzJkOSwgMHg3Zjg5NTVmZCwKLQkweGFiMWRlOWFmLCAweDcwYjhmOGE3LCAweGM3Zjg5ZWFjLCAweGYxNGNjYjM2LCAweDY0YzBjZGFiLCAweDcwYTdmNjBiLAotCTB4M2NhMGE4YmYsIDB4NmNmYjBjYjEsIDB4ODNmOTAyNWEsIDB4ODQ5NWZiMDUsIDB4Nzk4MjgzZjksIDB4YTVkOGRiMzAsCi0JMHgyYmE3ODg0OSwgMHg3Y2Q1NTlkNSwgMHg3MzkzMTZkYSwgMHhlZmYzZDIzYSwgMHgxZWQ2YjNhZCwgMHg0ZGZiNDIzYywKLQkweDc4YTk3NWQ1LCAweGJkYTVlYjUxLCAweDdkZDU1OWQ1LCAweDJmZjI5ZTBmLCAweDNjMzRmYjM1LCAweDk4MzFhZWZhLAotCTB4NzlkYzJjN2YsIDB4NWZmNjI4YzIsIDB4ODI3MzUzNWEsIDB4MWRjMmQ4NzUsIDB4YWFmZWE4ZTcsIDB4ZjUzZDViZDYsCi0JMHg4NmFmYzhlNywgMHg5MjljZThlNywgMHhmZDc5Y2I2ZCwgMHg4MWMwM2I3NSwgMHhkYmFjMmI2ZCwgMHgwNmZjZjAwOSwKLQkweDFiNmQ4ZGQ2LCAweGJmYWYxYmFjLCAweDVhOGYzY2IxLCAweGI1MDc3MmZmLCAweDUzMTc5NmJiLCAweDkzZWMwODViLAotCTB4ZWRiYWMzNjYsIDB4MmVkYmFhMzksIDB4ZGY2M2QzZWYsIDB4MzZmNWQ1MjQsIDB4Mjg5NWFlY2IsIDB4M2Y3NTIxZWYsCi0JMHhmZGQ3ODdlYSwgMHhhZjllNjhlNCwgMHhkMDM3ZWNmMSwgMHg4MzllMGM3NywgMHgyNWRmZDIyNiwgMHgzMWIzNzM2ZCwKLQkweGIwZWFmODNlLCAweGFlZTExYjNiLCAweDA4NWJiYWMzLCAweDNhNzU5YzVmLCAweGM2NmU3OGNjLCAweDhjYzM5NzU5LAotCTB4ZjZjMmI2ZjUsIDB4MGZkYzQ2ZDMsIDB4MTgwZmE3NTMsIDB4OTAwNjFmMzEsIDB4NDU5NmUzYTcsIDB4N2M3M2I2Y2YsCi0JMHg4OTViNmZkZiwgMHhjNTdiZjExOSwgMHhmZmViNThmYSwgMHgzZGZkOGZhZiwgMHhhMGFjYjFmNSwgMHgyOTFlOTI3YywKLQkweDFiOWNlOTcwLCAweDM0ZWZkZGIxLCAweDEzZDEwZmNmLCAweDllYmM1ZGFiLCAweDVmN2ZiYWIyLCAweGFlNzVjMzkyLAotCTB4MjE5NTA5YmUsIDB4ZjM5NDM1ZjMsIDB4NmM2ZDg1ZmMsIDB4ZjVlODczN2YsIDB4MWUwNjE5MjUsIDB4NDIzOWUwNDcsCi0JMHg0MWZmZGUxMSwgMHg4ZTM1ZGQxZiwgMHhmNDFmZGQ1ZiwgMHg5ZDU3ZTA4OSwgMHhlZmEyNjQzZCwgMHgyYzc3ZGE0OSwKLQkweGM0MThlZWM4LCAweDFmMzQzZjA1LCAweDMyYmNiYWI3LCAweGY3Y2ZiZjFiLCAweGI5NjI4ZDFlLCAweGM5YTc1ZjNjLAotCTB4YmFiMGIxYzcsIDB4Yjk3OTZmNWMsIDB4YTczYWU1OTksIDB4NzUwYmY2OTksIDB4MGVkZGExNjUsIDB4N2QzMTlmY2YsCi0JMHhlYmI3MTY1NywgMHg5ZTdlNzRjZSwgMHgxNTlkMzc4MywgMHhiOWY1MWViMywgMHg3YmRmMzNkZiwgMHg4Y2ZjNjFmZCwKLQkweDBiZDkxZDcyLCAweDUwNTc0ZWI1LCAweDgxY2I2N2FlLCAweDE5OTYwYjNmLCAweDJiOWY1NDdjLCAweGZiYTA5ZmQ3LAotCTB4YjA2YzZlMjIsIDB4OWYyM2E0MTYsIDB4YjQ2ODNmMWYsIDB4M2MyZDVlNjIsIDB4N2YyOGU2M2YsIDB4M2MyZmE5YTEsCi0JMHgxYzkxYThlZiwgMHhkNTJiYWNiOCwgMHhlMDdkZDRmMSwgMHg0N2RiNWFiMywgMHgwODZkYmU2MywgMHgwNTFhNmU2YiwKLQkweGFmZTkwZmNmLCAweGU5ZmVlMmIzLCAweGJlM2NmNTllLCAweGY4NDBiYmZmLCAweDM2NzllMTM5LCAweDRiZjQzM2U0LAotCTB4NzFmMGYzYzIsIDB4ZTIwZjljZTksIDB4OWNmZGI5ZDIsIDB4MGEyZGI0ODAsIDB4MTczZWEzY2UsIDB4ZDJmMzNmY2UsCi0JMHhmMGJmNzViNSwgMHhmZGM1NTNmYiwgMHhkNTgyZjI4NiwgMHgxM2JlOTFmZCwgMHg0OWVkMGM3NCwgMHhhOWE5Nzk0MywKLQkweDM5N2NjODdmLCAweGRiN2Y3Y2U5LCAweDRjMWY1ODEzLCAweGYyMGZhZDBjLCAweDVkNzg2MDNhLCAweDg1NzNkNTUwLAotCTB4ODMxZDdmZWQsIDB4ZmEwNzVlZjgsIDB4Mjc5OGVkMWEsIDB4MGEwZmQ3OTUsIDB4OGZkOTI4ZGYsIDB4YTcwODIzN2EsCi0JMHg3YTk1M2ZkOCwgMHgwNGVjN2JmOSwgMHg3MGM1ZDdjNiwgMHhhNzc3OWNmZiwgMHg4MmI5Zjk0NCwgMHg4YWVlNWYwOSwKLQkweDgxNzMzZTgxLCAweDc2YmQ0M2RkLCAweDBiMmFmZmIwLCAweGZhMDlhM2VhLCAweGM3YWVmYzIyLCAweGQ3MmU5MmUzLAotCTB4MzQ5ZWIwOTksIDB4NzFlYWVkZjUsIDB4ZTE0MTlkZjgsIDB4MjMwZTQzMWQsIDB4MzBhOGVlNWQsIDB4ZDU0MGZlZDAsCi0JMHg3YjdkNGRlZSwgMHg3ZjdlMThmYSwgMHhiYzY4Y2FlMywgMHhjYzM5Mjc5ZiwgMHgyZjJmNWUwYSwgMHhiN2UzZWJjNSwKLQkweGNlOTMzMWY4LCAweGEwNzQyMjI2LCAweDRmMDcwM2NmLCAweGI2NmU1MWVhLCAweDE4MjVkYzk4LCAweDExNGUxNzNmLAotCTB4NmUwYWE2NzUsIDB4OWI2OGVmYTcsIDB4ZTdlNDYwNjIsIDB4ZWVlNmVkNjksIDB4MWYyOGFmY2MsIDB4NDg1NmRkZDQsCi0JMHhlZTNiMjNmNSwgMHhiNDE0MTg3ZiwgMHhjMTNiODUzNywgMHgzYjVlYzU4ZSwgMHhkZDJmMzYzYiwgMHgxMWJjZjg0YSwKLQkweDYzYzIxOGVjLCAweGY0ZWJjMjliLCAweDExY2ZmNGUxLCAweDJlY2RlZmY0LCAweGQxODdhNmY1LCAweDJiMzllMGZlLAotCTB4NmE1MjlmMjgsIDB4NjBhZTNiNGYsIDB4ZmEzODY3ZGUsIDB4YzIxZTEyZWIsIDB4MzVmZjJiZDIsIDB4ZDA5NmZkMGIsCi0JMHg0ZWI3M2Y4YiwgMHhmYmFmN2JmMCwgMHgzOWZmNWFhNywgMHhmNGU2YTY3NSwgMHg2Mzc1MWRmZiwgMHhlYjUyZmUzNSwKLQkweDc2YmM2YTRkLCAweGRhODFmMDQ2LCAweDNmZWQxNTllLCAweDFhMDM3ZGZjLCAweDM3ZGY4OGQ3LCAweGRmN2YyMmQ4LAotCTB4Y2U4NWJiMzAsIDB4NmZiZjUxMjksIDB4MjU2NDZiZDgsIDB4M2Y3MTEzNWIsIDB4YzlkZWY4YWQsIDB4YTRmYzg1MzcsCi0JMHhiZWZmNGZiZCwgMHhmODg5MTdmMSwgMHgyNzg0OTNiZCwgMHgzYzNkODA2YiwgMHgzZDVlNzY0YywgMHhlZGFlYWVhZiwKLQkweDZkNmY5ZTczLCAweDZiYzNmYmUxLCAweGZiOWYyMzViLCAweDc3ZGEwMzcyLCAweDI3MjhlZjc4LCAweDJiNTFiZDIzLAotCTB4ZDk4ZWRiZjYsIDB4OTc0NGVhMjYsIDB4ZWJmNzk2ZjMsIDB4MWU5NmYzNDMsIDB4ZWVhNDkwMjUsIDB4YmM1MWY1ZTMsCi0JMHhmNjYzY2RhNywgMHg1M2FjYjc5NiwgMHg5NmFmY2ZiZiwgMHhhZTFmNjgxYywgMHg1OWI3MGZiNCwgMHgzNWVkZDdlYywKLQkweGU2ZmNlOThmLCAweDc5ZTFiOTdkLCAweGI1ZDNmN2NjLCAweDY5OTM5Yzc1LCAweDc0ZmY1YTU2LCAweDM2ZTc0NGI3LAotCTB4MWFhZTc0OTksIDB4ODZmZmI3ZGEsIDB4Y2ZiNDhkNjQsIDB4ODc2MTBiZmIsIDB4YzgzYThiYzYsIDB4M2Y5YzhkY2YsCi0JMHg0NDkzN2U3ZSwgMHg3N2UwZGZkZiwgMHg5ZmY3NDg3OCwgMHhjM2JmYzFiZiwgMHhmZjAxNzlmOSwgMHg3YmFkNDcwZSwKLQkweDVjZDdkZmE4LCAweGQwN2JhYzFmLCAweDc3ZWE3N2Y3LCAweDM2NzdlYTM5LCAweDUzOWQ3N2VhLCAweGI5ZDM0N2Q2LAotCTB4NWExODhmYzUsIDB4ZWJkZmI5NTIsIDB4M2E3Y2JlMjUsIDB4ZThmZGQxOWQsIDB4NDkxZjU2MjgsIDB4OTdhNjhmNWUsCi0JMHg4NDVlOWQzYywgMHhkYzc5YWVlMywgMHg0MjNkMjk3YiwgMHhlMzBjM2JkYywgMHgyMThmNzg0OCwgMHgzYzg1ZTIwMywKLQkweDMwNWUyOTE2LCAweGUyNjkxNDY1LCAweGM3ODdlYTA1LCAweGVlYWFkNzBiLCAweGNmYzBhNGYxLCAweDZkZjc1YzM1LAotCTB4NmJjNmZjOTEsIDB4ZGZlYmZmMzgsIDB4NDVhZmZjZjEsIDB4NzMyYWRiYTIsIDB4MWYxN2YzZTQsIDB4YmU4NDkwY2MsCi0JMHhjZTE3OWVkNywgMHhjOTJmN2M3YSwgMHhhNDkzN2FlZCwgMHhkNTMzNzA3YywgMHg0ZjU0MGRkMywgMHg1MzZhZjU1NywKLQkweGJjN2Y5ZjJjLCAweDZkYTlhN2M4LCAweDBjOWI2ODk1LCAweDRiNjVmMzkxLCAweDY0NjdmZGM0LCAweDkzZTQzOGU3LAotCTB4ZjM2YTJmODEsIDB4YjQ1YjgzOTcsIDB4NWIxYmNiZjksIDB4MGM4OGU3YjUsIDB4MDljZjZiZjEsIDB4M2RhZmRjMjksCi0JMHhhMDI4YTYzZiwgMHhmODY2M2YzZCwgMHgzMWY5ZWQ1MSwgMHhlN2I0M2EyMywgMHg5OWZjZGNjNywgMHg1Yjk4ZmNmNiwKLQkweGNiZjliNGJhLCAweDFlZGMyZjViLCAweDhmYTcxZGY2LCAweDljMDk0NzlmLCAweDk5NWNmYTFiLCAweGI5ZDg1ZTY5LAotCTB4NzNiMGJhMzUsIDB4Y2VjM2EyNmIsIDB4MWYzYjA5YWQsIDB4ZTM5YmNjNDUsIDB4N2U3NjEzZWQsIDB4MzY3ZDc2OGQsCi0JMHhiYTBkYzdhYywgMHhlZmRjN2FmYSwgMHgxZWEyMjhmYSwgMHhjZjhjY2ZkNywgMHhkZmRlNTEzZCwgMHhmYTliN2U4YywKLQkweDA5N2ZmNTNkLCAweGUxOTEzYjNlLCAweDcxZjQ4MTVlLCAweDg3NWIxY2FmLCAweDIyYjFkNTdjLCAweDJlZjMwYjJhLAotCTB4NzI2OTk1ZWUsIDB4ZmI4M2YwMjIsIDB4YTdiZTg5NTEsIDB4NDY5OTVkMmYsIDB4MzVlNjdiZmIsIDB4YTkzZjIxMGMsCi0JMHg0ZmM5Mzk4MCwgMHgxMTY3NjU5YSwgMHg5Y2Q4NzljZiwgMHgzZGVjZjVjMSwgMHg4YzY2MDZmNSwgMHg0NjI5OTdjNywKLQkweDMzZDBhODFkLCAweGMzNWIxMjRkLCAweDIyNjU4ZGVkLCAweGUzMzU2MWYwLCAweGZhYmI1ODdjLCAweGJkZDUxYzcwLAotCTB4Yzg1OWRkODUsIDB4ZWJhYWMxNTEsIDB4MGU3OWQwMTcsIDB4YThiZGU3ZTEsIDB4YzYyM2M2NzYsIDB4NjMxNmIwZDUsCi0JMHg2OGJiY2MxYSwgMHg0N2M5M2I2ZCwgMHgxZTMwNzlmOCwgMHhlYTFjZjZiNiwgMHhiMDk2ZGFlMSwgMHg3ZGI3ZjVlYiwKLQkweDFmZjdmOGNhLCAweDNjOGJmNDQ2LCAweDJmZmJkYWFkLCAweDk5YmE4ODY0LCAweDdlNTAzOTgzLCAweDlhYzdmN2RjLAotCTB4MTUyY2NmZDAsIDB4NTZiYjk5ZjgsIDB4NzA5ZDYyYjIsIDB4ZDI3YjQzNWUsIDB4Yjc5ZmQwNWQsIDB4NGJiOGE2NWYsCi0JMHg3MWViMGZjNSwgMHgzYTIwY2Y0ZSwgMHhmZWZjZmQ1NywgMHhjZmEzZjI1YywgMHg4ZTBhNGEyYiwgMHhiOGYxYzc3MywKLQkweDg3YmJkMjQxLCAweDc2NTlmNWUzLCAweGU3M2M3MGY3LCAweDU4YzNlYmFjLCAweDlkODdmNmZjLCAweGRmOTMyMGI4LAotCTB4M2U1MGJlMDAsIDB4OTY1NjZmZjksIDB4OWRlZjlhMWYsIDB4NjMyNmIwNmIsIDB4ZWVjYmM1YmUsIDB4NTM3OGE1NGQsCi0JMHg3ZTJhYmZjNCwgMHg2Nzg4MjYzYywgMHhmMTBmYjBlMywgMHg3NDlmNWYyYSwgMHg5MWZhMjI0OSwgMHhmZjAyZWI2OSwKLQkweDdlMDNkZjA4LCAweDI2YjNjNTEwLCAweDdlODE1YTY2LCAweDM5YTU2OWQwLCAweGQ3NjA1ZDE5LCAweDJmZjIwNjQzLAotCTB4NDA5MmQ5ZWUsIDB4MGQzZGM1ZmUsIDB4MWYzYzQ2NjUsIDB4MDk2ZDllZTEsIDB4Nzk5NjlmYjQsIDB4YmUzMDQ3OWQsCi0JMHhhMjc5ZTk1NSwgMHgyYTVmNzBhMSwgMHg0YjRmN2JjYywgMHhkMmQ2NDM4ZSwgMHhkMTM3ZTRmMSwgMHgwOWQzNTE3MSwKLQkweDdiMjc3ZTk1LCAweDQ4YzlkZmExLCAweDY5YmEwM2Y0LCAweDQzMjFmZmFlLCAweDZlODIwOWY4LCAweDdkM2I0MWVjLAotCTB4NjRiMTU3ZTcsIDB4ZmZlNjJlNmYsIDB4ZTk5YmQ3Y2UsIDB4YzY3YTJiZjcsIDB4MzdhZTVlMDUsIDB4YzRkMjZmMmIsCi0JMHgyZTdkZTUzZiwgMHhiZTc0NzVjNywgMHgyMmRhZjc3NywgMHhkZDM4NWZhMiwgMHhkZTY3ZmZjYSwgMHg4YWZlZmM3MCwKLQkweGExOTYzZWZkLCAweDFmYWIzMWZmLCAweGM2M2I3MzliLCAweGI3OTcxMmM5LCAweDk2YzZhYjU5LCAweGE1ZjNiZmEzLAotCTB4OGI2ZmNmZDAsIDB4YzYzMGU5MzgsIDB4YmZkN2UwNDksIDB4ZjQxMjcxOGIsIDB4ZDI3MTEzZGYsIDB4NDEyNzE4MDcsCi0JMHg0OWM2MjFmYiwgMHhlNzE0OWVkMCwgMHgwNzcyYWEwNSwgMHhmYjdjNDA4YywgMHhhZmI3OTBiNSwgMHg2Mzc4ZDQzMywKLQkweGQ3ZTYyYTY5LCAweGRkZTdmZmNhLCAweDVmMTU5ZDIyLCAweGEzNDllM2Y1LCAweGVjOWIxOTMzLCAweGQzZDdmYWQ0LAotCTB4ZWJmZDY5YTcsIDB4NGM3NTgzMGUsIDB4ZDU4MWRhMmEsIDB4OGY3MDVlYmMsIDB4NzhjZDY2ZWIsIDB4OTg4YzU3YTYsCi0JMHg4NTc5NjBmNywgMHg4ZjY0ZWJjMSwgMHgzZGU2MjMxNCwgMHg2YmIwNGM2NiwgMHg5NGQ5ZGZjNiwgMHgzMmRiZTlhZSwKLQkweDk0Zjc1YTE1LCAweGViOWE3ZWYyLCAweGQ0MGM1Nzc3LCAweDAwNWVlN2Y0LCAweDVkZjkwY2M3LCAweDU5ZjkyNjI5LAotCTB4YzYyNmUyMmEsIDB4YWM1ZDM5OGEsIDB4ZjU5N2VjN2MsIDB4MDAxZTUzYzMsIDB4NjgzY2JmNzgsIDB4ZjRlMWZiYTAsCi0JMHhiOTVhZTk1MCwgMHhlZTdjYTY1ZSwgMHhmMzEyZjViYywgMHg5YjI3ODgwMiwgMHg3ZDdjOTFlNywgMHhjZTk2MzQ3ZSwKLQkweDUyZGM2OTkxLCAweGY0MzE1NmY4LCAweGQwMzE2YzRmLCAweDBkMTNiMmZlLCAweDdjZjE0N2Y2LCAweDkyNWIxM2ViLAotCTB4M2RiYmYwZTIsIDB4ZmNjY2EzNzcsIDB4YTRhZDc3YTQsIDB4Y2I3OWQ1NzcsIDB4ZWZkMDU2MWEsIDB4NDVmNWNjMjYsCi0JMHhjYzBmNTAzOSwgMHg1NjdkZTNkZCwgMHg0ZGRmYTNlZCwgMHg0ZTUwNjY1YiwgMHhiZjNlYzg4ZSwgMHgxMjczZjQ0NCwKLQkweDI5OWIzNzdlLCAweDgxOTlmZTRmLCAweDkyYTdmMTc5LCAweGI4NzA3NWU2LCAweDAzNTg5MzNlLCAweDhmOWI0ZmY2LAotCTB4ZTAwMDc4MGQsIDB4YjliMTMzMzgsIDB4OTU3ZTg3NGEsIDB4ZjQ4OTMwN2MsIDB4NDMzMjJiZTcsIDB4NjI1OGFkYmUsCi0JMHgxNzg3ZjNhMCwgMHhjNDZmMjdiZSwgMHhkMjBhOTMzZSwgMHhmYTY1YmQzOSwgMHgzOWI2MGY3ZCwgMHg1ZDY3ZTY4YSwKLQkweDZlMzAyMWMwLCAweDllYTIyZmU5LCAweDVlZjIyMzVmLCAweDYwZjVmZmQ0LCAweDlmYzExYWRmLCAweDI1OWY0N2M4LAotCTB4MDEwMjY3MzAsIDB4N2YwZmYzY2IsIDB4NzU0NDljM2EsIDB4N2QzZTIwOWYsIDB4ZmZlZWI4ZjksIDB4NjRjNmJiZDAsCi0JMHg1NGZlZmQwMiwgMHhmZDI3Y2JlNSwgMHhjOTEyNjBmNiwgMHg0ZmRlMzg1NSwgMHhmMmZlYjkxYSwgMHg0MTQ4MWNhMiwKLQkweDMzOTQxOWJkLCAweDNjZDVmZGZlLCAweDQxZDkyMzgzLCAweDFhNjg2YjdhLCAweDZiOTNhZGVhLCAweDY0Njc5NDBkLAotCTB4YWYxYzY3N2EsIDB4N2M0MmJkY2IsIDB4YTRlN2JlYWMsIDB4ZjA4MzE5NWUsIDB4YTFjYTZjOWQsIDB4NTllZjBjZWYsCi0JMHg0M2ZkOTMyYiwgMHg3ZGUzZTNmZSwgMHg5NzFmZmY5YywgMHg3YmJmMThkZCwgMHhjNjM3MjQ5YiwgMHg3MzdjZTFlZiwKLQkweGY0ZTE5MmRmLCAweDExYjMwNDdiLCAweGVhN2EyMzI3LCAweGJjNjliMzgxLCAweDE3ZjZhMTBlLCAweDA3YmZlNGVkLAotCTB4ZTg3Njg2YzAsIDB4NWQwZTBkYTcsIDB4OWY3ZjAzNDcsIDB4NGU3MzU4YmIsIDB4ZGZkZjRkNzksIDB4OWMyM2M3MWQsCi0JMHgxN2VmZWZjZSwgMHg5Y2U5ZGY4ZiwgMHg5ZjEzMjIzZSwgMHgzY2RiZWU5ZCwgMHhmOWU4MTUyYywgMHhiMGQ3NmU4NSwKLQkweGY5ZmZhMDA3LCAweDdhMjdlZjQ0LCAweGZiYjQ2ZmE0LCAweDYyZWJjNDNlLCAweGZjMmNkYWRkLCAweGVkYjNiYTZlLAotCTB4ODY2ZjQ3ZTMsIDB4YjJmNGZlZTcsIDB4YmU2MjQxYzEsIDB4YzdmNDg5MmMsIDB4YjMwYmNkYTIsIDB4MjFiYmU5YmYsCi0JMHg3ODdkZmNjNiwgMHgyNjk5ZDFkZSwgMHgyYjE3M2UwMSwgMHg5ZjMwNjMyZCwgMHg4NGI5OWYzMCwgMHg1MWY4ZTIzZCwKLQkweDg2YmNmMGI2LCAweDczY2YxZDc1LCAweGJiMTQ1YzdjLCAweDc5YjRlMzA2LCAweDhmOGM3OTYxLCAweDhkODNmN2M1LAotCTB4NmZjNjkyOTksIDB4ZjVjOTk4MzgsIDB4ZTcxZDNjZDcsIDB4MzhiNzg4NmYsIDB4YjFhNjMxYmYsIDB4NWVkZWFhMDMsCi0JMHgyMjBmYmY4YywgMHhhYTgwZWQwNywgMHgzMzU4NmJiNywgMHhiM2ZkNmI5ZCwgMHhmZjM0YmVjYywgMHhiZjQ3Yzk0MiwKLQkweDI3ODc1MjIzLCAweDJhZjhjMzU0LCAweDZiNjM4ZjJiLCAweDUxZjI4YzVlLCAweGU1ODBhYTljLCAweDhlMGZmMTBiLAotCTB4ZTc4MTNlYTEsIDB4N2U1ZjE5MTYsIDB4MDE3N2Q5MGEsIDB4ODY3NWYwMGIsIDB4YzE5M2ZiOGQsIDB4ZTljODE1NTcsCi0JMHhhY2FhN2Y2OSwgMHgzNDZjMWIxYiwgMHhmYjgxYzFiZiwgMHg3OTA4MTcxOSwgMHg3Yzk2NmRhZCwgMHgyNTA3NWU3ZSwKLQkweGNjNWYzYTNiLCAweGQxZDg1ZjMzLCAweGMzZDRmYjcwLCAweGEzZDk4NTJlLCAweDk3NzY2MWY5LCAweDJjZWQ2YjM1LAotCTB4NzllNzRiYzAsIDB4YzM4NmYwYWIsIDB4MjU4OThhZTksIDB4ZTY2YTJjM2MsIDB4ZGNhYjNlZmIsIDB4MDg5MzdkYmUsCi0JMHgxNDAxYzk2ZSwgMHgwMmNmMDFlZCwgMHg4MDk1MWFlNiwgMHhjNzkxNzhlYiwgMHg4NWYwZTFlOSwgMHhiYzA3YWJhZiwKLQkweDcwZTE5ZDYyLCAweGQxY2UzOTU3LCAweDViMzVlNWY3LCAweGY4NTdjMjI0LCAweDg0N2E1NDNhLCAweDVkMmE3MWZiLAotCTB4YmYxY2JjYWEsIDB4ZDExMjZkNTUsIDB4ZmY2NWQ0ZjMsIDB4NTBmZWQxOTAsIDB4MGI1ODZmOTUsIDB4NzllNDJmZmMsCi0JMHg1ZDYwOGY5NSwgMHgyZGJmNTA5MywgMHgzOGZhMDc1OCwgMHgyZDNmMjdhNywgMHhjODcxMmQ2MiwgMHhkZmNjNzUzNywKLQkweGQzZjcyNTg4LCAweDQ3M2I5NmZlLCAweDRlNzllMGU0LCAweGE5ZGNlOTg3LCAweDU3M2Y5YjBhLCAweGVjYTg4MDk3LAotCTB4OTZmY2I0N2MsIDB4ZTM4NzlmMjAsIDB4YmRmNDRhZmIsIDB4NTEzMWZjNWEsIDB4MDBlN2EwNjcsIDB4OTA1ZmYzNWYsCi0JMHg5MDlmZmJlOSwgMHhmNjNlMjI3MSwgMHg3YjU1N2M5MiwgMHgzZmFjNDZiZCwgMHhiOWY5ZWI1NywgMHhkMzgyNTc3MiwKLQkweGNiYmZlN2EzLCAweDA1Nzg0NTc0LCAweGRjMzVhZjNlLCAweDdmNWE1OWQxLCAweGU1NzdlODM5LCAweDViZDI0N2M2LAotCTB4MDk4ZjNhZWEsIDB4N2I0NTczM2QsIDB4YzVkYzc3YWYsIDB4NDkyN2RlYzgsIDB4NGRlOWFmOTgsIDB4M2IwOTU3N2YsCi0JMHgzZWVkMWYzZiwgMHg3ZmFjOWZiNCwgMHgzYzZiY2U5NSwgMHgzYTU1ZWViNSwgMHhmMmY4ZDU5ZiwgMHhmMGI3ZGE3YywKLQkweDhmNzlmYWM5LCAweDdjNGZlZmUyLCAweGQ5MWU2NWIyLCAweGFiNGYwNWY5LCAweDBjNmRkZTc2LCAweGQ2Y2ExZmY1LAotCTB4NWZlZTdkY2YsIDB4MzQ1ZjZmOTAsIDB4NmFiOTVkNTMsIDB4NDFjNDViOGYsIDB4OWM2MTU3YTAsIDB4NTFlYjllYjIsCi0JMHhkNWViOGViNiwgMHgwNzBmNjgwNSwgMHgwZWJjM2Q5MSwgMHhlNTVmZGRjNywgMHgzZmY5MGViZSwgMHhjOWQ5M2FlNCwKLQkweDdmYjllN2ZiLCAweGJkZTYxM2I1LCAweDg3MThhNWZmLCAweGY1NmM5Njk3LCAweGQ1YjRiY2YzLCAweGY2YjBmNjhmLAotCTB4ZDM4ZTBmZGUsIDB4MDdjOTRiZWYsIDB4NmE4MWZiZGYsIDB4MTM5ZTE5ZmYsIDB4NDJjZTJlZTUsIDB4YmY3NjEzMzksCi0JMHg2NTk4ZGU1NiwgMHhlYzIyM2I0NSwgMHhkZjFiM2ZjNCwgMHhjOWJlMjBmNywgMHhmZWY4ZTJiZiwgMHhmOWUzODlhOCwKLQkweGVmMWNiNWUzLCAweDUxZmE1YjhkLCAweDUzNTFmYWZjLCAweDNlYWJmMjNmLCAweGY4NGI5MmRhLCAweGY4MDM1Y2FlLAotCTB4ZDE1YWJmMjYsIDB4ODA0ZDU1ZmEsIDB4MTAxZjhjNmYsIDB4M2RkNzAwZGYsIDB4NmY4MTE0N2IsIDB4MTM3N2M3MDcsCi0JMHhjYjViMzNjNywgMHg3ODFlY2FkYiwgMHhlYmY5ZDJmNSwgMHg5NDdiZmZmNywgMHhjZjg0ZmQwMywgMHg5ZmYyN2VjYywKLQkweGQzMmFkYjNlLCAweGRmYWE2OTU5LCAweDdmM2RmYWE1LCAweGEyY2ZjZDY2LCAweDdiZTJhNjdmLCAweDNlNDA4MGUxLAotCTB4Yzc4YTk3ZWEsIDB4Nzg4NzE3N2YsIDB4Mjc5NWI4NWYsIDB4OWJlMDdhNGYsIDB4YmNlODUzMzksIDB4YmZlZmNiZmQsCi0JMHhjZTJkMjdlYywgMHhiZTkzZjUwYSwgMHg5OGVhNWQyNSwgMHhkNzJiZjY4YiwgMHhmOTY2MzllMSwgMHhkNWEyZmIyMSwKLQkweGRmMGIzZmRmLCAweDdjZjBhZDA3LCAweDk4NzMxNDY1LCAweDQ2NGYwODRjLCAweGI5YjhlZmY4LCAweGZlOGJlZTE5LAotCTB4ZWNkY2Y3MmEsIDB4YmI4ZTQ5N2IsIDB4MzFjN2JmMzQsIDB4NzgwZGY5ODksIDB4OTE2YjAxOWUsIDB4ZWQ0YmJmNjgsCi0JMHgyNTcxMjVkMiwgMHhhZDJkY2YwYywgMHg2NzM2MzgyNywgMHg2OWRmM2I3MSwgMHgzZjIyY2FlZSwgMHhjNzE0Njc2ZCwKLQkweDM1OWJhOGZiLCAweDA3YTRkMWYxLCAweDQyM2ZmMTFkLCAweDNmMjBlMDNmLCAweGQ3OTI3OGRmLCAweDQ5Y2VmOTQxLAotCTB4YWI1MjQzYzUsIDB4ZmYzYWU4NDIsIDB4YjhkNzNmMDIsIDB4OWNjNDgyZWEsIDB4YzA5ZGZjNzYsIDB4NjIyZmI0YjEsCi0JMHhkYTE0ZjM3ZSwgMHg2ZDA1NTAwNywgMHg1ZWY4ZTg1OSwgMHg5Y2RiY2ZiZSwgMHhjN2EyZjNjNSwgMHg3ODA1NGQ3MSwKLQkweDFkZjg5MzllLCAweDFhOWU3MTNjLCAweDM3MDE3MWQ1LCAweDNhMmVjZGM3LCAweDkyNzhlZjZmLCAweGM4Y2ZjMWM5LAotCTB4MDdkZmE3OGIsIDB4YzFlODViYjgsIDB4YjQ3ZDk2OTksIDB4ZjFlNjFjOGYsIDB4N2I5ZTFiMzIsIDB4MDUwMWFlZmYsCi0JMHhmMWQ0YzJhYywgMHg3M2M2ODYzMiwgMHhiZWZlM2Y1MiwgMHhmZjViODc0OSwgMHhkZjIyYWMxYiwgMHhiZDkyZWRiYiwKLQkweDNhNDEzYzI3LCAweGYzODFjZjZhLCAweDhmY2U0NzQ0LCAweGZkYzU5YWJjLCAweGE0ZTljOTI5LCAweGNjMTQ0NDNhLAotCTB4ZGZlZjBkMWQsIDB4ZWJmMGE1OWUsIDB4ZGIzYmZmNjIsIDB4ZWQ4Y2Y0MDAsIDB4N2E5YzllNzksIDB4MzlmOTc5OWQsCi0JMHhmMGE1MzViMiwgMHg2NzE4OWJlZiwgMHhiMjFiZDQyNCwgMHgzMWFmZDM0ZSwgMHg5ZTg3ZmJmMiwgMHg1ZDc5M2Q5ZCwKLQkweDMwZWY2MzA2LCAweGY0M2Y3YWMwLCAweGZmOGYxOTUzLCAweDcwZmJjNmU3LCAweDNjNjRkN2RmLCAweGFkODZjYTZmLAotCTB4NzZlYWY4OWUsIDB4NzhlYWYzM2QsIDB4N2FjMTY0ZGIsIDB4NmE2NzM4ODgsIDB4MWRkZmMwOTIsIDB4MGYxZmNjYzUsCi0JMHhhMDNmZWZiYywgMHgyZWYxNmYzZCwgMHgxZDdmY2ViZiwgMHg5ZTMyNzVlMCwgMHhlNzhmOTc2NywgMHgyYjA2MjlkNiwKLQkweDJlNTVjN2JjLCAweDUyYmM2MDE1LCAweGMxZGJmMmIzLCAweGMyZWNmMWRiLCAweDQyNDZlYmM5LCAweDcwZTNhNzVmLAotCTB4MjllNzgwZmUsIDB4MWVmZTYyNjYsIDB4Y2Y1YjMwZjAsIDB4OWMwNWM4ZjYsIDB4OGYxNzg4ZGUsIDB4MjA3ZGExNGQsCi0JMHhkYTI0NGI1ZCwgMHhlZGU2YTJhZiwgMHgwOTBmN2E1NSwgMHg4ZTg5ZWRlNiwgMHgzMDdjMDUzMywgMHgzZTFjNTM0ZiwKLQkweGFmNGM4YzZmLCAweGI4ZDRiMjJmLCAweGVkZTI4NWJhLCAweDE3M2U0MmM1LCAweDQ1Yjk3MmFiLCAweDZjOTY5NzJiLAotCTB4OGZmNDQ3NDEsIDB4NDUzMzZmMDEsIDB4ZjlhNGViMGIsIDB4ZDQ3YmM0NmIsIDB4ZDljZGQ3NzMsIDB4MzY3MzdlN2MsCi0JMHhmMmZmZTM4ZiwgMHg1OThmYmU3NywgMHhhYThlZjlmOCwgMHhmMTQ2ZDY3YywgMHg0ZmY3ZDVmOSwgMHhiNjU0NmQxNiwKLQkweGUxNTVlNjhkLCAweDdmZDdjZjA5LCAweGY5MTU2MWJhLCAweDY3N2ZkNTQ5LCAweGRmNDQzZWJlLCAweDMyNGM1ZDUwLAotCTB4ZWEyMjU1NzYsIDB4NDk5OWVmYTUsIDB4NWIxYTY2ZWUsIDB4M2QyZGViNzIsIDB4MTVlN2E5YzcsIDB4ODE4MGIwNTYsCi0JMHhiZTQ0MGZkNywgMHhkMWEzZDg0YywgMHhiZmNlODViMiwgMHhlZmY4OTBhYywgMHhjNDk2NzY3NCwgMHhlNzIwNzU3YSwKLQkweGJmN2NjY2M3LCAweDFmZjA3OWU3LCAweGMwMTUzZGYxLCAweGVmMzFmODE3LCAweDI3ZmJmOGFjLCAweDExNTgzZmExLAotCTB4N2I2M2Q0NjcsIDB4NzNjZmNjY2MsIDB4YjEwMmMzOWUsIDB4ZmQ0MTM5MzksIDB4ZDMyMjU4ZGIsIDB4ZmJjYzg3MzksCi0JMHhhZmFjNjRmNCwgMHgyMTNhYzJhZCwgMHhjY2U2M2ZlZiwgMHhlODk0YWNhMCwgMHhlYTM2ZjczZiwgMHg4MTE3NjlhNSwKLQkweDliZWZhODBmLCAweGE5Mzg4NGVjLCAweGNmYjhhZjczLCAweDlkZjNkMjM2LCAweGY2N2UwOTBmLCAweDI3ZmRlMjZlLAotCTB4Mjc5YmZiZDUsIDB4YWI5ZGYzZTMsIDB4ZTRiZmZiZDUsIDB4ZjNhODlmZmQsIDB4NjFlM2ZlOGIsIDB4ZGQ4NDU3ZjcsCi0JMHhkZmVmMTlmZiwgMHgyNzJmZGNmNCwgMHgyZDhmZDE3YiwgMHg3MTVkYWNlNSwgMHhjZmJmNDQ5MywgMHgxYmQ0MjNmMSwKLQkweDU2MmIwZmEwLCAweDE1Y2YwOWZhLCAweDJkYmM1ZGJhLCAweGQwZGQ3ZTY1LCAweGNhYWI4ZjJiLCAweGVkMDhmZDc2LAotCTB4MzI3YjFjOTUsIDB4OTJmNWVkMTYsIDB4NjdmNTI3MWMsIDB4Njc0N2JhNjYsIDB4OGE2OGJiNDMsIDB4YmFjMjM1ZTQsCi0JMHhkOTFmMTFkOSwgMHhlOGJkNDk4ZiwgMHhiZDA5MWZlNSwgMHhmOWYwYTU1YywgMHgzY2MzN2M1NCwgMHhmZThiYjI5MywKLQkweDljZmU3OWZlLCAweGJiOWU2M2RkLCAweDVkOWUwNmFlLCAweDY2OTE0ZjA4LCAweGMwZDVmNzFlLCAweDc2OGU1ZDczLAotCTB4ZGExZmQ1MWUsIDB4MjNmOWQ3ZDMsIDB4MmVkYzJiODQsIDB4MjNiMWZlMmUsIDB4ZWM1M2YzMWUsIDB4ZTI5ZGYxMmQsCi0JMHg0MmFjOTZjYSwgMHgyZmYxN2Y5OCwgMHhhMTU1NjQ3NywgMHg4MmZjMjVmZiwgMHg3NjhiYjQzYSwgMHhkYjgzMTczYywKLQkweDNmZGJjZmM1LCAweGI2ZTVmYmU0LCAweDYwYzcxYmI1LCAweDUwZGEwMDFkLCAweDBiZDM1OGJiLCAweGI1NmNkZTljLAotCTB4YWYzOGZmY2UsIDB4YjRmMmZlMWIsIDB4NThiOWU5MWUsIDB4ZDNjOWYyZDcsIDB4OTI2ZmU3NjgsIDB4NTk3NzdlMjIsCi0JMHhkZTNiOWUyZCwgMHgzNTI1ZWZjYiwgMHhlMDNmNzM2NiwgMHg4N2NlZmVhNSwgMHhiMjBiNmYxMCwgMHhiMjkxZTkxOSwKLQkweDc5Y2Y5MTU1LCAweGIxZTg1YjdlLCAweGU2ZmY2MTBhLCAweDI5MzU4YjBkLCAweDIzYTJlNzgwLCAweDBmYjg1NWVlLAotCTB4NGU0MzZhYWIsIDB4OTc4ZGU2MDEsIDB4OTYzZTk2NjcsIDB4ZDZmOThkZmQsIDB4NmQ2ZjllMmUsIDB4MGFkNmY5ZTMsCi0JMHgyODI5NjA1YiwgMHhmNjY2ZjY3MSwgMHgzMjk5OGY1YiwgMHhhOWZlMGZjMSwgMHhiMjIwNjcyYSwgMHg5NDc5NmNmMCwKLQkweDc5MzUzZmRhLCAweDBmOWU0OGQ0LCAweGNmY2JmZWMzLCAweGU1MGM3ZjFkLCAweDgzYzIzZjY2LCAweDgzZTFmNWY5LAotCTB4NzQzZjUxYTMsIDB4YWNlOGM0ZTQsIDB4MjVmZTQ3YTAsIDB4MDg5YmVlNjMsIDB4YjdlMWFjYzcsIDB4OTI5YTdlZDAsCi0JMHg3MzAxZDhhOCwgMHhmODllZmU3OSwgMHg1YzMyNWZlMiwgMHgzOGRkNzA5YiwgMHg2ZTI0ZjMxZSwgMHgyZWU5M2ZhMywKLQkweDRkZmI4NzU4LCAweGJhYjNmNjk5LCAweDkxZGM2M2YzLCAweDJlZmZmM2VhLCAweGI2NjZmMGYwLCAweDNhZmRkYTk1LAotCTB4MDgyMGIzODAsIDB4ZjA3ZWZhODcsIDB4NjAwNjk3ZjcsIDB4ZDMyYjkzYmUsIDB4NTBmN2UwODYsIDB4MGU0YTMyMjcsCi0JMHhkZjA1MTc2NCwgMHhiZGMzMjI3ZiwgMHhkZjUzZTExZCwgMHgwNmM3NTI3ZiwgMHg2ZGYxYzg2MCwgMHhkMDU1NzhlMSwKLQkweDBkZDIwMGY3LCAweGUwNDhkNzVhLCAweGVmYjg5MGI3LCAweDlhMzE1MWY2LCAweDc2MDliNGZlLCAweGUzY2QwY2U2LAotCTB4ZjRkNzRiNGUsIDB4ZDNmNDU3YTcsIDB4NzJiYmJmOGMsIDB4YzRmZWU2YTAsIDB4ZmFkMGMwYTgsIDB4NzdiN2JmMTAsCi0JMHhmN2NiYzk3ZiwgMHg0NmM2YzRlZiwgMHgzZmJkZmVlMywgMHg3ZGY5ZmRiNiwgMHhjZWU5ZmRmYywgMHhmYTA3NjQxNywKLQkweDZlNzcwYmI2LCAweDE2OGYxZjdhLCAweGI1ZjQwZjNlLCAweGExNTI3ZTUzLCAweGY2OWZkYTdjLCAweDgzOWY4Y2NiLAotCTB4ZDY4N2Q0ZTEsIDB4YzBiMGNlOTEsIDB4NjBhNTIzNTMsIDB4ZWI2ZGZiN2MsIDB4N2JhZDhiNDcsIDB4YWUwNTc3ZTgsCi0JMHhmM2U4ZGQ1NSwgMHgyODdmNTE2YywgMHgxZjY4MDU2MCwgMHg0N2JmZDdjZiwgMHgwYjNhYmQ3OSwgMHgxZDk5ZTc1ZiwKLQkweDNjNWI5Y2ZjLCAweGYwMTJmYWU3LCAweDIwZjg2ZGZkLCAweDQwMTc4YmZhLCAweDk3ZmM4M2YxLCAweDdhYTA5ZWI1LAotCTB4YWU2YzlhZGIsIDB4OTYzMmViYWYsIDB4ZjY0ZmQxZTgsIDB4NjVmNjhiNDAsIDB4NzhhZGU4MGMsIDB4M2I0MDliZTAsCi0JMHhmNzBkYmMxYiwgMHg3MmM0ZTViZCwgMHg1NGMyZmRmZiwgMHg4ZmVmOWJjYSwgMHhmZDlmZjllNiwgMHhmYmY0MDljOSwKLQkweGM2OWI4YmM3LCAweDBiYmFmNWQyLCAweGRiZmYzNDMxLCAweGI1ZjY4MDcyLCAweGE4OTM1Zjc5LCAweDdkMzEzMTRlLAotCTB4Y2Y1YzRhZDYsIDB4ZGY0NDAxZmYsIDB4ODAwMDZkYTAsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg3ZGNkZmYwMCwgMHhkNTU0NzgwYiwgMHgzOTllZjBiNSwgMHg2NzA5MWU2NywgMHg5OTIxMjcyNiwgMHhlNGMyMTAyNCwKLQkweDRlMDEwMjQ5LCAweGFhZjA4MDQyLCAweDllMTgwOTAzLCAweDY4MzEwMDRlLCAweDBjZmRlMWQwLCAweGFmNGE4ODA5LAotCTB4MDQ4MTliZjQsIDB4YTg2YzE4MDgsIDB4M2JkMTUwMTQsIDB4NmFkNDgwYTQsIDB4YTZhM2VhNmYsIDB4ZDAwNGM3ZDYsCi0JMHhhMGQyOTQxYiwgMHhkZWY2YjdmZSwgMHgyMmMwMWI1YiwgMHhkYTA0NmEyOCwgMHhmYWQyZGU5ZiwgMHgzZWY2YjVhZiwKLQkweDgyNDk5Y2M5LCAweGJmN2I3YjcyLCAweGRiZTNlZjlmLCAweGIzZWY2NzU5LCAweGQ3YmRlYjFmLCAweDZiNGNmYjVlLAotCTB4N2VlZjIwNzQsIDB4ZmY5OWIxODUsIDB4MWIyOTdiNzIsIDB4OTdkYWQ4YzYsIDB4MWU2MDllNGMsIDB4ODU3YmQyYzAsCi0JMHhkMzVjYTBlYiwgMHhiZWIxOTUzMCwgMHg1MzU2YjMwOCwgMHhkNzMxNjMxYywgMHgwNDZjNjFlZiwgMHgyYzAxOGNjMSwKLQkweDY0ZWM3MjhkLCAweDQzNWE1MDMxLCAweGMzYzY0ZmQ5LCAweDNiNDNhYjMzLCAweGVhYWM2NmVjLCAweDM3YmQxNDdhLAotCTB4MzAxMWQ4YmQsIDB4ZGJiYzdkNDMsIDB4YzY0OGQ4YzQsIDB4ZTk1M2VkMmMsIDB4Y2JkN2M5ZmQsIDB4ZmM2YmZlYTgsCi0JMHhmZDYzMWI3NywgMHhhZjU0ZTlkYywgMHg0Mzg0OTZjMywgMHhkYjA1MjJmMiwgMHhiNGZkYTg5YiwgMHhhY2E4NDNlYiwKLQkweGNhODczZWJjLCAweDE0N2U3Mjc3LCAweDg0ZmFjM2VmLCAweDE3ZmE1MzZiLCAweDUyNmYxYzAyLCAweDY0YWM0YTcxLAotCTB4NjI4ZDk5OWMsIDB4YTMzYjdlZWMsIDB4NDdhYjU3N2YsIDB4YWJhNTMwYzcsIDB4NzJkMmM4ZGYsIDB4ZTgxZTYyNWQsCi0JMHg0NGRkNzZjZiwgMHg4Zjc0YzBlNSwgMHg2YzYwNGVlNiwgMHhkOTc2YTZkNiwgMHhlYzUxZWI4ZSwgMHg4MDM0ZTFlYSwKLQkweGNiZGRmMjhiLCAweDkzZGViYWYyLCAweGJhYjdjZDhlLCAweDdiZmJjMjg3LCAweGQwM2Q1OGNlLCAweGUyY2EwZGJmLAotCTB4YzY0YWZhYjAsIDB4ZGQ3OTRkM2MsIDB4MzZlNTFiYzcsIDB4ZGIxOTNhZDMsIDB4NmMyY2U1NGMsIDB4Y2JiM2VmMDcsCi0JMHhlZjM4NjVkZiwgMHg2ZjNlNTU3YiwgMHg5MTI2MTFiNiwgMHhiNjA2NThjYywgMHhiZjdhZTg0ZiwgMHg2MGMxZDAwZCwKLQkweDZkOTc4MTVlLCAweDc3ZjBjM2MxLCAweGQ0YWZiYTUxLCAweDRkYjRmZDBkLCAweDYwMmZlNTY0LCAweDZhNWI3MjNmLAotCTB4MzcxZmUzOTksIDB4MzhiNzk5ZmYsIDB4ZmU2MjcxZmYsIDB4NDZkODk2YmYsIDB4YjdkN2VmZWMsIDB4ODFlNmQ2ZGQsCi0JMHgzYzNjYjU3OSwgMHhlZWU0ODQ2MiwgMHhiNzVlZjdlYSwgMHg3NmFiZjc5NSwgMHhjZjQwNjBkYywgMHhiOGZhMzdhYSwKLQkweDY2ZmFjMjc3LCAweGRjMjA4ZjAyLCAweGQ4MmRiYWYxLCAweDk5Y2Y0Njk4LCAweDViNGIxZTI5LCAweGFiZWEwOWEzLAotCTB4NWVkOTFkOWMsIDB4Y2RmOGJmMTgsIDB4NmZmMjEwYTgsIDB4MzI1MTliY2IsIDB4OWY3ZTcxODMsIDB4ZTkxN2JiZTksCi0JMHhhMGU2ZmM1OCwgMHgyNjEzOTMxMiwgMHg0NjRkOWFmOSwgMHhkMDM2NTgzZSwgMHhlZjNlMWY3MywgMHhmMWJkYmU2ZCwKLQkweGQ2OWM2MDA5LCAweDUzNWZjOTExLCAweDE4ODE0Y2NhLCAweDFkNWY2ZmUwLCAweDgyODU5Mzk3LCAweGVmNWQxNzNmLAotCTB4Yzg0ZmIwNDMsIDB4YzRlYWQ1Y2YsIDB4YWJiNzQ4MjksIDB4YjBkMjYwOWIsIDB4NGM5YjQ1OGUsIDB4NzU4MjVmNDMsCi0JMHhjYjQzYjczMSwgMHhlY2NjM2MwMiwgMHg3MzBiNjBiZiwgMHg2OTk5NWNhMiwgMHhjNDg3MzNiZCwgMHhlOWEwNmIwNiwKLQkweDA2YjFlYjlhLCAweDllYmNhYmY5LCAweGJkYWZmZDQ2LCAweGViOWU5N2RlLCAweGM4NDhiNjcyLCAweDE5ZjkwZDg3LAotCTB4OWY4MjI1ZTAsIDB4MTk3ZTQ1ZWYsIDB4MWI4NzI1ZDMsIDB4ZTI4ZjdkZDMsIDB4ODBkNjY3ZmEsIDB4YmU3OGMzYmMsCi0JMHgyODg1YzkyZCwgMHg2MmZjNWQ0NywgMHg4MGFmOTE1NSwgMHg4NTk2OTI1ZiwgMHhjYjRkNGRjOSwgMHhmNDJhOTg3YywKLQkweDdlMjVlZjFmLCAweDcxNjUwMjU5LCAweGMxNTJmZDU4LCAweDdiNzg5MTA3LCAweDY1ZjkxNmVjLCAweDQ4YmY2OGIzLAotCTB4MDE5OTY1MDksIDB4MjhlYTk2MGYsIDB4ZTdjYzBiNmQsIDB4MGE3YmJjNGEsIDB4MGVmZDY1ZTIsIDB4MTZmNWJmOGUsCi0JMHhlNjAzYjE2ZiwgMHg5MzcxZmViYiwgMHg4YjYxOTQwNiwgMHhhOGVjMzk0NywgMHg1ODdkNDY4NywgMHhmMTg1ZjU2ZCwKLQkweGMzZWJmY2VkLCAweDMwZjAxYjk4LCAweDk1MjY3YWU3LCAweDgzYmUwMWZlLCAweGQ3ODVmZWI4LCAweDBkM2EwOWU3LAotCTB4OGJiOTkyYTMsIDB4ZDhjNWNjY2MsIDB4MWJhYmE0MDYsIDB4ZTljNDU0MjcsIDB4YWQ3N2U2MmMsIDB4NDNlMjc0N2EsCi0JMHg1M2I1ZmUzMCwgMHg4OGJmYWExNiwgMHhhOTgwMmQ3OCwgMHhlMzRmMDI3YSwgMHg5YjQxMmNiYywgMHg3NWU2MTA3NiwKLQkweDJhMDJjMmQxLCAweDdlZjE2OWQwLCAweGRmYTAwNTg5LCAweDQ2ZmE1MDI1LCAweGQ4M2Q1MmQwLCAweDE0ODFmNmNlLAotCTB4YjE3NmMxNmMsIDB4ODA1YjEzY2MsIDB4ZTZmNTg0ZjgsIDB4ODZiZTMxZjAsIDB4NmQ0Yzk3ZmYsIDB4ZmQ0MTBmZDksCi0JMHg5NjFiMzNlNywgMHg4MWUwMzM5OSwgMHg4NjQxMmE3NCwgMHg4MmZlN2U3NSwgMHhiZTc4MjRjNCwgMHgyZTViZGQ3MiwKLQkweDk0YWIxZTU4LCAweDUwYWFhNjBlLCAweGNjMTRjMWJmLCAweDdiZTI4MGI2LCAweDg2YmRmNjQ2LCAweGJiZDNlMDdhLAotCTB4MDhhZGZlOWIsIDB4ZjBkYzdkZGEsIDB4YWFlOTEzYTIsIDB4MGU0OWI1ZTMsIDB4NGQzZjYxNjUsIDB4Y2MwMGNmODAsCi0JMHgyYTVlYTliZCwgMHg2YzM0MmEwZCwgMHg1ZGExYjI5ZiwgMHg3M2YzYWRmYywgMHhiYWFmOWYyNCwgMHhiYTc4NDE5ZSwKLQkweGZhMWI2ZDVhLCAweGYwMzFmMjEyLCAweGY1ZDczZTJkLCAweGFlM2FlYWYxLCAweGJlZmQ3NWQ3LCAweGNlYmZmMDU2LAotCTB4ZDczMjk1ZDcsIDB4NGM0YTk1NWIsIDB4NmUxNjkwMzAsIDB4MTNiY2NhNmYsIDB4NGM3MmVmOTEsIDB4YjcwYjE2NWEsCi0JMHg4ZThmOGQzNywgMHgzMmY4Mzk0NSwgMHg1ZDYxYWI1ZSwgMHg4Mzk3NDJmNiwgMHg4MDQ5ZmM1NywgMHhhNDdiMmViYywKLQkweGM3YWU4MWNiLCAweGYzYWViZDc1LCAweDI2YWY2ZWJkLCAweDJmMmZlNGZkLCAweDc5ZmMzYmZlLCAweDgxZDdjZDMyLAotCTB4ZTY0ZDMwN2MsIDB4ZWM5YTZiNzYsIDB4MWM5YTNlMjAsIDB4ZmYyMzI2NWYsIDB4NzlmZDdiN2MsIDB4YjNjZmU4NTYsCi0JMHhiNmI5ZmQwNiwgMHhjN2Y5ZmQxNywgMHhmMzg3OTQ1YiwgMHhkYTk2N2Y0MiwgMHgzY2RlN2RkOCwgMHgzYjY3ZGZhZSwKLQkweDRhMmJmYWJhLCAweDgzNGI2NDlmLCAweDEzMzQ5NDdlLCAweGNkNDdmYmI1LCAweGYzZTM0OTViLCAweGZlZjNiNmY4LAotCTB4NmZjZWIxMmYsIDB4ZDMwM2ZiZDIsIDB4YTQ2ZmQ0YWMsIDB4MWZkMDY3OWUsIDB4NWYyZmY5ZWEsIDB4MWRhMjBkY2YsCi0JMHg1ZDgxODhmOCwgMHg1YWY3YmI0MCwgMHg2MTYxZjcxZiwgMHg0NDRlYzgwNywgMHg2NjZmMDRjNywgMHhiOTkyN2UwNywKLQkweGE3ZTIyMDc4LCAweDRlZTAzYjA3LCAweDgwZWMzYmZiLCAweGJjYmE1N2NlLCAweGNiYTFmMmU4LCAweGU4ZmNhNDQzLAotCTB4MTFmZDMwZjIsIDB4YTQyMWU2MmQsIDB4MzBlNjIwMGYsIDB4NzgxYzhmY2EsIDB4ZTk1MWQ3MGUsIDB4NzI4ZjkzZWUsCi0JMHhmODExY2JhOSwgMHhkZDY3MjQ2MSwgMHg5YjkwODNlYywgMHhkYTMxMzkyZSwgMHg3NDJlNWQwYiwgMHhhNmU1ZDEzOSwKLQkweDUyYzVjODUyLCAweDNjYmExNzIxLCAweDFlOWE5NzFjLCAweDNkZWYwYjFiLCAweDQzMmJlNjk3LCAweGIxZjJlODdjLAotCTB4YmI0ODg1ZTYsIDB4MzEzZjJiZDAsIDB4ZjFhNWE3ZTQsIDB4YTlmOTBjZDUsIDB4N2U3MGNhMTIsIDB4NGZjMmY1YjIsCi0JMHg5ZjkxNmVmMywgMHg5ZGJlZDI0YSwgMHg4ZDMyYjExZiwgMHg0MGZmMTFmYiwgMHhkNjk5NWE3ZSwgMHgwYWIxNWZiMywKLQkweGNhN2ZlY2Y5LCAweGZkNWFiOGFmLCAweGNjMzc0MjliLCAweGU4MjE2YWU3LCAweDdlMmViNGQ5LCAweGUzMmVmZTliLAotCTB4ZjgwNjQzN2UsIDB4NDZiNDUwZDksIDB4NWFiNjc1ZjMsIDB4YjA2YjA0MDcsIDB4MWFhY2Q3ZGQsIDB4MDFmYmE4ZjEsCi0JMHg3ZGVlOTE0YiwgMHgyN2Y0ZjhiYiwgMHhmZTcxZmY2MCwgMHhjMTViZmQzYSwgMHhlZGY3NWZmZiwgMHhkOWQxMWRmNCwKLQkweGY1NjZkZjE2LCAweGRiYmQyMWU0LCAweDM3YmZmNjBjLCAweDViYjFmMTdmLCAweDZmZTZmM2E0LCAweDQyNDNlNzQ5LAotCTB4ZmEwZmZjNmYsIDB4ZDE3YTg3OGIsIDB4MWVmZjg3MTMsIDB4ODYyY2NlYmEsIDB4ZmMyMWZiM2YsIDB4M2M2N2FmN2IsCi0JMHgwMmZiZTdkMCwgMHhhMmYzOWMwZSwgMHhkMjJiY2NiYywgMHgzYzFiZGJlYiwgMHhlMDFmYTg5OSwgMHg4MjM0YjFjZiwKLQkweDBmMDlkOTg3LCAweDU2ZGIzZTAyLCAweGZlOWNmMzAyLCAweDAwN2Q2NzU4LCAweDhmOGYyN2ViLCAweDhmMzNlZjExLAotCTB4M2ZiNTc1ODksIDB4NWI1MWY2OTEsIDB4ZDYwYmRhM2QsIDB4YWY4ZGVkYzAsIDB4MGQwZWY2NWQsIDB4NzYwMTBiODMsCi0JMHgxMTQ1YzE4NCwgMHhkZWRlMDFmMCwgMHg5NTMzYjcyOSwgMHg5NzIwODRmYywgMHg1NGRmZTgyYiwgMHhmZDE1ZjM0MCwKLQkweDllNjVmZTA5LCAweGNmMDE1NzEzLCAweGRiMTM1NGIzLCAweDhhYWE3NDA5LCAweDU1ZDZmODNmLCAweDI2Y2Q2YmQ0LAotCTB4ZTE4NzcyNjYsIDB4ZWJjOTcwMjEsIDB4ZjZmZDAxNDksIDB4OWZjMDQ5OWEsIDB4MzdjMDc5YjcsIDB4MGUyNWZiYjgsCi0JMHhhYmYwNzY3ZiwgMHhmYTJjODA4NiwgMHg4ZDZjN2YwNSwgMHhjOWE1Yjc0MCwgMHhiZmEwOTFlNCwgMHg2MGE2NDUzNSwKLQkweDdjNzc1YTdhLCAweDY3YzlkNjdmLCAweDU0YzA3Y2ZhLCAweGQ2NjdkZjFhLCAweDFmN2I1YmY4LCAweGE3ZWY0ZGU5LAotCTB4ZGIyMWZiZDMsIDB4ZDc3ZjhjMmQsIDB4ZjYwOWU2NzgsIDB4ZDI5YjBmZTAsIDB4MjkyYzVkYjksIDB4M2ViMWU5OGMsCi0JMHhmOGUyNWQyYSwgMHgzZWIwMDFiZiwgMHhkMzlhM2MzZSwgMHg5MWU1ZjdjNCwgMHhmOWQzNjNlZCwgMHhiMzY2NmRiOCwKLQkweDM3NjNhN2MwLCAweDU1OWI1OWYyLCAweDFiYjJiN2M3LCAweGIxOTkzZGYxLCAweGJlNDEzZTRlLCAweDRlMDlmMTgxLAotCTB4ZWFjYTU0NjksIDB4NGY1Y2JlNjQsIDB4YjY2ZWJlMDQsIDB4NzRkMzJmZGUsIDB4NWYwYmE2M2YsIDB4ZDk3YTA4ODEsCi0JMHhhYmVmODI2ZSwgMHg2ZGRiZTAzZCwgMHgzMzc0M2Y3YywgMHhkYmI5ZmQ3YSwgMHg1NzZmODJmYiwgMHgzMWVjN2NlOCwKLQkweGVjOGM3YmYwLCAweDg5OGNmZTI1LCAweGUwMDFhOTM3LCAweGE4ZGViNWM3LCAweDc0MmZkYzdhLCAweDE5NTI2N2M5LAotCTB4ODhjYTJkZTEsIDB4NGJmOTJlYTcsIDB4Yzg1MTJiMmUsIDB4ZmRmNTEyM2YsIDB4N2FmY2EzNzcsIDB4YjllZDlkY2QsCi0JMHgwZDdjZWEzYywgMHg1ZTAwZTdlZiwgMHhmN2M2OTVkMSwgMHhkYmY3YTU0NywgMHhiZTIzYzgxZCwgMHhlNTgyN2FhMCwKLQkweGNhNDc3OWIwLCAweDNjMDQ1MzYzLCAweDg1N2U0MjNlLCAweDQwZmU5MWZjLCAweGNhNzgwMDdiLCAweDdmMTZmZDQyLAotCTB4ZTMwZWVhZDYsIDB4N2YwNTNiOTMsIDB4ZTU2MjZlN2MsIDB4MjZkYjRmYTgsIDB4MmRiMjNmNzEsIDB4YTQwZjk3OWQsCi0JMHgwMmNjYjhmMywgMHg3NTRiOTdjMSwgMHhjMzBlOGE3ZSwgMHg0MjdmOTE4MywgMHg1YjA5NWZiOCwgMHg3ZTY5ZTEzNywKLQkweDYzY2YyZWJjLCAweGJhYzA2NmNiLCAweDdkNzhlMmRhLCAweGRkYThlMzU1LCAweDM4MmU5NDgxLCAweDhkNzViZmIyLAotCTB4MmYxMGNiNjMsIDB4OGEwN2ZkOWQsIDB4OTk3ZGEwY2UsIDB4NDBmNmYwMmYsIDB4ODEzMzk4ZTMsIDB4MTc2NzQxM2MsCi0JMHg3ZmRhMTlkOSwgMHg1MDA0N2YwMSwgMHg3ZjIyNTQxZiwgMHhjN2YzYmE5OCwgMHhmYzZlZjQ4NCwgMHhkZjc4ODgxOSwKLQkweGZiYzliOTYzLCAweGY3ZGZkZGM1LCAweDJjY2ZiYzQ0LCAweGJlZjJiN2YxLCAweDA4OGNkYmEwLCAweGQwNDY5NmJhLAotCTB4YWUwMjI0YjUsIDB4NDFhMGUxZDAsIDB4Nzk3YWVhZmYsIDB4YWRlZWYzNTEsIDB4ZWFjNzk4MmUsIDB4NTk2N2EwYTMsCi0JMHgyZDRmM2YzOCwgMHhhZDVmYjk0MywgMHhlZDNiZmNlYSwgMHgxNzZiZjIwYywgMHgzYzI3NGYzZiwgMHhmOWQyNmVjZiwKLQkweGQ0NmVjNjc1LCAweDg3YTg2NWMzLCAweDczYzE3NmM3LCAweDNjMTEwZjUwLCAweDEzMTNjY2IzLCAweGVkNjZhZjZlLAotCTB4NTc3NTdiNDYsIDB4MGVmZWRlOWQsIDB4YWQ3NzdmNmEsIDB4ZWE5NzlmZGUsIDB4Y2Y0MjNhNzUsIDB4NDJkNzQ0NjUsCi0JMHgzZWNkNWVkZCwgMHg1ZWFiZjU4MywgMHg0ZDFmZWZlMywgMHg5MDI2NzM5ZiwgMHg2ODc5MTM3OSwgMHg4MWNiYzA4OCwKLQkweGQxMTAzODA4LCAweGQ4MzdjZjdlLCAweGY3ODhkYWI3LCAweGQ3ZDQ0NTM3LCAweDIzZmJjMDQ3LCAweGZiZTMzYWUwLAotCTB4NDg5ODk3MGIsIDB4M2YwMjE3MGUsIDB4ZTUyMjIxMjAsIDB4OWEzZjkyMzIsIDB4OWNmZDNiZDMsIDB4NTI2ZTdiNGUsCi0JMHhjODMzYmZjOCwgMHgwZTFhZjRkNSwgMHg5NWY3NGIxZiwgMHg3MDYxMjlkNSwgMHgyZTMyYzJlMywgMHhmMDFhMzAxNywKLQkweDdmZjE4NWE1LCAweDEyMDM3M2EwLCAweDE3YTU4M2YwLCAweDFiZDRkOWJkLCAweGRhNDRlNjVmLCAweDdiZmY1ZTdiLAotCTB4ZmQxOTMzZmMsIDB4NGJmMDY2NjUsIDB4Yjg0NjRiOGUsIDB4MGVmMzEyNDUsIDB4OTBkOTlkNTQsIDB4Nzg3NTBmODcsCi0JMHhhN2VlMTk2ZCwgMHhhZTMzZWZhNywgMHhhMmIzZjYwYiwgMHg0OTU5NGQ3ZSwgMHhkNmM0NWZiOCwgMHhkNmMyNzk5NCwKLQkweGYyOWZiN2E5LCAweDFjMjVhZmQ3LCAweGQ1YzZjM2VmLCAweGJlYTA4NzY1LCAweGFiMjg1MjYyLCAweDVlMzhjYjFhLAotCTB4ZDA5NGJkODIsIDB4Zjg4OTU3NWUsIDB4MjVkNzk0Y2QsIDB4OGFjYmRhMmYsIDB4ZmFkNjUwZTgsIDB4MzU4ODNmNzAsCi0JMHg1YjNhZTM2NSwgMHgzZTg4OTYxZSwgMHgwZmEwMWE4MSwgMHg3MzIxNjllMCwgMHgyZWNlZDE1YiwgMHg4MzJiMWU2NiwKLQkweDRjNGI1Y2FkLCAweGYwMjNjNmNjLCAweGE1ODdmMWRlLCAweDNmYTc2ODhkLCAweDg1ZDdkOGRhLCAweDE5ZDFhMWZiLAotCTB4M2M3MTdmN2MsIDB4Mjk2YmEwNjYsIDB4ZWU3ZDJkYzAsIDB4YjJkYjdkMjMsIDB4Yzc5NTMyN2QsIDB4MGViNmNmMjQsCi0JMHhkYmZmYjE5NSwgMHg5Mjk5NzBmOCwgMHg4NDMxZjU4YiwgMHgwZmU5YWJhNywgMHhmOTA2NmQ5NSwgMHg5YmJhNTNmOCwKLQkweDUzOGJlYWYwLCAweDZmZThjZDVkLCAweDhjMzBiNGVmLCAweDUxYTYzMzk3LCAweDJlZTE2OTFjLCAweDljNGVmZTViLAotCTB4MmUyMWU2Y2YsIDB4ZmQxNzNmZjQsIDB4MzI0YTZjYjAsIDB4ZDViNDViYjQsIDB4ZDUxZmExYTIsIDB4NzE1MzU2NmUsCi0JMHg5MzlkYmU3ZSwgMHhhNGJmNThhZCwgMHhkYjgxOTQ1NiwgMHg2ZmYzN2NhOSwgMHg0MjcxYWEzZiwgMHg0Y2E3OGVmYiwKLQkweDlmYjQyMzVhLCAweGRkZTlhZDcwLCAweGFmMmYwMDYxLCAweDQ0OTBkMGNiLCAweDMzMzc1YzZmLCAweGI3MzljNjE1LAotCTB4MDI1MDUwN2YsIDB4NTUxZjNjYmUsIDB4ZGUyY2Y2ZmQsIDB4ZTVmYjYxOWUsIDB4NjdhN2RjMzcsIDB4NDk3YjYyMTUsCi0JMHgyZmVkMDJkZCwgMHg5ZmY0NzNjMCwgMHgxYTkwZWMyZiwgMHhhNzJmMzg0ZCwgMHg0YjA0ZGEyMywgMHg0NjU3ZjBiYSwKLQkweDViMGI5Y2YxLCAweGNmOGM0MTZkLCAweGY3N2M1MzlkLCAweGY2NzFjN2VlLCAweDY3ZDNkMDViLCAweGE3NmU0YzE3LAotCTB4OWYxMGYwMDksIDB4MjkyY2IzYjEsIDB4MDRkYjlmMTksIDB4MmVjNjc3M2QsIDB4Njg1ZjM5MDQsIDB4YjIxZmU0ZWUsCi0JMHgzOTYyY2IyNywgMHgxZGEzZmYxYywgMHgxZDYxODc2NSwgMHg0NDFmMWUxNywgMHgxOTVkYWJmMSwgMHhjMDBjODQ5ZSwKLQkweDFlOTkxZGY3LCAweGEzZTc5NjE3LCAweGYzN2FkZGI4LCAweGU4N2RkMjZmLCAweGYyZjJmZmM3LCAweDk3ZjIxNzIyLAotCTB4ZDNjYjgzM2IsIDB4YjkxN2Q3MWIsIDB4NTVmOTg1MTYsIDB4ODk5NzNlY2IsIDB4YmFiNGRlMGYsIDB4ZGY3Y2UwMzcsCi0JMHhjMjYwMWU4YywgMHg0MWYwMzY3ZCwgMHgyZjkzOGM1ZiwgMHhlMDE2ZmIxMSwgMHhmNjJmOGRlNywgMHg5N2ZkNWZlMCwKLQkweDFlNWFjN2YwLCAweDM2ZWYxODQ5LCAweGQyN2VmNWYwLCAweDAwZGZiNDlmLCAweDg3ZTMzZjM4LCAweGM3YzAwM2JiLAotCTB4YjIzNmRiMWYsIDB4OWI4YzI4ZjMsIDB4NzVkYzUyZmEsIDB4ZTA3YTEzMDksIDB4ZWUyMGE4YjksIDB4NTM1MjU4YWIsCi0JMHhhNmZjNzg3NiwgMHhmYjQ1MGU1MywgMHg4NDFjMDVkZiwgMHg3YjQxZGZkNywgMHgyZWZkZjdkYywgMHhmMDhlMWZmMCwKLQkweGZkYmQwYmYzLCAweDgwMjNhNzcyLCAweDBlMjdjNWNlLCAweGY4ZjQ4Yzg3LCAweGY4NWZmNjQ4LCAweGVjYjdiYzJlLAotCTB4ODFkOTBiMjksIDB4NmMyNTRmNjUsIDB4ODE3MWMwZWEsIDB4MTZhZTMwNmYsIDB4ODY3ZjJlYjksIDB4YWJkNWQ2ODUsCi0JMHg2NTIzYjI1YywgMHhmYmUxMjkyNSwgMHhiZmE0YzM5NSwgMHhlOWNiOTM3YiwgMHgwZWNiODcxOSwgMHg5NzJlZjVlNSwKLQkweDlmYWU1NWNiLCAweGYxNjUzY2E2LCAweDFmMmQzY2EyLCAweDcwZDk5MGU5LCAweGY1M2QyNmM2LCAweGNmYzQ2MWQ2LAotCTB4MDU1MTc1ZjIsIDB4ZjJmODk4MzYsIDB4YWY0NDZjYTcsIDB4YTAyMzg3NzYsIDB4ZTljZmJkNDIsIDB4OWNhMTYzOTAsCi0JMHhkNmY1YzE5ZiwgMHgzZjJlMGNhNiwgMHhlZDkzMTJjNSwgMHg2MmQ2NTQwNSwgMHhjYzBhZjViYywgMHg5N2MwMmZhNywKLQkweDc3YjYzZTM2LCAweDI5ZjM4YzM0LCAweDBkMWJjZTBiLCAweGUxZTJiYmY4LCAweDI1ZTU3YTdjLCAweDRjOGVlMjg5LAotCTB4NDEzM2M4ZjYsIDB4NWM2MGFlNWYsIDB4N2M5ZTU0NGYsIDB4ZmUxMTNhZDEsIDB4NWZmNTYyYWMsIDB4NWMxZmIwNDksCi0JMHgwNjdjYmQ1MSwgMHgwNjU3MGJlZSwgMHhjNWRhZTcyZCwgMHhiMTZiZmM1ZSwgMHg1NWIzZDQ1YywgMHg1YmQ4MTFmYywKLQkweGZlZmViZDYzLCAweGZhNGVkNjFhLCAweGEyMjliMmEzLCAweDRmZjZmYWJlLCAweGQ1NTM3ZTMwLCAweDNlYmU3YzZjLAotCTB4YTE3ZjExYzMsIDB4NzI1OGMzMGYsIDB4NWQ4YTYwMDEsIDB4MzM2NGI2YTksIDB4MDU3MmVhNTgsIDB4NWRkNjBjZTQsCi0JMHhmMzQ0YzA3YywgMHgwYTUxYmU1ZiwgMHhjNWZlNjBkYSwgMHhmOGRjNzk3ZCwgMHhjMWYwM2Y2MywgMHg0MDdmNWEyMCwKLQkweDFlZjk3ODA1LCAweDMzOTY3ZjZlLCAweDdmMGVkMDUzLCAweDFkNjA3ZWRlLCAweDBhMmYzMWM1LCAweGM0ZDBiMzdkLAotCTB4ZTdlN2M4YmMsIDB4ZGM1NGI0YTMsIDB4MmE3YjJmZWYsIDB4ZmNiY2YwOGEsIDB4ZjZmZjk1ZTksIDB4YmVkN2JjMzgsCi0JMHhmODdjNjY3OSwgMHhmOTBlYmFmZSwgMHhkOTk5ZTM4MywgMHhmOWZhYmFlMywgMHg1MmY3ZjM2NCwgMHhmZjhhMGU1MSwKLQkweGIwYzlmNjE5LCAweGVjYjFlNWRlLCAweDkwZDNmM2E3LCAweDZlYTljOTZlLCAweGYyZGRhYmE1LCAweGYzNjcwZjJkLAotCTB4ODZjZmIwNzYsIDB4MjFkYzJmNzUsIDB4Y2JkODNhZDEsIDB4MjA4N2IyMzYsIDB4M2UzODZhZjMsIDB4YjQ5ZWQ0OTcsCi0JMHg2MzNkYjk1YSwgMHhkOWY4NGJhYSwgMHhmNWU3ZDQ2ZSwgMHg3ZmJjMTI2ZCwgMHg4NTI1ZWEwZSwgMHgwZjY4MTdmMCwKLQkweDg3ZGY5NzhiLCAweDNlOTMyNTdkLCAweDJhZmFlMWYxLCAweDY2ZmJhNmNjLCAweDU2MWQzZjUzLCAweDMzMTdlZjk0LAotCTB4ZDlmNDVjNzgsIDB4MmVlN2VlMGMsIDB4YTVlZWQ1NGMsIDB4MzZhM2Y0MzgsIDB4ZWYxYTRiNmQsIDB4ZTYyNTFhNDcsCi0JMHg0YWJjZmIwMSwgMHgzYTMyZGI3MywgMHg4ZGI5ZmNjNywgMHhiNTU1MmJlMiwgMHgyNzI4OWU1MSwgMHgyZjNjNGJlZCwKLQkweDMyNTViZjQwLCAweGQ4NzFhZDkzLCAweDFhZTc1ZjJmLCAweGYwMWZkNzM3LCAweGNmMTk0M2ZjLCAweDNmNWMxYzY3LAotCTB4YmUwMmM2NTYsIDB4NjYzOGNlMTUsIDB4ZmM0YmZmZTgsIDB4OTdmNzgzMmIsIDB4ZmRlYmFjM2MsIDB4NWQ0ZGYxY2UsCi0JMHgxMGMzYjlmNSwgMHg5NWU3N2Q1ZiwgMHg5NzllM2NlMywgMHgxOTAxN2U0OCwgMHg5ZmExMTY4ZiwgMHgwMjM0YmNmNywKLQkweDc3MGJkN2Y3LCAweGZhODI5ZjFjLCAweGYyY2ZmNTc2LCAweGUxNzU3YzU1LCAweDdiMjdkZjRmLCAweGI5ZDA1YWIxLAotCTB4YjQ3ZGZkMWQsIDB4MGNmZjAwMWYsIDB4N2U0MjUzY2EsIDB4MGY4ZjEyN2MsIDB4ZDBmODEyOWQsIDB4NTdkN2FkZTksCi0JMHgzOGYwYjBlZSwgMHg1NDc1ZTgzZCwgMHg3ZjliOTUyNCwgMHgzYTU2ZmQ0MywgMHg2ZmE4NWNkYSwgMHg4Y2I2NWYyYiwKLQkweDZiZmNiZDQyLCAweDVmYjQzZjljLCAweGY4YzA3OWI0LCAweDE2N2Y4MTBmLCAweGI0NTQ2MjU5LCAweDMzMDI2YjRmLAotCTB4NjlhZjA4YWQsIDB4ZjVkYzExMzAsIDB4ZjIyYTQyNWUsIDB4YWZiNTY3ZTMsIDB4Y2U0ZjkxMzgsIDB4ZDBiMjg1NDcsCi0JMHg4YmFjNzUwZSwgMHgwMTcxMWFkMiwgMHg3ZGNmOGYyYSwgMHg4OGQ1OWI1NiwgMHg2YTI1OWM3MSwgMHhmNTA0YzM5YiwKLQkweGM0NjQzNjRiLCAweDQ4ZmViZWExLCAweGZlYjE1OTBkLCAweDMzMzRhNmEzLCAweDFkNTUxZWMyLCAweDFlNDdiMDhmLAotCTB4YTA2N2YwNGUsIDB4ZmYwNDlhYmEsIDB4NmI1OWJlYTAsIDB4ZjM1Y2Y0ZTIsIDB4M2E2YjcxZGMsIDB4YWM1NTc3OGMsCi0JMHhkZmU3ZjNmNywgMHg0Zjc4YzZjZiwgMHgzNjViNmE2NSwgMHg3N2EwMTFkYSwgMHhmM2M0N2Y3NiwgMHhjM2IyMjZiMywKLQkweDNjOTM5ZjZiLCAweGU4YmFjMzUxLCAweDBkZTkxNmJkLCAweGQwNGFiNWYyLCAweGFmNGJlZDc5LCAweGJmN2M4NDNjLAotCTB4ZDA1ZGU5MTYsIDB4NmY4MDVmOWQsIDB4MTdmM2QwNGYsIDB4ZmM2MTRlMGUsIDB4MTdjODEzZmQsIDB4YjgwMmRkYmEsCi0JMHgzNzcxODJkNiwgMHgwOWFmODcyYiwgMHgyNWU3ODAzZSwgMHg4ZjIwNzlmYywgMHgxMWU4MjZmNCwgMHhmOTIzMzdmNCwKLQkweGM2ZmEzN2JkLCAweGI3ZmI3MjY2LCAweGY0OGRiMzY4LCAweGU3MjY2YzZiLCAweDJmMWRmNmZiLCAweDlmN2U5MTNiLAotCTB4NmRmYzdmM2YsIDB4N2NhOTRmM2MsIDB4YmJiMmFjMDEsIDB4ZjgxN2JlMDcsIDB4M2JmNWMyYTgsIDB4NGZlNGZlNjksCi0JMHg5ZDdhZTE1NCwgMHhlNGVmZWI1ZCwgMHg1NTZmMjE3MywgMHg1ZjRmYWY4YywgMHhkNjJjOTU2ZiwgMHhmNzhiZDdhZiwKLQkweGJjODUzMmUzLCAweDk3YWY4MTMwLCAweDEyZjk3MTA2LCAweDhhZjI4NGYyLCAweDNlYmU5OTdlLCAweDVmN2YxYzVmLAotCTB4NGNhMmNmZTcsIDB4NjI2OTlmY2UsIDB4NzI2ZDRjOWQsIDB4YmU5MDdlMjIsIDB4N2Y4MDY3YTgsIDB4NDI1MWQ2M2MsCi0JMHhjZjkzNDA2ZiwgMHgwZmYzMDY3ZiwgMHhmZjNlOTdhMywgMHhkMDBmMzE1MiwgMHhiOGQ4OWU2YiwgMHg5YmI2M2EyZSwKLQkweGNlOWU4YWQ5LCAweDM5MzNmMzJmLCAweDlhZGQ5Y2RmLCAweGY4MGNkYTk4LCAweDU5ZjYwY2ZiLCAweGZjMDA2Nzk0LAotCTB4YTc4ZDg3MmEsIDB4NWUzZThkZjMsIDB4YTZjYTRmZjEsIDB4ZmZhMWJhZTEsIDB4OGZhZmY2MTAsIDB4OGZhMDUxZmIsCi0JMHhjNDdjZmQ4YywgMHhmM2U4N2NiOCwgMHhiOGIyZTVkNywgMHg3Y2I0YzE2NiwgMHhkY2ZiYjYyNywgMHhlYjg3OTE5MSwKLQkweDY2OTdlM2U2LCAweDA3YmVmNGFhLCAweGRmNzgwM2ZkLCAweDM4YTI2Y2QzLCAweGFmYjE1OWY1LCAweDE1ZjViYjNmLAotCTB4MmViY2EyZTcsIDB4ZGUyMjlmN2UsIDB4YWJiMjdmYzMsIDB4ZmU3NTNjZmIsIDB4OWE2N2UzMGIsIDB4YmJmNmYxNjcsCi0JMHhjZmFjMjFhNiwgMHg3NTJmOTIzNywgMHhjOWZjZTliYywgMHhkZjkwMjUzNiwgMHg1NWE3YzkxMiwgMHgzOGFkNjcyOSwKLQkweGRkNzNlNDVlLCAweDcxOGYzOTdmLCAweDVmZmY5NDE2LCAweGZmMjQ4Mjk4LCAweDY2NDRlY2I1LCAweDdmODY1ZDk4LAotCTB4NjVkNTFiMGEsIDB4YjNhZjM2MWYsIDB4NTFjYjdiNTEsIDB4YmQ3NTA3NmUsIDB4YWFlYmRiYWYsIDB4YzQyNWNmNzgsCi0JMHg3OTMyOGZmNywgMHhmNTZhYzkxZSwgMHhmNDI3MzZjNCwgMHgzNmUzZTYzMywgMHhmZGQ2MGYzYSwgMHg0MmQ3MDljNSwKLQkweDk1YzYwYzUyLCAweDA4MmI0YTVlLCAweDJlNmI3N2I3LCAweGFkZmUyMDlmLCAweDcwZGI2ZDY0LCAweGM3NzBiM2ZmLAotCTB4MjM0NzMzZmIsIDB4NDJkOGZlOWYsIDB4YjcwYjJmZTcsIDB4MWZhMmI2NGUsIDB4ZTJmMGYyYmUsIDB4NzNmZjQ4NTEsCi0JMHg1ZDllZGM3NSwgMHgwNDc5MWRhYSwgMHg3NTczZThmZCwgMHhlNzE2Yjk4ZiwgMHg1M2M1N2JlMSwgMHg4NWYzYzJjNiwKLQkweGJlODlmM2JiLCAweDY2ZGFhM2U3LCAweDgwZjFkYzIyLCAweGJkZTExYWM0LCAweDZlNDc4NzcxLCAweDcxZTAxYmJhLAotCTB4YjhiMTgxOGUsIDB4NDkwZThmY2UsIDB4ZjhjMzYzMjUsIDB4Mzc1MzA5NjEsIDB4OWI3ZThkZGQsIDB4N2NhMmEzMWMsCi0JMHg1YWY0MjQ3YywgMHg2YmQzODU4ZCwgMHhkYWZmZTA5NywgMHg3OWNiOTJjZSwgMHgzNjRkNGQ3MSwgMHgxYzc3OTc5ZSwKLQkweGY4MGE3ZDA0LCAweDliYmFiMGE5LCAweGViZWUzODQyLCAweGE4MGZiNDg5LCAweDUyNGI2ZDgyLCAweDkzNWI5ZDFjLAotCTB4Y2FjMmI0ZGYsIDB4ZjQwNWM5ZWMsIDB4Y2YwYzllZGMsIDB4MWVkYTVhNGYsIDB4N2M5Y2Y1YzAsIDB4MTliZjkxYzAsCi0JMHgxOGRkMmI3MSwgMHhiYmZiODhiNSwgMHhlN2UwMzcyNCwgMHhiZTNhZjhkMiwgMHgwYmQ0NzlmNCwgMHg0ZmVjOGIzZSwKLQkweGZkMTViZjdmLCAweDYyN2ZkNDdjLCAweDdmNmE5N2ZlLCAweGQ2ZWQwZjNjLCAweDcxNTlhM2E1LCAweDVlNGZmZWI4LAotCTB4M2Y0M2FhOGYsIDB4ZDcwYjEzZTcsIDB4ZTBmZjdhNjcsIDB4ZWUxYzdkN2YsIDB4NjViZjgxMjcsIDB4MzJiZmMxODAsCi0JMHgxZjY3YzBjMCwgMHgyZGI1ZmQxYiwgMHgzM2E3YWYzNCwgMHhjZTk1ZmU4ZCwgMHhiMmViMTVhZiwgMHgwNGYzYzI2MiwKLQkweDk5ZTNmOWJhLCAweDc0NDc5NmI3LCAweDAyODgwZmQ5LCAweDMxOGM1ZDE2LCAweGY2ZWY4YzBjLCAweDZkOGJlYmY5LAotCTB4ZDgzNzhmZTgsIDB4ZjNhYzFiNTQsIDB4M2M3N2U0NjMsIDB4ZTI1OTdhNmYsIDB4ZTczYjAwZmIsIDB4MWU1ZjhmZmYsCi0JMHhkZWZkYzQxMSwgMHhmMGU0ZmZiMiwgMHgxMDUzMjZiMiwgMHhlYzRlYTU1MywgMHhmYjYxMmVkZSwgMHgyNWZmZTBhNSwKLQkweGRiZmNjMjlhLCAweDAxZTdiYjNkLCAweDlhMmJiM2RiLCAweGI0MzI1YjZmLCAweGU3OTQ3MmJmLCAweDEyYjU0MDNmLAotCTB4OWRiZWQ3ZTEsIDB4ZjdkZmZlZWMsIDB4YzE3OGY1NjcsIDB4NmJiYzc0YWYsIDB4ZWJiYzQzNGMsIDB4MzlmN2Q2ZjgsCi0JMHgxNDVmMDI2ZiwgMHhlZmUxNzQxNSwgMHhmMjBhZmYwYiwgMHg3ZGZiMmY2NywgMHgzYTY5N2U1NCwgMHhlNDM4ZThmYiwKLQkweDg2OGM0NzY3LCAweGU2Y2JmMzcyLCAweDQ4ZmVhNGM3LCAweDZmZjI5N2Y3LCAweGFjNzU3ZWUwLCAweGZjYTJhMzEyLAotCTB4NDhkZmUxN2UsIDB4ZmQ5NzhjODcsIDB4NzRlYTU0ZDUsIDB4MTM2NWUzZDcsIDB4ZjdhMTZhNWUsIDB4ZjExZTY4YmUsCi0JMHhlZjc4MzhkYSwgMHhlYjg2MjUwZCwgMHhmN2NmMGY2ZiwgMHg2NDZmYTQ4OCwgMHhlYmZkYzdkZSwgMHg3M2UyMjc0NiwKLQkweDdlOWY1ZDdkLCAweDlmNTlkMzk3LCAweDE3NDdhN2Y3LCAweDJkNWQ3MTNiLCAweDZkN2RmNjRmLCAweDRmYjdkMjBjLAotCTB4ZGFmZThhOGMsIDB4NzFmNzkxNzIsIDB4MTNkNzNmNjEsIDB4NDczMWVkMTcsIDB4MmY5ZDAwNjYsIDB4NjJlMzk4MWUsCi0JMHhiNjk3MzdhMCwgMHhjZjg3OWRjYywgMHg1MjZlYmQ5NywgMHg1ZWQ3NWZkMSwgMHhmZWUyNzMyZiwgMHhiYjcyMGZlYSwKLQkweGRlMTJjNTUzLCAweGU0N2NlMTBiLCAweDY5N2E4NGEwLCAweDgzOWIyOTZjLCAweDY0ODZjN2VkLCAweGM2N2U4NmU2LAotCTB4MzJmY2UwY2MsIDB4YzQxY2IyZTYsIDB4ZTBjZjlmODMsIDB4NmUzM2M1MzksIDB4MDMzYzUzNDQsIDB4YmNjNWY1ZmUsCi0JMHhlMGJmYTU4ZSwgMHhlZjFkMTA3MSwgMHg5YzZjN2VmYSwgMHgxMDMwZjc1OCwgMHhmMTc3ZTI0MywgMHgzZjg4YjhiYywKLQkweDhiYzBlNGZmLCAweDRiYmZiMGIzLCAweGNlMmEyYzg3LCAweDE2NDM4YmZiLCAweGVjMTU3ZmVhLCAweGRlMzBjY2EzLAotCTB4NWY3Y2EzYzUsIDB4MWE1NDcwODIsIDB4N2ZkZjMzY2EsIDB4ZmJlMjZhYWMsIDB4MTY3NWNhOGYsIDB4M2JhNjM1OGYsCi0JMHhiNTg3MTY1ZiwgMHgzYzFlZmRjMywgMHgyYmI4ZTM3MywgMHhmY2VhMWYwNSwgMHhkN2MzY2FiYSwgMHgxY2VjMGFiNywKLQkweGY4OWJmN2FlLCAweDZkMzU5NjM3LCAweGM2ZjViYzQzLCAweDdmOTZkZmM3LCAweGZhOGNiMzMzLCAweDdiNmY5M2EyLAotCTB4NTc4MTE3ZTMsIDB4NWJlNDdmOTQsIDB4ZWQ1NjJmOWQsIDB4NzFlY2U3ZTcsIDB4OTExM2Y5NGQsIDB4ZDEzZTc0ZmYsCi0JMHgxMjYwNGJmNSwgMHg1YTdiNDFjYiwgMHg5ODM5NjU2MywgMHg0NzMwMTM5NywgMHhjYTE3YTg2YiwgMHhlZDA1YjcxNCwKLQkweGY2Zjg5Y2MwLCAweDIzY2Y0NDEyLCAweDRhYmY1YzU5LCAweDE5OGY2NmM1LCAweDhkOGQ1MWVkLCAweDc4Yjc0N2Y0LAotCTB4YzdkNzE2NzcsIDB4MjgzZTY0MjEsIDB4Nzk1MmNjZWYsIDB4YTZhYjI1YmUsIDB4ODI1ZTg1N2QsIDB4ZWQwMDMyZTMsCi0JMHhiODlmNTk3NiwgMHg0OWExYmEzZiwgMHhkOWM2ZTFlOSwgMHhkOTc1ZjAzMiwgMHgzMjA3YjhiOCwgMHg4N2JjYzYzNCwKLQkweDQ0Nzg3MjhmLCAweGQ0MGI0OGRjLCAweGIzMzNkMmNiLCAweGNjYWUwMDRiLCAweDBhYzk0Y2YyLCAweGUxZDJmN2ViLAotCTB4MWViODAxYzQsIDB4OWYxNTNlNzgsIDB4MzdkZTI4ZmYsIDB4ZWEyNDZiMjMsIDB4ZjlmNDg1N2YsIDB4NjE4ZWE2OTcsCi0JMHhkYWJhZDMxYiwgMHhmMWRkNzk5ZiwgMHg1ZGRkMmZkMSwgMHhhNTg1YmI3MCwgMHhlYjA4Nzk2YSwgMHg5ZWU1ZTVmMywKLQkweGVjMWNjZjJjLCAweDIyZjlmMjI3LCAweGRlNTJiNmM2LCAweDNmNWZlMDVjLCAweGZlMDRmZjQ0LCAweDhmNDBlZDc5LAotCTB4MmQ1ZjA0M2IsIDB4YTQyMTJiYjIsIDB4NWNiM2FiMzMsIDB4YzAzN2Y0ZWUsIDB4OGM1YTYwMTUsIDB4MjU5Yjc0OGMsCi0JMHgzOTBlZTRmOCwgMHhlN2VmODJkNCwgMHg4MmY1NWFiMiwgMHgwM2EyNWM5ZCwgMHg1ZGVkZjc1ZiwgMHhkODA2MDNhZiwKLQkweGUwM2ZiZDA1LCAweGIwMmQyZjg3LCAweDEzNmJlMDNlLCAweDEwNDZkZmIwLCAweGIxMjAxMzFkLCAweGU5OThmNDAyLAotCTB4MzNmZDdmYjUsIDB4NjAxMzViZjYsIDB4ZTc4NDUxZWQsIDB4MTBjMmY1MGEsIDB4Y2NmYWNlMGMsIDB4ZDk1OTQzNWYsCi0JMHhlMzBjMzljNywgMHgxYzU3OWUxZCwgMHhiOGU4MDUyMSwgMHhjNDNlZjlmZSwgMHgxZjg1MmJmZiwgMHhjNDQ1N2NjMywKLQkweGJlNTQxYmNmLCAweDRiMWJlNjFlLCAweGUwODBmNmZjLCAweGFjZmM0ZmI3LCAweGYwNDQxMzNhLCAweDBiZWM3NjczLAotCTB4NzBmMWU2MTksIDB4YzQ2MWVmOTQsIDB4YTlmMzFhZmIsIDB4OTQ2ZWY1ZDQsIDB4ZmEyNzFhZDcsIDB4NTRmZjlmMTksCi0JMHhhYzM1NTBkMiwgMHgzYjI0ZmUxMSwgMHg1ZWU0MjA5NCwgMHhmNTA2ZGQwYSwgMHg4ZGI5NjlhZCwgMHgwYWI2NmY2OCwKLQkweGM2OWNiOTdlLCAweGQ4MWMzZjY4LCAweDNmYmNhMzZjLCAweGVhNzhlMzc2LCAweGE2OTcwMGMzLCAweDNlZTFhZWRmLAotCTB4YjZjZmYyZjMsIDB4M2EwNTJlNjcsIDB4MzhiZDQwZDksIDB4YTE1MzlkNjEsIDB4Yjc1ODIyY2YsIDB4Y2U4OTYwMDUsCi0JMHg0ZjQ0ODM4MSwgMHhlMTM4MGZhOCwgMHhjN2I0YjZmOSwgMHgzMTlmMzk1MiwgMHg0ZWI1Y2EyZiwgMHhkZGVmMWQxZiwKLQkweGEzNDMwMWU4LCAweDMzYjY2OWRmLCAweDczMmJlZTBiLCAweGU1MTUwMWQ5LCAweDI3Y2JhNzRmLCAweGUwMWJjMDc2LAotCTB4ZmU2ZTMyN2IsIDB4N2ZhYzFmNDEsIDB4ZWI3ZmZiOTksIDB4YTYxM2FjNGQsIDB4ZmIzNzRlYjgsIDB4OWZmOTE2ZjcsCi0JMHg4MzAxNmUyMCwgMHhmOGIwMzk3ZSwgMHhhMmMzZDlkYiwgMHhlMjFjNTY4MywgMHg4MWUyZWQ5NiwgMHhjYWY1MWVlMiwKLQkweDI1N2FlOGJmLCAweDFmOTNlNTlmLCAweGYxODQ0YjgyLCAweDkzMzY4Yjk2LCAweDhjYjcwYWE1LCAweDZiYjA0OWViLAotCTB4OWZlYjE3YzgsIDB4YzNiYjIwY2EsIDB4ODU5MGZjNjYsIDB4ZmEwNzYzYjcsIDB4NGI2Y2JmMTIsIDB4MmIwZTg4OTMsCi0JMHhkNzk0NGQ5YiwgMHgzZmI5YjMzOCwgMHg4Y2Q1NDM3MywgMHgzYTU0YmVlNiwgMHhmM2QzMjdhZiwgMHgyZGRlNDc0YiwKLQkweGQzODc3YWU0LCAweDg5MzNlNjY5LCAweGU4OGYyODkzLCAweGVhNTQ0MTk5LCAweGY4MmY1OGYzLCAweDE1ZjNjNzRlLAotCTB4MWNiM2M3MmYsIDB4MWUzN2RkYzgsIDB4MmQ1YTEzY2YsIDB4M2YyNmU4MmMsIDB4MzVjZmQ3ODQsIDB4YjRhZmRlMTEsCi0JMHg3ZjkxOTc5ZSwgMHhiMTMwNGVlNiwgMHhkMTRiMDBiZSwgMHg0OTZkY2Y5YywgMHgwMWVlZTY2NiwgMHg5ZjQxMzZiZiwKLQkweDczMzQ3NzI4LCAweDZhMGJlZDg3LCAweGY4OGQ5Y2EyLCAweGRhNzgwYjFlLCAweDk3NzAxZjcwLCAweDI3MjdkNzY4LAotCTB4YTc0ZWQwY2UsIDB4OGU4MTNjZTcsIDB4MzMxNTk0YmIsIDB4OWRkYjFkNzAsIDB4YmY5MTVhNTMsIDB4YzMzZjVhMWMsCi0JMHhiMTQ5MzZiOCwgMHhhYmNjMWYyMCwgMHhlZTYzZDIzMCwgMHgxOTZjMjM1YywgMHg1YmU5MTVmZiwgMHg3M2UzNzhjYiwKLQkweDVmMDhjNzliLCAweGNiOThlOWQ0LCAweDE4ZTljMzcyLCAweGZhMGYzZjg2LCAweDM2M2M1N2UxLCAweGRlZTYzZjhlLAotCTB4NzllMDFlMzcsIDB4N2NjM2Y4NjEsIDB4MzIyOTJiOTYsIDB4MTQ3YjZmZTEsIDB4YWRlMDE3YzcsIDB4YTYzY2Y5MTEsCi0JMHg1OGI3ODhjOCwgMHg3ZDRmMTE4ZiwgMHg0OGY4OGQ0YiwgMHg5YmQ3MWFmMCwgMHhhODZlOWU1OCwgMHgzNjBkZjY0ZiwKLQkweDUxNWZmN2Q0LCAweDU0MDc4MDYwLCAweDFmYjQzNThmLCAweDAxOTI3MWI4LCAweDMzNGMwYjRlLCAweDliYThjZmI0LAotCTB4MWFiMzgwNmQsIDB4MWZiNDM2ZWUsIDB4YTE5MTdmYjQsIDB4Y2FiODM3M2UsIDB4ZThlNDNmNTAsIDB4YjQzYzAzN2EsCi0JMHhlZDBjOWZlOSwgMHgzMTZmMzc4NywgMHg3Njg3ZTdkNCwgMHhiNDQ3ZWExYSwgMHg4ZjAwYzBmZSwgMHhkMGMyN2I2YywKLQkweDhkODdmNDdlLCAweGVkMzFmYTg2LCAweGM3ZWExYWNmLCAweDAwYzE3YzVkLCAweGQ1NzhlODRmLCAweGViYjZmZWQwLAotCTB4NDRmMDBjYzcsIDB4N2RhMWFlZjYsIDB4MDM3ZGZkYjEsIDB4MGZmZDU5M2MsIDB4OTNkYmZiNDMsIDB4YTdlYTFiY2UsCi0JMHhkNDMzM2ZiYSwgMHg2YWI5Y2Y0ZiwgMHg3ZjZhNjc4MCwgMHhiNmFmYjQzMSwgMHhhMzY1NDZmYSwgMHgyNjVkMmFmZiwKLQkweGMwNTlhYWI5LCAweGViNGFlYWU1LCAweDcxY2EzYjFjLCAweGRmZjAzNjUxLCAweDdmYzlkNjEwLCAweGQyOWVkMGUzLAotCTB4NjJhNTg1N2UsIDB4MzRiMjY0ZmMsIDB4ZDlmMjQ0M2UsIDB4ZGY3MGQyNmMsIDB4ZTRhZjY5MTEsIDB4OGMxZWJjY2YsCi0JMHg0YzU3YjFhYiwgMHgwNjIzNGY3NCwgMHgzNjFjOGVjYywgMHgwZWM3YWM3ZSwgMHhiODJlYzQxYiwgMHg4MDZhYTk2ZiwKLQkweDg2NDliYzEzLCAweDZlZTU4OWY2LCAweDJmYjI3ZDQzLCAweDdmZGY1MGM3LCAweDA3ODA2Njg1LCAweGRhMTkxNzU0LAotCTB4MzFlOGRjMGYsIDB4NTI4MTY5YzAsIDB4M2E4Y2ZiNDMsIDB4NmFjZTAxYWYsIDB4MWZiNDM3MjgsIDB4YTg2N2RmYjQsCi0JMHgzMGFlMGRjZiwgMHg1YTM5MGZkNCwgMHgzNjg3ODA2ZCwgMHgxZmI0MzQ2ZCwgMHhkNDMwMWNkZSwgMHgwY2VhODdlNywKLQkweDFiNWEyM2Y1LCAweGI2YzhmMDBjLCAweGEzZjY4NmZkLCAweGVhMWEwYzNmLCAweDM1MWZiNGM3LCAweGQ4YmI4ZmQ0LAotCTB4NzQyNzgwNjQsIDB4ZGZkYTFiMzQsIDB4ODA2NDNkNzYsIDB4ODY5M2IyMjcsIDB4MzNmNmM1ZjYsIDB4ZmFiMjc4MDYsCi0JMHhkYmZiNDM1YiwgMHhlYTFhY2U5MywgMHgxOTJmYmFhNywgMHg2NGZmNzVlYSwgMHhjNjU3Y2U3YSwgMHg5OTVmYzJlNywKLQkweGYwZDlmZGE5LCAweDg3OTI2MDdlLCAweDVlMDQ3ZjIxLCAweDZlMzU2OTMwLCAweGE3NjZmNmM2LCAweGRlODE3ZjEzLAotCTB4ZDA5MjhmNmUsIDB4M2U1MmYxYmYsIDB4ZjQyNjFjNTIsIDB4MDRjNjVmMDEsIDB4ZTg1N2M0NGMsIDB4NWM1MDU3ZWEsCi0JMHhhZmUyOWUyOCwgMHg5OGRjNWE2NCwgMHgxZjc2MDM3NywgMHhiNGU2N2ZlMywgMHhmYjc3ZjQzNCwgMHgyOTVkZjk3NCwKLQkweGY2Zjg4ZjVmLCAweDZjZDFkNzdlLCAweGRiNmJmNjQ2LCAweGE3YmNhOTQ0LCAweGQ5YTNjMzNjLCAweGViZjIwZTNjLAotCTB4ZDk1M2RmNmMsIDB4ZjhiZmI4MDksIDB4YmJmNDE0ZDksIDB4MzZjMGIyNTcsIDB4Mjk2NGU3OWMsIDB4ZGUxZGE2MmYsCi0JMHg4YzY1MWQzYiwgMHg1NGU1ZTg2MywgMHg2YzJkZTAzYiwgMHgxYWEzMjczZSwgMHhiMjZlMGE1MiwgMHhiZjZhOWZkZiwKLQkweGZiM2JlZDRjLCAweDEzMGRmMTE1LCAweDU4N2Q3ZmFjLCAweGJlYzI4ZmZmLCAweGFkYmYwNjQwLCAweDA1NzIwZmMxLAotCTB4ZmMwZmVjYmUsIDB4ZmM3YmMxMmEsIDB4ZjVlZjA0NDksIDB4ZWZkY2E5YmIsIDB4MDlmMmExY2YsIDB4MDdmNTQ2YmYsCi0JMHgzZjA0NDVmYywgMHgxYzEwZjdlZCwgMHhkOTUyOTdmNCwgMHhmM2QyZjdlOCwgMHg4MjcyZmU0MywgMHgxOTdlYzA4ZiwKLQkweDdmYjBhM2NiLCAweGQ4NTlmMmM2LCAweDczZmQ2MzA3LCAweGY4NDYyZmIwLCAweDk1MDBmZWE3LCAweDdhM2FmZTRkLAotCTB4ODFiZjgyZmUsIDB4ZmJmYzk3ZTAsIDB4M2ZiOWZlMDksIDB4ZmZiMzY1NDgsIDB4ZmFhZjk1MjgsIDB4MzVmZWE4OWIsCi0JMHg2ZmMxMzM3ZiwgMHg4NzA0NDNmOCwgMHgxZjA0YWRmYywgMHg3YzExYjdmMywgMHhjMTIxZmZjMiwgMHhhOWRiZmI2ZiwKLQkweGE0NWZmNTZjLCAweDA3N2YxZGYyLCAweDVmZjI5ZmQ1LCAweDllOGJiODI3LCAweDEyMzg3ZjQ2LCAweGY4OGE5ZjlmLAotCTB4ZTM3ZTEzMmIsIDB4MmMzZmMxNzIsIDB4Y2I4YmZiOWUsIDB4ZTViMDJiMzgsIDB4OTMyZDZmODIsIDB4NzhjMTBkYzAsCi0JMHg0NmVjYmY2MCwgMHg4OTFkN2JjYywgMHg3YzQzOTU3YywgMHhmYzU2ZWE3NSwgMHg5OGZkYzhmOSwgMHhmMTlmMDI1ZSwKLQkweDEzM2FmNGZkLCAweDc2ZThkNzhmLCAweGU4MTdlNDVlLCAweDAzYzU1MjdlLCAweDAwYmIxZjdjLCAweDI3M2M1ZmZjLAotCTB4ZWUyOGNmZjgsIDB4YjZhOTVlYWYsIDB4NTczZmEwZTQsIDB4ZjBkNjhhNjEsIDB4ZjU0YWU1MWMsIDB4NjEwZmM4MWYsCi0JMHgyMjBkZGU3OCwgMHhiNjZiZGY3MiwgMHhmNmMzM2I4MywgMHhiZWYwMTU3MSwgMHg0ZWFmZGUxOSwgMHg1NGY5YTM0ZCwKLQkweDlkMGI1NmIwLCAweDIzY2NjYWEzLCAweDMzZGQ1YzgxLCAweGY4OWQ3N2MwLCAweDQwMzk4MDdhLCAweDk4MjU2YWZiLAotCTB4ZmYzOGZiOGQsIDB4ZjA1ZmRmMDAsIDB4YTVlYTk1ZjksIDB4NTQ3ZTEzNmYsIDB4NjcwZmNlOGQsIDB4NzcwOTQyZGEsCi0JMHhhNGU0ZmM2MSwgMHhkZWJmZjE0NCwgMHhmMjI1NTFmMCwgMHg3ZmFkN2JjOCwgMHhmYTBhNTJlMywgMHg5MzdmYTVlNSwKLQkweGQzOWY0ODdjLCAweGM2Mzk0NzE2LCAweGY4ODM5YzEzLCAweGM4MzlkNGJlLCAweDUyNjMyODZjLCAweDMwNDE4ZTdkLAotCTB4YWEzOTNmOWYsIDB4MGEwMzM1ZWYsIDB4NzU5ZGY0ZmYsIDB4ZWI0ZmVlNDcsIDB4ODFkZjQ3ZGEsIDB4OWJmMDUxNWIsCi0JMHg0MmRiOThjYiwgMHhmM2NjOGQ3OSwgMHhiODVkNWUxNiwgMHhiZTA4Zjk5MywgMHhmY2E4MDU4YiwgMHgzNWNmOGE1ZSwKLQkweDBmZTYyNDY4LCAweDhkZjYwOTA1LCAweGI0ZjZhNWI1LCAweGE1NzljOGFlLCAweDIwN2FlMjBkLCAweDUwZDk5MDZkLAotCTB4YjlmNTQ4NGUsIDB4MzkzZmJmYjEsIDB4ZDNhZjM0M2MsIDB4YzZjZjZlNjMsIDB4ZmFmM2U5NzUsIDB4ZGY5YmFhNWUsCi0JMHg0ZjFkNjA5ZiwgMHhmNGZlZmNlMywgMHg0YzE3NTdmYSwgMHhlM2Y5ZGQxOSwgMHgwYTE3YzAxZiwgMHhjNzY4NmY5YSwKLQkweDA2YTQxY2YwLCAweGFmZGYwNzY0LCAweGYyODlhZWY5LCAweGE4YmU3NWI5LCAweGJlMjE4MGMwLCAweDc5NDRjOWI3LAotCTB4MDI3YzVkZmUsIDB4YjBmYjgxZmMsIDB4ZjdiYTBlZjgsIDB4MDEzMjdjMDcsIDB4OGM2YWI5ZDcsIDB4NWY4MmIwMTQsCi0JMHhjYzFjZGE3OSwgMHhmMmI5ZDEzNiwgMHgxNWM2MmI1MiwgMHg3ZjAzYzc5NiwgMHgwN2NlZjdhNCwgMHgwM2ZkYzU2YiwKLQkweGQ3ZjAzOWZkLCAweDJmY2Y0OGVkLCAweDA3M2EzMTdlLCAweGM2ZjU1NWYxLCAweGFiZTIzNzE4LCAweGMwNzQwY2M2LAotCTB4OTIzYmUzN2QsIDB4Yjg1N2YzYzYsIDB4MGRjNjk3ZWEsIDB4OTMyNjc4YTUsIDB4NGZlMzBkMzUsIDB4ZWIzZDZkMzMsCi0JMHg3ZjgyZTVkYiwgMHg0YTU5Mjc0ZSwgMHhmMTlmZDQ4MywgMHg0MTNlZTVmYywgMHgzZDA0ZmJiNywgMHg2NGZiYWZkNywKLQkweDNlZjMwNDhkLCAweGRkMTJlYzdkLCAweGZmMzZlOTVmLCAweDk4M2M4ZjhkLCAweDU1YzdjNjE5LCAweDc4YTc2N2NkLAotCTB4NWJkZmQwN2EsIDB4ZGYzYTdmNDQsIDB4ZWY4NzU2NDgsIDB4YWYzZTEyYTAsIDB4NDY1ZTNlNGUsIDB4N2MwYjEyZmMsCi0JMHg3YzdjNDE5YywgMHg2NzE5Y2YwMSwgMHg3NzMxZGNkOSwgMHgyODBlZDk0MSwgMHhmYmU5NDEwOSwgMHg4MWY2OTU2NywKLQkweGU1NDY5ODhiLCAweDcyYTVlNjEyLCAweGY5MWQ5MDM5LCAweDZkZDgxYmQ2LCAweDYyYWY3YzQ1LCAweDZkN2NmNDRkLAotCTB4ZjIxNzYyZDEsIDB4OGZiMzMyZjEsIDB4MzA2YmM5ZjYsIDB4N2RjZjE3NTMsIDB4MTI0OTQ3NTksIDB4MzZlYTRiYzYsCi0JMHhlODA0OTViZiwgMHg3YmIwZDM5YiwgMHg2NzZmYzYzMiwgMHg4NWJlMTcwNywgMHhkMzIxZDk2NSwgMHgwNTViY2MwNSwKLQkweGNlMmVmOGI5LCAweGJkNTRkZGFiLCAweDdmOGMxZmI1LCAweGI3MTM3M2Y3LCAweGIzZTc4N2Y2LCAweGY2MGY0ZTI0LAotCTB4YWU4N2E3MmUsIDB4MGRkNzIyMzcsIDB4ZTQ5OWIwNzIsIDB4ZWI0M2Q2MzMsIDB4MDZhNTljOTIsIDB4YzJkOGE4MzksCi0JMHhhZWY4YTYzYywgMHhiOTRlZjlmYywgMHhmYmZkNWEyOCwgMHhlNGJmYThmZSwgMHg1NDE3OGEwZSwgMHg0MzhiNjFiZCwKLQkweGRjNjJhZjNhLCAweGY0NzkzMDFmLCAweDA3ZWU4ODc4LCAweGQ1ZjNlMjMwLCAweDc2YzM1YTJjLCAweGZlYmUwYTlmLAotCTB4YmUyMzAwNzQsIDB4MWIwNGQ0ZmUsIDB4ZmYyZTgyYzIsIDB4OTJmYWE1OTQsIDB4ZWNiYTMyMGEsIDB4YjlmOTk1NzUsCi0JMHhiMDI3ODg2MSwgMHg5Zjg5ZmJlNywgMHhjYjZkMzdjZiwgMHgxZmJkNDM0ZiwgMHhjNGZmNDU0YywgMHhhYjRkYWNmMiwKLQkweDE1ZDgzMzQ5LCAweGFlOWY3NWY2LCAweDE2YTNkNzM4LCAweDljOGE4NzFlLCAweGVkZThhOTk3LCAweDYyM2ZhMzNmLAotCTB4OWUwMGIyYjMsIDB4YjM1YzgwODMsIDB4ZmRjZjI4NTEsIDB4MzU1NzI0YWMsIDB4OTc4YzVhODgsIDB4ZjliYWYyNGQsCi0JMHhmZmIxYWMzOSwgMHhhZGJlNjJkMywgMHhkZDcxZTU3ZiwgMHhlMzA3YWMwMCwgMHhlMWM3ZGQyNiwgMHhkZDE2Y2E3NiwKLQkweDBkZTkwZTM1LCAweDlhNzFhMzE3LCAweGVhZDE5MTA3LCAweGVkMjk4ZjFjLCAweDM3YmZlODI5LCAweDhlN2VmYjQ0LAotCTB4M2ZlM2QxZjQsIDB4MzViMmJlZmEsIDB4YmE0YzkzZWQsIDB4NTJmNjM2OTcsIDB4MThmN2RkMDUsIDB4ODBmYmEzNjMsCi0JMHhkOGI4ODg3NywgMHgyZTNjNDUxZCwgMHgwNzFlODc3NiwgMHgwNzExMWYxYiwgMHhiMGM3ODg4YiwgMHhjNWM3M2RmMSwKLQkweDk4Y2NiZDc0LCAweGU0ZjljMTY2LCAweGQ3ZDRmZmIyLCAweDVkMThmMTRmLCAweGFiYjM3NjBmLCAweDhhMzY5MGIwLAotCTB4NmUyOWJiNTcsIDB4Yzk5ZjE5ZDEsIDB4NGNmOGYyYjcsIDB4ZDVjNTMyNDksIDB4ZWU0ZjQyYWQsIDB4YTRmZDcyZjIsCi0JMHgwZTU4OWZiZiwgMHgzZWMzMTg1YiwgMHgwZDMyY2VjMiwgMHgwMGQ1MDhmYiwgMHgzMjRlYTgwZiwgMHhkMWI4MWZiNCwKLQkweDBiNGZhODZkLCAweDMzZWExOGU0LCAweDljMDMzNGVhLCAweDY4NjQ1MGQ1LCAweGM3YmY2ODNmLCAweDRiMDZlNzAwLAotCTB4MWM4N2VkMGQsIDB4YTFlMDFhZjUsIDB4ZjY4NmU1NGQsIDB4ODY3ZDliYzMsIDB4MGFkMGZjZmEsIDB4ZDY4OGZkNDMsCi0JMHhiMjNjMDM2YSwgMHhmZGExYTM2ZCwgMHg4NjAzMGZlOCwgMHg3NWVkMzFmYSwgMHgxNzcxZmE4NiwgMHg4NGYwMGMxYiwKLQkweGY2ODZmZDhlLCAweDFhMGY1ZGI3LCAweDFmYjIyN2VhLCAweGVkOGJlYTFiLCAweDkzYzAzMzNmLCAweGRhMTg1ZmQ1LAotCTB4ZDNlYzI1M2YsIDB4ODYyZDQ5ZWQsIDB4NWM0NDA3ZTcsIDB4YTRmYmFhNjIsIDB4MzllOWZkZTEsIDB4NTNmMDBjNjcsCi0JMHg4Nzk0NmY0OCwgMHg4NzkyNTZmOSwgMHhmNzgzZjU5NiwgMHgwN2ZkMDA1NSwgMHgxODZiMzdhYywgMHhmZGE5OTlmMywKLQkweGFiMmZkMGQ2LCAweDZkZmM0N2VlLCAweDUyY2ZlMjhkLCAweDk0N2NiNmE0LCAweGVkY2NhN2RiLCAweDZkM2U1ODY5LAotCTB4N2RjMTZmNzIsIDB4ODlmOGM2NmYsIDB4MmFjZWY2MTQsIDB4Y2IwNWI4NTksIDB4OWIzNjMzNDEsIDB4OWY0MGRjMTMsCi0JMHhhMGI3MDdiOSwgMHg2OGE5MGM5OCwgMHgxZTAwYmIzMSwgMHgxNmVjZTRiYSwgMHg4ZDYxZDIxNywgMHhmYzQ0NGE0OSwKLQkweGMxYWI0ODZmLCAweDg5YTZjNDcyLCAweDhmZDQxMjUyLCAweDgzNTg1ZGFjLCAweGZkNzE3NTdhLCAweDYxY2I4NTk5LAotCTB4ZDgzN2EzNWUsIDB4YTA5ZGNkODksIDB4M2UzMGRhMGIsIDB4NmY4ODdiMjYsIDB4ZTI5YjAwMzcsIDB4OGM4YzM2M2EsCi0JMHg1ZGJiZmNhNiwgMHgzNzE5MTU2MywgMHhiYTc2YmIzMywgMHhiODZlMzE2YSwgMHgxZDQxNjc2YiwgMHhhZmMwZGI5NiwKLQkweGFjNjIwZTBmLCAweDJjN2FmYzBlLCAweDFmNWY4Mjc3LCAweDM4NmU4NTg0LCAweDk0NTg4N2YzLCAweGE5ZTA3NTUzLAotCTB4ZGZkNzNjMjQsIDB4Y2Q1M2U5M2UsIDB4ZmIwYWUxYWMsIDB4ZTMwMTNkY2QsIDB4OGI0NDI3ZDYsIDB4NzM3ZWM3YmMsCi0JMHg3ZjQyNjYyNywgMHgwZjAwYWIyOCwgMHhkY2ZhNzFmOCwgMHhiZTFkZDI4MCwgMHgyYTNiYzQzNiwgMHgzNzJhMTcwNywKLQkweGQ3YmZhMWE0LCAweGMwYzBkZmFkLCAweGMzZTIyN2I5LCAweGEyNzgwNWZhLCAweGY1ZmE2ZGZjLCAweDc4NWZiMDc4LAotCTB4YzNkZTYzZGUsIDB4OWY2ZTFjZTQsIDB4ZjU5YWU0MDcsIDB4ZDdjYTAyM2MsIDB4OTQzYTJlZTIsIDB4ODBjNDk3ZTAsCi0JMHhkMzFmYWI5ZSwgMHhmODBlNWJlYSwgMHgxMzZhZDU5NSwgMHhmNzE2MzdkZCwgMHg0ZGE0MzA1NiwgMHg1ZjFiZTA3MSwKLQkweDcwMGYxNmRmLCAweDY0ZWY3ODkyLCAweDhlMGU2ZjllLCAweDcyZTM4MGFiLCAweDkyN2Y4YzJlLCAweGM2MWMwMDk2LAotCTB4YmYwMGZiMWYsIDB4ZjM1ZDJjZTcsIDB4MGU2N2RjYjEsIDB4MmMyZmEwYzgsIDB4MDY5YTY1YzUsIDB4MjBiOTNjZTMsCi0JMHhmYjlkMzY5YSwgMHgyMmZmNDZhYywgMHhmYzlkZTQ0YiwgMHhmYmNjNDczYywgMHhmZDBkMWNjNiwgMHhmNThiOWZhMiwKLQkweDhkZjdlZTNjLCAweGZkODJkOGZlLCAweDc5MzJhMGFmLCAweDQwZjk4ODQ5LCAweDU3OWEyOWNmLCAweGNiMGFkNGMzLAotCTB4OGNkYTNmZDcsIDB4MDdjMDRlZjcsIDB4OGEzYjQyNmEsIDB4Zjk4NzM3Y2YsIDB4Yjg3MzJiMWIsIDB4NWFmOTYyNWYsCi0JMHhhNWJhZjhhMiwgMHg4NWM1YWJjNiwgMHg0YzkxNmY4ZCwgMHg0ZmVkM2RkNSwgMHgxMDY1ZTIzNywgMHg1MTg2YWY3YywKLQkweDQ5ZjhlNWJkLCAweGFjOWY0ZmJhLCAweDUyOTY5ODM1LCAweGU3ODYyMTNmLCAweDNmODg0YTIxLCAweDRkMDVhN2VmLAotCTB4OTIzZTAwNGIsIDB4ZmY3YzM2ZTMsIDB4OTgxMmRmYTEsIDB4NGZiYzc4N2YsIDB4YmU2MTM2YWUsIDB4NmFhNmUyNDIsCi0JMHg1MTIxZTIxMywgMHhiZTc4NmFmNSwgMHhjMzVlZGNjOCwgMHhjNmUyNzVmOSwgMHgxZTNmYTNiNSwgMHg2YWY2ZjM4MSwKLQkweDk5NjEwNzk4LCAweGM4N2RmM2FlLCAweDljYjU0NDhlLCAweDcwMzI2MmQ3LCAweGVhNWVlMmRkLCAweDEzMTZiNzU1LAotCTB4ZjQzYWMzZGYsIDB4ZTdlNzY5NTIsIDB4M2JkNWJkNWIsIDB4YTZhOWRlMGIsIDB4YzUwMmQ3YmMsIDB4NGY1ODQ3OGQsCi0JMHgwN2U1MmJlNSwgMHgyM2IzZTA3YiwgMHhhOTJmZGMzOSwgMHhhM2U3MWE3NywgMHhjMjE3ZTdlOCwgMHgxOTU1NWM2ZSwKLQkweDZmNDI1YmI3LCAweDYxY2IxZmRjLCAweGYzZmI5ZmJkLCAweGNkZDkxMjBiLCAweDQ0ZGZiYmU2LCAweDVjM2FiMWU3LAotCTB4ZGUyMGUzMGYsIDB4ZDhiNDZmZWEsIDB4OThmNTZmMTEsIDB4OGJmNjQxNjcsIDB4ZmE3YWRkOTEsIDB4NzcwNzM5ODcsCi0JMHg0ZmYzYmE5YSwgMHg4OTAwMzkzNywgMHhiZTQwMjk4YiwgMHgwMWFjMWIzYywgMHhhZGYyMzlmYywgMHhjYTY5ZmExYSwKLQkweGU4NGNjYjgzLCAweDZhYjEyNDBiLCAweDQ2NTIxODRhLCAweGMzY2FiNDk2LCAweDcyYmYzMjZlLCAweGZhMjdmZjIzLAotCTB4NjRjMWYyOGMsIDB4MzdkZDMyNWYsIDB4ZmRkNTc0MTAsIDB4NzQ3NGVlODIsIDB4ZGUyMDY2MjcsIDB4ZTU3OWU1ZGYsCi0JMHg4OWRjZDNlYiwgMHg1ZjlkNDc0OCwgMHg2M2ZjOWZkNywgMHgwZThjMmY5NCwgMHgyZTdlMDgxZiwgMHhjYTEyMGQ2MiwKLQkweDQ0ZDY1OGViLCAweDQ2ZDY3OGU1LCAweDA3NTg3N2U1LCAweGNhYTYxZTk1LCAweDFhNjI0ZTU4LCAweDRiY2MyNTk1LAotCTB4NGQ1NjE0ZTUsIDB4YTA2YjI5NjUsIDB4YTI2YjFhNzIsIDB4YTM2YjA2NzIsIDB4NTQ1M2Y2MTIsIDB4ZmI0YTk5N2EsCi0JMHg1N2UwZDliZSwgMHg3OTk3Mzk2MCwgMHhhYWM3OWNhOSwgMHg3YzgwYmNhOSwgMHg2NzJkZjgwZSwgMHhjZGRmMDQwZCwKLQkweDA2NmNhODlhLCAweDg0MWVlMDNkLCAweDk1M2IwOTcxLCAweGM1OWU4MWFmLCAweDEyN2YwZGYyLCAweDliYmYyMTk1LAotCTB4OTcxODZkYjksIDB4ODRmMmExYzgsIDB4NmRmMmEzNWYsIDB4YWQ5NTExN2YsIDB4N2JiNTBmN2UsIDB4ZTU0YTVmYzcsCi0JMHhjYTk3YmYyOSwgMHgyYTcyZmVkMywgMHg2YTNlZmNkYiwgMHgwNTdmOWVmNywgMHhhYmY4MWY5NSwgMHhmZjM3ZmNhOSwKLQkweGY0M2YyYTQ2LCAweDc3ZmNhODA3LCAweDU5OTUxZDdmLCAweDA2ZmI0NjU2LCAweDlmY2ExMzk2LCAweDM5NDhmNDBkLAotCTB4ODFiOGY1NmYsIDB4MWNiOTA1YWUsIDB4ZTYzZGM3OGYsIDB4YTQ3OGRjODQsIDB4ZmUzMGNjYTcsIDB4MjcxYzk0YWEsCi0JMHg2NmRjNTEyNiwgMHhlNzU3YmZiYSwgMHhhMzE2YzYzZSwgMHhmZGNkM2UzZSwgMHg4M2EyNDc0OCwgMHhlMWE1NTRmYywKLQkweGM4YmNjMzA0LCAweGQ0YmI1MzY2LCAweGNmNmI2ODA3LCAweGU3YjVjZmY1LCAweDhkN2YxZDgyLCAweDEwZDFmNmQ1LAotCTB4MDc2M2RkYWUsIDB4YTViNGY0N2IsIDB4NTA0N2ZhYWQsIDB4ZjM3OGZkMmYsIDB4Y2VkODNiNWMsIDB4M2VmNzhlYjEsCi0JMHg1NGMzOTY3YiwgMHhhYjA0ZTYzZiwgMHhlNjc2MDE1MSwgMHg1NzgzZGY2ZSwgMHhhODFlNzBiMiwgMHhiYzdlOTNmNywKLQkweDRjZTZlZTYzLCAweDI3ZDcyNzljLCAweDUwMGQ3N2IwLCAweDg1M2FkNWZlLCAweDFiZjJhZmYyLCAweGExYTNlNThlLAotCTB4MTRhZDUzMWQsIDB4NmIwYmRkYTAsIDB4ZGU4YWYxNDcsIDB4ZWJkNjQ1ZGEsIDB4ZTk1OTNkZWYsIDB4ZjUwZjEwOTIsCi0JMHgwMWVkYTA3ZiwgMHhlNTA4Yzk0YiwgMHhiYzJjNWM2MywgMHgxYmI3ZjM1ZiwgMHgxOTM3NDk5ZiwgMHhlOTlkYmMzZiwKLQkweGNjOWRmZDI2LCAweGZlZTZhNGYzLCAweDkxZTdjMDdmLCAweGZhZjk2ZGZjLCAweDNiZThjZmY4LCAweDBhMjNhYzFmLAotCTB4OTYzMWJiZTUsIDB4ZjAwZTlmZWIsIDB4NTVmZjcxOWIsIDB4Y2RmYWUwMmYsIDB4Mzc0N2U0ZTksIDB4ZGY3Mzc5ZWEsCi0JMHgzMWJlYTk5MywgMHg4YWQyYmI1YSwgMHg4YTRjZTZmMCwgMHg3YWM3ZDQ4NywgMHhmZGIxNzNhMiwgMHg0M2QyNzRkNiwKLQkweGU1MTg3ZDI5LCAweGRlZDJlZGJkLCAweDcyNjFkZDU2LCAweGViOTczNTNmLCAweDM1YzI2NTVkLCAweDhiZWEzMTc1LAotCTB4OGYwY2M5ZWYsIDB4ZWY3ZTA3ZGEsIDB4MDFkYmQ2ODMsIDB4NjZhZGVlNmYsIDB4Y2M1MjllZmEsIDB4ZDE0YTBmODQsCi0JMHhjOTM3MDQyZSwgMHhmM2ExMjRhMywgMHgzYTJmZDUxOCwgMHg1ZGJhZmI4MiwgMHgxYjNhMzU5YSwgMHg1MTEwN2FlOCwKLQkweDlkNWZmZTg3LCAweDRhNWZmZTQyLCAweDdlM2U1MGRmLCAweGNjYWI2YTU3LCAweGY1MjJkN2YzLCAweGJlMzE2ZWRkLAotCTB4ODZkODUxZDksIDB4NmY5ZmFkZWYsIDB4YTRiYzYzNzcsIDB4ZWY1OGZkMzcsIDB4ZjllM2U0MGYsIDB4YjdkYTJiYjcsCi0JMHhhYzNjODE5MCwgMHg3ZTNlN2RjOCwgMHgyZTE1MzgyYiwgMHgxZTZiZjcyNywgMHgxNzM2M2RjYywgMHg4YmQ1NDNlZiwKLQkweGYxYWRkOGJjLCAweDhhZGVmYTY2LCAweDI4M2FlMDUyLCAweDU4YWJmNTg1LCAweGIzYjI2ZTQzLCAweDYyYzcyMTY2LAotCTB4NTIzYmY1M2QsIDB4ZmJiOGVmMjgsIDB4ZDdmNjhkM2MsIDB4YzIzY2MxYTEsIDB4ODhiZDc0ZjQsIDB4Mzc4ZTc0NWIsCi0JMHgyOTQxZGZhMiwgMHhkOGE3YWUyYywgMHhhNzhkMWE0MiwgMHhiYzdkMzNkYiwgMHhmMWJkZmY5ZCwgMHg0ZjdjODk3NiwKLQkweDI4YzczYzdkLCAweGQ2MWNmYWUzLCAweDQzOWY1YTM2LCAweDc4ZmE0MWY4LCAweDNkN2Q3MGJiLCAweGUzN2M4ZGU0LAotCTB4ZjBiZWI4NzgsIDB4ZDcxYjQ2ZjEsIDB4ZDFiNWIwZTcsIDB4ZjcxMjFjZmEsIDB4ZGJjNzNhNmIsIDB4YmQ3OGYzZDksCi0JMHgyMjM3YjM4ZCwgMHhmNzJmNGZmZiwgMHhkYzEzZmYwYSwgMHgxODBlNzY0MywgMHhmOWM2YzUzNCwgMHgzMzBiNjlmOSwKLQkweDkyYmMwMzljLCAweDFmZjNlZGNiLCAweDU5NWYzOGYyLCAweGM5N2FlMzZlLCAweGZkZDJiMmUyLCAweDhiYWU4OWE0LAotCTB4OTVhZjkxYmIsIDB4MTczYTY2M2QsIDB4MjZkZmUyNTMsIDB4M2M0ZTRiM2YsIDB4YTdkYTI0YzUsIDB4ZmU3YzI2YjIsCi0JMHgxN2JmODliNCwgMHg5OGY2YjA0OCwgMHg1ZmQ3YjM2NywgMHgyYzMzM2EzNCwgMHg1NWE4OWRhZSwgMHg2YjZmMzA5YiwKLQkweGUxOTVhYmEyLCAweDZmMTI4MDM5LCAweGYxMmJmNWE1LCAweGVhMTQ2MGY2LCAweGQ4MDk4ZDVmLCAweGZlODNlYzFhLAotCTB4OGJkZjUwYzQsIDB4OTc0ZjMwYjksIDB4MTVjNWU1YzYsIDB4Zjk4ODNkNmYsIDB4ZDBlNTg5NTQsIDB4OWUzZTE4NmYsCi0JMHhlNGNjN2MxNiwgMHhiMGIyYjRmNiwgMHg3OTFkNDJmYiwgMHg1Y2JhMWYxYywgMHhjMzZmY2U0NywgMHhjNjg3OGU2MCwKLQkweGVhMmFmMDQ5LCAweDhlM2MzMWNkLCAweDNmNzBmYTczLCAweDdhY2NjN2RhLCAweGZiODNkYTM0LCAweDA2M2JkM2ZjLAotCTB4NzNiYzEwOTcsIDB4OWMwMWU1MmMsIDB4MGE3NjNjM2UsIDB4ZWQ2NjZiZWUsIDB4ZDgyNjY2OWMsIDB4M2UzMTVhYzQsCi0JMHhkZGU3NmIzMywgMHg5MjllN2M2NiwgMHgxZGZlODhjMSwgMHg1ZmE0YWQ2NywgMHgyNTVjZWQ2NywgMHgxNGQzZmZkYSwKLQkweDBlNjQ1ZjZjLCAweDFhZTMwNGZjLCAweGVkMWQwZjQ1LCAweGIxOWI3MTgzLCAweDYzZmExNzhlLCAweGJlZGNkYTc5LAotCTB4NzQ3N2JmMDEsIDB4ODU3ZWNhODcsIDB4NzM3NzliZWUsIDB4N2Q0ZDAzOWMsIDB4MGI3NDhlZDksIDB4OTc3ZWM1YzYsCi0JMHhlNjk3Y2ZjYiwgMHhlNzg1OGYzMCwgMHhlZTI5Nzg4ZCwgMHhkYjY4ZmUzMCwgMHhmYzgyYmM3MSwgMHg2MjhlYTY5ZCwKLQkweDM0Zjc2ZTNjLCAweDljYjAyN2FiLCAweGM4NGFkMjE0LCAweDllZjU2YzJkLCAweDViNGE3MmMwLCAweGJiYmEwOTc1LAotCTB4OWMzNjFmYTUsIDB4Yjg2MWIyYzAsIDB4ZGY4ODc3ZWYsIDB4MmE4ZTBmYzMsIDB4NDljNjA2NzgsIDB4NjhkY2VlZmQsCi0JMHhiN2QyNzdmNCwgMHhhNDFlNGU4NCwgMHhlZTg1YjFiOCwgMHhmMjJkZWRiOSwgMHhkZTMwNDlkNiwgMHg4ZWQ3Yjc1ZSwKLQkweDdjNmY2ODc2LCAweDZiZjQ5OWJhLCAweDVhMGFmNTZjLCAweDg2Njg4MGU3LCAweGZhYWJkY2ViLCAweDZmYmZkMGEyLAotCTB4ZWY0NmU3MTQsIDB4MmM0NzMxZjgsIDB4N2YzNDc5ZWMsIDB4YmZlMDk5ZmUsIDB4MWVkN2FhYWQsIDB4NTJhMDcyNGIsCi0JMHhmYzIyODNiZSwgMHg0OWU2N2FiNCwgMHgzYjI4NDM0MiwgMHgxYjhjNDEzYywgMHgzZDcwZjVlZSwgMHg3ZWY4NTAxZSwKLQkweDAzNmY5YjE5LCAweDk4YWU4ZWJmLCAweDI5ZThiYjlhLCAweDdmMzFiMjZiLCAweGVjMWJkYzFhLCAweDUwZWQxNjU3LAotCTB4ODgzZmEyMTcsIDB4MDYxMTZlZDcsIDB4MTNiZmMxZmIsIDB4NzQzZGI4YzQsIDB4NjczYTJlMjgsIDB4MTcyZmU3ZDAsCi0JMHg3YzYxN2Y0MiwgMHhhZDlmZjM4NiwgMHg4ZmE3YmQ3NCwgMHhmNjE2MGVhYiwgMHg1ZWQzZjA0MSwgMHg5ZjRmZWYxZiwKLQkweGI3NjBlYzZmLCAweDczMWI1ZWY4LCAweDkyM2U3MTliLCAweGMzYWMwZjk4LCAweGIwOWYzNjFjLCAweGNlYmViNDc2LAotCTB4ODkyZDMzNzksIDB4MzBmNTlmZGYsIDB4Yjk5NmFmN2UsIDB4M2JmNWIwZTUsIDB4NDRiYjVlNmQsIDB4MjJhY2QwNzYsCi0JMHgzMzM0M2FmZiwgMHgyODcwNGJkZCwgMHgwNGZiYTczZiwgMHgxYWM4ZWI5MSwgMHhkZjY5ZTNjYywgMHgwNTFmNjE5NywKLQkweDc5YTY5OWViLCAweGY3ZTVjYTE4LCAweDU1ZjkwZjU1LCAweDc4ZTU4MGIyLCAweGUzYzk4N2VlLCAweGQ4NGIzMTI3LAotCTB4NDlmOGU1N2EsIDB4YjQxYTZlZDQsIDB4YjRlN2Y4YzcsIDB4ZjIxYTNlYTIsIDB4NTRkNjc0ZWIsIDB4YzE3ZGYyYWIsCi0JMHg1Zjk4NGM4OSwgMHhmYzg2NjMxNiwgMHg0ZmMwNTk3NCwgMHg5NjUwYmY5NiwgMHg3MWFiYzZlNiwgMHhlODM5MmQwZCwKLQkweDhjYjAzZDE3LCAweGQ3NmE4Y2YyLCAweGY5YzU2YjRmLCAweDZiYWNlNTI2LCAweGVmN2E4Mzg5LCAweDJjZWU5YzU3LAotCTB4ZmIwZGM3OWYsIDB4NzkwZDkxZWYsIDB4MDAyYmM5Y2IsIDB4Zjc1ZjNmMGUsIDB4MDdlMDYxMTksIDB4YWY5ZDdiNDMsCi0JMHg4YWE5NTMxNCwgMHhjZmI5ODQ3ZSwgMHgzMDU5ZGQ4ZCwgMHhlZGM5ZDk3ZiwgMHg2Y2I4NzgzNywgMHhmMmYxMGY2ZSwKLQkweGYwMjU3YzZlLCAweGM2NjdkM2FmLCAweGE3YzI0Y2UwLCAweGIzYmM3MGFjLCAweDI3N2VjZDBlLCAweDFiZjExM2E3LAotCTB4ZDVlMzA5ZmQsIDB4M2U2MmQ4ODAsIDB4MTQ4OTRkN2QsIDB4OGVhMWZiYzQsIDB4MDEyY2Y2Y2UsIDB4YTc0OTFhZTksCi0JMHhlZWM3NWI3NCwgMHg5NTdmNWMyYywgMHgyM2RiZjI5OSwgMHhjNDdlMGFmMSwgMHg2N2M4Njk5ZCwgMHgxZWE5ZTI2YiwKLQkweDNhYmU1MzllLCAweGY2NzUyMjY2LCAweDFiMDRmNTIzLCAweGVkNGRmMWU5LCAweGRkYzE2MDlmLCAweGY4ZDY0ZjNjLAotCTB4ZTBiZTI5M2MsIDB4OGE0MjljOWQsIDB4Y2M5YzY4NDcsIDB4MGRhY2ZhYzYsIDB4OGM2MmJhNDYsIDB4YTI3OGY1MDksCi0JMHhiNGExODJjNiwgMHhiNGU3YTc1YiwgMHhhNjEyYzZmOCwgMHhjZWFiYTc3NCwgMHg3YjdkMjk3NywgMHgxMGYyZjNkNiwKLQkweGVhMDNiMDkzLCAweGYzZDQxY2I0LCAweGZmZjI2NjA5LCAweDg0ZTYwOWJjLCAweGQ2ZjA3ZGYwLCAweDcyNWY3Y2MxLAotCTB4ZTkwYTJiZGIsIDB4NGVkZTc2NmYsIDB4NTBiNGVmZjcsIDB4MTNmNDFmNWIsIDB4OTMzMzVkMjcsIDB4YTlkNmZlN2YsCi0JMHg4MzRkOGY2MywgMHg5NmFmZjI3MiwgMHhjOWJiNjFkNCwgMHhiZjQ2ZWRiMCwgMHgzNzJiZTg2MiwgMHhiZjI2MmM0NiwKLQkweGU1MTcyZGE1LCAweDNhMTY1NWY1LCAweGIxZjY4MmQ5LCAweDgyNzE0MmQ1LCAweDUzNmY5ZmNkLCAweDM1ZmQyMTI3LAotCTB4N2QzZTcxNDYsIDB4Yjk4MzIzZGMsIDB4MjVhNWZhOWQsIDB4OWE3ZDI1ZTAsIDB4N2U0NmIzMjYsIDB4NmJlMzc2NWUsCi0JMHgzZTNjNGU5ZCwgMHhiMmM3Nzk0NCwgMHhhYmRkYWY4OSwgMHhiZDkzNTc1NSwgMHgzNjYzYzk0YywgMHhhZGI3Yzc4YSwKLQkweDIxYmM3YjI0LCAweGNjYmNhMTlhLCAweDQxZWU5YjU2LCAweDE3NjVmNjc4LCAweGIzN2Y0MzMzLCAweDIxNjViNzM1LAotCTB4M2YwOTFmOWUsIDB4NTlhYThlNzMsIDB4NjlhOTYyMjYsIDB4M2Y5ZGI5ZmMsIDB4ZTg3YWFiOWYsIDB4YzNjZDVjZjksCi0JMHhiZjdjMmI5ZiwgMHg2ODFhYTc3ZiwgMHg3NzdmNDNmMywgMHhlYzZlNzEyYSwgMHhjYmNkNGVlZiwgMHhhOGRiYWZlYiwKLQkweGZmZWMxNGZlLCAweDQ3YjRlZmQwLCAweGViZDQ1NDA1LCAweGZjY2QxNzBkLCAweDRkMTdjZTdjLCAweDI5NTViZWZjLAotCTB4ZmNlMzc1NjgsIDB4NGY3NGNkMGEsIDB4YmEyNGZjMGYsIDB4ZjU0YmJkNWYsIDB4N2RlYWZkZDIsIDB4MDg4Yzk3Y2MsCi0JMHgzNjcwYjU3ZSwgMHhjNmFmZDFmOSwgMHhkNWZlZTk5YiwgMHhlNTMzMWVhYiwgMHg2NDJhMDU4MSwgMHhmMDUyMWY3ZSwKLQkweDI5ZTVhYmQxLCAweDhlOTY3ZTc0LCAweGRkN2E0NGM4LCAweDY0M2YyNzYzLCAweDYyNDQxZTJiLCAweGRjN2VmMmZiLAotCTB4N2ZkY2M4NWUsIDB4OWUyYTNmZDgsIDB4MmM2ZDNiZGEsIDB4ZTBmOTE0YWUsIDB4ZjJmOTRjYjAsIDB4ZTNjZjFmZGYsCi0JMHhmNGExZjI5OCwgMHhhZTZiZmEyMCwgMHhjYmJjYTMwYSwgMHgzZjM4OTM4NSwgMHgzOTQ1NGM2OCwgMHhjNDY5YTE5OCwKLQkweDk4N2IzNWY3LCAweGRjOTM3NjY2LCAweDU3NDBmYmQzLCAweGMyYWVlNzVhLCAweDIyZmE0YWY3LCAweDI0ZDM0NmJjLAotCTB4N2QwNjE4MmUsIDB4MWVmODUzNTEsIDB4NGNjZjgzYzcsIDB4MGFiYmVmZjksIDB4NDliZWZiYzUsIDB4NWQ3YzcwODcsCi0JMHhmOTBiMDdjZSwgMHg3NzRhZjVkNCwgMHgzZjUxYTQzZCwgMHhkYTQ5ZDg4ZSwgMHhjMzA2ODA0ZSwgMHhmYmZmMjgwMCwKLQkweGY1MWNmMGFkLCAweGY3NGM5YzQyLCAweGNhMTcwNmM2LCAweDk3NTg3NTIxLCAweDdlOGIyN2RjLCAweDk0ZjkwYjA3LAotCTB4MmNlNTFhOGYsIDB4N2UxMTkwZWIsIDB4N2VlZmM4NWMsIDB4NjJmYjkyMTYsIDB4Y2U4YzBkYmYsIDB4MTgzN2ZhY2QsCi0JMHhjN2NlYzFkYiwgMHg1MjJjN2E4NCwgMHgzZjBiYWY4ZSwgMHhkZDBmMTIzMywgMHg3OWViZWNmMCwgMHgwYWViNWQ5ZCwKLQkweGJhZDM2NTQ0LCAweDQyNWQ3Y2NjLCAweDViMmE2NWRmLCAweDJhYTY3OWU4LCAweDE3OWM2ZTZiLCAweGQ3MGY3ODZiLAotCTB4MGM5MGZmZGYsIDB4YWJkMDJhMGUsIDB4ZTMxYjNjZDAsIDB4MzIwMjMzM2MsIDB4YWM5OWJiYTksIDB4MzdjNWY0OGQsCi0JMHg4OGFiN2JhZCwgMHgzM2FlNDU3MywgMHgwNmRiN2Q3MiwgMHg2NGJmNWM0YiwgMHgzN2U0YmNmOCwgMHgzN2U0Y2IyNSwKLQkweDYzMDNkNjU5LCAweGU1NmJjNzBjLCAweDIzYjc5ZGRlLCAweGVlY2U4NzVkLCAweDU5ZGEwNDMzLCAweDYyYTU1ODFmLAotCTB4N2ExNTVhNWMsIDB4YzRiNWYyYzksIDB4M2I2MWViZjksIDB4NzEyNWFiZjEsIDB4N2RmODRlNDYsIDB4MjRkYTkxOWIsCi0JMHg1MWM1MDg3NSwgMHg4NDFjOWVhZiwgMHgyZDc3Yzc3MSwgMHgzZDQ4ZmY4NCwgMHhjNzA4NjYzNywgMHg2Mzc2OThmMywKLQkweDhiYjhlNDVlLCAweDdjNzkxMWQxLCAweGRiYzhiY2M2LCAweGM4OGJmN2FlLCAweGM4ODhjYmUzLCAweGE4NjIxYmUzLAotCTB4ODg4ZWFjOWYsIDB4MTcxYmUzYzgsIDB4NmM1N2M3OTEsIDB4NGNlN2E3ODAsIDB4OWJlM2M4OGYsIDB4MjhlZjgwNjMsCi0JMHhiZWQwYzdiYSwgMHg1MGQ4YjNjYywgMHhiNTc0YTczZiwgMHhlZjRlZmVhMSwgMHhhZWY4MDZmZCwgMHhlZDBkODdmMiwKLQkweDBjNmFmYmU3LCAweDc4YWNmN2Y1LCAweGZhMGY1MGM0LCAweDczYjhjN2EyLCAweDg3YWUxMGYxLCAweDZkM2M5MzZiLAotCTB4MTAzMDgxZjQsIDB4ZmUwZjZmNzgsIDB4MWRjYWE0ODAsIDB4ZDljN2Y2ZTEsIDB4NTZhMmZlY2IsIDB4N2QyOWUzZDAsCi0JMHhlMjQ4MTI3ZiwgMHg4ZjExNjY3MSwgMHgxMGM0NzcwNSwgMHg5ZDhkMGRhZiwgMHg1MTdkYzc2NiwgMHg0NDRiNGQ5YSwKLQkweGNkN2VjZWJiLCAweDU4NTgwNmVkLCAweGM0ZTZmOWMzLCAweGRkYTk0YjA3LCAweDNhNzRkOGZhLCAweGZjMDI3OTg3LAotCTB4YzBlODFmNmMsIDB4NzdjZjIwZGEsIDB4NmYwMDE3ZTksIDB4YWJmNzllMWMsIDB4ZjVkYTEyODUsIDB4NzhhNTZlYmIsCi0JMHg1ODNjZTc2ZSwgMHg1NTc3ZjUyOSwgMHhmM2VhMmY5YywgMHg0M2YxOGZkYywgMHhlY2RiZWUxYiwgMHg1NGNmMzI1NCwKLQkweGUyOGUzZjFlLCAweGU5NzUxZWVkLCAweGMzMWE5NmU3LCAweGQ2NDUxZDdlLCAweDE2NGJlNTAwLCAweDMwYWM1YjA2LAotCTB4OGZkMDVhZGYsIDB4OTc4NDlhZjgsIDB4NTVkZGExZWMsIDB4M2RlOWJiNDUsIDB4MTI3ZjFhYjAsIDB4OTY1MjBmZGQsCi0JMHhlODE2MDI4NCwgMHhiZjI3ZWFiMiwgMHhmMGUzZTFmOCwgMHgxNDYzZTJiZSwgMHgyN2Y4NzhhNywgMHg3ZTIxZmNiZiwKLQkweGM0M2ZjNDA3LCAweGM4NzE3NDRkLCAweGVlZmJjZjFjLCAweDg3NGJhN2ZkLCAweGJhYzY1ZjUxLCAweDY0NjI1ZWU4LAotCTB4OWI3ZGUyN2QsIDB4MjZlYjdhYmUsIDB4M2MxNmZiZjUsIDB4MzdhNWRiZjgsIDB4OGRkZWZmN2IsIDB4ZDU4NmI3NjcsCi0JMHg1OTdmMzZmNywgMHg2MTNjYzdlOSwgMHgzNTZhOTA3YywgMHhjYmQ1YzNkZSwgMHhhYWJlMGJlZiwgMHhmOGE1NmIxYSwKLQkweDU3YzkyY2U1LCAweGU1ZmNmMjhmLCAweDcwN2FmZmQ4LCAweDQ1ZjdiYzNiLCAweDcxN2JiNWM5LCAweGJmY2YwNzdmLAotCTB4MWRhMWNmOGYsIDB4OTQ4YmY1ZTEsIDB4M2NmOGE5MmIsIDB4ZmZmODA4NjUsIDB4NThhMzY3NjgsIDB4NmY3Y2Y5OGYsCi0JMHg4YjdlZTEwYywgMHg0MWQxNTg5YywgMHgyYjA0ZjNmYiwgMHhmNjVjODdjNSwgMHhlZTNmYTNmOSwgMHg0NDczNThjYiwKLQkweGY3MWVhMGJjLCAweGY3YTc2MGU1LCAweDFlODhmODhhLCAweGY0NDE3ZjJmLCAweDkyOTQ0NDczLCAweDQxY2U5ZjNhLAotCTB4Zjc0MDNkOTgsIDB4YjE3Zjc1NjIsIDB4OGIzODNjOWIsIDB4NjUxYmVlMTgsIDB4YWUxMGJlNDUsIDB4YWMxMjViMTcsCi0JMHg1NDkwMWYxNCwgMHg0Yjc3ZTUyYiwgMHgyZWZhMjhlYSwgMHg3ZDFiMDRhMiwgMHgyODcyNDczYywgMHg2OGNmYjQ2ZCwKLQkweGYxNDUxODQ5LCAweDg2MzQyOTAwLCAweDEyOGEwY2UyLCAweDQwZGVmZWEyLCAweDdlZTAyNGJhLCAweDc3ZGZiOGM2LAotCTB4NWQ2ODJiZDksIDB4M2FjZmY3YmQsIDB4ZWI0OWY3OWYsIDB4Nzk4ODljNjEsIDB4MWY1ODc4ZTAsIDB4ZmM0MWNlMzksCi0JMHg5YmRhMWMyZSwgMHhlMzFlZjY2NSwgMHg0Yzg2ZDcxYiwgMHg0YWY0OGUzYywgMHhiZWVmYjViMywgMHhmZGY1ZTUxZCwKLQkweDVlYjJmNTllLCAweDMwN2Y5ZTYyLCAweDg2NjczZjBjLCAweDYwNWYxM2E0LCAweDZjMzA3ZjdlLCAweDBmZTNjYzVjLAotCTB4ZTgwMzgxODcsIDB4NjBjMTA3OWUsIDB4NDJkODA2NmEsIDB4YjlmODgzNTEsIDB4NmY1NzhkMDUsIDB4M2ZjODkyZDUsCi0JMHg3NDg3ZjMwNCwgMHhlNzkwOGRmYywgMHg2MWFmMDIzZiwgMHhjM2VjNTdiOSwgMHg2MzVjODNmNywgMHgyNTVmODRmOSwKLQkweGM4MDBlZDNmLCAweGZiNGZjMjFmLCAweGZkMDY1NGRkLCAweGZhMzY1NDM5LCAweGU0M2ZhYTM1LCAweDg4ZjgyMjJmLAotCTB4NTFmMDQzZGYsIDB4Y2Y5NTI5N2YsIDB4ZmNmNGJkZmEsIDB4YzEzOTdmMzksIDB4YThmYmY1M2YsIDB4YTBhZmYyNmMsCi0JMHhhYmY4MmZlNywgMHhiZmM5N2UwOSwgMHhhMzlmZTA5MSwgMHhlNzg1OTg1ZiwgMHhiZTU0NzUxMywgMHhmYWEwNmZlYSwKLQkweDA5ZmJmY2Q3LCAweGE0MWZjMzdlLCAweDRhM2ZlNDMyLCAweDliZjk4ZmNmLCAweDZmZTEzZTA4LCAweDdmNmRmODI2LAotCTB4N2Y1NmUwODgsIDB4ZjhlZjk1MmIsIDB4MjlmOWU4ZGIsIDB4YTMwNDg3ZmYsIDB4NDVmZWUyM2EsIDB4ZTAzZjE5ZDIsCi0JMHhkOTgxNzEyNSwgMHhlMjVlN2U4ZCwgMHg0YmIzNDU4MiwgMHgyZTU3ZGUwMCwgMHhkNzYxN2RkMywgMHg0MWQyZjk3YywKLQkweDM0Mjc4YmUwLCAweGZiN2JmNjk5LCAweGVlMjk5ODU2LCAweGZiOTVmYmEzLCAweDE2YzdkNjJhLCAweGFhNWNmZDUzLAotCTB4MjY4ZDQ4NmYsIDB4MTJmZjZjYmYsIDB4NTcxZmRkMmIsIDB4OTY3ZjcyNTYsIDB4YmRhODU1MmQsIDB4ZmQ1MzJmOTIsCi0JMHg5MmU2MmIxMywgMHg1MzhmNThkZiwgMHhkOTJhZTcwMCwgMHgxOTMxZDgxYywgMHg5MzMyMmRkYiwgMHgxMTFmZGVmZSwKLQkweGUzY2E0ZGQ3LCAweDRmMjkzZjc2LCAweDhmYWZmN2U2LCAweGNmYzIwNTQ2LCAweDYyOWIyYjI5LCAweDczNTU3MDBkLAotCTB4MzBlM2UwNzIsIDB4YzYyZDU5YmUsIDB4MWM5OTFiNjEsIDB4Y2ZjN2RkZmUsIDB4YWYzMDdmZjcsIDB4OTBmOWQ2MDQsCi0JMHgwM2NhNGJlNCwgMHhlMDcxN2M3YywgMHg5OWQ4M2NkYywgMHhjM2JkYjMzMiwgMHhjY2U0ZjI4YSwgMHg4ZDRlZDllOCwKLQkweGViY2ZkM2NmLCAweGZlMjI0ZTkyLCAweGUxMzI2OWY2LCAweDYxYjY5ZjZmLCAweDJmZWUyNjVhLCAweGRkZjRjODE2LAotCTB4ZjIwNWM0OGMsIDB4ZTk5ZmI4NTcsIDB4ZmJhNjVmMzcsIDB4OTk0YWNhYTQsIDB4ODE2YzgxZTIsIDB4MDM2M2UwNTksCi0JMHhmY2RmYmJhZCwgMHgwZWFmNTRiOSwgMHg3NDcxNDUzYywgMHg2ZDEzY2FkNywgMHgwMTZmZDE5MywgMHgxZDExNjU3YywKLQkweDM5ZTJjNTBlLCAweGJiODhiMjZlLCAweGE2OGY4ZmVlLCAweGY5YzhiNmJjLCAweGYxN2JmZjhjLCAweDMzZjAwOWIzLAotCTB4OGNmYzQ3YWEsIDB4NGYzZjA5ZWYsIDB4ZmRlM2ZiODgsIDB4MjIyMjc3YzQsIDB4OTc3ZmE0ZjEsIDB4N2RmMTA5ZjUsCi0JMHgxZTA2YzBmMiwgMHgzNzZjOGZiZiwgMHg3MzFmY2M0NywgMHgyZTNiZThjZSwgMHg4ZmU5MzI5NSwgMHgyM2I4MmMwMywKLQkweGY5OThlMzFiLCAweDdlNDNkZDMyLCAweGIzYWFkMjdjLCAweDNmM2U2MTA3LCAweDkxZGRmM2M4LCAweDJjOWZlZDA3LAotCTB4OGVhMThmOTEsIDB4ZmRlNTJiOGQsIDB4MWYyMzVjMGYsIDB4N2UwMmJlNDEsIDB4ZGEwNDc5NWQsIDB4ZTkzYmJmNmQsCi0JMHg3ZDk0MzY0YywgMHg4YzE2ZWUwMywgMHgxZjQ2M2FiZiwgMHhmOTg5ZjY0OCwgMHgxNjE3NjRmNiwgMHg4MGZiYmYwYSwKLQkweDJiNGZjNDQ3LCAweDY1MWEzZGY5LCAweDEzZGM5ZWU1LCAweDM4MDVkYzdjLCAweGI1ZjUyYmFlLCAweDAzMDlmOGE5LAotCTB4OTMwZWRjZjcsIDB4Zjk3ZWNhMDUsIDB4Y2YxYzNhZjIsIDB4NDlkMjRmNzYsIDB4ZTAyMTJmMWMsIDB4YzdjYmM3ZDEsCi0JMHg5ZTJkYmVmMSwgMHg5MjViYmY1MiwgMHhmMWJkZDNkOCwgMHgzN2UxZjRkZSwgMHg3OWY1YzFlOSwgMHg3ZjUxM2VlMiwKLQkweGUwZjUxZmQ2LCAweDhhNzY5NmUzLCAweDcwY2UwNzUzLCAweDM4YjRjODNkLCAweDM5MTdiZmJhLCAweDI3Zjk2ZjRlLAotCTB4NjQ5ZjgxMDEsIDB4ODg2ZjNmMWIsIDB4ZTc0NzZmN2MsIDB4ZjAyMDI1YmUsIDB4ZjI4Y2FmZDgsIDB4ZTJjYjI2YjQsCi0JMHhmNjhjZmFiYiwgMHg0NjI3ZWJkYiwgMHg3MjZmOWJhYiwgMHhkNDAzZjMxZSwgMHgxZWFmYTBiZiwgMHg5ZmEyNjNjZSwKLQkweDFmYmNhOTk0LCAweDAyNjdlZjMzLCAweDQ0ZjA0NzViLCAweGU0ZGMwZDQ1LCAweGU4OGY2MDFjLCAweDAwZmQ4ZmM3LAotCTB4N2JiZjFmN2UsIDB4MThhZGVlYzUsIDB4NDJkNzdjYjcsIDB4YzkwZTc0YjksIDB4Y2VmNDliYjcsIDB4MWZkYTI1YWYsCi0JMHgyYjBkY2NiOSwgMHgxN2Y1ODc4ZiwgMHg5ZmE5N2MxNCwgMHg0OGRlNjA0MywgMHg3OWQ3NTY1ZSwgMHhlYzA1NTI0NCwKLQkweGFkZjBjMjkxLCAweDg4YjhmN2JmLCAweGUzNzkzZmEzLCAweDliY2E1OGExLCAweDg1MTBkZmM4LCAweDY2M2VkZmZlLAotCTB4MmM1MDNlMjcsIDB4MGMzZjM1MjEsIDB4N2Y4OThhN2YsIDB4ZmU3MjI3Y2YsIDB4N2FhY2YyYzcsIDB4NzEzMjgwNWUsCi0JMHgzMjIzOWUxNCwgMHhmNTE5Y2Y3ZSwgMHg3NWZiY2MyOCwgMHhiNzdmOTM5ZiwgMHhkMzA3YzE2OSwgMHhmZTNjMDM4NywKLQkweDBmZTc0YzlhLCAweGZjZDFhNWFlLCAweGNjMWZmNmZlLCAweDg2ZjQ2Nzk0LCAweDY3N2UxNzg4LCAweDYzZGQwOTZkLAotCTB4ZjcxMmMyNGIsIDB4MDU0ZmI4YTcsIDB4YTYyNmZjNzgsIDB4OWY3ZGYwODUsIDB4MDljMWZiNDIsIDB4ZTE3M2U1ZDcsCi0JMHgwYWIyMDk3ZSwgMHgyMmVlMzdmNiwgMHhiOGYyZjhhMywgMHg2ZjcwZDkwZSwgMHg2MzQ1Y2M2ZCwgMHg4NGJmYTA3YiwKLQkweDc2YTRkYWZiLCAweGExNDRiYjYzLCAweDE1MjM1ZGZmLCAweDdlOGZmZWZhLCAweGQ3ZjVkMDZmLCAweDY0YzViOTdkLAotCTB4ZmY0OWEyMjcsIDB4MjRjOWE5M2YsIDB4MmExNjRmY2YsIDB4NzZkZGIxMDcsIDB4ZmI4NGJiM2IsIDB4YmI3Y2M3NDQsCi0JMHhjNWEwN2E4YSwgMHg1NTdhNGQxNSwgMHhmZTRkMTExOSwgMHg2Mzk0ZjZmMywgMHg5ZmMwNzZmNiwgMHgyYTA3ZTQ2ZCwKLQkweDZjMDMyYmZhLCAweGJiMTg4M2JlLCAweGFiNzNlZGZlLCAweDIxOGQyNWU3LCAweDVkZjVkZTNkLCAweDNiYjAyMmUzLAotCTB4ZjI4MmY5NzgsIDB4OWRlY2Q2OTksIDB4MTU3OTg5OWMsIDB4ZDhlZWZhNjYsIDB4N2FiNzNjN2YsIDB4MjI3N2Y4NmYsCi0JMHgzMDc1MjRkMywgMHg4NGVjNTdjZiwgMHhlMGRmYTE1NywgMHg0MThmYjljMCwgMHgzM2VhMDYzZiwgMHhkN2M2MWNmMCwKLQkweDI5MjE3YThlLCAweGY5MDViYWJlLCAweGI2Mzk1ZWFhLCAweDg1ZDBlMjgyLCAweDJkNTdhNGYxLCAweGVhMTBlYWJlLAotCTB4YzBhZDdhODksIDB4YmFkZjJlMWUsIDB4ZGNhYWRjOWMsIDB4ZDVjZTI5M2YsIDB4YmZmZTQ5YmUsIDB4ZTRkZWRmYTksCi0JMHgyZTVjOTVmYywgMHgwMWM1YmQ3NywgMHhiNzdlN2RmNCwgMHg1ZWJlYzRmZSwgMHhkZmRmYzIxZSwgMHhlMDc5ZjQyYSwKLQkweGJkNDdiNWFjLCAweGQ3Mjg2NmJmLCAweGVmMjI0NTE3LCAweDI5N2M1NjYxLCAweDU2N2U3ZjdkLCAweDNjYzY1ZGEwLAotCTB4MmU1MGNmNTAsIDB4MWMxMmZiNDcsIDB4MmZiMGNmOTQsIDB4N2UzMDg1OGQsIDB4ZWRjZjk4MWUsIDB4ZTIwYWQ5MDMsCi0JMHg1MzhhNzRhNywgMHhkNGRhOWJkNSwgMHgwYTQzZDIwMCwgMHgyZTJlOTFiOSwgMHhlZmUxODdkOCwgMHg2ZGRmZDQ3OCwKLQkweGY5NzdkMjBlLCAweGZjMjhiZTgyLCAweDYzZjQxZTNlLCAweDg1MjgxN2Q4LCAweGU0ZDVlMmRkLCAweDY4NzFlYmJmLAotCTB4N2UwMDhlZmMsIDB4ODJiNjg3ZmYsIDB4Y2EzYTgyZTAsIDB4OWI5ZGY0Y2QsIDB4NzQyNmY3YzgsIDB4YWVkYmUxMTgsCi0JMHhjYzg5ZTExYiwgMHg2MjlhYmRmOCwgMHhhYzllMTFiYiwgMHg0M2ExZTExYSwgMHhmNmUyYmVmOSwgMHhhOWYzZTMyNCwKLQkweDZmZGMyMzZlLCAweDk5OTQ2MzdlLCAweDc4YTBmZmRmLCAweDBjMTQ3ZTk1LCAweGI4YzAzZWZmLCAweDY0MDE3ZjU4LAotCTB4NjBmN2UyMGMsIDB4MjFhZmI3ZmIsIDB4ZThmZjUwN2QsIDB4N2VmZjkyMGMsIDB4Y2FlMjIyNmIsIDB4ODE5NWIwMGMsCi0JMHhmM2UzNmE3MSwgMHgyZDg1OWNjNCwgMHhhYWVkN2U5OCwgMHg4N2JlMjM5MCwgMHgyY2U3NDZkMiwgMHg3M2MzMGY4MCwKLQkweGYyMGI3Y2ZjLCAweDllNmNlMWZmLCAweGRjMzBkOWZmLCAweGM4ZTg3OTM3LCAweGRlMWM3OWFlLCAweGNmY2U5YjMzLAotCTB4MDM1ZjU2MmMsIDB4MjhjNzRlZmQsIDB4MzZkMmVjOTksIDB4OWI3NWQzOTksIDB4MzViYTcyYTYsIDB4NTc3OWQzMjcsCi0JMHg2MGI0NGFhMiwgMHg1ZDVmMzY0NSwgMHg0NzIzYzYxYSwgMHhjOTFlMjk5YSwgMHgzZGY5ZTIxYSwgMHhkM2ZhZTdmNCwKLQkweDJjNjI0MWY5LCAweGU3NzM0MzlmLCAweGZhNDdkYmZlLCAweDQwZDg5ZDk3LCAweDJhZmIwM2U3LCAweDc4OGVmYTY0LAotCTB4Zjk0MDNkYjIsIDB4MmJjZWIwNTMsIDB4Y2U5NjM4ODYsIDB4MzlmOWYzYjcsIDB4NTBkN2FjMGEsIDB4NjJiY2ViMGYsCi0JMHgxMDFmOTdlNCwgMHhhMmY1ZjQ5ZCwgMHhmMGMyMDZiYywgMHgwODFhNzI4MCwgMHhiZTY5OWI4ZiwgMHg5NDA3ODhlNSwKLQkweDUxZTdmMGQ3LCAweGJhMTZlZDk5LCAweGQzZDYyZDRmLCAweDdhZWFkYzliLCAweDU3OWM0OGEzLCAweGQ3NmM3OWViLAotCTB4MWU3YTk4YzQsIDB4ZmY5MTA2ZGIsIDB4ZTIzNGVjZGEsIDB4MjRmOTVhZTEsIDB4NmI1YzMzOGEsIDB4ZWJlZDEzOWIsCi0JMHgyZjQxOGU0OSwgMHgyZjVjNmMwNCwgMHhkZTFkYjk2MCwgMHg3YmRmYjk0MywgMHgxYzU0ZTE2MywgMHgyMDQ0ZjUwZiwKLQkweDE2MTQ3YmVjLCAweDZkZmZhN2MxLCAweGMyMjFiM2JmLCAweGVmZmIzZjJmLCAweGY5MTg2YTQ3LCAweDllMjA4ZjlkLAotCTB4ZTM5YzA3MmEsIDB4NzdjNWVkZjcsIDB4YjY3ODJjYmMsIDB4M2VhNWNmMDcsIDB4Y2I3YWFmOWMsIDB4Y2FlOWFmMWIsCi0JMHhiYWUzYjViZiwgMHhiZmJjODhhNSwgMHg1YWY4MTEyYiwgMHhiZmE1ZjAyZiwgMHgyNzRkNDU3ZiwgMHgyZDY5NWQzYywKLQkweDI3ODZmN2I2LCAweDEzMjdmNDI2LCAweDMzMmYxM2ZhLCAweGJiM2UyYWNlLCAweGVjNjM0MTIxLCAweDlmZGZlNzk5LAotCTB4NjcxZDAzMjcsIDB4OTg1YjNlYWQsIDB4Y2Y5YmYwMGEsIDB4Y2ZjMzllZmYsIDB4M2ZhOTdkOWMsIDB4ZWMzNjFkMzQsCi0JMHgzZGY4NzlmMywgMHg5ZDhmNTk4YywgMHhhMWEyOTZiZCwgMHg4NWRlMjZkYywgMHg4YTcwYzNkZiwgMHhiZTdkMTk3MywKLQkweDA5MmY3OGZhLCAweGYxYjU1OTdkLCAweDkwNjcxZTFlLCAweDM1NzcyNGJkLCAweDAxYzUyZjJlLCAweDcwZWY4Y2JlLAotCTB4NTU0MmY5ZTIsIDB4ZDE2Yjg3NDIsIDB4ZDU3ZWY0NGQsIDB4ZmJmOTdiYzYsIDB4MGEzNTNlOTgsIDB4NWNiODg5ZjMsCi0JMHhmYmYzZDZjZCwgMHhmZGY5OGQ0YiwgMHhkMjJhZTc0ZSwgMHg1MDE2MzY3YiwgMHhkOTQ0MmY1MSwgMHhlZWJlNzQzZCwKLQkweDNhMjZlNjE5LCAweDcyYjRjOWRjLCAweGNlZWViZTdlLCAweDVhY2NmYTQyLCAweDNmZDFlYTZkLCAweGU3YWExZDZjLAotCTB4ZDViZTg2ZmIsIDB4MmJkYzRjYjgsIDB4ZGEyNDUzOTgsIDB4YzY1ZmUzYTksIDB4N2IzNGVlNzEsIDB4ZjA1ZmEyYjYsCi0JMHg0ODJjYzY3ZiwgMHhjZjQxYjc0MCwgMHg3NWQyMWE3ZiwgMHhhZGQwZWY0ZiwgMHg3NTljZmZkYywgMHg0OTZkYzRkZSwKLQkweGZmMjc4ZjBjLCAweDU3NWYzODcxLCAweGVkMDA5Yzc4LCAweGY5NzQ2ZjQ2LCAweDNjNWQxYmFjLCAweDg5YWQwNzE0LAotCTB4YThiYTcwZjMsIDB4NDhjZGNlMWQsIDB4ZDcwZWQ4OTcsIDB4ZDdkZWJjOTYsIDB4MTEzZThkZGYsIDB4ZjgyYWI4ZjgsCi0JMHhlNDJiZmQxZSwgMHg5ZmMyNmZkNywgMHg0ZjNkMWY0ZSwgMHhjZWU0YzZhYywgMHg0MGU2N2YyMiwgMHgxNDdjNDM3ZiwKLQkweGFmNmUwMjM2LCAweDc2ZmU2N2EzLCAweGM4OGY3ZDg3LCAweDM4YTVlNDlhLCAweGNiNWUyNTkzLCAweDlhZTY3Y2MxLAotCTB4ZTYzZDQ5YmYsIDB4ZTMwZjY3NzcsIDB4Njc2NmYzN2UsIDB4YWYxN2RkMzQsIDB4YmVlOTVhNzEsIDB4Mjc3MzhiNWEsCi0JMHhhZWNkM2Y0MywgMHg5NGJjMjM2YywgMHhlNjE4ZWIzOCwgMHhiM2E2ZDVkMSwgMHgwNmVkZmUyNiwgMHhhZDcxNWU2MywKLQkweGVmNWU2ZWYzLCAweDlkYWNiM2UyLCAweDJlMzFlYmE2LCAweGI0ZTdiNWNmLCAweDgxMDNiNDE4LCAweGFmMmVkZmQzLAotCTB4YmZlNzZlNTgsIDB4YmQ1YmQyNWIsIDB4Y2YxYTZlMzMsIDB4Mjk1YTc2MmIsIDB4YjE4YTU4YWYsIDB4NTc5NGY3NTYsCi0JMHhjN2MxMTdmYywgMHg3OGJlYjgyZCwgMHhhNzhmMGY1YywgMHhiYmIyZWJlOSwgMHgzZTIzZmU3OSwgMHhkNTlhNzhjNywKLQkweGFmZGZhM2VkLCAweDk3ZmZkN2QxLCAweDdhMmU5Y2ExLCAweDlhYmI5YjdiLCAweGFjOTdkZWExLCAweGFjZjUxYjlhLAotCTB4ODg0ZmJlMjQsIDB4NGMyNzI0NzYsIDB4ZmZlM2VhNWYsIDB4ZWY4NWE4NjksIDB4NGE5NTM1OTcsIDB4OGRkYjlkYjMsCi0JMHgzOWVlYmY1OSwgMHgzMGY0N2MzZiwgMHg5ZGM5MmRkMywgMHhjZGIzMzdjZSwgMHg5NzQ2NmYzYywgMHhkNThhYjllZiwKLQkweDVjYzM3ZTgzLCAweDdhZjI4OTI1LCAweDJmZWEwMmU2LCAweGZmYjU4NWM2LCAweDFlZmM1ZGNlLCAweDIxMjVhY2FhLAotCTB4ZWUzZmJkM2YsIDB4MDdkZjk3YjYsIDB4MmU5ODNkZjAsIDB4YTliZGU5ZTIsIDB4ZjU5ZmJhMTYsIDB4NzA3OTg5OWUsCi0JMHhiNzk5MTllYiwgMHg0ZWM2ZjVlOCwgMHgxZGUzZWRjNiwgMHhhMmQ2Y2UzMywgMHg2MjBjNjYzOCwgMHhiMGU0M2Y3NCwKLQkweDc4ZTc2MmIzLCAweGNjYzNmZTQ2LCAweGFlNjBkMDYxLCAweGRlMzI2Y2FmLCAweDllNWQ5OGM3LCAweGFmYjYxNmZmLAotCTB4OGY0MDc2MTIsIDB4NDlmNTU3MTcsIDB4OTFmZTUyMGQsIDB4NmMzMzliZTQsIDB4M2Y4ZGM2MjQsIDB4NjI0MjU1OWQsCi0JMHhkZjRhOTFkZiwgMHg0ZjZhZWNiZCwgMHhmNmIwZTM3MSwgMHhkM2ZiNDVmMywgMHgxZDcxYzQ2OSwgMHgyYjgzZGRmNCwKLQkweDNlOGJiMWVhLCAweGYyODdkMTM3LCAweDhiZjEyMjIxLCAweDlkZmYwYTc0LCAweGEwN2Y1ZDM1LCAweGZlMTE2N2RkLAotCTB4NDhmYzM4NzksIDB4MTNkZDM5NGMsIDB4YmQ1N2VkZDAsIDB4ZjU3OGU3YTUsIDB4YmQwOTg2YWYsIDB4MzhhZGNiYTksCi0JMHgxZjMzYjA4NywgMHg0YzkxMzQ1ZCwgMHgxZWE3ZWU1ZSwgMHg2N2Q5ZjY3ZCwgMHhlYTdlNWQ1ZCwgMHhmNDlmNjEwZSwKLQkweDgzMzNhMjdlLCAweGY5OGQxOTU0LCAweDU0OWE1MDJhLCAweGFjYTNmMTBmLCAweDYwMDUyNzU2LCAweGRhZmZkYjlkLAotCTB4MjdmN2ZkZjMsIDB4ZjAxZTc5NzUsIDB4MmZiNjEyNjAsIDB4YjA3MmZiNzEsIDB4ZGYxN2NjOGMsIDB4MDcyY2JhOTYsCi0JMHgzNGRiNzJlNSwgMHg5NDZhZWVkZCwgMHg5Y2VkYmUzNywgMHhiZTc0MzdmYiwgMHgxYmNmMGVmYSwgMHg5ZDkwMTk2ZiwKLQkweDRhNTE3OTg4LCAweDU5YmU0NWFiLCAweGU0MTVhNjVlLCAweDNkMTM3ZGQ1LCAweDNmZjcxNTZlLCAweDYzMWIxZGI3LAotCTB4MzZmNGY4YzcsIDB4Y2YwZGEwYTUsIDB4ZjEyOWI3NzcsIDB4NTM2ZGI0MDUsIDB4ZGU5MDFlNzgsIDB4NWU3ODUxNWUsCi0JMHg3OGYxYTI5ZSwgMHhiY2YwYTJiNywgMHhhNzdmM2QzOSwgMHg4NGRiYzA2NSwgMHgwM2RkYmQwZiwgMHg4ZDE1YWY4MiwKLQkweGQyODhlM2RmLCAweDVkOWRhODFhLCAweGIyZjdkMmY2LCAweGUyOGNmMWVjLCAweGZmOTU3NjUyLCAweGE2NzQ1MGVlLAotCTB4OTA3YmQ5OTksIDB4MmNjM2I1ZDcsIDB4ZTViNjFmNjQsIDB4YTI0ZGI0MTUsIDB4MTQ2ZWM5ZjksIDB4MDU0OTZkOTMsCi0JMHgxMTQ3YTQ0OSwgMHg4ZDdlZjBlZiwgMHgzMTZmMTNhMywgMHgwYTlmYzc4OCwgMHhkNGZkZWJiYywgMHhkZTc1ZjBiNCwKLQkweDQxNzc3MWJiLCAweDIzZjQ1ZjQ5LCAweDVmOTA4N2JkLCAweGVjOGIyOWI3LCAweDcyNDZlZjc4LCAweGJmYjRkZTE0LAotCTB4NDMyNjYxZTYsIDB4N2Y1NzY2M2UsIDB4N2Y0NTBhOTcsIDB4MjRmZWM1M2YsIDB4ZmQ4YTgxNDcsIDB4YmZjZjU4NTksCi0JMHhlOGI2ZjhiYiwgMHhlZjNkZWZlNywgMHhmYTM2MGNjMCwgMHgyMjYzMDhkZSwgMHhkNDk0MjY4ZiwgMHgyNzYxZjlkMywKLQkweDYzMWNmMGZkLCAweGZlZjdmNzQ0LCAweGJkNjc3ZWRiLCAweGZlMDlkZTMxLCAweGJmNTE2ZmU2LCAweDdiOWRlNjU0LAotCTB4ZTEzZDEyN2IsIDB4NjhkNmU2ZmUsIDB4YmY3NDJmYWUsIDB4ZmI3OTU2NTEsIDB4MGY3ZTY2YWQsIDB4OWFiZWZmNTUsCi0JMHhiMWNhNDdlZSwgMHhkZDc0M2M0NiwgMHhiODc0ZTMwMywgMHhjODM4ZjJhYSwgMHg3YzUxODU1NSwgMHhhZmFlNTIyNiwKLQkweGI4NmUzYTllLCAweGQ4NzY4MTQ3LCAweDJjNzFmYzIzLCAweDBjZjRjZmQxLCAweDJlMjk3M2MyLCAweGEzZGNiYWRmLAotCTB4ZWJmZDQ0NGUsIDB4MWY3Zjc3MjgsIDB4YThhNGFiYmYsIDB4MzBiN2NhNjYsIDB4NWYxMmZmMDEsIDB4OTI0M2RlNzcsCi0JMHhjNmNmZjQ3YSwgMHgzNTc0ZTcwZCwgMHgyNDY4NTYyNSwgMHhiNzI4NGFlNywgMHhlMDNmMzkyNywgMHg3MjhiOTUzYSwKLQkweDFlY2JhMDdkLCAweDAzYWViOGFiLCAweDEzODlkY2U3LCAweGJmNWNlNGMzLCAweGJmZjdhMjFmLCAweDM1NjRlNGZlLAotCTB4NzRkZjVkN2MsIDB4NmU3OWMyZmYsIDB4OGY2NGZkZTcsIDB4ZmYxZWRjNWQsIDB4ZDhjN2RmNmYsIDB4NDBhZWIyZWEsCi0JMHgzMjZjZGZmYiwgMHhjMzkxZTVlYSwgMHg4NmQ2M2ViOSwgMHg3NWUwZjg4YiwgMHhiM2I3ZWU5OSwgMHhlMWI0YmVhMSwKLQkweGQ5OGIzZjgwLCAweGY5N2E4ZTViLCAweGRmZGYzNTQwLCAweDE0OTliMWNhLCAweDdlYjAzOTg3LCAweDgyOWU0NDVhLAotCTB4MzBmMGQwNmYsIDB4YjNhYTJjNzksIDB4ODVhYmJlOTIsIDB4MDNlZDA3N2QsIDB4NDkxYWU4MjMsIDB4M2FmZTlkMmYsCi0JMHhlN2U3MjhlYywgMHgyN2JkM2E3MiwgMHg5MTIxMmEyNiwgMHg4OWZlNGMwNywgMHgwOTk5N2UyYiwgMHhkY2FiOWFmNSwKLQkweGIwMzlmMjY3LCAweDgxZDkxYjdkLCAweDExNWRkYWRlLCAweGFmNmY0ZmZhLCAweGNlMGFmZjYwLCAweDczZTI4MGFmLAotCTB4YTBlNzUwNTcsIDB4ZmNmNmE0OWYsIDB4NTE5NzZjZmIsIDB4ZWM3ZTA0OTgsIDB4YjFlNzJlYjAsIDB4MmJmNjJhYTksCi0JMHhhYjc5M2YwOSwgMHg1MWFmNmZjOCwgMHhiMDllZWQwYiwgMHg0MmQ4YTVmNywgMHgzZTMwYTRmYiwgMHhkZTI1ZTlhOSwKLQkweGM3YWUxZmU0LCAweGVmYjQ0MzliLCAweDQ4MTBlZmQ3LCAweDllNjBkN2U4LCAweGVlNWYyMmEwLCAweDdlZDA0NzhjLAotCTB4OWRmMGQ0YTIsIDB4ZGVmYzdkNDUsIDB4NWYzOWVkY2YsIDB4NjkwYjU1NWYsIDB4MDE4ZjI4MWYsIDB4MGJmYzAxN2YsCi0JMHg4MTkyZWM1MywgMHhiZTJkMzc2NCwgMHhmY2M0NGU3ZiwgMHgyOGRhZGY5NSwgMHgyMTIzZjc5ZiwgMHgzZTQyZWQ5ZiwKLQkweDAxNjNkMzdiLCAweDJkMmU4Yzc2LCAweGYwMjc2MTZlLCAweDQ5ZjAwOGQyLCAweDQ5ZjIwYzQxLCAweDcwZDk4YTRkLAotCTB4OWI5N2EzYWUsIDB4ZTI2ZjNhYzQsIDB4YmYwZjU0ZTcsIDB4YzFlNzNmMzUsIDB4MzlmODNkZTEsIDB4OWY4NGM3ZTgsCi0JMHhlMmZmYTNjZiwgMHhlODliZDMwOSwgMHhmMDdhNzhiZiwgMHg2MmNkZWE3MywgMHg1M2NlMjdmZiwgMHhjZGRjNWI0ZiwKLQkweGQzOTc4MGVkLCAweDNiZTg2MjEzLCAweGY4N2QxOTNmLCAweGU4ZDNkZjNkLCAweDdmODAxNWY3LCAweDRjZDljY2Y3LAotCTB4NTMyY2Q2MjQsIDB4ODQzYTc3ZTcsIDB4MDYwOGM5OWYsIDB4Y2EyNzZmM2YsIDB4YWVmMzE5NDUsIDB4ZDViZGRmYzIsCi0JMHhkZjg5ODhlNSwgMHgzYTI2ZjlhMywgMHhlMGRjMDZjZiwgMHgzZGUzYjZiYywgMHg4N2JhM2NiYywgMHgzOWQzZGE1NywKLQkweGZlNGViMWRlLCAweGM3YTYxMzAxLCAweDQwMWYwOGZiLCAweDVhMzhiMDlkLCAweDQ0NjBmOGI3LCAweDMxYzMxMDNjLAotCTB4MTljNWY5OWQsIDB4YmY2ZmRiZGQsIDB4ZjlmOGEyNjEsIDB4ZTIwYjFmMmUsIDB4NTFkYzAyZWYsIDB4YmRkZjhjNjQsCi0JMHg3NmQ5ZjIyNSwgMHg3ZjI0NjEyZCwgMHg0MjlhNzJiYiwgMHg2YTI0NWZlOCwgMHg2NWYxZTI4YywgMHgzOWZiNjMxZSwKLQkweGJkZGY5MWE1LCAweGVlZjljNjM2LCAweGU3MjI1YWY0LCAweGViYjVkZjRiLCAweDdmZDdkNjI3LCAweGZmOGEyYWNmLAotCTB4MjJmZGM2NDUsIDB4M2ViNDdkZTMsIDB4M2M4NTIzYjQsIDB4MTg1NGFmZWUsIDB4ZjUxY2I4ZjMsIDB4ZDhiYmU4MzMsCi0JMHg3MTRhZjg2MCwgMHgzMzE0YWU3ZCwgMHhhM2FjMzhjMywgMHgyZGNmMzIzYywgMHgyMWVjZjAyMCwgMHg1OWUzYTY2NSwKLQkweDkyODk5ZWZmLCAweDZiZGZlNjZmLCAweGY1NDZkYzBkLCAweDdlMWRiZTdhLCAweGFiYTI3MTc3LCAweDNhY2E1ZDZiLAotCTB4MTE3YzlmMzEsIDB4YmNmNDBkY2YsIDB4ZDcxODVkYWUsIDB4YmNlOGJjYzQsIDB4ZDA4NGQwMzYsIDB4YzYwNWNlMWYsCi0JMHhmNDYwYWU0OSwgMHhiNzU4NTdiZCwgMHhmMGUyNWNlMSwgMHhmYTI2MmQ5ZSwgMHhhMzFmMGYxZCwgMHgxZTAxYTFlZiwKLQkweGNjMTZlNzhjLCAweDU4NTBmMTQ3LCAweDAzOWNlMWJmLCAweDIzODA2OWQ2LCAweGU0ZGYwMWY3LCAweDkzZGUxZmZmLAotCTB4YTI3N2UzZGUsIDB4Mjc4ZjUyZjUsIDB4NjEzMzhiNzUsIDB4MmZhNDgwMDcsIDB4YmRmMzhiODYsIDB4ZmEyODZjYTEsCi0JMHgwNmZlNGE0MSwgMHgxNDk1YzNhMiwgMHg3MmNiNWY5ZSwgMHhkYmRmM2U3YSwgMHhmN2UxZmQwOSwgMHg3Mjg4N2U5MywKLQkweDAxNzE4MDkyLCAweDA0ZGVmODY2LCAweDBmNzRjOGYzLCAweGU3YzQ1NGMwLCAweGU1ZWJlYTZhLCAweDQ4Yzc5NzQyLAotCTB4Y2NkMTZkYmUsIDB4YTY4NDc5OGUsIDB4ZWEwZjY4ODIsIDB4NjAwZDliMTMsIDB4Zjg4NTJlZmMsIDB4ZWUyNGI3NGUsCi0JMHgyODNmZmQzZiwgMHgwMDgxMmJkNCwgMHgwMDAwODEyYiwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg5MDk1ZmYwMCwKLQkweDUwYzM0YjMxLCAweDk3YmY4NTE0LCAweDRhMzZhYzQ2LCAweDEwNTZkYWMxLCAweGE4NTA4YTA5LCAweDc1NWE1MDk1LAotCTB4OTczNzU0MzMsIDB4MjIxZDBlOGMsIDB4MzhiYTM4M2EsIDB4ZmM1ZDI1MWIsIDB4MDlmOWNlMDEsIDB4ZTZlMjg0ZmUsCi0JMHg0ODJhZTBlNiwgMHgyMmJmODI5MCwgMHgyNmE2OTdkZSwgMHhjYmJkMDgyMCwgMHg3N2RkZTc3OSwgMHhkZGY3M2RjZSwKLQkweDJlOGRjYzJiLCAweDVlY2E3NTUwLCAweDc1NjE5MDQ3LCAweDQ0NDUwNmQyLCAweDlhZWExMTUyLCAweDQ3ZTE3NTM2LAotCTB4M2NkNmE1YTQsIDB4N2MyMmMxMjgsIDB4NGMxMjA5MmUsIDB4ZWNiYmFhNzUsIDB4ZmJkNDVhYjIsIDB4NWZmZWQyNDYsCi0JMHg3M2U0ZWM2ZiwgMHg3NTY5ZmQ3MywgMHgyN2U3Y2FkMiwgMHgyMmZmOGViYSwgMHhiYTc3ZTg5OCwgMHgwMDgzOWQxMiwKLQkweGU0ZTNlMWQ2LCAweDY1ZjY4ZmJkLCAweGM4NzczZDEzLCAweDVmOTRkY2FjLCAweGQ1M2RhM2U4LCAweDM5NzAwNzliLAotCTB4M2FkZjM3NmIsIDB4ZGJlMjBkNDYsIDB4MGFhOGYzOGEsIDB4YTU2NzA0N2IsIDB4ZmQzOThmNzQsIDB4ZWQzNDczN2UsCi0JMHhiMGE1NmYyZCwgMHhlZjM3ZTY1NywgMHhiZjg5Njk1ZSwgMHhjMjFiNzFhNSwgMHhjMWVjODQ4MSwgMHhjODE0NDdhOCwKLQkweGJlMGRhYWQxLCAweGI5NDE3ZGNkLCAweDNlOTljYjhiLCAweGJmMDVjNTkzLCAweDY3ZWI4MWYwLCAweGYzYmE3OTMxLAotCTB4ODQxNmJmMGYsIDB4Y2I2MmJjYmYsIDB4NWYxZGQ3ZmYsIDB4N2Y3NGY2OGQsIDB4NmI3ZDIzOGMsIDB4YmI5MmY3MmMsCi0JMHg1MGE4ZGNlMSwgMHhkOWY2OTVmOCwgMHhmNDExMmVkNSwgMHg3MzhkYmNmMywgMHhmM2U1NjlmMSwgMHg3NDJiMDA3ZSwKLQkweDAyNTA1NzQ3LCAweDAwMDAwMjUwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhjNTU0N2MwYiwgMHgzZDljZjhiOSwgMHg5MjZlZWNlNywKKwkweDIxMjZjZGRkLCAweDI2YzJiYzIxLCAweGI4MGQ0NDAxLCAweDQxYTAwYzQwLCAweDk0NTIwZjM3LCAweGEyYTFlMWE4LAorCTB4MjQ3ODZjMjIsIDB4ZjYyMmVmMjEsIDB4ZGRiZjFmNjIsIDB4NTJjNDg4ZjAsIDB4ZDRjNTFmMWIsIDB4YjA1MTc2OGIsCisJMHg0MDM2OGJkMSwgMHg1YzE3NThkMCwgMHg2ZDhiNDU5ZSwgMHhkNWEwNDVlOCwgMHg1ZTQwMTM3YSwgMHhhNTQwYjIwNiwKKwkweGNmZmQ0NWI2LCAweGRkOWNjZGY3LCAweDI2MzY0ZTczLCAweGY2ZmZlZjZhLCAweDlmZGJmZmZlLCAweGNjY2NlNjFkLAorCTB4N2NkZjMzMzcsIDB4OWJlNmJkZjMsIDB4OTFiZTY0ODksIDB4ZjIxMzg3ZDgsIDB4MjU2ZWZjMjUsIDB4MTA4OTUxZTQsCisJMHg5YjRlMTg5MiwgMHg5ZmM2OTMzYywgMHhlZGIxMDk5NCwgMHgzYmVhMjQ3ZSwgMHg5ZTBjODQ5OSwgMHhkMTQ2NzA2YiwKKwkweDY0MDg1ZmEyLCAweDIxMDY0YjRlLCAweDc1OGQ2NWM5LCAweDc5M2RmYTQ2LCAweGU4YmM3ZDkxLCAweDk4MTljMzA4LAorCTB4YmRiYWU0N2MsIDB4NzIwYzg0MDksIDB4ODI2NmY2ZDMsIDB4N2ZlOTJmYmYsIDB4YzYzN2I3M2YsIDB4NzljODc0OTEsCisJMHhlMTMxYTI4NSwgMHhiYzlhNGFmYSwgMHg4NzdiZmE0OCwgMHgxNDliYmVhYSwgMHg0OGRkYTY3NSwgMHhmZDUxZmJmYiwKKwkweDkwODViNzIwLCAweDQ2NzhjMzFmLCAweDQwY2JhOTQyLCAweDc4YjhlOGIyLCAweGZkMmU2ZjVkLCAweGFmMGUzYTNmLAorCTB4Mjk1YmU4Y2QsIDB4MWMxYTIyMTAsIDB4MjQyNDQ0YjEsIDB4YTA0ODIzMjYsIDB4Njc5ZmJlOWQsIDB4NDlkN2VkM2MsCisJMHhhYTM2YTcwOCwgMHg0OWU3NGFjOCwgMHgwODk2YjRjOCwgMHg4MDg5NzJmNSwgMHg3NmNkODg3OCwgMHg3OGU5N2IyNSwKKwkweGUyMmU3ZDU3LCAweDIyMGQ1N2JjLCAweDI3ZDY5ZGE0LCAweDY4NGVkMzkyLCAweDYxYzQ5NTNhLCAweDIzMmRjN2JkLAorCTB4ZDU3ZTQyMDYsIDB4MDcxMjNmYWUsIDB4MTk5YjFiODUsIDB4ZGMxNTVlMjQsIDB4MGUyMTBmMDYsIDB4YzdhZmM1MTMsCisJMHg4ZjJhZTk4YywgMHhjNGM5YTc5ZCwgMHhhYjIxMGQ3MSwgMHg1NzRjMGUzZCwgMHhmYTYzNDY3OSwgMHhkYjI3ZDBkOCwKKwkweGY5ZDAwNjczLCAweGU5ZDgzMjBjLCAweDYzODM0ODQ4LCAweDExOTFkZGE2LCAweDJkYzcyNzg2LCAweDA5MzhlNzMwLAorCTB4YWUyOTI2YzksIDB4MmY1YTU0YzQsIDB4NGRjODQwZDEsIDB4ZjM0MmRjODQsIDB4MTkwODIzNzUsIDB4NTA4NGVjNDksCisJMHhiYzkzM2RmYywgMHgwMTlkY2EyYywgMHg0NWU2MDc3OSwgMHg3Y2MzNzEwMywgMHgyZTAzMzI2MywgMHhjNjJkZTI5MSwKKwkweDFjOTVjZjY5LCAweDFiZjhlZmUxLCAweDc4NWZkZjgwLCAweGMxZDYxNTJjLCAweGVmY2MxYjdkLCAweGYwZWNlMjE5LAorCTB4NDZkZDllMDIsIDB4N2Y1YTI2ZTcsIDB4NWU0Y2VjYTUsIDB4NDY4YWUxNGEsIDB4YWQ4MzJlZGEsIDB4MWUxMDk0YmIsCisJMHgxZmMwNGNkZiwgMHhjOWNjOGZlZCwgMHgzMGQ3YWNkNSwgMHhiNDIyNDcxOCwgMHhlYjA1ZGM3MywgMHg3NWIyNzE2NCwKKwkweDE1NzQwOTVhLCAweGYyZTYxZDYxLCAweDc3NjU1ODc1LCAweDM4ZmQxOWQ5LCAweDExZmEyNDQ5LCAweGIxZmE1YWVkLAorCTB4OGZlOTY4NjQsIDB4YmE5ZmIxN2UsIDB4YmY2OWU3OWUsIDB4M2JlZDQyNGQsIDB4YmQzY2U5NTMsIDB4NGRjZTBjNGIsCisJMHhhMTYwZGJmNCwgMHgwYWY4MDA1MSwgMHg4MGM0MjViYywgMHg0MWY5MmFmZCwgMHg2M2EwNTI2NSwgMHgxNzllMWFiNCwKKwkweGY2ZjdlOWNiLCAweGVmY2Y3MzBlLCAweDUyZTIwNjJkLCAweDJhNTM3MmU4LCAweGNlYzQ3NzdjLCAweDY2MjZlM2EwLAorCTB4NmI0Y2VjNDcsIDB4ZTk4N2YxY2YsIDB4YzkyNWQ5MjQsIDB4NGMwZWVmNDAsIDB4YWM0NzA0MWIsIDB4NDc3Y2UzMDAsCisJMHg5YzA0OWIyNCwgMHhmNmE0NzI3ZiwgMHgwOGVkZDNmZiwgMHgzNzdhZTFmMSwgMHhkYTU0NzVmMCwgMHgzZDIwM2M1MSwKKwkweDQ2OGIxZjc5LCAweDM0NTA4ODNjLCAweDE3ZTcwYzM5LCAweGFkMTdjZjFjLCAweDRhNDM0ZjQ1LCAweDU4NjhlMzQ4LAorCTB4ODc1ZjlhNWYsIDB4NzlhNjYzZjQsIDB4YjA5YmU2MmIsIDB4M2ZjYTFlZGMsIDB4YWNjOWU1OGIsIDB4YmE1ZTVkM2UsCisJMHg1NWUzYmQxOCwgMHg2ZWRhMTc1OSwgMHg0MjkxYzIwMywgMHgzODQ0NWU3MCwgMHg5YmJmNTA5NiwgMHg5NDIwM2YzMCwKKwkweDFmZDYyNWZmLCAweGI3ZjdlYWNhLCAweGNlZWQyNTFmLCAweGY5YzI5ZTBkLCAweDAwM2IyZWJmLCAweGQ2ZGJjMjlmLAorCTB4MmU5NGFkYzAsIDB4N2MxMDZlMGUsIDB4ZWMwZjlhMjYsIDB4NzVmZTQxOGMsIDB4OWYwY2ZkN2UsIDB4ZDc2N2UyODksCisJMHhlYTBiOTMzOCwgMHg4Mzk4ZGY5ZiwgMHhlZmVkYmNmOSwgMHg1ZTVhMjRkYiwgMHgyMDk0NWRiNSwgMHhkNjc5ZDg2ZiwKKwkweDViZjE0MWQ2LCAweGZjN2Y2YTYzLCAweGI4M2RmYTY2LCAweDYwMmYyNDVkLCAweDlmNzFkMzc3LCAweDQ4YjRlMjlkLAorCTB4OTJmOTYzM2UsIDB4ZGFhZDk2MjgsIDB4YzAxZTZiYjAsIDB4OTEzMzZiMmQsIDB4ZWFhNzBhMjgsIDB4NmYzYmQyY2QsCisJMHgwM2QyZjlhNiwgMHg1NTJhODEzMiwgMHg4MzhjZWE5YiwgMHg0Zjg5N2U2OSwgMHg4YWZjODE2OCwgMHgzZjYwMWY5ZCwKKwkweDBjYTRiOWRkLCAweGUwMzlmN2Y2LCAweDc1MmY5NDViLCAweGVlOTNkYWRiLCAweDdkY2JkZmE2LCAweDdlYTAwYTViLAorCTB4MDljMTY2ZjksIDB4N2ViZTVjNGIsIDB4YmYwMDg3ZDcsIDB4MjExZTU1YmMsIDB4Y2QxNWY4NTIsIDB4ZGFhMWM0MzEsCisJMHgxN2RiNzkyZiwgMHhhZGUzMDlkZiwgMHg5NDI2NDc3YSwgMHhhYmIyOTFlZCwgMHgxODkxMTkwZiwgMHhlMDIzNDZhNCwKKwkweDEzZDM2YWI1LCAweGU3OWJlMDQ2LCAweDFmYjAwNzNjLCAweDJmNTU5ZjA1LCAweGJiNjg3ZWQzLCAweDI3MDRkN2VhLAorCTB4YzBkYWFkNGMsIDB4Mzc4NWNkZjgsIDB4NjhiY2U2YTMsIDB4MTlkNTc5ODEsIDB4MzdmYjQxNDcsIDB4YmQ0MjM1MWYsCisJMHhlYmYxNWY1MiwgMHhkZjE4MGU1MSwgMHg4YzAxNjMwNiwgMHg2MzA2ZmQ3MywgMHg1NjZmOGE4OSwgMHgzMzU2ZmYzNCwKKwkweGU5NGQ1M2FlLCAweGJkMTlkZDAzLCAweGNlMzllN2FmLCAweDM5N2M5NWI3LCAweGRmNDg0MDE1LCAweDQzMzhjZjkyLAorCTB4MzM5ZTg3YzUsIDB4NTdmZDIxYzQsIDB4MTFjNDhiMzQsIDB4ZGY3ODFmODEsIDB4ODc2MGZiZTcsIDB4YmUwM2YxOTUsCisJMHhjMGVkNGI1ZSwgMHg3NWViYzIxYSwgMHg0ZmQ3Y2VjOSwgMHg4OGNkNjYwYSwgMHhlNzFlZTdjMCwgMHhjYjkxYTNmMiwKKwkweDdlNDEyNzhmLCAweDJlNjlmNGQwLCAweGY5NzFkNjNmLCAweGUyNzFlNGQxLCAweDkzM2Q2N2Y3LCAweDcxZWY1ZDMwLAorCTB4NjdiY2ZhNjEsIDB4NGYzZWE2MWEsIDB4YzE3YmQ2MTEsIDB4OGRkMzA3MzMsIDB4N2Y3ZTM3MWUsIDB4Njk4NjUzYzksCisJMHhiZjE2YTdiMywgMHg4ZTU5ZTJiZiwgMHgxNzhmNjZlOSwgMHg1OWU2YmZiZiwgMHhhNzhiNjk4MywgMHg5ZWFkZDMxMSwKKwkweDNkNWI0YzI2LCAweGJhZjdhYzNlLCAweDM2ZDMxOWE3LCAweGZmN2UwYjRmLCAweDUzMGRhN2I1LCAweGU5ODAyN2JmLAorCTB4OWE1ZjU4NGUsIDB4OThlZDNjMDYsIDB4YzMxY2Y2ZWUsIDB4MDNhN2FmNzQsIDB4OWNmN2VkZGIsIDB4YzcyZDc0YzEsCisJMHhlNDliMmRiYiwgMHgzNjZmMTQ0OCwgMHgxODM5NDExNywgMHg5MWNhZTg1ZiwgMHg4OGJlM2U2OSwgMHg3YWU2OTNlNSwKKwkweDlmMzQ4YzczLCAweDhhNzlhNmU0LCAweDgxOTVjMWM3LCAweDBmY2QxMzFjLCAweDI5ZTU2NWFlLCAweDY2YjkyNDNmLAorCTB4YjJmMTRmOWEsIDB4YWViNWI0ZjIsIDB4NGY5YTI4ZGMsIDB4YTNlNTY0NmIsIDB4YTM3MzdiZDYsIDB4OGY5NDdlNjksCisJMHgzOWI3NWY5NSwgMHhmMzQzMWI5MCwgMHhmMmIwYjVkNywgMHg2NzkyN2ViMSwgMHgwMWIxZjlhMSwgMHhkMDdmMWY5NiwKKwkweGY5YTU2Nzk1LCAweDlmMmNlZGYxLCAweGNmMzdhMWY1LCAweDFkNTlmMzQ2LCAweDVkNGRmZGFjLCAweDlhNThiYzgxLAorCTB4Y2FjODI5YmYsIDB4ZjI0YWI5NmYsIDB4MmU0MDAzZWQsIDB4YjVjZjk4MGIsIDB4ZDFjN2U0ZTQsIDB4ZTU5ZGFlN2MsCisJMHg0YjE2ODYwYiwgMHhiN2Y0MDg4ZSwgMHgwODU4ZWU1MywgMHhiMDg2N2MyMiwgMHg3ZTUxMjVkMSwgMHhmMWQ4ZDNiMywKKwkweDY0N2QxNTEwLCAweDRiYWFmMGExLCAweDIwMzNmY2EyLCAweGZlNTA0NTkzLCAweDk2M2FmMGIwLCAweDE5NjQ4YzA3LAorCTB4YmMyYTNmOTQsIDB4NjViYmU1OGQsIDB4NWNmZjk2MDcsIDB4NDZmMmMwMzgsIDB4ODdmZjk2MDcsIDB4N2JmMzA4NzAsCisJMHhlZjk2MTc2NSwgMHhmMmM0ZmUxMCwgMHhmZjk2MTc0NiwgMHhmOTgxMzg1ZSwgMHhjYjFiYjJmZCwgMHg5NjJlODUzYiwKKwkweGZjYjFiYTM3LCAweDU3NTNlOTQ5LCAweGRmMmZlZDNlLCAweGRjMmU5ZWUwLCAweDVkZGI3MjA4LCAweDZhNTk3Mjg2LAorCTB4NTk3ZTA2NDksIDB4MDRmZmY5Y2YsIDB4YWYyZDA2NDAsIDB4Mzk0NDY0MWYsIDB4YWNmM2YzYjgsIDB4ZDM4MTQ1MTcsCisJMHg5N2M4MDBmNiwgMHgwNWZhMDRiYywgMHg0ODViMzM4NSwgMHhjMjgyN2QwNCwgMHg3Mzg2ZmIxMSwgMHgzNDkzMTdjYiwKKwkweGEyZjk2ZTcwLCAweDIwZjM4MTRjLCAweDFmZWE4OWMyLCAweGRjNWY5ZDljLCAweDE3Y2YxZGE0LCAweDEyOWMwYWU1LAorCTB4N2ZiNTk3OWMsIDB4Y2JlNWJhZjMsIDB4YmU3OGVkNmMsIDB4ZDRlMDU0YWMsIDB4ZmViODljMjAsIDB4NGYyMDI3OGQsCisJMHhjODA5YzBkNCwgMHhlNTljMGFhNSwgMHg3ZmIxMjcwOCwgMHgyNzE5NzFlMywgMHg4Y2I4ZTA2YiwgMHg3NTM4MTQ0YiwKKwkweGZmNTA2NzA4LCAweDM3OGMwNGUwLCAweGFjNjNjNzZiLCAweDg2M2NlMDUwLCAweGJmZDYxZTc4LCAweDUzNGNiOTc5LAorCTB4NTUzMWUzYjQsIDB4YzI5ZTcwMjksIDB4MGZmNmE0ZjEsIDB4MTZhYjZlY2UsIDB4MjFhZGJiM2YsIDB4Mzg0N2FjZmMsCisJMHhhZjM3ZmIyMywgMHgzZjE2OWI1YywgMHg3ZTEwYjZiOSwgMHg2YjljMjEzNiwgMHhiNzY3MDdmYiwgMHhkZDlmOGI0ZCwKKwkweDVlN2UxMGI2LCAweGU5OGNmYzQzLCAweDYzNzJiY2RmLCAweDhkYzlmOGI1LCAweDBkZTdlMTBkLCAweGZlYjhjZjFjLAorCTB4YTI2ZjY3OGQsIDB4MTM3YjNmMTYsIDB4MjAwOWY4NDMsIDB4MzdmYjFiOWMsIDB4MmQyNGZjOWUsIDB4NDI5M2YyN2UsCisJMHhlMTA3NzlmOCwgMHg5YzFmZWU0YywgMHhmYzVhNDliZCwgMHhlMTBhNGRlYywgMHg2NzA4MGZlNywgMHg5NWU2ZmY0YSwKKwkweDlmOGI1MDNmLCAweGZjMjE4MWZjLCAweDcyNzA4MDdjLCAweGE5NGNjZGRjLCAweGJkYWM3MGE0LCAweDRjM2ZkOWMzLAorCTB4YzNmZDlmOGIsIDB4ODkzOWY4NDIsIDB4Mzg1MmE2NzAsIDB4MjljMzdkZTksIDB4YTdlMmQxNDgsIDB4OWY4NDI1MjAsCisJMHhiNmU3MDhmMywgMHg5ZmQ5YzFmZSwgMHhmZWNmYzVhMiwgMHhhZTdlMTA5NCwgMHhmYTNiOWMyMCwgMHhlMTgyYWYzNywKKwkweDBjMTRmYzVhLCAweDU1YjlmODY3LCAweDg2NzI4NzFhLCAweGQ4Mjc0ZWNhLCAweDlhMTlkZmU3LCAweGMxMzIxMmUzLAorCTB4ZDE3OTYyNGUsIDB4ZjdhMDI0ZWUsIDB4NDMzZThhODgsIDB4YWQyMjVkZGEsIDB4MzcxY2Q5NmYsIDB4ZDZhMjMxZmUsCisJMHgwNjhkNzI2YiwgMHhhYTU2Y2Y0YSwgMHg5YWY1YTllNSwgMHgxYWQxNDlkOCwgMHgxNWNlMmEzZCwgMHg0YzI3YzlhZiwKKwkweDlmYTlhYzFiLCAweDI5YTY5NDU4LCAweDNhZTczODFmLCAweGY3MjBmOTRkLCAweDQ4N2U0ZDc4LCAweGZhOWE0ZGQ5LAorCTB4MzU3MzZhYzMsIDB4NmZjYmUxZjksIDB4ZjU0ZmQ0ZDcsIDB4ZDNlNGQ0Y2UsIDB4YTlhZmRjZDcsIDB4ODE3MWIyM2YsCisJMHhhNjlhZmNhNiwgMHhiNWY5NGQ3MiwgMHhmYzlhYTViZSwgMHhkN2RmY2RmNSwgMHhiMmQzMWZkNCwgMHg0MzdlNTM0MiwKKwkweGYyOWE2M2RiLCAweDM1Mjc4MTcxLCAweDllMDcwOWY5LCAweGIxYmZkNGQ1LCAweGY5NGQwNWZkLCAweDY4YWY2M2M0LAorCTB4NmM3NzI3Y2EsIDB4M2U2ZmU0ZDUsIDB4ZmQ0ZDZiZjMsIDB4OWFkZGMxMjksIDB4YmQ5ZmFkZmMsIDB4NDM5ZmE5YWIsCisJMHg2ZmFiNTNmZSwgMHhkNGQwM2Y5YiwgMHhhMTNmNmE5ZiwgMHhmMjRlZmYyOSwgMHg1NTNkM2EyNywgMHhjY2FmMWY2YiwKKwkweDMyYWZjYzIxLCAweDAxYWZkOTg4LCAweGM2ZjMxMWFiLCAweGE3NjYxNmMxLCAweDI3MWM0YjU4LCAweDc3MThmZDI5LAorCTB4YTAwYzc0MmYsIDB4MDMzNDAzZjQsIDB4ZTBjZTUxNzYsIDB4ZTgzYTZiYjIsIDB4ZTRkZGVmZjcsIDB4YmY0ZWM2YmUsCisJMHhiZWU4Y2Y3ZiwgMHhiZjQxMWVjMSwgMHg5MDI2ZjRhMSwgMHgwNjFkNDg2NCwgMHg4ZmU1ZjU0OCwgMHg3M2RlOGNjYSwKKwkweGQ1MWQ1Yzg3LCAweDE4ZDdkYjQ5LCAweDY4ZTJhMzgyLCAweGU3MzEyM2ZlLCAweGY5YzdhMDNlLCAweDgzZWUwMzA2LAorCTB4NDJkNDkxNjgsIDB4NDExMzY4YmQsIDB4ZDRkMWU5YmIsIDB4YWFiZDE3YWMsIDB4MTg2NmIwZmQsIDB4MzA4NDMzZDUsCisJMHgzYmIyMzVkYywgMHhjMzI4ZjUxOSwgMHg5YmQwM2FmOCwgMHg3OWQxODdlYSwgMHhkMTY0MjYwZCwgMHhiY2JiNzE4YSwKKwkweDYxZmI2ODIzLCAweDhmZTBjOTI1LCAweDNmOTkxOTMwLCAweDkxYmZkNDI0LCAweGZkODE5ZmY2LCAweDZiZmU4MTJmLAorCTB4OTRkZmU5N2EsIDB4YmZkMzQ5MzYsIDB4ZDM0Y2E1MzksIDB4ZmI0OGQ5YmYsIDB4OTBmMjEzYjcsIDB4YmZkZTI2ZTEsCisJMHhjYjM2ZmQxOSwgMHhmZWM2NGM1NiwgMHhkODY1Mjk0ZCwgMHg2YTQ2YTNmZiwgMHg4ZmZiYTk3NywgMHg4OGZmZjUwZSwKKwkweDMxZWJmNjgxLCAweGM3YjliYjMwLCAweGQyNmVkM2ZjLCAweDVjYTUzZmNlLCAweDliMjM3ZjNiLCAweDJlNDM0YWZmLAorCTB4ZTcxYTNmZWYsIDB4MGU0NTZhYmYsIDB4Mzk0YTdmOWIsIDB4YzE4OWJmOWIsIDB4MGI2ZmY1MGQsIDB4ZmEwMWJmZTEsCisJMHhmZDJmNjlmZiwgMHhiNWIzZDI5YiwgMHhhOTVlMWZmMywgMHhmNTg5YmY5ZCwgMHg3NmUxOTRmZiwgMHhmYjA1YmZkZSwKKwkweDZkYzU3YTdmLCAweDJiYzNmZTZjLCAweGM5YTM3ZmIxLCAweDMxZmEwNGVkLCAweGY1YWU4OTBlLCAweDUwYzlmZWQxLAorCTB4MDQwZDI1NmEsIDB4NDBmZGExNzIsIDB4ZmQxZTNhM2EsIDB4ZDIxYTc3MDgsIDB4OGJkZjFjNzAsIDB4MjU3NmY0NjYsCisJMHhmMjFiZDI5YSwgMHhjM2IzMmYzMywgMHg1MjczOTQ3ZCwgMHhkMzlhYWFiYiwgMHgxY2U2YzU3YSwgMHgyYzNkZjAyMywKKwkweDMxNjQyMjRmLCAweDM2YTJlYTFmLCAweDNjOWJlOTExLCAweGE0OGRmMjZkLCAweDI2ZDBiZGUzLCAweGU4YmYyMTdhLAorCTB4ZTAzZTI5ZTksIDB4MzIyNjM1YWYsIDB4NDlkYTA4YmYsIDB4M2ZkZjAwMjQsIDB4MTc5OGQ5ZmUsIDB4YTdkMmYzZDQsCisJMHg1M2U1MWI4YiwgMHhkZTQ1ZmM5MSwgMHg5NmJhMzI1YywgMHgxMDAyZWY4ZSwgMHg5YzdmMmE4MSwgMHgxODYwNzFkYSwKKwkweDFlZWQ0ODdmLCAweDEzOWZlZDQyLCAweDIzZWZlYjMyLCAweGJlNDFlZjZhLCAweDY4N2JkYTgzLCAweGU2M2E5MzM4LAorCTB4ZGViYWYzNTcsIDB4NWZjNzQxMWYsIDB4MGI5Zjk0NDQsIDB4NmUyZjc5ZTcsIDB4NjI0ZjBhMjksIDB4NWFmOGY3ZmIsCisJMHgzMWViMDdjMSwgMHg0NTBjNzk3ZiwgMHhjNTNjNzg3ZSwgMHhiZTRkMDRkZSwgMHgwN2VhYzRjNiwgMHgyZjdjMTM2ZiwKKwkweDBkYzMwODA4LCAweGUxYzE5OWY4LCAweGNkMmYxODExLCAweDM2YjNiMWNmLCAweGIxZGU3NzQ3LCAweDdkZDFiMDVmLAorCTB4NWQwODY2YjQsIDB4NTk5YzMwOGIsIDB4YTQwZjI1YzQsIDB4NTY1ZWVmZWQsIDB4YTc2YjgzMmMsIDB4ODE4NjEwNWQsCisJMHhhMTY2YjA5ZiwgMHgzNzY4MDI0YywgMHgwNjQ5MTM3YiwgMHhkZTNhMGUyNywgMHhmZTBjZWRmYiwgMHg1MjdjOTcwYywKKwkweDIzOWI0N2VkLCAweDc0NDU1ZDliLCAweDQ1OGE3MzNjLCAweDY5YWNmZjFjLCAweGVkM2ZmMmRhLCAweGM2MTk3MThjLAorCTB4NTNjZDc0ZDIsIDB4NDVkZGNmZDgsIDB4ZTc3YmYyZGEsIDB4YjlmN2YzNjgsIDB4NTcyYTc5YjUsIDB4MGZhYjkwNjUsCisJMHg1M2JmZTk5NCwgMHhkZjgxMjRiNCwgMHgwMDFiZjQzMSwgMHhlMzkwN2NlMywgMHhkOTVhYzFlMSwgMHg2YTU3NTlhYiwKKwkweDcyOTUxYjc2LCAweDA5Yjg4NDcwLCAweDhiZGIwYmNlLCAweDVmY2ZlYjNkLCAweDdiMTdjZGFlLCAweDZiODVmOWI1LAorCTB4ZGQzOWYwNzQsIDB4N2ZlYmUyOWMsIDB4YTY4M2U4MWMsIDB4MjgzZTgxYTcsIDB4ZmE3MjRmM2UsIDB4MmQ1NWYzMDgsCisJMHg5YTEzZGM3ZCwgMHg2NTBmYTMwNiwgMHhiNjI0YTcxZSwgMHgzM2Q2YTcwNCwgMHgxOGRjNThmYSwgMHg4YTFlOTkxMywKKwkweDUyZTBmNDQzLCAweDBmNDI5N2QzLCAweGZjM2QzOGYzLCAweDY5NDNkMzk5LCAweGVlYWU5NjkzLCAweGM5ZDViZTIzLAorCTB4NmIwM2ZkYjQsIDB4MWQzYWUxNzcsIDB4M2QxOThhMTEsIDB4ODdhMTQwZmMsIDB4YjgzZDBkMGUsIDB4ZDdlODNkMzksCisJMHg4N2E3MWU2ZiwgMHg3YTMwOGY3OSwgMHgwNzY3YWZkMCwgMHhhNjhlODdhNywgMHhlYjQ5MzJjYiwgMHgxZDc0YWViOSwKKwkweDBlYmE3OTM0LCAweGEzYjc3NWJhLCAweDQ3YWU4YTFmLCAweDEwNTg3YTQ0LCAweDM4OWQzNzlhLCAweDY1ZTQyZmNkLAorCTB4ZDM4YmQ2M2QsIDB4MDFhNzk2MDMsIDB4MDllMjA5ZGEsIDB4YWNmN2E3ZGIsIDB4MjY4NGY5NGYsIDB4NzkxNGRhNWYsCisJMHgzNmRhNmJmZCwgMHhmYWE5M2RhYywgMHhmMmYyZDU1ZSwgMHhiYjdmYjU1YSwgMHgyNjhiNzlhMiwgMHhhNmY3YzRiZiwKKwkweGQzNjk3ZWE2LCAweDcxN2U0ZDJlLCAweGZhOWEzYmUzLCAweGQyMWNkNzBiLCAweDdmYmQ4YmU0LCAweGJmOWZkNGQ0LAorCTB4ZmU1MzUzYmMsIDB4NGQ1OWVkNjAsIDB4MTc2NTAzZjksIDB4ZGNmYmY5MzUsIDB4YmZkNGQzN2YsIDB4MTNmMDhlNzcsCisJMHhhMmVlZmU3NSwgMHhlYmE4OWZhOCwgMHhhNzE2OWFjZiwgMHgwZDcwY2ZjOSwgMHhlYzM3ZDRkMiwgMHhhMDJlZjZiYywKKwkweDhiZWY4M2M3LCAweDRmOGZmNDA0LCAweGZmZDFhNzlkLCAweDc2NTNhOWY5LCAweDFlOTM5ZDQyLCAweDUzODNlZTA3LAorCTB4OWU5OGQxOWUsIDB4OWY3MTM4ZjEsIDB4YzI0Y2YzOWMsIDB4MWVkYjQyZjQsIDB4MmExNWM4MGIsIDB4YzhlMDRiNDcsCisJMHg5NmU1NzRhNiwgMHgyMGQ5MzViYSwgMHhkZmNhMDlkNywgMHhkNDZmOTU4YSwgMHhiMjEyODc3OSwgMHg4YTYzOTQxNCwKKwkweDIzMjZjMmVmLCAweDQ0MjA0YzA5LCAweGM3YzRlMTAwLCAweGU1NTUxNDE1LCAweDM3OTQ3ZDFkLCAweGQwOTE0MTUxLAorCTB4MjNiMGJjYjMsIDB4Mjc5YWY3ZjIsIDB4MjNkYjg3OGIsIDB4Zjc4NDdmOWMsIDB4N2EwMjE5MzUsIDB4ZTcyZjc3NTIsCisJMHgyOTAyOTUyNCwgMHg2NDI3N2Y1MiwgMHhhZDgxZjIwNSwgMHgzNGE5NGY1YywgMHhiOTUxN2UzMiwgMHhiMTJlNTA3NSwKKwkweGFhMzAzZTQxLCAweDZiZmFhYmY2LCAweDIwNmM5YmExLCAweDY2YmE0OWQwLCAweDVkMzY5NzNmLCAweDA0ZjdlMWFmLAorCTB4NDA4OWNmYmMsIDB4ZGYzNDEzNmYsIDB4ZDY2ZjlhMmIsIDB4MjVkYWViYjQsIDB4ODFhYmI4ZTIsIDB4ZmRiOTUwOTcsCisJMHg1MjdhMjkyYSwgMHhkODE1M2UwNCwgMHgwYzZiMzI5MywgMHgxNGY1ZDM4YywgMHg1MTEyZGJlNiwgMHgzNGYyZWM4ZiwKKwkweGM3ZjM4NWFmLCAweDRjMTY5ZTczLCAweDMwZGE3OGNmLCAweGFjMDllNTNkLCAweDkzYzA3Mzg1LCAweDFlOTgwMzllLAorCTB4ZGE2M2I0ZjcsIDB4ZTk4NjM5ZTEsIDB4NGMwZTllNDcsIDB4YzE5Y2Y0M2YsIDB4MjA5ZTRmZjQsIDB4OWYzY2M3YTYsCisJMHg0M2M0N2E2MSwgMHgwZTcwMDI3ZSwgMHhmZTk4Y2M3YiwgMHhiNGM3NjNjMSwgMHhlOThjOTNkZCwgMHhmYjBmOGYwNSwKKwkweDVmNWRmNjUxLCAweGNiODY3Nzc0LCAweDdmNDA3M2VkLCAweGJiNmNlODExLCAweGNkNmVhYzc4LCAweGJkOWQzMGQwLAorCTB4YTQyM2YyYjksIDB4ODVjZjA1MzMsIDB4MGY0ZTI2NGQsIDB4MDg3YTFhNDksIDB4MjM3N2VkODAsIDB4ZTUxZjRiZDAsCisJMHhjM2E3MzI0ZCwgMHgyZTQ3ZGFkZSwgMHhiZmUxNzlhZiwgMHg3Y2FlZGU4NywgMHhkMzBiN2E0YiwgMHgzZDFkMTBkMywKKwkweDRmNDVmN2E1LCAweGU5ZTlhYTFmLCAweGU0Y2VjMThhLCAweDFmYTdhNzIwLCAweDdkNmI3M2YzLCAweDNiMTI1MWJmLAorCTB4NzdlOTBjYTcsIDB4ODAwY2RiYWUsIDB4ZGNmY2E1YWEsIDB4OTg2OTkwODQsIDB4NWVmYmM0YmYsIDB4YTNiNWMxNDksCisJMHgwZDFiZTgxZSwgMHhlOGQyZWI3MiwgMHg3MzgyOGZiZiwgMHhlOGM3NGI4NywgMHgzZWY2YTdlMiwgMHhmNDlkM2QzZiwKKwkweGRhMTc3NzhlLCAweGJhM2UyNTQzLCAweGM2MTEwOWU4LCAweDFhZjBjZDFiLCAweGM4ZDMyMDY1LCAweDQ2MWE0Mjc4LAorCTB4OTA1Y2U0YmUsIDB4YzQ4OTc5ODEsIDB4NzM5ZjdiNDMsIDB4M2FmMzg0NDYsIDB4YzA2Yjc1NDIsIDB4NWQ3ODVmNmYsCisJMHgxNjMyYmQ2OSwgMHhmNjdhOWRlMCwgMHg1ZTkwNTkxZiwgMHhmNDc1ZmFlMSwgMHg3Y2Y1MTExZSwgMHgwOWQxNzgxMiwKKwkweDI1YzkwZGY4LCAweGZjMTkzMzkzLCAweDQ2OTFjMWYzLCAweDY0MDllYTNiLCAweGRlN2YxNmJhLCAweDZiZjgzNWRiLAorCTB4Y2ZjZTU1NDgsIDB4N2YxMTkzMWIsIDB4MWE4Y2FlMjMsIDB4ZjVmYzBmZDQsIDB4YzJmYmRmYzUsIDB4Zjc5ODAyZTcsCisJMHhmYjNlMDM3ZiwgMHhmMTdkOGZlMiwgMHhiYzcyZTI0NSwgMHhkZmU3NDZkNiwgMHhmOGNjNzNiZCwgMHgwN2MwMWNjNywKKwkweGNhZGYxYWJmLCAweDNjN2U5Yzc5LCAweGI1ZjQ5MmY5LCAweDQ5M2JiOGU4LCAweDE0ZjZlM2ExLCAweDI0ZDg1Yjg4LAorCTB4YTVmZTExZGEsIDB4NjE2MjZiZDYsIDB4ZmE3MDQyNWQsIDB4ZWRlMTRmNTgsIDB4YmQ4MGE3M2YsIDB4MGI1NTNlN2YsCisJMHhlZjA3NGIyZiwgMHg2ZDE3ODFkMiwgMHg0ZDJkNzc2MCwgMHgzMjcwZDg1ZSwgMHg2OTI4M2FjMiwgMHg4MzVkNGI1NSwKKwkweGI2ODdhZDQ1LCAweDFhOTdmMzY5LCAweDM4MmQ2OTg1LCAweGVjZWM0NzJlLCAweDZhMjcyMDMxLCAweDVlZGYxODFiLAorCTB4NjcwMmE5OGUsIDB4ZjYwOTcyNjksIDB4M2QzOWFlNzMsIDB4M2U3YmQ5OTYsIDB4YzczNjBmYzYsIDB4ZTczOGJmMjEsCisJMHhmZmZhYzMyOSwgMHgwNmY0ZjFlYywgMHgyMTBmMTk0NywgMHgxOTg0ZTRhZCwgMHg0YjJkMzFmOCwgMHhhZjdlYmRlZiwKKwkweGM1ZmQyY2Y0LCAweDdlZGRlNzg4LCAweDg5ZTgwYWY5LCAweDk3ZGZmYTY2LCAweDA5MTA3NzYwLCAweDlhZGMwYWYzLAorCTB4YmE2YmQxMTYsIDB4ZDY2ZmJlMDEsIDB4MzlkYjQ3ZjQsIDB4MmZlMjMzOTQsIDB4ZGY2YWJlZDMsIDB4NDI5NGU0NDgsCisJMHhkNDVlNTRiNywgMHhlNzgwYmQ4MywgMHhkNDFhNGI5YiwgMHhjYjU1NTk3YSwgMHg5YWY5MzU3NywgMHhkNDFhNDdiNiwKKwkweGZjMDU1YzdhLCAweDUyNWZmMjgzLCAweDM3NDA0ODJiLCAweGJhOGM5Yzk1LCAweDgxMWFjYjI1LCAweDgyMThhZjhlLAorCTB4MDg4ZjgwNGYsIDB4Yjk5NTVlYWMsIDB4OWZhNmU4YzMsIDB4NzViMmI3Y2UsIDB4ZTc3YzZkZWIsIDB4ODg1NGU2M2MsCisJMHgzNzMzMjgzYiwgMHg1OTcyMzllMiwgMHgyMGY5YjVjYiwgMHhhZWI3Y2U2NywgMHg1YmY5MDI0YywgMHg1ZWZhNWUyMSwKKwkweGJmZjY4NDUxLCAweDVmMmUwNDk0LCAweGNmNTZhMGU0LCAweDI4NDFmNGU3LCAweGU5YmNkNTVjLCAweDE3YzIxMmNmLAorCTB4OTgxOTc3Y2QsIDB4YjcwZjQ2NWYsIDB4YmU5MWNiOGQsIDB4ZjliZDUzZjAsIDB4OGVjZGMxNTAsIDB4NmVhYTc4OWUsCisJMHgyMzc0NjhiYiwgMHhjYmZmYTQ1ZiwgMHhjMTQ5ZTMwYSwgMHhkNDU0YjE1ZiwgMHg5NzcxZDEyNiwgMHhmZmEyNzczNywKKwkweDFkZWM4Y2UyLCAweGUwYWY4M2Y1LCAweDY3ZTczZDk3LCAweGEzMTUzZTQ5LCAweGI0OTc5NzlhLCAweDI2MGIzZjQzLAorCTB4ZTM4ODhlZjEsIDB4MWYyODBmZGUsIDB4OTk1YmZiM2YsIDB4NTcyMjFmMDAsIDB4NzQyY2FkNjksIDB4YzdiYjcwY2QsCisJMHg2MTU5MGM0MCwgMHg2YjQxNjdiYiwgMHhmYmUwMjE0NSwgMHhkMWQzZWJlYywgMHg4YTQ0NWJlZSwgMHhhNDBlYjg2YywKKwkweDljZWMwYjMxLCAweDcxODBjNGYzLCAweDFmYzllNzU1LCAweGViNTQxMzZjLCAweGU0NjRiMWYwLCAweDMwNWNhNjc4LAorCTB4MTAzNGJiODksIDB4ZDgxMDdiYmUsIDB4ZjUzOWE2NWYsIDB4Zjg1OGUyZWQsIDB4OTA3NjI5MmUsIDB4MTVjYTI1ZjAsCisJMHgxN2YxODBiNywgMHgyZjc3ZDg3MywgMHhmZDAxZDczMSwgMHg2MzRhN2I1MiwgMHg0YTdiNTFhZiwgMHg5NGY2YTc5MywKKwkweDY2NDI1ZjI2LCAweDQ1M2M0MTI2LCAweGYxMzJkM2M5LCAweDRkMjc4ODA5LCAweDhlYzk0MWY5LCAweGI1MjUyYmUzLAorCTB4ZmQxZmEwZjUsIDB4MTZlMWZiOWMsIDB4ODQzNDg5ZDgsIDB4MzdhYTg3Y2EsIDB4YTYyYWNiOWUsIDB4OTg5MmU5ZjMsCisJMHgwZjg5NGJmZiwgMHhjNTY1NDI1OCwgMHg1ZTVlNWEyMCwgMHgyY2JhMzNlNiwgMHhhMjc3ZTczZCwgMHg5NDNkYzI3NSwKKwkweDE2M2MwM2YzLCAweGQxYmY3MDA3LCAweDg4NmJlMmM3LCAweGFhZTJjYTQzLCAweGYzZWY1YTRmLCAweGJhMmFkODFmLAorCTB4OGY1MDZjYTIsIDB4OWJjNjU3N2UsIDB4YWZlN2Y1ZmEsIDB4NGYyMTJmOWYsIDB4OWJjYTNjZTIsIDB4NTYxYzYwNjcsCisJMHgzZTA3Nzg4ZiwgMHg3MDU5YjkxZiwgMHgyN2VjMjJmOSwgMHhmMTM0MTY1MSwgMHhjMzMyMDkyZSwgMHgxYWQ3ZTI5ZiwKKwkweDBmNWZjYmFlLCAweDZiZGY5NTc5LCAweDFiZmNhZWEyLCAweDQ0MDE5N2YzLCAweDI1OGE1ZmMzLCAweDkxMzk3MGY3LAorCTB4YmZjMDEzZjEsIDB4N2Y3MTA1MjAsIDB4YzlmODYzN2QsIDB4MmY1ZmUwM2QsIDB4ODQ0ZmY4ZGYsIDB4ZWZiYjU0M2YsCisJMHhmZjg5ZmMyOSwgMHhlODhmZjFkNCwgMHg0OGJjZmUzMSwgMHg3OGRlYWJmMCwgMHg3Nzg4NzVmNSwgMHhjZmQ1ZmYyYywKKwkweGI3ZWU4NDZjLCAweDkyNjM1MmIzLCAweGU1N2JhZTkzLCAweDE3MzZkNWE2LCAweDZiYzkxZGYwLCAweGQ2NzE3ZDgzLAorCTB4NDQ4YjRlMjcsIDB4Nzk5N2RmMGYsIDB4NTk3MTFmZGMsIDB4YzJiYmYwMDQsIDB4NzNmYzI5M2YsIDB4NGVmOGZjYWYsCisJMHg2Y2FlYTNiMCwgMHg0ZmU4ZWQ5MiwgMHg0YzA1MzY2ZCwgMHg1YmFiOWU5NCwgMHhiMTkyMTQ5NywgMHhmOTY0ZWY5OCwKKwkweGZkMDIyZjQ3LCAweGM3YzliNGQ3LCAweGZlNWE3NGQ1LCAweDQxMjU5ZmNiLCAweDk0YTUxMDdjLCAweDQ4NjQ4NjIxLAorCTB4NTQ5ZjY4MDMsIDB4MDBiOGZjNmYsIDB4MTIxYThkZjQsIDB4NmZhYWZkYzQsIDB4MTY3ZmZkMDcsIDB4ZDhiMGYyOGYsCisJMHgxY2IzZGIxOCwgMHhkMDQ5MzQxZCwgMHg1YTZhZmQ5ZSwgMHhiNDUxN2M3ZiwgMHg2OWRiN2E0MSwgMHhiMmQ0NmZlMCwKKwkweGJlOTBiZjQ0LCAweDNiYjcxOTVkLCAweDAwZWI2NDJhLCAweGM5MTNhYmU0LCAweDBhYWJlMDQ0LCAweGQ5OGY4ODVlLAorCTB4N2U1ZjJiMWQsIDB4MWQyNzZjNjYsIDB4ZGZjNmQ3NTcsIDB4YmUxNTA0ZGEsIDB4NTJlOTdiMTQsIDB4ZmM1ZmMyY2IsCisJMHgxZjNiZDFkYSwgMHhhM2Y3NDBiZiwgMHhlNDU1YmY1YSwgMHhkYjhkYTM5NCwgMHg1Njk2N2U0YiwgMHhjNDFiMDFjYSwKKwkweDkwNmU1NTczLCAweGI5ZmE1ZTlkLCAweDVmMTdkNWYyLCAweGQ5ZmMxNjdhLCAweDQ3MzkzNDdmLCAweGFmMTVmODUyLAorCTB4MTM3MjNiZWUsIDB4OTE2YzU3Y2QsIDB4NjliMjE0MDcsIDB4ZjBhNDg0NTgsIDB4ZmZkMGQ0ZmEsIDB4YWYwZjhmOTYsCisJMHg3ZGI2Zjk0NywgMHhmNjE4Yzc0NiwgMHhlMWYxODdmZCwgMHhiMmQ4YTk3NSwgMHhmNGM2NDhjYiwgMHhjYjVlNDdjNCwKKwkweDI1ODc2MzJlLCAweDc0YjRmYWMyLCAweGI3ZmU4MDE2LCAweDFhYmZlNWYyLCAweGRkOWRlZjgxLCAweGE5ODE5MDI5LAorCTB4NjFiOWYwMTEsIDB4ODA4N2VhMWYsIDB4YmU0ZjVjMjcsIDB4ZDNmNWExNWUsIDB4ZWJhMWFmZDUsIDB4YmY0NjcyMDIsCisJMHg4NTdhZmE1ZSwgMHg1YzAwYmY5YywgMHhmNGExYjM4OCwgMHgyMWFmZGFmZCwgMHgyNjRmZWUwZSwgMHhlY2ExZTAyNywKKwkweDMwNmM4N2I1LCAweDJkNTJkMzlmLCAweDU2ZTdmM2EzLCAweDJiYmYwMTI3LCAweDc2NDliZDkzLCAweGIyZjdkOTRjLAorCTB4ZmE0NjFmZTcsIDB4NzBmNDNkMmIsIDB4YmE1N2YzMTIsIDB4NzY1MDE5MDYsIDB4M2NjMTA3N2EsIDB4MWJiZmFmMTcsCisJMHhkYzQyNTllNywgMHhjZjY1ODc0OCwgMHg5YTNlNDU4OSwgMHg2OTkxMmE3ZSwgMHg5M2VjMjI1YiwgMHg5YzlmN2M0YiwKKwkweDJlMmU4MTdlLCAweDQ1NjllNzlkLCAweGU0NDFmYzJlLCAweGU4YmJlMTcyLCAweGNmOTg3ZDBmLCAweDk4OTA2YTg1LAorCTB4ZDZjY2Q0ZmYsIDB4ZDA2YzgwZWIsIDB4ZmQxMGQxYzgsIDB4ZTUxNDdjNmUsIDB4YWU2MWI5YzcsIDB4NTZlZTcwODEsCisJMHgyODE3OTYxMywgMHg1MzQzYzQ0NywgMHg2Mjc1YjIwNywgMHg1MWRiMDc3MiwgMHhkZjA3OTNiOSwgMHhlY2JiN2VhMSwKKwkweDY5YWIxYThhLCAweGU5NDY3Mjg3LCAweDlmZWYxOTdmLCAweGY0MWEzYjhlLCAweDkxNDlkM2I3LCAweDQ2ZTE5MWVkLAorCTB4M2Q1MDBmODUsIDB4YWE2NzQ1NDMsIDB4ZmZmNmNlZmQsIDB4ZGZiNjA2YzYsIDB4OWJlZmZkOTUsIDB4ZmZjYTBkMzEsCisJMHgyM2VkOTg3MiwgMHg5NzcyMDc2OCwgMHgxMDMwMmI4ZSwgMHgxNmNkNzdjYiwgMHg0ODk4M2Y5MCwgMHhkZjNlZDIyMCwKKwkweGFlN2RmMzI4LCAweDBiZDNkNzJkLCAweGM0MjRiZjFkLCAweGZhMDZlOGFhLCAweDQwNzVjNzg5LCAweDM0ZjI1Zjc5LAorCTB4YTNlMmFmNmQsIDB4YWRhZmQwMzUsIDB4MWY2NTVjMjcsIDB4NzA3ZTcyOTcsIDB4ZjVjMWY4MWUsIDB4ZDY0MDdlNjEsCisJMHg1ZTJiZjYyNywgMHhiZGY2NTJiNCwgMHg1ZmVjMmNmNCwgMHgwZWJkNWZiYSwgMHgxMTcyYmZkOCwgMHhjZDkzZmZjYywKKwkweDRmZGM4ZTdiLCAweDJkMjdlZGY3LCAweGYyZDViZWNhLCAweDJkYmVmZDU1LCAweGM2MzBmYWRiLCAweGVkZjdlYjlmLAorCTB4NDk2YjQzMjcsIDB4YmY0YjdkYzQsIDB4NDNiN2RjNDcsIDB4Zjg0N2ZlM2IsIDB4MjRjNzgyYWEsIDB4MmFhZjk2YTMsCisJMHg3YzM3YjI3YywgMHgxNmU0ZjllYSwgMHhkNTc4ODFkOSwgMHgzYmZhNDlmMywgMHhkMjdhYjI0YywgMHgwYTg3NDJhMywKKwkweDQ3ZmY5NWZkLCAweDQ3ZTA3MGQ1LCAweGU4NTUzYTIxLCAweDBhYTc0NDMwLCAweGFkZTdlYTFkLCAweGZjYmVhM2M1LAorCTB4NTIyZGYwMjMsIDB4NTM3YTI5N2EsIDB4NGE5NWYzYzYsIDB4YTYwMzhiM2YsIDB4YzkwZmY2ZWQsIDB4NTBiOTdjNDQsCisJMHhmZGM2OTFjYywgMHhmM2E4MDY0MywgMHg0NWJlNWQzZSwgMHhjYmE1ZGY1NywgMHhiYmVhZTkxNywgMHg0ZDVhZjk3NSwKKwkweDNkYjZjYWZkLCAweDEwNzQ4MjQ2LCAweDk3MTNkNGQwLCAweDMxMzkzYmZmLCAweGZhZGQxMjIxLCAweGY1YTFiZjk4LAorCTB4MzllZTExYTIsIDB4ZDg4MjU4ZDQsIDB4YmM0MTVlNWUsIDB4ZGMxOTFmMTAsIDB4NTFiOWUyMjEsIDB4M2Q3MWM1MzcsCisJMHhhNzM2MzdmOCwgMHg4Zjk0YmNmYSwgMHg3ZTYyOGVhYywgMHhkMDdiNmU4NSwgMHhkNWQzNGYxNiwgMHg0YzFmMmM3MSwKKwkweDFmMDNkNjM0LCAweGEzMDdiZTU0LCAweGJiYjFkZjk4LCAweDUzOGI2ODI4LCAweDdlOWQ1YmQ5LCAweDg3NzhmOTExLAorCTB4MGRiZGYyMmYsIDB4ZGQ3MDY5MmEsIDB4ZDdiOTdhM2IsIDB4NzU4ZjljYTEsIDB4NjJjNmRiNDcsIDB4M2UyOWQxN2YsCisJMHhhMmE5YzdhMCwgMHhmODM5NjUyNSwgMHgyNzQ1MWFhMSwgMHhlYThiZWNlOCwgMHg3OWMxYjVlZSwgMHhmZDNmYjc1NSwKKwkweGZiZjQzOWFlLCAweDE2NDQ3N2UyLCAweDQ5NzVlMzhlLCAweGQwNzY1NDgzLCAweDk3NWRlMjE5LCAweGYwNWM0MDJkLAorCTB4ODU5ZmE0NWEsIDB4MmQxNzY2N2UsIDB4M2Y3OTFiNWEsIDB4MjU3NmYzOTQsIDB4ZTA0NjY1OTYsIDB4MzkwZWQ0YmIsCisJMHg1MWVmM2VhZSwgMHhkN2FkOTRlMCwgMHhlNzRmZjc3ZCwgMHhlZDExYTZmYiwgMHhkYThkZjJmZiwgMHg5ZmI3Mzc3MiwKKwkweGZjZTQ2NDdmLCAweGM3MTkxYzY3LCAweGJmZTY1N2VkLCAweGFhN2I3Y2UxLCAweDFjZDc3MTk4LCAweDA3ZGQzZWJhLAorCTB4ZjlhMjYyNDQsIDB4ZDcxMTdlNGIsIDB4YzE2NmQyZTcsIDB4ZTIzN2ZlMDcsIDB4NTdmZGM0NGQsIDB4ZjU0NjgyNGQsCisJMHhkODJlODg3ZCwgMHhjZWY0ZDc1ZiwgMHhmZmI2YmFjNywgMHg0MDA3ZWIzOSwgMHgzMDdmYWY0NywgMHhkYTY5ZGZmNiwKKwkweDQ3MWZmYWY1LCAweDM3ZjkwNWJkLCAweDQwN2NhNjhlLCAweGRiY2ZkNjdhLCAweDAyZjE4NTE5LCAweDQ4YWQzYmRkLAorCTB4ZGUzYmRkZmYsIDB4ZTQwMWY5NGIsIDB4NjEzOTM0ZGYsIDB4ZmYzYmRkOWMsIDB4YTllODE2M2EsIDB4MGNhOTg1N2IsCisJMHgzMGY3NjBmOCwgMHhiOTVkYmZlNiwgMHgzYjYzYWZlMywgMHhjMmFlZmU1MCwgMHgxYTM2NmM3NSwgMHhmZmM5OWY5OSwKKwkweGRlZTA4ZjhmLCAweDlkM2YyNWMyLCAweDNjMTdlODE1LCAweGQ3ZTZiZWFlLCAweGYwODIzZTUxLCAweGJlYTU5YWZmLAorCTB4ZTc2ZGY0MGYsIDB4NDNlM2NkNTMsIDB4Y2U2NGFkYmEsIDB4MWM1ZjE4NTYsIDB4NzlhODdmOGIsIDB4NzU4YmYyNmIsCisJMHhkNmFhZmZiNCwgMHhiNDg1YzY1ZCwgMHhjZmVkZWYzYywgMHhmZDFjNjJjNywgMHg1ZDM3YTY1NiwgMHg4NzllM2I5MCwKKwkweGM2NmQ4N2Y4LCAweDI5OTRhY2VmLCAweDI2YzAyZjllLCAweDVkZjY0NmEzLCAweGIwNzkzNWE2LCAweGU1ZTI3YThmLAorCTB4ZjVhN2Y0NzMsIDB4MWFlZjFmMTcsIDB4YWZmZDdkOTksIDB4YzVjMTBmOGYsIDB4NjdkNTlmZjgsIDB4N2ZkZTYwMTYsCisJMHhmNDAzZThmYiwgMHgyZTkwOWE4MywgMHhkMjdlZjk5NSwgMHg0Y2ZhODc1MiwgMHhmYjNlZjM1ZiwgMHhmYTBlODZiZiwKKwkweGQwMjE2ZjNiLCAweDRkOWI3OTlmLCAweGZkZWJkYWZmLCAweGViODFkMWI4LCAweDNkMDdkZmEyLCAweGY3Yzc3Y2U5LAorCTB4ZDVhYWZmMzAsIDB4MjdlZGUzODksIDB4ZmQzNjhmYmQsIDB4NWJlZWI2M2YsIDB4ZmFkYmJhZTksIDB4ZmU3N2Y3OWUsCisJMHhmYmRkZTdjNSwgMHg4ZjMzYmZiYSwgMHhjZTFkYmJhZiwgMHhmZWRlNmI1MywgMHg3NWY3YzcxYywgMHhmZmU5NWNmOSwKKwkweGY0NTdiYTUyLCAweGFkNDM3NmZkLCAweDZmOGU5MzNkLCAweDgyYjQ2OTBlLCAweGUyNWY3MTYyLCAweDAzYTY0YjI1LAorCTB4MGYyZjcwYTIsIDB4MzgzYmY4YzAsIDB4NTc2MDhkNWYsIDB4YmY5ODk5MzUsIDB4NTgxODI0Y2QsIDB4ODJkZGRhYmMsCisJMHgzYjQ0NDdlMiwgMHg1ZmFlNGVlYiwgMHgwY2I0MzlkYywgMHg1ZDNiOTBmNSwgMHg4MjdkNDEzZiwgMHgzOWVkYjU0OCwKKwkweGVlN2I3ZWI0LCAweDZhYzYyNzQyLCAweGRjYzdmMTkyLCAweDg1M2Q5ZjkwLCAweGU2ZjZiNWU3LCAweDEyZTIwNGVmLAorCTB4Njc3ZjdlYTgsIDB4YTAwM2Y0ZWUsIDB4MTJlNWRlZTcsIDB4MjlhNjBmNTEsIDB4YTdlZmJmZWEsIDB4OTNlZmIwMTQsCisJMHg3ZGQwZjZiNCwgMHhkZWZlNmQ2ZSwgMHhkZGZjZGEzOSwgMHg4NDNkZGUxYywgMHgyMjllZmY4ZCwgMHg1ODdlMDdjMSwKKwkweDg5NTNjZTUzLCAweDJkMzU5N2UwLCAweDBhOTA4OTk2LCAweGFiYjU0NjcxLCAweGJiYjhlZWMxLCAweDE5N2VkYjQ4LAorCTB4N2YyYTY3MjgsIDB4ZTNjNTM3ZTMsIDB4NWM3ODQzNmYsIDB4MzkyMTc4OGEsIDB4ZWQwM2RlMjIsIDB4ZGM3YzhmMTMsCisJMHhmOWM3YjNlZCwgMHg0ODlhY2UyMCwgMHg3YmM3ODY0ZSwgMHgzN2U4OWNhYSwgMHhjY2I4ZjZlNywgMHgzNTk2Y2JkYiwKKwkweDY1OWZiMGVkLCAweGQ4YWUxZDlkLCAweDliZTFiZGQzLCAweGUxMWNmYjcwLCAweDJmZjE4NWE0LCAweGNmYjQ0NGJiLAorCTB4YWU3ZDlkNjUsIDB4NWRkN2NiYWMsIDB4YmYxZDY1MGYsIDB4MDczY2JhZWQsIDB4Nzg2MzcyZWIsIDB4NWM1YTg2NWQsCisJMHhjY2FiZjYwNCwgMHg4YjdjODdlZCwgMHgxNjg3ZTU5MywgMHhlOGFlNzYxMSwgMHgwMGQyZmFjMywgMHg4NDY2ZjExNywKKwkweDk4OTdkMWUzLCAweDljZTAyYjhiLCAweDQwNWEzY2NjLCAweDZiNWRjODdmLCAweGU2MGY5NDQ1LCAweDU1YzcwMTBjLAorCTB4ZjhjNjQ5MzQsIDB4NDUwZDhmZTMsIDB4ODVkZWIwNTksIDB4N2Y1NjI2MTMsIDB4MDljMzBkOWYsIDB4ZjFjMjVjZjgsCisJMHg1MTZhNDI1ZSwgMHhiZjU3MjU3ZiwgMHgwYjNiMzJmYywgMHhlYTA4MjVjZSwgMHg4NDVjNGJiZiwgMHhiOGVkNDFkYywKKwkweDEwMjE2YzkyLCAweDEyNmFmMTBkLCAweDA3OGVjNmYxLCAweDhlNDBiOTNmLCAweGRhZTRmYzZiLCAweDQ5NmVmYzNjLAorCTB4YWJlOWMzMGEsIDB4ZTVmYzZmN2UsIDB4MTdmZTlkOWYsIDB4MjljNzY3ZTUsIDB4M2E0Mjc0OTEsIDB4ZDQ5N2JiMTIsCisJMHgzZjdjZjc3NiwgMHhhNTRkNjNjMywgMHhiYTQzNGJlMCwgMHhmYmVhYzgwYiwgMHhiNjY2MDVkMywgMHg4N2ViZmUwZiwKKwkweGU2NGY5MDEzLCAweDJjNGM3NGZjLCAweGUyNjQwN2YzLCAweDZlMWFjNDdkLCAweDNhZjI1YzM3LCAweDc2MGZjMTYyLAorCTB4Y2ZjZTlmYzksIDB4NmE2Y2YzNzMsIDB4ODdhNGFhYmUsIDB4OWZmZTFkYjgsIDB4ZDM0ODk3MTAsIDB4NTFhMTdjZWUsCisJMHgwNDhiM2IwNCwgMHhjZGViZmZkMSwgMHhjNTdiYzI4ZiwgMHhjY2EzNzZmYSwgMHg2YmFmYmUwNiwgMHgzZjAwMmZkMSwKKwkweGYyYWZlZTExLCAweGE2ZDI5NDc5LCAweDc1YWFmMWIxLCAweDU5Yzc3YjViLCAweDc1Y2Y2YzY5LCAweGQ1NzFkZjgwLAorCTB4YzViN2RkZjksIDB4ODBmZGQ4MmYsIDB4MWQ1MTQzZDcsIDB4ZTYxMTQ1MDUsIDB4YWZlMzg5M2IsIDB4ZjBkZmY3NzAsCisJMHg3ZjRjZWFmZSwgMHg5OTc4MGNhYSwgMHhjZTZhMmY5OSwgMHhlZTY2OWRmOSwgMHgyNjQwOThjZiwgMHg3NzBhYjhjMCwKKwkweDBjOWI2NmRmLCAweDc0NDA3MmViLCAweDFhZDU3ZGMyLCAweDNiYTM0NWZmLCAweDFlYjFmOWMyLCAweGZjMWYwMDlmLAorCTB4Njc2NDI3ZjAsIDB4YzRmM2UwMDksIDB4ZDgwOGEyNGYsIDB4NzNmMWVmZDUsIDB4Y2ZiODBjYzksIDB4MWVhZTgxOTEsCisJMHg3MzFkZjgxNywgMHhiODRmY2NjYywgMHg3NGM3NmNjZSwgMHg5YzhlNjE1NiwgMHg2OGNkZmI0OCwgMHg1MDgzOGZiNSwKKwkweGZlYmNjMWI1LCAweGNiMDNiMzNhLCAweDRhNzZmMDg3LCAweGFjOTVjMWJkLCAweDVlZDFhNzVlLCAweGJmZmU2OTFkLAorCTB4NzlmODEyOGIsIDB4OTM3YmYzOTksIDB4NzViZDdmODQsIDB4MzVhOWY5Y2IsIDB4NDFmYTBiOTAsIDB4ZDE2N2UyYmUsCisJMHhmZGMxMzVkMywgMHhlMDlhNjk3MSwgMHhmNjBkZjkwMywgMHgwNTBiZTYzMCwgMHg1M2RlMWZkNCwgMHg2NGNmYWZlZSwKKwkweDdiYTE1NjcyLCAweGNkYWI5ZTNkLCAweDFlMDJmN2RhLCAweDg4N2Y3OGU3LCAweDY3ODI4N2QzLCAweGYxZmFiZjA1LAorCTB4YmYyOWY1MmEsIDB4OWZlZDU1YmEsIDB4ZGM2ZGFiYmEsIDB4NTRkZmEwNmIsIDB4ODFiYjA1ZmIsIDB4M2E5NmFhODIsCisJMHg2YjBmYjA4YywgMHhlMTkwOWVkYSwgMHgwNzNlZTY3YywgMHhhMmE0NGI4MywgMHg4M2Y4ZWFiMSwgMHgwZjE2NjY3NSwKKwkweGNkZmM2N2IyLCAweDJlNGU4MGYzLCAweDJjODEzNWFmLCAweDE3NDVhZTI0LCAweGRmODdjMDZkLCAweDBmN2YzODMzLAorCTB4ZGZkZTZjNzEsIDB4NTdkMzY0ODksIDB4M2MwZmFiZjAsIDB4NTk3Y2YyZjYsIDB4ZTcxNTM3MGQsIDB4NDczMmFiMzMsCisJMHgwM2RhNzcwNiwgMHg4MWU0YmI5NSwgMHg2NzVhN2EyYSwgMHhlNTcyYzc4ZSwgMHgwNzRhZTBmYiwgMHhmYjQyMGZiZSwKKwkweDFmNzg3MWMzLCAweDRmYjgxMTM3LCAweDhlZDJkMTkyLCAweGE4MWY2Y2Y3LCAweDU4NzQ2MzhkLCAweDg4Y2JiMmQ2LAorCTB4N2JjZDU0ZjksIDB4ZmEzZjRhMjIsIDB4NTBiYjM0ZmQsIDB4MzBiY2FmMWIsIDB4ZTAyODYzYWYsIDB4NTgxNGQwYTUsCisJMHhhNzQwOGNlNiwgMHg3Mzk0YTM5MywgMHgyNzI5YWZjYSwgMHhjNzZlOTQ1YywgMHgyNzI0N2ZmZSwgMHhhMjcyMjk5NiwKKwkweDk1ZTNlMzAzLCAweGU3ZGYwMmY2LCAweDMwMzEzOTJhLCAweDVhNTg5YzkyLCAweGViMDgxOGU3LCAweGZhNDc3NGIwLAorCTB4NGIyNGQ4NDAsIDB4MTQ5YTk5ZGYsIDB4ZWZiYzRlNDksIDB4NDdjY2U3NjEsIDB4ZWVmNjdkZjksIDB4ZGM0ZTU0ZDksCisJMHhiMzEzOTJhMCwgMHhmNDRlOTBhMywgMHhmNjUxM2VlZCwgMHg0MjcyNWY0OSwgMHhjYmZmYjc1OSwgMHg5MDdkZTZmYywKKwkweGY3ZjYxMTEzLCAweDcxMzkzYTE3LCAweGU1MThiZjhmLCAweDQ1YjMzZGM0LCAweDRmYWNiZGNkLCAweDM5MTM5NGZiLAorCTB4NWU2MWY3NDksIDB4YTA0NGM2NzYsIDB4N2RiOWY3OWYsIDB4MGJkZjk0NzMsIDB4NWU0MDdlODAsIDB4MTFkOTQ2NjQsCisJMHhkMWI5N2E2ZiwgMHg1M2ZmNWYxYiwgMHhmZmZhZjk3ZiwgMHhiZTE1OWUxMCwgMHgzZmRhOTRiZSwgMHg3NDQ4ZDRhNiwKKwkweDk3OWU5MDQ4LCAweGJhZjk0N2RlLCAweGY4YzhmNDAwLCAweGI5MDdkMmZhLCAweDY3Yzc1MzlmLCAweDY2Y2Y4MDhiLAorCTB4NmIyY2Y5YWEsIDB4NzI2NmVkNWYsIDB4ZjUyZGE2YTEsIDB4ZmNiNGI5OTksIDB4MDlkOTQ2ZmUsIDB4MzBmZWYyYTIsCisJMHhmMzUyY2RkZiwgMHg1ZWE4Y2NkZCwgMHhlMzE5NmVmOCwgMHgxM2ZkOTdiYiwgMHg2ZGVhN2Y1MCwgMHhmY2U2N2Y3ZSwKKwkweDExYjNmMjk2LCAweDMxZjQwOGNlLCAweGU2OGM2ZTY3LCAweDcxODlkZWRlLCAweDA2ZDhjOWJmLCAweDExM2RlNWZiLAorCTB4ZTYzZjc5Y2YsIDB4NzFjMWMwN2EsIDB4N2QwNGM5YmYsIDB4OWUzZTQ5ZmEsIDB4MmYzZDdjNzksIDB4M2U3OTQ4NzgsCisJMHgyMmRlNWZjNSwgMHg2ZDU3NGZhNiwgMHhkNTdmMTExNiwgMHg1N2ZmNmNhZCwgMHgwNzNlMGIzNywgMHhmZjhjMTdjZCwKKwkweDU2ZDc5ZTFiLCAweGI1ZTc2MGVjLCAweDM5ODUwNjc0LCAweDc4YWZmNWFhLCAweGNlMWVhM2FmLCAweDA4MzYyYTA5LAorCTB4ZjcwY2RlNzgsIDB4YTU5ZjAwMWUsIDB4Y2UyNTlmMWMsIDB4Mjk1NzNjMGEsIDB4YzFmYWQyNmQsIDB4MmY2ZGEyMWIsCisJMHgxZTEwMWI5MCwgMHg3OGFiYzNmYSwgMHgxMDUzNDJmZCwgMHg3ZjBhMWRjZiwgMHgyMDM3MzgyOSwgMHhhYmI2ZDQ5ZiwKKwkweDU5ZmI3MTFhLCAweDlhMmE0ZmIwLCAweDBkOWRkZjc1LCAweDM3MDRhZTc4LCAweGFkYWY0MWQ0LCAweDdiOTZkMTZhLAorCTB4OGIxN2JjZjgsIDB4MTQ2ZDhjODEsIDB4YjMzZGY5M2UsIDB4Zjc3OGY0ZjMsIDB4ZjY1M2YxZTgsIDB4ODg3M2YxMmQsCisJMHg5ZmYzMjdlMiwgMHhmZTI1OWY4NywgMHhmMDVlNzg1ZCwgMHhjN2EyZjE3NSwgMHgzZjE0NWQ0NywgMHgzMjRmMTgxZiwKKwkweDZjN2UzZjYxLCAweGYxN2YyMTcwLCAweGJiZTIyYmJlLCAweDE4OWU4YjRlLCAweGU1MGY3OWE5LCAweGVmMmYxY2E3LAorCTB4ODNmNWRjMTksIDB4ODBiNTVlYTAsIDB4NmZkNzRhZjUsIDB4ZjM0NDk3ZDksIDB4MzhjODViNzMsIDB4NmQyODY2MzgsCisJMHg5MGUzY2FkMiwgMHhhMDc1NmZmYywgMHhiYjViOWY3YywgMHhkYWI4ODA0NSwgMHg2MGJlZmNjNSwgMHg3YzA5ZWY5OSwKKwkweGU1YzFlNjNmLCAweGZhZDNkZTU0LCAweGRjOWJjNzBiLCAweDI4N2U1ZTcwLCAweDUzZmM4ODJhLCAweDQwOWRkZmExLAorCTB4ZmE2Zjk0YmYsIDB4MGM0ZTM4ZjksIDB4OWNhM2U2MGUsIDB4YjhlYzEzNmEsIDB4NGM1MTAzMmYsIDB4ODI3NWQxNmUsCisJMHg0Y2Y2NmQ3NywgMHg1ZjAxNmJmZSwgMHg2YTVmZTYxNywgMHg0MzU4ZWI2MywgMHg3NWY2MGRkNywgMHg1YmU3OWY4MSwKKwkweDgwZjgzZTk4LCAweGU3M2IyMmZmLCAweGQ5OTJlZmY0LCAweDQ5MDIzOGZiLCAweDQ0ZTc3ZTQwLCAweDhmOTE1Y2ZiLAorCTB4OTM5YWVlNzAsIDB4MWRkZjVhYTQsIDB4MzdmZThjOWQsIDB4ZTBmYzRlMDksIDB4MzZmYmZmYTMsIDB4YmFjYmRiZWIsCisJMHg3ZjRjZmEyYSwgMHhkM2MxNTdkNywgMHgxZjNhZGQ0ZSwgMHg5YzJmNmE4YSwgMHg4MjcyZTc4MCwgMHhmMjBiZGYxMywKKwkweGQxNzllMWM3LCAweGZlZjY0NmM5LCAweDFmYWU0MWNkLCAweGQ4MDVmN2U5LCAweDc4ZjdlYTFmLCAweDIxYzBjMDY2LAorCTB4MTQ1YTdhMmUsIDB4YmY2Mjk1YzYsIDB4NTMzZjRjNjksIDB4M2JmZDI5ZjMsIDB4NmUzNzVmNDgsIDB4YTNiNDg2YTksCisJMHg3ZjhlMTY1ZSwgMHgwNjZlZGY3NCwgMHhkMDRkM2ZiOSwgMHgxOWQxNDljNCwgMHgyN2ZmYmVlMSwgMHhiZWEzOTdjMCwKKwkweDM2NDkzZTAyLCAweGM4Nzk3Y2EzLCAweDE5ZWViZWNlLCAweDFlZjAyNDY2LCAweDMyMzVlNWRhLCAweDA2YmRkMWQyLAorCTB4ZTA2YzkxYzcsIDB4MDRjOThmMmYsIDB4ODNlNWM3ZjYsIDB4M2I5ZDFlMzcsIDB4YTQ0NWNhMDAsIDB4MjZmN2UyOGYsCisJMHhhNTZiODM1NCwgMHg5MWFhYzU5OCwgMHg1Yzk4NDdlMiwgMHhmZmZiYzEzYSwgMHhhZWQ3OTUxMywgMHhhMDk3Nzg2YiwKKwkweDdjZTI3YjA3LCAweGI2NzRiZjcwLCAweDA3NTRkNzczLCAweDBmMzI1YmY4LCAweGNmNzM4NmFkLCAweDIzZjY3OTU5LAorCTB4MWIxZDYwNDcsIDB4Yzc0ZmJiZDgsIDB4OWRhMWU0ZDcsIDB4MDU3N2QwZjYsIDB4ZThjNzY3ZGMsIDB4YmI5YzAxN2EsCisJMHgzOTFlYTc2NywgMHhlMGY3Yzc0MiwgMHhiNzNjNDQ5YSwgMHhiYzRhZWI5YywgMHhlNzMxY2UwNywgMHgwZTlkMTQxZSwKKwkweDVkZTE2ZjVhLCAweDdmOWMwYjU2LCAweDEyMmQxZjRlLCAweDBmMmYwYWI3LCAweGVmZjQ3NjkyLCAweGVlZmRhZGNjLAorCTB4Y2E0ZmIwZGQsIDB4Zjc4NDNjYTgsIDB4ODdmY2NhOWMsIDB4ZmM4NDBlYTYsIDB4ZDdkYjAxN2EsIDB4Yjg0NmRkNzgsCisJMHg3NGRlZDllNywgMHhmYjQ5OThkMSwgMHgwMGY1YTEyZiwgMHg1OWViMzVkZCwgMHgwMjhkOWFiZCwgMHhlMjU4MTdiZSwKKwkweDY0ZjkwMjdmLCAweDFmMDE0NmM5LCAweGZhYTc2OWM0LCAweGY1YzE5OWFmLCAweGJlZDEyOTgxLCAweGY5YTdiNjllLAorCTB4NzAwZjY4NTIsIDB4MDNkZGM2MzcsIDB4NzQzNTkzZTcsIDB4NTI3ZWQ4OWMsIDB4OTc1MzllMWQsIDB4OThiNDc2ZDAsCisJMHgyZWZjNmZiNCwgMHg1ZWIyNWJjMiwgMHhiMGFmNzAyMCwgMHhlM2VhNTI2YywgMHg0MWRlMDA5MywgMHg0N2U1MDlkOSwKKwkweDA4ZGNmZDc3LCAweGZiNDc5ZWUzLCAweDJmZTE0NDFiLCAweDQyYTYzYjE0LCAweGMxMDNmMjdkLCAweDE1MmVlZjhlLAorCTB4YmFmYjhiNWUsIDB4NjIzYmVmOWIsIDB4MTRlMmNkMWYsIDB4ZWZkY2EyMDQsIDB4MmFmMWQ0OTMsIDB4Yjg2OWQxMjUsCisJMHhkNzk2NGE5ZiwgMHgzYWJjYzNkNSwgMHgwNmE5ODliYywgMHg0NjhiYTdhNCwgMHgyOTI3ZTM5MCwgMHg3ZjU0ZGRiZSwKKwkweDcxNjQ2MTNkLCAweDI3YmM3YjMwLCAweGZlMmExZDhjLCAweDFkM2EzMmI5LCAweGNiNmEyZmRiLCAweDk4YjMzZTQxLAorCTB4ODUzYzYxMTQsIDB4MjNlOThlYmIsIDB4N2NhM2FiOWQsIDB4OTRlYjU3ZTAsIDB4N2RmMDI5ZWQsIDB4N2UxMzZhY2YsCisJMHg5MzJhZjBiZiwgMHg3NTg2MTczYiwgMHhmNGZiN2ZhMCwgMHhiZGMwOTk3YSwgMHhkM2ViOTVjNywgMHg5ZTNhYzFkNywKKwkweGUxM2IyY2RlLCAweDhlN2M0MGRjLCAweGJlOTQxMWM1LCAweDdiNjRmY2NhLCAweGE3YjgzM2Q2LCAweGNiN2YxOTliLAorCTB4MDJlZWVlN2IsIDB4OTRhNWRiZTAsIDB4N2U3MDk5NGYsIDB4ZTI1NjNlNWEsIDB4ZjUzZTQ3MjgsIDB4NGJlMzE0NWMsCisJMHhlN2E1N2U3YSwgMHgxYjhkNjU1MywgMHg2NWExY2IyMiwgMHhkMGU1OTEwNSwgMHgzN2VlN2FkMCwgMHg2YjlmMmM4ZCwKKwkweGJiZTk4NTg4LCAweGYwNzhjOWUzLCAweDBkNTcxNjYzLCAweGY0MDRkNzliLCAweDcwYmIyMGZjLCAweGYzNzgxZWQwLAorCTB4ZGM4MTlmZDMsIDB4M2JlMmI0YWQsIDB4N2Q5MmQ1NjUsIDB4ODNlOGMwOWQsIDB4ZWI5ZmZmMDAsIDB4ZWMyOWYyZGYsCisJMHg1MWI5YjI4NywgMHgyOWQ5MGVmOCwgMHg0N2Q4MGY1OCwgMHgxY2YwMTM2YiwgMHg4YzU3YzRiYiwgMHg3OWUyNTc3OCwKKwkweGY0YjQ5YjRiLCAweGVmMjFmOGFlLCAweGE1YzQ4YjczLCAweDMxNjU1Zjk2LCAweDc3YWFhNWM0LCAweDZlOTQ0N2Y0LAorCTB4ZGJmMzNmNjksIDB4Y2FiMDFmMDQsIDB4ZGNlYTNmYTMsIDB4ZTYyNjcwZmYsIDB4ZTVhZTM4ZWQsIDB4NmI1ODNmNWMsCisJMHhmYTNlYmE0NSwgMHg0MGQ1YzVjOCwgMHgyODdlZjNiNywgMHg4OWRiZDAxMCwgMHhmMjBmNWRkNywgMHg3MDQ5YmFiMCwKKwkweGY0Yjg5ZjgwLCAweDI5N2RhYzg3LCAweDNlZTMwZjZkLCAweDVmNDY3M2ZhLCAweGIwMWRjZTk0LCAweDNmZDdhYTBmLAorCTB4NmZlYjFmYjEsIDB4ZmYwMDFjMTQsIDB4ZDQ2Mjg2ZTgsIDB4MjJiY2NhMjcsIDB4OWQ4ZGYyYzEsIDB4Nzk1MDQ3NjgsCisJMHg3YjY4ZjE4NSwgMHhlYzEyNjJiYywgMHgyNjU1ZWE4MywgMHgxNTYyYjgzYiwgMHhiM2U4NTI3YSwgMHg0MGE3YmY5MywKKwkweGIzYjFjZWNjLCAweGI0NjczYjY4LCAweDllYjJmOTAzLCAweDQyMzljNTJlLCAweGZkMDI5ZTQ4LCAweGJkMTk3OGQ0LAorCTB4M2IyYWJlNzUsIDB4NGRmNDhiNjEsIDB4YmQxZWVjOWYsIDB4ZDAyMjdmNDIsIDB4ZmU5ODY2NWYsIDB4MzNjZmFjZjYsCisJMHhmNjllM2QwMiwgMHg5MTY3MTgwOSwgMHhmNDBiZjQwNywgMHg5ZmUyYjJmOSwgMHgxZWI1MTYyMSwgMHhlYTdkMTdkNSwKKwkweGZkMDdiMGU5LCAweGU5NThjYmMxLCAweGU4NTRmYTYxLCAweGM3ODc0ZjUxLCAweDhjMGY3MjI1LCAweDUxZDVhMWZiLAorCTB4ZmFiYzhmMzgsIDB4Y2U1OWVmMzcsIDB4Y2Y5ZTE5ZjYsIDB4OTIzZmQ1ZTUsIDB4NDRiYWZiMDQsIDB4MGE0MDcxNjIsCisJMHgxNjI0YWI1ZSwgMHg1YzYzZDYzNywgMHgwNzE5ZDc0ZiwgMHhiYTdjNjdmNSwgMHgwZThhY2M3MSwgMHgyMGYxZWRjOSwKKwkweDRhM2VhOWI3LCAweGRmOWZiNDAyLCAweGUzMTE3ZTZjLCAweGQyYmZjZjJiLCAweDM3ZWEyNzc5LCAweDAwM2E1MTZmLAorCTB4OTJiNjZmZmMsIDB4M2UyMWRhMDAsIDB4YWRlNTQ3ZTQsIDB4MTM2OWM2MjIsIDB4NGIzNTkwMjksIDB4NzEyYmJmNjUsCisJMHhiMmJmMTUzMSwgMHhiN2NiYmUyMiwgMHhiNDg1N2M5YSwgMHgyN2ViZjk3ZCwgMHhjMjVjNjJjNiwgMHg3YjdmYTYwYSwKKwkweDM5ZDgxMTVmLCAweDJjNjNiNzg4LCAweDk3MmEzYmRjLCAweDVlOGU3YzU4LCAweDM0NWRmODJmLCAweGRlYmJjM2IzLAorCTB4N2EwMzk5OGMsIDB4ZGVjY2QwOWIsIDB4Yjk2ZjJjMTcsIDB4ZmNhOTM2NTcsIDB4NjVhMmZiYmIsIDB4OTM5ZTFlYTUsCisJMHhjMzNhZTk3OSwgMHgzZTMwMGFmYiwgMHg0YTc2ZmJmNSwgMHhjYmQ3NGU1YywgMHhkYmNhZmU4YywgMHhjYWU3ZDQ2NCwKKwkweDgwNWNiNzliLCAweDYzZjJjZDc4LCAweDZiNzdiNDI2LCAweGMxMWEyZjlhLCAweGQ1ZmJjZDllLCAweGM0MWRlY2FiLAorCTB4YTcxMzUxMzYsIDB4YWUzZTIzZDcsIDB4MjA5ODBjNTksIDB4MGFiNWFiYWUsIDB4YmU2ODcxY2YsIDB4M2MyZGYzMTMsCisJMHhjNjZiZWQxZSwgMHg2YWZjNTU2ZiwgMHg4YTVlZWJjNywgMHhiZjZkOGFjMiwgMHg4NTdiZTFiNCwgMHg3ODZjOWJlZCwKKwkweGFiZjlhYTVmLCAweGM0N2I1NWUzLCAweGYwMzRiNWMzLCAweDRlM2JiODc4LCAweDkxOGZlNDEzLCAweGMxY2VlMWUzLAorCTB4N2QyMTI4M2YsIDB4ODc4ZGFkMTYsIDB4YmY4Y2NkMjMsIDB4NDU2NjcxZDEsIDB4YTQzNTBmN2EsIDB4ZTlmYWJkNzcsCisJMHhkZGNmMTBmMywgMHhlNzkzZjViNSwgMHg1Zjk1ZGM2MSwgMHhlMjFlN2U1YywgMHg2ODgyYTg2YywgMHhlNmE1M2QwNywKKwkweGZlMzFmNzk1LCAweDFmMTc2OTU1LCAweDk3YTBlZGMzLCAweGMzZjE4OTdmLCAweDcyNjhmZTE3LCAweDNiMGJiNDAyLAorCTB4ZmU4MGE3NGUsIDB4ZGZjYjYxNzEsIDB4NzgyZTIwOTIsIDB4ZThhOThlZDksIDB4M2RiNjU5ZGYsIDB4ZWRiZGRmMGYsCisJMHhmYTA1OWVjZCwgMHg3ZTIzZjVmNSwgMHg3YjZlYmY1OSwgMHgzYzYwZjc1YSwgMHhlZWJhNzlkMCwgMHg3MTQyMjdjMCwKKwkweDJjNTUyZDhlLCAweGUzYzFkNDdlLCAweDhlNDczNzFiLCAweGNmMTFlZjE3LCAweGFlZWIzYWQ4LCAweDViMWZjMDI5LAorCTB4NjdkMDllOTksIDB4YmE2MWUzNWMsIDB4NjNmNDM3OWUsIDB4ZjhmMzM3MWQsIDB4YmUzYjk2ZDUsIDB4M2NmMWFlMzIsCisJMHhkN2FlODNmYywgMHg3YzZkMThiOCwgMHg4YmFkYTdlOCwgMHg5NDJjZjE3ZiwgMHgxYWY0MjZiNSwgMHgwN2U4MThkNywKKwkweGY0Nzg5NGZlLCAweGQ5NWRhM2NmLCAweGRlYjA4OTMxLCAweGE0ZjE4MWZmLCAweDBlODU3ZWIwLCAweGE2OWZkN2UwLAorCTB4OGNmOGJmODAsIDB4NDRiZjQ0MWMsIDB4ZWYwOTg3NzAsIDB4MzhlZjk2NmIsIDB4YzJlOWZiOGEsIDB4ZWYxODQzZjYsCisJMHhmODVjNzg0ZCwgMHhiMWZhMTIwNSwgMHgwM2VlNWRmOCwgMHg2NTY4ZDlhYSwgMHgxZDdjOTBmMSwgMHg2MWQyNWUyMCwKKwkweDJlM2NlZmMzLCAweDEyYjVkMTkyLCAweDljNWJkOTJmLCAweDM0OThiMmU0LCAweDhiMGIzZWZlLCAweGY4ZGFhY2U3LAorCTB4MGMzZjhmMDEsIDB4MDkzMDliYWYsIDB4MmJmM2FiZDYsIDB4M2MxNTUwZTMsIDB4MTMwZjAxZDgsIDB4OTFjMDcxZDUsCisJMHg3MTQzNTJlMywgMHg4Mzc1YmFjMCwgMHgxZTNlMDRmNSwgMHhmOWE1ZjM4YSwgMHhlOWVmMTBhMSwgMHg4YTQ2OGUxMywKKwkweDgxYjBiZjJiLCAweDkwNWYwZmM1LCAweDU2OGZkZjIzLCAweDYyNmI4MmUyLCAweGQ3ZDZmYjc0LCAweGJlZTA3OGJmLAorCTB4ZjE3NWYxZTYsIDB4YTFjNjNmMzQsIDB4NWYwNTFiYTEsIDB4ZjMyMzU3NWQsIDB4ODQ2MzI3ZjcsIDB4ODViNzY0NmYsCisJMHgwYTU0OWJlZSwgMHg0ZjJjZmJmYSwgMHg5OTdkYzBjNCwgMHhiZTIzNGVkNiwgMHg1NWQ4YTI5MywgMHhkYzVkYmU3YywKKwkweDhhZjVkNmRmLCAweGY1YTI3MTg4LCAweGJmOTA3YjJkLCAweDM1NDdmOWViLCAweDhmZDE0NzNmLCAweDZmMWYyMzc3LAorCTB4MWY5MzFiNzUsIDB4M2VhZDViNWQsIDB4YjVkMzg1MGIsIDB4ZWJhNDRkZmIsIDB4MTg5ZGNkZWEsIDB4NzliZmJhYTcsCisJMHg3NTQzYjE5YiwgMHhjM2YyMGNmZSwgMHhkNzdmMWFhNywgMHgyMmM2YmI2YiwgMHhhMmVmZTczZiwgMHhjYWQ5ZmJlOSwKKwkweDNmOGQ2M2Y5LCAweDliMzUzZjcyLCAweGE5ZmE2YTJmLCAweGVkMThiNmYwLCAweDNiZmJiZTk2LCAweDA1ZWViOTI3LAorCTB4OTlkYWU3NzgsIDB4NDVhZTc1MWUsIDB4ZDA4YmU2OWMsIDB4NjQ2MmNmZmYsIDB4MzIzNzU3NmUsIDB4YTM5NTM4M2YsCisJMHg5NTljM2VmOCwgMHhkYTI3MDdiZCwgMHg1YjJmNTFhMiwgMHgwYzc0OWQ2NiwgMHg2NjVkMjFkZSwgMHhjYzVjNjIzNSwKKwkweDQ3MWUzYWNhLCAweDMyNjcyM2YzLCAweGViNGFmN2FjLCAweGJiYzYwNGVkLCAweGIyYWJmMDFhLCAweDliYmI2NWVmLAorCTB4MjcyNzNlODAsIDB4Y2ZhYTY1MTcsIDB4MWJmMTk0NjEsIDB4NGY4ODE4MDcsIDB4ZDNhZDhmYmQsIDB4NGE3ZDgyMDYsCisJMHgxODUwZWYyNCwgMHg3ZjY5OWRjNywgMHhiNjJlNDA5NSwgMHg5ZjdmOTg3YiwgMHgwMjMxM2Q1YywgMHhmNjRiYjdiZSwKKwkweDZlMTQwOTdkLCAweDA0ZTBiZTdiLCAweGJhNGY2Y2Q3LCAweDdlNDNmMDY3LCAweDFkZjY5NzA2LCAweDQ3NTNiYzVkLAorCTB4NjljOTc3ZTcsIDB4NmFkMTNkNDAsIDB4MTU2OWQ4MDgsIDB4NGY2YThkNjIsIDB4NDFkNzAzNDYsIDB4NWUxMjUyMWMsCisJMHg4OTc4YzBhNSwgMHgxMWU2M2NjNywgMHg0NmQ0M2Y3MCwgMHhmNTBhZGFhOCwgMHg1ZGU2OTI5YywgMHg5MjQ5ZDg5NSwKKwkweDcyMTU5ZGVlLCAweDU3YTUwNDc4LCAweGM1NTdhNzBiLCAweGZmNjU2NzVmLCAweGYwM2I3MGE2LCAweDBjYjg5NmZkLAorCTB4YmJlNDA3NTIsIDB4N2Q0NmVhZDYsIDB4MGI5YjI5ZTIsIDB4ZGZkMjNmZWYsIDB4ODg5Mzg4NjgsIDB4ZjU0ZWQxMjcsCisJMHg1ZmI0NTBiYiwgMHhkYTNiN2RjZCwgMHhlNzFmMjZhZiwgMHhhNjEzZTZkMiwgMHhjOTIzMjc0OSwgMHg4ZTNlMDQ5YiwKKwkweDc4ODJkMTAyLCAweGUwNmE5Yjg4LCAweDcwYWJiMmZhLCAweGRjNzg1MjY0LCAweDE5YzQ4OTcxLCAweDJjM2JmMjgwLAorCTB4NmU4MDhmNzgsIDB4MWU3YWFmMmYsIDB4ZGM3NjhiMTYsIDB4M2UxYTdjNzQsIDB4ZTFkMTliMTEsIDB4NmE3MWIwMzUsCisJMHgwMzg5ZGJiZSwgMHhlM2E3NDdkZiwgMHhhZjFiYWUzZCwgMHg3MGI1NmYyNiwgMHgwOTExMjc3ZSwgMHhkY2M1OWRmOCwKKwkweDJmZmUzODRlLCAweDRhYmRmMDY5LCAweDIyNGY4YTJhLCAweDM4YzI2NDRjLCAweGRlMjEzMGU5LCAweDgzY2Y5NjI1LAorCTB4NmZhOWFmZjYsIDB4ZWIwMWVmMDcsIDB4MGM4NzBiNWYsIDB4YjVlZmFiYjUsIDB4ZTBlNWMwZGUsIDB4OGE1MTRiMTEsCisJMHhhYzkzZWU4NSwgMHhiODE4YjVlMSwgMHhiODJjOWQ5ZCwgMHg2NWEwNGU0ZSwgMHg5ZmM4MDFmZSwgMHg2MWU3OTZkMiwKKwkweGM4ZDA4YTVjLCAweDVhYzQ2YWU4LCAweDQ0NjZmYjgyLCAweGFkNTVjNzkwLCAweGQ1M2Q0NjhhLCAweGE4ZGUyNjY0LAorCTB4OGUzZjcwZjEsIDB4ZDBmMWU1NzgsIDB4M2Y5ZjhmOGIsIDB4MjgxODU2MzksIDB4YTUwZDY5MjgsIDB4MWZjZWRhMzUsCisJMHhhNjJjMzVjYywgMHg0NTAyZDA4YiwgMHg4YjEwZmUxNCwgMHg1ZmY0MGM2YiwgMHg2YzlkYzMzZiwgMHgxYmQzMDcxOCwKKwkweDI4NzdiZjU2LCAweGMxNmJkYWVlLCAweDFiYTg2ODYzLCAweDE0YzBmZmJhLCAweDJlZjgyMTY0LCAweGRkMGVmMTA4LAorCTB4NTFiODcyMGYsIDB4MGVjNjUzYzksIDB4NDYzNDA2ZWYsIDB4MzMyZWYyODcsIDB4Njk4ZGY3ZTUsIDB4ZGFmMzdmMmMsCisJMHg3ZWYwZjVhMSwgMHhlOGJkYTc0ZCwgMHhjNzhjMGI2NiwgMHhjZjBlYmY2YywgMHg5YWYxMDJjMywgMHg5MzdiZDVmNywKKwkweDQ3MzhjYTJmLCAweGMxZTQwYzZmLCAweDA3YjdjN2ZiLCAweDIzYzVmYmQ5LCAweGZjN2JhMWFkLCAweDU5Mzc4ZjI4LAorCTB4ZWQwMDdjOTQsIDB4NDNkNmEyOGIsIDB4NWFhYWQ3YzgsIDB4MDFiOTYxMGUsIDB4OWUxZDM0ZjIsIDB4NDIxYmM4MTAsCisJMHg2NWJmNzllNywgMHhiNWYyNDE0YywgMHg3MTZiNWUxNCwgMHhiMWMxM2MzMiwgMHhiZjY2MzJkMCwgMHhiOGMzYzFhNCwKKwkweDYxZDliZGZhLCAweDZlMmI0ODNjLCAweDg2ZTFlMWQwLCAweDg1ODc4NWFmLCAweDg3YTg2ZjZiLCAweDNiZmE1NWY3LAorCTB4MGIxNzRhNmYsIDB4NzNkMzVmMDAsIDB4ZGI4ZWY4MGMsIDB4ZjQxNjYzYzQsIDB4MTQ1ZmQwYmYsIDB4NjcwZTIzY2EsCisJMHhiY2Y3MmY0MywgMHhjMjg1M2IxNSwgMHg5N2QzNTcyOSwgMHhhYmExNGVkMiwgMHg5ZDI2ZThkZSwgMHhlZjYzYWZkOCwKKwkweGU3ZTk2YTgzLCAweDg3YWUyZGRmLCAweDhiMzJkZTAwLCAweDg4OTZkZDJiLCAweDA1NzdjN2YzLCAweDhiOGJiYmE2LAorCTB4NzRjMjEzZjIsIDB4MDllZTJjNGQsIDB4MTFmZWFlZjAsIDB4NWExZjgyY2IsIDB4ZTlkYWZlNTQsIDB4MzRjNTRiMzksCisJMHgwMTFmZGUzYSwgMHgzYzMxYjgyMywgMHhkZWU1YzQ5ZiwgMHg5ZTc0NTFhOCwgMHhjNjAzMmU4OSwgMHhiOGIxMWZkNSwKKwkweGRiM2I0MDU3LCAweDYyMDA2MDljLCAweGY3MTIyNmNiLCAweGY3MGM0MTA0LCAweGZhOGZlY2EzLCAweGFmOGVjYzFkLAorCTB4NTZmODM2MmYsIDB4ZmM2MGYzYjAsIDB4ZmE2MTFkYmIsIDB4NDdkMWQwZTgsIDB4NWI0N2QxOTAsIDB4YjU0N2QyMjcsCisJMHg0N2QxOTNiZiwgMHgzNDZlNWQ1YiwgMHgzYjAzNTczZiwgMHhjNzA0OTFiYSwgMHg1OTM3YmFjMSwgMHg2MWE0MGIwYSwKKwkweDgyNjI2ZTk0LCAweGIyMzc0MGY1LCAweGMyODJiNmY3LCAweDNhZWJjNDI4LCAweGY1OGY1ZjE4LCAweGU2NTJlM2UxLAorCTB4MzZmYWRiZDUsIDB4NzFmYjQ4MWUsIDB4MDc5OWQ4MDYsIDB4YTYxZTc4MGQsIDB4YjdhOTRkZTAsIDB4NDZlMmMyYzMsCisJMHg3ZWU2Y2RmZiwgMHg5OWE5ZmExMSwgMHg5NjFmYjFkNCwgMHgzZjgxZWI2ZiwgMHhlZDg3NWM2MCwgMHhkMDVkY2NlMCwKKwkweGFlOWIzNmRlLCAweDZmZGMyMzkwLCAweGY4MTVjMWUzLCAweDdmMjM3ODRlLCAweDA0OTYzYmQ3LCAweDdiZDcyMGJkLAorCTB4M2ZkYjA3YzcsIDB4ZGU4MDdjMjEsIDB4ZThmODAxOTMsIDB4MGFmMmZkYzQsIDB4ZGQ5NjY3YmYsIDB4Y2U0MGI4MjYsCisJMHhlZjYxOGYwZiwgMHg2MTZlYmM5MCwgMHgxNmJiZjU3NiwgMHhhZjRjYTc5MSwgMHg1YmI4M2M0OSwgMHg3YjJiZmIwNCwKKwkweDI3ZWIwMTk1LCAweDllYTE5YTQyLCAweDVmNWUyYWZmLCAweDk1ZGRmOGQyLCAweDg5ZTg1NTc1LCAweDc4MThkMjcyLAorCTB4NzhmOWU0Y2YsIDB4ZmQyZDFlZjcsIDB4YTlhNGM3YzQsIDB4MWVlZDI5ZTAsIDB4NDVhMjkwZjcsIDB4ZWUyNjUwOTQsCisJMHhjODEwZjA1ZCwgMHgzZTNmNGE1NSwgMHg3MjMxYmI0ZCwgMHg0NDJkZTAxNCwgMHgyMzNlOTQzZiwgMHg3NzZkMGZhZCwKKwkweDdjNmJhZDg4LCAweDViMGJlODBjLCAweGYxMTUyZWY2LCAweGFlN2U4ZTVkLCAweDQ3YmMxNjZiLCAweGM1NjdlYjQ5LAorCTB4YjRhZGRhOTAsIDB4NGQyYzU2N2QsIDB4ZjNjMDlmMjEsIDB4MDg3ZTc5MDMsIDB4NzQzZmQzNGIsIDB4N2RmYTA0MWEsCisJMHg5ZWNiZjcwMywgMHg5MjI1NzhlNSwgMHg2Mzk5YmFmZCwgMHhiOGY0Y2YyMCwgMHg5NDE4ZTRlYywgMHg4NWJlY2EwYiwKKwkweDVjZTA1NDY3LCAweGRiZTdlMjViLCAweDAzMzRjMTY5LCAweDhmYjI5YmFjLCAweDYwMjFhMGE1LCAweDRkMmI0MmE1LAorCTB4Y2UyMDE4NzIsIDB4YmI4ZjVkZTEsIDB4N2IwYmNlMDgsIDB4NWZiNzNiZTMsIDB4ZWE4MWVlY2IsIDB4YzdjZTdmYmYsCisJMHhlYmY1OGRmMywgMHgyZmI4ZjRiZiwgMHhiN2UwMzlmZSwgMHhmOGYxZGNjYSwgMHhiZWFmOWE0YywgMHg2OWZhMzJmNiwKKwkweGRmNTRjNDU3LCAweDY4ZWY1NWZjLCAweGVlZmZjN2U4LCAweDAwYzRkZmQ1LCAweDMzM2ZmYTFkLCAweDM1M2ZiYzQ1LAorCTB4ZjFlOGNhY2UsIDB4YjYwZTY3ODAsIDB4MDRlZmUyY2IsIDB4MWM0YTgxOTIsIDB4MTVjZTJhYjIsIDB4ODY1ZWI4Y2EsCisJMHhkZjg2OTk0YiwgMHgwNWJhY2Y1MSwgMHhhN2FjMjA1OSwgMHhmNjg3OGE1NywgMHhhZTc4YTkzMSwgMHhhZTJlYWI3OCwKKwkweGJiMmYzOTU1LCAweDgwZmNjMDI1LCAweDQyYmViMTU5LCAweDc0ZmFlZmVjLCAweDNlNDlmN2Y2LCAweDk5OTJmYTYzLAorCTB4YTFjZTBmZmUsIDB4MzM3M2YyYTYsIDB4NWVmYjMxZDcsIDB4MDk1OTg3MTAsIDB4M2YwOGY5OGQsIDB4NWFmZDE1MzYsCisJMHhmZWZiNDQzOSwgMHhhZjQwZDY0MSwgMHhmNGYyODA2NCwgMHg2Nzk3ODQ1NCwgMHgxM2E3OTVkNiwgMHg2YjkxNWJmNCwKKwkweDRkZjljM2FlLCAweDBjZmQyYTI1LCAweDEzYTM0NmU1LCAweGQxZjRmMWY4LCAweGY3ZjlmZTk0LCAweGUxYmZmNGNiLAorCTB4ODY3ZjMyMjYsIDB4Y2RiOGNlY2EsIDB4YmU1MTVmNzEsIDB4YzQ2OTZmNDYsIDB4ZmI3ZTg1NzcsIDB4NTIzZjM4YjksCisJMHgyMTYzYzVmYywgMHg0MTE1MTczYywgMHg4ZjFlODAzYywgMHg5NTYxMGViOSwgMHhkZjEzZDFkNSwgMHhmMWU5ZmM3YSwKKwkweDhmNTFlMGFkLCAweDlkMGY5Y2I3LCAweDllOGVmMWY5LCAweDIzZTNkMWY4LCAweDViZTk3ZTdjLCAweDc1MzBlYjBiLAorCTB4NGJmMjg4YjQsIDB4ZmM0ZjdiYzEsIDB4ZWRmYWY1YjAsIDB4MDA5ZWI0YjUsIDB4MGRmMTQyZjQsIDB4MzAxNzRjZjgsCisJMHg4NjJiMjdiZSwgMHgzYTZjNGZkMywgMHgxNDBiMzdlMiwgMHgwZjQ4MDFjMCwgMHg1NWUzZDc5OCwgMHgwNGFjYzc4ZiwKKwkweGQ1ODEzZWRlLCAweDFhZjgwZmRmLCAweGVkMDBmYzg5LCAweGIyZGQ2NTIxLCAweGM2Zjc2YmQyLCAweGU4YzRkZTQxLAorCTB4YTdhYmQxNGMsIDB4YmQ1MGJjNzIsIDB4YmNlNmY1MWEsIDB4OWJmYTJiNDQsIDB4OWE5ZWFmNDAsIDB4NWU1YmM2MTQsCisJMHhkZTU3MWIxNSwgMHg2MDBiY2I0OCwgMHhmYzBhZmU5ZiwgMHgwNjA4YjFkMSwgMHg5NWJjYzVkZiwgMHg1NmUwNWZmMCwKKwkweGUyY2E1ZjNjLCAweGI3ZGYwNTU5LCAweDkzZDVhNjdlLCAweGNlMGJmYWE3LCAweGRjM2RmZTgyLCAweDA1NjU1ZWU0LAorCTB4ODcxMDhjN2YsIDB4ZmYxNDc5ZTcsIDB4ZDdmODc1YzcsIDB4ZjM2YmIzYjYsIDB4MGFmYzdjN2EsIDB4MjdiOTMxZmUsCisJMHhhYjdhMTRkZSwgMHg3Y2ZkNzJiMywgMHhmYTBhMTkzMCwgMHgzMzM3ZDhmMiwgMHgxMzdmODE2MywgMHhiZjQ0N2M3ZiwKKwkweDQ1NjNjNGM0LCAweDZlOWMzODIxLCAweGUyMDU5ZTkxLCAweGE3Yjc3ZDBlLCAweDc2M2UwYjdmLCAweDE1NDk0YTkwLAorCTB4NzI1M2JiMWYsIDB4ZDhkZWIzYWYsIDB4ZWIyOThmOTMsIDB4YzdhZjg1MzUsIDB4MDVkZGUyMTQsIDB4NDQyOWE2N2UsCisJMHgxZWM4NGJmYSwgMHhmZmNmMGQ0OCwgMHhiM2Y3MmI3OSwgMHg2MDQzMjEwZCwgMHgxYzU4NWY5ZSwgMHg3OWYzZmY4YywKKwkweGQ1NGRlNjg2LCAweDliM2ZlODRiLCAweGI2NmQ5ZmY3LCAweDEyMWJmZGUwLCAweDc4NDJiYTk0LCAweDkzZjdjMzRlLAorCTB4ZjBmOGM2YmMsIDB4YmQ2NTY0MzgsIDB4ZDMwOTZhNTMsIDB4ZmJlMmU2ZTcsIDB4ZTQyZjE0ZDksIDB4MzhmMDk4Y2IsCisJMHgwOTA1NTliNiwgMHhlM2UyMGZkZiwgMHhmNjZjZGYzOCwgMHhkM2RiOWM0MiwgMHgyYjBkZmI5MiwgMHg4Mzg0M2RmOCwKKwkweDUyN2U3MTYzLCAweDNmYzgxNDYwLCAweGI2ZTVmOTdkLCAweDRlNTBkNWJkLCAweDNkNjA5NWViLCAweDkxMGFmZTNlLAorCTB4M2I4MjFmZjksIDB4NTIxN2JlNGMsIDB4ZTk1M2Q3N2IsIDB4YTEzOTQ2ZjYsIDB4ZGMzNjcxZDAsIDB4ZTgwMWJkN2IsCisJMHhiOGMyMjgzZSwgMHg2NTVjZmNmZCwgMHhjZjc2NDVlNywgMHhhYmVjNDVjMSwgMHhmNmYwYTdhZSwgMHgwMmY3NjI1ZCwKKwkweDgxZGIyOGYyLCAweGVkZmE3YTdhLCAweDQ5ZjM0ZThiLCAweGQzYjQxZTcwLCAweGNmMjJhYmQzLCAweDViZmRmODFiLAorCTB4NjhiYjNmNDUsIDB4ZWIwZmJmNzUsIDB4ZTNlZmMwZGUsIDB4YmE4ZTJmZmEsIDB4MWJlN2Q2MGUsIDB4MmQ2MWQ1ZDMsCisJMHg0NGY0Mjk1ZCwgMHhmNDM4ZWJlOSwgMHhmMWY5OWRkMywgMHhkZmNiNTAzYSwgMHgwNDljYmNjYiwgMHhlM2QxNTFmMiwKKwkweGViOGFmYWMzLCAweDliZDdhODYzLCAweGU2ZGMzZjNlLCAweDg1N2ViMmVlLCAweDM1ZThhZjNlLCAweDY0MjNkOTdkLAorCTB4ZDM0NjQ0YWYsIDB4ZWJlM2NlNzEsIDB4MmVkY2Q3MzMsIDB4NDFjNjhiYjMsIDB4ODg2ZmQzOGMsIDB4NzNjYmRlNTYsCisJMHgzOTNlODM0NCwgMHg5NWVkMjFhZiwgMHhhYzU3Mzg2NiwgMHgwN2Y5N2U2MywgMHgzZDhkNjU2YiwgMHhiZWRiODZlYywKKwkweDY3YmQ5ZWQ4LCAweGI2Yjk3ZjNiLCAweGVmOGEyM2ZjLCAweGNlZjhmMTQxLCAweDg2OGVkNmFkLCAweDdlMTQ5MWZkLAorCTB4YmY2N2I3Y2YsIDB4YzljODJmMDYsIDB4MzFhMzIzNzksIDB4YWZkZjRlN2UsIDB4N2VmYTdlN2UsIDB4NzAzNWZkZjUsCisJMHhkOGMxYWFmYiwgMHhkMmE5ZGEzOCwgMHgxNjM2ZWM0ZiwgMHhjZDY5N2Q0NywgMHgxNGYwY2Q5MywgMHg3M2Y4NmY1ZSwKKwkweGQ0Yjg4NzliLCAweGEzYWU2ZjdmLCAweGE0NGU3YTIxLCAweDc4MTQ2OGY3LCAweGMyZTdiZTBhLCAweDBmZTA5OGNiLAorCTB4MWVmZjk1YTgsIDB4NmNkZDlkZTksIDB4ZjQxM2YzMzcsIDB4NjA4OGVmZDYsIDB4ODY4M2VhM2UsIDB4ZTgyMjAzYTcsCisJMHgwNDgyMjNmNSwgMHhhMGVjZjBmNSwgMHg2MzUwYjBjYiwgMHhiOTdiMzAwZiwgMHhlZjAwM2Q4NywgMHg2NTdjZDBhNCwKKwkweDBmNjYyZWViLCAweDVkYTFkNGI0LCAweDBhZWQ0OTUxLCAweGUwMWIzYjkwLCAweDdjYzE5MDFkLCAweDI3NjgxOTQwLAorCTB4ODg1ZWVjODQsIDB4Nzc4NmNhYWYsIDB4MGM1ZGI5MzIsIDB4MzdhNWE3NGYsIDB4MWYzM2ZhYjIsIDB4OGMzNTM3NGYsCisJMHg5ZGQ1YmIwMCwgMHhjZTkzMmYwYywgMHhhOGZiNWRiNCwgMHhmNTU3ZGE5OSwgMHg1MDhhMjRhOSwgMHg3NmM4YWFmYiwKKwkweDRlZDY3N2VkLCAweGRlM2JkY2EyLCAweGE0YmJjMDI1LCAweDY1YThmZjM0LCAweGVjZWRmZjcyLCAweDhmZDFiNjk5LAorCTB4ZGE4MWJmODIsIDB4NTRkOWI3NjcsIDB4ZmI2ZjZmNzYsIDB4MDM5YjY2ZTMsIDB4ZmVkYmQ5ZjEsIDB4Y2QxN2I0ZTgsCisJMHhkZjhhMzgwNCwgMHhlNDIxZjI4MiwgMHhiZTI4ZmUwNywgMHhmNDQyYTNmZiwgMHg1Mzc4MGIxNywgMHhlNWY2ZTVlOCwKKwkweDg4Y2VkMTBiLCAweDBhNmFlNmJhLCAweDczNjU5M2M0LCAweGI4ZGI3MDNhLCAweGMxODYzNjVmLCAweDcwNjE4OWE5LAorCTB4Mzc2ZTRhMjYsIDB4ZmJiZGQzZjQsIDB4M2JmMDI4ZWEsIDB4MDRmYTNiYmYsIDB4MmI3ZTc5ZGEsIDB4ZjQxZmRiZjMsCisJMHhlM2E5MTU5NCwgMHgwMjZkNmJkYiwgMHgxMGMwOTdhNywgMHhkYzc3N2ZkOCwgMHhlYzAxMjdiOCwgMHhjMDU5NmM5NSwKKwkweGIyZmQ0ZWY3LCAweDk5ZjFlOWVmLCAweGRiNjY5ZmMwLCAweDY2MjlkMjU3LCAweGZkZTIzNjRmLCAweDYwNTQ3ZjMyLAorCTB4M2QyYWMzYzgsIDB4NGRkZmNmY2UsIDB4M2ZkYzVmZjUsIDB4ZGNmZjFkNDQsIDB4YjVhYmNkNmUsIDB4YzAyMmY4MzEsCisJMHg3YmRjY2VjZiwgMHhkZTgwZjQwYywgMHhhZTU4NGVlNCwgMHgyYjkwMDRiOCwgMHgyNGExZWFlNCwgMHhkZDZhNWYzYywKKwkweDY4OWYwMzY3LCAweGUwZTc3ZjE3LCAweGE0OWVlYjdjLCAweGRhYWQzNDA1LCAweGIwMzY5ZmYyLCAweDNlMzhlYWUzLAorCTB4ZjhlZDRiY2UsIDB4NzZlNTUzNWUsIDB4YTExM2RmMTEsIDB4MDAzZDI2ZmQsIDB4ODVkNmViN2UsIDB4MWZkZWVjNTksCisJMHhjOGE2YWZiYiwgMHhlZjlmZjFkNSwgMHg5Y2M0NTIxOSwgMHg0Y2ZmNzg4OSwgMHg5OGE3MzdkMSwgMHg5ZjE4M2ViZCwKKwkweDFkZmQ4ZWJmLCAweGY3YmEyOWNjLCAweGVmZTU2ZWM5LCAweGNmZjVlOTkzLCAweGUyYjI2YzY3LCAweGE5ZjhjMzJmLAorCTB4NGZkNjc2NjUsIDB4ZmIyYmZiNmYsIDB4NTNlMjA0YjMsIDB4Mjk2Y2JmZWQsIDB4YjNmOGMyMjAsIDB4ZWZjMjRiM2YsCisJMHgzZGE0MGZlNywgMHgzZGY2MDg1NSwgMHgwMTIzOWQ5MSwgMHhhMmY2NDRhYywgMHhhN2NmY2I3ZSwgMHhiYzJmNmZlOCwKKwkweDY3OTNiZTdiLCAweDNjYmQ2ZWRlLCAweDZlMjQ2NmViLCAweGQwMDRkNzJhLCAweDk4MDNkY2M3LCAweDA3Yzk5MWQzLAorCTB4ZjViYmZmNDUsIDB4NTVkZmFkMzMsIDB4NzIyYjA3YWYsIDB4NmUzZmQ3MzIsIDB4NzgwMjEwZDUsIDB4ZmJjMmNjNzcsCisJMHg4YzI0MDcxMywgMHhjOWViZDJmNywgMHhiZDA1ODM1MywgMHgyMDRmYzNlOCwgMHg0ZDZkNmQ3ZCwgMHhmZTdiMDE4ZiwKKwkweDAwOWY2MGRmLCAweGM2NWViNmRkLCAweDQ5YWE4M2Y3LCAweGM3NzgxZWUwLCAweGI0NTViYWE5LCAweDI0ZmM2MDA3LAorCTB4NjdkODdhZjMsIDB4ZTBhMTNlOGEsIDB4MWVlYWVkYTUsIDB4N2ZkYTU4ZjMsIDB4N2Q4MzQ1ZjYsIDB4NzZmMTA1MDUsCisJMHg1NzY4MmZmMCwgMHhjMWZkZjg0ZiwgMHhmZTY3OTAwNCwgMHgwN2U3ODRhMCwgMHhjNmY3MTdkOSwgMHg0NWYxNTQyYywKKwkweDdlMDM1NWZmLCAweDZlZWFmYjdmLCAweGZjNjBmN2VkLCAweDhiNmVkMGY1LCAweDdiY2JkOTgxLCAweDA2M2RmZmY3LAorCTB4NTdkYmQ0ZjgsIDB4OTBiYzIxMmYsIDB4NmY1M2QxM2UsIDB4Y2YzYmZkNDYsIDB4ZDFmYzg2MmEsIDB4ODg5OWJkNmEsCisJMHhkZTIxODdkOSwgMHgxNTJjNmE2YiwgMHhmYWVmNDI2YiwgMHg2NDg3Y2U3MCwgMHhkNGY0OTU5NSwgMHgyNzc4NDIyYiwKKwkweGQwZjAwOTJlLCAweGYwNTYxZjQzLCAweDNlMzNkM2FjLCAweDc3M2Q3MWIyLCAweGVmMGYxOTE4LCAweDRkNWRiNjVlLAorCTB4Yzc3YmMwYTgsIDB4MGFmYjE4ZmUsIDB4OGY0Y2NmOTQsIDB4ZWU3YmRlZWEsIDB4ZmRmMGU5YzksIDB4OWRkZWM4YTAsCisJMHg3ZWUyMmFiOCwgMHg2MmIzYmRkYSwgMHhkZjZhODc3OCwgMHhlYjhhNGU1MiwgMHhjNWQwNjU3NiwgMHhmYWQxNmYwYiwKKwkweDMzNDVmNjU3LCAweGJjZTRiYWZmLCAweDIyNGY3ZDVlLCAweGYxYzdkZjVjLCAweGNlY2MxODE1LCAweGUxODNiY2U5LAorCTB4YWM2ZmE4YmQsIDB4YjBmNTc0Y2YsIDB4NDM2MWZmZjcsIDB4MDA1ODM5M2QsIDB4ZmFkNDYyZTIsIDB4ZmZhYzIzNGUsCisJMHgzZThhZDliZiwgMHgyNWE1ZmM2NywgMHg5NzhiZjgwNiwgMHhiNDIxMGVlNCwgMHg5MjY4YjJkZiwgMHhhYzE1NzQwYiwKKwkweDMzYjA3NjIzLCAweDE4MzAxZmI2LCAweDM3MzI1ZDYwLCAweGNmNWM2MmE1LCAweDczMWNmYzJiLCAweDMxYTM0YjQ5LAorCTB4NGIxNzQ1NTUsIDB4MTlkODM5ZjgsIDB4YWYxMjliZDksIDB4OTYzMmJlZmEsIDB4ZmIzMzk3ZjEsIDB4NzE4MTdmY2EsCisJMHg5MTM0N2YxZCwgMHhkMGY0MTE5MSwgMHhmZTRjYjE4NSwgMHhhNzdhMzM2ZSwgMHhjNzdhODY2ZiwgMHg2OGRmNzgwZCwKKwkweGVmNWZmZWVmLCAweDk3OTM3Nzg3LCAweDAzOGM3MzFjLCAweDU4OTRlMGJmLCAweDBlZGEwZmI2LCAweDcxMGY1MmJlLAorCTB4ODIxZjZkYzEsIDB4NjY3MmEyZDQsIDB4YTA2OGIxNjMsIDB4MWM0NWJlZmQsIDB4OTg3N2FmY2MsIDB4OTBkNmJkZmQsCisJMHgxMmI4OTQzZiwgMHhjNTM3OWU2MCwgMHhkNmZkYmUzMiwgMHhkY2U2ODMwMSwgMHhiZWZlMmRlYywgMHg4Y2IxZjVlZiwKKwkweDMyYzZhNTBmLCAweDAzZDZkYWJmLCAweDcwMGIwOWI5LCAweGM0NDdiOWZmLCAweDY0ZjAxZjgyLCAweDQ1NmMzZDQ3LAorCTB4ZThhODBmYzUsIDB4NmYwZjkzNmYsIDB4ZmU4NjNlOWQsIDB4YzE5NzcyNzMsIDB4MzhlZGNiMGUsIDB4ZjMwODgyZmMsCisJMHgyNDIxOWM3NSwgMHhmNDNkMjA0ZSwgMHhhYzZmMGEzOSwgMHg1ZDViZGUxYSwgMHhjNzFkMWUwYywgMHgwYWFmZDg2ZSwKKwkweGZlMDRhOWZlLCAweGJmY2QwNjcxLCAweDQzYzUyZWQ1LCAweDdmODI5ODNjLCAweGZmNGExZTY1LCAweGRhZTIxNjhlLAorCTB4ZTRhZGMxNjAsIDB4ZmUxNWZhZGEsIDB4MzFlZmU1NjgsIDB4ZTUxM2IwNGMsIDB4NWQyMDMzZWYsIDB4NmViOWI3NmUsCisJMHg2ZjcyYzU4OSwgMHhlY2NmZTQwYSwgMHgzNmQyN2E2MywgMHg3MjQ5NGYyZSwgMHg5ZmMwNzBmMSwgMHg3OWYzNGViMiwKKwkweGI3YTc4Y2FhLCAweGUzZTdlZmZlLCAweDRiYWZkMjU0LCAweDBlYzhhZmQ3LCAweDc2Y2RkMjJmLCAweGYwZWU0ZjE2LAorCTB4MTBlOWNjMDYsIDB4OGU5NmQ2NzcsIDB4MTU0YTlmN2YsIDB4OGUzZjdiOTcsIDB4ZmRmNjhjZmYsIDB4ODMwZWI2YzIsCisJMHg1NThmZWUwMSwgMHg1MGUyMTBlZiwgMHhiZWE3ZWRkZCwgMHhhOTMzYTIxZCwgMHhlZGFmZTkwNSwgMHg1YzdkYzExOCwKKwkweGU2NWRmY2RlLCAweDlmNzJhNDhmLCAweGU3ODZlYmJmLCAweGY4N2ZiMGViLCAweDgxMjBmYjM5LCAweDFiZmQ5M2E2LAorCTB4ZmM0MTBlNTYsIDB4YWZiMDZjMDYsIDB4ZmJhMjc4YzIsIDB4NDZkYWQyMDYsIDB4OTJlYmQwMjMsIDB4ZTUyZDJjNjUsCisJMHg5YTRiZDVlNywgMHg0YjNmYjhkYywgMHhjNDc4YjNkNiwgMHg0Y2E5YjE2NSwgMHgyNTdhNzMzZSwgMHhmOGMxZTg4NiwKKwkweDdiNGRiYWRlLCAweDVjMWZmMDhmLCAweDdkNmQ5ZTdlLCAweDRiZjQwZjZhLCAweDgwZmJlYmU5LCAweDllZGE5YjhmLAorCTB4NTVjMzA3NTgsIDB4NDZlY2Y1ZTgsIDB4NDU5NGUxMTksIDB4M2RmM2NmNmIsIDB4YjhjZmNjYjEsIDB4ZjdhMzMwZmQsCisJMHg1Y2U1MWJjOSwgMHhiMjZjNGY3OCwgMHhiZmMxZDg5NywgMHg0ZGM2ZDZmZCwgMHhiN2VmZjAyMiwgMHhkOTUzOWU4MCwKKwkweDdiNzkwNzNlLCAweDMxNjNkZjY2LCAweGQ2ZjkwN2RmLCAweDQ3ZTAyMDY5LCAweDY1MjQ2NmRmLCAweDYyZmI1NDViLAorCTB4MzQzNzg2ZWYsIDB4YjliY2I3ZmIsIDB4ZWJmYTNhNmUsIDB4ZTAwNWUyM2IsIDB4NTViZWNhZjMsIDB4ZThjZGJlZjAsCisJMHhmZmY3MGRiYywgMHg5ZmZkYmE5ZCwgMHhjMmI3ZGFjZiwgMHg0ZjdhZDBiYSwgMHhkNGZmZmRmMSwgMHhlOWZmYmEzNCwKKwkweDcxOGRiOGE3LCAweDY2ZDljMDAyLCAweGRjY2VmYzhjLCAweGZlOTBkZjRiLCAweGEzYjU3YzQyLCAweDI5N2Q1ZjA3LAorCTB4NmMxZmY5OTYsIDB4ZWFmZmI0ZTksIDB4ZmZhMTJlM2IsIDB4NGUzZTM0MjEsIDB4MmJlNTRmMzcsIDB4MDAyYTkzNzQsCisJMHgwYWU5MWJmZSwgMHg1MTdjMDA4ZSwgMHg1MzNkMDJiYywgMHhjY2ZlN2EzZCwgMHgwNzk1ZGMwYywgMHhlMWZmM2MyNCwKKwkweDJlM2M0YmU3LCAweDZhOTQ3NzA0LCAweDk5Zjk4NmJmLCAweDZmZGQ2ZmIyLCAweGYyYjIzOGMwLCAweDllODI1NzZiLAorCTB4NDVlODUwOWYsIDB4YjgyYjNjZmEsIDB4Nzk1M2M3ODcsIDB4NzFmNjE2NzYsIDB4OGViMDdlMDQsIDB4ZWM4YWUzZTMsCisJMHhmZjdkZWJlZSwgMHg2NWNmNDBjMSwgMHhmOTg0NjJkNCwgMHgxZDgyZjU5MCwgMHg3NzI5NDVkNiwgMHhiZGVmNjdhYywKKwkweDk0ZjBlNjFlLCAweDJkYmY4N2VmLCAweGRlM2Q4M2JlLCAweGYwY2MzZDIxLCAweDVjNDIzNDFkLCAweDkzMWYyOGViLAorCTB4YzVjODQ0NjMsIDB4YjcwYzQwZmQsIDB4YjY3ZDg2MGYsIDB4ZmJhZmNhODQsIDB4YWNlYmYyNTUsIDB4YWE3NDg4ZGMsCisJMHhjZTIzZTFlMCwgMHhiMWM0YWViNywgMHhjN2NlM2Y3OSwgMHg1ZDFmMDdlOSwgMHg4MmZmMGFhMiwgMHgzZjZjMDkyNCwKKwkweGU3ZGIwMjhiLCAweGJiM2ZjMDIyLCAweDkwZGJhNmVmLCAweDRjODhlZmRlLCAweGI3YjA3NmVmLCAweDQ3ZWZlMWUyLAorCTB4OGNmYTQwNmQsIDB4N2JjNzY2OWIsIDB4Y2U0OTRmMmYsIDB4N2U4ZDM4YTgsIDB4ZWY3NGMzZTQsIDB4Y2VkMDY3YTYsCisJMHhmZDg1ZmEwMywgMHg5N2ZkMWJkZSwgMHgwODkzZmQwMSwgMHg3NGEzZWY3NCwgMHg4NTNmNWFhZiwgMHhmYzVkMjgwZSwKKwkweDdjYTVmMDFkLCAweDcyODVkM2Q3LCAweDY1ZTBhOTBlLCAweDczMWNlZTliLCAweGU5ZTE5ZGFhLCAweDhkNTIwMGZmLAorCTB4ODAwMGI1NmUsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RiZGZmMDAsIDB4ZDU1NDdjMDksCisJMHhmMzdkZjhkNSwgMHgzMzMyYzk2NiwgMHhiMjc2NGM5OSwgMHhhMDBjNDkzMCwgMHg4MDQ5MGUyYywgMHgwODRlZDhiMCwKKwkweGMzODg0YTIwLCAweDkzYTBkNzUyLCAweDM2NGIwOTAwLCAweDk0NTY5NTEwLCAweDhiMDYyMDgxLCAweGI2MmQxNTE4LAorCTB4ZWY4NTgzMjAsIDB4MTA2ZDFiNDMsIDB4MjY4MzU4YTgsIDB4NjIyZDExMTAsIDB4YTU3ZmIxZGMsIDB4NDE0NTkwNDEsCisJMHhlZDFmYTgyMiwgMHhlNzNiZjU4NywgMHgzMzMzN2JkYywgMHg2YTAyMjY2ZiwgMHhlZmM3ZTFmZiwgMHhkZjc3ZGVlNiwKKwkweGNmN2VjZTVkLCAweDZlYzVmNzM5LCAweDg0MzYzMWQzLCAweGFlNjMwNzMxLCAweDdkOGMwMWU2LCAweGY0YmYzZjhmLAorCTB4YTEyZDhjOTcsIDB4Y2YzNzczZTcsIDB4ODIyNDcxNWUsIDB4ZjBmN2NmZDEsIDB4NWU3OWJhYmYsIDB4Yzc3NmJkNTAsCisJMHhlOTFjNTdhZiwgMHhjNWNmYWZlNywgMHhmZmUwNTI1ZiwgMHg4OTY3YTY3MSwgMHg0N2YxNTU4YywgMHg4OWVmNGNhYywKKwkweGZiYzAyNWI1LCAweDZjZDY5ZDExLCAweGUyNjZiNDk4LCAweDAzODQ2MzE5LCAweDgzMTk3ODlmLCAweDFjNjM2ZmY2LAorCTB4NmZhYTNlNTQsIDB4MWYyYmQzZGUsIDB4ZTljYzMxY2EsIDB4OWIzOWE2ODUsIDB4OTk4ZjE1MzMsIDB4MWIzNjA1YjEsCisJMHgyN2Y5NjdhZCwgMHhiMGRkOTNkMywgMHhjNmM2NDZkZSwgMHhjNTliYmFlMywgMHhkOWRkNzI3YywgMHg5OWM2ODUzNiwKKwkweDhmNzMyOWUwLCAweDY2Njc4Mzg5LCAweGEwN2I5ZTRmLCAweDY2MDdmOWZmLCAweDg4NmQ5NjRmLCAweDcwYTEzZWJmLAorCTB4NDAxOGVhYmUsIDB4N2VjNDhjNGIsIDB4MGM5ODU1NjMsIDB4YzliZjlmZTYsIDB4MzI2NTMzZTQsIDB4YzQ5ZjA1YjYsCisJMHhhM2RiMmFjMywgMHhmZDMyOWI3YywgMHhjY2Y0ZDllZiwgMHg5NjMzYjdhNSwgMHg3NWE0Y2I2YiwgMHhiMTVhZWFjMSwKKwkweDY0Njg1OGVlLCAweGRmYmNjMTk3LCAweDliYjU5NjY2LCAweDFkZDVkMWUxLCAweGIwODFlMmRlLCAweGVmNDYyZDhmLAorCTB4Mzg5OTg5ZDQsIDB4MWMxYWYzOTgsIDB4OWQ2MjlhZmYsIDB4NmE1ODAxZWQsIDB4MzhhNmNiYWMsIDB4Njk5MmQwMDcsCisJMHhjZjhmYjY1ZSwgMHhlY2VkOTc5MywgMHhlZWExYjJjZiwgMHgyZGI5ZTY3MCwgMHhmODEyOGQ4YywgMHhjOTMwYWQ2MiwKKwkweDQyMWMzZjcwLCAweGQ5ZTFjNmYxLCAweDIwMTc1ZTEzLCAweDE3NTA4NjdjLCAweGQ1ZTI3ZTdhLCAweDY2N2QxYmE4LAorCTB4MDE0NGYzZmYsIDB4Nzg2MzJmYmYsIDB4ZDNjMWFkZjksIDB4MWQwZTY2ZGIsIDB4NTUzZTYwMjcsIDB4Y2FjYzY2NDksCisJMHg1YzU1NGIzYywgMHhkYjY2MjhmZiwgMHg3NzNmZjBlNCwgMHgxYzJlNjI4YywgMHg1NzE4OWE3ZiwgMHg4ZmZhY2JiNiwKKwkweDEwYWVhZmE2LCAweDc4ODY5YWZhLCAweDIyZTg4ZWFkLCAweGQwNTNlYWJhLCAweGJjYzA3NDY5LCAweDhiZGQxOTRjLAorCTB4ZWU5OGZhYzEsIDB4ODBhYzVlZGEsIDB4YmQ3MWVhYmEsIDB4Mjk1NTQ4MDAsIDB4ZjZjN2ViZTAsIDB4ZDczMzhkODQsCisJMHgwMWQ5OWUyMywgMHgwY2M5Y2IxMywgMHhjZGI1NjdkZCwgMHhkMWI2ZTFjMCwgMHhlODY2ZmEzMCwgMHhiODY1ZTA5NywKKwkweDgzOGJjMDAzLCAweGRlMzU4NWUzLCAweGRjNmJmODhhLCAweGQ3ODg2MjY4LCAweGRjMzk2MzZmLCAweDY4ZDk1M2FjLAorCTB4NDJiN2Y0MDMsIDB4YzZmNzI0N2YsIDB4NTcwMzllYTksIDB4ZDkzMWJkNDEsIDB4OWU2MDUwZTgsIDB4YzIyZTg2MTMsCisJMHhhMGFiODlmYiwgMHhhZGMzZTg4ZCwgMHhiYzRmYmUyMCwgMHhkZjlhZTIzYSwgMHhhMjc3YmI0MCwgMHg4YmMwZTU4ZSwKKwkweDA1YjA4ZDViLCAweGE3YmZjM2E0LCAweDQ4MjkzNmY5LCAweDI3YzQyZGE3LCAweGMxYjJjN2YzLCAweGJlZGU3ODI2LAorCTB4ZDVkMTE4NjksIDB4MDUyY2UyYWMsIDB4ZTZjZTc2ZTksIDB4ZGI5ZjA1NTgsIDB4MmE3NGQ4YzcsIDB4ZDg2M2VmZjMsCisJMHgxM2U4OTU0MiwgMHgxNmRlYTBmOCwgMHhkZTYxOGY4MCwgMHhkNWUxMTUzYSwgMHg2YzkzY2UzYiwgMHgxMWVjNjU4OCwKKwkweDIzZTMzNWRiLCAweDMyY2U4MWQyLCAweGNjMWIyNDU5LCAweDVmNTA0M2Q4LCAweGI0NmI3MDA5LCAweDRiMTYxNGJiLAorCTB4MGE3MzA2ZjUsIDB4MjM2MzIxZjEsIDB4MGNhZGFlMDgsIDB4ZDUxOGQ0ZjAsIDB4NjA0NTc3NWQsIDB4N2Y1ZTJjZmYsCisJMHg4NmVhZjFhNCwgMHg5ZWM2MzQ4NiwgMHgyMjM1NzE4OSwgMHhiYjMwM2U5ZSwgMHg4N2Y5YzExZiwgMHg0NGE5ZDUyNiwKKwkweDdmYWU4MmU3LCAweDEyN2VjZTgwLCAweDJjMmVkNGJkLCAweGUwZjM4NzYyLCAweDBlNjYwZWY3LCAweDQ3OTAxYmE0LAorCTB4ZjgwNjZlYjcsIDB4OWIzZGU4OTUsIDB4YmQzNTVkNzAsIDB4YzM4ZTNlOGUsIDB4NjU3Y2I2ZDUsIDB4N2JhMTg0ZjQsCisJMHgyMTc4OGViOSwgMHg4Y2M3ZDgxNywgMHhhZWVmMTFmMCwgMHg3ZWNkY2I1MywgMHg2NmM1YjNiOSwgMHg1MmVkNGMxNywKKwkweGZjZmM1YjI2LCAweDc5ZWI3Mjg2LCAweDU5M2I5NzMzLCAweDk4MjI5YTUwLCAweDdlYzc2MmQ3LCAweGFjMjNhMjNlLAorCTB4ZTVmYWU0YzcsIDB4ZGQ2MmNhZDEsIDB4M2UxODVmNzgsIDB4ZWI4OTBkN2UsIDB4YWNjZjk0NjcsIDB4ZjJmZjdmZTUsCisJMHgxZmQwYTE5YiwgMHg5Zjg5NTc3ZiwgMHhjNGZjZTM1ZSwgMHhjNWEzZjVlNSwgMHgzYzIyMjY5ZiwgMHhiZGYwOTM5MCwKKwkweGViMWNjNWRiLCAweGVhZGYzYTk3LCAweDVmYjk3NDhiLCAweDNlYTA5YjY1LCAweDJhZjQ2NGQ4LCAweGU2NmRiODMxLAorCTB4ZjE4YTI1YjAsIDB4OTQ1YjBkOTAsIDB4YTgyMGNiNTYsIDB4MmU2MTRiZmYsIDB4N2ZlOWMzYzAsIDB4YmZhZTU0YTksCisJMHgxMzNlM2RkNywgMHhhMWQ5YWZkZSwgMHg3ZTg1MmU3MywgMHhmMTBhMmQzNSwgMHhmMzM3YjM4MywgMHgzNzFkMDA0NSwKKwkweDMxMDc1OTQ3LCAweGI3NzBhZjE4LCAweGY2ODA2NWQ5LCAweGM5MDQ0YWQzLCAweGQ3MDA5YzY1LCAweDJmZWI5MDYxLAorCTB4ODI2OGNhZTgsIDB4YzAyZGY1ZTcsIDB4NWQzZDUwN2YsIDB4ZjVjNmE4MDgsIDB4NmMzMTlkZWEsIDB4ODNiZTFmODAsCisJMHgxZmI0N2NkZSwgMHgxYmRhMDBlYywgMHg0ZjY3Yzg5ZCwgMHg5ZmYxZjI0NSwgMHg4MWYwY2M4YSwgMHhiZTUyODMxMCwKKwkweDRhMDE4OGU3LCAweDZlODI1OTYxLCAweDYyYzY3YWY0LCAweDc4NTA0ZjAwLCAweDMwYjUxY2IxLCAweDNjMDdhNWRiLAorCTB4MzVlNjdhMmIsIDB4NzU0NmJlMDAsIDB4OWYwOGFhYjUsIDB4OGU4NzJlYWMsIDB4ZTlmM2ZkOTksIDB4M2JlZDE4YmIsCisJMHgzOWQwZWY0YiwgMHhkNmQ1ZjQwMywgMHg3YWFiY2ZiZCwgMHgzMWQwZWI4MCwgMHg5NDJhZjU4ZCwgMHg2ZjllMzE4OSwKKwkweDQ2MjNkZTEwLCAweDdiNjNkNWQ1LCAweGY1NTdiMTVjLCAweGE1N2NmZjQwLCAweGU5MDViNzZlLCAweDQ0ZTYxYWVjLAorCTB4MjRmOTJhYjksIDB4YzFiNTkzYWUsIDB4ODFlYzU5NzIsIDB4ZGExNTk3NGUsIDB4YjU3NzFjNDcsIDB4YzdmZDgwMGQsCisJMHhlMzgyOTliOCwgMHg3YzBkZmQ0OSwgMHgwZTkxNjJjNiwgMHg0NGNhNWRlMywgMHgzZmU4NjcxOCwgMHg4ZTQ3YzExOCwKKwkweDY4ZWY3NWIzLCAweGJlM2VmOTA1LCAweDE4ZTI4YzYzLCAweDZiZTc0YTEwLCAweDM4YjdlMzk4LCAweGNlOWY3N2FlLAorCTB4MzQ3NWY4ODksIDB4OTQwNmQ3MzMsIDB4NjJiYTdmMTMsIDB4ZjY0YmMyMGMsIDB4ZjVjYjFkZWYsIDB4YTc4ZjQ4Y2EsCisJMHhlZTE1NDQwOCwgMHgxZGU3MDYyNywgMHhiNzZmYTM3ZSwgMHg2YzMzZDYwMSwgMHhkMWI3Nzc5NiwgMHhkOTlmYjAxMSwKKwkweGVkNGJjNjhjLCAweDUyM2VkMmY0LCAweGIxMGE3ODBlLCAweGQyYzZiNmNjLCAweGI3OGUyMzM4LCAweDdlODAwZGI2LAorCTB4MWZiMDc1NDksIDB4NzhlZjRmNjgsIDB4YTZiODQxNGYsIDB4ODgyODc1ZDcsIDB4Nzc3YmFkY2YsIDB4M2FkMzdhZDEsCisJMHhmODI5NzlkYSwgMHgxNzYxNzllYiwgMHg1NjAzZGI3NCwgMHhkYjIzZWQxZCwgMHhmMmNkZjVjYSwgMHg2NjZmNWM1MywKKwkweGFkYjI3YWM3LCAweDJjN2RmZTA5LCAweGQ3MjRmNDJmLCAweGY2NmJmOGMxLCAweDE3ZWY3NTY2LCAweDI4OTVlZWU1LAorCTB4NTJlNDAzZTQsIDB4YzY5MWFjNmUsIDB4ZTllYWNiYjksIDB4YmRhYmZiOGYsIDB4ZDIwZjczYjEsIDB4ZGY3YmYzZTAsCisJMHhiNDdmMTJiMSwgMHgxMzdlMTNjNCwgMHhmODRhN2RmNywgMHhiYTQ4NWM0OCwgMHgzN2Q5YWQ5OCwgMHhiMTc5NDE1ZiwKKwkweGE2NzAxNGE2LCAweGNhNTljMjg0LCAweDdlYjgzNThkLCAweGY0NWIxZmEyLCAweDI3Y2ZhMDI0LCAweGQ4ODI5ZWVkLAorCTB4Y2NhNTdiNDAsIDB4MjAxNTlkMWUsIDB4OGY3YmU0OTcsIDB4MTllZTY2MmYsIDB4ZWQ2MTkwYjAsIDB4MTY1OTViZTUsCisJMHhiMTdlZjdjOSwgMHhjMjdkZjIwMSwgMHg5MTIyZmJjMCwgMHgyZTJjOWE5ZSwgMHg1NjlmYjYxNywgMHhjZjM4OGRkOCwKKwkweGZiNDI1ODMzLCAweDk3NWUwNjMzLCAweGUwNDA3YWYwLCAweDUyNzYzYjMzLCAweDg3MDg3NWI2LCAweGY4ZTgwZDkzLAorCTB4NGZkZTQ4OTksIDB4OGRlZThmMmIsIDB4ODNiYjA5ZDUsIDB4ZTBlYjBiZDMsIDB4MDhmYjgyZjQsIDB4YzY2NmJmYjQsCisJMHg3NDhjM2M3MiwgMHg5Y2Y0OGE3OSwgMHhmZWUyYTY0ZSwgMHg3NmY4MTc4NiwgMHgxYjBlZGQyMywgMHhmNDhkZGRlZiwKKwkweDlkMDRjZTlmLCAweGEyNzRlNzhjLCAweDYzZGJmN2E1LCAweDcxMWQ3Y2I5LCAweGRjMjE4YmJjLCAweDBlZTYxNWYzLAorCTB4YzY1NGVmNjcsIDB4YmUyOWJiNzIsIDB4MGZkMTM0NjMsIDB4Y2UxOTQzZjAsIDB4NGViNTM0MzcsIDB4NjZkY2EwMzUsCisJMHg3ZmE4MDliNiwgMHhhMGViMTM3ZSwgMHhhZTA1Nzk3ZSwgMHgzNjZmNDhkZCwgMHg3OWY4OWI5NywgMHhlOWM2ZDliZSwKKwkweDA3ZDM5MzI2LCAweDFjMjczZmJjLCAweDNlNDM2ZDNmLCAweGEzZTdlMDFhLCAweDczNDdhNDc4LCAweDI2ZGUzZDI4LAorCTB4MDExYmY0ZTAsIDB4M2RmMWQwZGYsIDB4ZjFmOGUxNzcsIDB4MDI5NzNhMWQsIDB4NjAzYjBjODMsIDB4M2FlODMxZjYsCisJMHg0OWU4MDE2YywgMHhmNDA2NTNlNCwgMHhjZmI0MGIwZiwgMHg5ZjIyMTViMiwgMHgxNTM5NTZhNSwgMHhiMzAyZWJjNCwKKwkweGQ3ZGMxZWZiLCAweGY5OGQ5NDcyLCAweDVmM2FjZjQ4LCAweDZjOTdiYzNkLCAweDdlZmUxMTczLCAweDY3Njg5ZWI0LAorCTB4OTA2ODZjMTEsIDB4MmM0MGY1OWQsIDB4OTU1N2UzYjcsIDB4ZmE3ZWJjYTEsIDB4NTNjYTIzNWIsIDB4YmRiZmU0ODcsCisJMHgwMWU1ZDFiOSwgMHg1MGM3ZjFmNCwgMHgwZTEyM2Y3YywgMHhhNzM5NWFkZiwgMHgyZTVmYjdjNSwgMHg4MDM5Y2IwNCwKKwkweDBmOGU1YWQ3LCAweDc3YzdlNzZlLCAweDdjYjk1MDJjLCAweDNkNmI5NjA4LCAweDNlNDQyM2UxLCAweGMxZmMzYzA4LAorCTB4ZWI4NGRhZWMsIDB4NDA0NWM2Y2MsIDB4ZmFjZDFkZTksIDB4ZmE0ZjdiNjEsIDB4ZjM1OGM1ZjgsIDB4MmY2N2IzNGYsCisJMHg4YzVmOGZhYywgMHhjN2Q1MDg0ZCwgMHhkN2FlODhiYSwgMHg3NTQ3ODAxNSwgMHg2MTUwZWE4YiwgMHhlYzhiZjUwYiwKKwkweGZhZmZjNDJlLCAweDc2ODljNTY2LCAweDk1MTZlZWUxLCAweGYyZmQ2MWU4LCAweDcyOWJkMjI4LCAweDhmNmU1ZmJkLAorCTB4ODRhZWM0MTksIDB4NmIzZmYwNTIsIDB4NWE3ZDI1OGYsIDB4NWZlNjJiMWIsIDB4ZmNjMGJmMDYsIDB4YmFiYzZkYTcsCisJMHgzZDc5ZTZkZCwgMHg2ZmFkMGU1MCwgMHhlMTEyMjZmOSwgMHg3MTU5M2ZkYywgMHg0YWJiNDExZCwgMHg4NTgxOGZhYiwKKwkweDg0ZGY3ODE0LCAweGQ3MDgyOWJmLCAweDMyMmEwZGMxLCAweGFkOWVmNWQ2LCAweGY2ZjA5NTI2LCAweDhjMzc4ZTJlLAorCTB4MGEzM2JlNzUsIDB4YTZhN2Y1ZDYsIDB4N2I0MGJhZDEsIDB4YWY4ZWVjZWIsIDB4ZWIwNWRkNmYsIDB4ZmFlNjhkYWYsCisJMHhlYjlhMzZiOSwgMHhjZWJiZDNlNywgMHhiYjdhNDFmNywgMHg5Mjc0ZTE3NiwgMHg5ZWY0YzM3YiwgMHhkY2U1MDM4ZiwKKwkweDczMGVmZDFiLCAweDZkNGFjYzM5LCAweGQ0ZTNmYjQ3LCAweDY4ZmJlNTJlLCAweGEyMzVhMTAwLCAweDBhZWQxZTlmLAorCTB4MDZhOWNhMzUsIDB4MWM0NDE1ZGIsIDB4MWYwMDM5ZjUsIDB4MTQ1YjVmODQsIDB4MDczZWFmYzEsIDB4ZDY5MzJlZjgsCisJMHhkOWQ3MDI3OSwgMHgxNGIyMzE2ZSwgMHhmYzBiM2Y2OCwgMHhiYWU0ZmQ4OCwgMHhjZjdhYzQ3ZiwgMHg5YTZmNWY4NCwKKwkweGEwYjQ2OGVkLCAweGJlYmZkNTBiLCAweDFlMjBiYzZlLCAweGEyZDU3YzYwLCAweDY2OWM3ZGE3LCAweDY3YzQ0ZTUxLAorCTB4MTBjNWQxYjMsIDB4YzI4M2RlZmYsIDB4YWI3ODEwM2UsIDB4YmE3NzM0MTEsIDB4MGYwMWM4NjUsIDB4ODFmZDZmZWMsCisJMHg3ZmJlMjczNCwgMHg0OGQ5Yzc3YSwgMHg0N2VkMTk5ZCwgMHg3ZDg3NmE4ZiwgMHg1NjVkZTlhOSwgMHg1YmJiODdkNCwKKwkweDM5ZGU1ZWNlLCAweGMxOWJlNDgwLCAweGJiM2JlYjBlLCAweDMzZGRiMGVmLCAweGNmZWQ0N2UwLCAweGZkODhiZjZhLAorCTB4MGRjZGVhZDUsIDB4YWEyMjc2ODEsIDB4MWE5NDUyNTksIDB4ZGE1YTUyM2EsIDB4MjIwY2E5ZmUsIDB4MGYyODYzZmUsCisJMHg1N2NjMTliZCwgMHgzZTVlZmIwZiwgMHg1NGQzZDA1MCwgMHhkN2JlNDBlNiwgMHhjZGJiN2JlMiwgMHhlMDBmNjE5ZCwKKwkweGI3MzZjZGRiLCAweGYzODVkNzAzLCAweDNlZDJlNmE0LCAweGU4M2ViMGIzLCAweDA2NzllOWNkLCAweDBjNmZlZTFkLAorCTB4ZWQyOWJkNDMsIDB4YjQ0ZmI5M2QsIDB4ZmQ3MzIzYzcsIDB4NWVmNjkzZmIsIDB4Y2U3M2ZlZjcsIDB4NjhjN2RhMGYsCisJMHg3NGVjODNkZiwgMHhjNTJjNzQwZSwgMHgyODJkNWE3MywgMHgwMzMyMDc4NSwgMHg3ODRhZGZmNywgMHhhY2ZiMTZhOSwKKwkweGFhYjczMDhlLCAweGNkYjYyZmIwLCAweGNhNTNiMjcwLCAweDdkZDBhYzgzLCAweGYzODY5ZTAwLCAweDc4MGYzODdkLAorCTB4Mzc3ZmNmMTAsIDB4NGUxMWViM2IsIDB4ZGExYjBlZmEsIDB4OTFhZmIwYWYsIDB4NTA1NjBmYjgsIDB4Zjg3MDhjOTYsCisJMHg4YzlhZWNjMCwgMHgyNTk5ZmVmMiwgMHhmNGZhZTg4YywgMHgxNGY3Y2NiMywgMHhiYjRiN2E2YywgMHgwMzY2ZTg4ZSwKKwkweGZmZTg4MmJiLCAweDViOTlkZDBhLCAweGViZTI2NmRkLCAweDdlN2VmOGIxLCAweGU1MGVhMzQ3LCAweGExY2Y4ZTZmLAorCTB4Nzk3YWI5NDMsIDB4NDc0ZWIzNDcsIDB4MmYxOWUwZjQsIDB4MGY1Njc0ZTAsIDB4NTRkZmViZWIsIDB4YmE0OGZlYTcsCisJMHgyZTllMTQ5OCwgMHhhYmY2ZjA0MiwgMHhiODQ5YmM0MCwgMHgzMGY0MTI4ZCwgMHgzMjg2ZTEwYSwgMHhiMjdmNGJiOSwKKwkweDM3MGZjMjMzLCAweGI1NGIwYmMwLCAweDU4Yzc4ZTg3LCAweGE5YzIwNjY3LCAweDdkNjNjNWVkLCAweDlhYmM2MTNhLAorCTB4OGFkZDhmOTcsIDB4YWJmOWE5NzAsIDB4Y2M2MTg4ODksIDB4NDE4ZjJmNWYsIDB4MzBiMmZmYmEsIDB4NzI3MzVkYmMsCisJMHgwZjViOWQ3MSwgMHgzZGFiNzhjNCwgMHgxNTdiZTQ4YiwgMHhiZGEyMzBlYiwgMHhhZGRkNzIwMCwgMHhkMmViOTAwZiwKKwkweGU4NjdkYjhlLCAweGY3ZjFjNjI4LCAweDEyZDk1MTBkLCAweGU3NTlmMzgwLCAweDQ2MTYyNGIwLCAweDNmNzJjODVmLAorCTB4MDAzOTZkZGEsIDB4ZTE1NWY0N2YsIDB4ZmNjNWU0ZjksIDB4ZGE0NzZlMTgsIDB4YjI1YWZjODMsIDB4OTY3OGI3ZGMsCisJMHhlN2ExOGM3YiwgMHg4ZTBkZjZmMSwgMHhiMTRlN2YyNCwgMHhjODdhMWVjNiwgMHhhNzhkZWRjZSwgMHg4MWNmNWNlZCwKKwkweDNhZTE3NjYwLCAweGUyYzVmZDRmLCAweGE5ZDM0MmYzLCAweDBjYWRmN2RjLCAweGRiNmE3NGUwLCAweGEwNWU3OWJiLAorCTB4ZTNhYzUzYTMsIDB4ZGY5MDk3ZjYsIDB4YjlkMzM2YmUsIDB4ZmJmMDc4YWUsIDB4N2UyYzRiNzksIDB4ZmI4YWJjZmUsCisJMHgyZjU1ZDg1MiwgMHg0MDc1NjliYywgMHhiYjJkZTJmZiwgMHhmMDAxYmRlMywgMHhiZmU5OGFiYiwgMHg0Y2ViYTZlZSwKKwkweDhmZWY5NzljLCAweDIwZmIzYmU5LCAweDI3NGJkODNlLCAweDE2NTAxZDEyLCAweDNjNmFmOGJmLCAweDM3MzgwM2E3LAorCTB4MTRmZjQ1MGQsIDB4NjMzZjhmZTcsIDB4NWRkZDgwNTMsIDB4M2RjNmIwYmMsIDB4MWZjMDJmMjYsIDB4Zjk5MjJlNzMsCisJMHgwZWZhZWIwMiwgMHhhYjg5MWUyMywgMHhmZGE5OTljZiwgMHg5ZTI1YmI3NiwgMHhkNjJmNGRlNCwgMHg4ZjRkZTUwYiwKKwkweDc4NDhiYWYwLCAweDNjMjVkYjZhLCAweDkxM2UwZGY3LCAweDk3YzVmNjgxLCAweDA3YzVkODNkLCAweGFmN2VjMWVjLAorCTB4ZGM3YjE2MzcsIDB4ZjVmYzcyNjMsIDB4ZGVhNzdkYmYsIDB4NWVmMzBlZTYsIDB4YWNmZjE4OGIsIDB4ZGExMjc4NzMsCisJMHhkNmM2YzU3ZCwgMHhlMWY5YzJjYiwgMHgwYjUzMzllNCwgMHg1N2NlMzdhNywgMHg3ZmI4ZTM0NiwgMHgxZjFhNjczOSwKKwkweGVkZGI1ZDZlLCAweDNmZTY5ZmJhLCAweDBhYWIwN2Q4LCAweGY0NGIwYmIwLCAweGRjZWQzNzllLCAweDMyNmFiMDVmLAorCTB4M2YyZTZiZDQsIDB4ZDljZThlM2IsIDB4ZGM4NDVlOTIsIDB4ZGI3OThhYmIsIDB4ZjRiNTdmOTAsIDB4YmVmZGYxMjEsCisJMHg0YjJhNWJjNCwgMHg2OTNkYmM0NSwgMHgxMWJhNzA3NywgMHg0M2Y5MjBmYywgMHgzOTZkNDcwYiwgMHhlMTNjYzhjMSwKKwkweDc1Y2YwM2NlLCAweDc5OTIzNWMzLCAweGJlZGUxZTQxLCAweGZlN2E0MGMxLCAweDRlMWZmM2NkLCAweDNmN2EwM2NkLAorCTB4NWI2MGQ2YjYsIDB4NWFjZTUzMGEsIDB4NTFlZDNiYjcsIDB4MzYwZGE3ZjQsIDB4MWZhODE0ZDksIDB4ODY1ZWI0NzMsCisJMHg0ZWI5NWY3YywgMHgxYzNkMjM3NSwgMHhlMjdiN2I1YiwgMHgwMGJmMjg3NCwgMHg3NTgyYWRmZSwgMHg1MDMwNmU1NCwKKwkweDc3MGRhY2ZiLCAweGMxMDlmYjUwLCAweDEyZWI5NWQ3LCAweDdjYmNhM2ZhLCAweDQ0ODFmZGIzLCAweGVmYWNlM2M0LAorCTB4ZjExZWJmZWUsIDB4ZWI2OGM1YjIsIDB4YWFjYTE4M2YsIDB4MjYzZGM1MjYsIDB4MzY3M2RlMDAsIDB4YjdkNTA2NDYsCisJMHhkYzJjZDhlOCwgMHg1MzJiYzQ4NywgMHgxZGNmZGQzYywgMHhkYzYzMWViMCwgMHg2YjYzYzQ0ZiwgMHgxOGQ1MWY4OCwKKwkweDkyY2NlZGM3LCAweDlhZWZiMDI5LCAweGJlYzk2NzIxLCAweDhhMjdiZGRmLCAweDY2MmJjOWY0LCAweGQ2YzhlYzk1LAorCTB4YjdmM2ZmYzEsIDB4ZjQ1ZWExMmIsIDB4MzY0OWRlOWQsIDB4NThmM2MwOWUsIDB4Y2U4NjY3ODEsIDB4OGE4ZmEwNDAsCisJMHg3YTJmNWUwOCwgMHg2ODc2NGY1MSwgMHg3ODI1NDU5MSwgMHgxZDVjODJiNywgMHg2NWRlNGE0MywgMHg3ZWZkMGIxZSwKKwkweDQ3NTNkZjIxLCAweGZkMGUxZWFkLCAweDE4MThjNmM2LCAweGI0NWZhMWVhLCAweGEwNjYyOWNlLCAweDRlNzk3ZjI3LAorCTB4YzA2NzY5ZmYsIDB4OTczMzQ2N2UsIDB4NDJlMmVkMWUsIDB4NWY2YTA4NjYsIDB4MGE3ZDY1MTEsIDB4NGMxODVhZWQsCisJMHgyOGIwZmE4ZiwgMHhkOGY5ZjgyMiwgMHg4MTNkYWVjYiwgMHg1YjU4YzRmNiwgMHhiZmE0YmI3MCwgMHhiZmEwMzg5YywKKwkweGIxYjk3ZWZlLCAweDhmZTdjZjdiLCAweDU2N2Q4MDRjLCAweDllYzk1M2VjLCAweGRlNWM5MGJlLCAweDQxY2FmYjhmLAorCTB4ZGE1MWJmN2MsIDB4MjliZGVmMDQsIDB4ZjllNmYzYTAsIDB4OTA1MmNiNjMsIDB4ODYxNDBhYmUsIDB4ZTc2M2FlN2UsCisJMHg1Y2U1ZjNjMywgMHgwMThjOWY0MSwgMHhmMWY5ZmI5ZSwgMHhiYjM5ZDEzYywgMHg3ZjZjOGViYiwgMHhlZWJjYzE1ZCwKKwkweGUyZmZhZTNhLCAweGNiMGZkOWU1LCAweGY3M2I0ZWFiLCAweDg3ZjU2ODZmLCAweDUzZmU3Zjk2LCAweGYwNzhhM2ZhLAorCTB4MGI1ZTE5YWIsIDB4ZTU4NWZmOTUsIDB4ZmU1YzJkYzksIDB4NTY4NWU1NmEsIDB4Njk3NWM4NWYsIDB4NGU3ZDViZDcsCisJMHhjZjEzZDIwZCwgMHhkN2UyNzkwOSwgMHhmZTdhNDYxNywgMHg2YjhmOWUzMywgMHg5ZTg0ODZlMiwgMHgyMTllYzE4ZiwKKwkweGVhODc3OTc4LCAweDc2MGU1Y2U5LCAweDZmZDhlZGQ3LCAweDU3MTFkOTgwLCAweDY2NWE0YjA4LCAweGI5NDY4YWNiLAorCTB4ZGNmMTY0ZDYsIDB4OTdlMDE3MTksIDB4YThkNGRmZWEsIDB4ZWRkMWY5NDMsIDB4ZmIwNDMxYWYsIDB4ZjVmOWU0NmQsCisJMHhmZmJlMzg5ZSwgMHg4NzVlMzhmMiwgMHhmYjlkMmJmMywgMHg5Mjc5NDQzNywgMHgyZjZmMzhmNSwgMHg3ZTMwMzNhMywKKwkweDg1ZmJjYjI1LCAweGFmNzY5MGZjLCAweDlkYTU3N2I0LCAweDdkNTllZDJiLCAweGIzNjdiNzAzLCAweDdlNDFkZDYzLAorCTB4NWZhZmQ2MzMsIDB4ZWQxODNmOTAsIDB4ZWY3M2U0NzQsIDB4ZTdkYTI4YWUsIDB4MTA3YjhhNjcsIDB4NzMxNTY5ZjIsCisJMHhhMDE3MTQzZCwgMHg3YzBkZWIwNywgMHhiY2Y1ZGFmZCwgMHgxM2VjMjcxNiwgMHg0MTNiMjZlNiwgMHgxZDFjY2ZiNiwKKwkweDhkNmY5ZTVlLCAweGMyZmY1M2QzLCAweDQwY2E2ZmM3LCAweGI2YjNlZTNiLCAweGNlNTAzMzliLCAweGZmZjFhNjdlLAorCTB4MGYwZmM0ZjYsIDB4NTA3ZDdlMGIsIDB4ZTE1ODkzZTgsIDB4ZjkwODc4MjcsIDB4ZWRjMGVhMDgsIDB4ZmVmMDJkYWUsCisJMHhlMjZlYzU4YSwgMHhiZTJlZGZhYiwgMHgxNzQ3Y2E5MSwgMHg4ZmU3YTQyZiwgMHhmY2QyNjVjNSwgMHhkYzc3YzJiNiwKKwkweDIzYTcwMGQ5LCAweDE3ZDI1NTJiLCAweDNlZWU4ZDMzLCAweDkxZGVmMGIxLCAweDFiZjkxZDA4LCAweGM3OTlkNzBlLAorCTB4M2I2MzMzNmYsIDB4Y2NlNWYzYTMsIDB4ZjI2YzI3YzcsIDB4MWYwMWY4MDYsIDB4ZTkwYzdkYzMsIDB4MDlhZjlmNzksCisJMHg5ZDJhNWViYywgMHgyYjRlYjM1NiwgMHg3YTZlYWRlYSwgMHhiN2EyMTAzZCwgMHhhNzJmMTFkYiwgMHhmNjIyNjc1OSwKKwkweGZhM2E1NWFiLCAweGYzYTEyOTM0LCAweGFmNWNjODNmLCAweDIzNjZiZjYxLCAweGQzN2M4ZmViLCAweDkyZjVjNTFjLAorCTB4MDI5YmRmYjYsIDB4OWVkMGFiN2YsIDB4ZDQzM2YyODUsIDB4Y2NlNDYxNWYsIDB4N2I1ZTgyM2IsIDB4YzRlZjVkNWIsCisJMHg5MzMzYmM5MSwgMHg1NmViNGVkZCwgMHgzZWY0NGUyOSwgMHhiNGU3MDdjZSwgMHhjNjM5ZjEwZiwgMHg5NzVmZDA4OSwKKwkweGM3NzViNTZkLCAweGM3NzlmODU1LCAweDE4NWM3MWZkLCAweGZlNGY1YzdmLCAweGVlM2FlZDFmLCAweGQ1NzBlNzg5LAorCTB4Mjk2NDg1ZmEsIDB4YzRjNzQyZmQsIDB4ZDljNTE2N2UsIDB4ZTg0NGZjODIsIDB4MGZlNzBmMGYsIDB4NDhkZTNhYmEsCisJMHhkNTEwZGJmYiwgMHhhOGI4YzVlOSwgMHgzZTdlNjZmNywgMHg1NWU1MWE0ZiwgMHg1YTk1ZGZkMCwgMHhmZTg4NThkYywKKwkweDcxYzY3ZmIwLCAweGJjN2RhNjNmLCAweGYxY2YxOTI3LCAweDRlOGQ5MmJkLCAweDJjNWNlM2Y0LCAweDc2NjgwZTNmLAorCTB4NDc4MTM4ZjEsIDB4ZDM1OGViNDcsIDB4MDNlYzhkZTEsIDB4ZjBlYzRhZWIsIDB4MzRhMTFhMTQsIDB4ZjhkMjI2YzQsCisJMHgwOTZlYWM0OSwgMHgxMWZhMGRlMiwgMHhhM2RiZjIzMCwgMHg3NDNjOGE3YywgMHgyMTNjOTc0MywgMHg5MWE1NjE0NywKKwkweGFkZGI3N2M4LCAweGJjM2M1MzFlLCAweDVkNDY3NDM3LCAweDUzZWRmYTNkLCAweGUyM2M3OGFiLCAweDZkZTllMjg0LAorCTB4MWI4ZDBlY2YsIDB4NWUzOTMyY2IsIDB4YmI4OGFmZjAsIDB4ZDAzNDZmZTYsIDB4M2UzN2YyYmEsIDB4ZmNkMWYxNDYsCisJMHg5NWViNTc4ZCwgMHgxZjk0MzkwMCwgMHgyN2ZlYTA2ZiwgMHg5YmQzOWQ1ZSwgMHg4NTFmMThmYywgMHg4ODBlYmY4ZiwKKwkweDQ2NjJmNGU3LCAweDhhMTBlMTFmLCAweGJmYTU4Njg3LCAweDMxM2ZmMTdlLCAweGY2MDlkY2FlLCAweGVmM2NiMDUwLAorCTB4MjAyNDNmMTcsIDB4MGNmYWExNmYsIDB4M2M3ZDczYzksIDB4YzA3ZjIzZDcsIDB4ZDM1ODA1N2MsIDB4N2NjODY2MWYsCisJMHg4ZmU0MGQ4NSwgMHhiZTZjNmFkZCwgMHhkZTUxZTMwNiwgMHhiYzQzMWQxYSwgMHgyYmY5ZWZiNywgMHhjZDY3NmJjNSwKKwkweGI2YmM1MDcwLCAweGNmN2RmZGZiLCAweDNmZjZjNzJjLCAweDExODM2MmNjLCAweDg3YmUyOWZlLCAweDdjY2ZmNDE1LAorCTB4YzllM2M5MWIsIDB4YjEzMjZlZGYsIDB4ZDlhNWIwMjUsIDB4M2M1MzM3NmYsIDB4OGU5NTRkNzgsIDB4ZWVkMTdjYTEsCisJMHhlODMyNjYxYiwgMHhhMGRiNWM3OCwgMHg0N2Y4ZTAyYiwgMHgwZWYxMjgzOSwgMHg3YzQ0NjQwNCwgMHhmYzIxYmM0OCwKKwkweDZlMzE5OGI2LCAweDVmYWQwMmZjLCAweDdlODBjYmFlLCAweGM3ZGMwNGYwLCAweDRlOTA2Yjk2LCAweDE1ZDk1NTdhLAorCTB4NzVjODE3ZjQsIDB4NGM5ZjQ4NWQsIDB4ZmE2OWZmOGEsIDB4YzNkNDY3ZTQsIDB4OWM1ZmM1YjcsIDB4NzQ4MTllMWUsCisJMHg1YWMzZDVhZSwgMHg3MTY0ZGJmZCwgMHgwYmJmNjI1NSwgMHg0MjEzZTFlOSwgMHhkNzg5NGRmZSwgMHg3ZTMwNDNjNCwKKwkweGM3NmYwNjE2LCAweGYwMGMxYzg0LCAweGZmMTlkZjhmLCAweDFmZTNmYzIzLCAweGUzMDkxY2ExLCAweGM4YzY3ZjFmLAorCTB4OWRhMzZmZTUsIDB4MGMyOTM2ZGQsIDB4ZTYyN2JjYmYsIDB4MzJlZWFkZDcsIDB4NmY4Y2ZlYTIsIDB4YjNjYWMyNTEsCisJMHhjNjUxYWI2YywgMHhmYWUwNTcxMywgMHgyYjQ0ZmM2NCwgMHhiN2MwYzM4ZiwgMHhkZTVmZmIxMSwgMHg3YjBiYmFkNCwKKwkweDE2NWVjNmU1LCAweDE1ZGJlNjhkLCAweDM3YjljM2RmLCAweDA0NmIzY2NjLCAweDMwMTYzYjlmLCAweGVhM2FhMzhhLAorCTB4YTgyYmM5MTgsIDB4YjA5M2I4ZmIsIDB4MDAyM2YyOTUsIDB4YjhlMDRmMWYsIDB4OWQ2MzhhMTcsIDB4MWQ5MjE1YjYsCisJMHg4NjU2ZTMyNCwgMHhmOGYzZTBkOCwgMHhjZmQ5Nzg5ZSwgMHg2ZmM0NDdmNSwgMHhlMjdhMGY3YSwgMHhiMDVkNjI0ZiwKKwkweDVmYjA2N2ZmLCAweDE0MTYwMmZjLCAweDk5NzE5MTlmLCAweDYyYWYzYWY4LCAweGM0NzU0N2NjLCAweDNiZGFkZmM4LAorCTB4ZjMwNGIzY2UsIDB4MzM4NmJhM2YsIDB4OGY1MDUzZTcsIDB4YTIxNWI1MjksIDB4NzJjZmI1M2MsIDB4NjZmYzYxYjYsCisJMHg5ZmVlMjlmOSwgMHhmOThmM2U1ZiwgMHg3OTAxMmE5NiwgMHhjYTJjOWUwNSwgMHgwNWJjNDIwMywgMHgwYTc2MDdmYSwKKwkweGFjNTNiNmY5LCAweDVmZTRmNDFiLCAweDVhYmFmOWUzLCAweGE0ZjQwM2UyLCAweDc1NmU4N2M0LCAweGVkNzg0YWFiLAorCTB4MDJhN2FmMGEsIDB4NDNmZWRhZjAsIDB4ZjkxOWZkNzgsIDB4ZTQ4YjlkZjIsIDB4ODUyZjBmY2IsIDB4OTE3MWZlNmUsCisJMHg4YzRiZjM3NCwgMHgzYjA5MGM2ZiwgMHg1Nzg4NjdkZiwgMHg2NzQwN2NlZCwgMHhiZWY4ODM0NywgMHg3OGRiM2EwNywKKwkweGY5ZDJmMTg5LCAweGE3YTg5ZmU2LCAweDVkZmFlMTQyLCAweDVjMjg0MjdjLCAweGZhZWIxNjU3LCAweDUxNjZiYzkxLAorCTB4ZDU3YTcwY2UsIDB4NGZmZTYwOTYsIDB4MTJkODkxZTcsIDB4MWU3YTVjODYsIDB4M2I3YmZhYzksIDB4MTk2Nzg4OGQsCisJMHhkNWViOTEwNywgMHhmNmM4OGZlNiwgMHgwZjI1MTY5YSwgMHhiYjg1OWZjZiwgMHhlMDM5ZDNjZiwgMHhlOGJmZGI3NCwKKwkweDA3OWExMDFjLCAweDBmOWRlN2MyLCAweDM5ZmM4ZGU0LCAweGRjZDAxZDU2LCAweGE2NzdmYzBhLCAweDc1Mjc0OGM5LAorCTB4Mzc3ZTM5OTUsIDB4N2JmN2ZkMGEsIDB4YTBlN2NjMGQsIDB4ZmZkODExZmUsIDB4NWZmYmM2MGEsIDB4MDNiY2I0ZDEsCisJMHgzMDU3NTdmZCwgMHg0NzljNTdiZCwgMHgxZGI5ZWY5NSwgMHg3YzdjODMxNSwgMHhmMjk1NWVjNSwgMHhmZTY2ZDhiZiwKKwkweDJjNDU4ZWJjLCAweDRjNzRmZjQxLCAweDAyMzk4ZTgxLCAweDhhZWIxOWUwLCAweDc4MDA4ZTYyLCAweDA3Yjc4ZGM2LAorCTB4NzkzOWU1ZDUsIDB4YzEzNzk4YWUsIDB4ZmRlODJiZGQsIDB4ODJiMzFiYTQsIDB4YWU3OGE3ZmEsIDB4M2E5ZTdhMDgsCisJMHg5ZWE4MzcyYiwgMHhhODIyMzc1ZSwgMHhhMzg1ZWY3ZiwgMHhkZTk5ZWE4MywgMHg2N2ZhODM2YiwgMHhhYTBlNGMzNywKKwkweDFjZGUzNGU3LCAweGFiMThmZmQ0LCAweGVjMTQ3YzdiLCAweDViZmEzZmIzLCAweGViY2MzZjAwLCAweGQ2MGNiOGVhLAorCTB4YjdhYzQzM2IsIDB4YTBmMjlhZWYsIDB4NWFmZDgxZjcsIDB4NTMzODFlMzEsIDB4Y2YxN2M5OTAsIDB4MDBhYmRmOGQsCisJMHhmZjA4NjcxYywgMHgzOWJlZTVjZSwgMHg1NWNmZTM0MSwgMHg2NzdlODhhYiwgMHgwNDhlMWEzNiwgMHhhY2Y0NjlmYSwKKwkweGMwMmE0ZjZiLCAweDM4YTdjNmI5LCAweGI5NWVhMTViLCAweGVjZjlmODI2LCAweGJkZTgxYjFkLCAweGY2ZTBiZWQ5LAorCTB4ZWI4MzliYjksIDB4ZDI5Y2RlODMsIDB4YjkwMWU3OWYsIDB4NDY3MmJmMjksIDB4ODdkZmIwNDIsIDB4OTk4OWQwODUsCisJMHhiNTk5ZjRlNCwgMHg3YWE1ZmZkYywgMHgyNGU4NmFmYiwgMHgyN2VjNWYxOCwgMHhkMDQzOGRkMiwgMHg5ODM5Mjk4ZCwKKwkweGMxMWQyMjZlLCAweGZhZjk1Mzc0LCAweDA3MDhhMWQ2LCAweGZiYTNmYzJkLCAweDBiYzllODY5LCAweGZlMDA3ZWZmLAorCTB4N2QzMDY3MTYsIDB4ZmI0ZWUxNjksIDB4ZWM1Njc1ODMsIDB4OTVlZmQ4NTAsIDB4NmFjZmI4NTAsIDB4MmE3OTc4NzksCisJMHg2MzNiODUwYiwgMHgxZmQ3MjMzZSwgMHg2ODhmZWRjMSwgMHhkOTgxZmRlMCwgMHg4OWNhMThmMywgMHhhODE2M2JiMywKKwkweGUzNjM4NzE4LCAweGVjZmYzYzc5LCAweGVkMDdhZjhlLCAweDJmODk4NDczLCAweDk3YzQ4NGU1LCAweGY4MDQyNWQ2LAorCTB4ZTk3YzY0N2YsIDB4YWYxOWM2MzQsIDB4NjcxMTE3NjQsIDB4ODQ0ZmZkZGMsIDB4OGYwMGM4MDcsIDB4MGIxMWYzMDEsCisJMHg3MWRkMTE5YywgMHgzYzdmNDhjNSwgMHg2NTNmMmI0OSwgMHhiOWUzZmEwOSwgMHhmZTJiZDIwNCwgMHhiYzNkNmM3OCwKKwkweDAzZTYzNDNkLCAweGM2NTNhZTM3LCAweDhlYmU2NGU1LCAweDkzMGEyYmNjLCAweDg0OTdmYzlmLCAweGI0MGZjYzA0LAorCTB4NzVmOWUzNDcsIDB4M2E3Y2ZiNGIsIDB4MjJiY2M5NzcsIDB4YzMwMmYyMjYsIDB4NGZhNGZmZDgsIDB4MTRkN2YxOWEsCisJMHgyNjc2MGJiMiwgMHgwYWZlYmQ3MCwgMHgxNzZkZDc4ZSwgMHhhOTJmYmM4OCwgMHg0NzFhN2JkNywgMHgyYTdhZGZjNiwKKwkweGM1MmE1ZDk1LCAweDI4OTRiYjEzLCAweGY0NjE1M2U3LCAweDNmMDk0N2NhLCAweGU2ODViZjUxLCAweGE4MTQ3ZjhmLAorCTB4MzhlZTZhNDcsIDB4MGJmNTA3YmIsIDB4NmM2M2ZkYzAsIDB4NmY0MDU4YjcsIDB4ZmRiZDdlMmIsIDB4ZDEyYjY4YmIsCisJMHhhYWViZDc2YiwgMHg5YzM0MmZhZiwgMHhkOGM0NzA4OSwgMHgyMjJkOGUwMSwgMHhlNDQ1YWZkZiwgMHhkNmY1YzlmYiwKKwkweGY0YmFhNDQ1LCAweDljMWVkODc5LCAweDhhZTMyN2ZmLCAweGMyOGRmZGRhLCAweDNhZmU3MWZlLCAweDk3NjQxN2JjLAorCTB4NzZlNWNmMmMsIDB4ODcwMTY5ZGIsIDB4Mjc2ZTE2MGQsIDB4OWRiOTEzMTgsIDB4MWYzOWFiNTAsIDB4ZmI3MDM2ZDUsCisJMHhhY2Q3YTQwYywgMHg4YzcxODA5NiwgMHhkZmVhMTY4OSwgMHg0YzY4NWNkZiwgMHhkZjg0NzFjNCwgMHg0MmE2Nzk2NSwKKwkweDQ1NzJjNTc2LCAweDc3ZTQ3YjIxLCAweGZjZjRkMWI2LCAweDg2ODUwOWNmLCAweDZmZmZlODQ0LCAweDYwMTFhZjMxLAorCTB4MTY2MzY1ODgsIDB4OTM0MzhmNWYsIDB4ZTg5MmZlMTcsIDB4NjhjMjUyZmYsIDB4MzY4OThkMmEsIDB4NWRiNjdmZTEsCisJMHg2YTkxZjQ4MSwgMHg1ZGE5MTk3NiwgMHg4YWE3MWYwZCwgMHgxYWZiZTQ0ZSwgMHhiNDY0ZjIyOSwgMHg0MjcxODA3MSwKKwkweGRmZGZhMjZlLCAweGUyZDJlZGM0LCAweGZlNDE4OWIxLCAweGYxOGNmN2ZlLCAweGQwYWZkZmMyLCAweDUzOTQyZWViLAorCTB4ZWY3ODE0YmYsIDB4ZWFlZmZmYzksIDB4ZjE0NzZiNjcsIDB4YWZmZmY1YWQsIDB4N2ZmZWU0OGMsIDB4ZjEwODFmMTksCisJMHg4NWM3M2JmZiwgMHgxZTIzZmZmNSwgMHhmZTdlZWRhMiwgMHgyZGQ4OTNlOSwgMHgzZTUwZDI5ZiwgMHhlYTdhMzBlZCwKKwkweGI1ZDVmY2YxLCAweDY4NzhlYzFkLCAweGE0ZWJlN2VlLCAweDdkYzBjMGI4LCAweDY3M2M0ZWQ5LCAweGJiNjRjZjJkLAorCTB4NGI2ZjQ4MmMsIDB4N2YzYjQzMTgsIDB4Njk2ZWE3NDcsIDB4ZTk1ZjNjMjQsIDB4M2U3YzM2NjUsIDB4YmYzZjJkN2MsCisJMHgzODcxYWU1NSwgMHgwZTUyOWI3MSwgMHhmZGM4OWQ1YywgMHgxZjM4MDY4NywgMHhiZGYxNzI1YiwgMHgyNzE4NmRjOSwKKwkweGQ5OTUzOTU4LCAweGIyMzUwZDUxLCAweGRhMmIyMmM2LCAweGQ4NTk2YjQ1LCAweDQxNjhlM2YzLCAweDc3MGExMzRmLAorCTB4NDI3NmZlNTEsIDB4MGZiN2NmMTcsIDB4NzY5M2E3ZWQsIDB4NzNlMjIxN2UsIDB4MmNlNzk3NTgsIDB4Nzk3MWNmOGYsCisJMHhjZjExMjI0MiwgMHg1ZjNhZWRhOSwgMHhiMjdkNzNiOCwgMHhhNDZhZThhZCwgMHhmMGJlODFhZiwgMHhjMjkxODhlNywKKwkweGJiMzJlNjRmLCAweDAzZjhlMjI3LCAweGQ4N2NmMWI3LCAweDY3N2YyOTRhLCAweGYwMWU5OGU4LCAweDc1ZTA0NTNlLAorCTB4ZDc5ZTVhY2EsIDB4ZmY3ZmNlYzEsIDB4NDVlZDJhYmQsIDB4OTQzM2UzNDYsIDB4MmQ1Mzk1MmIsIDB4NTUxM2Y0M2UsCisJMHg2OTdhNjRiNiwgMHg5OWM1NmU1ZCwgMHhlNWEyZjI4MywgMHgyYmQ2Mzc2ZCwgMHhlODZkZjNmMywgMHg5ZGZkNzA5NywKKwkweDkxZmI0NzI5LCAweGZjYjhjOWE5LCAweDUyYTNiM2QyLCAweDhmMWU5MDllLCAweDY0ZDQzOGE3LCAweGYxMjM2ZjQxLAorCTB4NzI0MDljYjAsIDB4YzAzNDY1N2UsIDB4OTJlZDcyYmIsIDB4ZjNkNzk4NWQsIDB4YzUxOTFmZmUsIDB4NWRhODBlOWIsCisJMHg1ZmIwNzE0MywgMHhlNjE2NzAwMSwgMHhhNTY3YTk2MiwgMHhhNjQ4YjdlNCwgMHg3MThhYTY3MSwgMHg3OTgyZmZiYywKKwkweGZlZjNmYzIzLCAweGRhNzVlNWFhLCAweGYzMDMwMWNmLCAweDlkMWQwMDQ2LCAweDAzODM3OWRlLCAweDA5ZTVlZWVkLAorCTB4OTNjZmU0MTEsIDB4YWE4M2RhNzEsIDB4NDI1MjNlZTcsIDB4NWMxYWFlZmEsIDB4ZDEyZDRkZGEsIDB4OWM4M2Y0MzYsCisJMHgzYTYxZjlkZSwgMHhiOTNlNGRjNiwgMHhlZDA1YWNlNywgMHhiYmU4N2ZkOCwgMHg3YzJmOTgyYywgMHgxNmJiZDE3YywKKwkweDkzZjFjMDE3LCAweDlkZTUyYTQ1LCAweDg2ZjQyYWRkLCAweDg5N2RmYjg0LCAweDI3MWZlZTFjLCAweGRjMjExN2JhLAorCTB4ZGRmYzViNmYsIDB4MmEzY2MwZDAsIDB4ZTg4MTMwYjYsIDB4YTU0ZmI2NzksIDB4OWNiNzVjOTAsIDB4MTY4ZDFjZGQsCisJMHhiYWJkNzc0YSwgMHgyZWE4MmUzOSwgMHg4OWI1NDBmNSwgMHhiZjNiODVkNSwgMHg2OWU4MjRiYywgMHg2MzA2ZDM3NiwKKwkweGY3ZTcwM2FhLCAweDM4ZmE0MmFjLCAweDc0NzRlN2FlLCAweGU3YzU5YjdjLCAweGE3YWZmNGNkLCAweDExYjA2OWJjLAorCTB4YjQ3ZjgzZWQsIDB4ZWEyYjU4OTgsIDB4ODE4NzdkMzMsIDB4OGFiYjQ5ZTcsIDB4OGYwYmEwMTUsIDB4OWQ3NmJmYzAsCisJMHhhNjhlNWU3YiwgMHhjNjNlNjZmMSwgMHhjYzE5NDdlNSwgMHhlYmUwMTBiNSwgMHg3MjRkOTk2OSwgMHg5OThmYmI0MSwKKwkweDI1YzYzODlmLCAweGFlNjc1YzAxLCAweGUzZmExODUwLCAweGMwMjJmZmIwLCAweGZkZTE2NzlmLCAweGE1ZmRhMTVmLAorCTB4Mzc5OTY3ZGQsIDB4Zjk0ODBlNTgsIDB4M2NmMDI5NTUsIDB4NzlmODIxYmQsIDB4Njk2ZmNiNjUsIDB4NDNjYzE5OWMsCisJMHgyNzYwMjA3OSwgMHg3MzVmOWU2OSwgMHhkODBhZjUwYywgMHg2N2VkNDE0NywgMHg1MTliNjZmNiwgMHgxNDQ5NmY4ZiwKKwkweDZjYTFlZGYxLCAweGZlZjBmN2Q4LCAweDE4ZWM4OGFlLCAweDkyN2UxODRmLCAweDM2YzVjOWU1LCAweDE3Y2ZkNjIyLAorCTB4N2M3OTUwNDcsIDB4NTE3MmEzMzEsIDB4YWFlM2E3MjIsIDB4NDRlZmI3OTYsIDB4Yzc2NmE5N2IsIDB4NzM4ZTIzMTYsCisJMHg5NjgxZjFjOSwgMHg5OTliZDYxMywgMHhlODk2ZWY1ZiwgMHgxZTIxYWYzZCwgMHgyODI1MmNkOSwgMHhlMWIzNTA0ZSwKKwkweDMyZWM5MWFjLCAweGQxNTI5ZjAxLCAweDAwZjA4YTVlLCAweDFjYzJkYzNjLCAweDUwM2NmMWFiLCAweGM3ZjA2NTVhLAorCTB4NWJmZmUwZTksIDB4NjBjM2JmNzIsIDB4ZDFkYTgwYmYsIDB4YjUxNzM5OTEsIDB4Yjk0ZmI5NWYsIDB4NWFiY2Y5NmYsCisJMHhmMzBjN2EwNSwgMHg0NTgzZTRiZSwgMHhkOGNkMWY0MiwgMHgyZjc5NjkzOCwgMHhjZWZkNTEwMCwgMHhmYzlkMTk2MywKKwkweDc4ZjY0OWJjLCAweDUxNmJjMDkxLCAweDhmNjRmZGM0LCAweGUzZDg4NTE3LCAweGI3ZGMzZGVjLCAweGU2NGFjN2E0LAorCTB4YTVhMjNkMjQsIDB4Y2MwNzQ5M2IsIDB4MjNmN2EwNmMsIDB4NGRkZWJkODQsIDB4MTIwZjJkNmYsIDB4Y2MzZDI0NWMsCisJMHhlNDY4NWQ1YywgMHhjOGM3OWJlNiwgMHhiMjZmNGFlZCwgMHhhMzI2ZDdmMCwgMHgzMGU4MTZiZiwgMHhiYTA2M2VjOCwKKwkweGVkNmJhYTBiLCAweDlkMGQyZmYxLCAweGI0MWYyODE5LCAweGU3Y2NiODc2LCAweDYwZTdjMmQ0LCAweDlhNWZjZjIyLAorCTB4YjM4ZDcwZTEsIDB4ODA3M2MwMGQsIDB4ODVmOTM5N2IsIDB4MTBjYTQ2ZjEsIDB4M2RjNmRiZTQsIDB4NmVkZjIzNzcsCisJMHgwZmYzN2NlNCwgMHg5MmIzMGY0MSwgMHhmMDQ5MTEzYywgMHg5YWY0YjNkYywgMHhlNzdmYzQxYSwgMHhmMjA2NTMxMiwKKwkweDhhNjk2N2IzLCAweDNkZmQwZjFhLCAweGMzOTIxNGFiLCAweDE4YTY5N2EzLCAweDk3ZDNjZTExLCAweDdjODcxZTBkLAorCTB4MzQ1Y2NiOWQsIDB4MTYzOGI0ZmUsIDB4OWMxODZlZDYsIDB4Nzk0N2U1YzQsIDB4NjMxOTgxOWQsIDB4ZjQ0NjI5MDgsCisJMHg1MDZhOWYwYiwgMHg5YThjMmZjOCwgMHg2YmUwMjI2NCwgMHhmNTU3YzA5NiwgMHhhNGFkYjc4YSwgMHg2ZmYwMWNhZiwKKwkweGUwMWY1ZTI4LCAweDJhZWFiMzNmLCAweGVlNzAxZjA5LCAweDUyYzdjYjA4LCAweDY2YjE1NGFmLCAweDNiOGMwYTYzLAorCTB4ZDExYjY1NjcsIDB4ODI0NzljMzEsIDB4OTViMmQ3ZmEsIDB4NjZlYWFmODQsIDB4ZDVkZDdiNGQsIDB4YjlkODNmODQsCisJMHhiNTg5Y2YxMSwgMHhmNzlmODIzYiwgMHg4Mjc2MTI0ZiwgMHhiZTkxMzk5MywgMHgyMjVhNzczZCwgMHhiNDcxYWYzMCwKKwkweDRhZDk0ZjgwLCAweDZiNzI4NmM1LCAweDg0YjZiMmZhLCAweDdkM2VhMDFiLCAweGVkODRlYWFmLCAweDg1ODdjMzc0LAorCTB4MWYyODIzZmEsIDB4MWNkZWNjZWQsIDB4NzE5YzU3ZjIsIDB4OWZiMDkyMzgsIDB4NTJlZGNhYzcsIDB4ODYxOWVmNDUsCisJMHgzY2UyZDNlZCwgMHhkOGNmZDBjMywgMHg2MTg1OTFmNSwgMHg3M2ExZGY3ZSwgMHgxMWU0NzMyYSwgMHhmY2EyMGY5NSwKKwkweDM0MWIxYjJhLCAweDJmYmVjMDI5LCAweDMxMTJkODMzLCAweGYzNjVlOTFlLCAweGI4M2RjNTkzLCAweGQ0Zjg0MDg4LAorCTB4N2UyNGFjNDYsIDB4ODg3ZTQ1YTgsIDB4MzRjM2YzZjAsIDB4ZGRhMTdiOGMsIDB4Nzk0MmEyZjMsIDB4MzA0NzZjODQsCisJMHgzNDcwOWZiZCwgMHg5MDkxYzIyNiwgMHg5MDMzZWZiOSwgMHg4YTZmMmU5YywgMHhmOTcxZjNhNSwgMHhlYTIzMjJiMiwKKwkweGIxNmRmMmQ1LCAweGY5YzExZjY0LCAweDg2Y2JiZGY0LCAweDY4NzlmMWZhLCAweDY0OWVkZTU5LCAweDM5YmNiNzE4LAorCTB4ZTMwNmE5ZDMsIDB4MTlkY2Y0MzEsIDB4MGQzOWNlYjAsIDB4OGVmZTI0ODcsIDB4MjNiZjgwZjQsIDB4NzgwN2YwZTEsCisJMHg0ZjJmNmEwYiwgMHhlMDQ5NzIxMiwgMHgyMzhhMmQ4ZCwgMHhlZjNhNWFiZCwgMHg1ODA4OWNkNSwgMHg0OGJhOTlkNywKKwkweGU5ZWM5M2NhLCAweDhjNjZjNDdjLCAweGU5MDNmY2EwLCAweGFiZGYxYWJmLCAweDc5NDRjZmRiLCAweDBlNTc2NzNlLAorCTB4ZjE2OWZjMjEsIDB4ZDNkZmZlMzYsIDB4Y2JiZGExODcsIDB4Njg2MTZlZmUsIDB4NjZjYjRkNjcsIDB4ZjY4NjRkYjcsCisJMHg2ZmNlMTRkYiwgMHgxOWFmZWFkMywgMHhkZGM0NzY4ZiwgMHhiZDllNWM0OSwgMHhkNWQwNzIwNSwgMHg0MWI3YjE5NywKKwkweDBlNDBiYTBlLCAweDExZjIwYmJlLCAweDRlMmZlZmViLCAweDhiODdmYWE2LCAweGI0N2U1NDFkLCAweDQ3OTUxZmI4LAorCTB4ZjI1ZmJmODQsIDB4ZDEwMjEwMWQsIDB4MmUyNDkyZWQsIDB4YzkyNDk3MTcsIDB4NjQ4MmZhZjgsIDB4ZmZjNjY5MzQsCisJMHgzYTIxZGRmYiwgMHg2YzY3ZGUxYiwgMHg5ZDM2MzA5YiwgMHhjMTVjZWJiMSwgMHhhOWM2ZjdmYSwgMHhkM2I1ZmFjMSwKKwkweDhjOTcxYjYwLCAweDBhMTVkYmU3LCAweGVlZTVhM2Q5LCAweGUxZmQ0MTkxLCAweDdiYzQ2NGRjLCAweDllNWZhYzJiLAorCTB4ODZmNDlkYmYsIDB4ZTgxOTM4YzMsIDB4YjhlMmE2ZjEsIDB4MzdkN2ZlYTAsIDB4OWZkNTA2YTQsIDB4ZmFkMDcyNDgsCisJMHgwZWNmOGQyNiwgMHhiNGI5YmY2YSwgMHhlY2JkNTA3ZiwgMHhhNDMxOTE5YywgMHhmMTAxNDc3NywgMHg2NzkxMDJjZiwKKwkweDhlNzcwNzA0LCAweGZiZWYxYjE3LCAweGE0YjBkZDc1LCAweDVmYmQ2MGJiLCAweDczZDAzM2VmLCAweDVlMjQzZTJkLAorCTB4OTk1MWFjNjcsIDB4YmU5YmM2MDcsIDB4MmMxZmU0MDYsIDB4NzRlMzQ4ZjEsIDB4MGUyZmFmZTIsIDB4YjI1Y2U4NTgsCisJMHg3ZjZmMjliYywgMHgzNTBmZDQwMSwgMHhlODBmMjgxOSwgMHg1NWI4YjJkMCwgMHg2YTFkYWY2OCwgMHgyODMyYjA0YSwKKwkweDYxNTVjYjNkLCAweDJjOGNkOGQ3LCAweDJkMTVkZTQwLCAweGE2Zjk0MjViLCAweDkzOTMzZTY1LCAweGVmNzY5N2VjLAorCTB4YzBlZWIyOTMsIDB4MTIyZTJhZjMsIDB4ZDUzZGU0ZjksIDB4ZmUxMGFhZDcsIDB4NjdkZjA0NWMsIDB4ZTE1ZWU5MjIsCisJMHhmMTI3YjA3MSwgMHg0ZWY0ZTEyYSwgMHgwYWUzYWViZSwgMHgxM2Y1ODY1YiwgMHhiOWY3MWY5MSwgMHg2YTcxZDYwYiwKKwkweDBlODU2MzYyLCAweGJlZWExNWZkLCAweGNmOWY5MjA0LCAweGI2ZTkwY2FiLCAweGYyODE5ZTc0LCAweGFmYmY2NjBjLAorCTB4NTMzYWMwNmUsIDB4YmUzOTUzNzIsIDB4NjZhM2NhNTUsIDB4N2M2ODk4Y2YsIDB4MDIxNDA1ZDYsIDB4NmQzYzE2ZmQsCisJMHhhZTAxZWE3YSwgMHhmYjdkNzhmZiwgMHg4MjAzZGY0MCwgMHg4ZThlOTEzZSwgMHgyYzU3MzJjNywgMHhmNWExNTYyZCwKKwkweGMyNzZmZTdlLCAweDg3ZWU3YzA2LCAweGVlMTA2ZmE3LCAweGZkYzFiZDdiLCAweGVmZTAxMjY2LCAweDIwZGYwYWYzLAorCTB4MTI4YjZmOTIsIDB4NzBiNGFmODgsIDB4ZjJlNDYyM2YsIDB4YTA3YzhiY2IsIDB4OWZhNmU1ZjgsIDB4N2U5Mjk2Y2YsCisJMHgyNjcwNmU5OCwgMHhlNTZlNDkzYSwgMHgzYWRjYTBhNywgMHg3NjQwZDJiMiwgMHhhY2JiZDMzMCwgMHgzZThmNDg5MywKKwkweGU3MmM3NDRmLCAweDhjNzdhMjM5LCAweDY5MWRmNWMzLCAweDVmOTg2NGM4LCAweGE1NTJiZTUxLCAweDFmZDIwYWYzLAorCTB4ZTdlM2VmZWYsIDB4MGY1NTg3ZDQsIDB4ZGJjYzI0ZDgsIDB4NTI1ODc4YTAsIDB4M2VkY2RkMjgsIDB4NWRlNTE4NmYsCisJMHg1OTZkZWQ2YSwgMHhlYWJjMDk3ZSwgMHhlNjRiYjAwOSwgMHg4MTc5ZTRlYywgMHgzZjUzYmYyYywgMHgzZWUwNjA3NSwKKwkweDNjZjlmMTk2LCAweDRhZjk0MTA1LCAweDFkYWY1OTU1LCAweDJlYzhlYjM0LCAweGMyNzNjMThjLCAweGEyNTRmNzg5LAorCTB4OGQ1OTEzYjMsIDB4OWYwMTkzNDMsIDB4ODZiYjc1MjcsIDB4MmZmNTA1ZGUsIDB4ZWE4ZjdhMjYsIDB4ZGEyMjNlYTEsCisJMHhlYjg0MmZmMywgMHgwY2NhZGQ1YywgMHhmYWYzMGIyNSwgMHgwOTFhYWYwZiwgMHhhY2ZlN2RlZiwgMHgyZTZjNDljMSwKKwkweGNmMzlmY2VjLCAweDQzZmRlZWNjLCAweDFiZDgxNWY2LCAweGUxZGRiOGJkLCAweGNmZmJjMTRhLCAweDFhY2QxZDczLAorCTB4YzdjMzgwN2IsIDB4MDAyMDQ5ODEsIDB4MDU2YWRiMTcsIDB4Nzg3NjM3NmQsIDB4M2MwMWU1ODgsIDB4MzFkNzRmNTcsCisJMHhlMDc5ZTA0ZiwgMHhiMWUzYzhiMCwgMHhhODczZjMyNCwgMHgyNGE2MWJiNCwgMHg1ZDMzMzk3MywgMHhiZDliZTljNywKKwkweDAzN2E3MGFjLCAweDBmNTAyYWZiLCAweDE3M2RiOTQ4LCAweGJmNTVhYWYzLCAweGJiNzI5MDFlLCAweGZlNTIzNThhLAorCTB4ZGI5OTIzOGEsIDB4MWYxNWIzMmYsIDB4OTgzNWRkZDksIDB4MmJmZDAyODksIDB4NTY2ODNjNmMsIDB4ZjNlNGQ5YjUsCisJMHhiNjk4ZDI2NSwgMHg3YTYwZmI0MCwgMHg3MzI3OTczMiwgMHg4ZTNlY2Y4YywgMHgzYWM5NWJlNCwgMHhmZDM1M2VmOCwKKwkweDJhZjgzNzNlLCAweGY1NDMzMjNhLCAweGMzNmQ4NTRmLCAweDZmOGQzYjMyLCAweGI3OWZhMjcwLCAweDc1NmJmMDUyLAorCTB4MjU2YmUyYTMsIDB4NTFlYjg1M2IsIDB4Mjk5ZDU3ZTksIDB4M2Y1NmE4ZjQsIDB4OGQyNWU4ODUsIDB4ZDFhOTlhM2UsCisJMHg1ODMxYWNiYiwgMHhlOTdhYzJjZiwgMHhhZjVjYjJkZSwgMHg2OGVlOWQ3NiwgMHgwZTYxYzEwYiwgMHg2ZmY1MGJhYywKKwkweGE3YjdjNzg1LCAweDM4YWRkNjg0LCAweGViMjFhMzAxLCAweDMxZWU2NGE5LCAweDc4MGZiOGIxLCAweDVkMDhlYWRlLAorCTB4MjE1Zjc2OWYsIDB4ZDRmYjE1ZWIsIDB4ZjljMmJiYWUsIDB4YmJlNjJiNTUsIDB4MDQyOTM1NTQsIDB4MjQzZWVkMmYsCisJMHg5Yzc2YjQzZSwgMHg5Nzg1NGJjNCwgMHg0NWEyYjdjMywgMHhkNjdlN2MyMSwgMHhmMjMyMWY2ZCwgMHg2MWJhNGI2ZiwKKwkweGUwMmZmMGNkLCAweGIwNDc0OTdkLCAweDZmOTQxMmFmLCAweDFlNDFhYjk1LCAweGQzZDI4NjY3LCAweDQ1NmNkNjFjLAorCTB4YWQ2MWE5YmEsIDB4ZGY5MDUzY2IsIDB4MWZhZjliNWEsIDB4YjU4NjdlOGUsIDB4YTlmOWQzNmYsIDB4YTM5YWRlZDQsCisJMHg3YTUwMDU4YiwgMHhiZjhlNTc3MywgMHgxN2U3NGZjYSwgMHg1Y2ZjMjc4YSwgMHhlOWRkYzNmMCwgMHhlMDFlOWZhNSwKKwkweGVhYTM3MzM1LCAweGQ0MTQxYzhhLCAweDdhM2ZlNDRmLCAweGJjYjM4ZTA5LCAweDYzZmEyMzVlLCAweGU1M2YwOTY3LAorCTB4YWI1OWQ2ODUsIDB4MmU1ZmY3ZTcsIDB4Y2YwMTVlYjgsIDB4MGZkZDdiOWYsIDB4Nzc2NGY3MjcsIDB4NzYxNzNmODUsCisJMHgzZDFhNWJkYiwgMHhmYjgxYjFmZiwgMHhmZTdjYTU1YiwgMHhmZjIyZWY1YSwgMHgzYjBiYjQyZSwgMHhlM2M2Y2VhYywKKwkweDllYjkxYTdkLCAweGJkNzI0ZjllLCAweDM5NzllODQyLCAweDViMzVkMWNmLCAweDEzMzA1ZTI5LCAweGY2ODA4MGVkLAorCTB4YTU2ZjU2Y2YsIDB4ZDlmMWE1NzgsIDB4Y2JiNDU2OTksIDB4YmU5OWFlOGYsIDB4OGY1MmYzMGEsIDB4YmQyNzRkMzYsCisJMHhhOTdiZjk1ZiwgMHg0MGM2M2RmNywgMHg0ZDY4YTI3YiwgMHg5MDdiZmFkOSwgMHg1MjQ3Mzc4ZSwgMHhkZGEyYjE1YywKKwkweDIwNDVjZTIzLCAweDYzOWZhMTY3LCAweDZjYWI5NzBkLCAweDk1YjM5NzM1LCAweDkwMDcxZmE4LCAweGZkOGJlYzdlLAorCTB4ZjRmMGFjZWUsIDB4NjgwODdlNDUsIDB4ZTc3OWJkMjcsIDB4Nzc5ZmNmNzQsIDB4ZmU3N2I4YzIsIDB4MjVlOWRhMjksCisJMHg3NTVhZDg1MCwgMHg1YWRiY2Y2NCwgMHhjZjU2M2Y1MSwgMHhkZTIwZjBmZiwgMHhlMDdiMDFkMywgMHg3YjRiNWZmZCwKKwkweDA2NDVhYTAwLCAweGVhMzI1YjRmLCAweDU0MDc2MTIxLCAweDZjMzIxYmFiLCAweGJkMDgzNzY4LCAweDdmODAxZmYxLAorCTB4ZTdmODc4NDQsIDB4MTFjYmZjMTIsIDB4ZGJmMTAxZmUsIDB4OWMzODFiNGYsIDB4N2ZlMDZiYTcsIDB4Y2JjNzI1NzgsCisJMHgyYjZjYTZmMiwgMHg2ZDNmMmY5ZSwgMHhlYmJiMjZjOCwgMHg4MjFjYTZkMywgMHgwMDA3OGNmZiwgMHgxZjVmZGNmZSwKKwkweDAwMzU3NzZjLCAweDgxN2NmMWZjLCAweDk2ZjU4N2YwLCAweGZjMDQzYmI3LCAweDBkZmUxYzlkLCAweDI1NmNlZTFjLAorCTB4YzA4NDY3MmYsIDB4NTdmOTRiZDksIDB4ZTRkMWZlNzcsIDB4NzhlMjNiNDQsIDB4NTdkOTJiNjQsIDB4YWNhOGI3YzcsCisJMHg5MzJlYzAzZSwgMHhhYzM3ZDE3NiwgMHhkZmI0NDlmMSwgMHhmNzY3ZmMyNCwgMHhmMjg0MThlOSwgMHhkN2UxZjRhNywKKwkweGQ5ODc4OGFjLCAweDMxNTA3ODViLCAweDk1Y2NmZTA0LCAweGVlYzdmMTQ0LCAweGE4ZWRiYmY5LCAweGRkNWYxMTZmLAorCTB4ZTI0NWQ0NzYsIDB4MTliOTg2YTksIDB4ZDc5NmM3ZTksIDB4NDIzOWUwMGUsIDB4NDViZjcxNzEsIDB4YjY2ZmJjOGQsCisJMHgxOWJlZjgyMywgMHhkYTk1OTJlNiwgMHg4Y2UyYzVkMSwgMHhhNGY1YzA4OCwgMHg3OWQzZWY2OSwgMHhiZWJkYzYxOCwKKwkweGQ2ZWFmOWNkLCAweDVkZTdjNGY5LCAweDI1Yjk3OTQxLCAweGZlODBkNWFjLCAweGQwYWNkNjM2LCAweDA1ZWFlZDNkLAorCTB4ODY0MmQ2ODUsIDB4NWEzYWI1NzEsIDB4MDk0NTMzODcsIDB4NTZhZWNiY2EsIDB4NTY0ZjY0NzUsIDB4NDQ3YzQ1MTksCisJMHg4OTI0NTVlNCwgMHhkYzI5NDk3ZSwgMHg2MjljOTAyZiwgMHgyNDc0ZjJhMywgMHhkYTcwN2QyMywgMHg3ZGUxZjQ2MiwKKwkweDI1NWYzODJhLCAweDlkZGVmY2UzLCAweDQxZGJjMjI2LCAweDVmYzAxMzVjLCAweDMzM2YwYTM1LCAweGI3YTQ0MmE4LAorCTB4ZDNhNzE4NWIsIDB4Mjk3YmNjNWIsIDB4OTcyNzA3YWUsIDB4YTcxZmE4NzUsIDB4YzkzOTM0MmQsIDB4YTE4ZjhkY2UsCisJMHg0MmNkZDJmOCwgMHg1ZTYyZGRkZSwgMHgzMTNkNDZlZSwgMHg2MTc0NmNjZCwgMHgzMTdhZTMwOSwgMHgxYTMwZDdmOSwKKwkweDBkZjk4N2E2LCAweGVmNzQ4Y2JkLCAweGYzYTIzNGIwLCAweGRmMTIzYzU5LCAweDhlZjg3Yzk2LCAweDk1ZWE1ODA4LAorCTB4MWZhMzhlNjAsIDB4ZjZkZDdlMTgsIDB4NWUyODVjN2QsIDB4ZjYwOWY4ZmMsIDB4ODU0NmQ3NGIsIDB4MTcwYzhiZjcsCisJMHgyZTVjNTA3MCwgMHg2MDliM2ZmMiwgMHhjNzU4MjhlYywgMHg2ZjA3MTRhOCwgMHgzZmI4ZDg3NywgMHhjOWUwMmQ3YSwKKwkweGI2YWZjN2UyLCAweGZjNzk3OTlkLCAweGIxZjMwYWIyLCAweGJjNThmN2Y5LCAweDVkNTQxZjI0LCAweGM4Y2FiZDUwLAorCTB4NjI3OTRmOWYsIDB4MzRlYWYxNDMsIDB4OGU2MWRlYzYsIDB4MmFiNzg4ODEsIDB4ZWU3ODIxOTQsIDB4NjFmMThiMmYsCisJMHhmNDNhZWY3YywgMHhkNGIxZGI4NywgMHhkNjRjYmQxMywgMHg5NzhlYWYzMywgMHgwZTNiNjYwZCwgMHgyNWUzZmRjNywKKwkweDJhYmY5ZTAyLCAweDAwMzFhZDYwLCAweDgzZDdkNmY3LCAweGI0MzdmM2ZkLCAweDAyZmI1YWVhLCAweGI3ZDNhZjdjLAorCTB4ZWE3ZDIxYjYsIDB4MWIwNjFjMjIsIDB4YWYxZWUzY2MsIDB4YTUzOWUyZTQsIDB4YWRjNWU5NmEsIDB4YTY4OWUyYjcsCisJMHhhMGEzZDVlMiwgMHhhY2Y5ZTNhZSwgMHhmZWU2YmY1ZCwgMHg1OTgwNWI4OSwgMHhlYWI3NmUxMSwgMHhjYjlhYmI1OSwKKwkweDUyZTEwMGU5LCAweGE5Nzg3NzZiLCAweGUyODUzY2RmLCAweDIwMmUzMjM3LCAweDg2MTgzZmYxLCAweDJkZTNjNDBmLAorCTB4NGUzMDdkNjIsIDB4MzdkZjE1ODMsIDB4N2NkN2M3ODYsIDB4OGNjYzJmODEsIDB4MTVjZmI4NDYsIDB4ZjI1NzM3N2MsCisJMHhiZjMwNTM1YiwgMHgwNDc4ODIzZCwgMHgyZWQwNTUzZSwgMHgyMmRkYjgwNiwgMHhlMmY4OWVjYSwgMHg0NzZlMTRhMSwKKwkweGNmYzI5NDNmLCAweGUyNWNmN2VmLCAweDk1ZGNjYzdjLCAweDgyNzk3OTQxLCAweDdjNGRhYTVmLCAweDc1ZmYzOTdjLAorCTB4YzUzMDdjYTIsIDB4ZjVjYmUzNGUsIDB4OGE3ZWJkMDAsIDB4MDI0MGU4ZTMsIDB4NjkxZWJkMjAsIDB4NjhmYjI3YWMsCisJMHhjMzg4MGIxNiwgMHg0OWZiZmE2NSwgMHg3N2FkMGViYSwgMHhmN2RkMTFjYiwgMHg2NmJiMWE1OCwgMHg1Zjk1ZTgyMCwKKwkweDhlNTEzYTQ0LCAweGNlNmM2MmRlLCAweGY2ODczM2E5LCAweDUyZTY3MTkzLCAweGVmYTA2MWQ2LCAweDk5M2Y0OTAzLAorCTB4NTU2MzNmZDAsIDB4OTUzNWU1MzMsIDB4ZjQxZWZjMmEsIDB4NTc4YjQyZTksIDB4YzdlMjc2MDcsIDB4MDY3YmJlMjIsCisJMHhhNzljNDZlYywgMHhmY2ExNTYzNCwgMHg3NzMxNjlhZiwgMHg5NzVmMjA5NiwgMHgyYzdhOGQ1YSwgMHhkZmYxMTYzZiwKKwkweDhkMTc1OTViLCAweDJiMmQ4OWZmLCAweGRmODYwNmU2LCAweGU2MzE1MDRkLCAweGE0ZjgwYjA3LCAweGFkZmIwNWQ4LAorCTB4ZWJjM2Y5NDcsIDB4ZTQ2OTVkMmIsIDB4NGZmNTEyOGQsIDB4NjY1YzYxZjcsIDB4MDNhMDc5ZWEsIDB4NzYyZTFmYWEsCisJMHg1ZmE3YmNjMSwgMHg5MWQ5Y2YxNSwgMHhmYTdlN2M2MiwgMHhkZWNmNDEzZSwgMHhlOWRlMzRlMywgMHg1M2YzZTRjNywKKwkweGY5MGFmOWZjLCAweDdmNWUyYmZjLCAweGVhMmY4ZTUwLCAweDJmOWU2YjBmLCAweDgyN2YzY2QxLCAweGY4OWY1YmQ3LAorCTB4ZjY4YmQ4YWEsIDB4ZGE0ZTY4ZWIsIDB4OTIxNDIzYTUsIDB4MzcyMTQ2NTcsIDB4MTJiNjk3NGEsIDB4YmI3NTRiOWMsCisJMHhiNTlhMzk3OCwgMHhkYzJmZjJlYSwgMHhkYjhhNjRlZiwgMHhmNzgwOTI5OCwgMHg1MDU4OGZjZSwgMHhkNTMzZmYwZiwKKwkweDdlODE0YzY1LCAweGZlNzkyNjlmLCAweDQ5OWNlNTg2LCAweDcyODhkNzhhLCAweGU5MWYzZGY3LCAweGYyMWU5Mjg1LAorCTB4YWU0MjhkMjcsIDB4YTZlNWVhOWYsIDB4ODMxZWE1ZjcsIDB4ZjFjM2RlNzEsIDB4YmI5Yzc1MmYsIDB4ZTRmOWM3NDMsCisJMHg0ZDczOGNjNywgMHg0NzM4Yzg2YSwgMHhmZWJlY2M3ZiwgMHgyNGUxY2E5YywgMHg1MTc2OTFjNywgMHhlOTRiYmE3MSwKKwkweDY2M2FmYzg1LCAweDcwYmY5MDY0LCAweDE4Y2ViZGVlLCAweGNjMzE0YmY0LCAweGNmZDAwMzc3LCAweDkxOWNkYTVkLAorCTB4N2RjZmUzMDcsIDB4MGE4Y2M1ZWUsIDB4YmU4NDliYjQsIDB4MzJhNzM5YWYsIDB4ZGFhM2M4MTcsIDB4NWY5NTBhNzMsCisJMHhjNDY0N2RiNCwgMHhkYjM1YjM3YiwgMHhhMGUzOGNkYSwgMHg0NTk0MmQ1ZiwgMHgxMmFhZWIwMSwgMHhhNzdkMDRlYiwKKwkweGE3YTAxYzlmLCAweDQyNzRiZDhkLCAweGYzY2MzYzZlLCAweGExM2I5ZTMyLCAweGQ1Y2U3YzQ3LCAweDNkZmQxZjM1LAorCTB4NGExMWVmZWEsIDB4OTdmMmY4ZDgsIDB4N2IwNzdmNjIsIDB4ZWU2MTFmYjgsIDB4NjE1MWU1YzUsIDB4ZWUzNDU3NmYsCisJMHgzOTA2MTRmMywgMHhmYWEyZmM2MCwgMHhiZjAyZjlmMCwgMHgxNTI4ZWIxMiwgMHg1MGZhNmZmYSwgMHhlMDAzODQ0YiwKKwkweDFlM2RlNDNjLCAweDliNThhZjVmLCAweDYyZmU4Yjk5LCAweDA0ZThmMjYzLCAweDdlOGY1YjgyLCAweDY3ZWUyZWQ2LAorCTB4ZDY3ZWUxNmQsIDB4MDJjNzdiNTIsIDB4YmI5OTRlZmMsIDB4Zjg4M2VjNTcsIDB4YmYwOWIyZGQsIDB4MmMwNjdjOTMsCisJMHgzNzhlZWYwYiwgMHg4OWJmN2FjOSwgMHgzZjcxNDY2MywgMHg3ZWYzZDYxOCwgMHhmMjIwZjk5ZiwgMHg2ZTI4ZGVjZCwKKwkweDM2MWI0ZWNmLCAweDQzZTUwYTMwLCAweGNlYjQ2NjY3LCAweDRmYWNmYzA2LCAweDRhZjc3MzJhLCAweGM2YWJmNmMwLAorCTB4YzlhMTdiNjEsIDB4ZTA4Y2E3ZDIsIDB4ZjQyZTg4Y2IsIDB4YjhmZWVlNDksIDB4ZmU4ZmVjNGUsIDB4MzViMThmMTEsCisJMHg4N2Q4MDZlMSwgMHhlZTk1MGRlNywgMHg0NTA2NzgwMywgMHhjYmM1YzI3YiwgMHhlNWM1ZWYyZiwgMHg4ZDk3YmJiOSwKKwkweDA3NTdiMWUwLCAweGFmZjVjY2ViLCAweDc2MGZjZTQzLCAweDE4MGU4MmZkLCAweDk0ZDJjOGVmLCAweDMwMzgwZmMxLAorCTB4NWQ3ODUzMWUsIDB4ZmNmZjA0YWYsIDB4YTMzYzkyYjMsIDB4YTIzZmU3MDIsIDB4NjhmMDdkNjMsIDB4MThlYmIxNzEsCisJMHgxZDcxZjAyZSwgMHhmNzRhMDZjMiwgMHg4MGI3YTAyOCwgMHgzMWU0ZGVmMywgMHhhOWY1NDFkMSwgMHgxNWNjNzFjNSwKKwkweDlhOWRiZmU4LCAweGIxYmY1NDFhLCAweGZmYTgzYjM0LCAweDA3ZmEzM2NkLCAweGVhNjg5ZjNkLCAweGIwMGJhZmM4LAorCTB4OTdiNjdiNjcsIDB4NWE5ZjA0YmMsIDB4ZWQwYTI1OGIsIDB4YmU1YTRmYmEsIDB4YjQxNmUwZjksIDB4NGVhYTM3MDMsCisJMHhlZjY3NTliNCwgMHg0OGMxZjRkYywgMHhmMDA2NzVlOCwgMHg0OTdlNDcxYiwgMHgzZWQxZjkwNywgMHg3YTc0Nzk5NywKKwkweDdlMzAzZTk3LCAweDUwNzU4YTc0LCAweGQ3M2NhMmJlLCAweDY4ZGM2YzVlLCAweGYyOWRhZGFlLCAweDc4YWU3ZjA5LAorCTB4ZTI1ZWJjZDEsIDB4NzJjYjliZmMsIDB4YTk5ZTNmNTEsIDB4NzlmYzlmN2IsIDB4Y2ZiZTY2MzUsIDB4ZTIxZTJmNTMsCisJMHhiZDQ0MmRkZiwgMHgzNTdmNzQwMiwgMHhlMmY2ODhiZSwgMHhjMGZjMTAzOSwgMHgwZTNiNDVmZiwgMHg4NmNkOWM1MSwKKwkweGY3YjQ0ZGMxLCAweGYxZTllNmQzLCAweDk0MmQ2NGZlLCAweDgxYzY1ZmE4LCAweGJhMDE4YWRjLCAweDAzNjM2OGU5LAorCTB4NDhkZTYxYjcsIDB4ZTVkYjg1YTYsIDB4YmY5MGE2ZTcsIDB4ZjcxNDZmN2MsIDB4OGM0ZGVjZmIsIDB4Y2M0OGVmYTUsCisJMHhkYTg2Yjg2ZCwgMHhkMzQ1Y2U2YiwgMHgxZGE5NmZmOCwgMHhmYTJmMjhlMywgMHgxM2UyODUwNSwgMHgyZGE3NTMxMywKKwkweDhkZWNmZGM1LCAweDFkYjgwZWYyLCAweGU3Zjg5ZGU2LCAweGRjMjNjN2FiLCAweDdiZjFiNjZhLCAweDc3ZDUxMzAyLAorCTB4NTk0MWU3ZjIsIDB4YmQwZDc4ZDUsIDB4N2I2NTUxM2YsIDB4NjIxZmIwMTUsIDB4ZTM0MmRkY2UsIDB4MDAxYjQ0NGUsCisJMHhjYjUwZWFlYSwgMHg1NTk3YTgwMywgMHgzZjlmNmI2MywgMHg1YTMxYmNhMCwgMHg5ZWQ0ZGU0OCwgMHgyNmY3YTQ4YiwKKwkweGZkZmQ3MTE0LCAweDBjNGYyMTdiLCAweDYzNWQ3YzlkLCAweGU3YTI0ZGNmLCAweGJkN2MyZTkyLCAweGY3ZjI4MmIyLAorCTB4ZjUxYjA5MGQsIDB4NDMyMWJkZjgsIDB4YWZmZDQyYTcsIDB4NGE5ZmQ3M2QsIDB4ZmEzN2RmYjksIDB4MmZiZTkxZmQsCisJMHg3YWY4NDg2MCwgMHhiZThkZTYxYywgMHhjOGQ4YWYxMSwgMHhlM2M4ZDEyYywgMHg2MmMzNzViMywgMHhkNTc5MTg1OCwKKwkweDllMzljZjNkLCAweGM3M2E2YzZmLCAweDNiZmY4ZmYzLCAweGU0MTdmNWNkLCAweDlkNDU5MmMzLCAweDMxMTc4YzdhLAorCTB4ZTEwZDg0NzMsIDB4ZDgzMDUyNTUsIDB4NjdjMDExNTEsIDB4OGM5YmFlZWEsIDB4ZWFjMzFmODgsIDB4YWZhODhkYjcsCisJMHgwNTE2NTA0ZCwgMHhmOTE2YWYzYywgMHhkZDc5NWE1OCwgMHhmYzgzZTQyMiwgMHgzZmQ0OWI4ZSwgMHhkMTA2NzkyYywKKwkweDQxMzZhZGU3LCAweDllOGY4MmEwLCAweGRmMmM3YzE2LCAweDBlMzNhMGVmLCAweGY3M2I3MWUwLCAweDc5YTZiN2YzLAorCTB4ZDEzOTQyZGUsIDB4N2M2ZWM4NTEsIDB4NDc2N2U0OWUsIDB4N2U2OWM2MDYsIDB4OWUwM2Y1YWUsIDB4MWJiMjE0MjMsCisJMHhiZWFmMjkzYiwgMHhjM2ExYzBhNCwgMHhkZDdiYzBmOCwgMHhmM2YzODc3YSwgMHgyNmQxZjY4NSwgMHhjYTk2ZmRmNiwKKwkweDZmYjhlMjE2LCAweDFkOTdmMmZkLCAweGVkYWYxODJlLCAweGQ0M2NiY2VlLCAweGNmZGU3MjBiLCAweDBiN2JmMTdhLAorCTB4MWU3NWQ2Y2MsIDB4MmZiNTg3Y2YsIDB4ZWY5MDNiNDcsIDB4MGNlMWUyMjcsIDB4NGQzYmEyZTMsIDB4NzY4MTZlNzQsCisJMHhiZWQ0Nzc4YSwgMHhlZjBhN2E2YywgMHhlMTVhZDViYiwgMHgxN2YzMGFmYywgMHg4YWQ5MTJiZCwgMHg0YWY2ZGM3NCwKKwkweGM3ZjUxZWE0LCAweDlmM2RiZDFkLCAweDVlOGE3YzIxLCAweGNmMDYzYmU5LCAweDkzMTZhZThiLCAweGUzZmQ5MTllLAorCTB4YjZmMjRhM2EsIDB4NDg1ZWY1ODcsIDB4NGNlOTY5N2UsIDB4ODFhN2E3ZjIsIDB4YTA5OTRiZjMsIDB4N2ZjMTcyZDMsCisJMHg2NzQ3YzExZSwgMHgwZjg4OTJlYiwgMHg0NTgyMmVjZiwgMHg5MTc1M2M2MywgMHhkYTFiNzAzMiwgMHg3ZDBiMGUwYiwKKwkweGU1ZjI0ZTk3LCAweDQxMWYzYzQ0LCAweGIxZmVjNGZiLCAweGVhYTE4Zjc0LCAweDFmMTA2YzVjLCAweDE0Y2I5ZjU2LAorCTB4ZWQ0NzFkZmMsIDB4MDVjYWRmOTIsIDB4N2Q4NDk4OWYsIDB4YjVkMDQzMzEsIDB4M2YyNDViYjQsIDB4NjI0Zjc0YjIsCisJMHg2MjYzZWMyYSwgMHg5NWJkZjAzZCwgMHhjOGY5ZmVlMiwgMHgzMWJhN2U0ZiwgMHg4MGJlOTBkYSwgMHgwMjJiOTI2ZSwKKwkweGVkYmVhN2Y4LCAweDhhNzY4NjI2LCAweDc0NGRkZTI5LCAweDQwY2EwMzMzLCAweGI3NjY2NTNiLCAweDk3MWI2MjlkLAorCTB4NTkyZmViMDgsIDB4N2JjM2E5OTYsIDB4NmE3OWYyOWIsIDB4N2ZkMWE1ZWEsIDB4MjdjOGFhNDQsIDB4YTBlNmI3MzAsCisJMHg4YmE4NmI1ZCwgMHg5YTdkZTI3NCwgMHgxZTNjZjEzMywgMHg4NzA1N2YzNCwgMHhiYjgzN2NlMywgMHhmOThjZWQwOCwKKwkweDNmZTQyODRmLCAweGU1MDNmYjQzLCAweDc1MDNkMGQyLCAweGNhYmY0MGM2LCAweDUxMDZlNzRkLCAweGI5Y2E3ZDNjLAorCTB4MjYzNGE4Y2IsIDB4Mzg0NzJlN2IsIDB4NWViYjlkOTQsIDB4OGZkMDZiZTAsIDB4NzEwZTNmOGEsIDB4YzE5MmJmNzEsCisJMHhjODZlNzI2NywgMHg0NzkyYmY0NCwgMHg0ZjFmM2M0NSwgMHgwMzQ3YjY2NywgMHg1NDZiN2RlMywgMHhiOGM5OGZmMiwKKwkweDk5MzNmNGE0LCAweDgwNGZkZWYwLCAweGRmNDZmZDNlLCAweGEzZGY0MTk4LCAweDBhOWRmYWQxLCAweGI5M2ZmZWI5LAorCTB4YmZmYTQwZDEsIDB4YTE5ZGVkYWEsIDB4NzlmZTc4M2EsIDB4ZjUwOTJiYTYsIDB4YTc4MzdhYzksIDB4NjczM2Y3MDgsCisJMHgwMzM5ZWZiMiwgMHhiODNlZTdkNCwgMHhlMWRjM2FkNSwgMHhiZWIzNjc4NywgMHg2OWY1MDczNSwgMHhmZDExYzAzMywKKwkweGQ1MmJjZDVmLCAweGY3NmUzZWYxLCAweDFhMzhmMzQ0LCAweGNmNDk2ZmE3LCAweDczOWYzYTVhLCAweDczZTA5YjJlLAorCTB4N2E0NGNlYjYsIDB4MmRkMDJjZTgsIDB4NTI0M2QwMGIsIDB4MmYzOTQ4ZWYsIDB4ZWJhNDhmZjUsIDB4NWY5NzNkNmEsCisJMHhjYTE4ZTZkNSwgMHg5ZGViZjMyMywgMHhhNDQyZWU0OSwgMHgxZjNjN2ViYiwgMHg5ZTc3YWZkMCwgMHhmOTAyMzU1YSwKKwkweGU1M2M3NGUwLCAweDIxYmQ0YjVkLCAweGM1ODVlMGY5LCAweDI0NDc5NGM5LCAweDAzZTQ5MmY1LCAweDdjYTVjZjI5LAorCTB4ZjUyZjc0OTcsIDB4ZmQzZmU4ZDYsIDB4YzNiZmQ2ZWYsIDB4M2NkMjkzYWYsIDB4N2QwMmE1NzcsIDB4ZmFlN2FiNWQsCisJMHg4NWJkNWFlYiwgMHhmYzZjNjdlOCwgMHhjZGQyM2QyNCwgMHg0M2QxY2JjNSwgMHgwYTFlOGU0MiwgMHgzZDM1YTM5MiwKKwkweGE5NDU4MWU4LCAweDFjNWU3ZTUyLCAweDdjMTFjYzFmLCAweGVkYzRkZTMzLCAweDgxZjM5NDQ4LCAweDhkYTZiNWUzLAorCTB4YjFmNzA4N2UsIDB4ZDllYjk1M2EsIDB4M2RkZDZiOWYsIDB4YTlkNWZmYzksIDB4OTdmZjI2OTcsIDB4ZmM5YzVlYTQsCisJMHhmZTU0ZWZmZiwgMHhiY2FkMGE5ZCwgMHhhMzcxMGZjNywgMHhmM2JkM2ZiYywgMHg4M2VhMWY3MiwgMHgwM2Y0MGM4MywKKwkweDY4OTZjMWVhLCAweDBmYTEyNmM3LCAweGM1NDQ1ZjQ4LCAweDFmNDg3ZWY4LCAweGZlOWVmNjE0LCAweGY1ZTFhOWRmLAorCTB4ZmY2YzY2YzEsIDB4ZDI0MGZhYjEsIDB4YzkxYmU0OTcsIDB4YjQyZjkyMjcsIDB4NjJmOTI0N2MsIDB4YmNlMTZmYzIsCisJMHg4YjdhNzg4OCwgMHhkNmFhOGZkZiwgMHgwZTI4OWI3YiwgMHg4YzFlODhlOSwgMHhjNzZkZDlmYywgMHhkZjg4NTM2ZCwKKwkweGUwODRmNDQyLCAweDA0YmYzZjFmLCAweDFmYzkwZGViLCAweGZmMjQ1ZjkyLCAweDk4ZmUwYjU0LCAweGYyNDNmODI5LAorCTB4ZjliNTZlYzUsIDB4MGE5ODExZDEsIDB4MDhmOWU2OTAsIDB4OTNlNDg4ZTUsIDB4ZmFiNWU3YWEsIDB4NDJiYTQ3YTEsCisJMHgxOTliMjM0ZiwgMHhhZTkwYzc1ZiwgMHhhNDBjYTFhYSwgMHhmYzBmNTMyYiwgMHhmNTEyZjA3MCwgMHhhNDhiYmVjMiwKKwkweGYzZmVhZmE3LCAweDBmNTVmNGY0LCAweGE3ZTY3NGY0LCAweDFkYTg1M2QwLCAweDAzYmU2MWZiLCAweDFmMzY3M2Q2LAorCTB4OWZhNjZkZTQsIDB4OGRmYzI2ZGUsIDB4OWIyMWZiNzEsIDB4NDZmNjA3OWYsIDB4MzVlZTdkZjEsIDB4NjdmZjkzYTYsCisJMHhjZjNjZjdjMiwgMHgzMzAzZGE1NywgMHhkMjQxYmY4NSwgMHgwMWQ4MWU2OSwgMHhmOGZjNDM2OSwgMHhiY2MwZjNjNywKKwkweDg0N2I5MzhiLCAweDg3N2M1MzY3LCAweDMzMjdjZjExLCAweDAzYjQwY2ExLCAweDUzN2ZiMjdhLCAweGVlNGQyZWQzLAorCTB4MTdmZThhNDUsIDB4YjQ4MGYzYzIsIDB4MWM2ZWRkOWYsIDB4YWYxZTE2OTAsIDB4MDI3ZWQzMDMsIDB4YTI2MjI3NWUsCisJMHhiMjJiZjkyYSwgMHgwMGEzNWM0YiwgMHhiYTg5MGYzZiwgMHhjMjA5NGZiNywgMHhmOTAyZmFmMSwgMHgyZTU1YjJmYywKKwkweGQ2MDdjYTNkLCAweGY0NzVkZGZkLCAweGNhYTViYzc3LCAweDMxZmVjZTdhLCAweDhmMDk5ZWIwLCAweDFkMWZiZjMyLAorCTB4MTUxZDhmOWUsIDB4NTExZmVkZDMsIDB4NzE3ZmJmOTgsIDB4OTVmZWQ2NWEsIDB4NDUxYmU3YTQsIDB4OWVhNzRhZGUsCisJMHgzZDQ0ODNjNywgMHg4MDk2ZWExZiwgMHhiZWE2ODE3YSwgMHhlYWI3Zjc5NiwgMHgzZTYwNTkzYiwgMHg5MjhkZDIwOSwKKwkweDBlZWNmMWNiLCAweGZhNjAxZmIwLCAweDJmYThiM2Y2LCAweGZmNDMwYTZjLCAweDg2ZmM2ZDQ2LCAweDVjYTJjZjU3LAorCTB4NmM1MGExZGIsIDB4ZGUwZTFiYWEsIDB4ZmEwNzA0ODEsIDB4MDdkNTM4M2UsIDB4YzY1ZDc3ZWYsIDB4NzhkYmNkZDgsCisJMHg0M2I1ZjZmZCwgMHgxMzJmNzk1NiwgMHgxYmRjMDZlMywgMHgyZTJiMzQzMiwgMHg1MDI4NDdjYSwgMHhhMTk5NTk3YywKKwkweDRkM2RiZWYwLCAweDFlYjkxM2NhLCAweDAyMTRmNzQ2LCAweGFmOTg2N2RlLCAweDc3ZWYyOTc3LCAweGQxNjc0ZGU3LAorCTB4NGJhNmFkZmIsIDB4NTE4NmZmOTgsIDB4YWM2ZmVmZTEsIDB4ZTRjNmZkMTAsIDB4ZmU3ZDg0YzcsIDB4ZTFjYTlhNzAsCisJMHgzNDA2ZmMyZiwgMHg2OTRkMzQzZiwgMHhmZjlmN2YwZSwgMHgxZDJmYzEwOSwgMHg3ODIxM2YxOCwgMHhmZTg1NWE0ZSwKKwkweDg0YTMwZWVkLCAweGMyMTU3YmI3LCAweDQxNjMyYzdiLCAweDlmOTgzNDdlLCAweGJhZDcxYmVhLCAweDdjZjQxYTRiLAorCTB4YmMwZDJlYmIsIDB4NzdiZjY4N2UsIDB4MDNkYjA1YTUsIDB4NWYwNjliZjQsIDB4Zjc4MDFmYTYsIDB4NzdkZTYxZGQsCisJMHhmYWRmYmYwNCwgMHgxMjVhZjg0MywgMHhkYmEwYmVmMiwgMHg1ZDhlOTI1OSwgMHhhMzFlZjQ0MSwgMHhjNjdkMTM3NywKKwkweGI0MzYyYmM0LCAweDkxZGM2YmEzLCAweGUwYmNmMTJiLCAweDEyZDJjZmU3LCAweDEzOGM5YjgyLCAweGI0ZGZmMDg0LAorCTB4YzgwMzMxOTIsIDB4NmZjZjEyNGUsIDB4ZWJmYzg1NWIsIDB4ZTdmNzc1ZDYsIDB4MWFlOTI4ZmMsIDB4NWMwMTM2YWYsCisJMHhlZjA3ZjVjOSwgMHhlYjc2OWNiZiwgMHgwMjRmZjQyYSwgMHhhYTczZDA1ZCwgMHhhZGQ2MDNlYiwgMHg0ZDY2YzdlNSwKKwkweDdmODY5NDdkLCAweGZjOTFmZjA1LCAweDcwMDA3ZDQwLCAweDE2Zjk0MWNhLCAweDA4ZThjODdmLCAweDA0NGY5M2EwLAorCTB4N2M4OTRlOWMsIDB4ZGNkMThlZjIsIDB4ZTJjOGVjOWUsIDB4M2M2OTc3ZTUsIDB4YTA5OWY1MmUsIDB4OWU5MjUzY2IsCisJMHg5MGUwMDJhMiwgMHhmNDNmNDQxNiwgMHhmNjAyMjFmNywgMHgyOWJhNzA0ZCwgMHhiZGYzZjI1ZSwgMHhiZmMwYzUyNSwKKwkweGZjZmU3NjFkLCAweDY2ZmVkNjdmLCAweDVmY2QzNzk1LCAweGNmZjc4ZWQ3LCAweDIwOTZmN2I1LCAweGY3YzdiYTVjLAorCTB4NzY4ZmRhMmUsIDB4NmUwMjRkYzQsIDB4NjdiZGFkZGYsIDB4YzA4MDc3YmYsIDB4YmJmZmEyNzMsIDB4ZjQxZjQwYWIsCisJMHhhNDZhOWUzZCwgMHgzZTk0MjUwZiwgMHgyZmE1MGQ1ZSwgMHhmYTdkZTZhZiwgMHhiZDNkMDQzYiwgMHg3OTUwYjdmZiwKKwkweGNmYmNkMmUwLCAweDE3MTA3YmYwLCAweDViYzBiZWZmLCAweGUzYWYwNmIxLCAweGEzMWQ3ODM1LCAweGJhY2E5N2E5LAorCTB4NGFmZTQ4MmYsIDB4ZTNiZTVjYjksIDB4ZTMxMmZiZTEsIDB4ZDBhOWFmZDEsIDB4M2QzZjI0NzUsIDB4M2NmNDQ4M2YsCisJMHg3N2U5MjZkNywgMHg0ZmQ1YzExNSwgMHg0N2VkMGZjZiwgMHgyY2RjOWRmYSwgMHhmNDkxYjVlOSwgMHhjMzk0MjRjZiwKKwkweDI5ZjVmYzIzLCAweGZlYTg4NzI4LCAweGM1YzYwOTcwLCAweDkxZWFmYWZjLCAweDZmYjcyODU1LCAweDFmZmQ5MDY4LAorCTB4MmYzN2ZlYTUsIDB4YTZhZGUzOTMsIDB4OGM4ZjEyZTcsIDB4ZWVmYTQ2M2QsIDB4YWZhOTdjYTYsIDB4M2ZiOTI3MWUsCisJMHhlZmJmODVhNywgMHhmZWRkZmY0YywgMHg0Njg3ZTQxZiwgMHg2YWQ2NWMwZCwgMHhmZjRkNWVlYSwgMHg2ZmQwMTdkNSwKKwkweDJmZWYzNGNiLCAweGE5NWYzY2QyLCAweGQ0ZDFhZmE5LCAweDJmZGY4MjFiLCAweDFmMTBhMTliLCAweDM4ZjAxNTk2LAorCTB4YjUyZjk2YTUsIDB4ZWY0YWUxZjQsIDB4ZjViYTczYjYsIDB4ZmIyNjYyYjksIDB4MjZhZjg4MmUsIDB4YjVmYWYzZDQsCisJMHgxYTRiMWJlOSwgMHg3NWY1MDFjYywgMHg1ZjM4NGE5YiwgMHhmNzAxNmNjMCwgMHg3YWU2NDE5ZiwgMHg0MzA3YTA1NSwKKwkweDIwYjM3MjBmLCAweGQ5YjkwN2JkLCAweGY5ZWZhYjRmLCAweGFmZTA3ZmYzLCAweDBhMzcxNDI5LCAweGFiNzY0YmIyLAorCTB4NTUzNmY1YzEsIDB4NzViYmRiYWMsIDB4ODEwMTgyZmYsIDB4NGJlN2Q1ZjEsIDB4NjNkZDVjZjAsIDB4NWNkYmM3MWMsCisJMHgyZWQwMjYzMiwgMHhhZTI1Y2Q2MiwgMHhmZWNhN2Q4MCwgMHg1ZWZiYmVlMywgMHhlYjNjZjljNSwgMHhkMWIyNWNmZSwKKwkweDExNGY3MThjLCAweDEyZjNiNGRmLCAweGZhOGFhNWY0LCAweDZmZjg1NmJhLCAweDJmMWU2MWM2LCAweDVhYTI5M2M2LAorCTB4MDgwZmU2NzMsIDB4ZWU2YjI3ZDgsIDB4YmI2Y2ZiODMsIDB4YjdkZmU1NWIsIDB4MDBmYzA3YWIsIDB4ODM5OGNhOWMsCisJMHgzM2E3NTBmMiwgMHhiNmE1ZTUxNywgMHhmYzJjYzRjNSwgMHhmNzZmNzgyZiwgMHhkNDQyZWFkZCwgMHhjNjE3MDdkMywKKwkweDJiZDM1ZTUxLCAweGIxN2NmY2U5LCAweGUyNzdhNjNiLCAweDQ1YjdhODRjLCAweGI2ZjI0NmRmLCAweDU0YjFmZWVkLAorCTB4Y2I1ZDUyZWUsIDB4MmQ4YzZjYmIsIDB4ODk0YWY3NWUsIDB4MWU3YzcyZjksIDB4M2JiYTcwNDMsIDB4MjU5MmE1ZmQsCisJMHhhNmY3ZWY0MCwgMHg4ZjdkZTgzYiwgMHgwM2I4OTZkZCwgMHgwYzA3ZWRlZCwgMHgwZTA0MzcxNCwgMHhlN2U4OTI3OCwKKwkweDNjNjBkMzQxLCAweGU5MmQ5NzZmLCAweGYyYjE3MTRmLCAweGMzOGQyNmM3LCAweGY3ZTVhNDdiLCAweGQyNWUyODE5LAorCTB4OWY5MWIzYTksIDB4NThjMGYzYzgsIDB4YjE5YTkzY2EsIDB4YWJkZTk0NGMsIDB4ZGZlNTdjYTksIDB4N2JjN2FjN2YsCisJMHgxNGViNWRhNiwgMHg1NWNkNGVmYSwgMHg2ZGZmMzc1ZiwgMHgxYjJiZDQxMCwgMHhjNjdlZTliMiwgMHg5NDc0ZTdjYiwKKwkweDlhZTlmZTE3LCAweDUzY2MzZWJlLCAweDQ3NTkxYzNlLCAweDlmZDBhNWY5LCAweDllNTZiYmVlLCAweGM5MmZlYzc3LAorCTB4MGRhYWZlYzcsIDB4NDI4ZTM4NTMsIDB4NDdjZmRhM2IsIDB4ZTE0ZmE4NTcsIDB4YWIzMmNlM2QsIDB4YmJmMzBhMjUsCisJMHhjOGM3N2U4ZiwgMHgzZWY0NzNhZiwgMHhlNmVmN2QxMywgMHhkNmU3YjM1MywgMHg4Zjc0ZjEzNSwgMHg3NjdkMmQwOSwKKwkweDE1NTg3MTU0LCAweGY0ZGFjMzgwLCAweDI5YzkyNWZkLCAweGY4MTI2ZWQ4LCAweDAzMmQ2ZmRjLCAweDc1ZDMyZjNlLAorCTB4OTNlOTBmZDMsIDB4NWY1ZTU4OGEsIDB4OTJjZGVlYmIsIDB4YTM4ZmIwNGQsIDB4N2NhNWY0NGYsIDB4ZDcwYzg0YjEsCisJMHhkNzgwNzRiYSwgMHg5M2Q3MGNlMSwgMHhkOWZiOGE1NCwgMHhjNzliZmNhZiwgMHg1OTNhNWYyNSwgMHhiNWY0ODg5ZSwKKwkweGNiZjVkMDU5LCAweDAzMTNjYWU3LCAweGM1NDE2ZWZmLCAweGMxZDEzZDI5LCAweDAyYzc0NjJiLCAweDU0NjllZWZhLAorCTB4NmNlNzgyYmEsIDB4ZjQzODgzYTAsIDB4ZTcxMGNmOWIsIDB4ODVlN2EwMTYsIDB4NTdkOGMzNWIsIDB4M2RiOWQzNGIsCisJMHg4NGRiZjZkNiwgMHhiYTIwOGU1MSwgMHgyOWU0OThmZSwgMHhmZWEwMzc5ZCwgMHhhNDQ3ZmE2MiwgMHgxNjk4OGVlNywKKwkweDc3NzUyZTYyLCAweDFkZGIyNDNlLCAweDM0MzI3MDQ5LCAweDMzMjJmYTQ1LCAweDFhZWE3ZmQxLCAweDRmZjNhMmU3LAorCTB4OTZjOTlmNzMsIDB4ZmQxNDNlMDAsIDB4ZmNmMmYxM2YsIDB4M2ZhMDRmZGYsIDB4ZjEzZWZiOWUsIDB4NjA0YjNmZmUsCisJMHhhZmY2NDMzYywgMHg2OGJjNWFiNCwgMHg1OGIzMWM1YywgMHg4MzhmODhmNCwgMHgzMTQ3YzVmYSwgMHg5ZDYyYWQzZiwKKwkweGM1NDBmNDgxLCAweDVkNDU4NGJhLCAweDZlODA3ZjI4LCAweGRkYTZiZmQwLCAweGMwYzMyOTk3LCAweGM2M2QxOGZkLAorCTB4MTkyZjNmNTcsIDB4NWU3ODE2OTMsIDB4YmJmMjQxMzksIDB4Mzc3Y2JlMjcsIDB4YzZjOTQ0ZmQsIDB4NjVmMzNkMDEsCisJMHhhN2NiOGRhNSwgMHhmN2Y4ZWI3MSwgMHg1ODg3MmI3NSwgMHg3YmJmNzRmNCwgMHhlODliYWJkZCwgMHhjOGJjZjAxZSwKKwkweDUxNTdiYzVjLCAweGY4NDRjZWI5LCAweGJjNThiNGVhLCAweGJlZjEyYmI2LCAweDBiMWY0NTgxLCAweGFlNzRhMWU1LAorCTB4MGUxOWY1NGYsIDB4Y2E5MTQ3YzIsIDB4NTRiOTExZjQsIDB4MTkwYTNkZDIsIDB4ZjBiMTNjM2YsIDB4MWQzMWM3ZDEsCisJMHhiYmU2NzNmMywgMHhlZmMwMTg3ZSwgMHhlOWQzOGI4YywgMHhmOTJhNmQ5OSwgMHhjNGYxYjUxZiwgMHgxYWI3ZDdlYSwKKwkweDg4OGZkOTBiLCAweDQ3MTBmNjI3LCAweGUyOWQ2MmFjLCAweGUzZTFlMmJiLCAweGUyMzhkYTg5LCAweGJkYzVkMmJmLAorCTB4YTIzOGVlYjMsIDB4NTE4N2JlODEsIDB4NDU4OGUyMjksIDB4N2Y1YTE1NmIsIDB4YmRmZTQyZTUsIDB4ZWUzOGEyOTIsCisJMHgxOGIyM2UzZiwgMHhlZDJmYTBlOCwgMHhjNWNiNmJkZiwgMHg3ZmFlNjkzYywgMHg4YmUyOTkyYSwgMHg1ZWFmNWY4MCwKKwkweDk5ZmM4ZjNiLCAweDVlMWNlOTc1LCAweGIwM2JlMjY1LCAweDE5OWQyMzg3LCAweDU4YWZkZTc4LCAweGFlNzA0OTE3LAorCTB4MDdmNjcyN2MsIDB4N2RlM2U0NGYsIDB4ODFmMTg5YzAsIDB4YTA5YjZiZTcsIDB4ZTE5ZjE4MGYsIDB4Y2UzOTY4M2QsCisJMHhkMGY3MjViMSwgMHhkNjhiNjc3NywgMHhmMzE5MzljMywgMHg3M2Q5NjNiNCwgMHhkZTIyNjUzNywgMHhkZTMwMzI1MiwKKwkweDJlNTVmYjI5LCAweGVmMGZiYmJkLCAweGQ4NmNlNzA3LCAweDk1MGFkOTc3LCAweGJiNmIwZjdmLCAweGYwMjFmNDg5LAorCTB4YjgwYjMyN2MsIDB4ZDk2MzNlMmYsIDB4ZDcyMzQ2ZWIsIDB4YTg3OTJjNjcsIDB4ZmUxZGIzYjAsIDB4YzI5ZjZjZmIsCisJMHg0MTA0ZmM3MywgMHgyNmI3YjhhZCwgMHg1YmVmMjdlMSwgMHhmN2Y4ZTk5NSwgMHgwYTc1NGIzNiwgMHg4OTAyYzNkZCwKKwkweDdlOTdmNzQ2LCAweGEzZmRjMTkxLCAweGNlZGMxOTc5LCAweGQyNzBjYjJkLCAweDU1ZWE5ZTNkLCAweDRjZDJlNzI2LAorCTB4YmRmNzRlM2UsIDB4NTVlNzM4NzUsIDB4MjgyYTNhZWIsIDB4MTMxN2Y5YWUsIDB4OTc2YTU3ZjksIDB4YWQyMmJhNDUsCisJMHhmOWUzMWYzYywgMHhhZDc3OTQwMSwgMHhhYTNjMDIzNywgMHhmYzZlNWMxYywgMHhhZDYzZDA0MiwgMHg5NGQ1ZDI2MywKKwkweDA3NjdhZTlmLCAweDU2MDdlZmYwLCAweGFjOWNiODViLCAweDliYjgwNThlLCAweDg2ZTkwMTM5LCAweDE5MzlmN2UyLAorCTB4YjhlMjUzZTUsIDB4ZTYwMjgzMjksIDB4OGMzYjQ0NTcsIDB4YzdmYWIwZTMsIDB4MGQ2M2FiZGQsIDB4ZmVjMWE3ZTgsCisJMHgzODQyMGY5NywgMHgyMzdmNWRjNiwgMHg5NTU5ZWZhZSwgMHhiNDgwMWFmOCwgMHhiZmVkMDBhYSwgMHgzYzNjZDU2NywKKwkweGQ4YWQ5Nzc3LCAweGYwZTUwZTNkLCAweGYxODMyZGRjLCAweDdiMmIwNTQ2LCAweDIzZDI1ZGVlLCAweDNiZmUwNTczLAorCTB4Mzk1YTNlNDUsIDB4ODFiYmYxZDQsIDB4Yjk3MDY0MzcsIDB4ZGZiOTUxZTksIDB4MmYwMTA2ZTgsIDB4NzlmMjA3NDksCisJMHhmNzAzMGFmNSwgMHg0N2JjODNlMywgMHhlNGJkNTMwMSwgMHhkYWI3MWE0MywgMHg3Mjg4OTFkMiwgMHg4MWJiN2FiOCwKKwkweDhjZGY4N2VlLCAweDk3MzgwNmViLCAweDc1MWY0OTJmLCAweGRjYWFlODAwLCAweDUxZGY0MzEwLCAweDM0NGVmMmFkLAorCTB4NTFhYWJkNjIsIDB4YmRmZmJhYTEsIDB4ZDNhNDBjODQsIDB4NjBiZDk2MmYsIDB4MWMzOWZhNDUsIDB4ZmE4MzlhZDksCisJMHhhNDVlNmJhOSwgMHhkYTI5ZWU5MywgMHg4YmVlZGZiOCwgMHhhZjc0Mzk2NSwgMHhjM2FkODY2OSwgMHg5OTY1ZGY4MiwKKwkweDhlZGIyMGIxLCAweGFkYTBmYzcyLCAweDBmY2Y4OGQ1LCAweGIwZWE2NzM2LCAweDQ2ZDliMmVlLCAweGJmYTVkZDYxLAorCTB4ODg1ZmVhOTIsIDB4NDFmYTE3N2MsIDB4OWUzODUyYmEsIDB4MWI3NjlhYWIsIDB4ZGQyZmVmZjEsIDB4ZDRlMmU4MmIsCisJMHg0MWY2ZWZiMywgMHg0Njc1NTAzZiwgMHgyZmQ0MWY0NywgMHg1MjdkMDc0MCwgMHgyOGNmY2UxMSwgMHg5YTZiOWZhNCwKKwkweGE0YmMxZTc4LCAweDAzYTQxYTgzLCAweDgyMzliYmUwLCAweGJkYjY2YTBlLCAweDQzZjIxNzcwLCAweDM3M2ZlMjBkLAorCTB4OWU4MDhlOTQsIDB4ZjlmZGE5ZGIsIDB4N2YxOGUzMGQsIDB4NDRlOTFkYmYsIDB4MmZhODMzZWEsIDB4Y2UzZmEwMzMsCisJMHgwNThiZWJjOCwgMHgwYzdkYTFmZSwgMHhlMDBlZjc2ZiwgMHhmOWRkNzVmOSwgMHhkMDdjNDEwOCwgMHg2NmQ3N2UxMywKKwkweDRjM2UwNGU4LCAweDhhZDc3NzI0LCAweGQ4YWU3NmZkLCAweDlkZmM0NTZlLCAweDFlZjc3NjdhLCAweDNmNTRiNzhjLAorCTB4MTFkYWRhMGYsIDB4M2MwNDFmODYsIDB4NTZmZjcxNmEsIDB4MTlkOTNmNWEsIDB4YWI1ZmI4YjUsIDB4NzRkZGZmN2YsCisJMHg5NmIwZjgyZiwgMHhmZGM5ZmRmMSwgMHhmZWM1ZWFkNiwgMHhmZWYxNzNlNSwgMHgyYWNmYjEzYSwgMHhhZGI1ZTAyNiwKKwkweGMxM2JlNzJmLCAweGY0YzdjODY3LCAweDNmYjEyMWRkLCAweGJiZjgzZDhmLCAweGZlYzViYmJhLCAweDZjYzk0NDlhLAorCTB4MGY4NDU2Y2QsIDB4MGZlNTE3ZTIsIDB4MjhjYjhmZDAsIDB4Mzk3NDA5ZTUsIDB4ZTUwMzY1YjUsIDB4Yzk3YzRiZjcsCisJMHhkN2VmYmZmNSwgMHg5M2ZjMmUyYiwgMHg5ZDhmMTI1NCwgMHhiNmY3N2MzZCwgMHhhMWM5ZjA0NSwgMHg3NjMyOTJmYiwKKwkweGQ4YmVmYzAwLCAweDI0MGQ5ZjRjLCAweGNjMDdkNTdhLCAweGNlNDZlOTI3LCAweDQ5YTdmNDU3LCAweDYxYmVlMmQ3LAorCTB4NWYxYzU2ZmMsIDB4MWJkMDdiY2UsIDB4MGU3MWM3YWQsIDB4NzIxZmNlMzIsIDB4OGIyZjkyZmQsIDB4M2I1ZGE3ZWEsCisJMHg0ZWZkOGFkOCwgMHg1ZWQxYjI1OSwgMHgzZjdjNzgxMSwgMHhiYmVmNDZjMywgMHhmNzgwNmVkMCwgMHhmMjE0M2I1ZCwKKwkweGU3MTIxZjVmLCAweGJkZjc0M2ZkLCAweGUwMWYyZDYwLCAweGM1NzdmN2E3LCAweGUxOWQyNWJhLCAweGU0YzlmYTBmLAorCTB4YjlkYWY3N2EsIDB4NmViYjU4M2YsIDB4YmFlNDg3MjksIDB4ZTFiZmVlOGIsIDB4ZWI5NzZjNWEsIDB4MjA1MWY4YzcsCisJMHg0YTM4NGE5ZCwgMHhmYWY3OTU3YSwgMHgzNDRiNzRiNCwgMHhkYWFhZjUyNywgMHhhNmQ3N2QzMywgMHg5ZGZjYTIxZCwKKwkweDc4ZWQ3NjkwLCAweDJjM2EzZWMyLCAweDllYmJjZGYyLCAweGU3N2RmOTU2LCAweDQxZWRjOTY1LCAweDMzMTg4ZWY3LAorCTB4MjU5ZmVhMDcsIDB4MTViNmFlZjMsIDB4NDliNzNjNjIsIDB4NTIxZTdiYTEsIDB4NGFjZmMwYWYsIDB4OTIzZTgwN2QsCisJMHhkZWYwYzFmNiwgMHgzNmE1N2YzYywgMHhmMTAyNzVkZSwgMHg2M2JjNzU1OSwgMHg0NDkyN2UxYywgMHg3ZDU3YTVkYSwKKwkweGEwYzZhYWRkLCAweGNmMWI2YWZmLCAweDUzNzQ5MzgzLCAweGY4OWRiMjc1LCAweDkzZGM1YWExLCAweGVlZjE1YjJhLAorCTB4Zjc0ODYxYzQsIDB4Y2UyODFiNGYsIDB4NThkZjc2NTMsIDB4YjNmYmRhMjMsIDB4OGExZjRkMzcsIDB4MTI3YmMwZTAsCisJMHg2YzRmZGYyOCwgMHhlMDQ3OTIxYywgMHhlYmM0YjY2MSwgMHhjNmM0YmVmMSwgMHhiZmM3YWY0NywgMHg4NzYzM2E1ZiwKKwkweGMxYTFkZjRhLCAweGNiOGY5MDcxLCAweDdmMjNjOGVlLCAweGNlYzhlMWViLCAweGFlZDAyMzg5LCAweDQzNmFiNWZmLAorCTB4YTZlNDdlYmIsIDB4ZmZiMDhiMjEsIDB4NThlZjRiNDgsIDB4YzZkMDc4ZmEsIDB4ZjRiYmFhMzgsIDB4YTQyN2E0MzEsCisJMHgwM2YzMmMxZCwgMHg5MGJkYzVlYiwgMHhhZjljZGVlYywgMHg4YTk3NzU3YSwgMHhlZmFjMGJjOCwgMHhhZWY5ZjE4MywKKwkweGRkZjQ5MTBkLCAweGEzYTM1MmE4LCAweGRiZTcxNWI5LCAweDhlZTc0NDk5LCAweDI1MjYzODVhLCAweDJiOWVlOWRiLAorCTB4OGNiMzY5ZDksIDB4OTcyNTIyMmMsIDB4NDUzMDIzZGEsIDB4Yzc0Mzc1ZjksIDB4NWU0ZmE4MWQsIDB4MTgzMmMzYmYsCisJMHhkNGNiOGJiZiwgMHhiOWNiNDNmMywgMHg5MGUzY2Q3ZCwgMHg2MWRmYzE3MSwgMHhlYWM4ZWI5MiwgMHgzYjU3ZTljZCwKKwkweDJmN2Y3YzllLCAweDc0ZWMyYjllLCAweDNmZGU5MTlmLCAweGViZTllY2IxLCAweGQ4OWUxZjUxLCAweDdkYzc2MzljLAorCTB4NDkxOWRiMWYsIDB4MTk4ZTBiZjcsIDB4NzhlN2JmODIsIDB4YjRjMmY3YTksIDB4M2RlNGE5ZjcsIDB4YzFkZWZjZDcsCisJMHhmYmE0OWNmNiwgMHhiOWNiZGUwYiwgMHg5OGYyZDJlYywgMHg3NDY2MmU0ZSwgMHgwNjVjZmM0ZiwgMHhlOGU0ZmVlMywKKwkweDdlNjJiNmVmLCAweGM5YTM0NTYxLCAweDhlNjRmNzg2LCAweDdjNjNmZDIwLCAweGRmNGFiYjZiLCAweGRmYmJhMjAxLAorCTB4ZGIyM2FmODAsIDB4NzAzZWU4ZjMsIDB4NWViY2M3YzUsIDB4ZjBmOGFjZDEsIDB4YzNmYjcyZmUsIDB4YzJmZTUzZjcsCisJMHhmMTM3YjA0YywgMHgzZGI3Nzk2YSwgMHhlYmUxZmFiZCwgMHgzOGNlMGQ5MSwgMHgzYmYxY2IzZCwgMHhmMzM2NjcwMCwKKwkweGVmOTA4YjdjLCAweDc1YmViYzNhLCAweGZmZTM4YTRmLCAweGZkMmNmZGJmLCAweDA3N2JkMzEzLCAweGYwOTM0N2RmLAorCTB4NTdhYWU3OTYsIDB4NzIwYTJlODAsIDB4NzJmYmYwZmQsIDB4OWZiMjJjZjEsIDB4NTBmNjJlNGYsIDB4YjQzOTVhNzksCisJMHhiM2QyMjQ2YSwgMHgxNWVlODYyNSwgMHg1MWUzYjRiYywgMHg1MzczYmYxNSwgMHg3OWYwNmRiZCwgMHgzMDhmMWYzYywKKwkweDlmZjdkMGM3LCAweDkwYmM1Y2JlLCAweDE3Mjc5YTgyLCAweDhhM2Y4OWQ3LCAweDE1Zjg1NGI2LCAweGI1NWU1NDdjLAorCTB4ZmJkZThkYWQsIDB4MGI1ZTQ3NzIsIDB4ZDk3ZGViZGUsIDB4OWFjNWMzMWMsIDB4M2JlODIwYWIsIDB4M2RiZjEyOTksCisJMHhmYjk2NTdkZCwgMHgxY2Q3ZmNmYSwgMHg5ZmRkNzJjZiwgMHhjNTZlOWU2ZiwgMHgyMWZkYjU3ZCwgMHhlMjM4NjVhZSwKKwkweDg2YzYzYTM3LCAweGM4YTU2MDc2LCAweDg2YmEzOTJmLCAweDIzYzdkOWRiLCAweDE4YWJmZTYyLCAweGVkN2M3Y2YwLAorCTB4MGVmYzQ0OTQsIDB4YTliNmNjZDEsIDB4YzU3YjYzZDcsIDB4ZTc4NmM1NGUsIDB4NDljZWU3MDMsIDB4N2RjZjNjNTYsCisJMHhlMmI0ZWZhNiwgMHhkNmNmYWEzZCwgMHgzZTU3ZmJjOCwgMHgyMzdiYmJmYSwgMHhkODI5YjNjNiwgMHg5ZWFiNDQ3ZiwKKwkweDg0MjkzMjM5LCAweGZjMzJmNDRjLCAweGNiZWU5ZWE0LCAweGU0ZWQwMTdlLCAweDQ1MWYzOTNmLCAweDg5ZjgxM2ZlLAorCTB4OTk5MjdjYzMsIDB4NGJiZjcyMmYsIDB4OWM1N2Y5ZjcsIDB4N2Q4YTQ2ZmYsIDB4Y2JiNmY3YjcsIDB4MTdiNTA2ZjgsCisJMHg2M2Y2ZjAxNSwgMHhkMDk2Yjc2YiwgMHg2OGRlNGZkZiwgMHhiZmJhZTFiMCwgMHhmMWEwNjhkYywgMHg0ZGI5YzBlNywKKwkweGJlM2RlYjA3LCAweGIwODM5Zjk5LCAweDEzZThlNzhlLCAweDY3NzlmOTliLCAweGVmM2YzMzRlLCAweGI4MzNjZjU0LAorCTB4NjBkMmZkZjgsIDB4ZTgwYTJjYmEsIDB4ZWIyZGRmNDcsIDB4NzMyM2JiZTEsIDB4NzM3ZjdjNWMsIDB4N2VlMjdmNDAsCisJMHhiMWJmNDQyZiwgMHg5ZmVlOTlhYywgMHhhOTNlNmE1ZCwgMHhhYWZmN2U5NiwgMHg3NGRkMTc5MSwgMHgwOGJkMTNkYiwKKwkweDIzZmYyMmI4LCAweDk4YmE0YWRkLCAweGY1Yzc4NmIzLCAweDBiODNjZGVkLCAweDlkMjRmZTkxLCAweDU4MDNiZjY4LAorCTB4M2JmYzY0NmYsIDB4ZmEyOGJhYjIsIDB4YjMyNGY3ZWUsIDB4NjJmYTgwYzMsIDB4MThlNzdjNGEsIDB4MDc1ZjRmMDQsCisJMHg5MTZhYWY5NywgMHhlNGY3ODVjZSwgMHhlYzI5YmQ1OCwgMHgxNWRlYzQ3NywgMHhiYzFhNzhmMiwgMHg3YWJiZjc0YiwKKwkweGNmZjdmOGRiLCAweDU5MzE3ZGM0LCAweDQ3NGFiZTgyLCAweGRhMjkzZTdkLCAweGJhMDM4ZGZlLCAweGYyZmZhZTc0LAorCTB4ZjVkMDNkM2EsIDB4M2JmNjkxYTQsIDB4ZDc4MDlkYjIsIDB4N2FmMzVmZjUsIDB4MTY3YjdkOWUsIDB4N2RlZjNmZDQsCisJMHhlYzNkM2FmNiwgMHhmNjk1ZDI2ZiwgMHgyZmE4MDYyMSwgMHg3NWNkZjI1OSwgMHhjOWI5ZTA2MywgMHgzYmQ4M2FlMSwKKwkweDliMTM5ZTYwLCAweDdmNzFkMjkyLCAweGRiMDg3ZWQwLCAweDhlN2EyN2E3LCAweGVlMmI1OTYwLCAweGJhNTY5ZDhmLAorCTB4ZjRjYzJkMDYsIDB4YTc3YjdmZjcsIDB4MGU0YmUwZTUsIDB4YzBkM2JkN2YsIDB4YTczYmJiZTgsIDB4ODdmNWNiN2IsCisJMHhkNzBlOWQyZiwgMHhhMTA5ZGVhOSwgMHhkZDhjZTVlZCwgMHg1ZTdjZjk0NywgMHg3ZTA3NmY3ZSwgMHg3ODg5MTFkYywKKwkweDVkZDM4YWFmLCAweGQzYzdiY2I5LCAweGUzYzdiOWEwLCAweGU0ZDVmN2U0LCAweDdmNzkyYWZkLCAweGZkZmY3MmVhLAorCTB4NzI5N2I1YjMsIDB4MDBmZmVjZmYsIDB4NGZiMmYzNjksIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCisJMHg3ZGU1ZmYwMCwgMHg1NTU0NzQwYiwgMHg1NWI5ZTg5NiwgMHgyYTQ5M2ViNywgMHg1NDg0MjU0OSwgMHhhYTg0YTkyNSwKKwkweGMwOTAyYjdjLCAweDMxMGM3YzI1LCAweDA0MDNlNTQ4LCAweDZhMjg1ODg4LCAweGEyMDVhMGQ0LCAweDAxMTQ4MjgwLAorCTB4NTVmNDc0MWQsIDB4OWE3YzMwNjEsIDB4MTc5ZjhlZTksIDB4MTAyZDQ2MjIsIDB4ZGQ3ODcxOTUsIDB4ODY2ZGIxZDEsCisJMHgzMjIwNTM4ZiwgMHhiNDBlOWFmYywgMHhkMzhjZWI2MywgMHg2OGQxZDAxZCwgMHgzODMxMWI2MywgMHg2ZjM2MGNmNCwKKwkweDRkY2U3ZGVmLCAweDgwMmE1NmVhLCAweDZmN2JlN2JlLCAweGY2NWU5N2FkLCAweGVlNzM5ZjYxLCAweGZmYjNlY2Y5LAorCTB4NWY1YmRmNjcsIDB4YTVlYjJjMTksIDB4MGYyNGM2NjQsIDB4YTE1M2FiNjMsIDB4NjM1OTVhNzQsIDB4ZmY3Yjk0MTksCisJMHg2OGQyY2ZlOSwgMHhhYzgzOWFjNiwgMHhjMThmMmUzYiwgMHhkM2Y1YTM1ZiwgMHg3Y2NmNTA1MSwgMHgyZTUwNGJiYSwKKwkweGNkMWE0ODRiLCAweDEzOTk2MGM2LCAweDk5NmZkMDYyLCAweDEyYWViMTg5LCAweDZkM2IyNmU4LCAweDEyZDhjMmNjLAorCTB4MDE5ZGZlMDksIDB4MTljYWY5ZmYsIDB4OTU2YzY3NGIsIDB4NDRlZGZlMTUsIDB4ZjA4NzQyYjgsIDB4N2Y0NjY2ODMsCisJMHgzZjk4MDU5ZiwgMHgxZmQ4YzBkZiwgMHgzOTI1NzQ0ZiwgMHg5ZDlkOGNmNSwgMHhiYjBjMmUxZCwgMHhiYzY1ZmIxOCwKKwkweDAwOWNlNmNmLCAweDhlY2QxZGVkLCAweGJlYzYzNGE2LCAweGQ0YTRjMzdjLCAweGQwOWVmZjQzLCAweDYwZjkyN2RmLAorCTB4ZTY3YWE1ZmMsIDB4NmQ5Mjg0ZWYsIDB4MjRkOGNlMWYsIDB4YzNlYTJmMjgsIDB4NjFkZmEwNTMsIDB4OGRiNmYxNTcsCisJMHhhOWNiYmNmMCwgMHgzZjllMGM2MywgMHhmY2U3MGFlYiwgMHg4MmM2NzhmNSwgMHgzMmYyOTMyZSwgMHgzMjc3N2VhMywKKwkweDlmMWVlYjgwLCAweDlkZmIxYzNlLCAweGZlNWQ3ZDdkLCAweDkzNmViMDNkLCAweGVjMTI1OGNjLCAweDU5OGMwNjdiLAorCTB4MDAzMDc4MGUsIDB4MDdjMzJmYWMsIDB4YjQwZTM0NDIsIDB4YmVhMDkzMDcsIDB4MGU3NGY1YzUsIDB4MmYzMDdjMjMsCisJMHgwZGQ4Yzg5YiwgMHgwNmViZWY4YywgMHhmMTFmYmMzOSwgMHgxOTY0OTRjNSwgMHg2ZjliMzdmNywgMHgzMjgzZGIwZiwKKwkweDMzMzNhMzhjLCAweDk4YmJhZTAzLCAweDRkM2Y1ODc1LCAweDhlYjE5ODAwLCAweDdmNjBjMzRiLCAweDMyNjNjMDY2LAorCTB4MjRjNzgwOTYsIDB4YTFlYWE2YzYsIDB4ZTlhZmFjMTMsIDB4MDk5MGZhOTcsIDB4Nzg4NGQ3ZDYsIDB4ODVkMDcwMTQsCisJMHhkNzJjN2EyMywgMHhjNThiZjhjMywgMHhiYzhlY2JiYywgMHg1OGMxYzQ2YiwgMHhlYjA3ZmUxMCwgMHg1ZGU2MjI1OSwKKwkweDNkNzc3MWRjLCAweDkwOTJjYjllLCAweGMwYjc0Y2UxLCAweDdmZmEyNWY1LCAweDcyYzc5ZDBmLCAweGYyZmVlZmQxLAorCTB4ZTI5YzQ2YWQsIDB4N2VkYTFkZmUsIDB4YWZhNmQ5Y2IsIDB4NTJmY2YwZjUsIDB4ZmRjNDZkZDYsIDB4NmE4Y2ViMmUsCisJMHgwY2Y5YThlZiwgMHg5NzdjYmJkNywgMHg5OWRlYmViNiwgMHhjMjc0ODY5OCwgMHg5N2IxYjJjNiwgMHhlNzRkNTRmNCwKKwkweDk5ZjQ0OGJkLCAweGNhNzQ2ZmFhLCAweDY2ZTE5ZmI4LCAweDM3MTMwNGM1LCAweGY0NDc5ZjNkLCAweGIwMGNkZWMyLAorCTB4NjNhYzdlYzgsIDB4OGI0ZmQxMTgsIDB4YjFlNzRmNGIsIDB4OWNjNDk3NjQsIDB4N2ViYjE4ZTMsIDB4NDI3MzE2NTcsCisJMHg2MWFlZmQ1MywgMHhjODVkMjY1NCwgMHg1ZmNmZmFhMCwgMHg1N2RlMzYzOSwgMHhkNzVlNzAzMiwgMHhjNmFiNmFiZiwKKwkweDZhZmY1ZGY1LCAweDNhZWE5NTExLCAweDRlMWQwNDlhLCAweDg2NzQ5N2Q1LCAweDJjZTcxZDYxLCAweDliODAwZWIwLAorCTB4ODE2MmMwOGUsIDB4ZDY2ZTlhN2UsIDB4OTllMTE4ODcsIDB4NTdiZmIxOTksIDB4NTk2YmM3MmMsIDB4NDI0ZmE1ZGYsCisJMHhmZDhhMGU1OCwgMHgzYTI0OTc0YSwgMHgxZjNjNjQ4NCwgMHg0MzNkNjFlZiwgMHgwMzFlNjI3YSwgMHg3OTk5M2JiNSwKKwkweGEwNWNhNWNkLCAweDM5OGViYjFiLCAweDI0ZGZlMDYzLCAweDE5Y2UyZmNlLCAweDgxZWU5Y2NmLCAweGZjNTgzOTc2LAorCTB4ODc1ODRhYjMsIDB4MDk0MWFlNjEsIDB4NWM3MzdiNDEsIDB4MzNlNDM2ZDIsIDB4ZTU3NGY0MTYsIDB4ZTIwZDczYzMsCisJMHg0ZTM4YWViOSwgMHg1NGVlMDkzNywgMHgxZDJhZjNjZCwgMHhhZGZhMmFkYywgMHgxODc2OWE0YiwgMHhiM2MxYjJlOSwKKwkweDUxMjFlODg4LCAweGM3YWNkNGM5LCAweDQwNmE1ZmE0LCAweDY3ZDViOWZhLCAweDYyM2JhNGY4LCAweDU4NWZhMjFjLAorCTB4Mjk1ZTBkYzcsIDB4NzM3OGZjODQsIDB4NTBkZGI2ODMsIDB4NDRhZDc1ZjksIDB4OGU0N2Q0MjUsIDB4ZmJmNmQ1ZTcsCisJMHhkMDAzZDIyOSwgMHg3MTdlMTAzYiwgMHg5YzBjM2QyNCwgMHhjM2EzYzU4MywgMHgxMjI0ZjA3MywgMHhiOWNjY2JiZCwKKwkweDViZTAxMmI5LCAweGVlMTgxYjBlLCAweGY3Y2YxNGRmLCAweDk3MzEwZTc5LCAweDBmODBmZDg2LCAweDg4NzVlMjYwLAorCTB4MmU0ZmE4MTcsIDB4YzUzN2UyZDcsIDB4YjBlN2M1YTMsIDB4ODY3ZTJkM2EsIDB4YjdmYmI1N2IsIDB4ZGE2YWU0MzUsCisJMHgzNTIzN2MzMywgMHhjYjhiNTllZCwgMHhiZmI2NzAzNCwgMHhjNDdmZDM0MiwgMHhlYzBkNmFlYSwgMHhmNGQ0Y2UwYSwKKwkweGEzN2Y1YmNmLCAweGJkNjgyZTA2LCAweGE4YmZkMzVkLCAweGJkYTY4MTdkLCAweGE2OWY3NDM4LCAweDI2OGVkNDdkLAorCTB4ZjlkYTVjMGQsIDB4OThmZmE2ODgsIDB4ZGE2YjhmNWQsIDB4NmEzNzg2YzcsIDB4N2UxZGM3ZGEsIDB4ZTg0ZjAzNGEsCisJMHg3ZmU5YTJkYSwgMHgzNGRiMDdjZCwgMHg1ZmJhOTNlZCwgMHhkYjVmYjRkMywgMHg5ZTA2ODZmMywgMHhkMzViYmJkYywKKwkweDAzODVjYTdmLCAweDFkOGFiODFhLCAweDMxYWZmNGQzLCAweDRmMDM1NmZmLCAweGE2YWJmZWI1LCAweGM3ZmI3NGZmLAorCTB4Y2UxOWY2OWEsIDB4NjdkYTZhM2YsIDB4ZDJkMWJmYjksIDB4OTM5NzNjNmIsIDB4YTVmZjJiZDcsIDB4OTM1OWVlNzksCisJMHg1ZjUwZGZlZiwgMHhkZDk1NGIzNCwgMHhlYmY0ODY0MSwgMHgzNWJhM2UyNCwgMHgwMTg0YTc0ZCwgMHg5NzJhODNmZSwKKwkweDFjOWUxZDA0LCAweGMxMzkyNTYxLCAweGI3OGU1OWYyLCAweDMyYjBlOTE0LCAweDZlN2M3YzhjLCAweGUwZjI0NDk3LAorCTB4MjhiZDI4YWIsIDB4OTFlYmQxZmYsIDB4NGFmZDlkYTAsIDB4MjI3NjVlNTIsIDB4YzQ1ZDQxZGQsIDB4MzMxZTI5ZmMsCisJMHgzOWQ2MjM5MywgMHg4MWFhY2VhYywgMHg5YWVkN2I4NywgMHhhNzA2YjZmZSwgMHhlN2MzM2RhNiwgMHgyZDY3YjRkNiwKKwkweGI2NzAzNDU2LCAweDdmZDM1Y2JmLCAweDA2OGY2YWM0LCAweDM0ZWIwNTc2LCAweDdiZDZmM2ZkLCAweDZiNDE3MDM1LAorCTB4NTE3ZmE2ODMsIDB4NWVkMzRmYmIsIDB4NjlhYzVhMWMsIDB4YWZjM2I1MWYsIDB4NTczYjRiODEsIDB4ZDk4ZmZhNmIsCisJMHg4ZmI0ZDQxNSwgMHhiNGQ3YWYwZCwgMHhhYWRjM2I4ZiwgMHhiNTc0Mjc4MSwgMHhmMzVmZmE2YiwgMHgzZWQzNDg0MSwKKwkweGE2ODc3YmE5LCAweDRlOWVkYWZkLCAweDc3YjkzYzBkLCAweDk0ZmZhNjk3LCAweDVjMGQ2MTBiLCAweGZhNjg4ZWM1LAorCTB4NmE0Zjk4ZDcsIDB4MGZkNmE5ZTAsIDB4ZGJhN2ZkMzUsIDB4NjdkYTZiNGYsIDB4YjRkNzNmMzgsIDB4MmNkMDc2YWIsCisJMHg3YWRhZDdmNywgMHhhZjVkMTc2MSwgMHg3Y2YzNTlmYywgMHg5MGMzZGFiMCwgMHg0ODZmODIzZSwgMHhkNjEzYjM0YSwKKwkweDNmZTEwMmViLCAweDc3N2NlNDljLCAweDI4ZWQxZTljLCAweDhjMTQxODJmLCAweDQxYWQyOTAxLCAweDQyMGM5MmZkLAorCTB4NDgwYWU5MGMsIDB4ZTJhNjM1OGMsIDB4MjBhYzQwMjgsIDB4YzE1NTQ5YjcsIDB4NGY2OGM5ZjMsIDB4NzNhYTkwMDAsCisJMHgxZmEwZmNiOSwgMHhlYjVhZDgxMywgMHgxYmIyNjZhNywgMHhkZjQwOTcxYywgMHgyOWJmYzI1ZCwgMHhhMDk0NGI4MywKKwkweDg1ZWJhYTlmLCAweDRlYTE2NmY5LCAweDcyNmYzYTAyLCAweDU4MmUzY2Y5LCAweGFmOWQ3ZGNmLCAweDY4NjJjYjRmLAorCTB4NzA1YjA0MjcsIDB4OTMwN2EwMWQsIDB4OWU2ZjQxYmIsIDB4Nzk3NzYzODgsIDB4Mzc4ZjA2NGIsIDB4ODk3ODBjYzMsCisJMHg1YzQ4ZWY5OCwgMHgzMmNjYTNhYiwgMHhjYzMzZmNmNCwgMHhmZjdmYTk2NywgMHhhZTNlMDZiOCwgMHg4YTZiZmIwNCwKKwkweGEwYTdmZjE4LCAweGZiYjA2NWVlLCAweDM3YzAwMzVhLCAweDE1M2Q4YzA1LCAweDRjZmMxMmIwLCAweDViNzA0ZWMwLAorCTB4N2I2NTQ5YzAsIDB4OTZlNTRkYzAsIDB4MWRlZDQyODAsIDB4NWY4MjcyODEsIDB4MGUwODc4MDgsIDB4ZGNhOGVhMDUsCisJMHhmZDUyZjAxNiwgMHhjMTAzNDBmNiwgMHg1NDdjMDRhZiwgMHhhNjJjMDhlZSwgMHg5ZjgwYjVmMiwgMHg1NjA2NzdkYSwKKwkweDQwZjNmYzEzLCAweGMwY2VjYTkwLCAweDIzN2ZhYTdhLCAweDliZjA0YWQwLCAweGRmODI3NjgxLCAweGRjYTg4NDBhLAorCTB4ZTU0MWQ4MTUsIDB4YjUyNzQwZWUsIDB4MjJlYzBkZWYsIDB4OTg0MGVkZjgsIDB4MzBlMDcwZTAsIDB4NWQwMjA3YzEsCisJMHg3YzBjMWYwNCwgMHg0MGExZjA0MCwgMHgwMzg3OTUzNywgMHgwZDFlNTQzZCwgMHhmMWZiNTJmNCwgMHgwNzgyMDVjMCwKKwkweDU3NmI0YmNlLCAweDJlNTc2MTMzLCAweGQyYzA3NDEyLCAweDJmNzkzZGI4LCAweDg1ZjY1MjNmLCAweGJiNDYyZDhlLAorCTB4NDNhMDkxNzcsIDB4ODc5ODM1NDMsIDB4Y2M4Njc3NDAsIDB4MmVjZDZkYzIsIDB4MTNhMDZhM2MsIDB4NzFjOWQxMzcsCisJMHg5NmFmMmZiNCwgMHg0MDcwZDA0ZSwgMHgzMzU2MGQ3YSwgMHg1YTliZDIzNywgMHhjOWU5NTRiNiwgMHg5MGFlMGNmZSwKKwkweGJiNzMyZjQyLCAweDMzNmZlYjg4LCAweGI1MzdmNTUzLCAweDg1MjgzZTM3LCAweDA3OWI5ZWQwLCAweGY4MTFiMjc2LAorCTB4OWY2MTIzZTYsIDB4ZTVjNzE0N2MsIDB4YzFiZjM5ZjUsIDB4YTM1Zjc2OGQsIDB4NjZjMGFmMTQsIDB4YjI3N2ZlMDEsCisJMHg4YzJmZTAzYiwgMHg1ZWQ3N2ZhNCwgMHg5ZmI0NTZkMywgMHhjMjM1ZjVkNCwgMHhlNzE4M2EzOCwgMHg1YTJlZWNiZiwKKwkweDZjM2IyMzU3LCAweGJkNDBmNWMwLCAweDcyZmMwZjQ3LCAweGUyZGJlNmM2LCAweDJmYmViYTAyLCAweDIyMzQxNzViLAorCTB4ODU0MjU5MTMsIDB4OGNjNjQ0ZGUsIDB4NDhmM2RmNzYsIDB4ZjdmY2U3ZTcsIDB4MTdjMWMyMWMsIDB4OWM0Mjk1NTksCisJMHg3ODUzN2FlNywgMHg3ZjMwYWRmOCwgMHhiMmJkMTFlZiwgMHg1ZTM0MzljZCwgMHgwMGNlYjc5NiwgMHhmNjk5N2RlMSwKKwkweGEwNzczZmI3LCAweDE3Zjc1ZjFkLCAweGUxY2YwZmJkLCAweDIxYjEyMTg0LCAweGU5ZGQ3NDA0LCAweDNhY2Y4ODkyLAorCTB4ZDk0ZDNhNWQsIDB4MDJmZGY3NjYsIDB4YTI2ZGY5ZDcsIDB4YTAxZDRlZmYsIDB4NTZlYmRiZjIsIDB4YjYxMmIyYmMsCisJMHgyMGEyYjhkNCwgMHhmMDU1ZWQxOSwgMHg1ZjY4MGMwZiwgMHgwMzRlNjFjZiwgMHg5ODliODdjYSwgMHhlYTFjNWRlNywKKwkweGY4MjNlNjY2LCAweDUyYTQxNjU2LCAweGUxNzZmOWI2LCAweDIxNjM2ZWJlLCAweGE2MTU3ZDgyLCAweDhhZmI1ODljLAorCTB4MzgzYmQ3NWUsIDB4NzUyYzcwZDgsIDB4ZGQ5MGYyOWEsIDB4ZmJjNzAwNzcsIDB4ZWI0M2QxMzYsIDB4N2E2OTMxM2EsCisJMHg1ZDRiZWUyMSwgMHg0OWMzMzk5NywgMHhkZWIzNjZmZCwgMHhkZjdkNzAxNywgMHg1M2ZhZmJlZSwgMHg5ZDMwNmYyOSwKKwkweDYxZjQ4OGZjLCAweDNmYjA2OTgxLCAweDM3NzljMjMzLCAweDM4ZTBlZjAzLCAweDIxNGIwZmNkLCAweDNlOTU3M2E0LAorCTB4YTc0Y2MxMWEsIDB4N2E4NTFmZjEsIDB4ODA1ZTkyMjksIDB4NGI3ZmQwNGUsIDB4OTM5OWNkZWIsIDB4NGRkMmY0NDgsCisJMHgzZTkyNmZmMiwgMHhmYTdiMDQ2OCwgMHgyODU0MmU4NCwgMHg4YzRlODllOSwgMHg1MTczYWMxMiwgMHhlZTQ5ZDAxYSwKKwkweGMwZjBmNGQwLCAweGU0MjMyODdhLCAweDE3ZDlkMDIwLCAweGZlOWZkZTM4LCAweGUyMzcxYWUxLCAweDkzZGJmOTZkLAorCTB4NjZiNzg4OWMsIDB4ZDAwNzljMWQsIDB4OWVhOGYwNzMsIDB4NDQyNjA0ZWMsIDB4ZDJkYWZlYmIsIDB4YjIwN2Y5MTAsCisJMHhjNTI5Y2NhMiwgMHg3MTcyZTM3MywgMHg3ZWFkOWViZiwgMHg0ZGRjODYzZCwgMHg3NGY0ZTVjOCwgMHgwYmE4NmVjMiwKKwkweGVmOWNiOGQxLCAweDJlN2Q3NmQ1LCAweDJlN2Q0NzNmLCAweDE1YTZkZjNmLCAweGMzZDUyZDlmLCAweGY4MWM0ZmZhLAorCTB4OGQyY2U4ZGMsIDB4M2ZkNThmYjEsIDB4ODIzZjI4NzksIDB4M2FlZjk3YWUsIDB4N2U4M2NkM2QsIDB4YjkyZWViMTcsCisJMHhiZWEwNzEzMSwgMHhkMmFiY2M1MCwgMHhlODk4ZGU5MSwgMHg1Yzg5NmFkYiwgMHhjNzVkM2Y1NywgMHhhNzVkMjJlNywKKwkweDExZTc1ZDAwLCAweDc2OGE3ZjVkLCAweDMzOTM2Y2Y5LCAweGJiMjg1NmY5LCAweDI4NjEzNTAxLCAweGM5NWEyZjdkLAorCTB4MTRjMDVjN2YsIDB4MmYzMjE3MmEsIDB4MGM4MDhiOTUsIDB4YzFiZDhlOTAsIDB4Zjc4ODhkMjcsIDB4ZDUyNzU4ZmIsCisJMHg3NzdlNTAzZiwgMHhiZGY1ZDIzYSwgMHhkOWY5MWYzYSwgMHhkNTE3NTk0YiwgMHhiNWJkNjcyZiwgMHhhZjM3YjQ3OCwKKwkweDFkYWVmMzVmLCAweGViNTM3ZDU2LCAweDQ0OTE1MzkzLCAweDdmY2QwYzZmLCAweGRiMzljYjE3LCAweDRlODM0ZmE1LAorCTB4NWNlYzkzZTIsIDB4ZTRiNzQ3YzAsIDB4ZTYxMzIyN2YsIDB4ZDU2NzdkYmYsIDB4M2Y1MDU5MTMsIDB4ODVjZmNmNWIsCisJMHhhMmU3ZTMxZCwgMHg3ZGU4OTFjYSwgMHhlMDE0NWYwMywgMHg3OGE2ZGZmMywgMHhhNGZhNWY2OCwgMHgzNDVmMGQzYSwKKwkweDEyM2NjZTNlLCAweGNmYmJkMzhjLCAweDhhZTZkYTE0LCAweGZiZjI5M2UwLCAweGYyODU5MGZmLCAweDEzYmRlZTRjLAorCTB4ZGJmOTdiY2YsIDB4ZWYzYzU0YTYsIDB4ZmJkNzE4ZmIsIDB4YWY4ZDQ3OTIsIDB4MTE5ZWZhYTgsIDB4ZTJjZmRmYmQsCisJMHg4NWY3ZWMxNSwgMHhiMjJmZWZhMCwgMHgxN2Y3ZDExOSwgMHg2NThhMzgxMiwgMHhjYjI4NzYwMywgMHhmMmNiZDlmMSwKKwkweDcyZjZmNDA2LCAweDg4ZDFjZWRkLCAweDk1ZWJkMDI3LCAweDdkZjcwZTc4LCAweGQ2MzJkOWRjLCAweDk0MjBmYTg1LAorCTB4ZTE4ODc2ODMsIDB4ZWNkMjkzMzUsIDB4NzYxN2U4ZDIsIDB4OGQ4NTAxMjksIDB4N2YzZTIxOWYsIDB4MTk4ZWUzOGEsCisJMHhmY2E5MmViYywgMHhlZWQxOWZkMCwgMHhkMDU5MTkzMCwgMHhjZTdjNDY1YywgMHg2NzdmMjIyNiwgMHg5YWJmODkxYSwKKwkweDM4NzliNTExLCAweGI3ZTlkNzhmLCAweDg0ZmYxZTBjLCAweGVmZTFlZjU4LCAweDg0MWQzZmI4LCAweGM1MmNiY2ZkLAorCTB4MmZlYjg3OWEsIDB4M2NjMGZjNTMsIDB4MTlkMjQ3MjQsIDB4MmU0NzczY2QsIDB4M2U3NTYzZTcsIDB4YTA3NmU5NjYsCisJMHhjMTM0N2U5ZCwgMHg4ZjllM2I3NywgMHhmZDUyNDcxYSwgMHhjZmFlYzNjOCwgMHg2NjdjZjFmMiwgMHhlNTUwNmM1NywKKwkweGFlYzc4ZDMzLCAweDg0ZTk3MmUzLCAweGY4NDQxOWMxLCAweDAxNGI5NTQ0LCAweDZmMmZkNjA5LCAweGE3ZmYyODZmLAorCTB4MzcxZDcwMGYsIDB4OGM2MTJkOTgsIDB4YzM0YWIwNzcsIDB4MzVmZjdlZDksIDB4ZGYxZjQwNzcsIDB4Y2FlM2VhYTAsCisJMHgxYThlZjhhOCwgMHgwMThhNjFmNywgMHgzZWNjNTdkNywgMHhmMTQxZjE1MiwgMHgwZTRlNTUxZCwgMHhiMWIwYmZkMiwKKwkweDg4OWZjNDJlLCAweDc5YzdmNTk3LCAweGNlM2ZiOWZlLCAweDhkNzljM2EzLCAweGU2MzI4ZTQyLCAweGY4MjM3Yjc3LAorCTB4YWUwMGQ2ZDQsIDB4MzA3ZmM2OGIsIDB4ZmY4ZDdjYjMsIDB4ZDljMGQ1NjAsIDB4ZmZhNmJiN2UsIDB4NGQ0ZWQ1ODgsCisJMHhkNmU4MmJiYiwgMHg1N2FkZTdiNCwgMHg2YjQxNzAzNCwgMHg1MTdmYTZiOSwgMHgxNzAzNDdiYiwgMHhmZDM0ZWE4NywKKwkweDZhZjBlZDQ3LCAweDA2Y2VkMmUwLCAweGJiMzFmZjRkLCAweGIxZjY5YTdjLCAweGY2OWFjNWUxLCAweDFhZmQ4NzcxLAorCTB4NmFkNzQyNzgsIDB4M2U2YmZmNGQsIDB4MjdkYTZhMDgsIDB4YjRkN2FmNzUsIDB4YWFkM2RiNWYsIDB4YjZmNzI3ODEsCisJMHhiOTRmZmE2YiwgMHg1N2I0ZDIxMCwgMHhiNGQ1YmZiMSwgMHhkNzVmOThkNywgMHhmMWM2MmZjMCwgMHhlYjU0ZTc3OCwKKwkweDliOWU2ODNmLCAweDgxYWZkZjZlLCAweGYxZTc4ODVmLCAweDIzY2UxOTlhLCAweGY5YzVlN2RhLCAweDI3OGI2ZjA2LAorCTB4M2VlNTk4N2UsIDB4ZmZkZjY5YTksIDB4OGRjZGM4YzgsIDB4NDdhMTJmYzAsIDB4YjY3ZmU0NzQsIDB4YzUzZDcxZDUsCisJMHgxZDM5YWExYSwgMHhkN2JlZjFjNCwgMHhlNjZhMWYyYiwgMHhiYWY3ZDFjYiwgMHg3YTlkOGU5MCwgMHg3NWYyMjY2YiwKKwkweDAzOWNmOTdlLCAweGQwYWM3NjQwLCAweGM1MWFhMmIzLCAweGM5ZWViYjlkLCAweGY0OGU1ODAzLCAweDZjOGQ1ZWJlLAorCTB4ZjI3MGQyNTMsIDB4N2RhMzk2MDAsIDB4MTkwMzU3NWYsIDB4Y2E3MTY1MzMsIDB4Zjk5NjU4M2IsIDB4NzBkOGQ2YzcsCisJMHhiY2U3YWI4OSwgMHhlMGM0ZTU4MywgMHhiMzk0MWE4YSwgMHhiMTdlMjY2MCwgMHgzZTdkZDYwOCwgMHg4NDZkOTIzOCwKKwkweGFhNjUyNTc1LCAweGQxMGY1ZTcxLCAweDFkMGNhYWVkLCAweGRiYWFmOWYxLCAweDRiMzcxNDJjLCAweGEzMjJkNmJmLAorCTB4ZTgxY2RmM2UsIDB4ZWMxMDc5MWEsIDB4ZDNhN2Y0ZGMsIDB4NjlkYzYyZDcsIDB4YTFmOWQ4M2QsIDB4YzAxN2IwMjIsCisJMHg1OWYyYzdlZSwgMHhlMDQzZWJiMCwgMHhiYjA0NmQxYywgMHg2MDRkY2IxZiwgMHg3M2ZkNjNmNywgMHg5YzIzZjc2MCwKKwkweDdhZDk3NGZlLCAweGM5ZDU2ZTdjLCAweDYxNzJlYTdiLCAweGNhMGYxMWZjLCAweGQ3NTMzNDU2LCAweDBlMmI3NTM5LAorCTB4MGZlYzdhYzAsIDB4NGIyOGFkMWEsIDB4ZTI2N2FlOGMsIDB4ZWM4ZWIwOWMsIDB4MGE4ZWIwNjUsIDB4NTEwNzhiNDIsCisJMHgzMDUyZWNmZCwgMHgxYzM5MzIxYywgMHgyYmVjZmQwNywgMHgxZGI4MWE3NCwgMHgyZWIwNDVmZiwgMHg5N2NmOGI1OCwKKwkweGFlZGVlOTNlLCAweGI2ZjlmNjMwLCAweDhhMTkzN2IzLCAweDVkNzk5ZjYxLCAweDAxNGQ2ZGI3LCAweGU2Nzk5NzM4LAorCTB4ZjFkM2JlMDIsIDB4OTNmYzYwMmMsIDB4MDljZDhmNzksIDB4OTc4NjBjOTYsIDB4NDhmZjdhMTQsIDB4MmNlZTQ5NzIsCisJMHgxNmI1M2U0NiwgMHhlYjgxOTQ3ZCwgMHg4NWZkNTBkYSwgMHgzY2UyYjNhMiwgMHgwODM5Y2M4ZiwgMHg3ODdlN2VlYiwKKwkweDIzZTc1OGJjLCAweGFmZjJhYTczLCAweDc5Y2Y1YzY2LCAweGVmNTBlZjk0LCAweDQ3MjE4Y2VmLCAweGZmZTg1M2ZlLAorCTB4MmY1Yzc5OTMsIDB4ZTUxNTlmYzMsIDB4MDg5MzhkOTMsIDB4OTQ5ZDgxYjMsIDB4ZjM3NmYyMGMsIDB4ZDFhN2Q1YTQsCisJMHg0MWFkOTBhNywgMHhiYjIzZTUwOSwgMHgxNDRmY2YwOCwgMHg3ODIzYzgyOCwgMHgxZTQ0ZmM0YSwgMHg1Mzc5NDdiMiwKKwkweGU3MzNlNDU0LCAweDFmMzY3OGMxLCAweGYxOTE0ZWQ4LCAweDc4NWFjNWIxLCAweDE5ZTc5YzMzLCAweDBjN2FjMGMzLAorCTB4MzI4MmU5NzcsIDB4OTJmMGMxZWMsIDB4OWU2MDUxNTcsIDB4NWZiMDc5OGUsIDB4YjUxYjM3ODAsIDB4OGU5MTY1ZmUsCisJMHg5ZjcxN2Q5MSwgMHgzNzhiZWViYSwgMHhkZGE3NjgyOSwgMHhmMGY1Yzc5NywgMHhlY2JiODA5NiwgMHg3ZmZhMDMxMywKKwkweDQwMjdkOTRhLCAweGZkOGI5OTQ3LCAweGFiZTQwZjkyLCAweDA0YWJkMWFkLCAweGQyZTE5ZmExLCAweDIyMzdlZmRmLAorCTB4M2FjNWRmNjEsIDB4ZmQ2MzlmNTEsIDB4MjdiYjA4OWEsIDB4Yjg2YjhjNDcsIDB4MTliYzI3YTQsIDB4NmE0YWJkOWEsCisJMHhiZDA2ZmNjNCwgMHg2MThjZWZlNCwgMHhjOWU2OTU3NywgMHg0NjY2YjlmYywgMHgxZTc3ODZlZCwgMHg1ZjMwOWM5NiwKKwkweGJhNDg2MzY2LCAweDRiZjFjNjg3LCAweGMyZGJkNDBhLCAweGIxYWIzZWJjLCAweGYwMDg1YTUzLCAweDNhNGU3OTFkLAorCTB4YWM5Yzc1MDcsIDB4MDhmZWIwYzUsIDB4YTBlNWQ5M2MsIDB4ZWRlNzg1NjQsIDB4YzQyNTA2OGYsIDB4NTVlYWRkODMsCisJMHhkYWUyMjI1OCwgMHg1MmJkZmM0YiwgMHhmNTdkYjRmMCwgMHg4NjRmYjJjNCwgMHg4YWJkYmFlMSwgMHhhNTliZTcxNywKKwkweGNhZGY5YmYyLCAweDJiMWYzZDcwLCAweGJkNDJhOWJmLCAweGMzM2QxYmY2LCAweDljNmY4Y2ZiLCAweDhjNWE3MjRhLAorCTB4YTlhNWE4N2QsIDB4OTczY2NmNWIsIDB4NzI5MjY3ZjEsIDB4OWU5M2YxMWUsIDB4MmNlMmRkYmMsIDB4ZjE3ZGZlMDAsCisJMHhkNmMzNGIzNiwgMHg0Nzc2NzQxOCwgMHg3NWIzYTcxZSwgMHhlMmRlYWE5OSwgMHg3M2Q3NDllYiwgMHhlYWZhYTkzYywKKwkweDFmYTcyYjFiLCAweDRjYWQ2ZTU1LCAweGNlM2FiMGUxLCAweDI0ZjFlY2NhLCAweDhmNWE4NjM3LCAweGY5OGUzZGFkLAorCTB4MTliYmQ2MjIsIDB4ZmRlMmIxZTYsIDB4YWMyYjc3Y2MsIDB4MjFmMDM3ODgsIDB4Y2M5ZjM0YmMsIDB4ZTdkNmU5ZTUsCisJMHg0NjM3ZTRkZCwgMHgzZTIwY2ZkMywgMHg1YzliZDEwMCwgMHgxZGQ5NzQ4NiwgMHgzMWJhMDY2YSwgMHg2ODJhMzNjZCwKKwkweDViZmVkYTJmLCAweDI0NzI4NDhiLCAweDI4NGFiNTkzLCAweGI1ZDk2ZDQ3LCAweGU3ZDQ2NTg3LCAweDFiZDhhZmIyLAorCTB4MTJiZThlYzMsIDB4YTllN2E4M2YsIDB4Y2Y4MzI1ZGEsIDB4MmFiYmY5Y2YsIDB4MGMwZDQzYjIsIDB4ZTVjOWI2ZTksCisJMHhhOWY5ZTFiNCwgMHg2NDc0ZGE3NCwgMHhlMjJmYWE3OCwgMHgzYTBiZDczYywgMHg3YWFkNjcyZSwgMHhkNjBhZDNlNCwKKwkweGViMjU2NTQ5LCAweGQ2M2FmMmEyLCAweDU5ODdhNTRiLCAweDk5YWIyYzY1LCAweGYzMmQ2NTQyLCAweGY5OGQzOTUyLAorCTB4YWQ2M2FjYTksIDB4OWQ2NGNlNTQsIDB4MmViM2Q2NTQsIDB4YTNiZmMxMmEsIDB4ZTRhY2NiZDIsIDB4NzYwOGRlODcsCisJMHg5OTczOTYwYywgMHg5ODViY2E5NywgMHg0ODJkY2E5ZiwgMHhmZWYwMTNkZiwgMHhkYmUwOTVhMSwgMHhiYjk1Mjc1OSwKKwkweDQ1OWRmZjgwLCAweDUzMzExZjE4LCAweDM5ZTQxN2I5LCAweDNjODM2Zjk2LCAweGYyMGMzMmM3LCAweGY4YzI2OWRjLAorCTB4ODNjYTliODgsIDB4NDNjYTg1MDEsIDB4MGYyYTcyODEsIDB4ZWZkNDNjMDcsIDB4Y2E4ZWEwNjgsIDB4OTUyZjAxZTMsCisJMHg1NDBkMDIyNywgMHhkNDdjMDU3NiwgMHgzMTYwNTRlZiwgMHhmYzA1ZWY5NSwgMHg1ODFmYmU1NCwgMHg4MTA3ZTU0ZCwKKwkweDEyZmY5NTIwLCAweDkxNjU0ZjU4LCAweGUyMGFlNDExLCAweDE2M2RkZGRiLCAweDhmOWM5YWZkLCAweGU4MjcxZThkLAorCTB4ODRmMzRmYTMsIDB4ZmRkMWViZmYsIDB4NzhmMWUyZjcsIDB4ODNiYTNhOGUsIDB4OTRhZWQ1YjEsIDB4NmU2ZDFlOTAsCisJMHhlNTA0Mjc5ZCwgMHg3NDkzNzc0NiwgMHg0ZWViOTQzNywgMHg2NGQ2M2I3MCwgMHhkOTNiMjQ0YiwgMHg3MjRhYmVkNiwKKwkweGE0YmJiOGMyLCAweDljMDI3ZDZlLCAweDBmYmNkZWVkLCAweDRmNDE5OGU3LCAweDZiNjVlZDU0LCAweDdmODQxNDEzLAorCTB4ZTgxOWE0ZmYsIDB4ZGZjMWFiNzAsIDB4N2ZkYTE1YmIsIDB4Y2ViZmQyZjUsIDB4YWVjZTgzMzEsIDB4YzdmNTNjNDgsCisJMHhlZDRjMzhkNywgMHg2NmIyMGU5MywgMHhmMjA3YzAyYiwgMHgyNjk5M2Y0ZSwgMHgxMGEwNzVmMSwgMHhjN2QyZmUzZSwKKwkweGUzZTRkNjczLCAweDc5MWNiOTNhLCAweDM2OGUwNWQ1LCAweDViMGYxOWZhLCAweGRiMThjZmM4LCAweDBlYWM2NjdlLAorCTB4MmRhYjQ5ZTAsIDB4NDcxZmU4NjUsIDB4ZjViOGEzZjQsIDB4ZGJhMmZkNTAsIDB4NTYzYWU3ZDUsIDB4MWUyMzM3YTQsCisJMHhlZTBhN2RkNiwgMHg2NWU1MTM4OSwgMHhjZjhjNThmNywgMHhiYmFiOGU0NSwgMHhmZTk5ZjliYSwgMHhmNjQ3ZjMzMiwKKwkweDVlMzMyZTkzLCAweDU0ZTc5MTUxLCAweDc0MDNmZmRlLCAweDg2ZGY0ZDFlLCAweGFlYmYxZjRiLCAweDM1OThmOGEzLAorCTB4ZjZmYWY1MTUsIDB4N2E3NzJlMTQsIDB4ZGI0M2UzYjMsIDB4NTNkYmRkNjAsIDB4OWYyMWJjMDUsIDB4NjEwZWI1ZjYsCisJMHg4ZGJhZDdkOCwgMHg2ZmM3NjRiOSwgMHgxZDM2ZjM4ZiwgMHhkMWJmZjZjMSwgMHg2OWEwZGIyOSwgMHg2MzZmYmM3YiwKKwkweDE0ZjljMTMxLCAweGVhOTc1OWFmLCAweGNhNWVhMzc3LCAweGIxZmFlMDQ5LCAweDljNDhmMWNkLCAweGZmZmY4MjMzLAorCTB4ZTZlZWU0MjIsIDB4YWRhZWJlY2EsIDB4ZDdhZDRmZTgsIDB4NmU3ODAyYjEsIDB4MWIwNWZhZGIsIDB4NGJjZTMwZGMsCisJMHgwMjJlYzA5YiwgMHhjMmYyNzkzOCwgMHg5ZWQwMDUwZCwgMHg1MTM3NDFiYiwgMHhhZTFlNjQyZiwgMHgwYjRkYTVlMywKKwkweGUxMjhkOTVmLCAweDBiNTMyM2I4LCAweDIxM2NkYzYxLCAweDc1ODY3MzNmLCAweDc0MDk1ZDhmLCAweGM2ZDQ2NmRlLAorCTB4NjNmNWZhMTUsIDB4ODU5N2U3M2UsIDB4ZDAxOWNjMzAsIDB4NWUyMjM5YmYsIDB4MWFjMGQ1YjEsIDB4NDE2NmY1MjIsCisJMHgzNWI3OTczZSwgMHg0YzM0YmM0NSwgMHhkMzNjZjFlMSwgMHhlM2QwZjg4OCwgMHgxMWFhZmZiMCwgMHhiZTkzZmUzYywKKwkweDlmZjE0Y2Q2LCAweDllN2ZjNzc0LCAweGU5ZWQwZTljLCAweDRkMDUzYTFkLCAweDc0YjZkOTVhLCAweDllZmQwMThkLAorCTB4ZjIyNzU4ZGIsIDB4M2Y4OTU2ZTMsIDB4NzZlNmNjMWYsIDB4YjkyYzE4MzIsIDB4MWVmYzIyNzMsIDB4ZjJjYTM3YjAsCisJMHhmNmE3ZTIyMywgMHg3MTg0YTA4NiwgMHg0YjExYWE4YywgMHhhNzM3OGMyNSwgMHgzMDkzZWUzYiwgMHhlMGRlOTFmZSwKKwkweGU4ODk3YzkzLCAweGZkYTlmOTI3LCAweDJiOWYyMmFlLCAweDZmNjdkNjFmLCAweGY3MzVlNzg0LCAweDNjMGNiZWIxLAorCTB4ODFiNzk4NTcsIDB4NTY2NDA5ZjIsIDB4ZWNkZjM5MTYsIDB4Mjc4NzhlMjIsIDB4YjQzZDIwNjQsIDB4NjkxYWQ3ZGYsCisJMHg5YWY4ZDE1ZCwgMHg5OTFlYWVlNSwgMHgxY2UwN2MzZiwgMHhjY2JmZGJhMywgMHhmZGI4ZTdlNywgMHhmOTAyOTg3MSwKKwkweDFmOGYxMjYwLCAweDkzMzk3ODljLCAweDZkZDllNWVjLCAweDIzZjQxZWYxLCAweGIyMzkzYzRmLCAweDJhYTdlMDk2LAorCTB4OWVmZjY4M2MsIDB4MWE2MmI5NzgsIDB4OWE5ZmIzOTYsIDB4NDg0ZWZkNDksIDB4MDVjNjMwZWMsIDB4YmI3NTNmNjYsCisJMHg3OTM5ZjU4YywgMHhlZjFjMmViMCwgMHg3MWU4OTFiNCwgMHg4OWY3NTNmNiwgMHhjNWE5MWZlNywgMHhmMDVkNzJmNiwKKwkweDJlOWZkMGVmLCAweDAxMmQ3ZTZmLCAweDg5MTUwNWUzLCAweDc5NjE2NDZmLCAweDZhYmRkNzQyLCAweDgzN2ZjYzNmLAorCTB4ZDUxYWZkOTUsIDB4ZGE0Mzc3YjUsIDB4M2ZjMWQ0ZGYsIDB4NmI5OTNjZTYsIDB4Mzc4Yzc4YzAsIDB4ZjNjZTk3M2YsCisJMHhmMDMxZTYyNiwgMHhmOTJmMDc3YywgMHhiYTNiOTViNywgMHg4ZThiMDFkZSwgMHg1YmQ5ZDc1ZCwgMHg5ZWJhZDc4MywKKwkweDU4ODNkNjVkLCAweDM0MTU4NzU2LCAweDYxZWQ1OWEzLCAweGE3MmM0MWVmLCAweGQxNmJmOTc1LCAweGEwZmJhOWJjLAorCTB4ZGQ5NjIwZjUsIDB4YzQ1ZTdkMjMsIDB4ZWRmZmFiZmYsIDB4MDU1ZTM3OTYsIDB4YWI2M2M0NzgsIDB4ZTY4NzY4YWMsCisJMHg2MzNkZGUzZiwgMHgwZDJmYzUxYiwgMHg2MGExZjkwYywgMHg4ZjU1YmY5MiwgMHhhNmY2NmMwNCwgMHhmNjc4N2NhMiwKKwkweGZhODc1OTE5LCAweDhkNmFlNGRkLCAweDRmNzRkODQzLCAweDRjZTMwZWFlLCAweDE3NWE1M2RiLCAweGUyMGJiZWQzLAorCTB4MjhmMWUyMTksIDB4OGJhNDIxZTgsIDB4MmE2ZjE0ODIsIDB4MjVmMDEzZjIsIDB4ODI5ZGMzOWQsIDB4N2UyOTRkM2UsCisJMHg4YmQ2MGE2YiwgMHg3ZWZlOGU3YiwgMHhkODVlMWNmMSwgMHg0ZTM1YWZkZiwgMHhhNTUyNzlhMiwgMHgwOGNkYzRhMCwKKwkweDQyZWMyM2I0LCAweDdmMzNiNzlmLCAweDk2YzNlMjA2LCAweGYxOGFkZmU4LCAweGNlMmE4MmFkLCAweGQzOTEyY2ZmLAorCTB4OTk2Zjc2MDUsIDB4MTA1MDhmNDgsIDB4M2ZkNWJkM2UsIDB4ZTZjMWNmMGIsIDB4ZTAxYmNmZWIsIDB4YjA2YTA3NzQsCisJMHgyNWM5M2VkZiwgMHgzNjdmZWU5OCwgMHgzOTA2MWM0YiwgMHgzZmMyZWI0MywgMHg1YmE0ZTc4YywgMHg1MWNlYzlkMiwKKwkweDgwNmI2ZmQ3LCAweDBlZWMyMmYxLCAweDk2OGRjN2RjLCAweGJhNTRlNzgxLCAweGY1ZjYyMGRiLCAweGU2MGIyODg0LAorCTB4ZjVkNGYxZjMsIDB4N2FlN2NjNmUsIDB4ZDRlZGQ2MWQsIDB4NjJmNDdhZTEsIDB4NWQwZmIwM2QsIDB4ZmEyMjdhYzQsCisJMHhkN2ZhZmVkMSwgMHhkMjNiMTRjZCwgMHg4OTdlNjMwNSwgMHg0NzI5Y2M5NywgMHhjZWExN2ZlZSwgMHhkNzFhMzcxMywKKwkweDYxNWZkNmZmLCAweGU1MDkyOTVjLCAweDY3ZjNhYzA4LCAweDkxOTkyN2ZiLCAweGYxZjdhMzRmLCAweGZiODhiZTQyLAorCTB4ZmU4Y2JkODAsIDB4ZTcxZjRjYzMsIDB4YmY0NmU2ZGYsIDB4MGQ5NGZlODQsIDB4NDNiZmRjNjEsIDB4ZDQ1YzYwZjYsCisJMHgwYzkyNjk2NiwgMHgzOWI1ZmIxMSwgMHhkOTllOWViOCwgMHg3MjhmZGZlOCwgMHg4Mjc5NjY2NSwgMHg4YjNkZjQ4MiwKKwkweDcyYjVhZTc1LCAweDBmOTgzZWZlLCAweGZkNjIyYmViLCAweDcxMzYxNjdmLCAweGZlN2M0ZWMwLCAweGUyNGVmNzk5LAorCTB4Njc1ODNhOTEsIDB4Y2ZlYTMxNTUsIDB4YmNhNWVlYzcsIDB4Y2M4ZmNkODksIDB4Y2ZlYjhjM2MsIDB4M2ZiOTNmNzQsCisJMHg3ZWY0MDYxNSwgMHgzZTdkY2UyZCwgMHg3NzY1NmY4ZiwgMHg4N2JjOWFjOCwgMHhjOWFjYmYyYywgMHhhYzU4Yzg4YiwKKwkweGQwN2EwNzZkLCAweGQ5NWQyYWMwLCAweGE4MjlkNWE1LCAweDI1MDk3NDZmLCAweDlkYTA2NzMzLCAweGY5MjNhNDkyLAorCTB4OWE0YTcyMGUsIDB4OGQxZWQzMWIsIDB4N2Y4MTJiYTIsIDB4Y2RkZTdjZjUsIDB4YjM3M2E3Y2YsIDB4YjAzOWY4NTksCisJMHg3MzdjYzU1ZSwgMHg3YWFjZDhhMiwgMHgzMzZmMzA0ZSwgMHhkMDMyNzliMCwgMHgzZWFkNzM3ZCwgMHg4ZjFmYTEyNCwKKwkweGIyMzJmMWZkLCAweDI2ZjcwZDk3LCAweGFkYTczZTBlLCAweDE5Y2NlNzA2LCAweGQ0MWZhNzI4LCAweDJhYWYyOTU5LAorCTB4NjdhMGFmMGEsIDB4OTRmYzk5ZmUsIDB4MWRhOGQzMDcsIDB4YzUzMzY1ZWEsIDB4YWJkNjIzM2QsIDB4Y2Y2YjA1OGYsCisJMHgzYmZkNGFlMywgMHgwY2NlNzg1OCwgMHg0Y2ZhZTBkNywgMHhhODk5ZGNjNywgMHgzMjk3MzM2NywgMHhmNmU4ZmYzYSwKKwkweGU3YjU0N2EyLCAweDc4ZWY3ZTRhLCAweDUwYjFhMzhjLCAweGU3OWMwN2Y4LCAweDVhZjZjNzRjLCAweGNmYTNlZmI0LAorCTB4OWNiYmE1NTUsIDB4YzJmNWIxNjEsIDB4MmY1YzA1MjMsIDB4YTcyODI0ZTQsIDB4OTBhZWM4ZWEsIDB4NjZmMDRlYzksCisJMHhmZDIzYzNjYiwgMHhiOWYyZWZhNCwgMHg1N2U1MzAxZiwgMHhlYzQzZDIxNiwgMHgxZjA4NzM2MywgMHgzZjVkYzI1NSwKKwkweGE4NzM4NjI5LCAweGZiYTFkM2VlLCAweDdlM2RkZWMyLCAweDUwOTllOWUwLCAweDdiZjVmZDRlLCAweGRmYTBjNzRkLAorCTB4ZTMyY2VmZDQsIDB4ZWIzNzdlYjAsIDB4YTA4MTgxOWUsIDB4ZjkwMzYxZTAsIDB4N2NiZTZiOGQsIDB4NDQwMzE1YTUsCisJMHg0MTRjOGRjZCwgMHhlM2NlYWJiZCwgMHg2ZWZhZTAyOCwgMHgyNWU0MjE4ZiwgMHhiMzJjNWFmOSwgMHhkOTA3MjQ2ZCwKKwkweGY0MTE0YmM1LCAweGU4OWU5MDAyLCAweDZmMzFiNzg3LCAweDkxZjkyYjYzLCAweDg2MTJmY2I2LCAweGFjY2QzYzc5LAorCTB4OTdkMjBlZjMsIDB4ZTMwYzhkNjcsIDB4MzgzNjM3YWYsIDB4ZmZiMDU1MGQsIDB4ODY5ZDFiMWIsIDB4MjE5Zjc4ZjksCisJMHgyM2I0M2FiMywgMHhhODUwNmE2ZSwgMHg4NTQ2YTZmZSwgMHhmZDc5OWJkNywgMHhkNTBmMDZkYywgMHhmMGY0NmRjZiwKKwkweDViZDQwYjdhLCAweGQ0MjkwZjMwLCAweDZmNzE4MDE1LCAweDc1M2FhNGI2LCAweGU4ZDAxZjc4LCAweDRjMTdlZGU1LAorCTB4ZmMxYzdlZDQsIDB4OGMyN2NjMDEsIDB4YmM5MTBiOGYsIDB4ZjFkMWVkNmYsIDB4N2M3ZjIzN2IsIDB4OWFiNTgyNDgsCisJMHgzYjBlY2IxMiwgMHhlOGY3N2YxMSwgMHhjYzE3NTAxNCwgMHgyYjMzMmQ5NCwgMHg3ODM2Y2ZjMCwgMHg3ZjY4N2E0MywKKwkweDEwMzI4NThlLCAweDM2MTdiYjkxLCAweDdlYTEwYjc5LCAweGUyYjY0M2I3LCAweDdiODM3NmZlLCAweGMxNDdmOThiLAorCTB4OWRlMTMyYTUsIDB4YmRkZTAwZmUsIDB4M2FmNzQxZDgsIDB4M2VmYzQ1NWIsIDB4ZjE0Y2M0YjgsIDB4Mjg3NWIwNjYsCisJMHg2NDk2Y2NkZSwgMHhiNzg2M2IwYSwgMHg4NmIwMmM3NywgMHgzOTAzMWVkMCwgMHg3YmQ4ZTc0OCwgMHgwMDc2NGM4ZiwKKwkweDZlYTNjM2M4LCAweGU2NzY4YmI0LCAweGNhOWYxODJiLCAweGI3ZTVhYTVjLCAweGFhMGI4NWY0LCAweDY2NDZiYzY4LAorCTB4YmViZDNmNDUsIDB4YmNkNzhmOTEsIDB4YTFkMjE3NTMsIDB4NzFiOTY1NWQsIDB4ZjM0MWQyMjYsIDB4M2ZhMGE2MGUsCisJMHg1M2MyZWNmYiwgMHhlZTEwYzNiNSwgMHgzZjJlMTQ1MCwgMHg3OWExNzJiNCwgMHg5YzQ3NTNlMSwgMHhjZWJmMWZiOCwKKwkweDc5ZmQ0MDVhLCAweDVmZDlhZjFjLCAweDBkMmY1ZGJkLCAweGI3OWQzM2YwLCAweDBjN2U0MDczLCAweDYxY2EzNzk2LAorCTB4NWU2MzI3MWMsIDB4YzFmMTgyYjUsIDB4YzYyN2Q4NzQsIDB4YmM4YzNiZjMsIDB4NGNhNzc4M2UsIDB4MGJlOTJkZjcsCisJMHhmNDc1YjBlNSwgMHgwYjY3N2YwMCwgMHgxZjIzYTYxNCwgMHhkMTdjOTEyNiwgMHg5ZGM4ZDdmMCwgMHhjMTc5Zjg1YSwKKwkweDMyZWZjMGE3LCAweDlkYjgyYmVlLCAweGQxNjczZTUxLCAweDkwM2Y2ZDc2LCAweDU3OTQzYTkzLCAweGZhZGFlZGQ5LAorCTB4ZTNmYThiNWIsIDB4NDQzYzFhMDIsIDB4ZTdlNmQ5ZTMsIDB4OWY3YTJmNzIsIDB4YzcwYWZiMDMsIDB4NzRiZWQxMTUsCisJMHhkNzI4NWY3YywgMHg3MmQ4YmVhMCwgMHgxYjhiZWE4MCwgMHg0NGU5YzU2NSwgMHgwYTc5ZDc3OSwgMHg1M2I0NWZmNywKKwkweGViODA2MTY2LCAweDQ0Y2Q5NjE3LCAweGE0ZGZhYTdhLCAweGY1YzhmMGEzLCAweGMyZTQ4YmFjLCAweGM2YWRmNjk1LAorCTB4MTlmN2EyM2IsIDB4ZjJlZmJmYmQsIDB4YTg4ZTVjZjUsIDB4NjYxM2UwZjYsIDB4MWVkYjA3YjIsIDB4OWVmMGU4YjYsCisJMHg3OGFkZWMxNSwgMHg1NWRjMmI4YywgMHg0MDJjMWQ1NCwgMHgxZGM4NDA3YiwgMHg5NzNkMjVjMywgMHhhMjE2Y2QyNywKKwkweDUxZWQ4MzUzLCAweGExZmM2NDc3LCAweDEzZjU1NDY1LCAweGQ4NmZkNDA1LCAweDZlM2M3NThkLCAweDk2OGVmYjQxLAorCTB4ZTMxNzNmNjMsIDB4ZTZkNmVhNGQsIDB4MTNkYjVkZTMsIDB4YTYzZjk1MWYsIDB4NzI5YmM3Y2QsIDB4N2YyYTMzMjEsCisJMHg3ZjJhMmYyYywgMHg3ZGE2OTQ2YywgMHg1NDVjNzVhYSwgMHg1MWI1ZDhmZSwgMHgxYTM1NjNmOSwgMHg5NjdiOTY3OCwKKwkweGNhZjVmZmE2LCAweDg2ZjgxYTRkLCAweGZkMzQzYmYyLCAweGQ2ZWU3OGU3LCAweDc3NTRkZmI0LCAweDY2ZmRhNmJmLAorCTB4N2MwZDRhZWYsIDB4NmI1ZmMzNmIsIDB4NmJlNmRmZmEsIDB4YjFkZmI0ZDYsIDB4ZjY5YTI3ZjgsIDB4MmQ0OWZmNjgsCisJMHhmOTcwMTU3NywgMHgzZmVlZDliZSwgMHhkMDZjMDE0OSwgMHgzZGY3OTFmNywgMHgyOGRlOTk2YSwgMHg3YjllNDZmNywKKwkweGE3YjcwMjUyLCAweGI5ZmRmYmEyLCAweDhiZmJkMzgwLCAweDA1OGY5ZjEyLCAweDFjNzg5YWVkLCAweGYxMzVkOGYzLAorCTB4ODU0NTcwYmEsIDB4NzFjNjFiYjksIDB4MjFkZjk1MWEsIDB4MGVlMjYyZGQsIDB4NmJiNmJmYmYsIDB4M2ZmNmQ5ZWUsCisJMHhiYzYwZmQwZSwgMHgxYjVjYzRhNiwgMHhmZjhjM2JlYSwgMHgzN2I5NDBmYSwgMHg1Zjc0NzQ4NywgMHg0YWJmNWI2MSwKKwkweDY5YjgzZDIyLCAweDVjYWI4ZjE1LCAweGFmM2M1MjMwLCAweDhlYWMxZDdmLCAweGRjNDZmYmM2LCAweGVjZWJhOTZiLAorCTB4MmRhNDcxMTAsIDB4ODU0MjQ3MTgsIDB4ZmQ0MTk5ZTQsIDB4N2VmMWM2NTYsIDB4ZTM1NzRkM2YsIDB4MzcxYTNlOGUsCisJMHhhNDE4ZGNhMywgMHg3ZTg1YmNmYywgMHhjZGMwZTMwOSwgMHg3YmM1NjYzZSwgMHgwMmNiNzQ5MywgMHgwNjliZmY5YSwKKwkweDI2NWQ5OTI1LCAweGIwMTZkYTJlLCAweDY3Y2MwZjMzLCAweDYzNWMxNTVmLCAweDUyN2RiZDg0LCAweGIzZDRmN2QwLAorCTB4Y2ZkZGJjZjAsIDB4NWJkMzFlMjgsIDB4MTg1M2VkZjAsIDB4ZTE0M2U5OGYsIDB4MjE5ZDc0MDgsIDB4ZjczZjNjNzMsCisJMHg1ZmNmZWVjMCwgMHhlNmRhZjk4MSwgMHg1Y2ExOTdhNSwgMHg1YWNmNmU4ZCwgMHg0M2ViZjdiZSwgMHg2ZTdmNjk5NywKKwkweGRlMWY1YmQ5LCAweDFmZTdiOTdiLCAweDI1YmE3NWQ4LCAweDM4Yzg3ZGEyLCAweGYzMjY0MzY5LCAweGUwMDFkMDQ0LAorCTB4ODBmZGU2MmMsIDB4ZjlmNWM4NWMsIDB4YzUyMzBhZjIsIDB4ZmMwMWFlYjEsIDB4YmZiZTAyMTUsIDB4ODljZmY4YWEsCisJMHgzZmI5ZTAzYiwgMHg0NGVlZmIzOSwgMHg2NWVhMWQzYiwgMHg4NDdlODdhYywgMHg5ZmU1M2ZkNywgMHg5YzkyZmNhMywKKwkweGEzZGY2MDUxLCAweDliMTcxZGZkLCAweDcyMTVjNzZlLCAweDhkNmQ5NWJhLCAweDZhMDcxOGJkLCAweGQxM2EzNDRhLAorCTB4YmIzMmNmY2YsIDB4MDcxOTNlY2EsIDB4N2VlMDZkNzQsIDB4ZmVmZmI0NzUsIDB4ZGRiZmJmNWMsIDB4OTE3N2ZlNDksCisJMHg5NDRiMjcxOCwgMHg5ZTdmMmI3YSwgMHg0ZTRjODM5OSwgMHgzMTE0ZjcxNywgMHg2YTRmYTFmMCwgMHg2NTVlNTA5NywKKwkweDhkM2Y5NDJlLCAweDg5ZmQ4YmU0LCAweGE0MjM4YTQ2LCAweGMxZGM0NDViLCAweDE3MTM1OGIyLCAweGZiMDZlMzUwLAorCTB4OTA5NWVmMTMsIDB4NGJjM2QzZWUsIDB4ZjE4ZjllMjgsIDB4NWM2ZjFjMDIsIDB4MTFkNjkzYTEsIDB4MzJjODJmMWQsCisJMHg4NmJhZDNlNywgMHhkN2Y1OWYxZSwgMHhlNjMxNDgyNywgMHgxYTg3NWE4OSwgMHgyNzllODg5ZiwgMHhlYTA0ZjY4NCwKKwkweDY0ZjE2NTk5LCAweDdiZWY0NDRmLCAweDc5NTU2MTQ5LCAweGQ3ZTQ3MGUxLCAweDUxZDM5M2RlLCAweDkwMzI5ZjdlLAorCTB4NWU4YTFjM2UsIDB4MTQzY2NmMzAsIDB4NDJiNGZlMzEsIDB4ZmU2M2RmZWUsIDB4ZTYzZDY0NzgsIDB4ZTMyMjg3ODcsCisJMHhlZjQxY2NkOSwgMHgyYTBjMTAyYiwgMHg3YmIxODQ2NiwgMHg3N2NlMTE0MywgMHhjMjc3Y2Y5NCwgMHgxZWM5ZDhhMCwKKwkweGZlODdiNTA0LCAweGQ3MjE3ZDVmLCAweDk3MzBkMzAzLCAweDE5ZjIzODZkLCAweDgxZGJjYmY3LCAweDEyZGNiMWFmLAorCTB4ZDY3ZDkyYjAsIDB4ZjA4N2ZjMDEsIDB4OTUyNzAxMGIsIDB4Y2E5YjgwYTEsIDB4ZGE4NTAxNmQsIDB4MDljYTA3YjcsCisJMHgyMWUwMjU3ZSwgMHg4ZWEwNDc3OCwgMHg1ZTAyZDdjYSwgMHg2ODE5ZGZhYSwgMHgwMWU3ZjgyMCwgMHg4MTlkOTUxZiwKKwkweDQ2ZmY1NGM1LCAweDliZjA0ZmMwLCAweGJmMDRkNTgxLCAweDAxNjBmNjg1LCAweDUzZDdhOWM2LCAweDRhZDAzYmI5LAorCTB4ZWQwMzdiZWQsIDB4MDgxZGJmMDQsIDB4ZWMwZTE5NTEsIDB4ODEwM2ZhYTAsIDB4MDYwZjgyNGUsIDB4Mjg3YzExNzYsCisJMHg3MGY4MjYxMCwgMHg0Nzk1MzBlMCwgMHg3ZjU0NWQwMywgMHhjMTAxZjAzYywgMHhjOTNlZTMzNywgMHgxNWRmNThhZSwKKwkweDRmODU3OGMwLCAweGY3N2RhMjc2LCAweDE1YTE2ZmFjLCAweDdjZmI2YmVkLCAweDc5YzUxNTlkLCAweDA0Yjc0ZmJiLAorCTB4OGQxZDFjZTMsIDB4ZWYxMzFlZmMsIDB4MDQwZTMxMjMsIDB4ZWQwODY4NzYsIDB4NjdmY2ZiMzksIDB4ZjZhNTRjOGUsCisJMHgxOWJlZDRiOSwgMHhjNGE3MDQ4NywgMHhhZmRiODJiNiwgMHhmYTkxOTk2YywgMHgwYTIxMzBkOSwgMHhkYTU4ZWI5ZSwKKwkweGRjMDNkMjE4LCAweGVkNGYxODVhLCAweGY5MzIxNWI2LCAweGZjZTljZjZkLCAweGVlZGM4NTI5LCAweDMzNmRmOTIyLAorCTB4YTU0MWZiNzAsIDB4NWM4NTM1ODMsIDB4ZTQyOWFlZGUsIDB4MTYxZjVjZjcsIDB4Y2E0YTczZjEsIDB4OWU0N2FkOGIsCisJMHhhNmVkNTQyZCwgMHg3ZjcxODdmNSwgMHgzZmIwNzlmNiwgMHg1NWJjZWY1YywgMHhiNTk3YmM2NiwgMHg3MmIzYTNkZCwKKwkweGNiZGY5MzdiLCAweGI4YmY2MDNhLCAweGM1MGY1ODdlLCAweDZlN2NkOTg1LCAweGFkZTZkYjJmLCAweGU2Mzk3NWE1LAorCTB4ZDZlZDQ4ZGYsIDB4ZDA1MzQ3YTIsIDB4YWZmNzZmNGYsIDB4NmRlYjQzOWEsIDB4ZDlhZTI5OTQsIDB4ODI5MDNiZWUsCisJMHg4OWNmNmNmNywgMHhmMGRiMjc3YywgMHg2NGE4NmY3OCwgMHg4ZDllN2FmMCwgMHhlMzA3N2Y1YSwgMHhlYzAzODM3ZSwKKwkweGVjNjNkN2E1LCAweDQ5NmVkMzAzLCAweGM3MTEzMGNmLCAweDMzMWNkNDdiLCAweGU4MjlkNzhlLCAweGZlNzEyMWQ3LAorCTB4YzRjYTBmNjMsIDB4YjAzMDJmN2YsIDB4MmRiOWUwZmIsIDB4NTEwNWRmNjAsIDB4YjZiZjU0MGUsIDB4YmQ1NWUzMDIsCisJMHgyODlkYmU4NSwgMHg4ZTc3OWYzNywgMHg5YzAzMjAzZiwgMHhjZmM3Yzc1YSwgMHg4MmJmMjU1ZCwgMHhmNzljMzQ3NiwKKwkweGJmNTAyZGU3LCAweDVlNGRiZWUxLCAweDRkYjBlYTVjLCAweDZlYzgzNWNlLCAweGNhZGZmM2VkLCAweDQzOTdmOGMwLAorCTB4NWE4ZjllZDIsIDB4ZjlmNjJkYmUsIDB4Yjc4Zjg3ODIsIDB4ZjE0Yzk1NjUsIDB4Mzc4YWRiNjQsIDB4YmNmOTA3NWQsCisJMHgzM2ZmOTFiYiwgMHhjMzhhM2U4YiwgMHg1Y2RlNGMzMCwgMHg4NjQ1MGVhNywgMHgzNWZjOWU2MywgMHhmZjc3MTdjZSwKKwkweGNkNDIzYWE2LCAweGRmM2E4ZjI2LCAweDZhZWY5YzU4LCAweGIxZTIzNGYxLCAweGM2MmY5YjVhLCAweDI3OTI4NmJhLAorCTB4YmYyMzkyNTcsIDB4ODFlZjE0MjksIDB4OTQyY2IxNjQsIDB4YjgxOWNmMjMsIDB4ZTQ5ZTBhZGMsIDB4MDUyNTI0ZjYsCisJMHg4ZjNjMWE0ZCwgMHhlNmEwMmY5YSwgMHgwYmU3NDQwZiwgMHgyOWUwNWVmYywgMHhkZTYyYzRjYiwgMHg0ZmQ2N2VlNywKKwkweGQ3M2E0MWJmLCAweGJkMWIzYzE3LCAweDkyZTM2Nzk0LCAweDM1ODc0OTMxLCAweDdhMTJkODE5LCAweGRlMmFhN2VmLAorCTB4M2QwNjI2YmEsIDB4Mjg1M2U1YTgsIDB4MWZjMTAwYzcsIDB4MmU3MTMyMTYsIDB4MzhmOGVhOWIsIDB4NjRjZTNlM2EsCisJMHgyYWUwODJiNiwgMHg0MzE4MzU4YiwgMHgzM2U1YWI1ZSwgMHgyYjdmOWM2MiwgMHg3NTliNzRlNCwgMHg4NzBkY2VkZiwKKwkweDFhOGY3Y2YwLCAweDhiNmEzNzI4LCAweGZkMDFiNDJlLCAweDNkMDllMDg0LCAweDdkNGNkN2M5LCAweDIyNTdkNmU3LAorCTB4NDExN2Y1ZDYsIDB4YTE4YzViOWYsIDB4NmU4N2JjNjIsIDB4NTA0YWYxODcsIDB4OTRiZjIyYWUsIDB4ZDU4MmZjNTAsCisJMHg3ZDVkZTA0NywgMHgxZDg0M2ZlZSwgMHg3NWM1ZmNmMCwgMHgzY2ZmNzQyOSwgMHhkYTFjNmQ2ZiwgMHg0Y2NjZWQ0NywKKwkweGY4MzM2MGY0LCAweGQwNDZjNjUzLCAweDMyZTkwZDgzLCAweDhiMzg3ZDA2LCAweGZjMGUzNDhjLCAweGUyMjZhYTU5LAorCTB4Y2JkNzBjYmQsIDB4NjA5NzI4MzUsIDB4MjYxNmZiZGQsIDB4OTlhYzNlOTEsIDB4MzFhY2RlZmYsIDB4YzlmNjU3MDAsCisJMHg2NWIyY2Y5NCwgMHg5Y2QzY2YyOSwgMHhjYTNhZWZmNCwgMHgzMWZiNzkxMywgMHhmNzVkZjdlZSwgMHg5ZmJkMmQ1MCwKKwkweDY3Y2EyMTk0LCAweGIyODNjZmQxLCAweGMyNTMzZDcyLCAweDBiOTUyZTcwLCAweDk5YmYxNDJkLCAweDEzM2U0MTdjLAorCTB4NDg1MWE3ZTksIDB4MTdmYTNjN2EsIDB4NmQ3MzVlM2MsIDB4MGY3OWFjYWYsIDB4YjY4ZjUyNmQsIDB4OGY1NDYwM2YsCisJMHhiNzQ2NDY3NiwgMHhlZjNlZGViNiwgMHg2MTUzZDNjZCwgMHhmY2E1ZjY5ZSwgMHhiZjhiZjZlMSwgMHg3MDcwODIzYiwKKwkweDI0ZTI4ZTk1LCAweDUwNjRmYmVhLCAweDRkZjE0MTkzLCAweGY5ODE5ODM5LCAweDhjY2MxYjliLCAweGJlNmRiOWU0LAorCTB4NjBmMjhhZDksIDB4YzkzYzdhN2YsIDB4MmNkYmY2YmYsIDB4Y2JhZTg3NjQsIDB4M2I0MzhhNmYsIDB4NTU2ZjM0ZDksCisJMHg4YzIzOTYwYSwgMHgzYjE4YWRjMSwgMHgyZGQ1ZTZiZCwgMHg5MTI3ZDkzNywgMHg1NWYzNTViYywgMHhlYzFjYWM4MiwKKwkweGRjOGRiYjgxLCAweGY3M2UwOWM4LCAweGU1MTk1NGY0LCAweDk5NjdjZjI1LCAweGE3OTZlYWY0LCAweGFkZDhmOTgzLAorCTB4ZDRlMWQ2OTUsIDB4ZjliZTRjYjEsIDB4YmE3NmY4N2UsIDB4YmViODk2YjcsIDB4MWRhMTFhNzAsIDB4N2NhMzc5ZTAsCisJMHg3YjQxMTVkNywgMHgzZjcwNWE0NiwgMHg5Y2I2NmQzNiwgMHg2YjdjYTQ2OSwgMHhmOTgyMzI0YywgMHhjY2ZkMGIwZCwKKwkweDY1OGRmNTg4LCAweDU3M2U0OGU2LCAweGYyZmJlNGY5LCAweDg3YzYzYzdmLCAweDBlNTk1Zjg3LCAweDJiZGM2OTVjLAorCTB4M2U0MTdiZjEsIDB4ZmNhMTliZTcsIDB4ZjIxMGQzNjksIDB4MWY4ZmY1NTQsIDB4OGJmY2UwMjksIDB4ZjU3YTRiNmMsCisJMHg3ZGE2MzE4YywgMHhjZTIyYWJmNSwgMHg5ZTQ2ZTU2NywgMHg2MWJiMzJhNywgMHhjM2RkMWQ1YSwgMHhjYzY1YmIwNCwKKwkweGRjNTE3YmU3LCAweDI3YTdiNTBiLCAweDdiNzEzZGQyLCAweGJkZTMwYjJlLCAweDhlODE3MDQxLCAweGY4ZDI3YmM3LAorCTB4Yjk4ZGVkN2YsIDB4OTM2YTFmMTQsIDB4M2NjMTI5ZmMsIDB4YjlmMDk3Y2MsIDB4MDFkYWZjZjAsIDB4N2YzMDg5NDcsCisJMHhlYjk3MGU1YiwgMHhlMmI3ZTQyYywgMHhiMzhjMzU3ZCwgMHhlMGZkNzIzOCwgMHg3NGI1MDVlZiwgMHhhNjFlYzhjYywKKwkweDc4OWU4NWY4LCAweDg4OGM2OWNmLCAweDFjNWM2M2I3LCAweGNmZDExN2UzLCAweGMyZDVlZTRkLCAweGUxNjgyZTUzLAorCTB4YzBkMDY2MmEsIDB4M2MyZDY2MzUsIDB4Mzc4NWFhZDUsIDB4N2QzYjcxMTUsIDB4M2Y1YjVkYmEsIDB4MWQ4NWE5YzMsCisJMHg3NGUzMDdkOSwgMHhjMmRmY2YzYywgMHhmMDQ5ZTIyMiwgMHg0NDdlNWVmNywgMHg2OGRkNjgxYywgMHg3NjVmM2VmZSwKKwkweGNiOGE1MmY3LCAweDc4ZjBlNWI2LCAweDM2OTU2MzhmLCAweDQyYzU5MWNlLCAweDczMmZlMjEyLCAweGQ2M2M1NDY5LAorCTB4ODYzZjY2YmQsIDB4YTMwYmVkOTcsIDB4NWVmYzQxZTMsIDB4YTlhMWYwMDIsIDB4N2M4YTMxNDcsIDB4OWU2OGVhZjAsCisJMHhkMjNkZGU4NywgMHhjZTA4YmRiNywgMHg1ZjBjNjBiMywgMHg0ZDFkYWJjNywgMHhkYWM1M2Y3NCwgMHg1Y2FmODhkMywKKwkweGIwNjk1ZjIyLCAweGU4OGE3Y2JlLCAweGY5MGYxZDQwLCAweDdmYjExODIyLCAweGY4NDg4N2U0LCAweDM3YmU1MWExLAorCTB4OGJlNDFlNzAsIDB4MmNmZWE0NjAsIDB4ZmJkMDM2ZTksIDB4YTFiZTYyYWIsIDB4Y2ZlNTQzZjgsIDB4YTI4ZjcxNzIsCisJMHg4OWY0ZGRlNiwgMHg5YmJjZDRiMSwgMHg3MDVmMjI1NSwgMHg0ZWJlNTQ1NywgMHgxOTM2YTM5ZiwgMHhhZWJlZTdmZCwKKwkweGY4YjFmMTk1LCAweDY4MmVmOTEwLCAweGU1ODg3Y2UyLCAweDgzN2Y5MTA2LCAweGUyMmMxODdjLCAweGE2ZjU4ODdjLAorCTB4NjM3ODU2ZWYsIDB4MDUwYjhiZDksIDB4NjNiZmRjNWQsIDB4MjI0Zjg2YzksIDB4NzNhY2I3ZjYsIDB4YmU1ZTA2ODUsCisJMHg5MTBkZTFlYiwgMHhlM2Y3NTFmOSwgMHhiZjA4MzAzZiwgMHhlZDdlNTE5ZSwgMHgyZjlkYjE1MiwgMHgyYmNiZmY0ZiwKKwkweDQ4Y2QwY2NkLCAweGNmMjgwN2RmLCAweDMxOWMxNTk2LCAweDVlYTc3YmYyLCAweDQyZWI5ZTIzLCAweGNjOTlmZjYxLAorCTB4MmZkMWYyYjMsIDB4ZjJlMjExZGIsIDB4Mzc4ODlkNmMsIDB4MzMxNTViMzQsIDB4M2I5OTgxYzYsIDB4NTBjNzEzNTUsCisJMHg0YjRkMTFlMywgMHhkODU0YjY1YywgMHg3YzdmNzI0NywgMHg3Y2E1NmJjMSwgMHgxNGY5ZTFkYywgMHhmMWFhNDhkZiwKKwkweDMyYzZjZWRjLCAweDljNjQ1M2Q2LCAweGRkNjIwNjZiLCAweGMwNTZjMThlLCAweGQ5NTdmOWU5LCAweGMwYzc0MTMzLAorCTB4ZjgxNzRkYmUsIDB4YjBmZGM5N2IsIDB4OGYyNDY3ZWMsIDB4ZWE2OGU0MmUsIDB4YTM5YzQ0ZGIsIDB4MGIyZGJmOWYsCisJMHg4YjNlNzBhYSwgMHhiMGZiNDlkYiwgMHgxZTFhZmYzMSwgMHhkMWM2ZDQxNywgMHhlNzNkZTI0YywgMHgzNDNiZTNjMSwKKwkweDdlMjI2ZGY1LCAweGI1ZjFlNTcyLCAweDg1ZDMzOTcxLCAweDJmYzYyMWJjLCAweDFhZGYxYThjLCAweDcxODFmYzczLAorCTB4YWJiZGYxYjUsIDB4NzE0ZjM3YjgsIDB4MmUzYTE4NGYsIDB4ZTljZGQyMzYsIDB4ZGZkZDlkNjksIDB4ODMzMTcxODUsCisJMHgwNjY2N2ZlMCwgMHhmMjg4OTkzYSwgMHhlM2U5ZmY4MCwgMHhjMWFlN2U3OSwgMHgxOThmOGRhMSwgMHhmYTBiYWYzMCwKKwkweDk4Yjg5NzNmLCAweDNlZmE4YWU0LCAweDA1OTlmZGI1LCAweDI3Y2JjYTEyLCAweGE0ZThmZGYwLCAweDVhMjRmMmMxLAorCTB4ZGU0NGQ4OGUsIDB4ODExY2I0N2MsIDB4ZDM3MDM0ZjksIDB4MzZjZjVjYzMsIDB4ZTUwZjhhNGIsIDB4ZmU3ZWY0NzMsCisJMHg3NTg3ZjE3ZiwgMHhjOGJiZTM4OSwgMHg3NzhlY2VhZSwgMHgwZjYzMmU5YSwgMHg2MzgyMDViNywgMHhmMTc1YjlmMSwKKwkweDA3NzhjNWZlLCAweDkxOGVmNzdlLCAweGUzOTQ0ZjY5LCAweGY4OGNlYjdiLCAweDI5OGVjNTZjLCAweGI2MGYzMTczLAorCTB4MTNlYmYwNGQsIDB4YTdhMjNhNjksIDB4YjdkM2RiZjQsIDB4MjllODIzZWEsIDB4YTE3M2U4ZGQsIDB4MTNhZTljM2QsCisJMHg4N2Y4NWZmOSwgMHhkMjI3YjQ3MSwgMHgzMThjNmRiNywgMHhhOWQ3NmFiZiwgMHhkNjAxYWRiMCwgMHg2ZDhlNzExMSwKKwkweDlmZWU5ZWMyLCAweGFkY2M4ZWVmLCAweGQyNzE4OGZhLCAweDM0YjFiZTRkLCAweGEzZmU3ZjVmLCAweDg3ZTVhZjk4LAorCTB4YzQ1OWI3Y2QsIDB4NmNmOWQ0YzMsIDB4NjdmNzZhNzcsIDB4N2Y2OWZhMzMsIDB4ZDQ4N2ExMzYsIDB4ZmVlMzM2ZjksCisJMHgxNWQ1ZjA2MiwgMHg3NWZlMTNlNywgMHg2OTc3N2NmZiwgMHhmOTMzNjdmNywgMHhmNTM2N2Y2OSwgMHg3Y2VhMWIzYiwKKwkweDNlNmMzZjJkLCAweDc2Y2ZlMGJiLCAweDNkOTdkZWYxLCAweDY0Mzc3ZjllLCAweDlhMjNmN2E4LCAweGJkY2NmM2ZiLAorCTB4ZWQyZjk0NjYsIDB4ZTg1MGJjNmEsIDB4ZmE1MTczYmIsIDB4M2JlODQ5YWUsIDB4Njk3M2Y5ZjUsIDB4M2RmZjE0YjksCisJMHg3MzI2Zjg3NywgMHhmYTg3M2QyYywgMHg5MzNiMDk4ZCwgMHgwOTkzM2IwOSwgMHhkOWUxMTMzYiwgMHgwZDU3YTczNSwKKwkweGJiZmM3YTA3LCAweDk1Y2YzNzFkLCAweGJlY2ZhZjQxLCAweDFjZjhmNGZmLCAweGYxZDlkZjgwLCAweGU4MzJiOThiLAorCTB4OWVhZmQ5YTksIDB4MWUwYjMzN2UsIDB4ZmJkYmZlMjksIDB4ZTlmNGZjMzgsIDB4NWJiNDA3M2UsIDB4YWRjY2NmODIsCisJMHgxODY5MzgwNSwgMHhiYWVhY2ZkNywgMHhiOTc3NzlkNSwgMHg3Y2I5NWRiOSwgMHg2ZjhmMWU3NSwgMHgzZDQ1OWM4MiwKKwkweDY3ZTM5Y2Q2LCAweGNhZmM3ZjE4LCAweDFmMzQ5YmQxLCAweGVlY2YyZmZhLCAweDAzMTA1ZjRkLCAweDdjYjk2YTJmLAorCTB4MWU3ZjIxNzUsIDB4OTg4OWMwYWQsIDB4YWY0OGM2Y2YsIDB4YzdiZWE4ZGQsIDB4OGY3ZGE3NTIsIDB4MjM2OTI5MjUsCisJMHgyYzcxODdkOSwgMHg5NjM5NDU2NCwgMHhmYmQwZjY2MCwgMHg3MzE2ZDc5NywgMHg1MzMzNzBiZCwgMHhlMTVmYjgxYSwKKwkweDFjNzkxMDJjLCAweDRkY2JkZWY0LCAweDZiNWM2MmU1LCAweGZkYjEyZmU1LCAweDA5ZTc5ZDY2LCAweDc5ZmY3N2Y0LAorCTB4NjhlMWJjZDIsIDB4NzM3OWFiM2UsIDB4M2JkZTA2YTMsIDB4ZGU3ZGZlZGQsIDB4YjFmZDllNGYsIDB4NjRlNTZkYzQsCisJMHgzNjk5OGYxZSwgMHg3YmRmYzljYSwgMHhhMjJiODg4YiwgMHgzZTE0M2M1ZCwgMHhmZjczNzUzZiwgMHgxZTlmMDA3ZSwKKwkweDBmNTRjZjhlLCAweDM3YjVhN2M3LCAweGZmOWMwZDY5LCAweGY0ZGU5NGYyLCAweGMzNGY4OWM3LCAweDA4MzVmMTMxLAorCTB4ZmJmODUxYWYsIDB4N2VhOTliOTMsIDB4ODhlZDFlYTAsIDB4YzU1YmUxMmIsIDB4ZDg1ZjlhYWIsIDB4YzgwYjM5MmMsCisJMHg5YTE5Njc1ZSwgMHgxNGM2NjBmYywgMHgxZTdiYWM2NywgMHgzZDQ4Y2ZhNCwgMHgxOTdiYjQ2YiwgMHgzNDg2YTNkYSwKKwkweGVmZjk4ZGM1LCAweGM3ZDE3ZmNkLCAweDE1NzNkYmNjLCAweDUyNWVmODhiLCAweDM2N2RlNTNjLCAweDFmYzkxOTI3LAorCTB4OTMzNDlmZGYsIDB4YjY1OWZjNjEsIDB4ZDRiYzIzNGMsIDB4M2U1MWQ1MjYsIDB4ZWIxODdlYTYsIDB4M2EzNTdmNDQsCisJMHg3YzlmNWQwZiwgMHhlOTA5ZTUzYiwgMHg0MDYxZTg2ZCwgMHhlY2M3OWZkOSwgMHhlOTVmMjMzMSwgMHg1ZDkyNTYzZiwKKwkweDk5NTcwMDQ4LCAweDI5NWYyZTg3LCAweDI2NzUzZDBmLCAweDMyNGY0M2NmLCAweGQ4NWUzMTNhLCAweDk5OGM2ODllLAorCTB4OWJhZGZlODcsIDB4NzFmYjVkZmIsIDB4MWZiODY5N2YsIDB4ODg2ZWZmMjMsIDB4ZTU2Yzk3ZDgsIDB4OWY1OGVlZjcsCisJMHhhYjQ2ZjUwMCwgMHg1ZGZjNTE4ZiwgMHg2MTViZmZlYywgMHg0ZGZkYTkwNywgMHhmOTQzM2Y1NiwgMHg0ZTJhMzdhMCwKKwkweGE5ZjQ1ZmI0LCAweDc3ZTA3ZjVjLCAweGUyMzFkYzViLCAweDBkYmI1ZjI4LCAweGEzZmRmY2Y0LCAweDk5Y2Y1Y2FjLAorCTB4ZmIzZWRkYjksIDB4MjdkZmIxMzcsIDB4NDQ5NjJiMjgsIDB4ZGQzNjI0YmMsIDB4MzczNzQ1MGQsIDB4OWRkZTc4ZWEsCisJMHgyZDczOTdjYSwgMHg5YzA3Y2E0NiwgMHhmN2QzYjE2YiwgMHgyMTAyZTY2YywgMHhmNDQ2YTRmNiwgMHhmZTU2ZWViZiwKKwkweGQ4YWNiNTNlLCAweDdiN2U5ZTkxLCAweGZlNWY5NGVkLCAweDAwYjVlMTk2LCAweDY2YTdkYjk3LCAweGMyYmRlODE4LAorCTB4MjhmMzEyNTMsIDB4NWRmMzgzYTksIDB4YTk5NGRlYmQsIDB4ZWExYmNjYjgsIDB4NzY0NWFmNGYsIDB4YzhjMzE4MmMsCisJMHhjMTc1N2E0ZSwgMHg0ZTk1YWQ0MywgMHg4YWVhOGZmMiwgMHg3MzdkOWU5MSwgMHg3NzBmYTJhNiwgMHg3N2Q4YzM2MywKKwkweDA0ZjJmZmIxLCAweGZiZDVjZjJlLCAweGZjMDllNWE1LCAweDY0NmJkZTdkLCAweGZmZWM2Y2RmLCAweDQ5MTdjNTU1LAorCTB4NzI1ZjQ4ZDUsIDB4MmJhZTBlNmYsIDB4MzNkZDNmYTIsIDB4NWI5ZmY0NDUsIDB4Y2ZmYTgxM2MsIDB4ZjVkZGFmZTYsCisJMHhjZTM5NzdkMiwgMHhjOGY5OWRhNSwgMHhlYzdjZThjNywgMHhmNDI5ZWNiMSwgMHhiZGU0NThiNywgMHhlODFmOTA4NiwKKwkweGEzZDY0NTc3LCAweGNlMjJjNWJmLCAweDZlNTA1YTUzLCAweDRmMjE4ZWViLCAweDNlYzMzMmQ0LCAweGEwNDJlNDZlLAorCTB4YjE4YzhjZDcsIDB4Y2ZmNWFhNTQsIDB4YTE3NWY0N2EsIDB4OTBmY2U3MTgsIDB4ZWMxZmU3MzgsIDB4NmFjM2I0ZjcsCisJMHgzZGY4MGUyNywgMHg4NDNjZWZlMCwgMHhlMTcyZjhmOCwgMHhiMGYxZjRhOSwgMHhiZjZhMDdhNSwgMHg2ZWM3YmYyNiwKKwkweDE2Y2VmZmVjLCAweGIwMDM3MWY5LCAweDJkYjNiZWY2LCAweGRmOGM1YmQwLCAweDg3ODg2MDE5LCAweDhiZjkxMTg5LAorCTB4MjVmNmJmNjIsIDB4ZWZkMDUyNmIsIDB4MjBmNGIzODEsIDB4YmMwNDc2ZGQsIDB4MDMwZDZiMjMsIDB4ZTQyY2JmY2YsCisJMHhkMjE2MGIwOCwgMHgyZWIxMDZmMywgMHgwY2ViNWE0NywgMHgyYzM4YmI4YywgMHg2MDczY2EzYSwgMHg2NzkxYWFjYywKKwkweGE2NTM2YTczLCAweGJiMGJhMWE2LCAweDI3MTYyOTljLCAweGU0NWRmN2ZhLCAweGZiZTA2NDE3LCAweDdjOWYxODBkLAorCTB4Zjc4NjM2ZTcsIDB4OWQ2OTU5NWYsIDB4ZmQ3NWRhMTIsIDB4YzZmNzg4ZjMsIDB4ZTE3Yjg5NTcsIDB4ZWQyZDVmM2UsCisJMHhlZmQ2YzMyNywgMHg1ZmYyMzE5NywgMHg1MDczODJkMywgMHhjMzNkZjU2ZSwgMHg5MmYxOTQ1NywgMHhjNjkxZGRiNiwKKwkweDVkZWUxZmYzLCAweDAyNzIxZjE4LCAweGVkMmQ2N2JkLCAweGIwNGY0ZmMyLCAweDMwZjg3MDBjLCAweGE5NzE5ZmE2LAorCTB4NzI4MmQ1ZDksIDB4MTQwOTU3ZTYsIDB4ZTdiN2Q2NzcsIDB4ZmJjODIwYjMsIDB4MWJmYmVjYjAsIDB4ZjljODc3YzIsCisJMHg2YzRmMmU5MCwgMHhiNjViOWUxNiwgMHhiOWVjOWUyOCwgMHgwNjc1YTk3NiwgMHhlOGY3MzFmOSwgMHhkMTc4YWM1OCwKKwkweGE3ZWU2MmNlLCAweDJiNjI4ZmZjLCAweDRmYjVjZmJmLCAweDFmNjNmNGU0LCAweGI4ZTE3MjNmLCAweDc3ZmZlN2FiLAorCTB4NDlmOTllODQsIDB4N2ZkZTkzYjIsIDB4NGRhM2VkNTIsIDB4OGU0N2Y4NDMsIDB4NWYyMTNhOTEsIDB4ZjgxMTVlODQsCisJMHgxOTlmMzMzMywgMHg3OTJmNDVmOSwgMHhjNzc0YjA3OSwgMHg5NmJkYWY2YiwgMHg1YjUzZThjZSwgMHg4NDFiNDc0OCwKKwkweDEzOGVhM2ZkLCAweGM2YTIxZjlmLCAweGYyNDNjNTc4LCAweGI4N2FiMjUyLCAweGVkZmFiMGJlLCAweDc1YWYzODQxLAorCTB4Y2U2M2U5ZGYsIDB4ZmJhMDg1ZmYsIDB4ZDkwZmQ5MzUsIDB4ZDNhZDdmYjEsIDB4ZmEzMmM2ZTcsIDB4OWM5Njk4M2QsCisJMHgzZTc4ZGQ3YiwgMHhlOWZiMzMyZCwgMHg5NmJhZWM5NSwgMHg2MWRmY2UzMywgMHgyOGYwNTYzZSwgMHg5ZmQ4MzdjZiwKKwkweGVmYzM2ODVkLCAweDFiMGU1OTQxLCAweGUyNjVkMzY0LCAweDI3ZDA0NmYxLCAweDE5ZDhjYmNlLCAweGRlYWY5MTQ2LAorCTB4OTllNzgwNzIsIDB4YmFjYTU4YjYsIDB4YzVhMWFmMzAsIDB4NmE0NjU2OTIsIDB4NTZmM2MyZDgsIDB4Y2IxNmZlZDUsCisJMHgxNjA3ZDIyMSwgMHg1YWRmZGY4NSwgMHhiODQ4N2Y1MCwgMHgwOTQ3YzA0YywgMHhlMTEwZWJhZSwgMHg1MDc3ZWQ0MywKKwkweDEyOGI1ZGM4LCAweDVhNWVmODY2LCAweGZkNGFkMjljLCAweDgzZDdiMmNjLCAweDM0ZTZjYTc5LCAweDY2NDRmNzQ2LAorCTB4ZTIxN2YwMmIsIDB4Y2NjNzVmMzUsIDB4YmVjOWY0MzEsIDB4NWE0ZmFlNjIsIDB4YWFiYWNhNGEsIDB4N2UzMjdkNjksCisJMHhkOGI1OGViOSwgMHhlN2E0ZWNjYiwgMHg3Y2YwZWYxMSwgMHhjZjk2ODY3MywgMHg1Nzc4MTNiZiwgMHhmOTE2NjljNywKKwkweDRlYWU3N2I0LCAweGMzOGVkNjA5LCAweDFiZjc5MzM4LCAweGNiMTZlN2E0LCAweGY1MTA3MzAyLCAweGNiZjhlMjVhLAorCTB4MzkxYTY3OGUsIDB4ZDdmYjc4ZDQsIDB4NDNiZWYxOGEsIDB4MmM0ZmFlNzksIDB4MDY3OGUyYjMsIDB4OGQxNWY3YzYsCisJMHg5YzYyZTFmNywgMHg3YmZiZDVmZiwgMHg0N2JkMmNjMCwgMHg1ODFkMzA0ZCwgMHg3ZGViMWVkOCwgMHgxM2YzZmVhYywKKwkweGNmZDFmMmY3LCAweGJjNzk2MGZkLCAweDAyODcxYjU2LCAweDA5MWVlYzc5LCAweDcyNTY1YWZiLCAweGQ1MzU1MGU2LAorCTB4MGJkM2Y4ZjAsIDB4ZmQ1MTlmYzIsIDB4ZjYzMTc0OTIsIDB4YmY3ZjEyMGIsIDB4MmJjNTI4M2YsIDB4ZTEwYzVkZjQsCisJMHg2OWM3YTRhNywgMHgzZWYwMzBmMSwgMHg2Zjg3M2YyZCwgMHhkZTFlNzgxYSwgMHg3YzRjNjkzNywgMHhkN2NiNGU4NywKKwkweDM4ZmYxY2RmLCAweDA1OWY5MzQ1LCAweDcxMzFlYzdjLCAweGRlMjNjNjNmLCAweDM4ODhmNWE3LCAweDZmMThjMjFkLAorCTB4MDQ5ZDE3YTAsIDB4ODljN2Y3ZmYsIDB4YzMzZjljMWIsIDB4NDA5OWFjZWYsIDB4NWM2MGViOGUsIDB4ZmEyN2UxYzksCisJMHg1ZGJhMzkzNiwgMHhlMjM5ZWZjOCwgMHg3OGQxMGZmYiwgMHgyZTQ4YzlmZSwgMHg3YTQ3YTVhZiwgMHg1MWFmNzg1YywKKwkweDExOWJkNjliLCAweDdjNWZkZjhiLCAweGVlMDY0MmY4LCAweGZkMTljNWU3LCAweGRmNzQzYjc5LCAweGU3NjllMmY0LAorCTB4Y2JjNDAyZTYsIDB4NmZmYmVkMTEsIDB4NDc0ZGY4ZWEsIDB4MjJmOGE3Y2UsIDB4ZTVjMGE1ZmQsIDB4M2E0YjJmZGYsCisJMHhkOTI1NzFiMywgMHhkZGI4MGI4ZCwgMHg3ZGZhN2ZmOCwgMHg3M2U2MTdiMywgMHhhNDk3NzUzYiwgMHgwODRmY2Y5NSwKKwkweGZjMTQxY2I5LCAweGQzMjBiYjYwLCAweDJhZWU0M2Y3LCAweDNhNDBhZGYyLCAweDBiYWM5MzZhLCAweDNjZTcyZTUwLAorCTB4OWFmMmYzY2MsIDB4YjNkNTViMWUsIDB4YjQ3ZjA2MjgsIDB4ZDVmZGYyOGMsIDB4YmFiZjA4YzgsIDB4ZTQ5MWJkN2MsCisJMHgzNzI1YjM1ZSwgMHgyOGY3NzJmOSwgMHg5ZmJiOWY0MywgMHhkZTdhOTRlNCwgMHg3OTk4OGY1NSwgMHhkYjhmOGFiZSwKKwkweDdiYmVlOWQxLCAweDNhMjYwZjI5LCAweDdlYTg2NTNmLCAweDQ0OWQyM2Q1LCAweDEzN2Y2YTBmLCAweGM1ZjI4ZjhlLAorCTB4MTVjNTIzNzIsIDB4ODE4ZmExY2UsIDB4YjcyYjNiNzEsIDB4NTlkN2EyMzMsIDB4YzA5OGM4ODksIDB4N2QwNjYzZjEsCisJMHg0OTYwNzQ5OSwgMHgxMDZiOGUxYywgMHg2YTBiZGNmZSwgMHhjY2ExYTQ1YywgMHhkZTc4ODllYywgMHhiOTk5NWI3MCwKKwkweDlhNGU4MjNhLCAweDhlMGZjZjE5LCAweDIzMzdmZjFlLCAweGFjMjJmYjU1LCAweGE4MGM2M2IxLCAweDk0YzYzMTdmLAorCTB4OTdlZDlmMjYsIDB4ZjI3ODY0M2IsIDB4MDM5NWI0ZmMsIDB4MGVlM2NjN2MsIDB4YzVhM2U3NDMsIDB4MjMyZGJlNzEsCisJMHhmMzBkYWM3YiwgMHg1ZTBlYzBkMiwgMHgwNDYwYjBkMywgMHhmNjRkYjdlMiwgMHgzYzAzNjhiZCwgMHhhMjY4N2VmNCwKKwkweDBiZGZlYTNjLCAweDdjMTZlZDNlLCAweDA1ZjlkNDNhLCAweGQyMzAwMWQ5LCAweDFkOWM3YjE4LCAweDgwZTI5N2M0LAorCTB4MjMyN2M2NGUsIDB4ZWJlNzM0NWYsIDB4ZjYzMTQyZWEsIDB4ZjNlYzVjNzksIDB4Nzg3OGY2MzIsIDB4YzdiM2Y3ZTQsCisJMHgxYWZlODkwZiwgMHg2ZGVkMWM3YiwgMHg0NmZkZDQ0ZiwgMHhiNjc2OGMyNCwgMHg3ZTNkODYyNywgMHgwNWYxMTI0MiwKKwkweGMyNzQyNzkxLCAweDBkZDVkY2UwLCAweDM5MzEzOTc4LCAweDU2OTdiZTk5LCAweDVkZWZjMDkwLCAweDUyN2ZhMDRlLAorCTB4YWJjODdlMDYsIDB4N2VkMWYzYTcsIDB4N2ZmNTJkOTksIDB4NDNmODQ5MTcsIDB4NDdmMDYwOGMsIDB4NjJmOTA1ZmUsCisJMHhiNmJmZjMwZSwgMHhlMjNlMjI0OCwgMHgxYjc4MzVmNywgMHg3M2U1N2U5ZiwgMHhkMTkyMzZkZSwgMHhmOWMwMzZiYSwKKwkweGRiNDZmZGUxLCAweDYyMzNmOWM1LCAweDhlYTQ2N2RkLCAweDUwMzdmZDUyLCAweDEzZWYxMTY1LCAweDg4OWQzYzMzLAorCTB4Zjc0MWFjZmIsIDB4NzJmNzUxNzQsIDB4OWZkMzZkNzgsIDB4ZGMxZmFjNzcsIDB4ZWQ3Mjg2ZmYsIDB4OGI4NmQ5YmQsCisJMHg1YTYyMmUzYywgMHg0YjhmNDJjMiwgMHg2ZGFhOTc5OCwgMHgxMGNlYTliZiwgMHhiOWE4MmY3ZCwgMHg2YmQ5YmI0ZiwKKwkweDdkMGY1ZTg4LCAweGQ2MjFkNDE3LCAweDFmNzFkZDliLCAweGNkNGZiZmRkLCAweGE2NDRmOWU2LCAweDA0ZTI4YzY1LAorCTB4YTY2ZGY3ZDEsIDB4M2QxZTVkYjEsIDB4OGMwZGNmZGEsIDB4MzhlOGZkZWMsIDB4NTJhOWU2MzksIDB4YjE4MWIwZmMsCisJMHg3OWU1MTIyZCwgMHg3OTczZGY2YiwgMHhmZTczZmVhNiwgMHgzYWQ2OTQ3ZCwgMHg3NjBlYzc5YywgMHhkMWQzZGExMCwKKwkweGY3YTg0OWVmLCAweDUxZjdlYTVhLCAweGRmYWIzYzU1LCAweDRkYmY0YThmLCAweGMxNjNlYjQ3LCAweGM2YWVkNDI5LAorCTB4Yjg3YmYxZmQsIDB4ZjkxMWU5NTUsIDB4N2Y1ODJiZTQsIDB4MmI3ZjdhN2YsIDB4OWJkZjdiMTgsIDB4Y2YyOWVhZGIsCisJMHg3ZmJjNzMyMCwgMHhiMjlhMTg2YywgMHhjODc4NDYxNCwgMHg2ZmM4Yzg1YSwgMHhmMjY4M2MwMCwgMHhkYmQ5NGMwOSwKKwkweDE2ZTc5ZjY5LCAweDIyNGMzNjMzLCAweDMzZGE2ODNjLCAweGZkZDNkMzQwLCAweDdlNmQ0MmMwLCAweDAzNTNlYzAxLAorCTB4NTdhYmZiNDcsIDB4ZDk0ZDUzZjIsIDB4ZjM5NTk3ZjksIDB4OWE2MzhhNTcsIDB4OTRlNGJkYzQsIDB4OTdmYmUyNTEsCisJMHhlZDE0YWNhNSwgMHg5ZWRiZjRhMiwgMHgwNzM4ZjNhMSwgMHg1ZjcxODFlNywgMHhkZDYyOWM3NCwgMHhmMTgyNmUzYiwKKwkweDc3ZmM4ZmQxLCAweGUyY2QyZmMxLCAweGFlZmQ1YjZlLCAweGY0YzhmMzBmLCAweGNlNTQ5YjFlLCAweGYzMGQyY2Q3LAorCTB4MTJlOTdiZjIsIDB4OGE2ZTdjNDYsIDB4OGZjYzY2NjcsIDB4MWU0YzJhOTcsIDB4MDRjOWJiYzQsIDB4MzI1OTZjMzAsCisJMHhkNDA2NzMzMiwgMHg3YjNjNDVlYiwgMHg4NDY0YzQ4ZCwgMHhmMzMxNTU5OSwgMHg1ZGZhYTNmOCwgMHg1NzdkMTBhMSwKKwkweGQ0NzlhODY4LCAweDIwYjIyYmVmLCAweDY3OWQ0ZTdmLCAweDJlZjU3N2QwLCAweDdiZjkzY2YzLCAweDZiZTdlOGQ2LAorCTB4Y2VhOTllMjksIDB4ODdmZTE0M2YsIDB4YmZkZThlZmEsIDB4ODEzN2JjZDUsIDB4NDQxZDUzYzcsIDB4ZjQwMzhkYWYsCisJMHg0MTdjZjA0YSwgMHhjYTNjZjg4ZiwgMHg2NmQ1YmI4NSwgMHhmYTI5NTc3YiwgMHg0YzFlNjcwZiwgMHgxMTRhMzY1MCwKKwkweGQyY2UwOGZiLCAweDdlMDNlZmYzLCAweGQ3ZmFmMWJmLCAweGJjOTI3NzYxLCAweDE4OTdkZmVmLCAweDhiZWVmYmVmLAorCTB4ZGFlNDIyZmUsIDB4MDk1OTdjM2EsIDB4MTkxYTVlZjMsIDB4ZmJhNDMxZTUsIDB4Mjk5NzNmYWEsIDB4YTBmNjAwZmYsCisJMHhkZjExMTM5MSwgMHhkNmYxODA0OSwgMHgxZmVmY2UzZCwgMHgzZTc3ZTMzNiwgMHhjMGU3ZmVmMCwgMHgxM2VkZmU0MCwKKwkweGQxZjc2YzE2LCAweGJjZDQzNjc3LCAweDVkYTNjYzVjLCAweDNlZjAzMjViLCAweDgzN2RmNDcyLCAweDg5YzYxMWJkLAorCTB4OTliMjZmOTgsIDB4OWY0MDEzMDUsIDB4MDUzMWY0YTQsIDB4YjllY2YzYmYsIDB4MDNhNjU0NjgsIDB4YTA3ZDZjN2UsCisJMHg5M2JmMDE1MCwgMHhhNWVlODk5OSwgMHgzMzdlYWQyYSwgMHgwYWUxMGVmZiwgMHhlZjY3NjkxNiwgMHhlZmE1NmU5NywKKwkweDY0YmY4NmJkLCAweDNlMTRiZjk0LCAweGMzZWU4OGNmLCAweDcwYzRjMzlmLCAweGRkZjhmZjJlLCAweGNiZTQ3YWZiLAorCTB4N2E1ZDdkYTksIDB4ZmI5M2YzZDQsIDB4ZjY3ZmE0ZmMsIDB4ZWQzZDRmZDksIDB4OTk2MmU3ZTIsIDB4NzUxZjkxMTEsCisJMHhjZjU0NWIxZCwgMHg5NzlmOGFlOSwgMHg1ZjI3ZWEyYywgMHhmZGY4NmEzMCwgMHg0NmEzNWVkYSwgMHg1YjE3YzgxZSwKKwkweDY1ZmQ0NmJlLCAweDY3YWE4OWVhLCAweGUzZTMzZmQzLCAweDJkZGUyOGY5LCAweDUzZWRiNWRiLCAweGRiZDAzZTQ0LAorCTB4YzM1ZmRmMmEsIDB4YmM3M2ExYWUsIDB4Y2YzMzE2OTgsIDB4ZDVkY2UwNmUsIDB4NzFlMjZlNzMsIDB4NzljN2M2NzQsCisJMHg5ZmY3OTQ2ZSwgMHhmZjQwNGQ0NiwgMHhlODcxNDdjMCwgMHhkODJmYzQ2NCwgMHhkZDk1MjkxNywgMHg1ODc5OGVjYywKKwkweDhlOTk0Y2U1LCAweGYzYjJiZDcyLCAweGU0ODdhNDFkLCAweDNjMGYzY2IzLCAweDVmZmRmYzdhLCAweDdlODU5NWJlLAorCTB4OWRjOTllYzMsIDB4ZWQyZjY4NTksIDB4M2QxNWYyZjksIDB4ZDNkNTU3OGUsIDB4MTkzZWIwY2IsIDB4NThhNDFlNGEsCisJMHgxMGFhNzg0YywgMHhjZjUwMzNiNCwgMHhmNTkxNDRlMywgMHhlNzRhOWViNCwgMHhjZmU0ZTU2NSwgMHg4NzFhNGU1MCwKKwkweGQ5MzNkZjZlLCAweDg3ZTRjMmMyLCAweDNkYTAyNjc1LCAweGZlN2M3Y2M3LCAweDU3Y2FiMzY0LCAweDcwOTcyZmVjLAorCTB4OWY4MTg0NWUsIDB4NTJlYTU0ZjYsIDB4N2I5ZjYxNmEsIDB4NmMxNTkxOWUsIDB4NDZmM2QzZGMsIDB4ZTdiZmNlMDIsCisJMHg3YWNkMzllYywgMHhmMzIyZmU5OCwgMHg1YWZiYWM0NSwgMHgyYjUzZWU3MSwgMHg3ZWZlYzk3YiwgMHhmOTJiYWM0YSwKKwkweGExYzUyZjZjLCAweDMwZGU5NTUzLCAweGMzZDRkYmVhLCAweDM3ZmVmYTdhLCAweGM4YmNmMGIzLCAweDM4YTE0YzYxLAorCTB4ZmM1ZWJhOWEsIDB4ZDczZTJhNmUsIDB4ODhkZTcyODIsIDB4NTYzMmIzZmIsIDB4Mjg3ZWVjMjgsIDB4NTU4MzJhMzMsCisJMHhjYzlhOGY5OCwgMHg2YjQ4NGE3NiwgMHg0MTdkMmI1MywgMHhhNWU0ZTdhNCwgMHhhZDkzOWU5YywgMHhiZjE4YzNmZSwKKwkweGEzYWY1ZTRmLCAweDU5ZjI0NTM4LCAweGNiZjQwNmRmLCAweDA1NjVjYjkyLCAweGY4NGFlNGM5LCAweGI3ZjMxMGVjLAorCTB4ZjlkNGY5OGEsIDB4YTg4Y2Y1ZDUsIDB4N2VlODRiZjQsIDB4NjJlM2IzMjQsIDB4MTMyYWFlZmUsIDB4Y2M1YWJmOGUsCisJMHg1OWViMTRlZiwgMHgyYzNiZThjNSwgMHg1NWFkNjdjOSwgMHg4MzI3MmZlOCwgMHgzM2RmNDE5ZCwgMHg5YTc5ZTJiOCwKKwkweGI3NDVmMzM1LCAweDk5ZDk0ZjI3LCAweGIxZTBlNzQ1LCAweGUzMGFkOTFlLCAweDM2NWI2NGE1LCAweGNlYjk0MTU0LAorCTB4MzJmZjIzYTEsIDB4M2M1MTg3YTksIDB4OWQyN2E5M2QsIDB4NGY1MjdkZTQsIDB4OGEyNzI4YTEsIDB4MGY0MjY5ZmEsCisJMHhkNDkzMzk3MCwgMHhhZjJkNTBmMywgMHhhNGQyYTE2ZiwgMHgzZjg3MTdjYSwgMHhkYTk4ZmI4YywgMHg3MTdjYjhjYiwKKwkweDk4YmU0OTc4LCAweDUxN2NiOGQyLCAweDk1NTZiOGU5LCAweDMyNWFjYzJiLCAweDBmZjdlYTFmLCAweDA2YjVhY2ZmLAorCTB4NzNmNzdiOWUsIDB4YmJlNWZlZmUsIDB4YmNiZTVjZDksIDB4ZmJmNzI1ZmIsIDB4ZDNiZjY5NGQsIDB4NDJhYTVjYTMsCisJMHg0ZGZhMDVjMywgMHgzM2VkYzBiYiwgMHhiYWFiMWY5NSwgMHg0ODExMzYyNSwgMHhlNzgzOWE2MywgMHhjOGJhMWY4NywKKwkweGQ5ODQzYjlmLCAweDYzYWYwMGQ1LCAweDk1MjljOTEyLCAweGRkMDU2YjZlLCAweDgzZWFiM2FlLCAweDgxZmVkODQ5LAorCTB4MzQ3N2RlODksIDB4OThlNWNlMzksIDB4ODNmZTFlYzEsIDB4N2M0MWY3YWUsIDB4MzNmN2Y4ZWYsIDB4NDE1ZGVmN2EsCisJMHg0MzdlODJmNSwgMHg5YTJlNDk0YiwgMHhlNDM5NmM4NCwgMHgzZTQxNjA1OCwgMHhhZTQ4Nzk4NCwgMHhlOTE4NzIxZSwKKwkweDNhMDgwZWJjLCAweGU5YWY2NzNlLCAweDViM2ZjMzA4LCAweDY5ZmNkZmNjLCAweGMxZmZkNDNlLCAweDkzNDBlYjllLAorCTB4MWU5NzNkNGMsIDB4ODg1ZjJmNDEsIDB4ZTgyYjNiZjMsIDB4N2JkZDI5YTYsIDB4ZmMwNGM5NTMsIDB4Y2QxZTYyZmUsCisJMHgwZGZlY2U3YiwgMHhkY2IyN2ZiZCwgMHhjNjlmMWZmNiwgMHgzYWE3MmVmYSwgMHg0ZjdjZmE4ZSwgMHhjZjE5YTU2OCwKKwkweDFmOWJkMGY1LCAweGFiYjQ0MDlmLCAweDdiMjM1ZmUzLCAweDdlZTNlNGVmLCAweGQwZjg5YTMzLCAweDc4Y2YzYjEyLAorCTB4YWRmM2ZjOTAsIDB4OGI3Zjk2ODgsIDB4YzgwZjg2NGEsIDB4OTE2NjdhYmYsIDB4ZTcxMjFlNzksIDB4MWU0MjU5ZWIsCisJMHhkZGI4NTU0ZCwgMHhlN2U1NmY1ZSwgMHg1ZmIyNWY1NSwgMHg4YjhhZmVhNiwgMHhkMmFmNTVmNiwgMHg1YWU0ZjI4ZCwKKwkweGYyOWI3ZmU0LCAweDdkNGJkMTI0LCAweGJkOTdhNzNlLCAweDBhMGY5ZTgyLCAweDYzZWNjZTdjLCAweGVkOTdlODlkLAorCTB4MTk2ZTk4MmYsIDB4ZTIzZWY4MGIsIDB4MWNmZjEzZDIsIDB4NTJjNmJiMTksIDB4MjkxZGNmMDYsIDB4MDI0YmYwOTUsCisJMHhkNmM5N2E2YywgMHhjZjAwYTliNSwgMHhhN2EyMjQ1MiwgMHgxZGFkOTJmYSwgMHg5NjdmZDA0ZCwgMHgwM2E5NDEzNSwKKwkweGIzZjllOGY4LCAweDBlYWYzNDE2LCAweDk3ODRiYzA1LCAweGUzZjg3MmU5LCAweDFiOWUxNzU0LCAweGNhY2NkM2M3LAorCTB4NGZmZThjYjAsIDB4OGNiZjYzYmQsIDB4YzQ2ZGY2ZmEsIDB4MmVlMzExYWIsIDB4NzU2N2MxMWUsIDB4NmE1NzFmMDQsCisJMHgyMzhmYjgyYywgMHgyZjIxMjZhNSwgMHg1ZTUxZTMzZCwgMHhkNTM3Y2FjZSwgMHg3Yzc1YTE4ZiwgMHgxYTRjNmM3ZCwKKwkweDUwNmY3N2JlLCAweGE3M2M5NWY4LCAweDdlODJjOWZmLCAweDZiMjdjY2VhLCAweGNjZGZhMDUzLCAweGQ3MTk2NjkyLAorCTB4OTEyY2Q0N2IsIDB4ZDdkYTNjZmMsIDB4Yzc5M2Y5NDQsIDB4ZDJhYzM5M2IsIDB4NzQwNzNkMmQsIDB4NWI2ZmJjNzksCisJMHg2ZmI2MTI3MywgMHhkNTNlNDg5NywgMHhlMjFkMmYyYiwgMHhhN2QzOGZlYSwgMHgwYjBmN2UzYSwgMHgzMDc3ZTFiNiwKKwkweGI3YWYyOWNmLCAweGIxZjUzZTYwLCAweGNjY2YwNWJlLCAweDdmMWMzYzAxLCAweGI4YzQzZjUzLCAweGMwYWQxZjRkLAorCTB4MjQ0Y2RmNzEsIDB4MzU2ZDllM2EsIDB4OGNiMWY0NjksIDB4NWU4NDY5NGUsIDB4ZDM2ZjFlYWQsIDB4MGQ0YWY1YzAsCisJMHgyOWNmZDNjNSwgMHg3ODA2ZTU5MiwgMHhhZDVkZjNkZSwgMHhkMTkxMzk3YiwgMHhiZDc3ZGE1MiwgMHhlMTRjN2JlOCwKKwkweGExY2M3OTdjLCAweGQ2M2NiZTIzLCAweDhhOWNiOGY3LCAweGZiNDY1OWYwLCAweGRlNzY5OTkxLCAweGIyMWE5MmZhLAorCTB4NWIyOWNlYWYsIDB4ODI2NzQ0ZjUsIDB4NTRmMWQ1MGYsIDB4NGY4YTNlM2EsIDB4OWNlZDFlMjMsIDB4NmRmNjhmZmYsCisJMHgxZGJkMjBiMywgMHhlMzIzYmY3NSwgMHg4OTY3NWQzOSwgMHhhMWQwNTcxYSwgMHg1ZGYwZGZhYSwgMHhkYTlmYTQ3MSwKKwkweDdlZjNmYjUxLCAweDM4NTFlYjg2LCAweGQ3OTQ2YmZlLCAweGQ1N2QyMzhmLCAweGE3YTI2NDNiLCAweDlhZmVjYWEzLAorCTB4MjdiZjg2MTQsIDB4ZmZlY2QyNjIsIDB4OWFjOTFkZmUsIDB4ZGE3NTk3ZjEsIDB4NWRiNDcwMzQsIDB4ZGJmZGNmYjUsCisJMHgwZWM0Y2JhNywgMHhkODQ3YTQ2NiwgMHgzZWMyZjk0NywgMHhlMDc3MWZkMiwgMHgxNzY4YWVmYSwgMHhmN2U4ZWIyOSwKKwkweDQ1ZDkwNjQ5LCAweDhhMmVkY2Y5LCAweGJlNTQ4N2I2LCAweGI4ODlkNjZlLCAweDY1Yzc4ZWFjLCAweDU4ZGZmOWEzLAorCTB4ZjFlZWMzZmEsIDB4OGU0OTJhZDgsIDB4YzY1YmJmYmMsIDB4YmU5MDczYmEsIDB4ODYxMmEzZTYsIDB4NzVkMDFlZjEsCisJMHgxNWZjMjNhNywgMHgwNzhiNmRlYiwgMHhjY2FkN2MzOSwgMHhiZmJmNjk3NiwgMHgzZjM3YmZjYSwgMHgxZTc3ZDRiZSwKKwkweDM2NzQ5NWU1LCAweDY1NjFkZjRjLCAweDA3ZTUxOGFiLCAweDllNzg2YmU4LCAweGFkNjY1ZTExLCAweDI1OGJkNDg4LAorCTB4OGQyZGYxZmQsIDB4ZDg0YmE0NWQsIDB4YWM3ODg1OWIsIDB4ZjFlNDZiMzgsIDB4MzhlODllOGYsIDB4ODUxZmVhOTcsCisJMHhhZTJiZjIyNSwgMHg5M2VhMmU1MiwgMHhlNjdiYjhmOSwgMHg3ZjY3NzhmMCwgMHg5MzhmMzM3OSwgMHhlNWZjMDkxNSwKKwkweDVkNjkxYTk0LCAweGRjZjc4MDhhLCAweGI1OWVmYjE2LCAweDQxZmE1NGE0LCAweDA3ZGZhMmY5LCAweGVmODAyOWRmLAorCTB4NjFlNjkwYWYsIDB4YjE1NTNkOWUsIDB4Y2E1MjkxZDcsIDB4OTc3N2I1ZTMsIDB4YTE0YWYyNzgsIDB4MTVmMTJhMmMsCisJMHgzZDVlMjI5NiwgMHg3N2QzNWY2MCwgMHg5ZjY0M2RjNSwgMHgzM2JjZTNhOSwgMHhmZDE2ZTNjYSwgMHhiY2M5NjE0NiwKKwkweGVlOGYwZWRjLCAweDY4NjNlZDA3LCAweGUzZDg4NjljLCAweDdhMzhmYjQwLCAweGY2ZWM2ZTdlLCAweGZjMzliODQzLAorCTB4MzBmYjIzN2QsIDB4MGMwNjQzZDIsIDB4NTJmMmE2NjQsIDB4MTZlNWUzMmEsIDB4ODg0NmFlZmEsIDB4MWUwZGU3ZmIsCisJMHg5MTQ2ZjNkMiwgMHgxMDM3ODhhZiwgMHhmNGM3ZmM5MSwgMHgxY2JlMzRmNSwgMHg1OGY3NDE5ZSwgMHg4MzI1ZDgyZCwKKwkweDc2OTFmOWZiLCAweDZhODRhYzk0LCAweDZhYWRlMzIyLCAweGRmOTRhOGI5LCAweDE1MjhjZTczLCAweDYwNGNmM2VmLAorCTB4YThhZmM4MTMsIDB4ZWEzY2ZjYmMsIDB4YzNjZDQzZjMsIDB4Yzg1NzY1ZWMsIDB4NjNmMzVlN2IsIDB4YzNmYTQ5ZDMsCisJMHhhNTVmMjdlNCwgMHg0YTBlNjA3ZCwgMHgxZjM5ZGY5MSwgMHg0YTg5YmY2YSwgMHhjMjhhMWM5NCwgMHg1Y2YzNTBkMywKKwkweDIyZGM3OWVkLCAweGQ3NmFmNmU4LCAweGNjN2E2NTVkLCAweDJlZDFmOTRlLCAweDA1NmIwN2NlLCAweGQ1ZGJmNTdkLAorCTB4YmUzZjFlM2YsIDB4ZmU4NjFmM2YsIDB4ZmVmYmQ5Y2EsIDB4NGE3ZWY4OTMsIDB4MzdhNTY4NDIsIDB4MTQ1ZTdlYzYsCisJMHhlNTMxZjlmYiwgMHhjZTcwZDNjMSwgMHhmYmExOGMxYiwgMHgwNzk5ZGVkMSwgMHhkMjAyNjNhNywgMHhmMWYyYzc3YiwKKwkweDllYjAwNWYwLCAweDJkZmNjNTM3LCAweDZmZWI5NTk2LCAweDFjNWI0Nzg1LCAweDFlZjk5OGJhLCAweDdhNzhmZTZmLAorCTB4ZDkzZjBkYTIsIDB4ZGNlMzk1ZmYsIDB4YTcyMDZkZmIsIDB4ZDA3ZDFlNWIsIDB4NzU4MWIwYWMsIDB4MTVkOTZiMzAsCisJMHhlMzQ3ZjljZSwgMHg2ZDVkNzUxMywgMHg2MjVlMzA1YiwgMHhmN2FhYmQ0ZCwgMHhhZjVjNWExNCwgMHg2OTdkZTAyNCwKKwkweDc2NGRlN2VkLCAweGI0NDYwZWZjLCAweDQzYzZhMDNkLCAweGM2YTViZDU0LCAweGE0YmI1NDRkLCAweDFmZTNjMWMyLAorCTB4N2JmY2VkMzMsIDB4NjlmNjE1M2QsIDB4YjIwZmRmYTQsIDB4YWZmMjFhYWUsIDB4MjI2ZDNiMzAsIDB4MTlmZDBhYjEsCisJMHhlNGZiNWFkZCwgMHg0NjU3YmYzYSwgMHg5ZWRhMmEzYiwgMHg0NTMzNGRhOCwgMHg3YWJkMDdkOSwgMHgxNzE1ZGY5NCwKKwkweGZlNTRmZGI1LCAweGM0NTRhY2Y4LCAweDE3Nzk1NDUxLCAweGNmOWE0NzY1LCAweGJiNDA0OTlmLCAweDY3MGJlZGViLAorCTB4OGQxNDJlMjgsIDB4NWMyZWViOWYsIDB4YWViZDlmZGUsIDB4ODNmNzRmNWQsIDB4YjdhZDcxZDEsIDB4ZmRkMmU0MmYsCisJMHgxYmFmMTFhMCwgMHhjY2NhZDRjMSwgMHg4MDhjYzQzZiwgMHg2YjdiNGM5NywgMHgxOGVjMTE5NSwgMHhmODI5ODNhMywKKwkweDU4ZmMzNmRkLCAweDhkMGRjNjMzLCAweDdjOWM3ODE3LCAweGQ3ZmI5ZDg0LCAweDJmYzE4Yjg5LCAweDk1MzM1MTg1LAorCTB4NzhjMTdkYTAsIDB4ZWY0OGNlN2MsIDB4ZWY1ZDk5ZDMsIDB4MDliZGJkOTEsIDB4OWUyMTg2ZWEsIDB4YTYxOTllYzcsCisJMHg1MzA3MTE4YiwgMHhjMDhhNjNjZiwgMHhiN2U2NmVlZiwgMHg0ZDgxZWZlMywgMHhmN2Y3OGJiMSwgMHg1OWRiNDYyZSwKKwkweGEyMmQzY2ZjLCAweDJkNjJlMjdmLCAweDNjZTIyZDNlLCAweDQzNWI4MzI3LCAweGQzZWM3OWRmLCAweGU3MTE2ZjNlLAorCTB4ZmIxYTU5NmIsIDB4NjNhM2VjMWMsIDB4N2FhMjQzOWYsIDB4YzViNjEzMGUsIDB4NTk2YzM5ZTEsIDB4NzU4YTRkYmMsCisJMHgyZjhiOTkwZSwgMHg4NDViMGU3ZiwgMHhlZmQyYTk1ZiwgMHhiMjA0YWNiNCwgMHhlOGE2ZjdhZiwgMHg3YjQxZmJlOCwKKwkweGNiNTljMzEzLCAweGIyZmRmZTMxLCAweGFjY2ZkZTk5LCAweGI0MzY3MTEwLCAweDZiOWYxMGE0LCAweDg0YmY5N2I3LAorCTB4YTM3MWRiNzEsIDB4N2I4ZTc0ZjUsIDB4YmNmZmQxMjUsIDB4NjBmZWZmOGUsIDB4MWZlYTc4Y2YsIDB4Zjg4M2IzMjcsCisJMHhmYjA3ODBiYiwgMHgxYmJiZTlhYSwgMHhkM2JiZmNkMSwgMHgzM2RkMDA3YSwgMHgzZGI5Y2ViNiwgMHg4MzljMDE2YiwKKwkweDk5ODBmYjI1LCAweGNmODM5YmZiLCAweDRhM2ZlZjA3LCAweDdiNGJiZTA1LCAweGE2NTRiOWY4LCAweGJkYTNkNDlkLAorCTB4ZWM2NmYyNWUsIDB4OGZlMzUxZjMsIDB4M2E5ZGE0N2IsIDB4YWEzNjJiMjAsIDB4OThmYzhiYWYsIDB4ZWNhMzNiOTEsCisJMHg2NDJkYjNlOSwgMHg0N2M2NWI2NywgMHgzOWMwZjdkNSwgMHg5ZjhlYmRkMSwgMHhhMWQ5MTZlYywgMHg4N2ViYWYzZCwKKwkweDExNGFhNzM4LCAweDdkN2YzMDg3LCAweGZiNjVlMjhhLCAweDdlNzE0ZWZhLCAweDI1YzZkMWU5LCAweGZlNWRmNzI3LAorCTB4ZTcxMzVlOWMsIDB4YTFjNDUzYjQsIDB4MDBlMjJlN2UsIDB4N2U3ZmMyOWQsIDB4ZjJhNGUwMjMsIDB4ZWE5YjgwY2QsCisJMHgwNDI4MGFkZiwgMHgwYjk0MGFlZiwgMHg3N2NmYzE2MSwgMHg0N2NiM2U1NiwgMHg4NGFhYWYxNywgMHhjZjQ3ZWRmYiwKKwkweDdmN2RiZjczLCAweGJlODNhODYyLCAweDQyZGU3NGVmLCAweGJkYTQxN2RmLCAweGRiYmYxNDRkLCAweDJjNzI3YzA3LAorCTB4MWZiZjQ5Y2UsIDB4NGNkYjM0NzgsIDB4YTVhM2IzZjEsIDB4OGE3YmZiYmYsIDB4ZDE2YjdjYmIsIDB4YzcwYmI4ZjEsCisJMHhlYjRlN2FiMywgMHg2ZjE4NGU3MCwgMHhlZThiODU1ZCwgMHg0N2UwMzZhNSwgMHhlZWZmYTExNCwgMHhmZmJlODkzMiwKKwkweDA0MGUxYjM0LCAweDNhNTQ0NWVmLCAweGYxNjlmNTM3LCAweDY1ZmYwZjU5LCAweDFkZGZmMTk1LCAweDYxN2Y0MmM4LAorCTB4YTRlODhiOGMsIDB4MjI3M2VmNDIsIDB4NGZiYTM3M2UsIDB4NTcxZTVmOTEsIDB4ODcxYmVlZDgsIDB4N2FmMTgwNzEsCisJMHgxNGZiYmUyNiwgMHgzYmFjNDUzNCwgMHhlMDQyNmYwZSwgMHg0NDg5NTM3OSwgMHgwYTFhNzNkZiwgMHg4NmU1ZDFiZiwKKwkweGEzMmZhZTU0LCAweDM0NzVmZmViLCAweGRkMWI4M2Q3LCAweDc3M2NlOGRiLCAweDUwYjJiYTNiLCAweGY5MTNlZmFmLAorCTB4Mjk2NGIzMTAsIDB4Mjg1ZmJmNDgsIDB4MWNiMWRkNzcsIDB4NjU5MTViZjYsIDB4YzAxMWJiMWYsIDB4Njg1M2EzMmQsCisJMHg0ZjRhZmJmZCwgMHhkOGY4MWM1MywgMHgyMWM2NTc4NSwgMHg3NmIzMWRmZCwgMHg3OWNlMzA1YSwgMHg1M2RmYzljYywKKwkweGY5OTUxMzg3LCAweGYyOWRiNzdiLCAweGE0ZjIzMTJkLCAweGU5NThmMmQ1LCAweDk1ZmRmYTIyLCAweGVmN2NmYzdmLAorCTB4ZGY3Y2QxZGEsIDB4MGFmNTUyNGMsIDB4ZmI4MTViOGMsIDB4ZGVmOTQyNGQsIDB4YzNmOTAyYjIsIDB4ZmM4M2I5OTgsCisJMHhhYTczZThjYywgMHg4OGIzNWY3MCwgMHhmYzY0ZjNkZSwgMHhiNmJmNGY3YiwgMHgzZjc4MmM4NiwgMHgwMjY3ZWQxYywKKwkweGZmNDI2YzdkLCAweDNkMDRmNzc4LCAweDVlYWRhZjdkLCAweGU3ODJlN2U2LCAweDFmYTRlNzg4LCAweDk5N2UxM2EzLAorCTB4NjU2NjdjNzYsIDB4YzBmYTYzM2UsIDB4ZGUxZDYwNzksIDB4ZjEzYWQwZDcsIDB4YWRlZmFhM2UsIDB4Zjg2MjkyYmYsCisJMHhjOWQ2ODNiNSwgMHhmOTU4OWVmYywgMHhjZGNmZDFiMCwgMHg5YTIwYjI3NiwgMHgxNjE1YjM4NiwgMHg3MDlmYTE3NiwKKwkweDk5YzY5ZjMwLCAweGNjZTNlNTZkLCAweDliN2M3MTEyLCAweDE3NTlmZmEwLCAweDgxZGY5NDc1LCAweGNmODBkNmY0LAorCTB4NzkyN2NjOTUsIDB4NTBmNWNjNzIsIDB4YjdhYzFkNTcsIDB4NDFjNmNlMWUsIDB4NTY5MzQ2ZmUsIDB4NWIzOTA5MGUsCisJMHhmNzQ1NTI1ZiwgMHgwN2RjYzdiZCwgMHhiZmJlYTNjNiwgMHhlMWU1NzRiZSwgMHg5ZmMyMjczMiwgMHhiNzQxNTRkNCwKKwkweGQ1MmZhNTI5LCAweDk0NWE1ZDIwLCAweDRjMmY4YTJlLCAweDVkNzRjYjc2LCAweDM2Yjk3ZDc4LCAweDE3YWZkMTRlLAorCTB4YjQ0YmY0YTMsIDB4OTI4ZmE4YmUsIDB4NTRmNzExM2IsIDB4ZjljNDQzNGUsIDB4NGI5ZjcyY2YsIDB4YWI4M2E0ODgsCisJMHgyZjFjY2JjNywgMHhkNjdiYWY3ZSwgMHgxZGE3MWUwNSwgMHhlOWY3OTc4YywgMHg3ODAzYTU3MywgMHhkOGVmM2U4OSwKKwkweGE3M2U4OTc4LCAweGVhYWQzYzAxLCAweDhjMWRjYmFhLCAweGJmNmYxNTVmLCAweDFhYzk3OTJlLCAweDhkMWJlNzk5LAorCTB4YWY4YTFmYjcsIDB4NDE1NmQxZTYsIDB4NTc5ZTVjYWYsIDB4M2I3ZGJlMDgsIDB4Yjc3MTQ0M2IsIDB4ZWZmOTRiYjcsCisJMHhmZjczMWQ0YiwgMHhiM2JmZTI5NiwgMHgwZDYzYTg1OCwgMHhjYmUwNDVjYSwgMHhlOGY5NDIzOSwgMHgzNDRjZTQyMywKKwkweGY0ZjgwNjFlLCAweGJmMmUyODNmLCAweDI4YjdmM2ZiLCAweDIxY2FhYTJlLCAweGVhMjVmMjEzLCAweGVhMWZjMTEzLAorCTB4MWY5MDk5YjksIDB4ZjAyZjZmOTEsIDB4MmQ1ZTg3ZWYsIDB4NDU3Y2E4N2YsIDB4MzgzZjIxZWIsIDB4MWZjYzhmYTQsCisJMHg1ZmM1ZGZmYywgMHgxOGNkNzE3YiwgMHg1MjE2NzYxNywgMHhkMWNhYjgzYywgMHhhYzdiYzdhNSwgMHgzZGQyNTBjOSwKKwkweGQyN2Y4ODkyLCAweGY1OTE5YzNhLCAweDU5MWM2ZTNjLCAweGExMmY3MTRmLCAweGE2YjhkNGY3LCAweGJiM2ViZWRhLAorCTB4NTUxODQxMmIsIDB4YzI0ZDQ3YTQsIDB4YzRmZDUxZGUsIDB4NjQ1MzhlN2QsIDB4NTRmYWFhN2YsIDB4NTdmZWY3MTYsCisJMHgwOGY3NGZhYiwgMHhmYjU0M2E3ZCwgMHg3OWJiNzNkZSwgMHg0M2NiZTdkYywgMHgxYzgwMGYzZCwgMHhhNDZmOWM5ZiwKKwkweDBlNGNiOGVmLCAweGEzZGZjYzNmLCAweGZlNDk4NDcwLCAweDkxMzc3NDZmLCAweDY5ZmIwYzFmLCAweGU2MDRhMzQ2LAorCTB4ZjNlNjQ0NzUsIDB4ZjNiZWU1YTksIDB4ZWZkNjBhNmQsIDB4MGFmNGJiOTUsIDB4MTZmZjA3ZjUsIDB4NTY4NjAzZTAsCisJMHgwZDg2OWRmYSwgMHgxMzdkNzM4ZiwgMHhkNjUxZjQ1NywgMHhiYTgzZGVlNSwgMHhlNjk5NGZiMywgMHg2MWVmYzI0YSwKKwkweGRmODM1ZjZmLCAweDhjMmEwYjAxLCAweGI1OThlYmJlLCAweGVlNDU4YmI0LCAweGRjMzFhNWY3LCAweGZmOWM5ZGFmLAorCTB4NjgwNzFkZDYsIDB4NjllYTFmZGQsIDB4MDM1NzY4ZGQsIDB4OWQ5NjRmOWQsIDB4Y2ZlNzA1MGUsIDB4ZmQyM2RiZjYsCisJMHhmN2Q5N2RlYywgMHhiNzAwOWRkYSwgMHgwODZjNjk3YywgMHhhM2MzN2FkMSwgMHhlY2YzMDE3ZSwgMHgwNzhkNTczMywKKwkweDczZWQ4ZDRiLCAweDBiZjUxODFmLCAweDczNDZjN2MwLCAweGEzY2MwNGQ1LCAweGRiZGZiNmFjLCAweGRhZTUxZjNlLAorCTB4NjAyNjViZDksIDB4YmNlYzFiZmMsIDB4ODNiN2Q0NTYsIDB4Y2RiN2RmZjYsIDB4NWQzYmJmOGMsIDB4ZDY5Zjc4ZWQsCisJMHhhYmFmYTIzMSwgMHg1YWJmYmYwNiwgMHg0OGY3ZTBlZCwgMHg4N2JlZDFiZSwgMHg3YjQwNGNjNiwgMHg3M2MxZWMzOSwKKwkweDBjOWYzNDRmLCAweDE2NGNkZDIyLCAweDJmMTc2NWViLCAweGJkNDFmYzUxLCAweDllNzNkOTk3LCAweGY4ZmY0N2QzLAorCTB4OGZiODBmNDAsIDB4NDU1Y2JmNmIsIDB4N2RiOTIyZjcsIDB4YTAyNmY5YmEsIDB4M2M3ZDc1ZDUsIDB4ZjFkYjBjN2YsCisJMHhiZjU4ZTA3YiwgMHgwMDFkODYyOCwgMHg0YmU3NWNmMywgMHhjYWViZjNjNiwgMHhkZTg2MzdiYSwgMHgzNmZiZWRjZCwKKwkweGY2ZTc4M2UwLCAweDQ0YmM3MDY0LCAweGMzMWU2ZmI3LCAweGFmYjg4MmVkLCAweDkyNzJjZmRlLCAweDdmZjVjMDNkLAorCTB4ZjMxMmMwYjAsIDB4YTliNzU1M2IsIDB4M2IxYWQyZmEsIDB4NTUyZDQ1MGYsIDB4MjNkYWE1NzksIDB4MjFiMzVmODAsCisJMHhjNjliYmYwMiwgMHg3Y2ZkZmY3MCwgMHhmMTAzYTdhOSwgMHg3ZmU3N2RmNywgMHhlNTBiNzEwYSwgMHhmNmNmNTJmMSwKKwkweGFlOTFjMzMxLCAweDk3YWQ1ZjA0LCAweGVlMDFjNjYzLCAweGM1YTNmMzFjLCAweDEzNDE2ZTJiLCAweDczYmVhYmVmLAorCTB4ODZlOTZmZTksIDB4NzQ0MWRiYTYsIDB4ZjhlOTUwNjUsIDB4ZmZlM2EyMjEsIDB4ZTI3YmY0OGIsIDB4MjBlZmQwZmIsCisJMHgxNGZlNzQ3OSwgMHhkMzQ3YzNkZCwgMHgwM2JmNGFiMSwgMHg5YmU2Yzg3NCwgMHg3OWU4MDY5MiwgMHg3ZWMxYmEyOCwKKwkweGU4MDY5MjhiLCAweGZiN2VhODdhLCAweDkzMWZiZmNlLCAweGU5YzYwN2RlLCAweGFiZGQyY2JkLCAweGQwNTliN2Y0LAorCTB4NTQwZjdhOTEsIDB4ZmQ3OWNlMjksIDB4ZmVlYzhjZDcsIDB4ZjU0NjNkYTMsIDB4N2UzNWM2NzcsIDB4Y2EzZmU4MTEsCisJMHg3MmIwYWVhMywgMHgzN2I0N2ZiOSwgMHgzZDE5ZmI5NywgMHg5YTlmYmE2NiwgMHhiZTI5NWVlOSwgMHgyMzVkMGRiYiwKKwkweGYyMTFhZGM2LCAweDc1ZGJhNjdlLCAweGVhYWYzOTU5LCAweGZkZGY1NTBiLCAweDQzNzc3YzRmLCAweDAwODAwMDk4LAorCTB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4Yzc1NDc0MGIsIDB4ZWViZDYwOTUsCisJMHg5MWE5M2ZkNywgMHgxNjg4M2U5ZSwgMHhjMDg1YTA5MiwgMHhlYjQwNDYxNiwgMHg3ZDNkMDVmZiwgMHhhNzFmMzIxMCwKKwkweDkwMGIxOGMxLCAweDA0ZTA4YjRjLCAweDYwZGQ0OTFiLCAweDllM2Q5MGUyLCAweDEyMzIzMWExLCAweDFmNjJjZDlmLAorCTB4YmQ2Njc4Y2MsIDB4OGMwMzBkMzksIDB4YzA3N2IxOWQsIDB4MGI2MTFjNTYsIDB4MzgzN2UyZGMsIDB4NzFjNmVjNGIsCisJMHgzYzRjOWMxOCwgMHg2YzA4NDNjMiwgMHhjNzE4ZDM2YywgMHhiYzRhYjI0MywgMHgwZjdhZGVmNywgMHgwYjc1NmJmNSwKKwkweGNjZWI0M2RiLCAweDQwZTc1NzY0LCAweGFhYmQ1ZWE5LCAweGZlZWI3NWJhLCAweDdhZDNkNTZmLCAweGNlY2M2MzMzLAorCTB4NTNmODE3ZDgsIDB4MDhhY2JjM2QsIDB4NjVjYjE5MWEsIDB4ZmMwNWYzZjQsIDB4ZWJmMmUyZGIsIDB4ZGY2MzJiMjUsCisJMHhiNGNiZWViOSwgMHgyYzkzZjk0MywgMHgxZTY3MGFkZiwgMHgzNTVmYWY2MywgMHhiMTg4YWNjYSwgMHhmNmUzYTlhZSwKKwkweGZhODdiM2VhLCAweDhjMDg3NThmLCAweDEyN2I0MzE1LCAweGVmNzY4Njc0LCAweDAwNzdjMTU0LCAweDI3ZDEzMTFlLAorCTB4N2QxZTlkMmUsIDB4ZmQ0YzlmZGUsIDB4ODc5NWNkYWUsIDB4OWQzMmZhYjMsIDB4YWY3YTY4NjMsIDB4NTliMThkM2UsCisJMHhjYTBlOWJmOCwgMHgzMzJkOTMyMCwgMHg1YWVkY2NhMCwgMHhjY2EwMTJjNywgMHg5NjM2ZjkyYywgMHhiMTJlNjI0YywKKwkweGYyOTMzMTg0LCAweDZiY2FlOTllLCAweDM5ZjAxNWRmLCAweGZlODMxOTkzLCAweDU2ZjU5NWViLCAweDBkNWQ3ZjMwLAorCTB4Y2NjZjMxYzAsIDB4Mzg4OWYxYmMsIDB4YzljOWQzN2EsIDB4OTdjZDVlZDAsIDB4ZDc2OWUzMGEsIDB4ZmU5ZmRlMWQsCisJMHhlNGYzMjlhNSwgMHg1NzJlMzYzMCwgMHhmYmNkZjVhMCwgMHhmMDRjZjk4YywgMHhlYjZlNzU2YiwgMHhlNzAzMzYwMiwKKwkweGQxY2M3MTg3LCAweDFlNjBhOWM3LCAweDFkMDFlOTk5LCAweDJhZGI1ZWU1LCAweGFhNmIzZmU4LCAweGFmZTVlMWM5LAorCTB4NmNkZWY4NGIsIDB4M2UxYmRmYzYsIDB4NGFjNjdhY2UsIDB4ZTJkOWM2ODYsIDB4NTRmYWM4MDksIDB4NGM0OThlYzYsCisJMHg2ZjViMmZlOSwgMHhmOGU3NjdjMSwgMHhiMjg1N2FjMywgMHhjZDZlNTMzZSwgMHhlYmNiYzQ1NSwgMHgwN2UxYzc5MiwKKwkweDg2MGY2Nzc4LCAweGNiMWQ2ZjhkLCAweDU1NjMzYTU4LCAweDhiOWY2OTlmLCAweDM4N2Q2ZDBlLCAweDU4ZmIzMDVjLAorCTB4NWY0ZmU1ZmEsIDB4MzM0NjdjYzAsIDB4NWQzOThmYzcsIDB4NWQ3OWY4NDcsIDB4M2U5MGZhMzIsIDB4ZWVkNGFlMmEsCisJMHg0YjE4OTM2MiwgMHhmYzg3ZWM5NiwgMHg5OTJhZGNmMCwgMHgzNjA1M2UxZCwgMHg3ZTUzZjYzMywgMHgwNDAyYjhhZiwKKwkweGMyOWZlZDA0LCAweDczODAxNGJmLCAweDVhZWY2ZTliLCAweDE2ZGRkMDI3LCAweGEyMWY0YzZjLCAweDRjMGIyNTk3LAorCTB4MmU5NjM4MWEsIDB4OWJkNGQ0NDksIDB4ZWE2OWM3OWEsIDB4ZDQ0ZjU3Y2IsIDB4ZGI3MzZmZWMsIDB4NDNmYTlhZGQsCisJMHhlYTZhNjYxYiwgMHgzNTRhMjdhZSwgMHhkNTlkNTVmNSwgMHhlZjU2ZjE5YSwgMHhmZjY5YWI5YywgMHg2ODZmZWVkNiwKKwkweDdmOWU2YmVhLCAweDc0N2Y1MzUwLCAweGU5MTFjYWZmLCAweDg4NWYxYTIyLCAweDg5ZTk5MWI2LCAweGQyM2IwNTc5LAorCTB4M2E0ZDg4YmYsIDB4OWNjNWNmZmMsIDB4ZjdmN2EzZDMsIDB4N2VjMjdmMjEsIDB4YjdhZjZlYmQsIDB4ZDVmZTgyYWQsCisJMHhlNzhkM2Y1NywgMHhjNWY0YjRmZCwgMHhmOTAwNzJiYywgMHgxN2Q5NTZhMywgMHg0MDJiYzc5OCwgMHhhZDUyOGQ3YiwKKwkweGY0NDViZTk1LCAweDQ1MzY2MzVlLCAweGVlOTUxYmU0LCAweDExNTYwYWI2LCAweGRhNjZhZmM3LCAweDZkYjBhYWZkLAorCTB4N2U0N2FlYmQsIDB4ZWJkMDFhMmUsIDB4Mzc1OWJlNjEsIDB4MjE1N2ZjYjUsIDB4YzcwNmZjMzUsIDB4YzdhZmNjNjcsCisJMHhhNWNiODRmNSwgMHg5MzE4ZWVmZiwgMHg2MDllMzk3YSwgMHhmYzAxN2ZiNSwgMHg4Y2M5YWNjNCwgMHhhM2M3NDc5NSwKKwkweDVkYjdhNzRhLCAweDZmNWY2MzM3LCAweGVhZmNjYWRkLCAweGEwNTgyYjdhLCAweGRhM2VlOTBlLCAweGZjM2I2N2JhLAorCTB4NTE2YjkyN2EsIDB4NWViZTFkZDYsIDB4NmZlZmZlMTUsIDB4ZWY4MTVmODYsIDB4ZjMyM2ZmNWYsIDB4ZGIxMDEzZWQsCisJMHhlNmZjODhiMiwgMHhjZmViNWRkZiwgMHgwMjQwMmJiNSwgMHg3YTE1MjdiYywgMHgyNzgyOTFhOCwgMHgwZTkwOGIxMiwKKwkweDgzNjUwMzk4LCAweDUxZjk5MDcxLCAweGMxMzNkNDBlLCAweDk2NTI4NDZmLCAweDM4YWYwNDFjLCAweDMwMzRlZjY4LAorCTB4N2U3MWViMmEsIDB4YTY4NjEwNzEsIDB4MzVlYjQ1ZDIsIDB4Mjg4ZGNhMGUsIDB4YTkyYzQ1NmYsIDB4ZWJjNzljZWUsCisJMHg4NzVlMDY4ZSwgMHhkNTJlYThmNywgMHgzZWU3YmFmMiwgMHhlYTkyODc1ZSwgMHg0M2FmMjc1ZSwgMHg1YWVmYWEzZiwKKwkweGI4Y2VmNThjLCAweDAxNDQ4OWMwLCAweDU4MjViZWViLCAweDVhMWUwZTM3LCAweDA1ZmY0YmNhLCAweGU0OTk0YTgxLAorCTB4NWRlODM4OTYsIDB4ZWM3ZWE3YTcsIDB4MzcwN2FmMjIsIDB4ZjJkMGZhNzEsIDB4ZjY1ZTMxODMsIDB4NWYxOWIzZjksCisJMHg4MTNmM2MzZCwgMHhmZGMyNGRiZiwgMHgwMDZmZDc1YywgMHg4MjhhZDQzYywgMHhkNWVmMGVjMywgMHgzZjg3MzIwYywKKwkweGU0ZDVmNzE1LCAweGUwOTdkOTkwLCAweDMxMzNhMDMzLCAweDhjY2Y4ODZkLCAweDRhYjE5ODJjLCAweDBmNzkzZTIwLAorCTB4ZWRjYWFkZjEsIDB4ZTk2OGUzZTEsIDB4NWFmNTFlYWIsIDB4ZmMzYmVjMDEsIDB4ZTUxOTMxYmUsIDB4ZmFhN2E3MzAsCisJMHgyYzEyZTBiMiwgMHhkMDEzZjlmMSwgMHhmYzMyN2IzZSwgMHgxZjRlMWU0YiwgMHgzMmEyNWMyYSwgMHg1ZmI1YTU1ZiwKKwkweDMyYjZhYThmLCAweDU5YjcyNjE4LCAweDg1NTlkMTE3LCAweGQ5MmM5ZDc5LCAweDcxNmRjYjg3LCAweDJlMmZlNTUwLAorCTB4NTZlMWMyMmYsIDB4MWYzOWFkZTUsIDB4ZmIxYTZjZjgsIDB4Yjk5NjdjM2EsIDB4YWViMzZhMGEsIDB4ZDlmMGFiYmUsCisJMHg5MzNlMzBiYSwgMHg4NDk2ZjdhZCwgMHgzMjEwMTlmMCwgMHhiN2Q5ZjBkMywgMHgyNzZlOWU4OSwgMHg4MzA5NGU1ZiwKKwkweDRmMTgyNjc1LCAweDIzZTgwY2Y2LCAweGMwNTQ5OWNhLCAweDNlMjQ0MjQzLCAweGIyMWJmYjliLCAweDk3YzhhMjFmLAorCTB4NTgxN2YwMzcsIDB4OTg3ZTZlNjcsIDB4NWNmNDUxOWMsIDB4ZmVlN2FhYjUsIDB4ZGRhMmIzYTgsIDB4MTE3YTY3ZTIsCisJMHhjODdjNzBjYiwgMHhkMjMxM2IyYywgMHhiZTNjYjU3MywgMHg2YmJhMDYwOSwgMHg5MGY4MGVhOCwgMHg2M2JlODEwZiwKKwkweDA2ZGMxNTFmLCAweGNlYzk5YmNmLCAweDgwNWFiODYyLCAweDMxZTJhYWM3LCAweDcxYWQ2ZThjLCAweGVjOTA5ZDJmLAorCTB4ZWNmNTA1YmMsIDB4NGU2ZTg1MTgsIDB4ZGYxMWE3NjYsIDB4YzdiZDc2YzMsIDB4YjU5ZGU0NDIsIDB4MDFmMWNiZTgsCisJMHhjNzA5MzdjZCwgMHhiZjIyNjY3MywgMHhjNmRiNDBkNSwgMHgzM2ZkZTE4MiwgMHg5OWYwMGZiMSwgMHgzZTdjYzgzNSwKKwkweDA4ZWFjZjc4LCAweDQ2YWY1ODA4LCAweGY0OGQ5ZWZkLCAweGZlNTFlYWNmLCAweGU4MDk1ZjU3LCAweGU1YTVlYTI1LAorCTB4MDA3NDViOTcsIDB4YTQwMTNmYmYsIDB4NTE3YzhiNTcsIDB4NjQyZTljMzAsIDB4N2VlM2QzZTYsIDB4YWZmZGQ1N2MsCisJMHg5MDM0MWZiNiwgMHhmZmRiMGViYywgMHhjZmIwNDE5YSwgMHhkNTM5NGUwMCwgMHgxYWZhMjBlNCwgMHhjOGNmNjQ2NCwKKwkweDQ4YzdjMTRlLCAweGJjMjFhY2JlLCAweGFkZTNmNmE4LCAweDE3NjgyNmY2LCAweDYyMmU5MWU4LCAweGY2NDBiMzdiLAorCTB4YjM2Y2E3ZDAsIDB4ZjMwNWYzODEsIDB4ODY3YTU1ZmEsIDB4MzBhZmNiZTcsIDB4MzRlZDExMzksIDB4N2VkNGYzY2IsCisJMHhmYTIzMTM2YywgMHgzYzk3YjZhOCwgMHhiODQ3Njc1NSwgMHg0NGNjNzYwNiwgMHgwYWJkMjRiOCwgMHhjNzE1M2Y5NywKKwkweDcwZTI2MGJkLCAweDdmMDhkYWY5LCAweGU0ZmUwYWQ1LCAweDQzMzMxZDQxLCAweDY5NGZiZmJiLCAweGZmNWZhMzBmLAorCTB4ZmNkM2I3MjAsIDB4NzAyYmM0NGYsIDB4NDNmMGM4ZGQsIDB4NGVkMDA3YmYsIDB4ZTU2ODkzMDYsIDB4NDNmZjAzZGQsCisJMHg2OWRjZjc4NCwgMHgwMWRmM2Y3NywgMHhmMDI4YWU1ZCwgMHg2ZTg1NmZmYywgMHg1MTI0ZGEzZiwgMHhmNWNkM2ViOSwKKwkweGM3YTA3Y2ZkLCAweDdjNmU5MTdmLCAweDBmYzg2NmUyLCAweGQ1Zjc0NDM5LCAweDkwMjdjZmY2LCAweGQ5ZjE1MjFlLAorCTB4MTBmNDg2MzcsIDB4ZThmODRkYzIsIDB4ZGI4MzQ0YjMsIDB4Mzg3NTEwYWEsIDB4ZTViZjBhYmMsIDB4MmE1N2M4OGMsCisJMHg1NzdjMmE5YywgMHgwYmFiN2E3YywgMHhlN2IzN2JjNiwgMHhmNjFjMTM1ZiwgMHg0NTRiZjgyMSwgMHhmYjg0N2VlNywKKwkweDY3NGZjMWNkLCAweDkyZWY4OGI4LCAweDM0NjY3NjM1LCAweGZjNTI2NmY5LCAweDk2NGNhNDg4LCAweDNlYTJhNjJiLAorCTB4ODVjYzczODgsIDB4NzRjYjhjNzUsIDB4MzY0Y2JhZDEsIDB4MDJmZDFkYTMsIDB4ZjM5MzI3NGIsIDB4ODI3MzQ4NjAsCisJMHhmN2YwOGNjZiwgMHhkMmVjMzdhNywgMHhhOWQ2ZmI0MywgMHhmYmMxMzMyMiwgMHgzNmJjYjM1YiwgMHgwOWZlYTc1YSwKKwkweDkzOTllYjg2LCAweGQ2MDM2MWU5LCAweDY1NzdmM2U4LCAweDljMTEyOTNlLCAweGJmNDc1MDgzLCAweGEyZjFjNmM3LAorCTB4ZjhmNDY4OWYsIDB4Yzc1ZmI5ZTAsIDB4YzEwYTFjZDYsIDB4ZWUwMmMxY2IsIDB4ZTdjZDlkOGYsIDB4MWUxN2RhZTUsCisJMHg4NDI5NzZkOSwgMHhhZDBmZGEzZiwgMHhiZGRkZDRkMywgMHgyOTc2ZGJkZiwgMHgxMDZlZGU1NCwgMHgzNjk3ZGM0NCwKKwkweGQ5ZGI4ZTg1LCAweDVmZjQwNGMwLCAweGUxM2I0NTVhLCAweDkwMzc0M2ExLCAweDJjNmJmNTg2LCAweGFlMGE3ZTc4LAorCTB4MDA4ZmU3MGYsIDB4NWJlNzNmZmYsIDB4ZDJmZjNkNjIsIDB4OGZmNjUwYTksIDB4ZmY2OWZlZTEsIDB4MGRmOTFmMjQsCisJMHgyYjFmZmNlYSwgMHg1ZjM4ZmZlYiwgMHhhNjM4NzMxNywgMHhiM2JhMWUwMSwgMHg5ZjcwYzViZiwgMHgzZjdjNmM2YSwKKwkweDdhNzI1MDRkLCAweGY1NDM3MmU2LCAweDczOWU4Njc3LCAweDNlYTU1MTc5LCAweDczZGUzYTBmLCAweDFjZTkxZDEyLAorCTB4OTk0Yzc2YTgsIDB4N2RlOTExZjYsIDB4NzFiYmQyMjcsIDB4NDhiNWJlYTgsIDB4ZjA4YmU4ZDcsIDB4MjIwNTczZmUsCisJMHgxNmMwN2JjMSwgMHhhMTViM2RiOSwgMHg1YzEzOWQ5NywgMHhkZmU4ZDlkZCwgMHg2YzczYWIzZiwgMHhjYmNlMjU4NiwKKwkweGU1MWUzYWRjLCAweDdhZGI1NmZkLCAweGUyZTY1M2EyLCAweDM4YzA1OGViLCAweGY0Y2JjZWJmLCAweGQxZTgxOTc4LAorCTB4ODJiN2ZlNzksIDB4OGRkNjJhNDIsIDB4Zjg4NmMyY2MsIDB4ZTcwYmY1NTcsIDB4MDFkMTNlODksIDB4ZDdmMmJiZmQsCisJMHg1ZGRkNzE5OSwgMHgxYzY2ZjViNiwgMHg4MmQ2ODRjZiwgMHhlYTNjMzg2ZSwgMHhlNmVjMGZiYSwgMHhmNGNiY2VmMywKKwkweGIyZTllMDg5LCAweGM1N2JiOWI5LCAweGEzM2ZhODAxLCAweGVlNWU3YmFjLCAweDZhYWY2YTNhLCAweDA5MTQ5ZmY0LAorCTB4NDM2N2UwN2YsIDB4ZjU2OGU4ZGQsIDB4ODcyNjNjZTIsIDB4M2FjMjQ2YmQsIDB4YjJjNjZjNzMsIDB4ZWM4OTc4NGYsCisJMHgwZGJmNTUxMywgMHg5ZGFkNGZlOSwgMHg5MWJhZmE3MiwgMHgxNWQ3NjNlNCwgMHhmMjQ0Y2Y5ZCwgMHgwNzMwNWU1MywKKwkweGJjYWY5ZmRlLCAweDdiNzIwZDZkLCAweGEzYmY2YmJlLCAweDFjZjdjNDVmLCAweGYzZTNmOTAyLCAweDc2NGRiZjczLAorCTB4MmU3NzM1OWQsIDB4NTZiM2U3YjcsIDB4OTg1NDkxNzksIDB4M2ZhMWYwNGYsIDB4NWJjNTRmMzEsIDB4MTk1ZjU2OWUsCisJMHhhMGI3MTcxZCwgMHhkNGRlMzBmYSwgMHgyYzU5ZDFlYSwgMHgyYWJlOTBjMCwgMHg3MGYzZmNjMiwgMHg0MGJiM2I3ZCwKKwkweDU5NzJkN2IxLCAweDJkMmJkYTMxLCAweGM4NjNkZjI2LCAweDQyMGQ5NjBmLCAweGUyYTFjMjNhLCAweDhlODE0NTc1LAorCTB4N2M4NjIwZTgsIDB4OTQyNjY3YjAsIDB4YjQ2NWQ5NWQsIDB4ZDNjY2ZhYWYsIDB4NWY5ODA0MTcsIDB4NDM2NmRmMTcsCisJMHg4Y2RiZDBiZSwgMHhiMzFiYzQ3ZSwgMHhhODBkMWY4YSwgMHhmZmMyNGRmMywgMHhiN2IyMjUzMywgMHgyZjg0OGViMCwKKwkweGZjNzkzOTdkLCAweDg2Yzc5NjZlLCAweGIwMzJlY2ViLCAweGE3ZjI0OGE2LCAweGZkZjM4MGI2LCAweDkyN2U1OTA3LAorCTB4OGRkYWQxMGYsIDB4N2JkMjA0MWIsIDB4NjYzNzdjYWEsIDB4YzIzN2Q5MzIsIDB4NWM4Y2RiNzgsIDB4ZDI1ZjgwY2UsCisJMHgzZWJmNDAyYiwgMHhmZmEwMTdhNCwgMHhmN2IzNWExNywgMHg3YmEyMDVlOSwgMHhhZGYxZTUxOSwgMHgxMmVmYjE1MiwKKwkweGZlMWZiOTBiLCAweGNhODk4MTY2LCAweDU0N2VjYTkzLCAweGMzMzY3MTdmLCAweGFmZmM4MjM1LCAweDg0MzBmMmFhLAorCTB4YzdjYTk0ZGYsIDB4ZjFmMjY1MzMsIDB4NzMyZjIyNGMsIDB4MmUzZjcxOTUsIDB4NWNkYzdjZTIsIDB4NWZiOTdiMTQsCisJMHhmYjdhMzM5YSwgMHg4ZDdhNGIxYywgMHg5MDI4NTI4NywgMHg5OGRkNzllOCwgMHhjNTJlNDk4NywgMHhhMzM5NmYxMiwKKwkweDVkYTMzNzg4LCAweGE3MDczZmExLCAweDczZmRiNTEzLCAweGFhZmZkZTQ1LCAweGIyNzRlNjIwLCAweGU1MTQ3MmI0LAorCTB4YTRlOTJjNDEsIDB4ZGU4M2NmZTIsIDB4NzlmZjk3Y2YsIDB4NjhkYTQ3ZWMsIDB4OTlhM2UzYWUsIDB4ZTA0MmQ0ZjIsCisJMHgyZTljYmY5MywgMHg5NmU1ODNkZiwgMHhiYmRiMjNkNywgMHg3NzJmNjNmMywgMHg3MjgwMWVkMywgMHgzN2RmMDRmMSwKKwkweDc5YjNlOTIzLCAweGZiOTdiMTg1LCAweDQ4YmVkMTRiLCAweGY4NDVmNmUxLCAweDNkMTVjYmZjLCAweGQyNzk0YjE0LAorCTB4MTFiMzY1MDQsIDB4ZmYwMTFmZDYsIDB4ZmNjMjhlOGYsIDB4ZWY1MDczY2IsIDB4ZTU4MTdiNzIsIDB4MGZhNGI5OWUsCisJMHg2N2UxZGZiMSwgMHgzZWM0MmViMiwgMHgxYzE0N2IwNiwgMHgwNTQzYjQ0MSwgMHhlZGRkOTIzOSwgMHgyZDdlZmQ4ZCwKKwkweDY0M2Y0ODdkLCAweDVjNjFjY2FmLCAweDJmZjNhODFmLCAweDdhZjhlMTJjLCAweGIwZTAxNDdhLCAweDI1ZWFkZTAwLAorCTB4YzI5YmFmNmUsIDB4YmZjYjUwZTAsIDB4N2RiZDhjMmQsIDB4ZTA0M2U5MmEsIDB4MWZiYjA1NDgsIDB4NDQ0MjA1Y2IsCisJMHhkMGE3YWY3YiwgMHgxYTdlNzMxOCwgMHhlMmQ5NzgwYiwgMHhlNDkxOGQ2MCwgMHhlZmQ4YzljOSwgMHhjYTBkOWE0YiwKKwkweGQzY2VlOWFhLCAweDRiOTZkNzI4LCAweDVjNjBlNzg3LCAweDFmZjhmYmY5LCAweDc5ZDIxYmU2LCAweGMxYTU2MWJlLAorCTB4YWVmZjQ1ZTUsIDB4YmMzYmIyNGIsIDB4YWM0NzhjNzYsIDB4N2NjYWZhYTIsIDB4NTJhZjQzYmIsIDB4OTRkZmI2M2UsCisJMHg2YzA1ZGI3YywgMHhlNTdkNTFkNywgMHhkYTFmMjRlZiwgMHhkNjE3ZGZjMywgMHhmMWM2Yzk5ZCwgMHhmYjFkZWIzNiwKKwkweDk1OWRjNjE4LCAweGU3OGQ4MzdjLCAweDllMzZhYzFiLCAweDNjNmQxMDlmLCAweDI5YjU2MGVmLCAweGNmMWIwNzc5LAorCTB4NGE2ZDU4M2IsIDB4ZjNjNmMxZGUsIDB4OTI5YjU2MGUsIDB4YmNmMWIwNzcsIDB4ZTRhNmQ1ODMsIDB4ZWYzYzZjMWQsCisJMHg3OTI5YjU2MCwgMHgzYmNmMWIwNywgMHhkZTZhNmQ1OCwgMHgxNTM4ZDNjMSwgMHg5ZTM2OTFlMywgMHg3OGRhYjA3NywKKwkweGUzNmFjMWRlLCAweDk3OTgwNzc5LCAweDNjNmMxZGU3LCAweGYxNzAwMGVmLCAweDcyMmQ4M2JjLCAweDk0M2FjMWRlLAorCTB4ZjFmZjIwNzcsIDB4NjdhNDk2MTgsIDB4NTQ3ZjVmYjgsIDB4N2IwNmNmYTksIDB4Nzg2MzM0ZGQsIDB4ZTc2YWI1NWUsCisJMHgxNzE4MmRmZSwgMHhmYzcyMDlhYiwgMHg1ZTc4Mzk1NSwgMHg3N2I0MTRkOSwgMHg0NTdlMzAwYSwgMHgwNGRmYjA2NiwKKwkweDExNDU2NWZlLCAweGIwZDVmMGMzLCAweDEzZjNjM2Y5LCAweGJkZTdkOWRkLCAweGIwYTNmYTAyLCAweDAzYmMyOTk3LAorCTB4MThlYTI5ZTUsIDB4ZmU3YzNmN2YsIDB4M2I1NzcxNjEsIDB4NjVkNmU3OGYsIDB4M2JmMDhiN2UsIDB4Nzg0ODJjYmIsCisJMHg4NzE4ZTdjMywgMHgxM2YyNTNhZCwgMHhmZmFkNTZiNSwgMHhiMmU2N2YyYSwgMHg5OTVmNzFmOSwgMHhmODA4OTlkNCwKKwkweGJiNmQ0NTkwLCAweDhjMmZmOTg4LCAweGQ3ZjE1ZWJiLCAweDZhYjdkYzYxLCAweDE1NzcxYjUwLCAweGI4ZDQxYjMzLAorCTB4ODQ0YmNmM2MsIDB4ZTFkZjM5YzEsIDB4NmIwNDVmMWMsIDB4MmE3ZjAxNmEsIDB4YzFjZmU2MDEsIDB4NTNhZTE1YTQsCisJMHhhNDVlN2MxMiwgMHg4ODFiZGRiNywgMHg0NTNiYmNiZSwgMHhhYTY4MTRjNywgMHg5ZTYwNjQwNCwgMHg2YTIwMTJhNSwKKwkweGM2NTRkMjg2LCAweGYyNGNkMmFjLCAweGZlOWQzODliLCAweGYxYmRkNGQ3LCAweDAzMGYyOGQ5LCAweDZjMDQ0NjdhLAorCTB4ZjlhODNjMjMsIDB4YmY1ODA0ODUsIDB4MmJmYzgzMzQsIDB4MzMyYWVmZjIsIDB4M2E0N2JmZmQsIDB4Y2M4MmViNTAsCisJMHg1ZDgyMzhmMywgMHgyZjgwY2Q2MiwgMHg1YzI2NmVmOSwgMHhjZWFiOTMzNiwgMHg0NWViNmY5MCwgMHg3M2MzMzVlNiwKKwkweDliMzdlOTQxLCAweDJkNGUyOTA1LCAweDc2ZjI4OTMzLCAweDY1NDFjY2I1LCAweDY5NTc3NGQxLCAweGNlYTNmMDExLAorCTB4N2FlMTc1ZWMsIDB4MDk2NmVjYWEsIDB4ZWUzZDg1ZjksIDB4ZjE0OGRiM2MsIDB4MzJlOTdhZTQsIDB4ZjYwMDQ5ZTAsCisJMHg0OGRhNjJmOCwgMHgyZWM4OGE3NiwgMHg0NTFjZjhhYiwgMHgyZjFmNDhiYiwgMHhhZGM5MjI3OCwgMHg2MWViZDg4YSwKKwkweDBhMmE4M2IyLCAweDJkYzdjOTE5LCAweDdjZmNiMjJjLCAweGNmY2I4NGFjLCAweGRmNWQ0YjM3LCAweGZiZDczYzQ0LAorCTB4ODc4ZmQ1MTYsIDB4ZDBiZThmMmUsIDB4NmQ5Yjc5NGEsIDB4NWJjMmYxNjEsIDB4NmY2MjhhZmQsIDB4OTBlNzI0NDcsCisJMHhlOTAxYjkzZCwgMHg4ZjA0ZjE3YSwgMHgxNjg4ZTEwZCwgMHhmNjJhNzhjNywgMHgxYjQ5ZWNmMCwgMHg3NjdiYWVjMSwKKwkweGQ0NWFlYzE0LCAweDJhZWNiNzQzLCAweGZhOTM5OWZiLCAweGIxY2EzYjUwLCAweGQwYmE0ZjBlLCAweDkwOTJiYWVmLAorCTB4YzNkZGFhMzgsIDB4OGQ2NzE0M2MsIDB4Njk3OWFmMWMsIDB4OTkyMGUyMTQsIDB4ZmUxM2JmYTgsIDB4ZWE2MzlkMGIsCisJMHg4N2ZiMDIzYSwgMHg1NGJjZmJlNSwgMHg0MjhlZjhlMSwgMHg2MzRiZTM4NywgMHhhMGQzMTdjZiwgMHg2MTNlMjdkNCwKKwkweDc3MWI4ZDBiLCAweDk3MGUwNDU5LCAweGY1YzBkMDQxLCAweGZkZmY2MmI5LCAweDc4ZjYyNGEwLCAweDdkNzI4MTJhLAorCTB4ZjIyZWZjYTksIDB4Zjk3NGQ1NjEsIDB4N2NhYTU4NjcsIDB4YmFlMWRmM2IsIDB4MmQyOWZjNDAsIDB4ZjkwMjRmYWEsCisJMHg3NjdmNjZiYywgMHgwNjg5ZWEwMSwgMHgyYWUzNWVkYiwgMHg1MmQ1Zjc4MCwgMHgzYTIyZmRmOSwgMHg1YjFmZjQ2ZiwKKwkweDFlYjE2ZTFlLCAweGY3YmM0NzhmLCAweGEzY2IyMmI5LCAweGM1MDkxMWJiLCAweDI4ZGU0ZmU0LCAweDY3ZTRmZWUyLAorCTB4ZmUyODg3ODQsIDB4NjM4YmFmZTQsIDB4ZWE3YjJmYmUsIDB4YzlmYzg2NzMsIDB4NWIxZmZlNzAsIDB4NjM5ZGUzY2MsCisJMHgwNjhlMDE0NywgMHhmMTQ2NTcyOCwgMHhjMjhjYTZlYiwgMHhiZjVhOGRmYywgMHg0NDNlYmY2ZSwgMHg4NTQxMTBjZSwKKwkweGRjNmM2OWU2LCAweGZjMTE2M2FmLCAweGJhMzU5NzNkLCAweDE0N2IzN2JmLCAweGYzMTBiMWQ2LCAweGY1OTFiNTcxLAorCTB4MzFjNTdkZGEsIDB4N2U5NmFmZjcsIDB4MzMwN2NhMDMsIDB4ZDBhOWZkNWIsIDB4NmYzMGJjYzQsIDB4YjJiZTUwZGEsCisJMHgwZmFmZDVjOSwgMHgzODNmNzM4ZCwgMHhlNTM3ZTBlMSwgMHhiMzdlNzAwOCwgMHhmMjcyZTYzOCwgMHhmOTFlOWM3YywKKwkweGUxMTliZDc1LCAweDdlMDY2YWU5LCAweDI1NWZiMDhkLCAweDliZmZkYzI1LCAweDk2MTFlMTNiLCAweDNhNjM3Njg4LAorCTB4ZTQxMWY3NDMsIDB4MzYzN2NmMDksIDB4ODM2MzdlMjksIDB4MmE3NjdmYTIsIDB4MmM1M2Q0NzIsIDB4ZTUyY2U5NTIsCisJMHhlODUxYjlmNSwgMHhmYmNhZDdmYSwgMHhiNjljNGE4ZCwgMHgyYmYyNjI1MSwgMHhlYzdmZjQ5MSwgMHgzOGZjZTZlOSwKKwkweDcxYzZlNzI4LCAweGYzMGRlZjM4LCAweGY0NTNkZmNmLCAweGQzZDg5ZWM0LCAweGEwMGM5ZWNmLCAweDkxYjViOTkzLAorCTB4ZjYzMDc1ZjEsIDB4MDI3NGIxNzQsIDB4ZjZkNGJmY2MsIDB4Zjg5MDFjZjQsIDB4MGQ5YjJmYjAsIDB4MmU5YzVmOTQsCisJMHhlZjBjNThiZiwgMHg1N2MyOGI2ZCwgMHg2OTc4MmI5ZiwgMHhiMDNhM2U4NiwgMHgzNGEwNWJmYiwgMHg5MDEwZjk0MiwKKwkweGZhNDA1NDgxLCAweDZmZWM1NWVkLCAweDE0MzA4ZTAxLCAweGYxZGUwNDIwLCAweDNhZjRlN2U4LCAweGNlN2MxZWU0LAorCTB4N2ZlNDZkNWMsIDB4Y2ExYmM4ODQsIDB4Mzk5OTU2OWYsIDB4ODNhNzc0ZGYsIDB4MGVmZTg4ZmYsIDB4OTMzOWQzMzMsCisJMHg5ZmNmMjBhZSwgMHhmY2YyNjU3NiwgMHg2YTNjMzg2OCwgMHg0NTZmZjRmZSwgMHg3MWNmMTk4ZiwgMHhjNDE2NjU3NywKKwkweGViZGRmMjg1LCAweDZmMjY5ODliLCAweGU3ODU3NWRjLCAweDhhNGZjMTg1LCAweGM5NDlmYWQzLCAweDhmODUyN2U0LAorCTB4NzRiOTkwOWYsIDB4MjQ3ZmE4NWUsIDB4MDIxZmRjYzgsIDB4NWM1MDI2N2YsIDB4YTkxN2U0M2MsIDB4N2M5OGNmZmUsCisJMHg3ZmYxNWNmOSwgMHhjZDFkZmQwMiwgMHg0OTQ3MTE5ZiwgMHgwNzMwOGIwZiwgMHg3NGRkZmYzZSwgMHg4ZjEwZGZmOSwKKwkweDFmZDNkMDIzLCAweDlmZDNkMGEzLCAweDM0N2ZkZmIwLCAweDExY2M2MjdhLCAweGYwY2M2OGI3LCAweDFlYjJiYjcxLAorCTB4NzA4ZWI1YjcsIDB4ZDMyMTIwM2YsIDB4NTRjZTkxMTksIDB4OWI3YTAyZmEsIDB4ZTg3NjMyNTAsIDB4YjRmMzIxN2QsCisJMHg0YjEzNmY0YSwgMHhiZDNlYmY4YSwgMHhmMGJlYzA1ZCwgMHhhZmUxYWNlZiwgMHhkMTQ5ZDZlYywgMHg3YWI1OWRmYiwKKwkweGZhMGYyOGNjLCAweGYxOWJkNzMyLCAweDk5ZDRjNDllLCAweDZiY2UwNzJlLCAweDAwNmM5OTExLCAweDNlNWNiYjM4LAorCTB4MDA3YjllMzMsIDB4NjRiZjJmM2IsIDB4Y2RjMWJjODQsIDB4N2UzZjJlMjIsIDB4ZGNmZmVjYWQsIDB4MmFmZjljMDksCisJMHg3ZGJlMGI5NiwgMHg2YzRkN2ZjMCwgMHg0ZGY3MDE5NywgMHg0OTU4ZmY3ZCwgMHg3Yjg4ZmRlYywgMHgzNWVlNDg3MiwKKwkweGY3MjA4Yzk2LCAweGUyZjg1NjVlLCAweDJiNWYwNTczLCAweGU3MjlkNmRhLCAweGZiNDQ1ODk5LCAweGZkZWM1NTY3LAorCTB4OTQyYjM0OGMsIDB4NDVkNzUyNzMsIDB4NzQ1YmUzYTQsIDB4MjI4NWU3ODcsIDB4ZTIxNDY3YWMsIDB4ZTRjN2U3ZTAsCisJMHhjZDRjM2NlMCwgMHhmYzQwNmQyYiwgMHhmMWM0NTYzZSwgMHg3ZGZlY2QxNywgMHhiM2ZjMTQ2YSwgMHg0YWQ3MDA4OSwKKwkweGZkMDE5OWY2LCAweGM3ZmY1OTY5LCAweDExZTc0OGFjLCAweDM5ZDkxNThlLCAweDAzOTAwNjljLCAweDU5OTVkZjgwLAorCTB4ZmMzMWI3YmEsIDB4YjVhNDk1ZDksIDB4NjdmN2Q0ODcsIDB4NjdhZWZlMmIsIDB4NTI2N2U0MTQsIDB4ZjFjM2NlMGUsCisJMHg0YzBlN2UxYSwgMHgzZWM1Y2YyZCwgMHg4OGI0YjAxZSwgMHg4MGZmYjlmYiwgMHg3M2ZjMGVmYywgMHhlMzU4YTRhOCwKKwkweDY0YThmZWU3LCAweGI1ZjczZjY0LCAweDFhZGM4ZjdmLCAweGNiYThlODUwLCAweDdkOWVkOTExLCAweDQwZmJmNjIxLAorCTB4ZGQ2MGUwZTcsIDB4YjkxNTdjZWYsIDB4YWE2ZjZlMTEsIDB4ZGJkODllZTUsIDB4N2E1OTY5N2IsIDB4ZDFjMzg3OWMsCisJMHgyNGU3YjRjOCwgMHgyOGRmZjE2ZSwgMHg4ZjVkMmRlMCwgMHg3N2U5NjhmMywgMHg1ZmZhZTMyNSwgMHgxYTU4YzM4NSwKKwkweGU3OGM3M2YzLCAweGZmMzFlODY3LCAweDdkNzlmOWMzLCAweDk0YmUyYmE5LCAweDE5OGYzNmVjLCAweDA3ZDgzN2Y1LAorCTB4Yjk1ZjY3MTQsIDB4Y2QxZjI1MzksIDB4NmI2N2Q4MmEsIDB4OTNiZTk2YTksIDB4ZWZhNjQ3NGEsIDB4NDAzYmQyZTQsCisJMHhmYzljYWFkZiwgMHg1MzRjNjExNywgMHhhODk5YmNhOCwgMHhhNTY5OWJjOCwgMHgyOWFmZGZiMSwgMHg4ZTQ4YWYxOCwKKwkweDYzMmJhZjJjLCAweDczZGJlNzFmLCAweDc5NzQ0ZTc3LCAweGZiMzc5ZWFjLCAweDRmMWI0MTQ3LCAweDhmMjViZDZlLAorCTB4Njk0NzRlNjMsIDB4NzkyMWZhYTksIDB4NzA4N2VhYWMsIDB4NWU4NjhkM2MsIDB4MGJkMTBjNDgsIDB4Y2NlNDUxMGQsCisJMHgzNjMxYzA2OCwgMHg5ZGI1MWYwNCwgMHg5OGFmZTUwMiwgMHhjMGE2Zjk4ZCwgMHgzOWQ4OWRhZiwgMHg5NmM3ZGVlNCwKKwkweDRmMTM4ODUxLCAweGM4N2Y4ZDBmLCAweGEwNDdhZjYwLCAweGIxYTVkZGUzLCAweGJjYTM3ZmNmLCAweGRiN2MzN2U5LAorCTB4NDdmOWQyMzYsIDB4MjhjNWQ1YTMsIDB4MzE3MzYyM2YsIDB4YjE5ZmVjM2IsIDB4ZjZmMjk1YjMsIDB4OTRhZDA1YzYsCisJMHgwMjlkNjY4NywgMHhmNDk4ZmRlNSwgMHhhYjc5ZjkyZSwgMHgzMGE3ZGU2YywgMHg5ZTVjMzY3ZCwgMHg1ZTM5OGQ2YywKKwkweDk3ZDg3MjhiLCAweDI4YzUzN2Y2LCAweGY4ZWJjZDdlLCAweDM3ZjkzYTRhLCAweDE1M2NhM2FmLCAweGIzNDdlZTI0LAorCTB4Zjc0ZWNjMGQsIDB4Yjk3Y2FmYTQsIDB4MjAyZjU4ZmIsIDB4OWEyZjMwMTIsIDB4NzYzZWU4YzQsIDB4N2FjN2UxYTcsCisJMHgwNTFiNDdjYywgMHhlNjVjZmUzZSwgMHg5NzRmZjllNywgMHhmMGEzZmM3NywgMHgzMWEwZTU5ZSwgMHg3ZjU0M2I3ZiwKKwkweGZiNGQ5YTUxLCAweGNmZTU2OWRlLCAweGYzOWJmNmJiLCAweDllYTU4NDlmLCAweGMxOWUxNWI2LCAweGE3NTNlMWYzLAorCTB4ZWMxYzUzMjcsIDB4NmI4ZjAzYzUsIDB4YmM1YWVjZWMsIDB4ZGY3ZTgwYzcsIDB4N2U4NjFlMGIsIDB4MzVkMzI5YTIsCisJMHg5YzNiMjQ3MSwgMHhhZTkyN2YzMSwgMHhhODlhNTA4YywgMHhmYTVlN2E5NCwgMHhmODZkOWQwNSwgMHhmN2Y3M2JmYiwKKwkweGJkNjdlODQ4LCAweDcyNGNjMDc4LCAweDllODFlYTdmLCAweGUzMjE1NWY4LCAweDNlNzE5NjI3LCAweGZlM2QwNmI2LAorCTB4MzVhZjAwMTksIDB4MDkzMjczZDMsIDB4ZjkyYjFkZWYsIDB4Y2U3OTkxNzMsIDB4NjMyYmMyZDQsIDB4MGY5ZDAwYTQsCisJMHg2YjU3OTFkZiwgMHgyZWJiYTUwZSwgMHg3OTRjZDZhOSwgMHg2MzlkNWNlNCwgMHhmY2ViMWQ4YSwgMHhmNGZjNDMxYywKKwkweDQwODJmZGRhLCAweDExMmVkZDdlLCAweGUxOWFlZjUwLCAweGVjN2E4NmJhLCAweGMzZWI4OTBkLCAweDQ5NmI1M2E5LAorCTB4ZTcyYTc1YWIsIDB4MmRlNDc2MWUsIDB4YzdlZjgwMzksIDB4ZjFhN2FmNGYsIDB4N2I2NDU5M2IsIDB4ZTVjNjU4Y2MsCisJMHg5OTA2OGJmMCwgMHg4MGYxN2RlNiwgMHg1NWM4ZTc0OCwgMHg3YzY5ZGViYywgMHgwZjMwY2JkNiwgMHhhNmRlYTNlMCwKKwkweGE3ZDg3YmE3LCAweGU1MTE0ZThkLCAweDgxMzRlOWQwLCAweGRmMmQ4MmVkLCAweGVlODU3OGU5LCAweDAyODhlYzk5LAorCTB4Yjk0YTJmZWYsIDB4YTk2Y2NhOWYsIDB4ZjdhNzdmNDQsIDB4NzQ4ZjJlNzcsIDB4YmZhNTVmN2UsIDB4YTk2NDMzYzksCisJMHg0OWMwZWQwYywgMHhmZjk0MjY5ZSwgMHgzNmU0YjZjYywgMHhkZjI0ZjE3YywgMHhlNjg3NDNiZiwgMHhjZmZjMDNjZiwKKwkweDIyN2ZjMTdkLCAweDZiMjFmNzBlLCAweGY3NWM3OGNmLCAweDZhNzZhNTA3LCAweDFmMGY0NWJmLCAweGIwZjQ0MmJkLAorCTB4ZTNlZmM4YzUsIDB4OGU3MTc1NzgsIDB4ODU4ZWIwMDMsIDB4Y2YxMTAxZDYsIDB4ODM1MjE4NGYsIDB4MmE2ZGU3OTQsCisJMHg4Yjc0ZjJlMywgMHg4MTYzMGZjYSwgMHg3ZDNkZTAxZiwgMHhjNTA3YmYwNiwgMHhjZWE5ZGEyNiwgMHg4NDI3MDcyNiwKKwkweDU1OWVhM2RlLCAweDA1OTdhY2E2LCAweGMyZjlmMTMyLCAweGQ4Mzc3N2Y4LCAweGY2MTU4YzFkLCAweGIwOGIzN2E2LAorCTB4ZWY4OTg1ZmUsIDB4N2E4NmM4NmUsIDB4NWU3OGVmNDksIDB4YjNmNzc4Y2YsIDB4YjJiMTg5NmMsIDB4OWY1ZTBjZGUsCisJMHg5MzY3ZWVmNiwgMHg5YmQxNWVhMCwgMHgzMDk1ZWJjOSwgMHg5YmIwNzhkNCwgMHhiZDlhYjM3YSwgMHhhNGJlMzg3OSwKKwkweDBmMTViZjE5LCAweGZkN2YxNDcyLCAweDQ1ZDI2ZjUyLCAweDI4MzU1ZjhjLCAweDAzMWY4N2ViLCAweGZiZWNlM2NlLAorCTB4ZTJlZjNhNDcsIDB4NzhmZDViMzQsIDB4ODZjOTgzMmUsIDB4MzQxOWY4YjAsIDB4NjA3N2RjODUsIDB4ZmYyNDA5YTksCisJMHhmMzBiZmJkNCwgMHhmNjNmN2Y0NSwgMHg4NGZkOTlkNywgMHgyNzU5YmJkZiwgMHhhZDgwNzNkOSwgMHg3ZTE0NWZkZCwKKwkweDVjMmU3Yjc5LCAweGM4ZDk2ZGVlLCAweDhjNGU3ODVjLCAweGVmMDk2NmIxLCAweGQ2NGMwODMzLCAweDc4ZTNjMTdkLAorCTB4ODU1ZjljNGUsIDB4MTg3ZjlkNDcsIDB4YzhiNWIwNWMsIDB4M2Q3MDQzOWYsIDB4NzBhOGUzNGYsIDB4NzkzN2NiNWQsCisJMHg2YjdhZGU1MSwgMHgwNDI3YWU1OSwgMHhlMDg0ZDc0ZiwgMHg0NTZjMTgwZiwgMHgwZjFkYWNkYSwgMHgxYjVkM2VlMSwKKwkweDQwMjA5YzEzLCAweDFiN2NiOTNkLCAweGIxYjVkYmVkLCAweDhlMDgxZmMxLCAweGVmODFiYTkwLCAweDA5NmY1YjYzLAorCTB4Mjg5NzYzZWQsIDB4OWI5ZDIxYjcsIDB4MjE2ZWQ2OGMsIDB4YjhlZWIxOTEsIDB4ZTYwYzE5ODQsIDB4ZTVkNjMxZDksCisJMHg0MDZlN2JjNSwgMHhkOGVmNzQ3NywgMHgxYzc0NjU5YiwgMHg4YmViMzgwMCwgMHhjN2ExZjliNCwgMHg4M2ZiM2ExNSwKKwkweDk4ZTYwZjIyLCAweDAxY2U3OTc2LCAweDA0N2JiYTVkLCAweGRjNzBmNzg2LCAweGE4OGMzNzgzLCAweDVkZjYxNmZmLAorCTB4YTRiZTYyMzQsIDB4MTFhMmU3YTMsIDB4ZWIwM2JlZTksIDB4ZjNjNzRlMzAsIDB4NmZmOTg4YzYsIDB4YmQ1ZWI5NjMsCisJMHg5MWU3NGEyZiwgMHg0ZjFjNGJkNiwgMHg3YWVlYjJhNywgMHhlOWUwMTUyYSwgMHhiZGQwMmQ1OCwgMHg5MjQ3ZjViYywKKwkweDdkN2Q2MGU2LCAweGIxOTJhZTJiLCAweGU3ODc1NWU1LCAweDM4YjRiOTIwLCAweDcyYzI5ZmZiLCAweDk1MzgxYjI1LAorCTB4Y2NiNDI0MGEsIDB4MTBmNjY3YTUsIDB4NGQ2MmI5M2QsIDB4ZTg4N2IzM2MsIDB4OGE0ZjE2YzksIDB4MTc3MmJlYTYsCisJMHgyODBjY2VlYywgMHhmYTY4NjYzNywgMHhlYWZlZTUzMSwgMHg4M2Y0MzYzMiwgMHg5NDlhOThlNywgMHhkYjY2NWM3ZCwKKwkweGVlYjhjMDE5LCAweDNiYzE5NzMyLCAweGMyZGUzMjEwLCAweDMyNjJjZGJlLCAweDFjMTFlZGMyLCAweGNiZDI4ZDc0LAorCTB4ZTBhZDNmY2YsIDB4MWM1Mjg0MmIsIDB4ZjdjZjFmN2EsIDB4ZWZjNDBhZjQsIDB4YmE3YTZkMWQsIDB4Y2JkY2QzYzcsCisJMHgzNWU2YWVlZCwgMHgyMDJlY2Y4MiwgMHgwZGJkZjgxZSwgMHhlZDQwYWY3NywgMHhlYmE3ZGVlZSwgMHgxYmVmMTE5MywKKwkweDQ3MDAwZjAwLCAweDdkODRmOGRhLCAweDkzNDcxMTJjLCAweDRhZDVkY2U5LCAweGRmNzc1NjA1LCAweGIzOGUwMzM5LAorCTB4ZGQwMjNiZTIsIDB4OWJiZjU1NjcsIDB4YjJiZmMyYTAsIDB4OTFjZTkxYTksIDB4YTQ1ZTdjMDEsIDB4NGQ5ZDc1NGYsCisJMHg1Y2U5NDdmNiwgMHg5Nzg5Y2FkNSwgMHg2MTg3YTgwZCwgMHgzNDA2OTc3ZCwgMHg1YmQ2ZDRmOCwgMHhjYWZhZGEzYywKKwkweGQxZmFkYThkLCAweGYyOWVlNTMyLCAweGY5MGQzNjM0LCAweDIwOTk3OGU5LCAweGI1MjQzOWUyLCAweGY5ZDY1MWZlLAorCTB4ZTc1ZWYxYjcsIDB4MGE3OWQxNmUsIDB4ZThjZGIzZTksIDB4N2VmYTgxOWYsIDB4YmFhMmU4YjcsIDB4M2JjZjBlZGEsCisJMHhmODlkZjExOCwgMHhiMWYxMDBlMSwgMHhjNWI5ZmM0MCwgMHhmODM1NGIyMCwgMHg4MTc2OTczZCwgMHhiNjA1NzZlOCwKKwkweDBmNjdmM2FiLCAweGZkNzU0ZmJkLCAweDU1NGRmYWYwLCAweDFiOWM1YWVlLCAweDQ3MzBiYmU4LCAweDkwZWQwOTA1LAorCTB4OTMxNjUxN2EsIDB4MjIyZjg4ZjMsIDB4YmRmOTc3OWUsIDB4YTM2ZjA3YzIsIDB4ZWViODAzZjYsIDB4N2Q4NTIyNDIsCisJMHg0NGZlZWJiYSwgMHhiZGU2MTc5ZiwgMHgzYTU2Y2RlYiwgMHgyMTU3NzZlNywgMHhmOTFkODFkMCwgMHhkNmU3NDc1ZSwKKwkweDJmNzllM2U2LCAweDc5MDNlZjI4LCAweDJlZjI4MTY4LCAweDkyMjZhMWZkLCAweDEyOGQzM2VmLCAweDljZTU3N2M5LAorCTB4ZTQyZjJhOTcsIDB4YjZlN2I1MTcsIDB4MjE5ZTY3ZTYsIDB4ZTdiZWViM2IsIDB4YjU3OWQyNzYsIDB4YzE3MjM5YzksCisJMHgyZDBmYThkMywgMHg0NzFkZmU3YywgMHgxODY2ZGYwNCwgMHgzNGVmMjNhNywgMHgzMjcxY2ZjOSwgMHg2MWQ3MmYzZiwKKwkweDJmNjhlNDUzLCAweGZkNzU1MWM4LCAweDUwZTNiZmIwLCAweDY5MjI2MWFlLCAweDliY2QxZTQxLCAweDVkYTk1NjZlLAorCTB4ZjgyODM5MjYsIDB4ZmZlODc1NmIsIDB4ZGRlNjUzOGUsIDB4NzVhNzZkNWYsIDB4NDg3YTNkYTcsIDB4MzE2Nzc1YzAsCisJMHhlNjAxNjZlZiwgMHg3YzNhODJiYiwgMHg1NWY5NTBlYywgMHhmOGI1ZDdlZCwgMHg1NjVkZTgwYiwgMHg1YjYzYjVhZiwKKwkweDY1ZTNkNzQ1LCAweDZkYmI1ZjMwLCAweDJkY2ZjOGMwLCAweDFmYTg4ZDA2LCAweGRlZjhlMGVlLCAweGYyYzNlMzQ4LAorCTB4NTBlZTc0NzUsIDB4NDczMGZiZTIsIDB4NzY4MDk4M2YsIDB4MzlhM2ZhY2UsIDB4ZjYwOGQ4ZTMsIDB4ZDNhY2RlOGQsCisJMHgxNDgzMTFjOCwgMHhmMzM3OTFhNywgMHg2N2YyYjU3MywgMHg3NzJiNDNhMSwgMHhhMzk2NTFiZSwgMHg0ZjI0NWY2OSwKKwkweGRmZGZiNGQzLCAweDNmYTlhODU4LCAweGJjZDRhY2UwLCAweDlkNTM2MGZmLCAweGNkYjI2ZWE2LCAweGIxNmZiY2QzLAorCTB4ZTNkNGQ2MmYsIDB4ZGU2Yjk3NzMsIDB4YTU1OGUzMWYsIDB4ZjViZDM3NjksIDB4ZWQwMTI2YTMsIDB4YzA3N2IzNzEsCisJMHgwNmU4NzgwNSwgMHgxZTRiMjhkZSwgMHgxMmQzMjNkMiwgMHhlMzI4NjVlMCwgMHgyYzU2MmQwYSwgMHg3NDRkZjNiYiwKKwkweDNjN2JiNjRlLCAweGVjNDQ5N2U4LCAweDc3M2ExZGZmLCAweGM5N2M0ZTY5LCAweGRmZTUwMzVjLCAweGZjNWFiZTBiLAorCTB4YzlhMDBlN2UsIDB4M2RkYmY2ODUsIDB4ZjBlMzY4NGYsIDB4NWYzOGFiYzcsIDB4Yjk0MzY1YTksIDB4MjgwYWMxZWIsCisJMHg2N2IwNWVmMywgMHg4MWU5N2JmMCwgMHhjYzdmNzA3YiwgMHg0NWRiOGM3MSwgMHgyZWM5OTlhZiwgMHg1Mzc2ODk5YSwKKwkweGIwNzFiZjg4LCAweDM5N2U2NmJhLCAweGJlNDI3YmY2LCAweGY1ODJmOTE3LCAweGJjMGE2OTMyLCAweDNiMDhjZmI3LAorCTB4MzVlZTdhOGIsIDB4ZWJjYmY1MjMsIDB4ZTY4NWQwMWQsIDB4Y2U1OTdmZjcsIDB4Y2ViM2MxZTUsIDB4ZmM3MTdiZGEsCisJMHhiMmQwM2U4ZSwgMHg3ZGNmNGZjOCwgMHhhZWJmNDQ2OCwgMHgwMTNmYWZhMywgMHhlNzBjZDlmNSwgMHhjZmI0NDY4NywKKwkweDdhMmI5ZTg3LCAweDYxYzYwYzRlLCAweDBlMWZlMzljLCAweDYzZGUyM2U5LCAweGE0NmU1ZWRkLCAweDcyMmI0ZmYxLAorCTB4N2EzYmU1YmQsIDB4Zjc4YjRmM2EsIDB4ODY0YTZiMzcsIDB4ZTFjYjczZTQsIDB4NjNlZjFmYTAsIDB4N2JmM2I0YjcsCisJMHgzNjhlNzg5YiwgMHhmOTA2OWM5MiwgMHhiY2E4NjFmYywgMHhmNDFkMzY3ZCwgMHg0ZjFhNGNjMSwgMHg5Nzk2MGZhMywKKwkweDNlZGVlOWY5LCAweGZiY2Q2ZmM4LCAweDVjMzQ5NzJiLCAweGM4MjU3Y2M1LCAweDRjZjNlZDcxLCAweGIxOTYxZTdlLAorCTB4NzNmYTAzMDEsIDB4ZWQzNWQ3MjAsIDB4ZmI5NWNiMWIsIDB4ZGU1OGQzOWMsIDB4MmUwNzIwMTcsIDB4ZGJkZjIzMzgsCisJMHg5ZjhhYmI3ZCwgMHhhYWUwYjgzMywgMHgxNjc4N2RhMywgMHg0N2U3ODlmMCwgMHgzZjg2MWQ5ZiwgMHhlMWRiZDc4ZSwKKwkweDgxYTQ2NWVkLCAweDY2MWJmZDkwLCAweGZmNzE1N2ZmLCAweDcyMjhlNWVhLCAweGJmYjJhMmZiLCAweDAxNDA4NGZiLAorCTB4MzNiNzU1MGEsIDB4ODU3N2U4OGUsIDB4YTVlZDc1YjksIDB4Y2Y5N2RjNDIsIDB4ZGViZmEyYjcsIDB4ZWU4MTIzZjIsCisJMHhmZmIyZmZjMSwgMHhhYzNiMzRhZCwgMHg1NGY4NzhkZiwgMHg3Njk3ZGUxYSwgMHg4Njk1M2ExZiwgMHgwY2RiODlmNywKKwkweGNmNjhjZGY2LCAweDNkZDA3ZDAzLCAweDNmNWU4ZWU0LCAweGE4N2VkZmMxLCAweGI3OWYxZmIwLCAweDE0MGUwYWY3LAorCTB4ZWI5ZWVlYzksIDB4MzY0ZWI0MGQsIDB4YTNmZDE1YjAsIDB4M2FlMDUxN2QsIDB4YWJlZGNlNTgsIDB4MmE3NmU1YzMsCisJMHgxMzk4MmVkZCwgMHhjOThmN2VmNSwgMHgxZTkwMTNlNywgMHg1YzIxM2U0MCwgMHg4MjBmYzA0NywgMHhlNjZkYmVmYSwKKwkweGQ0ZjY0OGE2LCAweDI3ZGYwNTY1LCAweGRlMTkxOWI3LCAweGZlODM2ZGZiLCAweDU5ZDM4ZWI4LCAweGJkZjg4ZGE3LAorCTB4YjBjMzk2ODUsIDB4NzFkNzAxMmUsIDB4MWM3ODgxZWUsIDB4YTE4MTgzN2YsIDB4ZjdjMmExOWQsIDB4MDNlMDU2NzEsCisJMHhhYmZiZmY1YywgMHgyZGNmMGMwZCwgMHgyN2FkNTk2ZiwgMHg4MWJmYmY3YywgMHg4N2ZhMjdkYiwgMHgwMzM1YmQ3ZiwKKwkweDJlODBjYmVhLCAweDI3MGYzYmYxLCAweDlkMzhkZjU2LCAweGJmYmVlMzAxLCAweDc1NjlkYjg2LCAweDJmODgxYjBmLAorCTB4NmUxM2FkOTcsIDB4YTUwZTRiZGQsIDB4ZmY2ZTk1NmIsIDB4NzBkM2ExNDYsIDB4ZGJhNzBkZmEsIDB4ZTZiYWY0NjEsCisJMHhkYmViZDFlYiwgMHg5MGVjYjdlNSwgMHg2MWY3YTgxOSwgMHg0MzhjZTdmZiwgMHg3MzFlZmEzYSwgMHgxYTdlNDAxYywKKwkweDA3MTg2MTNjLCAweDJhZGE0ZjcwLCAweDYzYzNjMDM5LCAweGE3YmVmNWQzLCAweDljNmU1MGQyLCAweDZkZjllZGUwLAorCTB4N2YyZTA1N2IsIDB4N2Q3MWNiZWMsIDB4ODY0NmRkMTksIDB4MmEyZTA4ZjcsIDB4ZDk1MTc2ZmIsIDB4MGEwYjNiMzcsCisJMHg2MmNmYzhmMSwgMHhhOWNhMTI2MCwgMHhmOWNlMjU2YywgMHgxZDM1ODE4YSwgMHhlNDUyZmY0NiwgMHg4ZmZhNjdmMiwKKwkweDg3Yjc3YjZkLCAweDJiN2ZlZmQwLCAweGNhYWI3NGU3LCAweGU2NDY2OWM1LCAweGY3YzU2YzNhLCAweDA0NWY4ZDBmLAorCTB4ZTA2Y2JjZTMsIDB4MjgyNzM1ZTcsIDB4MDljOTRkZTMsIDB4NTI4MjJjMzYsIDB4ZTRlNWMxNTcsIDB4ZDQzODE1NmYsCisJMHgzZTE0OWZmYSwgMHg0MzdmMjc2MCwgMHhlNjY4NWNmOCwgMHhkMWI3OWZmOCwgMHhmOGViOGNkZiwgMHhiZDc1Yzk5OSwKKwkweDMwNWZkZTFjLCAweGVhMWI3Y2UxLCAweDNmNDllZWJkLCAweGI5ZGZlM2M5LCAweGVlMWQ5MDczLCAweGEyN2ZmMDU2LAorCTB4NjNjZjM3ZmMsIDB4MzUzMmNmZWUsIDB4NzJkN2Y2OGUsIDB4ZTkwOTY5ZjQsIDB4NjhhNTMyZDksIDB4MzBmMTQ4ZGMsCisJMHhlNjZjY2RmNywgMHhiYWJhMDE0YSwgMHg1YWE1NDM5OSwgMHhhYWZjNzQ1ZiwgMHg4MmZjODA3MSwgMHgyZmM0MGRlYiwKKwkweGI5ZTlkMzM3LCAweDA1NTNlZmRhLCAweDhlNDZlOWVlLCAweDRhOTdkNjA3LCAweGI2ZTQxYjdhLCAweDY3OTIxNjU4LAorCTB4ZmFhMGYxNTAsIDB4ZmIyOTk2ZTMsIDB4NWIxZWJmNjksIDB4Y2ZlZTI4YzcsIDB4OGY4NGQzZDgsIDB4ODRlNzZkMTUsCisJMHg0MWU3MTg1NiwgMHgwMmIwNmM4MywgMHgzNjI3Y2ZiZSwgMHg4NTM0YmRhZCwgMHg2MjZjOWZiMSwgMHgzYTBiMDVjYywKKwkweDVjY2NjOWJiLCAweDZjN2QwMzc3LCAweGQ4MWVhODkyLCAweGJiZmFhMzY0LCAweDVlNTRlYzliLCAweGEyYzczOGI2LAorCTB4YTRlMDc5ZmUsIDB4ZWRlMjBhNjcsIDB4NjcxZWQ2NDQsIDB4ZWQ3M2NjMmQsIDB4NDFmMDgxYWMsIDB4ZmRmNDA2M2IsCisJMHgzNzZiNDI5OCwgMHgwY2NjZjRmYSwgMHg5NDdhMzdlZCwgMHhmMDI4YWRlZiwgMHg4MzMzNzQzZiwgMHhmY2JlNDBiOSwKKwkweDhlODNlNzAyLCAweDQ2N2YxYmVkLCAweGU2YjFjZjcyLCAweDQ5ZmEwMzdhLCAweGI3MTc2ZGY5LCAweGYxYmRkZDYyLAorCTB4NWY2ODBkNzcsIDB4MDRmYTAwN2MsIDB4N2VlYzBjZTksIDB4OWU1MDEzNjYsIDB4ODFkYTMzOWMsIDB4YTY2ZjlhMGUsCisJMHhlYjJmMzhkMCwgMHg3N2M4MGQ4MiwgMHg0MzAyNjNkZSwgMHhmN2EwZmNmYSwgMHhkNzFjNzFiYSwgMHhlMTJkNzQ1NywKKwkweGU2NzQ0ZGY5LCAweDQ4YWQyZDlmLCAweGZiYjhmYzIyLCAweDdmN2M3NWYyLCAweGY3YTE3NDhiLCAweGY5ZWZmYTI5LAorCTB4ODdlZTAyNDMsIDB4OWRmZGEzNzksIDB4NDY3ZmVjNGEsIDB4YjdhZjkwY2YsIDB4YTQxMzA2ZDcsIDB4MDJmODcyMDgsCisJMHhhMzk3OGI4YywgMHg4NjU4MWQ3MCwgMHhiZDE5MzdiNywgMHg0MTNjZjA1MywgMHhlMWM3NDI5MywgMHhmYTE1OGJlZCwKKwkweDk0MWI0YzA0LCAweDIxMzIyOWVmLCAweGMxMjM5ZjhkLCAweDUyNTgxNjlmLCAweDQxZjkzMjYyLCAweGU3ZTAzOGZlLAorCTB4YWJiYWJlOTYsIDB4ODExZTk2MjIsIDB4Y2ZmNWE4N2QsIDB4NzYyMTg3ZDgsIDB4ZmMzYTM0N2MsIDB4NDM3ZTI1YjIsCisJMHg0MzI5YzNlNiwgMHg0MzIzZjQ3NSwgMHgxZmEwN2ZlZiwgMHg4MmZiZTkxOSwgMHhlM2M5YWNhNiwgMHhiOTc3OGE0NiwKKwkweDgzYmVjMDA3LCAweGMzMDBlYWZkLCAweGY0ODI5ZWM5LCAweDRmY2E4ZDNlLCAweDkxZDk3NDhlLCAweGMxNzFjYzdmLAorCTB4ZDgyZmE4M2QsIDB4M2JmMjNhNWQsIDB4N2I1YWJkZGEsIDB4ODdlMTQxYTgsIDB4N2ExZWM1MDYsIDB4M2ZlYjQyYjQsCisJMHg1ZWQ0OWY4MSwgMHg4NGE0ZmRjMSwgMHgzZmUzNGNlMywgMHhmZjI3M2Y4NSwgMHgwNTdjOGNjOSwgMHhmZDgzNGVmMywKKwkweGZlZDIyNTc5LCAweGM3YWVkNTU0LCAweDJlZDgxMzdlLCAweDc0MDY3M2EyLCAweGJlMTVmNDhlLCAweGUwYThiZmNlLAorCTB4ZWJlNTU0N2EsIDB4NDhkN2M4NjUsIDB4YWY5Y2JkYmYsIDB4YTk2ZGM3YzMsIDB4MWMwYmY5YWEsIDB4N2I5NDViNzcsCisJMHhmMTU3ZjcxMCwgMHgxMzlmZGFmMSwgMHhlN2VlNWYwOCwgMHgxZjRmMDg1MiwgMHhiNTljZTdiMywgMHgwMzFmOTc0MCwKKwkweDJlODBmYjFjLCAweGYxOWQzOWFmLCAweDlhZmZkMDQ5LCAweDZjOWYxOWNiLCAweDFkMDM5MjFkLCAweGJmNTNjNWNmLAorCTB4YTcxNzkzNmQsIDB4MTlmZDQyYjQsIDB4ZWYxODdiYTQsIDB4OGEzYWRlOTMsIDB4MWNmNDNlNmYsIDB4YmU3NTNmZTcsCisJMHg1MmNiZmMwZiwgMHgwZDhhOWY5MCwgMHhkYTAzYTM0MSwgMHgyNjJlZmIzMywgMHg3YzU4MWRhMCwgMHhlNDE0ZmVlNCwKKwkweDZlNzA2OGMzLCAweGRjZTA1NGFkLCAweDRiZGFkOGY4LCAweGYwMWU5YzI5LCAweDQ1NWFlZTFjLCAweGY0OWZiOWJmLAorCTB4NmJmZjExMWIsIDB4ZGZhMjMyMzcsIDB4ZDk3ZWQ3ZmUsIDB4NDlmYzdjODEsIDB4ZmE4NGJjNWYsIDB4ZjFhM2UzZjAsCisJMHhkN2ZmOTQ1ZSwgMHgzYTdjOTk4ZSwgMHg2ZjEwZmM4MSwgMHg4ZmI1YzgyMiwgMHg5MWY3MDMwZCwgMHgyZjQ0NzliZCwKKwkweDNlZThmZmExLCAweGM4M2RkYmY2LCAweDRjZDdlZThmLCAweGI1YjFmOTY4LCAweDUxZDc1ZDdkLCAweGRkZjViNWVmLAorCTB4ZjJjNDU1N2IsIDB4ODdlNWQxYTUsIDB4ZDM4ZjhkZjYsIDB4NmZmYWQ1N2EsIDB4MjhlZDk5MzcsIDB4YjkxMTNmNDcsCisJMHhmYmRiNTg5YywgMHg2YmJmZDkyYSwgMHhjMGNjNmYwNywgMHg0N2M3ZWEzOCwgMHhjYTA5NGZmZiwgMHgzNzliZjczNSwKKwkweGI5OWU1MDRhLCAweDgyNTFiOGRmLCAweGM3MWZlZWVkLCAweDJkZDkyMjdiLCAweDg0ZjRiMzcxLCAweDY2NWY1NTU3LAorCTB4ZTI2YTI3YmYsIDB4ZmExNDFiNDUsIDB4ZDVkY2VlYzgsIDB4NTdmMDA5MzgsIDB4MDM4OTZlN2MsIDB4N2I2YWI2ZjMsCisJMHgxMzlkMTRmMSwgMHg3OWZlMmZkZiwgMHgyMWMzY2E3ZCwgMHgyMjAzM2FmZCwgMHhjZThhOGRlNSwgMHgwZWFmYzdkNSwKKwkweGFhNDdjYmExLCAweDk0ZWY5YTBjLCAweDBmMzhkNTdkLCAweDJkZjdlMmI2LCAweDAyNzVjNTZmLCAweGVjMGVmYTNhLAorCTB4YmZjODgwYjYsIDB4ZjA0NmJiMmYsIDB4ZjYwMWJmYTEsIDB4YjIzZjc4NGIsIDB4OTIzZGFlYTcsIDB4OTkxMGY3NDIsCisJMHhiZDNmOWNlOCwgMHgxYzUzZWIwOCwgMHg1NjI4ZWRkYiwgMHg4NzI2YTdjYywgMHgwMmNiNGJkOCwgMHhlODA5YmYzYSwKKwkweGU0Y2ZhOWE4LCAweDIwM2Y3YjI3LCAweDYyYmFhNDVlLCAweGZkNzQzZDQ3LCAweDg1YjI2MzM3LCAweGRjOWE3MTA4LAorCTB4MWNhMGU3NzcsIDB4YzBkNzhmMGYsIDB4NWI4NDE4Y2YsIDB4YTdjZWFmYjUsIDB4YTY1MWY4ZjMsIDB4MDQyZGQyNDcsCisJMHg5OTNiOWFiOCwgMHgxNjFkNzg4NCwgMHg0YjlhNjlkNywgMHhmOGYwYTJmMSwgMHhkYmIwM2Q4ZSwgMHg5M2VjZmQ4YywKKwkweGFiYzIxMjc1LCAweDhmYjhhNWRhLCAweGMwZTQxMTNkLCAweDc5NzI1NjVmLCAweDY3NTdmMmE2LCAweDNhZjVlNzgwLAorCTB4YzllNmI1MDMsIDB4Njk1NzdlNTAsIDB4Y2M3NDkxZWYsIDB4ZWNlOTc4MGIsIDB4YzYwMGZmYmIsIDB4MWYwNzNhMTcsCisJMHhmMzBlOWY4YywgMHg5OGI3YmU3NCwgMHg5YWU3OWU2MSwgMHg4MjllNmI1NCwgMHg5YWU3MDZmZCwgMHhhMjFiYzgxZiwKKwkweDFhZjlmMDliLCAweDM0NWRiOTJhLCAweGQ2NDQyZjY0LCAweDVmMGFhNTdmLCAweDJjMWU5NjhmLCAweGQwZjNmY2FjLAorCTB4NTc5ZmUwODMsIDB4N2NmZjcyNTQsIDB4NzA5ZjhmMDUsIDB4N2Y1YzNjZmYsIDB4MWQ1OTcyYTgsIDB4ZWY4MmFkNzcsCisJMHgyYWY5NzJlMSwgMHg0N2UwMzlkOSwgMHg1YjVlNWM5MywgMHgzMmY3YTc2OSwgMHg5MGE1MTZmYiwgMHg5MmRlZmQ3ZiwKKwkweGY4NzViYjE0LCAweDQzYTIzOWY4LCAweDdjMzc5Yzk3LCAweDczOWVkNTdjLCAweDY2NTNlNTdiLCAweDNkNjQ3YmY0LAorCTB4ODk3YmE3ZjEsIDB4OTdmY2MzZTAsIDB4OWRiOWZmNmEsIDB4ZWVlNWQ5MDIsIDB4ZGYwZjgzNjYsIDB4MmMwYWUxNTMsCisJMHgwN2Q4ZjFlMSwgMHgyMmNmODM2NCwgMHhhYTg5ZDkwYywgMHhkZGFiNzkxZCwgMHg2YWJiNTAyMSwgMHg2M2Y2YWE1NywKKwkweGJiZTNjOWMwLCAweGZiNzg4YTRiLCAweDU1NmI4YjY1LCAweGE3NWM1OGU1LCAweDk3MTc5ZTg1LCAweDM5OGNlN2YzLAorCTB4ZjU1ZmExNGYsIDB4OTE4MTUyZTAsIDB4NGFlYzUwMWMsIDB4ZWRjMzRlOTUsIDB4NzJmYjRmY2UsIDB4NDM4YTQ3MTIsCisJMHhhN2QwYWYzZCwgMHhjMjEzNjdjYSwgMHg2M2Q1NDNmOCwgMHg3ZTcwNTRjZiwgMHg1ZTNkNDBlYiwgMHhmN2ZjN2E4OCwKKwkweDdjM2NmYjFhLCAweDhmZTNkMDVjLCAweDQ2M2Y1MjU3LCAweDJlN2U4YmZkLCAweGViZjkyMzNhLCAweGFkZmM2NTY2LAorCTB4NGUwNWZlZWEsIDB4NTliYzIwZDYsIDB4ZmQxOWIwMmMsIDB4ZjVmYTY4Y2MsIDB4MTM5ZDhhN2IsIDB4YzUxOWZkYWQsCisJMHgzZjFkYmM3ZSwgMHhjOGU0NTYxZiwgMHhjYmYzZjE2OCwgMHg3MGYyYjc5NSwgMHhmOWY5YTlmZiwgMHg4YzY4N2Q5NiwKKwkweGQ1NTdiZjYyLCAweDFmZmI4NmJjLCAweDZhMDRmN2E3LCAweDk3ZmVmZjkwLCAweGUxZWVlMjgxLCAweGZhYTUzZGVmLAorCTB4ZWNkMzIyOWYsIDB4YTMyY2E5Y2YsIDB4ZjcyM2ZkMGUsIDB4ZTgzZjFlMWEsIDB4NDNiZmIyNGUsIDB4N2E1YmNjN2UsCisJMHgwNWFjZTM4NiwgMHhiOGVkMTA3ZiwgMHg1MTI2NmY0NywgMHgzMmY2ODZkOSwgMHgzODVlMmI5NCwgMHgxNTg4Zjk0NywKKwkweDc3ZjBiNDZiLCAweGZiMTc0YzYzLCAweGYzYTZjYmFmLCAweDllYWMyZDAzLCAweDdkMmQ0Y2UyLCAweDUwMTZkMjQ5LAorCTB4MGY2M2RkMGEsIDB4ZjJiZTQ2OWQsIDB4MGZkYmQwMWUsIDB4ODhmZmJlODQsIDB4Yzc5OWJlZmEsIDB4ZmJhNjM2ZTEsCisJMHg2NjFhZjcyOCwgMHhjMjc4YjQwZiwgMHg3ZGFkN2VlZCwgMHg4ZGM0YTk1MCwgMHg2ZjA5ZDlhMiwgMHg1Y2I4NWJmNCwKKwkweDNlMjdhMzM5LCAweGQzNzhjMGVmLCAweDdkOGNjNjRjLCAweDM3YjgyZTVjLCAweDQ3NDkzOGYyLCAweGZjMDRlNmRmLAorCTB4ZDJiYjZhMDgsIDB4NTAwYzQ1N2UsIDB4NmJmMjhhMWMsIDB4YmVkNWVhZjAsIDB4M2VlOGQzYTcsIDB4MjdjZGFjOTcsCisJMHgzOWZmZWZiNSwgMHhiY2YwY2JjOSwgMHg5NzBmNzI1MiwgMHhiZDM2ZWU0YiwgMHhhMTJhNDc5MiwgMHg4M2I3OTdlZiwKKwkweGVkMGUzOTNmLCAweDFiZmRiYjRiLCAweDhiODA3Nzg4LCAweGM4ZGU0OGY5LCAweDNlY2JiODlhLCAweGU5ZjRhZjI1LAorCTB4M2YyNTdmOTksIDB4Mjg5MWM1NzQsIDB4NzllZWE0NzksIDB4N2NhNDhmM2MsIDB4MWU3ODc3MjcsIDB4MGNhOWY0ZTksCisJMHg0OGYzZWRmYiwgMHhlOGU3YmQxZCwgMHhmMmVkY2IxZSwgMHg1YmFhYTY0OSwgMHgzYjhhMWM3MSwgMHg3Yzc5MTQ0ZSwKKwkweDIwOWY2Mjc3LCAweDYyNmFiYzYxLCAweGU5Nzc1ZjFmLCAweGFmYjIzOGI2LCAweDNhYjU3ZTFiLCAweGJhODFlNTA1LAorCTB4ZTIyYzlmNGYsIDB4ZmRlNGZkZjgsIDB4NWZiMDZhY2YsIDB4Yzk0NGFmYzksIDB4ZTM3YWViMDIsIDB4Y2IzZjBkZmQsCisJMHhkOWJiNzVlMCwgMHhjNDM2ZmQ4ZSwgMHhjOWYzM2ZhMywgMHgyM2M3ZDZhZiwgMHgxMjgwZGY3ZSwgMHgxN2M3ZTdmNywKKwkweGM5ZjFjOGM0LCAweDY2NzU3OGExLCAweDk1OWRjNTE1LCAweGZhMDhiNTc4LCAweDVjNTBjYzcwLCAweDhiZGZiYzI3LAorCTB4NzQ2ZTVjNTUsIDB4NzE0MmJiODMsIDB4ZWYzYzIzY2QsIDB4OWFlZTlkZGYsIDB4OWViZmY1NDcsIDB4MjlkZmY4YzQsCisJMHhmZDFlMjk5MCwgMHhjNjM1ZDAyYSwgMHg2MmMxYTY4ZCwgMHgzZmZkMmYzMSwgMHhlNjI3NThlMywgMHhiYWM3YmE5MSwKKwkweGY0N2M0MjdlLCAweGYyM2IzYWQ3LCAweGZjYTdmNDExLCAweDlkYjBmNzkzLCAweDZhODYyM2Y0LCAweDAzMzNjZjMxLAorCTB4Zjc0MDViM2YsIDB4ZGYyOTUyMzEsIDB4OGZiMjhmNzMsIDB4YTJjZmUwZTksIDB4MmNkMDA5NWYsIDB4MzRmNDNjYzEsCisJMHgyMzMzZGYyNSwgMHhmZTM4ODk4ZSwgMHhmYjZiODMwZSwgMHhmNTJmY2M1NCwgMHhjNGNkOGU4YiwgMHgzYzE0OGUwNCwKKwkweDc3OWUxOTZmLCAweDJmOWU2NDEyLCAweDZhNGZmMzU3LCAweGZlNWEzY2RlLCAweDk0NzljMDQ5LCAweGYzZjA1NmVmLAorCTB4Zjk4MGIyOTYsIDB4YzRjZjM1NzQsIDB4ZjkyOTNhOTYsIDB4NDNjY2E1YjUsIDB4ODA3YzQyZjcsIDB4ZGU3M2FmYjMsCisJMHhjZmZjODQ2YiwgMHhmMjExMTVjMywgMHg5ODJiZWIzZiwgMHhmMzY5OWY2MiwgMHg1ZjczZGI4ZCwgMHhhYWZkM2EyMSwKKwkweDc4YzNjNjc5LCAweGU2OGVlMmFlLCAweDBmZGNlY2M1LCAweDI4YmI4MzBkLCAweGYyMzRkM2U5LCAweDZmZjhmZWJiLAorCTB4ZmI2N2E0MDksIDB4YmMzZTkwNmUsIDB4MDBiMTM0MTYsIDB4NzgwNzFmYzUsIDB4NDBjZmJkZGMsIDB4ZTA2Yjg2NzEsCisJMHhkMTBkOGRiZiwgMHhmMDU0ZWZiMywgMHhkNWY3OGY3MSwgMHgwNGY3ZmQxMSwgMHhmZGYxZTNlYSwgMHhiN2NmMmJkZiwKKwkweDdlZTRiN2JkLCAweDAxYmRmN2I0LCAweGM2MGIxZGZlLCAweDEzZDYzZmI4LCAweDZlZDE4YjEwLCAweGYyZmI4M2I5LAorCTB4ZjU4NDY1NjQsIDB4N2ViOGUzOTksIDB4NTJhM2U3MGEsIDB4YWI0YWZmODUsIDB4ZGVlYjllMzgsIDB4N2I5ODdlZTcsCisJMHg0OGFmY2YwMywgMHg3YjcwNWM4YSwgMHg3NGZkNWU3OCwgMHhjNmEwOWE1NiwgMHhjYTQ1YzdkMywgMHg5MjA5MWNiZiwKKwkweDQ0Nzk2OGRlLCAweDdjYzllZmEwLCAweDMzY2JmY2Q5LCAweGYxZjM5MWU5LCAweDQ2MmY3YTJiLCAweDM2MzRiZmNlLAorCTB4MTY4Y2ZjOTAsIDB4NjM4ZjBlY2YsIDB4ZmYyYTlkZmYsIDB4NzYzOGYzYTYsIDB4ZWI0NDk1N2EsIDB4ZDdlNGY2NGUsCisJMHhlYjQzNjM4YywgMHhiMGZiODNiZiwgMHg3ZDg0NTY3NCwgMHg2ZmUzODNiOCwgMHhmMWRiMWQ5YywgMHgzYjYzY2FlYiwKKwkweDFlMzExM2ZlLCAweGM3OGM3YjdmLCAweDZjNzk2MWZmLCAweDhhYmFlYmYzLCAweGRiZmZjMmQ4LCAweDFmZGZjMzE4LAorCTB4NTdmZmZlMDksIDB4ZTc4NDA3Y2YsIDB4MGJjZmMzZmYsIDB4MzAwMzlmODQsIDB4MTdiMGY1YmQsIDB4OWQ4NGJhZGIsCisJMHhlZmMzM2Y0MSwgMHgyNGQ2YmY4ZCwgMHg5MzE0MWM4MCwgMHhjZTdkZDNmNiwgMHgxZjNjZTUwNSwgMHhlY2RlYWRiNiwKKwkweDlkMGMyYmRiLCAweGY1ZjE1MDFiLCAweDIzZjczNTY4LCAweDVlZWJiY2E1LCAweDA0ZDQ1ZWZjLCAweDgyOWY1MDM5LAorCTB4ZmU3MmIyZjEsIDB4NTlhZTQzNzcsIDB4ODk4YzVlNzgsIDB4YzllNjNhNTIsIDB4YzVmNGNkZTAsIDB4NWI3NDk3NjAsCisJMHg1MzU5ZTcyMiwgMHhlOWEyZjE5NSwgMHgzNWQ1ODM5MSwgMHhlMzE1Njc4YiwgMHg3YzhhM2QxZiwgMHg0YTg3ZmYwZSwKKwkweGU1ZWE1MjFjLCAweDY4OTllOWY3LCAweGYzNGM1ZjRmLCAweDFlZDFkM2RhLCAweDlmYzkzYzRhLCAweGJjOTlmODI3LAorCTB4NjdiMmUwOTcsIDB4ZGM3ZmU2MmYsIDB4N2JlMTFiMjAsIDB4MjZmZmM5NDYsIDB4MWIyYmJiY2YsIDB4NjBjOWQyZTMsCisJMHhmMDVlNjIxNywgMHg5MjBmY2M2OSwgMHg3YmQxMmIzZiwgMHg2Njk3N2NlYSwgMHgxOWVhM2Y3MSwgMHg5ZjMwMTMwMywKKwkweGNmY2E5ZGViLCAweGRmOWViMTM5LCAweGU2YTZmZDkxLCAweGZjMWFjZWY1LCAweGNhMDU1YTk3LCAweGZjMjNiNWViLAorCTB4ZjNmOWQ1M2YsIDB4NDQyYjY1ZjYsIDB4ZWJjZGY4MGMsIDB4ZjhkZjI4OTEsIDB4ZTVkZmY5NzYsIDB4OWUxZTY4YmEsCisJMHhlMjRjN2JlNywgMHhiZjQwOWNhZiwgMHhlYzc4ZTAxOSwgMHhlZmQxMjE2OCwgMHhmZmU1ZTM4YSwgMHhjN2ZlOGNkNCwKKwkweDNjZjA5MTY0LCAweGUyNTRhZmNjLCAweDc4OTQxNzA1LCAweDUwMmYxYTg3LCAweGFjZmY1YmYzLCAweGMwM2U0OWM0LAorCTB4MDM5NDBiZjgsIDB4NzI4MTBmMTgsIDB4OWRkZDJjZmIsIDB4NjdkYjRmZDYsIDB4NjdmZmUwNDUsIDB4ZjIxZjFlMDQsCisJMHg4N2M3OTRmZSwgMHg5YzhlOGQwYSwgMHg3Zjk0ZjNkMCwgMHg2M2VmOGIzNSwgMHgyZmU3OWZhYiwgMHgwZmNmNzhkNCwKKwkweDdlMTRmNTk1LCAweGVmYzdlZjRmLCAweDlkNmUxNWExLCAweDVmM2Q0NDZlLCAweDBlMmIzNWI4LCAweDRmYjIxOWNiLAorCTB4NWVmODA2OTcsIDB4NGViMGZhYjYsIDB4NzQ0OGJmZGQsIDB4ZTc1OTU3YjQsIDB4Y2E0MTMzYjYsIDB4OTYxYWJkZWYsCisJMHg4YjM0YmZmNywgMHhhOTY4Njc5ZiwgMHgwOTdiZmJlNiwgMHhkNDE4YTBmZiwgMHg2ZTIyOWIxZiwgMHhiMTMxZjM0MSwKKwkweGNhNDdkMjRhLCAweDVmODBiNTJiLCAweDc2YjY3MDhjLCAweDdjNTViODczLCAweDc1ZWRmOGI3LCAweDUzYzVjZjM4LAorCTB4MTY1OGFkYzEsIDB4YTNhZWM5YWMsIDB4ZjVkYjdiYjgsIDB4YjliZjY4YWQsIDB4YWU5YzZmMDcsIDB4ZDE5OTc4YTYsCisJMHg0M2M0ZmU4ZSwgMHhkYmI4ZGEwMywgMHhmZTNjZDUxMywgMHhlMDFhMmFmZSwgMHg0NTdiYjc4OCwgMHhlZjBiOGZmMiwKKwkweDkyN2U4OTE1LCAweGJmZTQyYzViLCAweGRlOTgxYjI2LCAweGRjNDVmNThhLCAweDRjNjgyYTJlLCAweDViM2FjM2FkLAorCTB4NjBmNjQ0OTIsIDB4ZDI3YjE5YzEsIDB4NzE0Mzc5YzMsIDB4Mzc3YmU0YjAsIDB4ZGQzYzQ1OGMsIDB4YzZhYWNmMmUsCisJMHhlNDViMmVkMywgMHg1ZjlmYjhlMywgMHg3ZWRhY2YzNSwgMHg2ZjNhM2RmNiwgMHhjNTRiYWVhYSwgMHg4ZDJmOWE4YiwKKwkweGNmNTU2Nzk2LCAweDNmMWJiODNkLCAweDcwZDM5Y2QzLCAweDhjMDZjMThiLCAweGJkMWUxNjNmLCAweDVmY2U1NDY4LAorCTB4YTFlY2I2NGEsIDB4OTFlMTZjM2MsIDB4NTU3Zjk0ZWIsIDB4Y2Y2ZWFkZjMsIDB4YTFhYmIyNzUsIDB4ZjdmYjExOWYsCisJMHhkN2Y5ZTI2YywgMHgyYzBlMDBkNywgMHhiMmRkNjE3YiwgMHhkYmExZWYwOSwgMHg3NTgzZWNhOCwgMHg5YjYzZjNlMywKKwkweDZmZjRhOTcyLCAweDdjNzk1MDcyLCAweGY4OTUxOTUzLCAweDY0ZjRjOTk5LCAweGE3NWVkYmNjLCAweDU5ZDVlZGJjLAorCTB4NTI0ZGNlYzMsIDB4ZThiNzZmNWUsIDB4MTVmMTA4ZmMsIDB4N2FhM2Y3OTIsIDB4MWY0ZmRlNzgsIDB4ZWUzNWUzYzcsCisJMHhiZWZhMDYzMywgMHg5OWFjZmJhMSwgMHg1ZjRkNzdlNCwgMHgwZmY0NDRlYiwgMHg5YWU3M2YzZSwgMHg2MDc3NzA4OCwKKwkweDJlODQyZGRlLCAweDk2MWQ5MTNlLCAweDlkODNmNDI0LCAweGRiZTYwYjBlLCAweDFhYWZmYjBhLCAweDg3NGMzY2YxLAorCTB4M2M2MjMwMTgsIDB4YzBjZjIwMGMsIDB4OWVlZThiMjMsIDB4NmZkY2ZjZWIsIDB4ZjEwNThkNWYsIDB4NThmY2RiN2IsCisJMHg4ZmNmZmZlZiwgMHg1OGZjOTU3ZCwgMHgyNzNmMzU3NywgMHgwMjkxY2FhZCwgMHg4YmRlNGVhNywgMHhmMmQ5MTllNSwKKwkweGQ4OWM4ODcwLCAweDk0ZjllNGU2LCAweDExMjc5MzZkLCAweDRlNzZlZTFmLCAweDMyMWQ1YTRhLCAweDhmMjM2NzVlLAorCTB4M2JkZjI0NWYsIDB4ZmNmYTEyZDksIDB4MWYzY2Q1OTcsIDB4NjczMDJjOTYsIDB4MzM1Njc5MjQsIDB4YzdkZGViZmIsCisJMHhkNzZlNDExYiwgMHgzZmZiYjI0NCwgMHhlNWQwMjlmOSwgMHgyMzhiYTA0YywgMHg5MDM4OWVkZiwgMHgzNDNmMTljNywKKwkweDcxYWRiNzFlLCAweDI4MzFjNGY1LCAweGQ4OTgyZTlmLCAweGQzYWYxZTE0LCAweDU4NThlM2M0LCAweDVjNWEyZTVlLAorCTB4NGVhMzQ1NmUsIDB4YTE3OWQwYjYsIDB4ZGJkNDA0ZTAsIDB4MjYzM2YxZTEsIDB4YmQ3MDI3MDYsIDB4YmRlMDY3MmUsCisJMHg4MzMxOTgxNCwgMHhmOTYxYjE5NSwgMHhkZjMwNWZiOSwgMHhmYmMzMjdjZiwgMHhhNDc1MWFjYiwgMHg1ZDNjZDQyZiwKKwkweDM2YzhhMzQxLCAweDZjMTY3ZDAxLCAweDNmMjhmODM0LCAweGE0NWUyOGQ3LCAweGVjNmZjNTc2LCAweDkwMzIwYTk0LAorCTB4NmIzODNmY2UsIDB4MTZhZTMwOTQsIDB4MzQ3MzFmMWUsIDB4MDQ5ZWVmZWUsIDB4MDI2ZDFkZmQsIDB4NWRiYTBiZGQsCisJMHgwNzNkNGYxZSwgMHgzZmRiZDJkZSwgMHhmOTZkZTMwNywgMHgzZDc3NTc2YywgMHhhYzlmY2ZmNCwgMHhmNGZjZjA5MywKKwkweDNmMWU3Y2YwLCAweGQ4YTA1ZGZmLCAweDM2NzFlMTM5LCAweDRiYjQzM2E0LCAweDFiZjBlM2MyLCAweDM4ZDgzYTE1LAorCTB4ZDdhZGViOWIsIDB4MWQ1MzdmMTQsIDB4NGUxN2VkNDcsIDB4Y2Q5ZDNmM2YsIDB4YjhiNDZkZjUsIDB4YmM2NTUxZmUsCisJMHg2ZDgyYzZjZSwgMHgxNzdmNzE5MywgMHg5M2VhMThlOCwgMHhmMzVhYzZjZSwgMHg3NmYxOTBlNCwgMHhkYmU3ZTZjYywKKwkweDYwZmNjMTllLCAweDkwN2U2ODZhLCAweGYzYzMwMWU3LCAweDJiOWNhYTgyLCAweDAzN2RmZmVjLCAweGM4Mzc3YmUyLAorCTB4NmU2M2Q0NmIsIDB4MTQxZmNmMWIsIDB4ODMzOWFiMWUsIDB4NGUwODYzNzIsIDB4YzM3N2I3YWUsIDB4YmVjODA3OWUsCisJMHhiZTMxMjQ3MywgMHg0NTdiZmEyZSwgMHhjNTAyYTNkZSwgMHg3YzE2MGFlNywgMHhlYTFlM2M3NiwgMHhmNzQ0OTljYywKKwkweDI3NjdkY2IwLCAweDNjYTJiMTZmLCAweGUzMTYyMDVhLCAweDUzYjcxZWJkLCAweGMyNjc5NWI4LCAweGVmZmRkMjdjLAorCTB4YmNlZmExYWMsIDB4N2Y5MDNlMTYsIDB4ODFlNWY3MGUsIDB4MGY5ZDAzNjYsIDB4ZmRkZWY1NTQsIDB4ZjAzNTM0ZWYsCisJMHhjNjRmYmRmNiwgMHhlMGFlN2I2MSwgMHg3OWYxZDhiMCwgMHg3NjNmN2QyMywgMHhmYTdlNGJmZSwgMHgxMTBiNThiYiwKKwkweDgxZTc5MDNhLCAweGU0NDQ5N2IzLCAweGQ3MTZjYjliLCAweDE1MWYyM2RmLCAweDRjZjI1MjJlLCAweDNmNGY1Y2NkLAorCTB4YzBjOGI3ZDAsIDB4ZWFkM2NlYzgsIDB4OWY1OTEzY2QsIDB4NDZlODNjNTMsIDB4OGZlNTIxNWYsIDB4NDNmY2YwNTIsCisJMHgyOWJlOTBkZSwgMHg2YzdhMGEzYywgMHg2M2QzOWRjYywgMHgxMTJkOWQzZiwgMHgxZTgyNjczZSwgMHgxNzkyNzg0MywKKwkweGY4N2QzY2YxLCAweGY2NTBlZmZlLCAweDhhNWU5YTNmLCAweGZmNTE4NzI2LCAweGRlNjNmYmYwLCAweDVjMzZjMTBjLAorCTB4ZWUzMWRiOGYsIDB4M2FmNjhhNTMsIDB4ZDNhMmUzOTQsIDB4NzE2NjFmZGYsIDB4NjI4YTRlYmEsIDB4YTE0OWZkY2YsCisJMHhhN2U3YThkZiwgMHhjZjI3NDc3YSwgMHg3ZmQ5ODdmNCwgMHhkNTYzNzkxZSwgMHg0ZGYzNTJmZiwgMHhhMGY2YmZhYSwKKwkweDY1YWIwZjYyLCAweGJiZmU1MjkzLCAweDcyYTAzN2VmLCAweDIxYmY3ODhkLCAweDg2ZmRmMjM5LCAweDY4MDkwZTg3LAorCTB4MWJmN2E4YTcsIDB4Y2Q1OTE5NGUsIDB4NGYzYzU0ZTEsIDB4ZjI3N2RjYWIsIDB4ZTkzYjIyMmQsIDB4NjJmY2RmZDQsCisJMHg3OGE5OGJlYiwgMHg1MDkwNDlkZiwgMHgzYTFmYjUxZCwgMHgxZGJlN2E0NywgMHhhN2IyMjNlYywgMHhlM2NiN2VmYSwKKwkweGY5Zjg4N2FkLCAweGM4ZGVmNmYwLCAweGFkZGJkZGRmLCAweDMyZjVkZmQ4LCAweGFlZDFiOTIzLCAweGU4NmRiNzljLAorCTB4Yjc0NGYyNTEsIDB4OGI4Zjk2ZTIsIDB4Yjc0YjcxYTEsIDB4M2Q1NjMwM2QsIDB4N2YyM2ViYzcsIDB4OGNjNzFiNGYsCisJMHg2MGVjYjcxNiwgMHhkYmI3M2E0MSwgMHhhMDcwNDZiMSwgMHgzOWRkYjg3ZSwgMHg3OWNhNWRkYywgMHg0YzcxYThkZCwKKwkweGI5NzNlNDc5LCAweGI5NGM3MWUxLCAweGI5Yzc5YjVhLCAweGY3YzQ5NjZmLCAweDY4MDgyNWRiLCAweGNlNzU5YWVmLAorCTB4N2ZiNzNhMzYsIDB4OWQyMjkwNGMsIDB4Y2Q1YTVlZjMsIDB4MjU3Y2Y0ZTUsIDB4YzhkMDcyMGYsIDB4ODU2MGUzZTksCisJMHhmMDZmZjc0MCwgMHhmYmVlMWUxZSwgMHgxZWZjNjNjMSwgMHg3ZTAyYzFjZSwgMHg3YmNkNDcwZiwgMHhhNjZiZjdhOCwKKwkweGU4M2RlNTBlLCAweDJmN2E5ZGZlLCAweGMzNjdiZDQ3LCAweDVhZTA4Zjk4LCAweDdkMWM1Y2Y0LCAweGUxODc2YmM3LAorCTB4YmRkYjhkOTAsIDB4MWEzZjdlNWUsIDB4NDNlNjEwNjUsIDB4ODkxM2NjNGQsIDB4NmJhYjZiNWYsIDB4ZWY3YTZhYzQsCisJMHg4ZjRmZGI4ZSwgMHg3YmYwNDc1NCwgMHhlOTFmOGE3ZCwgMHgyZmVhOGVhZSwgMHhmYWQ2YWZhYywgMHhmNzBmNTQwYiwKKwkweGRlNTRlZTE3LCAweGVjZDk4YmUzLCAweDg3ZmJmYjRlLCAweDllOGYxYzYzLCAweGYxYjYzYjMyLCAweGZiNDhlY2M0LAorCTB4ZmRhMmM1YjYsIDB4NWU1YWFmMWUsIDB4YjBkZmU0NTYsIDB4YmIwZGM1ZWYsIDB4N2FmNWM5MmYsIDB4YTdmZjYwYjcsCisJMHgxYmE3Y2E0YSwgMHhjYWFlOWYyOCwgMHg3YzMxZWVkNSwgMHhlMzI5MWZmYywgMHgyOTQwNjVhOSwgMHhkNzdjYTNiYiwKKwkweGJjNGE5N2Y5LCAweDdiOTQ0YmFjLCAweDJmNjllZTEwLCAweGQzOTdlMzY4LCAweDk3ZTM2OTBmLCAweDM1OTM3YjMzLAorCTB4NzhmZjdjZjUsIDB4Njc4NWZiY2QsIDB4OGJkYTY5MjYsIDB4ZGE2OGY3MDMsIDB4NjgxNDJmNGIsIDB4MTUwM2U1ZWEsCisJMHhhZjJiZjc5YSwgMHhiM2VhNmFkNCwgMHg2NWY4ZGE4MiwgMHg2MWM1Y2RmNSwgMHhiNDdkMzhmNywgMHhkY2EwMWFiZSwKKwkweGU2NzU3ZWQwLCAweGNiZGU2YTZmLCAweDU3NWRhMzU4LCAweGFlYmI0Nzk2LCAweGViYjUxYjg5LCAweGY2Y2RjNzUyLAorCTB4ZDM5N2Q3NmEsIDB4MzI1ZjVkYWQsIDB4YmVmMmUzZTYsIDB4N2YyZTNlN2UsIDB4YzdjOTVkYjYsIDB4ZGZiMDU4ZTUsCisJMHgyZDkzOGQzMywgMHhmN2E5Yjc2OCwgMHhmZWY3ZDVhOSwgMHg1ODY2MzcyZiwgMHgwMDdmNDBkZiwgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjc2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4ZTI0YmZmMDAsIDB4NTFmODYwNjIsIDB4MzhjZmMxMGYsIDB4OTA5ODE4MTksCi0JMHg3NzAxNDNmOCwgMHgwMTY4NDMzMSwgMHgyMTA2MDYxNiwgMHg2MjYzNjYyMCwgMHgyMjY3NjA2MCwgMHgwNzJiYmY1ZSwKLQkweDlkODc3ZDgyLCAweDEwMzhlMTgxLCAweDc4MWY2N2RmLCAweDVlMjQwZDdmLCAweGJiM2Y0ZGNkLCAweDJlZDFkMzdlLAotCTB4N2UyN2YwNjIsIDB4MDJhZjg2MDYsIDB4MDU4YjBjMGMsIDB4MjEwYjdjMjEsIDB4ZmNjZmY5NTQsIDB4MThhNDc2MDgsCi0JMHgwMmE1NzY2NSwgMHgxNTAwMDNmNSwgMHg4MDUxYjc3YiwgMHgwMDgwNTFiNworCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4ZTRiM2ZmMDAsIDB4NTFmODYwNjYsIDB4Yjk3YmMxMGYsIDB4NzI2ZTE4MTgsCisJMHgwMTQzZjgyMSwgMHhkMDg2NjdjZiwgMHgwYzBjMmM2YSwgMHhjNmNjNDAxYSwgMHhjZWMwYzBjNCwgMHg3MTdlYmM0NCwKKwkweDFkN2IwNDRlLCAweDRjYzMwMzA3LCAweDMxYzhkZTIwLCAweDQ4MWFmZWYwLCAweDdlODc5ZDdjLCAweDQyZjNhOTc2LAorCTB4ODFjMTU5NjgsIDB4NTcwODM3ZjcsIDB4YjQzMDMxMGEsIDB4YzQzMDMzMGEsIDB4MGNmODQwODgsIDB4NTVmMmE4YTIsCisJMHhhOWI2MDg0MiwgMHgzOTc2NjUyNCwgMHgwMDAzZjUwMiwgMHgzNDcxY2MyNCwgMHgwMDAwMDM4MAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjc2VtX3ByYW1fZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZGRmZjAwLCAweDQ1NTQ3Yzc5LCAweGJlZGQ3MGI2LCAweDk3YTc3NzRiLAotCTB4NDJjODQyNzQsIDB4NDAxMGRjMjAsIDB4ODA0ZDg4NTQsIDB4MDI0ZGUzYjAsIDB4MTA2MDJhMzEsIDB4NjZiNzFjMTEsCi0JMHgwNDQ4NGIwZiwgMHhkM2NlN2NkZSwgMHgwODMxYmFmOSwgMHg1NDRlMzhlOCwgMHgzODdjMDY2NiwgMHhhOGQwNDFhZiwKLQkweDFhMGMxYTUxLCAweDE2NmJjM2IwLCAweDI2NjY1NDE5LCAweGI4YzM4ZTNhLCAweDZjOGE4OWJjLCAweGZkMDExMjQyLAotCTB4NWYyODM3OTgsIDB4M2I3NTUzOWQsIDB4NGRiYTZmN2QsIDB4ZTNmYmU2NWMsIDB4NDVhN2VmY2IsIDB4ZWFiN2JhZGQsCi0JMHg5Y2VhZDlkNCwgMHgyNWFhYTc1MywgMHhkN2E5MjA1OSwgMHhmZTE5NzIxMiwgMHg0OGE2Zjk2OCwgMHg1MWQxMTkwOCwKLQkweDFmYjcxNWI2LCAweDA0ODQ2OTI3LCAweDZkZDU5MTVlLCAweDdmYzIyMTAyLCAweDBlZDcyMmI5LCAweDE2YzhlNDI3LAotCTB4ZjVhNTY4MjEsIDB4MjEwNzVlYzgsIDB4ZDM3NjdlYjQsIDB4OTczNWEwYjQsIDB4MGUwNTdkOTAsIDB4YmIzZmRlMGQsCi0JMHgyNWViMDhiNSwgMHg5NmUyZmViYiwgMHgyZWU1N2I2OCwgMHg2NWJhODI1MSwgMHg4Yjc3MjllZiwgMHg2YjJhOTA5MywKLQkweGU5NjNhM2YzLCAweDIyNWRmNmYzLCAweDIyODc0MmQ5LCAweDQ5MGIxMjgxLCAweDhkYjhlNDI3LCAweGFjOGJiZmIwLAotCTB4YWFjZWMwYmUsIDB4ZGRmNzliOTUsIDB4MzQ1NmZkMDUsIDB4ZjY5ZDg5NWEsIDB4ZTE3YmI5NTMsIDB4YmViNGIxZDQsCi0JMHhlMDRjYjBmMCwgMHhhYjZkY2E5NSwgMHhiZWI0NWU5NCwgMHhhMDg0MjgyOCwgMHgwZmRlYzBmZSwgMHg2MmI2OWM3MCwKLQkweDRjMWExMTUyLCAweDhkYmY2OWM4LCAweGJhZDA1N2E4LCAweDA2N2QzOWJiLCAweGI4MzhiZTdkLCAweDVmZGUxNGEzLAotCTB4MmQ3ODJmNWMsIDB4OWJjNWZkZjQsIDB4ZmU4MTlkZjYsIDB4ZmRjODM3MTcsIDB4OTJmZmRhNDUsIDB4MDc1MTA3M2EsCi0JMHgxMzJmYjFiMSwgMHhhOWZjYzc5OCwgMHgxYmU1NmYwMCwgMHg3YWQyYjEzMiwgMHgwYTE1YTVjNSwgMHhiNTQ5MWMwMSwKLQkweGM2MGJiOTRhLCAweDVkNTE0YzdmLCAweDFjNjFjZTMwLCAweGU1NjdjNzQ3LCAweGZhMWM3NDczLCAweDA0OTdiMmRkLAotCTB4OTk2ZDRjMmYsIDB4OWUwMGY4ODUsIDB4NTlmNmRkZDYsIDB4NWU2MTNiNGYsIDB4ZjA4MTk0YWIsIDB4MGFiNWVlZmQsCi0JMHgzODMwYjdiYywgMHgwYWJiMTVmYiwgMHg0YTU2NmRmMCwgMHg5YjRkY2UwMSwgMHgzYjgzMDU5NSwgMHhmNzUyNWJmYSwKLQkweGUzYWUwMTk2LCAweDdjMzJmMjFiLCAweGYyZTZlZDMxLCAweGQ1MTA5ZmI0LCAweDRjNWY1MWRhLCAweDAyNzIxNjg4LAotCTB4ZGE2NTQxZGMsIDB4MTdlNzhlOTAsIDB4ZjdhNDE0ODQsIDB4YTg5MTNhOTIsIDB4MjlmZThlYjYsIDB4NDllOTA4NjEsCi0JMHhmYTE3ZmZmZiwgMHgyNjgzZTA0ZiwgMHg2ZTViNzA1NywgMHg3Yjk2YmQwNywgMHgwZWQ1YmZlOCwgMHg3MGYzOWQ3YSwKLQkweDg1ZWQ0OWZhLCAweGU1ZWJmZGIxLCAweDBhMDc0MGEzLCAweDgzZGZhZDRmLCAweDRjZmVlM2U1LCAweDU1ZmJkNzJjLAotCTB4ZmM2ZmRiYzQsIDB4ZTBkY2IwODMsIDB4MjdmM2UyZjcsIDB4ZGNiMGEzZmQsIDB4ZmNiMGQ3ZTQsIDB4Y2IwY2JmOWQsCi0JMHhkZjFjYmZhMCwgMHg4NTlmZTJkYiwgMHgwZmJmNTZlNSwgMHhhZmUzM2Y5ZiwgMHg1ZmNlYjJjMCwgMHhmNzlmY2Y4ZCwKLQkweGJkNjU4YmRmLCAweDVmY2Y4MDNmLCAweDMyYzNhZmYyLCAweDcyYzVhZmU0LCAweDk2MDM3ZmE3LCAweGJlMjBmZTBkLAotCTB4MGViZjhhZjcsIDB4MDg3ZjQ2Y2IsIDB4MzdmMWVmOWYsIDB4NDdmNjE5NjIsIDB4ZjQwYmRjYjAsIDB4ZGZjNDY1YTUsCi0JMHhmZjdlZTU4YywgMHhmYTBmMmM1MSwgMHg0M2JiZjA1YiwgMHgzZTU4OTNmZSwgMHgxZWVlZjFjMiwgMHg4YTI0OGE0NywKLQkweDNjNDZiNzM3LCAweGVhNDg1YzU0LCAweGE2NDhhZDY0LCAweDU2NzJkNGY1LCAweDUwMjNiZjRmLCAweGJhN2FkMGE0LAotCTB4MWUyOWQ2OGYsIDB4MTQ4ZDJkN2IsIDB4NTdiZDY5NTksIDB4YjljZjZiMzUsIDB4NjhkYjE0OWYsIDB4ZGFjMDI3M2QsCi0JMHgxNWEyM2RmYiwgMHg1ZmJkNjlkYiwgMHhiODFmNmIyZCwgMHg0NDljNTAyOSwgMHhhYzgzMDNlYiwgMHg0OGZhYWFmZCwKLQkweGFmZDY4M2IxLCAweGZjZjZiMTBhLCAweGQyNzEyOTMwLCAweGQ1ODQ3ZTdhLCAweDI1Njg4ZTBiLCAweDY4MmY1YTJlLAotCTB4MGZjMmY1NjYsIDB4NWE2ZTI1MDMsIDB4ZGY2MTZjMmYsIDB4MjkxMzM5OGYsIDB4MzFmNWE2NDksIDB4YzI3ZGFjZWQsCi0JMHg0M2QxMzIyNSwgMHg4MDg4MTNlYiwgMHhkMTY3NjJmNSwgMHgyZjVhMTRjNCwgMHg2OTdhYjBmNiwgMHgxYTkyZDllZiwKLQkweGNhZjZmZjg3LCAweGU1MDk3MzJkLCAweDRkYzBiYTg1LCAweGViNDU5NDlhLCAweGUyMGFjYjRhLCAweGNjMGNmOGE1LAotCTB4MjY0NDdhYzIsIDB4NDhmZGEwZjMsIDB4OGQyNmI2NjAsIDB4YWM4NTc1YTYsIDB4MGVmZmY2ODQsIDB4ZmRmNmM2MmMsCi0JMHhlZGVkOGFiMiwgMHhiZWQ4MTU4MSwgMHhkZGIxNTE1ZiwgMHhhYzdlZWFiMiwgMHg2YzM1OTQxZiwgMHgyMGY1NWI0ZiwKLQkweGQxNTA3ZmJlLCAweGFhZTA3ZGIwLCAweDQ4N2ViMTQ3LCAweGE4ZmI2MWY2LCAweGY3YzViZjU1LCAweDZjM2UyOTBmLAotCTB4NTA3NTdjN2YsIDB4ZmZlYjQ4OWIsIDB4MDBiNmY4MjEsIDB4YmUwOGQ3NWYsIDB4ZmMwNzkyMGEsIDB4YTcyY2NhMWEsCi0JMHgyMDQ2YmFmYywgMHgxZTNlNDBiMywgMHhmMmE2YTYwNiwgMHhkMTRiMjZiMCwgMHhmZGVkYmY0MCwgMHg1MTY5ZjBiYSwKLQkweDA2OWRiY2UwLCAweDNjY2YwNWY1LCAweGJjZmQ4YjljLCAweGI0YzhmZDgwLCAweDdlZWJiMTFmLCAweGNhMzM3YzI2LAotCTB4NmY4NGNmZDAsIDB4MWE3ZWY0MmEsIDB4N2IxYWJkZTAsIDB4ZmJkOWZhZjcsIDB4M2MyMzE4Y2QsIDB4ZmJkNjJjZGYsCi0JMHg1YzdlYzI2OSwgMHg4NGQ3OWJkZCwgMHhmMDhjZTNjYiwgMHhmN2FhNWU1YywgMHg0OWZiMDg3MywgMHgxMTNjMWVlOSwKLQkweDlmYTFhNDc5LCAweGVmNTBiYzg4LCAweDRmZDg0ZmU3LCAweGEzYzFlZWNmLCAweGZkMGRhMzI5LCAweGJkMjJjYTY4LAotCTB4NGZkOGEzOWYsIDB4ODlmYWY3NTYsIDB4ZjA4ZDYzMjgsIDB4N2VmNDRiMjgsIDB4ZmE3ZWM2M2UsIDB4OWE1ZTZmNzQsCi0JMHgxZTExYmM3NSwgMHhjZmRlYTU2YiwgMHg2ZTdiYTQ2OSwgMHhlZmQ5ZmFmNywgMHhiZjY3ZTIzMiwgMHhmMzlmOGEyYiwKLQkweGVlODBjZjA4LCAweDZkZDhhYmNkLCAweDNiYjE0ZmM0LCAweGQ4NGI5ZjhhLCAweGViZGQ5NWNmLCAweDg4ZGJiZjY3LAotCTB4MjhlZWZkOWYsIDB4ZTYwMTY0N2UsIDB4ZjM3YmE0MzUsIDB4ZTIzNjRlMmEsIDB4OGEzOTM4YTcsIDB4ZjAwMGI3MWYsCi0JMHgzYzFlZWQwYywgMHhmMTFhN2IwNywgMHgxNDY3YjA3MywgMHhjZjA4MTkzZiwgMHgzM2MxZWU4OCwgMHg5Zjg4ZGQzMSwKLQkweGZjNTFlOTg5LCAweGU4Y2YwOGE4LCAweDMwNzNmNWVlLCAweDgzOWY4OGRkLCAweDVjZmM1MWU5LCAweGVmOGNmZDg5LAotCTB4NjYyNmJjZGUsIDB4MzEzM2YxMTgsIDB4MDI5ZjhhMjMsIDB4NTdjOGE3ZWMsIDB4ZGExMGYwODcsIDB4M2Y3MTJiOGYsCi0JMHhmMTE4ZmE4NywgMHgxNDRmYTg3MywgMHg5ZmIxNjMzZiwgMHhiYzlmYjQ0OSwgMHhjZDI5ZmJhZSwgMHgzNGE3ZTIzMSwKLQkweDg5OWY4YTI3LCAweGJiZWJlNzg4LCAweDFjYTFjZmQ3LCAweGU1MGU3ZTIzLCAweDA1MzNmMTQ0LCAweGJkZDI5OWZiLAotCTB4MzVmNjk1NzksIDB4MmZiNGE3ZTIsIDB4ZDJiNWNmYzMsIDB4ZTg2NzVjNTAsIDB4ZTkxNWU5ZGEsIDB4MmVmNWQ3MjcsCi0JMHhiZWZhMDRkMiwgMHhkMTc1NjFlOCwgMHhmNzYwMjVlMywgMHg0MzNkYmE4OCwgMHhiZTkxMzU5YSwgMHgyOTRmYWNlZiwKLQkweGRhYzQ5ODc4LCAweDAyNzdjNTM1LCAweGNhZDQ1YzdlLCAweDkyNmJiNThiLCAweGVjMTkyNTQ3LCAweGQ1MmQxNGE4LAotCTB4ZDY1MWVmNTAsIDB4Y2Y3ZWYwY2IsIDB4ZjY4NjdlZjIsIDB4MTk1NzU5OGMsIDB4MDU3Y2IzZGEsIDB4YzU3NjdhODYsCi0JMHg3ZGZiYzMxOCwgMHhmNTBkOGJhYSwgMHg2MGRlZjdiZSwgMHg3MDM3M2Y3OCwgMHhiNzllYTFiMywgMHhmNzg2MjdlZSwKLQkweDMxY2VkNDA3LCAweDYxYjE1ZmI0LCAweGNhZmRhMWIxLCAweGZkNDM3MmUwLCAweDM3N2ZiYWVhLCAweGY0MjQzZmJjLAotCTB4OWFmZGExODAsIDB4ZWQwZDg3YzYsIDB4MWI4ZjIzNDMsIDB4M2YwZWMzZWEsIDB4NDQ3Zjc4NjksIDB4ZmI0MzE2ZjMsCi0JMHgxYmNmYTNjOCwgMHhlY2I3NDdkYSwgMHg5ZWM3ZDQzNCwgMHg3Zjc4NjNkYywgMHg0MzdlZmI3YywgMHg2ZjhiZGFmZCwKLQkweDIyMmZkZTFhLCAweGRiZGEzNjdmLCAweGVmMGMwZmI2LCAweDZhN2NmMjRmLCAweGYzMmViZjY4LCAweGVhOWQ5MzczLAotCTB4OWFiZjFjZjQsIDB4MmI5MDQ1ZDcsIDB4MjA0OTdlODIsIDB4MzU3YjQxNGIsIDB4YWViMDUyZTIsIDB4M2YzMjcyZjQsCi0JMHgzZDQwYjVjNSwgMHhkOTQ3Zjk0NiwgMHg0MzRkNTczZiwgMHhkNDdmYTRiZSwgMHg1NWVhMjg2ZSwgMHg3ZDBiNDU3MSwKLQkweGJlMzFkM2ZlLCAweGY5ZjQzYzJiLCAweDM1ZGYxNTRmLCAweDBkZjYzODllLCAweDY0ODEzN2U1LCAweGEwNWFhOTQyLAotCTB4OTVhZmI3MzQsIDB4NjcxN2JmMTksIDB4MzFmODFhNWYsIDB4ZDJjYWJlZmQsIDB4ZDY4NTMwM2UsIDB4MjE0NTg5N2IsCi0JMHgwNDU3OGY5MCwgMHg0OWQ1ZGEwYiwgMHhmNzg2YTkyMiwgMHhmZDA0YWM5MiwgMHg4NWI5YjVhNiwgMHhlNDYyMDc0ZiwKLQkweDZhMWY1ZDYxLCAweGZkMWQwODY3LCAweDk5N2Q5M2FlLCAweGZhYWQ0NzY4LCAweGNlNzYwMDI4LCAweDVlNzQzZTlhLAotCTB4NGQ3OTA4YmQsIDB4ZTgxMjI4ZjgsIDB4YjNlZmJmNGYsIDB4ZmI0N2QzMjAsIDB4Y2ZkNDJhYjMsIDB4YTE1ZjFkODgsCi0JMHhmMWM2MGZlMywgMHg4NzBmMjAyMywgMHg5ZDExZmM2MCwgMHgxYmY2YjdjNywgMHg5NmRmMTg2NSwgMHhkZjE4NjE1MywKLQkweDNkZjFkMGE2LCAweGY1NWMzZmQ0LCAweDEyOWYxZjE5LCAweDZmMjEwYzYxLCAweGY4ZTE5ZjA5LCAweDFjMGE5Y2Q2LAotCTB4ZmQ0MmFkN2YsIDB4OTNmMWQ4YWUsIDB4YzMzN2UzYTIsIDB4MzQ0YmRmZmMsIDB4OGM2MzdlZmYsIDB4NmM1OWNmZjMsCi0JMHhlNmMyYmY5YywgMHhiM2FhZmVmZiwgMHg5YzI0ZmM3YywgMHg1OWMyMDdmZiwgMHhjNTljZmYzNiwgMHhkNjU2ZmU2YywKLQkweDc3N2M3NDZmLCAweDMwMmRmZjE0LCAweGUzMDRmMWZlLCAweDE5YzZmMzViLCAweGE5NzdkZmU3LCAweDM2NTZmZTcxLAotCTB4NWY1NWU5ZmUsIDB4Mzg5ZGYxZjIsIDB4OTdjMmU3ZmUsIDB4OTc3ZGZlNmMsIDB4ZDU4YWY4ZTIsIDB4NTFmZTA1ZTcsCi0JMHg4M2FhOTNiMiwgMHg5YmQyN2M3NCwgMHg2MDBjYmUyYSwgMHg5NDBlM2ExNywgMHhkMGE5NTI4MywgMHhlODRkYjIxMCwKLQkweDM0ZmM3MDg3LCAweDU3ZGJmMTg5LCAweDUwZGY5NDQ5LCAweDM5ZjAwNTlmLCAweDU5Y2Q1MjA5LCAweGNlNDZmZDQ4LAotCTB4OGJlYTRiZWIsIDB4ZDg3YmQwMTQsIDB4ZjlhZGZkNGUsIDB4OGQ3OWQ0MWMsIDB4NTkzN2YyMjIsIDB4YTAwZTBkNmYsCi0JMHg4YTM2YjZmMCwgMHg1YmNmYTgwMSwgMHhmYTA4M2UzZiwgMHhlZTRhY2FiNSwgMHgyNGVmODcyZSwgMHg5ZmU3ODExMiwKLQkweDk2Yzg3YWZkLCAweGNiOTk3OWQ4LCAweGYxZjJiNWY5LCAweDhiNzkxODk2LCAweDY0YzU4MWZhLCAweDZmODUzNTUwLAotCTB4ODhjMTMwMTIsIDB4ZDQyN2ZhOGUsIDB4ZjhjNzAzOGYsIDB4MTBmN2VhNDMsIDB4MmE3Y2ZmZWEsIDB4OWJmZWYxYjMsCi0JMHg2ZjUwN2JmYSwgMHgzYTFlZmVhMSwgMHg3ZTE1NjRjZSwgMHgzNzdiYmI0NywgMHhjZTVmYzI5MywgMHg2MjQ0ZmZlMSwKLQkweDFkYzlmYWYyLCAweGU1NDAzMDQyLCAweDBkOWZhYmYzLCAweGVlZmFmZjQ1LCAweGU5MTQxZDdiLCAweDBlY2M3MDFkLAotCTB4ZTlkNDMwZjQsIDB4YTc0MDAyYmMsIDB4ZTBkNmRkZjYsIDB4YWJmMTAxMTYsIDB4YTFhNmJlMDIsIDB4NzczMjEyNjgsCi0JMHg3NWM1MzY1ZCwgMHhkZDdmZmJjNywgMHhlMDkwZTUzYiwgMHhhMjU2ZTQyNiwgMHhmZGY0MTljOSwgMHg3ZDBhNTczYiwKLQkweDE5ZGM3NDNjLCAweGFkODBiNTlhLCAweDA1YjY1YTQzLCAweDViNjQ5YWU1LCAweDczNzIxMTQ2LCAweGY2OTk1MGMzLAotCTB4ZjI2OWE2NDAsIDB4ZTMzMTJkMjcsIDB4ZDYzMzJmNGUsIDB4ZWIxYjk0NjcsIDB4NWIyNmIyYWQsIDB4ZDNhZDVjMjgsCi0JMHhmNjk5YjIwNCwgMHhiMTk2NzMzYiwgMHhiZmE3MWY1ZCwgMHg5OWQxOTUyNSwgMHg3MTRlNTc4ZiwgMHhjZDFmNDU5MiwKLQkweDFlMDBiMjg0LCAweGIzY2U5MDdiLCAweDFkNWJlYzNjLCAweDMyYjlhYTllLCAweDFmMWZhMDg5LCAweGFlODA0OWU4LAotCTB4ZWY3YzM0ODEsIDB4NmYzNjFlMjcsIDB4NjRiM2JjMzMsIDB4ZTc0ZTU2OWIsIDB4MThiNjZiMzksIDB4YzMzNmZlMDQsCi0JMHg4NzVlZmVmZiwgMHhlNWE3Yzk2NiwgMHg2MjY0MjdiYSwgMHgzMzFmM2NlOSwgMHhjY2Y5YjdmYywgMHhiMGM5MDlmMywKLQkweDYxNWVkZmNlLCAweGU2ZjhjZTdlLCAweDI3ZmZhNzM4LCAweDNjYjQxZmMwLCAweGUxNDFmYzAxLCAweGEzZjljNjNmLAotCTB4ZmUzMmFmNDMsIDB4YTZmYWIyYTgsIDB4NmZiNDNmMDIsIDB4OTVkMjA5MTQsIDB4OWNhZGNiZjMsIDB4MWFkN2U2NWYsCi0JMHg5ZjEwODJmOSwgMHgzODVjNzQwYywgMHgzODc4Mjg0YiwgMHg3MjY2MGY4NiwgMHhjMWI4NTgzZSwgMHg5Mjc3MzdjOCwKLQkweDg3MTU5YzgwLCAweGRmYWRiNzJlLCAweGRhYTY2MGZjLCAweDcxMWY3ZTc5LCAweDkxZmRiOWJlLCAweGNlOWY4ODdkLAotCTB4YmE3NDY0ZjMsIDB4Y2VlOWQzOGIsIDB4YWRmYjYzNmEsIDB4NzI3N2FlOWMsIDB4ZjBkYWNlYmEsIDB4N2Q1NGViZDgsCi0JMHg0MWE4OWY5MCwgMHhlYWJkZTQxOSwgMHgyZDllOWQzZSwgMHgzOGZhN2EwNiwgMHhkZTcwY2QzZCwgMHhkNzc5ZTljNSwKLQkweGNkM2QxOGNmLCAweDdhNzBiNmYwLCAweDJmMzg2Y2I2LCAweGUxOWQ3ZTkzLCAweGY3NzdjMzM1LCAweDgzZTY5ZGJkLAotCTB4ODFkOWFkNzEsIDB4NmFhY2Y0ZjgsIDB4MmM3MTVhMmMsIDB4ZTg2NTc5ZTYsIDB4NjJjNzE1ZmEsIDB4ZGQ0OTZjZTQsCi0JMHg1MTdkNDMzNCwgMHhmYmMzMzZmMCwgMHgzNmNjMzcwYiwgMHg1ZGFmY2ZiNCwgMHhiYjlmNjg2NCwgMHg3ZDQzMWVlZSwKLQkweDg2NjdlMDc2LCAweDc3YmVlZmY3LCAweGNlZmRhMTk1LCAweGVkMGM4N2VhLCAweDY2M2M1N2I3LCAweGRiZTZkZmE4LAotCTB4ZTY3Zjc4NjgsIDB4ZjY4NmNkYWMsIDB4MTljZmU1MTksIDB4ZWQ5N2E3ZGEsIDB4NjlhN2Q0MzAsIDB4MGJlZjBkYmIsCi0JMHg2ZGY1MTc3YiwgMHhmN2Q1NzVjMSwgMHhlZjEwMTk5ZiwgMHhmOTE1OWJmYywgMHg3NGVmYWNkNCwgMHhhZmNjNzhiZCwKLQkweGZlZTNmM2UyLCAweGY0OWU1ODQxLCAweDY5ZjlmMTdiLCAweDU3MmMyOGZmLCAweGViYTZmZTgxLCAweDJiMzc2NTgyLAotCTB4ZGQ5ZjFlYWIsIDB4OTc0MmY4MTcsIDB4NmY2NTRmOGIsIDB4YWVkOWU4MGUsIDB4YmVmZWExZjQsIDB4YmZkMWVmNTksCi0JMHg4YTc2NzhlYywgMHg0ODE1MmU1ZSwgMHg2ZDgzYWMzOSwgMHg5ZmQ3NGVkYywgMHg0ZWNjMmRkYiwgMHgyYzAxZTQyMCwKLQkweDZlNGMyYTk3LCAweDJhY2NlZTk3LCAweDQ3YTg2ZTI2LCAweDEzM2I1NjA2LCAweDAyNDI0YmY3LCAweDZkN2U2N2NlLAotCTB4ODVjZTAxOWUsIDB4YzEzNmFlMWIsIDB4NmFmOTA1YjcsIDB4ZTE5ODcwNTEsIDB4YjFiYTkyZjksIDB4ZWNjZWVmODYsCi0JMHg2NWJlMTExMywgMHg2MWEzZTMyMCwgMHhkZjdmMmIzOSwgMHg3MjMzZmEwMiwgMHgxMGZhNjcyMCwgMHgwMGZiNTc4MCwKLQkweGQxM2Q4ZGViLCAweDJmZTMzYjllLCAweDAwNmM3MTViLCAweGNiMWNiOWUwLCAweDU4NTlmZTkzLCAweGIwZmJmNzFlLAotCTB4YzBhZmU2M2MsIDB4MzU3ZjEzZjIsIDB4N2JmZTJkOTYsIDB4N2Y2ZmZjYjEsIDB4ZmQwZmNiMDAsIDB4ZGY3Y2IwZWIsCi0JMHg1MWU1OGI1ZiwgMHhkZjJjMDZmZiwgMHg3Y2IxMDdmMywgMHhlNTg3NWZkNywgMHg5NjEwZmUzYiwgMHgyYzQ2ZmVjZCwKLQkweDk2MWFmZDViLCAweGYwYzRiY2JhLCAweDE4YWNkZjRiLCAweDlmZjVkMTdlLCAweDcyNGYxZmFlLCAweGZjMGQzOTdlLAotCTB4YjYyZjhmMTIsIDB4ODRlMmY5MTgsIDB4NjE3YzhkNWMsIDB4M2E2Njg3ZDYsIDB4ZjdkZmY1OTgsIDB4M2YyOTg3ZTUsCi0JMHhkMDc0M2YxMiwgMHhlZjQ0ZGIzYiwgMHg5ZGU4YWViYywgMHg3YmQwYzYyOSwgMHhlMGMzYzU4YSwgMHgwNWZlZjRlMSwKLQkweDVlYzcxYmMwLCAweGZiOGIwNDlmLCAweDQ4M2IxODg4LCAweGZhYzBiMjJiLCAweDJmZWY5Y2IwLCAweDNmNTgwN2QwLAotCTB4YTFhZWM3YzcsIDB4YmRhMzM1ZGQsIDB4ZmEwNDFjMTQsIDB4ZmZhMGRjZjgsIDB4ZjlmMTA4MTksIDB4NTEyOTQ3NzMsCi0JMHhjZmNmMTM3MiwgMHg3ODg0YmY0YywgMHhhYmU4ZjE4MCwgMHgyZTk0ODIwYiwgMHhkYmI3M2EzZCwgMHhlZDVlMTg5MywKLQkweGU4NDY1MjE2LCAweDgwZDBmMTdhLCAweDA2NzNiYzY3LCAweGE5MjI1ZDYzLCAweDNiZDA3ZGYwLCAweDVmYTcxNWNkLAotCTB4N2UwMjgzNmEsIDB4OGQ2YmMyYmIsIDB4ZTg3Y2FiZWIsIDB4ZmY5M2Y4ZWYsIDB4OGE3Mjg0MmMsIDB4NDlhMWQ5ODUsCi0JMHg4N2I0NDQwNywgMHgyZjY5ZTQ0OSwgMHhlZmFhMzdlMCwgMHg4ODRjZGVhZCwgMHg1MDBmYjc2MywgMHg5MzFlYjgzYywKLQkweDAyZmUyMzEyLCAweDNkZmMwNmM1LCAweDhjZDQ3MTQ0LCAweDI2NmQ1OWViLCAweDU3ZmZhZmUyLCAweDgxYmFiMzAzLAotCTB4NjRmNGFlYmYsIDB4MDM5Y2Y4NTcsIDB4ZTAxN2ZlZjMsIDB4ZDVmZDJiYjMsIDB4OWEyMmRlOTUsIDB4OWQyMzUyZmEsCi0JMHgyMWRlZGI3ZiwgMHgzMGFiMGYwNSwgMHg1YmUzYjdlZSwgMHhjMzMyYjdkZiwgMHg3YzhlZjgxMywgMHhmM2FlOTZkYywKLQkweGExMGU3MzcxLCAweGYyZTU5Y2UzLCAweDhhZTFhZTcyLCAweGI0NGJhMDY0LCAweDI5ZTgyZTlmLCAweDM5NDdkN2ZjLAotCTB4ZTZjZWJmYTAsIDB4NmI1YmZiMWEsIDB4MjE1OTJmZWUsIDB4NWM3NDM1YzIsIDB4NjQ5MGEyOTcsIDB4YmU4ODU2NDIsCi0JMHgwNmZkMTE1YSwgMHhmYzAwNGI2ZiwgMHg2ZjBlYmRmMSwgMHhkOGZlMGE4ZCwgMHg1NDQ2M2ZlOSwgMHhiN2U4ZDllOCwKLQkweGI0ZmMzYjlmLCAweGU1OWJmYzFiLCAweGIxZjU2Mjk5LCAweGNiZDQ3NDM4LCAweGI1NmU1MGNhLCAweDY4MGZkNjMzLAotCTB4ZDVjZmQ2MzQsIDB4OWMyMTY1MGEsIDB4Y2I3YzlhOTcsIDB4M2MwNzU4MTAsIDB4ZDA2NGM3ZDUsIDB4ZWE1ODk5Y2IsCi0JMHg1NGNmMmNmZCwgMHg3ZjRhMWM3MCwgMHg1M2VhNDdhNiwgMHhmNjljY2Y1MCwgMHgxZmJkZjBkYiwgMHhmZDQ0OGUxYiwKLQkweDQwZDFjMDc0LCAweDgzZGZhNTNlLCAweDRiY2U1ZDg4LCAweDM5NDI3ZWZjLCAweDEwMjgyZTkwLCAweGY5NjEyNDhmLAotCTB4ZWNkZmYwMmIsIDB4ZmRjYmJmZjQsIDB4ZWIwOTVmYTAsIDB4MjE1NWJmN2EsIDB4MDZiZDYwMzEsIDB4YzYxYmQ3OWUsCi0JMHhmYWE5ZGZhMywgMHg5NzdjMmMxZSwgMHg3MjI0ZGU1OCwgMHg0YTc3ZTc1YywgMHg3ZWY4MzdiNywgMHg3YjNhOTJmMSwKLQkweDRjMmVkMWI1LCAweDFhYWJkNDMxLCAweDc2MGRhYWIzLCAweDBjMDNmYzIyLCAweDAyNDEwYWUxLCAweDY3Mjk3NzdiLAotCTB4YjljOTM2YmYsIDB4MmI2OGY4MGUsIDB4ZGY4MGZiMDQsIDB4YTU1ZWY2MDUsIDB4YTlmMTQ1YWQsIDB4YzBjZDI2MjgsCi0JMHhlOTQ2NzM5ZiwgMHhmY2NlYWY3YywgMHg1M2E3ZWE4MCwgMHhlNDA0Yzk2ZiwgMHg1MGEyNWM4YiwgMHg0N2Y0NzYxNSwKLQkweGExNjI1MDU3LCAweDM2YmNiOWY1LCAweDY0Yzk2MWE3LCAweGJkNGVhZjU4LCAweGY1ZGEyMzcyLCAweDFiYjk0OGYzLAotCTB4NTIwYWNkZmMsIDB4Y2ZmMTA4NWIsIDB4MDY1MmM0YjMsIDB4YmM5Njc5NzIsIDB4MjMxNjFlZTMsIDB4MDU0NWU3ODcsCi0JMHhjZWJiOTllMSwgMHg3ZjUzMTc2OCwgMHhiODVmNTBkOSwgMHg0MDVmNThjMSwgMHg3ZDg3NGU2ZSwgMHg2NWViMDVmMCwKLQkweDVmNDAxNDEyLCAweDE1M2ZkYjE4LCAweDI0MmQxYzk5LCAweDdkNjA2YmQ1LCAweDc1YjMyZjVmLCAweDQ4ODc4ZTZjLAotCTB4NTU1ZjU0ZDksIDB4ZTE1NGZhYmUsIDB4MWZmZjVhNmMsIDB4ZjQyZGM1OTEsIDB4YTk0NWRkN2QsIDB4MWM1ODlmY2MsCi0JMHhiNDY4YWNkYSwgMHg2MTg2ZDNmZCwgMHg0M2NkNTJiNywgMHg4MWFlMGZiZiwgMHg0YmIwMmFmNSwgMHgzYjUzNmVmMCwKLQkweGMyYmJlZmQzLCAweDVmNTc4NjZmLCAweDJmZWQzYmZmLCAweGViMmEzODczLCAweGM3MTgyZDA0LCAweDAyNDliMDBlLAotCTB4NTgwMzc3ZjcsIDB4ODYzYzk2MGUsIDB4NTMyOGMyYjgsIDB4NTNmMzdiZmQsIDB4ZDNmMDMxMWEsIDB4NGFhN2QxNTYsCi0JMHg4MGZmMTkzZCwgMHhlZDQ4MjUzZiwgMHhmNDg3ZWY4YSwgMHhmZmE5ZDk5ZiwgMHhmZjZhM2ZjMSwgMHg4NWZmNjliZCwKLQkweGZkNDdmZTg2LCAweGVmZjdmZGE4LCAweDY5NDRmZjA0LCAweDJiZmVlNzQ0LCAweDk1ZjE3ZDVmLCAweDhiMjdkNTAwLAotCTB4NGRkYWZmYjcsIDB4NGE3OGZhZTgsIDB4NTJmNzRkYWEsIDB4ZjZkZDJlZmEsIDB4N2NlODFiYTAsIDB4ODFiODBhNTIsCi0JMHhjNTA1NGY1ZiwgMHhmNTljNjBiMiwgMHhlMDQ5M2VlYSwgMHgxNGU2YTJmNiwgMHhmZjA1OGUyMCwgMHg3ZTlmZmRhNCwKLQkweGRmZTgxN2ZlLCAweGY2NGRiNTdmLCAweGNlYWE3YzYwLCAweDM5NTJiMTFhLCAweDY4YjBkNjVjLCAweGZhYzdjOTMyLAotCTB4ZjZiZWFjYzcsIDB4OGRlYTExMGIsIDB4ZmM1YmZlNDYsIDB4MjFkM2FmZWMsIDB4MGE3MjgyZGYsIDB4ZDA0NGQ3OGYsCi0JMHhmNWI2NWQ5ZSwgMHg5NzU4NTJiMywgMHhjYTNiNDhhYSwgMHgxODNiZjk5MSwgMHhlYTJhNjJmZiwgMHg3MjRhZDliZiwKLQkweDI3MGE3NmU3LCAweDFjNTVkZGZhLCAweGJmMGQ1NTJmLCAweDQzNzQ0MmY4LCAweGQwMDlmZDc5LCAweDQwNDNkNDE3LAotCTB4NWRmY2Q4YmYsIDB4OTc0ZmI3MDUsIDB4ZTNiNGFlNGEsIDB4MjMyNzE0ZDQsIDB4OGJkMDQ4YzksIDB4OTA0ODVlM2EsCi0JMHhhYmUyYTdkOSwgMHgzYzQzZTU0ZiwgMHhiN2Q2Y2NmMiwgMHhiZTBjNDJkYywgMHgxNzNhNzk3NCwgMHg3YjlmZmI5YSwKLQkweGI3N2FjNGQ0LCAweGFjNWJjYTk1LCAweDViYWZhNDFkLCAweGFiYjcyMzZhLCAweDJhNWNhY2MzLCAweDFmOTBkYzQ3LAotCTB4ZWNiMzc0YjMsIDB4NGJjN2QwMGQsIDB4OTlmYTdjNWYsIDB4ZjgzZTIxMjcsIDB4MDA3N2FiMzcsIDB4OGJjOTdmZWQsCi0JMHg4NjM3YmZhZiwgMHg5MGVjOTdkNiwgMHg2OWIzMjZkMywgMHgwZWY0ODUzOCwgMHhmZmQxNTRmYSwgMHhhMGU4MmRlZSwKLQkweDVmOTdlMmM3LCAweGVjMjFkNDU3LCAweDFkYTlmZGY5LCAweDYzYjI1OTc0LCAweDc0ODY0MjlmLCAweDY4NDk0N2M2LAotCTB4OGNlMmQyOWYsIDB4YzdkMDlmNDMsIDB4ODgyNzYwYTUsIDB4MDBhZDdlYWYsIDB4MTVlZDRmZmQsIDB4MWM2ZTQ2NDgsCi0JMHgxZDdlNmU3YywgMHgxM2MwMDBlZCwgMHgyYmQzOTNkMiwgMHhmYmQzM2Y0YSwgMHhhMDJlOTQ1NSwgMHgzMmY0Y2RiNywKLQkweGY0MDUzN2JmLCAweDJmZDYwOGNiLCAweGZlNTAyZGU0LCAweGU0MGY2OTdlLCAweGY1NmZiZDE1LCAweDVlMmExZTAyLAotCTB4Zjk4NmUxNWEsIDB4MTlhYTkwOWMsIDB4NjBmNTNmOWYsIDB4YWZjNzQ2YmEsIDB4MWVlOTAzOTAsIDB4OGFmM2Q5MmMsCi0JMHhmMjFiZmRkZiwgMHhmZmI3YzJkZiwgMHgzNWUzMWQyZCwgMHhlMGIyY2I0NCwgMHg4MmM4MTQ1YSwgMHgzNGRmY2U3OSwKLQkweDgwYjllNzAzLCAweDJiMGY5MGY4LCAweDQxY2IxMjllLCAweDkxMjk3ZTFmLCAweGU0NzExZGIyLCAweDkzOTczY2U0LAotCTB4NzEyODViMTMsIDB4ZDA0ZjNjZTksIDB4NmRmMzA2NjUsIDB4ZGI4MzExZGUsIDB4ODdiZWRlZDAsIDB4MzdmODNlODAsCi0JMHgzMTZhMTczZSwgMHgxYjRiZmQ2MCwgMHg5MjFiZDdhMywgMHhhYjUxOTdlZSwgMHhiNzdmOTYzMywgMHgzYTA2NmRhZSwKLQkweDY1YTNlZTlkLCAweDE1NDYzZWMwLCAweDFmMWMwMjkxLCAweGFmZGE2NWMyLCAweDBjYTRmNmY4LCAweDRhYTIyNzQ2LAotCTB4YmEzYmZjODUsIDB4NzNjMDk3ZWUsIDB4ZDY1OWJmNzgsIDB4ZWY4NmY5ZWMsIDB4OGVkY2U1YzgsIDB4ZjFmMjU3ZjEsCi0JMHhiMDQ5ZGMyOSwgMHg4ZjQ4OWY1ZSwgMHhiMmFhYjc2ZiwgMHhiYWU4MDdhZSwgMHgzMTY3YzMxZCwgMHg3ZmU0Y2VmMiwKLQkweGRlNGM0M2ViLCAweDRlMGZmOTc1LCAweDBiZjY4MzJiLCAweDgyMzkzMmVmLCAweGE0M2Q2MGVmLCAweGIwMzI0NTcwLAotCTB4MDIyZGRmN2QsIDB4ODkyYjA3ZWEsIDB4YWRmMzkzYzQsIDB4NjM3Mzk3MzIsIDB4Mjg1Zjk5YmIsIDB4MWM5MDkyZmMsCi0JMHg0ZTMwMzdjMywgMHhmNzAxZDIyYSwgMHhhN2FjMTYzMSwgMHhkMWU4YzdkZiwgMHhkZGQ3MTgyYSwgMHg4ZTVkNWZiOSwKLQkweGQwN2Q3MjE3LCAweDY0MDdkMjZhLCAweDg5MDNkMzEzLCAweGFlMDBhYWVkLCAweGUwZTU0YjdmLCAweGZjODI0ZjMzLAotCTB4YTgwZDc5NTIsIDB4Mzk3MmJmMjAsIDB4ZmFmM2ZmY2MsIDB4ODRmZGVmMDMsIDB4MjFlN2NkY2EsIDB4N2E4ZDZlNWQsCi0JMHgxNWI3MmNkNSwgMHg3ODkwNDczYiwgMHhkM2I5ZmI3MiwgMHgyZGNhZTI0YiwgMHg2ZTU3MWU3ZCwgMHhjZmM4MmQ5ZCwKLQkweGFhZjVhZmZmLCAweDk5MGNjNzhlLCAweDBlZWFmMWUyLCAweDMyN2FlYTNjLCAweDdhY2QzZTExLCAweGM2YTRhNzcyLAotCTB4ZWZmNDkzZDUsIDB4OTlkODUyNWQsIDB4ZDQzZTc1MWYsIDB4MGJmMTZmZjksIDB4MWY0MTdkOTUsIDB4ZTc1NGY5NDUsCi0JMHhlYTlmMjhjMywgMHg1ZTI5ZDg3YywgMHhiOWEzYzA2YSwgMHhlZmIwZWZmZCwgMHhkYjYyZmMwMSwgMHg3NTE4ZjUzOCwKLQkweDAxNWU2ZDIxLCAweDMzOGFmZWU1LCAweGI0YWZjYzE2LCAweDVmNzAxNzBkLCAweDA5MDZkMDY0LCAweDNjNWI2ZmViLAotCTB4OWQ0ZWMwMjMsIDB4Y2ZkNWY2M2EsIDB4YmJiZTQ2N2YsIDB4Y2I3ZGYwN2YsIDB4M2YzZTI5NTcsIDB4NmVjODQwMTksCi0JMHg1ZjA0NjUyOCwgMHhjOGU3YTU4YSwgMHhlYWIzODMzMCwgMHg0M2Y2MDkwOCwgMHhlNTg5YTBmZCwgMHhjZmY0ZmUzMSwKLQkweGJkZjc2NjY1LCAweDYxY2VlMWZhLCAweGI2YTJjNzgwLCAweGE4MmRjOWMxLCAweDlmYTIwNzM3LCAweGM4ZjVjNTU5LAotCTB4MGM5YTgwYjksIDB4Mzg1Y2Y1ZmEsIDB4NzNjOWZkMGYsIDB4YmM1NzQ1ODcsIDB4MzhlN2M2ZmMsIDB4Zjg4MDVmN2QsCi0JMHhiNmRiMmQxOSwgMHhmMjkxNWE5MiwgMHg0NzY5MWI1ZCwgMHhkNWIwMjJiYiwgMHhkOWM1YjY0NiwgMHg5OTkwYWFkZiwKLQkweGY4YTFmYzllLCAweDNlMDNmYTAwLCAweDk0YjdiMzllLCAweDczYjFjNzk2LCAweGJiZWI5ZGZmLCAweDgxZmZmYmE5LAotCTB4ZTE1NWU2ZWIsIDB4YTdiMDE2Y2QsIDB4MzE2YWRhYWUsIDB4ZWI5NjA1YzQsIDB4MGE0MDVkN2MsIDB4ZWVhN2FmODAsCi0JMHgwMzg2YmJiNywgMHg1ZThiMGYxZSwgMHgwYWFkMDNjOCwgMHhlMmY4YTE3ZiwgMHhmOWU2OGRmOCwgMHg4ZjYwZmY0MywKLQkweDcwN2IyYjNkLCAweGQwZTRkN2RjLCAweDZiYzNjMDVjLCAweGY2MDQ2ZDY3LCAweGI1MmI3NmQzLCAweGY5YzFlMjRiLAotCTB4YjljMTg1MmIsIDB4Y2JhMzE4ZmIsIDB4YTI5Nzg1OGYsIDB4MThhNDY3MzYsIDB4MDk1YjNkZTIsIDB4M2E2NzZkZjIsCi0JMHg3M2YzZTQxMywgMHgyYWI4MjQ3NSwgMHhiMjJkZTgxNywgMHg2ODM1M2Q3YSwgMHg5NDE0ZmJlOCwgMHhlZjgzOGU1ZiwKLQkweDYzNWVkMTJlLCAweGM2OGFmM2U0LCAweGY0MDgyZjFkLCAweGMxNjE2NWJkLCAweGNiZWRhMTYzLCAweGY4MDUxNmE0LAotCTB4NDUzMWFhYTUsIDB4NTQzNjdkMDQsIDB4M2Q1YmYzZDUsIDB4ZTE4OTZlNDMsIDB4MDk2NTY3YmYsIDB4Y2M2MDc5ZTcsCi0JMHg1ZTAzYjc2YiwgMHgwODUxOWZjZSwgMHgwNzY4MDFlNCwgMHhmODRmMzFkYiwgMHhmMjE4Nzg3YywgMHhiZDc5YTI1YiwKLQkweDI3NTMyN2VjLCAweDQxMGZkMGNhLCAweDcxZDMzNjNlLCAweGExOTI3ZDcwLCAweGQ3YzRiNjNlLCAweDZhOWFlMDBiLAotCTB4OGRlOTU5NmQsIDB4MWMwMWY3ODMsIDB4N2M5NjNmZWYsIDB4NWI3NjU1NzYsIDB4ZTVkNWRmN2UsIDB4Yzc5NjI3ZDcsCi0JMHg5ZDU3ZGRmMCwgMHg5ZTIzMzdlNSwgMHhhNTVmMmVmYywgMHg5N2JjYzA2NiwgMHgwMDY1ZTUzNywgMHgyMWJmOTczZSwKLQkweDU3Yzc4Y2Y3LCAweGRmOTlmYTJmLCAweDAzZTc5ZGI4LCAweGY5NTAzNWI3LCAweDdlNDYyNmJkLCAweGM2ZmNhODFiLAotCTB4ZmNiNjEzODksIDB4MjJmYmYyYzgsIDB4N2IzYzZmYzgsIDB4OTc1N2NmOGMsIDB4YzdmMGZjZGYsIDB4MGRmOWJmMjgsCi0JMHhjYTFlNDMxNiwgMHhlZmFmOTk2OSwgMHhlODU3ZTUwOSwgMHhkNDFhNGI3OSwgMHg4ZTIzYWY2NSwgMHg0MDNjMDZiZSwKLQkweGRmM2I3MzljLCAweDQwNzE4MDA3LCAweGJiZTU1NThlLCAweGZjN2ZmMWM5LCAweGY5NzhlNThiLCAweDMzNzk4MjJlLAotCTB4ZTRjZGU5OWQsIDB4MmE2ZWY5NzgsIDB4OWRkMDAyYzcsIDB4MjZmMmYxYzksIDB4OWRiOWM3MmEsIDB4Mjc1MDc3ZTUsCi0JMHgyZmRmNjVmOSwgMHhhYmVmYjA4YiwgMHg3YjdmNzMxYSwgMHg0MGFmMWQwNywgMHhmYTM2YmQ5MywgMHgzYzg3NDE3ZSwKLQkweDY3OTU4ODhmLCAweGNmMjA0OTU1LCAweGNmMjdiYjg3LCAweDUzM2NiOGJiLCAweDhkZTdlZDM5LCAweGQ4NmY1NzQzLAotCTB4ZGFmNjFmOTgsIDB4MmZmNTEzZTgsIDB4NDFmZTVmMDMsIDB4NmRlOWZmNDQsIDB4ZmY3M2IzMGIsIDB4NzBjNGZhMzgsCi0JMHgwMGRiOGJlMCwgMHg2MzJmY2ExZSwgMHhmZDVhMWQzOSwgMHg3NGJmZWMwMSwgMHg5MDc0YzZjYywgMHhiNTgzOTI5MywKLQkweGVjM2M4MWJmLCAweDAxMzJhZGNhLCAweGUxYWNiODdkLCAweGNkNTNmNDYzLCAweGJlZGQxNzcxLCAweDc0NWZjNzMyLAotCTB4YzM4ZTYyM2QsIDB4YmQzM2E5MmMsIDB4OWRiZTMwYTcsIDB4YmMyMGI2MjYsIDB4NzdhMjRmZTQsIDB4ZDNiZTFjNWIsCi0JMHhlNzA0ZWJkZiwgMHg5Y2Y3ZGFlMSwgMHhlY2UwM2JjMywgMHhjZmE0MmUyYSwgMHhmNGI4MmJhMywgMHg3YzJiOTU3OSwKLQkweDg2NGExYmJkLCAweGUyOTFiYzQxLCAweGYwMjVlNTExLCAweGFhNzE4OGE2LCAweDg2MDFhMmYyLCAweDcyYjcwY2YzLAotCTB4MTZkNTg3MzgsIDB4NjJkODQwOTUsIDB4ODBlYmU0MWEsIDB4OWVlMWI1NWYsIDB4MzY4ZmIwNDMsIDB4MDA1YWE4ZTIsCi0JMHgzMWQ4ZjU2NiwgMHg1N2Y4MWY1NiwgMHg1MWRiZDljZiwgMHgzY2JhNzU5ZSwgMHgzOTY0ZjljNCwgMHg1ZWI1ZTdlZiwKLQkweDZmYzBjNWQ1LCAweDA3ODI4ZDU1LCAweGM4YWE5ZGQ2LCAweGM2ZGNmMDNmLCAweDk1NWY4ZDgxLCAweDZhMmQxZjAyLAotCTB4ZTQ1NjNjMTIsIDB4ZjAxNDJmYzMsIDB4ZmFlOTRhZmIsIDB4MmMzNGZjMGIsIDB4YmZkYTA1ZmMsIDB4NDQ4YTlhOGIsCi0JMHg2ZWQxN2VmOCwgMHhiYmU0MTMwMSwgMHhlOTc3NGZjMiwgMHhmN2MzOTZiNiwgMHgwNGVmYzAyMiwgMHhiYWQ5ZGIzOCwKLQkweGRiZDNlMWM2LCAweDAxODBhNGFiLCAweDJmMjc5MmZlLCAweDcwNjZjOWFlLCAweDAzYjU1NmFiLCAweDc4NTExMWRlLAotCTB4YWYzODhiNjcsIDB4ZTNhYmMyNmUsIDB4MWY3ODJiYmQsIDB4ZTNkZWI4NTIsIDB4YjhkM2ZjNzQsIDB4MjIyZjE4ZjMsCi0JMHhmOTZlOTRlMSwgMHg2ZTM1ZGYzNywgMHhkMTlhNDU1NSwgMHg1N2UzZDM1ZiwgMHgyYWRmNDU1YiwgMHg2NTg4ZTIxOSwKLQkweGYzOGM2NDgyLCAweGZiZmM2M2I2LCAweDdmZmZlODQ3LCAweGYwN2ZhZGJlLCAweGRkNzQyMjJmLCAweGQzZmQ3ZGZhLAotCTB4Y2ZiM2VmODgsIDB4ZTgxNTNjN2YsIDB4OTEzNWU0YjIsIDB4NWE1ZDI4ZDgsIDB4ODIyNDVkZWIsIDB4MDU0MTI0ZmIsCi0JMHg0MWI4YjBlOCwgMHgyNDBlMzBkNCwgMHhiYmE3MGE0NSwgMHhjMzUxZjE2MiwgMHg4NWRkYjFmMCwgMHg0ZWYxNzA3YSwKLQkweGZkMzI3MDZiLCAweDlmMmJmMTdlLCAweGQzM2Q4M2U2LCAweGExZmI0MGZhLCAweDNjMDM4ODZjLCAweDkzMWNhMDJmLAotCTB4ZWMzZTRiNDAsIDB4ZDg5NjJkMTMsIDB4YmYxOThkYmUsIDB4ODdjNTg1MTEsIDB4Y2M3NmVjY2YsIDB4ZWExMDc5MDIsCi0JMHhjNWE5YjlkOCwgMHgzNWIyOTlhMSwgMHg1NTdlMWVjNiwgMHg2NDFjNTk5MSwgMHgxNWFmM2IzNywgMHhiY2MwNGU3OCwKLQkweGY2MmY4MDMxLCAweDhmOWU4ZWRjLCAweGU2MzllNjczLCAweDk0NmUyYzk3LCAweDZhZmU3MDgzLCAweDU2OGVkZDcxLAotCTB4M2UyYzliODgsIDB4YWQ3NWM1NmEsIDB4OGMwYmVlYWEsIDB4N2Y2Yzk2ZmIsIDB4NmFlZjlkOTEsIDB4NzJmZTBkMTQsCi0JMHg0ZWI1M2YyNywgMHhiZmMxNTg4YywgMHgzOGM0YTg2YSwgMHg4YzdmYWQzYywgMHgwYmY3MTBmNSwgMHhiNTFmYTNiZiwKLQkweDJiZDM3YjY0LCAweDI1YzI4YTAxLCAweGM2ZWIzZjJmLCAweGRiY2Q1ODczLCAweGQ2YWZlOGRjLCAweGE4ZGM3YjdkLAotCTB4N2ExYTVmOTMsIDB4NTNhNWZiODgsIDB4OTdkZjgwNGUsIDB4Y2QzZDJmYzgsIDB4NjJiNGU0ZjksIDB4N2FlYmVmZjIsCi0JMHhlMTRhYmZhMCwgMHg2MzhmMmMyYywgMHhmZmY5NDdiNywgMHgwNzdmMmZjNSwgMHgzYjMzZDU3MSwgMHhjMDFkZmYzZiwKLQkweGYzOWJmNGJkLCAweGUyOGZiYmJmLCAweDdiYjVlYzkzLCAweDNkNTYwZjQwLCAweDQzOGMxN2ZmLCAweDU2NDlkZmU5LAotCTB4N2I5ZmFmYWUsIDB4YWQ3OGUzMTYsIDB4YTE3YWIzN2YsIDB4MTNhNmQ2YjcsIDB4NmFjNzEwMzksIDB4NzQ4ZmYxZGQsCi0JMHgzNjU2NTNiMCwgMHg2YmJiNDI0ZCwgMHgwYzkyYWVlNSwgMHhkMDRlYzcxMiwgMHg2MGRmZTA0YiwgMHg2Njg4ZTIzNywKLQkweDM4NjgxZGJhLCAweDllNzAwMzkwLCAweDc0ODc3NGE1LCAweDIxYmM2OGJlLCAweDM4ZTJjOTU0LCAweGQ0MzM4ZjJhLAotCTB4NzZkYjhmYzcsIDB4NGMzNDJiOGEsIDB4NzBmYzY5YmYsIDB4NGFhZjY1MjgsIDB4Nzg1ZjExYmEsIDB4OWFmM2QyOTcsCi0JMHg5ZWIxZDA2ZSwgMHg1MzQyOTFjNywgMHg3MGJlMzViZSwgMHhlOTQxZmUxNiwgMHhjNjM1Njc5NSwgMHg5ODZjYmUxNywKLQkweDQyNGY5ZmZmLCAweDg0OGY0MzViLCAweDM3NDg4NWYxLCAweDg1YzdhN2YwLCAweGRmMmQxNGRiLCAweGYzYjk3MjBhLAotCTB4MDBlYjhjMDUsIDB4MDlkMzI2ZmQsIDB4NjVmOGJlYjcsIDB4NGZkNWM0MGUsIDB4NjE3N2VkY2EsIDB4MTU5MzViYmUsCi0JMHgzNzE3ZDdmNywgMHhhOWU1MTVmZCwgMHg2OGRiZDc3NSwgMHg5ZjFlMTI3ZiwgMHgzZmQxMjU2ZCwgMHhiOWUzNDcxNiwKLQkweDVkNWI1NWFhLCAweGU5YzEyZTJjLCAweGQ1MGI3MTAwLCAweDdjNzljZjhkLCAweDFlYjVmMTgyLCAweGFmMTQ0OGI3LAotCTB4YzdlZDYwNTgsIDB4NWM1OTRlZjMsIDB4MDdlYjcyYTUsIDB4ODNjNTMxMGEsIDB4ZWIxZDUxODQsIDB4ZTk3YTIyN2UsCi0JMHgxZTAwZjA3OCwgMHhlM2M2YzY0NiwgMHhhMjg3YzdlMiwgMHhkZDEzMzhmMSwgMHg4NzEwOWU4MCwgMHg2OGRiYzY4YiwKLQkweDVkYzQzN2JkLCAweGUzNWZjMjgyLCAweDM3NWI3N2M1LCAweGFiNWUzOGIzLCAweGU5NWJjYzZjLCAweGNmOGIxM2EwLAotCTB4NWJkMTM2Y2QsIDB4ZWI1NzZmOWYsIDB4ZjhmMzU3NTYsIDB4MDY5YTc4YWUsIDB4Y2VjZjc2OGIsIDB4Mjk3MzNhZjgsCi0JMHg2ZDVmN2ViZSwgMHgzZWQ4N2UxNSwgMHhiY2MxM2NlYiwgMHg3YzAzNTNlZiwgMHhiMWYwZDk1OSwgMHhmYThkNzkwMiwKLQkweGY3Y2ZhNmZhLCAweGNmY2ZiNzBjLCAweDVlNjIyZjNjLCAweDAxZDA5YWVlLCAweGZkNjZlZmQ0LCAweDYxY2UwY2IxLAotCTB4MzdmNzgxYzQsIDB4OGQ2NWRlMWMsIDB4YjMzOGZkNmMsIDB4ZDI3NDE1ZDMsIDB4ZGZlY2NlN2UsIDB4YWNiZDdjOGQsCi0JMHg0MDI1NjNmZSwgMHhmNzU0M2JmYiwgMHg0OWZjYzJiMiwgMHg3ZWIwNDcyNiwgMHgzZmUwNjMwNCwgMHg3Y2JlZDJmMywKLQkweGZlNjQ3ZjE2LCAweGFkOWM3OTgwLCAweDg1NTYzZjVjLCAweDU1NTM4ZmUzLCAweDljNjE4NWZmLCAweGMyOTA4MTI1LAotCTB4N2RiZmFjZjIsIDB4MzY5MmQzYmMsIDB4ZGQzYmZhMTMsIDB4YjNjODEzMmMsIDB4Y2IxMjFkM2MsIDB4YWU2YmVkZTIsCi0JMHg1ZjdjY2FiNSwgMHhiOWM1OTZiMywgMHhlNzhhM2FlOSwgMHg5Y2VjNWM1ZSwgMHg2MGFhOTg4YiwgMHg2YmE1NjQxYywKLQkweDVmMzg1MWQ0LCAweGE4YTVkMmI5LCAweGFjZDUxZmUwLCAweDM1YmNmYjYyLCAweDAyNjZmNzNmLCAweDZlNTI2YmJkLAotCTB4YWQ2ZDc4YzUsIDB4MzQ5ZWJmMDksIDB4N2Y5YzExNGYsIDB4MWYyYzRjZjEsIDB4ZDY2YWVjMGUsIDB4YzU5YTI5M2IsCi0JMHg1NzRhZmYwMCwgMHhlMTRhODY1OSwgMHg4MWZiNGQ1YywgMHhmMjQ0YThmMywgMHhkMTFjMzllMiwgMHhmMzA2NWE1ZCwKLQkweDhmMTYzZDExLCAweDRjN2M0ZTNkLCAweDVmMTM5Njc2LCAweDhmNjQ1ZTBjLCAweGI5MGNkY2YxLCAweDdlODU0YzM0LAotCTB4YTVkOWZkZjQsIDB4ZDg0M2U2YjYsIDB4ZTAwNGQxZTgsIDB4YzdlZjg5MmIsIDB4YzFlMmRkMTcsIDB4MGJkNWI3NzksCi0JMHhhYTcxNjA1ZSwgMHgzYTRmNTU5ZSwgMHg3NTgwMzNjYiwgMHg3MjY3NmRhNCwgMHgzZjA2YjkzZSwgMHg1ZjVkMWEyNCwKLQkweDUwYjlmYzFjLCAweGU4MWY2ZmJmLCAweGEyNmVkNWE1LCAweGEzMzk1MGE1LCAweDNjYzU1NTU4LCAweGQ0MzQzZjM4LAotCTB4OWYwMWU0MjYsIDB4ZDdjN2YxN2UsIDB4YjBmNmJmNjgsIDB4YTAzNTIwNDgsIDB4MTllN2E5Y2QsIDB4NjcyMDI5NjksCi0JMHhlNjA4ZjIwZSwgMHg1ZjJiMDA5MywgMHhhNzAxZDFlZSwgMHhjMDg0Y2YzOSwgMHg5N2U3MzEyYiwgMHg4YzRlODkyNywKLQkweDI0ZGI5YzdmLCAweDkyMmI5ZmEyLCAweDhlM2I3ZWFiLCAweDA4MjRlZGY5LCAweDY1ZjVmM2YwLCAweDFjZjM4NzA5LAotCTB4ZjAyMzExNzUsIDB4ZTMwYmJkN2UsIDB4OThkZjBiZjMsIDB4NzQwM2YyOGIsIDB4OGY1N2M1ODgsIDB4YjkxZmEzMzIsCi0JMHg4N2NlZWVjMSwgMHg3NjhkOWRmZCwgMHg0OTI4MTZmNywgMHhiYzg2NmI0MCwgMHhkZmJjNzllNiwgMHg3M2M2ZTU5ZSwKLQkweDAzMGM1NDQ4LCAweGU3Y2U3ZjYwLCAweDgyZjlmYWYyLCAweGFmOThjM2QyLCAweDdhODA1YmUwLCAweGYxOTY2MzNlLAotCTB4YmVkOTkyOWMsIDB4MWZiNTA4OTcsIDB4MGEwZDdkNjEsIDB4YjM4OTA4ZGUsIDB4MTliOGRmYWYsIDB4ZGVjYWVlZTEsCi0JMHhiMGU4ZjFkNywgMHgzOTA5YmQ1MSwgMHgwNGUyNGU0MiwgMHg5N2Q2MjYzYywgMHg2NWI3ZTA1ZCwgMHgwZGM3NmZlMCwKLQkweGI1ZjhlZWZmLCAweDZiZjExYTY2LCAweDc1Zjg4ZDU3LCAweGNmZTMzMjBjLCAweGQ3OTc1Zjg4LCAweGU2Y2EyZjg4LAotCTB4NmZjMzZmYzEsIDB4YjllMzI4ZjIsIDB4N2UxNTdmYWYsIDB4MWRiOGQ5ODcsIDB4ZmY0YWYxYzksIDB4NGNlOTZkY2EsCi0JMHg1OWRjMDM2NSwgMHhjMmU1MDQ1MiwgMHhjZWQ5NDcyYywgMHhlZWZmMDA4OCwgMHg4NTVjMTY5MywgMHhlODVkNzk1ZiwKLQkweGY5ZjI2NGFmLCAweDc3ZDhmMzA4LCAweDExMjM5MDBlLCAweDFjYTJmNWUwLCAweGQwMGJjOWMxLCAweGExZjIwZWYzLAotCTB4MjE2OWU4MDcsIDB4NTdjYjkyOWYsIDB4OGFlN2E2MjcsIDB4OWUzZjA3NjksIDB4MDRkYWJmNDMsIDB4ZjIwZDdiZmMsCi0JMHg5NTVmM2IwMywgMHhiOTM1ODI0YSwgMHgwZjVlYTcyMCwgMHhiZjIxZGZhYywgMHg4NjRmM2JjZCwgMHgzYmM0ZjY3MywKLQkweGFmOWMwMDZmLCAweDY4Zjk2MGY3LCAweDZkYmY3YjAxLCAweDFhNzNjMTMwLCAweDc0ODVjOGExLCAweGYzNTU0ZmQwLAotCTB4YmZlODM5NDksIDB4YTlmNjk1NDcsIDB4NmNiZWY3ZTAsIDB4MWJiZGYxNjcsIDB4ZDNlYTBhZWMsIDB4YWUxNmVkYTcsCi0JMHg3MWJlMjc1NywgMHhiNmM3OTUyZCwgMHhmOWMyYWNiMCwgMHgzNmYwYjZjMCwgMHgzN2E4MDBkYiwgMHhiZDZlNzg4YSwKLQkweDRhZjZhNTJhLCAweDJjMzViZjE4LCAweGQ5ZTZiODMzLCAweGJmYzAwMzgyLCAweDNkNzE5MjZmLCAweDBlMzc5ZDY4LAotCTB4ZWQ0NGMxY2YsIDB4NGZkYjMwYjcsIDB4ZWE3ZjBiNmMsIDB4Y2ZhMzFiOWUsIDB4Yjg5ZjFiNWIsIDB4MWIwZmUyMTIsCi0JMHgzMWY3ZjEyZCwgMHhkZjJjZDg1NywgMHhhZThkN2ZjYiwgMHhmMjlkMGRiZiwgMHg1OGQ4NTYyZSwgMHhmZGEzYzc1ZSwKLQkweDRkOTYzY2U4LCAweDYxZDdjNzNiLCAweDM5NjMwZjI2LCAweGI4MmUwZjlkLCAweDJiYmZlNzAxLCAweDNhN2NmZDRjLAotCTB4OGVmMTUyOGYsIDB4NzlkMDg3MWIsIDB4YzQ4YmZlOGUsIDB4MjZkMTJiZjQsIDB4NDc2NzRlY2YsIDB4MWFmZGUwODAsCi0JMHg1ZmE4MmZkMCwgMHgwZTJjZmY2YiwgMHg0NGEwYjg4NywgMHhmMGM0NWNlMCwgMHg2ZmU4MDVlYSwgMHg3Y2E2ZTZiZCwKLQkweDUwYTJmOTRlLCAweGJlMDMwZDBiLCAweGMxNGUxODlkLCAweDNlYWEwYTdiLCAweDhmZDc2ODI0LCAweGZjMGM5NjY4LAotCTB4ZDVkN2M4NTksIDB4OWYxNjE2YzIsIDB4ZDhkNDc5MWYsIDB4MzI0NWJhM2UsIDB4OGM0MTQxZDksIDB4NjkzZDhmMWYsCi0JMHhmM2FiNWU3YywgMHgwM2E0OWJiOSwgMHgyNGJmYWY5ZiwgMHhkNTE3OTAwYSwgMHgwZmJjNGVkNiwgMHhlNmRiYjg1MCwKLQkweGRhMzg0MmY1LCAweDJiMjljMDJlLCAweGNiMTI1ZTVhLCAweDliZjdhZGUyLCAweDZiMGYyYzZkLCAweDlkNzA0MmEzLAotCTB4ODljMGI4ZDksIDB4MTdmYjA4ZmIsIDB4ZWIzY2M2MmMsIDB4ZWJlNjdlYWYsIDB4NWVkY2VmMWIsIDB4NjY0YTdlOGMsCi0JMHgzMjVhZjVmYiwgMHhiZGZjMDUxOSwgMHhhZjc4NjA1YSwgMHhiN2RkOGFjZCwgMHg5ZjlkNGJkMiwgMHhmOWQ2ZmU3NSwKLQkweDkyNDE2YjNhLCAweGNiZGU1ZTJmLCAweDdiYjMzYjYwLCAweDEyMGMxNzhhLCAweGY2ZDdmMDE0LCAweGE5ZmM3ODBhLAotCTB4MjE5ZjAxZjUsIDB4MDY1Y2RiN2YsIDB4MDBkOTAzYzgsIDB4NzllMzU1NGYsIDB4ZTE2ZGJiYjQsIDB4ZmI1NDc5ZjgsCi0JMHgwZmU2NmU2ZCwgMHgwNTU4MTAzZSwgMHhhNTNmMWU3OSwgMHgzMjdhMDljMiwgMHhkMWViYmY3MSwgMHhhMDgzYWFkZiwKLQkweGFiNjc3YzJhLCAweGE2ZTc4ZDlkLCAweDE2YzhkYmU2LCAweGI1NGFkMzg4LCAweDgwYmIzNzU5LCAweDVmYWU0YmZmLAotCTB4YjI3ZGUxNDMsIDB4ZWJlYjgyZGMsIDB4ZjA4YmQ5NDYsIDB4YzEwOTJhMDcsIDB4YTczZjAzZjgsIDB4ZDkyYTdiZDUsCi0JMHhlYzdlN2IxYywgMHhhOGU4YWQ4OCwgMHhhOGY3Y2U4ZCwgMHhlZWYzODNjZCwgMHgwMDBhZjNlMSwgMHhmZmViZjdiZiwKLQkweGE2YmIwNmUzLCAweGU5MTVhMmVkLCAweDQzZmI4YmQ4LCAweDZkZTc3N2ZhLCAweGQ4MGY0ZjBjLCAweDdiZTA3N2I1LAotCTB4NzI4NjkxNTIsIDB4YmRiOWY1ZTIsIDB4MzljMTg2ZjMsIDB4MThmNzhhNTUsIDB4NWZhMGVhMzksIDB4ZWE5MWU3MDAsCi0JMHhjMjhlM2FhMywgMHgyMGI0ZWE5MywgMHg1MzRkMTI1ZiwgMHgwMzFlN2EzZCwgMHhjOGM1ZWZlMSwgMHgwNDA4ODkwNSwKLQkweGJkNzQxY2YyLCAweDg4ODU4NDJhLCAweDcwYzFjYThiLCAweDdlMDIzMzliLCAweDlkMDU2YTQ3LCAweDRlYzEwNTM3LAotCTB4NjZiZmFjNmMsIDB4MWNmNDRjZTksIDB4NTI1MWU2MWMsIDB4ZTQ4NDJjYmUsIDB4MTI3OTgyNzksIDB4ZmQwNWE4OTAsCi0JMHhkNzU2ZmFlYiwgMHgwODUzYWJkMywgMHhjN2VhY2JjYSwgMHhlZDBkNjBhNCwgMHg2MmQ0OTM2NywgMHhhZTRhZjg4NywKLQkweDU2YzMxNmE2LCAweGUyYTRhYTc0LCAweDE1M2ViY2Y5LCAweDFjNzNmMzA0LCAweDQ0YTU0Zjc5LCAweGY0MmExNmVkLAotCTB4ZWYxMWJmNDMsIDB4MWZlNzE3OGUsIDB4ZTVmMWQ3NmEsIDB4MmJlMDI3ZmIsIDB4N2VmYjcwZmYsIDB4NzZiYzZmMzAsCi0JMHg3NWY3OWUzNiwgMHg1MWU5ZGExYiwgMHhiMWVkYzFmZCwgMHg4ZWZlYmU1MiwgMHgyYmVkOGNmZSwgMHgyNGI1Yzg5MywKLQkweGQ2NmY4ZTM2LCAweDMyN2RiYTFmLCAweDAzY2I3YzdhLCAweDZmZWVmODBlLCAweGFkZGE0ZTBjLCAweGUwOGRkZjA2LAotCTB4MTNlYThkZjMsIDB4MGM4ZTZlYmUsIDB4YmY0MjdkNTMsIDB4M2IwZjA4MmYsIDB4ODJlZWYxMDAsIDB4NzcxYzk5MGYsCi0JMHgwMzg3MjdkMiwgMHhmYmVmZTAyMiwgMHg1ZjMzMTFlYSwgMHhiOTUwOGQwYywgMHg1NTgzZWRlNCwgMHg4OWVjYmYzOCwKLQkweGFmYmRhMWQ2LCAweGQyNzdhOGRkLCAweDQwY2YwZGE2LCAweDliZjM5NzNiLCAweDdjYmFjZjE5LCAweGUwYmVlNTliLAotCTB4MmIwMWVmNWUsIDB4NjA5MTBiODMsIDB4MWQwODg3MWUsIDB4YTA3OWE4NzAsIDB4NjA4ODhlOTcsIDB4NTExNWI3ZWYsCi0JMHgwZWI4NTAzYywgMHhiOTRiZjk3MiwgMHhlNjFlYmMxMCwgMHg5ZDdjM2ViZiwgMHg3YmU0ZTQxZCwgMHhmYTExMjdhZiwKLQkweGYyN2M0Yzc1LCAweGRlMzdkMTcxLCAweGRjZjhmMmNlLCAweGZiNjU4NzgwLCAweDI0ZjVmMDJlLCAweGNhOGVmNDgyLAotCTB4ZDg5Mzk1MDEsIDB4ZmZjZTg5NzgsIDB4ZTVkNzdlNjYsIDB4M2EwZTA2YTMsIDB4MGJmOWUxZTcsIDB4MjhhY2ViMDIsCi0JMHhiZGYwZjA4NCwgMHgwMGYyNmM5NSwgMHhiYjdiNzU1ZSwgMHgyNGI3ZGI4NiwgMHhkZmY2ODU5MCwgMHhlYmUxMGY0YSwKLQkweGY4MTA0ZTUxLCAweGVkZDY0NmE0LCAweDM2MmRhZjc1LCAweDU1ZDJiNTNlLCAweGZiNmRmMTljLCAweGE5MTc1NTM1LAotCTB4ODc5MzE2N2YsIDB4YTNiNTI1NWQsIDB4NTE3NTU2ZmYsIDB4MWJkZmU3YzEsIDB4NDUwYTYxN2YsIDB4ZjM3ZjAxYmEsCi0JMHhlMzNiM2RlZCwgMHg1N2M4M2M2ZiwgMHhlNjJmZmZjZiwgMHhiZjNjY2FiNywgMHhmY2M3NmFiNSwgMHg2YmRmMTJjNiwKLQkweDE0N2Y1NDJkLCAweGUzNTc1OGFlLCAweDc3OTNmMTUwLCAweGViM2IwYjMzLCAweDY1N2NmZDA1LCAweDk2NjAzZDIyLAotCTB4NmI0YjkxZjcsIDB4YjQ5ODYwMGYsIDB4NzJhZjc5MGIsIDB4MzIxMmZjNzAsIDB4OThkOWY0MWQsIDB4NzI1YmI1MDgsCi0JMHgwNWZmY2IzYiwgMHgwNzJhYmYzZSwgMHhhZGRiN2JjMywgMHg5ZTQxMDNlZCwgMHhkZmJlODg1NiwgMHgxNmE4MTFkOSwKLQkweDhhZWMwNThiLCAweDFlZWQwNGRkLCAweDZlNjNiZWVmLCAweDFlZTZmNzk0LCAweGIzYTdmNTg2LCAweGY2NjAxMDVkLAotCTB4ZjQ0NzVmMjYsIDB4NDhkMGE3YjgsIDB4NzM4ZTgwZTUsIDB4MGU3YmVlYzQsIDB4MzBmMWFmZmEsIDB4MzQwZTE0YmYsCi0JMHg2MjNhN2U4MSwgMHg1ZTAzZDVmMywgMHgyNGM2MTQxZCwgMHgyODMyNGYzOCwgMHgyOGUyY2I5MiwgMHgyNWRjODMxMSwKLQkweDQ5ODczMzkyLCAweGRlNzQ0MjhlLCAweGU4MDVhZWIwLCAweDQ4NDAzNmJhLCAweDdiMDJjZjBjLCAweGQ1MDIyMzBhLAotCTB4ZjRiNzYwMmUsIDB4YjA2YzI0MmUsIDB4MDZmMzA0NjUsIDB4N2JiM2U3N2IsIDB4YjAxNzdhMDAsIDB4YjRkZWM3N2IsCi0JMHg1YmM5MzhiMywgMHhjYmQxMWQ3YywgMHgwM2YyYjYyMywgMHg5MTJjYmYwMCwgMHhmYmUwYjU4MCwgMHg0MmEwMGRjMywKLQkweDVkODhmMTdjLCAweGIyNzgwN2RiLCAweDhmMzg2OTk1LCAweDBhZjEwZjZjLCAweDUyZDk4ZTk0LCAweGFkN2Q4MDQ4LAotCTB4YzBhYWE1ZDQsIDB4YWQ4NDhhZTIsIDB4ZmVkMjUwNDMsIDB4NDVhYjI3YjIsIDB4ZmVlY2Y3NDAsIDB4NjUwOWNmMDQsCi0JMHg0NzEzZmQ4MywgMHhlNWQ5OGU2ZSwgMHg2YjA3MTYxZiwgMHgxZjg3NjRlYywgMHg0ODcxNzJlMywgMHgzMWVkZjNhMSwKLQkweDQ3M2ZlNTk5LCAweDdjMTQzOWUzLCAweGViYWI2ZmMwLCAweGViNmM5YzU2LCAweDIyNWYyYzk3LCAweDZjZjBjMjkwLAotCTB4NjA4MGNiZjYsIDB4ZDc4OTJmMzAsIDB4NjQ4ODU0MWYsIDB4MjliZjQ1NGYsIDB4YjAxOTdjMDAsIDB4NzI2ZmQwZDgsCi0JMHhlZjA4NmYxMCwgMHhjN2VhNDk0OSwgMHhiYzExNDVlZSwgMHgyYmZlYTBlYiwgMHhmNzA2ZGRhOSwgMHhhMGYyZTgyNSwKLQkweGUzYTNmOWYzLCAweGY0NGFmNjZlLCAweDczZjhmNzU1LCAweDUyZDNlMGY5LCAweGUwMjdmZjdlLCAweGI5ZGM3NWI5LAotCTB4MjY3MWFiODEsIDB4ZWY4YzM5ZWQsIDB4Njc5MGQxMzQsIDB4NTFhZmQzYTksIDB4MGVjZmQwMzYsIDB4ZmQ1ODkyZjEsCi0JMHg4MTA2NTJlZCwgMHgyNDJhZGUzZCwgMHg2YTVmYzE3OSwgMHg3ODMwMjQ1ZCwgMHg0M2NmMWIwNSwgMHhjY2YzMGM5NSwKLQkweGEzM2YzMDc0LCAweGZlYzVlYjhkLCAweDBmMzhiOTQ5LCAweGYzYTA5ZDdkLCAweDVkNzE4NzViLCAweGU3YTIzY2QzLAotCTB4OGNlNzRjOGUsIDB4MzI5MGU3Y2MsIDB4OWRmMWEyZjMsIDB4MmIwN2NjMmMsIDB4MTg0ZWUwNTcsIDB4NDBlYzJlNzIsCi0JMHhkZGNhYWNmYiwgMHg5Y2UyNDM5ZSwgMHhiMTY4Yzk5MywgMHhhNjA3M2RjNywgMHhmZDZmMTQ5NywgMHg1ZTQyN2E5MiwKLQkweGU4MGE3NTYxLCAweDk5M2I4Y2Q5LCAweGEzZTMzMDdlLCAweDNkMGMwODRkLCAweDdmNjNmYjA0LCAweGEzZWVlMzkwLAotCTB4ZTY2NjY1ZWIsIDB4ZThmMzI5OGQsIDB4ZDc1OTk5ZmIsIDB4ZGYzZmE5NjMsIDB4YzZlMjk0ZTAsIDB4MDkyNWM3MGIsCi0JMHgwYzhmY2MzZiwgMHgxOGRmM2NiMiwgMHhmMzA3MWRmZSwgMHhlNzdiZWIzOSwgMHhiZmM1MGQzZCwgMHgxYmU5ZTMxZCwKLQkweDM3ZGUxODkyLCAweDZmYmMzMTI0LCAweGFhN2M3NDUwLCAweDFkN2YyMGM5LCAweDVmMjFhZjc1LCAweDk2ZGZiZDYyLAotCTB4NTA5ZTQxMjIsIDB4NzNlNTBiMjAsIDB4YmJkMTg3YmUsIDB4ZWQwZDdkZTMsIDB4YmI0NDllOTYsIDB4MTI1MDM2ZmUsCi0JMHgwZGIyNjVlYiwgMHg3ZGM1OWVmOSwgMHhkZmUwYmNmNCwgMHg5OTRiOWZmOCwgMHhkYmE3ZWQ0OCwgMHg4ZDUwNWYzOCwKLQkweGMyOWJlOGMwLCAweDdlYjBiZWUwLCAweDRlOWI4ZTEyLCAweDE0ODFkYTJkLCAweDJkY2EwYmNmLCAweDlkMDc4ODVlLAotCTB4MWJiZWYzOWQsIDB4YzljZGM4OGUsIDB4NzgyNDJlNmUsIDB4MGQ3YWI1ZjQsIDB4MTU3ZjczZjgsIDB4ZDEyNWI3N2QsCi0JMHg1MDM2ZDI3ZSwgMHhmMTgzZDU0NSwgMHhhNTI1YzgwNSwgMHg4ZmI4ZjVkMywgMHgzNzEyZGIzOSwgMHhjNDk3Y2ZlZiwKLQkweDkyNTc3NmZjLCAweGNjYzhlMTA3LCAweGVhNzQ4YTljLCAweDAxNGU0ZmE4LCAweGE3Y2NjMzdmLCAweGU2YjM1ZTU0LAotCTB4YjczOGVmMGQsIDB4MTE2NmY5NDYsIDB4NmYyY2Q5ZTAsIDB4MTQ2OTMyNmQsIDB4MjA4YWRkNzAsIDB4NzY3NGQyYmUsCi0JMHg5NzViN2FlNiwgMHg0MzkwMzQ5NywgMHhhNzJhOGZkOCwgMHg3M2E3NTQ3YSwgMHgzYTZhZmUzZiwgMHg0ZmYxM2JjNiwKLQkweDFmZmVmZjA4LCAweGM3Yjg0N2UwLCAweGQ0NWVhMzE3LCAweDYyMGM4OGU1LCAweDdhMGVkZTdhLCAweGQ5Y2UyNjM3LAotCTB4M2VkN2Y0ZDYsIDB4ZDFmODlmYjAsIDB4NjBiYmNmY2YsIDB4NTJlZmU5M2YsIDB4ZWNmNDBiYmIsIDB4ZWNmZmZiYzksCi0JMHg4Zjg2M2M4MiwgMHg4ZWYxNjdlZSwgMHhkN2ZlNGNiYiwgMHhmZjRjNDkyMywgMHg1ZTU0OTQ3ZiwgMHhkYmJhZjMwMywKLQkweDJmYTE3NWZmLCAweGJkYzk1Zjg2LCAweDUxNjQ1ZjZjLCAweDZmOWQzNDUwLCAweGFlMzc5ZTM0LCAweDE3Y2Y5OTBjLAotCTB4OTVkZjEwMDcsIDB4ZmQ3OGZjNTIsIDB4ZTcxNjI0ZmUsIDB4NTliZjU0NTksIDB4N2M2MTU2YzksIDB4YWU4MWFmZGYsCi0JMHg3OTdmYjkyNywgMHgwM2RkODFiMiwgMHhhNzMzYzNhMiwgMHgzZTAyYTg3ZSwgMHg1NmMzZGZkNywgMHgyY2RlYWZiZSwKLQkweDliNDNmNWIzLCAweDNlNjJmYjBjLCAweDljMzMzNzhlLCAweGE0ZmRmODg3LCAweGEyMmQ3ZmYzLCAweDhlOWIzM2RmLAotCTB4YzNkNTJmNzUsIDB4ZjNjYjMwYmUsIDB4ZmU2M2NmMzUsIDB4OWMyOTZhNDcsIDB4OTBmZjlmZTcsIDB4YmMzNGZlODAsCi0JMHhjZjVkM2Y3ZiwgMHhjNWFlZjc3YywgMHgzY2YzMzNmZCwgMHhhMDhmZGYzYiwgMHg5MGI1ZGZhMSwgMHhjZTdjZGJkMywKLQkweGVkOTg2MTZhLCAweDNlMjNjZjZmLCAweGY5NGVjZjk0LCAweDBmOTY2MTE4LCAweDllMjM4ZTZkLCAweDAwZTc5YzNiLAotCTB4ZjEyNjM0M2MsIDB4MzI0MmFiN2QsIDB4NzYyZWYyMTIsIDB4ZmM5N2VlMWUsIDB4Njc1ZWY5NmQsIDB4ZDNmMmI5ZjgsCi0JMHhhNGY0NGYzYywgMHg5MzU5NjA5ZiwgMHhkYmYzYjJhNCwgMHg4MTRiYjdlMSwgMHhlZTM1OTZiZiwgMHhiZTY1N2JjMCwKLQkweDBjYWEzZWFiLCAweDg0ZmY3MjlmLCAweDZhMjVlODc0LCAweGU4MTFmZTVmLCAweGMxODI3YzQ4LCAweGY5YjY1Y2VlLAotCTB4NjVmY2MyYmMsIDB4ZjgzYjlmODYsIDB4MWYwMDNiZjMsIDB4ZWVjZWNmYjgsIDB4YTk2M2I5MGYsIDB4ZGVmNjIxN2MsCi0JMHg4YzkyZjc5OSwgMHhhMjY3ZWJmYiwgMHgzY2Q5ZTRlNywgMHg5M2JlZjkyYSwgMHg1ZjMzM2YzZSwgMHg5YjNlNzBkNywKLQkweDlhZGE3NWI3LCAweDM1Y2E3NDVlLCAweGY4NzIyNzRkLCAweGZiY2MwNzc5LCAweDIxNjZmOWQ2LCAweDhhY2QyZjI5LAotCTB4YmQzYTFmYzMsIDB4ZmUxMDdjYTIsIDB4ZDNhYmMyMjUsIDB4NmNlZDVlNjksIDB4MjY0MGFmM2UsIDB4ODRjYmY3ZGYsCi0JMHgyZjk5OTJiOCwgMHhkNzZmM2FiYSwgMHg4MGU0YjcyYSwgMHhkZWU5OWFiYywgMHhmYjNjZTA5YSwgMHgzZWQ4OTNkZiwKLQkweDJiNTUzY2VkLCAweDlmMzhiZDA1LCAweGM0ZjFhZjk0LCAweGE1MjcyYmQ4LCAweDgxZjc0M2RhLCAweDdjNjU2ZDFjLAotCTB4ZTA2YmQ1MWMsIDB4N2ViZTgyYmMsIDB4N2NmNWM2NGIsIDB4ODBjZDRiYjksIDB4MWU5MDkxN2IsIDB4ODc2MTVlNzAsCi0JMHhlOWVmMDAzNSwgMHg2YmY3MWNlMywgMHhmMDE5N2Y1YSwgMHg2OWU1ODY1ZCwgMHg3ZmQ2Yjk3ZiwgMHg4MmZiNDc0MCwKLQkweDEwZGRlNzhkLCAweDQ0MWI2ZGM3LCAweGVhZDNiZTMwLCAweDcxZWJjMjMyLCAweGM3OGYwODg4LCAweGE1YmJkNmMxLAotCTB4MWYzN2YzNTIsIDB4ZGFkYTBlODAsIDB4YzcxMWY5OGMsIDB4ZDBmOGYxMmYsIDB4YmM1OTZiMjUsIDB4MTBlZDVlNzksCi0JMHhkZDA1ZjcwYywgMHhmNzRhZTVjNSwgMHhmNGU2ZWUzZiwgMHhmNmNjMmJiYiwgMHg5YTZjZTdiZCwgMHhkZjMwZjQ4NiwKLQkweGZiODQ3MjY3LCAweDA0MWJiMzJkLCAweGZhNjYyM2Q0LCAweDc3NWVmN2NjLCAweGRjZWRmNDBhLCAweGRmN2UxMTYwLAotCTB4MTFlNDVlODksIDB4NmU5OWJiYTQsIDB4NzYxZTFkZWIsIDB4YWQ1NDhkYmYsIDB4YzczZjdkYzAsIDB4NGZiODA5MzcsCi0JMHhkZTgxMjRiOCwgMHg4ZjA3NzdmYiwgMHgzZTczNzc2NywgMHg4MjI0NzllNiwgMHg1NWQ2ZTE3ZiwgMHg5ODExN2E2YiwKLQkweGY4MDU1MGZmLCAweDNlYmYwY2RjLCAweDYzNDRmOWZmLCAweDM3Y2Y4NzdhLCAweGNiNDhiY2QxLCAweDgyOWYyY2I1LAotCTB4YzI4YmUzYWYsIDB4NjVhOTdlZWMsIDB4YWYyYzg4OGYsIDB4NzQ4YmM3OTMsIDB4Y2Q3ODc1ZjgsIDB4OTcxNTI4ZjMsCi0JMHhkYjZmM2U2MiwgMHgwOWYzMTEwNiwgMHhkNzA0MGFlZiwgMHg3N2NiYmRjMCwgMHgzZDcwMTZhZCwgMHg1ZDI3NDQ0ZCwKLQkweDMyZmJlODRmLCAweDYzNjcxYWNiLCAweGY2OGY5NTdlLCAweGRiNjk3NjAzLCAweGQ5MTcwNDg3LCAweGRlMDI3NWI2LAotCTB4OWU5MDkzN2YsIDB4OTQ1Nzk2NjEsIDB4MzA4NDllODgsIDB4NzRhM2NkYmEsIDB4N2U2ZTM4N2IsIDB4M2ZkNjkxNWMsCi0JMHg3ODI3M2Y3NiwgMHg3NjNmZDZiZCwgMHgzMDg0ODk3ZiwgMHhkZDQ5NjRhZiwgMHg0YWYzYzMzNCwgMHg3NzRmNTE4NywKLQkweDNhYTQ3ZjI1LCAweDJlOWNkZTdlLCAweGU5ZmNiYTZmLCAweDljMWViOGYyLCAweGE1MWZiMDczLCAweDVjZWNhMWUwLAotCTB4ZTg2M2NmYzAsIDB4ZmJmZDUwYWYsIDB4ZmY4YjA3NzMsIDB4N2QxYjdhM2MsIDB4ZjNjNmQ5NjUsIDB4Zjk4NGZkODYsCi0JMHhlNmJkMThhMywgMHg3OWYxOTM4YiwgMHhlMjgzNzVhMiwgMHhkNzg3YTBjMSwgMHhmODdhOGMzYSwgMHg5ZjQ3Y2U4NywKLQkweGZhMjcyZTg3LCAweDYyNzJjY2ZjLCAweDBmNGNkZWZlLCAweGE2NjcwZTNkLCAweDAwMWU5OThiLCAweDQ3MGRmODI3LAotCTB4MDdjMTFjOWEsIDB4MDQ0NzljMjgsIDB4YzlhMDc3MDYsIDB4NjZiNzcwOGUsIDB4ZmU3MDY4OTYsIDB4ZWRkNjU5NjYsCi0JMHgwZjgxMWU1OCwgMHg1N2JkODM0NywgMHhlZDAzOGNmZSwgMHg3OTU3ZWU1NiwgMHg0NTAzZTdlMywgMHhmNzZlMjVlZCwKLQkweDQxOTYxOTg4LCAweDkzMTExZTMwLCAweDJlYzc5MGJjLCAweDc3YWE1YjY2LCAweDdkOGE3OWQyLCAweGQyMTgzOTY5LAotCTB4OWMyMmJkOTksIDB4OTkyZGFlZTcsIDB4MTQzZGMyMjAsIDB4NzdiY2ZjMzUsIDB4Mzc5ZDg1OGQsIDB4YzNkYmZiZDMsCi0JMHhlZDk3YTBmMSwgMHg4MDQ2ZjI4ZSwgMHg5YTlmZWNlNywgMHhmZTJjMWQwYiwgMHhjZTBhZmU4YywgMHgxNDNkZWUxMywKLQkweDc2MGRiZmE4LCAweGYzMDRlYmYwLCAweGM4ZDIwYjY5LCAweDgzYjdhMDAxLCAweGVlNDBhMzY4LCAweDcyYTQ3NDNmLAotCTB4ZmZlZDljM2IsIDB4Mjg2Y2JmZDEsIDB4Y2JjYjU2YmQsIDB4M2Y5MDk3YWEsIDB4NDliM2UyZmMsIDB4MzdiMjVmNzAsCi0JMHg5NzIyYjJkOSwgMHgzOGUyZmZkNiwgMHhiOWVlMDkzZCwgMHhjZTViNjZmMywgMHhmZGE4N2FlNywgMHhkNTljZjhlZCwKLQkweGVmOWNiNmFmLCAweDczN2ZlYjQ3LCAweGQ4NzU2MTljLCAweGY4N2I4MmE4LCAweDA1Mjc2NzFjLCAweDFlMzhjMzA2LAotCTB4YjVlYWU3YTYsIDB4MjQzZTQxYWIsIDB4YTU5N2YzMGIsIDB4YzNjNjBhZmQsIDB4ZDVmZGZkZjUsIDB4MTdlMGU2OTQsCi0JMHg3OWY5Yzg3ZiwgMHgxN2UyYWFjZCwgMHgyYzY3MTAxYywgMHg2ZmQ4NTRkNiwgMHg3MWJlMGFkZSwgMHhlYTVmZWZjZiwKLQkweDE2MWQxNTc4LCAweDRhMDM2N2JjLCAweDFjYTdmZmMwLCAweDQ4NWQzYTlmLCAweGU0MzU3NjgzLCAweDc2OTA5MjNkLAotCTB4YjQ4M2VjMzUsIDB4MWRjNzdjM2IsIDB4OTFkODdkYjQsIDB4NTcyMDA5ZTYsIDB4NWZiY2VmMGQsIDB4ZjY4ZGY3ODgsCi0JMHhhMzBjZmQ2NSwgMHhmM2E2ZTIwYywgMHg5ZjZhZmIzOSwgMHg4YWZiYjFjZCwgMHhjZmEyOGVlZCwgMHgwYzk0M2U4MSwKLQkweGFhMDg0NzY4LCAweGVkNDFkYzg3LCAweGE4OGQxYTg2LCAweDMxZjgxZTRhLCAweDgxYmRiYjQ2LCAweDQ5ZDdkOWYzLAotCTB4Y2Y5MWU3ZTUsIDB4OWY1MDQ3N2EsIDB4N2RmMGU1M2MsIDB4ZmQ5YmUzMDUsIDB4ZGE5Y2QyMTEsIDB4ZjI1M2ZlMmQsCi0JMHg3YWY4YzVlZiwgMHhkMWUzNzY2YSwgMHhmZjlmMjAzOSwgMHgwYWZkY2VjNSwgMHg3YWY5ODY5YSwgMHg5ZWY3YTNkYiwKLQkweDFkZjdmNDEwLCAweDcxMGJjOTI0LCAweDk5MjVlMjM2LCAweGI3MWU3NDgxLCAweDRhYmUzMGIwLCAweDRiZjE4YzJiLAotCTB4ZjdlODdjZjgsIDB4OTUxZWUxMTMsIDB4MWZiNjBlOTEsIDB4ODIyN2U3NGMsIDB4YTg5NDM2OWYsIDB4Zjg4MzBlNTgsCi0JMHg5YWIwMWU0MywgMHg0ODdiZWIwZiwgMHhiNDdkZThlOCwgMHhjY2VkYzdmZiwgMHgxMWQ1YjdlZiwgMHg4NDY3NWM0MywKLQkweDc3MDdkOTkzLCAweDI3NWM1OGI5LCAweDBjZGQwZTQ5LCAweDBiZTkzZGZhLCAweGRlZmQwMWUyLCAweGUxMjI5NGY2LAotCTB4YjllNGE2N2UsIDB4MGUzOWY3MTEsIDB4ZjgyZTMwNTksIDB4NDBmNDFjYWMsIDB4NGFmZGJkN2MsIDB4M2E0MmRkNDksCi0JMHg3NGUzNmJmYSwgMHg1YzdkZmJkNywgMHg3ODg0YWY1MSwgMHhiMzE3NWNjYSwgMHgyMjJkOWUyNywgMHg3ZWRhZjc5OCwKLQkweGZlYzIwOTRhLCAweGFkYjY2YTU3LCAweGNmNGZkNjNhLCAweDRmYWRkZmU3LCAweGE0ZTQxZTJlLCAweDg5MjlhODY1LAotCTB4ZjcyM2Y4YzAsIDB4ZDI5MjgzNTIsIDB4MDJmYTg1ZTMsIDB4NzZjNWYwM2IsIDB4NDNjNTExYzAsIDB4MGY3M2Q1YWEsCi0JMHg5ZTdhOTdmNCwgMHhjZjhiOWJjMiwgMHhhNGFmYzQzNSwgMHhmOGE2NGQwZSwgMHg1MzgzNzMxZCwgMHg5ZTI5N2I4NSwKLQkweGMwNmU4N2I1LCAweDJkMTdiZjNjLCAweDc2ZDNmZjc4LCAweGVhMGQzYmM1LCAweDFlYTljZmRiLCAweDliM2QwNzg4LAotCTB4ZjljMjRhMWIsIDB4ZjljMTY4YmMsIDB4YmY2YTRmNmMsIDB4ZmI4NTM5NmEsIDB4OGUyYzQxZTEsIDB4NjQ4ODM5MjAsCi0JMHgyYTc5MDU0YiwgMHhjZmExZWY1NiwgMHg3ZDk5M2JjNywgMHhlNGMyZGFiYiwgMHg2MmE5ZGFhOSwgMHg4ZTgxNzFmZCwKLQkweDE1ZWYwMDVmLCAweGY5ZTkxY2ExLCAweGVjZWQ2ZDE3LCAweDViY2Y0NzFjLCAweGU3ZTA0NTlhLCAweDNmYmE2OWE0LAotCTB4MGZjMTExMWYsIDB4NzA0ZTU3MWYsIDB4OTRlNzFkNWQsIDB4YWQzYTJhODMsIDB4MjE3NjczOWEsIDB4ZDZjZWZmZGMsCi0JMHgyZTFmMDk4ZCwgMHgyOWYyY2M5ZCwgMHhlZmMyZWZiZCwgMHhmMjcwMWMyMSwgMHhiZWY4MzZmYiwgMHg0ZjljYjVkMCwKLQkweGQxMTY5M2M2LCAweDVmYzdkYjQ2LCAweDJlNDhkZTI0LCAweDhjNmFmN2RjLCAweDVhNjMzZWRmLCAweGZlZjEyN2U3LAotCTB4NDRjZjc2YjUsIDB4OGM0NDVjNzgsIDB4MGRhNGYwZWIsIDB4YWUyMGE3YTUsIDB4MDkzNDRjNWMsIDB4NjZjNGE5ZjgsCi0JMHhkY2Y1ODc2YSwgMHg5YWM0ZjcwZCwgMHhmMjczYzllZSwgMHhlNDg3MmI3NSwgMHhlOGZkZTZjNCwgMHhlMjQ5ZmI3MSwKLQkweDQ3Njg4ZGUwLCAweGMwNWUyOTk0LCAweGY2YTcwZWNiLCAweDBkNGZkODU3LCAweGRiZjJmNzUwLCAweGY4Y2YzZGUyLAotCTB4YTBkNjdlNTksIDB4NTcwMjBlOGIsIDB4NzRmZTUwZmYsIDB4ZGFhZTdjYzIsIDB4ZDNiMDFiNTAsIDB4OWZkNTVmNzksCi0JMHgwODdjMGZmNSwgMHhhNzhhZTVmYSwgMHhiZTgwN2FkMiwgMHhlOTdhNzM3NywgMHhjMDc3Y2VhNSwgMHhjNjY0OWU1ZiwKLQkweDNhNmI5ZTVmLCAweDI3M2VmM2U0LCAweGYyZTg5YjhiLCAweGZkMDc3YzA2LCAweGI3ODM5MWVjLCAweGE0MWZkYmM3LAotCTB4ZjAxZjdhZmMsIDB4NDEyNzBlZWIsIDB4NTkxN2ZhN2IsIDB4NjcyMDU5YjYsIDB4OWRmYjM4ZmEsIDB4ZTVjZGZmOGMsCi0JMHhmN2NiNTU5YSwgMHgwNDEyZWZjMSwgMHhjNmViNjRiZSwgMHgzMTE3NWVjNCwgMHg2ZWJhMmU0ZiwgMHhhYjc4MzMyNywKLQkweDUzZTlkYWQ0LCAweDI5Yzc2ZjIxLCAweDNhNGU1ZTYzLCAweGNiMTYzNzNmLCAweGZjMzE1OTJmLCAweGFiNWRmM2EyLAotCTB4M2FkZmY5OTMsIDB4ZmVlYzk0ZmYsIDB4Mjg0YjllMzMsIDB4MDZmYTkyZjksIDB4Mzc2YTI0YjksIDB4MjEzM2ZjZWEsCi0JMHhiMzdkYzExMCwgMHg4OWQ5ODQwOSwgMHg5OWQ5ZmU2NiwgMHgyZThhN2Y4MCwgMHhhZGU4MTJhOCwgMHg5ODczZmM0ZSwKLQkweGJlMjI0ZmYxLCAweGIwNDhmZGExLCAweGU3Zjk5YTBlLCAweGUzYjcyNzE5LCAweDI1Y2ZmMjEyLCAweDY1NjllMDM3LAotCTB4ZWViN2M5NTMsIDB4OGRmYTM0ZWYsIDB4NzJlNjdjZjksIDB4YmU3ZTIzYjQsIDB4ZWYxYzY3ZTcsIDB4MWJkYTk1YmIsCi0JMHg0YzZmNDFmMywgMHgyZjQxNzhiMSwgMHhiZWM4ZWU1MCwgMHgzYmJiYzI5OSwgMHhiNWQ3YmY0OSwgMHgzYmVhMGYzYSwKLQkweDc2ODdhNjI0LCAweDg3YThhZDg0LCAweDNlN2QzODc2LCAweGIyNjU4YjhjLCAweGYyNDQ3NGYzLCAweGI2ZmU0MGI1LAotCTB4OGQ0ZDk3YjcsIDB4N2VmYjI3YmQsIDB4MzkyMThmY2UsIDB4ZDgwNGZhMzIsIDB4M2UzMDZmNDUsIDB4MDBhNTM1MTgsCi0JMHg1OTIxYmM2ZSwgMHgxODVlOThmMywgMHgwY2Q5NTI3ZSwgMHhkMGIyOGZiZiwgMHg5Mzg2ZjQ1NSwgMHg3NDA2N2ZiZSwKLQkweGM3NTNhYzA3LCAweDYwYjdiYzE0LCAweGY1MDUzMWQ5LCAweGRmN2JhYmUzLCAweDkzYjg4NTJlLCAweDcyM2ExNzllLAotCTB4YzVhNWRiY2YsIDB4YzY3ZGUxODMsIDB4ZmQ3MzZmNmYsIDB4NjUzMWQ3YWEsIDB4ZTlhNWY0MWUsIDB4ODRkMWQ4NWUsCi0JMHhiZGYzMzFlOSwgMHg0N2MwZTVhZSwgMHhlNmVkMWRmOSwgMHg0OTQzNGVmYiwgMHg5MzNkMmUyYywgMHgwZTliYjJhOCwKLQkweGY5NThmZDMxLCAweDg4NWQ3MDgzLCAweDk5ZDNkZWY5LCAweDRmZDAxYjkxLCAweDVmNWRlNWI4LCAweDM5NGY3YmZjLAotCTB4ZGZlZjk4N2YsIDB4NzdjOTNhZmMsIDB4Zjk1ZmU2MWEsIDB4OTg1ZWYzNDIsIDB4YmFkOTUxMDIsIDB4YWZhYTUyMWQsCi0JMHg1NzllZjc2NiwgMHhlOTNmMDFlNywgMHgxNDdmODg3MiwgMHgwNjhmYTE3ZiwgMHhmNWRkZWUxOSwgMHgxMWU4ZjVmMiwKLQkweDdiZWVjNGFmLCAweGJmNzA1MTY4LCAweDdkODQ5N2U3LCAweDk4ZWJlMjE3LCAweDQwZjRjNWNkLCAweDZlOTdjYWMxLAotCTB4NTU4NzM4MDcsIDB4MmU4MDA3NjgsIDB4Zjk5OTNiZmYsIDB4MTEyMmJmZDcsIDB4Y2RkMDFlNWIsIDB4M2E5YzYxMmIsCi0JMHgyNzI1YWIyNCwgMHg4OGY3OGU4NCwgMHhjZTA4M2U1NCwgMHg5OWU5ZWQ3NSwgMHg1ZmM2MGMzNCwgMHg1YzM5ZjJlOCwKLQkweGVkNDg2ZjYwLCAweDkxYmJlMTg3LCAweDgxODYwYTYzLCAweDVkMGU3NzFlLCAweDM1ZDYwM2RkLCAweDU3MGE2ZTFkLAotCTB4MDc2NzM2ZDksIDB4MTc1YzNhMWMsIDB4NzQyY2JmMzksIDB4N2FiODc2Y2QsIDB4MmY0MGVmYjIsIDB4ZGM3YzdlMzUsCi0JMHhmY2ViZGYwNiwgMHg4MmZhNmExMCwgMHg1ZjBjNDFmMSwgMHhmMDc0MWYwMCwgMHhkNDM3NzA4NSwgMHhmMWE0M2M3NSwKLQkweGQ4ZmZhZjUyLCAweDk3ZmJhMTdjLCAweGY4MDVmMjVkLCAweGM1ZWZlZThmLCAweDcxNWM0MzE3LCAweDczZGE4MmY4LAotCTB4ZDliOWUxYzMsIDB4MmMyOTBiOWUsIDB4ZmNmY2NjY2YsIDB4YmUxMTQ3MjksIDB4ZTYwODU1ZWYsIDB4NzZiZDkwODksCi0JMHhiZTNiYmJmNiwgMHhiZjJmOGMxNCwgMHhiNjYzNjFlYywgMHgwNzNjNzQ3ZCwgMHg1Y2ViOTU3YywgMHhmOTBlNGNhOSwKLQkweDIzNDNkZjNkLCAweDQzOWZkYTAyLCAweDAzYjhhMmE5LCAweGE4ZGViY2VkLCAweDdmMWNiZDI3LCAweGMwMjBiOGU0LAotCTB4NGI5ODVkZmQsIDB4Njg3NjBkOWMsIDB4NmJkODA3YTQsIDB4MjM5M2FkNDMsIDB4MWQzYjBmMjAsIDB4N2VjMWIyMTMsCi0JMHhjYjhjNzAyYywgMHgzMmJmZjk4MywgMHhiMDViZTU2OCwgMHhhYmQyYmRhNCwgMHg2YWFkZTVlMiwgMHhlYmE1N2Q4NywKLQkweDViYmMwM2MzLCAweDVkNWJmYzdkLCAweGQ1YWUzZjhjLCAweGQwMTBmOWQ4LCAweGU4NzBiMWViLCAweDA5OTAwM2ViLAotCTB4MzMyMjEwZTAsIDB4YTgxZDk3MmQsIDB4MTQyZGMzYzcsIDB4MWMwMmQ3NmYsIDB4MDRmYjBmMTQsIDB4NDNmNjAwZDIsCi0JMHgyYjRiNDU5MSwgMHg2N2IwM2IwMSwgMHhkYjM4MDI0NCwgMHgwMzkxZmU5YSwgMHhlMWM5YTc3MSwgMHg3ODA1MWZkZiwKLQkweDViZmJlYjI3LCAweDk2ZmVlMzVlLCAweGVkZDZkZWQ5LCAweGQwZmZkZDIxLCAweDIyODkyNWVkLCAweGEwYWJiNzQyLAotCTB4YTczYzA0N2QsIDB4YmRjMGY0ZjgsIDB4NDViZWIwZTAsIDB4ZjUzZTc4NmMsIDB4OTVlYTczZjEsIDB4ODk2Nzk3MWEsCi0JMHg5ZjMyNjNjZSwgMHgxOWE0NGRjNywgMHgyZTk3MjJlMSwgMHhlOTQ3MWU1ZiwgMHg2M2UzOTUzMywgMHg0OTEyNjFmMiwKLQkweDQyNzY4N2NhLCAweGZkYzAxNGE2LCAweDRjOTAyNDMzLCAweDE1ZTI5OWM3LCAweDdjMzEyN2M4LCAweDYzMjhkMzczLAotCTB4YTQyNmZlMWQsIDB4ZDVkM2Y0NzcsIDB4NjM3NWU2ZmIsIDB4ZmZjZTI5YWMsIDB4N2VjM2NiNDMsIDB4NGRmYzZlNzYsCi0JMHgzYzE3M2IzZiwgMHg5MDE4OWZhNiwgMHg5NTFkZmQ2MCwgMHg3YjAzY2VjYiwgMHgyYjBlMWUxOCwgMHgyM2IxZDdmMSwKLQkweDU4Yzc5ZTVjLCAweDNjZTFmMjVhLCAweGZmM2RiZWU0LCAweGZmNzM3NWM0LCAweDA3YmU3ZjllLCAweDUzZThlNDc2LAotCTB4YzYzYzgxMTIsIDB4Mjc4NmE3MzEsIDB4MjhlYmJlZTMsIDB4ZWY0YWY5MTUsIDB4MDZiM2VhYjcsIDB4NDljZjYxMDcsCi0JMHg4N2U4N2RlYywgMHgxNWRhM2MyOCwgMHhjYjBkOWYwMCwgMHhmZTNjY2VkNywgMHhlMTc3ZjQwNCwgMHhmMzYyNDQ5OCwKLQkweDVmMTU0YmU0LCAweDk2OGY4ODdmLCAweDBmZjE3YmYyLCAweGQyOWVjYzA5LCAweGZiZjEwZmRiLCAweDc4Yjk3N2E4LAotCTB4OTNkMjhlN2MsIDB4MWFjNGM3ZmIsIDB4NTQyOWU3NDMsIDB4NzQxNzI1MTMsIDB4YzljYTc1ZDAsIDB4N2U1MjUzYjIsCi0JMHhkZmMwZmE2NywgMHg3ZTFmM2EyNywgMHg1Nzc0OWU0YiwgMHhmYjBlN2VhNSwgMHg1ZWI2MmVmNywgMHhjMzdmMDM5MiwKLQkweDM1ZDcwY2YzLCAweGZkODEyM2RjLCAweDQ4YTY1ZDdlLCAweGFmNzE5OGI0LCAweDFmYTdhOTU3LCAweGViZDhmNzEzLAotCTB4MDdiZmQ5MzIsIDB4MmE2MjdiOWUsIDB4MTExZTc5ZTQsIDB4MmFhYzY1MzEsIDB4N2NhZGUzYmMsIDB4NzE4YjM3YTgsCi0JMHhmMTliYTdjZiwgMHgxZWY4NWQ3YiwgMHg4ODdmZjgwOSwgMHg1NzRkYzk5YiwgMHg4YWI5OGZlMywgMHg0MDM1YzlmMiwKLQkweGMwZWNjMjc3LCAweGM4ZTUwMTQyLCAweDdiZmRkZjRjLCAweGNiNDdhM2ZlLCAweDRlZjhjNGUwLCAweDFkMzM3ZjQ0LAotCTB4OGM1MzNiNWUsIDB4ZDE1ZDIxZmIsIDB4N2JiN2NjYzMsIDB4NTcwMzNjZTksIDB4ZDk3YWVmYzAsIDB4ZDc3ZjAwNDgsCi0JMHg4M2Y1ODNjYiwgMHhlYmFjNGNmZSwgMHhmNGQ1NWFmYywgMHhmM2IwMGY3NCwgMHhkNDlkM2U3NCwgMHhlOGNkZjE4MywKLQkweDIwZjQ0ZmRkLCAweDk5N2EwZWNlLCAweDE5YjgyNmYxLCAweDc1ZDk3NmZkLCAweDYzM2JjNGJiLCAweDY3ZjQ3ZDJhLAotCTB4YTMyMTBlYmEsIDB4ZTQzMzQ4MDYsIDB4NTg3Mzk0ZDksIDB4OGE1YmJlNjcsIDB4ZjllMTA5NzYsIDB4NmRmNWU2ZmYsCi0JMHgyNGM3NzhhNiwgMHhkZDVkYTc1MCwgMHgzYThiN2Y0YiwgMHhiOWY3NWJiYiwgMHg5NWE5MWQ5NywgMHg5NTJjMWQ2MCwKLQkweGM2M2QzMjU2LCAweDFlMWQ3OGVkLCAweDQyZmY5ZDMzLCAweDQ0ZmUxMWNhLCAweGMwZjk5OWYwLCAweDY4YWVlNzBjLAotCTB4ZWI4NmIyN2UsIDB4ZmI0ZjdlODEsIDB4NzJiOWZlZjQsIDB4ZTg3OTljNmEsIDB4ZDA4NWI4ZjgsIDB4ZmJhZjM4ZjUsCi0JMHhkYjhlNzFlYiwgMHg0ZmU3ZmZjOCwgMHhhMDEzZmM0ZSwgMHg5OWJjOTEzNSwgMHhkNzZlNjZlOSwgMHgwYzI5NDdmNSwKLQkweDAwNjU4MDUwLCAweGVlMjE5M2VjLCAweGQyODc5NDc0LCAweDYwZDEwYThiLCAweDlkYjdiYTVmLCAweDM3OWIxYTdjLAotCTB4ZTQwYWY5M2EsIDB4ZjYxZTE1YjcsIDB4MmRiZjExMmMsIDB4ZGYxMjI4YmIsIDB4OTNiZTBlYjAsIDB4MDA3MzFmMWIsCi0JMHg2YTk2ZWRkZiwgMHhmN2Y0NWUxZCwgMHg1MzI0ZDVhNywgMHhhY2ZjNGQzYywgMHgwNzNjMTZmOCwgMHgxMDIxNjJkZSwKLQkweGZlMTQ5YjVhLCAweDE5YzQwMGUyLCAweGNjMTI4ZWFhLCAweGVmMGUyZjA3LCAweDNkM2UwMTJiLCAweDlmYTMzNTI4LAotCTB4OTA4MTc2ZDUsIDB4Y2VlYzYyYzcsIDB4MDM4ZDcwYzYsIDB4MzRjNmIyZWMsIDB4NTBlOTllNzYsIDB4OWJlNDMxMGEsCi0JMHg3ZDMzNzExZSwgMHhkY2VjNzhkZCwgMHhiYjRlMmQ1NCwgMHg3OWY4Y2M5OCwgMHhmMmQyZDEzYSwgMHhkNzRiM2ZlOSwKLQkweDNmMDBmZTUxLCAweGUzMGJhN2I4LCAweGVmMDUxMzI0LCAweGI3NjA2OWViLCAweDlmZWVjNmRjLCAweGY5MWE2YjZjLAotCTB4Yjc4NTFhN2EsIDB4ZDQxNGNlZjUsIDB4ZDcxYTkzMzMsIDB4ODRhMWUzZGUsIDB4MGMzZDdkMDgsIDB4MTZjZmI3OWYsCi0JMHg3YmU4NWJiYywgMHhlYjE3YWFhNSwgMHhkMTcyZjNhNSwgMHg0ZGY5MWJlZiwgMHhhMTkzZTk4ZiwgMHhmZDE5N2FmZCwKLQkweDUyZTI0OTllLCAweDY3NTVlMjA5LCAweGYwMDI4NTMzLCAweDJkMDhmNzI3LCAweGYyZjdlMGFiLCAweDM4ZDhkMzAyLAotCTB4MDFlODEzYzQsIDB4OTMzYmU5ZmUsIDB4ZGZjNTBjN2IsIDB4ZmFmNTUxNzQsIDB4MjA1ZGZjMDAsIDB4NTZkZmYyNjIsCi0JMHhjZmJmM2FlZSwgMHhjZTU3ZGI0YSwgMHg3MzNmMzAxMCwgMHgwNDliMjc5MiwgMHg3NGE3Zjg2MiwgMHhiYWYzODI5ZCwKLQkweDBjNTE5YzM5LCAweGNjYmQzZDdjLCAweGMyMmM0ZTc4LCAweGU1MTljOWVkLCAweGRkOGMxMjBlLCAweDI4M2MxNTI3LAotCTB4ZWRlYzg3ZDcsIDB4NWNlZmUyYjcsIDB4ZTYwNGM5MzYsIDB4MGRmOWNiYTcsIDB4Y2U2N2RmOWMsIDB4NmVmODYxZWEsCi0JMHhhNzc2NjExYSwgMHg3MjM3NTcyZSwgMHhmYjgxYmJmOSwgMHhiMmY5YjdjZCwgMHgxMzk3ZTMwZCwgMHg4MWZkMGY2NiwKLQkweDkyMDQ0ZmI0LCAweDNjYjMyNzk0LCAweGNkZWRhOWEyLCAweDJmMGVkZWVmLCAweDgwNDdiZDg5LCAweDkwNzFiYzNlLAotCTB4OTcxNWVmYzksIDB4YzhiZTQ2YWUsIDB4Yzc4MGJjMTQsIDB4ZmI2MzVlMjksIDB4ZTc0Y2EzNGQsIDB4NmJmMjRkMTQsCi0JMHgyMDMzMGZkNiwgMHhhY2VjNGEzYiwgMHgzMDdkNzQyNywgMHgyMTk0NDlhMywgMHg4OGEzMzQxZSwgMHg2MmVkMTllMiwKLQkweDk1ZGVkZGEzLCAweDk0OTkxOGJlLCAweDUyNWM1ZjQwLCAweGE0MzMwNDFmLCAweGIwZjhiZTkzLCAweDhiZTk3YmVjLAotCTB4MzJkYmE5NTcsIDB4MzZmNWNhOGEsIDB4MjFmNDZmNWQsIDB4NGM2ZjQwN2QsIDB4MDA5ZmViMTIsIDB4ZWJhMzZhM2UsCi0JMHgxZjBlMzVhNiwgMHgxZThlZWJlOSwgMHg3MmE1MjgwNywgMHgwY2UwN2E4YywgMHg3NDllMmZjYiwgMHg4NjA0OGIzMSwKLQkweGEyMDFjNDc1LCAweDI1ZGE4NDdhLCAweGQyZjYzOGRlLCAweDYxOWU3NzdlLCAweDU3YWEyM2ZmLCAweGI5MTJlYzYyLAotCTB4MjVkYjg3ZjAsIDB4YWEzZGE4OTMsIDB4YmQ3YzAwMTQsIDB4YzI1MmJlMTEsIDB4OTBhNTk2ZTIsIDB4YzNmMTAyYzgsCi0JMHgwZTMwMmZjYywgMHg3ZjUxMjU1NCwgMHhhN2U3ZDcxNiwgMHhmZmEzOWU5OSwgMHhlNDNiNTIxMiwgMHhlOGFmNmNjMywKLQkweDNjMDllODcxLCAweDk3ZTY2MTdlLCAweDE2ZjIzYzY4LCAweDNhNDJlMzE5LCAweDNlMDI5NDlmLCAweDExNmZmZTQxLAotCTB4MmJhMDlmNzEsIDB4MzdjN2QxYmUsIDB4MTRjNDRiZjMsIDB4NWY5MmVhMWYsIDB4NTc3ZGRjYjgsIDB4ZTZlZDM5N2UsCi0JMHhhNGZlYTFmMSwgMHg0NGY4Nzc3ZiwgMHg1ZjlkMGZlNywgMHg5YmNkZWJjYywgMHhhMjUxMzhhNiwgMHhiMDlmZTZmNSwKLQkweGJjNGNmNGRlLCAweDQ4M2ViY2RlLCAweDk1ZGViZDQ2LCAweDk5MmU3MzVkLCAweDZlODlmOWU5LCAweDc1NzczYjBmLAotCTB4ZDgyNzBjZTUsIDB4NTk5MjEzMzUsIDB4NmViZTgxN2UsIDB4MWI1ZGUzNDUsIDB4ZGViYzlmMTgsIDB4N2Q4MjQ3MzIsCi0JMHgxZmQwMmFhNiwgMHhkMDc0MWRiOSwgMHg1ZjNhYzVlMywgMHg2MDI3NWIyZSwgMHhkNzMyNzQ3YywgMHgyYzRkYWQ1ZiwKLQkweDUxMzU1ODVlLCAweDhmZDFjMjBjLCAweDRmNjNmMDkyLCAweDZmYmIzYWIwLCAweDE0ZWZhNzQ2LCAweGQyNDUyN2NlLAotCTB4ZmY3ZTA5M2UsIDB4ZTBhZjI2ZjQsIDB4YzY5M2I4ODUsIDB4MzU1MzhkZTMsIDB4NjY4ZGUzMDEsIDB4NDRkN2I1YmQsCi0JMHgxZmJjZTlmNywgMHhiYmUwYmZmMCwgMHgyMDg0Y2E5YiwgMHhmZDY2OTNmOCwgMHhiMzIyZmQzNiwgMHg1M2Q5M2EyZiwKLQkweGNjZDg5ZjdjLCAweDczMjY1NzJmLCAweGY0OTdkMGZkLCAweDE1ZGE1N2ZkLCAweGRkYmY5MmEzLCAweGVmYmZkMGFlLAotCTB4YjA2NWNlOGEsIDB4YzBmZmEwYTYsIDB4M2IwMTkzZWUsIDB4ZGQ3Y2U4MWUsIDB4MmRmYjA5NDUsIDB4NDlkYTM2NDksCi0JMHhmYzE0Y2UxNywgMHhmZTRmN2QwYSwgMHgzYTFlZjliZSwgMHgxYWJhN2NmMywgMHgxN2Y3NTBiZiwgMHg4ZmEwZmZiOCwKLQkweGNlYzQ4MzdiLCAweGE3ZDc5YmY3LCAweGZlMjNkNzJlLCAweDc3NWU5OTlkLCAweGI1ZTMxYjI0LCAweDNkNzQ1ZDNhLAotCTB4NWNlZjA5ZGMsIDB4NWJhMjI3NGYsIDB4ZDc1YTdhNTcsIDB4M2Q2YWZmODcsIDB4YWZhZmY3YWQsIDB4NjZiOGZhMjMsCi0JMHg3ZmM4OWRmZCwgMHg5YWYxZjVkNCwgMHhkYjhjMTZjZCwgMHhmYTdlZTc4YywgMHhmZTNmMWU3OCwgMHg3ZWU3YjcwNSwKLQkweGRmZmNjYzk5LCAweDE2NmQyZmI2LCAweDMyNDM2ZjU4LCAweGVjMGIyN2RiLCAweDY5ZmM2MjczLCAweDA3NjY1ZWZiLAotCTB4YmUyYTVjZDksIDB4NjIyMGEwZjcsIDB4MTFjMWU0N2MsIDB4ZDRkN2Q0MTYsIDB4ZjMwNjFhMDcsIDB4MTkwOThhOTYsCi0JMHhiZGJkZmIwNCwgMHhiZDZmN2VkOCwgMHg3ZDQ3MjkxNCwgMHg5YzA4OTVlZiwgMHg4YzVkMTNkMywgMHgxZmRjMWUxZiwKLQkweDdmZmExZGI4LCAweDk2ODE5M2YwLCAweDQ3NGY4YzFhLCAweDFhNWVjMTlhLCAweDdlZTEyMDU5LCAweGM1NTU4YTU5LAotCTB4OTM2Yjc2NzgsIDB4NmEzYmVmMTUsIDB4ZjZiZmZkZGIsIDB4OTdjZmQwYzksIDB4ZTUyZTBiYzQsIDB4NzQ2YjI2YzEsCi0JMHhjN2Y0MGFiZiwgMHgwODg4ZjEyNCwgMHhlZDZkMWNmOSwgMHgxYjAzZWYwNCwgMHgwMjUyMmIzNywgMHhkMjc4ZDk3ZSwKLQkweGZmZmUwMzVjLCAweGMxZTU4NTE4LCAweDZjZDRmMTliLCAweGZiY2NhNzVhLCAweDJjNGQyNTVkLCAweGM1YzRhNWZmLAotCTB4ZWQzYTVmZjMsIDB4ZWZlMzM0NTcsIDB4MDQ5MDRmMjYsIDB4YmNlOTBkNmYsIDB4Yzk5MmYxNWYsIDB4ZWZkOGU5ZGYsCi0JMHhkMTVmYjA0YSwgMHg3N2QxZjRjOCwgMHgwMzE4YWZkZCwgMHhkZTdjYTAzNCwgMHhkNzAxY2JhNCwgMHhiZWMxMjQ0ZiwKLQkweGVkODU3NmM1LCAweGNkYmZiNTc3LCAweDY5OTNkM2VkLCAweDVkNDZlMzcxLCAweGRlZWM1ZmVkLCAweDdkYzFhNDliLAotCTB4ZWZmOWRiMjMsIDB4ZGJkZWVjNmMsIDB4MTNmMzUzNGIsIDB4ZDJkZjlmYmYsIDB4ZDhkMzBjNWUsIDB4ODRiMzdmNWUsCi0JMHhiZTNjNzNmOSwgMHg5YTBiOGQxYiwgMHg5MGU5Y2JmMSwgMHg2YjQ4MWY2OCwgMHhmNTA0MWNmNCwgMHhlN2RmNzA5NSwKLQkweGFhZTE4YTgyLCAweDVkNGY4YWVmLCAweDRmMWZiNjZlLCAweGI3ZWY4MGQyLCAweDAxYTVlZjFmLCAweGRjNzlmYjFjLAotCTB4YmNmNTZiZDAsIDB4ZWVjMmY2MDUsIDB4NzA5MmU3NjMsIDB4NTRkMTU4M2YsIDB4NTNkYTRmZjAsIDB4YWU3NjVlNmMsCi0JMHgyODQxYzk5MiwgMHhmNjEwNjA2YiwgMHhlZmYwZjdhYiwgMHhiZmI1MjdiNiwgMHhlYzVhNzU3OSwgMHhiZmRiMGU3ZSwKLQkweGQ3ZDljZmQxLCAweDQ3ZjMwNDI4LCAweDNmOTYxNjAyLCAweDBjZGZjNjYyLCAweDNiOTM4ZjBmLCAweDIyNzRmYWYxLAotCTB4YmM2MmE5YTcsIDB4MDk2ZjUwM2MsIDB4M2YzMDU3Y2IsIDB4Y2U0YzNjOTcsIDB4ZmRmZTJmZmYsIDB4ODAwMDY2ODQsCi0JMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YmJkZmYwMCwgMHhkNTU0NzgwZCwgMHhkY2VlZmU5OSwKLQkweGYyNjY3N2I5LCAweGZjOTk5OTMzLCAweDRkYzJmZTEwLCAweDAwOTA4MTAyLCAweDdlMTAwODQzLCAweDUwMjAyMWQ0LAotCTB4NDU0MDY0N2UsIDB4MDQzYWJhZWMsIDB4YTFiZjkwODUsIDB4NTZkM2ViYjEsIDB4NDEyNmUxZjcsIDB4MjdkM2UwOGEsCi0JMHg2Nzk2ZGQ2ZCwgMHg1NzA2N2RiNSwgMHgzYjEyNTRiNiwgMHg3NzA3MDRjMSwgMHgwOGEwMGVjMiwgMHg4MGEwZGI1NCwKLQkweDExZGFlM2MyLCAweDI0ODZhMjI5LCAweGVjNTZiYjBkLCAweDNiZWZkZDZlLCAweDY2NjRkY2U3LCAweGVjZmE1YzE4LAotCTB4Zjg3MjgzNzYsIDB4OWNmNzM5ZWUsIDB4ZmJkZjdjZWYsIDB4YjM3MzlkZmQsIDB4MzMwMDAxZDMsIDB4Njg3NzZlMDEsCi0JMHhkYjAwZDkwMCwgMHg4YzgwMmY2NCwgMHhkZTA4MjBjZiwgMHgxNmU5MWJmNCwgMHhkMzA1ZDYwOSwgMHg3YWU3NzY4OCwKLQkweGE5ZGZlMGE3LCAweGNlMWE2YmE2LCAweDJjYjBlZjkxLCAweDdhNDQ4ZjM1LCAweDQyZDFlOTg2LCAweGM2MzllN2E0LAotCTB4Njk5ZTdhNzIsIDB4ZjgwNmUyODYsIDB4YmE1YmM4NjcsIDB4Y2ZjMDBlNjgsIDB4MDM4NzVlOWMsIDB4ZDI1N2U5ZDcsCi0JMHgwMDE5NDg3NiwgMHg2NTA0OTM2NiwgMHg1MjhlZDg1OSwgMHhlYzM3MzgwMywgMHg2NWFjMDE1MiwgMHgzYzFkYWViOCwKLQkweGFhNDAxNzRlLCAweGQyMWI3NDA1LCAweDU0ZmIzNjBkLCAweDFlOTVmMWEwLCAweGQxMWE0YjZkLCAweDg3YzQzZDAwLAotCTB4YTUwMzlhMzksIDB4ZDMzNmJlZDgsIDB4YmUwMGIzMDQsIDB4YWRjMWZiNGQsIDB4MWVmOGFhYTQsIDB4YzVhOGZmYmUsCi0JMHhmYjgxY2UzNywgMHhlYzQ2YjdhYiwgMHgxZmY2MDE1YSwgMHhhNDA0NzNiYSwgMHg2YzFkN2VkMSwgMHhjZjJmMjViZiwKLQkweGM2MDI4NWNiLCAweDMzZmZlMTU3LCAweGY4Yzk2NTVmLCAweDc1ZjBhNmRhLCAweDJjOTQwZjdhLCAweDY0YmY1YzA0LAotCTB4MWE1ZjhhMWMsIDB4NTk5OTRmZDYsIDB4NDE2ZGNmNjMsIDB4ZjQ5ZjNkMDAsIDB4OTA5NWM5ZTAsIDB4ZWVhYTcxNmUsCi0JMHhjZTM0Zjk5ZCwgMHhiNmYyNjdkMCwgMHgyMWZkNDE0NSwgMHg2OWFhNzI1ZiwgMHhjZTUxZTkwYiwgMHhjMGU5NmQzMCwKLQkweDg5ODc0ZWY2LCAweGFjNThiZmNkLCAweGI3OTAzMDAzLCAweDhlMGRmNTFhLCAweDUzMzViYzgxLCAweDk2ZmE0ZDM4LAotCTB4NDg4MWIyZTUsIDB4OWI3ZjUyMzksIDB4ODcxZTdlZWUsIDB4MGY4MTk4YzIsIDB4ZGRmYTQ3MWUsIDB4M2JkYzRhMDcsCi0JMHhjMjkwYmU5MSwgMHg1MDJlYjFlNSwgMHg3YTQ1MTJkMCwgMHgzNjMwMjViYSwgMHg5ZDM5N2M4MiwgMHhmN2M5MmYzZSwKLQkweDA0YzA5NjliLCAweDJkYjRhNzg2LCAweGU0YmYzNGU5LCAweGNhMGVmODAxLCAweDNkMTA0MjQzLCAweGYxNmVmYjgwLAotCTB4MDIxNmE2ODAsIDB4MWNlNzgwOGMsIDB4OTAwMDRiOTcsIDB4MzMyYWY4MmIsIDB4MjU2MGJhZDksIDB4ODczN2RlYjksCi0JMHgxNzU4ZDVjYiwgMHgxYzg1Njg2NSwgMHgzZjgyYTdlNCwgMHhmNWMwZjgzNywgMHhjMWJlYjQ3ZCwgMHgzMDFmMTBjZiwKLQkweDE1Mzk3MWM2LCAweDQ4NTdjZmQ4LCAweGQzM2NkMWY3LCAweDBhMzIxZTUwLCAweGZmZjNkNzA1LCAweGEwYjAxNGRlLAotCTB4M2ZmOGZkZmMsIDB4MzI1ZjJmZDEsIDB4Yzk4OTc0MDUsIDB4MmNmZDZkM2QsIDB4MzNhZDg4ZjYsIDB4OTk2NmFkZTcsCi0JMHg5ZmUzYWIzMSwgMHhlY2Q0NGM1OSwgMHhiYjU0M2NhNywgMHhmNzQ4ZWMwMiwgMHhhZDQ2MmY5OCwgMHgzN2Y2MWQ2MiwKLQkweDljZjkxYzZlLCAweDdkOWZkZTI3LCAweDhkMzBiN2MyLCAweGM3ZTJmN2RhLCAweGZmYTc4M2NkLCAweDE1ZmJlMzIwLAotCTB4ZTUwMTkwMTAsIDB4ZDA5YTI3MzIsIDB4MzFmZTVhMWYsIDB4NGFlZjNmY2QsIDB4NzdiZmYzZmMsIDB4N2RiMTY3YTQsCi0JMHg1ZjUxODI4ZCwgMHg3NzIyN2RiMSwgMHg5NWEzNWViOCwgMHg2NmY4MzdhZiwgMHhkM2UxMDY0MSwgMHhhMmQ5NDY2YywKLQkweDg2NGQ1NWZjLCAweGEyYmY2YzBhLCAweDNhMDAzYjlmLCAweDBiMzhlMmI3LCAweDU2YWRjMWMwLCAweGUzMzk0ZWQ2LAotCTB4ODRlYjQwZDgsIDB4MjY5MDIyYjYsIDB4MzViYWJjMDIsIDB4MWQ4NmI1OTcsIDB4MGYwMzM5NGQsIDB4NzU5OGQ0YzEsCi0JMHgzOTBkZGUwNCwgMHhlNWM3YmUwZSwgMHhlOTNhM2QzOCwgMHg1NjkxZjNhNywgMHhkMDEwMjg0ZSwgMHg1NzMwZTU4NiwKLQkweDVkMTA2YmM4LCAweGYwNzllOTA2LCAweDQ3NWI5YTRhLCAweGJiYzlkNjdhLCAweDRiNGZiMjY1LCAweDk4YjQwOWFlLAotCTB4MTRiNGQ5ZmQsIDB4ZDMwZDI2ZDAsIDB4NzE1YzkzYTksIDB4YjhmNDJjYjQsIDB4OWU3ZjY2Y2QsIDB4ZjRmNzQyZTEsCi0JMHgzMzNhZTJlNCwgMHhlZWU5M2FjNCwgMHg0MWYzNzE1MSwgMHhlOGM0ZmYwMCwgMHhlMmQ3NTVmMywgMHg2N2VlMTIxMywKLQkweDBhZjU1YTQ2LCAweDQ1NDY1N2RhLCAweGU1ZmNkYzQxLCAweGJiY2JjNjZmLCAweDA5MWViYzBjLCAweDhmYmY3NjVmLAotCTB4YjNmYmUzZmMsIDB4Y2M3ZjYwY2UsIDB4MmI0ODhhZjgsIDB4ZmJjNTQ3YzMsIDB4NWVlN2NmZjEsIDB4NmYzYmE3OGEsCi0JMHhjOTliYjdhNiwgMHg3NGZlYTYxMywgMHgyZTVmZDY3ZSwgMHg1ZTI3YTc0ZiwgMHhlMzRiOTk5ZSwgMHg4ZGVkOTllNSwKLQkweDc1ODhlNzk3LCAweGU5MWFmMmYxLCAweGU4Yzc5NzhiLCAweGZkNzFjOWVhLCAweGM1OTRiNzYzLCAweDMzYmVlM2QxLAotCTB4YmU3YzZlMzcsIDB4MTc0NzE5NWUsIDB4MzcxNjU4ZWUsIDB4OWFlYjQyN2UsIDB4ZWVlMjdhMzgsIDB4MmY4ZGM2NmYsCi0JMHhmNWM1NTQwZSwgMHhmOWFiZWM5NywgMHgyNTNmZjQ4YiwgMHg5ZTM3MThkOCwgMHgxYWZhNmNjNCwgMHg3ZDBiNGZmZCwKLQkweGJmYmQ2ZTJmLCAweDlkZmZmZTk2LCAweGNmN2U4ZmY0LCAweDdhNDRiZmQwLCAweDQyZmE0OTlmLCAweDFjMzY1OTNmLAotCTB4MDZiODljOWYsIDB4Zjg2NzRiZjksIDB4ZGExMmViOGQsIDB4ZTlhOTVlYTUsIDB4MGNiZWJjYzQsIDB4ZjdkODJkZGMsCi0JMHhjODk1ZWM4YywgMHg1MTQ2OGRiZiwgMHg2YzZmZDA5YiwgMHhmOTM1NDEzMywgMHg0Yzk4MWZmZCwgMHg4NmQzNzkwZiwKLQkweDk0ZTRkY2VkLCAweGFhY2ZmY2Q4LCAweDE0YjhhNjYwLCAweGU5NGQ2ZTNiLCAweDRkYTMzOGYwLCAweDc4ZDg5YTc3LAotCTB4ZDM3ZWRmYzMsIDB4ZDE0NGI1YTIsIDB4Yjk5NzRlOWYsIDB4OWIzZjQ1M2YsIDB4NzA3ZjQ0ZWUsIDB4MjE0MjdhNDEsCi0JMHhlOTY0YTkzNywgMHhjNTk0YWY4YSwgMHhkOGJjODc5ZCwgMHg2YTRiMjEzYSwgMHhkODYzMzZjNCwgMHhhMTVmNmJiZiwKLQkweDgxYTgyZTUyLCAweGZlMjEzZmJkLCAweGJkZWVjOTRmLCAweDQ4NmZmZmM4LCAweDE3NDkyMzIwLCAweGVmM2YxNjZlLAotCTB4YTY5NmZjMzcsIDB4Zjg2MzM4NjUsIDB4ZTIzMzRjMWEsIDB4ZjE0MTk2YWQsIDB4NDJlMWYwNzMsIDB4M2ZjZWQ3ZTYsCi0JMHhmNTBiNGU4OCwgMHhmYmU1NWU3ZiwgMHgxMTVmYzYzMSwgMHhlMTUzZWQ3ZSwgMHg5ZmM5N2FkNywgMHhhYmZiODY1OSwKLQkweDVkMzhmY2Y3LCAweDRmY2U3OWMzLCAweDE4YzFhNTgyLCAweDM5MGIxNTM5LCAweDJjMWMxOTgxLCAweDNhZTNjY2VlLAotCTB4NGJiMzUwYmIsIDB4ZGZmMzg4ZDksIDB4YTE2YzJlZjcsIDB4MTNmYmVlNzUsIDB4NmY3ZDg5NmMsIDB4ZmU2MTUzYjYsCi0JMHg2NjUzYjY3MSwgMHg3MjZjNWFlZCwgMHgzMTZiY2U1MSwgMHgxOGNiMzlhNiwgMHg1ZGIwOTExZCwgMHhiMjE0MDI3NSwKLQkweDdjYmVkNWNiLCAweDBlZjI4NDg1LCAweGUxNzZjZmI4LCAweGQxNDgwYjkyLCAweGUwM2RkZWY4LCAweDlmZmZjODU1LAotCTB4OWQzZWIwN2IsIDB4ZjNjZDBkYzYsIDB4MTE3NzEzYzYsIDB4YTJhMmQ3M2UsIDB4ZDc3OTJmMjksIDB4ZTgzOTJiYTksCi0JMHg5MzZlMDYwZiwgMHg3NWM0OWM1OCwgMHhmYmRjZjRhYywgMHgyOTI3ZThjMCwgMHhkZjAzOWNiZSwgMHhhZmE4YjNkNSwKLQkweGYzNjZlMDM1LCAweDcyMjJmMzE5LCAweDA1Y2NmY2UzLCAweDM4OTkyMjE1LCAweDEyYzE3ZThmLCAweDM0N2M4YmQ4LAotCTB4ZmE4MjVlNTIsIDB4YzExZWVjNjksIDB4Y2Q3ZjVmZTIsIDB4ODI3ZmRiMWYsIDB4MWQxYTFlZTMsIDB4ZmFmMTRiMWQsCi0JMHg4YTlmY2Q0MiwgMHhlZmY3Y2Y0OCwgMHg3ZDQzNDE5NiwgMHg3N2M1Mzc3ZSwgMHg5MGMwZTExNywgMHhhZjg3ZjljMywKLQkweGM2M2Y1M2E1LCAweGQ4NjdhNjVkLCAweDY1ZWY3MTZmLCAweGRlY2ZkYmYyLCAweDczYWRjNjMzLCAweGRlOWJiODJlLAotCTB4ZDAxNDBhODMsIDB4NjdmMTFiOWMsIDB4NDk2ODE0YjQsIDB4ZTA2YTM1MmUsIDB4M2U0M2RmZTcsIDB4ZTZjMjk0ZTEsCi0JMHg1OWIyZjAzMywgMHg1ZjMxYTVlMCwgMHg5NzhiMTExYiwgMHhiYzIxZjRjNiwgMHg3MWFiN2NiMCwgMHhhNmVjY2NhZiwKLQkweDAwMTZkYmIxLCAweDgxNTljYjk0LCAweGViZmVmZjNiLCAweDIzNGY3ZDJmLCAweDFmM2RlNzgyLCAweGM0MzQ2ZTIxLAotCTB4MzcxMWVmYzksIDB4OGZiZGM2MWEsIDB4M2Y0NDM3MTEsIDB4ODg2YjdiMmEsIDB4ZmU5ZThmZGYsIDB4NzlhM2VlYzgsCi0JMHhiZTM1YjllZiwgMHg3MzgxYTVmYiwgMHgzZGYyNDM3ZiwgMHgwODNlZjFjOSwgMHg1Zjk4ZTc4MywgMHgyOGQ2MmNlZiwKLQkweGYwNzg1YmFmLCAweGViY2EzOWZhLCAweDlhMmQzYTFhLCAweGNlYWJlOTA1LCAweDY5NjdmMWU4LCAweDY4MDkyMWZjLAotCTB4YzZjNDQzN2MsIDB4YTc0MzU1OWMsIDB4N2Y2MWIwMTQsIDB4ZmI2M2E4NGQsIDB4ZGE2YmE0NjgsIDB4ZDg1Mzk3NTYsCi0JMHg3MjIxZGJmMCwgMHg5MDFmZjUwNywgMHg3ZmQ4Y2QwMiwgMHg3YjVlYWI3OSwgMHhmMGI4NzUwOSwgMHg2OTk3ZWJkNSwKLQkweGY5NTdiZWRlLCAweGVhYjY1N2JjLCAweDkwMTNjYzFiLCAweDAzZmViMDNlLCAweGQzYWVhZjlhLCAweDZmZDQzNjAyLAotCTB4OGVhMjMzOWYsIDB4YTQzYWY1YTYsIDB4MWQ1N2FkMjAsIDB4ZjM0YWExZmMsIDB4N2FiMGJmNTcsIDB4YjUzOWE1M2MsCi0JMHhjNmFhOWFmYiwgMHhiZWJmZjhjNywgMHgwZDU1YTc4MywgMHhmOWRkNTRlNSwgMHg1YzYyYzVjMywgMHgwMTVmMGYzOSwKLQkweGZlYzYzNzY2LCAweDM2OWEwNzM3LCAweDJlZTM2Mzk4LCAweDdiMjc1YmZlLCAweDJkZjc3ZTEyLCAweGUxNzVmZjIxLAotCTB4MjcxMjE2YzIsIDB4NjdhZTk1ZmEsIDB4NzY1N2U2MjUsIDB4Yjg3MmJmMzMsIDB4ODVmZWRmZmQsIDB4OGJmNDNiZDYsCi0JMHgyODFiODQwOSwgMHg4Mzc5MzViZiwgMHhiMTcxNjc1NywgMHg1NzAzYWM0MSwgMHg5ZWE5NTFkZSwgMHgyZTU0ZTg2OSwKLQkweDdjNjVlN2M3LCAweDc3YTczNWZjLCAweGY5MjY3M2FmLCAweDg1YjQ5ODU1LCAweDc5ZjEzYmQ1LCAweDI1OTQwZWUyLAotCTB4N2U3YWUxZTUsIDB4MzkwZmIzMGEsIDB4OGY1ZDQwNmQsIDB4MDY5ZjdjZmMsIDB4Yzc2NjNmMjAsIDB4ZjQ4NTVhODAsCi0JMHg1NzE4OTcwZSwgMHhjZGVjMGQ2MCwgMHgzZWJmOTFiZiwgMHg2N2FkOTlhNywgMHhhYzVmMDAyZCwgMHhjZmRhMzBkZiwKLQkweDgyYjFmZjQ0LCAweGQ1MjhkNTRmLCAweDk1MTVkYTE3LCAweGY5MTBkYjcwLCAweDdmOTBkNTQ0LCAweGM1YzNlODdmLAotCTB4N2RlZjI0OWUsIDB4NjI5NWZjMjIsIDB4MjllZjU2ZjIsIDB4NDY4ZmI2MWYsIDB4NzE0YTM5YTksIDB4NDRkMGYxYWEsCi0JMHhkNjdhNjc0ZCwgMHgyZWJmOGNhMywgMHg1OGZiNDY5YiwgMHg1OTkzZjA3OCwgMHgzZWY5OThkMSwgMHg1NzhjN2M0MywKLQkweDVmODZlOTg2LCAweDIxNTUzODdkLCAweGUxZmNiZGI5LCAweGNjN2E3MzU0LCAweGFhZDI3MjNlLCAweGUwZjk0OTAzLAotCTB4YmI0OWUyZjEsIDB4NWJhZDBhZjcsIDB4MzVhMmQwN2YsIDB4ZGNkYjdjMzMsIDB4Mzg3N2MyMTEsIDB4NDQ2NjhkZDUsCi0JMHhjYjliNTZmOCwgMHgzZjdkZjE2MywgMHgyYzIxYmJlMywgMHhkMGU5MTFiYiwgMHg2YmVkNWExMCwgMHhkZGQzZTM2MiwKLQkweGI0MzkwNmE0LCAweGM5OWMyNzQwLCAweDIzYzMyZjBlLCAweDM3YWUyN2ZjLCAweGZlMzBlMjhiLCAweDc1NmEzZmEwLAotCTB4Nzg0NzdlZmEsIDB4NTVlOWE3MzEsIDB4ZGFmODk4ZTYsIDB4MzVlNjhhNjAsIDB4NWYzZmE0NGIsIDB4ZmIxODgyZWIsCi0JMHhhZDc0ZDM5MywgMHg5OWU0OGIzOSwgMHg2MWI1OTZlOSwgMHhhZTI2MjlmZCwgMHg2YTJkM2U5NywgMHhkYjFjNTE3NywKLQkweGJkOTFmMzhhLCAweDkzYjEzZTQ0LCAweDM2ODdiN2ZjLCAweDNiZWVjOTU4LCAweDQ3YWUwZTljLCAweDQ4MWNkNzU1LAotCTB4ODc3YTA5YjcsIDB4YmIyNmFkZWEsIDB4YzI5MzkxZGEsIDB4MmUzMWI1ZWIsIDB4MDlmZmVmODYsIDB4YWY2NDdkYWYsCi0JMHgzZTAyOGViOCwgMHgwOWY3N2Y1NiwgMHgwNThkZjViYywgMHhmNzI5N2ZlNiwgMHg5NGM5OWMyMywgMHgxOTkyMTVlZiwKLQkweGNlMzQxY2Y5LCAweGJkYWE2YTFmLCAweDg3OTc2YjE0LCAweDdmMTM3M2VlLCAweDFmN2YwYTRhLCAweDEzNWUzODcyLAotCTB4NzE3NWNkZDcsIDB4YWE2OTNkOWMsIDB4MTMxMDVkNmEsIDB4ZTVjNzEzODcsIDB4YzM5OWI4ZDAsIDB4Y2ViMzAwNzIsCi0JMHg2OTcwMDFjZSwgMHhmZWZjMzI0ZiwgMHg3NzY5NTljMiwgMHhkZTVkZmU5MSwgMHhjZDg3ZTQ0OSwgMHg1MWUxMThjNCwKLQkweDgxZjI5MzUzLCAweGQ5NWNiM2UzLCAweDJlNGRlM2MzLCAweDU1NGY1YjA3LCAweGViOTIwZTdjLCAweGFkMzkzOTdmLAotCTB4NjcyNjVlYTgsIDB4ZWM4ZDZjMzQsIDB4MDU3ZjY4NzgsIDB4OWIzYjUyNmEsIDB4OTFkZWY4MmUsIDB4YzRmN2FmMWYsCi0JMHgzOGM0ZDM3MSwgMHg1NmU3YTRjNSwgMHg2NTg3OWYxMSwgMHhkYWZkMzc2NiwgMHgzMWJmZDMwMCwgMHg5ZDcyM2ZhZSwKLQkweGVkN2MzZmViLCAweDc5ZDkwZjJlLCAweGNmODY1YWZlLCAweDVjNTk3ZjRmLCAweGJiY2NjNzI2LCAweDg1Mzk1OWNlLAotCTB4MTJlNzkzZjYsIDB4NWNmNDUwNzgsIDB4MmJhNDdiZTIsIDB4NzMzZjFmN2UsIDB4NjJiODY3N2EsIDB4NGM2MDFmY2UsCi0JMHgwNGUxMmRkNiwgMHgxNmUwN2Q0NCwgMHg4M2ViMGVmMSwgMHhiNTdjNjY0OSwgMHhlNGRjNTIxZiwgMHgxZTQ0M2JkZiwKLQkweGMzMmYwNjZjLCAweDM1YjgyYTQ5LCAweGUwN2FmNzU2LCAweDdmNzBmM2Q3LCAweGIwNGM0NzJkLCAweDFkM2I0OTEzLAotCTB4ZjM2MjhjNzIsIDB4MDRkOGIwNzksIDB4OGEzMjZjYmIsIDB4NGIxNThmMDgsIDB4MzIzMjEyYmQsIDB4OWFlMjVmZWMsCi0JMHhjODZkOGRmNiwgMHg2NWQwMjFlZiwgMHhkN2M3M2Y1ZSwgMHgzYzkxZTBjMSwgMHhmYmZkNmM1MiwgMHhkNWFkY2Q1YSwKLQkweDVhZjljZmJmLCAweGViMTNjZWM4LCAweGQzMTEzOWRmLCAweDE2ZTMzNTdhLCAweDk2ZDdlMGVhLCAweDFmODNhZDI1LAotCTB4NTNkN2M1NzQsIDB4YzYzNGJiMGYsIDB4YzcxMjcwNWMsIDB4MTI5MjMwNjEsIDB4MzAyOGU3ZTAsIDB4ODQ1YzcwODMsCi0JMHhlZGZhODRlMSwgMHhhNTU1YmMzOSwgMHgyNzU2NDliZSwgMHhmNGQ3MzNjNiwgMHg0MThjNzZhNywgMHhlNWNmMWIzYiwKLQkweGZkMGI3NDQwLCAweDhkZjNjYTNiLCAweGI1ZmFiYWExLCAweDQ0ZmYyY2M5LCAweDdhYjMyNDdmLCAweDQ5NzgyMWQyLAotCTB4ZTYzOTVmZDAsIDB4NzExOGJjNDksIDB4OTFlNWQ1YzcsIDB4YzlkYTVmZTMsIDB4YjRiYmI2ZmYsIDB4MDY3ZTkyZGYsCi0JMHg3OTQwY2E0ZSwgMHg1NTFjY2Q5YywgMHhlYmVjNDk5ZCwgMHg5OGIzZTUyMCwgMHhlMmU0YmM4ZiwgMHg5MjFhZDY3ZSwKLQkweGRmNWMwMTNjLCAweGUyODA3OWFhLCAweDk4ZTFjZGJjLCAweDU5ZDhjNzJlLCAweDg1Yzc4Yjk1LCAweGYyMTdlM2ZhLAotCTB4YWYyM2NjNTQsIDB4OTdiNGRlOWEsIDB4NWQ3NWZjZTIsIDB4Y2M3NGVjMDcsIDB4ZWRmZTdiNTMsIDB4YjQxNDc0NTksCi0JMHg0ZWRiZWNjOCwgMHhiNGE5ZmI3NiwgMHhmOTRhYzhhNywgMHg1NGMwOGVlMSwgMHg1MjMwNGY5MiwgMHg3NzcxNDE5MCwKLQkweDczNzQxOThhLCAweGY4ZmM4ZGQ5LCAweDUwYTZlMzc3LCAweDMzYmIwZDg2LCAweDNjMjUzYjU5LCAweGE3ZTUxMzYzLAotCTB4MmZkZjA4ZmUsIDB4MGJhMGExYWQsIDB4OGM0OTBlMmMsIDB4YjhiNTBiZWUsIDB4YmZmZjNlNjgsIDB4M2YyMjhmNzYsCi0JMHg5ZjliM2ZiNSwgMHg0NWY4YmUyZiwgMHgwY2RmN2YwOSwgMHhhY2ZmMWE2NiwgMHgxZWYwMjljYiwgMHhkNDc5ZDEzMCwKLQkweGQ1OGU3MTdlLCAweGM2Y2M4NWY3LCAweDA5NGZlYjE5LCAweDg4MWQ5MDJkLCAweGViNDhkMjgzLCAweDE2NGU3NjUxLAotCTB4Y2E3Y2IwYjYsIDB4Nzk3MDAyZjYsIDB4YTNjZjMxODQsIDB4NGJjMzljZjMsIDB4YmY1MWUyODAsIDB4ZjYxMmRjMTMsCi0JMHhiMDBjYTdiNywgMHhkYmEwNjdmYywgMHg5MTJmM2RhMiwgMHhlYzgxNWFkYywgMHg3NWU1NWRiZCwgMHhmNjAyMzE0YiwKLQkweDczZjBkYTQwLCAweGY4NWIzZDYzLCAweDQ0ZTY3NGE3LCAweGZjNTBmMGI4LCAweGUxNWI5OWIzLCAweDc5NThiNGI2LAotCTB4ODc3OTMzYTcsIDB4YTZjODBmMjksIDB4MzRhNjIyNzUsIDB4NzdkMWNmY2EsIDB4MWFmOGNmM2UsIDB4YmFkODEzZTYsCi0JMHhjY2M1OWYwNiwgMHgwM2FiYjdjZiwgMHg2MmNmMWY5NywgMHgwNzA4Mzk3YywgMHg4NGY5YzBjNSwgMHhmYzhkNDRmMCwKLQkweDYxZTFjZDljLCAweDM0MzliMGZiLCAweGM4ZGQyZWI3LCAweDI2MmE3Zjk3LCAweDNmM2Y2ODYwLCAweDdiMjE4NjY4LAotCTB4YTdmNmZiMjYsIDB4YjQ1NmQzMGMsIDB4OGUwMmY2ODUsIDB4M2MzN2QwNmIsIDB4MGM3ZTY4YjUsIDB4NjJhNjhlNGQsCi0JMHhhZWQzZmRmOCwgMHgxYjZkNGY4ZCwgMHg3NDhkY2VjMywgMHg4YTlmZjUxOSwgMHhmNjhiYmE2ZCwgMHhiZDBhZWRjOSwKLQkweDhjYmIyN2E3LCAweDcyOGRjMWNiLCAweGZlZjJiNTRhLCAweGYzODhmMWExLCAweGY4ZDNhMjM0LCAweDkxYzViNzM4LAotCTB4ZDk5ZjJjYmEsIDB4MThiZDkwMGIsIDB4YTViN2Q5ZjksIDB4NTAzYmU1YzgsIDB4ZjQzZmJkYjUsIDB4YmVlMjk0NjYsCi0JMHgxZjQ3NGQ3YSwgMHg5ZjcxYzM2YiwgMHg0NTE2MGZhZCwgMHg3ZDUwZmVhOCwgMHg1ZjNlMTNlZiwgMHhkNzZhYmY3OSwKLQkweGVkYmJmMjE0LCAweGY5MDU3YjhhLCAweDIzZmVhODlmLCAweGE4YmYwNzk2LCAweGVjNjMzYjY4LCAweGU0MGNjNjBlLAotCTB4ZDcxMzdlMTAsIDB4ZmU2ZjlmZjEsIDB4ZmRiOWU1MTEsIDB4YWFjZDI0ODcsIDB4YzgxZGZmOTEsIDB4YzIxYmJlMjMsCi0JMHhkN2U0YWIxZiwgMHg2NDNlODdmZCwgMHg5OTEzZWQ3OSwgMHg1ZWI0MmJiZSwgMHgyMTY5YTg0NSwgMHhiNDBlNzVjOSwKLQkweDJlZGY5MGI2LCAweDMwNDFmOTExLCAweGMxOTNmYjk3LCAweDM3Y2Y0NTMzLCAweDllYzFlOGM1LCAweDBlZGM3MTI5LAotCTB4OWM1MWM2ZjgsIDB4M2Q3YjBiMGEsIDB4YjYyN2Y1NGMsIDB4MmZlZTQ3NWQsIDB4NDRiYmY5YTQsIDB4ZDdiYzZjN2QsCi0JMHg5MzQ3NDcwNCwgMHgzNWUxOWJkYywgMHg5ZGM1MGVkNiwgMHhlMTI5Nzk4MCwgMHhmNTljZTRhYywgMHg3OGNjNGYyMSwKLQkweGJmM2YyNjZiLCAweDAyZjU4YWI1LCAweDEzM2ZiZTk5LCAweDJlNDdiNWJmLCAweGU3ZGE3NmFhLCAweGQ1MWU2MGE1LAotCTB4OTNhYzQxOTUsIDB4YzhmYzQ5MWQsIDB4ZDgyNmZkOTAsIDB4YTAzY2RmOTMsIDB4MTVmZjc4ZDIsIDB4ZjUwNTdlNjAsCi0JMHhmNTAzMmRiZCwgMHg2ODVjZmZiNywgMHhkZTdjN2FmMiwgMHhhMGM5M2E4NSwgMHhhZjNjZTE3YywgMHhlZjE0YmIxMywKLQkweDc0ZGYxYTY4LCAweGU0YTlmM2Y2LCAweGE4MjgwNmM3LCAweDc3OWY3ZmUxLCAweGI5MjM4ZWQ3LCAweDUzMmJmZTIxLAotCTB4ODAzYWNlYzgsIDB4NGVjMzM1ZjksIDB4ZjE0ZWM5NGIsIDB4N2ZjMjUyZmQsIDB4Y2NjNWQxMzksIDB4M2RhYmI3MmYsCi0JMHg3NjVkOThjYiwgMHgxMmVjODA5OSwgMHgwMWVjY2ZmMSwgMHhiOGEwZWZmMSwgMHg3YjQwZWE1YywgMHg2NDRmZWY2MCwKLQkweDYzZGVkZTc2LCAweDE2N2NiMGYyLCAweDQ2MDRmYWZkLCAweDc0NGRkZTU3LCAweDA3MjJjZjdiLCAweGUyMTM3M2IzLAotCTB4MzVlYzhjYjksIDB4MTNjZDk0NzIsIDB4YTYzNGEwMDQsIDB4ZWM2ZjAyNWMsIDB4Y2I5NTQxMzksIDB4Zjg2Y2YwY2UsCi0JMHg3ZWMyMmRjYiwgMHgwY2I0OTM4MywgMHg1NTIzZWUzNywgMHgyM2VjZTM5NiwgMHg1YTcyNWUyNiwgMHg3ZmM3ZDNjNCwKLQkweDllYTc5M2ZjLCAweGE3OGY0Zjk5LCAweDEwZTEzOGYzLCAweGNlOWI1MjcxLCAweDIyYTNmZWZjLCAweDNlYmUzNTU2LAotCTB4ZTUxYjU1NzcsIDB4YWNjOTZmZTUsIDB4YTczOGIwZmYsIDB4MWM5YzA4ODgsIDB4MTQxNGU3MTUsIDB4Y2ZkNDM0MzcsCi0JMHg3NWZjZTI2YiwgMHhmNDFlZDIyNiwgMHg1YjNjYjNhMywgMHg1NTZlNTIxNiwgMHgxOGY1YjRiMSwgMHhjMWJkNzNiNSwKLQkweGNlMzI5NDg1LCAweDRjNzNkNzVmLCAweDQyNWU2NmUxLCAweGZhM2NlYmY4LCAweGY5MzMxMjhkLCAweGNlYmNmM2JkLAotCTB4ZTA3MmZjZWIsIDB4MGU1MTE3ODMsIDB4Zjk0NjFkOGYsIDB4Yjg1Mzg5MjcsIDB4Y2MzZjg2MWQsIDB4ZWU0MzQ2YjMsCi0JMHg5MmZkZmQ4ZCwgMHhmOTdlNDdlMSwgMHhmYTQzYWEwZCwgMHgxYTYxZTUzYSwgMHgwMjAzNjNlMywgMHg5OTU1ZTg5YiwKLQkweDQ3NGE3OGJmLCAweGY0YzgzZWM2LCAweDc5NDRjOWFjLCAweDM1YmVkOWNhLCAweDljZWY5NDk5LCAweGNjODczMmZlLAotCTB4NDVjY2ViYjIsIDB4YWE3NzNmNTYsIDB4NGZjMjEyOWUsIDB4OWM5NjAxNjcsIDB4N2I3YTcwNDksIDB4NTFmNGMyYTYsCi0JMHg2NzNmODk2ZSwgMHg4NGM3ZGEzMSwgMHhiMGU5MTQxZCwgMHhiMWY1NjI0YiwgMHhmZDUwMDhlYywgMHg1NDdiMjlkYywKLQkweDgwYWU4M2NjLCAweGY5MWU3NmJlLCAweGY4MWU3MTFiLCAweDBmMWY4ODA4LCAweDZjZmQ0MWZlLCAweDk0MjNlNDE0LAotCTB4ZGFkYzYwYjcsIDB4NzcxMjhjZjgsIDB4MmRlNDY3M2UsIDB4YjA3YmM2NzUsIDB4ZGFmODQ0YzUsIDB4MWZlMDk2MTQsCi0JMHhjZmQ1MTY1MSwgMHhhM2FmOGZjNSwgMHhkOWU3MDViYywgMHg3YzczZGExYywgMHhlNmI1ZWEzNCwgMHhjYTdlODQ4NSwKLQkweDc5YjlkODViLCAweDc1YTNkNTkwLCAweGZlNWM0YTZkLCAweDM4YTY1OGYyLCAweDQyODQyYzBmLCAweDU3MTA1ZmNhLAotCTB4NjYyODRmY2MsIDB4MWM0MTYxMzgsIDB4NmRmNmM4NGYsIDB4NmZkZjNiMjAsIDB4ZmY0MmYyZTIsIDB4MDM3M2VjY2EsCi0JMHhiNzlmMTVlMSwgMHgzNGJmNzI1NywgMHhjYzAyMTU3MCwgMHg4ZjA1ZjY3ZSwgMHhiOWRmOTFkOSwgMHg1YTZlZjk2ZCwKLQkweGY3OTlhZTYzLCAweGYzZTUwZGNmLCAweDQwNzMwZDdiLCAweGE5MGE4ZDVlLCAweGIzMTZmOGYwLCAweDljZjc1YWZjLAotCTB4NTRiOTQ1YzksIDB4MGUwOTdmMGIsIDB4NTliNWZlN2UsIDB4ZTQ1YWJlZWMsIDB4NGEwMzliNzcsIDB4MmZjZWZjZDIsCi0JMHg0MDgxY2RjNiwgMHg2OWJiYWQwYiwgMHg0N2NlYzQ5ZiwgMHg4ZmM1Zjc2YiwgMHhkNTM5MGJmNywgMHg5YzdkM2VlZCwKLQkweDgzZWFmZDhlLCAweDRlNDJmZDA5LCAweGYzZmM1MGZlLCAweDc4NzI3YzAzLCAweDFlNTM5MGQ2LCAweGYzNzNiMWU0LAotCTB4Njc1NmI3MTMsIDB4N2NmMGE2N2QsIDB4OGYzMTZkZTMsIDB4MzgxNjFmZDEsIDB4OTA2ZGMwNmEsIDB4NzIwMmViN2UsCi0JMHgyZDU0NzA4MCwgMHhmNzllNzZlOSwgMHhkYzdhZGE0MiwgMHgwNjAzMDZkZiwgMHhiOTQxZmUxYSwgMHhiNGU0MmMzYywKLQkweGVkODdlMDQxLCAweDdmYWZkZjFmLCAweGJkZDAwYTRlLCAweGM3NGZjM2QzLCAweDVlMDM1ZmYzLCAweGRmM2UzNDc1LAotCTB4OTUyZGY5ZDgsIDB4ZjExMmY1Y2UsIDB4YjBhNmRkNTYsIDB4Yzg0NmI3ZmMsIDB4MzU1ZjExMjcsIDB4NTU2OWY4NDMsCi0JMHhlMjI1YmUyOSwgMHhkZDI3YzFhYiwgMHhiNzllN2Y4NCwgMHgzN2Y5NmZmZiwgMHhhNjIzNWNmNCwgMHhlYzIyNTVhOSwKLQkweDFmZjZhODljLCAweGRkYWViNzI0LCAweGZiNDM1ZjdjLCAweDRiZmJmYjExLCAweGQwZGU3NWY3LCAweGNjOTg2NGY3LAotCTB4ZjMzNGJkZjQsIDB4ZjhhNWViMTYsIDB4ZTU0M2JiN2MsIDB4ZTY2ODMzNzYsIDB4OWUwNmNhZTcsIDB4MmM1ZmRmMTIsCi0JMHhiYjI1ZjVmMiwgMHgzNTdhZGU3OSwgMHhlNzRlY2Q3NCwgMHg4MzNkZmRjNCwgMHg2OWFkNjA3NiwgMHhhMjQ3YzUyOSwKLQkweGE1ZjhjN2M3LCAweDVkNzkzMjRmLCAweGEzZjczZGJkLCAweGJmM2U1MDFmLCAweDYzNzE0M2E0LCAweDYzNzUwN2E2LAotCTB4ZjFjNTJmMTUsIDB4ZTdhZmIxYmEsIDB4MmJhZDhmOGMsIDB4MWQyNWY4YzUsIDB4ZThkYjM0OGYsIDB4OTI5N2UyM2MsCi0JMHgzZmIyY2M5YiwgMHg4OTQ3NzdmYywgMHhmNzI0ZGJkNiwgMHg3OGZmN2MwNCwgMHhlNjZmZTBjZiwgMHg1MzcyNWU5MSwKLQkweGZlN2NkMTY3LCAweGRhNGIzYmVlLCAweGZjZmUzZTkxLCAweGZkNmM3NzBjLCAweGY3YzVkYzc5LCAweGMyYWM2NGI3LAotCTB4YThlZjZhZTIsIDB4NDE1YTdmZDQsIDB4M2Q5ZTg1ZTcsIDB4NWY3YmJlY2MsIDB4ZmIyNTU5N2QsIDB4MjA5NzZmZWYsCi0JMHg5ZTNhMTcxNywgMHgxZDI1ZWM3YiwgMHhmMDdiZGRlNSwgMHhmYWM5NGFiNCwgMHg2YWQzY2VjMiwgMHg4NWYyNmJmNCwKLQkweDQ1OGU1OGFiLCAweGFiNmE3OWQ4LCAweGI3OGY3NTRhLCAweDk0NmFmN2ViLCAweDNlMTdhN2YyLCAweDM1NTRlNzY0LAotCTB4M2U1M2U3OTQsIDB4ZDAxYzljZjYsIDB4YmFjNzlmZjAsIDB4NGYwOTUxNWYsIDB4OGMxMjZkMGQsIDB4NTdlZDhmYzgsCi0JMHg0MWY5M2Y1OCwgMHhlMzZlM2ZhMiwgMHg2OWMwZDRmZSwgMHg4MWE1YzA5NSwgMHg1NWI3MDM1MywgMHhkODZjZmZjMiwKLQkweDg2OTcxYzkxLCAweDllMDhkYTlmLCAweGJlNzBhM2VkLCAweGFiZDZkYTQ3LCAweGQyM2QwNzk0LCAweDEzN2UzZjFhLAotCTB4NjhkMzk5ZDUsIDB4YTZlNWM3M2MsIDB4OWJmZGYxZGQsIDB4MzNhOGYwODcsIDB4ZWZlODlkM2YsIDB4MWUwNGIyNGEsCi0JMHhmMDk4YTE4YiwgMHgxYWE5MTgzOCwgMHg3ZmRjNDY2NywgMHgxYzY2YmE3ZSwgMHg3OTQ3YjkyNCwgMHgyMzc3YzQ1MywKLQkweGJlNGNkZWJlLCAweDJhNmJhMTdkLCAweDE4ZmY0NWM1LCAweGZlMTdkNTg1LCAweGM2YTFmZjMxLCAweDE2NjY2NWUyLAotCTB4ZjBlMmNiYzcsIDB4NTY5ZTk4MWYsIDB4YTIyYzhmODQsIDB4YWY4MjU2ZjUsIDB4MzJiY2U0OGUsIDB4N2NhMGVhOWMsCi0JMHhkYjk0NDU3OSwgMHgyNWIwYjJmMSwgMHgzZjg4OTAxMCwgMHgyYjg3OGIxMywgMHg3MDhkYjgyMSwgMHhjMmQ4N2ZkMCwKLQkweDk1NWYyOWNmLCAweGMyMDRkZTU4LCAweDcyMTI2ZGJmLCAweGJjZTQyNGRmLCAweGQxYjFlYjA5LCAweGE4ODNkZGY0LAotCTB4ZGQ0NDFiYzcsIDB4OWVkMjc5YmQsIDB4MzQwMjU0ZTMsIDB4OTNiYWZlODgsIDB4ZTcyNGVjYzcsIDB4Y2ZmZGMwNjUsCi0JMHgzZmY3MjBiMiwgMHg3ODhjZmU4NiwgMHgxOGY3Njg5MiwgMHhmZDI0MWVhOSwgMHg0MDJkODZkNywgMHgxNzJjMzNkZiwKLQkweDFiNzk2N2ZlLCAweDQ2ZTkxZmZhLCAweDMyM2ZkMDNmLCAweGVmNDdlMTk1LCAweGM2Mjc3Y2UyLCAweGY4Y2U4NmNmLAotCTB4NzhiMjBiZjEsIDB4ZjIyODNhM2UsIDB4NzEyY2FhZTAsIDB4YjZmNDIwM2UsIDB4NGI1MjAwNjIsIDB4OWE2NWJlNzEsCi0JMHhiN2IwMGVlYywgMHhmZWI0Y2M3YSwgMHg0Nzg4YTk4OSwgMHg1Njg0ZmY5YywgMHhhMjRiZTE5OCwgMHg4ZGZkYTM0ZiwKLQkweDdhMGRlZmM4LCAweGUxOGI5ZDE1LCAweDM1YTNhMGY4LCAweDdmN2ViNjJkLCAweGViZDc4YjJiLCAweDlkNjQ3MzM1LAotCTB4ZWY1MzEwZjQsIDB4NGZjYjJhYWMsIDB4Mzc3Y2VmNWEsIDB4MzFiZmM3MGIsIDB4ZDNkM2MzNjYsIDB4Y2YxZGViNjMsCi0JMHhlM2MyMjI5ZSwgMHhiYzdmNzNmNywgMHhmMTU3YmU4MiwgMHhkMmZmNzFiNywgMHg2NmYzODE1NywgMHgyYzBlZmU1MCwKLQkweDU5YjdmNjFmLCAweGY4OTc1NDAyLCAweDM3NTQ0ZjExLCAweDkwYmMyMTJjLCAweDNiYTU4NmJkLCAweDJmNTgyZjA5LAotCTB4YWZmMzQ5M2MsIDB4ZGMzYjJiYTYsIDB4YzYxMGVhZmYsIDB4ZjU3ZTljNjksIDB4ZmMzMDNmYTIsIDB4ZjdjZjFjOWQsCi0JMHg5MTFiNzI4ZCwgMHhlYTMwN2VhYywgMHg3ODJmODY4NiwgMHg2ZjNjNmE3ZSwgMHhmZDU5NDczMCwgMHgxODk2MTBkMCwKLQkweDVlOGYzYjdlLCAweDdlNDdjYmNmLCAweDk4ZmZiYmZiLCAweDUwZGIxZWI3LCAweDlkYjM4ZjE2LCAweGY0OGJjMTk1LAotCTB4ZWRlN2M5MWQsIDB4ZTg3OWE0ZDYsIDB4YjY5NzFmOTAsIDB4NTA2OTdiMzEsIDB4M2YyYzM5YTIsIDB4ZTBmOTg0MzksCi0JMHhkZTM3YWM2YywgMHgxYmQ1OTRmZSwgMHgwZjZkNDc5ZCwgMHhjYWI0M2NiMSwgMHgzNWYxY2UzNywgMHg2NjgyNmE3YSwKLQkweGMzMzZjZjk2LCAweDllNTJkNjM2LCAweDZkZmY5YjEzLCAweDUyZWZmMDcyLCAweDQ4Mzg4YTM2LCAweGViODgxM2Y0LAotCTB4ZjZmNjM4OGQsIDB4ODNmZDFiYjIsIDB4MDVlYTZmZTEsIDB4YmU4MzM3YWUsIDB4YTM3NDllN2QsIDB4NzYxN2E4OWYsCi0JMHg2N2JhNWI1MywgMHg4OTY4YTUzYiwgMHhiMGJkNTA3OSwgMHg1OWZjY2MyNywgMHg4M2NjNGJkYywgMHg2YmMwNGFkZSwKLQkweDJjMjlkYmQzLCAweDI5M2ZlZGNmLCAweDE4NGNlODNiLCAweDUxZjNmYmU1LCAweDdlNjFlZjk0LCAweDFjZTQ5MDVmLAotCTB4Y2Y4MTUzZjQsIDB4ZDlmZjcxNWUsIDB4ZjkzMzIxNTQsIDB4ZDZmMGU2OTksIDB4OGU1MDliYzgsIDB4YTdmZDM3MGMsCi0JMHgyNzU0MDJkMywgMHhhNTdlMWM5NCwgMHhiYjUwNzA4MCwgMHhkYWM1YzcwZiwgMHhjN2QxZWExZiwgMHhmMDBhMGZiZSwKLQkweDJhNjBhNTczLCAweGZhMzFkM2JiLCAweDY1N2UxZmY3LCAweGU5YWRlMTMyLCAweGI4OGIyZmVkLCAweGE5MTdhZTdlLAotCTB4Y2ZlNzM3NTksIDB4ZDc4OTI1NjgsIDB4ZDc4OTI2YmYsIDB4YThlNjVkYmYsIDB4ZmYyZWVhOWQsIDB4ODgxYmQ5MjEsCi0JMHhlZmExYWJkMSwgMHhjMDhlMDQwZiwgMHg4YmZjZWJjYywgMHg5YmEzMWE1OSwgMHhhNjFmMWNjMiwgMHhmYWUyZGU2ZSwKLQkweDhmMzlmOTZiLCAweGExYmZkNmMyLCAweGYzNzExMmJmLCAweDg4MGVmMTM1LCAweDVmODBjNDJmLCAweGYzZjg2MDE5LAotCTB4N2UzMTM2OWYsIDB4NzMwN2E3ZmMsIDB4NGViZWUzNjIsIDB4ZmYyMDhlZjMsIDB4Y2MwNzU0ZDcsIDB4ZjkwMmE0OWYsCi0JMHgzYTY3ZjQ1ZCwgMHhkZmNiY2JkNSwgMHhlYTdjYjFiMywgMHgxNWFlYzE3OCwgMHhjODE1N2ZjYywgMHhiMWViZmU0MCwKLQkweGM2MjY2YmI3LCAweDU5OGQ4YmM2LCAweDI1NGMzZjMyLCAweDE2NTJlNDM5LCAweDVmNWYwY2YzLCAweGQ2MTlhMWM4LAotCTB4OGUwMjczODgsIDB4YjkzMzhmZTcsIDB4ZWFmYWMxNWYsIDB4ODljZjY0Y2YsIDB4ZTZhZGQ1ZjUsIDB4MTZkZDRkYzUsCi0JMHhmZjY0NzNhMCwgMHhjZWZiMGIwNSwgMHg0ZGVlZjNlNCwgMHgyZjg3N2VhYywgMHhkZmM5MTM3YywgMHg4ZDM3Y2Y4MCwKLQkweDZmMGVjN2RhLCAweDNmY2Y0ODlhLCAweDFhNzliYzNmLCAweDlhOTRmNzNiLCAweDRlOTllMmUzLCAweGJlNTJlNWZjLAotCTB4YzM0NzM2NzQsIDB4YjNlZWZhZmUsIDB4ZmFiOGJiZWMsIDB4NGZmMTg1NmUsIDB4Y2IzYzZjNzQsIDB4ZWZlN2U2YzgsCi0JMHhlYzZjNDdmZCwgMHgwMjgyNDM3YywgMHgxZjE4MDM4ZSwgMHhlNzVkNmYzNywgMHhhOGJmMmNlYiwgMHg1ODllYzkwYiwKLQkweDhkZWYxODNjLCAweGIxNzFlNmNiLCAweDIwZTA1YjMwLCAweDllOTg3OTI4LCAweDE3NWI3ODNiLCAweDUzZjE5OTdhLAotCTB4MWU5OTA0YWIsIDB4ZGUxNGRhOWIsIDB4Y2M1YmNlZGYsIDB4M2ExZjE5M2IsIDB4YmZlMjc0YjgsIDB4ZjliZmNlODMsCi0JMHhlNzNiMDhiZCwgMHgzZWNjOTFjMCwgMHgwNzE1MjcwNiwgMHg2YmZkMjI3NiwgMHgxZDcyODQ3YSwgMHgzZjgwOTgwYywKLQkweGU0ZmJiMGI3LCAweDE5ODUxMzk2LCAweDEzYzFmYjg0LCAweDhiMjU2NzJmLCAweDNkZDI2ZjFiLCAweDU0ZTU0MjBhLAotCTB4MTI0M2FmM2UsIDB4ZjM2NTJmZmIsIDB4ZTc1Mzg3ZjMsIDB4YjUzYjNmYjksIDB4OTkzMTM3YzAsIDB4OTJhMWQzNWYsCi0JMHg5MDkyZTlkNywgMHgzNGIyYTc3NywgMHg0NWRjN2RkOSwgMHgzMWJlZGYzMSwgMHg0ZmRhMjlmYSwgMHhkZDhkODc2ZiwKLQkweGY5M2FmNWM3LCAweDAzYzJlYTc5LCAweDE0OTljZDI3LCAweDk5YTUzYjdmLCAweDI3NmE0NzE0LCAweGJlODhiYmJkLAotCTB4OWNiYTQwMDMsIDB4ZTQ2ZDVhZmMsIDB4YWM3N2JiMTAsIDB4ZWM1OGViNmYsIDB4NDc0N2MyNDksIDB4MzJkZmM3MzYsCi0JMHhlNjdkZjkzNSwgMHgzYmZmNDRiNywgMHg3NTE2Y2VlMCwgMHhhZTEzMmVkNCwgMHhjNTBhY2VmNywgMHgxZGU1OTNiMSwKLQkweGU4OTFiNDllLCAweDdlMTJlZjg3LCAweDBhOTVlZWY4LCAweDAxZGU1M2NiLCAweDE2ZjdlMTRkLCAweDk1NjE3ZWZjLAotCTB4MDk3N2IzZjAsIDB4MjJhYWJjZmYsIDB4NTdiZTNmYjksIDB4MzlmYWIzY2MsIDB4MTdlZTkyNzgsIDB4YzdlMjdiNTYsCi0JMHhiZGYyMmJkZCwgMHhmMzYxZTAzNSwgMHhhMTM0YmRkZiwgMHhmNzdkZTQ1ZiwgMHhjMWYyMTM3YSwgMHg4Yjg3ZTE2YywKLQkweDcwZmM4OGEwLCAweGU5MDNlMzEwLCAweGM2ZDhiMWJkLCAweDI5ZjJlY2UyLCAweDA5ZTY5MjEzLCAweGQyZmZkMWM3LAotCTB4YzQyNzAzZjcsIDB4ZmU4NjA0NzcsIDB4NjVkZjhhOWIsIDB4OTFkNGViZjEsIDB4OTkzOTJmZjMsIDB4NDE0MWI2ZmYsCi0JMHhlMWIxZmI5MiwgMHhmZGQ4NjVmOCwgMHhlMmVmNWMzZCwgMHhjMWRlYTFiZSwgMHg3ZmY0MzQ3OSwgMHhkOGEzMmIxNSwKLQkweGZmNDMyZDczLCAweDdmNzM2NzRmLCAweGI2Y2ZiYjU5LCAweGIwYmVmNjI1LCAweGEzOGNlODNlLCAweDViOTFhMWZkLAotCTB4ZmJmOGM1MmUsIDB4OGM3MzgxNWEsIDB4NzNkOGU2MDEsIDB4ZGY2NDE3OTAsIDB4ZjRkOWQ5ZDMsIDB4Y2IyZjZiM2QsCi0JMHgyYzA3NzFhZiwgMHhmMmJlZTE3ZSwgMHgyY2YyYmVjNCwgMHhlYWU5NzEzMSwgMHg3MTQ5ZjVjOCwgMHg5NzNmYmMzYywKLQkweDE2N2ZmZGNlLCAweDViMTQ4ZjZiLCAweDA3ZDVmZDk4LCAweDZiZGQwMGE1LCAweDNkYjg0N2Q1LCAweGIxMjNkZmQ2LAotCTB4Y2VhMmMyNzMsIDB4ODU3YmVjMjMsIDB4YjcyNDhiYjUsIDB4MzNiMWJiODcsIDB4YTM4MTlmYzQsIDB4Y2YxZTU2NTUsCi0JMHhjOTBjYmMwZCwgMHhmYTg4ZTA0YiwgMHgyNWRmYmUyOSwgMHg5ZTIyN2JlMiwgMHg2MmNmNDIyNiwgMHg4ZjNlZmY5YSwKLQkweGVjZWZhNmU0LCAweDc1YTM4YTZlLCAweDMwYTc1ZmQzLCAweDIxMWMzMzc0LCAweDliZjIxNTJlLCAweDI0ZmE3ODg5LAotCTB4ZjI0OWQ3ZGIsIDB4ZWQ3MWZhYzMsIDB4NTRmZjljMTQsIDB4ODQ3OWM3ZjEsIDB4ZDg5Yjg2OWYsIDB4MWQ4NTZmZDEsCi0JMHg0ZmQzNGJlZCwgMHgzYmFmZmM1MSwgMHgwZmQ1ZWUyMCwgMHgyNGEyODcxNCwgMHhmMmMwMTM5NywgMHhjZjY3NWVjMCwKLQkweDFmOWU0NmY2LCAweGZhZjU3YmIzLCAweDBmN2Q4ZDg4LCAweDc1NGUxZjU4LCAweDZjZWU4OGRiLCAweDc1NGM5OTRhLAotCTB4YTc3NjU4NjQsIDB4ZjNhMmJkMjIsIDB4ZGZhYTIyZjQsIDB4ZWZmMzk0NTcsIDB4MDFkNDFhM2MsIDB4M2FiNjg3OTYsCi0JMHhiZjg5Mjc3ZCwgMHhiOGE2ZWU5NSwgMHhjZjgzNzRmYiwgMHhkMTNkZTE5YiwgMHhlMTI0NWRjZiwgMHhmY2Y1ZmY2NCwKLQkweDk3MjE0NWNmLCAweDcyZDc5M2M2LCAweDlkN2UxMzI2LCAweDUzNjVkZmJlLCAweDQ1ZmQ3OTNjLCAweGZjZjZhZTk1LAotCTB4OWM1OTVmOTMsIDB4OGQzOGQxYTksIDB4NzZkOTViOGQsIDB4ZTMxZDFiNjQsIDB4Y2Y0ZmZjMWEsIDB4NGVmZTMwNzYsCi0JMHgyYzMxODEyOSwgMHhiNWJkMmNiZiwgMHgwZTlhNGJlZiwgMHhmMjk1MzFiZCwgMHgyNzIzYmVlOSwgMHgzODMxYWFhNywKLQkweDdmNDQ2ZGVmLCAweDRkN2Y0NDlkLCAweDZiZjYxMjYwLCAweGFkMjRhZDY2LCAweGI3MGVmOTExLCAweGIxZjc3ZjY3LAotCTB4ZTg1ZjNhMWMsIDB4YTUyZTNiMjUsIDB4ZTI5ZGFjZjYsIDB4M2JjNzdkNjQsIDB4Nzc5NDA5ZjYsIDB4OThkNmYxNzQsCi0JMHg2NjU4NmFlZiwgMHgyZDFjYzBlMywgMHg5NjNkMzdiYSwgMHg3ZjE5MjdiZiwgMHgxZTdjODM1NywgMHhkZGQxNjg4MCwKLQkweDViZmI2MjUzLCAweDQwZmRhZmZlLCAweDAzZjMwZTdhLCAweDYwM2YzOGQxLCAweDdiYWIwOWM4LCAweDg3OTlkNTlkLAotCTB4OWU5ZWVjMmQsIDB4YmY2MjViZWUsIDB4ZTFjZTJhY2YsIDB4MTYzNjY5N2UsIDB4NzNhZjY0M2QsIDB4OTBiOTllZTgsCi0JMHgzYzMzMzM1MiwgMHgyMjE5YjQ0MCwgMHgwN2RkMTc2NiwgMHhkZGZlNjQ0NywgMHhlN2U2MThkYSwgMHg2N2Y1ODk2NywKLQkweGU4NDcyMzliLCAweGUyMzljZGJiLCAweGY0MmU3MjdlLCAweGMzYjc3MWIwLCAweGUwM2Q2YjAwLCAweDA5NWI1MzMwLAotCTB4NTg1NmQ2NmUsIDB4NmNhOWNiMjMsIDB4NjUwNjBkMmYsIDB4YzcyNDdmZDIsIDB4ZTU2Y2JjZWMsIDB4NGM5MGYyYmYsCi0JMHgzMzcyYzNkZiwgMHgxZTQzNjVjMywgMHhmMTYzZGQzMiwgMHhmNzEyZmZlZiwgMHhmMWMzOTk1MywgMHhmZGMzZGIzOCwKLQkweGY0MTZhNTBmLCAweDA0MDU2NmRkLCAweDZkZjlmZGQ5LCAweGU4ZjcxNTEwLCAweDBmMzFmN2M5LCAweDM3YmEzN2ViLAotCTB4OTlkMzBkYmIsIDB4MDA4ZjI2MTQsIDB4ZjY5ZjNmMWIsIDB4NGZkYjI3MjMsIDB4MzM1MzM5NzQsIDB4N2YxMDcyMmMsCi0JMHhmNGM3MjQ1MiwgMHhlZmFkZWE1NSwgMHhkODA3M2ZhMywgMHgwMzBkZjZiYywgMHgwZjk3OGY3ZCwgMHhjM2JhM2JkZiwKLQkweGRmNDdiYzZmLCAweDBmMWU0YTk5LCAweDZkZDUwZWZiLCAweDFkNTA4YjRkLCAweDFkZThkYTgzLCAweGU4MDU2M2YyLAotCTB4NTZhYTczMzcsIDB4ZmUxY2NjZTYsIDB4YzA3YzFmOWUsIDB4ZmM0OGNmYmUsIDB4N2JiNjlmOWUsIDB4YmJmODY3MjUsCi0JMHhkMjdiZTMyZiwgMHg5YTM1ODE3ZCwgMHgyZWIxZjEwOSwgMHgxMTk2ZWFjYiwgMHhiY2Q2NjUxZiwgMHg2NTdiZWMxOSwKLQkweGUxMjU2ZmE3LCAweDM2ZDQ4MmVhLCAweDBlNjI0ZDgxLCAweGE4Nzk2NGNjLCAweDc4MmE1NWMwLCAweDkyZmY2ODJhLAotCTB4MDI3ZGY4YzcsIDB4YzVkMTc4NjAsIDB4MDM5ZWI3ZjksIDB4NTIzOGY3ZWMsIDB4MmJmN2ZjMmQsIDB4YWQwZTIxNzYsCi0JMHg4ZDdlODYyZSwgMHgyNzg1OGZiZSwgMHhlZjk0NmExNiwgMHhkZDVhNzc2ZSwgMHg4ODU5Y2Y5NCwgMHg3ZTYxZDRkZiwKLQkweDNiZmNhYzViLCAweDVlNmIxNjhhLCAweGYxYjhmYzgwLCAweDNjYTI1ODVkLCAweDNkMTY1MDViLCAweDU2ZGQwZWNjLAotCTB4ZmMyNzJmOTYsIDB4YzU5YjQ3ZmUsIDB4Y2Y5MjJkZjcsIDB4NDcyYmQzYjcsIDB4ZjI1YzFlNTAsIDB4MmNiOWY5YWIsCi0JMHhjYzc5NDcyZiwgMHhiYTYxZTQzNywgMHg3MDI4ZjdmMSwgMHhmZGExZGZmZiwgMHg4MmZlZmUyNywgMHgwNDU0NmZiMSwKLQkweGM4NDM4ZjAzLCAweDgzODM5MGQzLCAweGM3NzE0NGY0LCAweGY0MzI3YTgzLCAweDlmMmMzMDVjLCAweDBlNWMyOTVkLAotCTB4NTI0MTdkMGEsIDB4YzhkNWRlYzgsIDB4NmZmNzEzNWUsIDB4MDFiZmVmZWMsIDB4OGYxYTNlYzMsIDB4MDAwMDM0MzAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDc5OTMzMzFlLAorCTB4MGYyMGYyNjQsIDB4MDA4NGYxMDIsIDB4MDIxODQyYTIsIDB4MjcwODg3ODQsIDB4MDFhOGM0MjEsIDB4NTRiYzgwODMsCisJMHg0ODQzM2MyNiwgMHhiZmE4MTEzMiwgMHgyNjc3YmQ2ZCwgMHhiNWFkMTEwNCwgMHhiYzFiNjk1MSwgMHgxNDEwMWRlOCwKKwkweGQxYTA3NTE1LCAweDQwZTgxYzA2LCAweGRiZGFiMTE0LCAweGQ1YThmOGE4LCAweDQwNDQ1MDc2LCAweDhiY2JjMjQ4LAorCTB4YWY3ZmQ1MmQsIDB4ZTY0OWNmYjUsIDB4ZDQ0ODRjOWMsIDB4ZmZmZmJmZjYsIDB4ZGJmM2YxZmQsIDB4ZDljZmIzZWMsCisJMHhkYWY1ZWQ3YiwgMHhmNmJkYWQ2YiwgMHg5YTMyYzExZSwgMHhlNDIyNGUyNCwgMHg2NWEzZjg1YiwgMHhmNDg0Mjc4NCwKKwkweDBhZGIyY2U5LCAweDY0OTE4ZmRhLCAweDhiMmZmYzQyLCAweDEwOGUzNmYyLCAweGYwOGU3N2VlLCAweGJjODQ1MWE0LAorCTB4OTgwYjk5YjUsIDB4Y2ZiYzNkNjksIDB4OWZhZDA4NDYsIDB4NjAzZDM0ZGUsIDB4ZmY2NDIyY2UsIDB4ZWYwMmIzMDgsCisJMHg4ZjlhZGU5ZiwgMHhiZDJmYzlmNSwgMHg3YjY4MTRlNywgMHgwMGJjNGJkNSwgMHgxM2JlZDM3NSwgMHgxMDlkODhjZSwKKwkweGExZTViOWFmLCAweGY2ZjNlOTZiLCAweDg1YjI3ODk3LCAweDkzZmM0NTBlLCAweDkwODUyNDRkLCAweGZlYzIxNjYzLAorCTB4NTJmYWIyMmUsIDB4NmQ1NmFiMmIsIDB4ZjQwNzdmZGUsIDB4MjY2NGRlNWIsIDB4ZDU0ZmRhNTYsIDB4YWVkMzY1ZWUsCisJMHg4NzY1ZjVhNSwgMHg1NGFmMDI0NCwgMHhmYTk1YWI2ZCwgMHgwMGYyZmFkMiwgMHg5YWZhODQxNywgMHg3MWM2N2Y3ZCwKKwkweDc5NDgwYWRhLCAweDI3MjEyODcwLCAweDVmMjIxNjdkLCAweDk2Y2VlYjQ5LCAweDc5ZjQ1OTk0LCAweDExNjc2MDQ1LAorCTB4ODNiMTVmYmMsIDB4ZmJlODliNzMsIDB4N2ZmNjliMTUsIDB4MzQ1N2ZkMGMsIDB4ZGE3OTAzOGEsIDB4MzZlZDhhZmYsCisJMHg2MzYxMGYyMiwgMHgxZTYwNGI3ZiwgMHhiYzAxYTY0YiwgMHhjNDg4NmY1NSwgMHg5N2U1ZWI0YywgMHg3MDA0NDk1NiwKKwkweGE1NGJkNDI0LCAweDYxZmYxODBlLCAweDM4YzA3NjQ5LCAweDBkMWM3MDg3LCAweGQwY2Y1NTlmLCAweGQ1NzdlODcxLAorCTB4OTg2ZTcwMmYsIDB4Nzg4OWI1NWEsIDB4ZGRkNjllMDAsIDB4ZGE0ZjM5ZDYsIDB4ZDJiNTVlNjEsIDB4Zjc3ZWY4NjAsCisJMHhiN2JjMTI3ZCwgMHhiMmY2NTAyYywgMHgzNmY4MDY1NSwgMHhlNzAwNDU0YiwgMHhkMmQyY2RhNiwgMHhhZGZkOWRhMSwKKwkweDBlYTZmZWQ4LCAweGQ5MGQ2M2FlLCAweDc2YTg5ZWE5LCAweDQ3ZDI3OTYzLCAweGFjZWU2Yzg4LCAweDA0YTIxMDU3LAorCTB4NDA3NzAwZWQsIDB4ZjNhYzNlOWEsIDB4ODEyZTc5ZjksIDB4M2ZkMGQxOTAsIDB4Njc0YjY0NGYsIDB4YzgzMDk0ZmYsCisJMHhlOGY3ZmUwNywgMHhmNjBmODEzZiwgMHhiMmRiMDIzYSwgMHhkMmI1ZTkzYSwgMHg3NzJkZmY0NSwgMHg0YmFjZWJkMiwKKwkweDllZDA5ZmE1LCAweDU2YmZkZDE3LCAweGEwNzQwNDNlLCAweDVjZmJkNGYwLCAweDRiZTIzZTU4LCAweDRmODM3MmMzLAorCTB4Y2FmZGJjNDYsIDB4MDZjYjA0MzcsIDB4M2Y5ZjFiOWYsIDB4ZTU4YjFiZTYsIDB4ZTU4MjlmMjYsIDB4MmM2MmJlMTMsCisJMHg3YzUyYmUwMywgMHgwZTZmOGI2ZiwgMHgxZTdkNWI5NiwgMHhhZjk0ZmU3YywgMHhiZWVkY2IxYywgMHhhY2ZlN2MxYSwKKwkweDc3MmM2ZWVmLCAweGZjZjhmY2Y4LCAweDJjN2FkZjA1LCAweDJjN2FiZTgzLCAweGIwMWFmOTc3LCAweGYwMDVmNDZjLAorCTB4ZGI3ZDk3YmQsIDB4MDVmMjZjYjEsIDB4NWYxZWY5ZjEsIDB4NWYyMTk2MTMsIDB4NDA3ZGNiMTgsIDB4N2Q4NjVhNWYsCisJMHhmMDFlNTgyZCwgMHhhYmU1ODg3ZCwgMHg3NzdlMDhiZSwgMHhjYjFjNzdkMCwgMHgzYmJjNTUwNywgMHg4MTdjOTAyNywKKwkweDEwYTljZGUyLCAweDkyMTcxNTE3LCAweDhiZTRhMjU4LCAweGNhNTg5ZWI0LCAweGY5YjcyOWVhLCAweDRmNWEyNWYzLAorCTB4YzUzYWQwZjEsIDB4NzBjYWRmNjMsIDB4ZmJkNjk5YmUsIDB4Y2NmNmIwZDYsIDB4ODU4MTQ4N2IsIDB4YWNmZDMzZDYsCisJMHg0YTgzYzA3ZCwgMHgwN2Q2OTU4MSwgMHhjMWY2YjNkNCwgMHg3MTA1ZmM5YiwgMHhjMDM4M2ViNCwgMHgxMWRlYWZkYSwKKwkweGZhZDFiMDJlLCAweDllZDY0MWQ1LCAweGVkOTMyMjEzLCAweDY2MTM5ZWI0LCAweDk0YjdkY2Y1LCAweGNmNWEwZWM5LAorCTB4YmNmNTYxNmQsIDB4OWQ5M2ZkOGYsIDB4NjExNzllYjQsIDB4MTUzZjhmZGYsIDB4ZWI0ZjFjOWUsIDB4ZmI1OWRiZTMsCisJMHhkMGE0NGJjNCwgMHgwOTEzZWI0NSwgMHg3YjAyZjU4NywgMHhhZDAyNjE3ZSwgMHhiZDU4YjgxNywgMHgyMDk5NWZhOCwKKwkweDdkYmZlMGM3LCAweGExMTE2NDYyLCAweDdmZGRiMGJjLCAweGQzYTQyMmIzLCAweDQ1NTkxNGJhLCAweGZlOWYxNGRjLAorCTB4OGIwZjU4MzksIDB4YmZiNDMxNjQsIDB4ODQ1MzJmZTUsIDB4OTEyZWI0NzEsIDB4MTdmZWQwZDUsIDB4MWZiNjA1N2YsCisJMHg2ZjZjNjUxMCwgMHhmNmMyYWZmNywgMHhlZDhjOTIwMywgMHhiMDdiZGFhNiwgMHg2MGE4YWFmZSwgMHhiZGVkNzI3YiwKKwkweDkyYWJmZWY4LCAweDZiODNlZDgyLCAweDQxZmFjMjFmLCAweDYzZWQ4M2QxLCAweGVmOGQ3ZjZiLCAweGQ4M2M5NDFmLAorCTB4ODBkYWM4ZmUsIDB4ZmZlYjQ4NTIsIDB4MDBiNjc5YzEsIDB4OWU3MWQ3NWYsIDB4ZmMwZDkyNzIsIDB4YTUyYjRjMWEsCisJMHgyMzhlYmFmYywgMHgxZTNlNDA3MywgMHhmMmE2YTYwMCwgMHg1MjVkMmViMCwgMHhmYmVkYmY0MCwgMHgzYzkzZGU0NywKKwkweDMyNzZmMmE3LCAweGY1M2U5N2Q0LCAweGYzZjYxNjQwLCAweGQyMjNmNjFjLCAweGZiOWVmODdlLCAweDU4Y2RmODk5LAorCTB4YmYxMzNmNWQsIDB4NjlmYWQ3MjksIDB4YWNlYWY3ODQsIDB4ZGY2N2ViYmQsIDB4ZjBmNWUzMzcsIDB4ZjVhMTUzN2MsCisJMHg3MWZiMTdiMywgMHgxMzVlNmVmNCwgMHg4N2EwOWRiZiwgMHhhZDRhZGJlNywgMHg0ZmQ4ODM5ZiwgMHgwOWUwZWY0MiwKKwkweGZkNzQ2MzhiLCAweDVhNjVjNTg0LCAweDdlYzQ3ZjNmLCAweDFlMGVmNGZhLCAweGViYTcxYTQ1LCAweDZiOTY5MTQ3LAorCTB4ZmQ4ODdjZmQsIDB4OWZhZWY3YTQsIDB4MWVhZDc0YjAsIDB4ZDY4NTY5MWUsIDB4YTdlYzExY2YsIDB4YTVlNmVmN2YsCisJMHhjM2QzYWY5OCwgMHhmYWQyYWU2MywgMHhjZjc0ODkzOSwgMHgwNzNmNWRlYSwgMHgxY2ZjN2ExYywgMHhlN2UwNzQ3MCwKKwkweGE4MzNjMjFjLCAweDcwMmFmMzc3LCAweGUwNTNmMWVhLCAweDI1Y2ZjMGVjLCAweGRlYWFlN2VjLCAweGE5YzA3M2Y1LAorCTB4NjcwMWNmYzcsIDB4MGU0NDdlMDcsIDB4NzdhYzM1ZTYsIDB4ZDc4ODJhZjMsIDB4YmUyMGE3ZTMsIDB4MGU0ZTNmMDMsCisJMHgzYmQxMTllMCwgMHhhM2VkNWU3OCwgMHg3ZGFiY2ZjNywgMHg4YTkzZjAzYSwgMHgxZGVlOGNmMCwgMHg3YTI5ODUzYywKKwkweDc0YTYxNGZjLCAweDc4NDY0N2UwLCAweDlmYWVmNWM2LCAweGY4ZjQ1MzU3LCAweDAzYTUzNTc5LCAweDNmNjE1NzNmLAorCTB4NWU2ZWY1ZDcsIDB4ZmM3YWE5ODUsIDB4ZTA3NmE2MTQsIDB4YzlmYjE3MjcsIDB4Nzg0NzZjZjcsIDB4ZDFjN2VkMDgsCisJMHhmYjA3M2Y3ZCwgMHhiMDczZjFlYiwgMHhhZTdlMDc3ZiwgMHhkMGE2N2VjNSwgMHhlZTdiYjI3ZSwgMHg4ZjUzMjhhNywKKwkweDBlY2NhMjlmLCAweDllMjIxNGZjLCAweDNmNWRlODZmLCAweGY4ZjUzMzA3LCAweDgxZDk5ODM5LCAweGNmZDhhOTlmLAorCTB4YWJjZGRlZDQsIDB4N2UzZDBhZTgsIDB4Zjg2MGFlOGEsIDB4YzA4YzI0OTksIDB4OWRhZTg2NzUsIDB4NzI3ZTllNmUsCisJMHg4NTdjYmY3ZCwgMHgyZWYzZWZhMywgMHg2ZTVkZTc1NiwgMHhhZjBmNzYwMiwgMHg0NWE0MzNkOSwgMHhmNmZiZTllMSwKKwkweDBmYjkwOTFkLCAweGE2YmI2ODkwLCAweDhmYzA3NmUwLCAweGQxNzk1YTgzLCAweGQ4ZmM0ZDc2LCAweDk1MWQ5ZDM4LAorCTB4ZWFlYTI0YTAsIDB4NzU3ZGM1NDksIDB4MWQyOWY3ZWYsIDB4OWQ0ZjZiYTAsIDB4M2RhZWI1NzMsIDB4YWJhYjkzZGQsCisJMHhkNzhmOTQ2NywgMHhhNmJmZGZiZCwgMHhlMmJmNTc0MCwgMHhlZjc1MWJlZSwgMHhkMTZmZjk2NywgMHhjZmQ3YjNkNSwKKwkweGE4M2ZiZGQzLCAweGZkYWVhMTdlLCAweDVkMGE4NmNhLCAweDk1ODE1NWZiLCAweGRiMzVmYWJhLCAweDdmN2JhMjdmLAorCTB4YWU4ZDcwNTgsIDB4MDNkMzc4N2QsIDB4ZTExMWY2YmEsIDB4OTFmNTc0NDcsIDB4YmRkMzFlODcsIDB4OGI2NWJhM2YsCisJMHg4N2NjN2RhZSwgMHhjN2RhZWFjZiwgMHhlYWU5NzY0NSwgMHhhM2RmMWVkNywgMHhmNmJhZmY3YiwgMHhhNGZhYmEwMywKKwkweGJkZDdiZjhiLCAweGQ1ZGU0ZjlmLCAweDNmOTZkYmRiLCAweGUyOWZkZWViLCAweDdlZDc0Y2ZhLCAweDA2OTdkYTdkLAorCTB4M2FlZWQ1M2IsIDB4ZTc1YThkNzYsIDB4ZmEwOGFlNDEsIDB4MDk3NGZlMjUsIDB4NDNiMGQ1ZWQsIDB4ZDdkNGJhYzIsCisJMHhjNzE0ZmNjZSwgMHhlNTI4Zjk1MiwgMHgyMmMwZTkxZiwgMHg5MmY5MTkzOSwgMHgyMWJiNTFmZSwgMHg5NWY5NmZiZiwKKwkweGFlZmNmYTExLCAweDVkMmI5ZWYxLCAweDkyNWRmOWY0LCAweDg2MmJiODY3LCAweDhkZjk0MzdkLCAweGNhNTA2OTIzLAorCTB4ZWQ4ZDI4MjYsIDB4ZGY4Yzg5ZjcsIDB4MGQyZTMyMGIsIDB4ZjdiZjQyM2UsIDB4MjcwN2RhOWEsIDB4M2U3MGZhZDAsCisJMHhmMWYyMDgzZiwgMHhiYjQyNjczMiwgMHgzNTI3OGUzYSwgMHg5OTljNWVmMCwgMHg1Zjc0ZGZhMCwgMHhmZTkzZGU1NiwKKwkweGRmNTg3OTI4LCAweDVjMTlkYTlmLCAweDQ1ZWJiZjY3LCAweDUxZGExYTRmLCAweGMxZjg5ZmI1LCAweDlmZDc1OWNlLAorCTB4MjEyZmFiY2UsIDB4ODQ5ZjcwYWYsIDB4ZjdlOTAzZmQsIDB4NzlhNjk3ZmQsIDB4ODk2NjdmNjgsIDB4ZTNkMTE5ZmEsCisJMHhhMWZjNzQ0YiwgMHhlNDE4N2UzOCwgMHgzZjhjMjBlMSwgMHhlNmY4ZWJiYSwgMHhlMzc1NjMwMSwgMHg3NWNiMzI1YiwKKwkweDNhMjQ1YmUzLCAweGRmOTA4YmJlLCAweDhlYWU3ZWQ3LCAweDllMzA4OTRmLCAweGNmYjkzNzkwLCAweDY2NzM3YzcxLAorCTB4OWY3ZjhlMzksIDB4ZThhZWZkNDQsIDB4YzYzYWUzZjEsIDB4YmZmOTgxNmYsIDB4MDdmY2RkZGYsIDB4M2ZjZmQ3OGMsCisJMHg3ZjNmNDJiMywgMHhhM2ZmY2Q4OSwgMHhmOGVhZDNkYSwgMHgzZmZmMzg3MSwgMHhmY2Q5YTc3MywgMHhmY2Q4MmIzMywKKwkweDhlZGZhY2NkLCAweGY4MWQ5ZGYxLCAweGM3ZjhjMDhmLCAweDljZGYxOWJhLCAweGZmM2Y0MTNkLCAweGYzZjUyYTJiLAorCTB4NGZmMWIzMzcsIDB4Yzc1MDVlZDYsIDB4NWZmOGUzYjcsIDB4ZmNkODE3NzIsIDB4ZjFjNGE4YWYsIDB4MGRjN2IzMjUsCisJMHhjNDY1MjNmYywgMHhmOGU4MDRkNSwgMHg3YzU1MWZhNCwgMHg3NDJlYzBhOSwgMHgyNDg3MjgxYywgMHg2NDIxYTE1MiwKKwkweGUxMDAzNzFiLCAweGYxOGUyYmI4LCAweDk0NzE1N2RiLCAweGY5OWY1MGRmLCAweDUwMDkzOWYxLCAweGZkNDc5OWNkLAorCTB4NTdkNzk1NDYsIDB4NDA5N2M4ZWMsIDB4ZjUzYjYxZWYsIDB4YTBhODk2YjcsIDB4OTFlMjZlMmUsIDB4NzMwNmM5YmYsCisJMHhiNzg1MTA2MCwgMHg0M2Y3ODliNSwgMHhlYjg2ZjE3ZCwgMHhiZDVmYTAwMiwgMHgxNGEwYjI2NiwgMHgxODQ4MTNiZSwKKwkweGNiZmU3ZjllLCAweGU3YTI1YjYxLCAweGQ0OTcyYzY1LCAweDUxMjJjNzhiLCAweDA3ZTFkNmYyLCAweDM1MjE5MDE2LAorCTB4YzAyOWJlMTQsIDB4ZWIzYmEzMDQsIDB4MGUzZjUyOWYsIDB4YTk4ZmUzMWMsIDB4ZmZhODQzZGYsIDB4YzZjODk5ZjMsCisJMHhmN2Y1MGJmYiwgMHhmZWExMWVhMCwgMHhhNGNlM2ExZSwgMHhkZGEzYmYxNiwgMHhmMGEzNGUxZCwgMHg3ZmYwYWE5NywKKwkweGZkNzkzMDJhLCAweGUwMmUzNmY0LCAweGQ1ZjlmMmE3LCAweDdmYTA0NzhmLCAweDFiNmVlMGJkLCAweDFjMjc3YTQ1LAorCTB4NWQyNGZlNjUsIDB4MGZjYmNlOWQsIDB4NmRkZjZhNzQsIDB4MTBlMTZjMGUsIDB4NmJlMDMyYmYsIDB4MjEyNjhhM2EsCisJMHg1MDY3ZDY4YiwgMHhmZmJlNzc1YywgMHgwN2E5YmVjMSwgMHhiNzIxMjczOSwgMHhhNTRjNDUxMiwgMHg5YWJlZGZlZiwKKwkweGUzYTJlZmViLCAweGI5Y2M1MmNlLCAweDMyNTIxZDZjLCAweDI0ZDcyODRjLCAweDkwOTYzNGMzLCAweDg4NDcxYTViLAorCTB4NWQzMjA3YjQsIDB4NDQ4ZDNmMTEsIDB4NThhMzNiOGQsIDB4YWE1NTlmNWYsIDB4OGE4YWI3YWYsIDB4YjU3MGEyNjgsCisJMHg2NmM4ZTc0ZSwgMHgzOWVjZWZkYSwgMHg5YzZkNzZmYSwgMHg0NjQ0YTY4MSwgMHg1MmJjNzU2NywgMHhmYTc0OTM4YSwKKwkweGI5OTQzNjY4LCAweDc0ODVkOGYwLCAweGRmNjJlMzllLCAweDE3NzhmMDZhLCAweDdlOGMyNDg5LCAweDAxMGZiZmJjLAorCTB4ZjE5M2ZhYmEsIDB4MzYyZTc5YmQsIDB4NzNiYzIzNmYsIDB4NGE1MjhiNDQsIDB4OGNhNzM5ZTcsIDB4MWI3ZjAwMGYsCisJMHg5ZjY4ZmZlMSwgMHhkMGU1MzE0ZCwgMHgyMmEzZmQ3MiwgMHg4ZjlkNzUzMSwgMHgxZWI5ZmUxMSwgMHgyMjgyN2NlMywKKwkweGNiZjNmM2FjLCAweGRmMTljZjhkLCAweGZmZTk1MzFjLCAweDJkMDdmMDI5LCAweGEwZmUwMGJmLCAweGY5NTUxZmYwLAorCTB4MzJhZjUzYTMsIDB4M2Q5YWYwZmUsIDB4ZGExZjgwZDMsIDB4ZTkwNGYyMzcsIDB4YWRjYmYyYWEsIDB4YTkyY2JmMmEsCisJMHgyMTA1ZjNkNywgMHhiOGU4MTExZSwgMHhmYjk3MGU2YywgMHhjYzFmMTQ0MCwgMHg1OTYwZjk1NiwgMHg2ZTZmOWU4MywKKwkweDNkMzE3ZTI3LCAweDZlZTY1ZDA2LCAweDlhNmY3Y2Q4LCAweDlmN2U3NWRjLCAweGZmMzM3Y2E4LCAweDlmODhmZGMxLAorCTB4NzQ2NGYzYWUsIDB4ZDNhNTQzYmEsIDB4ZjZmYTM1ZWQsIDB4ZGViYTU1NWIsIDB4NGU3NWQyYWUsIDB4NTFhZmMzYzMsCisJMHhjOWU2NDFmNSwgMHhkZGU0MTEwMSwgMHg5ZThkNTNmYiwgMHgzZDNkMWQxMSwgMHg3MDhkM2QyYSwgMHhmM2QyYTFkZSwKKwkweDdhMzMxZjhlLCAweGE4OGRlMTFhLCAweDljMzQ4Y2Y0LCAweGFlODBjOTEzLCAweDViZTExYWYwLCAweGY5OTc3NzcwLAorCTB4Y2NhYjVjNjAsIDB4ZGU5ZTliMWYsIDB4NDc1NWZjYTYsIDB4MDU1NzllYTMsIDB4MzQ3NTU4NmYsIDB4NmM1NmNlNGEsCisJMHgyZmFiYWU5ZiwgMHhiZGQ1Y2MwZiwgMHg0Y2ExYWNiZiwgMHg3ZWE0YmVkNywgMHhkMTdkYWViOSwgMHhmNTc1M2JmYSwKKwkweDc1OGZmZjMyLCAweGJiYjgyZmVmLCAweDdiN2VkNzU2LCAweGY2YmFmZGNkLCAweGViMGZlNWY5LCAweDFiM2Q3M2VhLAorCTB4OWVjZmVmNzUsIDB4M2VkNzU5YjMsIDB4NWQxOWY0YWIsIDB4OWRlMjhjZmIsIDB4NjU3NGZhYmEsIDB4ZDM3ZGVlYjcsCisJMHgwNjZlYWJiZSwgMHgzZGViN2NmZSwgMHg3MTNkODA5ZSwgMHhjNjA1ZmRjMSwgMHg0NWI4MmYzMywgMHhkNDczYmMzNywKKwkweDFmNWYyMzI3LCAweGYyYzEwZGYzLCAweDdjOGRjZmI4LCAweDE2MzdkMjdmLCAweDY2YTZkNmNiLCAweDc0MTNhYzNiLAorCTB4MTI0YTVjNWQsIDB4Y2QzMjY5MDgsIDB4MGZkZjVkYWIsIDB4ZWI4MjY5ZDYsIDB4YTllNGM4NjksIDB4YjM3YWQzZjUsCisJMHgyODc5NDY0OSwgMHg3ODQ4OTA2OSwgMHgyYzFjMjEyNCwgMHhlZDFjMmEzNiwgMHhhNDdiNTQ3YywgMHhhYTA2ZjY4NywKKwkweGI2YmE5M2Y4LCAweDNmNjI0NDk3LCAweDc2NTIzZWY3LCAweDc3NjVmMDA1LCAweGNiZmQwM2ViLCAweDRkYTdiYjAwLAorCTB4ZWQ4ZGViYjUsIDB4OGQyOTFjOTUsIDB4MWFjODRlN2UsIDB4NjI2YWMzODQsIDB4YzRhNTQ3NzYsIDB4NTc3MmJmZTQsCisJMHg0MjcxMDE3YSwgMHhlNmI4M2MzZCwgMHgyOTA1ZTM3MiwgMHg5ZjAyYTc5MywgMHg3OGU0ZWI2NCwgMHgzYTM1YzM1OSwKKwkweDlhMjA0ZWZkLCAweDZkZjgwN2RjLCAweDhhZjllZWE0LCAweGJlZWFkN2VkLCAweDQ3OWZiNTNiLCAweDU3NDFhYmI4LAorCTB4YjE2NTgzOGMsIDB4ZTgxMzMzZjQsIDB4ZTY3MzcwZTEsIDB4YTcwMDYxOGMsIDB4NGRlYjE0NzIsIDB4M2MyZWQwN2QsCisJMHg3NTVlMmJlNSwgMHhhZmQwMTA3NCwgMHhiZWUzY2IxNCwgMHhmMzFlNTgzOSwgMHhlYTNjYjA3OSwgMHg1M2YyYzcyYiwKKwkweDExOTYwZDVmLCAweGZlNThkZGRmLCAweGYyYzdlN2M1LCAweDJjN2FkZjYzLCAweDYzZDVmMjNmLCAweDAxYWZhMWY5LAorCTB4MDE3ZGY3Y2IsIDB4YjZmYjBmMmMsIDB4MmY4ZWY5NjMsIDB4YWY4YjY1ODgsIDB4OWY1NmNiMDksIDB4NzcyNmE1ODIsCisJMHg3MWRkZjEzZCwgMHgwOTNlMWQ3NSwgMHhjZjgzMTdmYywgMHhlZDdmM2FhNCwgMHg3YzlkMDlmYSwgMHg4N2RmYzcxNiwKKwkweGI5ZTFhNjdjLCAweGYyYWNjMWE0LCAweDFmOGU4YTQzLCAweDQzOTdjMDEyLCAweGJkYTFlYjNlLCAweGIwZjk1NDQxLAorCTB4Yjc2M2VmYmIsIDB4NmJmY2I3N2IsIDB4MGZlYTZkZjgsIDB4N2U0ZWI3ZTQsIDB4NTNmMDMwY2EsIDB4MzRmYzRmNzYsCisJMHhhN2UyOGY4YywgMHhiMzE3MjZhOSwgMHhmYTdlNTQ3YiwgMHg4NjIzY2MxOSwgMHg4YzBmMzE1ZiwgMHhmNjUxM2U5MCwKKwkweDgyNmY5MjlhLCAweGJhYTU2Yzc1LCAweDYwMWY0MjBmLCAweDc2M2FhY2ZkLCAweDA1Yjc3ZDFkLCAweDEwYzBiYWVkLAorCTB4MGVjZTM3NTgsIDB4ZDg2MGRiZjksIDB4MjFmYjM4NDcsIDB4Zjc1NjdlMjUsIDB4NDlmMjMzZjMsIDB4ZDA1Nzc4ZjcsCisJMHhhMDFhNTliZiwgMHhkYWVhNGY0NCwgMHg3ODYzOGQ2ZSwgMHgzMTQ4OWFiNSwgMHhmZGRhZWJhMSwgMHgyZjcyOWU4MywKKwkweDgxNzU4YTFjLCAweDAxZjdjMjI0LCAweDhjNDc3NGY3LCAweDBjYWRhOTdlLCAweGFmMDllZGY4LCAweDcyYWY4ZTc1LAorCTB4OGY2M2JmYTAsIDB4Y2EwZjNkZmQsIDB4MmY2NjI2YTksIDB4NjhmMzM1YzcsIDB4OTNmMDkzYjcsIDB4Yzc2ZmMwNmUsCisJMHhhNzc2NjRiYSwgMHg3ZGJkYmM0MSwgMHhiYjQyZTQ5MCwgMHhlM2Q2NGM4MSwgMHhjM2EwNWZjZiwgMHg0NzE0ZmRkZiwKKwkweGQ2ZWViODJkLCAweDA2ZmUyMWE3LCAweGJkMzgzNTdlLCAweDQ5ZWJmODE3LCAweGNmODRmN2JmLCAweDdmZWYzMDg1LAorCTB4ZDI3YjNlMDEsIDB4NDVlOTNkOGYsIDB4MzQyZmM4YTIsIDB4ZWRiN2Y5ZDEsIDB4ODBmYjk2MWIsIDB4MWU1ZWUzMGMsCisJMHg5YWZlZGFkZiwgMHg3ZTVmOWUxMSwgMHg0YjZlM2U0NywgMHgyNWI4ZjhkMSwgMHhhNDFmODA5MywgMHhjNmQ5Y2JjYSwKKwkweDJlODFlMzJiLCAweDQwZjRmZDFkLCAweDlmNzdlZTRmLCAweDdlZmY4MjY0LCAweGRmZGY0YjNhLCAweGUyZmVjNjdkLAorCTB4YTcwZGMyMjUsIDB4ODkyNDNhZTMsIDB4OTJiZjUzYzQsIDB4ZDFlMzZjZjcsIDB4ZmM0NzcxOWYsIDB4NjdkODM3MTAsCisJMHhlMGM5ZDc3MywgMHhhZmZjOWUzNywgMHhlYjNkMGNiMCwgMHgwZjY3MGJlMywgMHgzZjA0ZTkzZCwgMHg1ZjFhNjU2YywKKwkweDFkMDYzNDczLCAweDk4MmFiMmI1LCAweGY2OGY2MzU1LCAweGY1ZjQ5YTU3LCAweDcxNWNmNWIzLCAweGM3MjVlNzEwLAorCTB4ZWIwNjFjY2YsIDB4YThlNmFiOGMsIDB4MGQzZjdhMDgsIDB4OTU5ZmFkNGIsIDB4NzM4ZTEyNjksIDB4M2M3NjdiNzIsCisJMHg0YzAyZmZmMywgMHg0MDQ4ZWM5ZiwgMHg2N2QyNzM3ZCwgMHhkOWZmZjdjMSwgMHg4ZmQ3NzRmMCwgMHg4ZDIxMGYwNiwKKwkweGU4MGIzM2U0LCAweGRkOTZkYTczLCAweGNhZGRmYmZkLCAweDgyNWU3MDgzLCAweDg5MDkyOWY4LCAweDY5YmY4MTVmLAorCTB4M2I3ZmZmYTUsIDB4YjAxNWZhMDAsIDB4MGRlYmY1YWUsIDB4NzBmMzdlZjIsIDB4Mzc0M2JlNzgsIDB4ZDY0ZWZkMWUsCisJMHhiYmUxOGNmNiwgMHgyMDRlZTVlZSwgMHhhN2JlMzRjNywgMHhiYWFiZmJmNCwgMHhiYjYyYmRiZiwgMHhjNzZmNDZiNSwKKwkweGRlZWFlODI2LCAweDlkMWFmNGE2LCAweDAwZmYwYjVkLCAweDEzODZiZGMzLCAweDU0YWIwOTYwLCAweGIwNGRiMGQ5LAorCTB4ZGE3ZTA3YWYsIDB4ZjA0OWMxMDMsIDB4NWVmNjM4NWYsIDB4NzkyMjI1OTUsIDB4MTY5NzE0NjQsIDB4NjM4NWQzZTAsCisJMHg2Nzk3ZmUzNSwgMHhhOWVhOTlmZiwgMHgwNDhhNmYxMywgMHhhMjVjOGNlNCwgMHhhZWE5ZTU1MCwgMHg4OTliZjIyMCwKKwkweDkxN2Q2ODk4LCAweGM2YzJmNmZhLCAweDZlYjAyNTE1LCAweDI2Zjk3ODlkLCAweDkzMTY0M2Y0LCAweGM3ZjgyNzUyLAorCTB4MGYzZWE0ZTUsIDB4ODlhN2I1ZTIsIDB4ZjNlNDE4YTksIDB4MzljNzc5MzQsIDB4YWQxZTRhMzIsIDB4MmU5ZDg0ODIsCisJMHhlM2I3YWY1YSwgMHhhYmFmN2ZhOSwgMHhkN2QwNmIyZiwgMHg1MjViOTI5NywgMHhlOTdlZGY2MCwgMHgzODA0OTEwNiwKKwkweGY2ZmExYmQwLCAweGY2MTc3OWFmLCAweGFjZDQ4Y2JiLCAweDU3ZmI3NTgzLCAweGExNmJiYzZhLCAweDU0MTkwODhiLAorCTB4ZjZmZDU1NmYsIDB4MGEzMmJjZjEsIDB4NzE2MDRiODcsIDB4N2ExZjZkMTYsIDB4N2ZmMzIyNzksIDB4MjQwNjY2MmEsCisJMHg1OWZmYmU4NSwgMHhhOTViYzhlMywgMHgwN2RmYTIwNiwgMHhiYzdlYzFkNiwgMHg2ZjcxM2E3ZiwgMHhmN2U5NWQyMywKKwkweGMyMzdlMTVkLCAweDVkMDNkOWFiLCAweDM4NTVjM2Y2LCAweDRhNzNiNzkyLCAweGNiMWU4NjIwLCAweDY3MjYzODE0LAorCTB4MTAyYmJlYWEsIDB4YzdiOGJhNWMsIDB4N2JmZDQzMzQsIDB4ZDEzMjUzZjMsIDB4ZGUxZWQzZjEsIDB4NjY4YzI3OTMsCisJMHhjMGZjMDNmYywgMHhlNzkyZWQwOSwgMHhkNjlmZjQ4NywgMHg3ZjgyZmZhNSwgMHg2OGZkZmY2YSwgMHhmZWJhNzlmZiwKKwkweGZiNTNmZGE3LCAweGZlMDVkODFmLCAweGFmZmFiMTc5LCAweDJmZjNlZGZhLCAweGE5M2VhOWZiLCAweDRlOTdmMTc4LAorCTB4MTNjOWQ3NDIsIDB4OWI4YTdkNDIsIDB4ZGI3MmI1ZDIsIDB4OTY4NTRlYmQsIDB4MTNiZjA1YzcsIDB4ODA0NGY1ZjgsCisJMHhlZjQ1OGUyZiwgMHgxNTRlMDU4NywgMHg0MWNlYzU0MiwgMHg0OWZlMGRkYywgMHhlY2Y5M2ZmYiwgMHhmMTFlMzBjZiwKKwkweDg1ZDEzNmQ1LCAweGU2ZWRiNGYxLCAweDYxY2E5OWIwLCAweDEyZjJlMzc1LCAweDIzZjU4MzkyLCAweDE5ZGY3ZWFjLAorCTB4N2E0ZGVhMWUsIDB4ZmE3OGFiZmUsIDB4MWY5MDI5OTcsIDB4OGQ0NTM5NDIsIDB4OWVkMTg1MmYsIDB4NzlmYWRlYWQsCisJMHg1ZTRmYWMxMSwgMHg2NDcyOGVkMiwgMHhiZmM2MGVmYywgMHhhZmZhODg5OCwgMHhkYWVmOGE0YywgMHgzOGM0ZTE0ZSwKKwkweDhiYzU1NzgxLCAweDY3NjdmMWI3LCAweDM3OTQyNzc4LCAweDgyZmEwMTdjLCAweGM3ZTgyMjdhLCAweDU3MmJiZjFiLAorCTB4ODIzNWQ0ZWQsIDB4OGQ5OGY5MjMsIDB4MTkwYzdiZmUsIDB4YzM1MTdhMDMsIDB4M2IzMDA5MGIsIDB4NWY5OWVlYjUsCisJMHg3MGExMWNlNywgMHhhNmZhZGE5ZCwgMHg5N2MyOGI5MywgMHg4MzY3NGYyNiwgMHg4ZjczZmU4YiwgMHg2ZGRlYmRkYywKKwkweDZkMTZmMmE1LCAweDk2ZWI2OTBmLCAweGQ3ZGFhNGRjLCAweDhhNTY1NjIxLCAweGYzZTQyNzYxLCAweGRkMTY2ZTU0LAorCTB4ZjJiOGZhN2UsIDB4N2E5ZjI3ZjksIDB4N2Y5OWUyMGMsIDB4ZDEwN2JiMzIsIDB4ZmYzYzU3ZmUsIDB4NjllM2ZiZGEsCisJMHgzMTRlYzU3ZCwgMHhjMzRkODRiOSwgMHhkMjc0YTVjZSwgMHhiZmZmNGJjNywgMHgxZTkzYjczYiwgMHg0ZDc5YmYxNSwKKwkweGU3YjE4NzkyLCAweGQyNzYyNGY3LCAweGZkY2VjNTY1LCAweDE1ZDYxOTEyLCAweGZiODM5MzFmLCAweDA2M2Q4OGE1LAorCTB4OGE0NzgyN2QsIDB4N2JhODVlYzAsIDB4ODgyNWJmZTYsIDB4YzdkODllMzMsIDB4MThhY2Q0OTEsIDB4MWFmY2RjZjgsCisJMHgyNzgwMDNkYSwgMHhhZjRhYTdhNCwgMHhkZTE5ZmEwZSwgMHg4MGJhNTJmNywgMHhjYmQyMzZkZSwgMHg1NTIyZGVmOCwKKwkweDkwYmY0MGJmLCAweGZiZjk0MTY3LCAweDA3OTAzZDg1LCAweDBkZDk5MWY1LCAweDYxN2YyODc4LCAweGYzZTYxMzk1LAorCTB4ZjhjMzUwODUsIDB4NTM3YmYxZmMsIDB4OGI5NTlmNDAsIDB4OTYxNzE0ZmUsIDB4MTNmOTc5ZWMsIDB4NWJmZTQyM2YsCisJMHg1MjhmZjZmNiwgMHg5NDQ0YmUzMCwgMHg0NWFlMTM3NCwgMHhlNzk4NzRmZSwgMHg3MGIzNGQ5MiwgMHgwNzg5NGI5ZSwKKwkweDcxZmNiMGY5LCAweGNiNDAzNGJlLCAweGRlMjkwMjBiLCAweGFjNGU0MzE5LCAweDJmOTM5MzIyLCAweGQyZTI1MGI2LAorCTB4ZmUwMTdlNzksIDB4NzdlZmU4MjQsIDB4YjQzNmMwZjgsIDB4YTAyNGVmYmIsIDB4Y2VhNDdlMGYsIDB4NTgwYzVhODUsCisJMHhmNDYxNjBiZiwgMHgyZWJhYWJmYSwgMHhhMzNlYjAxMCwgMHg3ZGViNzdmOSwgMHg5M2E3NDAyZCwgMHhkODU0OTVmZCwKKwkweGMxMTJmMTc3LCAweGZiODNlMmFmLCAweGJmY2JmNjk2LCAweGQxOTUyNTNkLCAweDllNDJjODg5LCAweGY3NWQxZGZhLAorCTB4Nzg3M2MzMjcsIDB4YWM1NDQ1YmYsIDB4YzhlZmJhMzksIDB4ZTM5ZDU5YjcsIDB4YTdjNzU2YWYsIDB4N2FjMWM3NzAsCisJMHg2YzRhNDVmZCwgMHhkNDRmMzVmYiwgMHhiNzVkMDBmNCwgMHg0YTJjZjhhMywgMHg2ZmZjOTlkZSwgMHhiYmM5OWZiZCwKKwkweGU5ODFmZjI2LCAweGZlN2VkMGM1LCAweGY4MjM5MzMwLCAweDBhNDNkNjBlLCAweGRiMTUzODU3LCAweDUwZTRjZmY3LAorCTB4M2EzZjUwM2YsIDB4MTU2ZjljOTYsIDB4YjdkNzM5NTUsIDB4YzI4NWY5MWIsIDB4NTFmMTcwMmYsIDB4MjRlMzAzN2MsCisJMHhkZjcwMWQyMiwgMHhmYTA2ZTk2NSwgMHhmNTFlOTQ3ZCwgMHhhZWNlYjhjMiwgMHhiYzcyNmFmZCwgMHg0NTViZjM0YywKKwkweDliMjAzZWJkLCAweGRlZTgxZTk4LCAweDllMjNmMmFlLCAweDUzYzBjNTJhLCAweDUyZmM4MThmLCAweDIwY2JmNTc5LAorCTB4Y2MyOTYyYmYsIDB4Y2QxZGNiZmYsIDB4NzJhM2NmZWYsIDB4OTM1MDY1ZmIsIDB4MzU1ZWJkNWIsIDB4YWVmOTZkY2EsCisJMHhkYzk2MjRkMSwgMHg5Mzc3Njk3ZSwgMHg5ZjRiNzI5OCwgMHg3YjViOTRjNywgMHhmZmY5ZjkwNCwgMHhmMGQ1NWViNCwKKwkweDc4ZjAwYzM4LCAweDM1MWUyNzRkLCAweDNlMWRkOTNkLCAweDkwZjI3YThkLCAweDhkNWUyMzIwLCAweDFkZmU5MjdhLAorCTB4Zjk1ZDc5MjYsIDB4OGQ0M2UzNTEsIDB4YWI5ZTJhZmYsIDB4NTFmNDAyYmEsIDB4N2M2YTlmMDcsIDB4MWFhN2MxZDgsCisJMHhlZjg5NzYxZiwgMHg2YzY4ZjBlYSwgMHgzNGZiMDBiZiwgMHg5NmY5YWUxNCwgMHg1MjhlZDM4ZCwgMHg0ZWQyZDI1NywKKwkweDdmMjZkZjcwLCAweGFhZmI4ZjI2LCAweGU1ODRmMzk2LCAweGYzMTExMDgxLCAweGQ1MzAzZjQzLCAweDc1M2IwNjhjLAorCTB4M2Q2ZmRmZTIsIDB4Nzc4NTE3N2QsIDB4MmM4YmYxM2UsIDB4NDQ1ZWEwMmYsIDB4YjdkMmZmYmIsIDB4ZjNhMDRlZGYsCisJMHg3OWUyYTc5OSwgMHg1NGZiNDUzZSwgMHgwMjM5OTc0YSwgMHg3MGEzOGUxNywgMHgzZjg4MTVjZSwgMHhiN2UyMTEzZSwKKwkweDBhMzRmOTFjLCAweGZhZTVmOThlLCAweDRjNGRmYzNhLCAweGE3YTdlY2U5LCAweDlmYWJiZmY3LCAweGI3Y2I3ZGYyLAorCTB4MWQzZjVkMjksIDB4NTBiYmM4NDQsIDB4MTBiYzM4OGEsIDB4ODFkMzU3Y2QsIDB4ZGU3ZjE0YWUsIDB4MDA2MDVjNTEsCisJMHg1MDg4YTllYSwgMHhiZDc3ZTUxYSwgMHhmM2ZiMzIyMCwgMHhhMzE5YzJlZCwgMHg5ZmM5YmVjMSwgMHhmMTllMmMzZCwKKwkweDdiZjQ2MGZiLCAweDNiM2VhYWJkLCAweDQxZTM5N2ViLCAweDY1MGQ5ZmNmLCAweGY2N2I3ZmEzLCAweGFjNDcyMmQwLAorCTB4OTU2NmQwYmMsIDB4Zjc1MzVlY2YsIDB4NWNlY2RhNWQsIDB4YmZmOTRmM2QsIDB4N2RhM2I0OGQsIDB4Yzk1YmI3ZTMsCisJMHg4MmZiMThiNiwgMHg1ZjRkNDUxYiwgMHg3ZmEzNzRhYiwgMHg4ZTdmMWQzYywgMHhlOTczODdjYSwgMHg1MWI5ZjFhNywKKwkweGY1Mzk5Yjc0LCAweDRhZWNlMDg0LCAweDM0ZmJmODA3LCAweGExZmIwZmNhLCAweDA2YmUwNWY4LCAweDIzNWIzNmZjLAorCTB4ZTIzMWE1NDUsIDB4ZjhhOWNmNzksIDB4NmJlMDc4OWIsIDB4MGMyZGNmY2MsIDB4Yzc4MDBiZTUsIDB4OGJhZjNiNDIsCisJMHhjOWE5M2M4MywgMHgxNDMyNTBlYiwgMHg2MDc4OWFlMCwgMHg1MzQ3Y2ZmOSwgMHhlMjFlZjYzZSwgMHhlYjhmOTBkZCwKKwkweDNjOTE5ZDBkLCAweDIzNjFmYzMxLCAweGIwN2ZhMTNlLCAweDJlODg4ZjMzLCAweDYyN2JkN2M0LCAweGViYzAxMmU5LAorCTB4MDRhY2IzN2IsIDB4OTVkZjM1ZjYsIDB4ZTBiMTU1ZGMsIDB4ZjViMzMzMmMsIDB4YmQyOTJlNjYsIDB4YmZmYjhhMzAsCisJMHhiM2Y5YmYwZiwgMHg4YTAyZTExZCwgMHg5Njc2YjM4ZiwgMHhmZjk1ZGRmNywgMHg3NTlmZGM5OCwgMHgwZTVhODE3MSwKKwkweGY1Njc5MGY4LCAweDcxMDAyZTY0LCAweGY5ZTIyMmI0LCAweGU1MGUwNGY5LCAweGZlYjQ1MjdkLCAweGZlOWE2ZmNhLAorCTB4NTRmNWU0M2MsIDB4ODk5NzM4ODcsIDB4MTEwYjU3YjYsIDB4ZGJkOGY4MDksIDB4ZmIwMDUzYjQsIDB4Mjg5OTI2ZmQsCisJMHg2YTEwOGYxOCwgMHg4YThjY2Q4NiwgMHgwNTExMWQ3YiwgMHhkZmYzNTdjNCwgMHhmODBlZGRlNiwgMHg0Y2QzMzczZCwKKwkweGU4NjUyZTAwLCAweDAxZDgyNzE5LCAweDUxMjM0MmU3LCAweGQ3OWJiYTBlLCAweDVhNjQ3YzFmLCAweDEwZmQwOGExLAorCTB4M2YyMzBmZTQsIDB4NzRkYjI1MTQsIDB4NDk5MzU5ZjUsIDB4ZGJhNTM3M2YsIDB4OTU2NDczNDQsIDB4ZWFmZDA2M2IsCisJMHhiZDY3YzYyNCwgMHhmZjk2NmZkNiwgMHgwNGRiZjRjZiwgMHg1ZjE4ZGZhYSwgMHhlZGZhZDE4YiwgMHg3ZGYxODkyNiwKKwkweDhkNGI3ZTk0LCAweGQ2NTZkZmE1LCAweDE3YzBhOWNhLCAweGE3NjZmNzJiLCAweGJlNTc1ZDAyLCAweDJjNGZhNGIxLAorCTB4OGZiYWY2ZmQsIDB4YTg2ZmY3ZjksIDB4ZmQ2ZGU2NzksIDB4MWUxYjdlYTgsIDB4NTFmYWRmYTUsIDB4YWUyMzE2ZmQsCisJMHhhNWVhNWEzYiwgMHhjZmZjYjM3ZSwgMHhhMGViZGZjOCwgMHhiN2NjNjJkZiwgMHhhNjlmYzU1OCwgMHhiNTQzOGFkZiwKKwkweGZiOGFkZmE4LCAweGE5N2NiYWYxLCAweGZhNGY1MjQ5LCAweGIzOTdlY2FkLCAweDZkYmEyZWIwLCAweGYwMDdmODMxLAorCTB4MGRlZGZhMGEsIDB4MzhjMWNmNTUsIDB4NWRmZWU3YTAsIDB4M2QyNzdkNzIsIDB4M2Q1YmQ1NTcsIDB4Njc4NDNmZjcsCisJMHhlY2FkY2Y0ZCwgMHhkMzNkYTFjZiwgMHg5ZTk5MGY5NSwgMHhmNGM1OTk1YiwgMHg0Y2JkY2FkYywgMHhjNDFjYWRjZiwKKwkweGJmNTE5Y2Y0LCAweDZmZDE3NDE1LCAweDIxZWFmYmVjLCAweDIzZjQ3YmY0LCAweDFiN2Q3ZWIzLCAweDIzOTkyZjZkLAorCTB4ZmRmNDJkYmEsIDB4OWYzYjU5MTIsIDB4NWEzYTMzNTEsIDB4ZDRiYmZkZGYsIDB4OWY3M2JlOGQsIDB4M2QyZTczYzEsCisJMHg4MjNmYmJlOSwgMHg3YTg0MWJiZSwgMHg5MWM4MjA2YywgMHgxYzZlM2Y5MSwgMHhkM2U1ZDM2OCwgMHhiMWY1ZjdiZCwKKwkweDc5MDQ1ZWU3LCAweGZlOGYwM2Y5LCAweGU2MjYwN2Y3LCAweGZhZmJlZDI3LCAweGJiOTA0OGQ4LCAweGFhMWUwMGY3LAorCTB4Zjk1MTllZWYsIDB4NDdlN2Q1YWYsIDB4Mjg3OTNhN2QsIDB4N2JhYWY3OTMsIDB4MWJhYWZlMTgsIDB4ZDVkZjM2MzksCisJMHg3NTg2NDA3YywgMHhkMTE3NmZlMCwgMHgyZjdkYmU4ZiwgMHg5YjY3YTNmMywgMHhjMGQ4ZmE1YiwgMHgyMjVmZmZjZiwKKwkweDJiZmQyNWNhLCAweDg3ZTI4YjI5LCAweDMwMmIxNzM5LCAweGNlMmJiOWVlLCAweGNjZmMwNWI5LCAweDgwYjEwMjM5LAorCTB4ZDBlMGJiMWQsIDB4N2VjMDI3OGQsIDB4M2Q3MTcwNWQsIDB4ZTAwYmJkZGEsIDB4YzhlOTIyNzksIDB4YTFkYjk4ZmIsCisJMHhlYmY2ZjUyNywgMHhhZjlkYTZiYywgMHhmOWFlOTA2NSwgMHg4Y2NkMTMxMCwgMHg3MTU3MTMyZSwgMHg1ZDU5Y2Q4MSwKKwkweDVkYTgyM2YzLCAweGM2MmRmOTg2LCAweGFiZGY4OTNjLCAweDQ3Y2Q5ZmYzLCAweDhmZTQ1ZjEwLCAweGU1ZjhjYzdjLAorCTB4NzI3ODhkZWYsIDB4YWQ1NGJjMzMsIDB4YWE3OGY1ZTYsIDB4ODllMjYyZTEsIDB4MmNhNGJhNTIsIDB4YjcyZjEzYTUsCisJMHg5NzU5MTRiZiwgMHgzOWNiZWQwMSwgMHhmMzhjYjdmNCwgMHg5YzY2ZjBkNiwgMHhjZDQ3ODZiZiwgMHhiZWEwNTliZiwKKwkweDI0NzQzZjNmLCAweDg2ODg5ZTY2LCAweDIyZjkyZWU3LCAweGY4MGRkZTFhLCAweDMzZDM0Yjc4LCAweDIwNjE5MGQ3LAorCTB4M2M5ODFmOTcsIDB4N2MwZDFmM2YsIDB4MTc4YTdiZjQsIDB4NzNhZGU3MGEsIDB4MmJjZWU5MDcsIDB4NjVlMmEzYmQsCisJMHg2MTQ4ZTdhYSwgMHgyNDc4MGM4YSwgMHhmMzY3YzAzNSwgMHg5NmJlNzdjYSwgMHhiMzc3ZTc0MiwgMHgyMTBiOTU5MiwKKwkweDkzN2Y1OWY1LCAweDY4OGYxMDNjLCAweDFlYTNiNmI2LCAweDk0NzBmOGQ0LCAweDU5ODVjOTk5LCAweGY1ZWYyYmQ1LAorCTB4N2FlMjE1NzUsIDB4NTBiOWM0ZDMsIDB4M2QwNmMyYmUsIDB4Nzk5OWU2YTcsIDB4ZDdmMjYxZWYsIDB4YmFmN2ZkY2MsCisJMHg2Nzg4NTE4YywgMHg5MTQ4MmU1OCwgMHg1ZDAxNWViNiwgMHg4NmE3M2ZlOCwgMHg0MGJjNWQxOCwgMHg2OWNmZmExNywKKwkweGUwMjBmZGE0LCAweDczOTkzYWJkLCAweGE2ZmRlMTg3LCAweDNmMDJmNzlkLCAweGNmYTU2ZWJkLCAweDM5Y2JjZTQxLAorCTB4MGU4NjE2ZjcsIDB4NjVjYTdhN2IsIDB4YzU4ODU4ZjksIDB4YzhjYzE4YzcsIDB4MTczZjVjZWIsIDB4NWQ4OTdiYzAsCisJMHhlNjg5OTNlZCwgMHg4ZTAwZjc5NiwgMHgzNjZlNTQ4OSwgMHhmZDAwYzNjMywgMHg0NmZlOGEyZiwgMHgwN2M4YzVmYiwKKwkweDc1MDNlNTNkLCAweDJhYjllZmM3LCAweDNhMDc1ZjllLCAweGVkZGYwMWQ4LCAweGRlNDNkODEyLCAweGI0N2Y1YjMwLAorCTB4MTcyMGFmNzYsIDB4M2EzNGRlMjIsIDB4NjVmNWQxMzQsIDB4Mjk4M2EzMTQsIDB4ZDY2ZjllMDYsIDB4YmQ5ZTJhZWEsCisJMHhlZjg0NGUyMSwgMHg2ZmZlYTA2ZiwgMHg3ZWJiMDcxMiwgMHhmOGQ0MWY1ZiwgMHhjNTc3MmNkZCwgMHhkMjE1YzQxMywKKwkweGU4MDZmNGEzLCAweGNkN2RlOGI3LCAweDExYjdhNmVhLCAweGE2YWUzNzVmLCAweDE1ZGM5OWU2LCAweDQwN2QxYTVmLAorCTB4NmYwZTVlMGYsIDB4ZDM0ZmNhZGQsIDB4NjE3OTk4OTEsIDB4NDY3ZTU1ZGYsIDB4YjNmMmY1OTksIDB4ZTZmZWRhY2YsCisJMHhlZGFiODg3MCwgMHg5MGFmNTBlNSwgMHg3ZTJlODI1MCwgMHhlY2NjZDMzMCwgMHgwN2FiNjY5NiwgMHgwZGZkYmNmOSwKKwkweGVlNDViZGQxLCAweGE4YTY3ZmFhLCAweDI1N2YwMTc0LCAweDY0ZTI3Y2ZhLCAweDRkZTgwODk4LCAweGE2N2M5NTk3LAorCTB4ZTMwMDdiY2QsIDB4ZTBmNWU4YjcsIDB4ZTkwN2FiNzUsIDB4MzNmZjVkZDcsIDB4ZWRmZWNjY2MsIDB4ZWFkMzFlY2UsCisJMHg5MDc4YzNkNywgMHhjN2ViMjhkNywgMHg1YTQ3YWUzMywgMHg3OWE3YTk1YywgMHhiZjcxZDQ3OSwgMHg3MWI0YmNlZiwKKwkweDg0YmVlYmJlLCAweDNjNjBiNDk3LCAweGQ4OWZkYjRlLCAweDg5NzY3YmMzLCAweDczMTYzZjYwLCAweDBhMTA3ZGJhLAorCTB4ZmU2ZmVlMzksIDB4NTliZmZhMTMsIDB4ZmY3ZGRkMWEsIDB4NTMwYTNmMTAsIDB4ZTNiZWJmM2MsIDB4OWY2MzhjNDksCisJMHgzNGM4ZjY3ZSwgMHhhZjE1OWY5MCwgMHhlNTQyYzRmMCwgMHg4Mzg3NzVhZiwgMHg4ODllNTk4NCwgMHg0NTQyNzYwNCwKKwkweDVkZmI4ZjIzLCAweGNkZTcwODQ0LCAweGE4MzNiMjg4LCAweGYxZjBjMzI3LCAweDVlZjUwM2EyLCAweGEwNzMyZWM1LAorCTB4ZjE1ZjdlODQsIDB4MTAzOTY3ZjIsIDB4YzM1ZDZiN2YsIDB4NTlmZjlmZjQsIDB4OTFmZDFmOTUsIDB4YTgwN2M4MWMsCisJMHhiY2ZlZDgxMCwgMHhhODhmM2U5MSwgMHhiNzZhNzlmYywgMHg2ZmU4MGU2ZCwgMHhjNzNiM2I2ZSwgMHgyZDljMTE1YiwKKwkweDBjZTJhMzlhLCAweDE2NDU5YmY3LCAweGMzNmRkZWU3LCAweDMzZmY2YzNjLCAweDAzMzFlNjFjLCAweDQ4ZTdkMTdjLAorCTB4NTNkMGZjYjUsIDB4NWNiZDMwY2YsIDB4ZTAwNjI0ZDEsIDB4ZjZjNTcwM2MsIDB4MTcxMGFkOWQsIDB4OGNkMGY4YWYsCisJMHhmYjc3YWJmNiwgMHhkM2VjMDkxOSwgMHhjZjNlMmZjOSwgMHhmMTM3MWJjZSwgMHg5NzY4NzhiYSwgMHgzZTc2ZTQzOCwKKwkweDU5Zjg4NjZjLCAweDAxZWExNTYzLCAweGY1ODIzZjVhLCAweGZiZjcxYWEwLCAweDE1YjI3MThlLCAweGQ5N2RlZTJmLAorCTB4ZTJiODUxNGYsIDB4ZjEzYjRmMzcsIDB4MzZjYjcwNWMsIDB4YjcyM2M2MjcsIDB4YTA1ZjdlNWYsIDB4NzgzMWRjNGIsCisJMHg5Yzc3MWFiZiwgMHhmNWMxMDVmYSwgMHhmMWRjNzYyMSwgMHgyMTI3Y2FhNCwgMHg0OGVlM2ViMywgMHgzYzYxMjdiNiwKKwkweDU3OTljMjkyLCAweGQxN2UyMzFhLCAweDVmY2ZmZmMxLCAweGNkZjYwMjc4LCAweGYyZmFlZDRlLCAweGYyYmI4MDA5LAorCTB4ZmM0ZjczOWIsIDB4MmE5M2UyOTQsIDB4ZGJhYzE3MjAsIDB4YzNkZjY3ZGUsIDB4YmJlZDA2N2QsIDB4ZDI3ZDU1ZjcsCisJMHhiOGQzY2NmYSwgMHgyN2ZhZDM0ZiwgMHg2YjdhMWJiMywgMHgyNjQ1ZmJkZCwgMHhlZWI0NTNlYywgMHhlMjA1M2FmYywKKwkweDRlZjdhYmI4LCAweGY1NmQ3ZjQxLCAweDQ5NTM5MzRiLCAweDJiNDA3ZjBjLCAweGJkMDM3ZjgxLCAweGQyMzIyN2Q4LAorCTB4MzliMWI5YWQsIDB4NGQzY2UwMTMsIDB4NzdlYjBlZTksIDB4NTgzOTNjNDcsIDB4YjJmNGUyYzUsIDB4MTFkZTQ3MWEsCisJMHg0YmFlNWY3YiwgMHhjNjcxYjhkYywgMHgzYWMxZDdjZCwgMHg2NWJhMjhkZSwgMHhmMWY4OGJkMiwgMHhlMWNmNGE2MSwKKwkweDBlZTNhMGJkLCAweDM4MjA5Zjc1LCAweGUzZjFiMmY1LCAweDRhMGZmMGQzLCAweDdkNjYwYmFmLCAweGUzNDJmZTFjLAorCTB4MGM3Y2ZmOTIsIDB4YmE5MzFhZGEsIDB4N2I4NzFmOGQsIDB4ZGY2ZDNmODEsIDB4MjE1OWJmNmYsIDB4NWRhMzkwMTYsCisJMHgxZWRjNjFjZiwgMHgwZjdkNDdlOCwgMHg4NWZjZmFkMiwgMHgxY2JiODg0YywgMHhjMGVmZGIxNywgMHg2NmJkZWJmYywKKwkweGQ4YWFhM2NjLCAweDUzY2EwMWZiLCAweGUzNmY0YmViLCAweGY3NTExYWJlLCAweGM3NDk1YWRmLCAweDUxMjdkYjFmLAorCTB4NTZlZjNhN2QsIDB4YWIzYjhiMDcsIDB4YjRiODgwNzQsIDB4NmFlN2M0ZWMsIDB4YjVmMTk5ZmMsIDB4MmVlZTk3MTYsCisJMHgzMmQ2M2QxZSwgMHhhYmJmZWQ4MCwgMHg1YjU1OTFmYiwgMHg0MzExMmNmZiwgMHgwYjFiOWZiYywgMHhkOTcyM2FmNCwKKwkweDBmMGQ1NDdkLCAweDk4YzNjMDJlLCAweGQ4OTZmZGU4LCAweGZkOGVmZmYxLCAweDgwZGQwMzE2LCAweDc1OGY2MDllLAorCTB4N2FkMGE3ZWMsIDB4MDdhYjg4M2YsIDB4ZWQ2MjBmYjgsIDB4NjY2ZWI1ZGYsIDB4NjJhZDM0ZmIsIDB4NmQ0NWJjZWMsCisJMHhjNWE0NjVmZiwgMHhlODEyZWZiMCwgMHg0ZjRiYmVkZCwgMHg3OGFlZjhmMywgMHhiNDI3MDZjYSwgMHg5ZDdjNTc0ZiwKKwkweGJmNWIxNGJhLCAweGQ0ZTE2YWRmLCAweGU3YmUwMzdiLCAweDY3MjU3ZWJlLCAweDA1OTgxYmNjLCAweDc4ZDU1OTdjLAorCTB4NGE3YjAyNDQsIDB4ZjliNGRmNWIsIDB4ZTdmZDUyOWUsIDB4NzhmMmNmNTMsIDB4YjA1ZDY0NGUsIDB4NTFiYmY1MTksCisJMHgxNjEzNTQ3ZiwgMHg1YmMyMzQzNywgMHhhYjdhNjE2ZSwgMHgxZmFkODliYSwgMHgwMjM5NzZhNywgMHhhOWNmZGE3NiwKKwkweGFmOTFiYjAzLCAweDkxMWM3N2FiLCAweDgzYmZiNGZjLCAweDQ1MjM3ZmRiLCAweDYwYWNmMmEyLCAweGMxNDQwOGZkLAorCTB4ZmQ4NWVhN2YsIDB4ODk3ZjZjMzksIDB4NzFjNmViZjksIDB4ZjFjNzUyZWUsIDB4ZTM4ZjYyODYsIDB4Mzc0NjcxZGQsCisJMHg1MDdmMGFjZSwgMHgyZTdlZTc2MiwgMHg0MTQ5ZGUzZiwgMHg5ZGZkMGQ5OSwgMHhlNDA5MTE2YywgMHhmMjBjOWZmZCwKKwkweGUzMTg4MWM1LCAweDVhODhiNWNmLCAweDBmYzk4YjNjLCAweDFjZjE0NzVkLCAweGJiOWQ4M2E2LCAweGI0MjUxM2U0LAorCTB4YzYzYjU3YmIsIDB4ZmRlNzA4N2UsIDB4MTkyNDNiNTcsIDB4YjU3NTE3ZTIsIDB4ZWViNTJmMmMsIDB4NDA2OWRjZGYsCisJMHg1Yjg0YmFlZiwgMHhkZWFlM2Y3MSwgMHhiMjU3NWY4MCwgMHgxYWUyMWYyYiwgMHg1MWQyYzJhZSwgMHhiZDQ2YWVjMCwKKwkweDc0OThhMDkzLCAweDE0NzZhZmYwLCAweGNlMTRjYWE3LCAweDQ2OWRhYWI1LCAweDBiOWUzNzA0LCAweGM1NDU5ZGU1LAorCTB4NjVkZTFmMzAsIDB4ZWM2MzU5NzIsIDB4NTJmNjg4M2IsIDB4OGJjMjg5ZTIsIDB4ZTM5ZmQyZTgsIDB4Y2E0Njk3MjQsCisJMHg3Zjk2OGZkMCwgMHgzOTY5Njk1MywgMHgwNTJlOGQ4OCwgMHhiMTg1OGM1MywgMHg5OWZjZGRlYywgMHhkYjc3OWMyZSwKKwkweDUwN2ZkNTBlLCAweDYxNGFlYzg4LCAweDhlYjA2NDc5LCAweGNmOGFlZGI0LCAweDQzZjFjMzIxLCAweGI0N2U1MGEyLAorCTB4MWRiOWNmYTksIDB4NWU4M2Y3ZmIsIDB4NGEyNGViNWEsIDB4OGEzMzk1MDIsIDB4ODZjZjk5NTUsIDB4MmMyM2FjZjMsCisJMHhlOWYwMzY1YywgMHg4NTdhZmY5OSwgMHhmMTBkNmJmNiwgMHhkOWI0NTdlOCwgMHgyNTUyN2NiNSwgMHg0NmNjZTQwMSwKKwkweDQxYmNjNDFlLCAweDkzNmZlNTYwLCAweGU2MzRlMTNhLCAweDI1NzgxMjEzLCAweDI5OGQzZWVhLCAweGExZmQxZGJjLAorCTB4N2M1ODliYjMsIDB4ZmY1NzI3ODAsIDB4Y2Y4YjAyN2EsIDB4YWZjMDAwOTEsIDB4NTQyYjJmYWUsIDB4ZTIxMmNmMzgsCisJMHgzYmZiYzMwZSwgMHg1ODBmMTgxYywgMHg5NDIyYzZmNiwgMHgzNDQzYTAxZiwgMHhmNThhOTJiZSwgMHhhYzFiNWVlNywKKwkweDY3ZjAxY2NlLCAweGJmNTU1YTM2LCAweGMwYjRhZmM2LCAweDZhYzU5YjM5LCAweGY1NGE3ZGJmLCAweDE4YTk2MmU3LAorCTB4OTc1ZTQxZmEsIDB4ZTVmYWYyYTgsIDB4OTg0M2EyZDIsIDB4OGE1OWU2OGYsIDB4OGU3NTNlN2EsIDB4MzFhY2RjZmUsCisJMHhhYTIwNGI0ZiwgMHhmZTYwMWM5ZiwgMHhhZGJjOTc3MywgMHhiNzA4Y2RhNiwgMHhjNTZiN2YzMSwgMHhjMzVkN2Q3NiwKKwkweDM3YTAyN2UzLCAweDEyNzQwMmFmLCAweDgwZTJlNWZiLCAweDMyMzdlMjNkLCAweDQ2MTNkN2Y4LCAweDlhZmM3NzdkLAorCTB4YjVmOGY0ZDMsIDB4ZGFmYzdhY2EsIDB4YTdmMTE4ODYsIDB4YWRjM2FmYzcsIDB4OTdlNjk3YzcsIDB4ZjhkZjg3NzYsCisJMHhjODczZmFiMSwgMHg4YWZjMmFmZiwgMHg1NDhlZDU1NiwgMHg0YWZmNGFmMSwgMHg2NTRjMjkyZCwgMHg0MmU5ZGMwMywKKwkweDI4YzJlNTE4LCAweDMwZjYxOTQ3LCAweDlmZWVmZjA3LCAweGFmYzVhODFjLCAweGVmZDQwZWRjLCAweGI4N2NlYTY5LAorCTB4MWIzYmVjYzUsIDB4ZjAwZjExYzgsIDB4ZTA4ZTUxYmEsIDB4NzllODIwMjQsIDB4NzVkOGY5MWIsIDB4ZmFjNDBhY2MsCisJMHg0ZDdiN2M4YywgMHgzNTVjZjRmNywgMHgwYjIzZDVmZCwgMHg4MDliNTdlOSwgMHgzZjIzODc3ZiwgMHg4OWJlZjNiMCwKKwkweDA1OTc1MDI0LCAweGMxNzZlYTcyLCAweDU5ZjQxZGZhLCAweGI4NDU4YmRjLCAweDE3Yjg4NWY3LCAweDVlZmI4MjBmLAorCTB4YTQzZTU4NWMsIDB4MGRiNGFiZTYsIDB4MzA2ZTc4MjUsIDB4MDI5ZjNlMTgsIDB4ZGNhMWU5ZmEsIDB4ZjdhMDY5ZjYsCisJMHgyOTQ4NGJiYywgMHhjNTFmYzFlOCwgMHgwZjAzZjNiMSwgMHgzOGJmNjVhOCwgMHg4NWFiZDU0OSwgMHhlZjgyNGM2ZiwKKwkweGU3MGNhMjQzLCAweGRiNDJkYmQ1LCAweGRlYTA4MzJjLCAweDJhM2RlM2M0LCAweGFiZmE4NGRlLCAweDkwZDZmYzYwLAorCTB4NmM1YWUwYzgsIDB4Mzg4MjBjMDksIDB4YzcxMTVlYzgsIDB4MDEzYzVkNmQsIDB4ZDg3NjY1Y2YsIDB4MmY5NjIxNmYsCisJMHhjY2ZhMTZkMiwgMHg5ZjRhMjhiOSwgMHg3YTNkMzZiNywgMHgzNmI5YzQxNSwgMHhhOWU3NjI5YSwgMHg3ZTlhYjE0YywKKwkweGVjMWJmYWQ4LCAweGM1MzdiNzkyLCAweDFlZWFmMmNhLCAweDUxZTc0MDFhLCAweGJhYWNmZDNkLCAweGI4NzkzMzBlLAorCTB4YWJmM2E1NTYsIDB4ZjljNDZmNGIsIDB4NjRlMjE0YmYsIDB4Zjg4YTQ3NTgsIDB4NDYxYTZlZGIsIDB4M2RlZTM5ZTcsCisJMHhiMGNmOGQ0MSwgMHhmNTI4ZTU3OCwgMHgyZmQwM2FmZCwgMHhkZmViNWZhOCwgMHhkZGMzZTllNSwgMHhlNzAyMDU0NywKKwkweDJjZDU0NmY0LCAweDE1ZWI3ZjQ1LCAweGNhNzNlNTI3LCAweDcwNGE3OTE3LCAweDYxNmRmMDI0LCAweGNkZWYwMTI4LAorCTB4ZDA0YzdlZjEsIDB4MjJkZDFmYWUsIDB4NGYzM2Y4ZTgsIDB4MjJmMzU3NWQsIDB4NDRjMDVlNTQsIDB4M2VkZjUwZjksCisJMHhlYzE4MjIyZSwgMHhmYzBmMDBhMCwgMHhmZDcxZWQ3NSwgMHhkNTU2ODVmMywgMHgxNDkyNzJlZSwgMHg5NzBkZjNlMCwKKwkweDVlZjIwZTc4LCAweDdiODlkYWRiLCAweDZkYmI4NTBkLCAweGEzODQ1ZjcxLCAweGZhOWMzY2VkLCAweGJlMjVlNWE1LAorCTB4YmY3YWQ2MzgsIDB4NjJmOGNhY2EsIDB4OWQ3MDQ0YTMsIDB4OGVkNGI4ZDksIDB4NGIwM2M1ZjEsIDB4ZjU4MGFlMmIsCisJMHg3YjFmYWJmZCwgMHg4ZTc1ODhhZSwgMHhjNTNmNGEzYywgMHgyNTJjN2NiMywgMHhmZTA1OGM5ZSwgMHhiYzMxY2I1ZSwKKwkweGM2OTdhN2Q3LCAweGY4ZDdmN2M4LCAweDhkNmZlMzU5LCAweGM2OTdkM2FmLCAweDM1ZTU2Mjc5LCAweDc2NjU2MzdlLAorCTB4MjFkMmMxNWEsIDB4ZGFmZTA0OWMsIDB4ZTM4ZjBlM2UsIDB4NWNmMWFlYjYsIDB4OWY4ZGRjZjYsIDB4NzgwMGM5YWMsCisJMHhkMGU3NGRiYywgMHgzODg0YjZlZSwgMHhiMWJkOTYyNSwgMHhmZWM0ZWFjMSwgMHg2YmY4ZDc1YiwgMHgyZWVmOGYyMSwKKwkweDI3YTA5YzJhLCAweDAzNzdlZmJiLCAweDgxM2Y1YmZhLCAweDY3N2MyY2EwLCAweDczYzMyZmE5LCAweDY0MmM0YmJjLAorCTB4ODViYmM0MGIsIDB4MWM1YmY0ZmEsIDB4NmY5M2ZmYzAsIDB4N2RlMTQ3NTgsIDB4ZWI4NGQ0YWMsIDB4OGRkMTQ2ZWIsCisJMHgwOGFiZmJmMCwgMHgxYTgzZjhjMSwgMHg4ZDM3ZWRjZiwgMHhjZjNlOGU2YywgMHhmZjM1ODRmYywgMHhjN2E1MmI1OSwKKwkweGQyMTc1NmIzLCAweGU2ZTNjOTI1LCAweDNmZjc3ZTAwLCAweGYyMDlkYmZlLCAweDhjZDE3NmRkLCAweGZhYWJlYzc0LAorCTB4YWY3N2RhNDMsIDB4MzZkZDk5NTksIDB4MGFkOTRlMzMsIDB4NjRmMjkzZGYsIDB4YzdiNzEzOTQsIDB4MTIzYzVlZTksCisJMHg3OGEwNGRlZSwgMHg0ZWEzOTI4ZiwgMHhiYmYxZjlmYSwgMHg3MWQ1MGY0NCwgMHhiYjQ0OWUxNCwgMHgyODkyZjkwOSwKKwkweGM1ZDJlYzhhLCAweDQ3MjhmZDI5LCAweDMwOTA1YzlhLCAweDRkOGYyMDQ3LCAweDg4NWNhYmQzLCAweDFjYTgzYjBiLAorCTB4YzNkOGIyOGMsIDB4OTYyNDc3ZTAsIDB4MTA1Mzc5ZDMsIDB4ZmFjMmM0YWMsIDB4NzU0ZTExNmIsIDB4M2NjNmNiOWMsCisJMHg3OTk3Y2E3OSwgMHg2MDhhMzg3MCwgMHg3MTEyMTQ0OCwgMHhkZjRkN2ZhMSwgMHg2ZDdhN2E2YSwgMHg1OTc5NDEwMiwKKwkweGE4MTBiMGZiLCAweDEyNmNmZGEzLCAweGFmODg1NjIyLCAweDAxNzIyOTY0LCAweDBhMjUxYWE0LCAweGVmMTc5ZTMyLAorCTB4ZmYzMDRlNWYsIDB4NzhmZDk2ZDIsIDB4NDJkZDg3NDIsIDB4MzdjNDdlODUsIDB4ZmI1ODgyZmMsIDB4ODY5YzdjNzksCisJMHg0MDFmY2YyZiwgMHg2YTFjZTQ2ZiwgMHg4ZGU2MDAzZiwgMHg3M2M2Y2FkYiwgMHgzYjQxNjZiZiwgMHhhODdmNDNiZCwKKwkweGJhOTE1OGY2LCAweGRjZmI4ZWZlLCAweGMyMDlmMmM0LCAweDNlZjQ0ODkzLCAweDY4N2Y1MTliLCAweGViYjhjOWY2LAorCTB4YmY2MDZiMjIsIDB4MTg5ZmRjNjgsIDB4MDU1YmI0OWMsIDB4Y2VhZDFiYmUsIDB4YTg5ZjQzYjcsIDB4MTA5OGU2ZWIsCisJMHhmYmY0MjdkNSwgMHg2NmM4ZDBkYywgMHhmNzJiMDdiOCwgMHg1ZGM3MjY2MywgMHgzZjIxYzlmNCwgMHhiZWZiZjgwZiwKKwkweDE3YzhjNDdhLCAweDJlNTRjMjIzLCAweDMyYTFmNmQ1LCAweGVhZTFhN2RjLCAweDE5ZmI0M2E4LCAweDllNDlkZTgzLAorCTB4ZWQxNTJhM2UsIDB4OGNkZjk1NWMsIDB4ZGJlNGQ2NzgsIDB4NzdiOWY3MjgsIDB4MGNjZDliYmIsIDB4MWE0N2U2MmUsCisJMHgyNzVjMjFjNiwgMHhlODM2NzIxYywgMHhiMDc4YjdhNSwgMHgyOWYyZGJmNywgMHhiZjVjMjgxZSwgMHhmNGEzZjkwMiwKKwkweGI4MWYzODRiLCAweDIxYmZlNjAxLCAweGU0MTViZDc0LCAweDI3YWY3YmU0LCAweDU0NzVmYTIxLCAweGJjZDNmNjllLAorCTB4MGZhZTNlMjcsIDB4YzA0ZTI3YWUsIDB4ZjNmZWY1NDMsIDB4NDYxMjdhZWEsIDB4MDFjODc3N2EsIDB4NzhlODkzOTUsCisJMHg0NmZmYzY4OSwgMHhhM2U0ZDc3ZSwgMHhjOGRlMmUwZSwgMHgwNDc2NzNjNiwgMHgwYjllNTlkNiwgMHg2NjMwNjVlMiwKKwkweDc4MDVjOWIyLCAweDNhZWRlY2Q1LCAweGZlMjViZWQ1LCAweDU2ZmZiNDc0LCAweDFlYmE4OGJiLCAweDRmODAwNjY1LAorCTB4NWVjZDQ0ZWEsIDB4ZTNhMjViNzcsIDB4MDUxZGFiNTMsIDB4NGZkYjk3YTksIDB4ZmVhNDVlZjUsIDB4MWIzOWQ0NTksCisJMHhmZThlZDBhZiwgMHg4NGEyZjc5YiwgMHhmZTM3YmZjZiwgMHg3OTE0Mjg5YSwgMHg4OThkZmMzYSwgMHg3ZjE1ZGQxYiwKKwkweGIwODQ3MWYxLCAweDlmZmVjMmZiLCAweDIzMGNkZjlmLCAweDc3MjdkYzdmLCAweGUyNWFlZmNlLCAweGY1NDIyNTc5LAorCTB4ZjVhYWRlNDcsIDB4M2YxOTM2NzUsIDB4ZDc5NjljMzksIDB4ZmI2ODJmNTUsIDB4MDFlOWRkOWYsIDB4YTk4ZmJjYTMsCisJMHg3MGM2NmZhYywgMHhlZWYyMGY0YiwgMHgyNWY4YTliNSwgMHhiM2U4MDY2NCwgMHhiNzZhNjFmMSwgMHhmZjk1NzU2NCwKKwkweGJjZmNlYWYzLCAweGI2Zjc4NjM2LCAweDgzMDdkYjViLCAweDNkZTdhZDNjLCAweDJmNjg3MTM1LCAweGIwMjY0YzQ2LAorCTB4YjQxMzc2MmIsIDB4OGZmYmRjN2IsIDB4NWJkZTUxM2EsIDB4NGZlYjc0OTIsIDB4OGZjMGJiNTcsIDB4YTdkOWE5ZjIsCisJMHg3YzZhNWQ5YSwgMHg1NTJlYzNhZiwgMHgzZTJkMWJkNywgMHg3OTUxMzVjYSwgMHgxOTNjZjBhMSwgMHgxYzAzZjFlNywKKwkweGJmZTYyZTc1LCAweGQwNTcwMWMyLCAweDNkNTg0ZjYzLCAweDM2NWZjMDc1LCAweGQ4Mzg5NzNhLCAweGNlMTIxOTJmLAorCTB4YjA5NmYxNjIsIDB4OTNiYjNlNGUsIDB4ZGU0MTliNDcsIDB4YjAzZjE0ODIsIDB4ZmFlOWY5ZmUsIDB4MWVlYjg4MzcsCisJMHgwOTcxYjE5ZSwgMHg4NWFhNWUwYywgMHg5N2U5YmVjMCwgMHhkNTYwZDg0NywgMHhmYmM3ZjMwNCwgMHg2YmZiYjBlNSwKKwkweGZiYjJlNWZhLCAweDMxYzczNzMyLCAweGExOGI2NWZiLCAweGZhNWFjMjdjLCAweDE0NGJjYzE4LCAweGZiOWNkZjg4LAorCTB4NTAwNmUxZmQsIDB4NjRmOTBlMjEsIDB4ZjgwMGQyOWMsIDB4MzgyYjE0YjAsIDB4NzExNzBjOGYsIDB4MTlkZTk0NzMsCisJMHhiYzgzOTA0MiwgMHg5OTRhYzQ4OSwgMHhkMjQ3ZjE2MywgMHhmYjQ4ZmZiOSwgMHhmMzkxMjhjYiwgMHgwNjMyM2Y4MSwKKwkweDlhMzczYzEyLCAweDllN2Q4YTExLCAweGYxMzg5NWU4LCAweDhkZWJkOTg3LCAweGJjYzFjZTVkLCAweDQxY2ZjYWEyLAorCTB4YTkzN2NlODksIDB4ZTk4MzlkODQsIDB4ZjA1MGZiODgsIDB4OGVhZGJmMDEsIDB4YWRiMjcxNWIsIDB4YWIzZWQ4MTcsCisJMHhkOWUxODEzZiwgMHhjMTAxYmZlOCwgMHg1YTgyNWU2MCwgMHg4MjIyNTdiZiwgMHgyYmZkMTEzNSwgMHhkZmFmZjAzZiwKKwkweGNhZmY0MTY0LCAweGQwNDFkYzQ2LCAweGIxYzQxZmI3LCAweGNlM2FlY2Y4LCAweGJmZWExZWJkLCAweDcwMmRkYTEwLAorCTB4MzcyNjhmY2YsIDB4MzQzYzNjOWEsIDB4NDBiNzE2ZTEsIDB4Nzc1ZTc1NWYsIDB4NWY3YzA3MzYsIDB4MDBlZjE3MmEsCisJMHg5YzI3NWI5ZSwgMHg2NzE2YmMxZCwgMHhmOGM5OWVkMiwgMHhmOTc1ZTE0ZSwgMHg5YWZkMWFmNiwgMHhhY2ZkMWQ0NCwKKwkweGQ2ODk1NzEwLCAweDA4NjkwZWYzLCAweDVjYWRlZGQ4LCAweGFhZmMxYjljLCAweDgzMWNlNWQ2LCAweGU3YThiMzk3LAorCTB4M2NkZDA0MTEsIDB4MWZjYzZjZDMsIDB4ZTdmNTUzNjksIDB4OTBiMmUzZGYsIDB4ODRmNWI1MWYsIDB4YzYzZDZmY2UsCisJMHhlOGYzMGQ3ZiwgMHgzODZhODczOCwgMHg5NzNjNmE3NywgMHgxMWRkOTY5YSwgMHg3Y2M3NGEwNywgMHhlZTA5NTJkYywKKwkweDQzNjcyMzMyLCAweGJjZTNiNDM2LCAweDEyNGNmNmNlLCAweDZhNjRiY2UzLCAweDVjZjMxYWM0LCAweGJjNTI1NmIwLAorCTB4NGI3ODBkN2QsIDB4NDAxMjZiMTUsIDB4Y2VkZWE3MWYsIDB4MWYxMTg4ZjQsIDB4YzQ3ZjljNmQsIDB4ZmI0N2Q4NDEsCisJMHgxZjMzMTg4MywgMHhkMmQzMmI0NSwgMHg0YzU4NGE2ZSwgMHhiZjRiNGZkZiwgMHg3OWVkNGIwMSwgMHgxOTg4NWQ4MywKKwkweDcxYjI0YzU3LCAweDY0ZGNlYzNmLCAweGZjMThiMTAzLCAweGVkMWIyNGNkLCAweDlkZTdiNGVmLCAweGZmMTQxNWY3LAorCTB4MzdiYjhjNzYsIDB4MzdiYzMxYzQsIDB4MzdiYzMxYzQsIDB4ZTUzZTFhNDgsIDB4Y2ViZjkwNzgsIDB4Zjc5NzViYmEsCisJMHg0OTY3YzFiNCwgMHhkMTBmMjAxMCwgMHhiOWYyOGU5ZiwgMHhkZGU4YzVjNCwgMHhmNjgyYmVmOSwgMHhkY2EyMWY0ZCwKKwkweGM0OTQxNzMwLCAweDQzNmM5MTA2LCAweDIxZjE2N2JlLCAweGFmYzg3Y2VkLCAweDQwMjRjZjdjLCAweDk2ZGI5NGJlLAorCTB4MTZmYmZhYTUsIDB4MDYwNGRmNDYsIDB4NTMwZGY5ZjcsIDB4YjIxNGRjNzAsIDB4ZTI5ODNhYzYsIDB4YzlhOTY5NzksCisJMHhkM2EzNzEwZCwgMHhjMjcyM2YwYiwgMHgxOTg1ZTk5MSwgMHgwZjIwNzkyZCwgMHgxYjhmNzlhNywgMHg5ODRhOTdlNiwKKwkweDhlNmNiODVmLCAweDJlZDMwODE0LCAweGMyYTgxYjkzLCAweDAxYmE3NDYyLCAweDRjY2IzYmY3LCAweGM3YWVmMzMxLAorCTB4ZTlmZWQ4ZDgsIDB4OTYxNzM4ZDEsIDB4OTBkMzY5NjksIDB4OTJmNTlkNGUsIDB4OGM0YmYwMDQsIDB4MzVlNTRhN2MsCisJMHhjZWE4ZjE3ZCwgMHg2Zjk0Y2M3MywgMHg3OTBjNWIxNCwgMHgxMzQ5MTM2YiwgMHgxODViZWI4NywgMHhiMWFjOTVmMSwKKwkweDM1YjdhYWIzLCAweDM5MDY0OTc5LCAweDUyYWI3ZDg0LCAweDNhMzU0N2FhLCAweDRkNWY1MDBmLCAweGZlMjhiOGMxLAorCTB4YmZkN2ExNzEsIDB4NzljMzdmMDYsIDB4NDVlYTAxNWQsIDB4MTBjODhlNGQsIDB4YTBhZGU3YTYsIDB4YTFlMmEzNzcsCisJMHhlODNmN2I2ZCwgMHg5ZjhlZmIwZiwgMHgwNzM5ZGJmYywgMHg1NWZkM2JlYywgMHg5ZTgwNzc2OCwgMHhiYmNmN2UzZCwKKwkweGY0YzczODBlLCAweDJlMmMzZGM5LCAweDRmYzE4NzcyLCAweGZhNjM2NDViLCAweDc0YWQ4ZjdmLCAweDgxNzdlMDFlLAorCTB4OWU3OTFmZWYsIDB4NzcyNTdlMjgsIDB4ZTU5M2ZkYjMsIDB4ZGU3MGRlMDEsIDB4NTA2ZjdmNWQsIDB4NzBjOTMwNTUsCisJMHhmMTFmOTA4ZiwgMHgxZmRlYTU1YSwgMHg0NmM3YTQ2NiwgMHgyY2I3OGIxYiwgMHhjYTU5YjFkZiwgMHg0ZjdjNjE5MCwKKwkweDVjN2Y4YzI1LCAweDM3OGY0M2Y1LCAweGQxZGZkMDNhLCAweDYzYjg1OWUwLCAweGQ5YmUwNDg0LCAweDc1NjY0MzVmLAorCTB4NjQ0NWJkZmYsIDB4MDI1Mjg3ZWIsIDB4MTUxZTY3ZmIsIDB4MGYzODQ2NmYsIDB4MmY2YWY3YWEsIDB4OGZjYjI1ZjksCisJMHhkZDYzYTMyOSwgMHgyN2IwZjU0ZCwgMHgxODdiY2VjNCwgMHgxM2U0YjFlNywgMHgxMjk1MjhiOSwgMHgxY2ZkYzk2ZiwKKwkweGZlZjBkZGZhLCAweGYzM2Q3NDNkLCAweGVlMWY3ZGRjLCAweGQ5ZTcxOWIzLCAweDA1MWY1ZWY1LCAweDJhNjViM2ZkLAorCTB4NmRlNzhkYmQsIDB4M2VkODg1OTcsIDB4NDFlMjYyZjgsIDB4ZmU3MmVjZjksIDB4YzVjZWM0MzYsIDB4Njc4ZGUzMTgsCisJMHgwMGRiNjUwZiwgMHhhOWIwYmYwZiwgMHgzMjNjYzRmMSwgMHhlZjZkY2UwNiwgMHhmZTIwMzQzYSwgMHg5ZjU2Zjc3MiwKKwkweDgyOGJlZjUyLCAweDNjYTFiYjdiLCAweGNlNTgyM2VlLCAweGUyOTAyMzAzLCAweGY2ZjQzMmJmLCAweGQ1NWZjMDVkLAorCTB4M2VmMTNiNGQsIDB4OGZhYWVmYjQsIDB4OWMyNzQyYWEsIDB4ZTlhZDRiOTAsIDB4NmU4NzZhMjUsIDB4OGIyMGY5MDMsCisJMHg1YTdkOWQzOSwgMHhjNDljZjliZCwgMHg5Zjg2NmFmYywgMHhiN2U3ZDRkYiwgMHgyMDcyM2UwMSwgMHhkOWZlNWJkZiwKKwkweGRiZWY0YTA0LCAweGQxZjNjNTJhLCAweDZmM2RhNWY3LCAweGY3YzNlZmQzLCAweDNjZGFiZTc2LCAweGVkNmI3OWI1LAorCTB4OWM1ZTZhNTUsIDB4MGU0ZDNiZjEsIDB4Yjk3Y2E5ZTYsIDB4NzVmNGViNzgsIDB4ZWE4YTI5N2QsIDB4YTk5MTdlZjYsCisJMHhmM2MzOTM5ZSwgMHgyZDlmMWE0MiwgMHhlOTQ1YTUyMywgMHhhMzQ5ZjgzMSwgMHg4NGRmMDc2ZiwgMHhkM2YzOGU3ZSwKKwkweGJlYjhiYWU4LCAweDNmODNjNTRjLCAweDRjNGZkZDRkLCAweDkxOTU3ODgzLCAweGE3M2E3YThmLCAweDMyNDYyYWRkLAorCTB4N2M4ZGJlNDEsIDB4N2RjZGRhZDIsIDB4YjMxYjIxMjgsIDB4NGFjYjE2MmYsIDB4YThjZmM0MTEsIDB4MTVjZWJiZjksCisJMHgxNzFjZGY2NSwgMHgxNGZlMGZlYSwgMHhlMzJiNmVlNCwgMHgwODNkMGVmYiwgMHhmN2U4MzE0ZSwgMHhmZjVjNDUzNywKKwkweDU0ZTQzYTU3LCAweGU5MGZmZmI4LCAweDEzZjIwZTM3LCAweDRmNzg3ZWNjLCAweDRmOThlNzFiLCAweDgwOGEwNjUxLAorCTB4NGYyYzYyZmYsIDB4ODE5NTRhZmEsIDB4OTdkYjNhODMsIDB4MDRlNzNjNmUsIDB4MDg2ZGJiZmIsIDB4YWI1MWI4YzEsCisJMHg2OWVmMGY0MywgMHhlMzdhOGYxYiwgMHg0YThmNGFiNCwgMHgzZjliZTVhMSwgMHhkYWRhY2U4MywgMHhjNzE3Nzk4MiwKKwkweGE3NzFhOTJlLCAweDU4ZTJlNjRiLCAweDM5ZDhiNGYzLCAweDc3NzhiZGRkLCAweGY5YTg3MmE4LCAweGZhNTQwYjM1LAorCTB4ZmI2MjExZGQsIDB4NGQzNzBiZTksIDB4Yzk3NDdhNDcsIDB4YTFmZDU0YmYsIDB4ZjUwZTQ2YjIsIDB4NGIzZTkxOGUsCisJMHgzZTYzZDdkYywgMHgzZTQwYTJkYSwgMHg1ZTg1ZGY3ZSwgMHhiYmE0NDFlNCwgMHhkYTc3NmU5MSwgMHgzNzFlZWM1ZCwKKwkweDdiODI0NmExLCAweGUyNmQ4ZWVkLCAweDg1NzFmZjcwLCAweDczZmY3YjEwLCAweDlkZjRkZGI2LCAweDQ3OWM2M2U2LAorCTB4ZGIyZmYwNzcsIDB4MmZhZWJiNWEsIDB4OTA4ZmY5ODEsIDB4ZjA4ZGNmODAsIDB4NDI1ZmYzNmIsIDB4ZDRhN2E2MTQsCisJMHgyZjM3NzZmOSwgMHhmMmM0OTkxMiwgMHg3Zjc1ZDQzNCwgMHg4MTViOWMzOSwgMHg3OTA3OTNmZCwgMHhjNmFkY2Y5NiwKKwkweDM1ZjgzNGExLCAweDI4ZjM4ZDc4LCAweDdjZjEyYmUyLCAweDhmMDM1YjQxLCAweGY4NzdkOTc5LCAweDc3MDY3ZGQ5LAorCTB4ZmQ3MGU1YWMsIDB4OWE0ZThlZWQsIDB4N2JmNmQxNWUsIDB4MzBjYTliYWEsIDB4ZmI0M2NiNmYsIDB4ZWRiNjNiMDEsCisJMHgyOWY2YzI2MywgMHhjZjc4NzNkNiwgMHgwY2Y0Yjc1YiwgMHhlZWE1N2NiMSwgMHhhMzA4NDllOCwgMHgzNzRhNjJkYiwKKwkweGRlYmIzZmYwLCAweDBjYWY5MDlmLCAweDBhMjdkZThjLCAweDhjMGNhMGRjLCAweDQxMjJiN2RlLCAweGIxNTk1N2NjLAorCTB4ZjllZWJhN2QsIDB4OGUzNTc2OGQsIDB4OWVmNWVhYTUsIDB4MjRkNDhmZTQsIDB4Njk2ZjhjYzQsIDB4OWZjOWE2ZjIsCisJMHhkYTc3OGYyNiwgMHgwYTZmNjY2NSwgMHg1OTE5ODM4MSwgMHhkMTg3OWY4MCwgMHg3YWZhYTFiZiwgMHgzZGY5OWQ5ZSwKKwkweGFmYTVjZDBmLCAweGE3M2M2ZjU0LCAweDMyNThhN2RiLCAweDA5NmJkMTk2LCAweGJiY2Y4MjVmLCAweDBmMTRiYmQzLAorCTB4ZDhiZGJkM2EsIDB4ZjhjM2NmYWUsIDB4ZTZkMWYzYTEsIDB4MzY4OWM5YTEsIDB4MTg5Y2EzM2YsIDB4NDNkMjM3YmYsCisJMHhlOTE5ZWY4YiwgMHhjMDA3YTQ2MiwgMHg1YmM2N2UwOSwgMHgzNTgxNmQ3YiwgMHgzOGI3Y2UxNCwgMHhhZjdmYjcwNiwKKwkweDRkNmVlMTE1LCAweGI5YzBhYzliLCAweGY5ZjRlYWNkLCAweDNlMDFmZTU4LCAweGIwZmIwNzRjLCAweDc2OGVjZWI0LAorCTB4OGQ4N2VhYWUsIDB4MjI1YzVkZWEsIDB4NWVjYmI1NTcsIDB4ZDkyMzJhYjIsIDB4MjRkMmE3YjksIDB4YjU4OTkzZTAsCisJMHgxNzE2MTk5MSwgMHg1ODNlOGYyMSwgMHhhNGY3MDQ1YywgMHgzMjM4N2M0ZSwgMHhiZmYxNDIwMywgMHg1NjQ2ZjA3ZSwKKwkweGQ3NzkxNmRmLCAweGZjZmI4NmUyLCAweDY5MGE4YTRiLCAweDJmZDA3MWZkLCAweDk1ZmEyZmEwLCAweDZlZmJlMGRiLAorCTB4Zjk3M2M0ZWIsIDB4MWZkZWNjYmEsIDB4Y2Y5ZDJlNjUsIDB4ZWQ2NmIxZWUsIDB4YjMzZWQ0OTUsIDB4ZjJhZWY1ZDAsCisJMHg0MTU3ZTBmMCwgMHg0YTViMmI3ZSwgMHg1NDJlMjE4YSwgMHhiYTc4MTEwOSwgMHhjZTI5NTVkZSwgMHhhZDg3MmRiMCwKKwkweDdiZTllM2ZiLCAweDRmM2NkOTFmLCAweDc2ZWUyMWQ5LCAweDhiYWUyZDcxLCAweDk0MDU4Nzk1LCAweGM1ODg3MjJmLAorCTB4NTczYTA1NjcsIDB4NmQ2ZWZkMmIsIDB4Mjk5M2I1MWMsIDB4NWEyNmQ3N2UsIDB4ZDMxN2UwZGMsIDB4OTdmMDdlZTcsCisJMHhiMjJhMjZkNywgMHhhMzVjZjUxYywgMHg3MDA3N2MxZiwgMHg3Y2IxMzVhYywgMHgwYzZmZmQ4MiwgMHhjNjVjOGY4ZSwKKwkweDIzZWZkODJlLCAweDM0Y2ZlMDI1LCAweDFhNTgyY2ZiLCAweDE3MjVmM2RiLCAweDM3YzhlNzllLCAweGIxODk3OGIxLAorCTB4NzZiYjZkZmQsIDB4MDBjZTQ5YWUsIDB4MjQzZWE4YmUsIDB4MWZjM2ZjYTEsIDB4ODQ1NTlmZDgsIDB4NjEzNTQ5YzksCisJMHgwZWFhZDBlNywgMHg1Mzc3M2MxMywgMHhjZjA4YTg3ZCwgMHg4NGI5YzBkZCwgMHhlMDdhNzU0ZiwgMHhhNmVlNzM1ZiwKKwkweDllMThhZjkzLCAweDQ0YWUwNDBhLCAweGQwYjcxYTg4LCAweGY5ZDVkNTZlLCAweDk4MTBkMzU0LCAweGRjZTNlMTBmLAorCTB4Y2Y4NDZlNzAsIDB4YTJlY2Q1MzAsIDB4YTBhZmU3ZjMsIDB4ZTA4N2M1MjUsIDB4ZmY3MGYzNzIsIDB4ODllNGZkNGMsCisJMHg1NTlmZGMzYywgMHgyZDc5YWEyNywgMHhiZTNlNzYyNiwgMHhlNTU3ZGQ2MywgMHgzOWZiMmI0ZiwgMHhkZDAyOGY0YSwKKwkweDI1YjFmZjRmLCAweDUzZjZjNmNmLCAweGU2ZDZhZmQwLCAweDg0MjljNzViLCAweDM1ZWQ3ZjAzLCAweDcyMTllNzgyLAorCTB4ZTAzMzQ5OTMsIDB4YjE5NDQ2Y2YsIDB4NDcxNjZmYzAsIDB4NmM5N2NhYTIsIDB4NjVmZTliM2YsIDB4OWIzNmU5NDAsCisJMHg3ZTUzMjM3ZSwgMHg5ZmMxZmFmZiwgMHhlM2JiZmYyMiwgMHg2OGIyYWI0ZCwgMHg1OWY4NzM5ZCwgMHgyZTc0YzMzZCwKKwkweGVmMzBiMjhiLCAweDZiZjU2NWE4LCAweGQwMDZlNzRjLCAweGMzNThlOGJhLCAweDRhZjFiMGVhLCAweGEzYjMzZTE3LAorCTB4MTQzZmM4YWUsIDB4YmEzMTcxYzYsIDB4MDFhZTUwZWUsIDB4MmM0YzE2ZmUsIDB4OTAxYzIzYWUsIDB4Y2I0NzdmNzAsCisJMHg3OTRiNTk1NywgMHhlMmQxZjgwNiwgMHg1ZDc0N2E2MCwgMHgzNjczYzE2ZCwgMHgyODE3OWI4OCwgMHhlYzRmZTQzMiwKKwkweGZhNDFlZjUxLCAweDU3ODZhNWJlLCAweDdmNDI2NmRlLCAweDdmYzA0YTA5LCAweDUzZTE4M2JjLCAweDU0NjkwYmEzLAorCTB4NWUzYzgxYWUsIDB4ODFhZTU0MTIsIDB4MGU3ZWJkN2QsIDB4N2U4M2EyNGYsIDB4OTZhZGYyM2YsIDB4MWJjZmEwODksCisJMHgwZjI4ZjlkZiwgMHg4MmJmNzNlZiwgMHgyZGYyMzNmNSwgMHhmOWQyNDNlYSwgMHhmZjZkZmU5YywgMHhlNGZiZDFjZCwKKwkweGE5ZjkxY2ZkLCAweDAzMjUxZGYwLCAweGVjOWNhZmRhLCAweDM5NTFiNzIyLCAweDJjODg1M2FjLCAweGFkOWY4MzY1LAorCTB4MDkxYjJmZjcsIDB4ZDkxZjRmZDMsIDB4YTA3MGFmNGEsIDB4M2FlMzA5M2UsIDB4NjdiYjEzZjYsIDB4N2U4ZGQ0MDAsCisJMHhlYzQ5NjkzMywgMHg5NDlkZGU1NSwgMHgxN2VlMzc3MywgMHg3ZDM0NjYyNSwgMHg4NWQ2MTBiOCwgMHg0YTdiYjFkZiwKKwkweGZjYzE0NTM4LCAweGVlM2IxN2QzLCAweDk3MTgyMzZiLCAweDM3Mzg5MWIyLCAweDliODk4ZGM0LCAweGQ0NTNmOWE0LAorCTB4ZjE4OTlhZjgsIDB4OTQ1ZTcyNTUsIDB4ODdjZWFjZmYsIDB4NzkwODVmN2UsIDB4MmM2YzYzZjIsIDB4OGZjZTgxYmYsCisJMHg4MjNhZmQwNywgMHg4NDhlNThjOCwgMHhhMDM2NTkzOCwgMHgzZGY1ODNkOCwgMHg0ZmUxZjgyNCwgMHg1ODhmZmY2OSwKKwkweGIyY2E3YzU5LCAweDhmZTJlODlkLCAweGI3MTYwZTY1LCAweGUyYzljMDc5LCAweGYwNjI3MThmLCAweGUyMmJiMDE2LAorCTB4ZDgxNzEwY2UsIDB4NGI4ZjZkMTUsIDB4MGJjZmVlMDIsIDB4ZGY3MDliYWUsIDB4ZTMwOWEwZWUsIDB4MDE4YjRmZGMsCisJMHhiNTE3ZWMxNywgMHg1YmM4MjU1ZiwgMHg2ZDdmNjc0OCwgMHg3ZWI1ZGQyYSwgMHhhYmU0OTExZiwgMHgwYmY3ZWUyMCwKKwkweDlkM2ZhYjI3LCAweGJiOGYzMDRmLCAweDgwMTQ4NGZkLCAweDBjYzRkY2ZkLCAweDNjNzQ0ZDRiLCAweGQ5ODM5ZTY5LAorCTB4MTU3M2JmYmIsIDB4MDQzYTA0Y2MsIDB4MTgxMWM2ZjcsIDB4MzhiZWNjN2YsIDB4YjllM2QwMTMsIDB4ZTA1NmI5MWQsCisJMHg0NzAxMTc4YiwgMHg2Njg5MGYxNCwgMHg1ZmQwOWRkNywgMHg2ZjBhMzllMiwgMHhmOTY3M2UxNiwgMHgyMjNjODJmZCwKKwkweGZjNzdlMjllLCAweGVlMTk3NjhkLCAweDFhZGE3YWQxLCAweDU2ZjMxMWJjLCAweGJkZTEzNzlmLCAweGVlNGEyZmMxLAorCTB4ZjE3ZjUwZTksIDB4M2QwMmVjYWMsIDB4MzA1Njc0ZmMsIDB4YmNmM2U3MGUsIDB4NjJmM2U3MDksIDB4MmJkNWZiNWMsCisJMHgwYzBmZGMyOSwgMHhjMTJlZjE2MSwgMHhjZmQwMDQ0NiwgMHhiZTQwYTk4MiwgMHhhZTVmM2U5MywgMHhhZmE2YjFmMiwKKwkweGQxMWM4MTM3LCAweGMxMWMyM2ZhLCAweDI5ODIwYzczLCAweGNiNDhlNTFmLCAweDI3NmI2YTI3LCAweDY3ZDQ0Zjk4LAorCTB4ZmMwZjBiNjYsIDB4OGI1ZDM3MWMsIDB4ODg3OTg1M2IsIDB4MjUyODRkMTcsIDB4YjA0ZGNmNjgsIDB4MDVjZTc4OGIsCisJMHhiY2UxOTlmMiwgMHgwZjU1NDRkYiwgMHhiMmI4ZmM0ZiwgMHhiYjA3ZTU4NCwgMHg5ZWJkYzMwZiwgMHg3ZWY1NzZjZCwKKwkweDczOWY3NTMwLCAweGQ3MjdjYTkyLCAweGExNmYwODkxLCAweDI0NWRkN2VkLCAweDRkMjc4ODZlLCAweDhmZGZhOGJhLAorCTB4NWY2MGNhNzgsIDB4NTdmYjUxNGUsIDB4ZjA4NTVkZGEsIDB4ZWRlODlmMzgsIDB4NDUwZDI5YmYsIDB4MmMzZDYwMjcsCisJMHhmYzAwOGEyMCwgMHg2ODYyZDkzNCwgMHgwOWQyM2IwNywgMHg5ZmViZjBmNywgMHhmZDUwZTAzZiwgMHgxOTkyNGNkYywKKwkweGVkYTZjNzlkLCAweDg3ZTE0ZDQzLCAweGI1ZmI0NDZlLCAweDVlMDM3MjU4LCAweDBmOTVkYTc2LCAweGRmYzAzZjIwLAorCTB4YzVjYjkyMjIsIDB4YjFmMjlmMjUsIDB4MTcyMWMzN2MsIDB4MmNhZTA0NmQsIDB4ODc2OWZjYTQsIDB4NTBkZDVjZjksCisJMHg3OWQyYjdlZiwgMHhmNTkwM2Q1ZiwgMHhmYTA4N2MwZiwgMHg5M2M3Y2FlNSwgMHg4ZmRmNDA5MywgMHg5NWE1ZTk1NywKKwkweDdmMDFkZjFhLCAweDdmMTllMmI5LCAweGNhNzc4NmI5LCAweDJjOGVkM2U3LCAweDM3OTM0ZjdjLCAweDY3ZTgzYmUwLAorCTB4MWY5ODE4OGYsIDB4ZjI5YmJmNmIsIDB4YWZjMGQzZWIsIDB4ZmQwNGVkM2IsIDB4NWJhNTlmYjgsIDB4Njk5YzgwZTYsCisJMHg3Y2FhYjRlMywgMHhkNWQ3MmM2ZCwgMHhiZjBmZGNhZSwgMHhjMGJmZTRmYiwgMHhiZWMyOGRkNiwgMHg3NWU4YTUxNywKKwkweDgzMDI0ZmJmLCAweGNmZDcyYmQ3LCAweDY4NzkwNjk4LCAweGNjZjMxMTc2LCAweDUxNzNkNDUyLCAweDFlOTJmY2QxLAorCTB4ZGYxYTJmYzUsIDB4OWM1OWRhYjUsIDB4Yzk5ZmUzNDgsIDB4ZTFlNWRmYmIsIDB4ODQwYmU0ZjksIDB4ODc0OGIyYjgsCisJMHhjZmYxYTJiZiwgMHhmNzE4N2Y0NCwgMHhlNjEyMjc4MSwgMHg2N2Y5MTg5ZiwgMHg5M2ZjMzc1NywgMHg0MDE2NWU3ZiwKKwkweDlmZTE3NTZmLCAweGJhN2Y4YzQzLCAweDBmZGExYmUzLCAweGU0NjE2YmRlLCAweGFhMWM3NzlmLCAweGZmMmRkZGJkLAorCTB4ZmNmM2MyNWMsIDB4YmU0ZWY3YWIsIDB4OTM2NTdlZWMsIDB4NmE5ZjlmNGYsIDB4NjJkOWM3MmMsIDB4NTRiYjJmZTcsCisJMHhlYTk2ZWZiYywgMHhiZDAxY2E2ZiwgMHhjZWM0ZDUzMSwgMHhlMzI0MDllZiwgMHhlZWVmMGExNiwgMHhmY2RlZWQzOCwKKwkweGVmYTg2YzlhLCAweGRhMWU5ODE0LCAweDFlYTMzMjE5LCAweDc4Zjc2OWRhLCAweDY2OWI3ZTMwLCAweDA1NTdlNzYxLAorCTB4MjNjZTA0NGYsIDB4ZTQ1YWZiYjgsIDB4ZDkyMWRmZTgsIDB4NTg3NjYwZWUsIDB4ZmI4ZjBjNTAsIDB4MzdmMWVjMDIsCisJMHg5ZDhjMWYxOCwgMHgyYTQzY2I5YSwgMHhhNjYyZmE1YSwgMHg5NzFkNDYxNywgMHhjZmVmYzMzNiwgMHhiZmNjZWEzZCwKKwkweDA2OTY3YzAwLCAweDc5ZGZhM2I4LCAweGNmNzg0YThmLCAweDA5NTFmNTUyLCAweGY3NmZlM2Y1LCAweGYxMDQ1ZGJkLAorCTB4NzljZjJkNTEsIDB4OGJiNzllY2MsIDB4ZmJjMjg2MGEsIDB4YTFmZWRmOGMsIDB4OGVhZDY1ZWEsIDB4NWY0MDQwNDcsCisJMHgxZmRkZWUxYSwgMHg0YjFlNzFkNywgMHgyOTdlNmY3ZiwgMHg2NzRlNTFmMCwgMHhmOTNlZjFiYiwgMHgzZmRiMWM2MCwKKwkweDExNjQ0ZDk5LCAweGI0NzE5ODg2LCAweGRlYjg1ZWY0LCAweGZjYWY3OGNjLCAweGZmM2IzMGVjLCAweDI3YjBmMzM2LAorCTB4MmFmMmJkZjYsIDB4MzdlZjE4N2YsIDB4OGE3N2Y2YTcsIDB4ZTdlZmVjMTMsIDB4Njg0MWY2NWEsIDB4ZGQ2Y2M4ODQsCisJMHhkNzM1NGEwZSwgMHgyNmEzM2YzMCwgMHg5MzQ5ZjgxYiwgMHhmOGEzZmM0MywgMHg0NDMyN2UwYiwgMHhiNzA2YmJmNywKKwkweGQwN2ZmM2E5LCAweGE5ZmJiMDJkLCAweDRiZWUxMjIyLCAweGVmYjA5Y2ZlLCAweDM2M2FlYTgyLCAweDQwZjRjOWNhLAorCTB4ZTYxN2VhZWUsIDB4Y2IyMzljMDMsIDB4Y2JhMDY2OTUsIDB4ZDcxNjJlYjMsIDB4NWIwOTA1ZjksIDB4NmU2ZTgxYjIsCisJMHg4MjUzZjcwMSwgMHgwYmY5M2NhMiwgMHgyMjNkZjNhZSwgMHhkM2IxMGU5NCwgMHhlMjdkM2RmNiwgMHg4ZmY4YzI0NiwKKwkweDljNjMzZDNhLCAweGVkMDk5ZjYwLCAweDMxYmJlMDg3LCAweDgyNDc3M2UzLCAweDU4OGZiNzFlLCAweDlhZWIwNDliLAorCTB4YWI4NTM3MDYsIDB4MTNiZDliNzgsIDB4ODFhZTBkMGUsIDB4OGY5N2M2NGUsIDB4MDBjNmNiM2EsIDB4ZDAzYmUwMWUsCisJMHg4ZTQ3NGQ0YiwgMHg4ZDdiZTA1OSwgMHhjZjdiODIxZiwgMHhlMjg4M2UzMCwgMHg0ZTgzZTAwYiwgMHg0MDE2ZTBiZSwKKwkweGEyODNjMzVkLCAweGZkYjdjZmFlLCAweDhiNDJmODhiLCAweDE3YzhmNDZiLCAweDdlNzBiNzEwLCAweDBiOThiZTJmLAorCTB4MDVmMjM1NzgsIDB4Y2UzY2U3YjUsIDB4NTA1Y2Y2MTgsIDB4YzY5Mzc5NjIsIDB4ZTdiMTNmZTcsIDB4ODk2ZWZiZTMsCisJMHhkOTEzZGU2MCwgMHg2YmJmNjU2NywgMHg3ZGMwNDllOCwgMHhkOGI4ZGY5MCwgMHgxYzlmNmQ5OCwgMHgyOGE2YTRjYiwKKwkweDc2NjRlNTU5LCAweDJhM2JmNmJkLCAweGRhMWNjMjIzLCAweGEyYTgyMzlmLCAweGJjZWQwZGI4LCAweGRkMjdhODdlLAorCTB4MzFjOGZlMmEsIDB4NDZmYjgzOGUsIDB4MDMzZTM3MzEsIDB4MTI3MGQwZWMsIDB4Y2MyMzZiZDgsIDB4ODc5MDYxMjUsCisJMHgxOTg5YjY1ZCwgMHhkYWU2M2Y2MCwgMHhmY2MzNjQyNiwgMHhmYWIyMWU1ZiwgMHg1ZWQyNTg0ZCwgMHg5YmZlNWJlZSwKKwkweDdkYTc3MmFkLCAweDY2YzNlOWE1LCAweGZjNmQ1YmI1LCAweDRjN2YyYTM1LCAweDI3NzlkODUyLCAweDcwZDFlYmQwLAorCTB4OTAwM2ViNjgsIDB4YzJlMGUwMDksIDB4ZGFkZjRkYjMsIDB4MjI4NzhmNTAsIDB4MDA5MzZmMTQsIDB4ZmQ4NzhhMGUsCisJMHhmYjA0NjkxYywgMHgyNGE0ZGYyMSwgMHhiMDNiMDY0ZiwgMHgzODAwNTg0ZiwgMHg5ZDdlZjZkYiwgMHg5MmNlZjEwOSwKKwkweDAyMWZlYmQwLCAweDNlZGEyNWJjLCAweDBmYmY1YmFjLCAweDM1YjdiNDZiLCAweDNmZjM0ODdiLCAweGYzNDk3YjM0LAorCTB4ODJhZWMxN2IsIDB4MWZkNTMyZjYsIDB4YmVkOTk5NzEsIDB4MDViMDg0ZDgsIDB4ZTQ3ODUzZWYsIDB4YTI5NTdjYWMsCisJMHhlNzQwYjNjYSwgMHhlM2NlYTI1MSwgMHg3MDgyZDI2NiwgMHg0Y2E5Zjc2OSwgMHg3MjUxZjE1MywgMHgzOWFiZmE4OCwKKwkweDU0Yzg0ZWQwLCAweGVhYTk4NzhhLCAweGRkNTMyYTdkLCAweDZlMjJmYmZhLCAweDNlZmIxYjFlLCAweDllOWZhZDE1LAorCTB4MWJhZTM3ZGUsIDB4YTNmNjFhZDcsIDB4Yzg3OTY4N2UsIDB4Zjk0ZmVlYzcsIDB4YzNmOThmYmQsIDB4N2VmMDA3ZTMsCisJMHhiMWRmZDYwMSwgMHgwOWZlZWM1OSwgMHgyMWMzYzMxNywgMHg3NjNhZjYyOSwgMHhmMWViOTU1MSwgMHg5YzBlNDhhNiwKKwkweGU3YmZkZWM3LCAweDFlNmViOGVmLCAweGY3ZjdmM2Q4LCAweDc3MWM4ZWMxLCAweDk3OTAyMDQyLCAweGE4YzRmZTNiLAorCTB4MTgwZmNjNzgsIDB4Njk1ZjIzMmIsIDB4NmYzZjdhZmQsIDB4OWNmNjExYjQsIDB4Y2NkZWZmNDQsIDB4NzI4ZjBhNDEsCisJMHhjMTY3YzAyNSwgMHg4ZjUzOTVmMiwgMHg5ZGZkMGEzYywgMHhlODkwMmEzZiwgMHg5MjQ1MWY3MywgMHhlNWM0MjA2NywKKwkweDFkZGZkNDhiLCAweDdiMzFjODNhLCAweGE4M2Y2YjRhLCAweDExYzdkZWZlLCAweDIxMjE2Zjk1LCAweGM1NjdiYjQzLAorCTB4YTllNzQ1MWMsIDB4MWExZmZkZWEsIDB4MmYxZWE3NWQsIDB4NzRlNDIxM2UsIDB4ZmRmYzBmYTUsIDB4NWExMGUyMzMsCisJMHhhYTljZTFmYywgMHg5ZmYzNDkwZiwgMHhmNWNlN2NmMCwgMHg2MDBhNzc4ZCwgMHhjNjlmNWZiZiwgMHhkYzZhMjUxMywKKwkweGU5ZWE2NDFiLCAweDRlMjFjNTQ3LCAweDZmZjYwZDNhLCAweDRlOGYzM2YzLCAweGI3ZTViYzgzLCAweGY0ODE0Yzc4LAorCTB4OTliZTc2ODYsIDB4M2UxNmY1MDMsIDB4NDYyYWJkZTYsIDB4YmExZjVlZmMsIDB4OTk1NWVmMTMsIDB4YTNlNGNmMWIsCisJMHg1ZmM3ZjFhNywgMHgzODY0Zjk0ZCwgMHgzYjMwOWRkMCwgMHg0YmRkOGYzMCwgMHg4MWVmYTQ2MiwgMHgxNDkxZmYzZCwKKwkweGJlM2RkYTE5LCAweDkxYmZhM2JiLCAweDJhOWNhZjBlLCAweDllYWM3ZGMwLCAweGRiZTQ2MWU4LCAweGZlOWU3NDdkLAorCTB4NTM3N2UxMmIsIDB4YmY4ZmM0MmQsIDB4ZmFjMmVhOWIsIDB4YWMzNGJlYWIsIDB4ZGRlYWZjNmIsIDB4ZDgxMjY0ZmIsCisJMHg0ZTlmMWE3OSwgMHgzMzdjNjI0OSwgMHg0OWEzZjc2ZSwgMHgyZjQ5ZGVjNCwgMHhjNTg2ZGUyMywgMHhjOTdmZmUzMywKKwkweGVlMjVkOWFhLCAweGEzZThkMzU5LCAweDg0M2FlOTc3LCAweDJkMjdlYThjLCAweGFhNTYzNzkwLCAweDcwZmIzYWMyLAorCTB4NDQyNWRhMTEsIDB4NWM2MmNmM2QsIDB4YjdmMzY2ZGYsIDB4ZGE3NTAxNGQsIDB4Y2NmZWVmZDMsIDB4ZjU3YWNiOTQsCisJMHg2ZmM1Mzk3YiwgMHgwZWIwMGJkNSwgMHg5OWFiMDkxNiwgMHg3OGVkNTMxZSwgMHg5ZDIzMWUwZCwgMHgwOGE1MjNkZiwKKwkweDE5ZjA3NzdmLCAweGU3MDhjMGY5LCAweGY2ZjkxZDRiLCAweGRhMDdhZTBhLCAweDE4Y2NlMGVmLCAweGM2MjYyNTk4LAorCTB4OGY4Njg3OTgsIDB4YzdhZTg0OTksIDB4OGY1ZmJkZDksIDB4ZGJkNzhjNmYsIDB4MTc4ZWU3ZWYsIDB4ZGFkMDExZmUsCisJMHhlOTE5YmM5ZCwgMHhmNGQ3NmM2NiwgMHg5MDBjMTE0NywgMHhlYzFmYTU4YiwgMHgyOWYxYjk5MywgMHg4YmEyZGY0OCwKKwkweDNhZTg1MTEyLCAweGNmZTlmYTQzLCAweDJiOTI5M2Y1LCAweGI5NTZkZjkxLCAweGY4ZWViM2Q4LCAweDRmMjJmYWFkLAorCTB4ZjkzYjIzM2MsIDB4ZDg3YTZjNGUsIDB4NWJiNzdjMDYsIDB4MWM0MWI3YTgsIDB4ZjRmYjNhZjUsIDB4YzJiZDEwM2EsCisJMHhlMjY2MGJjZiwgMHgxMzExMTVmZCwgMHg5NGRhZDA4MSwgMHg4ODY2OTlkMCwgMHgyNDNmNzgzMywgMHgyMGExYmU3OCwKKwkweGYwMzI3ZmI0LCAweDBiNDJhYmU5LCAweGU3NmQ1OWZhLCAweGNhMzg3OTA5LCAweGQ1MGE2Y2VlLCAweDZiMmVjMGQ5LAorCTB4ZjNlNzY2NGEsIDB4NWQxMDI2MGUsIDB4NzhjNWY0ZmUsIDB4OGU5YTZmYTYsIDB4YzRhNjlkOWUsIDB4NjJlZTFmNjgsCisJMHgyODgzM2NmYywgMHg5ZmY0MzljOSwgMHg3ZjI5ZWI0NSwgMHhjN2RjMWY4MCwgMHg0MjkyNzE4MSwgMHgzMjVhZmRjZSwKKwkweDM5NzMyZGQ4LCAweGY2ZGEyM2Y0LCAweDk5MmQ3OThlLCAweDdiN2FkYmMyLCAweDI5OTllYTAyLCAweGU5ZGRmNzRkLAorCTB4ZmUwODg0YTIsIDB4NmYzZTI0NjMsIDB4ZmVmMGUzMmYsIDB4OGRkOTIyODQsIDB4NTljNWEyZjUsIDB4Zjk4ZGY3ZTgsCisJMHgwOTQ2NjkyNiwgMHhhMjIwZGZiNCwgMHhhZjg1MzNkZiwgMHg3NTVlMjAxNCwgMHhhYmMzOGQzYSwgMHg5MTcwZjYzYywKKwkweDYyM2RmODVhLCAweDBlMzY3NGZmLCAweGMwOTNmOTcxLCAweDI0YTc3ZDNmLCAweDY2ZmUwNDY5LCAweDA3ZDVhYzllLAorCTB4MTIyZWVmZTEsIDB4ZmFiNmZmODMsIDB4Y2RmYjczYTUsIDB4MmNmNTdkYjQsIDB4YTc4ZGYzMGUsIDB4M2Y4ODMyYjgsCisJMHhkNjhhN2Y4YSwgMHg1YmFmMzg0YiwgMHhjMDA1YTk0MiwgMHhmNThhMzNkNywgMHhhYWMzMWVlNywgMHhkNGFiMzkzZCwKKwkweGZiZDEwMjQ2LCAweGU1MGI5Y2Y5LCAweGZkYjVhMGZhLCAweGYxMWRmYzU2LCAweGY5ODEyMmJkLCAweGEzN2U3MjY5LAorCTB4ZTdiM2VmY2EsIDB4OWJiZWU5MjQsIDB4YTlkZDk4NGUsIDB4YWE0ZGQ1YzksIDB4ZmFhOGRkZmMsIDB4MTkzZDczY2QsCisJMHgwOTRiZjFiYSwgMHg0MGZlODdiMywgMHg2NDgxMGJkYSwgMHg3ZWQ4YjhmNywgMHg5NmY2YjRmNCwgMHgyNWUxZjNjMywKKwkweGQwNjhkZmJlLCAweDMxMGQzNzg3LCAweGU1N2NiZGY4LCAweDM0OGJlNDVhLCAweGM4Zjc4ZGNlLCAweDM3ZWRmNWI4LAorCTB4OGRkN2Q1OGYsIDB4MGZkNDZiZjIsIDB4OGY4YjIwYjMsIDB4MzQyN2FhZWYsIDB4MmY2YjMwN2QsIDB4NjgzYzQyMmYsCisJMHgzM2M1M2U1NiwgMHhiYjdhYzVkYSwgMHgzMTdkMjdiZCwgMHg3ZDFiYWUyNiwgMHgxN2JlNDk3MSwgMHhmYTJlOTBjYywKKwkweGVmZTJlM2UyLCAweDRiN2UyZmE1LCAweDU0YjE5NmRkLCAweDU3OGVkZmFlLCAweGE0ZmVjZGQ3LCAweDI5OGRlODNmLAorCTB4ODE0NzhlZmMsIDB4YmFlOGRhOGYsIDB4NDdjMThlNjksIDB4YzVhM2JhZGEsIDB4MWNhODhhMDEsIDB4YzUzODFlYTMsCisJMHg1Y2E2NjNmNiwgMHg5MWZlMjc0YywgMHgwZTgwNzE5ZCwgMHgxMmVkNDIzZCwgMHhhOTdiMGM3NywgMHhlNTFiM2UzNSwKKwkweDY4ZWY0M2FiLCAweDJlY2EyNTdhLCAweGI4N2VmMzExLCAweGRhODUzMjVkLCAweGMwMmU1MmEzLCAweDJiZTEwZmQ3LAorCTB4MjkyNWVmNTIsIDB4ODgyYjg0ODIsIDB4YzE5ZGE2MWYsIDB4YTA1NzkwMzgsIDB4Y2ZhZTJjZmUsIDB4ODE3ZjIyNGYsCisJMHgzYjEyZTNmZSwgMHhhZjY4YzNlNSwgMHgwYWU4NzE2OCwgMHhlOTRmNjY5NywgMHgxZTIzYTVmOSwgMHhjM2RkOTMzOSwKKwkweDExNDlmMWFhLCAweDdmZTQxM2UwLCAweDA0ZmI4ZjI2LCAweDdmZDQxYmZmLCAweDgwMDBiMzAzLCAweDAwMDA4MDAwLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2NjNWZmMDAsIDB4NTU1NDc4MDksIDB4ZjU3OWYwOTYsIDB4NTU0OTJkNWUsCisJMHgxNDZjYWE5MiwgMHhiNjEyZjA4YiwgMHg4NDU4MjQ4NCwgMHg1OTE2ZWM4MCwgMHhhMDE0YTM1OCwgMHg4MTY4Y2I4MCwKKwkweDlhMTI2YjBiLCAweDY5ZWU5YzcxLCAweDAyNDJhNmZmLCAweDgzYjc0MzQzLCAweGU4Y2VkYWQyLCAweDNhZDg1N2Y0LAorCTB4MDhiNDFhODMsIDB4ZDA5ZDAzMDEsIDB4NTg0YzUwMTUsIDB4ZjgyZTA4MzQsIDB4MWE2ZDFhZDksIDB4ODQ0OTBlZDEsCisJMHhiZmJiNDZkNiwgMHg3MzljZmZjZiwgMHgyYWFhNGJlZiwgMHhmZmZmNGQ4NSwgMHhiNDlmZGYzZiwgMHhkZWVmYjk3ZCwKKwkweDY3YjllZjc3LCAweDk3OWVlNzNmLCAweGIzNTU5YmRiLCAweGY2ZTAwOGFkLCAweDE0MDc4YTk5LCAweDc3ZjFkMDAwLAorCTB4ZTA0MmMwMjIsIDB4YWRhY2MzN2YsIDB4Yzc4ZWYwMTYsIDB4NjlmY2Q3YmUsIDB4ZTdmODBkODcsIDB4OWMyZmZjM2IsCisJMHhhNDJjZmM5MCwgMHg5MDBiY2Y1MCwgMHhjZTU0YjAwOSwgMHg3ZDU3ZmM1ZiwgMHgzYzVlM2QzMywgMHg1MmZlN2EyNywKKwkweDkyYjlmZDk4LCAweGY4MWI3MDBjLCAweGY3MWMzMGNkLCAweGZmOGVjNWYzLCAweGM3MTU0YmVjLCAweDdlOGIyZTk3LAorCTB4NGE0Y2U5OWUsIDB4ZmY4NzkwYmYsIDB4YmUyMzAxMTgsIDB4ZDRjYTAxNTMsIDB4MjJiNzlkYmEsIDB4NTUyN2RkYmMsCisJMHgzMzRjNTU4ZiwgMHgzOTBmZmVkMSwgMHgzNTBmZmVjNSwgMHg3YzgwMGM5NywgMHgxNjc0ZGY4MCwgMHgzZGIxZjhhNywKKwkweDFjMjExMWI2LCAweGQxYmFkMDBkLCAweGVjNzFlZGM2LCAweGVmYzVmMTA3LCAweDNjNjZlN2U4LCAweDIxZmMwNTlmLAorCTB4NTJiNGI2MDcsIDB4NDgwMWI3MjEsIDB4YzRlZDE4MDUsIDB4ZmY2MDI3NDUsIDB4MGQzZjllMmEsIDB4YzAyNDg2YzcsCisJMHg1YzI0NzNlZiwgMHhlN2FmMDBkOSwgMHhmMTA0ZTc5OCwgMHg1ZWI4YzNiZCwgMHhlMzBkZDcwMCwgMHhmNzVjMDFmYSwKKwkweGY3Mjc0NmM4LCAweGU2ZThkYjVmLCAweDQ0MmUwZGZlLCAweGZhYzAwNjZhLCAweDM3YWYyNzE0LCAweDg3NzZmNzJmLAorCTB4ZTM1YmRmMWYsIDB4NTBlN2U2Y2MsIDB4Zjg0NGRhM2UsIDB4N2IyZmUwMzYsIDB4MTAwNDA4NmEsIDB4YWM3N2FmZGYsCisJMHg4MDc0OTRkMCwgMHhiMWUyYjcyYSwgMHgwMWQxZjU2NiwgMHg4ZTU4ZTM0ZiwgMHhiZTI1Y2JmMywgMHgxMDJhYjcyYiwKKwkweDFmZTVlN2M0LCAweGM0MDcyYmFlLCAweGVlMzM1NzVmLCAweDJhYTlmODg3LCAweGZjMzY4MzU1LCAweDYzZDM0OTY3LAorCTB4MGNkZjQ1M2IsIDB4ZGVmYTA4ZDYsIDB4MzMwMjhlMjIsIDB4ODZjZDE2YjUsIDB4MjhmMDJjZmIsIDB4ZjFmNzE1MWUsCisJMHg2ZmY3ODkzNiwgMHgxZDQxMmFmNSwgMHgyNzhiNzlmZiwgMHg2Mzg3MWU5YSwgMHhhZTU4YmVlOCwgMHgwZmZlODBiMywKKwkweDQ3MzA1YmRmLCAweDlkNzE4NjA5LCAweGRmYTI5MzA1LCAweGQ2NzU3YzViLCAweGZlZDhjYWU3LCAweGU4OThiNDdjLAorCTB4YmYzZmI2M2UsIDB4Yjc3NDRlZGMsIDB4YzE4NjNmZTMsIDB4OTVmYmEyMzAsIDB4OGQ2ZmE1OGIsIDB4YzViYTNlODUsCisJMHg4ZTc0YjFiNiwgMHg5ZDE2YmYxZCwgMHg2NzNhMjdlZiwgMHhjNmNlOWI1YywgMHhjZThiN2ZmYiwgMHg5MDRlMTEwZiwKKwkweDFiZjQ3MGJlLCAweDMwMDQ5ZThiLCAweDFhMDdlOWJiLCAweDU1ZjY3OWQxLCAweDMyYWRkNzhkLCAweDg2MTQzM2NlLAorCTB4ZDRmZTc5ZDIsIDB4Yjc2ZmY4NTksIDB4YWFmY2RmNDIsIDB4ZmUyZDJmYTYsIDB4ZTc5ZjZiODIsIDB4MjJiZmVkNmYsCisJMHg2OWZkZTc0NSwgMHhkZjdlNmY1ZiwgMHg4MDM0ZjNiZSwgMHhmOWNlNzhjMSwgMHg4ZGY4ZDEzOSwgMHhiZDJjNmJhNSwKKwkweDYyZjdjYTE2LCAweGU2MzViNWU5LCAweGEwNWQwNjFjLCAweDYwNjg5OTEzLCAweDU1NWZiYzFjLCAweGQxNmI4ZTE5LAorCTB4MTYyZTk3YWQsIDB4N2U0ZjA4ZmYsIDB4NWY4MDcxZmYsIDB4ZDZmYWI5ZjMsIDB4NzY4Mjc0OTMsIDB4ZTAyMDU3Y2QsCisJMHgwM2M4NDczMiwgMHgwNTIwNzVmMiwgMHgwYWRlNWJlOSwgMHhlYzA0NDRlMSwgMHgzZTczOGI5NiwgMHgyOGY1YThkNywKKwkweDM5YzQ2OWYwLCAweDgzNTNlN2U4LCAweGZhZGY2YWNlLCAweGIyMDc1NzY1LCAweDk2ZmIxOWZjLCAweDE0YjAxMDY5LAorCTB4OTcyMTczZDIsIDB4ZDI1NWYwYjEsIDB4N2U2OTIzM2EsIDB4Y2I2OGY5ODAsIDB4MTBiMmQzMmUsIDB4MDViYTYzOWUsCisJMHg5YjUxZjVlZSwgMHg0ZTAzZGEyOCwgMHg5ZDFhMDdhMSwgMHhmYmI3NWUyNiwgMHg2ZTA5OWIyYiwgMHhmMGU1NzgwNCwKKwkweGY4NDA2MjgwLCAweDA5ZTc1NjNjLCAweDMzMjE4YmQyLCAweGM5NDVmYmYwLCAweDljZGZjZjNhLCAweGRjMDQ4MTA0LAorCTB4OWI3NmI0MWYsIDB4MmI0NGY5MGYsIDB4Mzk0MWM4MDYsIDB4ODI1OTA2ZDMsIDB4OWQ2NGI4MzUsIDB4ZGM5MWY2MTYsCisJMHhhODM0N2I3NSwgMHhkMWJiYjk0NiwgMHhlMDQ4ZWY3OCwgMHg2YzkyNDAyZSwgMHhhOTk0NzRmZSwgMHgwZmRlOGIyNiwKKwkweDc5YzU0ZmI3LCAweGZhNmExNTM3LCAweGIyZTI5YzM2LCAweGYxYTAzZmVhLCAweDkzYWI2NmFlLCAweGY4M2VlYmRlLAorCTB4NWE2NjJkY2YsIDB4MjBmMDJiZTcsIDB4MzM1YWYwODQsIDB4NGY4ZTE1MzIsIDB4YTQ4Mzk4NzMsIDB4OTNkNGNhMzcsCisJMHhkZGZiMDlhYSwgMHg4ZmE0MDAzZCwgMHg5NzBiMmRhNiwgMHgzYTZkZDIwMCwgMHhiMTM4ZDdiNCwgMHg4Yzc0NDI5ZCwKKwkweGQwYmZiZjQzLCAweGRlODQzMzc5LCAweDlhNzQ4ODFhLCAweDQzMzRlOTIxLCAweDY2OTJhYmVhLCAweDQ5NDZmNTk1LAorCTB4YWM4NDFhOTIsIDB4YjM3NGZkM2UsIDB4NDA4Y2QxYTQsIDB4ZWUwYTQ5N2IsIDB4M2M1MzQzM2IsIDB4ZjliZmQ4MzUsCisJMHg4ZmM1MTZhYSwgMHhiYTNlOTMyZiwgMHg5NTFmNGZiMSwgMHgzZGJkZjVjOSwgMHgwMTk2ODZiYSwgMHhmZjM0NDI2NiwKKwkweDNkMGEzNTk2LCAweDc5OGI2MjU0LCAweGJlMGZlZDJlLCAweGU2NTU3Y2M5LCAweDQyOWYxZThjLCAweGZiZjkxM2JhLAorCTB4ODI1ZThjNjIsIDB4YTY1M2ZiMTgsIDB4MDNiOTM1ZmUsIDB4YzU4YWYwZjEsIDB4ODQ1NGRlZmIsIDB4MTliNGU3YmIsCisJMHg3MGU3YzU5ZSwgMHhmYjkzM2IxMSwgMHhjNjMxYTdlMywgMHgwN2I2YzUxZSwgMHg3NTdhMjcwZiwgMHhlMjE1ZWI4NCwKKwkweDA3ZjUwNzIzLCAweGQ3YjFmNTc5LCAweGEzYjYzZjllLCAweGYxOGU5OGE3LCAweDBkMjJkZDRhLCAweGNmMmQ5OWIyLAorCTB4ZjBmYjMzYmEsIDB4OTJiZjBmZGUsIDB4YWQ3OGIxMGUsIDB4ZGJkZTdhOTcsIDB4OGU4ZDdjZTgsIDB4YWQ4ZjBmZGIsCisJMHg5NzllZDhiMywgMHg0OGQ3NDlmYywgMHhmOGJkZmRmNSwgMHg5NWU1ZTQzNCwgMHhlMjVlODkwYiwgMHgwYzJlNTdmZiwKKwkweDRhZmRiMmYyLCAweDBjM2U1OWQyLCAweGZlNzgzODc5LCAweDUxZTkyMjcyLCAweDIxYWVhN2M0LCAweDZjYjhmNDlmLAorCTB4OWY5OTY3OWUsIDB4MDY4NDFjODUsIDB4YzM2ZTBhOGUsIDB4YzEyNDg1ZmUsIDB4ZjYyNGFmZjcsIDB4YmMyM2NmMWMsCisJMHgzY2YyNjJkZiwgMHhlYjY4ZGI0YiwgMHgyMDJhMmY4NywgMHhkMTc1YjlmZCwgMHhlMjgwMzM3OSwgMHgyODg3ZTUwNSwKKwkweDg0ZWU4YTRmLCAweGEwMGRiMWJiLCAweDA1ZmYxMTNjLCAweDcyNDgyMTUyLCAweGQwMTA4NjYyLCAweDc4NWUzNWJlLAorCTB4ZDMxOWRhOWEsIDB4ZmJjMjE0ZjQsIDB4ZGRiMzVjNjUsIDB4MjllOWViNDEsIDB4ZDdmMGY3YzQsIDB4MDU3ZDEzMmIsCisJMHhiZjVmZjFmZCwgMHhlZTFhN2MxMSwgMHhlNmQxYjBkMywgMHgxYzJmNTBkMywgMHg3ZWU0ZThkOCwgMHhiNzM3NDZlMywKKwkweGRjZWEzNjg3LCAweGZjOTEzYTZlLCAweGFhMWZmMjQzLCAweDE2OWYxNmJjLCAweGE1ZTY1N2ExLCAweDAzMzBmZDBhLAorCTB4MzVjMTBlZjUsIDB4MDA2MDk0MDMsIDB4MjNjNjZmNzksIDB4NzI4OGYyYzAsIDB4MTBhNGRjMTAsIDB4MzkzY2YwYmQsCisJMHhmYTQ0Zjg3ZCwgMHhlODg4ZWU1YywgMHgzYjU2YWQ0MywgMHg4MmE1OTMyMSwgMHg2Nzk4NWVlOSwgMHgwOWQxZjdlMiwKKwkweGQ1OWYzZTA4LCAweDNmZDIzZTdmLCAweGZjOGNiZmFhLCAweGVmYzM4NDE2LCAweGIwYjk5NmYyLCAweGIzN2MzOTBkLAorCTB4N2FkZjg4NWQsIDB4NGJkMWU5NjUsIDB4ZjRiOWZkYzAsIDB4NDNiOTVlYmMsIDB4OGZlYjg0YmQsIDB4MWY4NGNmMGYsCisJMHg4ZjE4YmRhMiwgMHhlMmJjMjE4NCwgMHhmZjA0NWRjZiwgMHgxMDBiMTY4NCwgMHhiMmIwZDA3ZCwgMHhmMjFhMTY3YywKKwkweDVjYTJiNWY5LCAweDg0NDhmZGMwLCAweGVmOGMxYmJlLCAweGM0YzNjYjU5LCAweDIzYTAwNzRmLCAweDY0NWVmMDhkLAorCTB4N2U0OWQ5ZjMsIDB4M2YwNGI5OTcsIDB4ZGRkYjk1NzgsIDB4MzkzN2FlMGEsIDB4MDk1MWUyYzMsIDB4ZjFiZWUxYjQsCisJMHgyZDdmMTFlYiwgMHhjZTIxYjgxOSwgMHgxY2M5Njk2ZiwgMHhiNzEzZTdhMiwgMHhjOTNlZjFiZCwgMHgwOGU2ZDdiNywKKwkweGNjOTg2Y2FiLCAweGY2MTExZDlkLCAweGUzM2MwMDdjLCAweDc0OTI3ZjI0LCAweDQ3Njg3N2RjLCAweDBlNGUzZjVhLAorCTB4NmFiYjllYjAsIDB4NmI1ZTkyMDksIDB4MDllYzkzM2QsIDB4YWZkMzNlZTMsIDB4YWNiZmQ4ZGEsIDB4NmU1MTE3YTcsCisJMHg4ZjI2MjcwZiwgMHg0MjEzM2Q2NSwgMHg2M2YyNDMwZCwgMHg2ZDk4ZTcxMywgMHgzYzIzYWZmNiwgMHg3YTNlNjVhMCwKKwkweGVkZmJkZjBhLCAweGFmZDIwMDY1LCAweDU0M2ZkYmQzLCAweDMxMmQwZmM5LCAweDQwZTgwZWU1LCAweGEzMmE4ZjM4LAorCTB4ZjI3ZGE4NTMsIDB4NmU3Y2U0ZTMsIDB4MTI3NzI0Y2YsIDB4ZWM5YjBlN2UsIDB4Y2VmYmVkM2EsIDB4MDQ3NGJkNDYsCisJMHg4ZGE5Y2JmMiwgMHhmOTAyM2E1MCwgMHgzNjhkYWRlMywgMHg3NDZmNGY2ZSwgMHhhMzY2N2I3MiwgMHgzOGEzZGI5YiwKKwkweDNhZjNmYzRlLCAweGJkN2YxMzhlLCAweDZmZDRlMzgxLCAweDRmNmE3MWMzLCAweDdhZDQzYWUwLCAweDQ4OTg3MmRmLAorCTB4ZTViYzY3N2UsIDB4YmMyZGE4ZDAsIDB4ZmFkYjg5MmIsIDB4NzQyYzkzM2IsIDB4NTBjOWMzOGUsIDB4ZmM0ZmVjNjcsCisJMHgzNzBjNGUxNCwgMHgyZWU1MDc4MCwgMHhkYjUzZmRkNSwgMHhhZDNmNjgwZCwgMHgxYzY1MDJmZSwgMHhmNzU0ZDRjMCwKKwkweGFlM2E2ZDVjLCAweDhmZTg3YjNiLCAweDE5ZjFjMmJlLCAweDZhN2VjM2E5LCAweDNiNmY3ODQzLCAweDg5Mzg2OGUzLAorCTB4ZjVjN2QyZmQsIDB4M2Y4ODNhOWYsIDB4OTJhMjI0NGYsIDB4Yjc2NDNjMjQsIDB4YzczNjUxNzksIDB4YzQxOGQyOTMsCisJMHgyNGMyZjc2OCwgMHhmZDE5YTdlYywgMHhjOGE1YjllYywgMHgzYTRhNGIwYSwgMHhiMDA1YzBmMiwgMHg3M2UxYjFmMywKKwkweDI1ZGY4ODZkLCAweDUxM2ZmZjc2LCAweDliNjgxMmRmLCAweGZhOWQzYTUzLCAweGJjOTI3MDEwLCAweGNiMjBlNjJiLAorCTB4N2QyNTEwZmIsIDB4YWRiZmRhMTEsIDB4ZDRjNGZmMGUsIDB4YWJjMDdmMDgsIDB4ZjQ4ZDIxZmMsIDB4MDJhZjQ0YzMsCisJMHg3N2E2NzRhZSwgMHhmN2QyYTQ3MCwgMHhkNWI3OThkYywgMHgxNTMxMzY1MSwgMHgyZWQ3ZjdmOSwgMHhjMjY5Zjk5NSwKKwkweDc0MWJjNTM0LCAweDYzNWY5N2Y0LCAweDdhZjM4NGRlLCAweGUyNmZkMTI5LCAweGQ0YjU1OWM1LCAweGUyZTM5ODJlLAorCTB4NGRkOTZmYmUsIDB4YTVmZjI0YjUsIDB4NWZiZDZiOGUsIDB4NWM4N2VmYzIsIDB4YzU0N2Q2NjYsIDB4NjM4YmNlMWEsCisJMHhlMzc5OGQxNywgMHhmZmM4Yzk5MSwgMHgwYzRiNjllZSwgMHg3ZDdjNGIzZSwgMHg4NDkzNWZkNiwgMHg1Njc3MzJmZCwKKwkweDM0NzUyYWExLCAweDZiYjVkZjcwLCAweGJmOTc4ZDFiLCAweGU1NzJjMGRlLCAweDU5ZThmMjQ5LCAweGE1ZWQ4YWM0LAorCTB4ZDMzZTM4NjksIDB4MjRjMjc4YTEsIDB4YTkzZWQzMmEsIDB4YTc3MWEzNGQsIDB4Y2RiNDIxZTIsIDB4NTUzYjhlZjQsCisJMHg1NDIzZTM0NCwgMHg5ZmVhNGNjZiwgMHhkODlkNGJkNSwgMHg0ZTY2ZDE5ZSwgMHg2NmYzODRiZCwgMHg2Yzc4YTRlNywKKwkweGYwOTlkZWY4LCAweGZmMTBhZThmLCAweGYyNDljY2NlLCAweDE3MTRlODI0LCAweGE0YWU5ZjA0LCAweGE5ZWFjN2JlLAorCTB4OGYxY2U5ZDYsIDB4M2FkMzI0OTUsIDB4NjEzMWUyYmEsIDB4OTJkNmZlYmYsIDB4MTQ3MDQ1ZmYsIDB4NTE0MDUyZmIsCisJMHg5MWE1ZGM2OCwgMHhjN2U0ZmIxZiwgMHhlMjc1MjkzZiwgMHgwYWExZmFiYywgMHgwOTljZmM5MCwgMHhlMDkxZmVlNywKKwkweGE4OWFkOTlmLCAweGY1NDAyMDI3LCAweGJkMjk2NzE2LCAweDljNTE2ZjU3LCAweDJiZWZiODliLCAweDUxODFmOWExLAorCTB4NWM3OWZkNjYsIDB4NzY5ZGU0ZjcsIDB4NmZlNTA3YjYsIDB4NzQ1ZmIzZTUsIDB4NmNjMWNlZjIsIDB4OWFkZmNhMTcsCisJMHg0OWVkNGM1NiwgMHhjYmRiZjA5MywgMHhjMzlmMmFkZiwgMHg5MzA4MjZlMywgMHhlYmJmMjk1MiwgMHgxZGJkZjgxZiwKKwkweDRkMjkzZjI1LCAweDBjNGZmNWM3LCAweDQxNmViMTczLCAweDExNmE5NTNhLCAweDgzZTcwZDdhLCAweDU1ZGZlZjQyLAorCTB4OTQ1YmYzYzEsIDB4OGYzYTNmMDEsIDB4YTdlNGFmZjMsIDB4ZmY3MTVhMTQsIDB4NTEwOWU5NTksIDB4NzEwY2U3ZjMsCisJMHg4ZGU3ZjU0NSwgMHg0NWFhNTgxOCwgMHhmY2YyYjFkOCwgMHhhZGZlYThhYywgMHg4OGU5NGE0NSwgMHg2OWJlZjk4OCwKKwkweDQ1ZmQ1MTA5LCAweDExZDJhZWE1LCAweDJiNmZmMzExLCAweDVmZDUxODFmLCAweDU0NTY1YjcyLCAweGIyNjlhNjdmLAorCTB4YTExYjFmZDAsIDB4N2RjODU0YmMsIDB4OWJmYjI5NzksIDB4MGE4N2FjZDksIDB4MWJlZTYyOWQsIDB4OGUzZjdlMzgsCisJMHg3ZjA5YjYxNywgMHhmZTg1ZDBhYSwgMHhiNGE1ZDIxNCwgMHg4MGZkODhhZCwgMHhjNjhmN2MzNiwgMHg4ZjUyZWM4YiwKKwkweDNkZGRhMDA1LCAweGZjODBlYzkxLCAweGY2MmZlMjA5LCAweDY2Nzc2NThiLCAweDYzMDVmYTNiLCAweGI3NjhhZTg5LAorCTB4NzUyZmUwMjMsIDB4ZmFmMWRiNDQsIDB4Y2MyN2UxNDQsIDB4MGJhZDdmMDEsIDB4NzVhNzM5ZTksIDB4NjU1N2ZiMWUsCisJMHg2MTQ1ZDVlOSwgMHhiZjQ2N2MyMCwgMHgyYTM3MGIxZiwgMHgxMzc3OWRkMSwgMHhhYzZhYjYxZiwgMHg4OTBjZTczNywKKwkweGQ0YWRhZmQ5LCAweGY0OGM3ZWMxLCAweGI3YzhlNmVmLCAweGUwMjE3ZDhjLCAweGM2ZmYyNzZkLCAweGZmYjE4NzM4LAorCTB4NDczM2NlYjUsIDB4ZTE3ZWM2OWQsIDB4YWNkNzNhZGYsIDB4YTlhNTg1OWMsIDB4Y2Y1ZmUxNzEsIDB4OWMyYzRjZmUsCisJMHg0ZjMyYTk3OSwgMHhmYjE1ZmU4MSwgMHhlY2E5YWQ4NSwgMHg3YTRmZTIyZiwgMHhmMGMxM2YzYywgMHhjZjUxY2E3ZiwKKwkweDljZjUyMmI5LCAweDU4NWY0OTQzLCAweDY3M2Q2ZDcwLCAweGZmMmQ3YmFjLCAweDc4ZDc1OGNmLCAweGRlNTRlYTFmLAorCTB4ZjdiZjc4ZGYsIDB4N2ZjNGFlYjksIDB4MjdlNzFiYmUsIDB4YWU5ZTc5YzUsIDB4NWNmZTdmYzQsIDB4OWExOWZjZjQsCisJMHg3OTQwZTM1ZSwgMHgyNzhhMGUzZSwgMHhhOTNmNzg0MCwgMHg5NTlhZTQ2YiwgMHg1MmQ2ZjU5YywgMHg1ZmExZjY1YiwKKwkweGY2NzBiNzIzLCAweGI1MmQ0MGY5LCAweDI3ODMzYjUzLCAweGI5ZmU3OGFkLCAweGY5NGVhYTM5LCAweGVhMmZjMzA3LAorCTB4MGFhNTY3MTcsIDB4NTVmOGU0N2YsIDB4NzhlM2FlZGQsIDB4NTNiNzQwN2QsIDB4ODhmZjUxZGMsIDB4YWFmOGE3NmUsCisJMHgyODczMGJkZSwgMHgzNzBlZjQ4ZSwgMHhjNDM4YTdhZCwgMHhmNjJkODc5YiwgMHhmYTE1NGRlZiwgMHhkZjdjODU3ZSwKKwkweGZlYTkwZjY4LCAweDg1N2YwNDE1LCAweGYyNTFlM2FkLCAweGU5YmYyYTQ5LCAweDFjNWYxMGIxLCAweGJmMmY3ZjI3LAorCTB4NWM3N2JmYmYsIDB4YmY2ODNhMGIsIDB4MWQwNDhmZTMsIDB4N2U3ZDA4YmUsIDB4MjJkZWZlYmQsIDB4ZTIwY2E2NjIsCisJMHhhOTE3YzU1MywgMHgwOTZjNGE0ZiwgMHg1MWZkNDhiZSwgMHhmNTQ1NzRlNiwgMHg4M2ZmOTNjNywgMHgwZjc2Y2RlZiwKKwkweGFlNmY3YThjLCAweDBmMzUxNTllLCAweGYyMWNkOGZkLCAweDkwMmM2YTg3LCAweDM1M2U5MWEzLCAweGNmYzg3YTI1LAorCTB4ZWZlM2M1OGIsIDB4MGUzZGY5ZTUsIDB4NjA1MWI5MjcsIDB4N2Y1NWQ3NGUsIDB4MjllNGZiMWMsIDB4N2Q4YmY4MTEsCisJMHhjNDU1M2RiZSwgMHg5ZWM4ODM3MywgMHg1MjI3M2FlMywgMHg1NTZiNmU3NSwgMHhkMGU2NzA5ZiwgMHg4ODdlMjY3ZiwKKwkweGJhYWM2M2VkLCAweDk1YzNkNjhjLCAweDFlNzdjNGRkLCAweGJhMGFlOWJiLCAweGUzZDJmMGUwLCAweDY4NmFlN2YzLAorCTB4NGRlMzNkZmYsIDB4ZmIxYzM4ZmYsIDB4MjE1ZjFlYzcsIDB4ZmI0ZDUzZmEsIDB4ZmFkZmIxYjIsIDB4N2ZhMjdkZjgsCisJMHhkOWJjNjlhMywgMHhiODE5ZWM4MywgMHhmOTI5NmU3ZiwgMHg3ZmJlZTkwYiwgMHg5Yjc1ZmEyNywgMHhkNDE1NWIxZCwKKwkweGE4MDk5NTAzLCAweDRjZDViMGQ3LCAweGY3YTYxNDBhLCAweDJkZGJjN2M1LCAweGMwOTE1ZjY4LCAweDE3NWU2Y2M4LAorCTB4MTU2ZWMwZDIsIDB4YzI2NTc0ZjEsIDB4MTNkOTIwZDAsIDB4MTNhYmQ4YWQsIDB4MGMxMzJhZGUsIDB4OTI2NDc3N2EsCisJMHgwOWRhODc5ZCwgMHhkZDlkNzE1MSwgMHhmYmUxZWY4MiwgMHgwYmZmMzY2NSwgMHhjOWMyNmY4MiwgMHg4N2E1ZWEzYSwKKwkweDIwMGQ5NjBlLCAweGVhOTEzOGZlLCAweGVkZTQzYzY0LCAweDdkMjZlYTliLCAweDIxZWRmMDg1LCAweDAxZmZmZWZiLAorCTB4ZjA3OGU2YmUsIDB4M2VjNTlhZDUsIDB4MjU3OWY1OWQsIDB4ODZmMzhmNjQsIDB4M2U5NDc5MjEsIDB4M2E2YTE1ZmEsCisJMHgyMTA4NGYzZiwgMHhlZWJmYjBlZiwgMHhiMWZlNTM3NSwgMHg5MGYxNjVjNiwgMHhmMjQyN2VmZiwgMHgzNWI2ZjVlZiwKKwkweGRhYTE4ZjMyLCAweDI5YTkxZjA1LCAweGIxN2JmNWE2LCAweGNmZjI1YjdkLCAweDZhMmZiOTE5LCAweDkxMGJhMWJlLAorCTB4MzNkOWMwM2YsIDB4ZTg4MTUxNzQsIDB4NmFhODdmMTMsIDB4ZTFmOTBmNjEsIDB4ZTQ5MGZmM2QsIDB4ODNmOWY4YTEsCisJMHgxODNmODE0NCwgMHg4ZmQxZjNkMiwgMHg3NzdiZjlmMSwgMHhmMWI2NzllNywgMHg2NWE3ODE3MywgMHgwZTlhZWNjMSwKKwkweDA2YjM4ZmVjLCAweGUzZmNhMDZmLCAweDQ3ZmYzNGExLCAweGFkM2I4Nzg0LCAweDg3Y2M5MWMxLCAweGI0NDlmNThlLAorCTB4OGUwNWUyOGYsIDB4MGZmODhjNTMsIDB4MzJkZDNjZTMsIDB4NzA1YzdmYmMsIDB4NDZjMWZkZWQsIDB4NjRlOTY1NzYsCisJMHg3ZjYzNzc4MSwgMHhlODhkYjFjNCwgMHhmMTI0ZGVmMSwgMHhlMTA3ODBkYywgMHgzMDNlMjZlOCwgMHgwNzg1ZWFlMCwKKwkweDhmMzkzODg2LCAweGQ0ZmYyMjAwLCAweDJlOGJlMzI1LCAweGE3ZWM4ZjVhLCAweGRjNzkxMGVhLCAweGZmMzg5ODNmLAorCTB4OGFjMjQ1NTIsIDB4NGRlNzdkZmQsIDB4NzkxYTBmMWMsIDB4ZmIxMDIyZTAsIDB4NDliNTNlNGQsIDB4ZjgwM2UwNjUsCisJMHg5NmEyNTEzYiwgMHhjYjVjNjk1ZSwgMHg3Njg0ZmRmMSwgMHhmNmZlMjYyZCwgMHgyYTlkM2RiMiwgMHhkNWE5YmZkZiwKKwkweGY2YTBlMjVmLCAweDUzNzllOGZkLCAweDA5M2YxYzY1LCAweDU5YzUyYTgyLCAweGM2NjIzYjkzLCAweDQ2N2ZlNzFiLAorCTB4MThiZDRmZWIsIDB4NGQyOTNjZmQsIDB4MzA0MWMzZGEsIDB4YjI0ZjMyMjgsIDB4OTc0ZGM2NDEsIDB4MTBhNzY2NGYsCisJMHgyYjE4NmIxZiwgMHg4YjBmNDhhOCwgMHhkNGE0YzJhZSwgMHhiMGQzM2QzZSwgMHg0OTU5ZTcxMSwgMHgyZGI4ZGE5ZiwKKwkweDhmYmNlYjM4LCAweDg4ZGM2OWY2LCAweGY0OWEzZjBjLCAweDQzNWI5YmFhLCAweGMyY2UwYWVlLCAweDYyMzYzMGJkLAorCTB4MDYxNzI5MWYsIDB4MmZiZjJmMWUsIDB4MjNhZTM4ZjAsIDB4YjBkMzk3ZTcsIDB4NDMzNTZlNmYsIDB4YzNjM2VmNTAsCisJMHgwYzJmODkxNCwgMHhiYmZlMzhkZiwgMHhmNmMxZDE3YywgMHg2MmRiNjI2YiwgMHhlYWQ5ZTQ5NSwgMHg3MTFlODEzNiwKKwkweDExM2QwNGJlLCAweDZjN2QwOGY0LCAweGVhOGQ0OWNmLCAweGI1OWU5MmFiLCAweGNhN2VkMTA5LCAweDkyNGZiOTc4LAorCTB4N2FkNDUwNjcsIDB4ZDA2MmJmODYsIDB4YWNlYTUwZjMsIDB4YzY2M2YyNTYsIDB4ZGZiMTU2M2IsIDB4M2IyOTMyOTIsCisJMHg5M2EyZmQ2YSwgMHgwNDJlZjhkMSwgMHg2M2UyOTc5ZiwgMHg3MWMwODdjZiwgMHg1YWIzYzRjMCwgMHgyOTMyN2Y5NCwKKwkweDYzZjk4M2JjLCAweGNmZDE4N2QyLCAweGVlOGY5Y2E3LCAweGZjYzlhNjk3LCAweGFlZGQyYzU2LCAweGZiMTg0Zjg1LAorCTB4N2ZlOTY5Y2IsIDB4ZGU1ZDNlM2YsIDB4Y2RhNjdjNjgsIDB4ODY2N2M2ODksIDB4MDM5ZjFhMmYsIDB4NmJlMzQ1OTYsCisJMHgxZjFhM2ZhMCwgMHg4OThkNTc4MywgMHg3ZDYxYmYxYSwgMHhkODdmNTQ2MSwgMHhjZDQ0YTcwZiwgMHgxOTgzNDJjZiwKKwkweDc1YmUxZmQ5LCAweDkxZmNkNDVlLCAweGY1NDUxNjNiLCAweDY3NzUzZjQ3LCAweGUwZGNmY2Q0LCAweGJjZjFhODhhLAorCTB4MmVmZTZiZGQsIDB4MzY4NDE3ZmEsIDB4MzQyN2NkNDQsIDB4ZmU4N2JlOWIsIDB4NGJmZTM2MzcsIDB4NTNmZjdlZDQsCisJMHhhMThkYWZmNCwgMHhlN2QyNTZmZiwgMHhhODVlODgxMywgMHhlY2ZiMGIzNywgMHhhNDI1YjkxOSwgMHg2ZjRkNWQzZiwKKwkweDliNzk0MzdjLCAweGY5Y2ViMTQwLCAweGYwM2NjMGFhLCAweDJmZDhlMGQ0LCAweDdhNDI5ZjU0LCAweGRhYTIzMDZlLAorCTB4ZDZhMzdhODQsIDB4MWVjOGFiMDQsIDB4NzEzMjZhM2MsIDB4ZjM5MGQzMWUsIDB4M2Y4NGQzMTcsIDB4Yzg5YTYyZjIsCisJMHg3Yjc4MTk3YiwgMHhkOTIyZWQxYSwgMHg0M2VhNTU0MSwgMHgyNDhlZmE3MywgMHg5MzU0NTNmMiwgMHhmZWM5ZGEwOSwKKwkweDFmZDYxZTY5LCAweGJlMTAxY2U3LCAweDA3NTVmNzE5LCAweDRhYzVlNzAxLCAweDk4MmQyNzkyLCAweGJlYThmYzg4LAorCTB4YTlmYzcyYTksIDB4OGU4M2YyMGUsIDB4ZTRlNmE0ZjYsIDB4OWY4NDUzY2UsIDB4NGU5YjBlMmIsIDB4ZmFhNmFiN2MsCisJMHhmMGRmNjQwMywgMHhhMWU3YTE5YywgMHhkZWYzOWZiZiwgMHhmMTQ5NTg0NiwgMHhlNjVmZDE5NiwgMHhlNjk5YmY1ZSwKKwkweGU2N2JiYjJmLCAweDdiN2Y4YTQ4LCAweGFjYWRkZjlmLCAweDQzYTA4ZDJjLCAweGM1MTczOWU0LCAweGE0MGVhYmYxLAorCTB4ZDg2N2ZiMDksIDB4ZGM3ZWMzMTMsIDB4M2E2YmQ1NjksIDB4NTM4YzNlZDAsIDB4YmI0MDdkODUsIDB4ZjEwZDIwNzEsCisJMHg4OGYyODFmMSwgMHgwMTY5Zjg1OSwgMHhlZDFmOWQzMywgMHhiODI3ZGYyYSwgMHg4MGRmMjFkMCwgMHhkZDlmNGE2ZCwKKwkweGU2NDNiZmQyLCAweGRhM2IyMGZhLCAweDAwOTM3ZDZmLCAweGY3NDQzOGEzLCAweDFkZTMzZGYwLCAweDk1NWRmZTg2LAorCTB4ZWNiYmY4Y2IsIDB4Zjk3ZjllODgsIDB4YWYwMmUxZmUsIDB4OTBmNjIwZjcsIDB4ZTIyY2U3MGUsIDB4MTdmYzA2M2MsCisJMHg0MmZlNWVhNSwgMHhkMjRlZTVlYSwgMHhlYmY5MTFjNywgMHgyNjc2YmI1NSwgMHgyZTdlN2Y5MSwgMHhjNmUzZjg0NywKKwkweDNhNDlkZmYzLCAweGU1NGQyZWZmLCAweDlkZGRhZmYzLCAweDA0N2NmZWIwLCAweGFlNDIyYWRlLCAweGUzNTU3ZWE4LAorCTB4Zjk5MWY1YzAsIDB4MzljNmI1Y2QsIDB4ZTc0NjhhZmMsIDB4YThlNTI3NTgsIDB4ZjkyM2I1YTIsIDB4ZmU3ZjYwNGUsCisJMHhiNzVjMzRjMywgMHg3Yjk1ZDc3MiwgMHhhNmZiZDAwZSwgMHg2NzYxNGM5ZSwgMHhkMmRmYmMwMywgMHg4MmUzODBmNywKKwkweDI4ODE3ZmE1LCAweGNkMzNiNmJmLCAweGE2NzU3MGNjLCAweDA5NjEzODg5LCAweGJiZTQ0ZTM2LCAweGI4MDNlODI1LAorCTB4ZGE2MzdkYTgsIDB4N2MzZmUyMmMsIDB4YmZiMDU2MWUsIDB4YTRjYzE1YTAsIDB4YjNmYTE2YmYsIDB4MzNmNDg0Y2MsCisJMHgzZjY3NzllMCwgMHg2OWNmZWQxZSwgMHgxYjczZWYzYSwgMHhmYjdlZjhmOCwgMHg5MjJhN2JkZCwgMHhkNjM0MGZkOCwKKwkweDgxNDFkNjMzLCAweDNkZWYzZjIwLCAweDQ5OWNjMDU3LCAweDBhZTk5Zjc5LCAweDlmYjgxN2ZiLCAweGVlZmI5ZThkLAorCTB4ZWM5OWJjMWUsIDB4YmJkZmIxYjAsIDB4MGVmNGJmZTAsIDB4ZjAyMmM1ZjIsIDB4ZmFjNmJhZjAsIDB4MTEzNGQ3NDAsCisJMHg0YjAzZjk3YSwgMHg0NGVkMWQyZiwgMHhhNjZkMGRiZiwgMHgzNjg1ZTUzMCwgMHhiZGYyYjM5YywgMHhjZjc1Nzc0YSwKKwkweDljMjMwZmNiLCAweDY2ZjlhZjFmLCAweDdmNzA4MmJmLCAweGJmZTdiY2I0LCAweDNiZjNlMDBlLCAweDQ3NDE1MjllLAorCTB4ZmRkOWYxYmUsIDB4YmM0NDdhNWEsIDB4MmJmZWVlNzksIDB4YWZlODZmMmMsIDB4MjkyNGZmM2MsIDB4MWVhYzk3YTUsCisJMHhkNjBmOTM5MiwgMHgzMjJhMzRiYywgMHg5ZjRlNDg1ZSwgMHhmNzRlOTA5OSwgMHhlMmQyOTMzYiwgMHhjNmM0NmZkZSwKKwkweDNmODg2YmE1LCAweGY2NzU3ZTU5LCAweDVjYmUwZDRiLCAweGMzNzJmOTJkLCAweGY5ZjlhMzBiLCAweGYzZGVhNDg2LAorCTB4MmFmM2ZlODgsIDB4MzQzNmMxZTcsIDB4ZjFhZjM5NWIsIDB4MzU4N2U0OGUsIDB4MzEzMzdlMmYsIDB4OGY1N2NmMzIsCisJMHhhOTViYTk3YywgMHhmNzRiNzI3NSwgMHgwOWZhM2FhNiwgMHgxZTVlNGVmYiwgMHhlYWFiNzFjYiwgMHgxZTczYTJjZiwKKwkweDMyNjlmYWJlLCAweGY5YmRmN2Y1LCAweDZlMDc5ZjJkLCAweGJiZjgzZWJiLCAweDc4OTE3OTExLCAweDc5ZWE0YWFlLAorCTB4YzU0YWY0OTcsIDB4Zjk0ZWFiMDEsIDB4YjkwMzkyYWMsIDB4N2VjMmVlMjcsIDB4MWZlYTJiNjUsIDB4NTcyNWNmM2MsCisJMHgyOWE3YjFjNywgMHgwMGE4M2IxZSwgMHhjMzJhYjdlNSwgMHgyYmU0YWMwOSwgMHhlNTIwOTQxYiwgMHhlZTM0ZDZjMywKKwkweGZiMTgzMmRkLCAweDE2MTZlYTZiLCAweDI1NTZiYjExLCAweDU5NTY3ZDBiLCAweGIxMzcwNGFmLCAweGU5ODczZTFmLAorCTB4YTM2NTI4NWMsIDB4YmZlZTUwZTQsIDB4ZDc3OGUzZTUsIDB4ODVmZWIxNzEsIDB4M2NmNmIwOGQsIDB4ZjU1ZDlkYzYsCisJMHgzODIwNWU1ZiwgMHgzOTVhMzVkNiwgMHgyOTIxNzZjZiwgMHhmYjhjMTk2YywgMHg4NGFiZGE1ZSwgMHhkYzlmN2EwMiwKKwkweDFjNDRiOTc2LCAweDk4ZjQyYWI2LCAweGY1NWRmNjg1LCAweGU0MTFjMmRjLCAweDM4MWQ3NjM2LCAweGI5M2QyMTZkLAorCTB4NTliMWUxYWEsIDB4MzA5MTc5ZjIsIDB4OGI5NjQxZmYsIDB4OTU5NWJiYjUsIDB4ZDVhYzc5OTEsIDB4YTQ0MjBlZTgsCisJMHgwMmY4NDJmZCwgMHg0MGVhZmIxMywgMHgyY2ZhNDk0ZSwgMHg0MzVlMWE2YiwgMHhiNmJkNDJlOCwgMHhmNTg1NjlmZiwKKwkweDk3ZTI0MmRhLCAweGY5ZWYwZTBmLCAweGRmNjg2ZmRkLCAweDkyM2RmZjgzLCAweDdkNzQ1ZmYxLCAweDgwNWYwN2Y4LAorCTB4Yjk0YThiZmQsIDB4NjMzYzVjMGYsIDB4YjJiMmY4YTEsIDB4ZGUyMTdjYzEsIDB4YmE2MzUyZmQsIDB4Y2ZkYTFlZWYsCisJMHhmZDYzOGY4OCwgMHgxMDE2MmRlZSwgMHgxMGQ5M2ZmNywgMHg4MmVjOWU3YywgMHgxY2IyYzdhMywgMHg5YTU3ZjllMSwKKwkweGNlNjhmMDgwLCAweGVjMGFjYjFlLCAweGM4Y2U0OGRiLCAweGMxMWRiODVlLCAweGJlZjU3MTc4LCAweDg0ZjE4ZDc0LAorCTB4NzhmYWM0YjEsIDB4MzkyMWEwZjcsIDB4NTg3N2EyNWUsIDB4ZTk1NzlmMjgsIDB4NWYxMGI0ZWUsIDB4MTczZjg2NTcsCisJMHg5ZjhkZmZmNywgMHg4OWM2ZjJjYywgMHg1NzRlNWZiNywgMHgyNzNmMzNhNCwgMHg2NDM3ZGU0YSwgMHgzMGI5NjE4YywKKwkweDkwYzNkYWY3LCAweDYwYmVlNThkLCAweGE5ZDkwZjQ1LCAweDNiOTEwNzBkLCAweGJmYjdhMjE0LCAweGVjMGVlMDg3LAorCTB4N2NlOWQwNGYsIDB4OWYzZTA3MjUsIDB4Y2ZiMTExZDgsIDB4ZjQ3Y2E1MWYsIDB4Zjk1ZTU5ZTYsIDB4ZjA5OWFjNjQsCisJMHhiMTkzZWZiOSwgMHhmM2RmNTI1YSwgMHhhYWM3NGNhZSwgMHg5Nzk5Nzk3OCwgMHhkZWRkODVkMywgMHgxOGJiZWM5YywKKwkweDllMDkwNzJkLCAweGQ5NWJlZTMwLCAweDE0N2JlNzY0LCAweDJkMmQ4Mzk0LCAweDcwNzI5MTQ1LCAweGM0NWRhYWM3LAorCTB4MDdhYTRkZTcsIDB4MWIyYTAyMjUsIDB4NzlhYmZhMTcsIDB4Yzg4NzkyN2UsIDB4MGNjZTM2YTMsIDB4NGVhYTFmMTAsCisJMHhmYzI3ZjMxZiwgMHgyODliZjcxNSwgMHhmZjUwOGZlZiwgMHgzZmY3NGRjZCwgMHgzOWFjNzI0ZCwgMHgxZTY0NjU2MCwKKwkweGYxZDRkMmE0LCAweGU4ODUxNmFiLCAweGEyNmJjM2JhLCAweGY1ODEwYWZkLCAweDc1ZjBlYTk2LCAweDk0NTUzYzcwLAorCTB4N2JkYzUzYTksIDB4MjAyY2MyNzQsIDB4NTliY2ZkM2MsIDB4MzlhZmJjZTEsIDB4OGIzNWJmZDUsIDB4ZTU1YzdiZTgsCisJMHgyZmEzOTZmOSwgMHhiYmJlZTgwNCwgMHgxMTE0MWM2YiwgMHg3Zjc5YzY3YywgMHgyYTBjMmUzZSwgMHgwMGI5YjNhZSwKKwkweGU2ZWRiNDNjLCAweGM0ZGQ0YjgzLCAweDM4Y2YzZmJmLCAweGRkODY3ZWM2LCAweDJiZDIwMjEzLCAweDUwM2ZlODM1LAorCTB4MWY5ZWM3ZGUsIDB4MDkzYWQzMGEsIDB4MTUyMmJlMzksIDB4ZWU5MzU5ZjcsIDB4NThiNGJlNjQsIDB4MjdjYTFlZmQsCisJMHgzNmZiMjAzZCwgMHhlMDhhYjdjZCwgMHg4YTI3YTViMywgMHhmNWM4N2JmOCwgMHg0OGJhZjllNSwgMHg2Zjc0Y2RmZSwKKwkweDRiN2NlN2U5LCAweDY5ZjA1OTk3LCAweDcxYzAwZGQ3LCAweDRjZmNkNzIyLCAweGUzMmYyMWE2LCAweGI4M2IwNmNkLAorCTB4ZDY1NDZhYWQsIDB4NDRkN2RhNDYsIDB4NzllOGRiZjAsIDB4MWVhNWMxZDcsIDB4MmQ5Y2RmODIsIDB4OTEzMzNkZjksCisJMHhmZjc2MjJlNSwgMHhhOTlmODg4ZiwgMHg2MmI0YzBjZSwgMHg5OWUxMTY2YiwgMHg5ZmY3YTZmMCwgMHg3YmU0YTFmNywKKwkweGY5YTAxZjAzLCAweDExNWU0ODczLCAweGZjYmM2ZjU0LCAweGY4YmQzZjkyLCAweDczNzVkMTJjLCAweDk1YzcyZmFhLAorCTB4YzJiY2Q3Y2YsIDB4YzYyNzc2MjksIDB4ZmY5YzNiOTUsIDB4MzFiN2M5MDEsIDB4ODlmMDk1YmYsIDB4ZmNkMTZmZWYsCisJMHg1MWVmYzIzNiwgMHhjNWIzNWY4OSwgMHhmZTU5M2JhNywgMHhkZmVkM2E3ZCwgMHhmMTQxYmU3YiwgMHgzYzhkZjdjZiwKKwkweGZmNmM5NmRmLCAweGNmZWY5ZWY3LCAweDU0ZTY3Y2YyLCAweDJmNWEzN2U0LCAweDM5OWU3ODE5LCAweGZlMjAxODM5LAorCTB4YTI4MjRkYWIsIDB4YThmOGY4NGQsIDB4ZTQ5Yjk2NmIsIDB4NmY5MWNiNmUsIDB4ZDdiYzkyODYsIDB4NDBkYzc5MjYsCisJMHg5YmU2YjE3OSwgMHg2ZmRjOTE5NiwgMHhmMzI3NzQxOSwgMHhlNDJmMTdmZiwgMHhmYjExYWExNiwgMHg3ZjE3YTcyNCwKKwkweDJmM2JlNzQ1LCAweGUyYzViMWNmLCAweDdjNzNhMWNmLCAweDljNjljZjJjLCAweGVmYmE0OTZiLCAweGY5MTFlOTJmLAorCTB4N2U5MjE4MjYsIDB4ZDdiM2ZjNWQsIDB4NzE5NGQ3YjgsIDB4NjFkYTQ3OWUsIDB4OGYzOGYzOGMsIDB4NWM4OTBkZDgsCisJMHhmYTU3YjY3ZiwgMHg5OGY4MWFlMSwgMHhkMWUwZWM3ZiwgMHhjMmYyYmZkOSwgMHhhOTJiYWEwOSwgMHgzNmMxMzE2OSwKKwkweGI1MjUzZTNhLCAweDkyZmRlZTIyLCAweDBjMTE5MzU1LCAweGIyMTg2ZDdhLCAweDhkMzQzNWQzLCAweDM5ZDg5ZjNiLAorCTB4M2VlMTE2YWYsIDB4Zjg1NTAxMDgsIDB4MGNmOWQxNjksIDB4MjU1ZTJhZjAsIDB4ZGFmMThmMzIsIDB4NjNjYmViOWEsCisJMHgyMWFmZTMzYywgMHg2M2NkOGQ3OSwgMHg5NjliMGU0YywgMHgyM2FlNTI1YiwgMHhiY2RhZjE5ZiwgMHhkMThjZjliOCwKKwkweDUxNzFkMTE5LCAweGMwY2U4NjQxLCAweDdmMDQ3Mjg1LCAweDQxODljMjg2LCAweGYxODMzNzkxLCAweDI2ZWFiZjk0LAorCTB4OWZlMzg1NWIsIDB4ZGU1OTk5ZTMsIDB4OWIxY2FlOTUsIDB4MTNlMGVkMGIsIDB4M2FkYjZjNGYsIDB4ODQ3MGU1MGQsCisJMHg2YmY1MDNjMCwgMHhmMWY1Yzk4OCwgMHhlNmY1MDdlYywgMHhjMzFiNWU0NywgMHgzZGVhMzg3ZSwgMHg0ZTAyZjM5NSwKKwkweDFkMGM0YjA5LCAweDEzN2ZkMDhiLCAweDJhMjdhNTQxLCAweGY2M2UxMmJmLCAweGRiZjEzMjZkLCAweDJkZmQ1NDllLAorCTB4OWI0ZjRmYTIsIDB4MDkyODc1Y2EsIDB4MTVjNTg3NWEsIDB4OTAwZWVlNDcsIDB4ZTA3NjgwN2YsIDB4M2U4NDMzOWYsCisJMHg3YjhhMzViNywgMHg2NWVlOWI0YiwgMHg3NGUwOTkzZCwgMHhlNDIzNTM4ZSwgMHhkODQzMmYyNCwgMHgxZjYzOGFhNSwKKwkweDJjYTBiNTBjLCAweDRjOWQzMjVkLCAweGQ3ZjVjN2NlLCAweGE2NGZhZmVkLCAweDczZGFkZTM0LCAweGQyYTQ0ZjZmLAorCTB4ZmYzNTNiOWYsIDB4ZmYzYzBjODIsIDB4NTFhZWNhMTcsIDB4Yjc1YmYyMzYsIDB4N2UxMmM3MDYsIDB4YWU2Y2UxNDIsCisJMHgyMGQwMmNjZiwgMHg4N2Y2MTVhMCwgMHgzYzI5ZWFhNywgMHg5NTA0YmExNCwgMHg1YjcxYTU0ZiwgMHgyNTdlMzRkMCwKKwkweDU4NTU1ZmYxLCAweDMwZjY5NzljLCAweDZkY2M4YWEzLCAweGQ1ZGZiODU0LCAweGViNGE5MzU4LCAweDc5YjZmZDU1LAorCTB4OTdhZmU5MTAsIDB4ZjM5Zjg0MzIsIDB4ZjEzY2Q1ZTIsIDB4Y2QxYTA2YmUsIDB4MjVjMzNmYmYsIDB4YTI2ODJhOTksCisJMHgzMjRiZTM3YywgMHg1NTc1ZDk0ZiwgMHhmZWM2NzllNSwgMHg1NTMzOGQwNSwgMHg3ZTQxZjIyNywgMHhjZTExYzc3OCwKKwkweDc1NTkzNjhiLCAweDczYzI2ZmEyLCAweDk0ZDFmMDIwLCAweGQ1Njg3ZWMwLCAweDc2NDBkOWUxLCAweDFlMDVkYmFmLAorCTB4MjRmN2M3MDUsIDB4ZmM0NDdjZjYsIDB4ZDU2Y2QzZDAsIDB4YzEzNzNlZTksIDB4NzE1MjAzYjksIDB4MWViMjNkZmQsCisJMHhiNjE5MTcyYywgMHhkY2Y3ZDFkZSwgMHhlOWExMmZkOCwgMHgyNDQzOTQ5NywgMHhlNTdiZTBiZSwgMHg0YzA3NmQwNCwKKwkweDNiZTI0NDc3LCAweGM5NTlkODQ5LCAweGMzMTI3YjU3LCAweGU5NjdiYTI2LCAweDU5ZWZkZjQxLCAweDRlMGZhYjg2LAorCTB4MzgwZDdkZTAsIDB4ZWMwZWQ5NzMsIDB4Zjg1Y2Y0YjEsIDB4ZTVjMzNhNzEsIDB4MDVjODNlMjQsIDB4OGQzNDI3MDEsCisJMHgyNmFmNDlkNiwgMHg4ZTdjYmQzOCwgMHgwOWVlYTcwNCwgMHhhYWUxZmQyOCwgMHgyMDhlOGIxYSwgMHhhNGEzY2ZjYSwKKwkweGM5ZjRhNmNjLCAweDVmNjI1NTc3LCAweGIwYjI4NmRmLCAweGZjYTQxYjI3LCAweDlkMmI2ZWI3LCAweDg1NDdkOTE2LAorCTB4ZmRlZmE5MzMsIDB4ZjhlMjc4ZmYsIDB4OWMyMWRhYjYsIDB4NDhhODBiZmYsIDB4NDliNjNiN2YsIDB4MjE0ZTc0YTksCisJMHhkZTEyMjg1NywgMHgwNzgxNDI4YywgMHhkYmI0MGJhYSwgMHg3Y2VmNzhjNCwgMHgyYTQ3NzNlNCwgMHhlNzllN2ZkYiwKKwkweGYzZWQzYWIxLCAweGY4NWU1OGIyLCAweDBmZjBkMTdlLCAweDE3YzI1MjFmLCAweDc2ZDI0NjZlLCAweGM5NGJlNjNlLAorCTB4OWE3NTczYzcsIDB4ODc1YzNjOGUsIDB4M2NiOGZlZjMsIDB4ZmQ4YzJhMzQsIDB4NzlmZmFiMTYsIDB4M2Y1N2NmZTIsCisJMHg4MGJkYjE1YywgMHhiMzFlZWZmNCwgMHg0ZmY0OWNhNywgMHhmNjcxZTA0NywgMHhlYjM0NWZjYiwgMHgwZWU0MjJkYiwKKwkweDcyNjRmNDg2LCAweDNlY2M2MWRkLCAweDNkMzZlNzU1LCAweGY3NzZmZTRlLCAweGZiYTc0NTQxLCAweGNmNzM2ZWY0LAorCTB4YjJiYjgyNTAsIDB4ZDUwYjMzZTksIDB4ZmMxZDU2NjMsIDB4YjJlYmZkODQsIDB4ZGE1ZWZmNGMsIDB4MzU2MzUyNmYsCisJMHg4NjRkY2ZkNywgMHg4NzNmNWMxZCwgMHgyMGViOTE3YSwgMHg0ZmExNmU0MywgMHhmNTFkOWYyZSwgMHgxZDA0NzU2YywKKwkweDA2ZjI5M2RlLCAweDY0NjFmZTNkLCAweGJjYTQ5YWJmLCAweDFjMzhhNjFlLCAweDc3MmRmZGRiLCAweGY3ZjVhNzBjLAorCTB4ZjE4MGZjY2IsIDB4MTkxYzM1NWUsIDB4MDRkZjc4NGMsIDB4M2M2YjcxYWYsIDB4NWM2YTBlZWYsIDB4YWVmNzljYmYsCisJMHhjNDZmNWVlZCwgMHhmZTUyZDNmYywgMHg1NmZkY2I0ZiwgMHgyMGRmZmE2NywgMHg3Y2I2ZDc3OCwgMHhjMmQyYTE2YSwKKwkweGExYTFmM2FhLCAweDM0ODZmNzE0LCAweDQ3MTljNTNkLCAweDZmY2FmNDhmLCAweDY5NTUzYzhjLCAweDVmOWExNjNkLAorCTB4YWY1ODExNzUsIDB4NTM2YmJkMjAsIDB4YmQyZjdlOTAsIDB4Mzk2NjM4ZGIsIDB4MzQ4ZmRmM2UsIDB4OGIzYjIxNDksCisJMHhlM2Q5MmFmMSwgMHg2MGRmNjZmZCwgMHhjZWZkNWY5YSwgMHg4ZjQ5NjNkNywgMHhmMDIwMjQxZCwgMHhhZjM3NWY3ZiwKKwkweDQzNzg0NjFkLCAweDI0NGUyZmZlLCAweGFjMGJkYjM5LCAweGNkMzkwY2Q3LCAweGY3YzUzOTI3LCAweDhiZmY4OWYzLAorCTB4N2FjYjlmYTgsIDB4N2RhNThmNzksIDB4N2VlNWNiMWUsIDB4MjI1YzkwMTMsIDB4MjAzY2IzZmYsIDB4ZGZjOTNiZmYsCisJMHgzY2EyNzdjYiwgMHg1OWEzZmJmMCwgMHg5YmI0ZjdjZSwgMHhhMzM3ZWNiYywgMHhmZGM5MWY1ZSwgMHhkZmQ0YzVlMiwKKwkweDY0ZWE1ZWQzLCAweDg0M2FhNzM5LCAweGYwZDc5MjQyLCAweDA0Mjc1ZTExLCAweDQ1ZjJkNzQwLCAweGZkMjJmODBhLAorCTB4NjQ4Y2JjZmYsIDB4ZjEyNDJmNzEsIDB4ZDg0MzM5MzksIDB4OWU4ZTUwODMsIDB4ZDg3M2MxZTIsIDB4M2U0YTM1NTUsCisJMHhlOGE1ZWMyMiwgMHg5YTVhN2I0YiwgMHhiZjZkOTdmOSwgMHgyNjUyNDY5OCwgMHhkYTUzODRlZCwgMHhkNjc4ZmY0OSwKKwkweDZkMjhmZmZiLCAweGE3ZDc4NmQ1LCAweDczYzNhODJjLCAweGYyYTUzODZlLCAweGY3MTk2MWY4LCAweDFjOWYyNTg1LAorCTB4YjIxYWY5OTEsIDB4YTg5YTdhMWIsIDB4MTNlN2E2MWYsIDB4ZTVmNTRmYjAsIDB4NGJlYmJkMTMsIDB4OWE0ZDFjYzgsCisJMHhiNTI4ZTNiMywgMHgxMmExN2M1MywgMHgyZGE2ZGI3MiwgMHgxNjZhM2Y2YiwgMHhmYzQ3OWU2MiwgMHg2ZTY0NzBkNywKKwkweDc1ZTNkNTFlLCAweDAyNDJiMzlmLCAweDZkZjBkODgyLCAweDIyMmY0N2NmLCAweDhjM2UxZTFlLCAweGE3NjM4ZmY4LAorCTB4N2ZjYzM4ZjAsIDB4MDYwZDdmZTgsIDB4NmVmMWZmNzcsIDB4NDA5MWVhNDUsIDB4YzdlMjdjZDIsIDB4YWZiNTA2YWUsCisJMHgyMjU0ODA4ZiwgMHhmZGRmNTM2MywgMHgwMDdiN2RhNCwgMHg2NzdmZTc2ZCwgMHgyMjY3MDc3YSwgMHhmMDBjY2YzZSwKKwkweGZhN2RkYjczLCAweGNiMTI0Y2RiLCAweDVjNDU2N2ZkLCAweGU2ZjE2MGRmLCAweDY0MzRmZjExLCAweDg3MWJhODYzLAorCTB4MjI5OWFkNGYsIDB4ODU2NDUzZWYsIDB4Mzc5Y2Y3YjgsIDB4MTgzOTBhNjcsIDB4MGFlZDgwMTUsIDB4MzNhYWViYzcsCisJMHhkNGJmNzQ4OCwgMHhlODJkN2FhMCwgMHhjMDg0NWQyZiwgMHg2ZmE0YTk5MiwgMHgwMWY3NWU2NCwgMHhmYzVlM2Y5MCwKKwkweDI4M2NmYTQ1LCAweGRmOTAwZmJiLCAweGMxZWI3NjgyLCAweDExZDZjNDVmLCAweDMxNmZkOTc4LCAweGViMDA1OGYyLAorCTB4MmI1ZmM0NGQsIDB4MGZmODE0OWIsIDB4NjdhYWM1YzQsIDB4OTNhZmU3YTIsIDB4MWJhYmYyNzUsIDB4OGMxYjFkNzcsCisJMHg1Y2YzNWQ3NCwgMHgyZGY5MzhjYywgMHhlMjExZmY3YywgMHg1ZDVkNzg3OCwgMHhjZGMzM2Q3NCwgMHgxOTdmZDI5OSwKKwkweDdmYzljMzBlLCAweDNkNjJiZTQxLCAweGQ1YTBkNjYxLCAweDYwYWM3YzhhLCAweGY2MjI0MzE0LCAweDBiZTA0OTkyLAorCTB4NjdjYjJiZjUsIDB4OGE2ZjYxYmUsIDB4YjllYTVlODUsIDB4OTRhNzVjMDQsIDB4OTQ3NDNiYmIsIDB4ZDRhNjgxZWEsCisJMHg4ZjY4Nzk2NSwgMHg5ZjE4OWEyOSwgMHhlZTI1OThkMiwgMHg0YWEwYjRhNywgMHhiYzkzMGM3NSwgMHg3N2VjNTlmZSwKKwkweGE5NjdiYzA3LCAweGQ0OTU2NGRlLCAweDVmYzRlMDk3LCAweGQzYzhmYmNhLCAweGRkZmU5MmFmLCAweDlkNmM2MGVhLAorCTB4OTU1M2MwYTgsIDB4ODIxOTM3OWMsIDB4Y2FlZmI0MzUsIDB4NjlkZWEyZGQsIDB4ZjllOGVlZWQsIDB4ZWI0ZjEyNTUsCisJMHg4YzdkM2E5ZSwgMHhhMTE1ODVkMiwgMHhhNzg5NzE5OCwgMHgzYTk4YzZhYSwgMHhkYzM4YjExNiwgMHhhZGVmMjk5ZiwKKwkweGY1ZmI3ZDY0LCAweGQxZmM1YmQ2LCAweGI3OGRmYzJjLCAweGY4YzYzYWU1LCAweGVmOTE0Y2U2LCAweDEwNjNjNGFkLAorCTB4ZDUwNWQ3N2QsIDB4MmFkMWYxMjAsIDB4ZmMyYzkwMjUsIDB4YzcyYzcwNWUsIDB4YjA2N2RkZjMsIDB4YmRjZmFjODEsCisJMHgzZWU5ZTI1ZiwgMHg3ZTdjM2ZjOSwgMHgxOWUyYmY3YywgMHhmZGM1N2RmMSwgMHg3Zjg2OGIzZiwgMHg4MzJjZjgwZCwKKwkweDBkODNmOWYxLCAweGRlNTBiMDNmLCAweDU2ZGY5NjMxLCAweGZmZDk5OWQ1LCAweDEzZjEyMzVkLCAweDdhNmI1ZmNiLAorCTB4ODU4NzY3ZjksIDB4N2YyYzViZWMsIDB4NmI5NWZhNTUsIDB4ZjZmYzJmYzAsIDB4MGRmODViZmYsIDB4Y2I5MWFmM2EsCisJMHgzOTg3MzVhYywgMHgwOWY2YjUzZiwgMHhhYmY5NDNjNSwgMHhmN2FiOWQ2YiwgMHg3ZjdjZjIzYywgMHgzNTllYjllZiwKKwkweGM2MDYzZGU4LCAweGE0ZTdiZDMwLCAweDYzYmQxNzVkLCAweDk2YmRlZGZkLCAweGU3MjZiY2RlLCAweDY2YjcyZjA1LAorCTB4ZTBkZDNlNzMsIDB4NjY3NWQ4YWIsIDB4ZjY3ZGJmNDksIDB4YmQ3ZmMyNTMsIDB4Mjc2MjU4ZDQsIDB4YTRmYmEzZmYsCisJMHg5Y2U4YTNjOSwgMHhjMDJlNGNhZiwgMHg1NjZmOGZmMywgMHhlZTkxZmM4MSwgMHgwMzNiZTFhNiwgMHhhOWUxN2YwOCwKKwkweDVmOTRjNWEyLCAweGVkMGE3ZjFmLCAweGI3MDdkZDEzLCAweDAyNTdmZDE2LCAweGQyN2IwN2RmLCAweGI2NjdlZTQ4LAorCTB4YmRmYjQ4OGQsIDB4ZmI2MWQ3ODMsIDB4NzBiMjdkZGUsIDB4ZTllOTM5NjcsIDB4YjQ0NWE1OTMsIDB4NTRlMzgyYWUsCisJMHhlZDI4NWU5ZiwgMHg0MmM5ZjU1NCwgMHhiZDg0NDc3YiwgMHhjOGE2NGRmYSwgMHhmZjcxNmZjZiwgMHgxYjhhNTFmZSwKKwkweDdiMzVlZjY2LCAweGRiMzIzZjI4LCAweDgwOTRkZmVjLCAweGEwYmUxNWYwLCAweGI3NzFhYTc4LCAweDllNDdlZDYzLAorCTB4YmU1MTc1YTQsIDB4ZjM4YWNkMjgsIDB4OGQwOGU5ZmUsIDB4MTg1MWVkNTcsIDB4YjJhNmVlZmUsIDB4M2Y2NDNkYmMsCisJMHhlYzg3YWE4MywgMHg3ZGQzNzc2MiwgMHgxZjkyMGZmOSwgMHhmZTQwZmNkNCwgMHgxZGZiMTE3ZCwgMHg2NmZhMTU0YiwKKwkweGI2NjYwZGY2LCAweGVjODM5ZGQ3LCAweGJjYTcyZWJmLCAweGViMTc3N2E4LCAweGZiNDNjZThkLCAweGMzN2RmYzJjLAorCTB4NzhkYzA1MWUsIDB4YTNlZTYzY2UsIDB4M2ExZTEzMmYsIDB4NTBiNjljMGYsIDB4NzBkMjUwMTAsIDB4NDcxMWQyZGEsCisJMHgyNWVkMWI3ZiwgMHg5Y2MyZjMwYywgMHhlMTYxZGRhZiwgMHg3ZmZkY2RmYSwgMHgyYjc5ZDBiMCwgMHhmMzg0ZmI5ZiwKKwkweDdlMjg2YjZmLCAweDE5ZWYzZjIwLCAweDNhNzdiZjk1LCAweDg1YWFmY2RhLCAweDRlYjJiNGY4LCAweDkxNTkwMTgxLAorCTB4MjcxZTY2ZTMsIDB4Y2ZmZDRhZmQsIDB4MzY5ZTg0ZWEsIDB4ZTQ4NTdmZjgsIDB4MGRmZjgzNzcsIDB4ZjUyMTU4NzksCisJMHhlMzViN2RkYSwgMHhmZmExYmJmMywgMHg5NmVmMDQxZSwgMHgwM2RlYjg0MSwgMHgwZWI5Y2I3NSwgMHhkMTFkODFlOSwKKwkweGZjNTI1N2YzLCAweDE3Y2QyMzdhLCAweGE5ZjJiZWZjLCAweGJkZDVmMWU4LCAweGZkNjAxZTdjLCAweGJmNDdhYjFmLAorCTB4MmU3ZmY0MzMsIDB4NWY5ZjEyZTQsIDB4YTYxOGFmMGUsIDB4N2Q3ZDNjYTEsIDB4ODgzMGNkN2EsIDB4MjkzY2FmOTMsCisJMHg2ZWMzMDZmZCwgMHhkODliMGU1ZiwgMHhlYmNlYzVlZSwgMHgyMTYyYmM2YSwgMHhmYWQ1NWI3YiwgMHg2NzczZjYyNywKKwkweGY0Yzk3ZDM1LCAweGUxNmE2ZjI4LCAweGMwNWJkOTdhLCAweDc5ZjA4ZWJmLCAweDQ5ZGQ5MzRiLCAweDg3Nzk3NmZlLAorCTB4OWFmMzAzZDAsIDB4NDJhMGMxYWMsIDB4YTI1YWExZTMsIDB4ZjE2MWY3NzMsIDB4OTBlMDQ5YmQsIDB4NDgxNmZlYzIsCisJMHhlMjUyYjhiZCwgMHhlM2M0YTU3NSwgMHgwNmUzOGM0YSwgMHg4YzhjN2Q1MywgMHhiYzY1MmJlMywgMHhkNzY3M2FiZSwKKwkweGE5MjkyYTMxLCAweGRhZWJlMzk0LCAweDFlMTMyNjhlLCAweDViZDA4MWU3LCAweDZmNDI0MmYzLCAweGVjMzFmNDE5LAorCTB4NDBiZWFjNTAsIDB4ZDEwZjc3MGIsIDB4OTU5MzZkNzcsIDB4NGJlN2Q2ZWIsIDB4MGViZjM1YmQsIDB4NWZkMjk2ZjUsCisJMHhiNDBmNzQ3ZiwgMHg3ZWYxZmM4YiwgMHhkZGFjNzcwMSwgMHg5ZTg4NmNhZCwgMHhmYzIwMWFlZiwgMHg3ZmQyY2JkOCwKKwkweDRkMTAxYzJlLCAweGIwMWVmMjk3LCAweDllN2Y3ZTUzLCAweGZjODI3YWFlLCAweGZiNDZiYjU2LCAweDdlNDU4ZWI3LAorCTB4ZjU1YmY1YzMsIDB4ZWFmMTI5ZTEsIDB4NGRmNjhjYjUsIDB4ZmQxODE3MTksIDB4YzM2Nzk0MDUsIDB4MGVlNzIxZjksCisJMHhmZmRjNjQ0NywgMHg3Zjg0MDM5ZiwgMHgxYWIyNjZiMywgMHhjNDQ2YmEyMCwgMHhiMzBhMGI0OSwgMHg3MzQ5YzZlMiwKKwkweDg2MzdmNDA5LCAweDcxYjNmN2RjLCAweDc3OTI3MTkxLCAweGI3ZTIyOGQ3LCAweDJjZWY3NTdmLCAweGFhYTZiYWE3LAorCTB4YmEyZmExM2EsIDB4MjliYWUxMjYsIDB4ZmIwM2Y3ZTQsIDB4ZDY3NTU1ZDEsIDB4NTUzM2M1MjAsIDB4N2RmYzJmYzgsCisJMHhjOTA5ZjExYSwgMHg0NjUyOTM2MywgMHhjNjcxODI3YywgMHg0MmZlYjRlZCwgMHhmM2M0ZWFiYSwgMHhmYjQ0NmMyZiwKKwkweDJjMmZjYjhlLCAweGFiZjk5MmZkLCAweDM3Mzg4NDZkLCAweGJjNDA2ZGUyLCAweDM3ODhjM2I4LCAweGJmMGFhZjJhLAorCTB4YTk1ZTc4ZDYsIDB4NTFkYzcwNzUsIDB4YjVlYTI0ZDksIDB4MzM3YzhlMWIsIDB4ZWRlMTBiMzQsIDB4ZDBmM2ZlNmUsCisJMHgzZTRmNTRlNSwgMHg4NmU3ZDg0MCwgMHg1NGE3ZDBlMiwgMHgxZWY1ZjQ1NywgMHhiNWZmNWM1YiwgMHhiNTJiZmY1NywKKwkweGU2OTUwZjJjLCAweDZiZjY0YzhlLCAweDc5MWZhMjBlLCAweGI3ZDFlYTEzLCAweGE1MzhlMGJmLCAweGJkYzI0OGUxLAorCTB4NWFlYmNmOTQsIDB4ZmNlNjFmZTEsIDB4YzM1NTNhMWUsIDB4Mzc4M2Y2MjYsIDB4ZTRiNzJkNDEsIDB4OGRmYTQ1MWYsCisJMHg0ZWEyOWQyYiwgMHgzZjY5NDFlOSwgMHhmMjA4ZmZhOSwgMHg3NzM4ODNmNSwgMHhmOTdmNjE0NiwgMHg4NTQ5ZjQzNywKKwkweDEwZDVlYmU0LCAweGU5NTUzMmQ4LCAweGE0MmEwN2FmLCAweGRmY2RhY2RjLCAweGY2YWU4NWI1LCAweDBhYTdmZDYzLAorCTB4MzExODRmMjksIDB4ZjU4Y2JkYjAsIDB4ODYzM2ZlOWYsIDB4NGVkZmFiNWYsIDB4YmJiOGZmNjQsIDB4YWU1Mjc1NGQsCisJMHhhYmZiZjExOSwgMHg2MjI3ZTQ0MSwgMHgyNzFkOTA1YywgMHhlNDg1ZmI1ZiwgMHg3Zjc5NGVjZiwgMHg2NTQ5M2Q1YywKKwkweDhiMjY5OWZjLCAweDEwYjdmMGQ2LCAweGRkMzdjYzhmLCAweGIyNDExZGE3LCAweDVmODc3OTZmLCAweDU4M2UyNmNkLAorCTB4ZGVmYTNiYmIsIDB4ZTdlOGU4ODksIDB4YzhhMGIxYmEsIDB4N2NlYzg1NDcsIDB4YmY4YzY1MTcsIDB4MzFkNWY4NzQsCisJMHg2ZmQ1NmZjNCwgMHhkMDRhM2I3ZiwgMHg5NjUxOWJlNywgMHg2N2MzNmJmNCwgMHhlMjIyOGFiNCwgMHhlMjIyOTM2NiwKKwkweDQ3NWFmZGU2LCAweDU1NmJjNTMyLCAweDY0NWY1NTA3LCAweGVmNDFiZjNkLCAweDgxM2NhNTk3LCAweGY1MDNmMjI2LAorCTB4YWJlNjc0MDMsIDB4MWZjMTI2ZWEsIDB4ZTJkMTY2YTYsIDB4N2U0NDRiZmUsIDB4ZjdmYmNjYzgsIDB4YmU0NjJmMWIsCisJMHgwNjdiMWVmOSwgMHg0MGYyMTcwNCwgMHhmOTg3Yjk5NSwgMHg4OWI0ZWFhZiwgMHg3ZDNhYTllMSwgMHhjNDQ0NzMzOSwKKwkweDc3NWEwMTdiLCAweGVhYmZlOTAwLCAweGM0ZmFjMDc1LCAweGU3NmZhNDBlLCAweGQ4OTFmN2QzLCAweDAyN2VmZjlmLAorCTB4YjJjNzYxZmIsIDB4ZmI4Yjk3YjcsIDB4N2Y0ODE1MmYsIDB4OWFmNmZjM2QsIDB4NjBmNjkxZDEsIDB4MmY3MTAwZTIsCisJMHgzNzA3ODQwZSwgMHgxMGJmM2Y3OSwgMHg2YzNjNGJmYiwgMHhiZjMyNDU4MiwgMHhhZjc5ZjgyMCwgMHgyZTMwOWI4YywKKwkweDljNDA3MzdiLCAweGZkN2FlY2I4LCAweDJiNjZlYWU5LCAweGVhYjlmZTUwLCAweDE5ZDcyYjAzLCAweDkyYmNkZDdkLAorCTB4ZWFiODdlZTMsIDB4MDZmYTRkMWYsIDB4YTkxYmZlZmMsIDB4Y2FmMGY4N2QsIDB4ZWJmY2Y0ZDEsIDB4ZTQ2ZmFiYzMsCisJMHgyOWIyYTk3YywgMHgyMDExY2YyYSwgMHg1ZmU0ZGNmOCwgMHg1ZGVlZjU3ZCwgMHg2OWI2N2ZlNCwgMHhiNjE0OWZlYywKKwkweGVlOTc3ZDlkLCAweDk4MzVmNzY5LCAweDhhZDFkYmY5LCAweDA2NzYxM2ZkLCAweDJhYWZjODkyLCAweDExZGY0ZjljLAorCTB4OThkNTZiZWQsIDB4MzJkZmQwZmYsIDB4ZmIzYjJiZmMsIDB4ZDg4YWE3NTcsIDB4N2M3NWMyYmYsIDB4NGU4YjZlNDEsCisJMHhhN2JhZDM5NCwgMHg5YTY4OGI4YSwgMHhkN2E0ZTM4MiwgMHhlNTdmOTNjNiwgMHgwY2I3ZjNlOCwgMHhmODkzM2U3OCwKKwkweGUwNDk2ZWVjLCAweGQ5MDI4YmJjLCAweDQ0NjBjZjgyLCAweDFhZWJkYzE0LCAweDY0ZmY2NzVlLCAweGY1MWFhMzVkLAorCTB4ZGVmMTg4ZmQsIDB4N2I4ODA2NWYsIDB4M2UwY2VmODcsIDB4ZTY1ZTI5MGIsIDB4NWRhMmJkYTMsIDB4OTMyZmI4ZDcsCisJMHgxY2Q2YjFjZSwgMHhhZWE5M2U2MiwgMHgzZGYxOGIzMywgMHgwN2JhMDVhMiwgMHg0MTFmYzA5YSwgMHgyNzNmMDgwNywKKwkweDY1ZDIxMWU4LCAweDg0MzgyNTllLCAweGJkYmRmYWZjLCAweDJlYjI4YWY3LCAweGY1ZWEyODI0LCAweGYzODc1YTZhLAorCTB4NWI5NzRjNzcsIDB4YjNjN2E1ZjcsIDB4OWVlOTI3NDMsIDB4ZTNiZTFkMDcsIDB4OGExZTIyNTksIDB4NWJhZGZmMWQsCisJMHg5ZjhlNDFlNCwgMHhmOGYxZmExMywgMHg3OGU4ZmY0YywgMHhjNTAwMzI3YSwgMHg0OGEwNWYyMiwgMHhlZjg4MzVmYSwKKwkweDM1ZTc2M2VkLCAweGZlNzg3YWQzLCAweGM3MDI0M2RkLCAweGY3M2I4Zjg5LCAweDYzZmRmMDI2LCAweDc1ZTQ0YmE3LAorCTB4MzRkYmVhNGIsIDB4NmQ2NjFlZmEsIDB4ZWM4MTMyODMsIDB4Zjc5Y2RhZDIsIDB4ZWMxOTdiZjgsIDB4NWM5ZTkxMTcsCisJMHhmN2M4M2UxYiwgMHg3Yjc1MTVhZiwgMHhjMGUzNzk2NywgMHhlYzJkZGRiMSwgMHg5ZGY5M2NjMywgMHg3Y2Y4ZWM3MiwKKwkweDNjMDY3ZTM5LCAweGRiOWUzMjE5LCAweDY3M2VmNzRlLCAweGYxNGVjZGNhLCAweGVlZjg5YmRkLCAweGQ3YTk1NmY1LAorCTB4NjY2MmRmMTcsIDB4ZTgwY2VhM2YsIDB4MjI3ZjcxNjYsIDB4NDgxNjM5ZWUsIDB4ZDRhYjdkYmQsIDB4NjNkZmIxZjcsCisJMHg3NmZkZmExYiwgMHg2N2MyY2ViOSwgMHg3M2RkMzM2MCwgMHg3ZDlmN2VjNCwgMHgxNzBmZjRiYiwgMHhlZmQ3OTc4MSwKKwkweGY0YmQ1ZGY3LCAweGZlZmY2MzEzLCAweGVhNWI4OTQyLCAweDhhMzA1MWY1LCAweGVkMDg3YWY0LCAweGU0NWJkNzBkLAorCTB4OWVkZGIwMjYsIDB4YWUzMjMwNWYsIDB4YTlkZjQxZGYsIDB4NzUzYmYyZWIsIDB4NTdmYTBkNmEsIDB4ZjZjN2JlZTcsCisJMHhiOWNiNzhmMCwgMHg4NmZiZjk5NywgMHgxZDkwMDk3MywgMHhjZmFkOWVlNywgMHhlNDdhMWExZSwgMHg3OTc3NDEzNiwKKwkweDE0ZTE1MWVmLCAweGJmZjQxYTMwLCAweDY0NWExMTg0LCAweGZmYTBjZDdlLCAweGZmMGU5MjgzLCAweDM5NDU3NWM3LAorCTB4NjNlNjQ1YTAsIDB4MDdmZWE5MGUsIDB4NDc1NDE5ZGQsIDB4MzhmZWM5ZGQsIDB4MjFlZDgwOWUsIDB4M2NhODZiOWUsCisJMHg4NDZiNTBkNywgMHg3MDM0YmI5ZCwgMHhlZTNlNWM3OSwgMHg0MDZhNWYzYiwgMHg2ZTc0OTNkOCwgMHhlY2FkNzI1YiwKKwkweDE0ODQ1NjM3LCAweDIyYjBlZWZlLCAweDliN2ZhMjBjLCAweDUxY2FmOWMyLCAweGJmNWMyZDBkLCAweGYxNTRhNGIxLAorCTB4M2M1YTg1NzgsIDB4N2MxOWYwNGIsIDB4ZmMyNmMwYjQsIDB4N2E1ZjgzMDMsIDB4ODhmOTI1ZjEsIDB4Yjg1ZmM5YzYsCisJMHhiMTBiZmE1NSwgMHhkYTFhMzRmYywgMHg0YmZhZDE2NywgMHhlYTg3OGFiZCwgMHg0N2M5YWYzNiwgMHg0ZWJkYzZjYiwKKwkweGY4YjVlZWUxLCAweDRjZDJmOTA4LCAweDlmOTYzMTdhLCAweDFmZmI3MzVlLCAweGI3NzVmYzI1LCAweDgwNTI1ZTVmLAorCTB4ZmRjZjFmZWIsIDB4NGZmMTI4NmMsIDB4ZThlNDM1ZTUsIDB4ZGRiZjQ5NDUsIDB4YWU3MWMwOGUsIDB4NzU5N2E5NjMsCisJMHg4ZGI5ZjUwNCwgMHg1Njk3ODQxZCwgMHhkM2IyYmY2MCwgMHg4MzY1YmVkNSwgMHg4ZWI5YjdmMCwgMHhjMDljMjJhMCwKKwkweDRkMTVhNWY1LCAweGFkNmVmZTc2LCAweDcxM2FhMWEyLCAweDI2ZTNlOTBjLCAweDdlYzc2M2Q1LCAweDUyZTljMzc5LAorCTB4MTc5NDIzY2EsIDB4MmE5NzNhODksIDB4YWJiYmE4YmIsIDB4YmJiYThiYjIsIDB4ZTdmZWU5YjksIDB4ZWZmODEzZGMsCisJMHgxMWQ3NDQwMywgMHhiNTdlM2E1OCwgMHgzZWY4N2JlMSwgMHg5MzM1ZGY1NiwgMHg3ZmUxMzcwZiwgMHg0YjM1MGY0ZSwKKwkweGJiNjg2Y2ZjLCAweGM0ODYzOTkyLCAweDg4N2ZkZDM0LCAweGZkN2VlZWUwLCAweDhhN2QwYjQ1LCAweGQ1ZTYzNTUxLAorCTB4ZDY4MjU0NTksIDB4ZGU3OWQ2ZWMsIDB4YjUyZDc1MmQsIDB4ZTAzNjU2OTQsIDB4NDI5ZGJiYjcsIDB4NDM4MzlhZWYsCisJMHhiZmNkNmZkOCwgMHhlYTliN2FiZSwgMHgyNThjNmY4MywgMHhkMmQ1ZDVmYiwgMHhjMTEyZDYzNiwgMHg1MDFiOWRlZiwKKwkweDYzYTFjNzZmLCAweDFjYTQ5ODM1LCAweGNhMmFkYzZiLCAweDA5NDdlOTIyLCAweDNlNmFhZWI5LCAweDhiZjk0OTlhLAorCTB4N2NlNzkyNGUsIDB4MWU0OWRmNmEsIDB4ZGVjNTZkODEsIDB4YzkyM2M5MzMsIDB4NWEyZmQ5OWYsIDB4NGQ0YmJkNjMsCisJMHhhZDAzY2YyYSwgMHg0OWVkZDQ2MywgMHg2NjZkZjA5MSwgMHhjNDg1MmVmOCwgMHhhMzFkMDAzYSwgMHg4ZTQ0MTcxNiwKKwkweGQ2YmZmY2Q3LCAweDNlODUxNzA3LCAweDA3ZDI4OGU4LCAweDE2NDI5ZTA2LCAweDAzODhlZmUwLCAweGE3NWNhZDg3LAorCTB4YWUzZmY3NDAsIDB4MDM2YTNhMDgsIDB4YzI2ZWZkMDUsIDB4NzZlNDhhNjAsIDB4MGY3YmRkMzIsIDB4ODM0Zjk3MjcsCisJMHg0MWFmYTliYiwgMHhmYmE1NGI1OCwgMHhlYTJhYjBlOSwgMHhiZWIwODZmYiwgMHhiZmY3Mjg5ZiwgMHg1MGI3MGI0OSwKKwkweDc5NjRmMDNkLCAweGRhMDUzYTVmLCAweGU4MGNkZTc5LCAweDRlMGJkNmUxLCAweDE4YmEwZWZlLCAweGIyNGVkYzNjLAorCTB4NWE1M2U3ODUsIDB4ZTIxNDNmMmIsIDB4OTljMjdiZWYsIDB4NGQ4MmViOWEsIDB4ODcxZDZmN2UsIDB4ZDM3ODdkZGUsCisJMHgwZjgxODJlMCwgMHg0NGQ1ZWU5NSwgMHg3OWVjNTMzZCwgMHhmYzI4MTg2ZSwgMHg0MmJjOWJiYywgMHg0MTRiOTEwZiwKKwkweDIwOTNjMGY1LCAweGQzZjlmN2M0LCAweGViZGU0M2ExLCAweDU0YzczZmM3LCAweDFlZTkwYjhjLCAweDMxYmEzYTZmLAorCTB4MjA4ZjhjODksIDB4ZTc0NjlmY2YsIDB4YTc5ZGUzNTEsIDB4MTk5MzNlNjMsIDB4OWYwNDlkNGEsIDB4N2QzNGNlMTIsCisJMHg3M2ZlYmY2NywgMHgyODM1NTM3NCwgMHhlYmVmYmRlNSwgMHg1MTcxZmFlOSwgMHhhN2E4M2RkZiwgMHhhOWY3OGRlOSwKKwkweDdhZjE1OTdlLCAweDQzZDliZWI5LCAweGZjNTM4ZGRmLCAweDdiM2FkNjEzLCAweGMwMzY1OWY1LCAweDcyMmI4MTk4LAorCTB4ZmJlODRlMDYsIDB4YzBmYzA0NmUsIDB4ZGZiMTI0NzUsIDB4Mjc3YzQ0OGQsIDB4ZmUyMzE3MDIsIDB4ZTc1MTkyMmUsCisJMHg0OGI4M2JiYiwgMHg2NTkxM2FhNywgMHg3YmZlMzZlOSwgMHhhMWI2ODUzYiwgMHg3OWFmMjllMywgMHgzMzlmY2QyOCwKKwkweDdkZWE4MzMwLCAweDYyZjI0NmViLCAweGZiMDI3MDVhLCAweGVjYmY5MmI5LCAweDc4NDQ5ZGUwLCAweGY3YzZiYzUwLAorCTB4ZDM3Y2MwMmIsIDB4MzIwYmY3ZmIsIDB4YjIyN2JmODEsIDB4M2U3N2M1NWIsIDB4NmQxZjkxZGIsIDB4M2EwNTJjYTksCisJMHgyM2MzNWZkNSwgMHhkM2Y5M2EyNSwgMHgwZjM2NWM1YiwgMHgyNTZjNDc3ZCwgMHg3MDdkZWRiOCwgMHgxZDQ0ZDhkNywKKwkweGQ0NGQ4ZDQ4LCAweDcyZjUxODc5LCAweGIxYWQ3OGIxLCAweDhmNGU3OTE5LCAweDk4ZjFmZDhkLCAweDYyN2U5MGVmLAorCTB4Nzg0MmRmZjMsIDB4OThhOTI4N2EsIDB4ZGU1MzBlZmYsIDB4NWNkY2QzMmIsIDB4N2ZiZjI1MGYsIDB4ZjAzMDQ5YWEsCisJMHhlN2UzNmM1MCwgMHhlYzk0ZjU3ZCwgMHgzZDUyZDY2NywgMHg5MzU5YzIzNywgMHg3OGZmNWMwMSwgMHgwYTU0NjkzNCwKKwkweGI0ZDU2NWQ1LCAweDlhZWU3YTg5LCAweDc3ZWIwMDhjLCAweDdkNjE1ZmIzLCAweGQyNWFkMzVmLCAweGIyZTJmNjRhLAorCTB4ZGQ3NWMyYzMsIDB4MDc1MTJlMzUsIDB4ZDA4MGM4MWYsIDB4M2QzNDdhZjMsIDB4YTBmNDE5YTYsIDB4OGY1OTRiZmIsCisJMHg1YzY1ZDA2NCwgMHg3YmQwOTQzYSwgMHg5MWRlYzJlMywgMHhkYjQyOTM4NCwgMHhmZGQwMzdjYiwgMHg3NDcwYjhjMiwKKwkweDY5ZDIxOTdkLCAweGY3YTlkMTM1LCAweGM5Y2QxZTNiLCAweDdkMDYxZWY1LCAweGQ5OTg3MTkwLCAweDA2ZWU5MjlkLAorCTB4ZGZjNjljYmQsIDB4NTE2YWYwMjMsIDB4YTBjMDhmN2YsIDB4NDE0NGY2ZTMsIDB4ZTA1NTMzMmYsIDB4NzU3N2U3MGMsCisJMHg0ZTk2Mzc1YSwgMHgxNGUxMWJmZiwgMHg0YmIwYmFjMSwgMHgwMDAwNGJiMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB4c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4Mjc3YmZmMDAsIDB4YTNmMGMwY2QsIDB4YTVmZDgxMWUsIDB4NzliYTE4MTgsCi0JMHg4OTY4YzU1MCwgMHgzMDMyNzEzNywgMHgzMDMxNzBiMCwgMHgwNjcxMDI2OCwgMHgyMDM2ZGVkMCwgMHgxN2M0MGVkZCwKLQkweDEwMjJmODgwLCAweDMwMzM3MTliLCAweDExNzEwMjE0LCAweGYyMDMyZjEwLCAweDU2ZGNkMDkzLCAweDUwYzBjNGMxLAotCTB4NDAzNWM0MDUsIDB4M2FjNDA3NWMsIDB4YmEwYzBjOGMsIDB4MWZkYmM0OGMsIDB4ZjBjMGM0MmYsIDB4ZDdjMTBjNDIsCi0JMHg0ODYwNjcxMCwgMHhmZjlmYTQ5MSwgMHg1NGVlMWIwNywgMHhjMjdkYWZhMSwgMHg4NjBjMGNhYSwgMHg0NjYyYThiYSwKLQkweDVkNjM3YzY4LCAweGEwOTg2NmZjLCAweGYxYTI5YmM5LCAweDE3ZThmMGNkLCAweDg3ZTU0MGI0LCAweGUzZjJhMjE5LAotCTB4NzYxODE5OGMsIDB4MzcwOWE5MjIsIDB4NzQxNmVmYzQsIDB4ZjdhODAyZmMsIDB4MDAwMzEwMjUsIDB4MjIwMzdiZWIsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4OTNjYmZmMDAsIDB4NTFmODYwNjUsIDB4ZDJmOWMwOGYsIDB4YmNkZTBjMGMsCisJMHhjNGI0NjJhOCwgMHgwYzBjNWMwYywgMHgwZTVjNDA0MSwgMHg3YjQwMWFjNCwgMHhkYmU5MDE2ZiwgMHhjZGNlMWM0MCwKKwkweGM0MDExMGMwLCAweDFmZjg4MWZiLCAweDYyMDdmZjEwLCAweDA0ZDYyMDBkLCAweDc5NDA1ZmUyLCAweDViMWJhODQ1LAorCTB4ZGExODE4OTgsIDB4ODgwM2I4ODAsIDB4ODc1ODgwYmIsIDB4OTc0MTgxOTEsIDB4OTNmYjc4OTEsIDB4ZGUxODE5ODQsCisJMHg3YWY4MjM4OSwgMHhjZDBjMGMxMiwgMHhmZmYzZjQ1MiwgMHg1NjMxYzM2MCwgMHgyOWVmYjVmNCwgMHgxNzRlM2VkMCwKKwkweDE5YzczZjA0LCAweDUwNWMyNDk4LCAweGUwYmI3MGQ1LCAweDRkMDc4MzM3LCAweGNmOGQxNzllLCAweDllN2Y0Nzg3LAorCTB4NWNiZjJhMjEsIDB4NGQzZjk1MGIsIDB4MjNlMTgxODcsIDB4MmQwYTlhOTIsIDB4Yzc0MTZlZmMsIDB4MGMwYzQ2OGEsCisJMHhhYmM0NDY0YSwgMHhjYThjNjBkZiwgMHhkMDgxMzAwZiwgMHhiMWFkZjkwMCwgMHgwMDAzYTgwOSwgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB4c2VtX3ByYW1fZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzA5LCAweDczYjlmOGI5LCAweGM5OTlkZWU3LAotCTB4YWM4NDk5MmMsIDB4NWQ4NmYxMmMsIDB4NDg0MDljMDQsIDB4NTg3NmM0NDMsIDB4MDYyMmI0YTQsIDB4MzBhMjBhOTcsCi0JMHg5MDM3ZDk2YywgMHhmZjY5ZjBmYSwgMHhhNWFiMDgxOSwgMHg2OGQwNmExYSwgMHg2ODMwNGVjMSwgMHgxYTA3NDFiMCwKLQkweDAxYzA0ODMwLCAweDZhMmJlMmQ0LCAweDZkOGFkM2VjLCAweDJjMzQ4MGM1LCAweDBkYzQ2NDg2LCAweDNmZjJkM2RlLAotCTB4Y2RjZTc3ZGYsIDB4MTEzMzdiZGMsIDB4YmZmYmZiNmMsIDB4NGYxNjlmZTUsIDB4YjdmYjNkY2UsIDB4ZTc3Y2VmOWQsCi0JMHg5MmNjNWYzYiwgMHg0MDdlMTI0MCwgMHhhMWY4NjVjOCwgMHgyMTEzMThlOSwgMHg1ZDI0NWM2NCwgMHg4OGZkZmQ2YywKLQkweGU1MjI3ZDUzLCAweGFjYzg5NTdmLCAweDQ2NWE0OGUwLCAweDQ2ZGJlNDJhLCAweGIyMTNiZTQ1LCAweGIxNmZlYjEyLAotCTB4NTg5MzQ2YjksIDB4YzQwMmQzNDgsIDB4OTNkZjNmNDUsIDB4ODQ1OTIyNjgsIDB4ZjgyNmU3ZGMsIDB4OWJjZTI1YjMsCi0JMHgxMjEyNjQyNiwgMHg2ZjcxNjhkZSwgMHgyNWRmYTc0ZCwgMHhkMDI0MjVjNSwgMHhiNzIwZmQ3NCwgMHg0YTc2ODA1ZiwKLQkweGViYzNlNDEyLCAweDlhNTZmNzI1LCAweDE2NWY1ZjI3LCAweGNhZDliZGExLCAweDI3ZTgxM2RhLCAweGY4N2M5MDg5LAotCTB4ZDIyMTEwN2QsIDB4ZThmODkxNDUsIDB4MDI0YmE0ZmMsIDB4MzIyNDViYTYsIDB4NGZjZTk3MmYsIDB4MjY0NmRmNzIsCi0JMHg3M2YzMjIzYSwgMHg5MzkyZTQyNywgMHg5OTRlZmJmNCwgMHg1MmVmZDM5NiwgMHgzN2Q1YWU0MiwgMHgyZDdlNTIzMiwKLQkweGU0ZmU3MDExLCAweDVmZWM0YWViLCAweGZiYjU2ZjFkLCAweGQ3MTdhYjM2LCAweGRmYjUxN2ViLCAweDVjMTdkY2JiLAotCTB4Y2I3NTdkZjAsIDB4MmQwZmQ4ZWQsIDB4YzM5Njc1YzEsIDB4OWU1YTE0ZmMsIDB4YTYyNjUyNzAsIDB4MzgxMWZmNDgsCi0JMHgzNTFjNzAwNSwgMHg3MWQwYjRhZiwgMHhmMDg4NDdiZiwgMHg4NGVkMzdjYSwgMHhiNzZhYmJhZSwgMHg1YzI4NThhNCwKLQkweDQyOTZlZjI2LCAweGQyZjlhMDNmLCAweDc5MDAyMTNhLCAweDIxMWIwMWQzLCAweDliOWQ2ZTE0LCAweDk0ZTQzZTU5LAotCTB4N2NmZjUwYmQsIDB4MmVkM2NkM2QsIDB4OGZhZDJkY2EsIDB4ZGQ3MDAwZGMsIDB4MzhhZDkyMmQsIDB4ZTYwOWFlNGMsCi0JMHhhZGMyYWVkYiwgMHg2Y2YzZTU5OSwgMHg3NzVhNWIyYywgMHgyZmI0MmU3MCwgMHgxYjEwYjY2OCwgMHg2Zjc0YWZlZCwKLQkweDY4MWI4Y2ZlLCAweDQ0ODhmZjNlLCAweGI2ZTk0YWEwLCAweDlhNWY3MjE1LCAweDQxMDgwYzJmLCAweDIyNGQ3N2M4LAotCTB4OGY3ZmJlMzgsIDB4ZWI0NmQ4MTgsIDB4OTM1YWI5NzcsIDB4M2M3MGE0ZWUsIDB4Y2EyNTY5NTcsIDB4Njc2ZjNhMzAsCi0JMHgxNDFkZDI2YiwgMHg5ZDgxNDUwZSwgMHg1MTVkYTE1MywgMHgxMjAxZTBhMywgMHhkYjdiYmM5YSwgMHg1ZGI0YTllYiwKLQkweDYzYzE3NmU5LCAweDZlMjk3MGExLCAweDM4NjUxM2IwLCAweGZhNjVjMzliLCAweDBjNDliZGFmLCAweDJmOTY4MGZkLAotCTB4ZTkyNGViYTUsIDB4YTllYWQ3ODAsIDB4MzdmMTg0NDQsIDB4MDIzMzhhY2EsIDB4YzM5NTczYTcsIDB4ZTQ4OTYyODksCi0JMHg3MWQzYjc0YiwgMHgxN2IyYmI2OCwgMHhiMTJjMGYwNCwgMHg0MDdjNDRjYywgMHg2ZDdiOWQ5NywgMHhjMDcxOWViMywKLQkweDQzYzg1NmZhLCAweGI1YWViMDlkLCAweDBmY2JkNDMyLCAweDUzNjNkZmNjLCAweGYyNzU3ZTYwLCAweGI0NWU1YTU0LAotCTB4ZDNjZTRlYjksIDB4ZTFiOGJmZTAsIDB4MzU1OGEyM2EsIDB4OTQxZGFhZjMsIDB4NjMwZmE1YWMsIDB4ODk5MjhlN2EsCi0JMHg4NDQ1M2U3NiwgMHgyMDBlODM3OCwgMHg1MzNjODA4MywgMHg4NTdkMTdjMywgMHg3MTc3YzQzOCwgMHg5ZmViYTg4MywKLQkweDQ0OTA5MjQyLCAweGU4ZjdkZmZhLCAweGZlNWUxNGFmLCAweGFiODQ0ZWZkLCAweDljYTViNzhhLCAweDVkYmM1NDhlLAotCTB4Y2M0M2ZjZTAsIDB4ZmY2ZDJjZTEsIDB4ZTAwOGZhNmEsIDB4YmFhN2NlODEsIDB4MmZlOThkZDIsIDB4YWQzMDUzMmIsCi0JMHgzZjEwNTRhOSwgMHg2OGZjMDM4ZiwgMHhkYmNmODFiYSwgMHgzNDRjODEzNSwgMHg1ZTVkNzFkMywgMHg4YjM2MDZlMiwKLQkweDI4OWRlZTlmLCAweDJlN2M3Y2QxLCAweGUzZGQyN2NiLCAweDU5NmY5NDEzLCAweDJlM2U5YWJmLCAweDRmMDNlNmY5LAotCTB4YmQ1MzIyNmUsIDB4OTc5YTU0ZTYsIDB4ODc4ODRiN2QsIDB4ZDViZTZmOGUsIDB4MjEzYzY1M2IsIDB4YTNkZjEyYWYsCi0JMHhlNGQxN2ViMCwgMHgxMmJjMDAyYiwgMHhhNWM5NGMxMiwgMHg1MDIzNTk3OCwgMHhiNWUxNDIzOSwgMHhlMTQ5MTYxNiwKLQkweGQyOTUyNmIwLCAweGUzZDNjNTMzLCAweDIzM2Q2NmY3LCAweDA5YWQ3YzBhLCAweGY2N2JjZjkwLCAweGE3ZWM3NGUxLAotCTB4Njk5MWZiMTYsIDB4ZGNhZTgzM2YsIDB4NmNkY2QyNGYsIDB4NzM0OTNmNWQsIDB4ZWE3ZWQ0MGIsIDB4YWI5ODlmYjAsCi0JMHhiOWYxZTdlYiwgMHhjY2Y5ZmEzOSwgMHg3OWZiNTIyZCwgMHhhZTg5ZWExZSwgMHhkMjU3NWJhYiwgMHhmOWZhMDliYywKLQkweDdlYzEyYmNjLCAweDEwZjFlZjkyLCAweGFhMmZhZDFmLCAweGJkNWE0M2Y0LCAweDM0NzcyZDIyLCAweDk4Nzk4ZGM2LAotCTB4ZDI2OGU5NjgsIDB4NDljZmU4MWUsIDB4NDc0YjRhYjksIDB4M2EzMWQ5YjEsIDB4YzZmMzhhN2UsIDB4YTY3ZGYyZWIsCi0JMHg0ZmQ1ZDVmNSwgMHgyYmE4MWRjYywgMHhjMjM1OWU0ZiwgMHg3NzBlOTc0MCwgMHgwZjNjNzVmYiwgMHg5MTU5NzI5MywKLQkweDMyYmVlNWVmLCAweDdkODk5ZGNhLCAweGZiZmYzOGFkLCAweGVlNTAzYWZiLCAweDFiZTM5ZmRjLCAweDg2ZjNhNmU2LAotCTB4ZmY4YTEyYjksIDB4ZjVkZjY1ZmIsIDB4NDM3NDI4ZWUsIDB4MTQ5MDI1ZDcsIDB4YTQxMzE1NDgsIDB4MTJiNWYyYzYsCi0JMHg3ZWE0ZGI4MywgMHg0MTNkMGY1ZiwgMHhjMjliOTdkYiwgMHhmZTY4ZTM0MywgMHg4ZmYxMzA4OCwgMHg4MGJmZWViMCwKLQkweDhiNzhhNTMwLCAweGQ0MDU0OTExLCAweDk0MTBiMThiLCAweGIzZDM2YjdmLCAweGUwNmJmMTllLCAweGE1MDA2ZWJhLAotCTB4ZWZkMjIxMTcsIDB4MDI5N2M5M2EsIDB4YWZlNmQ4ZjQsIDB4YWU3ZDAzZjAsIDB4NjA1MzIwMTksIDB4NTQ4MjcyMTIsCi0JMHg2OTgzZmM4NCwgMHgyOTc5MDFmYiwgMHg0YzhiN2YwMCwgMHg3Yzc2ODdlNSwgMHgxMjNmOGU5OSwgMHhmMTg3NmZjNywKLQkweGRmMTk3YTNiLCAweDM3NWIzMDMyLCAweDQwYWQzNWJlLCAweGE2NTViZTM3LCAweDA4ZmU1M2UzLCAweGYxZjM5N2ZiLAotCTB4MDg3MmZjMjksIDB4YzcyYzk0ZjksIDB4MDU2OTJkZjEsIDB4OTk1YWZlMzgsIDB4OGZjNmU4MTQsIDB4NGJmZjFlZTksCi0JMHgxODZiZjcxOCwgMHhmYWNhMzEzZiwgMHhkN2U4ZTYwNywgMHg1ZmE0NTY5ZiwgMHg0ZmQ2Y2NiZiwgMHhmOGY5Zjg1NiwKLQkweDQxN2ViODMxLCAweGE3ZjViM2YwLCAweDViZjViMTE1LCAweGUzZGRiZjU4LCAweDJmZTFiYWJiLCAweDg3NWM3NDBiLAotCTB4MDdmYWNiZDAsIDB4ZmZhZmQwNGQsIDB4ZmFmZDEyOWEsIDB4Zjc3YzZjMmQsIDB4N2M3Yzc1OGEsIDB4MjcxZjhlMDcsCi0JMHhiZmViNjNhYywgMHg5N2M3MDRhNiwgMHhkMDBmM2UyZCwgMHhhNjJmZGM5MSwgMHg2OWZiMDAyMiwgMHhjOTQwY2E3ZiwKLQkweDk4YmQwMzI4LCAweDg0Mjc4ZjBlLCAweDkzZGY5M2NhLCAweGZiODcwODgxLCAweDdkZGQxODYzLCAweGNkZTk0MzE5LAotCTB4MjRhNzkxMTEsIDB4ZWU5MDM5NDAsIDB4YTY5YzY1YzMsIDB4Y2EyNzFiOGIsIDB4ZTNmNjdmNmMsIDB4NGY5OGJlYmUsCi0JMHg4OGIzNTE3NSwgMHgyYzZhNGQ3NCwgMHhiZTc0MjE4MSwgMHgxZmEyY2Q5ZCwgMHg2ZTZhOGJmMiwgMHg5ZmI4ODgwYywKLQkweDk4ODIzZDMyLCAweGZmYmUwODQ5LCAweGFkYThkMzc1LCAweGQzMTk3NWRhLCAweDdiNTJkNWM1LCAweGJhYWY4NjliLAotCTB4MzIyNGZiZTUsIDB4YWZjZTgyYmMsIDB4NWM2MDg4MDIsIDB4ZTU0ZWRmMjQsIDB4Zjg3MmExMzQsIDB4OTBjNzk1MjQsCi0JMHg1ZTk4OTY5ZSwgMHg3MWNhOGE3MiwgMHgzN2NiNGMzMiwgMHhlMjVlOTgyYiwgMHhhNzBlZWYyNywgMHg5ZjA5ZmZmMywKLQkweGMxOTliYjdmLCAweDEwOTk3ZGJiLCAweGI5N2ZmODAwLCAweGYyMGM4OTcxLCAweDlkYjU3MTZjLCAweDhmMzIzZDAyLAotCTB4ZjBhNzhlNzIsIDB4ZjUwMDRiNWUsIDB4MDAxZGJhMjksIDB4NTY0MmVlN2MsIDB4MDNjM2U0MjQsIDB4NTAyZWJjYjcsCi0JMHhiNmJmMmQzZCwgMHgzZGRkYWU4ZiwgMHg4NTNhYjAyNCwgMHg2MWI4NWZkNiwgMHg1ZDM3MDBmZSwgMHg5NjU5OWNmZiwKLQkweDRmZWMyMjMxLCAweDg0Y2ZkYmM0LCAweDk5ZmE0YzdjLCAweGQ1OTkwOWIyLCAweDQ3ZWE1MWI0LCAweDkyY2Q3NzMzLAotCTB4ZGE2OWI2NGUsIDB4ZjNlOWY2Y2YsIDB4ZjlmNDBhNzMsIDB4OTkyMDI5NGUsIDB4MTQyOTlmNDAsIDB4ZjdlZDFkNDgsCi0JMHhiOTdkMGFkZSwgMHgyMTM0Y2UzYSwgMHg4Zjk1ZTE5ZSwgMHg4MzBhMTNmNywgMHg1ZWU5ZmE1NCwgMHg2N2MwYzc0OCwKLQkweGFlNzVlMjM3LCAweGU3NTViNTliLCAweDQ0YTBmZTUzLCAweGI3MWZiODQyLCAweDdmYzQxMjI1LCAweGI5ZjNkNjIyLAotCTB4ZjM4ZGJhZDksIDB4YmQ1OTJiOWQsIDB4NzMzZTc0YjksIDB4OWUxMTEwMWYsIDB4MWRiN2Y5YzYsIDB4YTM0ZDdiYjAsCi0JMHg5OWZiNWE2OSwgMHg1YzY4MjQwNCwgMHhmM2ZlNzE4ZiwgMHhlM2Q3MWI5NiwgMHg5ODdmNjE5NiwgMHg2NzdlMzdlZiwKLQkweGE3YTQ2Mjc0LCAweDhmODllNmYyLCAweDUzZDBkMjlkLCAweDhmNDdmMDY5LCAweDJiYjRkMjlkLCAweGNiYTk5ODZlLAotCTB4ZWI2NjA2MTcsIDB4Y2VkN2U3ZWEsIDB4YWUyZjk1ZDcsIDB4MmY5NWQ0MmUsIDB4OTc0NGI3NWMsIDB4NDA3ZmVmOWYsCi0JMHhmMmRlN2Y1NywgMHg3YmYyYmExNSwgMHhjYWViZDYyYiwgMHhkNDZjMTRlNywgMHg5ZWZiNjdlNSwgMHg2YmJmZDVkNCwKLQkweDVjYWU5ZDU2LCAweDRkNzg1MDM4LCAweGRmNTVjYTFiLCAweGI3YTBhOTM1LCAweDQwMjE2MDdlLCAweGFiYmQyYThmLAotCTB4ZWE4NjcwZmMsIDB4YTM5ZTkwMmQsIDB4MmJhNDBiN2EsIDB4ZmYyOTRmODAsIDB4YjRiMmY2OWIsIDB4NmJmY2ViN2MsCi0JMHhmZWJkMWFkYywgMHgwNjkxNTRiNCwgMHg3YmE0NjRmYywgMHhmNDhkM2MyMywgMHg0NWZhN2Y0ZCwgMHhiNGQ0ODdkYiwKLQkweDIwYjkyMDQ0LCAweDdlZjhiYWU3LCAweDVlYmY3ZWFlLCAweDY0N2E3MTMwLCAweDdlMTI5ZGU3LCAweDk1ZDkyODllLAotCTB4M2JjZTA5M2EsIDB4Njg2ODcyMjUsIDB4N2VmN2EzODUsIDB4NzVjMDUwNDksIDB4MTNkMmQwMTAsIDB4NWE5NDZmMDEsCi0JMHg2ZTJiNzAzNSwgMHg2NzliYTQxOCwgMHhjNzExNDFjNywgMHhhNWRlMDMyZiwgMHhlNDgzMmZmMiwgMHgwZjIwMGIzNiwKLQkweDZlZDM4NzQyLCAweGYxZjMwNTFmLCAweDRjZjkwNWVlLCAweGZmNzExMzlhLCAweGY2OWNhOGVkLCAweGUwMDkyOWQ4LAotCTB4OTllOThiOTcsIDB4YjY5ODU5Y2EsIDB4M2QzMGZhNTcsIDB4ZTk4MDU5NTUsIDB4NGMwYWNhYzksIDB4NjM5NzJhZGIsCi0JMHg4ZmQyYmM3YSwgMHhkNzJhNWZlOSwgMHhjYWE3ZmE2MSwgMHg1NThmNGM2YSwgMHhjN2ZhNjJkNiwgMHg5ZGE2MDBjYSwKLQkweDU1NGM1ZTk1LCAweDkzOTZlZGJhLCAweGU1NmY1Y2I5LCAweDgxZmEwYmU3LCAweDJkN2NhZGU5LCAweDE1YmRmZDIyLAotCTB4MDI5M2QxZjksIDB4ZjFjMTc4ZmMsIDB4Y2JkMDUwZTUsIDB4NDhhMzFjMmYsIDB4NWUxZGVmNGUsIDB4MTVlODdhNDYsCi0JMHg3YThiYzRhZSwgMHhlMjgwNWU0NSwgMHg3MmNmNGZiOSwgMHg5M2MzMGM1YiwgMHgxMWE2NDRjZCwgMHgwZmQ2MzcyYSwKLQkweDYwYjNkNjc5LCAweDI0Y2RlNjI0LCAweDNjMDdkYTFlLCAweGZhNTE5ZDMzLCAweGUwMTQ3YmE1LCAweDIyNzg0YWViLAotCTB4Mzg2OGYwZGUsIDB4ZjUzZmI3MGYsIDB4ZWZkMDU5OWYsIDB4YjY0MGMyZjUsIDB4NzExNjFlNWYsIDB4NjdhMTI0YmYsCi0JMHhlZmFmODAzYywgMHg5NWUxMzcwYSwgMHg2ZjgwZDMwZiwgMHhmMGFhMjdjZSwgMHgzNDIzNGQ2YiwgMHhiMWI4MjI1ZCwKLQkweDE2NGQwYmZmLCAweGI2MzgwNjYyLCAweDg0NzAwM2Q4LCAweDE5ZTQ3MGJkLCAweDRiNzdlYzE3LCAweDUzZWFjNDUzLAotCTB4NTc4NzdiNjMsIDB4ZGFiZDMwNjksIDB4Nzk0ZjU5YTEsIDB4YTE3ZjNlYjMsIDB4Y2VjNjk4NWEsIDB4MWRlYzRhZjksCi0JMHhkY2FlODBhMywgMHgwMDg2YTdkNSwgMHg1NTMwNTNmZSwgMHgyMjlhNTlmYiwgMHhiOWVhMzhlMywgMHgyMWM2MzQ5NiwKLQkweDIxNzNkMjlkLCAweGNmNjdmYmQ2LCAweDIyN2ViN2EzLCAweDFmMjI2OGYzLCAweGJiMDFkODUzLCAweGU1NzQxZTVjLAotCTB4N2MwZjRiZjMsIDB4NzM5NzNmOWIsIDB4ZDIyZDRmMDEsIDB4Yzc5ZmIwOTcsIDB4MDc5NzdmZDAsIDB4Y2M2NmJmNDIsCi0JMHgwNzk2ZmRhYiwgMHg3YWU1YmY0NSwgMHgxYmE4ZGVmOCwgMHhkNDUzYjY4ZiwgMHhlYmI0MzczMywgMHhhNGNkNWU5ZCwKLQkweDE1Mjc1ZDVkLCAweGRlZGMxOTZkLCAweGFiNjBkYzUyLCAweDM4ZmRjYmQ2LCAweDM5YmNiZTVkLCAweDBmYjc1YWI1LAotCTB4ZWY5NDJmYzAsIDB4MDY2MDgxNDksIDB4NTRlMTI5YmEsIDB4YWM3NjY1ZDQsIDB4MWNmY2U4MTMsIDB4MmRmYjA1MjYsCi0JMHg1MmJkNTgxNywgMHg1M2VjOWI2YiwgMHg0MTViMGM5MCwgMHhhZDkwNTgwZiwgMHhkNzcyOWRkMiwgMHgzZTVjYTk5ZiwKLQkweDNjODk3YmZiLCAweGVlZGNlNTBjLCAweDI1NDdmNmEyLCAweGZjZDEzMTMwLCAweGQwNWI5ZTQyLCAweGU0MWQzYzU0LAotCTB4MzczZGQ5ZGQsIDB4ODhiMGZlYTMsIDB4MTBlMGJhZTQsIDB4YjNhYTQwNTMsIDB4NGYzOTBmNDAsIDB4ZWU4MGQzNGMsCi0JMHhiODNmOTNjZiwgMHgwM2NlNmFjNiwgMHhjZTMyNGM3MywgMHhmZDNhZTE2NywgMHgyN2Y1NDgzZSwgMHg1NmJmM2U1ZCwKLQkweGI3MjNjZjlmLCAweGU3OWQwMTI1LCAweDIwMjQ0OGQ1LCAweGNiZWEzZjAwLCAweDdlMzEzNjZmLCAweDZiMTUyN2M4LAotCTB4YzU1ODdmNjAsIDB4ZGMwYjEzY2YsIDB4ZjI4ZmRjYzQsIDB4NWI0YmU5N2IsIDB4NzlkM2U2YjIsIDB4ZjkzMTMwMmMsCi0JMHgwYmRmOWVhZCwgMHg1MTFlOTllMywgMHhjMTkzYWMxNCwgMHhkMzcxZjM5ZSwgMHg0MGRjOWZkOCwgMHgwZDYwN2RhMCwKLQkweGJiZmMzMWQ4LCAweGE1MzZjZjA1LCAweGViYmVmZTI3LCAweDU1ZjM4ZGZjLCAweDc2MWU4ZmY3LCAweGQyOGYzZTA0LAotCTB4ODgxYmMxMDYsIDB4OTg1NDhmYjIsIDB4ZjhmZmJlMDQsIDB4ZWIwOTdlOTksIDB4MWI5OWU4ZDYsIDB4NDM1YWY5MGMsCi0JMHhmZjkwZGViZSwgMHg4MTJkZTliYiwgMHg2MWNkZThlOCwgMHgyNTMwNmRmMiwgMHhmZDAyZmEzMiwgMHg2NTg3MzA0YSwKLQkweDdmZDIzZmRmLCAweDZiZmU4ZjRhLCAweGY3ZmRhOWZmLCAweGU5NjdmZGE3LCAweGE3ZmZhZmZhLCAweGM3YjgzZmY2LAotCTB4ZmFkMTgzZmMsIDB4Yzc2OTdkMmYsIDB4Mzc5NTNmMWUsIDB4NzI2ZTJmNDUsIDB4OWNmZmJhMTEsIDB4NzkyNzU3MzUsCi0JMHhiNjRiZmUyOCwgMHhlMmZiNDZhZCwgMHgwNWRmYjMxOSwgMHgyMDM2N2NmNCwgMHgzOTQ0MGI0ZSwgMHg3MTM2OWY1NywKLQkweDNhZjEyNWJiLCAweGMwZjczODA0LCAweDczZmZiNGFmLCAweDA2N2NmZmNmLCAweGRjYmU1YjljLCAweDNjZjFiOTI2LAotCTB4NTkwOTYwZDMsIDB4MzU5NjlmMjgsIDB4YTMyNzRlMTUsIDB4ZTU4MjdmMzEsIDB4NDIyYTdlZDcsIDB4OWY0ZjU5YmUsCi0JMHg0YTZkY2Y0NSwgMHhhNTFiZmIwMiwgMHg4N2VmYWUxNCwgMHhhYjJhNWY1MCwgMHhkODU0ZWJmZiwgMHgxODQ5Y2E3ZiwKLQkweDBlZDhjY2Y5LCAweDhmMThiZmM2LCAweDFjYmU3MWYyLCAweGNlOWNiM2RiLCAweDcyZjBmNTEzLCAweGE2ZjI5NzBlLAotCTB4YmEyYTdmOWYsIDB4NjlkMWZkMjAsIDB4MzY5MzE3YjQsIDB4ZWQ4ZDkzZDQsIDB4NzNmZWI4MGEsIDB4Njg0Y2U0Y2MsCi0JMHhmOTFlYWFhNywgMHhjODFlZjkxZSwgMHgyNDJlMTU0ZCwgMHhmMTFmZjRjMCwgMHhlMWEzMmRhNSwgMHhmZjUxZGFmYywKLQkweDgxYTA5NzdiLCAweDE3NmZjYTk3LCAweGZkN2YwYjgyLCAweDVjYmJkMmIyLCAweGIxZTdlNGVlLCAweGI2MDBiYjQ4LAotCTB4ZGViOTlhNTMsIDB4MTJkMmMyZDYsIDB4N2IwMmU0MjksIDB4ZTQ5ZDQ5NjksIDB4MjVjZmQzZjEsIDB4ZjY3OTllM2IsCi0JMHg3ZTRmMzgyOSwgMHhhMTBjZjE2MCwgMHg3OGVmMTdmZCwgMHgzNDM5OGZlZCwgMHg0YTUzYmM1ZiwgMHg0MDQ5Y2U5OCwKLQkweGE3ZTA4YTQ4LCAweDNlNWJmZTljLCAweGEyOGY4MjI2LCAweDJiMjZiZWRmLCAweDg3ZjdkOGEzLCAweDI5NzgyM2UyLAotCTB4MjY1MDc5ZGUsIDB4NjNjMjdhYTMsIDB4ZGNhMGYwNzIsIDB4OWY4Mjg4ZTYsIDB4YTBhOTg5ZTAsIDB4N2QyZjg5NWYsCi0JMHhjZmZlMDMyMywgMHg3MjQ4MTAxZSwgMHhkNjc4MTQ3YSwgMHgwMjdhODZiZCwgMHhjOWYxMDljMCwgMHgzZjhkZDVmMSwKLQkweDhhNzJmZDQzLCAweDQ2ZWI5MDE3LCAweGVkZWIxOTdjLCAweGZhMDVmMmU1LCAweGE1MjFmYjA1LCAweDA2NWUxN2VmLAotCTB4MmM5ZmYzM2IsIDB4YzE0MzgwMWUsIDB4NjBiOWY3MGIsIDB4MTVjZGE3M2QsIDB4YWNiN2NlOGMsIDB4ZjFkMmYyNGUsCi0JMHg5MjdmMjQwYiwgMHhiZGY2NTMxYiwgMHgyMjlmZTllMCwgMHhmM2JmZTVmZCwgMHg3ZTc2MjRkMywgMHg3MDlhYTZmMywKLQkweGMyYTdmMmFmLCAweGJlNmYxNzNhLCAweDQ3OTlkNzEzLCAweDA1ODc0ODdjLCAweDkwNWNjNDViLCAweGM5OTg1Zjk3LAotCTB4Zjg1MTlkYjQsIDB4ZTRjODllNjQsIDB4MTRhZGU5ZTYsIDB4YTc5ZDc0YjksIDB4NzY4NDM2ZTksIDB4ODE4ODNmZDcsCi0JMHg1OGJmNjg2ZCwgMHhmYzFlNDA0MiwgMHg5Mzk3YjU1NCwgMHhjMmZmOThhNSwgMHg0ZTM1ZjBjYSwgMHhhYTdlZjU1NCwKLQkweGI3ZTk2OWY1LCAweGUwMmI2ZDdlLCAweDZmMDBkY2U5LCAweGNhYmRkODMyLCAweGUxY2ZkOTg5LCAweGZkYTY1YzIxLAotCTB4OTRkY2VmOGEsIDB4MTQ0NGYwY2MsIDB4NDc2ZjE2NzMsIDB4ZjBjOTgyZjUsIDB4NGFiN2VhMWQsIDB4NWQ2OGRiNWUsCi0JMHgzZDM5NzIzYiwgMHgzZTMyZmUzMiwgMHgwYzc3OWQzZSwgMHg5M2E3ZTdlYywgMHhjYTMwNDE0OCwgMHhhYTg4MzZmYSwKLQkweGJhZmJhMDFjLCAweGZjMzRjZTg2LCAweDdlYmZmOGNlLCAweDk1NzdlMzNkLCAweGE3MzMwM2ZmLCAweGVmZTdmOTQxLAotCTB4NzY4MjNlMzIsIDB4NzlkMjVmYjAsIDB4ZmNiMTkyODUsIDB4Y2EwMjFkZTAsIDB4NDUwOTBiMDcsIDB4ODk3YWYzZTMsCi0JMHhkY2JlYjlmMywgMHhmZTc0MmY0OCwgMHg0MzU2MjE2NiwgMHgzYzRlMzAzNywgMHg1ZWVkMDFlMiwgMHhiZGI0MzU3OSwKLQkweGI4YzJhZTU2LCAweGFhZmQ5ZWFlLCAweGU1Y2Y5YzdjLCAweDk1MjJkZGMxLCAweGU0NDVkNzA3LCAweGU0Y2NkOTAxLAotCTB4OTc3YWVmNDAsIDB4MjI1OGYxMWYsIDB4MGE3ZDllMDUsIDB4YWJmMjk3ZjgsIDB4OTVmZTAxNWYsIDB4OWZmZDYxNzIsCi0JMHhlM2ZlMWUzNCwgMHgzZTZmOTRkZCwgMHhhYjdjYWEwOSwgMHhiZTQ2YWI5NywgMHgyZTM1ZDgyZCwgMHhiMjdlZGYyYSwKLQkweGRmM2EyMzIxLCAweGY5NTFlZmQyLCAweGRiZTMwMzc2LCAweDU1NzJkN2ZmLCAweGE4OTU2Mzg1LCAweDljYWFhYjk3LAotCTB4NDY5ZTBkZWMsIDB4MmEyNjk5MzksIDB4OWNhMzU3MDgsIDB4OTJlZjNmYTQsIDB4YThmNDllYWMsIDB4N2Y0YWExZDIsCi0JMHhiZDI5YmY0NSwgMHgzNzUxZTQwNiwgMHhkODc0YWE5ZCwgMHgxZDJhYTc0ZCwgMHhlODlmYjBmNiwgMHhiZjJjNjhlMCwKLQkweGQyODI2ODE5LCAweGY3ZGVlZTRiLCAweDc4YTNmNmE2LCAweGY3NjE2OTJkLCAweGViZGRiNDUwLCAweGYyZjBhNzkwLAotCTB4YWE0NzM2ZTIsIDB4YTA5N2VmNWYsIDB4ZjkwYzA3Y2QsIDB4ZDdiZWExYTAsIDB4ZDQzNWNmOTAsIDB4MTVmMjE5ZjcsCi0JMHg2NjAxZmE4NiwgMHgyYzNlNjgzZiwgMHg5MDg3YTQxMywgMHg5MmI0YmVhZSwgMHhiNzYwOWRmOCwgMHhkZGEyMmZkYiwKLQkweDc5Y2U4YmFlLCAweGQ1ZGY2ZDBkLCAweDUzZjAxZTk4LCAweGM2ZGFiMGY5LCAweDQ0ZTE4ZmNlLCAweGIzYzgwZDc5LAotCTB4MTVkODc3MmUsIDB4ZDMxYjc5MGYsIDB4YzM3MmJiN2IsIDB4ZmU4ZDM4YWUsIDB4NDQ0NWEyNzgsIDB4MjAxNmRjNzksCi0JMHg4Y2Y2YjRkMywgMHgyMTU0NWYwOCwgMHg2ZjQ4ZGFmZSwgMHhkOTBlY2NlNSwgMHg3N2VlYzMxNSwgMHg2OTFkMTI2ZiwKLQkweDU5ZGNlMWNiLCAweDE5Mjg3YTJkLCAweGVlMmI0NTkwLCAweGJhODk4MTcyLCAweGFkZDA2NWFiLCAweGM1ZjdlOGIzLAotCTB4NWFlYzg4NmYsIDB4YTczNWVmYzQsIDB4NjcwZGNlNmEsIDB4MDlmMWZmODgsIDB4NmQ5N2RjMDIsIDB4NmMyZmZjNDAsCi0JMHg0NTg4ZTc2MSwgMHg3M2QzYTIxYiwgMHhlNzk3NmYxMSwgMHhkYzgzMjY1OCwgMHg0OWZmZmFhNCwgMHhlZDU1OWRhZCwKLQkweGUxYjM2MGE3LCAweDljY2RjYjdiLCAweDNjZjFhYmVlLCAweDJmYWY1NDU3LCAweGQwZjNmMWY3LCAweDY0N2U1NTQ5LAotCTB4MWY5NDBjOTAsIDB4ZjM4MWQwNzAsIDB4MzdiYjk3MzgsIDB4OWQ2ZjIzODksIDB4NzVkMGYxNDUsIDB4Mzc0MDI0NDQsCi0JMHhjNDQ0NWExNywgMHg3NjQ2ODVjMywgMHg4OWZjNDk1ZiwgMHgyNDY1M2ZjOCwgMHg4NTRlZjI4YywgMHhjN2YwMDc1NywKLQkweDUwZTVkZWIwLCAweGIzMGZlZWM3LCAweDRhNTVhNDFlLCAweGY0NzlmY2Y2LCAweGIxZGE2OGFmLCAweGZiYTE4M2U3LAotCTB4ZmJkMmZmMjAsIDB4M2QyNjdmNjksIDB4NjAzZTRmZWIsIDB4ZDc2ZTNiNDMsIDB4YmJkZTI3MDEsIDB4MzM3ZmVkNzQsCi0JMHhlZmM4NDFlZCwgMHhiZWYwNzhiNSwgMHhhMzU3YzBmOSwgMHg1NmJhOGU4MSwgMHg4ZTQwMGE1YSwgMHhmNzYwMGQ3NSwKLQkweGJmZmI1NWY0LCAweGZiODZkZDFhLCAweDlmYzQyYWU3LCAweDVmY2VjY2QzLCAweGYzZmU1YTE3LCAweDVmYjNkYzM4LAotCTB4MDJhYmExNjgsIDB4MWQ4MGUwZmQsIDB4MmZlNWUxZWQsIDB4ZDA4ZWQwZGIsIDB4MmNhYmZmYjUsIDB4Yjc5ZmUzOWYsCi0JMHhiZjdlMzI5ZSwgMHhiMzI0ZTVkMiwgMHhlMmZjYzE3NiwgMHg3Y2JhNWQ5OCwgMHg1NjY3ZjhkZiwgMHhkMzczZmRjMCwKLQkweDJkMjE3OTQxLCAweDM3Y2FmYzlmLCAweDc2M2U0MWEzLCAweDRmN2E2MmVkLCAweDM0ZjZkNGE3LCAweGFjYTQxZmRjLAotCTB4YTI0MmI0YmEsIDB4ZTYwNGVlNzAsIDB4Zjk0ZjRiZTgsIDB4ZjkyNjcyYWIsIDB4Y2I4MzQ2NDcsIDB4YjkxZjY4MzcsCi0JMHhmZjVjNzg1YSwgMHgwMjFlMDYzZiwgMHhiNDk2MjNkZSwgMHgwMTU2MDMzOCwgMHhmOGU5N2RkNiwgMHgxYzFlNDE5ZiwKLQkweGFhNWQyMGIwLCAweGI4MjRmZGViLCAweDJiOTFmNTAyLCAweGFjMDY3YmFkLCAweGQzN2ZmMTNiLCAweGQ1ZDA4NWJhLAotCTB4YmZmNGJiYWMsIDB4ZTMzZmJlMzksIDB4MGY5MWE4ZmIsIDB4ZmVmOWQyN2EsIDB4YzNiZjMxZmIsIDB4NWVmOWMxZTksCi0JMHhlMmZmYmQyNSwgMHg3N2RlMWI3ZiwgMHhhZWJiYmM1MSwgMHhmZmM2ZWViYywgMHgxZGVlZWJlNiwgMHhlNWNjNmZlZiwKLQkweGZkYzM3Nzc4LCAweGRmMmJmOTdiLCAweGFiYmVmY2UwLCAweDNmZmEzYjljLCAweGJlYWFmZDc0LCAweGYyOTMzYmZlLAotCTB4M2ZhZDA2NmUsIDB4NDAzYjU0OGQsIDB4ZTk1MWY4YjEsIDB4NjgzMjM3YTEsIDB4MWZmYWVmZTksIDB4NGVmOTgzOGUsCi0JMHhjNjM1ZjdlMiwgMHg2NjYzN2RmOSwgMHg3MDQ5YmVlNywgMHgyNWM3NDM2ZiwgMHhlZjNmMDI3MSwgMHgzZjUyNzNiMSwKLQkweDViZjQ1ZmFlLCAweDQ4N2E4Nzk2LCAweDQwYmZmZWJmLCAweDk1OTg4MjdkLCAweGZjMGZiODFhLCAweDBmNDJkYTVkLAotCTB4MzE5MDM2ZmEsIDB4Nzc5MDdjYzcsIDB4ZmFmM2M4ZGYsIDB4MDRhZmUyZjMsIDB4Y2FhYjg1ZTIsIDB4MWYzNzY5N2UsCi0JMHg3ZmI1M2QwMSwgMHg1OGY1MTE3ZiwgMHhmYWZlYTI5YSwgMHhmYjFhNmJhYSwgMHhjZWViMjI1ZSwgMHhmNDUyM2YzMywKLQkweDA5YTk5YmU3LCAweDE0ZDA3M2ZhLCAweDg0NGRkZmRlLCAweDg3MjZmZmNkLCAweDM4NTAwODEwLCAweDU4ZjAxYTRjLAotCTB4Mjc0M2Q4MDIsIDB4NDA4ODkxMGQsIDB4NmY4OTUzZjMsIDB4YTYxYjljMTUsIDB4N2RmZGY0MzgsIDB4ZTNjNGY3MDAsCi0JMHhiN2NjNzAyMiwgMHg3ZjAyMmRlZSwgMHhjMDQ3YWIzZSwgMHg5ODc1ODZmZSwgMHgzMzU4OWU1MCwgMHhlMTgzYTQwNSwKLQkweGJmY2M2NmI1LCAweDAzOGY3MjYzLCAweGUxYjhjZjM4LCAweDIwMWU0ZmE1LCAweGNhZjU1NzYwLCAweDY1Y2JhMTRjLAotCTB4MmZhZmYxZjYsIDB4MDU5MDllNWYsIDB4MDNmNjZmZTcsIDB4NTBiNzc4ZmUsIDB4NjZkMTdkN2QsIDB4ZWJhMThhMTIsCi0JMHhmZTI2NmM1ZCwgMHg4YmIwNzhkOCwgMHhjZWE0ZTQwYSwgMHhjM2NmYWEyZSwgMHgyMjkzZjdjZiwgMHg3ZWE5NWNmZCwKLQkweGNmZjg3NDZmLCAweDc0YTI1ZjRlLCAweDIxMDg3MjdmLCAweGZiYzUyMTdiLCAweDUzY2Y2NjJlLCAweDZiZGY1N2NmLAotCTB4M2YyYWYwNjEsIDB4ZDkwMzAyNGEsIDB4YWI5OGI4YmQsIDB4MmM1YTNmYjksIDB4ZTk3YmJhMzEsIDB4YzJjNmJiMmYsCi0JMHhkNzYyNjZiOSwgMHg4ZmM2NThjOCwgMHg5MDRmY2M5OSwgMHg4ODE3OTdlYiwgMHgwMDcxZWIxMiwgMHhjNThhMGUzZiwKLQkweGEyMjNiMTdiLCAweGQ5ZGY5YTMzLCAweGZhZGU3ZTc2LCAweGQyOTdkYzBkLCAweDU0OWVhYmI0LCAweDkzZjdhMDhiLAotCTB4ZmNmOWRhMzAsIDB4MmRiMjU2ZjUsIDB4YWU0MjdmOGEsIDB4MzgyZGRhYTQsIDB4OTg4ZmU4ZGUsIDB4MzY3YWY2MDUsCi0JMHgzNGRhNjJmZSwgMHg4ZWI3OGI1NiwgMHhhM2NkNjdlOSwgMHg3ZTAxZTI3YiwgMHgyYmVlNmE0ZSwgMHhjMmY4NTFmZSwKLQkweGJiZTAwZWY5LCAweDM1MzZkNmRkLCAweDJlZGYwYTM3LCAweDYzM2Q5ODkwLCAweDc4NGJhMWM2LCAweDUyZDExZWJlLAotCTB4MWYzZTAyNjcsIDB4ZGRkMjZmNTEsIDB4NzEyZGRkYmIsIDB4MTkwYzdkZmQsIDB4NzE5YWYzMDMsIDB4MDRjY2U2YzgsCi0JMHgzZDExMWNiYywgMHhkZTU3ZWZlMCwgMHg4YmVjYTlmMiwgMHg4NDY0NmY3MiwgMHhmNjBmZjQyNywgMHg4ZGM5NWFkNiwKLQkweDgyOTNlZWUzLCAweGZiYWUwMTBiLCAweDljMDk1YmNlLCAweGQ1Y2FmNmI3LCAweGU5ZTZkMWM1LCAweDJlNzliMGIwLAotCTB4NDZmYmMxMjYsIDB4ODNmN2ZmYTcsIDB4NDcyZWM0ZWYsIDB4NTc5YzEyNjgsIDB4NzVmMjA5ZWEsIDB4NDgyM2ZhNGYsCi0JMHg0ODFhMTdjNywgMHg5YzMxZTQwMCwgMHg1YzJlNDA2ZiwgMHgxZmI4MjQ2OCwgMHgwMmZjOTA1MCwgMHhkZjk0NmJjZSwKLQkweGM3M2RhMDdmLCAweGY5ZGU2YjBmLCAweGNhNDdkODFiLCAweDk4MzcwNDVhLCAweDZkY2NjYmEwLCAweGNhZWRkODMyLAotCTB4OTA0NGUzOWIsIDB4ZWE4YTE5ZGIsIDB4NzUxZWU5MGYsIDB4NmEyZjg2ODcsIDB4ZWJjMjMzMjUsIDB4MzliZWNlNzAsCi0JMHgxZDY3ZWUzMCwgMHhjZDdkODEzMiwgMHgwNWQ4NmFmYiwgMHg5NmIzZmY3MiwgMHhiZDA3YzhiMSwgMHg5NWI3ZWJhZCwKLQkweDA0OGE2OGE0LCAweDZiYTQxMGZkLCAweDZjOGMzZDIzLCAweDZmZTVkMThjLCAweDgxN2Q3ZDEwLCAweGRhNTg2NmJmLAotCTB4ZTBhMjc5OTYsIDB4N2M2NjQ3MmYsIDB4MmRmMmQ1N2EsIDB4N2M5OWZmZjAsIDB4NmY5NTU3N2IsIDB4YzM1NzMxM2UsCi0JMHhkMTk5MjY0NywgMHgyNWJlNDZiZCwgMHg0YjZmOTM0NywgMHhlMDE5MjUwNSwgMHhhMGZmNzRiZSwgMHhkMmViYzA2NCwKLQkweDY4YzRhNDM3LCAweDI1NDc2ZGYyLCAweDkxN2IwN2JiLCAweDM1NzZiMWZiLCAweGJkNzZmOTUxLCAweDUxMzViZTQ2LAotCTB4NGZjNTE2ZjksIDB4ZjEzMjQzYTAsIDB4ZjIwYWVkZmQsIDB4YzM1ZmYwMmQsIDB4YmU0MDNiN2YsIDB4YmU2N2EzNDUsCi0JMHg2ZGYyYTgzZiwgMHg5NDA5Y2I3NCwgMHg0YzliYTM2ZiwgMHgyZmNjZmYzYSwgMHg4NGRmMjhhZiwgMHg5ZjQwM2JjNCwKLQkweGVjNzkyMjNhLCAweDA3NjdlODUxLCAweGU0NWVkZmQ3LCAweDBlMzAzNjdlLCAweGIyNzFiOWM4LCAweDVhYmZjNzFiLAotCTB4YjU3Mjk3MzksIDB4MDhiZmVlNzIsIDB4NWI5Y2FhY2UsIDB4OWZhMDliYmEsIDB4NjQzYTRmNmEsIDB4NWVlOTZlNzIsCi0JMHhhMDA0ZTcyYSwgMHg5NmU3MjY0NywgMHg4ZWNjMjdlZSwgMHhjMzZmOTA2MywgMHg4MjM3Yzg3YiwgMHhhYzQyY2JmNSwKLQkweGZhNzM3OTdkLCAweGZlZDBmNzEzLCAweDhmMjU3OGM2LCAweDEzMWZkNjk1LCAweGI0ZTM3NzkxLCAweDZjOWM2ZWYyLAotCTB4OTBmNzM4NDYsIDB4NGVhZTQ3NzcsIDB4ZjJlNmVkZGUsIDB4ODFiMWNhOGUsIDB4ZjQ4ZDVmMjAsIDB4ZmJkMTY5ZTEsCi0JMHg3ZjFiZWVmZiwgMHhjMGI3ZjFiYSwgMHg3ODhhNmYyZiwgMHg4OThlZjUwZiwgMHgzNWJjMTdkZCwgMHhkMDI2NzRmZSwKLQkweGM5OTkwNmQ3LCAweDdiOTcxZjVmLCAweGVjN2U5NTlkLCAweDZjYWJmMjdmLCAweGVjOGRhNTdkLCAweDEzNTk0MTNkLAotCTB4ZWFjYjBmZDMsIDB4N2Y0MjgwYzUsIDB4MDk3MzlhOWQsIDB4ZjcwYTkzZWYsIDB4ZTY5OTI0MGIsIDB4MWZhYTVhNjcsCi0JMHhmZDNlODA3NywgMHgzZWI4NDQ5YywgMHg0MzQzM2QzZCwgMHg4YmIyOGIwZiwgMHg2NTViY2VkMSwgMHg5NDI1NmQ3MywKLQkweDg5OTkxNzhmLCAweGM1YjllYzE1LCAweDQxNjdhOThlLCAweDY2Y2UyZDlmLCAweGZlNjJkZmY2LCAweDU0NGJmNTVkLAotCTB4Zjc4ZDMzZmQsIDB4NGJjZDc5ZTksIDB4N2E0N2VmNWUsIDB4YjBjZmFiZGUsIDB4NzhjZWJjMzAsIDB4MWY4MDA4NDYsCi0JMHhmNjdiY2Y2MSwgMHhlMjg1Y2EwMCwgMHgxNWY3ZmQwNiwgMHhjNTMzZmQ3YywgMHg3OTE3ODQzNiwgMHg4YjZjZjQ1YiwKLQkweDhjMmIzZmMyLCAweGUxYzIzYTcwLCAweDgzYTJlMTQ0LCAweDBhODg0MDUzLCAweGU5ZTk4YTI3LCAweGI4MTE0OTE5LAotCTB4YjZkOWJlMTQsIDB4ODVjMGVjMDYsIDB4NmY3ODBhNGYsIDB4MGFiNzVjNjgsIDB4NTVmYWUzMzcsIDB4ZDE3NmFhMzgsCi0JMHg3ZTVmZGU2MiwgMHgzM2JlMWQ0YiwgMHg4NTQ1YzIzMSwgMHhkZDFlMTFiMywgMHhhM2MwMzc3MCwgMHhmZmY2ZTY0YSwKLQkweGZjMTYzMjBjLCAweGEwZGQyODU4LCAweDliZmZmMTljLCAweGI5MGZmZTg4LCAweGRlZTg4NzEzLCAweGYyZTdhYzQzLAotCTB4YzRmNTZjN2YsIDB4M2RkZDcwYzksIDB4ZTE4MmZjMTMsIDB4Yzk3NmFlM2UsIDB4MzdkZmUwZWIsIDB4MDYzMjk4ZWUsCi0JMHg3MjFiZDNiNiwgMHg5N2I4M2UyYywgMHhhMzBiNmVkYiwgMHhmMGU5NTQxYywgMHhjZDg3NGUyMywgMHhmYWZiYmUxYywKLQkweDczYzI0YzU2LCAweDA2ZTBiMzYxLCAweDY0M2NhNDNkLCAweDUzOTZiODQzLCAweDJhZDFiNDdhLCAweDcyZmM5Zjg3LAotCTB4MWJhYjg3MmEsIDB4ZjMzNGJiZGYsIDB4YzFlMjg5ZmQsIDB4NzUxZmU3MDQsIDB4ZjdiMDBhYmYsIDB4MTg1YjYzMzEsCi0JMHgxODFiY2E1ZSwgMHgxODQ5MzI1ZSwgMHhiNTY1ZWZlZCwgMHhkNzQ0Mjc4MiwgMHgwNGJjZDY1MywgMHhmOTU1ODJmZCwKLQkweDVhMWM3ZjRjLCAweDVmYTE0NTNjLCAweDI1ZmEzNDczLCAweDhhY2M5YzYwLCAweGJjYzU5YmVjLCAweGY1NGIwY2RlLAotCTB4M2Y5ZWMxMWYsIDB4MWQ0N2YyODMsIDB4ZGZmZDIxOTIsIDB4OTVmN2QwYjcsIDB4Zjg4YzQ1ZmMsIDB4NmRjMzkwZmEsCi0JMHgwMWQ1YzAwNywgMHhmZDMzMGJmMCwgMHhkZjA5NzQyYiwgMHhlNWU1YThjZCwgMHhhZTBlYmY2NiwgMHhjOGJhOWY5MywKLQkweGEwYmY2ZmU4LCAweDFiYTUxZDgwLCAweGI0Y2Y0MDZlLCAweDM3MGE5YzdjLCAweDQzYzA2N2EwLCAweGYyMTE3Y2NiLAotCTB4N2RkZTE0NzksIDB4MTdhZTdiZDIsIDB4N2NiNGM3ZWUsIDB4MDRmZmI4NWYsIDB4ZTA4YjdmZWIsIDB4ZmRkNjUxMjEsCi0JMHgzYmZiZTk5ZCwgMHhmYzZmNzVkMiwgMHhiZTgxOTFmZSwgMHg4Zjg1YjJkZiwgMHhkZWZhMDU4ZSwgMHg5M2RmMjAyZiwKLQkweDNkZmQzODk2LCAweDRkY2VjYzk3LCAweDBmOTQ2ZGRiLCAweDBkZTYxZWUwLCAweGU5NTViM2M5LCAweDFjYzIxZjI5LAotCTB4NTA5ZTcwY2UsIDB4NmI5Mjc2MzQsIDB4NTdlMDIxNjEsIDB4ZmY0NTYwZDgsIDB4NDBjNzljMzAsIDB4ZTU2YWFmYTYsCi0JMHg0OTFiMGVmNSwgMHhmN2IzMjNiYywgMHhmOWM2ZmZmZSwgMHg0OTdkMzdhYywgMHhmMTgyOGZjZCwgMHhkMzM2OGU0MCwKLQkweGM2NDc4NmYxLCAweGFhMTdlZTMzLCAweGViNGFlMDFkLCAweGIxZmU1YmIyLCAweDdjZTNhOTc1LCAweDcyOTlmZjU3LAotCTB4MjhmNzhhZDIsIDB4YzM4ZDFmYWEsIDB4ZTA5NDJiZTQsIDB4MzA0ZDNhZmMsIDB4YzJkMWZkZWIsIDB4NzBmZmNmMWMsCi0JMHgyZGZjYjJmZiwgMHhhYjE0OTNmZCwgMHg0ZGUyZmRlZSwgMHgyOWY4ODNhMiwgMHg0YWYzM2VkYywgMHhjYjU0MmZjOCwKLQkweGVjMDI2Zjc4LCAweDNlZTg5MzFmLCAweDhlY2Y5MzQ4LCAweDFlZmY3YjhlLCAweDVlZjExNzJjLCAweGZiMzdkNmU2LAotCTB4ZDViZGMyOTQsIDB4OGE2N2NjYWQsIDB4YTAyMTlhZGMsIDB4NzQwZWYwZmUsIDB4NzBmNDFlMzYsIDB4Zjg1YWYxMmIsCi0JMHhmYjNjYjQ5MCwgMHg3ODAxNzE3YiwgMHg1ZjUxOTA2NywgMHg3Y2ExNTkzZCwgMHg1MDIxYTYzZCwgMHg3MjY3YTkwNSwKLQkweGMwMmRlMTM4LCAweDAwOTE0NGQ3LCAweDdkYmQ1YWJlLCAweDdiZmVjMzI2LCAweDA2NDk1ZmRmLCAweDllYThjZTk4LAotCTB4Mzk4Y2ZkODAsIDB4NWVhMTEyNDIsIDB4OGYxMTM3OGUsIDB4M2U5YmUzMzMsIDB4M2E3NmY3N2YsIDB4NDU0N2YxYmYsCi0JMHhjZGViNDI4ZiwgMHgwMDcwZWMzYywgMHg2Y2RmMGQ5ZiwgMHg1YzBkM2UyMiwgMHgwYWEwNDg3MiwgMHg0ZmUzNDdlYywKLQkweDc5MDc2Zjc5LCAweDFlZjU0MDUwLCAweDY4MmZmN2YwLCAweDQxNzJhYmE5LCAweGVkODBiMzdlLCAweGE5YmVmZGNiLAotCTB4MWRiZjNhMmUsIDB4YmQ0ZTlmYjUsIDB4YWQwMmU0MGUsIDB4NmY5NGRkMDcsIDB4ZWJjYWY1NjYsIDB4YjJiODBmMDUsCi0JMHg5NDZjYjVlNiwgMHgwYmQ0NmU1MSwgMHg0NzZjYTBmOCwgMHhkNjU2MjA0MCwgMHhmYjRhYzA2ZiwgMHhiNjk5YjFkZCwKLQkweDhiZmQ4NGNmLCAweGViN2U4N2I2LCAweDc2Zjc3ZDNmLCAweDllNzQzYjkwLCAweGRkOTFiZWQ4LCAweDc2ZDFlNmNmLAotCTB4ZmQ0OWYwMGEsIDB4NzBhZmVjMTIsIDB4NWRlMDQwYjMsIDB4ZGIyMzQxNDIsIDB4NGE4ZTBhOWYsIDB4M2E2ZjI4MWUsCi0JMHhiYmVlMjRmOCwgMHhhOTc4ZTlkMywgMHg4NTFmYjBlOSwgMHg4ZWZiZTBhNiwgMHhkZjFiODJiMSwgMHg0MzQ5NGRkNSwKLQkweDBiMDVkNWI5LCAweDAxZDYwNjg2LCAweGUwNWNiZWVjLCAweDUxZmU3ZTc5LCAweDJkMzdiZmY1LCAweGNmMzc3ZmNjLAotCTB4NDNlZTQyYjMsIDB4M2IyYjc5ZmIsIDB4ZjQ4NGRkMzEsIDB4ZmEwY2E5ZjQsIDB4NmYwYTI5ZGEsIDB4M2JmNzg1MWYsCi0JMHg3MGUxN2ZkYywgMHg5YjcyYzdmNiwgMHg2NzNjN2Y2NiwgMHhiZmY0ODQxOSwgMHhmYTIyNzlhOCwgMHhiOTI2MmQ0YiwKLQkweDYzM2ZhZjc4LCAweGRmM2JkMzNjLCAweDAwMTZkMWJlLCAweDUyZGJkZGJiLCAweDNmN2MzZmI4LCAweGJmMDVhMzdjLAotCTB4NzI2MGVlNzcsIDB4MWI0MDczYjgsIDB4NmY0ZjY5ZGEsIDB4NDdiYzA4OTYsIDB4YTIyY2RhYTgsIDB4MjhkZDM4OWMsCi0JMHhiOGI1ZmRlMSwgMHg5ZGI5NDI0NSwgMHgyMWU5ODNiZiwgMHg3ZWIzMzc4NywgMHhmZDMwMzc0ZiwgMHgzYjk2ZjI2ZCwKLQkweDljM2VjMmE3LCAweGVmYmQ0ZGJmLCAweDNkNWE3MjY2LCAweDBiYjllNjg3LCAweDUxOWJmYjc1LCAweGI4NzJhYWNlLAotCTB4YTBhM2MzOTQsIDB4NWZlZjBlYmEsIDB4NTRiNzcyOGQsIDB4ZjIwZDBmZGQsIDB4NjVlZTE0YjYsIDB4ODQzNWZlZjEsCi0JMHgzNDFhNTQ3YywgMHg5ODM5MTNmYSwgMHgwZDczODYzYywgMHgxMmU4NDNkMCwgMHg1MWQ5NzdkMiwgMHg0NmI5YzA4OSwKLQkweDJhNjNiOGY4LCAweGVjMmNlN2FjLCAweDdjN2NiNGY3LCAweGZiODVlMDhiLCAweDk2NjM4MmYwLCAweDgxZTNlYTAwLAotCTB4MTVmZWYzZjksIDB4MmMwZjk5ZjYsIDB4YmZjMDUwNDQsIDB4Y2E4M2UyOWQsIDB4Zjg0YjZjYTksIDB4ZWZkMThmMmYsCi0JMHg4MmIxZGY2NywgMHg5ZmE1MDhhNywgMHhkNTdmMDhmOSwgMHgxYjczMzQyZiwgMHg3Y2M4ZjNmMywgMHhkZTA5MjZhNywKLQkweDdkMjk5MjdmLCAweGQ3ZTQwZTUwLCAweDkxYTdjNDhhLCAweGVmMDU2NzFiLCAweGZkYjM3N2VkLCAweGZmZjVhZGMxLAotCTB4ZjNhYjk0Y2MsIDB4NmZlZDlmNjAsIDB4ZDk1MWYyNjUsIDB4ZGRmYmUxMjYsIDB4NDQ3Y2ZjYzMsIDB4YjdlODBiY2YsCi0JMHg2Mzc3Yjg1OSwgMHg4N2ExYWM5MiwgMHg5MzFiZmRjMiwgMHg2YjIwZThhOCwgMHgxNTQ0N2ZiOCwgMHgyODViZjc3ZiwKLQkweDBmMGE3MWIzLCAweGNkM2FlZTA4LCAweDZhM2Y2YTM4LCAweGQ2NWVmMmJmLCAweDk2N2VkMDZlLCAweDIxN2ZkNmY2LAotCTB4ZjlkNzBmY2MsIDB4YzM3MjBjODUsIDB4ZjE4ZjRmZDgsIDB4ZmIyN2U5N2IsIDB4YzBkNjJmZGYsIDB4YjdlY2VkM2IsCi0JMHhjZTZlNzQ0NSwgMHgyMGZhNzhmZSwgMHg5YTgwYmRlZCwgMHg1OTBjN2VhYSwgMHg1Nzg4OWFlZiwgMHhiZmVjYmYwMywKLQkweDA2YWYxMGM0LCAweDI4ZTM0ZGRmLCAweGRkZmM1M2ZmLCAweGI5ZjRjY2QyLCAweGU0Mjc3MWE2LCAweGJiY2M0Y2QyLAotCTB4YjhjYmRmODEsIDB4MGE2Y2JhM2QsIDB4Y2E2OWVmYmIsIDB4ZjAxNTY3NzgsIDB4MDE0Y2Y0ZmYsIDB4N2RmODgxZTksCi0JMHhkNDA0OWY3MiwgMHg0ZmYwMTRkZiwgMHhlZDY0Y2ZjZSwgMHhlMDdiNjlmMywgMHgxOTI3YTZjYiwgMHhhMTc5NTI5ZiwKLQkweGRiMjkzYzgwLCAweGQ2MmE3MWJjLCAweGU4MTQxN2FmLCAweDNlNmVhOWJmLCAweGQ5MDUyNWVhLCAweGZhZjJjMTIyLAotCTB4MTUyN2E4MTMsIDB4MDA0ODlmMzQsIDB4NWJmY2E2N2UsIDB4ZDk0MGZhMDMsIDB4YzQxYjhiMDQsIDB4MmE5N2NhYjEsCi0JMHhmZGNkYmY5ZiwgMHgzZGQ1ODk4OSwgMHhjYmY4ZmMwYSwgMHhmMGEyYTk4MCwgMHg3MDk0NzhiNywgMHg2NWYxOTViZCwKLQkweGRiZTMzNjc5LCAweGIwNDg3N2I3LCAweDczZTFhYmMyLCAweDhmOTU2YmU0LCAweGNjZTNlMDQ1LCAweGRlMWYxZjA4LAotCTB4YmUwNjU5M2MsIDB4ZDAxMDFkM2UsIDB4YzgzMjYyZWYsIDB4ZWRmM2UwMDEsIDB4MzFlZmI3MDIsIDB4Zjk2YWY2M2QsCi0JMHg2NjdhNGFmYywgMHhkODVmZTUyOSwgMHg1NzNlNTUyZiwgMHhjZmM4ZGFmOSwgMHgzYmI2ZTZhZCwgMHhkZGY3MWU2MCwKLQkweDRjNzVjMzY4LCAweDNmZGVmZWZlLCAweDE1ZTRjN2RlLCAweGZlNGRkN2RlLCAweDIwNDkwM2ZlLCAweGNjY2NmMzFmLAotCTB4NmI4NTQ3YWYsIDB4ODFmOTk5YTksIDB4Y2Q1Nzk4ZjUsIDB4NmFmNTM5MGEsIDB4Yzc5ODY3ZTYsIDB4NWVkZThiNDYsCi0JMHhjNzEyZDg3MiwgMHgyNWViOWRmYywgMHhmMTJiZmJhNCwgMHhiYjNlMGY2NywgMHg1YWJjZmU0YSwgMHg3ZjEyYmFiZSwKLQkweGZiOGJlM2FhLCAweDA2MWNmZGY1LCAweGQ5ZWI4ZTIwLCAweDYzODUyNzVmLCAweDc3ZjFjMjg4LCAweDVmYTBjZjhkLAotCTB4NGZlN2Y5ZDksIDB4MTQzYzAwY2MsIDB4MGU3NGEzZWYsIDB4MjRlOGQ1ZjQsIDB4ZTY3MzkwMjEsIDB4NDU1YmVlMDAsCi0JMHhmZDE3YTI0ZCwgMHhhY2ExY2Q2NSwgMHgzZTVhOWRkYiwgMHhjNTNmZmU2NiwgMHg5ZTkxM2EyZiwgMHgwMjU5NzY4YSwKLQkweGEyZmI2OWQzLCAweDQ2OGYxZjNkLCAweDYxOTU4YzNmLCAweDNmZjI0ZmY0LCAweDdmNjVmNWNmLCAweDgzZTA2OGRiLAotCTB4NDNmMzMzMjIsIDB4OTk4NWNhMzIsIDB4NzczZmE2NTYsIDB4ODJjZmI1ZWMsIDB4MmMwZDA5ZjUsIDB4ZjA1MTQwZGUsCi0JMHhiOWEyYzkyZSwgMHg5NTY2OThhNywgMHgyZjc4N2FkNCwgMHgwYzc0YTdlOCwgMHg3ZTYxMzFlZiwgMHhhYWVlNzdkYSwKLQkweDc2Yzc1MWZmLCAweDlhOGEyNzI2LCAweDJkYzQwMGE1LCAweGQ5ZDg2YTI4LCAweDQ1YTVmZTA5LCAweGZmNjgyY2M3LAotCTB4MTRmODZmMmEsIDB4YmYyN2U3ZmQsIDB4MmJlZDAzYjgsIDB4ZWVhMmNkZTUsIDB4M2Y4N2FkM2UsIDB4YjIxODgzNWYsCi0JMHg1MzVhMWY4MCwgMHhkMWZmZGUyOSwgMHgwN2NjMDlmYywgMHg3N2RjZmZiOSwgMHg3ZTJiMzdmNCwgMHgzZjFlZmY3MSwKLQkweDZmZjE2MTA1LCAweDdjODE3MzlmLCAweGNkYmFkNzM5LCAweDBkN2Q3ZTg1LCAweGRiNWZlZWRmLCAweGI4MmY3ZmMzLAotCTB4ZGRlZmZiOWUsIDB4YjllMDlhNzIsIDB4ZGVmZmJhMjYsIDB4MzI4NWY4MzksIDB4YmQ1NjgzY2EsIDB4ZTg2OTFlZmYsCi0JMHg5ZDI1ZmE4MywgMHg5NDZlNTY2NywgMHhmZDZlOGZmYiwgMHg0ZjE3Yzc3YywgMHhjNzc5ZmY4MywgMHg4NjllNGZhZSwKLQkweGVkZmM5Nzc5LCAweGFmYzFhN2IzLCAweGUxYjAxYzg4LCAweGZjZmU1N2JlLCAweGFiYWZlODdiLCAweDY1NjRkYmI2LAotCTB4ZmRiOWRhNzQsIDB4ZWU3N2Y0MzksIDB4ODFlMmMwZmMsIDB4OWZmNzNhZGUsIDB4YjJmZjAzNGUsIDB4OTI5NzlkY2UsCi0JMHg2Y2I5OWVjMCwgMHhlZjY4NGRmZiwgMHg3MjdiYjY1ZCwgMHg2ZmIyODkzMiwgMHg2ZmQwMjlhOCwgMHhhZGZjMmFlMCwKLQkweGRjM2I3ODhkLCAweDlmZmQxODc0LCAweDgzYmM1M2NlLCAweGNiZjZlYzFjLCAweDdmMzI5NjBjLCAweDYzZmI4NTU3LAotCTB4NmZmNzQ2MzYsIDB4ZDk3ZmUxZWYsIDB4MzdhZGZiNzQsIDB4NjI2ZmZjODIsIDB4ZmQxNWU0ZmEsIDB4ZjhhNWRmMzAsCi0JMHhmMDJhZmViYywgMHg2ZGZkYzhkOCwgMHhhYjdjYjc4MywgMHhmODc5ZTYxZiwgMHhjOWFiZTI4NSwgMHg5YTJmYzc4MCwKLQkweDI5ZmFmZjE2LCAweGQzZWE2YjI4LCAweGU4NjYxZmFiLCAweGZhYTdlMDJhLCAweGRlYWRmYmNmLCAweDZmYzBhYzU3LAotCTB4ZmU4MzdlYmIsIDB4ZTliZjgwYWYsIDB4NWY0N2VjMGEsIDB4ODNmYmMxYTQsIDB4MmU3ODUyMzMsIDB4ZmRlMTNmZWMsCi0JMHg1MmJmOGMxNiwgMHhlNDdkZmZiNCwgMHhlZmRkY2VhNywgMHg3MDlhOWRhMCwgMHhkMjRlZjYzZiwgMHg4ZGZjYzNmZCwKLQkweDdhZGViZTA1LCAweGU0ZGZmMzI3LCAweDRlZmYwMDc4LCAweGI5ZGY4NWM1LCAweDZiYTMyNzFmLCAweDM3YjNiZmQ1LAotCTB4YWNhZmNlYmYsIDB4ZmQ1NmZmNGMsIDB4ZmZlYjRiZmEsIDB4MjMyNGZkY2MsIDB4MDFiMjEzNzgsIDB4ZjViZTI3NWYsCi0JMHgwNzBhODIzZCwgMHgxMWNiOTczNywgMHg3ZWU4ZTViZiwgMHhjYjdlZGRiNCwgMHgzZTAxYmMwNiwgMHhmNmVhOWY2MSwKLQkweGZlZjlhNjRiLCAweGYyNGVkMDYzLCAweGY4M2YzNDdlLCAweGVmZTYzYWNlLCAweGRmZTkyOWRjLCAweGM0ZjA0NjhmLAotCTB4MGQ1ODIzZGYsIDB4YWI4MWNiZmUsIDB4ZDJiZTVmZjMsIDB4OWMyYmJlM2EsIDB4MzQ1MjgyNGUsIDB4M2FiYzI3YWUsCi0JMHhkZjJlOGViZSwgMHgzZmMyNmQxMywgMHg5MTZkNWVmNiwgMHg5MzFmN2M2MCwgMHg3ZjA0NGI2MCwgMHhjZjY4MTM5MCwKLQkweGYzN2YzZWVjLCAweGZiNzA3NmY1LCAweDIyZjNjNzdiLCAweDA5YWViZmZhLCAweDZlZjk0NjFlLCAweDEwNjUxZjk0LAotCTB4N2NjYTIzNDcsIDB4YmU5OGQ5ODcsIDB4ZjZjY2Q2NWUsIDB4Y2U1ZDhlOGYsIDB4ZDNmNjgzODAsIDB4ZDIyZjY4NzEsCi0JMHgwOWUzNTk3NSwgMHg3YmZiNGZkOSwgMHgzMmI3ZTFiZCwgMHg3YzYyYzdiYiwgMHg0MDQ3ZmIwNCwgMHgxNzhlOWViMywKLQkweDdlNjY4ZTBlLCAweDZmZGVjY2RhLCAweDFmMWM2NzFjLCAweGZhMjViY2E3LCAweDlmOGRlNTM4LCAweGY2MjljNmVhLAotCTB4ZTNiNzY1MDcsIDB4MzM5ZGUzY2EsIDB4ZmU4MmVmN2IsIDB4M2QzMmI1Y2UsIDB4OWM1MDVjZjEsIDB4NTg3ZGVkMTYsCi0JMHhmN2UyNGQ4YSwgMHhhNTJjZDU2MSwgMHgyNWM2MjhmYiwgMHgyNDM4YjI3MSwgMHhmNTA2MmJhMiwgMHhlY2NlNjVjZSwKLQkweDkwMDliMTYzLCAweDU0MDdlOGNhLCAweDBkZmI4MmI1LCAweDAyOTNjY2ZkLCAweGZlNzJhZWY4LCAweDU3N2NjMDk4LAotCTB4ZjYzNTdjMDMsIDB4MjNlZGM5MWYsIDB4Mjk0YWFmYTAsIDB4Nzc2MDk5YjksIDB4MzkxZGNhMzAsIDB4MWEwMjQ0YzEsCi0JMHg0ZTczMmY3YywgMHg1ZWYwNTY0YiwgMHhmMDFmZDQyNCwgMHhiNGUzM2M3OSwgMHg2NDdlZmQwNCwgMHg2NDdkNWZiMCwKLQkweGU5OTI2YjI2LCAweDBiZjIzZWZjLCAweDVmYjQxNTllLCAweDAzYzdmNWYyLCAweGZiM2Q5ZDcyLCAweDg3YmVmMzU3LAotCTB4YTliZDlkNDQsIDB4MGUzZTEyY2MsIDB4OGFmMjE1ZTcsIDB4YzQyM2VmMGQsIDB4ZTc4YzM2MDMsIDB4MGRiNGZlNTAsCi0JMHhmNzc4N2JkNywgMHhkZWEyY2Y1NywgMHg2MTBiNmJmZCwgMHg1NGY0NDNmNywgMHhkY2E0NzEwMywgMHhiYmQzOGZhYywKLQkweDNmZmE3YWJmLCAweGM2ODZhZjQxLCAweGE3ZmNmYzc0LCAweDRmMzg3ZDY5LCAweGZjZjFkYTM0LCAweDc2MmJiNWQzLAotCTB4YWZjZmVhMzQsIDB4ZTQwMzM4M2MsIDB4ZDE5ZGJlNWEsIDB4Yzk4YmZlNjMsIDB4NWZkYTJhODEsIDB4YjdjYjIyN2IsCi0JMHhmMTgwMThlZiwgMHgzOTc3OGEwMywgMHhmMGYxMWZkMSwgMHg2MGNhOTdlZSwgMHhkMTdjZWE5ZiwgMHhhNDA2NmUwZSwKLQkweGZmYWUxNWYzLCAweDNiYzc4NmZmLCAweGFkMTQ5NWFhLCAweDMxMjE3MjVmLCAweDIwNzdkYTJiLCAweGU1Njc5MGM1LAotCTB4N2YwNDllZjgsIDB4ODExZjM4YjIsIDB4MTYzOWFiMWQsIDB4YmQ1MDhmZGYsIDB4NzljZmQ3NTgsIDB4MDdiZjdjMjksCi0JMHg5N2RmZDhlOSwgMHhmNTA5OWJiZCwgMHhhYzYwNzkwNSwgMHgxZmZmOTZhNywgMHhlNWI3OTMxYiwgMHgxMWNlZGExNiwKLQkweDg3MmU1ZmE5LCAweGJhYmU1OGYzLCAweGFkMjc5MzJmLCAweDJhZTdmZjU4LCAweDllZjJmMzlkLCAweGViZmFiMmZkLAotCTB4ZjU3NTAzNmQsIDB4M2M2NWY2ZDQsIDB4N2U5MTg4ZGUsIDB4MTZmZGU3MWYsIDB4MmMzMzdjMzcsIDB4Mjg4ZDNjNWEsCi0JMHgzZmVmYzdmMywgMHgwNGRmODgxNSwgMHgxYjRlY2I3YSwgMHg3NzgyNTFjNiwgMHhiZjBmZTBmOCwgMHg1ZmY3NjY0NywKLQkweGM2MTBhZTI1LCAweGU1YzdkOTMzLCAweDA4NGM0OTcxLCAweGU1ZjRhYmUzLCAweDkwZmE4MGYzLCAweDE3YjZkNjI3LAotCTB4MmZhNWVmMDAsIDB4ZTdjNDA4ZDksIDB4ZTljNTdkMjksIDB4ZWU5NzdjMDUsIDB4NTdmZGFhZjksIDB4NjZlZmUwOTksCi0JMHhlOTVlYmI0NywgMHg3NDgyZmYyYiwgMHhjZDA5NmE1MCwgMHgzYjY1NzhjNSwgMHg5OWUyMDQyZCwgMHgyMzdjZWM3NSwKLQkweDQzYjVmODBkLCAweDdmYzVhNTBhLCAweDY5NWViZGNiLCAweDQ3ODg2MmQwLCAweDUyZWZlN2UwLCAweDdkZTE4MzAzLAotCTB4YjMzZWZhYmQsIDB4ZDMzOTE3YTgsIDB4ZGVmNzYzNjUsIDB4YmRkZTZjZmIsIDB4N2Q3N2U0MzYsIDB4OTU3MzllZGMsCi0JMHhlZmI0ODNjZCwgMHhlODk0OGJiNCwgMHg5YjRkZjE3MiwgMHg2OWQ5NzdmNCwgMHhhM2I4ZTViYiwgMHgzN2M3M2JjNywKLQkweDQ5ZTczZTYxLCAweDIwMTgxMjZiLCAweDBlM2VhOGNiLCAweDIxYThiY2YyLCAweDBmZDgzZmJkLCAweDc3ZDRkOTBlLAotCTB4ZWMyYzRhZWMsIDB4MDUyNDg3NDcsIDB4MDY4N2Q5Y2YsIDB4ZmJiNWZkMjgsIDB4YWI0YTk5Y2MsIDB4YWVkMDk2NjIsCi0JMHhkZDU3Njk4MywgMHgwOTdkNzlhNywgMHg2NmRhMjdmOCwgMHgxZjdiOTM0NSwgMHg4ZjA4ZWNkOSwgMHgxYmM1YWIyMiwKLQkweDA3NjQ5ZGVkLCAweDAyZGVhZmRmLCAweDFiMjI0MDYzLCAweDFkNDNmODE3LCAweDQwMTQ5MGY3LCAweDQ2MjhiYzM5LAotCTB4MGZmNGZkNjEsIDB4YjhiZGYwYzgsIDB4MmQyMGVmNjEsIDB4ZDVjZDBhMWMsIDB4MjlmMjhmNTgsIDB4ZDQ5MGIzYzIsCi0JMHhmOTFhOTljOCwgMHhiODU3OGVhZCwgMHhmMTk4YTFkYywgMHgzZmY5YmEzZCwgMHg4YzU1ZTliYSwgMHhjODhkMTllMCwKLQkweDc0NzI3ODlhLCAweGIzM2I0NWM3LCAweDJjYzBlZWZhLCAweDdlMDE1YWU1LCAweDliNzVjOTMyLCAweDZhOTUyMDQ1LAotCTB4MTIxOGY3ZTQsIDB4ZDU0MWQ0YzQsIDB4YWFiZjE2MmUsIDB4M2M5YzgwODIsIDB4ODM0NzFkZDMsIDB4ZDc4MTFhNjAsCi0JMHhmZGY3MjgwMywgMHg5MjE5MDgwMywgMHgxMjg2ZmEwZSwgMHhlZmMwZDZlYiwgMHhmMzg1Y2Q5MiwgMHgwODJiOThiMSwKLQkweGRkZDMxNzkzLCAweDdlMGE3ZmEwLCAweGU5NGNiOTFmLCAweDYxYjJhYWE5LCAweDQwZjc4YjEwLCAweDBkN2VmMGJjLAotCTB4M2YzYTU4NTUsIDB4NGJmNWZiOTcsIDB4ZDVmOTA3YTAsIDB4MjdkZjcwYjgsIDB4NjIwYTJhODEsIDB4YmI0NTMzNzAsCi0JMHhlMmMyMjRlYiwgMHg0NjNiYWQ5OSwgMHhiNDhmZTdiNCwgMHhmZmFmODExOCwgMHgwNzMxY2EyMCwgMHg2OTg0ZmM4OSwKLQkweGM4MmFjNDFlLCAweGJmZDhhYWRiLCAweDljZmRjMzY1LCAweGEwNDI0ZGMzLCAweDI0MWRkYTFmLCAweDYzYTlhNzY0LAotCTB4OTY5Y2Y5YTQsIDB4MzQ5OTVkZmYsIDB4Zjc0YmExYWYsIDB4OTFiOTdkMDQsIDB4MzM1Y2E4MmYsIDB4Zjg0NDFiOGMsCi0JMHgzNzNmN2VkMSwgMHhhMWI5ZmJmNCwgMHhhZGJmY2ZkZiwgMHhlNTRlMTU1ZiwgMHgxMGU5NDFkNiwgMHg2NTc1NjA4NywKLQkweDhkOGRjMzkwLCAweGEzNzBlNTY3LCAweDcxMGUxOWYwLCAweGM2Mjk4OGQ3LCAweDExY2RlZmMzLCAweDM2N2MzMWFlLAotCTB4ZjE0ZmE4MTYsIDB4MWQyNjI3M2EsIDB4ZDhmM2Y0ZTEsIDB4YWZmMDYxMDMsIDB4MDRiNTA5MjUsIDB4MDRhYmMzY2UsCi0JMHhjOTIyZmUzNSwgMHgxMWRhNjg3NSwgMHg3MGY5MTViNywgMHg0ZTY3MWYzZCwgMHhmNTc3YTMwYywgMHhmYWNmN2MxZCwKLQkweGU4ZWZiYzM2LCAweDViZDZkZjUxLCAweGY1ZTg5OGZkLCAweGM3Y2RiZDlkLCAweGRmM2U3NTFlLCAweGJkOTRjZTU1LAotCTB4NzA1YmZlZjIsIDB4NmYyZGRiNWYsIDB4ZmE5NDE0ZGMsIDB4NjI3M2RiNzcsIDB4NzFhNWJmNjgsIDB4YzM2YjdmZWQsCi0JMHhiNDZmNGMyZiwgMHgyZmUzZDdmNiwgMHhkMjk1ZTgwNiwgMHhmZDYwY2M0ZiwgMHg3YmRlMjM3NywgMHg3Y2Y5OTdhMywKLQkweDQ4ZWYzNDFkLCAweDliYmFlYmE1LCAweDllYTUzZjhmLCAweGIzZGY3N2RkLCAweGU4ZTNkOThjLCAweGY1MGJjZmYxLAotCTB4NzdmYWYwZTcsIDB4YWVkMWYzNWIsIDB4ODdlNjIyNzAsIDB4OWVlMTI3MTgsIDB4ZGUxN2E2NWEsIDB4Zjc4ODkwZjMsCi0JMHgwOGUyM2RhYiwgMHg3Zjk0MmZjMSwgMHgwNDJlNWRlZSwgMHhlMmQxZTk0MiwgMHhlMzc3OTEyMiwgMHhmOGYzZmY2OCwKLQkweDQzMzhjNmY4LCAweDVkNGNhMjNlLCAweDMzOGI0NjI3LCAweDdkNGNlOGM0LCAweDVmOGM2NTg3LCAweGYyZTQ4OGIwLAotCTB4ZWZmYTUxZjgsIDB4OTMzNzM2ZWQsIDB4NWM4MGU2ODcsIDB4MmZiMjMyM2QsIDB4M2E1MjM3ZjksIDB4ZDI5MjdkMDYsCi0JMHg4OTY3ZGMzMSwgMHg3MTJkM2RmYywgMHhmYWJmY2NjOSwgMHgzYzlkNzg4ZSwgMHhiMTI4YTBiYiwgMHhjNTM2YmZiOCwKLQkweDJlMWJlMmViLCAweGM3MjRhZjFkLCAweGY5YjVlNDY5LCAweGJmMTc1ZGEyLCAweGE0ZjI0YWE1LCAweDJlOTJiYzgwLAotCTB4Y2ExNDQ3NWUsIDB4M2VjNWYyNTcsIDB4NTM5NGQxNDQsIDB4MTk5OTE0M2QsIDB4ZWU1MTM2ZGMsIDB4MjAwMzk4YTQsCi0JMHg1Y2VlY2NlNywgMHg2YzdhMGY5MiwgMHhiNTRmYTMxYywgMHhhMjMwOWNiZSwgMHg5YjdjNmY1YiwgMHgyNjJjN2JmZSwKLQkweGU5NmNmOTExLCAweGM2MTkyNTEyLCAweGViNzNkYTA5LCAweGNhZTg5M2UxLCAweDNkMWNmOGY2LCAweDgzYmZjMWU5LAotCTB4ZDYwYWJiYWQsIDB4M2Q3M2RlOWQsIDB4ODNjN2IyNTUsIDB4Nzc0ZTczZmEsIDB4Y2MyYjFiYmMsIDB4ZWYyOGI0NGYsCi0JMHhkZmJmMzAyYiwgMHgyYWVjMDQ0YiwgMHgzOWUzZTEzZCwgMHhiYmYwYTAxMywgMHg3ZTg3ZTgxMCwgMHhmNGVjNjIyMSwKLQkweGMzYWZlOGExLCAweDEwNzVlNGY1LCAweGY1Y2E5MWNmLCAweGUzYmUzYzU1LCAweGYxY2YxZTJhLCAweDczN2YxZTYxLAotCTB4YThmMzhmMGQsIDB4YTllYWNmYzIsIDB4ZDY4MjM4YzYsIDB4YWI3ZmFjYzEsIDB4YzEyN2UzOWIsIDB4NDNlM2UxYzQsCi0JMHg1MjlhYzk3ZCwgMHgzNjg0Zjc4MSwgMHhlMjA4NDU3NywgMHg3NGZlOTE3MSwgMHhiYjY5ODA5ZiwgMHhiMjdlMTFhYiwKLQkweDkyN2RhMDliLCAweDA1YmNjN2Q2LCAweDZhOTUzNGYyLCAweGNjMWUyMjQ3LCAweDRmOTIwYWVlLCAweGZiYjYxZmNiLAotCTB4ZDliODAyZGUsIDB4NDFiYzdkMTQsIDB4YzM0MGNhNGIsIDB4OWUwMWIwYmQsIDB4YzkzZDNkMmEsIDB4YTcwMjYyZTQsCi0JMHgxMjdjMjMyNywgMHg1M2RmMTY2NCwgMHhmNGRlYTNhNSwgMHhjZmVlMmFhYSwgMHg4M2QyYTliYiwgMHgyYjhmMTU2OSwKLQkweDg0NzEwNTU1LCAweDhmMjk0ZTIwLCAweGNmYzg5NDIzLCAweDhlMTQ1NTg5LCAweGJlMDlmZGYwLCAweDY2NTU1NjZmLAotCTB4OWRhNjc5NjMsIDB4YTYwOTUzZWQsIDB4YzAxMjgzOGEsIDB4YmIzMDllMjUsIDB4ZjQ5ZjgyNjcsIDB4NTVjYzIyY2YsCi0JMHhmYzUyN2UxNCwgMHg3YWJjODE0NCwgMHhlN2MzNTg4ZiwgMHg3NDQxZTljZCwgMHhlMTcxMGQ5YiwgMHgyZjAwMjc5NCwKLQkweDI2NDg2ZjM1LCAweDk3MTVlN2I4LCAweGQ2M2U0Y2RmLCAweGNiMzhiM2QwLCAweDM0NzYwNzFiLCAweDYwMTNlMWQxLAotCTB4ZTAzOWZiZmYsIDB4MjM2N2NlOTUsIDB4NTljNjE3OWQsIDB4OWFiMGY0ZTUsIDB4YTcyZDdkZTMsIDB4ZGUzY2Y1ODcsCi0JMHg1ZDM4MmZlNywgMHgwZmQ3NGEzYywgMHg3YjBmMmFmOSwgMHgxYTYxYjAzNywgMHhjODRiOGJmMywgMHg2OGI4ZjEzMCwKLQkweDNiZjVhMjIxLCAweDg5MDRmMzhiLCAweDNjODlkNzRjLCAweDcxOGE2MGFhLCAweDBiMzFjOGVmLCAweDI0N2Q4YmQyLAotCTB4N2U1MDhhZjEsIDB4OGIwMDgxZWMsIDB4MGE5Yjk5NjMsIDB4MWE5YzY2ZmIsIDB4MTI4MjcyYjcsIDB4YjYxZjFiMzcsCi0JMHgzZTNjY2M4NiwgMHgxZGNlYzg5YywgMHgzZGUzNTFhZCwgMHg1OTBlNzk1NiwgMHhkYmRlZmNlMSwgMHhkY2NlMGU3YywKLQkweGY2YmM2MDQzLCAweGQyMGU4ODUxLCAweDdiM2I5N2M3LCAweDZhM2JjZDMxLCAweDdmNGRmZWE5LCAweGRhNWYxZWVjLAotCTB4NWFlN2EwNmEsIDB4MzczZjAxMGIsIDB4YmU3ZjlkMDcsIDB4ZjdiMWFmNDYsIDB4ZDkwODA3NjIsIDB4YTlkOGE0N2YsCi0JMHg0NTA3NGIzYywgMHg5N2Y3ZTI4MywgMHgwMDZjODNiNSwgMHgwNTczMGE2NywgMHhhNDliMWRlYywgMHgwMzkwNTRkYywKLQkweGRiYTJlMjliLCAweDRjZWM2MjZkLCAweDhlNjU3NjVmLCAweDhkNzVkMWQwLCAweGVlNzZjNWU0LCAweGY0NzQ2MzA5LAotCTB4NGZlNWMzNWYsIDB4ZGQxYzk0ZmMsIDB4N2NkZTU1NzcsIDB4MGJmYWMzMWUsIDB4MzA5OTdkZGEsIDB4OTk4YmE0YWYsCi0JMHhiNzA5YmZjOCwgMHg1NTNmOTc0NSwgMHgzODg3ZWM5MiwgMHg5OGEzNTUwMCwgMHg5NGNmZjNiYywgMHg0M2Q1OWU5OSwKLQkweDc1MzkzMDllLCAweGY4ZjA4YzgxLCAweDg2NDY3NDM1LCAweGJmMDdkNDEzLCAweGUyZWIyOTljLCAweDNlMDNhZTE5LAotCTB4NjM3MTA2MTksIDB4MDJhZmZkMTksIDB4MzhhOWEwN2UsIDB4ODlmYTQ2NTgsIDB4ZjNjMjZlOWYsIDB4NWZjZTFhZWEsCi0JMHhkYTdlNzMwZiwgMHgxMWU5ZjljMCwgMHhjNDBiMjNlMCwgMHg2NzdjNjU5ZiwgMHhiMGUxOWUyNiwgMHg1OGI5NTQ5ZiwKLQkweGZlMDEyZGRjLCAweGM1NTQ5YjRmLCAweDcxODc5ODJjLCAweDA0NTk4ZjhlLCAweDMyYTg5ZmI4LCAweDQzMTc1MzdiLAotCTB4NTllMmQ2YmUsIDB4ZTMxZTYwYTksIDB4ZWQ2YmZiMDEsIDB4ZGY3ZjM0NGEsIDB4MmNlMjdkOTAsIDB4NmNkNzg1M2IsCi0JMHg2YWM3YmY4ZSwgMHhhY2ZlMjJjNywgMHhhYzAxNGY2ZSwgMHhjMTg4ZWNjYiwgMHg1MGQ1N2RmMywgMHg3M2I0NDE2YiwKLQkweGIzM2I3NGMyLCAweDJmNzg1MDhmLCAweDRjZmE3ZTg0LCAweDg3M2VlOWNiLCAweDY2YTE5OTgxLCAweGZkYzIxNjY2LAotCTB4MWQwNzc4MzEsIDB4ZWRjYTdlODUsIDB4ZmQyMThmNGMsIDB4NDZiMDY0ZmQsIDB4MzhmMGQ0MGUsIDB4OTNmMTQ0NzEsCi0JMHhiMDc5MWFlMSwgMHgwMjU0Yzg3MiwgMHg3MjllOWU3NiwgMHhiODM5MTdhMCwgMHgyYWMxYzk4ZCwgMHgwNjJmZWY4MSwKLQkweGY4ZjE1NmJjLCAweDM0MWNhYWRiLCAweGM0YTM1ZTAzLCAweDRkN2Q1YWQ3LCAweGJlN2RlZWI2LCAweGIxYjhlNWM0LAotCTB4M2IzYjNhZGUsIDB4OWUyMWFkMzcsIDB4NTllODRmYjAsIDB4MGViNGUxNGUsIDB4M2ZkOTE0ZTAsIDB4YTBlM2JhNzMsCi0JMHgzYWNhMjBmZCwgMHgwY2VmZjI4YywgMHg1MzIwODNlYywgMHgzMzhjM2VjYywgMHg5ZTU2NDhiMiwgMHhlNTcyMGYxOCwKLQkweDRjYmY5OGRmLCAweDNhODI3YTZmLCAweDQyYzVmZTVlLCAweDJlZjI2N2RjLCAweGJmZmRjNzhlLCAweDIxM2M3NmEwLAotCTB4MmIwMmFlNzAsIDB4ZjY5ZGU2YmQsIDB4NzUzZmNkZTksIDB4ZDc0ZWRlMDEsIDB4Y2RkM2ZiZjIsIDB4NTdmYzAwNTIsCi0JMHgyZWFlZDc0ZSwgMHg0ZGI1N2NjMywgMHhmYzRjOWMwMSwgMHg4ODJlMDNlNSwgMHg2OWU4YjJjYiwgMHhjZjUzZWYxMSwKLQkweGQwZDNmOGM0LCAweGNiZWJlZmZmLCAweDdmOGQ0NTk3LCAweGI1YmE4YWM0LCAweDE2OWYyMDY5LCAweGVmOGI1ZDZkLAotCTB4N2JjNGNlZWMsIDB4ZjI2YWU2ODcsIDB4YmQ0MTUzMjQsIDB4OTZkMzhkNTAsIDB4MGJjNThjZjcsIDB4ZmI2ZjVkZmEsCi0JMHhlOGU2ZGU1MiwgMHhmODJhZmRlNywgMHhjYTVhZjQxNSwgMHgxZWI3YTAyZiwgMHg0Mzg0ZTU3NCwgMHg3ZTY3ZmYxNCwKLQkweGIyN2Q0MzY5LCAweDQyNzdmNjRhLCAweDFkYWI2YWJlLCAweGY4YWE5MDVhLCAweDFlM2ZmMWU4LCAweDBiYjRkZmI2LAotCTB4NzZjM2M3ZTQsIDB4ODk0ODNlZWYsIDB4ZWQ0YmM1ODMsIDB4ZjhlYTNlNmQsIDB4ODU2YjYwZWQsIDB4NzhhN2I3N2IsCi0JMHhhNzhhMTQxYywgMHgxYmJiM2E5OSwgMHhlNzZiNzdiYiwgMHhlZDYyMTQ3NiwgMHg5Nzg2M2NhNSwgMHhiYjk0YmQyYiwKLQkweDcxMGM5Zjk4LCAweGU3NTcyZjQ3LCAweDFmOWY5NjczLCAweDA3YjU2ZDE3LCAweDAzZDE0NjU2LCAweDg0ZjdmMTE2LAotCTB4ODY3ZGY4OGIsIDB4YmI2NzJmNGEsIDB4Njc0NjJkZjUsIDB4MTcyNWZmNmEsIDB4NjJmNDY1YWYsIDB4YjllMTRiYTAsCi0JMHg5Zjg3NDg1MSwgMHg3ZjcwOTExZCwgMHgxMWJiOWUxMSwgMHg1ZDk0YjRlMywgMHgxMmZkNjFiNCwgMHhmODI4ZjNkMSwKLQkweDQ1Yjc5Mzc3LCAweGRlZmJkM2E0LCAweDU5Zjc4NzE4LCAweDkwNzg4NjFkLCAweDA5ZTk4M2EyLCAweGIxNzc5YTZhLAotCTB4ZTY5ZmE3NTgsIDB4YjBjYTE2MDUsIDB4MmM1ZGU3OWYsIDB4ZjYwYzc0NjMsIDB4OTM5ODM4NjcsIDB4Njg5YjVlNmYsCi0JMHgwMzk2ZjRlNiwgMHhiNGRkMmZlZCwgMHg2ZmNiZDY5MiwgMHgyNjRlZjQ2MywgMHhiZWQwY2JmOCwgMHgzY2Y3Njc1OCwKLQkweDhhMGU0NTFjLCAweDM3MTc0NTBlLCAweDg0YWRiZjM0LCAweDQ5Zjg3M2I1LCAweDdmZmVlNjgyLCAweDllOGI4ZjExLAotCTB4NDVjNTkxN2YsIDB4NDkzZjZlMjQsIDB4ZjJlNzNhMDEsIDB4ZmE5ZjQyMjksIDB4MjYxZGI1ZjgsIDB4N2FlMzJmODYsCi0JMHgxMzNhZjgxMywgMHg0MzdiZDdiYSwgMHgzZWZkZWIyZiwgMHgwZmQ3MmY1YiwgMHgxYmM2ZGJmMiwgMHhmMWFiZjVkNiwKLQkweDU5MTVkNmQxLCAweDVmYWMwNGNmLCAweDk3MGRlM2MyLCAweGQ1ZGUxODk4LCAweDRjMWQxYmYyLCAweDdiNjlhYjBlLAotCTB4YTVlMjJjZTUsIDB4OGYyMTUxZmIsIDB4YjgxNzk4YWIsIDB4Y2YzZTA2NGYsIDB4MmYxNzFjZGIsIDB4NWY5OWQ2NjgsCi0JMHhhN2U3NDczYiwgMHgxZjNiNTc5MiwgMHg2ZmU1NzBlMywgMHhkMDJmMmY5ZSwgMHg5ZTM3NTVmMCwgMHg2YmFmMjlmYywKLQkweDg2ZTM3NGYxLCAweDNhNTc1MzNlLCAweGJkY2ExZjYwLCAweDNlZTMwMWQ2LCAweDY1ZjczYTViLCAweGJjMzJmZDAyLAotCTB4YTNmZDkxOWQsIDB4ZGQwZTUwMmIsIDB4Y2VmNjhhZTcsIDB4ZGJjMDQ2ZTUsIDB4Mzg3Y2VkMzgsIDB4YzlmYjA2ZGUsCi0JMHhhMzdiZWQ0OCwgMHg1OGUzZDE4YiwgMHhiZTJiNmZiNiwgMHhkYmJiZWUxZiwgMHg0NDUxNjQ5ZiwgMHhkMTM3OTc3YSwKLQkweGUzODQ2OWYxLCAweDU5YmYwZTJjLCAweDhlMWM3MGRkLCAweDg2NTc1NDdlLCAweDdmM2E3NWUzLCAweGM4ZTE1ZWE5LAotCTB4NDljMmFmZjEsIDB4YjBmNTRlZmQsIDB4MTg0NDhlOTksIDB4NTdmN2IwOTcsIDB4MGFhZmUzYjUsIDB4MjdmMTkxN2UsCi0JMHhhMWRlZmFmMCwgMHhhMmZjODI0ZiwgMHhmNGY4MTJmMiwgMHgxZjNmYjNlYywgMHhiMGY3NmRhZCwgMHgzMGJkZTI3ZCwKLQkweGJhYmVhOTBlLCAweGQ4M2ZiNTdiLCAweGRmNTA3OTdkLCAweDA0NzNjOTNmLCAweGFkZmU2YmNlLCAweGFlOGFhN2EyLAotCTB4YTlmNjMwYmIsIDB4NTZhZTEwY2UsIDB4YWVhZGRmYmYsIDB4NzYwZTE4NmMsIDB4MjBjYWFhZDYsIDB4NDBiYjU0YTYsCi0JMHg4YTZhOGJiZCwgMHg2ODVmZDAxZSwgMHg3OGI0NmYxNSwgMHhiYzM5ZWI1NCwgMHgzMmI2NTc1NywgMHg0ZmQ1OTEzYiwKLQkweDI0MGY2MGRjLCAweDk5YzkyZjhjLCAweDMzMzc2OGIxLCAweDgzN2FmNDNiLCAweDYwZGNmOTJjLCAweDdiZjk5M2E3LAotCTB4NWJlY2M5NjcsIDB4ZTcwOTllOTcsIDB4YmYwYzg0ZTAsIDB4MWQ2YmJlMDYsIDB4NDM2MmZmY2MsIDB4ZjgzZjUyY2EsCi0JMHgzZWMxNTllZCwgMHgyMmVkMDgzOSwgMHg4MTc2NzQxNywgMHg5YzhiY2Q1NywgMHhmMGQ0ZWU5NCwgMHhmNTgzMzFhMywKLQkweDkwNDI1MmU1LCAweDI0NmUxZGEwLCAweDQ3OWRhZWZkLCAweDJlY2VhYjQyLCAweGQ5OGI4NDZhLCAweDEyZmJjMmVhLAotCTB4MmVmNmUxMzMsIDB4ZWZmNTBmMGUsIDB4NzJlNWFjNjQsIDB4Y2RkYjg2YjgsIDB4MTk3YjA3MWUsIDB4YmI0YWRmODUsCi0JMHgzNWEzZjcwYiwgMHgzOWQ4OThkNywgMHhmM2M2NmFjMywgMHg0MGYxYjgzNSwgMHg4ZmQ2Mzk3ZCwgMHg3YWMxYjBlYiwKLQkweDQzZjNkMDQ0LCAweGU0NDI3Nzk4LCAweDdiNDMxMTFhLCAweDIzOGY5MDA5LCAweDNlZjkwMDhhLCAweGY0MDZiNDI0LAotCTB4NmQ4OWFlZDYsIDB4ZDlmN2MzZjcsIDB4ZTAxZDVmMzYsIDB4ZDZkNGNiZjcsIDB4NGZkODAyZTMsIDB4MDBjMzdkNzMsCi0JMHgzZmEyYjVjZSwgMHg3ZmY1YTE0MywgMHhhMDMzODYyZCwgMHgzYTJkMWE1ZSwgMHg2YmQyY2YxNiwgMHhhN2RhYWZjMCwKLQkweGYxNjE5N2I5LCAweGIxNzkyMzQwLCAweGU1OWFmZTY3LCAweGM1M2RjMzY2LCAweGU1YjRjM2Q3LCAweDJkOTQ2Y2ZiLAotCTB4N2JmY2Y1YzYsIDB4MGIxZjA5MjksIDB4NzRiNmVmMjgsIDB4ZjE3M2M5ZGIsIDB4OGU1MWQwN2QsIDB4YTAwZmE0NGYsCi0JMHhiZjZjMjNhZiwgMHg2MjU2NjBiZSwgMHg0ZGZkOTllMywgMHg2NzY3NTU3OSwgMHg2YWFmMmFiNiwgMHhmM2YzMzNjNiwKLQkweDU3YTUzZDUwLCAweDc0YWJhN2IwLCAweDM1ZWNkODMyLCAweGE5MGQzZDAxLCAweDc0YjVkZmE2LCAweDgzMmY0NTExLAotCTB4NzJmNzA2NzEsIDB4MGZjZWExMWYsIDB4M2MwMDA3ZGUsIDB4NmM1OThiYzUsIDB4YzVkMDMxYmYsIDB4MjVmYjZlYmUsCi0JMHhiMzJhN2JmYiwgMHhhZjMzYzI1NSwgMHhhMjM4Zjk2MiwgMHhkMWZjNjBmZSwgMHhlM2VkYmEwZiwgMHhjZGRlNThhYiwKLQkweGQ4MGJlNTcyLCAweDA1YTFkYzdkLCAweGE2ZDdlOGIxLCAweGNiNzY2M2NlLCAweGMzZDA1NmRhLCAweDJlYTRiNzY2LAotCTB4ZDk5OWZiODQsIDB4MGFmZWViZDYsIDB4N2MyOTNlZTksIDB4ZTI3MjBlYzgsIDB4ZTc5ZTJjYTcsIDB4MmFiZGVmZGQsCi0JMHhmYmJhNjlkOSwgMHhkZWY4YWRkZCwgMHhjZmRmMzRmYSwgMHgwNGIwOTJlNiwgMHhiNzExZjdmOCwgMHgwMWViZWNjYywKLQkweGM0MDVkM2U0LCAweDA5NDFmM2MzLCAweDg0ZjdiZGNlLCAweDQyZGU3NzAyLCAweDFhYmVmNzczLCAweDYyOGUwNWI4LAotCTB4NWY4NDhmNzMsIDB4ODJmOTc0MDMsIDB4YzM2OGE5ZWUsIDB4N2IzNWRiNTYsIDB4ZDY3OTY3NWUsIDB4NjZmZDdiYWUsCi0JMHhiMjI3YWUyYiwgMHg1ZmFlMmI1ZSwgMHhmNjQ0MWY1ZCwgMHhiOGVlZjJjNCwgMHg5MTJlMmNjMCwgMHgwYjQ5OGYwYSwKLQkweGRiNjdiYWQ5LCAweDdjOThmY2U3LCAweGRiMzlkZThiLCAweGNjYWZlYTNhLCAweGM3Y2Q4ODdmLCAweGExY2Y5ZjA4LAotCTB4NGVjNWNhODgsIDB4YTRlNGQ3ODcsIDB4ZTFkMGZmZWIsIDB4NWViNDlkMTUsIDB4NjY5YzM1ODksIDB4NjJmYzg4MWUsCi0JMHhlODk5N2M4MSwgMHhhZTg5MjZiYiwgMHhkZjAwZmNmZiwgMHg0MzgwNDRiMCwgMHhkMmFiOWY2YiwgMHhmNGU0ZGYyZiwKLQkweGVmYTcyNmZkLCAweGUzYmJkMzM3LCAweDFlYTAyNzE4LCAweGFlMDI0ZjdkLCAweGIzYTcwNjZiLCAweDQ3ZGZiYjM1LAotCTB4NmZmM2NjM2YsIDB4YTU0Yjc4YjAsIDB4ODNlYjcyYTIsIDB4NDkxMzM3NjgsIDB4NmFhYzM4YjQsIDB4ZGZiNzI2ZmEsCi0JMHgwZTk1NGUyOCwgMHgwZGNlM2MwMywgMHg0ZDE5OTdlMywgMHg5ZmJiZjQ3NiwgMHhmNGVhMjk5MSwgMHgwMjk5MTlmMCwKLQkweDFkNmI4N2Y3LCAweDJmNGU4NzdkLCAweGQyZjVjNTVkLCAweGZmODBmZDllLCAweDg1OWZiMTgxLCAweDM5ZTMyN2NiLAotCTB4OWVlYzhmNmMsIDB4ZmZkZmYyMDgsIDB4ODViM2EzMzQsIDB4MjkzYzI4NTMsIDB4MTNhY2U1ZGQsIDB4ZmM3MGRlZjAsCi0JMHhmMjAyMzZhOSwgMHgxYzRkNjE3MCwgMHg4NWYzZmI4MSwgMHgyMGZiZmMwZiwgMHhkNjUwYzc4OCwgMHg4MWI3MzRhYSwKLQkweDFlMDgwYzljLCAweDhiMjViZmIwLCAweDQ2N2UzMjRiLCAweDEwZTliNWU3LCAweGJmMjE4N2RiLCAweGYwZTllNjA0LAotCTB4M2Q4ZDBlMmEsIDB4YzhhYTQzYmEsIDB4ZGY1ZDAzNzAsIDB4M2M4MmYwZWIsIDB4Zjc4NzdmOTgsIDB4NmZlNzhjMDMsCi0JMHg3YjA0MWQwZSwgMHhmOTllYmFiNywgMHgwMGQ5MjhmNywgMHg5YjQxZjlmZiwgMHgzMTJiNTMxNywgMHgzNmI5NTBjNywKLQkweDkwYWM0Y2RmLCAweDZjYzRjYjI2LCAweDczY2I3YzgzLCAweDFlNGJiMDVmLCAweDE4ZTRlZWI2LCAweGRmZGY2NTYyLAotCTB4NzJmNDA0YjgsIDB4NWJhYzgzNWQsIDB4M2VhMGE4ZjcsIDB4M2ViMzdkN2YsIDB4ZTdkMjExOWYsIDB4ZTdkMTFlYzcsCi0JMHg0MzFhODNiNywgMHhmZmMzOTVmMSwgMHhmZGExZDRjZSwgMHg4NzdmMDIxNiwgMHgwYjQ1ZjhhNiwgMHgwY2JlYjNmYSwKLQkweDA1ZmEwMDdiLCAweDRkZGU1MGRhLCAweDgyYzk2ZTJlLCAweDVlNGZkNmZiLCAweDljZTA5YTcwLCAweGRmOWJlZmJmLAotCTB4Nzg2ZDdkZTIsIDB4YzllMzFkODcsIDB4MGM1M2ZjMWYsIDB4YzA3ZjAxODksIDB4YTE1YjZkMTcsIDB4MDRlMjk4YmMsCi0JMHgyZmM1NzdlYywgMHgwZWMwZWFkYSwgMHg3YTg0NjdiMiwgMHg1ZmEwMGQxZSwgMHgzMWJmOWVjNSwgMHg3NmYwZjliZiwKLQkweDZmZWUwMDRiLCAweGRjZmJkOTNmLCAweDlmNmY0MDBiLCAweGZhODdlZjZjLCAweGRmODJjYmNlLCAweGQ3ZjlmZDA0LAotCTB4YzRlNjdjMzMsIDB4MjcyZDdkYjAsIDB4ZGUzM2QyODYsIDB4NzVjZmViYmIsIDB4MWM5OTNiZjcsIDB4MWU2Y2FmNjksCi0JMHg0ZTU5ZmIwMSwgMHhiNDdmYjMzYywgMHgwMTFjMWU1NywgMHg4ZjBlNWNmYiwgMHg0OWVhYWU0MywgMHhiYzdlM2MzOSwKLQkweDI3NGZlYTliLCAweGU1MTQzOWQ5LCAweDBmY2U3MGMyLCAweGIyMDU4MTc5LCAweGQ1ZmEwMWQ3LCAweDUzOTAxODhhLAotCTB4NzllNTY3NWQsIDB4YWMzNThmZTAsIDB4MTU0NzBmNTYsIDB4ZjQwNmQ3Y2YsIDB4N2NmOTJiZGYsIDB4ZjdjZDEwMTYsCi0JMHg1NmY3Yjg3NCwgMHhiZDAwYTRkNiwgMHhiZWEyNDMzZCwgMHhmOWMzNWM3YiwgMHg2NWU3ZjllOCwgMHhmMjJmYmNmNSwKLQkweGQxNDQ2OGY4LCAweGM4OGFjZmJjLCAweDFmYWNiMjczLCAweGJlMDAyNWY4LCAweDE3YmU0NjA2LCAweGZiNTVjNjFiLAotCTB4ZmZmYmNhOWYsIDB4OTJmY2NhY2MsIDB4Y2UxYzM4MTMsIDB4N2Q0MTFlNTUsIDB4YWRkZjViYTAsIDB4NjhhNzdhZjQsCi0JMHgwN2I1NzlmMiwgMHhmYzIzZTY5MywgMHhkMDJkMjYwZSwgMHgxZmI2ZjM5ZSwgMHhmZTAzOWE0ZSwgMHhmYzY2MGQzNiwKLQkweGIzMjU1M2JiLCAweDI3MjQ3ZDlmLCAweDQxOGJiZTAxLCAweDAzOTQyNzk4LCAweGFmODIzYjFjLCAweGQ1MWVhMGI5LAotCTB4ZmQ2OGM3NjcsIDB4NmY2YmYyNTcsIDB4ZWNkMTRlZjIsIDB4Y2U5NWRmZDcsIDB4YmI2NWUzYmIsIDB4Y2E1ZTVjMTksCi0JMHgxNmZkYmRjZSwgMHhhMmNkYmJhMCwgMHgwNzE1YWEwNywgMHgxNDc5YmNlZiwgMHg4NGIzN2JjMCwgMHg3NjRiNzJlZiwKLQkweGJkYjcxODRhLCAweGI0MDZlZWJjLCAweGJlMzcxNDUzLCAweGZmZTMxNTMzLCAweDAzZGYzOTNkLCAweDkzMzJjYWYzLAotCTB4OWEwYzcxNWMsIDB4ZjQ4MGVlMTgsIDB4OGM2ZWNiNGMsIDB4NjFmYzU3YWYsIDB4NjA1NjZjOGQsIDB4YTNiYTdhYmUsCi0JMHhhM2YwOGM3NCwgMHg2ZGQ2NTQxYSwgMHgxNWRlNTNjMCwgMHg3ZWFiM2ZlOCwgMHgzMGI3ZTIzNywgMHhjNDZmNmZhMCwKLQkweDFiYTcyYjUzLCAweDhiNWMzM2ZhLCAweDNlYmQ2MzZmLCAweDhlZjhmZGQzLCAweDk1Mzk2NGIyLCAweDU0M2IxYTYzLAotCTB4ZjQ2YWE5YzksIDB4MDM4ZTMzZDcsIDB4YTM0NGRhMzcsIDB4NzcwM2VjYTcsIDB4MWRhZmUwMWIsIDB4ZmU4MzZmY2MsCi0JMHhlZTJjZDYwOCwgMHhlNTg4M2FkNywgMHhkMDIwMGUzMSwgMHgwNDdmYWMxNSwgMHgzYmMwYTI5OSwgMHgzNGM4ZGJjYywKLQkweGQxYjk1NTQ4LCAweDBkMWMxZDkxLCAweGRhMTY1ZmY1LCAweGY2MTVmZDllLCAweGVkN2U0NGU3LCAweDJlMzA4NzcwLAotCTB4M2VmZTVmNjIsIDB4Nzk2MTQzYjUsIDB4YTgzYWVmZjUsIDB4MzYyZDQ1ZTUsIDB4ZTRmOGYzZjQsIDB4NzFmMjhjYmMsCi0JMHg0MTk3ZjgwNSwgMHgyNjZjMTdmZCwgMHgzZWJmZGQxMywgMHgxMjY3ZDlkOSwgMHgwNDc2MmRmOCwgMHg3M2RjYmM1OSwKLQkweGU0OTMzZWMxLCAweDhkNzdkOTZmLCAweDBmZGQ0MTcyLCAweDc0YWZjMDRmLCAweGU5YzJmY2RmLCAweDRiN2VjMzBkLAotCTB4Y2ViZjMxNTYsIDB4MTkxNTNlZTQsIDB4YTRmMDUxMTUsIDB4MmI5MDRiYjYsIDB4MTIzY2UwMzIsIDB4ZDllMWQ3YmUsCi0JMHhhN2YyNzA4YSwgMHhjMTcyM2VjMywgMHg4MWY2ODI5NywgMHgxMjFlZGNmOSwgMHgwNmZkY2VlZiwgMHhiYWQyNzVmYSwKLQkweGZlMmZmYTVlLCAweGU4MTViODg4LCAweDczZDE2M2ViLCAweGU0NTA3YmJmLCAweGE2NTE2ZjllLCAweDkwZjNkZjBmLAotCTB4YjQ1Y2VjNTUsIDB4NjY0MjRjZDAsIDB4ODQyZWVmYWEsIDB4ZTYzNDYzZmQsIDB4Yjg1YmJmNzEsIDB4YTZmZjQwNTksCi0JMHhlYmY0MWI0NSwgMHhkYWFkNzg4MSwgMHg0MDUwODdiZiwgMHgyMmRmYjFhYSwgMHg2MGI0YzQxMiwgMHgxMGJjYmViMywKLQkweGY4MTcyM2Y2LCAweGZjN2JiMDY3LCAweGI5N2Q3YWEyLCAweGE0YTg0ZWZhLCAweDFhMjViMmYxLCAweGVhMjBiZWRjLAotCTB4MmVjOWJjZmEsIDB4YjM2ZTE3OWEsIDB4ZGJlZWZjZTIsIDB4MzVlZWNiMTQsIDB4N2Q4NWUyNjQsIDB4ODljOWJjMzAsCi0JMHhmODk4YmM3MiwgMHhiZTNmM2JkOCwgMHgzMDNmOTYwZiwgMHhkMjg4YmJkZiwgMHg4NWYyZDc2NywgMHgzMDdkNDVkZSwKLQkweDdkODEwNzdlLCAweGY4OTViMTZmLCAweDFlNTg2MzVkLCAweDBiMjAxN2UyLCAweDM4YjI5ZjIxLCAweGVkNGViMDUxLAotCTB4MjllMjk2M2IsIDB4MTVjMDM0MjQsIDB4NTNhYzJmNTksIDB4NjVkZTRlNWIsIDB4MTE2ZTJjZjgsIDB4YmQ2MGEzNDIsCi0JMHg2NDQyN2VmMCwgMHgyYmQ2ZDVlYiwgMHg2OTI4NzBlMSwgMHgxMWVjZThiNCwgMHgwYTdmZTBhNSwgMHg5NzRkMzM3ZSwKLQkweGI5N2ViYTJkLCAweDhmZGQxZjNmLCAweDY5ZTI4ZDg5LCAweDBkZGNiNzUzLCAweDRmY2QxYjVjLCAweGQ3ODczOGZlLAotCTB4NTJmMzNiYTYsIDB4MDUxZjNmODEsIDB4MDcyZmIzM2QsIDB4MTczZDM2NjgsIDB4NjFjYzkwODMsIDB4NzFkMmI3ODAsCi0JMHhlNzc2YzY2MiwgMHgyNTZiM2NiMSwgMHg2NDdkNGZjYiwgMHg1MWU5MGZlMCwgMHgxYmNlZmUxYiwgMHgxNDJjNmZkZSwKLQkweGY3ODc1ZjczLCAweDdkYjljZjU3LCAweDcxZDE3NjNmLCAweDY5YmM5YTE2LCAweGVmNTNlNDY2LCAweDVjZDdmNDUwLAotCTB4YzRmZmQ2Y2UsIDB4MmI2YjhhOTgsIDB4NTU3YjljYTIsIDB4MDQyZTNlN2MsIDB4YmZkMWJlZjEsIDB4Y2VhYmVkOTcsCi0JMHg3ZGE0YjBjYywgMHhjNWM4YjQ1ZiwgMHhhMWVjNGZlNCwgMHgxMDc3N2MzNiwgMHhiYmUwMmRkZSwgMHgxMzg1MjdjNywKLQkweGM5ZjAyZWY4LCAweGNlMDQyOTFmLCAweDZmMTQyOWU1LCAweDE0OWYxZjIwLCAweGJmODgyYWM4LCAweDczMzRkOTk1LAotCTB4YmY4MDZiYzksIDB4YTNkNDE4Y2MsIDB4OGEyNjliNGEsIDB4M2Y1YzBlYTUsIDB4MTVlY2EzZDMsIDB4OTllZjcwNzUsCi0JMHgxOGY4NmYzYywgMHhlZWJhNmJhMCwgMHhmZjAxYjc3OSwgMHg1Yjg0MTRiYiwgMHg0MWQxODNhYSwgMHhmYTdmNGFjYSwKLQkweDdlMzA5MWQyLCAweDgwZDc5MmVlLCAweGUwYzU0NmVmLCAweDBhNjRkOTNiLCAweGE2M2M2NzJiLCAweDRhMmY0MGViLAotCTB4NDEwNzE5MjEsIDB4NTc0Y2E3OGUsIDB4NzcyZDgwYzYsIDB4OTM4ZDhiOTMsIDB4Y2RlNzEyNjgsIDB4MGM2ZGZkMDQsCi0JMHgyNDNmYzdjYiwgMHg3MTIyYjc3OCwgMHgyNTc1YzQ2ZCwgMHgzNjlmZDg1YiwgMHg3ZmEwZWY4MiwgMHg4MDRlYzE1YSwKLQkweGU3ODYwMWU1LCAweDMwMTkxNWM5LCAweDk2MjBmMjdlLCAweGY0MjFjODI2LCAweDhkZGEzYTUzLCAweGNkZWExZjc3LAotCTB4ZTUwNGRjY2IsIDB4MTM0YmIyZjIsIDB4ZmI2OWUzOTMsIDB4YzBmNDFkYTMsIDB4ZDFkNWU1NGMsIDB4MWQ5ZWFhZmUsCi0JMHg0MzllODA3MiwgMHhmNTY3MGYwNiwgMHgyY2IxNWViOSwgMHgyN2U1Zjk4MywgMHgxMGZhYTlhNCwgMHg3OTI1ZDdhYiwKLQkweGZjODJjNzYzLCAweGRiZTk4NzdjLCAweGIxYmMzYjlmLCAweDgzNzczN2UwLCAweGI4MGZkZDFjLCAweGZjYTllMzg2LAotCTB4MzQwNDlkYTIsIDB4ZDY3Y2JmZjIsIDB4YTRkZWY4OTcsIDB4Zjc0YmEyZmMsIDB4NjljOWUyMWQsIDB4MGE0YjQ5ZmQsCi0JMHhlM2RjNjEwZSwgMHg3ZThhZDI1MiwgMHhiZDQxYTVjOSwgMHgzMTBkZWJmZiwgMHhlOTU1YzdkMSwgMHg0OGEyZmNiYywKLQkweDk1Yzc1MWZjLCAweGY2MmZkZmY1LCAweGQxM2VmZTIxLCAweGJmZTkyNWVhLCAweGY5ZjQxNDVmLCAweDNkNzhhZmU2LAotCTB4ZDkyNzdlMzMsIDB4YzczODJlNmQsIDB4MDc3ZDg3NGQsIDB4ZTRjMDQ5ZTQsIDB4ZTA4ZmFlOTcsIDB4YTZkZGQzYTUsCi0JMHgxNTNhNmZkYiwgMHg3MWUyZWY5NiwgMHhiNTcyZDU3NSwgMHgzMjU5Y2VmZiwgMHhjNjEzOWY3ZiwgMHhhOTJhM2E3MSwKLQkweDc5ZjBhMjQwLCAweGI0NTNlNWFhLCAweDFjYjQ5NmEzLCAweDc0YThmODQ0LCAweDlkOTM4MTExLCAweDRhNzAzNWY4LAotCTB4OTkwZDZhYWEsIDB4ZmVmZjhmMjgsIDB4NDc2YjQ1OTEsIDB4NzI1MTRiNWUsIDB4M2ZiM2YzODgsIDB4ZjI5N2FkNmYsCi0JMHgyZmM0MTI2ZiwgMHgzZGI3ZjBkNywgMHg1MWRmOWJiMywgMHg4OTMyNmNjYywgMHhiZjk5ZGVkYywgMHg0ZDA0Y2E3NiwKLQkweDZlZWZkNzllLCAweDIxZjgyZmVmLCAweDY0OGU2Nzk0LCAweGE0N2JkZmVkLCAweDA3MmI3N2YwLCAweDVkMTNlNDQ3LAotCTB4NTNhZTVhNDcsIDB4ZjIxYWI3OTMsIDB4YTUxZjlhMGUsIDB4ZTUwZGJiYzksIDB4MTRmMjg2MDksIDB4YWIzZmJlNDMsCi0JMHhhNTBjZTFkZiwgMHhkYTQyMWU4OSwgMHgyMWZkMjkxZSwgMHg4ZWI5NWRmYywgMHg4ODVjZDBkNCwgMHhhYzQxYjAzOCwKLQkweGRkZmMyMWY4LCAweGY2NGNkMmM5LCAweDVhY2IxNDc3LCAweGIzNzMwZjA0LCAweGYzMmJmMDYyLCAweDg3MzA3YmIwLAotCTB4Mzg1ZTRkYTcsIDB4ZmFkMGUwMTIsIDB4OTI4M2M4M2EsIDB4ZmEwZGMxNjYsIDB4MzNiODIzYmUsIDB4YTc2ODc5ODQsCi0JMHhkOTA1ZGE2OCwgMHhlMDkyYWQzYiwgMHg2YmQ3NmMwOSwgMHhjODRkYzNmZiwgMHgzZjBmMGZjZiwgMHhlNGFlZjU4OSwKLQkweGViYTY0NGVmLCAweGYzN2JlMGZkLCAweDdjOTg3NGIzLCAweDUzZGY2MTE3LCAweGVjNzcwY2UzLCAweDc3ZjIzZjdjLAotCTB4Y2VmN2U4ZWQsIDB4OTQ2MWVmNTQsIDB4YWFmNzg2YTcsIDB4NDcxZjMwZTUsIDB4Mzg1NDVmODQsIDB4MDJmYzNjM2UsCi0JMHhmM2ZjNWRjNiwgMHg0MGY3OTZhOCwgMHhmYjJmYjAwZCwgMHg5NWU4MDU3NCwgMHgxZTllOTYxZiwgMHhjNDE2N2EwNywKLQkweGUzZmQ4NDZlLCAweDJkNzAyMTcxLCAweDExNGY0N2VjLCAweGVlMzBiNWRmLCAweDBlNDNhNWJkLCAweDM5OTQ5ZmMyLAotCTB4ODE2ZGI1MmUsIDB4MWVjMzEwNTAsIDB4M2ZmMDhmNWQsIDB4MDAxYjZjZWUsIDB4ZGFlODkyN2YsIDB4NGY5NjFhZDgsCi0JMHgxMDA4YzM2YywgMHhmZDM3NjI2YiwgMHgzOWZiNGNkMCwgMHg4MDZkYTAzZSwgMHhjNTQ3ZTY4OSwgMHg0M2U1NjYxZSwKLQkweGZlNDBiNmRhLCAweGIwZGZkOGNlLCAweDAzNmQ1MWYyLCAweDFkMWMzNzQ0LCAweGRiN2YxMTFhLCAweDNlZjlkMWRjLAotCTB4MWJjOTk2MmQsIDB4MDY0MzdlNzUsIDB4NDE2MzUzN2IsIDB4ZmI2MTJhOGYsIDB4YjQ4NzNjMGUsIDB4YjczYWI5NTIsCi0JMHg2ZDhlZGNlOCwgMHhmZjczMWUxNCwgMHg2ZWYyOGVkNSwgMHgzZmVkYzc1YiwgMHgzZmIxZmE2NiwgMHg5MmEwZmMxNywKLQkweDVmNzFiYzM5LCAweDQ2NmVmOTQ0LCAweGY2MTUyMWJkLCAweDNlMDhmOGMyLCAweDBhYWQ2OTlkLCAweDJhMjMxYmVlLAotCTB4OTA1ZTgyNzYsIDB4ZWUyNDc3M2MsIDB4ZWY0ZTlkMWIsIDB4OTE3MWQ4ZGEsIDB4OWEwNDhiZjQsIDB4OGRhYzc5ZDIsCi0JMHgyZWY5MzM3NSwgMHg1YjNkZjA5YSwgMHhkNDRlODNmMiwgMHhmMWU1MWU5ZiwgMHgyMWRmMjliYSwgMHg1ZTM4Mzg3ZCwKLQkweDhjZjVmMmM2LCAweGExZTc2NThkLCAweGQ4NGRkNzQ0LCAweGFmNWNkZGNmLCAweGQ4MWY1OWFkLCAweGZmZjBhMzZlLAotCTB4ZGUwZTdhOTMsIDB4MzllNGY0YzgsIDB4YzRlZTU0NzUsIDB4Mzc4MTdmODIsIDB4MWNjOWU0MTUsIDB4OGM4ZjA3YjAsCi0JMHhiZmJkNTVlNCwgMHgxZGU2ODMyNiwgMHhjZDU4ZjM5MSwgMHgzNmFhNmY0YywgMHgxZDRkNzgyZSwgMHg1NWU1NTcyYiwKLQkweGFmNmIzYTRkLCAweDU1Yzk1YmVlLCAweDhmYzkzZTBjLCAweGQ2MTViYjVlLCAweGZmMzMzNzYxLCAweDg2YjNjNTgxLAotCTB4N2E4MTVkNmUsIDB4NWYzODZkYzAsIDB4YzJhNmY1ZTIsIDB4ZTE1NGZjYjksIDB4YTNlODEzNDAsIDB4MGRhNjdlMmEsCi0JMHhlYjgyZGVmNiwgMHgyYTM4ZjdlMSwgMHhkN2YxZDQ5ZSwgMHgxNDJmNzVmMiwgMHhmNjAxMWVhOSwgMHhlMTBmYjc3NCwKLQkweGQxOGFmNTQ5LCAweGU5OWQ3MmVjLCAweDVhZTk2YjE1LCAweDdjMmExZjAxLCAweDFjNmRiOTg5LCAweDA0NWZmZjdjLAotCTB4MGNmZmE1YTcsIDB4N2VkZGZkMzgsIDB4YmM3YmQzZGMsIDB4ZmQwMzU5YzcsIDB4YWQzZjJlOTcsIDB4ZTFjMzhmN2YsCi0JMHg5MjEwYjhmZSwgMHhmMTM1MzM5MiwgMHgzODc3ZTg1MywgMHhmMmVhZGU3NywgMHg3MzU2MjJmZCwgMHhjMWY3MzViZiwKLQkweGQ1M2ZkNDUyLCAweGU1ZmZkOGY1LCAweDkxNzc2OWE1LCAweGQ0NjlmYzllLCAweGM5ZmY4ZjBmLCAweDAyZWMwMWJhLAotCTB4Y2EyMGU1YzcsIDB4MjYzZmUzZTMsIDB4MzhlNDJlZjgsIDB4ZWFhNTY3OGYsIDB4NWFmZjU5YjcsIDB4NmRjZTE0N2MsCi0JMHgyMjJiMTFmZiwgMHg3YTU0ZDg3ZCwgMHhlNjc3NzIxMCwgMHhhN2FlZjg1MSwgMHgzYmJjMzlkYiwgMHhkNDY0ZmQ1NywKLQkweGM3ODZiYWZkLCAweGUwNzlhZGExLCAweGQxYWY3YzNhLCAweDNjZjBkYTQ1LCAweDI4MjZjZmVlLCAweDY3Y2JiYjNmLAotCTB4NGE3MmM1MGYsIDB4YzgxYjdlMjcsIDB4OGMxOGMyODksIDB4NDE5MzVmYzcsIDB4Y2Q0OTdkZjAsIDB4MGU1ODExZWMsCi0JMHhjN2Y0NThlNywgMHg3MWM1NmQ5OSwgMHgzYTMyNjY2YSwgMHg0NzhjMjlhYywgMHg1ZGM4MjE3YiwgMHg3NDZmNWI4MCwKLQkweGVjYzU1NDk0LCAweDFkZWNjNDFmLCAweDdmMWZiZGFkLCAweGY5Zjk5NjJmLCAweDc2ZGIzM2RiLCAweGVkN2EwZmJmLAotCTB4YjVlYTFiMDYsIDB4NTdiYzQyODAsIDB4ZjFjNjRlYTksIDB4OGZlYzNkMjgsIDB4Y2Q5N2ZkYzUsIDB4YTk2M2UxNjMsCi0JMHg1YzcxODc4MSwgMHhkNjAzZGEwZiwgMHg1MWYzYmQzYSwgMHhhZWNjZmRjZSwgMHhkYjM3ZmNjMCwgMHgxOGViM2FjOCwKLQkweDU1OTBlNjM4LCAweDdjZjkyZjI4LCAweGU4MTNmNTQ4LCAweGViOGYzMTU3LCAweDVjMTUxZjg5LCAweDcyMWU4MjcwLAotCTB4MWVkYmI2MzQsIDB4ZjlmMzg1ZTAsIDB4MTdjYWMyMDIsIDB4MDEzZjY0M2MsIDB4MGYwNWFiZTcsIDB4NjRiNzc4YjEsCi0JMHhmZDVlNGRkZCwgMHg2YjlkMDkzZCwgMHhmOWQzZDgxMiwgMHgwOWQ4NmQ0ZiwgMHgzYjQxZjA3MCwgMHgxZmZmZjQxNywKLQkweGU0MWY3ODRlLCAweGMzYmQ4ODdiLCAweDdlZGE3ZTI1LCAweDQ3ZmRhNDc4LCAweDk3NjBmN2MwLCAweDQ5ZmNkOTE3LAotCTB4MTY4OTVkYTUsIDB4NThhM2Y0ZTcsIDB4ZmQ1Mzk3ZWUsIDB4OWUzYjU3ODQsIDB4NWZiMThlM2EsIDB4MDM2YzhlN2EsCi0JMHgwZjcwYTM3ZSwgMHhmMGE4M2JjMSwgMHg1OWRmZDhjZiwgMHg0MTM3Y2UzMCwgMHg0NmMyZmYwZSwgMHg4YTU2ZTdjYiwKLQkweDNjMjkyYjcxLCAweGI4OWRjYjdkLCAweGYzYmU3NTVlLCAweGEyMzdjMzkyLCAweDdmZDBjMjlkLCAweDBiMmNiZGJiLAotCTB4NzllYWU3ZWMsIDB4MzlhNDNjODgsIDB4ZTQ1YzIxZmYsIDB4Zjg4NDVlNDgsIDB4NTczYzYxMDEsIDB4Y2ZjZWY4ZjUsCi0JMHgyODczYzZjZCwgMHg2OGIzN2YyMSwgMHgyYmJmNzVlYiwgMHhmY2MzMDQ1MCwgMHg4MjI5NWQzOSwgMHhlM2U2ZjAxOSwKLQkweDFjYjJmZWY3LCAweGViNzIwYjllLCAweDUwZWIwMmZmLCAweDgwMDA1ODllLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RjNWZmMDAsIDB4ZDU1NDdjMGIsIDB4NzNiOWY4OTksIDB4MzMzMmJjZWYsIDB4NDkzMjRjYzksCi0JMHg5YjhmMjEyNiwgMHg4MDQwMjEwNywgMHg1MjAyNGM0OSwgMHgxODc4NDMxZiwgMHhhNDA3NmIzNSwgMHg0MzhiNWIxNiwKLQkweDkyMTEyM2MyLCAweGIxNzViNjg5LCAweDUxMDBjYjY1LCAweDhkMDQyMjA4LCAweDQxMzgwYWJjLCAweGJiNmJiYTUwLAotCTB4MDYwMjIyYzEsIDB4YjZhMmQxMWEsIDB4NmViNDJmZWEsIDB4ZmRmZWVkNTcsIDB4NThmODg4NDUsIDB4MTY1NDQ2NDksCi0JMHhlZmZmYWQ1YiwgMHg5OWI5Y2VmYiwgMHg1MTQ0OTNiOSwgMHg2N2Y0ZGRiYiwgMHg3MzllZTcyZiwgMHg3N2NlZjljZiwKLQkweGNlZjlmN2JlLCAweGU5OWExNjE5LCAweGY0NjYyZGViLCAweGZjM2U3OWY3LCAweDMzNTc3Zjg3LCAweDMwMzRlODk2LAotCTB4N2NkOGNhOTYsIDB4OTY3NzM1OTksIDB4ZWI0N2RmNDQsIDB4NmQ2N2FhMjUsIDB4MzQ5NjdkNWIsIDB4MGJiYzAyYzYsCi0JMHg2NmY1MzZlNiwgMHg2MDdkYTFmYiwgMHg2OTRkZjliOSwgMHhlYjg4YmMyMiwgMHg2MzMwYjE5ZiwgMHhiNTZkOGMxNSwKLQkweDk5MzU5MGIyLCAweGY0MTI2ZGIxLCAweGJiY2YwZTUzLCAweDc5MzVlMTZjLCAweDIzNTgwZDhjLCAweGM2MDJiMDhmLAotCTB4NTlhZmM3ODIsIDB4MWJmYmVmODAsIDB4NGQwNjU0MTIsIDB4MDg1ODk4NzYsIDB4OGVlM2ExY2IsIDB4NTc2YzNlZjAsCi0JMHg2NGM0NWJkNCwgMHg3YzE4MDdhOCwgMHgyNGJlNzg2ZSwgMHgwZDI0ODQ3NywgMHg1ZTlhYzYwOCwgMHg4N2FjZjc5MiwKLQkweGFlNDdmZDc2LCAweGIyYWNmZGU1LCAweDQxY2EwY2E5LCAweGI4YzEzNmE4LCAweDU3NWZkMGMxLCAweGE0YzY0NGIyLAotCTB4ZmYxYTE2MzksIDB4NmMyOTIxY2MsIDB4NjZjM2ZhYzYsIDB4ODVlMGQzZTYsIDB4YmZlMWZhZmYsIDB4MmYxODMyZmEsCi0JMHgyNzE5MDg2YywgMHgxMDJiMTNjMSwgMHg4MjM2YzM4ZSwgMHg0MGRhNjYwMywgMHg4MTNmN2RlMywgMHg5YmYxODdhZCwKLQkweDAwY2Y5MjBjLCAweDhkYjc0ZGY1LCAweGYwZTFhZjBiLCAweDY3ZTAxODU4LCAweGM5YWQwMDk5LCAweGU4MjQ1YWMwLAotCTB4YjVlMDUzMmYsIDB4ZThiYTcwYzksIDB4YTc1ZTEyOGUsIDB4ZjhhNWJiNDAsIDB4M2RkYTk1MGYsIDB4Y2I5YzAxMmIsCi0JMHg2NDdhMWIyYywgMHhlMTM5OTM4MCwgMHgwZGJmYTgzZiwgMHhlYmEyZjNlYiwgMHhiZmUxYjRkMCwgMHgzNDc5YzMzZiwKLQkweDJkYjgwNDFkLCAweDNkOTdiODUxLCAweDZkYzc5ZmE2LCAweDI3YWQxNGNjLCAweDdlYjQ0M2I4LCAweDJmOGU3MmI2LAotCTB4NDc4NTgzMzYsIDB4NTEwZWJjMDMsIDB4ODRmNzU1YjYsIDB4ZjJjN2M0NjUsIDB4NjVjY2VjZTksIDB4ZWY0NGY0ZDAsCi0JMHhlYjFkYmYyYywgMHgzYzJkNTkzYiwgMHg1ZjMwZWY4MywgMHhkYTllZTAxOCwgMHgyOGNjZjFkNSwgMHhlZWFhZWY2OCwKLQkweDA2ZTljNmM5LCAweGEwYjFmZjk3LCAweDNhZThiMmVmLCAweGRlNWU3MDZiLCAweDc2NjY1OWI1LCAweDAzYmU4ZjFhLAotCTB4ZWMwNzdjNTAsIDB4OWNlYzZlZDQsIDB4ZDVjZmIxMDksIDB4NDFhYTVkZjQsIDB4ZWJjNzE1YmUsIDB4ODgxOTU3YzUsCi0JMHgwNDg2NWYxYywgMHhjODY5NmNlMywgMHhkYWJhZTAzNywgMHhiMDA1NzgxNCwgMHhiMzFiNmEyZSwgMHhkOWUxMTU2NywKLQkweGMxYzczNDU3LCAweGVjODk4M2Q4LCAweGQzZTEzZjU2LCAweGZlODdlOTViLCAweDJkNTY3NTFlLCAweGU5N2Y0Mjc0LAotCTB4OWQ1YmFhYWUsIDB4YmYxYzdjYTksIDB4MDI5ZmE3MDMsIDB4NmJhNTBkNDAsIDB4NDdlMWE5ZWQsIDB4ZDA1ZTk3NmIsCi0JMHgxZjZjZGE1YywgMHhjNGRiOWRiOSwgMHg5ZWQ5MTZmMSwgMHhmMDgzZGUxNCwgMHgxNzk1MTIyOCwgMHhiMWQ4ZGVmZiwKLQkweDg4NTNlMDllLCAweDk1ZDhlZTZlLCAweGViZjg0NjE3LCAweGU5MDk5YjU5LCAweDliMGIxOTdjLCAweDViMTc4ZTkwLAotCTB4ZTgxMTI4NTgsIDB4NGIzNDMxNjIsIDB4NmQ5MmU3ODIsIDB4YWNjNmE2NjYsIDB4NWY1ODQzNWYsIDB4YWUxY2VkNjYsCi0JMHhkM2Y3NGE2NSwgMHg0ZGQyMjI1MiwgMHg3NGIzZjUwZiwgMHhiMmRkYmViZiwgMHgwMWRiYWMxOSwgMHhkNjE2OGRmNSwKLQkweGE3NjdjMzZkLCAweDQ1ODliZWJlLCAweGUxZTA4ZTA4LCAweGZlYmFjZGNmLCAweGMzYWQxYjU5LCAweGM4NjMyYjc2LAotCTB4YmU2NTQ5YTcsIDB4ZmUwMWJiYmMsIDB4ZWY0NjBiYzgsIDB4YjdjZmEwMWUsIDB4Nzg2OGJhYzQsIDB4MzU1Njc2NDgsCi0JMHg2NDEzOWUyMCwgMHhiMjMzY2QwMywgMHgwM2RlMTZjYSwgMHhiMDMzZWNmMywgMHg0ZGU3NWM3YSwgMHgxY2ViNzYyZSwKLQkweDY0YWZmNjc4LCAweGExMjM0MmJlLCAweDc3YWUyMjYzLCAweDFmZDczZTNjLCAweDdkMjNkNmI1LCAweDEzZjk0MTZjLAotCTB4MzgzNzNmNDMsIDB4NWVlNzg0OGQsIDB4YmU0N2FiMTMsIDB4ZmQwZDVjYTksIDB4YTZhNWM4YzUsIDB4ZmMwMWVjOWIsCi0JMHg5NzI2OTc2ZSwgMHhjNDZmOWQ2MCwgMHhhODZiNjY3NSwgMHg5ZTkxZWQ4YywgMHg0ZmUzMmUxMiwgMHg4M2JkYmJlZCwKLQkweGE3ZjMzN2VkLCAweDRiN2JmOWMyLCAweGFlMDc0MjQzLCAweDBjZWU5NDUzLCAweGM0YWVlODhjLCAweGY3YzAwYTZmLAotCTB4NTgzYzg1NDcsIDB4MzhmZGY5NjAsIDB4NDBhM2Y3YTQsIDB4YTFmN2M4MDgsIDB4MGI5NzJiNGUsIDB4NzJmZTczOGEsCi0JMHhhNzdkMWYyOCwgMHg0NTVlYmJjNCwgMHhlMjcyZTBmYSwgMHhkODEyZjdlOCwgMHhmOWYyMTg2YSwgMHhkZWY1ZmVmNywKLQkweGZjZmVhMTk3LCAweDBjZDUyNjNiLCAweDQ2OTEwYmY1LCAweDRhOGYzZDYwLCAweDg1ZTM4N2NjLCAweGY3ODczMDllLAotCTB4YzA2NWJiYzEsIDB4YjJjZjA4YjYsIDB4MjhjMjEzZTMsIDB4MDI5OTBlZGYsIDB4MzhlMTE3ZGIsIDB4ZmJiZDFiOGYsCi0JMHg4OTY1YmJlMCwgMHg0MjNjNWZlMSwgMHhhMDVlMTlmNSwgMHg5MTk0ZjY0NCwgMHg4OGU4NjFkMywgMHgxMDlmN2Y4ZCwKLQkweGI5NWZiN2ZlLCAweDFiZGQzZWIxLCAweGFjN2JmNjgyLCAweDA3YzgxMzgxLCAweDA5MzU2Njk5LCAweDk3YmY2NWZiLAotCTB4YmJhNzFmMTksIDB4M2JmODA1YzgsIDB4ODI0YWYzOGQsIDB4Mzg0OTU0MjcsIDB4ZmE4Mzk3NGUsIDB4NThjYWZlMDEsCi0JMHg2OTljZmQwNCwgMHg4MGY5YTc0ZCwgMHgzOGUxZjRkYywgMHhmNzlhMzY2NywgMHgzMmRjZGNhMCwgMHhlZDQ0YWUzOCwKLQkweGIzZmQxYjRmLCAweGZhN2NhMDMyLCAweDJhZWY1Mjg5LCAweDliZjAxYWE4LCAweDdmNDA0ZGJhLCAweDVmNGI0ZGMxLAotCTB4ZWExN2EwNjQsIDB4YzQ2ZWVhMGMsIDB4YTM2ZTNiMGYsIDB4MTFlYjY4NzksIDB4MDZhNGI4ZGMsIDB4YWRiNzgzZWIsCi0JMHhkYWU1MDFiOCwgMHg3Mjg5ZmM0OCwgMHhiYmM4YzU5YSwgMHg0MWM5MTY3ZSwgMHg5ZjUxZGZmYSwgMHhmYThkZDlkZiwKLQkweDU3YWM2YmEwLCAweDJjMGY1YWE2LCAweDkzODdkMDNlLCAweDcyMzNlZGI3LCAweDE5OGU0NmZjLCAweGI1MmY0Zjg5LAotCTB4YTUwYmE0N2YsIDB4MWMwZmViOTIsIDB4OTRmMjA4MjcsIDB4ZjI0MmZjNjksIDB4MGYyY2E2MzQsIDB4MThlYmU2NTcsCi0JMHhmYzRlOWEzYywgMHhkYjNmNWYxZiwgMHhmOTA4ZjgxMSwgMHhmZmZlZTlhNywgMHg4YWI5NjM3OSwgMHg5ZTQ4NDVlMywKLQkweGUyNTRiNmIxLCAweGRiYmI4MDMzLCAweDZkZjdkZjAyLCAweGU1NWYxMDc3LCAweGY3MGY1MGFlLCAweDc0MWViYWUyLAotCTB4MzM1ZDNjZDEsIDB4Y2IwM2IyN2MsIDB4M2NhOGYzM2IsIDB4MWM2ZGM4NTUsIDB4ZTJjNmY1MTYsIDB4Y2FmNDhjMjksCi0JMHg1OGI1OTk2MiwgMHhkMTdkZThjYSwgMHhmNjdmNjg3NiwgMHhjZjVhNmM4OSwgMHhjZWI2NjZjNSwgMHgzNmNlN2MwMiwKLQkweGRiM2ZmYTcwLCAweGYwMGE3MjAxLCAweDI1ZWU2NzUzLCAweDRkZmVjYjM5LCAweGI1MThmYjYyLCAweGNiNzZjMTZiLAotCTB4YjI4YzkwNjAsIDB4Yjk0Mzc4YTEsIDB4Mzg1YmMzYTUsIDB4N2ZmYTBjYTYsIDB4ZTkwNzY3NmEsIDB4OGE3MjA2MDEsCi0JMHg5YTA1ZDhjNSwgMHhhNGY5NDMxYywgMHhjZGZkOWVmYiwgMHg0ODYzYzdhYywgMHhjN2M0Yjc5MywgMHhkOWY0YTkzMCwKLQkweDI4ZjJhMjEzLCAweDcyY2ZlOWQ5LCAweDMwYTE2MDU1LCAweDU2NzdmMTFkLCAweDA0ZTlkYzBlLCAweDg1ODRiNmY5LAotCTB4YjAzNjNlNDgsIDB4ZTM2YTdhNmUsIDB4NzJlNWJjODEsIDB4MmVlNWMyZDcsIDB4NDEyZTEzM2UsIDB4M2FjNmRlZmUsCi0JMHhhMjM2NmU0OSwgMHhlZTRlMWE0NCwgMHgzYmI5MDBhZSwgMHhjYmI5NjQ3MSwgMHhlMjI5NzM1OCwgMHhkZDhiNzgzNSwKLQkweDIyMWU3ODhiLCAweGQ3N2M4NTdmLCAweGM0ZGQzMWQ2LCAweDE1ZDRmMGU1LCAweDQ0OTU5OTYxLCAweGU4OWE5MGYxLAotCTB4MTE1YTk2OWIsIDB4NTdjMWFiZDUsIDB4MTI3NTE2MmQsIDB4MWYyY2ZkOTYsIDB4ZGE2M2FkZTUsIDB4N2Q0MWE3YmYsCi0JMHg5NDNlNjE1MCwgMHhlNjFlYjY5YiwgMHhiYmY3ODBlYiwgMHhmM2Y1ZmQ4NCwgMHhmMWZhOTUzNCwgMHgxODVkMzg5OCwKLQkweDg1MmIzZjE1LCAweDllYWFjYWZhLCAweDQ5ZjIwMzZlLCAweGJjYTI3MzJhLCAweGZlZjBmNDc3LCAweGJiZTAzOTc3LAotCTB4Y2I4ZWZjMzIsIDB4MmRlZmMxY2QsIDB4ZTYyMTI1YWMsIDB4NTZhM2FhZmIsIDB4NDcwYmEzYTIsIDB4ZTkzMzYxMWMsCi0JMHgwYmFlNDBjMywgMHhiM2ZiNGJmYSwgMHhmZWE0ZWM5OSwgMHhmMzkyMGVhMywgMHhhZjM2NDZmZCwgMHhkMWJiZGExMywKLQkweGJjZjVhMjFlLCAweGFlZmJmYTg3LCAweDIxOWU4ZjJiLCAweDIxOGEzNTU2LCAweDhkZDc0YWVkLCAweGVjZDY1NjQyLAotCTB4OWViY2M2ODMsIDB4MWVkZjQ4OWIsIDB4YzdjOGFiMzAsIDB4NzdiZDVjMTcsIDB4NjNjNjE5NjIsIDB4ZWRiZjI3MjgsCi0JMHhmMDVkYTk1MiwgMHg5ZmQyZjRlMCwgMHhkZmEwZmJjMiwgMHgwZGQ4ZTVlZSwgMHg5OGJkMjI5NCwgMHg2NGRkMWZlNSwKLQkweDI1OWI3NTgxLCAweDA1ZGM4OGFmLCAweGRiNjYzNjcwLCAweDY3ODcyODlkLCAweDlmZDdmZWU0LCAweGJiZjI4NjZlLAotCTB4OGNjYzhkMDcsIDB4ZmE2ZmJlZWIsIDB4YjIzZjk2M2MsIDB4MWIwODY4OWMsIDB4ZDBjNmY3NGYsIDB4ZmFmZGQyZWIsCi0JMHhiZWE3NjM3MiwgMHgyZmFjM2MxYywgMHhiODcyZTFkZiwgMHhkZTI3OGVjZiwgMHhmNDBlN2VmNCwgMHhiZjM3MzY2NCwKLQkweDlhZjAwMWQzLCAweGRjOTMzMjlmLCAweGY4MTVkZWJjLCAweDI2ZTdhNDY3LCAweGUyMjRlNDQzLCAweGZlZmI5Y2QxLAotCTB4NzNhZTAwYzQsIDB4M2UxMjA3ZDcsIDB4M2QyNjQwY2QsIDB4YzhiZjFjMjUsIDB4MGJhYzE3NTcsIDB4ZDhjMzlkNzIsCi0JMHg4NTdiNTFlYiwgMHg0Nzg0MGM1OSwgMHg1MTNkMDZiMCwgMHgyMGU0MTBmOSwgMHhkZWY5NWYwMSwgMHhiZmU2MWE3ZCwKLQkweDczODI0ZTc4LCAweGQ1ZjFiZDM1LCAweGJkYTI1NDU0LCAweGUwYjIzMDQyLCAweDQ1ZGY2YmI2LCAweDM1ZGExZWJiLAotCTB4MGQ5ODljOTAsIDB4ZmFhZTAwZWQsIDB4MmY2ZTVjNmQsIDB4Yzg4OTNkNjMsIDB4ZDc2MDRkMGYsIDB4N2YwOTYwNTgsCi0JMHhiMWY0ZTJlNywgMHhkOTUyMjViNCwgMHg0ZjZjZmYwZCwgMHg3MDhiMWVhZSwgMHg3ZTI5OWYyYSwgMHhkOGI1ZmY1YywKLQkweGY2MWQ4YzZmLCAweDFkZmI4YjkwLCAweGRiNWJmNzRiLCAweGExZjg2MmZhLCAweDJiYTVkM2IxLCAweGI0NjcwZjA3LAotCTB4NWRlMmM1ZjUsIDB4MjU1MzNmZjAsIDB4YjZkZWQ2MjUsIDB4YjkwZjAyMWIsIDB4N2IwZjkxNTIsIDB4ZmM2MGQzNGQsCi0JMHg4OGZiM2ZhYiwgMHhlNTkyZjdmNCwgMHgwYTlkOTBjZiwgMHhlZGMwNThmMywgMHg3MjhhYWIzNiwgMHg0ZjVkYzk3NSwKLQkweDJmY2Q3YmQzLCAweDI3NmQ5YjM4LCAweGVkOTllMGJmLCAweDk5NzY1ZTY2LCAweDE3NzY3Y2E4LCAweDc0OTY1YmY3LAotCTB4YTc5YzYxNGEsIDB4Y2E2MmU3MzQsIDB4YmJhNzk0MzQsIDB4MWIzMzRlOGMsIDB4M2M3OGQ3OGEsIDB4M2ZmM2JkYmUsCi0JMHhmNTRjMTkxMywgMHhmYTNhNDI2ZCwgMHgxYmI3MTIxMywgMHg2NDg5Y2Q5YywgMHg4OWNkYWE5ZiwgMHhiNzA1MWY2OCwKLQkweGNhMmVmMzVkLCAweDY0YmIyNWE5LCAweDc2MzVlYTJmLCAweGNkMWRlMWNjLCAweGVjNzMzY2IwLCAweGYzZjYzYjIyLAotCTB4ODAzNGNhNjEsIDB4NGNmNzdkYTMsIDB4NjVlZjRjYTcsIDB4NDhmOTE4N2YsIDB4MGQ1Y2Y1ZjEsIDB4OTNkZDk1ZWYsCi0JMHg2N2I3ZTQ1NSwgMHg5N2Y4NzE3NywgMHgyMDhmMmNiOCwgMHg5OWZkNWQxZCwgMHg2MmIyNzY0YywgMHhjZmI0MDE2MCwKLQkweGIxYmU0ZGRhLCAweGNlZWFiN2M4LCAweDdkNzBiMzdkLCAweDY5OWQ5ZWRlLCAweDk0YmZmNmEwLCAweGUyZjExMzk4LAotCTB4ZWY4NjllNWEsIDB4MWY4YTQ4OTcsIDB4NWI3ZWI0ZjksIDB4N2VhYzRkNDMsIDB4MTMyNWQ1YmUsIDB4NWRjYjRkYmYsCi0JMHgyNzZiZDY5MSwgMHhmNTA5YmFiZSwgMHhlMDJlZTM1NSwgMHhjZTdmMWMyMywgMHhkOWJhN2ZlYiwgMHg2OTJiZTUxZCwKLQkweGE2MWJiNmNlLCAweDFhOGZmZjYyLCAweDgzNzdjOGJkLCAweDNmZTc3NzdhLCAweDVmZTE3ZDExLCAweDZkY2EyNTc3LAotCTB4Y2E2ZmFmOGUsIDB4YzY5YjY2NjcsIDB4Mjg0NWNkMjcsIDB4NmVhYzk3M2YsIDB4NjMwZTcyMmUsIDB4YzlmMjBmY2YsCi0JMHg2Zjk3Y2U0ZSwgMHhiN2VlMjRiOSwgMHhlY2ViMjU2NiwgMHgwMGZjOTFkZCwgMHg4N2MxYjE3YiwgMHg5OTc4YjdmOCwKLQkweGQzM2MxZjZmLCAweDdmNDMwZGMxLCAweGExNTkyMTJmLCAweDEzNjQ4NGZhLCAweGU0Zjk0OWUxLCAweGE5MmZmZDhlLAotCTB4M2UwNzE3NjgsIDB4NjVjY2ZhNDQsIDB4MjdkNDUyYmUsIDB4OTU1OWM0NmEsIDB4ZWMyYjc0ODQsIDB4ZGI5M2I2MDUsCi0JMHg5MDdmNjA4MSwgMHg5NTI1YjViZCwgMHhjNjNlYjIzZCwgMHhmZTg5MzNmZiwgMHg4YTdjNGU0MCwgMHhiNWZmYTI3MiwKLQkweDdlMjI0ZjRmLCAweDlmZGU3MjliLCAweDc4M2FmYTg4LCAweDBhOTMyM2YxLCAweDQ5NzdiNWYzLCAweDVlZWRiZjI0LAotCTB4MDliYTQzM2YsIDB4MGI2NmNkNzYsIDB4Mzc3MmEyNGIsIDB4MjE3YWU1ZTgsIDB4MjYzNzVlN2UsIDB4NzUxY2I5MWIsCi0JMHhhYjlmYTg0NywgMHhiNzNmMzg1MiwgMHhkM2QxMThiYiwgMHg2NDA5ZTU4ZSwgMHg4NzcwZWU5NywgMHg1N2Y0MDhhZCwKLQkweDI5ZjY1YmU1LCAweGU3NTg3NTY4LCAweDY3NWYwYjA2LCAweGZiNWZkZWNiLCAweGIwZjNhNDY0LCAweDY1OGQxY2U0LAotCTB4NDBjN2YzOTUsIDB4MGNiMGZjZmQsIDB4YjdiYmJjZTMsIDB4ODNlNTQ0MjAsIDB4ZDQzMmJjZDMsIDB4YmMzZWY3ZDksCi0JMHg3NGYxMWYyZSwgMHhmNmM1ZThkOCwgMHgyMjZmNmY3NiwgMHhiZGRkZWZjZSwgMHg3ZTcxMTI2NywgMHg5YTY1N2JmNSwKLQkweDgzZjg3ZDc3LCAweDUxMjU0NWI0LCAweDI5MTdmMTM5LCAweDc2OGM5MDUwLCAweGM3YjI1YjgyLCAweGY3Nzc4YmNhLAotCTB4ZDBiNjk4N2UsIDB4ZDI1M2ZkY2UsIDB4ZTNjM2U1OTcsIDB4YWQzNWRkMjUsIDB4ZmFiZmJmMTgsIDB4ZWYyZWJlMmEsCi0JMHg0NjFjZDJmZCwgMHgxNTllZjgzOSwgMHhmYzhjNTlmNCwgMHhmNWMxY2Y3ZCwgMHhjZDY0ZDRkYiwgMHg0MWNjZThjZiwKLQkweDU2NTgzM2ZkLCAweGZjNzAxYWM2LCAweGZjZjkzOTFmLCAweDFjY2VhNmRkLCAweDk2ZmZjYmU0LCAweGI2ZGNmZGY0LAotCTB4OTA2MTY2NGUsIDB4MjRlYjBkNGIsIDB4ZmY5OTA2MTYsIDB4Y2M5ZTJmZGUsIDB4ZWVmZmY5NDEsIDB4NmE3MzI3YmUsCi0JMHhmZjhiZTA2MywgMHhkMGNlN2I0ZSwgMHg5YWYxMTNjNiwgMHhkNzhkYTY1YSwgMHhkNWUzODU5ZCwgMHhhMjZmY2Q3YSwKLQkweDY2ZWI2MTljLCAweDI2ZjkwNmZhLCAweGRiNjMzZjlmLCAweDhhM2U2ZGIzLCAweGQ3MDAwY2E3LCAweGRmNmExZDIyLAotCTB4ZjgyN2Q0MGQsIDB4Y2MyZWI4MmMsIDB4NGU5MGM2MTIsIDB4NmRkYzk3NmQsIDB4YmU3Y2ZlYzYsIDB4ZGZkYTM3NDIsCi0JMHhmZDcxZjdkYSwgMHg5MjdhMGFiNywgMHhhN2U0NGIwZSwgMHgyNDIyNGFkYSwgMHhmY2I2YmY5ZiwgMHgxM2Q3ZThmNywKLQkweDRjOThkOWQ2LCAweDcyNzIzZmYyLCAweDMwZmEyMzE0LCAweDRkNGNkZTIxLCAweDU1ZjUwNTc2LCAweDVmNGUxYWRhLAotCTB4YzgxYjFmOTEsIDB4MjQyNzcwMWYsIDB4M2Y2MDY0NGUsIDB4NzYzZDMyOTksIDB4MTc1NzZmOTQsIDB4OTIxOGI0MjUsCi0JMHgxODRlN2RmMCwgMHgxNjY3NjdkYiwgMHgyYWExNzdkMywgMHgzNGExZmY0ZSwgMHgwYzllNzE0NiwgMHhmZjIxMmNkNiwKLQkweDk3YjcyNzMyLCAweGU3MzBhNmIzLCAweDRmZWUyODdhLCAweDg3OGM3NmU2LCAweDA1YzliNzc5LCAweGM2MTJmZWI0LAotCTB4NjhiYzM0MjUsIDB4MDhlOTAxZmEsIDB4OTI3YmU1ZTUsIDB4ZWE0OGU4ODUsIDB4OTQ3ZWM4OTIsIDB4YjFmMzlkMGQsCi0JMHhlYWU4OTFkZiwgMHg4YWQ3NWM2ZSwgMHg5NjBkNWQyOCwgMHhiNTc0NDFmZiwgMHgwODZmMWI0OSwgMHhhMjU0MDU1ZCwKLQkweDc4NjU4ZjJiLCAweGY2MjU1MmJhLCAweDkwYjNkYTk1LCAweDc0YWZmZDFmLCAweDQyNGRhZjgxLCAweDZjN2U0NGZlLAotCTB4NDAxNmYxZTEsIDB4NDZiN2NlMTksIDB4YjE2MzU3ZjQsIDB4NDdhOGNiNzcsIDB4NjNmN2M2YmMsIDB4YzEzYjhmZTMsCi0JMHgyNWZmNDVlZSwgMHg3ODdjZWQwMywgMHg0MGIzNWE4ZSwgMHgzZDYzNzVhNSwgMHhkYWVmZThiZCwgMHg1ZjQ4NWIyNiwKLQkweGM5ZTg2YmRlLCAweDdkMjYzYjQzLCAweGE0MDFmMzVjLCAweDI1ZjlmNDhmLCAweDZmYzg2YjY1LCAweDVlYTE3MmNiLAotCTB4NzE0YjVkNDAsIDB4ZmRkM2U1ODcsIDB4N2U4MDhlZGMsIDB4OWI2NjhlOTEsIDB4YmE2YjNmYzgsIDB4ZGI5ZjlhNmIsCi0JMHgyZmM0ZDUxMSwgMHgxNTU2MGRjMSwgMHhhZWY0ZTBmNSwgMHhmNzY0NTViYywgMHgzMzVlNjBhZiwgMHhmNmM3NzFkMSwKLQkweDljMmYxOGM1LCAweGFjYTJmNzZiLCAweDIxM2M2MmIzLCAweGU3YWZlNzA1LCAweDkzYTk1NmJiLCAweGI1ZDBmMWVjLAotCTB4NWQ3MjhiY2MsIDB4YmJiNjQ3OGIsIDB4MTRmZjc3N2EsIDB4MDk0MzdmZjUsIDB4ZjE4M2Y3ZjksIDB4N2E0NjQyYzksCi0JMHhjYmU1ZGRhMywgMHgxZWJjMDY0OCwgMHhhNzhmMWJmYSwgMHgxOTQyOTdiNSwgMHhmNTg5NGY5ZSwgMHhjYmVkOWY2YywKLQkweDc2Yjk0MTcwLCAweGRlZjA5NTgzLCAweDA3ZWJjMWRlLCAweDQ5YTA4MDFjLCAweGZlYTRhNzE0LCAweGViODU5MjU4LAotCTB4ODFmMmExYTEsIDB4NTM2OTliZTIsIDB4MGRiN2Y2OTgsIDB4Yjk1YTk5Y2IsIDB4NDFkOTJiNmQsIDB4ZTdiN2ZmMWEsCi0JMHgyNTFjNzg3MSwgMHhjOGI0M2NmZSwgMHhmMWRjZGYyZiwgMHg0N2YwMDI3YywgMHhhNjhkYzYxYSwgMHhiNDIxMTdkMiwKLQkweGM5MmUyOWY3LCAweDdjYjYxNGNiLCAweDY0ODAwMGQwLCAweGViMjdmMTYyLCAweDViMTE1YzY3LCAweGRmYTNlZGU2LAotCTB4N2FjN2FmNWIsIDB4ZjU4M2JmZDAsIDB4NjVlODM2MDgsIDB4MDJiM2VjYWQsIDB4ZDExZDZiMWMsIDB4NjBlYzA1N2EsCi0JMHg3YzQ5NjFjYiwgMHgzMzc1ZTRmZiwgMHg5MmZlNjEwYiwgMHg5M2Y0M2YxOCwgMHhhZmM2MWY1NiwgMHg1ZTM3NGNhYywKLQkweDVjNGE3YzJjLCAweGRmZTg0NmZmLCAweDc3ZWQ2YWFlLCAweDA2ODRjZjU2LCAweGU1Njk5NjBmLCAweGIyZjlkNzhmLAotCTB4YmVhMzNmYTAsIDB4ZjhhOTQyM2YsIDB4NzhkYTBiMWUsIDB4NjMzODNkY2YsIDB4YThhYzg2ZmQsIDB4YzJmNjAwN2QsCi0JMHgzNGNmMjgyNywgMHhlYmVkNjEzYiwgMHg2MDkzNmQzNSwgMHg0M2YzOWIyYywgMHg0ZDVmZWExMywgMHgxMmRkMDdkZiwKLQkweGZjZjEyMWQ5LCAweGJlOTE0YjZhLCAweDA4NWQ3ZDk5LCAweGNlYTU3NWY2LCAweDcwYTViNmJlLCAweGIyMTY3YWZiLAotCTB4MjQyNWY4MjQsIDB4ZmMyYjgzYmYsIDB4YjA1YmVkMGMsIDB4YmViMDkyNGIsIDB4Y2ZmN2I1ZmYsIDB4ZmRmNTBkM2UsCi0JMHg3MjcyZmU3MywgMHg2ZWVkOGE5NCwgMHg1NTdlOGY5ZiwgMHhmMjQyYTJmMCwgMHgwZTVmYjgzNywgMHg5NjM3YzA0YiwKLQkweDgzNTc2ZTJlLCAweGI0NzhhNzNlLCAweDM5YjczZjQ2LCAweDQyYjhmZDA1LCAweGVkNmNlMzBjLCAweGE0MGFhNGM3LAotCTB4NzNhM2YwNzcsIDB4Zjk2YjAzYmUsIDB4NjY1ZjE0YTMsIDB4OWZkNDQ1NGEsIDB4NjVmNzlmOGMsIDB4MTg5ZTNjMjksCi0JMHg1ZWRhYWUyYywgMHg5NWVmZmQ4NCwgMHhlYjBiZGExOCwgMHgyZGE3NGY4YiwgMHhjZGVhN2YyNCwgMHhkZjMxNDViNCwKLQkweDkwN2UxYzM1LCAweGRmYjBkOWYwLCAweDJmMWUyYzM4LCAweDhmMDk5MTRiLCAweGYwOWU0NzRkLCAweDJmNzhkY2ExLAotCTB4YTg0YzkxMmMsIDB4NjhhZGMyNTcsIDB4MWJkN2Q2ZDcsIDB4ZTU2NDIyZDAsIDB4NTMzNzA1ZTEsIDB4ODk5ZTdkN2MsCi0JMHg2NWY5ODY4ZCwgMHhkYzE3N2QwOCwgMHgyYTY4NjM3ZiwgMHg5M2ZlMWJjZSwgMHhmZjBlZDVlMCwgMHgzYjEzOTI2MiwKLQkweGI0ZWM1OWU2LCAweDdiNWM1MTRmLCAweDk5YzFlMTNiLCAweGFjM2M0M2UwLCAweGMwY2FhZTJmLCAweGNmNjY5YTcxLAotCTB4MWU1YzUyNzIsIDB4NmZhYzM5ZWMsIDB4MTQ3YmViYmEsIDB4NWFlMGQ3YTcsIDB4OGQ1OGQ4N2YsIDB4ZDgyNTRlZjYsCi0JMHhiODA2YmY3NSwgMHhhYmFmOTNiMywgMHg4ZjVmMDJmNiwgMHhmZTk0MGY5MiwgMHg0NjViY2ExMCwgMHhiYTJmZTM5MCwKLQkweDQ4YjQ1ZDM5LCAweGNiYjdkMGZlLCAweDYyYzc4ZTI5LCAweDg3Yjk3MmUzLCAweDdkNzhmZGI5LCAweDY5ZGE4OThhLAotCTB4NTE0ZmFmZWYsIDB4ODQ1N2FmMDgsIDB4YjkyM2E2N2EsIDB4NmQ3YTU3MWMsIDB4OTkwNzU3NjgsIDB4YWJmNDAzZWYsCi0JMHhlZWFlZGY5OSwgMHhmMmUyNzVhMywgMHhhNTUyYmRjYiwgMHhkZGM1OTM3OCwgMHhhYzI0ZWY3YiwgMHg3ZjIxNDJiZiwKLQkweDBmYmQyOTg2LCAweGFkZmRiOGUwLCAweDI2N2FlZjZlLCAweDc3Y2IwMGY4LCAweGVhMWM1MDk1LCAweDFlNjA0YTY4LAotCTB4YjBhNTZmYWUsIDB4NWM4ZmZiNTcsIDB4MTI1YjVhNTMsIDB4Zjc1YWJmYjUsIDB4MDFhYmMyMzksIDB4ZjUwZWFkMGYsCi0JMHg5Mzk0NmFmZSwgMHgyNzI0Mjg5ZiwgMHgzM2QyMjU5OSwgMHhmODY5ZmExZCwgMHhmYmY1MzI2YiwgMHgwZWEwNWIwNywKLQkweDg2YjU2OWZiLCAweDQyMGU5MTViLCAweDczYjUzMjFkLCAweDYzNzRiMWNmLCAweGUyM2VlZjNmLCAweGQzM2I0MGU4LAotCTB4NDg2MzZlZTgsIDB4NTBiZWUwYzcsIDB4ZjZlMmM0OWMsIDB4ZDNjYTE1MzMsIDB4MDkxNDBiNDMsIDB4NWQ5YzQ1ZjUsCi0JMHg0OWUzMWQzMywgMHgyOWI4YjdlNCwgMHhmODI1NThkZSwgMHhjMTUwMzQ2MywgMHg0MmIxMGI1OSwgMHg1MTI5ZTdjYiwKLQkweDRmZjllNzNiLCAweDUyZjgyYWU3LCAweDE2MGM3ZmIzLCAweDMxOWUxZjFlLCAweGY4ZTE4MTJmLCAweDQ5Yzg5ZWVjLAotCTB4ZGQ5YmM2MDMsIDB4ZTFlZDBjM2QsIDB4YzY4OTRlYzYsIDB4ZGM3ZTJjNjksIDB4ZDJjYmZlODQsIDB4NDFkZmNlNGUsCi0JMHhmZTAwNmZlMSwgMHg1OGFlZDA3MiwgMHg3NjEzNjI5MSwgMHg3N2E3MGI2NiwgMHgxNDcyNzNkNiwgMHhiZTMxZjllMiwKLQkweDNiNDE4YzllLCAweGIyZGZhYzQ3LCAweGZkNjlkYThhLCAweGJjOWM0NDk5LCAweDQwOTNjNDUxLCAweGRhZmQ1MjEzLAotCTB4NThjZWNkMTQsIDB4YzI2ZDllMmQsIDB4NmVlM2UwY2UsIDB4MzI3YzdhOTEsIDB4ZDI1NGIzZTIsIDB4ZTdiNTczYzUsCi0JMHg5Mjc3MjE2ZSwgMHgyMTY2NDQ0ZSwgMHhiZTgwNDZmZiwgMHg1ZGI0YWUzMCwgMHg2ZmZiN2Q5YSwgMHgyYmRiN2U2MSwKLQkweDE0ZDE3OWM2LCAweGM5MzkwMGYzLCAweDQ4MWVmODY1LCAweDdlNWVmMDExLCAweDQ4NTk4M2Y4LCAweDExOWFhYzM3LAotCTB4OWUxZDM2YmYsIDB4ZmQ4YTM3MjYsIDB4ZDIxN2I0MDQsIDB4NTgxZGNkNmQsIDB4MzE2YjdlOWYsIDB4ZWY4YzY3ZTksCi0JMHg1ZWMwYmVlMywgMHgzYjBjZDc4MSwgMHg1Njc5ZWI4ZiwgMHg5ZjcwZjI4NywgMHhmZjg0ZTkyZCwgMHhmOGUyZGZmNiwKLQkweDFmNjgxMjEzLCAweGM2ZDYxZDIzLCAweDc1Y2Y0YzkxLCAweGIwZjJkNzE4LCAweDNmNTFhN2QyLCAweDMyZDQ2YTdiLAotCTB4NGZkYjQ3ODQsIDB4ZDlhOGZkYzIsIDB4YTljNzI0MjUsIDB4N2M5NWVjOWMsIDB4YWJmOWUwN2IsIDB4MDFlMTE3MTQsCi0JMHg4NDZhYmNmYywgMHhlZDg3ZGYxNywgMHhmNGFkZmRkMSwgMHgzOGE1Y2RlOSwgMHhlMTFmZWUyZSwgMHg1YmEzM2ZiMywKLQkweGViMzUzOGExLCAweGZjOGZiZGRkLCAweGYxMTNiMzdlLCAweGI5Zjg3MzU1LCAweGQ2ZmY1MTU3LCAweGVkMjc1ODU4LAotCTB4MmRkOWM1ZjcsIDB4ZjFiYzRlM2YsIDB4MDNhMzk0NDksIDB4YmVlZWNlZTcsIDB4Y2VmYWUxMWIsIDB4ZDY4MDZmMjEsCi0JMHg1YzhmNmY0NywgMHhjZmI3MTU3ZCwgMHg1MzY3ZGJkZiwgMHgyM2RjOGVkMSwgMHg4ZmQ4MzZlNCwgMHg1ZmExMjdjNCwKLQkweGRlMzI3ZjcyLCAweDQ1Mzk3YzhlLCAweDk2MGM5ZmVmLCAweDI0NzZlZWZmLCAweGYwMDQyZjg3LCAweGVmOTE4YmVkLAotCTB4MGRmZmUxNDEsIDB4NDQ0ZjlmZDQsIDB4MjBmYWY1ZmQsIDB4MmJmZmEwM2MsIDB4ZWQ1MDc2YTMsIDB4MmJlZDFiNWUsCi0JMHg3MTE3ZmEwZiwgMHg4ZmYzYzhmNiwgMHgwZjQ4NDJkOCwgMHgxNGFkM2JlNywgMHhmZWM0NTQ3NywgMHhlNDQ3MzljYywKLQkweDhiNTI0NDRlLCAweDI4NGRlNGViLCAweGJkYjc4MzZmLCAweGYwMDMyYmY3LCAweGY3YzFkMjlmLCAweGVjNDkxNDNiLAotCTB4MzMyMGJjODcsIDB4NzNlMzdmYmUsIDB4Mjk0ZmVlYzYsIDB4NWYxZTU5YWUsIDB4M2U0N2NhMDksIDB4NmUyMjY1ZWYsCi0JMHg0OGI5MmNiNCwgMHg3YzMyZmJlNSwgMHg2MjU5NmE1ZiwgMHg1M2RhMTE3NywgMHhiNDNkMDk0ZiwgMHhhYmVmODEyYywKLQkweGRkNGNiODBjLCAweGFjN2JhZWI4LCAweGI0MjlmMzgxLCAweDY3YmZjMmZmLCAweGIxYWIzMWJmLCAweDYxMWQyZmZiLAotCTB4Mjk5ZGQ3NmUsIDB4NjA5Yjc0MzYsIDB4MWY2ODFkOWUsIDB4ZTA2ZGJhZTAsIDB4ZmI4MzMwZmIsIDB4MWRjZGM3ZDUsCi0JMHg1MTkzODI2NiwgMHhjNDU1YTA3OSwgMHg5NWZkYjVlYiwgMHg1NzFlM2NlMywgMHhjZTUxZjYyNywgMHgxMGZjNTljYywKLQkweDQ4YjVhOTZlLCAweDlmZThkNWNkLCAweDhkM2Y1ODVkLCAweGRlNzdkN2UyLCAweDc1OWU5YjNmLCAweGY3NzFmNGViLAotCTB4ZGU5OWFjYzUsIDB4NWE5NGZiNmIsIDB4Nzk5NmJiYmMsIDB4OGU1ZWRjNGQsIDB4NjAwZDExYzYsIDB4OTRlYmE4YmYsCi0JMHg3OTk3ZDQyYSwgMHhlNTFhYjljYywgMHhkNTgyMWFiZiwgMHgxNmNmMGM5YSwgMHgyZWQxYTI3OCwgMHg3M2I0MjQxOSwKLQkweDAyNzc1Njk0LCAweDE2ZGFlZmFlLCAweDUwYTllOTAzLCAweGVkODdjMThiLCAweGI4ZTczYzM0LCAweGQyYTkxYzc5LAotCTB4YjAxYWUzY2QsIDB4NDcxYzYxNTQsIDB4NDUxOGI2N2IsIDB4YjdmNDVmZGMsIDB4ZjFiYTE5OGEsIDB4NzNmODkwNjksCi0JMHgxZWE5NTNhZCwgMHhmZDZiNWY0ZSwgMHgyZDliMThiNSwgMHg2NDhiYTcxOCwgMHg3ZGFlMjgxYiwgMHg0NzliZTRjMSwKLQkweDIyZTRlMzcxLCAweGI2N2MwMjE2LCAweDU1ZDc5YTM4LCAweDlkZTI3YWYzLCAweDlmODhkNjBiLCAweGI4NTRhZmVhLAotCTB4NjRkNGM5MjEsIDB4Mzc2ZTlmOTQsIDB4ZTNjNjUzOGYsIDB4YmU5YjUxNmQsIDB4ZDIxZmJmMWMsIDB4ZWI5N2Q2MTAsCi0JMHg0NjRjNjA1OCwgMHg4ODNmZGYwMSwgMHg3Mzc2ZWY3ZCwgMHg3ZDYxNzVmOSwgMHhkN2I3YzA5ZSwgMHg5YjU2NzI4NCwKLQkweDhlMmNhYWZmLCAweDdmMzY0MzM3LCAweGNkNTc2N2U2LCAweDc3YzgzYTQzLCAweDIwM2YyODk5LCAweGFiZTNjNWRmLAotCTB4M2Y4MjEzMzAsIDB4NDRiNzRhZmYsIDB4NmYwNzExZjQsIDB4NDg2ZDFhMGIsIDB4ZGY3Y2FkNWYsIDB4MWZjMmFiZWUsCi0JMHhlZTU1ZjcwZiwgMHg3YzFmYTEzNCwgMHhhYjY3ZGMxZSwgMHhkZjY4OWE3MywgMHgyNGUzNTJmNCwgMHg3MmY1YmFiNywKLQkweGY3ZmNiMDY4LCAweDlmYjk2N2Y3LCAweDNjOGIyYWQ0LCAweGExYzkyNzBlLCAweGNiOWYyNzVhLCAweDQ4ZmJjOTE5LAotCTB4ODNiN2JlMzcsIDB4NjhmMzgwOWQsIDB4NmVkMGNiOTUsIDB4OWRhMzdlOTksIDB4ZGM3NGQxZTYsIDB4YzZlMDcxNGEsCi0JMHhhODM5YmQxNSwgMHg3YWFhOWJjNywgMHgyMDNmMzA4YiwgMHhhZDA4YmYxZSwgMHg2ODJmYzlhMiwgMHhmZjA2ZWI1NywKLQkweGQ4ODRlZDAzLCAweGM1NDdlNDc2LCAweDdlZmEwN2VmLCAweDNmNDU0ZWU0LCAweGU3ODFjY2U3LCAweGIwMWQ1ZjUwLAotCTB4N2Y4MmJlOTIsIDB4MzhjNjZkM2QsIDB4YjIzYzkxY2IsIDB4MDIzYWM2YTMsIDB4MzA1ZGIwMmIsIDB4YTNmNzdiYTEsCi0JMHg3MGI3Njg3OSwgMHhjYmIxYTliYiwgMHg2MTc2ODFkYywgMHgzZWNjNGI2ZCwgMHgwNmRmZmUxYiwgMHg1YjFiYmVmZCwKLQkweDc3ZjE0Yzk3LCAweDVmN2ZhZWQ2LCAweGJiZWUzM2JmLCAweDZkNzBmYjIxLCAweDRjNWJjZWI0LCAweGVmYzhiMTgxLAotCTB4OWY2ODc3YTAsIDB4ODE4MzVjZmMsIDB4NjRlYmI3ZjYsIDB4Yjc5NDYyZWYsIDB4N2I3YWFjZTcsIDB4YWY4MzljZmMsCi0JMHg5YWRkY2ZkNywgMHhjMjJkZTEzZCwgMHgwZjJjMWU3NSwgMHgxMTZmNjc1OSwgMHg4MTlkNzNhZSwgMHg2OWZiNjIwNSwKLQkweGY1ODY3NWM0LCAweGY5ZDYyNjVkLCAweDhiOTMxM2RjLCAweDNmZGY5ZDcwLCAweGQ3MDhiOTMwLCAweGNkYjE4Yjc5LAotCTB4YThmMzdjODcsIDB4MWI5MGYwMzMsIDB4ZTk5YmVkZmEsIDB4ZjcwYTdiMjcsIDB4MmU4ZjkxM2QsIDB4YzQwZjFlOTUsCi0JMHhmZjgxZTNkMSwgMHhlZmE0N2EzZCwgMHhjNzg3ZDI0NiwgMHhlYmQwZTEwNiwgMHhjZDQ5Yjc0MywgMHg2YjUwNzk0MiwKLQkweDVlYTE3ZjMxLCAweGUzNjFiZmM0LCAweGM1MzMxNjc4LCAweGZhN2Y4ZTNiLCAweDUwNDdjNmUxLCAweDY0Yzk3NDBlLAotCTB4MWRmZDY4OGYsIDB4NjgwNTAyNTcsIDB4ZDU3ZjFkMGYsIDB4MjM0OTBkZTMsIDB4ZWQxOGJmZjcsIDB4MDdkYTBhYWQsCi0JMHg0NTVjNjEwYywgMHg3YjM0MDNmMywgMHg5ZjFlNWUzMiwgMHhjNzc5ZjMxMiwgMHg3YjQyYWJlZCwgMHg4ZGM2ZWJmYywKLQkweDRiM2JjNWViLCAweGU3NmU0M2Y4LCAweDNjYmM5NWVlLCAweDcxNDlkYzZlLCAweDBiNjNhNmU0LCAweDdlMjcxODljLAotCTB4YzZlM2NjMjcsIDB4NTI5NDRmNGQsIDB4ZmMyMWI4ZGMsIDB4MmRlNjM3NGMsIDB4ODljOTJlYjEsIDB4ZGVjMzQ3ZmUsCi0JMHhkYjE3MTMzNywgMHhmODJlN2VhMywgMHg1ZjIzNmZiNSwgMHgzZjdlOGIzMSwgMHg5OWYwOWRlOSwgMHhjMTNiM2FjNCwKLQkweDcxZWExNTdkLCAweDQyNjIzYjliLCAweDdmMDI2ZmJhLCAweDlhZDRmMzBmLCAweGVjNDljODk0LCAweDI4Y2RjOWI3LAotCTB4YjBmY2EzMWYsIDB4ZjJkM2ZmZGUsIDB4NGRmODc2YTIsIDB4NzQ3Nzc3MjQsIDB4ZDc5NDYxNDksIDB4NWU0MGE2NjksCi0JMHg5NjM1ZWExNiwgMHg4YjZiM2NlNSwgMHg2ZWM3ZDlmMiwgMHg3N2Y3MWI5ZiwgMHhiZWRiZmJhMywgMHhlNGM3NzFmZiwKLQkweDRmNmVmNTFiLCAweDM1ZWRmYTIyLCAweGU1MTM5ZjMyLCAweDkwODc3NmQ5LCAweGI3YzkwYTY3LCAweGMyYmE3NzhmLAotCTB4Yjc4OGZmM2MsIDB4ZWRjYzM4ZmYsIDB4ZWYyZDA2ODQsIDB4MGFkZDYxNDgsIDB4YjllMmQ3YWMsIDB4YmQ3MGQ3YmUsCi0JMHhjNzc3ZGU1MSwgMHhiMmQ4ZmJjOSwgMHgxNGJkMmZiNiwgMHhmNmUzZDFmNywgMHgwZGRiNjNiZiwgMHhlY2M3ZTdlZSwKLQkweDYxZmFlYjdmLCAweGI5NmFhNWNkLCAweDVmNWJmZjdlLCAweDMyN2VlMjFmLCAweGIyZjJjM2YwLCAweGViNmFmZDI4LAotCTB4OTM2ZmQxYTAsIDB4ZWIwNzQzODgsIDB4ZjQ4M2RmNGYsIDB4MzkyYzNjMWIsIDB4ZTY1YmJlZDEsIDB4MGNiYmY0ZTUsCi0JMHhjNGYzMmRmYywgMHgzYWNlZmNhMSwgMHgyMzg5NzlmNSwgMHhhYTY5N2ZmMSwgMHhjYjA3ZmY5ZSwgMHhlYWY4YTBmZiwKLQkweDljOWFhOTE1LCAweGNkYWY3Y2U0LCAweDBmZGI4YjVmLCAweGUyNGJiM2NlLCAweGFmMzcxOTdjLCAweDNlMzUzZjc4LAotCTB4OTlmOWFlZGUsIDB4NmYwZjJhOTcsIDB4ZTM4Nzg0MWMsIDB4MGZmY2IwNjMsIDB4YzZiNzg3OTYsIDB4ZmRhNDY1ZTEsCi0JMHgwZjJjYWY4YywgMHgzNWY3OTdmZiwgMHgzNWI2M2ExZSwgMHhiNDBlZmQxMSwgMHg1OTRmZDFlMywgMHhmM2M4Y2ZiNywKLQkweGIxZmQwMDIzLCAweDY0YjNjNWZiLCAweDlmZWY4ZmJiLCAweDdlYmQ1YWNhLCAweDI1OWQ1ZTFmLCAweDVmMzllMWY2LAotCTB4NGM4NGYzM2YsIDB4ZjYyOGQ2ZWIsIDB4Mzk4ZjFiODksIDB4ZGViNGQ4YmMsIDB4NjlmNjg0YmUsIDB4NmY0ZmY3ZTMsCi0JMHhlMTY2MDc2MywgMHhhM2VmYzU1MiwgMHgyZTdlNDMyZSwgMHhkNGZkZjJmOCwgMHhiY2MxZDRkNiwgMHg1YmNjM2M4NSwKLQkweGNiZDJhY2E4LCAweDFmZWM2N2Y5LCAweGQ2NjIwNGE2LCAweDFjMDRhYWJkLCAweGRiZTg2MTgyLCAweDcyNTg4NGEyLAotCTB4YTlhZGZiY2MsIDB4NDY3ZWFlZGMsIDB4NGM3OGY3ZTQsIDB4YTVlNjFkNmMsIDB4N2NkODcyNmMsIDB4MGM3OGNmZTgsCi0JMHg0N2U4ZmYzYywgMHgyOGVkZmUyOSwgMHhjMGFhMmQxNywgMHgzMmVmOTFlYiwgMHgyMWU1ZTAwMywgMHg5NWM5Mjc2MywKLQkweDhiZGRhMzUwLCAweGRmOGI1MDcyLCAweDJjN2ZmZDY4LCAweDU5MmVjMWY2LCAweGZiZDFjN2ZmLCAweDdhNjVmZjgxLAotCTB4NTNjZmM3OGYsIDB4NzU1Zjc4ZGEsIDB4ZTAxYjZlZGYsIDB4OGMxN2M3NDYsIDB4ZGM0NWY4ZTgsIDB4NGExYmNhNWYsCi0JMHgzM2Y1MjNiZiwgMHg5Y2JmMWQxMiwgMHg5NTIxN2ZlYSwgMHgyMjZmYTJlNCwgMHhhMjVjMmJlNSwgMHg0Nzk1YjE5YywKLQkweDg4OWM2MGNlLCAweDE4YWIzNDFkLCAweDA5MzhjNGQ3LCAweDE5MGRjN2U5LCAweDViZDI2ZjIyLCAweDgwZjI5YjM5LAotCTB4YmY5ODk1YmQsIDB4ZjNmZTA2ZjUsIDB4YzhlZDkxZjIsIDB4ZTFmNWMxYmUsIDB4ODhkZjY0NzYsIDB4ZWNmNWYzZWIsCi0JMHhmZTlkYmJjOCwgMHg3ZDY3NDhiMywgMHg2Zjk0N2NkMywgMHhmMDAxZDZiZSwgMHgwYmY4N2ZhMywgMHhkM2I0Nzc5ZSwKLQkweGE3NzNlOWNhLCAweDJkOTJlOWM0LCAweDc4YTRiOTRmLCAweDc0NzFhN2NiLCAweDkxZmZlOWY1LCAweDhkYTRiNTFjLAotCTB4YmRmZTU3NjQsIDB4MTI1ZmU4ZTUsIDB4NzIzYTdlMzEsIDB4YTc5ZTIxM2YsIDB4Nzg0M2Q1NWIsIDB4ZDg5MzFjOGIsCi0JMHg3NmI4OTg5ZSwgMHhlMGNmZjMxMCwgMHhhZjAxMGNmYiwgMHhlMTIzZmVmNiwgMHhmMzRjMmMzNywgMHhmYmMxYTY2NSwKLQkweDU4YjM1ZmY3LCAweDNlOTgxMjU4LCAweDM2MmU1Y2U1LCAweGFmYjRlZGY5LCAweGYzYzlkNGQwLCAweDMwNTY5YTVmLAotCTB4MTg0ZGUzOTIsIDB4NzhjMTJkMzcsIDB4OThiNjZjZTIsIDB4NDI4MTg5ZTIsIDB4ZmI1YjkzY2MsIDB4MjcyNDNkYmEsCi0JMHgwZTdkYmM2MSwgMHhmZmFmM2I0MywgMHhkZWJlNWUzNSwgMHhmZWM2MjgxNSwgMHg2OTdhMmI4MywgMHhjZTdkYTMxZiwKLQkweDU1ODc5NDdiLCAweGY3ODdmOWY5LCAweGJjMTM5NzU0LCAweDliNzA0ZjE0LCAweDZlMjVlN2Y1LCAweDBlZmJlMzRjLAotCTB4YTY5ZmQzZGEsIDB4ZTI4ZmJiYWQsIDB4ZjNkN2VmZjksIDB4ZGJhMGUyYmMsIDB4ODRiOGM0ZTcsIDB4YTliNzBmMTYsCi0JMHhkMGFmYjQzZCwgMHg2ZjFiOTA3NCwgMHgwZjlmMzI5NSwgMHhkMTE2NjlmYiwgMHg2OWMxZDM1MywgMHg2NTM3MThhNSwKLQkweGI0NTJkNjlkLCAweDZjZmYyYjc3LCAweGZkZWZiZjI3LCAweDRmMjkzMmJiLCAweGUwNGE2OGUyLCAweDUxZDc4NDZhLAotCTB4ZWQxNmJlMWUsIDB4MDcxODVjZDMsIDB4MGZmN2RlZWQsIDB4NzA4YTViNWMsIDB4MGI2ZmYyNmIsIDB4ZmRhMWNkYzYsCi0JMHgxZTNlODcxNiwgMHhkZjNjMmNjZSwgMHg1MWQxZTFiYiwgMHgxYWJjZGM1YSwgMHhmMDQ1YjNmMSwgMHg1NWI3YjMyMSwKLQkweGVmODYxZWNlLCAweDk3NGY3ZTM1LCAweGZhN2ZkNDBkLCAweDNmYjQyZGY3LCAweDJkODNjOWFlLCAweDE0YjAxNjQ2LAotCTB4MjRjOGU1NDQsIDB4NzQxODNmOTEsIDB4YWVjNWZjOGIsIDB4NDUzZjNjZDksIDB4YTllMmVkOTQsIDB4ZjcxZGYzZTEsCi0JMHhhZjM4NDljYywgMHgzN2NhNjk0OSwgMHg0YTcyYzdkYiwgMHhhYzdkZDhmNiwgMHhlYTAxNDhiZiwgMHhkMGM0ZjMxNywKLQkweGE1MTU4NzRmLCAweDIyZWQ4Yjc4LCAweDlkZjNhM2I3LCAweGM3MjNhMjI2LCAweGE3ZjdjNjNhLCAweDllZDA4ZTgwLAotCTB4MzNkMjIyYmYsIDB4NTllNjA5M2QsIDB4MDU3ZGRlZDgsIDB4NDVmOGY3ZTIsIDB4MzI5M2FkMDMsIDB4OTdkYTQ1ZmIsCi0JMHg3OGY4OTI0OSwgMHg1YjdhMWIwNSwgMHhjNjFjNjBjNywgMHhiODk1Y2FmOSwgMHhiMzliNmE5NCwgMHgzNmY4YjcwYSwKLQkweGE0NzdmY2I5LCAweDE3MzdkZjExLCAweGZmNTU3OGUzLCAweDkzNzllNDYxLCAweDVmMTQ2Y2M3LCAweDQ2NTljZjY4LAotCTB4YWZmZDkzNzksIDB4M2VlNzc1OWIsIDB4YjYyMTlmZTIsIDB4ZjMyNGYyOWEsIDB4ZjY5MWZmMGYsIDB4MjUwNzFjMDcsCi0JMHhlN2I0ZGUxZCwgMHhiZTc2Njk3ZCwgMHg5OWVhMTU2ZiwgMHg1NzM1Yjk0NSwgMHgyYWJlNDliOCwgMHg0MjFjZmVjNywKLQkweDU1Njk0MzdiLCAweDE2YjBmMjUwLCAweDQ1NjBjZmEzLCAweDUxOGFiNWY5LCAweGJiNzQ3ZjNjLCAweDk1ZWI4MGQzLAotCTB4MDY2MmYyMmIsIDB4NjI3NWZmOGUsIDB4NmQxNWZjODAsIDB4ZjNjYzIwM2YsIDB4ZjdiZDhjOWEsIDB4YWNhNjFmYTAsCi0JMHg4NDJhYmRlYSwgMHg2NWQwNzFlYiwgMHhhOWI4YzI2OCwgMHhmMTQ0ZDIzMSwgMHg4YTM2NjM5NiwgMHgyZTFlZTZhZiwKLQkweDI4MmRmZDU4LCAweGQyNzNhZWU3LCAweGQxYzBkN2ZlLCAweDZmOTRiOWE1LCAweDNkMWNmMzBlLCAweDRjZWYzY2NjLAotCTB4Y2Q0ODc5ZTMsIDB4NjM5NDVlODIsIDB4MzNlYTAzMzYsIDB4ZTJmMzMzNjUsIDB4M2UyZDc5ZTgsIDB4N2VmODAyZTcsCi0JMHgzYTIxNTNiNCwgMHgwODE2OTg1ZiwgMHg5ZTBlN2FlMywgMHhjMDllNTk2ZiwgMHgzYzI4YjdjZiwgMHhmZTU4ZTIzZSwKLQkweGRjZjEyZmZhLCAweGI3MTE2ZWM4LCAweGZjN2M3MTNkLCAweGI1ZjM4YTFjLCAweGZkZTIxMjJhLCAweDUxZTc4YjgyLAotCTB4M2ZhNjk2M2UsIDB4ZjdjNTEwODcsIDB4Y2Q0N2NhMDksIDB4YWU0N2Y2M2YsIDB4ZjYwZGEwYmYsIDB4N2QzOTE4YWYsCi0JMHgwZWVlYWQyOCwgMHgzYmY2Mjc4YywgMHg3YjdmOTQwMiwgMHg0Y2I3NGI2NSwgMHhiZWNlNjNmYiwgMHgxOGQ1YWEwNywKLQkweGQ3MWI2NmJmLCAweGI5ZmI0ZDI3LCAweGM3ZWYxZTFmLCAweGY5MWU5OTdjLCAweGUxM2NhMGVkLCAweGZjYjA2NDdhLAotCTB4N2E0ZmIyMGYsIDB4NTdjN2Y0ZTIsIDB4ZGU5ODRmZjYsIDB4NTNiNzhiYWYsIDB4MjFiOGZkZTIsIDB4N2Y1Yzc3NzYsCi0JMHg1YTJiZDkyMywgMHg3NDU1NDliZSwgMHgzYjM3NmUxYywgMHhhNDI4N2IzNCwgMHhiMmE5YzdjYiwgMHgxNjZiZjM4YiwKLQkweDI2MGZmZjdkLCAweDIyZmY3OTNiLCAweDhkNmQyNzNmLCAweDdkNDE0YWJhLCAweGUyOGMyZmY1LCAweDkwZmU1YTczLAotCTB4YWExNDJmOTYsIDB4MjEzZDc5ZTIsIDB4YjdjZTg1ODMsIDB4ZTUxYjU4NzksIDB4ZGQ2MjhkMDksIDB4YjQ3MTQ0OTIsCi0JMHhhN2RmODY1ZSwgMHg3YzEwYmU2MywgMHhmMmQyZmZmZiwgMHhjYzVkZmZhOSwgMHgzOTI2NGViYiwgMHhiZjA4NGFhOSwKLQkweDUyNGNmMzE1LCAweGY2ZjBlZTEwLCAweDc3ZGUzOGM1LCAweDE1OWUzNGVjLCAweGM4NTI0Y2YzLCAweGNkZmUyMDlmLAotCTB4ZDRmY2YzZjQsIDB4N2Y3Y2Y1ZTksIDB4MzBmNDEzMjEsIDB4MzkwYjMzOTYsIDB4OTllNzVhNWQsIDB4Y2I1NTVmMjgsCi0JMHg0Y2YyZDExZiwgMHgwOTU0YmMzNCwgMHg1OThlNjc3YywgMHg1MDcyODc5YywgMHg5MmQ5NDdjYiwgMHhmYjQ0YWRlMCwKLQkweDdiMDI1NWE3LCAweDkwZDNlNzFhLCAweDc4NGJmMjIwLCAweGY5MGRlZGJmLCAweGFmZjdhNDYxLCAweDhmMTI3ZjliLAotCTB4NjUwZjJkNjcsIDB4M2QyMDYyNzIsIDB4NWU3YTIyYmQsIDB4ZDExZmNiNGUsIDB4M2Q2NjI2ZTgsIDB4YzcxZGFlMDksCi0JMHg1NTVmM2RiOCwgMHgwYzc5YTI2ZiwgMHg3MTQ3NWMzNCwgMHgwMzA2ODFjOSwgMHhkNTVmYmQ0MywgMHgxODc0ZTY2NSwKLQkweDc5OGVkZTM3LCAweGZkOGRkNjI2LCAweGU1MmI2MTJhLCAweGY4N2EwYmQ3LCAweGQ2MTY3YjMyLCAweGJlZTMxOGI3LAotCTB4MmZlZTU2MjcsIDB4N2ZkZTAzZTgsIDB4M2QyNzY1NzYsIDB4YTc1MmFjMDcsIDB4MzNjZTg5M2MsIDB4OTUwOTQ3Y2UsCi0JMHg1ZWI4ZTllMywgMHg2YWYzMWNiOSwgMHg5MDEyMzkyMiwgMHgwZmVkODRkMCwgMHgzNTM5NTBkNywgMHhhNzk2MDZmMiwKLQkweDUxYWU1ZTdhLCAweDhjMGM0ZjQwLCAweGEwOTZlYzhlLCAweDJkZGI3ZmJkLCAweDk5YjQ4Y2JjLCAweDdkM2RmYTA5LAotCTB4ZTRhODRkNzYsIDB4MzYzYmU4MWIsIDB4MmFhMzZmMjQsIDB4MzdlMjk1M2QsIDB4YmM1MGY0ZjcsIDB4NzJiYmU4NDgsCi0JMHgwY2Q5MWYyZSwgMHhhYmM3OTg3MywgMHg5ZDliOGE1NCwgMHgzYjIzYzhjYSwgMHg3ZjljNWVjMCwgMHhiM2ViMDdiMCwKLQkweDgzNjcxNGNjLCAweDUzZmZhMjdhLCAweDdhZjFhN2EzLCAweGNiM2ZhZjk1LCAweDBkZmNmMDcyLCAweGY5NDIxYmQ2LAotCTB4MWE2ZjJhNzYsIDB4OTExYmFiYzUsIDB4YjI5ZWMwM2YsIDB4NzA3MzAyM2IsIDB4M2Q0OWNmNWQsIDB4OWMzZjIyNzcsCi0JMHgyNWNmZjk5YSwgMHgwZWU3ZTc0OCwgMHhlNTEwYjRmZCwgMHhiMDI2MzVjZiwgMHgzNzkxODdkMywgMHhkZTVjMTk2OSwKLQkweGViZWQxODBjLCAweDY1ZTdlODI0LCAweGQ4ZmJlMDdiLCAweGY5YjZhYmNmLCAweDdjZDUzMGIzLCAweDEzMzRjYTVlLAotCTB4YTE2MDFkMWUsIDB4ZmYyOGM4NWYsIDB4YjlmYWM1NTIsIDB4ZDFmYjcyZTYsIDB4NjEyZmMzMzUsIDB4MmIxYWU4MWUsCi0JMHhhMDM1MjM4NywgMHgwOTllYzhmOCwgMHgwM2JlOTVjYywgMHgwOTIzNWZmMywgMHg0OWE5ODZmYiwgMHg2YWE4ODdlNCwKLQkweGNiMjFmYTEyLCAweDU5NDZiOWM0LCAweGY4MmNiN2YwLCAweDdiMmIwZmZiLCAweGQ4MzAxNTBhLCAweDJjZGNlZjJlLAotCTB4ZGVkZmU3MGYsIDB4Njg2ZmU3MTgsIDB4NWNlOTRkY2YsIDB4ZDU5MWNmNGUsIDB4NmUxZjQ4MDksIDB4ZDdkZjkxZTMsCi0JMHgyNmM5M2FjMCwgMHhiZGYxMTg2ZiwgMHhmYjQxZGIyNiwgMHgyYTNiNGZiNywgMHhhZmQwYmQzZCwgMHhlNTJmZmI5NCwKLQkweDI2YmQ1Nzk4LCAweDcxY2E1ZmZiLCAweGY2NGU0ZDlmLCAweGU1MzFmYzdhLCAweGY1MmFlOTRkLCAweDIxZGIwMzM3LAotCTB4ZTVjZDZjZmUsIDB4YmJmZDdmMTgsIDB4ZmQwNDk3ZjUsIDB4ZmVmZDdjOTUsIDB4NzMzMWZiMDYsIDB4MjI1OTk2YjgsCi0JMHhkZGYwMGEzOSwgMHgwM2MwZDZjZCwgMHgxNjE3N2ViOCwgMHhiM2ZiNDliYywgMHg3YTllNjY3NywgMHg0ZTJiZjMwMywKLQkweDg4Y2Y5OTE5LCAweDljNDMyNDcyLCAweDhlYmQwMzNmLCAweDc1Y2M5ZWUzLCAweGNlNTNmM2YxLCAweGIxMTNkMzZkLAotCTB4ZjJlOWMwNWMsIDB4N2RhNjE2NWEsIDB4ZmNiOTlhZjUsIDB4YWNmNWUzYmMsIDB4ZGExN2E1YTcsIDB4YWEzMWUzNWQsCi0JMHg3MWZjMzFiZCwgMHg1ZjJmYWFhZCwgMHhkNzJmYWM1ZiwgMHg3ZjhlM2M4OCwgMHhkZmRmZWFmMiwgMHhkMjBhMjJjMCwKLQkweDdjYTdiN2U5LCAweGZkZjYyNjM2LCAweDJmZGY1NjUzLCAweDkyOWU4ZjkwLCAweGU4NjdkZTc4LCAweGZiMjRlNjcyLAotCTB4ZDA4NTJkZDksIDB4NjRmZjE5OWUsIDB4YzlmZjM4YTYsIDB4NTVmZjEzZjMsIDB4NGU0ZjVmZjgsIDB4YjY5ZjU0NjEsCi0JMHg4MmM3YjJkZiwgMHgyZDllMjJmNSwgMHgxZWYxZmE4YiwgMHgyNjRkYzk2NiwgMHgzMGZhNDliOSwgMHg0NzNjODkyMiwKLQkweGIwZjFlZDM3LCAweDc5M2JiNzQzLCAweDlhZGExNzVjLCAweDBiNDM5ZmEwLCAweDlhNGJjMjU0LCAweDQyYWVjMGRkLAotCTB4MTBiNzJiZmUsIDB4YmU3NDY5ZmYsIDB4MGFmNDBhYzYsIDB4NjUxY2E5NzgsIDB4NWRmYTQwNDksIDB4YzM2ZWY0NjMsCi0JMHhiMzA0ZTRiZSwgMHg1YTZmZmE4YSwgMHg5NmZhODVhMiwgMHhmZTkwYTY3ZiwgMHgzMzM1NjU1OCwgMHhkYzRmOTQyNywKLQkweDY4NjU0MDk3LCAweDQ0ZTA3MjQ3LCAweDcxOGMyOTg1LCAweGVlNDIzNWVlLCAweDQ4MWJmN2NiLCAweGNjMmE1NjdmLAotCTB4ZDAxYjc5OGYsIDB4OWZkZjFiYWUsIDB4M2I1MGIwYzgsIDB4N2M1Y2QyOTgsIDB4ZjFhOGNhN2YsIDB4ZjI4NTM0ZDUsCi0JMHgxYWVjMDUzOCwgMHhmNDg4YzEzZiwgMHg1N2UwYWI3ZSwgMHhiM2NkZjA1OSwgMHhmYjhkMDcwMCwgMHg3MTQxZGM4MiwKLQkweDA1YmQ1NTMwLCAweDYzMmRlN2NiLCAweDcwNTExY2U4LCAweDYyOWI5Y2YwLCAweDlkOGFjMWMwLCAweGY4YmJkZjgyLAotCTB4M2Y4ZDMzMzksIDB4ZDIwMTc5MzUsIDB4MjhiNzEwYWQsIDB4NmQwZTMxMjUsIDB4M2VhMWE3YWYsIDB4NmI1ZjY0NjYsCi0JMHgwN2VkYWFmYywgMHg3NmI0NWI2NiwgMHhjZmZiMGY4YSwgMHgzY2Q5ZGYxMCwgMHhkY2I4NDI3OSwgMHg0N2ZjYTY2OCwKLQkweDdhZWE1ZWYxLCAweDFmYTQxM2VlLCAweGFmNzdhZjhkLCAweDNkN2M0MGJkLCAweDNmYzVkZjE0LCAweDBlNzVmMmE2LAotCTB4OThmN2M3MjcsIDB4MzkxZmU0MmMsIDB4ZWExNjRjNjEsIDB4YWYyZTM1OWYsIDB4MTcyOThmZWEsIDB4NGJjZmY5MDMsCi0JMHgzYjQwN2M0NiwgMHg3ZDU4ZGYyOCwgMHg5MTg5NTBhYSwgMHhlNzBmMzZmMywgMHg0YmU3Njg1NywgMHhiMDlmN2MwMSwKLQkweDY3Yzg1OWFhLCAweGM4ZGI4Y2MzLCAweDdkZmRiNWM3LCAweGI4YzBmNWM3LCAweDAzODRlZWQwLCAweDdiNzY4NWM2LAotCTB4NDM2ZWU2YWQsIDB4NGZlMzcwZTIsIDB4MmZiYzcxNTEsIDB4NmViMTk3MWIsIDB4MDRlYjllMjIsIDB4NDIwZTgxNWUsCi0JMHhlMTNhMzcxOCwgMHg1ZTNkMTAzMCwgMHg0ZjdiZjIyNywgMHg1OGYxZjJhNCwgMHhhNjVmM2ViMSwgMHg0MGQwZTgxMCwKLQkweGZjZmE1OGY5LCAweDlkYTQ2Yjk4LCAweGI2ZWZhODJkLCAweDIwZjcxMzVhLCAweGU4MjczZGRkLCAweDY3ZWRhNGUyLAotCTB4M2NlZjY4ODUsIDB4NTllOGJmMzcsIDB4OTJiM2ViOTQsIDB4OTEyMGI1NTYsIDB4ODkzYWM3NWMsIDB4NzU3OTM1ZWYsCi0JMHg0YWNkZTMyMSwgMHgxYWRjODMyYywgMHhiZmY1ODFlNywgMHg3Y2Q0ZmYzMywgMHhkNzU5ZmNlYywgMHg1ZmQ0NDJkNiwKLQkweDdiYzYwZjIwLCAweGFmYzI4NzUyLCAweDM3MDY5ZmQxLCAweGZiZDIyMWQyLCAweGMxYzYxZDIwLCAweGJiMTFkMWFmLAotCTB4MGIxMjkzYTEsIDB4ODhiZDgxNzcsIDB4MDQ3ZWNkNGYsIDB4OTFlNzg4NGYsIDB4ZjlkMWQ5YWIsIDB4YjJjZjExMDEsCi0JMHgzNDc5ZjMzNCwgMHg2YmVlMDg4NCwgMHg5ZTUwMGY1YywgMHgwMTk5ZTVkOSwgMHg2OWQ2MDc5ZiwgMHg3MjBmYTRkZSwKLQkweDU5ZWM2YzE0LCAweDc2ZTMwNjMwLCAweGZmYjRlZjAwLCAweGVkZTM3ODRiLCAweGE3Y2IyZmU1LCAweGI1OGY4OTFlLAotCTB4ZmIzOWE1ZjEsIDB4MzgzYTlmMjksIDB4ZDVmOTRlZDcsIDB4NjkzZTQ1ZDMsIDB4NzE0MGRlYjAsIDB4YzhhYmYwNzQsCi0JMHg5NjYyNmYxZSwgMHhhOWRkY2EzMCwgMHhmMmQ1YmVjMiwgMHgzYzRhOGZmYywgMHhjMjdhMTkzZSwgMHhiMThiZWVhYywKLQkweDU5ZTY4NzkzLCAweDFkYzc5NGFiLCAweGIxZjNjMTVhLCAweDQ2ZTBlZDA3LCAweDkwNjBlYzk1LCAweDA1NzNiYWRiLAotCTB4NzY1Y2E1ZWQsIDB4ZDJhZWRmYjcsIDB4MjRhNzk5NzksIDB4ODBiNDNlZGUsIDB4N2RiM2RjNTEsIDB4ZTQ1ZmE4YjYsCi0JMHg1OGY3NmIwYywgMHg3Y2QxNjk0OCwgMHg0NjBlZjZmNywgMHhjOGVlZGZmNCwgMHg1OTRjZmFhNywgMHgxNmZkY2I5YywKLQkweDc5ZWQzN2Q3LCAweGJmNmM0ZmRjLCAweGI3ZWE4OGI5LCAweDUyYzc4NDI0LCAweDg3ZDg4ZjVlLCAweGY1ZmI4MWRmLAotCTB4N2YxZmIwNWYsIDB4ZTNmMzQ3OWYsIDB4YjA3NTFjNzgsIDB4YTM4YTc3ZmMsIDB4YjQwY2VhM2UsIDB4MmEyZGZkMjEsCi0JMHg4MTE4ZTVmMSwgMHgzYzRjZWE1ZSwgMHhiYWY0MGE5ZSwgMHg3YTYxODdiMywgMHhmYTIxNzM1ZiwgMHhlNmIyZDczYiwKLQkweDQ0MDUwYzU3LCAweDJlOTA1YmFmLCAweDdhMDc4ZGU3LCAweGViZDFkMDJkLCAweDk3MDU0ZjU2LCAweDQ2OTcwOGRiLAotCTB4NWE3NDgzYWYsIDB4MTczNzlmMWMsIDB4NzZmYjYzMDgsIDB4OWI5ZmU3NTcsIDB4MzJlODNmZDAsIDB4MzBkZTc5N2IsCi0JMHg5NzhjODNjZiwgMHgyY2YwMzEwZiwgMHg2ZTNjMzg1NCwgMHhmNjc4MjY1OSwgMHhjMWM0ZmYxMywgMHgxMzdjMjk3MywKLQkweDhjZTlhNzRiLCAweGZjNDhjN2YzLCAweDkwYjBhZTkzLCAweDNmY2EyY2EzLCAweDRmMDM1OTRmLCAweDdjODNiOGUyLAotCTB4MGJmNzBmNzQsIDB4ZGIyZGMwODcsIDB4YmE2ZTllODksIDB4MDUxN2VmOTksIDB4ZTNlZjVjNmQsIDB4OGMwNjUxYmUsCi0JMHg3ZjhjNWIzZiwgMHg4NjdmYWI1MywgMHg5NmNkZGIwYiwgMHhlMWJhMWUzOCwgMHgxY2ZmMDA3ZiwgMHhhYmJiM2Y1MSwKLQkweGU2YzZmMjkxLCAweDhlOWUzMGNjLCAweDc5MzQ3M2I1LCAweGNkNTNlZGE5LCAweDc0NmZlZDEzLCAweDFlNjIzNmNlLAotCTB4ZmQxYWRjZjcsIDB4NWJiY2QwZmUsIDB4NGRkNGZlZjgsIDB4Y2NmZGY1NzMsIDB4YTAzZTFiNjMsIDB4NmNkNjQ2ZmMsCi0JMHhiYmNkZmM0NCwgMHg4YWZmNWY0NSwgMHg2OTVmNzA2NywgMHgzZDJiZWUwYywgMHgwMzI5ZTIyYiwgMHg0N2M4MjdjMCwKLQkweGIyNWQ0ZGJmLCAweGYzYTA3NmYzLCAweDI5MmYzZjMxLCAweGNjY2YzOGMzLCAweDliYmQ4NmI0LCAweDhlZThmY2ExLAotCTB4NmRmZTU0NzEsIDB4NzQ3ZmY3ZGEsIDB4MTc3N2ViMGEsIDB4NDE4Njc5NTEsIDB4OTBjN2U3ZTIsIDB4OGFjZjgxMGYsCi0JMHgyZWJlNmYyYiwgMHg4OWY1MTEyZiwgMHg0Njc2ZjdlOCwgMHg4MTA5M2RlZiwgMHhjZWQwZDlmNiwgMHhmMjlmMzEzMywKLQkweGY4ODg2NzNlLCAweDVlMjJjMGMwLCAweDA3MjRmZDdmLCAweDU1YmRlZDRmLCAweDhjZWFmOGE1LCAweGU0N2NjODg0LAotCTB4ZmY0YjE3ODMsIDB4OTBmMzBjYjMsIDB4NzI4YmU0NjcsIDB4YjBlMzUzZDksIDB4YzFmNGFjZmMsIDB4ZmQ2N2Q0N2MsCi0JMHhkNzA1NzY4ZCwgMHhjNzkzMjlhMSwgMHg0YjE3YzdhNSwgMHhlMjI3NjNkZCwgMHg3ZmQxMmM3OSwgMHg0ZDU3OWYyMywKLQkweDkxMzIyZmQ5LCAweGYxNTQ2NjRmLCAweGE3N2JjNjdlLCAweDNiNjAxNmI1LCAweGY3MmE3OWMzLCAweDExMTI1YTY3LAotCTB4MTliZjFhZmYsIDB4ZDlhNDFmODQsIDB4MjcyMTdlOGQsIDB4ZDliZGY0OWUsIDB4ZmFmZDAyOTIsIDB4YTcxNzkyMmQsCi0JMHgyNmYyOWZlOCwgMHg5ZDk4MTdjNSwgMHhmYmYzYTc5ZiwgMHg2YjhjMTRmMiwgMHgzY2YxZjc0ZiwgMHhkOGFiNmRkNSwKLQkweGI2ZjNiNDJhLCAweGQ2NTNlOTVkLCAweDBiNzRmZDQwLCAweDdhMDRmNWEzLCAweGJkMjA2NTM3LCAweDI3MjBmZTRmLAotCTB4YWVjYzg5MTEsIDB4OWU4ZDc3YTcsIDB4M2U3NDZiNjYsIDB4YzBjZjRmNDMsIDB4ZmVmYzc2YTcsIDB4OGViNWU0Y2IsCi0JMHg3YTUxYWQ5ZSwgMHgwOWNlMjkxZSwgMHhhMDY0NjU3MCwgMHg1ZTk2Zjg1YywgMHgxMzhlMGQ4ZiwgMHhlM2YxOGZjNywKLQkweGYwMjcyNDhlLCAweDQ2ZGU1NjJmLCAweGJlMjRlYmUxLCAweGJmZWNjMmNiLCAweDM2Y2JlNDAyLCAweGUxYzcyZjhkLAotCTB4MWU4NjRjZmMsIDB4MmI5NDNmM2EsIDB4MDFkMWM3NzksIDB4MGI1ZTI5ZGMsIDB4ZmUzOGI5ZTksIDB4YzZjYmUwZDQsCi0JMHg1MGQ5NzJkOCwgMHhkMTRmZjBiOCwgMHhlN2ZlNTBlYywgMHg5NjQzZjhjNiwgMHg3Y2VmODdhOCwgMHgxNzBhMzkyYywKLQkweGYxMTUzZjhjLCAweGYwZTFlZWMwLCAweGI5OWE5MmVjLCAweDg2N2UxMTVjLCAweGQyNjhiNzE2LCAweDNmNTg3YmU2LAotCTB4N2UwNGNhZGYsIDB4NzE4M2RmOGUsIDB4Mjg1YmRhMjYsIDB4ZjcwODM3MWQsIDB4MzY4M2FjMjUsIDB4ZGZkMGEwOWYsCi0JMHg4NzdlMmQ3MywgMHgxZGY2ZTYwOSwgMHhjZmQxMWQ1NywgMHhiYTgzNDE3NywgMHg4MTFkNWQ3MCwgMHgyNzljMjM2ZiwKLQkweGU4NjNhMTBjLCAweDNlNjIyZDhmLCAweGZhMDY1ZmRhLCAweDQ0NTQ2N2YwLCAweDM3ODM0YmQ3LCAweDIzNGQ0ZjFlLAotCTB4ZjlmOGQxYzgsIDB4YmEyN2UzYzQsIDB4ZjgxOTNkNmUsIDB4MGRlN2NlZDQsIDB4ZTcxMmY3Y2UsIDB4Yjg5ZjZmMTksCi0JMHg1Zjc4ZmE0ZCwgMHgyNWNiODhiMiwgMHhjNTcwZTM0NywgMHgxMmMzNWY1OCwgMHhmMzg3MTRiYywgMHhkNWJmZTQ0YSwKLQkweDcyODFiZDgwLCAweDUxOWFhNmI5LCAweDZlZDkyNDNjLCAweDY2OWMzOGEwLCAweDI3YzQ4Yzc3LCAweDQ4YzU1ZjU3LAotCTB4NjMyY2Q1NGUsIDB4OWYyMDVjZTIsIDB4YTYzZDNjNWYsIDB4OTMxZmRlYjMsIDB4Yjc1MTZiZmYsIDB4YWY3ZTQ0MmYsCi0JMHhmMGYyZWJiNywgMHg2ZTNjZWM2YiwgMHgxYjkzNWViZiwgMHhmNTAyYjdhYywgMHg4ODc5NjBmYywgMHg0MGFkZWY5ZSwKLQkweGZmN2YxM2I5LCAweDFlNDVjZDU3LCAweDI4YmU0ZTJmLCAweGZiYzZiM2QxLCAweGY5ZWEwNTY2LCAweDBhZGVlYWU0LAotCTB4MjQwZjVmOTQsIDB4NzVjNWVlZjksIDB4ZTNjMGMzN2QsIDB4ZGNmOGYxZWEsIDB4ZTJkMDYxOWEsIDB4YTc0NDk3YzUsCi0JMHg3ODM0N2NmMSwgMHhkODExZGFjZSwgMHhmMTY4ZTM4MSwgMHgwZjUyNzNhNCwgMHgzOGE2NGY4ZiwgMHgzYzgxZmY0NSwKLQkweDRiYTA2N2E0LCAweDIwNjY5YTIzLCAweDFjZmYzZjI3LCAweDM3ZmM1MTlkLCAweGY3MjZlZGUwLCAweDdiOWM5YWVkLAotCTB4MThkY2U0OTgsIDB4NWNmZGQ3YTEsIDB4YmU5Y2Y4OWUsIDB4NGUxYzE5YmQsIDB4MDIxZGNiYzIsIDB4OWU4NTMzMmYsCi0JMHgyNjUzYmYzZCwgMHhhZjg2NjQzZiwgMHhhMTZlMmI3OCwgMHhiMjM3OWYwNCwgMHg4ZmIxZjEzMCwgMHg4Zjc2YTNmNCwKLQkweGE4MzA3OWQ3LCAweDYzZmRiMWJhLCAweDRiYjdkMjBlLCAweGZkYTNhODVlLCAweDBjZGIzMWE1LCAweDk3ZDE4ZDRjLAotCTB4YmEwOWMzNjMsIDB4ZWZjNjQxZmIsIDB4Mjc5NWQ2NGYsIDB4ZGFlYTY2NzQsIDB4YWY5YzNhNGYsIDB4MWVlZDJmYWIsCi0JMHhlY2JmYWJhNywgMHhiOTVkMzJmOSwgMHhhZWFhNjdhMiwgMHhhYjU3ZTRmZCwgMHg3YmNiZTU3NCwgMHg3ZmI1ZDNhZiwKLQkweGUwM2RmNTA0LCAweGNjZWY1YmY1LCAweGVmZmZiZGQxLCAweGM3OWViMzFkLCAweDIzMmJkY2ZkLCAweDdmN2RkM2RmLAotCTB4NTgxOWM0NDYsIDB4MGM1M2Q3YzgsIDB4ZDFhODVmZjMsIDB4ZGQ1YWM1ZWYsIDB4NzRkNjYwZjcsIDB4MDcyODk1NGIsCi0JMHgwZGMyZGZmOCwgMHgxYTdkNGYzYywgMHhiZmI2MmM2MCwgMHg3YjdhNmQ0NSwgMHg1MDhiMjY2MiwgMHg1ODUzNWY3ZSwKLQkweGNjMzM3NmYyLCAweDM3ZDdkMzUzLCAweGJjMjBlZTFjLCAweDAxM2RkOTdlLCAweDBjMGJkYzYzLCAweDE5N2QwZjQ4LAotCTB4ODU4YzY3NjAsIDB4MTRiMGE0N2YsIDB4ODkxYmIzY2MsIDB4ZmQ2Y2JmZmYsIDB4ZDdlMTU4OGIsIDB4NDdiMzdmNWEsCi0JMHg1NTU2ZmViZiwgMHg2MmI2ZmViZiwgMHhiYzNiZmFmZCwgMHg5YTRmZjVmYSwgMHg5NzdmNWZhMiwgMHgyOWZlYmY0ZiwKLQkweDRmZjVmYWQ1LCAweDNmZDdlYmY1LCAweGZkN2U5ZTdkLCAweGY1ZmEwMjMzLCAweDVmYWY1NTFmLCAweGZkNjZlY2Y3LAotCTB4ZDcyZWU3N2EsIDB4ZTg1ZTZiYWYsIDB4MzZmZGZkMzYsIDB4ZDFhMDc0NzEsIDB4MGI0ZjI2OTMsIDB4NzcxMWRkZDYsCi0JMHgxOTgxOGUxZiwgMHhhMzQyZTg2MiwgMHg3YWZlODViMywgMHhkZDFhNWZjYSwgMHg3OGRkMTNmNiwgMHg4NjMxZjRmMSwKLQkweDZmY2JiYzg5LCAweDk5ODUxZjQ4LCAweDdmOTgxNzQwLCAweDNmOTJjYzk5LCAweDFiZWYzZDI3LCAweGQ0M2E5OTlkLAotCTB4NTZlNGQwYmUsIDB4ZjU4ZjNlYWMsIDB4Njc5MjQ3OGYsIDB4ZjA5NGY0NDMsIDB4NTNkNDQ3OTcsIDB4YTM1YjJmZTgsCi0JMHg3NDQ4ZjJmZSwgMHhmZDAzMWFmYSwgMHhhMDZmODM0YSwgMHg0ZWNkZDgzOCwgMHgwNDg5YzcwZSwgMHg4ODdmYjc2ZSwKLQkweDNiNDM5NzU1LCAweGUwMDUzMzY4LCAweDAzZTcwZDdkLCAweDMwOTZiZmUzLCAweGRmMWRlMjllLCAweDFjNDY5ZDYzLAotCTB4NDNkNjE2ZjcsIDB4NDIyY2Y5Y2YsIDB4ZWE3MzAwY2YsIDB4NjQyYzdkY2UsIDB4N2Y4ODkzN2UsIDB4ODE1OTk3NWMsCi0JMHg0YWRlOTE3MSwgMHgxNjE3YTM5NCwgMHhmNjgzN2E5YywgMHhiOTRjNWViMywgMHg0ZTMyN2JhNCwgMHg2OGM5N2VlMywKLQkweGI5MGFjZWM2LCAweDI2ZmI4N2QxLCAweDhhYjdlZTUwLCAweGE5OGZhMDc4LCAweDllN2MxOGVlLCAweGRhY2JmMTE1LAotCTB4NTdlOTEyZTksIDB4N2U1MDI3MjYsIDB4MjU3N2VkNTcsIDB4ZmZiNTRmZDIsIDB4OTk3NTlmYzMsIDB4ZmYxZWFlM2MsCi0JMHhjMzVjYjM1YywgMHgwYmIwOWI2YiwgMHg1ZjcwN2RiOCwgMHhiYmY1NGFhNiwgMHhiMjc2YWE2MCwgMHg5NDRlYmQ0MywKLQkweGRmMWZkMGZmLCAweDQ0ZDg3OGM3LCAweGMyYzdiOWZlLCAweGEyOTUwNGUxLCAweGUzYTY0YzVjLCAweGI4ZWViNDc0LAotCTB4Y2JlZTc4ZmUsIDB4NGRmMGUxNjMsIDB4MjJlNTk4NTAsIDB4MDJjZjFmYmMsIDB4OTVkZTE3NjQsIDB4ZGZmZDRmOTksCi0JMHhlMzg4ODBhYiwgMHhmZWMzOGZmZCwgMHgxNTY4NGEzZCwgMHhjMDdmZDFjNSwgMHg1YmY0NzFmNCwgMHhhMzhhMjU5YSwKLQkweDg1ZTAwMGZmLCAweGY1ZTljN2E3LCAweGNhZDYxZWEwLCAweDMzYmMwNWFiLCAweDRmYmMxZGIwLCAweDE4NGIzNGY3LAotCTB4ZmRiYWZhZmYsIDB4NzhjM2Y2MGQsIDB4Nzg4N2Y4M2YsIDB4NTlhMWUyZDcsIDB4NTg2Njg3NDAsIDB4NjAzZmJkZDcsCi0JMHg4ZjhiY2YxNCwgMHg0MTkyOGU4YiwgMHg5M2ZlNjNhMiwgMHhmN2FiOWY5MSwgMHg5ZmI4ZGIyOCwgMHhkNGViZDI3YSwKLQkweGQxOTg3ZGM1LCAweGJmMjBlNzg1LCAweGJjYzJkZWNjLCAweGU3MzFiM2U1LCAweDg3YmQ2MDBjLCAweGU5NzQ3ZmJkLAotCTB4YmYyZmJlMjgsIDB4MzE2NzY1NjYsIDB4NGZkODhkZDEsIDB4N2VlNTdiYmMsIDB4OTc4YWNiMmEsIDB4M2VmMTBhZjIsCi0JMHhmN2NjNTcyYSwgMHhjN2Q0MzcyNiwgMHg4NzYyYmJmMCwgMHg5MGU0NjNlZiwgMHhjYmE3ZWVkMSwgMHhkOTU5ZWU1NywKLQkweDQ2NzhmYjQzLCAweGRhZDY2ZjcxLCAweDgxOWMzYmFjLCAweDJmYzc3ODk4LCAweDYzMWQ4NTMzLCAweDFhNjczMTA5LAotCTB4ZmMzN2E2MTMsIDB4ZTE5ZDMzYmQsIDB4ZTU0ZWNhZmEsIDB4Y2I1ZmFjNmMsIDB4ODg2Yzk3OWUsIDB4Y2Y0MTQ2YjcsCi0JMHhkN2JhMDkyZiwgMHg2MDdiMzZlMCwgMHg1ZWI4MThiYywgMHhlOGRlZjQxMiwgMHgzY2UxMzFlYywgMHhlOGI1ODI1ZSwKLQkweGQyYjRiOGMxLCAweGQzZmJhNmUzLCAweDFjOTM3MTZlLCAweDgzYWM0MWJhLCAweDhkZDRhMGY5LCAweDBhY2M0YWU3LAotCTB4NWVjNWY5OWUsIDB4ODMyZmRhN2EsIDB4NjRiY2Y3MjYsIDB4NzZlZmI4NjQsIDB4MjQzNWM1NGYsIDB4Y2RjOTRkNGYsCi0JMHg4ZmEwNmVkZSwgMHhjOGI0YmUxZiwgMHhhZjA2MTgxOSwgMHg1MWVjZDNkYSwgMHhjNWNhYzQyZSwgMHg1Zjg1MzJlNywKLQkweGM2NGQ5OTNlLCAweDFlMDYxOTc1LCAweDc0M2Y5M2QyLCAweDU4N2U2ZmYyLCAweDdlNThmM2MxLCAweGY5NDYwM2Y4LAotCTB4ZmMzOTZjZWQsIDB4OTRmMTQ2NTUsIDB4ZjcyNGJjY2EsIDB4MmY0MjJjNWMsIDB4MDYwNGFjMzcsIDB4ZThmNjAzMWMsCi0JMHg5ODBiMGI0YSwgMHg2NmIyMWY0MSwgMHg5OGQyZDNiMiwgMHg0MzY5ZTg4ZiwgMHgzYWRlOGJlOSwgMHhmNjVlY2VmOCwKLQkweGNmZjQ2MmJiLCAweGFmZjhhYmVmLCAweDJhM2IyYzY2LCAweGYyYzdhZjVmLCAweDc1OGZiMWZhLCAweDFkOWEwZTYyLAotCTB4ZGU1MzcxNjEsIDB4ZTBhZjE4NTAsIDB4YWZmNzE4NGMsIDB4M2I2MzU3ZmIsIDB4MWY3OThmN2MsIDB4ZTAxZWYwZDUsCi0JMHg1NzQyNzdiOSwgMHgyNmRiZGIwNCwgMHhlYjA3N2QxZSwgMHg5NmRkZWMxMywgMHhlMTJlZjgwMiwgMHgwMDU1ZTYxNiwKLQkweGYyZGVhOTVmLCAweDc0ZjAwNTY5LCAweGIwMmY0Mzk1LCAweGJkZjEzNmQ0LCAweDM3ZWYwYTZkLCAweGRkMjZiZjdlLAotCTB4NDNkZjg3YmUsIDB4ZmIxMzA1NzMsIDB4MDQ1ZWZjYTIsIDB4ZDUyMzNmNmQsIDB4MGFhZGE3YmUsIDB4YmVhMTU2ZTUsCi0JMHg4ZjgxNDFmZSwgMHhjZmUzZmIxNCwgMHgzMDNkNjNlNywgMHhhZDE2NjhkYywgMHhiYmQ0NDA3ZiwgMHg1NGY3OGZlYywKLQkweGRkMTY1Y2YxLCAweGZmNDU5YmY3LCAweDk3MDM3NjQ5LCAweGZiMTMyYTU3LCAweDkzN2ViY2I2LCAweGY1NmFiN2E4LAotCTB4NjVmNjI2MWUsIDB4YThhYjdkNzksIDB4ZGU3OWRiMzcsIDB4ZWViN2IwMTIsIDB4ZmM2MmI1ZmIsIDB4MmMwYzViYjQsCi0JMHhlZWNmNDMxMCwgMHgxMDJjMDliOSwgMHgzNWM5MWY0MywgMHhkMWIyYmFjOSwgMHgzYjI1Y2ZjZSwgMHhiZWVhNjQ2NywKLQkweDViYmRmYWQzLCAweDQ1Nzg5YjhjLCAweDRiM2JlZWJlLCAweGZiN2QzOGUxLCAweGNmYTRjOWI5LCAweDM2NzgxMGVlLAotCTB4ZWFlOTk1NjUsIDB4YWNmZWYzYjUsIDB4ZjI3M2I0NWQsIDB4YWE3YjhhNzYsIDB4YWFmM2RmYWUsIDB4ZTA3Mjg0OWEsCi0JMHhkZDFhZTVlYywgMHhiNzQ4MmQ3YSwgMHhkM2YyMzg3NywgMHhiYzIxYmY3MSwgMHhhMzM1M2ExMiwgMHhhNzg4YjEzYywKLQkweDY4M2QzYzUzLCAweGE1NTNjMDVjLCAweDdiODg5ZTcyLCAweDg1Mzk1OWFlLCAweDZlODA3YmNhLCAweDk1YTFmZWIxLAotCTB4ODJlZjJhNWUsIDB4OWZjZjBhYjIsIDB4YmMyYTNmNDMsIDB4NjBmZDBlZGYsIDB4ODNmNDJiNzksIDB4MWZhMTA3Y2YsCi0JMHhlMzAwM2U3YywgMHhmODY2ZmQ2MSwgMHhhMDliY2IwZSwgMHhiN2RmMmMzZiwgMHg3YmU1NDdkMiwgMHhiOTUzNTY1NywKLQkweGNhOWZhNTc1LCAweGEzY2U1NzZiLCAweDAzMmJkZGU3LCAweGIyYjM1Y2Y0LCAweDhlNjdlYTllLCAweDZiZWRmYWUyLAotCTB4YjM5NDA1ZTcsIDB4OTk4MGJjZjgsIDB4ZTdhMjJhYTMsIDB4ODBiY2I0M2EsIDB4ZmVmMGQzMGUsIDB4YjhhM2NkZGMsCi0JMHhmZTY1Y2MxYywgMHhmZTljMmRhNywgMHhlY2M4OWVlOSwgMHhhMzRmOWQwZCwgMHhlN2UyOWJkZiwgMHhhMWIxOTFlYiwKLQkweGQ1NWRlYTk5LCAweDNiZWQxYzdjLCAweGFjYjEwZWU2LCAweDE1OGM3ZTRhLCAweGVhNGJmNWRiLCAweDE5OTdjYTZhLAotCTB4Y2NlYWUzY2IsIDB4MjU2YTYyMTMsIDB4ZmU5NzRlYmYsIDB4MTNlOTA4OTQsIDB4NWYyZjU4YTUsIDB4ZGZjM2NjZjMsCi0JMHhlMzEwMWQ1MywgMHgzZWNkODVjOCwgMHg4YTY1OGU5YywgMHhjNGYzMWJiZiwgMHg5ZDAwZGVlZCwgMHgwOGJkY2ZlZiwKLQkweDliMWY4MzlkLCAweGE2MmFmMTc0LCAweGFlZTJlOTgyLCAweGM5ZDFkYmQxLCAweDc2NzRjYTMzLCAweDg5YjE3Y2FhLAotCTB4YmViMjU5ZGEsIDB4NzI2NzZiYTcsIDB4ZDVkYWVhZDcsIDB4YzdiYmNkMmUsIDB4YzUxOGY4ODMsIDB4YjBkZTYxZTcsCi0JMHhiOGMwNjU4YSwgMHhkMzM3ZGE4YiwgMHhiYWM1ZWJiOCwgMHhiZGY5N2NjMSwgMHgzZTI0MDdkNiwgMHgzZGJmNjE1ZiwKLQkweGI1ZjMxNGVhLCAweDNhYjkyMDZjLCAweDQ1OGJjNWM2LCAweGNhMDMyMTQ5LCAweDlkN2ZmN2MzLCAweGM4ZmFmYzQ0LAotCTB4NDc4YTA2NDMsIDB4MDM2MTY1OGUsIDB4NTA3OGQ3YWUsIDB4ODEzZjU4ZDMsIDB4MTI3OTUyZjUsIDB4OTcyODU3NGEsCi0JMHhmMmM2NTUzMiwgMHg3ZTQyMmM2NSwgMHhhYjZmZDgyZSwgMHhlNDliOWQ3MSwgMHgyODU2NDNjMCwgMHgzYzBlY2I5ZiwKLQkweGJhOTFmM2NhLCAweDg5MTRhZjQ5LCAweGVjZDIyOGY1LCAweDdjNGE2ZGQ4LCAweDI4ZGQ2ZjdjLCAweGU3ZjU4ZmYyLAotCTB4OWJmN2UyOTUsIDB4ZDMyYTM5NTcsIDB4MWZlOGZlZDEsIDB4ZTZjYzdmMjEsIDB4NDJkY2YzMzksIDB4ZTMyZGJmYzAsCi0JMHhlZjZhN2E0ZCwgMHhjMzBkNTVlZiwgMHg3ODdkZTM5ZSwgMHhmMmNkZjQ5NCwgMHhmYmZhYzMzZSwgMHgxZmRlODFiOCwKLQkweDJiOWM3OWM2LCAweDVlNjYwM2Y5LCAweDA4YzJhNmIxLCAweDhjNmIwOWY5LCAweDkzNTA5YzlhLCAweGVjYjYzZDk4LAotCTB4ZjMzMTYyNGQsIDB4YWJlNTY0NzgsIDB4ZWMwOTBhMDUsIDB4NzY0ZGUxMDAsIDB4ZTdjYzc0NmEsIDB4ZWE1MjdmMmIsCi0JMHgyMmE2M2NjNCwgMHg3ZmI5Mzc5MSwgMHg4Y2UxNDY2NSwgMHg3YmVmZDFkMSwgMHhiMzE0MWQwNCwgMHhjNWZmOTI0ZSwKLQkweGZjOTc4MzZlLCAweGU3NTM5ZjQ4LCAweGRiMGI1YTc3LCAweDQ0NWU3ODdjLCAweDk4YmNjNzFlLCAweGI1OTYzMzYzLAotCTB4Zjk2YjM5ZDEsIDB4MjNjOTMyNmYsIDB4NGNiNWM0ZjksIDB4YzEyM2JiMDUsIDB4N2IyMTY2MTksIDB4ZmMyNjVmYjQsCi0JMHhmOTA5MWZkNywgMHgwNjdkOTFmOSwgMHg2OGU3MmZjMSwgMHhjOGY5ZTFmNywgMHhlOWM4ZjlkZSwgMHhkNDllNjI3NSwKLQkweGZhNDZlZDQ3LCAweGFmYWQzZTQ4LCAweDVmN2E3NjJmLCAweDJlOWQwMDBkLCAweDIyZjM2ODNlLCAweDZkYzUwOTc4LAotCTB4YmNhMDNmNzQsIDB4MTI1OTYyNWIsIDB4MjBmM2MxYzEsIDB4NmNiZGI5OTMsIDB4NDJjOTU2ZGMsIDB4MWI1NzllYjAsCi0JMHhiZjA5ODcwMiwgMHg4MzIxZWFiZCwgMHg1ZGExZmNhNiwgMHhlZTg5OGE2MywgMHg3ODgzMWY2NywgMHg2ZTVlMjNiMSwKLQkweDQzODE5YzJlLCAweDFlMTMxNjE3LCAweGJmNzk4OTE3LCAweDI2YjFlNjI1LCAweDgwYmZjMzViLCAweDc4N2NmOTg3LAotCTB4NzZlMmUwOWYsIDB4Y2ZkNmVmY2QsIDB4YWE5MmRlZjMsIDB4NGI3ZDYzNmYsIDB4YTBmOTRjOGYsIDB4OTczY2Y4ZjEsCi0JMHg0NGM0YTdmOCwgMHhmMWRhZjA1OCwgMHg3MDA0NmUzYywgMHhhMGZjODViZSwgMHg4ODI5ZGMyMCwgMHhiNjlmYmU1ZiwKLQkweGUzMGE2OWM0LCAweGE5N2VlMDM5LCAweDMwZjI5YWIzLCAweDdmMjgxODI3LCAweGRmMmU5ZTM1LCAweGYzNjhmNjE3LAotCTB4NmQzZDI3MjgsIDB4Y2Y0NGIzOWUsIDB4NzNkZjcyZDEsIDB4N2ZjODUzMGIsIDB4YWVkNjdhZTAsIDB4OWYxNmJjZjAsCi0JMHhmNzhkOGQ0ZiwgMHgyOGUyZDdhZCwgMHg0MTNmNWYyMiwgMHhkZjc4M2JjMCwgMHg0NzllMzhkOCwgMHhkYjNkNjc2OCwKLQkweDI0NjY0ZjMwLCAweDk1OTBjNmJmLCAweGMwZDdlNzE3LCAweDU0ZmQyMGQyLCAweDY1MWYyODU4LCAweGE0ZTc5NmJkLAotCTB4OGYyOTUyOWUsIDB4ZTc5ODllMWIsIDB4YmE3NDExNjQsIDB4YjllZmMxZDYsIDB4M2EzN2U2ZDAsIDB4ZDFkMWNiOGIsCi0JMHgwNmZmOWM1OSwgMHg4NmRlNWEyYywgMHgyNjM0YTZhZiwgMHhhYmI2YmZmZiwgMHg2ZDc1ZmM4ZSwgMHhjNDQwNmEzZiwKLQkweGY0MTIwNjQ5LCAweDgyMGQ0N2ZiLCAweDZkOWUwNjE0LCAweDdkYzA0YWFiLCAweDFmYmUzNjkwLCAweDNkNzVkMGQ1LAotCTB4ZDhmMmVmYmYsIDB4Mjg1Zjc0MDMsIDB4M2QyMmE5ZjQsIDB4NzVmNjg5ZDQsIDB4ZmFmZWY0ZWIsIDB4ZTIwMWZkYTIsCi0JMHg0MDc4ZjhkNywgMHg5ODBmZmZiYywgMHgxZTVkYTEzMywgMHg2N2U3ZmZlZiwgMHhjYmRmN2YwOSwgMHhlOWJmNzE0YSwKLQkweDkzODI4NmNjLCAweDI5YjcwMDA5LCAweGQxYjlkMThmLCAweDc0ZTNmMjUxLCAweGE1NTgzYmVmLCAweDI2Y2Y3ODZkLAotCTB4Y2FmN2UxMmIsIDB4MGZmZmFmYzQsIDB4OTc4NDRkYjIsIDB4ZGY1ZjEyZmQsIDB4ZjEzYjY4ZDAsIDB4MmUwYWZlYzEsCi0JMHg3ZDNmZjYwNywgMHgyOGQxODZmZSwgMHg3ZDI1NzJjZiwgMHg5MWFlNzEzZSwgMHg4MThiNzdkZiwgMHhjOWRmNzg3ZSwKLQkweGY5NzBmNTU4LCAweDBjYjIzMzYyLCAweDVmY2Y0Y2RmLCAweDhkN2I5N2ExLCAweGRhNGY3Yjg3LCAweGQzN2Y5MjU0LAotCTB4NGYzZDcwYjMsIDB4ODRiMTI1ZmUsIDB4Zjc0MjI4ZjgsIDB4ODNiOWEzZTYsIDB4NzhkYzIxZTMsIDB4ZTE4MGUzNmUsCi0JMHhmNGIxZjk4MywgMHg0NTJjZGRmMCwgMHg2NmY4NmRjMCwgMHgxZTg2NzhmMiwgMHhhZjI1NzNhZSwgMHhlMWM3NWRhNCwKLQkweGY1MGIyOWJhLCAweGI0ZTlmNzYzLCAweDBkN2M3Y2Q4LCAweGMzNTUwM2FlLCAweGY4NmUyYjlmLCAweDAyOWE3OGE2LAotCTB4OGIwZTU0ZjAsIDB4YzIyZmZhYTcsIDB4ZjBkMzAxZDMsIDB4YzA0Y2ZjZjAsIDB4ZjJjZjZmZjMsIDB4ZDY4NjJlZmIsCi0JMHg2ZGZiNDM3ZiwgMHgxZWZlMWM2NywgMHhjNTA5YjllYiwgMHgzM2ZiYzAzNiwgMHgyZmE3OWZjMiwgMHgwNGMyZjY4ZCwKLQkweDA1Y2IzYWZlLCAweGY5MGI5NjdkLCAweDg5NWYyNWUzLCAweDRjOWY1ZjA1LCAweDBhOWQ2NGY5LCAweDcyYzFhOTRiLAotCTB4MmFlZjQyZTUsIDB4NGE3ZjdhMzUsIDB4ZmNhMDEwZDAsIDB4NzliYWY2N2MsIDB4NDQ3N2Y5NTgsIDB4OTkwMzg1YzgsCi0JMHgzODc4YjBkMiwgMHhmNGY5ZTYyOCwgMHhhOGI5YjU4YiwgMHhkNTdkZWU2NywgMHhiNDJlNTBjYywgMHg1ZWZkZmIwOCwKLQkweGVmMDVhNzY3LCAweDg4ZjBkNTlmLCAweDA2NzgzMmU1LCAweDVlYzU5MTRkLCAweDY0N2Y5NzJjLCAweDhjYzNlZDUxLAotCTB4NmRlM2UwNjcsIDB4NmQxYmUzOGEsIDB4YWJmOWVkM2MsIDB4MGZhZTYyYWMsIDB4Y2M2NTY3YTUsIDB4YzU3NGRmZGIsCi0JMHhkNDJmNzQyYiwgMHg2NDg1NzJhNiwgMHg3ZmM2ZDdlZiwgMHhjZTVlOWViYiwgMHg3NjkyYmY3NSwgMHg1Zjk3YTcwMywKLQkweDQ5MzRiZDIxLCAweDFiN2UyNTZmLCAweGYyMjk0MWNhLCAweGNiZWUwOTcyLCAweGZmMzQwMjliLCAweDQzYjFlMDIwLAotCTB4ZWRhNzhhMWEsIDB4ZjliNDVlODIsIDB4ZTBkN2YzNjksIDB4OTBiOTVjNzYsIDB4OWFmMWMxZDYsIDB4NDFjNjk0OTksCi0JMHgxN2QzNWVkMSwgMHhlMWZmNDI0OSwgMHg1YzVmNDhiYywgMHgwZjczZjBhMSwgMHhmYmFkMGExNSwgMHhlOTUzMjlhNiwKLQkweGIxMDFjYTVjLCAweGRjYjkxZTJmLCAweGY4M2RlYzM0LCAweGY3NmYwMjdkLCAweDBmNjNmYzVlLCAweDJlYTFiNWZhLAotCTB4YzAwYmRkMjMsIDB4OGRjZjVlOTQsIDB4NGJmMTJmNzgsIDB4MGMzM2RkMGEsIDB4Zjc4ZDU0ZjQsIDB4ZTJmZDNkMWMsCi0JMHhmM2I0NDRmOSwgMHhmMmUyY2NkZSwgMHgyZTJjY2RlYywgMHhjYTJlMDcwZiwgMHhlNDVlNzRkNSwgMHg3MjljOGZjNSwKLQkweGNlOWZmZDBjLCAweDRkM2VjNTkyLCAweDAzOWUwZjRmLCAweGYzYzY1OGQ5LCAweDFlYzJlZGRmLCAweDU3ZDhiZmIwLAotCTB4YTdkYmYwOGYsIDB4YzUyY2M0ZmMsIDB4YjIxZmRiZDAsIDB4NDZkNzA0Y2MsIDB4MGJjZDI0NTMsIDB4Yzk4ZjA1ZmQsCi0JMHg4MmVjOWJhYywgMHg2ZGFmYmE1ZSwgMHg5MzliOWNmMCwgMHhmY2E5YTFlMywgMHg4ZWY2ODY1OSwgMHhlM2RmOGJiZCwKLQkweGU1NGIzYTc2LCAweDNlZTAxNjcyLCAweGM2MTNlZjA0LCAweGMzYWNlNDdlLCAweDJmMTg3MmZhLCAweGMzYmRmYTNmLAotCTB4YTEzM2Q3YzksIDB4YjJhM2RmODIsIDB4MzgzZjhhZTksIDB4MjRiODllZjEsIDB4YzdmZGQxODksIDB4ZWEzNmM4M2YsCi0JMHg1N2FkYTFjZSwgMHgyY2VjMWNiOSwgMHgzYjQxZTllZiwgMHgyODU0ZTQyZSwgMHhmYmIzYTcyZiwgMHhmYmRhMGIwZSwKLQkweGYyZjg1ZjFhLCAweDhhZDdiY2Y4LCAweDRlZDc3Y2ZiLCAweDM5ZTMwZTI5LCAweGQ3OGU4ZDE0LCAweDIwMmUwNzY0LAotCTB4YmUwNDZlZGYsIDB4YWZlYzljNzgsIDB4YzI3NGZmMWUsIDB4ZjMxNGIzOGYsIDB4MWViMDI3NWMsIDB4OTU4NmFmYmEsCi0JMHg4N2M4OWM5YiwgMHg4ZTgzMDZjNSwgMHhlNmM5YWVkZiwgMHg0MTNkYTM3NCwgMHhmM2RkOTNmZCwgMHg5YWJiNDE2MywKLQkweDJjM2I5N2RlLCAweDdkYjVjZjBjLCAweDEyNzY3MTdjLCAweGI2NzJhN2RhLCAweDlkNzllZjY2LCAweGVkOGZjNzg4LAotCTB4N2M0ZWM5NzMsIDB4MGRmNmI3ZmIsIDB4ZGEwNzc5YjEsIDB4NzNmMDJkZjMsIDB4Y2I0NGM3YmIsIDB4NTlmZWJjOGIsCi0JMHgwYjMxN2VkOCwgMHhlOTc2ODNkYywgMHg3NzU5NzZlMiwgMHhjMTZkZmZkZSwgMHhkYTJlOGJlNywgMHg5ZDhjNzc1OCwKLQkweGY3Y2E2OGJmLCAweGEyZDJiY2U4LCAweGZlZjQ4OThiLCAweGY0OWY5MTZkLCAweDJhNGJjOGI2LCAweDhhZjBmMzE0LAotCTB4ZGZkOTE1ZTcsIDB4YzZmN2ZlZDAsIDB4ZmY1ZGNiYzksIDB4OTcyZDQ4ZjksIDB4ZDBkOTg1OTcsIDB4NmJkNGEzNmYsCi0JMHhlMzZhN2Y0MiwgMHhiOWQwYmZkNCwgMHg3ZmMwYjc5MSwgMHhkMTdmMzZlZiwgMHg3NzU4NTMzYywgMHhlZDgzYjhjYywKLQkweDc3NTk1YTJlLCAweGE4YmFlYzRhLCAweGJlNzQ3NzA0LCAweDZiN2ZhYTc2LCAweGYwNGJlN2E1LCAweGM3ODc0YTM4LAotCTB4M2EwNWZmNjgsIDB4YmZlZDBlM2MsIDB4NWFkZmVhODgsIDB4ZmQyNWZjNTksIDB4ZmZhMTFmOGYsIDB4ZDFmYzFkM2MsCi0JMHg3ZGU5MGI3ZSwgMHg0N2RhODlmZiwgMHgyNzJmYzA2ZCwgMHg3OGVmNTdiYSwgMHg4ZWViZjMwYSwgMHg3Y2ZlZTk5YiwKLQkweDhhYjNiODc2LCAweDkyZmRhZmNlLCAweDNiYzZiOWQxLCAweDA2ZjI3ZjhmLCAweGI5ZGRjZGU2LCAweDMxYzVlNGM3LAotCTB4Zjk5MThjMDYsIDB4NDNmNDYxZGUsIDB4ZjA4NjczMjEsIDB4NzllZDI5MWUsIDB4Y2QwMTc2NDMsIDB4NDViZGZlMjcsCi0JMHgwZjMxM2IwOSwgMHgzOGFjNTJjZSwgMHg1ODU5M2Y1MSwgMHhmMTM1Nzg0ZiwgMHg5M2U0ODU4MywgMHhmYWQ3OTcxNiwKLQkweDI2NzI4NzFkLCAweGY3NmEzZTQ2LCAweGY2MmJiYzg1LCAweDBiNjBmZjhkLCAweGMwYWVjYzJjLCAweDgxNTdmNzMyLAotCTB4OWM2MjM3NzMsIDB4ZDk2MWUxYWQsIDB4NzQyMWVmYzksIDB4YzVhMjNmOTEsIDB4ZjNmNDE1YmIsIDB4ZTNkNDMwMGEsCi0JMHhlM2ZlNzg2NywgMHg0YjAzNzIzZiwgMHgwZTdlNmU5MSwgMHhkZmUzMDBlMiwgMHgwMWJkODRmMiwgMHhmZjBhNGY4YSwKLQkweDhmNmIzZWVmLCAweGY3MjMxYmM3LCAweGRmMmI2NDU2LCAweDhiNmZkZjRjLCAweDdmMTUzN2QzLCAweGViOWJhNDdhLAotCTB4OGYzODE1OWIsIDB4NTdlN2I5NDYsIDB4OGU3ODc5YjUsIDB4MWJkYzU3YTksIDB4NWJkZDkyYTUsIDB4ZWU5MjdlNWIsCi0JMHhmY2Q1YWI5NywgMHhmYmYxNzVmOSwgMHhiNDJlZDllYywgMHg3Y2Y4YjU4MywgMHhhMTNmZTYyMiwgMHhmM2M4ZGZiZSwKLQkweGJjNmNlYmVmLCAweDE0ZmJmNzVjLCAweDQ3ODljZjNhLCAweGVmMTA0YTQ1LCAweGRmOTdiMjlkLCAweGZjMjRlODJiLAotCTB4MGYzMDE3OWUsIDB4MjBlNjM2NTgsIDB4OWUwNDA3N2UsIDB4NDMzZDc3Y2YsIDB4NWY5ZTE4ZjcsIDB4YTBlODlhMzcsCi0JMHhhNTNmMzdlZSwgMHg2NDBlYzk3YiwgMHg2M2FjZmM4YSwgMHg3NTQzZDIwZSwgMHhkZTI1NmY2NiwgMHg5MzIwNzc5MywKLQkweDRhOWQ5YmRiLCAweDhjNTk2Mjc3LCAweGFiMzZiOWZkLCAweGZiZWJlNDhhLCAweGQwMWI0NmViLCAweGJhZjBkNzNlLAotCTB4OGQ4NWM4NTMsIDB4ODk1MDNjNWEsIDB4NmRmZGUyNTQsIDB4YmY3Nzk3ZWYsIDB4YTBmMDdhNGMsIDB4YzZlNzdlOTUsCi0JMHg0YTkzZTg3MCwgMHhhMzcxNGZiYSwgMHhhZmE1ZWU5OSwgMHhjYjc2MzQzYSwgMHgyYzZmYTgzYywgMHhhOGJlNTAzMiwKLQkweGUwOTU5MGUxLCAweGRmOWViNzM5LCAweGEyZGY4NGVmLCAweDM0M2M2ZWJlLCAweGE4MGY3ZThhLCAweGJjYTExNmNlLAotCTB4NmYwNGM2YWUsIDB4ZDQ5N2VlMTEsIDB4ZGQxNmZhMWQsIDB4YmVlNjdmMjcsIDB4MzcyODM5YjEsIDB4MzlhYWE3NGYsCi0JMHg3ZGVlN2Y3NCwgMHhmNzk4NzQ4MCwgMHhmODYzNjNlOSwgMHg3NGM5ZDZmYiwgMHhkMWIxZDI1ZSwgMHhhZTJlMTgxNiwKLQkweGY4OTNlOWExLCAweDY0MGVhM2ZiLCAweDQ2MWZmNjk2LCAweDc4YjU4Y2ZjLCAweDkxNzk0MGY3LCAweGI4YjAzZjc2LAotCTB4ZjllZWFjMGYsIDB4ZjMxNTFjYzgsIDB4NTU3Zjg1YWMsIDB4MzNlZjdmNjcsIDB4ZmRhZGY3YmEsIDB4M2QzODViY2QsCi0JMHhjZDAyN2RmMywgMHhiNzFmOGIzZiwgMHgwMzlkZTg0ZSwgMHhmYzdjYzhhNiwgMHgzNWJhYTY3ZCwgMHg5ZTI2ZmYwMiwKLQkweDI4Njc1Njg3LCAweGQzMjdkZmE1LCAweGVlMzFiZmYwLCAweDA0NTdkNTdlLCAweDk5ZTdiNWRlLCAweGI3YmExNTE3LAotCTB4MWM4MWVjMGUsIDB4NzMzYTU3ZGMsIDB4NzZmNDRjZGMsIDB4M2E3OGUzNjYsIDB4NTc4ZGFkMmYsIDB4MDI3MWI4MDcsCi0JMHg1NjRlOWU5ZiwgMHhmZWZhZTIyNywgMHhiYWFmYzg1OSwgMHhkNGVmZGMzNSwgMHgzNjE5ZDdkZSwgMHg0NzdhZTM1NywKLQkweDZmOTRjOThlLCAweDI0OGNlMDMzLCAweGQ2ODg3ZWUyLCAweGNlMGYyYjRlLCAweGRmYTY0YmE3LCAweGY5OTAzYTE5LAotCTB4ZDAzYmFkMzQsIDB4MzJiYTQzMTUsIDB4ZmE0MWM2ZmMsIDB4ZmUxYmY4MzYsIDB4OTdlZjQ1N2IsIDB4ZjUwZDkwYjMsCi0JMHhmMjY2YWJmNCwgMHgzMzFjNGVkMywgMHhmMDNjMWQ5MywgMHgzYjc3M2YxYSwgMHg3YjJmMWVlNCwgMHhhZGVmMDcyNCwKLQkweDE0NjZmZTBjLCAweGVjODFiNWM5LCAweDM3NmU2ZWM4LCAweGI4ZGVlOTViLCAweGM5ODE1MzgxLCAweDQzMmNmZjYyLAotCTB4ODE5NzhiZGMsIDB4NjM4NWRhZjYsIDB4ZDdiNDZlZDYsIDB4MjBmYjQ5ZTAsIDB4NDNkN2I2MjEsIDB4ZThkYjhmZWYsCi0JMHhkMjc4MGZmZSwgMHgxZDI2MDkzOSwgMHg5Y2VmZDBmNCwgMHg3ZGYxMzZiMCwgMHg2NzdmN2QwZiwgMHhjYTBjNjA0ZSwKLQkweGEwMGIzYmU5LCAweGRmN2UzYjdmLCAweGU0MmVlZDQ3LCAweDE5NjEyNjA3LCAweDc4YzUzMmZlLCAweDc2NmZkNDk5LAotCTB4NGJkZTk3MjAsIDB4ZWZmODc5MWYsIDB4ZmE4OWI0N2IsIDB4OWEwZmFhMWUsIDB4MWU2OTkzMDMsIDB4OGViMDc2N2YsCi0JMHg0ZGY5ZTY2MSwgMHgyZjdiN2ZlZiwgMHg5YmU0ODUzYiwgMHg5OWUwMzcwNiwgMHhiYzc4YmZlYywgMHhlMjBjNzI3OCwKLQkweDNlMzg1ZGY3LCAweDcwNzJlOWUyLCAweDNlMDRiZjNkLCAweDVmOTBhNzhjLCAweDcxZDdjNWQyLCAweDk3MTM1OGZkLAotCTB4YzllM2FkMjcsIDB4NDMxYmE1Y2UsIDB4NTY5YWYyNjIsIDB4ZTg5YjdiMWQsIDB4ZGJlOGMwNzIsIDB4NzIyOTdhOGEsCi0JMHhiZGY4YzhjYSwgMHg2MDE5NjA2YSwgMHg2ZjBhNjE5YywgMHhmY2UzNjc1NywgMHg5ZWYxYzFhNCwgMHg2ODZlNmZjOCwKLQkweGVmNGY3OWU1LCAweDljZWRlMmZkLCAweDI3M2M3NjA1LCAweDljZWViNmZiLCAweDgzZjcxNmFjLCAweGFlMzExMjRlLAotCTB4ODlhYWY3NjIsIDB4ZGVkYzI1YjUsIDB4ZmUyZTA5OTYsIDB4OGQxYjRkZmIsIDB4NTU0ZWZkMmEsIDB4MTRiMWJlZTgsCi0JMHg1MjYzMzg0ZiwgMHg4ZWJkZDEwZiwgMHg5MDE4MjdlYiwgMHg1Y2JkNWE5ZSwgMHhmOGRhODRmNiwgMHg5YWZiYjRiYywKLQkweGUyOTc3YmI0LCAweDljZGRmMmYxLCAweDM4YmJmZTAyLCAweGRlMmI3MDJjLCAweGE5OWE3ZGQ5LCAweDhkYjM2MjY5LAotCTB4YzdhYjlmZWUsIDB4ZWJjYTAxN2YsIDB4MmIzZTBkMGIsIDB4YmQyNWJmY2YsIDB4Mzc5ZWY0MzAsIDB4OGVmYzk3ZDMsCi0JMHhmOTZkZmZkNSwgMHhlNjhjYjkwNywgMHgyNTBkZWFkOSwgMHhjNzdkNWVhMiwgMHg1ODNlZmRjOSwgMHhiYmY0OTUzZCwKLQkweDc3NDllN2NjLCAweGJlYTA2NmU4LCAweDkzOWFkZmY2LCAweDA3MjRmNTRhLCAweDdkNzg5MWRmLCAweGYyNjk5ZDNjLAotCTB4OTAzZTA4NmUsIDB4ZmM1ZmIwNmUsIDB4M2RiZWZhMGUsIDB4NDhkNWM3ODcsIDB4NzliZGUwNTgsIDB4N2JhMjY0MmMsCi0JMHgwYWJlODQ2MSwgMHhjZjAxOGE0YSwgMHhkNGI5Zjc3NSwgMHhiZWNiYTQ0NCwgMHg1NWU0ODJkNiwgMHg1MmUwYTc5OCwKLQkweGU4NjJjYWQzLCAweGEzMmNmODI0LCAweDllMmFjY2YzLCAweGJmOGM5ODRmLCAweDg4OWJlMjczLCAweGM5MDNiY2YxLAotCTB4M2M0MjM4ZmEsIDB4ZWI0ZjhmM2MsIDB4ZmY1YjFmOWQsIDB4NzcyZTFjZDMsIDB4MWZiODczNWIsIDB4MjYxY2ViZjgsCi0JMHgzYzc4ZmVlYywgMHgyMjU4M2E3MiwgMHgxYmQ1YTBlOCwgMHhjYWZjOGFiOCwgMHhiNjRiNzZiOCwgMHg4OGZhMDkyNSwKLQkweGQ0ZjZkZjdiLCAweGNhYmU1MzNmLCAweDg1YmRmZDRlLCAweGRlM2Q2MjM1LCAweDkyMTRkZTc5LCAweDgxMzNlMTI2LAotCTB4MzdlYjhkZjIsIDB4ZmY1Nzc5NzMsIDB4NWRkMTRkNDIsIDB4ZmNlNzRjYmMsIDB4NGRkYzc1YTcsIDB4NzBiMzBmYmYsCi0JMHhjNjIyY2NjZiwgMHg4YmFkMTdlNSwgMHg3MzBiOWY0NiwgMHhkZjY4NDU3YywgMHg0ZWNiYjY0NSwgMHg2ZGZhOTNlNCwKLQkweGFhZDNjMTMyLCAweGMzYjY1OWI0LCAweDhjZGJiM2ZiLCAweDBiZDVmNzY0LCAweDA1NjZjZTc4LCAweDE0ZGQ2OTEyLAotCTB4ZWYwMDk4YTYsIDB4MjI0MDk1NjcsIDB4YzVkYmI1ZDksIDB4Y2RjNGUwZWYsIDB4YTJiZGRhMDMsIDB4MWY4MzBkOTQsCi0JMHhjMjY3NWYwYiwgMHg3NDMwYzE0ZiwgMHhlYjQwY2E3MCwgMHg4OTgxMzBiNCwgMHhlODkzNDdkZiwgMHhlY2Q5Yzc5YywKLQkweGVlNThhZGMwLCAweGVlOWU3ZjAzLCAweGEwNmI2ZTlmLCAweGYxZTI1NTdiLCAweDIwMTJkNjdkLCAweGU2MjI1ZDdhLAotCTB4N2UzM2UxYTMsIDB4MDM5ZjBkMWMsIDB4OWZiNDRmODgsIDB4ZmE0MWRmOWUsIDB4OGNhMGY4MmYsIDB4ZWU5ZWNjMTQsCi0JMHhlY2ZjOTBmYSwgMHhiZTY2Yzc2OSwgMHhiZjdjMmRmMSwgMHgxNTE4ZWMxOSwgMHhjYmZlNmRmNSwgMHgwNzdkNDdkZiwKLQkweDk4ZWQwYTcyLCAweDY5MDU2M2RhLCAweGEzNmY0ZTJjLCAweGQyZmI1OTNmLCAweDhjNDM0NGRjLCAweDk3NmQ2Y2JlLAotCTB4YjVhNTlmNjksIDB4MjJlMjRlNzAsIDB4MDZmZTdmNmEsIDB4YWFkM2FmYTQsIDB4YTYyY2FkMzcsIDB4OWEzOTJiZGQsCi0JMHhhZjVmYTkzZiwgMHg0ZDdmY2RiYSwgMHgzN2VhNzFjNCwgMHhkYTVlNjkxOCwgMHg0YzAwMGNiYSwgMHg2Y2RiODcyNCwKLQkweDgxZmZhNDYxLCAweGFiZjUwOGFjLCAweDdkMjBkM2FkLCAweGY0NjgzYWUzLCAweGNkM2VlZDA0LCAweDc4NzE4YTcxLAotCTB4MmYyZmI2YmMsIDB4ODYxZGU5NTAsIDB4MDAzZjE2NGUsIDB4ZGI3ZjYyZTMsIDB4ZTY5Zjc0MWMsIDB4ZTFhYjhlYTUsCi0JMHgwNWJkNzA2MywgMHhkNzE5NTM1ZiwgMHhjNTFlNzc3MSwgMHgxNGE3MGRjNywgMHhkZDNmMDY0YSwgMHhmMjBlNGQ3NiwKLQkweDA3ZDgxZDcxLCAweDkzYTg4NzE4LCAweGJkZDA2ZjIyLCAweDc0Y2NjN2E2LCAweGU2ZGQ2ZmVmLCAweDc4ZTJiN2E1LAotCTB4MGQ5OWFmNzUsIDB4ZmM3N2RmNTgsIDB4NTcwNDg5OWEsIDB4OWUwMmJhZGMsIDB4ZjdhMzg2NzIsIDB4OGU0OGJjODEsCi0JMHg2MDdmMDYzNywgMHg2YjdmMTA1NywgMHg5YjgxODlmMywgMHg4YjNmMDBlMCwgMHhjODE5YzVlZSwgMHg5MThjZjU4MywKLQkweGUxY2Q3ZjAzLCAweGVmNjgxYWYxLCAweGYzN2QxMTM0LCAweGU3MDY5OTdiLCAweGFmOWI4Y2ViLCAweGFmYmU2ZTMzLAotCTB4ZTY2ZmEyMzAsIDB4MTY3Y2QwMGQsIDB4ZTAzNjZlYmUsIDB4NWZmNzg1ZmIsIDB4Yjc3MTg0NWYsIDB4NjlkM2Y1YmUsCi0JMHhiZWM5N2Q1ZSwgMHg3ZDVmYzg4OSwgMHgzMGZmZDAzOSwgMHhmZGUxNzJmMiwgMHgyZjkyY2YzMCwgMHg5NTliNjc5OCwKLQkweDc5YzQ2YmQ2LCAweGIzNzY0NzI2LCAweDI3YTc5ODJmLCAweGI3Y2YzZjU3LCAweDdlOTEzNTE0LCAweGNjODhlMzRmLAotCTB4Y2MxMjhlMzAsIDB4MTZmYzZmZjYsIDB4OTdlZmQzMmYsIDB4MWU5YzhkMDUsIDB4NzQ2ZDliODIsIDB4OGJiZmFhMmUsCi0JMHhjOWFmOGZkZiwgMHgxMmVmMTgwMSwgMHhmNDQwYzFlOSwgMHg2ZWE1NTdkMCwgMHg3NWY0ODI5OSwgMHhmZGM0ZWM5ZiwKLQkweDk3ZjViZThhLCAweDJmYmY4Y2JkLCAweDc2NTFiN2Q3LCAweDU3ZDBkZGEyLCAweGYyMDdmMWM1LCAweDVmNzhmNDgwLAotCTB4MmEwNmZmOGUsIDB4ZWZkMjM3MWYsIDB4ZmI2OTlkYTQsIDB4M2VlODlmZWIsIDB4ZmE0NjYzODIsIDB4M2M4MWUyM2QsCi0JMHg1ODc5YzZmZiwgMHhhZTUxNzgwNiwgMHhlMjZlNWUwMSwgMHhlNjkxYWI3NiwgMHhjMWVlYmFkZiwgMHhkYTFmNTg3NSwKLQkweDZmY2U4OTM2LCAweDdhZDdkNTBjLCAweDkwNmZkNzNjLCAweDE0Yzg3Yzc1LCAweGRlMGJjNjk1LCAweDE3ZWU4YTNmLAotCTB4MTIwY2YwZDEsIDB4MjNmZDA4YjYsIDB4OWU1ODFmMGQsIDB4OTc4YTIxM2IsIDB4OGY3ZjM4YTAsIDB4OGZiZjAyNzYsCi0JMHhjNDMzYzg0YiwgMHgxM2Q3M2U0ZiwgMHhlNTA1OGU3OCwgMHgxOWE3OWUxOCwgMHhjYmM1NWY0OSwgMHg3YmJkNzg5ZiwKLQkweDRmYjZhZTYzLCAweDBkYzc5N2E5LCAweDc5YWZiZjcxLCAweDY5Nzk1YzViLCAweDE2NThkYzljLCAweDU3MThkZjU3LAotCTB4ODZmOWZhMGYsIDB4Y2ZkMmUyZTEsIDB4YTJjZjhlMGMsIDB4MWEyMTkyN2UsIDB4NGZiODFkMWYsIDB4NTZiNGJmMjIsCi0JMHgwN2U4NGQ1MSwgMHhlYjhkM2UzZCwgMHg1OTg1M2FlNywgMHhlNGJlMjJhZSwgMHgxNTZhNzNlNywgMHhjMzJlNjJkNiwKLQkweGFjNTM1ZWY3LCAweGI1ZmQwNGJmLCAweDljYTE5Mzk4LCAweGI0MTBlNWMwLCAweDk0YzUzNmFiLCAweGMxYWI3OTM1LAotCTB4YTNjMDRhYjMsIDB4OWM3NmJmM2QsIDB4N2RjNDY2YTAsIDB4MTViOTU1OGMsIDB4Y2EzMWY3NDMsIDB4YmY1ZmZjZTQsCi0JMHgxMWQ2N2U4OCwgMHhlMGNjZmM5OSwgMHhiMGZmNWMwYiwgMHhmMmRjM2Y0ZiwgMHgzYmVmMWI5OCwgMHgzMjNjYTAyZSwKLQkweDc4ZjFmZTZkLCAweDYxZmMzODFjLCAweGU0ZGVmZDIyLCAweDVmM2EyNmYzLCAweDUyOTVkYjVlLCAweDcyNTg3ZTQ1LAotCTB4NmZiYzU4NjQsIDB4NDRmYWU1Y2QsIDB4ZTk1ZmFmZWIsIDB4NmIxZDljNGQsIDB4YzRkZWIzNDcsIDB4YWRmN2RmZDgsCi0JMHg0YWUxZmMzZCwgMHg3ZjAxNmJmNCwgMHg4ZTQ2MzkyMSwgMHg1YTk2Mzk5ZiwgMHhkZDY1ZmU4NSwgMHhmMGFiMzJlZiwKLQkweDVjZDFlZmJjLCAweDNlYTAwZTJkLCAweGU2ZjkwMWJjLCAweDEzZTI5OTg4LCAweDMzY2MyZmZkLCAweDJmZmRmN2UwLAotCTB4OWRlNzhiZDQsIDB4ZmY2MDlmNzQsIDB4NzA3MjY3NWIsIDB4ZmU4MzQ0ZmMsIDB4Y2Y3Zjg5YmUsIDB4OWQ1NGY2ZTUsCi0JMHg1N2RkY2RlMSwgMHg5YTNmZmNhMiwgMHgyNjI2Yjc5ZSwgMHgyODY3NWQwZSwgMHgzMWY4YmYyMywgMHhjMjNlNjQ2MywKLQkweDNhZmY3NjBkLCAweGZhZDUwM2NjLCAweDEyYWI5YTM5LCAweGRlNDdmZDFjLCAweGUxZjI4ZGRlLCAweDMyZWNjNmNjLAotCTB4NDdmZDJiMTQsIDB4ZGMxZjkwYzYsIDB4NDU2NWRhZmYsIDB4ZmY2YjVmNzgsIDB4OTQ1ZTE5N2QsIDB4ZDUxOThmMGIsCi0JMHhlMmRmYjkzYiwgMHg4YmM5ZWVmMCwgMHhlMGUzODdmNiwgMHg5MWZmNjNmZSwgMHgzZjE4OTVjOSwgMHhjMzhkN2ZlOCwKLQkweDI3OGE2NTBiLCAweGU2MTBiYjQwLCAweDI2ZmQ2YTVmLCAweDk4NGRkNDFhLCAweDY3N2VjZThmLCAweDhlZTJiZjI0LAotCTB4ZjFkMjBhY2YsIDB4ZDM0NDk1N2UsIDB4YTA1MGY3ZjAsIDB4YzNjZmExMWYsIDB4ZDZmMzRkNWUsIDB4ZmRlMzdkZjIsCi0JMHgzN2ZmMmQwYywgMHhlZWQzMGZkZSwgMHgxN2Y3OGY4YiwgMHgzZGRiNTllYiwgMHhlZjFjOTc5OCwgMHg2ZTYxODIzNywKLQkweGRmODlhNTA5LCAweDRlYmZhNzMzLCAweGY3NGJmN2QyLCAweGRmZDY2ZTdmLCAweGY2MTIxZDlmLCAweDcxZTQ4NTgwLAotCTB4N2FlM2YwMmQsIDB4Nzk4NTNmOGEsIDB4M2M5ZDZmZGMsIDB4YzVlYzdlZWMsIDB4NmZhNzZlNWMsIDB4N2U2ZGZkYjUsCi0JMHg5ZWJhY2M2ZiwgMHgwM2M1MzAzNiwgMHg2MjZkM2Q3OCwgMHg3MGQ5NGYxNiwgMHg5Yzg1ZTNmZSwgMHhjMzdiOTI1YSwKLQkweGIxNzU4ZGZiLCAweGExYjFkNmY3LCAweGFhZTllNDdlLCAweDlkZjllNTMwLCAweGVmZDMyZjVlLCAweGY1YzNjNDU5LAotCTB4ZjhjOGZkNTUsIDB4ZWJkZmI1ZWYsIDB4YzRlZDA0ZjgsIDB4MDA5MzhjNTQsIDB4ZTQ1ZmM5YTQsIDB4ZDVlMWViM2YsCi0JMHhiZjE1NjlmMCwgMHgwMWZmZjJhMywgMHg5NDkxMTNkZCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwKLQkweDdkYjVmZjAwLCAweGM1NTQ3YzBiLCAweGJkZGNmOGQ1LCAweGMzNzY0Y2ZiLCAweDA4M2M4NDI2LCAweDgxM2JjZDg0LAotCTB4NDQ5MDJjMjQsIDB4OGYyZWQ0YWMsIDB4MDMxMGYwYzQsIDB4NTg1MDgyMmEsIDB4ODlkZTQwMjAsIDB4YzViMGZkNjAsCi0JMHg0MDgwMjE2NiwgMHgxNTFhODZkMSwgMHgyNjBkZGEyYiwgMHgyMmVjMTIwOCwgMHg3NjBkMTIwMSwgMHg0YTg4ODk0MSwKLQkweGFkYjQ1NTAzLCAweDIwMmEyNWYyLCAweGQ0MTA5MjA0LCAweGViNmJmZThmLCAweDczMzM5Y2ZmLCAweGQwODIwZmIzLAotCTB4Y2ZlOGZiZjYsIDB4OTlkZWU2NGUsIDB4N2RlNzMzYjksIDB4ZmQ5OTljY2UsIDB4ZjdmODdiZmUsIDB4MTdiZWM2MTMsCi0JMHg2MmEyZDlhNSwgMHhjOTYzMTA2YywgMHgyZDk5OTBmZiwgMHg0M2IyYjE5NCwgMHg4OTFhZTcxYSwgMHhhZmRhYzBiMSwKLQkweGY1MGI5OTlmLCAweDM5OGQxNmVlLCAweGY5NThjMmM2LCAweDY3MjZkOTIxLCAweDY1OWFjNjMwLCAweDNlMGM0MjY3LAotCTB4MDhhODIyZmYsIDB4OGYzNzk3ZGUsIDB4MzNjY2NiMzEsIDB4OWNiMzc5NWUsIDB4YWM2NTRjZTcsIDB4ZDg2YWU5YWIsCi0JMHg2NzFhNTRlMiwgMHhmZDg4YzViYSwgMHhhMWRhYjY5ZiwgMHhjMmFjYzgzNCwgMHg1N2I0ZjQ2NSwgMHg0YzhiNThjYSwKLQkweDY5ZGUyOGYzLCAweDk5MzJmZWE4LCAweGUxZWZiZmQxLCAweGIwNTc1MmJmLCAweDI5YmNiZDRmLCAweGJkNGJmYWIyLAotCTB4N2Y4YzVlYTcsIDB4MzY3ZmMyNDQsIDB4OGM1OTY3YTYsIDB4ZWM1N2YwOTUsIDB4NjE4N2VhNzIsIDB4NWRkZTYwNTMsCi0JMHgxOTEyZTdiNSwgMHhiMmE4ZDEyYywgMHhhMTMyNWFjNywgMHgxNjlkZjg5ZSwgMHg2N2I1OGNlYiwgMHg3ZTY4OTllNSwKLQkweDY3OTgxNjQxLCAweDIwZGJmM2I3LCAweGI3ZDJmMzA2LCAweGJmOWMzNmM4LCAweDJjMzJmY2ZmLCAweGZmMzJjNjVhLAotCTB4YzJlNWY5ODMsIDB4ZjMzY2MyZmMsIDB4NTg2NGY5ODMsIDB4NTllNjc5MDYsIDB4YjJkMWU5NjYsIDB4M2U4Nzk4NTgsCi0JMHhjNDhkOWQyOCwgMHhhMzY5YjYxNiwgMHhmYzIyZmRhMCwgMHg2YTJmZGUxMywgMHgwNThkM2M1OSwgMHg3OWE5MzYzMSwKLQkweGUwMDMxYWM5LCAweGIyNWFiYmExLCAweDdlNzllMGVhLCAweGYwMGRjMDBiLCAweDc2NGRiZjkwLCAweDkzMmYwMDVhLAotCTB4MzExZDU2OTIsIDB4ZDNmMTdkNDAsIDB4ZTZiYTFlZjAsIDB4Y2Y0ZWUzYzgsIDB4OWVjYmY2ODYsIDB4Yjg3ZWE5OTAsCi0JMHgxYWQzOTFmNiwgMHgwZDM2ZWJjNCwgMHgwMzFlMjFkMywgMHhlZjhiYjY4MiwgMHhhMTVmOWMzMSwgMHhjYjYxNWY5OCwKLQkweDdjMTIwYmQ0LCAweGQ5MjFkOTZmLCAweGY1ZmVjNmVhLCAweDVmM2UyYjI2LCAweDc5ZjM0MWJjLCAweDk2ZmFkN2JiLAotCTB4ZGUzMDFmZTAsIDB4ZDM5MmFkOTIsIDB4YTkyZGUzMGQsIDB4OTVkZjdkZjYsIDB4MzhiMmQwZTksIDB4ZWZkNWJmZTgsCi0JMHg5OWZhZWQ3OSwgMHg1NGIxNDI0NywgMHg1MWQ2MDkzMywgMHg4ZjdkZjRlOCwgMHhmOTg2ZGVmZiwgMHg3N2JmOGI5NCwKLQkweDhjMWU2YzI2LCAweDMwMzJlOWY4LCAweDYxZjgwNmQ2LCAweDg2MzBmNmVhLCAweDFhM2RiYmE1LCAweDdjZDVkOGYxLAotCTB4NThmMTFhMzYsIDB4MjRmZmZhZmUsIDB4YTdmMDdlYjIsIDB4MTRjNWFjOTQsIDB4ZTAxMDJlN2EsIDB4ZjdkODkxNjksCi0JMHhhYmZiYTQyYSwgMHg2OWZhZjNkMywgMHhlNzA4N2EzZiwgMHhjNzFhOWQ4YiwgMHgzZmJjMmI2MCwgMHg3NDZkZmI1MiwKLQkweGIzNDlkMjNiLCAweDFmYjk5ODdkLCAweDlmMWJlZGZhLCAweDA4YWEwYzM5LCAweDg2MDZkZDJjLCAweDNjY2I4NjY1LAotCTB4NGRlNGY5MDUsIDB4ZDIxMzc5OGQsIDB4MzNmNWY2YzcsIDB4ZjBkZDQzYjcsIDB4MDA2NjA2ODYsIDB4ZjEyMzA0ZjUsCi0JMHgxMmM3ZjIwYiwgMHgzZTE1NzFhZiwgMHhkOWIxMjlkOSwgMHg5OTQyNjY1NCwgMHg2ODkyZjM4YSwgMHg5MzBmZGY1ZSwKLQkweDFlNzcxZTg4LCAweGQwOWU5ZGVlLCAweDY5ODY3Y2RmLCAweDIxZThkZGE4LCAweDM0N2RkYThjLCAweGQyMzU2ZjJjLAotCTB4MTFjYTgwNWIsIDB4MzY2MGY4ODQsIDB4ZTAxNDI1OWIsIDB4YWFmYTA5MmIsIDB4ZTEyMTU5NWEsIDB4NGQ1NjA4ZjMsCi0JMHhhMmU2MTBlNSwgMHhlY2M2MDVmMiwgMHhhY2NmNmM0NiwgMHg2MzMzODQ2NiwgMHg3ZTExODM0MywgMHg1ZWI0ZjNjNCwKLQkweGU2ZTkwYWJiLCAweDliNzcwMjY3LCAweDhlMGY0ZTI0LCAweDg3YWNlNjYwLCAweDNkNWFlNWJmLCAweGE2MzAwNzkzLAotCTB4ZDg0MWVkNjUsIDB4ZjMzNjk0YzksIDB4YmRlMGMzZDcsIDB4MjU1OTQzZTYsIDB4NDNjOGJkMDEsIDB4Y2Q1YTdjMTUsCi0JMHg4YzZmZGY4OCwgMHhjNmYwMGRmNywgMHgxN2Y3ZTFkZiwgMHhhNTc4ZTJlNSwgMHg4M2E2NjVmYiwgMHg2YTM3MmVmMSwKLQkweGVkODhkYjk4LCAweDlkYTA1ZjgxLCAweGI1YWZmZGU2LCAweDVhOTcyODMxLCAweGViMDA5NjI0LCAweDNlM2E4NzI4LAotCTB4YjZhNzFmMmYsIDB4NTJlMGJkMzksIDB4NzhmMGUxNmYsIDB4ZjA0ODkyZGEsIDB4OGVkYjUyZTgsIDB4MzNmYTQzNGQsCi0JMHgyYzNhZDIyZiwgMHgyZTdlNGUzOCwgMHgxMTM0NzE4MywgMHhhZjM4YjQ4YiwgMHhkMDRmZWZjMywgMHg4MmRlMjBjNywKLQkweGViMzdjNGQ1LCAweGI2ZWY5NDViLCAweDY0ZmM3MTk5LCAweDc4ZjMyOWQ1LCAweGE5OTNkZjc4LCAweGYxZTFkYjY2LAotCTB4Y2RjNmEzZjksIDB4ZjdjYTQ3YzgsIDB4M2YxYzJjYmEsIDB4MTI4MTJiNjcsIDB4OTdjZjNjOTIsIDB4ODM5N2RjNjQsCi0JMHhmYjMyOTdmZCwgMHhhNWEzYTQ3YSwgMHg3YjczMzIzNSwgMHgwZDc5ZmRkMSwgMHg2YjkyZjdjNywgMHhjNjNkY2M4MSwKLQkweDRjYzQ1ZmFiLCAweDZiOTJkNzVhLCAweGJjZmNmNDQxLCAweDZmM2JiNzgxLCAweDllZjE3NGUyLCAweGM3YzVkMzg1LAotCTB4ODg1ZmJiZTIsIDB4YWYyZGJmZmEsIDB4ZWFmMmJlYWMsIDB4ZWYxZjBiZjIsIDB4ZDZlNWM0NTgsIDB4YTU0NzQ4N2IsCi0JMHg0NGNlN2I1MiwgMHg4OGZhYzRmOCwgMHhmNWNhMmQ1ZSwgMHhlNjY2OTViMywgMHgzYWQwZmRkNiwgMHhkN2I3MzIwNywKLQkweDVkZGFmYjc3LCAweDQwZjczMDMzLCAweDY4NTliODZmLCAweDFhZjU5ZWZlLCAweGNhZDlmZGU5LCAweDMxYzA5Yjg4LAotCTB4OWU4ZTA3Y2EsIDB4ZTA3Y2UzZjEsIDB4ODlmOGZkNzgsIDB4NjU2Y2ZlZjQsIDB4MWZjNjRkZjIsIDB4NjNmMTgzNzEsCi0JMHgxOWVmZTY3YywgMHhhZjllOWUzNywgMHgyMGIxNTU0ZCwgMHg5ZmI1YWJhMCwgMHg2Y2M0OWNlOCwgMHg3NGE3YWU3YSwKLQkweGJhZDZlZjgyLCAweGZkMmRlOTI3LCAweDRkODNhZmYwLCAweGUxNjM2MjhhLCAweDhiOWNhMzdkLCAweGJjZDk3Yzc0LAotCTB4YWU3YzhjYzgsIDB4NzRiOTA2MDksIDB4ZDhkN2Y0MWIsIDB4NzE4MGVmNzIsIDB4MDMyMWMxNzUsIDB4NWFhZjdlOTEsCi0JMHhkZjVkNjhlMiwgMHgxZDEwNTcwNiwgMHhiNDc0M2I3ZiwgMHg4ZmMxODhlYywgMHg3ZDYxZTQ1NCwgMHg5OTdjOTBlZCwKLQkweDU5ZmFiMzc4LCAweDdhZTVmMzkyLCAweDIxZDM3ZGZlLCAweDlmZTQ0YTYwLCAweGFmNDJmNWRiLCAweDE4YmNjOWZmLAotCTB4ZDQzNTUzYmUsIDB4ZjRjOThmYWUsIDB4Zjk5NGM3Y2MsIDB4YjMzYzQzMzYsIDB4OTQzMGZiMjYsIDB4ODE5YjhmMDMsCi0JMHg4MDFmODk2ZiwgMHg1YWJkNjFhZiwgMHgzYmJiZmVjOSwgMHg5ZmQ4MWY4MCwgMHg4YTFlYWM3NSwgMHgyNGY2MGQ2ZiwKLQkweDQ3MWYxN2IzLCAweDA5ZmQ3MGM0LCAweDcyODUxMGRjLCAweGE4NmFjMWQxLCAweDRhYmE2ZjJjLCAweGZmMDBiNjcwLAotCTB4Zjc5NGJhZTIsIDB4ZTA4N2FjZTUsIDB4YzJjZDdjOGUsIDB4MTZkNTI2OTEsIDB4NGY2NGRmN2EsIDB4Y2NmMzRiY2EsCi0JMHg3OGVlY2ZhMywgMHgwMTUwZThjNywgMHhmZDBlZTlmZiwgMHhkOWUxMDgyMywgMHg2ZTk5ZWVhZCwgMHgyMmQ1ZDI4NSwKLQkweDc3YzM3YTA3LCAweDhmZTcwYzY0LCAweDRlYmY0MzA5LCAweDY1ZTc4NzZmLCAweGQzZTQwZmQ4LCAweDI3MTY2ZjIzLAotCTB4ZDMyOWZjYTEsIDB4YmNlM2E0ZjUsIDB4ZjdmOWJjOGYsIDB4ZGZmNzk0NzQsIDB4ODYxZTJhMWUsIDB4N2I0Mjc3Y2YsCi0JMHgzZGI0MTNiMiwgMHhmMWFmNTY2NSwgMHhhMWQ5OTllMiwgMHg5MzI5ZWIxYSwgMHhlZjg4ZTI2MywgMHgzY2VmOWZmYywKLQkweGU3MTgzNTU0LCAweDg4NjIwMGQxLCAweDU2NzdjMDg1LCAweGU1ZjcxN2JlLCAweGRiMDcyNDQwLCAweDE4NjcyODUzLAotCTB4MGI3YTk3YzgsIDB4Y2FmNzRkZGEsIDB4M2VjYTU3MjgsIDB4ZWEwNGRiMDIsIDB4YmY1Y2NkMTksIDB4NGU2NTBjNjcsCi0JMHg2N2RhMGM1NSwgMHg3YzQ2Y2QxZiwgMHhjZDZhNjU5NSwgMHhjMDRhNTgyYSwgMHgxYWU3MzZhOCwgMHhhOTkwMWY3OCwKLQkweDFkMWVhMzM3LCAweDVmN2Y4NDNlLCAweDBlM2NmYThiLCAweDQ0MGY2N2ZiLCAweGU0MTRmZGJjLCAweDBmMjQ3ZmVjLAotCTB4MmJlY2ZjZWEsIDB4MDZiMmE5ZjcsIDB4ZGNhOTVlZjgsIDB4MDBlNTFkM2UsIDB4MzFlOTg1YzgsIDB4MDdkOTdlMzAsCi0JMHhiNTQ4OWY1ZiwgMHgzMDllOGI2MCwgMHhkMGI3NGZjNCwgMHhlMzEyN2YzZiwgMHgzNzkzMWEzYywgMHhmYmFhZTkxMywKLQkweGUzZDc3N2ZlLCAweGJiMjQzN2EzLCAweDg4ZTNkNzFkLCAweDVmNTE1YmQ0LCAweGVjNjcwOGIwLCAweGNlYmMyZjRjLAotCTB4YmEwOTUxOGQsIDB4YmEwMWVlMDEsIDB4YjZlNjJlMWQsIDB4Nzk2YmIwNjcsIDB4NjcyNWU5MzAsIDB4Yjk0M2QyMDgsCi0JMHgxZTUxZDk4YSwgMHhkNDAwNjliMiwgMHhmMzJlOTFkYiwgMHhmNWE2NjZkMiwgMHhkMGQ3OWZhNywgMHg2YzYyY2I3OCwKLQkweDRhYmU3MDhiLCAweGNkNjY4ZmZiLCAweGMzZjdiMzRkLCAweDA0YTk0ODg3LCAweDIxZWJhZDRmLCAweGE5NGY2NzljLAotCTB4ZjAxZGJhZDEsIDB4ODJiZTIxZjAsIDB4ZDJjZDJmN2UsIDB4OTNiMDY1YjksIDB4MGRjNjM1YmEsIDB4MjdkMWQwMTIsCi0JMHgwNzViZjM4MSwgMHgxODRmZmFjMSwgMHhjZWI4MTVlZCwgMHg1ZTRjMGZkOSwgMHhjOGU5NzU4ZiwgMHhhNDcyY2I0MCwKLQkweDU5ZWQ4NWNiLCAweDA2Mzk5Nzg4LCAweGJlZjhjM2ZiLCAweDE2MWY2ZjQ0LCAweDNjYmM0YjA2LCAweDAwMzQ5ZWQ0LAotCTB4NDBkZTZhOTUsIDB4OTc5NjZmMGUsIDB4ZmNlZmQ3OTYsIDB4NzUzYzdjZjksIDB4NTRiN2ZhNDYsIDB4MzFiN2E1YzAsCi0JMHg0OWQ5MDA2ZSwgMHg2NzQ4MGRhZiwgMHgxNTJlOWYzMCwgMHhkMGZkNDAyYiwgMHgxNWZiZTYyNSwgMHgyNWU2MjNlOCwKLQkweDI3OWMwYmE3LCAweDdkYTEwYmI1LCAweGVkNDlkZDYxLCAweDk3ZjVhZjIyLCAweGVhZTA4NTgyLCAweDNhN2EyZWM3LAotCTB4MTc0NWRiODYsIDB4ZGJmZWZkZjcsIDB4OWQ1MGMwNWYsIDB4NDQ0ODFjZGYsIDB4YmE1OGI1YmIsIDB4NzZmYWViNDQsCi0JMHg2MmY5YzlkNywgMHhiZWI4ZDU3ZCwgMHhhMjdiN2E0NywgMHgxMmFlYjBiNSwgMHg5NzJkNjFkNywgMHhlYTdkNjIxZiwKLQkweDVhMWZjNDllLCAweDJkYWE5NzVmLCAweDgwZTJlODg3LCAweGYxOGZhZTY0LCAweDNjNmQyYmY0LCAweGY0MDUxMzk5LAotCTB4M2MxNzUwNWUsIDB4OTY3NGU2NWEsIDB4ZTg1Njc0ODgsIDB4ZDE3ODhmODQsIDB4MDI4ZTMyYjEsIDB4ZGU0MmU1OWYsCi0JMHhmMDE0YWVmNSwgMHhiNjc2ZTAwOSwgMHhmYmU1MWYwMiwgMHgzM2UwZmM2NywgMHg4ZDkzZGQ1ZiwgMHgyYWJmOThmMywKLQkweGE5ZTVjNTU4LCAweDc5NDdlODkzLCAweGVmYTU2MGJmLCAweGZiMTRhYjc3LCAweDQ5YzkzMWU3LCAweDdlYmM2NmYzLAotCTB4ZGNlYzExZDAsIDB4ZWE5ZDc1MDQsIDB4YTJmNzg3ZWEsIDB4YjJhNjkwZGQsIDB4MmRiMGRkYTIsIDB4NjhjMDY0MDAsCi0JMHhmMDI4ZmVjNiwgMHgwN2M4MDJmMywgMHhkZjNkMDg3ZCwgMHgwMjIzY2Y4MCwgMHg2Nzg4ZmY3OCwgMHhlODJhY2U1NCwKLQkweDk5YTEzNzlmLCAweDMyYTVmMGU4LCAweDZmODY1NWEzLCAweDk4ZTA2NDJkLCAweDMzMTYxNGMwLCAweDY3ZDlkOTFiLAotCTB4NTBmZGZmYzcsIDB4NjhmM2FjM2IsIDB4ZjA4ZGRkOGMsIDB4MTU1MDMwNWYsIDB4YzNjZDIxZmQsIDB4ZGEwNjYyM2UsCi0JMHgxYzM4ZTM2ZiwgMHhmZDE3YjNhZiwgMHg5OTkzM2ZlMCwgMHhiMWU0NjQzNSwgMHhmYmU0MmFjZCwgMHg5NGJlNjY5OSwKLQkweGUzZTcxMjI1LCAweDgzNGQ5OTdiLCAweGQ5OWZiYmRmLCAweDJlYTlkZGE5LCAweDkzZmQwZGFkLCAweGMxNWJlODUzLAotCTB4MGU2MDFmYmMsIDB4Mzk4NzNlN2EsIDB4ZGNjYjljYTksIDB4YWNhN2ZlZDQsIDB4MWYwYWVhOWQsIDB4MDgyZmZkMDAsCi0JMHgzZTdmZjRlNSwgMHhmOWJhMjY1YywgMHgzMjdkZTcxOCwgMHg0YWU4N2QzMCwgMHg2NzhjYzc1OCwgMHg1ZmM4MTI5MywKLQkweGYwNDQxOWFiLCAweDY3YmNkOWI5LCAweDhmOGUxYzQ4LCAweDcxZGJkOGM2LCAweDZmZGNkZTljLCAweDcxODFhYzVlLAotCTB4ZDEzNzdhNTQsIDB4OTg5YzlmNWYsIDB4ZTFkMDQ4MzQsIDB4YjY4OWNiMGYsIDB4Y2M3ZjNlZGUsIDB4Yjg3MDA5MTgsCi0JMHgyZWY0YTA0YiwgMHg2M2Y5MzE1YiwgMHgzOTkxYjJkOSwgMHhlMzZkM2YwMCwgMHg1M2ZhMjc2NCwgMHg0M2FiNmNjNywKLQkweDkzYWE2NTQzLCAweGNhYjM2ZDVlLCAweDU5ZGZmN2E0LCAweDUwMTk0Y2NkLCAweGM2OTQ2NzdmLCAweDZiNzQ0NTVhLAotCTB4NWQzYzNkMjMsIDB4Y2Q3ZDk3OGMsIDB4NzgwMGY2ZmUsIDB4NTg2ZTVkM2UsIDB4ZGNmNTBjMWIsIDB4NzkwZmUwMjEsCi0JMHhkMGU0ZDVkMSwgMHhiM2U0NmFiZCwgMHhjZmJlZjEyOSwgMHhmYWZhYTVhNywgMHg2YWIzNzc0ZCwgMHgzZDNiZTExOSwKLQkweDYxZGRiN2MzLCAweDk1ZDAwYjg0LCAweDNmZmI5NjJhLCAweGZlMWIzODZjLCAweDhmZTFlY2JkLCAweDMxZjkxNDdiLAotCTB4MWJiNmFhZWQsIDB4ZDYyNjMxZTYsIDB4ZjU4NTg4NmUsIDB4ZWNmYmJmMmYsIDB4NTMyZWZjN2MsIDB4YTBjNjBmYjMsCi0JMHhiMzIxM2E1ZSwgMHg3M2ZlZjA0ZCwgMHhkODFiMTNlMCwgMHg4MjU2NWY0YiwgMHgzOTdlMDMwNiwgMHhkNjFmZjYwNywKLQkweDBkM2IwMmJmLCAweDE2OTU4YmNiLCAweDVkODEyZjJhLCAweDJhYmJlZjg1LCAweDIwN2Y1NGFkLCAweDE2MjQyZjM2LAotCTB4YzM2OGJmNDAsIDB4ZWQxZGI1MTUsIDB4ZmEyY2VhZmUsIDB4NWY0MTBhZmUsIDB4MmFiNzJhNmQsIDB4YmI2N2Y5MTAsCi0JMHhiODdkNDU2NCwgMHgyMTM2ZDBjMiwgMHhhMmI2ZTAxMCwgMHgxODBhYzYzZSwgMHhhZTRkNDU2NiwgMHhiZTdlOWM1NiwKLQkweGQxMDcyZjNiLCAweDQ1NThmNGI4LCAweGQ3YTU5NjJiLCAweGQyMDc2NjI0LCAweDhiY2U0MTdlLCAweDNlYmJmMWM2LAotCTB4ZGRkNjdjZmMsIDB4ZTU3Y2ZjZjAsIDB4ODVmZWZhNTgsIDB4YmY3ZDFiNGEsIDB4Y2E5NzMyYjMsIDB4M2M3YjU4OGEsCi0JMHg3NGI1YjNiNiwgMHgyMGI0MGViNCwgMHg3ZDEwYWUzNiwgMHhhMWQwZGRkYywgMHhiNjdhODI4ZSwgMHhkZjIxYjI0ZCwKLQkweDRlNjM2OWRkLCAweGFiNzVlMDI3LCAweGFkYTllYjg2LCAweDBmOTBhN2EwLCAweDdjY2RhN2M3LCAweDdhODY2MWUxLAotCTB4ZTM4ZTllYzQsIDB4MzBhNTNmZGMsIDB4M2U5OWM3MWIsIDB4ZGIxYWExNzYsIDB4NjMxZGYwM2QsIDB4NzQzYzYzMDMsCi0JMHg2NWJhMzM3NiwgMHhmMmZjNzI3ZSwgMHhkZGQxMTI5YiwgMHgxZWU1OTU2NSwgMHhjNzFjYWJiNCwgMHg3YTBmYjI2NSwKLQkweDE4NTUzMGQ1LCAweGUxOTNmN2JmLCAweDc0ZTAwNzRlLCAweDcwYjhmZWY5LCAweDM1Y2I2Nzk0LCAweDJmMTBmMDk2LAotCTB4MjdlOWQ2MzksIDB4ZGNmNzNhYzcsIDB4ZGZhZGUxMTYsIDB4ZGY1YzQzM2EsIDB4ZDBlNTA1ZmUsIDB4ODEwZTVjNjcsCi0JMHhiN2VlNzRhNSwgMHgxMThjYTcyOCwgMHg5NzZmYzQ1NiwgMHg1MjAwNDNmMCwgMHhjYjhmYTg4MSwgMHg0MDZmODJiNCwKLQkweDMzYmQ2MDhlLCAweDgzYzgyZDgwLCAweDUxYWJkNjdhLCAweGYwMGY5MDEzLCAweDhmMjQ5NjdiLCAweGY1N2M0OTljLAotCTB4NTg1ZmQ4ZDksIDB4ZTlkYmRmM2MsIDB4ZGY5N2YyNWEsIDB4NTNiMmZkNDIsIDB4NWU4MGQwZTUsIDB4NWQ1Y2NjYmEsCi0JMHhlYWJhZTNhZiwgMHgxN2I0NTY4YywgMHhjMDc1MjU5MywgMHhlZmVjMTBjYSwgMHg5NjRiYmUyNCwgMHgyMDk1ZWEyYywKLQkweGZhYmQ3NjQ3LCAweDE5ZTdlMGMyLCAweDhkOGMwOWRhLCAweDZjNmZmNzg1LCAweGYzMzkyNDA5LCAweDY2N2FjNjg2LAotCTB4ODE3ZmY2MjUsIDB4YzlmOTdmZjcsIDB4YzI2ZjNmNDcsIDB4ZDFkMjg5ZjIsIDB4MTA1OTQyOGYsIDB4Y2Q3MDQyMWIsCi0JMHg3MGUxNGRmZiwgMHg1MTExYjNhNCwgMHg2ZjE4MDY4MCwgMHg2ZGM5NDFmNywgMHhhZDJjNjc0OCwgMHg0ODlhZjBlNiwKLQkweDZkYzhjZjk4LCAweDUwYzFhYTFkLCAweGFhOTNhYThlLCAweGNhNjExY2IwLCAweGZiYzMyNjNkLCAweGNkMGI1OGIyLAotCTB4OGM0MzRjNjMsIDB4MzJlYzg1MWMsIDB4OWY5N2Y5ZDgsIDB4NmJlMWJkOTAsIDB4NWNkNmE0ODcsIDB4Nzk5ODMwOTksCi0JMHg5MmUxOTFlYywgMHhhNWUyMjJlYiwgMHgzNDdhNzRjYSwgMHg0ZDU2M2JlOSwgMHhiOTZmZWNlMywgMHg2OTczNGZmNywKLQkweGUwZTk2MDFkLCAweGFkNmExN2JjLCAweDhlOWMxZmE0LCAweGNiYjNhNDVhLCAweGQ5MmI2NGY2LCAweGU3OGU3OWU3LAotCTB4ZWQ5N2JmMTAsIDB4MTdkNDU2NjEsIDB4ZmY1ZmMwMDcsIDB4YTMzZmI2MTEsIDB4YWMxZTc1YTYsIDB4ZjE4NDE5M2IsCi0JMHgwN2UwMDE5YiwgMHhlOTdkZTAxYiwgMHg5M2QyMWVhOCwgMHgwYzJkNDNhNSwgMHhjNWY0M2JiZiwgMHgzZTExNzJiYiwKLQkweDZiZmI4ZDY1LCAweGJkMTI5YzY5LCAweDgyZDlmZDE1LCAweDUxNWI1N2ZkLCAweGNjYzliMjZmLCAweGQ1ZjQ4MDlhLAotCTB4OWFiZmViYzgsIDB4MWVhMmIzNjQsIDB4ODZmZGE4MmQsIDB4YThmMmRiZDcsIDB4ODNkZTA3OWUsIDB4ZTYyZmRiMWEsCi0JMHg0MmIzZDk3NiwgMHg3NGY2YjEyZiwgMHhiMjQ0NWI5MiwgMHg3ZWJlMGYxNiwgMHhmZGYxYWYwNSwgMHg2NDQ3MThkNiwKLQkweGNmYTNkMTg1LCAweDQxNmQwZjQwLCAweGYyZDQ4OGZlLCAweGU2MTM2ZGZlLCAweDZlNWMxMzQ2LCAweGUzMjkwZjUxLAotCTB4MGU2NWFiM2MsIDB4MmQ0NWVhMDMsIDB4MjBmNTk3ZDcsIDB4NjAzZTkwMmYsIDB4N2M3MTE3ZmMsIDB4Yzk0NjZmNDUsCi0JMHhhYzIzNWE1MiwgMHgxZDU5ZWEzYiwgMHhmOGI3YjM5NywgMHhkNjAzZDk5ZCwgMHhlYzU0ZGU5MywgMHgxZjYxNzJiOCwKLQkweGU4MTM2MTU0LCAweGJmYjQ2NWRmLCAweDg5NzBmMjgyLCAweDZkNGNiM2QwLCAweGUzYmI0NTQ5LCAweDc3NmRhMzMzLAotCTB4NjA3MWQ5MmMsIDB4N2Y0OGE4ZTcsIDB4NjVlYjFlZmQsIDB4NzE3NWQ4MzIsIDB4MzE5ZDc2NWUsIDB4MTdmNDk2ZTQsCi0JMHhlM2Y2ZDkzMywgMHg3ZGI1NmU3YSwgMHg5ZmU3OThhOCwgMHgwMzQzM2NjNSwgMHgxZDJjOWRhMiwgMHg4N2Y4MGFmZCwKLQkweDc4NThlOTg0LCAweDU4NzE4NmQyLCAweDQ0N2VmMWY0LCAweGMxNTZlYjI0LCAweGUxMWQwNzNhLCAweDhiYjFlM2Y1LAotCTB4MWIwNWFjYjcsIDB4NzdhNDdkZmQsIDB4MzM4MjQ3MGUsIDB4ZmI0MzAwNTAsIDB4Y2E2ZTc5NGMsIDB4NjIxMGY0ZTAsCi0JMHgxMWRkOTNkNywgMHg1NDYyYjAzZSwgMHgzMzdkMTc4NSwgMHhjMjBjN2JiNSwgMHg2NTNmZDM2MywgMHhkYjc2ODRiNywKLQkweGZjNTIzM2ZmLCAweDg2ZGU3ZmM3LCAweGZkN2ZlZTM4LCAweDE1MGU2MjRjLCAweDJkMTVkN2QyLCAweGI0ZDE2YmI1LAotCTB4ZjQzZGZlZWYsIDB4YjU0YzI5NmIsIDB4MDA3YjNmYTIsIDB4NzFjN2FkZjAsIDB4OGVjOTZhNjYsIDB4MDVkYjQxNmEsCi0JMHgwOWNjYjdkYSwgMHg4NmY3YjkyMywgMHhjNzQxY2I4NiwgMHhkZmRlMDA5YywgMHhmN2MxMDAwMCwgMHg2ODlkYzNhYiwKLQkweDU1ZDYwZGE3LCAweGUzODY5N2JjLCAweGRmMTIwNTU3LCAweDFiOWM2OGI0LCAweGM3ZmM3MTYyLCAweGIyZjhkMjA2LAotCTB4ZThlMWJkZmUsIDB4ZTQyMjdkN2YsIDB4OWVlNDk1NTEsIDB4Yzc2ZGYxOGIsIDB4ZWZjMzJkMTUsIDB4YTNiYjA0ZDUsCi0JMHg1MzVlYTFjYSwgMHg3ZmRhOWMzOCwgMHhlZDE5MmEwMiwgMHg1YjYwOWFjNCwgMHgwM2Q5Y2EyNCwgMHhmZTQ5OTRmZiwKLQkweGJhODI4Y2Q1LCAweGM1MTNlNDkxLCAweGQ4NjY2YTYxLCAweGZlYTE4MzIyLCAweDRkNGJjMGEwLCAweDk5ZmViM2FkLAotCTB4NGM5ZTdjNTAsIDB4YjhjNjBjZTMsIDB4ZTE4YmI2MWUsIDB4YzM0NWZjZTMsIDB4MDdhN2Q5ZmIsIDB4MDc1ZWQxYWEsCi0JMHhmMDg5MTQ0ZCwgMHgwMjdlNmRmYiwgMHhlM2MyZDJjNSwgMHgwODcxYzgyNiwgMHhjZmI3ZTE1ZiwgMHgxOTQ3NzIxNiwKLQkweGIzZTgzYjFmLCAweGZmZTMwZWQwLCAweDM3YTkyY2U2LCAweDVmZGQ3ZjIwLCAweDBkMDBlODYwLCAweDU4MjkzZWMyLAotCTB4ZjViZjQyNjMsIDB4ZDZlY2JiN2UsIDB4Zjc2MDVjODEsIDB4ZWNmYWRiNjUsIDB4ZGYxYzU4ODIsIDB4YmQyMWM3MjYsCi0JMHg5MzdlMmJlNSwgMHhmNWMyMzE3YiwgMHhkYjNkMWVjZCwgMHhlMDIzNzY0NCwgMHhiYTdhZWQzNSwgMHgxZmRmODBiYiwKLQkweGY4ZTNmZTgwLCAweGM3ZmRiY2E3LCAweDlmZTcxZDQyLCAweDY4ODc0ODBiLCAweDQzZGEwNjBmLCAweDRkZTVmZTcwLAotCTB4ZjZmMjlmOTMsIDB4NTkyY2U3MmIsIDB4NDA3MjQ0MTcsIDB4YTU1MmY3N2MsIDB4MTMyZmE5ZWQsIDB4YTVjODRlZDAsCi0JMHhmMmFlZjk1MiwgMHg3YTk5ZGNiZCwgMHhmZThhMTQ5YiwgMHg3MTg5Y2U4ZCwgMHgwZWMyMDVjMCwgMHg2N2I5ZDcyZCwKLQkweDY3M2UzZjIxLCAweGVmYTMwZmIwLCAweDQ3NGM1ZDE0LCAweDY2NzQzMTdiLCAweDQ3NWMwMGYyLCAweDBlNjBiYmY3LAotCTB4MDIzM2RiNDEsIDB4ODA1MDY3Y2YsIDB4NGMyYjllMjMsIDB4ZDQ0YzM3NDQsIDB4NDgxOGJmZWQsIDB4ZGYwNGI5ZjYsCi0JMHg2MmZhM2E0MSwgMHhkYTNiNjk4ZCwgMHgyZGFkNzY3MywgMHhkMWQyMDk3MiwgMHg0N2IyNDBmMiwgMHhjMWRjODBjZSwKLQkweDA0OTRjZjcxLCAweGZiY2UxZDEzLCAweGM4ZmJmMTc1LCAweGI0ZjI2NzZmLCAweDVhNjc5ZjQ0LCAweGU5ZjdiZGI4LAotCTB4ODVhZGQ5NGEsIDB4YmNjZDc3ZjUsIDB4ZjQyMjRjZjYsIDB4NDVmNTVhZWIsIDB4ZGIyODU2ZDYsIDB4MWEzNWZjZDcsCi0JMHgzNWJjZDFmNSwgMHhkZmIwZDNhNSwgMHhkMzU1YTJiYywgMHhlMjM3NGUxMSwgMHgzYTI1NzlmMywgMHg2ZTFjY2NjMSwKLQkweGI3NmNlMzUzLCAweDY3NDJiZTIzLCAweDM5NDFjYjVlLCAweGU0YjhiODNkLCAweDE3YzE4YzM5LCAweGM0ZWZkOWM3LAotCTB4ZGI2OTk3ZjUsIDB4NjUxZTEwY2IsIDB4OGQxNjdjNmYsIDB4ZjM3NzczZjYsIDB4YTE1YjdiY2IsIDB4MjdkOTMzNmMsCi0JMHgzNWIyYmY2MCwgMHhjM2FjYzU3NywgMHg1NWZmODRjMSwgMHgwMTdjMDZhNiwgMHg2NzFlN2QxZCwgMHhlNWY3YzFjZiwKLQkweGQ4ODlkYzkzLCAweDJkYTY5MmVmLCAweDU2YzZlMTA3LCAweDdkZGQ5YWRkLCAweDgwZmVhNWIxLCAweDQwNjA3ZTg0LAotCTB4YjI5NTE5NGIsIDB4ZDFlNzFkMzMsIDB4YTQ4M2I5MjksIDB4ZDgyMzg0MzgsIDB4NGJlZWIwMGYsIDB4NzA1MDc3NjYsCi0JMHhjOThkNDUyYSwgMHhlOWRlMjg5ZSwgMHg1YTlhM2ViYiwgMHg0MDNiODg5OCwgMHg2Yzk3NjJiZiwgMHgzMmRkMjAzMywKLQkweGViZTcxNmE3LCAweDllMThiZWRmLCAweDdjNWJiYjUzLCAweGZjNWNjNDVlLCAweDkzZDM3MDc5LCAweGFiN2QyMDc3LAotCTB4MzdmNzFiOTksIDB4ZDg0YWVlMmUsIDB4YmNiZmY4OGUsIDB4NmY0NGU1ZmYsIDB4YmNiZmQ4M2YsIDB4ZmQ3Y2JlN2UsCi0JMHgwMGJlOTA5NywgMHg4OWUwOTc4ZSwgMHg0MWFiZTkwNiwgMHg3NWZmZTNlNywgMHhmYTI0OGFlZCwgMHhmZDExZWY4MiwKLQkweDcyNGFlZDc0LCAweDhmOTJmMjZlLCAweDMwN2U0MjVkLCAweDA2NmIyYmFiLCAweDk1Y2RiZGQyLCAweDIyOTY3Njg1LAotCTB4OTVkZTk4MmYsIDB4YjI1YmZlNGUsIDB4MTVmZDFkMmIsIDB4M2NiMGRlNDUsIDB4NzczZDIyNTcsIDB4ZmRiMTEyYmEsCi0JMHg4ZDY3ZjQwMSwgMHhlZDE2ZWY5ZSwgMHhjNGRkYWE4ZSwgMHg1NTBlOGVlMywgMHg2YzQ3ZDYwNiwgMHhlZTMyYmFjNywKLQkweGI0OTdkNmNkLCAweDRmNTNlYjU1LCAweDlmZDZmYTcxLCAweDk1ZmNmMjEwLCAweDFmOGFiNDU3LCAweDgyYmYwYjJjLAotCTB4NWEzYzE0NTksIDB4NzA0NmZkYjgsIDB4ODE1NmIzZjksIDB4NTk1MWMzY2IsIDB4YmY4MDM3MTgsIDB4ZGNkZTY5NjIsCi0JMHhmYjg1N2U2ZiwgMHhkOTQ2MDdjZCwgMHgyYWFlNTBhMywgMHg2MDgxZjlmZSwgMHg1ZWEyYTdhOCwgMHhlYTU2ZjNlNSwKLQkweGU3ZmMxYzBhLCAweDRiY2ZlNmJkLCAweGY3YmUzMGEzLCAweDFmOGYxYzQ2LCAweGJjYjgxOTU1LCAweGI5NzAzMmFhLAotCTB4MTU5NGRhYjQsIDB4MzRhYmVmOGUsIDB4YTJhNmM3NjAsIDB4ZWUyYzcyYmYsIDB4MGUwNzhkNGIsIDB4MzY2ZDJhZTcsCi0JMHhmNTdkYzExMCwgMHhlOTQ3NWJhNSwgMHg2ZDk3NmY5MSwgMHhhNmY3YTUxYiwgMHg2MzlkYWE4ZiwgMHhkZTYwNTk4ZSwKLQkweGFkYWE3Njk3LCAweGI1MmE4NGI4LCAweGQ3YjQ0OWYzLCAweDJlY2E3NmFhLCAweDdhZjdhMzA3LCAweDY0YmZiNDFiLAotCTB4ZGIwMjcyM2MsIDB4ZTNjNmRkMmQsIDB4NjVmZjRhMTYsIDB4Zjk2ZGIzNWIsIDB4YjExZWYzNWUsIDB4NjliZTE3ZDMsCi0JMHhjOGZhZGYyZSwgMHg1MWZhZGYyNiwgMHhmZDA2NDViNCwgMHhiOTQ2ZmRlYiwgMHg4ZTYzZWI3ZCwgMHg3ZmNmZDZmOSwKLQkweDI0MmNmMGY4LCAweGYxZDkwMmMzLCAweGUzZjY4Y2E0LCAweGExOGU3MzVmLCAweGMwZWFmOTNlLCAweGY3OGEyMGMxLAotCTB4OGFkZjk2N2MsIDB4YWRiMmYxNzYsIDB4M2MwNzcwYmUsIDB4MzgyNzY4NGEsIDB4NzdhNDQ4NzYsIDB4ZmNmZTlkMGIsCi0JMHgwMzFmM2ZkMiwgMHg1ZjM4OTQ0NiwgMHgxNGRkMzdiMiwgMHgzYWFiNDczMSwgMHg5ZGY2ZmFlNiwgMHg4NmNiMzVjYywKLQkweDdmOTVhNTcxLCAweDhjNzJmYjhhLCAweDVkZGJkYzY3LCAweDBmZThiNDViLCAweDQ2Zjc3ZmY5LCAweDM2OGNjYjdjLAotCTB4MTYzN2M2MGIsIDB4N2VlZmU1OGUsIDB4ZmIyMjcyYjQsIDB4N2NkYmM3MDIsIDB4NzFlOTA3MzIsIDB4ZDIyNGFmZTEsCi0JMHgyNWY3MGJjMywgMHhkMzc0OGRiZCwgMHgxNGNlNzdiMSwgMHgxMmU1NjcyYSwgMHhjYmI4OTQzYywgMHg2ZGM5MTZiMiwKLQkweDJjNzliYTgyLCAweDY1MGZkYmViLCAweDZiNDVlZjMwLCAweGExZjEzZTc1LCAweGYzYmVjZGZjLCAweGZiZTM1YTU4LAotCTB4ZTFkMzU5N2UsIDB4NmJiZWUxYmYsIDB4ZGE0NWZlODEsIDB4YTZkODJlYTcsIDB4Mzk2YjhiZjMsIDB4YmQzYjQyZGYsCi0JMHg3ZTQ2MmJlOCwgMHhmN2RkNTE3OCwgMHg1ZWUyZmViYSwgMHgxNDNhYzQ0YiwgMHhlZTM5OTBmYiwgMHg2ZTRlYjg2NCwKLQkweDhlZGY4MjAyLCAweDNkNzIwN2ZmLCAweGM0ZDc2Y2M0LCAweDhkZDhmMjBmLCAweDk1YTlhYTNmLCAweGNjYTU3ZTExLAotCTB4OGUzOTg4ZmUsIDB4MjA3NzUxZmMsIDB4MGVhOTY3Y2MsIDB4YTRkMWIxZWMsIDB4NTc3ZDY5ODcsIDB4NzhhMDBlYjcsCi0JMHgwNjY3M2MwNywgMHhiNTk1N2U3OCwgMHhiZTdlYTE2NSwgMHhmMmIyNjhkYSwgMHg5NjViNTkzOCwgMHhhMGNiZWExOSwKLQkweDYwMmJmMDhlLCAweDEyYTcwNGQ1LCAweGE3MzJjYjk0LCAweGRkYjc5YjFiLCAweGIzYWRmNGUwLCAweDk3Yjc2ZTZhLAotCTB4MTE4N2RkYTgsIDB4OWRhY2M1MWUsIDB4YmQxZTIxZmEsIDB4YmFjMDk1ZGIsIDB4M2I0MTA5M2UsIDB4YjMzZmFmYzQsCi0JMHhkY2JjOWM1MiwgMHg5NWZjMjVhOCwgMHhmM2FmN2QzNywgMHgwYmY4YWY3ZSwgMHhjNGEyZmY4YSwgMHhmNDU3N2VlMSwKLQkweGI3ZDIwMDYwLCAweDM1ODdkODQ2LCAweDViN2I5ZDFiLCAweDk0ZWIzZDYxLCAweDAzMTZkZWI4LCAweDZiMDdhN2M5LAotCTB4N2IwN2JjYjksIDB4NTlkNzExMzAsIDB4ZDY4NTI1YjMsIDB4OGI2NGEwZmQsIDB4ZjZiNjg3NTksIDB4N2ZkMTNkMGMsCi0JMHhkM2Q4MzA0ZCwgMHg5MjQ3NjRhMSwgMHgyMzc2MDBiZCwgMHg3MzNkYWRkOSwgMHgxMmVkY2ViNCwgMHgzNzJlOGZkYSwKLQkweDRmMzVjMWRhLCAweGNhMDZmOGYzLCAweDlmNmJiMjQ5LCAweDUyN2Q5MDMwLCAweDI3ZGI4MzMzLCAweGE5YzI1YjM1LAotCTB4Y2E3MDVmZmYsIDB4ZjI1NzY4OTEsIDB4OTEzY2Q0ZjksIDB4OTk1ZGVkYzYsIDB4OGNlMTYzZjcsIDB4NjVmNjA3ZTYsCi0JMHg1ZTZiZGVhMiwgMHhiMmZmNWQ4YSwgMHhmMTExM2VkOSwgMHgyNmI3YWNhZCwgMHhmYjg0YzdiOCwgMHhlMDYwYWMxZCwKLQkweDdhZjllOTJkLCAweDAwN2FiZmExLCAweGZmMDcxODBlLCAweGM1NmJjYTUyLCAweGRkYTUwOTdkLCAweDFmNWNmMTdkLAotCTB4ZWRiMDRkNjQsIDB4NWUyOGVkMTAsIDB4YjE5YWFmOWUsIDB4YTc5ODI3ZTksIDB4NTJjYThjZjAsIDB4N2YwNWUzMTUsCi0JMHhkNzExMmQ5YiwgMHhjMzE2ZTVmZiwgMHg5OWQzYzQ2OCwgMHg2NzllNWM1MSwgMHgwNWYxZTA0ZCwgMHhkYjZjNWJmMCwKLQkweDVlMjJmZjcxLCAweGZkNzcxM2U1LCAweDYxNGVmOGE5LCAweGY1ZTY4NWJjLCAweDJmOGYzNjY1LCAweDI4ZjIzMjlhLAotCTB4ZGFiNjAzOGUsIDB4ZjVmNmZlODIsIDB4YmVmOWUzMGIsIDB4ZWYzNmJlNjgsIDB4OTlmYjhmZjgsIDB4MzYxNzAyOGYsCi0JMHg1ZjE3ZmI4OSwgMHhiZTkxMjQzZSwgMHg5YTI0ZjU4NCwgMHgxYmY1OWVhMSwgMHhiZTdmYzUwMywgMHhjMTQ3N2ExNCwKLQkweDI2NTFkMDA3LCAweGM3MjE2MWU5LCAweGM2N2U5MGMyLCAweDE5ZTdlODc4LCAweGE0MGUxNzQxLCAweGZkMzc4YjBiLAotCTB4ODNjN2QyZjgsIDB4MDllY2ZmMDIsIDB4MDRkNjlmNmUsIDB4MTNjZDdhZjMsIDB4OWZhMDM3MjksIDB4NjUwZmZkZmUsCi0JMHhmY2I1MzViZCwgMHgwMWRmYmZiZCwgMHhkZTM2YjA3NCwgMHg3NGZlOWUwYiwgMHg0Y2NlZDRjMCwgMHg3ZjM1ZmRlZiwKLQkweDhkOTZjODNhLCAweDU3ZTcyOGM5LCAweGI0NTYwMTQ4LCAweGZlMDg1N2M3LCAweDExODRiMTU4LCAweDBhYjE0NjNkLAotCTB4ODIzNWY5MDksIDB4MDA4ZjI5YjksIDB4YzcwMTgxZTQsIDB4YzAwZjcxZmIsIDB4N2YwZjhiZGMsIDB4YmNjZjRkNzIsCi0JMHgxNjc4ZGZmNSwgMHhhODlmNTNlYywgMHg5ZjY5ZjQ4ZiwgMHg3OWYxOGU2ZCwgMHg4YTQ0NTc3ZiwgMHg5NmM5ZmJjZiwKLQkweGE5ZjUzZTUxLCAweGI0ZmJiN2M5LCAweGRlM2FkYmJmLCAweGQ4Y2Y3ZWE3LCAweDY3ZWQzZWM5LCAweGQ0Zjg2NmQ4LAotCTB4YzZhY2NjNmQsIDB4ZWU1NGI3ZjksIDB4Y2RlMGZiMjQsIDB4OTdkYzU3NGEsIDB4NjVjM2Q3MDksIDB4M2VjOGVlOWMsCi0JMHhhNmIxOTU4YiwgMHhhYTY3MDdiYSwgMHgwZGM2MWU4MSwgMHgwNjIyYjIzOCwgMHhlZGUzODdlYSwgMHhlNDc1MWViYywKLQkweGIxOTk4YzZhLCAweGYyMTdlMmI3LCAweDU3MjM4OGZhLCAweDM0N2VhMTYzLCAweGRmYWYxMTdlLCAweDdmNWZjOGMxLAotCTB4NGNmMTdlMjcsIDB4MTVjNTJhNDcsIDB4NjY3ZTIxOGYsIDB4OGEzOGFiNWQsIDB4YWI0N2UxNmUsIDB4NDE4OTJlNjcsCi0JMHgyNGM5MmYxZSwgMHg2N2VjYWUzOSwgMHgzZjYzMTNkYywgMHhiY2FjZmM4NCwgMHg4ZDlmZGE1NywgMHhhZmJiZmRlNywKLQkweDdkZGZmOTcwLCAweDIzNzdjYjg1LCAweGZlODMyOTFhLCAweDMyZmMxMmZkLCAweDBlMDRmZWZhLCAweDZmNDEzNjIyLAotCTB4YTYyZmZkYTQsIDB4OGJlYTVjZDcsIDB4OTRmYzgzNDMsIDB4M2M2MThjNmMsIDB4ZjAxMmE1YWYsIDB4ZDM3MDgwOWQsCi0JMHgzNGFlZTk1MywgMHgzMmE0Nzk1MywgMHgyYmI3Y2E4MiwgMHhlMDFmMmMyZCwgMHg0Yzk5NWFkYSwgMHgyYjRhYjFlNSwKLQkweDM5NWUzZjNkLCAweDJiZjdjYTk2LCAweGE4OWU1NDZkLCAweGFkYjJhNWNjLCAweDA5NGE4ZjMyLCAweDI4NzlhOThjLAotCTB4Mzc1ODc2M2YsIDB4MGUyZTEwNjgsIDB4YmQzOWYwNzUsIDB4YzZlNTJmMjcsIDB4Y2VjZDRjNzIsIDB4YzY4NWY4MjksCi0JMHg1ZjZjMTg2ZiwgMHgzMWRkOTNjNCwgMHg3MTcxNGNjNCwgMHhkMzViYmNmMSwgMHg3M2QyMjJmMywgMHhjMTY2MTVkNSwKLQkweGE2YzNiODdjLCAweDlmYjQxNmQzLCAweDQ0ZjUzMmFiLCAweDliNGY1MmVmLCAweGI4ZWJlNTA1LCAweGJhYWY1ZTBjLAotCTB4Njc1MTY2ZDIsIDB4ZmRlYTNhZjAsIDB4MjhkNzYwZWUsIDB4YTU1NTBiZDQsIDB4MTg5YWViNDYsIDB4NDQ4ZWVmN2MsCi0JMHhhMTU3MTk3ZSwgMHgzODdmYTJiNSwgMHgzZTY3YTdhOSwgMHhhMzM4ZjFmMiwgMHhmNDdhODJkNiwgMHgyZGY1YTliMCwKLQkweDczY2EzZGYxLCAweGRjYzJiYmE5LCAweDM0NTdkYzJhLCAweGUyY2M1OWI0LCAweDdjMGUzODNiLCAweGMxZjUwNjM3LAotCTB4YmJlMTg3YjgsIDB4ZWQwNTZlMzQsIDB4Njc5YjhkMDcsIDB4ZTRhZWZiZWMsIDB4MGZmZDVkZjcsIDB4ZTRhMjc3N2YsCi0JMHg1ZWY4ZGRmNSwgMHhmZjNhNmVmOCwgMHhiYmU3YzVhZSwgMHhlNWVjOTk2ZSwgMHgwZmIyNmUyYiwgMHgxMWFkODNiYSwKLQkweGZhOTU1ZjI4LCAweDRhOWY3YzI0LCAweDMzZDI0MjcxLCAweDE5NmUyY2UzLCAweGU4ODdlZmY3LCAweDA3MGQzY2I4LAotCTB4YTVlMGQyZjMsIDB4NjI3ODk1NmYsIDB4Njc1ZjJmNWQsIDB4MDhiYmE1NTcsIDB4YjA5MjZhZjksIDB4NTk2OTI2NTcsCi0JMHhhOTkzYzIzMiwgMHg5OGZlMjgwMiwgMHgxYWQ3N2YyZCwgMHhjZGU1ZjUwNSwgMHg5ZGNjMjhkMiwgMHhkYmNiYTQ5OCwKLQkweDlhYWU3ZTQ2LCAweGNhMTYxZGNiLCAweGI3NTMzMmY1LCAweGVkMGNiZTE1LCAweDU5NDU4NTRlLCAweDQ4NmFkZjMxLAotCTB4MGYxNjAxYzQsIDB4M2NiYjM4NzIsIDB4ZmFmNTE1MzcsIDB4ZDRkZjkxMjksIDB4NDg0ZjY0MWMsIDB4OWJkYzc5ODAsCi0JMHgyNTRhNzIwYSwgMHhkOWY3MTk4OCwgMHhkZTQ5MDM3MiwgMHhjYTRhMWY3NywgMHhhNjdmN2I0NCwgMHgwMTlmYjJjZSwKLQkweDNjMjZhNzFmLCAweDcyMGQ1MzMzLCAweDRiMDBlNjcxLCAweGZhYzY2NGE2LCAweGI3MGY1ZTM2LCAweGJkZTA5N2VjLAotCTB4NzMzMzNkOTksIDB4YzFmZmVkZDIsIDB4NDkzNGZhZmUsIDB4MzgxZjk3ZWQsIDB4YWRmODAxMzYsIDB4YzhiMmY3MzQsCi0JMHhmYjIxZWM1NywgMHhlNDk4YzdmNiwgMHg3N2UyODgzNCwgMHg5ZWM3YTQ2ZSwgMHgwM2QyMjZjOSwgMHg4ZTViOGYxOCwKLQkweDkyZDUzYmYyLCAweDM1YTJlZDg5LCAweGZmMDg0MTNkLCAweDk0ZDRlZmVlLCAweDgzMmQwMjNmLCAweGUzOGFmM2VlLAotCTB4ZjNjMmQ4YmMsIDB4ZTNmOWZjNGEsIDB4YWJkNzAyNzIsIDB4OWYzY2YxZTUsIDB4YWY0MjJjYTksIDB4NGFlNWIyYTcsCi0JMHg4ZjdjYTMwZSwgMHgzZmY0NzhiYywgMHg1N2VkZWFjMSwgMHgwMjc3ZmViZiwgMHg1OThlMWZkZiwgMHg0N2YxZTVhZiwKLQkweDY1MzBhMTE0LCAweGVhNTMwMDViLCAweGE5NmJjYzBlLCAweDMxNDAyNDdkLCAweDRlMDA2ZDQ2LCAweDU0N2VjNWE2LAotCTB4MjRjZGZhNmYsIDB4MWI3YjRmYjUsIDB4NjdiY2Y3YjYsIDB4ZDI5ZjA0MzYsIDB4Y2Y3ZWE0YmYsIDB4OGJjNmQ2NmYsCi0JMHgyY2JkMjFlZiwgMHg4MjVjNGU2NSwgMHg0ZGE5ZmViZiwgMHgwYmZjNTEwYywgMHhhMTBiZjNjMiwgMHhlMzhiZjIwNiwKLQkweGEwNTdhMDY1LCAweDE3NDBhOGNmLCAweDBjZWIzM2M1LCAweGRjYzE3ZTljLCAweGM1NGViMmEwLCAweGMwMDM2YmRmLAotCTB4NTBmYTg1ZmUsIDB4OWEzZWUzYTgsIDB4MjJiZWQxM2IsIDB4NjdmNTEwNzEsIDB4ZWYyZmVjNjYsIDB4MjI5MWZlYTUsCi0JMHgxZjc5NGU2ZiwgMHgxOTc5NTE4ZSwgMHgwY2RhZTlmMywgMHg1NTkzOGU1OCwgMHg0ZTRkYzJmZCwgMHhjNDZiZmYxYywKLQkweDgzYTU1Nzc3LCAweDJmZDJmNTlkLCAweDJiNDE4MTVkLCAweDg2NTRmMWJkLCAweGZkZGU4ZGZkLCAweGE1M2Y1MDI2LAotCTB4ZmRkODI5N2YsIDB4OWM5MjA3NjcsIDB4OGQyOTdhMjYsIDB4MmIzZTUxNTcsIDB4NGI2ZmNkZjgsIDB4MzZiMGQ3NjgsCi0JMHhhNTYxZWEyZCwgMHhhYjkwNjlkZiwgMHg0MTBmYmRmOCwgMHgwOWY5NjJjZSwgMHhjMGIzZDdjOCwgMHg5Y2E5N2Y5YiwKLQkweDk1YTdlNTRkLCAweGE2N2U3YTc2LCAweGY2Y2E4MGIyLCAweGZlN2EwYWNhLCAweDJhNGFlNTc5LCAweDY1MzVjZDY3LAotCTB4Mzc5NDlmMjAsIDB4YmQ2NzY2YWQsIDB4YTVkNGJhZTgsIDB4NGJlZjdiYjEsIDB4M2ZkZjFlOWUsIDB4ZTA0YWVjYmQsCi0JMHg5OGU5ZGQ3NiwgMHg5NWJiZGZmZSwgMHhiYzcyNzdmNywgMHg4MTdkODM3NSwgMHhkZmQwMjRmNiwgMHg4ZGM4NzM1YSwKLQkweDEzNmU4Y2VkLCAweDM3N2FiZmRmLCAweDc3NzNkMzg1LCAweDI1ZDdhZjI0LCAweDUzNmVhODY4LCAweGZmZDhhZGIxLAotCTB4ZDEyZDE0ZGQsIDB4YzY0NDhhZWIsIDB4MmM3ODg5ZGIsIDB4ZGY4ZDFmZDAsIDB4M2U1NGU3MDcsIDB4MTljZWQyOGUsCi0JMHgyZmVkY2FhZiwgMHhmMjI1OTg0ZiwgMHhlODlmNDQ3NiwgMHhjNjNkMjAyZiwgMHg5OTY3ZDE3OCwgMHg5ZmQzZTg4NSwKLQkweDM5MTM2YTJlLCAweDM4ZWJjNGRmLCAweDJlYTE0NWRkLCAweDcwOGM3ZGMyLCAweDBhNzMxMzgzLCAweGRjMzZiZTYwLAotCTB4Mzg5M2FmNTcsIDB4OWY0NzVlM2QsIDB4NWQ5ZmVlMmEsIDB4MGUzMDlmNDcsIDB4NWNlODA5YzEsIDB4N2VjN2YyODIsCi0JMHhlZjk0YTNmNCwgMHgwYjZmYmUwYSwgMHhlMDhjZmQzMywgMHhhMzMxYTJkYywgMHgwY2IxZjhiZSwgMHhhYWZlYzU4MCwKLQkweDBmOTgxM2RlLCAweGIyNjYxNTFlLCAweGY2NDg5ZWUwLCAweGZlOGFjNmUzLCAweDEyM2ZjN2U0LCAweDZmZmQ3ZGI4LAotCTB4MWY4ZmJmYWYsIDB4ZGQ3ZmQ3N2QsIDB4ZDA3ZWM1YmEsIDB4ZTQ5YmFlYWQsIDB4YTQ0YmNhMDksIDB4YzNlNDdlOWYsCi0JMHgzZTQ1MDRhNSwgMHgxMzkxZmE3MCwgMHgzZjUwZTc2ZCwgMHgzNTA2NGI3NCwgMHgwZGJiYjNjNiwgMHg4M2FlMmU5YywKLQkweDRmYTcwYTViLCAweDA1NmEzZTg1LCAweGJhZTE0NDdkLCAweGU5ZWIzY2UyLCAweGRmODA3ZjliLCAweGNhMzE5NmZhLAotCTB4YTNjN2YwZWIsIDB4ZDZiYzU3MjIsIDB4MmYwNGY3ZjUsIDB4ZDgxOGMyNzksIDB4NDg3ZmQwMTcsIDB4MDlmNjkxODksCi0JMHgwOTlhMjQ1NywgMHhjZTgzZGQ3ZSwgMHg2ZjAyZGZjZiwgMHhlMjdhMTU5ZiwgMHhhN2RmMTU3OSwgMHhkZjc2ZTQ1MCwKLQkweDMwNWU0OTczLCAweDllNDdkNTIzLCAweDdhMzNiNDMzLCAweGJmODhlOTBlLCAweGYwNTYyYWRjLCAweGY4NTFmYTFhLAotCTB4NzBiZjJmMjksIDB4ZWY1M2MwYWMsIDB4ZWUxNTRjZWMsIDB4NmI3ZDc1YmYsIDB4Y2QxZTUwNzQsIDB4NjgzMzllZTAsCi0JMHgwNTZkNzQ0NywgMHg3ZmZjODAwMywgMHhmNDA5MzRkYiwgMHg4NzhjMTJkOSwgMHhhZmJlMzA1OCwgMHg4YmU4ZmRhNywKLQkweDI0YjIwZjYwLCAweDcyYmFlNzY4LCAweGYyOThlZDA2LCAweDA3YTY2NGU3LCAweDdkY2ZjOWQwLCAweDY1ZTkwYjMzLAotCTB4OTk4ZDIxZTksIDB4NGZhZDlhZWMsIDB4M2I3YTQzMWQsIDB4NTA1OTI4ZDcsIDB4YzIzNTc3ZGYsIDB4YjM5ZjcxYjIsCi0JMHg0MDM0ZTRjNiwgMHg2M2E4MWNmYiwgMHg2NTNiNjVmYiwgMHgwMzUyMjUyNywgMHgxNGZlOTA3YiwgMHgyODZiM2JkZiwKLQkweDc3N2I0NThiLCAweGEzM2Y3M2UyLCAweGI1YTVmOGZkLCAweDcxODcwYjEyLCAweGEyYmFkYWRmLCAweGU3ZWExMjM1LAotCTB4ZjlmY2YxYjYsIDB4N2ZjZjAzMmEsIDB4NmIzNzkxY2YsIDB4YjQ3YzYzMDcsIDB4MzEyZjNmOTYsIDB4N2JmZTUwZTYsCi0JMHg3NTY2MmVkMSwgMHhhZjY1YmM2MywgMHhhNWYzZmM4OSwgMHgxNTc5YmUzNSwgMHhlYjdjZGIwNSwgMHg1Y2JlMjI4NSwKLQkweGJjZmJlNzU0LCAweDRmMzdjMWE0LCAweGM4YTI0YzYzLCAweGEzNjE0OGMzLCAweDEzNWE1ZTI4LCAweDIyODA3NjQyLAotCTB4NzdlNDZmNGYsIDB4Mzk3Mzk2ZDksIDB4NjFkN2Q4YzksIDB4MGY5NWVmMTgsIDB4YjlmZDEzN2QsIDB4ODg2N2Q3OTEsCi0JMHgyZmQ0MDc3YSwgMHhhMmYxYzM3ZiwgMHhjOTRjYTVjMCwgMHgxOTY0ODgyYiwgMHgyM2NjMGNhZSwgMHgzZjcxOTgzNCwKLQkweDhiZjlhY2FhLCAweDczZjk4NjIwLCAweDg5ZDNlZDAxLCAweDI5OTc1ZjNmLCAweDkzNjM2YWRmLCAweGE1NjlmYjRjLAotCTB4MzA5Nzg2MmQsIDB4ZmY2Y2IwY2YsIDB4ODRjNWFkNDksIDB4ZWM4ODdmNzAsIDB4NjM5OGJiODAsIDB4NmU4YmZhM2QsCi0JMHg2ZmU0NGE5NSwgMHg4ZGRjNTFiNywgMHg1Mjk2N2FkOSwgMHg2MGQ5YmI3YywgMHhmNjVhZmQ0NiwgMHg3M2FkYzdmYSwKLQkweDYyNWZiZWIxLCAweGQwZTNjNDA2LCAweGE1OTNhMjc2LCAweDVmYjRjOWNmLCAweGM5ZjJkMGNkLCAweDhjODlkMGYyLAotCTB4YmIzYzQ1NzgsIDB4Y2YzZWQwMDYsIDB4ZTIzYmM0MzIsIDB4ZTc4ZWYwMTksIDB4MzRlN2U0MWIsIDB4YmJhNWY3ODQsCi0JMHhiNTVmN2E2NCwgMHhlZDhiNGFiNSwgMHg3ZTM5MzljZiwgMHhjOGU3YmMxNSwgMHg0NWNmMDhhYiwgMHg0ZTdjNzAyZiwKLQkweDk5ZmVhZTdjLCAweDVkODNhNDAwLCAweGRmNzNiMjFhLCAweDc5ODM3ZTgyLCAweGQwM2ExZjNmLCAweDc3ZTNlMjFlLAotCTB4ZGYxNDRiZDUsIDB4NjY4M2EzZWEsIDB4ZTAxZDFmNWQsIDB4MDc0NjZmM2MsIDB4NjdhNDlmYzAsIDB4MDYwNzQ2NmYsCi0JMHg0ZmU0MTc5NCwgMHg4YTFhM2I4ZiwgMHhmOGNmZWRmNiwgMHg5ZGI4OTQ3YywgMHgxZjliOTcxMiwgMHgxMGZhNTlkMiwKLQkweGQ4ODg0ZDM0LCAweDFiMmNmNjQ3LCAweDA4OTU1ZjYwLCAweGU0Y2NlNjcyLCAweDc0ZGMyODBmLCAweDUxZWVjYTZhLAotCTB4ZmYwMzRmOTQsIDB4YmY5NDYxZjQsIDB4ZmI3Y2YwNDcsIDB4NDQ0YjdmZTcsIDB4MzMxZGQwNzksIDB4MThjMWRiNjMsCi0JMHhhZTA3NjdjMiwgMHg5MDM4M2JhNywgMHg5MjNkZDNlYiwgMHgzYWU3YTI1MywgMHg5M2JlMGViNywgMHhmOTE1NzIwZCwKLQkweGEzYTliZDkyLCAweGEwZjc0M2Y4LCAweDg5M2UxZTA3LCAweDE4NGY2OGZiLCAweGM5MmU4OGFkLCAweGUyYmFmZGM2LAotCTB4YzEzZTc3OTYsIDB4Y2M2YjI3ZjgsIDB4N2RmOGY5YjYsIDB4NDYyYjJmYzIsIDB4MzdkZjEwYmYsIDB4YjVlODVmODAsCi0JMHgzZjk5MjhkZiwgMHg0YmJmN2VhMCwgMHhjYjc1YTU4YywgMHhmMjU2ZWIyYSwgMHgwNTk4ZWFkZiwgMHhlNWViOTVlZCwKLQkweGFmZjkyMzNmLCAweDY4NmVhZmM0LCAweDAxZTlmOTlmLCAweDc2ZTdmYzhmLCAweGYxMGM3MzE5LCAweGU1YzBiNzNiLAotCTB4ZjcxMTMyZDMsIDB4NzFjOGZhM2QsIDB4Njc1YzQwZjUsIDB4NTMzNzNmMWQsIDB4Mjk3MjAyZDgsIDB4ZjhhNWNlOTQsCi0JMHhkMTMyOTdjOCwgMHgxOWQyM2NmZSwgMHg0NzJiZjFjMCwgMHhlYzk1MDFjNSwgMHg5ZDNlNDcyZCwgMHhlYzk0ZTM4NCwKLQkweDIxOTRlM2UyLCAweDk4MWMyMGZkLCAweGRjMDA5OWZiLCAweDI4Njk3MDI3LCAweDg0YzQ1OTFlLCAweDU5MzI2OTVjLAotCTB4ZTQ3ZTk2ZGQsIDB4N2FlZDVkNDgsIDB4ZTlmZDdmMzQsIDB4MzdlYzE4YTcsIDB4MWQzZjg0NWMsIDB4YjZmYTM1OTUsCi0JMHg5N2NhMDNmYiwgMHhkMjVmMjQxMSwgMHgwNzdmNDdiZSwgMHgyM2QzMjM2OSwgMHhkNGU1YjI0NywgMHhmNWFmZTgwMSwKLQkweGU0MDBjYjMyLCAweGI5ZTkxYmUzLCAweGRhYzBhZGE0LCAweDM4YTZlMzVlLCAweGIzZWQ0Y2Y1LCAweGE5ZjY2MTVmLAotCTB4N2MyMmI5YTcsIDB4YjI2YzhmZGEsIDB4ZTUxZmJjZjgsIDB4M2Y3OWY2NGUsIDB4YTdkNTk4ZTYsIDB4ZDYzNmQ5OWUsCi0JMHg5ZjZkZmRhNywgMHhiN2VhN2NkOCwgMHhiNGZhZTdiNywgMHgzY2FiZTNiZiwgMHgyYTZmN2E5ZiwgMHhmNjA3ZTdhYywKLQkweDkwOGFlZWVmLCAweGI2NGZkYTdjLCAweDA3YzY3YzE4LCAweDk5ZjA0ZTBkLCAweGYzZWMxYzlhLCAweGUxYzhkN2JjLAotCTB4ZWY3MWEzNzQsIDB4YWI4ZWZhYjYsIDB4OGNmN2I5ZjgsIDB4ODY3ZjFkZjUsIDB4NWJkYzc3Y2QsIDB4ZDAwZWMzYzUsCi0JMHg0ZDEwNmE5YiwgMHg2MjhmNDEzYiwgMHhjMDI1NGFmOSwgMHg4NmYxZWMxZCwgMHhiZmFhMDhjYSwgMHhkMmExNjk1YSwKLQkweGNmNGM5OTU1LCAweDUyYjRhYjVmLCAweDJjNzJiMWJkLCAweDdkODAwZmQ1LCAweGIwMjZmNThmLCAweDFkN2NiMWY3LAotCTB4N2U3YzdjZWMsIDB4OGFiNTc4MzMsIDB4ZGYxMzFlZWYsIDB4Y2JiZTJlM2QsIDB4MDc2ZTE2ZDgsIDB4ZWYyZTA0ZGMsCi0JMHg0NDI3ZmU4YiwgMHhhZmVjMzZmZiwgMHg2OTYxZDBmMSwgMHgxYWVhYTY2ZSwgMHg5MGY4ZWRmMCwgMHgyZjhjNWEwYiwKLQkweGU3Yjc5NmQ4LCAweGYzZGY5ZmEwLCAweDAzYjZjY2FlLCAweGYzYmIzMDVmLCAweGVhMjg2NTU4LCAweDFmM2M4MWE5LAotCTB4M2RlN2FmMjEsIDB4ZWQ5NzE3OGMsIDB4ZmVlMzMzOGYsIDB4M2ZhNmM2YzcsIDB4NWRmN2MwOWQsIDB4MzNjNTMyOGQsCi0JMHgxMTdkMzQ4ZSwgMHhiYTVjZTM4NCwgMHg1MDNlY2MwNiwgMHg5N2E4MzdlOCwgMHhmYWEyNGRmYywgMHg3OThmNzgyNiwKLQkweDgyZjc5M2Y4LCAweGNiN2E0YjYxLCAweDUyZWI3YTQ1LCAweGQyNzc1MmJjLCAweDg2YmM4ZGY5LCAweGRhNzZkYWJkLAotCTB4ZWY0YmRjNTcsIDB4ZjViZTA1ZGYsIDB4ZDZiM2JmNzksIDB4ZGIxOWJkZTcsIDB4ZGFiNjdlZTMsIDB4YzVmNzdlNDksCi0JMHgzNzNjNjUyNiwgMHg5Nzg5MmZiNSwgMHhjNWQyM2NlOCwgMHhjN2FkNmY5ZCwgMHhiZGQyYmU3YywgMHgzZWUyMDcwYiwKLQkweGM5YzM3MTYwLCAweDAwM2ZjNWIwLCAweDc2MDdjYmZmLCAweDJmNWNhMmE3LCAweGY5YzU5NjZkLCAweDY5NWUzZTIzLAotCTB4ODkxZTcyYjMsIDB4N2UyNGJmY2YsIDB4Y2EwODRlNmYsIDB4MjE4OTA2ZWQsIDB4NmFiMTJlN2EsIDB4NmUyYThmY2EsCi0JMHgzOTQxMmZhYSwgMHg1NzNjOWM1YSwgMHg5NzIxZjE0MywgMHgzYzAxZTIyYywgMHhjY2M0YjBkZiwgMHhiYWU2N2RiOCwKLQkweDM1ZTc4NDFhLCAweDNhM2FlMGZmLCAweGJhODVmMzFkLCAweGMyMGFkZTViLCAweGY5ZTM3NmVmLCAweGRlZmMyZjEzLAotCTB4ZGNlZGM0OTMsIDB4ZGZiODkyN2IsIDB4MmRmMWE5NzQsIDB4ZDFiOTNmM2EsIDB4YmI4NzE2ZjUsIDB4M2ZlYjRkZGEsCi0JMHg1MGRkZWEyMiwgMHg2NDliYmMxMiwgMHgzNWUxN2Y1YSwgMHg4Y2EwZjA5OSwgMHg0YzkyNjBmNywgMHg0YTZlNGRlMywKLQkweDRlYmFlMTMwLCAweGYyZjdmOGI5LCAweDc5ZmMyYzkzLCAweDljN2NjMmZjLCAweDM5ODhmMWZmLCAweDk1ZDkzMjk5LAotCTB4M2RkZjJlM2MsIDB4Y2EzZDZhN2MsIDB4ZTgwZmNjNTEsIDB4MDQ3YjBmY2YsIDB4YjVmOTg1YzcsIDB4NzdjNjNjOGEsCi0JMHgwZWI1ZjdlMywgMHhjZjFmYjgwNiwgMHg3NDhhMzgxZCwgMHgyNzRmZTI4MCwgMHg0NzNkZmI3MSwgMHgzZDQ3OGY2YiwKLQkweGExNjhjYTcxLCAweGRjOWFmODM4LCAweGY3ZTIxMzM4LCAweDNjZjg5NjA4LCAweDU3ZGEyNWY3LCAweGRmZTQ2YTI4LAotCTB4MGI2ZTY1M2IsIDB4ZDUzYmJhNDIsIDB4M2I0NjQ2MzgsIDB4NDBhZjE5NDYsIDB4YmU4ZmI3N2MsIDB4MjBlNmYwZmIsCi0JMHg2YjM4MTUzYywgMHgwNzhlMzg4ZCwgMHg3ZTc5ZmM3ZiwgMHg3MWU2OTk5MiwgMHgxNjcyNzlkYywgMHg5MmE3NGJkYSwKLQkweDY4Y2VjOTAzLCAweGZjZmRmMmQ1LCAweGVmNmUwNmUyLCAweGFhODk2YTllLCAweDViZjZiZDk1LCAweGJhM2UwNWYyLAotCTB4ZDc4NDU1OTMsIDB4Njg4ZDI2YWUsIDB4Zjk5ZWI3MzcsIDB4N2M3MGQzYjQsIDB4YzdjZWY5ZDUsIDB4MTI3OGVjZWMsCi0JMHgxNzkyZWNlZCwgMHg1NDkzM2E2NCwgMHhjMzA4YTlhMiwgMHhlNmRmOWZmNSwgMHgwMTAyYmYzYiwgMHgzYjhkMTJlNywKLQkweDVlOGJjYzJjLCAweGY4ZmI5YTRiLCAweGRlNzQ0OGM2LCAweDg1ODlmMGFjLCAweGYxZTBhOWYwLCAweGM3M2YzMjU0LAotCTB4OWY4MjJhNzIsIDB4NWJkOTJhODMsIDB4ZDFlZDc0NGYsIDB4MTlhZTNjZjcsIDB4YmYzYzVmZjUsIDB4YWU3ZTY2ZjYsCi0JMHhmOTc4MGY2MiwgMHgzY2ZkMGM0OSwgMHhhNjVjNmU0ZCwgMHhmN2EzZDYyYSwgMHhiZjZkMTM3YiwgMHhmZTg0MWE0YiwKLQkweDg1ZjkxZTUzLCAweDhhMjZlYzQwLCAweDNjN2RhMDhiLCAweGE3ZWZlNTAwLCAweDdiNzdlMGNmLCAweGQ4NzlmOTFiLAotCTB4MTE3MzdkNTIsIDB4NWFmNWZiZWUsIDB4YmU2MDQxODEsIDB4NGUzNGRiYmQsIDB4ZDExOGNmZTEsIDB4ZWMyYTVkNGUsCi0JMHg3YjE2ZjNkNCwgMHhhM2ZiOGM5NiwgMHhhZWI0NTVhYiwgMHg4OWQ5MDY5MiwgMHg0MjVkOThmOSwgMHgxYmRlNWRkZSwKLQkweDY5ZDIwZjczLCAweDhjZDkzMWM5LCAweDU3NDRjZGZlLCAweDY1YzdhZmNjLCAweGZiMjZkZTkwLCAweGVkYzVjY2FlLAotCTB4MTI5ZGIyZGMsIDB4N2Q4YWI1ZDksIDB4OGJlYzJhNTEsIDB4M2Q4ZWMyNzMsIDB4ZGI4N2JhYjcsIDB4ZjYyNDg3YjcsCi0JMHhjZWM3OGM1NCwgMHg0NTc2MTUyOCwgMHgzZDc5YmNhOSwgMHg5ZmZiMmJlNiwgMHgzOTZjMmRhZiwgMHhmZDg5ZTc0YywKLQkweGVmMTZkNWNmLCAweGJhOTdhZGY0LCAweGJmOGFlYjdjLCAweDlmNTI0ZWY3LCAweGZlODI5MjdmLCAweDk0YTdkODA5LAotCTB4YzBhOWYxMmYsIDB4YWNhZmUyYTcsIDB4MjM4NmIzNDgsIDB4NWI1NDZmYmYsIDB4MDM3MTI4YTYsIDB4YTFmOTU3ODQsCi0JMHg2ZjM4ODU3ZCwgMHg5NTgwNDk2NywgMHg2Zjk1ODdmYywgMHhiZmJiNWMxMCwgMHg3NzQ5N2VlNiwgMHg3N2Y1YTMwNCwKLQkweGVlZGYwZTMzLCAweGU1ZGY0ZTI2LCAweGM3YTljOTFhLCAweDcwMjNhOGZlLCAweDVjZTRiZDNjLCAweGEzYTg3NjhkLAotCTB4MTJlNDg4MzcsIDB4ZjdjMWUxZTYsIDB4ZmVlMWNmOTYsIDB4YTM2MzBkYTcsIDB4ODU1YTk1MzAsIDB4MjlmZDE0MGYsCi0JMHhhOWRlY2RjZSwgMHhiZDgzOTc2ZSwgMHgyNDk1YzNlNCwgMHgxMjRlNzc2ZSwgMHg0YzJiNDhmOSwgMHg4MzVmZDI1NiwKLQkweGMxZWJiOWM1LCAweDBmNmY2ZTdhLCAweDUzNTczYjU2LCAweDY2MzFmZTNjLCAweGYyNzE0MzU5LCAweDRlOTBhMzAzLAotCTB4ZjE0ZWFlMzAsIDB4MTIzZDU1ZmYsIDB4ZWIxZmMzYzUsIDB4MDYzZjkwOTEsIDB4NzkxMWFkOWIsIDB4Zjg0OWY1NWUsCi0JMHgwNzYzZDUzZSwgMHg0OGY2MzMwYywgMHhjN2JhOWRmOCwgMHhkNzNhZjg5NCwgMHg2NmQ0MzNlZiwgMHg4OTRmY2UwZCwKLQkweDg3ZmIyOTNiLCAweDczOTRmY2NhLCAweGYzZTdmZjA4LCAweDhjZmNjMzMzLCAweGJlMDFmOTllLCAweGFiZmY2MDA3LAotCTB4MGZiMjU2MTksIDB4ZTcyODY3YTIsIDB4MWU0ODJhZmQsIDB4MDRiY2YwMjgsIDB4NzAwOTNlZjQsIDB4YTQxZDMxODUsCi0JMHg4NzZkOTI5YiwgMHg0MGZlNzg3MywgMHhjYmRmOWQxYiwgMHhjOGViZTIwOSwgMHgzOWUzZjkxMSwgMHg5NDFjYmMwMSwKLQkweDJiMzVmMWNjLCAweDllOGJjNzk5LCAweDM3MjJhNTEwLCAweDg1YjY0OWRmLCAweDJmYjk0MzI1LCAweDM5MzIyZjM5LAotCTB4NjJjZTczZDMsIDB4OWNmYzA3ZjksIDB4ODdiY2JmODUsIDB4NTc0ZjQ0ZTcsIDB4ZWU1MTBmODEsIDB4MzI0MmI0ZmQsCi0JMHg2M2Q4ZmJjNywgMHhmOWNhYmY5YywgMHgyYTNlM2VhMywgMHhlMjI1ZTBmZSwgMHhiNWIwZTYxMywgMHg5ZTYxODcyNSwKLQkweDA1ZWZlNzAyLCAweDc4ZTYwZDJiLCAweDE3MjhiZTJmLCAweGM1YTYyMDdlLCAweDcyOTdmZWUyLCAweDVjYzBiZTRlLAotCTB4ZWM0MGU3NDgsIDB4ZThjY2MzMmIsIDB4OTdjYjk1OTcsIDB4YWZmZjVlMjgsIDB4OTM3OTVkZjIsIDB4ZTA2ZGRkNmYsCi0JMHg0OTM2ZWZmNCwgMHg5ZWRjZmZlNCwgMHgxM2NmNjdkYywgMHhmZTBiNDYzZiwgMHhiNDRiYjVhOCwgMHg5ZGZiNWMyZiwKLQkweGU2ZGJjNzlhLCAweGJiNWYxNDQ5LCAweDdjZjIxZTFmLCAweDYwYWVkMTdhLCAweGRkOWJlNTNjLCAweDM3ZGE1NTBmLAotCTB4ZmIxNTA5YWIsIDB4OWZiNGExZDYsIDB4Zjc1ODlmNzcsIDB4ZTJkZjIyZmQsIDB4ODMxNWM2YTgsIDB4YTVhM2EwZjEsCi0JMHgzZjhlMmI3YSwgMHg3ZjY4Yjk4NywgMHhhMzZiMWU3ZCwgMHhkOTYwNzRmMiwgMHhlZTBkMzc3ZSwgMHhmY2ZlOGExOCwKLQkweGM1MWQ3NmM3LCAweDZlZDc2YWExLCAweDRmNWNhMTM3LCAweGI4Y2Q2YjY3LCAweGQ4YTAwNmNmLCAweDViOThmZGY5LAotCTB4ZjI1MzhmZGYsIDB4MGUyZWMxODksIDB4ZmMwNGZhNDcsIDB4N2ZmYzQ2Y2YsIDB4MTg4OWI4MDUsIDB4ZTJmZjdkN2QsCi0JMHgzZTUzZjY4ZiwgMHhmYmMzZTc1MiwgMHhkMGMwM2Q2NiwgMHhmZjIxZWFhZiwgMHhiNTYyYThhOCwgMHgxYzRkZjY4NiwKLQkweGNiMzkyZGFjLCAweGVmMDU1NzgzLCAweGYwZmFkZTBhLCAweDFmMTY2MTZhLCAweDg2OWFjMmJjLCAweDRiZTQ5YzIwLAotCTB4ZmQyZTQ4MzMsIDB4NzdhODY2NGUsIDB4MDU1Nzg2NmYsIDB4ZjgxMTNmZWUsIDB4ZTVjY2Q2NTksIDB4MTViZTNmOTcsCi0JMHhlNzgwM2MzYywgMHhkZjQ4ZTJhMywgMHgzMTNjMjM2ZSwgMHg3ZjRiYzkxZCwgMHhiZTE5Yjg3YSwgMHhlMWU3MzA4MCwKLQkweDNhYTE4OWFiLCAweDU0YTMyZmYyLCAweDJkNDY5ZTVjLCAweDM4YmUyODk1LCAweGI1MGZkOTk3LCAweGYwMmIzOTQzLAotCTB4YmJkMTBkNTMsIDB4ODEzY2RiYzAsIDB4ZjM5OThmYjcsIDB4ZmY5OGU0ZWUsIDB4OTNiZGJjM2QsIDB4M2M5ZDU3OWMsCi0JMHhmNWJlN2FlOCwgMHhmMTFiZDNlNywgMHhmYWM1ODk2NSwgMHgzYTVmNDU0NywgMHgxZmEzZjIxOSwgMHg2YmYxZmIzZiwKLQkweGYwYWQxZTFmLCAweGRhM2MyZjNmLCAweDVmMTEwNjU3LCAweDZlNWJlMWY2LCAweDg4YmQzNWI4LCAweGFhMWM2MDdmLAotCTB4NzE2YmRmODksIDB4NjA5NTdlNTMsIDB4NTdjZjgwMjEsIDB4YTZmNTdkOTMsIDB4MmUwNTM3ODIsIDB4OWRlYjhhMzcsCi0JMHhjMjNiNzJkNiwgMHhmYjRjODhmMSwgMHhlZTQ5OWY5OCwgMHg2Mzk0NjZhMywgMHhmY2U4YTcyOSwgMHhiM2ZlZDI5YiwKLQkweDFmNDM2ZGQ1LCAweDFiM2U3MTgyLCAweDVhZDNjYmNmLCAweGQ0YTkxZjllLCAweDNlM2MwMTZkLCAweGNlYTQ1OWY4LAotCTB4NGNmZGViODEsIDB4ZmE4MDk5NGEsIDB4YmZlOTMzZTIsIDB4Yjg3YWYzYTYsIDB4MzlmNTgyZDYsIDB4NTBjYzEzZTEsCi0JMHhlMjUxYWQzZiwgMHg3YzQ0NmI4OSwgMHg2N2U1NDljMCwgMHg0NDliNmU3MywgMHgzNmY2MjRlZCwgMHgzZjlmOGVmMywKLQkweDdjZmM1MTJhLCAweDljNzI4ODAxLCAweDY3ODRjYzVmLCAweGZlYWYzMTczLCAweDQ2ZTNjZmNjLCAweDcyZGYzZWQxLAotCTB4MWY1MGYxZGYsIDB4OTIxYzUwYzcsIDB4NWU3NzhiZmIsIDB4ZjQyY2QxZWIsIDB4N2E3ZDNiZDIsIDB4ZmUxNWQyNzAsCi0JMHhjZTkzM2YzYywgMHhkODA4MTYxYiwgMHhiODUyNDJkYSwgMHhlN2U0ZWM3ZiwgMHhkMzNkMTUzNiwgMHhkMTlmNmM3YiwKLQkweDQxN2E0ZTNiLCAweGVhZmI5NWM0LCAweDdiNDQ0ZjI5LCAweDNiYzNhOWViLCAweGUzODg5NTdlLCAweGU5MWQ2ODE0LAotCTB4YWJmYjdlNzgsIDB4ZDFhM2U3ZGEsIDB4ZjFkODI4OWUsIDB4YjdkOTIyNzgsIDB4YTIyNjM2M2IsIDB4ZmRiMDUyOWYsCi0JMHhhYTM2ODk1NywgMHg0ZmM5ZGEwNywgMHg3Nzc1ZjM1MiwgMHhhNWZkYjllZSwgMHhlNzdhNWU0ZCwgMHg2ZmRjZTFkMSwKLQkweDljM2ZhNzk5LCAweDk0ZWU3NjhkLCAweDYxZDc5NzExLCAweGU3ZTEzZTNjLCAweGYzODdkZDEyLCAweDBlYjZkNjUzLAotCTB4NjRmY2RmZjUsIDB4NDZhY2VmNGUsIDB4ZTE5OTcyNGYsIDB4NzNjMDJkZjksIDB4NzVkZGNhN2QsIDB4OTNjN2E3YzgsCi0JMHg0M2U0ZDBiZiwgMHg5YThhNWQzYiwgMHgzOTlmMzNlMCwgMHg3ZWUzODczNywgMHg1Y2M5MDZmNiwgMHgwZmRiYmNjZiwKLQkweDg1Y2FmZGE1LCAweDQ0NmQyNTZiLCAweGUwYjdlYTI4LCAweGVhM2ZlODUxLCAweDFlNjk4MjUyLCAweDZhOGMzNjhiLAotCTB4NTdmM2U3YzUsIDB4NzQ1M2U3ZjEsIDB4Mzg1M2M2Y2UsIDB4Y2E1YWIzY2UsIDB4MTBmOTAyMzcsIDB4YWZjNzlkZWIsCi0JMHhmMWU3ZTE0YiwgMHhjODk2NmMxNywgMHg5M2JlNTdhZSwgMHhhZDU4NGNmMCwgMHgyOTc1M2FmNywgMHhkNDY3MmY0MiwKLQkweGNlNTFkYzkxLCAweDc1NWI0ZTA5LCAweDE4MDhlZGYyLCAweGJiNmE5ZmY3LCAweDM5YzYwNTI5LCAweDc4YjlmNGYxLAotCTB4MTQ5ZjNjMzcsIDB4ZmQxNTIxNzIsIDB4ZmRhZDA0OWIsIDB4ZWViODg1YjcsIDB4ODNjYTNhZWQsIDB4OTI4ZjQ4Y2IsCi0JMHhlOGZkYTFjMywgMHg4NTNmYzc4NywgMHgwYjU1ODJlNSwgMHhmMjg4NWI3ZiwgMHgxNDdlYWI3MSwgMHhmM2U2MTc0ZiwKLQkweDU1NTkyZTViLCAweGFhZGYzZjI4LCAweGMyMTE2MDdkLCAweGY1YTdhYmVkLCAweGFmMmY5NzY0LCAweGZkNjcwYTRkLAotCTB4YmU1MjhmZjAsIDB4OGRjN2Y4MGMsIDB4N2E5NTVkODIsIDB4OWE1Nzc3MmEsIDB4OWVkYTNjZTksIDB4ZmZhYTA4Y2EsCi0JMHgyNTQyZDJiZSwgMHg2YmU5Y2Q5YiwgMHg4ZGNiOTliOSwgMHhlNjM3OGQxYiwgMHg4MGIzMjA1YSwgMHhjMWIxOWFiZCwKLQkweDcwNjMyY2MwLCAweDljOTZjZTVmLCAweDE4NDg3MDAyLCAweGEzN2RiYTVlLCAweGE1NmUxNzU4LCAweDRjYzQ3MjhjLAotCTB4NmM2NDM4NDQsIDB4NGQxNWE4N2MsIDB4ZWUxNGQwZGEsIDB4NmE3N2JkNjcsIDB4ZWRmMjM0NDMsIDB4MmYxZDU1YjIsCi0JMHg1MzdhZTIxNiwgMHg3ZjYxNDZmMiwgMHgxNDJiYjZmZCwgMHhmOWFiNzgzNywgMHhlZjA4ZjlmMSwgMHhiZTNhZWQ4MiwKLQkweGFmZWViMTNlLCAweGZmMGM0ZTllLCAweDc4ZWY4YzJkLCAweDdjN2U0MzU3LCAweDE3OGViNmY5LCAweDc4Yjk0MjM3LAotCTB4NmY1YTQzZjMsIDB4ZjVkNWJmN2EsIDB4ZmJlMTRjOGUsIDB4YWJlMzM3OWQsIDB4NWZlMWMxMWIsIDB4NDU1ZmFiZTcsCi0JMHg3ZjZjZmYxMywgMHhmOWUxZWU5YywgMHg3Y2FhZjk3NywgMHhkZjgyNmFkNSwgMHhkOWJjOTRiYSwgMHg2OTVmNWY0OCwKLQkweDRmYzhkMTFjLCAweDk4ZmNhNTVmLCAweDQ4NzFkY2U4LCAweGYyMmJmODIyLCAweDRiM2ZlOTU1LCAweGU1NThiZmMwLAotCTB4YzYyZTNjZGEsIDB4NjFiZjVmMjMsIDB4YzNkZjA0MTksIDB4ZDExM2U3Y2QsIDB4NjlhNmZkYWUsIDB4ZmJhZTBmY2UsCi0JMHhiN2JmMjU0MCwgMHhlYmUwMDlhNSwgMHg1Mjg4MmY3ZCwgMHg3MWVkNjk2NiwgMHg5NjVmNTg1NiwgMHhmZmUwYzczOCwKLQkweDEyYTI5MWRlLCAweDZmZGYyY2Y2LCAweDU3OTI3ZmM3LCAweDE3ZTgwNzdlLCAweDRmOTgwMGM3LCAweDBlZTQ4YjQ5LAotCTB4ZTlhZTNmNDAsIDB4MjBlYTBiYWUsIDB4ZmIxMjMzZDQsIDB4YzkxZTI3ZGMsIDB4N2E1ZWU3ZDgsIDB4YmRmMzQ2ZjYsCi0JMHhlMzg2NTk1OSwgMHhlZWU0NzgyNCwgMHg3Y2E4OWY2ZCwgMHhiZGI5NjNlZSwgMHg3ZWU3YzAzZCwgMHgwM2ZmM2U5MywKLQkweDNmNjk2OTllLCAweDM5NTZiMjI3LCAweDRjNzk4MGJmLCAweDc0MjljZDVkLCAweDk2ODJlMjVlLCAweDAwZWJiMWUzLAotCTB4M2UzYzM5ZDgsIDB4N2JhZjY0YzMsIDB4NzczNDJlMjIsIDB4ZjU5Y2EzYTYsIDB4ZWJkOTZmNWYsIDB4MjUxZjQ0OWQsCi0JMHgyMTVmOGY0ZCwgMHhmMjY5YjYzZiwgMHhjZGZhNzUwNSwgMHg0Nzc4N2ZkNywgMHg3MWRiZGQyNywgMHg4NTllZDM0MSwKLQkweGI2OTc1NGZlLCAweDUwZjExZDNkLCAweGU3OTcwNmY2LCAweDk0MWMyYWZmLCAweDYwMWI4NWU3LCAweDY1ZTdjMDIxLAotCTB4MjRlODllOTIsIDB4NzE0NGJlNWIsIDB4M2M2M2FlODEsIDB4ZmNkNjUwMmUsIDB4ZGVkM2M5MTIsIDB4Mjk5NzFlMTYsCi0JMHg4NGU1YjU1NywgMHhhMmEzMWM2MywgMHg1OWU1MTVhMywgMHg5M2Y3MDQ2ZiwgMHgwOWJkYzRjYSwgMHgxZTg0ZTJlMywKLQkweGUzNDRmNzU0LCAweGQ4YjcwZTc5LCAweDNiZmM1NjI3LCAweGY5MDE4N2JjLCAweDJhZTU1Y2I1LCAweGY0YTVmY2ExLAotCTB4MmRmYjg2NDAsIDB4ZTE5ZjkxMTcsIDB4MzE5NWZjZjksIDB4YmZjZTkxZWIsIDB4OGQxYTBlNzIsIDB4ZjRiZGYxZjIsCi0JMHgxYzUxOTdiZiwgMHg2NjgxMGZlZiwgMHhkOTExZWM5OSwgMHg2ZmJjMmYyNywgMHgyNzk5NGUxZCwgMHhhZWM1MzBjOCwKLQkweDhiYzlmNDA5LCAweGVlNWFkNzJlLCAweDM4ZjY3YjIxLCAweDFmMmI3ZmRmLCAweGJkODlmOWNlLCAweDc0YTlmOWNlLAotCTB4ODQ2ZDYxZWQsIDB4ODIwZDc4ZDcsIDB4NmVmYjE0OWYsIDB4NGVmZTFmY2EsIDB4ZDEzODc5N2MsIDB4OTJmOTFjNzYsCi0JMHg3OGUyMTVjZSwgMHg5MjljMDMxMSwgMHg3OTY1ZGEyNCwgMHgyZDhkMWJmNiwgMHg5NWNmYWZjMiwgMHg5Mzc5N2RlOSwKLQkweDhlNWY3MGNjLCAweDJmMjg5ODQ1LCAweDUzNTU5NzIwLCAweGU2MTRlNTdlLCAweDMzOWI0NzFhLCAweGYxMjdmNmVhLAotCTB4N2ZhOTliNWUsIDB4ZmU2MGM3OTAsIDB4YjQ0MWY4MTYsIDB4NjAxMzlkN2YsIDB4YTZmY2M3OGYsIDB4YzA0OTJhZDMsCi0JMHhjMzMxOTVkNSwgMHg4N2U5OWY0YiwgMHg0ZTM1M2Q3MywgMHhmNThmNDg5NiwgMHg5ZDkyMDY0NCwgMHhlOTc2NzkzMiwKLQkweDY5ZmI2ZjNjLCAweDgzYjc4YWI0LCAweDYyNmVjODcxLCAweGFlN2UxZWNlLCAweGVlOTNkZGM2LCAweGFjYzhlZjdkLAotCTB4OTA1NjA0M2YsIDB4OGNhZTY0NWUsIDB4ODlkZjVlNTksIDB4ZTZmNWNlMWMsIDB4MDZmZmRjNTUsIDB4ZmIxNzI5M2EsCi0JMHg3N2YyZDlhYywgMHhiZDNkYTBjZiwgMHg1ZmRmMTBmYywgMHhmOThhYWQzYywgMHhlOGIzZjMxOCwgMHhlNzg0YjZkYywKLQkweDc5MzlmOWEzLCAweGJjMzY2NzY2LCAweDZkMmJhZjY3LCAweDJhMDc5ZDEwLCAweGNjMzEyM2RmLCAweGQ2NmIyYjczLAotCTB4NTEzOGM3NmQsIDB4MGMzZGE2OTksIDB4ZDM2Mzc5ZTksIDB4ZTdhNDVhNDcsIDB4NGQ3N2RjNzIsIDB4NzlhYmU3ZTMsCi0JMHg3MjRmNWNkYywgMHg0OGNjZGNiYywgMHgyNTM2OTU3ZiwgMHhiYmYxOGM3ZCwgMHg4YjVjNjNkMiwgMHg5MjRmYWE5NiwKLQkweDFiNzI4ZTdmLCAweGI4ZGM1N2JmLCAweDEyZjFmYzk3LCAweGJjN2YyNmU2LCAweDZlOTdjMWE0LCAweDhmZmEyMzdhLAotCTB4YjcwZTQ3ZGYsIDB4MzIzM2RjZjgsIDB4OGZlNzJiNzksIDB4MzI1ZWUyNTksIDB4OTNiMGUyMjYsIDB4YmQ2YmMyMjMsCi0JMHgwYTQ1MzFjZiwgMHhjZWU0ZDgzYywgMHg3NGM3Njg3NSwgMHhiYzU2NGFjNywgMHhjMDNiYTY5NywgMHgyM2VkMTZiMSwKLQkweDZiYjcyMjQ3LCAweDlkZGNkZmJhLCAweDhiZTQ5NGIxLCAweDM0ZGVlMzMzLCAweGRiODc1N2JjLCAweDZjMzc5M2IxLAotCTB4ZjM1ZWNiNTEsIDB4ZTNlZTJjOTksIDB4MDU2MDBlZWIsIDB4ZjZlZjA4MDcsIDB4OTA4Zjg4MjEsIDB4ZTFhOGJjYTQsCi0JMHg5ZTNlZTg4MywgMHg3YzYwNzcxMywgMHhmMjdiOWM0OCwgMHg0NDZmYzc1ZiwgMHgzOGI4ZTg1YywgMHg3YmNjYTliZiwKLQkweDk3MTQ1NDZhLCAweDc0NDljYzY3LCAweDE5Y2UyYWQ0LCAweDRhMzY3OTI5LCAweDFlYjEwYWZmLCAweDNkMDc3ZWM1LAotCTB4ZmI0M2ZlMWQsIDB4OTM0ZmI4MjUsIDB4ZjI2OWY2MmYsIDB4YmU0ZDNlYzUsIDB4MTdjOWE3ZDgsIDB4NjJmOTM0ZmIsCi0JMHhlYzVmMjY5ZiwgMHg3ZDhiZTRkMywgMHg0ZmIxN2M5YSwgMHg2OWY2MmY5MywgMHgwZDNlYzVmMiwgMHg1NGUyYzNlNSwKLQkweDExY2RmZjMxLCAweGQxZWEzNGZiLCAweGMxYjVlNDU2LCAweDEwZTlmYTllLCAweGRmNjBmYWJmLCAweDI0NDNhN2Y2LAotCTB4ODk2MGZhZGYsIDB4MjU3YzRmZGEsIDB4MTE4NzY5ZjYsIDB4MjE2NmEzZTMsIDB4NTQ3Yzc4OWYsIDB4MmE3OWRmMzksCi0JMHhlMTE5M2VkMCwgMHhmY2U3OWNhYywgMHgwM2E5ZjcyYSwgMHg0MjkzNGZjOCwgMHhkOWJmOTBlNiwgMHhjYTI2ZmUwYiwKLQkweGY2ZTFjYWEzLCAweGVjNzc2YzNjLCAweDJkZjhjNGQ4LCAweDE0MGQyNzI0LCAweGUwZmQzY2U3LCAweDk4NzM5ZjA4LAotCTB4YWNjNzkzZTMsIDB4YzYzMDdiYzUsIDB4N2U3MTI1MWIsIDB4OWU2NDdhYmMsIDB4MzhjMWZmZTIsIDB4NjYxNjViMTMsCi0JMHgzMDdjYjlhOCwgMHgyZDljYmRhMywgMHg3N2UzZTQ5NywgMHhjNjFhNDc5NiwgMHgyNGQ2MWNhMCwgMHhmNzBlZTdkYiwKLQkweDgzMzlkYjkyLCAweDVkYTNjNTk3LCAweDdjYjFhYWQ0LCAweGM3NWFmMThjLCAweGJmM2ExYTA3LCAweDk0ZjVjNGFiLAotCTB4OGQyNWVmNzYsIDB4OTM3ZWM0MmYsIDB4OGVkNmUzOTMsIDB4ZmNmNWYxYzYsIDB4OTY5YjM4YmUsIDB4NmNmY2UwMzUsCi0JMHhlZTg5NDBhYSwgMHgzNTE2NjE2ZSwgMHhlMWMyODNjYSwgMHg1ODI2NmU5YywgMHhkNmVjN2RiOCwgMHgxODIxZDQ1YSwKLQkweDFmMTgwOThmLCAweGFkMTM3OThhLCAweDA0YzdjZjAyLCAweDNjMGI4ZjllLCAweGE0ZDc3ZWUzLCAweDg1ZGZiZTA0LAotCTB4NjE3N2VlMjUsIDB4ZDU4ZGU0YTksIDB4MWYyZGU0YTUsIDB4MjdiNGYyNGUsIDB4YzRhY2UxMWEsIDB4ZTcyOGE2ZmQsCi0JMHhlZThiOThmYywgMHhkMDUxN2MzMywgMHhiZTcwZDI2ZCwgMHg3MjYxZjJjZiwgMHgwOWMzYTNkZSwgMHhiNzNhMmUzZiwKLQkweDY5ZTIyYzU5LCAweDQzN2Y2MjlkLCAweGNmZDJhNzU5LCAweGZiZjE5ZmQzLCAweDA3MzI0NjVjLCAweDgzYjM2N2VlLAotCTB4MDg3NjRmMjIsIDB4OWY1MDIzZDgsIDB4ZTQ5YzMwNzksIDB4N2ExZTcyOTAsIDB4MDdlZTE4ZTYsIDB4ZmNlMjdkYjAsCi0JMHgxMzI1ODQ2MiwgMHhjNDRhYTNmOSwgMHhmYzljYmI1MywgMHg0ODY5NmQxYywgMHgyMzllMjI1YiwgMHhhNTdjMTJlOCwKLQkweGQxNzM5NWQ0LCAweDZlYTFhM2E1LCAweDI4NGI5Y2Y0LCAweDg4OTZkOTlkLCAweDI0YmExMmU3LCAweDBkY2U4YTgzLAotCTB4NGZlZmU3NmYsIDB4OGQyYmJlMDksIDB4ZjcyOWUzMTUsIDB4ZDE1ZGU4NGUsIDB4NDNlZTg3ODgsIDB4YmNmMWEzMDcsCi0JMHg3YmEzMjZkZCwgMHg2ZWZiOTcyOSwgMHgyODExZGU3ZSwgMHgzYTk2ZjMxNiwgMHhjYzE5ZDcyNSwgMHhmNzc0N2RjZiwKLQkweDFlNjNmNzFiLCAweGY1YzZhNzdkLCAweGRiMWZkNjIyLCAweGNjN2VlODdkLCAweGY2OTRlZGNmLCAweGJmN2IzMTllLAotCTB4YzY4YWU0MWYsIDB4Nzc0N2RkZmMsIDB4ODNmN2YwYjcsIDB4NmMxOGJlZjYsIDB4NWU2YmFhZjUsIDB4YjVlZjgzM2IsCi0JMHg4ZmRkMGU2YiwgMHg3NTUzYmNmOSwgMHg0ODk1NjNjZSwgMHg3NGU3YmYyZiwgMHhmZmIzZDg2NSwgMHhiOGFkYzIxYywKLQkweDEzZWRkYjk5LCAweGY0YmZlY2Y2LCAweGZkZTVlYTFhLCAweDNmZWZkYTI2LCAweGUwODYzYzM4LCAweGYyZmNkNTVkLAotCTB4YWViM2E0NjYsIDB4YmZkZTNjYmQsIDB4MTdhM2UxYTksIDB4NzRlZDQxN2YsIDB4NTRkYzBkNzQsIDB4YzE4MzJiOWQsCi0JMHg5ZWVjZDY3NywgMHgxYTlhZjM0YiwgMHhlYjFhZmFlOCwgMHg0NjM4OGQ0ZiwgMHg5MDNhOThmMywgMHgxMWQ2ZjNmMywKLQkweGU3OGZkZGVmLCAweGVmZjZiYTAxLCAweDZlZjkwNDc5LCAweDY4MzAwMGVhLCAweGY5YmIzZTcxLCAweDdkYTJhMGY5LAotCTB4YmZkMDkzMjksIDB4Y2RiNTMyZWYsIDB4NWVjYmYxYzcsIDB4ZjMzOWQxZDEsIDB4NzRlMTdkYTIsIDB4YzNkYmM3MmYsCi0JMHg5OTM5Zjk2MywgMHhhOGQxZDVlMSwgMHhlZmFmNTU2NywgMHg1MDhiZjFkYSwgMHhmZGEwNjc2YywgMHg2ZTEwZjI5ZSwKLQkweGI1YzkxNWU3LCAweGZlMTEwZjU5LCAweDNjZjFkYTVlLCAweDgxOTc3YmNlLCAweDMxMGI1ZmY2LCAweGMyZjUwMmE2LAotCTB4YTcxNDA5MWQsIDB4NWYxZmUzN2YsIDB4NjQzYzQ3Y2MsIDB4N2NlOGRiY2IsIDB4MDY3NWQ3Y2YsIDB4OTRlMWMyMTUsCi0JMHhjZjAwMzZkNiwgMHg2OTRlMzhkMywgMHgxNDJjZGZjOCwgMHhmY2QzYzJmNSwgMHg2MDUxN2RiYywgMHgyZmUxMGU3YiwKLQkweGY1MWEzYWI0LCAweDQ3YzBkMTZjLCAweGE3YmNlM2E3LCAweGEyMmZkNWNhLCAweGU2NWVjM2JmLCAweGQ4NWRjNmY3LAotCTB4N2U4MzcwMDUsIDB4OTQzNWVhMTcsIDB4Y2JiNWRhYWQsIDB4M2JlMmU3NDQsIDB4NzhmOWVhYTUsIDB4OWVhMzg5M2YsCi0JMHg1NDM0ZWJiNywgMHhmNTFkM2MxMywgMHhiNGRlZmM0OSwgMHg0OGU4MzA1ZCwgMHhlN2M1Yjc2YywgMHg5N2ZhODVmOSwKLQkweGJkMWZkMWQzLCAweGYyNTRjYWY4LCAweDU1ZmExNTRiLCAweGNlYThhNWY4LCAweDNmMWQ3Y2ZmLCAweGZlMjQ1YWI3LAotCTB4MzMwNzY2NjYsIDB4MmU5M2M1N2EsIDB4ZWJhZTc4MWUsIDB4ZmZkM2NjYjcsIDB4Y2U4NjgzNjIsIDB4ZDhlYTE3NzksCi0JMHg1NjBmY2M1YSwgMHhlYTI4YTFmOCwgMHg1ZjVjNWNhZSwgMHgxMTM2YWE5MSwgMHgzMWMyOTZlZCwgMHgyZjkxZjNlZCwKLQkweDNlOTgxODJlLCAweDI3YmRkYTAyLCAweGUzNTE1NWY0LCAweGZmNjgxOWVhLCAweGE2M2U2OGRlLCAweGJmOGY5YzExLAotCTB4ZWI3YWUwODksIDB4ZDM4MzI2OWIsIDB4YmZkMWJmN2IsIDB4OTk5MmI0ZmMsIDB4ZDRmMDRmZGYsIDB4N2JlMTVhN2YsCi0JMHhhZDNkZjBkZSwgMHhiNGZkMDRhYiwgMHgzZjJlMTBiMiwgMHhiYzdiNDBjZSwgMHg3YzUwMmU5MywgMHhiZjRhYzE2NywKLQkweDc4MjM5MjczLCAweGI2OTk2NDVlLCAweDllZjUxMTNkLCAweDg2M2ZmZTMyLCAweGE4NWRiOTliLCAweGI3ZmJhNzZlLAotCTB4NDU0ZGZiZmMsIDB4YzhlNTA0NzMsIDB4Yjc5ZTdlNmUsIDB4YTBlYTUxYTgsIDB4NTIwODIyNzMsIDB4OGI2NjdiYWYsCi0JMHhlNjI3MGVmNCwgMHg4Nzg3ZjUwOSwgMHgwNzgxMmM4OCwgMHgxMWI5ZWIxOCwgMHhhMjhmMzQzMSwgMHgwNzlkMDMwNiwKLQkweDBmNjgwZTJmLCAweGM0YTkzYjQyLCAweGY2ODQxZWQ0LCAweDMyZWJkNzRmLCAweGU4ODljM2RkLCAweDhmYzY1NTBiLAotCTB4ODk0ZjdjZjUsIDB4MzRiYTE2MTMsIDB4ZGY3ZjQzMzYsIDB4MWM2MGU1ODMsIDB4MGRmZTE5NzIsIDB4MDQ3NTc4YTAsCi0JMHg2ODJhMjdkZiwgMHhjZmU3ZTQwYSwgMHgxZTc0ZWRjZCwgMHgyNjNjZmZkYiwgMHhjNWVjZDNhZSwgMHgyZjRkNWQ4ZiwKLQkweGU5ZmI3OTg1LCAweDc5NzA0N2EzLCAweDEwNzUyZGQwLCAweGUzZmY3NGRmLCAweDgzYTQ2OGYzLCAweDhiNWIxNTIyLAotCTB4MjUxNzk1ZmIsIDB4ZWEwMjJlN2UsIDB4YTJlMjFlNzQsIDB4ZmEyY2Y3ZDgsIDB4ZjQ4MDE4ZDYsIDB4MTI5YmYxNzMsCi0JMHhhOTJlZTNlMiwgMHhmYjVjZTQ5ZCwgMHg3YzkzM2ZlZSwgMHg5M2I0ZDJlOCwgMHhjNDY4ZmI5YywgMHhlOGZjOTM3ZiwKLQkweDhmOWY2ZTBhLCAweDQ0N2RhYjcyLCAweGQ5MWY3ZjBmLCAweDIzY2YxZjNlLCAweDdjNzU4OWJkLCAweDgxZmZmNzhmLAotCTB4ZmRkYWVmZmUsIDB4ZWZhOGZkZWQsIDB4OGYzY2NhYTcsIDB4MzFhNGJkODIsIDB4ODcxMGY4ZjMsIDB4MjcwMTMyZjcsCi0JMHhhZTljMzZjNiwgMHg2MzQzZmYyNCwgMHgyZGQwZmQ0MSwgMHgxNjZmMDNlOCwgMHg5OGZlNWU2NCwgMHhjYzVkNGZjMiwKLQkweGY5MTFhN2IyLCAweGM3ZGY4MGIzLCAweGMzNTU3NjAzLCAweGNkZmY2ODZiLCAweDg0ZmJhMzA5LCAweGVjYTZlMWZjLAotCTB4ZmM4Njg2MzMsIDB4NjllMjI5NmQsIDB4YzBmZWM5ODYsIDB4Njk1MzgwMDgsIDB4MTdmOTNiNmEsIDB4ODdhNGVkNDAsCi0JMHg5MWQ0ZGVjYSwgMHhlOWFkZDk5ZiwgMHgyYmYyODFkOSwgMHg4YjlmNjRjNSwgMHg2ZGI0NGFlZCwgMHhiYzI0MzNlYiwKLQkweDE1YmRhMGE3LCAweGNhMjlmYTRkLCAweDM5OTdjN2Y5LCAweGJlYTU3NWJkLCAweDg4NGRjZmM0LCAweDgxNjJjYTdkLAotCTB4YjI1YmJjMDcsIDB4ZTI0M2U5MTYsIDB4NjlhYjdlNzgsIDB4NmYyOGZiZGYsIDB4NDhlMmRhYmEsIDB4ZDNmM2ZiNGUsCi0JMHhlOGE3YTY4NSwgMHg0MDRmOGE5ZSwgMHhlMmJjM2JhZiwgMHg3YzJjOWYwMCwgMHg2NjAxZjI5OSwgMHhmMTg4MWU2MywKLQkweGJkYmU3M2ZhLCAweGZlNGJkZGRmLCAweGY1ZWNkYjIwLCAweGM2YjFlOTFjLCAweDE3MGZlZWI3LCAweDBmYjc0YmE0LAotCTB4ZGU2ODM4MWYsIDB4MDBkZjkwM2IsIDB4ZGExM2M1ZmUsIDB4YmU4NzdlZTgsIDB4Y2JhODRjZmEsIDB4N2UyM2Y1NWUsCi0JMHg3OGY2YmY3NSwgMHgwZmRhMDA1ZiwgMHg1MDVkODQzYiwgMHg5YTdkZDQzMiwgMHgzYzNkZjdmYywgMHhmNDBhYjc2ZiwKLQkweDA3ZjdkNTFhLCAweDZhYTU3ZTUyLCAweDUwYWRlODBmLCAweDVmNTBiN2FlLCAweDUxYjUwNzE0LCAweGJmNmJhYWRjLAotCTB4ZDc3OWY2OGUsIDB4YzY4ZjlmMzQsIDB4NTIzZDAzZjUsIDB4ZjliOGE2N2MsIDB4N2NjYmRkMjAsIDB4NGM4N2ZkMTAsCi0JMHg5NDYxOGZkMiwgMHgzOWJmYjMxNywgMHhlNTEwZmQwYywgMHg5NWNhODk3OSwgMHhkM2Y1ZjIyOCwgMHhjZjI4N2U1MSwKLQkweDIyNzc2NTRiLCAweGRhOTVmMzlkLCAweDgzODhmZWU4LCAweDJhMjVkZTYyLCAweDE3NThjYmE4LCAweGRmMzg5NmYzLAotCTB4MmY3ZTY2YjMsIDB4NWVkZTNmOTYsIDB4NzZlZGMxMTksIDB4OWY3NDBmOTAsIDB4NzlkNzlhZTcsIDB4MDc5MTQwZGMsCi0JMHgxY2FlNDI4NSwgMHg5Y2E5ZTdjMSwgMHgzZWNhY2RmZiwgMHg0NDJkNzQxMSwgMHg0ZTQ3ZWZiZSwgMHgwYjMwOGYyNCwKLQkweGUyODJiODdmLCAweDU4NDYzYjNhLCAweGE3ZjQ1ZDc4LCAweDg5ZGM3OTcxLCAweGQxYmQ5N2RlLCAweDhhOWIxZTk5LAotCTB4M2RjYTJjZmQsIDB4MTQ3OTFlNWYsIDB4MjgyZjkxZTcsIDB4MGU0ODIyMDcsIDB4YzE4NGQxYWMsIDB4OTQ1ZThhYmEsCi0JMHhjMmEyZmVlOCwgMHhhMDczYWI3OSwgMHg3ZWE2NWIzOSwgMHgyZDQ5ZWU4OCwgMHhlMzViYmNjMCwgMHhhN2YyZjNmNSwKLQkweDU3YjhmMWEzLCAweGVjNTJmMjg4LCAweGUwZWQxNTAzLCAweDM1MTc0MGZiLCAweGU0MGQxZjdjLCAweDJmZjVlNTBkLAotCTB4MDczYWI0OWIsIDB4Njg0OTZmZjksIDB4NGZkYmQ2YTksIDB4ZDdmOGQ5YmUsIDB4NThhZjViOWQsIDB4MGZkZTEzOWQsCi0JMHhkY2FkMTc5ZiwgMHg1ZDg4M2FkMiwgMHhiZGExNWUzZiwgMHg3MmNjMjczNiwgMHhkZTY1NzNmZCwgMHgzY2NhMGQxNywKLQkweDc5MDY2ODI3LCAweGVhZjY2M2MzLCAweDczNGZiYzFjLCAweDg1ZGZmZTk5LCAweGM1Zjc1ZjA3LCAweGY1MWI5ZDY2LAotCTB4ZjY5N2MwMmUsIDB4NTZiY2VlODMsIDB4YmQ1ZjEzZTEsIDB4Y2M4NTc4ZDksIDB4MzcxZmZiNDksIDB4NTk3ZmJmOWEsCi0JMHg1MzRmYjkyMiwgMHg1N2YwMmQ1ZSwgMHhmOWQ5ZjEzZCwgMHhhMGZkZWY2OCwgMHhmNmJlNDIyOSwgMHgxNjBhMjVjNSwKLQkweDQwN2JhMzBlLCAweDc5ODcwYmVjLCAweDRiZmMyNWM3LCAweDU1ODM5NDEwLCAweGEwZTIzMzk0LCAweGJlNzBmODEyLAotCTB4Mjg3ODFmYjUsIDB4MDQ2N2ZmZWQsIDB4MzI5YTRmY2YsIDB4ZTBkNWYzODIsIDB4YmRjZmM1YTksIDB4YTM5ZTI4YzYsCi0JMHhlMzc0MWQ0ZSwgMHg1NGE2MjFmMywgMHg3Y2I3NGZjZSwgMHgyMDYyNjQzZSwgMHg2MGM4Nzc2ZiwgMHhmNzRmYjhjNiwKLQkweDVjNTFiZmExLCAweDcxOWQ3YmI4LCAweDMwNmZkZjM2LCAweGRmNzg0OGIyLCAweGRkYjY5MTFhLCAweDhhZmJmZTNiLAotCTB4ZTc4MTQ3MzgsIDB4N2VmY2U5YmUsIDB4ZTM4N2U2YjIsIDB4YmVhNmE5NGEsIDB4MWJkOTEyYjgsIDB4Y2ZiNDgxYTksCi0JMHg5NTc0ZDVkMiwgMHg0Yjc3NWJmNCwgMHg0M2Y3MTlhNiwgMHg0NjljZGFiYSwgMHg3ZmYyYjdlNCwgMHhlYTE4NGZmYywKLQkweGIzOTZhZWUxLCAweGY1ZDY5Nzk0LCAweDU3Y2E3OWRkLCAweDA2ZjIyOGRiLCAweDdjODkzNDhmLCAweDA5OGIzNmFmLAotCTB4N2VlNzc3OWYsIDB4MzZlZDgzOTEsIDB4NTcxM2QyODksIDB4YTUzMTcxZTAsIDB4MjU2NWZjNTQsIDB4ZmY3NWUwN2UsCi0JMHg2Yjg0MjhkMSwgMHg5M2UzNzliZCwgMHhhNjBmMzAxOSwgMHgxZGRmYTZhZiwgMHgwNDM5ZmYwMCwgMHhhZTI3ODdmNSwKLQkweGExZmYwOTYwLCAweDJiOGM0YTNjLCAweGI4ZjAyN2M0LCAweDU3MTg5NjAyLCAweGI4ZjBkNzg4LCAweGFlMzFkNjAyLAotCTB4MTVjNjI1ODAsIDB4MTVjNjM5ZjAsIDB4MDU3MThlYjAsIDB4MDE1YzYzYWMsIDB4YzA1NzE4ZWIsIDB4ZjgwYWUzMTIsCi0JMHg4ZTcxNmJmYywgMHgzNzhjMWJhMywgMHg5MjM0ZjcxZSwgMHhjZjUxNWZmYywgMHg4ODU3NmJmNywgMHhkNDU3YTFmYiwKLQkweDg1Yjc5NDRhLCAweDBmNTAzOGU3LCAweGQzYzc5NzVlLCAweDVjNzhmMjI4LCAweGIwM2Y2ODViLCAweDQ1NmNiZjdjLAotCTB4MGY3OWUxNTQsIDB4NzlmMzBlODcsIDB4M2M2MjhlN2EsIDB4NjRhZjdjYTgsIDB4ZTdjMTZkNWQsIDB4MWIxZTY5YjMsCi0JMHg5ZTNmMzI1YiwgMHgzNWViY2Y4NywgMHhhYzk3YmM1NiwgMHgzMDliZTViYiwgMHhiNTE1Nzc4YywgMHg2YWRjNTNkNCwKLQkweDJkMjFmODUyLCAweDYyNDFiOWUxLCAweGE1OWQ2ZjE4LCAweGE5NzI3ZWUzLCAweGQzNDc0ZjBjLCAweGQxZDkyOWJlLAotCTB4ZjIzNmJhYTUsIDB4NGE3NzhhNWYsIDB4ZGRmM2VmNjYsIDB4OTBhZjYzZTUsIDB4OWJjYmU4OWMsIDB4ZjljYzE5NzIsCi0JMHhjNmQ1ZmEzZSwgMHg0ZmYwYWVmMywgMHg1N2Q4OGZjNCwgMHhmNDliY2E1ZSwgMHgzZDkxNTllNSwgMHgyZDFmNjVlMiwKLQkweDdjNjRmZGM1LCAweGU3NDc3ZjJlLCAweGQxYzE0YTRiLCAweDkzZjUyODFkLCAweGNmYjdlNTg3LCAweDc3YjJkNDVjLAotCTB4ZTI5YmRlM2QsIDB4NzdkY2RmYmYsIDB4OWY2ZmNmNWUsIDB4ZDhhYTY1NzksIDB4Y2ZjNTFlNGYsIDB4OWQzZWU0ODksCi0JMHg3YzNmNjdiZiwgMHg0NzVhYjdhZiwgMHg3MGU1NGFmNiwgMHgyNjZhNjU3YiwgMHgyOGQ4NmJlNiwgMHg5MGY0NzJlZSwKLQkweDJmYWRmYzgxLCAweGM0ZjkyNGI3LCAweDIxZTViMjVkLCAweGFlNThmNzE0LCAweDZiOGY0ODkxLCAweGIwZWJlZDkyLAotCTB4YzVkY2M0ZGYsIDB4MTg5OTZmMTQsIDB4NTY3ZTIyNjEsIDB4YTRiZGYwZTgsIDB4ZmRmMWM3YmMsIDB4YzUwYjM0ZjIsCi0JMHhlYzc1YjJiYiwgMHhjODllMzQ2NywgMHhmODkyODJlZiwgMHhhMjRhYmIyZCwgMHgzMjE3YTk3YiwgMHg1OTdiOWQyYiwKLQkweGYyZjdlMzYwLCAweDJkZThmNzI5LCAweDQxY2YzYzYwLCAweDViZTVhYmExLCAweDI4MmJiMjI0LCAweGZiODYxMTAwLAotCTB4MGI5ZTFjOWQsIDB4N2JhMWRlNWEsIDB4YzRlYjE2NGYsIDB4YmUyYTdlM2QsIDB4ODliNTFlMWYsIDB4YzEyY2JmZTcsCi0JMHhkZWYwYTQxYiwgMHg1OGFiZDAxMCwgMHhiMzdkOWU4MiwgMHgwM2RiOWUxZCwgMHgzYjczNDQ4NywgMHhlMzhlMTJkZiwKLQkweGExYWUzYzJmLCAweGYwZWNlMTNjLCAweGE0ZWQxM2JiLCAweDNlNTEyN2VmLCAweGY2ZWY1ZTAzLCAweDkyMWY4OGZkLAotCTB4MGNmOWJlYTMsIDB4NDM3OTM1NDcsIDB4NDhhZGRkNzAsIDB4YjFlNzE0YTcsIDB4YjJiYzc5NTMsIDB4OWUyNTRhODAsCi0JMHg3NjJmZTRhMywgMHgxN2I4M2ExZiwgMHhjZTVkOWZiZiwgMHhlMWJkZTVlZiwgMHhmZTgwYmQ3OSwgMHhlNzI5YWRjZiwKLQkweGY5MTQ1ZTE1LCAweDUzYWE1MTc1LCAweDc1ZmNmMDYzLCAweDJiNDZiN2Q0LCAweGZjM2IzZmFlLCAweDhhZjc5ZDEwLAotCTB4NGUxZmUzMTMsIDB4ZTUwMzdiY2MsIDB4Mzk4ODJkOGEsIDB4Y2JlZTFmYjAsIDB4NzMzYzAzNTQsIDB4YzYxMjAxNzAsCi0JMHgzYzM2NWRjZCwgMHg0ODczZDMzNywgMHhmNTFlNTMzMiwgMHhjYjczZjI3NSwgMHgyOWVmY2MzYSwgMHhkZWU4OTc4ZiwKLQkweGVhODA5Y2YwLCAweDNmMTgzMGVjLCAweDhhYzYzNjI3LCAweDg5YmNiYmYyLCAweGEwYmI1ZGM3LCAweGMzYmY3OGU0LAotCTB4MzE4MWY3NDksIDB4MTRkNzNmN2UsIDB4MjQ5MGI3ODEsIDB4NGNkNDg5ZmIsIDB4ODJhOWYzY2YsIDB4YWU1YmJhNmYsCi0JMHg5YmUxZmNmMiwgMHhlOGViNjVjNywgMHhiMDY2MTNiZSwgMHgyMWIxZjcyYSwgMHgxODhlYTdkZSwgMHg4NTU5ZjE0YSwKLQkweGMyMWI3YTZlLCAweDdjZGQyM2I3LCAweGJjYzNmNDJlLCAweDY4MzUyNzc5LCAweDZjOTg3YzNmLCAweDMwZTEwY2ZmLAotCTB4YmFjYWZmM2YsIDB4ZmY2NzVhMzAsIDB4Y2YyNTMxZjEsIDB4YTYzZTNmZGUsIDB4YWJmZmVkYzgsIDB4MmJmN2ZhZmMsCi0JMHg1MTNjYTgyYiwgMHhiNmNhOTJiOSwgMHgwN2JkMDc0YSwgMHhlYTc1ZjBiZCwgMHhmZjU1YzVhZCwgMHg4ZmY1ZjA4ZSwKLQkweDY1YmQzMmFiLCAweGUwNTdlOTAwLCAweGY2YzcxZTZmLCAweDVmMDJhMzhiLCAweDdhZjhiY2FiLCAweGEyZjA0YjYyLAotCTB4ZDQ3ZjY4MGQsIDB4NGZmZWU5NjgsIDB4NjE1ZTc3Y2MsIDB4NDlhMDM5MjQsIDB4YWE5ZTM3ZWIsIDB4ZjE0OGNkYzAsCi0JMHgxODY2NWVkNywgMHg5MDlmZjA4ZCwgMHhjMTU2YTcxYywgMHg5MjY5MDFmYiwgMHhmMjAwZmVjZiwgMHhmOTBmYWUwOSwKLQkweDEzZTQ0YjA0LCAweGYzZGM1N2I1LCAweDcwYjAyZDA1LCAweDFjMDdiNzA2LCAweDA4MTgwZjY0LCAweDgzNTdlYmFmLAotCTB4MWVmMDkwZmMsIDB4ZmM4ZmIzMjUsIDB4M2YyN2U0YjgsIDB4OTA3OTcxYzAsIDB4ZjBiNTdkY2UsIDB4ZWYyNTI2ZmMsCi0JMHhkNzE0MDI3MywgMHg0ZjIzZjc0NiwgMHgwYzllNWM1YywgMHhjMmVkNzAwZCwgMHgwYjJkMGNlZiwgMHhhM2UyYmNhMCwKLQkweDQ3NWY0ZTFhLCAweGI5YmNmMjM3LCAweGVmYzc5NjdjLCAweGFlNWViYTZmLCAweDE2M2UyMTA0LCAweGYzMzllYzBmLAotCTB4ZmM1ZmI0M2MsIDB4MzVkOTIzMmIsIDB4NjY5NzIzZWIsIDB4MjU3MjI3ZmQsIDB4YzNjMzhkMjAsIDB4NjMyNTgxMzEsCi0JMHhjYWNkZjI3ZSwgMHhlMDQ1ZWU3ZSwgMHgzMTRlNjZmNywgMHgyZTViOWY5MSwgMHg3Y2IyYTBlYywgMHg3MmE3ZjEzMywKLQkweGVkNGNiNDNlLCAweGVkOGY1OGVhLCAweGZmM2M0ZDQyLCAweGJlZThjZDQzLCAweGMxYWE1Mzk2LCAweGMxNTk5ZWZjLAotCTB4YzRhNmE3NjcsIDB4NTg2MDVlNTEsIDB4YTg4N2JmMTUsIDB4ZWU4OTZlZTcsIDB4YzgxNDllMDMsIDB4NTZjODU3ZWYsCi0JMHgwY2JjOTVlNSwgMHhiOTU2ZGZlZiwgMHg1NGMxZWZjNSwgMHgxMjJiZjhkMywgMHg3M2QxNWM3OSwgMHg2YmRiOTUxZSwKLQkweGJhMjZiOTUxLCAweGJhZjY0MTNmLCAweGM2MzFhOTNmLCAweDM5ZjQ1ZWViLCAweDZlY2ZiZWZjLCAweDRkZmY3MmE3LAotCTB4YTA4N2JjZGUsIDB4N2UxY2NkNWYsIDB4YjMzNzY2Y2YsIDB4MDNmYjgxM2MsIDB4NzEwMDgyOGUsIDB4YjVlODEyN2YsCi0JMHg5OWZkY2YwYywgMHhlZGM5ZmUwNywgMHgxNTQyOWViYywgMHgxOWFkNTM5ZCwgMHhlYjhkNTk2NSwgMHg0MmNjNzlhYSwKLQkweDI3ZjczZGVmLCAweGU4ZGNmODcxLCAweDgyZGI5YzNlLCAweDgzNjlmOWVjLCAweGU3MTdiZmFlLCAweGNlNmYyOTE5LAotCTB4NjY5ZmVjMTIsIDB4ZTM0ZmY3ZTQsIDB4ZWVkMDhkZTUsIDB4NGZlMTljZTgsIDB4MGUzODQwZWMsIDB4M2RhMjY0YjEsCi0JMHg3MDZjNjhiZSwgMHgxMWY0MDQ5NiwgMHgwNmYzMDZhNSwgMHhkNDYzMGZlOCwgMHg0NmQwNWY3NCwgMHg3MWYzMTNiNSwKLQkweDdkYzVhODg3LCAweGVmMjE2YTAxLCAweGQxODBjODYxLCAweDg1YTZkZWQ0LCAweDk2YTdjMmZhLCAweGFiZWExYjMxLAotCTB4ZjNmNzQ2MjgsIDB4ZmVmOWViYzYsIDB4NTg2M2Y0MzgsIDB4NDY0NmI4NjIsIDB4N2M3OGM4M2QsIDB4M2UwMGUxNjgsCi0JMHg0NjcwYzJmZSwgMHg0NWE1Y2ZiZiwgMHgzYmYyNTAxNiwgMHgyNjc3ZjBiMywgMHhiMGJiYzUxOCwgMHhlYTY4ZDA3ZiwKLQkweGZlZjE1MGVmLCAweGMzOTQzNTM2LCAweDUyM2RmOGUyLCAweGI0NzRlYjNkLCAweGYxZjBiYTJmLCAweGE3MWZhNGExLAotCTB4NzczZGYwNGQsIDB4ZTc4ZDMyN2YsIDB4YjhlNTI4MmQsIDB4OWYwZjhiNzQsIDB4NDI5YjVhMmYsIDB4ZDY4YjhiZmIsCi0JMHgzYjQ1MjljZSwgMHg0ODEwZGVjNCwgMHhlZjNiMDJlNywgMHhlZjBiYTk3YiwgMHg5ZDk2MmY3MSwgMHhmNTgyM2Y0YiwKLQkweDU3Yjc0ZWNjLCAweDRhMmY3YzIzLCAweGExZmJmOTk2LCAweGRmZmJhMmMxLCAweDhjOWU2MmQyLCAweGYyZTMzNWRkLAotCTB4Nzc0ZTUwZWIsIDB4Zjc4MTNkZWMsIDB4NGZiZjRkZTQsIDB4MTlkM2ZlYTYsIDB4YWQ5YThmYmYsIDB4ZGU2Y2Y3ZTUsCi0JMHg4ZWEyYjhlZCwgMHgxZWVmZjE4MCwgMHhiY2JjNTEyNywgMHg0NjhlNjBjMywgMHhjMGExNmVmYiwgMHg1YzY5ZjNkNywKLQkweDNmNWMyZjdlLCAweGViZmQxMTM0LCAweGJkZGY3MWJiLCAweDVhNzMzZDFmLCAweDBmZGU1M2I0LCAweGZjN2NjODliLAotCTB4ZmJjNTRmOWIsIDB4ZmVmOGQzNGYsIDB4ZmUzOGIwZmMsIDB4YWU4MzdmM2UsIDB4NGIwODJlMjMsIDB4NGEwOTNiOGQsCi0JMHg0ZWMyNzU4ZCwgMHg1OGI0Y2Y1YywgMHhlMTE1YjM5NiwgMHgzNzhmMjhmOCwgMHg5Yjk4MTg3NiwgMHg4ZDNlYjFlOCwKLQkweDNkNjc2YWUwLCAweDNhZTM4ZjFkLCAweDNhZDA0NmVhLCAweGEzOWJjNjNhLCAweDcxMGU1ZWU5LCAweDMzMTJlYjdmLAotCTB4ZTMxZDRmOTcsIDB4OThjZTc3ZjksIDB4YTkyMTRkZGIsIDB4MWVmMDdmOWMsIDB4YTUwMmM1ZDcsIDB4M2Q1NjU3NjcsCi0JMHg1YmI0MWI3OSwgMHhlNzRmNGFiYywgMHg3ZDNjOTczNSwgMHg4YjJiZjkyZiwgMHhhNzNhNjQ2YiwgMHhkZWZiMzZjOSwKLQkweGM0ZmEwYWUzLCAweGJmZjNmMzhkLCAweGRlZmZkNThmLCAweGQyMzljNDU1LCAweDg5NjZmZTQxLCAweDk1NTg2OGU4LAotCTB4ZjFmYjhiNTUsIDB4NGVjMDViM2QsIDB4NDZmOWY3ODAsIDB4MDVkYTNjNzcsIDB4NzU4MzU2ZjksIDB4YmRjZmQ0OGQsCi0JMHhkYzAxZGZhYywgMHg2YjllZjBiMiwgMHhjZjkzZjE0NiwgMHhlMDFmZWRkMywgMHgyZjU2MTc3NywgMHgwMzUwN2JhNCwKLQkweDE3MTRlZDUzLCAweDIxN2UwNjFiLCAweDQ4NDEzZmRhLCAweDY5ZDcwMDNmLCAweDdmYmE1ZTAwLCAweDg5MWVkZDQyLAotCTB4MzRmYWNmZmUsIDB4OWNjNDNjZjEsIDB4MzRiYTI0NjgsIDB4MGVlN2U0MzAsIDB4ZTcxMTM5OGQsIDB4YTBjZWIxZDcsCi0JMHg2ZDMxOTk0MiwgMHhlMDRmYTcwZCwgMHgzNDdhYmQxYiwgMHgwMTYwMzM5ZSwgMHg0YmJmYmZjOCwgMHg2ZjM5NzRlMywKLQkweDE2YWYzYWI1LCAweDZkNDA0M2VhLCAweDZlOTA0MjliLCAweDRlN2QxMTQ2LCAweDUwZWJkYWI2LCAweDE4ZjU3ZGFmLAotCTB4NzM3MjhiMWIsIDB4N2MyZGU2ZjEsIDB4NGNmZjAyNWUsIDB4MzRlNzQ2ZGQsIDB4MTk4ZmFhYmYsIDB4MGEwNjc5OGQsCi0JMHg0ZWI2NGMzZCwgMHg0ZGU2OWIzOCwgMHg4NDQ5ZjcwNywgMHgzMWNmNTg3ZiwgMHhlYjFhMzdkNCwgMHgyZjVjNGVhMiwKLQkweGY0OGMzZjNjLCAweDliODI2ZDMxLCAweGU1YjIxMmYyLCAweGJjZmRmYTEyLCAweGY3NDYwOGRlLCAweGNlMzJmNGYyLAotCTB4ZDQxYmJkYWYsIDB4MzkxNDY3YTQsIDB4YTAwM2M4YTEsIDB4ZDM5ZTFiMDcsIDB4N2ZmZGYwNTUsIDB4ZjIyODdmNjUsCi0JMHg3MjQzZTAwNiwgMHg4YTFiOTE0NSwgMHg0YmU4NTE3YywgMHg3NGZlMzM5MSwgMHg3Y2MwMWYzNSwgMHg0ZmVhNjhlNywKLQkweDYzOTE0Y2YyLCAweDY4ZDUwZWI4LCAweGYwNTE3YzhmLCAweDVlMzBkOWFjLCAweDgxNTc3MTQ1LCAweGQyZjk2Y2U3LAotCTB4ODcwODgzOWUsIDB4MmRkOTIzMDIsIDB4ZWEzMTcwN2QsIDB4NWFkMTJlMDksIDB4Y2ZmNzg0ZDYsIDB4Yjc5NDNkNTYsCi0JMHhlM2QyMjk3NywgMHhkMDYzNzMyZiwgMHhlMDViOThmZSwgMHhhN2YyOWU3YiwgMHgyOGU3YmUxNSwgMHgzZGY0YWMxNywKLQkweGU1NmYzOTQ3LCAweGZjNjI4ZTlmLCAweDBmYjAwZDg5LCAweDljZmMwNzRiLCAweDE3YjllNWY5LCAweGVmZWE4NjNlLAotCTB4ODEzMTc5N2UsIDB4ZWE5N2Q5ZmIsIDB4YWVlZmM1OWYsIDB4NjhmMzEwMGEsIDB4YTU1YWYzZTcsIDB4NGMzMWJkMjUsCi0JMHgwZmY4ODFkOCwgMHg3MTg4YjJmMSwgMHgxMzE4NWQzZSwgMHhkZmY1MDI3YywgMHgwOTNmMTA1ZiwgMHhmMWMxZmZiOCwKLQkweDY3ZTA0NjczLCAweGU4MGZjMjExLCAweGFlM2FlMTdlLCAweDEyMWMzYTk3LCAweGFkMTYyM2M1LCAweGMxYmE3YzE1LAotCTB4ZTdmNDdjZjcsIDB4MzAzZGFjOTEsIDB4ZmE4ZTczY2UsIDB4YTMxMmM3ZjMsIDB4NzM5NWFmOTEsIDB4ZmMwZGY2ZDMsCi0JMHhmMmI0YjU1YywgMHg3NjJmZDkxOCwgMHg4NzJkN2VlNSwgMHgyYjVhZmRkZiwgMHhlYmY5Zjk1YiwgMHhjZDczZGY3NiwKLQkweDJkMzYxOTgxLCAweGY3MTgyYmM1LCAweDFmMjUxNmEzLCAweGQ1MzZmOWUxLCAweGJiZjcxOTkyLCAweGZjZjNjNWYzLAotCTB4YjljZjkyMGQsIDB4MWU3NDljYjksIDB4YTY5OGRhMTcsIDB4YTNiNjNjMjYsIDB4Y2FmMTQyOWQsIDB4MGEyZmQyNmEsCi0JMHhhMGRjODI5ZCwgMHhkNWY5N2M3MywgMHhiZDRiYjRhMywgMHhmMTIyZThlNCwgMHhjYWIyNzE3YywgMHgzNmQ3NzdlNywKLQkweGViZmRmMWE2LCAweDE4MWE2NDc2LCAweGFjNzI1Mzc3LCAweDNiYzkwOTc2LCAweDk1NDdjNTBiLCAweDQ3OTI4YmY2LAotCTB4YzFiOGM3YWYsIDB4ZWJmOGNkYTIsIDB4MzNmZTllNDcsIDB4MzY3Y2Y5ZDMsIDB4ZGM5NGY5OGEsIDB4ZTVmN2NlNDAsCi0JMHhiNzlmZTE1NSwgMHg5ZmM5YmNkMywgMHhmNzc1N2EyZSwgMHgwMzNiZjhhYiwgMHg5MWQ1N2Y0NSwgMHgyOTFhMjk5ZSwKLQkweDlkNTNkOWY2LCAweDNlZDJmNzU5LCAweDU1ZDczZjMyLCAweDY5M2RmMDI2LCAweGU4NDE2N2Y3LCAweGYyMzc5NDI3LAotCTB4ZWNhMWIyZmIsIDB4NTU2Y2IyYzAsIDB4NjVmYmY5MDEsIDB4OTA4N2UwNTYsIDB4ZGZiZmYzZWIsIDB4NDFhZmY1N2UsCi0JMHg4OGVjYmUzYywgMHg0N2ZmYmYxMiwgMHhkNjU1NjNiZiwgMHgxZmM1MDVmOCwgMHg2NDc3MmVkMCwgMHg0Zjk0NzhkMCwKLQkweDVjYmZkZmVlLCAweGZiODgyZWZhLCAweDk3MDRlZGIxLCAweDg0ZGY0M2VjLCAweDVmZjYzY2QxLCAweGY5NzliOGE1LAotCTB4ZjY2MTc1YTEsIDB4ZGQ3ZGQ2N2UsIDB4Y2YxMTAxMzksIDB4MmFmODE3MjgsIDB4ZTBhZjliNjcsIDB4YWFmOTVhZmUsCi0JMHhjODJjZjNkYywgMHhiZjdmYmUzMywgMHhjZTIyZTk3NSwgMHg4ZGJiMWI3MCwgMHg0Y2Q1ZDZmMiwgMHg1Y2NmN2RlNSwKLQkweDA3ZTEzM2FmLCAweGI3Y2IyNWYzLCAweGJkOWQ3M2YyLCAweGRjMDBjYjZhLCAweGU3MTZlYjk3LCAweDFkZGJmY2I0LAotCTB4YzM3ZWU3NGYsIDB4MGMyN2UwNjUsIDB4YzgzNzc0NDQsIDB4ZGRkM2NmYjQsIDB4NjU3OGUzYzAsIDB4ZTJiNTRmMGQsCi0JMHg3MDMyZDhmOSwgMHg5NTlkOTE5YywgMHg4ZDY1NDQ3MywgMHhlYjdiZDMzMiwgMHgxYTQ3Y2MzNSwgMHgxNjc5ZTM3OCwKLQkweGZkZDEzNmVmLCAweGM5MmU4NTM0LCAweGU5ZjMwZjU2LCAweDkwNjk3ZjA1LCAweDE2NWU3Y2Q3LCAweDczYWM1NTc0LAotCTB4Y2FmOGUxNjUsIDB4NzIxMDVmZmMsIDB4ZDg1NzY5NGMsIDB4Yjc5ZDE0ZjIsIDB4NjQ1ZDc2ODUsIDB4OTAzZWZjOWYsCi0JMHg5ZWIyZmRmMSwgMHhjZWNmMzgxMywgMHg3ZjY4NjM2ZCwgMHhiN2I1ZDBhYiwgMHgwZDhmZTI4YywgMHg3MmI3OTQ4MSwKLQkweDdlN2JlMzUxLCAweGRlZjg5ZjdiLCAweDY3NmU3NGJlLCAweDI0ZGU2Mjc0LCAweGE2NTU3ZmY2LCAweDEzY2UxOWI4LAotCTB4ZTRhMmYxZjksIDB4MmNkMWNmOWIsIDB4NzNhNzM1ZmEsIDB4M2E3ZTY1M2IsIDB4N2RhNTAzZTcsIDB4MjgyM2FiYTEsCi0JMHg2ZjlmZGExZSwgMHg2Zjk1MTNmYSwgMHg2ZjdjN2I2MSwgMHhiZDQ3NGI2YywgMHg5MDMxYmU3OSwgMHg2ZjllZDNjZSwKLQkweDBkZTczZTdjLCAweGQ3NjVkZWY4LCAweDhiYzk1MGY4LCAweGYzYTc0ZWJmLCAweDZkZTVlNWY4LCAweDczYjA1Y2UyLAotCTB4ZTI2NzM4YTAsIDB4MzY3NGY1YTIsIDB4NWZlODQ5NDQsIDB4YWZmYzhhOTYsIDB4NDE3ZGM2Y2UsIDB4Yzc1ZmUyMmEsCi0JMHg2MjdiZjY3ZiwgMHhlZmJiYWZiMywgMHgyNjRjNzdhYywgMHhmNzZjYmY5ZSwgMHg3ZmVjZWZiOSwgMHhmMTMyZmM2YiwKLQkweDEzY2FhOGRjLCAweGI3YmZlMWRmLCAweDVkZGY5NGNhLCAweDRhNzZmMzMxLCAweDQ4ZmU3NjNjLCAweDBlNzgwM2NiLAotCTB4N2ZjN2JkOTcsIDB4ZmVlYzBkOTcsIDB4OWEzZmQxNjcsIDB4ZTQ4MWM3ZmYsIDB4YWRlZmUyN2YsIDB4ZjdlYmZkNjAsCi0JMHhmY2Q5YmVmOSwgMHg0NGFlNDIzMSwgMHg0Y2JlNTNiNCwgMHgxZmI3MGM0NywgMHhjYzQ4MzY0YSwgMHgwNjJiNzAwNiwKLQkweDY4MDA3MmZhLCAweGIzMzI5YzRiLCAweDIzMWRmZGUzLCAweDI3NzJmZWY5LCAweDI0NzZiZmQwLCAweDY3Y2EwYmM5LAotCTB4MWRmZTAzMzksIDB4NmJjMTBlZmQsIDB4MjRiOTNmN2MsIDB4ZTc4ODlkZDYsIDB4NWU0NTNiMDMsIDB4M2I4ODQ5NDEsCi0JMHg3YjhjMjA3MSwgMHhjOTQ5ZDA0OSwgMHhiN2EyNzc0YywgMHhkZGIyNTM3ZiwgMHg5NzM1Nzk0ZCwgMHhiZTFkM2U0NCwKLQkweGM5NWU3OGM3LCAweDIzYWVkZTY4LCAweGU3NDVkY2M2LCAweDE4OWJmNjM4LCAweDgzYWFhYmRhLCAweGQyYzNhMjI2LAotCTB4YmRkYjBkOTcsIDB4NDY5OWQ1Y2YsIDB4OTJmZmZiNzIsIDB4ZWUxYmRmOTYsIDB4NTNlN2MxZDgsIDB4ZTM0ZDU0MTgsCi0JMHg1ZGY0MTI1YywgMHhmMzRkNTAxOCwgMHgyOWNlMjMzYiwgMHhiZDc5NmExNywgMHhiZWU4YzM0MywgMHhmYzVkOWVmZSwKLQkweDkxOGJhMTNlLCAweDNiZjAwNzZkLCAweDUwYTU3NzE3LCAweDhjNDc2OWRlLCAweGJkMTM2OTczLCAweDQ1MjY3OWU3LAotCTB4MzhkY2U4YWYsIDB4NGNiYjBiYWYsIDB4ZjcyODJlNzQsIDB4OWY2OTViOTcsIDB4Mjc0ZWI3YjEsIDB4YzJlMWRjNjEsCi0JMHgxZWU3NDYyMCwgMHgyMjBmZDQyZSwgMHhiMjQxN2Q3ZCwgMHhjMmYzN2M1MCwgMHhiYzY5MDNiYiwgMHg3NDk1Y2FhMiwKLQkweGM0MDhhNWJlLCAweDUwOWRkYTA0LCAweDc2YmRhMmU2LCAweDY4YjlmZWExLCAweDZmYTg1ZmU0LCAweDU1OWRiYWMwLAotCTB4ZjIzOWZmY2YsIDB4YmJmZTRlZTksIDB4Zjk1ZjE3MTAsIDB4YmVmNzhhN2IsIDB4ZWZmYTUyOGYsIDB4NTRmODI4OWYsCi0JMHhlNDhkYTdkZSwgMHg5MjM2OThmYywgMHg5MWE4ZjNmMywgMHgzYmRlN2U2NiwgMHgyYzRjZjVkMCwgMHgzN2YzOGZhZCwKLQkweDAyZmM5OWMwLCAweGFmYmEyN2UwLCAweDM5YWI4Y2U3LCAweDhhNzE4MjRjLCAweGE4NmM5YTBlLCAweGVlMzQzYmRmLAotCTB4MGUwOWU3YzQsIDB4Nzg3N2UyODEsIDB4MTc4NWY5MTgsIDB4YmYyNDBjNzYsIDB4MWE2OGFjMWMsIDB4MzQ4ZWMyZTcsCi0JMHhmMjUyZDNjYSwgMHhhZGExYTY0ZCwgMHgyMzRjNzg0NiwgMHhkYmNiNjZmOCwgMHhlNWZlZTlkMiwgMHhjN2NhNDBiYSwKLQkweDM2ZmM3YTI5LCAweGM4OWZlNTE1LCAweDdhMmVlZWRjLCAweDUxMzRmMTc1LCAweDRkN2VlMWI3LCAweGExN2ZjZmQxLAotCTB4OTNlMjhiYzAsIDB4ODk2OTVlNGEsIDB4OGZhNWEzOTAsIDB4ZjMwMDMxZGYsIDB4NjUxZmQ5NzAsIDB4YWFiYjkzY2EsCi0JMHhmZThmNzllNiwgMHg0OGU1Zjk3MCwgMHhiYzBmNDcyMSwgMHgwMjViN2M0MCwgMHhjM2JmOGU3NCwgMHhjMmYyMmM1NCwKLQkweDcxZTE1ZjhiLCAweDc3ZjVlMjk2LCAweGYxZjI0YjNjLCAweGRlNjE4Njg0LCAweDUzZDcyNWVmLCAweDJmNzBkZTQxLAotCTB4OTZlNWM5MTgsIDB4ZGE5NWJmYTcsIDB4ZGU3YjQzMTcsIDB4OWEyMGJkZmYsIDB4ZTUwZDBlY2YsIDB4ZWJlM2ZiMjksCi0JMHgyMmJmZmI5NiwgMHg4YmZkNWJmZiwgMHhmNDA3NjA1YywgMHg5NTdjMWZiMywgMHg1N2YyM2RiNSwgMHgwNjBkMDM5NCwKLQkweGYyOWU4M2FiLCAweDhkNGViZGZjLCAweGRmM2YyOTZiLCAweGQwZjkyMDYwLCAweGFmN2UyYzE5LCAweDExZTc5MmI1LAotCTB4ZmE5ZmFmMTQsIDB4Mzg1N2NhNmIsIDB4Njk5ZDJmNzUsIDB4N2ZlY2U2NWEsIDB4YTQ3NGFlYmYsIDB4MGY4YmVmODYsCi0JMHgzZTQwMGViNCwgMHhlMDdjMDUyYywgMHgzYTFmODA3OCwgMHhhOGZlY2U1ZiwgMHhlYmZlZmVhMSwgMHhjYjkyM2E5OSwKLQkweGRjM2UzZWY1LCAweDNiYTFmM2MzLCAweDc0YmM3MzA3LCAweDdhNDQ5YWJlLCAweGQzOTgyM2E3LCAweGZjOTdjYzM1LAotCTB4NWU2MGNlZDQsIDB4ZTYwNGEyNTIsIDB4M2QzOTk4ZGYsIDB4OTE3NzhlNzQsIDB4ZWQyOWRkZmYsIDB4YzM0M2IyYTUsCi0JMHgxNGFkMTVmYiwgMHhlNmUyMmJiZiwgMHg0ODI1MjNmOSwgMHhmZjc4NzFiMywgMHhiNDM2ZTZjZiwgMHg2NzFlNTAzYiwKLQkweGFkZDJhNjhkLCAweDFlZmViOTBiLCAweGYyNjNhMDc2LCAweDdlMGE4ZWVmLCAweGU4NzBmMjUyLCAweGFlMjgwMTc3LAotCTB4M2NhMmQyZTksIDB4YWZiYjBiYjUsIDB4ZGZmYWUxYTQsIDB4ZWZlN2UwOGIsIDB4YWU0M2NhMjUsIDB4ZmIyOTI5MWIsCi0JMHg1NDA3OTRlYywgMHgyYjNjMjVjYywgMHg5ZmI0NDg3NiwgMHhhMWY2YmM1ZiwgMHhlMmZiYTQ0MiwgMHg5MTczMmQ4YSwKLQkweDE0NzU5NDFmLCAweGZhMmU1OWFiLCAweDRjOTIxZDQ5LCAweDdlYmYwMWYzLCAweGViZDRjY2MxLCAweGY3YzBhN2JmLAotCTB4MTk3Y2NhZjcsIDB4M2QyN2NmZGYsIDB4NmZiNmJjMDMsIDB4NTNiMTQ1YTQsIDB4NTc4YzM1NTksIDB4NGNkYTU2YjIsCi0JMHhmYzUxODlkZiwgMHgwNTNlYmU0ZSwgMHg4M2VmYjg0ZSwgMHgzYzRhOGNmOSwgMHg1N2ViNDZlMCwgMHhmOWEzNzllNiwKLQkweDc1ZTQyM2JjLCAweGQ3ZTU4YzQ3LCAweDFmZGYxMGUzLCAweGFlNGYyNGM4LCAweDQwNjYzNzdlLCAweDZkZDgwZmM4LAotCTB4Y2FhMTRiZjQsIDB4MGZmZjMwNzgsIDB4MzhjMTE3NTEsIDB4NTY3OTBhY2YsIDB4NzljM2YzMGMsIDB4ZmRmMzZlMjYsCi0JMHgzYWU0ODA3ZCwgMHgwNmYwZmFkZiwgMHhhMzZhN2FkZiwgMHhjNWJkM2Q2ZiwgMHhkYjdkNmViNywgMHhkZjgyZGViNywKLQkweDA5YzBmNGNkLCAweDA3M2M2MWZkLCAweDg3OWM1M2IxLCAweGNmMTg3ZjQwLCAweDhjM2ZhMTMzLCAweGIxODdmNDc1LAotCTB4OWYxODdmNDQsIDB4NzU4YzNmYTMsIDB4OGViMTg3ZjQsIDB4ODkyNWIwZmUsIDB4YTI1OGMzZmIsIDB4NjVjZjhjM2YsCi0JMHg0OTUzODcyYiwgMHgwMjNmOGYyZCwgMHgyZmI0NmMxZSwgMHg1ZGY5NDczZiwgMHhkMTBiZjAwYSwgMHg0MjFjMmQxZSwKLQkweDdjYzYxZDc2LCAweDdlOTU3N2U5LCAweGQyMjk2ZDc5LCAweGZkOTMwY2QxLCAweGNjNGNjOGQyLCAweDFmNWI2YWM3LAotCTB4ZjJmZGVkODksIDB4MWI0NjRhOTQsIDB4Njg2ZjE4OGMsIDB4M2Q3ZTc3NWYsIDB4MjYyOTIxOWEsIDB4YWY2YzE1ZmIsCi0JMHhhZTk1MmZlNCwgMHg0ZjdlOGI3YywgMHhlNWI1N2RhZiwgMHg3OGUxM2Y4ZiwgMHhmMjg3YjhhMiwgMHg3ODQ1NGY3YiwKLQkweDcxNGNiZTRmLCAweGY4YTMzZDJlLCAweGRmZGY1NTllLCAweGY5ZmVkYzNkLCAweDY3OWFiNzQ2LCAweDU4MDFmZmY0LAotCTB4MDBkYjhiYmIsIDB4MDAwMGRiOGIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2NjZGZmMDAsIDB4ZDU5NDc0MGIsCi0JMHhlNmZlZWZiZCwgMHg0OTMyNDk5NSwgMHg0MWU0MjEyNiwgMHgyMWU0Y2MyMCwgMHg0OTM4OTMxMSwgMHg0NzExNGJjOCwKLQkweGE4ZDUzMDQ4LCAweDY4NGQ0M2MzLCAweDQwOTIxMzhjLCAweGEzYzMwNDgwLCAweDdiOTZjNGViLCAweGE0NDAxODMzLAotCTB4NTFiNzhkNzAsIDB4YTEzYTM5NTEsIDB4ZTg1ZGU5NGEsIDB4YjY5NTBhMDksIDB4MTAwNjczOWMsIDB4NGU2ZDhhYzUsCi0JMHhiNmFiYWQ1YiwgMHhhOTA3ODgzOCwgMHg2ODM0OTY4NywgMHg2OWVkZWM1NywgMHhkZmY3ZmZlZiwgMHhiZWY5OTdkZiwKLQkweGJjN2I1MjQ5LCAweGFjZGQ3N2FiLCAweDdiZmU3YmE1LCAweGZlM2Y2ZmVmLCAweGVmZmZmZGVmLCAweGZjNDIxMDhkLAotCTB4ZmI1YmZlODUsIDB4ZGFmMDhjN2MsIDB4ODVmZGZmMDUsIDB4NDQyZmRmZmYsIDB4NTljZjEwYjksIDB4MGU5ZDMyNDcsCi0JMHhkNzdjMmUyMSwgMHg0ZjVjNWJiZSwgMHgxODY4YWM2NSwgMHgwNmU2YTQyYSwgMHgwOWE0NDliYiwgMHhiOGRmMTFiMSwKLQkweDUzMzVhODg0LCAweGVmMDQ3OWE3LCAweDI4YzdmNjUxLCAweGE0ZjM0YzQyLCAweDg4NWQzMTA4LCAweDQ5ZjkzM2QxLAotCTB4MDVmZmZhODIsIDB4MmM0ZjM3N2YsIDB4YThjYWM3NWIsIDB4YWRkZTBlYjMsIDB4NmNjZjMwOTgsIDB4NTQ4YWYwOWIsCi0JMHg3MzVkZmIxYSwgMHg0ZjFhMDVmMCwgMHhhMjRkNzlkNCwgMHhlYTRkODg0MiwgMHgzNWVjZTcxYSwgMHg1OTEwNTEwOSwKLQkweDM4YzFiNWVmLCAweGJmZWI3NDIxLCAweDAxOGE2MGVlLCAweDYxOWExYTJlLCAweGIxZmQ3ZmU4LCAweDQ5N2I0MzFjLAotCTB4YmRhMWFlNjgsIDB4MTNkNmY5NmQsIDB4OTYyMTQ0ZTYsIDB4ZjQzMzJlZWQsIDB4YmMxMTZhYmIsIDB4YTdjZmFiY2YsCi0JMHhlYTZlMDMwNywgMHhmMGQxYmJlNywgMHgzYWVhMTA5ZCwgMHg5MzZlYjI5ZCwgMHhjM2ZjZTQ3NSwgMHhkMWQzN2ZkNCwKLQkweGUzMDA0ZjRjLCAweDJmMGIzNWVlLCAweDhkMDNiN2VkLCAweDJiNjQ0MmE1LCAweDRmMTgxZDgxLCAweDE3OWUyYTBjLAotCTB4NmE1NmJjNjgsIDB4ZThiYjUzZjcsIDB4OWQzOGYzYjEsIDB4MmMzYjdlMmEsIDB4MmRhNGUwMjIsIDB4OWJmMzQ0N2QsCi0JMHhkMWU3N2ZhOSwgMHhjMjU2ZTBmNCwgMHhjOWM2MWY0YiwgMHhmMGE3NzZhNCwgMHg2Yjc4ZDMyNiwgMHg4NzE3MGVlNiwKLQkweDZmMzU5YzY4LCAweGQwNDJiYjdlLCAweDgzY2NiYjE2LCAweDIxNWNjZWQ5LCAweDAzYzEyYjM2LCAweDlmMTBiMzRlLAotCTB4YWI0ZTFjYTQsIDB4ZDk4Nzc2YTYsIDB4ZjQ0M2M4YmYsIDB4ZmNhNjdjYjksIDB4ZTc4NDU1YzcsIDB4MWVjYzg3Y2IsCi0JMHgwZDZkOTNjYywgMHgyOTEyOTVhNSwgMHhhYjI2ODM4NSwgMHgwMzhjZWMwNiwgMHhjZGZiMDdmZCwgMHg2M2EyNDE3NSwKLQkweDljYzNhZDE2LCAweGMxOGZlMTEyLCAweDc5NzE2OWZlLCAweDM1YmVjODhlLCAweDBiNmQ5ODdlLCAweDdkODRkY2NkLAotCTB4NzllYjFjYmQsIDB4MGEzZjgwNDEsIDB4OWRiYzYyZWYsIDB4OGZlMDJiMzEsIDB4ODA5NDViOGUsIDB4M2VjOGZhZWQsCi0JMHg3N2U1M2EzNywgMHhlYTNlN2VkYSwgMHg3YzA2MzJhNSwgMHhkYjNlNjVlNiwgMHhiZTVmYjZhYywgMHg4YmIxNDRmNiwKLQkweDdiZDlkMWY2LCAweDJjNGNkYjJjLCAweGU4NzRjZWIwLCAweDAxOTUyNjQwLCAweGZiMTliZmJiLCAweGZmY2MxOGU5LAotCTB4Njc5YTdjYzUsIDB4NjE2NjNiZWQsIDB4M2VmZmZlYTYsIDB4OWFiMTI4YjAsIDB4OGJjOWY3ZjYsIDB4YzEzZDRmNTYsCi0JMHhkYjdmZjcwZiwgMHhhYzdkYTYxNiwgMHgxZTZkMDRiNSwgMHgzYmJlM2IyYSwgMHg3OTUyZjM2OCwgMHhhZTQxYzFlYiwKLQkweDY1YjA3NTVmLCAweGI1NzVmODMxLCAweDdkODFkZWU4LCAweGJmMTJiMjVmLCAweGIxZDFmMGViLCAweGE0ZTdkOTUwLAotCTB4MzFlZWJmNzUsIDB4YzQ3NzdmMzEsIDB4NmJkYTNmMDksIDB4YTc0ZmYzY2QsIDB4OTUwNzdmNjIsIDB4Yjk3YjJjMTIsCi0JMHg4NWFkYjBlZiwgMHg3ZWQ0N2JlYSwgMHg3YTMyZjJkMSwgMHg3NGVkNTk3NiwgMHhhNDNhM2ZlYSwgMHg5MmE3ZGUzMCwKLQkweGQ3NDNiYjhmLCAweDFiMmM3Y2IyLCAweDdjYjk3MzczLCAweDg4MjEzYWVjLCAweGJlMTFkZjI1LCAweGE1NzQ0MTIyLAotCTB4M2VmMDFhYjUsIDB4ZmNjY2Q2N2EsIDB4MWNkYzdhMzksIDB4ODc0OWY0MTQsIDB4MGNiYTk0MmQsIDB4MmIxN2Y4NzQsCi0JMHhmODhiYTFkMywgMHhhNGY4OGFhNywgMHg0MGRmN2U4YiwgMHhkOWJlNmZhNSwgMHhkNDBmYmZjMCwgMHhiZGY4MWJjNCwKLQkweDg4ZTRlODQxLCAweGNjNDdiYmM2LCAweGViY2JjMDMwLCAweGVmZmQwZDczLCAweDk0NWQ3ZTVkLCAweGRhNDY5NDNjLAotCTB4MGRmZmY4Y2QsIDB4YmI4Mjc2OTEsIDB4NGE1YzA0YjYsIDB4YzY4NWEwMjIsIDB4MzBiNzJhN2EsIDB4Zjg2NmRkOWYsCi0JMHg4ZDJjNGJiZSwgMHgzZjlmMDNmNCwgMHg2NzhjNmZmZiwgMHg0YjZkODYyMSwgMHgyNmJmNjg4YiwgMHhhZmQxMDdhMiwKLQkweGFkNWU3ZmMxLCAweDZkM2Q3MzBmLCAweGIzOTcyMGM0LCAweDk4YmYzZDczLCAweGYyMzE3YzRmLCAweDQ3ZWM1NWI2LAotCTB4ZGYwODlmYzUsIDB4N2Y0NmU4MTUsIDB4MjBlOTEzYjksIDB4OWQ1YTExMDQsIDB4YjFkNjg5MzcsIDB4YTljOTA4ZmUsCi0JMHg2MThhNWY0MSwgMHgwNmViMTdkMCwgMHg3NGI2YmExZCwgMHgyYTYyOGJkNCwgMHhiNDA1OWJlOSwgMHhiMGMwYWU4ZiwKLQkweGY4YzFkYmFkLCAweDRhMTE2NGI3LCAweGEyMmJmN2Q2LCAweGRiZmI4NTI3LCAweGJjMjQ1MmIzLCAweGFjNDdmNTA1LAotCTB4Zjg3NTg2MWYsIDB4Njg2Mzc4YzMsIDB4ODE2ZTYzM2YsIDB4YWZiNzQ0YmMsIDB4YWMwYjdkYTcsIDB4M2RmZWVjNDcsCi0JMHgyZGZhZDVmNCwgMHhkZTYzMWY3NSwgMHhlYTNjZGFmNSwgMHhhZTlmMWFmOCwgMHhlYmRmNGJkZSwgMHg5ZTNkMWRkNiwKLQkweDcyYzVjNGEzLCAweGUxZTBmNmJkLCAweDdlMTA2N2Q3LCAweDRiOTJmOTk2LCAweDQzOWQ0NzIwLCAweDg1MmRhYzRiLAotCTB4ZDM0ZGY5MTMsIDB4OWEwZjU3ZmIsIDB4ZjA2ZTMxODMsIDB4YjdlNjI5ZGYsIDB4OGY1NjgzZDEsIDB4YjJmMDFiZjgsCi0JMHgwZjE4MmJkZSwgMHg4YWI4N2NkMSwgMHhmOWE3NjVmNiwgMHgzYzUxMWQ1NywgMHgwM2Y2NDU0MSwgMHhmMTQ2ZDY3ZSwKLQkweDlhY2RjNjI3LCAweGJlMWE2ZjA0LCAweGQ1MTdmMWM2LCAweDY4M2YxYWJlLCAweDI5OGZhYjlkLCAweDA5Y2JlODQxLAotCTB4YTdjNjg5NzgsIDB4M2YyYWNmM2EsIDB4MGFlYjkwZmQsIDB4YzZhMmJhZjIsIDB4ZjJkMTU1MTUsIDB4ZmU4NmM5YjgsCi0JMHhlMTE0ZmJhMywgMHgxZjE4YmU1NCwgMHgyYzZjYzc0YiwgMHhlNTczYjNkZiwgMHgyYThlNDdmZSwgMHhkZGY0ZmQ5ZSwKLQkweGFlMTY2MzNkLCAweDFmMWZlNzFmLCAweGYyMTRhZGUxLCAweDkyMWYwMTM3LCAweDdlNTI3YzlmLCAweGUzNGIxZWVlLAotCTB4N2M1ZWZlZWYsIDB4MzRmYzQ1ZjUsIDB4ZWZkYzU3M2IsIDB4N2FmNDQ0NzMsIDB4NjIxZTllNDQsIDB4NDkyOTRiM2UsCi0JMHg1YjQ4YmQ0OCwgMHhhY2U1ZGZhMCwgMHgzYjNkNTQxZiwgMHg0ZDI0M2U5NSwgMHhmYzk0ZmFjZiwgMHg3MWU3ZTYwMywKLQkweGY4OTRlM2JiLCAweGE1NzU2OGRjLCAweGViNGY4MzI3LCAweGQ0NjhmNjhjLCAweGQ2NGE0YWUyLCAweDY0MmQyMWY5LAotCTB4YzBkMzVkNjcsIDB4YzJkMzMzYmYsIDB4NjA5ZjhlMzQsIDB4NGY0ZDU3ZTgsIDB4NzZmMWQ1ZmIsIDB4MGVjZGNiNmMsCi0JMHg2ZmYzYmVlYiwgMHhlYTA5YTZiNywgMHgxYTc1YmQ5ZiwgMHhjZWIxMmQ5NywgMHg5NjkxZDgzNCwgMHhlYzFmNjZhZCwKLQkweGE0OGY4N2UzLCAweDVmMTE1NWE3LCAweDlhZGRiODdkLCAweDdjNDM0ZjVhLCAweDZjYmNlMGY4LCAweDk2YjgwNDUxLAotCTB4YzU4ZjBiY2IsIDB4MTMxZDA0MzQsIDB4NjI1ZDU1ZjcsIDB4ZmQ3NDdjNjIsIDB4YWVkOGY3ZjcsIDB4MzY3NGQ2ZmQsCi0JMHhiNzcyMDFiMSwgMHgxNTYyNjhmZCwgMHhmYjZlYjM4ZCwgMHg2NDljMmFjZiwgMHhmZTRjODdjZiwgMHhmZmRhMTJiYSwKLQkweGRiMjBjYTI3LCAweDJjMWNlMTczLCAweGZjNDUxNWY2LCAweDZiZGJiNTg5LCAweDNiZjc2MWQzLCAweDU5ZWE3Y2ZmLAotCTB4NTZmZjdkZDgsIDB4Zjg4OTlhNmIsIDB4MjczZjM3ZTgsIDB4M2RiMGE4N2IsIDB4NTJlMjNmNjMsIDB4NGJlM2U0YWMsCi0JMHhmYjA3YzQyZiwgMHgyOTJmZmY4OCwgMHhmNTRiMWJjMiwgMHg4YTI3Y2M2YiwgMHg3YWZiMDY5ZCwgMHhmZmNjMWVmYywKLQkweGI3OWE3NmNmLCAweDBmMDZmMzFjLCAweDRmNWU2MDY0LCAweGViY2MxYWUwLCAweGU0OWY5YWRmLCAweGRkZmUyYmZmLAotCTB4N2ZhNTdiMDMsIDB4ZTdiNTQwNzcsIDB4YTAzMjg4NTcsIDB4M2I1ZWMxZGIsIDB4OTdhYmZmYzMsIDB4ODg0NzNkMTAsCi0JMHgwYzE5YmQ0MywgMHhlMmViZDRiZiwgMHg4MGI3YTg3MiwgMHgzOTE0ZDdlYiwgMHg0NmZiYmQyNSwgMHgzY2QyMzY0YSwKLQkweGEwYTI4NTgxLCAweGEzYWRlZDliLCAweGRmZWI0MmMwLCAweGUwNzljNGE0LCAweDNjNTI2YzRmLCAweGZkZDA0ZWU5LAotCTB4Y2VkMmM5ZTcsIDB4NWU4YmY0YWEsIDB4ZTQyMzRkY2YsIDB4ZjNmOGU5ODMsIDB4NjhiYjMxZTYsIDB4MmRlZmYxZDMsCi0JMHgyZjAwZDkyMiwgMHhmYTFhNjdiMiwgMHg4NmRkM2FkNywgMHhhZTMzNWJmNiwgMHhjNTdmYjQzNSwgMHg2ZjgwNjI1NSwKLQkweGY0MzZhODJmLCAweDhiNzNjM2JmLCAweGVhYWJiZTAxLCAweDRiZmU4NjJiLCAweGYwMGM0YmJjLCAweDQzNDZiYWIyLAotCTB4MmQ3ZGJiZmYsIDB4MWI3YmY2ODYsIDB4MWJkYTE4ZDYsIDB4ZjAwYzFiZmQsIDB4MzQxZTNiNTcsIDB4N2JhZmJmZjQsCi0JMHgyYmRkYTFhYiwgMHhiYmQ4MTY5YywgMHgxNzFmNDRlMywgMHg4ODVmZmRlMSwgMHhiZDM3MjgyZSwgMHhkM2QwZWY5ZCwKLQkweDUzMjJmZTc1LCAweDdjMjRkMGY3LCAweGY0ODk2OGZiLCAweGVhNTE3ZTZmLCAweDk4ZmUwNWRkLCAweDQ4N2M5MjY1LAotCTB4YzNhZTE3YTUsIDB4ZDQyN2IwMzMsIDB4MGE0MjI1OWUsIDB4Mzg2MjJiZmIsIDB4ZGQxMzdjMTMsIDB4N2U3ZGJhMmYsCi0JMHgyZWFiYzlmYywgMHhmNGFkYTFhMiwgMHhlOTBiMDZjMywgMHgyNzk1Zjk4ZCwgMHhiZTA5NzJjYiwgMHgxYjZiZTVmMywKLQkweGU2MWZhNDJkLCAweDJhZjI3OGRmLCAweGI2OTUxZmUwLCAweDMyZmI3MjM1LCAweGMzNDVhZWMxLCAweDA0Mzc2ZmNiLAotCTB4NmZmMzlkNjgsIDB4ODFlZGQ5Y2UsIDB4ZTkxM2YzZGYsIDB4OWZjNTRjZjcsIDB4YmU1Yjc3ZDgsIDB4MTBjYTM3ZGMsCi0JMHg5M2NhMjNmMSwgMHg1ZjI4OGZjNCwgMHhiMzZjN2UyMywgMHhmYzQ3YmY5MiwgMHhhZjRjZjI4OCwgMHhkNDdmZWI4NywKLQkweGQ5ZTVjNTViLCAweDNmOTcyZjVlLCAweDcyZTNhZGVlLCAweGU1YzdkN2I4LCAweGI4MWI3YjRmLCAweDlmYWY3OWZjLAotCTB4YjdiNzdiYmYsIDB4N2FmN2NiODMsIDB4OTdmZWI5YmIsIDB4ZmU1YzNkYmQsIDB4ZjVjMDM3YWEsIDB4MmMyODk2YWYsCi0JMHgwMTAyYjRmZiwgMHgwMzdiMDViZCwgMHg3NzZmNWRmZSwgMHg3N2E0Y2M4NCwgMHhlNWViMzFjNSwgMHhmMjRhYmQ3MSwKLQkweGRkYTU3OGFkLCAweGEyYTk1YzU0LCAweDZlYmVjYTg5LCAweDVjODc4ZTExLCAweDE3YzkyZDg2LCAweDM5ZjhiZTg5LAotCTB4N2EyMzdlZDksIDB4ZWEyZTIyZDQsIDB4YzYxZmFkZmMsIDB4YWY0MjRmN2EsIDB4YzlkMzMxMDgsIDB4ZmZhZDU4ZmEsCi0JMHg2OWVmNTJhNywgMHgxNWVlNWZhZSwgMHg5NzdhN2Q3YSwgMHhkMDIzZmZkYiwgMHhiMmY3MWRmYiwgMHhlYzMzMzJmYywKLQkweDI0ZTlmNzUzLCAweDI0Yzc3YTZhLCAweDkzZTMyNjNhLCAweDU5M2U1NDY3LCAweGM2MmM0ZjYwLCAweDNkODE2ZWY5LAotCTB4YjI3YjA4M2IsIDB4ODNlZTEyYzAsIDB4NGNmYmVhMWUsIDB4M2QyMjFlYjgsIDB4YzZjMTIyNzQsIDB4MTFlZmE5N2EsCi0JMHhjYTEzZmIwYiwgMHg5YmUxODJhNywgMHg3ZGMzMDU1MiwgMHhhMTliMGQ5ZiwgMHgzZDM4MTc3NywgMHg1NDU3NmMxOSwKLQkweDAyMmVjZjM4LCAweGRkNzIyOTQ5LCAweDRhMWU2NzU4LCAweGE3Y2Q1M2MyLCAweGYzYjA0NWUxLCAweDJlNmMzOTM3LAotCTB4NWY5YzA5ZTgsIDB4Y2YzMTRhNjIsIDB4MDJiY2RhYmIsIDB4ZDdiZDUyZTMsIDB4ZmYzZmRmNDYsIDB4Njg5OTA4OTksCi0JMHg1ZmE4YjM1ZCwgMHgxMGE1ZjMyYywgMHg4N2Q4MTcyOCwgMHg4NzkyM2VjZCwgMHgyNzZmNTQ5OSwgMHg5YmQ1MTY3OCwKLQkweDAyZDdiYjY1LCAweDZjM2E3YzNhLCAweDc2YTExZDg2LCAweDAzZGIyNDkxLCAweDdjYzg5NGE2LCAweDJjMTMzYWRhLAotCTB4ZWNhOTdlMzQsIDB4ZTcyYTU4OTcsIDB4MzljMGJjMDEsIDB4M2FkMGEyNTQsIDB4MWUxY2JhZmIsIDB4MDJkZDIxZTAsCi0JMHg1ZWZlZTdkZSwgMHg1NDNmN2YzMywgMHgzYTFlMDRlMiwgMHhmYjQxMWUxZCwgMHhlMjA1MmMyMCwgMHhhZjFmYjk0YSwKLQkweGQ3MjJjMTMzLCAweDVmYTlmMzUzLCAweDQzMmZkMTc4LCAweDcxZDQ2Mjc4LCAweDgwM2RiMmVjLCAweDBkNGE2ZTcxLAotCTB4OGY4MDVhNjUsIDB4MjAyNzliNmUsIDB4OWQ2MmYxYzcsIDB4ZmIyZjE3ZTgsIDB4YjkzYWNjODUsIDB4YWQwM2ZiY2QsCi0JMHhhY2ZmZWM5NywgMHhmNDM3NjE5NCwgMHg0YzQzZjEyZSwgMHgyYmQ0ZjgyOSwgMHg1Mzk5NjFmOSwgMHhhOTcwODNmMiwKLQkweDFhMWZjYWIwLCAweDRhNzUyY2JmLCAweGVkY2FmYzkyLCAweDc4ZDI5Njc3LCAweGFmZTcxOGJlLCAweDdmY2U0OWUzLAotCTB4OTdlNmU0YWEsIDB4NTEyY2RmMTAsIDB4MWZiZmY1ZmQsIDB4ZmQyNTc4YmYsIDB4N2JiZDUyNjcsIDB4ZjQ2OGRmMjIsCi0JMHhlMzQ3ZjhkMSwgMHhkMjNlNjg4MywgMHhiN2EzNDBmOCwgMHg3ZjM0NWRmNiwgMHgzNDU1ZjM0NSwgMHg0YmIwMmQzZiwKLQkweDBmOGU4MzNhLCAweDQ5ZjkxMzI5LCAweDkwNjg3NGY5LCAweDY3NjlkZmQ3LCAweDRmY2QxNmJiLCAweDM1MzA3Y2QxLAotCTB4NGU3ZGM5M2YsIDB4ZmQwOGEzZTQsIDB4Y2YyZjhmODEsIDB4ZGU2ZWMzNDcsIDB4YTRmYjY2YzcsIDB4OGZmMWE0N2MsCi0JMHgxZjFhNGZjNiwgMHgxNjIyM2ZkZCwgMHhjYjUzNTEyNywgMHg5NDc1ZWI5OCwgMHhjZmZjNzI3YiwgMHg4YWI0OGY0MCwKLQkweGFiMzMxNjViLCAweGJlNDVjZDM4LCAweDllZmQ4OTg0LCAweDViZGZhMjk4LCAweDUwMWZjNGIxLCAweDJmNzNjMjNjLAotCTB4MmUzMzgxZmMsIDB4N2VjNWQ4YWIsIDB4NDI1MWQ3YjYsIDB4ZWFhNDViZjQsIDB4OWJhMjMzZDEsIDB4OGZiOTFjZWQsCi0JMHg0NmI1ZDAwMSwgMHhjMmEyZjEyNSwgMHhkNzdmZWNkNSwgMHgyYzdlOGMzOCwgMHg4OGZjMjMyYywgMHgxN2VmZDRkYiwKLQkweDBkYjdjOWZmLCAweDZhOWM1OGViLCAweDUzNmY2ZmY0LCAweDQ1NWJlM2ZkLCAweDM3NWY4ZjNmLCAweGYwYmRhYTMzLAotCTB4NmY5YmY2NTYsIDB4NmZkNjMzY2IsIDB4NWVmZDU1MjgsIDB4Y2Y0MzcwYjcsIDB4NWM4ZjA4ZDYsIDB4N2VjZGQ4OWYsCi0JMHg1NzJhOGQ2YiwgMHg3MmZkMmE1OSwgMHg5ZjMxNjY1ZCwgMHhmYzJiNThmMCwgMHhkN2Y3MjgxNiwgMHg2MmYzNjc3ZSwKLQkweDgwNDU1YmRjLCAweDIwODhhZmUxLCAweDEwOGJiNzk3LCAweDE5MDc3MzhmLCAweDA5NzdjMDAyLCAweDY5ZGMwNTYxLAotCTB4OTFiNmM5MWYsIDB4ZmIzN2FkNDgsIDB4Zjg1ZjgwM2YsIDB4MzlmZTU5ZGIsIDB4YzYzNmM3MzgsIDB4Y2YyMGZiZmEsCi0JMHg2Y2VmZTJhNywgMHg1YmU2ODA3YSwgMHgwZjI4YjY1NCwgMHg3MWFjOWRkZiwgMHhkMjc1M2ZiMSwgMHgxZGZlY2I5ZSwKLQkweDEyOWFjMmU0LCAweGM5MzdjZjkxLCAweGZkOTFlNjNlLCAweDEzZjY0NTNhLCAweDlmYjI2OWU1LCAweGRlYzc2NDc5LAotCTB4ZjgwOWZiMjAsIDB4MDJhZDgyYjYsIDB4Mjk3NjJkZGYsIDB4YjdkYmEyYzIsIDB4Y2VlZGZkZjYsIDB4NmQzMmMyNDUsCi0JMHg3Yjc0ZmI2YSwgMHhmYTY3ZjdmMSwgMHg0YWRmN2Y4OSwgMHgxMjIzNTM5ZSwgMHg2MGQ2NTY1MSwgMHhhNzI1NmZiZiwKLQkweDYzMTk2NDliLCAweGQ1ZThiMmUzLCAweDRmZmNjOWJjLCAweGYzMjJmZjhkLCAweGE2ZjllNjJkLCAweGQ3ODZiM2MyLAotCTB4Nzg2YTdjNjgsIDB4N2Q3ODEyZmUsIDB4M2ViYzMyNjksIDB4Y2VkODIyNTMsIDB4NTk1ZmRhOGYsIDB4NTc1NWI4OGYsCi0JMHhkZTZmZDRiYywgMHgwNjQ0MTM1NywgMHhhM2M2ZWZmMSwgMHgxYmZkMWNmMiwgMHhlMzEzMzEyYywgMHhmN2I1M2M0YiwKLQkweGU0MmMyOGRjLCAweDJiZGM3ZjRhLCAweGFhZjNjMDAyLCAweDhmYWU2YTllLCAweGY3ODk4ZjhlLCAweDZiZjg2MTZlLAotCTB4ZDk1NzJmMmEsIDB4ZGRlODIxZmQsIDB4NmJhMWE1Y2IsIDB4MWYxMmMzYzgsIDB4YmM0YmViZWYsIDB4ZWRmOWU2ODEsCi0JMHhjZTBmNjY0YiwgMHhkNzY2OWQyNywgMHhhY2UyMGY2ZSwgMHgyZjNkOTk2ZiwgMHg5ZDNmZmJlMCwgMHg3MjRhNWVjYSwKLQkweDM2OWY5ZTI1LCAweGQzYWMzOWU5LCAweDlkYThmMTJlLCAweGUzOWRiZWMzLCAweGNlMTRiOTYzLCAweDIzYzgwY2IyLAotCTB4NWY5ODI5ZmQsIDB4OTI2NjVmZjMsIDB4ZmUyNzY5MmYsIDB4ZTU5MzY3ZGQsIDB4NDU0Y2ZlNTQsIDB4NTI5ZmU5MWMsCi0JMHg1MGZhY2ZlZSwgMHhjNzdkMWZhMywgMHg1MzhkMTY3MCwgMHhlYjI2ZmE0MSwgMHhhZjNlMzhkMSwgMHhmN2RlOWQ3OCwKLQkweDA4ZDUwZWQ4LCAweGM1YWZiZjgzLCAweDI1NTM0NjIzLCAweDZiODgxNzFlLCAweGIwM2M0NDllLCAweDA0NTU4Y2U2LAotCTB4ODIxNDdkYTksIDB4MjUwY2Y2OGYsIDB4N2EzNWJkMDgsIDB4ZmExOWFhZTYsIDB4MTE0MTM2YjYsIDB4NTQyZjYwZDMsCi0JMHg2MTkzMTI3ZCwgMHgzZTlkMmUxMiwgMHgwOWM1NzU4OCwgMHhlMzhmOGU5NywgMHg3MDBjNTIwYiwgMHhhMTg2Njc4MiwKLQkweDhlNTU1MjdmLCAweDNiZDkzZGExLCAweGFkM2VkMGQ3LCAweDRmMDBkNGFlLCAweGU4NjBkZGY3LCAweGQwYjBkZTlmLAotCTB4NmZmYTY3MDAsIDB4ZWFjZmY0MzMsIDB4MzU4MDZhNTgsIDB4YWIyNTk1N2QsIDB4MTVlZWFjYzQsIDB4Zjc2N2VmODYsCi0JMHg3N2Y0MzRhYywgMHhkYTFhZDYwNywgMHhmYjg5NzFjZCwgMHhiYzA2OGY1OSwgMHg0ZTM0MDVjMywgMHhlZTRlM2E5ZCwKLQkweDdlODY4ZGNlLCAweGFhNmRkMDgyLCAweGJmYzg5YzgwLCAweGNlZWIxMjY3LCAweDNhY2Y0NDI4LCAweGM4N2FhYWM3LAotCTB4ZDdmZjdlNjksIDB4ZDczNGViOGQsIDB4YmNhOTkyNWIsIDB4N2ZkNDY1ZDUsIDB4Nzg0NjE5YjUsIDB4NDI4NGUzOTEsCi0JMHg0ZTQ1OGI0MywgMHhlYWNlMWVhMywgMHg4Y2UwMThiNiwgMHhkNzliZDIzMiwgMHg1MTYyOGZkMSwgMHgyZjgyZjFjYywKLQkweGFlN2ZiZmEyLCAweDc4ZDFmZTgxLCAweDg0ZjA3ZTIyLCAweDY5ZWM5ZmQwLCAweGIzN2FlYjAwLCAweDhmN2IwMmQ1LAotCTB4MWY3ZTgyZmMsIDB4ZjFlODJmYzgsIDB4MWU4MmZjODAsIDB4ZGY0MTdlNDYsIDB4N2QwNWY5MWYsIDB4ZmEwYmYyM2IsCi0JMHg0NjMzYjJmNiwgMHgxYjBmOTdmYSwgMHg5ZWY5NWZlOSwgMHg1ZjFhZmU5MSwgMHhlYWE3NDU0ZSwgMHg4NDNmOTFiMCwKLQkweDdmMmJmMTVmLCAweDVlMzc0ZTg1LCAweDM0NGZmMjMyLCAweDM3MjY2ZTdkLCAweGY0MTUzOTI3LCAweGQ3MjEzYzUwLAotCTB4OWRkN2E3OTcsIDB4ZmEyMmY0NTEsIDB4ZjdjMDRjMDQsIDB4OWY0OTA0Y2MsIDB4YTA0OTc1ZDAsIDB4YjMxOWVkNTcsCi0JMHg4ZmZjMTIwOCwgMHhjNzdjZmI1MSwgMHgyMzI4NmZlMiwgMHhhYjg2ZjAzZCwgMHhlYmZhMDMzNCwgMHgxNDdhZTE2NiwKLQkweDlkYzVkYjcxLCAweDg2ODg0ZjI2LCAweDdlMzUxMTVkLCAweDdkZmYwY2Y1LCAweDFhMTdhNDY1LCAweGI2Y2Q1ZGE2LAotCTB4ZmM0NjNmODEsIDB4ZGM5ZTcwNzMsIDB4ZDlkZGVhYTUsIDB4YzBmYzcyNzEsIDB4MTI3Y2MxNDIsIDB4ZDgzOWJhZjgsCi0JMHgzMzllZTM0NywgMHhjZmQwMmJmNSwgMHhiN2Y0NGZkZiwgMHgwYmZiZmJlMywgMHhkNDdmNzliYiwgMHhjZGY3YzE0MywKLQkweDBkOTMxYWZmLCAweGUwYjY3OWI4LCAweDBjMjhiMDczLCAweDg4NDkyZjk3LCAweDJjZTZjNWU4LCAweGQ0M2IyN2FhLAotCTB4ZTM5ZWE2NTUsIDB4ZGY0ZWQ0M2MsIDB4YjhjOTk3NzUsIDB4NjljNzgyNGUsIDB4YTE1MTc4ZTMsIDB4NDQ0ZTIyZjAsCi0JMHhlNmVjYWZjNywgMHg2Y2UzZTAyMiwgMHg2M2UwMWNlYywgMHhkZTQxZTRjMCwgMHgyNTc1NmMyMCwgMHhkZTA1MWY0MSwKLQkweGJkZTQwYjM0LCAweDlmYzIxN2UwLCAweDU3ZmFhNTliLCAweDI5ZTQ2MjU5LCAweDVlY2U3M2FjLCAweGQ3YWJiMDYxLAotCTB4NjJjMmVkMDYsIDB4MGQzOTdmYzgsIDB4ODY1MGQxNzAsIDB4YzdmNWZmYTEsIDB4OTJmNjg2NWMsIDB4YmRhMTgxNTAsCi0JMHgwMGM3OGNlYywgMHgxOTU3MGY5NywgMHhlN2JlNTdmYSwgMHhlMWQ1YzAzNSwgMHgxYmZmNDMzYSwgMHhmMDBjZjkyZiwKLQkweGVmOWU0NTZjLCAweDIzOTY1M2JmLCAweDk5MmUyMWYzLCAweDM4N2U2YmRmLCAweDZiZmE1MDc5LCAweGY5YWZkY2YyLAotCTB4NDlmZmEyZDUsIDB4Mzg3MTFkYWYsIDB4YmYzNTdmOTUsIDB4NmRhM2YzNWMsIDB4Y2ZkMDQwODQsIDB4ZjZjMmQzYjYsCi0JMHhmYTVkYTY2MCwgMHhmNjJkZmVjOSwgMHg2ODI3YzhmMywgMHg1N2U2YmFmZSwgMHgwOGE5ZmU2YiwgMHg3NmY1N2FkNCwKLQkweGY2OTNiZTg3LCAweDM1ZWJmNTQ1LCAweDhiZjM1OWZmLCAweDRjNWQ4YjEzLCAweGIyMzZlYjNmLCAweDRiMDdlMGFiLAotCTB4YWU3NjEzMzgsIDB4MWE0YzQ2MzksIDB4NGNiOTc5MGYsIDB4ZDdhMjViOWUsIDB4N2EyYmFkYWYsIDB4YTc2MmM0ZmUsCi0JMHhkYzc1MTdlNCwgMHg3ZWUyZWMxNywgMHhjY2ZlMjRkZiwgMHhmNTdjYWFiZiwgMHg2M2JlYjk5ZiwgMHhhZDY3Y2ZlMCwKLQkweGJiNTZmNzllLCAweGY0ZjNlYmZmLCAweDEzMjFmYzI1LCAweGY1ZjM1MmZlLCAweDI2NGRmZDcyLCAweGM3NjdjNzEzLAotCTB4ZDcyZTVmZDcsIDB4MGJmNTk1YWYsIDB4ZDkyMWRmYzksIDB4MzdlMmYzNTksIDB4MWZjODNhZjcsIDB4YzJjN2I2NzgsCi0JMHhhZjMzOTY3MSwgMHhlNDBjNmM1YywgMHg1ZTEyMWZjMSwgMHhmYzliMzM4YywgMHgzZTA3ZDA3YywgMHgwYjA3Y2UwNSwKLQkweGRmM2NjZGNiLCAweDc3MjkzMmE1LCAweGNmMmNiZDExLCAweGQyNDJhMzY1LCAweGM2YzdiNDdmLCAweGU4NDlkNDc5LAotCTB4ZWRhMDdjY2QsIDB4OGI0M2YxMDcsIDB4NTEwZGM2NTUsIDB4Yzk2ODZlMjIsIDB4YzA0MzcxOTcsIDB4NDRhMjFiODgsCi0JMHgyZmY1MTBkYywgMHgzZTE4N2FmNywgMHhmMGM1NWJkMiwgMHgwY2JkN2FmNywgMHhlM2FkZWIxZiwgMHgzZWJkMDdmMiwKLQkweDI2ZjhkN2FlLCAweDc5ZGE1ZjFhLCAweGM0M2ZhMzRiLCAweDJmMjM3NjEwLCAweDFmZWIxZjhhLCAweDZkNzJmNDkyLAotCTB4ZDNmNmZhYjAsIDB4YTI0ZGViMTYsIDB4ZTA4ZDI5NGUsIDB4OGYxNTFlZjMsIDB4M2M0OWU2MzMsIDB4N2ZlNDFmYTAsCi0JMHhlNmI1N2VhYSwgMHg5YmM0MjRjMiwgMHhjOTJiODU0NywgMHhhYWUyNTdmOSwgMHg2ODdjMmY3ZiwgMHg5NzNmMWY3OCwKLQkweDk0OWJjYjhlLCAweDUyZTRhOTg3LCAweGNlZWIzZjNiLCAweGQxNzcyY2FiLCAweGI3MmQxOGYyLCAweDNmZTc3OGQxLAotCTB4ZmM3YmI5ZGQsIDB4NTNjNWFiNWMsIDB4ZThkNTM5NTQsIDB4NTViNWM5YTIsIDB4NWZhMTFiODQsIDB4Y2UyNjc5ODIsCi0JMHg2MDljM2Y1MywgMHhmM2M1YTM5NCwgMHgwNzdmN2UyNCwgMHhiY2YyYTIzOSwgMHgzMjY2OTljYiwgMHhmZGIyZjg0NywKLQkweDEwMTdmMjcxLCAweDQ4NjllZjFmLCAweDgwNTllMGU0LCAweDdkYmE4ZmNlLCAweGQyZmFmMDJlLCAweDJiN2VhMDZlLAotCTB4ZDA2MmFjMDcsIDB4YjA3NTdkODUsIDB4NDQwOTZkMWQsIDB4ZDg0NzFiOWYsIDB4YWRkYjZjOWYsIDB4M2U0NjlmMzgsCi0JMHhlN2U0ZTc3ZiwgMHhkMTNmY2U0YSwgMHg2ZmMyNmQzOCwgMHhmYmRiYmFjMywgMHhhYjU2ZmQ4ZCwgMHhmY2U4Y2FlNywKLQkweGQ1M2NkNTRhLCAweDg3ODQ3OWRlLCAweDdmMzUxZmZkLCAweDE5ZjZhMWRlLCAweDZlNjA5ZmU3LCAweDYwZGYxYTkyLAotCTB4MTQzMmE0NzksIDB4YjliZjNiYTMsIDB4OGIyOGVmOTAsIDB4YjhiNzg0YzAsIDB4NmRjM2Q4MDIsIDB4NmJiZTRmMTYsCi0JMHg3ODY5YmYyMiwgMHg5N2U3OTg5YiwgMHhmN2M0MWJmNywgMHhhMGZjZjk2MiwgMHgyMzJmZjllNSwgMHg2YWZhMGZjZiwKLQkweGZmYjUxNGY5LCAweDk4NTk4MGU1LCAweDQ4ZTBkZjcxLCAweDdmYTdlNzBjLCAweDRmN2IzYTZiLCAweDdmOTc0YjhlLAotCTB4MTFiNzkwOTksIDB4MzA5ZmI4ODksIDB4MjdiYTY4N2EsIDB4YjRiYWM5MzAsIDB4MWIzNjFmZDIsIDB4Njg0YzkxZWUsCi0JMHgxMTM0N2FkZiwgMHgxN2NlYzllNywgMHhmM2E2OWU2NSwgMHg3OTY5NTNjNSwgMHgzY2Q3YmQzYSwgMHgxYmZiYzJjZiwKLQkweGU3ZGJmOTMyLCAweDliZGM4ZjRkLCAweDYwYzdmYjU4LCAweDM1N2FjYTMxLCAweDlmYmQxMjdlLCAweDVmMzZiZDcxLAotCTB4YTUxOWZlNjEsIDB4YWI1ZWIxZmQsIDB4YTQ3Zjc4NTMsIDB4NDllNDA1MTcsIDB4MTEyZmQ3Y2IsIDB4NWE5NDU0YTEsCi0JMHhiM2JmYzQzZSwgMHhlNWEwZTk5YSwgMHhkNTQyNWE0MywgMHhmYmJiOGZiYywgMHhhOGUzNWI1NiwgMHgyZGE5Zjg0YiwKLQkweDQ4YWU3MWI1LCAweDRiM2MyNDllLCAweDJhOTliZmRlLCAweGFjNmNiMjVmLCAweDNlNWJjNzg0LCAweGIzOGYyMzc2LAotCTB4ZTY1YjllNmQsIDB4ZDllZGI2NGYsIDB4ZWU2ZmZmMDAsIDB4MWUwNTYxNDEsIDB4NGUzOTU2YzIsIDB4NTUzZTllMzQsCi0JMHhkY2I5MjRlNSwgMHg2ZTM3YjdhOCwgMHg2ZjZmNTg1NSwgMHhmNzk2YWQ4NCwgMHg2YjZmNTg3YywgMHgxNTdlZDVmMCwKLQkweGE2ZjA5NWFlLCAweDViMGUxMmVkLCAweDI0OTUzYjFkLCAweDA1YzQ1ZmI5LCAweGQ4OTQ0ZmIwLCAweDg3YjFjZTBmLAotCTB4ZjYwMjM4ZDQsIDB4NDBmYjEyODEsIDB4NjAxNWY0M2QsIDB4ZDBjMDJiZTgsIDB4YWZhMTgwNTcsIDB4YTE1ZjQyNTAsCi0JMHg2NWYwYTU3ZSwgMHhiYzg4OGUyMywgMHg0ZTRlOGQ0ZSwgMHhkMWE5ZDc5MCwgMHhlYmM4MWZmOSwgMHg3NWU0NjFlOCwKLQkweGQ3OTFmZGY0LCAweGFmMjNiN2QxLCAweDVlNDc2ZmEzLCAweGFmMjMwZjQ3LCAweGJjOGZlZmEzLCAweDVlNDYxZThlLAotCTB4NzkxZmRmNDcsIDB4YmM4YzNkMWQsIDB4ZjIzZmJlOGUsIDB4ZTQ3NmZhM2EsIDB4YzhlZGY0NzUsIDB4ZTQ2MWU4ZWIsCi0JMHg5MWZkZjQ3NSwgMHhkZmI3ZDFkNywgMHhmMjE4YTNkZiwgMHg5YTkzZjczZSwgMHhlZWI1ZGYwNiwgMHg3MWZjYzY5ZCwKLQkweDMxM2JlZGRhLCAweDQxZmJlODhmLCAweDY2YmY5ZmZjLCAweDhmOWQwMWNkLCAweDZlZGYwMWFmLCAweDQ4ZjM4YWVjLAotCTB4NDlkN2Y3M2EsIDB4YTQ4NDliYmEsIDB4ZDMyMzQ4ZjMsIDB4YzI0ZDhiNzksIDB4ZTc3NDllYjUsIDB4ZjIwZmZlMjQsCi0JMHg5OTU2MzUyOSwgMHg3Yzg5NDE0ZiwgMHg1M2U0NGEwYSwgMHg1MjlmMjI1MCwgMHgyOWYzMmY5MywgMHg0MTRmOTEyOCwKLQkweDI4MjlmMjNkLCAweDg5NDE0ZjkxLCAweGU0NGEwYTdjLCAweDlmMjI1MDUzLCAweDE0ZjkxMjgyLCAweDBhN2M4NzdjLAotCTB4NTA1M2U0NGEsIDB4NGEwYTdjOGYsIDB4N2Y1MDUzZTQsIDB4YmM4MWQ2OGUsIDB4ZjgyZWI2OGEsIDB4ZjM4Njc5Y2IsCi0JMHhlMWExZjExYywgMHhjMDM0ZTczYywgMHhmZGY1OTdmMCwgMHhkYmViMmZlMSwgMHhkYmViMmZlMSwgMHg2MWViMmZlMSwKLQkweGZlZmFjYmY4LCAweGIwZjU5N2YwLCAweGU1OGI5ZTY5LCAweGZlYjM3ZTBjLCAweDdhY2RmODNiLCAweDcwM2ZhOGI4LAotCTB4M2JhMGIxMWEsIDB4MzVlZWZkZjYsIDB4ZTUwNGUxOTQsIDB4ZGY0OWM1NTksIDB4MTViN2ZmOTcsIDB4NjM4NTgzYzgsCi0JMHgwZjY0ZWM5NSwgMHgwZmFkYmZkOSwgMHhkODIxYThhZCwgMHgyYmE3ZGVhZiwgMHhkMDI2MjMxNiwgMHg0NGQ4ZjM5YiwKLQkweDA0NDg3ZjM3LCAweGU4YTA4ZjcxLCAweGQ3NmU0Y2YzLCAweDQ3ZmNhYWYyLCAweDIyMzkyZjc0LCAweDUzNWYwZmQ4LAotCTB4N2RhNWQ3MjQsIDB4MzM0ZTExZWYsIDB4MDQ3ZmFkNGEsIDB4ZjQ1ZmJjOWUsIDB4ZDYzZjVhZmMsIDB4OTA3NWJhOTcsCi0JMHhmZGMxMmM5ZCwgMHg4ZTJkOTI4NiwgMHg0ZmM0NWRkMiwgMHhmYjBhNGMwNywgMHg5ZmM4MDdhMSwgMHg1ZTg5M2E1YSwKLQkweGEzZmQ1MGFhLCAweDI3YzNhNjAzLCAweGEyMmY3MGUzLCAweGE3ZWNmMTQ1LCAweDg4YjFhZmExLCAweGUwNTJkNjMzLAotCTB4ZmUxNGJiYTksIDB4YjI3OTc2NDIsIDB4ZGY3NWFmZWEsIDB4ZGEzZjdiODAsIDB4MWRiOGI1YmEsIDB4ZjIyZjA5ZTksCi0JMHg4NDQ3ZjNlZiwgMHhiOWU2OGRhZCwgMHg2YjYxNTNlOSwgMHg5MzY2ZGY4NywgMHhjM2JlMDJmZSwgMHg4MGJhZWRiOSwKLQkweGUzYWZkZGUyLCAweDY5NzI4MmVmLCAweDBkODFmY2ZmLCAweGZkNTFiNDM3LCAweDZmYmE4Nzc1LCAweDE3MWY4NzY4LAotCTB4Y2VmYmJmMjcsIDB4Yzc4Yzg5NzMsIDB4ZmIyOWI3M2IsIDB4Zjk5ZmI0Y2QsIDB4OTA3Nzg0ODcsIDB4Y2I5NDk1ZmEsCi0JMHg4Nzc1ZGZmMywgMHg5ZTM2YjY5YywgMHhkNzZiNjlkNywgMHg5N2Q4NDNkZiwgMHg1Y2UxNzM2ZCwgMHg4ODM1YzIyOCwKLQkweDhhNzk4OWZmLCAweGYwNDQ0MTc4LCAweDBkN2JmYjQ2LCAweDQ0ODZiYmZiLCAweDc1ZDdmMTA1LCAweDNmZmI2MzA3LAotCTB4ZDc1MWYxZDIsIDB4N2UwMWIyNTAsIDB4ZmY2NjU4ZTAsIDB4NTlmZTNhNDcsIDB4NzI0NDFmODcsIDB4ZWMyMDZlNDEsCi0JMHhmMjRhYTc1NiwgMHhjM2JkNmFmNSwgMHg3OWM1MWJlNCwgMHg2MjNlY2JhMiwgMHg5YTZlZmUwMywgMHg3YjhiNWM5NywKLQkweGYwYjhlMjZjLCAweGU2ZWY4M2U0LCAweDRlOWY2Y2I1LCAweGJkMDdmMmViLCAweGJhMDNkYzFlLCAweGQzZWVkM2U5LAotCTB4NjNlZjNmMGMsIDB4ODJhN2Q5OTgsIDB4NzBmNmM3ZDcsIDB4YzUwOTQwNGUsIDB4MGNlZTJhMTMsIDB4MDk1MjlhMGMsCi0JMHhkNWIwMjNiZSwgMHg4N2ZlODY5YSwgMHgwMGVlMDc4NCwgMHhhMGIxMjg5OSwgMHg0MmFmYjIzNCwgMHg1NThhNmMzMSwKLQkweGQ0ZTIyZmMwLCAweDkxZmYxZDM0LCAweDdlMGU1OGU2LCAweDA1NThmMTI5LCAweGM1ODk2M2Y4LCAweDg5YmU4NTY5LAotCTB4ZWZhMjM3ZjYsIDB4NzFmZjkwN2YsIDB4Njg2N2JjYWYsIDB4NmIxZWMwYjUsIDB4NTM4YjUxZmUsIDB4MzZlYWY1YWUsCi0JMHgyZDFmZmIyYiwgMHhkMGZmYzk0NywgMHhmY2Q1MmJkZCwgMHgwODVlZWQwZCwgMHgxMDllMWRmOSwgMHhkYjkxZjhlYywKLQkweGI5ZDQyZTM5LCAweDdmYmUxZGUxLCAweDc4M2I4OWYxLCAweGZhZjg5OTIwLCAweGY3YzM5YzkzLCAweGI3ZTFiOTU0LAotCTB4Yzk0ZmFjMjgsIDB4MjcyY2U4NmYsIDB4M2Y2Y2I2M2MsIDB4NTVmMzg4OWQsIDB4ZmIwYWYwMzgsIDB4M2RiNzU3MWIsCi0JMHgwOGUzMjg5ZSwgMHhhNmQxMWYzMiwgMHhjZjhiNDllMiwgMHg2OGY0YWJiNCwgMHg3ZDAxZWY1MywgMHgzYmNiN2E0OCwKLQkweDA4NmVlZDg3LCAweGJkNjgzNmY3LCAweGZiNDQ1N2VjLCAweGI5MWY5YTg3LCAweDM4NGYxYjRlLCAweGE0NWM0NWRmLAotCTB4OGJiN2Y2ODMsIDB4NWJiYmQ1YTAsIDB4ODk4ODY0NzYsIDB4ZDUzYWUzZmUsIDB4Y2RiMzVjYWYsIDB4M2E3ZWY3Y2EsCi0JMHhjMmVkOTA0NCwgMHgzZjU0NjA5YSwgMHhiYWNmYmVmNSwgMHg5ZGZhYzY4MywgMHhhN2ZlNTFlNSwgMHhlZWQyMmU3YSwKLQkweDdkYmNiNmU1LCAweDdmZjY2ZWVhLCAweDZmOWNhZGJhLCAweGZkMmFkYTZiLCAweDA0NTg3MTIxLCAweDhiYzAxNWYzLAotCTB4MzcwNGIxNGMsIDB4OTQ3YWY1MWQsIDB4MjdlN2Y4NDksIDB4MWY1NDVmYWEsIDB4MmViYzY1OGUsIDB4N2Q2NzhiMTksCi0JMHg4YjJjNzRiMiwgMHgzMmM2N2JlMSwgMHg0Yzc3YmNiOSwgMHg4YTVjOGJkZSwgMHgzYmQxMGM1OCwgMHg5MTA0YWI1YywKLQkweGVhOTlmYjRmLCAweDdiOGRkZDBmLCAweDIwNjNhMDkyLCAweDk0NzlmOTlkLCAweDE0NTMxOWY4LCAweGFlNmE3YWFiLAotCTB4NzcwNTM5NTcsIDB4ZGZlYWRlYjMsIDB4ZjU5ODdiOGUsIDB4Y2JmZDgyODMsIDB4ZDEzN2UwM2IsIDB4YTNmMDBkZjgsCi0JMHhkYzFlNDFhNiwgMHhiNzNmN2NiNSwgMHg2ZWY5MTE0ZSwgMHg5NTA2YzNjOCwgMHgwNDFlNDlmZiwgMHhlYjJmMGZlYiwKLQkweDQxMjU5YWI1LCAweGYwNjlhZmRjLCAweGVlODEzNjFmLCAweDAzZjgxYzlhLCAweGVmODAyZGU3LCAweDU3MzYyODA4LAotCTB4ZjgyNzlmMjEsIDB4NzlmMWFjYmMsIDB4YzczNDNjYjQsIDB4ODcyNWYxYWIsIDB4ZmI4ZDFmOGMsIDB4OWQyYzU4YTcsCi0JMHhkN2UwNDViYiwgMHhkZWQ0YmMyYiwgMHgwY2UwMTg4YywgMHhmNzA4MTE5NSwgMHhmZGIyODUwOSwgMHhhZjVmZDFlNCwKLQkweGQzYzM4NmQ4LCAweDM0M2Y4Yzk3LCAweGFmNGM0Yzk5LCAweGY2ZjdmMjExLCAweDcwYzU2MDQzLCAweDY1ZTQzYTZkLAotCTB4Y2JiYTUyYjcsIDB4NTNjZjU5MTUsIDB4NTcyZjBiOTUsIDB4MmJjNWNlZTgsIDB4ZjkyMmY5NTUsIDB4NjNmOWM3NGIsCi0JMHhlOWY5MjNlMywgMHg0MGZmMTI2MiwgMHhjZjA5NWIyYiwgMHhhNGU2YjM5MCwgMHhhMjE0ZDdmMCwgMHhjMmU1MjdjYywKLQkweGRiMGM0MzViLCAweGUyN2RkNDI4LCAweDczYWQwNDIyLCAweDdjNjcwYTg1LCAweDlkZmRlZTJmLCAweDg2MWY4Yzg1LAotCTB4NWU1Zjk2MmYsIDB4YmZmYzI4MTEsIDB4OGE0ZDg3ZDAsIDB4YWI1N2VmODUsIDB4ZmM5ODcxZjgsIDB4ZWZjMzk1MWYsCi0JMHg4MzE3ODdiNywgMHgyMzg1ZjFhZSwgMHgxYTJkZDAzNiwgMHgxZWVkZjczZiwgMHhmMDg3MzNkYSwgMHhlOTIxNTE5MCwKLQkweGI3ZWI2NGQ3LCAweDA0NTE3OWYyLCAweGI1NWY4OGFkLCAweDIyZmI0YTE2LCAweGFmZWNhZTJjLCAweGM1YzQzZTcyLAotCTB4ZGY2ZDNlNzEsIDB4ODlmN2FhMWYsIDB4YWNlMWYxYTMsIDB4N2UwMjc2OTAsIDB4ZjQ4ZTZiYjIsIDB4NGZjMjUxOTMsCi0JMHhmODFjN2RjNiwgMHgyN2UxODBjOSwgMHg4YzlmODRhMywgMHg4MGM5Zjg3YSwgMHg4NjAzMjdlMSwgMHg3ZTE4MGM5ZiwKLQkweGM5Zjg0YTMyLCAweGU0YzI3ZmE4LCAweGQxMzBmZjNkLCAweGYwNTM2OWYzLCAweGE3YzRhYmYwLCAweDRkZmFhNTlmLAotCTB4YTdmZWI0MTUsIDB4ZDc5YjhmNzEsIDB4MTFmZGU3ZWYsIDB4MTk1ZWIwZGYsIDB4NWZjNDUzZDcsIDB4MWYwODhhZjYsCi0JMHg3MGI5ZWNhZCwgMHhlMTEzOTRkNCwgMHhiZjlkYjZhNywgMHhlMjA1ZWE3ZiwgMHgxN2U0OTU4ZiwgMHgzYmZkOWU0MiwKLQkweGYxNGM1MDk1LCAweGRjZjY3Y2Q0LCAweDk3OTYzOGRhLCAweDYzNmViZWU3LCAweDFiNjRkYmZkLCAweDQ3Nzc2ZDNlLAotCTB4Y2Y3ZWY5ZjAsIDB4N2Q0YWI0ZmYsIDB4ZDE3N2NhMTksIDB4NjNiYTJiYjgsIDB4NGZmZmQwM2QsIDB4YjFkMmZhNTUsCi0JMHgwZjQyZjhkZSwgMHhhZDMyZTVkMywgMHgyNTFkZWY4OSwgMHhiZjUwYjNmYSwgMHg5ZWJmMGM1MiwgMHhiZjlhZmQ0MSwKLQkweGRhMzY3NmYxLCAweGI2ZWUzODFmLCAweDFjYjcwZjQxLCAweGUxOTFkOTJiLCAweDE3N2VmN2MyLCAweGUxYzViNWY4LAotCTB4NThjZmMxYjQsIDB4ZWQ5OTJkYmYsIDB4OGNiYTczNmUsIDB4NzNjNzEyZGIsIDB4NDdhMzRiZGUsIDB4Yjc4Yzg1NTUsCi0JMHhiODI5NTI3ZCwgMHg5NzllYTJiYywgMHgyNWQ2NDEwOCwgMHg2ZTkyN2U4NiwgMHhjNWE2ZjJkMSwgMHg1OGUzYTMxMSwKLQkweGYzY2E3ODkxLCAweDA3MTA3MzNiLCAweDNlOWUxNTQ5LCAweDIxN2M0NGQ3LCAweDhkMmI2MWNlLCAweGUzYTI1MWM0LAotCTB4NmFmMmUzMWQsIDB4OWRmODg2MTMsIDB4NTBhOWFlNTYsIDB4ZGJjZWY3MGMsIDB4ODVhYmNmYzcsIDB4ZDdlMWQzOGIsCi0JMHgxMTM4YTYzZiwgMHhiODczNmU2ZiwgMHhiODI2YWRlZSwgMHgzNzE1OGNlZCwgMHg4YTdkNDUzMiwgMHhmMDQ5OTZjYiwKLQkweDczOGEyM2M4LCAweGI5YmRlODNmLCAweDEzNTZmNTg0LCAweGY3OGE1MjY4LCAweGI3MmNkNTBiLCAweGNiMmE0MTZkLAotCTB4YWZlZjk2YTYsIDB4ZDY2YTc2M2UsIDB4OTBhZmIxZjcsIDB4YjY3NTg2ZDcsIDB4MTRiNmJkMzksIDB4ZGFkM2RmOWQsCi0JMHhmN2Y1NzhhZiwgMHhiMWI4MzUyMCwgMHg5YjBkYzY0MiwgMHhmYzAxMThlOCwgMHg2ZGQ5YjdkZCwgMHgyNTM4ODk1YiwKLQkweGZmYjgzZmI5LCAweDEzZTU0NmI3LCAweGM3ZWEzYmVkLCAweDczZWExZmY3LCAweGFiZTBlYmM0LCAweGY0MTdkYTExLAotCTB4ZDUyYmU2MTYsIDB4ZTMxMmJmOGQsIDB4ZmVhN2U2ZWIsIDB4NTZiNWI3ZWMsIDB4MmQ3OGYwMjQsIDB4MWJiN2RhNGUsCi0JMHg0OWQ3OTNhNSwgMHg4ZDNjNjA3OCwgMHg1Y2YxYTFlYywgMHhiZGUzMGYzYywgMHg3YWI0MTQzNSwgMHhiYmRjMWViMCwKLQkweDMzODU3ODIwLCAweDJiM2NjNTY4LCAweDdjNzA5NWI3LCAweGNlNWJiZmRmLCAweDZjOTlkZmUzLCAweDY3NWY4MjJiLAotCTB4ZTk2NmRhNzEsIDB4M2JlMjNkZmQsIDB4MGUxMzY1ZjAsIDB4NWViY2E5ZjcsIDB4MDhkYjg3ZjYsIDB4NDNmMDI5NGYsCi0JMHg3NWZmYzg1MywgMHg4YjU3YzQ0YywgMHhmZWI2ZmViYSwgMHhkOGZmYTM2NCwgMHhmNDE1OThmZiwgMHg0YWVkNTQ2OSwKLQkweDU0OWUxZDM0LCAweGI2ZTU3OGY5LCAweGQ3Nzg2YzViLCAweGYyZjE2NmQwLCAweDhhYmYwN2JiLCAweDEwZGY3ZmVmLAotCTB4OTBmOTBiYmIsIDB4YWQyNzgxYzYsIDB4YWUxZjgyNmUsIDB4OTNmNjdlOTAsIDB4ZWFkZjkyMTUsIDB4YjhmOTQyNzMsCi0JMHgyMWIyMzFlNywgMHgzNzIxZWY5NiwgMHhiZjc5ZmIzYSwgMHg5YzdlZjhlMywgMHhjNGZmMDNmMCwgMHgxMzdjNjNlOSwKLQkweDlmNzAwNDlmLCAweDQ4YzA2ZGFmLCAweDEyN2FjOGRmLCAweDgxYjZkYzc4LCAweDU1YmY5NjE2LCAweGE5Y2RiZjE2LAotCTB4MTNkZWM3NWYsIDB4YTVlMTBhZjksIDB4ODE1ZWU0OTEsIDB4YjNmYTcxZmQsIDB4MWYxNzNmYzEsIDB4Zjc5YjM3YmYsCi0JMHg3YmU0ZWI0OSwgMHhlMmQ3MWU1NCwgMHgzN2NjNzk4YywgMHhmZjFhZDdjYywgMHg3OTQ5OTczNCwgMHhhOTdiZTZkNiwKLQkweGJkZjNjMmMyLCAweGI0ZTUyNWY0LCAweGRmMGI3NzZkLCAweDEwY2Q2OTgzLCAweDYyZjk0NTFlLCAweDUzZTRkNTM5LAotCTB4MzU0NmQ3OTMsIDB4N2JiYWQ5MmUsIDB4ZjRlYmYwODksIDB4ZWVlZmQ5MGQsIDB4Y2ZjMTI3OTcsIDB4MmI5ZDc1NjUsCi0JMHgzZTEyN2E1NCwgMHhiOGJhMTM1ZiwgMHgzZDJhYmJkZCwgMHg3MjhjNzI5YiwgMHhlZTMwZjE4ZiwgMHg5YmVlNTUyOSwKLQkweDM3ZjI4NjE2LCAweDZiZmE0NjE0LCAweGM4YTUzNmYzLCAweGUwZmZjMGVmLCAweGJkMmE1M2IzLCAweGY3MjM3ZmQxLAotCTB4ZWFhNGYxNTcsIDB4YmQ3MWQ2OGQsIDB4MWE3YjY4NzEsIDB4ODU2MWM2ZjQsIDB4ZjcxYjU0ZjMsIDB4ZTM2ZWJmNDgsCi0JMHhlNzFjMDk4YiwgMHhhZjhkOGZmYSwgMHhlYTFlZjhmZSwgMHg4MzEzYzlmNywgMHgxM2Y3ZmFjZCwgMHgyN2E5MjE2ZCwKLQkweDgyOWZjOWRhLCAweGRhYTU1OGRlLCAweGZmNjI4NmZkLCAweDcyNzQyYjRmLCAweDE3YWRmNmRjLCAweGFjNWM4MWFmLAotCTB4ZjhiOTJhMTgsIDB4MGVmYmMxNGIsIDB4ZWFmY2RmNDEsIDB4NzNiZTFmYzUsIDB4NWY2MjJiODMsIDB4ZGNhYzdkYjUsCi0JMHgxNmQ2NmZmOSwgMHg3MjZmMWU4NywgMHg1NjBhYmI5ZiwgMHg0OTNjZWYwYSwgMHg1YWMzOWMyZiwgMHgxZGYyMjliNywKLQkweGZkOGQ4ZjU5LCAweGQxZGU4ZDRmLCAweGYyNDJkMDdjLCAweGYwODhlYWRiLCAweGE5ZmY0NjgxLCAweDc4ZGIyNmZjLAotCTB4NWZkMjRlM2UsIDB4MDdjNmI3YTMsIDB4M2EzNWJkMWEsIDB4OWQyOTdiZjEsIDB4ZmJhZGFmZmYsIDB4MmI1ZTk1MzMsCi0JMHg1MzFkZmU1NCwgMHg4NzQ1NmVlNSwgMHhlNThhYjZkYiwgMHgwNTZiNmRkZCwgMHhiMWZhNmJkZiwgMHg0ZTNmNThjZCwKLQkweDdlYjhlNzI3LCAweGMwYjkwMWRmLCAweDY5ZDAyMmJiLCAweGM2NTViNzc0LCAweGEwNGQwZjIzLCAweGJlZWMzNjUzLAotCTB4NmFkNThlYjYsIDB4OGQ1ZGIxZGMsIDB4ZmNkMmFlMWYsIDB4NGM3ZjYyZTAsIDB4YWI0ZThlYTUsIDB4NmE3NDkzOWYsCi0JMHg1ZmVkZTk3ZCwgMHhmYmM1YzBmZiwgMHg0ZjZjN2E5MywgMHgyYjhiZmIwYywgMHhiZDMzMGU4NywgMHg2NjNlNzcxYSwKLQkweGY0YmY1Mzc1LCAweDVmNDFiNzRhLCAweDM4OTc3NmI3LCAweGIxNWYzNzExLCAweGY5MGFkMDczLCAweDRkNzRhZjRmLAotCTB4ZWE0ZGVmY2EsIDB4YWYwZDYwYmQsIDB4Y2U4YTNmYjAsIDB4YTFmZDY5ZWUsIDB4M2NkMzBlZjcsIDB4MjZjNDM3OWIsCi0JMHgzNjhkMWVlMiwgMHhmMjUyYjc4ZiwgMHg3Mjc3NmI3NSwgMHhlZDZiZTYwYSwgMHgzODFmZjk2ZSwgMHgzZjdhNjhjZiwKLQkweGM0MmVlZTVhLCAweDQ5NTg3OTRhLCAweDJmMmU0MjlmLCAweGRlYzllMmRjLCAweDNmMzEzODU4LCAweDk1OTU5NWE2LAotCTB4MTBjZjZlOTIsIDB4MjU2ZjcxN2EsIDB4YmJlODdlMmIsIDB4MDNkNjQzYzAsIDB4OTNlNDFlNzEsIDB4NDFjMmYyZjMsCi0JMHhjNjNlMGJjYywgMHgxN2E0NmRiYSwgMHhhZjI1ZmY3MSwgMHhhYzdiZmMzMywgMHhiZTc0NWM4MywgMHgyMTMyODJlZiwKLQkweGQyM2JlNjQ1LCAweDkyNmZkZTA4LCAweGNjNzJiM2VmLCAweDUyYWZiY2IyLCAweDBmNmEzYmRhLCAweDg2YTQ1ZGExLAotCTB4NjhmZmIxY2IsIDB4NWY5NTM1YmQsIDB4MzZhN2YxYTEsIDB4OWE5ZWI0NGUsIDB4NTc3NzdmNmEsIDB4YTJmYTc5NGEsCi0JMHhhYjcwNWRmZCwgMHg0ZjAyOTM3MSwgMHg2ZGU2OWRiNiwgMHgwNzhlNzQ3ZSwgMHhkYTJmYTQ3MSwgMHhlNjRlMmRhNywKLQkweDRiZjdjNjk3LCAweDMyOTU1YWNjLCAweGU0ZjM3ZWM5LCAweGZkZWE2ODM5LCAweDRkYTZkNDBlLCAweDc5MDlkZmIyLAotCTB4YjQ0ZTU1NWYsIDB4NzllM2VmYmIsIDB4Mjc5OTdlOTIsIDB4ZGQ5MGEwYjksIDB4NmMyZWVmYTIsIDB4NjVmYmU1ODgsCi0JMHgzOGI0YmVkYSwgMHg1ZWZhZGZmZCwgMHgxNGNhYzFlMSwgMHg0ZTE0ZmUzNSwgMHgxNGQ5M2Y4MCwgMHg0ODdmY2FhNywKLQkweGEyNWZhOGMyLCAweGZkZWNkN2FiLCAweDIxMzg2NzM5LCAweDNmOWZhNzQ1LCAweGExZWQ1NmVhLCAweDNjODFlZjA4LAotCTB4ODE1YzllOGIsIDB4ZmViOWM3NzgsIDB4NDJhNjA5MGIsIDB4OWY1Y2E3ZjAsIDB4YWI2NmRkZjYsIDB4ZjQwZjVjZTcsCi0JMHhiZTE4ZjZkYywgMHhkMzdlNGVlZiwgMHhkYTkzYzQwZSwgMHhhNzFjYzkwMywgMHhlY2E3YWZiOSwgMHhlNzFhNWVlMiwKLQkweGZjNTk2ZGJlLCAweGYzZjM1MGRlLCAweDJmZmFhOTU3LCAweDhlY2I3MzdlLCAweGViZGZmNDRhLCAweDZmOGZjMjc2LAotCTB4ODg2Y2Y4NzcsIDB4MmMwZmM1YzMsIDB4ZGZiMGU1YjEsIDB4NWEwMWNmMmIsIDB4MjJiMzZhZGUsIDB4MGM5ZWZjN2MsCi0JMHg2NTcyMTFmYSwgMHg3YjA3OTEzYSwgMHhmNGFmN2FiMywgMHg2MjRkZWJmZiwgMHhiMzliZjIyNywgMHgzMzhiN2NmYiwKLQkweDUyOWUxZmExLCAweGM1MjdmMDNjLCAweGRhYTNkMjNlLCAweGM3NzQ4Yzc5LCAweDZmYmVjNTg3LCAweGVmNjhiZjQxLAotCTB4YzZjMmU2ZWYsIDB4MjE5ZmIxOWEsIDB4ODI5ZGNlMmYsIDB4MDdlYzBiZmMsIDB4YTY1ZTAxZWIsIDB4NmU3MWZjYTksCi0JMHhhYjgyN2NlMCwgMHgyZmNmODIzMCwgMHhlMzQ4MWVmYiwgMHhkNjdmMmQwYiwgMHgxOTRmZjg4ZSwgMHgwZDI5YTNmOCwKLQkweGU2YTZkMWZjLCAweDJjMGM3NmM5LCAweDcwN2RiODYyLCAweGU5ZmJiZjE5LCAweDQ3M2E2NzQzLCAweGZiNTYzZGI2LAotCTB4ZWYwOGEwNDQsIDB4ZGEzZTI1NzgsIDB4MDlkZDE2YmEsIDB4N2Y2M2E4YmYsIDB4MzVjZTMyNGMsIDB4YjY0MGQ2ZDksCi0JMHgxYjZkMGZkZSwgMHgwMWRmOTg3YywgMHhlNThjMWE1ZCwgMHhjZTM1NDA3NywgMHg2N2I4MzUyNSwgMHg3YzlmNmFiMywKLQkweDNiZjVhNzY3LCAweGI1OTdlYWExLCAweGVmMGM4YjVkLCAweDRjNjlkYTc5LCAweGQ5ZmY4ZDI3LCAweDVmZGYzYzUwLAotCTB4MDRlOWRlZDMsIDB4OTVlM2ZlZWMsIDB4NGViZGYyZTUsIDB4ZDNiZTRiYjUsIDB4YWVmZWU0YzksIDB4NWFmNGUzNDksCi0JMHhiZTU3YjE3OSwgMHgzYmJkZDBmYiwgMHhiZTkxYjNiYSwgMHgyNTdhZWNlZiwgMHg3YmFjZTMxMSwgMHg0ZTE1NjdmYywKLQkweGNlYjdjNzEzLCAweDc3ZjFmYzYwLCAweGJiZTU3YjQ3LCAweDI3YzdmNmEzLCAweGJlMDNmZjdmLCAweDFjNzY3ZjA2LAotCTB4YzY3OTBjNTMsIDB4ZWM0OTgyZmIsIDB4YzI0M2ZhODcsIDB4ZGZiNmZjODYsIDB4YmRjZmQ4MjksIDB4YjAzZDE2NjQsCi0JMHhhMjVmOWFlYiwgMHhjNTUyZmZkNSwgMHhmZWE0YTVjMywgMHhjZDdmZDA2YywgMHg2MWIzMjc4MSwgMHgyMDkzN2UzNywKLQkweGY3MDNhNmUxLCAweGM4N2EwOGZlLCAweGY0OGM3Y2ZmLCAweGZkODIyZGJmLCAweGY0ODBkNmRiLCAweDY0ZjdiNTk3LAotCTB4MzhlYzc4NDIsIDB4MTk1NDdmODcsIDB4NDZiOWYyY2YsIDB4YWRhNDk3N2QsIDB4YWUwYmZjOGIsIDB4ZDQ0NThkZmYsCi0JMHg2Zjc4MWQ2MSwgMHhkZjdlN2UwNCwgMHgzZDA3NmExMiwgMHgxNDdmMjdkZiwgMHgyYTEzOGY3OSwgMHg2ZmRmYmRmZiwKLQkweDg3ZjdjYzVlLCAweDU3ZTAxMDQ4LCAweDRhZmZkZmJjLCAweDlhODlmMjAyLCAweGZlNmI1NjFmLCAweGI0ZWYxNzk1LAotCTB4ZWY5NTFlMzcsIDB4ODcwYmUzODEsIDB4ZDQyMzFjZjksIDB4YTc3YWM5NzgsIDB4ZGY4ZGI3ZTQsIDB4NGFjZTJlYjcsCi0JMHg2YjhhYmY2NSwgMHhkYjIxMmQzYSwgMHhhYjVhZjQ2NCwgMHhmMGUzNGRmYSwgMHgyZTdjYzM5MSwgMHhmZDI0M2NlYiwKLQkweGYzYTFjZTgyLCAweDdlNjgxN2VjLCAweDcwYmVmNjg2LCAweGVjZjNhMWRkLCAweGFkZGY2ODI3LCAweGQyZjEyMjNmLAotCTB4YjdkNjQ0NzUsIDB4NzhiNDk4MTQsIDB4YzNjOTU3OGIsIDB4Mzg2MTU5NzksIDB4YjRkMmMyYmYsIDB4OWI5YjAwZDUsCi0JMHgzYTUwNWFiNiwgMHgwOGM4NzhkNSwgMHgwYWJiZTVmYiwgMHg5OWU3Y2E3ZSwgMHhiOGVhNmRhZSwgMHhmMzc1NWIwNCwKLQkweDk3NGQ1NmM1LCAweDNlYThkYWVmLCAweGE1ZWY4MWQ3LCAweGJiZGFkNzNkLCAweDUwZjNjODhlLCAweDI3NmUyYmE4LAotCTB4ZWY1ZDgzZGYsIDB4ZWJlY2EwYjAsIDB4ZGYzZGIwNzIsIDB4YzAyYTZkZDcsIDB4MTJhZjc1N2QsIDB4NzFkY2ZlYzcsCi0JMHhmNGQ2ZmVmNSwgMHgyMmM2ZWY3NSwgMHg0NjI5OTA0ZSwgMHg3Y2RjOTk0ZSwgMHgxNTY2NmI2ZiwgMHgwMjJlOWI4ZCwKLQkweDdiNGI4ZjdjLCAweDlmZTU3NDRmLCAweGY4YzMyZTNmLCAweGFmYzI2MjBiLCAweDViOTgwMjIwLCAweDc5MDlhMzM1LAotCTB4ZTE0OTA1OTMsIDB4ZjczYzYwMzIsIDB4ZDM4NGJhNTgsIDB4MGUyMGFmYzMsIDB4MzcyNDBjZTUsIDB4YTVmMjhmMjEsCi0JMHg4YWY1NGFlMywgMHgzMGVlY2UyMSwgMHgwYTA3YWZmOSwgMHhkYjJlYzZiYSwgMHhjNDYzNWM2NCwgMHg1Nzk5YjkwNiwKLQkweGZhNjhmOTI1LCAweGUyNDczYTQ5LCAweDgzYjlmNTFjLCAweGQzZTk4MWNmLCAweDliOWRmOWJhLCAweGExOTcwYzI4LAotCTB4ODM3YzcxZGYsIDB4OGM3ZjYwZmIsIDB4NDIwZWZmOTMsIDB4ZjZmNTk3OWUsIDB4MDI3NTU4YzYsIDB4M2RlOTk3OTcsCi0JMHhhNDI1YWVhYSwgMHg5ZjAzNjNlNiwgMHhmN2Y4ODI5YiwgMHhhMTJiOGUwNCwgMHhiY2ZkZWI2ZiwgMHg0ZjI5MmFlZSwKLQkweDk3OTkxOGJlLCAweGNlYjE0YmJkLCAweGU0ZmEyN2ZhLCAweDgzNWZkYjkwLCAweGNjNzJmYTc1LCAweGI4YjkyNTQ1LAotCTB4N2RlZjJiMTcsIDB4YjdmMzUxNWYsIDB4NTBiY2JmOWEsIDB4N2E5Njc2OWQsIDB4YzhjZGIzY2UsIDB4YjRmZTQwNzAsCi0JMHhkNzhhODlmYiwgMHgxZjUyZWZjYiwgMHg4YWQ5M2MyYSwgMHhjNDczN2Y3NSwgMHgxNjIwZWZjZSwgMHg3M2M5YzQ4ZSwKLQkweGI2M2E4Y2Q1LCAweGQ5YjE3ZGFmLCAweDJlMjgzZmVjLCAweGZlYTI2ODhiLCAweDIxNGQwYjI3LCAweGE2ZmZkZmRjLAotCTB4NTk5ZTczYjAsIDB4NmRmY2EzZDgsIDB4YzNkZjJjNTMsIDB4ZjFiZjhlNTYsIDB4OTY0ZGVjMzksIDB4OTJhN2Y3ZjksCi0JMHhmZjU5OWY2OCwgMHg4YmEwNzhhMCwgMHhmZTJmNDc5YiwgMHg2Y2E4NGZlMywgMHgxODdmZGIxYSwgMHhmZTQ5MTFmYiwKLQkweGI5YzNmMDY2LCAweDdlZjNiYWQxLCAweDlkMzdmNTQyLCAweGI0OGY3NjQzLCAweDhmYmY0MjYzLCAweDllN2UwZmUzLAotCTB4YWM4YTYyOTgsIDB4YzVjOGNhZWYsIDB4ODc5ZDVmMTcsIDB4ZTlmMWNlZDIsIDB4MzJjZGM3ODUsIDB4OWViNTE1OWUsCi0JMHhiZTJlMTkyYiwgMHg5OGZkNGUwZiwgMHhhNjFjNTczZSwgMHgwYjg3Y2UyMCwgMHgwZjdhOWY4ZiwgMHg3Yjg4NWJlYiwKLQkweGQ4MzczOGNlLCAweGY2ZjU5N2FkLCAweDI1NjZiODRlLCAweDE1MGU3ZTIzLCAweDg4YWM5N2ZhLCAweGI1NDA3ODNlLAotCTB4YWU3ZDY5NGIsIDB4N2IwOGRjOWYsIDB4MjA1OWE2ZjksIDB4NjUxNDQwZWUsIDB4MDdkNjg4M2UsIDB4NDI1ZjgzM2YsCi0JMHhhYTM3YzZmZSwgMHgwN2VkNzllNCwgMHg1NDZmYmUzOSwgMHg2NzA2NWNiMSwgMHg5YmU3MmU0MSwgMHhiNjlmYmYyNywKLQkweGUzNTE0YWFmLCAweGQxYWU5MjU5LCAweDhiYTY4Yjc0LCAweGU3NzE2Zjg2LCAweDg1MjRlOWYwLCAweGE4ZjQ1Y2YxLAotCTB4YzYyZWVmYzQsIDB4Yjc2N2U3ZWYsIDB4MTk4YTk4OTMsIDB4YzYzNmZiZmYsIDB4Zjg2ZmZmZjMsIDB4Y2E3ZGUyZmQsCi0JMHhmYmUzNzNmNywgMHhkM2VkM2FmYywgMHg3N2U3ZDg2ZCwgMHg5M2VkMWZmZSwgMHhiY2RmYzBmNSwgMHgzZWUzNjFjZiwKLQkweGIxNDJmYWQzLCAweDhmMzdjMDczLCAweDhhY2ZkODliLCAweDBhMmEzN2JlLCAweDY2ZDFlYjA0LCAweDUzYzcxYzczLAotCTB4ZGRmMjcxZmQsIDB4ZDNjZmU5MDEsIDB4ZGU5YTlmZDAsIDB4MmUxNzVkOWMsIDB4NGU3MWJmODIsIDB4YWViMTY3ODgsCi0JMHhlYjg4NjliMCwgMHgzMGU1NTYyZiwgMHhjMzE0Y2NkZiwgMHhjMjdlZmM5OSwgMHgzZjg3MmUxMiwgMHgzNWJmYjY2YiwKLQkweDRiYjIyM2Y3LCAweDBmMDQ4ZjAzLCAweGY0ZTM0YWJmLCAweDU2YTdjMTI5LCAweGVkZGQ1ZjQxLCAweDk1ZGNmY2UwLAotCTB4YTU2MDI5YTAsIDB4NDU5MjA2NzksIDB4N2Y5YTMxZjEsIDB4Y2U1Y2NkNjAsIDB4YWExMTVjYjMsIDB4YjFiMDZhOWUsCi0JMHhlY2Y2YTI5ZSwgMHhjYTM3YjQxZSwgMHhmOWZkZWZmNiwgMHhhM2Y4MWVjMiwgMHhmNzgyZjkyMywgMHhhZTIyNTAzMywKLQkweGMwZjA0YmQ5LCAweGZmNmUwMjkyLCAweGY2ZTdhNmExLCAweDk3ZWZjODI0LCAweDgxOTNlNjA4LCAweGVmN2MyOTM1LAotCTB4ODNhN2U5ZTQsIDB4MGU4ZWMyZDcsIDB4MTEzMzdhMGMsIDB4ZjQ0Y2FiNTcsIDB4MTljNzQxODcsIDB4MDc5ZjY5NjYsCi0JMHhlNTRmNTRkYywgMHhiMWFmOGExMywgMHhjOTE0ZTMxZCwgMHhlMzFiODZmNSwgMHg0MzQwM2E1ZSwgMHgyYTkxZTZjNSwKLQkweDNkNzNmYWE1LCAweGQ1Y2Y5YzA5LCAweDYzOGI0N2U0LCAweDdmOWMwZWNmLCAweGRlZDI3ODBhLCAweGYyYTA3ZjIzLAotCTB4YzU3Nzg2OTksIDB4YTY2N2RmMmIsIDB4ZThkNjc4YWEsIDB4NmE1YmYxYTAsIDB4YTZjZjdjOWMsIDB4Mzc3YzkxNmMsCi0JMHhiZDc5MWY3ZSwgMHgzM2M4ZmJlMCwgMHgyNzc4Mjk2OSwgMHg3MWUzMWNkNywgMHg0YWRmZGYwMSwgMHhmZDYxOGZmMiwKLQkweDNlODgxYjdkLCAweGQyNDNlYzY2LCAweDViZGUxY2UxLCAweDk5N2ZlMjRlLCAweDdlNWE0ZGFiLCAweDM0NjNkZjlmLAotCTB4OWE1ZmE5MGIsIDB4M2QxN2Y3YjUsIDB4MjIxN2Y3YzYsIDB4ZWYxOTMzM2MsIDB4ZTg5Zjk4OTEsIDB4M2VkZDY3ZmIsCi0JMHg1ZmJlMzU1YiwgMHhkMmZiNjVlZSwgMHhkOWRlZjJhYywgMHg3YTRmMzRmZiwgMHg1YWE5Mjg2ZiwgMHg2MjNiOTVkYSwKLQkweDlkZmM4OWZkLCAweGYzNDUwZWZhLCAweDdjOTZjZmMzLCAweGU0ZjYwYjNjLCAweGNjNmY4M2RjLCAweGEyNTc3OTQ0LAotCTB4ZjY5YWI5MmYsIDB4MWZlMzQ0ZjMsIDB4N2RjNGMzMTYsIDB4ZjdlNjE5OTAsIDB4ZmUzNDFmMzQsIDB4ZTVjNzE2NzEsCi0JMHhmY2MxYmNiNywgMHg1N2FlYjdmZiwgMHgwMWZmYzc1YiwgMHgwOTM0ZTE3MCwgMHgwMDAwNDhkMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU1NDdjMDksIDB4ZjM3ZGYwZjUsIDB4NjY0OTk5OTYsCisJMHgwZDkwOTMyNiwgMHg4YTAyNzEwOCwgMHgwODEzODBhOCwgMHhjM2I0NDA2OSwgMHg4ZTIyYTIyMiwgMHgyNjBkYzU1YiwKKwkweDEwMzdkOTAyLCAweGZkYWZmMGZkLCAweDJkMzYxMDMyLCAweDQ2ODJkMGQ2LCAweGEwYzA3NDhiLCAweDBkMDQ4MmMxLAorCTB4MDBlMDI0MTgsIDB4ZDUyZmY4MmUsIDB4NWI3YmJmZDgsIDB4MTZjMzRhMGMsIDB4N2UxYjgwOTIsIDB4Y2U3ZmU1YjUsCisJMHhlZjI1ZjdiOSwgMHg2ZDgwMjY0ZCwgMHhmZGZiNWZiZiwgMHhlNmYxNjliZiwgMHg1ZGRmN2JiYywgMHgzZGNmNzZjZSwKKwkweDE0ZmJkY2Y3LCAweGY4OTYyOGRiLCAweGUwY2VjNjYzLCAweDJjYWJkMjBmLCAweGRkNTFiMThjLCAweGEwZGI2Y2U5LAorCTB4NzRmYTg3YTEsIDB4NjU1OWZmZTcsIDB4NDI4N2VhZDMsIDB4NmVkMGFiMWUsIDB4OWNmZGQ2MWUsIDB4N2U1NDg1YjEsCisJMHgzODZiOGM0MCwgMHhmNGQzMWNiYiwgMHg4ZjBlMWIxMCwgMHg5NjE2Yzk2ZCwgMHg2ZTdkZDhjYywgMHgwOTAxYmY0NiwKKwkweDkxMjk3NGJlLCAweDU2MTVjZWIxLCAweDc4MGNiYWY3LCAweDA4NWM3YWFlLCAweDIwYzhmN2RmLCAweGY3YzI1MDc3LAorCTB4MTY1MmM5M2MsIDB4YmFhMjNmZTQsIDB4YmVjYzAxZDcsIDB4NmNiMzIzM2YsIDB4ZTBkYTY2YzYsIDB4YzNmYzBmNmYsCisJMHg3Y2JlYTA3YSwgMHg2MzEwNmNhYywgMHgwNTk5NjllYSwgMHg3N2VhN2ZhMCwgMHgzNDAzYTUxMiwgMHgwMGVmYzMzNiwKKwkweDZjMmRmOTc4LCAweGZlZWVkMGRjLCAweGVjZmQxM2I5LCAweGU4Yjc4MDczLCAweDViN2U4OWY5LCAweDA5N2Y5MGMwLAorCTB4ZWNmZmE4OTMsIDB4NWZhYTRhZmIsIDB4ZjJmMTZmNmYsIDB4MDczZTZjNWIsIDB4OGQ5NDE2MzYsIDB4N2Y5NjNiY2YsCisJMHg4YmU3YzJlOSwgMHg3YWExNmU5YiwgMHhkODJjNTMxOCwgMHhjOGI3NzJjZiwgMHg2MzVjZmM0ZiwgMHhiYmZhZWU5NiwKKwkweDc2YTIxNGYxLCAweDA0ZDNkODc0LCAweDMxODhmZWVkLCAweGI2YmZiNWU5LCAweGQ1NDNjMDMyLCAweDA1NjNkNTU2LAorCTB4YWFkODRjYmMsIDB4NzAwYzdmODYsIDB4ODQyOTVhZTksIDB4OWQ5NzY1YjAsIDB4ZmI0YmMwMzEsIDB4OWQ4NzBlNmEsCisJMHg5ZmNiMGY5YSwgMHhhYTE4MDVhOCwgMHhmZjM2YjcyOCwgMHhkYmM0MGFmYywgMHhhM2FkOTk1NiwgMHhmNzg0ZmM2NiwKKwkweDNiYzcxYjU2LCAweDllNzBlNDZiLCAweDZiYTU4MzlkLCAweGY3Yzc0Zjc3LCAweGNjYWQxYTBiLCAweDZlOTVmNTBlLAorCTB4MDU3YTlmY2YsIDB4NTRmYmY5YzAsIDB4ZDc0YTQ1ODYsIDB4MDFmYWQwMmYsIDB4ZWE5MjE4NWMsIDB4Y2YxOGVlMTEsCisJMHgzNmUwZmRhOCwgMHhjYTFlYjQzOSwgMHg5MzlhYjg3NywgMHgxZmYxODM2ZiwgMHhjZjMxYjRhYiwgMHg2NzZmZDBjNSwKKwkweDgwYWRmMjczLCAweDk2ZDBhMjg3LCAweGQxNWVmODQ5LCAweDJjOGJjOTQ2LCAweGZhZWI2MTM0LCAweDdiYzJmYjM3LAorCTB4YWYyNDFiYTUsIDB4NWM1MmYwMTUsIDB4NDMzY2NiMTcsIDB4YzBjZTFmNzgsIDB4MzkwNmQ2YmYsIDB4OWZjODYzZmMsCisJMHgxOTY0ZTMwYiwgMHg0OWVhZDc0OCwgMHg1N2Y2YzY0YywgMHgzNzY3MWU2OCwgMHgwZTU1OGU5ZSwgMHgzNzZiMWU2MSwKKwkweGRhMDFiYTVjLCAweDVlY2FmNzgxLCAweGM0MzhiYzk0LCAweDIwMGIwYjMyLCAweGI3NmZiNjVmLCAweDgxZDY3YjRmLAorCTB4MGRhMDViZTMsIDB4OTZiOGUyNzYsIDB4M2YyZTU4NmEsIDB4ZWVjZGJiOTQsIDB4ZDVhZGZlYzEsIDB4ZDE3ZTQxMjYsCisJMHg5ZTVhYjVlYSwgMHg3NWM1ZmU4MSwgMHhjZDhmMzE5NywgMHg0MTlhYWZkMCwgMHg4OGZlNDYyOSwgMHg5YjAxOGY0YywKKwkweGM0NTNmYjE4LCAweGY5MWVhZjk4LCAweDM3NjkwOTQ0LCAweDlmYTJlNDE5LCAweDJlZjQ0ZjE0LCAweGY1NGQ5M2FlLAorCTB4NGIxOTI2MDMsIDB4MDA3ZWZmODIsIDB4ODJiZTAyN2YsIDB4NTc4NDlkM2IsIDB4MDU3MzZlOWQsIDB4M2I3NGU5MWYsCisJMHgyOTg3ZTQyNSwgMHhmYWM2ZDk5ZCwgMHg0OGU3ZjRmNSwgMHg3NTRmZTgwNywgMHg1ZmQyOWJhNSwgMHhiYTUyYTY1NCwKKwkweGY0NDNkMmIyLCAweDA3ZjEwMjc5LCAweDZmZDE3MmU5LCAweDRlMzY1OGQ3LCAweDNlNWQ3NjgxLCAweDRiMzE0NmU2LAorCTB4YTcxYmUyOTgsIDB4ZTdlMDljMDIsIDB4MDFkZGYyNzAsIDB4ZjE5NjczYzksIDB4NmExM2U5ZWIsIDB4NzI2NTE3MjAsCisJMHg1M2U0OWIxNSwgMHgwNWFjMDJmYSwgMHhiNDJmMzBlNiwgMHg5YmU4ZGNhZiwgMHhkN2IxOWEzOCwgMHgxYzcxZTA1OSwKKwkweDUwMjkyMmZmLCAweGFjNjU3NDgwLCAweDc0MGZkNTNlLCAweDFlODEyMjU5LCAweGM1MmQ3YzAxLCAweDk2MWUwMjQxLAorCTB4MDY3ZTA1ZjQsIDB4NGY3MTNkM2EsIDB4MjRiMmIzZjYsIDB4NzA4ODlhYzYsIDB4NjY4ZjczZGUsIDB4NTQzNTNkNTAsCisJMHgwY2Y1MGE4ZiwgMHhjOTNkNzczYSwgMHhmNTRjNzNkMywgMHhkMDJmNGYyNCwgMHhmNTRiNTllYiwgMHg5ZWFmY2ZkOCwKKwkweDMxOGZhNjI3LCAweDkxN2E2N2Y3LCAweDU4MGJjZjVlLCAweGZjZjM5MTZlLCAweDYzM2M5NWM2LCAweDMzM2ZiOWFjLAorCTB4OTQ5ZWE4NGEsIDB4MDAyY2JkYmIsIDB4N2Y5ZDY1ZTUsIDB4ODY0ZmIzNTgsIDB4ZjhjNmM3N2MsIDB4MjMzMjhmMTEsCisJMHg4NmRmOGQxZiwgMHhhYTQxMzlmNSwgMHg5NzE0N2M4YywgMHhhNzkyNjMxMywgMHgwOTgyNWY3OCwgMHg5ZmI5MzNlZSwKKwkweDdmOTI3Y2E5LCAweDY1M2YyOWEwLCAweDdjMTFhNWRhLCAweDVlYjc3MGU5LCAweDU0ZTg2MDI2LCAweGZlYTM1ZTM4LAorCTB4ZDIzNGZkNmEsIDB4ZDlmYWUzM2IsIDB4OWZhMDdlMDgsIDB4MDNjZWY0ODMsIDB4YmIxNzAyNjMsIDB4NTdkOGRmYTEsCisJMHg0MDdmZjQwNiwgMHg4ZWVlNWMwYiwgMHgyZTMwMzdjMiwgMHhlYTYyYTU4OSwgMHg5OTFhNjBiMSwgMHg3OGU1NTRiZiwKKwkweGZiZmZkZjFiLCAweGZkZTEwN2MxLCAweGUwZTc0YjcyLCAweDRiZmY4MDc4LCAweDhlMjFmNzFhLCAweDRjYTg4ZmZiLAorCTB4MzIzMTZlODEsIDB4MzE3MmMwYWIsIDB4NmZmYTQ2NTYsIDB4YjNmNjQ2NjksIDB4OTc1ZTAzNDEsIDB4OTE3ZTAwMGQsCisJMHhhNjVkZWJiYSwgMHgxZjkxNTIwNiwgMHg0MTE1ODI1YiwgMHgzMDI1Y2ZlNCwgMHg4YzdlYjA0MSwgMHhlMTE1NjQxZCwKKwkweGZlZjA4NWUwLCAweGM0NTRiYzgwLCAweGZkMDM1NWJmLCAweDgzNWY2YzYxLCAweGZiNTI4N2Y2LCAweDViN2VkOGFkLAorCTB4MDc1YmVkMmYsIDB4YjdkYTk4ZTYsIDB4ZGE5ODE3YTUsIDB4M2VkMDY5YjcsIDB4NzA2NzQ3YzgsIDB4ZjAxZjY4YmUsCisJMHg5M2IxODYzNywgMHg2ZmI1M2U2YywgMHhmNmEwMmY0ZCwgMHhjMGFjNmE5NywgMHg1NzRjN2VkNCwgMHhiYjYwZGZmYiwKKwkweDQ5ZmI2M2RmLCAweDcwM2ZjNjUxLCAweGU5ZmM3OThjLCAweDZiZjFlNjQ1LCAweDQxNmNmYzdjLCAweDQzMWZiNDUwLAorCTB4MjBhNDk3ZTMsIDB4MTE3YTdmMWYsIDB4ZDc5NWJmMWYsIDB4YWJiZWQ1ZGIsIDB4MDQ5YWZmMGIsIDB4NWVhNDNhZWQsCisJMHhhYzY4M2ZjNiwgMHg5NDE3ZmM3OSwgMHhlNTZmYzc5OCwgMHgyYzE3YmJlZCwgMHhhODNiZWQxMywgMHgxOTY5NzhmZCwKKwkweDI1MDVmZjFmLCAweDBkNjZiZWQ0LCAweGI0OGY5MTc4LCAweDIxMTUzMWZlLCAweDQwZDM0ZjljLCAweDA3NDg1MjgwLAorCTB4OTIxZDI4ZmEsIDB4OTNlODE4YzAsIDB4ODQ4MWIyZGYsIDB4Mzg2MjA3ODcsIDB4MDMxMzdkZGYsIDB4ZDZlOGU2ZmMsCisJMHgxMjA0MmNhNywgMHg5OTcwZjMwOCwgMHg4ZGUyZTllMCwgMHgzZjNlMzRlMywgMHg5ZjVlNjkwNywgMHhhYjNhYmEyZCwKKwkweDhjZjlhNjUxLCAweDJlODZiNGFkLCAweDM3YjZmZTgyLCAweDY3ODQ0MWNhLCAweDI0MzJiY2FkLCAweDc2MGE3Y2QzLAorCTB4YjBhN2JlMDIsIDB4ZjNmZjNlMzAsIDB4OGNlYjYxYWEsIDB4Njc0YzhhZTMsIDB4MmRhZGFiNTcsIDB4ZDJlYWI5MDYsCisJMHg5MGQ5ZTNlZiwgMHgwNTVmZTgwYSwgMHg2ZWE4YzEzMiwgMHgzNGY0MTViOCwgMHgzOWZjM2QwMywgMHgwZjRjNjNlOCwKKwkweDM5MmVkY2FiLCAweDVkOWM3YTA0LCAweDA1OWI5NDZjLCAweGIyMDkyZWRjLCAweGZmNDA4N2Y3LCAweGRmZmEyMjdmLAorCTB4Yjc3YzcwYWEsIDB4ODg0MjkzY2UsIDB4Y2M1NjZmZmYsIDB4Y2Q5ZjUwZDEsIDB4YTQwNThlYWUsIDB4NWNhM2Y3NzcsCisJMHhiYjczYTlkMCwgMHgxNGY2NDQzNSwgMHg5Zjg4MDc0YywgMHgxOTE0NDlkYiwgMHgxYmFlZDNmYiwgMHgzMDVjOTRkZSwKKwkweDMxZjRkNjNmLCAweDBiMzc3N2JkLCAweGYyODU0ZTJkLCAweDBlZTc5NzMzLCAweGVmZjhjMzcwLCAweDIxMWQ2NjlhLAorCTB4N2NjNGZjZTMsIDB4YzcyNDJkZmQsIDB4ODcyNWJmYWMsIDB4MmIwZDY5YjEsIDB4ZGMwMGZlZDQsIDB4YmNmZDRkM2UsCisJMHgxZGZlZjBjNSwgMHg1NzdjMzMwMSwgMHg1NzZlMTk4MSwgMHhlZDA1YWE0MywgMHhhZDg5NDI5OSwgMHhhOWVmN2E4NSwKKwkweGVkZWJlNzMwLCAweDM4MTI5NjRjLCAweDNmN2I0NTVkLCAweDg1ZjQxYzAxLCAweDNhNjBmNzQ3LCAweDg5YmIxZjAyLAorCTB4ZmNkZGQzYWUsIDB4ZTUzZmJkNWQsIDB4NGMyY2E5MGYsIDB4MTI0YjcxZjMsIDB4NTEyN2ZhMjMsIDB4OGY5YjgwYjksCisJMHhkM2JmYjIzYiwgMHgwZmNmOWI1NSwgMHhhMGZlOTlmZCwgMHhlYzhjZjg0YywgMHg1OGFlY2I3ZiwgMHhkOWVjMDU5ZiwKKwkweDU1MmY5YTk2LCAweGYxYzhjMTY0LCAweGM2N2ZmNjQ0LCAweGI4ZjFjOGZjLCAweDcyMWY5YzM1LCAweDM5Y2Y5MTgzLAorCTB4NTNmMjQ0OWYsIDB4NWZiOGUzNzksIDB4NTNmMDMyMWUsIDB4YmZiNWZkNjksIDB4YWY3ODY0M2MsIDB4MTMyNmVlYjgsCisJMHhjM2JhMTg1YywgMHgyNmJmM2U1NCwgMHhiYjNmOTRkNywgMHgzZjk0ZDBiYSwgMHgxMzFjZDk3MywgMHhkMDdjMWI5YywKKwkweGZjYzY3ZTU0LCAweDdiZmNhNjA1LCAweGU1MzExZTJhLCAweGMyYjA1NWRmLCAweDc4MTFkZjA0LCAweGY2ZmU1NGNhLAorCTB4Zjk0ZDZiNjksIDB4ZGM5NzVkOTYsIDB4ZjU1NDcyODgsIDB4ZGU3MGNjODEsIDB4ZmFkMWRhZjgsIDB4YmYzN2I0NzMsCisJMHhhNDVlMjg3NiwgMHg1N2IwMTFjNywgMHg4MThlMGU1MCwgMHg3YjY5ODJiZCwgMHhhYmIyNDhlMywgMHgzMWU2MGY0MSwKKwkweDRiNTZhMTMwLCAweGM2Y2I4M2ZiLCAweGE0NjY1ZWEyLCAweGVmZDI0MzNmLCAweGM2MzRjMTgzLCAweDg0M2M5NzllLAorCTB4NjM0NmI5M2YsIDB4ODk2MTYwNjEsIDB4NzFmMTc0MjUsIDB4NmZjODZjYTcsIDB4MGQ3ZTQ3MzksIDB4OWVjOGZhMDgsCisJMHhmNDRiNzJmOSwgMHg3MmViZTVlNywgMHhkM2JkNDAyZiwgMHg1ZjgwM2U5YiwgMHgzYWU3OWM3ZiwgMHg5OTEwM2Q4NCwKKwkweGJmMzEyMjVmLCAweDdlYmViOWYxLCAweDdhZTI1Y2JhLCAweDUzYWM0NGJlLCAweDNiZWE1ZTRhLCAweDBlMTBiOTllLAorCTB4NWIzOGFlMGYsIDB4NTQ4MGY1N2IsIDB4ZmQ2ODkzZDQsIDB4ODAzZjIxMjcsIDB4NTFlODE4MTQsIDB4MjRjODM3NWMsCisJMHg2NWJiNmRkZiwgMHhlYTE5NTdlYSwgMHg5OWFiZDAwNCwgMHg0MjU3YmZjYywgMHg5YmRlMTMzZCwgMHhlYzMwY2I3ZSwKKwkweGQ0NzVlZjg3LCAweDg5MzFhY2ZiLCAweGNhYjZmNWU2LCAweGE0M2NiZmM5LCAweDk0ZmM3ZDIyLCAweDQ2OWNhOTFlLAorCTB4ODA2NTZiNjksIDB4MDU5NTQzZDIsIDB4NTk1ZTdlOTQsIDB4ZTU0YjY5NDEsIDB4NTQwZjRhN2MsIDB4NjNmZDI5MDYsCisJMHgzZjRhMzJlNSwgMHhmNGE2YWNhZCwgMHg0YTFhY2FlMywgMHg1MTBjYWMzZiwgMHhhM2U5NWVkYSwgMHgyZTg3OTc1NCwKKwkweGY2MTdlYmZkLCAweGMwYjc1OGIwLCAweDhiMGY2ZTAzLCAweGIyODIyY2IxLCAweGRlZTcyNGNkLCAweDUzZjM5NDU0LAorCTB4YTMwNjZmOGUsIDB4NjNlYTdmYmQsIDB4ZGU4Y2EyNjAsIDB4NmZjOTE1ZjEsIDB4NDdkMWQzYmQsIDB4MDg1ZTRhZjYsCisJMHhjZjRmYTc5OCwgMHhhNzBjN2I3YywgMHgyNmMyZGQ5MywgMHg4ZjQ3ZDAzMywgMHhmNzljZjQ1YywgMHgyYjA0YTFkZSwKKwkweGE5YzAzMmM4LCAweDUxOWM5YmRlLCAweDBmYjk4NWVhLCAweDNhMmU3NWU5LCAweDcwZTc1ZjMxLCAweDNlYjc2NzVjLAorCTB4YWM2Yzk3ZmQsIDB4MjA2OTcyZjcsIDB4Y2FmNzg3OWYsIDB4ZjBiMzBmMzQsIDB4ZDdhNDVlYjMsIDB4ZjQ5YmM1MGYsCisJMHg1YmQyOWZkYSwgMHgyZTg5ZGNhMCwgMHgzM2E3MzVmYywgMHg2ZTQ4ZTc0OCwgMHg4MzU0ZmZhYSwgMHhjNzg4Mjk5NSwKKwkweDJlMTBkOGE2LCAweDdiZWQ0ZjhkLCAweDM4ZjI4NWQ2LCAweDNlYWU1NTM3LCAweDdjNzdiMjM0LCAweDU0NjdkNjk1LAorCTB4MjllMzBjM2IsIDB4YTdjMzM0NmYsIDB4ZGNjOWE1YWEsIDB4YmI4OWUwN2YsIDB4OTVmMjE4NzUsIDB4NDVkMGZhYmIsCisJMHg0YTU0ZmY0OCwgMHhhNmU2N2FmNSwgMHhiMWNlZDQ2YSwgMHg3YzcxNDFiYSwgMHg3OWYxMGVmZSwgMHhmMTNjNjM3MCwKKwkweGE5M2JhYzJiLCAweDNmYmIzZmZjLCAweGY3YTNkNWJkLCAweGY2MDZiMTg3LCAweDAxZjUwZDg1LCAweGY3M2EwZGU0LAorCTB4ZGQwN2E4ZmEsIDB4M2YzNGFmOTUsIDB4ZmQ0OWFiZDIsIDB4MTg4NWVkMDYsIDB4MjA2Njc3ZjgsIDB4YWMxMGFiZDYsCisJMHgyZjVlNWJkNywgMHhlMzk3YWQwNywgMHhmNmE2OGRmMywgMHhiZThmM2RlMCwgMHg3YWY3YzdhNiwgMHhiNTg1NWJlNywKKwkweDdkMDRlM2VhLCAweGU3ZjBhNTc1LCAweGFiZDlkNzE0LCAweGJjNGFmM2NkLCAweGVjNmYyZTA5LCAweDY3OWE2ZDViLAorCTB4N2Y5MDBmZjAsIDB4YzgyOTIxNTYsIDB4OWI4MjI1M2YsIDB4MzJjNzE0M2EsIDB4NmE5N2ZhMDksIDB4ZTViZDUwZjEsCisJMHg2YTU3MmYxMiwgMHgxZTAyZDE2YiwgMHhiNDY2Yzc2MiwgMHhkMWNkZWUzMywgMHhmYjczY2ZmOSwgMHgxZmRmNDAxZiwKKwkweDFlY2FhZGZkLCAweGQ3ZTE3Y2M1LCAweGIwNmNmNTUxLCAweGU3ZTgyZDZmLCAweDBkYmRkMDExLCAweGVmNTA1M2M1LAorCTB4M2Q3NmRkMWQsIDB4OThiMzI3ZDksIDB4YTQ4Yjg1ZGYsIDB4OGQ5ZDU2MDIsIDB4NjYwOWNlNzYsIDB4N2ZmYzhjOTksCisJMHgzNWRlZmQ4MiwgMHhjOGRlYjBkMiwgMHg5ZmQ0NjhiNywgMHhmM2NjY2I5OSwgMHgyNjY3ZDgyYywgMHgwY2M2YmYzOCwKKwkweDkzOWJiMWU3LCAweDU2ZjNkZjkxLCAweGEwYjczMGFhLCAweDZmZjM5YTVjLCAweGJlNDliOGI3LCAweDEyYzU1OWYyLAorCTB4M2YwOGVmNWEsIDB4YTY2ZWJkZDgsIDB4MmZiOTA3ZjQsIDB4ZWM5OWU1N2QsIDB4ODdlOGExZGMsIDB4Zjc1YmZhZTAsCisJMHg3MDI2MTQwZiwgMHgzMTI4YTUzYiwgMHhmZjIwZjlhNCwgMHgzZjkxODY4YiwgMHhmYmUxODJiOSwgMHhhN2E4MjVhMSwKKwkweDVkZTY0ZTgyLCAweGVmZDI3YWNmLCAweGIyM2ZmNjg3LCAweGQyN2NmYWJmLCAweGZhMjE0ZmMzLCAweGJlNDlkNzIxLAorCTB4ZGE3NTk0NTAsIDB4ZDg0OTE2YzMsIDB4OTc0YTQxNWIsIDB4NzZlYjcxOGIsIDB4NWMwNDRkNmIsIDB4NDdkNzAxMWIsCisJMHhiZjM3N2ZjMCwgMHhiZjEzMzIyNSwgMHgzNTAyNWFhNSwgMHg1ZmNlMjQ5NiwgMHg0YTQ4MmY2OCwgMHg0N2Y4MTZhNywKKwkweDUxZWQ0ZmVhLCAweGI1M2ZlZDdmLCAweDNmYTgzNGZlLCAweGZkN2Y1NGRiLCAweDBiZmViNTNmLCAweDI5YmZmNDdiLAorCTB4YWZhNWZkNWEsIDB4MDQxNmRhNmMsIDB4NzliNDUzN2QsIDB4M2NjMThiOTUsIDB4NGVhOTU0NzQsIDB4NGJkZDAyZjYsCisJMHgyMTc2MmZkNiwgMHg4MjUxMWMxZiwgMHhhM2U3ZTQyZSwgMHgzNDcyNzkyMSwgMHgyMmQyZjg3ZSwgMHhlN2NjYTJmYywKKwkweDg1NWQ3MDkwLCAweGM3ZmQ0MjdmLCAweDU0ZDlmODVlLCAweDU5YmVlN2I0LCAweGJkNjliYWFmLCAweDViMGQ2NzU0LAorCTB4MWFjYjRlNDEsIDB4ZGZhMGE3MGEsIDB4MWM4M2UwMTcsIDB4NDY1MjdhNWUsIDB4OWZjY2QxYjgsIDB4NGFhZmNmNDUsCisJMHg3MDFlZmY0NiwgMHg4NDRmNTg4YSwgMHhhYjJhNWVjOSwgMHg5YzI0ZjNmZCwgMHgyNzU5Y2E4NywgMHg3YmU0NTljOSwKKwkweDA0ZTlmZWQ4LCAweDVhYjk4ZmQyLCAweGU4N2NjZjVjLCAweGU1ZjlkOTI3LCAweDBkZTUyZjAyLCAweGJiMjkzYjNmLAorCTB4MzBmNmJkMzAsIDB4NGNiMDEzZWEsIDB4N2M4ZjBlYzgsIDB4NDFkODQwYWYsIDB4YzRjZTJjODcsIDB4YjE0MjU4NTYsCisJMHhhMTFmYjExZiwgMHhjMmYxZDRkZSwgMHhhYTBlZGM0MiwgMHhmMGU0ZjBkYSwgMHhiNmFmZDA4MywgMHgyNGJhZGZkYSwKKwkweDc5NzRiZTAzLCAweGYzM2Y1NTNiLCAweDdhN2FhZmQ3LCAweDYyZWRjYmQ3LCAweDVlZmRkN2JkLCAweDM0ZjNkZTg4LAorCTB4ODlhZGZiMGEsIDB4ZDg2YTI1YTcsIDB4Yzk3MWY2ODUsIDB4ODQxYmQ1NWEsIDB4OWU5YjI1YzcsIDB4NWM2OWVlN2QsCisJMHhmNTYyN2VhZiwgMHgxN2Y1MDQ1ZSwgMHhjM2UzN2E2ZiwgMHg2ZjE3MDAzMSwgMHhmMGE3MTM1MSwgMHhlNGE0Mzg2MSwKKwkweGMzOTRmYTZlLCAweGJhMjNmOWJmLCAweGYyZjQ1MWU5LCAweDE4Njc5YTFiLCAweDQyNzBmZTdmLCAweGI3OGE1ZDM3LAorCTB4YjBkOGQ2ZWMsIDB4NTA5OGY4OWUsIDB4NzE2YjViYmYsIDB4ZmQ0ZmExNDQsIDB4Njc2ODQ5YzEsIDB4NTZmODZkNTUsCisJMHhkMWU1NzVjMywgMHhjOTRiMTI1ZCwgMHhiNWNmODI4OCwgMHg4MGJkOTA2ZiwgMHgwYTdhMjI3OCwgMHgyZmQxNzU3YSwKKwkweGQwMzk3Y2EyLCAweDI0N2FmNTA1LCAweGJkY2IyMmJkLCAweDE0NjVmYTgxLCAweDkzZmQxN2FmLCAweGJlMmZkZmMwLAorCTB4NGZlYzdlOGEsIDB4NDNjNDVlYWQsIDB4YjlmNzhiYzEsIDB4OTU4NzNjNzAsIDB4Y2ZlN2NlMGEsIDB4M2Y0NjRlMmMsCisJMHg0YzFhODE3ZCwgMHg5ZmNhNTM3NiwgMHg5ZmI5YWMxNywgMHhiZGZmMmZmOCwgMHhmYWY5OTNmYiwgMHg0MmQ3ZDdkMCwKKwkweDJmYjA1NTczLCAweGVhZjY3MzhlLCAweDc5OWM2OGRiLCAweDU4N2M0MDJjLCAweDBmZWM4Y2YwLCAweGMyYjVmYTQxLAorCTB4MjI4OTZmMjYsIDB4OTczMmM1MjcsIDB4ODBlYmMzOTMsIDB4YzNjZTMwYjgsIDB4YmY0MTRlYjgsIDB4ZDBlNWVmZWUsCisJMHhjYzhmZjI3YSwgMHhlZTBmYTg2MSwgMHg2Y2YxZmRkNywgMHg4YjVmYzEyZSwgMHhiMjcxODRmZCwgMHhkYWU3NWY0NSwKKwkweGJiNWJmYzRjLCAweDc0ZTkxOWI0LCAweDA1MmY4MDZjLCAweDRjZTU2YWZkLCAweDQ4N2MwYTA5LCAweGY5NWVhMDY3LAorCTB4Mzg1M2FiYmQsIDB4Yzk0Nzk4OWQsIDB4NWQ4MWVmMTYsIDB4NjM5ZjAxMzAsIDB4NjdkNTY2ZjksIDB4OGY3YTZlMWYsCisJMHg2ZWU4Yzk5ZCwgMHgxZjY4OWU3ZiwgMHhmMzgzMWRmYSwgMHg1NjY0ZTFmOSwgMHg3YzY1MWY1MCwgMHgwN2FlYjIzNSwKKwkweGYwMzc1ZTYwLCAweGI5ZGU0MTk5LCAweGMyM2VkN2ZjLCAweGZmOTc1ZGU1LCAweDMxOTM0ZGQwLCAweGI5ZjdhYmZmLAorCTB4Mzg3YmUxMWMsIDB4YzJiZjQyNWYsIDB4ZmJiZjk0MjksIDB4ODNmNDg5NTYsIDB4YzlhMzg1OTUsIDB4ZTQyYWFkNzksCisJMHhjOTFmOWNkYywgMHg0NTdmZDAyZiwgMHgwZGYwMzM4YSwgMHg3NDQwOTNiNiwgMHhkZTVhYmYyMCwgMHhhOGRmNzg0YSwKKwkweDU3NWRiMTU3LCAweDM5NzU3YWNmLCAweDIwZmExN2NlLCAweDcwN2QwNjRmLCAweDYwM2ViNzU5LCAweGU4MWViOWFiLAorCTB4ZjIwYWVlZGQsIDB4N2ExYTliZjUsIDB4NWY5NDY5ZWUsIDB4MDdhMGQ3OTAsIDB4ZTNmNTU3ZTUsIDB4ZGM2ZjhmZjgsCisJMHgyMDlkZTFmYiwgMHg3NWViYzdiNywgMHhkNWViMzViOSwgMHg3ODJkYjk0OCwgMHg3Yzg0YmQ2OSwgMHhjN2I3MjkxYSwKKwkweDg5NGFjMDBiLCAweDNjZjBiNzI2LCAweGI0MTZkY2FhLCAweGFhZjQ0YmZjLCAweDY1YzdjNzhlLCAweGY1ZDU1ZWIzLAorCTB4OGNmODZmNjQsIDB4Y2E5NzkzZDQsIDB4MTI3YWE4OWUsIDB4ZWNiM2VmN2UsIDB4ZjNhOGZjOWUsIDB4NDU3ZmNlYTEsCisJMHg4MGJkMjliZiwgMHg5ZjNhMDlmYywgMHhjNWQ4N2NlYSwgMHhmNjFmM2FhNywgMHhmMDk4Y2ZmMCwgMHgzYjdmOTkxOCwKKwkweGMxMGMwNGYyLCAweDdmMjU1ZGJmLCAweGRmMTM0OTYyLCAweGRlZjc4MzhmLCAweGY4NDU5ZmVjLCAweGM3MzRkMWYyLAorCTB4OWZlY2RmYWEsIDB4MTE0Mzg0NjgsIDB4Nzk0NDdkNzAsIDB4OGZlYzA0NWYsIDB4ODA4ODFmMjgsIDB4NGJlNTRjMmIsCisJMHg4YzZhZjcxYSwgMHgyYTZjMjBmOCwgMHgyYmZmOWQ2NywgMHg3NTk0NDVmNiwgMHg5NTBmM2VhYywgMHg4MmQ0OWMzNywKKwkweDlkNjkxZmM4LCAweDc1M2ZlYTFhLCAweGU4YTg5ODIxLCAweDkzMjlkYzNmLCAweDcwMDNiMGZmLCAweGU5ZGEwNGJjLAorCTB4MGExMTk4ZDgsIDB4NmM1OTFlODIsIDB4MGVjZGViZTcsIDB4MDEyYmE3NzcsIDB4MWNmMWM1ZDIsIDB4OTZkMjRjZWUsCisJMHg5ZmQ0MWVhMCwgMHgxZmI5ZGE3NywgMHhlOWRmYzNhNCwgMHgzMWY4Mzc4YSwgMHhhNGM5MzYwZSwgMHg2YzQyNWJjNywKKwkweDA5M2YzNDcyLCAweGRmODQzNGNjLCAweDNlNWJkNjE2LCAweGUwNzY4ZmY3LCAweDg3YjYzM2JlLCAweGNmNDBjZWZiLAorCTB4ZmE0NzY1YWIsIDB4NTZiZjVjN2MsIDB4MjM2MDVlY2IsIDB4ZWRjMTZiMzYsIDB4NzdhMTc0MmUsIDB4NzFiYTBkMzQsCisJMHhmZDlmM2MxYSwgMHg2ZGI3Y2NiNiwgMHhhZmE1M2U4MiwgMHg4NDcxZGQ2MSwgMHgyYjE4OWYwNSwgMHg3MmRlN2VlMSwKKwkweDRkOTk5ZmUyLCAweDZiMzIxZDdjLCAweDI4Nzk3NDc5LCAweDM5ZTVlZjEyLCAweDc3YTg2OWU2LCAweGI5ZjBmZDYxLAorCTB4ZDdhYzBmZDEsIDB4ZTIzYWIwNTMsIDB4NDJmNWQzNzksIDB4M2Q2OWFhNmUsIDB4Y2U2YjU0NTgsIDB4ZDRmNTg4MGYsCisJMHhjOWZlYmEzNywgMHg3ZmE0OTk2NCwgMHhlYjg0YTE3MCwgMHhhZmI3YTE3YSwgMHgzOGRlODc5NiwgMHhiMWQzZTgwZCwKKwkweGJmYjg2NjRmLCAweDI2NDlhYTdhLCAweGM4ZGE5Y2ZhLCAweDMwNTk1M2Y3LCAweDhjYWZlNDg5LCAweGQ0YmU5Mjc1LAorCTB4ZjI4NmQ2ZjEsIDB4N2FlZjcxNzUsIDB4OWZlYjZkYWMsIDB4M2U0MjFmYjIsIDB4ZTE4N2Y2ZGEsIDB4NmRiNDgyYmYsCisJMHg3NzgzMjdkYiwgMHg0N2NhZmMyMCwgMHgzZDYwN2ZlOSwgMHg2NWQ4NGZjYiwgMHhjNzczM2YyNywgMHg3ZmYxMjcyZSwKKwkweGE1ZGZjZWM3LCAweDc2ZjA4NDNmLCAweDNhZjdmOTJiLCAweDFjM2I3ZDc2LCAweGExNjNiMWY5LCAweDYwZjUwMGI1LAorCTB4N2ViZTAwYzcsIDB4ZWRmOWRhYWEsIDB4N2Y5YTE2ZjAsIDB4MzMxZDExMTcsIDB4N2RlODhkMTQsIDB4MDcyZmU5YWEsCisJMHg1NGUwMmUzMCwgMHhlZDBhOGMxMywgMHgyNGIxNWQ4YiwgMHhkYWFmZTU1ZiwgMHhiMWQxMWZjOSwgMHg4MGVjZGJmMywKKwkweDllMzc5ZmUzLCAweGQzZmZiMTMyLCAweDVlZDM2NGUxLCAweDczYzVmZWMyLCAweDhlZjk3OWJmLCAweGMwMmVjZmQxLAorCTB4ZGQ4NmYxZmQsIDB4OWZjODRjZGEsIDB4ODc1ZmRhZjAsIDB4NzhlZDdlYTMsIDB4ZWQ0ZGRiODksIDB4ZGMxYWNiNmEsCisJMHg0OGJhMThkZiwgMHhiZDAyYTg1ZSwgMHhmYWM4NTFkYSwgMHhkMTZmYjYzMSwgMHg0NzI4ZjFjNCwgMHg1N2YyZjEzZCwKKwkweDJmOWNiM2YyLCAweDdjMjgyNjNlLCAweDhmZWZmYjNkLCAweGY1YzdjOTBmLCAweDkzNjQzMzlmLCAweDFkZGZkYzcwLAorCTB4ODllYTAzZjgsIDB4NGJlMjU2NWQsIDB4ZWJjN2JjN2QsIDB4NzMzZDkwMTcsIDB4ZmJkZjcxYWUsIDB4NTJkYzZlM2YsCisJMHhiZGM2N2NmOCwgMHhmZjljZGZlMCwgMHhmYTg3OGFhZCwgMHgzZDA3MjkxNywgMHgwM2U3N2NmOSwgMHg3YTcyNmYwNCwKKwkweGM5ZTdiZmE5LCAweGE3ZmY2YmVmLCAweGEwMjVmZGQxLCAweGUzZGNlYmJiLCAweDRiM2ZmZjBlLCAweDBiYTdiN2Y3LAorCTB4M2UzMWJiYmEsIDB4YmZiNWZjYTAsIDB4YTg3ZWZmNTIsIDB4MzdmOTZiOWUsIDB4ZTM2ZjdiYTcsIDB4YjdmZGVkZDcsCisJMHgzM2Y3OWUyYywgMHg1NjY0ZmNhMSwgMHhlMmMzNDBlZCwgMHg2ZjNkZDJkYSwgMHg1YmVlNDI2NywgMHhiMWUzN2I2OSwKKwkweGY2MjNlM2JmLCAweDVlMzRmNDdiLCAweGYxYjZmZWU1LCAweGVkMDNlZmI4LCAweGFjNDk3OGIyLCAweGFiM2FmOTE3LAorCTB4ZmEyZmIwYmYsIDB4M2IyM2NiY2YsIDB4NjNkYTdmYTQsIDB4YzUzMDRmNjQsIDB4MmJmNzEyYjMsIDB4ZTk5ZjRhZGYsCisJMHgzNjBiZDhhNSwgMHhjMjAwZTNlMiwgMHg2YzA1MmJlZSwgMHg0YWZlNmY1ZSwgMHg0YWRjM2U2MiwgMHhmZDdlOWZlZCwKKwkweGQzNzNiNDNlLCAweDgzYjI2NGQyLCAweGY3ZmIyNTIxLCAweGZlNjRkNzc1LCAweGFkMzM0NGJjLCAweDk4ZjVhZTg3LAorCTB4MTI5MzQ3ZDcsIDB4ODlhOGViY2QsIDB4MTlhYmJlYTIsIDB4MGVkNWZmZWYsIDB4M2MwMjE0MjksIDB4Y2JmMDFmOGMsCisJMHg4ZWE3ZjQ0NCwgMHgxMjY1NDhiZiwgMHg2MDU4OTNjMCwgMHgyNjNiYWUxMSwgMHg5ZGY1Y2MzYSwgMHg4MzZjN2RjMCwKKwkweGM1ZWZmMWJmLCAweDNjMmVjNGUzLCAweDQ3ZTk1YzBlLCAweGM5OTAwZTNjLCAweDNjNGU3YWFmLCAweDZmMDliZjYyLAorCTB4Yzc4YzIxOTksIDB4ZTM5NzhhNjEsIDB4NGJkNGExMzEsIDB4MWViMTZhN2UsIDB4MWRhMjZlYzcsIDB4MzQ5NjM4YTMsCisJMHhiODJiM2NhMywgMHhhMDc4ZTY5ZSwgMHg5ZWJlYjg3NSwgMHg0Y2RmMGRlZSwgMHhkMTE1Y2ZhYywgMHgyNTdmOGVhNCwKKwkweGNkZDlmNjRkLCAweDVjZmFkMWY1LCAweGE1MGZjYmE3LCAweDdmYzc0ZTg3LCAweGFhYzkyZTk0LCAweDhlNjkyZTk5LAorCTB4ZWJjYTBhMzksIDB4OGMzZjVjNjQsIDB4MWM5OWYyYzQsIDB4YjQyYTBiNGUsIDB4MGZkNjI0ZGYsIDB4MjhlNjc4ZDcsCisJMHhhNDI3ODA0MSwgMHhhZjQ4MmE2NSwgMHgyMmY2ZGI3YywgMHg3OWI1MWY4YywgMHhjNWM3ZWEyNSwgMHgxZjlhMTY2ZCwKKwkweGUxMTI1OTZjLCAweDQyOGQ0ODdkLCAweGY3MTY3YmYwLCAweGQ0ZjdhNDI4LCAweGZlMzk1ZTJiLCAweGJiM2Y0MzIwLAorCTB4YmEwNmUzNGYsIDB4N2M5N2VmOWYsIDB4ZDhjY2U2N2YsIDB4ZjBjN2Y0NmMsIDB4ZGU3ZmM2MWYsIDB4NTliN2ViMDAsCisJMHgwNjM4NTlhYiwgMHg2MTViMzRmMCwgMHhmNDA0YjhjMSwgMHg3M2VjNGI5MywgMHgwY2RjOWY5MywgMHhlNGFhZWZlMywKKwkweDU1Y2U3YWVlLCAweGYyYmQzN2JlLCAweDAxNWY0ZWNmLCAweDQ1ZjlmNjNkLCAweDk0Yzc2ZDhjLCAweGM2Mjg4YTZmLAorCTB4OWE4ZmY2ZjUsIDB4ZjdjYWJlMzgsIDB4MWU0MGQwYjMsIDB4MGRmYjIxODcsIDB4YWIyZjhhZmIsIDB4Y2FmMzNmZGMsCisJMHg4OTFhNWYxZiwgMHgxZDcxZGNlYiwgMHg3ZWI4ZTM0MywgMHhhOTcxZTJjZCwgMHg4YTcwYmQ2MiwgMHgwZWJjZTI3OSwKKwkweGUyODNhZmQ0LCAweDlmNzRiZjY4LCAweGU3MTY4Y2VjLCAweGJmYWM0MWI4LCAweDI4ZjE4MzdmLCAweGIyZDQ3NjkwLAorCTB4NTdkNzE5NmEsIDB4YmVmYzkzYWMsIDB4NWIxYjVhYzEsIDB4NjYxZTI1MWYsIDB4N2UxMTZhOGQsIDB4ZjgzNzQxMjIsCisJMHg3ZmI4ZDljOSwgMHgwZDlmZGJjMywgMHhlOTE5YzZhZiwgMHhhOGU1MzZkNiwgMHgxZDI3YmMzMiwgMHg2MWI5ZjdmMCwKKwkweGM1MWZlYWZmLCAweDExZjdhZTJmLCAweDJkZWMxYmJmLCAweGY0NTFmYzkzLCAweGRmYzBiZDQ3LCAweDkxZGYzZGQ0LAorCTB4YTZkMmY0OWYsIDB4ZGZlNDE2YjUsIDB4YTYyZDZiNGIsIDB4NTUzYWQ4ZmQsIDB4YjA0NjMxZjgsIDB4YTlhZmQ4MTEsCisJMHgyY2NlZWM3YiwgMHhkOTNlY2JhNCwgMHhlNWE1ZjE4YiwgMHg0MGI1Mjc0ZCwgMHg0OGM0N2Q5NCwgMHhlOGZkNjI3YywKKwkweGRkNTU2ZjdmLCAweGI1MGVlZWQ0LCAweDc1ZTIyNjdlLCAweGMzMWIwOWM3LCAweGFkNzZmNTc1LCAweDNmNWEzOGJhLAorCTB4N2VmMmI0ZWYsIDB4ZjdmNTY2Y2UsIDB4ZjdmOGNmMGQsIDB4MGViOGVmYzMsIDB4YWUzYzc4NDcsIDB4ZjA5OTZiM2YsCisJMHgxZmYyNDQ4MywgMHg1NTNlM2UyMywgMHhiZjM4NDJjNywgMHhmNTE1N2FlMiwgMHg4YzhkYTljMiwgMHhjOTQwNzdlNiwKKwkweDA2ZmViODYzLCAweGQxYjFmZjc5LCAweGUzNzE3M2FmLCAweDVkYTBkZjk2LCAweGI5MjRkNjUwLCAweDRjYTI0YjcxLAorCTB4OGZkMGQxNjksIDB4MmYxOGRlNWIsIDB4ZTk5YzNjZTMsIDB4ZGQ2ZmUzZDEsIDB4YzgzNTZlYzMsIDB4MTBhYWFiNDUsCisJMHhkOThlZjZiZSwgMHhmYmI2MTc3MSwgMHhkMGM2OWI2NSwgMHhkZWJkZjE0ZSwgMHhmYzc5YzJlOSwgMHgyNDkxYTZjYiwKKwkweGViOGRiZDA3LCAweDM0NTY0YWU1LCAweDg0MWNlMzExLCAweDg3ZTQ4YzNlLCAweDRjNjMxYmExLCAweGEwNzIxNWYwLAorCTB4NTRkN2NhMWYsIDB4NmYzY2NiNmIsIDB4ZDMyZGZhMTQsIDB4Nzg4ZmIxMjQsIDB4ZjQyZGZhOWUsIDB4N2I3ZTk5ZmYsCisJMHgwMTZmZDc1ZiwgMHgyMzkwNmZkOSwgMHg0MTliYzBiZiwgMHhkMzQ0YTViZiwgMHg0ZjI1NzM2ZiwgMHhlZTdkZTIwYSwKKwkweDQ4Mjk0MWNlLCAweGFiNmZiOWQ3LCAweGRiZjRkMTQ5LCAweDJmYmU0YWE2LCAweDRkYzQ1OWJhLCAweDdlODAzNDc3LAorCTB4ZGZhMGRjYmIsIDB4NDViZjQwMWEsIDB4YTMxOTFmODksIDB4NzNmYTdlZTksIDB4YmZkMGI3ZTgsIDB4YTEzNmZlNDYsCisJMHhkZTMyOGI3ZSwgMHg3NGZlMDQxYiwgMHhlOWJjMzZmZCwgMHhlMWI3ZTkyMCwgMHgzYzUzMTYwZCwgMHhmODRkNDRmMCwKKwkweDZmZDU3YTliLCAweDY4YWRkMjUyLCAweGJkNTNlZjFmLCAweDY3Zjg1MWIxLCAweDM3YzdiMDkzLCAweDZjNDYzODhiLAorCTB4OTU1Y2Y1MDcsIDB4NWNmNGMzZjYsIDB4YjllYWY5ZGUsIDB4NzU5ZTExN2YsIDB4MmI3NzM3M2QsIDB4OWVlOGI4YTMsCisJMHhkY2Y1Yzg3YywgMHhlN2EwZWRkYywgMHhhZTQ3ZTQyNCwgMHg2NGVlZTZlNywgMHhhMTE3MmZkYywgMHhkMGY0ODZkZiwKKwkweDk3Y2E4YzZmLCAweGU1ZmJmOTg1LCAweGRlNGYxOThkLCAweGYwOGRmNTBkLCAweDk0MWI1ZWE5LCAweGVmYWRkMTFmLAorCTB4NWRmNTE5NDYsIDB4YmU4YmQ2OTUsIDB4ZmE3ZTc3ZGIsIDB4NzdkMGFiNmUsIDB4YTIwNmM3YTAsIDB4MGZlNDhkN2UsCisJMHhkZTM5OTM2ZiwgMHhjM2U4Yzc3YywgMHg3OTQ2NWYxYiwgMHhmYjRjOWRmOSwgMHhmODU5ZWY5MiwgMHhhMzNiZDFmZSwKKwkweDdmMjE2NzBmLCAweGYzZmEyYTdkLCAweGQ5ZTljNmEyLCAweGZhYTQxOTVlLCAweGM3Y2ViYzI3LCAweGZiOTFiYTU3LAorCTB4YjgxYWNiY2IsIDB4MmI1NjU4N2QsIDB4ZTdmMDNjODcsIDB4NjlkZjMxYTQsIDB4OWRjMmZmZDgsIDB4ZjgwMTRiMTIsCisJMHgxM2Y1NmIyNiwgMHg5ZmViYjQwZSwgMHgxZjU4OTk1NywgMHhmMDM0Yzk0ZCwgMHg2MjljYWNjMywgMHhkOTU3ZmJmMiwKKwkweGZjZjBlYjVkLCAweGQ5ODUyY2QxLCAweGVjNWZiZmQwLCAweGVkMTQ3NDk4LCAweGJlMWNlMmUwLCAweDllMmM1MDFmLAorCTB4YjNiMDcxZWIsIDB4NDQ2NGY0YmIsIDB4OWNlMzQ4M2MsIDB4OWViM2ZiMzcsIDB4YWQ1MzE2NzEsIDB4OWY1M2FlOWMsCisJMHhiNzE4NDI5NSwgMHgyMmVlMzNkYSwgMHhiOGExN2E0NCwgMHg1ZGZjZmNjZSwgMHhjOTM3N2YyMSwgMHhmNjJmODQyZCwKKwkweGVlMzUxY2FlLCAweDg1ZDcyZjQzLCAweDRmMDI3ZGE3LCAweDllMTMxNzgwLCAweDNjNTQ1MjQyLCAweDY0YTdhNTAxLAorCTB4YTVlMzc3MjYsIDB4NGIyZDc3ZjAsIDB4ZjBhMDVmNzAsIDB4OTFmNjg5MjksIDB4ZTNhZGM3MjMsIDB4M2FmYzcyMmQsCisJMHg3NzNmNzUxZSwgMHhiZjJmYThiMSwgMHg2YjlkMmQ2OSwgMHg4ZThiYzQ4YSwgMHg3NDdjNDhlNywgMHgxZjAyM2RlMSwKKwkweDdlNWQ2OWVmLCAweGQ3MTg5MWVkLCAweDdhNDM3YzA0LCAweDgwOWZmODI2LCAweDNmYzc2ODE3LCAweGY5ZDMyMmVlLAorCTB4NWUwNDhmOWIsIDB4OWI4ZjU2NDYsIDB4MzcwZmUxODAsIDB4ZTQzYTFjNjEsIDB4NzljY2Q1ZTcsIDB4NjNlMDJmYjMsCisJMHgxMTllYzdkNCwgMHgzMTVlOWQzOCwgMHg3ZGMwMWFjNiwgMHg0ZWY2MGRkYSwgMHgxZjNhODNkMiwgMHgzZTcyYjMwZSwKKwkweGQ5NWU4NGQ0LCAweDNjNjJhZmQxLCAweDI1MWJmM2FkLCAweGU1MjFkYTM3LCAweGI1ZTEzYjYxLCAweDBlZDFmODFjLAorCTB4ZjUzZWY2NDUsIDB4NTc4MTI0Y2QsIDB4NmFhZjlkMzcsIDB4ZDAxM2YzMTQsIDB4MjZlYjgyYzEsIDB4ZjEwYWJlN2QsCisJMHg5YjIzNThmMywgMHhlYmNhNWQzOCwgMHg1OGIyNWQzOCwgMHg5NGM3ZWQyNywgMHgzMGRlNDhkNSwgMHg3MWFjYTc4YywKKwkweGViYTFjNTBlLCAweDBlN2UxOWZhLCAweGYwYTI5ZDIzLCAweDdmOGQxMmFmLCAweGIzOWIzYTE5LCAweDYyY2RlN2JiLAorCTB4YjVhYTZlNTEsIDB4ZTdkYzQzZmEsIDB4YjFmMjBhOTksIDB4ZmUxMGQ4OTYsIDB4M2VmZTE2NzcsIDB4MjQ1MGZjNTcsCisJMHg3ODEzMmViZCwgMHg3NTc4ODRkYiwgMHhiOTNhZmUyMCwgMHg4ZWZlMTVmZCwgMHhmOWU5NjljZSwgMHg4NGQwNGFlNSwKKwkweDlmNGYwOWQ3LCAweDUzYjdmY2U2LCAweGFjNWZhMGYyLCAweGNmYzg2ZjBiLCAweGM3NGEzZjkwLCAweGQyMzNmMjFiLAorCTB4NDY1NzI5YTEsIDB4ZGRmMDBmMzgsIDB4NzhlN2EzMjcsIDB4MjhkNGJmNzEsIDB4MGYzYjg1ZjcsIDB4OTE5ZmZhZjIsCisJMHhiOGNhMmNiYywgMHhmZjdmMzA3ZiwgMHg0ZGVlYmU0MCwgMHhjNTU5ODdkZSwgMHhmN2YwNDEzYSwgMHhmZGNlZjYzYiwKKwkweDc3YmY5MTIzLCAweGQxMmZkYzRhLCAweGY3ZGE2ZjE0LCAweGQ3Y2FjMWJjLCAweDIwZWMxYjRkLCAweGY2ZGZiODA3LAorCTB4ZTc1ZGVhYjYsIDB4YWUxZmE5ZTksIDB4YzAzOTcyYjIsIDB4ZTBjNzg0ZjUsIDB4MDcwNGJhZjcsIDB4NzVhNmYxODIsCisJMHhhNDE3OGEzNiwgMHhmNmU0MGM3ZSwgMHg2ZjVmNTFhYSwgMHg1YmE0YjNiMiwgMHg3ZmFmN2FiMywgMHgzN2JmYTg4YSwKKwkweDg3ODc0OTdiLCAweDQ3YTg3YjYxLCAweDIxYmRhMTFiLCAweGNlNDVlZGRkLCAweGUwZmZiYTE3LCAweDQzYmFlMzVjLAorCTB4M2JkZmNmZjAsIDB4MWY5ZGJkMmUsIDB4Y2U1NTRmMWEsIDB4NGM1ZjY5OWEsIDB4YjU0YWFiOGYsIDB4ZDE1MTVlMDQsCisJMHg5OTJjOWJiZSwgMHhlN2EwYjdlMiwgMHg3MGZmY2U4MiwgMHhhMzZhYjdmZCwgMHhhNTlmYWY3YSwgMHhkMDhlYzhkYSwKKwkweDJkNWVjYmNmLCAweGYwMTA1ODNiLCAweDI1NGZhNWY2LCAweGUzMmIwMTc5LCAweDdmMzhiMTgzLCAweDEwNzk4NzhjLAorCTB4OGZmNzJmOTIsIDB4Y2E2ZWU4ZmEsIDB4ZWQ5ZjY5OTcsIDB4MjlmNWRmYzYsIDB4MWJjODdkYzUsIDB4YmIxZDBjNzksCisJMHhmYjIyNTMzMSwgMHg2Y2FjM2RlMSwgMHgzNmUxZGEzNCwgMHgyNjhhYjNlNiwgMHg0N2U3M2YyMSwgMHhkNzNjMjFmMSwKKwkweDNkNWI1OTkyLCAweDNkNzIwM2MxLCAweDg1NTQyZWEyLCAweDY3NDI3N2E5LCAweGFmNDgzYmUyLCAweDdhNDMzMjcxLAorCTB4NGNmYWZiMzUsIDB4YmVmN2Y5YzAsIDB4ZGM0Y2IzM2YsIDB4ODEzYjA3OGEsIDB4OGZiMTE5ZWEsIDB4MzFiOTYxMjUsCisJMHhjZTVhMjRiZSwgMHhlYWY4NmU4YywgMHg3ZmEwNWJmZCwgMHg1ZWNiZjdhMywgMHg2OWJiOTQwZiwgMHg3MjgxYzNhZiwKKwkweDg1YjU2NDM2LCAweDE5NzgwYzA1LCAweGU4NTU0MmMzLCAweGM4N2QxYTc3LCAweDgzZWEwYjc3LCAweGYwN2JiMDAyLAorCTB4ZDM0MTQ5N2MsIDB4YzIxNzJhZGEsIDB4YmY3YTI1YWIsIDB4ZTQ5ODE4M2MsIDB4YWE2ZGZlODIsIDB4MzJlOTM5MzksCisJMHgwZTUwMGJkNCwgMHhjZDVmMjlhYiwgMHg0YWQ3OTVjYiwgMHhjZTcxMGM1ZSwgMHhmMTQxNWE2YiwgMHgxMmI1Nzk0OCwKKwkweDE0ZGM2MDFkLCAweGQ3OGQ5ODkyLCAweGJkNDFiMjFiLCAweGZiYzM1NjliLCAweGMxN2YzODU5LCAweGVkNmY1OGZiLAorCTB4NDE2ZmY3YzksIDB4YTRmZDAzYmQsIDB4ZmRmMjM3ZjcsIDB4Y2Y3ODNjZmEsIDB4M2I1MjcyODMsIDB4NWMyYmVhODcsCisJMHgwNzNjMzEyZCwgMHhjZjkxYjA1MywgMHg1NWZiMDU0ZiwgMHhlYzM3ZTYyZiwgMHhkZGU2OGE3ZSwgMHhkZjVlZDAyOSwKKwkweGMyOGY5YzBjLCAweGQxM2NlOTEzLCAweGU3NGRjOTQ4LCAweDgwYmUxZjM4LCAweDBlMDc1NmY0LCAweGE1ZjA1ZjE4LAorCTB4NDkwOWY4ZjMsIDB4YTNmZDYyYzAsIDB4NmRmZDdmZGIsIDB4OWU1MzVjZmMsIDB4MDdkNjgxNzcsIDB4MjcyNzc5ZWEsCisJMHhmYzQyYzMyOSwgMHhlMWY2OTI3NCwgMHgwM2JlMDEwZiwgMHg3OTM3OWM1NiwgMHg5Y2RlY2IzYywgMHhjMzE2YjQyZiwKKwkweDFiNjM5OGZjLCAweDZhY2ZlZjQ0LCAweDFlNzE0NzFjLCAweGUyOWY5OWIzLCAweGU2OGVhNjNjLCAweDU3YmJlNzc2LAorCTB4ZWZlODQzZGEsIDB4NGNlZDU3N2IsIDB4YWY3YmU3YzMsIDB4ZjZmM2QyYjQsIDB4YjcwZjVjNGQsIDB4YmYyMTY4MGYsCisJMHgyYWQ1ZTFmYiwgMHg1NTJmZjNjMywgMHgxM2QyNjVhYiwgMHg3NGFhMzc4NywgMHg4NjdlNTc2ZSwgMHg2ZmU0MzdjNywKKwkweGRlYzg3NmUyLCAweGMzZGViY2Q1LCAweDliN2VkYzc1LCAweDkzNmRjY2YwLCAweDVmY2UxZTcwLCAweGVhZjljZmNmLAorCTB4ODc1ZjVhN2EsIDB4NGQwYmI5ZTYsIDB4OWVhNDViZjMsIDB4YTk3MGY1ZDUsIDB4ZjU0MTQ3YzAsIDB4OGY0ZmRhNWEsCisJMHhmYWE1YmJkNCwgMHg2ZmExMTg3YywgMHg5ZDlmNzE0YiwgMHgyNGMzZDNmNiwgMHg5MWY1YTU0NywgMHg2ZThlNjVmMSwKKwkweDQzZjIwZGJmLCAweGVmZTIzYmY4LCAweGMzMmFmZGIyLCAweDQ1ZjQ4ZDc1LCAweDY3OGEyNGRiLCAweGYyMWVmOWMzLAorCTB4M2U0OTM3NDcsIDB4ZjgyODdiOGMsIDB4N2IyMjFhZDgsIDB4ZTMzYjk0M2MsIDB4Zjk5ZTcwM2YsIDB4YzhmMGNhYzQsCisJMHgwM2QyMmI0OCwgMHhiNThlNTRmNCwgMHg4NGJmOGZmMywgMHhiM2RmNDdlNywgMHhmMDEwZTQ2MSwgMHg1ZmUxMmU0ZiwKKwkweDVhY2UxMzhmLCAweGIyN2VlM2NmLCAweDhjOTk1YmRlLCAweGM0ZDk4ZGU3LCAweGYyMDdhNDNlLCAweDMwMTY2NDZiLAorCTB4OTJhMzhkZTgsIDB4ZjkzYjk2ZWYsIDB4ZmI0NmUwZmMsIDB4OTY2YmE3NDcsIDB4ZjM4NzlkNTYsIDB4ZWI4ZDkxNmMsCisJMHg5NTdhY2Y0NywgMHgwYmM3OGJjZSwgMHgzZTBiZDYxOCwgMHhiNzBhNzdiNCwgMHgwY2Q2NDhhZiwgMHg3M2I4NTBmYywKKwkweDBlYTgzMjQ1LCAweGNiYzQ0NGI2LCAweGU2NzM4OTU0LCAweGE3NmYxYTg1LCAweDVlZTQ5NzcwLCAweGFmNDc2ODZiLAorCTB4ZGI1N2FmNDcsIDB4YjQxYmRmY2UsIDB4ZDViZGE3OTMsIDB4YTNmZDg4NWYsIDB4YTFhZDdlNzEsIDB4YTdhYzg4ZGUsCisJMHhkNGJkZmI0NywgMHhhNzVmZjM5MywgMHhmZmI5ZTI1NywgMHgwYTY1Nzc5YywgMHg2MmY5Y2Y3NiwgMHgzZWUzMjBjYSwKKwkweDdlZWE5ZThmLCAweDJkZjdlY2U2LCAweDVmYzA2N2NjLCAweDk4NjMxZmNlLCAweDg2ZWY0MGNmLCAweDQwZmYyMDUxLAorCTB4YjkxYTFiYmYsIDB4ZWEzMGQ3M2QsIDB4NDU5YTU2YTAsIDB4YmRlNTFiYjAsIDB4Y2JhM2Y4NGMsIDB4YmJmZGYyMjYsCisJMHgxNmY3Y2M4NiwgMHhjOTRmZmNhMSwgMHg1ODFmODg5MiwgMHg0OWY1YTAzMCwgMHg4M2NkZmIyNCwgMHg1OWY5MDBmYiwKKwkweDc4N2NmZGZjLCAweGUxYjJlNTFmLCAweGEwYTcyZTI5LCAweDRmYTgzYzJmLCAweDk4YWY1NmNhLCAweDI1NmJlNTQ0LAorCTB4YjBkZmQ2MGYsIDB4OTJlYzk3MzYsIDB4NTE5OTFjODIsIDB4YjI0MWVkN2UsIDB4MGYxYTBhOTMsIDB4ODMzY2EyMjYsCisJMHg3YjQ0YWVmYywgMHhkNWFjNmNhMCwgMHg5NzU4ZWE4ZCwgMHhkZmNlNWQ0YiwgMHg5OTYxZTcxNSwgMHhjZjBjM2RjZCwKKwkweDU4NzZlMDc3LCAweGY3OTZmOTM0LCAweDcyYjc2MTMzLCAweGUxY2YyY2I5LCAweDI2ZWVmYjcyLCAweDNlNzg0NzE1LAorCTB4YWQ3MjRlNzIsIDB4NzI4Y2IxY2IsIDB4YzcyZGQ1OWMsIDB4ZDA0ZjU3N2IsIDB4ODcwZmFlNTAsIDB4OTlhMzhhMjQsCisJMHhlNTAwN2E4MCwgMHhlNzFlODM3YywgMHhmM2Q4ZWRjNCwgMHhkOTczZjM5NSwgMHhiZjIwYTU5OSwgMHg3MmVhNWYzOCwKKwkweGE0NzVjYmFlLCAweDJkMmIzNzNjLCAweGVlM2Y2MmI3LCAweGUzNGVkMmJiLCAweGY2ZDU3MDk4LCAweGZhZTNlZjBmLAorCTB4Mjc1ZmY2OGEsIDB4MzI2MGY1NWMsIDB4ODUzY2M3ZWEsIDB4NzhlOTc5YzcsIDB4NWM3ODU1MmQsIDB4YWQ3ZThmNjAsCisJMHgzZGY1YTA1YywgMHhmNDQ1ZmU5ZiwgMHhkOWFiMzNlMywgMHg4YjZmMTI1ZiwgMHhiNWVmZjFlNywgMHhiOWZkZjEyYSwKKwkweDljODdiM2U0LCAweDllN2NhNzlkLCAweDRiOWQ1Y2FmLCAweGU1ZjZmNTNlLCAweGUyN2FlNjlkLCAweGY1NDc2OTkxLAorCTB4ZjAxZGFmYWMsIDB4YmUzYzA2MTgsIDB4OGE1OWYxYjUsIDB4YzJmMTNlMGYsIDB4ODc0OGE5YzEsIDB4ZTdjMDFkZTIsCisJMHg5ZDFiNWZjOCwgMHg0ZTdhOGMyYywgMHg1NWJjZDEwOSwgMHgzOWQzMjBkNCwgMHhiMzg0YTYwMywgMHhlNTFhNzE2ZiwKKwkweDE1NzVjNzk4LCAweDNmMTI3NjZmLCAweDBkNjRiZDE1LCAweDhiZjc4MTRkLCAweDljMzE3ZGI2LCAweDc2MTY2YWUyLAorCTB4ZjA1YWRjNTIsIDB4MDcyZjYxMDUsIDB4MWNhMzg2NWIsIDB4YmUzYzI5MTQsIDB4ZmMyZjUyMmMsIDB4ZTdlZGM2ZGEsCisJMHhkM2IxZWRiNiwgMHgxZDUyN2M3MCwgMHhhOGEyZGZiZiwgMHg2YWQ1NzZmZSwgMHhjMjc4YTdkOCwgMHg1MGJiNTJhNiwKKwkweDgzNzlmNjhlLCAweGZlNzhjN2MwLCAweGJjNjdmYjE3LCAweDJiOGY0MTU3LCAweGY1YzBkYjZiLCAweDFhYTM1MTQ0LAorCTB4OGEzMjdiYzIsIDB4NjNiNGI2ZWEsIDB4YzdkMTcxYmMsIDB4OTU3ZmYyNTYsIDB4ZjNhNDlkZDcsIDB4NmYzNjEzMTQsCisJMHg3OTRhZmYyMiwgMHg4ZmRhNmNhMywgMHg1OWRmMTFlYiwgMHgxOGFkODcyNywgMHg0YTUwZDg5NywgMHgxZjAwOTBmYiwKKwkweGM0NWViODI0LCAweGY4YzBmZTUzLCAweDNiY2RlMmMzLCAweDg1MDEwNWI3LCAweGVmM2YyZmM1LCAweGFjNzJmZDQyLAorCTB4ZjEwYmJkNzksIDB4MzU5ZWY1MGUsIDB4M2M0N2JhZGUsIDB4MjIyM2ZkNjcsIDB4YzM4NmYzOWUsIDB4MmY0YjZmNzQsCisJMHhmMGM3OWNmMSwgMHhiNzk0MTAwZiwgMHg0ZTc4ZTY2ZCwgMHhlYzg3ZDc1NiwgMHhiNjY3ZTg0YiwgMHg0N2ZlY2EzZiwKKwkweGU5YmU3ZDk3LCAweDFlNzgzNWViLCAweGUzYTVlZGExLCAweDI1ZGZiMDZiLCAweDBkNzJmYjdmLCAweDVkYjE4OWM2LAorCTB4Y2FmNzlhNzYsIDB4ZTI4MGY4NWYsIDB4YmVmN2Y1YjcsIDB4Yzg3ZjA5YjAsIDB4ZmUyOWU3ODYsIDB4YWIxM2ZkYmQsCisJMHhkZjZiNmIxNywgMHhlMzFkMzg3OSwgMHg3Y2I3ZGIwNiwgMHhjY2ZlOGM5NywgMHgyNmFmM2I3OSwgMHhhZGJjZWY3ZiwKKwkweDk0NTg1MjEzLCAweDkxNGY0Mzc5LCAweDExZTc0MzdmLCAweGI3NDkxZjdmLCAweDI5N2IwZGJkLCAweGQwMDRlZDllLAorCTB4NTc2MGY1MWQsIDB4Mjk3ZDZlOWMsIDB4ODhmNjdmOGYsIDB4ZDE4ZGRjZjgsIDB4ODhmNDNiY2YsIDB4ZTViODZkYzcsCisJMHhmZjUxMmJjNiwgMHhmMjdiNzAzNywgMHhlZmI5NzE5YywgMHgzZjJmM2QwMywgMHgxNDZlM2EwZiwgMHgzN2Y1ZDdmMSwKKwkweGY3MmUzNTljLCAweGY0MDFmZTA0LCAweDc0Y2RkOGIyLCAweGY2NjFiYWZjLCAweGJjYzY5ZmFmLCAweGM2YmQzZTg2LAorCTB4MDNjZjg2ZTUsIDB4OGE3OWZhN2YsIDB4YTczZTZjNzcsIDB4YTVlOGU1MWQsIDB4MzQzYzUwZGYsIDB4MDc4YTZmZDIsCisJMHhkM2FmYTNlNywgMHgxMWNhM2NmMSwgMHhjZTNhNzNiNSwgMHhhZDNiOWQzZiwgMHhkMTRmZGY3NCwgMHg5ZTQ4OGZjZSwKKwkweDQ3YmViN2RhLCAweGNlMjY2YTdlLCAweGFlYjNiNDM1LCAweDk3M2Y4ZjFmLCAweDlkNmI3OGM0LCAweGQwNTc5ZTNjLAorCTB4M2Q3ZGUzMDEsIDB4ZTIyZTdhMmUsIDB4ZWI1ZjM5N2EsIDB4YzViZGJlZjEsIDB4MWY2ZDVlZjksIDB4ZTAwZmVlMjgsCisJMHhiNWE1YzhmMSwgMHhiM2YxMTA3ZiwgMHg3MjkzNzRkZCwgMHhjZjA3NWU5MCwgMHhlM2FkNDcxYSwgMHg3MmY0MmRjMSwKKwkweGY0N2IxYzc3LCAweDM4YWVlYWI4LCAweDIxYmEwOGY2LCAweGVhOWU3MTNkLCAweDM4MDc1MzhhLCAweDQ5ZjkwNDZkLAorCTB4MmU3NjhhM2UsIDB4OGYyZDdkYTIsIDB4YTM1NzZmN2YsIDB4ZTNkNjM3OWYsIDB4ZjQxMTdkZGEsIDB4OWJkYmM3ZDYsCisJMHg3YjcyZThiYywgMHg1MGZjNzFhZSwgMHg0MjY2ZDEzYywgMHhiNTdjNGY1MiwgMHhiZjVkMWY3ZCwgMHg3ZjRiYjRjZiwKKwkweGViYmVmYWQ3LCAweDE0ODk1NGJjLCAweDVlZWIxZTc5LCAweDg2ZDJjYmU0LCAweGVjY2ZlNDgzLCAweGYxOGI3ZjVhLAorCTB4N2JmZjA5YjYsIDB4YzUzMjBiZGIsIDB4ZGZhOTJmMzksIDB4NTIzZGZhNGIsIDB4YmRlMTk0N2YsIDB4N2JmYTUxMmQsCisJMHhlN2Q4NWRiZiwgMHg2OGZlN2M4ZCwgMHg3MjE5Yzk3YiwgMHg3YjZkM2Q0MCwgMHg5NzVmMTNiNiwgMHg3MTQ4M2M2ZCwKKwkweGJkZDY2ZmQ2LCAweGUyMThiNWFjLCAweDA4ZmU3MDI3LCAweGY2ZDNjNjE5LCAweGE0ZTFlZWUyLCAweDMwZmRjNWNmLAorCTB4ODk1NGVkOTEsIDB4YTI5YmNhNzYsIDB4ZjFiZTUzYjcsIDB4ZTI5ZGE5YTQsIDB4NzZlNmJkNjAsIDB4NjNiZGJiOWMsCisJMHhhYzc2ZWY4YSwgMHhiNzMzNThlZiwgMHhjYmQ1OGYxMywgMHhmNmQxNDM5MywgMHhkOGFhZWM2OSwgMHgyOWU2YWZlZiwKKwkweDBmNzRhM2NjLCAweDdiZGY5MzhlLCAweGM4NjJiYjIzLCAweGNjZTc5Y2VlLCAweDExMmUzOGY5LCAweGJhZTI4ZDUzLAorCTB4Mzg4ODE2YWEsIDB4NTM3YTlmYjAsIDB4Y2U1NWRlOTEsIDB4NzdmNjE4ZWIsIDB4ZTBkN2UyMzEsIDB4MDFkZDUxZmYsCisJMHg5YWFhZjY4NiwgMHhiZjQyY2ZlYSwgMHhkMWRlYTQ0MywgMHg2NDJjMmQxMiwgMHhlNzNjZjdhMCwgMHhlZDBmMTRlNCwKKwkweDkwZDM4NDhiLCAweDBmMzIwNzllLCAweDY3ZWY1OGFiLCAweGNmYWJmZTExLCAweDA1MjRiNjE0LCAweDUwNTlmN2ZhLAorCTB4N2E4MDJlZjIsIDB4MGM1ZmY3ZDksIDB4ZDY3YjNiZjAsIDB4ODc4MWMzYWYsIDB4YTliZjkzNjUsIDB4MDA3OWRhY2MsCisJMHgzNWVjMmJkNywgMHhjODQ3ZWQzYiwgMHg3Zjc0ZWNiYiwgMHgzYjFhZjk0OCwgMHhkNmVmNzc4ZCwgMHhiYjIzOWY2ZiwKKwkweGM2NTZkN2ZiLCAweDU1NjA4N2Y3LCAweGI5OTZmNzgzLCAweGI3ODcxZDc5LCAweDJmZTZiYjdlLCAweGNiZTM1NzY4LAorCTB4MWFmZTdlZDAsIDB4ODllYjhmMjgsIDB4ZmViNGIxOGQsIDB4OGUyOTc4ZTksIDB4N2ZjYjUxZWUsIDB4YThhOWExZWQsCisJMHgzOTYzZjJkNywgMHg0ZTZmZTYzZiwgMHg3ZDQxNTUwOSwgMHg2ZTFjNDlhZCwgMHhlZTgwMzRkZCwgMHhjOTdlMjhhYiwKKwkweDdiYTVmMTQ5LCAweDg2NTJiZWI3LCAweGU2ZmI1NGYzLCAweDYwMzMwYzU4LCAweGZiMDlhZmVkLCAweDdlZTIzN2ZmLAorCTB4NjNkNTFhYWQsIDB4NjQyZjMzOGMsIDB4MmU3OGM3OGEsIDB4NTM2MTE4YTgsIDB4M2YyMzEzNWMsIDB4ZmExMWM5MDYsCisJMHhlOGUzMWFiMSwgMHhjNWQ4MTEzYywgMHhhODRlN2FhNiwgMHg4OTc4MGY5ZCwgMHhmOGZkODM4ZiwgMHgzZjcwYWEzOSwKKwkweGU1OTEwN2Q0LCAweDc2ZmRmY2Y0LCAweGRjYmQ4ZTdlLCAweGJhMzllZjBhLCAweDlkNmI5N2NiLCAweGVlYWUxYzc5LAorCTB4MzM0OWY1YzcsIDB4ZTc0NGZmOTUsIDB4YjNkZjkxNzMsIDB4MjNmZTVlNWUsIDB4N2FhZWRlYmQsIDB4ZTI2NWZiZjgsCisJMHhmZTQ4OWI3ZSwgMHg1N2E1ZDQzZCwgMHhiNDcxN2FmZSwgMHhmNGEyNWJmYiwgMHgyZmRmOWU5ZiwgMHhlZDA1YTBiMSwKKwkweGJhNzYyZDk2LCAweDY3ZWYwYmI3LCAweGRiMGU3M2MwLCAweDU1ZmZiZTM0LCAweGZkZDMwYWUyLCAweDNlODQzYjM5LAorCTB4ZDMwOTg5MmUsIDB4NDRmZDNlN2QsIDB4YzIzY2IwM2YsIDB4MjJmMmQ2Y2MsIDB4MTVmNGJkZDIsIDB4YjNmOGMzM2IsCisJMHgzZTljZDdkMiwgMHhiNmU5NzdhNCwgMHg5NTdmNWI2ZiwgMHhiMThiZjE4NSwgMHg3ZDJiZDdlNCwgMHgxZjExN2ZlZCwKKwkweGQzYzM1YTk0LCAweDJkYmNmZWU5LCAweGU3Zjc4NjU2LCAweDNiNzk2ZGI1LCAweDRkYjVlNTFkLCAweDljMjdhNzBkLAorCTB4YjRhZjVmNjUsIDB4NTdiZTZhZGUsIDB4NThlMzhjNDAsIDB4YmM0MmU4NjUsIDB4YWYzZjQxNzcsIDB4OWU4YmQ0NWIsCisJMHhkYjg2MzJiOSwgMHg5ZjE4ZjZkNywgMHhkZGU0ODYzNSwgMHhiMWQ0NGY3YywgMHhjNjQxYzZjYSwgMHg5ZTQ1ZmJmMywKKwkweDdmYjE3YWU4LCAweDlkOGZmYThjLCAweDM4ZjQ3NzQzLCAweDI2M2ZkYWY3LCAweGU2OTllZDA5LCAweDk2NDA3NDY0LAorCTB4ZmE4ZTNkODEsIDB4ZTRlZWE4YmMsIDB4N2MxZmY0MzAsIDB4NmZkZmEzMTYsIDB4ZjljMzg5ZTAsIDB4NzNhZDMzZTgsCisJMHhjZmJmZWExOCwgMHgxOTg3M2JkMiwgMHg5NTIzOTllNywgMHg5MmEyOGYzNiwgMHg4ZWQyODc1ZiwgMHhmYWYzMjdiNSwKKwkweGI1Mzc4YzMxLCAweGY3YTY4YjRmLCAweDEyYzRjNTg2LCAweDhlMWU4YWZlLCAweDdhOGU3YThkLCAweGFiZTcwYzRjLAorCTB4NTMxZjY4MzQsIDB4NDNlNTE3NmMsIDB4MmQzM2Y3NmYsIDB4MzFiODdhNDQsIDB4NDllYmMzYzYsIDB4YmNmODY5MGIsCisJMHgyMGZiNmViOCwgMHg5NTBhMWUyMywgMHg3MjA3MmE2YSwgMHg2NDJjZjg0YSwgMHg4MzJjYjUyYiwgMHgyYmRiZDZmZSwKKwkweDI4ZjBlZjljLCAweGYyODEzZjc0LCAweDU1ZjhiYTdmLCAweDM5MzNhNmVlLCAweDUxOGUzMTkxLCAweDVjNjYxNGUwLAorCTB4ZTdlYjMzZjIsIDB4NmZkNTE0NDgsIDB4Y2M2OWZjNDMsIDB4NjQ2NDU2ZWYsIDB4Zjc5MjZhOTUsIDB4YTk0ZjU2MTgsCisJMHg3ZTJlY2MwMywgMHg0MzA1NWE1ZiwgMHhlYzQ0NzkzZCwgMHgwYzFmYTNlZiwgMHgzZDdjNmVkMywgMHgzODNmN2E0OCwKKwkweDMyOGJiMTgwLCAweDRmMDliZWYwLCAweGJmODBkYjljLCAweDNlYjM3MDZiLCAweDJiNjllMzA5LCAweDUzMTdkNzE4LAorCTB4NDg4ZjY4ZGMsIDB4MDMzYjAwYzEsIDB4NTk1NTU0ZmMsIDB4MDNkZjg4MzcsIDB4MmYxODdjYzIsIDB4ZjQyYzI2NDksCisJMHhmMzdlZTVjZiwgMHg4MDgzYjQzYiwgMHg4NDNkZjk0ZiwgMHgxNTUwYjE1NywgMHg4NmMzMThhMCwgMHg5ZTNhZWZjOSwKKwkweDk2ZjNmYmYxLCAweGViOGNjYzdkLCAweDA3NDExMjhmLCAweDdhNGRkYzE2LCAweDdmYmFjMWNjLCAweDVhYTMwMDlkLAorCTB4MTU1YjdkNDUsIDB4ZGMxY2I3ZjcsIDB4NTliODczOWYsIDB4NThjM2VkMTgsIDB4NDJjNzBiMDcsIDB4MWNhYTE4ZWEsCisJMHgyYmJmY2EzMywgMHg1ZjAzNjAwYiwgMHhmMzlhYzdiYSwgMHhmNDAyZTUyMywgMHhmNWJiNDQ1YSwgMHhmN2E4M2Y4NCwKKwkweGJmN2E4OGFiLCAweGFiZjdhODhhLCAweGUzYWJkNWIzLCAweDI4MzZkY2E5LCAweDU4YTVlZjAzLCAweGYwMmY1OTVjLAorCTB4MDliM2RiYzYsIDB4ODY3ZTAxYmMsIDB4Y2M3ZjNkZTAsIDB4ZmIxNWUzMTIsIDB4MThkNzg0ZTYsIDB4OTYyYjFiZDEsCisJMHg4ZTZlYmEwNywgMHhmYTdlMjBjOSwgMHg0ZWFlZGM1OSwgMHg4OTY2OTc4YywgMHhjM2Q3MGMzNSwgMHhiZWZkMjQ4YiwKKwkweDE4NzdlNjRmLCAweDFiNmU2M2RlLCAweGEyMjNlMWM5LCAweGNmMDJjZDlkLCAweDU1YmY3NDhiLCAweGIyNzZmMjhmLAorCTB4Yjc5NDdhYmYsIDB4MjYzZTU2ZjcsIDB4NmY2Nzc5N2EsIDB4ZGU4ZDg5ZmQsIDB4ZWE1ZWY4OWYsIDB4NWE4ZDhlYWYsCisJMHg0YmQ1MGZmZiwgMHhmNDdkYWY2NSwgMHg3NmVmZWUwZSwgMHhhMDM3MjdlOSwgMHg2ZTY3NmNkZSwgMHgxYTU0ZmQ0NiwKKwkweDE2YjdmYWRmLCAweDRjZWRjMjdhLCAweGRlOTk5YTViLCAweGMwZGZjODMxLCAweDlhMTczMTZmLCAweDQ5ZjI0NzlmLAorCTB4ZjQ3MmZlMTQsIDB4MjlkZjcxODUsIDB4NjFmM2JiZGEsIDB4ZTc0ZDVlN2UsIDB4YmUzMTVjODMsIDB4OWY3Y2I1ODksCisJMHhkYzc5ZWVmYywgMHg0NmNiMDc4ZiwgMHgyNWRmZTYxZiwgMHhlMWFlZWZmMiwgMHgwZmRkZTNmNiwgMHgxYjBmYjRjYiwKKwkweGMxZDViZjc5LCAweGUxZWZjZGZmLCAweDgwMWYwN2I4LCAweDVmMzNkZGJjLCAweGEyMzM4NTBhLCAweGRlYzVkYmRkLAorCTB4Njc3YTg3OGYsIDB4ZGU0NGZlODgsIDB4OWU2MDE1ODMsIDB4NjhlNGNiNDksIDB4YmU3MTYwZjcsIDB4NDVlMWNmZDQsCisJMHg4YjMxN2ZkZSwgMHg2NmZkYzVmOSwgMHgzMTU5ZTdlNiwgMHgyMmRiZTI2ZSwgMHgwZjU1YTQyNSwgMHg4MmM3OWVlZCwKKwkweGQxZWY4MDJiLCAweGM3YmUwNGZlLCAweDljNTkyZmZkLCAweDhkMmU2NmM3LCAweDlhZGZkN2M3LCAweGE3N2ZkMjYwLAorCTB4NzBlMjc4ODYsIDB4OGJhZjY2YmUsIDB4N2NmZTZlZTcsIDB4MTQ5ZWI1ZWUsIDB4ZTU0NTc5ZTMsIDB4MWVlOWFjNzQsCisJMHg5YmQ1MmFhMCwgMHgzZDRkZmE4YSwgMHg4MGYzM2Q3ZCwgMHgwN2E3NmExYywgMHgxZjIxOGYzMSwgMHg3ZTEyNTZlYywKKwkweDNkMjRmMzBjLCAweDUwODRhYTk1LCAweDNmNmUyYTJmLCAweDM3YmI0N2NiLCAweDVlYjNmMzllLCAweGFlYmM0YjVlLAorCTB4MTc3Y2NlY2IsIDB4ZTY0NjFkZmUsIDB4NWRjZmZmODEsIDB4ZGZmM2ExZTEsIDB4YTdmYzM5NTcsIDB4NWQ5NWZlNzEsCisJMHhhMzgwZGUzOSwgMHhiNzA0M2YyNywgMHhlMTU3NzFmMiwgMHg4ZTdhMzNiOCwgMHg3YWYzNGFhNywgMHgwZWJlZGVjOSwKKwkweGNiZjI0NWU2LCAweDNmZDg2ZDc5LCAweGM4ZjllYWQ5LCAweGFkZmJmZDgzLCAweGQzMGZkMGNhLCAweDIzZGUzZjEzLAorCTB4MTUzZmM4MjEsIDB4MjQ3MTRmZWEsIDB4YzE5NGRjNzIsIDB4YmM3MmZlZDgsIDB4ZmZmNDE0NmYsIDB4ZThiZjcxMzIsCisJMHg1MjI2NGFhMiwgMHgwOGI3NTcxZSwgMHgzNGE1MWZlZiwgMHg5MTNlYTQ0NywgMHg4ZjcyYTY0ZSwgMHg5NzRhN2I4YSwKKwkweGQ1Mjk3YTU0LCAweDU2ZjM2YmYxLCAweGI2OTgzZGQzLCAweDM2ZmI3OTBiLCAweGEyNWZhMGI3LCAweDQwMmZlMDQ1LAorCTB4YjUyZDk3ZjYsIDB4ZWQxZGY2ODIsIDB4ZGUzMDhhZWUsIDB4NjBkMmM3MjcsIDB4Yjk2MWMxZGUsIDB4OWFiZjA5YWIsCisJMHgxM2JmOTE5YiwgMHg0NTZjMTNjYSwgMHg2NmI1NTIxOCwgMHg3MTQ5ZDEwYSwgMHhjODdjYjA1NywgMHgwNjA0NzU0ZiwKKwkweGUzN2RhMmM3LCAweDY5ODdkZjMxLCAweGQ2NzExZDRkLCAweGY4YmIzMWZiLCAweGZiYzcxMzZkLCAweGI3ZTcxMjYzLAorCTB4YTYzZmJjNDgsIDB4NmUzMDdiMzYsIDB4YmI2YmIxZTIsIDB4YmMyMmFiZWUsIDB4ZTM4ODcyYzMsIDB4N2VmOTNmZmQsCisJMHgzN2JjNGY2ZSwgMHhjMDY5OWI0ZiwgMHgzMjdiMzNiYiwgMHgwMjY3ZmRlMSwgMHg1ZTA1NGJjZiwgMHhhYTFkMDRhYiwKKwkweGM0YWIzZTA0LCAweGUyNTVhZmJkLCAweDgxMmFkY2RlLCAweDNiYzQyYWRmLCAweDdiODg4ZmE0LCAweDNkMjMxNzdiLAorCTB4ZWYxMTk1MjAsIDB4YTFkNmJmYzAsIDB4N2I0MzI2NDEsIDB4NTIwZjBmN2MsIDB4Yjc1YmUwODcsIDB4YjJhNGZjODUsCisJMHhiYzQzZWZjMywgMHhkZTM5MTM1YiwgMHgwM2EwMGU2ZCwgMHhkZGUwMzVmMSwgMHhjMjQxZjk4MywgMHg3OGUwZWFhNywKKwkweDBlOWNmMjg2LCAweGVmMTA1NjAyLCAweGE3MzlmMTIzLCAweGI2ZmRlMDA3LCAweDg3ZDQyNGQ4LCAweGQ2Nzg0YzYzLAorCTB4MWY5ZmM3MTIsIDB4ZjNlMjlmZGUsIDB4ZjM5MGEyNWIsIDB4NmEyNWZjNDgsIDB4NWQ2MDVlZmMsIDB4OGZiMzdiYmUsCisJMHg3NjVjNDRhYiwgMHgxMTk3Yjg5NSwgMHhjZDc2ODhmMSwgMHhiYjBmYzAyYSwgMHgzZjkzZTM5OCwgMHgyZjYwMjIxZiwKKwkweGZkNjI0OWE1LCAweGMwNzQwNTVmLCAweDNkODUyN2ZjLCAweDc0YzY3ODg0LCAweGI3NWYyYzY3LCAweDc2MmE1YTI0LAorCTB4MDRhNzg4YWIsIDB4NGIwZmRmN2UsIDB4NmNiNGIyMGMsIDB4ZjE4MDQzYzYsIDB4MWU2NDFhOTcsIDB4ZTFmZGY1ODQsCisJMHhjOGZmMzM1YSwgMHg3ZWUyMjU2ZSwgMHhjODkzY2Y0OSwgMHg1NmRmMmI2ZiwgMHgyZjdmYjgyZCwgMHg3NGRlYmZjZiwKKwkweGU2OWU1YmFlLCAweGZlMTBmNzhiLCAweDM1ZGExMjAzLCAweGI4NzIxMzNmLCAweGZhODVmOTAyLCAweDhiYzNkN2M3LAorCTB4MTUyYzFmMDUsIDB4MjIzZjA2ZjcsIDB4MjEzMWU3ZjgsIDB4N2NlYjhmY2YsIDB4NDhlN2U1ZTMsIDB4ZjFlNjRmOTYsCisJMHgxNjk5ODk4ZSwgMHg5ODYyYmY3MSwgMHhlMzA5ZTMxOSwgMHg4MzRjZjViZCwgMHhjNmRhZDE3ZSwgMHg5ZmRkMjk0MywKKwkweDkyYjYzZWM5LCAweDY1MGVjNmRjLCAweGY4YWZlNDNlLCAweGYxMGMxZjhmLCAweDdkZmQ3MGZiLCAweGQ3OGExZWQxLAorCTB4ZWIxZGJmZWYsIDB4MGU4M2JmODksIDB4NzExNTg3YjQsIDB4ZDdjY2E0Y2YsIDB4ZWY1MWNkOTMsIDB4ZWVmMmFkOGQsCisJMHhhNjVmYTFiMSwgMHhiZWVjZmViNywgMHg3M2YxMWI2OSwgMHgxZTQ0ZTVkZSwgMHhiZmUwMjdkNiwgMHg4ZWMwMzY2MywKKwkweGMxNTc1ODFhLCAweGM4MWJkNjJmLCAweGE1N2E4YzVlLCAweGViZmM0OWM2LCAweDFiZTdmZTgwLCAweDE3YjYyNGY4LAorCTB4Yzc1NGNlZmYsIDB4NWY1MDFiYjUsIDB4MjQwNjgwYmMsIDB4NmEyZmMxMzAsIDB4Y2YxMWQ5MDYsIDB4ZmEwZjczODAsCisJMHhmZWE5NTZiMSwgMHhhYzJmMzhiZSwgMHg4ZmVlOGY4YSwgMHhkZjJjNjVmYiwgMHg1ZDY1NzA4NywgMHhhYzJiZjI2YSwKKwkweDllZjQ3ZDU0LCAweGVmNTlhYzdiLCAweDQ0ZjMxNGFjLCAweDljYjM0NGMyLCAweDRmYzJmM2U4LCAweDM5NTc3ZDQ1LAorCTB4NWZiMTNiMDIsIDB4OTIyN2E3YzksIDB4MWNkZTI3M2MsIDB4NTJhODllN2QsIDB4ZjdkZTIwYjUsIDB4Y2I4YzM1NTEsCisJMHhlMzU3MzA3NywgMHhmZDBmNzNmNiwgMHhlNDlmNjhjMywgMHgzYWYwNjA1NCwgMHg3Y2U5ODNmNCwgMHg3ZDcxOTBiNiwKKwkweGFlZGM2NDE3LCAweDA0ZjVjN2Q0LCAweGU3MTViZGYyLCAweDNmZjEzNzAzLCAweGNiMDgwN2NlLCAweGRlZmM2YTE3LAorCTB4ZTQyZGJiZTMsIDB4ZTQyMjU4ODcsIDB4NjcyMTUxZWQsIDB4ZmQ3Yzg1Y2IsIDB4OGFjYmU1MWMsIDB4Mjk3YjU4ZjcsCisJMHhhYjkwODVmZCwgMHg5MDg3Mjg5NSwgMHhlMGNkOGYxZSwgMHgzZmI4YmNmNiwgMHgyY2NmNWY0YywgMHhmYmEwOGRiNCwKKwkweDE2MWNhYjIyLCAweDRmOTQxNzlhLCAweGFlMDcyMWFjLCAweDc2OGY3NjBmLCAweDc2NDdmZmEzLCAweDRlMDNiOTY2LAorCTB4ZmJhMmNmY2MsIDB4MmNmOGE1ZGMsIDB4MzdjZGYyMzcsIDB4OWMxNzU5Y2UsIDB4YzgxNjFlMmQsIDB4MmIxNmY3NGYsCisJMHhlYTRiZjcyYSwgMHg4OTU3YzhmNywgMHhmNzU0MDhmYiwgMHhkNWZkMGNjZCwgMHhkODU2MjY0ZiwgMHg5NjM1ZGUyOSwKKwkweGU0ZDc4N2M3LCAweDgxZGUxMzY2LCAweDg2YjE5ZDFlLCAweGI0Y2E1YTc1LCAweGZiZWViYWViLCAweGVjOWZlYWMzLAorCTB4ZWY4MzVlZTUsIDB4Njk2MGRlODUsIDB4NDFhMTc2NDEsIDB4ZmI4OGQ0NGYsIDB4YzgyNzk5MjQsIDB4YzVmNDE4ODYsCisJMHgzMTI2OGJjMiwgMHhkNGY1ZWZmNCwgMHhjZGU4YmQxMywgMHgyZTZmNWNmNSwgMHg0ZGViYTI5MiwgMHhmNWQ3OGVkZCwKKwkweGQxN2VhNDY2LCAweDRjMTdjNWQzLCAweDU0YmY5ZDM2LCAweDdhNDY1ZTFkLCAweDNmNzQ0ODY3LCAweGNhYzNiMjQyLAorCTB4ZDc5OTJmZjcsIDB4MzNkMTliOWIsIDB4ZWM5NWYwMWYsIDB4ZWQwYmUwMzAsIDB4ZjE2ZmRkMjEsIDB4ODllMzI4ZTMsCisJMHhhZTQ3OTNkNCwgMHgwMGQ3ZTdkMywgMHg0YjM0M2JkZCwgMHhmYTM5M2NmMywgMHg3OWFiZjNhYywgMHhmZDNmYzg1ZSwKKwkweDc5NGZjZDA4LCAweDVhNTM0N2E3LCAweGQ5MmQ3MzUwLCAweDY5NzcwYzIzLCAweDFjMmVmNzBjLCAweDBiYmY3ZDVlLAorCTB4NDZiODdiZTksIDB4NTZhZjlmZWMsIDB4NzRiZjE4NDMsIDB4MTk3MTY2YjgsIDB4MGY3NmQ1YzEsIDB4MmZkYzY2ZDIsCisJMHgzZGUxNzQxZSwgMHhjOGQ2YjM0ZCwgMHgyNDdlOWZiNCwgMHhmMTRlOTgyNiwgMHgzOTlmZGY5ZiwgMHg2M2UyMWIyMywKKwkweDlhNWRhYzE2LCAweDZiMzhmYzhlLCAweDM3M2E1MmRkLCAweDM3YzEyNDdiLCAweDU5ODA2ZmQ4LCAweDc5ZWM4Nzk2LAorCTB4YmNjNmZlZmQsIDB4YjQzZWFkNjcsIDB4ZGJlMzdiYzcsIDB4ZmRkMWQ1YmMsIDB4MjdmODU1M2QsIDB4Nzc5ODUzYWUsCisJMHg3NjQzYWUwOCwgMHg4Njc0YzZiYiwgMHhmYzhlMGY4MSwgMHg4MmViNGVjMiwgMHg4ZWQ4MmQyYSwgMHg1OGJhZDU3MCwKKwkweDI1NTU4MzdjLCAweDI4MGZiZjQ0LCAweDBmYjU3MWQ1LCAweGYwZWE5NGU5LCAweDczMjk4YjVkLCAweDRmN2VkMDI0LAorCTB4ZGJjNDcyZWYsIDB4M2I1ZjQ1NmYsIDB4MmQzZWJiZWUsIDB4M2EwMjQ1ZWUsIDB4YmJmMjY0ZGQsIDB4NTZkNzdkZjIsCisJMHhiNjYzNDdlMSwgMHg0NDYzZjI1ZSwgMHg3Yzk3YTdiZSwgMHg2MjkzOGYxNywgMHg3ZmY5ZThlZSwgMHg2ODY5ZmZiNywKKwkweDMxNWRmNThmLCAweGU2YjRiZjhlLCAweGU4NGY5MmY4LCAweGExMWY3OTg5LCAweGNmOGJjNDUwLCAweDVhMWIxNzVhLAorCTB4NjZjZTQ1MTgsIDB4YjNjN2YzODksIDB4Y2U5OTdlYzQsIDB4ZWJkNzg1OGYsIDB4ZTNlNzM5ZjYsIDB4NWU5NzNlNDgsCisJMHhmYWY4ODRiOCwgMHhjZDJhN2RjYiwgMHhhZmMwNjU2YiwgMHgxN2E1ZWZhOCwgMHg1MDdkZDM0NiwgMHhlMmJiOWUwYiwKKwkweGZjMGI4YzcxLCAweGY5NGNiZjZhLCAweGM0ZWRhNzI1LCAweGY1M2ZlZGM3LCAweGNlODIzOWQyLCAweDlkZjRhOWRmLAorCTB4NWRmNmFmODgsIDB4ZGEwMWU3NGQsIDB4M2FkM2ZkYzUsIDB4N2M5Y2QyOWUsIDB4YzFjNmJjM2QsIDB4ZTlkZTUwZjUsCisJMHg3NDNjOTE5ZiwgMHhhNjY4NTdmMSwgMHg3NzllNzI4NiwgMHg1ZTVjZTdmYSwgMHgzMWQ5ZmVmMCwgMHhkZWViZWMzOCwKKwkweGUwYTE3NzFjLCAweDJjZDc4MDZiLCAweDIxNjkzNDlmLCAweGMyZGY5YmQ0LCAweDBkOGQ4YWU1LCAweDdiMWY5MTk2LAorCTB4ZDFmN2FjNmQsIDB4YzZiZmYyMjgsIDB4YjVmOTMxZTEsIDB4ZjM5NjViZjIsIDB4NGNhZWMwZjcsIDB4Y2M5OWM0MzQsCisJMHhjODdiZGYxMiwgMHg2NWVmY2QzZiwgMHg0YjIwZWU2NSwgMHhmYTEyNzk0NSwgMHhjYzBlNWJiMCwgMHhkYmI3NzJmNywKKwkweGQzZDRlM2NkLCAweDc5YzZiYjE3LCAweGQ2ZmQ2OTg1LCAweGU4YWJjZTNkLCAweDUzYjA5ZTc5LCAweDEzNDY1YmYyLAorCTB4NWY5ZTNkZGMsIDB4OWUzNjhlOGQsIDB4YTU4YzcxZWUsIDB4ZDFmMWVkZjIsIDB4YjQ1MGZmZGIsIDB4YzA1OTVhZGYsCisJMHg4YjRmYTA3YywgMHg3OWJmZmRjNCwgMHhkNDM0ZmJhMSwgMHhlM2FiNzkxZiwgMHhiOGMzMjQxMywgMHg0ZDhhNmJmMiwKKwkweDM1Nzk0ZmYxLCAweDVmZGY3NGI5LCAweGVkNWNlYWZlLCAweDc2YmM4MzVlLCAweDM2Y2Q4NWQxLCAweDQ3NDNlNWQxLAorCTB4ZDUzMmU4ODAsIDB4NDBlM2RmZTEsIDB4ZjBhMTdjYjksIDB4NTgzZDRmODEsIDB4MTFkM2E3MmYsIDB4ODJiYzM4MmQsCisJMHhhZTdkZGJmNCwgMHgzZWE3ZTc2OCwgMHg4ZDUzYTQ4YywgMHgxZmFjMTNhMCwgMHhkMjc0MGNiMiwgMHg3ZWY5MTNlOSwKKwkweDA3ZDJmYWViLCAweDhiZmRjNTNlLCAweDQ1ZWRmOGE3LCAweDA4YjFlYmJkLCAweGM3NDQ2NWZhLCAweGYzODNhNzVmLAorCTB4MGZkODJiNmIsIDB4ZGZjMmYzODEsIDB4YmJmOGE2NjUsIDB4ZTgyN2YxNWUsIDB4N2Y0N2UzYWQsIDB4NTFkZmY2MGUsCisJMHg5NDRlZmI5NCwgMHgxZjU4NTFjZCwgMHhlMTczODdlNywgMHhjMTdkYmJhZCwgMHg4ZmEyZTMwZiwgMHhmM2E5YzUyNywKKwkweDA0MTY3Y2MzLCAweDcxYWEzZTAxLCAweGYxZjdhM2ZiLCAweGI2ODJjNDNjLCAweDk3NGYxOGYzLCAweGYxMzYyZTljLAorCTB4MDE3MzhhNDMsIDB4ZmY0MTUzOTcsIDB4MjExZTdiYTMsIDB4YzUwZDZlYmUsIDB4YmQxOWVkN2EsIDB4ZDljNTI3OGYsCisJMHgxODVjMWYwYiwgMHhmZmIzNDM2NCwgMHgxMWMxZjFlZiwgMHgyOWY4MzdjZCwgMHhkZTYwNDc5YywgMHhmMGJkNzljMiwKKwkweDFiODZjN2Y5LCAweDE4ZWE5N2ZiLCAweDc5YzRlNjk3LCAweGY2ZmNmYWE5LCAweGJkZTM4M2I3LCAweDFlMWQ3MGZiLAorCTB4YWI3YjI3NWMsIDB4OGUyNTQ4NjAsIDB4YmY3YzYwYzAsIDB4MzdmNGY1YzgsIDB4MTQ1YmRmZTgsIDB4NjhmMGM0ZmYsCisJMHhjYWUyZjQ3NiwgMHhkZmEwOTc3ZCwgMHg5OWIyYWFiNSwgMHhjNWQ4NTU1MiwgMHgwY2UyZWQwYywgMHg2ODhmNWRmZSwKKwkweDJiNWUwNWY3LCAweGNhZTJlYmY0LCAweGI1YjdlZTY2LCAweDcwZGI5OTA1LCAweDMyM2IwMGNmLCAweDhhZDhmYzkyLAorCTB4NjljZjZjYzMsIDB4N2U4ZGMwNmEsIDB4ODNkYzRkNzMsIDB4NjU4MTJhYTAsIDB4NjdlODU5MTksIDB4MWEwY2NjNGEsCisJMHg5MzhkNzdmMCwgMHg0ZjJjZDdlZiwgMHhmZGM2ZTNkZCwgMHg4ZmQ0MmIxMCwgMHg5YTViMzNmZSwgMHg3N2U0Y2E3MiwKKwkweGU1OTk1ZDdiLCAweGQ3ZTkzYTA0LCAweDdhYjBjNzQ0LCAweDFmOTEyNDlmLCAweDFmODQ1NGYyLCAweDFmYTk5NGYyLAorCTB4N2RhNmNkODksIDB4MjhiYzQ4OGEsIDB4MjgxZGZlMzYsIDB4YjNmZjA5ODUsIDB4OWRmZTg3YzAsIDB4M2U2ZWE1YTQsCisJMHg4ZmMyOTVjZSwgMHhhZmZhMDRmZCwgMHgzNjNiMDIyZiwgMHhjMWY2NDVkNiwgMHg3YzJjMGI5MiwgMHhlODUzNjg3ZCwKKwkweDNjNmIyYmJlLCAweGYxYzVhZjJmLCAweGZmNzFkODcxLCAweDU5ZjVjNjQzLCAweGRlMjc2MDk4LCAweGQ1ZDMyNjEwLAorCTB4ZjFjMjEyOGIsIDB4ZGMyMTIzY2MsIDB4ZTA5Nzg1ODcsIDB4NWM2M2EzN2EsIDB4ZmNmODAzY2IsIDB4ZDcyMDdiNzksCisJMHhhNmZmNzgwOSwgMHgwOTAxZjM2ZiwgMHg4MWZjMzNmNywgMHgzNWNmMTE4YiwgMHgwM2QzMzA3MiwgMHg3NzJkN2ZlNSwKKwkweDc0Yjk2MjY2LCAweDgxMzhmYWM4LCAweDM5ZTAxN2E3LCAweDlmNjE4MDg3LCAweGRjZDdkZjk0LCAweGUxM2RjYjBkLAorCTB4MTEyYmU2MGIsIDB4NWZkZjg2ZmIsIDB4YzdiN2NjNmMsIDB4MWZiMDJhZjgsIDB4NGFjYmRmOTEsIDB4ZmRhMjQyZmMsCisJMHgwNzRjZmM0MSwgMHgzNGZkZmY5ZiwgMHhmMjc3MmYzZiwgMHgwN2YxMDU3NSwgMHg2ZTNlZDdmMiwgMHgzYzUyOWQzZiwKKwkweDg3ZWZiODcxLCAweGI0ZGQ3OWQ4LCAweGJjZjM2M2VmLCAweDExNGY2ODZlLCAweGUwNWFkOGViLCAweDRmYjBjNTU3LAorCTB4YjNlMmExNzcsIDB4NTQ1ZDNmMjAsIDB4ZmQ4ZGNmMGQsIDB4MjcyNzYyOGQsIDB4ZjJkYWU4MzgsIDB4ZGViZDc2YTgsCisJMHg4M2FmM2MzZiwgMHg0ZjRmOTRmOCwgMHg5MjI0N2IyMiwgMHhlZDc0NzYyZiwgMHg2OWVmZjAyNywgMHg5ZTMzYTFkZCwKKwkweGYxYzM4OGIyLCAweGZhZDFmZjRjLCAweGZkYWU5M2VlLCAweDc2MWM0NWFhLCAweDVlZmNhODczLCAweDY5ZmUzZmJlLAorCTB4OTljNTFjNmUsIDB4YTNiOGZkZWEsIDB4ZGEzMzY5NjksIDB4ZjUzNDc3YzUsIDB4YmNmODg5OWQsIDB4M2ZlMmUwYTMsCisJMHhlZDQzYmE2MywgMHhmYThiMTNkYywgMHhjZTg5N2VlMiwgMHhjMWY5ZGQ5NywgMHhhNDJjNmFlYiwgMHg0NzVmZGY1YiwKKwkweDJmM2MxZmY3LCAweGViM2E3MWU0LCAweDAxZmU5MTU0LCAweDdlZjhkNmU2LCAweDQ3ZGY4ODU3LCAweGFlMDJiY2M1LAorCTB4NzE1ZmQxNTcsIDB4ZGI3NDM4NzcsIDB4ZjNkZDAwMGQsIDB4MzQwNmU4N2EsIDB4ZWJlZmE2ZjcsIDB4NDNkNTAzN2MsCisJMHg4OTNkZGVhMCwgMHhmN2Y0OTRmNiwgMHg3MjZmYmQxYSwgMHgzNWQ3YmY5OCwgMHhlMzQ2YzU3ZSwgMHg4ZGFmMWVlOSwKKwkweDBmOGZhZmM2LCAweGVmZjg0YTdhLCAweGY3Yjg4ZmMyLCAweGY4YzdjNzRkLCAweDc3ZGM3Yzk5LCAweDFkNzVkZWM0LAorCTB4ZTAzYWNiM2IsIDB4M2ZiMGRiMGUsIDB4ZGUzZTc4ZjMsIDB4N2NmYzQ4OWYsIDB4MWZhMDU5ODUsIDB4ZjZmYTc0NWYsCisJMHhlMzNlM2YyMCwgMHhiZDQ1ZWRmNCwgMHg0Y2ViNjI1NywgMHhiYzkyMDY1NywgMHhjYmNmODViYywgMHhjOTA1YzBlNCwKKwkweDAzMTNmZTMwLCAweDIxMjcxNzAyLCAweDljZmI5YTFlLCAweGMwN2ZiZDk3LCAweDgwZmJmOWNlLCAweDgxZjdmMzlkLAorCTB4NWJhZjlkMGMsIDB4ZWNkN2M4OWMsIDB4NTM4ZDIyNzQsIDB4OTJjNzdlZmYsIDB4YmIxZjg3YWQsIDB4YzRmYmY4MWQsCisJMHhiYjNlZmNkYiwgMHhlMzczZDk1MiwgMHg5Njk3ZTQ0MywgMHgzZTJlMzE5OSwgMHhmYzIwM2QzMiwgMHg3YzVkMmQwYywKKwkweDQzM2JjN2M4LCAweGEzMzJmMmUxLCAweGMxY2U5NjIxLCAweDliMmY5OGNjLCAweDMxOWZkYmVlLCAweDMyYzNjNzlmLAorCTB4YWRmODc5YTUsIDB4MjJjMjc1YTYsIDB4YjNkMmQ3MTEsIDB4NDQ4M2Y0MWUsIDB4ZmU3MzMzZDYsIDB4NjUxN2JhMDQsCisJMHg0NzFlZTY5YiwgMHg5YzM1OTE3ZSwgMHhmNDRlNjZjZiwgMHg2MDhlNzhjOSwgMHhmNjg5MzJjYywgMHhmMjFmNDdmMSwKKwkweDNjMDBiNjM0LCAweDQ1ZWYxNDMzLCAweGUwZjk5ZDMxLCAweGZiYzIwZDdmLCAweGI5OWFjYTUxLCAweDllNDUzNDdmLAorCTB4NDg1M2Y5OTMsIDB4ZjNlMWVkNTcsIDB4MTA3M2MyM2QsIDB4Yzc5ZjBlNGYsIDB4NjljZmQ4NjEsIDB4ZGQzMjJiNTMsCisJMHgzOGY3Y2ZjOCwgMHg3MjA3YTg3YywgMHg4MjdkZjU2ZiwgMHgyMmZkZDU3NCwgMHgwYWZiYmNmYSwgMHgxNzE4MDFkOCwKKwkweDI3Yjc3YjlhLCAweGI3MjRmOTA3LCAweGQ0YTNlZWRlLCAweGQwMTg5NGM2LCAweGIzMGFiOTZiLCAweDMxYTI5YTYxLAorCTB4MGM2OThlYzUsIDB4YmQ5YTYxYjMsIDB4MzU0ZmQ4NTAsIDB4ZTBmZDkxMzcsIDB4Nzg2YmYxY2EsIDB4ZDM2ZTc5YmYsCisJMHhmYmUzNWZmMywgMHhiNzc4NGFmOSwgMHhkY2FiZTA2NCwgMHhhM2JmYjdhNiwgMHgzZjNlNzY3MywgMHg1NjVlZmRjNSwKKwkweDlmZDY5OWE3LCAweGYwY2RlYWMzLCAweDM4NjY4ZGU1LCAweDQ3ODY2YzMzLCAweDY1YzMzM2VlLCAweDY3NjgzNjM4LAorCTB4ZTExZWY4OGMsIDB4ODY1NjlkOWUsIDB4ZGUyYjJiZGYsIDB4ZjQzOGE1NmMsIDB4YTBhZTcxNTcsIDB4ZTkzYjVlNzgsCisJMHg0ZGM1MDljNSwgMHg3MTI3MThkOSwgMHgwNWE3NDVmYywgMHhmZTNiOTVmZCwgMHg1OWM1MzJmYSwgMHg2NThhNmU3NCwKKwkweGZiYjg2NzE4LCAweDgzMTYxOGQzLCAweGVkOWJiYzcxLCAweDE4YmYzMGViLCAweGQ5ZmU4NzY4LCAweGI1ZjZjZGUyLAorCTB4ZWRiMzRmMTgsIDB4NDM0ZjlkNTIsIDB4ZWRiNTBmMTQsIDB4NGJiY2ZjNmYsIDB4MDg2YjA2ZTcsIDB4NmY4ZTJlZTMsCisJMHhlNDQ1ZmU3ZiwgMHhmYTFiZTNjYiwgMHhhYWY2MWQ5MywgMHg3ZDYwYjQxNCwgMHhkZDM4NDdjMSwgMHgzZWJkMDhjNywKKwkweGUyZjVlODQ2LCAweGZjN2FmMzNhLCAweGFmNmU5NzBhLCAweGZjZTI4N2JhLCAweGUzODEyNjM3LCAweDJmYjJiNWJiLAorCTB4MjU3N2M1ODcsIDB4OGM2ZGZiNzQsIDB4NDBkZDY3YjAsIDB4NzY4N2NmY2YsIDB4ZDA4ODc5ZDMsIDB4N2JhMTc5Y2YsCisJMHg2YmQxMWYzNSwgMHhiM2VhMGM0MSwgMHgwY2RhYTM4ZSwgMHg1YzVkNGJmNCwgMHhjZWEzYzY2MywgMHhjYzg0OTdkZiwKKwkweDI0YmEyN2NmLCAweGNmMGNlN2ExLCAweGM1NWUzMDMzLCAweGU3MTUyNGIzLCAweGRmYTM2N2VmLCAweDhiYmQ3ZjUzLAorCTB4YmMyZjE5ZGIsIDB4MjBmMmU5YTAsIDB4OTkyYTdiOGIsIDB4YjJhZTcwYzcsIDB4NzliM2VmNWIsIDB4MDg5ZTMxZmQsCisJMHhmYmIwMzVlOSwgMHhiYjQ0NzE3OSwgMHgyZWIxZmQ3YSwgMHhkYTVmY2YyZSwgMHg0NDgyNzlmOCwgMHg5NTYzODc4MSwKKwkweGU4NmVjOGZiLCAweDdkMmIyM2IyLCAweDM4MDY4OWJlLCAweDcyNzc2NmFmLCAweDc3NmZlMTJlLCAweGY5ODZiZGYyLAorCTB4ZGVjMzY0YWEsIDB4NGUzMGJiZTQsIDB4OGY0MTRlYWUsIDB4ZTNiOTJiMzYsIDB4NDk4ZjlmYjksIDB4M2Q3MmU3YzQsCisJMHgxMWYzMTNmNiwgMHg2ZmY1NmQ4ZiwgMHhkODFjYjBiOCwgMHg3MThjMjNkOSwgMHg1NzM1Zjk2NywgMHhlNDFhMjZmYiwKKwkweGI5ZjI4N2ZlLCAweDM3MTJiNzRlLCAweDM5MmJjYmM3LCAweDljZjA5M2NkLCAweGZmMGQ3MTQ4LCAweGZkNzE2MThlLAorCTB4ODBkY2I3NmQsIDB4Y2ZjZDVlZjgsIDB4Y2MyYjY3ZDMsIDB4OTYzYzgzMmYsIDB4ZmFlZGI5NmMsIDB4ZmNiY2YwNjEsCisJMHhlYzVlNTE5OSwgMHgyYjcxNTQwZiwgMHg3OGRlMmYzZSwgMHgzZDE1Y2U5MiwgMHg4ZWZlZTE2YSwgMHgwNTA0ZmE0OCwKKwkweDEzZmEzZDlmLCAweDM5ZWEwMTQ3LCAweGNiNzVlZmE4LCAweDlmN2Y3YTA4LCAweDIzOWJlYzA1LCAweGRjZWY4M2UzLAorCTB4YjM4ZTQ1MDUsIDB4YTA2ZjBmZmEsIDB4OWYzMzMwZjgsIDB4Njg0YmRmMDIsIDB4OTdhZTc1YmYsIDB4ZTllOGViYmMsCisJMHhkMTliZWNjMiwgMHhhMDJkZjc1NCwgMHg4ZmM4Nzk3OCwgMHgwYzI5N2ViYSwgMHhhNDg5ZWI5OSwgMHg2ZmMxNmFlZiwKKwkweGU0NjIxYmYwLCAweDdkNzJjODkzLCAweGRjZTkwNGE2LCAweGQwN2NjOTc0LCAweDQzZmYwNjkzLCAweDhhNmFhMWM5LAorCTB4MDc2YzhkY2YsIDB4YzE5ODU4MjMsIDB4ZTE4MWRhMGUsIDB4OWI5NzI4NzUsIDB4ZmMxNjljNzgsIDB4ODhiNjViMjQsCisJMHg2MWM0MWY2MywgMHhmOTE1YzdiYSwgMHhmOGEyMTgxMSwgMHg4M2QxMzY1MiwgMHg0ZDk5YmQ3OCwgMHgzN2Q3NTRjNiwKKwkweGMzZjUzOTZkLCAweDUyYWJmY2IxLCAweGEyYmY3M2NiLCAweGU3MjQ5Y2ZhLCAweGRkMzBlZTZkLCAweDljNGZkYjZmLAorCTB4NzBmMzZmNDcsIDB4OGZlZWZmNTgsIDB4NjRkNDVmOWUsIDB4ZTNhZWI4YTcsIDB4YmZkMjM0MjcsIDB4MTQ5ZTMwMGIsCisJMHhiNzY4YmZjYiwgMHgzZDY4YzA1OCwgMHg3OGNmYTViZSwgMHhhYjZlNTM4YywgMHgxZmE1ZjdlNywgMHg1ZTMzZWZhYiwKKwkweDFlYmNjYjNiLCAweGY5ZjQ0ZmE5LCAweDM5ZmUyMGY2LCAweGJlN2FmZDFhLCAweDgzY2UxNzI2LCAweDc3MWM3ODhiLAorCTB4Y2M4YTlmNGEsIDB4ZDI3NDI4OGEsIDB4MmFkNDRiZGYsIDB4ZDNmZDcxMzIsIDB4YmJjMzhmNzksIDB4Y2MxNGYwOGUsCisJMHg5ZmVmYzg1MCwgMHg1YzlhN2U0YSwgMHhlODNhOWZlMSwgMHgwMmVkYmZmNiwgMHhhY2ExMzliYSwgMHhlYzI1ZmUwZiwKKwkweGRmYTFkNzkzLCAweGZiZDkwYmYzLCAweGY3NTA3YjgwLCAweGFjYWNmZDNlLCAweGEzZGY5ZDAwLCAweGZiNDBmNDBmLAorCTB4NTYxNjE1MzMsIDB4ZTI2NmRmODAsIDB4NjA5YzM1M2MsIDB4YWU2NzRmOWEsIDB4NzE5ZTI4OTYsIDB4NzhmMzcyZDYsCisJMHhlMzZlYmVmMCwgMHhhYWMwNWFmYywgMHg1NjIyZGVhOSwgMHg2YWMxNjk0ZiwgMHhjZTIxN2U3MywgMHgyNzNjMmU0NywKKwkweDhhNzZlM2M3LCAweGZhZjljZDZhLCAweDhkOTJjMGI5LCAweGYwZDFhYzY3LCAweGM3ZDMzNWY2LCAweGM3MDJmYmU3LAorCTB4YTM2Y2RkMjcsIDB4MmFiN2RkZmUsIDB4Njk3N2VmOGUsIDB4NmRmMzg3Y2MsIDB4ZTkyNzJhZTcsIDB4YTAxNjYyZmYsCisJMHhlNjI5ZGM3ZSwgMHg3MzA3ZjJmZCwgMHhlZDIwYjM3ZCwgMHgzN2QzM2Y5OCwgMHhjYjllMGZhYiwgMHgyZDIzZjNlNywKKwkweGY5OWU0OTE5LCAweDEzYzU3ZWJkLCAweGJmMDA3ODU5LCAweGJjZTE4N2NmLCAweDg1MjRkYzViLCAweDAzNmMyMTg3LAorCTB4OWZjMTFkNTEsIDB4MzgyNmJkZTMsIDB4MzY3OWUzN2UsIDB4NmUzOGZjN2QsIDB4M2VmNjczZTMsIDB4OWUxMTZmYTcsCisJMHhiOGY5OTI5YiwgMHgwMjI1Zjk4ZCwgMHhhZDFiMjUxZiwgMHg5OGQxN2YyNiwgMHg3OWQwNTI4ZCwgMHg2YWFmOWUzOSwKKwkweDFhY2FmN2ExLCAweGY1NGQ1OGNlLCAweGVjMWQ3OThhLCAweGJhMDc2NjAxLCAweDJiNTgyOThkLCAweDc1NTY2MGUzLAorCTB4MjVkMGYxZTksIDB4MWNjYmNlZDEsIDB4NzU1Yzc4MTAsIDB4OTQ1ZjVlNWIsIDB4YmVkMWM3ZGIsIDB4OWQxMDI3ZWQsCisJMHhmODRhN2E0MywgMHgwNmQ4NThhMywgMHhlYzhjYzVlZCwgMHg3YjNmMjk4MiwgMHhlMjkzODcyMSwgMHgyNmE2YmQxZSwKKwkweDRhMmZiZThkLCAweDY1MzM2MWZiLCAweDBlNzg5YmZmLCAweGQwM2UzMmIzLCAweDk5ZGEwZTM3LCAweDJiYTVmMTY5LAorCTB4YzFiZWJmMjQsIDB4Y2Y5ZDZmZTQsIDB4ODhlNGYwZjEsIDB4YTIyYTRiOGEsIDB4M2E3NWI3YWMsIDB4NTNkNTIxM2YsCisJMHgzYjcwNDA5YywgMHg1OTlkYTc5ZiwgMHgyMGMwNmE5ZCwgMHhiOGUzMjMxNywgMHhkM2RiOGNiZSwgMHgzYThmZTc0MiwKKwkweGZlNzQ0YWI3LCAweDIwZTkyOWY5LCAweGVhN2UwZjlkLCAweGZmNDMwZjVhLCAweDA5ZDAyYTQwLCAweDEyNTNlZmY1LAorCTB4ZmNmNzg0NWIsIDB4MzRkYzM1NjUsIDB4NzNhNDBkZTcsIDB4ZTMxNzhjNTYsIDB4YzYxYjRhMGYsIDB4MWEwZWE1YzksCisJMHg2MmUzYjczZiwgMHhiZWUyZDYyYiwgMHgyMThjY2E1NCwgMHg2MWRmOTAyMywgMHg4NjZlMzNkYywgMHgzY2UzYTNlNywKKwkweDA3NWY1ZWQ0LCAweGMyZWE3YmE3LCAweGExZGNjNjYwLCAweGNlN2ZiZWQ4LCAweGMzOGYyODFiLCAweDdjYmNlODYyLAorCTB4OTljYWUwMGEsIDB4YjQzMmU5NDAsIDB4ZTY1OTUyY2YsIDB4NTMzM2I0NmUsIDB4YTA0Njc4YTcsIDB4OGI5NTdmNGYsCisJMHg5MTY0OTNiNywgMHhmNjg0ZGM2NywgMHgyNzBlMDhlMywgMHhkNmY5MmMzYywgMHhhMGFlMTMxMSwgMHhmY2FjNTI3NiwKKwkweDFjZjg3YTkzLCAweGZhMWI0ZGVkLCAweDdhMDYxYzI3LCAweGM0YzhhODRmLCAweGYxMDY1M2Y2LCAweGE3MGI1MTM0LAorCTB4YmJmYjNkNjEsIDB4NzVhMDFlZTgsIDB4MjMzNzNjYzgsIDB4YmJlZjNkN2QsIDB4MmViODI5NzEsIDB4MGIwNmRmZGMsCisJMHhmYjYzZDA3NSwgMHg5N2ZkZjRkMywgMHhmYmVjODNiMCwgMHhmMmYwODcwYiwgMHg5Nzk5NGVjMiwgMHgyNGU3Y2ZjOSwKKwkweDE1ZjZlYmE2LCAweGZhYTFkNzJmLCAweDVlYTI0NmUyLCAweGY5ZGI4ZjdkLCAweGU0N2MzOTVmLCAweGViNDJiZjA3LAorCTB4YTA4MDNjZTUsIDB4NThlOWY5NTMsIDB4MGJjYzMyMTYsIDB4MjFiZWQzZTUsIDB4YjRmY2IzZmIsIDB4ZWYxY2Y0Y2IsCisJMHg5NWM2MzUwOSwgMHhhMWVjMTQ5NywgMHhiMjk0M2JlZiwgMHg1MDlmM2E2NiwgMHg4MzhlNmY1YSwgMHg3YTI2MjJiZiwKKwkweDk3OWYzYWJiLCAweDMwNTk5NjlmLCAweGY5OWFiYjZhLCAweDJjM2VlOWY5LCAweGI5NWEyN2Q4LCAweGQzZjNmMzY0LAorCTB4ZmM2ZTE5OTIsIDB4ZTg1Mzk0NTYsIDB4NzE2OWNiMzksIDB4MGE3MWZhZTEsIDB4NjdhODQ3Y2UsIDB4N2FhMDk2NDIsCisJMHhkYTVkMzc3OSwgMHg3OWE2MmRkZCwgMHhlMWMzZGRhOCwgMHhhOGJmYjEwZSwgMHhiN2Y1ZWJlNywgMHgzOWM0ZDM0ZiwKKwkweDdiY2Y3ZTNkLCAweDIwMjgyNTViLCAweDRkZDNjZmMwLCAweDVkZGZjOTI3LCAweGYwOWJiNGQyLCAweDM3NDVmM2EzLAorCTB4ZDA1OTYyOWUsIDB4YWFlNGE3ODAsIDB4NjQwNWIwZTYsIDB4ZmRiOGU5ZmMsIDB4MDI1ZTg3NGIsIDB4Y2JhM2Q5MjQsCisJMHg3ZDRiM2JmMywgMHhiZjFmMjE2MywgMHhlZjkwNjE2YiwgMHg3OTJlYWNkOCwgMHhjYWIzNzUyNywgMHhmMGZkMGIyMiwKKwkweDYzODlkMmVlLCAweGRmMmYzMDhkLCAweDM1ZjM3ZWZkLCAweGIyYjc4MTEzLCAweDZiZjdmMjg2LCAweDZiN2JkZWUzLAorCTB4NzUwNmM2MjEsIDB4NGNlODNiOWQsIDB4YjAwZDNiZjcsIDB4MDA3NjAyMmQsIDB4YmIwMGNjM2MsIDB4MjMxM2YyMjMsCisJMHhlMDIzNTNmMiwgMHhjZGJlNWUzNCwgMHhiZDk3NGUxOSwgMHhmYjhlNmQ4YywgMHhmNDA1MWFlMCwgMHhmMGRmNWI1YywKKwkweDY0NzliYzc0LCAweGQ3NDdkNTc5LCAweDRiOGVmN2UwLCAweDdiZjdmOGIzLCAweGFmMjQ5YWNiLCAweDY1YTNkMDY0LAorCTB4ZTQ4NzFlNWUsIDB4MzM2OGI2ZjAsIDB4OWExZTIyODcsIDB4NTA3ZDQ0ZGYsIDB4NzFiOTI4ZDIsIDB4ZGZhOGUwZmQsCisJMHhkZjE4MjYxMiwgMHhhYmRlMThmMywgMHg5MmQzZWJlNywgMHg1ZWY0ODNmYSwgMHhiMTBmZjVhZiwgMHgzYTNmM2M5MCwKKwkweDc3MmE3M2U0LCAweDM2MmRmZGFlLCAweGFmM2RmY2M1LCAweDUyYmJmNmRlLCAweDUwYjc4MTJkLCAweGM3ZjdlYWRmLAorCTB4YThmOTZkYjcsIDB4MjBhYTdiZmIsIDB4N2Q3ZGVkN2YsIDB4NDY5ZjQ5N2IsIDB4YzcyZjViOWMsIDB4ZTViYTM4ZmUsCisJMHhhM2UzYzc0NSwgMHg3ZGQxNGU0MywgMHhkNjE4N2ZiYSwgMHgwNzlhMDFmNCwgMHgyZTRlZjNiMSwgMHhmZjc1YWJjMCwKKwkweDE0Nzg3YTU0LCAweDI3Nzg1ZmRhLCAweDRmMWZjZTJmLCAweDcwNGJhMTQ4LCAweDA1OWE3YTVlLCAweGVmNzZjMTJlLAorCTB4Mzc2OGJkMjksIDB4ODBlYzZhN2UsIDB4NWUwY2YyZGEsIDB4ZGM0ZGYzMDksIDB4MDFmZmMyNDksIDB4ZmMwMGNiNjcsCisJMHhjN2U5ZGQ2NCwgMHhhNGUxYzJmZiwgMHhlNjA5YmExNiwgMHhhZmVmZWFiNiwgMHgxZWNkZWZjMSwgMHhjMDMyZDAxOCwKKwkweDhmZjdmMDAyLCAweGUwOTkzYTVmLCAweDQxOWU1YThiLCAweDA0ZWFjMmY4LCAweDE5NmIwZjBlLCAweDAzZmJjMzIwLAorCTB4MjMyNjdkODMsIDB4YTNiYmQ2ZmQsIDB4YTEwOWZkY2IsIDB4YzVmZWY0NmYsIDB4ODkxZGY2MGUsIDB4ODRhYWZiNDMsCisJMHgyYzc4M2JjZiwgMHg3NTdhMDZkYSwgMHg0ZGIxZDE3YSwgMHhkMzFmMDFlYiwgMHhmNDk2MjNmZiwgMHg1YmI2ZmFkZCwKKwkweDFlMTNmM2FlLCAweDZmOGM3ZTgyLCAweGE2ZjgxMTRjLCAweGJiZjQ5MTc5LCAweDVmNDRmNjQyLCAweGJhMTMwYjljLAorCTB4NmY0Y2U5ZTksIDB4NzFiY2QwZjYsIDB4YjQxNmM1NjksIDB4MGZhNjUyMWYsIDB4NTVlMzc5YTUsIDB4ZWUyN2VmOTcsCisJMHhlOWU5ZGQ1MSwgMHhjNGZlOWUyNCwgMHg1YmZhZTZlZCwgMHg0NmJjNTBiNiwgMHhiMjRlNDNjYSwgMHhkZjE3MWVhYiwKKwkweDIzYjkwMDY3LCAweGJhMDg3MGZlLCAweDNjN2NkYzU4LCAweDczMTkwZGZmLCAweDgwMDAxYmQxLCAweDAwMDA4MDAwLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkZGZmMDAsIDB4YzU5NDc4MGQsIDB4YmJiY2YwYjUsIDB4MjZlZmZlZWYsCisJMHhiMjRkOWJiYiwgMHhmMzc5ZjkwOSwgMHg3MTEwMDg0MywgMHhhOTE4OTMxMywgMHgxODg4NGRkNiwgMHgyMjBiYjUzMSwKKwkweDQ5NzE2YjYyLCAweGM5MzA0OWY4LCAweDJkMTZhZDQ2LCAweDU0NDg1OWJkLCAweDQ2ZDEwODgyLCAweGUxYjgwYTA0LAorCTB4ZmQyYjYyMDIsIDB4MWE4YzQ1ODIsIDB4ZjY4ODgyZTgsIDB4NzJkZmJkMmIsIDB4YmQzZmFkZWIsIDB4OGE3ZTFiZDcsCisJMHhiNDU2NDI4OCwgMHhlYjZkZWE1YywgMHgyNjY2NzM5ZCwgMHg1YzkzNzdkOSwgMHg5ZjdiN2FhOCwgMHhiZThmOGJlNywKKwkweGNlZjMzYmNlLCAweGZlNzMzOTljLCAweGIzMzM5Y2U2LCAweDkwODZiYjFhLCAweDI1OGU0MjY0LCAweDRlYzczMGRjLAorCTB4ZTYzMWRmOWYsIDB4MjI0YzlkMTUsIDB4ZjQzM2JiYTQsIDB4Yzg0YjQ5OWMsIDB4YzQyMTEyN2IsIDB4MDlmMDQ4NDUsCisJMHgwZTdiNjg1MywgMHhkMWVkZGYyMSwgMHhiNDg5NzUwNCwgMHg3MzRkZTFkZSwgMHg0NGIyZDExNiwgMHhjMzQ1YmQ3YywKKwkweGQ1N2ZiZGU1LCAweGQyYjNlNWRlLCAweGQzMmQzMTcyLCAweDk5MTJhYmU3LCAweGJkMzNmNThiLCAweGZlNWEwZTY5LAorCTB4YTdhZWZlMDIsIDB4OWY1NjFlZTUsIDB4NThhZDI1YWUsIDB4N2ZiZWMzOWYsIDB4ZTVkYzg0YWEsIDB4NzZkNGNmYTMsCisJMHg3ZDI5NmUzYSwgMHhiNWI4OWRhZSwgMHg5MTZiOGU5ZCwgMHgwYmNhMTc4OSwgMHg1ZDZjMTZlNywgMHg3MzZhNjE0ZSwKKwkweDg5Nzg0MmNjLCAweDUxMjY5YmQ3LCAweGU2MzY0ZWY4LCAweDc2ZDE1NjZhLCAweGM4YWZhN2JmLCAweDUxNWM4NDM1LAorCTB4OTdiMGNkZTAsIDB4ZmY0MGY5ZDEsIDB4NDRkMjFjNzQsIDB4M2MzNjk1MjcsIDB4Mzc5ODFjZmUsIDB4N2FkN2FmYWQsCisJMHhjZjNhNjRiMywgMHgzOWZlMWRkYiwgMHhlMzVlYmVkMCwgMHhkMGI0NDI5ZCwgMHg3N2MwYjc4OSwgMHg4ODIzYjQwNSwKKwkweDNiNzYzOTlmLCAweDQwZjIyN2I2LCAweGZmZmZiYzE5LCAweGI4OTU0ZjA4LCAweDRmMTE1ZmVlLCAweDc1MzRlZjc3LAorCTB4ZjgyNDJjOWQsIDB4YjdmZDA1ZjcsIDB4MmFhMWQ3YjksIDB4YmFkMmZhMDcsIDB4Y2I4NzFhNGUsIDB4ZDBmZmMzNzcsCisJMHgyNGFkNDg3MSwgMHgyYzNhMTQ5MywgMHg4ZDZlMjJhYiwgMHhiZmU4MzZmZiwgMHg3YTA3ZTk3OSwgMHg1MTM3ODFhMiwKKwkweGYwMmZmNDNkLCAweGViMGE0ZWJlLCAweDgyZmNlOTUyLCAweDc2Y2YyNGZiLCAweGIyY2ZkZWMyLCAweGU4OTU5MjExLAorCTB4MjFlNjEzYmYsIDB4YzNmNzllZTAsIDB4ZDE3ZjM0ZTYsIDB4M2YyYzdjZjAsIDB4NzZlNmE5NzgsIDB4ZTRiNzljNWEsCisJMHhmNGVkYWVjYywgMHg1OTBmNzlmYiwgMHhkYjg2NTEwOCwgMHg5ZDcxMWVkMywgMHhiOGNmN2ZkZiwgMHg5ZjQ5NWM5YSwKKwkweDg2YjBkZWZhLCAweDE5ZmRlYmUyLCAweGI2OWNiM2M0LCAweDFhNDM1ZjdiLCAweDczZWZmZjAwLCAweDc0M2Y5NWJjLAorCTB4ODUzMjExZjcsIDB4YjVkOTVmOTAsIDB4ZDA0OTlkZjgsIDB4YmRkYmU0ODMsIDB4NTNiN2UyODgsIDB4ZDAyMzQxMjIsCisJMHhkMjNkNGNjMywgMHhkMjg4NjBjMywgMHhmZWIwOTVjMywgMHhmYmU4N2Q3NCwgMHg4NzI3MDdlZSwgMHgwNjdkNzQ4MiwKKwkweDYxOTEwMGM5LCAweGJlYzQxNTNlLCAweGJmYTk4OTVkLCAweDI5ZWIwMGEzLCAweGI0NGQwNDlkLCAweDBlNjhkYTNlLAorCTB4NWU4MDk1NmQsIDB4NTBhNWEwMjgsIDB4NWZlYjA5M2YsIDB4MDdmYWQ4OTUsIDB4MzhlMjMwZWYsIDB4MWQxOTMzZGQsCisJMHg0MzNhMzc3NiwgMHhiNjAwMWNjMSwgMHhjNmRlMDA4YiwgMHg3Njk0YTNhMiwgMHg2NDQ4NzQ4MiwgMHhiNjk5OTRlZiwKKwkweGUzNmM3YzYxLCAweDNhNTJjMTcyLCAweGI0ZGJlMmYwLCAweGU0ZGFiMjNmLCAweGIwMWY0ZjE5LCAweGJiOTQzMjg0LAorCTB4NGEzYzcxNTIsIDB4YmU5MWFiMGYsIDB4ZmQ0NzA2NjQsIDB4YWI0MmQzOGYsIDB4Mzk0ZjVjNzAsIDB4MzZhM2NiYWMsCisJMHgxZjc4N2NlZiwgMHgwMTQ1OTFmZCwgMHhjODk5MzdmOCwgMHg3ZDA5NjM0YSwgMHhlOGMzYTQ0YSwgMHhlMWMwZWJhNCwKKwkweDEzNGY1ZDIxLCAweDYwYmI4M2EwLCAweDdmODc4YTAwLCAweDUzNmYzODZmLCAweGQ4OWZmYmU4LCAweDA4MDM4NDI1LAorCTB4NDg0ZTU4Y2QsIDB4NzVmNTYxMWQsIDB4YTRjNzJjY2IsIDB4ODZkNGYwMjksIDB4ZGRmNDA5MGQsIDB4MDNiYzFiY2EsCisJMHhkOTcyYmU4MiwgMHhmM2ZiNDhkMywgMHhlYjIyYmE3MywgMHg4M2MwMzZhMywgMHg4MDRiYmUxZiwgMHgyOWI3M2ZmZSwKKwkweGVmZDMyODU2LCAweGQzZjJjMGE3LCAweGJmODcwYmVmLCAweDdkZjAzOWZmLCAweGUwYzdjMDE5LCAweDY1MTY2ZDI3LAorCTB4MWY4YzM0YmIsIDB4ODBiOWZjZjEsIDB4NmY2OWViYWYsIDB4OWM2Mjc4ZWMsIDB4ZDk4ZjdlZjgsIDB4ZjAwN2ZmYmQsCisJMHg0ZTFlZjE0NSwgMHhiNDVlMDE3NCwgMHhmMGYxYWViOCwgMHhjN2QxZjRiYSwgMHg1ZTdlYjQ0ZCwgMHg4MmIxZDY5YiwKKwkweGQ0YmZkM2UyLCAweGYwMTVmMzg2LCAweGJkMWE5NWRlLCAweGVjOGRlNDhlLCAweGE1YTU5NGZmLCAweDJmZjk4NjVjLAorCTB4OTY0Zjc0NjUsIDB4NjJlMjI4MTksIDB4MmUxZmEyZjEsIDB4NDg1ZGQyNTMsIDB4ZDIzNTg3YTIsIDB4ZjBlNWVmMjgsCisJMHg1MTdmODAwMSwgMHhmOGY3Y2M3NywgMHg2MjFhYmZkZiwgMHgyMWJlMDlkYiwgMHgzZjA3MTQ4YSwgMHg5MjQ1MmJhNywKKwkweDEyZmNkZDYxLCAweDNlYmQzNzViLCAweDU2ZTQwZjNhLCAweDlmMDJkYzNjLCAweDhkZTVjNmZmLCAweDdjNzg4YmEwLAorCTB4YmJlMDFiZmYsIDB4NWRiZTI0NmMsIDB4ZTg0YzgxZmEsIDB4ODBkNGJmZDcsIDB4OWZlZjhhNzgsIDB4Zjc3ZTEwOTAsCisJMHg0ZDA0ODliNCwgMHg0YmQ2ZWU5NCwgMHhmYWViZDIxMiwgMHg5MDIxMmQwNywgMHhlOGE2ODM5YiwgMHg2MDY3YzAwZSwKKwkweGRlYjg4ZGZmLCAweDBhY2QxYWU3LCAweGVhMzY0ZGExLCAweGY3MDViZjE5LCAweDE3MWYxOGRiLCAweGRjODAxNDBjLAorCTB4ZWNlNzQ3M2IsIDB4ZWU3M2ViYTUsIDB4YTA5ZWRhMzcsIDB4YTQyMDgwMjQsIDB4YWRkYTM3ZTUsIDB4NWVlN2ZmNDAsCisJMHhiM2Y1ODliZSwgMHg1YTEwYTJkYywgMHhlOTg2MDAwZSwgMHg3ZmUwODFiOCwgMHg1NzhhMTFiNiwgMHhjNzExOTY2OSwKKwkweDBhNTdiMTNmLCAweDhmYmVhMDE5LCAweDVlNDYzOWUyLCAweDM2ZmZhMzllLCAweDhkY2IwYzk0LCAweDM4MDBhODQxLAorCTB4MDcwODJjZmEsIDB4OGUyMzY5OWQsIDB4NTkzMzVkZjcsIDB4ZDE2ZmM3NDUsIDB4YWQwZDVlNDgsIDB4MjkzMjU5NmYsCisJMHgzMWUwY2VkNCwgMHgxNmQ1Y2FjNiwgMHg0YTkwZTkwZCwgMHg0NWJmZjk4NiwgMHhkZWUwYmM3MywgMHhhNzI3NTYyMiwKKwkweDYwYWM3OTcwLCAweDg1MTI0M2JiLCAweDNhYjhjOWIzLCAweDA1ZmEwNWEyLCAweDRiZjVhMDNlLCAweDc4NjczZWEwLAorCTB4N2Y1NjVhMWQsIDB4NDc5ODE3ZjQsIDB4N2QzNTFlY2IsIDB4OWVhZjNkMzQsIDB4YmE1ODkyYzcsIDB4MTdhNjE5Y2EsCisJMHgxN2MzMjk0YiwgMHhmMWExMjZhOSwgMHgyZjFiNWUxNCwgMHgyMTIyNmE1YiwgMHhlOTYzZTAyZCwgMHgyYWUyNzIzNCwKKwkweGMwZTBmNGRhLCAweDViMjNhMDc0LCAweGEzYTkyZjY5LCAweGUyNjljMGNmLCAweGE3Yjg1MTBkLCAweDM2YmNmN2Y2LAorCTB4ZDQ3N2I2OGUsIDB4YmE2MTMyNDQsIDB4Y2RiZmE1ODEsIDB4ZjBkNTc5M2IsIDB4YWYzODBiM2EsIDB4NGI0MjdmZTksCisJMHg3ZTFlMzhhYywgMHhlZWYxNDE0NywgMHg4OWJiNjJiNiwgMHg3ZDg4YWViMywgMHg5MmVmYzBhZSwgMHgwZjJmNGMzNSwKKwkweDFmZTAyYmMwLCAweDc1Y2RlOTk5LCAweGZkNTI2ZjVjLCAweDYxN2FmMjhhLCAweGFmZDQwNGQ3LCAweGNlNDBmZmEwLAorCTB4ZjRjMDk1M2QsIDB4OTAzZGM4MzEsIDB4YWE4ZTZkMzMsIDB4OWU3NDFjYWIsIDB4MTRkNTY3NjYsIDB4YzcxYjE5NDcsCisJMHgyN2U5ODM2NywgMHhhNzg4ZmVhMSwgMHgyNDNkNzhlYiwgMHhiNWU2YTVkYSwgMHhjNzVhYjcxNiwgMHgwY2Y5NDc2ZSwKKwkweDkwZGQxNmYxLCAweDJjODhlNGM4LCAweGFmZDE3OTYxLCAweDEwYWIzZDc1LCAweGU2ZTkxOTNlLCAweDI4MzljZGRlLAorCTB4OTc0ODFiOTcsIDB4ODliY2U4MWUsIDB4Yzc0MGY0ODQsIDB4OTgyNDhjOGIsIDB4MTE2MmU5NDAsIDB4OWY0ODk2NmQsCisJMHg4ODFiZDc4YiwgMHg4ZDdlYjMxMiwgMHg4OWI5NzUyMSwgMHg0OWJiODVjYiwgMHg3YmJmYmYwNCwgMHgzNTdkNWM2NywKKwkweDdkNjhkYjA5LCAweDJkODQ5MWIzLCAweGQ3NTVlY2YwLCAweDhlN2Q1MGI3LCAweDg1ZjdkNjdjLCAweGU5M2RmNjIxLAorCTB4OGJiZGYzNjYsIDB4M2FhM2JiYWYsIDB4NzlkM2Y1YTQsIDB4ZGQ1MTMwNmYsIDB4NWQwNjg0ZWEsIDB4OTc1MzNlYjgsCisJMHgyNjdhZTBmNSwgMHgxZTczNzg5NiwgMHgyYmYyYmQwNiwgMHhhNTJiNjc5ZCwgMHhmNWYwM2ZkYiwgMHg2NjM5ZjgxMiwKKwkweGJjMDBhYWFmLCAweDljMWFiNTliLCAweDAzNjFmNDdmLCAweGQ1MjRlN2UyLCAweDZiZmViMGUzLCAweDU5YWVlNDFkLAorCTB4OGRhZTc5ZjQsIDB4ODA3NWYzNzgsIDB4MmNkNjdiMjYsIDB4YWYzYzQ4ZGIsIDB4MDBkNGM1N2EsIDB4ZDBlMGQzNzQsCisJMHhkMzJhZThhOCwgMHhmOTcyYzNhMSwgMHhlNWZmOGUwYSwgMHgxY2Q2ZDA5NiwgMHhhMDE0Zjc0NCwgMHhhMTVjZjJhNywKKwkweDk5OTRjOTU3LCAweDQ3NGM3Y2I0LCAweDZlNWEzYmVkLCAweDQzZjU2Mzk5LCAweDRmNjAwMzdmLCAweDBlZmRmMmQwLAorCTB4NzdlZWNmMjYsIDB4NDUzZDcxZTgsIDB4ZDA1N2NjNTksIDB4ZmIwNzFkMGQsIDB4OWVjNTVmMzMsIDB4NDM2NThlMDIsCisJMHg3NDYwOWZlZCwgMHhiYWYwZjVjMywgMHhlYTBmNzM0NiwgMHhkNWZhMjFlMSwgMHgyMmRmYTQxMCwgMHhmYWYwMWU5ZiwKKwkweGYzMmI5NzBhLCAweGY4YTE2ZWMxLCAweDE0MTI4NTdlLCAweDJmNjA4ZmM4LCAweDNlMjk1ZmIzLCAweGU1YTUyZGU2LAorCTB4NzkxNzRlNTcsIDB4Njc0MDI5NTYsIDB4ZjJiY2RlNGMsIDB4NDE1OTMzMWQsIDB4Y2NmMzdjODcsIDB4MjdmYjFmNGYsCisJMHhiNGZlN2Y1YSwgMHhmYWQwMzE1ZSwgMHg3NDZiNDAwNSwgMHg4ODkxNWVmZCwgMHhiZTBiYzYxNywgMHhiZTgxMDg2OCwKKwkweDdiMzNkMjZjLCAweDE1ZmY2OWI0LCAweGZiZDE5ZWNjLCAweDcxODQyYzM3LCAweGMwNzlkMDVlLCAweDA4NGE2OWRlLAorCTB4ZWIwM2I3M2QsIDB4YTI5NDNjZDMsIDB4ODYzYWFiYzksIDB4MTZjYmUwY2YsIDB4ZjQzOWJkZjYsIDB4YTBiYjlmYjMsCisJMHhhNDEzZDUzZSwgMHhmZjI2YTNlZCwgMHg3NGQ3NTg0NiwgMHg3YTg4OTI4MywgMHhjMjVhZDdmOSwgMHgzODE3MDljNiwKKwkweDg3OGY1ZTI4LCAweDljN2RkZDk4LCAweDRlMzA0OTU2LCAweGExZmIwZGJmLCAweDkwYjY5YTdjLCAweDMzYTI3M2Y2LAorCTB4ZTU0M2U3MTUsIDB4Mjc1OWRhMmYsIDB4ODJiNjE4ZDYsIDB4MzQzNzVkZmMsIDB4OGZlZDg0YWUsIDB4ZDNkMzdjZWIsCisJMHg4YmY4Zjk2OCwgMHhiNGU1OWVjNSwgMHgwZmE3ZDA2YSwgMHgwNzNkMjllYiwgMHhhZmJiMzJkNiwgMHgwMTZjYTM1ZSwKKwkweDE2ZmQ5MGZjLCAweDhmNTg4NzljLCAweGI1YzU5YWMwLCAweGIyNTgxZjUwLCAweDhmOTAxNmVjLCAweGM4MzlmMTYzLAorCTB4MzcyMzEyN2IsIDB4MTY2ODkxY2YsIDB4ODZjNmQzZjAsIDB4ZTgzMGRlZGMsIDB4MWU4OWZlOTUsIDB4NGRjNGFmNTQsCisJMHg4ZGQyOWYxNywgMHhhOTNkYjU5ZCwgMHhlZThkZjg2MywgMHg1ZjNkMjFkMywgMHgxNzQwZmY2ZSwgMHg0M2QzMzk3MiwKKwkweGNhODA0ZTMwLCAweDBmZjgyMjY1LCAweDU5NGM3MmU1LCAweGFkOTk1YTNiLCAweDU0OTVlMDYzLCAweGViYTlkZjZlLAorCTB4NDdmYzEyNTMsIDB4OWU1YTVkNjAsIDB4OTdmNzhmZmMsIDB4MTQ1ZTMwMmEsIDB4NGFlOTIyZTUsIDB4YTkzY2JlNDYsCisJMHhiYTAzY2VmMywgMHhmNTg3NTQ3NSwgMHhmZDdhMzE3NSwgMHg5OWQ5ODNhNCwgMHgwNzZlMDZmNSwgMHg5NjNlYjA5MiwKKwkweDc5N2Q0NTBmLCAweGM1ZWU5YTk1LCAweDdmYTcwNGYzLCAweGY3Yzk4NDViLCAweGNlMWFmNTkxLCAweDQwMWFiNzFmLAorCTB4MjA2NTRkOGYsIDB4MjNkMDZjOTMsIDB4YzE1ZmU4NTYsIDB4MGU5ZWE3ZmUsIDB4Mzk2OWViZWIsIDB4YmY1ODU5N2IsCisJMHg0ZjgxM2Y4OCwgMHg0NmMzYmUyOCwgMHgxYjkzZWYzYSwgMHgyOWJmOGM2YywgMHg0NTlmYTAxYSwgMHhlNWY1MDQxNSwKKwkweDYzYjUyZDIyLCAweGQyYmRlMDRiLCAweGU1ZDc0MDM3LCAweGE0MGU4YmQ0LCAweDhhNjdmMjJmLCAweGY5ZWY4YTE1LAorCTB4NTAzM2I3ODQsIDB4YjFjYTk3YmIsIDB4MzBhNDNhOTcsIDB4YWZlNjBiZWMsIDB4ZTUzNTZjMzcsIDB4YjU3YjVmMDAsCisJMHhjZGNmNTgzNiwgMHhmOWIxY2ExMiwgMHgxYjA1OTUxZCwgMHg5ZWM5Nzk2OCwgMHgxM2ZkNzAyYiwgMHgyZTVkMTgyYSwKKwkweDJmNTAzOTA5LCAweGIxZjJlNTRlLCAweGEzZDIxMGRlLCAweDg5MzNmZTFkLCAweGY2ODgzZWMwLCAweDEzNzRmNjhmLAorCTB4NjRhZDI4ZmQsIDB4YWU0MDFlMjQsIDB4MTQyMWU4YWIsIDB4ZDFmNmE2NTMsIDB4NTcyNjVlZDQsIDB4MjRlNzk1MDksCisJMHhmMjEyNmVjNiwgMHg4OTM4ZTQxZSwgMHhmNGQ1MDNiMywgMHg4OGZhMTQxMSwgMHhhNGEyM2RjOSwgMHg3MjEzZGM4MiwKKwkweDk3ZGQ5OGY5LCAweDNlM2I0NGU4LCAweDk3ZDYxNTNmLCAweDliOTMyN2FlLCAweDZiYzQyNWJiLCAweDdkNDU2OTMzLAorCTB4ZDBjMGY0MjIsIDB4OWM4ZjVjYjgsIDB4YmU5OTA2ZDIsIDB4Y2Y4MTNjMzIsIDB4YWUwZTY3N2MsIDB4OGJkMjEyZWIsCisJMHg5NWU4NDRmYSwgMHhkZjIwZThiMSwgMHg4OGZiZTFhOSwgMHhiYzYwZTlkMSwgMHg5YWZlYzE1MywgMHg3NWYwOTM0ZSwKKwkweDY1YTZiYzc0LCAweDg1M2NkYzI0LCAweDUwNTM2ZDNkLCAweDY5M2QzMjNmLCAweDllMTI3YTY0LCAweDk3ZDBjYmU2LAorCTB4NWUzMWZhZjEsIDB4YzFlYmM2MWYsIDB4NzdkMzNkNTQsIDB4M2Q4NTlkNjIsIDB4ZDk4ZDNhOTMsIDB4ODU5NzUzMDEsCisJMHhmYzA4YTRiNCwgMHg5NGVhZGUzNSwgMHgyNmJiNjFlNCwgMHhhOGQxOGVmMCwgMHgxZjY1MDk1YywgMHg5ZWY5MDVjOSwKKwkweDJhNjJmOTUwLCAweGM0YzgwZmFkLCAweGExNjU3YzBiLCAweGVmYTFlOTc4LCAweGI3ZmI3MzM3LCAweGQ3Y2Q5NTI3LAorCTB4YWJmNDY3YWQsIDB4ZDhhNDdkOTMsIDB4YzExMmViMGEsIDB4OTkzNDZmN2QsIDB4MDUxZTgxZDgsIDB4ZThkYjM3M2UsCisJMHgxZGYwMjU3NywgMHhlZmExYjdlMywgMHgxY2MzYTQ4ZCwgMHgyYmQ1N2RmMywgMHgxNzNmZDQyNiwgMHgwYzg1YjY1ZSwKKwkweGIzZjg4ZjY4LCAweDk0YmZiNDFkLCAweDRlZDAxYmRmLCAweDBkOGFmNzNkLCAweGFlMzllOWY1LCAweGVmYzI1ZDBmLAorCTB4N2U2MTFlNDAsIDB4NDFhZWJlMTYsIDB4MDA4ZTM1NTIsIDB4YzYzMzRiZWQsIDB4ZjYxNDA4ODEsIDB4ZDk4M2IzNTksCisJMHgyMWVkMjM1OSwgMHg5OTEzOWY1ZSwgMHg4MGNhZThjMywgMHg4ZTBiY2RmYiwgMHg0Y2EwMDc4MSwgMHg3ZmEwMjFlMSwKKwkweDdlMzI3MTZlLCAweDU2OTllYzBmLCAweDNlZmE0M2ZjLCAweDE4N2FiM2UwLCAweDQwYzVmZGY2LCAweGY3ZWQwNmFmLAorCTB4N2QyOTE4ZTcsIDB4OGIyZWQ3NGQsIDB4ZDFlNzQ4M2UsIDB4ODNiNTY5OWMsIDB4ZmVjZWFiN2UsIDB4NDFkZGRmZDcsCisJMHhkMWVlMWZjYiwgMHhmM2FjMDMxMSwgMHg0OTczNjlmNiwgMHhiN2YyZDhlZSwgMHgzZTNiYTQzMSwgMHg3NzJmYzMxMCwKKwkweDliOTc1NGVmLCAweDQwZTVkNTdiLCAweGJmN2NiYTlmLCAweDY1M2FlNmQzLCAweGY5ZTFkOTQxLCAweGMxYjVkMjgyLAorCTB4ODdiYTdhZDAsIDB4ZDU3ODZiYzIsIDB4ODY2OGZhODAsIDB4MTM5MGZmZDMsIDB4N2EyNmFkZTQsIDB4Yzg2Y2YwMTgsCisJMHhmODBhNzhmZSwgMHg5ZmZkMDIzYiwgMHg1MDM0ZjA0OCwgMHgzMTE0OGEzNiwgMHg1ZjVmMDNmYywgMHhiNmNmY2QzMCwKKwkweDYxYjc4MjhmLCAweDA2YTMxMWZjLCAweDc1YWQ0Y2YxLCAweDE3Mzk0NGY2LCAweGQyZTI3Y2UwLCAweDQwM2MzZjdiLAorCTB4OTY2OGJmZTcsIDB4ZGYwMmJlZDksIDB4Y2FjYjZiNzgsIDB4MTg0NDllYzEsIDB4NGRmZDYwNDksIDB4OGJiZWMyMWYsCisJMHhmNTg0NmJiNiwgMHhiNjkzMzUzZiwgMHhhYzM1NzBhMywgMHg4OWIwZmE2NywgMHg2ZjgwMTI0NCwgMHg2OWRkYTg1YiwKKwkweDFiZmM0YmE0LCAweDc3Nzc2ZmNlLCAweGY0YzNjYjQ0LCAweDM1OWRiYjdmLCAweGY5NGUwMTEzLCAweGU4MGZiMjJmLAorCTB4MzdlODUxZTMsIDB4ZWFkZTRlYzYsIDB4NGJmYzcyNjQsIDB4NDYzMjk5ZmIsIDB4MDJiNjk5ZjgsIDB4MDM4ZDlhZmUsCisJMHhmZTNhNGFmYSwgMHgwY2Y5N2ZmNSwgMHhhNWUyZmRlNSwgMHg4MjNlZTFhZiwgMHhiMzNlNjNjZSwgMHhjODBhNGRhYiwKKwkweDFlMGZjNWE3LCAweGRmNjJmN2MwLCAweDhhZDMyYTc2LCAweDM2ZDdiNmZiLCAweGExZDk1ODE4LCAweGNkYTlmMmM3LAorCTB4YjhiOTVmNmMsIDB4M2NjMTBhNTcsIDB4OTMxNzU5YTUsIDB4NmMyZjQxMmEsIDB4NjQwZGQ5ZDYsIDB4ZjFlMzVlMjQsCisJMHhiN2E2YzFmOCwgMHhmNWVmYzAxMywgMHhmNjFkMjIwMSwgMHhjN2IzMTI3YiwgMHhiODA5YWRlYywgMHgxMzVhNTA3ZiwKKwkweGFjMGNiZWMwLCAweDkwNDNmMWJmLCAweDZiMzc4YjhmLCAweDkwMmY2MDNkLCAweGNmZjQzNjdkLCAweGMzN2NkZTJjLAorCTB4ZTg1Njg1YzQsIDB4NGFhNGQzZTcsIDB4Yjk2ZDEzZjAsIDB4ZDA1NDNjMDEsIDB4N2U2MjE3Y2UsIDB4ZjRmNWM4OWUsCisJMHg2YWU1YmNiZCwgMHhkMGYxZjgwNSwgMHg2MmZmMDY2NiwgMHhkMDA3NzE4NywgMHhkMTdmZjVkMSwgMHgxYWM5N2YyMiwKKwkweGI5M2IwN2UyLCAweDA4OWRlZjViLCAweGRhNmNhZDdjLCAweGU3ZDYxZDNlLCAweDFhZTk5OTgzLCAweDIyNGJiZjZjLAorCTB4NjM4YmMwNzYsIDB4NWZiYzBhNjksIDB4ZTAzZWM5MmMsIDB4OGRmNTg2ZTMsIDB4NGY3NmIxYjUsIDB4YzdmOTkzOWQsCisJMHhhNTk3YjMyYSwgMHhhZjkxNTgwYywgMHg2ZDNlODBlNiwgMHgwOGY5NGNkZSwgMHhkZWY1OWZjNiwgMHgwZDcwZWVlZiwKKwkweDZiMzQ5NWYzLCAweGExNTMyZGZkLCAweDFlNzU2N2ZmLCAweDdiMjFiYmUwLCAweDkwYjdkMzY2LCAweDRjMmZlMGJlLAorCTB4ZTM5OGI1ZjEsIDB4OTlmMmFiZWIsIDB4YTRmODIyYzEsIDB4ZWFlNDAwYjUsIDB4MDVhZDE1ZTIsIDB4OGNlYzUxZjYsCisJMHg0NGQ5M2UyMSwgMHgyMTMyNzJmOSwgMHhmOTEyOWRhNywgMHgxOTkzZmMwMiwgMHg2M2JlZDU0ZSwgMHhiNTlhN2RhYywKKwkweGM2N2E4MzUwLCAweGVkZGUyMWU4LCAweGI3NGE5OWY0LCAweGI3MWZiMGM5LCAweDZmNThjOTI1LCAweDdkMjNkMjRiLAorCTB4NzdiYTdmY2IsIDB4YmNlODZmZTcsIDB4MmZmYTc0OWUsIDB4MjZjY2JlODAsIDB4NmJkMDYyZGUsIDB4NDU1ZWQ0NGEsCisJMHgzNTQwNWFjZCwgMHgxMzY0NjFkYSwgMHhjYzg5YWZiMywgMHg5MmViODVmYywgMHgzMTU1OGVjOSwgMHgxMjUzNzNmYiwKKwkweDM5NTA0ZmRiLCAweDczZjQwNWYxLCAweDFmM2ZkZGVlLCAweDY0YjZmYzA2LCAweGVjMDUzYzdkLCAweGNmYzVjMDg1LAorCTB4YjM1ZmUwZjQsIDB4ZGYyODRiZjYsIDB4MDExZjFlYWQsIDB4Y2ZmNDA5YmEsIDB4ODY4YTBiMjQsIDB4YzNjMDcyZTUsCisJMHhiY2ZjNDZmNCwgMHg5OGU5MjRlNiwgMHhiMTQ1NzUxYywgMHg4Mjk3NGE5ZiwgMHg0MTA3NmVlNSwgMHhkNGI4ZGE3YSwKKwkweDQ2ZmVmNjhjLCAweDQwMDRjODU3LCAweDJiN2NhZGZmLCAweGVlNDZhN2VjLCAweGZiNmUzNDBmLCAweDc0MGI1Nzg1LAorCTB4ZTNlYzkyMWUsIDB4ZmUzMGFjYTEsIDB4MTc5ODZjMTgsIDB4M2U3MWQyZDIsIDB4YzQxNzk2ZGMsIDB4OGY0YTllZjIsCisJMHhiNzU5ZDY5NiwgMHg1Y2NhZTNmZCwgMHhjZTlmNTNjMCwgMHg5ZWFkZWQwMywgMHhkZjk4MDQ4MSwgMHgyNDRlZGI4NywKKwkweGI2MWFmY2MwLCAweDBkZGU3MTY5LCAweDE2NTI0ZmExLCAweDA5Y2IwZDE2LCAweDkwNWZjNjlkLCAweDVkODI3NjA0LAorCTB4NDJmOGMyYjIsIDB4ZWRiODdjNWUsIDB4NTYwNTk0ZDMsIDB4N2Q0MDNmZTYsIDB4NWUzYTNhNWEsIDB4YzljYWNlY2MsCisJMHhkZmY1ZmRmMCwgMHg2NjcyZWI2NCwgMHg3MjA0MjE5NywgMHhmOTg5OGNmMCwgMHgzM2JiNDVmNywgMHhhZWZmYTYzNiwKKwkweGNkZmUxMjRiLCAweDNmZDAyY2RlLCAweGEyNzk2NTQzLCAweGY3YzRlNDA2LCAweDJlZmU2Y2VkLCAweGYwMTY2ZjdkLAorCTB4YmE5MjQ3ZTUsIDB4YjUyYjI1OWYsIDB4NTJlNTQ0MjQsIDB4ODQ4OTRhZTMsIDB4ZjMzZmNjYTgsIDB4MjA1OTRiZGMsCisJMHhmZWRjM2ZmZiwgMHgwYzVkNTY1MiwgMHg4OWRmZjE3YywgMHg2YTQ5OGRlNywgMHhhZmYwOWE3ZiwgMHgwY2UxZjRiYSwKKwkweDYzY2VhZjE4LCAweDMxY2M3ZTYwLCAweDNkYTJhYmZjLCAweGE0ZmNjZjU5LCAweDgxNmI5NDgzLCAweDgzNzdjNTBlLAorCTB4ZDgyZjY2MGQsIDB4MThjNDgzYmIsIDB4NWQ1Yjk3MDIsIDB4N2FkN2Y3M2YsIDB4ZDgyZWY5YmQsIDB4ZTNlZjg4ZDcsCisJMHhmNDBkNWZmYSwgMHhmYTkyZTE0NCwgMHg1ODI3ZjQyNCwgMHg5ZjI4YTI4YSwgMHg3N2ZjYjRiZiwgMHg5MThjZjVkMSwKKwkweDhkOWQ3NGZmLCAweGM2Y2Q0ZWIwLCAweDA0NzFlMWU4LCAweDc4MGY0M2U5LCAweDY1NThiN2QzLCAweGVkMjk1N2QwLAorCTB4ZjdhMmJlOGMsIDB4ZTU5ZjcwNmIsIDB4ODE0YzI3MzIsIDB4ZGQzZTgwYjgsIDB4NzZmOTA1NmQsIDB4NDNiOTgxN2QsCisJMHhiM2VmMDg5MywgMHgzMzNlZDA0MiwgMHgwYmJmMTBiZCwgMHgwZmZhMzE1NiwgMHhjM2Y0MTBhNiwgMHgwOTU2OTFhNSwKKwkweGU2NzZiNGZkLCAweDIwYThjZmU3LCAweGY4YjQ1NWY2LCAweGU3NjYyNGIzLCAweGJkNjc4OWI4LCAweDVmZDcwZjM2LAorCTB4YzcwNzM4YzIsIDB4NDAwZmQwOGIsIDB4Y2YyZjIwNDcsIDB4MjNhNDQ2NDgsIDB4N2I0MjVmYTksIDB4OWRlOWFiNTQsCisJMHg0NThlZmQwNywgMHhiYWM1MmI1NywgMHgyYTFhYmE3MiwgMHhlYWU4OWRmZiwgMHgyM2M3NDE0OSwgMHgyMGFmY2FlOCwKKwkweGEzOGRiOTVkLCAweDIzZjcxNWQzLCAweDEyN2I3NjVmLCAweDM2YmVjMWY0LCAweDJkNmJlMzk1LCAweGZiZDEzZjk3LAorCTB4MmVhZmMyOGQsIDB4Nzk2YjdjYzEsIDB4NmI0NmI1N2YsIDB4YzQ3YTBiNTgsIDB4ZDYzOGZiYTMsIDB4ZGE4OWJjM2YsCisJMHg0YTdmYjBjNSwgMHgzZTllYmIwMywgMHg1N2NmYjVjNywgMHg2NDQ4ZGQ3MCwgMHg5NjA4ZmMwMCwgMHgyZmE4OGRhYiwKKwkweDcyNDRkMzFmLCAweDlkNDk4ZWMwLCAweGU4MWJiYWQ0LCAweDUxNWU3NTIzLCAweDBiZWUzYjQ5LCAweDE3YTAxYzMzLAorCTB4N2ZhMmQ3NDAsIDB4MWYzNGU5NzQsIDB4MWM1ODIzYjMsIDB4OGY1MzNhMjgsIDB4MDc5NjljZmIsIDB4OGVjYzdkMmIsCisJMHgwOTdlNDFhOCwgMHhhMDI5MzZhYywgMHhlN2Y1YTcwNywgMHgwOGZhMDcyYywgMHgwMzFlMjMyYywgMHg4NmNmNzFkMiwKKwkweDlkY2ZlMDQ1LCAweGFjODBmNTZkLCAweGIyMjVmMTEzLCAweDlkNzdjZDUyLCAweDA1NTM4YjEyLCAweDBmMTgyMjZmLAorCTB4MGQzMzhlMWIsIDB4ZTgyMWY5NmMsIDB4ZjQyMmM2ZmYsIDB4OGZmOTBjOWIsIDB4OGRlYTA5ZjMsIDB4ZDY0MzhkY2IsCisJMHhkZTIxMzZhZCwgMHhkMDY4ZmM0NSwgMHgyNTc0MTE0NiwgMHgzZmIxOTFmYSwgMHg3YTY0Njg5MiwgMHg0MDdjYTQ2OCwKKwkweDA1NGE3M2ZmLCAweGExZWI3ZjExLCAweDNjY2EyZTljLCAweDVmZjgyM2RlLCAweDQ1NmNhM2M0LCAweGM4YjAxY2JlLAorCTB4YmYzOTljMmIsIDB4MDQ5YzQzMzIsIDB4YjM2Yzc3ZmMsIDB4MDBmZDg0MTYsIDB4MTk1OThkZmEsIDB4Njk0ZmNhZGQsCisJMHg1MGU5MjAyOCwgMHhhYWFiOWZmYiwgMHhiY2NhNjIzMywgMHhjMWY3ZDBmZCwgMHg1ZjU3Mzc1NSwgMHhhODc3ZmE4YiwKKwkweDdhYTZjMDFlLCAweDI2YmQ5NDU5LCAweGMzNTVlMjA1LCAweDgzYjUzMmY1LCAweGZmMTI3ZDhkLCAweDFiZTZlMmJlLAorCTB4OTQxZWFhYTgsIDB4ZWU3ZmY4YzQsIDB4ZDExZjgyZjQsIDB4YzVlMzU0NDQsIDB4ZjVjNzI3YzIsIDB4NWJmZGEzYWYsCisJMHgzODNlZGUxNSwgMHhlZmU4MjZlZSwgMHg3ZTUxMTJhOSwgMHhlMTRiZDNhMCwgMHhmNzUzYWI1YiwgMHhkZmU1Mjg4NywKKwkweGY3OGM0MTQzLCAweGFmMGU1MzdmLCAweDZjMzE5ZDVhLCAweGUxN2I1MDFmLCAweGMzNjU0OWNmLCAweGVmYTNjMjc2LAorCTB4NDk1ZDc2ZDUsIDB4M2ZkOGIyYzcsIDB4MTVmZTgzZDUsIDB4OTJlMDNlZmEsIDB4ZTc4OTBlZDAsIDB4ZjQ5NzA0ZDcsCisJMHg2NTZiZWNkNSwgMHhlMDlkN2Q4NCwgMHg3NGY1ZjY2MiwgMHgyZmJhNDk2MCwgMHg1ODFkZjk0MSwgMHhkZjYwMjNlNiwKKwkweGU5YzRiYjUyLCAweGUzZTRiYjQyLCAweGZkNjgwNzUzLCAweDFmOWY1OWI5LCAweGJiNDBhNzFlLCAweGJlYzFlNjdiLAorCTB4NDY1MTcwMmEsIDB4YTlkODFiZjksIDB4NmY5NDQ5MGQsIDB4YWVjY2ZkOGMsIDB4ZTMxY2ZhYTYsIDB4OTY3ZTgyMDUsCisJMHgzOGZkMzlkOCwgMHg5N2ZjMDQ4MiwgMHgzMmE0ZmJkZCwgMHg1YTQyNzdhMCwgMHg2YmEzNmViMywgMHgzNzk3MDNmOSwKKwkweGZiZTFjNzEzLCAweDk3NzlmOGNkLCAweDIwNWY5OGJiLCAweGExYjU1ODUwLCAweDI2ZGZmYTAwLCAweDU2MTdiMDExLAorCTB4NTk0ZjFlMTUsIDB4NjNhOWZiODAsIDB4YmU2MzBiMjksIDB4MGE3YmVjNmIsIDB4NTNiOGQ5ZjEsIDB4Y2IxZTJhMzcsCisJMHg3ODA0ZTFhOSwgMHg0NWY5Nzk2YywgMHgzMzhkYzgyZiwgMHg0MjY1MDkyMSwgMHgwNGVhMWM4MywgMHg0MWExYjZiYiwKKwkweDI5MjExNjAzLCAweDAzYmZjZDBkLCAweGY1NzMxZmUzLCAweDVmOWQzYzY0LCAweDgxNzdkNzA2LCAweGE3MDZiNzlkLAorCTB4YmZlOWJjYzIsIDB4ZDFiNTdkMTIsIDB4YzRlNTA4YjcsIDB4MmI0NmI5YzYsIDB4ZWIwYTkxYzYsIDB4ZDgzYzQxZWUsCisJMHhjM2MwNWVjZCwgMHgzNGFhYzJhYSwgMHhlNjY1YTcxOCwgMHg0ZGM2M2I3NCwgMHhmNTA3M2RhOCwgMHgwNzdlMGYyZCwKKwkweGFlMDI0NWZkLCAweDFhYmE3ZDU1LCAweGE5Y2E3N2IwLCAweDBhMGJmNzVkLCAweDQ2NzNhNjc3LCAweGY1ZjI4NzhkLAorCTB4ZTJlZWVkMzgsIDB4NTcxMGFjZmIsIDB4ZmY4ZTVkMWYsIDB4MTc0NjY0YmYsIDB4ZjgyZjkyMWQsIDB4OGZmNDUyZWQsCisJMHg2NzdmNTg5MiwgMHgxZmIzMWY3NiwgMHg1NWU5NzE2ZiwgMHg1YzViZjFmZSwgMHgzNmJkYWVjYywgMHhlNDA2OTkxOCwKKwkweGIwMWU1ZmIyLCAweDIwMWQ1ZDgwLCAweDVmNjA0ZmRlLCAweDY1NTY3YzRkLCAweDkzMTNhZTNiLCAweDA1MzZhZTVmLAorCTB4ZDc0NjY2ZmQsIDB4NDI1NzYzYzAsIDB4ZWUzMmI1ZmQsIDB4ZjAzYzg4NjcsIDB4NWNmNzE4NjMsIDB4OGFiM2NiYTcsCisJMHhmMjgwM2U3MCwgMHg5MDIxNDU4MywgMHhmZTVjZmJjNywgMHg5NmZhYzJlZiwgMHhkY2Y1N2I3MywgMHg4MzE2MzdjYiwKKwkweDVmZDg1MTdmLCAweDUwOTljZjlkLCAweDk0ZGE3NjZmLCAweDRlNDA2YjI3LCAweDc5NjY0OWZlLCAweDY0NjhjNjAzLAorCTB4Yzk2N2VkMWEsIDB4YjcxYzRlZTcsIDB4ODRlYTE0ZDMsIDB4NjhmNjBmZjUsIDB4ZWFjOWJlYjEsIDB4ZGJmNDA0NWYsCisJMHgyOWZhZWI3OCwgMHgwZDYwODc5OCwgMHhkNTFlODAxNSwgMHhkMDA4YmFiOSwgMHhhMGJlZGQzMSwgMHhmMmU4YzUxZiwKKwkweDRmMjM4ODExLCAweDI1OTdjZTBiLCAweDc2NzExN2QwLCAweDYzZjAzNGNkLCAweDg1YzViZWUxLCAweGNlMmFkYzdlLAorCTB4MTUyOWUzMWYsIDB4MmIyMjMyOWMsIDB4MzQ5MTdjNzQsIDB4ZjliY2U3NmMsIDB4YmMzMmQ5ZTcsIDB4YzY4ZmY2MTQsCisJMHhkNWVlZmNjOCwgMHhlYzA0Y2Q3MywgMHhmNDQ4ZjI1YywgMHhmOGZjMDZiMCwgMHg3YjAxMDhhZSwgMHhjMjU3YjliOCwKKwkweDVmMGI5YTcxLCAweGU1ZmVjM2QwLCAweGRmYzY1ZWVlLCAweGEwZGZiZTAxLCAweDc4YzJjYmY4LCAweGVkYzJjYjk0LAorCTB4Njc0NjBlODEsIDB4MWM3ODcyMjQsIDB4YjY3OWY5ZTAsIDB4NzZkMDg0OWUsIDB4NDI1NzdlMzEsIDB4YzA3OTMzOTYsCisJMHhmOGYzZDNmYiwgMHgzN2Y3MzM0MywgMHhmNTg4NGQ1MSwgMHhjZWMyNWNhYiwgMHg1YjhlYTE1OCwgMHg0OWQ3NzFmMCwKKwkweGYwMTZhZjExLCAweGZjYTkyYzVhLCAweGMzZDllMmU0LCAweDE4M2M0ZmJmLCAweDFiZmMwZTlkLCAweDdlMDVmNGE1LAorCTB4Y2NkMjBkYTcsIDB4ZjNhNzVlN2IsIDB4YzkzNjUwZGIsIDB4OWI5OGE2MDMsIDB4MDRiNjkzOTIsIDB4YTQ1MjUzZGUsCisJMHhmYmVkMmY3OCwgMHgwZGQwM2E2NCwgMHhhZmM4MjFhOSwgMHhkYTk1N2QyZCwgMHhlYjhiMmI2NiwgMHhhNThjNWU2MCwKKwkweDUzZWEwN2I1LCAweGZkNDQyYWVmLCAweDU5OTM3MTBjLCAweDFjYjNmZGY0LCAweGU2NTY2OWFmLCAweDA4YWY3M2M3LAorCTB4MzQxYzQwZTYsIDB4OWVlZmEwZjEsIDB4MmJmYzYxZDcsIDB4NGQ4N2U4Y2MsIDB4NzM2MzZiYTUsIDB4ZjgyNTczZTIsCisJMHhmOGE0ZGNiZCwgMHg3NzY3ZTgwMCwgMHhmMDAyNTJhZCwgMHhjNDFmNzg4OCwgMHgwZDE2NjcwYiwgMHgzZDM4ZTNlNywKKwkweDdkMmI3NzkyLCAweDk4Mzk3NmVlLCAweDZhNDBjZWRmLCAweDFmNzg1ZTAwLCAweDFmYzcwZWIyLCAweGUzMDc5ZmMxLAorCTB4OWUwZjdjNDIsIDB4MzJjMmQyZTcsIDB4YzBjOWZmZmEsIDB4ZWZiOGVkOTYsIDB4NDgzZTYwMzcsIDB4ZWYxYmRmNmQsCisJMHgzNWFkZmU4MCwgMHhjNzhjNWU5MiwgMHhkNTJkZDljNiwgMHgwMmJlYjc4OSwgMHhmNjc4M2ZmNCwgMHgwMTg3OTZkNCwKKwkweDdhZjZkYmFlLCAweGNlMjVlZjMwLCAweDliZmViOTFlLCAweGIzM2YzZWNjLCAweDNmMDBhMmRkLCAweDliNzJlNTZjLAorCTB4MjdjODhmZGEsIDB4M2Y2YzVkYzEsIDB4MWU0NzZmMTksIDB4MjdmN2E5NzUsIDB4ZGRhZmU1NDMsIDB4MDVmMDY0OGUsCisJMHgwYjNjYjNiNywgMHg3YzAzZGYyMSwgMHg3MGQ4MzdmZiwgMHhkN2Y0MDEzZSwgMHgxM2MxMGRiZiwgMHg4ZGIyMGY5NywKKwkweDhmZjQ4M2U3LCAweGU2ZjIwZjllLCAweGU4MTA0YjBlLCAweDA5YWY3Y2UxLCAweDhmMzI5MmZkLCAweDQ1YjU5ZDdiLAorCTB4NzUyNDAwMWYsIDB4MDFjZjBlMzgsIDB4NzI1ODFiNzksIDB4Y2ExYWU3ZTYsIDB4OGIwZjcyN2YsIDB4OGYxMmM5MjMsCisJMHg0YjRhZmQzMywgMHg2YmNjNWM1OCwgMHg4MDhiZmYwNywgMHg3NzRjNzY1YiwgMHgzZTQwOGI3YiwgMHg3MTM3NzliMiwKKwkweGIzOTM1MWJmLCAweDJlZjE2MTQwLCAweDk0ZDQzNzk2LCAweDdiMDAyZTEwLCAweDg3YWU1NWVhLCAweDVlMmNjYzlhLAorCTB4ODdkMGU4MzUsIDB4MjZhMzVkNjEsIDB4MTg1ZDFmZmYsIDB4OTNkZjYyZDcsIDB4ZDg5NDFhNWYsIDB4ODg0ZjU2YjgsCisJMHgwYTI3NzVkOSwgMHg5ZDNkNjEzNSwgMHgwN2Q4MGY2NywgMHg1OWFiNmViMCwgMHg5ZjI4NmI3YywgMHhjN2ExYmY2MCwKKwkweDU4OTBlMmMwLCAweDQxY2NlYzFlLCAweGUyMmY1OTM5LCAweDNmOTlmYjU2LCAweGE3Yzc5ZWFlLCAweGY0NWFjYzRlLAorCTB4NzQ1Y2E0MGMsIDB4YjAzNWFkNDgsIDB4YWFiMGJiM2YsIDB4MGZlOGZkMTIsIDB4OWYxMzM5M2MsIDB4N2VkNTJiZjUsCisJMHhhN2UwNDVmZiwgMHgyMzhlMWJjZiwgMHgxZDdiZmYwYiwgMHhiZDk5ZThmMSwgMHhkNDQ3ZWMzYywgMHg1OTQ1ZmI1MCwKKwkweGJlODE1NzI5LCAweDE1ZjYyMWNjLCAweDIwOTVmZjIwLCAweGU5YWJhZDVkLCAweGMxM2U4M2IzLCAweDEyMzQ5NzY4LAorCTB4YTc3MjM5ZDgsIDB4ZmJlYjBjY2IsIDB4ZjUwNjg3NjgsIDB4ZTM0M2IwNTQsIDB4Y2YwMjc2ODUsIDB4OGZjY2M5MzksCisJMHhmMzMyNGQ3NCwgMHgwYWE1ZDA2YiwgMHhkOWUyMzhjMSwgMHgwNzcxZTNhMSwgMHhhMjcyZGZkZSwgMHgyMzUzYzMwOSwKKwkweDc2YTNlN2IxLCAweDdkMzQ2NmI5LCAweGQwZWJmYTJkLCAweDRmYzExYWI1LCAweGEwZDRjZDE3LCAweGRlODJmYmRmLAorCTB4YzZmZDE3M2IsIDB4NzkwMjAyY2UsIDB4ZDZiNjFkNTQsIDB4MWVhYzM1OTUsIDB4Mjk4MmU3NzksIDB4ZWJmYWMzZWEsCisJMHgxMjQ4NjY2NCwgMHgzM2YyMDljNSwgMHhjYmU3OTkzNSwgMHg2MTZkZTFjNSwgMHgxZjFjYmE5NywgMHhhOTBjNjk4ZiwKKwkweDNmYzRmNWNiLCAweGM1OGYyZDIxLCAweGE3ZGY2MjBmLCAweDc1ZjkzMzI2LCAweGM3MGU1NTYxLCAweGUzZjMwN2I3LAorCTB4Njc5N2ZjYzQsIDB4MzI2OWJjMzAsIDB4YjMzNzMzZDksIDB4NDFkMDJlNmEsIDB4NzM5N2M0MmUsIDB4YWJmY2M5ZTAsCisJMHg3ZjA4MjY3NCwgMHgwOTJlNzVlZSwgMHhkZTBlMjNlOSwgMHg4MGRhMzAwZSwgMHgzYzU5M2FiZSwgMHgzZjg1NmZmNCwKKwkweGU0Y2FlZTFlLCAweGJjMWZhZTE0LCAweGQ2NWY4ODZlLCAweDhmMThmNWRiLCAweDQ5M2Y1Y2JlLCAweDBlNWFiMjVkLAorCTB4ZmViZjk1MGQsIDB4MjdkYjJjZmQsIDB4OWU3OTZhNzUsIDB4NTBlNTFkOGQsIDB4ZTVjZDlkOWQsIDB4MTFkOWU0ODQsCisJMHg2YTU2Zjc4NiwgMHgzYTNjYzAyZiwgMHgzZjYwMjViNSwgMHg4YWQ1YmI0YywgMHg2ZmQ5NjhmMywgMHhmMzcwM2Y0MiwKKwkweGQwMmM4MWIyLCAweDAzNTUyZGUzLCAweDg5YjcxMDA1LCAweDJiNDAyZmM3LCAweGRiNDVmOTBiLCAweGZlZThiOWQ1LAorCTB4ZDg4NGVjMDMsIDB4NGI1ZjNjNzYsIDB4ZmVmNTY3MWQsIDB4ZjYwY2I5MjAsIDB4YmY3NjI3MzksIDB4Yjc2YWZhMDEsCisJMHhmZDE1ZjUwOSwgMHhmMDA2MDNiZiwgMHg4MzljYmNiMywgMHgzNjg3Y2NmNiwgMHgwYmI0MWI3ZiwgMHg5ZTViYzM5OCwKKwkweDg1YmIwMWNkLCAweGZkY2Q0ZGQ5LCAweDBiYjAxZTg2LCAweGUyNjIzYWViLCAweGQ1OWZmMDdjLCAweDU5MWZiOGVhLAorCTB4M2JmZjQ0ZTksIDB4NmZiZjU2ZTksIDB4ZGRmNzE0ZDgsIDB4MTc2MDM4ODgsIDB4YmQzYWYzYWUsIDB4M2JmMDIyN2YsCisJMHg3Zjk4M2JkNSwgMHg4MzUxYjY3MCwgMHg1YWY1MDM3OSwgMHhiNzkwMjJjZiwgMHg3YjZhNGQ2NywgMHhhZDhkYWNmYywKKwkweDc1YTE5NmQ3LCAweGI1YmRhMGY2LCAweGY2NzVjYzY1LCAweGQ3M2FjMDE0LCAweGI2M2Y4ODZiLCAweDY3NTg2NjlmLAorCTB4N2M0ZGJlYmEsIDB4NzhiZWNmOWQsIDB4ZjNhYzAxNzUsIDB4MmVhZmJiYzcsIDB4YTc1ZTc1ODAsIDB4ZGYwMmYyZWIsCisJMHg1YmZjMzliNCwgMHgyN2JmNjk5MywgMHgzZGExZjA2ZiwgMHgyZjU4ZjIyNSwgMHgyNGY3MWU5NywgMHg0MzJiZmRhYiwKKwkweGZmMjFmZmU1LCAweDMwZmE1OGNhLCAweDVhODcwNDNjLCAweDRhZjRiYTFmLCAweDNhODNjODA2LCAweGQ1YmZlMWEzLAorCTB4YWEzN2YwOGIsIDB4NDA2OGNmMWYsIDB4M2ZmZWM3N2YsIDB4MDc2NmJhN2YsIDB4MmQ3ZTgxYzgsIDB4YmZhMjIzZGEsCisJMHgwZjNmYjJmZCwgMHhlZmZkYTFlYywgMHg2OTQxM2RiOCwgMHhiOTFiZmVlYywgMHgyNDZkZDg1ZiwgMHg4OGFiZjA0MSwKKwkweDI3YjA4MDdkLCAweDViZjFlNWUzLCAweDI1MWYzZTdjLCAweGJiMDA2ZjdiLCAweDhkZmFjYmU2LCAweDYzM2JmODFiLAorCTB4ZTc2NjUzZTgsIDB4Y2MzYzkzNmUsIDB4N2U4YmRjNmYsIDB4ZjM3ZDk2ZTQsIDB4M2UyN2UwZWQsIDB4ZTM3ZTYyMWQsCisJMHhkMThiMTc5NiwgMHg3YTE4ZGM2ZiwgMHg2NTc5MGMyZCwgMHhjM2IyNWZhNCwgMHhkYjcxYTNmZSwgMHgwN2M4MDRiMSwKKwkweGJhNWNmYjEwLCAweDhjOTMzZGFmLCAweGVmZGVhOGY0LCAweDQ4OWQwZTllLCAweDBhMDFmYzgwLCAweDcxZTgyNTc3LAorCTB4MDdhYTJiOGIsIDB4ZmJhMTZmYmEsIDB4NmMyM2M4M2QsIDB4YTE4N2EzOTEsIDB4YzExNzE2ZGYsIDB4M2VkMjk3M2MsCisJMHhjNDRmZmVmNSwgMHhmNGZhMzc3OSwgMHhmNjM3NzcyOCwgMHhkNzkwMjE0YiwgMHg0ZTdmN2EyOSwgMHg5MjM1ZTgwNiwKKwkweDIwNzhjNzYxLCAweGM5OGJiM2U3LCAweGIyOTRkNGRlLCAweGY3YmFmOGQ4LCAweGUxZTRlNGYzLCAweDBkODFiMDdjLAorCTB4MDNiZjQ4ODksIDB4ODNiNWUyM2EsIDB4ZTM2MGRiM2MsIDB4Zjk0NjRjZjIsIDB4OGU0ZGM3ZjYsIDB4NjMwZmNiMTAsCisJMHg2MjE4ZmZlZCwgMHhjOGEzNDI3NiwgMHg1ODQ5OTMwYiwgMHg2OGI1ZWJhNiwgMHg1ODVkZjdiNiwgMHhlMWY3OTA2ZiwKKwkweDViMWY3OTM4LCAweGJiZmI3MTE2LCAweDUyZjUxODQ5LCAweGNhMTgxOTMzLCAweDE3NmQ4YjBmLCAweDc4ODdkNzFmLAorCTB4ZDIxZmFhYjgsIDB4MWY4MGFjNWEsIDB4MDdhYjRlZWMsIDB4YjhmODgxZTAsIDB4ZjZjODNlYmEsIDB4OTYxZjk0ZWIsCisJMHhhZmQzMGM5NiwgMHhiZjQxMDc1OCwgMHgxZDBmZGMyZCwgMHgwOGZlMzg2OCwgMHg0ZmEwNmZkMCwgMHhkNzdkODNiMiwKKwkweGRiZjQ2MWU0LCAweDkwNWJmNzQ0LCAweGVmY2YxYjQ3LCAweDM3OWQ1N2E0LCAweDk3ZmYxNjNhLCAweGQxZjVhOGE2LAorCTB4ZTRlZmY5NTAsIDB4NDUzZWJkNWYsIDB4ZmU2MmY3Y2QsIDB4MzQzZjZmYzIsIDB4ZjE4OTdlY2YsIDB4ZTJiY2RjNjUsCisJMHhmZWYxYTlmNywgMHhiY2NmYjE3NiwgMHgyNzM4Nzk1YywgMHg4NzBmMmQ0NSwgMHg3OTY3N2ZjYSwgMHgyZWI0Mzc1OCwKKwkweDFkNTBmMmYxLCAweGU1OWJmOGNmLCAweDVjNzBmZmUxLCAweDRmN2Q5OWUzLCAweDAzYmVjMDI3LCAweGE3ZDg3OGVjLAorCTB4NjNhZWRjYWMsIDB4ZmQxNDEzZjksIDB4ZTllMmYxYjEsIDB4YzU5N2FiNWEsIDB4NWVhMmI1NGYsIDB4YTY1Nzg3MWQsCisJMHhlMzNjMzhmMywgMHhkNDVlZDdlYiwgMHhmMzM1YmFlMiwgMHgzZWYzNzEzOCwgMHgzNjlhMDc5YiwgMHg5YzYzMTc1OCwKKwkweGJhN2UzZTM2LCAweDBlOWVlYzg0LCAweDQ3MWYxNTRiLCAweGNlN2UwMjZkLCAweDc1M2M3NGJiLCAweDhmOGIwYTc1LAorCTB4MjA3MjU4NTIsIDB4NmYzZTIxNmYsIDB4YTdlYjM1ZWIsIDB4NzU5OGZlNDksIDB4MWJhMjJhYWYsIDB4ZGJlODUxODIsCisJMHgzMzg5MDcyOCwgMHgxNGM2ZmRlNiwgMHhjNmJmNTc2NiwgMHg3YWRjOGJmMywgMHhhZDYwOGU3NiwgMHhmZDg1ZTJjZCwKKwkweGYyYzM1YjhjLCAweGYyZTA3ZTlmLCAweDE4YmM4MjZkLCAweGZhZjFjMmEzLCAweDQzNDRlZGYyLCAweGFlOGNmMmYxLAorCTB4YjA0YWU1MTcsIDB4MzkwMWVhZDksIDB4YTIzN2ZjMjgsIDB4NWUzYzhiZmYsIDB4M2ZmYWQ5NzEsIDB4ZmNmN2RlOGUsCisJMHgzYzdiZDMwZiwgMHhmMThiZjY3ZSwgMHhkZGI4ZDZmZSwgMHgxNTFiOGE3YSwgMHhlM2E0MTA1ZiwgMHhjYTVmMTAyMywKKwkweDYzYmY0OTE5LCAweDFkMTYzM2Y1LCAweDFkZjE0ZDFmLCAweGZlNzY2MTQ5LCAweGI4NTdjYzE0LCAweDI5NjMzOTRjLAorCTB4M2YwMDllOGQsIDB4NTA2M2Q5MTEsIDB4N2UwOWFmYzAsIDB4YWI4ZmQ0MTIsIDB4YWEzZTc4ZDMsIDB4ZTYyNjdjYTcsCisJMHgyNTczYjM2OSwgMHg1OGNlMWNlMiwgMHg0MzA3ZTQ3NiwgMHhjOGVjYzNlYiwgMHg5ZjVjYzYwZiwgMHhkZTQ3NjcyZiwKKwkweDA4N2RmMGVlLCAweGQyYjI3Njc0LCAweDFlMDFlNzhiLCAweDYxZjg1MWI1LCAweDYxOWNmODdmLCAweGUyMmU3M2Q0LAorCTB4ZmNhNWM2M2MsIDB4ZDFjNDVmMmQsIDB4NGJmZjE3ZDUsIDB4M2E5MmQ0NzIsIDB4NzVmOTVkOTYsIDB4MTNjZmQxY2IsCisJMHg3NjNhN2ZjMCwgMHhmZjllNDEzZiwgMHg0NWJjNDExOSwgMHg2YjY0NDlmNywgMHgxMDNiNWY4YywgMHgxOTdiZjk2MSwKKwkweGZlZjE1ZTFjLCAweGExYmVmODNmLCAweDk5OWJkNTIxLCAweGZjN2ZkZjRhLCAweDEyNDhkMWFlLCAweDY1MmU5ZWE5LAorCTB4NjdjNWIxNzIsIDB4NGI0MmI4YzUsIDB4Njk3ZmNiMmYsIDB4OGU1MDQ2NTksIDB4YjRkZjgwYjcsIDB4MzM4OWZjMDgsCisJMHg0ZjdkZDgwOSwgMHgyMDEzZmQzYSwgMHhmN2QxZWU4ZiwgMHgyMjZkNDFhYywgMHgxMTY3ZGJmOCwgMHhiZGNlZjNiMCwKKwkweDljMzNjYWNiLCAweDY3OThjOWZlLCAweGUzMDA2Y2I3LCAweGNlYjNkZDE4LCAweGY5NTYxZTYwLCAweDUyM2U5ZjE3LAorCTB4YTJmMDhhNTMsIDB4NTA2NWMxM2YsIDB4M2RiOTY3OWYsIDB4ZjEzM2M5OTUsIDB4NmY4NDNkOWMsIDB4M2ZmM2ZhMmYsCisJMHhkYWY5NjA2ZSwgMHgwZWQ3OTcwMSwgMHgwZmUxMDk3ZSwgMHg4YzExMjhiNywgMHg2MWVjYjQyYiwgMHg5NmI5NWJjNiwKKwkweDMwZmM4N2NkLCAweDY1YTllOTAzLCAweGY4MzE2NTRmLCAweGE5YWY0OTRkLCAweGYyZGRlYzE4LCAweGRmNzE1YmRmLAorCTB4ZTk4M2YxZjcsIDB4Y2ZiMTI3OTgsIDB4N2MwMmFmZTUsIDB4Mzc0MzRhZDgsIDB4NGQ5YTdkODEsIDB4ZjdiYjAxYzcsCisJMHgxNTM3ZGRlMywgMHhmZTQyZGMwMywgMHgzOWJmMDNhZCwgMHg0ZDlkN2YxZCwgMHg0NjI3MTdlZCwgMHg2NGJmNzc5NiwKKwkweDMzZWUyNjQ3LCAweDVhZmVhYzliLCAweDEzM2FmZjk4LCAweDlkYjgyMzgzLCAweGZlZTE0ZjlmLCAweDE3ZmU3OGYyLAorCTB4ZDVhYTlmN2MsIDB4ZGZhOTM4ZTAsIDB4NWM5YzYyMzUsIDB4M2E3NTg1YzgsIDB4MGRlNjM3ZTIsIDB4OWUxMjkzY2IsCisJMHhmMTcwMTg2NywgMHg5OWZlYzczYywgMHg5Nzg1NGYyYywgMHhiZTc1MmVhZCwgMHgzN2M5NDdlNywgMHgyNTNjMDA5NCwKKwkweDhiNTdmMmE5LCAweGU0NDc1OTY3LCAweGIyYTQ5NDBiLCAweDVjZWE5Njc4LCAweGIzMjJlNWEyLCAweDdhZWQ3M2E3LAorCTB4NGFkYjI3YTQsIDB4OTQ1NGUyYzIsIDB4YmZhZWMwOWUsIDB4MDY5OTFhMzYsIDB4YmJmMmJjZTcsIDB4OWUwMmQ3YzMsCisJMHgyMGQ0NWZmNywgMHg0Nzk5ZTQ5ZSwgMHgyODkzM2UzMCwgMHg1NmYyZjFiMSwgMHgwMDRlNzQwZiwgMHhhZGZkOGM3ZiwKKwkweDk1NDk2MGViLCAweGEwMTU3YjJlLCAweGVmYTc0OWY0LCAweGZmZTQ1NDgxLCAweGFmMTg0MmQ2LCAweDJjNzQ1ZmVhLAorCTB4MDU5ZjcyYmYsIDB4NTlkZDBjZmQsIDB4Nzk1Zjk4NGQsIDB4ZWE4MzNkZWUsIDB4MzNmYzRlN2MsIDB4M2U2MDU2NDgsCisJMHg2ZmRmNmU2NSwgMHhkYjYwNGUzMSwgMHgyNzlhOGQyMywgMHgxNWFhNDRmYiwgMHgxODI1YTZmOSwgMHgzNjM5OGU5OSwKKwkweGNlNTBiYWQ3LCAweDFmN2VmYmNhLCAweGVlNDNiYjA0LCAweDkxMDI0MTk0LCAweDAzNTc5ZDBlLCAweGNiODJkM2U3LAorCTB4YzdmNWZhMDksIDB4YjAzNWRiNzcsIDB4M2YzY2Q5NWUsIDB4N2ZmZjcwNjYsIDB4YmVlM2YxNGUsIDB4NDIwNWM0NDUsCisJMHgzNzQ5YmYyYywgMHhjN2VjMDhmMCwgMHhkZjAzZTVlNCwgMHhlYzdhYzIwYywgMHhjMDVhNjg3MSwgMHhiNjhiYWE3ZiwKKwkweDlmNjVkZmEwLCAweGQ5YWNmZDA1LCAweGJlMmI3OTdkLCAweDJiZDljYjQxLCAweDFiMDcxOGVkLCAweDZjZWVlNTdjLAorCTB4ZjNhN2U3Y2MsIDB4M2NjYTNmMWMsIDB4Zjk2NTRhMWYsIDB4OGIzZWYyNDgsIDB4ZmM5OWY0MDYsIDB4YThjMGYxMDQsCisJMHgwYWE1MjNiMiwgMHg5NjhhN2VlMSwgMHgwN2RmM2Y2OSwgMHg4ZTFlNGE3YSwgMHgwYTNmODI5YiwgMHhhYTQzNTRmNCwKKwkweGNkZDAwNzdmLCAweGE1YTRiOWQwLCAweDg5MmU3NjY2LCAweDJkYjVhNzlmLCAweDljMTc2ZjdkLCAweGZkYzJkOWY3LAorCTB4NGZmNzA3YjksIDB4YmZmZTg1OWUsIDB4NzU4MjU5NGUsIDB4Zjk2MGUwYjgsIDB4YjJhNDJmOTUsIDB4ZmM0OGUyNzgsCisJMHhkNjNjYzQxZiwgMHg2NWJmN2RkYywgMHgwMmUyOGQ3YSwgMHg4Yzc1OTdmYSwgMHg1NzRlZTQ1ZSwgMHg1ZjE5ZjgwZiwKKwkweGRlNjNmMDQ5LCAweDYxMWQ3NWVlLCAweGVjY2RjNjJkLCAweGEzNWM3ZjI3LCAweGQ2NzdlY2M0LCAweGIyZDMzZDMzLAorCTB4ZTNjZmVkOTMsIDB4ZDI5NzM3ZjcsIDB4OTIxZWJmMmYsIDB4MGNiZjRjMzMsIDB4NzY0ZWZmOTUsIDB4ZjRlMmVmY2IsCisJMHg2ZmJjZGZjYSwgMHg1ZWZkZWEyMSwgMHhiZjEyZmRiYywgMHg4ZjYxMWJiZiwgMHg5NjM3ZjVjNywgMHg1MGYyMjMxZCwKKwkweDYxYzc4NmFhLCAweGQ4NGRiNGY2LCAweDllNTU0MTQ5LCAweDlmOTU5NTRlLCAweGZiYWEzNDNiLCAweDQ3NjQ5ZjVmLAorCTB4M2I3OTEwN2EsIDB4NzJjYWVkMjksIDB4ZmU4ZmRiYzgsIDB4NGVkZmEwODgsIDB4M2M4OTE1ZTQsIDB4Y2IxNTYwYTIsCisJMHg4YzZhMDlmNywgMHg0ZGQxMmU3OCwgMHg2ODdmMzBiYSwgMHgxMjRiMDkxYywgMHhmMDA2ZDdmYSwgMHhlNDJhNmRmYywKKwkweDRmZWZkMTExLCAweGZmNjJlNmE0LCAweGE1Njc4OTliLCAweDIyYTZlNTE2LCAweGM4MjZmYzAxLCAweGI4MDI0OTNmLAorCTB4YzExNjFiNDMsIDB4NzE1OWI3NzgsIDB4OWZlNDEzM2MsIDB4MDMzZWUxMjQsIDB4YzdkZDM5ZjksIDB4MzVhNzU2ZjIsCisJMHgzYTQzYjhiMCwgMHg0ZTUwY2ZkNSwgMHg2OTc0NjdjZiwgMHgzY2M3YWI5YSwgMHgyMjU3OTE1NiwgMHg1ZTA0NGZmMiwKKwkweGQzYmUzOGFhLCAweDAxY2EyYzI3LCAweDU0ZjIyOGI5LCAweGU1M2Q5OWQ2LCAweDM5YzExNzYwLCAweDFjYmYzODY4LAorCTB4YmNmMzM0NmMsIDB4Nzc2ZmQ2MTMsIDB4NGY5ZTJlNjMsIDB4Mjk3OWIyZmUsIDB4ZjkxNjc4ZjEsIDB4N2Y0NGZhMjksCisJMHhlNDZjYmJhNiwgMHgzNzQxNjczOSwgMHg3MDg5ZWIzMSwgMHhlY2M3ZGM2ZCwgMHgzZDA2YWFmYywgMHg3MWIwNjNjZSwKKwkweDA3MmJmYTA2LCAweGVjMDQzNTFiLCAweDAzN2VhYTgxLCAweGYxYjhjM2EzLCAweDkzZDVjZTM2LCAweDg3MmJmNDMwLAorCTB4MDU0ZjIwNGMsIDB4Y2VjYTVjM2QsIDB4MDg1YmViYTUsIDB4NmQ4M2UwZmUsIDB4NTI0ZWYzM2IsIDB4ZDZkNDNmZGUsCisJMHg5MzQxY2Y4YiwgMHgxMmJkYWJkNCwgMHgwM2NlYTFjZiwgMHhiNDhkZjVjOSwgMHgxYWY5NWFmYywgMHg2Njg5YjdjOCwKKwkweDZhODQ5NDQ5LCAweDk2ZmFhZmQzLCAweDYwYzRmNTRjLCAweDI4N2RmNDcyLCAweDdiZTFiZWRmLCAweGJhM2UzY2FjLAorCTB4OWJlZGEyNDUsIDB4ZWQ2MjNlZDMsIDB4YTlkMzM2ODEsIDB4ZWZmZjVlZDgsIDB4NTdlYjQxYjUsIDB4MjY3ZjdmZDAsCisJMHgzNTFjZjlmMSwgMHhlYmY0NjRlZSwgMHgzZjQxMTIzYywgMHhhNTdmZDcxMiwgMHhhZGJhM2U0YywgMHhkYzlmYjQ3YSwKKwkweDU0OTUxZjNjLCAweDg4NTRmY2YzLCAweDdiNzJkMGY4LCAweGVmYzYzMTVhLCAweDEzZDk0NGFkLCAweDAzMGNmYTgxLAorCTB4ZTMwODI3YjMsIDB4Y2NmMWY2ODcsIDB4ZjRlNDZkNmYsIDB4YmY4NDMyNDAsIDB4ZjIwODIwNmEsIDB4ODFjNzNkYWUsCisJMHhlN2M5MGZkZiwgMHhmMzEwODYzZCwgMHg4ZmYxYjE5YiwgMHg5ZTA1NzhiZSwgMHhiNjc5MTI0YiwgMHg2NzMzZDg4NCwKKwkweDM2Zjk4MTVmLCAweDEzNWFmMmFhLCAweGRiMjlhNzNmLCAweDdiYmNlMTMzLCAweGMxZGI4ZWJiLCAweGU2YzQ3Y2JjLAorCTB4MDRmMzg4NWYsIDB4ZGRmNmE0YmUsIDB4NTA3ZTFiZDEsIDB4NzY3NGZjMDQsIDB4NDFmMzBmZWYsIDB4YTdhOGRkY2UsCisJMHhlNDUxODRmYiwgMHg5MzNhNTk1YSwgMHhlYjNhODM2YiwgMHhiNzdlODk0YSwgMHgwMTZmZTZjNiwgMHgzMmM3N2MzYSwKKwkweDMxMWMzYTZmLCAweGE5NTQ5YjlhLCAweGMxYmMwMDc3LCAweGQ3ODBiNGU3LCAweDhlMjc0ZTY0LCAweDQ3M2UwY2Q5LAorCTB4M2M4MjRmYjUsIDB4MWIxMzc2ZDQsIDB4N2IyZmQ5MzcsIDB4N2Y4NDVjZjEsIDB4ODUxYjc0YjYsIDB4ZjI2MjVkYmIsCisJMHg4ODk0N2U5YiwgMHg5MmExNTU3NiwgMHgyNmM4NzEwOCwgMHhjYjU1ZWU3ZSwgMHhjYjk2ODhlNSwgMHgxYjZlN2Y5MSwKKwkweGMxYTk5N2M4LCAweDEzZWY0ZDc4LCAweDdmZTdiMDVhLCAweGJmZTJlM2NiLCAweDlmOWY1MWNkLCAweGI4MzM3MWU4LAorCTB4NTY5NjczYzUsIDB4Y2ZlODAyYjksIDB4NTIzYWFiYTUsIDB4YWI0MGU5NGIsIDB4ZmQ3MDg0ZjcsIDB4MzcxODZkMzIsCisJMHg3NzJiNjAzZSwgMHhhNWVmZDAwZiwgMHg0Mjk1MWZlYywgMHhlNjdiNzczZSwgMHhiZTIxNGE4ZiwgMHhkYzdhNzVhNywKKwkweDhmNzI5OGJlLCAweDM1N2ZkMTliLCAweDU5YmMwM2I0LCAweGVmYzE0YjVhLCAweDk3ZjViNWZiLCAweGZhMmJmYjQ4LAorCTB4ZjUwZGZkZjIsIDB4MzU3MDYwNjMsIDB4NzA1OWEzMTksIDB4OTM1OWZlNmUsIDB4ZmZhYzNiN2YsIDB4MzBjN2Y5ODUsCisJMHhmYTQwZmMyZSwgMHhhZjIxZjdkMSwgMHhkMThlYThlMywgMHhlNzkzMzA1ZCwgMHg2OWVlOTNlMywgMHgwZWVlOTQwOSwKKwkweDVlNzgzOWU3LCAweDFlYmY4YjBhLCAweGE4ZmNjMDllLCAweGZjYjE3ZTU0LCAweGU2MTI4OWQxLCAweDY2Y2VkNjIxLAorCTB4MjY2ZjYyZTcsIDB4ZmEwMThlOTEsIDB4Njg1OTNhM2QsIDB4MWM4YWY0ZmQsIDB4Nzk2YjdmYjQsIDB4NzdmNGM4OWUsCisJMHg3ZWIwMDk3YywgMHhjYThmNmZkMywgMHhiMmM3ZjcyMCwgMHhlYjc0NmVlNywgMHgzZTE4ODE5NCwgMHg5NzUxNDliZSwKKwkweDk3NTQyZTZmLCAweDk3NTFlNWJmLCAweDk3ZjE1ZGJmLCAweDkzNjViMTA5LCAweGU4MTA3YmQ5LCAweGRmODk1NWY1LAorCTB4YjEwZDcxNDcsIDB4YTRiYTdmMjMsIDB4OTM1ZGQ4MjAsIDB4ZTdlNzRhNWYsIDB4ZTUzZTU5ODksIDB4ZjE3ZWY5NGYsCisJMHhmNTgyMGFhNSwgMHg1YjhkM2IyOSwgMHhmZGNmNTA4ZCwgMHgzZjVlNWFlZiwgMHhkOThjNGRkOSwgMHhlYTA3YzQ0ZSwKKwkweGYzYzRhOGU5LCAweDkzMTg1ZDMyLCAweGIxZWY3YjIyLCAweDZkMzQzZjMzLCAweGVjZmRhN2FiLCAweDFmMjBhZjlkLAorCTB4ZTQzNTU4YTcsIDB4YTVlYmMwOWIsIDB4MDRjM2I0NDYsIDB4Mjg5YmI0NWYsIDB4OTYzYzUzN2QsIDB4ODE5YTMzOGYsCisJMHg5ZTc1ZGJkZSwgMHhkNjk3ZDBmNSwgMHgyZjQwNTA2YywgMHhiMTE4MjY1NywgMHhjODNmZWQ2ZiwgMHg5Yjk2ZDdhOCwKKwkweGNiNGVjNDBjLCAweDYzMzcxZjA3LCAweDNlMjY1Y2I5LCAweDIwYTEyM2M4LCAweDUxZTc4NmNlLCAweDBhZDQyNzlkLAorCTB4NjBlZGE1ZjMsIDB4MTYwZWVkYmUsIDB4ZWI5NmQ3NTcsIDB4N2VkM2NmNTEsIDB4M2UwZjVkNzEsIDB4OWMxMTA5YTEsCisJMHhmOThjYTU3ZiwgMHhjMTY2MWNhNiwgMHg3YzI0NzQ3NywgMHg2YmU3MzRmZiwgMHg1MTg0ODZhZCwgMHg3YmIzYTU4ZSwKKwkweGZlZDEwZTM5LCAweGJmODNkZmExLCAweGRmYTBmNmQyLCAweDEzYjk1MGFlLCAweDI3MWJjZmVhLCAweGMwYThiOWUwLAorCTB4NTkyZjc5ZDAsIDB4ZGExNWMwMDMsIDB4NjdlODdjYjksIDB4M2YwNGYyZTcsIDB4YTU0MmY5MGIsIDB4ODUyYmJlNWUsCisJMHhmODE0OTAzMCwgMHgwNTNiMDUwZiwgMHhmYjgyMDRlYywgMHhjY2I3MTEwMCwgMHhkOTdhOGEzNCwgMHgwZGE2ZmQwYiwKKwkweGUwZTc2N2I1LCAweDU2OTk3ODUyLCAweDYwMjUzNTg1LCAweDI3ZjFiY2E3LCAweGU0YjFjM2EwLCAweDkzMWE2MTQ1LAorCTB4ZTQyOWUyMTMsIDB4YzNjMzE2YzUsIDB4MTlhZjZhNDcsIDB4ZWYwYTNkNmQsIDB4OWIwY2YyYzcsIDB4ODRjN2FkOWQsCisJMHhhZDRiZTAwYywgMHhlODA2NDI3OSwgMHg0Nzg3NzZjZCwgMHgwYjk0YzVmMSwgMHhhZTZhNzZlOSwgMHhkYjQ1ZjAxMywKKwkweDM1YWRmMmQxLCAweDE4ZTVmMmM3LCAweGM2OTg1NGZkLCAweGU3NmQwMGU0LCAweDFlZjBhMjRkLCAweGMwMTkyOTM0LAorCTB4ZGI4Y2EzYmYsIDB4N2NiNWM2Y2MsIDB4ZTliYWUzYmQsIDB4NDFkZGI0YjgsIDB4YjY5NzFkMWIsIDB4ODQzMjY2ZGIsCisJMHg4ZGEzMDkzNSwgMHg3OGMwYTE1ZiwgMHhhMjk3MWE5NywgMHg4MzNmOTExZCwgMHg5M2E1MDNhZiwgMHgwZWMxZjgyMCwKKwkweGFmNDgzNGRhLCAweGYyYmU3ODMzLCAweDFlMzY2NGMxLCAweGZmZTc1NDI5LCAweGY4ZTk5YmU0LCAweGNlYTY1Zjk4LAorCTB4ZGE1MWI5ZjcsIDB4ZmE3YTAxZDQsIDB4NTZjMjUzNjksIDB4MzgzN2NmYTAsIDB4ZmNiNjFjZGQsIDB4NjlkODNlNDMsCisJMHgzODJiY2M2ZiwgMHg3MTI2NzI4NCwgMHhkMTEwMDc3OSwgMHhmMjhiZDIwYywgMHgwYmMxYzg0NiwgMHhhMWNhYzc2OSwKKwkweDhkZTFlNTRjLCAweDBmZGU3NDY5LCAweDA3OWQxZWU0LCAweDNjNzIxZjlkLCAweGE1ZjY4ZjlkLCAweDU2OTM1YmQ5LAorCTB4NDE3ZTEyMzYsIDB4YTA2ZTAyOWYsIDB4MjE4YmUwNTMsIDB4NWY4MzhkM2EsIDB4YTViOTFiZDAsIDB4MzcyNTEzMTcsCisJMHg5ZTE3M2I1MywgMHhhNDI1ZWVjMiwgMHgyYmM1ZTU5NSwgMHhhM2YzYzM5OSwgMHhkOGRkM2U0NCwgMHgxOGQxZTZjYSwKKwkweDc0NmZiODQ0LCAweGU2ZjMxOGZjLCAweGZmZTcxOGVlLCAweGY3MzVjMDFlLCAweGJlZjA0ZmNhLCAweDNmOWVlMjIyLAorCTB4MTQ3N2Y2MDEsIDB4Yzk2OTc5ZGUsIDB4YzZmMDdiZmYsIDB4Y2E5N2Y5ZGIsIDB4Y2Y4YjFmMGYsIDB4YWNkMmY4YzUsCisJMHgxZTFmOTg5ZCwgMHg3Y2M1NmQ5OCwgMHgzZjNjNjlmMSwgMHhjMWEwZDAzNiwgMHgwZmRkMDBiOCwgMHg4NWEyM2VlMiwKKwkweDk3MjA0MzE4LCAweDVjYmI3MmE3LCAweDQ1Nzg1YjljLCAweGUwZDZmZTYyLCAweDdkNDUwNjhiLCAweGRlN2M1MTNmLAorCTB4ZTk3OTgyYjgsIDB4YmYyYzY1YzEsIDB4NmY3ZWM4N2MsIDB4MWY3ZWQwNTYsIDB4OWNmYzczZDIsIDB4OTMzMTc3NDQsCisJMHgyOGY3ZGRlZCwgMHhlNjg5ZmJlYSwgMHg0NGZkZjUxMywgMHg3MTIxZWQwYiwgMHgzMjk0OGE2ZiwgMHhkZGRmYmY5YywKKwkweGJiZmU5MDQzLCAweDlmNThiOTZkLCAweDg4ZmE2NWFlLCAweGEzZTk4MzdjLCAweGJhYTIxY2VlLCAweDM5OWQ2OTFmLAorCTB4OTRmMzExMzQsIDB4NDZjMTVlNzgsIDB4NmZmODNmYzgsIDB4OWE3ZTBiZjIsIDB4YzJmY2E5MjYsIDB4YzlhZmU1NDMsCisJMHhmMGU2ZGMyZiwgMHg1YjNhMDJlZiwgMHg5MmNkZTQ1OCwgMHhlYmQ2M2QyOCwgMHhkMjk4N2Y5OSwgMHg4MTA4YTZlYiwKKwkweDdjZDZjNTc0LCAweDQ0ZGRhN2Q4LCAweGU0ZDJkZjVhLCAweDAyZmViZDIxLCAweGE1MzI3NWU5LCAweGJkMTUzY2Q3LAorCTB4MTVmYzYxZWUsIDB4ZTgyZDIxNDQsIDB4MGI0ZTg4NzUsIDB4ZmQwMGYzZTMsIDB4NmVkYzYwZmIsIDB4NWJlZmVmNDcsCisJMHg2ZmQzNWY2MCwgMHg2ODNjYjBmMCwgMHgyZjE5ZDc5NiwgMHg1OWUwNjIxZiwgMHg1Yzc4MzMyMCwgMHhmM2MyMmQ1YSwKKwkweDBmMTNmNDNhLCAweDRkZjBlNWNmLCAweDEyYTY5ZDJjLCAweGYxNjMxZmM2LCAweDgyNGNhYTRmLCAweGZlNjE5MmI2LAorCTB4NmZmZDk5MzEsIDB4N2M0M2I4YzEsIDB4Y2ZkYjA4ZjQsIDB4NmI1YjgwOGUsIDB4NzM5YTdhNDUsIDB4MDU3ZjhiMDcsCisJMHg4MDJlY2MyYywgMHgxZDFhNTgzOCwgMHg3ZjFmMjY3ZiwgMHhkYWFmYTc0ZSwgMHg0YTY2ZWQwMSwgMHhmYTYxMGYwYywKKwkweDE2N2Y4NTBmLCAweGRmZDk5ZmFmLCAweGIzNzA3OThjLCAweDYzYzc3NWFhLCAweDJmMjEyMGVkLCAweDJlNmRkYzQ1LAorCTB4N2RhYjdmNmYsIDB4ZDJmMjBlYTYsIDB4ZTNhYWQ3NjcsIDB4NjRlZjczNWQsIDB4YjMzOWI2ZjEsIDB4MjVjY2ZkZDUsCisJMHg3Y2MxM2ZhYiwgMHgwM2FhZDI0ZCwgMHg1M2JkY2RmYywgMHhkYTQ5ZmY1ZCwgMHgwMjZjOWM1MCwgMHg3MTBlYzljNCwKKwkweGU1MjBkMDNmLCAweGQ3YTNlMDEzLCAweGJhNmYxNzkzLCAweDg0ZjlkMjg3LCAweDgwOTUxNDlmLCAweDk0ODZmMGRmLAorCTB4ZDA0ZjZkYzYsIDB4MjcxYmIzZjIsIDB4OTRmNWY5NjEsIDB4MjhmZjdlZWYsIDB4YzAyOTZmZDQsIDB4ZTI1YzM1NzIsCisJMHhlMDU2ZmIwNCwgMHg4NTY3Y2E0MywgMHhjOGNjNzdlNSwgMHhjMjdkMDA0OSwgMHhlMDg3YmRmYiwgMHhkZmQ5Yjc3YiwKKwkweDczYjY5MzNkLCAweDNjYzVjOTRmLCAweGQ3ZWU2YWQ2LCAweGVhYzg1YzE4LCAweGM2ZDJiZTZmLCAweDUyZWY5NTUyLAorCTB4NmQ1YzVmZDAsIDB4MWQzNWY3NjYsIDB4MDRiYjdlMjksIDB4NzNhYmFhZjIsIDB4ZDVlNGI5NzksIDB4MjQzZTUwNDksCisJMHgzYWY3ODI3ZCwgMHhjYWI2NmI5YywgMHhlOTJkMGViMCwgMHhiOTNlY2ZjYywgMHhhNDRmMGE1MCwgMHhmMjc2YTk3OCwKKwkweGJjZDk5YmZlLCAweDRiOWU0YjZhLCAweGFlYTkzZTA3LCAweGY2NGNmZDYyLCAweDQxZTY3NjU0LCAweDJjNzljZDNiLAorCTB4MjYzNzRiOWYsIDB4YmYwNWZlMDAsIDB4OTU3ZGYwZTUsIDB4NWM3ZDJiYjAsIDB4M2RlNGJjNGUsIDB4ZmI0NDkxZDYsCisJMHgwZjI1MTlmNSwgMHg3MTU3ZDE0YywgMHg2NjRiZGQ4YywgMHg3ZDAzZTc2NSwgMHhmYzE5MWNkZSwgMHgyY2JjZDNmNCwKKwkweGI4Y2FiNmVmLCAweGUxZTQwZDNjLCAweDI5N2Q3ZTJkLCAweDJjNmVjYmNjLCAweDExNzkwNDNlLCAweDY1OTUxNTg5LAorCTB4MjQ2ZGE3OTgsIDB4ZmU5NGJlYjgsIDB4M2YwM2E3YzcsIDB4NTY0OWZkNWUsIDB4NTU5ZDEwMDIsIDB4YmU4MmZmNGQsCisJMHhhZmJhMGE2NiwgMHhlNTM3ZDM1NiwgMHg2NWU5YzlkYiwgMHgyYWRmOTY5NywgMHhkMzBkMzZmYSwgMHgzZWY2NThmNywKKwkweGUxMDJhYjg1LCAweGFmNWE4NmZhLCAweGM3MTM4ZDBkLCAweDhlZTNmMTlmLCAweDJmZTAzNzI1LCAweGMzMGVmZTU2LAorCTB4OTg3YzhiZDcsIDB4Nzk4ZGQ5MDEsIDB4ODI1ZGE3YzAsIDB4MzgwMjZmNGYsIDB4OWUwODlhZjQsIDB4M2M5NmNhOGYsCisJMHg3MTgwZjA5MywgMHg3YTg4Yzc4NSwgMHgwNTVmOGUyZiwgMHgzM2UwOTk3YywgMHgxNzA5MTkyZiwgMHg2ZWMyYzlmYywKKwkweGYwMmU3ZjY1LCAweDdhZjA2NGEzLCAweDM4OTc5ZGZhLCAweGUzYTJlMTg3LCAweDdhMGU5MWRmLCAweGNmMDYxMWZjLAorCTB4Yzk5NWE5NjYsIDB4MTEyZmJlMTksIDB4MzExNjk3ZmUsIDB4N2NmNTNlZGYsIDB4MWVlY2NkY2IsIDB4Y2JmODM3MDMsCisJMHgzYzUyNzYzMCwgMHhjYmVlMDg2OSwgMHg5ZjMxMDc1OCwgMHhiM2U3ZDcwMCwgMHg5ZTliM2U4ZCwgMHg0NzM2ZWRjZSwKKwkweGVkY2ZkMjNkLCAweDI4M2FhMzU0LCAweGZmNzRjMjVlLCAweGQ0MWU3MDBmLCAweDdlYzFmNzA0LCAweDYyZjEyMTZmLAorCTB4NDdkMjljZmMsIDB4NmVjNjNkMjAsIDB4ZTNjNmYwMTIsIDB4YjkwYzY1YTksIDB4Nzg5ZjNmMWEsIDB4NWJhZjBjZmMsCisJMHhlMjllMGQyNCwgMHg3Y2QwZTFmYywgMHhmMTllNzMyZiwgMHhhZjRiOGFmNiwgMHhiOTNhNWJmNiwgMHhlYzM5ZDE3ZiwKKwkweGZhODQyYzRmLCAweGEwZjY2MjVhLCAweGUxMjNkMTNmLCAweGRhOTZhZjdlLCAweDZiYTcyMDFmLCAweDcxZmEwODZiLAorCTB4ZmEwZDU2OWMsIDB4MzIxZDg1MTMsIDB4ZmY1YzlmMTYsIDB4NmFiNzI2NGQsIDB4ZjczZjA4OWIsIDB4NGYxN2U2YzgsCisJMHhlMDY0YTk4ZiwgMHgxYWQ2Nzg3ZSwgMHg4MDBiMGQ5NSwgMHhhYWFjMWJmZiwgMHg1NmI1MDY3MywgMHg0ZTc4OGYxNiwKKwkweDUwMzIxMWM4LCAweGE4N2Y3YTA2LCAweDBmZWY0MjNjLCAweDhhMWM4MTk0LCAweGY2YWU3ZmJmLCAweDNiN2JmMzIyLAorCTB4YWNmODRhMmYsIDB4MDMyYjFjZjUsIDB4MTlhY2VmYmQsIDB4NTY3OTAzMjgsIDB4MTRmZWY3NjcsIDB4MTNkYzU1ZDYsCisJMHhiZGNmOGYxOSwgMHg5NzkxMWFlOSwgMHgxYTc0NTk3MiwgMHgwZTIyNDdjZiwgMHg3ZmU2YzQ3YSwgMHgzZmM2M2QzOSwKKwkweGEwOGE1Njc1LCAweGNiYjU3NTlmLCAweGNmZTdlN2NlLCAweGQ4NzY3YTAxLCAweGVmYzEyYTczLCAweGFhZDhkYjM0LAorCTB4ZDEzOGJiMDMsIDB4Y2U5MDNmZTEsIDB4NWYxN2U4ZTQsIDB4OWExN2U2YzAsIDB4NTZkZTNjNTIsIDB4NjY1ODdmZWQsCisJMHhlZTFlMjJjMywgMHg4MWI4NzhlNSwgMHg5YmYzZDllYiwgMHhhOTBmYjhiNCwgMHgwZDNlMTZmNiwgMHg5YmMwYTBhMSwKKwkweGJlNDIxMjNhLCAweDE0N2VhMmY1LCAweGE3OWRjNmY3LCAweGRhMTg1NTA2LCAweDdkNDM2ZjNmLCAweGY1NTdmOGJiLAorCTB4YjA5YjI3MTgsIDB4MTg5NDQzNWUsIDB4NjQzMTM5N2QsIDB4MzI3ZmRkNTYsIDB4NTU1M2E3NzksIDB4NWQzN2EyYmUsCisJMHhiZWNhZmVkNSwgMHg3MTdkNTU1YywgMHhmZWFhOTI3OCwgMHg1NDRiMzdhYSwgMHg1NGM4YjJlNSwgMHhkZmFiZmI1NSwKKwkweGFmOTU1MmE5LCAweDZhYTE5ODE5LCAweDNkZjQwM2JmLCAweDRlMzdlM2M1LCAweGZmYmQ1MmNmLCAweDM3ZjRlMzY4LAorCTB4NWQ3ZDNlMjEsIDB4ZWZhYTNiZjQsIDB4MDQzZjcwNGYsIDB4ODUyMzdhMDksIDB4MDQwYmZlNzQsIDB4NTNhYzVlYmQsCisJMHg5YWNkNGY3ZCwgMHg3YzBlNTRiMCwgMHhhYzE2ZmVjZiwgMHg5NWY3Nzk2NiwgMHhmZGIxNjMxNCwgMHhkYjUyZWMyZCwKKwkweDI4OTAzNzEzLCAweDg0YjYyYmU2LCAweDQwOTg0ZjI0LCAweGJlYmE5ZGRlLCAweGYxMDdhZmIxLCAweDBmN2JhOTdhLAorCTB4NmJlNmI4MjYsIDB4YzY5NzU0YzAsIDB4MjI2MzNiNTEsIDB4MGQ1YzgyMjAsIDB4ZjE2MzgzNzksIDB4YmZkNmE1ZmIsCisJMHhhOTdmZTQ4MCwgMHhkNWI4MzdmNSwgMHhkNDUyNmZlYiwgMHg1NDI5NmZlYiwgMHhhM2NkYmZhZiwgMHgwYWM0ZmY1ZSwKKwkweGJjM2JmYWY1LCAweGFhNGZmNWVhLCAweGIyN2ZhZjUxLCAweGE5ZmViZDRmLCAweDlmZWJkNTczLCAweGZmYWY1N2U2LAorCTB4YmFmNTA2YjgsIDB4ZDdhYWI2NjcsIDB4N2FhOTdiM2IsIDB4NGI4MjczNWQsIDB4NzRmMWY1NTQsIDB4Yzg0OWU4MjAsCisJMHhmNzk1YmNjZiwgMHhhNDUzZGJhYSwgMHg0MmU4NjI2OCwgMHg1ZjAyZDlkMCwgMHg4ZDYzZTYwMywgMHgzNTQ4N2FlZiwKKwkweDRjN2QzYzVlLCAweGY0OGYzYzIwLCAweGU1NDdkMjJiLCAweDcyN2Y2ZTM4LCAweGE5N2FhMGJhLCAweGRhMzI1YzZhLAorCTB4NzNjMDM3MTksIDB4ZmY2ZTA0ZWUsIDB4MzNiNzQ2ZmIsIDB4ZDU4YWZjODQsIDB4ZTZmYmIxZWIsIDB4MDhkYWU0YjEsCisJMHhkMWY3YzU3ZCwgMHhkODJiZWE2MywgMHhmNzg2OWI0NywgMHhlZmQxNjNkMSwgMHg1OWVhODRiYiwgMHhmYTM1N2MxYywKKwkweDMzYjBlZWNmLCAweDk5OWEwZTM4LCAweDU0MjlmZjNkLCAweGQxZGI0MzVkLCAweGRlMTQxNTM2LCAweDc0M2U2MTc3LAorCTB4OTNjZDc3ZmMsIDB4MWRmMjBmZDEsIDB4NzE4M2FiZDIsIDB4N2MxMTI0ZWYsIDB4N2M1MTIzY2UsIDB4NzU1ZDg5ZmEsCisJMHhmMTAxNjViZSwgMHg2NDVmYjllOSwgMHhjOWE5ZTAwOSwgMHg3YTBlNTAzOCwgMHhhM2ZjYzJmZiwgMHhlZTdjNjNlZiwKKwkweGRkNjVkMjQ4LCAweGUyMWM3MjA3LCAweDM5MDllMzNmLCAweDQ5YzllNWM1LCAweGYyZDEwMzg4LCAweDI3ZjcxMzM5LAorCTB4OGFlMjg5N2EsIDB4ZWUyOWU3YzEsIDB4MjY5YmFjZjcsIDB4NWEyNTllYTEsIDB4ZDViMWU2MzMsIDB4OWVhMTJlZGQsCisJMHhmNjBmZmJhYSwgMHhmNGM3MWY2YywgMHg1MmU3ODhkYSwgMHg2ZTJlZDc4MSwgMHhhMTNiMzAxZiwgMHg2MmRkMGUwZiwKKwkweGFkZjg5MGZjLCAweGVjN2E4ZjY4LCAweDNmYjRkZWIwLCAweDQ3Zjk4NzE2LCAweGRiYjE3Zjc2LCAweDI1ZGNlMGM4LAorCTB4ODljMmI5MTEsIDB4ZGQ3MTA2YzcsIDB4N2NlMWZkNjEsIDB4ZTBjOGRiOWIsIDB4NDYyM2E1ZGIsIDB4ZTI2NGVmYzAsCisJMHgzMWYwZmI0NywgMHhkNjNjOGE5OSwgMHhlZmQ2MjRlZiwgMHgxN2YwNWNkMSwgMHg3ZTZmY2Q5YSwgMHhhOWYyMWFhYiwKKwkweGY0NzJlMGU1LCAweGE4OGY3ZmRmLCAweGI2NzdmN2ZkLCAweGZmYmZlODRhLCAweDNlOWI4NTFlLCAweDFiOGY3NmRkLAorCTB4ZWYyOGIyZjQsIDB4MWUyMWI4MDIsIDB4ZmJlOGVkMDAsIDB4MDRhYjc3NTQsIDB4YWRhZmIxZmUsIDB4YjEwZjNkYmYsCisJMHhiZmIyNWY3NiwgMHg4MzA4N2VhMSwgMHgzZDYwZmUwYiwgMHg4MzM2N2Y4NSwgMHhkMjgxYjdkMiwgMHgxMWVmYjZjYiwKKwkweGZiYzYxZmY0LCAweGE5NjljNzZiLCAweDMxZmM4MTA2LCAweGMwOTdiYjFkLCAweGZiNjdhZjJkLCAweGJiMWVjM2UyLAorCTB4NzQ0NGNmY2EsIDB4N2E0NzM4MGUsIDB4ZjIwZTdiMjksIDB4OWNjNTRmYmUsIDB4MzQ3NGEwZDMsIDB4MWZiYWZkZWEsCisJMHhhNDdjYjA2NSwgMHg0NGM4YjZmNiwgMHhlMzllNGI4OCwgMHhkYjg3ZDc3MSwgMHg1NmIyYzRkZSwgMHgyNjVlNjBmNiwKKwkweDg4ZTVmN2RjLCAweGEyZWY1ZWY5LCAweDRlNzIzMWY1LCAweDYzZWZkMmI2LCAweGVhY2U4ZGU0LCAweDFlNmJjYmMzLAorCTB4YmM2MDhiNjksIDB4MjVlZmM3NTMsIDB4NWVlMzM0N2IsIDB4YmZjNjNmYmIsIDB4NmUzOGNlZjIsIDB4YzQ4MzE5MjcsCisJMHg2OWI4NDI5ZSwgMHg0ZjRlZmY0ZiwgMHg1YTNmNDAyMywgMHg3NjJhN2NiYiwgMHhkMzcwNmQxZiwgMHhlZWY1NjJmZSwKKwkweDFiMTI2NGM1LCAweGY2ZDk1ODdmLCAweDg4ZmRjMjBlLCAweDY3NDNmN2U0LCAweDM2MTI3Yzg2LCAweDY0MWI3YzUxLAorCTB4ZGY0ZDAzMzgsIDB4ZTUxMWI4NmYsIDB4YWY3NmRlYWYsIDB4MWFhMWVlMDcsIDB4YjcwNjdmMGIsIDB4N2U1NjIxN2MsCisJMHhkZjhlMzg3ZSwgMHhlN2U1YzVjZiwgMHhjOWQxNmQ5MywgMHhkYjdiNGUzMCwgMHg1ZDZmMGE4MCwgMHhmZGYxMTc2ZCwKKwkweGM0NTIzNjlhLCAweDdhYzQzZmVhLCAweGY0ODI4ZDRkLCAweDQyZDI4YTczLCAweGYyN2FlMjA0LCAweGMxZmMwZDgwLAorCTB4MTAyNjNlZDQsIDB4OGRiOWQ2N2YsIDB4YjgzMDZmMTgsIDB4YTJlNGJjMTgsIDB4OWU2M2U5MGIsIDB4M2UwMGMxOWQsCisJMHgxZjRhNGNiZiwgMHhlMWQ1MmZlZiwgMHg0Y2JlZmFmZSwgMHhlZmJmYjYyYiwgMHg3ODBmZTMzNywgMHgyOWVhZGYyOSwKKwkweGMzN2ZiNDFhLCAweDYxYzc4NjdjLCAweGY5NzNkM2Y4LCAweDBmYmY2NDQ5LCAweDVkM2U4MGU0LCAweGQzODUzOGM2LAorCTB4ZjFkNzBiM2UsIDB4ZjAyN2Y2Y2IsIDB4Y2MxMTM3YWUsIDB4NWE2N2Q2NDcsIDB4NWNiODVlZDEsIDB4NmExOWRkMzgsCisJMHg4ZmUzYzdiYywgMHhmZmU1MDllMiwgMHhmNzRmMWM3ZCwgMHg5M2ZjYzgzZCwgMHhmMDRmZGRmNywgMHg0YTU5MDUzYywKKwkweGU5ODdjYWZmLCAweDg3OTcxYzZhLCAweGNmODdjNGE5LCAweDA4MmEzNmFlLCAweDQ2NWViMDBkLCAweGVkNDA5ZmUyLAorCTB4OGQ4YmQyMTEsIDB4ODJhN2UwNGQsIDB4ODBlY2FmN2EsIDB4YWEyNzg4ZDQsIDB4YjllMTMzNWQsIDB4MTc2NGUyYTYsCisJMHg2YmRhZTNiMCwgMHgxM2MwOGIzZiwgMHgyZjgwMTE2MiwgMHhjMTA5MDM3YiwgMHhhYjk4YmM1NSwgMHhmODc3Yzc0MCwKKwkweGQ3ODEzOTU5LCAweGU1NjVjYzI3LCAweGU4OWY1ZTQ0LCAweGVmNGNlNTYzLCAweDAwMzU1MjBiLCAweGNiNDcxNzE2LAorCTB4Y2E2ZjNhYjQsIDB4ODBiYzc5MDcsIDB4ZmNmMTczYjAsIDB4ODRjZDhkN2UsIDB4NzNhYjBiY2IsIDB4ZGZkNDM1NjYsCisJMHg4YjljZjA0OSwgMHhhZjA5ZmZhOCwgMHg1ZjFlYjM0ZiwgMHg2MzdhMDc5OSwgMHgwZGZiZmFiNiwgMHhkNmE5MGYxYywKKwkweDMwZDM1ZGUzLCAweDE3YWVhNmRlLCAweGViNjRhY2YxLCAweGZiZjEzN2Y5LCAweDUzZmQ3NTIyLCAweGY1OWI3YmZjLAorCTB4ZDQxYTY0N2MsIDB4N2ZjN2FiZTcsIDB4YWM1YmQ3OWMsIDB4Y2E4ZGVmMmMsIDB4MDM3Zjc2N2UsIDB4ZDc4YzdmYWYsCisJMHhjNjFlYTA5YiwgMHg1YWY1NjQyZiwgMHg2ZjA5ZGY3MSwgMHgxOGUxYzlkNywgMHg0MzFlMzNlMiwgMHhiZjMzMjYwYywKKwkweDIzMzY5NmYyLCAweGJmM2M1N2YyLCAweDczZjcwN2RkLCAweDliZjMwZDk1LCAweGY1MTkyOTdkLCAweDMyZmI4NmRlLAorCTB4NTA0OWRjOTgsIDB4NTFkZWJjMDYsIDB4NzdhOGEyZTQsIDB4MzdjYzY1ZGEsIDB4NDhmNWJhZDAsIDB4OTcyYjA2NGYsCisJMHg4NzFmOWMyNywgMHhlYWQ0ODllNCwgMHhlNGM2NDQ2MSwgMHg5YWU4YTVmNCwgMHg5MDA1ZjAxMiwgMHgwZmY0NTk2YiwKKwkweGZiZTMzYWU4LCAweDkxOGZlMjFhLCAweDY2NGRlOTczLCAweDgzZTU4ZmUyLCAweDM5NTU0ZTA1LCAweDU1NzRjZWU1LAorCTB4NWNlY2Q3N2IsIDB4NzRiNWJkNTUsIDB4Y2M5ZWFhOTIsIDB4ZGM5ZjIyNzYsIDB4NWNjYmU5Y2IsIDB4MTdhYWEyNTQsCisJMHg2ZDkwNjVmNywgMHhiNTlkOWRiYywgMHg1NTRmZTVkMywgMHhhODVmM2JiNSwgMHg5ZjhkMDIyNCwgMHhhM2RjNDliYSwKKwkweDdjODIzMWU2LCAweDliOTZkN2I4LCAweGIzZjhmYzBhLCAweDRlNDQwYWI2LCAweGY2MjdlNTNiLCAweDFiYTdmM2I0LAorCTB4NTRmYTU5OGMsIDB4Y2IxMGI5NzgsIDB4N2U1ODNiY2YsIDB4ODc5YjdiN2YsIDB4OWUwODczOTUsIDB4YWI2ZjZmYWYsCisJMHhjYTJlZjJjMSwgMHg2OWZjZjA5ZiwgMHhkYjlmMTc5YiwgMHhjZmExNTk2OSwgMHgyYmZkYTQ3ZiwgMHhkYTFlOWZiNCwKKwkweGExOWY5NDNmLCAweDMzNzNjM2ZkLCAweDNmOWUxZmVkLCAweGZkNDNmZGExLCAweDk0MmZkYTA2LCAweGMxNzBhNjlmLAorCTB4MGZkYTI5ZjMsIDB4ZWQzMWZmYmMsIDB4YjQ0ZmNhMWYsIDB4YjZiY2IwZjksIDB4MWY5NjJlNmQsIDB4ZjNlM2YzNmYsCisJMHg3YzA2YjZiMSwgMHg4YWQ2ZDlkZiwgMHg5NmRiNDdlNSwgMHhiNmUxZjNlMiwgMHhkYmRiM2UyMCwgMHgyZjdkNjI1NiwKKwkweGY5ZTc5M2E3LCAweDJiZTdkYzc5LCAweGYxMDNiZGQ5LCAweDIxOWZkZmViLCAweDlkMmZiYjYxLCAweDE1NGE1MzlmLAorCTB4M2YyYWI5N2EsIDB4ZmMwMzNmYTcsIDB4ZmNlYWJkMDIsIDB4YzIxZmMwNTQsIDB4OGM3ODYyNjEsIDB4MDY2OGUzODcsCisJMHg5MTI3MGZiMywgMHg5MzBiNzJjOCwgMHgxZjA3MTgxZiwgMHg2MTU5ZTdkZiwgMHhhZTM1ZmNhMSwgMHg0ZTdiYWQ5NSwKKwkweGQzZWIxNDVmLCAweDQ3NzhkODFhLCAweDVjNDA5ZGI5LCAweGNlNTE5MjQxLCAweGJiNDM5YjhlLCAweGNhYTQ1MjczLAorCTB4ZDAwN2YyYzIsIDB4MTRkYzQzMGYsIDB4NWFlY2U1M2YsIDB4MjFlNjQ2NzIsIDB4NTcyNWMwMGQsIDB4MzMxZTNkNTAsCisJMHgzOTdjMjFhZiwgMHhiNzgwOWMxOCwgMHg1N2ZkZTBkMSwgMHg2OTZkMzc4ZSwgMHhhNzVmYmIyZiwgMHg2YzBjMmJhNiwKKwkweGUyYjZmNjY2LCAweGI5YzYzYWZkLCAweDlmNGNiMGJlLCAweGVmMWY5ZjJlLCAweDcxNzQ5OGU5LCAweDUyMjRkZDNhLAorCTB4OWJmMTc2ZjksIDB4OGNjZmExNDQsIDB4MzFmZWY1MjYsIDB4NmE4OTQxN2QsIDB4YjhiZGE2N2YsIDB4ZDE1NzI4ODYsCisJMHhmYmQ0OGI3ZSwgMHhiZGZlNzMzYywgMHgxOThjZWZhYSwgMHhmNWVhYTkwZiwgMHhmYWFhMTVhZSwgMHgxZTczYmJiYSwKKwkweGM3M2UwMzcxLCAweDYxOTliOGIxLCAweDIxMDI3MmY1LCAweDRmZGQ4NWU0LCAweDRjZTY1YzIwLCAweDkyNzM4ZjM2LAorCTB4NjA1ZjdlYzIsIDB4MTMzZGZmMzcsIDB4ZDY3OTdmYmUsIDB4NWM2NWYxY2UsIDB4MDlmMmZiOGQsIDB4NDgyYzU2MGUsCisJMHgwZjQwNmEwYywgMHg0NDhiZmM3ZCwgMHg5ZTNiN2Y5NCwgMHg3ZTlmYTBkMSwgMHg0MDY5MDkyMiwgMHhlNmE2NGNkZSwKKwkweDAxNWZkNDI0LCAweGYxNmI4YzM3LCAweDk0MmQyNmFhLCAweDg1YTI4OThiLCAweDhhMjQ1NWYyLCAweDdmYmEzYWZiLAorCTB4ZjVkMjY0ZDEsIDB4OWZmYWQxNmIsIDB4ZDlmMmQxMzEsIDB4MmNiM2ZmNGMsIDB4ZmE4YzMwYmYsIDB4NjdhZjgwYmEsCisJMHhhZGM3ZDg4MSwgMHhkY2ZkZTM5NywgMHgzN2Y0NGNjNiwgMHg3NjI1Y2ZhOSwgMHg4NzRiZmRmMCwgMHg5NzBkZjk4OSwKKwkweGMxNTNjYTNiLCAweDQ2MzczZTBlLCAweDdkY2RhODNlLCAweDE0MDU4ZGUyLCAweDYzYjRiNmRmLCAweDFmZWYxNGY4LAorCTB4OWVhMzM0NTcsIDB4OTRjYmNmZDcsIDB4Zjc1ZTVhYmUsIDB4ZDQ0ZmFhN2EsIDB4ZjMwNzkzN2MsIDB4Y2ZmYTViMzgsCisJMHg2Yjc2ZTAyOSwgMHhmZjIyOGZjOSwgMHgzYzg0ZTg3NCwgMHg5ZTQxMTI1MywgMHg4OTNkOTcwZCwgMHgzYjFlNjYyNCwKKwkweDkzYzlkZWRhLCAweDExZmEyMTUxLCAweDM3NWYzMjZmLCAweDRmZjk1ZjMxLCAweDRiYzg3Njk1LCAweGQxNzllMDJjLAorCTB4ZjJkMmRiM2IsIDB4N2YwZmM3YWIsIDB4NTA3NGUzZWYsIDB4YTAzNTIyNDgsIDB4MzQ4YjBiNWYsIDB4ZTA3NDEwOWUsCisJMHgzMWZjYWJiNSwgMHgyZjJlZmNhNiwgMHg0YjkzMGI5YywgMHhmMmM0MDc4OCwgMHhmNzg1ZDI0NCwgMHhkNTdmYzgyOSwKKwkweDdjOWEzZTYyLCAweDUwYTIxYWYwLCAweDBkNmFkOGZiLCAweDcwZDE2MDkzLCAweDc1ZmI4NGJmLCAweGZjZTVjZmJlLAorCTB4OWM2YWY2NjcsIDB4ZWMyNTljOGYsIDB4NzRlODBmMjYsIDB4MWJkNTk5ZjIsIDB4YWNmYzNhMDEsIDB4ZjRkOGM3NWIsCisJMHhkMGJlYmFiOCwgMHgyZGVmNTA0YSwgMHgxNDg3ZDQyYSwgMHhlYmNiZWUwOSwgMHhlNTQwN2JjMiwgMHhjOGM5MTIyZCwKKwkweGI5YTYzODAxLCAweGRmN2U4M2U3LCAweGI2M2E0MTZiLCAweDlmYzcyZmFjLCAweGUzNTliODMwLCAweDBlZmM0MGFmLAorCTB4YzIzNTdiMjgsIDB4OWFlZGEyZTgsIDB4ODJiN2ViMjcsIDB4ZjAwMTM5M2QsIDB4ZGNiYzA1NjIsIDB4NDMwZDVmOTEsCisJMHgxZTIyMTdlNywgMHgyZjc5ZjIxNywgMHhjOGU4ZjNlNCwgMHg4MzNmYzIxYywgMHg3MGJjNzg4NywgMHg2ZWEyZWYxZiwKKwkweGNmNTI4ZmUxLCAweGFhZDJmMWYzLCAweGEyYmRjMzZmLCAweGZmMmQxMWVkLCAweDNlMzUyMjk5LCAweDUzMjJlOTU3LAorCTB4NzBjMzRiZTYsIDB4NjYxNzM4NTEsIDB4YjgwMTVjODIsIDB4ZDgwZjgyYWYsIDB4OTE5ZjlhZmMsIDB4OTQxY2M2YzgsCisJMHg2ZjY4MzU2YiwgMHgzZjMwNjk5NCwgMHg5YjJlOWUzZCwgMHg4ZmRjOTkzMiwgMHg3ZGQ5ZDg2NiwgMHg0ODUzZWVlNCwKKwkweDkzZTVjM2NmLCAweGMyNDgyYzZmLCAweDViYjMzM2ZkLCAweDhmY2IzMjZjLCAweDU4OTU3YWY0LCAweGUxMmFmN2JmLAorCTB4NzJlN2U0NWYsIDB4YTFkZTFjY2MsIDB4YjEyNzA1N2IsIDB4ODkyYjYwYmMsIDB4YjRiYzg3YWMsIDB4MmJmNWY2YjEsCisJMHhkYzcwNzMzMiwgMHhiNTNkN2RlMSwgMHhhNTNmMjA1ZCwgMHg1Yzc5ODhjYywgMHhhMTNlNDRhYiwgMHg2OTk5NTQ3MiwKKwkweDU3Mzg0ZjYzLCAweGZhNzRlNDY1LCAweGY3OWQ0ZGE4LCAweDZmY2Y5ZGIzLCAweDQxOGY1ZjNiLCAweGYyN2JjOGEzLAorCTB4OWNjNzE2ZDYsIDB4YWZlYmE5ZjMsIDB4ODg5NjNmNDcsIDB4ZmY3MjBlZDMsIDB4MWQ1OWEwZTEsIDB4YTRlNDZkNTcsCisJMHhhYmE4NzgzMCwgMHhjMWYxMGNjYSwgMHg2ZGE3MTYyZSwgMHhkZDk5YmZlYywgMHhjN2VmYmI2YiwgMHhlZDMwMmY3OCwKKwkweGE4N2EwMTUzLCAweDU3ZWJlZGU3LCAweDBiNThmZGFhLCAweDVmOTFmYTc3LCAweGYxNjRmZGUzLCAweDM5OGEzMTdlLAorCTB4ZTMxZmVjM2QsIDB4MzM1YjYyZmQsIDB4NDNjMjdlZjksIDB4N2IwZTIxOGEsIDB4NjFkZTc1NjIsIDB4NzI3N2VjMzMsCisJMHgxZjBmOWUwOCwgMHhlZjAxN2RhNywgMHg4MWJiYTZkZCwgMHg5NzRmYjgyZSwgMHhhM2ZiYjExNCwgMHg1NGZmZDdlMiwKKwkweGIyZjExZTk2LCAweDc4ZWZhYzUzLCAweDNiYTVkYTJiLCAweGQ4MWM5OGNiLCAweDJkZmNlMDc5LCAweDJiM2Y2OWUzLAorCTB4ZjlkNTI0NzMsIDB4M2EzOTk1ODAsIDB4MjliN2E3NWMsIDB4OTdiM2MzN2QsIDB4ZWVkMTlhOTAsIDB4YTk5NDNiMjksCisJMHhlZjcyNmFmOSwgMHhjMWVmZjU1YSwgMHgxYzBkZjczNCwgMHhmZjI4MjhiNiwgMHgxZmJhMDM1ZSwgMHg0Mjc5ZmMzYywKKwkweDE0NTFmMjExLCAweDA4YzRiZjdmLCAweGMxOTkzMGMyLCAweDc2YjNlNzBkLCAweDE3OTkzZTZiLCAweDY3NmYwZjRiLAorCTB4MzZmZjU4Y2EsIDB4MGQyZjhiYTcsIDB4YWUxYWI1NTcsIDB4YTU2ZjQ1YjMsIDB4ZmQ3MDYwY2MsIDB4YjljNmU0MGUsCisJMHg1ODk0ZjFmMCwgMHhiNWMwNDY3YiwgMHgwM2RmOGM3YiwgMHhlMmFiZjBmOCwgMHgxZmFkNDJhOSwgMHhmYTc0ZjA2MiwKKwkweDZlZDNjM2JmLCAweGZjZjBlOGZkLCAweGIzZjNjMzk1LCAweDliNWVlYzQzLCAweDUxNWZmNTkxLCAweGUxYWI3NTlmLAorCTB4NjQ3Y2ZiM2QsIDB4MGE0OTg4MGUsIDB4N2YxMTVmZWYsIDB4MTgyOTkzZWUsIDB4ZWJmOGU2MTMsIDB4NTlmNGU1MmQsCisJMHgwNzhmZTVjYSwgMHhjMDkxNTBjZiwgMHgxZTYzNTc3YiwgMHg5MjRjYWY2NiwgMHhiZTVjYTE2YSwgMHgyY2Y3N2YwMCwKKwkweDAyYzNlZjkzLCAweGJmOWUzZjFhLCAweDQ2MTllZjIxLCAweDY0ZDc3Zjk1LCAweDlkZGViYTMxLCAweDg3OGE4ZDJlLAorCTB4Y2YzNjJjZDIsIDB4YjJlYTQ3MDMsIDB4ZDhmMWJmYzEsIDB4NzIwMjA2M2IsIDB4YmZjZjMzNjEsIDB4NmJkZWNjN2UsCisJMHgwNWE2N2I4NCwgMHg0MjVjYTExZSwgMHg3NDdkMDE5ZiwgMHhjN2JjMjgxMSwgMHgyYTMzM2Y0YSwgMHhkM2M2NTFkNiwKKwkweGM2ZDZmMWIwLCAweDRmMTg4ZGYxLCAweDE1NjRhNzNjLCAweDNhNTU3YjMyLCAweDM4NzM4NWE0LCAweDBiN2RhZjZiLAorCTB4NWI1YjdmZWYsIDB4ZmRlY2EzMmEsIDB4MWQ1ZmY4ZDIsIDB4NWJmMGZmODcsIDB4N2EzMGI3MjksIDB4ZTE0NTkyOTksCisJMHg5MGZlOTE2YiwgMHgwZTVhNmRmMCwgMHgyYTdmZDE0OCwgMHhiZDE1N2M4MiwgMHhhMDFmZTcxZiwgMHg0NjkxZWM3OCwKKwkweDhiMmQyOWUyLCAweDlmOTg4YmQxLCAweGRiODBiZjk4LCAweDVjMDJkZDc2LCAweDA2YmJkYjA3LCAweGJjYTUxYTU0LAorCTB4ODkxN2QwYmQsIDB4YmNjMWZmNWMsIDB4MmI1YzVmNTAsIDB4NjU0YzczYjMsIDB4ZGFmYmFlMzIsIDB4ZWU3OGE5OGEsCisJMHgxN2NmMzc2YywgMHgxZmEzNWU4OSwgMHgxNjQ0NzdmNSwgMHg3NjNkYmM3MCwgMHhiODExYjdmMSwgMHhhZmQ4Mzk0NywKKwkweDg4M2ZmYmMzLCAweDE1YmVlMDNjLCAweDhkZmYxZmVlLCAweDUzODlmNzhjLCAweGZiODFhYTdhLCAweDM5MWMwZWNjLAorCTB4ZWJmYjAwOWYsIDB4ODQzYTU5ZjksIDB4ODc5NzNlN2IsIDB4MzViNTE3ODMsIDB4YzhlYzFlNzgsIDB4MGM2ZDc2NjcsCisJMHg2OTY1ZDdmZCwgMHg4OTEyN2RiOSwgMHgzNWFmMzljMCwgMHg4YjNjZWMyNSwgMHhkNjAzZGI5NSwgMHgwMDFiMjcyMywKKwkweDQzYzU2YjdlLCAweGRlODYyOTA2LCAweDEwMTk2NTY2LCAweDY4ZmEzNWFlLCAweDE3ZjY4NzhhLCAweDYxMjVhN2Q4LAorCTB4N2JjMWZmZTYsIDB4YjNjZTg3MTksIDB4NWExZTE5ZGEsIDB4YmRhMTBmNGEsIDB4Zjc2N2VkNjAsIDB4Mjk2NWQ2MzUsCisJMHhiODUyY2U0YywgMHhlNmY3ZDJmNywgMHhlYmQ5OWY4OSwgMHg4ZTk0YmVhMSwgMHhiZGZjM2I5NywgMHhkM2Q2Y2VjZCwKKwkweDRiZWVjNjVjLCAweDNmZWQ3YjVhLCAweGM4M2VlMWRiLCAweDQ3MWRmODQ0LCAweDc5ZjJlZmQ4LCAweDcyOTJiODBhLAorCTB4NDhkZmJjMzUsIDB4Y2JmODE3MjQsIDB4NWFiZTYzMmUsIDB4MjM1ZWY4NmYsIDB4MmY4MmZiZDgsIDB4NjJkNWNhZGUsCisJMHgzOWY5NDdiYiwgMHgwYTJiNDc4OSwgMHg0Y2FlNzA0MywgMHhkYjM1YjFkMCwgMHhjYzE2NDBmZiwgMHgwYmM1ZjI4ZiwKKwkweDdjNDRlZjY4LCAweGY2M2YxMGQzLCAweGRmMzNjODYyLCAweDMyZTY0NTI1LCAweDA3NmY0NDNiLCAweDY4ZDQyYzNlLAorCTB4ZTExNmZjNTQsIDB4NTQ5ZTI2ZWIsIDB4NzNkZGEzZmQsIDB4YTE1ZGE3M2YsIDB4NDY0MjNiZjcsIDB4ZmU0ZGU3MDIsCisJMHgyMjY2NzE3OCwgMHgxOTFkYTdkOCwgMHgxYWYzZGVjMiwgMHgyNTliNWYwMSwgMHg4YzBlNjI1ZiwgMHhkYzVhMmZmMywKKwkweDcyMzgxZTBmLCAweGVkYzYwMWJjLCAweGJlMDJmM2EwLCAweGViNzVmODdkLCAweDNhNTNiMDZhLCAweDUzZTQ1ZWVjLAorCTB4ZDBlY2JlMzEsIDB4ZmQ2MGY1ZjAsIDB4ZGY3YmQ2ZWMsIDB4ZDQ2NDdmMDQsIDB4M2FjZGVlYzEsIDB4MTE4Njc1MzgsCisJMHhkM2I2OWZlOCwgMHhhMDdmM2Y0MCwgMHgwNGYwZjdmYiwgMHhmZDFhYTdlOCwgMHhiM2VkMGIwNiwgMHg4Yjc3YzNhNiwKKwkweGIwMTFmZjg4LCAweDZiNzUxNzZmLCAweDNjODNmNzU1LCAweGMyYzVlNWNjLCAweDhlMTIxNjhiLCAweGFjMmMyZmQ5LAorCTB4NmI5ZTBlZjgsIDB4MDEzMTc4NWMsIDB4Y2ZjYzNmZGYsIDB4Y2ZjYzNmZWQsIDB4ZjhlMmVkYmQsIDB4NWYzZjk5NzgsCisJMHhmYjhhZmFjZiwgMHhkZTljNGY2ZiwgMHg4ZWRkZmU0YSwgMHhiYmY3YzYzYSwgMHhhNTlhZmQ2MCwgMHhmYWE4M2QwMSwKKwkweGM3M2Y1MzM1LCAweDY4N2Y2NGYzLCAweDIxYjA5M2IzLCAweGYzMTFkZTA2LCAweDk4ZTEyMjRjLCAweDVkZGE4NzcxLAorCTB4NTI3MDkxMzQsIDB4ZmEzMmZhZWMsIDB4MTVhZjllMWQsIDB4ZTZkMGZmZWIsIDB4ZGQ4ZTNjNDYsIDB4MWUxNTM4ZmYsCisJMHg1M2NmZmI4NywgMHhmZjY0NzFlMSwgMHg4N2ZmNTgwNSwgMHhmNDRiYzJiNiwgMHhmZThjNzkzZiwgMHgwZmYwNTQ3MywKKwkweGVmOGY5YmY3LCAweDdiYWMxZGNmLCAweGVlZjk0MmQ2LCAweGM2YzU3ODYwLCAweGY3ZTE0YjU3LCAweDdiZjgwY2Y3LAorCTB4YjdhZmE0MWIsIDB4ZWViOWNmMGEsIDB4ZmEwZTc4MjIsIDB4N2E3ZmZkODEsIDB4MWY1MmYyMWYsIDB4YzBmN2FhZDgsCisJMHhlOGJhODMxOCwgMHg3YTI4Y2YzYywgMHg4M2Q4OWYyNiwgMHg3ODljZWY3MCwgMHg4Nzk1OWRiZSwgMHhkZWZmMWNlYiwKKwkweDkwZWM4NzI4LCAweDk0MmM2YTY3LCAweDhjZTdhMGVkLCAweDAxNWExMjI0LCAweDIzNTI5N2ZiLCAweGRmMTEzOWNhLAorCTB4MzRmZWZkMTIsIDB4YjM5MmFiNTMsIDB4NDZhMTdlZTIsIDB4NjhkODdmOWUsIDB4MjZhZmYxNjEsIDB4YWMyY2ZmYWIsCisJMHg1NzRkMTJmZiwgMHgxZjY4Y2ZjYiwgMHhmMDNiMGJhNywgMHgwZTIxM2I3YywgMHhmODg4ZDdkYywgMHhjNWZiMGM4ZSwKKwkweGY5N2Q3MDNjLCAweDliMGI5YzA4LCAweDBjZmZlMzk3LCAweDE1MDlmYmJlLCAweGQxZWYxMDJiLCAweDBmY2RiMTVlLAorCTB4ZjM4Zjc5ZjksIDB4YTZlM2U0N2QsIDB4MjMxM2RiODgsIDB4ZjJkOTc1M2YsIDB4YmExYmIzNTcsIDB4ZWNiN2U4ZTIsCisJMHg4Y2MyM2I3NywgMHg0MGQ5NzU3ZSwgMHhjZmM4ZGFiZiwgMHg3Y2UwNzJlYiwgMHg2N2JmMDBlMywgMHhiOWZiNDE0ZSwKKwkweGRlMzBmNGFlLCAweGZjMjc1OTQ3LCAweGYzZTMyYjAyLCAweDYwMWQzMjU2LCAweDU0Nzg4YjRmLCAweDgyMTdlNDAyLAorCTB4ZGQ4NmIwZGQsIDB4NjE2ZjU4NTMsIDB4Mjc1ZmZhZTUsIDB4YmExN2I5ZTEsIDB4ODExNGIyMWYsIDB4NjVhZGQ5OWMsCisJMHgwNzFlMjJmZSwgMHgxZTYxY2YzYiwgMHgwMmM5YWUzNCwgMHg3Y2YyMGVmYywgMHhhZmZkZjM5NywgMHhlN2E3YmRlMSwKKwkweDNhNDc4ZTU3LCAweDBmZTVmZmE4LCAweGRkYzMxZWYxLCAweDBkOWY0Y2U5LCAweDNlYTFiM2VlLCAweGNhNzgzN2FiLAorCTB4ZGRjZDVlZTEsIDB4ZWQ2ZWNjZTksIDB4MjUwOWMzOTUsIDB4YTNlYzc2MzEsIDB4YTcyODU1MTksIDB4NWUzOTVlM2YsCisJMHgxOTI3MWIxMywgMHhjMmU0Y2Q5ZiwgMHg5NGZmZTExYSwgMHhjZTcwZTVhMywgMHhmMGQyZTNlYSwgMHhkZDNlYTEzZiwKKwkweDFiZGZjMjYzLCAweDUzZmRlY2QzLCAweGJhYmZkZTM5LCAweDYzYmY4MGM2LCAweGUyNzdiNTUxLCAweDVmYjBiOWJhLAorCTB4MWYzMTkwNGMsIDB4ODRkN2IzNWIsIDB4YzU1ZDljZjAsIDB4NmY4MzgzZWUsIDB4ZWYzNWVlNDEsIDB4Y2JiZjg3MWQsCisJMHg2Mjg5NmY1NiwgMHhkOWIzNjRkZSwgMHhjMWYxMDA1MywgMHhjMGRmYmRmYSwgMHhmMTM4OWZkZiwgMHg5MDJjYzRmOCwKKwkweDk1OTNjNzgzLCAweGZiNmZiYzJjLCAweDNhNzQ4YTcxLCAweDI2ZmJlM2VmLCAweDU3OWRmN2IwLCAweGRiNmFiOWUzLAorCTB4MzQ3ZjhiMWEsIDB4NGJkMDg4ZmYsIDB4ZWRjZGY3ZjEsIDB4ZDczZTJmNGUsIDB4Njg5OWY4MDcsIDB4NWUxYzgwZjQsCisJMHg2NzVmZTQzOCwgMHhiZmQ2MDdmNywgMHgyNGE1OWQxOSwgMHhmMzA2ZmZhMCwgMHhhN2VkZWExNywgMHhlYjFkZjdmMCwKKwkweDQ5ZGQ4ZmJiLCAweDQyZTkzZTMwLCAweGJjZmIxNWZhLCAweGI5ZWI3MWY4LCAweDhmYWRkYWZlLCAweGQ1ZGY4M2NlLAorCTB4ZjhlNzZmYWIsIDB4NTlmN2JmZTcsIDB4ZGZjNjI5YWYsIDB4NWZmODE0OWIsIDB4ZjMxZjc3MTMsIDB4YzVkZTM4ZjcsCisJMHgxOTExYzRmMywgMHg3NmE0YjllZiwgMHg4ZmY4MTY0NSwgMHgyMDM3ZWM0ZSwgMHgzMzU4OWRiZCwgMHgxMDU3ZWYxOSwKKwkweDU4NTNkNWUzLCAweDhmNGY5NGVkLCAweGIwMjk5NTNiLCAweDE1YjIwYmJlLCAweGI2NzZmZjM2LCAweGU5ZWYxNTdmLAorCTB4YmRmODExZjgsIDB4MmQzZWU4Y2UsIDB4ZGEwZGFmZTYsIDB4YzcxMDA5YTMsIDB4Nzk0NGVkMTQsIDB4NWFmZDNlNjgsCisJMHhkZGI3YmRmYywgMHhkZDcwMDdlOSwgMHhhMDExNWQyOSwgMHg2ZDJmY2QyYiwgMHhiZjAzYjdhOCwgMHhmNzFiYmY2NCwKKwkweDgyMDkyOTcxLCAweDhlZjgzNDlmLCAweDA3N2JmNzAxLCAweDllZDAxOWY3LCAweDlkOTc3YzFlLCAweGVmNzExZmNmLAorCTB4MDU5YTM1OWYsIDB4N2UwNmRjZjcsIDB4ZGFlNTBlMzksIDB4MGI3NDY2NjAsIDB4Nzg0ZGJmYjMsIDB4NTFlMGU0Y2YsCisJMHg1ZTNjZDVmZiwgMHhkMWVmYzY5YywgMHhlZmJiMDM0YywgMHgxODUzM2VjMiwgMHhjNGZhM2VlYywgMHg2YzkwNDNiOCwKKwkweGZkZmJlMzczLCAweDg4MmZiYzE2LCAweDI0ZjlkOTNlLCAweDdmMWI4ZjY5LCAweGYxNzQ4OTM3LCAweGZkZjgyM2VmLAorCTB4MDlmZTU5MDMsIDB4YzgxZmE3MjAsIDB4ZTE1YmZkYTMsIDB4ZWVkODkzZmIsIDB4NGFmZmFlNDIsIDB4OTIxMTU5OGMsCisJMHhjNzRiYzdjZSwgMHhkOWZkMzM3ZSwgMHhjY2ZhNWVmOCwgMHhhODBmN2VjZCwgMHhiMDQ3ZDc4YiwgMHg1ZmYwNjAzZSwKKwkweGJkZjhmMzhkLCAweDMyOGNmNDhkLCAweDVmN2FhZmNmLCAweDQ5ZDk3ZGU0LCAweDZlMDI4ZWI4LCAweDIzYjQ2NzhhLAorCTB4OTNkMmYxZTMsIDB4MDI5ZmY2Y2QsIDB4Mzk3NGYxMWYsIDB4ODA5NzllYjQsIDB4NzgzMmZjMGYsIDB4YjYzZWMwYmYsCisJMHhlYTI2YWI4ZSwgMHg5Y2U5M2M5OSwgMHhkZTMyZjY4YywgMHgyNzkzMTQzMCwgMHgwN2RmN2NiOCwgMHgzYTgzOTc0OCwKKwkweDk3YTBkM2VmLCAweDg0NzU0N2EyLCAweDJkNDhjM2RkLCAweDU0NTdmMDAzLCAweDE2ZjU3NmIwLCAweDcwMTBmN2U2LAorCTB4MDdlN2UxOWMsIDB4MWU1OTNiMWEsIDB4M2VlNzk5ZTEsIDB4ODU2ZjlhYzgsIDB4YTgxZmYzZjMsIDB4ZmYwYmNmY2UsCisJMHgwMTI0ZWQyMSwgMHg4ZjU2MzNmYywgMHhjNDU3NTA5MiwgMHhjMjJkNzZlYywgMHg2ZThmN2VjNSwgMHhkZmMxNGU4ZCwKKwkweDNlM2UwYzBiLCAweDI3MTJmZDExLCAweGJjNWVjYWY0LCAweDE1ZDU3NjA3LCAweDZkMjdhMDFhLCAweDRmYmY5NzMxLAorCTB4ZmI4OTc5YjAsIDB4NmQzZGM0ZGQsIDB4YzgxOTc4ZjEsIDB4OTliMmZhNjYsIDB4M2I4MmVmZjgsIDB4MjUxMzhmZmUsCisJMHhmMTRiMDc4NSwgMHhmZjc0NGFiZSwgMHg1MmNkMjA2YiwgMHg3ZTU4OWFmNiwgMHg5MTg1ZWEzYiwgMHgyZmVhNDJmNywKKwkweGZmODI3YmYxLCAweGIwNTNlNWJiLCAweDlmODA2NTU2LCAweGQ1ZTgwMjYwLCAweDdmYjY3NmQzLCAweDQwMjI1YmM0LAorCTB4M2NkOTZiYmYsIDB4YjgwM2UwM2IsIDB4NGVmODgyZmYsIDB4NWJjNDVlODMsIDB4NGUxZTI4MjUsIDB4OWUzZWFjNGIsCisJMHgxYmJjODRjZSwgMHgxYmEwMGY4MSwgMHhhM2JlMTdlOCwgMHg5ZDllN2Y3ZCwgMHg3NjNmZjZjMywgMHgxNzk0M2YyNywKKwkweGFhNWU0M2Q0LCAweDQ5MDE1N2QwLCAweDBmN2RjMGQ2LCAweDAyNGExZDI3LCAweGNlYzllNWQwLCAweGM4NzJlNzNjLAorCTB4MjkyODcxZjcsIDB4ZTA3NmY2YjEsIDB4MGU3YmMxMTAsIDB4NzNmZjM4MTQsIDB4OTIyZWZjMzUsIDB4MDVmODBhNzcsCisJMHhmZWQ1M2I3NywgMHg1ZTc4Nzg4OCwgMHhmZDQwMWNhOCwgMHhjNjk4NWZmMywgMHg4MDAwNTNjNSwgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYjVmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmZmI1LCAweDc5MzMyNjY2LAorCTB4ODQ4NDFlNGUsIDB4ZTQyNDk4NDAsIDB4MDkzMDg0MDEsIDB4MDc0MTQxMGYsIDB4NjgxNTEwNDgsIDB4ODUyODA5NzgsCisJMHg0MjEwMDc5MywgMHgxN2I2ODgxZSwgMHgyNDBjZGI1YiwgMHg0MWI0NWEyMCwgMHg3NjhiZDE1MSwgMHhiNDU0NDE0MCwKKwkweDAzNDE0MTQxLCAweDU4YTUwMDc3LCAweDU2ZDU2MzUxLCAweDg4MGRjYjZkLCAweGE4MzExZmJjLCAweGFkYWRmZjk3LAorCTB4ZmI1YmY1ZmYsIDB4OTBjZTY0OWMsIDB4ZjliN2I1YTgsIDB4NjdkOWQ4M2UsIDB4N2I1YWQ3YmYsIDB4M2JkYWY1ZWQsCisJMHgzZjQzN2NkZiwgMHg3NTYxMDlkNywgMHgxMGY0NDIyYiwgMHgxMTZkY2UyMiwgMHhhMzEwOTg2MiwgMHg0MmYzODJkYywKKwkweDExYzg4NWQ4LCAweGNhOGRmM2ZjLCAweDVjM2FkYjg5LCAweDhkZjg4NTg4LCAweGRhZjlhYWFhLCAweDJiYzg5ZWI1LAorCTB4MWY1YzJkZWIsIDB4Nzc0Njc1ZTMsIDB4YjVmMWJkZjEsIDB4MjhmMjUwZmYsIDB4MDg0YzIxYjMsIDB4NWQzZGZlODcsCisJMHgxZTMxMGY4OCwgMHg5MGVhN2I4ZCwgMHg0NjBjYTdkZCwgMHgwOWFjMmUxYSwgMHg3NWFjNTQ0MiwgMHhhNTFhNDVmYSwKKwkweGJhY2M0ZTZmLCAweDQyODVlNjUzLCAweDVjNmNjNzc1LCAweGUzNGFkODk5LCAweGNhMmE2Zjk2LCAweDFmYjI5MTEyLAorCTB4ZDBhYWYzNDEsIDB4ZWE5ZTU1ZTcsIDB4MGE4NzUyY2QsIDB4ZWFhOGY2ZDEsIDB4ZWJmNjg0ZGEsIDB4NmE4ZjllNTUsCisJMHhhNTFlYjhmMywgMHhkYmQ2MjdlZiwgMHg5ZmE5Y2I1YywgMHgyNzNlN2QwYSwgMHhjNWQxNmI3YSwgMHgwYWI3OTRiOSwKKwkweGYyODBiZGFiLCAweDQ1ZGEyZDU2LCAweDU0NzgyZWZkLCAweGIxNzdmNjJkLCAweDgxZjdhYTNlLCAweGY4MGJhMGI1LAorCTB4M2E4OTRkNjAsIDB4MWVhODMyN2MsIDB4ZTM5NDY5ZDYsIDB4NzI2OGY3YmYsIDB4YzJmY2QxNTcsIDB4NjNjYzc3ZTksCisJMHhkMWY3ZTJhMywgMHhkMWY0NGVmYywgMHhmYzdmMjFlNiwgMHg4MmIxMzA5MywgMHg0NWRhZWFmMiwgMHgyYmRjZWVkMSwKKwkweGExYzI3ZGUxLCAweDAxNzI3YjQ1LCAweDAzMWViOTVmLCAweDE4ZTNhMTllLCAweDc4MDhiY2YwLCAweGJhYmQyMGM2LAorCTB4YWJmMDRiYzUsIDB4YTBmNTQ4N2QsIDB4NGJlNmJlY2UsIDB4OThkZjgwZDEsIDB4YWU0NzQ1M2QsIDB4NjFiNWY3YzEsCisJMHhlY2RhOGMyMiwgMHhjZWZlOWMzYiwgMHg4YjhmMzRhZCwgMHgzZDQxNTVhYiwgMHgxOTNkZDI4YSwgMHhkYmM2ODI4OSwKKwkweDJlN2NmOTZlLCAweDRkYmY3M2UwLCAweGQyOTE3YWNjLCAweDQ3YTdiN2QyLCAweDQ2ZmQyODViLCAweDIxZjUxZmE3LAorCTB4NmEzNTI3MDksIDB4YWU3Y2Y0N2EsIDB4OThiOTNlZGYsIDB4OWVkY2M3ZjIsIDB4N2FhMDgyYzQsIDB4MmNlOWQ2M2YsCisJMHg2YjY1NWYxNCwgMHg3MThkMTZmZiwgMHg3OGQ4ZDYyYSwgMHgyZTVlMDY1ZCwgMHhiZjM0MWQ2MiwgMHhmZTExOGQ4YiwKKwkweDhiOTcwNGU1LCAweDVmYjhkYmJkLCAweGJmNDY0ZjAzLCAweDQxODNjMDE1LCAweGE1NmY1NDRmLCAweGUzOGZhNWRiLAorCTB4MTE0NzE3YjMsIDB4ZTFiNGQzNWMsIDB4NjRlODJlOWUsIDB4MmUzNDgzYzEsIDB4ZTUxZjViZmEsIDB4ZmY3ZGU2NzUsCisJMHg3NDc4MGQ3MSwgMHgyNTk2OWJlMCwgMHg4ZjAzZmMwYywgMHhiYzZkYTQ0ZiwgMHhkZTU5YmU5NywgMHg5M2QxMGFiMywKKwkweDdkNzhkMGUwLCAweGNiZGY0MmFhLCAweDg1MDk4NGY2LCAweGRhNTMyYmZhLCAweDljMDkyODhlLCAweGFjMTRmYjc3LAorCTB4OGMzY2YxN2YsIDB4OTg3MWY2NTcsIDB4ZjdjN2U1MDUsIDB4ZjNjNzlmNWUsIDB4YzEyYmMxMGEsIDB4N2EyYmI1MjksCisJMHg5NmQ2OThiZiwgMHhkZjgyMDllYSwgMHg3MzZkM2VjNSwgMHg3ZDA2YmU3OSwgMHhlNzliY2U3NCwgMHg0YzM3YmI1MSwKKwkweDRjNWM1ZjYwLCAweDc2NDY3YzIzLCAweGY4MDFiMWMyLCAweDVkZjVjNjE5LCAweDZmNmZhNjc2LCAweGIxZDdlMDFlLAorCTB4N2FjODU3NWUsIDB4ZmRlYjIxNWQsIDB4MGI3ZDMwNDAsIDB4MjllYmM2OGYsIDB4ODJjYzI0ZmYsIDB4ZGMwZmU1ZWYsCisJMHg3MWE2ZTU5NCwgMHg4ZTNiZGY4ZSwgMHhjZTNjNzVkNywgMHg3NWZkODc5YiwgMHhjZmZhOTUzYywgMHhlNTlkNzJiZCwKKwkweDczM2FkMDBmLCAweDhkOWQ2NWJmLCAweGI3NTdjNjRlLCAweDdiNmI4Y2ViLCAweDNhY2I3YzQyLCAweDY4NzRlYTM3LAorCTB4YWIzM2YzYWMsIDB4ZmE4YWRhM2IsIDB4OWNiMTU1YmIsIDB4MTRmYjZhOGEsIDB4Y2M4ZDdmZGYsIDB4ZDBkMDU2YmIsCisJMHgwZjQ5MzZiNSwgMHhmYzIzNmJiNSwgMHg2Njg1ZDdjMCwgMHg2ZTdmMDRkYiwgMHhmMWEwMWYyNywgMHg1ODNkMjdiZSwKKwkweDhmOGUxZTk4LCAweDAyM2MzZjc1LCAweGVhOWY3NWY0LCAweDk3MDFiOWYyLCAweDljZmNlZjIxLCAweDU3ZWZjN2YyLAorCTB4YjFmOTAyNWQsIDB4MGZjNDdlMTIsIDB4YzcwZmUwMmMsIDB4NzMyNzhiNTMsIDB4YjVjZGFmN2UsIDB4YjRmOWZhODIsCisJMHgwNDdmNmZmMSwgMHg2M2RjNWNmZCwgMHg1ZjVlMGI3MywgMHg5MGIzZmRmMSwgMHhhZjgyZjlhNywgMHhjNjZlNWMxMSwKKwkweGViY2U1NGI4LCAweGQ2MTllZjU3LCAweGU4ZjE3Mjg4LCAweGJiYTY1NzYwLCAweDAyMTRiZTBiLCAweGFhMzU4YWU3LAorCTB4MDFkMjFmNjksIDB4M2VkNWUzYzEsIDB4M2FjNmUyOTAsIDB4ODcxMzM4MGMsIDB4YTgzYTlhY2QsIDB4NGZjODFlMTMsCisJMHg5NzA5ZDQxZiwgMHg5YWQwYmI1YSwgMHhmYjEyZmJmOCwgMHhmYzQxNDE5NCwgMHg5NzQ5ZjAwYywgMHgzY2ZmNDRlNywKKwkweGEyZDJjN2M5LCAweGM4NzNmNjgzLCAweDhmZjk0MmZjLCAweGZmNDhjZjUxLCAweGNjNTdjMWQyLCAweDcwNTE3OGZjLAorCTB4MTk1MGUwOWUsIDB4YzIxYzVmOTIsIDB4Y2E0MmFhMzcsIDB4YjdjYTQzYWIsIDB4Zjk5Y2ZhZjcsIDB4MTNmOGU4NDAsCisJMHgzMWJlZTRkMywgMHhjM2FhNThlMCwgMHg5MTQ1YmI3MSwgMHhjNTNlZTQ3YywgMHgyZDdlODliZiwgMHg0YmVkYmFiNSwKKwkweDhlMmZmZTY5LCAweDRmZDBmMzExLCAweGFlMzg1NTk5LCAweGNlZDk3ZGU1LCAweDhhYjUyYmViLCAweDdjMDJiMDg2LAorCTB4NjMzZDcwZjcsIDB4NDM1ZmQ0ZGQsIDB4YzNlNTFjNTgsIDB4N2FhMjFmMjUsIDB4Nzk0MWVjMTMsIDB4ZjMxYWRmODMsCisJMHhmMDkzNGYwOSwgMHg1YmM1ZDIzMCwgMHg4M2M3OGQ5ZCwgMHgxNGRkNTllMCwgMHhlZWQ3Y2E2YiwgMHhlZTNjNmU0YSwKKwkweGM2MmZjY2U4LCAweDZmZjRjOTJmLCAweDM4N2VhZDIyLCAweGFhN2YyMmUwLCAweDhjMWViNTc3LCAweGIyNDlmYTIwLAorCTB4ZDQ2OWUxNjgsIDB4ZmY4M2M1ZWYsIDB4NjZlYjlkMWIsIDB4MjYyZjBmYmMsIDB4ZTlhODE2ZmMsIDB4ZjVhNjFkMmYsCisJMHgzZDU2ZWRiNiwgMHg5YmVmZDA5YiwgMHg1ZjExZmNmMiwgMHgxYjc4N2E1ZiwgMHg5YmQ5YWY3ZCwgMHg3Nzc1ZWUyMSwKKwkweDhlMTQzZmFlLCAweDhhNWQ3NzE3LCAweDE3ZWZhNzRlLCAweDA1YzNkOTBlLCAweGNkYTUwMWM5LCAweGQxZWQ2M2YxLAorCTB4ODRiYWJmYmMsIDB4YmI4NzViYmIsIDB4NmIwNWRmZDEsIDB4YTA5NGY0NmIsIDB4NmI0NDE3N2EsIDB4N2EyMGQ0ZjQsCisJMHhhOTc1ZGQyOSwgMHhmYzMxZTQ0ZSwgMHgxZjEwNmE3YywgMHg4ZjRmNzRmZiwgMHgyZjdkMmFiMSwgMHhiMWFmN2RmYiwKKwkweGU5Yzc0YTE2LCAweDczNmZkZWZkLCAweGU2ODZiOTNmLCAweGU2MWRkYmVkLCAweGJlZjM0Y2Q5LCAweDBiMmNlNmYwLAorCTB4YjM3ODVmZGEsIDB4ZWE3ZjRmNDIsIDB4NGZiM2Y0ZTUsIDB4YjQ3ZTMxNTMsIDB4MzFiYmQyNDUsIDB4MjkzNDg4ZGUsCisJMHg4ZTU5OTU0ZiwgMHhmYzFhMzEzZSwgMHg2OTllZDVmZiwgMHhlNTlkNjlmNSwgMHgyYzgyOTY2NSwgMHhhZDliNzllMCwKKwkweDdkZTYyZTZkLCAweDk1YWIxMTQxLCAweGM2N2VjZWI4LCAweGZkYjliOWE1LCAweDlmMjdkZDg1LCAweGY0Zjg3ZjAwLAorCTB4NjAwNTNlZmUsIDB4Njc3NjE3MmIsIDB4N2U1NDY5ZTcsIDB4NTkyMWUzZTEsIDB4YzJmN2VhMmUsIDB4ZjAxZWM5N2QsCisJMHhmNzM2NmQ4NSwgMHhlZWRlOTk0ZiwgMHhkZjYwZjI4OSwgMHg5YzYxZmQxYiwgMHhmNzdmZTgyNSwgMHhhNDM1YzM1NSwKKwkweDUyZjljYjFmLCAweGUzOTM0ZjNlLCAweGNlODI5NGZhLCAweGVlMmRhMzdlLCAweGJmMDI4ZjVmLCAweGIzY2RiZGY4LAorCTB4N2ZhNTkyOTksIDB4OGIxOWU4Y2YsIDB4NzczZjYxZjUsIDB4ZDViMjg3ODEsIDB4ZTI2ZGMyNjEsIDB4ZGU3ODJiMjcsCisJMHg4NzYzYzJhNSwgMHgxMTcyODQxYywgMHhhMmU1NWY0NCwgMHg2ZmNmYmY5OCwgMHg0MDVmN2YzNCwgMHgxN2RmMDI3YywKKwkweGFmN2YzN2FlLCAweDVhYWI4ZDEwLCAweGZjOGI3ZDY5LCAweGY2ODJlZmU2LCAweGZiMTEyZjhmLCAweGUyNjlmOGRhLAorCTB4ZDZmMTdlZjMsIDB4ZjU0Y2MyNmYsIDB4MGZlNzRmODQsIDB4YTVjN2U2MGUsIDB4YzdjMTFmYjQsIDB4ZmVmYzU3OWUsCisJMHgzZGVmYzAxNSwgMHg3NDMzYWYyYSwgMHhkMmQzY2I1ZCwgMHg0NDhmMWQ3OCwgMHg2YjZlNjNmYywgMHg1OThmNWUxMCwKKwkweGUwODkzNTg0LCAweDFjMmVjYzdhLCAweDQ3ZTgwNTQ5LCAweGJlYWI5YzA4LCAweGNkZmU2MTNkLCAweGZlZGVlNGQ0LAorCTB4MzI5NmE1NWYsIDB4ZTBiMjRiZGYsIDB4MDVjM2I4M2MsIDB4ZWRmZDQ3Y2UsIDB4N2U4YTk5MzksIDB4NzkxNzU2Y2EsCisJMHg3N2U2ODM1YiwgMHhlNDdkZTZkMSwgMHhkZjU3OTBlNywgMHhmNTRkN2UyMywgMHgzN2Y1OGQ4ZSwgMHgxZDc5YTU4ZSwKKwkweGQ0ZjU1N2JiLCAweDMzYWYzMTc3LCAweGUzZjk5ZjI0LCAweDI4ZjcxZTA5LCAweGYyODQzZmMyLCAweDJkNGM5Y2NmLAorCTB4ZGU5Y2JjMjEsIDB4MzRiNTMyN2MsIDB4MzExNWZlOTgsIDB4OGQxZTk4MmIsIDB4ZWJjMjY2OTQsIDB4ZjQ4OWFjODIsCisJMHhlYjA1YWQxOCwgMHg4OWQ3YWQwOSwgMHgwZDdjZjM1ZiwgMHhiMTU1M2E3OCwgMHg3ODdhMmJhNCwgMHhlNTRmNzQxNCwKKwkweDA1NTc3ZjM5LCAweDNkOWFjZWU0LCAweDMzZTgzZjM2LCAweDBmMTdlMzYyLCAweDZjZmEwYWRmLCAweGRhNDBiOWI2LAorCTB4MmY1NDdiYjUsIDB4NWJiMTc0ZTQsIDB4MWNlMjY3ZjUsIDB4YmEzNGZlNmIsIDB4ZWVjY2U3MTIsIDB4NjgzNTJlMjEsCisJMHgxNzBlNzRkZCwgMHhiMGI5N2NlMywgMHg1OTYyNTJlYiwgMHgxOTMzZjcyZSwgMHg5ZWVkNDRmMiwgMHhkZmEwM2M4NywKKwkweDVjZjFlNmVlLCAweGYxYWZmYTlhLCAweGZmOTlhZjNmLCAweDIwZmRjZjlkLCAweDgxZjA0NmYxLCAweGMwYjIyNzhkLAorCTB4M2UwZjg5ZGYsIDB4OTlmZDg2OTcsIDB4NzkxZGI1ZjUsIDB4ODM4NzVhMjEsIDB4MmM3ZTY4ZmUsIDB4N2ZmNDVmYmYsCisJMHhhM2E1ZjJjNSwgMHhiYmZhZjU1OSwgMHgzNDllYzNjMCwgMHgwN2ZmYzMzYiwgMHhjZDAyNmZjZiwgMHg3ZTczYjEyZiwKKwkweGUwM2Q5ZjM0LCAweDZiM2NjNmNiLCAweDljNzY2ZGRjLCAweGQxMWQxN2IzLCAweGI0YTdlMDc5LCAweDg5Zjk4OWEwLAorCTB4MDZlNGY5ZmEsIDB4Mjg5YjJkN2YsIDB4ZWUxNmJmODgsIDB4MDljMmJmOWUsIDB4ZjE1MWExNzksIDB4NmYyODBmNDAsCisJMHgyYWRjZjk1NiwgMHhkZGZhYTBkZiwgMHhlY2MyOTc4NCwgMHgyMTNiZjZiYiwgMHhlNTQ0M2U5ZiwgMHgzYWJjNzRkNCwKKwkweGE4YjM4ZmVhLCAweDU0ZmJjMmZlLCAweGY4ZGJlZmNlLCAweDgwZGEzZmQzLCAweDExMzYwZGQ3LCAweDQ3ODYzYzA2LAorCTB4NjNjN2QyNmYsIDB4M2U5MTY4NzksIDB4MzdjZDQ1YmYsIDB4YjdhMDU2OWQsIDB4MDEzZDUxZWMsIDB4ZTUxY2RmYjQsCisJMHhkNWIyZjdjMSwgMHhmNGMxNjNiNiwgMHg1MGJmMWYzNSwgMHgyYmQ3ZjM3ZiwgMHhmODFhNDBmZSwgMHhjMmZjYjk4NCwKKwkweDI3Y2U5ZjMwLCAweDVjNmZiZTQyLCAweDAyN2Y3NTM1LCAweDg5ZWIyYjUyLCAweDcyZTZmYzhiLCAweGYzNGViY2ZjLAorCTB4ZGY3ZmQ1YTksIDB4MTdhNmI5OWEsIDB4MjljMTczZjAsIDB4YWJmNjBiNDQsIDB4MWRmNTk1YjUsIDB4MDU0ZDY4MTEsCisJMHhmZWVjMmYxZSwgMHhhYzc4MTUyYywgMHhiMjdmZjU3ZCwgMHhlYmY4MTc0NCwgMHg1MWNkNGZkOCwgMHg4NDIyMjcwOSwKKwkweGM2ZTc0YjM4LCAweGZkZDAxNjM3LCAweDVkYzVjOWE1LCAweDhmYjE3ZmQ0LCAweDZkNWIxN2RjLCAweDYzOTA1ZWJlLAorCTB4OGFmYzZmZjcsIDB4ZGRjNWMxZjksIDB4MTc1NzVmNWEsIDB4NWZiOWRiZjQsIDB4MTI0YjRlN2QsIDB4MjA1MzgwZDIsCisJMHhiYWU0ZGExZCwgMHhlNDg0ZmIxMSwgMHgxZjQxN2JjMSwgMHhkZDRkNTY5YiwgMHg2YmU3Nzk0NCwgMHhhMjQyNDgzNiwKKwkweGY3OTIzMzM2LCAweGZjYzdmNjBiLCAweDdkOGQ3ZWEwLCAweDAxN2MxNWIyLCAweDFmYzkzMGU5LCAweGU1MjNlYzVlLAorCTB4YmNiYWQ1ODQsIDB4ZmI1Zjc1YjAsIDB4ZTYyZWNjZTQsIDB4MjZjZDNhYjMsIDB4OTIzZWRiY2YsIDB4MmI0ZGNjNmYsCisJMHg5Yzg3NGYwZSwgMHgwMzQ1ZjE2MSwgMHg3NWViYzIxZiwgMHgxNTdjMTAyNywgMHg5N2VhYmU5ZCwgMHgzZGYwNTEyZCwKKwkweGRhNzIzNDQ5LCAweGZhNzEzNDViLCAweDI0NWExMGI4LCAweDBiOGYwYmVhLCAweDRmYTIxNjcwLCAweDdiYzdlMDJjLAorCTB4MzFhYmQ3OWUsIDB4OGU4OWZjZGYsIDB4ZDA2YWYwM2IsIDB4Zjg1NjJmODMsIDB4ZWFlZmQzMzcsIDB4NjM1MDg3NDYsCisJMHg0NmI1ZWQyMCwgMHhhMGQ0NTFhMywgMHg0YmVlYmZhOSwgMHg1NDBmYjZlNSwgMHgzZWQ0OWZkNiwgMHgyZTNkM2UwNiwKKwkweGM4Y2JmN2UwLCAweGY4YzEzMWU5LCAweDc0Yjg3N2RiLCAweGRlYWJmYTAyLCAweGY1MmU3YTQ5LCAweDRkODc3ZTc3LAorCTB4NTk1N2EwMDQsIDB4M2Q1MGJmNjksIDB4ZWMyZmUxZGIsIDB4Y2Q0YmUwNjksIDB4NWNiYzgwOGEsIDB4YWY3Yzc5NGIsCisJMHhmYWY1NjUxZCwgMHg5NzkyZTA4MywgMHg5YTkxZTEyZSwgMHhiYjcwYzU5ZSwgMHg5YTFlZjU2MCwgMHg5NTczZmEwOCwKKwkweGRiZDcyMWRhLCAweGMwNGY5NzBlLCAweDJhNGI2Mzc5LCAweGZiNWU2M2I1LCAweGE0NzU4ZjBlLCAweDU2YjE2ZjAxLAorCTB4OWFhYjM3ZGUsIDB4NWM1YjcxOGQsIDB4ZjYyYTNmZTgsIDB4NDM2ZjllMDMsIDB4NTM0NDQ1YWUsIDB4YzI4Zjg2YmIsCisJMHg4NzRjMGNmYywgMHgzYTYxNDNlNCwgMHg4NTAyMWI1YywgMHhmODE3NzcwZSwgMHgxNGMyODlmMSwgMHg3N2NhODIzMSwKKwkweGNmMzAxM2E4LCAweDE3NTJhZWYzLCAweDk1OGI2OGYwLCAweDliMzA4Nzc2LCAweDlhZjQwMjc3LCAweDc4YjhkOGIwLAorCTB4N2E0NDZmY2MsIDB4YWJmZmNmMDYsIDB4Y2YzYzI1ZDgsIDB4ODBiYzQ4YWYsIDB4N2FmMjQxYmUsIDB4YmQwZGYyMzEsCisJMHg3ZDg2NTVjYiwgMHg4ZmJjMjNlMywgMHhmYzcyMWQ2YiwgMHg5ZjJhM2RhOCwgMHg0M2E0NjJhMywgMHhiYmVmZGJlNywKKwkweGM4OWM2OGNhLCAweGQwMjRkYWJlLCAweGE4OWYzMTgzLCAweGYwMGJhZjYxLCAweDg1OGIxY2U3LCAweDM3ODZiM2U1LAorCTB4MmY4MGQ3MjIsIDB4ZDIxYmU1MTgsIDB4ZjgxOWJkMjUsIDB4NzU2MDk5NTgsIDB4YWUzYzdmODEsIDB4NTc0YWU3ZDMsCisJMHg2ODIwYTNiMSwgMHgxNjFlYjY5ZCwgMHgwZWM1NWUxZCwgMHhiZGJiNjljMCwgMHg5N2NlMTBmOCwgMHg3MzhlZmEzNiwKKwkweDU0ZDI3ZjczLCAweGFhMTRmNDA3LCAweDI3M2Y0MTY3LCAweDY0Yzc2OGVhLCAweDBlZTlkZmEzLCAweDQyNDE3N2MwLAorCTB4NWJiNDc4ZTksIDB4YzJhYzk2MjgsIDB4NWViODViN2UsIDB4M2UyMDgxMTUsIDB4ZTM5MzYwZGIsIDB4MjExY2I4MmUsCisJMHhjNzNhNDMwMiwgMHhlM2Y4NDA1ZCwgMHhmOWEzOTdmNiwgMHhkNjUzODM3YiwgMHhmYjkyODg2YiwgMHgyOTc0Y2VlNywKKwkweGQzZDRhZTJmLCAweDgzZmE3YWI1LCAweGNjYzdiYWY5LCAweGZlYzdjZmQ3LCAweGU0YTk0YjcxLCAweDUzYTY3N2VmLAorCTB4ZWI0YWQ1YmYsIDB4YWIyNjg4NzgsIDB4ODBlZGRhOTIsIDB4OTczYTg5ZWYsIDB4Y2QwNTg0MDgsIDB4YzY3NThhZjcsCisJMHgzOGQwNDA4YiwgMHgzYjJlZjUxZCwgMHgxODNlMjA0NSwgMHg0N2M2NmUxZiwgMHhiOTIzN2FlNywgMHgxMjVkNDRmYywKKwkweGZlZmJiMWMzLCAweGVjNzA0YzUzLCAweDA0YzMzZmVjLCAweGNmZmIyYmM3LCAweDc1MTNmMmUyLCAweGZmZDFkZjM5LAorCTB4NGZmYTZlYzAsIDB4YjNiZmNkMzMsIDB4NWRmYzdlZGYsIDB4ODJmYWQyZWMsIDB4MjJlZGRjYmYsIDB4ZDM3NGMwN2UsCisJMHhiYjI2NzZjYSwgMHg3NjA2ZmRhMiwgMHg5ODcxZjEyZiwgMHg5NWY3ZGM4MCwgMHgwNTc2Y2I1MywgMHhlOTZkODdmMSwKKwkweDBiOWY1ZDc2LCAweGZhZGY4MGE0LCAweDZiNGUzYWM0LCAweDhmMWE1ZDc3LCAweDBiZTI2ZWY2LCAweGNiZDBlNzZjLAorCTB4Y2YxYjQ1NmIsIDB4ZmEwMmZjMTMsIDB4YmFiNjQ4YmQsIDB4OTY5NzdjYjksIDB4OThjOGJkMGQsIDB4ZjMzYzg3NDcsCisJMHg4NTlmNDhiYiwgMHg5ZWQ4NDFmNiwgMHgxZjYzNDdiZiwgMHg0ZGI2YjQ1ZiwgMHhhOWFhN2Q4NiwgMHhkZTA4OGQ1OSwKKwkweGZkZjQwN2Q3LCAweDE3Y2ZiNjMxLCAweGQ1ZDdiMDc5LCAweGJkZjExZGEwLCAweDljNWRlZTlmLCAweDg0ZDRmODBkLAorCTB4ZGU2MWU1YjUsIDB4MmRmZWY3ZmIsIDB4NTdjOGU3MGYsIDB4YzVmNzE2N2IsIDB4OWY1NGFkZjcsIDB4NWI3YjBmZTUsCisJMHhiZmE4Mjc4ZCwgMHhiM2U1YzI3ZSwgMHg5YjRjZTg4YywgMHhmYTFmZmRmNSwgMHhmYTllZWI3ZCwgMHgzNmM3OTg1ZSwKKwkweDJlNDgzZGQ4LCAweDU2ZjY1OWFjLCAweGIwNzhmMWM2LCAweGUwODNlZjIxLCAweDE2Zjg4MjVmLCAweGE2YmI0M2ViLAorCTB4ZGYyMDYzYTksIDB4MGYzMjQ4N2QsIDB4OTZlZTg3ZTUsIDB4M2VkMGMzNzIsIDB4ODM0OTZmYzIsIDB4MmNlMWY3ZGMsCisJMHg2MTlhODlmMCwgMHhlMTU0MTc3NiwgMHg5NjE2ZmNmMCwgMHgzOTg3YzNiNywgMHg5ZjlmMzg1YywgMHhlYmMxOTNlZCwKKwkweGM4NGU0M2IzLCAweDc4YTJmYjQwLCAweGYxNTRlN2E2LCAweDFiNmRjOWFmLCAweGUwNGZmNjQyLCAweDY4ZGIzNTBmLAorCTB4NzViNTZhYmMsIDB4Zjc4NTM4ZjIsIDB4YTlmMDMxZDEsIDB4NzhiZmI3OWEsIDB4MTM1ZmQ3NDcsIDB4OGM1YTlmODEsCisJMHg1Zjc4ZjA0YiwgMHg0MzIxMjdlZiwgMHg5YTdhODkzYiwgMHhhYmJlZjVhMywgMHg5YjhjZGVhOCwgMHgxZmExNTM5MywKKwkweDk5ZmFlODk1LCAweDE5NDA0ODk4LCAweDEwNjhmY2M5LCAweDllNTcyMGVjLCAweDdhMGY1MmRiLCAweGMwMzRkMTRkLAorCTB4ZjBlYzk3YzEsIDB4OTgxYWZjZTAsIDB4NzFjOTFjMjIsIDB4ZjRmZWQwZDgsIDB4NTdlZTM0YTksIDB4MmVjMzE2ZTksCisJMHgwM2RlNjBhYSwgMHhkZjNkMzVmNCwgMHgyYzY5NjlhYiwgMHgzOGZlOTM5ZiwgMHgzYjNmZDFkMCwgMHhmYmMzMjVhZSwKKwkweGEzMGJmMDc3LCAweGRmMzc4N2ZlLCAweGUyZWI0ODNhLCAweDc5ZTQzMGRjLCAweDM2ZTliZGJiLCAweDNhYWRiM2NjLAorCTB4OTg0N2Y1OTIsIDB4YzllZWQwZjMsIDB4MmEwMmMzOWIsIDB4YzhiNjhhZWMsIDB4M2ZlN2QwZDUsIDB4YjA3Yjk4OGEsCisJMHhmZWUzYzEwNywgMHg4MzIyMmQyOCwgMHg3OTlhY2RkYSwgMHg5NWU0MmFjMywgMHhhNWVlZjFmZCwgMHhkNjkyZTdhMCwKKwkweGQzZTdjMGUxLCAweDgzMjYyZDRlLCAweDY4NzJhZmM2LCAweDg5NjkxMzdkLCAweGQ5NjhmYmU3LCAweDhiZTQzODMxLAorCTB4NDQ5ZTI1ZTMsIDB4MmVlMmEwZjEsIDB4NTNlNzJmZTcsIDB4MGZmMWM4YTIsIDB4ZTg0OTY5NDcsIDB4ZjJkMmM0YTcsCisJMHg2NmY4NTVjNCwgMHg4MzdiNjE2ZCwgMHhmZGMxZTg2OCwgMHg4YThiYjc5YywgMHgwMzdmZTRhZSwgMHg3NWY0NDcwZSwKKwkweDZiODliM2VjLCAweGY2ZmFkMzJmLCAweGQ0ZjE4ZGFkLCAweGVmY2I3Y2QzLCAweDk2YjczOTllLCAweGUyOTZmOWQyLAorCTB4OWE2YTgwYzQsIDB4NTVkNjE2NzcsIDB4OWJlOTJiZTUsIDB4NzlmM2YyNGMsIDB4NjVlZjNlOWIsIDB4YWVhZGJjZmEsCisJMHgxY2ZkZTBhYywgMHg0MzdhZWYzYSwgMHhjMjg1Zjk1ZSwgMHg1MGZmMjBmYSwgMHhhYzVmMTVmZSwgMHg4N2NhNWVmZiwKKwkweDMwN2QyZTU5LCAweDIwZDZlNzBkLCAweDM2NDlkYjBiLCAweDIyZGVkMzg0LCAweDdkNWRmMjNkLCAweGJlZDM4ZjllLAorCTB4ZjdmMWM0NzMsIDB4MTQ5ZWY4ZDUsIDB4M2QyN2RiMmUsIDB4N2VjM2YxNmMsIDB4Mzc3NjNjNTAsIDB4OWFjOWU5ZTMsCisJMHg2MzRhOGY0OCwgMHgxZGI3MDg5NSwgMHhmMDk5NTA3MiwgMHhkOWZjNWNiMiwgMHg2OWVkYmY5OCwgMHg2NjE1NzVhNSwKKwkweDZlMDFkNzY4LCAweGE5MmRlMmYzLCAweGI0M2NmMDFmLCAweDZmMjA1MzgxLCAweGY4ZWI5MjhkLCAweGQ3OTM3OTE2LAorCTB4NmNiODU1MzEsIDB4MzU4OTk0MmMsIDB4NTMxZmM4MTYsIDB4ZjMyOTcyNWQsIDB4YTYzZmI5MTUsIDB4ZTMwZGFmMDksCisJMHhkNzFhMTBjZCwgMHhiYjA1YzNmYiwgMHgxZmM0ZmExNywgMHhiY2QxMGJhMCwgMHg3ZjFmMGE2NywgMHg5Y2ZjMmQ5ZiwKKwkweDVjMDIyYWRlLCAweDk1YTJjN2ZmLCAweDg5YmMwNmYzLCAweDQ4MjVlNjNlLCAweDUzZDkzOGZhLCAweDhjZGZmODY1LAorCTB4OTExN2JmNzksIDB4YWQxOTY3ZDcsIDB4ZDkyM2NhNjMsIDB4YWQ1ZmFjOTksIDB4ZjlmMGMxZWIsIDB4ZDE0Zjc5YWUsCisJMHhlZmY2ODZlOSwgMHhmZDgzZjQzYywgMHg5OWZhOWQzYiwgMHhmZWM4NjM3YSwgMHhlMDYxZWMyZCwgMHhmNmRiZjMzMywKKwkweDg3N2I0YjUxLCAweDRjOTkxNGZlLCAweDQ3NWViODcwLCAweGM1ZGVmNWU5LCAweGE5MTUzZmFjLCAweGY4NDdjMjkxLAorCTB4ZmFhNTE5NjksIDB4ZjIxYzc3MjEsIDB4YTA0ODRmMmUsIDB4YjlmZGRjNzUsIDB4Yjc3ZTgzZDQsIDB4ODQzZGJjNWMsCisJMHg0NjM3N2ZjYSwgMHhkMmRjZjUxNSwgMHg2NGQ0ZjJjYiwgMHhiZGM5OWZiZCwgMHg5ZDg2OWZjNywgMHgyNDA4YjBmNSwKKwkweDE3YjlhNTBjLCAweDhmNWVkNjVkLCAweDU2NGVmOWExLCAweDUyYzQzNWI3LCAweGE0ZGU4NGY5LCAweGJkZjEwNGM3LAorCTB4NWJiNjEyMWIsIDB4ZDhkZGQ3YTEsIDB4NjI3ZGZjY2YsIDB4OTlkZjU5YWUsIDB4YzA1NTFhMjQsIDB4NzM1MGYyNzksCisJMHgwZjgwN2RiZCwgMHgwYzhhZDdkMSwgMHgwMTg4YjdhOSwgMHhkZmVlODA2MiwgMHg0N2ZiYjk2MywgMHgxM2VkMWY3YSwKKwkweDBiZTFkOTJmLCAweGJiNDMzNTc5LCAweDNhNWM3MDA3LCAweDE4YjliM2U5LCAweDdhZTU1ODU3LCAweGQ5NTFkZTZhLAorCTB4ZTQ4Yzc3OWUsIDB4ZGY5ZDJmMmMsIDB4ODRlOGViYzcsIDB4MDhmMjkzMDgsIDB4NmU0OGE3ZjIsIDB4Y2VhNjdhNDAsCisJMHgzYTM5ZTljZCwgMHhhMTdlNTFlNywgMHg2N2ViMjNjZSwgMHg3ZDgwM2YxNCwgMHg3M2ZhYmE1NiwgMHhiNzcyZjAyYiwKKwkweDZlZjljMjUzLCAweDc2MWZhYTY3LCAweGM2YTY4YWI1LCAweGU1NWU5OGYxLCAweDQ4ODNhNmFlLCAweGUzYzUwM2NiLAorCTB4MzgyZWNjNzEsIDB4ZDIyMGU0YjQsIDB4YjZmNDNiYmIsIDB4NWZkZDBlMjUsIDB4NWRiZmYzYzAsIDB4YTNkYmQzYTcsCisJMHg4ODM0ZGVhNiwgMHhiYmVkYzlmNiwgMHhmNmViZGZhNSwgMHg0ZGE3NTMzZSwgMHhjNmRlNDA0YSwgMHhhOGU4ZWVmOSwKKwkweDM0MjJiMmZhLCAweGE4Y2YyMmRhLCAweGI3NThjZGRlLCAweGMxZThmOWI3LCAweGM5ZTc1YTc4LCAweGZmM2MxMWJhLAorCTB4OWU1ZTc1ZDMsIDB4MDliYWQ5ZmYsIDB4YTMzZGZlOWMsIDB4MjdhZTM5ZjgsIDB4NmM3OTY3M2UsIDB4ZDZhM2I2ZDIsCisJMHhlNDVmYWExNCwgMHhiN2Q4YmM1NSwgMHhkZjg1N2FkNywgMHhkZWIxNzQ0ZiwgMHhmNTgxY2YyNiwgMHgxZjYwMGU3NCwKKwkweGY1MzQxOThmLCAweGU5MzAzYmYxLCAweGRhMjc2ZDBjLCAweDUxNzFiOGNmLCAweDNjOTljNjExLCAweDdhOGFjNGEyLAorCTB4MjIxNmJmMzMsIDB4NGU5M2FkM2UsIDB4OGRlZThiYmYsIDB4ZjhlYjU3ZjUsIDB4NjE1N2JmM2IsIDB4MWJkZjllNzgsCisJMHhkZjZjZjBjYiwgMHhmOTAzMTE5MSwgMHg4Y2NlZTk2MCwgMHg2Zjg5NDg5ZSwgMHgwNDZmN2ExYSwgMHhkOTdlZDdlMCwKKwkweGZmNmRmM2MyLCAweDhlZjU5YzI4LCAweDc3NGJmNmQwLCAweDdhODllYzBlLCAweDIyZGYwOTY3LCAweGZiM2NkZTQ4LAorCTB4ODNiODdmZmMsIDB4NzFiMzk1Y2YsIDB4MDI3ZDVmNGQsIDB4Yzk1N2Y2ZmUsIDB4MzliMjQ4ZGYsIDB4NWZmODE4ZjEsCisJMHhkMDFlNWVlZiwgMHhjZTVkMDVjYiwgMHgwMjIzM2QyNiwgMHg2ZThkNWZlNywgMHg0MjdmMDQ1NywgMHhiNGI4NmNmZSwKKwkweDIxN2YwZWU3LCAweDE3ZjYyYzY1LCAweDljMTM3M2M2LCAweGI5MTkxY2MzLCAweDdmNzA4N2M3LCAweGZkNDY3ZTQ3LAorCTB4OTI1OGZjYmQsIDB4YjllZmZhMDcsIDB4NjNhNDhmZWQsIDB4ZjM0ZGFkZmMsIDB4ZmE4Yzc5M2YsIDB4ZjhiN2VmM2YsCisJMHg5ZDRlNzQ2YywgMHg1ZTE3NGQxNywgMHgyYTdlMWYwNSwgMHg3NzdiZWQ5MiwgMHg5YzJmMzQyYiwgMHg3MTdiOWJjMywKKwkweDg2YjE0NzNlLCAweDJjMzljMzJmLCAweDczY2ZiY2ZjLCAweDE5NzViNzE0LCAweDE3YWFhZGYxLCAweDdhMDVlZDFmLAorCTB4MzA2MDhkN2MsIDB4NWI1ZmNhODIsIDB4ZWQ3Y2MxMWIsIDB4YzhlNzliMzUsIDB4YjhmN2Y0MzIsIDB4ZmJlOWVmZWMsCisJMHgwYmI2M2NlZiwgMHgwNWQ1N2RlOSwgMHg2NWZhNTI3NywgMHhhMWUzMWM0NiwgMHgwMzQ1ODFmYywgMHg3OWNlOWVkMCwKKwkweDNkZmQ0YzkxLCAweDgwMTI4YWY3LCAweGJhZDA2YWJmLCAweDY5OTIyYjdkLCAweDFjMzc4MzdlLCAweDM0YTJmNGI1LAorCTB4MWVhNTI5ZmYsIDB4MzczZWMwZTksIDB4ZjlmZDgyMWUsIDB4NmU2ZTE5NmYsIDB4OWE1YjY0M2YsIDB4ZDk2ZDgyOWEsCisJMHg3NWM5ZmZjYiwgMHhlNTliZmU3YywgMHg5Zjc1ZGM4MiwgMHgzYTI1ZWQ4ZiwgMHg0YTAxODNlNSwgMHgzNDhkOTlkMywKKwkweDhmZDRiMGQ3LCAweDYzODYzNDBhLCAweDY3NjdhZjIzLCAweDZmZjdiNGYzLCAweDQ5MDc1ODE1LCAweDg5Nzc5ODFlLAorCTB4OTFlN2MzZGQsIDB4NzgxMWI3ZGYsIDB4NzhlNWFmM2UsIDB4ZjYyYmJmNTgsIDB4M2I3YTBhM2QsIDB4NzA3YTI1YWYsCisJMHhmYTRjYmQzZSwgMHg3ZmE4ZDVmYywgMHg3Y2ViY2FjNCwgMHhhMmY3YTllNSwgMHgyMTg5ZGY2MSwgMHhiZjA5ZDkzZCwKKwkweDc4ZGI3ZTQ4LCAweGUzZWVhZmQ0LCAweGY1ODdmMDE2LCAweDA5ZmFlMjc5LCAweDhlY2Q0ZjgwLCAweDlmYjkxYjlkLAorCTB4ZmEwNzg3MmEsIDB4NGJjZWM1NmUsIDB4MmYyMDUzMDcsIDB4OTkzYzIwZGUsIDB4MzIxZGM3YTAsIDB4YWY0MmFiZmYsCisJMHg1NmE1YTU0NywgMHhlNjUyZmM2YywgMHg1ZjM5OGE1YiwgMHhmYzI3ZGE0YywgMHhjYTRjYTJmZSwgMHhlN2U4OGY0OSwKKwkweDYzY2Q2OGEwLCAweGVlMjRjOTdlLCAweGFmZDdjNGVlLCAweGViZTUxOGE4LCAweGIwYzk3Y2QzLCAweDI3ZTcxYjZmLAorCTB4ZmRhOTdiOWQsIDB4YjJlYzY1YjAsIDB4NWJkOGNiN2QsIDB4ZGYyZTE5NTMsIDB4ZWJiM2RjZjMsIDB4ZGZkMTk3ZTcsCisJMHg3M2UxNzYyMywgMHhkZjMwM2Y1MiwgMHhjMWJlOWVjMCwgMHhjZGViY2YyZSwgMHgyZjQwNjdjNCwgMHhlMzRkNzljNiwKKwkweGVkOTNmNWU2LCAweDI5YWZlMGJkLCAweDA3NjgzMmFhLCAweDkxZTUyM2MxLCAweGJlMzc5NjMwLCAweDYyYjNmOGVmLAorCTB4NmRmOWYxNTYsIDB4ZTFiNTViYzgsIDB4ZDlmMjJmOTIsIDB4ODg1ZmVkNDEsIDB4MzdlZWFlZDIsIDB4NzkzMjc2MGMsCisJMHgzYmFiMGJkZSwgMHhlM2M4ZjIxNywgMHhmYTZiZGU1MSwgMHg5NmQ1YmNiMSwgMHgzOWQwMzU4YSwgMHg1M2U2MWQ3YSwKKwkweDk1ZmM5MmEzLCAweDQ1N2YyNDExLCAweDczYWY3ZGM2LCAweDJkZTUxMDM0LCAweDViZWZmYjQyLCAweGNkMDQ2YzdmLAorCTB4ZjEyOTA2MzMsIDB4ODZhNDY4ZWYsIDB4NDg1YTQ1ZGUsIDB4N2QzOWZjOTcsIDB4ZjNmODEzNWIsIDB4M2Y5MjYxNDMsCisJMHhiZTYxMGQ0NywgMHg3NDMzYWM2NCwgMHgwN2M0MDM5YywgMHg2ZjNiZTIzNCwgMHgxMWEzMzlkMCwgMHgzOTE3MTgzZiwKKwkweDdkNzhjYWM2LCAweDkwNzU1MmRkLCAweDM5MjJlNWNlLCAweDFhZGEwODAyLCAweGRlZjM5NDNiLCAweDYxNjM4MjI4LAorCTB4MmViNDJhYTQsIDB4MjUyMzQ3ZjQsIDB4M2FjN2NkYmMsIDB4OTg0NDI3YzcsIDB4YzQyNTE1ZWEsIDB4YmY4ZmIxZGEsCisJMHgxZDU1ZmFlZiwgMHgzY2I4NmE0ZiwgMHg4MzcwZDRiZiwgMHg3NDEzYmFiZiwgMHhmYWM4N2RiZiwgMHg3NzZmN2FlNSwKKwkweDNhYmU2MzBlLCAweGViN2VmOTU2LCAweGRmMTViMjJlLCAweDhiOGYzYzA5LCAweDczNzNlN2NjLCAweDIzOTRlNDVjLAorCTB4ZDQ3NWUwOWEsIDB4N2FlODdiZTEsIDB4MWMyNWQ3NDMsIDB4ZmE4ZTRmZGYsIDB4MTY3YzIyODksIDB4ZWRjZmM3ZWMsCisJMHhiNjZiNzc2YywgMHg1YmY3M2ViNSwgMHhhMmYzNmI4MiwgMHg0N2VjMGY1YywgMHg3MGJlZDMyZiwgMHhiNTRlOWY4MCwKKwkweDBjZGI5Y2IzLCAweDM3ZWE5MmQ5LCAweDVjNzE3MGY3LCAweGRmYmE2YmNiLCAweDZmNWIzN2RjLCAweGJlN2MxNGVmLAorCTB4YzVlZWNmMzQsIDB4NjE1ZWY0N2UsIDB4NDhlYzEwMzQsIDB4ZDI2ZmQyZjUsIDB4MTZmMjViNmMsIDB4ZTVlNmViY2UsCisJMHg4MTlhMWUyOSwgMHg2OWVmYzE1MCwgMHg5N2U0N2NjYiwgMHgwOTVlYmNmYywgMHg4MTdmMGFkYywgMHg0MGJiNzNlZiwKKwkweGZlYjE3NWZkLCAweDVmOTRlOWQ1LCAweDllMGM4YmY3LCAweDhmYTQ0N2NmLCAweDhhYmM2MmQ3LCAweGViNWJlNjcwLAorCTB4NzFjOWJkNjIsIDB4ZmY5NzlmMDQsIDB4YjI3OWYyYTEsIDB4OTFmMjlmMmUsIDB4NmVkOWQ3Y2MsIDB4Mzc4YTZlYjMsCisJMHgwNGFkN2UxOSwgMHgzNmViNmYxZCwgMHhiMDVlZjJjYSwgMHg0ZDNjYTI5MywgMHgyNmM0ZmZiNiwgMHhkN2EyZGZlYiwKKwkweGZiZjFkMDRiLCAweGI0YTc0ZWIxLCAweDY4M2Y5OWZmLCAweGEwYWMyMzkzLCAweDk1ZmI3N2ZmLCAweDQ2ZmJjNmJlLAorCTB4MTdlMTkzNzgsIDB4OTMzY2FjN2EsIDB4NTRiNzk4NmQsIDB4ZjRjNjkwZGUsIDB4NjZkM2RiYTQsIDB4ZThkY2ZjZTksCisJMHhjMzFjMGQxNywgMHg5ZmNiNGYyMSwgMHgzYjM3ZjNkOSwgMHgyYTMzZGY0MSwgMHgxZjIxNDc5YywgMHgyMmIxNTQ3ZSwKKwkweDBjZmQ3YTBhLCAweDIxODQwZDRkLCAweDkxN2E2YWJlLCAweDRiYWU0M2I3LCAweDM5NWViOGM3LCAweDFmYTFiOTZlLAorCTB4ZGYwMGNhMDYsIDB4NzEwZTZkYmQsIDB4ODFmZmNiMmYsIDB4OTZmYWMxMjEsIDB4ZmE0NWU3ODEsIDB4MWE2ZWFkYmUsCisJMHg3ZWIwNjBmMywgMHhmZTI3Njk1ZCwgMHg3MmU1MTgzMywgMHg2YTQ1NTczZiwgMHhkNTdkMDdiZiwgMHhjMWUxYmFlZSwKKwkweDU0ZmJiZDYwLCAweGJjNzk0M2Y5LCAweGNmNzFmNGVmLCAweDNjMWY3OWQ1LCAweDZmMzkwOTllLCAweGI4YzZhNzAyLAorCTB4ZjAxMWZhMWQsIDB4ZDVmNmZkNDksIDB4ZWZkYTczY2YsIDB4ZGFmMDBiM2UsIDB4OTJmYTk0ZTQsIDB4ODVlM2VkYjUsCisJMHgzNTlmYWY5NCwgMHgwOWY3Y2Y4MCwgMHhkODVlMWQ1MywgMHg4NDc3ZGFmNSwgMHhhZGFmNjFmOSwgMHhjNWVlMTU5ZiwKKwkweDQ0ZjdlYWJhLCAweDk4NTc2MWY5LCAweGQyMWJlZmE3LCAweDZmYmJmOGJiLCAweGFkZTk4ZGJiLCAweDY2N2ZlZWNhLAorCTB4ZGFhYmI1MGIsIDB4ODllOTlmZGIsIDB4OTZlZDk1ZTgsIDB4NjQyMzU3YmUsIDB4NmQzN2I0NzksIDB4Zjc5NDUwZTUsCisJMHhjZDc5ZmE2NCwgMHhmMmUxOGVlNiwgMHhlNWMxNTUzNywgMHg1OGFjODFlMSwgMHg1MzliNzc4MiwgMHgxMzc1ODUzYiwKKwkweGJjZmRiMmJkLCAweDFmYmYyZWNhLCAweGZhMTJlOWQxLCAweDk2ZmZmYjI1LCAweDQyYmY3MTQ0LCAweDhmM2Y2YmNmLAorCTB4NTg0ZjdkNjcsIDB4OTFmM2M5YmQsIDB4YWYyMDdkYmYsIDB4N2RjYmIzNDcsIDB4N2VhNDZhMjEsIDB4ZTcyNWM0NzgsCisJMHg5ZTM5YTQ3NSwgMHg4ZjQxODVmNywgMHhkY2I3OGE0NywgMHhlZjgwOTU5MywgMHhmY2QyYWYyNCwgMHgwZDRjYjJmZSwKKwkweGQwNmUxZmMwLCAweGYyZjUzMjlmLCAweGJiNTE1N2RiLCAweGQ5NTU1ZjRmLCAweGQ3ZTczMzZmLCAweGZiZTMwZjhiLAorCTB4MTNkNTE1OWMsIDB4NmJiY2FkMzksIDB4ZjVjYjlmMzIsIDB4YTJlZWE3MWYsIDB4YTdhOTg0ZjIsIDB4ZTA2YmJmZDgsCisJMHhkOTk1NGU3ZiwgMHhlOTk4OWE5ZiwgMHhkZjgxMzM1NSwgMHg4M2Y2ZmY1YywgMHhkOWUxZmY1NCwgMHhhZjAwMTYyNywKKwkweDQ3MzUzM2MzLCAweGY2ZGJlYzI2LCAweDRjZmY5N2Q2LCAweGZlNWQ2ZGYzLCAweDM2YTNkNjI3LCAweGY4MTE2YjQ0LAorCTB4ZDNmNzcxN2UsIDB4YzU2NmJmNWMsIDB4N2U4MDJjZmYsIDB4NzQ5NTYzNTAsIDB4YjVkYjljNjMsIDB4OTFiZjNkM2EsCisJMHhmZmEyYzVhOSwgMHg2M2JmMTVhYSwgMHhiNzIyMjIzZCwgMHhiYmQ3ZjI0NSwgMHgzYTNmMWZiZSwgMHg2NWY5YmNkMywKKwkweDBlMmRkYTg1LCAweDU0ZTFhZTZmLCAweGZjZTFlN2Y1LCAweGEyMDRhYjNiLCAweDJiODYwYzk1LCAweDVjZTc3NWViLAorCTB4NDdlMDY4ODEsIDB4NzJiOTQ4YjMsIDB4YmYxMGQ2ZjEsIDB4YTg5MjUwMzEsIDB4ZGRhODhiZGIsIDB4OGY1NTI2ZTIsCisJMHg0MWRiZjQ1NywgMHgxN2Y1YTFhNywgMHhmN2FlNzdkMywgMHg4YTU3YmYzZCwgMHg3NjNkZjkyNiwgMHgzMGQ3ZmRkNywKKwkweGZlMDA0NWZlLCAweDY0Y2YzM2FlLCAweDljM2QwMjZlLCAweDU2NzRmOWRmLCAweDM0MzY5ZmIwLCAweDcyYmU3MmJkLAorCTB4N2RmNGU3ZmQsIDB4ZDhiZThlNzMsIDB4YzJkYjZmNDAsIDB4MGI4NWY2NGMsIDB4ZjRlYjI0Y2YsIDB4YzJlOWU5MjYsCisJMHhlN2VjZDkzMywgMHhkOWY3ZDQ0ZSwgMHgwOTY3YzUwNSwgMHgwODVmYmI0NywgMHg5ZTEwNjc4ZSwgMHg5NzFjZTFhNiwKKwkweDBlMWE2ZGUzLCAweDlkNjFmYmI5LCAweDZmOGUyZTJmLCAweDY3YmUwZTFhLCAweDY4ZTE0MWYwLCAweDQxYmI2M2NhLAorCTB4ZjQxZTUzNGUsIDB4OGE3ZjgzNjQsIDB4ZmUyY2E2ZTIsIDB4NDJjYTZmZWUsIDB4ZDIyZDk3ZmIsIDB4YTdjYzYzMGUsCisJMHg4ZTE0YjlmMiwgMHhmMGI1YTI3YiwgMHg2ZTdjYWVmZSwgMHg4ZGU0MjZlMCwgMHg5MjlkZWE3MSwgMHgyNTNiZDRlZiwKKwkweGI3NWQwOTdmLCAweGU4ZWQyOTk2LCAweDFlZTY0ZmE0LCAweDNlYTRiM2E3LCAweDVjODJmNDk2LCAweGRlNjU5M2U0LAorCTB4MzcwYmYzMjksIDB4NmZlMWQ4OTQsIDB4YmNjOWI3YWYsIDB4ZmQ4OTdkNmIsIDB4MzVmN2U2MTgsIDB4NGZjNGI1NjksCisJMHhjNWJmNzQ3MywgMHhkZGE5N2YwMiwgMHhmYWZlZmIwYiwgMHgzZjFjZTFlNSwgMHhjZjNlZGIzMSwgMHg3YWY2Njk0YiwKKwkweDAzNWM2OWJiLCAweGU2ZmRmZDBmLCAweGY5ZjQ4YmVmLCAweDBiODkwZGY0LCAweGVkYjZhNWVhLCAweGY2MzljMzBiLAorCTB4OGUzMmU4YTQsIDB4YjRhNjQ5NjAsIDB4NmNmYjNlZTMsIDB4YWE5MTdjNDcsIDB4NmRjMmRiZWIsIDB4ZWE1YmExZDAsCisJMHg4ZmQ3OGMxYiwgMHhlZjVlMDZlZCwgMHgyZmY5YTE0OCwgMHg1ZWE1ZTNkNiwgMHhmYWI4NDhiNiwgMHhlMzdjOTU5ZSwKKwkweDA1MmQ3Y2U1LCAweGMwMDVkNWU3LCAweDJjNWNlNzFkLCAweGVmMjE3M2U1LCAweDc5MTliYzQ5LCAweGYwYTE1ZjAzLAorCTB4ODJmMWYxNWQsIDB4OWY5NWQ4MTQsIDB4YzdmNjk0YzgsIDB4OGYyYzdjNTAsIDB4ZTUxM2RlMWEsIDB4ZDRjZjVjMDYsCisJMHhkYzAwY2ExZCwgMHhhODlkNzU4ZCwgMHg2OGU5N2FmMywgMHhhZmJmYjRlYiwgMHg4YzY4NzdjZiwgMHgzMDQ3N2M4ZiwKKwkweDFkNmZkNzdkLCAweDIwMjQ4ODcyLCAweGQ1YWI2ZTcxLCAweDViZDQyNTgzLCAweGJmNDNmN2ZkLCAweDM2YWFkZmE4LAorCTB4M2I5NzA0ZjksIDB4OTE3Mzk3ODAsIDB4YmQ0MWRmZmIsIDB4MGI2MjFiMDUsIDB4ZWQxODBmYTAsIDB4ZjIyZmFlMTcsCisJMHg3YmNkMDc5NiwgMHg1ZTMzNTZlMCwgMHhmMzk5MzUwNiwgMHhmMzk5Nzc4MywgMHgwZDA2NzE1YiwgMHhlNWRiZTdmYiwKKwkweDIxZjljYzA3LCAweDkzZjljYzg3LCAweDMzNzFkYzFmLCAweGVhODU0ZmI2LCAweGJlODU1ZmJiLCAweDg3ZjFlN2YzLAorCTB4N2E5ZjRlNzAsIDB4ZTA2ODk1ZjksIDB4Y2I1ZmYxNmIsIDB4MGI4ZjQyMGYsIDB4M2MyMTY3OGQsIDB4N2M3M2QwMmEsCisJMHg5N2E2MTQ1YiwgMHhiYTVhZTIyYiwgMHhkYzQ2NDNlMSwgMHgzMDYyNzYwNiwgMHhkZjBhNTRkZCwgMHg5NWRhNmI0MSwKKwkweGE2OGFjZmY1LCAweDY3NDRiZDliLCAweGNmZGVjYjU1LCAweGVjYjM3YTkwLCAweDVhZDM2NDc3LCAweGQwY2VlNDNiLAorCTB4M2JlM2JiNzEsIDB4YzZlYmQyMjIsIDB4MjExOTJhM2UsIDB4MzY1ZWFlY2IsIDB4ZmU4YTdjNGUsIDB4MWUzN2JjZDYsCisJMHgyYmYyNThmNCwgMHg5MjliZTU4NSwgMHgwNzVmYjI5NywgMHgzZWRkMWNkZCwgMHg2ZjRlNDZmYiwgMHgzMGYwYzA5ZSwKKwkweDliMGI5MmVjLCAweGU1MTQ0MDk1LCAweDg3NDQyMzVkLCAweDhiZjExZjdmLCAweGYxMjEwZGE1LCAweGUyNDI2YjlmLAorCTB4Y2I5OWQ2ODIsIDB4ZjdkYWVlMTcsIDB4NTA0NzEwZmYsIDB4ZTM4Mjc4ZTEsIDB4Njc4Y2FlMmUsIDB4NWU4MDFmZjQsCisJMHhiMDRhNzk1OSwgMHhhOWYyYWE3ZCwgMHhlNWNjYzI2ZiwgMHhmNWYzNWQ3MiwgMHhhZGU3MTg3NSwgMHhmMWNiNWRmMCwKKwkweGFhY2I1NzdiLCAweGEzZmUzOGUyLCAweDRiYThlOTczLCAweGNiNzM4NTNiLCAweDVlYWY3NzM4LCAweGYyOTU1MWI3LAorCTB4ZmQ4NGI3YmMsIDB4OGU3NjkxYzgsIDB4ODg3NmFjOGIsIDB4ZWJjZDA0NDAsIDB4ZWJkZDk0NTAsIDB4ZDY5N2VmYTIsCisJMHhiMmJjYjE0NywgMHhlODVjZTQ4MCwgMHgyNzBhOTQ4YiwgMHg2MjdhNGRjNywgMHhiYmM0ZWVkMCwgMHhkNTY1Y2IyYSwKKwkweGQ1MWUxMmYxLCAweGIwZmM1MWJmLCAweGE4YzM1NzFkLCAweDMyOTNmYzhiLCAweGQ4MDQ0OGJmLCAweGYyM2EwYmJlLAorCTB4ZjgwM2FkMDYsIDB4NDY4YmNlMGIsIDB4NTk1NjVmYTksIDB4OWYwMGZiMDMsIDB4YWI2ODczOGUsIDB4YWQxNTVlYjksCisJMHhjODM4YTNmMywgMHgzNWVmZTY3YiwgMHhkN2ViOGRhMiwgMHgyYzI2ZmFlZSwgMHgzZDkwN2JmOCwgMHg0MzVlZjU5YSwKKwkweGY5NzU1NmZmLCAweDM4NjVmZDRhLCAweDIwNzQ0ZmNiLCAweDZjYmU4Mzg0LCAweGVlYmVkY2JhLCAweDY4MjM5MjFlLAorCTB4N2IwZDJiN2QsIDB4ZGYyOTVhZjgsIDB4OWU1MWIyZGQsIDB4Njc5ZjI0NjMsIDB4ZDZlYjRlMDEsIDB4ZWY4NjdjOTIsCisJMHhjZTIwNmZhNCwgMHhmNzBhMmM0NCwgMHhlYTVlZjk0YiwgMHg2NzY2ZWIwYiwgMHhmMmY0NWNiMSwgMHg0MDBhNWUzZiwKKwkweDQ4N2I2OTFmLCAweGJhZDJiYjYxLCAweGJhZWZkOTdjLCAweDM5NzNmYWZiLCAweGUzYzJhN2Y4LCAweGI2MWNiMTg0LAorCTB4ZGU1MThhNmUsIDB4NGY5MWY1ODcsIDB4Yzg2NGM1MzAsIDB4MWVmN2ZhZjksIDB4NGJkZWZlNmUsIDB4M2VjMTY2ZjUsCisJMHhiMjc0MWUyMiwgMHhmYjkwYzQ3ZCwgMHgyZWJlYjkwZCwgMHgxYWM5Y2I1NiwgMHg3NWZlYjlkNiwgMHhmMDUxNmRiMSwKKwkweGY4OGE4OWJiLCAweDZjYjcyNWVmLCAweDM2ZTNjZmQ2LCAweDJhZmMzZjVhLCAweDgzZTI5NWM3LCAweGY1MTk4ZmYwLAorCTB4NzNjOTY2NDYsIDB4ZWY1OGY4NjUsIDB4ZmIxZWJkMTYsIDB4NTMyZGNhNWYsIDB4ZTY4ZWJkZWUsIDB4YzViMGZlNTUsCisJMHg4MWExN2IwZCwgMHg2NmY1ZTEwNywgMHhkN2M3MGUwMSwgMHg3NzQwMGIzYSwgMHg3YjRhYzdjMywgMHhjOTdjOTFkOSwKKwkweDBhODYyM2U3LCAweGFiMWEzNzhlLCAweGNiMzYzYmY3LCAweGMyOTM0YTYyLCAweDlmYTkxZTg5LCAweDFlZDI0NWUzLAorCTB4OThiNDM1MWYsIDB4MTMyNDk2ZWQsIDB4NmUyYWViY2MsIDB4NGZkZWIyNjUsIDB4ZjdmOGJkYjksIDB4NGY5OGJiYTMsCisJMHg0YTE0NWQwNywgMHg2ZGY4ZmJmOSwgMHgyZjM5MjZjYSwgMHgwZTI3YzcyZiwgMHhmNmM5YzA3ZiwgMHgzOWZhZTNjZSwKKwkweGU4ODFlMDY0LCAweDBmY2IxODY4LCAweDBkOGI1ZjNhLCAweGEwYjU5YmExLCAweGEwODc5YzA3LCAweDZlOTgyNTA3LAorCTB4OGI3MTc0Y2MsIDB4ZWUyYmUxMjIsIDB4YmFmN2YyOTMsIDB4ZTgzNzk5NTgsIDB4ZjEzZmY0ODIsIDB4MjI5YmEwYmYsCisJMHg0ZWVmZjBjMSwgMHhkYmQ2MzQwZiwgMHg3NDQ4MWU5ZCwgMHhkMDc0MDhiMCwgMHgwZTg0MmY1MSwgMHhlYzNmZDU4NCwKKwkweGE1NDJmY2RiLCAweDJiODc2MjIzLCAweGFiMTQ4Mjg0LCAweDE3Y2UyMWYwLCAweGViYzMyNDY3LCAweGIxMWZhYjFlLAorCTB4MTJhZGJkNzgsIDB4OTJhYzdkMmYsIDB4ZjFiNGU4ZWUsIDB4N2Q3MDE3ODUsIDB4NGI3ZGUyMmYsIDB4YmMyODVjMWUsCisJMHg0NTI0YmY1NCwgMHgxZmFkN2RiMCwgMHg3MTMxNTVjOSwgMHg0NTIwNGVkYywgMHhiYjBhOGU1OCwgMHg1ZjY4YTUxMywKKwkweDJmZmIyMzEyLCAweGZlMzgyOWU5LCAweDVhZjNmYThlLCAweDM2ZTY3NGUyLCAweGMxNWVmZTFjLCAweDQ3ZGEwNTcyLAorCTB4OWY3YjcwMTcsIDB4NWFmN2I2NDUsIDB4MjE5YmVkMjksIDB4OTViNjk4ZjUsIDB4NWNiZjFjNjEsIDB4MmM5Zjc3NzIsCisJMHhiMWM0YzlkMCwgMHhhMjM5M2E2NiwgMHhkZTkxOTVkMywgMHg4ZGQ2ZWQ5NCwgMHhmMDI0OWU3NSwgMHhmZTg2ZDI4MywKKwkweDNiZDRkZTdjLCAweDAyNzdhYjhiLCAweGIwNDdjZjlmLCAweGVhYjI1OWZjLCAweDYxODY5M2M3LCAweDdiYzQyZjdlLAorCTB4OTMzM2MyODAsIDB4YTgzZmIzYjcsIDB4NGZmNjYxYjQsIDB4YjRiZTg0M2UsIDB4MmJkZmM5ZDUsIDB4NTlmNWI1YjIsCisJMHhmNzE1ZmY5MCwgMHhhMWY0OWRkYywgMHg3YjAxYzY3NCwgMHg5YWQ3YjUxMiwgMHg5NTdmOWNhNiwgMHhlZGJlYzlkMiwKKwkweDk4OWU0MGVmLCAweGZhZTU1ZDNjLCAweDNmYjQ4NTkzLCAweGNlMzkwNjhiLCAweGQ2ZTdkZjI0LCAweGQyNmZlYTI0LAorCTB4NjljMzg1MjgsIDB4YTk1ZDNhOGUsIDB4YTQwZmMxYjcsIDB4MmNhOWY3ZTMsIDB4ZTQ3Zjk3NDUsIDB4NTU5MjgxM2QsCisJMHg3M2QyYjI3ZCwgMHhjOTIxM2ZlMSwgMHhmZDM5MGJiOCwgMHgxOGZlYTM1MywgMHhhNWU0MDM2NSwgMHhmZWU0ZTNiZSwKKwkweDFmYTNlYTMzLCAweDRiM2E3YmY0LCAweGQ1YmY1NWNhLCAweDA5ZTQ2MmUxLCAweDdjYmY1Y2FlLCAweDhjZDFkODc1LAorCTB4NDBiNmE0NjgsIDB4ZmRlOWE1MzYsIDB4NzU4NGJlYzcsIDB4ZTMxNzRjNGUsIDB4NzdlZTAzZDcsIDB4Y2YxMzYyYWEsCisJMHhmOTg0YWRiNywgMHgxYjk2NTQ0MiwgMHg0MjkxYWJmNCwgMHhkNmUzZmFjZCwgMHg4ZjI3Y2NmZSwgMHg3YTNiNjk4ZSwKKwkweDZlOGZlNTM3LCAweDhjZWQyNDFlLCAweGJlNjE3ZGJhLCAweDcwN2NiMDRiLCAweDc3ZTQ4Yzc0LCAweDk4MjM5YjZkLAorCTB4NWFiODhmZmUsIDB4M2RhNGUyYTMsIDB4NjUwZGVkOGUsIDB4YjY3YzQ5M2EsIDB4Zjg3ZWZlYWMsIDB4ZWQyMmNiYjksCisJMHhjYzdlNzE0NywgMHhjNzFhNjg3ZiwgMHg1M2FkOTQyNywgMHgwN2I4NjEwMywgMHg2ZjZjYzZiMCwgMHhkZWQ0OGFhOCwKKwkweGI1MDg3ZWM2LCAweDA3ZGE4NDFiLCAweGEzYTAzMzQwLCAweGQzMGEzNWYyLCAweDhmN2FkZjYxLCAweDljZjk5OTNkLAorCTB4Y2FmYWMyZTIsIDB4NzBmZDAzMjMsIDB4OWM3Yjk0MGUsIDB4ODU3Y2M3MWMsIDB4ODI2YmUwZmQsIDB4YjlkODcwZmIsCisJMHhiNTg5MDcwNSwgMHgwMDlmNmI2NywgMHgyNThkMjU0ZSwgMHhlNDQ2ZWZhYywgMHhmYWJmY2M2YSwgMHhlYzE3MDRhYSwKKwkweDI2ZmU5ZDE3LCAweGJlMGI1ZWMyLCAweGM2NGQ2ZDY0LCAweDk2NTVmY2JlLCAweDMxMzBmMTliLCAweGM5MTU5NWNlLAorCTB4ZmJlNGVkNzQsIDB4YWU2ZDQ3MTEsIDB4ZThlZmNjMmMsIDB4ZTcwNWE3NGEsIDB4OTIxNWM0ZWQsIDB4MzlkZjY5YmUsCisJMHgxZWUxOGY3MCwgMHgzZjA3MDhhYiwgMHhmYjI1OWFkOCwgMHg1YWRjYjM5ZCwgMHhiZGYyOTFiYywgMHgxNTFhYzIxZCwKKwkweDY3Y2FmYTA3LCAweDVmZDg1ZWZhLCAweDc1ZTYyZGZiLCAweDA0NjIxN2VhLCAweDM1YjI4OWU0LCAweDc0YmNlNTZiLAorCTB4OTZkNjEwZmEsIDB4ZTcxYTc4YzIsIDB4MDJiNGU2ZDQsIDB4ZTQzYTAxZDgsIDB4ZGI2M2ZlZGIsIDB4YmEwZWM3MDEsCisJMHgzZDMwYWU5OCwgMHhjMTBlN2FkMCwgMHhiZmRlOWM4ZSwgMHhlOWNhMzJmNCwgMHhjYmQwM2VmYiwgMHg3ZTgxYjFjNCwKKwkweDUyMmYxYjg4LCAweGI2YmUzOGFiLCAweGUwNzg0OTNkLCAweDZkMTc2Yzc3LCAweDkzYjQ4ZjJjLCAweDY3YmUwMjNjLAorCTB4OWY4MzE5ZjAsIDB4MWQ3ODVkMTAsIDB4ZGVmODlkODksIDB4MjI1MzQ3NTIsIDB4Y2ViNWJlMWUsIDB4NzViM2U5YzEsCisJMHg3ODI1NjEyZSwgMHhlMjRiYWI2ZiwgMHg2ZTc1MGJmYywgMHg3MmVhOWI0ZSwgMHg3NThiZmJmOCwgMHhhOGVmY2UxZSwKKwkweDk3ZjljMTFiLCAweGRmOWNiY2ViLCAweGQzODEzNzU1LCAweGY5OGFlYjU3LCAweDA4YWZjMWJiLCAweDBjOTdjYzNlLAorCTB4MjdmMDYzYmUsIDB4M2UwY2JlODMsIDB4NzM1NzRhMTUsIDB4MTdiOGNjMDksIDB4MWY5OWVkNDEsIDB4ZWIxMDdjMWEsCisJMHhmMjc0MTRiMCwgMHhlOWNmMDMyNywgMHgwOTJmYjE0YSwgMHhjZWI0NTBmYywgMHg1MjI4ZmYwNiwgMHgwYWZmM2RjZiwKKwkweDIyYmRiOWMxLCAweGVkMjJlZDkyLCAweGY2YzFmMjQyLCAweDA3OWYwNzQ4LCAweDBiYjE3NmE5LCAweGRiZmE4OWY2LAorCTB4MGVlZjQ3YmMsIDB4YWQ2Zjg3M2EsIDB4ODgzNTg0NTAsIDB4YzRiYzdmOGUsIDB4NzQ0MWFjMjksIDB4YWM1OTZmM2MsCisJMHhkOTY3M2YyOSwgMHhhNGY0NmZmYiwgMHhkMThkZGZmZSwgMHgxZTY5YjM3MiwgMHhlMjc5N2U0NywgMHhmN2QxM2ZmMSwKKwkweDRjZjJmY2RmLCAweGYzNGVmMDI2LCAweGM2MDhmY2Q4LCAweDlmNWMyYmJkLCAweGQ3OWNhYjQ3LCAweDk3OTY3NjVkLAorCTB4N2Q0Yjg2ZmEsIDB4ZDRiODZmYWIsIDB4MDhlM2YwYjcsIDB4YTIzZGNmOGEsIDB4MmQyNGEzZTMsIDB4YjFhNzlkZjYsCisJMHg5YmFlZWM2ZiwgMHhiNDRlYzA0NywgMHhmYTRiZGU1MiwgMHhmMmEzZjgwNCwgMHgyYmY4ZThiZiwgMHg3MGM2MTY1ZCwKKwkweGY3ZDA2ZDJkLCAweDM2ZGM3MDZiLCAweGIyNThmNWMxLCAweGYxNGVmOTYwLCAweGQ3YmYwMTBhLCAweDAzZDg1ZmIxLAorCTB4NjM4ODJiMjQsIDB4NDBhZmMzOGEsIDB4NmJlNTIyNzYsIDB4YWI5OGVjMGUsIDB4ZTQxMWY3N2YsIDB4MjFkOTY1NzYsCisJMHg0NzM1YjM5NiwgMHgwODdmYzcyNCwgMHg3MDVjZWQ5ZiwgMHg4M2IyY2E3ZiwgMHhmNmI0NGY1YywgMHg0NjZmYzUzNiwKKwkweGMxZGFmNTBjLCAweGMwZTM0MDM3LCAweDdlY2U2OTVmLCAweDFhMmVmZDgxLCAweDU0N2ZiZTE1LCAweDVmMmY3ZmFlLAorCTB4YTJlMjk4YWQsIDB4ZjJhYjY0NjcsIDB4OTU5NjQ1ZGUsIDB4NDI1OWYzZDMsIDB4ZjkxYTQ3M2YsIDB4OTZlODMyYmMsCisJMHg2MWM3MDhmOCwgMHhkYmU2Mzc5NiwgMHhlN2YxMDQxNywgMHg1OTdiZmQ1MiwgMHhhNzE0YzU4ZSwgMHg5ZDk2N2Y3OSwKKwkweGNkOGYzOWZiLCAweDliZGVmZDQ5LCAweGNmOWY2ZTkzLCAweGY3Y2RjZmZjLCAweGE1ZmE4YzA1LCAweDYwYWIwNTM5LAorCTB4ODM1ZDJlNGYsIDB4ZjZjZWE2YTgsIDB4N2Q1NmQ5MjUsIDB4N2ZhOTJlNWUsIDB4OGI1Y2U4MzksIDB4MmVhMmY4ZTIsCisJMHg5ZTQzMDdjZiwgMHg0NzVmODUzOSwgMHhlZjU5ZmNmMiwgMHhiOWUxN2NhYSwgMHhhYzhmZTAxNywgMHg5ZjE4NzNmYywKKwkweDc1ODM5NTUzLCAweDdmYWU0YWZiLCAweDgzOTYzNGY4LCAweDcwY2E5MWJjLCAweGZmMTJlMWM4LCAweDM1ZmRjZjg1LAorCTB4YjU1ZDcxMWEsIDB4OTdiZGE0M2IsIDB4NmI0OGEzZDIsIDB4ZmI2MGFhZWUsIDB4ZjY4NzhkNWUsIDB4YWRmODFjNDksCisJMHhmYWZmZWZkOSwgMHhmYmU2N2YwYiwgMHgxNGIwODQ5ZCwgMHhlMzk4NmUzZCwgMHg3Yzc2NmFkNCwgMHhiMDZiZjFjYSwKKwkweDcyODZmOWM3LCAweDFkNWYxYzdmLCAweGY5NTZiZWRhLCAweDQyNTdmNTlhLCAweDY4YTdjMzJjLCAweDNjODk5N2NmLAorCTB4MTI5NzlkOGYsIDB4Zjc2YWU3YzEsIDB4MmFlYzRjYWMsIDB4MWZiNDI4OGUsIDB4YjBjMWNlMjMsIDB4MzU4YWQ1ZmYsCisJMHg1OWNmYzM5ZiwgMHg5Mzg0ZDc3YiwgMHhmZjY1ZGU5MiwgMHhjYTFlZWRhMSwgMHgzMTM4NGE4ZSwgMHhlZWM2MjA1MCwKKwkweDU4OTNiNjJhLCAweDJjOWZjNzA1LCAweGVkMzhlZGQ1LCAweDYzZjY0Y2ZlLCAweGQ3NzcyNzc3LCAweDI0NDZhN2FlLAorCTB4ZGQ1YmI1OTIsIDB4YmViMzg4MzEsIDB4YWU4NGM0MjgsIDB4YjY0OWY0ZjAsIDB4ZDNjZjZiOTQsIDB4ZmIzZjgyM2UsCisJMHhlNTk1MzZlMiwgMHhhMmRiOGJjYSwgMHg2Y2Q0M2Y3OCwgMHhlMjIwZjA3YiwgMHg1MjllNmIwNCwgMHgyZDU4ZWRkOCwKKwkweGFmY2UzODVhLCAweDFjMmE4NzY2LCAweGVjMWRlN2MxLCAweGNmZGRmMTQ3LCAweDUxNzNmMTczLCAweDhiNWY0MDRiLAorCTB4NjZlZjE0OWEsIDB4YzNiYjRmOWEsIDB4NjgyM2QzMWQsIDB4YmU4MGFmM2UsIDB4ODcxNzM0ODgsIDB4ZmY0NzBkMzUsCisJMHgwNzlmZmNjNiwgMHgzNzkyMGI3ZiwgMHhjODNmMzUxNywgMHhlZjU0OGRmMSwgMHhiZjM3Y2IwMiwgMHgzYzM4ZTA4ZCwKKwkweGMxZGVjOTNhLCAweDE4NmVjZjNjLCAweDQ1ZjVmZWMyLCAweDU4NmJkYjRkLCAweGUxMTZkODNlLCAweDhjZTllOTgyLAorCTB4ZTQwZjdjY2QsIDB4ODFkZTNlODAsIDB4OWM4ZjI5NmMsIDB4NjdkMWVkZDUsIDB4MWY1OTUwNWYsIDB4MmZiMTNjYzIsCisJMHhiODcxZThjZiwgMHhmNTM3YmI0NiwgMHg0YjY2NmY3NiwgMHg1YjI2YTdmOSwgMHhmZWEzNGZlZSwgMHhkMWEzYTZhMiwKKwkweGM5ZmVhOGZkLCAweGZhNzNlZjVkLCAweDE2NmZiZWJlLCAweDNkZjBiNjQ1LCAweDIyM2I5M2NmLCAweGM5ZTA5ZWY4LAorCTB4ZmUzOWZmMWQsIDB4N2NlZjFhMzUsIDB4MjUwNDk4ZDMsIDB4Yzg5ZDlmNjgsIDB4YmE3ZGM5YjYsIDB4ZjMyZmM2NDEsCisJMHgxM2Q2MTcyNSwgMHg2NzNkNzg5YSwgMHhhYzI4YTViNywgMHhhNGRlMDMyZiwgMHhmMWRkOWZiNywgMHgzNjQzZGYxMiwKKwkweDFjMWZlYmU0LCAweGIxNGIzODJmLCAweDE4YTNkYzg2LCAweDhkNzIwODNkLCAweGQ3YmY1NWEzLCAweDYzZGJhNmQxLAorCTB4YWZmYTZmZmUsIDB4NTkyN2JmZDEsIDB4ZTQ3MWY1OGEsIDB4YzQ2MTBkM2QsIDB4YmQ2NGI4NmYsIDB4MjdiNzM1MjIsCisJMHhjMWRjZGRmNiwgMHg5N2I4OTllZSwgMHg3MTkyZGUyZCwgMHhmYmI3YTI5NywgMHg3MzdmZTgxMSwgMHhiYjY3OGRkZiwKKwkweGJiOWI1MmNiLCAweDFjNWZmMjI3LCAweGUwOTU4NTI2LCAweGNlODg3NzMzLCAweDg3NWE5MjU3LCAweDM0N2JiZWMxLAorCTB4ODYxNWNhNGQsIDB4YjU2YWFkM2YsIDB4YmYwNGJjMjIsIDB4M2U2NzQ0NWUsIDB4ZDBhYWZkZTQsIDB4NDljOTA3NjAsCisJMHg1NjNkN2M2NywgMHg3MWRhZjE2MSwgMHg5OWQ5NDYzZSwgMHgzYmI3ZWEyZSwgMHg3NWJlYzEzNywgMHhlYzdjMmVjNCwKKwkweDI5ZDE3YjdmLCAweGQyZTkyN2ZkLCAweGY2MThmMjBmLCAweDcxNTVhNTE3LCAweGQ4NzhhYzgxLCAweGE5YmE3NGYxLAorCTB4NDFlNTRhOWEsIDB4MjliNTUzZjQsIDB4ZWEzOTA1OTAsIDB4MmJkYTVkOWMsIDB4YTlmZDBlNTEsIDB4YWJkNjQwYWEsCisJMHhmZDE0ZTlkNywgMHg2OWEzZGZhMCwgMHhmNzJjMGJhZSwgMHhkMDEyOGNlZSwgMHg0NGFmMmMzZiwgMHhkM2M4YmI0OSwKKwkweDQxNjE0ZGNlLCAweDFjYmY3NmU3LCAweGM3NzcxMThiLCAweDY2ZGY0YWZlLCAweDBiY2MzZjM5LCAweDdiMjJmY2YyLAorCTB4NWRlNDE2NjMsIDB4ZDE0NWRjNjMsIDB4MzlkZTNjOGQsIDB4ZTE0NWJjN2QsIDB4YTM5ZmQyOGQsIDB4M2VhMjExYzcsCisJMHhlYzEzNmY4ZiwgMHgyNjdiNmE3NywgMHgzM2U2ZTU4YywgMHg2MzJmMmRjOSwgMHhmNGNmMzNmYywgMHhhMzg3YjhlNywKKwkweGJiMDVmZTY5LCAweGYxYzlkY2I4LCAweDg2Y2Y5NWU3LCAweGQzZGYzMDA1LCAweDVkYjE0NGNmLCAweGNhNGRiNGViLAorCTB4MTJhM2E3NjMsIDB4MTQzYjFlNTksIDB4ZjY1Y2YwZjUsIDB4YTYxNTNkNjMsIDB4NWE3NDJlYzAsIDB4OTQyNGY2MTEsCisJMHhmMmMxZWU2ZiwgMHgzMmRkNjU0MCwgMHgxMjU0ZDdmNiwgMHg0YjFjODE3YiwgMHg3ZmM4MDRlOSwgMHg2N2Y3MzdhNywKKwkweDM3ZTlkMTdiLCAweDQxNWNiZTU1LCAweGJiZTM1N2RmLCAweGZlZTcxYTI2LCAweDA4ODBmNThjLCAweDc5OWUyM2I2LAorCTB4ODNmZDZmZjYsIDB4NWE0NjNiZmQsIDB4M2VkOTk0ZjksIDB4NTE4M2QwNjYsIDB4ZjkyMzk0NWUsIDB4ZDQ4ZTUxNjAsCisJMHg3MWM4NmU1MywgMHhkMTFkNWE3MSwgMHhhZjNhNzBmNCwgMHhjMjA3ZjI1MywgMHhiNDgxZWIwMywgMHhlZjYxMTMxZiwKKwkweDNiYjRkMjNmLCAweDljMDQ4OTUxLCAweDA5ZmY1OTAzLCAweGZhOTU2ZmI4LCAweDM2NmQ5OWQ2LCAweGJlNTU1M2Y2LAorCTB4M2I2NWU1MTIsIDB4ZjE1N2RkZDQsIDB4NTU0YWM5N2QsIDB4MTY5NWUzY2EsIDB4Zjk1MGRmNzksIDB4ZmZiNjU2ZTUsCisJMHgyY2UzM2ZkNCwgMHhkZTA4M2MwMCwgMHg2ZGI2ZGZhYywgMHhlNDcxZjU1NiwgMHhmNGI3YTdiOCwgMHg4MDhkN2U5MSwKKwkweDEwNzk3ZjllLCAweGM2MjYzNWZiLCAweDU5NTM3OTg5LCAweDA3OTBkYWNlLCAweDJhN2E1ZWI4LCAweDY5ZmVlMzgyLAorCTB4MzRlMjJmMWMsIDB4NzNmNjdmMmEsIDB4MDU5OGNmMDksIDB4YzFkMDI3YWMsIDB4NGFiOWZjY2QsIDB4NzdkNWNmZTcsCisJMHhmYjgzMTM1ZiwgMHg5NTVkZTIxMCwgMHhiMjVjNzllZiwgMHhmZjgyN2E3YSwgMHhkMWViYzI4NiwgMHhiZjNmOWQxYywKKwkweDgzZjMzOGZjLCAweDg4MzdkYTJhLCAweGZiYWM1YjBmLCAweGFiM2YxNzEzLCAweDc4Yjk1Y2IwLCAweDMwOGYzNWQ1LAorCTB4MjZjNzdkZGYsIDB4NWNlMjJmNzAsIDB4YzFkMTgzZDMsIDB4OTFjZmE4ZjgsIDB4YmRiM2IwZmMsIDB4YTYyZmViODcsCisJMHg1YmZkYjJmYSwgMHgyZDlmM2NkMSwgMHgxM2U2MGYzNiwgMHhkZGVmYzc4YSwgMHgwN2Y1NTlmZSwgMHgyMjZjYWZiNSwKKwkweGNhZWYyMmY5LCAweDJkMTI1ZmY1LCAweGY4MzNmZDNmLCAweGZiMjczNmNiLCAweDdjZmYwOTUxLCAweGFkYWNlYTNmLAorCTB4N2ZkNjAxNjksIDB4ZjMyNzc5ZjYsIDB4NzJiMWIzOWQsIDB4ZjNhNDlmZGYsIDB4Zjk4ZDk3ZDQsIDB4YjY2YmY0ZGMsCisJMHg5YTYxZmNjYiwgMHhkMGI0MzljMCwgMHg5OGQ3ZWU2ZiwgMHg5YjFjZWFkNywgMHg0Zjc4YjdhNCwgMHhkNTQ0ZmMwYywKKwkweDQ3ZjQwZjg0LCAweGI3MTFmOWY4LCAweGVkYzZkNzdmLCAweDQwYjNkNzQzLCAweDRmYjFkNzZmLCAweGJhNjA4ZjlmLAorCTB4ZTI0YmRiMzksIDB4ZDkwYmVjZTUsIDB4OGQxZDllN2MsIDB4ZjM0ZWY0OTUsIDB4NzRkZTg1NGQsIDB4YjhhNjU2MzYsCisJMHhhODdhMDQ5OSwgMHgzODdhNDk3NCwgMHhlZDg5YTYzYiwgMHhlZDk1NjcwMiwgMHhjOWI1MWU5YywgMHg3NGNiOTU3NiwKKwkweDVmZDEzYjdmLCAweGI0MDdlODEyLCAweDYzYWFiYjA5LCAweDE5ZTQwYjRkLCAweDA1ZTFmOWYwLCAweDRmNzAwNjljLAorCTB4MGU4ZWQ0M2IsIDB4ZDdmOWM1M2EsIDB4ZTMzM2VmYWEsIDB4ZWJmNjA1MWQsIDB4ODlhNzlmYjAsIDB4YmE2YmM3ZWYsCisJMHhlZGI1NTkzYywgMHhmMDI1N2Y0YSwgMHg2MTRkYjU1NCwgMHgxOTdmZGE3ZiwgMHgxM2FjZDBmZCwgMHhkMTAwM2YwYywKKwkweGMyOWY2MmU1LCAweDZlMmMyMmVmLCAweGZiMTE2ZGI4LCAweGJkYWM5NmQzLCAweGFjNmY3NDE1LCAweDZmN2ViMTYzLAorCTB4ZjJhMmE4ZmMsIDB4NjkzYThlN2MsIDB4Mzk1ZWU0ZmYsIDB4ZGZkZjAxOWUsIDB4ZWYxZDI4ZTcsIDB4ZjM4Y2I4NzUsCisJMHgzYmYwZjY4YiwgMHg0NzQ5NmUzOSwgMHhmZWE0NmQ5NCwgMHgzNTk0MWFhYSwgMHhhMTlhNGUzYywgMHgxOWY1Y2FlNywKKwkweGQ4YjAyMjcwLCAweGFhM2JlNzYxLCAweDZlZWVkM2RmLCAweGJiM2NjNmZkLCAweDlkMzFjZjliLCAweDkzNGQxZmNmLAorCTB4ZGVkYjkzZjcsIDB4MmZjY2Y3OTYsIDB4MjYyNDNkN2QsIDB4NDFlNDViZWUsIDB4ZjQ2MDYxYmUsIDB4ZDA2M2I4ODcsCisJMHgyMmYzZjUyMCwgMHgzNWY2MWNmOCwgMHhjZjM0ZWJlYywgMHhmZjY2MGRhYywgMHhlNjUzY2U0ZSwgMHhlNjZkODBmYywKKwkweDczMGVlZTdjLCAweDljZDlhZjNlLCAweGNlNmViY2Y3LCAweDBlZTMwOWZmLCAweGY0MTM4NGViLCAweDQyMzVjNDZmLAorCTB4ZmQwYTQ2ZmYsIDB4ZjUyNjFkZGIsIDB4N2ZhMWU0NmYsIDB4OGRmZTg1MjMsIDB4OTFiZmQwZWYsIDB4M2M4ZGZlODcsCisJMHhhMWU0NmZmNCwgMHhmZTg1MjM3ZiwgMHhmZWVlZWY4ZCwgMHhiYTU1NGUxMiwgMHhlMDc4MTRiZCwgMHg0ZWRkYmFiOCwKKwkweGY3ODEzZTIzLCAweDg5ZDljNWNiLCAweDU1ODU0N2NjLCAweDE3MTdhNWVhLCAweGQ4ZmNiMmU1LCAweGUyOWE2ZjYxLAorCTB4MTE5MzdiNjAsIDB4YWQxODk1OGYsIDB4MWM0N2Y3ODUsIDB4MmFiMmQyODAsIDB4YjFkYjhkMzksIDB4NTVmNmJhMWQsCisJMHgyYWFlODc2OSwgMHhlZWMyNDY3MCwgMHhlNGYyYmFkMSwgMHhhNzNkODgyYSwgMHhkNDE4YjRhMywgMHhkYjZiNjhiZiwKKwkweDJmNTZmODAyLCAweGZmN2VjMDNiLCAweDc3ZWVlNWQ2LCAweDYzZjg5M2FmLCAweDVmMTE4YmZiLCAweDBmNzM4MjU1LAorCTB4MjVmNDliN2MsIDB4NzFlZTc3MTksIDB4NDM1M2RiMDQsIDB4NGQ2MjQ0ZmQsIDB4ZDNmMjFlNTAsIDB4ZDQzZTczM2EsCisJMHhlNmJlMDQyZiwgMHg0NmFiZWQzNSwgMHg2YzZmYzdjNiwgMHhmYmUwYzk2ZCwgMHhlMGUzM2U5ZiwgMHhlYTlmNjlmYiwKKwkweGNiMzEzYmY2LCAweDIxOThmMmMxLCAweDFiY2UyM2NmLCAweDlmN2E1OTcwLCAweDk1ZTcwOWIyLCAweGMzMWM3ZmE3LAorCTB4YTY1MGZkYjksIDB4Njg2MTdlZTksIDB4MDg3OTc2NWEsIDB4ZjkxZGYzY2IsIDB4ZTMwNThhMzUsIDB4YmU1ZjRmOTQsCisJMHhjZDZhZjU4ZiwgMHhlZGQyZTdjYiwgMHhkN2IyZGNmYSwgMHhlZWYzNGM1YiwgMHhkMTM3MGZlZiwgMHg3MWFkYzBkMSwKKwkweDVlY2M3ZTIxLCAweDc3ODNmYWE2LCAweDMxZjg4N2E1LCAweGE3Y2E5ODA3LCAweGJlNjIxOWFkLCAweDhkN2M1ZjhmLAorCTB4YmRhZmJjYTksIDB4YTFjZjZlMjMsIDB4ZmNlNGI5ZmIsIDB4YTVjZWIyNWMsIDB4NmY1ZTAyYzgsIDB4YzU1NGJkNjgsCisJMHg2ZmY4MjdmMywgMHg0ZTUyZGJjNSwgMHhjNjczYTcyZCwgMHgyYmJmYWYxYiwgMHg5ZDdmMDA1MiwgMHg1N2UwMzI3NywKKwkweDg1OGI2NGQxLCAweDNmNGNhZDlkLCAweGYzMzJjNDg3LCAweDE1NjE1Y2I5LCAweDI3NWM1NzNlLCAweDg0Yjg1NWRkLAorCTB4N2ZkYTk2MzcsIDB4NjU0YzZkNjksIDB4NDdlNWZhM2EsIDB4Njg4MTJhYTksIDB4M2M5NjgwZDEsIDB4ZGU4YmFmZTgsCisJMHhlODM4NzI3YywgMHg5OGRkNWFhYSwgMHgzYmYyYTJlYSwgMHg1YzE2ZmYxNCwgMHhiNzEzM2YyMCwgMHg5NTI0NzEzZCwKKwkweDQ5NWFhOTI3LCAweGFhNzNjMjdmLCAweDFjZmY3MDJkLCAweDE5ZWRkMWYwLCAweDdjYTRlZjAyLCAweDY4YTVlNmJhLAorCTB4ZTlkNDFmOGUsIDB4MGFlNmQ1MmYsIDB4NmM2YzFkMDcsIDB4ODE0ZjU5NTQsIDB4ZWI4ZDRjZmQsIDB4OGQ4ZDkzYTQsCisJMHg2YmQwZTFmMSwgMHgzZTI4YzYyYSwgMHg1YzA2YzdjOCwgMHg4NTA4ZmEwYywgMHhlZmVmYzkwNywgMHg5N2JkNjliYSwKKwkweDk0ZjdjOTBlLCAweDc1MmU3NThjLCAweDQxYTJmYWM5LCAweDA3ZGUzN2I2LCAweDVjN2JkNjMwLCAweDM3MmI0N2Q3LAorCTB4M2I3NTkxYmUsIDB4N2ZkNzNmN2QsIDB4N2UxYjllNWYsIDB4YmM1ZGJhZGMsIDB4NmQ5NmM1ZWUsIDB4N2QyOTkyNWIsCisJMHg4NWRkYTFjNywgMHg3YjdkMmQ3NSwgMHgxYTQ4ZjQ1YywgMHgzMjZkY2JlNywgMHg3NWIzZmRhZSwgMHgyM2UxM2U0ZiwKKwkweGUzNzc3YTdlLCAweDBmZTg3NjkzLCAweDlkYmY1Njk1LCAweDY2NzljZGRmLCAweDBlZjExZGEzLCAweGM4ZGQ2ZmQ3LAorCTB4MmQ2YzE3ZGYsIDB4NzE4MDdiNjEsIDB4MTE5NGVlY2YsIDB4YTNjM2FkOTcsIDB4YzFiMmFjNjIsIDB4ZGUzY2ViNDUsCisJMHgxNTg1Y2E1ZiwgMHhhNjllMzJlMSwgMHg0NmY1MWQ0OCwgMHg1NWI1ZDYwMiwgMHhhNmJhYzdjOSwgMHhlM2I3NmYxNywKKwkweGY1ODc4MWZkLCAweGE2ZmJhMTdhLCAweGEyYjRmMGZkLCAweDM1N2JiMDFlLCAweGQ0YzcxYzI5LCAweDExOTkzZWRkLAorCTB4NjRmYmNmZTgsIDB4NGUzNGU1ZGEsIDB4YzgxZTVmYTcsIDB4ODI4N2RlN2EsIDB4MjM5YzJmYjQsIDB4ZjVmYTIxYjksCisJMHhmNWRhNTU2MSwgMHg0ZWY5NTU5YSwgMHgzMDkwM2Q5OCwgMHg1ZWMyZjIwZCwgMHgzNTQ1NmVmOSwgMHgwYTIzNDM5ZCwKKwkweDcxMGJiN2EwLCAweGEzYzVhNTM1LCAweGQ3OWQxMzU0LCAweGY2OTg0NjE2LCAweGI0MTEyY2MxLCAweDliYmZhOGFmLAorCTB4N2U1MzJmNDUsIDB4NTMwY2M0ZmEsIDB4MDdkMzk5ZmQsIDB4MGI5ZGY4ODYsIDB4N2Y5OWNiM2EsIDB4OGY3YTZkNWQsCisJMHg5ZjJlZmFhNiwgMHhjN2JiNjE1YiwgMHg0YTc3ZjM1OCwgMHhiYjNhNjJlZiwgMHg1YWJlZDRkMSwgMHg0N2JkMzU0YywKKwkweGY3YTllOGIzLCAweDY1NDRjZTE4LCAweDU0ZTFjNDc2LCAweDY2NThmN2U4LCAweGVmZjU0NzY5LCAweDE2OWRmY2FkLAorCTB4N2RhZmRhNjIsIDB4OTI3ZjNjMzMsIDB4ZmQ4ZGE1ZTcsIDB4N2QzZDg2MDksIDB4ZThjZjdlMTYsIDB4ZWYwY2JjZWEsCisJMHhiYzQ1MTc4OCwgMHg5YTFkZWMzMCwgMHg2MTY5MWU1OSwgMHgzYzQ4NTUzZCwgMHhhOGY2ZWI1NCwgMHg4ZjY5MWNlYSwKKwkweGQ4YjVmNmFhLCAweGYwNGQ4ZjExLCAweDQ4MTBhNmI3LCAweGI2MTUxYTZhLCAweDQ3N2Q1MjM3LCAweGRmY2M5YzRhLAorCTB4Y2MzYmVmODUsIDB4ZGZkMDUyZjcsIDB4NTIxZjk0NjUsIDB4NDJiZmIwNGIsIDB4ZGQ2ODZiY2IsIDB4NjA2YTE3MzgsCisJMHhkODNiNjI0NywgMHgwNzZjOTM4NCwgMHhmYmQxYzYzMywgMHhmNDM0ZTgzNywgMHhmZWQwODA3ZCwgMHgzMzcwMGMwNiwKKwkweGJhZGNhZWZmLCAweDgyMmY2MGZkLCAweGQ4ZTJiNGNmLCAweDU0OWRjNDdjLCAweDk1YjE0ZDM1LCAweDZmNDk1ZWU0LAorCTB4NTRiZmZmMDYsIDB4N2ViZjYxNjEsIDB4NGMwM2UxZmIsIDB4NTYxNWVkNmYsIDB4ZmY0YjhjOGYsIDB4NzhkNGI4NzYsCisJMHg5NDM1ZGRhNSwgMHhiYWQwMTcwZSwgMHhiMDVlN2ZlMCwgMHgxNWY4ZjE0MywgMHhlOWYwMGY1OSwgMHg4MTBjZmEwNSwKKwkweDcwMTc0YTRmLCAweDAxZDVlMDMzLCAweDdlNzI5MGJmLCAweGUyMjg2ZTNmLCAweDBhN2JlNDI2LCAweDE0MjVjMDU3LAorCTB4MGIzOGZhOWUsIDB4Mjc3MmMxMzQsIDB4ZjNjZmNiY2QsIDB4OGM1N2U5MGEsIDB4Yjc4ZmRkMDgsIDB4YjBmZmQ5ZGIsCisJMHhlNTJlMTE0MSwgMHhmNTMxZTFiYiwgMHhmNGUzYjRiMiwgMHg2ZmViOTBjZCwgMHgyMDc4YTlkYiwgMHhkOTdjZGZiZiwKKwkweGU4M2JkZmNhLCAweGQ5YzY1OGE3LCAweGRlNjg5ZjRmLCAweDU0ZjQxZGFmLCAweDhjY2ZmNzJjLCAweGVlZGM4OWNiLAorCTB4ZGY1NzQ1ZGYsIDB4ZmY4NjRmNDUsIDB4ZGQ3ZTM0MjYsIDB4MTllNjQ3YjgsIDB4MWFiN2RmYTAsIDB4ZjM3ZDg2MjYsCisJMHgxYmUxYzQ0ZiwgMHhlNzc3NDFmMiwgMHhlNDM5Yzc0YywgMHg5OTEwZjFkMiwgMHhiY2Y5ZTVkZSwgMHhlMzlkMmEzNCwKKwkweGJlZGQzNWNjLCAweDRkNjlmMDY4LCAweDViOGM2NzZmLCAweDc4ZWVlNTQyLCAweDdlNmY3YmQwLCAweDQzNTU3MTY3LAorCTB4ZmJmMDZhNDYsIDB4MWI0YWRhMzcsIDB4OTc1MzgxZGIsIDB4ZTI1YTczYzcsIDB4N2NlMjI1NzQsIDB4ZGYyZTU5MjksCisJMHg0Zjc2Mzk2OSwgMHgyOWY4NDRjZiwgMHgyNWI0YWQ4ZSwgMHg4ZmFlYTQ0YywgMHg1NTM0MzlkZCwgMHg4OGJlNDIwYywKKwkweDg2ZDc0ZmQzLCAweGNmYjYwYWNkLCAweDAzMmRlOTFiLCAweDljNjFmOWU0LCAweDg3MmRlN2VmLCAweDNmNjE2N2EzLAorCTB4OGQxOWRjYWUsIDB4MmJjNWExOTAsIDB4YTJlZTFmZGYsIDB4YTJkOWJlNzMsIDB4ZmVjMDFhMmQsIDB4Y2U3YzhkZTAsCisJMHgzY2M2ZDcwYiwgMHgzOTBjZTdkOCwgMHg1MTY1NzJhMywgMHg1NTAzYzg0ZiwgMHgwNGYwMzhmZiwgMHhiOTZkMDFlNCwKKwkweGVhNzIxMTJkLCAweDgxNTQwZmU5LCAweGU3M2ExYWQwLCAweGU1MzhiZTU4LCAweDZhN2RmNDk0LCAweGFiZGYwNDczLAorCTB4MmYwOGE1M2MsIDB4ZDQ4YjUxZmMsIDB4ZDMyZTc5N2QsIDB4MzM3Y2RiNzksIDB4ZDI3MDhmYzYsIDB4YWUzMGMzYjgsCisJMHhjNjEyNGI3ZiwgMHgzMGIyZjhmNSwgMHgzMzNjYjZhZSwgMHg4YmJiMmJhNiwgMHg5N2FlZDY5MSwgMHhjMzE2ZGZmMiwKKwkweGEzZGJhY2NlLCAweDBmMjNmNzIxLCAweDRiNjQ1ZmI5LCAweGM4NzkxZmI5LCAweGY3MjE0OGZkLCAweGZjMGQ3YmUzLAorCTB4ZDcxYmYwMGUsIDB4NmY0M2U1YjcsIDB4MzkxNThkZjUsIDB4OGUxY2Y4NGIsIDB4N2Y1YzgxY2MsIDB4MDFlZTEyYmIsCisJMHhmMTVkYmEzZiwgMHg4NDc4ZTRmNCwgMHhmOWU1NjIwZiwgMHgyMzU3ODIxYiwgMHhiMjQ2ZGQxZCwgMHg1ZWRkMTA1OSwKKwkweDgyMjFkOTc3LCAweDg4YzZlYmUzLCAweDljN2U1MzU4LCAweGJmNTRkOTIzLCAweDJhNjY5NWM4LCAweGJmYTkzZWJmLAorCTB4NzcwNmZjYTksIDB4NTM3ZjI5YmUsIDB4ZmQ1MzQ4Y2UsIDB4YTYzMTllNDksIDB4ZGM0NjhmZmMsIDB4YzUzZmFhNjAsCisJMHg5Zjk0YzUzYiwgMHhhOWI2NjEzNiwgMHgxMmUyOGNmZSwgMHg1OWNjZjk1MywgMHhiM2U1NGM4YiwgMHhmOTRjZGJiNSwKKwkweDM0ZWUyYjViLCAweDkyZjFmZmQ1LCAweGFmNzJhNmU1LCAweDBlNzE1OTcwLCAweDIzMWY0MzM2LCAweDNlODVlZmI4LAorCTB4NmZlZGU5NDYsIDB4ZTMwNjQ2NjcsIDB4NGIzOGQ0NzUsIDB4MzUwY2VmOTcsIDB4NTZmYTkwMGQsIDB4MzlmN2FlNzQsCisJMHgwOWVlMjVkMCwgMHhlOGZiMGU4MSwgMHhlMmY2ODBmNywgMHhiZjA2MTk5YywgMHhmYTkxNDA2NSwgMHhlODMyNGI3MCwKKwkweDY4NWViNDI2LCAweGZkODhhOGY5LCAweDY1OTRmMDk3LCAweDlmNmVlN2ZmLCAweDMxM2UyNTYxLCAweDQzZmRhYWVhLAorCTB4ZmI3ZjI4MzIsIDB4NTYxOWU2YzAsIDB4YWVhMzJmZTIsIDB4M2E1MmZmZDksIDB4ZGNmMTdmZTUsIDB4ZjA3Y2IyMzcsCisJMHg1NzI4NGJmZSwgMHhmY2NiZjc3MiwgMHhjODIyYzEzNCwgMHg5YmNlMDZhZiwgMHg4Yzc1YTNlMSwgMHg4ZDdkMmViYSwKKwkweGJhNTNkYTQ3LCAweDUyMzU1MzhjLCAweDlkNzEwMWMwLCAweDAwZDIwMzgwLCAweGZkZDIyN2QxLCAweDVmNDg5ZjQ0LAorCTB4YjcyY2ZhMjcsIDB4ZTg5MDcxMDksIDB4ZDIyMWU5MTMsIDB4ZjdmZGYxNGIsIDB4M2QyMjk3YTQsIDB4ZDIyOTdhNGMsCisJMHg0NTJmNDg3NywgMHgyOTdhNDJkYSwgMHhjZGQ0M2ZkMiwgMHgzYTgzZjRlMiwgMHhiMWZkZGI4ZCwgMHg4ZmQzODJhZSwKKwkweGY3ZjA5NmVhLCAweDcxOTZlYTRmLCAweDFmM2E5N2ZhLCAweDgwNjRmZjdmLCAweGIwMDg3ZjYxLCAweDhiZjBjNjlkLAorCTB4MDkxZmMwZDUsIDB4ZGIyZWRlN2IsIDB4YjFiZjYwYjksIDB4YWJlNzk1ZTIsIDB4NWZhY2M3ZTEsIDB4YjAyMzVhMjIsCisJMHhiMWFkNWI0ZiwgMHhmZTlkMWMyNywgMHhhZGY5ZWVjOSwgMHg5MjA4OWM1NSwgMHhkZWUxOWNjYiwgMHhmOGYwMDZjZiwKKwkweGI3Y2M1ZGJkLCAweGM0NDdlZmY1LCAweDg0MDUzZWI0LCAweGI1ZDM0ZmE3LCAweDMzMDdlMGIzLCAweGM2NTZjYTBhLAorCTB4ZWViOGZmMTAsIDB4ZDAzNjI1ZWIsIDB4YWU5Njg3Y2IsIDB4ZDVlZmEzZWYsIDB4MDNhN2RiZjksIDB4ZjdlODZkYmQsCisJMHhhNjVkZmQ1YSwgMHhhZTMyMWQ2YiwgMHg2YjZiNWFmMCwgMHhiZmRiZGIzZCwgMHgwM2M0NmUxNCwgMHhlZmVjMzNlZCwKKwkweDVlZjk1OGY3LCAweGUwODVmMmIxLCAweGMxMDRlOGZjLCAweDViMmZmYWY5LCAweDVhZjEwZTM4LCAweGNmODkyNzk3LAorCTB4YzQ2ZjNkMWQsIDB4ZmRmODc1MDUsIDB4ZWYxNDEzZjEsIDB4OGRlMWY4NjMsIDB4MmZjMjlmNzgsIDB4M2U0MWM3NWEsCisJMHg3NzY5MWQxOCwgMHgwZGM0ODU4NywgMHgyZmJlZGZjMCwgMHhiY2M2OGZlYSwgMHhjMzI3N2RmOCwgMHg5N2Q0ZmZiZiwKKwkweGYyZjc4MDIyLCAweGI1ZmUzZjBjLCAweGQ4MzQ5NjhlLCAweGUxZGY0NjE1LCAweDMzYzcwNGYwLCAweGU1N2FmZTE5LAorCTB4ZTcxNTE2OGIsIDB4NjRhZjExODksIDB4M2JjYzYzOGMsIDB4MTVmZDRhY2EsIDB4NWQyM2M2NzQsIDB4NDdjYTZhZWIsCisJMHg3NTdkNDY1YywgMHg5M2Q3ZjcyNCwgMHg0OWRkZTNiZSwgMHhiOTU1ZTdhYSwgMHhlYzNlNTM1ZCwgMHgyMmFiYTNjNywKKwkweDhjZTk0MjNkLCAweGFmYTllODEzLCAweDNhZjFlYTliLCAweDM4ZDBiZjBiLCAweDFlYjQ2MjRlLCAweDFjN2U4MTI3LAorCTB4MDFkZjljYjIsIDB4NDgxMDlkMWMsIDB4YTM5ZmZiYzYsIDB4YjAzZGQ4OTcsIDB4Yjg4ZTNlODMsIDB4YjhjZTgyYjMsCisJMHgwODhmZDQwNSwgMHgyNzk4YzdkYSwgMHgxNWY3ZWRmYSwgMHhiY2YyMTdjZCwgMHg5ZGYwY2JkNywgMHgyOWY0OTJlNiwKKwkweDNmNWU3YWRjLCAweDJjNjM4NWFmLCAweDNkNTRiYmRiLCAweGZhZTYxYzVmLCAweGNmZDEwNDZiLCAweDkwZGExOWFkLAorCTB4MWZkZmQ0ODEsIDB4N2NjYzhjOTQsIDB4N2EzMjE3ZDYsIDB4MDk0ZmRmNjAsIDB4MGJiMDQ3NzksIDB4ZjAzMTE5ZmEsCisJMHhiYzdlODRmZiwgMHgwNWJkZWYxMiwgMHhlOTQyZTFkYiwgMHg0MThmYzBjOCwgMHhiYmRlMDY0ZiwgMHgwZTgzMmJhMywKKwkweDE4ZDBlMjgyLCAweDY1NzExZGVmLCAweGY0YTE3ZjdhLCAweDE5OWQxZGQ2LCAweDQzYWQ3NWY0LCAweDhjZjAwMWQyLAorCTB4YWU4MzIwZjgsIDB4Zjg5YTJmOTQsIDB4MmFlOGViMWUsIDB4MDY3ZjlmMDcsIDB4YzVkMjg1NWQsIDB4ZTkyNTc0OTUsCisJMHgwZTI3ZmViNCwgMHhiYTRhZWZlZSwgMHhjMDA3YTRlYSwgMHg1NWQzODdlNSwgMHhmOGYzOGE4YiwgMHg3OWE3YTU5ZiwKKwkweGVlM2M2MjZkLCAweDc2NWM5N2ZmLCAweGFiZGE0NDFmLCAweDdjMTdiNjlmLCAweDE5OGM0Y2E2LCAweDJlMTMxMjBmLAorCTB4NjJlYzEwNzUsIDB4YmEzMmY1YTEsIDB4N2Y0YTE3YTksIDB4YmM2ZWVkYTEsIDB4NmU0NjVkYTIsIDB4ZmE3MWJiNzAsCisJMHhhZWRhMTk1OSwgMHgwNDdhZWQxMiwgMHg3MWMyMWJiNywgMHhmN2U5NmYxMSwgMHgxYTcyZGUwOCwgMHg5OTllMmQ3MSwKKwkweGI5MGU1MzkwLCAweDJmMmRmMjZkLCAweDI3Y2M4ZGUxLCAweGYzYTcxOWJhLCAweDA5NjI0M2YzLCAweGVlMjRiZjlmLAorCTB4ODU0ZjQwZmEsIDB4Y2I4ZDY5M2EsIDB4NDJmYWM4NWQsIDB4NzFkNzY0NjEsIDB4ZWRlYTM3MDUsIDB4ZGM1ZDdmYzcsCisJMHg0ZjhjZjk4MCwgMHgzN2UzY2IzMCwgMHhmNWZjZjJlYSwgMHgwZmZiOTFhMiwgMHhjNmUxNDc3ZCwgMHhjZTU5ZWJkYywKKwkweDYxNDc3ZDBmLCAweGZlM2Q0MGYzLCAweDgxYTQ0ZDIwLCAweDhmMGExN2RmLCAweDBlZmU5ZjljLCAweGNmYmVhMTQ2LAorCTB4YzliYTc0NTMsIDB4NTQ2MmFiNzAsIDB4NmE5YmVlMWMsIDB4YWYzMjFjNTYsIDB4M2M4YzFkZTMsIDB4ZmNlM2ViOGMsCisJMHhlOWNmYzIwZCwgMHhmZGMwMjI0ZCwgMHgwOTAzYTI0YywgMHg2MTA5MWZmOSwgMHhjODVmZWY5MywgMHhhYTM1YmFmYiwKKwkweDU3OTBkZmY2LCAweDRmYmE3YjhkLCAweGIwNTdiNTNiLCAweDRjNDQwZmNmLCAweDRhNzc4MzllLCAweGQ3MTkwZGM2LAorCTB4MTdmNmVkMGYsIDB4ZGJjZTU5YmEsIDB4Yjk2MGM4ZWYsIDB4MTZkMmZiMTMsIDB4ZGUyN2M5ZDcsIDB4NWZiYTczYTQsCisJMHg4YTM3YmNhNiwgMHhmYjQ2ZjcxNCwgMHgzYmZhNzlkMSwgMHhiZjkxYzczYSwgMHg0MGI5NjczMSwgMHg3MzZlZjFiYiwKKwkweGZlZDE5M2JjLCAweDYxMzhkNzI2LCAweDljZmVlZjhkLCAweDc3NmYyOWJjLCAweGRlY2RkODZmLCAweDA0MmVjZDhhLAorCTB4YmQ4YWRmN2UsIDB4N2RlYjEwYWEsIDB4NDVhN2I2MmIsIDB4NGU3NjYxYTYsIDB4YWZkMmJkMDcsIDB4YTBkOGI5MmIsCisJMHhjNmYxY2VmYiwgMHhjMWRkNzhmMywgMHgyODZiODBkOSwgMHhmZjM4MGQzYywgMHhlYjFlYjgwMCwgMHgwNzdiYWUwYSwKKwkweGFhMzc5NjA4LCAweGFkNWYyNDIzLCAweGQ1N2M5MDhlLCAweDU4NzU3MzgwLCAweDllZGU3ZGM3LCAweDU1MjdmMWMxLAorCTB4ZjlhZjA5MGUsIDB4NTYxMWFlY2IsIDB4MmMxN2Y1MTIsIDB4OTNmOWM5MWIsIDB4YjgwN2MyNzUsIDB4NjA5MmM2OWYsCisJMHhmN2IxMGYxMCwgMHhjZTU4ZWIwOSwgMHg5ZGRjZWYxYiwgMHhlOGJkZjg3ZCwgMHgyYWU3OWEyNCwgMHg5ODNmZjY4NywKKwkweDQwODJiOWRmLCAweGUyODQ0OTE2LCAweGJlN2E4NmU0LCAweDA1ZmU3ZjhmLCAweGFhN2QwM2Q1LCAweGYxYWY3NTRhLAorCTB4OTZmYWNlYzAsIDB4N2Q3MWVmMmEsIDB4ZmUxNTIwN2QsIDB4ZDc1NGYxNTgsIDB4MGU1NWU4ZjEsIDB4OWY0MzVmMDksCisJMHg5OGFmZDIxYywgMHg1ZmIxYWRmNywgMHg4MGJlZmU4NSwgMHgwZWY1NWYyMSwgMHhjNmRjZjE5MywgMHhlNGVlZjczZCwKKwkweDkyZTFlMWFkLCAweDkzMGVmNWFmLCAweGViYzBkOGZjLCAweGVlN2ViYjA2LCAweDg5YzMzZjUzLCAweDNhZmNhNjhmLAorCTB4OThhYmY1OWMsIDB4MmU0YzZmNTgsIDB4YzI4NTgzZWMsIDB4NzYxODlmYTQsIDB4ZjkwNGY2OTUsIDB4MjJiNWNhN2UsCisJMHg5NDUxOTFlYiwgMHgxMzY0M2MyZiwgMHgwNzZmMmE3ZSwgMHg5Mjc5NDA0MywgMHgxZmI2YjNmNCwgMHhlZjgyYTRiYSwKKwkweGZjMjk0NTE3LCAweDZmNzE4NjNlLCAweDIyYzkyYzI5LCAweGMyN2M0MWRjLCAweGJkMzcwZWU5LCAweDEzOTExYjRiLAorCTB4Nzk0N2NhNjcsIDB4YzdlYTk5N2EsIDB4OTUzNzQ4OGMsIDB4OTgwNzdhYzcsIDB4MTQyN2UzY2EsIDB4OGEzZGYyOTgsCisJMHhlZmQ1MzZhZiwgMHgyOWFjNmIzOSwgMHg2OGRkYWM5ZiwgMHgzMTUyOWZhYSwgMHhmODM3OTRkNSwgMHgyNGZjOGE1OCwKKwkweGM1YjkyY2ZhLCAweGIyZWZiZWQ0LCAweDM0ZmQ1MzUyLCAweDVjYTlhNTVmLCAweDMxOWIzYmM1LCAweDI1YjdhYjQwLAorCTB4ODFjZjExMjcsIDB4ZDU4YzlmY2EsIDB4ZTNkZTQzNGIsIDB4ZjBjYjA4YjUsIDB4ZmU2Yjc3Y2UsIDB4Y2JkZTVhMzMsCisJMHg4MGI5MTA5OSwgMHg2Y2M5YWZkZiwgMHg5ZTc5OTlmYywgMHgyYzZiNDRlYSwgMHhjZGJiZDdhNSwgMHhjOTI4YjE3YywKKwkweGI5MTcxZjljLCAweDcxZGY4MTRmLCAweDlmY2NjYjljLCAweDRkNTg5NjUzLCAweGVhZTUxZmY5LCAweGU0NGYzNGZjLAorCTB4YmJlM2RkYjEsIDB4MzAwZGFmZjAsIDB4NGUxNDNmZTEsIDB4N2VmYzBmNDQsIDB4ZWY5ZDNiNjgsIDB4Y2RlYmNjM2UsCisJMHgwNzBmN2UzMiwgMHg3NWUwOTM3ZSwgMHgwYzEyNmZjMCwgMHg4MjRkZjgwNywgMHgwNDliZjBmMywgMHgyNGRmODdkNywKKwkweDkzN2UxY2I4LCAweDg3MjFmMmUwLCAweGQ2MWZmOGNjLCAweDU1ZmZjNjYyLCAweDZmZjE5OTFmLCAweDc4Nzc2NWQwLAorCTB4YTY2YWQ5MWEsIDB4OWEyOWExMGYsIDB4YmE3ODJkZjIsIDB4N2U5OTk0ZTYsIDB4MWQ3M2YxNDIsIDB4MDliMTViODksCisJMHgwOWUyODdjMCwgMHhiZTM4N2ZiOCwgMHg4YmUwODY1NiwgMHgzN2Y3YzNmMCwgMHgzMTQ3N2JkYiwgMHhkN2Q3MWU3ZSwKKwkweDIwNjA2ZDc1LCAweDNhMmU5N2RmLCAweDZmYmMwYWE0LCAweDcxZjNhYzYzLCAweDZkM2ZkY2ZkLCAweDg5NzMxYWQ1LAorCTB4NWRjZWZjY2YsIDB4NzYzZTA0OTAsIDB4ZGI3ZTkwOWQsIDB4NGYxNjU1ZjEsIDB4MjA3ZmJhODAsIDB4MjlkOTljNjQsCisJMHgzZmE4NDNkYSwgMHhhYTUyZmUyYiwgMHgyNmQyNzQxZCwgMHgwZTdiY2ZkZiwgMHg5NWQ4Nzk3YywgMHgxMjNlYjJmMSwKKwkweGY2YmVmODRmLCAweDI3YmU1NGNmLCAweGE4ZDJjNDc1LCAweDhlYWY4ZjgwLCAweDlmMDA5ZWQxLCAweDg0YmI5Nzk5LAorCTB4OGEyNDliZDcsIDB4NWM0MDJmYjcsIDB4YTU4NTdmZDQsIDB4YWZiNzNmMjIsIDB4NzIyZGM3YmMsIDB4ODlmZWY5NWIsCisJMHhhNmU3MjdjMSwgMHgyZGE5YjhjOCwgMHhkZDdmYmFiOSwgMHg5ZWE3ZTMyMywgMHg3NzcyOTVjOSwgMHg3MWM1Yzc5NCwKKwkweGYyYjkyNWRlLCAweDhiYTkwZDdlLCAweDAxMDc3M2E5LCAweGQ5OWQ4NzNlLCAweDBiM2FjZjgwLCAweDhhZDllYmJmLAorCTB4OWQwOWU0N2IsIDB4MGYyMWM4ZjcsIDB4YTNlY2ZlNDMsIDB4MWZmNTdmY2IsIDB4NDc1ODFjM2IsIDB4M2E2MTdhZjYsCisJMHgxZGZiZmI3ZiwgMHg4MWUyZjhhNiwgMHhmY2E2NWQ1YiwgMHg1MzI0YTZhMCwgMHhkY2JiYzFmZCwgMHg0MGZjZjJhNiwKKwkweGM4N2NhOThlLCAweDNmMjk4ZjIxLCAweGE5ODQ2NWFjLCAweDc5MWY1NWZlLCAweGFkOTFmOTRkLCAweGFmZjU0YzEzLAorCTB4Y2E2YzU1MzksIDB4NDdiNjg4YTcsIDB4OGFiZWRmMDEsIDB4Y2QxYzUzYjQsIDB4YjlmYTk3NGQsIDB4ZTRkYzcwNWIsCisJMHhlNTYzYmJkYywgMHg3ZWRkNWY3ZCwgMHg0NmZiYzg2MSwgMHhkM2E2YjlkYywgMHhkMTFlYTg3NSwgMHhlOGU1MmVkNywKKwkweGY1MjE2NGZhLCAweDFmYWU4NzQ2LCAweGExM2ViMzBhLCAweDFkZTM3MWU5LCAweGU2N2M1OGY3LCAweDVlMjM3MWI4LAorCTB4ZDBlZjQzYmMsIDB4N2I4ZThhZjUsIDB4ZTJmMTlkMzQsIDB4ZjE3OGUwZGUsIDB4YmY1ZDYxYjksIDB4Yzc1ZTdkMWYsCisJMHhmYmZjZTg3YiwgMHhlYjdhZTVkYSwgMHhiZGYzYjRlZiwgMHhhMTVlNjMxZCwgMHg5NmM5NDlmMywgMHhkMWQ5YmI3NCwKKwkweGJmYWFiZGY1LCAweDQ2ZmI0YWU1LCAweDI1ZjE2NjZiLCAweDM2MTNmZGQwLCAweDZkZmYyYjRmLCAweGYzYzYyYjg0LAorCTB4Yjc1ZTIyYjQsIDB4Y2Y3NjE3ZmUsIDB4OGY3N2Y3MGEsIDB4NWNiMDc3MzcsIDB4NjU4YjFjY2YsIDB4OGU1Yzk0ZGUsCisJMHhkZGZkMzM4YiwgMHg5MjQxODg4NCwgMHg3NTgzYWRiZSwgMHg3OGM4NGFmYiwgMHhkYzY0NjM3MywgMHhiYmIxODg5YSwKKwkweDhmZGRiZjQxLCAweDY0OTllMTI3LCAweGZmN2MwZDE3LCAweGYxNjdiZjRiLCAweGY3NGQzNWUzLCAweGJkOGU2OGExLAorCTB4Y2UzZjdmNTEsIDB4NGMzZDAzNmYsIDB4NTlmMjRiMWMsIDB4NWIxM2M5M2UsIDB4NDkxNDNkN2EsIDB4Y2IxM2NhNzIsCisJMHg4YTlmNmNhYywgMHgzNzU3ZmU3YiwgMHhkZTc1ZmFmYiwgMHhmYTRiZTk5ZiwgMHhiMjAzZTgxMCwgMHgwN2E4ZjQwZSwKKwkweGI3Mjk1NGYyLCAweDJiZWI5MjBjLCAweGI4ZWViZjUyLCAweDE4N2VjMGU3LCAweDQzZjNmNDIxLCAweDE3NGZiYzcwLAorCTB4Njg3NGM2ZjQsIDB4NzVkZmUzYWMsIDB4ZGJhMGMxZWYsIDB4ZmExOTM4NTAsIDB4M2JlM2QwYWYsIDB4ZDJmMzE5ZmIsCisJMHgwN2VjNjdlMSwgMHhmZGM2N2UwMywgMHhiNjZkZjcxMywgMHg3YzkxNGRlMiwgMHhlMjAyNjU4ZiwgMHg2ZGZjMGNlNSwKKwkweGM2ZjY5M2M5LCAweDUwM2MzYTA1LCAweGJiYThmYzBmLCAweDZlNmE0NTdhLCAweGVkZjdlYzBjLCAweGVhZTMxZGMyLAorCTB4ZWEzYjBlODIsIDB4NjJlMDliZmYsIDB4ZmJiYmJmYzAsIDB4ODdmMWRkNmQsIDB4NWRmMGJlNTAsIDB4YTNiYWRkZjcsCisJMHhkZWY2N2ZkMywgMHg5MDlmMTA1YiwgMHg1ZTNhNGJmMSwgMHgxYzJjZmRmYywgMHg5NDc3NzAxNywgMHgzMjNmM2Y3OSwKKwkweDkxODlmMjQ4LCAweGU0ZmRmNDgzLCAweGNjZDZmZDIzLCAweDBmZmMwNDJmLCAweDlkNTUyYmY1LCAweGJjZjNjODVmLAorCTB4ZGY5OGFkMjQsIDB4OGFmOWM2YWYsIDB4MzdmMzViZmIsIDB4ODg0N2Y5NGEsIDB4ODdhYmM0ZTIsIDB4ZTM2ZjhmYzIsCisJMHg3YWQ3Y2JmYiwgMHg0YTZkZGIwNSwgMHhkZTNmMTUxYiwgMHg3NWYxMmFmOSwgMHg5ZmIzMGZhZCwgMHgwNzcyY2RjZiwKKwkweDI2YzgzYmJmLCAweDQ2NTc2YTRkLCAweDVkYTVmNmVkLCAweGMyZmFjZWY5LCAweDYwZWVmOTQ4LCAweDBiZWFmYmU4LAorCTB4MmYxOWJkNzUsIDB4ODZkZjYwNmEsIDB4MTllZWJkZmEsIDB4M2NiMWZiYTQsIDB4OWNmMmMzYzIsIDB4YTE1MGQ3MWUsCisJMHgzN2EwZTlkNywgMHgwZTZmN2NiZiwgMHgzMWY2MzI3YSwgMHg2NzFmMWNhNSwgMHgzZjBkY2RjMCwgMHgzY2NlOTBkNCwKKwkweDA3M2MzN2MxLCAweGI1ODM3OWU3LCAweDBlYzVmOGNiLCAweGFiN2UxYWY4LCAweDYxZWNiZjBlLCAweDFhMTEyN2JlLAorCTB4NzdjZTcxOGYsIDB4M2YyYmJhMjAsIDB4ZWIxZmUxOTgsIDB4Zjg3NDFmNmUsIDB4ZWZjM2JlYzcsIDB4ODk2OTFlZDYsCisJMHg2OWYxZGZjNiwgMHg2N2RmMjZkZiwgMHhmZDViZjRlOSwgMHgyMmNiYjg2NSwgMHhmMDMxNTNmZCwgMHhmZGVhYjUzZiwKKwkweDVkNzk4ZDg5LCAweDk2ZDUwZmRkLCAweDk0MzhlNGVmLCAweDczYjY4YjY2LCAweDJjZWZhZDEwLCAweDdiNzc4ZmY1LAorCTB4OWZkYzg5ZWYsIDB4MjYxMTc3ODgsIDB4MmJhOTc2ZWEsIDB4Y2RjYmFkZDcsIDB4OGZlOTE0YTMsIDB4ZWY4Y2E5ZjYsCisJMHg1ZWYyMDlmNiwgMHg4MTUxZjEzZCwgMHg0ZmM0Njc3ZCwgMHgwNDgxMTE0YywgMHg0YTFmODZhNCwgMHhlMTkyM2Q1YiwKKwkweDRhYTFmODZmLCAweDllNzkyMzAyLCAweGRhMTdlYTMzLCAweGViNjhlNGYwLCAweDg1MTU3N2EzLCAweDUzZmQzYmJiLAorCTB4NWM2NDdkYWQsIDB4YWE3ZTc3NTQsIDB4YjlmMzk3NjksIDB4YWY5N2U5YmYsIDB4MTgzZTdlZTEsIDB4YjZlNTI2OTQsCisJMHgwMzZlZmI4NiwgMHgyYWQ4MGQ5ZCwgMHhhYjY3NTg2YywgMHg0YmJmZWJhZCwgMHhhYmYzYTg1MSwgMHgzZDlhZTgxMiwKKwkweDk2YWRlMjgyLCAweDk2MmZiYzJiLCAweGJmODhjMjJhLCAweGU0NmYzZTYyLCAweGY5ZWEzNTJmLCAweDdkYmY5OTIyLAorCTB4ZWFiN2NjYTUsIDB4ZDE2ZGE3ZWYsIDB4Mjc1ODIwZWQsIDB4N2EwN2FjNTIsIDB4NGVkZDM2ZjksIDB4YzUyMDc1ODIsCisJMHg3YzFkZjAzYSwgMHgzNWYwNzkwZCwgMHg5MGQ3YzFlNCwgMHgwYTQzNWYwNywgMHhhNWVmODZiZSwgMHg3NjE1MzhhMiwKKwkweDBhZDNmODViLCAweGZjMDdmNjgzLCAweDcyNDE4NTY5LCAweGMxNjlmYzEzLCAweDgyZDNmODc5LCAweDE2OWZjM2ViLAorCTB4NWE3ZjBlNWMsIDB4NjlmYzM5NzAsIDB4ZDNmODc5YzEsIDB4OWZjM2ViODIsIDB4M2Y4NzljMTYsIDB4ZmMzZWI4MmQsCisJMHhmODc5YzE2OSwgMHhjM2ViODJkMywgMHgwZTVjMTY5ZiwgMHgzOTcwNWE3ZiwgMHg3OWMxNjlmYywgMHhlYjgyZDNmOCwKKwkweDVjMTY5ZmMzLCAweDYyOTk2ZjNlLCAweGQzY2RiN2YyLCAweDViMjg3ZmRmLCAweDUxZjRjZjFmLCAweDliMWM1MTk4LAorCTB4ZWZmZGY4NDcsIDB4YzRmYzdmODgsIDB4MzczYzBlOTYsIDB4MmVkZDAyMmYsIDB4NDhmNzBlYWQsIDB4OTA0ZTM3M2MsCisJMHg4OTA4Yjc3OCwgMHg4Y2Q5YjZlNywgMHgzMmVjYmJlNywgMHhiNGUzMjQ1ZiwgMHg3ZTA3ZTk0MywgMHhmNDliNDJhYiwKKwkweGRmODUyMTViLCAweDU2ZmMyOTBhLCAweDJhYjdlMTQ4LCAweDJiN2U5NGNjLCAweGUxNWJmMGE0LCAweDQ4NTZmYzNiLAorCTB4MGE0MmI3ZTEsIDB4Zjg1MjE1YmYsIDB4NmZjMjkwYWQsIDB4MmI3ZTE0ODUsIDB4MGFkZjgzYjQsIDB4Zjg1NmZjMjksCisJMHg1MjE1YmYwZSwgMHhmZGYwYWRmOCwgMHhmZTAzY2QwOCwgMHg5MDVlNjMyYiwgMHhmNDk5ZmJmMywgMHg5MzQzYTI1MiwKKwkweGU1MzJlYTVlLCAweGQ3MDdlNzIxLCAweDVjMWY5Yzg3LCAweGI4M2YzOTBlLCAweDcwN2U3MjFjLCAweDcwN2U3MjFlLAorCTB4YzFmOWM4N2QsIDB4ZGM4MzQ5ZjksIDB4ZWYyMGJmYmMsIDB4YmM4M2I3MDcsIDB4ZDQxZjljMWYsIDB4YjYwMzdiZTgsCisJMHgyZTFiNDlhYiwgMHgzNWI0OGViYywgMHg3MTQyNzk0YSwgMHgyZjM1MzEwOSwgMHg4YmZjMjY3MywgMHgzNTI1NGVhZCwKKwkweDZkODQyM2Q2LCAweDg1OTk4MGY5LCAweDM4ZjRkNzk0LCAweDY2ZDEzY2M3LCAweGFlMzliZTAxLCAweDA1YTZmMDgwLAorCTB4MGY2NWM3MDQsIDB4NWNjOTdmZmEsIDB4ZjliM2Y4NmUsIDB4YmY5ZWYwODcsIDB4NTBkZWIwNDMsIDB4MzVhZmRmYTMsCisJMHg0Yjg0N2JkYSwgMHhlZmQ0NmE0NSwgMHgyZjVkNzdjYywgMHgxZWEzN2M3NCwgMHg3OWEwY2JmMywgMHg4Zjk5NjI5MCwKKwkweGJiZmM5Mzc4LCAweGFmNzAwYjIyLCAweDkxNDU4YjYwLCAweDY0MmJiOGYxLCAweDVkMjg3NDNjLCAweGU3OTNjYWFkLAorCTB4ZjZjYjE2ZmIsIDB4NTM4OGUxZmQsIDB4YjgzYzUxMjksIDB4MTU2NTkxZWYsIDB4ODAwNTZjODcsIDB4N2UwMjkyZDMsCisJMHg1NjJmMmFmNywgMHhhYjkyZDc1ZiwgMHhjYzY1ODcxMSwgMHgxMjRiYjBkYiwgMHg4NjdiZTA5ZiwgMHhiZDg0ZGFhMywKKwkweGZkMTljNjljLCAweGVmZTNiMDg1LCAweDRiYjQ0YzczLCAweGEwZWQwMjc5LCAweDI5ZjQwZTZmLCAweGY0NDE0ZGRlLAorCTB4OWU0ZjJjYmQsIDB4YjZlZjlhN2IsIDB4ZmJlOWNiYWIsIDB4YWU0YjZkYzAsIDB4ODljNWZkYzYsIDB4ZDNkZGIyZTEsCisJMHgzODY2ODliZiwgMHhmODUwNmU0ZSwgMHg2ZGE4Y2U5ZSwgMHhjOWZiOGJjMiwgMHgzYTdlNzVjYiwgMHg1ZWNiOWI3MCwKKwkweGY4YmFlM2NlLCAweDZmZDFhM2RlLCAweGJlNTQ4NmM5LCAweDVhMjI1OWE3LCAweDQ1MGY3MTBiLCAweDNkZjg1NTBjLAorCTB4YjQ2ZTAzN2MsIDB4YmViMWQ3YmUsIDB4YjAyYWRhMmMsIDB4ZmJlMGZmMmYsIDB4N2UyZTI0NGYsIDB4YTM0ZmZiOWYsCisJMHgyMTE2YzY4NywgMHhjYjM0NTBhZSwgMHgwZDI3NDJmNywgMHg4M2Q5NTkyZCwgMHhlNWY5YTVlNiwgMHhiZmEzYTE3YiwKKwkweGU3MDZmMjU4LCAweDg1ZWY5MjlmLCAweGU3MGNmOTMyLCAweDk4NzlmMWY5LCAweGZkZjg1M2VkLCAweDhkYmVjOTk1LAorCTB4ZWUzNzA0OTYsIDB4MjViNzJmNjUsIDB4ZTEzNmZlYTIsIDB4ZjUwNTU4ODEsIDB4OGQ4YWY3MDgsIDB4MTY4YWU1NzUsCisJMHhiZDAxNTM4YiwgMHg0MWYxMDM4OCwgMHg2MzljNDdmNCwgMHhkZjI1ZTgzYSwgMHg1OWY3ZTM2MywgMHgzNjVkNThhNiwKKwkweGNlNDMxYmYwLCAweGIxYzk3MTI5LCAweDMxNTFkNDhiLCAweDQ0MzJjZjdjLCAweGQwZDRiODRlLCAweDdlNjJlMzgzLAorCTB4M2I0ZTljNzgsIDB4YmE1ZmU3ZGYsIDB4ODU3MmM5ZDMsIDB4YmU2MTVlYjYsIDB4YzY1ZjNlNzksIDB4ZjZkZDU2YmIsCisJMHg3YTRiNzBlMSwgMHg5OWNlOWM2NywgMHhiYzE2ZmYzNCwgMHg3ZDI2N2IwMywgMHg4NTA4ZjQ3YiwgMHg3OWJkODhlNSwKKwkweDBkYTNkNzA0LCAweGNkM2RmMTJmLCAweGYwNmY5NTkyLCAweDBkNGI5NDNkLCAweGZiY2I0NTBmLCAweDUyZmZkMjZjLAorCTB4YjBjZGMzYWUsIDB4ZjFkN2NkM2IsIDB4NjljN2FlNTMsIDB4ZWY5M2FiMWQsIDB4Y2MzOWQzM2EsIDB4NmE1Y2FlZWYsCisJMHgxMTljYjFiMCwgMHhmMjFhMmYyYSwgMHg5MTFlZjFhNywgMHhjMjNmYWUxMCwgMHg2MGQxNTNjZSwgMHgwYmMwM2JlMywKKwkweDRhYWM5NGQ3LCAweDkxY2E1NzEyLCAweDczMzk3NThiLCAweGUzOGQ4MzUxLCAweGY3ZjQyYWIyLCAweDZlZmY0MmQ0LAorCTB4MWUzZDYyY2YsIDB4ZjM1NmYxNmIsIDB4NDJmMjRmZjcsIDB4N2RlMzUwZTQsIDB4Yzk0ZWJkNGQsIDB4YjA2NjA3ZGIsCisJMHhjNmM0YjQzYywgMHhjYjM5Y2RmZSwgMHhiNjI0N2NhNSwgMHg5M2VlM2YwYiwgMHhjZTNlNTljYywgMHhlNjY2Zjc4MiwKKwkweDk0N2FmNGVjLCAweDVkZTllODJlLCAweGQ4OWE0ZTVkLCAweDRmZjg2NGVhLCAweGZjYzExY2I5LCAweDE0ZTVlYTY1LAorCTB4Mzk3Y2RmY2UsIDB4OTc5OWQzOTksIDB4ZWUyYWRjNjUsIDB4NWE2ZTgxMjIsIDB4MDczYmU0OGIsIDB4ZDFmMmViZWYsCisJMHhjNmIxYzQwYywgMHhjOWViM2U0MywgMHhmNDRlZGRmNCwgMHg3NGYyMjE4ZCwgMHhhYmMwMzViZSwgMHgzODc4ODAxYywKKwkweDQ0YWRhNmQxLCAweDhkYzRlYzljLCAweDRkODNlZjgyLCAweGZkNDUxYzgyLCAweDE1NWM4MmNmLCAweDU2OTFmZDhmLAorCTB4MjY2MWY3YzQsIDB4NjhiZjdjMjgsIDB4ZjRkYmQwZDIsIDB4NDNmYjQwZmQsIDB4ZjdlMTNmMzAsIDB4MjljMmI0NTcsCisJMHhjZDM5YzQ3ZSwgMHg4MDViYjZkMiwgMHg2ODVmNjM3ZiwgMHg1ZWZjYTNiZSwgMHg2MjlmMjRlYSwgMHg5YTkyM2JjNywKKwkweDc0MWI2ZmFlLCAweGU2M2ZiYTFmLCAweGIyNzZlODQ2LCAweGViMDc2OTQ4LCAweGIyNjE5M2IwLCAweGI3YzkyNDc4LAorCTB4ZDNlNDI2NmEsIDB4ZjY2ZGIwYjksIDB4NjA4MTA5ZDIsIDB4Y2IyYjk1MWYsIDB4ZDU3NmZjN2IsIDB4NDE5MjA2Y2MsCisJMHhjOWZiNTVmZiwgMHhkZTQ1OGIxYywgMHg5MDM5MjMzZiwgMHg5Njg4MGJlZiwgMHgyZjk0OWVhMiwgMHg0MDE0YTM1OSwKKwkweGY1ZTYzMjNmLCAweDM4ZWM2N2I5LCAweDNhNGViMGNmLCAweGE3ZDhlZDI4LCAweGQyZTUxZWYyLCAweDdlNGQzMjdiLAorCTB4OGNiNGQwOWIsIDB4MzRmZDhkZTAsIDB4MjdmNWE2MzcsIDB4ZjQ2ODYxMGEsIDB4MWMyZGUxNjAsIDB4ODVlYmY3ODEsCisJMHgwMDU0MjhmMSwgMHhlOGI3OThmMSwgMHgzYmMxZWFmOSwgMHg5NzNhYjRmZiwgMHg5MWY5YzRlMSwgMHhhNjY4N2RiZiwKKwkweGUwNWZmMjJmLCAweDZiMTQ3MzkzLCAweDRiMWJkZmYwLCAweDBkNTc2OGIyLCAweDUwZjdjMWVlLCAweDExYmYwM2M3LAorCTB4OWVmYzZkYjksIDB4NGJiNjRhNDQsIDB4N2IxMGE5ZjIsIDB4ODk2MGY1NGIsIDB4NGJiYjUwYzcsIDB4NzczY2FlNTksCisJMHg3YTlkZDU4NCwgMHhkYzdiZmIyYiwgMHhkNjM0Yjc2YywgMHhiZTY2Y2M3ZCwgMHhmM2E0NmJlNywgMHg1ZWU3ZWIwNywKKwkweDllZTdiZmRkLCAweGY5MTZjM2NhLCAweDE2NjNjMmZlLCAweDg4NTdmNmZmLCAweGQwZjcyZjVlLCAweDhmYmQ2MDY2LAorCTB4ZTc5ZWRlMjEsIDB4OGNmYWYxYWYsIDB4ZjgzYTRjZjcsIDB4ODk2ZWZlOTUsIDB4OTY0NzRmNDEsIDB4MmFmYmUyNWQsCisJMHhiNzc2OTFhNSwgMHhlNTRmNDQxYSwgMHgwZmJlMTVhYiwgMHhkZTRjYmE1YSwgMHgyYjU2ZDZlNywgMHg2ZTg0NWRmMiwKKwkweDk5YmY1OGVjLCAweDllZmNiZmZkLCAweDExN2U2ZmQ1LCAweGY4NzUwYjJlLCAweGJjYjdiMWNlLCAweDg0ZWI0OGUxLAorCTB4M2Q5NzlmZWYsIDB4MzQ3YzkzNjAsIDB4MGVmYjg5OTAsIDB4ZjI3MTJjYjcsIDB4N2I5ZmQ5YmIsIDB4MGYwNmFiOGEsCisJMHg4YzNjOWUwMywgMHhlNWQ4NzFhNywgMHg4YzRiN2Y1NCwgMHg0YmRmMDRiNiwgMHhkODQxY2I0NSwgMHhmY2ZlZTcxZCwKKwkweGJhOGY3ZTZkLCAweGRmOGQzOWI2LCAweDk1ZDkyY2JmLCAweGQ5ZWYwYWJmLCAweDdlZDFlZTdjLCAweDQ0OTdmNTgyLAorCTB4NDc5MGVjYmEsIDB4Zjk2MjFhNmEsIDB4NTNkYjllN2MsIDB4ZGEyYmNmYmYsIDB4ZTA2N2NmZDgsIDB4ZDJjMWJlZTcsCisJMHhiZTdkNzc4ZSwgMHhhZWEyZTcxYywgMHg2Y2MwMTE1NywgMHhiYWY1NGM1MywgMHhmNjFhNjNiNiwgMHg0YjNiNTBkMSwKKwkweGRmMjFiYmU4LCAweGRkODE1NzY1LCAweDVmNjQxZWM0LCAweGI2MzJlYzM1LCAweDcxYjM2MzljLCAweDc3YjFjZmFlLAorCTB4ZjczZWY3ZmQsIDB4ZjQzN2YzZWEsIDB4N2ExZGY5ZGEsIDB4OWVmOGVlNmQsIDB4MmFkN2ZmOTAsIDB4Y2JkM2Q4MmUsCisJMHg3MTMzZGQyMywgMHg5MGZjYTFiZiwgMHg2MmI0OTEwZCwgMHhiZTViOWM2MiwgMHg3YzhmNzMxZiwgMHg4ZWY0YTYzZiwKKwkweDczNjdlNjdjLCAweGRjMDI5MzgwLCAweGZiYzkxOTNiLCAweGU5NGZkY2I4LCAweGZiZjdlZTkwLCAweGY0MGY2YmFkLAorCTB4MGE3YTBkZDksIDB4ODIxZGY5NzgsIDB4MWVkNzk3NzIsIDB4OTUxZjI0MTcsIDB4NzdhNjJhMzUsIDB4MGJmYzhjMjQsCisJMHg5N2M5NTU4MywgMHhmYzAwZGQ0OCwgMHg5YTQ3N2M3ZSwgMHhjZDM5NmYxZCwgMHhmMTA5MzEyMSwgMHgyNzQxN2I5OSwKKwkweDUxZGIzYWMzLCAweDk5M2Y4ZTNkLCAweGNhMGUyZTk4LCAweGZlMTRiZGY3LCAweDJmMThlNGJiLCAweDk1NWJlZmY4LAorCTB4YzNkZjlhMzYsIDB4ZGYyY2ZhYTAsIDB4YzUxYzFhZWQsIDB4NjhiODk1ZmQsIDB4NWQ0ODY5ZGQsIDB4MDM4MjRmM2MsCisJMHgzZWVkYTljMywgMHhlM2NkY2ZlYSwgMHgwMmNhM2UzMCwgMHgwN2VjMWI3ZSwgMHg0MmY3MTA3MywgMHg3ZTVjNWJmOSwKKwkweDZkMjljNjFiLCAweDY4ZDRlZjkwLCAweGRhMzhlNDZiLCAweDIwZmI1OGVhLCAweDk3NTYwN2M4LCAweDVjYjA0ZmJkLAorCTB4YmRkZjIwZDgsIDB4ZGRmZmEzOWUsIDB4Y2IyZjlhMTEsIDB4MjcwNGU1Y2QsIDB4ZWUzM2IzZGMsIDB4YWJjMjg2ZGQsCisJMHg3OTdmOWY0NCwgMHhjZTU5YWM2MywgMHgwMzZiNWM2YywgMHhmMzc3NjY3ZSwgMHhkZDM5YzY1ZSwgMHgzMGRhNWQwZSwKKwkweDI4MzdkZjg2LCAweGJlZjk3YWI3LCAweGZiYzNhNjhhLCAweGY3OWNkYmIzLCAweDdiMzI1ZmMyLCAweDM0YjYyM2RkLAorCTB4YjA2NWZmY2EsIDB4ZTljZjZiOTQsIDB4N2E2MjcxZmIsIDB4YTlkZjkzMjAsIDB4ZjFjOWNkYmEsIDB4OGQ1ZGIzZTMsCisJMHg3ODBlZGViYywgMHg4MWYwNDQzZiwgMHg2NjJhZTJkYywgMHhmODlkMTM3OCwgMHhiZTU5NmYxMCwgMHhjZWRmOGNjZSwKKwkweDc3Yzk0NGY5LCAweGYwOTVkN2ZjLCAweGQ1NjA1YmZlLCAweDc5ZTBhZWVjLCAweDg5OTdkZmFjLCAweGI0ZDlhMWY4LAorCTB4OTcwZWYxZWYsIDB4MWY3YzY5NzAsIDB4MzM0M2M0ZjYsIDB4NjIwNWVmZjksIDB4ZTZjZjFjOWUsIDB4YmJjNzhmNzEsCisJMHg0YzM3NDQ1MywgMHgxOGZkMDZkNywgMHhmMThkZjNmNywgMHhiNGFiMWVhYywgMHg2YmJlN2JjNywgMHg0MjBmN2E5ZiwKKwkweDdjMjdhZjRlLCAweGRkZDAwZmMzLCAweDAyZTNiNTNlLCAweDJmNmI4ZDI2LCAweDVlMDdlZjk3LCAweGZkZjRlZmMxLAorCTB4NmEwMWZmZmEsIDB4MDBkMzZjOTEsIDB4MDAwMGQzNmMsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsCisJMHg2NTU1NWM3YiwgMHhkNmJiZjBiYSwgMHhjMGQ4NTdkYSwgMHg1MWIwOGI2NiwgMHg2MjAyMGRjMCwgMHgxMDEwNmQxMSwKKwkweDgwYTE3NTE1LCAweDYzNmE3MzViLCAweDhkYzQyOTM3LCAweDkxMDE1MGI3LCAweGYzOWZhOGFjLCAweGE5NmYwZGIxLAorCTB4OTYyYTI2OTUsIDB4OGRhNmI2NzUsIDB4YjI3MDc1OTUsIDB4ZDk5YjFiNDYsIDB4MGY1ZDlhNmEsIDB4MzlkMzhkM2EsCisJMHgzMmNkYjY1MywgMHgzNGQyMDliYiwgMHg5OWQzN2Q5ZiwgMHhkZTc5ZTdiZSwgMHgwZGFmNjBiNSwgMHhmOWE2NzVhNCwKKwkweDNlZmNlZmNlLCAweDdkZjVlM2ZjLCAweGVlN2Q3YmQ3LCAweDc2NWVmM2NmLCAweGIyNGM2MzIyLCAweDk4NzgzNjMxLAorCTB4OGM4MWIxODMsIDB4NDU5MzE4MTksIDB4NzdhMTNmYzgsIDB4NjMwMmVkZmIsIDB4YmVhYzcxOTUsIDB4MjhkMjEzMmQsCisJMHgwYjZiZmY1NiwgMHhkZmUzZGY2MywgMHhhMjc0OWVmOCwgMHg4ZjJjNjQ1MywgMHg1ZGEwZGJiMSwgMHgxMGFmN2MxYiwKKwkweGQ2Y2NhYmQ5LCAweDI5ZDMzZGYzLCAweDE0OGFmN2QwLCAweGQ0MWRkMzM2LCAweDdlYzNmYjFlLCAweDEzZWZkNWUzLAorCTB4MzM4YjY5ZmMsIDB4ZTNhYmVhN2IsIDB4YmI3OGQ4NTYsIDB4OWE3ZWQwYTksIDB4ZGQ4YmViMDUsIDB4M2VhODFiZjUsCisJMHgyNmU5YjNjZiwgMHgzNjMyYzU5MSwgMHg4N2ZmMDRkYiwgMHg3YjQ4OTRhNSwgMHgzMmU2YzQ1NiwgMHg3MDU3YjBkNiwKKwkweGUxYThhMTFhLCAweDE4YjE4OTQxLCAweGYwOGI5ZjQ4LCAweGJlYzY2NGIxLCAweDNiY2RmODY4LCAweGNmYmQ0MGI3LAorCTB4NjRhZjZmMzcsIDB4MzVlNjdiNDMsIDB4Mzk4YTNmYzcsIDB4ZjczNjMwNDYsIDB4MGM3MzM2NTIsIDB4YTVkZTZjNjAsCisJMHgwZjU2OTQzMSwgMHgwNzM4NjRmMywgMHhmOGRiZDUwNiwgMHhjNjA3YmE1YywgMHhmYjJkYWRiZiwgMHg1YTMwN2ZkYywKKwkweDMwZTU5ZmI3LCAweGJmNzNmZWY2LCAweGU4NjhlM2ZkLCAweGRlOWYzMTk3LCAweDNhY2Y0ZDdkLCAweGExM2VhZDY2LAorCTB4YzMwNGIyYWYsIDB4NGQ3M2FmOGQsIDB4ODMxNTU3NDYsIDB4MThiNmNlNzksIDB4Y2QxNDEyMWMsIDB4NjRjNTVlNWUsCisJMHgzM2IzMjc5OCwgMHgxM2U0MWE2NywgMHg0MjJiY2M3NSwgMHgxNmZkNmNiZiwgMHhmM2ViMDRkOSwgMHhiNTU3ZmUzMCwKKwkweDVkYTk5MDVjLCAweDgyNGZiZTYzLCAweDdhODYwY2Y1LCAweGRmNWUxY2M2LCAweDU4ZjdmMDBjLCAweDQ4ODQ2NzBjLAorCTB4OTEyZGU4YTgsIDB4Y2RiYzE5MDMsIDB4ZjgzZDI5ZjcsIDB4MjFhOTBjMWQsIDB4ODllZjA3YTcsIDB4NWVjYzFkMGEsCisJMHg3YjZkMDY1NywgMHgzMzAzMDVmMCwgMHg2NWViMGY5NiwgMHhmY2VhYWUxYywgMHhiZmYzMmFhNywgMHhmYjIwYmQ2ZCwKKwkweDRlMGRkZWEwLCAweDI3NTdjZjA3LCAweDdhYzFlNjFiLCAweDM2NGZhY2U3LCAweDVjYjQ4NmNjLCAweDQ3M2U1ZWY5LAorCTB4MmY4ZGRlNWIsIDB4Y2NhZjhhYWIsIDB4NGY1ODc2OTUsIDB4NTdjNzFiNTcsIDB4ZTEzZDNhZDcsIDB4MmY0ZjZiYWIsCisJMHhhOTMxMjU3YywgMHgwMDc3MWU2NywgMHg4ZTAwZDhiZSwgMHhlMzgyMzYyZiwgMHg1N2MwNTMwYiwgMHhhODJmMzNhNSwKKwkweDdjNzBiZmRlLCAweGVkZmU3ZWNkLCAweGQwNzY1ZTBmLCAweGNlZmZhOGZhLCAweDFkYmU4ZDA3LCAweGI2YWNmZmQwLAorCTB4ZjJiNzg0YmQsIDB4YzlmNDFiZDUsIDB4OTljZWFmNTAsIDB4ZGI1MTcwNGMsIDB4YjZjZmFlY2YsIDB4NmRlNzgwMzIsCisJMHgxZGViYjdhYiwgMHhlOGVlZmMxNiwgMHg5NTIxZWU5MywgMHg0MTNmMTA1OSwgMHg2NzkwMDk5ZSwgMHgzYmJjNDBiYSwKKwkweDM5N2VhN2EyLCAweDljNjE3YmE0LCAweDkxY2Q4YjI1LCAweDcxOWVkYWVjLCAweDNjZjQyOGI2LCAweDg2ZGEzZWJiLAorCTB4YWZhZWNkZTMsIDB4NzE2NTg4N2EsIDB4ZjY2Nzc3ZmEsIDB4NjZiM2JmZTYsIDB4YTBiMzE3Y2UsIDB4YjNjZmU0M2YsCisJMHhlNDI0Y2U0NSwgMHhkNDUxMGE4YiwgMHgzZTlhOWJmMCwgMHg3OTgzNzg4NCwgMHgzNWUwMDYzZCwgMHhkYmMzZmUyMywKKwkweDBjMzg0NjllLCAweDZjZTYxNDVlLCAweGE5YTk0Zjg2LCAweDhiOGUxZjAxLCAweDM2ZjM4Y2Y0LCAweDgyNmJjYzg4LAorCTB4ODEzNWE5N2EsIDB4NTQ4ZjM4OGIsIDB4ODc2YzI4YTAsIDB4NTI4ZDg0NjksIDB4MWRmOTBiMTYsIDB4NDgwMmVkMzAsCisJMHhlZTllMjQ1MywgMHhjM2Y1ZjI3MywgMHg2NzdlM2Y3NywgMHg1YzNjODEzMSwgMHhhMWNmNGFiZiwgMHgzYjYwNmFmNCwKKwkweGZlMDBhNzU3LCAweGQ5Y2MzMTBkLCAweDRmYTFlOGVjLCAweDNlOTUxZmI1LCAweDZmZWRmYTU1LCAweDcwYWU3YjdkLAorCTB4Mzk5MzY3N2QsIDB4MzM4NjU5M2MsIDB4NTZlMzA0YzksIDB4YjljYzNjM2UsIDB4M2FmY2I4NDYsIDB4MGYwMDYxMGQsCisJMHg4MTdhZDA1YiwgMHg3ZDZjMGI1OCwgMHg5MDM1MzdhYywgMHgwZmNkNzY1NywgMHgyNGE1YjdhZCwgMHg4NmY1OGZiNiwKKwkweDkzZTU1M2FlLCAweGMzY2UyNjM5LCAweDAxNTEyN2MwLCAweGZhZDc3Nzk4LCAweGYxMGM1MWExLCAweGNhMmYzMDJkLAorCTB4Y2Q4YmIzOWQsIDB4NWQ1YmNlMjIsIDB4NTA0ZDUzZDcsIDB4YmJiNmU2MTksIDB4MzNlOTQ0YzksIDB4YzM2OGMwNGQsCisJMHg3NjRkM2UwMCwgMHhlNGRmM2ZjYSwgMHgyOWFkYjRhMCwgMHg5ZGRiY2E4MywgMHg2MzNmOWEzNiwgMHg4MDY5ODg4MSwKKwkweDg1MzA4YWE3LCAweDhmM2NmZGZmLCAweGU1NDE2NWU1LCAweGVlOWM2ZDUzLCAweDExMDM1YjRlLCAweGZkMzkyMGI2LAorCTB4MGQ3OWJkNzEsIDB4MGVmYTQyOGIsIDB4Y2NmYzg4M2MsIDB4NWRiMjg3MWEsIDB4ZjVlOWQ0MzAsIDB4NGNjNDIzNjcsCisJMHgzZjNlNGZhNCwgMHg3ZDEyZGRiNSwgMHgxNjNmYzkyNywgMHgwMmVjNzA2MSwgMHgyNGIxOWI5NiwgMHhlMDIzNzRmYiwKKwkweDM4ZjJlZTZiLCAweDliMTI5MDI3LCAweGU0OTQzOGQxLCAweGI0NmYwY2MyLCAweDdlYjAwMDkzLCAweGNjNzg0MzBiLAorCTB4Zjg2MGU0NTMsIDB4MjM5NWFhOTIsIDB4YjI2YjdlYjEsIDB4ZTY3MTgwNTUsIDB4NWFlNzljNWEsIDB4Y2VkNWZkYTksCisJMHg0YjdiZjFmYiwgMHg5MzI1MjE5OSwgMHg5MDI2Y2FhYSwgMHg3MjI4Nzc2MywgMHhkY2MwODk2YywgMHhhMDc3ODdjOCwKKwkweDEyZmU0NDljLCAweGZlYTJhNTBmLCAweGYwNTVhM2I5LCAweDU2Y2YyOTFiLCAweDIxZDcwMDBiLCAweDc4ZDJlZWNkLAorCTB4MDU1YjEzOTQsIDB4YmI2YzBlZTcsIDB4YTlhOWU0MGQsIDB4MGQ3NjllNDcsIDB4N2E4MTdmNzMsIDB4ZjQwNzdkODEsCisJMHgyNTVmZmQwNywgMHg1ZDcxMDIyMCwgMHhjYTFjNzI2ZCwgMHg3NTgyNGRmMSwgMHhiOTc5YzMxNywgMHgwNTlmMDgwZCwKKwkweDZlOWM5ZDBhLCAweGM4ZTExMzM5LCAweGEzZWI4MWVjLCAweDY1MTA1ZmY4LCAweDI4OGIyM2NjLCAweDNkMTQxYjZmLAorCTB4Nzk0MDY0ODYsIDB4MzEwZTRlNDUsIDB4Y2E0MWY4NzAsIDB4M2EzZjExZGEsIDB4YTBlOTA5YTcsIDB4YzUxMjkyY2IsCisJMHg4ODZmMjhmYSwgMHhmMmMzODk0OCwgMHhjOTEyYWQzOSwgMHhhYTllOTU0NSwgMHg3YzI4MzVkNSwgMHhhM2JlMTczMywKKwkweDJhOTEyYmRlLCAweDU2YmU5MTYyLCAweDc0YTQ0Y2I2LCAweGNkOTI4NmNlLCAweDI0ZTNhMDVlLCAweDlhM2IxZGMxLAorCTB4Yjg2N2EzZDYsIDB4MTNiNTM5OWUsIDB4NTViYzQ3YWYsIDB4OWI0NjMwZWYsIDB4N2E0OTZmMDAsIDB4MTA0ZTUyNmYsCisJMHhiZWQ5Y2UzZiwgMHhiYjQxODkyYSwgMHhkM2NkZGJmMywgMHg1YjE3ZmU1MSwgMHhhMWEzOGFjYiwgMHhkMTZkYmNmZCwKKwkweDFlOTA1MmQ5LCAweDdhZTZjYTQ5LCAweGM0ZWQ0MTY0LCAweGFjZjAwNjM4LCAweDI3OTFmYmY5LCAweGU3OGZhMGFjLAorCTB4ZTg1NjlmNDIsIDB4NzBiNjliZmYsIDB4ZDRhYTE3OWYsIDB4OTI0ZmVkMzQsIDB4MzFkZWU3ODAsIDB4YTFiM2UyNzksCisJMHhlMGYxNDJmZSwgMHgxZjUwYTMyZCwgMHhlMmE3YmUwOCwgMHhjZTIzYmVhOSwgMHg1MDNjODdkYSwgMHgwZmMwNzNkMywKKwkweGRhZjdhMDBlLCAweGY1MWVmNWZmLCAweGQ2Zjg5NWYzLCAweGJlZDBlNWY1LCAweDQ4ODVmNmE2LCAweGE2ZTE2N2VjLAorCTB4YTE1YmU0M2YsIDB4NDllOGEwZmMsIDB4MTczZmZlYzMsIDB4NDU2NTNmYjYsIDB4OWVkZDZjMDIsIDB4ZWU3YzdhODUsCisJMHg0ZjI4YjRhNiwgMHhmOTE3ZjIxZiwgMHhiZDUxZjEwMCwgMHhhYWY4MjA1ZiwgMHg1MTdjMzNlNSwgMHhjN2JiODQwNiwKKwkweDRjNTYwY2NmLCAweGY0ODBjY2FkLCAweDhkNjI1ZTdlLCAweGY2YTgwZjY4LCAweDMyM2U1YThjLCAweGYzYWRjYjliLAorCTB4OTA5M2ViNTEsIDB4YjUzZmU2NGUsIDB4Y2NmNTA5MjUsIDB4NWYzYzExNjcsIDB4NmZhZGQ0ZjEsIDB4ZWNmMmRjYTAsCisJMHhhZjEwMWEzNCwgMHgzODMzMWQxZSwgMHg0MTc5OWY1MSwgMHg1NTFkMjJiZiwgMHg5M2M2ZmYwMywgMHgwNGFlNjFkZCwKKwkweDBlY2EyYTdhLCAweDZmY2ViODI3LCAweDUxZmE0MTFkLCAweGE3N2MxNzlkLCAweGNjNzRjZmYyLCAweGQyMThmMzg1LAorCTB4NzQ4ZDk5ZGMsIDB4N2Y5ZDY3ZmYsIDB4Y2ZmM2UyMmUsIDB4MTdhNzY2ZjUsIDB4ZjVjZDk5ZjEsIDB4NGJkNzlmZGIsCisJMHgwNWVlNThhNSwgMHhlNDdiNDE4NiwgMHg4ODVmZWJjZiwgMHhkOGY0YjU0OCwgMHhmYmQyMjU2ZiwgMHhkNjc2ODRiMiwKKwkweGVhMzY0MjhiLCAweDc2Y2NmMGVkLCAweDFiYjIyY2MzLCAweDlkNTlkMTE4LCAweGMzNTlkMzk1LCAweGUwZTk3ZDAxLAorCTB4YThjN2IyMTgsIDB4MzdlNzQ2YTQsIDB4MDVhZjg1ZjQsIDB4OWRkNWJkOGEsIDB4ODBkN2I3ZGYsIDB4ODdiMzUyN2MsCisJMHg2ZDM1MTFkYiwgMHg1MDhlYzg2NywgMHg4NTVhOTJlZCwgMHgzOWVlMTc5ZiwgMHhkYTg1NzY0MywgMHg4NzFmNmVhZSwKKwkweDVlM2VlZDRiLCAweGM4MDE5NTVlLCAweDgwZTVjZDFkLCAweDBhYmE0MjAwLCAweGZiZjkwNWYxLCAweGQzZDdmNWZlLAorCTB4N2JmMjY5OTcsIDB4YjVkZjdmMjksIDB4NzUwZjJlNTYsIDB4YjdhODQ5OWQsIDB4MzQ5YzY0ZDYsIDB4OTc2YmZlMjAsCisJMHg1ZTQyZmQyYiwgMHhiY2RlMzQxZiwgMHgyZjA0ODFlYywgMHhjMTZhMWYyYywgMHhmZDhkMGVmNiwgMHg5YTJmYmI1MCwKKwkweGMzNmJmYmRhLCAweDk3YmVhMzU2LCAweDRjM2EyY2ViLCAweGE0MmQ2YjliLCAweDhiZDViN2ZmLCAweDljNWNiYTE5LAorCTB4ZWQxMzk4NWMsIDB4OTE2MTgzYjksIDB4MDc0NzI4NTksIDB4MDY2NTNjMmUsIDB4M2I2YTAyNDgsIDB4YmU1MDg4OGYsCisJMHgyZjczY2EzYSwgMHgwMzFjNjdkMiwgMHg2ZjUwOTBhZSwgMHg1ZmI0MDVmOCwgMHg3NGY5NWUzYiwgMHg2ZTNmZjYwNCwKKwkweDA2NmJlMDQ4LCAweGJmMGJkNzUzLCAweGYyMGM1ZTliLCAweDJkOTgxOTY0LCAweDA2NjcxZjY0LCAweDBmMWQyMDQ2LAorCTB4ZjRlNWNjM2MsIDB4MWFiNjdhZTMsIDB4YjlkMzFiZjUsIDB4ZjcyODM0ZDksIDB4M2M0MmRjYTMsIDB4ZGJlNjFiN2YsCisJMHgxZGZmZmYwNSwgMHhmZWM2MGZmMywgMHgxNDNmYzk5OSwgMHhkMGE0YmRkYiwgMHg1OTY4ZGJhNywgMHhhZWJjYzAyZCwKKwkweDgzNTllYTFlLCAweGQwNDFiZTRiLCAweDIyMmQ5MzVmLCAweGFjMzRhNDBlLCAweGRmZTdhMWQ3LCAweDgyNzU3YjU1LAorCTB4YzExM2E3MjIsIDB4YzhiYjQwOGUsIDB4NDE2ZWM4MzAsIDB4ZjMzNjZlM2EsIDB4Y2NiMjA5ZjUsIDB4ZjcxZTYxMWEsCisJMHg4ZDllMWU2NywgMHhhNzZkN2E3YSwgMHg5ZDYxMTk4OSwgMHhjOGMzM2ExMywgMHhlNDFjNGQ3ZSwgMHg2Y2Q2YmQyMiwKKwkweDJkYmQyMjRlLCAweDAyYWM3NDM4LCAweDE0Y2UxZmVhLCAweGNmYWMzYWZkLCAweGNmYWMzZTRjLCAweGFlNzYyMTRjLAorCTB4OWRiMTk2NjgsIDB4NmZiNWYwNzAsIDB4OTYwZmJlNTEsIDB4ODI4OTFlMmUsIDB4NDdiZTBkZjUsIDB4OWQ0MzM2NzAsCisJMHg4ZjczYWVjYSwgMHgxNWE0MWJmZiwgMHhmZGVjNzY5NywgMHgyZGZmNDg1NywgMHhlMTEzYjNjYSwgMHg3NWNiYmE3YSwKKwkweDViYTgwM2M2LCAweDM5MzM2ZDZiLCAweGMxNjBkZWI5LCAweGVmNzgzOGViLCAweGIxMzY5MWI3LCAweDlkMWQ3ZTY3LAorCTB4NGRmYjllZTcsIDB4MjcyNmE2MmUsIDB4MDcwOTlmZWEsIDB4YTExZmQyMjUsIDB4YzNiMGU5ZjMsIDB4M2Q1Mjg3YzQsCisJMHgyYzNiM2JiMiwgMHhiMDEwNGZhMiwgMHg3MGY3OTFmZSwgMHgxNjRjMTM3ZSwgMHhiYWY2ODRiZiwgMHhiMDY1ZmY0OSwKKwkweGM0OGU2MTdlLCAweDkzNTc3M2U4LCAweDgzZGY2MTRhLCAweDkzOGIxMDkxLCAweGQxNzQ3ZDQ3LCAweDM4ZWI3NjQyLAorCTB4M2E1NTBmODUsIDB4ZGI5YjJiN2IsIDB4NzIyOTZmOGYsIDB4NzMzMzg1NTUsIDB4YWY1ODJjYzgsIDB4ZDY2Y2YwYTgsCisJMHgxMDIyZmFhYiwgMHhmODdiMzJjZSwgMHhhZjUyOTE3NiwgMHg5MzI4OTJlYiwgMHhmNDZkNWUxZCwgMHhlYmIyZTgzMSwKKwkweDMzZDI1MGUwLCAweDNmZDljOWZkLCAweGY2MDFkZGEwLCAweGY5NTRmMmM0LCAweDUzMjc4NDVkLCAweDBhY2RlZWY0LAorCTB4MmRmZDU0ZmMsIDB4YWNkZmZkMjksIDB4OGI2NmYxYzAsIDB4NTM3NmUxYzgsIDB4N2ExNGRjMDgsIDB4MWU5N2E1MGEsCisJMHhkYjQxODg3YSwgMHhlY2NmMWJhMywgMHg1MWEzZjZiZSwgMHg2YmRmODRjOSwgMHhmZDc4ZTYxZSwgMHhlZGZhZjA5MCwKKwkweGNkODAyYjViLCAweDRkYmZhMGQ4LCAweDBjZmVmYzIxLCAweGI5OGJmNTc4LCAweGVkYWYwMjNmLCAweDliZjU3OGExLAorCTB4Mzc1ZTIxODcsIDB4YTA2NzY0ODksIDB4YTM3Njg4MWQsIDB4YjVjMGU1MDcsIDB4NjBmNmU3OTQsIDB4NTEzOTIzMDYsCisJMHhkNzM5ODUyOSwgMHg4MDc3ZTMyNCwgMHg4N2M5MTY0MywgMHg1NDFmMjhhMywgMHgxNWM0MzBiOSwgMHhlOWY1MDZiOCwKKwkweDcxZTU3MDY5LCAweDhkYjEwMTdlLCAweDEwYTRlNzk3LCAweGY2YjAyNDVkLCAweGJjMDcyYzc4LCAweDI3N2RhMWU3LAorCTB4N2U2Njg2OTksIDB4ZTViNzcyMGMsIDB4ZGZkZWRmMDEsIDB4ODJjZDNmNDAsIDB4OTgzY2ViNmYsIDB4OGI2NmY3OGYsCisJMHgwZWI3ZWQxMywgMHhjM2Q1ZTg5ZiwgMHg1OWEyNWEzYywgMHhiZjE4N2VkNiwgMHg0ZTU1ZmU2NSwgMHg0NTMzOTYyZiwKKwkweGY4Mzc0YzZlLCAweGVmODM3ZWQwLCAweGJkZjg4ZDQ5LCAweGU5N2Y3ZjljLCAweDQ0MWY2N2VmLCAweDhkMzNhY2ZiLAorCTB4YjI1YWJhZDEsIDB4NjdkYTNhNTksIDB4ZjQxOTY1MmQsIDB4ZGNhYWI3ZmQsIDB4Yjc4MjMwNzksIDB4ZGRmNGUzMmYsCisJMHg0M2U2ZGYzMiwgMHhhM2U4ZjQzZCwgMHgyN2E4ZTFiZSwgMHhmMWNiYjY1YSwgMHg1MTBkNDgzNiwgMHg5ODFjZjg5ZSwKKwkweGQzODkyMGZmLCAweDk0MzI0YjdkLCAweDcwNTliYTQzLCAweDdlYzVjZjk3LCAweDBkZjNlMWFlLCAweGZmM2Q4Nzk0LAorCTB4NGU2NTc0MTQsIDB4ZTUwNmQxMDUsIDB4NzYyMzFiYTcsIDB4ZTk1NTVjYTAsIDB4MmUzMGYwNzQsIDB4Y2Y3ODg3ZGYsCisJMHg3OTM4NDU2YywgMHg3YThjYjAyNywgMHg4NTQzZmZlOCwgMHgwYmY4NTRkZSwgMHgwMDhkMzZjMCwgMHgzYzEwOThmNywKKwkweGEzMTc3NGE4LCAweGNhNTg1ZmMwLCAweDQxM2JjZmU5LCAweGYzMWQ0ZjU5LCAweDAwOTFiZmExLCAweDM4MDcwOTUzLAorCTB4ZjBjMTFhNTcsIDB4ZDU5Njc0ODMsIDB4NmZmMzhkOTMsIDB4OTFmODBjNWUsIDB4MGYxYzFkNzAsIDB4ZGQ1NjQ1YTcsCisJMHgxNTVmMDdkNiwgMHgwZGYxMjhlNiwgMHhhNmY5MDIxOCwgMHhhOWJlNzE5MiwgMHg3YTQyYmE0NCwgMHgwYWJhMDQ2YywKKwkweDQ4MTY0N2EyLCAweGFlMTczZTg4LCAweDgzY2ExNWQwLCAweDFjYjhmNzA4LCAweGMyNTdlNzU4LCAweGYwYjFmMjFmLAorCTB4YTY5NGZmYWQsIDB4YTRjZTM1ZjcsIDB4MWUyZjJlMWMsIDB4NzM0YTdiMzMsIDB4ZDA0ZGVmNDgsIDB4NjU2ZjlkZDgsCisJMHhmYTg4OWE3ZiwgMHhhZmJkZjRlNSwgMHgxNDlhNjAyNSwgMHhlYjhjOWVlNSwgMHhkN2ZlNWNkOCwgMHgxZmZmMTQ1MiwKKwkweGI4ZjQwN2M2LCAweGZmY2IwZjhlLCAweDJkZGEyMjRmLCAweDIzNWY0Yjk1LCAweDc5ZDJiZmZhLCAweDM3OTg5OTk2LAorCTB4NWQxZWUwMWMsIDB4MDBmZDM4MmMsIDB4NDYyZDc5YmYsIDB4MTZmODI0ZTcsIDB4MGM3NTVjNTcsIDB4NmFkNjU5ZTEsCisJMHg1NjkxMTg3NCwgMHgxYzhkNjJkOCwgMHg0MDhmMmIzYiwgMHhkYTFkOGEzNywgMHgzOWJhMjQ2YSwgMHhmNDg5NGJmNywKKwkweDhiOTJiOWMxLCAweDBmODAwZWFmLCAweDRlMDg1NmU3LCAweDMyZDY1N2FjLCAweDM3OTAyNTZjLCAweGE4MTYyOTJiLAorCTB4YTA1Nzk5NWUsIDB4MWNhOTY1N2EsIDB4MDUxYTI3NWYsIDB4YWY0MDM3YTIsIDB4ZGUyODNiMjUsIDB4OGVmNWE3MzEsCisJMHgxM2RmODhhOSwgMHhhNDBmNWZjNSwgMHgxODdhYzFmOCwgMHgyZTYzZTU0NywgMHg5NTllNDhkZSwgMHg1NmFiZjUyOSwKKwkweGJiNDc5MTFiLCAweGFjYjU5N2JmLCAweDNmZmM4OGJhLCAweGRlNTIxYmQzLCAweGVjNTNlOTNhLCAweDViNTFhY2I3LAorCTB4ODIzNWM2ZWUsIDB4NGU1Nzc3MWQsIDB4MDdjYTBjNDQsIDB4ZWZjZTY0ZTYsIDB4NDBmMjQ4MTEsIDB4OTNmYTBmZjIsCisJMHg0NDcxNDBiYiwgMHhjMjBmMzBjZiwgMHg2MWJjODljMywgMHg5OWViYTQ3YSwgMHhkYmEwNTcwOCwgMHhkZDdjYTVlOCwKKwkweGJlMGFhNzMzLCAweDk5Y2ViMDQ5LCAweDFmNjdjZTE2LCAweGZiYmUwOTk2LCAweDA5ZmYzZTA1LCAweDUwNjVlZjQwLAorCTB4NWQ3NDBiMWUsIDB4MzhlNGMzMTYsIDB4ZTYyNmRkNDgsIDB4MmU3OWM3MGYsIDB4Y2EwOWY2MWQsIDB4ZDQzOGQzZGIsCisJMHg4ZmVmYWEyOCwgMHhmNzVjYTFiNCwgMHhiNzg5MTFlOCwgMHhlNWE1MmYzMiwgMHhlZGU5NDdjYywgMHg5OGYzNGZjYywKKwkweDc0OTMzYWMxLCAweGZjOTNhZjkwLCAweGYzOGUzMTJiLCAweDAzNjdiMzJiLCAweDhiNWZkN2QyLCAweGUwMTY5YzRlLAorCTB4NDIzOWRkZmIsIDB4NDM5NDI4ZGUsIDB4ZGQ2ODAzOGQsIDB4NzAxZjViOTcsIDB4MDY3NjgwYTUsIDB4NWZhYzQxYWEsCisJMHgxNDdlZTM5NiwgMHg0Y2NhYjNmYiwgMHg3NGFiNzE4ZiwgMHg5OTVhOGU5NSwgMHgxN2Q2MTUzNywgMHg5YmUyZGViYiwKKwkweDZiOGJlYjA0LCAweGY1YzIxY2Y1LCAweDM4Mzc0ZmE2LCAweDEzODNlZjEwLCAweDc0MTMzYWY4LCAweDU0M2Y5ZmRjLAorCTB4ODFhMzYwNmUsIDB4MTgzZjM2MGUsIDB4ZGIzYTQzZTYsIDB4ZGEyMDM1YmMsIDB4MDNlNmZlYTEsIDB4OTdjYzAxODAsCisJMHhmMGJjMTRhZiwgMHg0ZTYxZWFkZCwgMHg3NTU5ZDM4YywgMHhmZWVkMTExZSwgMHgxODhmNTZhMiwgMHhlMWE3ZTIwOCwKKwkweDM5NDQ0MWIyLCAweDIzZDNiZTkxLCAweDVhYjQ5ZWEyLCAweDM1M2Q1M2Q3LCAweDRmZDRhYzVmLCAweDU5MDY3OTM3LAorCTB4NGU5ZTRlYzksIDB4YTE1YzMzZjQsIDB4ZDQ5ZmI1MWYsIDB4MDQ1ZjgzNTYsIDB4NGFjOTE3YjgsIDB4NTdiNzk5N2QsCisJMHg5ZThhNjFmYiwgMHgzOTYxZGI1NiwgMHhhYjdhNjdkMiwgMHg0NTNmNGZhMywgMHgzZjUwNWI0ZCwgMHgwOGY4OGY4MywKKwkweDdiZDIwNWM2LCAweGZkNzExZmNhLCAweDFiZjA4NGRhLCAweDM2YWJmMzc4LCAweDIxMDMzNzRjLCAweDlkMWM3MWY4LAorCTB4NzllMzRjYzcsIDB4MTVkMzNjZjgsIDB4YmZiZjg3ZGEsIDB4NjNlMzhmN2YsIDB4YjliYmYwMWUsIDB4ZTQyMmZlZjUsCisJMHgxZjAwY2RhMywgMHg5ZGU2ZjNjNCwgMHhjZmQ0Y2NiMywgMHg3OTlhNTlmNCwgMHhmMjg2YTkzMSwgMHg0YjA3MDgyNSwKKwkweGEyM2M3NWVmLCAweGQ1M2QyZmNjLCAweGJkNjk1YTIzLCAweGU3Njg0M2NlLCAweGUyOGNjYmE1LCAweDc2M2Y2YTAxLAorCTB4ZjQwNTc0MWQsIDB4ODU3YTc3NmEsIDB4OTBjYmNjN2EsIDB4NDdiODk0NWEsIDB4NGViMzhlM2EsIDB4NWQzMWZmNDAsCisJMHg2YjQ5NTdjMSwgMHhmNjMzNjFmZCwgMHg1ZjE0NjZlMywgMHhmZTg1Y2Y0YywgMHg4NDI2ZmVhMSwgMHhmYzM3YTE4MywKKwkweDVlOTllNzQyLCAweDQyNzNlN2NjLCAweGYxOGVkZmE5LCAweGU3NmM3NDk0LCAweDc0NDMxMTU4LCAweGQ1ZDdlN2M1LAorCTB4MWM2MjE0ZWEsIDB4YTA4ZmIxOTcsIDB4N2U5MGM5ZmQsIDB4MGNiOGMyOWUsIDB4N2U0ZWNmYTQsIDB4YjQyZTRhNmQsCisJMHg5N2QxZmU3ZiwgMHg1MmQwYjQ3NiwgMHgwZmIzM2UwZSwgMHhmNWFiNTZlNSwgMHg5YzcwOWJlNiwgMHhmZjlmMjI4MywKKwkweDVkZTI3MjRkLCAweDIwNmRkZjk4LCAweDUzYmU5YTNkLCAweDc5NDRkYjRlLCAweGViZmQxMzkzLCAweDU1ZGY1NmFlLAorCTB4MmNiZDQyMmYsIDB4ZWI2NGM2MTgsIDB4MGExMzhmM2QsIDB4M2ExNWRhOWMsIDB4Y2I3OTM5MzgsIDB4NTNlZjVjMjAsCisJMHg1ODJjNzc0NSwgMHg1Zjg3ZWQwMiwgMHgzYjhkMzhmNywgMHg5NGZjY2E3YywgMHg5YjBmYzgxNiwgMHgzMGFiY2JmOCwKKwkweGM3OGU1ZjdmLCAweGZlZTQwMjNjLCAweGRlNWZkMmIwLCAweDZhZTUwZmI2LCAweDgyMWNmY2U5LCAweDQ1NzZjNTk3LAorCTB4ZGEzOWE5ZjIsIDB4YmYwMmY1ZTMsIDB4NTJkYzQ3MzcsIDB4ZDJiOGZjOGUsIDB4MjQ0ODcwNjYsIDB4ZmExOWViNzcsCisJMHg3NzExY2Q1OSwgMHhlNWJmYjFkYiwgMHg0YzI2ZjlkMSwgMHgzNmJmZDYwZCwgMHg2ZTNjOWNhMSwgMHgxZTIxMzFjOSwKKwkweDE4MTMyZDlhLCAweDBhYWNlYjk2LCAweDRmMWJiZTllLCAweDg4NTI0MGZhLCAweDczODQ3NzcyLCAweGU1NzQ0Y2JhLAorCTB4MGMyNzI4NjQsIDB4YmNhZDA2MDksIDB4MmY3OTcxZDYsIDB4YjQzZTFkZDksIDB4ZjVhY2JhOWYsIDB4NjBjYzgxNDgsCisJMHg3Y2EwNTQwOSwgMHg2OTc5NTQ5MywgMHgzYzcxN2E3MSwgMHhhM2I0ZTJjOSwgMHg5MTQyYjRiZiwgMHhhZjg2MmMzNywKKwkweGY3Mzk2MGQzLCAweDVlYWYzODlmLCAweDk2MmU2M2ZkLCAweDg2N2Y0YjUwLCAweDQxMjhjY2IwLCAweDliZGEzZmY5LAorCTB4NTczZTEwYzYsIDB4YmJjNTgzNTMsIDB4Njg0NGY1MTgsIDB4NzAyMDVkN2YsIDB4NGZhMzhlNTAsIDB4N2UzMzc2NDcsCisJMHg1ZWRkZWU0OCwgMHg3YTM0MWJiMiwgMHg3YTVlNWJhNCwgMHhmMjIxZjVhMiwgMHg3YTgxMWU1MiwgMHg3OTIwNThhMiwKKwkweDBjZWI2MWU5LCAweDBjMTJmZWI4LCAweDNjNWMwMGIyLCAweDU0NWViOGRiLCAweGNlMjY3YmY5LCAweDQ5ZTVmMDA1LAorCTB4NWU1YzkxNjUsIDB4MjY3M2U0ZTksIDB4ZDFlZmM2MGUsIDB4NDUyYTVjYWUsIDB4NWUwMjFlMjIsIDB4YzNlOWUwYzksCisJMHg5Mzc4Zjc5ZiwgMHg5ZDFlNTA3ZiwgMHhhOTg3ZmE0MSwgMHgyMWZlOTAwNywgMHgwZmUxNDRmZCwgMHg2ZjA3OGE4ZiwKKwkweDUwYTNmNWQ5LCAweGQ5MTJjYjVmLCAweDg1Y2I5NTAzLCAweGUyY2ZiNDM2LCAweDY5NDdkMWJjLCAweDJlZGNjNWJlLAorCTB4YTZiZjk3NjgsIDB4ODkyYTFjZjUsIDB4Nzk3OTQ0NGIsIDB4Yzc5OWQ5NjIsIDB4YmViZDQxZWYsIDB4ZmZmNDljMjksCisJMHg1NjY3YTVhNCwgMHhhNjZlM2M2MCwgMHgyMTFhNzA1NywgMHg3ZDFhNTllZiwgMHg2Zjk4N2JmNywgMHg5MDVkM2EzNCwKKwkweDgxZjBhYjNmLCAweDkxNDU5N2ZiLCAweGI4MDg0ZjY4LCAweDc1OWU4Y2NlLCAweDgzMzIxNjU2LCAweGYxMzllMjliLAorCTB4M2I0MDk2MzMsIDB4MzRlMGEzNGYsIDB4YTFlMDdhM2IsIDB4ZWY1MjdhYzcsIDB4MzdiYzA1ZjUsIDB4ZmFkMGZlNDYsCisJMHhhOGQ3YmMzZiwgMHgzZTc3NTljOCwgMHhjNmEyZDljYSwgMHg3MDBhODdlNCwgMHg3Y2Y1ZWI1ZCwgMHhkN2QxOGQ5ZSwKKwkweDM5MjdkZTUzLCAweDFjYjk3NjM5LCAweDNmZDhhOTllLCAweDU3YjNhNTllLCAweGMwZjdjM2M2LCAweGNlZjk0MTZhLAorCTB4YzhhOTU2ZjEsIDB4ODhlMzQwZTUsIDB4MGQzZjE4NjMsIDB4M2U0ODE3MmMsIDB4YTI1MmJjNzksIDB4NWNjZGRhMWYsCisJMHhlZjc4NGQ5ZSwgMHg1ZDkwMGEyOCwgMHhiNDNkZTVkOCwgMHg3MjJiNWE5MiwgMHgzNjc0YTNkZSwgMHg5NDU4OGMxNywKKwkweGUzZGZhNzZmLCAweGZlNDc5ZmZlLCAweDliYjYyNTYzLCAweDgzYjVhMmQzLCAweDBjZmQwMjI2LCAweDY3YmNiODQwLAorCTB4ZjFlOWZkMjYsIDB4ZWZiYWQxOTYsIDB4ZWE2OTQ1ZjAsIDB4ZDM4ZWFkNTUsIDB4OGJhYjNkZTQsIDB4ZTdiMGM3YWUsCisJMHg1MjI3N2JhYywgMHgzOTkyYWYzYywgMHgyYWRlOTEyMiwgMHhjMTM3NmU2NSwgMHhlNjFiMjU5ZiwgMHg0ZjlkNTczMywKKwkweDJhYzdiNzMxLCAweGEyN2VjMThiLCAweGIwN2I1YWVmLCAweDMzODlmZWM3LCAweDc4YThkZjIwLCAweDNhMTNmMTU0LAorCTB4MTk3NjVlZWYsIDB4YWNkMDc2ZTMsIDB4ZGQ3YWRhNzUsIDB4MTYzMDEwNzYsIDB4ZTVjYWJhOGEsIDB4MzJiZjc2ZGEsCisJMHhiOTQ1OWZiYiwgMHhlMDM4ZGVlOCwgMHhhZWFiZjIxYiwgMHg4MDgyMWU1MCwgMHgyNjZlN2YyMSwgMHhhNjFmNzFlMywKKwkweGNlZDU0M2U4LCAweDUxN2E1OTJmLCAweDY2Njg3MjhmLCAweGMyM2Q0NWUzLCAweDFmZDJlNjczLCAweDM4NWZhN2U2LAorCTB4YTFiZWYzYjUsIDB4M2ViYjRhMjAsIDB4YmY5MzRlMzksIDB4NTM0NDM1ZDEsIDB4MzBmNzY2ZmYsIDB4YTc1YmY3Y2QsCisJMHg1ZWY5YWI1ZiwgMHhjOWE5MTllZSwgMHg1ZTNkNWVkZiwgMHhmZDQ2N2Y1MywgMHg3YTFjYWQyNCwgMHhhM2Q2OWEzNywKKwkweDc5YmZhN2UyLCAweGEzZThhNWJmLCAweDEyZWM0Mjc3LCAweGUyM2E5ZDM1LCAweGJmOTExMzNmLCAweGU0NjcyYzNmLAorCTB4MzM3ODdjYmYsIDB4MWQzMWY4ZDMsIDB4ZTc4MjI0MjMsIDB4ZjkzZDVjODAsIDB4YzhlNWY3MzEsIDB4YmYyMDhmZWYsCisJMHhhMWY0NGZjOSwgMHg3MzQzZjNjMiwgMHhhMjI4YzlhMSwgMHg3ZWU0NjI3ZiwgMHg3MjVmYTg3OSwgMHg1ZTUwMzk5MCwKKwkweGZkYjFkNGNlLCAweGZmOGY1NDQyLCAweDljZjMwZTY3LCAweGUzYmFmZWM3LCAweGYxMGY0YjBkLCAweDFmODg0Mzc4LAorCTB4ZmY3OGE1NzMsIDB4YmZjYzA2NzAsIDB4NGQ3OTc5MGYsIDB4MTZjM2Y3MmUsIDB4ZmZhZjM2ZWUsIDB4YjU4ZTA4MzgsCisJMHhmYzlhZDE2ZCwgMHhlYmYxZmRhMiwgMHgzYmQ2MGUzZiwgMHhhZTFkMDQ0YiwgMHg5M2UxNDZiMywgMHg3ZGEwMTY1YSwKKwkweGEwZThiYjUyLCAweDQwYzRlYWZlLCAweDU4M2JlNjJjLCAweGY0YjQ2YzY3LCAweDBhOGI4MzhmLCAweDI1OGY4MDBmLAorCTB4YTlkZTI4MzcsIDB4MTkzZmMzZmEsIDB4OWUwYTQ1M2UsIDB4MWE3MGI0Y2IsIDB4OTBlM2NiOTMsIDB4MjkxMDhmNWYsCisJMHhjNzIzOWNkZCwgMHhmMTAzZmVlNywgMHhmNDllYjQxYywgMHhkYzdmYmNkYywgMHhjODQ3MjI3YSwgMHg5ZjlmMDg1OSwKKwkweGUzZGZhZjFiLCAweDE3OTQwZjFlLCAweDdmMGI5MDhlLCAweGZlNGNiODI2LCAweDQ3YTVjMjQ3LCAweGQ4MmY0N2NmLAorCTB4NzJhM2ZhMGQsIDB4ZmRmYjgxOWQsIDB4YmY1YzMzZGUsIDB4ZmVmZDcyMzcsIDB4ZjY4ZmI0N2MsIDB4NDRmMzliODcsCisJMHhlZDA3MGVlNywgMHhlOTNlZDI5NywgMHg2MThkN2JhMSwgMHg1OWRmMTgxOSwgMHg3OTdkMjNhMSwgMHg4MTkwOTk3YSwKKwkweDIxMjZjMmZlLCAweDBmMzZmYzhjLCAweGM4MTY0OGFiLCAweGM4NzhiOWJlLCAweGFhMzFmZDQ4LCAweDNhZmRlZDA3LAorCTB4MDU1MWYzOTAsIDB4ZTQwOTZiM2UsIDB4NzFlNWNjZGYsIDB4NzE2ZTM1YjEsIDB4ZjUwMzhhNGEsIDB4MWVhYzFmZjYsCisJMHhlMjdhOGI4YSwgMHhmZDllMWUxMSwgMHg2OTZiZTEzMCwgMHgyYmVlNDVkZiwgMHg2YmQwMTI3ZSwgMHg4NTEyZDFlNSwKKwkweGQ1Y2M1ZjhmLCAweDJlMWYzYWQxLCAweDk0OWRiOTE0LCAweDFmNzBiYTJhLCAweGE5ZDgxNTYzLCAweDk2MDY1NzY4LAorCTB4OTE1ZjI4ZWIsIDB4NmQ1OWU5YzcsIDB4OWQwYTFmZjcsIDB4MTRkZDk0YzcsIDB4ZGE4OGYzODYsIDB4N2Q3ZGJhMjQsCisJMHgyZTUxZmI4YywgMHg3OTNkMGY4ZiwgMHhiM2VkMTg1NywgMHg2ODc0MmEwMSwgMHhkNmJkZGJlZiwgMHhhZjU4MmU2OSwKKwkweDhkOTZkMGJkLCAweGRjZGFkZmI2LCAweDRkNmZlYTY4LCAweGNmMTU5NzQ2LCAweDc0OGNmY2ExLCAweGZlOGVjYTc4LAorCTB4OGNmYWMwYTAsIDB4ZTY1NWNkMzMsIDB4NTgwZmVlYWIsIDB4ZTkzNmZlOTQsIDB4OWRhMmJmNDEsIDB4MWUyODk4MjIsCisJMHhmOTFhZjE2MSwgMHhiMTY3MTVmOSwgMHgxY2NhZGUyNiwgMHhhNzZlMGIwMiwgMHhmNDI4ZjNkNiwgMHgxYjQyYzc2YSwKKwkweGVmZjY5N2UxLCAweDVkYjE3OGQ1LCAweDFiYTQxN2ExLCAweGNmNGFiYmM0LCAweDg5ODNmZGExLCAweGU5Y2M4ZGVjLAorCTB4MTVkOWYzODksIDB4ZTUxYThlNTIsIDB4OGY3NDhkZDksIDB4MWY5MGVhZmQsIDB4MDdmZTVjYmMsIDB4ZTNjNGJlNmUsCisJMHhkZWQ3ZGUyYywgMHhlMTg4NzljMywgMHgwYzljNTI1ZiwgMHg1ZmNlNGFlYywgMHhiZWUyNDM0YiwgMHgwMjRmOTEzZiwKKwkweDQwY2YwZTY2LCAweGRlMWU1Njg0LCAweGRhYzlkMGFiLCAweDQ4ZGU4MjdmLCAweDNlYmMwMmJhLCAweDhmZTVjYjljLAorCTB4MzZmZGMwYWIsIDB4YjJjNzNiY2EsIDB4ZmJhMjMwZDQsIDB4OTYyNzBiMWYsIDB4NTEzODQ1NjAsIDB4Mzg3MmJhNWUsCisJMHgxZjNkZjM3OSwgMHhjYzc0OWUxMCwgMHg3ZjcxYjQ2ZiwgMHg3MmUxZjkwYiwgMHgzMWMyYTQ3YywgMHhiZTllNjQ0OSwKKwkweDNjODhmMmY0LCAweGNhMWJmYmU1LCAweDZhYjdhZTdlLCAweDYxZDkwZmM4LCAweDAyYzU3NzI4LCAweGNjMmNkMmM2LAorCTB4ZmZiNmJjNjEsIDB4OGY5YzBlN2EsIDB4Mzk2YWU4ODUsIDB4OTZhZWU1ZDIsIDB4Y2ZlNDMwOTQsIDB4Y2FiYzY1NjQsCisJMHgwY2E3ZDI5YiwgMHgyMDVmYTA3NywgMHgwNDBlZDAxOCwgMHhlM2MwYzNiZiwgMHg1NzRlZGMzZiwgMHhiOTRmN2FlNSwKKwkweDcyYzQ3ZWQ2LCAweDFmOGY2NjRmLCAweGVhZjdkYWE2LCAweDgyOTczYzc3LCAweDU5ZjNhYWUzLCAweGZkNjFkOGE1LAorCTB4MTI1NTc3Y2QsIDB4ZGNhMjcyNGIsIDB4ODA4Zjc2NWEsIDB4NWFiMWRjZjAsIDB4NzE3ZGY4ZDQsIDB4MDMyNTYxNWUsCisJMHg3ZmNlM2UzZiwgMHg4ZWZkMTNhZiwgMHhjZGFmYjAzOCwgMHhmNTc1Y2YyOCwgMHg1ZTA4MzM4MiwgMHgwYTgxN2I4MSwKKwkweGY4ODcxMzM4LCAweGUyNGZlMDJiLCAweDg5NjdiZDNhLCAweDU3Yzc0MjVlLCAweDg1YWJiMWQ3LCAweDVkZTcxYjhmLAorCTB4OWY5MGM4MmMsIDB4YTAyZjUxNTQsIDB4OTk1NmI3ZGYsIDB4YTMwNTVjN2YsIDB4M2U5OTY5ZWYsIDB4OWUyMWUzMDEsCisJMHhlMzhhNTYxNiwgMHgwMzMzNTY1NSwgMHgzMzJhZjVjNiwgMHhmMjg2NTM5OSwgMHg3NDQzYzZjYSwgMHgwMmI5ZWRkZSwKKwkweDIwNmYyNTM5LCAweDRmM2E0ZmM5LCAweGE0ZjAyYWUzLCAweDRkMWQwMWU3LCAweDc2NDMyODRkLCAweDg2NGJiODY3LAorCTB4MTY3Zjg5ZjEsIDB4NGNiNWE3MWQsIDB4NTllZmEyZjAsIDB4ODQzY2UyZDQsIDB4MTFkMDAxZmUsIDB4MmQzYzdkYzUsCisJMHhlNzVmMWEwMSwgMHg1ZDcyNzFlNSwgMHg4MGU5YzE4YiwgMHg2NThkNDg3NSwgMHg1NTIxZmZiNCwgMHhkNDMyOWMxYiwKKwkweGRmMjliNjNiLCAweDJkOTVmMThmLCAweDBkZGZkYzhkLCAweGQ2NzQ5M2Y1LCAweGQxYzNkN2ZhLCAweDk5MTBhYjVmLAorCTB4NzkwYTAxNDQsIDB4NTY1OWZhMmEsIDB4MzA1NjJlODUsIDB4ZjdlZTNiNzcsIDB4NDFmZTE5MzMsIDB4ZGNhNTQ4YmIsCisJMHgyYTZmM2Q1YSwgMHhkMGU1MjI2NiwgMHgxM2RjODM3OCwgMHg2YjllNDA5ZiwgMHhkM2IyNDBkYywgMHg2NzhkYWE5NCwKKwkweGM5MmIyZDQ4LCAweDdkNjIzM2FmLCAweDg5MGZhY2E4LCAweGE1ZDU0ODc3LCAweGFjOTcxNzE0LCAweGYzNWJmMmRhLAorCTB4OGUwODYyMjIsIDB4OWUxZTNjNTksIDB4OGQ4OGVmNzMsIDB4NzI3Y2MyYjcsIDB4MWZlMzc5N2YsIDB4NDE4NzNkMzAsCisJMHhmZTViODAzMywgMHg0YzA3M2JiMiwgMHhhYzE2ZmY4NywgMHhhNjIzNzhkOCwgMHhlOGNlYmM0ZiwgMHhlMDhmYzE5YywKKwkweGZhOGM2NjU3LCAweGU4ZmFmY2YxLCAweGIyYWJmMjk1LCAweGI5ZDAwZjI2LCAweGQyN2RhZmMyLCAweDA5NGYxYWJmLAorCTB4ZmU5NTRmZTUsIDB4NGQ0ZWY5NDMsIDB4N2Y4NjVlZDcsIDB4MTIwNTI2ZDcsIDB4ZGY0ZjBmOTEsIDB4ZGIwMzMyM2IsCisJMHg3M2RlMzY1NywgMHg1Zjg4YzdjOCwgMHg3N2QwMDcwNSwgMHgxMTcxNzdhNSwgMHg1NjYwYmEyMywgMHg1ZTViZDA5NywKKwkweDQ5MGIzNzg0LCAweDFmMzdiZmVjLCAweDNiN2M4NjNmLCAweDEzZTdlZmZlLCAweDk1ZGYwODdmLCAweDYzY2U4YzA5LAorCTB4ZjY0OWZkODEsIDB4ZGZhYTlhOWMsIDB4M2ViOWYyMjMsIDB4MjQ2NzkwYmQsIDB4YzE0NjRlYmMsIDB4MDUzYmFjMGEsCisJMHhjN2JlZTBkYSwgMHgyYjRlNjA3OCwgMHhmMDJlN2ZhNCwgMHg0ZGUzOGIzYywgMHhlZjllM2M4MSwgMHg2YjQwZmQ3YiwKKwkweDRiMzdhZTBjLCAweGE3OGVmNWM3LCAweDc2ZTY4ZWRiLCAweGE4ZmZiNzQ4LCAweDA2NTkwZmQ4LCAweGRjZWQwNTM2LAorCTB4NzcxMTI2YzAsIDB4YzBlMDU5NmUsIDB4ZTJkNjNiZTcsIDB4YzliOTZiYmUsIDB4Y2FlYjA2OTksIDB4ZjQ0OGRmYmEsCisJMHhmNjhhMDQ4NCwgMHhhNzY4OTY1MSwgMHhiNmFlZTViOCwgMHg5ZjY5Y2I4ZiwgMHhkMmMwZDFiMSwgMHgwZWUwNmUyOCwKKwkweDAwNjQ3M2MzLCAweDRjYWFiMGNmLCAweGFjYzM1N2IyLCAweDg1N2FhZjY4LCAweDFlODhhYWE0LCAweDIyZjUwODdiLAorCTB4ZWYyY2I0MGEsIDB4MzBhYzUzYWQsIDB4YjA0MmFlZmUsIDB4ZWM3YjMzNDcsIDB4NTlmZWQ1MWMsIDB4ZWI0YzlmOWMsCisJMHg2ODIwZWQ1NywgMHg4ZmRkYjBjNywgMHgwYjRhYTdlNSwgMHgxOWJiMjI0YiwgMHhmN2ZiODNlNiwgMHg5MDI2NGNiNiwKKwkweGZmNTIxM2VkLCAweGQ5MjMzMmY0LCAweDdiYWY3NmFmLCAweDViYjQ3MGNhLCAweGEwZTZhNzk3LCAweDlhZTMwYWRkLAorCTB4ZmQ3ZjZlMjQsIDB4YmI2N2NhM2IsIDB4Mjg1ZWY5NGUsIDB4NDliOWUwZTYsIDB4MDU4MDFmNzUsIDB4ODcxOGQxNzQsCisJMHhmZWFhZWQ1MywgMHhlNzYzYTVlNywgMHg5NTA1Yjk1NCwgMHg5ZjJmOWI3ZiwgMHg1OWZmN2VjMSwgMHg1NTYzZGQ3MiwKKwkweDYzNGQ0ZGU4LCAweGU5ZTA3OWY4LCAweGNmOGRiZDBhLCAweDllOWE1MzM3LCAweDczZGJiM2ZmLCAweGZlOTNhZWE3LAorCTB4MzlmZWViNzksIDB4OWZmYWUxZDcsIDB4ZmZkODhlYjEsIDB4M2NkOGY4MjEsIDB4M2FjNjdmZjksIDB4NGZmMjk5NmUsCisJMHg1ZjM3ODc1YywgMHg0M2NmYzg2ZSwgMHhlNzQ2ZDY3OSwgMHg3ZTJlZWM4OCwgMHhkZWU0MWMyZSwgMHhjYjljYmMzZCwKKwkweDA5OTM4YjM5LCAweDc0ZmZjNzY0LCAweGZkODRkNzc5LCAweDFjMWY0MTlkLCAweDc3NzhhMWNmLCAweDY3MTgzYTA4LAorCTB4ODhhMWE1ODgsIDB4OGNhNWNkZWMsIDB4MmM4NjgxZjYsIDB4NDM0MGZiZTUsIDB4MjI0ZDNhOTYsIDB4NmUxNjAzZGEsCisJMHhlYzUyMGUyNywgMHhiOTRiNDFjZSwgMHg5Y2E3MTlkZCwgMHgxMThiODgyYiwgMHgzZmQ0MzI3ZCwgMHhjYTViY2JmNiwKKwkweGJlZTBjNmU3LCAweGQ1ZWM5MTkwLCAweGY1ZGQzNmU2LCAweDVlNTNkNDE2LCAweDg2OGZjZTg5LCAweGQyZDI4OWRhLAorCTB4NWY5YzRhOTUsIDB4ZjZhYTlmNmIsIDB4NzllMzFhNjgsIDB4YjRiM2IyZmQsIDB4YTNkYWE3NGYsIDB4YjRmMjk0NDMsCisJMHg2MDNmN2NhNSwgMHgxZWQ2OGI0OCwgMHhkYWQ2YWI4ZCwgMHgxMDgyZmE4ZiwgMHhiYWE5NzMzYiwgMHhlYjQ5ZDA3ZiwKKwkweGU5ZDcyZGQzLCAweGE4N2ZmY2YxLCAweGIwN2I4OWRkLCAweGFiMDcxNGE4LCAweGZlYjQwNjdhLCAweGY2MzBkNzRkLAorCTB4ZjlmNzdlNzQsIDB4MWZkYzFjOGMsIDB4ZDA1YWI5OWEsIDB4Y2Y1NTM5ZTgsIDB4N2UyODI0MDIsIDB4NDNlM2UyYTQsCisJMHgzZjg4NzNkNCwgMHg1ZmI1MzRmNywgMHhhZjNlNmZkMiwgMHgyZTRjNzA0OCwgMHg1MzljZDc0ZiwgMHgxZTdlZWM2MiwKKwkweDNhNzM3MTJmLCAweDExZWFmNWZhLCAweGRkYWVkMTZiLCAweDM3YzZlZWI3LCAweGZkNjk3ZDMxLCAweDA0ZTVlMTlkLAorCTB4NmY1NGY1YWYsIDB4ZWJjNmNiN2YsIDB4NzY1MGZmMzAsIDB4ZTYxMjNkYmIsIDB4NTNhOGQwZjUsIDB4ZWZkMDA5ZWYsCisJMHg4NWUzM2M2YSwgMHgyOTc4YjNlYiwgMHg5ZTE0YjY4ZiwgMHg3YWIzZDA4YiwgMHhhNGRiZGZkYSwgMHgwZDlmNGMwZiwKKwkweDQ1MTIyYmU1LCAweDIzYmU5MTFjLCAweDE4MzI5ODFkLCAweDU5MzA5ZjlkLCAweDM1ZjU3ZTc4LCAweDMwZTNlZThjLAorCTB4MWE5ZjVjZTUsIDB4ZDczZDA5ODcsIDB4YzdjM2NhYjcsIDB4YzRmMDA1NTksIDB4MTg5NjM1NzMsIDB4MzlhOTFmN2UsCisJMHgwOGU5ZmVlMSwgMHg4MTg3NjZlZiwgMHg4YjM5MzllMSwgMHg2MjRmZWU3MiwgMHhhODJhYWVkNSwgMHhiZjdlZGM3NywKKwkweDBiZWUxNjdkLCAweDdlODgxODY3LCAweDI2Y2U5OGE0LCAweDllZDk5M2M0LCAweDcxYzJhZjYzLCAweGNkMzVlMjQyLAorCTB4MjAzN2U5MjksIDB4ZmJiNWJjNTksIDB4MjA2NzllZjAsIDB4YzljZjdiN2QsIDB4MmE5ZDMxMmYsIDB4ZjNjM2VmYjUsCisJMHg4ODQ2NTIyNSwgMHhiZjZiZDI5ZiwgMHg5YmRjMTE5OCwgMHg0YTVmMzM4NywgMHg2ZTNiOTYzMiwgMHg3NTRlOTExMCwKKwkweDg2OWE2ZmViLCAweDUwYzE1NGZlLCAweDRmNTgxYWU3LCAweDFiZjMwMjU4LCAweGJkNjExZTYwLCAweDdiNzk4OWY2LAorCTB4Y2U5YzIwYTksIDB4ZjU5NjQ4ZDUsIDB4ZGZkODBkMTUsIDB4N2ZiYTA4YTgsIDB4YWUwM2JlYzAsIDB4NGRmM2E3Y2IsCisJMHg4MGY2NTdmNCwgMHgwZTNhNDdhOCwgMHhjMzhmZjY1MywgMHgxZmVkN2IzMiwgMHgzMGMyZmNkMywgMHgzYjU5ZTE0ZCwKKwkweDdhMTVjM2U0LCAweGNhN2I2MzVmLCAweDZiNzdmYjg3LCAweDEwNmU1MjEzLCAweDY5ZjUzZDFkLCAweGJiZDYxOTVmLAorCTB4YWIxYmJiZjIsIDB4MjZmZDVmNjgsIDB4OWZjZjE1OTMsIDB4Y2FmYjI5ODUsIDB4YTU3NGUzYTEsIDB4NDM2NzViM2EsCisJMHg2NDE4YjQ2YSwgMHg1NWYxMTY3MywgMHhlMDcyNWYwZiwgMHhlNjgzNTNkOCwgMHg5Y2ZhZjUwMSwgMHg3MzZlM2FhNywKKwkweGRhODNjNzFlLCAweDY0YzJkMTlmLCAweGY3NDMyM2I0LCAweDgxZmI0M2FkLCAweDU2YmU3MDc5LCAweDMxZmRhOWVhLAorCTB4MDFlNzQ2ZDYsIDB4NTE4Yjg4NzQsIDB4YTdhYmI1N2QsIDB4ZTlkZjBkYjksIDB4ZmYxZmJiMjQsIDB4Y2M4MmUzODIsCisJMHgzNWZjNDMxYSwgMHhjZWRiNTVhYywgMHgwZGNmY2E5YywgMHgyYTE4ZjRhOCwgMHhmZGQwYTUyZiwgMHg2ZjdhZDRmNywKKwkweDlmODFlMTM4LCAweDFmYWQwODI3LCAweGY2ZDBkNzBhLCAweDU4MzNiN2YwLCAweGUxNjBkZGRlLCAweGE5NWQ4OGZiLAorCTB4YWMyMmI5OWQsIDB4NDczZGE1N2IsIDB4YmY1YTdmMzMsIDB4ZWY3ZmQzZDAsIDB4YmU2ZDNjZmQsIDB4YjlmNjM2NGMsCisJMHg3ZDA3OTQzZSwgMHg0ZTgyNzdjZCwgMHg2YzU5NmZiYiwgMHg4ZDJmYjZkMSwgMHgyNTc3N2VkMSwgMHg0NTkyZjM2OCwKKwkweDZkOTFkZmU5LCAweDhlMWFmM2EyLCAweGY3OWUxMzdjLCAweDE4ZDhmOTUzLCAweDhhZjdlZmUyLCAweDJlZmEyYWRmLAorCTB4MWU3NGM5OTEsIDB4NzlkZTkzNzUsIDB4ZTNjNGU1MGUsIDB4MDFkMjQwMzMsIDB4ZjgyYzNjN2QsIDB4NTUyZTU4Y2MsCisJMHgwZjUxNWJiNCwgMHg5M2QzYWRjNiwgMHhhZWZjN2E5YywgMHhiZGUwY2U1YiwgMHg2YmEwMTZhMCwgMHhmNzcxZTU4NCwKKwkweGM1NmU5YjQ3LCAweGYxNDhiMTdjLCAweDcwZmI5YjBkLCAweGNiNTFkMjM5LCAweDM3YmY1Zjc3LCAweDNhOWZjZjFiLAorCTB4NWJjZTc0MGQsIDB4NzViMWI3M2QsIDB4MWUyYjYxYWMsIDB4OTRjYjhhMGIsIDB4ZmRmMDY5Y2QsIDB4ODRlNjJhYTEsCisJMHg2MzIzYjA5OSwgMHhmYzcxMjM2MywgMHgxNWEyZDEyZCwgMHhkMWYzZGRmNSwgMHg3MThlZmZmNSwgMHg4YzE5ZTY5NCwKKwkweGUxNDIxOWY2LCAweDQ2ZDIzNzU3LCAweDc1NmUzNjcyLCAweDViZjc4MGI2LCAweDVmOWIxZTFlLCAweDA2MzE3Mjg5LAorCTB4YWY5NDY1ZmMsIDB4YzU3ZGNhOTAsIDB4ZjAxNWM3MTcsIDB4YzViNmMwZjgsIDB4YmUyM2M1MmYsIDB4ZGIwZjU4MzcsCisJMHhhMjE1OWU2OSwgMHg1MmQ4YTcxMywgMHg4YjdmZTVjMSwgMHg3YjNlZDE4NSwgMHgzNzUyYThmMywgMHg3MmVjNGQxZSwKKwkweDhiM2MwZWM5LCAweDQxZGVlMmQ4LCAweDJkNTk1ZWYzLCAweDljYWNkOTcyLCAweGM4NTgwMTk3LCAweGJlOWMzOTUxLAorCTB4ZmQ0YTM2MGMsIDB4YjMzNDZlOTgsIDB4OTcyODM5ZjgsIDB4N2NlOGMyOTIsIDB4ODFmNjdmNTAsIDB4NTdjYjg0YjQsCisJMHhlOWNjNmY2YywgMHgxMTQzZGViZiwgMHg1Y2M4ZjE4ZCwgMHg5ZmU0NjdjYiwgMHg2ZGZkMGI5ZiwgMHhmMjk5YjE5ZCwKKwkweDUzOGQzY2FhLCAweGRmYmJiYmU4LCAweDFiYmEzZDEwLCAweDM2NzI0YmYwLCAweDllMmNlNDFhLCAweDg3OGU2M2M3LAorCTB4ZjU3NWI3ODksIDB4M2EyMGI0YzIsIDB4N2M4MDU1ZDUsIDB4MmVlN2UyY2QsIDB4YmViYjdlMzAsIDB4ODdlMzM0YTgsCisJMHg5YjlkNGNmYywgMHg1NTE4ZTVjYiwgMHg5N2ViYmIxZSwgMHhkYTA1ZGM2MSwgMHg2MzVmNTFmYiwgMHgwZmNlNzgzZiwKKwkweGI3ZDcxOTUyLCAweDQ0M2ZhODUxLCAweDgzMGNmMzdlLCAweGU4MzllZjAzLCAweDQzMGU0MDJhLCAweDU2ODI1ZDdiLAorCTB4YzkxODFjNGYsIDB4YzFmYjM1ZjEsIDB4YTA5ZWNjYmIsIDB4NzI4YzRkMzgsIDB4YmVhMzY2MWUsIDB4ZWIwNjljZGUsCisJMHg3NDQzMzhkOSwgMHg2Yzc4MDc2ZSwgMHhmYTEwNjhhOSwgMHg1NWM0Yzc4YSwgMHgwZDk5N2U3MCwgMHhkZTZmZDFmNSwKKwkweDFiMTM5MTUyLCAweDhjNjY5ZWJjLCAweDM2ZDBjMDczLCAweGRiOWYwZmQ3LCAweGJmYzg4NWQzLCAweGJjNzkyMzVkLAorCTB4MWNkZDY3YmQsIDB4M2Y0MDcxYmUsIDB4NDc5YTg3YTgsIDB4NmFlNmFlOTcsIDB4NTU3MjQxZGEsIDB4NmQ2ZGU1NjcsCisJMHgwNzNhN2FhZSwgMHhjZmMxNTVkOSwgMHhmODEzYWQ1ZCwgMHhjNGE0ODI3ZSwgMHhmMjhiOWJjYiwgMHg0YmY0YmY0OSwKKwkweDQ5MmIxNTJmLCAweDU3ZTI4NDlmLCAweGU1ZmQzZjlkLCAweDk5MTFlOTA3LCAweDg3MTlmMWYxLCAweDRjY2ViNDliLAorCTB4ZGEwN2UxZmEsIDB4NGFmOTc0M2IsIDB4MWUwYmQ0N2QsIDB4NjJiYTdmNmQsIDB4ZjhlMzM2NTEsIDB4YWYxMDVmYTgsCisJMHg3YmM1ZTYzYSwgMHg5NWZkYTE5MywgMHgzYTE2ZmMyYSwgMHhlMDY5YzkxZiwgMHg4ZDlkYjFlZCwgMHhkYmY0OGJmOCwKKwkweGM4ZTAwMTY5LCAweGExY2U4MmU5LCAweDNjMzhmN2IzLCAweDdjM2EyNGI3LCAweDJlMDFmODZiLCAweGFlNzQ4N2QyLAorCTB4NzhmN2E1MmIsIDB4NjU4ZTA5OGYsIDB4N2RlOGVmYjgsIDB4ZTdmM2EyNWQsIDB4Y2Q0ZjdhYTEsIDB4YjEzMDcwYWIsCisJMHgzZTljZTczNiwgMHgwZjljNGRlYywgMHhhNzY5MzVlYSwgMHgwMWZhODlkNywgMHhlZDhhOTdkMCwgMHgwOTRiMmEzNiwKKwkweDVjZDRiM2JiLCAweGQ3YWRlOGUwLCAweGFiNmQ1Y2JhLCAweDkzNzI4MmFmLCAweDAzZjY5OTgzLCAweDk5NTM0YzNjLAorCTB4NzljMDMwN2YsIDB4MWNjZjMzZWQsIDB4M2RmNThhYmYsIDB4ZjgwM2FlMGUsIDB4ZTZiY2UwOTksIDB4ZTYzMzQ3ZjksCisJMHhlZGYzN2I0MCwgMHhiOWI0MjZhZCwgMHhmNWExY2Y0MywgMHg3NmE0ZWY2ZSwgMHg0Y2FiNGI3MSwgMHgyM2M1MTlkMywKKwkweDg2Yjk1NDY1LCAweGFmZDkwYjA4LCAweGU0ODY3NGNjLCAweGM2YzkzNGIzLCAweDNkMTBhN2VkLCAweDUwZjgwZWI5LAorCTB4NjQ0YWYwOGYsIDB4MzhkMGFmMDQsIDB4NDlmOGU4NzEsIDB4ZGVmY2M5MDUsIDB4MWE1MmUyZTQsIDB4YTc0NTQzNzcsCisJMHg1ZDkwZTMxZSwgMHg0ZWM1N2FhZSwgMHhlZmE5ZjRmMiwgMHg3YmIxZmI0MiwgMHhmZjIzYTczYSwgMHhjODFhMTU3NywKKwkweGMxZjg3ZTFlLCAweGNmMTE5MzQ5LCAweGM1MTI2NWRlLCAweDdiZDE3YWQxLCAweDIzM2RiYWM4LCAweDFjYWU5Y2Y1LAorCTB4N2YyOGNkOGIsIDB4ZGJiOWNjYjcsIDB4ZmVjM2U4ZWMsIDB4OGIzMTUyZDgsIDB4OTY1YTJmY2UsIDB4YTU2MzNiNzAsCisJMHg4OGU0ODFiZCwgMHhlN2I5NDJhNSwgMHg3MWNiZDhhMiwgMHhhMjEzYmZhYSwgMHgzNzU0YjcyNywgMHg5YmRlZjE5OCwKKwkweDg1OTBkZTdhLCAweGVkOTdkYmQ4LCAweGJiYmQxZmJmLCAweGYxOGJmOTYxLCAweDJhZWU0ZmE4LCAweDc5Yzc4ODY5LAorCTB4NGZmMDg5NmYsIDB4ZDVkZjEzNzcsIDB4ZjIwMjlmOTMsIDB4ZjFlNTFlMzgsIDB4OTIwZTkxYTIsIDB4N2ZmMmRkMmYsCisJMHgwZTNiMzljNiwgMHg1NTY5MTgxZSwgMHg0M2RiOGFmOCwgMHg0MTdmZTI1ZiwgMHg5MjhkNjZiZiwgMHgxYzYwMTRhNywKKwkweDhlNDRiNTJkLCAweDc0YmM2MDc2LCAweDAwZDNiYmRmLCAweDdhYmQ5M2FlLCAweGZiOGQ2M2YyLCAweDJmYzFmNDgxLAorCTB4NDkzODI2MzIsIDB4NjgxZTllNWYsIDB4YWM5ZDIyYjAsIDB4OGY0NmZjNmEsIDB4ZTJjZTZiZjcsIDB4N2ZlODU1ZTksCisJMHg4N2I3MDI1NSwgMHg5ODE4YzU1NiwgMHhhMWYzNDJkZiwgMHgyZTc1NGY0NSwgMHhmNWE3YTg2NiwgMHgwMTM3ZGMwOSwKKwkweDc5OGZjNWJmLCAweGZkMTAyMzE2LCAweGJhZjE4ZTRjLCAweDI5ODcwMGFkLCAweDMwYmJiZTMxLCAweGQ3YWM0YWFkLAorCTB4MTI5YzYwZDksIDB4ZjA4MGI0NDcsIDB4YzU2M2EyOWQsIDB4OWRhZjFlMDYsIDB4MTE1Y2YzODUsIDB4NTljNTExZjMsCisJMHhkMWM1YTcyNywgMHhjNWEzNTQ3ZCwgMHhjOWZiYzNhZCwgMHhmNmQ1Njc3YSwgMHg4YmNlOGNiNSwgMHhiMDE1YmM1MSwKKwkweDhjZTFmNzRhLCAweGI2YmRjNzE4LCAweGVlYWI4ZTI3LCAweGRjZjFhOTEzLCAweDA0MjkwNTc1LCAweGZmYzEyMTJmLAorCTB4Y2IyM2UyMmQsIDB4MWVmMTEwMWEsIDB4NDAzZTk4N2UsIDB4NDZhYWY4ZjYsIDB4Y2Q0MWY5MTMsIDB4OTFkYTNiMDksCisJMHhmODIzMzIzZCwgMHgzZTdhYTQzZSwgMHhiMTYzZTAxNywgMHgwYzU2N2MwMiwgMHg5NWQ2OWJiYywgMHgxN2JiMTQ5NCwKKwkweDkxZmFhNWU3LCAweDUwYWYyMGYxLCAweGNjMjU2NWRlLCAweDRiZWI4YTliLCAweDRhZWRjMzdhLCAweDBjYzY3YTg2LAorCTB4MTY2MDM2NWQsIDB4YTJiOWVhZTAsIDB4YzYxZWFjNzgsIDB4ZDg1ODNjMjEsIDB4YWJmYjRjMzgsIDB4NDBkMTIyYmYsCisJMHhmMmQwZDhmMSwgMHg1Yzc4MGIyNywgMHgyMTA1MGIzMiwgMHgxMzVlZWJhZSwgMHg3NTVkY2ZkZCwgMHhhYWY3YmVlMCwKKwkweDMwMWU3ZTUwLCAweDY3NjdjOTM5LCAweGZmYmMxNDgxLCAweDY2NzcxZGRlLCAweGFlZGRmZjdjLCAweGRiYjViZjljLAorCTB4YTYzZjc0MGQsIDB4ZjhjY2JlM2IsIDB4ZTcxYWJjYmUsIDB4ZDllNTFhODgsIDB4MzFmMjc4OGMsIDB4YzdmNDIxYzcsCisJMHg4ZjcxYWJmZSwgMHg0ZmNhNDYxYiwgMHg2ZGFjN2Y2MCwgMHg2M2M1MTVjMCwgMHg2OGVhYzZjMiwgMHg4NTI5Mjc5ZiwKKwkweDA1Zjc4Mjc5LCAweDVmZWIyOTU2LCAweDdhODcwZGQ1LCAweDc1ZjVlYTNiLCAweGY2MDc5NDI4LCAweDM3OGQ4NzBmLAorCTB4MjIyNmJiZTcsIDB4ODhlYzQ2ZGQsIDB4NDdkYWZkNDcsIDB4MTcxMzQzYmMsIDB4NzkyODdiYzEsIDB4ZmE2MjA0YjEsCisJMHg5Yzc5YWE5MywgMHgzY2VhNjYyNCwgMHg1MzQ4Nzc4YSwgMHgwYWQ5M2VmOSwgMHhkY2ZjNjAxNiwgMHg3Yzg0YzBhMCwKKwkweGZkNGJlYWJhLCAweGU4ODc3MDBkLCAweDkyN2FjY2Q3LCAweDkwYWU5MTkzLCAweDdmMmY0OGI4LCAweDY1NzZlNjQ1LAorCTB4YTJkYmRjODgsIDB4MDJmMWY5ZjAsIDB4Y2Y5MWVlMjUsIDB4OTNlN2JmZjIsIDB4NTIyOGJiMjUsIDB4MTg4OWY3ZDksCisJMHhlODcyNDI5NSwgMHhkOTBhNTcxMSwgMHg0MTFjYzQ0MywgMHg5ZDljYmVmMCwgMHg4N2IxNTA3MywgMHg4ZjljYTc3ZSwKKwkweDgzZTcyYmY3LCAweDgzZTcyYjBmLCAweDBiNzdjNTVmLCAweDg2M2Y5MGMwLCAweDdhNDAxNmVmLCAweGU1NDljOWJjLAorCTB4MjgxNTM0NmYsIDB4NmZlMzk5Y2EsIDB4NDg5MmVlNDUsIDB4Zjk5NDFmYjIsIDB4YWRmOTk0ZTksIDB4MjU3MzRlYjAsCisJMHg2ZDU2N2UwMywgMHg1ODc5ZDNkMywgMHhlOTg0YzI2MywgMHhhZjMyY2Y2OCwgMHhkYjExOWVkYywgMHg3NTg3ZWY3MywKKwkweDllZmNiZmMyLCAweDA5NWRhNzczLCAweDNhNGYzYTFlLCAweDNmZjdjYWM3LCAweDU0MmQ3YzU1LCAweGI2MTJhZmVhLAorCTB4Yzc1ZjkwMTksIDB4MzZlMTZhNzYsIDB4YzZhNDUyZmUsIDB4ZGE2MjJjYWUsIDB4NGQxMzk3ZjMsIDB4NGJmNTM0NDMsCisJMHg5N2YzZGFhYywgMHg2YWQ3ZWM5MywgMHg2ODc2NGZiZSwgMHg5NzVlNWZjZiwgMHgxZjY0M2UzMSwgMHgwYjU3NGI1NiwKKwkweDgwNmU4MDEzLCAweDdkMzNhYTRlLCAweGQ2ODVmZjM0LCAweGNkN2I4YTUyLCAweDc0YzdiOTBkLCAweDNmMzZhYjQ3LAorCTB4MmZjZGE3ZGYsIDB4YWJjZGFkZGMsIDB4NDZjM2M5ZTcsIDB4OTIzMGY0MjksIDB4ZjEzMWZjOGQsIDB4MGNmN2U0NGUsCisJMHgwMTA3ZWY4NSwgMHgzYWIzNmZiZiwgMHhjZmRhMTE5OSwgMHhmOGJmNzgxNiwgMHgxYjAwYzYxZSwgMHg3NmM5NGJlZCwKKwkweGUzYWMyMzhjLCAweDVjYjA5ZmY3LCAweGMzYmRjYmM3LCAweGJlN2FmNjk1LCAweGRiOGVjNTZmLCAweDRiMWRiZWU4LAorCTB4MDZlZGUxY2MsIDB4ZmM3ZWVmZjAsIDB4NzJmMWE0OGUsIDB4ZmU4N2FmMGUsIDB4YTIxYmQ2MTIsIDB4ZTVjMzUzZjQsCisJMHhmZTQ1OWM5MywgMHgzM2VjOWI4MiwgMHg2MmIzNmIyMywgMHhjMmZlMDE2YSwgMHhlOTM5OWEzNCwgMHhhYjBjNzU5ZSwKKwkweDkwNzViZjI3LCAweDUxMzI3ZjcyLCAweDQzYmNhNGU4LCAweDNlNjE4NmIwLCAweGYwYTY3MDQ1LCAweGU0OGY4NWY4LAorCTB4ZmU0OTUwYzMsIDB4ODlmMTJhNzUsIDB4ZjQ0Nzc0NWIsIDB4YjkwZDk3ZTYsIDB4YWFmMDA3YmEsIDB4OTEwMjg2ZjgsCisJMHg1NjIzZTJlNCwgMHhkOGY5ZWY0NiwgMHhiZjEzZjc1YywgMHhiMDE2YzM2ZSwgMHg4ZjZiMzM2ZSwgMHhmODdhMTU0OSwKKwkweDYxYmNlZGU3LCAweDVjMTM1ZmM0LCAweGI1MmZkYTBlLCAweDc4MGIyNDE1LCAweDg1ODhhNTJlLCAweDQ1MzZjYjljLAorCTB4YzRhM2U4NjksIDB4NWY0MjE3MWEsIDB4NGJlODQyNDMsIDB4OWQ3ZjdmNGIsIDB4Mzk0NWQ1ZWMsIDB4ZTg0MmNlOTAsCisJMHhlNWJlMmZmMCwgMHhhZjE4MmM1MSwgMHgwNWZhOGY0YywgMHg3Njg5ZDU4ZiwgMHhjYTllMDU0YSwgMHg3NTRmOTYwMiwKKwkweGVlMzE5YjQ2LCAweDczZDE4YjY3LCAweDNmZDhhNTc5LCAweGFiOWY0YWE1LCAweGIyZWI1OWU0LCAweDU2NmJmYmUxLAorCTB4ZjZlNjQ5ZDEsIDB4ZjEzZDJkYmEsIDB4OTZkZjE4MjUsIDB4ZWEzNWY2MDAsIDB4NWM5MTk5NjMsIDB4MWZkM2IwN2QsCisJMHg3ZmQ0MzU3NiwgMHg2NWZmZmMwNCwgMHhlYjFiZmQwYywgMHg2NWVmYmM2NCwgMHg1ZjEwZTRiNSwgMHg3OTQ5NjIzZiwKKwkweGQwNWVmMzAwLCAweDQzN2Y1OGU4LCAweGU1YWZmNzMxLCAweGVmODI2Y2U4LCAweDA1YmVhMTUxLCAweGMyM2RhNWVmLAorCTB4YzFhOTRjZjIsIDB4ZmViYzJkZjUsIDB4NTE2NDU5N2EsIDB4MzExODlmOTAsIDB4OWRiZmVhODIsIDB4Y2VmODY2NjcsCisJMHhkOWEwNzc4MSwgMHg2M2VjNzE4NywgMHhkZDc3YWNmMiwgMHg3YjdmZWI0MSwgMHhhZjA3ZDcxNCwgMHhhOGYxMWMxOSwKKwkweDdjOTkxZTBmLCAweGQyODdhNjc3LCAweDY4NWY4ZDc0LCAweGJlZTQxMDRiLCAweDhmODUxN2NlLCAweDkyYmQ3MjM2LAorCTB4NzhjN2UyNWIsIDB4MzRjMjc0N2MsIDB4ZmQwMzk5NTcsIDB4ZTkwYmI3MWQsIDB4ZjExMmU3NDIsIDB4ZmQzNzViZTgsCisJMHhhODdlMmI0NCwgMHgwZmMxMDZlNCwgMHg1ZDc0OWI0YiwgMHhlM2ZmNDMwZSwgMHgzNTc3MGIxMSwgMHhkNTllMjkxZSwKKwkweDAyZjk4NjUyLCAweGQ5MDNlZTkxLCAweGQ5ZWJlMjVjLCAweDdlMDJhZWI4LCAweGU1NGFmMGZlLCAweDE4MWVhODcxLAorCTB4YmZkYjlhMzIsIDB4M2M0NDg2OTMsIDB4ZGZmYTE0MzAsIDB4YjE1YTI0NTAsIDB4MmI3YTBkZmYsIDB4NGVmMWU3ZGQsCisJMHgxNzU3ZTQ2NiwgMHhlMDk3ZWFiYiwgMHgxMTA5NmRiYywgMHhkYTZmY2YwYywgMHhiZTc4MWEwYSwgMHgwMGNjYzBkOCwKKwkweGJkNmI5MzRmLCAweDRhNjlmMTE3LCAweGY2YzA4Y2Y1LCAweDdhN2UwNzQ3LCAweDViMTllZDFjLCAweDcwM2E0ODgyLAorCTB4YWVmOWNiYTIsIDB4MjgxN2ViMWIsIDB4NzllMjlkZjEsIDB4OWIzYzcwZWIsIDB4NTk5YWI0NDUsIDB4Yjk1NDFjMGYsCisJMHhjYmM5OWViZSwgMHgwYWIyZmZjOSwgMHgwYWNjZGVmNCwgMHhjZTBkNDM2YiwgMHg3MDg0OTFlNywgMHhhZTZkZjNiMiwKKwkweDc5ZTIwYjA2LCAweGQxM2Q0MGMzLCAweDdmMjI0OTQxLCAweGMyNTU2YTU3LCAweGZmY2MwYWI0LCAweDcxOTFhMDYyLAorCTB4MWYyZmYzYmUsIDB4NTM4MWZlOGEsIDB4NWIzNTc1YTAsIDB4Yzc1ZTY4MWEsIDB4YzEzOTg5MmUsIDB4YTlhODk2ZWYsCisJMHhjZjg1YTFkOSwgMHhmOGYxNDZlZiwgMHhmMWUzMDk5MCwgMHhmNWI3OWY4MCwgMHg4YjlhOWNjYywgMHg3OGE3YTNmNCwKKwkweDZiN2M3ZjUzLCAweDdlY2U1ZDczLCAweDJhZmU2MWZiLCAweDExMGIwMzk0LCAweGMyOTc4NWJlLCAweGZhNDA0Zjk4LAorCTB4ZmU2MTI5M2QsIDB4NWIwMTdmNzcsIDB4NjBkOWQ2ODAsIDB4NmU0MWZlYzEsIDB4YmZhMmZhYmIsIDB4N2U5Y2QxODgsCisJMHg0YjBlMGI5YiwgMHhkNzgyNGVmOCwgMHgzNDFmMTAyMSwgMHg0NDRlNGU1YiwgMHhiNTI4NzgzZSwgMHhhMWU4ZTg4YywKKwkweDg5OWE4ZjgyLCAweGZjZjM4NjJmLCAweGVlZjc3OWRiLCAweDEzN2EzYzQxLCAweGU3N2Y2OWMzLCAweDMxNTk4MmExLAorCTB4NjBiZWY0YzEsIDB4MzJmNDQ4OTQsIDB4NGU2MTZmZWUsIDB4OTQ2M2UyM2YsIDB4OTFmYmY4ODEsIDB4OGM1NmM3MDgsCisJMHhjY2YzNzk0ZiwgMHg4MjRiYmY2NCwgMHg5ODZjZDk3NSwgMHgyODYyYzRlNywgMHg1ZGEyZmU4NywgMHg3ZWYxM2U2MiwKKwkweDBiOGYwNTc1LCAweGQ1N2UzMDJiLCAweGY4ODQzYjY1LCAweDMxNjY0YTkwLCAweDM5NDlhZTdlLCAweGVmOTExNGY3LAorCTB4YjQzNTQzNWMsIDB4MjU5NTZmZmEsIDB4ZDhjZmRlOTcsIDB4NDI3MGQwOTIsIDB4YmIyMGI2ZDksIDB4NTcyMjkwNmEsCisJMHg0NTg4OTQwNiwgMHg1OTA2ZGYyOCwgMHhlYjY1NWRiOCwgMHhiYjk0MDU5NCwgMHhhYTQ3ZmJhMSwgMHhlZDI5ZDdiZSwKKwkweGE2NWIzMjhjLCAweDM3MWI1NGEzLCAweDdkNzAxNWQyLCAweGU5N2Y2YTFiLCAweGMzNWVkYzJjLCAweGFlOGZiYzNmLAorCTB4ODkzZjM1Y2YsIDB4MzE3NDM4ZTcsIDB4MTk3ZjdhZGEsIDB4MGE3MzljYTUsIDB4M2E1NGFmYjEsIDB4N2FlNTYwZGYsCisJMHhkMWFlNDM2MiwgMHhhMWJkNzQ4NywgMHgyYTU5ZGI5OCwgMHg0N2YyYWIxZiwgMHg4NzJhYmY4NSwgMHhlZjdlN2JkNCwKKwkweDUxOTVmNjI4LCAweDg3MzY1ZTRlLCAweGU1OTllYWU0LCAweGQ0MDc2Zjc4LCAweGMzMTc3MzllLCAweGZhNTY4OTdiLAorCTB4MWY3MmFlZmUsIDB4NmY2Mjk0ZjEsIDB4NWJkOGE3YmQsIDB4NWJkOGExZmYsIDB4MDViZGEzZWYsIDB4ODM1MTg2ZjksCisJMHgxNDM3YmYwOCwgMHgwOGRkNzYyZSwgMHgyMDkwMWFmMywgMHgzYTE0ZGYxMSwgMHhlZGM0NGM0ZSwgMHgyNzE5NzFhZiwKKwkweDYxZDk3ZDJjLCAweDBlYTJkMTExLCAweDM0OGYwNWUzLCAweDM2NDk3YmYyLCAweDE1OThlZDk3LCAweDk1Y2Y1OWYxLAorCTB4NzY2YjJjZjksIDB4YmNiYjM0NjksIDB4N2FlM2YyN2MsIDB4ZTQzZWQxZDIsIDB4Yjk1NTdiZWIsIDB4OTk0Yzc5NGYsCisJMHhmZTY1NzFmZiwgMHg1N2YzMjg2ZiwgMHg0MzQ5OGZlZCwgMHhiY2ExMzJiZSwgMHhlZmFmMTBkZiwgMHhmYzI5N2U0NywKKwkweGI5ZDBhNzI5LCAweGI1Nzk1MGE4LCAweGU5MDhjNDAxLCAweGZjOTEyMmViLCAweGU3NzgyMDlmLCAweDI1YmRlNDZhLAorCTB4NGVmNWY3MjAsIDB4MWU2OGM5NTksIDB4NzY2MGRiYmYsIDB4N2M0NjJjNTcsIDB4YTcxNDY2NGUsIDB4MjdhYWU4OWQsCisJMHhiOTAzNjViOSwgMHhmOGIzNzI0NSwgMHhjYTZjZWI1YywgMHhlNTgzMzg0NywgMHg2MzgxNTE5ZSwgMHg4ZTVhY2JiMSwKKwkweDQ2MzhiZTcyLCAweDI0NTcxZjRmLCAweDViYmRkMGE0LCAweDFkMGVmZWQ1LCAweDBjZjA3MmY3LCAweDgyYTY2Nzk1LAorCTB4ZjNlMjVlZjUsIDB4NmM3MjQ3ZmYsIDB4OGVlM2UzMmMsIDB4ZmQzYTI0YmQsIDB4NGYxY2RlNWMsIDB4OTEyMzc5MjYsCisJMHg1ZmVkMGE3YywgMHg2MzZmMzc5NSwgMHhiZTIwNjRjYywgMHhmYmExNjQ0ZiwgMHg2MTBhNzcwMCwgMHg5ZGU3ODQ0ZSwKKwkweDNmMzA3YzI4LCAweGZmN2RkMTk3LCAweDY3M2Q4YWMxLCAweDAxZDFkZTU3LCAweGNlYjhhMTRlLCAweGY1YjA0ZWQ4LAorCTB4ZmM3YWY4ODMsIDB4MWJmNzUzMjUsIDB4OGY4ZWRjNmMsIDB4OWEyN2U0ZDYsIDB4NGJmNTM1ZTIsIDB4ZWY5YWM5YWMsCisJMHgzNWMzZWM5MywgMHhiMjNiMjdkZiwgMHgzMmViZjkzNSwgMHhmZmVhNjk0NiwgMHhjOWE0NTljMiwgMHg1OTMwNTBkZiwKKwkweDJlNGNiZjUzLCAweDY2NjVlNGQzLCAweDBlNDg3N2E1LCAweGZhMWVlZDM2LCAweGE3ZmQxZWIxLCAweGE3MWZhMWI2LAorCTB4YTE0Zjg2ZjUsIDB4MGUwYmYwZjEsIDB4YTNiNWUxNjAsIDB4MDBlODY3OGIsIDB4ODc1MTg1NDYsIDB4ZmM4NjRjZWYsCisJMHg2NzkzZDFjNiwgMHgwYWVmODBlOCwgMHgzYWZlMWYwNywgMHhkMzY4NTgxOSwgMHg3ZjNjMjllOCwgMHg1M2FmZTFmNSwKKwkweGY0NjViZjIwLCAweDg2M2YzYzc1LCAweDNhZGNmMDkxLCAweDJmMGNlYTdhLCAweGVhMWM1OWUwLCAweGQwMzQ3NDc5LAorCTB4ZWE5NzJkZjEsIDB4ZjgzZGEyOGYsIDB4ZTZkMzY1YzcsIDB4NGVmODRiMjYsIDB4MDY2MjU5NDAsIDB4OGE2Y2U3Y2MsCisJMHg3ZWZjNjFlNywgMHgxNWFjZWM3MywgMHhmYzc2MTE3OCwgMHg4Zjc0ZjU3NywgMHg3OWEzMzdlZCwgMHhmYzhiOGViYiwKKwkweDhiOGU4ZDVkLCAweGJiMGQxZGZjLCAweDUzZjZmMWM4LCAweGNiYmVmNTUzLCAweDdlOWEwZTA0LCAweDY0MTE1ZmRmLAorCTB4ZmQwNWFmN2UsIDB4ZGM2OTM5Y2QsIDB4ZmQxNGM0ZGYsIDB4ZGZkMTRjNGQsIDB4Y2RmZDE0YzQsIDB4NmZlZTdhMzksCisJMHgyNmZlOGE2MiwgMHg4OWJmYTM5NiwgMHgzMjRkNWJlOSwgMHhiOTM0ZWZhNSwgMHg3MjZmNmQyOCwgMHhiZjdkZGE1MywKKwkweDZhZTcyOWUwLCAweGVmMzgwYTNkLCAweDk4NWI4YjRmLCAweDExMTdlNGMzLCAweDRhZTdhMTRlLCAweDRmOWRmNDNhLAorCTB4NDVjYTdlZDAsIDB4MTJmYmMwZTYsIDB4Mzk0ZTIyODcsIDB4MzlhY2JmNzAsIDB4MmU3NDQ0Y2YsIDB4NGMzYmI2NzQsCisJMHg5NzMwYmRmMCwgMHhiNjJmOWJlNywgMHg2MTdlNTAzYiwgMHg4ZTllZWQxZSwgMHg5NDZjYjZlOCwgMHgxNmI1Y2RiZiwKKwkweDM1YmJlZTI3LCAweDIzYzdmNDVmLCAweDFiZDYxNDlmLCAweDcxNGNkZWU4LCAweGU5YzUyNzY3LCAweGJkZmMyZDBhLAorCTB4YzcxMTQzODQsIDB4OTFlMzI4OGUsIDB4OTE3OWRhNWMsIDB4Mjc3YzQ1ZjksIDB4YjBlZWRjYzcsIDB4M2Y2MGUzMmEsCisJMHhlYTMyNmUzMCwgMHgzMDI1YzJiNywgMHhiZjViZjUyZSwgMHhiMGE5ZmE5OCwgMHg4NDJiOGY3NCwgMHhlMWZhNmI4YywKKwkweDQxMGEyNzcxLCAweDMxNzZhNmUzLCAweGM3MDExNzdhLCAweGY1YzY2ODc1LCAweGZjM2Y3NDRiLCAweDc4YzI1ZmEyLAorCTB4ZDNiNDQ3NjEsIDB4MzU0ZDcxOGUsIDB4MjFkZjhjNWYsIDB4ZGZjZjQ1YmYsIDB4Zjg3NDJjNWYsIDB4Yjg5M2Q0MjUsCisJMHg1YmVmODliZCwgMHgzM2Q4ODFjNiwgMHgxZjBkNzlkMywgMHg0N2E4NjVjOSwgMHg1ZDlkYjk3MSwgMHg5YTE3OWQ3YywKKwkweDlmOTAwYmZjLCAweDYwNzc5NThhLCAweDdiYTU4Y2MwLCAweDczMGM0YzliLCAweDkxMjhiZWEyLCAweDM4MzYzYmJlLAorCTB4ZTMzOWRmMTcsIDB4MWIxNWEwZWYsIDB4MWY5MGRiZGQsIDB4ZGU1Yzc0ZWIsIDB4ZGYzMzE4YjAsIDB4Y2ZiNWQwNTcsCisJMHgzYmQ0MTVmZiwgMHhlYzk4M2IxOSwgMHg0YmZiMDQ5NSwgMHhiNDA0NzUyYywgMHg0NGNhZTQ1ZiwgMHg1YjI0ZTNiYiwKKwkweDc1Njg3MjRmLCAweDhmN2ZlNzk0LCAweDMxYmU3YTA2LCAweGY0NTA1ZWIzLCAweDc3NjNmNTI3LCAweGZkYzBlZjg1LAorCTB4ODY1NzhlODgsIDB4NGQxZjIxZTUsIDB4NjQ1ZTNhMzMsIDB4MWY3ZmJmYzAsIDB4M2NmYzQ0ZGQsIDB4ODc5MWNhMmQsCisJMHg3ZGZkYWMyZiwgMHg4ZjllMGFmNCwgMHgzNzg4YmM3MywgMHg2OWFjYWQ4MywgMHg4ZmZjNzE0NiwgMHhmMTQ1MmYzZiwKKwkweGE3OWE3NDBkLCAweDdmYjQzYTBhLCAweDc2NTM3M2Q0LCAweDA2MzYxM2QxLCAweGZhZWI1NGUwLCAweGQ3ZTdjMGNhLAorCTB4NzA3OGMwNjksIDB4YzEwNzE4ZDQsIDB4NDY2MWUwNmYsIDB4MjczYTk4ZTcsIDB4ZTA3NmY4NDcsIDB4ZmE4MGRmN2UsCisJMHhiMjg3OGM2YywgMHhkNjFlNDc0YywgMHhkMjc3ZDI0YiwgMHhlZjhlZjI3ZCwgMHhhODI3ZmRmOCwgMHg1MDUzNzkxOSwKKwkweDgzODlmZWZjLCAweGY4YWZhYjkyLCAweGRjMzFjOWUzLCAweDZhOTQ1ZDRlLCAweGE4Nzg4NzU5LCAweDk0NGM5YmIzLAorCTB4ZTc0OGJjMWUsIDB4OWRjZTk5ODIsIDB4ZDk2YmYxOGEsIDB4YTk3YmY3ZDAsIDB4ZmFlMThlYWYsIDB4NDFhNTc5MjEsCisJMHg3NDQxMDIzMSwgMHgzMGU1OTRjMiwgMHgwY2JkZTZhNiwgMHhiYmY2ZDBmNCwgMHg4YmRmYmFjMywgMHg0MzMyNzAwMywKKwkweGRlZjNjODlhLCAweGViMTc4ZjFkLCAweGFjNjVmNTM0LCAweGUzMWRmZGRmLCAweGJkYTdhY2Y0LCAweDhmY2RkYmZjLAorCTB4YzY1NTRmMmYsIDB4Yzc5OTdhNDMsIDB4ZDUwYzdmYzgsIDB4NmQwYjZiM2IsIDB4ODQzZjNiZWEsIDB4Y2M2M2M3ZTcsCisJMHg1MjNkZTlkYiwgMHgxNDg3Nzk0OSwgMHg0ZTMxNWFlYSwgMHgzZGU4Y2UxMSwgMHgzN2JmYzFhZSwgMHg5ZTgxOWFmYiwKKwkweDNkMzk5YTc2LCAweGRkM2M4YWE3LCAweGVhZmFmMjI5LCAweGJiZWFhNTNiLCAweDdhMTRjZjZiLCAweGEzY2MyYjZlLAorCTB4OGZkNGZjN2UsIDB4ZGYxYjM3YjQsIDB4NmQ2Nzg4Y2IsIDB4NmVmYWJlMzQsIDB4MDEyZjVhOTQsIDB4MmIwOTIwZjQsCisJMHhlMjNhNjc1ZCwgMHhmYjEyNTBhYiwgMHg2M2U3ZTc4NCwgMHgxZDIwZTY4YSwgMHhiMmYyNjg1YywgMHhjZGY0ODI0ZiwKKwkweGM2YzhmMDg1LCAweDQ5ZDVmYzYwLCAweDNmNWFmN2RhLCAweGRhODEzMzFmLCAweDFiNmJlZGE5LCAweDI4NGZiMjI3LAorCTB4M2EyN2U5NzgsIDB4NjkxNTRkYWEsIDB4NjI0ZWJkMWYsIDB4OWMzYmUyYWYsIDB4YTgwZDU5MjAsIDB4YTc3NmQ1OTcsCisJMHg3OGUyZGU0MCwgMHhjNWZjODJlZiwgMHhiYjkwM2RmNCwgMHgzZWQxZTg5ZiwgMHhmYmU5NGU5ZCwgMHgzZjJhMWU0ZCwKKwkweDY5NGQ1NGRkLCAweGNhOWVhOWEwLCAweGE0NmE2YTNmLCAweDIzZGI5NmY0LCAweDE2N2Y5MTcyLCAweDNlYzY1ZmVkLAorCTB4ZGFmN2EyMDksIDB4MTAyN2JkMzYsIDB4ZDQ1NTNmOTQsIDB4NTFhZDFkMzcsIDB4NzI1NGU4ZTgsIDB4MWM5ZmRmZGYsCisJMHg1M2JiZWRjMywgMHgzYjNlMzhlMywgMHhmN2MwZGVjMCwgMHg5NzJlODBkYSwgMHhkYmZkNmQ1YiwgMHhmZGNhMWQxZCwKKwkweGY5ZTNhM2FlLCAweDNjNDc2NWZlLCAweGMzMWYyZmNmLCAweDY0NTk2ZWZkLCAweGU4ZmVkOGFkLCAweDNmZWYwMzc4LAorCTB4ZWZjNmFjNDUsIDB4N2JmNzhkYjIsIDB4NzdhNDVkMmEsIDB4YjEzNTdlYTQsIDB4NTgzMWZlZTgsIDB4NzNjYTE2M2YsCisJMHhhZWE3ZjI3YSwgMHg0MWU1ZGZlMiwgMHhhZjlkNWNiYywgMHg0MmI2ZmRmYSwgMHg2MWVlZmFhYiwgMHg4ZmNmN2YzYSwKKwkweDdhMDJmN2RmLCAweGZhZDVmZWE3LCAweDNlNzAyNjYzLCAweDRiZWZhZDBjLCAweDQzYzllN2U1LCAweGMyYTlmMWUxLAorCTB4NjgxN2M0YjcsIDB4MjQxZjIzNjcsIDB4OWQ0NWYxMDcsIDB4YTU0MmY4ODMsIDB4ZDZmZTk1NDMsIDB4YTczODcyMTYsCisJMHgwZjNhMTUxYSwgMHgwN2VlZTdlNywgMHg3Njg0MmVhMywgMHhiNGNjZTM4MywgMHhiYmUzMjA4ZiwgMHg5ZDllYjBjYiwKKwkweGExMmZjMjgyLCAweDYzYmNhMGZjLCAweGNhODNmMmFjLCAweDBmYmQyYTA3LCAweGVmZTMzZTA2LCAweDhjNzVmMzM0LAorCTB4NWY3OWZhOTUsIDB4N2I0NzU5NTgsIDB4ODQ1ZGM0NmMsIDB4MmI3YTgzZDcsIDB4MTJiMWFkZWEsIDB4YjA3OTJmN2YsCisJMHhlZGNlZjVkOCwgMHgxMWIxOWZjOCwgMHg5NjkxOGMwZSwgMHhmN2Q0YjJhYywgMHhmZTNlYzcyNSwgMHg5NTQzYzJhZiwKKwkweGEzYzBmZDBiLCAweGNhMGMxYzE3LCAweDEyM2ZjM2JiLCAweDUwZTcyNDBlLCAweGY2ZmQyMzhlLCAweDhjNGViNzIxLAorCTB4MTc3NjI5YjEsIDB4YzdjZmRmYTcsIDB4MWQyMjZmYzgsIDB4MWQ2NjA4NzUsIDB4MzBlODdiZGUsIDB4ZjA1ZjdkZjcsCisJMHgwZWJlNzhlOCwgMHgxNmQ2OGU5NSwgMHhlMzA3NGEzMiwgMHg5NmY2ODczYSwgMHhiYTdhZWE3YiwgMHgyMzA3NzlkNywKKwkweGM2MWE5N2Y5LCAweGFjZjE0M2NiLCAweGZlNDgyYmFlLCAweGE5NzljMTlkLCAweGVjMGM2NGYwLCAweGExMjdlODFmLAorCTB4ZThlZjQyYzYsIDB4ZTBlODU2ZGQsIDB4ZDNmMDM2ZmMsIDB4NjdhYzBkY2EsIDB4M2U4YTM1ZmQsIDB4Zjg5NDRjN2IsCisJMHg3ZThhYzg3YiwgMHhhNDE3MmVlOSwgMHgxYTk5NjU5OSwgMHhjZjQ3NDNiZCwgMHhlZmUxNWYzYSwgMHg1NjQ1ZmI4YSwKKwkweGEzNzJlZjhkLCAweDE3MWMxZDZmLCAweGU1Yzg1MjFmLCAweDNjZjRkNzQzLCAweDJmMTNmNzExLCAweGY3NDJkNWZjLAorCTB4ZWEwYzJmOGIsIDB4Y2VmNjhkM2MsIDB4NTMzZDU2ODUsIDB4MmE5YjIzZGUsIDB4OGI5ZGRlODAsIDB4ZjkwYzEzM2UsCisJMHhmMzllZjJhNSwgMHgwZWY3ZThlNywgMHgxNzZkN2E4MywgMHhiNWJkYTM0ZiwgMHg0Y2M0YWI2OCwgMHhlYjYwOWU3OCwKKwkweDNkMjBiNzM3LCAweDRmNDU3YmNkLCAweDViOWE5OWU3LCAweDdhNDcxZTM3LCAweGMwNGZiNzNjLCAweDg1ZDk2ZmU3LAorCTB4MzFjNTAyN2QsIDB4N2MyMjViNmIsIDB4MGE1ZmE4NjYsIDB4Yzc3ZmFjNzksIDB4ZTNjN2M5NmUsIDB4MzljNTMyOGIsCisJMHgzZWYxOTQ2YSwgMHhhMGE1ZDczMSwgMHhlYjcxM2U1ZCwgMHhmYjg0M2E1ZCwgMHg4YjAyZWRiYywgMHhiNDhmN2U4MywKKwkweGRmMGM3OWRlLCAweDhkYjczOTFkLCAweDM2NmIyZmRmLCAweGY5YzBlZTQ3LCAweDBjZWI0YTk3LCAweGMxN2NhMDgzLAorCTB4NjM1ZTVlNzYsIDB4ZjcwY2ZkMjksIDB4Y2QzYzE3NDMsIDB4NjBiM2ZlMjgsIDB4OGZmOTA0NmYsIDB4MWZmNDVhZjMsCisJMHg4ZWVjODIwNSwgMHhmY2RhNmRlYSwgMHg0MDY2ZDY3YywgMHg1M2IwNTgzYSwgMHgwN2IzNWU1YiwgMHg3OWYyNDFmMiwKKwkweDJmMTJhMTUwLCAweDI5YjJjZTE5LCAweGUzYzJkMjVlLCAweGVmN2NhYTA3LCAweGI5N2I1ZjZkLCAweGRlNTA2ZDFjLAorCTB4ODk3ZjY2ZmYsIDB4NWYwZmY3YTUsIDB4MjNlOTI2ZjksIDB4Mjk5N2NmMGIsIDB4ZmY5MDMzZjksIDB4MTc4ZTFiZWEsCisJMHhjYTc1MmUxNSwgMHhiM2M1NWZkOCwgMHg2NzU4MzZkYywgMHgyYjY2MmJkZCwgMHgwNzc1ZWRmYSwgMHg3OWUyNDZjZSwKKwkweDAxNjE0NWIwLCAweGJkOTkxNzdhLCAweGRlZDE1OTJjLCAweGU0YmY2MDdiLCAweDFlZDZmODQ1LCAweGZiODkzZjM0LAorCTB4OWUyZjc1OTgsIDB4YTEzYzYwMzAsIDB4YjI2MmRmNzQsIDB4ZWYzMTI2NTcsIDB4ZmQ5YmY0NGEsIDB4ODlkYWM4YTIsCisJMHg3ZGU5ZGE4ZSwgMHhjZTc3MjY1ZiwgMHgxYzJlN2VjMywgMHgwZWQxNWIzMCwgMHg0ZmY5N2JhOCwgMHhmY2M3NmVjNywKKwkweGE3ZGQwMjhiLCAweDIwMTg5MGJjLCAweDU1Yjc5OTNhLCAweDBjNDM3YmEyLCAweDFlZmNiNDJkLCAweGFmMTA5MTNhLAorCTB4MjhiNmU3ODgsIDB4MGVlNThmN2EsIDB4MTllMjNiYzQsIDB4NDY0OGVlZjAsIDB4ZDA3MWUxM2EsIDB4ZjQ0YjRmNzksCisJMHhkOWI1YjliZCwgMHhmOWNmZjU4MCwgMHhiYzU1N2UzOCwgMHgwOTRiNGE5NywgMHhlNzFlMGJjZiwgMHg3NWI4OWNmOCwKKwkweGE0MzBlNmQ3LCAweDY0ZjVhNzgzLCAweDc2ODExZjhmLCAweDBkM2I3ODgzLCAweGUxNWUxODFkLCAweGM1ZDg1ZmZkLAorCTB4ZDM3NzkxY2YsIDB4Mzc2MzAxYzEsIDB4MmYzY2UwMWQsIDB4YTdjMDA3NDcsIDB4NDcyZmY3YTQsIDB4OTdlODlkMDcsCisJMHhkZGZmYmY5MiwgMHgwZWQwYzdiOSwgMHg4N2U3ZTA4ZiwgMHhkNTFiNzdkNSwgMHgyZTA3MWE3NywgMHhkZjE0NzUzYywKKwkweGJmYjM0YWU3LCAweGE1Nzc3NjQwLCAweGM1ZGE4YmVkLCAweDlkMDlkZThjLCAweDRiZTc4ODUzLCAweDAyYmRiZjI2LAorCTB4Y2E3Mjc3ZDEsIDB4MmYxNGQ5YjMsIDB4NmQ3NjA3ZDUsIDB4NzQ0Mzc4YzEsIDB4M2FjN2M1MzgsIDB4ZTFiNmNiOTIsCisJMHhiNmM1OThmYiwgMHhjMmY2OTM2ZiwgMHhjZWZkMTYzYSwgMHhlYjExZTc0OCwgMHgzZmM2N2UxNSwgMHhiZWEyMDczYywKKwkweGE3NzgwYzRiLCAweDA3YjUxOWYzLCAweGM2NWNmYzhkLCAweGUxZmJlZDNlLCAweGNlOWNmMTFkLCAweDk1OWQwYzRiLAorCTB4ODA0ZmQxOGIsIDB4NDExYzcwZmUsIDB4YzJlOWZlZTYsIDB4NDUxZGZjODMsIDB4YTg1YzlmZDUsIDB4NDdiOGE3YmUsCisJMHg2MDgzNmVmYiwgMHgzZGVhOWI3ZCwgMHg3MDQyOTg1MCwgMHhkNjM3MWExOCwgMHg3Mzc5NzY4MSwgMHgwZDg0ZjMzOSwKKwkweGMxN2QyMWZkLCAweDVjN2NhOWRmLCAweGI1ZmE4YmYxLCAweDFiZDFmYjI3LCAweGJjYzkxZGFhLCAweDE1ZGFmNzIxLAorCTB4MDE0Nzc1YjksIDB4YmJkMWUzOWYsIDB4N2JlMWQwZGYsIDB4ZjkzYjFkOGMsIDB4M2ZjYzNiZWYsIDB4MDYyYWYyMDgsCisJMHgxYWY1MTlmNywgMHhkNGE3NTNiOSwgMHgwZmU5MTRmZiwgMHg1YmRlNzZlMCwgMHgwNTI4OTJmZiwgMHg4YmY3OTdjYiwKKwkweGE3OWE5ZmIxLCAweDQ4NzUzZjc5LCAweGY1NTcxNDU3LCAweGZlODMwZTZmLCAweDMzZDM2Y2JlLCAweDRjMDU5N2U0LAorCTB4MjNmYjM3OTEsIDB4NGJkNDZlMjgsIDB4YmVkY2VjYmUsIDB4NTBmN2NkMTIsIDB4NzYwODVhYmEsIDB4OTQyMjJlMjYsCisJMHg2OWY2ZWFiZSwgMHhhODVkM2RlYiwgMHg2NzBlN2JlYywgMHhmZmY5ZTBkNywgMHg5MGUwMzFhZiwgMHhiYTVmMjNkNywKKwkweDhlNjdlOWRmLCAweDZlZWZlNDI4LCAweGVmNjgyODdkLCAweDA1NmIwZmVmLCAweDc3ZWEwZjk2LCAweDYzYzRjZmI4LAorCTB4ZWFmZTRhYTQsIDB4ZmU0ZDU2ZGQsIDB4YTZiYjM2OWEsIDB4MWRmYmI1ZmUsIDB4ZmVkOWVmOWEsIDB4MTFmN2NkMGMsCisJMHg3YzlhOWRjNywgMHhhNjgxN2I1ZSwgMHg2NGY3YzhmZSwgMHhjMDU0N2U0ZCwgMHhlNjNmYTlhNSwgMHhlZjkzNWJiYywKKwkweGY0ZjU4NGNhLCAweGU5YThjZjYxLCAweGE5YTBiYjI0LCAweGQ2NjFkOTNmLCAweDQ2NWQ3ZmY0LCAweDY1ZGYyNmI0LAorCTB4ZDhhM2UwNTEsIDB4ZmJmZGFhOTksIDB4ZmY2ZTQyYTcsIDB4N2MyYWE2ODYsIDB4OGVkNGUxN2YsIDB4MzdlZGZhYTMsCisJMHgyYmM3NjgxNCwgMHg1ZGUzYjU5MywgMHgxZGYwNWUyOSwgMHhmZjllOWQ0MSwgMHhmOGE2MDI3ZSwgMHgzNGJhMDlmYiwKKwkweDk4MDlmYmZlLCAweGMwNGZkZmM3LCAweDAxM2Y3ZjE0LCAweGU0ZGQ3ZmNiLCAweGE2YmVmY2E0LCAweDA0YmZjYTAyLAorCTB4ZjdlNjA5N2UsIDB4ZTk4MjlmODMsIDB4NjA5ZmUwY2IsIDB4NzdlMGU1ZjksIDB4YjhmNzE5NGMsIDB4Y2ExYmVlMzIsCisJMHg0ZTE1M2ZiOCwgMHhiZGZkMjk2ZiwgMHhlZjg3ZjRhMywgMHgzZGY0ZWEwZCwgMHg3OTVkNmJkZiwgMHhlM2UwMjVlMiwKKwkweDc0NjdkYjIyLCAweDA4NmU1OTVmLCAweGEzMWM2Mjk0LCAweGUxODk3NWYzLCAweGYxZTY2N2Y5LCAweDQxOGE2ZjFkLAorCTB4YTE4MDM2ZmQsIDB4OWRkY2M0OWQsIDB4NmUzZWUyNmYsIDB4YWQ0MzhiZGQsIDB4ODFlZmFlNzgsIDB4MDc3ODdmZmQsCisJMHgyN2Q4NWZiZiwgMHhmMGU2YmM1MSwgMHhkODkxYjNmZSwgMHhjMjk3OTdjZiwgMHhlOTBhMzBlOSwgMHg3Y2Q3Yzg0NSwKKwkweDBkN2U1MDJiLCAweDY3NzNjNzdjLCAweGNhNGFmNzkzLCAweGE0NmQ2N2JiLCAweDU1NGNiZWVmLCAweDJmYmEzZWYzLAorCTB4ZDdiM2RlZWQsIDB4Yjg1YTc4ODAsIDB4N2Y3ZDJmN2IsIDB4ZjM1YWY4MWQsIDB4Y2Q3NmY3N2QsIDB4ODdkNjJiNzcsCisJMHg0N2NlYTE3NCwgMHhmN2NmODU3MSwgMHhhOWY5ZmRhYiwgMHg3ZjJhNGQ3ZSwgMHhkZGYzZmUzZiwgMHg0MThlNTY0NywKKwkweDZhYjdiYzdkLCAweDE3YjVjNjAwLCAweDNiMTEzOWVlLCAweGYxZjAwN2ZiLCAweDY2Y2Y0YmQ1LCAweDNkYTgxZWEyLAorCTB4ZDFlNzI5MjAsIDB4MDdiNTdmNzgsIDB4Y2Y5ZTRhZjQsIDB4NmY3NTI2YmYsIDB4NjMzNzllMjksIDB4YjNiYTA0N2IsCisJMHg0ZjViMjVmNCwgMHhlZTE2YzRlNywgMHg3MjgzNTVkZiwgMHhlZGM2NjE3NiwgMHhiNTdmOGE3YSwgMHg4M2JjNGE0OSwKKwkweDYzNTBkM2JmLCAweDZiYWVkYzY1LCAweGRmMTIzYWZiLCAweGRiN2RmZmE5LCAweDFlZjFlYmQxLCAweDIzYzFjNzc0LAorCTB4Yzc0YzVlZjQsIDB4NGZlMzQ5M2UsIDB4ZjFjYjFkOGQsIDB4ZjcyYzc2M2IsIDB4NzdkY2JlZmYsIDB4MDljZjEyMjQsCisJMHg4NDc2ZDAzZSwgMHhhN2U3NWRjMywgMHhmMjU2MWZmNSwgMHhiYzEyOTAxZCwgMHhmZWI0NGJmNywgMHhjZDI0OTdmOSwKKwkweGMwYjgwMWVmLCAweGNkZmJhMTcxLCAweDcwMjJkM2ZiLCAweGY4ZGIyNzVkLCAweDdkNDBkMzc4LCAweGQ1NmE3OTUwLAorCTB4MWJmZjljMWMsIDB4ZTUzY2YyZjYsIDB4ZGRmYTMyN2QsIDB4YWVhYjhlYTEsIDB4NzY3Mjg1ZGIsIDB4ZTdkNDliNjEsCisJMHhkODM5Zjc3OSwgMHg5OGVmY2MyZiwgMHhlYmU5ZDM5ZSwgMHgxYjFjMmZhOSwgMHhjMzdmNzAwNCwgMHg3NDliMjAzNSwKKwkweDYyYWY1Mjg0LCAweGE1OWJkNzJjLCAweGVhMmE0ZjA2LCAweDQ3MTY5MzkxLCAweGZkZjlkMjA0LCAweDg4MTFhMWFlLAorCTB4NjI5OGMzZGYsIDB4YmE0OWViYjksIDB4MWY2MGJlMDcsIDB4YjVhNGVmMWYsIDB4ZWVlOTEyM2QsIDB4NTIxMWJlZTQsCisJMHgyZGNiZmVmMCwgMHhlOWJhN2FjYSwgMHg1ZTZmMWJiYiwgMHg2ZmI1NTNjMiwgMHhlOWZiMDViYiwgMHg5ZjJmMWZjMSwKKwkweGY1NGFkNjM2LCAweGI4OWRmMGRmLCAweDkzYWNlZDA1LCAweGMwZGRmYzE5LCAweGZlNDYwNjYzLCAweGRjM2RjMmY1LAorCTB4NzA3OTNlNGUsIDB4ZmJlMGY2ZjAsIDB4N2MxNGQzNTksIDB4N2RmMDY0NzQsIDB4ZjVmYjBiZjUsIDB4NzdkYmJkNGEsCisJMHgzZDNkNGQzMSwgMHhlZDRlZDdjNywgMHgzM2JlYWM3YywgMHg1ZTdkYTEwZiwgMHg2NzQ0YjhmMywgMHhmNWY0NmExZCwKKwkweDRmZmViOGIxLCAweDU3ZTc2OWI3LCAweDQ2YjljMGFkLCAweDBkOGQ4ZmVmLCAweDAzOWFkN2EyLCAweDIxNjM3Y2RkLAorCTB4ZjJhMDNmM2EsIDB4YTlmMDgzODksIDB4ODY2NGYxZTIsIDB4ZTc2NWU3YzQsIDB4ZWNkNWY4ZWYsIDB4ZGQ3NDQ1ZGQsCisJMHhlM2M0YmUzYiwgMHgzMWVmODNiNywgMHg3NGJlMjkzOSwgMHhiNTVhN2YxOSwgMHgyZGZjODIxYiwgMHhiZDIzYmRmYSwKKwkweDk4OWU2ODZiLCAweDljMWY2M2QyLCAweDFhMWY5NDJlLCAweDk4N2U4NzliLCAweDkzY2NmYzliLCAweDE4NWJlYzBjLAorCTB4ZWJlZDE2YjMsIDB4ODkxZGZhMjgsIDB4ZDc2ZTM4Y2QsIDB4ZmZiZDNkM2UsIDB4YjAzYTZiNWYsIDB4ZWYyM2RmMDAsCisJMHhjMGEzMDI3MiwgMHhlOWI2YmJiYywgMHg0NjY3ZGZiYiwgMHg2MjllNzczYiwgMHhmMGVhN2VlNywgMHg3ZmEwNGJlNCwKKwkweGI0ODk5NzZiLCAweDkyM2Q5YWJlLCAweDVjMTdjZjBmLCAweDU3ZGVlNDUwLCAweDQwNmY5MzdiLCAweDJlMzlhZDdhLAorCTB4OWEzZmQxNTksIDB4NzBmYzk2ZDgsIDB4NzdlOTJlNjEsIDB4ZGFlYjU3YjIsIDB4Yjc1YzlkYjgsIDB4NThiYjIwNWIsCisJMHgxNTZhNDNiNSwgMHg2MjljZTQzYiwgMHhkNjViOWYwNywgMHg1N2UzZWRjOSwgMHhlYTExYjYwNCwgMHg3YjAzMGRhZCwKKwkweDliNWRlNjA0LCAweGRhZWM4NTM5LCAweGNhZGQ2OTVhLCAweDQ3M2MwZWMxLCAweGU2MWJiNWE1LCAweGU3NDQzYzFmLAorCTB4ZDFjZWMwYWUsIDB4YWRkYzJmOTQsIDB4NjliNmQ3Y2QsIDB4ZjhiZmFhZjMsIDB4M2I2ZWQ4ZDIsIDB4MzdmYTM4NjMsCisJMHgxYzYxNTIyNSwgMHgwYTliYzNmMiwgMHhlNzdmNTU1ZSwgMHhmNDljNmJjZSwgMHhlODBmMjdmYiwgMHhiOGQ0NTMxYywKKwkweGQxNmJjMjA0LCAweGM3Y2MyZjJiLCAweGMyNmFmYjc5LCAweDM0N2ZlNDljLCAweGRhZTA5NmZlLCAweGQ3ZWUxN2YxLAorCTB4MWJkZWUwNzQsIDB4ZjBlMzMzZjIsIDB4ZTljZmQ4ZWQsIDB4ZjA1ZTkxN2MsIDB4MmNiYWVmZTEsIDB4ZmQ4MTVkNDIsCisJMHgzMmRmMDQ5OSwgMHhiYjdiM2I4YywgMHgyOTNlNDkyMiwgMHhjYTFhMDhlNywgMHg2MzJhZmZiOSwgMHhiMmE2MTgwYywKKwkweGU3ZjcyYzdlLCAweDM4ZWFmNTQzLCAweDBlOGE0MDVkLCAweGIxODExMzkyLCAweGQ4YWY1NDI5LCAweGRlNTdjZmMwLAorCTB4ZmQyNGUxMTksIDB4ZWRjNGM0MzYsIDB4NmUyNjIxZjUsIDB4NzVkMTBmYWYsIDB4ODVkZmEzMmUsIDB4N2RmMDI0MTgsCisJMHg2OTk3YWM4ZSwgMHg5ZDZkNjBmZiwgMHgwNDE3ZjY4NSwgMHhlMTBlOTU3YiwgMHg5NTUwNzZiMSwgMHg4ODdkZTkwZSwKKwkweGZkMDMyZGI1LCAweDhjNWYzNTNhLCAweGVjN2IzM2RmLCAweDQ3OGI1MjgzLCAweDhjZWNlMzg3LCAweDA0N2Q5NDE3LAorCTB4NzRjYjRmYWUsIDB4OTA3NDdkNTYsIDB4OTk2YzY1N2UsIDB4M2RlYTdlNjYsIDB4N2U3ZDlmY2MsIDB4YTU5Zjk4NTYsCisJMHhlZjgwN2U2NywgMHg3NWZmNmMyOCwgMHg4NmVjOTNhZSwgMHhmN2Y1MzJhNCwgMHgyZTQ5ZWExYSwgMHgxMmZjZjBhOCwKKwkweDcwMThiZGU4LCAweDgxNmM3NzQ1LCAweDFkYjY2YTZlLCAweDk2YjJmZjIyLCAweDc2YzRhZmI1LCAweDFkN2M5MWE1LAorCTB4YmVmZTA2YTUsIDB4NGYxODY5NTEsIDB4ZmNiOGUzNzUsIDB4YTVkMjUxMmEsIDB4YzNmNmI0ZTMsIDB4N2ViMjcxOTEsCisJMHhjNjNiYTQxYywgMHhmMmUzNGRiOSwgMHg3OTk1M2Y2OCwgMHg2ZjBkN2Q2MSwgMHg0M2Q2NzdmMywgMHgxMzk0M2VlNSwKKwkweDdjMGQ3ZDNkLCAweDQ2NmZmMjg4LCAweGQ1NGQ2MGJkLCAweGJmOWM2OWQ4LCAweDZlYTJmMTE2LCAweGY2Zjg1YTNlLAorCTB4ZWEyN2M0OTMsIDB4YzY2YWNjMzksIDB4YTM2NjdiZjksIDB4YzQxYTlhZDksIDB4ZGY5MDhiMTcsIDB4YzM3N2RlZDAsCisJMHgxMzhjN2NiZiwgMHhlYjZhYmZmMCwgMHhlOTk3M2E3YywgMHhhMmI1OGM2OSwgMHhmYTQ4Yjc1ZiwgMHg3ZTI1ZjY5MiwKKwkweGRhMmRkZjJjLCAweGNkZmJjZGFmLCAweDExZmRmZTljLCAweDE5NDlmOTAyLCAweDBkZTNiYWUzLCAweDBhNDk4ZmM0LAorCTB4MDhmNzZjN2YsIDB4ZmI2MDBlNzQsIDB4Y2YxZTNhNzcsIDB4N2UyODEwYWIsIDB4MzYxNDMzNzcsIDB4NjI0OTk0ZGEsCisJMHhiYTIyZWFiZCwgMHhlMzMzNzI0ZiwgMHg0YjU5NjM0NywgMHgzZGJiZjI4YywgMHg3OTZmYjQzMSwgMHg5YmVlYjI5MywKKwkweDI4NDNmZTc1LCAweGRiZWE4ZTU3LCAweDc0OWUzMTkyLCAweGM0ZTRkNmI0LCAweDFiNTljYmZlLCAweGMxNWE2ZmJkLAorCTB4MTUzZDI5ZGEsIDB4OWZhMmY3NWUsIDB4MjIyNmY3M2EsIDB4NjNjOWZkZGQsIDB4ZjZkNjc4YTQsIDB4NTAyMjNiZTUsCisJMHhlNWIxNjdiZSwgMHgwNDRmZGM1NiwgMHhiN2M2ZWM1MCwgMHg3M2IzZmIwMSwgMHhkNTFkZjc0MiwgMHgyZjYwYzRmYiwKKwkweDAyN2QyMWM3LCAweDFkMjEyN2ZlLCAweGQ4ZGMwNzljLCAweDVmYjc3YTczLCAweDIzMTdjN2Y4LCAweDJjNWY3ZjExLAorCTB4NWI5NmUxNzksIDB4OWQ1ZmZhMTksIDB4YTgyZDQ3ZTQsIDB4NWRmNzQ2NWYsIDB4MzNkYTljODEsIDB4YWFmMDdiZjIsCisJMHg1YmM1NWRlMiwgMHhmMDFkNWUzNywgMHhiMGFmMTgyZiwgMHg5Mzg0MDRhNiwgMHhjOTE5NjVmNCwgMHhlODkxN2ZhNSwKKwkweGYwZTVkNjljLCAweGJjN2RjMmFhLCAweDBlM2I5ZjgyLCAweDhhMTVmOTcwLCAweGI3MGYxNTZmLCAweDQzZjViYmUyLAorCTB4MjM2ZWVmNDksIDB4YzkyMzMxM2MsIDB4Yjg3YTUwY2IsIDB4MzA4MGJlMWMsIDB4YzRkOTNjZTksIDB4YTFmOTIzMTgsCisJMHg0ZjJlNDU4MywgMHgyODEzY2YwNywgMHhmMzNiNzk1ZSwgMHhmNDgwMTJiYywgMHhmNWY3ZjA5NiwgMHhjNzBhZGVmYywKKwkweGI3ODI4NTViLCAweDJmZGYzMTNmLCAweDcxZmY5MjMyLCAweGNlMzIzYjc4LCAweDYwNmUzNGRkLCAweGU1MGRiZTZmLAorCTB4YjJmOGZlZDMsIDB4MzdmY2UxYzYsIDB4MThmYTVmNTUsIDB4M2YwODYzZjIsIDB4Mzc2YmYwODcsIDB4MmZmMDlkMWUsCisJMHhjNjllOGYwOCwgMHg2ZWNiZTI0OCwgMHhhZTdiNGI3YywgMHg3ZmUyMmY0YywgMHg1ZmI1OGUzMCwgMHhhZjkzZjlmMCwKKwkweDQ2MDU1ZjgwLCAweGY4ZjhiZmJmLCAweDU0ZGVhZDM4LCAweGE1YzJhNmYxLCAweDA3ZTBiOGJmLCAweDJhZDQ3ZmNjLAorCTB4ZTcwYWJlZDAsIDB4NzQ4ZGJiZTMsIDB4NTdkZDQzZmYsIDB4NWU0ZmY3NTEsIDB4NWNmNWM3MTksIDB4ZDgwMWZhNjgsCisJMHhiNTVmYjg0YiwgMHg0MGU0ZTMyNiwgMHgxOTRmMzNiNCwgMHhmZWY4N2VkNCwgMHhkYWNiMDdlZiwgMHhiNmY3ZjExMywKKwkweGU5ZTIyODNlLCAweGRkZmYwMzI5LCAweDg3MmYzNTBmLCAweDA3ZTRiOGYxLCAweGMyMmY0NmYxLCAweGY4NjEwM2U5LAorCTB4MWYzM2Q0MDQsIDB4Y2Y1Y2Y3MDgsIDB4MDcwNjcxZjMsIDB4MjZlM2NiZTYsIDB4NTM5MDNkZTAsIDB4Nzk4ZTM1N2EsCisJMHhmMDdmMTJiZiwgMHg4Zjk0NzlmMSwgMHgwMjdhYTYyYywgMHgwNzRhNWRmZiwgMHhmNjFkZGVmZSwgMHgxNzM2MDgyYiwKKwkweGJiODNlN2NjLCAweDlkN2RlOGQyLCAweDcxOGQ3ZGVlLCAweDQ2N2YwZWRjLCAweGRjNzc0NzU5LCAweGUyODE1ZWZmLAorCTB4MzU1MTMzZmUsIDB4ODRjNGZlZTEsIDB4ODc3YzJlMmQsIDB4NDM3ZGY0ZjMsIDB4YjRkZjY5YjMsIDB4ZWEzZTNiNDEsCisJMHg5NzhhNjRmZCwgMHhmZWU3ZTA2ZSwgMHhhYmVhNzUyZSwgMHhiNzViZjQ4MiwgMHhjOGJlMmRiZSwgMHhkMWU0ZTdjYiwKKwkweGJmYTg4Y2VmLCAweDg2ZGIyNzQ3LCAweGM3ZGNmZjczLCAweGQ1NTBkZjdmLCAweDVmYzc1ZDY3LCAweDczYzcwNGIwLAorCTB4ZGZlMjUzM2YsIDB4MGZlMWY5ZGQsIDB4YzNlYjA1MjYsIDB4NGRhZDRmNDMsIDB4MGRhYTdlYzcsIDB4MDVhNzJjZGUsCisJMHhiMWVlODc3ZiwgMHhhYTViYjQyNCwgMHg0ZTk1NWE5ZiwgMHgwZjUzZjRmNiwgMHg1NDVmYTNhNCwgMHhiYTZkNjNiZCwKKwkweDBmNzBmOTRjLCAweGJlM2E2NWY5LCAweDFiOWUyZmVlLCAweGQ0ZjNlNzQ1LCAweGRjY2FmNmZlLCAweDFkMzBhOGFmLAorCTB4M2RiZDQxMmEsIDB4NTZhZmVhZTUsIDB4ZGE0MWZlZTAsIDB4ZmZjNTAyN2QsIDB4MTVmNmIwNjYsIDB4MzMyYjY3YTgsCisJMHgxNmIxNWYzOCwgMHhlODdmYzkxMywgMHg3NzZiZjY4ZiwgMHg0ZWM1ZmYwZCwgMHg2NDZmMDc5NCwgMHg4MWNmZDU5YywKKwkweDIwM2UxMjdhLCAweGQ1ZGYxMDM1LCAweGRmYTNhZGYyLCAweDdmY2Q1YzA5LCAweDdlYTdiMDI3LCAweDU2ZmZlZDIyLAorCTB4OWRlODE3MmQsIDB4ZmNmNTE5YWIsIDB4ZjFhNGYzNzcsIDB4NTljNzA0ZDEsIDB4ZDE4ZmIzYWIsIDB4Nzk0YjU3ZmIsCisJMHg2ZmEzMTRmOSwgMHg2N2VjNDlkZiwgMHgzZmRmODE4YiwgMHhlMDk0ZWU2NCwgMHhiMjkyNzBmYiwgMHg5ZDczMzg1ZiwKKwkweGNhNzE3YmYyLCAweDYzOWI2OTM4LCAweDUzYWYwN2I3LCAweDU5MWRmNjUyLCAweGRmMjQ3N2VhLCAweDMyZjA1MDZlLAorCTB4NTc4OWU5NzUsIDB4NTRlZmQwZWQsIDB4MWUzY2M3YmQsIDB4ZTliM2JmYmUsIDB4NjE5ZmFhNWMsIDB4M2EzM2Y0MWMsCisJMHhmMDY2OTg1ZiwgMHhkNzFmM2EzYywgMHg3MTQ4YzNiZCwgMHhjMWFjZGNkMiwgMHhjZmQ0MWM1MiwgMHgxMWI0NTI1OSwKKwkweGFiNGI5OWQzLCAweDcyOGY5ZDFlLCAweGNkOTRkNWI4LCAweGY5ZjIzNThmLCAweDExNGUwODM1LCAweGVkOTFmNGU1LAorCTB4Yjg0MmNlYjcsIDB4N2ZjNGRmOWQsIDB4ZmI2MWFiZmYsIDB4YzJkZGZhMzAsIDB4YWZkZWU0ZmUsIDB4ZjllZmY4OWEsCisJMHhhMjY0ZGQzZCwgMHgyYjI2ZDlmNCwgMHhjZmViYTNjMywgMHhmZjI5ZDkzNSwgMHg0YTBlNGRhZiwgMHhjZDNjZjRkOSwKKwkweGQ3ZjRkOGVmLCAweGUxNGI4OGRmLCAweGI5NzNiYmY0LCAweDNiZjRjZGFiLCAweDM5NDYwZDg4LCAweDJiYzAzYzc1LAorCTB4MWRkYWFhZWQsIDB4YzJlYjI4MGYsIDB4YmRiMmI4ZjcsIDB4MGUxMTEzYzksIDB4M2UyYzBmYjksIDB4NzViM2E2ODYsCisJMHg3ZDk3ZGYzYywgMHgyNGVhZTRmMywgMHgyYzc3ZDYxNCwgMHg3Y2M0ZjMzZCwgMHg3OGZiN2VmOCwgMHgyNzA4MzVmNywKKwkweDE0OGJiNmQzLCAweDYwNzIzOGE3LCAweGJiYzIyNTU1LCAweGFmOTE4NzdhLCAweGY5Zjc1OTRmLCAweDhmNzFlOTRkLAorCTB4NzVmOTdjNjIsIDB4MTYwZGM1M2QsIDB4YzRmMzNiNmQsIDB4ODc3ZjBjMDMsIDB4OTgyMWIxNzcsIDB4YmQ3NGFmZGUsCisJMHg3ZWU3OGY1NywgMHhhYWY4ZTVlNiwgMHg3OGZjMzgzZiwgMHg0NDliNWFiZSwgMHhmODAzYjNmYywgMHhmM2E3ZjMyYSwKKwkweGNiYTVhMmQ1LCAweGM2Y2I3ZTA4LCAweGI4NDI2ZmJiLCAweDkzN2JkNzlkLCAweDBmY2U5ZjkwLCAweGVlNzQ0YjFmLAorCTB4ZjgyMDQ1N2QsIDB4ZGJiYzcyYWIsIDB4YmZlMDU2YWYsIDB4NTc1YjZjNTAsIDB4YzcyM2RjOTgsIDB4MDRiOTYxYmYsCisJMHgzZTA3NDNkZiwgMHhmOWZiNDc0ZCwgMHgzZmU1ZmQ5YiwgMHg2MDk3ZWViOCwgMHgxODYxZmVkZCwgMHgxYTUxMzNhZiwKKwkweGUwZGYzZGZhLCAweGY1ODRlYTE5LCAweDNlZjNmN2U1LCAweDZhZjFkMmU4LCAweDUzOWY5ZmZjLCAweDM2MjEzZmMwLAorCTB4ZTYyMTlkZjgsIDB4ZDRmOTgyOGQsIDB4NjFmYzE0MWMsIDB4MjZjZmE4NTksIDB4YmY0M2E2N2QsIDB4OGZjZmZjMTEsCisJMHgxOThjZTczNCwgMHg5ZjQ4MjhmYiwgMHhjYmRmMzdmNywgMHg0ZmQ4NzVhNSwgMHgxZGRjOGY1YSwgMHhmY2M4OWVmOSwKKwkweDU0N2I3YTQxLCAweDgzZjk4YzIwLCAweDczZjZlZGM2LCAweGZiNDBjY2EwLCAweDE3MjRmMTRlLCAweDJlNzg2ZjEwLAorCTB4ZTE4MWMyZWMsIDB4OTlmZjMwM2IsIDB4YzJmMWUzODEsIDB4ZjE0ZjYwNGIsIDB4ZjI5MzEwNzgsIDB4ZDlmOWQ2N2IsCisJMHg1MGIyMmY4MSwgMHhiN2FlODZjZSwgMHg4ODJmZTVlZSwgMHhhZmY2NmEzZSwgMHhmYWQwMjhiYSwgMHhjYmE2N2YyNywKKwkweDBmZmFmY2JhLCAweDE2NDVmNTNkLCAweDdkMzNlZmUyLCAweGI2ZmQxZjIwLCAweDE2NDA4NjBiLCAweGI3ZWVhMWUyLAorCTB4NThmZjllNWMsIDB4ZjNlNWE4MzgsIDB4ZjdlODFiNTcsIDB4MTMwNGViM2EsIDB4ZjQ4OTQ5ZDEsIDB4MmUxZmM1MjUsCisJMHg4N2YxZTcxYywgMHg5MjRmMDNiYSwgMHhjODNhZWQzYywgMHhjNDhiNDBlMywgMHg4YzM4ZDJmNiwgMHgzOTlmZDQ5YiwKKwkweGNiYWNmMjg2LCAweGU4MzFmZGNlLCAweDJiNzFkZTlmLCAweDQxZThhYTFjLCAweGRlMTI2NzVkLCAweDRkZDgzYmY3LAorCTB4M2M4ZmRjMGYsIDB4MGMzYmZjOGYsIDB4ZjNhMzY5ZmIsIDB4OWMyYjJjYmQsIDB4MzlmMTVkYTEsIDB4N2MzMGYzZjIsCisJMHgyNTc5MzBiZiwgMHhkZjc5ZjlkMiwgMHg4Zjk0MWNjMCwgMHhhZGZkNjY2ZiwgMHhiZjg2ZTI4ZSwgMHhiMjdiYTcwZiwKKwkweGU2OTI2ZGI1LCAweDNhZjc3OTljLCAweDcwM2YxMjdjLCAweDI5ZmI1NGM0LCAweGU3YzFjOTljLCAweDFiOGUwY2I5LAorCTB4ODM3ZTZlYzgsIDB4YmEyZTEzZWYsIDB4N2IxM2YzOGEsIDB4ZWQ1M2YzOTksIDB4N2IwNjQzZjIsIDB4MTViYjdmNTAsCisJMHhjOGVkNTI3ZSwgMHgxYmZmYmYyOSwgMHg4NWIzZTVmMSwgMHhkNTA0ZmQzMiwgMHhmZmM3YTU0ZiwgMHg0Y2Y3ZmU5ZiwKKwkweDMzNDEyZmZmLCAweDgwMDA2M2VjLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDVhYTVmZjAwLAorCTB4NTU1NDcwMGQsIDB4YmRlZjNlOTYsIDB4ZGQyNzQ5ZmUsIDB4MTI0MjEzNDksIDB4NDIwNjg0MDgsIDB4MDM2MjFhODgsCisJMHhjNGQ2NzI4MSwgMHgyMDZlZmNlOSwgMHg2YjAxYmIzMywgMHg4ZDA4YzQyZCwgMHg3NDlkMjQyMiwgMHg2YWVjZTg4MiwKKwkweDAyMWE2ZWI5LCAweDM2NzU2NGFjLCAweDFkNDc1OThjLCAweDgwOWY5YjQ3LCAweDk0NzZlYzI4LCAweDBkYTBjMDQwLAorCTB4NmJhMmNiMGEsIDB4M2EyNmFhNDUsIDB4YWI1NDViNTUsIDB4YTZlMDBlYWMsIDB4ZDYzYjgyMjMsIDB4M2JlN2I4ZTIsCisJMHgxZGRkYjVlZiwgMHhhNmVkNGZlMiwgMHhlZTdkYmE4YSwgMHg5ZWU3YjljZiwgMHhjZTc3Y2U3YiwgMHg1MmI0OGYzZCwKKwkweDZhMjJjYTIyLCAweDJhMDhjZGNmLCAweDZlYTZmZjBhLCAweDZkNDQ0NWEyLCAweGY2N2YyNDI5LCAweGFmMWY0NTQxLAorCTB4N2RiYzY0ZDMsIDB4NThjOWEzNDAsIDB4Y2UwOGViOTMsIDB4NDc1NDQxOWUsIDB4NDU5YTI2ZGQsIDB4NjU0Mjg0YjQsCisJMHgyOWJmNzFhNCwgMHg3OTViY2JmMiwgMHg2ZDBkZmViYywgMHg2MTkzMTc0MSwgMHhiMDZhYWQxYiwgMHg3YWE2ZDUxMywKKwkweDEzMTQzNjBiLCAweGFhY2FhYjBkLCAweDBiY2M2Mjg2LCAweDRiOWQyZTk1LCAweDdlZmUwZGY0LCAweDg3OWI3NDRhLAorCTB4MmEyMjRmOTksIDB4ZjYwZjE0ZDMsIDB4MTY5YzlkMWIsIDB4OGI1ZGM5ZGMsIDB4NDkxYmZiOTcsIDB4ZWFhNzk4NGQsCisJMHg1MzRmOThmMywgMHhhMzgyN2MwOCwgMHhkODFkNGIyNSwgMHg5OTY0YjQ2OCwgMHg4ZWVmM2UyMywgMHgwN2Q2ZDIzNywKKwkweGQyYTE0ZTMxLCAweGY5ZjYxMjNiLCAweDY4ODU4ZjRiLCAweGNiMTdkMTIxLCAweDY1MGZhYTE3LCAweGRhYWU3OWYyLAorCTB4NTEzMzc0MDMsIDB4MjllZDc2OGQsIDB4NzBkZGY3ODUsIDB4MDU1NjRjY2MsIDB4YWZiYzY3ZmMsIDB4NjcwMjM5ZjIsCisJMHhmYTY1ZWEzNCwgMHg3OTBhNDc1MiwgMHg0YmNlY2NhYywgMHgxYmNmMGYxZSwgMHhkODI5M2I5OSwgMHgzZjZmZTdjNSwKKwkweGU3ODk5MGEwLCAweGVlYjExZGI1LCAweDZkNzllMTRjLCAweDliYjY0OGU2LCAweGYwMzZkZGY3LCAweGRiODc4YjNiLAorCTB4MmNmN2ZlZjYsIDB4Y2Y1OGI5YWUsIDB4OWU0MzM2NDcsIDB4NmRmYTE1MTQsIDB4MTc0ZmYyNzcsIDB4Y2U2MDdmOTEsCisJMHgzZjMxNzdmYiwgMHhmNDRkNjlmZiwgMHg2N2JkMzdlZCwgMHgwNWQ3ZDYyMSwgMHg1YWZkOGY5ZSwgMHg4MmQ1ZjYwZSwKKwkweDU2ZjBhNTZlLCAweDNjZmRkYTI3LCAweDliYmY0OGFmLCAweGU1ZGZmODZmLCAweGIzODY1NzVjLCAweGY4YmU3ZTM4LAorCTB4YTdhMjVkMzksIDB4NjlmOGJkMTgsIDB4ZDYwMmY3M2UsIDB4NDNlYjQ2OGIsIDB4MjFlZTU5NzYsIDB4NmU3MTdiOTYsCisJMHgyNTJlOGVjZSwgMHg1ZmFlOWQ3MSwgMHg0YjY5NzY4ZiwgMHg5ZDE1Y2IwZSwgMHg2NjE1YjhhOSwgMHg2YzBkNGQxNSwKKwkweDg1MWY0Mjc2LCAweDE3OTdiMzhhLCAweGI5N2Y1ZjQ3LCAweDliZjQyZDc0LCAweDlkYmQyYzEyLCAweDkwYjUxN2NmLAorCTB4YzdlMmM3ZGMsIDB4MDRiNDliYjYsIDB4NmEwZjE2NzksIDB4MzQ0M2RjMWUsIDB4YzkwZTlhOTUsIDB4ZTJhNzdiYmQsCisJMHg2MWJjYTgzZSwgMHhkNjEyNjdhOSwgMHgyYjdiYmU4ZCwgMHg3OTU1MTk2ZiwgMHg3M2ZhZmRiZCwgMHg3OTc1Y2EwNCwKKwkweGM5YTliMGNlLCAweGQ3NzIxYjdkLCAweDgwZWRlNWU3LCAweGM0MDBkOWZlLCAweGZhYTk0ZThlLCAweGM3OTUxZWZlLAorCTB4YmZkN2M3ZTcsIDB4NDZhNzljNjgsIDB4ZjA4OWNlMmIsIDB4OWRjNTA2ZjgsIDB4OWY2NzFjZTMsIDB4ZjU4N2JiNTgsCisJMHhlOWVmODZiZSwgMHhiNDZmYmU0NSwgMHg2OTM4NzUyZiwgMHhmZGEyNmNjZCwgMHhmZjQyYjkxZCwgMHhkYTRiODc3MywKKwkweGY0OTE0NzUwLCAweDE2ZTFkMmJmLCAweDJkYzc2MGZhLCAweGYwZWExZjQyLCAweDUxZDAzZDA4LCAweDhlZDFlZDI3LAorCTB4MDMzZmU5MDYsIDB4NzA4Y2ZmNTEsIDB4ZTJlYzIwYTAsIDB4NGE2ZDdjMTQsIDB4MWNjZTFlOWMsIDB4OWU0OTRmNDMsCisJMHgyNGE5OWMzZiwgMHg5OTE0NTNkMywgMHgzY2I4NzBmZiwgMHhhNWZhNjAxOCwgMHg5MzljYTczMiwgMHhjMGQxY2E4ZCwKKwkweDRiNGU2OGZhLCAweGI0MGNhMTJmLCAweDY3NGE0MWY5LCAweDAzN2JiMWJiLCAweDNmZmJiNjFlLCAweDQzZGFlZGQ0LAorCTB4NGJjZmM1MzMsIDB4ZjMzYWFmMzAsIDB4ZGJmODQ2Y2UsIDB4NjkyYjJjZTUsIDB4MWVjM2NmYWMsIDB4ZGU2M2RmZWYsCisJMHgwNTU1ZDNlOSwgMHg2ODNmZDFkYiwgMHhmZWY5NWI3MywgMHg5NGRjNTc4NywgMHhmZjQ3YmQwMSwgMHhiNzhkMjM0ZCwKKwkweGIwNWEyOGFlLCAweDBhZTk5NGI5LCAweGNjNzYyMmJiLCAweGM4NmU2ZWZjLCAweDRmYzZiYjY2LCAweGI4MzU1M2U2LAorCTB4ZTNhNGQ0YmEsIDB4MDJiNjczODQsIDB4YzFhZWI3ZmQsIDB4ZGIyNjFiM2UsIDB4ZmM3OTU4MTYsIDB4NTdmN2I5NGEsCisJMHhmN2E2MjdkOCwgMHgwYWViMjlkYSwgMHhkOThiZDBiYywgMHhmM2NhYmVmNSwgMHhhNjZlZmYwMiwgMHg4MGY3OWU1ZSwKKwkweGRmNjQ5ZGMzLCAweDgyMmJjYjQ3LCAweDQ1YzU5YmIwLCAweDA3Y2YzNmIzLCAweGQ5YmE3NjdmLCAweGY1YmIzZmJjLAorCTB4NTFlN2M4N2UsIDB4YzE0ZTk0ZDMsIDB4YjgwOTk3MzEsIDB4ZjNmZGM0MTAsIDB4NDUyZTk1M2UsIDB4NzE2YzMwZWMsCisJMHg3Zjk5MzI5OSwgMHgyYjIyYjUzOCwgMHgxOTRlZWJjMCwgMHhiOGRhN2RmNywgMHg3ZGM2MzNlZiwgMHhkNWZkYzNiZiwKKwkweGZkY2JiZWRjLCAweDFmYjg4NzY4LCAweDllOTg4YWVkLCAweGQwODVhMzRkLCAweDBkYTdmMDVmLCAweGVmNDQ3OTJmLAorCTB4YTNhMGY5YTMsIDB4M2IwZTVhNjYsIDB4ZDMzZjAyNWMsIDB4ODFiZjI3ZjEsIDB4NWNhMjc4ZTUsIDB4MDM2ZWUzOTcsCisJMHg2YjZlODY3ZiwgMHg4NWQ3ZDNlOCwgMHg4NThiNGY4NCwgMHg0YmZmYjBiYywgMHg5ZjYwOWY1OCwgMHhmNWYxNzViMSwKKwkweDliYjJlZDI0LCAweGU3YzI5MDI5LCAweDIwYjZjM2EwLCAweDg5NTM0NGY0LCAweDBlY2I1ZjgwLCAweDY5MmUwOGU3LAorCTB4Y2Y4YWIzMjksIDB4MDE3YTY0NGYsIDB4YWJkMjllMDksIDB4YWU1ZTdkNTYsIDB4ODVmYzIxNmIsIDB4OGNmYjI0NzUsCisJMHg5OTgwZDUwNCwgMHgzOTlmYzRlZCwgMHhmMmM5OTg1NCwgMHgxNjdlMTg4ZSwgMHg0OWZkMGZhMywgMHhjZmY2ZmMxMywKKwkweGQ3ZGI5YTY3LCAweGZlN2NmZDE0LCAweDEzODU0MzY1LCAweGE5YjE1ZWIwLCAweDRlZmYzM2IwLCAweGUxYWNmYzdkLAorCTB4MDY5OWZlODcsIDB4OTQzY2UzM2YsIDB4N2RjN2NhMTIsIDB4Y2UxZDhmNDQsIDB4MmVlOTg3YmYsIDB4MWVhZDc4N2IsCisJMHg4Mjg1YzIwNywgMHg1YzJlMTRkZiwgMHg0MjU0OWMwNiwgMHhkNDRkYzhlNywgMHhhZjdkZmM3NywgMHg0N2QwMjdlOSwKKwkweGZkZDA3OWU4LCAweGQzYWY3ZmM3LCAweDY3MzlkZjRhLCAweDUwYTRmOGUyLCAweGZkMDRlMmJlLCAweDNkZjc0MTgxLAorCTB4NDA5ZGMxM2YsIDB4ODczOTVmOWIsIDB4ZGZhNmNiNzEsIDB4MzMyN2FiN2IsIDB4YTc4MzU4NmUsIDB4ZmYzNzYwM2IsCisJMHhlZDk3ZGJhMiwgMHhkMDI3ZmY0MCwgMHgyYjExY2I1YiwgMHgwZjJiMmVjMSwgMHgwYWY2N2ZmNCwgMHgzYmY0Yjc4ZiwKKwkweGE4ZmI4MGRjLCAweGJiZTg4NjY3LCAweGM3ZGVjOGYzLCAweDdkMjM2ZjYxLCAweGFlODdmMTY2LCAweGZlN2JiZmZkLAorCTB4MjU2Nzk5MTEsIDB4MzViZDViOTgsIDB4Y2ZiYzRhNTQsIDB4ZTM3ZmUzZDEsIDB4YjQ5ZjYxMzUsIDB4NmZkMDE1ZDAsCisJMHgzOTE3OWM1NywgMHhmZWVhMjdlYSwgMHhhOWYxNTQzZCwgMHhmNWJkMDAzNywgMHhjNDZiZjgxZiwgMHgwYTBjZmFiNSwKKwkweDY1ZTk2ZWMwLCAweGU0NjY0N2JlLCAweDZhODZmNTdiLCAweGM3NzFlMTJhLCAweDZmZjA0YWQwLCAweDg2ZWFjOTdiLAorCTB4Y2Q1ZWZhOWQsIDB4NWYxZjg0YTksIDB4ZmIxNGNjZjMsIDB4M2JiMWJlNmIsIDB4M2Q1NzcxMWYsIDB4MjNjZjZmYmEsCisJMHgyMzY3OTg1OSwgMHhjOTllZGJjOCwgMHhmNTdhYzQ3NiwgMHhkZDE2M2I2OSwgMHg2YmI3ZjcyZiwgMHhmNzIwNmZjZiwKKwkweDY0ZWQxYjNlLCAweDAzY2NjZDNlLCAweDk5ZWYzNWZiLCAweGQxZjAwYzFkLCAweGUzZmFmYjVlLCAweDFhODdiODk1LAorCTB4ZTgzZGI5ZWQsIDB4YTZkYmIyYmYsIDB4MmQ2NzBmNDIsIDB4Zjg3MjhjOWUsIDB4YmJiMzU5ZTEsIDB4YmEwY2ViMTcsCisJMHgyZWEyNzg3OSwgMHg1NmE0NWE0ZiwgMHgzYmFiMmZlZSwgMHgzN2Q3NzExZiwgMHg4MGJmZTFmMSwgMHhmNzVhZjVkYywKKwkweDNjZTJjZmYzLCAweDM4ODRhZDdiLCAweGViMWY2MTcxLCAweGU4NWRkNzhkLCAweDJkYzdjZjM1LCAweDk4NzNlYzhmLAorCTB4OTQ5NzJmNjAsIDB4ODJjZjk1ZWUsIDB4ZWYzZWFmN2YsIDB4ZjQ1YmFkOTIsIDB4NDM5ZGU4MTksIDB4MTFlNzhmZDgsCisJMHg2NTI1ZjJlMiwgMHg4NWZmNTI3YiwgMHg1ZTI1YmRkZSwgMHg5N2M1ZGZkNiwgMHgwOWJkOGJlYSwgMHgxN2YzMWJmNiwKKwkweDUyNmI2ZWRmLCAweDYwMjQxNDdjLCAweGJmMTlmMjVjLCAweDNiMjAxOWM5LCAweDgzNjZkZmM3LCAweDk5ZTg3OGJjLAorCTB4YmUyOTY3OTEsIDB4NzM3ZWUyZmUsIDB4NmEzYWMyZDgsIDB4OTRlNmQyYjYsIDB4ZjgzZmI4Y2MsIDB4MGViY2ZlZjIsCisJMHgzYmE5ZjNlNywgMHgzNGM3OTEwYSwgMHg4NGFjODgyZiwgMHg1MWIwNWM1ZiwgMHg3YmNmMmU0YSwgMHhiZTVmODhkYiwKKwkweDJhOTcxYjgzLCAweDRmMmRkZjI1LCAweGM3ZWU4NTRkLCAweDM4ZjU3MzU3LCAweDE2YzA3NTc2LCAweDFkZGYyODBjLAorCTB4ODNhM2ZlOGYsIDB4OGVjY2VmOWMsIDB4NjdhZjc3ZDMsIDB4N2U3MTI5N2UsIDB4YWQ0MjViNmYsIDB4MmRiN2RlNmUsCisJMHg3MzhmYzc1MywgMHhlMzNmN2YzYywgMHhjZmIxOTU1OCwgMHhlNzkyODdhYSwgMHgyOTkxNTJkZiwgMHg4OTY2ZDNmNiwKKwkweGM2MGUyMjE0LCAweDg4YWMyZmY4LCAweDEwYTQ1YWUxLCAweDVkNzYzNTc4LCAweGUwMTNkMjNkLCAweGUwOGFjYmM4LAorCTB4ZjJhMGVmODgsIDB4YTg2ZTk2YTEsIDB4NGZhZTNiMzQsIDB4YTgyMDRhNWYsIDB4MGY3ZjhjOTUsIDB4N2I4YzhiYjksCisJMHg1NWVmNWU2MCwgMHhkYmU1N2VlOCwgMHg5OGQ4ZjM2ZiwgMHgyNDZhNGI0ZiwgMHhhYjUzNzkxZCwgMHg3YzhlOTIyMywKKwkweDQ2YThlNDY4LCAweGNiZWI4ZDNiLCAweDE5OWZmMThhLCAweDQ2NDlhZmRmLCAweGY2NjQzZmI4LCAweDhmZGJjNmQ4LAorCTB4NmYzYzQzOGYsIDB4MmFiMzdlMWQsIDB4ZmRkMGE5M2UsIDB4NGQyMDY5YTYsIDB4NjQ2NzIzZjYsIDB4ZTliNmVjMTEsCisJMHgzODc1ZTRiOSwgMHgxZmMxMzNhNywgMHg2NTc2MDY0NywgMHg4ZmUyMTM3YiwgMHhhYTNiOTBjZiwgMHgxMzdlMjg3YywKKwkweDdjYTNmYWZkLCAweGE1NGY4MWQ4LCAweGY2YWIwYWNkLCAweDY1YjFhZjIyLCAweDNhMjk0ZDBhLCAweGU1YjFiMDFkLAorCTB4YTdiNGJlZmIsIDB4NWUyZTdlYzIsIDB4MWUzZjE1NmQsIDB4NzM4MjIyNTEsIDB4MGFhZTI3YjksIDB4MjM5ODhjM2UsCisJMHhjYThlNzM4MiwgMHgxOGZjMTFmZiwgMHgwOTU5MTA5OSwgMHhiNGFkY2FkYywgMHhjOWYxOTZhZiwgMHgxZTJlOTU5MSwKKwkweGEwYzJiMmZmLCAweDAzZTQ5MWE3LCAweDU3MzIyNzg1LCAweGI1ZWE0ZjAzLCAweDM3MTFiN2QxLCAweDA5ZDk5NzY5LAorCTB4N2JlOTg5M2YsIDB4YTIyN2ExOWQsIDB4NzgzYjg2YzcsIDB4YjM0MTBmZmMsIDB4NGU2MWYxMGIsIDB4MGJlNDYyYTUsCisJMHhiNWY5Zjg5NiwgMHg5MDhkM2ZiOCwgMHhmODQxYzBlYiwgMHhkZGRkOTM2NywgMHhmZGMxYTMyYiwgMHhiYzFmMjBhZiwKKwkweGU1ZGRkYjMzLCAweDMyNmY1ZWJhLCAweGNhY2FlNTg3LCAweGVlMmQ2YWZjLCAweGZiZGQzYjI5LCAweGRmY2MxNThmLAorCTB4MDdjOTFjNWYsIDB4NGJiNWIxY2UsIDB4ZGQ3YjZhMWMsIDB4NDdmYjEzYmEsIDB4ODA3YmEzY2QsIDB4ZGUxYzE3NWYsCisJMHg5ZjU4MmIyNywgMHhhZGExOTZhZCwgMHg2N2QyMmNhNSwgMHhhNDI5YzhlNiwgMHg2ZjYwNGJmOCwgMHhiZGJhMjM4MiwKKwkweGIyZWYxNDhkLCAweDU2MWU5ZjA4LCAweDk3NjdlYjJhLCAweDRiOTQwZjcxLCAweGExZjYwM2I0LCAweGU2ZmNmN2U4LAorCTB4MDBlZmFiYzAsIDB4NjY4NjQ2NmYsIDB4ZjU4ZjRlMDksIDB4NGYwMzBiYTcsIDB4M2UzNzAzYTYsIDB4OTgxZWY4ZTAsCisJMHg2MGZmZWYxMywgMHhmYTBiNWVmNSwgMHhjM2I4YmY5NywgMHg5ZWY2ZTExMiwgMHhiYmU3YzljZCwgMHgwY2Y2ZWQ3YywKKwkweDllM2QwYmY4LCAweGVjN2IwZmQwLCAweGVhYzdhNjQ5LCAweDRlMTk3NjA1LCAweGU4ODA4M2YyLCAweDI5Yzc5Y2ZkLAorCTB4MGU1NGI3ZjIsIDB4ZGYwZjQxYjUsIDB4ZDY5OGNiZDIsIDB4NjMxM2U4MTIsIDB4YTlmMzMxZTgsIDB4Y2UxZmNmNDEsCisJMHhiNmY4NDg3OSwgMHg0MzBmMGI0ZSwgMHhjYzA3MjM2ZiwgMHhlNGVmN2MwNCwgMHg3Zjc0MjZiOCwgMHgxYWVmMTA1YSwKKwkweGFkYzcwMGY1LCAweDIxNmUzZDJjLCAweDBmYTRiNDVlLCAweDhjYmRjNGFkLCAweDk4OWQ1YmY0LCAweGE3YzhlOWJmLAorCTB4ZGIzZjM4ZjksIDB4ZGJjZTNlNjMsIDB4MzY3MGU0NzIsIDB4Zjc4ZGNlYzEsIDB4NmNjN2M3MDQsIDB4MWZmNGI3OGMsCisJMHgyNGJiYzZjOSwgMHg4NmFhZGZkNiwgMHg0NzE3MjEwYSwgMHg0N2UwMTJiOCwgMHg4NWFmZGZhYywgMHg4YjdmMjEwYiwKKwkweGYxODI1NDMyLCAweGY5OTZlNDI4LCAweDQ5YTA2YjRjLCAweGU4YWFkMWNlLCAweDM0NDc0ZjdlLCAweGY3YjFmOWMxLAorCTB4NmU4NTUxZjYsIDB4MjUwZjhjYWYsIDB4MWQzNzA3YzgsIDB4YjExMjU0YmQsIDB4ZDlhMGYxYzcsIDB4ZTgxMzk1YzAsCisJMHhkZmZkZDYyZiwgMHgwOWMwYzhiOSwgMHhiZjBjZGE1ZSwgMHhiYzI3MDcxZiwgMHhmNWEzZGMzMSwgMHhhZTdkYzgxNiwKKwkweGI2M2I5NzQyLCAweDNiY2FmODVlLCAweDZkZTMyMDIzLCAweDk5MmE1ZGFmLCAweGM2NzU4YzU5LCAweGEzYzA0YTNjLAorCTB4MDE3YzcxNTksIDB4MGUwYWU0MGUsIDB4ZjM2NzMyNmMsIDB4MmJjZjdjYjksIDB4ZDI1ZTRlZWUsIDB4OTZiMWI4ZGMsCisJMHhkMzNhZDNhNywgMHg2YmQwYjVmZCwgMHg1ZGU0MDUxMywgMHhiMWFlNTYzNywgMHg4NTcwZjQ3NiwgMHg1NTNlYmY3ZSwKKwkweGY2ZmI4ZjdmLCAweDk2NGVjMTI4LCAweDdkNjMyMmViLCAweDliYzE3Y2VlLCAweDVkNjdmMDMwLCAweGY4NWFjNmY1LAorCTB4N2U1OTdkZGYsIDB4ZjliYmUyNGIsIDB4ZWRhZmY4ODcsIDB4YWRkN2E2NDksIDB4MzM5YjU4ZGYsIDB4MWVmYjlmOGUsCisJMHgxMjZhN2VkYSwgMHhkOWFmY2Y1ZCwgMHhkYjM2YTNiYiwgMHg0YzdmN2Q3NSwgMHg5OGI2OGJlZSwgMHg0OWU2OTU5YywKKwkweGJlNThmYTg5LCAweGI3MTI3NmIxLCAweGFmZmU1MmViLCAweDdkY2ZkMGZhLCAweDhjMzU4OGYxLCAweGI1ZmFjYmI4LAorCTB4ZmRiN2ZjZTAsIDB4MDkyNWJkNzEsIDB4NWY4MDdmYjcsIDB4OWQ2YjA1MzMsIDB4ZmU1YmJlMzMsIDB4MTJhYjZkYjEsCisJMHg0ZjgwNTYxZSwgMHhlMmJkNWZlYywgMHgwOTM3ZWM2NywgMHgxOGFhNmRmYiwgMHg1YTY4YTc1MywgMHgzNzc5MWQzZCwKKwkweDRmNGY1Nzc5LCAweDZkOGM1M2FjLCAweGE4YTcyODE5LCAweDQ5YmQ4OGI3LCAweGQyYjg3ZWNiLCAweDYyM2U4ZTNkLAorCTB4ZDRhZTZmZjMsIDB4ODY0ZDlmNjQsIDB4NmZhOTRmMWQsIDB4MWUxNWU2NzksIDB4NTNjY2I5N2YsIDB4NTU3ZWM5NTYsCisJMHhiZjkyYTlhZSwgMHhhNmE3ZGQ4ZiwgMHg4NjBmY2Y1MiwgMHg4MGJmMWRiMiwgMHhjZDA3NDUzZCwgMHhiOTQ5Zjg0ZSwKKwkweDRmMzNlYmE2LCAweGZjMmVmY2JkLCAweGUxZGIyZjMxLCAweDM1N2U2NGVhLCAweGJjZmE2OTU1LCAweGVhMjczNjYzLAorCTB4NWY2M2QxNDAsIDB4ZmZlMDdiZTUsIDB4YTVjYmVjNWIsIDB4ZDNiMjYyY2UsIDB4OTUzZjFlNjQsIDB4M2RmMDU3M2IsCisJMHhjNmM3Y2ZiNiwgMHg3YWE1NjkzZSwgMHg2NDVlZDNiZSwgMHg1MzNhZmVmZSwgMHgzYWRiZTNiMSwgMHhjNTFiZTQ5MywKKwkweDEyZDljMTY5LCAweGY4OTBiZjg3LCAweGU4NWMxZDE2LCAweGY3YzA1Y2Q0LCAweGQ2ZmUxZGEwLCAweDY3N2ZmNWZlLAorCTB4MGM4ZjBlMjMsIDB4MGJiYTY3ZmUsIDB4ZDNlZDc1YjgsIDB4YjZjZmQ4NzQsIDB4ODFkMzhmODEsIDB4NjYwNjI3MGYsCisJMHgxZDllZDAzOSwgMHgxZmQwMzk3MiwgMHgxNmI4ZmJhZCwgMHgzNjhjYmFmMywgMHg4YjMwNjc1ZSwgMHhmNjM2YjE5YywKKwkweDEzZDU4ZTdlLCAweGNkZDFkZTEyLCAweDczYWY2YmQwLCAweDYxNGIyZmRiLCAweDgyZGRhOWVmLCAweGNlOGVmYzYzLAorCTB4ZDc4OGZjNDQsIDB4ZTMzOTVjMTksIDB4ZWIxMjY1ZDUsIDB4ZjViMzA1MGMsIDB4ZDQ1YTAzM2EsIDB4N2FjYzBhMTksCisJMHhlYTM0MDE5ZCwgMHg2NzUxNjgwYywgMHgwY2VhM2Y0MCwgMHgwMDY3NTFhMCwgMHg2ODAzM2E4ZCwgMHhhMmQwMTlkNCwKKwkweDJiZmU4MGNlLCAweGJjYjE2YmE4LCAweDUwZGU0ZTUxLCAweGVjZDFhYWRmLCAweGY0MGZmZjgyLCAweGY1ZTQ0MTZhLAorCTB4NzRkMzFjMGYsIDB4YzQxMjg3N2EsIDB4ZmJjNjdmN2QsIDB4YWY0NjBlMjMsIDB4MjhiMDc1ZTgsIDB4ZTc3OTUzYzcsCisJMHhmYmNiMzQxZiwgMHg1ZWRhMWEyMCwgMHhkNmY3MTMzNywgMHg1NTcxYjlhZiwgMHhkOTM3MTExNywgMHhhM2NkZGIxNCwKKwkweDZhMWY1MTI3LCAweDFiZGM1M2VmLCAweDJlNWZlODVkLCAweDVjMWI2YzcyLCAweGZhMjM3ZWY4LCAweGQ1NmVjZDdiLAorCTB4OWFiYWZiODUsIDB4NmY5N2ZhOGQsIDB4NThlYTU3YjAsIDB4MmNjNzM5ZDUsIDB4MTVmYmNmNzIsIDB4ZWZmZGUxY2EsCisJMHg2NGVmZWFiMCwgMHgyY2JkYzZiZiwgMHg5NTQ1YjBmNywgMHgxZDZmZGEzYywgMHhjYjRiZjc5MiwgMHg0ZDczOGE4YiwKKwkweDdlZGExZTQyLCAweDEzODJlN2NiLCAweDlkZjRiNjlkLCAweGIyMWZkNzkwLCAweGM1MjRkNzM5LCAweDdkZTQ4ZjU3LAorCTB4YzE3NGZjN2UsIDB4NDU0MzNjOGQsIDB4YTdkNWFmNGMsIDB4N2I1ZWRmOTAsIDB4ZjkyMTM4MDEsIDB4YjQ3ZTQyNDgsCisJMHgzM2ZjZDlkNiwgMHg1ZGE0NjdlNCwgMHg3ZWZjZTEzMywgMHg2NDRlZTg3ZSwgMHg2ZDNkZDZmOSwgMHhiMDkyMjhmZSwKKwkweDk5MzA3MzdmLCAweDZkZjYwZGY2LCAweDk5YzgyM2NkLCAweDAzNGE4ZmRjLCAweDk0M2ZiMmUyLCAweDc0YWExZmRjLAorCTB4YzY5MjdkNjQsIDB4M2NkMWU2M2YsIDB4ZmY3NTViZTQsIDB4M2Y0MGU2YjQsIDB4ZGJiOTc3ZWYsIDB4NjFjYWY5MmEsCisJMHgyNTcwZjc4ZiwgMHhiMzQ5ZjFmYiwgMHgyNzJmZWE0NywgMHhiZGU0ZDk4ZiwgMHg5Y2ZiN2U3NSwgMHg4ZDRiZmFhNCwKKwkweDFmZWE1NTM2LCAweGM0OGFjYzFiLCAweGRlZTUyYmYxLCAweGFhY2JiMDYzLCAweGVlYTU3YmJhLCAweDEwZWI5NTUyLAorCTB4ZTFkOThlN2YsIDB4Mzc4NmYyZDEsIDB4NWNjMzc3YzAsIDB4NmFiZmQ0OTcsIDB4ZTEwYmY0YWMsIDB4ZjcyZjdlYzcsCisJMHg3ZjE2NjgzYywgMHg4MjU0ZTlhYiwgMHhjOWFiZDMyYSwgMHhhZDdmODE2ZCwgMHgzZDhhNzU2MiwgMHgyOThmZWQ5OSwKKwkweDc4YWIwZmVjLCAweGJiMDRjNmFmLCAweDkxNWRiMGRhLCAweDEwMGE0MmJjLCAweDg2OTVlN2FjLCAweGZlMGQ1NzNlLAorCTB4ZmIwYTU3ZWIsIDB4M2Q1NmJkY2IsIDB4NTU1M2NlMGYsIDB4YzVkNzlmZTEsIDB4ZGZlNzhiNzEsIDB4ZmMwYjVlNDcsCisJMHg1NWM3MWQ2NiwgMHg1ZjY3MWNiNCwgMHgzN2JmNzA4ZiwgMHg5ZWJlNmE2ZCwgMHhjMDcyYmJlNywgMHgzMzE5ZjU3ZiwKKwkweDcyNmE0ZjAxLCAweDk1ZTg1ZTdlLCAweGZjZWQ1Zjc4LCAweDA5NWJlZjg0LCAweDczN2RhNWRmLCAweGE4ZTFmN2QzLAorCTB4Yzg0OTNlODksIDB4NzU5YTRmNmIsIDB4Y2E3ZDYxZmMsIDB4ZWMxNGViN2IsIDB4NWUzZWVhNTUsIDB4MzQ3NGNmNjksCisJMHg4Y2EyYmI0OSwgMHgzNDBiZmZjNCwgMHhlMDJmNmYzZCwgMHg0YTY2NzJiYiwgMHhlYjBmYTJkZCwgMHg2ZWVkZGE2YiwKKwkweDBiODYzZmU4LCAweGJlZmM4ZGJiLCAweGU3OTZlNTQwLCAweDViZDU0ZWVkLCAweGRjMjlkMzBiLCAweGNhNWI4ZDNmLAorCTB4ZTc2MTdlMTQsIDB4NWM3MWQ0N2MsIDB4M2Q0ZjNmYzIsIDB4N2QwNWMwYmIsIDB4NDM3NzY5N2MsIDB4YzczOTM1MWYsCisJMHgzMWRkZTFlNiwgMHg3MmZmZTBjYiwgMHhkYzU1YzM1OSwgMHgwMjlkMjc5NywgMHg0MzhmOWZkOCwgMHg1YWRmYWNkZCwKKwkweDVkNDE0ODFjLCAweDUwZDFlNDNkLCAweDM4YTYzZjI3LCAweDFlYmZhZWYxLCAweDcxNmZiNzRmLCAweDE0MGFjZmMyLAorCTB4YjViN2VhMjcsIDB4ZDkzNWRkYTksIDB4ZTY3NmJmY2MsIDB4OWNmMDM3MGMsIDB4NjFlYTU1ZjEsIDB4NzZlYWRjMjMsCisJMHg1MzUwNmI3MCwgMHg2Y2E2YjVmNCwgMHhmZjBkZjNkNCwgMHg1NGE2ZjcyOSwgMHhkN2Y3OGE0ZCwgMHgxZDE0N2UxYiwKKwkweGYxMWQyMmZjLCAweDZkZDQ0N2Y1LCAweDgwN2Y4Mzc3LCAweDgzNWVlZTZjLCAweGZlYTBlYzNmLCAweGJmNTI2OWE2LAorCTB4ZTVkMWQ5OGQsIDB4NjEzYjM5ZmQsIDB4ZjRhYjUzNDcsIDB4ZWY4ZDhkNzUsIDB4MGM0ZjkxOTksIDB4YzFjZGU2ZGQsCisJMHg3Y2Q3MmJmZSwgMHhjZTViMjViZSwgMHg4Y2JkN2UzOSwgMHhiODAzMzc3MSwgMHgxNjVlYjYzYiwgMHg0NjNkZjFjMywKKwkweDZiNzgxZGZkLCAweDI2YmFlYTMyLCAweDMyNmJhZWEzLCAweGEzMjZiYWVhLCAweGVhMzI2YmFlLCAweGFlYTMyNmJhLAorCTB4YmFlYTMyNmIsIDB4NmJhZWEzMjYsIDB4MjZiYWVhMzIsIDB4OTdhZTEzYTksIDB4ODc4ZWRkZjYsIDB4MDhlYTFkYTQsCisJMHhiYzQyNzhjOCwgMHhjN2VhYjliOCwgMHg1NTE3NWRkNSwgMHhhNTc3NTM4ZCwgMHhjNDg2NTcxNCwgMHhiZDdiZjY1ZCwKKwkweGNlYTYzZGRlLCAweDI2YWVmZWNhLCAweGUwZDU3YmY4LCAweDQzMWU3Yjg0LCAweDcxNjNkMjVlLCAweDZiNTQzOGIzLAorCTB4NjAzYzE2ZjEsIDB4NTRmMDdjMTcsIDB4OGQ2ZjViOGQsIDB4ZjUyZWNmZTksIDB4OWI2NGNiZDksIDB4MmNhODdiOGYsCisJMHg1MTUyNjU5YSwgMHgyM2VlMzRjNywgMHhkZjg0ZWY1NiwgMHgxYmYwOWNlMCwgMHhkMzFiZjBiNCwgMHhmY2RmYjhlYywKKwkweDVkYWVjMmQ2LCAweDAxMDllN2FhLCAweDcyNmMxM2M5LCAweDMyMzc1YmJmLCAweDJmN2QzMGFlLCAweGU1NzA5MzM5LAorCTB4YzJiODMxYjMsIDB4OTAxNTlhMGYsIDB4OTVhMGVkNjMsIDB4MjMzZjc0YmEsIDB4MzcyNTRmZjgsIDB4MGUzZjljN2YsCisJMHg5Yzc0ODRjZSwgMHhkYTFhOTY5OSwgMHhiNWE2N2Q4NywgMHgxNzkxYmFhNSwgMHg5ZDhiYmZiMywgMHg4OGE2ZGM5ZCwKKwkweDA2YTFhZmJmLCAweGJjMWM3N2Q5LCAweDdjOWU0NzQ5LCAweDczZDFjNGVmLCAweGY3ZjllMWJmLCAweGYyNWQ4M2ZlLAorCTB4ZDc5M2FkOWQsIDB4ZTBmZmZhMmUsIDB4YWU5NTRkNGQsIDB4ODQ3NzVmOGYsIDB4OTY1OWU3N2QsIDB4NDNiNjU0ZWEsCisJMHgxNmQ1NTc4ZSwgMHhiOGJhOTIyYSwgMHg1MGZlMmE5YSwgMHg1OGFlM2RhMywgMHhkMzc3YTM4MCwgMHhiNTc3ZGMzYywKKwkweGM4MzllMWI1LCAweDJlZmVjMzk5LCAweGEzMmNkZmVmLCAweDZhMWE2YmJlLCAweGQ5ZjRjYmRlLCAweGJlMzczY2VjLAorCTB4M2RjZDRkYWIsIDB4ODAwYjA1NDQsIDB4YjBjNTc1NDcsIDB4YWRkNGIzYWIsIDB4MTk2M2RkNjAsIDB4YmY4M2JmZGUsCisJMHhhN2NjNWVkYywgMHg5NmZlZTM1NiwgMHhiM2I2OTc1MywgMHhjZTYzZWU0YiwgMHgzMmZiZGM0MiwgMHhmNTFmYWJhYiwKKwkweDllNmYyZDg2LCAweGIyYzI3YTkwLCAweGQ0NDJkNzBjLCAweDc5YmNiNjFiLCAweDVjNzNhNzVhLCAweGU1MWI4YWZkLAorCTB4YWJhYjEzYjIsIDB4NjZmODgyN2YsIDB4MTA5ZjNlZWIsIDB4MDlhMWZkNjcsIDB4YzBmYjc0NDksIDB4MDlmM2VlZTQsCisJMHgzZjA1YWU3MSwgMHgzZjRlOWRmOCwgMHhhZmI4NGM1MywgMHg1Yzk0NDM1NiwgMHhmMjFkYmJkNSwgMHg0YmZlZWJmOSwKKwkweGE4ZDNjZjdmLCAweGFhYTdjOWM0LCAweDc0OWM1Yzc0LCAweGU3YjBjMjgyLCAweGY5MGVjNWQxLCAweDcxMzM5N2ZlLAorCTB4ZGJkNDNjZmQsIDB4MTBiNWQ4YTgsIDB4ZmRhZjM4ZjMsIDB4ZTJmOGVjMzUsIDB4YzFhNzllYWQsIDB4NzczOGNmMjcsCisJMHgzNTc5ZjEwZSwgMHgwZDkwYzc1OCwgMHhiYmUzMTllZCwgMHhkYmQ1MjllNCwgMHgzZDM2YjY4OCwgMHgzNTdlOTI2MCwKKwkweDZkZjY4YTU4LCAweGZhMjBmNDM1LCAweDgxNzYyZmQ5LCAweGYzOTNlZDRmLCAweDNhNjIyYzZlLCAweGI3OWExYWNmLAorCTB4ZTk3ODhlZGUsIDB4NzNmZThkZDksIDB4ZWM1ZTllNjUsIDB4ZGZlZWI2MzcsIDB4ZTU4ZjljNjksIDB4YzM3OTg3ZDksCisJMHhmOWU0YWE4NSwgMHg2ZGVhMzdjMywgMHg1NWMyMmVjYywgMHgzNzFkMGUzYSwgMHg5M2FjYThmYywgMHg1OGU3ZmJlNCwKKwkweGE1NWUzOWZiLCAweGZkZjk3ODFhLCAweDQ3YmNiMzcyLCAweDdlNGM0ZjIwLCAweDBhNWQ1ZWVhLCAweGEzZGU1ODc5LAorCTB4NjFhZmJjODYsIDB4NTI5OWVjOWMsIDB4N2I2ZWY5OGYsIDB4Yzc3ZWM4MGQsIDB4N2M2NTNiMGQsIDB4ZTNhZjM5NmMsCisJMHhhNjg1YjRhMywgMHgwZGU0MDRlMCwgMHg0ZTBkMWU1MywgMHg3NjUzYmM4MCwgMHhkYzVjZGE4YywgMHhiNTE4MTBiZSwKKwkweGUxNzg3ZjIxLCAweGU4NmQ0NzZmLCAweDc1NDNjMTdmLCAweDU2YmZlMWUzLCAweGMyZGYwOWFkLCAweDNmNTk1MWIyLAorCTB4OTIxYWY3OWQsIDB4MDRlOGMyNzcsIDB4NGQ4NTZmZTQsIDB4NmMwMjU5NmYsIDB4ZTY5ZTczYjcsIDB4YjdmMjkzN2QsCisJMHhkMzYzODkyMiwgMHhmZTlhNWIwZCwgMHg4N2IwNGFhOCwgMHhlNDkwY2ZlOSwgMHgyNTlkNTRhYiwgMHhkZDE0YmVlMywKKwkweDNlOGY3ZGZmLCAweDZlOGVjMmE4LCAweDA5ZGNiMjA4LCAweDY5ZTczN2Y2LCAweDEyNDhlNWQzLCAweDZiYWNiMGRmLAorCTB4ZjM4MzcwMzEsIDB4M2Y3MWE0YjUsIDB4M2NiZTQ3MzMsIDB4ZTQyM2MwYzUsIDB4Mzc4YzhkOGYsIDB4YmViN2E2ZmUsCisJMHg3OWM4YmU0MiwgMHg4YzdlMThkYywgMHgyNjFjMzE0ZCwgMHhlYmVmNWRjNCwgMHgyMGZjMTcxMSwgMHhiYmRhZGU3OSwKKwkweGY3OGFkOTFlLCAweDc2ZTM1MzZkLCAweGQ3OGZiYzhiLCAweGRiNDU2ZGY0LCAweDI1OWVmYWRhLCAweDRjYmYyNDg3LAorCTB4NjVmOWNmOWEsIDB4OWM5ZDdkMTIsIDB4N2I2OGU0NjMsIDB4MzlhZGYzZjAsIDB4NzZjYmVjZTMsIDB4MGVkMTJkNzAsCisJMHgzNzQzOWE0ZSwgMHhkMjdhYmRlMCwgMHg0ODBlZWE5ZiwgMHgwZmRkMDkxYywgMHg2YWQ5ZDk3YywgMHhlY2FlMjM3NywKKwkweGQ4YTU1NWZhLCAweGE5ZjViN2Q3LCAweGZhYTk4ZjMyLCAweGE3NTFkOTQ3LCAweDUyNTQwZmNjLCAweDg3ZTZmYzExLAorCTB4ZTFlMDExZGEsIDB4MGMzYzI0ZWMsIDB4ODk3MmRkNDgsIDB4ZGRhZTcwNDMsIDB4YWRiNjA3NzgsIDB4MTIzZTRhNzEsCisJMHg1MzM2ZWJmMywgMHg5OGFkYzNlOCwgMHhlZjkwZTU5NywgMHg0NWI3MGMxMSwgMHg2ZjdjMmNhNiwgMHg0YWVlZTI5YSwKKwkweDJlY2UyYmM4LCAweDlkMDQxNTk5LCAweDgzMGExOWRkLCAweDE1Y2ZlOGVmLCAweGQ1YzhlYTM3LCAweGQ2YWUzYTY5LAorCTB4N2JhZDBkYTgsIDB4MzUyZGZjNzksIDB4NWJmMWI4MmMsIDB4NmZmMzA3ZTAsIDB4NzY5N2FjYjcsIDB4YjE0Y2Q5NDUsCisJMHgyOTBhNWNkYiwgMHg3MDY3ZmZmYSwgMHgzZDdiYzQyZCwgMHg2N2FkM2RmNiwgMHgyMGVmYjA1YiwgMHhmMDRhZmJkZSwKKwkweDhmYThiNTk5LCAweGU0NWQ5NWZlLCAweDgwZDUwNjg5LCAweDMzZDNjZjk5LCAweDdiYjcwNDgxLCAweGI4OTQyY2VlLAorCTB4YzY4NmE1MTMsIDB4MmNmZjkxZmIsIDB4NmEzYTk1NGYsIDB4MTNkNzA0Y2YsIDB4ZDNkYTZlZjgsIDB4ZjVlNGEzN2MsCisJMHhjN2E0ZmU4NywgMHgyOWE1ZDFmYiwgMHgzZDcxZTQ2ZSwgMHg3MTFiNWNmMywgMHg1ZDQ3OWVhZSwgMHhhMjlhZmUzMiwKKwkweGExM2MwYmYzLCAweGE5NjdhN2ViLCAweGU2OWVjZTdlLCAweGM1OWY3OTRjLCAweDg3NjdhMWVlLCAweGJmYmUzMjY3LAorCTB4ZTViYzMyNTksIDB4MTgwM2E4ZDUsIDB4NjY3YjFmZGYsIDB4NGZiNzNmNzAsIDB4ZGU3NzBkMjksIDB4NzU3MzNlMDcsCisJMHhiOTk0NTc3OSwgMHhkZTRlZGVlNCwgMHg3YjEzZTM3OSwgMHhmMTg2N2Q3NCwgMHg4OTdkYWMxZCwgMHhmZWZkZTkyMywKKwkweGNiODBmZWJmLCAweDAwMjIyMGIzLCAweDAwMDAwMDAwCiB9OwogCiAjZW5kaWYgLypfX0JOWDJYX0lOSVRfVkFMVUVTX0hfXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKaW5kZXggYWVhMjZiNC4uZWQ2NDhhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwpAQCAtMjIsMTQgKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgImJueDJ4X3JlZy5oIgotI2luY2x1ZGUgImJueDJ4X2Z3X2RlZnMuaCIKLSNpbmNsdWRlICJibngyeF9oc2kuaCIKLSNpbmNsdWRlICJibngyeF9saW5rLmgiCiAjaW5jbHVkZSAiYm54MnguaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTVVBQT1JUX0NMNzMgMCAvKiBDdXJyZW50bHkgbm8gKi8KICNkZWZpbmUgRVRIX0hMRU4JCQkxNAogI2RlZmluZSBFVEhfT1ZSRUhFQUQJCShFVEhfSExFTiArIDgpLyogOCBmb3IgQ1JDICsgVkxBTiovCiAjZGVmaW5lIEVUSF9NSU5fUEFDS0VUX1NJWkUJCTYwCkBAIC0xMzksNiArMTM0LDI2IEBACiAjZGVmaW5lIFBIWV9TR01JSV9GTEFHCQkJMHgyCiAjZGVmaW5lIFBIWV9TRVJERVNfRkxBRwkJCTB4NAogCisvKiAqLworI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX0FERFIJCTB4MgorCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfTEMgCQkweDcKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUgkweDIxCisKKyNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0FERFIJCTB4OAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX1BBU1NJVkUgMHg0CisJI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfQUNUSVZFCSAweDgKKyNkZWZpbmUgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9BRERSCQkweDE0CisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX05BTUVfU0laRSAJMTYKKyNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0FERFIgCQkweDQwCisJI2RlZmluZSBTRlBfRUVQUk9NX09QVElPTlNfTElORUFSX1JYX09VVF9NQVNLIDB4MQorI2RlZmluZSBTRlBfRUVQUk9NX09QVElPTlNfU0laRSAJCTIKKworI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfVU5LTk9XTiAJCQkweDAKKyNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX0xDICAgCQkJMHgxCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9BQ1RJVkVfQ09QUEVSX0NBQkxFCQkweDIKKyNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX1BBU1NJVkVfQ09QUEVSX0NBQkxFCTB4MworCisjZGVmaW5lIFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFIAkJCTB4MDA0NAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTU0LDEzICsxNjksMzQgQEAKIAkJKF9iYW5rICsgKF9hZGRyICYgMHhmKSksIFwKIAkJX3ZhbCkKIAotc3RhdGljIHZvaWQgYm54Mnhfc2V0X3BoeV9tZGlvKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3Moc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfU1QgKwotCQkgICBwYXJhbXMtPnBvcnQqMHgxOCwgMCk7Ci0JUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwYXJhbXMtPnBvcnQqMHgxOCwKLQkJICAgREVGQVVMVF9QSFlfREVWX0FERFIpOworCXUzMiBlbWFjX2Jhc2UgPSAocGFyYW1zLT5wb3J0KSA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCS8qIFNldCBDbGF1c2UgMjIgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX1NUICsgcGFyYW1zLT5wb3J0KjB4MTAsIDEpOworCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIDB4MjQ1ZjgwMDApOworCXVkZWxheSg1MDApOworCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIDB4MjQ1ZDAwMGYpOworCXVkZWxheSg1MDApOworCSAvKiBTZXQgQ2xhdXNlIDQ1ICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVCArIHBhcmFtcy0+cG9ydCoweDEwLCAwKTsKK30KK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9waHlfbWRpbyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggcGh5X2ZsYWdzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCWlmIChwaHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKKwkJCSAgIHBhcmFtcy0+cG9ydCoweDE4LCAwKTsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfREVWQUQgKyBwYXJhbXMtPnBvcnQqMHgxOCwKKwkJCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKKwl9IGVsc2UgeworCQlibngyeF9zZXRfc2VyZGVzX2FjY2VzcyhwYXJhbXMpOworCisJCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfREVWQUQgKworCQkJICAgcGFyYW1zLT5wb3J0KjB4MTAsCisJCQkgICBERUZBVUxUX1BIWV9ERVZfQUREUik7CisJfQogfQogCiBzdGF0aWMgdTMyIGJueDJ4X2JpdHNfZW4oc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGJpdHMpCkBAIC0yNzcsOCArMzEzLDEwIEBACiAJCQkgICBwb3J0KjQsIDApOwogCX0KIAotCS8qIGVuYWJsZSBlbWFjICovCi0JUkVHX1dSKGJwLCBOSUdfUkVHX05JR19FTUFDMF9FTiArIHBvcnQqNCwgMSk7CisJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19SWF9NT0RFLAorCQkgICAgRU1BQ19SWF9NT0RFX1JFU0VUKTsKKwlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1RYX01PREUsCisJCSAgICBFTUFDX1RYX01PREVfUkVTRVQpOwogCiAJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKSB7CiAJCS8qIGNvbmZpZyBHTUlJIG1vZGUgKi8KQEAgLTQ5OCw3ICs1MzYsNyBAQAogCXVkZWxheSg1MDApOwogCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfU0VULAogCQkgICAgdmFsKTsKLQlibngyeF9zZXRfcGh5X21kaW8ocGFyYW1zKTsKKwlibngyeF9zZXRfcGh5X21kaW8ocGFyYW1zLCBwaHlfZmxhZ3MpOwogfQogCiB2b2lkIGJueDJ4X2xpbmtfc3RhdHVzX3VwZGF0ZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKQEAgLTc0OSwxMiArNzg3LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgYm54MnhfZ2V0X2VtYWNfYmFzZSh1MzIgZXh0X3BoeV90eXBlLCB1OCBwb3J0KQorc3RhdGljIHUzMiBibngyeF9nZXRfZW1hY19iYXNlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBleHRfcGh5X3R5cGUsIHU4IHBvcnQpCiB7CiAJdTMyIGVtYWNfYmFzZTsKIAlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMDsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCS8qIEFsbCBNREMvTURJTyBpcyBkaXJlY3RlZCB0aHJvdWdoIHNpbmdsZSBFTUFDICovCisJCWlmIChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSkKKwkJCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzA7CisJCWVsc2UKKwkJCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzE7CiAJCWJyZWFrOwogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJZW1hY19iYXNlID0gKHBvcnQpID8gR1JDQkFTRV9FTUFDMCA6IEdSQ0JBU0VfRU1BQzE7CkBAIC03NzIsMTEgKzgxNSwxMiBAQAogewogCXUzMiB0bXAsIHNhdmVkX21vZGU7CiAJdTggaSwgcmMgPSAwOwotCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGV4dF9waHlfdHlwZSwgcG9ydCk7CisJdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoYnAsIGV4dF9waHlfdHlwZSwgcG9ydCk7CiAKIAkvKiBzZXQgY2xhdXNlIDQ1IG1vZGUsIHNsb3cgZG93biB0aGUgTURJTyBjbG9jayB0byAyLjVNSHoKIAkgKiAoYSB2YWx1ZSBvZiA0OT09MHgzMSkgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBBVVRPIHBvbGwgaXMgb2ZmCiAJICovCisKIAlzYXZlZF9tb2RlID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CiAJdG1wID0gc2F2ZWRfbW9kZSAmIH4oRU1BQ19NRElPX01PREVfQVVUT19QT0xMIHwKIAkJCSAgICAgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKTsKQEAgLTg0MSwxMCArODg1LDExIEBACiAJdTE2IGk7CiAJdTggcmMgPSAwOwogCi0JdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoZXh0X3BoeV90eXBlLCBwb3J0KTsKKwl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShicCwgZXh0X3BoeV90eXBlLCBwb3J0KTsKIAkvKiBzZXQgY2xhdXNlIDQ1IG1vZGUsIHNsb3cgZG93biB0aGUgTURJTyBjbG9jayB0byAyLjVNSHoKIAkgKiAoYSB2YWx1ZSBvZiA0OT09MHgzMSkgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBBVVRPIHBvbGwgaXMgb2ZmCiAJICovCisKIAlzYXZlZF9tb2RlID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CiAJdmFsID0gc2F2ZWRfbW9kZSAmICgoRU1BQ19NRElPX01PREVfQVVUT19QT0xMIHwKIAkJCSAgICAgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKSk7CkBAIC05NjcsNiArMTAxMiw4IEBACiAJCQkgICAgICAobWlpX2NvbnRyb2wgfAogCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNFVCkpOwogCisJYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3MocGFyYW1zKTsKKwogCS8qIHdhaXQgZm9yIHRoZSByZXNldCB0byBzZWxmIGNsZWFyICovCiAJZm9yIChpID0gMDsgaSA8IE1ESU9fQUNDRVNTX1RJTUVPVVQ7IGkrKykgewogCQl1ZGVsYXkoNSk7CkBAIC0xMTU2LDYyICsxMjAzLDkgQEAKIAkJCSAgICAgIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkwsCiAJCQkgICAgICByZWdfdmFsKTsKIAotCS8qIEVuYWJsZSBDbGF1c2UgNzMgQW5lZyAqLwotCWlmICgodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgJiYKLQkgICAgKFNVUFBPUlRfQ0w3MykpIHsKLQkJLyogRW5hYmxlIEJBTSBTdGF0aW9uIE1hbmFnZXIgKi8KKwkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KKwlyZWdfdmFsID0gMDsKIAotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCQkgICAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxLAotCQkJCSAgIChNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9FTiB8Ci0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9TVEFUSU9OX01OR1JfRU4gfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fTlBfQUZURVJfQlBfRU4pKTsKLQotCQkvKiBNZXJnZSBDTDczIGFuZCBDTDM3IGFuZWcgcmVzb2x1dGlvbiAqLwotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCQkgICAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzLAotCQkJCSAgICAgICZyZWdfdmFsKTsKLQotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQlNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKLQkJCShyZWdfdmFsIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDNfVVNFX0NMNzNfSENEX01SKSk7Ci0KLQkJLyogU2V0IHRoZSBDTDczIEFOIHNwZWVkICovCi0KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCi0JCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyLCAmcmVnX3ZhbCk7Ci0JCS8qIEluIHRoZSBTZXJEZXMgd2Ugc3VwcG9ydCBvbmx5IHRoZSAxRy4KLQkJICAgSW4gdGhlIFhHWFMgd2Ugc3VwcG9ydCB0aGUgMTBHIEtYNAotCQkgICBidXQgd2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHRoZSBLUiAqLwotCQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTXG4iKTsKLQkJCS8qIDEwRyBLWDQgKi8KLQkJCXJlZ192YWwgfD0gTURJT19DTDczX0lFRUVCMV9BTl9BRFYyX0FEVlJfMTBHX0tYNDsKLQkJfSBlbHNlIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzXG4iKTsKLQkJCS8qIDEwMDBNIEtYICovCi0JCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwMDBNX0tYOwotCQl9Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwgcmVnX3ZhbCk7Ci0KLQkJLyogQ0w3MyBBdXRvbmVnIEVuYWJsZWQgKi8KLQkJcmVnX3ZhbCA9IE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOOwotCX0gZWxzZSB7Ci0JCS8qIENMNzMgQXV0b25lZyBEaXNhYmxlZCAqLwotCQlyZWdfdmFsID0gMDsKLQl9CiAJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLApAQCAtMTM0NCw0NCArMTMzOCwyNSBAQAogc3RhdGljIHZvaWQgYm54MnhfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBtaWlfY29udHJvbDsKIAlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3Jlc3RhcnRfYXV0b25lZ1xuIik7Ci0JaWYgKFNVUFBPUlRfQ0w3MykgewotCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgY2xhdXNlIDczIGFuZWcgKi8KLQkJdTE2IGFuX2N0cmw7CisJLyogRW5hYmxlIGFuZCByZXN0YXJ0IEJBTS9DTDM3IGFuZWcgKi8KIAotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKLQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKLQkJCQkgICZhbl9jdHJsKTsKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCU1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCi0JCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCi0JCQkJKGFuX2N0cmwgfAotCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOIHwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9SRVNUQVJUX0FOKSk7Ci0KLQl9IGVsc2UgewotCQkvKiBFbmFibGUgYW5kIHJlc3RhcnQgQkFNL0NMMzcgYW5lZyAqLwotCQl1MTYgbWlpX2NvbnRyb2w7Ci0KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICAgICAmbWlpX2NvbnRyb2wpOwotCQlEUChORVRJRl9NU0dfTElOSywKLQkJCSAiYm54MnhfcmVzdGFydF9hdXRvbmVnIG1paV9jb250cm9sIGJlZm9yZSA9IDB4JXhcbiIsCi0JCQkgbWlpX2NvbnRyb2wpOwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgICAgIChtaWlfY29udHJvbCB8Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKLQkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOwotCX0KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJICAgICAgJm1paV9jb250cm9sKTsKKwlEUChORVRJRl9NU0dfTElOSywKKwkJICJibngyeF9yZXN0YXJ0X2F1dG9uZWcgbWlpX2NvbnRyb2wgYmVmb3JlID0gMHgleFxuIiwKKwkJIG1paV9jb250cm9sKTsKKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJICAgICAgKG1paV9jb250cm9sIHwKKwkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAorCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNUQVJUX0FOKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRpYWxpemVfc2dtaWlfcHJvY2VzcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKQEAgLTE3MjYsNyArMTcwMSwxMSBAQAogCQkgICAgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQogCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgfHwKIAkJICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpKSkgeworCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CisJCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB8fAorCQkgICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQorCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpKSkgewogCQkJdmFycy0+YXV0b25lZyA9IEFVVE9fTkVHX0VOQUJMRUQ7CiAKIAkJCWlmIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpIHsKQEAgLTE3NzAsMzggKzE3NDksNDQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9zZ21paV90eF9kcml2ZXIoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCitzdGF0aWMgdm9pZCBibngyeF9zZXRfZ21paV90eF9kcml2ZXIoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTE2IGxwX3VwMjsKIAl1MTYgdHhfZHJpdmVyOworCXUxNiBiYW5rOwogCiAJLyogcmVhZCBwcmVjb21wICovCi0KIAlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUkVHX0JBTktfT1ZFUl8xRywKIAkJCSAgICAgIE1ESU9fT1ZFUl8xR19MUF9VUDIsICZscF91cDIpOwogCi0JQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1JFR19CQU5LX1RYMCwKLQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgJnR4X2RyaXZlcik7Ci0KIAkvKiBiaXRzIFsxMDo3XSBhdCBscF91cDIsIHBvc2l0aW9uZWQgYXQgWzE1OjEyXSAqLwogCWxwX3VwMiA9ICgoKGxwX3VwMiAmIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfTUFTSykgPj4KIAkJICAgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19TSElGVCkgPDwKIAkJICBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQpOwogCi0JaWYgKChscF91cDIgIT0gMCkgJiYKLQkgICAgKGxwX3VwMiAhPSAodHhfZHJpdmVyICYgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0spKSkgewotCQkvKiByZXBsYWNlIHR4X2RyaXZlciBiaXRzIFsxNToxMl0gKi8KLQkJdHhfZHJpdmVyICY9IH5NRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSzsKLQkJdHhfZHJpdmVyIHw9IGxwX3VwMjsKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwlpZiAobHBfdXAyID09IDApCisJCXJldHVybjsKKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfVFgwOyBiYW5rIDw9IE1ESU9fUkVHX0JBTktfVFgzOworCSAgICAgIGJhbmsgKz0gKE1ESU9fUkVHX0JBTktfVFgxIC0gTURJT19SRUdfQkFOS19UWDApKSB7CisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX1RYMCwKLQkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsIHR4X2RyaXZlcik7CisJCQkJICAgICAgYmFuaywKKwkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsICZ0eF9kcml2ZXIpOworCisJCS8qIHJlcGxhY2UgdHhfZHJpdmVyIGJpdHMgWzE1OjEyXSAqLworCQlpZiAobHBfdXAyICE9CisJCSAgICAodHhfZHJpdmVyICYgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0spKSB7CisJCQl0eF9kcml2ZXIgJj0gfk1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLOworCQkJdHhfZHJpdmVyIHw9IGxwX3VwMjsKKwkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJCSAgICAgIGJhbmssCisJCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgdHhfZHJpdmVyKTsKKwkJfQogCX0KIH0KIApAQCAtMTkwMiw2ICsxODg3LDI1IEBACiAJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHhhMDQwKTsKIAkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisKKwkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAorCQkJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDE8PDE1KTsKKworCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJCS8qIFVuc2V0IExvdyBQb3dlciBNb2RlIGFuZCBTVyByZXNldCAqLwogCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCkBAIC0xOTE5LDkgKzE5MjMsNiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJCXsKLQkJCXUxNiBlbWFjX2Jhc2U7Ci0JCQllbWFjX2Jhc2UgPSAocGFyYW1zLT5wb3J0KSA/IEdSQ0JBU0VfRU1BQzAgOgotCQkJCQlHUkNCQVNFX0VNQUMxOwogCiAJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCkBAIC0xOTQ5LDYgKzE5NTAsMjMgQEAKIAogCQkJYnJlYWs7CiAKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQkvKiBIVyByZXNldCAqLworCQkJYm54MnhfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkgICAgICAgMTw8MTUpOworCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKIAkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBQSFkgRmFpbHVyZSBkZXRlY3RlZFxuIik7CiAJCQlicmVhazsKQEAgLTE5ODAsNiArMTk5OCwzMSBAQAogCX0KIH0KIAorCitzdGF0aWMgdm9pZCBibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJICAgIHUzMiBzaG1lbV9iYXNlLCB1MzIgc3Bpcm9tX3ZlcikKK3sKKwlEUChORVRJRl9NU0dfTElOSywgIkZXIHZlcnNpb24gMHgleDoweCV4XG4iLAorCQkgKHUxNikoc3Bpcm9tX3Zlcj4+MTYpLCAodTE2KXNwaXJvbV92ZXIpOworCVJFR19XUihicCwgc2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwb3J0XS5leHRfcGh5X2Z3X3ZlcnNpb24pLAorCQkJc3Bpcm9tX3Zlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkgICAgdTMyIGV4dF9waHlfdHlwZSwgdTggZXh0X3BoeV9hZGRyLAorCQkJCSAgICB1MzIgc2htZW1fYmFzZSkKK3sKKwl1MTYgZndfdmVyMSwgZndfdmVyMjsKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7CisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOworCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBvcnQsIHNobWVtX2Jhc2UsCisJCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzJfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CkBAIC0xOTg4LDcgKzIwMzEsNiBAQAogCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgogCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CiAKIAkvKiBOZWVkIHRvIHdhaXQgMjAwbXMgYWZ0ZXIgcmVzZXQgKi8KIAltc2xlZXAoMjAwKTsKQEAgLTIwMjQsMTQgKzIwNjYsMTAgQEAKIAkvKiBXYWl0IDEwMG1zICovCiAJbXNsZWVwKDEwMCk7CiAKLQkvKiBQcmludCB0aGUgUEhZIEZXIHZlcnNpb24gKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCQkgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmZndfdmVyMik7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICI4MDcyIEZXIHZlcnNpb24gMHgleDoweCV4XG4iLCBmd192ZXIxLCBmd192ZXIyKTsKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCWV4dF9waHlfdHlwZSwKKwkJCQlleHRfcGh5X2FkZHIsCisJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKIH0KIAogc3RhdGljIHU4IGJueDJ4XzgwNzNfaXNfc25yX25lZWRlZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKQEAgLTIwNDksNyArMjA4Nyw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgIT0gMSkgewogCQkvKiBObyBuZWVkIHRvIHdvcmthcm91bmQgaW4gODA3MyBBMSAqLwpAQCAtMjA4MSw3ICsyMTE5LDcgQEAKIAkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgMHhjODAxLCAmdmFsKTsKKwkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOwogCiAJaWYgKHZhbCA+IDApIHsKIAkJLyogTm8gbmVlZCB0byB3b3JrYXJvdW5kIGluIDgwNzMgQTEgKi8KQEAgLTIwOTcsNyArMjEzNSw4IEBACiAJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICAweGM4MjAsICZ2YWwpOworCQkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCisJCQkgICAgICAmdmFsKTsKIAkJICAvKiBJZiBiaXQgWzE0XSA9IDAgb3IgYml0IFsxM10gPSAwLCBjb250aW51ZSBvbiB3aXRoCiAJCSAgIHN5c3RlbSBpbml0aWFsaXphdGlvbiAoWEFVSSB3b3JrLWFyb3VuZCBub3QgcmVxdWlyZWQsCiAJCSAgICBhcyB0aGVzZSBiaXRzIGluZGljYXRlIDIuNUcgb3IgMUcgbGluayB1cCkuICovCkBAIC0yMTE1LDcgKzIxNTQsNyBAQAogCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkJCQlleHRfcGh5X2FkZHIsCiAJCQkJCU1ESU9fUE1BX0RFVkFELAotCQkJCQkweGM4NDEsICZ2YWwpOworCQkJCQlNRElPX1BNQV9SRUdfODA3M19YQVVJX1dBLCAmdmFsKTsKIAkJCQlpZiAodmFsICYgKDE8PDE1KSkgewogCQkJCQlEUChORVRJRl9NU0dfTElOSywKIAkJCQkJICAiWEFVSSB3b3JrYXJvdW5kIGhhcyBjb21wbGV0ZWRcbiIpOwpAQCAtMjEzMyw5ICsyMTcyLDggQEAKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfYmNtODA3M19leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAotCQkJCQkgIHU4IGV4dF9waHlfYWRkcikKKwkJCQkJICB1OCBleHRfcGh5X2FkZHIsIHUzMiBzaG1lbV9iYXNlKQogewotCXUxNiBmd192ZXIxLCBmd192ZXIyOwogCS8qIEJvb3QgcG9ydCBmcm9tIGV4dGVybmFsIFJPTSAgKi8KIAkvKiBFREMgZ3JzdCAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCkBAIC0yMTg1LDE3ICsyMjIzLDQ5NiBAQAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKIAotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7Ci0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZmd192ZXIyKTsKLQlEUChORVRJRl9NU0dfTElOSywgIjgwNzMgRlcgdmVyc2lvbiAweCV4OjB4JXhcbiIsIGZ3X3ZlcjEsIGZ3X3ZlcjIpOworCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCQlleHRfcGh5X2FkZHIsCisJCQkJc2htZW1fYmFzZSk7Cit9CiAKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjZfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwkvKiBOZWVkIHRvIHdhaXQgMTAwbXMgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIFNldCBzZXJpYWwgYm9vdCBjb250cm9sIGZvciBleHRlcm5hbCBsb2FkICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDEpOworCisJLyogTWljcm8gY29udHJvbGxlciByZS1ib290ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCisJLyogU2V0IHNvZnQgcmVzZXQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9NSUNST19SRVNFVCk7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMMiwKKwkJICAgICAgIDB4NzNBMCk7CisKKwkvKiBDbGVhciBzb2Z0IHJlc2V0LgorCVdpbGwgYXV0b21hdGljYWxseSByZXNldCBtaWNyby1jb250cm9sbGVyIHJlLWJvb3QgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7CisKKwkvKiB3YWl0IGZvciAxNTBtcyBmb3IgbWljcm9jb2RlIGxvYWQgKi8KKwltc2xlZXAoMTUwKTsKKworCS8qIERpc2FibGUgc2VyaWFsIGJvb3QgY29udHJvbCwgdHJpc3RhdGVzIHBpbnMgU1NfTiwgU0NLLCBNT1NJLCBNSVNPICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOworCisJbXNsZWVwKDIwMCk7CisJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKKwkJCQlleHRfcGh5X3R5cGUsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJCXU4IGV4dF9waHlfYWRkciwgdTggdHhfZW4pCit7CisJdTE2IHZhbDsKKwlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgdHJhbnNtaXR0ZXIgdHhfZW49JXggZm9yIHBvcnQgJXhcbiIsCisJCSB0eF9lbiwgcG9ydCk7CisJLyogRGlzYWJsZS9FbmFibGUgdHJhbnNtaXR0ZXIgKCBUWCBsYXNlciBvZiB0aGUgU0ZQKyBtb2R1bGUuKSovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCSAgICAgICZ2YWwpOworCisJaWYgKHR4X2VuKQorCQl2YWwgJj0gfigxPDwxNSk7CisJZWxzZQorCQl2YWwgfD0gKDE8PDE1KTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCSAgICAgICB2YWwpOworfQorCisKK3N0YXRpYyB1OCBibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MTYgYWRkciwKKwkJCQkgICAgIHU4IGJ5dGVfY250LCB1OCAqb19idWYpIHsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdmFsLCBpOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwlpZiAoYnl0ZV9jbnQgPiAxNikgeworCQlEUChORVRJRl9NU0dfTElOSywgIlJlYWRpbmcgZnJvbSBlZXByb20gaXMiCisJCQkgICAgIiBpcyBsaW1pdGVkIHRvIDB4ZlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBieXRlIGNvdW50ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQllURV9DTlQsCisJCSAgICAgICAoYnl0ZV9jbnQgfCAweGEwMDApKTsKKworCS8qIFNldCB0aGUgcmVhZCBjb21tYW5kIGFkZHJlc3MgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9NRU1fQUREUiwKKwkJICAgICAgIGFkZHIpOworCisJLyogQWN0aXZhdGUgcmVhZCBjb21tYW5kICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTCwKKwkJICAgICAgIDB4MmMwZik7CisKKwkvKiBXYWl0IHVwIHRvIDUwMHVzIGZvciBjb21tYW5kIGNvbXBsZXRlIHN0YXR1cyAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsICZ2YWwpOworCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09CisJCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCX0KKworCWlmICgodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgIT0KKwkJICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19DT01QTEVURSkgeworCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAiR290IGJhZCBzdGF0dXMgMHgleCB3aGVuIHJlYWRpbmcgZnJvbSBTRlArIEVFUFJPTVxuIiwKKwkJCSAodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZWFkIHRoZSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYnl0ZV9jbnQ7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfQlVGICsgaSwgJnZhbCk7CisJCW9fYnVmW2ldID0gKHU4KSh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX01BU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsICZ2YWwpOworCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09CisJCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfSURMRSkKKwkJCXJldHVybiAwOzsKKwkJbXNsZWVwKDEpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgdTggYm54MnhfZ2V0X3NmcF9tb2R1bGVfdHlwZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHU4ICptb2R1bGVfdHlwZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCB2YWw7CisJKm1vZHVsZV90eXBlID0gU0ZQX01PRFVMRV9UWVBFX1VOS05PV047CisKKwkvKiBGaXJzdCBjaGVjayBmb3IgY29wcGVyIGNhYmxlICovCisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX0NPTl9UWVBFX0FERFIsCisJCQkJICAgICAgIDEsCisJCQkJICAgICAgICZ2YWwpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBmcm9tIFNGUCsgbW9kdWxlIEVFUFJPTSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfQ09QUEVSOgorCXsKKwkJdTggY29wcGVyX21vZHVsZV90eXBlOworCQkvKiBDaGVjayBpZiBpdHMgYWN0aXZlIGNhYmxlKCBpbmNsdWRlcyBTRlArIG1vZHVsZSkKKwkJb2YgcGFzc2l2ZSBjYWJsZSovCisJCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkJICAgICAgIFNGUF9FRVBST01fRkNfVFhfVEVDSF9BRERSLAorCQkJCQkgICAgICAgMSwKKwkJCQkJICAgICAgICZjb3BwZXJfbW9kdWxlX3R5cGUpICE9CisJCSAgICAwKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkiRmFpbGVkIHRvIHJlYWQgY29wcGVyLWNhYmxlLXR5cGUiCisJCQkJIiBmcm9tIFNGUCsgRUVQUk9NXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGNvcHBlcl9tb2R1bGVfdHlwZSAmCisJCSAgICBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfQUNUSVZFKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIkFjdGl2ZSBDb3BwZXIgY2FibGUgZGV0ZWN0ZWRcbiIpOworCQkJKm1vZHVsZV90eXBlID0gU0ZQX01PRFVMRV9UWVBFX0FDVElWRV9DT1BQRVJfQ0FCTEU7CisJCX0gZWxzZSBpZiAoY29wcGVyX21vZHVsZV90eXBlICYKKwkJCVNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQYXNzaXZlIENvcHBlciIKKwkJCQkJICAgICIgY2FibGUgZGV0ZWN0ZWRcbiIpOworCQkJCSptb2R1bGVfdHlwZSA9CisJCQkJICAgICAgU0ZQX01PRFVMRV9UWVBFX1BBU1NJVkVfQ09QUEVSX0NBQkxFOworCQl9IGVsc2UgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmtub3duIGNvcHBlci1jYWJsZS0iCisJCQkJICAgICAidHlwZSAweCV4ICEhIVxuIiwgY29wcGVyX21vZHVsZV90eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0xDOgorCQlEUChORVRJRl9NU0dfTElOSywgIk9wdGljIG1vZHVsZSBkZXRlY3RlZFxuIik7CisJCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9MQzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEUChORVRJRl9NU0dfTElOSywgIlVuYWJsZSB0byBkZXRlcm1pbmUgbW9kdWxlIHR5cGUgMHgleCAhISFcbiIsCisJCQkgdmFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gcmVhZCB0aGUgcmVsZXZhbnQgZmllbGQgZnJvbSB0aGUgbW9kdWxlICggU0ZQKyApLAorCWFuZCB2ZXJpZnkgaXQgaXMgY29tcGxpYW50IHdpdGggdGhpcyBib2FyZCAqLworc3RhdGljIHU4IGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCXU4IG1vZHVsZV90eXBlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4ICpzdHJfcCwgKnRtcF9idWY7CisJdTE2IGk7CisKKyNkZWZpbmUgQ09NUExJQU5DRV9TVFJfQ05UIDYKKwl1OCAqY29tcGxpYW5jZV9zdHJbXSA9IHsiQnJvYWRjb20iLCAiSkRTVSIsICJNb2xleCBJbmMiLCAiUElDT0xJR0hUIiwKKwkJIkZJTklTQVIgQ09SUC4gICAiLCAiQW1waGVub2wifTsKKwl1OCBidWZbU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFXTsKKwkvKiBQYXNzaXZlIENvcHBlciBjYWJsZXMgYXJlIGFsbG93ZWQgdG8gcGFydGljaXBhdGUsCisJc2luY2UgdGhlIG1vZHVsZSBpcyBoYXJkd2lyZWQgdG8gdGhlIGNvcHBlciBjYWJsZSAqLworCisJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICBGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEKSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIk5PVCBlbmZvcmNpbmcgbW9kdWxlIHZlcmlmaWNhdGlvblxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChtb2R1bGVfdHlwZSAhPSBTRlBfTU9EVUxFX1RZUEVfTEMpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJObyBuZWVkIHRvIHZlcmlmeSBjb3BwZXIgY2FibGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJbiBjYXNlIG9mIG5vbiBjb3BwZXIgY2FibGUgb3IgQWN0aXZlIGNvcHBlciBjYWJsZSwKKwkJdmVyaWZ5IHRoYXQgdGhlIFNGUCsgbW9kdWxlIGlzIGNvbXBsaWFudCB3aXRoIHRoaXMgYm9hcmQqLworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9BRERSLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUsCisJCQkJICAgICAgIGJ1ZikgIT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byByZWFkIFZlbmRvci1OYW1lIGZyb20iCisJCQkgICAgIiBtb2R1bGUgRUVQUk9NXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBDT01QTElBTkNFX1NUUl9DTlQ7IGkrKykgeworCQlzdHJfcCA9IGNvbXBsaWFuY2Vfc3RyW2ldOworCQl0bXBfYnVmID0gYnVmOworCQl3aGlsZSAoKnN0cl9wKSB7CisJCQlpZiAoKHU4KSgqdG1wX2J1ZikgIT0gKHU4KSgqc3RyX3ApKQorCQkJCWJyZWFrOworCQkJc3RyX3ArKzsKKwkJCXRtcF9idWYrKzsKKwkJfQorCisJCWlmICghKCpzdHJfcCkpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBNb2R1bGUgdmVyaWZpZWQsICIKKwkJCQkgICAgICJpbmRleD0leFxuIiwgaSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlEUChORVRJRl9NU0dfTElOSywgIkluY29tcGxpYW50IFNGUCsgbW9kdWxlLiBEaXNhYmxlIG1vZHVsZSAhISFcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyB1OCBibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQl1OCBtb2R1bGVfdHlwZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IG9wdGlvbnNbU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkVdOworCXU4IGxpbWl0aW5nX21vZGU7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUxNiBjdXJfbGltaXRpbmdfbW9kZTsKKwlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19BRERSLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfU0laRSwKKwkJCQkgICAgICAgb3B0aW9ucykgIT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byByZWFkIE9wdGlvbiBmaWVsZCBmcm9tIgorCQkJICAgICIgbW9kdWxlIEVFUFJPTVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlsaW1pdGluZ19tb2RlID0gIShvcHRpb25zWzBdICYKKwkJCSAgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJICAgICAgJmN1cl9saW1pdGluZ19tb2RlKTsKKwlEUChORVRJRl9NU0dfTElOSywgIkN1cnJlbnQgTGltaXRpbmcgbW9kZSBpcyAweCV4XG4iLAorCQkgY3VyX2xpbWl0aW5nX21vZGUpOworCisJaWYgKGxpbWl0aW5nX21vZGUgJiYKKwkgICAgKG1vZHVsZV90eXBlICE9IFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRSkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIk1vZHVsZSBvcHRpb25zID0gMHgleC5TZXR0aW5nIExJTUlUSU5HIE1PREVcbiIsCisJCQkgb3B0aW9uc1swXSk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkJICAgICAgIFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFKTsKKwl9IGVsc2UgeyAvKiBMUk0gbW9kZSAoIGRlZmF1bHQgKSovCisKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgb3B0aW9ucyA9IDB4JXguU2V0dGluZyBMUk0gTU9ERVxuIiwKKwkJCSBvcHRpb25zWzBdKTsKKworCQkvKiBDaGFuZ2luZyB0byBMUk0gbW9kZSB0YWtlcyBxdWl0ZSBmZXcgc2Vjb25kcy4KKwkJU28gZG8gaXQgb25seSBpZiBjdXJyZW50IG1vZGUgaXMgbGltaXRpbmcKKwkJKCBkZWZhdWx0IGlzIExSTSApKi8KKwkJaWYgKGN1cl9saW1pdGluZ19tb2RlICE9IFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFKQorCQkJcmV0dXJuIDA7CisKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTFJNX01PREUsCisJCQkgICAgICAgMCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkJICAgICAgIDB4MTI4KTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMCwKKwkJCSAgICAgICAweDQwMDgpOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19MUk1fTU9ERSwKKwkJCSAgICAgICAweGFhYWEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJdTggdmFsOworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiB0aW1lb3V0OworCS8qIEluaXRpYWxpemF0aW9uIHRpbWUgYWZ0ZXIgaG90LXBsdWcgbWF5IHRha2UgdXAgdG8gMzAwbXMgZm9yIHNvbWUKKwlwaHlzIHR5cGUgKCBlLmcuIEpEU1UgKSAqLworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCA2MDsgdGltZW91dCsrKSB7CisJCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywgMSwgMSwgJnZhbCkKKwkJICAgID09IDApIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gIgorCQkJCSAgICAgInRvb2sgJWQgbXNcbiIsIHRpbWVvdXQgKiA1KTsKKwkJCXJldHVybiAwOworCQl9CisJCW1zbGVlcCg1KTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1OCBibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBtb2R1bGVfdHlwZTsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgeworCQlEUChORVRJRl9NU0dfTElOSywgIk1vZHVsZSBkZXRlY3Rpb24gaXMgbm90IHJlcXVpcmVkICIKKwkJCSAgICAiZm9yIHRoaXMgcGh5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIG1vZHVsZSBwbHVnZ2VkIGluL291dCBkZXRlY3RlZCBvbiBwb3J0ICVkXG4iLAorCQkgcGFyYW1zLT5wb3J0KTsKKworCWlmIChibngyeF9nZXRfc2ZwX21vZHVsZV90eXBlKHBhcmFtcywKKwkJCQkgICAgJm1vZHVsZV90eXBlKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIGdldCB2YWxpZCBtb2R1bGUgdHlwZVxuIik7CisJCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkgICAgICBGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEKSkgeworCQkJLyogSW4gY2FzZSBtb2R1bGUgZGV0ZWN0aW9uIGlzIGRpc2FibGVkLCBpdCB0cnlzIHRvCisJCQlsaW5rIHVwLiBUaGUgaXNzdWUgdGhhdCBjYW4gaGFwcGVuIGhlcmUgaXMgTFJNIC8KKwkJCUxJTUlUSU5HIG1vZGUgd2hpY2ggc2V0IGFjY29yZGluZyB0byB0aGUgbW9kdWxlLXR5cGUqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gcmVhZCBtb2R1bGUtdHlwZS4iCisJCQkJICAgICJQcm9iYWJseSBkdWUgdG8gQml0IFN0cmV0Y2hpbmcuIgorCQkJCSAgICAiIFByb2NlZWRpbmcuLi5cbiIpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHBhcmFtcywgbW9kdWxlX3R5cGUpICE9CisJCSAgIDApIHsKKwkJLyogY2hlY2sgU0ZQKyBtb2R1bGUgY29tcGF0aWJpbGl0eSAqLworCQlEUChORVRJRl9NU0dfTElOSywgIk1vZHVsZSB2ZXJpZmljYXRpb24gZmFpbGVkISFcbiIpOworCQkvKiBUdXJuIG9uIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKKwkJCQkgIHBhcmFtcy0+cG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFR1cm4gb2ZmIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KKwlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAorCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0xPVywKKwkJCSAgcGFyYW1zLT5wb3J0KTsKKworCS8qIENoZWNrIGFuZCBzZXQgbGltaXRpbmcgbW9kZSAvIExSTSBtb2RlICovCisJYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIG1vZHVsZV90eXBlKTsKKworCS8qIEVuYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgKi8KKwlibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICBleHRfcGh5X2FkZHIsIDEpOworCXJldHVybiAwOworfQorCit2b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgZ3Bpb192YWw7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwkvKiBTZXQgdmFsaWQgbW9kdWxlIGxlZCBvZmYgKi8KKwlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAorCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkvKiBHZXQgY3VycmVudCBncGlvIHZhbCByZWZlbGVjdGluZyBtb2R1bGUgcGx1Z2dlZCBpbiAvIG91dCovCisJZ3Bpb192YWwgPSBibngyeF9nZXRfZ3BpbyhicCwgIE1JU0NfUkVHSVNURVJTX0dQSU9fMywgcG9ydCk7CisKKwkvKiBDYWxsIHRoZSBoYW5kbGluZyBmdW5jdGlvbiBpbiBjYXNlIG1vZHVsZSBpcyBkZXRlY3RlZCAqLworCWlmIChncGlvX3ZhbCA9PSAwKSB7CisKKwkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUiwKKwkJCQkgICAgICBwb3J0KTsKKworCQlpZiAoYm54Mnhfd2FpdF9mb3Jfc2ZwX21vZHVsZV9pbml0aWFsaXplZChwYXJhbXMpCisJCSAgICA9PSAwKQorCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKKwkJZWxzZQorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcbiIpOworCX0gZWxzZSB7CisJCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQlibngyeF9zZXRfZ3Bpb19pbnQoYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfU0VULAorCQkJCSAgICAgIHBvcnQpOworCQkvKiBNb2R1bGUgd2FzIHBsdWdnZWQgb3V0LiAqLworCQkvKiBEaXNhYmxlIHRyYW5zbWl0IGZvciB0aGlzIG1vZHVsZSAqLworCQlibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgZXh0X3BoeV9hZGRyLCAwKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwN3hfZm9yY2VfMTBHKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQpAQCAtMjIzOSw3ICsyNzU2LDcgQEAKIAkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgMHhjODAxLCAmdmFsKTsKKwkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOwogCiAJaWYgKHZhbCA9PSAwKSB7CiAJCS8qIE11c3RuJ3Qgc2V0IGxvdyBwb3dlciBtb2RlIGluIDgwNzMgQTAgKi8KQEAgLTIzNzcsMzEgKzI4OTQsNDAgQEAKIAkJICAgICAgIE1ESU9fQU5fREVWQUQsCiAJCSAgICAgICBNRElPX0FOX1JFR19BRFZfUEFVU0UsIHZhbCk7CiB9CitzdGF0aWMgdm9pZCBibngyeF9zZXRfcHJlZW1waGFzaXMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJdTE2IGJhbmssIGkgPSAwOworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCisJZm9yIChiYW5rID0gTURJT19SRUdfQkFOS19SWDAsIGkgPSAwOyBiYW5rIDw9IE1ESU9fUkVHX0JBTktfUlgzOworCSAgICAgIGJhbmsgKz0gKE1ESU9fUkVHX0JBTktfUlgxLU1ESU9fUkVHX0JBTktfUlgwKSwgaSsrKSB7CisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBiYW5rLAorCQkJCQkgICAgICBNRElPX1JYMF9SWF9FUV9CT09TVCwKKwkJCQkJICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ19yeFtpXSk7CisJfQorCisJZm9yIChiYW5rID0gTURJT19SRUdfQkFOS19UWDAsIGkgPSAwOyBiYW5rIDw9IE1ESU9fUkVHX0JBTktfVFgzOworCQkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1RYMSAtIE1ESU9fUkVHX0JBTktfVFgwKSwgaSsrKSB7CisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBiYW5rLAorCQkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsCisJCQkJCSAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbaV0pOworCX0KK30KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9waHkoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCiAJCQkJc3RydWN0IGxpbmtfdmFycyAqdmFycykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwogCWlmICghKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9TR01JSV9GTEFHKSkgewotCQl1MTYgYmFuaywgcnhfZXE7Ci0KLQkJcnhfZXEgPSAoKHBhcmFtcy0+c2VyZGVzX2NvbmZpZyAmCi0JCQkgIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX01BU0spID4+Ci0JCQkgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfU0hJRlQpOwotCi0JCURQKE5FVElGX01TR19MSU5LLCAic2V0dGluZyByeCBlcSB0byAweCV4XG4iLCByeF9lcSk7Ci0JCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfUlgwOyBiYW5rIDw9IE1ESU9fUkVHX0JBTktfUlhfQUxMOwotCQkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1JYMS1NRElPX1JFR19CQU5LX1JYMCkpIHsKLQkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwb3J0LAotCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCQkgICAgICBiYW5rICwKLQkJCQkJICAgICAgTURJT19SWDBfUlhfRVFfQk9PU1QsCi0JCQkJCSAgICAgICgocnhfZXEgJgotCQkJCU1ESU9fUlgwX1JYX0VRX0JPT1NUX0VRVUFMSVpFUl9DVFJMX01BU0spIHwKLQkJCQlNRElPX1JYMF9SWF9FUV9CT09TVF9PRkZTRVRfQ1RSTCkpOwotCQl9CisJCWlmICgoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCisJCSAgICAocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpCisJCQlibngyeF9zZXRfcHJlZW1waGFzaXMocGFyYW1zKTsKIAogCQkvKiBmb3JjZWQgc3BlZWQgcmVxdWVzdGVkPyAqLwogCQlpZiAodmFycy0+bGluZV9zcGVlZCAhPSBTUEVFRF9BVVRPX05FRykgewpAQCAtMjUwNiwxMiArMzAzMiw1MyBAQAogCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgIE1ESU9fV0lTX0RFVkFELAogCQkJCSAgICAgICBNRElPX1dJU19SRUdfTEFTSV9DTlRMLCAweDEpOworCisJCQkvKiBCQ004NzA1IGRvZXNuJ3QgaGF2ZSBtaWNyb2NvZGUsIGhlbmNlIHRoZSAwICovCisJCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UsIDApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDZcbiIpOwotCi0JCQltc2xlZXAoMTApOworCQkJLyogV2FpdCB1bnRpbCBmdyBpcyBsb2FkZWQgKi8KKwkJCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykgeworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7CisJCQkJaWYgKHZhbCkKKwkJCQkJYnJlYWs7CisJCQkJbXNsZWVwKDEwKTsKKwkJCX0KKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2IGlzIGluaXRpYWxpemVkICIKKwkJCQkiYWZ0ZXIgJWQgbXNcbiIsIGNudCk7CisJCQlpZiAoKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkgeworCQkJCXU4IGk7CisJCQkJdTE2IHJlZzsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJCXJlZyA9IE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDAgKworCQkJCQkJaSooTURJT19YU184NzA2X1JFR19CQU5LX1JYMSAtCisJCQkJCQkgICBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwKTsKKwkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgICBNRElPX1hTX0RFVkFELAorCQkJCQkJICAgICAgcmVnLCAmdmFsKTsKKwkJCQkJLyogQ2xlYXIgZmlyc3QgMyBiaXRzIG9mIHRoZSBjb250cm9sICovCisJCQkJCXZhbCAmPSB+MHg3OworCQkJCQkvKiBTZXQgY29udHJvbCBiaXRzIGFjY29yZGluZyB0bworCQkJCQljb25maWd1YXRpb24gKi8KKwkJCQkJdmFsIHw9IChwYXJhbXMtPnhneHNfY29uZmlnX3J4W2ldICYKKwkJCQkJCTB4Nyk7CisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBSWCIKKwkJCQkJCSAiRXF1YWxpemVyIHRvIEJDTTg3MDYgcmVnIDB4JXgiCisJCQkJCQkgIiA8LS0gdmFsIDB4JXhcbiIsIHJlZywgdmFsKTsKKwkJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgICAgTURJT19YU19ERVZBRCwKKwkJCQkJCSAgICAgICByZWcsIHZhbCk7CisJCQkJfQorCQkJfQogCQkJLyogRm9yY2Ugc3BlZWQgKi8KIAkJCS8qIEZpcnN0IGVuYWJsZSBMQVNJICovCiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0yNTc4LDkgKzMxNDUsOTUgQEAKIAkJCQkJICAgICAgIDB4MTIwMCk7CiAKIAkJCX0KLQorCQkJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJZXh0X3BoeV90eXBlLAorCQkJCQkJZXh0X3BoeV9hZGRyLAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKIAkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIkluaXRpYWxpemluZyBCQ004NzI2XG4iKTsKKwkJCWJueDJ4X2JjbTg3MjZfZXh0ZXJuYWxfcm9tX2Jvb3QocGFyYW1zKTsKIAorCQkJLyogTmVlZCB0byBjYWxsIG1vZHVsZSBkZXRlY3RlZCBvbiBpbml0aWFsaXphdGlvbiBzaW5jZQorCQkJdGhlIG1vZHVsZSBkZXRlY3Rpb24gdHJpZ2dlcmVkIGJ5IGFjdHVhbCBtb2R1bGUKKwkJCWluc2VydGlvbiBtaWdodCBvY2N1ciBiZWZvcmUgZHJpdmVyIGlzIGxvYWRlZCwgYW5kIHdoZW4KKwkJCWRyaXZlciBpcyBsb2FkZWQsIGl0IHJlc2V0IGFsbCByZWdpc3RlcnMsIGluY2x1ZGluZyB0aGUKKwkJCXRyYW5zbWl0dGVyICovCisJCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOworCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBmb3JjZVxuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4NDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsIDB4RCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHg1KTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkJICAgICAgIDB4NDAwKTsKKwkJCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KKwkJCQkgICAgU1BFRURfQVVUT19ORUcpICYmCisJCQkJICAgKChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBjbGF1c2UzNyBcbiIpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQURWLCAweDIwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQ0w3MywgMHgwNDBjKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfRkNfTEQsIDB4MDAyMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0FOLCAweDEwMDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgxMjAwKTsKKworCQkJCS8qIEVuYWJsZSBSWC1BTEFSTSBjb250cm9sIHRvIHJlY2VpdmUKKwkJCQlpbnRlcnJ1cHQgZm9yIDFHIHNwZWVkIGNoYW5nZSAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4NCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCSAgICAgICAweDQwMCk7CisKKwkJCX0gZWxzZSB7IC8qIERlZmF1bHQgMTBHLiBTZXQgb25seSBMQVNJIGNvbnRyb2wgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAxKTsKKwkJCX0KKworCQkJLyogU2V0IFRYIFByZUVtcGhhc2lzIGlmIG5lZWRlZCAqLworCQkJaWYgKChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgVFhfQ1RSTDEgMHgleCwiCisJCQkJCSAiVFhfQ1RSTDIgMHgleFxuIiwKKwkJCQkJIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0sCisJCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzFdKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwxLAorCQkJCQkgICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFswXSk7CisKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwyLAorCQkJCQkgICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCXsKQEAgLTI2MjcsNyArMzI4MCw3IEBACiAJCQkJICAgICAgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAweGNhMTMsCisJCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCiAJCQkJICAgICAgJnRtcDEpOwogCiAJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTI2OTQsNyArMzM0Nyw3IEBACiAJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAweDgzMjksICZ0bXAxKTsKKwkJCQkJICAgICAgTURJT19BTl9SRUdfODA3M18yXzVHLCAmdG1wMSk7CiAKIAkJCQlpZiAoKChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKIAkJCQkgICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpICYmCkBAIC0yNzA4LDcgKzMzNjEsNyBAQAogCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCQkJIGV4dF9waHlfYWRkciwKIAkJCQkJIE1ESU9fUE1BX0RFVkFELAotCQkJCQkgMHhjODAxLCAmcGh5X3Zlcik7CisJCQkJCSBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnBoeV92ZXIpOwogCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkZCAyLjVHXG4iKTsKIAkJCQkJaWYgKHBoeV92ZXIgPiAwKQogCQkJCQkJdG1wMSB8PSAxOwpAQCAtMjcyMyw3ICszMzc2LDcgQEAKIAkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgICAweDgzMjksIHRtcDEpOworCQkJCQkgICAgICAgTURJT19BTl9SRUdfODA3M18yXzVHLCB0bXAxKTsKIAkJCX0KIAogCQkJLyogQWRkIHN1cHBvcnQgZm9yIENMMzcgKHBhc3NpdmUgbW9kZSkgSUkgKi8KQEAgLTI3OTgsNiArMzQ1MSw4IEBACiAJCQlicmVhazsKIAkJfQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCXsKKwkJCXUxNiBmd192ZXIxLCBmd192ZXIyOwogCQkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkJIlNldHRpbmcgdGhlIFNGWDcxMDEgTEFTSSBpbmRpY2F0aW9uXG4iKTsKIApAQCAtMjgyNyw2ICszNDgyLDUwIEBACiAJCQkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKIAkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgdmFsKTsKKworCQkJLyogU2F2ZSBzcGlyb20gdmVyc2lvbiAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR183MTAxX1ZFUjEsICZmd192ZXIxKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR183MTAxX1ZFUjIsICZmd192ZXIyKTsKKworCQkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihwYXJhbXMtPmJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UsCisJCQkJCQkodTMyKShmd192ZXIxPDwxNiB8IGZ3X3ZlcjIpKTsKKworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJIlNldHRpbmcgdGhlIEJDTTg0ODEgTEFTSSBjb250cm9sXG4iKTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4MSk7CisKKwkJCS8qIFJlc3RhcnQgYXV0b25lZyAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgIE1ESU9fQU5fUkVHX0NUUkwsICZ2YWwpOworCQkJdmFsIHw9IDB4MjAwOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgdmFsKTsKKworCQkJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJZXh0X3BoeV90eXBlLAorCQkJCQkJZXh0X3BoeV9hZGRyLAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKKwogCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKIAkJCURQKE5FVElGX01TR19MSU5LLApAQCAtMjkxMCwzOCArMzYwOSw0MyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDZcbiIpOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNi84NzI2XG4iKTsKKwkJCS8qIENsZWFyIFJYIEFsYXJtKi8KIAkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOworCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfUlhfQUxBUk0sCisJCQkJICAgICAgJnZhbDIpOworCQkJLyogY2xlYXIgTEFTSSBpbmRpY2F0aW9uKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsCisJCQkJICAgICAgJnZhbDEpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywKKwkJCQkgICAgICAmdmFsMik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYvODcyNiBMQVNJIHN0YXR1cyAweCV4LS0+IgorCQkJCSAgICAgIjB4JXhcbiIsIHZhbDEsIHZhbDIpOwogCiAJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX1NELAorCQkJCSAgICAgICZyeF9zZCk7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BDU19ERVZBRCwgTURJT19QQ1NfUkVHX1NUQVRVUywKKwkJCQkgICAgICAmcGNzX3N0YXR1cyk7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELCBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkgICAgICAmdmFsMik7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX0FOX0RFVkFELCBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkgICAgICAmdmFsMik7CiAKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9TRCwgJnJ4X3NkKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUENTX1JFR19TVEFUVVMsICZwY3Nfc3RhdHVzKTsKLQotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywgJnZhbDIpOwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywgJnZhbDIpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgcnhfc2QgMHgleCIKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNi84NzI2IHJ4X3NkIDB4JXgiCiAJCQkgICAiICBwY3Nfc3RhdHVzIDB4JXggMUdicHMgbGlua19zdGF0dXMgMHgleFxuIiwKIAkJCSAgIHJ4X3NkLCBwY3Nfc3RhdHVzLCB2YWwyKTsKIAkJCS8qIGxpbmsgaXMgdXAgaWYgYm90aCBiaXQgMCBvZiBwbWRfcnhfc2QgYW5kCkBAIC0yOTUxLDE5ICszNjU1LDMxIEBACiAJCQlleHRfcGh5X2xpbmtfdXAgPSAoKHJ4X3NkICYgcGNzX3N0YXR1cyAmIDB4MSkgfHwKIAkJCQkJICAgKHZhbDIgJiAoMTw8MSkpKTsKIAkJCWlmIChleHRfcGh5X2xpbmtfdXApIHsKKwkJCQlpZiAoZXh0X3BoeV90eXBlID09CisJCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB7CisJCQkJCS8qIElmIHRyYW5zbWl0dGVyIGlzIGRpc2FibGVkLAorCQkJCQlpZ25vcmUgZmFsc2UgbGluayB1cCBpbmRpY2F0aW9uICovCisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCQkJCQkgICAmdmFsMSk7CisJCQkJCWlmICh2YWwxICYgKDE8PDE1KSkgeworCQkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJUeCBpcyAiCisJCQkJCQkJICAgICJkaXNhYmxlZFxuIik7CisJCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKIAkJCQlpZiAodmFsMiAmICgxPDwxKSkKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CiAJCQkJZWxzZQogCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCQl9CiAKLQkJCS8qIGNsZWFyIExBU0kgaW5kaWNhdGlvbiovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZ2YWwyKTsKIAkJCWJyZWFrOwotCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQl7CkBAIC0zMDE4LDcgKzM3MzQsNyBAQAogCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgMHhjYTEzLAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLAogCQkJCSAgICAgICZ2YWwxKTsKIAogCQkJLyogQ2hlY2sgdGhlIExBU0kgKi8KQEAgLTMwNjMsMTcgKzM3NzksMTcgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJCSAgICAgIDB4ODMwNCwKLQkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CiAKIAkJCQkvKiBDaGVjayB0aGUgbGluayBzdGF0dXMgb24gMS4xLjIgKi8KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTMwOTAsNyArMzgwNiw3IEBACiAJCQkJCSAgICAgImFuX2xpbmtfc3RhdHVzPTB4JXhcbiIsCiAJCQkJCSAgdmFsMiwgdmFsMSwgYW4xMDAwX3N0YXR1cyk7CiAKLQkJCQkJZXh0X3BoeV9saW5rX3VwID0gKCgodmFsMSAmIDQpID09IDQpIHx8CisJCQkJZXh0X3BoeV9saW5rX3VwID0gKCgodmFsMSAmIDQpID09IDQpIHx8CiAJCQkJCQkoYW4xMDAwX3N0YXR1cyAmICgxPDwxKSkpOwogCQkJCWlmIChleHRfcGh5X2xpbmtfdXAgJiYKIAkJCQkgICAgYm54MnhfODA3M19pc19zbnJfbmVlZGVkKHBhcmFtcykpIHsKQEAgLTMxMTgsMTEgKzM4MzQsMTEgQEAKIAogCQkJCX0KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCQkJICAgICAgMHhjODIwLAotCQkJCQkJICAgICAgJmxpbmtfc3RhdHVzKTsKKwkJCQkJICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUywKKwkJCQkJICAgJmxpbmtfc3RhdHVzKTsKIAogCQkJCS8qIEJpdHMgMC4uMiAtLT4gc3BlZWQgZGV0ZWN0ZWQsCiAJCQkJICAgYml0cyAxMy4uMTUtLT4gbGluayBpcyBkb3duICovCkBAIC0zMTU2LDE3ICszODcyLDE3IEBACiAJCQl9IGVsc2UgewogCQkJCS8qIFNlZSBpZiAxRyBsaW5rIGlzIHVwIGZvciB0aGUgODA3MiAqLwogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJCSAgICAgIDB4ODMwNCwKLQkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkJICAgICAgMHg4MzA0LAotCQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKIAkJCQlpZiAoYW4xMDAwX3N0YXR1cyAmICgxPDwxKSkgewogCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOwogCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKQEAgLTMyMjYsNyArMzk0Miw1MyBAQAogCQkJCQkgKHZhbDIgJiAoMTw8MTQpKSk7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQkJLyogQ2xlYXIgTEFTSSBpbnRlcnJ1cHQgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjg0ODEgTEFTSSBzdGF0dXMgcmVnID0gMHgleFxuIiwKKwkJCQkgdmFsMSk7CiAKKwkJCS8qIENoZWNrIDEwRy1CYXNlVCBsaW5rIHN0YXR1cyAqLworCQkJLyogQ2hlY2sgR2xvYmFsIFBNRCBzaWduYWwgb2sgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfUlhfU0QsCisJCQkJICAgICAgJnJ4X3NkKTsKKwkJCS8qIENoZWNrIFBDUyBibG9jayBsb2NrICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BDU19ERVZBRCwgTURJT19QQ1NfUkVHX1NUQVRVUywKKwkJCQkgICAgICAmcGNzX3N0YXR1cyk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjg0ODEgMS5hID0gMHgleCwgMS4yMCA9IDB4JXhcbiIsCisJCQkJIHJ4X3NkLCBwY3Nfc3RhdHVzKTsKKwkJCWlmIChyeF9zZCAmIHBjc19zdGF0dXMgJiAweDEpIHsKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCX0gZWxzZSB7CisKKwkJCQkvKiBDaGVjayAxMDAwLUJhc2VUIGxpbmsgc3RhdHVzICovCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELCAweEZGRTEsCisJCQkJCSAgICAgICZ2YWwxKTsKKworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwgMHhGRkUxLAorCQkJCQkgICAgICAmdmFsMik7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIDcuRkZFMSA9IgorCQkJCQkgICAgICIweCV4LS0+MHgleFxuIiwgdmFsMSwgdmFsMik7CisJCQkJaWYgKHZhbDIgJiAoMTw8MikpIHsKKwkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJfQorCQkJfQorCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURQKE5FVElGX01TR19MSU5LLCAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKIAkJCSAgIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwpAQCAtMzQyNiw3ICs0MTg4LDcgQEAKIAkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkJICAgICAgTURJT19QTUFfUkVHX0NUUkwsCi0JCQkgICAgICAgJmN0cmwpOworCQkJICAgICAgJmN0cmwpOwogCQlpZiAoIShjdHJsICYgKDE8PDE1KSkpIHsKIAkJCURQKE5FVElGX01TR19MSU5LLCAiUmVzZXQgY29tcGxldGVkXG5cbiIpOwogCQkJCWJyZWFrOwpAQCAtMzQ1Miw5MSArNDIxNCwzOSBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUzMiBleHRfcGh5X3R5cGUgPSAwOwotCXUxNiB2YWwgPSAwOwotCXU4IGV4dF9waHlfYWRkciA9IDAgOworCXUzMiBzcGlyb21fdmVyID0gMDsKIAl1OCBzdGF0dXMgPSAwIDsKLQl1MzIgdmVyX251bTsKIAogCWlmICh2ZXJzaW9uID09IE5VTEwgfHwgcGFyYW1zID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJc3Bpcm9tX3ZlciA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKKwkJICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKKwkJCSAgICBwb3J0X21iW3BhcmFtcy0+cG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSk7CisKIAkvKiByZXNldCB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gemVybyAqLwogCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7Ci0KIAlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAogCQlpZiAobGVuIDwgNSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFRha2UgZXh0IHBoeSBvdXQgb2YgcmVzZXQgKi8KLQkJaWYgKCFkcml2ZXJfbG9hZGVkKQotCQkJYm54MnhfdHVybl9vbl9lZihicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJLyogIHdhaXQgZm9yIDFtcyAqLwotCQltc2xlZXAoMSk7Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR183MTAxX1ZFUjEsICZ2YWwpOwotCQl2ZXJzaW9uWzJdID0gKHZhbCAmIDB4RkYpOwotCQl2ZXJzaW9uWzNdID0gKCh2YWwgJiAweEZGMDApPj44KTsKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfNzEwMV9WRVIyLAotCQkJICAgICAgJnZhbCk7Ci0JCXZlcnNpb25bMF0gPSAodmFsICYgMHhGRik7Ci0JCXZlcnNpb25bMV0gPSAoKHZhbCAmIDB4RkYwMCk+PjgpOworCQl2ZXJzaW9uWzBdID0gKHNwaXJvbV92ZXIgJiAweEZGKTsKKwkJdmVyc2lvblsxXSA9IChzcGlyb21fdmVyICYgMHhGRjAwKSA+PiA4OworCQl2ZXJzaW9uWzJdID0gKHNwaXJvbV92ZXIgJiAweEZGMDAwMCkgPj4gMTY7CisJCXZlcnNpb25bM10gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMDAwMDApID4+IDI0OwogCQl2ZXJzaW9uWzRdID0gJ1wwJzsKIAotCQlpZiAoIWRyaXZlcl9sb2FkZWQpCi0JCQlibngyeF90dXJuX29mZl9zZihicCwgcGFyYW1zLT5wb3J0KTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQl7Ci0JCS8qIFRha2UgZXh0IHBoeSBvdXQgb2YgcmVzZXQgKi8KLQkJaWYgKCFkcml2ZXJfbG9hZGVkKQotCQkJYm54MnhfdHVybl9vbl9lZihicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmdmFsKTsKLQkJdmVyX251bSA9IHZhbDw8MTY7Ci0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJnZhbCk7Ci0JCXZlcl9udW0gfD0gdmFsOwotCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHZlcl9udW0sIHZlcnNpb24sIGxlbik7Ci0JCWJyZWFrOwotCX0KIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7Ci0JCXZlcl9udW0gPSB2YWw8PDE2OwotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOwotCQl2ZXJfbnVtIHw9IHZhbDsKLQkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3Zlcih2ZXJfbnVtLCB2ZXJzaW9uLCBsZW4pOworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIoc3Bpcm9tX3ZlciwgdmVyc2lvbiwgbGVuKTsKIAkJYnJlYWs7Ci0KIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKIAkJYnJlYWs7CiAKQEAgLTM2MzYsNiArNDM0NiwxNCBAQAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CiAJCQlEUChORVRJRl9NU0dfTElOSywgImV4dF9waHlfbG9vcGJhY2s6IDg3MDZcbiIpOwogCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiUE1BL1BNRCBleHRfcGh5X2xvb3BiYWNrOiA4NzI2XG4iKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkgICAgICAgMHgwMDAxKTsKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQkvKiBTRlg3MTAxX1hHWFNfVEVTVDEgKi8KIAkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLApAQCAtMzkwNiwxMSArNDYyNCwxMyBAQAogCiAJLyogaW5pdCBleHQgcGh5IGFuZCBlbmFibGUgbGluayBzdGF0ZSBpbnQgKi8KIAlub25fZXh0X3BoeSA9ICgoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgfHwKLQkJICAgICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkgfHwKLQkJICAgICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpOworCQkgICAgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSk7CiAKIAlpZiAobm9uX2V4dF9waHkgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSkgeworCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CisJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSB8fAorCSAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKSB7CiAJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQogCQkJYm54Mnhfc2V0X3BhcmFsbGVsX2RldGVjdGlvbihwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7CiAJCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycyk7CkBAIC00MTA0LDYgKzQ4MjQsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQorCQlEUChORVRJRl9NU0dfTElOSywgIlBoeSBhZGRyZXNzID0gMHgleFxuIiwgcGFyYW1zLT5waHlfYWRkcik7CiAKIAkJYm54MnhfbGlua19pbml0aWFsaXplKHBhcmFtcywgdmFycyk7CiAJCW1zbGVlcCgzMCk7CkBAIC00MTEyLDcgKzQ4MzMsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotdTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycykKK3N0YXRpYyB2b2lkIGJueDJ4Xzg3MjZfcmVzZXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IGV4dF9waHlfYWRkcikKK3sKKwlEUChORVRJRl9NU0dfTElOSywgImJueDJ4Xzg3MjZfcmVzZXRfcGh5IHBvcnQgJWRcbiIsIHBvcnQpOworCisJLyogU2V0IHNlcmlhbCBib290IGNvbnRyb2wgZm9yIGV4dGVybmFsIGxvYWQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsIDB4MDAwMSk7CisKKwkvKiBEaXNhYmxlIFRyYW5zbWl0dGVyICovCisJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBvcnQsIGV4dF9waHlfYWRkciwgMCk7CisKK30KKwordTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJICB1OCByZXNldF9leHRfcGh5KQogewogCiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CkBAIC00MTUwLDI4ICs0ODg3LDM3IEBACiAJICovCiAJIC8qIGNsZWFyIGxpbmsgbGVkICovCiAJYm54Mnhfc2V0X2xlZChicCwgcG9ydCwgTEVEX01PREVfT0ZGLCAwLCBod19sZWRfbW9kZSwgY2hpcF9pZCk7Ci0JaWYgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHsKLQkJaWYgKChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgJiYKLQkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpIHsKLQkJCS8qIEhXIHJlc2V0ICovCi0KLQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCi0JCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAotCQkJCQkgIHBvcnQpOwotCisJaWYgKHJlc2V0X2V4dF9waHkpIHsKKwkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgODA3MyBwb3J0ICVkIGludG8gIgorCQkJCSAibG93IHBvd2VyIG1vZGVcbiIsCisJCQkJIHBvcnQpOwogCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKIAkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCiAJCQkJCSAgcG9ydCk7Ci0KKwkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCXsKKwkJCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQkJLyogU2V0IHNvZnQgcmVzZXQgKi8KKwkJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfYWRkcik7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAorCQkJCQkgIHBvcnQpOworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCisJCQkJCSAgcG9ydCk7CiAJCQlEUChORVRJRl9NU0dfTElOSywgInJlc2V0IGV4dGVybmFsIFBIWVxuIik7Ci0JCX0gZWxzZSBpZiAoZXh0X3BoeV90eXBlID09Ci0JCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSB7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDgwNzMgcG9ydCAlZCBpbnRvICIKLQkJCQkJICJsb3cgcG93ZXIgbW9kZVxuIiwKLQkJCQkJIHBvcnQpOwotCQkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCi0JCQkJCU1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKLQkJCQkJCSAgcG9ydCk7CiAJCX0KIAl9CiAJLyogcmVzZXQgdGhlIFNlckRlcy9YR1hTICovCkBAIC00MjQ4LDcgKzQ5OTQsNyBAQAogCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7CiAJCQlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJgogCQkJICAgICAgUEhZX1NHTUlJX0ZMQUcpKQotCQkJCWJueDJ4X3NldF9zZ21paV90eF9kcml2ZXIocGFyYW1zKTsKKwkJCQlibngyeF9zZXRfZ21paV90eF9kcml2ZXIocGFyYW1zKTsKIAkJfQogCX0KIApAQCAtNDMzNyw2ICs1MDgzLDcgQEAKIAogCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgogCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpICYmCisJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgJiYKIAkgICAgKGV4dF9waHlfbGlua191cCAmJiAhdmFycy0+cGh5X2xpbmtfdXApKQogCQlibngyeF9pbml0X2ludGVybmFsX3BoeShwYXJhbXMsIHZhcnMpOwogCkBAIC00Mzk4LDcgKzUxNDUsNyBAQAogCQl1MTYgZndfdmVyMTsKIAogCQlibngyeF9iY204MDczX2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdKTsKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLCBzaG1lbV9iYXNlKTsKIAogCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCkBAIC00NDM0LDcgKzUxODEsNyBAQAogCiAJLyogUEFSVDMgLSBjb21wbGV0ZSBUWF9QT1dFUl9ET1dOIHByb2Nlc3MsIGFuZCBzZXQgR1BJTzIgYmFjayB0byBsb3cgKi8KIAlmb3IgKHBvcnQgPSBQT1JUX01BWCAtIDE7IHBvcnQgPj0gUE9SVF8wOyBwb3J0LS0pIHsKLQkJLyogUGhhc2UyIG9mIFBPV0VSX0RPV05fUkVTRVQqLworCQkvKiBQaGFzZTIgb2YgUE9XRVJfRE9XTl9SRVNFVCAqLwogCQkvKiBSZWxlYXNlIGJpdCAxMCAoUmVsZWFzZSBUeCBwb3dlciBkb3duKSAqLwogCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCiAJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLApAQCAtNDQ2OSwxMiArNTIxNiw1MSBAQAogCiB9CiAKKworc3RhdGljIHU4IGJueDJ4Xzg3MjZfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQoreworCXU4IGV4dF9waHlfYWRkcjsKKwl1MzIgdmFsOworCXM4IHBvcnQ7CisJLyogVXNlIHBvcnQxIGJlY2F1c2Ugb2YgdGhlIHN0YXRpYyBwb3J0LXN3YXAgKi8KKwkvKiBFbmFibGUgdGhlIG1vZHVsZSBkZXRlY3Rpb24gaW50ZXJydXB0ICovCisJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOKTsKKwl2YWwgfD0gKCgxPDxNSVNDX1JFR0lTVEVSU19HUElPXzMpfAorCQkoMTw8KE1JU0NfUkVHSVNURVJTX0dQSU9fMyArIE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCkpKTsKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0dQSU9fRVZFTlRfRU4sIHZhbCk7CisKKwlibngyeF9od19yZXNldChicCwgMSk7CisJbXNsZWVwKDUpOworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBQT1JUX01BWDsgcG9ydCsrKSB7CisJCS8qIEV4dHJhY3QgdGhlIGV4dCBwaHkgYWRkcmVzcyBmb3IgdGhlIHBvcnQgKi8KKwkJdTMyIGV4dF9waHlfY29uZmlnID0gUkVHX1JEKGJwLCBzaG1lbV9iYXNlICsKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKKwkJCWRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcpKTsKKworCQlleHRfcGh5X2FkZHIgPQorCQkJKChleHRfcGh5X2NvbmZpZyAmCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQlEUChORVRJRl9NU0dfTElOSywgIjg3MjZfY29tbW9uX2luaXQgOiBleHRfcGh5X2FkZHIgPSAweCV4XG4iLAorCQkJIGV4dF9waHlfYWRkcik7CisKKwkJYm54MnhfODcyNl9yZXNldF9waHkoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7CisKKwkJLyogU2V0IGZhdWx0IG1vZHVsZSBkZXRlY3RlZCBMRUQgb24gKi8KKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKKwkJCQkgIHBvcnQpOworCX0KKworCXJldHVybiAwOworfQorCiB1OCBibngyeF9jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCiB7CiAJdTggcmMgPSAwOwogCXUzMiBleHRfcGh5X3R5cGU7CiAKLQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X2NvbW1vbl9pbml0X3BoeVxuIik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJCZWdpbiBjb21tb24gcGh5IGluaXRcbiIpOwogCiAJLyogUmVhZCB0aGUgZXh0X3BoeV90eXBlIGZvciBhcmJpdHJhcnkgcG9ydCgwKSAqLwogCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKApAQCAtNDQ4OCw2ICs1Mjc0LDEyIEBACiAJCXJjID0gYm54MnhfODA3M19jb21tb25faW5pdF9waHkoYnAsIHNobWVtX2Jhc2UpOwogCQlicmVhazsKIAl9CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkvKiBHUElPMSBhZmZlY3RzIGJvdGggcG9ydHMsIHNvIHRoZXJlJ3MgbmVlZCB0byBwdWxsCisJCWl0IGZvciBzaW5nbGUgcG9ydCBhbG9uZSAqLworCQlyYyA9IGJueDJ4Xzg3MjZfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKKworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUChORVRJRl9NU0dfTElOSywKIAkJCSAiYm54MnhfY29tbW9uX2luaXRfcGh5OiBleHRfcGh5IDB4JXggbm90IHJlcXVpcmVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5oIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCmluZGV4IDQ3Y2I1ODUuLjE5YTg2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorLyogQ29weXJpZ2h0IDIwMDgtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKICAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CkBAIC02Niw4ICs2Niw2IEBACiAJLyogRGV2aWNlIHBhcmFtZXRlcnMgKi8KIAl1OCBtYWNfYWRkcls2XTsKIAotCi0KIAkvKiBzaG1lbSBwYXJhbWV0ZXJzICovCiAJdTMyIHNobWVtX2Jhc2U7CiAJdTMyIHNwZWVkX2NhcF9tYXNrOwpAQCAtNzcsNyArNzUsNiBAQAogI2RlZmluZSBTV0lUQ0hfQ0ZHX0FVVE9fREVURUNUCVBPUlRfRkVBVFVSRV9DT05fU1dJVENIX0FVVE9fREVURUNUCiAKIAl1MTYgaHdfbGVkX21vZGU7IC8qIHBhcnQgb2YgdGhlIGh3X2NvbmZpZyByZWFkIGZyb20gdGhlIHNobWVtICovCi0JdTMyIHNlcmRlc19jb25maWc7CiAJdTMyIGxhbmVfY29uZmlnOwogCXUzMiBleHRfcGh5X2NvbmZpZzsKICNkZWZpbmUgWEdYU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpCShleHRfcGh5X2NvbmZpZyAmIFwKQEAgLTg5LDYgKzg2LDEyIEBACiAKIAkvKiBwaHlfYWRkciBwb3B1bGF0ZWQgYnkgdGhlIENMQyAqLwogCXU4IHBoeV9hZGRyOworCXUxNiB4Z3hzX2NvbmZpZ19yeFs0XTsgLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgcnggc2lkZSAqLworCisJdTE2IHhneHNfY29uZmlnX3R4WzRdOyAvKiBwcmVlbXBoYXNpcyB2YWx1ZXMgZm9yIHRoZSB0eCBzaWRlICovCisJdTMyIGZlYXR1cmVfY29uZmlnX2ZsYWdzOworI2RlZmluZSBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEICgxPDwwKQorI2RlZmluZSBGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVECSgyPDwwKQogCS8qIERldmljZSBwb2ludGVyIHBhc3NlZCB0byBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAJc3RydWN0IGJueDJ4ICpicDsKIH07CkBAIC0xMjUsOCArMTI4LDExIEBACiAvKiBJbml0aWFsaXplIHRoZSBwaHkgKi8KIHU4IGJueDJ4X3BoeV9pbml0KHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKm91dHB1dCk7CiAKLS8qIFJlc2V0IHRoZSBsaW5rLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZHJpdmVyIG9yIGludGVyZmFjZSBnb2VzIGRvd24gKi8KLXU4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpOworLyogUmVzZXQgdGhlIGxpbmsuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiBkcml2ZXIgb3IgaW50ZXJmYWNlIGdvZXMgZG93bgorICAgQmVmb3JlIGNhbGxpbmcgcGh5IGZpcm13YXJlIHVwZ3JhZGUsIHRoZSByZXNldF9leHRfcGh5IHNob3VsZCBiZSBzZXQKKyAgIHRvIDAgKi8KK3U4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCSAgdTggcmVzZXRfZXh0X3BoeSk7CiAKIC8qIGJueDJ4X2xpbmtfdXBkYXRlIHNob3VsZCBiZSBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLwogdTggYm54MnhfbGlua191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICppbnB1dCwgc3RydWN0IGxpbmtfdmFycyAqb3V0cHV0KTsKQEAgLTE2Myw2ICsxNjksMTAgQEAKIAogdTggYm54MnhfZmxhc2hfZG93bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGV4dF9waHlfY29uZmlnLAogCQkgICAgICB1OCBkcml2ZXJfbG9hZGVkLCBjaGFyIGRhdGFbXSwgdTMyIHNpemUpOworLyogYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50IHNob3VsZCBiZSBjYWxsZWQgdXBvbiBtb2R1bGUgZGV0ZWN0aW9uCisgICBpbnRlcnJ1cHQgKi8KK3ZvaWQgYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKTsKKwogLyogR2V0IHRoZSBhY3R1YWwgbGluayBzdGF0dXMuIEluIGNhc2UgaXQgcmV0dXJucyAwLCBsaW5rIGlzIHVwLAogCW90aGVyd2lzZSBsaW5rIGlzIGRvd24qLwogdTggYm54MnhfdGVzdF9saW5rKHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpOwpAQCAtMTcwLDQgKzE4MCw1IEBACiAvKiBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBmb3IgZXh0ZXJuYWwgcGh5IGFmdGVyIHBvd2VyIHVwICovCiB1OCBibngyeF9jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpOwogCisKICNlbmRpZiAvKiBCTlgyWF9MSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwppbmRleCAyZTM0NmE1Li4wMGE3OGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCkBAIC01MCwxNSArNTAsMTMgQEAKICNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgImJueDJ4X3JlZy5oIgotI2luY2x1ZGUgImJueDJ4X2Z3X2RlZnMuaCIKLSNpbmNsdWRlICJibngyeF9oc2kuaCIKLSNpbmNsdWRlICJibngyeF9saW5rLmgiCisKICNpbmNsdWRlICJibngyeC5oIgogI2luY2x1ZGUgImJueDJ4X2luaXQuaCIKKyNpbmNsdWRlICJibngyeF9kdW1wLmgiCiAKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjQ1LjI3IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMDEvMjYiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40OC4xMDUiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMjAwOS8wMy8wMiIKICNkZWZpbmUgQk5YMlhfQkNfVkVSCQkweDA0MDIwMAogCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcgKi8KQEAgLTczLDI2ICs3MSwzMiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKIAorc3RhdGljIGludCBtdWx0aV9tb2RlID0gMTsKK21vZHVsZV9wYXJhbShtdWx0aV9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtdWx0aV9tb2RlLCAiIFVzZSBwZXItQ1BVIHF1ZXVlcyIpOworCiBzdGF0aWMgaW50IGRpc2FibGVfdHBhOwotc3RhdGljIGludCB1c2VfaW50YTsKLXN0YXRpYyBpbnQgcG9sbDsKLXN0YXRpYyBpbnQgZGVidWc7Ci1zdGF0aWMgaW50IGxvYWRfY291bnRbM107IC8qIDAtY29tbW9uLCAxLXBvcnQwLCAyLXBvcnQxICovCi1zdGF0aWMgaW50IHVzZV9tdWx0aTsKLQogbW9kdWxlX3BhcmFtKGRpc2FibGVfdHBhLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHVzZV9pbnRhLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBvbGwsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfdHBhLCAiZGlzYWJsZSB0aGUgVFBBIChMUk8pIGZlYXR1cmUiKTsKLU1PRFVMRV9QQVJNX0RFU0ModXNlX2ludGEsICJ1c2UgSU5UI0EgaW5zdGVhZCBvZiBNU0ktWCIpOwotTU9EVUxFX1BBUk1fREVTQyhwb2xsLCAidXNlIHBvbGxpbmcgKGZvciBkZWJ1ZykiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWZhdWx0IGRlYnVnIG1zZ2xldmVsIik7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfdHBhLCAiIERpc2FibGUgdGhlIFRQQSAoTFJPKSBmZWF0dXJlIik7CiAKLSNpZmRlZiBCTlgyWF9NVUxUSQotbW9kdWxlX3BhcmFtKHVzZV9tdWx0aSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModXNlX211bHRpLCAidXNlIHBlci1DUFUgcXVldWVzIik7Ci0jZW5kaWYKK3N0YXRpYyBpbnQgaW50X21vZGU7Cittb2R1bGVfcGFyYW0oaW50X21vZGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGludF9tb2RlLCAiIEZvcmNlIGludGVycnVwdCBtb2RlICgxIElOVCN4OyAyIE1TSSkiKTsKKworc3RhdGljIGludCBwb2xsOworbW9kdWxlX3BhcmFtKHBvbGwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvbGwsICIgVXNlIHBvbGxpbmcgKGZvciBkZWJ1ZykiKTsKKworc3RhdGljIGludCBtcnJzID0gLTE7Cittb2R1bGVfcGFyYW0obXJycywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXJycywgIiBGb3JjZSBNYXggUmVhZCBSZXEgU2l6ZSAoMC4uMykgKGZvciBkZWJ1ZykiKTsKKworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICIgRGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOworCitzdGF0aWMgaW50IGxvYWRfY291bnRbM107IC8qIDAtY29tbW9uLCAxLXBvcnQwLCAyLXBvcnQxICovCisKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYm54Mnhfd3E7CiAKIGVudW0gYm54MnhfYm9hcmRfdHlwZSB7CkBAIC0yMTMsNyArMjE3LDcgQEAKIAlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwogCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKIAotCURQKEJOWDJYX01TR19PRkYsICJkbWFlOiBvcGNvZGUgMHglMDh4XG4iCisJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKIAkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKIAkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCiAJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKQEAgLTIzNCw3ICsyMzgsNyBAQAogCQlEUChCTlgyWF9NU0dfT0ZGLCAid2JfY29tcCAweCUwOHhcbiIsICp3Yl9jb21wKTsKIAogCQlpZiAoIWNudCkgewotCQkJQk5YMlhfRVJSKCJkbWFlIHRpbWVvdXQhXG4iKTsKKwkJCUJOWDJYX0VSUigiRE1BRSB0aW1lb3V0IVxuIik7CiAJCQlicmVhazsKIAkJfQogCQljbnQtLTsKQEAgLTI4OSw3ICsyOTMsNyBAQAogCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CiAJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOwogCi0JRFAoQk5YMlhfTVNHX09GRiwgImRtYWU6IG9wY29kZSAweCUwOHhcbiIKKwlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRTogb3Bjb2RlIDB4JTA4eFxuIgogCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgogCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKIAkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLApAQCAtMzA2LDcgKzMxMCw3IEBACiAJd2hpbGUgKCp3Yl9jb21wICE9IERNQUVfQ09NUF9WQUwpIHsKIAogCQlpZiAoIWNudCkgewotCQkJQk5YMlhfRVJSKCJkbWFlIHRpbWVvdXQhXG4iKTsKKwkJCUJOWDJYX0VSUigiRE1BRSB0aW1lb3V0IVxuIik7CiAJCQlicmVhazsKIAkJfQogCQljbnQtLTsKQEAgLTQ2OCw3ICs0NzIsNyBAQAogc3RhdGljIHZvaWQgYm54MnhfZndfZHVtcChzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiBtYXJrLCBvZmZzZXQ7Ci0JdTMyIGRhdGFbOV07CisJX19iZTMyIGRhdGFbOV07CiAJaW50IHdvcmQ7CiAKIAltYXJrID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfU0NSQVRDSCArIDB4ZjEwNCk7CkBAIC01MDIsODMgKzUwNiwxMDQgQEAKIAogCUJOWDJYX0VSUigiYmVnaW4gY3Jhc2ggZHVtcCAtLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJc3RydWN0IGV0aF90eF9kYl9kYXRhICpod19wcm9kcyA9IGZwLT5od190eF9wcm9kczsKLQotCQlCTlgyWF9FUlIoInF1ZXVlWyVkXTogdHhfcGt0X3Byb2QoJXgpICB0eF9wa3RfY29ucygleCkiCi0JCQkgICIgIHR4X2JkX3Byb2QoJXgpICB0eF9iZF9jb25zKCV4KSAgKnR4X2NvbnNfc2IoJXgpXG4iLAotCQkJICBpLCBmcC0+dHhfcGt0X3Byb2QsIGZwLT50eF9wa3RfY29ucywgZnAtPnR4X2JkX3Byb2QsCi0JCQkgIGZwLT50eF9iZF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpKTsKLQkJQk5YMlhfRVJSKCIgICAgICAgICAgcnhfYmRfcHJvZCgleCkgIHJ4X2JkX2NvbnMoJXgpIgotCQkJICAiICAqcnhfYmRfY29uc19zYigleCkgIHJ4X2NvbXBfcHJvZCgleCkiCi0JCQkgICIgIHJ4X2NvbXBfY29ucygleCkgICpyeF9jb25zX3NiKCV4KVxuIiwKLQkJCSAgZnAtPnJ4X2JkX3Byb2QsIGZwLT5yeF9iZF9jb25zLAotCQkJICBsZTE2X3RvX2NwdSgqZnAtPnJ4X2JkX2NvbnNfc2IpLCBmcC0+cnhfY29tcF9wcm9kLAotCQkJICBmcC0+cnhfY29tcF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpKTsKLQkJQk5YMlhfRVJSKCIgICAgICAgICAgcnhfc2dlX3Byb2QoJXgpICBsYXN0X21heF9zZ2UoJXgpIgotCQkJICAiICBmcF9jX2lkeCgleCkgICpzYl9jX2lkeCgleCkgIGZwX3VfaWR4KCV4KSIKLQkJCSAgIiAgKnNiX3VfaWR4KCV4KSAgYmQgZGF0YSgleCwleClcbiIsCi0JCQkgIGZwLT5yeF9zZ2VfcHJvZCwgZnAtPmxhc3RfbWF4X3NnZSwgZnAtPmZwX2NfaWR4LAotCQkJICBmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAotCQkJICBmcC0+ZnBfdV9pZHgsCi0JCQkgIGZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCi0JCQkgIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsIGh3X3Byb2RzLT5iZHNfcHJvZCk7Ci0KLQkJc3RhcnQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpIC0gMTApOwotCQllbmQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpICsgMjQ1KTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigicGFja2V0WyV4XT1bJXAsJXhdXG4iLCBqLAotCQkJCSAgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKLQkJfQotCi0JCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7Ci0JCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICp0eF9iZCA9ICh1MzIgKikmZnAtPnR4X2Rlc2NfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJ0eF9iZFsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGosIHR4X2JkWzBdLCB0eF9iZFsxXSwgdHhfYmRbMl0sIHR4X2JkWzNdKTsKLQkJfQotCi0JCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqcnhfYmQgPSAodTMyICopJmZwLT5yeF9kZXNjX3Jpbmdbal07Ci0JCQlzdHJ1Y3Qgc3dfcnhfYmQgKnN3X2JkID0gJmZwLT5yeF9idWZfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJyeF9iZFsleF09WyV4OiV4XSAgc3dfYmQ9WyVwXVxuIiwKLQkJCQkgIGosIHJ4X2JkWzFdLCByeF9iZFswXSwgc3dfYmQtPnNrYik7Ci0JCX0KLQotCQlzdGFydCA9IFJYX1NHRShmcC0+cnhfc2dlX3Byb2QpOwotCQllbmQgPSBSWF9TR0UoZnAtPmxhc3RfbWF4X3NnZSk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqcnhfc2dlID0gKHUzMiAqKSZmcC0+cnhfc2dlX3Jpbmdbal07Ci0JCQlzdHJ1Y3Qgc3dfcnhfcGFnZSAqc3dfcGFnZSA9ICZmcC0+cnhfcGFnZV9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoInJ4X3NnZVsleF09WyV4OiV4XSAgc3dfcGFnZT1bJXBdXG4iLAotCQkJCSAgaiwgcnhfc2dlWzFdLCByeF9zZ2VbMF0sIHN3X3BhZ2UtPnBhZ2UpOwotCQl9Ci0KLQkJc3RhcnQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyAtIDEwKTsKLQkJZW5kID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgKyA1MDMpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKmNxZSA9ICh1MzIgKikmZnAtPnJ4X2NvbXBfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJjcWVbJXhdPVsleDoleDoleDoleF1cbiIsCi0JCQkJICBqLCBjcWVbMF0sIGNxZVsxXSwgY3FlWzJdLCBjcWVbM10pOwotCQl9Ci0JfQotCisJLyogSW5kaWNlcyAqLworCS8qIENvbW1vbiAqLwogCUJOWDJYX0VSUigiZGVmX2NfaWR4KCV1KSAgZGVmX3VfaWR4KCV1KSAgZGVmX3hfaWR4KCV1KSIKIAkJICAiICBkZWZfdF9pZHgoJXUpICBkZWZfYXR0X2lkeCgldSkgIGF0dG5fc3RhdGUoJXUpIgogCQkgICIgIHNwcV9wcm9kX2lkeCgldSlcbiIsCiAJCSAgYnAtPmRlZl9jX2lkeCwgYnAtPmRlZl91X2lkeCwgYnAtPmRlZl94X2lkeCwgYnAtPmRlZl90X2lkeCwKIAkJICBicC0+ZGVmX2F0dF9pZHgsIGJwLT5hdHRuX3N0YXRlLCBicC0+c3BxX3Byb2RfaWR4KTsKIAorCS8qIFJ4ICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJQk5YMlhfRVJSKCJmcCVkOiByeF9iZF9wcm9kKCV4KSAgcnhfYmRfY29ucygleCkiCisJCQkgICIgICpyeF9iZF9jb25zX3NiKCV4KSAgcnhfY29tcF9wcm9kKCV4KSIKKwkJCSAgIiAgcnhfY29tcF9jb25zKCV4KSAgKnJ4X2NvbnNfc2IoJXgpXG4iLAorCQkJICBpLCBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2JkX2NvbnMsCisJCQkgIGxlMTZfdG9fY3B1KCpmcC0+cnhfYmRfY29uc19zYiksIGZwLT5yeF9jb21wX3Byb2QsCisJCQkgIGZwLT5yeF9jb21wX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikpOworCQlCTlgyWF9FUlIoIiAgICAgIHJ4X3NnZV9wcm9kKCV4KSAgbGFzdF9tYXhfc2dlKCV4KSIKKwkJCSAgIiAgZnBfdV9pZHgoJXgpICpzYl91X2lkeCgleClcbiIsCisJCQkgIGZwLT5yeF9zZ2VfcHJvZCwgZnAtPmxhc3RfbWF4X3NnZSwKKwkJCSAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwKKwkJCSAgZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CisJfQorCisJLyogVHggKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKwkJc3RydWN0IGV0aF90eF9kYl9kYXRhICpod19wcm9kcyA9IGZwLT5od190eF9wcm9kczsKKworCQlCTlgyWF9FUlIoImZwJWQ6IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgorCQkJICAiICB0eF9iZF9wcm9kKCV4KSAgdHhfYmRfY29ucygleCkgICp0eF9jb25zX3NiKCV4KVxuIiwKKwkJCSAgaSwgZnAtPnR4X3BrdF9wcm9kLCBmcC0+dHhfcGt0X2NvbnMsIGZwLT50eF9iZF9wcm9kLAorCQkJICBmcC0+dHhfYmRfY29ucywgbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSk7CisJCUJOWDJYX0VSUigiICAgICAgZnBfY19pZHgoJXgpICAqc2JfY19pZHgoJXgpIgorCQkJICAiICBiZCBkYXRhKCV4LCV4KVxuIiwgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwKKwkJCSAgZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCwKKwkJCSAgaHdfcHJvZHMtPnBhY2tldHNfcHJvZCwgaHdfcHJvZHMtPmJkc19wcm9kKTsKKwl9CisKKwkvKiBSaW5ncyAqLworCS8qIFJ4ICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJc3RhcnQgPSBSWF9CRChsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpIC0gMTApOworCQllbmQgPSBSWF9CRChsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpICsgNTAzKTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gUlhfQkQoaiArIDEpKSB7CisJCQl1MzIgKnJ4X2JkID0gKHUzMiAqKSZmcC0+cnhfZGVzY19yaW5nW2pdOworCQkJc3RydWN0IHN3X3J4X2JkICpzd19iZCA9ICZmcC0+cnhfYnVmX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcnhfYmRbJXhdPVsleDoleF0gIHN3X2JkPVslcF1cbiIsCisJCQkJICBpLCBqLCByeF9iZFsxXSwgcnhfYmRbMF0sIHN3X2JkLT5za2IpOworCQl9CisKKwkJc3RhcnQgPSBSWF9TR0UoZnAtPnJ4X3NnZV9wcm9kKTsKKwkJZW5kID0gUlhfU0dFKGZwLT5sYXN0X21heF9zZ2UpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBSWF9TR0UoaiArIDEpKSB7CisJCQl1MzIgKnJ4X3NnZSA9ICh1MzIgKikmZnAtPnJ4X3NnZV9yaW5nW2pdOworCQkJc3RydWN0IHN3X3J4X3BhZ2UgKnN3X3BhZ2UgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiByeF9zZ2VbJXhdPVsleDoleF0gIHN3X3BhZ2U9WyVwXVxuIiwKKwkJCQkgIGksIGosIHJ4X3NnZVsxXSwgcnhfc2dlWzBdLCBzd19wYWdlLT5wYWdlKTsKKwkJfQorCisJCXN0YXJ0ID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgLSAxMCk7CisJCWVuZCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zICsgNTAzKTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gUkNRX0JEKGogKyAxKSkgeworCQkJdTMyICpjcWUgPSAodTMyICopJmZwLT5yeF9jb21wX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogY3FlWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAorCQkJCSAgaSwgaiwgY3FlWzBdLCBjcWVbMV0sIGNxZVsyXSwgY3FlWzNdKTsKKwkJfQorCX0KKworCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJc3RhcnQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpIC0gMTApOworCQllbmQgPSBUWF9CRChsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpICsgMjQ1KTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gVFhfQkQoaiArIDEpKSB7CisJCQlzdHJ1Y3Qgc3dfdHhfYmQgKnN3X2JkID0gJmZwLT50eF9idWZfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiBwYWNrZXRbJXhdPVslcCwleF1cbiIsCisJCQkJICBpLCBqLCBzd19iZC0+c2tiLCBzd19iZC0+Zmlyc3RfYmQpOworCQl9CisKKwkJc3RhcnQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyAtIDEwKTsKKwkJZW5kID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgKyAyNTQpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBUWF9CRChqICsgMSkpIHsKKwkJCXUzMiAqdHhfYmQgPSAodTMyICopJmZwLT50eF9kZXNjX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogdHhfYmRbJXhdPVsleDoleDoleDoleF1cbiIsCisJCQkJICBpLCBqLCB0eF9iZFswXSwgdHhfYmRbMV0sIHR4X2JkWzJdLCB0eF9iZFszXSk7CisJCX0KKwl9CisKIAlibngyeF9md19kdW1wKGJwKTsKIAlibngyeF9tY19hc3NlcnQoYnApOwogCUJOWDJYX0VSUigiZW5kIGNyYXNoIGR1bXAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAtNTkwLDM3ICs2MTUsNDQgQEAKIAl1MzIgYWRkciA9IHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzA7CiAJdTMyIHZhbCA9IFJFR19SRChicCwgYWRkcik7CiAJaW50IG1zaXggPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSA/IDEgOiAwOworCWludCBtc2kgPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpID8gMSA6IDA7CiAKIAlpZiAobXNpeCkgewotCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzA7CisJCXZhbCAmPSB+KEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAorCQkJIEhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wKTsKIAkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzApOworCX0gZWxzZSBpZiAobXNpKSB7CisJCXZhbCAmPSB+SENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzA7CisJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzAgfAorCQkJSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzApOwogCX0gZWxzZSB7CiAJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8CiAJCQlIQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzApOwogCi0JCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleCkgIE1TSS1YICVkXG4iLAotCQkgICB2YWwsIHBvcnQsIGFkZHIsIG1zaXgpOworCQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAorCQkgICB2YWwsIHBvcnQsIGFkZHIpOwogCiAJCVJFR19XUihicCwgYWRkciwgdmFsKTsKIAogCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMDsKIAl9CiAKLQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBNU0ktWCAlZFxuIiwKLQkgICB2YWwsIHBvcnQsIGFkZHIsIG1zaXgpOworCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleCkgIG1vZGUgJXNcbiIsCisJICAgdmFsLCBwb3J0LCBhZGRyLCAobXNpeCA/ICJNU0ktWCIgOiAobXNpID8gIk1TSSIgOiAiSU5UeCIpKSk7CiAKIAlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CiAJCS8qIGluaXQgbGVhZGluZy90cmFpbGluZyBlZGdlICovCiAJCWlmIChJU19FMUhNRihicCkpIHsKLQkJCXZhbCA9ICgweGZlMGYgfCAoMSA8PCAoQlBfRTFIVk4oYnApICsgNCkpKTsKKwkJCXZhbCA9ICgweGVlMGYgfCAoMSA8PCAoQlBfRTFIVk4oYnApICsgNCkpKTsKIAkJCWlmIChicC0+cG9ydC5wbWYpCi0JCQkJLyogZW5hYmxlIG5pZyBhdHRlbnRpb24gKi8KLQkJCQl2YWwgfD0gMHgwMTAwOworCQkJCS8qIGVuYWJsZSBuaWcgYW5kIGdwaW8zIGF0dGVudGlvbiAqLworCQkJCXZhbCB8PSAweDExMDA7CiAJCX0gZWxzZQogCQkJdmFsID0gMHhmZmZmOwogCkBAIC02NDMsMTUgKzY3NSwxOSBAQAogCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleClcbiIsCiAJICAgdmFsLCBwb3J0LCBhZGRyKTsKIAorCS8qIGZsdXNoIGFsbCBvdXRzdGFuZGluZyB3cml0ZXMgKi8KKwltbWlvd2IoKTsKKwogCVJFR19XUihicCwgYWRkciwgdmFsKTsKIAlpZiAoUkVHX1JEKGJwLCBhZGRyKSAhPSB2YWwpCiAJCUJOWDJYX0VSUigiQlVHISBwcm9wZXIgdmFsIG5vdCByZWFkIGZyb20gSUdVIVxuIik7CisKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW50X2Rpc2FibGVfc3luYyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZGlzYWJsZV9odykKIHsKIAlpbnQgbXNpeCA9IChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpID8gMSA6IDA7Ci0JaW50IGk7CisJaW50IGksIG9mZnNldDsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nICovCiAJYXRvbWljX2luYygmYnAtPmludHJfc2VtKTsKQEAgLTY2MSwxMSArNjk3LDEwIEBACiAKIAkvKiBtYWtlIHN1cmUgYWxsIElTUnMgYXJlIGRvbmUgKi8KIAlpZiAobXNpeCkgeworCQlzeW5jaHJvbml6ZV9pcnEoYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yKTsKKwkJb2Zmc2V0ID0gMTsKIAkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCQlzeW5jaHJvbml6ZV9pcnEoYnAtPm1zaXhfdGFibGVbaV0udmVjdG9yKTsKLQotCQkvKiBvbmUgbW9yZSBmb3IgdGhlIFNsb3cgUGF0aCBJUlEgKi8KLQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2ldLnZlY3Rvcik7CisJCQlzeW5jaHJvbml6ZV9pcnEoYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yKTsKIAl9IGVsc2UKIAkJc3luY2hyb25pemVfaXJxKGJwLT5wZGV2LT5pcnEpOwogCkBAIC03NDgsNyArNzgzLDYgQEAKIAkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgY29uc3VtZXIgYW5kIHByb2R1Y2VyIGNhbiBjaGFuZ2UgKi8KIAliYXJyaWVyKCk7CiAJcmV0dXJuIChmcC0+dHhfcGt0X3Byb2QgIT0gZnAtPnR4X3BrdF9jb25zKTsKLQogfQogCiAvKiBmcmVlIHNrYiBpbiB0aGUgcGFja2V0IHJpbmcgYXQgcG9zIGlkeApAQCAtODQyLDkgKzg3NiwxMCBAQAogCXJldHVybiAoczE2KShmcC0+YnAtPnR4X3Jpbmdfc2l6ZSkgLSB1c2VkOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF90eF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IHdvcmspCitzdGF0aWMgdm9pZCBibngyeF90eF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAl1MTYgaHdfY29ucywgc3dfY29ucywgYmRfY29ucyA9IGZwLT50eF9iZF9jb25zOwogCWludCBkb25lID0gMDsKIApAQCAtODUzLDYgKzg4OCw3IEBACiAJCXJldHVybjsKICNlbmRpZgogCisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBmcC0+aW5kZXgpOwogCWh3X2NvbnMgPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpOwogCXN3X2NvbnMgPSBmcC0+dHhfcGt0X2NvbnM7CiAKQEAgLTg3NCwzMiArOTEwLDMwIEBACiAJCWJkX2NvbnMgPSBibngyeF9mcmVlX3R4X3BrdChicCwgZnAsIHBrdF9jb25zKTsKIAkJc3dfY29ucysrOwogCQlkb25lKys7Ci0KLQkJaWYgKGRvbmUgPT0gd29yaykKLQkJCWJyZWFrOwogCX0KIAogCWZwLT50eF9wa3RfY29ucyA9IHN3X2NvbnM7CiAJZnAtPnR4X2JkX2NvbnMgPSBiZF9jb25zOwogCi0JLyogTmVlZCB0byBtYWtlIHRoZSB0eF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQotCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKLQkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0IHN0YXJ0X3htaXQoKQotCSAqIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQgZm9yZXZlci4KLQkgKi8KLQlzbXBfbWIoKTsKLQogCS8qIFRCRCBuZWVkIGEgdGhyZXNoPyAqLwotCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpKSkgeworCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpKSB7CiAKLQkJbmV0aWZfdHhfbG9jayhicC0+ZGV2KTsKKwkJX19uZXRpZl90eF9sb2NrKHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSAmJgorCQkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2JkX2NvbnMgdXBkYXRlIHZpc2libGUgdG8gc3RhcnRfeG1pdCgpCisJCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKKwkJICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdAorCQkgKiBzdGFydF94bWl0KCkgd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZAorCQkgKiBmb3JldmVyLgorCQkgKi8KKwkJc21wX21iKCk7CisKKwkJaWYgKChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpICYmCiAJCSAgICAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pICYmCiAJCSAgICAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKSkKLQkJCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7CisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiAKLQkJbmV0aWZfdHhfdW5sb2NrKGJwLT5kZXYpOworCQlfX25ldGlmX3R4X3VubG9jayh0eHEpOwogCX0KIH0KIApAQCAtOTEzLDEyICs5NDcsMTIgQEAKIAogCURQKEJOWDJYX01TR19TUCwKIAkgICAiZnAgJWQgIGNpZCAlZCAgZ290IHJhbXJvZCAjJWQgIHN0YXRlIGlzICV4ICB0eXBlIGlzICVkXG4iLAotCSAgIEZQX0lEWChmcCksIGNpZCwgY29tbWFuZCwgYnAtPnN0YXRlLAorCSAgIGZwLT5pbmRleCwgY2lkLCBjb21tYW5kLCBicC0+c3RhdGUsCiAJICAgcnJfY3FlLT5yYW1yb2RfY3FlLnJhbXJvZF90eXBlKTsKIAogCWJwLT5zcHFfbGVmdCsrOwogCi0JaWYgKEZQX0lEWChmcCkpIHsKKwlpZiAoZnAtPmluZGV4KSB7CiAJCXN3aXRjaCAoY29tbWFuZCB8IGZwLT5zdGF0ZSkgewogCQljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAgfAogCQkJCQkJQk5YMlhfRlBfU1RBVEVfT1BFTklORyk6CkBAIC0xMDc4LDggKzExMTIsNyBAQAogCiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5wZGV2LAogCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZyksCi0JCQkJICAgICAgIGJwLT5yeF9vZmZzZXQgKyBSWF9DT1BZX1RIUkVTSCwKLQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkgICAgICAgUlhfQ09QWV9USFJFU0gsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlwcm9kX3J4X2J1Zi0+c2tiID0gY29uc19yeF9idWYtPnNrYjsKIAlwY2lfdW5tYXBfYWRkcl9zZXQocHJvZF9yeF9idWYsIG1hcHBpbmcsCkBAIC0xMjYwLDcgKzEyOTMsNyBAQAogCQkgICB3aGVyZSB3ZSBhcmUgYW5kIGRyb3AgdGhlIHdob2xlIHBhY2tldCAqLwogCQllcnIgPSBibngyeF9hbGxvY19yeF9zZ2UoYnAsIGZwLCBzZ2VfaWR4KTsKIAkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtMTM2NSw3ICsxMzk4LDcgQEAKIAkJLyogZWxzZSBkcm9wIHRoZSBwYWNrZXQgYW5kIGtlZXAgdGhlIGJ1ZmZlciBpbiB0aGUgYmluICovCiAJCURQKE5FVElGX01TR19SWF9TVEFUVVMsCiAJCSAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IHNrYiAtIGRyb3BwaW5nIHBhY2tldCFcbiIpOwotCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIAl9CiAKIAlmcC0+dHBhX3N0YXRlW3F1ZXVlXSA9IEJOWDJYX1RQQV9TVE9QOwpAQCAtMTM3Niw3ICsxNDA5LDcgQEAKIAkJCQkJdTE2IGJkX3Byb2QsIHUxNiByeF9jb21wX3Byb2QsCiAJCQkJCXUxNiByeF9zZ2VfcHJvZCkKIHsKLQlzdHJ1Y3QgdHN0b3JtX2V0aF9yeF9wcm9kdWNlcnMgcnhfcHJvZHMgPSB7MH07CisJc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHJ4X3Byb2RzID0gezB9OwogCWludCBpOwogCiAJLyogVXBkYXRlIHByb2R1Y2VycyAqLwpAQCAtMTM5NCwxNiArMTQyNywxNiBAQAogCSAqLwogCXdtYigpOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX2V0aF9yeF9wcm9kdWNlcnMpLzQ7IGkrKykKLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVFNUT1JNX1JYX1BST0RTX09GRlNFVChCUF9QT1JUKGJwKSwgRlBfQ0xfSUQoZnApKSArIGkqNCwKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycykvNDsgaSsrKQorCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBVU1RPUk1fUlhfUFJPRFNfT0ZGU0VUKEJQX1BPUlQoYnApLCBmcC0+Y2xfaWQpICsgaSo0LAogCQkgICAgICAgKCh1MzIgKikmcnhfcHJvZHMpW2ldKTsKIAogCW1taW93YigpOyAvKiBrZWVwIHByb2QgdXBkYXRlcyBvcmRlcmVkICovCiAKIAlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAotCSAgICJXcm90ZTogYmRfcHJvZCAldSAgY3FlX3Byb2QgJXUgIHNnZV9wcm9kICV1XG4iLAotCSAgIGJkX3Byb2QsIHJ4X2NvbXBfcHJvZCwgcnhfc2dlX3Byb2QpOworCSAgICJxdWV1ZVslZF06ICB3cm90ZSAgYmRfcHJvZCAldSAgY3FlX3Byb2QgJXUgIHNnZV9wcm9kICV1XG4iLAorCSAgIGZwLT5pbmRleCwgYmRfcHJvZCwgcnhfY29tcF9wcm9kLCByeF9zZ2VfcHJvZCk7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfcnhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCBidWRnZXQpCkBAIC0xNDM3LDcgKzE0NzAsNyBAQAogCiAJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKIAkgICAicXVldWVbJWRdOiAgaHdfY29tcF9jb25zICV1ICBzd19jb21wX2NvbnMgJXVcbiIsCi0JICAgRlBfSURYKGZwKSwgaHdfY29tcF9jb25zLCBzd19jb21wX2NvbnMpOworCSAgIGZwLT5pbmRleCwgaHdfY29tcF9jb25zLCBzd19jb21wX2NvbnMpOwogCiAJd2hpbGUgKHN3X2NvbXBfY29ucyAhPSBod19jb21wX2NvbnMpIHsKIAkJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSBOVUxMOwpAQCAtMTUyNyw3ICsxNTYwLDcgQEAKIAkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAogCQkJCSAgICJFUlJPUiAgZmxhZ3MgJXggIHJ4IHBhY2tldCAldVxuIiwKIAkJCQkgICBjcWVfZnBfZmxhZ3MsIHN3X2NvbXBfY29ucyk7Ci0JCQkJYnAtPmV0aF9zdGF0cy5yeF9lcnJfZGlzY2FyZF9wa3QrKzsKKwkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfZXJyX2Rpc2NhcmRfcGt0Kys7CiAJCQkJZ290byByZXVzZV9yeDsKIAkJCX0KIApAQCAtMTU0NCw3ICsxNTc3LDcgQEAKIAkJCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKIAkJCQkJICAgIkVSUk9SICBwYWNrZXQgZHJvcHBlZCAiCiAJCQkJCSAgICJiZWNhdXNlIG9mIGFsbG9jIGZhaWx1cmVcbiIpOwotCQkJCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIAkJCQkJZ290byByZXVzZV9yeDsKIAkJCQl9CiAKQEAgLTE1NzAsNyArMTYwMyw3IEBACiAJCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKIAkJCQkgICAiRVJST1IgIHBhY2tldCBkcm9wcGVkIGJlY2F1c2UgIgogCQkJCSAgICJvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwogcmV1c2Vfcng6CiAJCQkJYm54MnhfcmV1c2Vfcnhfc2tiKGZwLCBza2IsIGJkX2NvbnMsIGJkX3Byb2QpOwogCQkJCWdvdG8gbmV4dF9yeDsKQEAgLTE1ODMsMTAgKzE2MTYsMTEgQEAKIAkJCQlpZiAobGlrZWx5KEJOWDJYX1JYX0NTVU1fT0soY3FlKSkpCiAJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQkJZWxzZQotCQkJCQlicC0+ZXRoX3N0YXRzLmh3X2NzdW1fZXJyKys7CisJCQkJCWZwLT5ldGhfcV9zdGF0cy5od19jc3VtX2VycisrOwogCQkJfQogCQl9CiAKKwkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGZwLT5pbmRleCk7CiAjaWZkZWYgQkNNX1ZMQU4KIAkJaWYgKChicC0+dmxncnAgIT0gTlVMTCkgJiYgKGJwLT5mbGFncyAmIEhXX1ZMQU5fUlhfRkxBRykgJiYKIAkJICAgIChsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncykgJgpAQCAtMTYzMiw3ICsxNjY2LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gZnBfY29va2llOwogCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7Ci0JaW50IGluZGV4ID0gRlBfSURYKGZwKTsKKwlpbnQgaW5kZXggPSBmcC0+aW5kZXg7CiAKIAkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKQEAgLTE2NDEsOCArMTY3NSw4IEBACiAJfQogCiAJRFAoQk5YMlhfTVNHX0ZQLCAiZ290IGFuIE1TSS1YIGludGVycnVwdCBvbiBJRFg6U0IgWyVkOiVkXVxuIiwKLQkgICBpbmRleCwgRlBfU0JfSUQoZnApKTsKLQlibngyeF9hY2tfc2IoYnAsIEZQX1NCX0lEKGZwKSwgVVNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOworCSAgIGluZGV4LCBmcC0+c2JfaWQpOworCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCkBAIC0xNjU0LDE1ICsxNjg4LDE0IEBACiAJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwogCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibngyeF9mcChicCwgaW5kZXgsIG5hcGkpKTsKKwluYXBpX3NjaGVkdWxlKCZibngyeF9mcChicCwgaW5kZXgsIG5hcGkpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGJueDJ4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2X2luc3RhbmNlKTsKIAl1MTYgc3RhdHVzID0gYm54MnhfYWNrX2ludChicCk7CiAJdTE2IG1hc2s7CiAKQEAgLTE2NzEsNyArMTcwNCw3IEBACiAJCURQKE5FVElGX01TR19JTlRSLCAibm90IG91ciBpbnRlcnJ1cHQhXG4iKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KLQlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiBpbnRlcnJ1cHQgIHN0YXR1cyAldVxuIiwgc3RhdHVzKTsKKwlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhbiBpbnRlcnJ1cHQgIHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOwogCiAJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7CkBAIC0xNjkzLDcgKzE3MjYsNyBAQAogCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAotCQluZXRpZl9yeF9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIDAsIG5hcGkpKTsKKwkJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIDAsIG5hcGkpKTsKIAogCQlzdGF0dXMgJj0gfm1hc2s7CiAJfQpAQCAtMTgwNiwyNiArMTgzOSw1MCBAQAogLyogSFcgTG9jayBmb3Igc2hhcmVkIGR1YWwgcG9ydCBQSFlzICovCiBzdGF0aWMgdm9pZCBibngyeF9hY3F1aXJlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7Ci0KIAltdXRleF9sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOwogCi0JaWYgKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkKLQkJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFXzgwNzJfTURJTyk7CisJaWYgKGJwLT5wb3J0Lm5lZWRfaHdfbG9jaykKKwkJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX01ESU8pOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9yZWxlYXNlX3BoeV9sb2NrKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7Ci0KLQlpZiAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSB8fAotCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKQotCQlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKKwlpZiAoYnAtPnBvcnQubmVlZF9od19sb2NrKQorCQlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfTURJTyk7CiAKIAltdXRleF91bmxvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7CiB9CiAKK2ludCBibngyeF9nZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHU4IHBvcnQpCit7CisJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgc3dhcCByZWdpc3RlciBpcyBzZXQgYW5kIGFjdGl2ZSAqLworCWludCBncGlvX3BvcnQgPSAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkgJiYKKwkJCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpKSBeIHBvcnQ7CisJaW50IGdwaW9fc2hpZnQgPSBncGlvX251bSArCisJCQkoZ3Bpb19wb3J0ID8gTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUIDogMCk7CisJdTMyIGdwaW9fbWFzayA9ICgxIDw8IGdwaW9fc2hpZnQpOworCXUzMiBncGlvX3JlZzsKKwlpbnQgdmFsdWU7CisKKwlpZiAoZ3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19HUElPXzMpIHsKKwkJQk5YMlhfRVJSKCJJbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW9fbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmVhZCBHUElPIHZhbHVlICovCisJZ3Bpb19yZWcgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU8pOworCisJLyogZ2V0IHRoZSByZXF1ZXN0ZWQgcGluIHZhbHVlICovCisJaWYgKChncGlvX3JlZyAmIGdwaW9fbWFzaykgPT0gZ3Bpb19tYXNrKQorCQl2YWx1ZSA9IDE7CisJZWxzZQorCQl2YWx1ZSA9IDA7CisKKwlEUChORVRJRl9NU0dfTElOSywgInBpbiAlZCAgdmFsdWUgMHgleFxuIiwgZ3Bpb19udW0sIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKK30KKwogaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpCiB7CiAJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgc3dhcCByZWdpc3RlciBpcyBzZXQgYW5kIGFjdGl2ZSAqLwpAQCAtMTg3OSw2ICsxOTM2LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBibngyeF9zZXRfZ3Bpb19pbnQoc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCkKK3sKKwkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCisJaW50IGdwaW9fcG9ydCA9IChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSAmJgorCQkJIFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSkpIF4gcG9ydDsKKwlpbnQgZ3Bpb19zaGlmdCA9IGdwaW9fbnVtICsKKwkJCShncGlvX3BvcnQgPyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQgOiAwKTsKKwl1MzIgZ3Bpb19tYXNrID0gKDEgPDwgZ3Bpb19zaGlmdCk7CisJdTMyIGdwaW9fcmVnOworCisJaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKKwkvKiByZWFkIEdQSU8gaW50ICovCisJZ3Bpb19yZWcgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU9fSU5UKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUjoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJDbGVhciBHUElPIElOVCAlZCAoc2hpZnQgJWQpIC0+ICIKKwkJCQkgICAib3V0cHV0IGxvd1xuIiwgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOworCQkvKiBjbGVhciBTRVQgYW5kIHNldCBDTFIgKi8KKwkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfU0VUX1BPUyk7CisJCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX0NMUl9QT1MpOworCQlicmVhazsKKworCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyBJTlQgJWQgKHNoaWZ0ICVkKSAtPiAiCisJCQkJICAgIm91dHB1dCBoaWdoXG4iLCBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIGNsZWFyIENMUiBhbmQgc2V0IFNFVCAqLworCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9DTFJfUE9TKTsKKwkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfU0VUX1BPUyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPX0lOVCwgZ3Bpb19yZWcpOworCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9HUElPKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJueDJ4X3NldF9zcGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBzcGlvX251bSwgdTMyIG1vZGUpCiB7CiAJdTMyIHNwaW9fbWFzayA9ICgxIDw8IHNwaW9fbnVtKTsKQEAgLTE5MzMsMTMgKzIwMzYsMTYgQEAKIAkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgIEFEVkVSVElTRURfUGF1c2UpOwogCQlicmVhazsKKwogCWNhc2UgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDoKIAkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfQXN5bV9QYXVzZSB8CiAJCQkJCSBBRFZFUlRJU0VEX1BhdXNlKTsKIAkJYnJlYWs7CisKIAljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM6CiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlicC0+cG9ydC5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfQXN5bV9QYXVzZSB8CiAJCQkJCSAgQURWRVJUSVNFRF9QYXVzZSk7CkBAIC0xOTY0LDcgKzIwNzAsOCBAQAogCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgIT0gQk5YMlhfRkxPV19DVFJMX05PTkUpIHsKIAkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkgewogCQkJCXByaW50aygiLCByZWNlaXZlICIpOwotCQkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJgorCQkJCSAgICBCTlgyWF9GTE9XX0NUUkxfVFgpCiAJCQkJCXByaW50aygiJiB0cmFuc21pdCAiKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKCIsIHRyYW5zbWl0ICIpOwpAQCAtMTk3OSw3ICsyMDg2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1OCBibngyeF9pbml0aWFsX3BoeV9pbml0KHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdTggYm54MnhfaW5pdGlhbF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9hZF9tb2RlKQogewogCWlmICghQlBfTk9NQ1AoYnApKSB7CiAJCXU4IHJjOwpAQCAtMTk5NSwxOCArMjEwMiwyNCBAQAogCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mY19hdXRvX2FkdiA9IEJOWDJYX0ZMT1dfQ1RSTF9CT1RIOwogCiAJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCisJCWlmIChsb2FkX21vZGUgPT0gTE9BRF9ESUFHKQorCQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19YR1hTXzEwOworCiAJCXJjID0gYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOworCiAJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwogCiAJCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKIAotCQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKQorCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgJiYgYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7CisJCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX0xJTktfVVApOwogCQkJYm54MnhfbGlua19yZXBvcnQoYnApOwotCisJCX0KIAogCQlyZXR1cm4gcmM7CiAJfQotCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtbm90IGluaXRpYWxpemluZyBsaW5rXG4iKTsKKwlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IGluaXRpYWxpemUgbGlua1xuIik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTIwMTksMTcgKzIxMzIsMTcgQEAKIAogCQlibngyeF9jYWxjX2ZjX2FkdihicCk7CiAJfSBlbHNlCi0JCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtbm90IHNldHRpbmcgbGlua1xuIik7CisJCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3Qgc2V0IGxpbmtcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9fbGlua19yZXNldChzdHJ1Y3QgYm54MnggKmJwKQogewogCWlmICghQlBfTk9NQ1AoYnApKSB7CiAJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOwotCQlibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwkJYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywgMSk7CiAJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwogCX0gZWxzZQotCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCByZXNldHRpbmcgbGlua1xuIik7CisJCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3QgcmVzZXQgbGlua1xuIik7CiB9CiAKIHN0YXRpYyB1OCBibngyeF9saW5rX3Rlc3Qoc3RydWN0IGJueDJ4ICpicCkKQEAgLTIwNDMsMTE5ICsyMTU2LDQyIEBACiAJcmV0dXJuIHJjOwogfQogCi0vKiBDYWxjdWxhdGVzIHRoZSBzdW0gb2Ygdm5fbWluX3JhdGVzLgotICAgSXQncyBuZWVkZWQgZm9yIGZ1cnRoZXIgbm9ybWFsaXppbmcgb2YgdGhlIG1pbl9yYXRlcy4KLQotICAgUmV0dXJuczoKLSAgICAgc3VtIG9mIHZuX21pbl9yYXRlcwotICAgICAgIG9yCi0gICAgIDAgLSBpZiBhbGwgdGhlIG1pbl9yYXRlcyBhcmUgMC4KLSAgICAgSW4gdGhlIGxhdGVyIGNhc2UgZmFpcm5lc3MgYWxnb3JpdGhtIHNob3VsZCBiZSBkZWFjdGl2YXRlZC4KLSAgICAgSWYgbm90IGFsbCBtaW5fcmF0ZXMgYXJlIHplcm8gdGhlbiB0aG9zZSB0aGF0IGFyZSB6ZXJvZXMgd2lsbAotICAgICBiZSBzZXQgdG8gMS4KLSAqLwotc3RhdGljIHUzMiBibngyeF9jYWxjX3ZuX3dzdW0oc3RydWN0IGJueDJ4ICpicCkKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfcG9ydF9taW5tYXgoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgaSwgcG9ydCA9IEJQX1BPUlQoYnApOwotCXUzMiB3c3VtID0gMDsKLQlpbnQgYWxsX3plcm8gPSAxOworCXUzMiByX3BhcmFtID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkIC8gODsKKwl1MzIgZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWM7CisJdTMyIHRfZmFpcjsKIAotCWZvciAoaSA9IDA7IGkgPCBFMUhWTl9NQVg7IGkrKykgewotCQl1MzIgdm5fY2ZnID0KLQkJCVNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbMippICsgcG9ydF0uY29uZmlnKTsKLQkJdTMyIHZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KLQkJCQkgICAgIEZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7Ci0JCWlmICghKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkpIHsKLQkJCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLwotCQkJaWYgKCF2bl9taW5fcmF0ZSkKLQkJCQl2bl9taW5fcmF0ZSA9IERFRl9NSU5fUkFURTsKLQkJCWVsc2UKLQkJCQlhbGxfemVybyA9IDA7CisJbWVtc2V0KCYoYnAtPmNtbmcucnNfdmFycyksIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3BvcnQpKTsKKwltZW1zZXQoJihicC0+Y21uZy5mYWlyX3ZhcnMpLCAwLCBzaXplb2Yoc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3BvcnQpKTsKIAotCQkJd3N1bSArPSB2bl9taW5fcmF0ZTsKLQkJfQotCX0KKwkvKiAxMDAgdXNlYyBpbiBTRE0gdGlja3MgPSAyNSBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCisJYnAtPmNtbmcucnNfdmFycy5yc19wZXJpb2RpY190aW1lb3V0ID0gUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDIC8gNDsKIAotCS8qIC4uLiBvbmx5IGlmIGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9zIC0gZGlzYWJsZSBGQUlSTkVTUyAqLwotCWlmIChhbGxfemVybykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gd3N1bTsKLX0KLQotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9wb3J0X21pbm1heChzdHJ1Y3QgYm54MnggKmJwLAotCQkJCSAgIGludCBlbl9mbmVzcywKLQkJCQkgICB1MTYgcG9ydF9yYXRlLAotCQkJCSAgIHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCAqbV9jbW5nX3BvcnQpCi17Ci0JdTMyIHJfcGFyYW0gPSBwb3J0X3JhdGUgLyA4OwotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JaW50IGk7Ci0KLQltZW1zZXQobV9jbW5nX3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpKTsKLQotCS8qIEVuYWJsZSBtaW5tYXggb25seSBpZiB3ZSBhcmUgaW4gZTFobWYgbW9kZSAqLwotCWlmIChJU19FMUhNRihicCkpIHsKLQkJdTMyIGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjOwotCQl1MzIgdF9mYWlyOwotCi0JCS8qIEVuYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCi0JCW1fY21uZ19wb3J0LT5mbGFncy5jbW5nX3ZuX2VuYWJsZSA9IDE7Ci0JCW1fY21uZ19wb3J0LT5mbGFncy5mYWlybmVzc19lbmFibGUgPSBlbl9mbmVzcyA/IDEgOiAwOwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MucmF0ZV9zaGFwaW5nX2VuYWJsZSA9IDE7Ci0KLQkJaWYgKCFlbl9mbmVzcykKLQkJCURQKE5FVElGX01TR19JRlVQLCAiQWxsIE1JTiB2YWx1ZXMgYXJlIHplcm9lcyIKLQkJCSAgICIgIGZhaXJuZXNzIHdpbGwgYmUgZGlzYWJsZWRcbiIpOwotCi0JCS8qIDEwMCB1c2VjIGluIFNETSB0aWNrcyA9IDI1IHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KLQkJbV9jbW5nX3BvcnQtPnJzX3ZhcnMucnNfcGVyaW9kaWNfdGltZW91dCA9Ci0JCQkJCQlSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMgLyA0OwotCi0JCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgotCQkgICAxLjI1IGNvZWZmaWNpZW50IGlzIGZvciB0aGUgdGhyZXNob2xkIHRvIGJlIGEgbGl0dGxlIGJpZ2dlcgotCQkgICB0aGFuIHRoZSByZWFsIHRpbWUsIHRvIGNvbXBlbnNhdGUgZm9yIHRpbWVyIGluLWFjY3VyYWN5ICovCi0JCW1fY21uZ19wb3J0LT5yc192YXJzLnJzX3RocmVzaG9sZCA9CisJLyogdGhpcyBpcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG5vIHRpbWVyIGFybWluZyB3aWxsIG9jY3VyCisJICAgMS4yNSBjb2VmZmljaWVudCBpcyBmb3IgdGhlIHRocmVzaG9sZCB0byBiZSBhIGxpdHRsZSBiaWdnZXIKKwkgICB0aGFuIHRoZSByZWFsIHRpbWUsIHRvIGNvbXBlbnNhdGUgZm9yIHRpbWVyIGluLWFjY3VyYWN5ICovCisJYnAtPmNtbmcucnNfdmFycy5yc190aHJlc2hvbGQgPQogCQkJCShSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMgKiByX3BhcmFtICogNSkgLyA0OwogCi0JCS8qIHJlc29sdXRpb24gb2YgZmFpcm5lc3MgdGltZXIgKi8KLQkJZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgPSBRTV9BUkJfQllURVMgLyByX3BhcmFtOwotCQkvKiBmb3IgMTBHIGl0IGlzIDEwMDB1c2VjLiBmb3IgMUcgaXQgaXMgMTAwMDB1c2VjLiAqLwotCQl0X2ZhaXIgPSBUX0ZBSVJfQ09FRiAvIHBvcnRfcmF0ZTsKKwkvKiByZXNvbHV0aW9uIG9mIGZhaXJuZXNzIHRpbWVyICovCisJZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgPSBRTV9BUkJfQllURVMgLyByX3BhcmFtOworCS8qIGZvciAxMEcgaXQgaXMgMTAwMHVzZWMuIGZvciAxRyBpdCBpcyAxMDAwMHVzZWMuICovCisJdF9mYWlyID0gVF9GQUlSX0NPRUYgLyBicC0+bGlua192YXJzLmxpbmVfc3BlZWQ7CiAKLQkJLyogdGhpcyBpcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIHdlIHdvbid0IGFybQotCQkgICB0aGUgdGltZXIgYW55bW9yZSAqLwotCQltX2NtbmdfcG9ydC0+ZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkID0gUU1fQVJCX0JZVEVTOworCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0gdGhlIHRpbWVyIGFueW1vcmUgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgPSBRTV9BUkJfQllURVM7CiAKLQkJLyogd2UgbXVsdGlwbHkgYnkgMWUzLzggdG8gZ2V0IGJ5dGVzL21zZWMuCi0JCSAgIFdlIGRvbid0IHdhbnQgdGhlIGNyZWRpdHMgdG8gcGFzcyBhIGNyZWRpdAotCQkgICBvZiB0aGUgVF9GQUlSKkZBSVJfTUVNIChhbGdvcml0aG0gcmVzb2x1dGlvbikgKi8KLQkJbV9jbW5nX3BvcnQtPmZhaXJfdmFycy51cHBlcl9ib3VuZCA9Ci0JCQkJCQlyX3BhcmFtICogdF9mYWlyICogRkFJUl9NRU07Ci0JCS8qIHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KLQkJbV9jbW5nX3BvcnQtPmZhaXJfdmFycy5mYWlybmVzc190aW1lb3V0ID0KLQkJCQkJCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjIC8gNDsKLQotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuY21uZ192bl9lbmFibGUgPSAwOwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuZmFpcm5lc3NfZW5hYmxlID0gMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLnJhdGVfc2hhcGluZ19lbmFibGUgPSAwOwotCi0JCURQKE5FVElGX01TR19JRlVQLAotCQkgICAiU2luZ2xlIGZ1bmN0aW9uIG1vZGUgIG1pbm1heCB3aWxsIGJlIGRpc2FibGVkXG4iKTsKLQl9Ci0KLQkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkgLyA0OyBpKyspCi0JCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSAqIDQsCi0JCSAgICAgICAoKHUzMiAqKShtX2NtbmdfcG9ydCkpW2ldKTsKKwkvKiB3ZSBtdWx0aXBseSBieSAxZTMvOCB0byBnZXQgYnl0ZXMvbXNlYy4KKwkgICBXZSBkb24ndCB3YW50IHRoZSBjcmVkaXRzIHRvIHBhc3MgYSBjcmVkaXQKKwkgICBvZiB0aGUgdF9mYWlyKkZBSVJfTUVNIChhbGdvcml0aG0gcmVzb2x1dGlvbikgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMudXBwZXJfYm91bmQgPSByX3BhcmFtICogdF9mYWlyICogRkFJUl9NRU07CisJLyogc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLworCWJwLT5jbW5nLmZhaXJfdmFycy5mYWlybmVzc190aW1lb3V0ID0gZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgLyA0OwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X3ZuX21pbm1heChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYywKLQkJCQkgICB1MzIgd3N1bSwgdTE2IHBvcnRfcmF0ZSwKLQkJCQkgc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0ICptX2NtbmdfcG9ydCkKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfdm5fbWlubWF4KHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQogewogCXN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfdm4gbV9yc192bjsKIAlzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4gbV9mYWlyX3ZuOwpAQCAtMjE3MSwxNyArMjIwNywxOCBAQAogCX0gZWxzZSB7CiAJCXZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KIAkJCQlGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOwotCQkvKiBJZiBGQUlSTkVTUyBpcyBlbmFibGVkIChub3QgYWxsIG1pbiByYXRlcyBhcmUgemVyb2VzKSBhbmQKKwkJLyogSWYgZmFpcm5lc3MgaXMgZW5hYmxlZCAobm90IGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9lcykgYW5kCiAJCSAgIGlmIGN1cnJlbnQgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxLgogCQkgICBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgb2YgdGhlIGFsZ29yaXRobS4gKi8KLQkJaWYgKCh2bl9taW5fcmF0ZSA9PSAwKSAmJiB3c3VtKQorCQlpZiAoYnAtPnZuX3dlaWdodF9zdW0gJiYgKHZuX21pbl9yYXRlID09IDApKQogCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7CiAJCXZuX21heF9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NQVhfQldfTUFTSykgPj4KIAkJCQlGVU5DX01GX0NGR19NQVhfQldfU0hJRlQpICogMTAwOwogCX0KIAotCURQKE5FVElGX01TR19JRlVQLCAiZnVuYyAlZDogdm5fbWluX3JhdGU9JWQgIHZuX21heF9yYXRlPSVkICAiCi0JICAgIndzdW09JWRcbiIsIGZ1bmMsIHZuX21pbl9yYXRlLCB2bl9tYXhfcmF0ZSwgd3N1bSk7CisJRFAoTkVUSUZfTVNHX0lGVVAsCisJICAgImZ1bmMgJWQ6IHZuX21pbl9yYXRlPSVkICB2bl9tYXhfcmF0ZT0lZCAgdm5fd2VpZ2h0X3N1bT0lZFxuIiwKKwkgICBmdW5jLCB2bl9taW5fcmF0ZSwgdm5fbWF4X3JhdGUsIGJwLT52bl93ZWlnaHRfc3VtKTsKIAogCW1lbXNldCgmbV9yc192biwgMCwgc2l6ZW9mKHN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfdm4pKTsKIAltZW1zZXQoJm1fZmFpcl92biwgMCwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92bikpOwpAQCAtMjE5Myw1NSArMjIzMCwyMCBAQAogCW1fcnNfdm4udm5fY291bnRlci5xdW90YSA9CiAJCQkJKHZuX21heF9yYXRlICogUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDKSAvIDg7CiAKLSNpZmRlZiBCTlgyWF9QRVJfUFJPVF9RT1MKLQkvKiBwZXIgcHJvdG9jb2wgY291bnRlciAqLwotCWZvciAocHJvdG9jb2wgPSAwOyBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspIHsKLQkJLyogbWF4aW1hbCBNYnBzIGZvciB0aGlzIHByb3RvY29sICovCi0JCW1fcnNfdm4ucHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnJhdGUgPQotCQkJCQkJcHJvdG9jb2xfbWF4X3JhdGVbcHJvdG9jb2xdOwotCQkvKiB0aGUgcXVvdGEgaW4gZWFjaCB0aW1lciBwZXJpb2QgLQotCQkgICBudW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgaW4gdGhpcyBwZXJpb2QgKi8KLQkJbV9yc192bi5wcm90b2NvbF9jb3VudGVyc1twcm90b2NvbF0ucXVvdGEgPQotCQkJKHUzMikocnNfcGVyaW9kaWNfdGltZW91dF91c2VjICoKLQkJCSAgKChkb3VibGUpbV9yc192bi4KLQkJCQkgICBwcm90b2NvbF9jb3VudGVyc1twcm90b2NvbF0ucmF0ZS84KSk7Ci0JfQotI2VuZGlmCi0KLQlpZiAod3N1bSkgeworCWlmIChicC0+dm5fd2VpZ2h0X3N1bSkgewogCQkvKiBjcmVkaXQgZm9yIGVhY2ggcGVyaW9kIG9mIHRoZSBmYWlybmVzcyBhbGdvcml0aG06CiAJCSAgIG51bWJlciBvZiBieXRlcyBpbiBUX0ZBSVIgKHRoZSB2biBzaGFyZSB0aGUgcG9ydCByYXRlKS4KLQkJICAgd3N1bSBzaG91bGQgbm90IGJlIGxhcmdlciB0aGFuIDEwMDAwLCB0aHVzCi0JCSAgIFRfRkFJUl9DT0VGIC8gKDggKiB3c3VtKSB3aWxsIGFsd2F5cyBiZSBncmF0ZXIgdGhhbiB6ZXJvICovCisJCSAgIHZuX3dlaWdodF9zdW0gc2hvdWxkIG5vdCBiZSBsYXJnZXIgdGhhbiAxMDAwMCwgdGh1cworCQkgICBUX0ZBSVJfQ09FRiAvICg4ICogdm5fd2VpZ2h0X3N1bSkgd2lsbCBhbHdheXMgYmUgZ3JlYXRlcgorCQkgICB0aGFuIHplcm8gKi8KIAkJbV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSA9Ci0JCQltYXgoKHU2NCkodm5fbWluX3JhdGUgKiAoVF9GQUlSX0NPRUYgLyAoOCAqIHdzdW0pKSksCi0JCQkgICAgKHU2NCkobV9jbW5nX3BvcnQtPmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCAqIDIpKTsKKwkJCW1heCgodTMyKSh2bl9taW5fcmF0ZSAqIChUX0ZBSVJfQ09FRiAvCisJCQkJCQkgKDggKiBicC0+dm5fd2VpZ2h0X3N1bSkpKSwKKwkJCSAgICAodTMyKShicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CiAJCURQKE5FVElGX01TR19JRlVQLCAibV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YT0lZFxuIiwKIAkJICAgbV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSk7CiAJfQogCi0jaWZkZWYgQk5YMlhfUEVSX1BST1RfUU9TCi0JZG8gewotCQl1MzIgcHJvdG9jb2xXZWlnaHRTdW0gPSAwOwotCi0JCWZvciAocHJvdG9jb2wgPSAwOyBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspCi0JCQlwcm90b2NvbFdlaWdodFN1bSArPQotCQkJCQlkcnZJbml0LnByb3RvY29sX21pbl9yYXRlW3Byb3RvY29sXTsKLQkJLyogcGVyIHByb3RvY29sIGNvdW50ZXIgLQotCQkgICBOT1QgTkVFREVEIElGIE5PIFBFUi1QUk9UT0NPTCBDT05HRVNUSU9OIE1BTkFHRU1FTlQgKi8KLQkJaWYgKHByb3RvY29sV2VpZ2h0U3VtID4gMCkgewotCQkJZm9yIChwcm90b2NvbCA9IDA7Ci0JCQkgICAgIHByb3RvY29sIDwgTlVNX09GX1BST1RPQ09MUzsgcHJvdG9jb2wrKykKLQkJCQkvKiBjcmVkaXQgZm9yIGVhY2ggcGVyaW9kIG9mIHRoZQotCQkJCSAgIGZhaXJuZXNzIGFsZ29yaXRobSAtIG51bWJlciBvZiBieXRlcyBpbgotCQkJCSAgIFRfRkFJUiAodGhlIHByb3RvY29sIHNoYXJlIHRoZSB2biByYXRlKSAqLwotCQkJCW1fZmFpcl92bi5wcm90b2NvbF9jcmVkaXRfZGVsdGFbcHJvdG9jb2xdID0KLQkJCQkJKHUzMikoKHZuX21pbl9yYXRlIC8gOCkgKiB0X2ZhaXIgKgotCQkJCQlwcm90b2NvbF9taW5fcmF0ZSAvIHByb3RvY29sV2VpZ2h0U3VtKTsKLQkJfQotCX0gd2hpbGUgKDApOwotI2VuZGlmCi0KIAkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfdm4pLzQ7IGkrKykKIAkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwpAQCAtMjI1NCwxMSArMjI1NiwxMCBAQAogCQkgICAgICAgKCh1MzIgKikoJm1fZmFpcl92bikpW2ldKTsKIH0KIAorCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1cG9uIGxpbmsgaW50ZXJydXB0ICovCiBzdGF0aWMgdm9pZCBibngyeF9saW5rX2F0dG4oc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgdm47Ci0KIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgc3luY2VkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGlzdGljcyAqLwogCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CiAKQEAgLTIyNjYsNiArMjI2NywxOSBAQAogCiAJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgewogCisJCS8qIGRyb3BsZXNzIGZsb3cgY29udHJvbCAqLworCQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQkJdTMyIHBhdXNlX2VuYWJsZWQgPSAwOworCisJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJcGF1c2VfZW5hYmxlZCA9IDE7CisKKwkJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgICBVU1RPUk1fUEFVU0VfRU5BQkxFRF9PRkZTRVQocG9ydCksCisJCQkgICAgICAgcGF1c2VfZW5hYmxlZCk7CisJCX0KKwogCQlpZiAoYnAtPmxpbmtfdmFycy5tYWNfdHlwZSA9PSBNQUNfVFlQRV9CTUFDKSB7CiAJCQlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHM7CiAKQEAgLTIyODMsMzYgKzIyOTcsMzggQEAKIAlibngyeF9saW5rX3JlcG9ydChicCk7CiAKIAlpZiAoSVNfRTFITUYoYnApKSB7CisJCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJCWludCBmdW5jOworCQlpbnQgdm47CiAKIAkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7CiAJCQlpZiAodm4gPT0gQlBfRTFIVk4oYnApKQogCQkJCWNvbnRpbnVlOwogCi0JCQlmdW5jID0gKCh2biA8PCAxKSB8IEJQX1BPUlQoYnApKTsKKwkJCWZ1bmMgPSAoKHZuIDw8IDEpIHwgcG9ydCk7CiAKIAkJCS8qIFNldCB0aGUgYXR0ZW50aW9uIHRvd2FyZHMgb3RoZXIgZHJpdmVycwogCQkJICAgb24gdGhlIHNhbWUgcG9ydCAqLwogCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzAgKwogCQkJICAgICAgIChMSU5LX1NZTkNfQVRURU5USU9OX0JJVF9GVU5DXzAgKyBmdW5jKSo0LCAxKTsKIAkJfQotCX0KIAotCWlmIChDSElQX0lTX0UxSChicCkgJiYgKGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCA+IDApKSB7Ci0JCXN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCBtX2NtbmdfcG9ydDsKLQkJdTMyIHdzdW07Ci0JCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKKwkJCWludCBpOwogCi0JCS8qIEluaXQgUkFURSBTSEFQSU5HIGFuZCBGQUlSTkVTUyBjb250ZXh0cyAqLwotCQl3c3VtID0gYm54MnhfY2FsY192bl93c3VtKGJwKTsKLQkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCwgKGludCl3c3VtLAotCQkJCQlicC0+bGlua192YXJzLmxpbmVfc3BlZWQsCi0JCQkJCSZtX2NtbmdfcG9ydCk7Ci0JCWlmIChJU19FMUhNRihicCkpCisJCQkvKiBJbml0IHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgY29udGV4dHMgKi8KKwkJCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnApOworCiAJCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCi0JCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0LAotCQkJCQl3c3VtLCBicC0+bGlua192YXJzLmxpbmVfc3BlZWQsCi0JCQkJCQkgICAgICZtX2NtbmdfcG9ydCk7CisJCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0KTsKKworCQkJLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCisJCQlmb3IgKGkgPSAwOworCQkJICAgICBpIDwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkgLyA0OyBpKyspCisJCQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJCSAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpKjQsCisJCQkJICAgICAgICgodTMyICopKCZicC0+Y21uZykpW2ldKTsKKwkJfQogCX0KIH0KIApAQCAtMjQ4OSw2ICsyNTA1LDcgQEAKIAl1MzIgbmlnX2ludF9tYXNrX2FkZHIgPSBwb3J0ID8gTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMSA6CiAJCQkJICAgICAgIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDA7CiAJdTMyIGFldV9tYXNrOworCXUzMiBuaWdfbWFzayA9IDA7CiAKIAlpZiAoYnAtPmF0dG5fc3RhdGUgJiBhc3NlcnRlZCkKIAkJQk5YMlhfRVJSKCJJR1UgRVJST1JcbiIpOwpAQCAtMjUxNCw3ICsyNTMxLDcgQEAKIAkJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOwogCiAJCQkvKiBzYXZlIG5pZyBpbnRlcnJ1cHQgbWFzayAqLwotCQkJYnAtPm5pZ19tYXNrID0gUkVHX1JEKGJwLCBuaWdfaW50X21hc2tfYWRkcik7CisJCQluaWdfbWFzayA9IFJFR19SRChicCwgbmlnX2ludF9tYXNrX2FkZHIpOwogCQkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgMCk7CiAKIAkJCWJueDJ4X2xpbmtfYXR0bihicCk7CkBAIC0yNTY5LDcgKzI1ODYsNyBAQAogCiAJLyogbm93IHNldCBiYWNrIHRoZSBtYXNrICovCiAJaWYgKGFzc2VydGVkICYgQVRUTl9OSUdfRk9SX0ZVTkMpIHsKLQkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgYnAtPm5pZ19tYXNrKTsKKwkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgbmlnX21hc2spOwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAl9CiB9CkBAIC0yNTkxLDkgKzI2MDgsOCBAQAogCiAJCUJOWDJYX0VSUigiU1BJTzUgaHcgYXR0ZW50aW9uXG4iKTsKIAotCQlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgewotCQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMUc6Ci0JCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwkJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJCS8qIEZhbiBmYWlsdXJlIGF0dGVudGlvbiAqLwogCiAJCQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAxICovCkBAIC0yNjI0LDYgKzI2NDAsMTMgQEAKIAkJfQogCX0KIAorCWlmIChhdHRuICYgKEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzAgfAorCQkgICAgQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMSkpIHsKKwkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJCWJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludCgmYnAtPmxpbmtfcGFyYW1zKTsKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJfQorCiAJaWYgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApIHsKIAogCQl2YWwgPSBSRUdfUkQoYnAsIHJlZ19vZmZzZXQpOwpAQCAtMjY0MCw3ICsyNjYzLDcgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKGF0dG4gJiBCTlgyWF9ET09SUV9BU1NFUlQpIHsKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9IV19JTlRFUlJVUFQpIHsKIAogCQl2YWwgPSBSRUdfUkQoYnAsIERPUlFfUkVHX0RPUlFfSU5UX1NUU19DTFIpOwogCQlCTlgyWF9FUlIoIkRCIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOwpAQCAtMjg4NiwxMCArMjkwOSw2IEBACiAJaWYgKHN0YXR1cyAmIDB4MSkKIAkJYm54MnhfYXR0bl9pbnQoYnApOwogCi0JLyogQ1N0b3JtIGV2ZW50czogcXVlcnlfc3RhdHMsIHBvcnQgZGVsZXRlIHJhbXJvZCAqLwotCWlmIChzdGF0dXMgJiAweDIpCi0JCWJwLT5zdGF0c19wZW5kaW5nID0gMDsKLQogCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBBVFRFTlRJT05fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfYXR0X2lkeCksCiAJCSAgICAgSUdVX0lOVF9OT1AsIDEpOwogCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBVU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdV9pZHgpLApAQCAtMjkxNCw3ICsyOTMzLDcgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBYU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CisJYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFRTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKIAogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIAlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKQEAgLTMwMDMsMTYgKzMwMjIsNDEgQEAKIAogI2RlZmluZSBVUERBVEVfRVhURU5EX1RTVEFUKHMsIHQpIFwKIAlkbyB7IFwKLQkJZGlmZiA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnMpIC0gb2xkX3RjbGllbnQtPnM7IFwKLQkJb2xkX3RjbGllbnQtPnMgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKTsgXAotCQlBRERfRVhURU5EXzY0KGZzdGF0cy0+dCMjX2hpLCBmc3RhdHMtPnQjI19sbywgZGlmZik7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3RjbGllbnQtPnMpOyBcCisJCW9sZF90Y2xpZW50LT5zID0gdGNsaWVudC0+czsgXAorCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFVQREFURV9FWFRFTkRfVVNUQVQocywgdCkgXAorCWRvIHsgXAorCQlkaWZmID0gbGUzMl90b19jcHUodWNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfdWNsaWVudC0+cyk7IFwKKwkJb2xkX3VjbGllbnQtPnMgPSB1Y2xpZW50LT5zOyBcCisJCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgVVBEQVRFX0VYVEVORF9YU1RBVChzLCB0KSBcCiAJZG8geyBcCi0JCWRpZmYgPSBsZTMyX3RvX2NwdSh4Y2xpZW50LT5zKSAtIG9sZF94Y2xpZW50LT5zOyBcCi0JCW9sZF94Y2xpZW50LT5zID0gbGUzMl90b19jcHUoeGNsaWVudC0+cyk7IFwKLQkJQUREX0VYVEVORF82NChmc3RhdHMtPnQjI19oaSwgZnN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh4Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF94Y2xpZW50LT5zKTsgXAorCQlvbGRfeGNsaWVudC0+cyA9IHhjbGllbnQtPnM7IFwKKwkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJfSB3aGlsZSAoMCkKKworLyogbWludWVuZCAtPSBzdWJ0cmFoZW5kICovCisjZGVmaW5lIFNVQl82NChtX2hpLCBzX2hpLCBtX2xvLCBzX2xvKSBcCisJZG8geyBcCisJCURJRkZfNjQobV9oaSwgbV9oaSwgc19oaSwgbV9sbywgbV9sbywgc19sbyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBtaW51ZW5kW2hpOmxvXSAtPSBzdWJ0cmFoZW5kICovCisjZGVmaW5lIFNVQl9FWFRFTkRfNjQobV9oaSwgbV9sbywgcykgXAorCWRvIHsgXAorCQlTVUJfNjQobV9oaSwgMCwgbV9sbywgcyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNVQl9FWFRFTkRfVVNUQVQocywgdCkgXAorCWRvIHsgXAorCQlkaWZmID0gbGUzMl90b19jcHUodWNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfdWNsaWVudC0+cyk7IFwKKwkJU1VCX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCiAJfSB3aGlsZSAoMCkKIAogLyoKQEAgLTMwMzksMTEgKzMwODMsMTIgQEAKIHsKIAlpZiAoIWJwLT5zdGF0c19wZW5kaW5nKSB7CiAJCXN0cnVjdCBldGhfcXVlcnlfcmFtcm9kX2RhdGEgcmFtcm9kX2RhdGEgPSB7MH07Ci0JCWludCByYzsKKwkJaW50IGksIHJjOwogCiAJCXJhbXJvZF9kYXRhLmRydl9jb3VudGVyID0gYnAtPnN0YXRzX2NvdW50ZXIrKzsKLQkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0XzFiID0gYnAtPnBvcnQucG1mID8gMSA6IDA7Ci0JCXJhbXJvZF9kYXRhLmN0cl9pZF92ZWN0b3IgPSAoMSA8PCBCUF9DTF9JRChicCkpOworCQlyYW1yb2RfZGF0YS5jb2xsZWN0X3BvcnQgPSBicC0+cG9ydC5wbWYgPyAxIDogMDsKKwkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCQlyYW1yb2RfZGF0YS5jdHJfaWRfdmVjdG9yIHw9ICgxIDw8IGJwLT5mcFtpXS5jbF9pZCk7CiAKIAkJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZLCAwLAogCQkJCSAgICgodTMyICopJnJhbXJvZF9kYXRhKVsxXSwKQEAgLTMwNTksNyArMzEwNCw5IEBACiBzdGF0aWMgdm9pZCBibngyeF9zdGF0c19pbml0KHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgaTsKIAorCWJwLT5zdGF0c19wZW5kaW5nID0gMDsKIAlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKIAlicC0+c3RhdHNfY291bnRlciA9IDA7CiAKQEAgLTMwODEsOSArMzEyOCwxOSBAQAogCQkgICAgJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmVncmVzc19tYWNfcGt0MV9sbyksIDIpOwogCiAJLyogZnVuY3Rpb24gc3RhdHMgKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQltZW1zZXQoJmZwLT5vbGRfdGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+b2xkX3VjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF94Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5ldGhfcV9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfcV9zdGF0cykpOworCX0KKwogCW1lbXNldCgmYnAtPmRldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwotCW1lbXNldCgmYnAtPm9sZF90Y2xpZW50LCAwLCBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7Ci0JbWVtc2V0KCZicC0+b2xkX3hjbGllbnQsIDAsIHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKIAltZW1zZXQoJmJwLT5ldGhfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzKSk7CiAKIAlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9ESVNBQkxFRDsKQEAgLTMwOTcsNiArMzE1NCw4IEBACiAJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOwogCiAJKnN0YXRzX2NvbXAgPSBETUFFX0NPTVBfVkFMOworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKKwkJcmV0dXJuOwogCiAJLyogbG9hZGVyICovCiAJaWYgKGJwLT5leGVjdXRlcl9pZHgpIHsKQEAgLTM0ODYsNyArMzU0NSwxMSBAQAogewogCXN0cnVjdCBibWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmJtYWNfc3RhdHMpOwogCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKLQlzdHJ1Y3QgcmVncGFpciBkaWZmOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCXN0cnVjdCB7CisJCXUzMiBsbzsKKwkJdTMyIGhpOworCX0gZGlmZjsKIAogCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncmVyYiwgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHMpOwogCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncmZjcywgcnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnMpOwpAQCAtMzQ5Niw3ICszNTU5LDcgQEAKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JqYnIsIHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnMpOwogCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncnhjZiwgcnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWQpOwogCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncnhwZiwgcnhfc3RhdF94b2Zmc3RhdGVlbnRlcmVkKTsKLQlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWQpOworCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncnhwZiwgcnhfc3RhdF9ibWFjX3hwZik7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0eHBmLCB0eF9zdGF0X291dHhvZmZzZW50KTsKIAlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R4cGYsIHR4X3N0YXRfZmxvd2NvbnRyb2xkb25lKTsKIAlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3Q2NCwgdHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzKTsKQEAgLTM1MTcsMTIgKzM1ODAsMjMgQEAKIAlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3RlcnIsCiAJCQkJdHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKIAlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R1ZmwsIHR4X3N0YXRfYm1hY191ZmwpOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkgPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X2JtYWNfeHBmX2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF9ibWFjX3hwZl9sbzsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfaGkgPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8gPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2xvOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9lbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBlbWFjX3N0YXRzICpuZXcgPSBibngyeF9zcChicCwgbWFjX3N0YXRzLmVtYWNfc3RhdHMpOwogCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKIAogCVVQREFURV9FWFRFTkRfU1RBVChyeF9zdGF0X2lmaGNpbmJhZG9jdGV0cyk7CiAJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0cyk7CkBAIC0zNTU1LDYgKzM2MjksMjQgQEAKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHMpOwogCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHMpOwogCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkgPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbyA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2xvOworCUFERF82NChlc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSwKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGksCisJICAgICAgIGVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9sbyk7CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvbnNlbnRfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbyA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b25zZW50X2xvOworCUFERF82NChlc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpLAorCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9oaSwKKwkgICAgICAgZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbywKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfbG8pOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X2h3X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQpAQCAtMzU2Myw3ICszNjU1LDExIEBACiAJc3RydWN0IG5pZ19zdGF0cyAqb2xkID0gJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7CiAJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7Ci0Jc3RydWN0IHJlZ3BhaXIgZGlmZjsKKwlzdHJ1Y3QgeworCQl1MzIgbG87CisJCXUzMiBoaTsKKwl9IGRpZmY7CisJdTMyIG5pZ190aW1lcl9tYXg7CiAKIAlpZiAoYnAtPmxpbmtfdmFycy5tYWNfdHlwZSA9PSBNQUNfVFlQRV9CTUFDKQogCQlibngyeF9ibWFjX3N0YXRzX3VwZGF0ZShicCk7CkBAIC0zNTcyLDcgKzM2NjgsNyBAQAogCQlibngyeF9lbWFjX3N0YXRzX3VwZGF0ZShicCk7CiAKIAllbHNlIHsgLyogdW5yZWFjaGVkICovCi0JCUJOWDJYX0VSUigic3RhdHMgdXBkYXRlZCBieSBkbWFlIGJ1dCBubyBNQUMgYWN0aXZlXG4iKTsKKwkJQk5YMlhfRVJSKCJzdGF0cyB1cGRhdGVkIGJ5IERNQUUgYnV0IG5vIE1BQyBhY3RpdmVcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zNTk0LDEzNCArMzY5MCwyMTEgQEAKIAogCXBzdGF0cy0+aG9zdF9wb3J0X3N0YXRzX3N0YXJ0ID0gKytwc3RhdHMtPmhvc3RfcG9ydF9zdGF0c19lbmQ7CiAKKwluaWdfdGltZXJfbWF4ID0gU0hNRU1fUkQoYnAsIHBvcnRfbWJbQlBfUE9SVChicCldLnN0YXRfbmlnX3RpbWVyKTsKKwlpZiAobmlnX3RpbWVyX21heCAhPSBlc3RhdHMtPm5pZ190aW1lcl9tYXgpIHsKKwkJZXN0YXRzLT5uaWdfdGltZXJfbWF4ID0gbmlnX3RpbWVyX21heDsKKwkJQk5YMlhfRVJSKCJOSUcgdGltZXIgbWF4ICgldSlcbiIsIGVzdGF0cy0+bmlnX3RpbWVyX21heCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IGV0aF9zdGF0c19xdWVyeSAqc3RhdHMgPSBibngyeF9zcChicCwgZndfc3RhdHMpOwotCWludCBjbF9pZCA9IEJQX0NMX0lEKGJwKTsKIAlzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzICp0cG9ydCA9Ci0JCQkJJnN0YXRzLT50c3Rvcm1fY29tbW9uLnBvcnRfc3RhdGlzdGljczsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnRjbGllbnQgPQotCQkJJnN0YXRzLT50c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmJwLT5vbGRfdGNsaWVudDsKLQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnhjbGllbnQgPQotCQkJJnN0YXRzLT54c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKLQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF94Y2xpZW50ID0gJmJwLT5vbGRfeGNsaWVudDsKKwkJCQkJJnN0YXRzLT50c3Rvcm1fY29tbW9uLnBvcnRfc3RhdGlzdGljczsKIAlzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzICpmc3RhdHMgPSBibngyeF9zcChicCwgZnVuY19zdGF0cyk7CiAJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7Ci0JdTMyIGRpZmY7CisJaW50IGk7CiAKLQkvKiBhcmUgc3Rvcm0gc3RhdHMgdmFsaWQ/ICovCi0JaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHRjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KLQkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgewotCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0cyBub3QgdXBkYXRlZCBieSB0c3Rvcm0iCi0JCSAgICIgIHRzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAotCQkgICB0Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHhjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KLQkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgewotCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0cyBub3QgdXBkYXRlZCBieSB4c3Rvcm0iCi0JCSAgICIgIHhzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAotCQkgICB4Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7Ci0JCXJldHVybiAtMjsKLQl9CisJbWVtc2V0KCYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpOworCWVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPSAwOworCWVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPSAwOworCWVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkgPSAwOworCWVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8gPSAwOworCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpID0gMDsKKwllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbyA9IDA7CiAKLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpID0KLQlmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpID0KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKwkJaW50IGNsX2lkID0gZnAtPmNsX2lkOworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnRjbGllbnQgPQorCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmZnAtPm9sZF90Y2xpZW50OworCQlzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnVjbGllbnQgPQorCQkJCSZzdGF0cy0+dXN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3VjbGllbnQgPSAmZnAtPm9sZF91Y2xpZW50OworCQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKnhjbGllbnQgPQorCQkJCSZzdGF0cy0+eHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07CisJCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3hjbGllbnQgPSAmZnAtPm9sZF94Y2xpZW50OworCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZmcC0+ZXRoX3Ffc3RhdHM7CisJCXUzMiBkaWZmOworCisJCS8qIGFyZSBzdG9ybSBzdGF0cyB2YWxpZD8gKi8KKwkJaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHhjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KKwkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgeworCQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAiWyVkXSBzdGF0cyBub3QgdXBkYXRlZCBieSB4c3Rvcm0iCisJCQkgICAiICB4c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJCSAgIGksIHhjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKHUxNikobGUxNl90b19jcHUodGNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQorCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHRzdG9ybSIKKwkJCSAgICIgIHRzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAorCQkJICAgaSwgdGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQkJcmV0dXJuIC0yOworCQl9CisJCWlmICgodTE2KShsZTE2X3RvX2NwdSh1Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJCURQKEJOWDJYX01TR19TVEFUUywgIlslZF0gc3RhdHMgbm90IHVwZGF0ZWQgYnkgdXN0b3JtIgorCQkJICAgIiAgdXN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCisJCQkgICBpLCB1Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7CisJCQlyZXR1cm4gLTQ7CisJCX0KKworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpID0KKwkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CiAJCQkJbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X2J5dGVzLmhpKTsKLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvID0KLQlmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8gPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9ieXRlcy5sbyk7CiAKLQllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0KKwkJcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9CiAJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Vycm9yX2J5dGVzLmhpKTsKLQllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9CiAJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Vycm9yX2J5dGVzLmxvKTsKKworCQlBRERfNjQocXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyk7CisKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfdW5pY2FzdF9wa3RzLAorCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9tdWx0aWNhc3RfcGt0cywKKwkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9icm9hZGNhc3RfcGt0cywKKwkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkLAorCQkJCQlldGhlcnN0YXRzb3ZlcnJzaXplcGt0cyk7CisJCVVQREFURV9FWFRFTkRfVFNUQVQobm9fYnVmZl9kaXNjYXJkLCBub19idWZmX2Rpc2NhcmQpOworCisJCVNVQl9FWFRFTkRfVVNUQVQodWNhc3Rfbm9fYnVmZl9wa3RzLAorCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCQlTVUJfRVhURU5EX1VTVEFUKG1jYXN0X25vX2J1ZmZfcGt0cywKKwkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCQlTVUJfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywKKwkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWQpOworCQlVUERBVEVfRVhURU5EX1VTVEFUKHVjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKKwkJVVBEQVRFX0VYVEVORF9VU1RBVChtY2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7CisJCVVQREFURV9FWFRFTkRfVVNUQVQoYmNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOworCisJCXFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkgPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfYnl0ZXMuaGkpOworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvID0KKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmxvKTsKKworCQlVUERBVEVfRVhURU5EX1hTVEFUKHVuaWNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCQlVUERBVEVfRVhURU5EX1hTVEFUKG11bHRpY2FzdF9wa3RzX3NlbnQsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKwkJVVBEQVRFX0VYVEVORF9YU1RBVChicm9hZGNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisKKwkJb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQgPSB0Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkOworCQlvbGRfdGNsaWVudC0+dHRsMF9kaXNjYXJkID0gdGNsaWVudC0+dHRsMF9kaXNjYXJkOworCisJCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvKTsKKworCQlBRERfNjQoZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyk7CisJCUFERF82NChlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpLAorCQkgICAgICAgcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkJICAgICAgIGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8sCisJCSAgICAgICBxc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvKTsKKwkJQUREXzY0KGVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpLCBxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSwKKwkJICAgICAgIGVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvLCBxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbyk7CisJfQorCisJQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGksCisJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG8pOworCisJbWVtY3B5KGVzdGF0cywgJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7CisKKwlBRERfNjQoZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfaGksCisJICAgICAgIGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8sCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2xvKTsKIAlBRERfNjQoZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKIAkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaSwKIAkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbywKIAkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbyk7CiAKLQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKLQkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKLQkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKLQkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyk7Ci0KLQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl91bmljYXN0X3BrdHMsIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZCk7Ci0JVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfbXVsdGljYXN0X3BrdHMsCi0JCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X2Jyb2FkY2FzdF9wa3RzLAotCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKLQotCWZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkgPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfYnl0ZXMuaGkpOwotCWZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8gPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfYnl0ZXMubG8pOwotCi0JVVBEQVRFX0VYVEVORF9YU1RBVCh1bmljYXN0X3BrdHNfc2VudCwKLQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwotCVVQREFURV9FWFRFTkRfWFNUQVQobXVsdGljYXN0X3BrdHNfc2VudCwKLQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7Ci0JVVBEQVRFX0VYVEVORF9YU1RBVChicm9hZGNhc3RfcGt0c19zZW50LAotCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKLQotCW1lbWNweShlc3RhdHMsICYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpOwotCi0JZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2ZpbHRlcl9kaXNjYXJkKTsKLQllc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRwb3J0LT54eG92ZXJmbG93X2Rpc2NhcmQpOwotCWVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQgPQorCWlmIChicC0+cG9ydC5wbWYpIHsKKwkJZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQgPQorCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT5tYWNfZmlsdGVyX2Rpc2NhcmQpOworCQllc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCA9CisJCQkJbGUzMl90b19jcHUodHBvcnQtPnh4b3ZlcmZsb3dfZGlzY2FyZCk7CisJCWVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQgPQogCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT5icmJfdHJ1bmNhdGVfZGlzY2FyZCk7Ci0JZXN0YXRzLT5tYWNfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRwb3J0LT5tYWNfZGlzY2FyZCk7Ci0KLQlvbGRfdGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmhpKTsKLQlvbGRfdGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMubG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvKTsKLQlvbGRfdGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMubG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMubG8pOwotCW9sZF90Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmhpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmhpKTsKLQlvbGRfdGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5sbyA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5sbyk7Ci0Jb2xkX3RjbGllbnQtPnRvdGFsX3Jjdl9wa3RzID0gbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X3BrdHMpOwotCi0Jb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkKTsKLQlvbGRfdGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkKTsKLQllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZCA9Ci0Jb2xkX3RjbGllbnQtPm5vX2J1ZmZfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPm5vX2J1ZmZfZGlzY2FyZCk7Ci0Jb2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnR0bDBfZGlzY2FyZCk7Ci0KLQlvbGRfeGNsaWVudC0+dG90YWxfc2VudF9wa3RzID0gbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9wa3RzKTsKLQlvbGRfeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmhpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQubG8gPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5sbyk7Ci0Jb2xkX3hjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmhpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5oaSk7Ci0Jb2xkX3hjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmxvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5sbyk7Ci0Jb2xkX3hjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmhpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5oaSk7Ci0Jb2xkX3hjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmxvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5sbyk7CisJCWVzdGF0cy0+bWFjX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2Rpc2NhcmQpOworCX0KIAogCWZzdGF0cy0+aG9zdF9mdW5jX3N0YXRzX3N0YXJ0ID0gKytmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19lbmQ7CiAKKwlicC0+c3RhdHNfcGVuZGluZyA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewotCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmYnAtPm9sZF90Y2xpZW50OwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdHMgPSAmYnAtPmRldi0+c3RhdHM7CisJaW50IGk7CiAKIAluc3RhdHMtPnJ4X3BhY2tldHMgPQogCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSkgKwpAQCAtMzczMywzNCArMzkwNiwzMyBAQAogCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSArCiAJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpOwogCi0JbnN0YXRzLT5yeF9ieXRlcyA9IGJueDJ4X2hpbG8oJmVzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkpOworCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKTsKIAogCW5zdGF0cy0+dHhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKTsKIAotCW5zdGF0cy0+cnhfZHJvcHBlZCA9IG9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkICsKLQkJCSAgICAgZXN0YXRzLT5tYWNfZGlzY2FyZDsKKwluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBlc3RhdHMtPm1hY19kaXNjYXJkOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQluc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KKwkJCWxlMzJfdG9fY3B1KGJwLT5mcFtpXS5vbGRfdGNsaWVudC5jaGVja3N1bV9kaXNjYXJkKTsKKwogCW5zdGF0cy0+dHhfZHJvcHBlZCA9IDA7CiAKIAluc3RhdHMtPm11bHRpY2FzdCA9Ci0JCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpOworCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKTsKIAogCW5zdGF0cy0+Y29sbGlzaW9ucyA9Ci0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19sbyArCi0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfbG8gKwotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfbG87Ci0KLQllc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkID0KLQkJCQlvbGRfdGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQgKwotCQkJCWVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2xvOworCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGkpOwogCiAJbnN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0KLQkJCQllc3RhdHMtPnJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfbG8gKwotCQkJCWVzdGF0cy0+amFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JbnN0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGVzdGF0cy0+YnJiX2Ryb3BfbG8gKyBlc3RhdHMtPmJyYl90cnVuY2F0ZV9sbzsKLQluc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2xvOwotCW5zdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2FsaWdubWVudGVycm9yc19sbzsKLQluc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gb2xkX3RjbGllbnQtPm5vX2J1ZmZfZGlzY2FyZDsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSArCisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkpOworCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBibngyeF9oaWxvKCZlc3RhdHMtPmJyYl9kcm9wX2hpKSArCisJCQkJIGJueDJ4X2hpbG8oJmVzdGF0cy0+YnJiX3RydW5jYXRlX2hpKTsKKwluc3RhdHMtPnJ4X2NyY19lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpKTsKKwluc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpOworCW5zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBibngyeF9oaWxvKCZlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSk7CiAJbnN0YXRzLT5yeF9taXNzZWRfZXJyb3JzID0gZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQ7CiAKIAluc3RhdHMtPnJ4X2Vycm9ycyA9IG5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyArCkBAIC0zNzcxLDQ2ICszOTQzLDYxIEBACiAJCQkgICAgbnN0YXRzLT5yeF9taXNzZWRfZXJyb3JzOwogCiAJbnN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyA9Ci0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfbG8gKwotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfbG87Ci0JbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9IGVzdGF0cy0+cnhfc3RhdF9mYWxzZWNhcnJpZXJlcnJvcnNfbG87CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaSk7CisJbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyA9CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpOwogCW5zdGF0cy0+dHhfZmlmb19lcnJvcnMgPSAwOwogCW5zdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CiAJbnN0YXRzLT50eF93aW5kb3dfZXJyb3JzID0gMDsKIAogCW5zdGF0cy0+dHhfZXJyb3JzID0gbnN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArCi0JCQkgICAgbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKKwkJCSAgICBuc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzICsKKwkgICAgYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kcnZfc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CisJaW50IGk7CisKKwllc3RhdHMtPmRyaXZlcl94b2ZmID0gMDsKKwllc3RhdHMtPnJ4X2Vycl9kaXNjYXJkX3BrdCA9IDA7CisJZXN0YXRzLT5yeF9za2JfYWxsb2NfZmFpbGVkID0gMDsKKwllc3RhdHMtPmh3X2NzdW1fZXJyID0gMDsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZicC0+ZnBbaV0uZXRoX3Ffc3RhdHM7CisKKwkJZXN0YXRzLT5kcml2ZXJfeG9mZiArPSBxc3RhdHMtPmRyaXZlcl94b2ZmOworCQllc3RhdHMtPnJ4X2Vycl9kaXNjYXJkX3BrdCArPSBxc3RhdHMtPnJ4X2Vycl9kaXNjYXJkX3BrdDsKKwkJZXN0YXRzLT5yeF9za2JfYWxsb2NfZmFpbGVkICs9IHFzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZDsKKwkJZXN0YXRzLT5od19jc3VtX2VyciArPSBxc3RhdHMtPmh3X2NzdW1fZXJyOworCX0KIH0KIAogc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7CiAJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOwotCWludCB1cGRhdGUgPSAwOwogCiAJaWYgKCpzdGF0c19jb21wICE9IERNQUVfQ09NUF9WQUwpCiAJCXJldHVybjsKIAogCWlmIChicC0+cG9ydC5wbWYpCi0JCXVwZGF0ZSA9IChibngyeF9od19zdGF0c191cGRhdGUoYnApID09IDApOworCQlibngyeF9od19zdGF0c191cGRhdGUoYnApOwogCi0JdXBkYXRlIHw9IChibngyeF9zdG9ybV9zdGF0c191cGRhdGUoYnApID09IDApOwotCi0JaWYgKHVwZGF0ZSkKLQkJYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShicCk7Ci0KLQllbHNlIHsKLQkJaWYgKGJwLT5zdGF0c19wZW5kaW5nKSB7Ci0JCQlicC0+c3RhdHNfcGVuZGluZysrOwotCQkJaWYgKGJwLT5zdGF0c19wZW5kaW5nID09IDMpIHsKLQkJCQlCTlgyWF9FUlIoInN0YXRzIG5vdCB1cGRhdGVkIGZvciAzIHRpbWVzXG4iKTsKLQkJCQlibngyeF9wYW5pYygpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQorCWlmIChibngyeF9zdG9ybV9zdGF0c191cGRhdGUoYnApICYmIChicC0+c3RhdHNfcGVuZGluZysrID09IDMpKSB7CisJCUJOWDJYX0VSUigic3Rvcm0gc3RhdHMgd2VyZSBub3QgdXBkYXRlZCBmb3IgMyB0aW1lc1xuIik7CisJCWJueDJ4X3BhbmljKCk7CisJCXJldHVybjsKIAl9CiAKKwlibngyeF9uZXRfc3RhdHNfdXBkYXRlKGJwKTsKKwlibngyeF9kcnZfc3RhdHNfdXBkYXRlKGJwKTsKKwogCWlmIChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfVElNRVIpIHsKLQkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7CisJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPQorCQkJCQkJCSZicC0+ZnAtPm9sZF90Y2xpZW50OworCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZicC0+ZnAtPmV0aF9xX3N0YXRzOwogCQlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKIAkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5zdGF0cyA9ICZicC0+ZGV2LT5zdGF0czsKIAkJaW50IGk7CkBAIC0zODI1LDIwICs0MDEyLDIyIEBACiAJCSAgICAgICAodTE2KShsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSAtCiAJCQkgICAgIGJwLT5mcC0+cnhfY29tcF9jb25zKSwKIAkJICAgICAgIGxlMTZfdG9fY3B1KCpicC0+ZnAtPnJ4X2NvbnNfc2IpLCBuc3RhdHMtPnJ4X3BhY2tldHMpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiICAlcyAoWG9mZiBldmVudHMgJXUpICBicmIgZHJvcHMgJXVcbiIsCi0JCSAgICAgICBuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpID8gIlhvZmYiIDogIlhvbiIsCi0JCSAgICAgICBlc3RhdHMtPmRyaXZlcl94b2ZmLCBlc3RhdHMtPmJyYl9kcm9wX2xvKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgKFhvZmYgZXZlbnRzICV1KSAgYnJiIGRyb3BzICV1ICAiCisJCQkJICAiYnJiIHRydW5jYXRlICV1XG4iLAorCQkgICAgICAgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgPyAiWG9mZiIgOiAiWG9uIiksCisJCSAgICAgICBxc3RhdHMtPmRyaXZlcl94b2ZmLAorCQkgICAgICAgZXN0YXRzLT5icmJfZHJvcF9sbywgZXN0YXRzLT5icmJfdHJ1bmNhdGVfbG8pOwogCQlwcmludGsoS0VSTl9ERUJVRyAidHN0YXRzOiBjaGVja3N1bV9kaXNjYXJkICV1ICAiCi0JCQkicGFja2V0c190b29fYmlnX2Rpc2NhcmQgJXUgIG5vX2J1ZmZfZGlzY2FyZCAldSAgIgorCQkJInBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICVsdSAgbm9fYnVmZl9kaXNjYXJkICVsdSAgIgogCQkJIm1hY19kaXNjYXJkICV1ICBtYWNfZmlsdGVyX2Rpc2NhcmQgJXUgICIKIAkJCSJ4eG92cmZsb3dfZGlzY2FyZCAldSAgYnJiX3RydW5jYXRlX2Rpc2NhcmQgJXUgICIKIAkJCSJ0dGwwX2Rpc2NhcmQgJXVcbiIsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCwKLQkJICAgICAgIG9sZF90Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCwKLQkJICAgICAgIG9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQsIGVzdGF0cy0+bWFjX2Rpc2NhcmQsCi0JCSAgICAgICBlc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCwgZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQsCi0JCSAgICAgICBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkLAotCQkgICAgICAgb2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCk7CisJCSAgICAgICBsZTMyX3RvX2NwdShvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCksCisJCSAgICAgICBibngyeF9oaWxvKCZxc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKSwKKwkJICAgICAgIGJueDJ4X2hpbG8oJnFzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpKSwKKwkJICAgICAgIGVzdGF0cy0+bWFjX2Rpc2NhcmQsIGVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkLAorCQkgICAgICAgZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQsIGVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQsCisJCSAgICAgICBsZTMyX3RvX2NwdShvbGRfdGNsaWVudC0+dHRsMF9kaXNjYXJkKSk7CiAKIAkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJbJWRdOiAlbHVcdCVsdVx0JWx1XG4iLCBpLApAQCAtMzk4Nyw3ICs0MTc2LDcgQEAKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbMF07CiAJCWludCByYzsKIAotCQlibngyeF90eF9pbnQoZnAsIDEwMDApOworCQlibngyeF90eF9pbnQoZnApOwogCQlyYyA9IGJueDJ4X3J4X2ludChmcCwgMTAwMCk7CiAJfQogCkBAIC00MjM5LDEwICs0NDI4LDYgQEAKIAkJCSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsCiAJCQkJCQkgICAgIFVfU0JfRVRIX1JYX0NRX0lOREVYKSwKIAkJCSBicC0+cnhfdGlja3MgPyAwIDogMSk7Ci0JCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwKLQkJCQkJCSAgICAgVV9TQl9FVEhfUlhfQkRfSU5ERVgpLAotCQkJIGJwLT5yeF90aWNrcyA/IDAgOiAxKTsKIAogCQkvKiBIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TICovCiAJCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCkBAIC00MjczLDggKzQ0NTgsNyBAQAogCQlpZiAoZnAtPnRwYV9zdGF0ZVtpXSA9PSBCTlgyWF9UUEFfU1RBUlQpCiAJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAogCQkJCQkgcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkJIGJwLT5yeF9idWZfc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCSBicC0+cnhfYnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyeF9idWYtPnNrYiA9IE5VTEw7CkBAIC00Mjg5LDE2ICs0NDczLDEzIEBACiAJdTE2IHJpbmdfcHJvZCwgY3FlX3JpbmdfcHJvZDsKIAlpbnQgaSwgajsKIAotCWJwLT5yeF9idWZfc2l6ZSA9IGJwLT5kZXYtPm10dTsKLQlicC0+cnhfYnVmX3NpemUgKz0gYnAtPnJ4X29mZnNldCArIEVUSF9PVlJFSEVBRCArCi0JCUJDTV9SWF9FVEhfUEFZTE9BRF9BTElHTjsKKwlicC0+cnhfYnVmX3NpemUgPSBicC0+ZGV2LT5tdHUgKyBFVEhfT1ZSRUhFQUQgKyBCTlgyWF9SWF9BTElHTjsKKwlEUChORVRJRl9NU0dfSUZVUCwKKwkgICAibXR1ICVkICByeF9idWZfc2l6ZSAlZFxuIiwgYnAtPmRldi0+bXR1LCBicC0+cnhfYnVmX3NpemUpOwogCiAJaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgewotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgInJ4X2J1Zl9zaXplICVkICBlZmZlY3RpdmVfbXR1ICVkXG4iLAotCQkgICBicC0+cnhfYnVmX3NpemUsIGJwLT5kZXYtPm10dSArIEVUSF9PVlJFSEVBRCk7CiAKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwkJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGopIHsKIAkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2FnZ19xdWV1ZXM7IGkrKykgewpAQCAtNDMyMSw3ICs0NTAyLDcgQEAKIAkJfQogCX0KIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGopIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CiAKIAkJZnAtPnJ4X2JkX2NvbnMgPSAwOwpAQCAtNDM5Niw4ICs0NTc3LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IGJwLT5yeF9yaW5nX3NpemU7IGkrKykgewogCQkJaWYgKGJueDJ4X2FsbG9jX3J4X3NrYihicCwgZnAsIHJpbmdfcHJvZCkgPCAwKSB7CiAJCQkJQk5YMlhfRVJSKCJ3YXMgb25seSBhYmxlIHRvIGFsbG9jYXRlICIKLQkJCQkJICAiJWQgcnggc2tic1xuIiwgaSk7Ci0JCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJCSAgIiVkIHJ4IHNrYnMgb24gcXVldWVbJWRdXG4iLCBpLCBqKTsKKwkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwogCQkJCWJyZWFrOwogCQkJfQogCQkJcmluZ19wcm9kID0gTkVYVF9SWF9JRFgocmluZ19wcm9kKTsKQEAgLTQ0MzMsNyArNDYxNCw3IEBACiB7CiAJaW50IGksIGo7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1RYX1JJTkdTOyBpKyspIHsKQEAgLTQ0ODYsMjcgKzQ2NjcsMjAgQEAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgZXRoX2NvbnRleHQgKmNvbnRleHQgPSBibngyeF9zcChicCwgY29udGV4dFtpXS5ldGgpOwogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJdTggc2JfaWQgPSBGUF9TQl9JRChmcCk7Ci0KLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2xvID0KLQkJCQkJCVU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+dHhfcHJvZHNfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5zdGF0aXN0aWNzX2RhdGEgPSAoQlBfQ0xfSUQoYnApIHwKLQkJCQlYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEUpOworCQl1OCBjbF9pZCA9IGZwLT5jbF9pZDsKKwkJdTggc2JfaWQgPSBmcC0+c2JfaWQ7CiAKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNiX2luZGV4X251bWJlcnMgPQogCQkJCQkJQk5YMlhfUlhfU0JfSU5ERVhfTlVNOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uY2xpZW50SWQgPSBGUF9DTF9JRChmcCk7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5jbGllbnRJZCA9IGNsX2lkOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5mbGFncyA9Ci0JCQlVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9NQ19BTElHTk1FTlQ7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tY19hbGlnbm1lbnRfc2l6ZSA9Ci0JCQlCQ01fUlhfRVRIX1BBWUxPQURfQUxJR047CisJCQkoVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfTUNfQUxJR05NRU5UIHwKKwkJCSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTKTsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXRpc3RpY3NfY291bnRlcl9pZCA9CisJCQkJCQljbF9pZDsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLm1jX2FsaWdubWVudF9sb2dfc2l6ZSA9CisJCQkJCQlCTlgyWF9SWF9BTElHTl9TSElGVDsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmJkX2J1ZmZfc2l6ZSA9CiAJCQkJCQlicC0+cnhfYnVmX3NpemU7CiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5iZF9wYWdlX2Jhc2VfaGkgPQpAQCAtNDUyNiw2ICs0NzAwLDIxIEBACiAJCQkJCQlVNjRfTE8oZnAtPnJ4X3NnZV9tYXBwaW5nKTsKIAkJfQogCisJCWNvbnRleHQtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9CisJCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCisJCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcsCisJCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKKworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfbG8gPQorCQkJCQkJVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2xvID0KKwkJCQkJCVU2NF9MTyhmcC0+dHhfcHJvZHNfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnN0YXRpc3RpY3NfZGF0YSA9IChjbF9pZCB8CisJCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKIAkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc2JfaW5kZXhfbnVtYmVyID0KIAkJCQkJCUNfU0JfRVRIX1RYX0NRX0lOREVYOwogCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKQEAgLTQ1MzQsMTAgKzQ3MjMsNiBAQAogCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAogCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfWENNX0FHLAogCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7Ci0JCWNvbnRleHQtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9Ci0JCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCi0JCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcsCi0JCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKIAl9CiB9CiAKQEAgLTQ1NDYsMTQgKzQ3MzEsMTUgQEAKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwogCWludCBpOwogCi0JaWYgKCFpc19tdWx0aShicCkpCisJaWYgKGJwLT5tdWx0aV9tb2RlID09IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkKIAkJcmV0dXJuOwogCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJJbml0aWFsaXppbmcgaW5kaXJlY3Rpb24gdGFibGVcbiIpOworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJJbml0aWFsaXppbmcgaW5kaXJlY3Rpb24gdGFibGUgIG11bHRpX21vZGUgJWRcbiIsIGJwLT5tdWx0aV9tb2RlKTsKIAlmb3IgKGkgPSAwOyBpIDwgVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX1NJWkU7IGkrKykKIAkJUkVHX1dSOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKIAkJCVRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9PRkZTRVQoZnVuYykgKyBpLAotCQkJQlBfQ0xfSUQoYnApICsgKGkgJSBicC0+bnVtX3F1ZXVlcykpOworCQkJYnAtPmZwLT5jbF9pZCArIChpICUgYnAtPm51bV9yeF9xdWV1ZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgYm54Mnhfc2V0X2NsaWVudF9jb25maWcoc3RydWN0IGJueDJ4ICpicCkKQEAgLTQ1NjMsMTMgKzQ3NDksMTMgQEAKIAlpbnQgaTsKIAogCXRzdG9ybV9jbGllbnQubXR1ID0gYnAtPmRldi0+bXR1OwotCXRzdG9ybV9jbGllbnQuc3RhdGlzdGljc19jb3VudGVyX2lkID0gQlBfQ0xfSUQoYnApOwogCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzID0KLQkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEU7CisJCQkJKFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSB8CisJCQkJIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFKTsKICNpZmRlZiBCQ01fVkxBTgogCWlmIChicC0+cnhfbW9kZSAmJiBicC0+dmxncnAgJiYgKGJwLT5mbGFncyAmIEhXX1ZMQU5fUlhfRkxBRykpIHsKIAkJdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgfD0KLQkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRTsKKwkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFOwogCQlEUChORVRJRl9NU0dfSUZVUCwgInZsYW4gcmVtb3ZhbCBlbmFibGVkXG4iKTsKIAl9CiAjZW5kaWYKQEAgLTQ1ODcsNiArNDc3Myw4IEBACiAJfQogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSBicC0+ZnBbaV0uY2xfaWQ7CisKIAkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwogCQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGJwLT5mcFtpXS5jbF9pZCksCiAJCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVswXSk7CkBAIC00NjE1LDE4ICs0ODAzLDIyIEBACiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2Ryb3BfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfZHJvcF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWNhc2UgQk5YMlhfUlhfTU9ERV9OT1JNQUw6CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWNhc2UgQk5YMlhfUlhfTU9ERV9BTExNVUxUSToKIAkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWNhc2UgQk5YMlhfUlhfTU9ERV9QUk9NSVNDOgogCQl0c3Rvcm1fbWFjX2ZpbHRlci51Y2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCUJOWDJYX0VSUigiQkFEIHJ4IG1vZGUgKCVkKVxuIiwgbW9kZSk7CiAJCWJyZWFrOwpAQCAtNDY3NywxOSArNDg2OSw2NCBAQAogCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7CiB9CiAKKy8qIENhbGN1bGF0ZXMgdGhlIHN1bSBvZiB2bl9taW5fcmF0ZXMuCisgICBJdCdzIG5lZWRlZCBmb3IgZnVydGhlciBub3JtYWxpemluZyBvZiB0aGUgbWluX3JhdGVzLgorICAgUmV0dXJuczoKKyAgICAgc3VtIG9mIHZuX21pbl9yYXRlcy4KKyAgICAgICBvcgorICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCisgICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaW5lc3MgYWxnb3JpdGhtIHNob3VsZCBiZSBkZWFjdGl2YXRlZC4KKyAgICAgSWYgbm90IGFsbCBtaW5fcmF0ZXMgYXJlIHplcm8gdGhlbiB0aG9zZSB0aGF0IGFyZSB6ZXJvZXMgd2lsbCBiZSBzZXQgdG8gMS4KKyAqLworc3RhdGljIHZvaWQgYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGFsbF96ZXJvID0gMTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCB2bjsKKworCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKKwlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKKwkJaW50IGZ1bmMgPSAyKnZuICsgcG9ydDsKKwkJdTMyIHZuX2NmZyA9CisJCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7CisJCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CisJCQkJICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKKworCQkvKiBTa2lwIGhpZGRlbiB2bnMgKi8KKwkJaWYgKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkKKwkJCWNvbnRpbnVlOworCisJCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLworCQlpZiAoIXZuX21pbl9yYXRlKQorCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7CisJCWVsc2UKKwkJCWFsbF96ZXJvID0gMDsKKworCQlicC0+dm5fd2VpZ2h0X3N1bSArPSB2bl9taW5fcmF0ZTsKKwl9CisKKwkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgZmFpcm5lc3MgKi8KKwlpZiAoYWxsX3plcm8pCisJCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKK30KKwogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9mdW5jKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IHRzdG9ybV9ldGhfZnVuY3Rpb25fY29tbW9uX2NvbmZpZyB0c3Rvcm1fY29uZmlnID0gezB9OwogCXN0cnVjdCBzdGF0c19pbmRpY2F0aW9uX2ZsYWdzIHN0YXRzX2ZsYWdzID0gezB9OwogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQlpbnQgaTsKKwlpbnQgaSwgajsKKwl1MzIgb2Zmc2V0OwogCXUxNiBtYXhfYWdnX3NpemU7CiAKIAlpZiAoaXNfbXVsdGkoYnApKSB7Ci0JCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gTVVMVElfRkxBR1M7CisJCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gTVVMVElfRkxBR1MoYnApOwogCQl0c3Rvcm1fY29uZmlnLnJzc19yZXN1bHRfbWFzayA9IE1VTFRJX01BU0s7CiAJfQorCWlmIChJU19FMUhNRihicCkpCisJCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzIHw9CisJCQkJVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTTsKIAogCXRzdG9ybV9jb25maWcubGVhZGluZ19jbGllbnRfaWQgPSBCUF9MX0lEKGJwKTsKIApAQCAtNDcwMCwxNyArNDkzNywyOSBAQAogCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOyAvKiBubyByeCB1bnRpbCBsaW5rIGlzIHVwICovCiAJYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOwogCi0JLyogcmVzZXQgeHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGkrKykgewotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIEJQX0NMX0lEKGJwKSkgKwotCQkgICAgICAgaSo0LCAwKTsKLQl9Ci0JLyogcmVzZXQgdHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGkrKykgewotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIEJQX0NMX0lEKGJwKSkgKwotCQkgICAgICAgaSo0LCAwKTsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQl1OCBjbF9pZCA9IGJwLT5mcFtpXS5jbF9pZDsKKworCQkvKiByZXNldCB4c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCisJCW9mZnNldCA9IEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7CisJCWZvciAoaiA9IDA7CisJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQorCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOworCisJCS8qIHJlc2V0IHRzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KKwkJb2Zmc2V0ID0gQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKKwkJZm9yIChqID0gMDsKKwkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCisJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7CisKKwkJLyogcmVzZXQgdXN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLworCQlvZmZzZXQgPSBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJIFVTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKKwkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKIAl9CiAKIAkvKiBJbml0IHN0YXRpc3RpY3MgcmVsYXRlZCBjb250ZXh0ICovCkBAIC00NzI2LDYgKzQ5NzUsMTEgQEAKIAlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAogCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOwogCisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7CisKIAlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksCiAJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7CiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKQEAgLTQ3NDUsNiArNDk5OSwxMyBAQAogCSAgICAgICBUU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKIAkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwogCisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCSAgICAgICBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCSAgICAgICBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewogCQlSRUdfV1I4KGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQsCiAJCQlJU19FMUhNRihicCkpOwpAQCAtNDc2NCwyMCArNTAyNSw5MSBAQAogCQltaW4oKHUzMikobWluKCh1MzIpOCwgKHUzMilNQVhfU0tCX0ZSQUdTKSAqCiAJCQkgIFNHRV9QQUdFX1NJWkUgKiBQQUdFU19QRVJfU0dFKSwKIAkJICAgICh1MzIpMHhmZmZmKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpLAorCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCiAJCSAgICAgICBVNjRfTE8oZnAtPnJ4X2NvbXBfbWFwcGluZykpOwogCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgRlBfQ0xfSUQoZnApKSArIDQsCisJCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSArIDQsCiAJCSAgICAgICBVNjRfSEkoZnAtPnJ4X2NvbXBfbWFwcGluZykpOwogCiAJCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIEZQX0NMX0lEKGZwKSksCisJCQkgVVNUT1JNX01BWF9BR0dfU0laRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSwKIAkJCSBtYXhfYWdnX3NpemUpOwogCX0KKworCS8qIGRyb3BsZXNzIGZsb3cgY29udHJvbCAqLworCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWggcnhfcGF1c2UgPSB7MH07CisKKwkJcnhfcGF1c2UuYmRfdGhyX2xvdyA9IDI1MDsKKwkJcnhfcGF1c2UuY3FlX3Rocl9sb3cgPSAyNTA7CisJCXJ4X3BhdXNlLmNvcyA9IDE7CisJCXJ4X3BhdXNlLnNnZV90aHJfbG93ID0gMDsKKwkJcnhfcGF1c2UuYmRfdGhyX2hpZ2ggPSAzNTA7CisJCXJ4X3BhdXNlLmNxZV90aHJfaGlnaCA9IDM1MDsKKwkJcnhfcGF1c2Uuc2dlX3Rocl9oaWdoID0gMDsKKworCQlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgeworCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJCWlmICghZnAtPmRpc2FibGVfdHBhKSB7CisJCQkJcnhfcGF1c2Uuc2dlX3Rocl9sb3cgPSAxNTA7CisJCQkJcnhfcGF1c2Uuc2dlX3Rocl9oaWdoID0gMjUwOworCQkJfQorCisKKwkJCW9mZnNldCA9IEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkJIFVTVE9STV9FVEhfUklOR19QQVVTRV9EQVRBX09GRlNFVChwb3J0LAorCQkJCQkJCQkgICBmcC0+Y2xfaWQpOworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wYXVzZV9kYXRhX2UxaCkvNDsKKwkJCSAgICAgaisrKQorCQkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LAorCQkJCSAgICAgICAoKHUzMiAqKSZyeF9wYXVzZSlbal0pOworCQl9CisJfQorCisJbWVtc2V0KCYoYnAtPmNtbmcpLCAwLCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSk7CisKKwkvKiBJbml0IHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgY29udGV4dHMgKi8KKwlpZiAoSVNfRTFITUYoYnApKSB7CisJCWludCB2bjsKKworCQkvKiBEdXJpbmcgaW5pdCB0aGVyZSBpcyBubyBhY3RpdmUgbGluaworCQkgICBVbnRpbCBsaW5rIGlzIHVwLCBzZXQgbGluayByYXRlIHRvIDEwR2JwcyAqLworCQlicC0+bGlua192YXJzLmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCk7CisKKwkJYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKKworCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCisJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQpOworCisJCS8qIEVuYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCisJCWJwLT5jbW5nLmZsYWdzLmNtbmdfZW5hYmxlcyA9CisJCQkJCUNNTkdfRkxBR1NfUEVSX1BPUlRfUkFURV9TSEFQSU5HX1ZOOworCQlpZiAoYnAtPnZuX3dlaWdodF9zdW0pCisJCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgfD0KKwkJCQkJQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTjsKKwkJZWxzZQorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJBbGwgTUlOIHZhbHVlcyBhcmUgemVyb2VzIgorCQkJICAgIiAgZmFpcm5lc3Mgd2lsbCBiZSBkaXNhYmxlZFxuIik7CisJfSBlbHNlIHsKKwkJLyogcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBhcmUgZGlzYWJsZWQgKi8KKwkJRFAoTkVUSUZfTVNHX0lGVVAsCisJCSAgICJzaW5nbGUgZnVuY3Rpb24gbW9kZSAgbWlubWF4IHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCX0KKworCisJLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCisJaWYgKGJwLT5wb3J0LnBtZikKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQorCQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJICAgICAgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSAqIDQsCisJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBsb2FkX2NvZGUpCkBAIC00ODE0LDEzICs1MTQ2LDE3IEBACiAJCWZwLT5jbF9pZCA9IEJQX0xfSUQoYnApICsgaTsKIAkJZnAtPnNiX2lkID0gZnAtPmNsX2lkOwogCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgImJueDJ4X2luaXRfc2IoJXAsJXApIGluZGV4ICVkICBjbF9pZCAlZCAgc2IgJWRcbiIsCi0JCSAgIGJwLCBmcC0+c3RhdHVzX2JsaywgaSwgRlBfQ0xfSUQoZnApLCBGUF9TQl9JRChmcCkpOworCQkgICAicXVldWVbJWRdOiAgYm54MnhfaW5pdF9zYiglcCwlcCkgIGNsX2lkICVkICBzYiAlZFxuIiwKKwkJICAgaSwgYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+Y2xfaWQsIGZwLT5zYl9pZCk7CiAJCWJueDJ4X2luaXRfc2IoYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+c3RhdHVzX2Jsa19tYXBwaW5nLAotCQkJICAgICAgRlBfU0JfSUQoZnApKTsKKwkJCSAgICAgIGZwLT5zYl9pZCk7CiAJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAJfQogCisJLyogZW5zdXJlIHN0YXR1cyBibG9jayBpbmRpY2VzIHdlcmUgcmVhZCAqLworCXJtYigpOworCisKIAlibngyeF9pbml0X2RlZl9zYihicCwgYnAtPmRlZl9zdGF0dXNfYmxrLCBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKIAkJCSAgREVGX1NCX0lEKTsKIAlibngyeF91cGRhdGVfZHNiX2lkeChicCk7CkBAIC01MTk4LDYgKzU1MzQsOCBAQAogCVJFR19XUihicCwgUFhQMl9SRUdfUlFfU1JDX0VORElBTl9NLCAxKTsKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NEVV9FTkRJQU5fTSwgMSk7CiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9EQkdfRU5ESUFOX00sIDEpOworCS8qIG1ha2Ugc3VyZSB0aGlzIHZhbHVlIGlzIDAgKi8KKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0hDX0VORElBTl9NLCAwKTsKIAogLyoJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9QQkZfU1dBUF9NT0RFLCAxKTsgKi8KIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1FNX1NXQVBfTU9ERSwgMSk7CkBAIC01MjY2LDE0ICs1NjA0LDYgQEAKIAl9CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0NPTU1PTl9TVEFSVCwgQlJCMV9DT01NT05fRU5EKTsKLQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpIHsKLQkJLyogZml4IGZvciBlbXVsYXRpb24gYW5kIEZQR0EgZm9yIG5vIHBhdXNlICovCi0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCwgNTEzKTsKLQkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8xLCA1MTMpOwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCwgMCk7Ci0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8xLCAwKTsKLQl9Ci0KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQ09NTU9OX1NUQVJULCBQUlNfQ09NTU9OX0VORCk7CiAJUkVHX1dSKGJwLCBQUlNfUkVHX0FfUFJTVV8yMCwgMHhmKTsKIAkvKiBzZXQgTklDIG1vZGUgKi8KQEAgLTUyODYsMzcgKzU2MTYsMTAgQEAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0RNX0NPTU1PTl9TVEFSVCwgVVNETV9DT01NT05fRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0RNX0NPTU1PTl9TVEFSVCwgWFNETV9DT01NT05fRU5EKTsKIAotCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJVFNUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlDU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVhTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJVVNUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCX0gZWxzZSB7IC8qIEUxICovCi0JCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQl9CisJYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0VNX0NPTU1PTl9TVEFSVCwgVFNFTV9DT01NT05fRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0VNX0NPTU1PTl9TVEFSVCwgVVNFTV9DT01NT05fRU5EKTsKQEAgLTUzMzgsOCArNTY0MSw3IEBACiAJCVJFR19XUihicCwgaSwgMHhjMGNhYzAxYSk7CiAJCS8qIFRPRE86IHJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgbWVhbmluZ2Z1bCAqLwogCX0KLQlpZiAoQ0hJUF9JU19FMUgoYnApKQotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBTUkNIX0NPTU1PTl9TVEFSVCwgU1JDSF9DT01NT05fRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBTUkNIX0NPTU1PTl9TVEFSVCwgU1JDSF9DT01NT05fRU5EKTsKIAlSRUdfV1IoYnAsIFNSQ19SRUdfU09GVF9SU1QsIDApOwogCiAJaWYgKHNpemVvZih1bmlvbiBjZHVfY29udGV4dCkgIT0gMTAyNCkKQEAgLTUzNTgsNiArNTY2MCwxMSBAQAogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQ0ZDX0NPTU1PTl9TVEFSVCwgQ0ZDX0NPTU1PTl9FTkQpOwogCVJFR19XUihicCwgQ0ZDX1JFR19JTklUX1JFRywgMHg3RkYpOworCS8qIGVuYWJsZSBjb250ZXh0IHZhbGlkYXRpb24gaW50ZXJydXB0IGZyb20gQ0ZDICovCisJUkVHX1dSKGJwLCBDRkNfUkVHX0NGQ19JTlRfTUFTSywgMCk7CisKKwkvKiBzZXQgdGhlIHRocmVzaG9sZHMgdG8gcHJldmVudCBDRkMvQ0RVIHJhY2UgKi8KKwlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDIwMDIwMDAwKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIEhDX0NPTU1PTl9TVEFSVCwgSENfQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19BRVVfQ09NTU9OX1NUQVJULCBNSVNDX0FFVV9DT01NT05fRU5EKTsKQEAgLTU0MTAsOSArNTcxNywxNCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXN3aXRjaCAoYnAtPmNvbW1vbi5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7Ci0JY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCS8qIEZhbiBmYWlsdXJlIGlzIGluZGljYXRlZCBieSBTUElPIDUgKi8KIAkJYm54Mnhfc2V0X3NwaW8oYnAsIE1JU0NfUkVHSVNURVJTX1NQSU9fNSwKIAkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19TUElPX0lOUFVUX0hJX1opOwpAQCAtNTQ1MSw2ICs1NzYzLDcgQEAKIHN0YXRpYyBpbnQgYm54MnhfaW5pdF9wb3J0KHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgbG93LCBoaWdoOwogCXUzMiB2YWw7CiAKIAlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgcG9ydCBpbml0ICBwb3J0ICV4XG4iLCBwb3J0KTsKQEAgLTU0ODUsNiArNTc5OCw4IEBACiAJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9TUkMwX0wyUCArIGZ1bmMqNCwgUFhQX09ORV9JTFQoaSkpOwogI2VuZGlmCiAJLyogUG9ydCBDTXMgY29tZSBoZXJlICovCisJYm54MnhfaW5pdF9ibG9jayhicCwgKHBvcnQgPyBYQ01fUE9SVDFfU1RBUlQgOiBYQ01fUE9SVDBfU1RBUlQpLAorCQkJICAgICAocG9ydCA/IFhDTV9QT1JUMV9FTkQgOiBYQ01fUE9SVDBfRU5EKSk7CiAKIAkvKiBQb3J0IFFNIGNvbWVzIGhlcmUgKi8KICNpZmRlZiBCQ01fSVNDU0kKQEAgLTU0OTUsMTIgKzU4MTAsMzggQEAKIAkJCSAgICAgZnVuYyA/IFRJTUVSU19QT1JUMV9FTkQgOiBUSU1FUlNfUE9SVDBfRU5EKTsKICNlbmRpZgogCS8qIFBvcnQgRFEgY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgQlJCMSBjb21lcyBoZXJlICovCisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCAocG9ydCA/IEJSQjFfUE9SVDFfU1RBUlQgOiBCUkIxX1BPUlQwX1NUQVJUKSwKKwkJCSAgICAgKHBvcnQgPyBCUkIxX1BPUlQxX0VORCA6IEJSQjFfUE9SVDBfRU5EKSk7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApICYmICFDSElQX0lTX0UxSChicCkpIHsKKwkJLyogbm8gcGF1c2UgZm9yIGVtdWxhdGlvbiBhbmQgRlBHQSAqLworCQlsb3cgPSAwOworCQloaWdoID0gNTEzOworCX0gZWxzZSB7CisJCWlmIChJU19FMUhNRihicCkpCisJCQlsb3cgPSAoKGJwLT5mbGFncyAmIE9ORV9QT1JUX0ZMQUcpID8gMTYwIDogMjQ2KTsKKwkJZWxzZSBpZiAoYnAtPmRldi0+bXR1ID4gNDA5NikgeworCQkJaWYgKGJwLT5mbGFncyAmIE9ORV9QT1JUX0ZMQUcpCisJCQkJbG93ID0gMTYwOworCQkJZWxzZSB7CisJCQkJdmFsID0gYnAtPmRldi0+bXR1OworCQkJCS8qICgyNCoxMDI0ICsgdmFsKjQpLzI1NiAqLworCQkJCWxvdyA9IDk2ICsgKHZhbC82NCkgKyAoKHZhbCAlIDY0KSA/IDEgOiAwKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlsb3cgPSAoKGJwLT5mbGFncyAmIE9ORV9QT1JUX0ZMQUcpID8gODAgOiAxNjApOworCQloaWdoID0gbG93ICsgNTY7CS8qIDE0KjEwMjQvMjU2ICovCisJfQorCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8wICsgcG9ydCo0LCBsb3cpOworCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCArIHBvcnQqNCwgaGlnaCk7CisKKwogCS8qIFBvcnQgUFJTIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFRTRE0gY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgQ1NETSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBVU0RNIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFhTRE0gY29tZXMgaGVyZSAqLworCiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IFRTRU1fUE9SVDFfU1RBUlQgOiBUU0VNX1BPUlQwX1NUQVJULAogCQkJICAgICBwb3J0ID8gVFNFTV9QT1JUMV9FTkQgOiBUU0VNX1BPUlQwX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IFVTRU1fUE9SVDFfU1RBUlQgOiBVU0VNX1BPUlQwX1NUQVJULApAQCAtNTUwOSw2ICs1ODUwLDcgQEAKIAkJCSAgICAgcG9ydCA/IENTRU1fUE9SVDFfRU5EIDogQ1NFTV9QT1JUMF9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBYU0VNX1BPUlQxX1NUQVJUIDogWFNFTV9QT1JUMF9TVEFSVCwKIAkJCSAgICAgcG9ydCA/IFhTRU1fUE9SVDFfRU5EIDogWFNFTV9QT1JUMF9FTkQpOworCiAJLyogUG9ydCBVUEIgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgWFBCIGNvbWVzIGhlcmUgKi8KIApAQCAtNTU2NywzNiArNTkwOSw2MyBAQAogCS8qIFBvcnQgRU1BQzEgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgREJVIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IERCRyBjb21lcyBoZXJlICovCisKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gTklHX1BPUlQxX1NUQVJUIDogTklHX1BPUlQwX1NUQVJULAogCQkJICAgICBwb3J0ID8gTklHX1BPUlQxX0VORCA6IE5JR19QT1JUMF9FTkQpOwogCiAJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMSk7CiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCXUzMiB3c3VtOwotCQlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgbV9jbW5nX3BvcnQ7Ci0JCWludCB2bjsKLQogCQkvKiAweDIgZGlzYWJsZSBlMWhvdiwgMHgxIGVuYWJsZSAqLwogCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX01GICsgcG9ydCo0LAogCQkgICAgICAgKElTX0UxSE1GKGJwKSA/IDB4MSA6IDB4MikpOwogCi0JCS8qIEluaXQgUkFURSBTSEFQSU5HIGFuZCBGQUlSTkVTUyBjb250ZXh0cy4KLQkJICAgSW5pdGlhbGl6ZSBhcyBpZiB0aGVyZSBpcyAxMEcgbGluay4gKi8KLQkJd3N1bSA9IGJueDJ4X2NhbGNfdm5fd3N1bShicCk7Ci0JCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnAsIChpbnQpd3N1bSwgMTAwMDAsICZtX2NtbmdfcG9ydCk7Ci0JCWlmIChJU19FMUhNRihicCkpCi0JCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCi0JCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0LAotCQkJCQl3c3VtLCAxMDAwMCwgJm1fY21uZ19wb3J0KTsKKwkJLyogc3VwcG9ydCBwYXVzZSByZXF1ZXN0cyBmcm9tIFVTRE0sIFRTRE0gYW5kIEJSQiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19FR1JFU1NfU1JDX0VOQUJMRV8wICsgcG9ydCo0LCAweDcpOworCisJCXsKKwkJCVJFR19XUihicCwgTklHX1JFR19MTEZDX0VOQUJMRV8wICsgcG9ydCo0LCAwKTsKKwkJCVJFR19XUihicCwgTklHX1JFR19MTEZDX09VVF9FTl8wICsgcG9ydCo0LCAwKTsKKwkJCVJFR19XUihicCwgTklHX1JFR19QQVVTRV9FTkFCTEVfMCArIHBvcnQqNCwgMSk7CisJCX0KIAl9CiAKIAkvKiBQb3J0IE1DUCBjb21lcyBoZXJlICovCiAJLyogUG9ydCBETUFFIGNvbWVzIGhlcmUgKi8KIAotCXN3aXRjaCAoYnAtPmNvbW1vbi5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7Ci0JY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCXsKKwkJdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlLCBhZXVfZ3Bpb19tYXNrLCBvZmZzZXQ7CisKKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKKwkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1osIHBvcnQpOworCisJCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHRoZSBzd2FwIHJlZ2lzdGVyIGlzCisJCSAgIHNldCBhbmQgYWN0aXZlICovCisJCXN3YXBfdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCk7CisJCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOworCisJCS8qIFNlbGVjdCBmdW5jdGlvbiB1cG9uIHBvcnQtc3dhcCBjb25maWd1cmF0aW9uICovCisJCWlmIChwb3J0ID09IDApIHsKKwkJCW9mZnNldCA9IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMDsKKwkJCWFldV9ncGlvX21hc2sgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgPworCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEgOgorCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzA7CisJCX0gZWxzZSB7CisJCQlvZmZzZXQgPSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzA7CisJCQlhZXVfZ3Bpb19tYXNrID0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpID8KKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIDoKKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xOworCQl9CisJCXZhbCA9IFJFR19SRChicCwgb2Zmc2V0KTsKKwkJLyogYWRkIEdQSU8zIHRvIGdyb3VwICovCisJCXZhbCB8PSBhZXVfZ3Bpb19tYXNrOworCQlSRUdfV1IoYnAsIG9mZnNldCwgdmFsKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJLyogYWRkIFNQSU8gNSB0byBncm91cCAwICovCiAJCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKIAkJdmFsIHw9IEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81OwpAQCAtNTY0MiwxMCArNjAxMSwxNyBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MzIgYWRkciwgdmFsOwogCWludCBpOwogCiAJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIGZ1bmMgaW5pdCAgZnVuYyAleFxuIiwgZnVuYyk7CiAKKwkvKiBzZXQgTVNJIHJlY29uZmlndXJlIGNhcGFiaWxpdHkgKi8KKwlhZGRyID0gKHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzApOworCXZhbCA9IFJFR19SRChicCwgYWRkcik7CisJdmFsIHw9IEhDX0NPTkZJR18wX1JFR19NU0lfQVRUTl9FTl8wOworCVJFR19XUihicCwgYWRkciwgdmFsKTsKKwogCWkgPSBGVU5DX0lMVF9CQVNFKGZ1bmMpOwogCiAJYm54MnhfaWx0X3dyKGJwLCBpLCBibngyeF9zcF9tYXBwaW5nKGJwLCBjb250ZXh0KSk7CkBAIC01Njc1LDkgKzYwNTEsNiBAQAogCX0KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBoY19saW1pdHNbZnVuY11bMF0sIGhjX2xpbWl0c1tmdW5jXVsxXSk7CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApKQotCQlSRUdfV1IoYnAsIEhDX1JFR19GVU5DX05VTV9QMCArIHBvcnQqNCwgZnVuYyk7Ci0KIAkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KIAlSRUdfV1IoYnAsIDB4MjExNCwgMHhmZmZmZmZmZik7CiAJUkVHX1dSKGJwLCAweDIxMjAsIDB4ZmZmZmZmZmYpOwpAQCAtNTgwNiwyMCArNjE3OSwxOSBAQAogCWludCBpOwogCiAJLyogZmFzdHBhdGggKi8KKwkvKiBDb21tb24gKi8KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCi0JCS8qIFN0YXR1cyBibG9ja3MgKi8KKwkJLyogc3RhdHVzIGJsb2NrcyAqLwogCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCiAJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKKwl9CisJLyogUnggKi8KKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCi0JCS8qIGZhc3QgcGF0aCByaW5nczogdHhfYnVmIHR4X2Rlc2MgcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwotCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKLQkJCSAgICAgICBibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOwotCisJCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCiAJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSk7CiAJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX21hcHBpbmcpLApAQCAtNTgzNiw2ICs2MjA4LDE1IEBACiAJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9tYXBwaW5nKSwKIAkJCSAgICAgICBCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CiAJfQorCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKKwl9CiAJLyogZW5kIG9mIGZhc3RwYXRoICovCiAKIAlCTlgyWF9QQ0lfRlJFRShicC0+ZGVmX3N0YXR1c19ibGssIGJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLApAQCAtNTg3OCwyOSArNjI1OSwyMCBAQAogCWludCBpOwogCiAJLyogZmFzdHBhdGggKi8KKwkvKiBDb21tb24gKi8KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCQlibngyeF9mcChicCwgaSwgYnApID0gYnA7CiAKLQkJLyogU3RhdHVzIGJsb2NrcyAqLworCQkvKiBzdGF0dXMgYmxvY2tzICovCiAJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCiAJCQkJJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAogCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spICsKIAkJCQlzaXplb2Yoc3RydWN0IGV0aF90eF9kYl9kYXRhKSk7CisJfQorCS8qIFJ4ICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAotCQlibngyeF9mcChicCwgaSwgaHdfdHhfcHJvZHMpID0KLQkJCQkodm9pZCAqKShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsaykgKyAxKTsKLQotCQlibngyeF9mcChicCwgaSwgdHhfcHJvZHNfbWFwcGluZykgPQotCQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpICsKLQkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKTsKLQotCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKLQorCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwogCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpLAogCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfYmQpICogTlVNX1JYX0JEKTsKIAkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLApAQCAtNTkxOSw2ICs2MjkxLDIzIEBACiAJCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCiAJCQkJQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwogCX0KKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisKKwkJYm54MnhfZnAoYnAsIGksIGh3X3R4X3Byb2RzKSA9CisJCQkJKHZvaWQgKikoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspICsgMSk7CisKKwkJYm54MnhfZnAoYnAsIGksIHR4X3Byb2RzX21hcHBpbmcpID0KKwkJCQlibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayk7CisKKwkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCisJCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBzd190eF9iZCkgKiBOVU1fVFhfQkQpOworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJfQogCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwogCiAJQk5YMlhfUENJX0FMTE9DKGJwLT5kZWZfc3RhdHVzX2JsaywgJmJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLApAQCAtNTk3Miw3ICs2MzYxLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKIAkJdTE2IGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKQEAgLTU5OTAsNyArNjM3OSw3IEBACiB7CiAJaW50IGksIGo7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgewpAQCAtNjAwMiw4ICs2MzkxLDcgQEAKIAogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKIAkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBicC0+cnhfYnVmX3NpemUsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCQlyeF9idWYtPnNrYiA9IE5VTEw7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC02MDM0LDEwICs2NDIyLDYgQEAKIAkJICAgInN0YXRlICV4XG4iLCBpLCBicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsCiAJCSAgIGJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkpOwogCi0JCWlmIChibngyeF9mcChicCwgaSwgc3RhdGUpICE9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCkKLQkJCUJOWDJYX0VSUigiSVJRIG9mIGZwICMlZCBiZWluZyBmcmVlZCB3aGlsZSAiCi0JCQkJICAic3RhdGUgIT0gY2xvc2VkXG4iLCBpKTsKLQogCQlmcmVlX2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsICZicC0+ZnBbaV0pOwogCX0KIH0KQEAgLTYwNDksMzIgKzY0MzMsMzcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7CiAJCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJWF9GTEFHOwogCisJfSBlbHNlIGlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgeworCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKKwkJcGNpX2Rpc2FibGVfbXNpKGJwLT5wZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lfRkxBRzsKKwogCX0gZWxzZQogCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBibngyeF9lbmFibGVfbXNpeChzdHJ1Y3QgYm54MnggKmJwKQogewotCWludCBpLCByYywgb2Zmc2V0OworCWludCBpLCByYywgb2Zmc2V0ID0gMTsKKwlpbnQgaWd1X3ZlYyA9IDA7CiAKLQlicC0+bXNpeF90YWJsZVswXS5lbnRyeSA9IDA7Ci0Jb2Zmc2V0ID0gMTsKLQlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbMF0uZW50cnkgPSAwIChzbG93cGF0aClcbiIpOworCWJwLT5tc2l4X3RhYmxlWzBdLmVudHJ5ID0gaWd1X3ZlYzsKKwlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbMF0uZW50cnkgPSAlZCAoc2xvd3BhdGgpXG4iLCBpZ3VfdmVjKTsKIAogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCWludCBpZ3VfdmVjID0gb2Zmc2V0ICsgaSArIEJQX0xfSUQoYnApOwotCisJCWlndV92ZWMgPSBCUF9MX0lEKGJwKSArIG9mZnNldCArIGk7CiAJCWJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLmVudHJ5ID0gaWd1X3ZlYzsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWyVkXS5lbnRyeSA9ICVkICIKIAkJICAgIihmYXN0cGF0aCAjJXUpXG4iLCBpICsgb2Zmc2V0LCBpZ3VfdmVjLCBpKTsKIAl9CiAKIAlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgJmJwLT5tc2l4X3RhYmxlWzBdLAotCQkJICAgICBicC0+bnVtX3F1ZXVlcyArIG9mZnNldCk7CisJCQkgICAgIEJOWDJYX05VTV9RVUVVRVMoYnApICsgb2Zmc2V0KTsKIAlpZiAocmMpIHsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0ktWCBpcyBub3QgYXR0YWluYWJsZVxuIik7Ci0JCXJldHVybiAtMTsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0ktWCBpcyBub3QgYXR0YWluYWJsZSAgcmMgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KKwogCWJwLT5mbGFncyB8PSBVU0lOR19NU0lYX0ZMQUc7CiAKIAlyZXR1cm4gMDsKQEAgLTYwOTIsMjcgKzY0ODEsNjAgQEAKIAl9CiAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlzcHJpbnRmKGZwLT5uYW1lLCAiJXMuZnAlZCIsIGJwLT5kZXYtPm5hbWUsIGkpOwogCQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwKLQkJCQkgYm54MnhfbXNpeF9mcF9pbnQsIDAsCi0JCQkJIGJwLT5kZXYtPm5hbWUsICZicC0+ZnBbaV0pOworCQkJCSBibngyeF9tc2l4X2ZwX2ludCwgMCwgZnAtPm5hbWUsIGZwKTsKIAkJaWYgKHJjKSB7Ci0JCQlCTlgyWF9FUlIoInJlcXVlc3QgZnAgIyVkIGlycSBmYWlsZWQgIHJjIC0lZFxuIiwKLQkJCQkgIGkgKyBvZmZzZXQsIC1yYyk7CisJCQlCTlgyWF9FUlIoInJlcXVlc3QgZnAgIyVkIGlycSBmYWlsZWQgIHJjICVkXG4iLCBpLCByYyk7CiAJCQlibngyeF9mcmVlX21zaXhfaXJxcyhicCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJYm54MnhfZnAoYnAsIGksIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKKwkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSVJROwogCX0KIAorCWkgPSBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKKwlpZiAoaXNfbXVsdGkoYnApKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkgICAgICAgIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwICVkIC0gJWRcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCisJCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXRdLnZlY3RvciwKKwkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwICVkXG4iLAorCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAorCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9lbmFibGVfbXNpKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHJjOworCisJcmMgPSBwY2lfZW5hYmxlX21zaShicC0+cGRldik7CisJaWYgKHJjKSB7CisJCURQKE5FVElGX01TR19JRlVQLCAiTVNJIGlzIG5vdCBhdHRhaW5hYmxlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJX0ZMQUc7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBibngyeF9yZXFfaXJxKHN0cnVjdCBibngyeCAqYnApCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKLQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJ4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKQorCQlmbGFncyA9IDA7CisJZWxzZQorCQlmbGFncyA9IElSUUZfU0hBUkVEOworCisJcmMgPSByZXF1ZXN0X2lycShicC0+cGRldi0+aXJxLCBibngyeF9pbnRlcnJ1cHQsIGZsYWdzLAogCQkJIGJwLT5kZXYtPm5hbWUsIGJwLT5kZXYpOwogCWlmICghcmMpCiAJCWJueDJ4X2ZwKGJwLCAwLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9JUlE7CkBAIC02MTI0LDcgKzY1NDYsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5hcGlfZW5hYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogfQogCkBAIC02MTMyLDcgKzY1NTQsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5hcGlfZGlzYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIH0KIApAQCAtNjE0MCwxMCArNjU2MiwxMCBAQAogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+aW50cl9zZW0pKSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKIAkJCWJueDJ4X25hcGlfZW5hYmxlKGJwKTsKIAkJCWJueDJ4X2ludF9lbmFibGUoYnApOworCQkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQorCQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKIAkJfQogCX0KIH0KQEAgLTYxNTIsMTAgKzY1NzQsOCBAQAogewogCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnAsIGRpc2FibGVfaHcpOwogCWJueDJ4X25hcGlfZGlzYWJsZShicCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKLQkJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KLQl9CisJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKKwlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLwogfQogCiAvKgpAQCAtNjE3MSw5ICs2NTkxLDkgQEAKIAkgKiB1bmljYXN0cyAwLTMxOnBvcnQwIDMyLTYzOnBvcnQxCiAJICogbXVsdGljYXN0IDY0LTEyNzpwb3J0MCAxMjgtMTkxOnBvcnQxCiAJICovCi0JY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gMjsKKwljb25maWctPmhkci5sZW5ndGggPSAyOwogCWNvbmZpZy0+aGRyLm9mZnNldCA9IHBvcnQgPyAzMiA6IDA7Ci0JY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCS8qIHByaW1hcnkgTUFDICovCkBAIC02MTk4LDkgKzY2MTgsOSBAQAogCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIpOwogCiAJLyogYnJvYWRjYXN0ICovCi0JY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9IDB4ZmZmZjsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0gMHhmZmZmOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIgPSAweGZmZmY7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9IGNwdV90b19sZTE2KDB4ZmZmZik7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9IGNwdV90b19sZTE2KDB4ZmZmZik7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9IGNwdV90b19sZTE2KDB4ZmZmZik7CiAJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmZsYWdzID0gY3B1X3RvX2xlMTYocG9ydCk7CiAJaWYgKHNldCkKIAkJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0KQEAgLTYyMjksOSArNjY0OSw5IEBACiAJICogdW5pY2FzdHM6IGJ5IGZ1bmMgbnVtYmVyCiAJICogbXVsdGljYXN0OiAyMCtGVU5DKjIwLCAyMCBlYWNoCiAJICovCi0JY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gMTsKKwljb25maWctPmhkci5sZW5ndGggPSAxOwogCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJQX0ZVTkMoYnApOwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkvKiBwcmltYXJ5IE1BQyAqLwpAQCAtNjI2NSw3ICs2Njg1LDcgQEAKIAkJCSAgICAgaW50ICpzdGF0ZV9wLCBpbnQgcG9sbCkKIHsKIAkvKiBjYW4gdGFrZSBhIHdoaWxlIGlmIGFueSBwb3J0IGlzIHJ1bm5pbmcgKi8KLQlpbnQgY250ID0gNTAwOworCWludCBjbnQgPSA1MDAwOwogCiAJRFAoTkVUSUZfTVNHX0lGVVAsICIlcyBmb3Igc3RhdGUgdG8gYmVjb21lICV4IG9uIElEWCBbJWRdXG4iLAogCSAgIHBvbGwgPyAicG9sbGluZyIgOiAid2FpdGluZyIsIHN0YXRlLCBpZHgpOwpAQCAtNjI4Myw4ICs2NzAzLDEyIEBACiAJCX0KIAogCQltYigpOyAvKiBzdGF0ZSBpcyBjaGFuZ2VkIGJ5IGJueDJ4X3NwX2V2ZW50KCkgKi8KLQkJaWYgKCpzdGF0ZV9wID09IHN0YXRlKQorCQlpZiAoKnN0YXRlX3AgPT0gc3RhdGUpIHsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCQlEUChORVRJRl9NU0dfSUZVUCwgImV4aXQgIChjbnQgJWQpXG4iLCA1MDAwIC0gY250KTsKKyNlbmRpZgogCQkJcmV0dXJuIDA7CisJCX0KIAogCQltc2xlZXAoMSk7CiAJfQpAQCAtNjMxNywxOSArNjc0MSw2OCBAQAogCiBzdGF0aWMgaW50IGJueDJ4X3NldHVwX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKIHsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07CisKIAkvKiByZXNldCBJR1Ugc3RhdGUgKi8KLQlibngyeF9hY2tfc2IoYnAsIGJwLT5mcFtpbmRleF0uc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOworCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKIAogCS8qIFNFVFVQIHJhbXJvZCAqLwotCWJwLT5mcFtpbmRleF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsIGluZGV4LCAwKTsKKwlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsCisJCSAgICAgIGZwLT5jbF9pZCwgMCk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmV0dXJuIGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9PUEVOLCBpbmRleCwKLQkJCQkgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMCk7CisJCQkJICYoZnAtPnN0YXRlKSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOworCitzdGF0aWMgdm9pZCBibngyeF9zZXRfaW50X21vZGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgbnVtX3F1ZXVlczsKKworCXN3aXRjaCAoaW50X21vZGUpIHsKKwljYXNlIElOVF9NT0RFX0lOVHg6CisJY2FzZSBJTlRfTU9ERV9NU0k6CisJCW51bV9xdWV1ZXMgPSAxOworCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsCisJCSAgICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgbnVtX3F1ZXVlcyk7CisJCWJyZWFrOworCisJY2FzZSBJTlRfTU9ERV9NU0lYOgorCWRlZmF1bHQ6CisJCWlmIChicC0+bXVsdGlfbW9kZSA9PSBFVEhfUlNTX01PREVfUkVHVUxBUikKKwkJCW51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAorCQkJCQkgICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7CisJCWVsc2UKKwkJCW51bV9xdWV1ZXMgPSAxOworCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHJ4IHF1ZXVlcyB0byAlZCIKKwkJICAgIiAgbnVtYmVyIG9mIHR4IHF1ZXVlcyB0byAlZFxuIiwKKwkJICAgYnAtPm51bV9yeF9xdWV1ZXMsIGJwLT5udW1fdHhfcXVldWVzKTsKKwkJLyogaWYgd2UgY2FuJ3QgdXNlIE1TSS1YIHdlIG9ubHkgbmVlZCBvbmUgZnAsCisJCSAqIHNvIHRyeSB0byBlbmFibGUgTVNJLVggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCisJCSAqIGFuZCBmYWxsYmFjayB0byBNU0kgb3IgbGVnYWN5IElOVHggd2l0aCBvbmUgZnAKKwkJICovCisJCWlmIChibngyeF9lbmFibGVfbXNpeChicCkpIHsKKwkJCS8qIGZhaWxlZCB0byBlbmFibGUgTVNJLVggKi8KKwkJCW51bV9xdWV1ZXMgPSAxOworCQkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQkJYnAtPm51bV90eF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQkJaWYgKGJwLT5tdWx0aV9tb2RlKQorCQkJCUJOWDJYX0VSUigiTXVsdGkgcmVxdWVzdGVkIGJ1dCBmYWlsZWQgdG8gIgorCQkJCQkgICJlbmFibGUgTVNJLVggIHNldCBudW1iZXIgb2YgIgorCQkJCQkgICJxdWV1ZXMgdG8gJWRcbiIsIG51bV9xdWV1ZXMpOworCQl9CisJCWJyZWFrOworCX0KKwlicC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBicC0+bnVtX3R4X3F1ZXVlczsKK30KKwogc3RhdGljIHZvaWQgYm54Mnhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggcnRubF9sb2NrICovCkBAIC02MzM4LDU2ICs2ODExLDI4IEBACiAJdTMyIGxvYWRfY29kZTsKIAlpbnQgaSwgcmMgPSAwOwogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlEUChORVRJRl9NU0dfSUZVUCwgImVudGVyICBsb2FkX21vZGUgJWRcbiIsIGxvYWRfbW9kZSk7CiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCiAJCXJldHVybiAtRVBFUk07CiAjZW5kaWYKIAogCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRDsKIAotCWlmICh1c2VfaW50YSkgewotCQlicC0+bnVtX3F1ZXVlcyA9IDE7Ci0KLQl9IGVsc2UgewotCQlpZiAoKHVzZV9tdWx0aSA+IDEpICYmICh1c2VfbXVsdGkgPD0gQlBfTUFYX1FVRVVFUyhicCkpKQotCQkJLyogdXNlciByZXF1ZXN0ZWQgbnVtYmVyICovCi0JCQlicC0+bnVtX3F1ZXVlcyA9IHVzZV9tdWx0aTsKLQotCQllbHNlIGlmICh1c2VfbXVsdGkpCi0JCQlicC0+bnVtX3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX29ubGluZV9jcHVzKCksCi0JCQkJCSAgICAgICBCUF9NQVhfUVVFVUVTKGJwKSk7Ci0JCWVsc2UKLQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgInNldCBudW1iZXIgb2YgcXVldWVzIHRvICVkXG4iLCBicC0+bnVtX3F1ZXVlcyk7Ci0KLQkJLyogaWYgd2UgY2FuJ3QgdXNlIE1TSS1YIHdlIG9ubHkgbmVlZCBvbmUgZnAsCi0JCSAqIHNvIHRyeSB0byBlbmFibGUgTVNJLVggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCi0JCSAqIGFuZCBmYWxsYmFjayB0byBNU0kgb3IgbGVnYWN5IElOVHggd2l0aCBvbmUgZnAKLQkJICovCi0JCXJjID0gYm54MnhfZW5hYmxlX21zaXgoYnApOwotCQlpZiAocmMpIHsKLQkJCS8qIGZhaWxlZCB0byBlbmFibGUgTVNJLVggKi8KLQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQkJCWlmICh1c2VfbXVsdGkpCi0JCQkJQk5YMlhfRVJSKCJNdWx0aSByZXF1ZXN0ZWQgYnV0IGZhaWxlZCIKLQkJCQkJICAiIHRvIGVuYWJsZSBNU0ktWFxuIik7Ci0JCX0KLQl9CisJYm54Mnhfc2V0X2ludF9tb2RlKGJwKTsKIAogCWlmIChibngyeF9hbGxvY19tZW0oYnApKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcChicCwgaSwgZGlzYWJsZV90cGEpID0KIAkJCQkJKChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpID09IDApOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfYWRkKGJwLT5kZXYsICZibngyeF9mcChicCwgaSwgbmFwaSksCiAJCQkgICAgICAgYm54MnhfcG9sbCwgMTI4KTsKIAogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCWZwLT5wb2xsX25vX3dvcmsgPSAwOwpAQCAtNjQwNSwxNCArNjg1MCwyMiBAQAogCQkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7CiAJCQlnb3RvIGxvYWRfZXJyb3IxOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVhcbiIsIGJwLT5kZXYtPm5hbWUpOwogCX0gZWxzZSB7CisJCWlmICgocmMgIT0gLUVOT01FTSkgJiYgKGludF9tb2RlICE9IElOVF9NT0RFX0lOVHgpKQorCQkJYm54MnhfZW5hYmxlX21zaShicCk7CiAJCWJueDJ4X2Fja19pbnQoYnApOwogCQlyYyA9IGJueDJ4X3JlcV9pcnEoYnApOwogCQlpZiAocmMpIHsKIAkJCUJOWDJYX0VSUigiSVJRIHJlcXVlc3QgZmFpbGVkICByYyAlZCwgYWJvcnRpbmdcbiIsIHJjKTsKKwkJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykKKwkJCQlwY2lfZGlzYWJsZV9tc2koYnAtPnBkZXYpOwogCQkJZ290byBsb2FkX2Vycm9yMTsKIAkJfQorCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpIHsKKwkJCWJwLT5kZXYtPmlycSA9IGJwLT5wZGV2LT5pcnE7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSSAgSVJRICVkXG4iLAorCQkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5wZGV2LT5pcnEpOworCQl9CiAJfQogCiAJLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AKQEAgLTY0MzUsMTEgKzY4ODgsMTEgQEAKIAl9IGVsc2UgewogCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCi0JCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIGxvYWQgY291bnRzIGJlZm9yZSB1cyAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCAtIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWxvYWRfY291bnRbMF0rKzsKIAkJbG9hZF9jb3VudFsxICsgcG9ydF0rKzsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgbmV3IGxvYWQgY291bnRzICAgICAgICVkLCAlZCwgJWRcbiIsCisJCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIC0gbmV3IGxvYWQgY291bnRzICAlZCwgJWQsICVkXG4iLAogCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKIAkJaWYgKGxvYWRfY291bnRbMF0gPT0gMSkKIAkJCWxvYWRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTjsKQEAgLTY0ODYsNyArNjkzOSw3IEBACiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKQogCQlpZiAoYnAtPm1mX2NvbmZpZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfRElTQUJMRUQpIHsKLQkJCUJOWDJYX0VSUigiISEhICBtZl9jZmcgZnVuY3Rpb24gZGlzYWJsZWRcbiIpOworCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJtZl9jZmcgZnVuY3Rpb24gZGlzYWJsZWRcbiIpOwogCQkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRElTQUJMRUQ7CiAJCX0KIApAQCAtNjUwMywxOSArNjk1NiwxOSBAQAogCQlibngyeF9zZXRfbWFjX2FkZHJfZTFoKGJwLCAxKTsKIAogCWlmIChicC0+cG9ydC5wbWYpCi0JCWJueDJ4X2luaXRpYWxfcGh5X2luaXQoYnApOworCQlibngyeF9pbml0aWFsX3BoeV9pbml0KGJwLCBsb2FkX21vZGUpOwogCiAJLyogU3RhcnQgZmFzdCBwYXRoICovCiAJc3dpdGNoIChsb2FkX21vZGUpIHsKIAljYXNlIExPQURfTk9STUFMOgogCQkvKiBUeCBxdWV1ZSBzaG91bGQgYmUgb25seSByZWVuYWJsZWQgKi8KLQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKKwkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOwogCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KIAkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBMT0FEX09QRU46Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGJwLT5kZXYpOworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGJwLT5kZXYpOwogCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KIAkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CiAJCWJyZWFrOwpAQCAtNjU0OCwzMyArNzAwMSwzMiBAQAogCWJwLT5wb3J0LnBtZiA9IDA7CiAJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLwogCWJueDJ4X2ZyZWVfc2ticyhicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKIGxvYWRfZXJyb3IyOgogCS8qIFJlbGVhc2UgSVJRcyAqLwogCWJueDJ4X2ZyZWVfaXJxKGJwKTsKIGxvYWRfZXJyb3IxOgogCWJueDJ4X25hcGlfZGlzYWJsZShicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIAotCS8qIFRCRCB3ZSByZWFsbHkgbmVlZCB0byByZXNldCB0aGUgY2hpcAotCSAgIGlmIHdlIHdhbnQgdG8gcmVjb3ZlciBmcm9tIHRoaXMgKi8KIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgYm54Mnhfc3RvcF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCiB7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOwogCWludCByYzsKIAogCS8qIGhhbHQgdGhlIGNvbm5lY3Rpb24gKi8KLQlicC0+ZnBbaW5kZXhdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCBpbmRleCwgMCwgaW5kZXgsIDApOworCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7CisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgaW5kZXgsIDAsIGZwLT5jbF9pZCwgMCk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCBpbmRleCwKLQkJCSAgICAgICAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAxKTsKKwkJCSAgICAgICAmKGZwLT5zdGF0ZSksIDEpOwogCWlmIChyYykgLyogdGltZW91dCAqLwogCQlyZXR1cm4gcmM7CiAKQEAgLTY1ODMsMTMgKzcwMzUsMTMgQEAKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9DTE9TRUQsIGluZGV4LAotCQkJICAgICAgICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDEpOworCQkJICAgICAgICYoZnAtPnN0YXRlKSwgMSk7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3BfbGVhZGluZyhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUxNiBkc2Jfc3BfcHJvZF9pZHg7CisJX19sZTE2IGRzYl9zcF9wcm9kX2lkeDsKIAkvKiBpZiB0aGUgb3RoZXIgcG9ydCBpcyBoYW5kbGluZyB0cmFmZmljLAogCSAgIHRoaXMgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSAqLwogCWludCBjbnQgPSA1MDA7CkBAIC02NTk5LDcgKzcwNTEsNyBAQAogCiAJLyogU2VuZCBIQUxUIHJhbXJvZCAqLwogCWJwLT5mcFswXS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgMCwgMCwgQlBfQ0xfSUQoYnApLCAwKTsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCAwLCAwLCBicC0+ZnAtPmNsX2lkLCAwKTsKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9IQUxURUQsIDAsCkBAIC02NjIzLDkgKzcwNzUsOCBAQAogCQkJICAgKmJwLT5kc2Jfc3BfcHJvZCwgZHNiX3NwX3Byb2RfaWR4KTsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJCQlibngyeF9wYW5pYygpOwotI2Vsc2UKLQkJCXJjID0gLUVCVVNZOwogI2VuZGlmCisJCQlyYyA9IC1FQlVTWTsKIAkJCWJyZWFrOwogCQl9CiAJCWNudC0tOwpAQCAtNjY0OCw4ICs3MDk5LDYgQEAKIAlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CiAJUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKIAotCVJFR19XUihicCwgSENfUkVHX0NPTkZJR18wICsgcG9ydCo0LCAweDEwMDApOwotCiAJLyogQ2xlYXIgSUxUICovCiAJYmFzZSA9IEZVTkNfSUxUX0JBU0UoZnVuYyk7CiAJZm9yIChpID0gYmFzZTsgaSA8IGJhc2UgKyBJTFRfUEVSX0ZVTkM7IGkrKykKQEAgLTY3MzEsMTUgKzcxODAsMTQgQEAKIAkvKiBSZWxlYXNlIElSUXMgKi8KIAlibngyeF9mcmVlX2lycShicCk7CiAKLQkvKiBXYWl0IHVudGlsIHR4IGZhc3QgcGF0aCB0YXNrcyBjb21wbGV0ZSAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJLyogV2FpdCB1bnRpbCB0eCBmYXN0cGF0aCB0YXNrcyBjb21wbGV0ZSAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCWNudCA9IDEwMDA7Ci0JCXNtcF9ybWIoKTsKIAkJd2hpbGUgKGJueDJ4X2hhc190eF93b3JrX3VubG9hZChmcCkpIHsKIAotCQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJCWJueDJ4X3R4X2ludChmcCk7CiAJCQlpZiAoIWNudCkgewogCQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBxdWV1ZVslZF1cbiIsCiAJCQkJCSAgaSk7CkBAIC02NzUyLDcgKzcyMDAsNiBAQAogCQkJfQogCQkJY250LS07CiAJCQltc2xlZXAoMSk7Ci0JCQlzbXBfcm1iKCk7CiAJCX0KIAl9CiAJLyogR2l2ZSBIVyB0aW1lIHRvIGRpc2NhcmQgb2xkIHR4IG1lc3NhZ2VzICovCkBAIC02NzY0LDE1ICs3MjExLDE1IEBACiAKIAkJYm54Mnhfc2V0X21hY19hZGRyX2UxKGJwLCAwKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoXzZiOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGg7IGkrKykKIAkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldKTsKIAotCQljb25maWctPmhkci5sZW5ndGhfNmIgPSBpOworCQljb25maWctPmhkci5sZW5ndGggPSBpOwogCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCiAJCQljb25maWctPmhkci5vZmZzZXQgPSBCTlgyWF9NQVhfRU1VTF9NVUxUSSooMSArIHBvcnQpOwogCQllbHNlCiAJCQljb25maWctPmhkci5vZmZzZXQgPSBCTlgyWF9NQVhfTVVMVElDQVNUKigxICsgcG9ydCk7Ci0JCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwkJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAkJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtNjgzNiwxMSArNzI4MywxMSBAQAogCWlmICghQlBfTk9NQ1AoYnApKQogCQlyZXNldF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7CiAJZWxzZSB7Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgbG9hZCBjb3VudHMgICAgICAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIC0gbG9hZCBjb3VudHMgICAgICAlZCwgJWQsICVkXG4iLAogCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKIAkJbG9hZF9jb3VudFswXS0tOwogCQlsb2FkX2NvdW50WzEgKyBwb3J0XS0tOwotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCAtIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWlmIChsb2FkX2NvdW50WzBdID09IDApCiAJCQlyZXNldF9jb2RlID0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT047CkBAIC02ODYwLDEzICs3MzA3LDE0IEBACiAJLyogUmVwb3J0IFVOTE9BRF9ET05FIHRvIE1DUCAqLwogCWlmICghQlBfTk9NQ1AoYnApKQogCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCiAJYnAtPnBvcnQucG1mID0gMDsKIAogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIApAQCAtNjkwOCw2ICs3MzU2LDY0IEBACiAgKiBJbml0IHNlcnZpY2UgZnVuY3Rpb25zCiAgKi8KIAorc3RhdGljIGlubGluZSB1MzIgYm54MnhfZ2V0X3ByZXRlbmRfcmVnKHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQoreworCXN3aXRjaCAoZnVuYykgeworCWNhc2UgMDogcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjA7CisJY2FzZSAxOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMTsKKwljYXNlIDI6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YyOworCWNhc2UgMzoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjM7CisJY2FzZSA0OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNDsKKwljYXNlIDU6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y1OworCWNhc2UgNjoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjY7CisJY2FzZSA3OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNzsKKwlkZWZhdWx0OgorCQlCTlgyWF9FUlIoIlVuc3VwcG9ydGVkIGZ1bmN0aW9uIGluZGV4OiAlZFxuIiwgZnVuYyk7CisJCXJldHVybiAodTMyKSgtMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF91bmRpX2ludF9kaXNhYmxlX2UxaChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgb3JpZ19mdW5jKQoreworCXUzMiByZWcgPSBibngyeF9nZXRfcHJldGVuZF9yZWcoYnAsIG9yaWdfZnVuYyksIG5ld192YWw7CisKKwkvKiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKKwkvKiBQcmV0ZW5kIHRvIGJlIGZ1bmN0aW9uIDAgKi8KKwlSRUdfV1IoYnAsIHJlZywgMCk7CisJLyogRmx1c2ggdGhlIEdSQyB0cmFuc2FjdGlvbiAoaW4gdGhlIGNoaXApICovCisJbmV3X3ZhbCA9IFJFR19SRChicCwgcmVnKTsKKwlpZiAobmV3X3ZhbCAhPSAwKSB7CisJCUJOWDJYX0VSUigiSG1tbS4uLiBQcmV0ZW5kIHJlZ2lzdGVyIHdhc24ndCB1cGRhdGVkOiAoMCwlZCkhXG4iLAorCQkJICBuZXdfdmFsKTsKKwkJQlVHKCk7CisJfQorCisJLyogRnJvbSBub3cgd2UgYXJlIGluIHRoZSAibGlrZS1FMSIgbW9kZSAqLworCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKKworCS8qIEZsdXNoIGFsbCBvdXRzdGFuZGluZyB3cml0ZXMgKi8KKwltbWlvd2IoKTsKKworCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGZ1bnRpb24gc2V0dGluZ3MgKi8KKwlSRUdfV1IoYnAsIHJlZywgb3JpZ19mdW5jKTsKKwluZXdfdmFsID0gUkVHX1JEKGJwLCByZWcpOworCWlmIChuZXdfdmFsICE9IG9yaWdfZnVuYykgeworCQlCTlgyWF9FUlIoIkhtbW0uLi4gUHJldGVuZCByZWdpc3RlciB3YXNuJ3QgdXBkYXRlZDogKCVkLCVkKSFcbiIsCisJCQkgIG9yaWdfZnVuYywgbmV3X3ZhbCk7CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VuZGlfaW50X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCit7CisJaWYgKENISVBfSVNfRTFIKGJwKSkKKwkJYm54MnhfdW5kaV9pbnRfZGlzYWJsZV9lMWgoYnAsIGZ1bmMpOworCWVsc2UKKwkJYm54MnhfaW50X2Rpc2FibGUoYnApOworfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfdW5kaV91bmxvYWQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgdmFsOwpAQCAtNjk1OCw4ICs3NDY0LDcgQEAKIAkJCS8qIG5vdyBpdCdzIHNhZmUgdG8gcmVsZWFzZSB0aGUgbG9jayAqLwogCQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1VOREkpOwogCi0JCQlSRUdfV1IoYnAsIChCUF9QT1JUKGJwKSA/IEhDX1JFR19DT05GSUdfMSA6Ci0JCQkJICAgIEhDX1JFR19DT05GSUdfMCksIDB4MTAwMCk7CisJCQlibngyeF91bmRpX2ludF9kaXNhYmxlKGJwLCBmdW5jKTsKIAogCQkJLyogY2xvc2UgaW5wdXQgdHJhZmZpYyBhbmQgd2FpdCBmb3IgaXQgKi8KIAkJCS8qIERvIG5vdCByY3YgcGFja2V0cyB0byBCUkIgKi8KQEAgLTcwMjcsNiArNzUzMiwxMyBAQAogCWJwLT5saW5rX3BhcmFtcy5jaGlwX2lkID0gYnAtPmNvbW1vbi5jaGlwX2lkOwogCUJOWDJYX0RFVl9JTkZPKCJjaGlwIElEIGlzIDB4JXhcbiIsIGlkKTsKIAorCXZhbCA9IChSRUdfUkQoYnAsIDB4Mjg3NCkgJiAweDU1KTsKKwlpZiAoKGJwLT5jb21tb24uY2hpcF9pZCAmIDB4MSkgfHwKKwkgICAgKENISVBfSVNfRTEoYnApICYmIHZhbCkgfHwgKENISVBfSVNfRTFIKGJwKSAmJiAodmFsID09IDB4NTUpKSkgeworCQlicC0+ZmxhZ3MgfD0gT05FX1BPUlRfRkxBRzsKKwkJQk5YMlhfREVWX0lORk8oInNpbmdsZSBwb3J0IGRldmljZVxuIik7CisJfQorCiAJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NGRzQpOwogCWJwLT5jb21tb24uZmxhc2hfc2l6ZSA9IChOVlJBTV8xTUJfU0laRSA8PAogCQkJCSAodmFsICYgTUNQUl9OVk1fQ0ZHNF9GTEFTSF9TSVpFKSk7CkBAIC03MDUxLDE1ICs3NTYzLDIxIEBACiAJCUJOWDJYX0VSUigiQkFEIE1DUCB2YWxpZGl0eSBzaWduYXR1cmVcbiIpOwogCiAJYnAtPmNvbW1vbi5od19jb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5jb25maWcpOwotCWJwLT5jb21tb24uYm9hcmQgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5ib2FyZCk7Ci0KLQlCTlgyWF9ERVZfSU5GTygiaHdfY29uZmlnIDB4JTA4eCAgYm9hcmQgMHglMDh4XG4iLAotCQkgICAgICAgYnAtPmNvbW1vbi5od19jb25maWcsIGJwLT5jb21tb24uYm9hcmQpOworCUJOWDJYX0RFVl9JTkZPKCJod19jb25maWcgMHglMDh4XG4iLCBicC0+Y29tbW9uLmh3X2NvbmZpZyk7CiAKIAlicC0+bGlua19wYXJhbXMuaHdfbGVkX21vZGUgPSAoKGJwLT5jb21tb24uaHdfY29uZmlnICYKIAkJCQkJU0hBUkVEX0hXX0NGR19MRURfTU9ERV9NQVNLKSA+PgogCQkJCSAgICAgICBTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX1NISUZUKTsKIAorCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyA9IDA7CisJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9mZWF0dXJlX2NvbmZpZy5jb25maWcpOworCWlmICh2YWwgJiBTSEFSRURfRkVBVF9DRkdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfQ0ZHX0VOQUJMRUQpCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQorCQkJCUZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQ7CisJZWxzZQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgJj0KKwkJCQl+RkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRDsKKwogCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5iY19yZXYpID4+IDg7CiAJYnAtPmNvbW1vbi5iY192ZXIgPSB2YWw7CiAJQk5YMlhfREVWX0lORk8oImJjX3ZlciAlWFxuIiwgdmFsKTsKQEAgLTcwNzgsNyArNzU5Niw3IEBACiAJCWJwLT5mbGFncyB8PSBOT19XT0xfRkxBRzsKIAl9CiAJQk5YMlhfREVWX0lORk8oIiVzV29MIGNhcGFibGVcbiIsCi0JCSAgICAgICAoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpID8gIk5vdCAiIDogIiIpOworCQkgICAgICAgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSA/ICJub3QgIiA6ICIiKTsKIAogCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtKTsKIAl2YWwyID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bNF0pOwpAQCAtNzE3MSwyNyArNzY4OSw2IEBACiAJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDUpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDYpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4MDcyKVxuIiwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKQEAgLTcyMTcsNiArNzcxNCwzOSBAQAogCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA1KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA2KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcyNilcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKFNGWDcxMDEpXG4iLAogCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwpAQCAtNzIyOCw2ICs3NzU4LDIyIEBACiAJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKEJDTTg0ODEpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfVFAgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKIAkJCUJOWDJYX0VSUigiWEdYUyBQSFkgRmFpbHVyZSBkZXRlY3RlZCAweCV4XG4iLAogCQkJCSAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKQEAgLTc0NTMsMTIgKzc5OTksMTIgQEAKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCXUzMiB2YWwsIHZhbDI7CisJdTMyIGNvbmZpZzsKKwl1MTYgaTsKIAogCWJwLT5saW5rX3BhcmFtcy5icCA9IGJwOwogCWJwLT5saW5rX3BhcmFtcy5wb3J0ID0gcG9ydDsKIAotCWJwLT5saW5rX3BhcmFtcy5zZXJkZXNfY29uZmlnID0KLQkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnNlcmRlc19jb25maWcpOwogCWJwLT5saW5rX3BhcmFtcy5sYW5lX2NvbmZpZyA9CiAJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5sYW5lX2NvbmZpZyk7CiAJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnID0KQEAgLTc0NzEsMTAgKzgwMTcsMzUgQEAKIAlicC0+cG9ydC5saW5rX2NvbmZpZyA9CiAJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2ZlYXR1cmVfY29uZmlnW3BvcnRdLmxpbmtfY29uZmlnKTsKIAotCUJOWDJYX0RFVl9JTkZPKCJzZXJkZXNfY29uZmlnIDB4JTA4eCAgbGFuZV9jb25maWcgMHglMDh4XG4iCi0JICAgICBLRVJOX0lORk8gIiAgZXh0X3BoeV9jb25maWcgMHglMDh4ICBzcGVlZF9jYXBfbWFzayAweCUwOHgiCi0JCSAgICAgICAiICBsaW5rX2NvbmZpZyAweCUwOHhcbiIsCi0JCSAgICAgICBicC0+bGlua19wYXJhbXMuc2VyZGVzX2NvbmZpZywKKwkvKiBHZXQgdGhlIDQgbGFuZXMgeGd4cyBjb25maWcgcnggYW5kIHR4ICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl2YWwgPSBTSE1FTV9SRChicCwKKwkJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnhneHNfY29uZmlnX3J4W2k8PDFdKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3J4W2kgPDwgMV0gPSAoKHZhbD4+MTYpICYgMHhmZmZmKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3J4WyhpIDw8IDEpICsgMV0gPSAodmFsICYgMHhmZmZmKTsKKworCQl2YWwgPSBTSE1FTV9SRChicCwKKwkJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnhneHNfY29uZmlnX3R4W2k8PDFdKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3R4W2kgPDwgMV0gPSAoKHZhbD4+MTYpICYgMHhmZmZmKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3R4WyhpIDw8IDEpICsgMV0gPSAodmFsICYgMHhmZmZmKTsKKwl9CisKKwljb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5jb25maWcpOworCWlmIChjb25maWcgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRU5BQkxFRCkKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCQkJRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRDsKKwllbHNlCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyAmPQorCQkJCX5GRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEOworCisJLyogSWYgdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mIFdvTCwgc2V0IHRoZSBkZWZhdWx0IHN0YXRlIGFjY29yZGluZworCSAqIHRvIHRoZSBIVworCSAqLworCWJwLT53b2wgPSAoIShicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgJiYKKwkJICAgKGNvbmZpZyAmIFBPUlRfRkVBVFVSRV9XT0xfRU5BQkxFRCkpOworCisJQk5YMlhfREVWX0lORk8oImxhbmVfY29uZmlnIDB4JTA4eCAgZXh0X3BoeV9jb25maWcgMHglMDh4IgorCQkgICAgICAgIiAgc3BlZWRfY2FwX21hc2sgMHglMDh4ICBsaW5rX2NvbmZpZyAweCUwOHhcbiIsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMubGFuZV9jb25maWcsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2ssIGJwLT5wb3J0LmxpbmtfY29uZmlnKTsKQEAgLTc1MjEsNyArODA5Miw3IEBACiAJCQkJICAgICAgICIoMHglMDR4KVxuIiwKIAkJCQkgICAgICAgZnVuYywgYnAtPmUxaG92LCBicC0+ZTFob3YpOwogCQl9IGVsc2UgewotCQkJQk5YMlhfREVWX0lORk8oIlNpbmdsZSBmdW5jdGlvbiBtb2RlXG4iKTsKKwkJCUJOWDJYX0RFVl9JTkZPKCJzaW5nbGUgZnVuY3Rpb24gbW9kZVxuIik7CiAJCQlpZiAoQlBfRTFIVk4oYnApKSB7CiAJCQkJQk5YMlhfRVJSKCIhISEgIE5vIHZhbGlkIEUxSE9WIGZvciBmdW5jICVkLCIKIAkJCQkJICAiICBhYm9ydGluZ1xuIiwgZnVuYyk7CkBAIC03NTcxLDYgKzgxNDIsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9icChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IHRpbWVyX2ludGVydmFsOwogCWludCByYzsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nIHVudGlsIEhXIGlzIGluaXRpYWxpemVkICovCkBAIC03NTk0LDYgKzgxNjYsMTYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkgICAgICAgIk1DUCBkaXNhYmxlZCwgbXVzdCBsb2FkIGRldmljZXMgaW4gb3JkZXIhXG4iKTsKIAorCS8qIFNldCBtdWx0aSBxdWV1ZSBtb2RlICovCisJaWYgKChtdWx0aV9tb2RlICE9IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkgJiYKKwkgICAgKChpbnRfbW9kZSA9PSBJTlRfTU9ERV9JTlR4KSB8fCAoaW50X21vZGUgPT0gSU5UX01PREVfTVNJKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAiTXVsdGkgZGlzYWJsZWQgc2luY2UgaW50X21vZGUgcmVxdWVzdGVkIGlzIG5vdCBNU0ktWFxuIik7CisJCW11bHRpX21vZGUgPSBFVEhfUlNTX01PREVfRElTQUJMRUQ7CisJfQorCWJwLT5tdWx0aV9tb2RlID0gbXVsdGlfbW9kZTsKKworCiAJLyogU2V0IFRQQSBmbGFncyAqLwogCWlmIChkaXNhYmxlX3RwYSkgewogCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKQEAgLTc2MDMsMTggKzgxODUsMTggQEAKIAkJYnAtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiAJfQogCisJYnAtPm1ycnMgPSBtcnJzOwogCiAJYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKIAlicC0+cnhfcmluZ19zaXplID0gTUFYX1JYX0FWQUlMOwogCiAJYnAtPnJ4X2NzdW0gPSAxOwotCWJwLT5yeF9vZmZzZXQgPSAwOwogCiAJYnAtPnR4X3RpY2tzID0gNTA7CiAJYnAtPnJ4X3RpY2tzID0gMjU7CiAKLQlicC0+dGltZXJfaW50ZXJ2YWwgPSAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyA1KkhaIDogSFopOwotCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogYnAtPnRpbWVyX2ludGVydmFsKTsKKwl0aW1lcl9pbnRlcnZhbCA9IChDSElQX1JFVl9JU19TTE9XKGJwKSA/IDUqSFogOiBIWik7CisJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSAocG9sbCA/IHBvbGwgOiB0aW1lcl9pbnRlcnZhbCk7CiAKIAlpbml0X3RpbWVyKCZicC0+dGltZXIpOwogCWJwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGJwLT5jdXJyZW50X2ludGVydmFsOwpAQCAtNzY1OSwxNCArODI0MSwxNiBAQAogCiAJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CiAJCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CiAJCQljbWQtPnBvcnQgPSBQT1JUX1RQOwogCQkJYnJlYWs7CiAKQEAgLTc4ODgsNiArODQ3Miw4NCBAQAogCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKIH0KIAorI2RlZmluZSBJU19FMV9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMV9PTkxJTkUpID09IFJJX0UxX09OTElORSkKKyNkZWZpbmUgSVNfRTFIX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxSF9PTkxJTkUpID09IFJJX0UxSF9PTkxJTkUpCisKK3N0YXRpYyBpbnQgYm54MnhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RhdGljIHUzMiByZWdkdW1wX2xlbjsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChyZWdkdW1wX2xlbikKKwkJcmV0dXJuIHJlZ2R1bXBfbGVuOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSByZWdfYWRkcnNbaV0uc2l6ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV1JFR1NfQ09VTlRfRTE7IGkrKykKKwkJCWlmIChJU19FMV9PTkxJTkUod3JlZ19hZGRyc19lMVtpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UxW2ldLnNpemUgKgorCQkJCQkoMSArIHdyZWdfYWRkcnNfZTFbaV0ucmVhZF9yZWdzX2NvdW50KTsKKworCX0gZWxzZSB7IC8qIEUxSCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHJlZ19hZGRyc1tpXS5zaXplOworCisJCWZvciAoaSA9IDA7IGkgPCBXUkVHU19DT1VOVF9FMUg7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHdyZWdfYWRkcnNfZTFoW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHdyZWdfYWRkcnNfZTFoW2ldLnNpemUgKgorCQkJCQkoMSArIHdyZWdfYWRkcnNfZTFoW2ldLnJlYWRfcmVnc19jb3VudCk7CisJfQorCXJlZ2R1bXBfbGVuICo9IDQ7CisJcmVnZHVtcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcik7CisKKwlyZXR1cm4gcmVnZHVtcF9sZW47Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpfcCkKK3sKKwl1MzIgKnAgPSBfcCwgaSwgajsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZHVtcF9oZHIgZHVtcF9oZHIgPSB7MH07CisKKwlyZWdzLT52ZXJzaW9uID0gMDsKKwltZW1zZXQocCwgMCwgcmVncy0+bGVuKTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuOworCisJZHVtcF9oZHIuaGRyX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcikgLyA0KSAtIDE7CisJZHVtcF9oZHIuZHVtcF9zaWduID0gZHVtcF9zaWduX2FsbDsKKwlkdW1wX2hkci54c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFhTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci50c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFRTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci51c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFVTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci5jc3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIENTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci5pbmZvID0gQ0hJUF9JU19FMShicCkgPyBSSV9FMV9PTkxJTkUgOiBSSV9FMUhfT05MSU5FOworCisJbWVtY3B5KHAsICZkdW1wX2hkciwgc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcikpOworCXAgKz0gZHVtcF9oZHIuaGRyX3NpemUgKyAxOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlmb3IgKGogPSAwOyBqIDwgcmVnX2FkZHJzW2ldLnNpemU7IGorKykKKwkJCQkJKnArKyA9IFJFR19SRChicCwKKwkJCQkJCSAgICAgIHJlZ19hZGRyc1tpXS5hZGRyICsgaio0KTsKKworCX0gZWxzZSB7IC8qIEUxSCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCWZvciAoaiA9IDA7IGogPCByZWdfYWRkcnNbaV0uc2l6ZTsgaisrKQorCQkJCQkqcCsrID0gUkVHX1JEKGJwLAorCQkJCQkJICAgICAgcmVnX2FkZHJzW2ldLmFkZHIgKyBqKjQpOworCX0KK30KKwogc3RhdGljIHZvaWQgYm54MnhfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MDQ2LDcgKzg3MDgsNyBAQAogCQkJTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9XUl9FTikpKTsKIH0KIAotc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHUzMiAqcmV0X3ZhbCwKK3N0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZF9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCBfX2JlMzIgKnJldF92YWwsCiAJCQkJICB1MzIgY21kX2ZsYWdzKQogewogCWludCBjb3VudCwgaSwgcmM7CkBAIC04MDgyLDggKzg3NDQsNyBAQAogCQkJLyogd2UgcmVhZCBudnJhbSBkYXRhIGluIGNwdSBvcmRlcgogCQkJICogYnV0IGV0aHRvb2wgc2VlcyBpdCBhcyBhbiBhcnJheSBvZiBieXRlcwogCQkJICogY29udmVydGluZyB0byBiaWctZW5kaWFuIHdpbGwgZG8gdGhlIHdvcmsgKi8KLQkJCXZhbCA9IGNwdV90b19iZTMyKHZhbCk7Ci0JCQkqcmV0X3ZhbCA9IHZhbDsKKwkJCSpyZXRfdmFsID0gY3B1X3RvX2JlMzIodmFsKTsKIAkJCXJjID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC04MDk3LDcgKzg3NTgsNyBAQAogewogCWludCByYzsKIAl1MzIgY21kX2ZsYWdzOwotCXUzMiB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmICgob2Zmc2V0ICYgMHgwMykgfHwgKGJ1Zl9zaXplICYgMHgwMykgfHwgKGJ1Zl9zaXplID09IDApKSB7CiAJCURQKEJOWDJYX01TR19OVk0sCkBAIC04MjE2LDcgKzg4NzcsNyBAQAogCWludCByYzsKIAl1MzIgY21kX2ZsYWdzOwogCXUzMiBhbGlnbl9vZmZzZXQ7Ci0JdTMyIHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmNvbW1vbi5mbGFzaF9zaXplKSB7CiAJCURQKEJOWDJYX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgpAQCAtODM0NSw3ICs5MDA2LDcgQEAKIAkJCWlmICgoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHx8CiAJCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9ESVNBQkxFRCkpIHsKIAkJCQlyYyB8PSBibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsCi0JCQkJCQkgICAgICAgJmJwLT5saW5rX3ZhcnMpOworCQkJCQkJICAgICAgICZicC0+bGlua192YXJzLCAxKTsKIAkJCQlyYyB8PSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLAogCQkJCQkJICAgICAmYnAtPmxpbmtfdmFycyk7CiAJCQl9CkBAIC04NDM1LDcgKzkwOTYsOCBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZXBhdXNlLT5hdXRvbmVnID0gKGJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID09IEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgorCWVwYXVzZS0+YXV0b25lZyA9IChicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9PQorCQkJICAgQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCiAJCQkgIChicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpOwogCiAJZXBhdXNlLT5yeF9wYXVzZSA9ICgoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpID09CkBAIC04NTY3LDggKzkyMjksNyBAQAogCXsgIm52cmFtX3Rlc3QgKG9ubGluZSkiIH0sCiAJeyAiaW50ZXJydXB0X3Rlc3QgKG9ubGluZSkiIH0sCiAJeyAibGlua190ZXN0IChvbmxpbmUpIiB9LAotCXsgImlkbGUgY2hlY2sgKG9ubGluZSkiIH0sCi0JeyAiTUMgZXJyb3JzIChvbmxpbmUpIiB9CisJeyAiaWRsZSBjaGVjayAob25saW5lKSIgfQogfTsKIAogc3RhdGljIGludCBibngyeF9zZWxmX3Rlc3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTg3NTYsMjMgKzk0MTcsMjMgQEAKIAl1MTYgbGVuOwogCWludCByYyA9IC1FTk9ERVY7CiAKLQlpZiAobG9vcGJhY2tfbW9kZSA9PSBCTlgyWF9NQUNfTE9PUEJBQ0spIHsKKwkvKiBjaGVjayB0aGUgbG9vcGJhY2sgbW9kZSAqLworCXN3aXRjaCAobG9vcGJhY2tfbW9kZSkgeworCWNhc2UgQk5YMlhfUEhZX0xPT1BCQUNLOgorCQlpZiAoYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfWEdYU18xMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIEJOWDJYX01BQ19MT09QQkFDSzoKIAkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19CTUFDOwogCQlibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7Ci0KLQl9IGVsc2UgaWYgKGxvb3BiYWNrX21vZGUgPT0gQk5YMlhfUEhZX0xPT1BCQUNLKSB7Ci0JCXUxNiBjbnQgPSAxMDAwOwotCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX1hHWFNfMTA7Ci0JCWJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKLQkJLyogd2FpdCB1bnRpbCBsaW5rIHN0YXRlIGlzIHJlc3RvcmVkICovCi0JCWlmIChsaW5rX3VwKQotCQkJd2hpbGUgKGNudC0tICYmIGJueDJ4X3Rlc3RfbGluaygmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkJCSZicC0+bGlua192YXJzKSkKLQkJCQltc2xlZXAoMTApOwotCX0gZWxzZQorCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlwa3Rfc2l6ZSA9IDE1MTQ7CisJLyogcHJlcGFyZSB0aGUgbG9vcGJhY2sgcGFja2V0ICovCisJcGt0X3NpemUgPSAoKChicC0+ZGV2LT5tdHUgPCBFVEhfTUFYX1BBQ0tFVF9TSVpFKSA/CisJCSAgICAgYnAtPmRldi0+bXR1IDogRVRIX01BWF9QQUNLRVRfU0laRSkgKyBFVEhfSExFTik7CiAJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOwogCWlmICghc2tiKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTg3ODQsNiArOTQ0NSw3IEBACiAJZm9yIChpID0gRVRIX0hMRU47IGkgPCBwa3Rfc2l6ZTsgaSsrKQogCQlwYWNrZXRbaV0gPSAodW5zaWduZWQgY2hhcikgKGkgJiAweGZmKTsKIAorCS8qIHNlbmQgdGhlIGxvb3BiYWNrIHBhY2tldCAqLwogCW51bV9wa3RzID0gMDsKIAl0eF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpOwogCXJ4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYik7CkBAIC04ODA4LDEyICs5NDcwLDEwIEBACiAKIAl3bWIoKTsKIAotCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgPQotCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kKSArIDEpOworCWxlMTZfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCwgMSk7CiAJbWIoKTsgLyogRlcgcmVzdHJpY3Rpb246IG11c3Qgbm90IHJlb3JkZXIgd3JpdGluZyBuYmQgYW5kIHBhY2tldHMgKi8KLQlmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCA9Ci0JCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kKSArIDEpOwotCURPT1JCRUxMKGJwLCBGUF9JRFgoZnApLCAwKTsKKwlsZTMyX2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kLCAxKTsKKwlET09SQkVMTChicCwgZnAtPmluZGV4LCAwKTsKIAogCW1taW93YigpOwogCkBAIC04ODY4LDcgKzk1MjgsNyBAQAogCiBzdGF0aWMgaW50IGJueDJ4X3Rlc3RfbG9vcGJhY2soc3RydWN0IGJueDJ4ICpicCwgdTggbGlua191cCkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IDAsIHJlczsKIAogCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKIAkJcmV0dXJuIEJOWDJYX0xPT1BCQUNLX0ZBSUxFRDsKQEAgLTg4NzYsMTQgKzk1MzYsMTYgQEAKIAlibngyeF9uZXRpZl9zdG9wKGJwLCAxKTsKIAlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKIAotCWlmIChibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX01BQ19MT09QQkFDSywgbGlua191cCkpIHsKLQkJRFAoTkVUSUZfTVNHX1BST0JFLCAiTUFDIGxvb3BiYWNrIGZhaWxlZFxuIik7Ci0JCXJjIHw9IEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQ7CisJcmVzID0gYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9QSFlfTE9PUEJBQ0ssIGxpbmtfdXApOworCWlmIChyZXMpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAiICBQSFkgbG9vcGJhY2sgZmFpbGVkICAocmVzICVkKVxuIiwgcmVzKTsKKwkJcmMgfD0gQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRDsKIAl9CiAKLQlpZiAoYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9QSFlfTE9PUEJBQ0ssIGxpbmtfdXApKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIlBIWSBsb29wYmFjayBmYWlsZWRcbiIpOwotCQlyYyB8PSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVEOworCXJlcyA9IGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfTUFDX0xPT1BCQUNLLCBsaW5rX3VwKTsKKwlpZiAocmVzKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIiAgTUFDIGxvb3BiYWNrIGZhaWxlZCAgKHJlcyAlZClcbiIsIHJlcyk7CisJCXJjIHw9IEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQ7CiAJfQogCiAJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CkBAIC04OTEwLDE0ICs5NTcyLDE0IEBACiAJCXsgMHg3NzgsICAweDcwIH0sCiAJCXsgICAgIDAsICAgICAwIH0KIAl9OwotCXUzMiBidWZbMHgzNTAgLyA0XTsKKwlfX2JlMzIgYnVmWzB4MzUwIC8gNF07CiAJdTggKmRhdGEgPSAodTggKilidWY7CiAJaW50IGksIHJjOwogCXUzMiBtYWdpYywgY3N1bTsKIAogCXJjID0gYm54MnhfbnZyYW1fcmVhZChicCwgMCwgZGF0YSwgNCk7CiAJaWYgKHJjKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIm1hZ2ljIHZhbHVlIHJlYWQgKHJjIC0lZClcbiIsIC1yYyk7CisJCURQKE5FVElGX01TR19QUk9CRSwgIm1hZ2ljIHZhbHVlIHJlYWQgKHJjICVkKVxuIiwgcmMpOwogCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKIAl9CiAKQEAgLTg5MzQsNyArOTU5Niw3IEBACiAJCQkJICAgICAgbnZyYW1fdGJsW2ldLnNpemUpOwogCQlpZiAocmMpIHsKIAkJCURQKE5FVElGX01TR19QUk9CRSwKLQkJCSAgICJudnJhbV90YmxbJWRdIHJlYWQgZGF0YSAocmMgLSVkKVxuIiwgaSwgLXJjKTsKKwkJCSAgICJudnJhbV90YmxbJWRdIHJlYWQgZGF0YSAocmMgJWQpXG4iLCBpLCByYyk7CiAJCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKIAkJfQogCkBAIC04OTU5LDEyICs5NjIxLDEyIEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDA7CisJY29uZmlnLT5oZHIubGVuZ3RoID0gMDsKIAlpZiAoQ0hJUF9JU19FMShicCkpCiAJCWNvbmZpZy0+aGRyLm9mZnNldCA9IChCUF9QT1JUKGJwKSA/IDMyIDogMCk7CiAJZWxzZQogCQljb25maWctPmhkci5vZmZzZXQgPSBCUF9GVU5DKGJwKTsKLQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtOTAzNyw5ICs5Njk5LDYgQEAKIAkJCWJ1Zls1XSA9IDE7CiAJCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCQl9Ci0JYnVmWzddID0gYm54MnhfbWNfYXNzZXJ0KGJwKTsKLQlpZiAoYnVmWzddICE9IDApCi0JCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKICNpZmRlZiBCTlgyWF9FWFRSQV9ERUJVRwogCWJueDJ4X3BhbmljX2R1bXAoYnApOwpAQCAtOTA0OSw0MCArOTcwOCw5OCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJbG9uZyBvZmZzZXQ7CiAJaW50IHNpemU7CisJdTggc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGJueDJ4X3Ffc3RhdHNfYXJyW0JOWDJYX05VTV9RX1NUQVRTXSA9IHsKKy8qIDEgKi8JeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwgOCwgIlslZF06IHJ4X2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihlcnJvcl9ieXRlc19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfZXJyb3JfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfdWNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X21jYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAk4LCAiWyVkXTogcnhfZGlzY2FyZHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHJ4X2Vycl9kaXNjYXJkX3BrdCksCisJCQkJCSA0LCAiWyVkXTogcnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAorCXsgUV9TVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKKwkJCQkJIDQsICJbJWRdOiByeF9za2JfYWxsb2NfZGlzY2FyZCIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLCA0LCAiWyVkXTogcnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfSwKKworLyogMTAgKi97IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAk4LCAiWyVkXTogdHhfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJCQkJOCwgIlslZF06IHR4X3BhY2tldHMiIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWxvbmcgb2Zmc2V0OworCWludCBzaXplOwogCXUzMiBmbGFnczsKICNkZWZpbmUgU1RBVFNfRkxBR1NfUE9SVAkJMQogI2RlZmluZSBTVEFUU19GTEFHU19GVU5DCQkyCisjZGVmaW5lIFNUQVRTX0ZMQUdTX0JPVEgJCShTVEFUU19GTEFHU19GVU5DIHwgU1RBVFNfRkxBR1NfUE9SVCkKIAl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIH0gYm54Mnhfc3RhdHNfYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0vKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9ieXRlcyIgfSwKKy8qIDEgKi8JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2J5dGVzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIoZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9lcnJvcl9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAidHhfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9lcnJvcl9ieXRlcyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZXJyb3JfYnl0ZXMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAidHhfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X21hY19lcnJvcnMiIH0sCi0vKiAxMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfYmNhc3RfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfY3JjX2Vycm9ycyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYWxpZ25fZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9vdmVyc2l6ZV9wYWNrZXRzIiB9LAorLyogMTAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZyYWdtZW50cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9qYWJiZXJzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoeHhvdmVyZmxvd19kaXNjYXJkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZndfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihicmJfZHJvcF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2JyYl9kaXNjYXJkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX3RydW5jYXRlX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX3RydW5jYXRlIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfcGF1c2VfZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihuaWdfdGltZXJfbWF4KSwKKwkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jb25zdGFudF9wYXVzZV9ldmVudHMiIH0sCisvKiAyMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9LAorCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X2J5dGVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXJyb3JfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbWFjX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfY2Fycmllcl9lcnJvcnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3NpbmdsZV9jb2xsaXNpb25zIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X211bHRpX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCisvKiAzMCAqL3sgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9kZWZlcnJlZCIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2V4Y2Vzc19jb2xsaXNpb25zIiB9LApAQCAtOTA5MCwxNCArOTgwNyw2IEBACiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2xhdGVfY29sbGlzaW9ucyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF90b3RhbF9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfZnJhZ21lbnRzIiB9LAotLyogMjAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9qYWJiZXJzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9vdmVyc2l6ZV9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNjRfYnl0ZV9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHNfaGkpLApAQCAtOTExMCw1MiArOTgxOSw0NiBAQAogCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaSksCiAJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTAyNF90b18xNTIyX2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAorLyogNDAgKi97IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAogCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzE1MjNfdG9fOTAyMl9ieXRlX3BhY2tldHMiIH0sCi0vKiAzMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfeG9uX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF94b2ZmX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfb3V0eG9uc2VudF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3hvbl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X291dHhvZmZzZW50X2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfeG9mZl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHh4b3ZlcmZsb3dfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2Z3X2Rpc2NhcmRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX2Ryb3BfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJicmJfZGlzY2FyZCIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGJyYl90cnVuY2F0ZV9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgImJyYl90cnVuY2F0ZSIgfSwKLS8qIDQwICoveyBTVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCi0vKiA0MiAqL3sgU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9CisJeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfc2VudF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3BhdXNlX2ZyYW1lcyIgfQogfTsKIAotI2RlZmluZSBJU19OT1RfRTFITUZfU1RBVChicCwgaSkgXAotCQkoSVNfRTFITUYoYnApICYmIChibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MgJiBTVEFUU19GTEFHU19QT1JUKSkKKyNkZWZpbmUgSVNfUE9SVF9TVEFUKGkpIFwKKwkoKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0JPVEgpID09IFNUQVRTX0ZMQUdTX1BPUlQpCisjZGVmaW5lIElTX0ZVTkNfU1RBVChpKQkJKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0ZVTkMpCisjZGVmaW5lIElTX0UxSE1GX01PREVfU1RBVChicCkgXAorCQkJKElTX0UxSE1GKGJwKSAmJiAhKGJwLT5tc2dsZXZlbCAmIEJOWDJYX01TR19TVEFUUykpCiAKIHN0YXRpYyB2b2lkIGJueDJ4X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpidWYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIGo7CisJaW50IGksIGosIGs7CiAKIAlzd2l0Y2ggKHN0cmluZ3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7Ci0JCQlpZiAoSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpKQotCQkJCWNvbnRpbnVlOwotCQkJc3RyY3B5KGJ1ZiArIGoqRVRIX0dTVFJJTkdfTEVOLAotCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltpXS5zdHJpbmcpOwotCQkJaisrOworCQlpZiAoaXNfbXVsdGkoYnApKSB7CisJCQlrID0gMDsKKwkJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspCisJCQkJCXNwcmludGYoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJCQlibngyeF9xX3N0YXRzX2FycltqXS5zdHJpbmcsIGkpOworCQkJCWsgKz0gQk5YMlhfTlVNX1FfU1RBVFM7CisJCQl9CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKKwkJCQlicmVhazsKKwkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fU1RBVFM7IGorKykKKwkJCQlzdHJjcHkoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltqXS5zdHJpbmcpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgeworCQkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApICYmIElTX1BPUlRfU1RBVChpKSkKKwkJCQkJY29udGludWU7CisJCQkJc3RyY3B5KGJ1ZiArIGoqRVRIX0dTVFJJTkdfTEVOLAorCQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbaV0uc3RyaW5nKTsKKwkJCQlqKys7CisJCQl9CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTkxNjgsMTMgKzk4NzEsMjIgQEAKIHN0YXRpYyBpbnQgYm54MnhfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIG51bV9zdGF0cyA9IDA7CisJaW50IGksIG51bV9zdGF0czsKIAotCWZvciAoaSA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgewotCQlpZiAoSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpKQotCQkJY29udGludWU7Ci0JCW51bV9zdGF0cysrOworCWlmIChpc19tdWx0aShicCkpIHsKKwkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1FfU1RBVFMgKiBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKKwkJaWYgKCFJU19FMUhNRl9NT0RFX1NUQVQoYnApKQorCQkJbnVtX3N0YXRzICs9IEJOWDJYX05VTV9TVEFUUzsKKwl9IGVsc2UgeworCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkgeworCQkJbnVtX3N0YXRzID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykKKwkJCQlpZiAoSVNfRlVOQ19TVEFUKGkpKQorCQkJCQludW1fc3RhdHMrKzsKKwkJfSBlbHNlCisJCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7CiAJfQorCiAJcmV0dXJuIG51bV9zdGF0czsKIH0KIApAQCAtOTE4MiwyOSArOTg5NCw3MSBAQAogCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqYnVmKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiAqaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7Ci0JaW50IGksIGo7CisJdTMyICpod19zdGF0cywgKm9mZnNldDsKKwlpbnQgaSwgaiwgazsKIAotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJaWYgKElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSAwKSB7Ci0JCQkvKiBza2lwIHRoaXMgY291bnRlciAqLwotCQkJYnVmW2pdID0gMDsKLQkJCWorKzsKLQkJCWNvbnRpbnVlOworCWlmIChpc19tdWx0aShicCkpIHsKKwkJayA9IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOworCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspIHsKKwkJCQlpZiAoYm54MnhfcV9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CisJCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJCWJ1ZltrICsgal0gPSAwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsKKwkJCQkJICBibngyeF9xX3N0YXRzX2FycltqXS5vZmZzZXQpOworCQkJCWlmIChibngyeF9xX3N0YXRzX2FycltqXS5zaXplID09IDQpIHsKKwkJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQkJYnVmW2sgKyBqXSA9ICh1NjQpICpvZmZzZXQ7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJCX0KKwkJCWsgKz0gQk5YMlhfTlVNX1FfU1RBVFM7CiAJCX0KLQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDQpIHsKLQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCi0JCQlidWZbal0gPSAodTY0KSAqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCk7Ci0JCQlqKys7Ci0JCQljb250aW51ZTsKKwkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpCisJCQlyZXR1cm47CisJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOworCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1NUQVRTOyBqKyspIHsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CisJCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW9mZnNldCA9IChod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltqXS5vZmZzZXQpOworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltqXS5zaXplID09IDQpIHsKKwkJCQkvKiA0LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KKwkJCWJ1ZltrICsgal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKIAkJfQotCQkvKiA4LWJ5dGUgY291bnRlciAqLwotCQlidWZbal0gPSBISUxPX1U2NCgqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCksCi0JCQkJICAqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCArIDEpKTsKLQkJaisrOworCX0gZWxzZSB7CisJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOworCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSAmJiBJU19QT1JUX1NUQVQoaSkpCisJCQkJY29udGludWU7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gMCkgeworCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJYnVmW2pdID0gMDsKKwkJCQlqKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbaV0ub2Zmc2V0KTsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSA0KSB7CisJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCWorKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIDgtYnl0ZSBjb3VudGVyICovCisJCQlidWZbal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJCWorKzsKKwkJfQogCX0KIH0KIApAQCAtOTI1MSw2ICsxMDAwNSw4IEBACiAJLmdldF9zZXR0aW5ncwkJPSBibngyeF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBibngyeF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IGJueDJ4X2dldF9kcnZpbmZvLAorCS5nZXRfcmVnc19sZW4JCT0gYm54MnhfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSBibngyeF9nZXRfcmVncywKIAkuZ2V0X3dvbAkJPSBibngyeF9nZXRfd29sLAogCS5zZXRfd29sCQk9IGJueDJ4X3NldF93b2wsCiAJLmdldF9tc2dsZXZlbAkJPSBibngyeF9nZXRfbXNnbGV2ZWwsCkBAIC05MzYzLDI1ICsxMDExOSw0MSBAQAogCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAKIAlpZiAoYm54MnhfaGFzX3R4X3dvcmsoZnApKQotCQlibngyeF90eF9pbnQoZnAsIGJ1ZGdldCk7CisJCWJueDJ4X3R4X2ludChmcCk7CiAKLQlpZiAoYm54MnhfaGFzX3J4X3dvcmsoZnApKQorCWlmIChibngyeF9oYXNfcnhfd29yayhmcCkpIHsKIAkJd29ya19kb25lID0gYm54MnhfcnhfaW50KGZwLCBidWRnZXQpOwotCXJtYigpOyAvKiBCTlgyWF9IQVNfV09SSygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2sgKi8KIAotCS8qIG11c3Qgbm90IGNvbXBsZXRlIGlmIHdlIGNvbnN1bWVkIGZ1bGwgYnVkZ2V0ICovCi0JaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmICFCTlgyWF9IQVNfV09SSyhmcCkpIHsKKwkJLyogbXVzdCBub3QgY29tcGxldGUgaWYgd2UgY29uc3VtZWQgZnVsbCBidWRnZXQgKi8KKwkJaWYgKHdvcmtfZG9uZSA+PSBidWRnZXQpCisJCQlnb3RvIHBvbGxfYWdhaW47CisJfQogCisJLyogQk5YMlhfSEFTX1dPUksoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrLCB0aHVzIHdlIG5lZWQgdG8KKwkgKiBlbnN1cmUgdGhhdCBzdGF0dXMgYmxvY2sgaW5kaWNlcyBoYXZlIGJlZW4gYWN0dWFsbHkgcmVhZAorCSAqIChibngyeF91cGRhdGVfZnBzYl9pZHgpIHByaW9yIHRvIHRoaXMgY2hlY2sgKEJOWDJYX0hBU19XT1JLKQorCSAqIHNvIHRoYXQgd2Ugd29uJ3Qgd3JpdGUgdGhlICJuZXdlciIgdmFsdWUgb2YgdGhlIHN0YXR1cyBibG9jayB0byBJR1UKKwkgKiAoaWYgdGhlcmUgd2FzIGEgRE1BIHJpZ2h0IGFmdGVyIEJOWDJYX0hBU19XT1JLIGFuZAorCSAqIGlmIHRoZXJlIGlzIG5vIHJtYiwgdGhlIG1lbW9yeSByZWFkaW5nIChibngyeF91cGRhdGVfZnBzYl9pZHgpCisJICogbWF5IGJlIHBvc3Rwb25lZCB0byByaWdodCBiZWZvcmUgYm54MnhfYWNrX3NiKS4gSW4gdGhpcyBjYXNlCisJICogdGhlcmUgd2lsbCBuZXZlciBiZSBhbm90aGVyIGludGVycnVwdCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIHVwZGF0ZQorCSAqIG9mIHRoZSBzdGF0dXMgYmxvY2ssIHdoaWxlIHRoZXJlIGlzIHN0aWxsIHVuaGFuZGxlZCB3b3JrLgorCSAqLworCXJtYigpOworCisJaWYgKCFCTlgyWF9IQVNfV09SSyhmcCkpIHsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiBwb2xsX3BhbmljOgogI2VuZGlmCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCi0JCWJueDJ4X2Fja19zYihicCwgRlBfU0JfSUQoZnApLCBVU1RPUk1fSUQsCisJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsCiAJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksIElHVV9JTlRfTk9QLCAxKTsKLQkJYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIENTVE9STV9JRCwKKwkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIENTVE9STV9JRCwKIAkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwgSUdVX0lOVF9FTkFCTEUsIDEpOwogCX0KKworcG9sbF9hZ2FpbjoKIAlyZXR1cm4gd29ya19kb25lOwogfQogCkBAIC05NDU3LDcgKzEwMjI5LDcgQEAKIAkJcmMgPSBYTUlUX1BMQUlOOwogCiAJZWxzZSB7Ci0JCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQVjYpKSB7CisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiAJCQlyYyA9IFhNSVRfQ1NVTV9WNjsKIAkJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJCXJjIHw9IFhNSVRfQ1NVTV9UQ1A7CkBAIC05NDc5LDcgKzEwMjUxLDkgQEAKIH0KIAogI2lmIChNQVhfU0tCX0ZSQUdTID49IE1BWF9GRVRDSF9CRCAtIDMpCi0vKiBjaGVjayBpZiBwYWNrZXQgcmVxdWlyZXMgbGluZWFyaXphdGlvbiAocGFja2V0IGlzIHRvbyBmcmFnbWVudGVkKSAqLworLyogY2hlY2sgaWYgcGFja2V0IHJlcXVpcmVzIGxpbmVhcml6YXRpb24gKHBhY2tldCBpcyB0b28gZnJhZ21lbnRlZCkKKyAgIG5vIG5lZWQgdG8gY2hlY2sgZnJhZ21lbnRhdGlvbiBpZiBwYWdlIHNpemUgPiA4SyAodGhlcmUgd2lsbCBiZSBubworICAgdmlvbGF0aW9uIHRvIEZXIHJlc3RyaWN0aW9ucykgKi8KIHN0YXRpYyBpbnQgYm54MnhfcGt0X3JlcV9saW4oc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgdTMyIHhtaXRfdHlwZSkKIHsKQEAgLTk1MzgsNyArMTAzMTIsNiBAQAogCQkJCXduZF9zdW0gLT0KIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1t3bmRfaWR4XS5zaXplOwogCQkJfQotCiAJCX0gZWxzZSB7CiAJCQkvKiBpbiBub24tTFNPIHRvbyBmcmFnbWVudGVkIHBhY2tldCBzaG91bGQgYWx3YXlzCiAJCQkgICBiZSBsaW5lYXJpemVkICovCkBAIC05NTY2LDYgKzEwMzM5LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZjsKIAlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZDsKIAlzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkICpwYmQgPSBOVUxMOwpAQCAtOTU4MiwxMiArMTAzNTYsMTQgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogI2VuZGlmCiAKLQlmcF9pbmRleCA9IChzbXBfcHJvY2Vzc29yX2lkKCkgJSBicC0+bnVtX3F1ZXVlcyk7CisJZnBfaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgZnBfaW5kZXgpOworCiAJZnAgPSAmYnAtPmZwW2ZwX2luZGV4XTsKIAogCWlmICh1bmxpa2VseShibngyeF90eF9hdmFpbChmcCkgPCAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDMpKSkgewotCQlicC0+ZXRoX3N0YXRzLmRyaXZlcl94b2ZmKyssCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKyssCisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJQk5YMlhfRVJSKCJCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC05NTk4LDggKzEwMzc0LDkgQEAKIAkgICBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUsIHhtaXRfdHlwZSk7CiAKICNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQotCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcml6ZSB0aGUgc2tiCi0JICAgKGR1ZSB0byBGVyByZXN0cmljdGlvbnMpICovCisJLyogRmlyc3QsIGNoZWNrIGlmIHdlIG5lZWQgdG8gbGluZWFyaXplIHRoZSBza2IgKGR1ZSB0byBGVworCSAgIHJlc3RyaWN0aW9ucykuIE5vIG5lZWQgdG8gY2hlY2sgZnJhZ21lbnRhdGlvbiBpZiBwYWdlIHNpemUgPiA4SworCSAgICh0aGVyZSB3aWxsIGJlIG5vIHZpb2xhdGlvbiB0byBGVyByZXN0cmljdGlvbnMpICovCiAJaWYgKGJueDJ4X3BrdF9yZXFfbGluKGJwLCBza2IsIHhtaXRfdHlwZSkpIHsKIAkJLyogU3RhdGlzdGljcyBvZiBsaW5lYXJpemF0aW9uICovCiAJCWJwLT5saW5fY250Kys7CkBAIC05NjY0LDkgKzEwNDQxLDkgQEAKIAkJaGxlbiA9IChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSArIHZsYW5fb2ZmKSAvIDI7CiAKIAkJLyogZm9yIG5vdyBOUyBmbGFnIGlzIG5vdCB1c2VkIGluIExpbnV4ICovCi0JCXBiZC0+Z2xvYmFsX2RhdGEgPSAoaGxlbiB8Ci0JCQkJICAgICgoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDIxUSkpIDw8Ci0JCQkJICAgICBFVEhfVFhfUEFSU0VfQkRfTExDX1NOQVBfRU5fU0hJRlQpKTsKKwkJcGJkLT5nbG9iYWxfZGF0YSA9CisJCQkoaGxlbiB8ICgoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIDw8CisJCQkJIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTl9TSElGVCkpOwogCiAJCXBiZC0+aXBfaGxlbiA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0KIAkJCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOwpAQCAtOTgxMCwxMiArMTA1ODcsMTAgQEAKIAkgKi8KIAl3bWIoKTsKIAotCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgPQotCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kKSArIG5iZCk7CisJbGUxNl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kLCBuYmQpOwogCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQotCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKLQlET09SQkVMTChicCwgRlBfSURYKGZwKSwgMCk7CisJbGUzMl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCwgMSk7CisJRE9PUkJFTEwoYnAsIGZwLT5pbmRleCwgMCk7CiAKIAltbWlvd2IoKTsKIApAQCAtOTgyNiwxMCArMTA2MDEsMTAgQEAKIAkJLyogV2Ugd2FudCBibngyeF90eF9pbnQgdG8gInNlZSIgdGhlIHVwZGF0ZWQgdHhfYmRfcHJvZAogCQkgICBpZiB3ZSBwdXQgVHggaW50byBYT0ZGIHN0YXRlLiAqLwogCQlzbXBfbWIoKTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlicC0+ZXRoX3N0YXRzLmRyaXZlcl94b2ZmKys7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKwkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKys7CiAJCWlmIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiAJfQogCWZwLT50eF9wa3QrKzsKIApAQCAtOTg2Miw3ICsxMDYzNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgZnJvbSBzZXRfbXVsdGljYXN0ICovCisvKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gZGV2X21jYXN0LmMgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05OTIxLDcgKzEwNjk2LDcgQEAKIAkJCQkgICBjb25maWctPmNvbmZpZ190YWJsZVtpXS4KIAkJCQkJCWNhbV9lbnRyeS5sc2JfbWFjX2FkZHIpOwogCQkJfQotCQkJb2xkID0gY29uZmlnLT5oZHIubGVuZ3RoXzZiOworCQkJb2xkID0gY29uZmlnLT5oZHIubGVuZ3RoOwogCQkJaWYgKG9sZCA+IGkpIHsKIAkJCQlmb3IgKDsgaSA8IG9sZDsgaSsrKSB7CiAJCQkJCWlmIChDQU1fSVNfSU5WQUxJRChjb25maWctPgpAQCAtOTk0MCw5ICsxMDcxNSw5IEBACiAJCQllbHNlCiAJCQkJb2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOwogCi0JCQljb25maWctPmhkci5sZW5ndGhfNmIgPSBpOworCQkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKIAkJCWNvbmZpZy0+aGRyLm9mZnNldCA9IG9mZnNldDsKLQkJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwkJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJCQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJCQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtMTAxMjgsNyArMTA5MDMsNyBAQAogCS5uZG9fb3BlbgkJPSBibngyeF9vcGVuLAogCS5uZG9fc3RvcAkJPSBibngyeF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gYm54Mnhfc3RhcnRfeG1pdCwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGJueDJ4X3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYm54Mnhfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBibngyeF9jaGFuZ2VfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bAkJPSBibngyeF9pb2N0bCwKQEAgLTEwMTQyLDcgKzEwOTE3LDYgQEAKICNlbmRpZgogfTsKIAotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEwMzIxLDcgKzExMDk1LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKIAogCS8qIGRldiB6ZXJvZWQgaW4gaW5pdF9ldGhlcmRldiAqLwotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqYnApKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgTUFYX0NPTlRFWFQpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDM0OCwxNCArMTExMjIsMTQgQEAKIAkJZ290byBpbml0X29uZV9leGl0OwogCX0KIAotCWJwLT5jb21tb24ubmFtZSA9IGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpIFBDSS1FIHglZCAlcyBmb3VuZCBhdCBtZW0gJWx4LCIKLQkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYnAtPmNvbW1vbi5uYW1lLAorCSAgICAgICAiIElSUSAlZCwgIiwgZGV2LT5uYW1lLCBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCiAJICAgICAgIChDSElQX1JFVihicCkgPj4gMTIpICsgJ0EnLCAoQ0hJUF9NRVRBTChicCkgPj4gNCksCiAJICAgICAgIGJueDJ4X2dldF9wY2llX3dpZHRoKGJwKSwKIAkgICAgICAgKGJueDJ4X2dldF9wY2llX3NwZWVkKGJwKSA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKIAkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEpOwogCXByaW50ayhLRVJOX0NPTlQgIm5vZGUgYWRkciAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCiAJcmV0dXJuIDA7CiAKIGluaXRfb25lX2V4aXQ6CkBAIC0xMDQ4NywxNSArMTEyNjEsMTUgQEAKIAkJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0KIAkJCQkJCWJueDJ4X3NwKGJwLCBtY2FzdF9jb25maWcpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGhfNmI7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aGRyLmxlbmd0aDsgaSsrKQogCQkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT5jb25maWdfdGFibGVbaV0pOwogCX0KIAogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIApAQCAtMTA2MjIsOCArMTEzOTYsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBibngyeF9lcnJfaGFuZGxlciA9IHsKIAkuZXJyb3JfZGV0ZWN0ZWQgPSBibngyeF9pb19lcnJvcl9kZXRlY3RlZCwKLQkuc2xvdF9yZXNldCA9IGJueDJ4X2lvX3Nsb3RfcmVzZXQsCi0JLnJlc3VtZSA9IGJueDJ4X2lvX3Jlc3VtZSwKKwkuc2xvdF9yZXNldCAgICAgPSBibngyeF9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgICAgICAgICA9IGJueDJ4X2lvX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibngyeF9wY2lfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmggYi9kcml2ZXJzL25ldC9ibngyeF9yZWcuaAppbmRleCBkMDg0ZTVmLi5iOGNlNmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9yZWcuaApAQCAtMzAsOCArMzAsMjAgQEAKICAgIGFkZHJlc3MgQlJCMV9JTkRfRlJFRV9MSVNUX1BSU19DUkRUKzEgaW5pdGlhbGl6ZSBmcmVlIHRhaWwuIEF0IGFkZHJlc3MKICAgIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCsyIGluaXRpYWxpemUgcGFyc2VyIGluaXRpYWwgY3JlZGl0LiAqLwogI2RlZmluZSBCUkIxX1JFR19GUkVFX0xJU1RfUFJTX0NSRFQJCQkJIDB4NjAyMDAKKy8qIFtSVyAxMF0gVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhYm92ZSB3aGljaCB0aGUgSGlnaF9sbGZjIHNpZ25hbCB0bworICAgaW50ZXJmYWNlICNuIGlzIGRlLWFzc2VydGVkLiAqLworI2RlZmluZSBCUkIxX1JFR19ISUdIX0xMRkNfSElHSF9USFJFU0hPTERfMAkJCSAweDYwMTRjCisvKiBbUlcgMTBdIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYmVsb3cgd2hpY2ggdGhlIEhpZ2hfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBhc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfSElHSF9MTEZDX0xPV19USFJFU0hPTERfMAkJCSAweDYwMTNjCiAvKiBbUlcgMjNdIExMIFJBTSBkYXRhLiAqLwogI2RlZmluZSBCUkIxX1JFR19MTF9SQU0gCQkJCQkgMHg2MTAwMAorLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGFib3ZlIHdoaWNoIHRoZSBMb3dfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBkZS1hc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfTE9XX0xMRkNfSElHSF9USFJFU0hPTERfMAkJCSAweDYwMTZjCisvKiBbUlcgMTBdIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYmVsb3cgd2hpY2ggdGhlIExvd19sbGZjIHNpZ25hbCB0bworICAgaW50ZXJmYWNlICNuIGlzIGFzc2VydGVkLiAqLworI2RlZmluZSBCUkIxX1JFR19MT1dfTExGQ19MT1dfVEhSRVNIT0xEXzAJCQkgMHg2MDE1YwogLyogW1IgMjRdIFRoZSBudW1iZXIgb2YgZnVsbCBibG9ja3MuICovCiAjZGVmaW5lIEJSQjFfUkVHX05VTV9PRl9GVUxMX0JMT0NLUwkJCQkgMHg2MDA5MAogLyogW1NUIDMyXSBUaGUgbnVtYmVyIG9mIGN5Y2xlcyB0aGF0IHRoZSB3cml0ZV9mdWxsIHNpZ25hbCB0b3dhcmRzIE1BQyAjMApAQCAtMTI1LDYgKzEzNywxMCBAQAogICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgQ0NNX1JFR19DUU1fUF9XRUlHSFQJCQkJCSAweGQwMGI4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHNlY29uZGFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIENDTV9SRUdfQ1FNX1NfV0VJR0hUCQkJCQkgMHhkMDBiYwogLyogW1JXIDFdIElucHV0IFNETSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTEzMiw2ICsxNDgsMTAgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSBTRE0gaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBDQ01fUkVHX0NTRE1fTEVOR1RIX01JUyAJCQkJIDB4ZDAxNzAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTRE0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIENDTV9SRUdfQ1NETV9XRUlHSFQJCQkJCSAweGQwMGI0CiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgZm9yIFFNIGZvcm1hdHRpbmcgaW4gY2FzZSBvZiBhbiBlcnJvciBpbiB0aGUgUU0KICAgIGlucHV0cy4gKi8KICNkZWZpbmUgQ0NNX1JFR19FUlJfQ0NNX0hEUgkJCQkJIDB4ZDAwOTQKQEAgLTIxMSw2ICsyMzEsMTEgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSBTVE9STSBpbnRlcmZhY2UgaXMgZGV0ZWN0ZWQuICovCiAjZGVmaW5lIENDTV9SRUdfU1RPUk1fTEVOR1RIX01JUwkJCQkgMHhkMDE2YworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFNUT1JNIGlucHV0IGluIHRoZSBXUlIgKFdlaWdodGVkIFJvdW5kIHJvYmluKQorICAgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yCisgICB3ZWlnaHQgMShsZWFzdCBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMiAobW9yZSBwcmlvcml0aXNlZCk7CisgICB0Yy4gKi8KKyNkZWZpbmUgQ0NNX1JFR19TVE9STV9XRUlHSFQJCQkJCSAweGQwMDljCiAvKiBbUlcgMV0gSW5wdXQgdHNlbSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTMyMyw3ICszNDgsMTEgQEAKICAgIHNldCBvbmUgb2YgdGhlc2UgYml0cy4gdGhlIGJpdCBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQgaW4gQ0ZDCiAgICBzcGVjaWZpY2F0aW9ucyAqLwogI2RlZmluZSBDRkNfUkVHX0VSUk9SX1ZFQ1RPUgkJCQkJIDB4MTA0MDNjCisvKiBbV0IgOTNdIExDSUQgaW5mbyByYW0gYWNjZXNzICovCisjZGVmaW5lIENGQ19SRUdfSU5GT19SQU0JCQkJCSAweDEwNTAwMAorI2RlZmluZSBDRkNfUkVHX0lORk9fUkFNX1NJWkUJCQkJCSAxMDI0CiAjZGVmaW5lIENGQ19SRUdfSU5JVF9SRUcJCQkJCSAweDEwNDA0YworI2RlZmluZSBDRkNfUkVHX0lOVEVSRkFDRVMJCQkJCSAweDEwNDA1OAogLyogW1JXIDI0XSB7d2VpZ2h0X2xvYWRfY2xpZW50N1syOjBdIHRvIHdlaWdodF9sb2FkX2NsaWVudDBbMjowXX0uIHRoaXMKICAgIGZpZWxkIGFsbG93cyBjaGFuZ2luZyB0aGUgcHJpb3JpdGllcyBvZiB0aGUgd2VpZ2h0ZWQtcm91bmQtcm9iaW4gYXJiaXRlcgogICAgd2hpY2ggc2VsZWN0cyB3aGljaCBDRkMgbG9hZCBjbGllbnQgc2hvdWxkIGJlIHNlcnZlZCBuZXh0ICovCkBAIC0zMzcsOCArMzY2LDYgQEAKICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfQUxMT0MgCQkJCSAweDEwNDAyMAogLyogW1IgOV0gTnVtYmVyIG9mIEFycml2aW5nIExDSURzIGluIExpbmsgTGlzdCBCbG9jayAqLwogI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19BUlJJVklORwkJCQkgMHgxMDQwMDQKLS8qIFtSIDldIE51bWJlciBvZiBJbnNpZGUgTENJRHMgaW4gTGluayBMaXN0IEJsb2NrICovCi0jZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0lOU0lERQkJCQkgMHgxMDQwMDgKIC8qIFtSIDldIE51bWJlciBvZiBMZWF2aW5nIExDSURzIGluIExpbmsgTGlzdCBCbG9jayAqLwogI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19MRUFWSU5HCQkJCSAweDEwNDAxOAogLyogW1JXIDhdIFRoZSBldmVudCBpZCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwpAQCAtNzMwLDYgKzc1Nyw3IEBACiAjZGVmaW5lIERPUlFfUkVHX1NIUlRfQ01IRUFECQkJCQkgMHgxNzAwNTQKICNkZWZpbmUgSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzAJCQkJICgweDE8PDQpCiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wCQkJCSAoMHgxPDwzKQorI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfTVNJX0FUVE5fRU5fMAkJCQkgKDB4MTw8NykKICNkZWZpbmUgSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wCQkJICgweDE8PDIpCiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgCQkJICgweDE8PDEpCiAjZGVmaW5lIEhDX1JFR19BR0dfSU5UXzAJCQkJCSAweDEwODA1MApAQCAtMTQxMCw2ICsxNDM4LDI5IEBACiAgICBUaGlzIGlzIHRoZSByZXN1bHQgdmFsdWUgb2YgdGhlIHBpbjsgbm90IHRoZSBkcml2ZSB2YWx1ZS4gV3JpdGluZyB0aGVzZQogICAgYml0cyB3aWxsIGhhdmUgbm90IGVmZmVjdC4gKi8KICNkZWZpbmUgTUlTQ19SRUdfR1BJTwkJCQkJCSAweGE0OTAKKy8qIFtSVyA4XSBUaGVzZSBiaXRzIGVuYWJsZSB0aGUgR1BJT19JTlRzIHRvIHNpZ25hbHMgZXZlbnQgdG8gdGhlCisgICBJR1UvTUNQLmFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIG1hcDogWzBdIHAwX2dwaW9fMDsgWzFdIHAwX2dwaW9fMTsgWzJdCisgICBwMF9ncGlvXzI7IFszXSBwMF9ncGlvXzM7IFs0XSBwMV9ncGlvXzA7IFs1XSBwMV9ncGlvXzE7IFs2XSBwMV9ncGlvXzI7CisgICBbN10gcDFfZ3Bpb18zOyAqLworI2RlZmluZSBNSVNDX1JFR19HUElPX0VWRU5UX0VOCQkJCQkgMHhhMmJjCisvKiBbUlcgMzJdIEdQSU8gSU5ULiBbMzEtMjhdIE9MRF9DTFIgcG9ydDE7IFsyNy0yNF0gT0xEX0NMUiBwb3J0MDsgV3JpdGluZyBhCisgICAnMScgdG8gdGhlc2UgYml0IGNsZWFycyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlICNPTERfVkFMVUUgcmVnaXN0ZXIuCisgICBUaGlzIHdpbGwgYWNrbm93bGVkZ2UgYW4gaW50ZXJydXB0IG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgY29ycmVzcG9uZGluZworICAgR1BJTyBpbnB1dCAocmVzZXQgdmFsdWUgMCkuIFsyMy0xNl0gT0xEX1NFVCBbMjMtMTZdIHBvcnQxOyBPTERfU0VUIHBvcnQwOworICAgV3JpdGluZyBhICcxJyB0byB0aGVzZSBiaXQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlICNPTERfVkFMVUUKKyAgIHJlZ2lzdGVyLiBUaGlzIHdpbGwgYWNrbm93bGVkZ2UgYW4gaW50ZXJydXB0IG9uIHRoZSByaXNpbmcgZWRnZSBvZgorICAgY29ycmVzcG9uZGluZyBTUElPIGlucHV0IChyZXNldCB2YWx1ZSAwKS4gWzE1LTEyXSBPTERfVkFMVUUgWzExLThdIHBvcnQxOworICAgT0xEX1ZBTFVFIHBvcnQwOyBSTzsgVGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBHUElPIGlucHV0CisgICB2YWx1ZS4gV2hlbiB0aGUgfklOVF9TVEFURSBiaXQgaXMgc2V0OyB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhlIE9MRCB2YWx1ZQorICAgb2YgdGhlIHBpbiBzdWNoIHRoYXQgaWYgfklOVF9TVEFURSBpcyBzZXQgYW5kIHRoaXMgYml0IGlzICcwJzsgdGhlbiB0aGUKKyAgIGludGVycnVwdCBpcyBkdWUgdG8gYSBsb3cgdG8gaGlnaCBlZGdlLiBJZiB+SU5UX1NUQVRFIGlzIHNldCBhbmQgdGhpcyBiaXQKKyAgIGlzICcxJzsgdGhlbiB0aGUgaW50ZXJydXB0IGlzIGR1ZSB0byBhIGhpZ2ggdG8gbG93IGVkZ2UgKHJlc2V0IHZhbHVlIDApLgorICAgWzctNF0gSU5UX1NUQVRFIHBvcnQxOyBbMy0wXSBJTlRfU1RBVEUgUk8gcG9ydDA7IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlCisgICBjdXJyZW50IEdQSU8gaW50ZXJydXB0IHN0YXRlIGZvciBlYWNoIEdQSU8gcGluLiBUaGlzIGJpdCBpcyBjbGVhcmVkIHdoZW4KKyAgIHRoZSBhcHByb3ByaWF0ZSAjT0xEX1NFVCBvciAjT0xEX0NMUiBjb21tYW5kIGJpdCBpcyB3cml0dGVuLiBUaGlzIGJpdCBpcworICAgc2V0IHdoZW4gdGhlIEdQSU8gaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgaW4gI09MRF9WQUxVRQorICAgKHJlc2V0IHZhbHVlIDApLiAqLworI2RlZmluZSBNSVNDX1JFR19HUElPX0lOVAkJCQkJIDB4YTQ5NAogLyogW1IgMjhdIHRoaXMgZmllbGQgaG9sZCB0aGUgbGFzdCBpbmZvcm1hdGlvbiB0aGF0IGNhdXNlZCByZXNlcnZlZAogICAgYXR0ZW50aW9uLiBiaXRzIFsxOTowXSAtIGFkZHJlc3M7IFsyMjoyMF0gZnVuY3Rpb247IFsyM10gcmVzZXJ2ZWQ7CiAgICBbMjc6MjRdIHRoZSBtYXN0ZXIgdGhhdCBjYXVzZWQgdGhlIGF0dGVudGlvbiAtIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nCkBAIC0xNTU0LDYgKzE2MDUsMTQgQEAKICAgIGNvbW1hbmQgYml0IGlzIHdyaXR0ZW4uIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBTUElPIGlucHV0IGRvZXMgbm90CiAgICBtYXRjaCB0aGUgY3VycmVudCB2YWx1ZSBpbiAjT0xEX1ZBTFVFIChyZXNldCB2YWx1ZSAwKS4gKi8KICNkZWZpbmUgTUlTQ19SRUdfU1BJT19JTlQJCQkJCSAweGE1MDAKKy8qIFtSVyAzMl0gcmVsb2FkIHZhbHVlIGZvciBjb3VudGVyIDQgaWYgcmVsb2FkOyB0aGUgdmFsdWUgd2lsbCBiZSByZWxvYWQgaWYKKyAgIHRoZSBjb3VudGVyIHJlYWNoZWQgemVybyBhbmQgdGhlIHJlbG9hZCBiaXQKKyAgICh+bWlzY19yZWdpc3RlcnNfc3dfdGltZXJfY2ZnXzQuc3dfdGltZXJfY2ZnXzRbMV0gKSBpcyBzZXQgKi8KKyNkZWZpbmUgTUlTQ19SRUdfU1dfVElNRVJfUkVMT0FEX1ZBTF80CQkJCSAweGEyZmMKKy8qIFtSVyAzMl0gdGhlIHZhbHVlIG9mIHRoZSBjb3VudGVyIGZvciBzdyB0aW1lcnMxLTguIHRoZXJlIGFyZSA4IGFkZHJlc3NlcworICAgaW4gdGhpcyByZWdpc3Rlci4gYWRkcmVzIDAgLSB0aW1lciAxOyBhZGRyZXNzIC0gdGltZXIgMu+/vWFkZHJlc3MgNyAtCisgICB0aW1lciA4ICovCisjZGVmaW5lIE1JU0NfUkVHX1NXX1RJTUVSX1ZBTAkJCQkJIDB4YTVjMAogLyogW1JXIDFdIFNldCBieSB0aGUgTUNQIHRvIHJlbWVtYmVyIGlmIG9uZSBvciBtb3JlIG9mIHRoZSBkcml2ZXJzIGlzL2FyZQogICAgbG9hZGVkOyAwLXByZXBhcmU7IC11bnByZXBhcmUgKi8KICNkZWZpbmUgTUlTQ19SRUdfVU5QUkVQQVJFRAkJCQkJIDB4YTQyNApAQCAtMTY2MCw2ICsxNzE5LDE5IEBACiAvKiBbUlcgNF0gbGVkIG1vZGUgZm9yIHBvcnQwOiAwIE1BQzsgMS0zIFBIWTE7IDQgTUFDMjsgNS03IFBIWTQ7IDgtTUFDMzsKICAgIDktMTFQSFk3OyAxMiBNQUM0OyAxMy0xNSBQSFkxMDsgKi8KICNkZWZpbmUgTklHX1JFR19MRURfTU9ERV9QMAkJCQkJIDB4MTAyZjAKKy8qIFtSVyAzXSBmb3IgcG9ydDAgZW5hYmxlIGZvciBsbGZjIHBwcCBhbmQgcGF1c2UuIGIwIC0gYnJiMSBlbmFibGU7IGIxLQorICAgdHNkbSBlbmFibGU7IGIyLSB1c2RtIGVuYWJsZSAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfRUdSRVNTX1NSQ19FTkFCTEVfMAkJCSAweDE2MDcwCisvKiBbUlcgMV0gU0FGQyBlbmFibGUgZm9yIHBvcnQwLiBUaGlzIHJlZ2lzdGVyIG1heSBnZXQgMSBvbmx5IHdoZW4KKyAgIH5wcHBfZW5hYmxlLnBwcF9lbmFibGUgPSAwIGFuZCBwYXVzZV9lbmFibGUucGF1c2VfZW5hYmxlID0wIGZvciB0aGUgc2FtZQorICAgcG9ydCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfRU5BQkxFXzAJCQkJCSAweDE2MjA4CisvKiBbUlcgMTZdIGNsYXNzZXMgYXJlIGhpZ2gtcHJpb3JpdHkgZm9yIHBvcnQwICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19ISUdIX1BSSU9SSVRZX0NMQVNTRVNfMAkJCSAweDE2MDU4CisvKiBbUlcgMTZdIGNsYXNzZXMgYXJlIGxvdy1wcmlvcml0eSBmb3IgcG9ydDAgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0xPV19QUklPUklUWV9DTEFTU0VTXzAJCQkgMHgxNjA2MAorLyogW1JXIDFdIE91dHB1dCBlbmFibGUgb2YgbWVzc2FnZSB0byBMTEZDIEJNQUMgSUYgZm9yIHBvcnQwICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19PVVRfRU5fMAkJCQkJIDB4MTYwYzgKICNkZWZpbmUgTklHX1JFR19MTEgwX0FDUElfUEFUXzBfQ1JDCQkJCSAweDEwMTVjCiAjZGVmaW5lIE5JR19SRUdfTExIMF9BQ1BJX1BBVF82X0xFTgkJCQkgMHgxMDE1NAogI2RlZmluZSBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSwkJCQkgMHgxMDI0NApAQCAtMTczMCw2ICsxODAyLDEwIEBACiAjZGVmaW5lIE5JR19SRUdfTklHX0lOVF9TVFNfMQkJCQkJIDB4MTAzYzAKIC8qIFtSIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBOSUdfUkVHX05JR19QUlRZX1NUUwkJCQkJIDB4MTAzZDAKKy8qIFtSVyAxXSBQYXVzZSBlbmFibGUgZm9yIHBvcnQwLiBUaGlzIHJlZ2lzdGVyIG1heSBnZXQgMSBvbmx5IHdoZW4KKyAgIH5zYWZjX2VuYWJsZS5zYWZjX2VuYWJsZSA9IDAgYW5kIHBwcF9lbmFibGUucHBwX2VuYWJsZSA9MCBmb3IgdGhlIHNhbWUKKyAgIHBvcnQgKi8KKyNkZWZpbmUgTklHX1JFR19QQVVTRV9FTkFCTEVfMAkJCQkJIDB4MTYwYzAKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYIFBCRiBMUCBJRiAqLwogI2RlZmluZSBOSUdfUkVHX1BCRl9MQl9JTl9FTgkJCQkJIDB4MTAwYjQKIC8qIFtSVyAxXSBWYWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIHdpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gcG9ydCBzd2FwIHdoZW4KQEAgLTE3MzksNiArMTgxNSwxMCBAQAogI2RlZmluZSBOSUdfUkVHX1BSU19FT1BfT1VUX0VOCQkJCQkgMHgxMDEwNAogLyogW1JXIDFdIElucHV0IGVuYWJsZSBmb3IgUlggcGFyc2VyIHJlcXVlc3QgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QUlNfUkVRX0lOX0VOCQkJCQkgMHgxMDBiOAorLyogW1JXIDVdIGNvbnRyb2wgdG8gc2VyZGVzIC0gQ0w0NSBERVZBRCAqLworI2RlZmluZSBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9ERVZBRAkJCQkgMHgxMDM3MAorLyogW1JXIDFdIGNvbnRyb2wgdG8gc2VyZGVzOyAwIC0gY2xhdXNlIDQ1OyAxIC0gY2xhdXNlIDIyICovCisjZGVmaW5lIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX1NUCQkJCSAweDEwMzZjCiAvKiBbUlcgNV0gY29udHJvbCB0byBzZXJkZXMgLSBDTDIyIFBIWV9BREQgYW5kIENMNDUgUFJUQUQgKi8KICNkZWZpbmUgTklHX1JFR19TRVJERVMwX0NUUkxfUEhZX0FERFIJCQkJIDB4MTAzNzQKIC8qIFtSIDFdIHN0YXR1cyBmcm9tIHNlcmRlczAgdGhhdCBpbnB1dHMgdG8gaW50ZXJydXB0IGxvZ2ljIG9mIGxpbmsgc3RhdHVzICovCkBAIC0xODg1LDYgKzE5NjUsNyBAQAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMgkJCSAweDQwMGU0CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8zCQkJIDB4NDAwZTgKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzQJCQkgMHg0MDBlYworI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNQkJCSAweDQwMGYwCiAvKiBbUlcgMzJdIFRoZSBDTSBoZWFkZXIgZm9yIGZsdXNoIG1lc3NhZ2Ugd2hlcmUgJ2xvYWQgZXhpc3RlZCcgYml0IGluIENGQwogICAgbG9hZCByZXNwb25zZSBpcyBzZXQgYW5kIHBhY2tldCB0eXBlIGlzIDAuIFVzZWQgaW4gcGFja2V0IHN0YXJ0IG1lc3NhZ2UKICAgIHRvIFRDTS4gKi8KQEAgLTE4OTMsNiArMTk3NCw3IEBACiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8yCQkJIDB4NDAwYzQKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzMJCQkgMHg0MDBjOAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNAkJCSAweDQwMGNjCisjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV81CQkJIDB4NDAwZDAKIC8qIFtSVyAzMl0gVGhlIENNIGhlYWRlciBmb3IgYSBtYXRjaCBhbmQgcGFja2V0IHR5cGUgMSBmb3IgbG9vcGJhY2sgcG9ydC4KICAgIFVzZWQgaW4gcGFja2V0IHN0YXJ0IG1lc3NhZ2UgdG8gVENNLiAqLwogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9MT09QQkFDS19UWVBFXzEJCQkJIDB4NDAwOWMKQEAgLTIwMzUsNiArMjExNywxOSBAQAogI2RlZmluZSBQWFAyX1JFR19QR0xfSU5UX1hTRE1fNSAJCQkJIDB4MTIwNGU4CiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9JTlRfWFNETV82IAkJCQkgMHgxMjA0ZWMKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzcgCQkJCSAweDEyMDRmMAorLyogW1JXIDNdIHRoaXMgZmllbGQgYWxsb3dzIG9uZSBmdW5jdGlvbiB0byBwcmV0ZW5kIGJlaW5nIGFub3RoZXIgZnVuY3Rpb24KKyAgIHdoZW4gYWNjZXNzaW5nIGFueSBCQVIgbWFwcGVkIHJlc291cmNlIHdpdGhpbiB0aGUgZGV2aWNlLiB0aGUgdmFsdWUgb2YKKyAgIHRoZSBmaWVsZCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgYWNjZXNzZWQKKyAgIGVmZmVjdGl2ZWx5LiBhZnRlciBzb2Z0d2FyZSB3cml0ZSB0byB0aGlzIGJpdCBpdCBtdXN0IHJlYWQgaXQgaW4gb3JkZXIgdG8KKyAgIGtub3cgdGhhdCB0aGUgbmV3IHZhbHVlIGlzIHVwZGF0ZWQgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMAkJCQkgMHgxMjA2NzQKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMQkJCQkgMHgxMjA2NzgKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMgkJCQkgMHgxMjA2N2MKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMwkJCQkgMHgxMjA2ODAKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNAkJCQkgMHgxMjA2ODQKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNQkJCQkgMHgxMjA2ODgKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNgkJCQkgMHgxMjA2OGMKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNwkJCQkgMHgxMjA2OTAKIC8qIFtSIDFdIHRoaXMgYml0IGluZGljYXRlcyB0aGF0IGEgcmVhZCByZXF1ZXN0IHdhcyBibG9ja2VkIGJlY2F1c2Ugb2YKICAgIGJ1c19tYXN0ZXJfZW4gd2FzIGRlYXNzZXJ0ZWQgKi8KICNkZWZpbmUgUFhQMl9SRUdfUEdMX1JFQURfQkxPQ0tFRAkJCQkgMHgxMjA1NjgKQEAgLTI0OTgsNiArMjU5MywxMSBAQAogICAgY29uc2lkZXJlZCB6ZXJvIHNvIHByYWN0aWNhbGx5IHRoZXJlIGFyZSBvbmx5IDIwIGJpdHMgaW4gdGhpcyByZWdpc3RlcjsKICAgIHF1ZXVlcyA2My0wICovCiAjZGVmaW5lIFFNX1JFR19CQVNFQUREUiAJCQkJCSAweDE2ODkwMAorLyogW1JXIDMyXSBUaGUgYmFzZSBsb2dpY2FsIGFkZHJlc3MgKGluIGJ5dGVzKSBvZiBlYWNoIHBoeXNpY2FsIHF1ZXVlLiBUaGUKKyAgIGluZGV4IEkgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyLiBUaGUgMTIgbHNicyBhcmUgaWdub3JlIGFuZAorICAgY29uc2lkZXJlZCB6ZXJvIHNvIHByYWN0aWNhbGx5IHRoZXJlIGFyZSBvbmx5IDIwIGJpdHMgaW4gdGhpcyByZWdpc3RlcjsKKyAgIHF1ZXVlcyAxMjctNjQgKi8KKyNkZWZpbmUgUU1fUkVHX0JBU0VBRERSX0VYVF9BCQkJCQkgMHgxNmUxMDAKIC8qIFtSVyAxNl0gVGhlIGJ5dGUgY3JlZGl0IGNvc3QgZm9yIGVhY2ggdGFzay4gVGhpcyB2YWx1ZSBpcyBmb3IgYm90aCBwb3J0cyAqLwogI2RlZmluZSBRTV9SRUdfQllURUNSRENPU1QJCQkJCSAweDE2ODIzNAogLyogW1JXIDE2XSBUaGUgaW5pdGlhbCBieXRlIGNyZWRpdCB2YWx1ZSBmb3IgYm90aCBwb3J0cy4gKi8KQEAgLTM0MzgsNiArMzUzOCwxNiBAQAogI2RlZmluZSBTUkNfUkVHX0tFWVJTUzBfMAkJCQkJIDB4NDA0MDgKICNkZWZpbmUgU1JDX1JFR19LRVlSU1MwXzcJCQkJCSAweDQwNDI0CiAjZGVmaW5lIFNSQ19SRUdfS0VZUlNTMV85CQkJCQkgMHg0MDQ1NAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF8wCQkJCQkgMHg0MDQ1OAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF8xCQkJCQkgMHg0MDQ1YworI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF8yCQkJCQkgMHg0MDQ2MAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF8zCQkJCQkgMHg0MDQ2NAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF80CQkJCQkgMHg0MDQ2OAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF81CQkJCQkgMHg0MDQ2YworI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF82CQkJCQkgMHg0MDQ3MAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF83CQkJCQkgMHg0MDQ3NAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF84CQkJCQkgMHg0MDQ3OAorI2RlZmluZSBTUkNfUkVHX0tFWVNFQVJDSF85CQkJCQkgMHg0MDQ3YwogI2RlZmluZSBTUkNfUkVHX0xBU1RGUkVFMAkJCQkJIDB4NDA1MzAKICNkZWZpbmUgU1JDX1JFR19OVU1CRVJfSEFTSF9CSVRTMAkJCQkgMHg0MDQwMAogLyogW1JXIDFdIFJlc2V0IGludGVybmFsIHN0YXRlIG1hY2hpbmVzLiAqLwpAQCAtMzQ4MSw2ICszNTkxLDEwIEBACiAvKiBbUkMgMV0gTWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQgdGhlIEluIzkKICAgIGludGVyZmFjZS4gKi8KICNkZWZpbmUgVENNX1JFR19DU0VNX0xFTkdUSF9NSVMgCQkJCSAweDUwMTc0CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgY3NlbSBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVENNX1JFR19DU0VNX1dFSUdIVAkJCQkJIDB4NTAwYmMKIC8qIFtSVyA4XSBUaGUgRXZlbnQgSUQgaW4gY2FzZSBvZiBFcnJvckZsZyBpcyBzZXQgaW4gdGhlIGlucHV0IG1lc3NhZ2UuICovCiAjZGVmaW5lIFRDTV9SRUdfRVJSX0VWTlRfSUQJCQkJCSAweDUwMGEwCiAvKiBbUlcgMjhdIFRoZSBDTSBlcnJvbmVvdXMgaGVhZGVyIGZvciBRTSBhbmQgVGltZXJzIGZvcm1hdHRpbmcuICovCkBAIC0zNTI0LDYgKzM2MzgsNyBAQAogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzIJCQkJCSAweDUwMDU4CiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMwkJCQkJIDB4NTAwNWMKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF80CQkJCQkgMHg1MDA2MAorI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzUJCQkJCSAweDUwMDY0CiAvKiBbUlcgMV0gSW5wdXQgcGJmIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMgZGlzcmVnYXJkZWQ7CiAgICBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlIHRyZWF0ZWQgYXMgdXN1YWw7CiAgICBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMzU2Myw2ICszNjc4LDEwIEBACiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KICNkZWZpbmUgVENNX1JFR19TVE9STV9UQ01fSUZFTgkJCQkJIDB4NTAwMTAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTVE9STSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVENNX1JFR19TVE9STV9XRUlHSFQJCQkJCSAweDUwMGFjCiAvKiBbUlcgMV0gQ00gLSBDRkMgSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcyBkaXNyZWdhcmRlZDsKICAgIGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUgdHJlYXRlZCBhcyB1c3VhbDsKICAgIGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0zNTk4LDEwICszNzE3LDIyIEBACiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KICNkZWZpbmUgVENNX1JFR19UTV9UQ01fSUZFTgkJCQkJIDB4NTAwMWMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBUaW1lcnMgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVE1fV0VJR0hUCQkJCQkgMHg1MDBkMAogLyogW1JXIDZdIFFNIG91dHB1dCBpbml0aWFsIGNyZWRpdC4gTWF4IGNyZWRpdCBhdmFpbGFibGUgLSAzMi5Xcml0ZSB3cml0ZXMKICAgIHRoZSBpbml0aWFsIGNyZWRpdCB2YWx1ZTsgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjcmVkaXQKICAgIGNvdW50ZXIuIE11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gMzIgYXQgc3RhcnQtdXAuICovCiAjZGVmaW5lIFRDTV9SRUdfVFFNX0lOSVRfQ1JECQkJCQkgMHg1MDIxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChwcmltYXJ5KSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMAorICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVENNX1JFR19UUU1fUF9XRUlHSFQJCQkJCSAweDUwMGM4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHNlY29uZGFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVFFNX1NfV0VJR0hUCQkJCQkgMHg1MDBjYwogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChwcmltYXJ5KS4gKi8KICNkZWZpbmUgVENNX1JFR19UUU1fVENNX0hEUl9QCQkJCQkgMHg1MDA5MAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChzZWNvbmRhcnkpLiAqLwpAQCAtMzYyOCw2ICszNzU5LDEwIEBACiAvKiBbUkMgMV0gTWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQgdGhlIEluIzgKICAgIGludGVyZmFjZS4gKi8KICNkZWZpbmUgVENNX1JFR19VU0VNX0xFTkdUSF9NSVMgCQkJCSAweDUwMTcwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgdXNlbSBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVENNX1JFR19VU0VNX1dFSUdIVAkJCQkJIDB4NTAwYjgKIC8qIFtSVyAyMV0gSW5kaXJlY3QgYWNjZXNzIHRvIHRoZSBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBYWCBwcm90ZWN0aW9uCiAgICBtZWNoYW5pc20uIFRoZSBmaWVsZHMgYXJlOiBbNTowXSAtIGxlbmd0aCBvZiB0aGUgbWVzc2FnZTsgMTU6Nl0gLSBtZXNzYWdlCiAgICBwb2ludGVyOyAyMDoxNl0gLSBuZXh0IHBvaW50ZXIuICovCkBAIC0zNjc3LDYgKzM4MTIsNyBAQAogI2RlZmluZSBUTV9SRUdfRU5fQ0wxX0lOUFVUCQkJCQkgMHgxNjQwMGMKIC8qIFtSVyAxXSBFbmFibGUgY2xpZW50MiBpbnB1dC4gKi8KICNkZWZpbmUgVE1fUkVHX0VOX0NMMl9JTlBVVAkJCQkJIDB4MTY0MDEwCisjZGVmaW5lIFRNX1JFR19FTl9MSU5FQVIwX1RJTUVSIAkJCQkgMHgxNjQwMTQKIC8qIFtSVyAxXSBFbmFibGUgcmVhbCB0aW1lIGNvdW50ZXIuICovCiAjZGVmaW5lIFRNX1JFR19FTl9SRUFMX1RJTUVfQ05UIAkJCQkgMHgxNjQwZDgKIC8qIFtSVyAxXSBFbmFibGUgZm9yIFRpbWVycyBzdGF0ZSBtYWNoaW5lcy4gKi8KQEAgLTM2ODQsMTQgKzM4MjAsMjIgQEAKIC8qIFtSVyA0XSBMb2FkIHZhbHVlIGZvciBleHBpcmF0aW9uIGNyZWRpdCBjbnQuIENGQyBtYXggbnVtYmVyIG9mCiAgICBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3RzIGZvciB0aW1lcnMgKGV4cGlyYXRpb24pIGNvbnRleHQgbG9hZGluZy4gKi8KICNkZWZpbmUgVE1fUkVHX0VYUF9DUkRDTlRfVkFMCQkJCQkgMHgxNjQyMzgKKy8qIFtSVyAzMl0gTGluZWFyMCBsb2dpYyBhZGRyZXNzLiAqLworI2RlZmluZSBUTV9SRUdfTElOMF9MT0dJQ19BRERSCQkJCQkgMHgxNjQyNDAKIC8qIFtSVyAxOF0gTGluZWFyMCBNYXggYWN0aXZlIGNpZCAoaW4gYmFua3Mgb2YgMzIgZW50cmllcykuICovCiAjZGVmaW5lIFRNX1JFR19MSU4wX01BWF9BQ1RJVkVfQ0lECQkJCSAweDE2NDA0OAogLyogW1dCIDY0XSBMaW5lYXIwIHBoeSBhZGRyZXNzLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9QSFlfQUREUgkJCQkJIDB4MTY0MjcwCisvKiBbUlcgMV0gTGluZWFyMCBwaHlzaWNhbCBhZGRyZXNzIHZhbGlkLiAqLworI2RlZmluZSBUTV9SRUdfTElOMF9QSFlfQUREUl9WQUxJRAkJCQkgMHgxNjQyNDgKIC8qIFtSVyAyNF0gTGluZWFyMCBhcnJheSBzY2FuIHRpbWVvdXQuICovCiAjZGVmaW5lIFRNX1JFR19MSU4wX1NDQU5fVElNRQkJCQkJIDB4MTY0MDNjCisvKiBbUlcgMzJdIExpbmVhcjEgbG9naWMgYWRkcmVzcy4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjFfTE9HSUNfQUREUgkJCQkJIDB4MTY0MjUwCiAvKiBbV0IgNjRdIExpbmVhcjEgcGh5IGFkZHJlc3MuICovCiAjZGVmaW5lIFRNX1JFR19MSU4xX1BIWV9BRERSCQkJCQkgMHgxNjQyODAKKy8qIFtSVyAxXSBMaW5lYXIxIHBoeXNpY2FsIGFkZHJlc3MgdmFsaWQuICovCisjZGVmaW5lIFRNX1JFR19MSU4xX1BIWV9BRERSX1ZBTElECQkJCSAweDE2NDI1OAogLyogW1JXIDZdIExpbmVhciB0aW1lciBzZXRfY2xlYXIgZmlmbyB0aHJlc2hvbGQuICovCiAjZGVmaW5lIFRNX1JFR19MSU5fU0VUQ0xSX0ZJRk9fQUxGVUxMX1RIUgkJCSAweDE2NDA3MAogLyogW1JXIDJdIExvYWQgdmFsdWUgZm9yIHBjaSBhcmJpdGVyIGNyZWRpdCBjbnQuICovCkBAIC0zNzA4LDYgKzM4NTIsMTcgQEAKICNkZWZpbmUgVE1fUkVHX1RNX0lOVF9TVFMJCQkJCSAweDE2NDBmMAogLyogW1JXIDhdIFRoZSBldmVudCBpZCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAJCQkJIDB4NDIwMzgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xCQkJCSAweDQyMDNjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4NDIwNjAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHg0MjA2NAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyCQkJCSAweDQyMDY4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4NDIwNmMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNAkJCQkgMHg0MjA3MAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE1CQkJCSAweDQyMDc0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTYJCQkJIDB4NDIwNzgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNwkJCQkgMHg0MjA3YworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE4CQkJCSAweDQyMDgwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTkJCQkJIDB4NDIwODQKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweDQyMDQwCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjAJCQkJIDB4NDIwODgKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHg0MjA4YwpAQCAtMzcyMyw2ICszODc4LDE5IEBACiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzAJCQkJIDB4NDIwYjAKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMQkJCQkgMHg0MjBiNAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQJCQkJIDB4NDIwNDgKKy8qIFtSVyAxXSBUaGUgVCBiaXQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzAJCQkJCSAweDQyMGI4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xCQkJCQkgMHg0MjBiYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTAJCQkJCSAweDQyMGUwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMQkJCQkJIDB4NDIwZTQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEyCQkJCQkgMHg0MjBlOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTMJCQkJCSAweDQyMGVjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNAkJCQkJIDB4NDIwZjAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE1CQkJCQkgMHg0MjBmNAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTYJCQkJCSAweDQyMGY4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNwkJCQkJIDB4NDIwZmMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE4CQkJCQkgMHg0MjEwMAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTkJCQkJCSAweDQyMTA0CiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjZmNfcnNwIGxjaWQgKi8KICNkZWZpbmUgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSCQkJCSAweDQyMDA4CiAvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMCAqLwpAQCAtMzk2Nyw2ICs0MTM1LDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgZG9ycSBpbnRlcmZhY2UgaXMgZGV0ZWN0ZWQuICovCiAjZGVmaW5lIFVDTV9SRUdfRE9SUV9MRU5HVEhfTUlTIAkJCQkgMHhlMDE2OAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IGRvcnEgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfRE9SUV9XRUlHSFQJCQkJCSAweGUwMGMwCiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEIGluIGNhc2UgRXJyb3JGbGcgaW5wdXQgbWVzc2FnZSBiaXQgaXMgc2V0LiAqLwogI2RlZmluZSBVQ01fUkVHX0VSUl9FVk5UX0lECQkJCQkgMHhlMDBhNAogLyogW1JXIDI4XSBUaGUgQ00gZXJyb25lb3VzIGhlYWRlciBmb3IgUU0gYW5kIFRpbWVycyBmb3JtYXR0aW5nLiAqLwpAQCAtNDAzMCw2ICs0MjAyLDEwIEBACiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KICNkZWZpbmUgVUNNX1JFR19TVE9STV9VQ01fSUZFTgkJCQkJIDB4ZTAwMTAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTVE9STSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19TVE9STV9XRUlHSFQJCQkJCSAweGUwMGIwCiAvKiBbUlcgNF0gVGltZXJzIG91dHB1dCBpbml0aWFsIGNyZWRpdC4gTWF4IGNyZWRpdCBhdmFpbGFibGUgLSAxNS5Xcml0ZQogICAgd3JpdGVzIHRoZSBpbml0aWFsIGNyZWRpdCB2YWx1ZTsgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQogICAgY3JlZGl0IGNvdW50ZXIuIE11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gNCBhdCBzdGFydC11cC4gKi8KQEAgLTQwNDAsNiArNDIxNiwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFVDTV9SRUdfVE1fVUNNX0lGRU4JCQkJCSAweGUwMDFjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgVGltZXJzIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1RNX1dFSUdIVAkJCQkJIDB4ZTAwZDQKIC8qIFtSVyAxXSBJbnB1dCB0c2VtIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtNDA5Miw2ICs0MjcyLDEwIEBACiAgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAogICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLwogI2RlZmluZSBVQ01fUkVHX1VRTV9QX1dFSUdIVAkJCQkJIDB4ZTAwY2MKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAoc2Vjb25kYXJ5KSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMAorICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19VUU1fU19XRUlHSFQJCQkJCSAweGUwMGQwCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHByaW1hcnkpLiAqLwogI2RlZmluZSBVQ01fUkVHX1VRTV9VQ01fSERSX1AJCQkJCSAweGUwMDk0CiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHNlY29uZGFyeSkuICovCkBAIC00MTA3LDYgKzQyOTEsMTAgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSBTRE0gaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX1VTRE1fTEVOR1RIX01JUyAJCQkJIDB4ZTAxNTgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTRE0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfVVNETV9XRUlHSFQJCQkJCSAweGUwMGM4CiAvKiBbUlcgMV0gSW5wdXQgeHNlbSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTQxMTQsNiArNDMwMiwxMCBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIHhzZW0gaW50ZXJmYWNlIGlzZGV0ZWN0ZWQuICovCiAjZGVmaW5lIFVDTV9SRUdfWFNFTV9MRU5HVEhfTUlTIAkJCQkgMHhlMDE2NAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IHhzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfWFNFTV9XRUlHSFQJCQkJCSAweGUwMGJjCiAvKiBbUlcgMjBdIEluZGlyZWN0IGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgWFggcHJvdGVjdGlvbgogICAgbWVjaGFuaXNtLiBUaGUgZmllbGRzIGFyZTpbNTowXSAtIG1lc3NhZ2UgbGVuZ3RoOyAxNDo2XSAtIG1lc3NhZ2UKICAgIHBvaW50ZXI7IDE5OjE1XSAtIG5leHQgcG9pbnRlci4gKi8KQEAgLTQxNjMsNiArNDM1NSw3IEBACiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzAJCQkJIDB4YzQwYjAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMQkJCQkgMHhjNDBiNAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQJCQkJIDB4YzQwNDgKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF81CQkJCSAweGM0MDRjCiAvKiBbUlcgMV0gRm9yIGVhY2ggYWdncmVnYXRlZCBpbnRlcnJ1cHQgaW5kZXggd2hldGhlciB0aGUgbW9kZSBpcyBub3JtYWwgKDApCiAgICBvciBhdXRvLW1hc2stbW9kZSAoMSkgKi8KICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzAgCQkJCSAweGM0MWI4CkBAIC00MTc3LDYgKzQzNzAsOCBAQAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTcJCQkJIDB4YzQxZmMKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE4CQkJCSAweGM0MjAwCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xOQkJCQkgMHhjNDIwNAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfNCAJCQkJIDB4YzQxYzgKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzUgCQkJCSAweGM0MWNjCiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjZmNfcnNwIGxjaWQgKi8KICNkZWZpbmUgVVNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSCQkJCSAweGM0MDA4CiAvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMCAqLwpAQCAtNDQyNyw2ICs0NjIyLDEwIEBACiAvKiBbUkMgMV0gU2V0IGF0IG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0CiAgICB0aGUgZG9ycSBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFhDTV9SRUdfRE9SUV9MRU5HVEhfTUlTIAkJCQkgMHgyMDIzMAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IGRvcnEgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFhDTV9SRUdfRE9SUV9XRUlHSFQJCQkJCSAweDIwMGNjCiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEIGluIGNhc2UgdGhlIEVycm9yRmxnIGlucHV0IG1lc3NhZ2UgYml0IGlzIHNldC4gKi8KICNkZWZpbmUgWENNX1JFR19FUlJfRVZOVF9JRAkJCQkJIDB4MjAwYjAKIC8qIFtSVyAyOF0gVGhlIENNIGVycm9uZW91cyBoZWFkZXIgZm9yIFFNIGFuZCBUaW1lcnMgZm9ybWF0dGluZy4gKi8KQEAgLTQ0NjUsNiArNDY2NCwxMCBAQAogLyogW1JDIDFdIFNldCBhdCBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdAogICAgdGhlIG5pZzAgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBYQ01fUkVHX05JRzBfTEVOR1RIX01JUyAJCQkJIDB4MjAyMzgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBuaWcwIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX05JRzBfV0VJR0hUCQkJCQkgMHgyMDBkNAogLyogW1JXIDFdIElucHV0IG5pZzEgSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC00NTIzLDYgKzQ3MjYsMTAgQEAKICAgIHdyaXRlcyB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKICAgIGNyZWRpdCBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDQgYXQgc3RhcnQtdXAuICovCiAjZGVmaW5lIFhDTV9SRUdfVE1fSU5JVF9DUkQJCQkJCSAweDIwNDFjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgVGltZXJzIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX1RNX1dFSUdIVAkJCQkJIDB4MjAwZWMKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciBmb3IgVGltZXJzIGV4cGlyYXRpb24gY29tbWFuZC4gKi8KICNkZWZpbmUgWENNX1JFR19UTV9YQ01fSERSCQkJCQkgMHgyMDBhOAogLyogW1JXIDFdIFRpbWVycyAtIENNIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKQEAgLTQ2MDgsNiArNDgxNSwxMCBAQAogICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgWENNX1JFR19YUU1fUF9XRUlHSFQJCQkJCSAweDIwMGU0CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHNlY29uZGFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFhDTV9SRUdfWFFNX1NfV0VJR0hUCQkJCQkgMHgyMDBlOAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChwcmltYXJ5KS4gKi8KICNkZWZpbmUgWENNX1JFR19YUU1fWENNX0hEUl9QCQkJCQkgMHgyMDBhMAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChzZWNvbmRhcnkpLiAqLwpAQCAtNDY2NSw2ICs0ODc2LDggQEAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHgxNjYwNjAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHgxNjYwNjQKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHgxNjYwNjgKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMwkJCQkgMHgxNjYwNmMKKyNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNAkJCQkgMHgxNjYwNzAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweDE2NjA0MAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweDE2NjA4OAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweDE2NjA4YwpAQCAtNDk2NCw5ICs1MTc3LDExIEBACiAjZGVmaW5lIEVNQUNfUlhfTU9ERV9GTE9XX0VOCQkJCQkgKDFMPDwyKQogI2RlZmluZSBFTUFDX1JYX01PREVfS0VFUF9WTEFOX1RBRwkJCQkgKDFMPDwxMCkKICNkZWZpbmUgRU1BQ19SWF9NT0RFX1BST01JU0NVT1VTCQkJCSAoMUw8PDgpCisjZGVmaW5lIEVNQUNfUlhfTU9ERV9SRVNFVAkJCQkJICgxTDw8MCkKICNkZWZpbmUgRU1BQ19SWF9NVFVfU0laRV9KVU1CT19FTkEJCQkJICgxTDw8MzEpCiAjZGVmaW5lIEVNQUNfVFhfTU9ERV9FWFRfUEFVU0VfRU4JCQkJICgxTDw8MykKICNkZWZpbmUgRU1BQ19UWF9NT0RFX0ZMT1dfRU4JCQkJCSAoMUw8PDQpCisjZGVmaW5lIEVNQUNfVFhfTU9ERV9SRVNFVAkJCQkJICgxTDw8MCkKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18wCQkJCQkgMAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzEJCQkJCSAxCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMgkJCQkJIDIKQEAgLTQ5NzYsNiArNTE5MSwxMCBAQAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUX1BPUwkJCQkgMjQKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdICQkJCSAxCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5QVVRfSElfWgkJCQkgMgorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9DTFJfUE9TIAkJCSAyNAorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfQ0xSCQkJIDAKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVAkJCSAxCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MgCQkJIDE2CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XIAkJCQkgMAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIIAkJCSAxCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVwkJCQkgMApAQCAtNTAxNSwxMSArNTIzNCwxMiBAQAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX09VVFBVVF9MT1cJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19TRVRfUE9TCQkJCSA4CiAjZGVmaW5lIEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFCQkJCSAzMQotI2RlZmluZSBIV19MT0NLX1JFU09VUkNFXzgwNzJfTURJTwkJCQkgMAogI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX0dQSU8JCQkJCSAxCisjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfTURJTwkJCQkJIDAKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9QT1JUMF9BVFRfTUFTSyAJCQkgMwogI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX1NQSU8JCQkJCSAyCiAjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfVU5ESQkJCQkJIDUKKyNkZWZpbmUgUFJTX0ZMQUdfT1ZFUkVUSF9JUFY0CQkJCQkgMQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19CUkJfUEFSSVRZX0VSUk9SCQkgICAgICAoMTw8MTgpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NDTV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDwzMSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0RVX0hXX0lOVEVSUlVQVAkJICAgICAgKDE8PDkpCkBAIC01MDM0LDYgKzUyNTQsOCBAQAogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19ETUFFX0hXX0lOVEVSUlVQVAkJICAgICAgKDE8PDExKQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfSFdfSU5URVJSVVBUCSAgICAgICgxPDwxMykKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX1BBUklUWV9FUlJPUgkgICAgICAoMTw8MTIpCisjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzAJCSAgICAgICgxPDw1KQorI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xCQkgICAgICAoMTw8OSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfSUdVX1BBUklUWV9FUlJPUgkJICAgICAgKDE8PDEyKQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX0hXX0lOVEVSUlVQVAkJICAgICAgKDE8PDE1KQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX1BBUklUWV9FUlJPUgkJICAgICAgKDE8PDE0KQpAQCAtNTE4OCw3ICs1NDEwLDcgQEAKICNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfSU5UX0RJU0FCTEUJCSgxPDwxMCkKICNkZWZpbmUgUENJQ0ZHX0NPTU1BTkRfUkVTRVJWRUQgCQkoMHgxZjw8MTEpCiAjZGVmaW5lIFBDSUNGR19TVEFUVVNfT0ZGU0VUCQkJCTB4MDYKLSNkZWZpbmUgUENJQ0ZHX1JFVkVTSU9OX0lECQkJCTB4MDgKKyNkZWZpbmUgUENJQ0ZHX1JFVkVTSU9OX0lEX09GRlNFVAkJCTB4MDgKICNkZWZpbmUgUENJQ0ZHX0NBQ0hFX0xJTkVfU0laRQkJCQkweDBjCiAjZGVmaW5lIFBDSUNGR19MQVRFTkNZX1RJTUVSCQkJCTB4MGQKICNkZWZpbmUgUENJQ0ZHX0JBUl8xX0xPVwkJCQkweDEwCkBAIC01MjE2LDkgKzU0MzgsMjggQEAKICNkZWZpbmUgUENJQ0ZHX1BNX0NTUl9TVEFURQkJCSgweDM8PDApCiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfUE1FX0VOQUJMRQkJKDE8PDgpCiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfUE1FX1NUQVRVUwkJKDE8PDE1KQorI2RlZmluZSBQQ0lDRkdfTVNJX0NBUF9JRF9PRkZTRVQJCQkweDU4CisjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF9FTkFCTEUJCSgweDE8PDE2KQorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfTUNBUCAJCSgweDc8PDE3KQorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfTUVOQSAJCSgweDc8PDIwKQorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfNjRfQklUX0FERFJfQ0FQCSgweDE8PDIzKQorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfTVNJX1BWTUFTS19DQVBBQkxFCSgweDE8PDI0KQogI2RlZmluZSBQQ0lDRkdfR1JDX0FERFJFU1MJCQkJMHg3OAogI2RlZmluZSBQQ0lDRkdfR1JDX0RBVEEgCQkJCTB4ODAKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ0FQX0lEX09GRlNFVAkJCTB4YTAKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9UQUJMRV9TSVpFCQkoMHg3ZmY8PDE2KQorI2RlZmluZSBQQ0lDRkdfTVNJWF9DT05UUk9MX1JFU0VSVkVECQkoMHg3PDwyNykKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9GVU5DX01BU0sJCSgweDE8PDMwKQorI2RlZmluZSBQQ0lDRkdfTVNJWF9DT05UUk9MX01TSVhfRU5BQkxFIAkoMHgxPDwzMSkKKwogI2RlZmluZSBQQ0lDRkdfREVWSUNFX0NPTlRST0wJCQkJMHhiNAorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVUwkJCQkweGI2CisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX0NPUlJfRVJSX0RFVAkoMTw8MCkKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfTk9OX0ZBVEFMX0VSUl9ERVQJKDE8PDEpCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX0ZBVEFMX0VSUl9ERVQJKDE8PDIpCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX1VOU1VQX1JFUV9ERVQJKDE8PDMpCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX0FVWF9QV1JfREVUCSgxPDw0KQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19OT19QRU5ECQkoMTw8NSkKICNkZWZpbmUgUENJQ0ZHX0xJTktfQ09OVFJPTAkJCQkweGJjCiAKIApAQCAtNTM2Myw2ICs1NjA0LDQyIEBACiAjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9TSElGVAkJMQogI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUNCVUYxVAkJCTEKIAorI2RlZmluZSBNRElPX1JFR19CQU5LX1RYMQkJCQkweDgwNzAKKyNkZWZpbmUgTURJT19UWDFfVFhfRFJJVkVSCQkJCTB4MTcKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0sJCTB4ZjAwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQJCTEyCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX01BU0sgCQkweDBmMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfU0hJRlQJCTgKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfTUFTSwkJMHgwMGYwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX1NISUZUCQk0CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9NQVNLCQkweDAwMGUKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX1NISUZUCQkxCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JQ0JVRjFUCQkJMQorCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfVFgyCQkJCTB4ODA4MAorI2RlZmluZSBNRElPX1RYMl9UWF9EUklWRVIJCQkJMHgxNworI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSwkJMHhmMDAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVAkJMTIKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfTUFTSyAJCTB4MGYwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9TSElGVAkJOAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9NQVNLCQkweDAwZjAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfU0hJRlQJCTQKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX01BU0sJCTB4MDAwZQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCisKKyNkZWZpbmUgTURJT19SRUdfQkFOS19UWDMJCQkJMHg4MDkwCisjZGVmaW5lIE1ESU9fVFgzX1RYX0RSSVZFUgkJCQkweDE3CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLCQkweGYwMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUCQkxMgorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9NQVNLIAkJMHgwZjAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX1NISUZUCQk4CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX01BU0sJCTB4MDBmMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9TSElGVAkJNAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfTUFTSwkJMHgwMDBlCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9TSElGVAkJMQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUNCVUYxVAkJCTEKKwogI2RlZmluZSBNRElPX1JFR19CQU5LX1hHWFNfQkxPQ0swCQkJMHg4MDAwCiAjZGVmaW5lIE1ESU9fQkxPQ0swX1hHWFNfQ09OVFJPTAkJCTB4MTAKIApAQCAtNTU2Niw5ICs1ODQzLDMwIEBACiAjZGVmaW5lIE1ESU9fUE1BX1JFR19ST01fVkVSMgkJMHhjYTFhCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19FRENfRkZFX01BSU4JMHhjYTFiCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19QTExfQkFORFdJRFRICTB4Y2ExZAorI2RlZmluZSBNRElPX1BNQV9SRUdfR0VOX0NUUkwyCQkweGNhMWUKKyNkZWZpbmUgTURJT19QTUFfUkVHX01JU0NfQ1RSTDAgCTB4Y2EyMworI2RlZmluZSBNRElPX1BNQV9SRUdfTFJNX01PREUJCTB4Y2EzZgogI2RlZmluZSBNRElPX1BNQV9SRUdfQ0RSX0JBTkRXSURUSAkweGNhNDYKICNkZWZpbmUgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEgCTB4Y2E4NQogCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwgCTB4ODAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLCTB4MDAwYworI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfSURMRQkJMHgwMDAwCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19DT01QTEVURQkweDAwMDQKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lOX1BST0dSRVNTCTB4MDAwOAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfRkFJTEVECTB4MDAwYworI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9CWVRFX0NOVAkweDgwMDIKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfTUVNX0FERFIJMHg4MDAzCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfQlVGCTB4YzgyMAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX01BU0sgMHhmZgorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMQkJMHhjYTAxCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwyCQkweGNhMDUKKworCisjZGVmaW5lIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWCQkJMHhjODAxCisjZGVmaW5lIE1ESU9fUE1BX1JFR184MDczX1NQRUVEX0xJTktfU1RBVFVTCQkweGM4MjAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzgwNzNfWEFVSV9XQQkJCTB4Yzg0MQorCiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTAxX1JFU0VUIAkweGMwMDAKICNkZWZpbmUgTURJT19QTUFfUkVHXzcxMDdfTEVEX0NOVEwJMHhjMDA3CiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTAxX1ZFUjEJCTB4YzAyNgpAQCAtNTU5OCw2ICs1ODk2LDEyIEBACiAjZGVmaW5lIE1ESU9fWFNfUExMX1NFUVVFTkNFUgkJMHg4MDAwCiAjZGVmaW5lIE1ESU9fWFNfU0ZYNzEwMV9YR1hTX1RFU1QxCTB4YzAwYQogCisjZGVmaW5lIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDAJMHg4MGJjCisjZGVmaW5lIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDEJMHg4MGNjCisjZGVmaW5lIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDIJMHg4MGRjCisjZGVmaW5lIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDMJMHg4MGVjCisjZGVmaW5lIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWEEJMHg4MGZjCisKICNkZWZpbmUgTURJT19BTl9ERVZBRAkJCTB4NwogLyppZWVlKi8KICNkZWZpbmUgTURJT19BTl9SRUdfQ1RSTAkJMHgwMDAwCkBAIC01NjE5LDYgKzU5MjMsOCBAQAogI2RlZmluZSBNRElPX0FOX1JFR19DTDM3X0ZDX0xECQkweGZmZTQKICNkZWZpbmUgTURJT19BTl9SRUdfQ0wzN19GQ19MUAkJMHhmZmU1CiAKKyNkZWZpbmUgTURJT19BTl9SRUdfODA3M18yXzVHCQkweDgzMjkKKwogCiAjZGVmaW5lIElHVV9GVU5DX0JBU0UJCQkweDA0MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCmluZGV4IDhhODNlYjIuLmEzMDYyMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogLy8gR2VuZXJhbCBkZWZpbml0aW9ucwogI2RlZmluZSBCT05EX0VUSF9QX0xBQ1BEVSAgICAgICAweDg4MDkKLSNkZWZpbmUgUEtUX1RZUEVfTEFDUERVICAgICAgICAgX19jb25zdGFudF9odG9ucyhCT05EX0VUSF9QX0xBQ1BEVSkKKyNkZWZpbmUgUEtUX1RZUEVfTEFDUERVICAgICAgICAgY3B1X3RvX2JlMTYoQk9ORF9FVEhfUF9MQUNQRFUpCiAjZGVmaW5lIEFEX1RJTUVSX0lOVEVSVkFMICAgICAgIDEwMCAvKm1zZWMqLwogCiAjZGVmaW5lIE1VTFRJQ0FTVF9MQUNQRFVfQUREUiAgICB7MHgwMSwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwMCwgMHgwMn0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCAyN2ZiN2Y1Li44ZGM2ZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC04MjIsNyArODIyLDcgQEAKIAlfdW5sb2NrX3J4X2hhc2h0YmwoYm9uZCk7CiAKIAkvKmluaXRpYWxpemUgcGFja2V0IHR5cGUqLwotCXBrX3R5cGUtPnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSUCk7CisJcGtfdHlwZS0+dHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0FSUCk7CiAJcGtfdHlwZS0+ZGV2ID0gTlVMTDsKIAlwa190eXBlLT5mdW5jID0gcmxiX2FycF9yZWN2OwogCkBAIC04OTIsNyArODkyLDcgQEAKIAltZW1zZXQoJnBrdCwgMCwgc2l6ZSk7CiAJbWVtY3B5KHBrdC5tYWNfZHN0LCBtYWNfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShwa3QubWFjX3NyYywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKLQlwa3QudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfTE9PUCk7CisJcGt0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9MT09QKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTFBfQlVSU1Q7IGkrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTYyOCw2ICsxNjI4LDEwIEBACiAgKiBubyBvdGhlciBsb2NrcyBtYXkgYmUgaGVsZC4KICAqLwogdm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpCisJX19yZWxlYXNlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCiB7CiAJc3RydWN0IHNsYXZlICpzd2FwX3NsYXZlOwogCWludCBpOwpAQCAtMTcwNCw2ICsxNzA4LDEwIEBACiAgKiBDYWxsZWQgd2l0aCBSVE5MCiAgKi8KIGludCBib25kX2FsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKQorCV9fcmVsZWFzZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKKwlfX3JlbGVhc2VzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqc2EgPSBhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggM2Q3NjY4Ni4uOWMzMjZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0xMDAyLDYgKzEwMDIsMTAgQEAKIHN0YXRpYyB2b2lkIGJvbmRfZG9fZmFpbF9vdmVyX21hYyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAkJCQkgIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSwKIAkJCQkgIHN0cnVjdCBzbGF2ZSAqb2xkX2FjdGl2ZSkKKwlfX3JlbGVhc2VzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCisJX19yZWxlYXNlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKIHsKIAl1OCB0bXBfbWFjW0VUSF9BTEVOXTsKIAlzdHJ1Y3Qgc29ja2FkZHIgc2FkZHI7CkBAIC0xNzEwLDYgKzE3MTQsNyBAQAogCWNhc2UgQk9ORF9NT0RFX0FMQjoKIAkJbmV3X3NsYXZlLT5zdGF0ZSA9IEJPTkRfU1RBVEVfQUNUSVZFOwogCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhuZXdfc2xhdmUpOworCQlib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoYm9uZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2RlYnVnKCJUaGlzIHNsYXZlIGlzIGFsd2F5cyBhY3RpdmUgaW4gdHJ1bmsgbW9kZVxuIik7CkBAIC0zMTkzLDYgKzMxOTgsOCBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIHN0YXRpYyB2b2lkICpib25kX2luZm9fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKCZkZXZfYmFzZV9sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBzZXEtPnByaXZhdGU7CiAJbG9mZl90IG9mZiA9IDA7CkBAIC0zMjMyLDYgKzMyMzksOCBAQAogfQogCiBzdGF0aWMgdm9pZCBib25kX2luZm9fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmYm9uZC0+bG9jaykKKwlfX3JlbGVhc2VzKCZkZXZfYmFzZV9sb2NrKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gc2VxLT5wcml2YXRlOwogCkBAIC0zMzY5LDcgKzMzNzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJvbmRfaW5mb19zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBib25kX2luZm9fc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGJvbmRfaW5mb19zZXFfbmV4dCwKIAkuc3RvcCAgPSBib25kX2luZm9fc2VxX3N0b3AsCkBAIC00NzM5LDcgKzQ3NDgsNyBAQAogICovCiBpbnQgYm9uZF9wYXJzZV9wYXJtKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGJvbmRfcGFybV90YmwgKnRibCkKIHsKLQlpbnQgbW9kZSA9IC0xLCBpLCBydjsKKwlpbnQgbW9kZWludCA9IC0xLCBpLCBydjsKIAljaGFyICpwLCBtb2Rlc3RyW0JPTkRfTUFYX01PREVOQU1FX0xFTiArIDFdID0geyAwLCB9OwogCiAJZm9yIChwID0gKGNoYXIgKilidWY7ICpwOyBwKyspCkBAIC00NzQ5LDEzICs0NzU4LDEzIEBACiAJaWYgKCpwKQogCQlydiA9IHNzY2FuZihidWYsICIlMjBzIiwgbW9kZXN0cik7CiAJZWxzZQotCQlydiA9IHNzY2FuZihidWYsICIlZCIsICZtb2RlKTsKKwkJcnYgPSBzc2NhbmYoYnVmLCAiJWQiLCAmbW9kZWludCk7CiAKIAlpZiAoIXJ2KQogCQlyZXR1cm4gLTE7CiAKIAlmb3IgKGkgPSAwOyB0YmxbaV0ubW9kZW5hbWU7IGkrKykgewotCQlpZiAobW9kZSA9PSB0YmxbaV0ubW9kZSkKKwkJaWYgKG1vZGVpbnQgPT0gdGJsW2ldLm1vZGUpCiAJCQlyZXR1cm4gdGJsW2ldLm1vZGU7CiAJCWlmIChzdHJjbXAobW9kZXN0ciwgdGJsW2ldLm1vZGVuYW1lKSA9PSAwKQogCQkJcmV0dXJuIHRibFtpXS5tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IGJiYmMzYmIuLjBlZmZlZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTI1MDYsNyArMjUwNiw3IEBACiAJaWYgKHN0YXR1cyAmIElOVFJfUlhfRE9ORV9BTFQpIHsgLyogaGFuZGxlIHJ4IHNlcGFyYXRlbHkgKi8KICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCByaW5nLCAwKTsKICNlbmRpZgpAQCAtMjU1Nyw3ICsyNTU3LDcgQEAKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9ET05FX0FMVCkgeyAvKiBoYW5kbGUgcnggc2VwYXJhdGVseSAqLwogI2lmZGVmIFVTRV9OQVBJCiAJCWNhc19tYXNrX2ludHIoY3ApOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY3AtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjcC0+bmFwaSk7CiAjZWxzZQogCQljYXNfcnhfcmluZ04oY3AsIDEsIDApOwogI2VuZGlmCkBAIC0yNjEzLDcgKzI2MTMsNyBAQAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkUpIHsKICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCAwLCAwKTsKICNlbmRpZgpAQCAtMjY5MSw3ICsyNjkxLDcgQEAKICNlbmRpZgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJaWYgKGVuYWJsZV9pbnRyKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQljYXNfdW5tYXNrX2ludHIoY3ApOwogCX0KIAlyZXR1cm4gY3JlZGl0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCmluZGV4IGQ5ODRiNzkuLjU4ZjZmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwpAQCAtMTYxMiw3ICsxNjEyLDcgQEAKIAlpbnQgd29ya19kb25lID0gcHJvY2Vzc19yZXNwb25zZXMoYWRhcHRlciwgYnVkZ2V0KTsKIAogCWlmIChsaWtlbHkod29ya19kb25lIDwgYnVkZ2V0KSkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JpdGVsKGFkYXB0ZXItPnNnZS0+cmVzcFEuY2lkeCwKIAkJICAgICAgIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX1NMRUVQSU5HKTsKIAl9CkBAIC0xNjMwLDcgKzE2MzAsNyBAQAogCiAJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAJCQlpZiAocHJvY2Vzc19wdXJlX3Jlc3BvbnNlcyhhZGFwdGVyKSkKLQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCQkJZWxzZSB7CiAJCQkJLyogbm8gZGF0YSwgbm8gTkFQSSBuZWVkZWQgKi8KIAkJCQl3cml0ZWwoc2dlLT5yZXNwUS5jaWR4LCBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7CkBAIC0xOTY3LDggKzE5NjcsNyBAQAogCQl0eF9zY2hlZF9zdG9wKHNnZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05QT1JUUzsgaSsrKQotCQlpZiAoc2dlLT5lc3BpYnVnX3NrYltpXSkKLQkJCWtmcmVlX3NrYihzZ2UtPmVzcGlidWdfc2tiW2ldKTsKKwkJa2ZyZWVfc2tiKHNnZS0+ZXNwaWJ1Z19za2JbaV0pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3BtYWMuYyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKaW5kZXggZjY2NTQ4Ny4uM2Y0NzZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3BtYWMuYworKysgYi9kcml2ZXJzL25ldC9jcG1hYy5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByeDogcG9sbGluZywgYnV0IG5vIHF1ZXVlXG4iLAogCQkJICAgICAgIHByaXYtPmRldi0+bmFtZSk7CiAJCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTE0LDcgKzUxNCw3IEBACiAJaWYgKHByb2Nlc3NlZCA9PSAwKSB7CiAJCS8qIHdlIHJhbiBvdXQgb2YgcGFja2V0cyB0byByZWFkLAogCQkgKiByZXZlcnQgdG8gaW50ZXJydXB0LWRyaXZlbiBtb2RlICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQljcG1hY193cml0ZShwcml2LT5yZWdzLCBDUE1BQ19SWF9JTlRfRU5BQkxFLCAxKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTM2LDcgKzUzNiw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJnByaXYtPnJ4X2xvY2spOwotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHByaXYtPmRldik7CiAJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKIApAQCAtODAyLDkgKzgwMiw5IEBACiAKIAlpZiAoc3RhdHVzICYgTUFDX0lOVF9SWCkgewogCQlxdWV1ZSA9IChzdGF0dXMgPj4gOCkgJiA3OwotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKIAkJCWNwbWFjX3dyaXRlKHByaXYtPnJlZ3MsIENQTUFDX1JYX0lOVF9DTEVBUiwgMSA8PCBxdWV1ZSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJCX0KIAl9CiAKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJcHJpdi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnX2xldmVsLCAweGZmKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgcGRhdGEtPmRldl9hZGRyLCBzaXplb2YoZGV2LT5kZXZfYWRkcikpOwogCi0JcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXS0+ZGV2LmJ1c19pZCwKKwlwcml2LT5waHkgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXS0+ZGV2KSwKIAkJCQkmY3BtYWNfYWRqdXN0X2xpbmssIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCWlmIChJU19FUlIocHJpdi0+cGh5KSkgewogCQlpZiAobmV0aWZfbXNnX2Rydihwcml2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggZmY2NDk3Ni4uNzQzM2I4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3M4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKQEAgLTUwMSw2ICs1MDEsMjEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXRfY2xvc2UsCisJLm5kb190eF90aW1lb3V0CQk9IG5ldF90aW1lb3V0LAorCS5uZG9fc3RhcnRfeG1pdCAJPSBuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19nZXRfc3RhdHMJCT0gbmV0X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBzZXRfbWFjX2FkZHJlc3MsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IG5ldF9wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGlzIGlzIHRoZSByZWFsIHByb2JlIHJvdXRpbmUuICBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICAgcHJvYmVzIG9uIHRoZSBJU0EgYnVzLiAgQSBnb29kIGRldmljZSBwcm9iZXMgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCiAgICB2ZXJpZmllcyB0aGF0IHRoZSBjb3JyZWN0IGRldmljZSBleGlzdHMgYW5kIGZ1bmN0aW9ucy4KQEAgLTg0MywxNyArODU4LDggQEAKIAkvKiBwcmludCB0aGUgZXRoZXJuZXQgYWRkcmVzcy4gKi8KIAlwcmludGsoIiwgTUFDICVwTSIsIGRldi0+ZGV2X2FkZHIpOwogCi0JZGV2LT5vcGVuCQk9IG5ldF9vcGVuOwotCWRldi0+c3RvcAkJPSBuZXRfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG5ldF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAJPSBuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbmV0X2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAJPSBzZXRfbWFjX2FkZHJlc3M7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlcgk9IG5ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKKwlkZXYtPm5ldGRldl9vcHMJPSAmbmV0X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7CiAKIAlwcmludGsoIlxuIik7CiAJaWYgKG5ldF9kZWJ1ZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAppbmRleCBhODlkOGNjLi43MTRkZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSAidDNjZGV2LmgiCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTY5LDYgKzY4LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRzdGF0czsKIAlpbnQgYWN0aXZpdHk7CiAJX19iZTMyIGlzY3NpX2lwdjRhZGRyOworCisJaW50IGxpbmtfZmF1bHQ7IC8qIGxpbmsgZmF1bHQgd2FzIGRldGVjdGVkICovCiB9OwogCiBlbnVtIHsJCQkJLyogYWRhcHRlciBmbGFncyAqLwpAQCAtODQsNiArODUsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXZvaWQgKnZhOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdTY0ICpwX2NudDsKKwlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpOwogfTsKIAogc3RydWN0IHJ4X2Rlc2M7CkBAIC05Miw2ICs5NSw3IEBACiBzdHJ1Y3Qgc2dlX2ZsIHsgICAgICAgICAgICAgICAgICAgICAvKiBTR0UgcGVyIGZyZWUtYnVmZmVyIGxpc3Qgc3RhdGUgKi8KIAl1bnNpZ25lZCBpbnQgYnVmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIFJ4IGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBjcmVkaXRzOyAgICAgICAvKiAjIG9mIGF2YWlsYWJsZSBSeCBidWZmZXJzICovCisJdW5zaWduZWQgaW50IHBlbmRfY3JlZDsgICAgIC8qIG5ldyBidWZmZXJzIHNpbmNlIGxhc3QgRkwgREIgcmluZyAqLwogCXVuc2lnbmVkIGludCBzaXplOyAgICAgICAgICAvKiBjYXBhY2l0eSBvZiBmcmVlIGxpc3QgKi8KIAl1bnNpZ25lZCBpbnQgY2lkeDsgICAgICAgICAgLyogY29uc3VtZXIgaW5kZXggKi8KIAl1bnNpZ25lZCBpbnQgcGlkeDsgICAgICAgICAgLyogcHJvZHVjZXIgaW5kZXggKi8KQEAgLTk5LDYgKzEwMyw3IEBACiAJc3RydWN0IGZsX3BnX2NodW5rIHBnX2NodW5rOy8qIHBhZ2UgY2h1bmsgY2FjaGUgKi8KIAl1bnNpZ25lZCBpbnQgdXNlX3BhZ2VzOyAgICAgLyogd2hldGhlciBGTCB1c2VzIHBhZ2VzIG9yIHNrX2J1ZmZzICovCiAJdW5zaWduZWQgaW50IG9yZGVyOwkgICAgLyogb3JkZXIgb2YgcGFnZSBhbGxvY2F0aW9ucyAqLworCXVuc2lnbmVkIGludCBhbGxvY19zaXplOyAgICAvKiBzaXplIG9mIGFsbG9jYXRlZCBidWZmZXIgKi8KIAlzdHJ1Y3QgcnhfZGVzYyAqZGVzYzsgICAgICAgLyogYWRkcmVzcyBvZiBIVyBSeCBkZXNjcmlwdG9yIHJpbmcgKi8KIAlzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2Rlc2M7ICAgLyogYWRkcmVzcyBvZiBTVyBSeCBkZXNjcmlwdG9yIHJpbmcgKi8KIAlkbWFfYWRkcl90ICAgcGh5c19hZGRyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBIVyByaW5nIHN0YXJ0ICovCkBAIC0xNzgsMTUgKzE4MywxMSBAQAogCVNHRV9QU1RBVF9UWF9DU1VNLAkvKiAjIG9mIFRYIGNoZWNrc3VtIG9mZmxvYWRzICovCiAJU0dFX1BTVEFUX1ZMQU5FWCwJLyogIyBvZiBWTEFOIHRhZyBleHRyYWN0aW9ucyAqLwogCVNHRV9QU1RBVF9WTEFOSU5TLAkvKiAjIG9mIFZMQU4gdGFnIGluc2VydGlvbnMgKi8KLQlTR0VfUFNUQVRfTFJPX0FHR1IsCS8qICMgb2YgcGFnZSBjaHVua3MgYWRkZWQgdG8gTFJPIHNlc3Npb25zICovCi0JU0dFX1BTVEFUX0xST19GTFVTSEVELAkvKiAjIG9mIGZsdXNoZWQgTFJPIHNlc3Npb25zICovCi0JU0dFX1BTVEFUX0xST19OT19ERVNDLAkvKiAjIG9mIG92ZXJmbG93biBMUk8gc2Vzc2lvbnMgKi8KIAogCVNHRV9QU1RBVF9NQVgJCS8qIG11c3QgYmUgbGFzdCAqLwogfTsKIAotI2RlZmluZSBUM19NQVhfTFJPX1NFUyA4Ci0jZGVmaW5lIFQzX01BWF9MUk9fTUFYX1BLVFMgNjQKK3N0cnVjdCBuYXBpX2dyb19mcmFnaW5mbzsKIAogc3RydWN0IHNnZV9xc2V0IHsJCS8qIGFuIFNHRSBxdWV1ZSBzZXQgKi8KIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcDsKQEAgLTE5NCwxNyArMTk1LDE0IEBACiAJc3RydWN0IHNnZV9yc3BxIHJzcHE7CiAJc3RydWN0IHNnZV9mbCBmbFtTR0VfUlhRX1BFUl9TRVRdOwogCXN0cnVjdCBzZ2VfdHhxIHR4cVtTR0VfVFhRX1BFUl9TRVRdOwotCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbVDNfTUFYX0xST19TRVNdOwotCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmxyb19mcmFnX3RibDsKLQlpbnQgbHJvX25mcmFnczsKKwlzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gbHJvX2ZyYWdfdGJsOwogCWludCBscm9fZW5hYmxlZDsKLQlpbnQgbHJvX2ZyYWdfbGVuOwogCXZvaWQgKmxyb192YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4X3E7CS8qIGFzc29jaWF0ZWQgbmV0ZGV2IFRYIHF1ZXVlICovCiAJdW5zaWduZWQgbG9uZyB0eHFfc3RvcHBlZDsJLyogd2hpY2ggVHggcXVldWVzIGFyZSBzdG9wcGVkICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdHhfcmVjbGFpbV90aW1lcjsJLyogcmVjbGFpbXMgVFggYnVmZmVycyAqLworCXN0cnVjdCB0aW1lcl9saXN0IHJ4X3JlY2xhaW1fdGltZXI7CS8qIHJlY2xhaW1zIFJYIGJ1ZmZlcnMgKi8KIAl1bnNpZ25lZCBsb25nIHBvcnRfc3RhdHNbU0dFX1BTVEFUX01BWF07CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIApAQCAtMjMwLDYgKzIyOCw3IEBACiAJdW5zaWduZWQgaW50IHNsb3dfaW50cl9tYXNrOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRzW0lSUV9OVU1fU1RBVFNdOwogCisJaW50IG1zaXhfbnZlY3RvcnM7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgc2hvcnQgdmVjOwogCQljaGFyIGRlc2NbMjJdOwpAQCAtMjQ3LDYgKzI0Niw3IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhZGFwX2NoZWNrX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGV4dF9pbnRyX2hhbmRsZXJfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmF0YWxfZXJyb3JfaGFuZGxlcl90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2ZhdWx0X2hhbmRsZXJfdGFzazsKIAogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIApAQCAtMjg5LDkgKzI4OSwxMiBAQAogdm9pZCB0M19vc19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0dXMsCiAJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsIGludCBmYyk7CiB2b2lkIHQzX29zX3BoeW1vZF9jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCk7Cit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpOwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKIAogdm9pZCB0M19zZ2Vfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2Vfc3RvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7Cit2b2lkIHQzX3N0YXJ0X3NnZV90aW1lcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zdG9wX3NnZV90aW1lcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19mcmVlX3NnZV9yZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggNWMzYzA1ZC4uZTFiMjI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMTAwNSw3ICsxMDA1LDggQEAKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCi0JaW50IGVyciwgbGFzaV9jdHJsOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGxhc2lfY3RybDsKIAogCWVyciA9IG1kaW9fcmVhZChwaHksIE1ESU9fREVWX1BNQV9QTUQsIExBU0lfQ1RSTCwgJmxhc2lfY3RybCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggZGI0ZjRmNS4uZTUwOGRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTE5MSw3ICsxOTEsOCBAQAogfTsKIAogc3RydWN0IGFkYXB0ZXJfaW5mbyB7Ci0JdW5zaWduZWQgY2hhciBucG9ydHM7CS8qICMgb2YgcG9ydHMgKi8KKwl1bnNpZ25lZCBjaGFyIG5wb3J0czA7ICAgICAgICAvKiAjIG9mIHBvcnRzIG9uIGNoYW5uZWwgMCAqLworCXVuc2lnbmVkIGNoYXIgbnBvcnRzMTsgICAgICAgIC8qICMgb2YgcG9ydHMgb24gY2hhbm5lbCAxICovCiAJdW5zaWduZWQgY2hhciBwaHlfYmFzZV9hZGRyOwkvKiBNRElPIFBIWSBiYXNlIGFkZHJlc3MgKi8KIAl1bnNpZ25lZCBpbnQgZ3Bpb19vdXQ7CS8qIEdQSU8gb3V0cHV0IHNldHRpbmdzICovCiAJdW5zaWduZWQgY2hhciBncGlvX2ludHJbTUFYX05QT1JUU107IC8qIEdQSU8gUEhZIElSUSBwaW5zICovCkBAIC0yODAsNiArMjgxLDcgQEAKIAl1bnNpZ25lZCBsb25nIG51bV90b2dnbGVkOyAvKiAjIHRpbWVzIHRvZ2dsZWQgVHhFbiBkdWUgdG8gc3R1Y2sgVFggKi8KIAl1bnNpZ25lZCBsb25nIG51bV9yZXNldHM7ICAvKiAjIHRpbWVzIHJlc2V0IGR1ZSB0byBzdHVjayBUWCAqLwogCisJdW5zaWduZWQgbG9uZyBsaW5rX2ZhdWx0czsgIC8qICMgZGV0ZWN0ZWQgbGluayBmYXVsdHMgKi8KIH07CiAKIHN0cnVjdCB0cF9taWJfc3RhdHMgewpAQCAtNDIxLDYgKzQyMyw3IEBACiAJdW5zaWduZWQgc2hvcnQgYl93bmRbTkNDVFJMX1dJTl07CiAKIAl1bnNpZ25lZCBpbnQgbnBvcnRzOwkvKiAjIG9mIGV0aGVybmV0IHBvcnRzICovCisJdW5zaWduZWQgaW50IGNoYW5fbWFwOyAgLyogYml0bWFwIG9mIGluLXVzZSBUeCBjaGFubmVscyAqLwogCXVuc2lnbmVkIGludCBzdGF0c191cGRhdGVfcGVyaW9kOwkvKiBNQUMgc3RhdHMgYWNjdW11bGF0aW9uIHBlcmlvZCAqLwogCXVuc2lnbmVkIGludCBsaW5rcG9sbF9wZXJpb2Q7CS8qIGxpbmsgcG9sbCBwZXJpb2QgaW4gMC4xcyAqLwogCXVuc2lnbmVkIGludCByZXY7CS8qIGNoaXAgcmV2aXNpb24gKi8KQEAgLTcwMSw2ICs3MDQsOCBAQAogdm9pZCB0M19pbnRyX2VuYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHQzX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHQzX2ludHJfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCB0M194Z21faW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwordm9pZCB0M194Z21faW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKIHZvaWQgdDNfcG9ydF9pbnRyX2VuYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKIHZvaWQgdDNfcG9ydF9pbnRyX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKQEAgLTcwOCw2ICs3MTMsNyBAQAogaW50IHQzX3BoeV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogCiB2b2lkIHQzX2xpbmtfY2hhbmdlZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpOwordm9pZCB0M19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCk7CiBpbnQgdDNfbGlua19zdGFydChzdHJ1Y3QgY3BoeSAqcGh5LCBzdHJ1Y3QgY21hYyAqbWFjLCBzdHJ1Y3QgbGlua19jb25maWcgKmxjKTsKIGNvbnN0IHN0cnVjdCBhZGFwdGVyX2luZm8gKnQzX2dldF9hZGFwdGVyX2luZm8odW5zaWduZWQgaW50IGJvYXJkX2lkKTsKIGludCB0M19zZWVwcm9tX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCBfX2xlMzIgKmRhdGEpOwpAQCAtNzQ0LDYgKzc1MCw4IEBACiAKIGludCB0M19tYWNfcmVzZXQoc3RydWN0IGNtYWMgKm1hYyk7CiB2b2lkIHQzYl9wY3NfcmVzZXQoc3RydWN0IGNtYWMgKm1hYyk7Cit2b2lkIHQzX21hY19kaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYyk7Cit2b2lkIHQzX21hY19lbmFibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKTsKIGludCB0M19tYWNfZW5hYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX2Rpc2FibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKTsKIGludCB0M19tYWNfc2V0X210dShzdHJ1Y3QgY21hYyAqbWFjLCB1bnNpZ25lZCBpbnQgbXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCBiYWI4YTkzLi4yYzJhYWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0xNzAsNiArMTcwLDQwIEBACiAJfQogfQogCit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXAtPnBvcnRbcG9ydF9pZF07CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHN0YXRlID09IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHN0YXRlKSB7CisJCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisKKwkJLyogQ2xlYXIgbG9jYWwgZmF1bHRzICovCisJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcCwgcGktPnBvcnRfaWQpOworCQl0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9JTlRfU1RBVFVTICsKKwkJCQkgICAgcGktPm1hYy5vZmZzZXQpOworCQl0M193cml0ZV9yZWcoYWRhcCwKKwkJCSAgICAgQV9YR01fSU5UX0NBVVNFICsgcGktPm1hYy5vZmZzZXQsCisJCQkgICAgIEZfWEdNX0lOVCk7CisKKwkJdDNfc2V0X3JlZ19maWVsZChhZGFwLAorCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsKKwkJCQkgcGktPm1hYy5vZmZzZXQsCisJCQkJIEZfWEdNX0lOVCwgRl9YR01fSU5UKTsKKwkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKKworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9UWCk7CisJfSBlbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlsaW5rX3JlcG9ydChkZXYpOworfQorCiAvKioKICAqCXQzX29zX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBsaW5rIHN0YXR1cyBjaGFuZ2VzCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rIGNoYW5nZQpAQCAtMTk3LDEwICsyMzEsMzQgQEAKIAlpZiAobGlua19zdGF0ICE9IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlpZiAobGlua19zdGF0KSB7CiAJCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLworCQkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsKKwkJCQkgICAgcGktPm1hYy5vZmZzZXQpOworCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsCisJCQkJICAgICBBX1hHTV9JTlRfQ0FVU0UgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkgICAgIEZfWEdNX0lOVCk7CisKKwkJCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwKKwkJCQkJIEFfWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkJIEZfWEdNX0lOVCwgRl9YR01fSU5UKTsKKwkJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJfSBlbHNlIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQlwaS0+cGh5Lm9wcy0+cG93ZXJfZG93bigmcGktPnBoeSwgMSk7CisKKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKKwkJCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwKKwkJCQkJIEFfWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkJIEZfWEdNX0lOVCwgMCk7CisKKwkJCWlmIChpc18xMEcoYWRhcHRlcikpCisJCQkJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOworCisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOwogCQkJdDNfbWFjX2Rpc2FibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKIAkJCXQzX2xpbmtfc3RhcnQoJnBpLT5waHksIG1hYywgJnBpLT5saW5rX2NvbmZpZyk7CiAJCX0KQEAgLTMzOSw3ICszOTcsNyBAQAogCiAJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1swXS52ZWMsIGFkYXB0ZXIpOwogCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpCi0JCSAgICBuICs9IGFkYXAycGluZm8oYWRhcHRlciwgaSktPm5xc2V0czsKKwkJCW4gKz0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpKS0+bnFzZXRzOwogCiAJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAJCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2luZm9baSArIDFdLnZlYywKQEAgLTUwOSwxOSArNTY3LDkgQEAKIHsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKLQlpbnQgaSwgbHJvX29uID0gMTsKIAogCWFkYXB0ZXItPnBhcmFtcy5zZ2UucXNldFtxc2V0X2lkeF0ubHJvID0gISF2YWw7CiAJYWRhcHRlci0+c2dlLnFzW3FzZXRfaWR4XS5scm9fZW5hYmxlZCA9ICEhdmFsOwotCi0JLyogbGV0IGV0aHRvb2wgcmVwb3J0IExSTyBvbiBvbmx5IGlmIGFsbCBxdWV1ZXMgYXJlIExSTyBlbmFibGVkICovCi0JZm9yIChpID0gcGktPmZpcnN0X3FzZXQ7IGkgPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHM7ICsraSkKLQkJbHJvX29uICY9IGFkYXB0ZXItPnBhcmFtcy5zZ2UucXNldFtpXS5scm87Ci0KLQlpZiAobHJvX29uKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CiB9CiAKIC8qKgpAQCAtNTU0LDcgKzYwMiw2IEBACiAJCQkJJmFkYXAtPnBhcmFtcy5zZ2UucXNldFtxc2V0X2lkeF0sIG50eHEsIGRldiwKIAkJCQluZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaikpOwogCQkJaWYgKGVycikgewotCQkJCXQzX3N0b3Bfc2dlX3RpbWVycyhhZGFwKTsKIAkJCQl0M19mcmVlX3NnZV9yZXNvdXJjZXMoYWRhcCk7CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTk5OCw2ICsxMDQ1LDggQEAKIAkJc2V0dXBfcnNzKGFkYXApOwogCQlpZiAoIShhZGFwLT5mbGFncyAmIE5BUElfSU5JVCkpCiAJCQlpbml0X25hcGkoYWRhcCk7CisKKwkJdDNfc3RhcnRfc2dlX3RpbWVycyhhZGFwKTsKIAkJYWRhcC0+ZmxhZ3MgfD0gRlVMTF9JTklUX0RPTkU7CiAJfQogCkBAIC0xMTgzLDYgKzEyMzIsMTAgQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKIAorCS8qIFN0b3AgbGluayBmYXVsdCBpbnRlcnJ1cHRzICovCisJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKKwogCXQzX3BvcnRfaW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAlwaS0+cGh5Lm9wcy0+cG93ZXJfZG93bigmcGktPnBoeSwgMSk7CkBAIC0xMzA5LDYgKzEzNjIsNyBAQAogCSJDaGVja1RYRW5Ub2dnbGVkICAgIiwKIAkiQ2hlY2tSZXNldHMgICAgICAgICIsCiAKKwkiTGlua0ZhdWx0cyAgICAgICAgICIsCiB9OwogCiBzdGF0aWMgaW50IGdldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KQpAQCAtMTQzNCwxMyArMTQ4OCwxNSBAQAogCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfVkxBTklOUyk7CiAJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9UWF9DU1VNKTsKIAkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX1JYX0NTVU1fR09PRCk7Ci0JKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fQUdHUik7Ci0JKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fRkxVU0hFRCk7Ci0JKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fTk9fREVTQyk7CisJKmRhdGErKyA9IDA7CisJKmRhdGErKyA9IDA7CisJKmRhdGErKyA9IDA7CiAJKmRhdGErKyA9IHMtPnJ4X2NvbmdfZHJvcHM7CiAKIAkqZGF0YSsrID0gcy0+bnVtX3RvZ2dsZWQ7CiAJKmRhdGErKyA9IHMtPm51bV9yZXNldHM7CisKKwkqZGF0YSsrID0gcy0+bGlua19mYXVsdHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdfYmxvY2tfZHVtcChzdHJ1Y3QgYWRhcHRlciAqYXAsIHZvaWQgKmJ1ZiwKQEAgLTE1NzYsNyArMTYzMiw2IEBACiAKIHN0YXRpYyBpbnQgc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCWludCBjYXA7CiAJc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwLT5saW5rX2NvbmZpZzsKIApAQCAtMTU4Niw3ICsxNjQxLDcgQEAKIAkJICogYmVpbmcgcmVxdWVzdGVkLgogCQkgKi8KIAkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHsKLQkJCWNhcCA9IHNwZWVkX2R1cGxleF90b19jYXBzKGNtZC0+c3BlZWQsIGNtZC0+ZHVwbGV4KTsKKwkJCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CiAJCQlpZiAobGMtPnN1cHBvcnRlZCAmIGNhcCkKIAkJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTgyNywyOCArMTg4Miw2IEBACiAJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7CiB9CiAKLXN0YXRpYyBpbnQgY3hnYjNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKLQotCWlmIChkYXRhICYgRVRIX0ZMQUdfTFJPKSB7Ci0JCWlmICghKHBpLT5yeF9vZmZsb2FkICYgVDNfUlhfQ1NVTSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlwaS0+cnhfb2ZmbG9hZCB8PSBUM19MUk87Ci0JCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyBpKyspCi0JCQlzZXRfcXNldF9scm8oZGV2LCBpLCAxKTsKLQotCX0gZWxzZSB7Ci0JCXBpLT5yeF9vZmZsb2FkICY9IH5UM19MUk87Ci0JCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyBpKyspCi0JCQlzZXRfcXNldF9scm8oZGV2LCBpLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBjeGdiX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBnZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHNldF9zZXR0aW5ncywKQEAgLTE4NzgsOCArMTkxMSw2IEBACiAJLmdldF9yZWdzID0gZ2V0X3JlZ3MsCiAJLmdldF93b2wgPSBnZXRfd29sLAogCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzID0gY3hnYjNfc2V0X2ZsYWdzLAogfTsKIAogc3RhdGljIGludCBpbl9yYW5nZShpbnQgdmFsLCBpbnQgbG8sIGludCBoaSkKQEAgLTI0NjAsOCArMjQ5MSwyMCBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKIAkJc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJaWYgKCEocC0+cGh5LmNhcHMgJiBTVVBQT1JURURfSVJRKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CisJCWlmIChwLT5saW5rX2ZhdWx0KSB7CisJCQlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CisKKwkJaWYgKCEocC0+cGh5LmNhcHMgJiBTVVBQT1JURURfSVJRKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgaSk7CisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcC0+bWFjLm9mZnNldCk7CisKIAkJCXQzX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBpKTsKKwkJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBpKTsKKwkJfQogCX0KIH0KIApAQCAtMjUwNiw2ICsyNTQ5LDggQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKIAkJCQkJICAgICAgIGFkYXBfY2hlY2tfdGFzay53b3JrKTsKIAljb25zdCBzdHJ1Y3QgYWRhcHRlcl9wYXJhbXMgKnAgPSAmYWRhcHRlci0+cGFyYW1zOworCWludCBwb3J0OworCXVuc2lnbmVkIGludCB2LCBzdGF0dXMsIHJlc2V0OwogCiAJYWRhcHRlci0+Y2hlY2tfdGFza19jbnQrKzsKIApAQCAtMjUyNCw2ICsyNTY5LDU0IEBACiAJaWYgKHAtPnJldiA9PSBUM19SRVZfQjIpCiAJCWNoZWNrX3QzYjJfbWFjKGFkYXB0ZXIpOwogCisJLyoKKwkgKiBTY2FuIHRoZSBYR01BQydzIHRvIGNoZWNrIGZvciB2YXJpb3VzIGNvbmRpdGlvbnMgd2hpY2ggd2Ugd2FudCB0bworCSAqIG1vbml0b3IgaW4gYSBwZXJpb2RpYyBwb2xsaW5nIG1hbm5lciByYXRoZXIgdGhhbiB2aWEgYW4gaW50ZXJydXB0CisJICogY29uZGl0aW9uLiAgVGhpcyBpcyB1c2VkIGZvciBjb25kaXRpb25zIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBmbG9vZAorCSAqIHRoZSBzeXN0ZW0gd2l0aCBpbnRlcnJ1cHRzIGFuZCB3ZSBvbmx5IHJlYWxseSBuZWVkIHRvIGtub3cgdGhhdCB0aGUKKwkgKiBjb25kaXRpb25zIGFyZSAiaGFwcGVuaW5nIiAuLi4gIEZvciBlYWNoIGNvbmRpdGlvbiB3ZSBjb3VudCB0aGUKKwkgKiBkZXRlY3Rpb24gb2YgdGhlIGNvbmRpdGlvbiBhbmQgcmVzZXQgaXQgZm9yIHRoZSBuZXh0IHBvbGxpbmcgbG9vcC4KKwkgKi8KKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBvcnQpIHsKKwkJc3RydWN0IGNtYWMgKm1hYyA9ICAmYWRhcDJwaW5mbyhhZGFwdGVyLCBwb3J0KS0+bWFjOworCQl1MzIgY2F1c2U7CisKKwkJY2F1c2UgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfQ0FVU0UgKyBtYWMtPm9mZnNldCk7CisJCXJlc2V0ID0gMDsKKwkJaWYgKGNhdXNlICYgRl9SWEZJRk9fT1ZFUkZMT1cpIHsKKwkJCW1hYy0+c3RhdHMucnhfZmlmb19vdmZsKys7CisJCQlyZXNldCB8PSBGX1JYRklGT19PVkVSRkxPVzsKKwkJfQorCisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfQ0FVU0UgKyBtYWMtPm9mZnNldCwgcmVzZXQpOworCX0KKworCS8qCisJICogV2UgZG8gdGhlIHNhbWUgYXMgYWJvdmUgZm9yIEZMX0VNUFRZIGludGVycnVwdHMuCisJICovCisJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UpOworCXJlc2V0ID0gMDsKKworCWlmIChzdGF0dXMgJiBGX0ZMRU1QVFkpIHsKKwkJc3RydWN0IHNnZV9xc2V0ICpxcyA9ICZhZGFwdGVyLT5zZ2UucXNbMF07CisJCWludCBpID0gMDsKKworCQlyZXNldCB8PSBGX0ZMRU1QVFk7CisKKwkJdiA9ICh0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX1JTUFFfRkxfU1RBVFVTKSA+PiBTX0ZMMEVNUFRZKSAmCisJCSAgICAweGZmZmY7CisKKwkJd2hpbGUgKHYpIHsKKwkJCXFzLT5mbFtpXS5lbXB0eSArPSAodiAmIDEpOworCQkJaWYgKGkpCisJCQkJcXMrKzsKKwkJCWkgXj0gMTsKKwkJCXYgPj49IDE7CisJCX0KKwl9CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UsIHJlc2V0KTsKKwogCS8qIFNjaGVkdWxlIHRoZSBuZXh0IGNoZWNrIHVwZGF0ZSBpZiBhbnkgcG9ydCBpcyBhY3RpdmUuICovCiAJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKIAlpZiAoYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwICYgUE9SVF9NQVNLKQpAQCAtMjUzOCw5ICsyNjMxLDIzIEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCiAJCQkJCSAgICAgICBleHRfaW50cl9oYW5kbGVyX3Rhc2spOworCWludCBpOwogCisJLyogRGlzYWJsZSBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbaV07CisJCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgaSk7CisJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwLT5tYWMub2Zmc2V0KTsKKwl9CisKKwkvKiBSZS1lbmFibGUgbGluayBmYXVsdCBpbnRlcnJ1cHRzICovCiAJdDNfcGh5X2ludHJfaGFuZGxlcihhZGFwdGVyKTsKIAorCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkKKwkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXB0ZXIsIGkpOworCiAJLyogTm93IHJlZW5hYmxlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOwogCWlmIChhZGFwdGVyLT5zbG93X2ludHJfbWFzaykgewpAQCAtMjU3MywxMCArMjY4MCw0MiBAQAogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT53b3JrX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCBsaW5rX2ZhdWx0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAorCQkJCQkgICAgICAgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2spOworCWludCBpOworCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkJaWYgKHBpLT5saW5rX2ZhdWx0KQorCQkJdDNfbGlua19mYXVsdChhZGFwdGVyLCBpKTsKKwl9Cit9CisKK3ZvaWQgdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwb3J0X2lkXTsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7CisJcGktPmxpbmtfZmF1bHQgPSAxOworCXF1ZXVlX3dvcmsoY3hnYjNfd3EsICZhZGFwdGVyLT5saW5rX2ZhdWx0X2hhbmRsZXJfdGFzayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7Cit9CisKIHN0YXRpYyBpbnQgdDNfYWRhcHRlcl9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHJlc2V0KQogewogCWludCBpLCByZXQgPSAwOwogCisJaWYgKGlzX29mZmxvYWQoYWRhcHRlcikgJiYKKwkgICAgdGVzdF9iaXQoT0ZGTE9BRF9ERVZNQVBfQklULCAmYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwKSkgeworCQljeGdiM19lcnJfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1NUQVRVU19ET1dOLCAwKTsKKwkJb2ZmbG9hZF9jbG9zZSgmYWRhcHRlci0+dGRldik7CisJfQorCiAJLyogU3RvcCBhbGwgcG9ydHMgKi8KIAlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPnBvcnRbaV07CkBAIC0yNTg1LDEwICsyNzI0LDYgQEAKIAkJCWN4Z2JfY2xvc2UobmV0ZGV2KTsKIAl9CiAKLQlpZiAoaXNfb2ZmbG9hZChhZGFwdGVyKSAmJgotCSAgICB0ZXN0X2JpdChPRkZMT0FEX0RFVk1BUF9CSVQsICZhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApKQotCQlvZmZsb2FkX2Nsb3NlKCZhZGFwdGVyLT50ZGV2KTsKLQogCS8qIFN0b3AgU0dFIHRpbWVycyAqLwogCXQzX3N0b3Bfc2dlX3RpbWVycyhhZGFwdGVyKTsKIApAQCAtMjY0MCw2ICsyNzc1LDkgQEAKIAkJCX0KIAkJfQogCX0KKworCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpICYmICFvZmxkX2Rpc2FibGUpCisJCWN4Z2IzX2Vycl9ub3RpZnkoJmFkYXB0ZXItPnRkZXYsIE9GRkxPQURfU1RBVFVTX1VQLCAwKTsKIH0KIAogLyoKQEAgLTI2ODQsNyArMjgyMiw2IEBACiAJCUNIX0FMRVJUKGFkYXB0ZXIsICJGVyBzdGF0dXM6IDB4JXgsIDB4JXgsIDB4JXgsIDB4JXhcbiIsCiAJCQkgZndfc3RhdHVzWzBdLCBmd19zdGF0dXNbMV0sCiAJCQkgZndfc3RhdHVzWzJdLCBmd19zdGF0dXNbM10pOwotCiB9CiAKIC8qKgpAQCAtMjczNCw2ICsyODcxLDkgQEAKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCUNIX0FMRVJUKGFkYXB0ZXIsICJhZGFwdGVyIHJlY292ZXJpbmcsIFBFWCBFUlIgMHgleFxuIiwKKwkJIHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUENJRV9QRVhfRVJSKSk7CisKIAl0M19yZXN1bWVfcG9ydHMoYWRhcHRlcik7CiB9CiAKQEAgLTI3NTMsNyArMjg5Myw3IEBACiAJaW50IGksIGogPSAwOwogCWludCBudW1fY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwogCWludCBod3BvcnRzID0gYWRhcC0+cGFyYW1zLm5wb3J0czsKLQlpbnQgbnFzZXRzID0gU0dFX1FTRVRTOworCWludCBucXNldHMgPSBhZGFwLT5tc2l4X252ZWN0b3JzIC0gMTsKIAogCWlmIChhZGFwLT5wYXJhbXMucmV2ID4gMCAmJiBhZGFwLT5mbGFncyAmIFVTSU5HX01TSVgpIHsKIAkJaWYgKGh3cG9ydHMgPT0gMiAmJgpAQCAtMjc4MiwxOCArMjkyMiwyNSBAQAogc3RhdGljIGludCBfX2RldmluaXQgY3hnYl9lbmFibGVfbXNpeChzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBlbnRyaWVzW1NHRV9RU0VUUyArIDFdOworCWludCB2ZWN0b3JzOwogCWludCBpLCBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbnRyaWVzKTsgKytpKQorCXZlY3RvcnMgPSBBUlJBWV9TSVpFKGVudHJpZXMpOworCWZvciAoaSA9IDA7IGkgPCB2ZWN0b3JzOyArK2kpCiAJCWVudHJpZXNbaV0uZW50cnkgPSBpOwogCi0JZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXAtPnBkZXYsIGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcykpOworCXdoaWxlICgoZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXAtPnBkZXYsIGVudHJpZXMsIHZlY3RvcnMpKSA+IDApCisJCXZlY3RvcnMgPSBlcnI7CisKKwlpZiAoIWVyciAmJiB2ZWN0b3JzIDwgKGFkYXAtPnBhcmFtcy5ucG9ydHMgKyAxKSkKKwkJZXJyID0gLTE7CisKIAlpZiAoIWVycikgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbnRyaWVzKTsgKytpKQorCQlmb3IgKGkgPSAwOyBpIDwgdmVjdG9yczsgKytpKQogCQkJYWRhcC0+bXNpeF9pbmZvW2ldLnZlYyA9IGVudHJpZXNbaV0udmVjdG9yOwotCX0gZWxzZSBpZiAoZXJyID4gMCkKLQkJZGV2X2luZm8oJmFkYXAtPnBkZXYtPmRldiwKLQkJICAgICAgICJvbmx5ICVkIE1TSS1YIHZlY3RvcnMgbGVmdCwgbm90IHVzaW5nIE1TSS1YXG4iLCBlcnIpOworCQlhZGFwLT5tc2l4X252ZWN0b3JzID0gdmVjdG9yczsKKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODU5LDcgKzMwMDYsNyBAQAogCXN0YXRpYyBpbnQgdmVyc2lvbl9wcmludGVkOwogCiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0LCBtbWlvX2xlbjsKKwlyZXNvdXJjZV9zaXplX3QgbW1pb19zdGFydCwgbW1pb19sZW47CiAJY29uc3Qgc3RydWN0IGFkYXB0ZXJfaW5mbyAqYWk7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOwogCXN0cnVjdCBwb3J0X2luZm8gKnBpOwpAQCAtMjkzNSwxMCArMzA4MiwxMSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmFkYXB0ZXJfbGlzdCk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5leHRfaW50cl9oYW5kbGVyX3Rhc2ssIGV4dF9pbnRyX3Rhc2spOworCUlOSVRfV09SSygmYWRhcHRlci0+bGlua19mYXVsdF9oYW5kbGVyX3Rhc2ssIGxpbmtfZmF1bHRfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5mYXRhbF9lcnJvcl9oYW5kbGVyX3Rhc2ssIGZhdGFsX2Vycm9yX3Rhc2spOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5hZGFwX2NoZWNrX3Rhc2ssIHQzX2FkYXBfY2hlY2tfdGFzayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWktPm5wb3J0czsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGFpLT5ucG9ydHMwICsgYWktPm5wb3J0czE7ICsraSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCiAJCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgcG9ydF9pbmZvKSwgU0dFX1FTRVRTKTsKQEAgLTI5NjEsNyArMzEwOSw3IEBACiAJCW5ldGRldi0+bWVtX2VuZCA9IG1taW9fc3RhcnQgKyBtbWlvX2xlbiAtIDE7CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAkJaWYgKHBjaV91c2luZ19kYWMpCiAJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIApAQCAtMzAyOCw3ICszMTc2LDcgQEAKIAogb3V0X2ZyZWVfZGV2OgogCWlvdW5tYXAoYWRhcHRlci0+cmVncyk7Ci0JZm9yIChpID0gYWktPm5wb3J0cyAtIDE7IGkgPj0gMDsgLS1pKQorCWZvciAoaSA9IGFpLT5ucG9ydHMwICsgYWktPm5wb3J0czEgLSAxOyBpID49IDA7IC0taSkKIAkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCiAJCQlmcmVlX25ldGRldihhZGFwdGVyLT5wb3J0W2ldKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCmluZGV4IDJkN2Y2OWEuLjYyMGQ4MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKQEAgLTE1Myw2ICsxNTMsMTggQEAKIAltdXRleF91bmxvY2soJmN4Z2IzX2RiX2xvY2spOwogfQogCit2b2lkIGN4Z2IzX2Vycl9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKQoreworCXN0cnVjdCBjeGdiM19jbGllbnQgKmNsaWVudDsKKworCW11dGV4X2xvY2soJmN4Z2IzX2RiX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmY2xpZW50X2xpc3QsIGNsaWVudF9saXN0KSB7CisJCWlmIChjbGllbnQtPmVycl9oYW5kbGVyKQorCQkJY2xpZW50LT5lcnJfaGFuZGxlcih0ZGV2LCBzdGF0dXMsIGVycm9yKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjeGdiM19kYl9sb2NrKTsKK30KKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfaWZmX2Zyb21fbWFjKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWMsCiAJCQkJCSAgIHVuc2lnbmVkIGludCB2bGFuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCmluZGV4IGQ1MTRlNTAuLmE4ZThlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKQEAgLTY0LDEwICs2NCwxNiBAQAogdm9pZCBjeGdiM191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQpOwogdm9pZCBjeGdiM19hZGRfY2xpZW50cyhzdHJ1Y3QgdDNjZGV2ICp0ZGV2KTsKIHZvaWQgY3hnYjNfcmVtb3ZlX2NsaWVudHMoc3RydWN0IHQzY2RldiAqdGRldik7Cit2b2lkIGN4Z2IzX2Vycl9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKTsKIAogdHlwZWRlZiBpbnQgKCpjeGdiM19jcGxfaGFuZGxlcl9mdW5jKShzdHJ1Y3QgdDNjZGV2ICpkZXYsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KTsKIAorZW51bSB7CisJT0ZGTE9BRF9TVEFUVVNfVVAsCisJT0ZGTE9BRF9TVEFUVVNfRE9XTgorfTsKKwogc3RydWN0IGN4Z2IzX2NsaWVudCB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICgqYWRkKSAoc3RydWN0IHQzY2RldiAqKTsKQEAgLTc2LDYgKzgyLDcgQEAKIAlpbnQgKCpyZWRpcmVjdCkodm9pZCAqY3R4LCBzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQsCiAJCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXcsIHN0cnVjdCBsMnRfZW50cnkgKmwydCk7CiAJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKKwl2b2lkICgqZXJyX2hhbmRsZXIpKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcik7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCmluZGV4IGEwMzVkNWMyLi4xYjUzMjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCkBAIC0xNzAsNiArMTcwLDEwIEBACiAKICNkZWZpbmUgU19SU1BRMERJU0FCTEVEICAgIDgKIAorI2RlZmluZSBTX0ZMMEVNUFRZICAgIDE2CisjZGVmaW5lIFZfRkwwRU1QVFkoeCkgKCh4KSA8PCBTX0ZMMEVNUFRZKQorI2RlZmluZSBGX0ZMMEVNUFRZICAgIFZfRkwwRU1QVFkoMVUpCisKICNkZWZpbmUgQV9TR19FR1JfUkNRX0RSQl9USFJTSCAweDU0CiAKICNkZWZpbmUgU19ISVJDUURSQlRIUlNIICAgIDE2CkBAIC0yNTgsNiArMjYyLDEwIEBACiAjZGVmaW5lIFZfUlNQUUNSRURJVE9WRVJGT1coeCkgKCh4KSA8PCBTX1JTUFFDUkVESVRPVkVSRk9XKQogI2RlZmluZSBGX1JTUFFDUkVESVRPVkVSRk9XICAgIFZfUlNQUUNSRURJVE9WRVJGT1coMVUpCiAKKyNkZWZpbmUgU19GTEVNUFRZICAgIDEKKyNkZWZpbmUgVl9GTEVNUFRZKHgpICgoeCkgPDwgU19GTEVNUFRZKQorI2RlZmluZSBGX0ZMRU1QVFkgICAgVl9GTEVNUFRZKDFVKQorCiAjZGVmaW5lIEFfU0dfSU5UX0VOQUJMRSAweDYwCiAKICNkZWZpbmUgQV9TR19DTURRX0NSRURJVF9USCAweDY0CkBAIC0yMjA3LDYgKzIyMTUsMTUgQEAKIAogI2RlZmluZSBBX1hHTV9SWF9FWEFDVF9NQVRDSF9MT1dfOCAweDg1NAogCisjZGVmaW5lIEFfWEdNX0lOVF9TVEFUVVMgMHg4NmMKKworI2RlZmluZSBTX0xJTktGQVVMVENIQU5HRSAgICA5CisjZGVmaW5lIFZfTElOS0ZBVUxUQ0hBTkdFKHgpICgoeCkgPDwgU19MSU5LRkFVTFRDSEFOR0UpCisjZGVmaW5lIEZfTElOS0ZBVUxUQ0hBTkdFICAgIFZfTElOS0ZBVUxUQ0hBTkdFKDFVKQorCisjZGVmaW5lIEFfWEdNX1hHTV9JTlRfRU5BQkxFIDB4ODc0CisjZGVmaW5lIEFfWEdNX1hHTV9JTlRfRElTQUJMRSAweDg3OAorCiAjZGVmaW5lIEFfWEdNX1NUQVRfQ1RSTCAweDg4MAogCiAjZGVmaW5lIFNfQ0xSU1RBVFMgICAgMgpAQCAtMjQwNSw2ICsyNDIyLDEwIEBACiAjZGVmaW5lIFZfWEFVSVBDU0FMSUdOQ0hBTkdFKHgpICgoeCkgPDwgU19YQVVJUENTQUxJR05DSEFOR0UpCiAjZGVmaW5lIEZfWEFVSVBDU0FMSUdOQ0hBTkdFICAgIFZfWEFVSVBDU0FMSUdOQ0hBTkdFKDFVKQogCisjZGVmaW5lIFNfWEdNX0lOVCAgICAwCisjZGVmaW5lIFZfWEdNX0lOVCh4KSAoKHgpIDw8IFNfWEdNX0lOVCkKKyNkZWZpbmUgRl9YR01fSU5UICAgIFZfWEdNX0lOVCgxVSkKKwogI2RlZmluZSBBX1hHTV9JTlRfQ0FVU0UgMHg4ZDgKIAogI2RlZmluZSBBX1hHTV9YQVVJX0FDVF9DVFJMIDB4OGRjCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IGQzMTc5MWYuLjI2ZDM1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIFNHRV9SWF9DT1BZX1RIUkVTICAyNTYKICNkZWZpbmUgU0dFX1JYX1BVTExfTEVOICAgIDEyOAogCisjZGVmaW5lIFNHRV9QR19SU1ZEIFNNUF9DQUNIRV9CWVRFUwogLyoKICAqIFBhZ2UgY2h1bmsgc2l6ZSBmb3IgRkwwIGJ1ZmZlcnMgaWYgRkwwIGlzIHRvIGJlIHBvcHVsYXRlZCB3aXRoIHBhZ2UgY2h1bmtzLgogICogSXQgbXVzdCBiZSBhIGRpdmlzb3Igb2YgUEFHRV9TSVpFLiAgSWYgc2V0IHRvIDAgRkwwIHdpbGwgdXNlIHNrX2J1ZmZzCkBAIC01NywxNiArNTgsMjUgQEAKICAqLwogI2RlZmluZSBGTDBfUEdfQ0hVTktfU0laRSAgMjA0OAogI2RlZmluZSBGTDBfUEdfT1JERVIgMAorI2RlZmluZSBGTDBfUEdfQUxMT0NfU0laRSAoUEFHRV9TSVpFIDw8IEZMMF9QR19PUkRFUikKICNkZWZpbmUgRkwxX1BHX0NIVU5LX1NJWkUgKFBBR0VfU0laRSA+IDgxOTIgPyAxNjM4NCA6IDgxOTIpCiAjZGVmaW5lIEZMMV9QR19PUkRFUiAoUEFHRV9TSVpFID4gODE5MiA/IDAgOiAxKQorI2RlZmluZSBGTDFfUEdfQUxMT0NfU0laRSAoUEFHRV9TSVpFIDw8IEZMMV9QR19PUkRFUikKIAogI2RlZmluZSBTR0VfUlhfRFJPUF9USFJFUyAxNgorI2RlZmluZSBSWF9SRUNMQUlNX1BFUklPRCAoSFovNCkKIAogLyoKKyAqIE1heCBudW1iZXIgb2YgUnggYnVmZmVycyB3ZSByZXBsZW5pc2ggYXQgYSB0aW1lLgorICovCisjZGVmaW5lIE1BWF9SWF9SRUZJTEwgMTZVCisvKgogICogUGVyaW9kIG9mIHRoZSBUeCBidWZmZXIgcmVjbGFpbSB0aW1lci4gIFRoaXMgdGltZXIgZG9lcyBub3QgbmVlZCB0byBydW4KICAqIGZyZXF1ZW50bHkgYXMgVHggYnVmZmVycyBhcmUgdXN1YWxseSByZWNsYWltZWQgYnkgbmV3IFR4IHBhY2tldHMuCiAgKi8KICNkZWZpbmUgVFhfUkVDTEFJTV9QRVJJT0QgKEhaIC8gNCkKKyNkZWZpbmUgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyA2NFUKKyNkZWZpbmUgVFhfUkVDTEFJTV9DSFVOSyAxNlUKIAogLyogV1Igc2l6ZSBpbiBieXRlcyAqLwogI2RlZmluZSBXUl9MRU4gKFdSX0ZMSVRTICogOCkKQEAgLTMwNCwyMSArMzE0LDI1IEBACiAgKglyZWNsYWltX2NvbXBsZXRlZF90eCAtIHJlY2xhaW1zIGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycwogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCiAgKglAcTogdGhlIFR4IHF1ZXVlIHRvIHJlY2xhaW0gY29tcGxldGVkIGRlc2NyaXB0b3JzIGZyb20KKyAqCUBjaHVuazogbWF4aW11bSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gcmVjbGFpbQogICoKICAqCVJlY2xhaW1zIFR4IGRlc2NyaXB0b3JzIHRoYXQgdGhlIFNHRSBoYXMgaW5kaWNhdGVkIGl0IGhhcyBwcm9jZXNzZWQsCiAgKglhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgYnVmZmVycyBpZiBwb3NzaWJsZS4gIENhbGxlZCB3aXRoIHRoZSBUeAogICoJcXVldWUncyBsb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWNsYWltX2NvbXBsZXRlZF90eChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJc3RydWN0IHNnZV90eHEgKnEpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWNsYWltX2NvbXBsZXRlZF90eChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJCXN0cnVjdCBzZ2VfdHhxICpxLAorCQkJCQkJdW5zaWduZWQgaW50IGNodW5rKQogewogCXVuc2lnbmVkIGludCByZWNsYWltID0gcS0+cHJvY2Vzc2VkIC0gcS0+Y2xlYW5lZDsKIAorCXJlY2xhaW0gPSBtaW4oY2h1bmssIHJlY2xhaW0pOwogCWlmIChyZWNsYWltKSB7CiAJCWZyZWVfdHhfZGVzYyhhZGFwdGVyLCBxLCByZWNsYWltKTsKIAkJcS0+Y2xlYW5lZCArPSByZWNsYWltOwogCQlxLT5pbl91c2UgLT0gcmVjbGFpbTsKIAl9CisJcmV0dXJuIHEtPnByb2Nlc3NlZCAtIHEtPmNsZWFuZWQ7CiB9CiAKIC8qKgpAQCAtMzM0LDYgKzM0OCwyNiBAQAogCXJldHVybiBxLT5pbl91c2UgLSByIDwgKHEtPnNpemUgPj4gMSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFyX3J4X2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBzZ2VfZmwgKnEsCisJCQkgIHN0cnVjdCByeF9zd19kZXNjICpkKQoreworCWlmIChxLT51c2VfcGFnZXMgJiYgZC0+cGdfY2h1bmsucGFnZSkgeworCQkoKmQtPnBnX2NodW5rLnBfY250KS0tOworCQlpZiAoISpkLT5wZ19jaHVuay5wX2NudCkKKwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsCisJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKCZkLT5wZ19jaHVuaywgbWFwcGluZyksCisJCQkJICAgICAgIHEtPmFsbG9jX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJcHV0X3BhZ2UoZC0+cGdfY2h1bmsucGFnZSk7CisJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOworCX0gZWxzZSB7CisJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIoZCwgZG1hX2FkZHIpLAorCQkJCSBxLT5idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJa2ZyZWVfc2tiKGQtPnNrYik7CisJCWQtPnNrYiA9IE5VTEw7CisJfQorfQorCiAvKioKICAqCWZyZWVfcnhfYnVmcyAtIGZyZWUgdGhlIFJ4IGJ1ZmZlcnMgb24gYW4gU0dFIGZyZWUgbGlzdAogICoJQHBkZXY6IHRoZSBQQ0kgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWRhcHRlcgpAQCAtMzQ5LDE2ICszODMsOCBAQAogCXdoaWxlIChxLT5jcmVkaXRzLS0pIHsKIAkJc3RydWN0IHJ4X3N3X2Rlc2MgKmQgPSAmcS0+c2Rlc2NbY2lkeF07CiAKLQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBwY2lfdW5tYXBfYWRkcihkLCBkbWFfYWRkciksCi0JCQkJIHEtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAocS0+dXNlX3BhZ2VzKSB7Ci0JCQlpZiAoZC0+cGdfY2h1bmsucGFnZSkKLQkJCQlwdXRfcGFnZShkLT5wZ19jaHVuay5wYWdlKTsKLQkJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJa2ZyZWVfc2tiKGQtPnNrYik7Ci0JCQlkLT5za2IgPSBOVUxMOwotCQl9CisKKwkJY2xlYXJfcnhfZGVzYyhwZGV2LCBxLCBkKTsKIAkJaWYgKCsrY2lkeCA9PSBxLT5zaXplKQogCQkJY2lkeCA9IDA7CiAJfQpAQCAtNDAxLDE4ICs0MjcsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGxvY19wZ19jaHVuayhzdHJ1Y3Qgc2dlX2ZsICpxLCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2QsIGdmcF90IGdmcCwKK3N0YXRpYyBpbmxpbmUgaW50IGFkZF9vbmVfcnhfY2h1bmsoZG1hX2FkZHJfdCBtYXBwaW5nLCBzdHJ1Y3QgcnhfZGVzYyAqZCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZ2VuKQoreworCWQtPmFkZHJfbG8gPSBjcHVfdG9fYmUzMihtYXBwaW5nKTsKKwlkLT5hZGRyX2hpID0gY3B1X3RvX2JlMzIoKHU2NCkgbWFwcGluZyA+PiAzMik7CisJd21iKCk7CisJZC0+bGVuX2dlbiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjEoZ2VuKSk7CisJZC0+Z2VuMiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjIoZ2VuKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfcGdfY2h1bmsoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZ2VfZmwgKnEsCisJCQkgIHN0cnVjdCByeF9zd19kZXNjICpzZCwgZ2ZwX3QgZ2ZwLAogCQkJICB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJaWYgKCFxLT5wZ19jaHVuay5wYWdlKSB7CisJCWRtYV9hZGRyX3QgbWFwcGluZzsKKwogCQlxLT5wZ19jaHVuay5wYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CiAJCWlmICh1bmxpa2VseSghcS0+cGdfY2h1bmsucGFnZSkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcS0+cGdfY2h1bmsudmEgPSBwYWdlX2FkZHJlc3MocS0+cGdfY2h1bmsucGFnZSk7CisJCXEtPnBnX2NodW5rLnBfY250ID0gcS0+cGdfY2h1bmsudmEgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSAtCisJCQkJICAgIFNHRV9QR19SU1ZEOwogCQlxLT5wZ19jaHVuay5vZmZzZXQgPSAwOworCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIHEtPnBnX2NodW5rLnBhZ2UsCisJCQkJICAgICAgIDAsIHEtPmFsbG9jX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXBjaV91bm1hcF9hZGRyX3NldCgmcS0+cGdfY2h1bmssIG1hcHBpbmcsIG1hcHBpbmcpOwogCX0KIAlzZC0+cGdfY2h1bmsgPSBxLT5wZ19jaHVuazsKIAorCXByZWZldGNoKHNkLT5wZ19jaHVuay5wX2NudCk7CisKIAlxLT5wZ19jaHVuay5vZmZzZXQgKz0gcS0+YnVmX3NpemU7CiAJaWYgKHEtPnBnX2NodW5rLm9mZnNldCA9PSAoUEFHRV9TSVpFIDw8IG9yZGVyKSkKIAkJcS0+cGdfY2h1bmsucGFnZSA9IE5VTEw7CkBAIC00MjAsOSArNDY3LDIzIEBACiAJCXEtPnBnX2NodW5rLnZhICs9IHEtPmJ1Zl9zaXplOwogCQlnZXRfcGFnZShxLT5wZ19jaHVuay5wYWdlKTsKIAl9CisKKwlpZiAoc2QtPnBnX2NodW5rLm9mZnNldCA9PSAwKQorCQkqc2QtPnBnX2NodW5rLnBfY250ID0gMTsKKwllbHNlCisJCSpzZC0+cGdfY2h1bmsucF9jbnQgKz0gMTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmluZ19mbF9kYihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSkKK3sKKwlpZiAocS0+cGVuZF9jcmVkID49IHEtPmNyZWRpdHMgLyA0KSB7CisJCXEtPnBlbmRfY3JlZCA9IDA7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisJfQorfQorCiAvKioKICAqCXJlZmlsbF9mbCAtIHJlZmlsbCBhbiBTR0UgZnJlZS1idWZmZXIgbGlzdAogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCkBAIC00MzYsMzggKzQ5Nyw0MyBAQAogICovCiBzdGF0aWMgaW50IHJlZmlsbF9mbChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSwgaW50IG4sIGdmcF90IGdmcCkKIHsKLQl2b2lkICpidWZfc3RhcnQ7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJnEtPnNkZXNjW3EtPnBpZHhdOwogCXN0cnVjdCByeF9kZXNjICpkID0gJnEtPmRlc2NbcS0+cGlkeF07CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAogCXdoaWxlIChuLS0pIHsKKwkJZG1hX2FkZHJfdCBtYXBwaW5nOwogCQlpbnQgZXJyOwogCiAJCWlmIChxLT51c2VfcGFnZXMpIHsKLQkJCWlmICh1bmxpa2VseShhbGxvY19wZ19jaHVuayhxLCBzZCwgZ2ZwLCBxLT5vcmRlcikpKSB7CisJCQlpZiAodW5saWtlbHkoYWxsb2NfcGdfY2h1bmsoYWRhcCwgcSwgc2QsIGdmcCwKKwkJCQkJCSAgICBxLT5vcmRlcikpKSB7CiBub21lbToJCQkJcS0+YWxsb2NfZmFpbGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlidWZfc3RhcnQgPSBzZC0+cGdfY2h1bmsudmE7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKHEtPmJ1Zl9zaXplLCBnZnApOworCQkJbWFwcGluZyA9IHBjaV91bm1hcF9hZGRyKCZzZC0+cGdfY2h1bmssIG1hcHBpbmcpICsKKwkJCQkJCSBzZC0+cGdfY2h1bmsub2Zmc2V0OworCQkJcGNpX3VubWFwX2FkZHJfc2V0KHNkLCBkbWFfYWRkciwgbWFwcGluZyk7CiAKKwkJCWFkZF9vbmVfcnhfY2h1bmsobWFwcGluZywgZCwgcS0+Z2VuKTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShhZGFwLT5wZGV2LCBtYXBwaW5nLAorCQkJCQkJcS0+YnVmX3NpemUgLSBTR0VfUEdfUlNWRCwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0gZWxzZSB7CisJCQl2b2lkICpidWZfc3RhcnQ7CisKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IocS0+YnVmX3NpemUsIGdmcCk7CiAJCQlpZiAoIXNrYikKIAkJCQlnb3RvIG5vbWVtOwogCiAJCQlzZC0+c2tiID0gc2tiOwogCQkJYnVmX3N0YXJ0ID0gc2tiLT5kYXRhOwotCQl9Ci0KLQkJZXJyID0gYWRkX29uZV9yeF9idWYoYnVmX3N0YXJ0LCBxLT5idWZfc2l6ZSwgZCwgc2QsIHEtPmdlbiwKLQkJCQkgICAgIGFkYXAtPnBkZXYpOwotCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJaWYgKCFxLT51c2VfcGFnZXMpIHsKLQkJCQlrZnJlZV9za2Ioc2QtPnNrYik7Ci0JCQkJc2QtPnNrYiA9IE5VTEw7CisJCQllcnIgPSBhZGRfb25lX3J4X2J1ZihidWZfc3RhcnQsIHEtPmJ1Zl9zaXplLCBkLCBzZCwKKwkJCQkJICAgICBxLT5nZW4sIGFkYXAtPnBkZXYpOworCQkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCQljbGVhcl9yeF9kZXNjKGFkYXAtPnBkZXYsIHEsIHNkKTsKKwkJCQlicmVhazsKIAkJCX0KLQkJCWJyZWFrOwogCQl9CiAKIAkJZCsrOwpAQCAtNDc4LDE5ICs1NDQsMTkgQEAKIAkJCXNkID0gcS0+c2Rlc2M7CiAJCQlkID0gcS0+ZGVzYzsKIAkJfQotCQlxLT5jcmVkaXRzKys7CiAJCWNvdW50Kys7CiAJfQotCXdtYigpOwotCWlmIChsaWtlbHkoY291bnQpKQotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOworCisJcS0+Y3JlZGl0cyArPSBjb3VudDsKKwlxLT5wZW5kX2NyZWQgKz0gY291bnQ7CisJcmluZ19mbF9kYihhZGFwLCBxKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmVmaWxsX2ZsKHN0cnVjdCBhZGFwdGVyICphZGFwLCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKIHsKLQlyZWZpbGxfZmwoYWRhcCwgZmwsIG1pbigxNlUsIGZsLT5zaXplIC0gZmwtPmNyZWRpdHMpLAorCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKE1BWF9SWF9SRUZJTEwsIGZsLT5zaXplIC0gZmwtPmNyZWRpdHMpLAogCQkgIEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QKTsKIH0KIApAQCAtNTE1LDEzICs1ODEsMTUgQEAKIAl3bWIoKTsKIAl0by0+bGVuX2dlbiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjEocS0+Z2VuKSk7CiAJdG8tPmdlbjIgPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4yKHEtPmdlbikpOwotCXEtPmNyZWRpdHMrKzsKIAogCWlmICgrK3EtPnBpZHggPT0gcS0+c2l6ZSkgewogCQlxLT5waWR4ID0gMDsKIAkJcS0+Z2VuIF49IDE7CiAJfQotCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisKKwlxLT5jcmVkaXRzKys7CisJcS0+cGVuZF9jcmVkKys7CisJcmluZ19mbF9kYihhZGFwLCBxKTsKIH0KIAogLyoqCkBAIC01ODUsOCArNjUzLDggQEAKIAltZW1zZXQocS0+dHhxLCAwLCBzaXplb2Yoc3RydWN0IHNnZV90eHEpICogU0dFX1RYUV9QRVJfU0VUKTsKIAlxLT50eHFfc3RvcHBlZCA9IDA7CiAJcS0+dHhfcmVjbGFpbV90aW1lci5mdW5jdGlvbiA9IE5VTEw7IC8qIGZvciB0M19zdG9wX3NnZV90aW1lcnMoKSAqLwotCWtmcmVlKHEtPmxyb19mcmFnX3RibCk7Ci0JcS0+bHJvX25mcmFncyA9IHEtPmxyb19mcmFnX2xlbiA9IDA7CisJcS0+cnhfcmVjbGFpbV90aW1lci5mdW5jdGlvbiA9IE5VTEw7CisJcS0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzID0gcS0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKIApAQCAtNzMzLDcgKzgwMSw5IEBACiAJCXJldHVybiBza2I7CiAJfQogCi0JaWYgKHVubGlrZWx5KGZsLT5jcmVkaXRzIDwgZHJvcF90aHJlcykpCisJaWYgKHVubGlrZWx5KGZsLT5jcmVkaXRzIDwgZHJvcF90aHJlcykgJiYKKwkgICAgcmVmaWxsX2ZsKGFkYXAsIGZsLCBtaW4oTUFYX1JYX1JFRklMTCwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyAtIDEpLAorCQkgICAgICBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCkgPT0gMCkKIAkJZ290byByZWN5Y2xlOwogCiB1c2Vfb3JpZ19idWY6CkBAIC03NzAsMTkgKzg0MCwxOSBAQAogCXN0cnVjdCBza19idWZmICpuZXdza2IsICpza2I7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJmZsLT5zZGVzY1tmbC0+Y2lkeF07CiAKLQluZXdza2IgPSBza2IgPSBxLT5wZ19za2I7CisJZG1hX2FkZHJfdCBkbWFfYWRkciA9IHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkcik7CiAKKwluZXdza2IgPSBza2IgPSBxLT5wZ19za2I7CiAJaWYgKCFza2IgJiYgKGxlbiA8PSBTR0VfUlhfQ09QWV9USFJFUykpIHsKIAkJbmV3c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChsaWtlbHkobmV3c2tiICE9IE5VTEwpKSB7CiAJCQlfX3NrYl9wdXQobmV3c2tiLCBsZW4pOwotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGFkYXAtPnBkZXYsCi0JCQkJCSAgICBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLCBsZW4sCisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcC0+cGRldiwgZG1hX2FkZHIsIGxlbiwKIAkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQltZW1jcHkobmV3c2tiLT5kYXRhLCBzZC0+cGdfY2h1bmsudmEsIGxlbik7Ci0JCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYWRhcC0+cGRldiwKLQkJCQkJICAgIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksIGxlbiwKLQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYWRhcC0+cGRldiwgZG1hX2FkZHIsCisJCQkJCQkgICAgICAgbGVuLAorCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0gZWxzZSBpZiAoIWRyb3BfdGhyZXMpCiAJCQlyZXR1cm4gTlVMTDsKIHJlY3ljbGU6CkBAIC03OTUsMTYgKzg2NSwyNSBAQAogCWlmICh1bmxpa2VseShxLT5yeF9yZWN5Y2xlX2J1ZiB8fCAoIXNrYiAmJiBmbC0+Y3JlZGl0cyA8PSBkcm9wX3RocmVzKSkpCiAJCWdvdG8gcmVjeWNsZTsKIAorCXByZWZldGNoKHNkLT5wZ19jaHVuay5wX2NudCk7CisKIAlpZiAoIXNrYikKIAkJbmV3c2tiID0gYWxsb2Nfc2tiKFNHRV9SWF9QVUxMX0xFTiwgR0ZQX0FUT01JQyk7CisKIAlpZiAodW5saWtlbHkoIW5ld3NrYikpIHsKIAkJaWYgKCFkcm9wX3RocmVzKQogCQkJcmV0dXJuIE5VTEw7CiAJCWdvdG8gcmVjeWNsZTsKIAl9CiAKLQlwY2lfdW5tYXBfc2luZ2xlKGFkYXAtPnBkZXYsIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksCi0JCQkgZmwtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShhZGFwLT5wZGV2LCBkbWFfYWRkciwgbGVuLAorCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCSgqc2QtPnBnX2NodW5rLnBfY250KS0tOworCWlmICghKnNkLT5wZ19jaHVuay5wX2NudCkKKwkJcGNpX3VubWFwX3BhZ2UoYWRhcC0+cGRldiwKKwkJCSAgICAgICBwY2lfdW5tYXBfYWRkcigmc2QtPnBnX2NodW5rLCBtYXBwaW5nKSwKKwkJCSAgICAgICBmbC0+YWxsb2Nfc2l6ZSwKKwkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCWlmICghc2tiKSB7CiAJCV9fc2tiX3B1dChuZXdza2IsIFNHRV9SWF9QVUxMX0xFTik7CiAJCW1lbWNweShuZXdza2ItPmRhdGEsIHNkLT5wZ19jaHVuay52YSwgU0dFX1JYX1BVTExfTEVOKTsKQEAgLTgxMywxNCArODkyLDE1IEBACiAJCQkJICAgbGVuIC0gU0dFX1JYX1BVTExfTEVOKTsKIAkJbmV3c2tiLT5sZW4gPSBsZW47CiAJCW5ld3NrYi0+ZGF0YV9sZW4gPSBsZW4gLSBTR0VfUlhfUFVMTF9MRU47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbmV3c2tiLT5kYXRhX2xlbjsKIAl9IGVsc2UgewogCQlza2JfZmlsbF9wYWdlX2Rlc2MobmV3c2tiLCBza2Jfc2hpbmZvKG5ld3NrYiktPm5yX2ZyYWdzLAogCQkJCSAgIHNkLT5wZ19jaHVuay5wYWdlLAogCQkJCSAgIHNkLT5wZ19jaHVuay5vZmZzZXQsIGxlbik7CiAJCW5ld3NrYi0+bGVuICs9IGxlbjsKIAkJbmV3c2tiLT5kYXRhX2xlbiArPSBsZW47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbGVuOwogCX0KLQluZXdza2ItPnRydWVzaXplICs9IG5ld3NrYi0+ZGF0YV9sZW47CiAKIAlmbC0+Y3JlZGl0cy0tOwogCS8qCkBAIC0xMDYzLDcgKzExNDMsNyBAQAogCXN0cnVjdCB0eF9kZXNjICpkID0gJnEtPmRlc2NbcGlkeF07CiAJc3RydWN0IGNwbF90eF9wa3QgKmNwbCA9IChzdHJ1Y3QgY3BsX3R4X3BrdCAqKWQ7CiAKLQljcGwtPmxlbiA9IGh0b25sKHNrYi0+bGVuIHwgMHg4MDAwMDAwMCk7CisJY3BsLT5sZW4gPSBodG9ubChza2ItPmxlbik7CiAJY250cmwgPSBWX1RYUEtUX0lOVEYocGktPnBvcnRfaWQpOwogCiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSAmJiBwaS0+dmxhbl9ncnApCkBAIC0xMTYxLDcgKzEyNDEsNyBAQAogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxaWR4KTsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0JcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CisJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAljcmVkaXRzID0gcS0+c2l6ZSAtIHEtPmluX3VzZTsKIAluZGVzYyA9IGNhbGNfdHhfZGVzY3Moc2tiKTsKQEAgLTE1NzAsNyArMTY1MCw3IEBACiAJdW5zaWduZWQgaW50IG5kZXNjID0gY2FsY190eF9kZXNjc19vZmxkKHNrYiksIHBpZHgsIGdlbjsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0gICAgICBhZ2FpbjpyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxKTsKK2FnYWluOglyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxLCBUWF9SRUNMQUlNX0NIVU5LKTsKIAogCXJldCA9IGNoZWNrX2Rlc2NfYXZhaWwoYWRhcCwgcSwgc2tiLCBuZGVzYywgVFhRX09GTEQpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CkBAIC0xNjEyLDcgKzE2OTIsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CiAKIAlzcGluX2xvY2soJnEtPmxvY2spOwotICAgICAgYWdhaW46cmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CithZ2FpbjoJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZxLT5zZW5kcSkpICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IGdlbiwgcGlkeDsKQEAgLTE5MzIsMTIgKzIwMTIsMTMgQEAKIAlza2JfcHVsbChza2IsIHNpemVvZigqcCkgKyBwYWQpOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXAtPnBvcnRbcC0+aWZmXSk7CiAJcGkgPSBuZXRkZXZfcHJpdihza2ItPmRldik7Ci0JaWYgKChwaS0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU0pICYmIHAtPmNzdW1fdmFsaWQgJiYgcC0+Y3N1bSA9PSBodG9ucygweGZmZmYpICYmCi0JICAgICFwLT5mcmFnbWVudCkgeworCWlmICgocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSAmJiBwLT5jc3VtX3ZhbGlkICYmCisJICAgIHAtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSAmJiAhcC0+ZnJhZ21lbnQpIHsKIAkJcXMtPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1JYX0NTVU1fR09PRF0rKzsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9IGVsc2UKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxcyAtICZhZGFwLT5zZ2UucXNbMF0pOwogCiAJaWYgKHVubGlrZWx5KHAtPnZsYW5fdmFsaWQpKSB7CiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CkBAIC0xOTQ1LDEwICsyMDI2LDggQEAKIAkJcXMtPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1ZMQU5FWF0rKzsKIAkJaWYgKGxpa2VseShncnApKQogCQkJaWYgKGxybykKLQkJCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKCZxcy0+bHJvX21nciwgc2tiLAotCQkJCQkJCSAgICAgZ3JwLAotCQkJCQkJCSAgICAgbnRvaHMocC0+dmxhbiksCi0JCQkJCQkJICAgICBwKTsKKwkJCQl2bGFuX2dyb19yZWNlaXZlKCZxcy0+bmFwaSwgZ3JwLAorCQkJCQkJIG50b2hzKHAtPnZsYW4pLCBza2IpOwogCQkJZWxzZSB7CiAJCQkJaWYgKHVubGlrZWx5KHBpLT5pc2NzaV9pcHY0YWRkciAmJgogCQkJCSAgICBpc19hcnAoc2tiKSkpIHsKQEAgLTE5NjUsNyArMjA0NCw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0gZWxzZSBpZiAocnEtPnBvbGxpbmcpIHsKIAkJaWYgKGxybykKLQkJCWxyb19yZWNlaXZlX3NrYigmcXMtPmxyb19tZ3IsIHNrYiwgcCk7CisJCQluYXBpX2dyb19yZWNlaXZlKCZxcy0+bmFwaSwgc2tiKTsKIAkJZWxzZSB7CiAJCQlpZiAodW5saWtlbHkocGktPmlzY3NpX2lwdjRhZGRyICYmIGlzX2FycChza2IpKSkKIAkJCQljeGdiM19hcnBfcHJvY2VzcyhhZGFwLCBza2IpOwpAQCAtMTk4MSw1OSArMjA2MCw2IEBACiB9CiAKIC8qKgotICoJbHJvX2ZyYW1lX29rIC0gY2hlY2sgaWYgYW4gaW5ncmVzcyBwYWNrZXQgaXMgZWxpZ2libGUgZm9yIExSTwotICoJQHA6IHRoZSBDUEwgaGVhZGVyIG9mIHRoZSBwYWNrZXQKLSAqCi0gKglSZXR1cm5zIHRydWUgaWYgYSByZWNlaXZlZCBwYWNrZXQgaXMgZWxpZ2libGUgZm9yIExSTy4KLSAqCVRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIHRydWU6Ci0gKgktIHBhY2tldCBpcyBUQ1AvSVAgRXRoZXJuZXQgSUkgKGNoZWNrZWQgZWxzZXdoZXJlKQotICoJLSBub3QgYW4gSVAgZnJhZ21lbnQKLSAqCS0gbm8gSVAgb3B0aW9ucwotICoJLSBUQ1AvSVAgY2hlY2tzdW1zIGFyZSBjb3JyZWN0Ci0gKgktIHRoZSBwYWNrZXQgaXMgZm9yIHRoaXMgaG9zdAotICovCi1zdGF0aWMgaW5saW5lIGludCBscm9fZnJhbWVfb2soY29uc3Qgc3RydWN0IGNwbF9yeF9wa3QgKnApCi17Ci0JY29uc3Qgc3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKShwICsgMSk7Ci0JY29uc3Qgc3RydWN0IGlwaGRyICppaCA9IChzdHJ1Y3QgaXBoZHIgKikoZWggKyAxKTsKLQotCXJldHVybiAoKigodTggKilwICsgMSkgJiAweDkwKSA9PSAweDEwICYmIHAtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSAmJgotCQllaC0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgJiYgaWgtPmlobCA9PSAoc2l6ZW9mKCppaCkgPj4gMik7Ci19Ci0KLXN0YXRpYyBpbnQgdDNfZ2V0X2xyb19oZWFkZXIodm9pZCAqKmVoLCAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsCi0JCQkgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpjcGwgPSBwcml2OwotCi0JaWYgKCFscm9fZnJhbWVfb2soY3BsKSkKLQkJcmV0dXJuIC0xOwotCi0JKmVoID0gKHN0cnVjdCBldGhoZHIgKikoY3BsICsgMSk7Ci0JKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKHN0cnVjdCBldGhoZHIgKikqZWggKyAxKTsKLQkqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopKChzdHJ1Y3QgaXBoZHIgKikqaXBoICsgMSk7Ci0KLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICB2b2lkICoqaXBoLCB2b2lkICoqdGNwaCwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgICB2b2lkICpwcml2KQotewotCXZvaWQgKmVoOwotCi0JcmV0dXJuIHQzX2dldF9scm9faGVhZGVyKCZlaCwgaXBoLCB0Y3BoLCBoZHJfZmxhZ3MsIHByaXYpOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqZWgsCi0JCQkgICAgICB2b2lkICoqaXBoLCB2b2lkICoqdGNwaCwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgICB2b2lkICpwcml2KQotewotCXJldHVybiB0M19nZXRfbHJvX2hlYWRlcihlaCwgaXBoLCB0Y3BoLCBoZHJfZmxhZ3MsIHByaXYpOwotfQotCi0vKioKICAqCWxyb19hZGRfcGFnZSAtIGFkZCBhIHBhZ2UgY2h1bmsgdG8gYW4gTFJPIHNlc3Npb24KICAqCUBhZGFwOiB0aGUgYWRhcHRlcgogICoJQHFzOiB0aGUgYXNzb2NpYXRlZCBxdWV1ZSBzZXQKQEAgLTIwNDksOCArMjA3NSw5IEBACiB7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJmZsLT5zZGVzY1tmbC0+Y2lkeF07CiAJc3RydWN0IGNwbF9yeF9wa3QgKmNwbDsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnID0gcXMtPmxyb19mcmFnX3RibDsKLQlpbnQgbnJfZnJhZ3MgPSBxcy0+bHJvX25mcmFncywgZnJhZ19sZW4gPSBxcy0+bHJvX2ZyYWdfbGVuOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnJ4X2ZyYWcgPSBxcy0+bHJvX2ZyYWdfdGJsLmZyYWdzOworCWludCBucl9mcmFncyA9IHFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3M7CisJaW50IGZyYWdfbGVuID0gcXMtPmxyb19mcmFnX3RibC5sZW47CiAJaW50IG9mZnNldCA9IDA7CiAKIAlpZiAoIW5yX2ZyYWdzKSB7CkBAIC0yMDYxLDIxICsyMDg4LDMzIEBACiAJZmwtPmNyZWRpdHMtLTsKIAogCWxlbiAtPSBvZmZzZXQ7Ci0JcGNpX3VubWFwX3NpbmdsZShhZGFwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLAotCQkJIGZsLT5idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcC0+cGRldiwKKwkJCQkgICAgcGNpX3VubWFwX2FkZHIoc2QsIGRtYV9hZGRyKSwKKwkJCQkgICAgZmwtPmJ1Zl9zaXplIC0gU0dFX1BHX1JTVkQsCisJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkoKnNkLT5wZ19jaHVuay5wX2NudCktLTsKKwlpZiAoISpzZC0+cGdfY2h1bmsucF9jbnQpCisJCXBjaV91bm1hcF9wYWdlKGFkYXAtPnBkZXYsCisJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnNkLT5wZ19jaHVuaywgbWFwcGluZyksCisJCQkgICAgICAgZmwtPmFsbG9jX3NpemUsCisJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXByZWZldGNoKHFzLT5scm9fdmEpOwogCiAJcnhfZnJhZyArPSBucl9mcmFnczsKIAlyeF9mcmFnLT5wYWdlID0gc2QtPnBnX2NodW5rLnBhZ2U7CiAJcnhfZnJhZy0+cGFnZV9vZmZzZXQgPSBzZC0+cGdfY2h1bmsub2Zmc2V0ICsgb2Zmc2V0OwogCXJ4X2ZyYWctPnNpemUgPSBsZW47CiAJZnJhZ19sZW4gKz0gbGVuOwotCXFzLT5scm9fbmZyYWdzKys7Ci0JcXMtPmxyb19mcmFnX2xlbiA9IGZyYWdfbGVuOworCXFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3MrKzsKKwlxcy0+bHJvX2ZyYWdfdGJsLmxlbiA9IGZyYWdfbGVuOworCiAKIAlpZiAoIWNvbXBsZXRlKQogCQlyZXR1cm47CiAKLQlxcy0+bHJvX25mcmFncyA9IHFzLT5scm9fZnJhZ19sZW4gPSAwOworCXFzLT5scm9fZnJhZ190YmwuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJY3BsID0gcXMtPmxyb192YTsKIAogCWlmICh1bmxpa2VseShjcGwtPnZsYW5fdmFsaWQpKSB7CkBAIC0yMDg0LDM2ICsyMTIzLDE1IEBACiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CiAKIAkJaWYgKGxpa2VseShncnAgIT0gTlVMTCkpIHsKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9mcmFncygmcXMtPmxyb19tZ3IsCi0JCQkJCQkgICAgICAgcXMtPmxyb19mcmFnX3RibCwKLQkJCQkJCSAgICAgICBmcmFnX2xlbiwgZnJhZ19sZW4sCi0JCQkJCQkgICAgICAgZ3JwLCBudG9ocyhjcGwtPnZsYW4pLAotCQkJCQkJICAgICAgIGNwbCwgMCk7Ci0JCQlyZXR1cm47CisJCQl2bGFuX2dyb19mcmFncygmcXMtPm5hcGksIGdycCwgbnRvaHMoY3BsLT52bGFuKSwKKwkJCQkgICAgICAgJnFzLT5scm9fZnJhZ190YmwpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbHJvX3JlY2VpdmVfZnJhZ3MoJnFzLT5scm9fbWdyLCBxcy0+bHJvX2ZyYWdfdGJsLAotCQkJICBmcmFnX2xlbiwgZnJhZ19sZW4sIGNwbCwgMCk7Ci19CisJbmFwaV9ncm9fZnJhZ3MoJnFzLT5uYXBpLCAmcXMtPmxyb19mcmFnX3RibCk7CiAKLS8qKgotICoJaW5pdF9scm9fbWdyIC0gaW5pdGlhbGl6ZSBhIExSTyBtYW5hZ2VyIG9iamVjdAotICoJQGxyb19tZ3I6IHRoZSBMUk8gbWFuYWdlciBvYmplY3QKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9scm9fbWdyKHN0cnVjdCBzZ2VfcXNldCAqcXMsIHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncikKLXsKLQlscm9fbWdyLT5kZXYgPSBxcy0+bmV0ZGV2OwotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5mcmFnX2FsaWduX3BhZCA9IE5FVF9JUF9BTElHTjsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gVDNfTUFYX0xST19TRVM7Ci0JbHJvX21nci0+bHJvX2FyciA9IHFzLT5scm9fZGVzYzsKLQlscm9fbWdyLT5nZXRfZnJhZ19oZWFkZXIgPSB0M19nZXRfZnJhZ19oZWFkZXI7Ci0JbHJvX21nci0+Z2V0X3NrYl9oZWFkZXIgPSB0M19nZXRfc2tiX2hlYWRlcjsKLQlscm9fbWdyLT5tYXhfYWdnciA9IFQzX01BWF9MUk9fTUFYX1BLVFM7Ci0JaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKLQkJbHJvX21nci0+bWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOworb3V0OgorCXFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKIC8qKgpAQCAtMjI4Miw2ICsyMzAwLDggQEAKIAkJCWlmIChmbC0+dXNlX3BhZ2VzKSB7CiAJCQkJdm9pZCAqYWRkciA9IGZsLT5zZGVzY1tmbC0+Y2lkeF0ucGdfY2h1bmsudmE7CiAKKwkJCQlwcmVmZXRjaCgmcXMtPmxyb19mcmFnX3RibCk7CisKIAkJCQlwcmVmZXRjaChhZGRyKTsKICNpZiBMMV9DQUNIRV9CWVRFUyA8IDEyOAogCQkJCXByZWZldGNoKGFkZHIgKyBMMV9DQUNIRV9CWVRFUyk7CkBAIC0yMzU2LDEwICsyMzc2LDYgQEAKIAl9CiAKIAlkZWxpdmVyX3BhcnRpYWxfYnVuZGxlKCZhZGFwLT50ZGV2LCBxLCBvZmZsb2FkX3NrYnMsIG5nYXRoZXJlZCk7Ci0JbHJvX2ZsdXNoX2FsbCgmcXMtPmxyb19tZ3IpOwotCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fQUdHUl0gPSBxcy0+bHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOwotCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fRkxVU0hFRF0gPSBxcy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fTk9fREVTQ10gPSBxcy0+bHJvX21nci5zdGF0cy5ub19kZXNjOwogCiAJaWYgKHNsZWVwaW5nKQogCQljaGVja19yaW5nX2RiKGFkYXAsIHFzLCBzbGVlcGluZyk7CkBAIC0yNzc1LDcgKzI3OTEsOCBAQAogICovCiB2b2lkIHQzX3NnZV9lcnJfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCXVuc2lnbmVkIGludCB2LCBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSk7CisJdW5zaWduZWQgaW50IHYsIHN0YXR1cyA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfU0dfSU5UX0NBVVNFKSAmCisJCQkJIH5GX0ZMRU1QVFk7CiAKIAlpZiAoc3RhdHVzICYgU0dFX1BBUkVSUikKIAkJQ0hfQUxFUlQoYWRhcHRlciwgIlNHRSBwYXJpdHkgZXJyb3IgKDB4JXgpXG4iLApAQCAtMjgwNSwxMyArMjgyMiwxMyBAQAogfQogCiAvKioKLSAqCXNnZV90aW1lcl9jYiAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgYW4gU0dFIHFzZXQKKyAqCXNnZV90aW1lcl90eCAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgYW4gU0dFIHFzZXQKICAqCUBkYXRhOiB0aGUgU0dFIHF1ZXVlIHNldCB0byBtYWludGFpbgogICoKICAqCVJ1bnMgcGVyaW9kaWNhbGx5IGZyb20gYSB0aW1lciB0byBwZXJmb3JtIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxdWV1ZQogICoJc2V0LiAgSXQgcGVyZm9ybXMgdHdvIHRhc2tzOgogICoKLSAqCWEpIENsZWFucyB1cCBhbnkgY29tcGxldGVkIFR4IGRlc2NyaXB0b3JzIHRoYXQgbWF5IHN0aWxsIGJlIHBlbmRpbmcuCisgKglDbGVhbnMgdXAgYW55IGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycyB0aGF0IG1heSBzdGlsbCBiZSBwZW5kaW5nLgogICoJTm9ybWFsIGRlc2NyaXB0b3IgY2xlYW51cCBoYXBwZW5zIHdoZW4gbmV3IHBhY2tldHMgYXJlIGFkZGVkIHRvIGEgVHgKICAqCXF1ZXVlIHNvIHRoaXMgdGltZXIgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50IGFuZCBkb2VzIGFueSBjbGVhbnVwIG9ubHkKICAqCWlmIHRoZSBUeCBxdWV1ZSBoYXMgbm90IHNlZW4gYW55IG5ldyBwYWNrZXRzIGluIGEgd2hpbGUuICBXZSBtYWtlIGEKQEAgLTI4MjEsNTEgKzI4MzgsODcgQEAKICAqCXVwKS4gIFNpbmNlIGNvbnRyb2wgcXVldWVzIHVzZSBpbW1lZGlhdGUgZGF0YSBleGNsdXNpdmVseSB3ZSBkb24ndAogICoJYm90aGVyIGNsZWFuaW5nIHRoZW0gdXAgaGVyZS4KICAqCi0gKgliKSBSZXBsZW5pc2hlcyBSeCBxdWV1ZXMgdGhhdCBoYXZlIHJ1biBvdXQgZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4KKyAqLworc3RhdGljIHZvaWQgc2dlX3RpbWVyX3R4KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gKHN0cnVjdCBzZ2VfcXNldCAqKWRhdGE7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihxcy0+bmV0ZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBpLT5hZGFwdGVyOworCXVuc2lnbmVkIGludCB0YmRbU0dFX1RYUV9QRVJfU0VUXSA9IHswLCAwfTsKKwl1bnNpZ25lZCBsb25nIG5leHRfcGVyaW9kOworCisJaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKSkgeworCQl0YmRbVFhRX0VUSF0gPSByZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfRVRIXSwKKwkJCQkJCSAgICBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LKTsKKwkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jayk7CisJfQorCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spKSB7CisJCXRiZFtUWFFfT0ZMRF0gPSByZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfT0ZMRF0sCisJCQkJCQkgICAgIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTkspOworCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jayk7CisJfQorCisJbmV4dF9wZXJpb2QgPSBUWF9SRUNMQUlNX1BFUklPRCA+PgorCQkgICAgICAobWF4KHRiZFtUWFFfRVRIXSwgdGJkW1RYUV9PRkxEXSkgLworCQkgICAgICAgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyk7CisJbW9kX3RpbWVyKCZxcy0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIG5leHRfcGVyaW9kKTsKK30KKworLyoKKyAqCXNnZV90aW1lcl9yeCAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgYW4gU0dFIHFzZXQKKyAqCUBkYXRhOiB0aGUgU0dFIHF1ZXVlIHNldCB0byBtYWludGFpbgorICoKKyAqCWEpIFJlcGxlbmlzaGVzIFJ4IHF1ZXVlcyB0aGF0IGhhdmUgcnVuIG91dCBkdWUgdG8gbWVtb3J5IHNob3J0YWdlLgogICoJTm9ybWFsbHkgbmV3IFJ4IGJ1ZmZlcnMgYXJlIGFkZGVkIHdoZW4gZXhpc3Rpbmcgb25lcyBhcmUgY29uc3VtZWQgYnV0CiAgKgl3aGVuIG91dCBvZiBtZW1vcnkgYSBxdWV1ZSBjYW4gYmVjb21lIGVtcHR5LiAgV2UgdHJ5IHRvIGFkZCBvbmx5IGEgZmV3CiAgKglidWZmZXJzIGhlcmUsIHRoZSBxdWV1ZSB3aWxsIGJlIHJlcGxlbmlzaGVkIGZ1bGx5IGFzIHRoZXNlIG5ldyBidWZmZXJzCiAgKglhcmUgdXNlZCB1cCBpZiBtZW1vcnkgc2hvcnRhZ2UgaGFzIHN1YnNpZGVkLgorICoKKyAqCWIpIFJldHVybiBjb2FsZXNjZWQgcmVzcG9uc2UgcXVldWUgY3JlZGl0cyBpbiBjYXNlIGEgcmVzcG9uc2UgcXVldWUgaXMKKyAqCXN0YXJ2ZWQuCisgKgogICovCi1zdGF0aWMgdm9pZCBzZ2VfdGltZXJfY2IodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgc2dlX3RpbWVyX3J4KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzcGlubG9ja190ICpsb2NrOwogCXN0cnVjdCBzZ2VfcXNldCAqcXMgPSAoc3RydWN0IHNnZV9xc2V0ICopZGF0YTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHFzLT5hZGFwOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKKwl1MzIgc3RhdHVzOwogCi0JaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKSkgewotCQlyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfRVRIXSk7Ci0JCXNwaW5fdW5sb2NrKCZxcy0+dHhxW1RYUV9FVEhdLmxvY2spOwotCX0KLQlpZiAoc3Bpbl90cnlsb2NrKCZxcy0+dHhxW1RYUV9PRkxEXS5sb2NrKSkgewotCQlyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfT0ZMRF0pOwotCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jayk7Ci0JfQotCWxvY2sgPSAoYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSA/ICZxcy0+cnNwcS5sb2NrIDoKLQkJCQkJICAgICZhZGFwLT5zZ2UucXNbMF0ucnNwcS5sb2NrOwotCWlmIChzcGluX3RyeWxvY2tfaXJxKGxvY2spKSB7Ci0JCWlmICghbmFwaV9pc19zY2hlZHVsZWQoJnFzLT5uYXBpKSkgewotCQkJdTMyIHN0YXR1cyA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfU0dfUlNQUV9GTF9TVEFUVVMpOworCWxvY2sgPSBhZGFwLT5wYXJhbXMucmV2ID4gMCA/CisJICAgICAgICZxcy0+cnNwcS5sb2NrIDogJmFkYXAtPnNnZS5xc1swXS5yc3BxLmxvY2s7CiAKLQkJCWlmIChxcy0+ZmxbMF0uY3JlZGl0cyA8IHFzLT5mbFswXS5zaXplKQotCQkJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMF0pOwotCQkJaWYgKHFzLT5mbFsxXS5jcmVkaXRzIDwgcXMtPmZsWzFdLnNpemUpCi0JCQkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFsxXSk7CisJaWYgKCFzcGluX3RyeWxvY2tfaXJxKGxvY2spKQorCQlnb3RvIG91dDsKIAotCQkJaWYgKHN0YXR1cyAmICgxIDw8IHFzLT5yc3BxLmNudHh0X2lkKSkgewotCQkJCXFzLT5yc3BxLnN0YXJ2ZWQrKzsKLQkJCQlpZiAocXMtPnJzcHEuY3JlZGl0cykgewotCQkJCQlyZWZpbGxfcnNwcShhZGFwLCAmcXMtPnJzcHEsIDEpOwotCQkJCQlxcy0+cnNwcS5jcmVkaXRzLS07Ci0JCQkJCXFzLT5yc3BxLnJlc3RhcnRlZCsrOwotCQkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUywKLQkJCQkJCSAgICAgMSA8PCBxcy0+cnNwcS5jbnR4dF9pZCk7Ci0JCQkJfQorCWlmIChuYXBpX2lzX3NjaGVkdWxlZCgmcXMtPm5hcGkpKQorCQlnb3RvIHVubG9jazsKKworCWlmIChhZGFwLT5wYXJhbXMucmV2IDwgNCkgeworCQlzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTKTsKKworCQlpZiAoc3RhdHVzICYgKDEgPDwgcXMtPnJzcHEuY250eHRfaWQpKSB7CisJCQlxcy0+cnNwcS5zdGFydmVkKys7CisJCQlpZiAocXMtPnJzcHEuY3JlZGl0cykgeworCQkJCXFzLT5yc3BxLmNyZWRpdHMtLTsKKwkJCQlyZWZpbGxfcnNwcShhZGFwLCAmcXMtPnJzcHEsIDEpOworCQkJCXFzLT5yc3BxLnJlc3RhcnRlZCsrOworCQkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTLAorCQkJCQkgICAgIDEgPDwgcXMtPnJzcHEuY250eHRfaWQpOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycShsb2NrKTsKIAl9Ci0JbW9kX3RpbWVyKCZxcy0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKKworCWlmIChxcy0+ZmxbMF0uY3JlZGl0cyA8IHFzLT5mbFswXS5zaXplKQorCQlfX3JlZmlsbF9mbChhZGFwLCAmcXMtPmZsWzBdKTsKKwlpZiAocXMtPmZsWzFdLmNyZWRpdHMgPCBxcy0+ZmxbMV0uc2l6ZSkKKwkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFsxXSk7CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnEobG9jayk7CitvdXQ6CisJbW9kX3RpbWVyKCZxcy0+cnhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFJYX1JFQ0xBSU1fUEVSSU9EKTsKIH0KIAogLyoqCkBAIC0yOTA2LDEwICsyOTU5LDEwIEBACiB7CiAJaW50IGksIGF2YWlsLCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBzZ2VfcXNldCAqcSA9ICZhZGFwdGVyLT5zZ2UucXNbaWRdOwotCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciA9ICZxLT5scm9fbWdyOwogCiAJaW5pdF9xc2V0X2NudHh0KHEsIGlkKTsKLQlzZXR1cF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgc2dlX3RpbWVyX2NiLCAodW5zaWduZWQgbG9uZylxKTsKKwlzZXR1cF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgc2dlX3RpbWVyX3R4LCAodW5zaWduZWQgbG9uZylxKTsKKwlzZXR1cF90aW1lcigmcS0+cnhfcmVjbGFpbV90aW1lciwgc2dlX3RpbWVyX3J4LCAodW5zaWduZWQgbG9uZylxKTsKIAogCXEtPmZsWzBdLmRlc2MgPSBhbGxvY19yaW5nKGFkYXB0ZXItPnBkZXYsIHAtPmZsX3NpemUsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSwKQEAgLTI5ODUsMjUgKzMwMzgsMjMgQEAKIAlxLT5mbFsxXS51c2VfcGFnZXMgPSBGTDFfUEdfQ0hVTktfU0laRSA+IDA7CiAJcS0+ZmxbMF0ub3JkZXIgPSBGTDBfUEdfT1JERVI7CiAJcS0+ZmxbMV0ub3JkZXIgPSBGTDFfUEdfT1JERVI7CisJcS0+ZmxbMF0uYWxsb2Nfc2l6ZSA9IEZMMF9QR19BTExPQ19TSVpFOworCXEtPmZsWzFdLmFsbG9jX3NpemUgPSBGTDFfUEdfQUxMT0NfU0laRTsKIAotCXEtPmxyb19mcmFnX3RibCA9IGtjYWxsb2MoTUFYX0ZSQU1FX1NJWkUgLyBGTDFfUEdfQ0hVTktfU0laRSArIDEsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT5zZ2UucmVnX2xvY2spOwogCiAJLyogRkwgdGhyZXNob2xkIGNvbXBhcmlzb24gdXNlcyA8ICovCiAJcmV0ID0gdDNfc2dlX2luaXRfcnNwY250eHQoYWRhcHRlciwgcS0+cnNwcS5jbnR4dF9pZCwgaXJxX3ZlY19pZHgsCiAJCQkJICAgcS0+cnNwcS5waHlzX2FkZHIsIHEtPnJzcHEuc2l6ZSwKLQkJCQkgICBxLT5mbFswXS5idWZfc2l6ZSwgMSwgMCk7CisJCQkJICAgcS0+ZmxbMF0uYnVmX3NpemUgLSBTR0VfUEdfUlNWRCwgMSwgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJZm9yIChpID0gMDsgaSA8IFNHRV9SWFFfUEVSX1NFVDsgKytpKSB7CiAJCXJldCA9IHQzX3NnZV9pbml0X2ZsY250eHQoYWRhcHRlciwgcS0+ZmxbaV0uY250eHRfaWQsIDAsCiAJCQkJCSAgcS0+ZmxbaV0ucGh5c19hZGRyLCBxLT5mbFtpXS5zaXplLAotCQkJCQkgIHEtPmZsW2ldLmJ1Zl9zaXplLCBwLT5jb25nX3RocmVzLCAxLAotCQkJCQkgIDApOworCQkJCQkgIHEtPmZsW2ldLmJ1Zl9zaXplIC0gU0dFX1BHX1JTVkQsCisJCQkJCSAgcC0+Y29uZ190aHJlcywgMSwgMCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl91bmxvY2s7CiAJfQpAQCAtMzA0MSw4ICszMDkyLDYgQEAKIAlxLT50eF9xID0gbmV0ZGV2cTsKIAl0M191cGRhdGVfcXNldF9jb2FsZXNjZShxLCBwKTsKIAotCWluaXRfbHJvX21ncihxLCBscm9fbWdyKTsKLQogCWF2YWlsID0gcmVmaWxsX2ZsKGFkYXB0ZXIsICZxLT5mbFswXSwgcS0+ZmxbMF0uc2l6ZSwKIAkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVApOwogCWlmICghYXZhaWwpIHsKQEAgLTMwNjMsNyArMzExMiw2IEBACiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfR1RTLCBWX1JTUFEocS0+cnNwcS5jbnR4dF9pZCkgfAogCQkgICAgIFZfTkVXVElNRVIocS0+cnNwcS5ob2xkb2ZmX3RtcikpOwogCi0JbW9kX3RpbWVyKCZxLT50eF9yZWNsYWltX3RpbWVyLCBqaWZmaWVzICsgVFhfUkVDTEFJTV9QRVJJT0QpOwogCXJldHVybiAwOwogCiBlcnJfdW5sb2NrOgpAQCAtMzA3NCw2ICszMTIyLDI3IEBACiB9CiAKIC8qKgorICogICAgICB0M19zdGFydF9zZ2VfdGltZXJzIC0gc3RhcnQgU0dFIHRpbWVyIGNhbGwgYmFja3MKKyAqICAgICAgQGFkYXA6IHRoZSBhZGFwdGVyCisgKgorICogICAgICBTdGFydHMgZWFjaCBTR0UgcXVldWUgc2V0J3MgdGltZXIgY2FsbCBiYWNrCisgKi8KK3ZvaWQgdDNfc3RhcnRfc2dlX3RpbWVycyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTR0VfUVNFVFM7ICsraSkgeworCQlzdHJ1Y3Qgc2dlX3FzZXQgKnEgPSAmYWRhcC0+c2dlLnFzW2ldOworCisJaWYgKHEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCisJCW1vZF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKKworCWlmIChxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQltb2RfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CisJfQorfQorCisvKioKICAqCXQzX3N0b3Bfc2dlX3RpbWVycyAtIHN0b3AgU0dFIHRpbWVyIGNhbGwgYmFja3MKICAqCUBhZGFwOiB0aGUgYWRhcHRlcgogICoKQEAgLTMwODgsNiArMzE1Nyw4IEBACiAKIAkJaWYgKHEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCiAJCQlkZWxfdGltZXJfc3luYygmcS0+dHhfcmVjbGFpbV90aW1lcik7CisJCWlmIChxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQkJZGVsX3RpbWVyX3N5bmMoJnEtPnJ4X3JlY2xhaW1fdGltZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggYWMyYTk3NC4uMzFlZDMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC00OTMsMjAgKzQ5MywyMCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkYXB0ZXJfaW5mbyB0M19hZGFwX2luZm9bXSA9IHsKLQl7MiwgMCwKKwl7MSwgMSwgMCwKIAkgRl9HUElPMl9PRU4gfCBGX0dQSU80X09FTiB8CiAJIEZfR1BJTzJfT1VUX1ZBTCB8IEZfR1BJTzRfT1VUX1ZBTCwgeyBTX0dQSU8zLCBTX0dQSU81IH0sIDAsCiAJICZtaTFfbWRpb19vcHMsICJDaGVsc2lvIFBFOTAwMCJ9LAotCXsyLCAwLAorCXsxLCAxLCAwLAogCSBGX0dQSU8yX09FTiB8IEZfR1BJTzRfT0VOIHwKIAkgRl9HUElPMl9PVVRfVkFMIHwgRl9HUElPNF9PVVRfVkFMLCB7IFNfR1BJTzMsIFNfR1BJTzUgfSwgMCwKIAkgJm1pMV9tZGlvX29wcywgIkNoZWxzaW8gVDMwMiJ9LAotCXsxLCAwLAorCXsxLCAwLCAwLAogCSBGX0dQSU8xX09FTiB8IEZfR1BJTzZfT0VOIHwgRl9HUElPN19PRU4gfCBGX0dQSU8xMF9PRU4gfAogCSBGX0dQSU8xMV9PRU4gfCBGX0dQSU8xX09VVF9WQUwgfCBGX0dQSU82X09VVF9WQUwgfCBGX0dQSU8xMF9PVVRfVkFMLAogCSB7IDAgfSwgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9BVUksCiAJICZtaTFfbWRpb19leHRfb3BzLCAiQ2hlbHNpbyBUMzEwIn0sCi0JezIsIDAsCisJezEsIDEsIDAsCiAJIEZfR1BJTzFfT0VOIHwgRl9HUElPMl9PRU4gfCBGX0dQSU80X09FTiB8IEZfR1BJTzVfT0VOIHwgRl9HUElPNl9PRU4gfAogCSBGX0dQSU83X09FTiB8IEZfR1BJTzEwX09FTiB8IEZfR1BJTzExX09FTiB8IEZfR1BJTzFfT1VUX1ZBTCB8CiAJIEZfR1BJTzVfT1VUX1ZBTCB8IEZfR1BJTzZfT1VUX1ZBTCB8IEZfR1BJTzEwX09VVF9WQUwsCkBAIC01MTQsNyArNTE0LDcgQEAKIAkgJm1pMV9tZGlvX2V4dF9vcHMsICJDaGVsc2lvIFQzMjAifSwKIAl7fSwKIAl7fSwKLQl7MSwgMCwKKwl7MSwgMCwgMCwKIAkgRl9HUElPMV9PRU4gfCBGX0dQSU8yX09FTiB8IEZfR1BJTzRfT0VOIHwgRl9HUElPNl9PRU4gfCBGX0dQSU83X09FTiB8CiAJIEZfR1BJTzEwX09FTiB8IEZfR1BJTzFfT1VUX1ZBTCB8IEZfR1BJTzZfT1VUX1ZBTCB8IEZfR1BJTzEwX09VVF9WQUwsCiAJIHsgU19HUElPOSB9LCBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0FVSSwKQEAgLTExNTMsNiArMTE1MywzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHQzX2dhdGVfcnhfdHJhZmZpYyhzdHJ1Y3QgY21hYyAqbWFjLCB1MzIgKnJ4X2NmZywKKwkJCSAgICAgICB1MzIgKnJ4X2hhc2hfaGlnaCwgdTMyICpyeF9oYXNoX2xvdykKK3sKKwkvKiBzdG9wIFJ4IHVuaWNhc3QgdHJhZmZpYyAqLworCXQzX21hY19kaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKworCS8qIHN0b3AgYnJvYWRjYXN0LCBtdWx0aWNhc3QsIHByb21pc2N1b3VzIG1vZGUgdHJhZmZpYyAqLworCSpyeF9jZmcgPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRyk7CisJdDNfc2V0X3JlZ19maWVsZChtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRywKKwkJCSBGX0VOSEFTSE1DQVNUIHwgRl9ESVNCQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywKKwkJCSBGX0RJU0JDQVNUKTsKKworCSpyeF9oYXNoX2hpZ2ggPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCk7CisJdDNfd3JpdGVfcmVnKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfSEFTSF9ISUdILCAwKTsKKworCSpyeF9oYXNoX2xvdyA9IHQzX3JlYWRfcmVnKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfSEFTSF9MT1cpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XLCAwKTsKKworCS8qIExlYXZlIHRpbWUgdG8gZHJhaW4gbWF4IFJYIGZpZm8gKi8KKwltc2xlZXAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHQzX29wZW5fcnhfdHJhZmZpYyhzdHJ1Y3QgY21hYyAqbWFjLCB1MzIgcnhfY2ZnLAorCQkJICAgICAgIHUzMiByeF9oYXNoX2hpZ2gsIHUzMiByeF9oYXNoX2xvdykKK3sKKwl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwl0M19zZXRfcmVnX2ZpZWxkKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfQ0ZHLAorCQkJIEZfRU5IQVNITUNBU1QgfCBGX0RJU0JDQVNUIHwgRl9DT1BZQUxMRlJBTUVTLAorCQkJIHJ4X2NmZyk7CisJdDNfd3JpdGVfcmVnKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfSEFTSF9ISUdILCByeF9oYXNoX2hpZ2gpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XLCByeF9oYXNoX2xvdyk7Cit9CiAKIC8qKgogICoJdDNfbGlua19jaGFuZ2VkIC0gaGFuZGxlIGludGVyZmFjZSBsaW5rIGNoYW5nZXMKQEAgLTExNzAsOSArMTIwMiwzMiBAQAogCXN0cnVjdCBjcGh5ICpwaHkgPSAmcGktPnBoeTsKIAlzdHJ1Y3QgY21hYyAqbWFjID0gJnBpLT5tYWM7CiAJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwaS0+bGlua19jb25maWc7CisJaW50IGZvcmNlX2xpbmtfZG93biA9IDA7CiAKIAlwaHktPm9wcy0+Z2V0X2xpbmtfc3RhdHVzKHBoeSwgJmxpbmtfb2ssICZzcGVlZCwgJmR1cGxleCwgJmZjKTsKIAorCWlmICghbGMtPmxpbmtfb2sgJiYgbGlua19vaykgeworCQl1MzIgcnhfY2ZnLCByeF9oYXNoX2hpZ2gsIHJ4X2hhc2hfbG93OworCQl1MzIgc3RhdHVzOworCisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBwb3J0X2lkKTsKKwkJdDNfZ2F0ZV9yeF90cmFmZmljKG1hYywgJnJ4X2NmZywgJnJ4X2hhc2hfaGlnaCwgJnJ4X2hhc2hfbG93KTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1JYX0NUUkwgKyBtYWMtPm9mZnNldCwgMCk7CisJCXQzX21hY19lbmFibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKKworCQlzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgbWFjLT5vZmZzZXQpOworCQlpZiAoc3RhdHVzICYgRl9MSU5LRkFVTFRDSEFOR0UpIHsKKwkJCW1hYy0+c3RhdHMubGlua19mYXVsdHMrKzsKKwkJCWZvcmNlX2xpbmtfZG93biA9IDE7CisJCX0KKwkJdDNfb3Blbl9yeF90cmFmZmljKG1hYywgcnhfY2ZnLCByeF9oYXNoX2hpZ2gsIHJ4X2hhc2hfbG93KTsKKworCQlpZiAoZm9yY2VfbGlua19kb3duKSB7CisJCQl0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoYWRhcHRlciwgcG9ydF9pZCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlpZiAobGMtPnJlcXVlc3RlZF9mYyAmIFBBVVNFX0FVVE9ORUcpCiAJCWZjICY9IGxjLT5yZXF1ZXN0ZWRfZmM7CiAJZWxzZQpAQCAtMTIwMiw2ICsxMjU3LDU3IEBACiAJdDNfb3NfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIHBvcnRfaWQsIGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjKTsKIH0KIAordm9pZCB0M19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcG9ydF9pZCk7CisJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOworCXN0cnVjdCBjcGh5ICpwaHkgPSAmcGktPnBoeTsKKwlzdHJ1Y3QgbGlua19jb25maWcgKmxjID0gJnBpLT5saW5rX2NvbmZpZzsKKwlpbnQgbGlua19vaywgc3BlZWQsIGR1cGxleCwgZmMsIGxpbmtfZmF1bHQ7CisJdTMyIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdzsKKworCXQzX2dhdGVfcnhfdHJhZmZpYyhtYWMsICZyeF9jZmcsICZyeF9oYXNoX2hpZ2gsICZyeF9oYXNoX2xvdyk7CisKKwlpZiAoYWRhcHRlci0+cGFyYW1zLnJldiA+IDAgJiYgdXNlc194YXVpKGFkYXB0ZXIpKQorCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fWEFVSV9BQ1RfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOworCXQzX21hY19lbmFibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKKworCXQzX29wZW5fcnhfdHJhZmZpYyhtYWMsIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdyk7CisKKwlsaW5rX2ZhdWx0ID0gdDNfcmVhZF9yZWcoYWRhcHRlciwKKwkJCQkgQV9YR01fSU5UX1NUQVRVUyArIG1hYy0+b2Zmc2V0KTsKKwlsaW5rX2ZhdWx0ICY9IEZfTElOS0ZBVUxUQ0hBTkdFOworCisJcGh5LT5vcHMtPmdldF9saW5rX3N0YXR1cyhwaHksICZsaW5rX29rLCAmc3BlZWQsICZkdXBsZXgsICZmYyk7CisKKwlpZiAobGlua19mYXVsdCkgeworCQlsYy0+bGlua19vayA9IDA7CisJCWxjLT5zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisJCWxjLT5kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKKworCQl0M19vc19saW5rX2ZhdWx0KGFkYXB0ZXIsIHBvcnRfaWQsIDApOworCisJCS8qIEFjY291bnQgbGluayBmYXVsdHMgb25seSB3aGVuIHRoZSBwaHkgcmVwb3J0cyBhIGxpbmsgdXAgKi8KKwkJaWYgKGxpbmtfb2spCisJCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisKKwkJbXNsZWVwKDEwMDApOworCQl0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoYWRhcHRlciwgcG9ydF9pZCk7CisJfSBlbHNlIHsKKwkJaWYgKGxpbmtfb2spCisJCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fWEFVSV9BQ1RfQ1RSTCArIG1hYy0+b2Zmc2V0LAorCQkJCSAgICAgRl9UWEFDVEVOQUJMRSB8IEZfUlhFTik7CisKKwkJcGktPmxpbmtfZmF1bHQgPSAwOworCQlsYy0+bGlua19vayA9ICh1bnNpZ25lZCBjaGFyKWxpbmtfb2s7CisJCWxjLT5zcGVlZCA9IHNwZWVkIDwgMCA/IFNQRUVEX0lOVkFMSUQgOiBzcGVlZDsKKwkJbGMtPmR1cGxleCA9IGR1cGxleCA8IDAgPyBEVVBMRVhfSU5WQUxJRCA6IGR1cGxleDsKKwkJdDNfb3NfbGlua19mYXVsdChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rKTsKKwl9Cit9CisKIC8qKgogICoJdDNfbGlua19zdGFydCAtIGFwcGx5IGxpbmsgY29uZmlndXJhdGlvbiB0byBNQUMvUEhZCiAgKglAcGh5OiB0aGUgUEhZIHRvIHNldHVwCkBAIC0xMzIzLDcgKzE0MjksNyBAQAogI2RlZmluZSBNQzdfSU5UUl9NQVNLIChGX0FFIHwgRl9VRSB8IEZfQ0UgfCBWX1BFKE1fUEUpKQogI2RlZmluZSBYR01fSU5UUl9NQVNLIChWX1RYRklGT19QUlRZX0VSUihNX1RYRklGT19QUlRZX0VSUikgfCBcCiAJCSAgICAgICBWX1JYRklGT19QUlRZX0VSUihNX1JYRklGT19QUlRZX0VSUikgfCBcCi0JCSAgICAgICBGX1RYRklGT19VTkRFUlJVTiB8IEZfUlhGSUZPX09WRVJGTE9XKQorCQkgICAgICAgRl9UWEZJRk9fVU5ERVJSVU4pCiAjZGVmaW5lIFBDSVhfSU5UUl9NQVNLIChGX01TVERFVFBBUkVSUiB8IEZfU0lHVEFSQUJUIHwgRl9SQ1ZUQVJBQlQgfCBcCiAJCQlGX1JDVk1TVEFCVCB8IEZfU0lHU1lTRVJSIHwgRl9ERVRQQVJFUlIgfCBcCiAJCQlGX1NQTENNUERJUyB8IEZfVU5YU1BMQ01QIHwgRl9SQ1ZTUExDTVBFUlIgfCBcCkBAIC0xMzYwLDExICsxNDY2LDExIEBACiAJCSAgICAgICBWX1RYMVRQUEFSRVJSRU5CKE1fVFgxVFBQQVJFUlJFTkIpIHwgXAogCQkgICAgICAgVl9SWFRQUEFSRVJSRU5CKE1fUlhUUFBBUkVSUkVOQikgfCBcCiAJCSAgICAgICBWX01DQVBBUkVSUkVOQihNX01DQVBBUkVSUkVOQikpCisjZGVmaW5lIFhHTV9FWFRSQV9JTlRSX01BU0sgKEZfTElOS0ZBVUxUQ0hBTkdFKQogI2RlZmluZSBQTF9JTlRSX01BU0sgKEZfVDNEQkcgfCBGX1hHTUFDMF8wIHwgRl9YR01BQzBfMSB8IEZfTUM1QSB8IEZfUE0xX1RYIHwgXAogCQkgICAgICBGX1BNMV9SWCB8IEZfVUxQMl9UWCB8IEZfVUxQMl9SWCB8IEZfVFAxIHwgRl9DSU0gfCBcCiAJCSAgICAgIEZfTUM3X0NNIHwgRl9NQzdfUE1UWCB8IEZfTUM3X1BNUlggfCBGX1NHRTMgfCBGX1BDSU0wIHwgXAogCQkgICAgICBGX01QUzAgfCBGX0NQTF9TV0lUQ0gpCi0KIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIFBDSVgxIG1vZHVsZS4KICAqLwpAQCAtMTY5NSw3ICsxODAxLDE0IEBACiBzdGF0aWMgaW50IG1hY19pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBpZHgpCiB7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZhZGFwMnBpbmZvKGFkYXAsIGlkeCktPm1hYzsKLQl1MzIgY2F1c2UgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9JTlRfQ0FVU0UgKyBtYWMtPm9mZnNldCk7CisJLyoKKwkgKiBXZSBtYXNrIG91dCBpbnRlcnJ1cHQgY2F1c2VzIGZvciB3aGljaCB3ZSdyZSBub3QgdGFraW5nIGludGVycnVwdHMuCisJICogVGhpcyBhbGxvd3MgdXMgdG8gdXNlIHBvbGxpbmcgbG9naWMgdG8gbW9uaXRvciBzb21lIG9mIHRoZSBvdGhlcgorCSAqIGNvbmRpdGlvbnMgd2hlbiB0YWtpbmcgaW50ZXJydXB0cyB3b3VsZCBpbXBvc2UgdG9vIG11Y2ggbG9hZCBvbiB0aGUKKwkgKiBzeXN0ZW0uCisJICovCisJdTMyIGNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpICYKKwkJICAgIH5GX1JYRklGT19PVkVSRkxPVzsKIAogCWlmIChjYXVzZSAmIFZfVFhGSUZPX1BSVFlfRVJSKE1fVFhGSUZPX1BSVFlfRVJSKSkgewogCQltYWMtPnN0YXRzLnR4X2ZpZm9fcGFyaXR5X2VycisrOwpAQCAtMTcxNSwxMCArMTgyOCwyMCBAQAogCQltYWMtPnN0YXRzLnhhdWlfcGNzX2N0Y19lcnIrKzsKIAlpZiAoY2F1c2UgJiBGX1hBVUlQQ1NBTElHTkNIQU5HRSkKIAkJbWFjLT5zdGF0cy54YXVpX3Bjc19hbGlnbl9jaGFuZ2UrKzsKKwlpZiAoY2F1c2UgJiBGX1hHTV9JTlQpIHsKKwkJdDNfc2V0X3JlZ19maWVsZChhZGFwLAorCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgbWFjLT5vZmZzZXQsCisJCQkJIEZfWEdNX0lOVCwgMCk7CisJCW1hYy0+c3RhdHMubGlua19mYXVsdHMrKzsKKworCQl0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoYWRhcCwgaWR4KTsKKwl9CiAKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQsIGNhdXNlKTsKKwogCWlmIChjYXVzZSAmIFhHTV9JTlRSX0ZBVEFMKQogCQl0M19mYXRhbF9lcnIoYWRhcCk7CisKIAlyZXR1cm4gY2F1c2UgIT0gMDsKIH0KIApAQCAtMTkyNCw2ICsyMDQ3LDIyIEBACiAJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9QTF9JTlRfQ0FVU0UwKTsJLyogZmx1c2ggKi8KIH0KIAordm9pZCB0M194Z21faW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGlkeCk7CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJICAgICBYR01fRVhUUkFfSU5UUl9NQVNLKTsKK30KKwordm9pZCB0M194Z21faW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpZHgpOworCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hHTV9JTlRfRElTQUJMRSArIHBpLT5tYWMub2Zmc2V0LAorCQkgICAgIDB4N2ZmKTsKK30KKwogLyoqCiAgKgl0M19wb3J0X2ludHJfZW5hYmxlIC0gZW5hYmxlIHBvcnQtc3BlY2lmaWMgaW50ZXJydXB0cwogICoJQGFkYXB0ZXI6IGFzc29jaWF0ZWQgYWRhcHRlcgpAQCAtMTk4OSwxNiArMjEyOCw0MCBAQAogc3RhdGljIGludCB0M19zZ2Vfd3JpdGVfY29udGV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGlkLAogCQkJCXVuc2lnbmVkIGludCB0eXBlKQogewotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzAsIDB4ZmZmZmZmZmYpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzEsIDB4ZmZmZmZmZmYpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4ZmZmZmZmZmYpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzMsIDB4ZmZmZmZmZmYpOworCWlmICh0eXBlID09IEZfUkVTUE9OU0VRKSB7CisJCS8qCisJCSAqIENhbid0IHdyaXRlIHRoZSBSZXNwb25zZSBRdWV1ZSBDb250ZXh0IGJpdHMgZm9yCisJCSAqIEludGVycnVwdCBBcm1lZCBvciB0aGUgUmVzZXJ2ZSBiaXRzIGFmdGVyIHRoZSBjaGlwCisJCSAqIGhhcyBiZWVuIGluaXRpYWxpemVkIG91dCBvZiByZXNldC4gIFdyaXRpbmcgdG8gdGhlc2UKKwkJICogYml0cyBjYW4gY29uZnVzZSB0aGUgaGFyZHdhcmUuCisJCSAqLworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0swLCAweGZmZmZmZmZmKTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMSwgMHhmZmZmZmZmZik7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4MTdmZmZmZmYpOworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0szLCAweGZmZmZmZmZmKTsKKwl9IGVsc2UgeworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0swLCAweGZmZmZmZmZmKTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMSwgMHhmZmZmZmZmZik7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4ZmZmZmZmZmYpOworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0szLCAweGZmZmZmZmZmKTsKKwl9CiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9DTUQsCiAJCSAgICAgVl9DT05URVhUX0NNRF9PUENPREUoMSkgfCB0eXBlIHwgVl9DT05URVhUKGlkKSk7CiAJcmV0dXJuIHQzX3dhaXRfb3BfZG9uZShhZGFwdGVyLCBBX1NHX0NPTlRFWFRfQ01ELCBGX0NPTlRFWFRfQ01EX0JVU1ksCiAJCQkgICAgICAgMCwgU0dfQ09OVEVYVF9DTURfQVRURU1QVFMsIDEpOwogfQogCisvKioKKyAqCWNsZWFyX3NnZV9jdHh0IC0gY29tcGxldGVseSBjbGVhciBhbiBTR0UgY29udGV4dAorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAaWQ6IHRoZSBjb250ZXh0IGlkCisgKglAdHlwZTogdGhlIGNvbnRleHQgdHlwZQorICoKKyAqCUNvbXBsZXRlbHkgY2xlYXIgYW4gU0dFIGNvbnRleHQuICBVc2VkIHByZWRvbWluYW50bHkgYXQgcG9zdC1yZXNldAorICoJaW5pdGlhbGl6YXRpb24uICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCB3ZSBkb24ndCBza2lwIHdyaXRpbmcgdG8gYW55CisgKgkic2Vuc2l0aXZlIGJpdHMiIGluIHRoZSBjb250ZXh0cyB0aGUgd2F5IHRoYXQgdDNfc2dlX3dyaXRlX2NvbnRleHQoKQorICoJZG9lcyAuLi4KKyAqLwogc3RhdGljIGludCBjbGVhcl9zZ2VfY3R4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IGlkLAogCQkJICB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKQEAgLTIwMDYsNyArMjE2OSwxNCBAQAogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfREFUQTEsIDApOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfREFUQTIsIDApOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfREFUQTMsIDApOwotCXJldHVybiB0M19zZ2Vfd3JpdGVfY29udGV4dChhZGFwLCBpZCwgdHlwZSk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMCwgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMSwgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMiwgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMywgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9DTUQsCisJCSAgICAgVl9DT05URVhUX0NNRF9PUENPREUoMSkgfCB0eXBlIHwgVl9DT05URVhUKGlkKSk7CisJcmV0dXJuIHQzX3dhaXRfb3BfZG9uZShhZGFwLCBBX1NHX0NPTlRFWFRfQ01ELCBGX0NPTlRFWFRfQ01EX0JVU1ksCisJCQkgICAgICAgMCwgU0dfQ09OVEVYVF9DTURfQVRURU1QVFMsIDEpOwogfQogCiAvKioKQEAgLTI1OTAsMTAgKzI3NjAsMTAgQEAKIAkJICAgICBGX1RDUENIRUNLU1VNT0ZGTE9BRCB8IFZfSVBUVEwoNjQpKTsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9UQ1BfT1BUSU9OUywgVl9NVFVERUZBVUxUKDU3NikgfAogCQkgICAgIEZfTVRVRU5BQkxFIHwgVl9XSU5ET1dTQ0FMRU1PREUoMSkgfAotCQkgICAgIFZfVElNRVNUQU1QU01PREUoMCkgfCBWX1NBQ0tNT0RFKDEpIHwgVl9TQUNLUlgoMSkpOworCQkgICAgIFZfVElNRVNUQU1QU01PREUoMSkgfCBWX1NBQ0tNT0RFKDEpIHwgVl9TQUNLUlgoMSkpOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX0RBQ0tfQ09ORklHLCBWX0FVVE9TVEFURTMoMSkgfAogCQkgICAgIFZfQVVUT1NUQVRFMigxKSB8IFZfQVVUT1NUQVRFMSgwKSB8Ci0JCSAgICAgVl9CWVRFVEhSRVNIT0xEKDE2Mzg0KSB8IFZfTVNTVEhSRVNIT0xEKDIpIHwKKwkJICAgICBWX0JZVEVUSFJFU0hPTEQoMjY4ODApIHwgVl9NU1NUSFJFU0hPTEQoMikgfAogCQkgICAgIEZfQVVUT0NBUkVGVUwgfCBGX0FVVE9FTkFCTEUgfCBWX0RBQ0tfTU9ERSgxKSk7CiAJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1RQX0lOX0NPTkZJRywgRl9SWEZCQVJCUFJJTyB8IEZfVFhGQkFSQlBSSU8sCiAJCQkgRl9JUFY2RU5BQkxFIHwgRl9OSUNNT0RFKTsKQEAgLTMwNTcsMjAgKzMyMjcsMjIgQEAKIH0KIAogLyoKLSAqIFBlcmZvcm0gdGhlIGJpdHMgb2YgSFcgaW5pdGlhbGl6YXRpb24gdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBudW1iZXIKLSAqIG9mIGF2YWlsYWJsZSBwb3J0cy4KKyAqIFBlcmZvcm0gdGhlIGJpdHMgb2YgSFcgaW5pdGlhbGl6YXRpb24gdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBUeAorICogY2hhbm5lbHMgYmVpbmcgdXNlZC4KICAqLwotc3RhdGljIHZvaWQgaW5pdF9od19mb3JfYXZhaWxfcG9ydHMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBucG9ydHMpCitzdGF0aWMgdm9pZCBjaGFuX2luaXRfaHcoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBjaGFuX21hcCkKIHsKIAlpbnQgaTsKIAotCWlmIChucG9ydHMgPT0gMSkgeworCWlmIChjaGFuX21hcCAhPSAzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25lIGNoYW5uZWwgKi8KIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1VMUFJYX0NUTCwgRl9ST1VORF9ST0JJTiwgMCk7CiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9VTFBUWF9DT05GSUcsIEZfQ0ZHX1JSX0FSQiwgMCk7Ci0JCXQzX3dyaXRlX3JlZyhhZGFwLCBBX01QU19DRkcsIEZfVFBSWFBPUlRFTiB8IEZfVFBUWFBPUlQwRU4gfAotCQkJICAgICBGX1BPUlQwQUNUSVZFIHwgRl9FTkZPUkNFUEtUKTsKLQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfUE0xX1RYX0NGRywgMHhmZmZmZmZmZik7Ci0JfSBlbHNlIHsKKwkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfTVBTX0NGRywgRl9UUFJYUE9SVEVOIHwgRl9FTkZPUkNFUEtUIHwKKwkJCSAgICAgKGNoYW5fbWFwID09IDEgPyBGX1RQVFhQT1JUMEVOIHwgRl9QT1JUMEFDVElWRSA6CisJCQkJCSAgICAgIEZfVFBUWFBPUlQxRU4gfCBGX1BPUlQxQUNUSVZFKSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1BNMV9UWF9DRkcsCisJCQkgICAgIGNoYW5fbWFwID09IDEgPyAweGZmZmZmZmZmIDogMCk7CisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0d28gY2hhbm5lbHMgKi8KIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1VMUFJYX0NUTCwgMCwgRl9ST1VORF9ST0JJTik7CiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9VTFBUWF9DT05GSUcsIDAsIEZfQ0ZHX1JSX0FSQik7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1VMUFRYX0RNQV9XRUlHSFQsCkBAIC0zMzc4LDcgKzM1NTAsNyBAQAogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1BNMV9SWF9DRkcsIDB4ZmZmZmZmZmYpOwogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1BNMV9SWF9NT0RFLCAwKTsKIAl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9QTTFfVFhfTU9ERSwgMCk7Ci0JaW5pdF9od19mb3JfYXZhaWxfcG9ydHMoYWRhcHRlciwgYWRhcHRlci0+cGFyYW1zLm5wb3J0cyk7CisJY2hhbl9pbml0X2h3KGFkYXB0ZXIsIGFkYXB0ZXItPnBhcmFtcy5jaGFuX21hcCk7CiAJdDNfc2dlX2luaXQoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy5zZ2UpOwogCiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfVDNEQkdfR1BJT19BQ1RfTE9XLCBjYWxjX2dwaW9faW50cihhZGFwdGVyKSk7CkBAIC0zNjE1LDkgKzM3ODcsMTggQEAKIAlnZXRfcGNpX21vZGUoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy5wY2kpOwogCiAJYWRhcHRlci0+cGFyYW1zLmluZm8gPSBhaTsKLQlhZGFwdGVyLT5wYXJhbXMubnBvcnRzID0gYWktPm5wb3J0czsKKwlhZGFwdGVyLT5wYXJhbXMubnBvcnRzID0gYWktPm5wb3J0czAgKyBhaS0+bnBvcnRzMTsKKwlhZGFwdGVyLT5wYXJhbXMuY2hhbl9tYXAgPSAhIWFpLT5ucG9ydHMwIHwgKCEhYWktPm5wb3J0czEgPDwgMSk7CiAJYWRhcHRlci0+cGFyYW1zLnJldiA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfUkVWKTsKLQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMDsKKwkvKgorCSAqIFdlIHVzZWQgdG8gb25seSBydW4gdGhlICJhZGFwdGVyIGNoZWNrIHRhc2siIG9uY2UgYSBzZWNvbmQgaWYKKwkgKiB3ZSBoYWQgUEhZcyB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHRzICh3ZSB3b3VsZCBjaGVjaworCSAqIHRoZWlyIGxpbmsgc3RhdHVzIG9uY2UgYSBzZWNvbmQpLiAgTm93IHdlIGNoZWNrIG90aGVyIGNvbmRpdGlvbnMKKwkgKiBpbiB0aGF0IHJvdXRpbmUgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW1wb3NlIGEgdmVyeSBoaWdoCisJICogaW50ZXJydXB0IGxvYWQgb24gdGhlIHN5c3RlbS4gIEFzIHN1Y2gsIHdlIG5vdyBhbHdheXMgc2NhbiB0aGUKKwkgKiBhZGFwdGVyIHN0YXRlIG9uY2UgYSBzZWNvbmQgLi4uCisJICovCisJYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDEwOwogCWFkYXB0ZXItPnBhcmFtcy5zdGF0c191cGRhdGVfcGVyaW9kID0gaXNfMTBHKGFkYXB0ZXIpID8KIAkgICAgTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgOiAoTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgKiAxMCk7CiAJYWRhcHRlci0+cGFyYW1zLnBjaS52cGRfY2FwX2FkZHIgPQpAQCAtMzYzOCw3ICszODE5LDcgQEAKIAkJbWM3X3ByZXAoYWRhcHRlciwgJmFkYXB0ZXItPnBtdHgsIE1DN19QTVRYX0JBU0VfQUREUiwgIlBNVFgiKTsKIAkJbWM3X3ByZXAoYWRhcHRlciwgJmFkYXB0ZXItPmNtLCBNQzdfQ01fQkFTRV9BRERSLCAiQ00iKTsKIAotCQlwLT5uY2hhbiA9IGFpLT5ucG9ydHM7CisJCXAtPm5jaGFuID0gYWRhcHRlci0+cGFyYW1zLmNoYW5fbWFwID09IDMgPyAyIDogMTsKIAkJcC0+cG1yeF9zaXplID0gdDNfbWM3X3NpemUoJmFkYXB0ZXItPnBtcngpOwogCQlwLT5wbXR4X3NpemUgPSB0M19tYzdfc2l6ZSgmYWRhcHRlci0+cG10eCk7CiAJCXAtPmNtX3NpemUgPSB0M19tYzdfc2l6ZSgmYWRhcHRlci0+Y20pOwpAQCAtMzcwNyw3ICszODg4LDE0IEBACiAJCSAgICAgICBFVEhfQUxFTik7CiAJCWluaXRfbGlua19jb25maWcoJnAtPmxpbmtfY29uZmlnLCBwLT5waHkuY2Fwcyk7CiAJCXAtPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnAtPnBoeSwgMSk7Ci0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkpCisKKwkJLyoKKwkJICogSWYgdGhlIFBIWSBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0cyBmb3IgbGluayBzdGF0dXMKKwkJICogY2hhbmdlcywgc2NoZWR1bGUgYSBzY2FuIG9mIHRoZSBhZGFwdGVyIGxpbmtzIGF0IGxlYXN0CisJCSAqIG9uY2UgYSBzZWNvbmQuCisJCSAqLworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmCisJCSAgICBhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID4gMTApCiAJCQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMTA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKaW5kZXggYjFiMjVjMy4uN2JmOTYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjZGVmaW5lIERSVl9ERVNDICJDaGVsc2lvIFQzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYjMiCiAvKiBEcml2ZXIgdmVyc2lvbiAqLwotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjEta28iCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEuMi1rbyIKIAogLyogRmlybXdhcmUgdmVyc2lvbiAqLwogI2RlZmluZSBGV19WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgRldfVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIEZXX1ZFUlNJT05fTUlOT1IgMQogI2RlZmluZSBGV19WRVJTSU9OX01JQ1JPIDAKICNlbmRpZgkJCQkvKiBfX0NIRUxTSU9fVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCA5ZDc3ODY5Li5mODdmOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogc3RhdGljIGludCB0M2IyX21hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwotCXVuc2lnbmVkIGludCBvZnQgPSBtYWMtPm9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQsIHN0b3JlOworCWludCBpZHggPSBtYWNpZHgobWFjKTsKIAl1MzIgdmFsOwogCiAJaWYgKCFtYWNpZHgobWFjKSkKQEAgLTE1OCwxNCArMTU5LDI4IEBACiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9QT1JUMUFDVElWRSwgMCk7CiAKKwkvKiBTdG9wIE5JQyB0cmFmZmljIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFRYVE9HR0xFUyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDApOworCS8qIEVuc3VyZSBUWCBkcmFpbnMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1RYX0NGRyArIG9mdCwgRl9UWFBBVVNFRU4sIDApOworCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX1JFU0VUX0NUUkwgKyBvZnQsIEZfTUFDX1JFU0VUXyk7CiAJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUkVTRVRfQ1RSTCArIG9mdCk7ICAgIC8qIGZsdXNoICovCiAKKwkvKiBTdG9yZSBBX1RQX1RYX0RST1BfQ0ZHX0NIMCAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJc3RvcmUgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisKIAltc2xlZXAoMTApOwogCisJLyogQ2hhbmdlIERST1BfQ0ZHIHRvIDB4YzAwMDAwMTEgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLCAweGMwMDAwMDExKTsKKwogCS8qIENoZWNrIGZvciB4Z20gUnggZmlmbyBlbXB0eSAqLworCS8qIEluY3JlYXNlZCBsb29wIGNvdW50IHRvIDEwMDAgZnJvbSA1IGNvdmVyIDFHIGFuZCAxMDBNYnBzIGNhc2UgKi8KIAlpZiAodDNfd2FpdF9vcF9kb25lKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRV9FUlJfQ05UICsgb2Z0LAotCQkJICAgIDB4ODAwMDAwMDAsIDEsIDUsIDIpKSB7CisJCQkgICAgMHg4MDAwMDAwMCwgMSwgMTAwMCwgMikpIHsKIAkJQ0hfRVJSKGFkYXAsICJNQUMgJWQgUnggZmlmbyBkcmFpbiBmYWlsZWRcbiIsCiAJCSAgICAgICBtYWNpZHgobWFjKSk7CiAJCXJldHVybiAtMTsKQEAgLTE5MSwxMSArMjA2LDIxIEBACiAJCSAgICAgRl9ESVNQQVVTRUZSQU1FUyB8IEZfRU4xNTM2QkZSQU1FUyB8CiAJCSAgICAgRl9STUZDUyB8IEZfRU5KVU1CTyB8IEZfRU5IQVNITUNBU1QpOwogCi0JaWYgKCFtYWNpZHgobWFjKSkKKwkvKiBSZXN0b3JlIHRoZSBEUk9QX0NGRyAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0RBVEEsIHN0b3JlKTsKKworCWlmICghaWR4KQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMEFDVElWRSk7CiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMUFDVElWRSk7CiAKKwkvKiByZS1lbmFibGUgbmljIHRyYWZmaWMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAxKTsKKworCS8qICBTZXQ6IHJlLWVuYWJsZSBOSUMgdHJhZmZpYyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNiw3ICsyNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKQogewogCXVuc2lnbmVkIGludCBpLCByZWcgPSBtYWMtPm9mZnNldCArIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xOwogCkBAIC0yNDcsNyArMjcyLDcgQEAKIAl0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xKTsJLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlZyA9IG1hYy0+b2Zmc2V0ICsgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfSElHSF8xOwogCkBAIC0zMzIsMTggKzM1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwgbXR1KTsKIAotCS8qCi0JICogQWRqdXN0IHRoZSBQQVVTRSBmcmFtZSB3YXRlcm1hcmtzLiAgV2UgYWx3YXlzIHNldCB0aGUgTFdNLCBhbmQgdGhlCi0JICogSFdNIG9ubHkgaWYgZmxvdy1jb250cm9sIGlzIGVuYWJsZWQuCi0JICovCi0JaHdtID0gbWF4X3QodW5zaWduZWQgaW50LCBNQUNfUlhGSUZPX1NJWkUgLSAzICogbXR1LAotCQkgICAgTUFDX1JYRklGT19TSVpFICogMzggLyAxMDApOwotCWh3bSA9IG1pbihod20sIE1BQ19SWEZJRk9fU0laRSAtIDgxOTIpOwotCWx3bSA9IG1pbigzICogKGludCltdHUsIE1BQ19SWEZJRk9fU0laRSAvIDQpOwotCiAJaWYgKGFkYXAtPnBhcmFtcy5yZXYgPj0gVDNfUkVWX0IyICYmCiAJICAgICh0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQpICYgRl9SWEVOKSkgewotCQlkaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhtYWMpOwogCQl2ID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQpOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0LAogCQkJCSBGX0VOSEFTSE1DQVNUIHwgRl9DT1BZQUxMRlJBTUVTLCBGX0RJU0JDQVNUKTsKQEAgLTM1NSwxNCArMzcxLDE0IEBACiAJCWlmICh0M193YWl0X29wX2RvbmUoYWRhcCwgcmVnICsgbWFjLT5vZmZzZXQsCiAJCQkJICAgIEZfUlhGSUZPX0VNUFRZLCAxLCAyMCwgNSkpIHsKIAkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBtYWMtPm9mZnNldCwgdik7Ci0JCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQkJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRSArIG1hYy0+b2Zmc2V0LAogCQkJCSBWX1JYTUFYUEtUU0laRShNX1JYTUFYUEtUU0laRSksCiAJCQkJIFZfUlhNQVhQS1RTSVpFKG10dSkpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQsIHYpOwotCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKIAl9IGVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwKIAkJCQkgVl9SWE1BWFBLVFNJWkUoTV9SWE1BWFBLVFNJWkUpLApAQCAtNDUyLDkgKzQ2OCwxMiBAQAogCiAJaWYgKHdoaWNoICYgTUFDX0RJUkVDVElPTl9UWCkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOwotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwgMHhjMGVkZTQwMSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLAorCQkJICAgICBhZGFwLT5wYXJhbXMucmV2ID09IFQzX1JFVl9DID8KKwkJCSAgICAgMHhjNGZmZmYwMSA6IDB4YzBlZGU0MDEpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX01PREUpOwotCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVFBfUElPX0RBVEEsIDEgPDwgaWR4LCAxIDw8IGlkeCk7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9UUF9QSU9fREFUQSwgMSA8PCBpZHgsCisJCQkJIGFkYXAtPnBhcmFtcy5yZXYgPT0gVDNfUkVWX0MgPyAwIDogMSA8PCBpZHgpOwogCiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgb2Z0LCBGX1RYRU4pOwogCkBAIC01MTAsMTUgKzUyOSwxMiBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwogCXN0cnVjdCBtYWNfc3RhdHMgKnMgPSAmbWFjLT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgdHhfdGNudCwgdHhfeGNudDsKLQl1bnNpZ25lZCBpbnQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfeGNudDsKKwl1NjQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gMDsKIAl0eF94Y250ID0gMTsJCS8qIEJ5IGRlZmF1bHQgdHhfeGNudCBpcyBtYWtpbmcgcHJvZ3Jlc3MgKi8KIAl0eF90Y250ID0gbWFjLT50eF90Y250OwkvKiBJZiB0eF9tY250IGlzIHByb2dyZXNzaW5nIGlnbm9yZSB0eF90Y250ICovCi0JcnhfeGNudCA9IDE7CQkvKiBCeSBkZWZhdWx0IHJ4X3hjbnQgaXMgbWFraW5nIHByb2dyZXNzICovCiAJaWYgKHR4X21jbnQgPT0gbWFjLT50eF9tY250ICYmIG1hYy0+cnhfcGF1c2UgPT0gcy0+cnhfcGF1c2UpIHsKIAkJdHhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAogCQkJCQkJQV9YR01fVFhfU1BJNF9TT1BfRU9QX0NOVCArCkBAIC01MjksMTEgKzU0NSwxMSBAQAogCQkJdHhfdGNudCA9IChHX1RYRFJPUENOVENIMFJDVkQodDNfcmVhZF9yZWcoYWRhcCwKIAkJCQkJCSAgICAgIEFfVFBfUElPX0RBVEEpKSk7CiAJCX0gZWxzZSB7Ci0JCQlnb3RvIHJ4Y2hlY2s7CisJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CiAJCW1hYy0+dG9nZ2xlX2NudCA9IDA7Ci0JCWdvdG8gcnhjaGVjazsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCh0eF90Y250ICE9IG1hYy0+dHhfdGNudCkgJiYgKG1hYy0+dHhfeGNudCA9PSAwKSkgewpAQCAtNTQ2LDIzICs1NjIsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJbWFjLT50b2dnbGVfY250ID0gMDsKLQkJZ290byByeGNoZWNrOwotCX0KLQotcnhjaGVjazoKLQlpZiAocnhfbWNudCAhPSBtYWMtPnJ4X21jbnQpIHsKLQkJcnhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAotCQkJCQkJQV9YR01fUlhfU1BJNF9TT1BfRU9QX0NOVCArCi0JCQkJCQltYWMtPm9mZnNldCkpKSArCi0JCQkJCQkocy0+cnhfZmlmb19vdmZsIC0KLQkJCQkJCSBtYWMtPnJ4X29jbnQpOwotCQltYWMtPnJ4X29jbnQgPSBzLT5yeF9maWZvX292Zmw7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0JaWYgKG1hYy0+cnhfbWNudCAhPSBzLT5yeF9mcmFtZXMgJiYgcnhfeGNudCA9PSAwICYmCi0JICAgIG1hYy0+cnhfeGNudCA9PSAwKSB7Ci0JCXN0YXR1cyA9IDI7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTcwLDggKzU2OSw2IEBACiAJbWFjLT50eF90Y250ID0gdHhfdGNudDsKIAltYWMtPnR4X3hjbnQgPSB0eF94Y250OwogCW1hYy0+dHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQltYWMtPnJ4X3hjbnQgPSByeF94Y250OwotCW1hYy0+cnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKIAltYWMtPnJ4X3BhdXNlID0gcy0+cnhfcGF1c2U7CiAJaWYgKHN0YXR1cyA9PSAxKSB7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggN2NlMzA1My4uODYxYzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQlwcmludGsodmVyc2lvbik7CiAKIAlpZiAoYmRldikKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBiZGV2LT5idXNfaWQpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIGRldl9uYW1lKGJkZXYpKTsKIAllbHNlIHsKIAkJaSA9IDA7CiAJCWRldiA9IHJvb3RfbGFuY2VfZGV2OwpAQCAtMTEwNSwxMCArMTEwNSwxMCBAQAogCiAJCXN0YXJ0ID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5zdGFydDsKIAkJbGVuID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGJkZXYtPmJ1c19pZCkpIHsKKwkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoYmRldikpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IFVuYWJsZSB0byByZXNlcnZlIE1NSU8gcmVzb3VyY2VcbiIsCi0JCQkgICAgICAgYmRldi0+YnVzX2lkKTsKKwkJCSAgICAgICBkZXZfbmFtZShiZGV2KSk7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIGVycl9vdXRfZGV2OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA2NDQ1Y2VkZC4uNGVjMDU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0yOTM3LDcgKzI5MzcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAoaW50KShicC0+cmN2X2J1ZnNfdG9fcG9zdCk7IGkrKykKIAkJZm9yIChqID0gMDsgKGkgKyBqKSA8IChpbnQpUElfUkNWX0RBVEFfS19OVU1fRU5UUklFUzsgaiArPSBicC0+cmN2X2J1ZnNfdG9fcG9zdCkKIAkJewotCQkJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYiA9IF9fZGV2X2FsbG9jX3NrYihORVdfU0tCX1NJWkUsIEdGUF9OT0lPKTsKKwkJCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBfX25ldGRldl9hbGxvY19za2IoYnAtPmRldiwgTkVXX1NLQl9TSVpFLCBHRlBfTk9JTyk7CiAJCQlpZiAoIW5ld3NrYikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWJwLT5kZXNjcl9ibG9ja192aXJ0LT5yY3ZfZGF0YVtpK2pdLmxvbmdfMCA9ICh1MzIpIChQSV9SQ1ZfREVTQ1JfTV9TT1AgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggZTRjZWY0OS4uMzU3ZjU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC01NjYsNiArNTY2LDE4IEBACiAgICAgb3V0dyhDU1IwLCBERVBDQV9BRERSKTtcCiAgICAgb3V0dyhTVE9QLCBERVBDQV9EQVRBKQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRlcGNhX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBkZXBjYV9vcGVuLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBkZXBjYV9zdGFydF94bWl0LAorCS5uZG9fc3RvcCAJCT0gZGVwY2FfY2xvc2UsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19kb19pb2N0bCAJCT0gZGVwY2FfaW9jdGwsCisJLm5kb190eF90aW1lb3V0IAk9IGRlcGNhX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRlcGNhX2h3X2luaXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHA7CkBAIC02MDYsOCArNjE4LDggQEAKIAlpZiAoIW1lbV9zdGFydCB8fCBscC0+YWRhcHRlciA8IERFUENBIHx8IGxwLT5hZGFwdGVyID49dW5rbm93bikKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXByaW50ayAoIiVzOiAlcyBhdCAweCUwNGx4IiwKLQkgICAgICAgIGRldmljZS0+YnVzX2lkLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOworCXByaW50aygiJXM6ICVzIGF0IDB4JTA0bHgiLAorCSAgICAgICBkZXZfbmFtZShkZXZpY2UpLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOwogCiAJc3dpdGNoIChscC0+ZGVwY2FfYnVzKSB7CiAjaWZkZWYgQ09ORklHX01DQQpAQCAtNjY5LDcgKzY4MSw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCXNwcmludGYobHAtPmFkYXB0ZXJfbmFtZSwgIiVzICglcykiLAotCQlkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBkZXZpY2UtPmJ1c19pZCk7CisJCWRlcGNhX3NpZ25hdHVyZVtscC0+YWRhcHRlcl0sIGRldl9uYW1lKGRldmljZSkpOwogCXN0YXR1cyA9IC1FQlVTWTsKIAogCS8qIEluaXRpYWxpc2F0aW9uIEJsb2NrICovCkBAIC03OTMsMTIgKzgwNSw3IEBACiAJfQogCiAJLyogVGhlIERFUENBLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmRlcGNhX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZGVwY2Ffc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSAmZGVwY2FfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwgPSAmZGVwY2FfaW9jdGw7Ci0JZGV2LT50eF90aW1lb3V0ID0gZGVwY2FfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZGVwY2FfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogCWRldi0+bWVtX3N0YXJ0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2RuZXQuYwppbmRleCAxYjQwNjMyLi5kYjFlMzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5jCkBAIC05LDYgKzksNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjEsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlICJkbmV0LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCA4NmJiODc2Li4wNTA0ZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImUxMDAiCiAjZGVmaW5lIERSVl9FWFQJCQkiLU5BUEkiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjIzLWs2IkRSVl9FWFQKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIzLjUuMjQtazIiRFJWX0VYVAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJJbnRlbChSKSBQUk8vMTAwIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0KGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgpAQCAtMjQwLDYgKzI0MCw3IEBACiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTA5MywgNyksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTA5NCwgNyksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTA5NSwgNyksCisJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTBmZSwgNyksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTIwOSwgMCksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTIyOSwgMCksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MjQ0OSwgMiksCkBAIC0yNzUsNiArMjc2LDcgQEAKIAlwaHlfODI1NjJfZW0gPSAweDAzMjAwMkE4LAogCXBoeV84MjU2Ml9layA9IDB4MDMxMDAyQTgsCiAJcGh5XzgyNTYyX2VoID0gMHgwMTcwMDJBOCwKKwlwaHlfODI1NTJfdiAgPSAweGQwNjEwMDRkLAogCXBoeV91bmtub3duICA9IDB4RkZGRkZGRkYsCiB9OwogCkBAIC05NDMsNiArOTQ1LDIyIEBACiAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGFkZHIsIGludCByZWcsIGludCBkYXRhKQogeworCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAgKChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgJiYgKHJlZyA9PSBNSUlfQk1DUikgJiYKKwkgICAgIChkYXRhICYgKEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9BTkVOQUJMRSkpKSB7CisJCXUxNiBhZHZlcnQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOworCisJCS8qCisJCSAqIFdvcmthcm91bmQgU2kgaXNzdWUgd2hlcmUgc29tZXRpbWVzIHRoZSBwYXJ0IHdpbGwgbm90CisJCSAqIGF1dG9uZWcgdG8gMTAwTWJwcyBldmVuIHdoZW4gYWR2ZXJ0aXNlZC4KKwkJICovCisJCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwRlVMTCkKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMCB8IEJNQ1JfRlVMTERQTFg7CisJCWVsc2UgaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMDBIQUxGKQorCQkJZGF0YSB8PSBCTUNSX1NQRUVEMTAwOworCX0KKwogCW1kaW9fY3RybChuZXRkZXZfcHJpdihuZXRkZXYpLCBhZGRyLCBtZGlfd3JpdGUsIHJlZywgZGF0YSk7CiB9CiAKQEAgLTEyNzYsMTYgKzEyOTQsMTIgQEAKIAlpZiAoYWRkciA9PSAzMikKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQkvKiBTZWxlY3RlZCB0aGUgcGh5IGFuZCBpc29sYXRlIHRoZSByZXN0ICovCi0JZm9yIChhZGRyID0gMDsgYWRkciA8IDMyOyBhZGRyKyspIHsKLQkJaWYgKGFkZHIgIT0gbmljLT5taWkucGh5X2lkKSB7Ci0JCQltZGlvX3dyaXRlKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSk7Ci0JCX0gZWxzZSB7Ci0JCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IpOwotCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLAotCQkJCWJtY3IgJiB+Qk1DUl9JU09MQVRFKTsKLQkJfQotCX0KKwkvKiBJc29sYXRlIGFsbCB0aGUgUEhZIGlkcyAqLworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKQorCQltZGlvX3dyaXRlKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSk7CisJLyogU2VsZWN0IHRoZSBkaXNjb3ZlcmVkIFBIWSAqLworCWJtY3IgJj0gfkJNQ1JfSVNPTEFURTsKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUiwgYm1jcik7CiAKIAkvKiBHZXQgcGh5IElEICovCiAJaWRfbG8gPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9QSFlTSUQxKTsKQEAgLTEzMDMsNyArMTMxNywxOCBAQAogCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTlNDX0NPTkcsIGNvbmcpOwogCX0KIAotCWlmICgobmljLT5tYWMgPj0gbWFjXzgyNTUwX0QxMDIpIHx8ICgobmljLT5mbGFncyAmIGljaCkgJiYKKwlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJdTE2IGFkdmVydCA9IG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisKKwkJLyogV29ya2Fyb3VuZCBTaSBub3QgYWR2ZXJ0aXNpbmcgZmxvdy1jb250cm9sIGR1cmluZyBhdXRvbmVnICovCisJCWFkdmVydCB8PSBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIGFkdmVydCk7CisKKwkJLyogUmVzZXQgZm9yIHRoZSBhYm92ZSBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0ICovCisJCWJtY3IgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9CTUNSKTsKKwkJYm1jciB8PSBCTUNSX1JFU0VUOworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUiwgYm1jcik7CisJfSBlbHNlIGlmICgobmljLT5tYWMgPj0gbWFjXzgyNTUwX0QxMDIpIHx8ICgobmljLT5mbGFncyAmIGljaCkgJiYKIAkgICAobWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfVFBJU1RBVFVTKSAmIDB4ODAwMCkgJiYKIAkJIShuaWMtPmVlcHJvbVtlZXByb21fY25mZ19tZGl4XSAmIGVlcHJvbV9tZGl4X2VuYWJsZWQpKSkgewogCQkvKiBlbmFibGUvZGlzYWJsZSBNREkvTURJLVggYXV0by1zd2l0Y2hpbmcuICovCkBAIC0xOTQ0LDkgKzE5NjksOSBAQAogCWlmIChzdGF0X2FjayAmIHN0YXRfYWNrX3JucikKIAkJbmljLT5ydV9ydW5uaW5nID0gUlVfU1VTUEVOREVEOwogCi0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZuaWMtPm5hcGkpKSkgeworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZuaWMtPm5hcGkpKSkgewogCQllMTAwX2Rpc2FibGVfaXJxKG5pYyk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJm5pYy0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmbmljLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xOTYyLDcgKzE5ODcsNyBAQAogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJZTEwMF9lbmFibGVfaXJxKG5pYyk7CiAJfQogCkBAIC0yMTM0LDYgKzIxNTksOSBAQAogfQogCiAjZGVmaW5lIE1JSV9MRURfQ09OVFJPTAkweDFCCisjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDB4MTkKKyNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT04gICAgICAgMHgwMDBGIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvbiAqLworI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PRkYgICAgICAweDAwMEEgLyogTEVEVFggYW5kIExFRF9SWCBib3RoIG9mZiAqLwogc3RhdGljIHZvaWQgZTEwMF9ibGlua19sZWQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuaWMgKm5pYyA9IChzdHJ1Y3QgbmljICopZGF0YTsKQEAgLTIxNDMsMTAgKzIxNzEsMTkgQEAKIAkJbGVkX29uXzU1OSA9IDB4MDUsCiAJCWxlZF9vbl81NTcgPSAweDA3LAogCX07CisJdTE2IGxlZF9yZWcgPSBNSUlfTEVEX0NPTlRST0w7CiAKLQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgotCQkobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6IGxlZF9vbl81NTk7Ci0JbWRpb193cml0ZShuaWMtPm5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTEVEX0NPTlRST0wsIG5pYy0+bGVkcyk7CisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCWxlZF9yZWcgPSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERTsKKworCQluaWMtPmxlZHMgPSAobmljLT5sZWRzID09IEUxMDBfODI1NTJfTEVEX09OKSA/CisJCSAgICAgICAgICAgIEUxMDBfODI1NTJfTEVEX09GRiA6IEUxMDBfODI1NTJfTEVEX09OOworCX0gZWxzZSB7CisJCW5pYy0+bGVkcyA9IChuaWMtPmxlZHMgJiBsZWRfb24pID8gbGVkX29mZiA6CisJCSAgICAgICAgICAgIChuaWMtPm1hYyA8IG1hY184MjU1OV9EMTAxTSkgPyBsZWRfb25fNTU3IDoKKwkJICAgICAgICAgICAgbGVkX29uXzU1OTsKKwl9CisJbWRpb193cml0ZShuaWMtPm5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCBuaWMtPmxlZHMpOwogCW1vZF90aW1lcigmbmljLT5ibGlua190aW1lciwgamlmZmllcyArIEhaIC8gNCk7CiB9CiAKQEAgLTIzNzUsMTMgKzI0MTIsMTUgQEAKIHN0YXRpYyBpbnQgZTEwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IGxlZF9yZWcgPSAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpID8gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREUgOgorCSAgICAgICAgICAgICAgTUlJX0xFRF9DT05UUk9MOwogCiAJaWYgKCFkYXRhIHx8IGRhdGEgPiAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSkKIAkJZGF0YSA9ICh1MzIpKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopOwogCW1vZF90aW1lcigmbmljLT5ibGlua190aW1lciwgamlmZmllcyk7CiAJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwogCWRlbF90aW1lcl9zeW5jKCZuaWMtPmJsaW5rX3RpbWVyKTsKLQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTEVEX0NPTlRST0wsIDApOworCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIGxlZF9yZWcsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjg2LDYgKzI3MjUsOSBAQAogCX0KIH0KIAorI2RlZmluZSBFMTAwXzgyNTUyX1NNQVJUU1BFRUQgICAweDE0ICAgLyogU21hcnRTcGVlZCBDdHJsIHJlZ2lzdGVyICovCisjZGVmaW5lIEUxMDBfODI1NTJfUkVWX0FORUcgICAgIDB4MDIwMCAvKiBSZXZlcnNlIGF1dG8tbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgRTEwMF84MjU1Ml9BTkVHX05PVyAgICAgMHgwNDAwIC8qIEF1dG8tbmVnb3RpYXRlIG5vdyAqLwogc3RhdGljIGludCBlMTAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtMjY5OCw2ICsyNzQwLDE1IEBACiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlpZiAoKG5pYy0+ZmxhZ3MgJiB3b2xfbWFnaWMpIHwgZTEwMF9hc2YobmljKSkgeworCQkvKiBlbmFibGUgcmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisJCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgeworCQkJdTE2IHNtYXJ0c3BlZWQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQpOworCisJCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkJICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQsIHNtYXJ0c3BlZWQgfAorCQkJICAgICAgICAgICBFMTAwXzgyNTUyX1JFVl9BTkVHIHwgRTEwMF84MjU1Ml9BTkVHX05PVyk7CisJCX0KIAkJaWYgKHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCB0cnVlKSkKIAkJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIHRydWUpOwogCX0gZWxzZSB7CkBAIC0yNzIxLDYgKzI3NzIsMTYgQEAKIAkvKiBhY2sgYW55IHBlbmRpbmcgd2FrZSBldmVudHMsIGRpc2FibGUgUE1FICovCiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIDAsIDApOwogCisJLyogZGlzYmFsZSByZXZlcnNlIGF1dG8tbmVnb3RpYXRpb24gKi8KKwlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJdTE2IHNtYXJ0c3BlZWQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDBfODI1NTJfU01BUlRTUEVFRCk7CisKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwKKwkJICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQsCisJCSAgICAgICAgICAgc21hcnRzcGVlZCAmIH4oRTEwMF84MjU1Ml9SRVZfQU5FRykpOworCX0KKwogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQllMTAwX3VwKG5pYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCBmNTU4MWRlLi5lOWE0MTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTE4Miw3ICsxODIsNiBAQAogCS8qIGFycmF5IG9mIGJ1ZmZlciBpbmZvcm1hdGlvbiBzdHJ1Y3RzICovCiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAKLQlzcGlubG9ja190IHR4X2xvY2s7CiAJdTE2IHRkaDsKIAl1MTYgdGR0OwogCWJvb2wgbGFzdF90eF90c287CkBAIC0yMzgsNyArMjM3LDYgQEAKIAl1MTYgbGlua19zcGVlZDsKIAl1MTYgbGlua19kdXBsZXg7CiAJc3BpbmxvY2tfdCBzdGF0c19sb2NrOwotCXNwaW5sb2NrX3QgdHhfcXVldWVfbG9jazsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXM7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X3BhY2tldHM7CiAJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDZiZDYzY2MuLjkzYjg2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTU3NywxMiArNTc3LDMwIEBACiAKIHZvaWQgZTEwMDBfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJdTMyIHJjdGwsIHRjdGw7CiAKIAkvKiBzaWduYWwgdGhhdCB3ZSdyZSBkb3duIHNvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIG5vdAogCSAqIHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRpbWVyICovCiAJc2V0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CiAKKwkvKiBkaXNhYmxlIHJlY2VpdmVzIGluIHRoZSBoYXJkd2FyZSAqLworCXJjdGwgPSBlcjMyKFJDVEwpOworCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKKwkvKiBmbHVzaCBhbmQgc2xlZXAgYmVsb3cgKi8KKworCS8qIGNhbiBiZSBuZXRpZl90eF9kaXNhYmxlIHdoZW4gTkVUSUZfRl9MTFRYIGlzIHJlbW92ZWQgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBkaXNhYmxlIHRyYW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgKi8KKwl0Y3RsID0gZXIzMihUQ1RMKTsKKwl0Y3RsICY9IH5FMTAwMF9UQ1RMX0VOOworCWV3MzIoVENUTCwgdGN0bCk7CisJLyogZmx1c2ggYm90aCBkaXNhYmxlcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2ggKi8KKwlFMTAwMF9XUklURV9GTFVTSCgpOworCW1zbGVlcCgxMCk7CisKIAluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOwogCiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CkBAIC01OTUsNyArNjEzLDYgQEAKIAlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKIAlhZGFwdGVyLT5saW5rX2R1cGxleCA9IDA7CiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKIAllMTAwMF9yZXNldChhZGFwdGVyKTsKIAllMTAwMF9jbGVhbl9hbGxfdHhfcmluZ3MoYWRhcHRlcik7CkBAIC0xMDQ4LDggKzEwNjUsNiBAQAogCWlmIChwY2lfdXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwotCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKQEAgLTEzNjgsOCArMTM4Myw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKTsKLQogCS8qIEV4cGxpY2l0bHkgZGlzYWJsZSBJUlEgc2luY2UgdGhlIE5JQyBjYW4gYmUgaW4gYW55IHN0YXRlLiAqLwogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCkBAIC0xNjI0LDcgKzE2MzcsNiBAQAogCiAJdHhkci0+bmV4dF90b191c2UgPSAwOwogCXR4ZHItPm5leHRfdG9fY2xlYW4gPSAwOwotCXNwaW5fbG9ja19pbml0KCZ0eGRyLT50eF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg4Miw4ICsxODk0LDYgQEAKICAqIGUxMDAwX3NldHVwX3JjdGwgLSBjb25maWd1cmUgdGhlIHJlY2VpdmUgY29udHJvbCByZWdpc3RlcnMKICAqIEBhZGFwdGVyOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwotI2RlZmluZSBQQUdFX1VTRV9DT1VOVChTKSAoKChTKSA+PiBQQUdFX1NISUZUKSArIFwKLQkJCSgoKFMpICYgKFBBR0VfU0laRSAtIDEpKSA/IDEgOiAwKSkKIHN0YXRpYyB2b2lkIGUxMDAwX3NldHVwX3JjdGwoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTIwNTYsMTcgKzIwNjYsMTQgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgIHN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewotCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7Ci0JCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJYnVmZmVyX2luZm8tPmRtYSwKLQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKLQl9CisJYnVmZmVyX2luZm8tPmRtYSA9IDA7CiAJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJc2tiX2RtYV91bm1hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBidWZmZXJfaW5mby0+c2tiLAorCQkgICAgICAgICAgICAgIERNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJfQorCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKIAkvKiBidWZmZXJfaW5mbyBtdXN0IGJlIGNvbXBsZXRlbHkgc2V0IHVwIGluIHRoZSB0cmFuc21pdCBwYXRoICovCiB9CiAKQEAgLTI4NjUsMTEgKzI4NzIsMTEgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKIAkJCWNtZF9sZW4gfD0gRTEwMDBfVFhEX0NNRF9UQ1A7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQkvKiBYWFggbm90IGhhbmRsaW5nIGFsbCBJUFY2IGhlYWRlcnMgKi8KIAkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCiAJCQljbWRfbGVuIHw9IEUxMDAwX1RYRF9DTURfVENQOwpAQCAtMjkxNSwxMyArMjkyMiwyMSBAQAogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87Ci0JdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOwotCWxlbiAtPSBza2ItPmRhdGFfbGVuOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwlvZmZzZXQgPSAwOworCiAJd2hpbGUgKGxlbikgewogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKQEAgLTI5NTYsMTggKzI5NzEsMTggQEAKIAkJCXNpemUgLT0gNDsKIAogCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQlwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAotCQkJCXNrYi0+ZGF0YSArIG9mZnNldCwKLQkJCQlzaXplLAotCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwWzBdICsgb2Zmc2V0OwogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQlsZW4gLT0gc2l6ZTsKIAkJb2Zmc2V0ICs9IHNpemU7CiAJCWNvdW50Kys7Ci0JCWlmICh1bmxpa2VseSgrK2kgPT0gdHhfcmluZy0+Y291bnQpKSBpID0gMDsKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKHVubGlrZWx5KGkgPT0gdHhfcmluZy0+Y291bnQpKQorCQkJCWkgPSAwOworCQl9CiAJfQogCiAJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKQEAgLTI5NzUsOSArMjk5MCwxMyBAQAogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKHVubGlrZWx5KGkgPT0gdHhfcmluZy0+Y291bnQpKQorCQkJCWkgPSAwOworCiAJCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJCXNpemUgPSBtaW4obGVuLCBtYXhfcGVyX3R4ZCk7CiAJCQkvKiBXb3JrYXJvdW5kIGZvciBwcmVtYXR1cmUgZGVzYyB3cml0ZS1iYWNrcwpAQCAtMjk5MywyMyArMzAxMiwxNiBAQAogCQkJCXNpemUgLT0gNDsKIAogCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJZnJhZy0+cGFnZSwKLQkJCQkJb2Zmc2V0LAotCQkJCQlzaXplLAotCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbZiArIDFdICsgb2Zmc2V0OwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOwogCiAJCQlsZW4gLT0gc2l6ZTsKIAkJCW9mZnNldCArPSBzaXplOwogCQkJY291bnQrKzsKLQkJCWlmICh1bmxpa2VseSgrK2kgPT0gdHhfcmluZy0+Y291bnQpKSBpID0gMDsKIAkJfQogCX0KIAotCWkgPSAoaSA9PSAwKSA/IHR4X3JpbmctPmNvdW50IC0gMSA6IGkgLSAxOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0ubmV4dF90b193YXRjaCA9IGk7CiAKQEAgLTMxODUsNyArMzE5Nyw2IEBACiAJdW5zaWduZWQgaW50IG1heF90eGRfcHdyID0gRTEwMDBfTUFYX1RYRF9QV1I7CiAJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzOwogCXVuc2lnbmVkIGludCBtc3M7CiAJaW50IGNvdW50ID0gMDsKQEAgLTMyOTAsMjIgKzMzMDEsMTUgQEAKIAkgICAgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykpCiAJCWUxMDAwX3RyYW5zZmVyX2RoY3BfaW5mbyhhZGFwdGVyLCBza2IpOwogCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAkvKiBuZWVkOiBjb3VudCArIDIgZGVzYyBnYXAgdG8ga2VlcCB0YWlsIGZyb20gdG91Y2hpbmcKIAkgKiBoZWFkLCBvdGhlcndpc2UgdHJ5IG5leHQgdGltZSAqLwotCWlmICh1bmxpa2VseShlMTAwMF9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgY291bnQgKyAyKSkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseShlMTAwMF9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgY291bnQgKyAyKSkpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9CiAKIAlpZiAodW5saWtlbHkoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkgewogCQlpZiAodW5saWtlbHkoZTEwMDBfODI1NDdfZmlmb193b3JrYXJvdW5kKGFkYXB0ZXIsIHNrYikpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPnR4X2ZpZm9fc3RhbGxfdGltZXIsIGppZmZpZXMgKyAxKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAkJfQogCX0KQEAgLTMzMjAsNyArMzMyNCw2IEBACiAJdHNvID0gZTEwMDBfdHNvKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYik7CiAJaWYgKHRzbyA8IDApIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApAQCAtMzMzNiwxNiArMzMzOSwyMSBAQAogCWlmIChsaWtlbHkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpKQogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19JUFY0OwogCi0JZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCi0JICAgICAgICAgICAgICAgZTEwMDBfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wZXJfdHhkLCBucl9mcmFncywgbXNzKSk7CisJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsCisJICAgICAgICAgICAgICAgICAgICAgbnJfZnJhZ3MsIG1zcyk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoY291bnQpIHsKKwkJZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsIGNvdW50KTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKIAotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQllMTAwMF9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDIpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKKwl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMzY4NywxMiArMzY5NSwxMiBAQAogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwogCX0KIAotCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpKSB7CisJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9IGVsc2UKIAkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIApAQCAtMzc0NywxNiArMzc1NSwxOCBAQAogCQlldzMyKElNQywgfjApOwogCQlFMTAwMF9XUklURV9GTFVTSCgpOwogCX0KLQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSkgeworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7Ci0JfSBlbHNlCisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJfSBlbHNlIHsKIAkJLyogdGhpcyByZWFsbHkgc2hvdWxkIG5vdCBoYXBwZW4hIGlmIGl0IGRvZXMgaXQgaXMgYmFzaWNhbGx5IGEKIAkJICogYnVnLCBidXQgbm90IGEgaGFyZCBlcnJvciwgc28gZW5hYmxlIGludHMgYW5kIGNvbnRpbnVlICovCi0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0zNzczLDI4ICszNzgzLDIxIEBACiAKIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYocG9sbF9kZXYpOwogCi0JLyogZTEwMDBfY2xlYW4gaXMgY2FsbGVkIHBlci1jcHUuICBUaGlzIGxvY2sgcHJvdGVjdHMKLQkgKiB0eF9yaW5nWzBdIGZyb20gYmVpbmcgY2xlYW5lZCBieSBtdWx0aXBsZSBjcHVzCi0JICogc2ltdWx0YW5lb3VzbHkuICBBIGZhaWx1cmUgb2J0YWluaW5nIHRoZSBsb2NrIG1lYW5zCi0JICogdHhfcmluZ1swXSBpcyBjdXJyZW50bHkgYmVpbmcgY2xlYW5lZCBhbnl3YXkuICovCi0JaWYgKHNwaW5fdHJ5bG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jaykpIHsKLQkJdHhfY2xlYW5lZCA9IGUxMDAwX2NsZWFuX3R4X2lycShhZGFwdGVyLAotCQkJCQkJJmFkYXB0ZXItPnR4X3JpbmdbMF0pOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0JfQorCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbMF0pOwogCiAJYWRhcHRlci0+Y2xlYW5fcngoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbMF0sCiAJICAgICAgICAgICAgICAgICAgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAotCWlmICh0eF9jbGVhbmVkKQorCWlmICghdHhfY2xlYW5lZCkKIAkJd29ya19kb25lID0gYnVkZ2V0OwogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQlpZiAobGlrZWx5KGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykpCiAJCQllMTAwMF9zZXRfaXRyKGFkYXB0ZXIpOwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCisJCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0zODEzLDE1ICszODE2LDE2IEBACiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJdW5zaWduZWQgaW50IGksIGVvcDsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotCWJvb2wgY2xlYW5lZCA9IGZhbHNlOworCWJvb2wgY2xlYW5lZDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXM9MCwgdG90YWxfdHhfcGFja2V0cz0wOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGVvcCk7CiAKLQl3aGlsZSAoZW9wX2Rlc2MtPnVwcGVyLmRhdGEgJiBjcHVfdG9fbGUzMihFMTAwMF9UWERfU1RBVF9ERCkpIHsKLQkJZm9yIChjbGVhbmVkID0gZmFsc2U7ICFjbGVhbmVkOyApIHsKKwl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkJZm9yIChjbGVhbmVkID0gZmFsc2U7ICFjbGVhbmVkOyBjb3VudCsrKSB7CiAJCQl0eF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgaSk7CiAJCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOwpAQCAtMzg0NCwxMCArMzg0OCw2IEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2RlZmluZSBFMTAwMF9UWF9XRUlHSFQgNjQKLQkJLyogd2VpZ2h0IG9mIGEgc29ydCBmb3IgdHgsIHRvIGF2b2lkIGVuZGxlc3MgdHJhbnNtaXQgY2xlYW51cCAqLwotCQlpZiAoY291bnQrKyA9PSBFMTAwMF9UWF9XRUlHSFQpCi0JCQlicmVhazsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKQEAgLTM4NjksOCArMzg2OSw4IEBACiAJCS8qIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKIAkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaSAqLwogCQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IGZhbHNlOwotCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKLQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsKKwkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgJiYKKwkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCArCiAJCSAgICAgICAgICAgICAgIChhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciAqIEhaKSkKIAkJICAgICYmICEoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX1RYT0ZGKSkgewogCkBAIC0zODkyLDcgKzM4OTIsNyBAQAogCQkJCXJlYWRsKGh3LT5od19hZGRyICsgdHhfcmluZy0+dGR0KSwKIAkJCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSwKIAkJCQl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuLAotCQkJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwKKwkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wLAogCQkJCWVvcCwKIAkJCQlqaWZmaWVzLAogCQkJCWVvcF9kZXNjLT51cHBlci5maWVsZHMuc3RhdHVzKTsKQEAgLTM5MDMsNyArMzkwMyw3IEBACiAJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyArPSB0b3RhbF90eF9wYWNrZXRzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF90eF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF90eF9wYWNrZXRzOwotCXJldHVybiBjbGVhbmVkOworCXJldHVybiAoY291bnQgPCB0eF9yaW5nLT5jb3VudCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwppbmRleCAwODkwMTYyLi42YzAxYTIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKQEAgLTQwLDYgKzQwLDcgQEAKICAqIDgyNTczRSBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIgKENvcHBlcikKICAqIDgyNTczTCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIKICAqIDgyNTc0TCBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgorICogODI1ODNWIEdpZ2FiaXQgTmV0d29yayBDb25uZWN0aW9uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtNjEsNiArNjIsNyBAQAogc3RhdGljIHMzMiBlMTAwMF9nZXRfcGh5X2lkXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2NoZWNrX2Zvcl9zZXJkZXNfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfd3JpdGVfbnZtX2Vld3JfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwKIAkJCQkgICAgICB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CiBzdGF0aWMgczMyIGUxMDAwX2ZpeF9udm1fY2hlY2tzdW1fODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC05OSw2ICsxMDEsNyBAQAogCQlwaHktPnR5cGUJCSA9IGUxMDAwX3BoeV9tODg7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfYm07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjEsNiArMTI0LDcgQEAKIAkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAocGh5LT5pZCAhPSBCTUUxMDAwX0VfUEhZX0lEX1IyKQogCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogCQlicmVhazsKQEAgLTE2NCw2ICsxNjgsNyBAQAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MzoKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmICgoKGVlY2QgPj4gMTUpICYgMHgzKSA9PSAweDMpIHsKIAkJCW52bS0+dHlwZSA9IGUxMDAwX252bV9mbGFzaF9odzsKIAkJCW52bS0+d29yZF9zaXplID0gMjA0ODsKQEAgLTI1MCw3ICsyNTUsNyBAQAogCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM6CiAJCWZ1bmMtPnNldHVwX3BoeXNpY2FsX2ludGVyZmFjZSA9CiAJCQllMTAwMF9zZXR1cF9maWJlcl9zZXJkZXNfbGlua184MjU3MTsKLQkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMGVfY2hlY2tfZm9yX3NlcmRlc19saW5rOworCQlmdW5jLT5jaGVja19mb3JfbGluayA9IGUxMDAwX2NoZWNrX2Zvcl9zZXJkZXNfbGlua184MjU3MTsKIAkJZnVuYy0+Z2V0X2xpbmtfdXBfaW5mbyA9CiAJCQllMTAwMGVfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfZmliZXJfc2VyZGVzOwogCQlicmVhazsKQEAgLTI2MSw2ICsyNjYsNyBAQAogCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWZ1bmMtPmNoZWNrX21uZ19tb2RlID0gZTEwMDBfY2hlY2tfbW5nX21vZGVfODI1NzQ7CiAJCWZ1bmMtPmxlZF9vbiA9IGUxMDAwX2xlZF9vbl84MjU3NDsKIAkJYnJlYWs7CkBAIC0zNzQsNiArMzgwLDcgQEAKIAkJcmV0dXJuIGUxMDAwZV9nZXRfcGh5X2lkKGh3KTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIFBIWV9JRDEsICZwaHlfaWQpOwogCQlpZiAocmV0X3ZhbCkKIAkJCXJldHVybiByZXRfdmFsOwpAQCAtNDYzLDggKzQ3MCwxNSBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzMgJiYgaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc0KQorCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldF92YWwgPSBlMTAwMGVfYWNxdWlyZV9udm0oaHcpOworCQlicmVhazsKKwl9CiAKIAlpZiAocmV0X3ZhbCkKIAkJZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3MShodyk7CkBAIC01MDQsNiArNTE4LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZXRfdmFsID0gZTEwMDBfd3JpdGVfbnZtX2Vld3JfODI1NzEoaHcsIG9mZnNldCwgd29yZHMsIGRhdGEpOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTcxOgpAQCAtNzc4LDcgKzc5MywxMCBAQAogCSAqIE11c3QgYWNxdWlyZSB0aGUgTURJTyBvd25lcnNoaXAgYmVmb3JlIE1BQyByZXNldC4KIAkgKiBPd25lcnNoaXAgZGVmYXVsdHMgdG8gZmlybXdhcmUgYWZ0ZXIgYSByZXNldC4KIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CiAJCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQOwogCkBAIC03OTQsNiArODEyLDkgQEAKIAkJCW1zbGVlcCgyKTsKIAkJCWkrKzsKIAkJfSB3aGlsZSAoaSA8IE1ESU9fT1dORVJTSElQX1RJTUVPVVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAljdHJsID0gZXIzMihDVFJMKTsKQEAgLTgxOSw4ICs4NDAsMTYgQEAKIAkgKiBOZWVkIHRvIHdhaXQgZm9yIFBoeSBjb25maWd1cmF0aW9uIGNvbXBsZXRpb24gYmVmb3JlIGFjY2Vzc2luZwogCSAqIE5WTSBhbmQgUGh5LgogCSAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMgfHwgaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KQorCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJbXNsZWVwKDI1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KIAlldzMyKElNQywgMHhmZmZmZmZmZik7CkBAIC04MzAsNiArODU5LDEwIEBACiAJCWh3LT5kZXZfc3BlYy5lODI1NzEuYWx0X21hY19hZGRyX2lzX3ByZXNlbnQpCiAJCQllMTAwMGVfc2V0X2xhYV9zdGF0ZV84MjU3MShodywgdHJ1ZSk7CiAKKwkvKiBSZWluaXRpYWxpemUgdGhlIDgyNTcxIHNlcmRlcyBsaW5rIHN0YXRlIG1hY2hpbmUgKi8KKwlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKQorCQlody0+bWFjLnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwogCXJldHVybiAwOwogfQogCkBAIC04ODYsMTcgKzkxOSwyMiBAQAogCWV3MzIoVFhEQ1RMKDApLCByZWdfZGF0YSk7CiAKIAkvKiAuLi5mb3IgYm90aCBxdWV1ZXMuICovCi0JaWYgKG1hYy0+dHlwZSAhPSBlMTAwMF84MjU3MyAmJiBtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKG1hYy0+dHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQllMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOworCQlyZWdfZGF0YSA9IGVyMzIoR0NSKTsKKwkJcmVnX2RhdGEgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKKwkJZXczMihHQ1IsIHJlZ19kYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmVnX2RhdGEgPSBlcjMyKFRYRENUTCgxKSk7CiAJCXJlZ19kYXRhID0gKHJlZ19kYXRhICYgfkUxMDAwX1RYRENUTF9XVEhSRVNIKSB8CiAJCQkgICBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCIHwKIAkJCSAgIEUxMDAwX1RYRENUTF9DT1VOVF9ERVNDOwogCQlldzMyKFRYRENUTCgxKSwgcmVnX2RhdGEpOwotCX0gZWxzZSB7Ci0JCWUxMDAwZV9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhodyk7Ci0JCXJlZ19kYXRhID0gZXIzMihHQ1IpOwotCQlyZWdfZGF0YSB8PSBFMTAwMF9HQ1JfTDFfQUNUX1dJVEhPVVRfTDBTX1JYOwotCQlldzMyKEdDUiwgcmVnX2RhdGEpOworCQlicmVhazsKIAl9CiAKIAkvKgpAQCAtOTYxLDE4ICs5OTksMzAgQEAKIAl9CiAKIAkvKiBEZXZpY2UgQ29udHJvbCAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMgfHwgaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmVnID0gZXIzMihDVFJMKTsKIAkJcmVnICY9IH4oMSA8PCAyOSk7CiAJCWV3MzIoQ1RSTCwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoQ1RSTF9FWFQpOwogCQlyZWcgJj0gfigxIDw8IDIzKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihDVFJMX0VYVCwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MSkgewpAQCAtOTgwLDkgKzEwMzAsMjMgQEAKIAkJcmVnIHw9IEUxMDAwX1BCQV9FQ0NfQ09SUl9FTjsKIAkJZXczMihQQkFfRUNDLCByZWcpOwogCX0KKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIGhhcmR3YXJlIGVycmF0YS4KKwkgKiBFbnN1cmUgdGhhdCBETUEgRHluYW1pYyBDbG9jayBnYXRpbmcgaXMgZGlzYWJsZWQgb24gODI1NzEgYW5kIDgyNTcyCisJICovCisKKyAgICAgICAgaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHx8CisgICAgICAgICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzIpKSB7CisgICAgICAgICAgICAgICAgcmVnID0gZXIzMihDVFJMX0VYVCk7CisgICAgICAgICAgICAgICAgcmVnICY9IH5FMTAwMF9DVFJMX0VYVF9ETUFfRFlOX0NMS19FTjsKKyAgICAgICAgICAgICAgICBldzMyKENUUkxfRVhULCByZWcpOworICAgICAgICB9CisKIAogCS8qIFBDSS1FeCBDb250cm9sIFJlZ2lzdGVycyAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmVnID0gZXIzMihHQ1IpOwogCQlyZWcgfD0gKDEgPDwgMjIpOwogCQlldzMyKEdDUiwgcmVnKTsKQEAgLTk5MCw2ICsxMDU0LDkgQEAKIAkJcmVnID0gZXIzMihHQ1IyKTsKIAkJcmVnIHw9IDE7CiAJCWV3MzIoR0NSMiwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuOwpAQCAtMTAwOSw3ICsxMDc2LDEwIEBACiAJdTMyIHZmdGFfb2Zmc2V0ID0gMDsKIAl1MzIgdmZ0YV9iaXRfaW5fcmVnID0gMDsKIAotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMgfHwgaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJaWYgKGh3LT5tbmdfY29va2llLnZsYW5faWQgIT0gMCkgewogCQkJLyoKIAkJCSAqIFRoZSBWRlRBIGlzIGEgNDA5NmIgYml0LWZpZWxkLCBlYWNoIGlkZW50aWZ5aW5nCkBAIC0xMDI0LDYgKzEwOTQsOSBAQAogCQkJdmZ0YV9iaXRfaW5fcmVnID0gMSA8PCAoaHctPm1uZ19jb29raWUudmxhbl9pZCAmCiAJCQkJCSAgICAgICBFMTAwMF9WRlRBX0VOVFJZX0JJVF9TSElGVF9NQVNLKTsKIAkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBFMTAwMF9WTEFOX0ZJTFRFUl9UQkxfU0laRTsgb2Zmc2V0KyspIHsKIAkJLyoKQEAgLTExMjIsOSArMTE5NSwxNiBAQAogCSAqIHRoZSBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5CiAJICogc2V0IGl0IHRvIGZ1bGwuCiAJICovCi0JaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMgfHwgaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSAmJgotCSAgICBody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gZTEwMDBfZmNfZGVmYXVsdCkKLQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2RlZmF1bHQpCisJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19mdWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gZTEwMDBlX3NldHVwX2xpbmsoaHcpOwogfQpAQCAtMTIwMyw2ICsxMjgzLDEzMSBAQAogfQogCiAvKioKKyAqICBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzEgLSBDaGVjayBmb3IgbGluayAoU2VyZGVzKQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIENoZWNrcyBmb3IgbGluayB1cCBvbiB0aGUgaGFyZHdhcmUuICBJZiBsaW5rIGlzIG5vdCB1cCBhbmQgd2UgaGF2ZQorICogIGEgc2lnbmFsLCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgbGluayB1cC4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfY2hlY2tfZm9yX3NlcmRlc19saW5rXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKwl1MzIgcnhjdzsKKwl1MzIgY3RybDsKKwl1MzIgc3RhdHVzOworCXMzMiByZXRfdmFsID0gMDsKKworCWN0cmwgPSBlcjMyKENUUkwpOworCXN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKKwlyeGN3ID0gZXIzMihSWENXKTsKKworCWlmICgocnhjdyAmIEUxMDAwX1JYQ1dfU1lOQ0gpICYmICEocnhjdyAmIEUxMDAwX1JYQ1dfSVYpKSB7CisKKwkJLyogUmVjZWl2ZXIgaXMgc3luY2hyb25pemVkIHdpdGggbm8gaW52YWxpZCBiaXRzLiAgKi8KKwkJc3dpdGNoIChtYWMtPnNlcmRlc19saW5rX3N0YXRlKSB7CisJCWNhc2UgZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19jb21wbGV0ZToKKwkJCWlmICghKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgbG9zdCBsaW5rLCByZXRyeSBhdXRvbmVnIGJlZm9yZQorCQkJCSAqIHJlcG9ydGluZyBsaW5rIGZhaWx1cmUKKwkJCQkgKi8KKwkJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0KKwkJCQkgICAgZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19wcm9ncmVzczsKKwkJCQlod19kYmcoaHcsICJBTl9VUCAgICAgLT4gQU5fUFJPR1xuIik7CisJCQl9CisJCWJyZWFrOworCisJCWNhc2UgZTEwMDBfc2VyZGVzX2xpbmtfZm9yY2VkX3VwOgorCQkJLyoKKwkJCSAqIElmIHdlIGFyZSByZWNlaXZpbmcgL0MvIG9yZGVyZWQgc2V0cywgcmUtZW5hYmxlCisJCQkgKiBhdXRvLW5lZ290aWF0aW9uIGluIHRoZSBUWENXIHJlZ2lzdGVyIGFuZCBkaXNhYmxlCisJCQkgKiBmb3JjZWQgbGluayBpbiB0aGUgRGV2aWNlIENvbnRyb2wgcmVnaXN0ZXIgaW4gYW4KKwkJCSAqIGF0dGVtcHQgdG8gYXV0by1uZWdvdGlhdGUgd2l0aCBvdXIgbGluayBwYXJ0bmVyLgorCQkJICovCisJCQlpZiAocnhjdyAmIEUxMDAwX1JYQ1dfQykgeworCQkJCS8qIEVuYWJsZSBhdXRvbmVnLCBhbmQgdW5mb3JjZSBsaW5rIHVwICovCisJCQkJZXczMihUWENXLCBtYWMtPnR4Y3cpOworCQkJCWV3MzIoQ1RSTCwKKwkJCQkgICAgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKKwkJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0KKwkJCQkgICAgZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19wcm9ncmVzczsKKwkJCQlod19kYmcoaHcsICJGT1JDRURfVVAgLT4gQU5fUFJPR1xuIik7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M6CisJCQkvKgorCQkJICogSWYgdGhlIExVIGJpdCBpcyBzZXQgaW4gdGhlIFNUQVRVUyByZWdpc3RlciwKKwkJCSAqIGF1dG9uZWcgaGFzIGNvbXBsZXRlZCBzdWNlc3NmdWxseS4gSWYgbm90LAorCQkJICogdHJ5IGZvcmluZyB0aGUgbGluayBiZWNhdXNlIHRoZSBmYXIgZW5kIG1heSBiZQorCQkJICogYXZhaWxhYmxlIGJ1dCBub3QgY2FwYWJsZSBvZiBhdXRvbmVnb3RpYXRpb24uCisJCQkgKi8KKwkJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpICB7CisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfY29tcGxldGU7CisJCQkJaHdfZGJnKGh3LCAiQU5fUFJPRyAgIC0+IEFOX1VQXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBEaXNhYmxlIGF1dG9uZWcsIGZvcmNlIGxpbmsgdXAgYW5kCisJCQkJICogZnVsbCBkdXBsZXgsIGFuZCBjaGFuZ2Ugc3RhdGUgdG8gZm9yY2VkCisJCQkJICovCisJCQkJZXczMihUWENXLAorCQkJCSAgICAobWFjLT50eGN3ICYgfkUxMDAwX1RYQ1dfQU5FKSk7CisJCQkJY3RybCB8PSAoRTEwMDBfQ1RSTF9TTFUgfCBFMTAwMF9DVFJMX0ZEKTsKKwkJCQlldzMyKENUUkwsIGN0cmwpOworCisJCQkJLyogQ29uZmlndXJlIEZsb3cgQ29udHJvbCBhZnRlciBsaW5rIHVwLiAqLworCQkJCXJldF92YWwgPQorCQkJCSAgICBlMTAwMGVfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoaHcpOworCQkJCWlmIChyZXRfdmFsKSB7CisJCQkJCWh3X2RiZyhodywgIkVycm9yIGNvbmZpZyBmbG93IGNvbnRyb2xcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cDsKKwkJCQlod19kYmcoaHcsICJBTl9QUk9HICAgLT4gRk9SQ0VEX1VQXG4iKTsKKwkJCX0KKwkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgZTEwMDBfc2VyZGVzX2xpbmtfZG93bjoKKwkJZGVmYXVsdDoKKwkJCS8qIFRoZSBsaW5rIHdhcyBkb3duIGJ1dCB0aGUgcmVjZWl2ZXIgaGFzIG5vdyBnYWluZWQKKwkJCSAqIHZhbGlkIHN5bmMsIHNvIGxldHMgc2VlIGlmIHdlIGNhbiBicmluZyB0aGUgbGluaworCQkJICogdXAuICovCisJCQlldzMyKFRYQ1csIG1hYy0+dHhjdyk7CisJCQlldzMyKENUUkwsCisJCQkgICAgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKKwkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQlod19kYmcoaHcsICJET1dOICAgICAgLT4gQU5fUFJPR1xuIik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghKHJ4Y3cgJiBFMTAwMF9SWENXX1NZTkNIKSkgeworCQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSBmYWxzZTsKKwkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPSBlMTAwMF9zZXJkZXNfbGlua19kb3duOworCQkJaHdfZGJnKGh3LCAiQU5ZU1RBVEUgIC0+IERPV05cbiIpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgc3luYywgYW5kIGNhbiB0b2xlcmF0ZSBvbmUKKwkJCSAqIGludmFsaWQgKElWKSBjb2Rld29yZCBiZWZvcmUgZGVjbGFyaW5nCisJCQkgKiBsaW5rIGRvd24sIHNvIHJlcmVhZCB0byBsb29rIGFnYWluCisJCQkgKi8KKwkJCXVkZWxheSgxMCk7CisJCQlyeGN3ID0gZXIzMihSWENXKTsKKwkJCWlmIChyeGN3ICYgRTEwMDBfUlhDV19JVikgeworCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPSBlMTAwMF9zZXJkZXNfbGlua19kb3duOworCQkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CisJCQkJaHdfZGJnKGh3LCAiQU5ZU1RBVEUgIC0+IERPV05cbiIpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGUxMDAwX3ZhbGlkX2xlZF9kZWZhdWx0XzgyNTcxIC0gVmVyaWZ5IGEgdmFsaWQgZGVmYXVsdCBMRUQgY29uZmlnCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgTlZNIChFRVBST00pCkBAIC0xMjIwLDExICsxNDI1LDE5IEBACiAJCXJldHVybiByZXRfdmFsOwogCX0KIAotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgJiYKLQkgICAgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0Y3NDYpCi0JCSpkYXRhID0gSURfTEVEX0RFRkFVTFRfODI1NzM7Ci0JZWxzZSBpZiAoKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEXzAwMDAgfHwgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCi0JCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GNzQ2KQorCQkJKmRhdGEgPSBJRF9MRURfREVGQVVMVF84MjU3MzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF8wMDAwIHx8CisJCSAgICAqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRkZGRikKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTUxNywzICsxNzMwLDE5IEBACiAJLm52bV9vcHMJCT0gJmU4MjU3MV9udm1fb3BzLAogfTsKIAorc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbyA9IHsKKwkubWFjCQkJPSBlMTAwMF84MjU4MywKKwkuZmxhZ3MJCQk9IEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSCisJCQkJICB8IEZMQUdfSEFTX1dPTAorCQkJCSAgfCBGTEFHX0FQTUVfSU5fQ1RSTDMKKwkJCQkgIHwgRkxBR19SWF9DU1VNX0VOQUJMRUQKKwkJCQkgIHwgRkxBR19IQVNfU01BUlRfUE9XRVJfRE9XTgorCQkJCSAgfCBGTEFHX0hBU19BTVQKKwkJCQkgIHwgRkxBR19IQVNfQ1RSTEVYVF9PTl9MT0FELAorCS5wYmEJCQk9IDIwLAorCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzXzgyNTcxLAorCS5tYWNfb3BzCQk9ICZlODI1NzFfbWFjX29wcywKKwkucGh5X29wcwkJPSAmZTgyX3BoeV9vcHNfYm0sCisJLm52bV9vcHMJCT0gJmU4MjU3MV9udm1fb3BzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKaW5kZXggZTZjYWYyOS4uMjQzYWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCkBAIC02OSw2ICs2OSw3IEBACiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDdfREFUQSAweDAwMDAwMDgwIC8qIFZhbHVlIG9mIFNXIERlZmluYWJsZSBQaW4gNyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9FRV9SU1QgICAgMHgwMDAwMjAwMCAvKiBSZWluaXRpYWxpemUgZnJvbSBFRVBST00gKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfUk9fRElTICAgIDB4MDAwMjAwMDAgLyogUmVsYXhlZCBPcmRlcmluZyBkaXNhYmxlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0RNQV9EWU5fQ0xLX0VOIDB4MDAwODAwMDAgLyogRE1BIER5bmFtaWMgQ2xvY2sgR2F0aW5nICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLIDB4MDBDMDAwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1BDSUVfU0VSREVTICAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0VJQU1FICAgICAgICAgIDB4MDEwMDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggMzdiY2IxOS4uZjM3MzYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogCWJvYXJkXzgyNTcyLAogCWJvYXJkXzgyNTczLAogCWJvYXJkXzgyNTc0LAorCWJvYXJkXzgyNTgzLAogCWJvYXJkXzgwMDAzZXMybGFuLAogCWJvYXJkX2ljaDhsYW4sCiAJYm9hcmRfaWNoOWxhbiwKQEAgLTE5NSw4ICsxOTYsNiBAQAogCXUxNiBsaW5rX2R1cGxleDsKIAl1MTYgZWVwcm9tX3ZlcnM7CiAKLQlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7IC8qIHByZXZlbnQgY29uY3VycmVudCB0YWlsIHVwZGF0ZXMgKi8KLQogCS8qIHRyYWNrIGRldmljZSB1cC9kb3duL3Rlc3Rpbmcgc3RhdGUgKi8KIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCkBAIC00MDEsNiArNDAwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3Ml9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTczX2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzRfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU4M19pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2ljaDhfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g5X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoMTBfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCmluZGV4IGU0ODk1NmQuLjRkMjVlZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwpAQCAtNzkwLDYgKzc5MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCWNhc2UgZTEwMDBfaWNoOGxhbjoKIAljYXNlIGUxMDAwX2ljaDlsYW46CiAJY2FzZSBlMTAwMF9pY2gxMGxhbjoKQEAgLTE1ODksNyArMTU5MCw3IEBACiAJKmRhdGEgPSAwOwogCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKIAkJaW50IGkgPSAwOwotCQlody0+bWFjLnNlcmRlc19oYXNfbGluayA9IDA7CisJCWh3LT5tYWMuc2VyZGVzX2hhc19saW5rID0gZmFsc2U7CiAKIAkJLyoKIAkJICogT24gc29tZSBibGFkZSBzZXJ2ZXIgZGVzaWducywgbGluayBlc3RhYmxpc2htZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCmluZGV4IDJkNGNlMDQuLmQ4YjgyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC0zMzksNiArMzM5LDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTczRV9JQU1UCQkweDEwOEMKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTczTAkJCTB4MTA5QQogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzRMCQkJMHgxMEQzCisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NExBCQkJMHgxMEY2CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU4M1YgICAgICAgICAgICAgICAgICAgICAweDE1MEMKIAogI2RlZmluZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVAkweDEwOTYKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX1NFUkRFU19EUFQJMHgxMDk4CkBAIC0zNzYsNiArMzc4LDcgQEAKIAllMTAwMF84MjU3MiwKIAllMTAwMF84MjU3MywKIAllMTAwMF84MjU3NCwKKwllMTAwMF84MjU4MywKIAllMTAwMF84MDAwM2VzMmxhbiwKIAllMTAwMF9pY2g4bGFuLAogCWUxMDAwX2ljaDlsYW4sCkBAIC00NTksNiArNDYyLDEzIEBACiAJZTEwMDBfc21hcnRfc3BlZWRfb2ZmCiB9OwogCitlbnVtIGUxMDAwX3NlcmRlc19saW5rX3N0YXRlIHsKKwllMTAwMF9zZXJkZXNfbGlua19kb3duID0gMCwKKwllMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzLAorCWUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfY29tcGxldGUsCisJZTEwMDBfc2VyZGVzX2xpbmtfZm9yY2VkX3VwCit9OworCiAvKiBSZWNlaXZlIERlc2NyaXB0b3IgKi8KIHN0cnVjdCBlMTAwMF9yeF9kZXNjIHsKIAlfX2xlNjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLwpAQCAtNzg3LDYgKzc5Nyw3IEBACiAJYm9vbCBpbl9pZnNfbW9kZTsKIAlib29sIHNlcmRlc19oYXNfbGluazsKIAlib29sIHR4X3BrdF9maWx0ZXJpbmc7CisJZW51bSBlMTAwMF9zZXJkZXNfbGlua19zdGF0ZSBzZXJkZXNfbGlua19zdGF0ZTsKIH07CiAKIHN0cnVjdCBlMTAwMF9waHlfaW5mbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwppbmRleCBlNDE1ZTgxLi42ZDFhYWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTM5MCw4ICszOTAsNiBAQAogfQogCiBzdGF0aWMgREVGSU5FX01VVEVYKG52bV9tdXRleCk7Ci1zdGF0aWMgcGlkX3QgbnZtX293bmVyX3BpZCA9IC0xOwotc3RhdGljIGNoYXIgbnZtX293bmVyX25hbWVbVEFTS19DT01NX0xFTl0gPSAiIjsKIAogLyoqCiAgKiAgZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbiAtIEFjcXVpcmUgc29mdHdhcmUgY29udHJvbCBmbGFnCkBAIC00MDgsMTYgKzQwNiw3IEBACiAKIAltaWdodF9zbGVlcCgpOwogCi0JaWYgKCFtdXRleF90cnlsb2NrKCZudm1fbXV0ZXgpKSB7Ci0JCVdBUk4oMSwgS0VSTl9FUlIgImUxMDAwZSBtdXRleCBjb250ZW50aW9uLiBPd25lZCBieSBwcm9jZXNzICIKLQkJICAgICAiJXMgKHBpZCAlZCksIHJlcXVpcmVkIGJ5IHByb2Nlc3MgJXMgKHBpZCAlZClcbiIsCi0JCSAgICAgbnZtX293bmVyX25hbWUsIG52bV9vd25lcl9waWQsCi0JCSAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKLQotCQltdXRleF9sb2NrKCZudm1fbXV0ZXgpOwotCX0KLQludm1fb3duZXJfcGlkID0gY3VycmVudC0+cGlkOwotCXN0cm5jcHkobnZtX293bmVyX25hbWUsIGN1cnJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCW11dGV4X2xvY2soJm52bV9tdXRleCk7CiAKIAl3aGlsZSAodGltZW91dCkgewogCQlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwpAQCAtNDM1LDggKzQyNCw2IEBACiAJCWh3X2RiZyhodywgIkZXIG9yIEhXIGhhcyBsb2NrZWQgdGhlIHJlc291cmNlIGZvciB0b28gbG9uZy5cbiIpOwogCQlleHRjbmZfY3RybCAmPSB+RTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCQlldzMyKEVYVENORl9DVFJMLCBleHRjbmZfY3RybCk7Ci0JCW52bV9vd25lcl9waWQgPSAtMTsKLQkJc3RyY3B5KG52bV9vd25lcl9uYW1lLCAiIik7CiAJCW11dGV4X3VubG9jaygmbnZtX211dGV4KTsKIAkJcmV0dXJuIC1FMTAwMF9FUlJfQ09ORklHOwogCX0KQEAgLTQ2MCw4ICs0NDcsNiBAQAogCWV4dGNuZl9jdHJsICY9IH5FMTAwMF9FWFRDTkZfQ1RSTF9TV0ZMQUc7CiAJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwogCi0JbnZtX293bmVyX3BpZCA9IC0xOwotCXN0cmNweShudm1fb3duZXJfbmFtZSwgIiIpOwogCW11dGV4X3VubG9jaygmbnZtX211dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCmluZGV4IDY2NzQxMTAuLjE4YTRmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKQEAgLTE1OSw0MSArMTU5LDYgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfbXRhX3NldCAtIFNldCBtdWx0aWNhc3QgZmlsdGVyIHRhYmxlIGFkZHJlc3MKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICogIEBoYXNoX3ZhbHVlOiBkZXRlcm1pbmVzIHRoZSBNVEEgcmVnaXN0ZXIgYW5kIGJpdCB0byBzZXQKLSAqCi0gKiAgVGhlIG11bHRpY2FzdCB0YWJsZSBhZGRyZXNzIGlzIGEgcmVnaXN0ZXIgYXJyYXkgb2YgMzItYml0IHJlZ2lzdGVycy4KLSAqICBUaGUgaGFzaF92YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHJlZ2lzdGVyIHRoZSBiaXQgaXMgaW4sIHRoZQotICogIGN1cnJlbnQgdmFsdWUgaXMgcmVhZCwgdGhlIG5ldyBiaXQgaXMgT1InZCBpbiBhbmQgdGhlIG5ldyB2YWx1ZSBpcwotICogIHdyaXR0ZW4gYmFjayBpbnRvIHRoZSByZWdpc3Rlci4KLSAqKi8KLXN0YXRpYyB2b2lkIGUxMDAwX210YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGhhc2hfdmFsdWUpCi17Ci0JdTMyIGhhc2hfYml0LCBoYXNoX3JlZywgbXRhOwotCi0JLyoKLQkgKiBUaGUgTVRBIGlzIGEgcmVnaXN0ZXIgYXJyYXkgb2YgMzItYml0IHJlZ2lzdGVycy4gSXQgaXMKLQkgKiB0cmVhdGVkIGxpa2UgYW4gYXJyYXkgb2YgKDMyKm10YV9yZWdfY291bnQpIGJpdHMuICBXZSB3YW50IHRvCi0JICogc2V0IGJpdCBCaXRBcnJheVtoYXNoX3ZhbHVlXS4gU28gd2UgZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVyCi0JICogdGhlIGJpdCBpcyBpbiwgcmVhZCBpdCwgT1IgaW4gdGhlIG5ldyBiaXQsIHRoZW4gd3JpdGUKLQkgKiBiYWNrIHRoZSBuZXcgdmFsdWUuICBUaGUgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpIHNlcnZlcyBhcyBhCi0JICogbWFzayB0byBiaXRzIDMxOjUgb2YgdGhlIGhhc2ggdmFsdWUgd2hpY2ggZ2l2ZXMgdXMgdGhlCi0JICogcmVnaXN0ZXIgd2UncmUgbW9kaWZ5aW5nLiAgVGhlIGhhc2ggYml0IHdpdGhpbiB0aGF0IHJlZ2lzdGVyCi0JICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXIgNSBiaXRzIG9mIHRoZSBoYXNoIHZhbHVlLgotCSAqLwotCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gNSkgJiAoaHctPm1hYy5tdGFfcmVnX2NvdW50IC0gMSk7Ci0JaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKLQotCW10YSA9IEUxMDAwX1JFQURfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGhhc2hfcmVnKTsKLQotCW10YSB8PSAoMSA8PCBoYXNoX2JpdCk7Ci0KLQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaGFzaF9yZWcsIG10YSk7Ci0JZTFlX2ZsdXNoKCk7Ci19Ci0KLS8qKgogICogIGUxMDAwX2hhc2hfbWNfYWRkciAtIEdlbmVyYXRlIGEgbXVsdGljYXN0IGhhc2ggdmFsdWUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtY19hZGRyOiBwb2ludGVyIHRvIGEgbXVsdGljYXN0IGFkZHJlc3MKQEAgLTI4MSw4ICsyNDYsMTMgQEAKIAkJCQkJdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCiAJCQkJCXUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKIHsKLQl1MzIgaGFzaF92YWx1ZTsKIAl1MzIgaTsKKwl1MzIgKm1jYXJyYXkgPSBremFsbG9jKGh3LT5tYWMubXRhX3JlZ19jb3VudCAqIHNpemVvZih1MzIpLCBHRlBfQVRPTUlDKTsKKworCWlmICghbWNhcnJheSkgeworCQlwcmludGsoS0VSTl9FUlIgIm11bHRpY2FzdCBhcnJheSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBMb2FkIHRoZSBmaXJzdCBzZXQgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyBpbnRvIHRoZSBleGFjdApAQCAtMzAyLDIwICsyNzIsMjQgQEAKIAkJfQogCX0KIAotCS8qIENsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgTVRBICovCi0JaHdfZGJnKGh3LCAiQ2xlYXJpbmcgTVRBXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgaHctPm1hYy5tdGFfcmVnX2NvdW50OyBpKyspIHsKLQkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGksIDApOwotCQllMWVfZmx1c2goKTsKLQl9Ci0KIAkvKiBMb2FkIGFueSByZW1haW5pbmcgbXVsdGljYXN0IGFkZHJlc3NlcyBpbnRvIHRoZSBoYXNoIHRhYmxlLiAqLwogCWZvciAoOyBtY19hZGRyX2NvdW50ID4gMDsgbWNfYWRkcl9jb3VudC0tKSB7CisJCXUzMiBoYXNoX3ZhbHVlLCBoYXNoX3JlZywgaGFzaF9iaXQsIG10YTsKIAkJaGFzaF92YWx1ZSA9IGUxMDAwX2hhc2hfbWNfYWRkcihodywgbWNfYWRkcl9saXN0KTsKIAkJaHdfZGJnKGh3LCAiSGFzaCB2YWx1ZSA9IDB4JTAzWFxuIiwgaGFzaF92YWx1ZSk7Ci0JCWUxMDAwX210YV9zZXQoaHcsIGhhc2hfdmFsdWUpOworCQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpOworCQloYXNoX2JpdCA9IGhhc2hfdmFsdWUgJiAweDFGOworCQltdGEgPSAoMSA8PCBoYXNoX2JpdCk7CisJCW1jYXJyYXlbaGFzaF9yZWddIHw9IG10YTsKIAkJbWNfYWRkcl9saXN0ICs9IEVUSF9BTEVOOwogCX0KKworCS8qIHdyaXRlIHRoZSBoYXNoIHRhYmxlIGNvbXBsZXRlbHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHctPm1hYy5tdGFfcmVnX2NvdW50OyBpKyspCisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBpLCBtY2FycmF5W2ldKTsKKworCWUxZV9mbHVzaCgpOworCWtmcmVlKG1jYXJyYXkpOwogfQogCiAvKioKQEAgLTUwMSw3ICs0NzUsNyBAQAogCQlldzMyKFRYQ1csIG1hYy0+dHhjdyk7CiAJCWV3MzIoQ1RSTCwgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKIAotCQltYWMtPnNlcmRlc19oYXNfbGluayA9IDE7CisJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU2Niw3ICs1NDAsNyBAQAogCQlldzMyKFRYQ1csIG1hYy0+dHhjdyk7CiAJCWV3MzIoQ1RSTCwgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKIAotCQltYWMtPnNlcmRlc19oYXNfbGluayA9IDE7CisJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gdHJ1ZTsKIAl9IGVsc2UgaWYgKCEoRTEwMDBfVFhDV19BTkUgJiBlcjMyKFRYQ1cpKSkgewogCQkvKgogCQkgKiBJZiB3ZSBmb3JjZSBsaW5rIGZvciBub24tYXV0by1uZWdvdGlhdGlvbiBzd2l0Y2gsIGNoZWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggOTE4MTdkMC4uYmZiMmQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwpAQCAtNDQsMTAgKzQ0LDExIEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zX3BhcmFtcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiAjaW5jbHVkZSAiZTEwMDAuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjMuMy1rNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zLjQtazQiCiBjaGFyIGUxMDAwZV9kcml2ZXJfbmFtZVtdID0gImUxMDAwZSI7CiBjb25zdCBjaGFyIGUxMDAwZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKQEAgLTU2LDYgKzU3LDcgQEAKIAlbYm9hcmRfODI1NzJdCQk9ICZlMTAwMF84MjU3Ml9pbmZvLAogCVtib2FyZF84MjU3M10JCT0gJmUxMDAwXzgyNTczX2luZm8sCiAJW2JvYXJkXzgyNTc0XQkJPSAmZTEwMDBfODI1NzRfaW5mbywKKwlbYm9hcmRfODI1ODNdCQk9ICZlMTAwMF84MjU4M19pbmZvLAogCVtib2FyZF84MDAwM2VzMmxhbl0JPSAmZTEwMDBfZXMyX2luZm8sCiAJW2JvYXJkX2ljaDhsYW5dCQk9ICZlMTAwMF9pY2g4X2luZm8sCiAJW2JvYXJkX2ljaDlsYW5dCQk9ICZlMTAwMF9pY2g5X2luZm8sCkBAIC05OSw4ICsxMDEsOCBAQAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKIAlpZiAoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQKSkKLQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsCi0JCQkJCSBsZTE2X3RvX2NwdSh2bGFuKSk7CisJCXZsYW5fZ3JvX3JlY2VpdmUoJmFkYXB0ZXItPm5hcGksIGFkYXB0ZXItPnZsZ3JwLAorCQkJCSBsZTE2X3RvX2NwdSh2bGFuKSwgc2tiKTsKIAllbHNlCiAJCW5hcGlfZ3JvX3JlY2VpdmUoJmFkYXB0ZXItPm5hcGksIHNrYik7CiB9CkBAIC01NjUsMTUgKzU2NywxNCBAQAogc3RhdGljIHZvaWQgZTEwMDBfcHV0X3R4YnVmKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgICBzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBidWZmZXJfaW5mby0+ZG1hLAotCQkJICAgICAgIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKLQl9CisJYnVmZmVyX2luZm8tPmRtYSA9IDA7CiAJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJc2tiX2RtYV91bm1hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBidWZmZXJfaW5mby0+c2tiLAorCQkgICAgICAgICAgICAgIERNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJfQorCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKIH0KIAogc3RhdGljIHZvaWQgZTEwMDBfcHJpbnRfdHhfaGFuZyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKQEAgLTYyMCwxNSArNjIxLDE2IEBACiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJdW5zaWduZWQgaW50IGksIGVvcDsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotCWJvb2wgY2xlYW5lZCA9IDA7CisJYm9vbCBjbGVhbmVkOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9ieXRlcyA9IDAsIHRvdGFsX3R4X3BhY2tldHMgPSAwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGVvcCk7CiAKLQl3aGlsZSAoZW9wX2Rlc2MtPnVwcGVyLmRhdGEgJiBjcHVfdG9fbGUzMihFMTAwMF9UWERfU1RBVF9ERCkpIHsKLQkJZm9yIChjbGVhbmVkID0gMDsgIWNsZWFuZWQ7ICkgeworCXdoaWxlICgoZW9wX2Rlc2MtPnVwcGVyLmRhdGEgJiBjcHVfdG9fbGUzMihFMTAwMF9UWERfU1RBVF9ERCkpICYmCisJICAgICAgIChjb3VudCA8IHR4X3JpbmctPmNvdW50KSkgeworCQlmb3IgKGNsZWFuZWQgPSAwOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKQEAgLTY1NCwxMCArNjU2LDYgQEAKIAogCQllb3AgPSB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOwogCQllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGVvcCk7Ci0jZGVmaW5lIEUxMDAwX1RYX1dFSUdIVCA2NAotCQkvKiB3ZWlnaHQgb2YgYSBzb3J0IGZvciB0eCwgdG8gYXZvaWQgZW5kbGVzcyB0cmFuc21pdCBjbGVhbnVwICovCi0JCWlmIChjb3VudCsrID09IEUxMDAwX1RYX1dFSUdIVCkKLQkJCWJyZWFrOwogCX0KIAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwpAQCAtNjc4LDEzICs2NzYsMTEgQEAKIAl9CiAKIAlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpIHsKLQkJLyoKLQkJICogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQotCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpCi0JCSAqLworCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCisJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSAwOwotCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKLQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAKIAkJCSAgICAgICArIChhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciAqIEhaKSkKIAkJICAgICYmICEoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX1RYT0ZGKSkgewogCQkJZTEwMDBfcHJpbnRfdHhfaGFuZyhhZGFwdGVyKTsKQEAgLTY5NSw3ICs2OTEsNyBAQAogCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKLQlyZXR1cm4gY2xlYW5lZDsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCiAvKioKQEAgLTExNTIsNyArMTE0OCw3IEBACiAJICogcmVhZCBJQ1IgZGlzYWJsZXMgaW50ZXJydXB0cyB1c2luZyBJQU0KIAkgKi8KIAotCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKKwlpZiAoaWNyICYgRTEwMDBfSUNSX0xTQykgewogCQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7CiAJCS8qCiAJCSAqIElDSDggd29ya2Fyb3VuZC0tIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBjYWJsZQpAQCAtMTE3OSwxMiArMTE3NSwxMiBAQAogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwogCX0KIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEyMTgsNyArMTIxNCw3IEBACiAJICogSU1DIHdyaXRlCiAJICovCiAKLQlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQkvKgogCQkgKiBJQ0g4IHdvcmthcm91bmQtLSBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gY2FibGUKQEAgLTEyNDYsMTIgKzEyNDIsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjY1LDcgKzEyNjEsOCBAQAogCXUzMiBpY3IgPSBlcjMyKElDUik7CiAKIAlpZiAoIShpY3IgJiBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEKSkgewotCQlldzMyKElNUywgRTEwMDBfSU1TX09USEVSKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlldzMyKElNUywgRTEwMDBfSU1TX09USEVSKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIApAQCAtMTI4Miw3ICsxMjc5LDggQEAKIAl9CiAKIG5vX2xpbmtfaW50ZXJydXB0OgotCWV3MzIoSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX09USEVSKTsKKwlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJZXczMihJTVMsIEUxMDAwX0lNU19MU0MgfCBFMTAwMF9JTVNfT1RIRVIpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTMyMCwxMCArMTMxOCwxMCBAQAogCQlhZGFwdGVyLT5yeF9yaW5nLT5zZXRfaXRyID0gMDsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTY5OCw3ICsxNjk2LDYgQEAKIAogCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIGVycjoKQEAgLTIwMDcsMzIgKzIwMDQsMjUgQEAKIAkgICAgIShhZGFwdGVyLT5yeF9yaW5nLT5pbXNfdmFsICYgYWRhcHRlci0+dHhfcmluZy0+aW1zX3ZhbCkpCiAJCWdvdG8gY2xlYW5fcng7CiAKLQkvKgotCSAqIGUxMDAwX2NsZWFuIGlzIGNhbGxlZCBwZXItY3B1LiAgVGhpcyBsb2NrIHByb3RlY3RzCi0JICogdHhfcmluZyBmcm9tIGJlaW5nIGNsZWFuZWQgYnkgbXVsdGlwbGUgY3B1cwotCSAqIHNpbXVsdGFuZW91c2x5LiAgQSBmYWlsdXJlIG9idGFpbmluZyB0aGUgbG9jayBtZWFucwotCSAqIHR4X3JpbmcgaXMgY3VycmVudGx5IGJlaW5nIGNsZWFuZWQgYW55d2F5LgotCSAqLwotCWlmIChzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spKSB7Ci0JCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlcik7Ci0JCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKTsKLQl9CisJdHhfY2xlYW5lZCA9IGUxMDAwX2NsZWFuX3R4X2lycShhZGFwdGVyKTsKIAogY2xlYW5fcng6CiAJYWRhcHRlci0+Y2xlYW5fcngoYWRhcHRlciwgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAotCWlmICh0eF9jbGVhbmVkKQorCWlmICghdHhfY2xlYW5lZCkKIAkJd29ya19kb25lID0gYnVkZ2V0OwogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQogCQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCi0JCQlldzMyKElNUywgYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCk7Ci0JCWVsc2UKLQkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQorCQkJCWV3MzIoSU1TLCBhZGFwdGVyLT5yeF9yaW5nLT5pbXNfdmFsKTsKKwkJCWVsc2UKKwkJCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQl9CiAJfQogCiAJcmV0dXJuIHdvcmtfZG9uZTsKQEAgLTI5MjIsOCArMjkxMiw2IEBACiAJaWYgKGUxMDAwX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0KIAkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNpbmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMzMyMCw3ICszMzA4LDcgQEAKIAogCWFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjICs9IGVyMzIoQUxHTkVSUkMpOwogCWFkYXB0ZXItPnN0YXRzLnJ4ZXJyYyArPSBlcjMyKFJYRVJSQyk7Ci0JaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkKKwlpZiAoKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkgJiYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU4MykpCiAJCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IGVyMzIoVE5DUlMpOwogCWFkYXB0ZXItPnN0YXRzLmNleHRlcnIgKz0gZXIzMihDRVhURVJSKTsKIAlhZGFwdGVyLT5zdGF0cy50c2N0YyArPSBlcjMyKFRTQ1RDKTsKQEAgLTM3NzcsMjMgKzM3NjUsMzAgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCBjc3M7CiAJdTMyIGNtZF9sZW4gPSBFMTAwMF9UWERfQ01EX0RFWFQ7CisJX19iZTE2IHByb3RvY29sOwogCiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpCisJCXByb3RvY29sID0gdmxhbl9ldGhfaGRyKHNrYiktPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CisJZWxzZQorCQlwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CisKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQljbWRfbGVuIHw9IEUxMDAwX1RYRF9DTURfVENQOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJLyogWFhYIG5vdCBoYW5kbGluZyBhbGwgSVBWNiBoZWFkZXJzICovCiAJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKHVubGlrZWx5KG5ldF9yYXRlbGltaXQoKSkpCi0JCQllX3dhcm4oImNoZWNrc3VtX3BhcnRpYWwgcHJvdG89JXghXG4iLCBza2ItPnByb3RvY29sKTsKKwkJCWVfd2FybigiY2hlY2tzdW1fcGFydGlhbCBwcm90bz0leCFcbiIsCisJCQkgICAgICAgYmUxNl90b19jcHUocHJvdG9jb2wpKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zODMyLDQyICszODI3LDQwIEBACiB7CiAJc3RydWN0IGUxMDAwX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplLCBjb3VudCA9IDAsIGk7CiAJdW5zaWduZWQgaW50IGY7CisJZG1hX2FkZHJfdCAqbWFwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCisJaWYgKHNrYl9kbWFfbWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOworCQlhZGFwdGVyLT50eF9kbWFfZmFpbGVkKys7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisJb2Zmc2V0ID0gMDsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBtYXhfcGVyX3R4ZCk7CiAKLQkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKLQkJICogaW4gVFNPIG1vZGUuICBBcHBlbmQgNC1ieXRlIHNlbnRpbmVsIGRlc2MgKi8KLQkJaWYgKG1zcyAmJiAhbnJfZnJhZ3MgJiYgc2l6ZSA9PSBsZW4gJiYgc2l6ZSA+IDgpCi0JCQlzaXplIC09IDQ7Ci0KIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCS8qIHNldCB0aW1lX3N0YW1wICpiZWZvcmUqIGRtYSB0byBoZWxwIGF2b2lkIGEgcG9zc2libGUgcmFjZSAqLwogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKLQkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCi0JCQkJc2l6ZSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihhZGFwdGVyLT5wZGV2LCBidWZmZXJfaW5mby0+ZG1hKSkgewotCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOwotCQkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOwotCQkJcmV0dXJuIC0xOwotCQl9CiAJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKKwkJY291bnQrKzsKIAogCQlsZW4gLT0gc2l6ZTsKIAkJb2Zmc2V0ICs9IHNpemU7Ci0JCWNvdW50Kys7Ci0JCWkrKzsKLQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCQlpID0gMDsKKworCQlpZiAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0zODc1LDQ5ICszODY4LDI3IEBACiAKIAkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOwogCQlsZW4gPSBmcmFnLT5zaXplOwotCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKKwkJb2Zmc2V0ID0gMDsKIAogCQl3aGlsZSAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwotCQkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKLQkJCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCi0JCQlpZiAobXNzICYmIGYgPT0gKG5yX2ZyYWdzLTEpICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KQotCQkJCXNpemUgLT0gNDsKIAogCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJZnJhZy0+cGFnZSwKLQkJCQkJb2Zmc2V0LAotCQkJCQlzaXplLAotCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldiwKLQkJCQkJCSAgYnVmZmVyX2luZm8tPmRtYSkpIHsKLQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkJCSJUWCBETUEgcGFnZSBtYXAgZmFpbGVkXG4iKTsKLQkJCQlhZGFwdGVyLT50eF9kbWFfZmFpbGVkKys7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCiAJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0KLQkJCWkrKzsKLQkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJCWkgPSAwOwogCQl9CiAJfQogCi0JaWYgKGkgPT0gMCkKLQkJaSA9IHR4X3JpbmctPmNvdW50IC0gMTsKLQllbHNlCi0JCWktLTsKLQogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0ubmV4dF90b193YXRjaCA9IGk7CiAKQEAgLTQwNjksNyArNDA0MCw2IEBACiAJdW5zaWduZWQgaW50IG1heF90eGRfcHdyID0gRTEwMDBfTUFYX1RYRF9QV1I7CiAJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXVuc2lnbmVkIGludCBucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbXNzOwogCWludCBjb3VudCA9IDA7CkBAIC00MTM4LDE4ICs0MTA4LDEyIEBACiAJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eF9wa3RfZmlsdGVyaW5nKQogCQllMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oYWRhcHRlciwgc2tiKTsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncykpCi0JCS8qIENvbGxpc2lvbiAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQogCS8qCiAJICogbmVlZDogY291bnQgKyAyIGRlc2MgZ2FwIHRvIGtlZXAgdGFpbCBmcm9tIHRvdWNoaW5nCiAJICogaGVhZCwgb3RoZXJ3aXNlIHRyeSBuZXh0IHRpbWUKIAkgKi8KLQlpZiAoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIGNvdW50ICsgMikpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfcXVldWVfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIGNvdW50ICsgMikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9CiAKIAlpZiAoYWRhcHRlci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CiAJCXR4X2ZsYWdzIHw9IEUxMDAwX1RYX0ZMQUdTX1ZMQU47CkBAIC00MTYxLDcgKzQxMjUsNiBAQAogCXRzbyA9IGUxMDAwX3RzbyhhZGFwdGVyLCBza2IpOwogCWlmICh0c28gPCAwKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCkBAIC00MTc4LDIyICs0MTQxLDIwIEBACiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19JUFY0OwogCisJLyogaWYgY291bnQgaXMgMCB0aGVuIG1hcHBpbmcgZXJyb3IgaGFzIG9jY3VyZWQgKi8KIAljb3VudCA9IGUxMDAwX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0LCBtYXhfcGVyX3R4ZCwgbnJfZnJhZ3MsIG1zcyk7Ci0JaWYgKGNvdW50IDwgMCkgewotCQkvKiBoYW5kbGUgcGNpX21hcF9zaW5nbGUoKSBlcnJvciBpbiBlMTAwMF90eF9tYXAgKi8KKwlpZiAoY291bnQpIHsKKwkJZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfZmxhZ3MsIGNvdW50KTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIE1BWF9TS0JfRlJBR1MgKyAyKTsKKworCX0gZWxzZSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKIAl9CiAKLQllMTAwMF90eF9xdWV1ZShhZGFwdGVyLCB0eF9mbGFncywgY291bnQpOwotCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIE1BWF9TS0JfRlJBR1MgKyAyKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNDU0Myw2ICs0NTA0LDE0IEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJLyogQUVSIChBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcpIGhvb2tzICovCisJZXJyID0gcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZmFpbGVkICIKKwkJICAgICAgICAgICAgICAgICAgICAiMHgleFxuIiwgZXJyKTsKKwkJLyogbm9uLWZhdGFsLCBjb250aW51ZSAqLworCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CkBAIC00NjM3LDI0ICs0NjA2LDI5IEBACiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGVycjsKKwlwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDsKIAogCWUxMDAwZV9kaXNhYmxlX2wxYXNwbShwZGV2KTsKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7Ci0JCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCQlyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0gZWxzZSB7CisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworCisJCWUxMDAwZV9yZXNldChhZGFwdGVyKTsKKwkJZXczMihXVVMsIH4wKTsKKwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogCX0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKIAotCWUxMDAwZV9yZXNldChhZGFwdGVyKTsKLQlldzMyKFdVUywgfjApOwotCi0JcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKioKQEAgLTQ5MjIsMTIgKzQ4OTYsNiBAQAogCWlmIChwY2lfdXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAotCS8qCi0JICogV2Ugc2hvdWxkIG5vdCBiZSB1c2luZyBMTFRYIGFueW1vcmUsIGJ1dCB3ZSBhcmUgc3RpbGwgVHggZmFzdGVyIHdpdGgKLQkgKiBpdC4KLQkgKi8KLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQogCWlmIChlMTAwMGVfZW5hYmxlX21uZ19wYXNzX3RocnUoJmFkYXB0ZXItPmh3KSkKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gRkxBR19NTkdfUFRfRU5BQkxFRDsKIApAQCAtNTA5MSw2ICs1MDU5LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgZXJyOwogCiAJLyoKIAkgKiBmbHVzaF9zY2hlZHVsZWQgd29yayBtYXkgcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGFzaywgc28KQEAgLTUxMjUsNiArNTA5NCwxMiBAQAogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIAorCS8qIEFFUiBkaXNhYmxlICovCisJZXJyID0gcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJaWYgKGVycikKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkgICAgICAgICJwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBmYWlsZWQgMHgleFxuIiwgZXJyKTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIApAQCAtNTE1Niw2ICs1MTMxLDggQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzNMKSwgYm9hcmRfODI1NzMgfSwKIAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NEwpLCBib2FyZF84MjU3NCB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NExBKSwgYm9hcmRfODI1NzQgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1ODNWKSwgYm9hcmRfODI1ODMgfSwKIAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9DT1BQRVJfRFBUKSwKIAkgIGJvYXJkXzgwMDAzZXMybGFuIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMjEwMC5jIGIvZHJpdmVycy9uZXQvZTIxMDAuYwppbmRleCBiMDdiYTE5Li5kMmY2ZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UyMTAwLmMKQEAgLTIxNiwxMyArMjE2LDEzIEBACiAJCXByaW50aygiICUwMlgiLCBzdGF0aW9uX2FkZHJbaV0pOwogCiAJaWYgKGRldi0+aXJxIDwgMikgewotCQlpbnQgaXJxbGlzdFtdID0gezE1LDExLDEwLDEyLDUsOSwzLDR9LCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlpbnQgaXJxbGlzdFtdID0gezE1LCAxMSwgMTAsIDEyLCA1LCA5LCAzLCA0fTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJxbGlzdCk7IGkrKykKIAkJCWlmIChyZXF1ZXN0X2lycSAoaXJxbGlzdFtpXSwgTlVMTCwgMCwgImJvZ3VzIiwgTlVMTCkgIT0gLUVCVVNZKSB7CiAJCQkJZGV2LT5pcnEgPSBpcnFsaXN0W2ldOwogCQkJCWJyZWFrOwogCQkJfQotCQlpZiAoaSA+PSA4KSB7CisJCWlmIChpID49IEFSUkFZX1NJWkUoaXJxbGlzdCkpIHsKIAkJCXByaW50aygiIHVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOwogCQkJcmV0dmFsID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWVwcm8uYyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKaW5kZXggZTE4N2M4OC4uY2MyYWI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWVwcm8uYworKysgYi9kcml2ZXJzL25ldC9lZXByby5jCkBAIC03MzksNiArNzM5LDE3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWVwcm9fZXRodG9vbF9vcHM7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWVwcm9fbmV0ZGV2X29wcyA9IHsKKyAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBlZXByb19vcGVuLAorIAkubmRvX3N0b3AgICAgICAgICAgICAgICA9IGVlcHJvX2Nsb3NlLAorIAkubmRvX3N0YXJ0X3htaXQgICAgCT0gZWVwcm9fc2VuZF9wYWNrZXQsCisgCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorIAkubmRvX3R4X3RpbWVvdXQJCT0gZWVwcm9fdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyogVGhpcyBpcyB0aGUgcmVhbCBwcm9iZSByb3V0aW5lLiAgTGludXggaGFzIGEgaGlzdG9yeSBvZiBmcmllbmRseSBkZXZpY2UKICAgIHByb2JlcyBvbiB0aGUgSVNBIGJ1cy4gIEEgZ29vZCBkZXZpY2UgcHJvYmUgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCiAgICB2ZXJpZmllcyB0aGF0IHRoZSBjb3JyZWN0IGRldmljZSBleGlzdHMgYW5kIGZ1bmN0aW9ucy4gICovCkBAIC04NTEsMTEgKzg2Miw3IEBACiAgCQl9CiAgCX0KIAotIAlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGVlcHJvX29wZW47Ci0gCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gZWVwcm9fY2xvc2U7Ci0gCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gZWVwcm9fc2VuZF9wYWNrZXQ7Ci0gCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLSAJZGV2LT50eF90aW1lb3V0CQk9IGVlcHJvX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZlZXByb19uZXRkZXZfb3BzOwogIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gVFhfVElNRU9VVDsKIAlkZXYtPmV0aHRvb2xfb3BzCT0gJmVlcHJvX2V0aHRvb2xfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5jIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwppbmRleCA5ZmYzZjJmLi4xNjg2ZGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKQEAgLTEwNDMsNiArMTA0MywxNyBAQAogCWxwLT5sYXN0X3R4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlZXhwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlZXhwX29wZW4sCisJLm5kb19zdG9wIAkJPSBlZXhwX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlZXhwX3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlZXhwX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGVleHBfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIFNhbml0eSBjaGVjayB0aGUgc3VzcGVjdGVkIEV0aGVyRXhwcmVzcyBjYXJkCiAgKiBSZWFkIGhhcmR3YXJlIGFkZHJlc3MsIHJlc2V0IGNhcmQsIHNpemUgbWVtb3J5IGFuZCBpbml0aWFsaXplIGJ1ZmZlcgpAQCAtMTE2MywxMSArMTE3NCw3IEBACiAJbHAtPnJ4X2J1Zl9zdGFydCA9IFRYX0JVRl9TVEFSVCArIChscC0+bnVtX3R4X2J1ZnMqVFhfQlVGX1NJWkUpOwogCWxwLT53aWR0aCA9IGJ1c3dpZHRoOwogCi0JZGV2LT5vcGVuID0gZWV4cF9vcGVuOwotCWRldi0+c3RvcCA9IGVleHBfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlZXhwX3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZWV4cF9zZXRfbXVsdGljYXN0OwotCWRldi0+dHhfdGltZW91dCA9IGVleHBfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWV4cF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAyKkhaOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAppbmRleCA2MjcxYjk0Li42ZTMxN2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaApAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJlaGVhIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiRUhFQV8wMDk2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiRUhFQV8wMTAwIgogCiAvKiBlSEVBIGNhcGFiaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgRExQQVJfUE9SVF9BRERfUkVNIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IGRmZTkyMjYuLmFjMGM1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtMTU1LDYgKzE1NSw4IEBACiAJaW50IG51bV9md19oYW5kbGVzLCBrLCBsOwogCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBoYW5kbGVzICovCisJbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CiAJCW51bV9hZGFwdGVycysrOwogCkBAIC0xNzYsMTUgKzE3OCwxOSBAQAogCWlmIChudW1fZndfaGFuZGxlcykgewogCQlhcnIgPSBremFsbG9jKG51bV9md19oYW5kbGVzICogc2l6ZW9mKCphcnIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFhcnIpCi0JCQlyZXR1cm47ICAvKiBLZWVwIHRoZSBleGlzdGluZyBhcnJheSAqLworCQkJZ290byBvdXQ7ICAvKiBLZWVwIHRoZSBleGlzdGluZyBhcnJheSAqLwogCX0gZWxzZQogCQlnb3RvIG91dF91cGRhdGU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG51bV9hZGFwdGVycyA9PSAwKQorCQkJYnJlYWs7CisKIAkJZm9yIChrID0gMDsgayA8IEVIRUFfTUFYX1BPUlRTOyBrKyspIHsKIAkJCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBhZGFwdGVyLT5wb3J0W2tdOwogCi0JCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkpCisJCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkKKwkJCQl8fCAobnVtX3BvcnRzID09IDApKQogCQkJCWNvbnRpbnVlOwogCiAJCQlmb3IgKGwgPSAwOwpAQCAtMjA3LDYgKzIxMyw3IEBACiAJCQl9CiAJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJYXJyW2krK10uZndoID0gcG9ydC0+cXBfZXEtPmZ3X2hhbmRsZTsKKwkJCW51bV9wb3J0cy0tOwogCQl9CiAKIAkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKQEAgLTIxNiwxNiArMjIzLDIwIEBACiAJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJYXJyW2krK10uZndoID0gYWRhcHRlci0+bXIuaGFuZGxlOwogCQl9CisJCW51bV9hZGFwdGVycy0tOwogCX0KIAogb3V0X3VwZGF0ZToKIAlrZnJlZShlaGVhX2Z3X2hhbmRsZXMuYXJyKTsKIAllaGVhX2Z3X2hhbmRsZXMuYXJyID0gYXJyOwogCWVoZWFfZndfaGFuZGxlcy5udW1fZW50cmllcyA9IGk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucyh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVoZWFfYmNtY19yZWdfZW50cnkgKmFyciA9IE5VTEw7CiAJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgZWhlYV9tY19saXN0ICptY19lbnRyeTsKQEAgLTIzMyw2ICsyNDQsOCBAQAogCWludCBpID0gMDsKIAlpbnQgazsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGVhX2JjbWNfcmVncy5sb2NrLCBmbGFncyk7CisKIAkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpCiAJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CkBAIC0yNTAsNyArMjYzLDcgQEAKIAlpZiAobnVtX3JlZ2lzdHJhdGlvbnMpIHsKIAkJYXJyID0ga3phbGxvYyhudW1fcmVnaXN0cmF0aW9ucyAqIHNpemVvZigqYXJyKSwgR0ZQX0FUT01JQyk7CiAJCWlmICghYXJyKQotCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwkJCWdvdG8gb3V0OyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KIAl9IGVsc2UKIAkJZ290byBvdXRfdXBkYXRlOwogCkBAIC0yNjEsNiArMjc0LDkgQEAKIAkJCWlmICghcG9ydCB8fCAocG9ydC0+c3RhdGUgIT0gRUhFQV9QT1JUX1VQKSkKIAkJCQljb250aW51ZTsKIAorCQkJaWYgKG51bV9yZWdpc3RyYXRpb25zID09IDApCisJCQkJZ290byBvdXRfdXBkYXRlOworCiAJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJYXJyW2ldLnBvcnRfaWQgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CiAJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfQlJPQURDQVNUIHwKQEAgLTI3Miw5ICsyODgsMTMgQEAKIAkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19CUk9BRENBU1QgfAogCQkJCQkgIEVIRUFfQkNNQ19WTEFOSURfQUxMOwogCQkJYXJyW2krK10ubWFjYWRkciA9IHBvcnQtPm1hY19hZGRyOworCQkJbnVtX3JlZ2lzdHJhdGlvbnMgLT0gMjsKIAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtY19lbnRyeSwKIAkJCQkJICAgICZwb3J0LT5tY19saXN0LT5saXN0LCBsaXN0KSB7CisJCQkJaWYgKG51bV9yZWdpc3RyYXRpb25zID09IDApCisJCQkJCWdvdG8gb3V0X3VwZGF0ZTsKKwogCQkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CiAJCQkJYXJyW2ldLnBvcnRfaWQgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CiAJCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX1NDT1BFX0FMTCB8CkBAIC0yODgsNiArMzA4LDcgQEAKIAkJCQkJCSAgRUhFQV9CQ01DX01VTFRJQ0FTVCB8CiAJCQkJCQkgIEVIRUFfQkNNQ19WTEFOSURfQUxMOwogCQkJCWFycltpKytdLm1hY2FkZHIgPSBtY19lbnRyeS0+bWFjYWRkcjsKKwkJCQludW1fcmVnaXN0cmF0aW9ucyAtPSAyOwogCQkJfQogCQl9CiAJfQpAQCAtMjk2LDYgKzMxNyw4IEBACiAJa2ZyZWUoZWhlYV9iY21jX3JlZ3MuYXJyKTsKIAllaGVhX2JjbWNfcmVncy5hcnIgPSBhcnI7CiAJZWhlYV9iY21jX3JlZ3MubnVtX2VudHJpZXMgPSBpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoZWFfYmNtY19yZWdzLmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplaGVhX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzA4LDcgKzMzMSw3IEBACiAKIAltZW1zZXQoc3RhdHMsIDAsIHNpemVvZigqc3RhdHMpKTsKIAotCWNiMiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfQVRPTUlDKTsKKwljYjIgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAoIWNiMikgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMiIpOwogCQlnb3RvIG91dDsKQEAgLTM0MSw3ICszNjQsNyBAQAogCXN0YXRzLT5yeF9wYWNrZXRzID0gcnhfcGFja2V0czsKIAogb3V0X2hlcnI6Ci0Ja2ZyZWUoY2IyKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IyKTsKIG91dDoKIAlyZXR1cm4gc3RhdHM7CiB9CkBAIC0zNzAsOCArMzkzLDYgQEAKIAkJCQkJCQkgICAgICBFSEVBX0xfUEtUX1NJWkUpOwogCQkJaWYgKCFza2JfYXJyX3JxMVtpbmRleF0pIHsKIAkJCQlwci0+cnExX3NrYmEub3Nfc2ticyA9IGZpbGxfd3FlcyAtIGk7Ci0JCQkJZWhlYV9lcnJvcigiJXM6IG5vIG1lbSBmb3Igc2tiLyVkIHdxZXMgZmlsbGVkIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBpKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzg3LDI2ICs0MDgsMTkgQEAKIAllaGVhX3VwZGF0ZV9ycTFhKHByLT5xcCwgYWRkZXIpOwogfQogCi1zdGF0aWMgaW50IGVoZWFfaW5pdF9maWxsX3JxMShzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsIGludCBucl9ycTFhKQorc3RhdGljIHZvaWQgZWhlYV9pbml0X2ZpbGxfcnExKHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciwgaW50IG5yX3JxMWEpCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKipza2JfYXJyX3JxMSA9IHByLT5ycTFfc2tiYS5hcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByLT5wb3J0LT5uZXRkZXY7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcHItPnJxMV9za2JhLmxlbjsgaSsrKSB7CiAJCXNrYl9hcnJfcnExW2ldID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIEVIRUFfTF9QS1RfU0laRSk7Ci0JCWlmICghc2tiX2Fycl9ycTFbaV0pIHsKLQkJCWVoZWFfZXJyb3IoIiVzOiBubyBtZW0gZm9yIHNrYi8lZCB3cWVzIGZpbGxlZCIsCi0JCQkJICAgZGV2LT5uYW1lLCBpKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlpZiAoIXNrYl9hcnJfcnExW2ldKQorCQkJYnJlYWs7CiAJfQogCS8qIFJpbmcgZG9vcmJlbGwgKi8KIAllaGVhX3VwZGF0ZV9ycTFhKHByLT5xcCwgbnJfcnExYSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBlaGVhX3JlZmlsbF9ycV9kZWYoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLApAQCAtNDM1LDEwICs0NDksMTIgQEAKIAkJdTY0IHRtcF9hZGRyOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHBhY2tldF9zaXplKTsKIAkJaWYgKCFza2IpIHsKLQkJCWVoZWFfZXJyb3IoIiVzOiBubyBtZW0gZm9yIHNrYi8lZCB3cWVzIGZpbGxlZCIsCi0JCQkJICAgcHItPnBvcnQtPm5ldGRldi0+bmFtZSwgaSk7CiAJCQlxX3NrYmEtPm9zX3NrYnMgPSBmaWxsX3dxZXMgLSBpOwotCQkJcmV0ID0gLUVOT01FTTsKKwkJCWlmIChxX3NrYmEtPm9zX3NrYnMgPT0gcV9za2JhLT5sZW4gLSAyKSB7CisJCQkJZWhlYV9pbmZvKCIlczogcnElaSByYW4gZHJ5IC0gbm8gbWVtIGZvciBza2IiLAorCQkJCQkgIHByLT5wb3J0LT5uZXRkZXYtPm5hbWUsIHJxX25yKTsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJfQogCQkJYnJlYWs7CiAJCX0KIAkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwpAQCAtODMwLDcgKzg0Niw3IEBACiAJd2hpbGUgKChyeCAhPSBidWRnZXQpIHx8IGZvcmNlX2lycSkgewogCQlwci0+cG9sbF9jb3VudGVyID0gMDsKIAkJZm9yY2VfaXJxID0gMDsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWVoZWFfcmVzZXRfY3FfZXAocHItPnJlY3ZfY3EpOwogCQllaGVhX3Jlc2V0X2NxX2VwKHByLT5zZW5kX2NxKTsKIAkJZWhlYV9yZXNldF9jcV9uMShwci0+cmVjdl9jcSk7CkBAIC04NDEsNyArODU3LDcgQEAKIAkJaWYgKCFjcWUgJiYgIWNxZV9za2IpCiAJCQlyZXR1cm4gcng7CiAKLQkJaWYgKCFuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKQorCQlpZiAoIW5hcGlfcmVzY2hlZHVsZShuYXBpKSkKIAkJCXJldHVybiByeDsKIAogCQljcWVfc2tiID0gZWhlYV9wcm9jX2NxZXMocHIsIEVIRUFfUE9MTF9NQVhfQ1FFUyk7CkBAIC04NTksNyArODc1LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5udW1fZGVmX3FwczsgaSsrKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+cG9ydF9yZXNbaV0ubmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnBvcnQtPnBvcnRfcmVzW2ldLm5hcGkpOwogfQogI2VuZGlmCiAKQEAgLTg2Nyw3ICs4ODMsNyBAQAogewogCXN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciA9IHBhcmFtOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJnByLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwci0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC05MTUsNyArOTMxLDcgQEAKIAlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjAgKmNiMDsKIAogCS8qIG1heSBiZSBjYWxsZWQgdmlhIGVoZWFfbmVxX3Rhc2tsZXQoKSAqLwotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfQVRPTUlDKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAoIWNiMCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtOTk2LDcgKzEwMTIsNyBAQAogb3V0X2ZyZWU6CiAJaWYgKHJldCB8fCBuZXRpZl9tc2dfcHJvYmUocG9ydCkpCiAJCWVoZWFfZHVtcChjYjAsIHNpemVvZigqY2IwKSwgImVoZWFfc2Vuc2VfcG9ydF9hdHRyIik7Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTAwNyw3ICsxMDIzLDcgQEAKIAl1NjQgaHJldDsKIAlpbnQgcmV0ID0gMDsKIAotCWNiNCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiNCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTA3NSw3ICsxMDkxLDcgQEAKIAlpZiAoIXByb3BfY2Fycmllcl9zdGF0ZSB8fCAocG9ydC0+cGh5X2xpbmsgPT0gRUhFQV9QSFlfTElOS19VUCkpCiAJCW5ldGlmX2NhcnJpZXJfb24ocG9ydC0+bmV0ZGV2KTsKIAotCWtmcmVlKGNiNCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiNCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyMDEsMTEgKzEyMTcsMTEgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBlaGVhX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyID0gJnByLT5xcC0+aW5pdF9hdHRyOwogCi0JcmV0ID0gZWhlYV9pbml0X2ZpbGxfcnExKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTEKLQkJCQkgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyCi0JCQkJICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMyAtIDEpOworCWVoZWFfaW5pdF9maWxsX3JxMShwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnExCisJCQkgICAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIKKwkJCSAgICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMyAtIDEpOwogCi0JcmV0IHw9IGVoZWFfcmVmaWxsX3JxMihwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyIC0gMSk7CisJcmV0ID0gZWhlYV9yZWZpbGxfcnEyKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIgLSAxKTsKIAogCXJldCB8PSBlaGVhX3JlZmlsbF9ycTMocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMyAtIDEpOwogCkBAIC0xMzAyLDcgKzEzMTgsNyBAQAogCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiMCAqY2IwOwogCiAJcmV0ID0gLUVOT01FTTsKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApCiAJCWdvdG8gb3V0OwogCkBAIC0xMzM4LDcgKzEzNTQsNyBAQAogCXJldCA9IDA7CiAKIG91dF9mcmVlOgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NDgsNyArMTc2NCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTc2OSw4ICsxNzg1LDYgQEAKIAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJLyogRGVyZWdpc3RlciBvbGQgTUFDIGluIHBIWVAgKi8KIAlpZiAocG9ydC0+c3RhdGUgPT0gRUhFQV9QT1JUX1VQKSB7CiAJCXJldCA9IGVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKQEAgLTE3OTEsOSArMTgwNSw4IEBACiAKIG91dF91cHJlZ3M6CiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogb3V0X2ZyZWU6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTgxNyw3ICsxODMwLDcgQEAKIAlpZiAoKGVuYWJsZSAmJiBwb3J0LT5wcm9taXNjKSB8fCAoIWVuYWJsZSAmJiAhcG9ydC0+cHJvbWlzYykpCiAJCXJldHVybjsKIAotCWNiNyA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfQVRPTUlDKTsKKwljYjcgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAoIWNiNykgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNyIpOwogCQlnb3RvIG91dDsKQEAgLTE4MzYsNyArMTg0OSw3IEBACiAKIAlwb3J0LT5wcm9taXNjID0gZW5hYmxlOwogb3V0OgotCWtmcmVlKGNiNyk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiNyk7CiAJcmV0dXJuOwogfQogCkBAIC0xOTUzLDggKzE5NjYsNiBAQAogCX0KIAllaGVhX3Byb21pc2N1b3VzKGRldiwgMCk7CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJZWhlYV9hbGxtdWx0aShkZXYsIDEpOwogCQlnb3RvIG91dDsKQEAgLTE5ODQsNyArMTk5NSw2IEBACiAJfQogb3V0OgogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIyMTcsNyArMjIyNyw3IEBACiAKIAlwb3J0LT52Z3JwID0gZ3JwOwogCi0JY2IxID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IxKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IxIik7CiAJCWdvdG8gb3V0OwpAQCAtMjIyOCw3ICsyMjM4LDcgQEAKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpCiAJCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3BvcnQgZmFpbGVkIik7CiAKLQlrZnJlZShjYjEpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogb3V0OgogCXJldHVybjsKIH0KQEAgLTIyNDEsNyArMjI1MSw3IEBACiAJaW50IGluZGV4OwogCXU2NCBocmV0OwogCi0JY2IxID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IxKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IxIik7CiAJCWdvdG8gb3V0OwpAQCAtMjI2Miw3ICsyMjcyLDcgQEAKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpCiAJCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3BvcnQgZmFpbGVkIik7CiBvdXQ6Ci0Ja2ZyZWUoY2IxKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IxKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIyNzYsNyArMjI4Niw3IEBACiAKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UocG9ydC0+dmdycCwgdmlkLCBOVUxMKTsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyOTcsNyArMjMwNyw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogb3V0OgotCWtmcmVlKGNiMSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMSk7CiAJcmV0dXJuOwogfQogCkBAIC0yMzA5LDcgKzIzMTksNyBAQAogCXU2NCBkdW1teTY0ID0gMDsKIAlzdHJ1Y3QgaGNwX21vZGlmeV9xcF9jYjAgKmNiMDsKIAotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTIzNzIsNyArMjM4Miw3IEBACiAKIAlyZXQgPSAwOwogb3V0OgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ2NSw4ICsyNDc1LDYgQEAKIAlpZiAocG9ydC0+c3RhdGUgPT0gRUhFQV9QT1JUX1VQKQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKLQogCXJldCA9IGVoZWFfcG9ydF9yZXNfc2V0dXAocG9ydCwgcG9ydC0+bnVtX2RlZl9xcHMsCiAJCQkJICBwb3J0LT5udW1fYWRkX3R4X3Fwcyk7CiAJaWYgKHJldCkgewpAQCAtMjUwMyw4ICsyNTExLDYgQEAKIAkJfQogCX0KIAotCXNwaW5fbG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7Ci0KIAlyZXQgPSBlaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHBvcnQsIEhfUkVHX0JDTUMpOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTzsKQEAgLTI1MjYsMTAgKzI1MzIsNyBAQAogCQllaGVhX2luZm8oIkZhaWxlZCBzdGFydGluZyAlcy4gcmV0PSVpIiwgZGV2LT5uYW1lLCByZXQpOwogCiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1NzksOSArMjU4Miw2IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9ET1dOKQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKLQotCXNwaW5fbG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiAJZWhlYV9kcm9wX211bHRpY2FzdF9saXN0KGRldik7CiAJZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX0RFUkVHX0JDTUMpOwogCkBAIC0yNTkwLDcgKzI1OTAsNiBAQAogCXBvcnQtPnN0YXRlID0gRUhFQV9QT1JUX0RPV047CiAKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKLQlzcGluX3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiAKIAlyZXQgPSBlaGVhX2NsZWFuX2FsbF9wb3J0cmVzKHBvcnQpOwogCWlmIChyZXQpCkBAIC0yNTk4LDcgKzI1OTcsNiBAQAogCQkJICBkZXYtPm5hbWUsIHJldCk7CiAKIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjY2NCw3ICsyNjYyLDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJdTE2IGR1bW15MTYgPSAwOwogCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjcxNiw3ICsyNzE0LDcgQEAKIAogCXJldCA9IDA7CiBvdXQ6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNzY2LDcgKzI3NjQsNyBAQAogCXU2NCBkdW1teTY0ID0gMDsKIAl1MTYgZHVtbXkxNiA9IDA7CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yODE5LDcgKzI4MTcsNyBAQAogCQllaGVhX3JlZmlsbF9ycTMocHIsIDApOwogCX0KIG91dDoKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5NTAsNyArMjk0OCw3IEBACiAJdTY0IGhyZXQ7CiAJaW50IHJldDsKIAotCWNiID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTI5NjcsNyArMjk2NSw3IEBACiAJcmV0ID0gMDsKIAogb3V0X2hlcnI6Ci0Ja2ZyZWUoY2IpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5ODEsNyArMjk3OSw3IEBACiAJKmp1bWJvID0gMDsKIAogCS8qIChUcnkgdG8pIGVuYWJsZSAqanVtYm8gZnJhbWVzICovCi0JY2I0ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiNCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2I0KSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I0Iik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0zMDA5LDcgKzMwMDcsNyBAQAogCQl9IGVsc2UKIAkJCXJldCA9IC1FSU5WQUw7CiAKLQkJa2ZyZWUoY2I0KTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiNCk7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CkBAIC0zMDQwLDcgKzMwMzgsNyBAQAogCXBvcnQtPm9mZGV2LmRldi5wYXJlbnQgPSAmcG9ydC0+YWRhcHRlci0+b2ZkZXYtPmRldjsKIAlwb3J0LT5vZmRldi5kZXYuYnVzID0gJmlibWVidXNfYnVzX3R5cGU7CiAKLQlzcHJpbnRmKHBvcnQtPm9mZGV2LmRldi5idXNfaWQsICJwb3J0JWQiLCBwb3J0X25hbWVfY250KyspOworCWRldl9zZXRfbmFtZSgmcG9ydC0+b2ZkZXYuZGV2LCAicG9ydCVkIiwgcG9ydF9uYW1lX2NudCsrKTsKIAlwb3J0LT5vZmRldi5kZXYucmVsZWFzZSA9IGxvZ2ljYWxfcG9ydF9yZWxlYXNlOwogCiAJcmV0ID0gb2ZfZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5vZmRldik7CkBAIC0zMDY5LDYgKzMwNjcsMjIgQEAKIAlvZl9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+b2ZkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVoZWFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZWhlYV9vcGVuLAorCS5uZG9fc3RvcAkJPSBlaGVhX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGVoZWFfc3RhcnRfeG1pdCwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWhlYV9uZXRwb2xsLAorI2VuZGlmCisJLm5kb19nZXRfc3RhdHMJCT0gZWhlYV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBlaGVhX3NldF9tYWNfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGVoZWFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBlaGVhX2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gZWhlYV92bGFuX3J4X3JlZ2lzdGVyLAorCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gZWhlYV92bGFuX3J4X2FkZF92aWQsCisJLm5kb192bGFuX3J4X2tpbGxfdmlkCT0gZWhlYV92bGFuX3J4X2tpbGxfdmlkCit9OworCiBzdHJ1Y3QgZWhlYV9wb3J0ICplaGVhX3NldHVwX3NpbmdsZV9wb3J0KHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCSB1MzIgbG9naWNhbF9wb3J0X2lkLAogCQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpkbikKQEAgLTMxMjEsMTkgKzMxMzUsOSBAQAogCS8qIGluaXRpYWxpemUgbmV0X2RldmljZSBzdHJ1Y3R1cmUgKi8KIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgJnBvcnQtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKLQlkZXYtPm9wZW4gPSBlaGVhX29wZW47Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVoZWFfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IGVoZWFfc3RvcDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGVoZWFfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9IGVoZWFfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZWhlYV9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBlaGVhX3NldF9tYWNfYWRkcjsKLQlkZXYtPmNoYW5nZV9tdHUgPSBlaGVhX2NoYW5nZV9tdHU7Ci0JZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gZWhlYV92bGFuX3J4X3JlZ2lzdGVyOwotCWRldi0+dmxhbl9yeF9hZGRfdmlkID0gZWhlYV92bGFuX3J4X2FkZF92aWQ7Ci0JZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gZWhlYV92bGFuX3J4X2tpbGxfdmlkOworCWRldi0+bmV0ZGV2X29wcyA9ICZlaGVhX25ldGRldl9vcHM7CisJZWhlYV9zZXRfZXRodG9vbF9vcHMoZGV2KTsKKwogCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfVFNPCiAJCSAgICAgIHwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9IV19WTEFOX1RYCiAJCSAgICAgIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUgpAQCAtMzE0Miw3ICszMTQ2LDYgQEAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gRUhFQV9XQVRDSF9ET0dfVElNRU9VVDsKIAogCUlOSVRfV09SSygmcG9ydC0+cmVzZXRfdGFzaywgZWhlYV9yZXNldF9wb3J0KTsKLQllaGVhX3NldF9ldGh0b29sX29wcyhkZXYpOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJldCkgewpAQCAtMzM3MCw3ICszMzczLDYgQEAKIAkJZWhlYV9lcnJvcigiSW52YWxpZCBpYm1lYnVzIGRldmljZSBwcm9iZWQiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCWFkYXB0ZXIgPSBremFsbG9jKHNpemVvZigqYWRhcHRlciksIEdGUF9LRVJORUwpOwogCWlmICghYWRhcHRlcikgewpAQCAtMzQ1MCwxMSArMzQ1MiwxMiBAQAogCWVoZWFfZGVzdHJveV9lcShhZGFwdGVyLT5uZXEpOwogCiBvdXRfZnJlZV9hZDoKKwlsaXN0X2RlbCgmYWRhcHRlci0+bGlzdCk7CiAJa2ZyZWUoYWRhcHRlcik7CiAKIG91dDoKIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDczLDggKzM0NzYsNiBAQAogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKLQogCWlibWVidXNfZnJlZV9pcnEoYWRhcHRlci0+bmVxLT5hdHRyLmlzdDEsIGFkYXB0ZXIpOwogCXRhc2tsZXRfa2lsbCgmYWRhcHRlci0+bmVxX3Rhc2tsZXQpOwogCkBAIC0zNDg0LDcgKzM0ODUsNiBAQAogCWtmcmVlKGFkYXB0ZXIpOwogCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTE4LDEyICszNTE4LDE0IEBACiAJCS8qIFJlYWRkIGNhbmNlbGVkIG1lbW9yeSBibG9jayAqLwogCWNhc2UgTUVNX09OTElORToKIAkJZWhlYV9pbmZvKCJtZW1vcnkgaXMgZ29pbmcgb25saW5lIik7CisJCXNldF9iaXQoX19FSEVBX1NUT1BfWEZFUiwgJmVoZWFfZHJpdmVyX2ZsYWdzKTsKIAkJaWYgKGVoZWFfYWRkX3NlY3RfYm1hcChhcmctPnN0YXJ0X3BmbiwgYXJnLT5ucl9wYWdlcykpCiAJCQlyZXR1cm4gTk9USUZZX0JBRDsKIAkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgTUVNX0dPSU5HX09GRkxJTkU6CiAJCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9mZmxpbmUiKTsKKwkJc2V0X2JpdChfX0VIRUFfU1RPUF9YRkVSLCAmZWhlYV9kcml2ZXJfZmxhZ3MpOwogCQlpZiAoZWhlYV9yZW1fc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKIAkJCXJldHVybiBOT1RJRllfQkFEOwogCQllaGVhX3JlcmVnX21ycyhOVUxMKTsKQEAgLTM1MzEsNiArMzUzMyw5IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCisJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOworCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCmluZGV4IDQ5ZDc2NmUuLjM3NDc0NTdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJldDsKIAl1NjQgKnJibG9jazsKIAotCXJibG9jayA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlyYmxvY2sgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXJibG9jaykgewogCQllaGVhX2Vycm9yKCJDYW5ub3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKIAkJcmV0dXJuOwpAQCAtMTAyMiw1ICsxMDIyLDUgQEAKIAllbHNlCiAJCWVoZWFfZXJyb3IoIkVycm9yIGRhdGEgY291bGQgbm90IGJlIGZldGNoZWQ6ICVsbFgiLCByZXNfaGFuZGxlKTsKIAotCWtmcmVlKHJibG9jayk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXJibG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCmluZGV4IGE4MzJjYzUuLmMyNmNlYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oCkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyAxMEcgRXRoZXJuZXQgRHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4wLjY0OCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC45MzMiCiAjZGVmaW5lIERSVl9DT1BZUklHSFQJCSJDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKIApAQCAtOTcsNiArOTcsNyBAQAogCV9fX19jYWNoZWxpbmVfYWxpZ25lZCBzdHJ1Y3Qgdm5pY19ycSBycVsxXTsKIAl1bnNpZ25lZCBpbnQgcnFfY291bnQ7CiAJaW50ICgqcnFfYWxsb2NfYnVmKShzdHJ1Y3Qgdm5pY19ycSAqcnEpOworCXU2NCBycV9iYWRfZmNzOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOwogCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbRU5JQ19MUk9fTUFYX0RFU0NdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKaW5kZXggN2Q2MDU1MS4uMDM0MDNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCkBAIC00MDAsMTAgKzQwMCwxMyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CS8qIG5vdCBvdXIgaW50ZXJydXB0ICovCiAJfQogCi0JaWYgKEVOSUNfVEVTVF9JTlRSKHBiYSwgRU5JQ19JTlRYX05PVElGWSkpCisJaWYgKEVOSUNfVEVTVF9JTlRSKHBiYSwgRU5JQ19JTlRYX05PVElGWSkpIHsKKwkJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX0lOVFhfTk9USUZZXSk7CiAJCWVuaWNfbm90aWZ5X2NoZWNrKGVuaWMpOworCX0KIAogCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9FUlIpKSB7CisJCXZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19JTlRYX0VSUl0pOwogCQllbmljX2xvZ19xX2Vycm9yKGVuaWMpOwogCQkvKiBzY2hlZHVsZSByZWNvdmVyeSBmcm9tIFdRL1JRIGVycm9yICovCiAJCXNjaGVkdWxlX3dvcmsoJmVuaWMtPnJlc2V0KTsKQEAgLTQxMSw4ICs0MTQsOCBAQAogCX0KIAogCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9XUV9SUSkpIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmVuaWMtPm5hcGkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmVuaWMtPm5hcGkpKQorCQkJX19uYXBpX3NjaGVkdWxlKCZlbmljLT5uYXBpKTsKIAl9IGVsc2UgewogCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfSU5UWF9XUV9SUV0pOwogCX0KQEAgLTQ0MCw3ICs0NDMsNyBAQAogCSAqIHdyaXRlcykuCiAJICovCiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NTAsNyArNDUzLDcgQEAKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGRhdGE7CiAKIAkvKiBzY2hlZHVsZSBOQVBJIHBvbGxpbmcgZm9yIFJRIGNsZWFudXAgKi8KLQluZXRpZl9yeF9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NzYsNiArNDc5LDggQEAKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGRhdGE7CiAKKwl2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9FUlJdKTsKKwogCWVuaWNfbG9nX3FfZXJyb3IoZW5pYyk7CiAKIAkvKiBzY2hlZHVsZSByZWNvdmVyeSBmcm9tIFdRL1JRIGVycm9yICovCkBAIC00ODgsOCArNDkzLDggQEAKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGRhdGE7CiAKKwl2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9OT1RJRlldKTsKIAllbmljX25vdGlmeV9jaGVjayhlbmljKTsKLQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9OT1RJRlldKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTU3MCwxMSArNTc1LDExIEBACiAJICogdG8gZWFjaCBUQ1Agc2VnbWVudCByZXN1bHRpbmcgZnJvbSB0aGUgVFNPLgogCSAqLwogCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkpIHsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpIHsKIAkJaXBfaGRyKHNrYiktPmNoZWNrID0gMDsKIAkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0+c2FkZHIsCiAJCQlpcF9oZHIoc2tiKS0+ZGFkZHIsIDAsIElQUFJPVE9fVENQLCAwKTsKLQl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSkgeworCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgewogCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsCiAJCQkmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsIDAsIElQUFJPVE9fVENQLCAwKTsKIAl9CkBAIC02MTYsNyArNjIxLDcgQEAKIAkJCXZsYW5fdGFnX2luc2VydCwgdmxhbl90YWcpOwogfQogCi0vKiBuZXRpZl90eF9sb2NrIGhlbGQsIHByb2Nlc3MgY29udGV4dCB3aXRoIEJIcyBkaXNhYmxlZCAqLworLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQsIG9yIEJIICovCiBzdGF0aWMgaW50IGVuaWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtNjgzLDcgKzY4OCw3IEBACiAJbmV0X3N0YXRzLT5yeF9ieXRlcyA9IHN0YXRzLT5yeC5yeF9ieXRlc19vazsKIAluZXRfc3RhdHMtPnJ4X2Vycm9ycyA9IHN0YXRzLT5yeC5yeF9lcnJvcnM7CiAJbmV0X3N0YXRzLT5tdWx0aWNhc3QgPSBzdGF0cy0+cngucnhfbXVsdGljYXN0X2ZyYW1lc19vazsKLQluZXRfc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBzdGF0cy0+cngucnhfY3JjX2Vycm9yczsKKwluZXRfc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBlbmljLT5ycV9iYWRfZmNzOwogCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCA9IHN0YXRzLT5yeC5yeF9ub19idWZzOwogCiAJcmV0dXJuIG5ldF9zdGF0czsKQEAgLTkyOCwxMiArOTMzLDggQEAKIAogCWlmIChwYWNrZXRfZXJyb3IpIHsKIAotCQlpZiAoYnl0ZXNfd3JpdHRlbiA+IDAgJiYgIWZjc19vaykgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkJCSIlczogcGFja2V0IGVycm9yOiBiYWQgRkNTXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOwotCQl9CisJCWlmIChieXRlc193cml0dGVuID4gMCAmJiAhZmNzX29rKQorCQkJZW5pYy0+cnFfYmFkX2ZjcysrOwogCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKQEAgLTEwNjgsOCArMTA2OSw4IEBACiAJCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCiAJCQlscm9fZmx1c2hfYWxsKCZlbmljLT5scm9fbWdyKTsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX01TSVhfUlFdKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX0lOVFhfV1FfUlFdKTsKIAl9CiAKIAlyZXR1cm4gcnFfd29ya19kb25lOwpAQCAtMTA5NSw5ICsxMDk2LDkgQEAKIAogCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljX3JxX2FsbG9jX2J1Zik7CiAKLQkJLyogQWNjdW11bGF0ZSBpbnRyIGV2ZW50IGNyZWRpdHMgZm9yIHRoaXMgcG9sbGluZworCQkvKiBSZXR1cm4gaW50ciBldmVudCBjcmVkaXRzIGZvciB0aGlzIHBvbGxpbmcKIAkJICogY3ljbGUuICBBbiBpbnRyIGV2ZW50IGlzIHRoZSBjb21wbGV0aW9uIG9mIGEKLQkJICogYSBXUSBvciBSUSBwYWNrZXQuCisJCSAqIFJRIHBhY2tldC4KIAkJICovCiAKIAkJdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0sCkBAIC0xMTEyLDcgKzExMTMsNyBAQAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQkJbHJvX2ZsdXNoX2FsbCgmZW5pYy0+bHJvX21ncik7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSk7CiAJfQogCkBAIC0xNDYxLDYgKzE0NjIsMjYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGVuaWNfc2V0X25pY2NmZyhzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwljb25zdCB1OCByc3NfZGVmYXVsdF9jcHUgPSAwOworCWNvbnN0IHU4IHJzc19oYXNoX3R5cGUgPSAwOworCWNvbnN0IHU4IHJzc19oYXNoX2JpdHMgPSAwOworCWNvbnN0IHU4IHJzc19iYXNlX2NwdSA9IDA7CisJY29uc3QgdTggcnNzX2VuYWJsZSA9IDA7CisJY29uc3QgdTggdHNvX2lwaWRfc3BsaXRfZW4gPSAwOworCWNvbnN0IHU4IGlnX3ZsYW5fc3RyaXBfZW4gPSAxOworCisJLyogRW5hYmxlIFZMQU4gdGFnIHN0cmlwcGluZy4gIFJTUyBub3QgZW5hYmxlZCAoeWV0KS4KKwkqLworCisJcmV0dXJuIGVuaWNfc2V0X25pY19jZmcoZW5pYywKKwkJcnNzX2RlZmF1bHRfY3B1LCByc3NfaGFzaF90eXBlLAorCQlyc3NfaGFzaF9iaXRzLCByc3NfYmFzZV9jcHUsCisJCXJzc19lbmFibGUsIHRzb19pcGlkX3NwbGl0X2VuLAorCQlpZ192bGFuX3N0cmlwX2VuKTsKK30KKwogc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVuaWMsIHJlc2V0KTsKQEAgLTE0NzYsOCArMTQ5NywxMCBAQAogCiAJZW5pY19zdG9wKGVuaWMtPm5ldGRldik7CiAJZW5pY19kZXZfc29mdF9yZXNldChlbmljKTsKKwl2bmljX2Rldl9pbml0KGVuaWMtPnZkZXYsIDApOwogCWVuaWNfcmVzZXRfbWNhZGRycyhlbmljKTsKIAllbmljX2luaXRfdm5pY19yZXNvdXJjZXMoZW5pYyk7CisJZW5pY19zZXRfbmljY2ZnKGVuaWMpOwogCWVuaWNfb3BlbihlbmljLT5uZXRkZXYpOwogCiAJcnRubF91bmxvY2soKTsKQEAgLTE2MjAsMTQgKzE2NDMsNiBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKLQljb25zdCB1OCByc3NfZGVmYXVsdF9jcHUgPSAwOwotCWNvbnN0IHU4IHJzc19oYXNoX3R5cGUgPSAwOwotCWNvbnN0IHU4IHJzc19oYXNoX2JpdHMgPSAwOwotCWNvbnN0IHU4IHJzc19iYXNlX2NwdSA9IDA7Ci0JY29uc3QgdTggcnNzX2VuYWJsZSA9IDA7Ci0JY29uc3QgdTggdHNvX2lwaWRfc3BsaXRfZW4gPSAwOwotCWNvbnN0IHU4IGlnX3ZsYW5fc3RyaXBfZW4gPSAxOwotCiAJLyogQWxsb2NhdGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemUuICBQcml2YXRlCiAJICogaW5zdGFuY2UgZGF0YSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLgogCSAqLwpAQCAtMTc5MywxNCArMTgwOCw3IEBACiAKIAllbmljX2luaXRfdm5pY19yZXNvdXJjZXMoZW5pYyk7CiAKLQkvKiBFbmFibGUgVkxBTiB0YWcgc3RyaXBwaW5nLiAgUlNTIG5vdCBlbmFibGVkICh5ZXQpLgotCSAqLwotCi0JZXJyID0gZW5pY19zZXRfbmljX2NmZyhlbmljLAotCQlyc3NfZGVmYXVsdF9jcHUsIHJzc19oYXNoX3R5cGUsCi0JCXJzc19oYXNoX2JpdHMsIHJzc19iYXNlX2NwdSwKLQkJcnNzX2VuYWJsZSwgdHNvX2lwaWRfc3BsaXRfZW4sCi0JCWlnX3ZsYW5fc3RyaXBfZW4pOworCWVyciA9IGVuaWNfc2V0X25pY2NmZyhlbmljKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCSJGYWlsZWQgdG8gY29uZmlnIG5pYywgYWJvcnRpbmcuXG4iKTsKQEAgLTE4NTgsNyArMTg2Niw2IEBACiAJaWYgKHVzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQogCWVuaWMtPmNzdW1fcnhfZW5hYmxlZCA9IEVOSUNfU0VUVElORyhlbmljLCBSWENTVU0pOwogCiAJZW5pYy0+bHJvX21nci5tYXhfYWdnciA9IEVOSUNfTFJPX01BWF9BR0dSOwpAQCAtMTg3MCw3ICsxODc3LDYgQEAKIAllbmljLT5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwogCWVuaWMtPmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKaW5kZXggMTE3MDg1Ny4uZTIxYjlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwpAQCAtMzQsNiArMzQsOSBAQAogCXVuc2lnbmVkIGludCBjb3VudDsKIH07CiAKKyNkZWZpbmUgVk5JQ19ERVZfQ0FQX0lOSVQJMHgwMDAxCisjZGVmaW5lIFZOSUNfREVWX0NBUF9QRVJCSQkweDAwMDIKKwogc3RydWN0IHZuaWNfZGV2IHsKIAl2b2lkICpwcml2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtNTAsNiArNTMsNyBAQAogCWRtYV9hZGRyX3Qgc3RhdHNfcGE7CiAJc3RydWN0IHZuaWNfZGV2Y21kX2Z3X2luZm8gKmZ3X2luZm87CiAJZG1hX2FkZHJfdCBmd19pbmZvX3BhOworCXUzMiBjYXBfZmxhZ3M7CiB9OwogCiAjZGVmaW5lIFZOSUNfTUFYX1JFU19IRFJfU0laRSBcCkBAIC01NzUsOSArNTc5LDkgQEAKIHsKIAl1NjQgYTAgPSAodTMyKWFyZywgYTEgPSAwOwogCWludCB3YWl0ID0gMTAwMDsKLSAgICAgICAgaW50IHIgPSAwOworCWludCByID0gMDsKIAotCWlmICh2bmljX2Rldl9jYXBhYmxlKHZkZXYsIENNRF9JTklUKSkKKwlpZiAodmRldi0+Y2FwX2ZsYWdzICYgVk5JQ19ERVZfQ0FQX0lOSVQpCiAJCXIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX0lOSVQsICZhMCwgJmExLCB3YWl0KTsKIAllbHNlIHsKIAkJdm5pY19kZXZfY21kKHZkZXYsIENNRF9JTklUX3YxLCAmYTAsICZhMSwgd2FpdCk7CkBAIC01ODcsOCArNTkxLDggQEAKIAkJCXZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfTUFDX0FERFIsICZhMCwgJmExLCB3YWl0KTsKIAkJCXZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfQUREUl9BREQsICZhMCwgJmExLCB3YWl0KTsKIAkJfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByOworCX0KKwlyZXR1cm4gcjsKIH0KIAogaW50IHZuaWNfZGV2X2xpbmtfc3RhdHVzKHN0cnVjdCB2bmljX2RldiAqdmRldikKQEAgLTYyNiw2ICs2MzAsMjIgQEAKIAlyZXR1cm4gdmRldi0+bm90aWZ5X2NvcHkubXR1OwogfQogCit1MzIgdm5pY19kZXZfbGlua19kb3duX2NudChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCit7CisJaWYgKCF2bmljX2Rldl9ub3RpZnlfcmVhZHkodmRldikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5LmxpbmtfZG93bl9jbnQ7Cit9CisKK3UzMiB2bmljX2Rldl9ub3RpZnlfc3RhdHVzKHN0cnVjdCB2bmljX2RldiAqdmRldikKK3sKKwlpZiAoIXZuaWNfZGV2X25vdGlmeV9yZWFkeSh2ZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmRldi0+bm90aWZ5X2NvcHkuc3RhdHVzOworfQorCiB2b2lkIHZuaWNfZGV2X3NldF9pbnRyX21vZGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAogCWVudW0gdm5pY19kZXZfaW50cl9tb2RlIGludHJfbW9kZSkKIHsKQEAgLTY4Miw2ICs3MDIsMTEgQEAKIAlpZiAoIXZkZXYtPmRldmNtZCkKIAkJZ290byBlcnJfb3V0OwogCisJdmRldi0+Y2FwX2ZsYWdzID0gMDsKKworCWlmICh2bmljX2Rldl9jYXBhYmxlKHZkZXYsIENNRF9JTklUKSkKKwkJdmRldi0+Y2FwX2ZsYWdzIHw9IFZOSUNfREVWX0NBUF9JTklUOworCiAJcmV0dXJuIHZkZXY7CiAKIGVycl9vdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKaW5kZXggYjlkYzE4Mi4uOGFhOGRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaApAQCAtMTAyLDYgKzEwMiw4IEBACiB1MzIgdm5pY19kZXZfcG9ydF9zcGVlZChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogdTMyIHZuaWNfZGV2X21zZ19sdmwoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHUzMiB2bmljX2Rldl9tdHUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKK3UzMiB2bmljX2Rldl9saW5rX2Rvd25fY250KHN0cnVjdCB2bmljX2RldiAqdmRldik7Cit1MzIgdm5pY19kZXZfbm90aWZ5X3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2Nsb3NlKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiBpbnQgdm5pY19kZXZfZW5hYmxlKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiBpbnQgdm5pY19kZXZfZGlzYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCmluZGV4IDgwNjJjNzUuLjI1ODdmMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKQEAgLTE5MSw3ICsxOTEsNyBAQAogCUNNRF9JTklUX1NUQVRVUwkJPSBfQ01EQyhfQ01EX0RJUl9SRUFELCBfQ01EX1ZUWVBFX0FMTCwgMzEpLAogCiAJLyogSU5UMTMgQVBJOiAodTY0KWEwPXBhZGRyIHRvIHZuaWNfaW50MTNfcGFyYW1zIHN0cnVjdAotCSAqICAgICAgICAgICAgKHU4KWExPUlOVDEzX0NNRF94eHggKi8KKwkgKiAgICAgICAgICAgICh1MzIpYTE9SU5UMTNfQ01EX3h4eCAqLwogCUNNRF9JTlQxMyAgICAgICAgICAgICAgID0gX0NNREMoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRkMsIDMyKSwKIAogCS8qIGxvZ2ljYWwgdXBsaW5rIGVuYWJsZS9kaXNhYmxlOiAodTY0KWEwOiAwLzE9ZGlzYWJsZS9lbmFibGUgKi8KQEAgLTIwNyw2ICsyMDcsMTEgQEAKIAkgKiBpbjogICh1MzIpYTA9Y21kCiAJICogb3V0OiAodTMyKWEwPWVycm5vLCAwOnZhbGlkIGNtZCwgYTE9c3VwcG9ydGVkIFZOSUNfU1RGXyogYml0cyAqLwogCUNNRF9DQVBBQklMSVRZCQk9IF9DTURDKF9DTURfRElSX1JXLCBfQ01EX1ZUWVBFX0FMTCwgMzYpLAorCisJLyogcGVyc2lzdGVudCBiaW5kaW5nIGluZm8KKwkgKiBpbjogICh1NjQpYTA9cGFkZHIgb2YgYXJnCisJICogICAgICAodTMyKWExPUNNRF9QRVJCSV9YWFggKi8KKwlDTURfUEVSQkkgICAgICAgICAgICAgICA9IF9DTURDKF9DTURfRElSX1JXLCBfQ01EX1ZUWVBFX0ZDLCAzNyksCiB9OwogCiAvKiBmbGFncyBmb3IgQ01EX09QRU4gKi8KQEAgLTI1OSw2ICsyNjQsNyBAQAogCXUzMiBzdGF0dXM7CQkvKiBzdGF0dXMgYml0cyAoc2VlIFZOSUNfU1RGXyopICovCiAJdTMyIGVycm9yOwkJLyogZXJyb3IgY29kZSAoc2VlIEVSUl8qKSBmb3IgZmlyc3QgRVJSICovCiAJdTMyIGxpbmtfZG93bl9jbnQ7CS8qIHJ1bm5pbmcgY291bnQgb2YgbGluayBkb3duIHRyYW5zaXRpb25zICovCisJdTMyIHBlcmJpX3JlYnVpbGRfY250OwkvKiBydW5uaW5nIGNvdW50IG9mIHBlcmJpIHJlYnVpbGRzICovCiB9OwogI2RlZmluZSBWTklDX1NURl9GQVRBTF9FUlIJMHgwMDAxCS8qIGZhdGFsIGZ3IGVycm9yICovCiAjZGVmaW5lIFZOSUNfU1RGX1NURF9QQVVTRQkweDAwMDIJLyogc3RhbmRhcmQgbGluay1sZXZlbCBwYXVzZSBvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKaW5kZXggY2U2MzNhNS4uOWE1MzYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCkBAIC03Niw2ICs3NiwyMCBAQAogCWlvd3JpdGUzMihpbnRfY3JlZGl0X3JldHVybiwgJmludHItPmN0cmwtPmludF9jcmVkaXRfcmV0dXJuKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm5pY19pbnRyX2NyZWRpdHMoc3RydWN0IHZuaWNfaW50ciAqaW50cikKK3sKKwlyZXR1cm4gaW9yZWFkMzIoJmludHItPmN0cmwtPmludF9jcmVkaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoc3RydWN0IHZuaWNfaW50ciAqaW50cikKK3sKKwl1bnNpZ25lZCBpbnQgY3JlZGl0cyA9IHZuaWNfaW50cl9jcmVkaXRzKGludHIpOworCWludCB1bm1hc2sgPSAxOworCWludCByZXNldF90aW1lciA9IDE7CisKKwl2bmljX2ludHJfcmV0dXJuX2NyZWRpdHMoaW50ciwgY3JlZGl0cywgdW5tYXNrLCByZXNldF90aW1lcik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTMyIHZuaWNfaW50cl9sZWdhY3lfcGJhKHUzMiBfX2lvbWVtICpsZWdhY3lfcGJhKQogewogCS8qIHJlYWQgUEJBIHdpdGhvdXQgY2xlYXJpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwppbmRleCBhNTM5YmMzLi5iNjBlMjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcGljMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCkBAIC0xMTE0LDkgKzExMTQsOSBAQAogCiAJaWYgKChzdGF0dXMgJiBFcGljTmFwaUV2ZW50KSAmJiAhZXAtPnJlc2NoZWR1bGVfaW5fcG9sbCkgewogCQlzcGluX2xvY2soJmVwLT5uYXBpX2xvY2spOwotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZXAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmVwLT5uYXBpKSkgewogCQkJZXBpY19uYXBpX2lycV9vZmYoZGV2LCBlcCk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZlcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmVwLT5uYXBpKTsKIAkJfSBlbHNlCiAJCQllcC0+cmVzY2hlZHVsZV9pbl9wb2xsKys7CiAJCXNwaW5fdW5sb2NrKCZlcC0+bmFwaV9sb2NrKTsKQEAgLTEyOTMsNyArMTI5Myw3IEBACiAKIAkJbW9yZSA9IGVwLT5yZXNjaGVkdWxlX2luX3BvbGw7CiAJCWlmICghbW9yZSkgewotCQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCW91dGwoRXBpY05hcGlFdmVudCwgaW9hZGRyICsgSU5UU1RBVCk7CiAJCQllcGljX25hcGlfaXJxX29uKGRldiwgZXApOwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VxbC5jIGIvZHJpdmVycy9uZXQvZXFsLmMKaW5kZXggNDAxMjU2OS4uNTFlYWQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXFsLmMKKysrIGIvZHJpdmVycy9uZXQvZXFsLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCWFkZF90aW1lcigmZXFsLT50aW1lcik7CiB9CiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2luaXRjb25zdCA9CiAJIkVxdWFsaXplcjIwMDI6IFNpbW9uIEphbmVzIChzaW1vbkBuY20uY29tKSBhbmQgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKVxuIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcWxfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKaW5kZXggNWMwNDhmMi4uMGQ4YjZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoMTZpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKQEAgLTQ3NSw2ICs0NzUsMTcgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGV0aDE2aV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICAgICAgICAgID0gZXRoMTZpX29wZW4sCisJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBldGgxNmlfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ICAgIAk9IGV0aDE2aV90eCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGV0aDE2aV9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0IAk9IGV0aDE2aV90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBldGgxNmlfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJc3RydWN0IGV0aDE2aV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTQ5LDEyICs1NjAsNyBAQAogCUJJVENMUihpb2FkZHIgKyBDT05GSUdfUkVHXzEsIFBPV0VSVVApOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotCW1lbXNldChscCwgMCwgc2l6ZW9mKHN0cnVjdCBldGgxNmlfbG9jYWwpKTsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGV0aDE2aV9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gZXRoMTZpX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gZXRoMTZpX3R4OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZXRoMTZpX211bHRpY2FzdDsKLQlkZXYtPnR4X3RpbWVvdXQgCT0gZXRoMTZpX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzICAgICAgICAgPSAmZXRoMTZpX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7CiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhOWIxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTAsMCArMSwxMTEyIEBACisvKgorICogbGludXgvZHJpdmVycy9uZXQvZXRob2MuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEF2aW9uaWMgRGVzaWduIERldmVsb3BtZW50IEdtYkgKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEF2aW9uaWMgRGVzaWduIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFdyaXR0ZW4gYnkgVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvZXRob2MuaD4KKworLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZQlNT0RFUgkJMHgwMAorI2RlZmluZQlJTlRfU09VUkNFCTB4MDQKKyNkZWZpbmUJSU5UX01BU0sJMHgwOAorI2RlZmluZQlJUEdUCQkweDBjCisjZGVmaW5lCUlQR1IxCQkweDEwCisjZGVmaW5lCUlQR1IyCQkweDE0CisjZGVmaW5lCVBBQ0tFVExFTgkweDE4CisjZGVmaW5lCUNPTExDT05GCTB4MWMKKyNkZWZpbmUJVFhfQkRfTlVNCTB4MjAKKyNkZWZpbmUJQ1RSTE1PREVSCTB4MjQKKyNkZWZpbmUJTUlJTU9ERVIJMHgyOAorI2RlZmluZQlNSUlDT01NQU5ECTB4MmMKKyNkZWZpbmUJTUlJQUREUkVTUwkweDMwCisjZGVmaW5lCU1JSVRYX0RBVEEJMHgzNAorI2RlZmluZQlNSUlSWF9EQVRBCTB4MzgKKyNkZWZpbmUJTUlJU1RBVFVTCTB4M2MKKyNkZWZpbmUJTUFDX0FERFIwCTB4NDAKKyNkZWZpbmUJTUFDX0FERFIxCTB4NDQKKyNkZWZpbmUJRVRIX0hBU0gwCTB4NDgKKyNkZWZpbmUJRVRIX0hBU0gxCTB4NGMKKyNkZWZpbmUJRVRIX1RYQ1RSTAkweDUwCisKKy8qIG1vZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTU9ERVJfUlhFTgkoMSA8PCAgMCkgLyogcmVjZWl2ZSBlbmFibGUgKi8KKyNkZWZpbmUJTU9ERVJfVFhFTgkoMSA8PCAgMSkgLyogdHJhbnNtaXQgZW5hYmxlICovCisjZGVmaW5lCU1PREVSX05PUFJFCSgxIDw8ICAyKSAvKiBubyBwcmVhbWJsZSAqLworI2RlZmluZQlNT0RFUl9CUk8JKDEgPDwgIDMpIC8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisjZGVmaW5lCU1PREVSX0lBTQkoMSA8PCAgNCkgLyogaW5kaXZpZHVhbCBhZGRyZXNzIG1vZGUgKi8KKyNkZWZpbmUJTU9ERVJfUFJPCSgxIDw8ICA1KSAvKiBwcm9taXNjdW91cyBtb2RlICovCisjZGVmaW5lCU1PREVSX0lGRwkoMSA8PCAgNikgLyogaW50ZXJmcmFtZSBnYXAgZm9yIGluY29taW5nIGZyYW1lcyAqLworI2RlZmluZQlNT0RFUl9MT09QCSgxIDw8ICA3KSAvKiBsb29wYmFjayAqLworI2RlZmluZQlNT0RFUl9OQk8JKDEgPDwgIDgpIC8qIG5vIGJhY2stb2ZmICovCisjZGVmaW5lCU1PREVSX0VERQkoMSA8PCAgOSkgLyogZXhjZXNzIGRlZmVyIGVuYWJsZSAqLworI2RlZmluZQlNT0RFUl9GVUxMRAkoMSA8PCAxMCkgLyogZnVsbCBkdXBsZXggKi8KKyNkZWZpbmUJTU9ERVJfUkVTRVQJKDEgPDwgMTEpIC8qIEZJWE1FOiByZXNldCAodW5kb2N1bWVudGVkKSAqLworI2RlZmluZQlNT0RFUl9EQ1JDCSgxIDw8IDEyKSAvKiBkZWxheWVkIENSQyBlbmFibGUgKi8KKyNkZWZpbmUJTU9ERVJfQ1JDCSgxIDw8IDEzKSAvKiBDUkMgZW5hYmxlICovCisjZGVmaW5lCU1PREVSX0hVR0UJKDEgPDwgMTQpIC8qIGh1Z2UgcGFja2V0cyBlbmFibGUgKi8KKyNkZWZpbmUJTU9ERVJfUEFECSgxIDw8IDE1KSAvKiBwYWRkaW5nIGVuYWJsZWQgKi8KKyNkZWZpbmUJTU9ERVJfUlNNCSgxIDw8IDE2KSAvKiByZWNlaXZlIHNtYWxsIHBhY2tldHMgKi8KKworLyogaW50ZXJydXB0IHNvdXJjZSBhbmQgbWFzayByZWdpc3RlcnMgKi8KKyNkZWZpbmUJSU5UX01BU0tfVFhGCSgxIDw8IDApIC8qIHRyYW5zbWl0IGZyYW1lICovCisjZGVmaW5lCUlOVF9NQVNLX1RYRQkoMSA8PCAxKSAvKiB0cmFuc21pdCBlcnJvciAqLworI2RlZmluZQlJTlRfTUFTS19SWEYJKDEgPDwgMikgLyogcmVjZWl2ZSBmcmFtZSAqLworI2RlZmluZQlJTlRfTUFTS19SWEUJKDEgPDwgMykgLyogcmVjZWl2ZSBlcnJvciAqLworI2RlZmluZQlJTlRfTUFTS19CVVNZCSgxIDw8IDQpCisjZGVmaW5lCUlOVF9NQVNLX1RYQwkoMSA8PCA1KSAvKiB0cmFuc21pdCBjb250cm9sIGZyYW1lICovCisjZGVmaW5lCUlOVF9NQVNLX1JYQwkoMSA8PCA2KSAvKiByZWNlaXZlIGNvbnRyb2wgZnJhbWUgKi8KKworI2RlZmluZQlJTlRfTUFTS19UWAkoSU5UX01BU0tfVFhGIHwgSU5UX01BU0tfVFhFKQorI2RlZmluZQlJTlRfTUFTS19SWAkoSU5UX01BU0tfUlhGIHwgSU5UX01BU0tfUlhFKQorCisjZGVmaW5lCUlOVF9NQVNLX0FMTCAoIFwKKwkJSU5UX01BU0tfVFhGIHwgSU5UX01BU0tfVFhFIHwgXAorCQlJTlRfTUFTS19SWEYgfCBJTlRfTUFTS19SWEUgfCBcCisJCUlOVF9NQVNLX1RYQyB8IElOVF9NQVNLX1JYQyB8IFwKKwkJSU5UX01BU0tfQlVTWSBcCisJKQorCisvKiBwYWNrZXQgbGVuZ3RoIHJlZ2lzdGVyICovCisjZGVmaW5lCVBBQ0tFVExFTl9NSU4obWluKQkJKCgobWluKSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lCVBBQ0tFVExFTl9NQVgobWF4KQkJKCgobWF4KSAmIDB4ZmZmZikgPDwgIDApCisjZGVmaW5lCVBBQ0tFVExFTl9NSU5fTUFYKG1pbiwgbWF4KQkoUEFDS0VUTEVOX01JTihtaW4pIHwgXAorCQkJCQlQQUNLRVRMRU5fTUFYKG1heCkpCisKKy8qIHRyYW5zbWl0IGJ1ZmZlciBudW1iZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFhfQkRfTlVNX1ZBTCh4KQkoKCh4KSA8PSAweDgwKSA/ICh4KSA6IDB4ODApCisKKy8qIGNvbnRyb2wgbW9kdWxlIG1vZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ1RSTE1PREVSX1BBU1NBTEwJKDEgPDwgMCkgLyogcGFzcyBhbGwgcmVjZWl2ZSBmcmFtZXMgKi8KKyNkZWZpbmUJQ1RSTE1PREVSX1JYRkxPVwkoMSA8PCAxKSAvKiByZWNlaXZlIGNvbnRyb2wgZmxvdyAqLworI2RlZmluZQlDVFJMTU9ERVJfVFhGTE9XCSgxIDw8IDIpIC8qIHRyYW5zbWl0IGNvbnRyb2wgZmxvdyAqLworCisvKiBNSUkgbW9kZSByZWdpc3RlciAqLworI2RlZmluZQlNSUlNT0RFUl9DTEtESVYoeCkJKCh4KSAmIDB4ZmUpIC8qIG5lZWRzIHRvIGJlIGFuIGV2ZW4gbnVtYmVyICovCisjZGVmaW5lCU1JSU1PREVSX05PUFJFCQkoMSA8PCA4KSAvKiBubyBwcmVhbWJsZSAqLworCisvKiBNSUkgY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZQlNSUlDT01NQU5EX1NDQU4JCSgxIDw8IDApIC8qIHNjYW4gc3RhdHVzICovCisjZGVmaW5lCU1JSUNPTU1BTkRfUkVBRAkJKDEgPDwgMSkgLyogcmVhZCBzdGF0dXMgKi8KKyNkZWZpbmUJTUlJQ09NTUFORF9XUklURQkoMSA8PCAyKSAvKiB3cml0ZSBjb250cm9sIGRhdGEgKi8KKworLyogTUlJIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJQUREUkVTU19GSUFEKHgpCQkoKCh4KSAmIDB4MWYpIDw8IDApCisjZGVmaW5lCU1JSUFERFJFU1NfUkdBRCh4KQkJKCgoeCkgJiAweDFmKSA8PCA4KQorI2RlZmluZQlNSUlBRERSRVNTX0FERFIocGh5LCByZWcpCShNSUlBRERSRVNTX0ZJQUQocGh5KSB8IFwKKwkJCQkJTUlJQUREUkVTU19SR0FEKHJlZykpCisKKy8qIE1JSSB0cmFuc21pdCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lCU1JSVRYX0RBVEFfVkFMKHgpCSgoeCkgJiAweGZmZmYpCisKKy8qIE1JSSByZWNlaXZlIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJUlhfREFUQV9WQUwoeCkJKCh4KSAmIDB4ZmZmZikKKworLyogTUlJIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQlNSUlTVEFUVVNfTElOS0ZBSUwJKDEgPDwgMCkKKyNkZWZpbmUJTUlJU1RBVFVTX0JVU1kJCSgxIDw8IDEpCisjZGVmaW5lCU1JSVNUQVRVU19JTlZBTElECSgxIDw8IDIpCisKKy8qIFRYIGJ1ZmZlciBkZXNjcmlwdG9yICovCisjZGVmaW5lCVRYX0JEX0NTCQkoMSA8PCAgMCkgLyogY2FycmllciBzZW5zZSBsb3N0ICovCisjZGVmaW5lCVRYX0JEX0RGCQkoMSA8PCAgMSkgLyogZGVmZXIgaW5kaWNhdGlvbiAqLworI2RlZmluZQlUWF9CRF9MQwkJKDEgPDwgIDIpIC8qIGxhdGUgY29sbGlzaW9uICovCisjZGVmaW5lCVRYX0JEX1JMCQkoMSA8PCAgMykgLyogcmV0cmFuc21pc3Npb24gbGltaXQgKi8KKyNkZWZpbmUJVFhfQkRfUkVUUllfTUFTSwkoMHgwMGYwKQorI2RlZmluZQlUWF9CRF9SRVRSWSh4KQkJKCgoeCkgJiAweDAwZjApID4+ICA0KQorI2RlZmluZQlUWF9CRF9VUgkJKDEgPDwgIDgpIC8qIHRyYW5zbWl0dGVyIHVuZGVycnVuICovCisjZGVmaW5lCVRYX0JEX0NSQwkJKDEgPDwgMTEpIC8qIFRYIENSQyBlbmFibGUgKi8KKyNkZWZpbmUJVFhfQkRfUEFECQkoMSA8PCAxMikgLyogcGFkIGVuYWJsZSBmb3Igc2hvcnQgcGFja2V0cyAqLworI2RlZmluZQlUWF9CRF9XUkFQCQkoMSA8PCAxMykKKyNkZWZpbmUJVFhfQkRfSVJRCQkoMSA8PCAxNCkgLyogaW50ZXJydXB0IHJlcXVlc3QgZW5hYmxlICovCisjZGVmaW5lCVRYX0JEX1JFQURZCQkoMSA8PCAxNSkgLyogVFggYnVmZmVyIHJlYWR5ICovCisjZGVmaW5lCVRYX0JEX0xFTih4KQkJKCgoeCkgJiAweGZmZmYpIDw8IDE2KQorI2RlZmluZQlUWF9CRF9MRU5fTUFTSwkJKDB4ZmZmZiA8PCAxNikKKworI2RlZmluZQlUWF9CRF9TVEFUUwkJKFRYX0JEX0NTIHwgVFhfQkRfREYgfCBUWF9CRF9MQyB8IFwKKwkJCQlUWF9CRF9STCB8IFRYX0JEX1JFVFJZX01BU0sgfCBUWF9CRF9VUikKKworLyogUlggYnVmZmVyIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJUlhfQkRfTEMJKDEgPDwgIDApIC8qIGxhdGUgY29sbGlzaW9uICovCisjZGVmaW5lCVJYX0JEX0NSQwkoMSA8PCAgMSkgLyogUlggQ1JDIGVycm9yICovCisjZGVmaW5lCVJYX0JEX1NGCSgxIDw8ICAyKSAvKiBzaG9ydCBmcmFtZSAqLworI2RlZmluZQlSWF9CRF9UTAkoMSA8PCAgMykgLyogdG9vIGxvbmcgKi8KKyNkZWZpbmUJUlhfQkRfRE4JKDEgPDwgIDQpIC8qIGRyaWJibGUgbmliYmxlICovCisjZGVmaW5lCVJYX0JEX0lTCSgxIDw8ICA1KSAvKiBpbnZhbGlkIHN5bWJvbCAqLworI2RlZmluZQlSWF9CRF9PUgkoMSA8PCAgNikgLyogcmVjZWl2ZXIgb3ZlcnJ1biAqLworI2RlZmluZQlSWF9CRF9NSVNTCSgxIDw8ICA3KQorI2RlZmluZQlSWF9CRF9DRgkoMSA8PCAgOCkgLyogY29udHJvbCBmcmFtZSAqLworI2RlZmluZQlSWF9CRF9XUkFQCSgxIDw8IDEzKQorI2RlZmluZQlSWF9CRF9JUlEJKDEgPDwgMTQpIC8qIGludGVycnVwdCByZXF1ZXN0IGVuYWJsZSAqLworI2RlZmluZQlSWF9CRF9FTVBUWQkoMSA8PCAxNSkKKyNkZWZpbmUJUlhfQkRfTEVOKHgpCSgoKHgpICYgMHhmZmZmKSA8PCAxNikKKworI2RlZmluZQlSWF9CRF9TVEFUUwkoUlhfQkRfTEMgfCBSWF9CRF9DUkMgfCBSWF9CRF9TRiB8IFJYX0JEX1RMIHwgXAorCQkJUlhfQkRfRE4gfCBSWF9CRF9JUyB8IFJYX0JEX09SIHwgUlhfQkRfTUlTUykKKworI2RlZmluZQlFVEhPQ19CVUZTSVoJCTE1MzYKKyNkZWZpbmUJRVRIT0NfWkxFTgkJNjQKKyNkZWZpbmUJRVRIT0NfQkRfQkFTRQkJMHg0MDAKKyNkZWZpbmUJRVRIT0NfVElNRU9VVAkJKEhaIC8gMikKKyNkZWZpbmUJRVRIT0NfTUlJX1RJTUVPVVQJKDEgKyAoSFogLyA1KSkKKworLyoqCisgKiBzdHJ1Y3QgZXRob2MgLSBkcml2ZXItcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAaW9iYXNlOglwb2ludGVyIHRvIEkvTyBtZW1vcnkgcmVnaW9uCisgKiBAbWVtYmFzZToJcG9pbnRlciB0byBidWZmZXIgbWVtb3J5IHJlZ2lvbgorICogQG51bV90eDoJbnVtYmVyIG9mIHNlbmQgYnVmZmVycworICogQGN1cl90eDoJbGFzdCBzZW5kIGJ1ZmZlciB3cml0dGVuCisgKiBAZHR5X3R4OglsYXN0IGJ1ZmZlciBhY3R1YWxseSBzZW50CisgKiBAbnVtX3J4OgludW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJzCisgKiBAY3VyX3J4OgljdXJyZW50IHJlY2VpdmUgYnVmZmVyCisgKiBAbmV0ZGV2Oglwb2ludGVyIHRvIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorICogQG5hcGk6CU5BUEkgc3RydWN0dXJlCisgKiBAc3RhdHM6CW5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MKKyAqIEBtc2dfZW5hYmxlOglkZXZpY2Ugc3RhdGUgZmxhZ3MKKyAqIEByeF9sb2NrOglyZWNlaXZlIGxvY2sKKyAqIEBsb2NrOglkZXZpY2UgbG9jaworICogQHBoeToJYXR0YWNoZWQgUEhZCisgKiBAbWRpbzoJTURJTyBidXMgZm9yIFBIWSBhY2Nlc3MKKyAqIEBwaHlfaWQ6CWFkZHJlc3Mgb2YgYXR0YWNoZWQgUEhZCisgKi8KK3N0cnVjdCBldGhvYyB7CisJdm9pZCBfX2lvbWVtICppb2Jhc2U7CisJdm9pZCBfX2lvbWVtICptZW1iYXNlOworCisJdW5zaWduZWQgaW50IG51bV90eDsKKwl1bnNpZ25lZCBpbnQgY3VyX3R4OworCXVuc2lnbmVkIGludCBkdHlfdHg7CisKKwl1bnNpZ25lZCBpbnQgbnVtX3J4OworCXVuc2lnbmVkIGludCBjdXJfcng7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXUzMiBtc2dfZW5hYmxlOworCisJc3BpbmxvY2tfdCByeF9sb2NrOworCXNwaW5sb2NrX3QgbG9jazsKKworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CisJc3RydWN0IG1paV9idXMgKm1kaW87CisJczggcGh5X2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZXRob2NfYmQgLSBidWZmZXIgZGVzY3JpcHRvcgorICogQHN0YXQ6CWJ1ZmZlciBzdGF0aXN0aWNzCisgKiBAYWRkcjoJcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MKKyAqLworc3RydWN0IGV0aG9jX2JkIHsKKwl1MzIgc3RhdDsKKwl1MzIgYWRkcjsKK307CisKK3N0YXRpYyB1MzIgZXRob2NfcmVhZChzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCkKK3sKKwlyZXR1cm4gaW9yZWFkMzIoZGV2LT5pb2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBldGhvY193cml0ZShzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCwgdTMyIGRhdGEpCit7CisJaW93cml0ZTMyKGRhdGEsIGRldi0+aW9iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZXRob2NfcmVhZF9iZChzdHJ1Y3QgZXRob2MgKmRldiwgaW50IGluZGV4LCBzdHJ1Y3QgZXRob2NfYmQgKmJkKQoreworCWxvZmZfdCBvZmZzZXQgPSBFVEhPQ19CRF9CQVNFICsgKGluZGV4ICogc2l6ZW9mKHN0cnVjdCBldGhvY19iZCkpOworCWJkLT5zdGF0ID0gZXRob2NfcmVhZChkZXYsIG9mZnNldCArIDApOworCWJkLT5hZGRyID0gZXRob2NfcmVhZChkZXYsIG9mZnNldCArIDQpOworfQorCitzdGF0aWMgdm9pZCBldGhvY193cml0ZV9iZChzdHJ1Y3QgZXRob2MgKmRldiwgaW50IGluZGV4LAorCQljb25zdCBzdHJ1Y3QgZXRob2NfYmQgKmJkKQoreworCWxvZmZfdCBvZmZzZXQgPSBFVEhPQ19CRF9CQVNFICsgKGluZGV4ICogc2l6ZW9mKHN0cnVjdCBldGhvY19iZCkpOworCWV0aG9jX3dyaXRlKGRldiwgb2Zmc2V0ICsgMCwgYmQtPnN0YXQpOworCWV0aG9jX3dyaXRlKGRldiwgb2Zmc2V0ICsgNCwgYmQtPmFkZHIpOworfQorCitzdGF0aWMgdm9pZCBldGhvY19lbmFibGVfaXJxKHN0cnVjdCBldGhvYyAqZGV2LCB1MzIgbWFzaykKK3sKKwl1MzIgaW1hc2sgPSBldGhvY19yZWFkKGRldiwgSU5UX01BU0spOworCWltYXNrIHw9IG1hc2s7CisJZXRob2Nfd3JpdGUoZGV2LCBJTlRfTUFTSywgaW1hc2spOworfQorCitzdGF0aWMgdm9pZCBldGhvY19kaXNhYmxlX2lycShzdHJ1Y3QgZXRob2MgKmRldiwgdTMyIG1hc2spCit7CisJdTMyIGltYXNrID0gZXRob2NfcmVhZChkZXYsIElOVF9NQVNLKTsKKwlpbWFzayAmPSB+bWFzazsKKwlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQoreworCWV0aG9jX3dyaXRlKGRldiwgSU5UX1NPVVJDRSwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCit7CisJdTMyIG1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOworCW1vZGUgfD0gTU9ERVJfUlhFTiB8IE1PREVSX1RYRU47CisJZXRob2Nfd3JpdGUoZGV2LCBNT0RFUiwgbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX2Rpc2FibGVfcnhfYW5kX3R4KHN0cnVjdCBldGhvYyAqZGV2KQoreworCXUzMiBtb2RlID0gZXRob2NfcmVhZChkZXYsIE1PREVSKTsKKwltb2RlICY9IH4oTU9ERVJfUlhFTiB8IE1PREVSX1RYRU4pOworCWV0aG9jX3dyaXRlKGRldiwgTU9ERVIsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGV0aG9jX2luaXRfcmluZyhzdHJ1Y3QgZXRob2MgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2NfYmQgYmQ7CisJaW50IGk7CisKKwlkZXYtPmN1cl90eCA9IDA7CisJZGV2LT5kdHlfdHggPSAwOworCWRldi0+Y3VyX3J4ID0gMDsKKworCS8qIHNldHVwIHRyYW5zbWlzc2lvbiBidWZmZXJzICovCisJYmQuYWRkciA9IDA7CisJYmQuc3RhdCA9IFRYX0JEX0lSUSB8IFRYX0JEX0NSQzsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eDsgaSsrKSB7CisJCWlmIChpID09IGRldi0+bnVtX3R4IC0gMSkKKwkJCWJkLnN0YXQgfD0gVFhfQkRfV1JBUDsKKworCQlldGhvY193cml0ZV9iZChkZXYsIGksICZiZCk7CisJCWJkLmFkZHIgKz0gRVRIT0NfQlVGU0laOworCX0KKworCWJkLmFkZHIgPSBkZXYtPm51bV90eCAqIEVUSE9DX0JVRlNJWjsKKwliZC5zdGF0ID0gUlhfQkRfRU1QVFkgfCBSWF9CRF9JUlE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fcng7IGkrKykgeworCQlpZiAoaSA9PSBkZXYtPm51bV9yeCAtIDEpCisJCQliZC5zdGF0IHw9IFJYX0JEX1dSQVA7CisKKwkJZXRob2Nfd3JpdGVfYmQoZGV2LCBkZXYtPm51bV90eCArIGksICZiZCk7CisJCWJkLmFkZHIgKz0gRVRIT0NfQlVGU0laOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV0aG9jX3Jlc2V0KHN0cnVjdCBldGhvYyAqZGV2KQoreworCXUzMiBtb2RlOworCisJLyogVE9ETzogcmVzZXQgY29udHJvbGxlcj8gKi8KKworCWV0aG9jX2Rpc2FibGVfcnhfYW5kX3R4KGRldik7CisKKwkvKiBUT0RPOiBzZXR1cCByZWdpc3RlcnMgKi8KKworCS8qIGVuYWJsZSBGQ1MgZ2VuZXJhdGlvbiBhbmQgYXV0b21hdGljIHBhZGRpbmcgKi8KKwltb2RlID0gZXRob2NfcmVhZChkZXYsIE1PREVSKTsKKwltb2RlIHw9IE1PREVSX0NSQyB8IE1PREVSX1BBRDsKKwlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKKworCS8qIHNldCBmdWxsLWR1cGxleCBtb2RlICovCisJbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CisJbW9kZSB8PSBNT0RFUl9GVUxMRDsKKwlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKKwlldGhvY193cml0ZShkZXYsIElQR1QsIDB4MTUpOworCisJZXRob2NfYWNrX2lycShkZXYsIElOVF9NQVNLX0FMTCk7CisJZXRob2NfZW5hYmxlX2lycShkZXYsIElOVF9NQVNLX0FMTCk7CisJZXRob2NfZW5hYmxlX3J4X2FuZF90eChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGV0aG9jX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgZXRob2MgKmRldiwKKwkJc3RydWN0IGV0aG9jX2JkICpiZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9UTCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBmcmFtZSB0b28gbG9uZ1xuIik7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXQrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9TRikgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBmcmFtZSB0b28gc2hvcnRcbiIpOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJcmV0Kys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfRE4pIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogZHJpYmJsZSBuaWJibGVcbiIpOworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX0NSQykgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiB3cm9uZyBDUkNcbiIpOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJcmV0Kys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfT1IpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogb3ZlcnJ1blxuIik7CisJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJcmV0Kys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfTUlTUykKKwkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9MQykgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBsYXRlIGNvbGxpc2lvblxuIik7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOworCQlyZXQrKzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV0aG9jX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBjb3VudDsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGxpbWl0OyArK2NvdW50KSB7CisJCXVuc2lnbmVkIGludCBlbnRyeTsKKwkJc3RydWN0IGV0aG9jX2JkIGJkOworCisJCWVudHJ5ID0gcHJpdi0+bnVtX3R4ICsgKHByaXYtPmN1cl9yeCAlIHByaXYtPm51bV9yeCk7CisJCWV0aG9jX3JlYWRfYmQocHJpdiwgZW50cnksICZiZCk7CisJCWlmIChiZC5zdGF0ICYgUlhfQkRfRU1QVFkpCisJCQlicmVhazsKKworCQlpZiAoZXRob2NfdXBkYXRlX3J4X3N0YXRzKHByaXYsICZiZCkgPT0gMCkgeworCQkJaW50IHNpemUgPSBiZC5zdGF0ID4+IDE2OworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBzaXplKTsKKwkJCWlmIChsaWtlbHkoc2tiKSkgeworCQkJCXZvaWQgKnNyYyA9IHByaXYtPm1lbWJhc2UgKyBiZC5hZGRyOworCQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLCBzcmMsIHNpemUpOworCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlkZXZfd2FybigmZGV2LT5kZXYsICJsb3cgb24gbWVtb3J5IC0gIgorCQkJCQkJCSJwYWNrZXQgZHJvcHBlZFxuIik7CisKKwkJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBjbGVhciB0aGUgYnVmZmVyIGRlc2NyaXB0b3Igc28gaXQgY2FuIGJlIHJldXNlZCAqLworCQliZC5zdGF0ICY9IH5SWF9CRF9TVEFUUzsKKwkJYmQuc3RhdCB8PSAgUlhfQkRfRU1QVFk7CisJCWV0aG9jX3dyaXRlX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCQlwcml2LT5jdXJfcngrKzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBldGhvYyAqZGV2LCBzdHJ1Y3QgZXRob2NfYmQgKmJkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXYtPm5ldGRldjsKKworCWlmIChiZC0+c3RhdCAmIFRYX0JEX0xDKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiVFg6IGxhdGUgY29sbGlzaW9uXG4iKTsKKwkJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgVFhfQkRfUkwpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJUWDogcmV0cmFuc21pdCBsaW1pdFxuIik7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBUWF9CRF9VUikgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiB1bmRlcnJ1blxuIik7CisJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBUWF9CRF9DUykgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiBjYXJyaWVyIHNlbnNlIGxvc3RcbiIpOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgVFhfQkRfU1RBVFMpCisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKGJkLT5zdGF0ID4+IDQpICYgMHhmOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gYmQtPnN0YXQgPj4gMTY7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwl3aGlsZSAocHJpdi0+ZHR5X3R4ICE9IHByaXYtPmN1cl90eCkgeworCQl1bnNpZ25lZCBpbnQgZW50cnkgPSBwcml2LT5kdHlfdHggJSBwcml2LT5udW1fdHg7CisJCXN0cnVjdCBldGhvY19iZCBiZDsKKworCQlldGhvY19yZWFkX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCQlpZiAoYmQuc3RhdCAmIFRYX0JEX1JFQURZKQorCQkJYnJlYWs7CisKKwkJZW50cnkgPSAoKytwcml2LT5kdHlfdHgpICUgcHJpdi0+bnVtX3R4OworCQkodm9pZClldGhvY191cGRhdGVfdHhfc3RhdHMocHJpdiwgJmJkKTsKKwl9CisKKwlpZiAoKHByaXYtPmN1cl90eCAtIHByaXYtPmR0eV90eCkgPD0gKHByaXYtPm51bV90eCAvIDIpKQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisKKwlldGhvY19hY2tfaXJxKHByaXYsIElOVF9NQVNLX1RYKTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBldGhvY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcGVuZGluZzsKKworCWV0aG9jX2Rpc2FibGVfaXJxKHByaXYsIElOVF9NQVNLX0FMTCk7CisJcGVuZGluZyA9IGV0aG9jX3JlYWQocHJpdiwgSU5UX1NPVVJDRSk7CisJaWYgKHVubGlrZWx5KHBlbmRpbmcgPT0gMCkpIHsKKwkJZXRob2NfZW5hYmxlX2lycShwcml2LCBJTlRfTUFTS19BTEwpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJZXRob2NfYWNrX2lycShwcml2LCBJTlRfTUFTS19BTEwpOworCisJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19CVVNZKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicGFja2V0IGRyb3BwZWRcbiIpOworCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJfQorCisJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19SWCkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJfSBlbHNlIHsKKwkJZXRob2NfZW5hYmxlX2lycShwcml2LCBJTlRfTUFTS19SWCk7CisJfQorCisJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19UWCkKKwkJZXRob2NfdHgoZGV2KTsKKworCWV0aG9jX2VuYWJsZV9pcnEocHJpdiwgSU5UX01BU0tfQUxMICYgfklOVF9NQVNLX1JYKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCAqbWFjID0gKHU4ICopYWRkcjsKKwl1MzIgcmVnOworCisJcmVnID0gZXRob2NfcmVhZChwcml2LCBNQUNfQUREUjApOworCW1hY1syXSA9IChyZWcgPj4gMjQpICYgMHhmZjsKKwltYWNbM10gPSAocmVnID4+IDE2KSAmIDB4ZmY7CisJbWFjWzRdID0gKHJlZyA+PiAgOCkgJiAweGZmOworCW1hY1s1XSA9IChyZWcgPj4gIDApICYgMHhmZjsKKworCXJlZyA9IGV0aG9jX3JlYWQocHJpdiwgTUFDX0FERFIxKTsKKwltYWNbMF0gPSAocmVnID4+ICA4KSAmIDB4ZmY7CisJbWFjWzFdID0gKHJlZyA+PiAgMCkgJiAweGZmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBldGhvYywgbmFwaSk7CisJaW50IHdvcmtfZG9uZSA9IDA7CisKKwl3b3JrX2RvbmUgPSBldGhvY19yeChwcml2LT5uZXRkZXYsIGJ1ZGdldCk7CisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX1JYKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwl9CisKKwlyZXR1cm4gd29ya19kb25lOworfQorCitzdGF0aWMgaW50IGV0aG9jX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5LCBpbnQgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBFVEhPQ19NSUlfVElNRU9VVDsKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBidXMtPnByaXY7CisKKwlldGhvY193cml0ZShwcml2LCBNSUlBRERSRVNTLCBNSUlBRERSRVNTX0FERFIocGh5LCByZWcpKTsKKwlldGhvY193cml0ZShwcml2LCBNSUlDT01NQU5ELCBNSUlDT01NQU5EX1JFQUQpOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCXUzMiBzdGF0dXMgPSBldGhvY19yZWFkKHByaXYsIE1JSVNUQVRVUyk7CisJCWlmICghKHN0YXR1cyAmIE1JSVNUQVRVU19CVVNZKSkgeworCQkJdTMyIGRhdGEgPSBldGhvY19yZWFkKHByaXYsIE1JSVJYX0RBVEEpOworCQkJLyogcmVzZXQgTUlJIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKwkJCWV0aG9jX3dyaXRlKHByaXYsIE1JSUNPTU1BTkQsIDApOworCQkJcmV0dXJuIGRhdGE7CisJCX0KKworCQlzY2hlZHVsZSgpOworCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5LCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBFVEhPQ19NSUlfVElNRU9VVDsKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBidXMtPnByaXY7CisKKwlldGhvY193cml0ZShwcml2LCBNSUlBRERSRVNTLCBNSUlBRERSRVNTX0FERFIocGh5LCByZWcpKTsKKwlldGhvY193cml0ZShwcml2LCBNSUlUWF9EQVRBLCB2YWwpOworCWV0aG9jX3dyaXRlKHByaXYsIE1JSUNPTU1BTkQsIE1JSUNPTU1BTkRfV1JJVEUpOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCXUzMiBzdGF0ID0gZXRob2NfcmVhZChwcml2LCBNSUlTVEFUVVMpOworCQlpZiAoIShzdGF0ICYgTUlJU1RBVFVTX0JVU1kpKQorCQkJcmV0dXJuIDA7CisKKwkJc2NoZWR1bGUoKTsKKwl9CisKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IGV0aG9jX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXRob2NfbWRpb19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfbWRpb19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykgeworCQlwaHkgPSBwcml2LT5tZGlvLT5waHlfbWFwW2ldOworCQlpZiAocGh5KSB7CisJCQlpZiAocHJpdi0+cGh5X2lkICE9IC0xKSB7CisJCQkJLyogYXR0YWNoIHRvIHNwZWNpZmllZCBQSFkgKi8KKwkJCQlpZiAocHJpdi0+cGh5X2lkID09IHBoeS0+YWRkcikKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCS8qIGF1dG9zZWxlY3QgUEhZIGlmIG5vbmUgd2FzIHNwZWNpZmllZCAqLworCQkJCWlmIChwaHktPmFkZHIgIT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXBoeSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIFBIWSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5LT5kZXYpLCAmZXRob2NfbWRpb19wb2xsLCAwLAorCQkJUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5KTsKKwl9CisKKwlwcml2LT5waHkgPSBwaHk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRob2Nfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IG1pbl90eCA9IDI7CisJdW5zaWduZWQgaW50IG51bV9iZDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGV0aG9jX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQlkZXYtPm5hbWUsIGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIFRYL1JYIGJ1ZmZlcnMgKi8KKwludW1fYmQgPSAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQgKyAxKSAvIEVUSE9DX0JVRlNJWjsKKwlwcml2LT5udW1fdHggPSBtaW4obWluX3R4LCBudW1fYmQgLyA0KTsKKwlwcml2LT5udW1fcnggPSBudW1fYmQgLSBwcml2LT5udW1fdHg7CisJZXRob2Nfd3JpdGUocHJpdiwgVFhfQkRfTlVNLCBwcml2LT5udW1fdHgpOworCisJZXRob2NfaW5pdF9yaW5nKHByaXYpOworCWV0aG9jX3Jlc2V0KHByaXYpOworCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiByZXN1bWluZyBxdWV1ZVxuIik7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiBzdGFydGluZyBxdWV1ZVxuIik7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJfQorCisJcGh5X3N0YXJ0KHByaXYtPnBoeSk7CisJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOworCisJaWYgKG5ldGlmX21zZ19pZnVwKHByaXYpKSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIkkvTzogJTA4bHggTWVtb3J5OiAlMDhseC0lMDhseFxuIiwKKwkJCQlkZXYtPmJhc2VfYWRkciwgZGV2LT5tZW1fc3RhcnQsIGRldi0+bWVtX2VuZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRob2Nfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOworCisJaWYgKHByaXYtPnBoeSkKKwkJcGh5X3N0b3AocHJpdi0+cGh5KTsKKworCWV0aG9jX2Rpc2FibGVfcnhfYW5kX3R4KHByaXYpOworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV0aG9jX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICptZGlvID0gaWZfbWlpKGlmcik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IE5VTEw7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY21kICE9IFNJT0NHTUlJUEhZKSB7CisJCWlmIChtZGlvLT5waHlfaWQgPj0gUEhZX01BWF9BRERSKQorCQkJcmV0dXJuIC1FUkFOR0U7CisKKwkJcGh5ID0gcHJpdi0+bWRpby0+cGh5X21hcFttZGlvLT5waHlfaWRdOworCQlpZiAoIXBoeSkKKwkJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCXBoeSA9IHByaXYtPnBoeTsKKwl9CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwaHksIG1kaW8sIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IGV0aG9jX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTggKm1hYyA9ICh1OCAqKWFkZHI7CisKKwlldGhvY193cml0ZShwcml2LCBNQUNfQUREUjAsIChtYWNbMl0gPDwgMjQpIHwgKG1hY1szXSA8PCAxNikgfAorCQkJCSAgICAgKG1hY1s0XSA8PCAgOCkgfCAobWFjWzVdIDw8ICAwKSk7CisJZXRob2Nfd3JpdGUocHJpdiwgTUFDX0FERFIxLCAobWFjWzBdIDw8ICA4KSB8IChtYWNbMV0gPDwgIDApKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldGhvY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBtb2RlID0gZXRob2NfcmVhZChwcml2LCBNT0RFUik7CisJc3RydWN0IGRldl9tY19saXN0ICptYyA9IE5VTEw7CisJdTMyIGhhc2hbMl0gPSB7IDAsIDAgfTsKKworCS8qIHNldCBsb29wYmFjayBtb2RlIGlmIHJlcXVlc3RlZCAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQorCQltb2RlIHw9ICBNT0RFUl9MT09QOworCWVsc2UKKwkJbW9kZSAmPSB+TU9ERVJfTE9PUDsKKworCS8qIHJlY2VpdmUgYnJvYWRjYXN0IGZyYW1lcyBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpCisJCW1vZGUgJj0gfk1PREVSX0JSTzsKKwllbHNlCisJCW1vZGUgfD0gIE1PREVSX0JSTzsKKworCS8qIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlIGlmIHJlcXVlc3RlZCAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCW1vZGUgfD0gIE1PREVSX1BSTzsKKwllbHNlCisJCW1vZGUgJj0gfk1PREVSX1BSTzsKKworCWV0aG9jX3dyaXRlKHByaXYsIE1PREVSLCBtb2RlKTsKKworCS8qIHJlY2VpdmUgbXVsdGljYXN0IGZyYW1lcyAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWhhc2hbMF0gPSAweGZmZmZmZmZmOworCQloYXNoWzFdID0gMHhmZmZmZmZmZjsKKwl9IGVsc2UgeworCQlmb3IgKG1jID0gZGV2LT5tY19saXN0OyBtYzsgbWMgPSBtYy0+bmV4dCkgeworCQkJdTMyIGNyYyA9IGV0aGVyX2NyYyhtYy0+ZG1pX2FkZHJsZW4sIG1jLT5kbWlfYWRkcik7CisJCQlpbnQgYml0ID0gKGNyYyA+PiAyNikgJiAweDNmOworCQkJaGFzaFtiaXQgPj4gNV0gfD0gMSA8PCAoYml0ICYgMHgxZik7CisJCX0KKwl9CisKKwlldGhvY193cml0ZShwcml2LCBFVEhfSEFTSDAsIGhhc2hbMF0pOworCWV0aG9jX3dyaXRlKHByaXYsIEVUSF9IQVNIMSwgaGFzaFsxXSk7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIHZvaWQgZXRob2NfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHBlbmRpbmcgPSBldGhvY19yZWFkKHByaXYsIElOVF9TT1VSQ0UpOworCWlmIChsaWtlbHkocGVuZGluZykpCisJCWV0aG9jX2ludGVycnVwdChkZXYtPmlycSwgZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpldGhvY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuICZwcml2LT5zdGF0czsKK30KKworc3RhdGljIGludCBldGhvY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZXRob2NfYmQgYmQ7CisJdW5zaWduZWQgaW50IGVudHJ5OworCXZvaWQgKmRlc3Q7CisKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPiBFVEhPQ19CVUZTSVopKSB7CisJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCWVudHJ5ID0gcHJpdi0+Y3VyX3R4ICUgcHJpdi0+bnVtX3R4OworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXByaXYtPmN1cl90eCsrOworCisJZXRob2NfcmVhZF9iZChwcml2LCBlbnRyeSwgJmJkKTsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBFVEhPQ19aTEVOKSkKKwkJYmQuc3RhdCB8PSAgVFhfQkRfUEFEOworCWVsc2UKKwkJYmQuc3RhdCAmPSB+VFhfQkRfUEFEOworCisJZGVzdCA9IHByaXYtPm1lbWJhc2UgKyBiZC5hZGRyOworCW1lbWNweV90b2lvKGRlc3QsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJYmQuc3RhdCAmPSB+KFRYX0JEX1NUQVRTIHwgVFhfQkRfTEVOX01BU0spOworCWJkLnN0YXQgfD0gVFhfQkRfTEVOKHNrYi0+bGVuKTsKKwlldGhvY193cml0ZV9iZChwcml2LCBlbnRyeSwgJmJkKTsKKworCWJkLnN0YXQgfD0gVFhfQkRfUkVBRFk7CisJZXRob2Nfd3JpdGVfYmQocHJpdiwgZW50cnksICZiZCk7CisKKwlpZiAocHJpdi0+Y3VyX3R4ID09IChwcml2LT5kdHlfdHggKyBwcml2LT5udW1fdHgpKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAic3RvcHBpbmcgcXVldWVcbiIpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJfQorCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGV0aG9jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gZXRob2Nfb3BlbiwKKwkubmRvX3N0b3AgPSBldGhvY19zdG9wLAorCS5uZG9fZG9faW9jdGwgPSBldGhvY19pb2N0bCwKKwkubmRvX3NldF9jb25maWcgPSBldGhvY19jb25maWcsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhvY19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBldGhvY19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1ID0gZXRob2NfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBldGhvY190eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzID0gZXRob2Nfc3RhdHMsCisJLm5kb19zdGFydF94bWl0ID0gZXRob2Nfc3RhcnRfeG1pdCwKK307CisKKy8qKgorICogZXRob2NfcHJvYmUoKSAtIGluaXRpYWxpemUgT3BlbkNvcmVzIGV0aGVybmV0IE1BQworICogcGRldjoJcGxhdGZvcm0gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICptbWlvID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSA9IE5VTEw7CisJc3RydWN0IGV0aG9jICpwcml2ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgcGh5OworCWludCByZXQgPSAwOworCisJLyogYWxsb2NhdGUgbmV0d29ya2luZyBkZXZpY2UgKi8KKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGV0aG9jKSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpOworCisJLyogb2J0YWluIEkvTyBtZW1vcnkgc3BhY2UgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gSS9PIG1lbW9yeSBzcGFjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmcmVlOworCX0KKworCW1taW8gPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZyZWU7CisJfQorCisJbmV0ZGV2LT5iYXNlX2FkZHIgPSBtbWlvLT5zdGFydDsKKworCS8qIG9idGFpbiBidWZmZXIgbWVtb3J5IHNwYWNlICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIG1lbW9yeSBzcGFjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmcmVlOworCX0KKworCW1lbSA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCByZXMtPm5hbWUpOworCWlmICghbWVtKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IG1lbW9yeSBzcGFjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmcmVlOworCX0KKworCW5ldGRldi0+bWVtX3N0YXJ0ID0gbWVtLT5zdGFydDsKKwluZXRkZXYtPm1lbV9lbmQgICA9IG1lbS0+ZW5kOworCisJLyogb2J0YWluIGRldmljZSBJUlEgbnVtYmVyICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIElSUVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmcmVlOworCX0KKworCW5ldGRldi0+aXJxID0gcmVzLT5zdGFydDsKKworCS8qIHNldHVwIGRyaXZlci1wcml2YXRlIGRhdGEgKi8KKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlwcml2LT5uZXRkZXYgPSBuZXRkZXY7CisKKwlwcml2LT5pb2Jhc2UgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCBuZXRkZXYtPmJhc2VfYWRkciwKKwkJCW1taW8tPmVuZCAtIG1taW8tPnN0YXJ0ICsgMSk7CisJaWYgKCFwcml2LT5pb2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIEkvTyBtZW1vcnkgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJpdi0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIG5ldGRldi0+bWVtX3N0YXJ0LAorCQkJbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CisJaWYgKCFwcml2LT5tZW1iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBtZW1vcnkgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogQWxsb3cgdGhlIHBsYXRmb3JtIHNldHVwIGNvZGUgdG8gcGFzcyBpbiBhIE1BQyBhZGRyZXNzLiAqLworCWlmIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdHJ1Y3QgZXRob2NfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQkJKHN0cnVjdCBldGhvY19wbGF0Zm9ybV9kYXRhICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBwZGF0YS0+aHdhZGRyLCBJRkhXQUREUkxFTik7CisJCXByaXYtPnBoeV9pZCA9IHBkYXRhLT5waHlfaWQ7CisJfQorCisJLyogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gTUFDIGFkZHJlc3MgaXMgdmFsaWQuIElmIGl0IGlzbid0LCByZWFkIHRoZQorCSAqIGN1cnJlbnQgTUFDIGZyb20gdGhlIGNvbnRyb2xsZXIuICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKQorCQlldGhvY19nZXRfbWFjX2FkZHJlc3MobmV0ZGV2LCBuZXRkZXYtPmRldl9hZGRyKTsKKworCS8qIENoZWNrIHRoZSBNQUMgYWdhaW4gZm9yIHZhbGlkaXR5LCBpZiBpdCBzdGlsbCBpc24ndCBjaG9vc2UgYW5kCisJICogcHJvZ3JhbSBhIHJhbmRvbSBvbmUuICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKQorCQlyYW5kb21fZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKTsKKworCWV0aG9jX3NldF9tYWNfYWRkcmVzcyhuZXRkZXYsIG5ldGRldi0+ZGV2X2FkZHIpOworCisJLyogcmVnaXN0ZXIgTUlJIGJ1cyAqLworCXByaXYtPm1kaW8gPSBtZGlvYnVzX2FsbG9jKCk7CisJaWYgKCFwcml2LT5tZGlvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZTsKKwl9CisKKwlwcml2LT5tZGlvLT5uYW1lID0gImV0aG9jLW1kaW8iOworCXNucHJpbnRmKHByaXYtPm1kaW8tPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcy0lZCIsCisJCQlwcml2LT5tZGlvLT5uYW1lLCBwZGV2LT5pZCk7CisJcHJpdi0+bWRpby0+cmVhZCA9IGV0aG9jX21kaW9fcmVhZDsKKwlwcml2LT5tZGlvLT53cml0ZSA9IGV0aG9jX21kaW9fd3JpdGU7CisJcHJpdi0+bWRpby0+cmVzZXQgPSBldGhvY19tZGlvX3Jlc2V0OworCXByaXYtPm1kaW8tPnByaXYgPSBwcml2OworCisJcHJpdi0+bWRpby0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5tZGlvLT5pcnEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX21kaW87CisJfQorCisJZm9yIChwaHkgPSAwOyBwaHkgPCBQSFlfTUFYX0FERFI7IHBoeSsrKQorCQlwcml2LT5tZGlvLT5pcnFbcGh5XSA9IFBIWV9QT0xMOworCisJcmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LT5tZGlvKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIE1ESU8gYnVzXG4iKTsKKwkJZ290byBmcmVlX21kaW87CisJfQorCisJcmV0ID0gZXRob2NfbWRpb19wcm9iZShuZXRkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJmYWlsZWQgdG8gcHJvYmUgTURJTyBidXNcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWV0aGVyX3NldHVwKG5ldGRldik7CisKKwkvKiBzZXR1cCB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUgKi8KKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmZXRob2NfbmV0ZGV2X29wczsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRIT0NfVElNRU9VVDsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IDA7CisKKwkvKiBzZXR1cCBOQVBJICovCisJbWVtc2V0KCZwcml2LT5uYXBpLCAwLCBzaXplb2YocHJpdi0+bmFwaSkpOworCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnByaXYtPm5hcGksIGV0aG9jX3BvbGwsIDY0KTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnRlcmZhY2VcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWdvdG8gb3V0OworCitlcnJvcjoKKwltZGlvYnVzX3VucmVnaXN0ZXIocHJpdi0+bWRpbyk7CitmcmVlX21kaW86CisJa2ZyZWUocHJpdi0+bWRpby0+aXJxKTsKKwltZGlvYnVzX2ZyZWUocHJpdi0+bWRpbyk7CitmcmVlOgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBldGhvY19yZW1vdmUoKSAtIHNodXRkb3duIE9wZW5Db3JlcyBldGhlcm5ldCBNQUMKKyAqIEBwZGV2OglwbGF0Zm9ybSBkZXZpY2UKKyAqLworc3RhdGljIGludCBldGhvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKG5ldGRldikgeworCQlwaHlfZGlzY29ubmVjdChwcml2LT5waHkpOworCQlwcml2LT5waHkgPSBOVUxMOworCisJCWlmIChwcml2LT5tZGlvKSB7CisJCQltZGlvYnVzX3VucmVnaXN0ZXIocHJpdi0+bWRpbyk7CisJCQlrZnJlZShwcml2LT5tZGlvLT5pcnEpOworCQkJbWRpb2J1c19mcmVlKHByaXYtPm1kaW8pOworCQl9CisKKwkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBldGhvY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBldGhvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbHNlCisjIGRlZmluZSBldGhvY19zdXNwZW5kIE5VTEwKKyMgZGVmaW5lIGV0aG9jX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV0aG9jX2RyaXZlciA9IHsKKwkucHJvYmUgICA9IGV0aG9jX3Byb2JlLAorCS5yZW1vdmUgID0gZXRob2NfcmVtb3ZlLAorCS5zdXNwZW5kID0gZXRob2Nfc3VzcGVuZCwKKwkucmVzdW1lICA9IGV0aG9jX3Jlc3VtZSwKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgPSAiZXRob2MiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBldGhvY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXRob2NfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV0aG9jX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXRob2NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZXRob2NfaW5pdCk7Cittb2R1bGVfZXhpdChldGhvY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPcGVuQ29yZXMgRXRoZXJuZXQgTUFDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ld3JrMy5jIGIvZHJpdmVycy9uZXQvZXdyazMuYwppbmRleCBiODUyMzAzLi4xYTY4NWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ld3JrMy5jCisrKyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKQEAgLTM4OCw2ICszODgsMTggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGV3cmszX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGV3cmszX29wZW4sCisJLm5kb19zdGFydF94bWl0CQk9IGV3cmszX3F1ZXVlX3BrdCwKKwkubmRvX3N0b3AJCT0gZXdyazNfY2xvc2UsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19kb19pb2N0bAkJPSBld3JrM19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZXdyazNfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQKIGV3cmszX2h3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9sb25nIGlvYmFzZSkKIHsKQEAgLTYwMywxNiArNjE1LDExIEBACiAJCXByaW50ayh2ZXJzaW9uKTsKIAl9CiAJLyogVGhlIEVXUkszLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gZXdyazNfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGV3cmszX3F1ZXVlX3BrdDsKLQlkZXYtPnN0b3AgPSBld3JrM19jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmRvX2lvY3RsID0gZXdyazNfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmV3cmszX25ldGRldl9vcHM7CiAJaWYgKGxwLT5hZGFwdGVyX25hbWVbNF0gPT0gJzMnKQogCQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmZXRodG9vbF9vcHNfMjAzKTsKIAllbHNlCiAJCVNFVF9FVEhUT09MX09QUyhkZXYsICZldGh0b29sX29wcyk7Ci0JZGV2LT50eF90aW1lb3V0ID0gZXdyazNfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gUVVFVUVfUEtUX1RJTUVPVVQ7CiAKIAlkZXYtPm1lbV9zdGFydCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IGRhZjcyNzJjLi44OTFiZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtOTMsOCArOTMsOCBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOwogCiAKIC8qIFRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIHRvIHVzZSBQQ0kgbWVtb3J5IHNwYWNlLCBob3dldmVyIHNvbWUgeDg2IHN5c3RlbXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5jIGIvZHJpdmVycy9uZXQvZmVjLmMKaW5kZXggMjc2OTA4My4uYTUxNWFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjLmMKQEAgLTM2LDQ2ICszNiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAorI2lmbmRlZiBDT05GSUdfQVJDSF9NWEMKICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KICNpbmNsdWRlIDxhc20vbWNmc2ltLmg+Ci0jaW5jbHVkZSAiZmVjLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GRUMyKQotI2RlZmluZQlGRUNfTUFYX1BPUlRTCTIKLSNlbHNlCi0jZGVmaW5lCUZFQ19NQVhfUE9SVFMJMQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKLSNkZWZpbmUgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKKyNpbmNsdWRlICJmZWMuaCIKKworI2lmZGVmIENPTkZJR19BUkNIX01YQworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNkZWZpbmUgRkVDX0FMSUdOTUVOVAkweGYKKyNlbHNlCisjZGVmaW5lIEZFQ19BTElHTk1FTlQJMHgzCiAjZW5kaWYKIAogLyoKICAqIERlZmluZSB0aGUgZml4ZWQgYWRkcmVzcyBvZiB0aGUgRkVDIGhhcmR3YXJlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZlY19od1tdID0gewogI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQotCShNQ0ZfTUJBUiArIDB4ODQwKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX001Mjd4KQotCShNQ0ZfTUJBUiArIDB4MTAwMCksCi0JKE1DRl9NQkFSICsgMHgxODAwKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkKLQkoTUNGX01CQVIgKyAweDEwMDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMHgpCi0JKE1DRl9NQkFSKzB4MzAwMDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUzMngpCi0JKE1DRl9NQkFSKzB4ZmMwMzAwMDApLAotI2Vsc2UKLQkmKCgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwbS5jcF9mZWMpLAotI2VuZGlmCi19OworI2RlZmluZSBIQVZFX21paV9saW5rX2ludGVycnVwdAogCiBzdGF0aWMgdW5zaWduZWQgY2hhcglmZWNfbWFjX2RlZmF1bHRbXSA9IHsKIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLApAQCAtOTgsNiArODQsNyBAQAogI2Vsc2UKICNkZWZpbmUJRkVDX0ZMQVNITUFDCTAKICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NNTI3MiAqLwogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBzb21lIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBkaWZmZXJlbnQgUEhZcwogKi8KQEAgLTE2Miw3ICsxNDksNyBAQAogICogYWNjb3VudCB3aGVuIHNldHRpbmcgaXQuCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KQorICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpCiAjZGVmaW5lCU9QVF9GUkFNRV9TSVpFCShQS1RfTUFYQlVGX1NJWkUgPDwgMTYpCiAjZWxzZQogI2RlZmluZQlPUFRfRlJBTUVfU0laRQkwCkBAIC0xODIsNiArMTY5LDggQEAKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKKwlzdHJ1Y3QgY2xrICpjbGs7CisKIAkvKiBUaGUgc2F2ZWQgYWRkcmVzcyBvZiBhIHNlbnQtaW4tcGxhY2UgcGFja2V0L2J1ZmZlciwgZm9yIHNrZnJlZSgpLiAqLwogCXVuc2lnbmVkIGNoYXIgKnR4X2JvdW5jZVtUWF9SSU5HX1NJWkVdOwogCXN0cnVjdAlza19idWZmKiB0eF9za2J1ZmZbVFhfUklOR19TSVpFXTsKQEAgLTE5MCw2ICsxNzksNyBAQAogCiAJLyogQ1BNIGR1YWwgcG9ydCBSQU0gcmVsYXRpdmUgYWRkcmVzc2VzLgogCSovCisJZG1hX2FkZHJfdAliZF9kbWE7CiAJY2JkX3QJKnJ4X2JkX2Jhc2U7CQkvKiBBZGRyZXNzIG9mIFJ4IGFuZCBUeCBidWZmZXJzLiAqLwogCWNiZF90CSp0eF9iZF9iYXNlOwogCWNiZF90CSpjdXJfcngsICpjdXJfdHg7CQkvKiBUaGUgbmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KQEAgLTM0MiwxMCArMzMyLDEwIEBACiAJICoJNC1ieXRlIGJvdW5kYXJpZXMuIFVzZSBib3VuY2UgYnVmZmVycyB0byBjb3B5IGRhdGEKIAkgKglhbmQgZ2V0IGl0IGFsaWduZWQuIFVnaC4KIAkgKi8KLQlpZiAoYmRwLT5jYmRfYnVmYWRkciAmIDB4MykgeworCWlmIChiZHAtPmNiZF9idWZhZGRyICYgRkVDX0FMSUdOTUVOVCkgewogCQl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJCWluZGV4ID0gYmRwIC0gZmVwLT50eF9iZF9iYXNlOwotCQltZW1jcHkoZmVwLT50eF9ib3VuY2VbaW5kZXhdLCAodm9pZCAqKSBiZHAtPmNiZF9idWZhZGRyLCBiZHAtPmNiZF9kYXRsZW4pOworCQltZW1jcHkoZmVwLT50eF9ib3VuY2VbaW5kZXhdLCAodm9pZCAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQliZHAtPmNiZF9idWZhZGRyID0gX19wYShmZXAtPnR4X2JvdW5jZVtpbmRleF0pOwogCX0KIApAQCAtMzU5LDggKzM0OSw4IEBACiAJLyogUHVzaCB0aGUgZGF0YSBjYWNoZSBzbyB0aGUgQ1BNIGRvZXMgbm90IGdldCBzdGFsZSBtZW1vcnkKIAkgKiBkYXRhLgogCSAqLwotCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylza2ItPmRhdGEsCi0JCQkgICAodW5zaWduZWQgbG9uZylza2ItPmRhdGEgKyBza2ItPmxlbik7CisJZG1hX3N5bmNfc2luZ2xlKE5VTEwsIGJkcC0+Y2JkX2J1ZmFkZHIsCisJCQliZHAtPmNiZF9kYXRsZW4sIERNQV9UT19ERVZJQ0UpOwogCiAJLyogU2VuZCBpdCBvbiBpdHMgd2F5LiAgVGVsbCBGRUMgaXQncyByZWFkeSwgaW50ZXJydXB0IHdoZW4gZG9uZSwKIAkgKiBpdCdzIHRoZSBsYXN0IEJEIG9mIHRoZSBmcmFtZSwgYW5kIHRvIHB1dCB0aGUgQ1JDIG9uIHRoZSBlbmQuCkBAIC02MzMsNiArNjIzLDkgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJZGF0YSA9IChfX3U4KilfX3ZhKGJkcC0+Y2JkX2J1ZmFkZHIpOwogCisJZG1hX3N5bmNfc2luZ2xlKE5VTEwsICh1bnNpZ25lZCBsb25nKV9fcGEoZGF0YSksCisJCQlwa3RfbGVuIC0gNCwgRE1BX0ZST01fREVWSUNFKTsKKwogCS8qIFRoaXMgZG9lcyAxNiBieXRlIGFsaWdubWVudCwgZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAJICogVGhlIHBhY2tldCBsZW5ndGggaW5jbHVkZXMgRkNTLCBidXQgd2UgZG9uJ3Qgd2FudCB0bwogCSAqIGluY2x1ZGUgdGhhdCB3aGVuIHBhc3NpbmcgdXBzdHJlYW0gYXMgaXQgbWVzc2VzIHVwCkBAIC0xMTE0LDcgKzExMDcsNyBAQAogLyogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSA4NzIxICovCiAKICNkZWZpbmUgTUlJX0tTODcyMUJMX1JYRVJDUgkyMQotI2RlZmluZSBNSUlfS1M4NzIxQkxfSUNTUgkyMgorI2RlZmluZSBNSUlfS1M4NzIxQkxfSUNTUgkyNwogI2RlZmluZQlNSUlfS1M4NzIxQkxfUEhZQ1IJMzEKIAogc3RhdGljIHBoeV9jbWRfdCBjb25zdCBwaHlfY21kX2tzODcyMWJsX2NvbmZpZ1tdID0gewpAQCAtMTIyMyw1OCArMTIxNiwzMiBAQAogI2lmZGVmIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CiBzdGF0aWMgaXJxcmV0dXJuX3QKIG1paV9saW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICogZGV2X2lkKTsKLSNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpCiAvKgotICoJQ29kZSBzcGVjaWZpYyB0byBDb2xkZmlyZSA1MjcyIHNldHVwLgorICoJVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgTUlJIGludGVycnVwdCBzZXR1cCBvZiB0aGUgTTUyNzJFVkIuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfbWlpX2ludHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAocmVxdWVzdF9pcnEoNjYsIG1paV9saW5rX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImZlYyhNSUkpIiwgZGV2KSAhPSAwKQorCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlIGZlYyhNSUkpIElSUSg2NikhXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVzYyB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIHNob3J0IGlycTsKLQkJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFJYKSIsIDg2LCBmZWNfZW5ldF9pbnRlcnJ1cHQgfSwKLQkJeyAiZmVjKFRYKSIsIDg3LCBmZWNfZW5ldF9pbnRlcnJ1cHQgfSwKLQkJeyAiZmVjKE9USEVSKSIsIDg4LCBmZWNfZW5ldF9pbnRlcnJ1cHQgfSwKLQkJeyAiZmVjKE1JSSkiLCA2NiwgbWlpX2xpbmtfaW50ZXJydXB0IH0sCi0JCXsgTlVMTCB9LAotCX07CisJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKKwkqaWNycCA9IDB4MDgwMDAwMDA7Cit9CiAKLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoaWRwLT5pcnEsIGlkcC0+aGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLCBkZXYpICE9IDApCi0JCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGlkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0IGF0IENvbGRGaXJlIDUyNzIgU0lNICovCi0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IzKTsKLQkqaWNycCA9IDB4MDAwMDBkZGQ7CitzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppY3JwOworCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KIAlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOwogCSppY3JwID0gMHgwZDAwMDAwMDsKIH0KIAotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICogU2VlIDUyNzIgbWFudWFsIHNlY3Rpb24gMTEuNS44OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDQpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KKyNpZmRlZiBDT05GSUdfTTUyNzIKIHN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzMDcsNTQ5ICsxMjc0LDYgQEAKIAlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKIAkJIGRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwogfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKLQkqaWNycCA9IDB4MDgwMDAwMDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0JLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLwotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Ci0JKmljcnAgPSAweDBkMDAwMDAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLS8qCi0gKglEbyBub3QgbmVlZCB0byBtYWtlIHJlZ2lvbiB1bmNhY2hlZCBvbiA1MjcyLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KQotCi0vKgotICoJQ29kZSBzcGVjaWZpYyB0byBDb2xkZmlyZSA1MjMwLzUyMzEvNTIzMi81MjM0LzUyMzUsCi0gKgl0aGUgNTI3MC81MjcxLzUyNzQvNTI3NSBhbmQgNTI4MC81MjgyIHNldHVwcy4KLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9pbnRycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7Ci0JaW50IGI7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVzYyB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIHNob3J0IGlycTsKLQl9ICppZHAsIGlkW10gPSB7Ci0JCXsgImZlYyhUWEYpIiwgMjMgfSwKLQkJeyAiZmVjKFJYRikiLCAyNyB9LAotCQl7ICJmZWMoTUlJKSIsIDI5IH0sCi0JCXsgTlVMTCB9LAotCX07Ci0KLQlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWIgPSAoZmVwLT5pbmRleCkgPyAxMjggOiA2NDsKLQotCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVycy4gKi8KLQlmb3IgKGlkcCA9IGlkOyBpZHAtPm5hbWU7IGlkcCsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShiK2lkcC0+aXJxLCBmZWNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIGlkcC0+bmFtZSwgZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSA1MjgwLzUyODIgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KLQl7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICppY3JwOwotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAqaW1ycDsKLQkJaW50IGksIGlsaXA7Ci0KLQkJYiA9IChmZXAtPmluZGV4KSA/IE1DRklDTV9JTlRDMSA6IE1DRklDTV9JTlRDMDsKLQkJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfSVBTQkFSICsgYiArCi0JCQlNQ0ZJTlRDX0lDUjApOwotCQlmb3IgKGkgPSAyMywgaWxpcCA9IDB4Mjg7IChpIDwgMzYpOyBpKyspCi0JCQlpY3JwW2ldID0gaWxpcC0tOwotCi0JCWltcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIGIgKwotCQkJTUNGSU5UQ19JTVJIKTsKLQkJKmltcnAgJj0gfjB4MDAwMDAwMGY7Ci0JCWltcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIGIgKwotCQkJTUNGSU5UQ19JTVJMKTsKLQkJKmltcnAgJj0gfjB4ZmY4MDAwMDE7Ci0JfQotCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyOHgpCi0JLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgTUlJIGxpbmVzICovCi0JewotCQl2b2xhdGlsZSB1MTYgKmdwaW9fcGFzcGFyOwotCQl2b2xhdGlsZSB1OCAqZ3Bpb19wZWhscGFyOwotCi0JCWdwaW9fcGFzcGFyID0gKHZvbGF0aWxlIHUxNiAqKSAoTUNGX0lQU0JBUiArIDB4MTAwMDU2KTsKLQkJZ3Bpb19wZWhscGFyID0gKHZvbGF0aWxlIHUxNiAqKSAoTUNGX0lQU0JBUiArIDB4MTAwMDU4KTsKLQkJKmdwaW9fcGFzcGFyIHw9IDB4MGYwMDsKLQkJKmdwaW9fcGVobHBhciA9IDB4YzA7Ci0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NNTI3eCkKLQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBNSUkgbGluZXMgKi8KLQl7Ci0JCXZvbGF0aWxlIHU4ICpncGlvX3Bhcl9mZWM7Ci0JCXZvbGF0aWxlIHUxNiAqZ3Bpb19wYXJfZmVjaTJjOwotCi0JCWdwaW9fcGFyX2ZlY2kyYyA9ICh2b2xhdGlsZSB1MTYgKikoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKLQkJLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgRkVDMCBNSUkgbGluZXMgKi8KLQkJZ3Bpb19wYXJfZmVjID0gKHZvbGF0aWxlIHU4ICopKE1DRl9JUFNCQVIgKyAweDEwMDA3OCk7Ci0KLQkJKmdwaW9fcGFyX2ZlY2kyYyB8PSAweDBmMDA7Ci0JCSpncGlvX3Bhcl9mZWMgfD0gMHhjMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZFQzIpCi0JCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIEZFQzEgTUlJIGxpbmVzICovCi0JCWdwaW9fcGFyX2ZlYyA9ICh2b2xhdGlsZSB1OCAqKShNQ0ZfSVBTQkFSICsgMHgxMDAwNzkpOwotCi0JCSpncGlvX3Bhcl9mZWNpMmMgfD0gMHgwMGEwOwotCQkqZ3Bpb19wYXJfZmVjIHw9IDB4YzA7Ci0jZW5kaWYgLyogQ09ORklHX0ZFQzIgKi8KLQl9Ci0jZW5kaWYgLyogQ09ORklHX001Mjd4ICovCi19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjgyIG1hbnVhbCBzZWN0aW9uIDE3LjUuNC43OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDIpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgICAoaWFwWzNdID09IDApICYmIChpYXBbNF0gPT0gMCkgJiYgKGlhcFs1XSA9PSAwKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQkJaWYgKChpYXBbMF0gPT0gMHhmZikgJiYgKGlhcFsxXSA9PSAweGZmKSAmJiAoaWFwWzJdID09IDB4ZmYpICYmCi0JCSAgICAoaWFwWzNdID09IDB4ZmYpICYmIChpYXBbNF0gPT0gMHhmZikgJiYgKGlhcFs1XSA9PSAweGZmKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQl9IGVsc2UgewotCQkqKCh1bnNpZ25lZCBsb25nICopICZ0bXBhZGRyWzBdKSA9IGZlY3AtPmZlY19hZGRyX2xvdzsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgJnRtcGFkZHJbNF0pID0gKGZlY3AtPmZlY19hZGRyX2hpZ2ggPj4gMTYpOwotCQlpYXAgPSAmdG1wYWRkclswXTsKLQl9Ci0KLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgaWFwLCBFVEhfQUxFTik7Ci0KLQkvKiBBZGp1c3QgTUFDIGlmIHVzaW5nIGRlZmF1bHQgTUFDIGFkZHJlc3MgKi8KLQlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKLQkJZGV2LT5kZXZfYWRkcltFVEhfQUxFTi0xXSA9IGZlY19tYWNfZGVmYXVsdFtFVEhfQUxFTi0xXSArIGZlcC0+aW5kZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLS8qCi0gKglEbyBub3QgbmVlZCB0byBtYWtlIHJlZ2lvbiB1bmNhY2hlZCBvbiA1MjcyLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIweCkKLQotLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gQ29sZGZpcmUgNTIweAotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFRYRikiLCAyMyB9LAotCQl7ICJmZWMoUlhGKSIsIDI3IH0sCi0JCXsgImZlYyhNSUkpIiwgMjkgfSwKLQkJeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IDY0ICsgMTM7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCXsKLQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmljcnA7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICppbXJwOwotCi0JCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArCi0JCQlNQ0ZJTlRDX0lDUjApOwotCQlmb3IgKGIgPSAzNjsgKGIgPCA0OSk7IGIrKykKLQkJCWljcnBbYl0gPSAweDA0OwotCQlpbXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKwotCQkJTUNGSU5UQ19JTVJIKTsKLQkJKmltcnAgJj0gfjB4MDAwMUZGRjA7Ci0JfQotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQykgfD0gMHhmMDsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpIHw9IDB4MGY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjgyIG1hbnVhbCBzZWN0aW9uIDE3LjUuNC43OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDIpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgKGlhcFszXSA9PSAweGZmKSAmJiAoaWFwWzRdID09IDB4ZmYpICYmIChpYXBbNV0gPT0gMHhmZikpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JfSBlbHNlIHsKLQkJKigodW5zaWduZWQgbG9uZyAqKSAmdG1wYWRkclswXSkgPSBmZWNwLT5mZWNfYWRkcl9sb3c7Ci0JCSooKHVuc2lnbmVkIHNob3J0ICopICZ0bXBhZGRyWzRdKSA9IChmZWNwLT5mZWNfYWRkcl9oaWdoID4+IDE2KTsKLQkJaWFwID0gJnRtcGFkZHJbMF07Ci0JfQotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlhcCwgRVRIX0FMRU4pOwotCi0JLyogQWRqdXN0IE1BQyBpZiB1c2luZyBkZWZhdWx0IE1BQyBhZGRyZXNzICovCi0JaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCi0JCWRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfbG9jYWxod19zZXR1cCh2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTMyeCkKLS8qCi0gKiBDb2RlIHNwZWNpZmljIGZvciBNNTMyeAotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkgICAgeyAiZmVjKFRYRikiLCAzNiB9LAotCSAgICB7ICJmZWMoUlhGKSIsIDQwIH0sCi0JICAgIHsgImZlYyhNSUkpIiwgNDIgfSwKLQkgICAgeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IChmZXAtPmluZGV4KSA/IDEyOCA6IDY0OwotCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLGRldikgIT0gMCkKLQkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsCi0JCQkJaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyAqLwotCU1DRl9JTlRDMF9JQ1IzNiA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSMzcgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjM4ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1IzOSA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDAgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQxID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MiA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDMgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ0ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0NSA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDYgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ3ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0OCA9IDB4MjsKLQotCU1DRl9JTlRDMF9JTVJIICY9IH4oCi0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szNiB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szNyB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szOCB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szOSB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MCB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MSB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MiB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MyB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NCB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NSB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NiB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NyB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0OCApOwotCi0JLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgTUlJIGxpbmVzICovCi0JTUNGX0dQSU9fUEFSX0ZFQ0kyQyB8PSAoMCB8Ci0JCU1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01EQ19FTURDIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURJT19FTURJTyk7Ci0JTUNGX0dQSU9fUEFSX0ZFQyA9ICgwIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDXzdXX0ZFQyB8Ci0JCU1DRl9HUElPX1BBUl9GRUNfUEFSX0ZFQ19NSUlfRkVDKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoTUNGX0NMSyAvIDMpIC8gKDI1MDAwMDAgKiAyICkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgICAoaWFwWzNdID09IDApICYmIChpYXBbNF0gPT0gMCkgJiYgKGlhcFs1XSA9PSAwKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQkJaWYgKChpYXBbMF0gPT0gMHhmZikgJiYgKGlhcFsxXSA9PSAweGZmKSAmJiAoaWFwWzJdID09IDB4ZmYpICYmCi0JCSAgICAoaWFwWzNdID09IDB4ZmYpICYmIChpYXBbNF0gPT0gMHhmZikgJiYgKGlhcFs1XSA9PSAweGZmKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQl9IGVsc2UgewotCQkqKCh1bnNpZ25lZCBsb25nICopICZ0bXBhZGRyWzBdKSA9IGZlY3AtPmZlY19hZGRyX2xvdzsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgJnRtcGFkZHJbNF0pID0gKGZlY3AtPmZlY19hZGRyX2hpZ2ggPj4gMTYpOwotCQlpYXAgPSAmdG1wYWRkclswXTsKLQl9Ci0KLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgaWFwLCBFVEhfQUxFTik7Ci0KLQkvKiBBZGp1c3QgTUFDIGlmIHVzaW5nIGRlZmF1bHQgTUFDIGFkZHJlc3MgKi8KLQlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKLQkJZGV2LT5kZXZfYWRkcltFVEhfQUxFTi0xXSA9IGZlY19tYWNfZGVmYXVsdFtFVEhfQUxFTi0xXSArIGZlcC0+aW5kZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLS8qCi0gKglEbyBub3QgbmVlZCB0byBtYWtlIHJlZ2lvbiB1bmNhY2hlZCBvbiA1MzJ4LgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLSNlbHNlCi0KLS8qCi0gKglDb2RlIHNwZWNpZmljIHRvIHRoZSBNUEM4NjBUIHNldHVwLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXA7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopSU1BUF9BRERSOwkvKiBwb2ludGVyIHRvIGludGVybmFsIHJlZ2lzdGVycyAqLwotCi0JaWYgKHJlcXVlc3RfOHh4aXJxKEZFQ19JTlRFUlJVUFQsIGZlY19lbmV0X2ludGVycnVwdCwgMCwgImZlYyIsIGRldikgIT0gMCkKLQkJcGFuaWMoIkNvdWxkIG5vdCBhbGxvY2F0ZSBGRUMgSVJRISIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JYmRfdCAqYmQ7Ci0KLQliZCA9IChiZF90ICopX19yZXM7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGJkLT5iaV9lbmV0YWRkciwgRVRIX0FMRU4pOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0JZXh0ZXJuIHVpbnQgX2dldF9JTU1SKHZvaWQpOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWltbWFwID0gKGltbWFwX3QgKilJTUFQX0FERFI7CS8qIHBvaW50ZXIgdG8gaW50ZXJuYWwgcmVnaXN0ZXJzICovCi0KLQkvKiBDb25maWd1cmUgYWxsIG9mIHBvcnQgRCBmb3IgTUlJLgotCSovCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRwYXIgPSAweDFmZmY7Ci0KLQkvKiBCaXRzIG1vdmVkIGZyb20gUmV2LiBEIG9ud2FyZC4KLQkqLwotCWlmICgoX2dldF9JTU1SKCkgJiAweGZmZmYpIDwgMHgwNTAxKQotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciA9IDB4MWM1ODsJLyogUHJlIHJldi4gRCAqLwotCWVsc2UKLQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIgPSAweDFmZmY7CS8qIFJldi4gRCBhbmQgbGF0ZXIgKi8KLQotCS8qIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSovCi0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkID0KLQkJKChiZC0+YmlfYnVzZnJlcSAqIDEwMDAwMDApIC8gMjUwMDAwMCkgJiAweDdlOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQotCS8qIEVuYWJsZSBNSUkgY29tbWFuZCBmaW5pc2hlZCBpbnRlcnJ1cHQKLQkqLwotCWZlY3AtPmZlY19pdmVjID0gKEZFQ19JTlRFUlJVUFQvMikgPDwgMjk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2xvY2FsaHdfc2V0dXAodm9pZCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9oYXNoID0gUEtUX01BWEJVRl9TSVpFOwotCS8qIEVuYWJsZSBiaWcgZW5kaWFuIGFuZCBkb24ndCBjYXJlIGFib3V0IFNETUEgRkMuCi0JKi8KLQlmZWNwLT5mZWNfZnVuX2NvZGUgPSAweDc4MDAwMDAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwdGVfdCAqcHRlOwotCXB0ZSA9IHZhX3RvX3B0ZShtZW1fYWRkcik7Ci0JcHRlX3ZhbCgqcHRlKSB8PSBfUEFHRV9OT19DQUNIRTsKLQlmbHVzaF90bGJfcGFnZShpbml0X21tLm1tYXAsIG1lbV9hZGRyKTsKLX0KLQogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIwNTUsNyArMTQ3OSw5IEBACiAJCXByaW50aygiRkVDOiBObyBQSFkgZGV2aWNlIGZvdW5kLlxuIik7CiAJCS8qIERpc2FibGUgZXh0ZXJuYWwgTUlJIGludGVyZmFjZSAqLwogCQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQgPSAwOworI2lmZGVmIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CiAJCWZlY19kaXNhYmxlX3BoeV9pbnRyKCk7CisjZW5kaWYKIAl9CiB9CiAKQEAgLTIyMzcsMTIgKzE2NjMsMTIgQEAKIAogfQogCi0vKiBJbml0aWFsaXplIHRoZSBGRUMgRXRoZXJuZXQgb24gODYwVCAob3IgQ29sZEZpcmUgNTI3MikuCi0gKi8KICAvKgogICAqIFhYWDogIFdlIG5lZWQgdG8gY2xlYW4gdXAgb24gZmFpbHVyZSBleGl0cyBoZXJlLgorICAqCisgICogaW5kZXggaXMgb25seSB1c2VkIGluIGxlZ2FjeSBjb2RlCiAgICovCi1pbnQgX19pbml0IGZlY19lbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBfX2luaXQgZmVjX2VuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZwltZW1fYWRkcjsKQEAgLTIyNTAsMTUgKzE2NzYsMTEgQEAKIAljYmRfdAkJKmNiZF9iYXNlOwogCXZvbGF0aWxlIGZlY190CSpmZWNwOwogCWludCAJCWksIGo7Ci0Jc3RhdGljIGludAlpbmRleCA9IDA7Ci0KLQkvKiBPbmx5IGFsbG93IHVzIHRvIGJlIHByb2JlZCBvbmNlLiAqLwotCWlmIChpbmRleCA+PSBGRUNfTUFYX1BPUlRTKQotCQlyZXR1cm4gLUVOWElPOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIgZGVzY3JpcHRvcnMuCiAJKi8KLQltZW1fYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwltZW1fYWRkciA9ICh1bnNpZ25lZCBsb25nKWRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBQQUdFX1NJWkUsCisJCQkmZmVwLT5iZF9kbWEsIEdGUF9LRVJORUwpOwogCWlmIChtZW1fYWRkciA9PSAwKSB7CiAJCXByaW50aygiRkVDOiBhbGxvY2F0ZSBkZXNjcmlwdG9yIG1lbW9yeSBmYWlsZWQ/XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjY5LDcgKzE2OTEsNyBAQAogCiAJLyogQ3JlYXRlIGFuIEV0aGVybmV0IGRldmljZSBpbnN0YW5jZS4KIAkqLwotCWZlY3AgPSAodm9sYXRpbGUgZmVjX3QgKikgZmVjX2h3W2luZGV4XTsKKwlmZWNwID0gKHZvbGF0aWxlIGZlY190ICopZGV2LT5iYXNlX2FkZHI7CiAKIAlmZXAtPmluZGV4ID0gaW5kZXg7CiAJZmVwLT5od3AgPSBmZWNwOwpAQCAtMjI4MCwxOCArMTcwMiwyNCBAQAogCWZlY3AtPmZlY19lY250cmwgPSAxOwogCXVkZWxheSgxMCk7CiAKLQkvKiBTZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MuICBJZiB1c2luZyBtdWx0aXBsZSBFbmV0cyBvbiB0aGUgOHh4LAotCSAqIHRoaXMgbmVlZHMgc29tZSB3b3JrIHRvIGdldCB1bmlxdWUgYWRkcmVzc2VzLgotCSAqCi0JICogVGhpcyBpcyBvdXIgZGVmYXVsdCBNQUMgYWRkcmVzcyB1bmxlc3MgdGhlIHVzZXIgY2hhbmdlcwotCSAqIGl0IHZpYSBldGhfbWFjX2FkZHIgKG91ciBkZXYtPnNldF9tYWNfYWRkciBoYW5kbGVyKS4KLQkgKi8KKwkvKiBTZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MgKi8KKyNpZmRlZiBDT05GSUdfTTUyNzIKIAlmZWNfZ2V0X21hYyhkZXYpOworI2Vsc2UKKwl7CisJCXVuc2lnbmVkIGxvbmcgbDsKKwkJbCA9IGZlY3AtPmZlY19hZGRyX2xvdzsKKwkJZGV2LT5kZXZfYWRkclswXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJZGV2LT5kZXZfYWRkclsxXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDBGRjAwMDApID4+IDE2KTsKKwkJZGV2LT5kZXZfYWRkclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDAwMEZGMDApID4+IDgpOworCQlkZXYtPmRldl9hZGRyWzNdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMDAwMDBGRikgPj4gMCk7CisJCWwgPSBmZWNwLT5mZWNfYWRkcl9oaWdoOworCQlkZXYtPmRldl9hZGRyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQlkZXYtPmRldl9hZGRyWzVdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMEZGMDAwMCkgPj4gMTYpOworCX0KKyNlbmRpZgogCiAJY2JkX2Jhc2UgPSAoY2JkX3QgKiltZW1fYWRkcjsKLQkvKiBYWFg6IG1pc3NpbmcgY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSAqLwotCi0JZmVjX3VuY2FjaGUobWVtX2FkZHIpOwogCiAJLyogU2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3IgYmFzZS4KIAkqLwpAQCAtMjMxMyw4ICsxNzQxLDYgQEAKIAkJbWVtX2FkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCS8qIFhYWDogbWlzc2luZyBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlICovCiAKLQkJZmVjX3VuY2FjaGUobWVtX2FkZHIpOwotCiAJCS8qIEluaXRpYWxpemUgdGhlIEJEIGZvciBldmVyeSBmcmFnbWVudCBpbiB0aGUgcGFnZS4KIAkJKi8KIAkJZm9yIChqPTA7IGo8RkVDX0VORVRfUlhfRlJQUEc7IGorKykgewpAQCAtMjM1NywxMyArMTc4MywxMyBAQAogCiAJLyogU2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3IgYmFzZS4KIAkqLwotCWZlY3AtPmZlY19yX2Rlc19zdGFydCA9IF9fcGEoKHVpbnQpKGZlcC0+cnhfYmRfYmFzZSkpOwotCWZlY3AtPmZlY194X2Rlc19zdGFydCA9IF9fcGEoKHVpbnQpKGZlcC0+dHhfYmRfYmFzZSkpOworCWZlY3AtPmZlY19yX2Rlc19zdGFydCA9IGZlcC0+YmRfZG1hOworCWZlY3AtPmZlY194X2Rlc19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZlcC0+YmRfZG1hICsgc2l6ZW9mKGNiZF90KQorCQkJCSogUlhfUklOR19TSVpFOwogCi0JLyogSW5zdGFsbCBvdXIgaW50ZXJydXB0IGhhbmRsZXJzLiBUaGlzIHZhcmllcyBkZXBlbmRpbmcgb24KLQkgKiB0aGUgYXJjaGl0ZWN0dXJlLgotCSovCi0JZmVjX3JlcXVlc3RfaW50cnMoZGV2KTsKKyNpZmRlZiBIQVZFX21paV9saW5rX2ludGVycnVwdAorCWZlY19yZXF1ZXN0X21paV9pbnRyKGRldik7CisjZW5kaWYKIAogCWZlY3AtPmZlY19ncnBfaGFzaF90YWJsZV9oaWdoID0gMDsKIAlmZWNwLT5mZWNfZ3JwX2hhc2hfdGFibGVfbG93ID0gMDsKQEAgLTIzNzUsOCArMTgwMSw2IEBACiAJZmVjcC0+ZmVjX2hhc2hfdGFibGVfbG93ID0gMDsKICNlbmRpZgogCi0JZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylmZWNwOwotCiAJLyogVGhlIEZFQyBFdGhlcm5ldCBzcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwogCWRldi0+b3BlbiA9IGZlY19lbmV0X29wZW47CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBmZWNfZW5ldF9zdGFydF94bWl0OwpAQCAtMjM5MCw3ICsxODE0LDE2IEBACiAJbWlpX2ZyZWUgPSBtaWlfY21kczsKIAogCS8qIHNldHVwIE1JSSBpbnRlcmZhY2UgKi8KLQlmZWNfc2V0X21paShkZXYsIGZlcCk7CisJZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7CisJZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOworCisJLyoKKwkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKKwkgKi8KKwlmZXAtPnBoeV9zcGVlZCA9ICgoKChjbGtfZ2V0X3JhdGUoZmVwLT5jbGspIC8gMiArIDQ5OTk5OTkpCisJCQkJCS8gMjUwMDAwMCkgLyAyKSAmIDB4M0YpIDw8IDE7CisJZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOworCWZlY19yZXN0YXJ0KGRldiwgMCk7CiAKIAkvKiBDbGVhciBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KIAlmZWNwLT5mZWNfaWV2ZW50ID0gMHhmZmMwMDAwMDsKQEAgLTI0MDMsNyArMTgzNiw2IEBACiAJZmVwLT5waHlfYWRkciA9IDA7CiAJbWlpX3F1ZXVlKGRldiwgbWtfbWlpX3JlYWQoTUlJX1JFR19QSFlJUjEpLCBtaWlfZGlzY292ZXJfcGh5KTsKIAotCWluZGV4Kys7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MzAsNyArMTg2Miw2IEBACiAJLyogQ2xlYXIgYW55IG91dHN0YW5kaW5nIGludGVycnVwdC4KIAkqLwogCWZlY3AtPmZlY19pZXZlbnQgPSAweGZmYzAwMDAwOwotCWZlY19lbmFibGVfcGh5X2ludHIoKTsKIAogCS8qIFNldCBzdGF0aW9uIGFkZHJlc3MuCiAJKi8KQEAgLTI0NDUsMTIgKzE4NzYsMTEgQEAKIAkqLwogCWZlY3AtPmZlY19yX2J1ZmZfc2l6ZSA9IFBLVF9NQVhCTFJfU0laRTsKIAotCWZlY19sb2NhbGh3X3NldHVwKCk7Ci0KIAkvKiBTZXQgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvciBiYXNlLgogCSovCi0JZmVjcC0+ZmVjX3JfZGVzX3N0YXJ0ID0gX19wYSgodWludCkoZmVwLT5yeF9iZF9iYXNlKSk7Ci0JZmVjcC0+ZmVjX3hfZGVzX3N0YXJ0ID0gX19wYSgodWludCkoZmVwLT50eF9iZF9iYXNlKSk7CisJZmVjcC0+ZmVjX3JfZGVzX3N0YXJ0ID0gZmVwLT5iZF9kbWE7CisJZmVjcC0+ZmVjX3hfZGVzX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZmVwLT5iZF9kbWEgKyBzaXplb2YoY2JkX3QpCisJCQkJKiBSWF9SSU5HX1NJWkU7CiAKIAlmZXAtPmRpcnR5X3R4ID0gZmVwLT5jdXJfdHggPSBmZXAtPnR4X2JkX2Jhc2U7CiAJZmVwLT5jdXJfcnggPSBmZXAtPnJ4X2JkX2Jhc2U7CkBAIC0yNTUyLDM5ICsxOTgyLDE3MSBAQAogCS8qIENsZWFyIG91dHN0YW5kaW5nIE1JSSBjb21tYW5kIGludGVycnVwdHMuCiAJKi8KIAlmZWNwLT5mZWNfaWV2ZW50ID0gRkVDX0VORVRfTUlJOwotCWZlY19lbmFibGVfcGh5X2ludHIoKTsKIAogCWZlY3AtPmZlY19pbWFzayA9IEZFQ19FTkVUX01JSTsKIAlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZlY19lbmV0X21vZHVsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdAorZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZXJyOworCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJaW50IGksIGlycSwgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKLQlwcmludGsoIkZFQyBFTkVUIFZlcnNpb24gMC4yXG4iKTsKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRU5YSU87CiAKLQlmb3IgKGkgPSAwOyAoaSA8IEZFQ19NQVhfUE9SVFMpOyBpKyspIHsKLQkJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlKSk7Ci0JCWlmICghZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWVyciA9IGZlY19lbmV0X2luaXQoZGV2KTsKLQkJaWYgKGVycikgewotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJCWNvbnRpbnVlOworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIHBkZXYtPm5hbWUpOworCWlmICghcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIEluaXQgbmV0d29yayBkZXZpY2UgKi8KKwluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlKSk7CisJaWYgKCFuZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOworCisJLyogc2V0dXAgYm9hcmQgaW5mbyBzdHJ1Y3R1cmUgKi8KKwlmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwltZW1zZXQoZmVwLCAwLCBzaXplb2YoKmZlcCkpOworCisJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisKKwlpZiAoIW5kZXYtPmJhc2VfYWRkcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9pb3JlbWFwOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCisJLyogVGhpcyBkZXZpY2UgaGFzIHVwIHRvIHRocmVlIGlycXMgb24gc29tZSBwbGF0Zm9ybXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlmIChpICYmIGlycSA8IDApCisJCQlicmVhazsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBmZWNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIHBkZXYtPm5hbWUsIG5kZXYpOworCQlpZiAocmV0KSB7CisJCQl3aGlsZSAoaSA+PSAwKSB7CisJCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKKwkJCQlmcmVlX2lycShpcnEsIG5kZXYpOworCQkJCWktLTsKKwkJCX0KKwkJCWdvdG8gZmFpbGVkX2lycTsKIAkJfQotCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewotCQkJLyogWFhYOiBtaXNzaW5nIGNsZWFudXAgaGVyZSAqLwotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJfQogCi0JCXByaW50aygiJXM6IGV0aGVybmV0ICVwTVxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKwlmZXAtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZlY19jbGsiKTsKKwlpZiAoSVNfRVJSKGZlcC0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGZlcC0+Y2xrKTsKKwkJZ290byBmYWlsZWRfY2xrOworCX0KKwljbGtfZW5hYmxlKGZlcC0+Y2xrKTsKKworCXJldCA9IGZlY19lbmV0X2luaXQobmRldiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfaW5pdDsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF9yZWdpc3RlcjsKKworCXJldHVybiAwOworCitmYWlsZWRfcmVnaXN0ZXI6CitmYWlsZWRfaW5pdDoKKwljbGtfZGlzYWJsZShmZXAtPmNsayk7CisJY2xrX3B1dChmZXAtPmNsayk7CitmYWlsZWRfY2xrOgorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKKwkJaWYgKGlycSA+IDApCisJCQlmcmVlX2lycShpcnEsIG5kZXYpOworCX0KK2ZhaWxlZF9pcnE6CisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopbmRldi0+YmFzZV9hZGRyKTsKK2ZhaWxlZF9pb3JlbWFwOgorCWZyZWVfbmV0ZGV2KG5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQKK2ZlY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZlY19zdG9wKG5kZXYpOworCWNsa19kaXNhYmxlKGZlcC0+Y2xrKTsKKwljbGtfcHV0KGZlcC0+Y2xrKTsKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKiluZGV2LT5iYXNlX2FkZHIpOworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWZyZWVfbmV0ZGV2KG5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmZWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKKworCWlmIChuZGV2KSB7CisJCWZlcCA9IG5ldGRldl9wcml2KG5kZXYpOworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKKwkJCWZlY19zdG9wKG5kZXYpOworCQl9CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitmZWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAobmRldikgeworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJZmVjX2VuZXRfaW5pdChuZGV2LCAwKTsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZlY19kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgICAgPSAiZmVjIiwKKwkJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgPSBmZWNfcHJvYmUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChmZWNfZHJ2X3JlbW92ZSksCisJLnN1c3BlbmQgPSBmZWNfc3VzcGVuZCwKKwkucmVzdW1lICA9IGZlY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorZmVjX2VuZXRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJGRUMgRXRoZXJuZXQgRHJpdmVyXG4iKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZlY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2ZlY19lbmV0X2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZmVjX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KGZlY19lbmV0X2NsZWFudXApOwogbW9kdWxlX2luaXQoZmVjX2VuZXRfbW9kdWxlX2luaXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuaCBiL2RyaXZlcnMvbmV0L2ZlYy5oCmluZGV4IDI5MjcxOWQuLjc2YzY0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5oCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5oCkBAIC0xNCw3ICsxNCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUzMngpCisgICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YQykKIC8qCiAgKglKdXN0IGZpZ3VyZXMsIE1vdG9yb2xhIHdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSBvZmZzZXRzIGZvcgogICoJcmVnaXN0ZXJzIGluIHRoZSBzYW1lIHBlcmlwaGVyYWwgZGV2aWNlIG9uIGRpZmZlcmVudCBtb2RlbHMKQEAgLTEwMywxMiArMTAzLDE5IEBACiAvKgogICoJRGVmaW5lIHRoZSBidWZmZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9NWEMKK3R5cGVkZWYgc3RydWN0IGJ1ZmRlc2MgeworCXVuc2lnbmVkIHNob3J0IGNiZF9kYXRsZW47CS8qIERhdGEgbGVuZ3RoICovCisJdW5zaWduZWQgc2hvcnQgY2JkX3NjOwkvKiBDb250cm9sIGFuZCBzdGF0dXMgaW5mbyAqLworCXVuc2lnbmVkIGxvbmcgY2JkX2J1ZmFkZHI7CS8qIEJ1ZmZlciBhZGRyZXNzICovCit9IGNiZF90OworI2Vsc2UKIHR5cGVkZWYgc3RydWN0IGJ1ZmRlc2MgewogCXVuc2lnbmVkIHNob3J0CWNiZF9zYzsJCQkvKiBDb250cm9sIGFuZCBzdGF0dXMgaW5mbyAqLwogCXVuc2lnbmVkIHNob3J0CWNiZF9kYXRsZW47CQkvKiBEYXRhIGxlbmd0aCAqLwogCXVuc2lnbmVkIGxvbmcJY2JkX2J1ZmFkZHI7CQkvKiBCdWZmZXIgYWRkcmVzcyAqLwogfSBjYmRfdDsKLQorI2VuZGlmCiAKIC8qCiAgKglUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGNvdXJ0ZXN5IG9mIGNvbW1wcm9jLmgsIHdoaWNoIHdoZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IGI4MjUxZTguLmE4NThjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC42MiIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjY0IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTg3LDggKzg3LDggQEAKICNkZWZpbmUgREVWX0hBU19NU0lfWCAgICAgICAgICAgICAgMHgwMDAwODAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0ktWCAqLwogI2RlZmluZSBERVZfSEFTX1BPV0VSX0NOVFJMICAgICAgICAweDAwMDEwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHBvd2VyIHNhdmluZ3MgKi8KICNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YxICAgICAgMHgwMDAyMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMSAqLwotI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjIgICAgICAweDAwMDQwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAyICovCi0jZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMyAgICAgIDB4MDAwODAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDMgKi8KKyNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YyICAgICAgMHgwMDA2MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMiAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjMgICAgICAweDAwMGUwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAzICovCiAjZGVmaW5lIERFVl9IQVNfVEVTVF9FWFRFTkRFRCAgICAgIDB4MDAxMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgZXh0ZW5kZWQgZGlhZ25vc3RpYyB0ZXN0ICovCiAjZGVmaW5lIERFVl9IQVNfTUdNVF9VTklUICAgICAgICAgIDB4MDAyMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgbWFuYWdlbWVudCB1bml0ICovCiAjZGVmaW5lIERFVl9IQVNfQ09SUkVDVF9NQUNBRERSICAgIDB4MDA0MDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgY29ycmVjdCBtYWMgYWRkcmVzcyBvcmRlciAqLwpAQCAtMTAyLDcgKzEwMiw3IEBACiBlbnVtIHsKIAlOdlJlZ0lycVN0YXR1cyA9IDB4MDAwLAogI2RlZmluZSBOVlJFR19JUlFTVEFUX01JSUVWRU5UCTB4MDQwCi0jZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUFTSwkJMHg4MWZmCisjZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUFTSwkJMHg4M2ZmCiAJTnZSZWdJcnFNYXNrID0gMHgwMDQsCiAjZGVmaW5lIE5WUkVHX0lSUV9SWF9FUlJPUgkJMHgwMDAxCiAjZGVmaW5lIE5WUkVHX0lSUV9SWAkJCTB4MDAwMgpAQCAtMTEzLDE3ICsxMTMsMTMgQEAKICNkZWZpbmUgTlZSRUdfSVJRX0xJTksJCQkweDAwNDAKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0ZPUkNFRAkJMHgwMDgwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9GT1JDRUQJCTB4MDEwMAotI2RlZmluZSBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUgkJMHg4MDAwCisjZGVmaW5lIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SCQkweDgyMDAKICNkZWZpbmUgTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUCTB4MDBkZgogI2RlZmluZSBOVlJFR19JUlFNQVNLX0NQVQkJMHgwMDYwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9BTEwJCShOVlJFR19JUlFfVFhfRVJSfE5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVFhfRk9SQ0VEKQogI2RlZmluZSBOVlJFR19JUlFfUlhfQUxMCQkoTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1JYX0ZPUkNFRCkKICNkZWZpbmUgTlZSRUdfSVJRX09USEVSCQkJKE5WUkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikKIAotI2RlZmluZSBOVlJFR19JUlFfVU5LTk9XTgkofihOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19JUlFfVFhfRVJSfCBcCi0JCQkJCU5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JYX0ZPUkNFRHwgXAotCQkJCQlOVlJFR19JUlFfVFhfRk9SQ0VEfE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkKLQogCU52UmVnVW5rbm93blNldHVwUmVnNiA9IDB4MDA4LAogI2RlZmluZSBOVlJFR19VTktTRVRVUDZfVkFMCQkzCiAKQEAgLTEzMiw3ICsxMjgsNyBAQAogICogTlZSRUdfUE9MTF9ERUZBVUxUPTk3IHdvdWxkIHJlc3VsdCBpbiBhbiBpbnRlcnZhbCBsZW5ndGggb2YgMSBtcwogICovCiAJTnZSZWdQb2xsaW5nSW50ZXJ2YWwgPSAweDAwYywKLSNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJOTcwIC8qIGJhY2t1cCB0eCBjbGVhbnVwIGlmIGxvb3AgbWF4IHJlYWNoZWQgKi8KKyNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJNjU1MzUgLyogYmFja3VwIHR4IGNsZWFudXAgaWYgbG9vcCBtYXggcmVhY2hlZCAqLwogI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfQ1BVCTEzCiAJTnZSZWdNU0lNYXAwID0gMHgwMjAsCiAJTnZSZWdNU0lNYXAxID0gMHgwMjQsCkBAIC0xNTcsNiArMTUzLDkgQEAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNRCTB4MDAwMGYwMDAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRAkweDAwMDA0MDAwCiAjZGVmaW5lIE5WUkVHX1hNSVRDVExfVFhfUEFUSF9FTgkweDAxMDAwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfREFUQV9TVEFSVAkweDAwMTAwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfREFUQV9SRUFEWQkweDAwMDEwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfREFUQV9FUlJPUgkweDAwMDIwMDAwCiAJTnZSZWdUcmFuc21pdHRlclN0YXR1cyA9IDB4MDg4LAogI2RlZmluZSBOVlJFR19YTUlUU1RBVF9CVVNZCTB4MDEKIApAQCAtMjg5LDggKzI4OCwxMCBAQAogI2RlZmluZSBOVlJFR19XQUtFVVBGTEFHU19BQ0NFUFRfTElOS0NIQU5HRQkweDA0CiAjZGVmaW5lIE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRQkweDExMTEKIAotCU52UmVnUGF0dGVybkNSQyA9IDB4MjA0LAotCU52UmVnUGF0dGVybk1hc2sgPSAweDIwOCwKKwlOdlJlZ01nbXRVbml0R2V0VmVyc2lvbiA9IDB4MjA0LAorI2RlZmluZSBOVlJFR19NR01UVU5JVEdFVFZFUlNJT04gICAgIAkweDAxCisJTnZSZWdNZ210VW5pdFZlcnNpb24gPSAweDIwOCwKKyNkZWZpbmUgTlZSRUdfTUdNVFVOSVRWRVJTSU9OCQkweDA4CiAJTnZSZWdQb3dlckNhcCA9IDB4MjY4LAogI2RlZmluZSBOVlJFR19QT1dFUkNBUF9EM1NVUFAJKDE8PDMwKQogI2RlZmluZSBOVlJFR19QT1dFUkNBUF9EMlNVUFAJKDE8PDI2KQpAQCAtMzAzLDYgKzMwNCw4IEBACiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDEJCTB4MDAwMQogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QyCQkweDAwMDIKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMwkJMHgwMDAzCisJTnZSZWdNZ210VW5pdENvbnRyb2wgPSAweDI3OCwKKyNkZWZpbmUgTlZSRUdfTUdNVFVOSVRDT05UUk9MX0lOVVNFCTB4MjAwMDAKIAlOdlJlZ1R4Q250ID0gMHgyODAsCiAJTnZSZWdUeFplcm9SZVhtdCA9IDB4Mjg0LAogCU52UmVnVHhPbmVSZVhtdCA9IDB4Mjg4LApAQCAtNDYwLDcgKzQ2Myw3IEBACiAvKiBHZW5lcmFsIGRyaXZlciBkZWZhdWx0cyAqLwogI2RlZmluZSBOVl9XQVRDSERPR19USU1FTwkoNSpIWikKIAotI2RlZmluZSBSWF9SSU5HX0RFRkFVTFQJCTEyOAorI2RlZmluZSBSWF9SSU5HX0RFRkFVTFQJCTUxMgogI2RlZmluZSBUWF9SSU5HX0RFRkFVTFQJCTI1NgogI2RlZmluZSBSWF9SSU5HX01JTgkJMTI4CiAjZGVmaW5lIFRYX1JJTkdfTUlOCQk2NApAQCAtNTgyLDExICs1ODUsMTcgQEAKICNkZWZpbmUgTlZfTVNJX1hfVkVDVE9SX1RYICAgIDB4MQogI2RlZmluZSBOVl9NU0lfWF9WRUNUT1JfT1RIRVIgMHgyCiAKKyNkZWZpbmUgTlZfTVNJX1BSSVZfT0ZGU0VUIDB4NjgKKyNkZWZpbmUgTlZfTVNJX1BSSVZfVkFMVUUgIDB4ZmZmZmZmZmYKKwogI2RlZmluZSBOVl9SRVNUQVJUX1RYICAgICAgICAgMHgxCiAjZGVmaW5lIE5WX1JFU1RBUlRfUlggICAgICAgICAweDIKIAogI2RlZmluZSBOVl9UWF9MSU1JVF9DT1VOVCAgICAgMTYKIAorI2RlZmluZSBOVl9EWU5BTUlDX1RIUkVTSE9MRCAgICAgICAgNAorI2RlZmluZSBOVl9EWU5BTUlDX01BWF9RVUlFVF9DT1VOVCAgMjA0OAorCiAvKiBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgewogCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOwpAQCAtNzQ0LDExICs3NTMsMTMgQEAKIAl1MTYgZ2lnYWJpdDsKIAlpbnQgaW50cl90ZXN0OwogCWludCByZWNvdmVyX2Vycm9yOworCWludCBxdWlldF9jb3VudDsKIAogCS8qIEdlbmVyYWwgZGF0YTogUk8gZmllbGRzICovCiAJZG1hX2FkZHJfdCByaW5nX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJdTMyIG9yaWdfbWFjWzJdOworCXUzMiBldmVudHM7CiAJdTMyIGlycW1hc2s7CiAJdTMyIGRlc2NfdmVyOwogCXUzMiB0eHJ4Y3RsX2JpdHM7CkBAIC03NTgsNiArNzY5LDggQEAKIAl1MzIgcmVnaXN0ZXJfc2l6ZTsKIAlpbnQgcnhfY3N1bTsKIAl1MzIgbWFjX2luX3VzZTsKKwlpbnQgbWdtdF92ZXJzaW9uOworCWludCBtZ210X3NlbWE7CiAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKQEAgLTgxMiwxMyArODI1LDE4IEBACiAKIAkvKiBwb3dlciBzYXZlZCBzdGF0ZSAqLwogCXUzMiBzYXZlZF9jb25maWdfc3BhY2VbTlZfUENJX1JFR1NaX01BWC80XTsKKworCS8qIGZvciBkaWZmZXJlbnQgbXNpLXggaXJxIHR5cGUgKi8KKwljaGFyIG5hbWVfcnhbSUZOQU1TSVogKyAzXTsgICAgICAgLyogLXJ4ICAgICovCisJY2hhciBuYW1lX3R4W0lGTkFNU0laICsgM107ICAgICAgIC8qIC10eCAgICAqLworCWNoYXIgbmFtZV9vdGhlcltJRk5BTVNJWiArIDZdOyAgICAvKiAtb3RoZXIgKi8KIH07CiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiBsb29wcyB1bnRpbCB3ZSBhc3N1bWUgdGhhdCBhIGJpdCBpbiB0aGUgaXJxIG1hc2sKICAqIGlzIHN0dWNrLiBPdmVycmlkYWJsZSB3aXRoIG1vZHVsZSBwYXJhbS4KICAqLwotc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAxNTsKK3N0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDsKIAogLyoKICAqIE9wdGltaXphdGlvbiBjYW4gYmUgZWl0aGVyIHRocm91cHV0IG1vZGUgb3IgY3B1IG1vZGUKQEAgLTgyOCw5ICs4NDYsMTAgQEAKICAqLwogZW51bSB7CiAJTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCwKLQlOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUKKwlOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUsCisJTlZfT1BUSU1JWkFUSU9OX01PREVfRFlOQU1JQwogfTsKLXN0YXRpYyBpbnQgb3B0aW1pemF0aW9uX21vZGUgPSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUOworc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX0RZTkFNSUM7CiAKIC8qCiAgKiBQb2xsIGludGVydmFsIGZvciB0aW1lciBpcnEKQEAgLTg1Nyw3ICs4NzYsNyBAQAogCU5WX01TSVhfSU5UX0RJU0FCTEVELAogCU5WX01TSVhfSU5UX0VOQUJMRUQKIH07Ci1zdGF0aWMgaW50IG1zaXggPSBOVl9NU0lYX0lOVF9ESVNBQkxFRDsKK3N0YXRpYyBpbnQgbXNpeCA9IE5WX01TSVhfSU5UX0VOQUJMRUQ7CiAKIC8qCiAgKiBETUEgNjRiaXQKQEAgLTkyMyw3ICs5NDIsNyBAQAogCQlkZWxheW1heCAtPSBkZWxheTsKIAkJaWYgKGRlbGF5bWF4IDwgMCkgewogCQkJaWYgKG1zZykKLQkJCQlwcmludGsobXNnKTsKKwkJCQlwcmludGsoIiVzIiwgbXNnKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAoKHJlYWRsKGJhc2UgKyBvZmZzZXQpICYgbWFzaykgIT0gdGFyZ2V0KTsKQEAgLTEwNTIsNiArMTA3MSwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgbnZfbmFwaV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwluYXBpX2VuYWJsZSgmbnAtPm5hcGkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIG52X25hcGlfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKworCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOworI2VuZGlmCit9CisKICNkZWZpbmUgTUlJX1JFQUQJKC0xKQogLyogbWlpX3J3OiByZWFkL3dyaXRlIGEgcmVnaXN0ZXIgb24gdGhlIFBIWS4KICAqCkBAIC0xNzYwLDcgKzE3OTcsNyBAQAogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBKdXN0IHJlc2NoZWR1bGUgTkFQSSByeCBwcm9jZXNzaW5nICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgbnZfZG9fcnhfcmVmaWxsKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTIzNjUsMTQgKzI0MDIsMTYgQEAKICAqCiAgKiBDYWxsZXIgbXVzdCBvd24gbnAtPmxvY2suCiAgKi8KLXN0YXRpYyB2b2lkIG52X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbnZfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgZmxhZ3M7CisJaW50IHR4X3dvcmsgPSAwOwogCXN0cnVjdCByaW5nX2Rlc2MqIG9yaWdfZ2V0X3R4ID0gbnAtPmdldF90eC5vcmlnOwogCiAJd2hpbGUgKChucC0+Z2V0X3R4Lm9yaWcgIT0gbnAtPnB1dF90eC5vcmlnKSAmJgotCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHgub3JpZy0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpKSB7CisJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5vcmlnLT5mbGFnbGVuKSkgJiBOVl9UWF9WQUxJRCkgJiYKKwkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lOiBmbGFncyAweCV4LlxuIiwKIAkJCQkJZGV2LT5uYW1lLCBmbGFncyk7CkBAIC0yMzk4LDYgKzI0MzcsNyBAQAogCQkJCX0KIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKIAkJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCQl0eF93b3JrKys7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoZmxhZ3MgJiBOVl9UWDJfTEFTVFBBQ0tFVCkgewpAQCAtMjQxNSw2ICsyNDU1LDcgQEAKIAkJCQl9CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQkJbnAtPmdldF90eF9jdHgtPnNrYiA9IE5VTEw7CisJCQkJdHhfd29yaysrOwogCQkJfQogCQl9CiAJCWlmICh1bmxpa2VseShucC0+Z2V0X3R4Lm9yaWcrKyA9PSBucC0+bGFzdF90eC5vcmlnKSkKQEAgLTI0MjYsMTcgKzI0NjcsMTkgQEAKIAkJbnAtPnR4X3N0b3AgPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQorCXJldHVybiB0eF93b3JrOwogfQogCi1zdGF0aWMgdm9pZCBudl90eF9kb25lX29wdGltaXplZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCitzdGF0aWMgaW50IG52X3R4X2RvbmVfb3B0aW1pemVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBmbGFnczsKKwlpbnQgdHhfd29yayA9IDA7CiAJc3RydWN0IHJpbmdfZGVzY19leCogb3JpZ19nZXRfdHggPSBucC0+Z2V0X3R4LmV4OwogCiAJd2hpbGUgKChucC0+Z2V0X3R4LmV4ICE9IG5wLT5wdXRfdHguZXgpICYmCiAJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5leC0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpICYmCi0JICAgICAgIChsaW1pdC0tID4gMCkpIHsKKwkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lX29wdGltaXplZDogZmxhZ3MgMHgleC5cbiIsCiAJCQkJCWRldi0+bmFtZSwgZmxhZ3MpOwpAQCAtMjQ2MCw2ICsyNTAzLDcgQEAKIAogCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCXR4X3dvcmsrKzsKIAogCQkJaWYgKG5wLT50eF9saW1pdCkgewogCQkJCW52X3R4X2ZsaXBfb3duZXJzaGlwKGRldik7CkBAIC0yNDc0LDYgKzI1MTgsNyBAQAogCQlucC0+dHhfc3RvcCA9IDA7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CisJcmV0dXJuIHR4X3dvcms7CiB9CiAKIC8qCkBAIC0yNTQ2LDcgKzI1OTEsNyBAQAogCiAJLyogMikgY2hlY2sgdGhhdCB0aGUgcGFja2V0cyB3ZXJlIG5vdCBzZW50IGFscmVhZHk6ICovCiAJaWYgKCFudl9vcHRpbWl6ZWQobnApKQotCQludl90eF9kb25lKGRldik7CisJCW52X3R4X2RvbmUoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKIAllbHNlCiAJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CiAKQEAgLTI5MDcsNiArMjk1Miw3IEBACiAJCSAqIENoYW5naW5nIHRoZSBNVFUgaXMgYSByYXJlIGV2ZW50LCBpdCBzaG91bGRuJ3QgbWF0dGVyLgogCQkgKi8KIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtMjkzNSw2ICsyOTgxLDcgQEAKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzc1LDUwICszNDIyLDcxIEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIGludCBudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRvdGFsX3dvcmspCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDKSB7CisJCWlmICh0b3RhbF93b3JrID4gTlZfRFlOQU1JQ19USFJFU0hPTEQpIHsKKwkJCS8qIHRyYW5zaXRpb24gdG8gcG9sbCBiYXNlZCBpbnRlcnJ1cHRzICovCisJCQlucC0+cXVpZXRfY291bnQgPSAwOworCQkJaWYgKG5wLT5pcnFtYXNrICE9IE5WUkVHX0lSUU1BU0tfQ1BVKSB7CisJCQkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChucC0+cXVpZXRfY291bnQgPCBOVl9EWU5BTUlDX01BWF9RVUlFVF9DT1VOVCkgeworCQkJCW5wLT5xdWlldF9jb3VudCsrOworCQkJfSBlbHNlIHsKKwkJCQkvKiByZWFjaGVkIGEgcGVyaW9kIG9mIGxvdyBhY3Rpdml0eSwgc3dpdGNoCisJCQkJICAgdG8gcGVyIHR4L3J4IHBhY2tldCBpbnRlcnJ1cHRzICovCisJCQkJaWYgKG5wLT5pcnFtYXNrICE9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVCkgeworCQkJCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycShpbnQgZm9vLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTMyIGV2ZW50czsKLQlpbnQgaTsKKyNpZm5kZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJaW50IHRvdGFsX3dvcmsgPSAwOworCWludCBsb29wX2NvdW50ID0gMDsKKyNlbmRpZgogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycVxuIiwgZGV2LT5uYW1lKTsKIAotCWZvciAoaT0wOyA7IGkrKykgewotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwotCQl9IGVsc2UgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQkJfQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKLQkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQotCQkJYnJlYWs7CisJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwl9IGVsc2UgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIG5wLT5ldmVudHMpOworCWlmICghKG5wLT5ldmVudHMgJiBucC0+aXJxbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKIAotCQludl9tc2lfd29ya2Fyb3VuZChucCk7Ci0KLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCW52X3R4X2RvbmUoZGV2KTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwludl9tc2lfd29ya2Fyb3VuZChucCk7CiAKICNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAKLQkJCS8qIERpc2FibGUgZnVydGh1ciByZWNlaXZlIGlycSdzICovCi0JCQlucC0+aXJxbWFzayAmPSB+TlZSRUdfSVJRX1JYX0FMTDsKKwkvKiBEaXNhYmxlIGZ1cnRodXIgaXJxJ3MKKwkgICAobXNpeCBub3QgZW5hYmxlZCB3aXRoIG5hcGkpICovCisJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCi0JCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQl9CiAjZWxzZQotCQlpZiAobnZfcnhfcHJvY2VzcyhkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSB7CisJZG8KKwl7CisJCWludCB3b3JrID0gMDsKKwkJaWYgKCh3b3JrID0gbnZfcnhfcHJvY2VzcyhkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSkgewogCQkJaWYgKHVubGlrZWx5KG52X2FsbG9jX3J4KGRldikpKSB7CiAJCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCkBAIC0zNDI2LDY1ICszNDk0LDU2IEBACiAJCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJCX0KIAkJfQotI2VuZGlmCi0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfbGlua19pcnEoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rY2hhbmdlKGRldik7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkpIHsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9VTktOT1dOKSkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggdW5rbm93biBldmVudHMgMHgleC4gUGxlYXNlIHJlcG9ydFxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlwY2lfcHVzaChiYXNlKTsKIAotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKLQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7Ci0JCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOwotCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQl3b3JrICs9IG52X3R4X2RvbmUoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKworCQlpZiAoIXdvcmspCiAJCQlicmVhazsKLQkJfQotCQlpZiAodW5saWtlbHkoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZCkgaW4gbnZfbmljX2lycS5cbiIsIGRldi0+bmFtZSwgaSk7Ci0JCQlicmVhazsKLQkJfQorCQl0b3RhbF93b3JrICs9IHdvcms7CiAKKwkJbG9vcF9jb3VudCsrOwogCX0KKwl3aGlsZSAobG9vcF9jb3VudCA8IG1heF9pbnRlcnJ1cHRfd29yayk7CisKKwlpZiAobnZfY2hhbmdlX2ludGVycnVwdF9tb2RlKGRldiwgdG90YWxfd29yaykpIHsKKwkJLyogc2V0dXAgbmV3IGlycSBtYXNrICovCisJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfQorCisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X2xpbmtfaXJxKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJfQorCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CisJfQorCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLworCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCWVsc2UKKwkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCXBjaV9wdXNoKGJhc2UpOworCisJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisjZW5kaWYKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxIGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKIAotCXJldHVybiBJUlFfUkVUVkFMKGkpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCkBAIC0zNDk3LDQ1ICszNTU2LDM4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl1MzIgZXZlbnRzOwotCWludCBpOworI2lmbmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwlpbnQgdG90YWxfd29yayA9IDA7CisJaW50IGxvb3BfY291bnQgPSAwOworI2VuZGlmCiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX29wdGltaXplZFxuIiwgZGV2LT5uYW1lKTsKIAotCWZvciAoaT0wOyA7IGkrKykgewotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwotCQl9IGVsc2UgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQkJfQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKLQkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQotCQkJYnJlYWs7CisJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwl9IGVsc2UgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIG5wLT5ldmVudHMpOworCWlmICghKG5wLT5ldmVudHMgJiBucC0+aXJxbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKIAotCQludl9tc2lfd29ya2Fyb3VuZChucCk7Ci0KLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19QRVJfTE9PUCk7Ci0JCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJbnZfbXNpX3dvcmthcm91bmQobnApOwogCiAjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCWlmIChldmVudHMgJiBOVlJFR19JUlFfUlhfQUxMKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCi0JCQkvKiBEaXNhYmxlIGZ1cnRodXIgcmVjZWl2ZSBpcnEncyAqLwotCQkJbnAtPmlycW1hc2sgJj0gfk5WUkVHX0lSUV9SWF9BTEw7CisJLyogRGlzYWJsZSBmdXJ0aHVyIGlycSdzCisJICAgKG1zaXggbm90IGVuYWJsZWQgd2l0aCBuYXBpKSAqLworCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAotCQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQogI2Vsc2UKLQkJaWYgKG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgUlhfV09SS19QRVJfTE9PUCkpIHsKKwlkbworCXsKKwkJaW50IHdvcmsgPSAwOworCQlpZiAoKHdvcmsgPSBudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSkgewogCQkJaWYgKHVubGlrZWx5KG52X2FsbG9jX3J4X29wdGltaXplZChkZXYpKSkgewogCQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJCWlmICghbnAtPmluX3NodXRkb3duKQpAQCAtMzU0Myw2NiArMzU5NSw1NyBAQAogCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCQl9CiAJCX0KLSNlbmRpZgotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtfaXJxKGRldik7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQl9Ci0JCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfbGlua2NoYW5nZShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpKSB7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCBldmVudHMgMHgleC4gUHJvYmFibHkgVFggZmFpbC5cbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRzIDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKSB7Ci0JCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOwotCQkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJd29yayArPSBudl90eF9kb25lX29wdGltaXplZChkZXYsIFRYX1dPUktfUEVSX0xPT1ApOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCisJCWlmICghd29yaykKIAkJCWJyZWFrOwotCQl9CiAKLQkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlwY2lfcHVzaChiYXNlKTsKKwkJdG90YWxfd29yayArPSB3b3JrOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZCkgaW4gbnZfbmljX2lycS5cbiIsIGRldi0+bmFtZSwgaSk7Ci0JCQlicmVhazsKLQkJfQotCisJCWxvb3BfY291bnQrKzsKIAl9CisJd2hpbGUgKGxvb3BfY291bnQgPCBtYXhfaW50ZXJydXB0X3dvcmspOworCisJaWYgKG52X2NoYW5nZV9pbnRlcnJ1cHRfbW9kZShkZXYsIHRvdGFsX3dvcmspKSB7CisJCS8qIHNldHVwIG5ldyBpcnEgbWFzayAqLworCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCX0KKworCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl9saW5rX2lycShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKwlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl9saW5rY2hhbmdlKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOworCX0KKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQllbHNlCisJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQlwY2lfcHVzaChiYXNlKTsKKworCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgeworCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOworCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOworCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJfQorCisjZW5kaWYKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX29wdGltaXplZCBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CiAKLQlyZXR1cm4gSVJRX1JFVFZBTChpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3R4KGludCBmb28sIHZvaWQgKmRhdGEpCkBAIC0zNjI3LDEwICszNjcwLDYgQEAKIAkJbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSkgewotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9CiAJCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwpAQCAtMzY1OSwxMyArMzY5OCwyMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBucC0+ZGV2OwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcGt0cywgcmV0Y29kZTsKKwlpbnQgcmV0Y29kZTsKKwlpbnQgdHhfd29yaywgcnhfd29yazsKIAogCWlmICghbnZfb3B0aW1pemVkKG5wKSkgewotCQlwa3RzID0gbnZfcnhfcHJvY2VzcyhkZXYsIGJ1ZGdldCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCQl0eF93b3JrID0gbnZfdHhfZG9uZShkZXYsIG5wLT50eF9yaW5nX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCisJCXJ4X3dvcmsgPSBudl9yeF9wcm9jZXNzKGRldiwgYnVkZ2V0KTsKIAkJcmV0Y29kZSA9IG52X2FsbG9jX3J4KGRldik7CiAJfSBlbHNlIHsKLQkJcGt0cyA9IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgYnVkZ2V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCXR4X3dvcmsgPSBudl90eF9kb25lX29wdGltaXplZChkZXYsIG5wLT50eF9yaW5nX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCisJCXJ4X3dvcmsgPSBudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIGJ1ZGdldCk7CiAJCXJldGNvZGUgPSBudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KTsKIAl9CiAKQEAgLTM2NzYsNDQgKzM3MjQsNDIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlpZiAocGt0cyA8IGJ1ZGdldCkgewotCQkvKiByZS1lbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzICovCisJbnZfY2hhbmdlX2ludGVycnVwdF9tb2RlKGRldiwgdHhfd29yayArIHJ4X3dvcmspOworCisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7Ci0KLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQotCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfUlhfQUxMOwotCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCWVsc2UKLQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0KKwkJbnZfbGlua19pcnEoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JcmV0dXJuIHBrdHM7CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOworCQlyZXR1cm4gcnhfd29yazsKKwl9CisKKwlpZiAocnhfd29yayA8IGJ1ZGdldCkgeworCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cworCQkgICAobXNpeCBub3QgZW5hYmxlZCBpbiBuYXBpKSAqLworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CisKKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisJcmV0dXJuIHJ4X3dvcms7CiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfcngoaW50IGZvbywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCXUzMiBldmVudHM7Ci0KLQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUV9SWF9BTEw7Ci0Jd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCi0JaWYgKGV2ZW50cykgewotCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOwotCQkvKiBkaXNhYmxlIHJlY2VpdmUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJcGNpX3B1c2goYmFzZSk7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLSNlbHNlCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9yeChpbnQgZm9vLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKQEAgLTM3NjAsNyArMzgwNiw2IEBACiAKIAlyZXR1cm4gSVJRX1JFVFZBTChpKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vdGhlcihpbnQgZm9vLCB2b2lkICpkYXRhKQogewpAQCAtMzgxMCwxMCArMzg1NSw2IEBACiAJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRzIDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KIAkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCkBAIC0zOTE4LDIxICszOTU5LDI3IEBACiAJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0VOQUJMRUQ7CiAJCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCAmJiAhaW50cl90ZXN0KSB7CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXNwcmludGYobnAtPm5hbWVfcngsICIlcy1yeCIsIGRldi0+bmFtZSk7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwKKwkJCQkJCSZudl9uaWNfaXJxX3J4LCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfcngsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCQkJCQlnb3RvIG91dF9lcnI7CiAJCQkJfQogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQlzcHJpbnRmKG5wLT5uYW1lX3R4LCAiJXMtdHgiLCBkZXYtPm5hbWUpOworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsCisJCQkJCQkmbnZfbmljX2lycV90eCwgSVJRRl9TSEFSRUQsIG5wLT5uYW1lX3R4LCBkZXYpICE9IDApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKIAkJCQkJZ290byBvdXRfZnJlZV9yeDsKIAkJCQl9CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXNwcmludGYobnAtPm5hbWVfb3RoZXIsICIlcy1vdGhlciIsIGRldi0+bmFtZSk7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwKKwkJCQkJCSZudl9uaWNfaXJxX290aGVyLCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfb3RoZXIsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CkBAIC00MDQ2LDE5ICs0MDkzLDE5IEBACiAJCQltYXNrIHw9IE5WUkVHX0lSUV9PVEhFUjsKIAkJfQogCX0KLQlucC0+bmljX3BvbGxfaXJxID0gMDsKLQogCS8qIGRpc2FibGVfaXJxKCkgY29udGFpbnMgc3luY2hyb25pemVfaXJxLCB0aHVzIG5vIGlycSBoYW5kbGVyIGNhbiBydW4gbm93ICovCiAKIAlpZiAobnAtPnJlY292ZXJfZXJyb3IpIHsKIAkJbnAtPnJlY292ZXJfZXJyb3IgPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IE1BQyBpbiByZWNvdmVyYWJsZSBlcnJvciBzdGF0ZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNQUMgaW4gcmVjb3ZlcmFibGUgZXJyb3Igc3RhdGVcbiIsIGRldi0+bmFtZSk7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkvKiBzdG9wIGVuZ2luZXMgKi8KIAkJCW52X3N0b3Bfcnh0eChkZXYpOworCQkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUE9XRVJfQ05UUkwpCisJCQkJbnZfbWFjX3Jlc2V0KGRldik7CiAJCQludl90eHJ4X3Jlc2V0KGRldik7CiAJCQkvKiBkcmFpbiByeCBxdWV1ZSAqLwogCQkJbnZfZHJhaW5fcnh0eChkZXYpOwpAQCAtNDA3Niw2ICs0MTIzLDExIEBACiAJCQlwY2lfcHVzaChiYXNlKTsKIAkJCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CiAJCQlwY2lfcHVzaChiYXNlKTsKKwkJCS8qIGNsZWFyIGludGVycnVwdHMgKi8KKwkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKKwkJCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQkJZWxzZQorCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwogCiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwogCQkJbnZfc3RhcnRfcnh0eChkZXYpOwpAQCAtNDA4NSwxMSArNDEzNywxMSBAQAogCQl9CiAJfQogCi0KIAl3cml0ZWwobWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CiAJcGNpX3B1c2goYmFzZSk7CiAKIAlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlucC0+bmljX3BvbGxfaXJxID0gMDsKIAkJaWYgKG52X29wdGltaXplZChucCkpCiAJCQludl9uaWNfaXJxX29wdGltaXplZCgwLCBkZXYpOwogCQllbHNlCkBAIC00MTAwLDE4ICs0MTUyLDIyIEBACiAJCQllbmFibGVfaXJxX2xvY2tkZXAobnAtPnBjaV9kZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfUlhfQUxMKSB7CisJCQlucC0+bmljX3BvbGxfaXJxICY9IH5OVlJFR19JUlFfUlhfQUxMOwogCQkJbnZfbmljX2lycV9yeCgwLCBkZXYpOwogCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfVFhfQUxMKSB7CisJCQlucC0+bmljX3BvbGxfaXJxICY9IH5OVlJFR19JUlFfVFhfQUxMOwogCQkJbnZfbmljX2lycV90eCgwLCBkZXYpOwogCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfT1RIRVIpIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgJj0gfk5WUkVHX0lSUV9PVEhFUjsKIAkJCW52X25pY19pcnFfb3RoZXIoMCwgZGV2KTsKIAkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOwogCQl9CiAJfQorCiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtNDU2MCw2ICs0NjE2LDcgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtNDYxMiw2ICs0NjY5LDcgQEAKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NzM4LDcgKzQ3OTYsNyBAQAogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkKLQkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0oZGV2LCBkYXRhKTsKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKIAllbHNlCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTQ3NjQsMTIgKzQ4MjIsMTIgQEAKIAkJZWxzZQogCQkJcmV0dXJuIE5WX1RFU1RfQ09VTlRfQkFTRTsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMSkKLQkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMV9DT1VOVDsKKwkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMykKKwkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WM19DT1VOVDsKIAkJZWxzZSBpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YyKQogCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YyX0NPVU5UOwotCQllbHNlIGlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjMpCi0JCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjNfQ09VTlQ7CisJCWVsc2UgaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMSkKKwkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMV9DT1VOVDsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKQEAgLTUwMzgsOSArNTA5Niw3IEBACiAJaWYgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgewogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCQluYXBpX2Rpc2FibGUoJm5wLT5uYXBpKTsKLSNlbmRpZgorCQkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTUwOTgsOSArNTE1NCw3IEBACiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwogCQkJbnZfc3RhcnRfcnh0eChkZXYpOwogCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwkJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCQludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAkJfQogCX0KQEAgLTUxNjksNiArNTIyMyw3IEBACiAvKiBUaGUgbWdtdCB1bml0IGFuZCBkcml2ZXIgdXNlIGEgc2VtYXBob3JlIHRvIGFjY2VzcyB0aGUgcGh5IGR1cmluZyBpbml0ICovCiBzdGF0aWMgaW50IG52X21nbXRfYWNxdWlyZV9zZW1hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCWludCBpOwogCXUzMiB0eF9jdHJsLCBtZ210X3NlbWE7CkBAIC01MTkxLDggKzUyNDYsMTAgQEAKIAkJLyogdmVyaWZ5IHRoYXQgc2VtYXBob3JlIHdhcyBhY3F1aXJlZCAqLwogCQl0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKIAkJaWYgKCgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUSkgJiYKLQkJICAgICgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX0ZSRUUpKQorCQkgICAgKCh0eF9jdHJsICYgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfTUFTSykgPT0gTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRSkpIHsKKwkJCW5wLT5tZ210X3NlbWEgPSAxOwogCQkJcmV0dXJuIDE7CisJCX0KIAkJZWxzZQogCQkJdWRlbGF5KDUwKTsKIAl9CkBAIC01MjAwLDYgKzUyNTcsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbnZfbWdtdF9yZWxlYXNlX3NlbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHR4X2N0cmw7CisKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJaWYgKG5wLT5tZ210X3NlbWEpIHsKKwkJCXR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCQkJdHhfY3RybCAmPSB+TlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNROworCQkJd3JpdGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIGludCBudl9tZ210X2dldF92ZXJzaW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiBkYXRhX3JlYWR5ID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwl1MzIgZGF0YV9yZWFkeTIgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IHJlYWR5ID0gMDsKKworCXdyaXRlbChOVlJFR19NR01UVU5JVEdFVFZFUlNJT04sIGJhc2UgKyBOdlJlZ01nbXRVbml0R2V0VmVyc2lvbik7CisJd3JpdGVsKGRhdGFfcmVhZHkgXiBOVlJFR19YTUlUQ1RMX0RBVEFfU1RBUlQsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJc3RhcnQgPSBqaWZmaWVzOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdGFydCArIDUqSFopKSB7CisJCWRhdGFfcmVhZHkyID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwkJaWYgKChkYXRhX3JlYWR5ICYgTlZSRUdfWE1JVENUTF9EQVRBX1JFQURZKSAhPSAoZGF0YV9yZWFkeTIgJiBOVlJFR19YTUlUQ1RMX0RBVEFfUkVBRFkpKSB7CisJCQlyZWFkeSA9IDE7CisJCQlicmVhazsKKwkJfQorCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9CisKKwlpZiAoIXJlYWR5IHx8IChkYXRhX3JlYWR5MiAmIE5WUkVHX1hNSVRDVExfREFUQV9FUlJPUikpCisJCXJldHVybiAwOworCisJbnAtPm1nbXRfdmVyc2lvbiA9IHJlYWRsKGJhc2UgKyBOdlJlZ01nbXRVbml0VmVyc2lvbikgJiBOVlJFR19NR01UVU5JVFZFUlNJT047CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBudl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTUzNDQsOSArNTQ0Niw3IEBACiAJcmV0ID0gbnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpOwogCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwludl9uYXBpX2VuYWJsZShkZXYpOwogCiAJaWYgKHJldCkgewogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC01Mzc4LDkgKzU0NzgsNyBAQAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlucC0+aW5fc2h1dGRvd24gPSAxOwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJc3luY2hyb25pemVfaXJxKG5wLT5wY2lfZGV2LT5pcnEpOwogCiAJZGVsX3RpbWVyX3N5bmMoJm5wLT5vb21fa2ljayk7CkBAIC01NTcxLDE0ICs1NjY5LDYgQEAKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fVFg7CiAJfQogCi0JbnAtPm1zaV9mbGFncyA9IDA7Ci0JaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgbXNpKSB7Ci0JCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7Ci0JfQotCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgbXNpeCkgewotCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0NBUEFCTEU7Ci0JfQotCiAJbnAtPnBhdXNlX2ZsYWdzID0gTlZfUEFVU0VGUkFNRV9SWF9DQVBBQkxFIHwgTlZfUEFVU0VGUkFNRV9SWF9SRVEgfCBOVl9QQVVTRUZSQU1FX0FVVE9ORUc7CiAJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjEpIHx8CiAJICAgIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjIpIHx8CkBAIC01NzIzLDE0ICs1ODEzLDM1IEBACiAJfSBlbHNlIHsKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFgyX1ZBTElEOwogCX0KLQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkgewotCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSAvKiBzZXQgbnVtYmVyIG9mIHZlY3RvcnMgKi8KLQkJCW5wLT5tc2lfZmxhZ3MgfD0gMHgwMDAzOwotCX0gZWxzZSB7CisKKwlucC0+bXNpX2ZsYWdzID0gMDsKKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpIHsKKwkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfQ0FQQUJMRTsKKwl9CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7CisJCS8qIG1zaXggaGFzIGhhZCByZXBvcnRlZCBpc3N1ZXMgd2hlbiBtb2RpZnlpbmcgaXJxbWFzaworCQkgICBhcyBpbiB0aGUgY2FzZSBvZiBuYXBpLCB0aGVyZWZvcmUsIGRpc2FibGUgZm9yIG5vdworCQkqLworI2lmbmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9DQVBBQkxFOworI2VuZGlmCisJfQorCisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX0NQVSkgewogCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfQ1BVOwogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLwogCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDE7CisJfSBlbHNlIGlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDICYmCisJCSAgICEoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfVElNRVJJUlEpKSB7CisJCS8qIHN0YXJ0IG9mZiBpbiB0aHJvdWdocHV0IG1vZGUgKi8KKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7CisJCS8qIHJlbW92ZSBzdXBwb3J0IGZvciBtc2l4IG1vZGUgKi8KKwkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfQ0FQQUJMRTsKKwl9IGVsc2UgeworCQlvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLworCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDM7CiAJfQogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRKQpAQCAtNTc3MSwxOSArNTg4MiwyNiBAQAogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTUdNVF9VTklUKSB7CiAJCS8qIG1hbmFnZW1lbnQgdW5pdCBydW5uaW5nIG9uIHRoZSBtYWM/ICovCi0JCWlmIChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSB7Ci0JCQlucC0+bWFjX2luX3VzZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX01HTVRfU1Q7Ci0JCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG1nbXQgdW5pdCBpcyBydW5uaW5nLiBtYWMgaW4gdXNlICV4LlxuIiwgcGNpX25hbWUocGNpX2RldiksIG5wLT5tYWNfaW5fdXNlKTsKLQkJCWlmIChudl9tZ210X2FjcXVpcmVfc2VtYShkZXYpKSB7Ci0JCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8gKi8KLQkJCQlpZiAoKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSykgPT0KLQkJCQkgICAgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSB7Ci0JCQkJCS8qIHBoeSBpcyBpbml0ZWQgYnkgbWdtdCB1bml0ICovCi0JCQkJCXBoeWluaXRpYWxpemVkID0gMTsKLQkJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBQaHkgYWxyZWFkeSBpbml0aWFsaXplZCBieSBtZ210IHVuaXQuXG4iLCBwY2lfbmFtZShwY2lfZGV2KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogd2UgbmVlZCB0byBpbml0IHRoZSBwaHkgKi8KLQkJCQl9CisJCWlmICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfTUdNVF9TVCkgJiYKKwkJICAgIChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSAmJgorCQkgICAgbnZfbWdtdF9hY3F1aXJlX3NlbWEoZGV2KSAmJgorCQkgICAgbnZfbWdtdF9nZXRfdmVyc2lvbihkZXYpKSB7CisJCQlucC0+bWFjX2luX3VzZSA9IDE7CisJCQlpZiAobnAtPm1nbXRfdmVyc2lvbiA+IDApIHsKKwkJCQlucC0+bWFjX2luX3VzZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ01nbXRVbml0Q29udHJvbCkgJiBOVlJFR19NR01UVU5JVENPTlRST0xfSU5VU0U7CisJCQl9CisJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG1nbXQgdW5pdCBpcyBydW5uaW5nLiBtYWMgaW4gdXNlICV4LlxuIiwKKwkJCQlwY2lfbmFtZShwY2lfZGV2KSwgbnAtPm1hY19pbl91c2UpOworCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8gKi8KKwkJCWlmIChucC0+bWFjX2luX3VzZSAmJgorCQkJICAgICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLKSA9PQorCQkJICAgICBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpKSB7CisJCQkJLyogcGh5IGlzIGluaXRlZCBieSBtZ210IHVuaXQgKi8KKwkJCQlwaHlpbml0aWFsaXplZCA9IDE7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBQaHkgYWxyZWFkeSBpbml0aWFsaXplZCBieSBtZ210IHVuaXQuXG4iLAorCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCiAJCQl9CiAJCX0KIAl9CkBAIC01OTQ1LDYgKzYwNjMsOCBAQAogCS8qIHJlc3RvcmUgYW55IHBoeSByZWxhdGVkIGNoYW5nZXMgKi8KIAludl9yZXN0b3JlX3BoeShkZXYpOwogCisJbnZfbWdtdF9yZWxlYXNlX3NlbWEoZGV2KTsKKwogCS8qIGZyZWUgYWxsIHN0cnVjdHVyZXMgKi8KIAlmcmVlX3JpbmdzKGRldik7CiAJaW91bm1hcChnZXRfaHdiYXNlKGRldikpOwpAQCAtNTk5NSw2ICs2MTE1LDggQEAKIAlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJd3JpdGVsKG5wLT5zYXZlZF9jb25maWdfc3BhY2VbaV0sIGJhc2UraSpzaXplb2YodTMyKSk7CiAKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIE5WX01TSV9QUklWX09GRlNFVCwgTlZfTVNJX1BSSVZfVkFMVUUpOworCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcmMgPSBudl9vcGVuKGRldik7CkBAIC02MDY4LDExNSArNjE5MCwxMTUgQEAKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQMDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzExKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjYpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI4KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMxKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2KSwKQEAgLTYxODQsMTUgKzYzMDYsMTUgQEAKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXswLH0sCiB9OwpAQCAtNjIyMCw3ICs2MzQyLDcgQEAKIG1vZHVsZV9wYXJhbShtYXhfaW50ZXJydXB0X3dvcmssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgImZvcmNlZGV0aCBtYXhpbXVtIGV2ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKIG1vZHVsZV9wYXJhbShvcHRpbWl6YXRpb25fbW9kZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0aW1pemF0aW9uX21vZGUsICJJbiB0aHJvdWdocHV0IG1vZGUgKDApLCBldmVyeSB0eCAmIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4gSW4gQ1BVIG1vZGUgKDEpLCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiBJbiBkeW5hbWljIG1vZGUgKDIpLCB0aGUgbW9kZSB0b2dnbGVzIGJldHdlZW4gdGhyb3VnaHB1dCBhbmQgQ1BVIG1vZGUgYmFzZWQgb24gbmV0d29yayBsb2FkLiIpOwogbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7CiBtb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggY2U5MDBlNS4uYjAzN2NlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJLyogZG9uZSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJKCpmZXAtPm9wcy0+bmFwaV9lbmFibGVfcngpKGRldik7CiAJfQogCXJldHVybiByZWNlaXZlZDsKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQkJCS8qIE5PVEU6IGl0IGlzIHBvc3NpYmxlIGZvciBGQ0NzIGluIE5BUEkgbW9kZSAgICAqLwogCQkJCS8qIHRvIHN1Ym1pdCBhIHNwdXJpb3VzIGludGVycnVwdCB3aGlsZSBpbiBwb2xsICAqLwogCQkJCWlmIChuYXBpX29rKQotCQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZmZXAtPm5hcGkpOworCQkJCQlfX25hcGlfc2NoZWR1bGUoJmZlcC0+bmFwaSk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwNzlhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJTSBidXMgaW1wbGVtZW50YXRpb24KKyAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSU0gcmVncworICoKKyAqIEF1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBnaWFuZmFyX21paS5jIGFuZCB1Y2NfZ2V0aF9taWkuYyAoTGkgWWFuZywgS2ltIFBoaWxsaXBzKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91Y2MuaD4KKworI2luY2x1ZGUgImdpYW5mYXIuaCIKKyNpbmNsdWRlICJmc2xfcHFfbWRpby5oIgorCisvKgorICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAorICogb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisgKiBnZW5lcmljIG1kaW8gYnVzICh0aWVkIHRvIGEgc2luZ2xlIGludGVyZmFjZSksIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzCisgKiBkb25lIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKKyAqIHRoZSBUQkkgd2hpY2ggY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUyBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvCisgKiB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IKKyAqIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZXhhbXBsZS4KKyAqLworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAorCQlpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byB3cml0ZSAqLworCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKKworCS8qIFdyaXRlIG91dCB0aGUgdmFsdWUgd2Ugd2FudCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCisJd2hpbGUgKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCisgKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZIG9wZXJhdGlvbgorICogZG9uZSBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsCisgKiB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGdlbmVyaWMgbWRpbyBidXMKKyAqIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKKyAqIHRoZSBUQkkgd2hpY2gsIGluIHR1cm4sIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMKKyAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKKyAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgorICovCitpbnQgZnNsX3BxX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywKKwkJaW50IG1paV9pZCwgaW50IHJlZ251bSkKK3sKKwl1MTYgdmFsdWU7CisKKwkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHJlYWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7CisKKwkvKiBDbGVhciBtaWltY29tLCBhbmQgdGhlbiBpbml0aWF0ZSBhIHJlYWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgMCk7CisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIE1JSV9SRUFEX0NPTU1BTkQpOworCisJLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCAqLworCXdoaWxlIChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSAmIChNSUlNSU5EX05PVFZBTElEIHwgTUlJTUlORF9CVVNZKSkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBHcmFiIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZnJvbSBtaWltc3RhdCAqLworCXZhbHVlID0gaW5fYmUzMigmcmVncy0+bWlpbXN0YXQpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAorICogb24gdGhlIGJ1cywgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgcmV0dXJuaW5nLgorICovCitpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKworCS8qIFdyaXRlIHRvIHRoZSBsb2NhbCBNSUkgcmVncyAqLworCXJldHVybihmc2xfcHFfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAorICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LgorICovCitpbnQgZnNsX3BxX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKworCS8qIFJlYWQgdGhlIGxvY2FsIE1JSSByZWdzICovCisJcmV0dXJuKGZzbF9wcV9sb2NhbF9tZGlvX3JlYWQocmVncywgbWlpX2lkLCByZWdudW0pKTsKK30KKworLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCWludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCS8qIFJlc2V0IHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUKTsKKworCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX0lOSVRfVkFMVUUpOworCisJLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KKwl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCisJCWNwdV9yZWxheCgpOworCisJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwlpZiAodGltZW91dCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLAorCQkJCWJ1cy0+bmFtZSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEFsbG9jYXRlIGFuIGFycmF5IHdoaWNoIHByb3ZpZGVzIGlycSAjcyBmb3IgZWFjaCBQSFkgb24gdGhlIGdpdmVuIGJ1cyAqLworc3RhdGljIGludCAqY3JlYXRlX2lycV9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgKmlycXM7CisJaW50IGk7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7CisKKwlpcnFzID0ga2NhbGxvYyhQSFlfTUFYX0FERFIsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaXJxcykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWlycXNbaV0gPSBQSFlfUE9MTDsKKworCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7CisJCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CisJCWNvbnN0IHUzMiAqaWQ7CisKKwkJaWYgKGlycSA9PSBOT19JUlEpCisJCQljb250aW51ZTsKKworCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOworCisJCWlmICghaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoKmlkIDwgUEhZX01BWF9BRERSICYmICppZCA+PSAwKQorCQkJaXJxc1sqaWRdID0gaXJxOworCQllbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgorCQkJCQkiJWQgaXMgbm90IGEgdmFsaWQgUEhZIGFkZHJlc3NcbiIsCisJCQkJCW5wLT5mdWxsX25hbWUsICppZCk7CisJfQorCisJcmV0dXJuIGlycXM7Cit9CisKK3ZvaWQgZnNsX3BxX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwljb25zdCB1MzIgKmFkZHI7CisJdTY0IHRhZGRyID0gT0ZfQkFEX0FERFI7CisKKwlhZGRyID0gb2ZfZ2V0X2FkZHJlc3MobnAsIDAsIE5VTEwsIE5VTEwpOworCWlmIChhZGRyKQorCQl0YWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCBhZGRyKTsKKworCXNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCVsbHgiLCBucC0+bmFtZSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0YWRkcik7Cit9CisKKy8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX2ZpbmRfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IFBIWV9NQVhfQUREUjsgaSA+IDA7IGktLSkgeworCQl1MzIgcGh5X2lkOworCisJCWlmIChnZXRfcGh5X2lkKG5ld19idXMsIGksICZwaHlfaWQpKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChwaHlfaWQgPT0gMHhmZmZmZmZmZikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpOworfQorCisKKyNpZmRlZiBDT05GSUdfR0lBTkZBUgorc3RhdGljIHUzMiBfX2lvbWVtICpnZXRfZ2Zhcl90YmlwYShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncykKK3sKKwlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICplbmV0X3JlZ3M7CisKKwkvKgorCSAqIFRoaXMgaXMgbWlsZGx5IGV2aWwsIGJ1dCBzbyBpcyBvdXIgaGFyZHdhcmUgZm9yIGRvaW5nIHRoaXMuCisJICogQWxzbywgd2UgaGF2ZSB0byBjYXN0IGJhY2sgdG8gc3RydWN0IGdmYXIgYmVjYXVzZSBvZgorCSAqIGRlZmluaXRpb24gd2VpcmRuZXNzIGRvbmUgaW4gZ2lhbmZhci5oLgorCSAqLworCWVuZXRfcmVncyA9IChzdHJ1Y3QgZ2ZhciBfX2lvbWVtICopCisJCSgoY2hhciBfX2lvbWVtICopcmVncyAtIG9mZnNldG9mKHN0cnVjdCBnZmFyLCBnZmFyX21paV9yZWdzKSk7CisKKwlyZXR1cm4gJmVuZXRfcmVncy0+dGJpcGE7Cit9CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX1VDQ19HRVRICitzdGF0aWMgaW50IGdldF91Y2NfaWRfZm9yX3JhbmdlKHU2NCBzdGFydCwgdTY0IGVuZCwgdTMyICp1Y2NfaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJ1Y2NfZ2V0aCIpIHsKKwkJc3RydWN0IHJlc291cmNlIHRlbXByZXM7CisKKwkJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnRlbXByZXMpOworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJLyogaWYgb3VyIG1kaW8gcmVncyBmYWxsIHdpdGhpbiB0aGlzIFVDQyByZWdzIHJhbmdlICovCisJCWlmICgoc3RhcnQgPj0gdGVtcHJlcy5zdGFydCkgJiYgKGVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKKwkJCS8qIEZpbmQgdGhlIGlkIG9mIHRoZSBVQ0MgKi8KKwkJCWNvbnN0IHUzMiAqaWQ7CisKKwkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOworCQkJaWYgKCFpZCkgeworCQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQkJaWYgKCFpZCkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCSp1Y2NfaWQgPSAqaWQ7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKKworc3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGJpOworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzOworCXUzMiBfX2lvbWVtICp0YmlwYTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKKwlpbnQgdGJpYWRkciA9IC0xOworCXU2NCBhZGRyLCBzaXplOworCWludCBlcnIgPSAwOworCisJbmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSBuZXdfYnVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld19idXMtPm5hbWUgPSAiRnJlZXNjYWxlIFBvd2VyUVVJQ0MgTUlJIEJ1cyIsCisJbmV3X2J1cy0+cmVhZCA9ICZmc2xfcHFfbWRpb19yZWFkLAorCW5ld19idXMtPndyaXRlID0gJmZzbF9wcV9tZGlvX3dyaXRlLAorCW5ld19idXMtPnJlc2V0ID0gJmZzbF9wcV9tZGlvX3Jlc2V0LAorCWZzbF9wcV9tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7CisKKwkvKiBTZXQgdGhlIFBIWSBiYXNlIGFkZHJlc3MgKi8KKwlhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIG9mX2dldF9hZGRyZXNzKG5wLCAwLCAmc2l6ZSwgTlVMTCkpOworCXJlZ3MgPSBpb3JlbWFwKGFkZHIsIHNpemUpOworCisJaWYgKE5VTEwgPT0gcmVncykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CisKKwluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7CisKKwluZXdfYnVzLT5pcnEgPSBjcmVhdGVfaXJxX21hcChucCk7CisKKwlpZiAoTlVMTCA9PSBuZXdfYnVzLT5pcnEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXBfcmVnczsKKwl9CisKKwluZXdfYnVzLT5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG5ld19idXMpOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLXRiaSIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImdpYW5mYXIiKSkgeworI2lmZGVmIENPTkZJR19HSUFORkFSCisJCXRiaXBhID0gZ2V0X2dmYXJfdGJpcGEocmVncyk7CisjZWxzZQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisjZW5kaWYKKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLHVjYy1tZGlvIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAidWNjX2dldGhfcGh5IikpIHsKKyNpZmRlZiBDT05GSUdfVUNDX0dFVEgKKwkJdTMyIGlkOworCisJCXRiaXBhID0gJnJlZ3MtPnV0YmlwYXI7CisKKwkJaWYgKChlcnIgPSBnZXRfdWNjX2lkX2Zvcl9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgJmlkKSkpCisJCQlnb3RvIGVycl9mcmVlX2lycXM7CisKKwkJdWNjX3NldF9xZV9tdXhfbWlpX21uZyhpZCAtIDEpOworI2Vsc2UKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHRiaSkgeworCQlpZiAoIXN0cm5jbXAodGJpLT50eXBlLCAidGJpLXBoeSIsIDgpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHRiaSkgeworCQljb25zdCB1MzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkodGJpLCAicmVnIiwgTlVMTCk7CisKKwkJaWYgKHByb3ApCisJCQl0YmlhZGRyID0gKnByb3A7CisJfQorCisJaWYgKHRiaWFkZHIgPT0gLTEpIHsKKwkJb3V0X2JlMzIodGJpcGEsIDApOworCisJCXRiaWFkZHIgPSBmc2xfcHFfbWRpb19maW5kX2ZyZWUobmV3X2J1cyk7CisJfQorCisJLyoKKwkgKiBXZSBkZWZpbmUgVEJJUEEgYXQgMCB0byBiZSBpbGxlZ2FsLCBvcHRpbmcgdG8gZmFpbCBmb3IgYm9hcmRzIHRoYXQKKwkgKiBoYXZlIFBIWXMgYXQgMS0zMSwgcmF0aGVyIHRoYW4gY2hhbmdlIHRiaXBhIGFuZCByZXNjYW4uCisJICovCisJaWYgKHRiaWFkZHIgPT0gMCkgeworCQllcnIgPSAtRUJVU1k7CisKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCW91dF9iZTMyKHRiaXBhLCB0YmlhZGRyKTsKKworCS8qCisJICogVGhlIFRCSVBIWS1vbmx5IGJ1c2VzIHdpbGwgZmluZCBQSFlzIGF0IGV2ZXJ5IGFkZHJlc3MsCisJICogc28gd2UgbWFzayB0aGVtIGFsbCBidXQgdGhlIFRCSQorCSAqLworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikpCisJCW5ld19idXMtPnBoeV9tYXNrID0gfigxIDw8IHRiaWFkZHIpOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKKwkJCQluZXdfYnVzLT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnFzOgorCWtmcmVlKG5ld19idXMtPmlycSk7CitlcnJfdW5tYXBfcmVnczoKKwlpb3VubWFwKHJlZ3MpOworZXJyX2ZyZWVfYnVzOgorCWtmcmVlKG5ld19idXMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopYnVzLT5wcml2KTsKKwlidXMtPnByaXYgPSBOVUxMOworCW1kaW9idXNfZnJlZShidXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9wcV9tZGlvX21hdGNoW10gPSB7CisJeworCQkudHlwZSA9ICJtZGlvIiwKKwkJLmNvbXBhdGlibGUgPSAidWNjX2dldGhfcGh5IiwKKwl9LAorCXsKKwkJLnR5cGUgPSAibWRpbyIsCisJCS5jb21wYXRpYmxlID0gImdpYW5mYXIiLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNsX3BxX21kaW9fZHJpdmVyID0geworCS5uYW1lID0gImZzbC1wcV9tZGlvIiwKKwkucHJvYmUgPSBmc2xfcHFfbWRpb19wcm9iZSwKKwkucmVtb3ZlID0gZnNsX3BxX21kaW9fcmVtb3ZlLAorCS5tYXRjaF90YWJsZSA9IGZzbF9wcV9tZGlvX21hdGNoLAorfTsKKworaW50IF9faW5pdCBmc2xfcHFfbWRpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsX3BxX21kaW9fZHJpdmVyKTsKK30KKwordm9pZCBmc2xfcHFfbWRpb19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZzbF9wcV9tZGlvX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGxfc3luYyhmc2xfcHFfbWRpb19pbml0KTsKK21vZHVsZV9leGl0KGZzbF9wcV9tZGlvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaCBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkYWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEZyZWVzY2FsZSBQb3dlclFVSUNDIE1ESU8gRHJpdmVyIC0tIE1JSSBNYW5hZ2VtZW50IEJ1cyBJbXBsZW1lbnRhdGlvbgorICogRHJpdmVyIGZvciB0aGUgTURJTyBidXMgY29udHJvbGxlciBvbiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBwcm9jZXNzb3JzCisgKgorICogQXV0aG9yOiBBbmR5IEZsZW1pbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpZm5kZWYgX19GU0xfUFFfTURJT19ICisjZGVmaW5lIF9fRlNMX1BRX01ESU9fSAorCisjZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJTUlORF9OT1RWQUxJRCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNSUlNQ0ZHX0lOSVRfVkFMVUUJMHgwMDAwMDAwNworI2RlZmluZSBNSUlNQ0ZHX1JFU0VUICAgICAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgTUlJX1JFQURfQ09NTUFORCAgICAgICAweDAwMDAwMDAxCisKK3N0cnVjdCBmc2xfcHFfbWRpbyB7CisJdTMyIG1paW1jZmc7CQkvKiBNSUkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHJlZyAqLworCXUzMiBtaWltY29tOwkJLyogTUlJIG1hbmFnZW1lbnQgY29tbWFuZCByZWcgKi8KKwl1MzIgbWlpbWFkZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGFkZHJlc3MgcmVnICovCisJdTMyIG1paW1jb247CQkvKiBNSUkgbWFuYWdlbWVudCBjb250cm9sIHJlZyAqLworCXUzMiBtaWltc3RhdDsJCS8qIE1JSSBtYW5hZ2VtZW50IHN0YXR1cyByZWcgKi8KKwl1MzIgbWlpbWluZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGluZGljYXRpb24gcmVnICovCisJdTggcmVzZXJ2ZWRbMjhdOwkvKiBTcGFjZSBob2xkZXIgKi8KKwl1MzIgdXRiaXBhcjsJCS8qIFRCSSBwaHkgYWRkcmVzcyByZWcgKG9ubHkgb24gVUNDKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworaW50IGZzbF9wcV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CitpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKK2ludCBmc2xfcHFfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKKwkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKK2ludCBmc2xfcHFfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK2ludCBfX2luaXQgZnNsX3BxX21kaW9faW5pdCh2b2lkKTsKK3ZvaWQgZnNsX3BxX21kaW9fZXhpdCh2b2lkKTsKK3ZvaWQgZnNsX3BxX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7CisjZW5kaWYgLyogRlNMX1BRX01ESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDk4MzFiM2YuLjZhMzg4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTkzLDcgKzkzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSAiZ2lhbmZhci5oIgotI2luY2x1ZGUgImdpYW5mYXJfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI2RlZmluZSBUWF9USU1FT1VUICAgICAgKDEqSFopCiAjdW5kZWYgQlJJRUZfR0ZBUl9FUlJPUlMKQEAgLTE0MCwxMyArMTQwLDI2IEBACiB2b2lkIGdmYXJfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX2NsZWFyX2V4YWN0X21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfbWFjX2Zvcl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sIHU4ICphZGRyKTsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOworc3RhdGljIGludCBnZmFyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogCiBNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGdmYXJfZW5ldF9vcGVuLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdCwKKwkubmRvX3N0b3AgPSBnZmFyX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGdmYXJfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpLAorCS5uZG9fdHhfdGltZW91dCA9IGdmYXJfdGltZW91dCwKKwkubmRvX2RvX2lvY3RsID0gZ2Zhcl9pb2N0bCwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogLyogUmV0dXJucyAxIGlmIGluY29taW5nIGZyYW1lcyB1c2UgYW4gRkNCICovCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX3VzZXNfZmNiKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xNjYsNiArMTc5LDkgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi0+bm9kZTsKIAljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07CisJY29uc3QgdTMyICpzdGFzaDsKKwljb25zdCB1MzIgKnN0YXNoX2xlbjsKKwljb25zdCB1MzIgKnN0YXNoX2lkeDsKIAogCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE5NSw2ICsyMTEsMjYgQEAKIAkJfQogCX0KIAorCXN0YXNoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYmQtc3Rhc2giLCBOVUxMKTsKKworCWlmKHN0YXNoKSB7CisJCXByaXYtPmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HOworCQlwcml2LT5iZF9zdGFzaF9lbiA9IDE7CisJfQorCisJc3Rhc2hfbGVuID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicngtc3Rhc2gtbGVuIiwgTlVMTCk7CisKKwlpZiAoc3Rhc2hfbGVuKQorCQlwcml2LT5yeF9zdGFzaF9zaXplID0gKnN0YXNoX2xlbjsKKworCXN0YXNoX2lkeCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4LXN0YXNoLWlkeCIsIE5VTEwpOworCisJaWYgKHN0YXNoX2lkeCkKKwkJcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSAqc3Rhc2hfaWR4OworCisJaWYgKHN0YXNoX2xlbiB8fCBzdGFzaF9pZHgpCisJCXByaXYtPmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElORzsKKwogCW1hY19hZGRyID0gb2ZfZ2V0X21hY19hZGRyZXNzKG5wKTsKIAlpZiAobWFjX2FkZHIpCiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkciwgTUFDX0FERFJfTEVOKTsKQEAgLTI1NSw3ICsyOTEsNyBAQAogCQlvZl9ub2RlX3B1dChwaHkpOwogCQlvZl9ub2RlX3B1dChtZGlvKTsKIAotCQlnZmFyX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOworCQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CiAJCXNucHJpbnRmKHByaXYtPnBoeV9idXNfaWQsIHNpemVvZihwcml2LT5waHlfYnVzX2lkKSwgIiVzOiUwMngiLAogCQkJCWJ1c19uYW1lLCAqaWQpOwogCX0KQEAgLTMyOSw4ICszNjUsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcml2LT5kZXYgPSBkZXY7CisJcHJpdi0+bmRldiA9IGRldjsKKwlwcml2LT5vZmRldiA9IG9mZGV2OwogCXByaXYtPm5vZGUgPSBvZmRldi0+bm9kZTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZvZmRldi0+ZGV2KTsKIAogCWVyciA9IGdmYXJfb2ZfaW5pdChkZXYpOwogCkBAIC0zNjksMjEgKzQwNywxMiBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwotCWRldi0+b3BlbiA9IGdmYXJfZW5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IGdmYXJfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBnZmFyX3BvbGwsIEdGQVJfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IGdmYXJfY2xvc2U7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJmdmYXJfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmdmYXJfZXRodG9vbF9vcHM7Ci0JZGV2LT5kb19pb2N0bCA9IGdmYXJfaW9jdGw7CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7CiAJCXByaXYtPnJ4X2NzdW1fZW5hYmxlID0gMTsKQEAgLTM5MywxMSArNDIyLDggQEAKIAogCXByaXYtPnZsZ3JwID0gTlVMTDsKIAotCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4pIHsKLQkJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyOwotCisJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JfQogCiAJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCkgewogCQlwcml2LT5leHRlbmRlZF9oYXNoID0gMTsKQEAgLTQyNSw3ICs0NTEsNyBAQAogCQlwcml2LT5oYXNoX3dpZHRoID0gODsKIAogCQlwcml2LT5oYXNoX3JlZ3NbMF0gPSAmcHJpdi0+cmVncy0+Z2FkZHIwOwotICAgICAgICAgICAgICAgIHByaXYtPmhhc2hfcmVnc1sxXSA9ICZwcml2LT5yZWdzLT5nYWRkcjE7CisJCXByaXYtPmhhc2hfcmVnc1sxXSA9ICZwcml2LT5yZWdzLT5nYWRkcjE7CiAJCXByaXYtPmhhc2hfcmVnc1syXSA9ICZwcml2LT5yZWdzLT5nYWRkcjI7CiAJCXByaXYtPmhhc2hfcmVnc1szXSA9ICZwcml2LT5yZWdzLT5nYWRkcjM7CiAJCXByaXYtPmhhc2hfcmVnc1s0XSA9ICZwcml2LT5yZWdzLT5nYWRkcjQ7CkBAIC00NjYsNiArNDkyLDkgQEAKIAkJZ290byByZWdpc3Rlcl9mYWlsOwogCX0KIAorCWRldmljZV9pbml0X3dha2V1cCgmZGV2LT5kZXYsCisJCXByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKTsKKwogCS8qIGZpbGwgb3V0IElSUSBudW1iZXIgYW5kIG5hbWUgZmllbGRzICovCiAJbGVuX2Rldm5hbWUgPSBzdHJsZW4oZGV2LT5uYW1lKTsKIAlzdHJuY3B5KCZwcml2LT5pbnRfbmFtZV90eFswXSwgZGV2LT5uYW1lLCBsZW5fZGV2bmFtZSk7CkBAIC01MTEsNyArNTQwLDcgQEAKIAlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOwogCiAJaW91bm1hcChwcml2LT5yZWdzKTsKLQlmcmVlX25ldGRldihwcml2LT5kZXYpOworCWZyZWVfbmV0ZGV2KHByaXYtPm5kZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsNyArNTQ5LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCkBAIC01NjksNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCWludCBtYWdpY19wYWNrZXQgPSBwcml2LT53b2xfZW4gJiYKQEAgLTgzOCwxMiArODY3LDEyIEBACiAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0LCBkZXYpOwogCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRSZWNlaXZlLCBkZXYpOwogCX0gZWxzZSB7Ci0gCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKKwkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CiAJfQogCiAJZnJlZV9za2JfcmVzb3VyY2VzKHByaXYpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+ZGV2LAorCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCB0eGJkOCkqcHJpdi0+dHhfcmluZ19zaXplCiAJCQkrIHNpemVvZihzdHJ1Y3QgcnhiZDgpKnByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCXByaXYtPnR4X2JkX2Jhc2UsCkBAIC04NjUsMTIgKzg5NCwxMiBAQAogCQlpZiAoIXByaXYtPnR4X3NrYnVmZltpXSkKIAkJCWNvbnRpbnVlOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAorCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAogCQkJCXR4YmRwLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOwogCQl0eGJkcC0+bHN0YXR1cyA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCBza2Jfc2hpbmZvKHByaXYtPnR4X3NrYnVmZltpXSktPm5yX2ZyYWdzOyBqKyspIHsKIAkJCXR4YmRwKys7Ci0JCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCisJCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKIAkJCQkJdHhiZHAtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCX0KIAkJdHhiZHArKzsKQEAgLTg4Nyw3ICs5MTYsNyBAQAogCWlmKHByaXYtPnJ4X3NrYnVmZiAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX3NpemU7IGkrKykgewogCQkJaWYgKHByaXYtPnJ4X3NrYnVmZltpXSkgewotCQkJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCByeGJkcC0+YnVmUHRyLAorCQkJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHJ4YmRwLT5idWZQdHIsCiAJCQkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwKIAkJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKQEAgLTk1Myw3ICs5ODIsNyBAQAogCWdmYXJfd3JpdGUoJnJlZ3MtPmltYXNrLCBJTUFTS19JTklUX0NMRUFSKTsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwotCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5kZXYsCisJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mIChzdHJ1Y3QgdHhiZDgpICogcHJpdi0+dHhfcmluZ19zaXplICsKIAkJCXNpemVvZiAoc3RydWN0IHJ4YmQ4KSAqIHByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCSZhZGRyLCBHRlBfS0VSTkVMKTsKQEAgLTExNjUsNyArMTE5NCw3IEBACiByeF9za2JfZmFpbDoKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiB0eF9za2JfZmFpbDoKLQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsCisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHR4YmQ4KSpwcml2LT50eF9yaW5nX3NpemUKIAkJCSsgc2l6ZW9mKHN0cnVjdCByeGJkOCkqcHJpdi0+cnhfcmluZ19zaXplLAogCQkJcHJpdi0+dHhfYmRfYmFzZSwKQEAgLTExODMsNiArMTIxMiw4IEBACiAKIAluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9yZWN5Y2xlKTsKKwogCS8qIEluaXRpYWxpemUgYSBidW5jaCBvZiByZWdpc3RlcnMgKi8KIAlpbml0X3JlZ2lzdGVycyhkZXYpOwogCkBAIC0xMjAzLDEzICsxMjM0LDE0IEBACiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZkZXYtPmRldiwgcHJpdi0+d29sX2VuKTsKKwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgdHhmY2IgKmZjYiA9IChzdHJ1Y3QgdHhmY2IgKilza2JfcHVzaCAoc2tiLCBHTUFDX0ZDQl9MRU4pOwotCisJc3RydWN0IHR4ZmNiICpmY2IgPSAoc3RydWN0IHR4ZmNiICopc2tiX3B1c2goc2tiLCBHTUFDX0ZDQl9MRU4pOwogCWNhY2hlYWJsZV9tZW16ZXJvKGZjYiwgR01BQ19GQ0JfTEVOKTsKIAogCXJldHVybiBmY2I7CkBAIC0xMjc4LDYgKzEzMTAsMjIgQEAKIAogCWJhc2UgPSBwcml2LT50eF9iZF9iYXNlOwogCisJLyogbWFrZSBzcGFjZSBmb3IgYWRkaXRpb25hbCBoZWFkZXIgd2hlbiBmY2IgaXMgbmVlZGVkICovCisJaWYgKCgoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgfHwKKwkJCShwcml2LT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpKSAmJgorCQkJKHNrYl9oZWFkcm9vbShza2IpIDwgR01BQ19GQ0JfTEVOKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldzsKKworCQlza2JfbmV3ID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBHTUFDX0ZDQl9MRU4pOworCQlpZiAoIXNrYl9uZXcpIHsKKwkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CisJCX0KKwkJa2ZyZWVfc2tiKHNrYik7CisJCXNrYiA9IHNrYl9uZXc7CisJfQorCiAJLyogdG90YWwgbnVtYmVyIG9mIGZyYWdtZW50cyBpbiB0aGUgU0tCICovCiAJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCkBAIC0xMzE0LDcgKzEzNjIsNyBAQAogCQkJaWYgKGkgPT0gbnJfZnJhZ3MgLSAxKQogCQkJCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9MQVNUIHwgVFhCRF9JTlRFUlJVUFQpOwogCi0JCQlidWZhZGRyID0gZG1hX21hcF9wYWdlKCZkZXYtPmRldiwKKwkJCWJ1ZmFkZHIgPSBkbWFfbWFwX3BhZ2UoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSwKIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCwKIAkJCQkJbGVuZ3RoLApAQCAtMTM0Niw3ICsxMzk0LDcgQEAKIAogCS8qIHNldHVwIHRoZSBUeEJEIGxlbmd0aCBhbmQgYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBCRCAqLwogCXByaXYtPnR4X3NrYnVmZltwcml2LT5za2JfY3VydHhdID0gc2tiOwotCXR4YmRwX3N0YXJ0LT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwl0eGJkcF9zdGFydC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOwogCiAJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0NSQyB8IFRYQkRfUkVBRFkpIHwgc2tiX2hlYWRsZW4oc2tiKTsKQEAgLTEzODksNyArMTQzNyw3IEBACiAJLyogVW5sb2NrIHByaXYgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFN0b3BzIHRoZSBrZXJuZWwgcXVldWUsIGFuZCBoYWx0cyB0aGUgY29udHJvbGxlciAqLwpAQCAtMTM5OSw2ICsxNDQ3LDcgQEAKIAogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnJ4X3JlY3ljbGUpOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnJlc2V0X3Rhc2spOwogCXN0b3BfZ2ZhcihkZXYpOwogCkBAIC0xNTMxLDcgKzE1ODAsNyBAQAogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGdmYXJfcHJpdmF0ZSwKIAkJCXJlc2V0X3Rhc2spOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgewogCQlzdG9wX2dmYXIoZGV2KTsKQEAgLTE1NzgsNyArMTYyNyw3IEBACiAJCQkJKGxzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSykpCiAJCQlicmVhazsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPmRldiwKKwkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQliZHAtPmJ1ZlB0ciwKIAkJCQliZHAtPmxlbmd0aCwKIAkJCQlETUFfVE9fREVWSUNFKTsKQEAgLTE1ODcsNyArMTYzNiw3IEBACiAJCWJkcCA9IG5leHRfdHhiZChiZHAsIGJhc2UsIHR4X3Jpbmdfc2l6ZSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGZyYWdzOyBpKyspIHsKLQkJCWRtYV91bm1hcF9wYWdlKCZkZXYtPmRldiwKKwkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LAogCQkJCQliZHAtPmJ1ZlB0ciwKIAkJCQkJYmRwLT5sZW5ndGgsCiAJCQkJCURNQV9UT19ERVZJQ0UpOwpAQCAtMTU5NSw3ICsxNjQ0LDE3IEBACiAJCQliZHAgPSBuZXh0X3R4YmQoYmRwLCBiYXNlLCB0eF9yaW5nX3NpemUpOwogCQl9CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJLyoKKwkJICogSWYgdGhlcmUncyByb29tIGluIHRoZSBxdWV1ZSAobGltaXQgaXQgdG8gcnhfYnVmZmVyX3NpemUpCisJCSAqIHdlIGFkZCB0aGlzIHNrYiBiYWNrIGludG8gdGhlIHBvb2wsIGlmIGl0J3MgdGhlIHJpZ2h0IHNpemUKKwkJICovCisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9yZWN5Y2xlKSA8IHByaXYtPnJ4X3Jpbmdfc2l6ZSAmJgorCQkJCXNrYl9yZWN5Y2xlX2NoZWNrKHNrYiwgcHJpdi0+cnhfYnVmZmVyX3NpemUgKworCQkJCQlSWEJVRl9BTElHTk1FTlQpKQorCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKKwkJZWxzZQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwogCQlwcml2LT50eF9za2J1ZmZbc2tiX2RpcnR5dHhdID0gTlVMTDsKIAogCQlza2JfZGlydHl0eCA9IChza2JfZGlydHl0eCArIDEpICYKQEAgLTE2MjYsOSArMTY4NSw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmltYXNrLCBJTUFTS19SVFhfRElTQUJMRUQpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBDbGVhciBJRVZFTlQsIHNvIGludGVycnVwdHMgYXJlbid0IGNhbGxlZCBhZ2FpbgpAQCAtMTY1NCw3ICsxNzEzLDcgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbHN0YXR1czsKIAotCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCisJYmRwLT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgc2tiLT5kYXRhLAogCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAlsc3RhdHVzID0gQkRfTEZMQUcoUlhCRF9FTVBUWSB8IFJYQkRfSU5URVJSVVBUKTsKQEAgLTE2NzQsOCArMTczMywxMCBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCi0JLyogV2UgaGF2ZSB0byBhbGxvY2F0ZSB0aGUgc2tiLCBzbyBrZWVwIHRyeWluZyB0aWxsIHdlIHN1Y2NlZWQgKi8KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQpOworCXNrYiA9IF9fc2tiX2RlcXVldWUoJnByaXYtPnJ4X3JlY3ljbGUpOworCWlmICghc2tiKQorCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwKKwkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSArIFJYQlVGX0FMSUdOTUVOVCk7CiAKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5VTEw7CkBAIC0xODEyLDcgKzE4NzMsNyBAQAogCiAJCXNrYiA9IHByaXYtPnJ4X3NrYnVmZltwcml2LT5za2JfY3VycnhdOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCBiZHAtPmJ1ZlB0ciwKKwkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgYmRwLT5idWZQdHIsCiAJCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJLyogV2UgZHJvcCB0aGUgZnJhbWUgaWYgd2UgZmFpbGVkIHRvIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciAqLwpAQCAtMTgyMyw3ICsxODg0LDcgQEAKIAkJCWlmICh1bmxpa2VseSghbmV3c2tiKSkKIAkJCQluZXdza2IgPSBza2I7CiAJCQllbHNlIGlmIChza2IpCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZwcml2LT5yeF9yZWN5Y2xlLCBza2IpOwogCQl9IGVsc2UgewogCQkJLyogSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwogCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0xODM1LDYgKzE4OTYsOCBAQAogCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKKwkJCQlpZiAoaW5faXJxKCkgfHwgaXJxc19kaXNhYmxlZCgpKQorCQkJCQlwcmludGsoIkludGVycnVwdCBwcm9ibGVtIVxuIik7CiAJCQkJZ2Zhcl9wcm9jZXNzX2ZyYW1lKGRldiwgc2tiLCBhbW91bnRfcHVsbCk7CiAKIAkJCX0gZWxzZSB7CkBAIC0xODcwLDcgKzE5MzMsNyBAQAogc3RhdGljIGludCBnZmFyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGdmYXJfcHJpdmF0ZSwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlpbnQgdHhfY2xlYW5lZCA9IDA7CiAJaW50IHJ4X2NsZWFuZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xODkxLDcgKzE5NTQsNyBAQAogCQlyZXR1cm4gYnVkZ2V0OwogCiAJaWYgKHJ4X2NsZWFuZWQgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJLyogQ2xlYXIgdGhlIGhhbHQgYml0IGluIFJTVEFUICovCiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJzdGF0LCBSU1RBVF9DTEVBUl9SSEFMVCk7CkBAIC0yMzA4LDIzICsyMzcxLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdmYXJfaW5pdCh2b2lkKQogewotCWludCBlcnIgPSBnZmFyX21kaW9faW5pdCgpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2Zhcl9kcml2ZXIpOwotCi0JaWYgKGVycikKLQkJZ2Zhcl9tZGlvX2V4aXQoKTsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2Zhcl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2Zhcl9leGl0KHZvaWQpCiB7CiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKLQlnZmFyX21kaW9fZXhpdCgpOwogfQogCiBtb2R1bGVfaW5pdChnZmFyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGVhYTg2ODkuLmRkNDk5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KLSNpbmNsdWRlICJnaWFuZmFyX21paS5oIgogCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBiZSBoYW5kbGVkIGluIG9uZSBjYWxsIG9mIGdmYXJfcG9sbCAqLwogI2RlZmluZSBHRkFSX0RFVl9XRUlHSFQgNjQKQEAgLTEyNiw5ICsxMjUsMTIgQEAKICNkZWZpbmUgREVGQVVMVF9SWF9DT0FMRVNDRSAwCiAjZGVmaW5lIERFRkFVTFRfUlhDT1VOVAkwCiAKLSNkZWZpbmUgTUlJTUNGR19JTklUX1ZBTFVFCTB4MDAwMDAwMDcKLSNkZWZpbmUgTUlJTUNGR19SRVNFVCAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdGQVJfU1VQUE9SVEVEIChTVVBQT1JURURfMTBiYXNlVF9IYWxmIFwKKwkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIFwKKwkJfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiBcCisJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgXAorCQl8IFNVUFBPUlRFRF9BdXRvbmVnIFwKKwkJfCBTVVBQT1JURURfTUlJKQogCiAvKiBUQkkgcmVnaXN0ZXIgYWRkcmVzc2VzICovCiAjZGVmaW5lIE1JSV9UQklDT04JCTB4MTEKQEAgLTczNiw3ICs3MzgsOCBAQAogCXNwaW5sb2NrX3Qgcnhsb2NrOwogCiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJc3RydWN0IG9mX2RldmljZSAqb2ZkZXY7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAKIAkvKiBza2IgYXJyYXkgYW5kIGluZGV4ICovCkBAIC03NTYsNiArNzU5LDggQEAKIAl1bnNpZ25lZCBpbnQgcnhfc3Rhc2hfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcnhfc3Rhc2hfaW5kZXg7CiAKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3JlY3ljbGU7CisKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CiAKIAkvKiBVbnByb3RlY3RlZCBmaWVsZHMgKi8KQEAgLTgyNiw4ICs4MzEsNyBAQAogZXh0ZXJuIHZvaWQgZ2Zhcl9waHlfdGVzdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQlpbnQgZW5hYmxlLCB1MzIgcmVnbnVtLCB1MzIgcmVhZCk7CiB2b2lkIGdmYXJfaW5pdF9zeXNmcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCi0JCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSk7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pOworCitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGdmYXJfZXRodG9vbF9vcHM7CiAKICNlbmRpZiAvKiBfX0dJQU5GQVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCA1OWIzYjVkLi5kYmYwNmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtNjAwLDYgKzYwMCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YmZsb2NrLCBmbGFncyk7CiAJcHJpdi0+d29sX2VuID0gd29sLT53b2xvcHRzICYgV0FLRV9NQUdJQyA/IDEgOiAwOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmZGV2LT5kZXYsIHByaXYtPndvbF9lbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YmZsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDlhNDI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKLSAqCi0gKiBHaWFuZmFyIEV0aGVybmV0IERyaXZlciAtLSBNSUlNIGJ1cyBpbXBsZW1lbnRhdGlvbgotICogUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJTSByZWdzCi0gKgotICogQXV0aG9yOiBBbmR5IEZsZW1pbmcKLSAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiZ2lhbmZhci5oIgotI2luY2x1ZGUgImdpYW5mYXJfbWlpLmgiCi0KLS8qCi0gKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCi0gKiBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKLSAqIGdlbmVyaWMgbWRpbyBidXMgKHRpZWQgdG8gYSBzaW5nbGUgaW50ZXJmYWNlKSwgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMKLSAqIGRvbmUgYmVmb3JlIHJldHVybmluZy4gVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQotICogdGhlIFRCSSB3aGljaCBjb250cm9sIGludGVyZmFjZXMgbGlrZSBvbmNoaXAgU0VSREVTIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8KLSAqIHRoZSBsb2NhbCBtZGlvIHBpbnMsIHdoaWNoIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvcgotICogY29udHJvbGxpbmcgdGhlIGV4dGVybmFsIFBIWXMsIGZvciBleGFtcGxlLgotICovCi1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAotCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0JLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byB3cml0ZSAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1hZGQsIChtaWlfaWQgPDwgOCkgfCByZWdudW0pOwotCi0JLyogV3JpdGUgb3V0IHRoZSB2YWx1ZSB3ZSB3YW50ICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNvbiwgdmFsdWUpOwotCi0JLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCAqLwotCXdoaWxlIChnZmFyX3JlYWQoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKQotCQljcHVfcmVsYXgoKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCi0gKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZIG9wZXJhdGlvbgotICogZG9uZSBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsCi0gKiB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGdlbmVyaWMgbWRpbyBidXMKLSAqIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKLSAqIHRoZSBUQkkgd2hpY2gsIGludHVybiwgY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUwotICogYW5kIGFyZSBhbHdheXMgdGllZCB0byB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZQotICogc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZWcuCi0gKi8KLWludCBnZmFyX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwgaW50IHJlZ251bSkKLXsKLQl1MTYgdmFsdWU7Ci0KLQkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHJlYWQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKLQotCS8qIENsZWFyIG1paW1jb20sIGFuZCB0aGVuIGluaXRpYXRlIGEgcmVhZCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jb20sIDApOwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jb20sIE1JSV9SRUFEX0NPTU1BTkQpOwotCi0JLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCAqLwotCXdoaWxlIChnZmFyX3JlYWQoJnJlZ3MtPm1paW1pbmQpICYgKE1JSU1JTkRfTk9UVkFMSUQgfCBNSUlNSU5EX0JVU1kpKQotCQljcHVfcmVsYXgoKTsKLQotCS8qIEdyYWIgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBmcm9tIG1paW1zdGF0ICovCi0JdmFsdWUgPSBnZmFyX3JlYWQoJnJlZ3MtPm1paW1zdGF0KTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotLyogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAotICogb24gdGhlIGJ1cywgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgcmV0dXJuaW5nLgotICogQWxsIFBIWSBjb25maWd1cmF0aW9uIGlzIGRvbmUgdGhyb3VnaCB0aGUgVFNFQzEgTUlJTSByZWdzICovCi1pbnQgZ2Zhcl9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0KLQkvKiBXcml0ZSB0byB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KLQlyZXR1cm4oZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHJlZ3MsIG1paV9pZCwgcmVnbnVtLCB2YWx1ZSkpOwotfQotCi0vKiBSZWFkIHRoZSBidXMgZm9yIFBIWSBhdCBhZGRyIG1paV9pZCwgcmVnaXN0ZXIgcmVnbnVtLCBhbmQKLSAqIHJldHVybiB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkKLSAqIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgVFNFQzEgTUlJTSByZWdzICovCi1pbnQgZ2Zhcl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSkKLXsKLQlzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0KLQkvKiBSZWFkIHRoZSBsb2NhbCBNSUkgcmVncyAqLwotCXJldHVybihnZmFyX2xvY2FsX21kaW9fcmVhZChyZWdzLCBtaWlfaWQsIHJlZ251bSkpOwotfQotCi0vKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKLQotCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCS8qIFJlc2V0IHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfUkVTRVQpOwotCi0JLyogU2V0dXAgdGhlIE1JSSBNZ210IGNsb2NrIHNwZWVkICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNmZywgTUlJTUNGR19JTklUX1ZBTFVFKTsKLQotCS8qIFdhaXQgdW50aWwgdGhlIGJ1cyBpcyBmcmVlICovCi0Jd2hpbGUgKChnZmFyX3JlYWQoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJgotCQkJLS10aW1lb3V0KQotCQljcHVfcmVsYXgoKTsKLQotCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JaWYodGltZW91dCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRoZSBNSUkgQnVzIGlzIHN0dWNrIVxuIiwKLQkJCQlidXMtPm5hbWUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBBbGxvY2F0ZSBhbiBhcnJheSB3aGljaCBwcm92aWRlcyBpcnEgI3MgZm9yIGVhY2ggUEhZIG9uIHRoZSBnaXZlbiBidXMgKi8KLXN0YXRpYyBpbnQgKmNyZWF0ZV9pcnFfbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JaW50ICppcnFzOwotCWludCBpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMOwotCi0JaXJxcyA9IGtjYWxsb2MoUEhZX01BWF9BRERSLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWlycXMpCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQotCQlpcnFzW2ldID0gUEhZX1BPTEw7Ci0KLQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewotCQlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2hpbGQsIDApOwotCQljb25zdCB1MzIgKmlkOwotCi0JCWlmIChpcnEgPT0gTk9fSVJRKQotCQkJY29udGludWU7Ci0KLQkJaWQgPSBvZl9nZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCBOVUxMKTsKLQotCQlpZiAoIWlkKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCppZCA8IFBIWV9NQVhfQUREUiAmJiAqaWQgPj0gMCkKLQkJCWlycXNbKmlkXSA9IGlycTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKLQkJCQkJIiVkIGlzIG5vdCBhIHZhbGlkIFBIWSBhZGRyZXNzXG4iLAotCQkJCQlucC0+ZnVsbF9uYW1lLCAqaWQpOwotCX0KLQotCXJldHVybiBpcnFzOwotfQotCi0KLXZvaWQgZ2Zhcl9tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JY29uc3QgdTMyICpyZWc7Ci0KLQlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKLQotCXNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCV4IiwgbnAtPm5hbWUsIHJlZyA/ICpyZWcgOiAwKTsKLX0KLQotLyogU2NhbiB0aGUgYnVzIGluIHJldmVyc2UsIGxvb2tpbmcgZm9yIGFuIGVtcHR5IHNwb3QgKi8KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX2ZpbmRfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IFBIWV9NQVhfQUREUjsgaSA+IDA7IGktLSkgewotCQl1MzIgcGh5X2lkOwotCi0JCWlmIChnZXRfcGh5X2lkKG5ld19idXMsIGksICZwaHlfaWQpKQotCQkJcmV0dXJuIC0xOwotCi0JCWlmIChwaHlfaWQgPT0gMHhmZmZmZmZmZikKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBpOwotfQotCi1zdGF0aWMgaW50IGdmYXJfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKLQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3M7Ci0Jc3RydWN0IGdmYXIgX19pb21lbSAqZW5ldF9yZWdzOwotCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwotCWludCBlcnIgPSAwOwotCXU2NCBhZGRyLCBzaXplOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRiaTsKLQlpbnQgdGJpYWRkciA9IC0xOwotCi0JbmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKLQlpZiAoTlVMTCA9PSBuZXdfYnVzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldmljZV9pbml0X3dha2V1cCgmb2ZkZXYtPmRldiwgMSk7Ci0KLQluZXdfYnVzLT5uYW1lID0gIkdpYW5mYXIgTUlJIEJ1cyIsCi0JbmV3X2J1cy0+cmVhZCA9ICZnZmFyX21kaW9fcmVhZCwKLQluZXdfYnVzLT53cml0ZSA9ICZnZmFyX21kaW9fd3JpdGUsCi0JbmV3X2J1cy0+cmVzZXQgPSAmZ2Zhcl9tZGlvX3Jlc2V0LAotCWdmYXJfbWRpb19idXNfbmFtZShuZXdfYnVzLT5pZCwgbnApOwotCi0JLyogU2V0IHRoZSBQSFkgYmFzZSBhZGRyZXNzICovCi0JYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCBvZl9nZXRfYWRkcmVzcyhucCwgMCwgJnNpemUsIE5VTEwpKTsKLQlyZWdzID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLQotCWlmIChOVUxMID09IHJlZ3MpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9idXM7Ci0JfQotCi0JbmV3X2J1cy0+cHJpdiA9ICh2b2lkIF9fZm9yY2UgKilyZWdzOwotCi0JbmV3X2J1cy0+aXJxID0gY3JlYXRlX2lycV9tYXAobnApOwotCi0JaWYgKG5ld19idXMtPmlycSA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VubWFwX3JlZ3M7Ci0JfQotCi0JbmV3X2J1cy0+cGFyZW50ID0gJm9mZGV2LT5kZXY7Ci0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBuZXdfYnVzKTsKLQotCS8qCi0JICogVGhpcyBpcyBtaWxkbHkgZXZpbCwgYnV0IHNvIGlzIG91ciBoYXJkd2FyZSBmb3IgZG9pbmcgdGhpcy4KLQkgKiBBbHNvLCB3ZSBoYXZlIHRvIGNhc3QgYmFjayB0byBzdHJ1Y3QgZ2Zhcl9taWkgYmVjYXVzZSBvZgotCSAqIGRlZmluaXRpb24gd2VpcmRuZXNzIGRvbmUgaW4gZ2lhbmZhci5oLgotCSAqLwotCWVuZXRfcmVncyA9IChzdHJ1Y3QgZ2ZhciBfX2lvbWVtICopCi0JCSgoY2hhciAqKXJlZ3MgLSBvZmZzZXRvZihzdHJ1Y3QgZ2ZhciwgZ2Zhcl9taWlfcmVncykpOwotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgdGJpKSB7Ci0JCWlmICghc3RybmNtcCh0YmktPnR5cGUsICJ0YmktcGh5IiwgOCkpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAodGJpKSB7Ci0JCWNvbnN0IHUzMiAqcHJvcCA9IG9mX2dldF9wcm9wZXJ0eSh0YmksICJyZWciLCBOVUxMKTsKLQotCQlpZiAocHJvcCkKLQkJCXRiaWFkZHIgPSAqcHJvcDsKLQl9Ci0KLQlpZiAodGJpYWRkciA9PSAtMSkgewotCQlnZmFyX3dyaXRlKCZlbmV0X3JlZ3MtPnRiaXBhLCAwKTsKLQotCQl0YmlhZGRyID0gZ2Zhcl9tZGlvX2ZpbmRfZnJlZShuZXdfYnVzKTsKLQl9Ci0KLQkvKgotCSAqIFdlIGRlZmluZSBUQklQQSBhdCAwIHRvIGJlIGlsbGVnYWwsIG9wdGluZyB0byBmYWlsIGZvciBib2FyZHMgdGhhdAotCSAqIGhhdmUgUEhZcyBhdCAxLTMxLCByYXRoZXIgdGhhbiBjaGFuZ2UgdGJpcGEgYW5kIHJlc2Nhbi4KLQkgKi8KLQlpZiAodGJpYWRkciA9PSAwKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQotCQlnb3RvIGVycl9mcmVlX2lycXM7Ci0JfQotCi0JZ2Zhcl93cml0ZSgmZW5ldF9yZWdzLT50YmlwYSwgdGJpYWRkcik7Ci0KLQkvKgotCSAqIFRoZSBUQklQSFktb25seSBidXNlcyB3aWxsIGZpbmQgUEhZcyBhdCBldmVyeSBhZGRyZXNzLAotCSAqIHNvIHdlIG1hc2sgdGhlbSBhbGwgYnV0IHRoZSBUQkkKLQkgKi8KLQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpKQotCQluZXdfYnVzLT5waHlfbWFzayA9IH4oMSA8PCB0YmlhZGRyKTsKLQotCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7Ci0KLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKLQkJCQluZXdfYnVzLT5uYW1lKTsKLQkJZ290byBlcnJfZnJlZV9pcnFzOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZnJlZV9pcnFzOgotCWtmcmVlKG5ld19idXMtPmlycSk7Ci1lcnJfdW5tYXBfcmVnczoKLQlpb3VubWFwKHJlZ3MpOwotZXJyX2ZyZWVfYnVzOgotCW1kaW9idXNfZnJlZShuZXdfYnVzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCBnZmFyX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQotewotCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOwotCi0JaW91bm1hcCgodm9pZCBfX2lvbWVtICopYnVzLT5wcml2KTsKLQlidXMtPnByaXYgPSBOVUxMOwotCWtmcmVlKGJ1cy0+aXJxKTsKLQltZGlvYnVzX2ZyZWUoYnVzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBnZmFyX21kaW9fbWF0Y2hbXSA9Ci17Ci0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIiwKLQl9LAotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIiwKLQl9LAotCXsKLQkJLnR5cGUgPSAibWRpbyIsCi0JCS5jb21wYXRpYmxlID0gImdpYW5mYXIiLAotCX0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBnaWFuZmFyX21kaW9fZHJpdmVyID0gewotCS5uYW1lID0gImZzbC1naWFuZmFyX21kaW8iLAotCS5tYXRjaF90YWJsZSA9IGdmYXJfbWRpb19tYXRjaCwKLQotCS5wcm9iZSA9IGdmYXJfbWRpb19wcm9iZSwKLQkucmVtb3ZlID0gZ2Zhcl9tZGlvX3JlbW92ZSwKLX07Ci0KLWludCBfX2luaXQgZ2Zhcl9tZGlvX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnaWFuZmFyX21kaW9fZHJpdmVyKTsKLX0KLQotdm9pZCBnZmFyX21kaW9fZXhpdCh2b2lkKQotewotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnaWFuZmFyX21kaW9fZHJpdmVyKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmggYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWMyNDJjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaAotICoKLSAqIEdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIC0tIE1JSSBNYW5hZ2VtZW50IEJ1cyBJbXBsZW1lbnRhdGlvbgotICogRHJpdmVyIGZvciB0aGUgTURJTyBidXMgY29udHJvbGxlciBpbiB0aGUgR2lhbmZhciByZWdpc3RlciBzcGFjZQotICoKLSAqIEF1dGhvcjogQW5keSBGbGVtaW5nCi0gKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2lmbmRlZiBfX0dJQU5GQVJfTUlJX0gKLSNkZWZpbmUgX19HSUFORkFSX01JSV9ICi0KLXN0cnVjdCBnZmFyX3ByaXZhdGU7IC8qIGZvcndhcmQgcmVmICovCi0KLSNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNSUlNSU5EX05PVFZBTElEICAgICAgICAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgTUlJX1JFQURfQ09NTUFORCAgICAgICAweDAwMDAwMDAxCi0KLSNkZWZpbmUgR0ZBUl9TVVBQT1JURUQgKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgXAotCQl8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgXAotCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIFwKLQkJfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCBcCi0JCXwgU1VQUE9SVEVEX0F1dG9uZWcgXAotCQl8IFNVUFBPUlRFRF9NSUkpCi0KLXN0cnVjdCBnZmFyX21paSB7Ci0JdTMyCW1paW1jZmc7CS8qIDB4LjUyMCAtIE1JSSBNYW5hZ2VtZW50IENvbmZpZyBSZWdpc3RlciAqLwotCXUzMgltaWltY29tOwkvKiAweC41MjQgLSBNSUkgTWFuYWdlbWVudCBDb21tYW5kIFJlZ2lzdGVyICovCi0JdTMyCW1paW1hZGQ7CS8qIDB4LjUyOCAtIE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbWNvbjsJLyogMHguNTJjIC0gTUlJIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlciAqLwotCXUzMgltaWltc3RhdDsJLyogMHguNTMwIC0gTUlJIE1hbmFnZW1lbnQgU3RhdHVzIFJlZ2lzdGVyICovCi0JdTMyCW1paW1pbmQ7CS8qIDB4LjUzNCAtIE1JSSBNYW5hZ2VtZW50IEluZGljYXRvciBSZWdpc3RlciAqLwotfTsKLQotaW50IGdmYXJfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pOwotaW50IGdmYXJfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IGdmYXJfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKLQkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBnZmFyX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7Ci1zdHJ1Y3QgbWlpX2J1cyAqZ2Zhcl9nZXRfbWlpYnVzKGNvbnN0IHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpOwotaW50IF9faW5pdCBnZmFyX21kaW9faW5pdCh2b2lkKTsKLXZvaWQgZ2Zhcl9tZGlvX2V4aXQodm9pZCk7Ci0KLXZvaWQgZ2Zhcl9tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwotI2VuZGlmIC8qIEdJQU5GQVJfUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwppbmRleCA3ODJjMjAxLi5kZDI2ZGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCkBAIC01Myw2ICs1Myw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkcpKQorCQlyZXR1cm4gY291bnQ7CisKIAkvKiBGaW5kIG91dCB0aGUgbmV3IHNldHRpbmcgKi8KIAlpZiAoIXN0cm5jbXAoIm9uIiwgYnVmLCBjb3VudCAtIDEpIHx8ICFzdHJuY21wKCIxIiwgYnVmLCBjb3VudCAtIDEpKQogCQluZXdfc2V0dGluZyA9IDE7CkBAIC04MSw3ICs4NCw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihiZF9zdGFzaCwgMDY0NCwgZ2Zhcl9zaG93X2JkX3N0YXNoLCBnZmFyX3NldF9iZF9zdGFzaCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmRfc3Rhc2gsIDA2NDQsIGdmYXJfc2hvd19iZF9zdGFzaCwgZ2Zhcl9zZXRfYmRfc3Rhc2gpOwogCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0xMDAsNiArMTAzLDkgQEAKIAl1MzIgdGVtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCEocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19CVUZfU1RBU0hJTkcpKQorCQlyZXR1cm4gY291bnQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAJaWYgKGxlbmd0aCA+IHByaXYtPnJ4X2J1ZmZlcl9zaXplKQogCQlnb3RvIG91dDsKQEAgLTEzMCw4ICsxMzYsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIocnhfc3Rhc2hfc2l6ZSwgMDY0NCwgZ2Zhcl9zaG93X3J4X3N0YXNoX3NpemUsCi0JICAgIGdmYXJfc2V0X3J4X3N0YXNoX3NpemUpOworc3RhdGljIERFVklDRV9BVFRSKHJ4X3N0YXNoX3NpemUsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9zaXplLAorCQkgICBnZmFyX3NldF9yeF9zdGFzaF9zaXplKTsKIAogLyogU3Rhc2hpbmcgd2lsbCBvbmx5IGJlIGVuYWJsZWQgd2hlbiByeF9zdGFzaF9zaXplICE9IDAgKi8KIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19yeF9zdGFzaF9pbmRleChzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNTIsNiArMTU4LDkgQEAKIAl1MzIgdGVtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCEocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19CVUZfU1RBU0hJTkcpKQorCQlyZXR1cm4gY291bnQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAJaWYgKGluZGV4ID4gcHJpdi0+cnhfc3Rhc2hfc2l6ZSkKIAkJZ290byBvdXQ7CkBAIC0xNzIsOCArMTgxLDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKHJ4X3N0YXNoX2luZGV4LCAwNjQ0LCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgsCi0JICAgIGdmYXJfc2V0X3J4X3N0YXNoX2luZGV4KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyeF9zdGFzaF9pbmRleCwgMDY0NCwgZ2Zhcl9zaG93X3J4X3N0YXNoX2luZGV4LAorCQkgICBnZmFyX3NldF9yeF9zdGFzaF9pbmRleCk7CiAKIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19maWZvX3RocmVzaG9sZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjEwLDggKzIxOSw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihmaWZvX3RocmVzaG9sZCwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fdGhyZXNob2xkLAotCSAgICBnZmFyX3NldF9maWZvX3RocmVzaG9sZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlmb190aHJlc2hvbGQsIDA2NDQsIGdmYXJfc2hvd19maWZvX3RocmVzaG9sZCwKKwkJICAgZ2Zhcl9zZXRfZmlmb190aHJlc2hvbGQpOwogCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb19zdGFydmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI0Nyw3ICsyNTYsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoZmlmb19zdGFydmUsIDA2NDQsIGdmYXJfc2hvd19maWZvX3N0YXJ2ZSwgZ2Zhcl9zZXRfZmlmb19zdGFydmUpOworc3RhdGljIERFVklDRV9BVFRSKGZpZm9fc3RhcnZlLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb19zdGFydmUsCisJCSAgIGdmYXJfc2V0X2ZpZm9fc3RhcnZlKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTI4NCw4ICsyOTQsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoZmlmb19zdGFydmVfb2ZmLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb19zdGFydmVfb2ZmLAotCSAgICBnZmFyX3NldF9maWZvX3N0YXJ2ZV9vZmYpOworc3RhdGljIERFVklDRV9BVFRSKGZpZm9fc3RhcnZlX29mZiwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlX29mZiwKKwkJICAgZ2Zhcl9zZXRfZmlmb19zdGFydmVfb2ZmKTsKIAogdm9pZCBnZmFyX2luaXRfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI5MywxMiArMzAzLDkgQEAKIAlpbnQgcmM7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IHZhbHVlcyAqLwotCXByaXYtPnJ4X3N0YXNoX3NpemUgPSBERUZBVUxUX1NUQVNIX0xFTkdUSDsKLQlwcml2LT5yeF9zdGFzaF9pbmRleCA9IERFRkFVTFRfU1RBU0hfSU5ERVg7CiAJcHJpdi0+Zmlmb190aHJlc2hvbGQgPSBERUZBVUxUX0ZJRk9fVFhfVEhSOwogCXByaXYtPmZpZm9fc3RhcnZlID0gREVGQVVMVF9GSUZPX1RYX1NUQVJWRTsKIAlwcml2LT5maWZvX3N0YXJ2ZV9vZmYgPSBERUZBVUxUX0ZJRk9fVFhfU1RBUlZFX09GRjsKLQlwcml2LT5iZF9zdGFzaF9lbiA9IERFRkFVTFRfQkRfU1RBU0g7CiAKIAkvKiBDcmVhdGUgb3VyIHN5c2ZzIGZpbGVzICovCiAJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfYmRfc3Rhc2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IDdlOGIzYzUuLjMxMGVlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIEtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIgogS0VSTl9JTkZPICIgICBTb21lIG1vZGlmaWNhdGlvbnMgYnkgRXJpYyBrYXN0ZW4gPGthc3RlbkBuc2NsLm1zdS5lZHU+XG4iCiBLRVJOX0lORk8gIiAgIEZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBieSBLZWl0aCBVbmRlcndvb2QgPGtlaXRodUBwYXJsLmNsZW1zb24uZWR1PlxuIjsKQEAgLTEyNDQsNyArMTI0NCw3IEBACiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5zYWRkciAmIDB4ZmZmZik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyID4+IDE2KTsgXAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+ZGFkZHIgJiAweGZmZmYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCBfX2NvbnN0YW50X2h0b25zKElQUFJPVE9fVURQKSk7IFwKKyAgICBjc3VtX2FkZChzdW0sIGNwdV90b19iZTE2KElQUFJPVE9fVURQKSk7IFwKICAgICBjc3VtX2FkZChzdW0sICh1aCktPmxlbik7IFwKIH0gd2hpbGUgKDApCiAKQEAgLTEyNTUsNyArMTI1NSw3IEBACiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5zYWRkciAmIDB4ZmZmZik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyID4+IDE2KTsgXAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+ZGFkZHIgJiAweGZmZmYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCBfX2NvbnN0YW50X2h0b25zKElQUFJPVE9fVENQKSk7IFwKKyAgICBjc3VtX2FkZChzdW0sIGNwdV90b19iZTE2KElQUFJPVE9fVENQKSk7IFwKICAgICBjc3VtX2FkZChzdW0sIGh0b25zKGxlbikpOyBcCiB9IHdoaWxlICgwKQogI2VuZGlmCkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCSAgICAvKiB0YWNrIG9uIGNoZWNrc3VtIHRhZyAqLwogCSAgICB1MzIgdGFndmFsID0gMDsKIAkgICAgc3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKLQkgICAgaWYgKGVoLT5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApKSB7CisJICAgIGlmIChlaC0+aF9wcm90byA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpIHsKIAkJc3RydWN0IGlwaGRyICppaCA9IChzdHJ1Y3QgaXBoZHIgKikoKGNoYXIgKillaCArIEVUSF9ITEVOKTsKIAkJaWYgKGloLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgewogCQkgICAgc3RydWN0IHVkcGhkciAqdWgKQEAgLTE2MDUsNyArMTYwNSw3IEBACiAJCQkJICovCiAJCQkJaWYgKG50b2hzKGloLT50b3RfbGVuKSA+PSA0Nil7CiAJCQkJCS8qIGRvbid0IHdvcnJ5IGFib3V0IGZyYWdzICovCi0JCQkJCWlmICghKGloLT5mcmFnX29mZiAmIF9fY29uc3RhbnRfaHRvbnMoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKKwkJCQkJaWYgKCEoaWgtPmZyYWdfb2ZmICYgY3B1X3RvX2JlMTYoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKIAkJCQkJCXUzMiBpbnYgPSAqKHUzMiAqKSAmYnVmX2FkZHJbZGF0YV9zaXplIC0gMTZdOwogCQkJCQkJdTMyICpwID0gKHUzMiAqKSAmYnVmX2FkZHJbZGF0YV9zaXplIC0gMjBdOwogCQkJCQkJcmVnaXN0ZXIgdTMyIGNyYywgcF9yLCBwX3IxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKaW5kZXggMmQ0MDg5OC4uMTU1MTYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCkBAIC0zMjIsMjMgKzMyMiwyNSBAQAogCS5yZWJ1aWxkCT0gc3BfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNwX29wZW5fZGV2LAorCS5uZG9fc3RvcAkJPSBzcF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc3BfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IHNwX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIHNwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogRmluaXNoIHNldHRpbmcgdXAgdGhlIERFVklDRSBpbmZvLiAqLwotCWRldi0+bXR1CQk9IFNJWFBfTVRVOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gc3BfeG1pdDsKLQlkZXYtPm9wZW4JCT0gc3Bfb3Blbl9kZXY7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZzcF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKLQlkZXYtPnN0b3AJCT0gc3BfY2xvc2U7Ci0KLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IHNwX3NldF9tYWNfYWRkcmVzczsKKwlkZXYtPm10dQkJPSBTSVhQX01UVTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IEFYMjVfTUFYX0hFQURFUl9MRU47CiAJZGV2LT5oZWFkZXJfb3BzIAk9ICZzcF9oZWFkZXJfb3BzOwogCiAJZGV2LT5hZGRyX2xlbgkJPSBBWDI1X0FERFJfTEVOOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfQVgyNTsKIAlkZXYtPnR4X3F1ZXVlX2xlbgk9IDEwOwotCWRldi0+dHhfdGltZW91dAkJPSBOVUxMOwogCiAJLyogT25seSBhY3RpdmF0ZWQgaW4gQVguMjUgbW9kZSAqLwogCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOwpAQCAtNzg4LDkgKzc5MCw5IEBACiAKIC8qIEluaXRpYWxpemUgNnBhY2sgY29udHJvbCBkZXZpY2UgLS0gcmVnaXN0ZXIgNnBhY2sgbGluZSBkaXNjaXBsaW5lICovCiAKLXN0YXRpYyBjaGFyIG1zZ19iYW5uZXJbXSAgX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCitzdGF0aWMgY29uc3QgY2hhciBtc2dfYmFubmVyW10gIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAogCSJBWC4yNTogNnBhY2sgZHJpdmVyLCAiIFNJWFBBQ0tfVkVSU0lPTiAiXG4iOwotc3RhdGljIGNoYXIgbXNnX3JlZ2ZhaWxbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIgIFwKK3N0YXRpYyBjb25zdCBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSICBcCiAJIjZwYWNrOiBjYW4ndCByZWdpc3RlciBsaW5lIGRpc2NpcGxpbmUgKGVyciA9ICVkKVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgc2l4cGFja19pbml0X2RyaXZlcih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCmluZGV4IDgxYTY1ZTMuLmJiNzhjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKQEAgLTIwMyw3ICsyMDMsNiBAQAogCQl1bnNpZ25lZCBjaGFyIGJ1ZltUWEJVRkZFUl9TSVpFXTsKICAgICAgICAgfSBoZGxjdHg7CiAKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgaW50IHB0dF9rZXllZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOyAgLyogbmV4dCB0cmFuc21pdCBwYWNrZXQgICovCiAKQEAgLTQyMyw3ICs0MjIsNyBAQAogCWJjLT5oZGxjdHguYnVmcHRyID0gYmMtPmhkbGN0eC5idWY7CiAJYmMtPmhkbGN0eC5idWZjbnQgPSB3cCAtIGJjLT5oZGxjdHguYnVmOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQliYy0+c3RhdHMudHhfcGFja2V0cysrOworCWJjLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNTQ3LDcgKzU0Niw3IEBACiAJcGt0bGVuID0gYmMtPmhkbGNyeC5idWZjbnQtMisxOyAvKiBLSVNTIGtsdWRnZSAqLwogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0bGVuKSkpIHsKIAkJcHJpbnRrKCIlczogbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJYmMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJY3AgPSBza2JfcHV0KHNrYiwgcGt0bGVuKTsKQEAgLTU1NSw3ICs1NTQsNyBAQAogCW1lbWNweShjcCwgYmMtPmhkbGNyeC5idWYsIHBrdGxlbiAtIDEpOwogCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCW5ldGlmX3J4KHNrYik7Ci0JYmMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIH0KIAogc3RhdGljIGludCByZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjbnQpCkBAIC04MDIsMTkgKzgwMSw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJheWNvbV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYmF5Y29tX3N0YXRlICpiYyA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiAKLQkgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4gIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotCSAqIGNhcmQgb3BlbiBvciBjbG9zZWQuIAotCSAqLwotCXJldHVybiAmYmMtPnN0YXRzOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgZXBwX3dha2V1cCh2b2lkICpoYW5kbGUpCiB7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKiloYW5kbGU7CkBAIC0xMDY1LDEwICsxMDUxLDEwIEBACiAJCWhpLmRhdGEuY3MucHR0ID0gISEoYmMtPnN0YXQgJiBFUFBfUFRUQklUKTsKIAkJaGkuZGF0YS5jcy5kY2QgPSAhKGJjLT5zdGF0ICYgRVBQX0RDREJJVCk7CiAJCWhpLmRhdGEuY3MucHR0X2tleWVkID0gYmMtPnB0dF9rZXllZDsKLQkJaGkuZGF0YS5jcy50eF9wYWNrZXRzID0gYmMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCWhpLmRhdGEuY3MudHhfZXJyb3JzID0gYmMtPnN0YXRzLnR4X2Vycm9yczsKLQkJaGkuZGF0YS5jcy5yeF9wYWNrZXRzID0gYmMtPnN0YXRzLnJ4X3BhY2tldHM7Ci0JCWhpLmRhdGEuY3MucnhfZXJyb3JzID0gYmMtPnN0YXRzLnJ4X2Vycm9yczsKKwkJaGkuZGF0YS5jcy50eF9wYWNrZXRzID0gZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQloaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGRldi0+c3RhdHMudHhfZXJyb3JzOworCQloaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJCWhpLmRhdGEuY3MucnhfZXJyb3JzID0gZGV2LT5zdGF0cy5yeF9lcnJvcnM7CiAJCWJyZWFrOwkJCiAKIAljYXNlIEhETENEUlZDVExfT0xER0VUU1RBVDoKQEAgLTExMTYsNiArMTEwMiwxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYXljb21fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IGVwcF9vcGVuLAorCS5uZG9fc3RvcAkgICAgID0gZXBwX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJICAgICA9IGJheWNvbV9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQgICAgICA9IGJheWNvbV9zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGJheWNvbV9zZXRfbWFjX2FkZHJlc3MsCit9OworCiAvKgogICogQ2hlY2sgZm9yIGEgbmV0d29yayBhZGFwdG9yIG9mIHRoaXMgdHlwZSwgYW5kIHJldHVybiAnMCcgaWYgb25lIGV4aXN0cy4KICAqIElmIGRldi0+YmFzZV9hZGRyID09IDAsIHByb2JlIGFsbCBsaWtlbHkgbG9jYXRpb25zLgpAQCAtMTE0MywxNyArMTEzNywxMiBAQAogCS8qCiAJICogaW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdAogCSAqLwotCWRldi0+b3BlbiA9IGVwcF9vcGVuOwotCWRldi0+c3RvcCA9IGVwcF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gYmF5Y29tX2lvY3RsOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYmF5Y29tX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0gYmF5Y29tX2dldF9zdGF0czsKIAogCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwogCWJjLT5za2IgPSBOVUxMOwogCQorCWRldi0+bmV0ZGV2X29wcyA9ICZiYXljb21fbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYmF5Y29tX3NldF9tYWNfYWRkcmVzczsKIAkKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVgyNTsgICAgICAgICAgIC8qIEFGX0FYMjUgZGV2aWNlICovCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOICsgQVgyNV9CUFFfSEVBREVSX0xFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCmluZGV4IDQ2ZjhmMzMuLmQ1MDliMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwpAQCAtODcsNyArODcsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvYnBxZXRoZXIuaD4KIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiQVguMjU6IGJwcWV0aGVyIGRyaXZlciB2ZXJzaW9uIDAwNFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorCSJBWC4yNTogYnBxZXRoZXIgZHJpdmVyIHZlcnNpb24gMDA0XG4iOwogCiBzdGF0aWMgY2hhciBiY2FzdF9hZGRyWzZdPXsweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRn07CiAKQEAgLTk2LDggKzk3LDggQEAKIHN0YXRpYyBpbnQgYnBxX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGJwcV9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYnBxX3BhY2tldF90eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9CUFEpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBicHFfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0JQUSksCiAJLmZ1bmMJPSBicHFfcmN2LAogfTsKIApAQCAtMTEwLDcgKzExMSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBicHFfbGlzdDsJLyogbGlzdCBvZiBicHEgZGV2aWNlcyBjaGFpbiAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpldGhkZXY7CS8qIGxpbmsgdG8gZXRoZXJuZXQgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKmF4ZGV2OwkvKiBicHEgZGV2aWNlIChicHEjKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkvKiBzb21lIHN0YXRpc3RpY3MgKi8KIAljaGFyICAgZGVzdF9hZGRyWzZdOwkJLyogZXRoZXIgZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCWNoYXIgICBhY3B0X2FkZHJbNl07CQkvKiBhY2NlcHQgZXRoZXIgZnJhbWVzIGZyb20gdGhpcyBhZGRyZXNzIG9ubHkgKi8KIH07CkBAIC0yMjIsOCArMjIyLDggQEAKIAlza2JfcHVsbChza2IsIDIpOwkvKiBSZW1vdmUgdGhlIGxlbmd0aCBieXRlcyAqLwogCXNrYl90cmltKHNrYiwgbGVuKTsJLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KIAotCWJwcS0+c3RhdHMucnhfcGFja2V0cysrOwotCWJwcS0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCiAJcHRyID0gc2tiX3B1c2goc2tiLCAxKTsKIAkqcHRyID0gMDsKQEAgLTI5Miw3ICsyOTIsNyBAQAogCWJwcSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoKGRldiA9IGJwcV9nZXRfZXRoZXJfZGV2KGRldikpID09IE5VTEwpIHsKLQkJYnBxLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMzAwLDggKzMwMCw4IEBACiAJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGRldik7CiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBFVEhfUF9CUFEsIGJwcS0+ZGVzdF9hZGRyLCBOVUxMLCAwKTsKLQlicHEtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlicHEtPnN0YXRzLnR4X2J5dGVzKz1za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzKz1za2ItPmxlbjsKICAgCiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CkBAIC0zMDksMTYgKzMwOSw2IEBACiB9CiAKIC8qCi0gKglTdGF0aXN0aWNzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYnBxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBicHFkZXYgKmJwcSA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJmJwcS0+c3RhdHM7Ci19Ci0KLS8qCiAgKglTZXQgQVguMjUgY2FsbHNpZ24KICAqLwogc3RhdGljIGludCBicHFfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCkBAIC0zOTYsNiArMzg2LDcgQEAKICAqCVByb2MgZmlsZXN5c3RlbQogICovCiBzdGF0aWMgdm9pZCAqYnBxX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhSQ1UpCiB7CiAJaW50IGkgPSAxOwogCXN0cnVjdCBicHFkZXYgKmJwcWRldjsKQEAgLTQyOCw2ICs0MTksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBicHFfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcyhSQ1UpCiB7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC00NTQsNyArNDQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicHFfc2Vxb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicHFfc2Vxb3BzID0gewogCS5zdGFydCA9IGJwcV9zZXFfc3RhcnQsCiAJLm5leHQgPSBicHFfc2VxX25leHQsCiAJLnN0b3AgPSBicHFfc2VxX3N0b3AsCkBAIC00NzcsMTYgKzQ2OSwxNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicHFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IGJwcV9vcGVuLAorCS5uZG9fc3RvcAkgICAgID0gYnBxX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkgICAgID0gYnBxX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBicHFfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJICAgICA9IGJwcV9pb2N0bCwKK307CiAKIHN0YXRpYyB2b2lkIGJwcV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBicHFfeG1pdDsKLQlkZXYtPm9wZW4JICAgICA9IGJwcV9vcGVuOwotCWRldi0+c3RvcAkgICAgID0gYnBxX2Nsb3NlOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYnBxX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gYnBxX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsCSAgICAgPSBicHFfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmYnBxX25ldGRldl9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yCSAgICAgPSBmcmVlX25ldGRldjsKIAogCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwppbmRleCBlNjcxMDMzLi44ODFiZjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJaW50IGNoaXA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2NjX2luZm8gKmluZm87Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKIAlpbnQgY2hhbm5lbDsKIAlpbnQgY2FyZF9iYXNlLCBzY2NfY21kLCBzY2NfZGF0YTsKIAlpbnQgdG1yX2NudCwgdG1yX2N0cmwsIHRtcl9tb2RlOwpAQCAtMjM5LDcgKzIzOSw2IEBACiBzdGF0aWMgaW50IHNjY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2NjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKIHN0YXRpYyBpbnQgc2NjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzY2NfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzY2Nfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnNhKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHR4X29uKHN0cnVjdCBzY2NfcHJpdiAqcHJpdik7CkBAIC00NDEsNiArNDQwLDEzIEBACiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZheDI1X2RlZmFkZHIsIEFYMjVfQUREUl9MRU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNjY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IHNjY19vcGVuLAorCS5uZG9fc3RvcCA9IHNjY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBzY2Nfc2VuZF9wYWNrZXQsCisJLm5kb19kb19pb2N0bCA9IHNjY19pb2N0bCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2FkYXB0ZXIoaW50IGNhcmRfYmFzZSwgaW50IHR5cGUsIGludCBuKQogewogCWludCBpLCBpcnEsIGNoaXA7CkBAIC01NzYsMTEgKzU4Miw3IEBACiAJCXNwcmludGYoZGV2LT5uYW1lLCAiZG1hc2NjJWkiLCAyICogbiArIGkpOwogCQlkZXYtPmJhc2VfYWRkciA9IGNhcmRfYmFzZTsKIAkJZGV2LT5pcnEgPSBpcnE7Ci0JCWRldi0+b3BlbiA9IHNjY19vcGVuOwotCQlkZXYtPnN0b3AgPSBzY2NfY2xvc2U7Ci0JCWRldi0+ZG9faW9jdGwgPSBzY2NfaW9jdGw7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc2NjX3NlbmRfcGFja2V0OwotCQlkZXYtPmdldF9zdGF0cyA9IHNjY19nZXRfc3RhdHM7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZzY2NfbmV0ZGV2X29wczsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmF4MjVfaGVhZGVyX29wczsKIAkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzY2Nfc2V0X21hY19hZGRyZXNzOwogCX0KQEAgLTk2MSwxNCArOTYzLDYgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNjY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2NjX3ByaXYgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi0KIHN0YXRpYyBpbnQgc2NjX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpzYSkKIHsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgKChzdHJ1Y3Qgc29ja2FkZHIgKikgc2EpLT5zYV9kYXRhLApAQCAtMTIxNiwxNyArMTIxMCwxNyBAQAogCQl9CiAJCWlmIChwcml2LT5yeF9vdmVyKSB7CiAJCQkvKiBXZSBoYWQgYW4gb3ZlcnJ1biAqLwotCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKHByaXYtPnJ4X292ZXIgPT0gMikKLQkJCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQllbHNlCi0JCQkJcHJpdi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQlwcml2LT5yeF9vdmVyID0gMDsKIAkJfSBlbHNlIGlmIChyYyAmIENSQ19FUlIpIHsKIAkJCS8qIENvdW50IGludmFsaWQgQ1JDIG9ubHkgaWYgcGFja2V0IGxlbmd0aCA+PSBtaW5pbXVtICovCiAJCQlpZiAoY2IgPj0gMTUpIHsKLQkJCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChjYiA+PSAxNSkgewpAQCAtMTIzOSw4ICsxMjMzLDggQEAKIAkJCQkJcHJpdi0+cnhfY291bnQrKzsKIAkJCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCXByaXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCXByaXYtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTEyNzUsNyArMTI2OSw3IEBACiAJCXNrYiA9IGRldl9hbGxvY19za2IoY2IgKyAxKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkvKiBEcm9wIHBhY2tldCAqLwotCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCX0gZWxzZSB7CiAJCQkvKiBGaWxsIGJ1ZmZlciAqLwogCQkJZGF0YSA9IHNrYl9wdXQoc2tiLCBjYiArIDEpOwpAQCAtMTI4Myw4ICsxMjc3LDggQEAKIAkJCW1lbWNweSgmZGF0YVsxXSwgcHJpdi0+cnhfYnVmW2ldLCBjYik7CiAJCQlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgcHJpdi0+ZGV2KTsKIAkJCW5ldGlmX3J4KHNrYik7Ci0JCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBjYjsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBjYjsKIAkJfQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmluZ19sb2NrLCBmbGFncyk7CiAJCS8qIE1vdmUgdGFpbCAqLwpAQCAtMTM1MSwxNSArMTM0NSwxNSBAQAogCQkJd3JpdGVfc2NjKHByaXYsIFIxLCBFWFRfSU5UX0VOQUIgfCBXVF9GTl9SRFlGTik7CiAJCWlmIChyZXMpIHsKIAkJCS8qIFVwZGF0ZSBwYWNrZXQgc3RhdGlzdGljcyAqLwotCQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQlwcml2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCS8qIE90aGVyIHVuZGVycnVuIGludGVycnVwdHMgbWF5IGFscmVhZHkgYmUgd2FpdGluZyAqLwogCQkJd3JpdGVfc2NjKHByaXYsIFIwLCBSRVNfRVhUX0lOVCk7CiAJCQl3cml0ZV9zY2MocHJpdiwgUjAsIFJFU19FWFRfSU5UKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFVwZGF0ZSBwYWNrZXQgc3RhdGlzdGljcyAqLwotCQkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gcHJpdi0+dHhfbGVuW2ldOworCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHByaXYtPnR4X2xlbltpXTsKIAkJCS8qIFJlbW92ZSBmcmFtZSBmcm9tIEZJRk8gKi8KIAkJCXByaXYtPnR4X3RhaWwgPSAoaSArIDEpICUgTlVNX1RYX0JVRjsKIAkJCXByaXYtPnR4X2NvdW50LS07CkBAIC0xNDI1LDcgKzE0MTksNyBAQAogCQl3cml0ZV9zY2MocHJpdiwgUjE1LCBEQ0RJRSk7CiAJCXByaXYtPnJyMCA9IHJlYWRfc2NjKHByaXYsIFIwKTsKIAkJaWYgKHByaXYtPnJyMCAmIERDRCkgewotCQkJcHJpdi0+c3RhdHMuY29sbGlzaW9ucysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CiAJCQlyeF9vbihwcml2KTsKIAkJCXByaXYtPnN0YXRlID0gUlhfT047CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKaW5kZXggOGViYTYxYTEuLjYxZGU1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXBrdF9sZW4gPSBzLT5oZGxjcngubGVuIC0gMiArIDE7IC8qIEtJU1Mga2x1ZGdlICovCiAJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpIHsKIAkJcHJpbnRrKCIlczogbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJcy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAljcCA9IHNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCW1lbWNweShjcCwgcy0+aGRsY3J4LmJ1ZmZlciwgcGt0X2xlbiAtIDEpOwogCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCW5ldGlmX3J4KHNrYik7Ci0Jcy0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogfQogCiB2b2lkIGhkbGNkcnZfcmVjZWl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNkcnZfc3RhdGUgKnMpCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJCXMtPmhkbGN0eC5sZW4gPSBwa3RfbGVuKzI7IC8qIHRoZSBhcHBlbmRlZCBDUkMgKi8KIAkJCXMtPmhkbGN0eC50eF9zdGF0ZSA9IDI7CiAJCQlzLT5oZGxjdHguYml0c3RyZWFtID0gMDsKLQkJCXMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKIAkJCWlmICghcy0+aGRsY3R4LmxlbikgewpAQCAtNDI3LDE5ICs0MjcsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpoZGxjZHJ2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzbSA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiAKLQkgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4gIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotCSAqIGNhcmQgb3BlbiBvciBjbG9zZWQuIAotCSAqLwotCXJldHVybiAmc20tPnN0YXRzOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCiAgKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLiBUaGlzIGlzIGNhbGxlZCAoaW4gdGhlIGN1cnJlbnQga2VybmVsKQogICogc29tZXRpbWUgYWZ0ZXIgYm9vdGluZyB3aGVuIHRoZSAnaWZjb25maWcnIHByb2dyYW0gaXMgcnVuLgpAQCAtNTY4LDEwICs1NTUsMTAgQEAKIAkJYmkuZGF0YS5jcy5wdHQgPSBoZGxjZHJ2X3B0dChzKTsKIAkJYmkuZGF0YS5jcy5kY2QgPSBzLT5oZGxjcnguZGNkOwogCQliaS5kYXRhLmNzLnB0dF9rZXllZCA9IHMtPnB0dF9rZXllZDsKLQkJYmkuZGF0YS5jcy50eF9wYWNrZXRzID0gcy0+c3RhdHMudHhfcGFja2V0czsKLQkJYmkuZGF0YS5jcy50eF9lcnJvcnMgPSBzLT5zdGF0cy50eF9lcnJvcnM7Ci0JCWJpLmRhdGEuY3MucnhfcGFja2V0cyA9IHMtPnN0YXRzLnJ4X3BhY2tldHM7Ci0JCWJpLmRhdGEuY3MucnhfZXJyb3JzID0gcy0+c3RhdHMucnhfZXJyb3JzOworCQliaS5kYXRhLmNzLnR4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCWJpLmRhdGEuY3MudHhfZXJyb3JzID0gZGV2LT5zdGF0cy50eF9lcnJvcnM7CisJCWJpLmRhdGEuY3MucnhfcGFja2V0cyA9IGRldi0+c3RhdHMucnhfcGFja2V0czsKKwkJYmkuZGF0YS5jcy5yeF9lcnJvcnMgPSBkZXYtPnN0YXRzLnJ4X2Vycm9yczsKIAkJYnJlYWs7CQkKIAogCWNhc2UgSERMQ0RSVkNUTF9PTERHRVRTVEFUOgpAQCAtNjMwLDYgKzYxNywxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZHJ2X25ldGRldiA9IHsKKwkubmRvX29wZW4JPSBoZGxjZHJ2X29wZW4sCisJLm5kb19zdG9wCT0gaGRsY2Rydl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjZHJ2X3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwJPSBoZGxjZHJ2X2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gaGRsY2Rydl9zZXRfbWFjX2FkZHJlc3MsCit9OworCiAvKgogICogSW5pdGlhbGl6ZSBmaWVsZHMgaW4gaGRsY2RydgogICovCkBAIC02NjksMjEgKzY2NCwxMyBAQAogCXMtPmJpdGJ1Zl9oZGxjLnNocmVnID0gMHg4MDsKICNlbmRpZiAvKiBIRExDRFJWX0RFQlVHICovCiAKLQkvKgotCSAqIGluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3QKLQkgKi8KLQlkZXYtPm9wZW4gPSBoZGxjZHJ2X29wZW47Ci0JZGV2LT5zdG9wID0gaGRsY2Rydl9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gaGRsY2Rydl9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGNkcnZfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBoZGxjZHJ2X2dldF9zdGF0czsKIAogCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwogCiAJcy0+c2tiID0gTlVMTDsKIAkKKwlkZXYtPm5ldGRldl9vcHMgPSAmaGRsY2Rydl9uZXRkZXY7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmF4MjVfaGVhZGVyX29wczsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGhkbGNkcnZfc2V0X21hY19hZGRyZXNzOwogCQogCWRldi0+dHlwZSA9IEFSUEhSRF9BWDI1OyAgICAgICAgICAgLyogQUZfQVgyNSBkZXZpY2UgKi8KIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEFYMjVfTUFYX0hFQURFUl9MRU4gKyBBWDI1X0JQUV9IRUFERVJfTEVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggYmJkYjMxMS4uMDMyYzBkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCkBAIC01OSw4ICs1OSw2IEBACiAJdW5zaWduZWQgY2hhcgkJKnhoZWFkOwkvKiBwb2ludGVyIHRvIG5leHQgYnl0ZSB0byBYTUlUICovCiAJaW50CQkJeGxlZnQ7CS8qIGJ5dGVzIGxlZnQgaW4gWE1JVCBxdWV1ZSAgICAgKi8KIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwotCiAJLyogRGV0YWlsZWQgU0xJUCBzdGF0aXN0aWNzLiAqLwogCWludAkJbXR1OwkJLyogT3VyIG10dSAodG8gc3BvdCBjaGFuZ2VzISkgICAqLwogCWludAkJYnVmZnNpemU7CS8qIE1heCBidWZmZXJzIHNpemVzICAgICAgICAgICAgKi8KQEAgLTI1Myw3ICsyNTEsNyBAQAogCWlmIChheC0+cmJ1ZmZbMF0gPiAweDBmKSB7CiAJCWlmIChheC0+cmJ1ZmZbMF0gJiAweDgwKSB7CiAJCQlpZiAoY2hlY2tfY3JjXzE2KGF4LT5yYnVmZiwgYXgtPnJjb3VudCkgPCAwKSB7Ci0JCQkJYXgtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWF4LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAKIAkJCQlyZXR1cm47CkBAIC0yNjgsNyArMjY2LDcgQEAKIAkJCSpheC0+cmJ1ZmYgJj0gfjB4ODA7CiAJCX0gZWxzZSBpZiAoYXgtPnJidWZmWzBdICYgMHgyMCkgIHsKIAkJCWlmIChjaGVja19jcmNfZmxleChheC0+cmJ1ZmYsIGF4LT5yY291bnQpIDwgMCkgewotCQkJCWF4LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlheC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTI5NSw3ICsyOTMsNyBAQAogCWlmICgoc2tiID0gZGV2X2FsbG9jX3NrYihjb3VudCkpID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJta2lzczogJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkgICAgICAgYXgtPmRldi0+bmFtZSk7Ci0JCWF4LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWF4LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMwMyw4ICszMDEsOCBAQAogCW1lbWNweShza2JfcHV0KHNrYixjb3VudCksIGF4LT5yYnVmZiwgY291bnQpOwogCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBheC0+ZGV2KTsKIAluZXRpZl9yeChza2IpOwotCWF4LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JYXgtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OworCWF4LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlheC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKIAlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogfQogCkBAIC0zNDQsNyArMzQyLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCWF4LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQlheC0+ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQlzZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CkBAIC00MDYsNyArNDA0LDcgQEAKIAkJCW1lbWNweShheC0+eGJ1ZmYsIGF4LT54aGVhZCwgYXgtPnhsZWZ0KTsKIAkJfSBlbHNlICB7CiAJCQlheC0+eGxlZnQgPSAwOwotCQkJYXgtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9CiAJfQogCkBAIC00MTcsNyArNDE1LDcgQEAKIAkJCW1lbWNweShheC0+cmJ1ZmYsIG9yYnVmZiwgYXgtPnJjb3VudCk7CiAJCX0gZWxzZSAgewogCQkJYXgtPnJjb3VudCA9IDA7Ci0JCQlheC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCXNldF9iaXQoQVhGX0VSUk9SLCAmYXgtPmZsYWdzKTsKIAkJfQogCX0KQEAgLTQ0NCw3ICs0NDIsNyBAQAogCWlmIChsZW4gPiBheC0+bXR1KSB7CQkvKiBTaWdoLCBzaG91bGRuJ3Qgb2NjdXIgQlVUIC4uLiAqLwogCQlsZW4gPSBheC0+bXR1OwogCQlwcmludGsoS0VSTl9FUlIgIm1raXNzOiAlczogdHJ1bmNhdGluZyBvdmVyc2l6ZWQgdHJhbnNtaXQgcGFja2V0IVxuIiwgYXgtPmRldi0+bmFtZSk7Ci0JCWF4LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCQlyZXR1cm47CiAJfQpAQCAtNTE4LDggKzUxNiw4IEBACiAKIAlzZXRfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZheC0+dHR5LT5mbGFncyk7CiAJYWN0dWFsID0gYXgtPnR0eS0+b3BzLT53cml0ZShheC0+dHR5LCBheC0+eGJ1ZmYsIGNvdW50KTsKLQlheC0+c3RhdHMudHhfcGFja2V0cysrOwotCWF4LT5zdGF0cy50eF9ieXRlcyArPSBhY3R1YWw7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBhY3R1YWw7CiAKIAlheC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJYXgtPnhsZWZ0ID0gY291bnQgLSBhY3R1YWw7CkBAIC02NjQsMzIgKzY2MiwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF4X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBta2lzcyAqYXggPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZheC0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBheF9oZWFkZXJfb3BzID0gewogCS5jcmVhdGUgICAgPSBheF9oZWFkZXIsCiAJLnJlYnVpbGQgICA9IGF4X3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICAgICAgID0gYXhfb3Blbl9kZXYsCisJLm5kb19zdG9wICAgICAgICAgICAgPSBheF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJICAgICA9IGF4X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBheF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCBheF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbmlzaCBzZXR0aW5nIHVwIHRoZSBERVZJQ0UgaW5mby4gKi8KIAlkZXYtPm10dSAgICAgICAgICAgICA9IEFYX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGF4X3htaXQ7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgPSBheF9vcGVuX2RldjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IGF4X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzCSAgICAgPSBheF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBheF9zZXRfbWFjX2FkZHJlc3M7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwogCWRldi0+YWRkcl9sZW4gICAgICAgID0gMDsKIAlkZXYtPnR5cGUgICAgICAgICAgICA9IEFSUEhSRF9BWDI1OwogCWRldi0+dHhfcXVldWVfbGVuICAgID0gMTA7CiAJZGV2LT5oZWFkZXJfb3BzICAgICAgPSAmYXhfaGVhZGVyX29wczsKKwlkZXYtPm5ldGRldl9vcHMJICAgICA9ICZheF9uZXRkZXZfb3BzOwogCiAKIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKQEAgLTkyOSw3ICs5MjMsNyBAQAogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAhPSBOVUxMICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVhGX0VSUk9SLCAmYXgtPmZsYWdzKSkKLQkJCQlheC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQljcCsrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTk4Miw5ICs5NzYsOSBAQAogCS53cml0ZV93YWtldXAJPSBta2lzc193cml0ZV93YWtldXAKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCiAJIm1raXNzOiBBWC4yNSBNdWx0aWtpc3MsIEhhbnMgQWxiYXMgUEUxQVlYXG4iOwotc3RhdGljIGNoYXIgbXNnX3JlZ2ZhaWxbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIgXAorc3RhdGljIGNvbnN0IGNoYXIgbXNnX3JlZ2ZhaWxbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIgXAogCSJta2lzczogY2FuJ3QgcmVnaXN0ZXIgbGluZSBkaXNjaXBsaW5lIChlcnIgPSAlZClcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IG1raXNzX2luaXRfZHJpdmVyKHZvaWQpCkBAIC05OTMsOCArOTg3LDkgQEAKIAogCXByaW50ayhiYW5uZXIpOwogCi0JaWYgKChzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9BWDI1LCAmYXhfbGRpc2MpKSAhPSAwKQotCQlwcmludGsobXNnX3JlZ2ZhaWwpOworCXN0YXR1cyA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhOX0FYMjUsICZheF9sZGlzYyk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlwcmludGsobXNnX3JlZ2ZhaWwsIHN0YXR1cyk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwppbmRleCBjMDExYWY3Li5kNzEyZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwpAQCAtMTg0LDcgKzE4NCw4IEBACiAKICNpbmNsdWRlICJ6ODUzMC5oIgogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJBWC4yNTogWjg1MzAgU0NDIGRyaXZlciB2ZXJzaW9uICJWRVJTSU9OIi5kbDFia2VcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkiQVguMjU6IFo4NTMwIFNDQyBkcml2ZXIgdmVyc2lvbiAiVkVSU0lPTiIuZGwxYmtlXG4iOwogCiBzdGF0aWMgdm9pZCB0X2R3YWl0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgdF90eGRlbGF5KHVuc2lnbmVkIGxvbmcpOwpAQCAtMTU0MiwyMyArMTU0MywyNCBAQAogLyogKgkJCSAgICBOZXR3b3JrIGRyaXZlciBtZXRob2RzCQkgICAgICAqICovCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNjY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICAgICAgID0gc2NjX25ldF9vcGVuLAorCS5uZG9fc3RvcAkgICAgID0gc2NjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJICAgICA9IHNjY19uZXRfdHgsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBzY2NfbmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2dldF9zdGF0cyAgICAgICA9IHNjY19uZXRfZ2V0X3N0YXRzLAorCS5uZG9fZG9faW9jdGwgICAgICAgID0gc2NjX25ldF9pb2N0bCwKK307CisKIC8qIC0tLS0+IEluaXRpYWxpemUgZGV2aWNlIDwtLS0tLSAqLwogCiBzdGF0aWMgdm9pZCBzY2NfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICAgPSAxNjsJLyogc2hvdWxkIGJlIGVub3VnaC4uLiAqLwogCi0JZGV2LT5vcGVuICAgICAgICAgICAgPSBzY2NfbmV0X29wZW47Ci0JZGV2LT5zdG9wCSAgICAgPSBzY2NfbmV0X2Nsb3NlOwotCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzY2NfbmV0X3R4OworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJnNjY19uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyAgICAgID0gJmF4MjVfaGVhZGVyX29wczsKIAotCWRldi0+c2V0X21hY19hZGRyZXNzID0gc2NjX25ldF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMgICAgICAgPSBzY2NfbmV0X2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IHNjY19uZXRfaW9jdGw7Ci0JZGV2LT50eF90aW1lb3V0ICAgICAgPSBOVUxMOwotCiAJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgIEFYMjVfQUREUl9MRU4pOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCAgJmF4MjVfZGVmYWRkciwgQVgyNV9BRERSX0xFTik7CiAgCkBAIC0yMDczLDcgKzIwNzUsNyBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY2NfbmV0X3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjY19uZXRfc2VxX29wcyA9IHsKIAkuc3RhcnQgID0gc2NjX25ldF9zZXFfc3RhcnQsCiAJLm5leHQgICA9IHNjY19uZXRfc2VxX25leHQsCiAJLnN0b3AgICA9IHNjY19uZXRfc2VxX3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCmluZGV4IDU0MDdmNzQuLjUwMGE0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCkBAIC03Nyw3ICs3Nyw4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgeWFtX2Rydm5hbWVbXSA9ICJ5YW0iOwotc3RhdGljIGNoYXIgeWFtX2RydmluZm9bXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJZQU0gZHJpdmVyIHZlcnNpb24gMC44IGJ5IEYxT0FUL0Y2RkJCXG4iOworc3RhdGljIGNvbnN0IGNoYXIgeWFtX2RydmluZm9bXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkiWUFNIGRyaXZlciB2ZXJzaW9uIDAuOCBieSBGMU9BVC9GNkZCQlxuIjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExNSwxMCArMTE2LDYgQEAKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQkvKiBTdGF0cyBzZWN0aW9uICovCi0KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogCWludCBuYl9yeGludDsKIAlpbnQgbmJfbWRpbnQ7CiAKQEAgLTUwNyw3ICs1MDQsNyBAQAogCQl9IGVsc2UgewogCQkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJCQkrK3lwLT5zdGF0cy5yeF9kcm9wcGVkOworCQkJCSsrZGV2LT5zdGF0cy5yeF9kcm9wcGVkOwogCQkJfSBlbHNlIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpjcDsKIAkJCQljcCA9IHNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKQEAgLTUxNSw3ICs1MTIsNyBAQAogCQkJCW1lbWNweShjcCwgeXAtPnJ4X2J1ZiwgcGt0X2xlbiAtIDEpOwogCQkJCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCQkJCW5ldGlmX3J4KHNrYik7Ci0JCQkJKyt5cC0+c3RhdHMucnhfcGFja2V0czsKKwkJCQkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKIAkJCX0KIAkJfQogCX0KQEAgLTY3Nyw3ICs2NzQsNyBAQAogCQkJeXAtPnR4X2NvdW50ID0gMTsKIAkJCXlwLT50eF9zdGF0ZSA9IFRYX0hFQUQ7CiAJCX0KLQkJKyt5cC0+c3RhdHMudHhfcGFja2V0czsKKwkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CiAJCWJyZWFrOwogCWNhc2UgVFhfVEFJTDoKIAkJaWYgKC0teXAtPnR4X2NvdW50IDw9IDApIHsKQEAgLTcxNiw3ICs3MTMsNyBAQAogCQkJaGFuZGxlZCA9IDE7CiAKIAkJCWlmIChsc3IgJiBMU1JfT0UpCi0JCQkJKyt5cC0+c3RhdHMucnhfZmlmb19lcnJvcnM7CisJCQkJKytkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOwogCiAJCQl5cC0+ZGNkID0gKG1zciAmIFJYX0RDRCkgPyAxIDogMDsKIApAQCAtNzc4LDE2ICs3NzUsMTYgQEAKIAlzZXFfcHJpbnRmKHNlcSwgIiAgVHhUYWlsICAgJXVcbiIsIHlwLT50eHRhaWwpOwogCXNlcV9wcmludGYoc2VxLCAiICBTbG90VGltZSAldVxuIiwgeXAtPnNsb3QpOwogCXNlcV9wcmludGYoc2VxLCAiICBQZXJzaXN0ICAldVxuIiwgeXAtPnBlcnMpOwotCXNlcV9wcmludGYoc2VxLCAiICBUeEZyYW1lcyAlbHVcbiIsIHlwLT5zdGF0cy50eF9wYWNrZXRzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgUnhGcmFtZXMgJWx1XG4iLCB5cC0+c3RhdHMucnhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFR4RnJhbWVzICVsdVxuIiwgZGV2LT5zdGF0cy50eF9wYWNrZXRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUnhGcmFtZXMgJWx1XG4iLCBkZXYtPnN0YXRzLnJ4X3BhY2tldHMpOwogCXNlcV9wcmludGYoc2VxLCAiICBUeEludCAgICAldVxuIiwgeXAtPm5iX21kaW50KTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgUnhJbnQgICAgJXVcbiIsIHlwLT5uYl9yeGludCk7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIFJ4T3ZlciAgICVsdVxuIiwgeXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUnhPdmVyICAgJWx1XG4iLCBkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKTsKIAlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgeWFtX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgeWFtX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSB5YW1fc2VxX3N0YXJ0LAogCS5uZXh0ID0geWFtX3NlcV9uZXh0LAogCS5zdG9wID0geWFtX3NlcV9zdG9wLApAQCAtODEyLDI2ICs4MDksNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp5YW1fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHlhbV9wb3J0ICp5cDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gTlVMTDsKLQotCXlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoeXAtPm1hZ2ljICE9IFlBTV9NQUdJQykKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiAKLQkgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4gIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotCSAqIGNhcmQgb3BlbiBvciBjbG9zZWQuIAotCSAqLwotCXJldHVybiAmeXAtPnN0YXRzOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIGludCB5YW1fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB5YW1fcG9ydCAqeXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtODc3LDEwICs4NTQsMTAgQEAKIAogCS8qIFJlc2V0IG92ZXJydW5zIGZvciBhbGwgcG9ydHMgLSBGUEdBIHByb2dyYW1taW5nIG1ha2VzIG92ZXJydW5zICovCiAJZm9yIChpID0gMDsgaSA8IE5SX1BPUlRTOyBpKyspIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHlhbV9kZXZzW2ldOwotCQlzdHJ1Y3QgeWFtX3BvcnQgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJaW5iKExTUihkZXYtPmJhc2VfYWRkcikpOwotCQl5cC0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSAwOworCQlzdHJ1Y3QgbmV0X2RldmljZSAqeWFtX2RldiA9IHlhbV9kZXZzW2ldOworCisJCWluYihMU1IoeWFtX2Rldi0+YmFzZV9hZGRyKSk7CisJCXlhbV9kZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gMDsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICIlcyBhdCBpb2Jhc2UgMHglbHggaXJxICV1IHVhcnQgJXNcbiIsIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxLApAQCAtMTA2OCw2ICsxMDQ1LDE0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHlhbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkgICAgID0geWFtX29wZW4sCisJLm5kb19zdG9wCSAgICAgPSB5YW1fY2xvc2UsCisJLm5kb19zdGFydF94bWl0ICAgICAgPSB5YW1fc2VuZF9wYWNrZXQsCisJLm5kb19kb19pb2N0bCAJICAgICA9IHlhbV9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHlhbV9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCB5YW1fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeWFtX3BvcnQgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEwODgsMTggKzEwNzMsMTEgQEAKIAlkZXYtPmJhc2VfYWRkciA9IHlwLT5pb2Jhc2U7CiAJZGV2LT5pcnEgPSB5cC0+aXJxOwogCi0JZGV2LT5vcGVuID0geWFtX29wZW47Ci0JZGV2LT5zdG9wID0geWFtX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSB5YW1faW9jdGw7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB5YW1fc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSB5YW1fZ2V0X3N0YXRzOwotCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmeXAtPnNlbmRfcXVldWUpOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnlhbV9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7CiAKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHlhbV9zZXRfbWFjX2FkZHJlc3M7Ci0KIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVgyNTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEFYMjVfTUFYX0hFQURFUl9MRU47CiAJZGV2LT5tdHUgPSBBWDI1X01UVTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwppbmRleCA2ZmQ3YWE2Li5hODE1ZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJCQkgIEVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYKSkKIAkJREJHKGRldiwgIiVzIiBOTCwgZXJyb3IpOwogCWVsc2UgaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXNcbiIsIGRldi0+bmRldi0+bmFtZSwgZXJyb3IpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlc1xuIiwgZGV2LT5vZmRldi0+bm9kZS0+ZnVsbF9uYW1lLCBlcnJvcik7CiB9CiAKIC8qIEVNQUMgUEhZIGNsb2NrIHdvcmthcm91bmQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKaW5kZXggNWI1YmY5Zi4uYzI1YmMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwpAQCAtOTA1LDYgKzkwNSwxNyBAQAogCU5VTEwKIH07CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYm1sYW5hX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBpYm1sYW5hX29wZW4sCisJLm5kb19zdG9wIAkJPSBpYm1sYW5hX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpYm1sYW5hX3R4LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWJtbGFuYV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlibWxhbmFfaW5pdF9vbmUoc3RydWN0IGRldmljZSAqa2RldikKIHsKIAlzdHJ1Y3QgbWNhX2RldmljZSAqbWRldiA9IHRvX21jYV9kZXZpY2Uoa2Rldik7CkBAIC05NzMsMTEgKzk4NCw3IEBACiAJbWNhX2RldmljZV9zZXRfY2xhaW0obWRldiwgMSk7CiAKIAkvKiBzZXQgbWV0aG9kcyAqLwotCi0JZGV2LT5vcGVuID0gaWJtbGFuYV9vcGVuOwotCWRldi0+c3RvcCA9IGlibWxhbmFfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpYm1sYW5hX3R4OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWJtbGFuYV9zZXRfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5uZXRkZXZfb3BzID0gJmlibWxhbmFfbmV0ZGV2X29wczsKIAlkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKIAkvKiBjb3B5IG91dCBNQUMgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGRmYTYzNDguLjVjNjMxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTEwMjgsMTAgKzEwMjgsMTAgQEAKIAogCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaWYgKGlibXZldGhfcnhxX3BlbmRpbmdfYnVmZmVyKGFkYXB0ZXIpICYmCi0JCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKSB7CisJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKIAkJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkgICAgICAgVklPX0lSUV9ESVNBQkxFKTsKIAkJCWdvdG8gcmVzdGFydF9wb2xsOwpAQCAtMTA0NywxMSArMTA0NywxMSBAQAogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCSAgICAgICBWSU9fSVJRX0RJU0FCTEUpOwogCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUKaW5kZXggMTkyN2IzZi4uODM3MmNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCiAjIEludGVsIDgyNTc1IFBDSS1FeHByZXNzIEV0aGVybmV0IExpbnV4IGRyaXZlcgotIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisjIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMzLDUgKzMzLDUgQEAKIG9iai0kKENPTkZJR19JR0IpICs9IGlnYi5vCiAKIGlnYi1vYmpzIDo9IGlnYl9tYWluLm8gaWdiX2V0aHRvb2wubyBlMTAwMF84MjU3NS5vIFwKLQkgICAgZTEwMDBfbWFjLm8gZTEwMDBfbnZtLm8gZTEwMDBfcGh5Lm8KKwkgICAgZTEwMDBfbWFjLm8gZTEwMDBfbnZtLm8gZTEwMDBfcGh5Lm8gZTEwMDBfbWJ4Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCAxM2NhNzNmLi5lZmQ5YmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC02MiwxNyArNjIsMTIgQEAKIHN0YXRpYyBzMzIgIGlnYl9yZXNldF9pbml0X3NjcmlwdF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfcmVhZF9tYWNfYWRkcl84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAKLQotc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1IHsKLQlib29sIHNnbWlpX2FjdGl2ZTsKLX07Ci0KIHN0YXRpYyBzMzIgaWdiX2dldF9pbnZhcmlhbnRzXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKIAlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOwogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7Ci0Jc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYzsKKwlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKiBkZXZfc3BlYyA9ICZody0+ZGV2X3NwZWMuXzgyNTc1OwogCXUzMiBlZWNkOwogCXMzMiByZXRfdmFsOwogCXUxNiBzaXplOwpAQCAtODUsOCArODAsMTAgQEAKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzU7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2OgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X05TOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUjoKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05NCwxNyArOTEsNiBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBNQUMgaW5pdGlhbGl6YXRpb24gKi8KLQlody0+ZGV2X3NwZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUpOwotCi0JLyogRGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZSBhbGxvY2F0aW9uICovCi0JaHctPmRldl9zcGVjID0ga3phbGxvYyhody0+ZGV2X3NwZWNfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWh3LT5kZXZfc3BlYykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZfc3BlYyA9IChzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKilody0+ZGV2X3NwZWM7Ci0KIAkvKiBTZXQgbWVkaWEgdHlwZSAqLwogCS8qCiAJICogVGhlIDgyNTc1IHVzZXMgYml0cyAyMjoyMyBmb3IgbGluayBtb2RlLiBUaGUgbW9kZSBjYW4gYmUgY2hhbmdlZApAQCAtMTk1LDEzICsxODEsMTMgQEAKIAogCS8qIFBIWSBmdW5jdGlvbiBwb2ludGVycyAqLwogCWlmIChpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkgewotCQlwaHktPm9wcy5yZXNldF9waHkgICAgICAgICAgPSBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1OwotCQlwaHktPm9wcy5yZWFkX3BoeV9yZWcgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnX3NnbWlpXzgyNTc1OwotCQlwaHktPm9wcy53cml0ZV9waHlfcmVnICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMucmVzZXQgICAgICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldF9zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMucmVhZF9yZWcgICAgICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMud3JpdGVfcmVnICAgICAgICAgID0gaWdiX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzU7CiAJfSBlbHNlIHsKLQkJcGh5LT5vcHMucmVzZXRfcGh5ICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldDsKLQkJcGh5LT5vcHMucmVhZF9waHlfcmVnICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19pZ3A7Ci0JCXBoeS0+b3BzLndyaXRlX3BoeV9yZWcgICAgICA9IGlnYl93cml0ZV9waHlfcmVnX2lncDsKKwkJcGh5LT5vcHMucmVzZXQgICAgICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldDsKKwkJcGh5LT5vcHMucmVhZF9yZWcgICAgICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19pZ3A7CisJCXBoeS0+b3BzLndyaXRlX3JlZyAgICAgICAgICA9IGlnYl93cml0ZV9waHlfcmVnX2lncDsKIAl9CiAKIAkvKiBTZXQgcGh5LT5waHlfYWRkciBhbmQgcGh5LT5pZC4gKi8KQEAgLTIyOSw2ICsyMTUsMTAgQEAKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogCX0KIAorCS8qIGlmIDgyNTc2IHRoZW4gaW5pdGlhbGl6ZSBtYWlsYm94IHBhcmFtZXRlcnMgKi8KKwlpZiAobWFjLT50eXBlID09IGUxMDAwXzgyNTc2KQorCQlpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKGh3KTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NTEsNyArNDQxLDcgQEAKIAkgKiBTRlAgZG9jdW1lbnRhdGlvbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHRvIGNvbmZpZ3VyZSB0aGUgU1BGIG1vZHVsZQogCSAqIHRvIHdvcmsgb24gU0dNSUkuICBObyBmdXJ0aGVyIGRvY3VtZW50YXRpb24gaXMgZ2l2ZW4uCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUIsIDB4ODA4NCk7CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxQiwgMHg4MDg0KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTQ4MCwyOCArNDcwLDI4IEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWYgKGFjdGl2ZSkgewogCQlkYXRhIHw9IElHUDAyRTEwMDBfUE1fRDBfTFBMVTsKLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCQkgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKIAkJLyogV2hlbiBMUExVIGlzIGVuYWJsZWQsIHdlIHNob3VsZCBkaXNhYmxlIFNtYXJ0U3BlZWQgKi8KLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkmZGF0YSk7CiAJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJZGF0YSAmPSB+SUdQMDJFMTAwMF9QTV9EMF9MUExVOwotCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKIAkJCQkJCSBkYXRhKTsKIAkJLyoKIAkJICogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCkBAIC01MTAsMjQgKzUwMCwyNCBAQAogCQkgKiBTbWFydFNwZWVkLCBzbyBwZXJmb3JtYW5jZSBpcyBtYWludGFpbmVkLgogCQkgKi8KIAkJaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb24pIHsKLQkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCUlHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewotCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywKIAkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKQEAgLTgwMyw3ICs3OTMsNyBAQAogfQogCiAvKioKLSAqICBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NSAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCisgKiAgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCiAgKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KQEAgLTgxNSw5ICs4MDUsOSBAQAogICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAogICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4KICAqKi8KLXZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKIHsKIAl1MzIgaGFzaF92YWx1ZTsKIAl1MzIgaTsKQEAgLTEwNTEsNyArMTA0MSw3IEBACiAJCSAqIGRlcGVuZGluZyBvbiB1c2VyIHNldHRpbmdzLgogCQkgKi8KIAkJaHdfZGJnKCJGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhcbiIpOwotCQlyZXRfdmFsID0gaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoaHcpOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4KGh3KTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiRXJyb3IgRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtMTExMCw2ICsxMTAwLDEzIEBACiAJICAgICAgIEUxMDAwX0NUUkxfU1dEUElOMTsKIAl3cjMyKEUxMDAwX0NUUkwsIHJlZyk7CiAKKwkvKiBQb3dlciBvbiBwaHkgZm9yIDgyNTc2IGZpYmVyIGFkYXB0ZXJzICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQlyZWcgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwkJcmVnICY9IH5FMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEE7CisJCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIHJlZyk7CisJfQorCiAJLyogU2V0IHN3aXRjaCBjb250cm9sIHRvIHNlcmRlcyBlbmVyZ3kgZGV0ZWN0ICovCiAJcmVnID0gcmQzMihFMTAwMF9DT05OU1cpOwogCXJlZyB8PSBFMTAwMF9DT05OU1dfRU5SR1NSQzsKQEAgLTEyMjcsMjAgKzEyMjQsMTIgQEAKICAqKi8KIHN0YXRpYyBib29sIGlnYl9zZ21paV9hY3RpdmVfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjOwotCWJvb2wgcmV0X3ZhbDsKKwlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjID0gJmh3LT5kZXZfc3BlYy5fODI1NzU7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc1KSB7Ci0JCXJldF92YWwgPSBmYWxzZTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzUgJiYgaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc2KQorCQlyZXR1cm4gZmFsc2U7CiAKLQlkZXZfc3BlYyA9IChzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKilody0+ZGV2X3NwZWM7Ci0KLQlyZXRfdmFsID0gZGV2X3NwZWMtPnNnbWlpX2FjdGl2ZTsKLQotb3V0OgotCXJldHVybiByZXRfdmFsOworCXJldHVybiBkZXZfc3BlYy0+c2dtaWlfYWN0aXZlOwogfQogCiAvKioKQEAgLTE0MzAsNiArMTQxOSw0NCBAQAogCXJkMzIoRTEwMDBfTVBDKTsKIH0KIAorLyoqCisgKiAgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgdm1kcSBsb29wYmFjaworICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CisgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCisgKgorICogIGVuYWJsZXMvZGlzYWJsZXMgTDIgc3dpdGNoIGxvb3BiYWNrIGZ1bmN0aW9uYWxpdHkuCisgKiovCit2b2lkIGlnYl92bWRxX3NldF9sb29wYmFja19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgZHR4c3djID0gcmQzMihFMTAwMF9EVFhTV0MpOworCisJaWYgKGVuYWJsZSkKKwkJZHR4c3djIHw9IEUxMDAwX0RUWFNXQ19WTURRX0xPT1BCQUNLX0VOOworCWVsc2UKKwkJZHR4c3djICY9IH5FMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTjsKKworCXdyMzIoRTEwMDBfRFRYU1dDLCBkdHhzd2MpOworfQorCisvKioKKyAqICBpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYgLSBlbmFibGUgb3IgZGlzYWJsZSB2bWRxIHJlcGxpY2F0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3QKKyAqICBAZW5hYmxlOiBzdGF0ZSB0byBlbnRlciwgZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAqCisgKiAgZW5hYmxlcy9kaXNhYmxlcyByZXBsaWNhdGlvbiBvZiBwYWNrZXRzIGFjcm9zcyBtdWx0aXBsZSBwb29scy4KKyAqKi8KK3ZvaWQgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXUzMiB2dF9jdGwgPSByZDMyKEUxMDAwX1ZUX0NUTCk7CisKKwlpZiAoZW5hYmxlKQorCQl2dF9jdGwgfD0gRTEwMDBfVlRfQ1RMX1ZNX1JFUExfRU47CisJZWxzZQorCQl2dF9jdGwgJj0gfkUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOOworCisJd3IzMihFMTAwMF9WVF9DVEwsIHZ0X2N0bCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgZTEwMDBfbWFjX29wc184MjU3NSA9IHsKIAkucmVzZXRfaHcgICAgICAgICAgICAgPSBpZ2JfcmVzZXRfaHdfODI1NzUsCiAJLmluaXRfaHcgICAgICAgICAgICAgID0gaWdiX2luaXRfaHdfODI1NzUsCkBAIC0xNDQwLDE2ICsxNDY3LDE2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIGUxMDAwX3BoeV9vcHNfODI1NzUgPSB7Ci0JLmFjcXVpcmVfcGh5ICAgICAgICAgID0gaWdiX2FjcXVpcmVfcGh5XzgyNTc1LAorCS5hY3F1aXJlICAgICAgICAgICAgICA9IGlnYl9hY3F1aXJlX3BoeV84MjU3NSwKIAkuZ2V0X2NmZ19kb25lICAgICAgICAgPSBpZ2JfZ2V0X2NmZ19kb25lXzgyNTc1LAotCS5yZWxlYXNlX3BoeSAgICAgICAgICA9IGlnYl9yZWxlYXNlX3BoeV84MjU3NSwKKwkucmVsZWFzZSAgICAgICAgICAgICAgPSBpZ2JfcmVsZWFzZV9waHlfODI1NzUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGUxMDAwX252bV9vcGVyYXRpb25zIGUxMDAwX252bV9vcHNfODI1NzUgPSB7Ci0JLmFjcXVpcmVfbnZtICAgICAgICAgID0gaWdiX2FjcXVpcmVfbnZtXzgyNTc1LAotCS5yZWFkX252bSAgICAgICAgICAgICA9IGlnYl9yZWFkX252bV9lZXJkLAotCS5yZWxlYXNlX252bSAgICAgICAgICA9IGlnYl9yZWxlYXNlX252bV84MjU3NSwKLQkud3JpdGVfbnZtICAgICAgICAgICAgPSBpZ2Jfd3JpdGVfbnZtX3NwaSwKKwkuYWNxdWlyZSAgICAgICAgICAgICAgPSBpZ2JfYWNxdWlyZV9udm1fODI1NzUsCisJLnJlYWQgICAgICAgICAgICAgICAgID0gaWdiX3JlYWRfbnZtX2VlcmQsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gaWdiX3JlbGVhc2VfbnZtXzgyNTc1LAorCS53cml0ZSAgICAgICAgICAgICAgICA9IGlnYl93cml0ZV9udm1fc3BpLAogfTsKIAogY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzVfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKaW5kZXggYzE5MjhiNS4uZWFmOTc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjgsNyArMjgsNyBAQAogI2lmbmRlZiBfRTEwMDBfODI1NzVfSF8KICNkZWZpbmUgX0UxMDAwXzgyNTc1X0hfCiAKLXZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoc3RydWN0IGUxMDAwX2h3KiwgdTgqLCB1MzIsIHUzMiwgdTMyKTsKK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3KiwgdTgqLCB1MzIsIHUzMiwgdTMyKTsKIGV4dGVybiB2b2lkIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCkBAIC00MCw4ICs0MCwxMSBAQAogI2RlZmluZSBFMTAwMF9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBTaGlmdCBfbGVmdF8gKi8KICNkZWZpbmUgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAogI2RlZmluZSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfSERSX1NQTElUX0FMV0FZUyAgICAgICAgICAweDBBMDAwMDAwCisjZGVmaW5lIEUxMDAwX1NSUkNUTF9EUk9QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKIAogI2RlZmluZSBFMTAwMF9NUlFDX0VOQUJMRV9SU1NfNFEgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEUxMDAwX01SUUNfRU5BQkxFX1ZNRFEgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRTEwMDBfTVJRQ19FTkFCTEVfVk1EUV9SU1NfMlEgICAgICAgMHgwMDAwMDAwNQogI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUCAgICAgICAweDAwNDAwMDAwCiAjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9VRFBfRVggICAgMHgwMTAwMDAwMApAQCAtNTgsOSArNjEsNiBAQAogICAgIEUxMDAwX0VJQ1JfUlhfUVVFVUUyIHwgICAgXAogICAgIEUxMDAwX0VJQ1JfUlhfUVVFVUUzKQogCi0jZGVmaW5lIEUxMDAwX0VJTVNfUlhfUVVFVUUgRTEwMDBfRUlDUl9SWF9RVUVVRQotI2RlZmluZSBFMTAwMF9FSU1TX1RYX1FVRVVFIEUxMDAwX0VJQ1JfVFhfUVVFVUUKLQogLyogSW1tZWRpYXRlIEludGVycnVwdCBSeCAoQS5LLkEuIExvdyBMYXRlbmN5IEludGVycnVwdCkgKi8KIAogLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gQWR2YW5jZWQgKi8KQEAgLTk1LDEyICs5NSw2IEBACiAjZGVmaW5lIEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fTUFTSyAgICAgIDB4N0ZFMAogI2RlZmluZSBFMTAwMF9SWERBRFZfSERSQlVGTEVOX1NISUZUICAgICA1CiAKLS8qIFJTUyBIYXNoIHJlc3VsdHMgKi8KLQotLyogUlNTIFBhY2tldCBUeXBlcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciAqLwotI2RlZmluZSBFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0ICAgICAgICAweDAwMDAwMDEwIC8qIElQVjQgaGRyIHByZXNlbnQgKi8KLSNkZWZpbmUgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQICAgICAgICAgMHgwMDAwMDEwMCAvKiBUQ1AgaGRyIHByZXNlbnQgKi8KLQogLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCiB1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyB7CiAJc3RydWN0IHsKQEAgLTExNiw2ICsxMTAsNyBAQAogfTsKIAogLyogQWR2IFRyYW5zbWl0IERlc2NyaXB0b3IgQ29uZmlnIE1hc2tzICovCisjZGVmaW5lIEUxMDAwX0FEVlRYRF9NQUNfVFNUQU1QICAgMHgwMDA4MDAwMCAvKiBJRUVFMTU4OCBUaW1lc3RhbXAgcGFja2V0ICovCiAjZGVmaW5lIEUxMDAwX0FEVlRYRF9EVFlQX0NUWFQgICAgMHgwMDIwMDAwMCAvKiBBZHZhbmNlZCBDb250ZXh0IERlc2NyaXB0b3IgKi8KICNkZWZpbmUgRTEwMDBfQURWVFhEX0RUWVBfREFUQSAgICAweDAwMzAwMDAwIC8qIEFkdmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLwogI2RlZmluZSBFMTAwMF9BRFZUWERfRENNRF9JRkNTICAgIDB4MDIwMDAwMDAgLyogSW5zZXJ0IEZDUyAoRXRoZXJuZXQgQ1JDKSAqLwpAQCAtMTQ5LDExICsxNDQsOCBAQAogI2RlZmluZSBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFICAweDAyMDAwMDAwIC8qIEVuYWJsZSBzcGVjaWZpYyBSeCBRdWV1ZSAqLwogCiAvKiBEaXJlY3QgQ2FjaGUgQWNjZXNzIChEQ0EpIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9FTkFCTEUgIDB4MDAwMDAwMDAgLyogRENBIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfRElTQUJMRSAweDAwMDAwMDAxIC8qIERDQSBEaXNhYmxlICovCi0KLSNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IxIDB4MDAgLyogRENBIE1vZGUgQ0IxICovCi0jZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAweDAyIC8qIERDQSBNb2RlIENCMiAqLworI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9ESVNBQkxFIDB4MDEgLyogRENBIERpc2FibGUgKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyICAgICAweDAyIC8qIERDQSBNb2RlIENCMiAqLwogCiAjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTSyAweDAwMDAwMDFGIC8qIFJ4IENQVUlEIE1hc2sgKi8KICNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTiAoMSA8PCA1KSAvKiBEQ0EgUnggRGVzYyBlbmFibGUgKi8KQEAgLTE3MCw0ICsxNjIsNDQgQEAKICNkZWZpbmUgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVCAyNCAvKiBUeCBDUFVJRCBub3cgaW4gdGhlIGxhc3QgYnl0ZSAqLwogI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUIDI0IC8qIFJ4IENQVUlEIG5vdyBpbiB0aGUgbGFzdCBieXRlICovCiAKKyNkZWZpbmUgTUFYX05VTV9WRlMgICAgICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIEUxMDAwX0RUWFNXQ19WTURRX0xPT1BCQUNLX0VOICgxIDw8IDMxKSAgLyogZ2xvYmFsIFZGIExCIGVuYWJsZSAqLworCisvKiBFYXN5IGRlZmluZXMgZm9yIHNldHRpbmcgZGVmYXVsdCBwb29sLCB3b3VsZCBub3JtYWxseSBiZSBsZWZ0IGEgemVybyAqLworI2RlZmluZSBFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX1NISUZUIDcKKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9NQVNLICAoMHg3IDw8IEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfU0hJRlQpCisKKy8qIE90aGVyIHVzZWZ1bCBWTURfQ1RMIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0lHTk9SRV9NQUMgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RJU0FCTEVfREVGX1BPT0wgICAoMSA8PCAyOSkKKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX1ZNX1JFUExfRU4gICAgICAgICAoMSA8PCAzMCkKKworLyogUGVyIFZNIE9mZmxvYWQgcmVnaXN0ZXIgc2V0dXAgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUkxQTUxfTUFTSyAweDAwMDAzRkZGIC8qIExvbmcgUGFja2V0IE1heGltdW0gTGVuZ3RoIG1hc2sgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfTFBFICAgICAgICAweDAwMDEwMDAwIC8qIEFjY2VwdCBMb25nIHBhY2tldCAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9SU1NFICAgICAgIDB4MDAwMjAwMDAgLyogRW5hYmxlIFJTUyAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9BVVBFICAgICAgIDB4MDEwMDAwMDAgLyogQWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUk9NUEUgICAgICAweDAyMDAwMDAwIC8qIEFjY2VwdCBvdmVyZmxvdyBtdWx0aWNhc3QgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUk9QRSAgICAgICAweDA0MDAwMDAwIC8qIEFjY2VwdCBvdmVyZmxvdyB1bmljYXN0ICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX0JBTSAgICAgICAgMHgwODAwMDAwMCAvKiBBY2NlcHQgQnJvYWRjYXN0IHBhY2tldHMgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfTVBNRSAgICAgICAweDEwMDAwMDAwIC8qIE11bHRpY2FzdCBwcm9taXNjdW91cyBtb2RlICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1NUUlZMQU4gICAgMHg0MDAwMDAwMCAvKiBWbGFuIHN0cmlwcGluZyBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfU1RSQ1JDICAgICAweDgwMDAwMDAwIC8qIENSQyBzdHJpcHBpbmcgZW5hYmxlICovCisKKyNkZWZpbmUgRTEwMDBfVkxWRl9BUlJBWV9TSVpFICAgICAzMgorI2RlZmluZSBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRTEwMDBfVkxWRl9QT09MU0VMX1NISUZUICAxMgorI2RlZmluZSBFMTAwMF9WTFZGX1BPT0xTRUxfTUFTSyAgICgweEZGIDw8IEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCkKKyNkZWZpbmUgRTEwMDBfVkxWRl9MVkxBTiAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEUxMDAwX0lPVkNUTCAweDA1QkJDCisjZGVmaW5lIEUxMDAwX0lPVkNUTF9SRVVTRV9WRlEgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFMTF9RVUVVRVMgICAweEZGRkYKKwordm9pZCBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwordm9pZCBpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCmluZGV4IDQwZDAzNDIuLmFkMmQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00MiwzMyArNDIsMTEgQEAKICNkZWZpbmUgRTEwMDBfV1VGQ19FWCAgIDB4MDAwMDAwMDQgLyogRGlyZWN0ZWQgRXhhY3QgV2FrZXVwIEVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9XVUZDX01DICAgMHgwMDAwMDAwOCAvKiBEaXJlY3RlZCBNdWx0aWNhc3QgV2FrZXVwIEVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9XVUZDX0JDICAgMHgwMDAwMDAxMCAvKiBCcm9hZGNhc3QgV2FrZXVwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0FSUCAgMHgwMDAwMDAyMCAvKiBBUlAgUmVxdWVzdCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0lQVjQgMHgwMDAwMDA0MCAvKiBEaXJlY3RlZCBJUHY0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfSVBWNiAweDAwMDAwMDgwIC8qIERpcmVjdGVkIElQdjYgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19GTFgwIDB4MDAwMTAwMDAgLyogRmxleGlibGUgRmlsdGVyIDAgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYMSAweDAwMDIwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAxIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0ZMWDIgMHgwMDA0MDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMiBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19GTFgzIDB4MDAwODAwMDAgLyogRmxleGlibGUgRmlsdGVyIDMgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYX0ZJTFRFUlMgMHgwMDBGMDAwMCAvKiBNYXNrIGZvciB0aGUgNCBmbGV4aWJsZSBmaWx0ZXJzICovCi0KLS8qIFdha2UgVXAgU3RhdHVzICovCi0KLS8qIFdha2UgVXAgUGFja2V0IExlbmd0aCAqLwotCi0vKiBGb3VyIEZsZXhpYmxlIEZpbHRlcnMgYXJlIHN1cHBvcnRlZCAqLwotI2RlZmluZSBFMTAwMF9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYIDQKLQotLyogRWFjaCBGbGV4aWJsZSBGaWx0ZXIgaXMgYXQgbW9zdCAxMjggKDB4ODApIGJ5dGVzIGluIGxlbmd0aCAqLwotI2RlZmluZSBFMTAwMF9GTEVYSUJMRV9GSUxURVJfU0laRV9NQVggIDEyOAotCiAKIC8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0dQSTFfRU4gICAweDAwMDAwMDAyIC8qIE1hcHMgU0RQNSB0byBHUEkxICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDRfREFUQSAweDAwMDAwMDEwIC8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDQgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQNV9EQVRBIDB4MDAwMDAwMjAgLyogVmFsdWUgb2YgU1cgRGVmaW5lYWJsZSBQaW4gNSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmVhYmxlIFBpbiA3ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDRfRElSICAweDAwMDAwMTAwIC8qIERpcmVjdGlvbiBvZiBTRFA0IDA9aW4gMT1vdXQgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCisvKiBQaHlzaWNhbCBGdW5jIFJlc2V0IERvbmUgSW5kaWNhdGlvbiAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9QRlJTVEQgICAgMHgwMDAwNDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfU0dNSUkgICAweDAwODAwMDAwCkBAIC0xMDMsMTMgKzgxLDcgQEAKICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVlAgICAgICAgMHgwOCAgICAvKiBJRUVFIFZMQU4gUGFja2V0ICovCiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9UQ1BDUyAgICAweDIwICAgIC8qIFRDUCB4c3VtIGNhbGN1bGF0ZWQgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfRFlOSU5UICAgMHg4MDAgICAvKiBQa3QgY2F1c2VkIElOVCB2aWEgRFlOSU5UICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfQ0UgICAgICAgIDB4MDEgICAgLyogQ1JDIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0UgICAgICAgIDB4MDIgICAgLyogU3ltYm9sIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0VRICAgICAgIDB4MDQgICAgLyogU2VxdWVuY2UgRXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX0VSUl9DWEUgICAgICAgMHgxMCAgICAvKiBDYXJyaWVyIEV4dGVuc2lvbiBFcnJvciAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX1JYRSAgICAgICAweDgwICAgIC8qIFJ4IERhdGEgRXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0sgMHgwRkZGICAvKiBWTEFOIElEIGlzIGluIGxvd2VyIDEyIGJpdHMgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVFMgICAgICAgMHgxMDAwMCAvKiBQa3Qgd2FzIHRpbWUgc3RhbXBlZCAqLwogCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX0NFICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgRTEwMDBfUlhERVhUX1NUQVRFUlJfU0UgICAgMHgwMjAwMDAwMApAQCAtMTE5LDE0ICs5MSw2IEBACiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX0lQRSAgIDB4NDAwMDAwMDAKICNkZWZpbmUgRTEwMDBfUlhERVhUX1NUQVRFUlJfUlhFICAgMHg4MDAwMDAwMAogCi0vKiBtYXNrIHRvIGRldGVybWluZSBpZiBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkIGR1ZSB0byBmcmFtZSBlcnJvcnMgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKLSAgICBFMTAwMF9SWERfRVJSX0NFICB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX1NFICB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX1NFUSB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX0NYRSB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX1JYRSkKLQogLyogU2FtZSBtYXNrLCBidXQgZm9yIGV4dGVuZGVkIGFuZCBwYWNrZXQgc3BsaXQgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgRTEwMDBfUlhERVhUX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKICAgICBFMTAwMF9SWERFWFRfU1RBVEVSUl9DRSAgfCAgICAgICAgICAgIFwKQEAgLTE0NSwxNiArMTA5LDExIEBACiAvKiBNYW5hZ2VtZW50IENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19TTUJVU19FTiAgICAgIDB4MDAwMDAwMDEgLyogU01CdXMgRW5hYmxlZCAtIFJPICovCiAjZGVmaW5lIEUxMDAwX01BTkNfQVNGX0VOICAgICAgICAweDAwMDAwMDAyIC8qIEFTRiBFbmFibGVkIC0gUk8gKi8KLSNkZWZpbmUgRTEwMDBfTUFOQ19BUlBfRU4gICAgICAgIDB4MDAwMDIwMDAgLyogRW5hYmxlIEFSUCBSZXF1ZXN0IEZpbHRlcmluZyAqLwogLyogRW5hYmxlIE5laWdoYm9yIERpc2NvdmVyeSBGaWx0ZXJpbmcgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOICAgIDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBUQ08gUGFja2V0cyBFbmFibGVkICovCiAjZGVmaW5lIEUxMDAwX01BTkNfQkxLX1BIWV9SU1RfT05fSURFICAgMHgwMDA0MDAwMCAvKiBCbG9jayBwaHkgcmVzZXRzICovCiAvKiBFbmFibGUgTUFDIGFkZHJlc3MgZmlsdGVyaW5nICovCiAjZGVmaW5lIEUxMDAwX01BTkNfRU5fTUFDX0FERFJfRklMVEVSICAgMHgwMDEwMDAwMAotLyogRW5hYmxlIE1ORyBwYWNrZXRzIHRvIGhvc3QgbWVtb3J5ICovCi0jZGVmaW5lIEUxMDAwX01BTkNfRU5fTU5HMkhPU1QgICAweDAwMjAwMDAwCi0vKiBFbmFibGUgSVAgYWRkcmVzcyBmaWx0ZXJpbmcgKi8KLQogCiAvKiBSZWNlaXZlIENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9FTiAgICAgICAgICAgICAweDAwMDAwMDAyICAgIC8qIGVuYWJsZSAqLwpAQCAtMTYyLDE0ICsxMjEsMTEgQEAKICNkZWZpbmUgRTEwMDBfUkNUTF9VUEUgICAgICAgICAgICAweDAwMDAwMDA4ICAgIC8qIHVuaWNhc3QgcHJvbWlzY3VvdXMgZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfTVBFICAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgZW5hYiAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0xQRSAgICAgICAgICAgIDB4MDAwMDAwMjAgICAgLyogbG9uZyBwYWNrZXQgZW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1JDVExfTEJNX05PICAgICAgICAgMHgwMDAwMDAwMCAgICAvKiBubyBsb29wYmFjayBtb2RlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfTEJNX01BQyAgICAgICAgMHgwMDAwMDA0MCAgICAvKiBNQUMgbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9UQ1ZSICAgICAgIDB4MDAwMDAwQzAgICAgLyogdGN2ciBsb29wYmFjayBtb2RlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfUkRNVFNfSEFMRiAgICAgMHgwMDAwMDAwMCAgICAvKiByeCBkZXNjIG1pbiB0aHJlc2hvbGQgc2l6ZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX01PX1NISUZUICAgICAgIDEyICAgICAgICAgICAgLyogbXVsdGljYXN0IG9mZnNldCBzaGlmdCAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0JBTSAgICAgICAgICAgIDB4MDAwMDgwMDAgICAgLyogYnJvYWRjYXN0IGVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzIwNDggICAgICAgIDB4MDAwMDAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMjA0OCAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzEwMjQgICAgICAgIDB4MDAwMTAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMTAyNCAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzUxMiAgICAgICAgIDB4MDAwMjAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgNTEyICovCiAjZGVmaW5lIEUxMDAwX1JDVExfU1pfMjU2ICAgICAgICAgMHgwMDAzMDAwMCAgICAvKiByeCBidWZmZXIgc2l6ZSAyNTYgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9WRkUgICAgICAgICAgICAweDAwMDQwMDAwICAgIC8qIHZsYW4gZmlsdGVyIGVuYWJsZSAqLwpAQCAtMjI2LDExICsxODIsNyBAQAogLyogZW5hYmxlIGxpbmsgc3RhdHVzIGZyb20gZXh0ZXJuYWwgTElOS18wIGFuZCBMSU5LXzEgcGlucyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjAgIDB4MDAwNDAwMDAgIC8qIFNXRFBJTiAwIHZhbHVlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMSAgMHgwMDA4MDAwMCAgLyogU1dEUElOIDEgdmFsdWUgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4yICAweDAwMTAwMDAwICAvKiBTV0RQSU4gMiB2YWx1ZSAqLwotI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjMgIDB4MDAyMDAwMDAgIC8qIFNXRFBJTiAzIHZhbHVlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMCAgMHgwMDQwMDAwMCAgLyogU1dEUElOIDAgSW5wdXQgb3Igb3V0cHV0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMiAgMHgwMTAwMDAwMCAgLyogU1dEUElOIDIgaW5wdXQgb3Igb3V0cHV0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMyAgMHgwMjAwMDAwMCAgLyogU1dEUElOIDMgaW5wdXQgb3Igb3V0cHV0ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfUlNUICAgICAgMHgwNDAwMDAwMCAgLyogR2xvYmFsIHJlc2V0ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfUkZDRSAgICAgMHgwODAwMDAwMCAgLyogUmVjZWl2ZSBGbG93IENvbnRyb2wgZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfVEZDRSAgICAgMHgxMDAwMDAwMCAgLyogVHJhbnNtaXQgZmxvdyBjb250cm9sIGVuYWJsZSAqLwpAQCAtMzA4LDkgKzI2MCw3IEBACiAjZGVmaW5lIEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQgICBFMTAwMF9BTExfU1BFRURfRFVQTEVYCiAKIC8qIExFRCBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX01PREVfTUFTSyAgICAgICAweDAwMDAwMDBGCiAjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX01PREVfU0hJRlQgICAgICAwCi0jZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX0lWUlQgICAgICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX0JMSU5LICAgICAgICAgICAweDAwMDAwMDgwCiAKICNkZWZpbmUgRTEwMDBfTEVEQ1RMX01PREVfTEVEX09OICAgICAgICAweEUKQEAgLTM1NywxMiArMzA3LDcgQEAKIAogI2RlZmluZSBNQVhfSlVNQk9fRlJBTUVfU0laRSAgICAweDNGMDAKIAotLyogRXh0ZW5kZWQgQ29uZmlndXJhdGlvbiBDb250cm9sIGFuZCBTaXplICovCi0jZGVmaW5lIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFICAgICAgICAweDAwMDAwMDQwCi0KIC8qIFBCQSBjb25zdGFudHMgKi8KLSNkZWZpbmUgRTEwMDBfUEJBXzE2SyAweDAwMTAgICAgLyogMTZLQiwgZGVmYXVsdCBUWCBhbGxvY2F0aW9uICovCi0jZGVmaW5lIEUxMDAwX1BCQV8yNEsgMHgwMDE4CiAjZGVmaW5lIEUxMDAwX1BCQV8zNEsgMHgwMDIyCiAjZGVmaW5lIEUxMDAwX1BCQV82NEsgMHgwMDQwICAgIC8qIDY0S0IgKi8KIApAQCAtMzc4LDQxICszMjMsMTUgQEAKIAogLyogSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KICNkZWZpbmUgRTEwMDBfSUNSX1RYRFcgICAgICAgICAgMHgwMDAwMDAwMSAvKiBUcmFuc21pdCBkZXNjIHdyaXR0ZW4gYmFjayAqLwotI2RlZmluZSBFMTAwMF9JQ1JfVFhRRSAgICAgICAgICAweDAwMDAwMDAyIC8qIFRyYW5zbWl0IFF1ZXVlIGVtcHR5ICovCiAjZGVmaW5lIEUxMDAwX0lDUl9MU0MgICAgICAgICAgIDB4MDAwMDAwMDQgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIEUxMDAwX0lDUl9SWFNFUSAgICAgICAgIDB4MDAwMDAwMDggLyogcnggc2VxdWVuY2UgZXJyb3IgKi8KICNkZWZpbmUgRTEwMDBfSUNSX1JYRE1UMCAgICAgICAgMHgwMDAwMDAxMCAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICgwKSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUlhPICAgICAgICAgICAweDAwMDAwMDQwIC8qIHJ4IG92ZXJydW4gKi8KICNkZWZpbmUgRTEwMDBfSUNSX1JYVDAgICAgICAgICAgMHgwMDAwMDA4MCAvKiByeCB0aW1lciBpbnRyIChyaW5nIDApICovCi0jZGVmaW5lIEUxMDAwX0lDUl9NREFDICAgICAgICAgIDB4MDAwMDAyMDAgLyogTURJTyBhY2Nlc3MgY29tcGxldGUgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYQ0ZHICAgICAgICAgMHgwMDAwMDQwMCAvKiBSeCAvYy8gb3JkZXJlZCBzZXQgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjAgICAgICAgMHgwMDAwMDgwMCAvKiBHUCBJbnQgMCAqLwotI2RlZmluZSBFMTAwMF9JQ1JfR1BJX0VOMSAgICAgICAweDAwMDAxMDAwIC8qIEdQIEludCAxICovCi0jZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4yICAgICAgIDB4MDAwMDIwMDAgLyogR1AgSW50IDIgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjMgICAgICAgMHgwMDAwNDAwMCAvKiBHUCBJbnQgMyAqLwotI2RlZmluZSBFMTAwMF9JQ1JfVFhEX0xPVyAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9TUlBEICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgRTEwMDBfSUNSX0FDSyAgICAgICAgICAgMHgwMDAyMDAwMCAvKiBSZWNlaXZlIEFjayBmcmFtZSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfTU5HICAgICAgICAgICAweDAwMDQwMDAwIC8qIE1hbmFnZWFiaWxpdHkgZXZlbnQgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0RPQ0sgICAgICAgICAgMHgwMDA4MDAwMCAvKiBEb2NrL1VuZG9jayAqLworI2RlZmluZSBFMTAwMF9JQ1JfVk1NQiAgICAgICAgICAweDAwMDAwMTAwIC8qIFZNIE1CIGV2ZW50ICovCiAvKiBJZiB0aGlzIGJpdCBhc3NlcnRlZCwgdGhlIGRyaXZlciBzaG91bGQgY2xhaW0gdGhlIGludGVycnVwdCAqLwogI2RlZmluZSBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEICAweDgwMDAwMDAwCi0vKiBxdWV1ZSAwIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjAgMHgwMDEwMDAwMAotLyogcXVldWUgMCBUeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIEUxMDAwX0lDUl9UWERfRklGT19QQVIwIDB4MDAyMDAwMDAKLS8qIGhvc3QgYXJiIHJlYWQgYnVmZmVyIHBhcml0eSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfSE9TVF9BUkJfUEFSICAweDAwNDAwMDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9QQl9QQVIgICAgICAgIDB4MDA4MDAwMDAgLyogcGFja2V0IGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KLS8qIHF1ZXVlIDEgUnggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUlhEX0ZJRk9fUEFSMSAweDAxMDAwMDAwCi0vKiBxdWV1ZSAxIFR4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1RYRF9GSUZPX1BBUjEgMHgwMjAwMDAwMAotLyogRlcgY2hhbmdlZCB0aGUgc3RhdHVzIG9mIERJU1NXIGJpdCBpbiB0aGUgRldTTSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfRFNXICAgICAgICAgICAweDAwMDAwMDIwCiAvKiBMQU4gY29ubmVjdGVkIGRldmljZSBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0ICovCi0jZGVmaW5lIEUxMDAwX0lDUl9QSFlJTlQgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgRTEwMDBfSUNSX0VQUlNUICAgICAgICAgMHgwMDEwMDAwMCAvKiBNRSBoYW5kd2FyZSByZXNldCBvY2N1cnMgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX0RPVVRTWU5DICAgICAgMHgxMDAwMDAwMCAvKiBOSUMgRE1BIG91dCBvZiBzeW5jICovCiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBSZWFkICovCiAjZGVmaW5lIEUxMDAwX0VJQ1JfUlhfUVVFVUUwICAgIDB4MDAwMDAwMDEgLyogUnggUXVldWUgMCBJbnRlcnJ1cHQgKi8KQEAgLTQyMyw3ICszNDIsNiBAQAogI2RlZmluZSBFMTAwMF9FSUNSX1RYX1FVRVVFMSAgICAweDAwMDAwMjAwIC8qIFR4IFF1ZXVlIDEgSW50ZXJydXB0ICovCiAjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVFVUUyICAgIDB4MDAwMDA0MDAgLyogVHggUXVldWUgMiBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgRTEwMDBfRUlDUl9UWF9RVUVVRTMgICAgMHgwMDAwMDgwMCAvKiBUeCBRdWV1ZSAzIEludGVycnVwdCAqLwotI2RlZmluZSBFMTAwMF9FSUNSX1RDUF9USU1FUiAgICAweDQwMDAwMDAwIC8qIFRDUCBUaW1lciAqLwogI2RlZmluZSBFMTAwMF9FSUNSX09USEVSICAgICAgICAweDgwMDAwMDAwIC8qIEludGVycnVwdCBDYXVzZSBBY3RpdmUgKi8KIC8qIFRDUCBUaW1lciAqLwogCkBAIC00NDEsMTcgKzM1OSwxOSBAQAogICAgIEUxMDAwX0lNU19UWERXICAgfCAgICBcCiAgICAgRTEwMDBfSU1TX1JYRE1UMCB8ICAgIFwKICAgICBFMTAwMF9JTVNfUlhTRVEgIHwgICAgXAotICAgIEUxMDAwX0lNU19MU0MpCisgICAgRTEwMDBfSU1TX0xTQyAgICB8ICAgIFwKKyAgICBFMTAwMF9JTVNfRE9VVFNZTkMpCiAKIC8qIEludGVycnVwdCBNYXNrIFNldCAqLwogI2RlZmluZSBFMTAwMF9JTVNfVFhEVyAgICAgIEUxMDAwX0lDUl9UWERXICAgICAgLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KICNkZWZpbmUgRTEwMDBfSU1TX0xTQyAgICAgICBFMTAwMF9JQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBFMTAwMF9JTVNfVk1NQiAgICAgIEUxMDAwX0lDUl9WTU1CICAgICAgLyogTWFpbCBib3ggYWN0aXZpdHkgKi8KICNkZWZpbmUgRTEwMDBfSU1TX1JYU0VRICAgICBFMTAwMF9JQ1JfUlhTRVEgICAgIC8qIHJ4IHNlcXVlbmNlIGVycm9yICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWERNVDAgICAgRTEwMDBfSUNSX1JYRE1UMCAgICAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWFQwICAgICAgRTEwMDBfSUNSX1JYVDAgICAgICAvKiByeCB0aW1lciBpbnRyICovCisjZGVmaW5lIEUxMDAwX0lNU19ET1VUU1lOQyAgRTEwMDBfSUNSX0RPVVRTWU5DIC8qIE5JQyBETUEgb3V0IG9mIHN5bmMgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgU2V0ICovCi0jZGVmaW5lIEUxMDAwX0VJTVNfVENQX1RJTUVSICAgIEUxMDAwX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwogI2RlZmluZSBFMTAwMF9FSU1TX09USEVSICAgICAgICBFMTAwMF9FSUNSX09USEVSICAgLyogSW50ZXJydXB0IENhdXNlIEFjdGl2ZSAqLwogCiAvKiBJbnRlcnJ1cHQgQ2F1c2UgU2V0ICovCkBAIC00ODEsNiArNDAxLDEwIEBACiAgKiBtYW5hZ2VhYmlsaXR5IGVuYWJsZWQsIGFsbG93aW5nIHVzIHJvb20gZm9yIDE1IG11bHRpY2FzdCBhZGRyZXNzZXMuCiAgKi8KICNkZWZpbmUgRTEwMDBfUkFIX0FWICAweDgwMDAwMDAwICAgICAgICAvKiBSZWNlaXZlIGRlc2NyaXB0b3IgdmFsaWQgKi8KKyNkZWZpbmUgRTEwMDBfUkFMX01BQ19BRERSX0xFTiA0CisjZGVmaW5lIEUxMDAwX1JBSF9NQUNfQUREUl9MRU4gMgorI2RlZmluZSBFMTAwMF9SQUhfUE9PTF9NQVNLIDB4MDNGQzAwMDAKKyNkZWZpbmUgRTEwMDBfUkFIX1BPT0xfMSAweDAwMDQwMDAwCiAKIC8qIEVycm9yIENvZGVzICovCiAjZGVmaW5lIEUxMDAwX0VSUl9OVk0gICAgICAxCkBAIC00OTAsMTAgKzQxNCwxMCBAQAogI2RlZmluZSBFMTAwMF9FUlJfTUFDX0lOSVQgNQogI2RlZmluZSBFMTAwMF9FUlJfUkVTRVQgICA5CiAjZGVmaW5lIEUxMDAwX0VSUl9NQVNURVJfUkVRVUVTVFNfUEVORElORyAxMAotI2RlZmluZSBFMTAwMF9FUlJfSE9TVF9JTlRFUkZBQ0VfQ09NTUFORCAxMQogI2RlZmluZSBFMTAwMF9CTEtfUEhZX1JFU0VUICAgMTIKICNkZWZpbmUgRTEwMDBfRVJSX1NXRldfU1lOQyAxMwogI2RlZmluZSBFMTAwMF9OT1RfSU1QTEVNRU5URUQgMTQKKyNkZWZpbmUgRTEwMDBfRVJSX01CWCAgICAgIDE1CiAKIC8qIExvb3AgbGltaXQgb24gaG93IGxvbmcgd2Ugd2FpdCBmb3IgYXV0by1uZWdvdGlhdGlvbiB0byBjb21wbGV0ZSAqLwogI2RlZmluZSBDT1BQRVJfTElOS19VUF9MSU1JVCAgICAgICAgICAgICAgMTAKQEAgLTUxMCwzMCArNDM0LDkgQEAKIC8qIEZsb3cgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9GQ1JUTF9YT05FIDB4ODAwMDAwMDAgICAgIC8qIEVuYWJsZSBYT04gZnJhbWUgdHJhbnNtaXNzaW9uICovCiAKLS8qIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gV29yZCAqLwotI2RlZmluZSBFMTAwMF9UWENXX0FORSAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgLyogQXV0by1uZWcgZW5hYmxlICovCi0KLS8qIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBXb3JkICovCi0KLS8qIFBDSSBFeHByZXNzIENvbnRyb2wgKi8KLSNkZWZpbmUgRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEUxMDAwX0dDUl9SWERTQ1dfTk9fU05PT1AgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBFMTAwMF9HQ1JfUlhEU0NSX05PX1NOT09QICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRTEwMDBfR0NSX1RYRF9OT19TTk9PUCAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEUxMDAwX0dDUl9UWERTQ1dfTk9fU05PT1AgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBFMTAwMF9HQ1JfVFhEU0NSX05PX1NOT09QICAgICAgIDB4MDAwMDAwMjAKLQotI2RlZmluZSBQQ0lFX05PX1NOT09QX0FMTCAoRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAgICAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1JYRFNDV19OT19TTk9PUCAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1JYRFNDUl9OT19TTk9PUCAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1RYRF9OT19TTk9PUCAgICAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1RYRFNDV19OT19TTk9PUCAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUCkKLQogLyogUEhZIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgMHgwMTAwICAvKiBGRFggPTEsIGhhbGYgZHVwbGV4ID0wICovCiAjZGVmaW5lIE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHIDB4MDIwMCAgLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCi0jZGVmaW5lIE1JSV9DUl9QT1dFUl9ET1dOICAgICAgIDB4MDgwMCAgLyogUG93ZXIgZG93biAqLwogI2RlZmluZSBNSUlfQ1JfQVVUT19ORUdfRU4gICAgICAweDEwMDAgIC8qIEF1dG8gTmVnIEVuYWJsZSAqLwogI2RlZmluZSBNSUlfQ1JfTE9PUEJBQ0sgICAgICAgICAweDQwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBsb29wYmFjayAqLwogI2RlZmluZSBNSUlfQ1JfUkVTRVQgICAgICAgICAgICAweDgwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBQSFkgcmVzZXQgKi8KQEAgLTYwOSw2ICs1MTIsNyBAQAogI2RlZmluZSBOVk1fSURfTEVEX1NFVFRJTkdTICAgICAgICAweDAwMDQKIC8qIEZvciBTRVJERVMgb3V0cHV0IGFtcGxpdHVkZSBhZGp1c3RtZW50LiAqLwogI2RlZmluZSBOVk1fSU5JVF9DT05UUk9MMl9SRUcgICAgICAweDAwMEYKKyNkZWZpbmUgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9CICAgMHgwMDE0CiAjZGVmaW5lIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSAgIDB4MDAyNAogI2RlZmluZSBOVk1fQUxUX01BQ19BRERSX1BUUiAgICAgICAweDAwMzcKICNkZWZpbmUgTlZNX0NIRUNLU1VNX1JFRyAgICAgICAgICAgMHgwMDNGCkBAIC02NjMsMTAgKzU2Nyw4IEBACiAjZGVmaW5lIElHUF9MRUQzX01PREUgICAgICAgICAgIDB4MDcwMDAwMDAKIAogLyogUENJL1BDSS1YL1BDSS1FWCBDb25maWcgc3BhY2UgKi8KLSNkZWZpbmUgUENJX0hFQURFUl9UWVBFX1JFR0lTVEVSICAgICAweDBFCiAjZGVmaW5lIFBDSUVfTElOS19TVEFUVVMgICAgICAgICAgICAgMHgxMgogCi0jZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9NVUxUSUZVTkMgICAgMHg4MAogI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfTUFTSyAgICAgICAgIDB4M0YwCiAjZGVmaW5lIFBDSUVfTElOS19XSURUSF9TSElGVCAgICAgICAgNAogCkBAIC03NjMsNCArNjY1LDggQEAKICNkZWZpbmUgRTEwMDBfR0VOX0NUTF9BRERSRVNTX1NISUZUICAgICA4CiAjZGVmaW5lIEUxMDAwX0dFTl9QT0xMX1RJTUVPVVQgICAgICAgICAgNjQwCiAKKyNkZWZpbmUgRTEwMDBfVkZUQV9FTlRSWV9TSElGVCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRTEwMDBfVkZUQV9FTlRSWV9NQVNLICAgICAgICAgICAgICAgIDB4N0YKKyNkZWZpbmUgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyAgICAgIDB4MUYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCmluZGV4IDk5NTA0YTYuLjY4YWFjMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwX3JlZ3MuaCIKICNpbmNsdWRlICJlMTAwMF9kZWZpbmVzLmgiCiAKQEAgLTQxLDYgKzQwLDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2ICAgICAgICAgICAgICAgICAgICAweDEwQzkKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSICAgICAgICAgICAgICAweDEwRTYKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyAgICAgICAgICAgICAweDEwRTcKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSICAgICAgICAweDEwRTgKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X05TICAgICAgICAgICAgICAgICAweDE1MEEKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfQ09QUEVSICAgICAgICAgICAweDEwQTcKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTICAgICAweDEwQTkKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIgICAgICAweDEwRDYKQEAgLTE0NCwxNDQgKzE0NSw2IEBACiAJZTEwMDBfZmNfZGVmYXVsdCA9IDB4RkYKIH07CiAKLQotLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7Ci0JX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KLQlfX2xlMTYgbGVuZ3RoOyAgICAgIC8qIExlbmd0aCBvZiBkYXRhIERNQWVkIGludG8gZGF0YSBidWZmZXIgKi8KLQlfX2xlMTYgY3N1bTsgICAgICAgIC8qIFBhY2tldCBjaGVja3N1bSAqLwotCXU4ICBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KLQl1OCAgZXJyb3JzOyAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCi0JX19sZTE2IHNwZWNpYWw7Ci19OwotCi0vKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBFeHRlbmRlZCAqLwotdW5pb24gZTEwMDBfcnhfZGVzY19leHRlbmRlZCB7Ci0Jc3RydWN0IHsKLQkJX19sZTY0IGJ1ZmZlcl9hZGRyOwotCQlfX2xlNjQgcmVzZXJ2ZWQ7Ci0JfSByZWFkOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgbXJxOyAgICAgICAgICAgICAgLyogTXVsdGlwbGUgUnggUXVldWVzICovCi0JCQl1bmlvbiB7Ci0JCQkJX19sZTMyIHJzczsgICAgICAgICAgICAvKiBSU1MgSGFzaCAqLwotCQkJCXN0cnVjdCB7Ci0JCQkJCV9fbGUxNiBpcF9pZDsgIC8qIElQIGlkICovCi0JCQkJCV9fbGUxNiBjc3VtOyAgIC8qIFBhY2tldCBDaGVja3N1bSAqLwotCQkJCX0gY3N1bV9pcDsKLQkJCX0gaGlfZHdvcmQ7Ci0JCX0gbG93ZXI7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLwotCQkJX19sZTE2IGxlbmd0aDsKLQkJCV9fbGUxNiB2bGFuOyAgICAgICAgICAgICAvKiBWTEFOIHRhZyAqLwotCQl9IHVwcGVyOwotCX0gd2I7ICAvKiB3cml0ZWJhY2sgKi8KLX07Ci0KLSNkZWZpbmUgTUFYX1BTX0JVRkZFUlMgNAotLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gUGFja2V0IFNwbGl0ICovCi11bmlvbiBlMTAwMF9yeF9kZXNjX3BhY2tldF9zcGxpdCB7Ci0Jc3RydWN0IHsKLQkJLyogb25lIGJ1ZmZlciBmb3IgcHJvdG9jb2wgaGVhZGVyKHMpLCB0aHJlZSBkYXRhIGJ1ZmZlcnMgKi8KLQkJX19sZTY0IGJ1ZmZlcl9hZGRyW01BWF9QU19CVUZGRVJTXTsKLQl9IHJlYWQ7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBtcnE7ICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBSeCBRdWV1ZXMgKi8KLQkJCXVuaW9uIHsKLQkJCQlfX2xlMzIgcnNzOyAgICAgICAgICAgICAgLyogUlNTIEhhc2ggKi8KLQkJCQlzdHJ1Y3QgewotCQkJCQlfX2xlMTYgaXBfaWQ7ICAgIC8qIElQIGlkICovCi0JCQkJCV9fbGUxNiBjc3VtOyAgICAgLyogUGFja2V0IENoZWNrc3VtICovCi0JCQkJfSBjc3VtX2lwOwotCQkJfSBoaV9kd29yZDsKLQkJfSBsb3dlcjsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBzdGF0dXNfZXJyb3I7ICAgICAvKiBleHQgc3RhdHVzL2Vycm9yICovCi0JCQlfX2xlMTYgbGVuZ3RoMDsgICAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlciAwICovCi0JCQlfX2xlMTYgdmxhbjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KLQkJfSBtaWRkbGU7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgaGVhZGVyX3N0YXR1czsKLQkJCV9fbGUxNiBsZW5ndGhbM107ICAgICAgICAvKiBsZW5ndGggb2YgYnVmZmVycyAxLTMgKi8KLQkJfSB1cHBlcjsKLQkJX19sZTY0IHJlc2VydmVkOwotCX0gd2I7IC8qIHdyaXRlYmFjayAqLwotfTsKLQotLyogVHJhbnNtaXQgRGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX3R4X2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgICAgICAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KLQl1bmlvbiB7Ci0JCV9fbGUzMiBkYXRhOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCi0JCQl1OCBjc287ICAgICAgICAvKiBDaGVja3N1bSBvZmZzZXQgKi8KLQkJCXU4IGNtZDsgICAgICAgIC8qIERlc2NyaXB0b3IgY29udHJvbCAqLwotCQl9IGZsYWdzOwotCX0gbG93ZXI7Ci0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JCQl1OCBjc3M7ICAgICAgICAvKiBDaGVja3N1bSBzdGFydCAqLwotCQkJX19sZTE2IHNwZWNpYWw7Ci0JCX0gZmllbGRzOwotCX0gdXBwZXI7Ci19OwotCi0vKiBPZmZsb2FkIENvbnRleHQgRGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX2NvbnRleHRfZGVzYyB7Ci0JdW5pb24gewotCQlfX2xlMzIgaXBfY29uZmlnOwotCQlzdHJ1Y3QgewotCQkJdTggaXBjc3M7ICAgICAgLyogSVAgY2hlY2tzdW0gc3RhcnQgKi8KLQkJCXU4IGlwY3NvOyAgICAgIC8qIElQIGNoZWNrc3VtIG9mZnNldCAqLwotCQkJX19sZTE2IGlwY3NlOyAgICAgLyogSVAgY2hlY2tzdW0gZW5kICovCi0JCX0gaXBfZmllbGRzOwotCX0gbG93ZXJfc2V0dXA7Ci0JdW5pb24gewotCQlfX2xlMzIgdGNwX2NvbmZpZzsKLQkJc3RydWN0IHsKLQkJCXU4IHR1Y3NzOyAgICAgIC8qIFRDUCBjaGVja3N1bSBzdGFydCAqLwotCQkJdTggdHVjc287ICAgICAgLyogVENQIGNoZWNrc3VtIG9mZnNldCAqLwotCQkJX19sZTE2IHR1Y3NlOyAgICAgLyogVENQIGNoZWNrc3VtIGVuZCAqLwotCQl9IHRjcF9maWVsZHM7Ci0JfSB1cHBlcl9zZXR1cDsKLQlfX2xlMzIgY21kX2FuZF9sZW5ndGg7Ci0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JCQl1OCBoZHJfbGVuOyAgICAvKiBIZWFkZXIgbGVuZ3RoICovCi0JCQlfX2xlMTYgbXNzOyAgICAgICAvKiBNYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLwotCQl9IGZpZWxkczsKLQl9IHRjcF9zZWdfc2V0dXA7Ci19OwotCi0vKiBPZmZsb2FkIGRhdGEgZGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX2RhdGFfZGVzYyB7Ci0JX19sZTY0IGJ1ZmZlcl9hZGRyOyAgIC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBidWZmZXIgYWRkcmVzcyAqLwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgbGVuZ3RoOyAgICAvKiBEYXRhIGJ1ZmZlciBsZW5ndGggKi8KLQkJCXU4IHR5cF9sZW5fZXh0OwotCQkJdTggY21kOwotCQl9IGZsYWdzOwotCX0gbG93ZXI7Ci0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JCQl1OCBwb3B0czsgICAgICAvKiBQYWNrZXQgT3B0aW9ucyAqLwotCQkJX19sZTE2IHNwZWNpYWw7Ci0JCX0gZmllbGRzOwotCX0gdXBwZXI7Ci19OwotCiAvKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbGxlY3RlZCBieSB0aGUgTUFDICovCiBzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgewogCXU2NCBjcmNlcnJzOwpAQCAtMzU5LDYgKzIyMiw3IEBACiAJdTY0IGxlbmVycnM7CiAJdTY0IHNjdnBjOwogCXU2NCBocm1wYzsKKwl1NjQgZG9vc3luYzsKIH07CiAKIHN0cnVjdCBlMTAwMF9waHlfc3RhdHMgewpAQCAtNDA5LDYgKzI3Myw3IEBACiAjaW5jbHVkZSAiZTEwMDBfbWFjLmgiCiAjaW5jbHVkZSAiZTEwMDBfcGh5LmgiCiAjaW5jbHVkZSAiZTEwMDBfbnZtLmgiCisjaW5jbHVkZSAiZTEwMDBfbWJ4LmgiCiAKIHN0cnVjdCBlMTAwMF9tYWNfb3BlcmF0aW9ucyB7CiAJczMyICAoKmNoZWNrX2Zvcl9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CkBAIC00MjIsMjUgKzI4NywyNSBAQAogfTsKIAogc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIHsKLQlzMzIgICgqYWNxdWlyZV9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqYWNxdWlyZSkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpjaGVja19yZXNldF9ibG9jaykoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpmb3JjZV9zcGVlZF9kdXBsZXgpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X2NmZ19kb25lKShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAlzMzIgICgqZ2V0X2NhYmxlX2xlbmd0aCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpnZXRfcGh5X2luZm8pKHN0cnVjdCBlMTAwMF9odyAqKTsKLQlzMzIgICgqcmVhZF9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYgKik7Ci0Jdm9pZCAoKnJlbGVhc2VfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKnJlc2V0X3BoeSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpyZWFkX3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2ICopOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZTEwMDBfaHcgKik7CisJczMyICAoKnJlc2V0KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnNldF9kMF9scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7CiAJczMyICAoKnNldF9kM19scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7Ci0JczMyICAoKndyaXRlX3BoeV9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNik7CisJczMyICAoKndyaXRlX3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2KTsKIH07CiAKIHN0cnVjdCBlMTAwMF9udm1fb3BlcmF0aW9ucyB7Ci0JczMyICAoKmFjcXVpcmVfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKnJlYWRfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKLQl2b2lkICgqcmVsZWFzZV9udm0pKHN0cnVjdCBlMTAwMF9odyAqKTsKLQlzMzIgICgqd3JpdGVfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKKwlzMzIgICgqYWNxdWlyZSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpyZWFkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCp3cml0ZSkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfaW5mbyB7CkBAIC00ODMsNyArMzQ4LDYgQEAKIAlib29sIGFzZl9maXJtd2FyZV9wcmVzZW50OwogCWJvb2wgYXV0b25lZzsKIAlib29sIGF1dG9uZWdfZmFpbGVkOwotCWJvb2wgZGlzYWJsZV9hdjsKIAlib29sIGRpc2FibGVfaHdfaW5pdF9iaXRzOwogCWJvb2wgZ2V0X2xpbmtfc3RhdHVzOwogCWJvb2wgaWZzX3BhcmFtc19mb3JjZWQ7CkBAIC01NjUsOSArNDI5LDQwIEBACiAJZW51bSBlMTAwMF9mY190eXBlIG9yaWdpbmFsX3R5cGU7CiB9OwogCitzdHJ1Y3QgZTEwMDBfbWJ4X29wZXJhdGlvbnMgeworCXMzMiAoKmluaXRfcGFyYW1zKShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKwlzMzIgKCpyZWFkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgIHUxNik7CisJczMyICgqd3JpdGUpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworCXMzMiAoKnJlYWRfcG9zdGVkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgIHUxNik7CisJczMyICgqd3JpdGVfcG9zdGVkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfbXNnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfYWNrKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfcnN0KShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK307CisKK3N0cnVjdCBlMTAwMF9tYnhfc3RhdHMgeworCXUzMiBtc2dzX3R4OworCXUzMiBtc2dzX3J4OworCisJdTMyIGFja3M7CisJdTMyIHJlcXM7CisJdTMyIHJzdHM7Cit9OworCitzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8geworCXN0cnVjdCBlMTAwMF9tYnhfb3BlcmF0aW9ucyBvcHM7CisJc3RydWN0IGUxMDAwX21ieF9zdGF0cyBzdGF0czsKKwl1MzIgdGltZW91dDsKKwl1MzIgdXNlY19kZWxheTsKKwl1MTYgc2l6ZTsKK307CisKK3N0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSB7CisJYm9vbCBzZ21paV9hY3RpdmU7Cit9OworCiBzdHJ1Y3QgZTEwMDBfaHcgewogCXZvaWQgKmJhY2s7Ci0Jdm9pZCAqZGV2X3NwZWM7CiAKIAl1OCBfX2lvbWVtICpod19hZGRyOwogCXU4IF9faW9tZW0gKmZsYXNoX2FkZHJlc3M7CkBAIC01NzgsOSArNDczLDEyIEBACiAJc3RydWN0IGUxMDAwX3BoeV9pbmZvICBwaHk7CiAJc3RydWN0IGUxMDAwX252bV9pbmZvICBudm07CiAJc3RydWN0IGUxMDAwX2J1c19pbmZvICBidXM7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvIG1ieDsKIAlzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfZGhjcF9jb29raWUgbW5nX2Nvb2tpZTsKIAotCXUzMiBkZXZfc3BlY19zaXplOworCXVuaW9uIHsKKwkJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1CV84MjU3NTsKKwl9IGRldl9zcGVjOwogCiAJdTE2IGRldmljZV9pZDsKIAl1MTYgc3Vic3lzdGVtX3ZlbmRvcl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwppbmRleCA5N2YwMDQ5Li5mNGMzMTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzcsMTkgKzM3LDYgQEAKIHN0YXRpYyBzMzIgaWdiX3NldF9kZWZhdWx0X2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBpZ2Jfc2V0X2ZjX3dhdGVybWFya3Moc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKLS8qKgotICogIGlnYl9yZW1vdmVfZGV2aWNlIC0gRnJlZSBkZXZpY2Ugc3BlY2lmaWMgc3RydWN0dXJlCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqCi0gKiAgSWYgYSBkZXZpY2Ugc3BlY2lmaWMgc3RydWN0dXJlIHdhcyBhbGxvY2F0ZWQsIHRoaXMgZnVuY3Rpb24gd2lsbAotICogIGZyZWUgaXQuCi0gKiovCi12b2lkIGlnYl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBlMTAwMF9odyAqaHcpCi17Ci0JLyogRnJlZWluZyB0aGUgZGV2X3NwZWMgbWVtYmVyIG9mIGUxMDAwX2h3IHN0cnVjdHVyZSAqLwotCWtmcmVlKGh3LT5kZXZfc3BlYyk7Ci19Ci0KIHN0YXRpYyBzMzIgaWdiX3JlYWRfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CkBAIC0xMzEsNiArMTE4LDM3IEBACiB9CiAKIC8qKgorICogIGlnYl92ZnRhX3NldCAtIGVuYWJsZSBvciBkaXNhYmxlIHZsYW4gaW4gVkxBTiBmaWx0ZXIgdGFibGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2aWQ6IFZMQU4gaWQgdG8gYWRkIG9yIHJlbW92ZQorICogIEBhZGQ6IGlmIHRydWUgYWRkIGZpbHRlciwgaWYgZmFsc2UgcmVtb3ZlCisgKgorICogIFNldHMgb3IgY2xlYXJzIGEgYml0IGluIHRoZSBWTEFOIGZpbHRlciB0YWJsZSBhcnJheSBiYXNlZCBvbiBWTEFOIGlkCisgKiAgYW5kIGlmIHdlIGFyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgdGhlIGZpbHRlcgorICoqLworczMyIGlnYl92ZnRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgdmlkLCBib29sIGFkZCkKK3sKKwl1MzIgaW5kZXggPSAodmlkID4+IEUxMDAwX1ZGVEFfRU5UUllfU0hJRlQpICYgRTEwMDBfVkZUQV9FTlRSWV9NQVNLOworCXUzMiBtYXNrID0gMSA8PCAodmlkICYgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyk7CisJdTMyIHZmdGEgPSBhcnJheV9yZDMyKEUxMDAwX1ZGVEEsIGluZGV4KTsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwkvKiBiaXQgd2FzIHNldC9jbGVhcmVkIGJlZm9yZSB3ZSBzdGFydGVkICovCisJaWYgKCghISh2ZnRhICYgbWFzaykpID09IGFkZCkgeworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9DT05GSUc7CisJfSBlbHNlIHsKKwkJaWYgKGFkZCkKKwkJCXZmdGEgfD0gbWFzazsKKwkJZWxzZQorCQkJdmZ0YSAmPSB+bWFzazsKKwl9CisKKwlpZ2Jfd3JpdGVfdmZ0YShodywgaW5kZXgsIHZmdGEpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGlnYl9jaGVja19hbHRfbWFjX2FkZHIgLSBDaGVjayBmb3IgYWx0ZXJuYXRlIE1BQyBhZGRyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0xNDgsNyArMTY2LDcgQEAKIAl1MTYgb2Zmc2V0LCBudm1fYWx0X21hY19hZGRyX29mZnNldCwgbnZtX2RhdGE7CiAJdTggYWx0X21hY19hZGRyW0VUSF9BTEVOXTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX0FMVF9NQUNfQUREUl9QVFIsIDEsCisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9BTFRfTUFDX0FERFJfUFRSLCAxLAogCQkJCSAmbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwpAQCAtMTY1LDcgKzE4Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkgKz0gMikgewogCQlvZmZzZXQgPSBudm1fYWx0X21hY19hZGRyX29mZnNldCArIChpID4+IDEpOwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CkBAIC0yMTMsNyArMjMxLDggQEAKIAogCXJhcl9oaWdoID0gKCh1MzIpIGFkZHJbNF0gfCAoKHUzMikgYWRkcls1XSA8PCA4KSk7CiAKLQlpZiAoIWh3LT5tYWMuZGlzYWJsZV9hdikKKwkvKiBJZiBNQUMgYWRkcmVzcyB6ZXJvLCBubyBuZWVkIHRvIHNldCB0aGUgQVYgYml0ICovCisJaWYgKHJhcl9sb3cgfHwgcmFyX2hpZ2gpCiAJCXJhcl9oaWdoIHw9IEUxMDAwX1JBSF9BVjsKIAogCXdyMzIoRTEwMDBfUkFMKGluZGV4KSwgcmFyX2xvdyk7CkBAIC01ODgsOCArNjA3LDcgQEAKIAkgKiBjb250cm9sIHNldHRpbmcsIHRoZW4gdGhlIHZhcmlhYmxlIGh3LT5mYyB3aWxsCiAJICogYmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gYSB2YWx1ZSBpbiB0aGUgRUVQUk9NLgogCSAqLwotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX0lOSVRfQ09OVFJPTDJfUkVHLCAxLAotCQkJCSAgICAgICAmbnZtX2RhdGEpOworCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MMl9SRUcsIDEsICZudm1fZGF0YSk7CiAKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKQEAgLTcyMCwxMSArNzM4LDExIEBACiAJCSAqIGhhcyBjb21wbGV0ZWQuICBXZSByZWFkIHRoaXMgdHdpY2UgYmVjYXVzZSB0aGlzIHJlZyBoYXMKIAkJICogc29tZSAic3RpY2t5IiAobGF0Y2hlZCkgYml0cy4KIAkJICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywKIAkJCQkJCSAgICZtaWlfc3RhdHVzX3JlZyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywKIAkJCQkJCSAgICZtaWlfc3RhdHVzX3JlZyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC03NDIsMTEgKzc2MCwxMSBAQAogCQkgKiBQYWdlIEFiaWxpdHkgUmVnaXN0ZXIgKEFkZHJlc3MgNSkgdG8gZGV0ZXJtaW5lIGhvdwogCQkgKiBmbG93IGNvbnRyb2wgd2FzIG5lZ290aWF0ZWQuCiAJCSAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAogCQkJCQkgICAgJm1paV9ud2F5X2Fkdl9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfTFBfQUJJTElUWSwKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfTFBfQUJJTElUWSwKIAkJCQkJICAgICZtaWlfbndheV9scF9hYmlsaXR5X3JlZyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC0xMDQxLDcgKzEwNTksNyBAQAogewogCXMzMiByZXRfdmFsOwogCi0JcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBOVk1fSURfTEVEX1NFVFRJTkdTLCAxLCBkYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX0lEX0xFRF9TRVRUSU5HUywgMSwgZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCmluZGV4IGNiZWU2YWYuLmEzNGRlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC01OCwxMiArNTgsMTIgQEAKIAogdm9pZCBpZ2JfY2xlYXJfaHdfY250cnNfYmFzZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX2NsZWFyX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl92ZnRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgdmlkLCBib29sIGFkZCk7CiB2b2lkIGlnYl9jb25maWdfY29sbGlzaW9uX2Rpc3Qoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKIHZvaWQgaWdiX3B1dF9od19zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICphZGRyLCB1MzIgaW5kZXgpOwogczMyICBpZ2JfY2hlY2tfYWx0X21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotdm9pZCBpZ2JfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3Jlc2V0X2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfdXBkYXRlX2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2Jfd3JpdGVfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpOwpAQCAtODMsMTMgKzgzLDggQEAKICNkZWZpbmUgRTEwMDBfRldTTV9NT0RFX01BU0sgIDB4RQogI2RlZmluZSBFMTAwMF9GV1NNX01PREVfU0hJRlQgMQogCi0jZGVmaW5lIEUxMDAwX01OR19ESENQX0NPTU1BTkRfVElNRU9VVCAgICAgICAxMAogI2RlZmluZSBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4gICAgMHgyCiAKLSNkZWZpbmUgRTEwMDBfSElDUl9FTiAgICAgICAgICAgICAgMHgwMSAgLyogRW5hYmxlIGJpdCAtIFJPICovCi0vKiBEcml2ZXIgc2V0cyB0aGlzIGJpdCB3aGVuIGRvbmUgdG8gcHV0IGNvbW1hbmQgaW4gUkFNICovCi0jZGVmaW5lIEUxMDAwX0hJQ1JfQyAgICAgICAgICAgICAgIDB4MDIKLQogZXh0ZXJuIHZvaWQgZTEwMDBfaW5pdF9mdW5jdGlvbl9wb2ludGVyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB1MzIgaWdiX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTcxYzdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5jCkBAIC0wLDAgKzEsNDQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImUxMDAwX21ieC5oIgorCisvKioKKyAqICBpZ2JfcmVhZF9tYnggLSBSZWFkcyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHJlYWQKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWx5IHJlYWQgbWVzc2FnZSBmcm9tIGJ1ZmZlcgorICoqLworczMyIGlnYl9yZWFkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJLyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggKi8KKwlpZiAoc2l6ZSA+IG1ieC0+c2l6ZSkKKwkJc2l6ZSA9IG1ieC0+c2l6ZTsKKworCWlmIChtYngtPm9wcy5yZWFkKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl93cml0ZV9tYnggLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlcgorICoqLworczMyIGlnYl93cml0ZV9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAwOworCisJaWYgKHNpemUgPiBtYngtPnNpemUpCisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWVsc2UgaWYgKG1ieC0+b3BzLndyaXRlKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX21zZyAtIGNoZWNrcyB0byBzZWUgaWYgc29tZW9uZSBzZW50IHVzIG1haWwKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gY2hlY2sKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBTdGF0dXMgYml0IHdhcyBmb3VuZCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3MzMiBpZ2JfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfbXNnKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX2FjayAtIGNoZWNrcyB0byBzZWUgaWYgc29tZW9uZSBzZW50IHVzIEFDSworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGlnYl9jaGVja19mb3JfYWNrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfcnN0IC0gY2hlY2tzIHRvIHNlZSBpZiBvdGhlciBzaWRlIGhhcyByZXNldAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGlnYl9jaGVja19mb3JfcnN0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QpCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfcnN0KGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9wb2xsX2Zvcl9tc2cgLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3BvbGxfZm9yX21zZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghbWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAobWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKSkgeworCQlpZiAoIWNvdW50ZG93bikKKwkJCWJyZWFrOworCQljb3VudGRvd24tLTsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogLUUxMDAwX0VSUl9NQlg7Cit9CisKKy8qKgorICogIGlnYl9wb2xsX2Zvcl9hY2sgLSBXYWl0IGZvciBtZXNzYWdlIGFja25vd2xlZGdlbWVudAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3BvbGxfZm9yX2FjayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghbWJ4LT5vcHMuY2hlY2tfZm9yX2FjaykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAobWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKSkgeworCQlpZiAoIWNvdW50ZG93bikKKwkJCWJyZWFrOworCQljb3VudGRvd24tLTsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogLUUxMDAwX0VSUl9NQlg7Cit9CisKKy8qKgorICogIGlnYl9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZAorICogIGNvcGllZCBpdCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAqKi8KK3MzMiBpZ2JfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAoIW1ieC0+b3BzLnJlYWQpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGlnYl9wb2xsX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBtYngtPm9wcy5yZWFkKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlciBhbmQKKyAqICByZWNlaXZlZCBhbiBhY2sgdG8gdGhhdCBtZXNzYWdlIHdpdGhpbiBkZWxheSAqIHRpbWVvdXQgcGVyaW9kCisgKiovCitzMzIgaWdiX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAwOworCisJaWYgKCFtYngtPm9wcy53cml0ZSkKKwkJZ290byBvdXQ7CisKKwkvKiBzZW5kIG1zZyovCisJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CisKKwkvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gaWdiX3BvbGxfZm9yX2FjayhodywgbWJ4X2lkKTsKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgZTEwMDBfaW5pdF9tYnhfb3BzX2dlbmVyaWMgLSBJbml0aWFsaXplIE5WTSBmdW5jdGlvbiBwb2ludGVycworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFNldHVwcyB1cCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gbm8tb3AgZnVuY3Rpb25zCisgKiovCit2b2lkIGUxMDAwX2luaXRfbWJ4X29wc19nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwltYngtPm9wcy5yZWFkX3Bvc3RlZCA9IGlnYl9yZWFkX3Bvc3RlZF9tYng7CisJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaWdiX3dyaXRlX3Bvc3RlZF9tYng7Cit9CisKK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9iaXRfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG1hc2spCit7CisJdTMyIG1idmZpY3IgPSByZDMyKEUxMDAwX01CVkZJQ1IpOworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAobWJ2ZmljciAmIG1hc2spIHsKKwkJcmV0X3ZhbCA9IDA7CisJCXdyMzIoRTEwMDBfTUJWRklDUiwgbWFzayk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfbXNnX3BmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgVkYgaGFzIHNlbnQgbWFpbAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9tc2dfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKCFpZ2JfY2hlY2tfZm9yX2JpdF9wZihodywgRTEwMDBfTUJWRklDUl9WRlJFUV9WRjEgPDwgdmZfbnVtYmVyKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5yZXFzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfYWNrX3BmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgVkYgaGFzIEFDS2VkCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpZ2JfY2hlY2tfZm9yX2Fja19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAoIWlnYl9jaGVja19mb3JfYml0X3BmKGh3LCBFMTAwMF9NQlZGSUNSX1ZGQUNLX1ZGMSA8PCB2Zl9udW1iZXIpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLmFja3MrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9yc3RfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfcnN0X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJdTMyIHZmbHJlID0gcmQzMihFMTAwMF9WRkxSRSk7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmICh2ZmxyZSAmICgxIDw8IHZmX251bWJlcikpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCXdyMzIoRTEwMDBfVkZMUkUsICgxIDw8IHZmX251bWJlcikpOworCQlody0+bWJ4LnN0YXRzLnJzdHMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3dyaXRlX21ieF9wZiAtIFBsYWNlcyBhIG1lc3NhZ2UgaW4gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzdGF0aWMgczMyIGlnYl93cml0ZV9tYnhfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcDJ2X21haWxib3g7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBpOworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX1BGVSk7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvd25lcnNoaXAgbm93Li4uICovCisJcDJ2X21haWxib3ggPSByZDMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKCEocDJ2X21haWxib3ggJiBFMTAwMF9QMlZNQUlMQk9YX1BGVSkpIHsKKwkJLyogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwICovCisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKwkJZ290byBvdXRfbm9fd3JpdGU7CisJfQorCisJLyoKKwkgKiBmbHVzaCBhbnkgYWNrIG9yIG1zZyB3aGljaCBtYXkgYWxyZWFkeSBiZSBpbiB0aGUgcXVldWUKKwkgKiBhcyB0aGV5IGFyZSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhbiBlcnJvcgorCSAqLworCWlnYl9jaGVja19mb3JfYWNrX3BmKGh3LCB2Zl9udW1iZXIpOworCWlnYl9jaGVja19mb3JfbXNnX3BmKGh3LCB2Zl9udW1iZXIpOworCisJLyogY29weSB0aGUgY2FsbGVyIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlhcnJheV93cjMyKEUxMDAwX1ZNQk1FTSh2Zl9udW1iZXIpLCBpLCBtc2dbaV0pOworCisJLyogSW50ZXJydXB0IFZGIHRvIHRlbGwgaXQgYSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgYW5kIHJlbGVhc2UgYnVmZmVyKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9TVFMpOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3R4Kys7CisKK291dF9ub193cml0ZToKKwlyZXR1cm4gcmV0X3ZhbDsKKworfQorCisvKioKKyAqICBpZ2JfcmVhZF9tYnhfcGYgLSBSZWFkIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveCBidWZmZXIgdG8gdGhlIGNhbGxlcidzCisgKiAgbWVtb3J5IGJ1ZmZlci4gIFRoZSBwcmVzdW1wdGlvbiBpcyB0aGF0IHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGVyZSB3YXMKKyAqICBhIG1lc3NhZ2UgZHVlIHRvIGEgVkYgcmVxdWVzdCBzbyBubyBwb2xsaW5nIGZvciBtZXNzYWdlIGlzIG5lZWRlZC4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3JlYWRfbWJ4X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcDJ2X21haWxib3g7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBpOworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX1BGVSk7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvd25lcnNoaXAgbm93Li4uICovCisJcDJ2X21haWxib3ggPSByZDMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKCEocDJ2X21haWxib3ggJiBFMTAwMF9QMlZNQUlMQk9YX1BGVSkpIHsKKwkJLyogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwICovCisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKwkJZ290byBvdXRfbm9fcmVhZDsKKwl9CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQltc2dbaV0gPSBhcnJheV9yZDMyKEUxMDAwX1ZNQk1FTSh2Zl9udW1iZXIpLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBtZXNzYWdlIGFuZCByZWxlYXNlIGJ1ZmZlciAqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX0FDSyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfcngrKzsKKworCXJldF92YWwgPSAwOworCitvdXRfbm9fcmVhZDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgZTEwMDBfaW5pdF9tYnhfcGFyYW1zX3BmIC0gc2V0IGluaXRpYWwgdmFsdWVzIGZvciBwZiBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgSW5pdGlhbGl6ZXMgdGhlIGh3LT5tYnggc3RydWN0IHRvIGNvcnJlY3QgdmFsdWVzIGZvciBwZiBtYWlsYm94CisgKi8KK3MzMiBpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpIHsKKwkJbWJ4LT50aW1lb3V0ID0gMDsKKwkJbWJ4LT51c2VjX2RlbGF5ID0gMDsKKworCQltYngtPnNpemUgPSBFMTAwMF9WRk1BSUxCT1hfU0laRTsKKworCQltYngtPm9wcy5yZWFkID0gaWdiX3JlYWRfbWJ4X3BmOworCQltYngtPm9wcy53cml0ZSA9IGlnYl93cml0ZV9tYnhfcGY7CisJCW1ieC0+b3BzLnJlYWRfcG9zdGVkID0gaWdiX3JlYWRfcG9zdGVkX21ieDsKKwkJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaWdiX3dyaXRlX3Bvc3RlZF9tYng7CisJCW1ieC0+b3BzLmNoZWNrX2Zvcl9tc2cgPSBpZ2JfY2hlY2tfZm9yX21zZ19wZjsKKwkJbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayA9IGlnYl9jaGVja19mb3JfYWNrX3BmOworCQltYngtPm9wcy5jaGVja19mb3JfcnN0ID0gaWdiX2NoZWNrX2Zvcl9yc3RfcGY7CisKKwkJbWJ4LT5zdGF0cy5tc2dzX3R4ID0gMDsKKwkJbWJ4LT5zdGF0cy5tc2dzX3J4ID0gMDsKKwkJbWJ4LT5zdGF0cy5yZXFzID0gMDsKKwkJbWJ4LT5zdGF0cy5hY2tzID0gMDsKKwkJbWJ4LT5zdGF0cy5yc3RzID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzk4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0UxMDAwX01CWF9IXworI2RlZmluZSBfRTEwMDBfTUJYX0hfCisKKyNpbmNsdWRlICJlMTAwMF9ody5oIgorCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfU1RTICAgMHgwMDAwMDAwMSAvKiBJbml0aWF0ZSBtZXNzYWdlIHNlbmQgdG8gVkYgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfVkZVICAgMHgwMDAwMDAwNCAvKiBWRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1BGVSAgIDB4MDAwMDAwMDggLyogUEYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9SVkZVICAweDAwMDAwMDEwIC8qIFJlc2V0IFZGVSAtIHVzZWQgd2hlbiBWRiBzdHVjayAqLworCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZSRVFfTUFTSyAweDAwMDAwMEZGIC8qIGJpdHMgZm9yIFZGIG1lc3NhZ2VzICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZSRVFfVkYxICAweDAwMDAwMDAxIC8qIGJpdCBmb3IgVkYgMSBtZXNzYWdlICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZBQ0tfTUFTSyAweDAwRkYwMDAwIC8qIGJpdHMgZm9yIFZGIGFja3MgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUl9WRkFDS19WRjEgIDB4MDAwMTAwMDAgLyogYml0IGZvciBWRiAxIGFjayAqLworCisjZGVmaW5lIEUxMDAwX1ZGTUFJTEJPWF9TSVpFICAgMTYgLyogMTYgMzIgYml0IHdvcmRzIC0gNjQgYnl0ZXMgKi8KKworLyogSWYgaXQncyBhIEUxMDAwX1ZGXyogbXNnIHRoZW4gaXQgb3JpZ2luYXRlcyBpbiB0aGUgVkYgYW5kIGlzIHNlbnQgdG8gdGhlCisgKiBQRi4gIFRoZSByZXZlcnNlIGlzIHRydWUgaWYgaXQgaXMgRTEwMDBfUEZfKi4KKyAqIE1lc3NhZ2UgQUNLJ3MgYXJlIHRoZSB2YWx1ZSBvcidkIHdpdGggMHhGMDAwMDAwMAorICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR1RZUEVfQUNLICAgICAgMHg4MDAwMDAwMCAgLyogTWVzc2FnZXMgYmVsb3cgb3InZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBhcmUgdGhlIEFDSyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dUWVBFX05BQ0sgICAgIDB4NDAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBOQUNLICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR1RZUEVfQ1RTICAgICAgMHgyMDAwMDAwMCAgLyogSW5kaWNhdGVzIHRoYXQgVkYgaXMgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciB0byBzZW5kIHJlcXVlc3RzICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR0lORk9fU0hJRlQgICAgMTYKKy8qIGJpdHMgMjM6MTYgYXJlIHVzZWQgZm9yIGV4cmEgaW5mbyBmb3IgY2VydGFpbiBtZXNzYWdlcyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dJTkZPX01BU0sgICAgICgweEZGIDw8IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQpCisKKyNkZWZpbmUgRTEwMDBfVkZfUkVTRVQgICAgICAgICAgICAweDAxIC8qIFZGIHJlcXVlc3RzIHJlc2V0ICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9NQUNfQUREUiAgICAgMHgwMiAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUFDIGFkZHIgKi8KKyNkZWZpbmUgRTEwMDBfVkZfU0VUX01VTFRJQ0FTVCAgICAweDAzIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQyBhZGRyICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9WTEFOICAgICAgICAgMHgwNCAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVkxBTiAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfTFBFICAgICAgICAgIDB4MDUgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZNT0xSLkxQRSAqLworCisjZGVmaW5lIEUxMDAwX1BGX0NPTlRST0xfTVNHICAgICAgMHgwMTAwIC8qIFBGIGNvbnRyb2wgbWVzc2FnZSAqLworCitzMzIgaWdiX3JlYWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGlnYl93cml0ZV9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX3JlYWRfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2Jfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2JfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3MzMiBpZ2JfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3MzMiBpZ2JfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3MzMiBpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKHN0cnVjdCBlMTAwMF9odyAqKTsKKworI2VuZGlmIC8qIF9FMTAwMF9NQlhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYwppbmRleCBhODRlNGU0Li5hODhiZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNDE5LDcgKzQxOSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5hY3F1aXJlX252bShodyk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtNDY4LDcgKzQ2OCw3IEBACiAKIAltc2xlZXAoMTApOwogcmVsZWFzZToKLQlody0+bnZtLm9wcy5yZWxlYXNlX252bShodyk7CisJaHctPm52bS5vcHMucmVsZWFzZShodyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTQ4NywxNCArNDg3LDE0IEBACiAJczMyICByZXRfdmFsOwogCXUxNiBudm1fZGF0YTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX1BCQV9PRkZTRVRfMCwgMSwgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX1BCQV9PRkZTRVRfMCwgMSwgJm52bV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCSpwYXJ0X251bSA9ICh1MzIpKG52bV9kYXRhIDw8IDE2KTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX1BCQV9PRkZTRVRfMSwgMSwgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX1BCQV9PRkZTRVRfMSwgMSwgJm52bV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJZ290byBvdXQ7CkBAIC01MTUsMjkgKzUxNSwyMyBAQAogICoqLwogczMyIGlnYl9yZWFkX21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0JczMyICByZXRfdmFsID0gMDsKLQl1MTYgb2Zmc2V0LCBudm1fZGF0YSwgaTsKKwl1MzIgcmFyX2hpZ2g7CisJdTMyIHJhcl9sb3c7CisJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkgKz0gMikgewotCQlvZmZzZXQgPSBpID4+IDE7Ci0JCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgb2Zmc2V0LCAxLCAmbnZtX2RhdGEpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlody0+bWFjLnBlcm1fYWRkcltpXSA9ICh1OCkobnZtX2RhdGEgJiAweEZGKTsKLQkJaHctPm1hYy5wZXJtX2FkZHJbaSsxXSA9ICh1OCkobnZtX2RhdGEgPj4gOCk7Ci0JfQorCXJhcl9oaWdoID0gcmQzMihFMTAwMF9SQUgoMCkpOworCXJhcl9sb3cgPSByZDMyKEUxMDAwX1JBTCgwKSk7CiAKLQkvKiBGbGlwIGxhc3QgYml0IG9mIG1hYyBhZGRyZXNzIGlmIHdlJ3JlIG9uIHNlY29uZCBwb3J0ICovCi0JaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzEpCi0JCWh3LT5tYWMucGVybV9hZGRyWzVdIF49IDE7CisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1JBTF9NQUNfQUREUl9MRU47IGkrKykKKwkJaHctPm1hYy5wZXJtX2FkZHJbaV0gPSAodTgpKHJhcl9sb3cgPj4gKGkqOCkpOworCisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1JBSF9NQUNfQUREUl9MRU47IGkrKykKKwkJaHctPm1hYy5wZXJtX2FkZHJbaSs0XSA9ICh1OCkocmFyX2hpZ2ggPj4gKGkqOCkpOwogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCiAJCWh3LT5tYWMuYWRkcltpXSA9IGh3LT5tYWMucGVybV9hZGRyW2ldOwogCi1vdXQ6Ci0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNTU0LDcgKzU0OCw3IEBACiAJdTE2IGksIG52bV9kYXRhOwogCiAJZm9yIChpID0gMDsgaSA8IChOVk1fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykgewotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGksIDEsICZudm1fZGF0YSk7CisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBpLCAxLCAmbnZtX2RhdGEpOwogCQlpZiAocmV0X3ZhbCkgewogCQkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTU4Nyw3ICs1ODEsNyBAQAogCXUxNiBpLCBudm1fZGF0YTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVk1fQ0hFQ0tTVU1fUkVHOyBpKyspIHsKLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBpLCAxLCAmbnZtX2RhdGEpOworCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgaSwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2hlY2tzdW0uXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtNTk1LDcgKzU4OSw3IEBACiAJCWNoZWNrc3VtICs9IG52bV9kYXRhOwogCX0KIAljaGVja3N1bSA9ICh1MTYpIE5WTV9TVU0gLSBjaGVja3N1bTsKLQlyZXRfdmFsID0gaHctPm52bS5vcHMud3JpdGVfbnZtKGh3LCBOVk1fQ0hFQ0tTVU1fUkVHLCAxLCAmY2hlY2tzdW0pOworCXJldF92YWwgPSBody0+bnZtLm9wcy53cml0ZShodywgTlZNX0NIRUNLU1VNX1JFRywgMSwgJmNoZWNrc3VtKTsKIAlpZiAocmV0X3ZhbCkKIAkJaHdfZGJnKCJOVk0gV3JpdGUgRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2hlY2tzdW0uXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IDE3ZmRkYjkuLmRlMmQ0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwX3BoeS5oIgogCi1zdGF0aWMgczMyICBpZ2JfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBzMzIgIGlnYl9hY3F1aXJlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBzMzIgIGlnYl9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiAgaWdiX3BoeV9zZXR1cF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoc3RydWN0IGUxMDAwX2h3ICpodywKIAkJCQkJICAgICAgIHUxNiAqcGh5X2N0cmwpOwpAQCAtNDMsOSArMzksNiBAQAogLyogQ2FibGUgbGVuZ3RoIHRhYmxlcyAqLwogc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQogCXsgMCwgNTAsIDgwLCAxMTAsIDE0MCwgMTQwLCBFMTAwMF9DQUJMRV9MRU5HVEhfVU5ERUZJTkVEIH07Ci0jZGVmaW5lIE04OEUxMDAwX0NBQkxFX0xFTkdUSF9UQUJMRV9TSVpFIFwKLQkJKHNpemVvZihlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlKSAvIFwKLQkJIHNpemVvZihlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlWzBdKSkKIAogc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9pZ3BfMl9jYWJsZV9sZW5ndGhfdGFibGVbXSA9CiAgICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCA1LCA4LCAxMSwgMTMsIDE2LCAxOCwgMjEsCkBAIC05MSwxMyArODQsMTMgQEAKIAlzMzIgcmV0X3ZhbCA9IDA7CiAJdTE2IHBoeV9pZDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9JRDEsICZwaHlfaWQpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0lEMSwgJnBoeV9pZCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5LT5pZCA9ICh1MzIpKHBoeV9pZCA8PCAxNik7CiAJdWRlbGF5KDIwKTsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfSUQyLCAmcGh5X2lkKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9JRDIsICZwaHlfaWQpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTE4LDExICsxMTEsMTEgQEAKIHsKIAlzMzIgcmV0X3ZhbDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDB4QzEpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMHhDMSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMCk7CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAwKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMjU3LDkgKzI1MCwxMiBAQAogICoqLwogczMyIGlnYl9yZWFkX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQlzMzIgcmV0X3ZhbDsKKwlzMzIgcmV0X3ZhbCA9IDA7CiAKLQlyZXRfdmFsID0gaWdiX2FjcXVpcmVfcGh5KGh3KTsKKwlpZiAoIShody0+cGh5Lm9wcy5hY3F1aXJlKSkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZShodyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0yNjgsMTYgKzI2NCwxNSBAQAogCQkJCQkJICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAodTE2KW9mZnNldCk7CiAJCWlmIChyZXRfdmFsKSB7Ci0JCQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCQkJaHctPnBoeS5vcHMucmVsZWFzZShodyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCXJldF92YWwgPSBpZ2JfcmVhZF9waHlfcmVnX21kaWMoaHcsCi0JCQkJCSAgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKLQkJCQkJICBkYXRhKTsKKwlyZXRfdmFsID0gaWdiX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAorCQkJCQlkYXRhKTsKIAotCWlnYl9yZWxlYXNlX3BoeShodyk7CisJaHctPnBoeS5vcHMucmVsZWFzZShodyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTI5NCw5ICsyODksMTIgQEAKICAqKi8KIHMzMiBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCiB7Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCi0JcmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZSkpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMzA1LDE2ICszMDMsMTUgQEAKIAkJCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgKHUxNilvZmZzZXQpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJaWdiX3JlbGVhc2VfcGh5KGh3KTsKKwkJCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlyZXRfdmFsID0gaWdiX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCQkJICAgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKKwlyZXRfdmFsID0gaWdiX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkJCQkJICAgZGF0YSk7CiAKLQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0zMzksOCArMzM2LDcgQEAKIAl9CiAKIAkvKiBFbmFibGUgQ1JTIG9uIFRYLiBUaGlzIG11c3QgYmUgc2V0IGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0zODMsOCArMzc5LDcgQEAKIAlpZiAocGh5LT5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPT0gMSkKIAkJcGh5X2RhdGEgfD0gTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTM5Myw4ICszODgsNyBAQAogCQkgKiBGb3JjZSBUWF9DTEsgaW4gdGhlIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyCiAJCSAqIHRvIDI1TUh6IGNsb2NrLgogCQkgKi8KLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywKLQkJCQkJICAgICBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKIAkJCQkJICAgICAmcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNDEzLDggKzQwNyw3IEBACiAJCQlwaHlfZGF0YSB8PSAoTTg4RTEwMDBfRVBTQ1JfTUFTVEVSX0RPV05TSElGVF8xWCB8CiAJCQkJICAgICBNODhFMTAwMF9FUFNDUl9TTEFWRV9ET1dOU0hJRlRfMVgpOwogCQl9Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKIAkJCQkJICAgICBwaHlfZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC00NDksNyArNDQyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlc2V0X3BoeShodyk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlc2V0KGh3KTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIkVycm9yIHJlc2V0dGluZyB0aGUgUEhZLlxuIik7CiAJCWdvdG8gb3V0OwpAQCAtNDY0LDggKzQ1Nyw4IEBACiAJICovCiAJaWYgKHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfaWdwKSB7CiAJCS8qIGRpc2FibGUgbHBsdSBkMyBkdXJpbmcgZHJpdmVyIGluaXQgKi8KLQkJaWYgKGh3LT5waHkub3BzLnNldF9kM19scGx1X3N0YXRlKQotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnNldF9kM19scGx1X3N0YXRlKGh3LCBmYWxzZSk7CisJCWlmIChwaHktPm9wcy5zZXRfZDNfbHBsdV9zdGF0ZSkKKwkJCXJldF92YWwgPSBwaHktPm9wcy5zZXRfZDNfbHBsdV9zdGF0ZShodywgZmFsc2UpOwogCQlpZiAocmV0X3ZhbCkgewogCQkJaHdfZGJnKCJFcnJvciBEaXNhYmxpbmcgTFBMVSBEM1xuIik7CiAJCQlnb3RvIG91dDsKQEAgLTQ3MywxMyArNDY2LDEzIEBACiAJfQogCiAJLyogZGlzYWJsZSBscGx1IGQwIGR1cmluZyBkcml2ZXIgaW5pdCAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5zZXRfZDBfbHBsdV9zdGF0ZShodywgZmFsc2UpOworCXJldF92YWwgPSBwaHktPm9wcy5zZXRfZDBfbHBsdV9zdGF0ZShodywgZmFsc2UpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDBcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJLyogQ29uZmlndXJlIG1kaS1tZGl4IHNldHRpbmdzICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTQ5Nyw3ICs0OTAsNyBAQAogCQlkYXRhIHw9IElHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVg7CiAJCWJyZWFrOwogCX0KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsIGRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtNTEwLDMzICs1MDMsMzEgQEAKIAkJICovCiAJCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CiAJCQkvKiBEaXNhYmxlIFNtYXJ0U3BlZWQgKi8KLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICAmZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCisJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCQkJCQkgICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsCiAJCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJICAgICBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQkvKiBTZXQgYXV0byBNYXN0ZXIvU2xhdmUgcmVzb2x1dGlvbiBwcm9jZXNzICovCi0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwKLQkJCQkJCQkgICAmZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSAmPSB+Q1JfMTAwMFRfTVNfRU5BQkxFOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLAotCQkJCQkJCSAgICBkYXRhKTsKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZkYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJmRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCkBAIC01NjAsNyArNTUxLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC02MDksMTIgKzYwMCwxMiBAQAogCSAqIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiBieSBzZXR0aW5nIHRoZSBBdXRvIE5lZyBFbmFibGUgYml0IGFuZAogCSAqIHRoZSBBdXRvIE5lZyBSZXN0YXJ0IGJpdCBpbiB0aGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXIuCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9jdHJsKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlwaHlfY3RybCB8PSAoTUlJX0NSX0FVVE9fTkVHX0VOIHwgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcpOwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC02NTYsMTUgKzY0NywxMyBAQAogCXBoeS0+YXV0b25lZ19hZHZlcnRpc2VkICY9IHBoeS0+YXV0b25lZ19tYXNrOwogCiAJLyogUmVhZCB0aGUgTUlJIEF1dG8tTmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkuICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAotCQkJCQkgICAmbWlpX2F1dG9uZWdfYWR2X3JlZyk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsICZtaWlfYXV0b25lZ19hZHZfcmVnKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlpZiAocGh5LT5hdXRvbmVnX21hc2sgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CiAJCS8qIFJlYWQgdGhlIE1JSSAxMDAwQmFzZS1UIENvbnRyb2wgUmVnaXN0ZXIgKEFkZHJlc3MgOSkuICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICBQSFlfMTAwMFRfQ1RSTCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwKIAkJCQkJICAgICZtaWlfMTAwMHRfY3RybF9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNzg1LDE3ICs3NzQsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKLQkJCQkJICAgIG1paV9hdXRvbmVnX2Fkdl9yZWcpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwgbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaHdfZGJnKCJBdXRvLU5lZyBBZHZlcnRpc2luZyAleFxuIiwgbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAKIAlpZiAocGh5LT5hdXRvbmVnX21hc2sgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgICBQSFlfMTAwMFRfQ1RSTCwKLQkJCQkJICAgICAgbWlpXzEwMDB0X2N0cmxfcmVnKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKKwkJCQkJICAgICBQSFlfMTAwMFRfQ1RSTCwKKwkJCQkJICAgICBtaWlfMTAwMHRfY3RybF9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTgxOSwxMyArODA3LDEzIEBACiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgbGluazsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoaHcsICZwaHlfZGF0YSk7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtODMzLDE2ICs4MjEsMTQgQEAKIAkgKiBDbGVhciBBdXRvLUNyb3Nzb3ZlciB0byBmb3JjZSBNREkgbWFudWFsbHkuICBJR1AgcmVxdWlyZXMgTURJCiAJICogZm9yY2VkIHdoZW5ldmVyIHNwZWVkIGFuZCBkdXBsZXggYXJlIGZvcmNlZC4KIAkgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2RhdGEgJj0gfklHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVg7CiAJcGh5X2RhdGEgJj0gfklHUDAxRTEwMDBfUFNDUl9GT1JDRV9NRElfTURJWDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC04OTcsMjAgKzg4MywxOCBAQAogCSAqIENsZWFyIEF1dG8tQ3Jvc3NvdmVyIHRvIGZvcmNlIE1ESSBtYW51YWxseS4gIE04OEUxMDAwIHJlcXVpcmVzIE1ESQogCSAqIGZvcmNlZCB3aGVuZXZlciBzcGVlZCBhbmQgZHVwbGV4IGFyZSBmb3JjZWQuCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2RhdGEgJj0gfk04OEUxMDAwX1BTQ1JfQVVUT19YX01PREU7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWh3X2RiZygiTTg4RTEwMDAgUFNDUjogJVhcbiIsIHBoeV9kYXRhKTsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05MTksNyArOTAzLDcgQEAKIAkvKiBSZXNldCB0aGUgcGh5IHRvIGNvbW1pdCBjaGFuZ2VzLiAqLwogCXBoeV9kYXRhIHw9IE1JSV9DUl9SRVNFVDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05NDAsNyArOTI0LDcgQEAKIAkJCSAqIFdlIGRpZG4ndCBnZXQgbGluay4KIAkJCSAqIFJlc2V0IHRoZSBEU1AgYW5kIGNyb3NzIG91ciBmaW5nZXJzLgogCQkJICovCi0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsCiAJCQkJCQkgICAgICBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgICAweDAwMWQpOwogCQkJaWYgKHJldF92YWwpCkBAIC05NTcsOCArOTQxLDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05NjgsOCArOTUxLDcgQEAKIAkgKiB0aGUgcmVzZXQgdmFsdWUgb2YgMi41TUh6LgogCSAqLwogCXBoeV9kYXRhIHw9IE04OEUxMDAwX0VQU0NSX1RYX0NMS18yNTsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTk3NywxNCArOTU5LDEyIEBACiAJICogSW4gYWRkaXRpb24sIHdlIG11c3QgcmUtZW5hYmxlIENSUyBvbiBUeCBmb3IgYm90aCBoYWxmIGFuZCBmdWxsCiAJICogZHVwbGV4LgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfQVNTRVJUX0NSU19PTl9UWDsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTEwNzEsMTUgKzEwNTEsMTMgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgZGF0YTsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCi0JCQkJCSAgICZkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIWFjdGl2ZSkgewogCQlkYXRhICY9IH5JR1AwMkUxMDAwX1BNX0QzX0xQTFU7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCSAgICAgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC0xMDkwLDI3ICsxMDY4LDI3IEBACiAJCSAqIFNtYXJ0U3BlZWQsIHNvIHBlcmZvcm1hbmNlIGlzIG1haW50YWluZWQuCiAJCSAqLwogCQlpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vbikgewotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywKIAkJCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywKIAkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKQEAgLTExMjAsMjIgKzEwOTgsMTkgQEAKIAkJICAgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAwX0FMTF9OT1RfR0lHKSB8fAogCQkgICAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gRTEwMDBfQUxMXzEwX1NQRUVEKSkgewogCQlkYXRhIHw9IElHUDAyRTEwMDBfUE1fRDNfTFBMVTsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCSAgICAgIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFdoZW4gTFBMVSBpcyBlbmFibGVkLCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCSAgICAgJmRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCSAgICAgIGRhdGEpOwogCX0KIApAQCAtMTE3Niw3ICsxMTUxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgb2Zmc2V0LCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgb2Zmc2V0LCAmcGh5X2RhdGEpOwogCiAJaWYgKCFyZXRfdmFsKQogCQlwaHktPnNwZWVkX2Rvd25ncmFkZWQgPSAocGh5X2RhdGEgJiBtYXNrKSA/IHRydWUgOiBmYWxzZTsKQEAgLTExOTksNyArMTE3NCw3IEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywgJmRhdGEpOwogCiAJaWYgKCFyZXRfdmFsKQogCQlwaHktPmNhYmxlX3BvbGFyaXR5ID0gKGRhdGEgJiBNODhFMTAwMF9QU1NSX1JFVl9QT0xBUklUWSkKQEAgLTEyMjgsOCArMTIwMyw3IEBACiAJICogUG9sYXJpdHkgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgc3BlZWQgb2YKIAkgKiBvdXIgY29ubmVjdGlvbi4KIAkgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywKLQkJCQkJICAgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTEyNDYsNyArMTIyMCw3IEBACiAJCW1hc2sJPSBJR1AwMUUxMDAwX1BTU1JfUE9MQVJJVFlfUkVWRVJTRUQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgb2Zmc2V0LCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBvZmZzZXQsICZkYXRhKTsKIAogCWlmICghcmV0X3ZhbCkKIAkJcGh5LT5jYWJsZV9wb2xhcml0eSA9IChkYXRhICYgbWFzaykKQEAgLTEyNzEsMTAgKzEyNDUsMTAgQEAKIAogCS8qIEJyZWFrIGFmdGVyIGF1dG9uZWcgY29tcGxldGVzIG9yIFBIWV9BVVRPX05FR19MSU1JVCBleHBpcmVzLiAqLwogCWZvciAoaSA9IFBIWV9BVVRPX05FR19MSU1JVDsgaSA+IDA7IGktLSkgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwogCQlpZiAocGh5X3N0YXR1cyAmIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFKQpAQCAtMTMxMCwxMCArMTI4NCwxMCBAQAogCQkgKiB0d2ljZSBkdWUgdG8gdGhlIGxpbmsgYml0IGJlaW5nIHN0aWNreS4gIE5vIGhhcm0gZG9pbmcKIAkJICogaXQgYWNyb3NzIHRoZSBib2FyZC4KIAkJICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJCWlmIChyZXRfdmFsKQogCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJCWlmIChyZXRfdmFsKQogCQkJYnJlYWs7CiAJCWlmIChwaHlfc3RhdHVzICYgTUlJX1NSX0xJTktfU1RBVFVTKQpAQCAtMTM1MCw4ICsxMzI0LDcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGEsIGluZGV4OwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTM3Miw4ICsxMzQ1LDggQEAKICAqCiAgKiAgVGhlIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKGFnYykgbm9ybWFsaXplcyB0aGUgYW1wbGl0dWRlIG9mIHRoZQogICogIHJlY2VpdmVkIHNpZ25hbCwgYWRqdXN0aW5nIGZvciB0aGUgYXR0ZW51YXRpb24gcHJvZHVjZWQgYnkgdGhlCi0gKiAgY2FibGUuICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXBlcmVzZW50IHRoZQotICogIGNvYmluYXRpb24gb2YgY291cnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4gYmUgcHV0CisgKiAgY2FibGUuICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXByZXNlbnQgdGhlCisgKiAgY29tYmluYXRpb24gb2YgY29hcnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4gYmUgcHV0CiAgKiAgaW50byBhIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aAogICogIGZvciBlYWNoIGNoYW5uZWwuCiAgKiovCkBAIC0xMzkyLDE0ICsxMzY1LDEzIEBACiAKIAkvKiBSZWFkIHRoZSBBR0MgcmVnaXN0ZXJzIGZvciBhbGwgY2hhbm5lbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSUdQMDJFMTAwMF9QSFlfQ0hBTk5FTF9OVU07IGkrKykgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBhZ2NfcmVnX2FycmF5W2ldLAotCQkJCQkJICAgJnBoeV9kYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBhZ2NfcmVnX2FycmF5W2ldLCAmcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qCiAJCSAqIEdldHRpbmcgYml0cyAxNTo5LCB3aGljaCByZXByZXNlbnQgdGhlIGNvbWJpbmF0aW9uIG9mCi0JCSAqIGNvdXJzZSBhbmQgZmluZSBnYWluIHZhbHVlcy4gIFRoZSByZXN1bHQgaXMgYSBudW1iZXIKKwkJICogY29hcnNlIGFuZCBmaW5lIGdhaW4gdmFsdWVzLiAgVGhlIHJlc3VsdCBpcyBhIG51bWJlcgogCQkgKiB0aGF0IGNhbiBiZSBwdXQgaW50byB0aGUgbG9va3VwIHRhYmxlIHRvIG9idGFpbiB0aGUKIAkJICogYXBwcm94aW1hdGUgY2FibGUgbGVuZ3RoLgogCQkgKi8KQEAgLTE0NTYsNyArMTQyOCw3IEBACiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgbGluazsKIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwlpZiAocGh5LT5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCWh3X2RiZygiUGh5IGluZm8gaXMgb25seSB2YWxpZCBmb3IgY29wcGVyIG1lZGlhXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOwogCQlnb3RvIG91dDsKQEAgLTE0NzIsMzMgKzE0NDQsMjkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5LT5wb2xhcml0eV9jb3JyZWN0aW9uID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTCkKLQkJCQkgICA/IHRydWUKLQkJCQkgICA6IGZhbHNlOworCQkJCSAgID8gdHJ1ZSA6IGZhbHNlOwogCiAJcmV0X3ZhbCA9IGlnYl9jaGVja19wb2xhcml0eV9tODgoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywgJnBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlwaHktPmlzX21kaXggPSAocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX01ESVgpID8gdHJ1ZSA6IGZhbHNlOwogCiAJaWYgKChwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfU1BFRUQpID09IE04OEUxMDAwX1BTU1JfMTAwME1CUykgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CisJCXJldF92YWwgPSBwaHktPm9wcy5nZXRfY2FibGVfbGVuZ3RoKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkJICAgJnBoeV9kYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xNTUyLDggKzE1MjAsNyBAQAogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfU1RBVFVTLAotCQkJCQkgICAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywgJmRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTU2MSwxMiArMTUyOCwxMSBAQAogCiAJaWYgKChkYXRhICYgSUdQMDFFMTAwMF9QU1NSX1NQRUVEX01BU0spID09CiAJICAgIElHUDAxRTEwMDBfUFNTUl9TUEVFRF8xMDAwTUJQUykgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CisJCXJldF92YWwgPSBwaHktPm9wcy5nZXRfY2FibGVfbGVuZ3RoKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkJICAgJmRhdGEpOworCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtMTU5OSwxMiArMTU2NSwxMiBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfY3RybDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2N0cmwpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2N0cmwgfD0gTUlJX0NSX1JFU0VUOwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjM1LDcgKzE2MDEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaWdiX2FjcXVpcmVfcGh5KGh3KTsKKwlyZXRfdmFsID0gcGh5LT5vcHMuYWNxdWlyZShodyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjUwLDc0ICsxNjE2LDE0IEBACiAKIAl1ZGVsYXkoMTUwKTsKIAotCWlnYl9yZWxlYXNlX3BoeShodyk7CisJcGh5LT5vcHMucmVsZWFzZShodyk7CiAKLQlyZXRfdmFsID0gaWdiX2dldF9waHlfY2ZnX2RvbmUoaHcpOworCXJldF92YWwgPSBwaHktPm9wcy5nZXRfY2ZnX2RvbmUoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLS8qIEludGVybmFsIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0KLS8qKgotICogIGlnYl9nZXRfcGh5X2NmZ19kb25lIC0gR2VuZXJpYyBQSFkgY29uZmlndXJhdGlvbiBkb25lCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqCi0gKiAgUmV0dXJuIHN1Y2Nlc3MgaWYgc2lsaWNvbiBmYW1pbHkgZGlkIG5vdCBpbXBsZW1lbnQgYSBmYW1pbHkgc3BlY2lmaWMKLSAqICBnZXRfY2ZnX2RvbmUgZnVuY3Rpb24uCi0gKiovCi1zdGF0aWMgczMyIGlnYl9nZXRfcGh5X2NmZ19kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcpCi17Ci0JaWYgKGh3LT5waHkub3BzLmdldF9jZmdfZG9uZSkKLQkJcmV0dXJuIGh3LT5waHkub3BzLmdldF9jZmdfZG9uZShodyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgaWdiX3JlbGVhc2VfcGh5IC0gR2VuZXJpYyByZWxlYXNlIFBIWQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJldHVybiBpZiBzaWxpY29uIGZhbWlseSBkb2VzIG5vdCByZXF1aXJlIGEgc2VtYXBob3JlIHdoZW4gYWNjZXNzaW5nIHRoZQotICogIFBIWS4KLSAqKi8KLXN0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5yZWxlYXNlX3BoeSkKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotfQotCi0vKioKLSAqICBpZ2JfYWNxdWlyZV9waHkgLSBHZW5lcmljIGFjcXVpcmUgUEhZCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqCi0gKiAgUmV0dXJuIHN1Y2Nlc3MgaWYgc2lsaWNvbiBmYW1pbHkgZG9lcyBub3QgcmVxdWlyZSBhIHNlbWFwaG9yZSB3aGVuCi0gKiAgYWNjZXNzaW5nIHRoZSBQSFkuCi0gKiovCi1zdGF0aWMgczMyIGlnYl9hY3F1aXJlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5hY3F1aXJlX3BoeSkKLQkJcmV0dXJuIGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleCAtIEdlbmVyaWMgZm9yY2UgUEhZIHNwZWVkL2R1cGxleAotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFdoZW4gdGhlIHNpbGljb24gZmFtaWx5IGhhcyBub3QgaW1wbGVtZW50ZWQgYSBmb3JjZWQgc3BlZWQvZHVwbGV4Ci0gKiAgZnVuY3Rpb24gZm9yIHRoZSBQSFksIHNpbXBseSByZXR1cm4gMC4KLSAqKi8KLXMzMiBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5mb3JjZV9zcGVlZF9kdXBsZXgpCi0JCXJldHVybiBody0+cGh5Lm9wcy5mb3JjZV9zcGVlZF9kdXBsZXgoaHcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogIGlnYl9waHlfaW5pdF9zY3JpcHRfaWdwMyAtIEluaXRzIHRoZSBJR1AzIFBIWQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCkBAIC0xNzMwLDc1ICsxNjM2LDc1IEBACiAKIAkvKiBQSFkgaW5pdCBJR1AgMyAqLwogCS8qIEVuYWJsZSByaXNlL2ZhbGwsIDEwLW1vZGUgd29yayBpbiBjbGFzcy1BICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCAweDkwMTgpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRjVCLCAweDkwMTgpOwogCS8qIFJlbW92ZSBhbGwgY2FwcyBmcm9tIFJlcGxpY2EgcGF0aCBmaWx0ZXIgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDJGNTIsIDB4MDAwMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDJGNTIsIDB4MDAwMCk7CiAJLyogQmlhcyB0cmltbWluZyBmb3IgQURDLCBBRkUgYW5kIERyaXZlciAoRGVmYXVsdCkgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDJGQjEsIDB4OEIyNCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDJGQjEsIDB4OEIyNCk7CiAJLyogSW5jcmVhc2UgSHlicmlkIHBvbHkgYmlhcyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkZCMiwgMHhGOEYwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MkZCMiwgMHhGOEYwKTsKIAkvKiBBZGQgNCUgdG8gVFggYW1wbGl0dWRlIGluIEdpZ2EgbW9kZSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MjAxMCwgMHgxMEIwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MjAxMCwgMHgxMEIwKTsKIAkvKiBEaXNhYmxlIHRyaW1taW5nIChUVFQpICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMDExLCAweDAwMDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyMDExLCAweDAwMDApOwogCS8qIFBvbHkgREMgY29ycmVjdGlvbiB0byA5NC42JSArIDIlIGZvciBhbGwgY2hhbm5lbHMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwREQsIDB4MjQ5QSk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDIwREQsIDB4MjQ5QSk7CiAJLyogQUJTIERDIGNvcnJlY3Rpb24gdG8gOTUuOSUgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwREUsIDB4MDBEMyk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDIwREUsIDB4MDBEMyk7CiAJLyogQkcgdGVtcCBjdXJ2ZSB0cmltICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyOEI0LCAweDA0Q0UpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyOEI0LCAweDA0Q0UpOwogCS8qIEluY3JlYXNpbmcgQURDIE9QQU1QIHN0YWdlIDEgY3VycmVudHMgdG8gbWF4ICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjcwLCAweDI5RTQpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRjcwLCAweDI5RTQpOwogCS8qIEZvcmNlIDEwMDAgKCByZXF1aXJlZCBmb3IgZW5hYmxpbmcgUEhZIHJlZ3MgY29uZmlndXJhdGlvbikgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDAwMDAsIDB4MDE0MCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDAwMDAsIDB4MDE0MCk7CiAJLyogU2V0IHVwZF9mcmVxIHRvIDYgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzAsIDB4MTYwNik7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGMzAsIDB4MTYwNik7CiAJLyogRGlzYWJsZSBOUERGRSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUYzMSwgMHhCODE0KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUYzMSwgMHhCODE0KTsKIAkvKiBEaXNhYmxlIGFkYXB0aXZlIGZpeGVkIEZGRSAoRGVmYXVsdCkgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzUsIDB4MDAyQSk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGMzUsIDB4MDAyQSk7CiAJLyogRW5hYmxlIEZGRSBoeXN0ZXJlc2lzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjNFLCAweDAwNjcpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjNFLCAweDAwNjcpOwogCS8qIEZpeGVkIEZGRSBmb3Igc2hvcnQgY2FibGUgbGVuZ3RocyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY1NCwgMHgwMDY1KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY1NCwgMHgwMDY1KTsKIAkvKiBGaXhlZCBGRkUgZm9yIG1lZGl1bSBjYWJsZSBsZW5ndGhzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjU1LCAweDAwMkEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjU1LCAweDAwMkEpOwogCS8qIEZpeGVkIEZGRSBmb3IgbG9uZyBjYWJsZSBsZW5ndGhzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjU2LCAweDAwMkEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjU2LCAweDAwMkEpOwogCS8qIEVuYWJsZSBBZGFwdGl2ZSBDbGlwIFRocmVzaG9sZCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3MiwgMHgzRkIwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3MiwgMHgzRkIwKTsKIAkvKiBBSFQgcmVzZXQgbGltaXQgdG8gMSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3NiwgMHhDMEZGKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3NiwgMHhDMEZGKTsKIAkvKiBTZXQgQUhUIG1hc3RlciBkZWxheSB0byAxMjcgbXNlYyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3NywgMHgxREVDKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3NywgMHgxREVDKTsKIAkvKiBTZXQgc2NhbiBiaXRzIGZvciBBSFQgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzgsIDB4RjlFRik7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzgsIDB4RjlFRik7CiAJLyogU2V0IEFIVCBQcmVzZXQgYml0cyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3OSwgMHgwMjEwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3OSwgMHgwMjEwKTsKIAkvKiBDaGFuZ2UgaW50ZWdfZmFjdG9yIG9mIGNoYW5uZWwgQSB0byAzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxODk1LCAweDAwMDMpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxODk1LCAweDAwMDMpOwogCS8qIENoYW5nZSBwcm9wX2ZhY3RvciBvZiBjaGFubmVscyBCQ0QgdG8gOCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTc5NiwgMHgwMDA4KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MTc5NiwgMHgwMDA4KTsKIAkvKiBDaGFuZ2UgY2dfaWNvdW50ICsgZW5hYmxlIGludGVnYnAgZm9yIGNoYW5uZWxzIEJDRCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTc5OCwgMHhEMDA4KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MTc5OCwgMHhEMDA4KTsKIAkvKgogCSAqIENoYW5nZSBjZ19pY291bnQgKyBlbmFibGUgaW50ZWdicCArIGNoYW5nZSBwcm9wX2ZhY3Rvcl9tYXN0ZXIKIAkgKiB0byA4IGZvciBjaGFubmVsIEEKIAkgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE4OTgsIDB4RDkxOCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE4OTgsIDB4RDkxOCk7CiAJLyogRGlzYWJsZSBBSFQgaW4gU2xhdmUgbW9kZSBvbiBjaGFubmVsIEEgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE4N0EsIDB4MDgwMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE4N0EsIDB4MDgwMCk7CiAJLyoKIAkgKiBFbmFibGUgTFBMVSBhbmQgZGlzYWJsZSBBTiB0byAxMDAwIGluIG5vbi1EMGEgc3RhdGVzLAogCSAqIEVuYWJsZSBTUEQrQjJCCiAJICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDE5LCAweDAwOEQpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDE5LCAweDAwOEQpOwogCS8qIEVuYWJsZSByZXN0YXJ0IEFOIG9uIGFuMTAwMF9kaXMgY2hhbmdlICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDFCLCAweDIwODApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDFCLCAweDIwODApOwogCS8qIEVuYWJsZSB3aF9maWZvIHJlYWQgY2xvY2sgaW4gMTAvMTAwIG1vZGVzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDE0LCAweDAwNDUpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDE0LCAweDAwNDUpOwogCS8qIFJlc3RhcnQgQU4sIFNwZWVkIHNlbGVjdGlvbiBpcyAxMDAwICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLCAweDEzNDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDAwLCAweDEzNDApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmgKaW5kZXggOGY4ZmUwYS4uMzIyOGE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQ0LDcgKzQ0LDYgQEAKIHMzMiAgaWdiX2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfY29wcGVyX2xpbmtfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXMzMiAgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9jb3BwZXJfbGlua19zZXR1cF9pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9jb3BwZXJfbGlua19zZXR1cF9tODgoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCmluZGV4IGJkZjVkODMuLjBiZDc3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTczLDggKzczLDc1IEBACiAjZGVmaW5lIEUxMDAwX1RDUFRJTUVSIDB4MDEwNEMgIC8qIFRDUCBUaW1lciAtIFJXICovCiAjZGVmaW5lIEUxMDAwX0ZDUlRMICAgIDB4MDIxNjAgIC8qIEZsb3cgQ29udHJvbCBSZWNlaXZlIFRocmVzaG9sZCBMb3cgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9GQ1JUSCAgICAweDAyMTY4ICAvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgSGlnaCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX1JERlBDUShfbikgICgweDAyNDMwICsgKDB4NCAqIChfbikpKQogI2RlZmluZSBFMTAwMF9GQ1JUViAgICAweDAyNDYwICAvKiBGbG93IENvbnRyb2wgUmVmcmVzaCBUaW1lciBWYWx1ZSAtIFJXICovCisKKy8qIElFRUUgMTU4OCBUSU1FU1lOQ0ggKi8KKyNkZWZpbmUgRTEwMDBfVFNZTkNUWENUTCAweDBCNjE0CisjZGVmaW5lIEUxMDAwX1RTWU5DVFhDVExfVkFMSUQgKDE8PDApCisjZGVmaW5lIEUxMDAwX1RTWU5DVFhDVExfRU5BQkxFRCAoMTw8NCkKKyNkZWZpbmUgRTEwMDBfVFNZTkNSWENUTCAweDBCNjIwCisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDVExfVkFMSUQgKDE8PDApCisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDVExfRU5BQkxFRCAoMTw8NCkKK2VudW0geworCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9WMiA9IDAsCisJRTEwMDBfVFNZTkNSWENUTF9UWVBFX0w0X1YxID0gKDE8PDEpLAorCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9MNF9WMiA9ICgxPDwyKSwKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfQUxMID0gKDE8PDMpLAorCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9FVkVOVF9WMiA9ICgxPDwzKSB8ICgxPDwxKSwKK307CisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDRkcgMHgwNUY1MAorZW51bSB7CisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfU1lOQ19NRVNTQUdFID0gMDw8MCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9ERUxBWV9SRVFfTUVTU0FHRSA9IDE8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfRk9MTE9XVVBfTUVTU0FHRSA9IDI8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfREVMQVlfUkVTUF9NRVNTQUdFID0gMzw8MCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9NQU5BR0VNRU5UX01FU1NBR0UgPSA0PDwwLAorCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU1lOQ19NRVNTQUdFID0gMDw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVFfTUVTU0FHRSA9IDE8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfUEFUSF9ERUxBWV9SRVFfTUVTU0FHRSA9IDI8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfUEFUSF9ERUxBWV9SRVNQX01FU1NBR0UgPSAzPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX0ZPTExPV1VQX01FU1NBR0UgPSA4PDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX0RFTEFZX1JFU1BfTUVTU0FHRSA9IDk8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfUEFUSF9ERUxBWV9GT0xMT1dVUF9NRVNTQUdFID0gMHhBPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX0FOTk9VTkNFX01FU1NBR0UgPSAweEI8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU0lHTkFMTElOR19NRVNTQUdFID0gMHhDPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX01BTkFHRU1FTlRfTUVTU0FHRSA9IDB4RDw8OCwKK307CisjZGVmaW5lIEUxMDAwX1NZU1RJTUwgMHgwQjYwMAorI2RlZmluZSBFMTAwMF9TWVNUSU1IIDB4MEI2MDQKKyNkZWZpbmUgRTEwMDBfVElNSU5DQSAweDBCNjA4CisKKyNkZWZpbmUgRTEwMDBfUlhNVFJMICAgICAweDBCNjM0CisjZGVmaW5lIEUxMDAwX1JYU1RNUEwgMHgwQjYyNAorI2RlZmluZSBFMTAwMF9SWFNUTVBIIDB4MEI2MjgKKyNkZWZpbmUgRTEwMDBfUlhTQVRSTCAweDBCNjJDCisjZGVmaW5lIEUxMDAwX1JYU0FUUkggMHgwQjYzMAorCisjZGVmaW5lIEUxMDAwX1RYU1RNUEwgMHgwQjYxOAorI2RlZmluZSBFMTAwMF9UWFNUTVBIIDB4MEI2MUMKKworI2RlZmluZSBFMTAwMF9FVFFGMCAgIDB4MDVDQjAKKyNkZWZpbmUgRTEwMDBfRVRRRjEgICAweDA1Q0I0CisjZGVmaW5lIEUxMDAwX0VUUUYyICAgMHgwNUNCOAorI2RlZmluZSBFMTAwMF9FVFFGMyAgIDB4MDVDQkMKKyNkZWZpbmUgRTEwMDBfRVRRRjQgICAweDA1Q0MwCisjZGVmaW5lIEUxMDAwX0VUUUY1ICAgMHgwNUNDNAorI2RlZmluZSBFMTAwMF9FVFFGNiAgIDB4MDVDQzgKKyNkZWZpbmUgRTEwMDBfRVRRRjcgICAweDA1Q0NDCisKKy8qIEZpbHRlcmluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRTEwMDBfU0FRRihfbikgKDB4NTk4MCArIDQgKiAoX24pKQorI2RlZmluZSBFMTAwMF9EQVFGKF9uKSAoMHg1OUEwICsgNCAqIChfbikpCisjZGVmaW5lIEUxMDAwX1NQUUYoX24pICgweDU5QzAgKyA0ICogKF9uKSkKKyNkZWZpbmUgRTEwMDBfRlRRRihfbikgKDB4NTlFMCArIDQgKiAoX24pKQorI2RlZmluZSBFMTAwMF9TQVFGMCBFMTAwMF9TQVFGKDApCisjZGVmaW5lIEUxMDAwX0RBUUYwIEUxMDAwX0RBUUYoMCkKKyNkZWZpbmUgRTEwMDBfU1BRRjAgRTEwMDBfU1BRRigwKQorI2RlZmluZSBFMTAwMF9GVFFGMCBFMTAwMF9GVFFGKDApCisjZGVmaW5lIEUxMDAwX1NZTlFGKF9uKSAoMHgwNTVGQyArICg0ICogKF9uKSkpIC8qIFNZTiBQYWNrZXQgUXVldWUgRmx0ciAqLworI2RlZmluZSBFMTAwMF9FVFFGKF9uKSAgKDB4MDVDQjAgKyAoNCAqIChfbikpKSAvKiBFVHlwZSBRdWV1ZSBGbHRyICovCisKIC8qIFNwbGl0IGFuZCBSZXBsaWNhdGlvbiBSWCBDb250cm9sIC0gUlcgKi8KIC8qCiAgKiBDb252ZW5pZW5jZSBtYWNyb3MKQEAgLTExMCw3ICsxNzcsNiBAQAogCQkJCSAgICA6ICgweDBFMDE4ICsgKChfbikgKiAweDQwKSkpCiAjZGVmaW5lIEUxMDAwX1RYRENUTChfbikgICgoX24pIDwgNCA/ICgweDAzODI4ICsgKChfbikgKiAweDEwMCkpIFwKIAkJCQkgICAgOiAoMHgwRTAyOCArICgoX24pICogMHg0MCkpKQotI2RlZmluZSBFMTAwMF9UQVJDKF9uKSAgICAoMHgwMzg0MCArIChfbiA8PCA4KSkKICNkZWZpbmUgRTEwMDBfRENBX1RYQ1RSTChfbikgKDB4MDM4MTQgKyAoX24gPDwgOCkpCiAjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkwoX24pICgweDAyODE0ICsgKF9uIDw8IDgpKQogI2RlZmluZSBFMTAwMF9URFdCQUwoX24pICAoKF9uKSA8IDQgPyAoMHgwMzgzOCArICgoX24pICogMHgxMDApKSBcCkBAIC0yMjYsMTYgKzI5MiwxNCBAQAogI2RlZmluZSBFMTAwMF9SQUgoX2kpICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDQgKyAoKF9pKSAqIDgpKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA1NEU0ICsgKChfaSAtIDE2KSAqIDgpKSkKICNkZWZpbmUgRTEwMDBfVkZUQSAgICAgMHgwNTYwMCAgLyogVkxBTiBGaWx0ZXIgVGFibGUgQXJyYXkgLSBSVyBBcnJheSAqLwotI2RlZmluZSBFMTAwMF9WTURfQ1RMICAweDA1ODFDICAvKiBWTURxIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9WVF9DVEwgICAweDA1ODFDICAvKiBWTURxIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVUMgICAgICAweDA1ODAwICAvKiBXYWtldXAgQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1dVRkMgICAgIDB4MDU4MDggIC8qIFdha2V1cCBGaWx0ZXIgQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1dVUyAgICAgIDB4MDU4MTAgIC8qIFdha2V1cCBTdGF0dXMgLSBSTyAqLwogI2RlZmluZSBFMTAwMF9NQU5DICAgICAweDA1ODIwICAvKiBNYW5hZ2VtZW50IENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9JUEFWICAgICAweDA1ODM4ICAvKiBJUCBBZGRyZXNzIFZhbGlkIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfV1VQTCAgICAgMHgwNTkwMCAgLyogV2FrZXVwIFBhY2tldCBMZW5ndGggLSBSVyAqLwotI2RlZmluZSBFMTAwMF9IT1NUX0lGICAweDA4ODAwICAvKiBIb3N0IEludGVyZmFjZSAqLwogCi0jZGVmaW5lIEUxMDAwX01BTkMySCAgICAgIDB4MDU4NjAgLyogTWFuYWdlbWVudCBDb250cm9sIFRvIEhvc3QgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9TV19GV19TWU5DICAweDA1QjVDIC8qIFNvZnR3YXJlLUZpcm13YXJlIFN5bmNocm9uaXphdGlvbiAtIFJXICovCiAjZGVmaW5lIEUxMDAwX0NDTUNUTCAgICAgIDB4MDVCNDggLyogQ0NNIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgRTEwMDBfR0lPQ1RMICAgICAgMHgwNUI0NCAvKiBHSU8gQW5hbG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTI0Myw5ICszMDcsNyBAQAogI2RlZmluZSBFMTAwMF9GQUNUUFMgICAgMHgwNUIzMCAvKiBGdW5jdGlvbiBBY3RpdmUgYW5kIFBvd2VyIFN0YXRlIHRvIE1ORyAqLwogI2RlZmluZSBFMTAwMF9TV1NNICAgICAgMHgwNUI1MCAvKiBTVyBTZW1hcGhvcmUgKi8KICNkZWZpbmUgRTEwMDBfRldTTSAgICAgIDB4MDVCNTQgLyogRlcgU2VtYXBob3JlICovCi0jZGVmaW5lIEUxMDAwX0RDQV9JRCAgICAweDA1QjcwIC8qIERDQSBSZXF1ZXN0ZXIgSUQgSW5mb3JtYXRpb24gLSBSTyAqLwogI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTCAgMHgwNUI3NCAvKiBEQ0EgQ29udHJvbCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX0hJQ1IgICAgICAweDA4RjAwIC8qIEhvc3QgSW50ZWZhY2UgQ29udHJvbCAqLwogCiAvKiBSU1MgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEUxMDAwX01SUUMgICAgICAweDA1ODE4IC8qIE11bHRpcGxlIFJlY2VpdmUgQ29udHJvbCAtIFJXICovCkBAIC0yNTQsMTggKzMxNiwyNyBAQAogI2RlZmluZSBFMTAwMF9JTUlSVlAgICAgMHgwNUFDMCAvKiBJbW1lZGlhdGUgSW50ZXJydXB0IFJYIFZMQU4gUHJpb3JpdHkgLSBSVyAqLwogLyogTVNJLVggQWxsb2NhdGlvbiBSZWdpc3RlciAoX2kpIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfTVNJWEJNKF9pKSAgICAoMHgwMTYwMCArICgoX2kpICogNCkpCi0vKiBNU0ktWCBUYWJsZSBlbnRyeSBhZGRyIGxvdyByZWcgMCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX01TSVhUQUREKF9pKSAgKDB4MEMwMDAgKyAoKF9pKSAqIDB4MTApKQotLyogTVNJLVggVGFibGUgZW50cnkgYWRkciB1cHBlciByZWcgMCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX01TSVhUVUFERChfaSkgKDB4MEMwMDQgKyAoKF9pKSAqIDB4MTApKQotLyogTVNJLVggVGFibGUgZW50cnkgbWVzc2FnZSByZWcgMCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX01TSVhUTVNHKF9pKSAgKDB4MEMwMDggKyAoKF9pKSAqIDB4MTApKQotLyogTVNJLVggVGFibGUgZW50cnkgdmVjdG9yIGN0cmwgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVkNUUkwoX2kpICgweDBDMDBDICsgKChfaSkgKiAweDEwKSkKIC8qIFJlZGlyZWN0aW9uIFRhYmxlIC0gUlcgQXJyYXkgKi8KICNkZWZpbmUgRTEwMDBfUkVUQShfaSkgICgweDA1QzAwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgRTEwMDBfUlNTUksoX2kpICgweDA1QzgwICsgKChfaSkgKiA0KSkgLyogUlNTIFJhbmRvbSBLZXkgLSBSVyBBcnJheSAqLwogCisvKiBWVCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUiAgIDB4MDBDODAgLyogTWFpbGJveCBWRiBDYXVzZSAtIFJXQyAqLworI2RlZmluZSBFMTAwMF9NQlZGSU1SICAgMHgwMEM4NCAvKiBNYWlsYm94IFZGIGludCBNYXNrIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVkZMUkUgICAgIDB4MDBDODggLyogVkYgUmVnaXN0ZXIgRXZlbnRzIC0gUldDICovCisjZGVmaW5lIEUxMDAwX1ZGUkUgICAgICAweDAwQzhDIC8qIFZGIFJlY2VpdmUgRW5hYmxlcyAqLworI2RlZmluZSBFMTAwMF9WRlRFICAgICAgMHgwMEM5MCAvKiBWRiBUcmFuc21pdCBFbmFibGVzICovCisjZGVmaW5lIEUxMDAwX1FERSAgICAgICAweDAyNDA4IC8qIFF1ZXVlIERyb3AgRW5hYmxlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRFRYU1dDICAgIDB4MDM1MDAgLyogRE1BIFR4IFN3aXRjaCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUlBMT0xSICAgIDB4MDVBRjAgLyogUmVwbGljYXRpb24gT2ZmbG9hZCAtIFJXICovCisjZGVmaW5lIEUxMDAwX0lPVlRDTCAgICAweDA1QkJDIC8qIElPViBDb250cm9sIFJlZ2lzdGVyICovCisvKiBUaGVzZSBhY3QgcGVyIFZGIHNvIGFuIGFycmF5IGZyaWVuZGx5IG1hY3JvIGlzIHVzZWQgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWChfbikgICAoMHgwMEMwMCArICg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZNQk1FTShfbikgICAgICAgKDB4MDA4MDAgKyAoNjQgKiAoX24pKSkKKyNkZWZpbmUgRTEwMDBfVk1PTFIoX24pICAgICAgICAoMHgwNUFEMCArICg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZMVkYoX24pICAgICAgICAgKDB4MDVEMDAgKyAoNCAqIChfbikpKSAvKiBWTEFOIFZpcnR1YWwgTWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmlsdGVyIC0gUlcgKi8KKwogI2RlZmluZSB3cjMyKHJlZywgdmFsdWUpICh3cml0ZWwodmFsdWUsIGh3LT5od19hZGRyICsgcmVnKSkKICNkZWZpbmUgcmQzMihyZWcpIChyZWFkbChody0+aHdfYWRkciArIHJlZykpCiAjZGVmaW5lIHdyZmwoKSAoKHZvaWQpcmQzMihFMTAwMF9TVEFUVVMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCmluZGV4IGFlYmVmOGUuLjRlODQ2NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zNCwyNSArMzQsMTUgQEAKICNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF84MjU3NS5oIgogCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY29tcGFyZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KKwogc3RydWN0IGlnYl9hZGFwdGVyOwogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgotI2RlZmluZSBNQVhfTFJPX0FHR1IgICAgICAgICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgTUFYX0xST19ERVNDUklQVE9SUyAgICAgICAgICAgICAgICA4Ci0jZW5kaWYKLQotLyogSW50ZXJydXB0IGRlZmluZXMgKi8KLSNkZWZpbmUgSUdCX01JTl9EWU5fSVRSIDMwMDAKLSNkZWZpbmUgSUdCX01BWF9EWU5fSVRSIDk2MDAwCi0KIC8qICgoMTAwMDAwMDAwMG5zIC8gKDYwMDBpbnRzL3MgKiAxMDI0bnMpKSA8PCAyID0gNjQ4ICovCiAjZGVmaW5lIElHQl9TVEFSVF9JVFIgNjQ4CiAKLSNkZWZpbmUgSUdCX0RZTl9JVFJfUEFDS0VUX1RIUkVTSE9MRCAyCi0jZGVmaW5lIElHQl9EWU5fSVRSX0xFTkdUSF9MT1cgMjAwCi0jZGVmaW5lIElHQl9EWU5fSVRSX0xFTkdUSF9ISUdIIDEwMDAKLQogLyogVFgvUlggZGVzY3JpcHRvciBkZWZpbmVzICovCiAjZGVmaW5lIElHQl9ERUZBVUxUX1RYRCAgICAgICAgICAgICAgICAgIDI1NgogI2RlZmluZSBJR0JfTUlOX1RYRCAgICAgICAgICAgICAgICAgICAgICAgODAKQEAgLTY3LDggKzU3LDIxIEBACiAjZGVmaW5lIElHQl9NSU5fSVRSX1VTRUNTICAgICAgICAgICAgICAgICAxMAogCiAvKiBUcmFuc21pdCBhbmQgcmVjZWl2ZSBxdWV1ZXMgKi8KLSNkZWZpbmUgSUdCX01BWF9SWF9RVUVVRVMgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIElHQl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJR0JfTUFYX1JYX1FVRVVFUyAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPiA2ID8gMSA6IDIpIDogNCkKKyNkZWZpbmUgSUdCX01BWF9UWF9RVUVVRVMgICAgIElHQl9NQVhfUlhfUVVFVUVTCisjZGVmaW5lIElHQl9BQlNfTUFYX1RYX1FVRVVFUyAgICAgNAorCisjZGVmaW5lIElHQl9NQVhfVkZfTUNfRU5UUklFUyAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSUdCX01BWF9WRl9GVU5DVElPTlMgICAgICAgICAgICAgICA4CisjZGVmaW5lIElHQl9NQVhfVkZUQV9FTlRSSUVTICAgICAgICAgICAgICAgMTI4CisKK3N0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgeworCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJlc3Nlc1tFVEhfQUxFTl07CisJdTE2IHZmX21jX2hhc2hlc1tJR0JfTUFYX1ZGX01DX0VOVFJJRVNdOworCXUxNiBudW1fdmZfbWNfaGFzaGVzOworCWJvb2wgY2xlYXJfdG9fc2VuZDsKK307CiAKIC8qIFJYIGRlc2NyaXB0b3IgY29udHJvbCB0aHJlc2hvbGRzLgogICogUFRIUkVTSCAtIE1BQyB3aWxsIGNvbnNpZGVyIHByZWZldGNoIGlmIGl0IGhhcyBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mCkBAIC05NCwxMiArOTcsOSBAQAogI2RlZmluZSBJR0JfUlhCVUZGRVJfNTEyICAgNTEyCiAjZGVmaW5lIElHQl9SWEJVRkZFUl8xMDI0ICAxMDI0CiAjZGVmaW5lIElHQl9SWEJVRkZFUl8yMDQ4ICAyMDQ4Ci0jZGVmaW5lIElHQl9SWEJVRkZFUl80MDk2ICA0MDk2Ci0jZGVmaW5lIElHQl9SWEJVRkZFUl84MTkyICA4MTkyCiAjZGVmaW5lIElHQl9SWEJVRkZFUl8xNjM4NCAxNjM4NAogCi0vKiBQYWNrZXQgQnVmZmVyIGFsbG9jYXRpb25zICovCi0KKyNkZWZpbmUgTUFYX1NURF9KVU1CT19GUkFNRV9TSVpFIDkyMzQKIAogLyogSG93IG1hbnkgVHggRGVzY3JpcHRvcnMgZG8gd2UgbmVlZCB0byBjYWxsIG5ldGlmX3dha2VfcXVldWUgPyAqLwogI2RlZmluZSBJR0JfVFhfUVVFVUVfV0FLRQkxNgpAQCAtMTc2LDI5ICsxNzYsMTggQEAKIAkJCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCQkJaW50IHNldF9pdHI7CiAJCQlzdHJ1Y3QgaWdiX3JpbmcgKmJ1ZGR5OwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JCQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQkJCWJvb2wgbHJvX3VzZWQ7Ci0jZW5kaWYKIAkJfTsKIAl9OwogCiAJY2hhciBuYW1lW0lGTkFNU0laICsgNV07CiB9OwogCi0jZGVmaW5lIElHQl9ERVNDX1VOVVNFRChSKSBcCi0JKCgoKFIpLT5uZXh0X3RvX2NsZWFuID4gKFIpLT5uZXh0X3RvX3VzZSkgPyAwIDogKFIpLT5jb3VudCkgKyBcCi0JKFIpLT5uZXh0X3RvX2NsZWFuIC0gKFIpLT5uZXh0X3RvX3VzZSAtIDEpCi0KICNkZWZpbmUgRTEwMDBfUlhfREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQogI2RlZmluZSBFMTAwMF9UWF9ERVNDX0FEVihSLCBpKQkgICAgXAogCSgmKCgodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCiAjZGVmaW5lIEUxMDAwX1RYX0NUWFRERVNDX0FEVihSLCBpKQkgICAgXAogCSgmKCgoc3RydWN0IGUxMDAwX2Fkdl90eF9jb250ZXh0X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCi0jZGVmaW5lIEUxMDAwX0dFVF9ERVNDKFIsIGksIHR5cGUpCSgmKCgoc3RydWN0IHR5cGUgKikoKFIpLmRlc2MpKVtpXSkpCi0jZGVmaW5lIEUxMDAwX1RYX0RFU0MoUiwgaSkJCUUxMDAwX0dFVF9ERVNDKFIsIGksIGUxMDAwX3R4X2Rlc2MpCi0jZGVmaW5lIEUxMDAwX1JYX0RFU0MoUiwgaSkJCUUxMDAwX0dFVF9ERVNDKFIsIGksIGUxMDAwX3J4X2Rlc2MpCiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIApAQCAtMjQ4LDcgKzIzNyw2IEBACiAKIAl1NjQgaHdfY3N1bV9lcnI7CiAJdTY0IGh3X2NzdW1fZ29vZDsKLQl1NjQgcnhfaGRyX3NwbGl0OwogCXUzMiBhbGxvY19yeF9idWZmX2ZhaWxlZDsKIAlib29sIHJ4X2NzdW07CiAJdTMyIGdvcmM7CkBAIC0yNjIsNiArMjUwLDEwIEBACiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOworCXN0cnVjdCBjeWNsZWNvdW50ZXIgY3ljbGVzOworCXN0cnVjdCB0aW1lY291bnRlciBjbG9jazsKKwlzdHJ1Y3QgdGltZWNvbXBhcmUgY29tcGFyZTsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGh3dHN0YW1wX2NvbmZpZzsKIAogCS8qIHN0cnVjdHMgZGVmaW5lZCBpbiBlMTAwMF9ody5oICovCiAJc3RydWN0IGUxMDAwX2h3IGh3OwpAQCAtMjgzLDI3ICsyNzUsMTcgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdTMyIGVlcHJvbV93b2w7CiAKLQkvKiBmb3IgaW9wb3J0IGZyZWUgKi8KLQlpbnQgYmFyczsKLQlpbnQgbmVlZF9pb3BvcnQ7Ci0KLQlzdHJ1Y3QgaWdiX3JpbmcgKm11bHRpX3R4X3RhYmxlW0lHQl9NQVhfVFhfUVVFVUVTXTsKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCXVuc2lnbmVkIGludCBscm9fbWF4X2FnZ3I7Ci0JdW5zaWduZWQgaW50IGxyb19hZ2dyZWdhdGVkOwotCXVuc2lnbmVkIGludCBscm9fZmx1c2hlZDsKLQl1bnNpZ25lZCBpbnQgbHJvX25vX2Rlc2M7Ci0jZW5kaWYKKwlzdHJ1Y3QgaWdiX3JpbmcgKm11bHRpX3R4X3RhYmxlW0lHQl9BQlNfTUFYX1RYX1FVRVVFU107CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CisJdW5zaWduZWQgaW50IHZmc19hbGxvY2F0ZWRfY291bnQ7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZfZGF0YTsKIH07CiAKICNkZWZpbmUgSUdCX0ZMQUdfSEFTX01TSSAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSUdCX0ZMQUdfTVNJX0VOQUJMRSAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSUdCX0ZMQUdfRENBX0VOQUJMRUQgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSUdCX0ZMQUdfSU5fTkVUUE9MTCAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSUdCX0ZMQUdfUVVBRF9QT1JUX0EgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSUdCX0ZMQUdfTkVFRF9DVFhfSURYICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSUdCX0ZMQUdfRENBX0VOQUJMRUQgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSUdCX0ZMQUdfUVVBRF9QT1JUX0EgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSUdCX0ZMQUdfTkVFRF9DVFhfSURYICAgICAgKDEgPDwgMykKIAogZW51bSBlMTAwMF9zdGF0ZV90IHsKIAlfX0lHQl9URVNUSU5HLApAQCAtMzMzLDI0ICszMTUsMjQgQEAKIAogc3RhdGljIGlubGluZSBzMzIgaWdiX3Jlc2V0X3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCWlmIChody0+cGh5Lm9wcy5yZXNldF9waHkpCi0JCXJldHVybiBody0+cGh5Lm9wcy5yZXNldF9waHkoaHcpOworCWlmIChody0+cGh5Lm9wcy5yZXNldCkKKwkJcmV0dXJuIGh3LT5waHkub3BzLnJlc2V0KGh3KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHMzMiBpZ2JfcmVhZF9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQlpZiAoaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKQotCQlyZXR1cm4gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBvZmZzZXQsIGRhdGEpOworCWlmIChody0+cGh5Lm9wcy5yZWFkX3JlZykKKwkJcmV0dXJuIGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBvZmZzZXQsIGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgczMyIGlnYl93cml0ZV9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQogewotCWlmIChody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKQotCQlyZXR1cm4gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKKwlpZiAoaHctPnBoeS5vcHMud3JpdGVfcmVnKQorCQlyZXR1cm4gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBvZmZzZXQsIGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IDNjODMxZjEuLmZiMDljOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtODgsMTYgKzg4LDExIEBACiAJeyAicnhfbG9uZ19ieXRlX2NvdW50IiwgSUdCX1NUQVQoc3RhdHMuZ29yYykgfSwKIAl7ICJyeF9jc3VtX29mZmxvYWRfZ29vZCIsIElHQl9TVEFUKGh3X2NzdW1fZ29vZCkgfSwKIAl7ICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiwgSUdCX1NUQVQoaHdfY3N1bV9lcnIpIH0sCi0JeyAicnhfaGVhZGVyX3NwbGl0IiwgSUdCX1NUQVQocnhfaGRyX3NwbGl0KSB9LAorCXsgInR4X2RtYV9vdXRfb2Zfc3luYyIsIElHQl9TVEFUKHN0YXRzLmRvb3N5bmMpIH0sCiAJeyAiYWxsb2NfcnhfYnVmZl9mYWlsZWQiLCBJR0JfU1RBVChhbGxvY19yeF9idWZmX2ZhaWxlZCkgfSwKIAl7ICJ0eF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncHRjKSB9LAogCXsgInJ4X3NtYnVzIiwgSUdCX1NUQVQoc3RhdHMubWdwcmMpIH0sCiAJeyAiZHJvcHBlZF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncGRjKSB9LAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JeyAibHJvX2FnZ3JlZ2F0ZWQiLCBJR0JfU1RBVChscm9fYWdncmVnYXRlZCkgfSwKLQl7ICJscm9fZmx1c2hlZCIsIElHQl9TVEFUKGxyb19mbHVzaGVkKSB9LAotCXsgImxyb19ub19kZXNjIiwgSUdCX1NUQVQobHJvX25vX2Rlc2MpIH0sCi0jZW5kaWYKIH07CiAKICNkZWZpbmUgSUdCX1FVRVVFX1NUQVRTX0xFTiBcCkBAIC0yOTMsMTUgKzI4OCwxNSBAQAogCiBzdGF0aWMgdTMyIGlnYl9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXJldHVybiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkgIT0gMDsKKwlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICE9IDA7CiB9CiAKIHN0YXRpYyBpbnQgaWdiX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCWlmIChkYXRhKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwogCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19DU1VNOworCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTAsMTUgKzMwNSwxMyBAQAogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAoZGF0YSkKKwlpZiAoZGF0YSkgewogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0KLQlpZiAoZGF0YSkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JZWxzZQorCX0gZWxzZSB7CisJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7CisJfQogCiAJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRTTyBpcyAlc1xuIiwKIAkJIGRhdGEgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKQEAgLTQwNSw3ICszOTgsNyBAQAogCXJlZ3NfYnVmZlszNF0gPSByZDMyKEUxMDAwX1JMUE1MKTsKIAlyZWdzX2J1ZmZbMzVdID0gcmQzMihFMTAwMF9SRkNUTCk7CiAJcmVnc19idWZmWzM2XSA9IHJkMzIoRTEwMDBfTVJRQyk7Ci0JcmVnc19idWZmWzM3XSA9IHJkMzIoRTEwMDBfVk1EX0NUTCk7CisJcmVnc19idWZmWzM3XSA9IHJkMzIoRTEwMDBfVlRfQ1RMKTsKIAogCS8qIFRyYW5zbWl0ICovCiAJcmVnc19idWZmWzM4XSA9IHJkMzIoRTEwMDBfVENUTCk7CkBAIC01OTgsMTIgKzU5MSwxMiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChody0+bnZtLnR5cGUgPT0gZTEwMDBfbnZtX2VlcHJvbV9zcGkpCi0JCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgZmlyc3Rfd29yZCwKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGZpcnN0X3dvcmQsCiAJCQkJCSAgICBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMSwKIAkJCQkJICAgIGVlcHJvbV9idWZmKTsKIAllbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxOyBpKyspIHsKLQkJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgZmlyc3Rfd29yZCArIGksIDEsCisJCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgZmlyc3Rfd29yZCArIGksIDEsCiAJCQkJCQkgICAgJmVlcHJvbV9idWZmW2ldKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWJyZWFrOwpAQCAtNjUwLDE0ICs2NDMsMTQgQEAKIAlpZiAoZWVwcm9tLT5vZmZzZXQgJiAxKSB7CiAJCS8qIG5lZWQgcmVhZC9tb2RpZnkvd3JpdGUgb2YgZmlyc3QgY2hhbmdlZCBFRVBST00gd29yZCAqLwogCQkvKiBvbmx5IHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGZpcnN0X3dvcmQsIDEsCisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBmaXJzdF93b3JkLCAxLAogCQkJCQkgICAgJmVlcHJvbV9idWZmWzBdKTsKIAkJcHRyKys7CiAJfQogCWlmICgoKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4pICYgMSkgJiYgKHJldF92YWwgPT0gMCkpIHsKIAkJLyogbmVlZCByZWFkL21vZGlmeS93cml0ZSBvZiBsYXN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KIAkJLyogb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGxhc3Rfd29yZCwgMSwKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGxhc3Rfd29yZCwgMSwKIAkJCQkgICAmZWVwcm9tX2J1ZmZbbGFzdF93b3JkIC0gZmlyc3Rfd29yZF0pOwogCX0KIApAQCAtNjcwLDcgKzY2Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxOyBpKyspCiAJCWVlcHJvbV9idWZmW2ldID0gY3B1X3RvX2xlMTYoZWVwcm9tX2J1ZmZbaV0pOwogCi0JcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlX252bShodywgZmlyc3Rfd29yZCwKKwlyZXRfdmFsID0gaHctPm52bS5vcHMud3JpdGUoaHcsIGZpcnN0X3dvcmQsCiAJCQkJICAgICBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMSwgZWVwcm9tX2J1ZmYpOwogCiAJLyogVXBkYXRlIHRoZSBjaGVja3N1bSBvdmVyIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBFRVBST00gaWYgbmVlZGVkCkBAIC02OTQsNyArNjg3LDcgQEAKIAogCS8qIEVFUFJPTSBpbWFnZSB2ZXJzaW9uICMgaXMgcmVwb3J0ZWQgYXMgZmlybXdhcmUgdmVyc2lvbiAjIGZvcgogCSAqIDgyNTc1IGNvbnRyb2xsZXJzICovCi0JYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkX252bSgmYWRhcHRlci0+aHcsIDUsIDEsICZlZXByb21fZGF0YSk7CisJYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkKCZhZGFwdGVyLT5odywgNSwgMSwgJmVlcHJvbV9kYXRhKTsKIAlzcHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sICIlZC4lZC0lZCIsCiAJCShlZXByb21fZGF0YSAmIDB4RjAwMCkgPj4gMTIsCiAJCShlZXByb21fZGF0YSAmIDB4MEZGMCkgPj4gNCwKQEAgLTg2MywyMyArODU2LDI2IEBACiAJeyBFMTAwMF9SREJBTCgwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKIAl7IEUxMDAwX1JEQkFIKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAogCXsgRTEwMDBfUkRMRU4oMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCi0JeyBFMTAwMF9SREJBTCg0KSwgIDB4NDAsICA4LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1JEQkFIKDQpLCAgMHg0MCwgIDgsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfUkRMRU4oNCksICAweDQwLCAgOCwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCi0JLyogRW5hYmxlIGFsbCBmb3VyIFJYIHF1ZXVlcyBiZWZvcmUgdGVzdGluZy4gKi8KLQl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDEsICBXUklURV9OT19URVNULCAwLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCisJeyBFMTAwMF9SREJBTCg0KSwgIDB4NDAsIDEyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JEQkFIKDQpLCAgMHg0MCwgMTIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkRMRU4oNCksICAweDQwLCAxMiwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCisJLyogRW5hYmxlIGFsbCBSWCBxdWV1ZXMgYmVmb3JlIHRlc3RpbmcuICovCisJeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCA0LCAgV1JJVEVfTk9fVEVTVCwgMCwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSB9LAorCXsgRTEwMDBfUlhEQ1RMKDQpLCAweDQwLCAxMiwgIFdSSVRFX05PX1RFU1QsIDAsIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUgfSwKIAkvKiBSREggaXMgcmVhZC1vbmx5IGZvciA4MjU3Niwgb25seSB0ZXN0IFJEVC4gKi8KIAl7IEUxMDAwX1JEVCgwKSwJICAgMHgxMDAsIDQsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKKwl7IEUxMDAwX1JEVCg0KSwJICAgMHg0MCwgMTIsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKIAl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDQsICBXUklURV9OT19URVNULCAwLCAwIH0sCisJeyBFMTAwMF9SWERDVEwoNCksIDB4NDAsIDEyLCAgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAogCXsgRTEwMDBfRkNSVEgsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkYwLCAweDAwMDBGRkYwIH0sCiAJeyBFMTAwMF9GQ1RUViwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKIAl7IEUxMDAwX1RJUEcsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDNGRkZGRkZGLCAweDNGRkZGRkZGIH0sCiAJeyBFMTAwMF9UREJBTCgwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCiAJeyBFMTAwMF9UREJBSCgwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCiAJeyBFMTAwMF9URExFTigwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCi0JeyBFMTAwMF9UREJBTCg0KSwgIDB4NDAsIDgsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1REQkFIKDQpLCAgMHg0MCwgOCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfVERMRU4oNCksICAweDQwLCA4LCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCisJeyBFMTAwMF9UREJBTCg0KSwgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9UREJBSCg0KSwgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9URExFTig0KSwgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCiAJeyBFMTAwMF9SQ1RMLAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKIAl7IEUxMDAwX1JDVEwsIAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIwRkUsIDB4MDAzRkZGRkIgfSwKIAl7IEUxMDAwX1JDVEwsIAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIwRkUsIDB4RkZGRkZGRkYgfSwKQEAgLTkyNiwxMiArOTIyLDEzIEBACiBzdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLAogCQkJICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHBhdCwgdmFsOwogCXUzMiBfdGVzdFtdID0KIAkJezB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkZ9OwogCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRShfdGVzdCk7IHBhdCsrKSB7Ci0JCXdyaXRlbCgoX3Rlc3RbcGF0XSAmIHdyaXRlKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpKTsKLQkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJCXdyMzIocmVnLCAoX3Rlc3RbcGF0XSAmIHdyaXRlKSk7CisJCXZhbCA9IHJkMzIocmVnKTsKIAkJaWYgKHZhbCAhPSAoX3Rlc3RbcGF0XSAmIHdyaXRlICYgbWFzaykpIHsKIAkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgInBhdHRlcm4gdGVzdCByZWcgJTA0WCAiCiAJCQkJImZhaWxlZDogZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsCkBAIC05NDYsOSArOTQzLDEwIEBACiBzdGF0aWMgYm9vbCByZWdfc2V0X2FuZF9jaGVjayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKIAkJCSAgICAgIGludCByZWcsIHUzMiBtYXNrLCB1MzIgd3JpdGUpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdmFsOwotCXdyaXRlbCgod3JpdGUgJiBtYXNrKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpKTsKLQl2YWwgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKTsKKwl3cjMyKHJlZywgd3JpdGUgJiBtYXNrKTsKKwl2YWwgPSByZDMyKHJlZyk7CiAJaWYgKCh3cml0ZSAmIG1hc2spICE9ICh2YWwgJiBtYXNrKSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJzZXQvY2hlY2sgcmVnICUwNFggdGVzdCBmYWlsZWQ6IgogCQkJIiBnb3QgMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwgcmVnLApAQCAtMTAxNCwxMiArMTAxMiwxNCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgdGVzdC0+YXJyYXlfbGVuOyBpKyspIHsKIAkJCXN3aXRjaCAodGVzdC0+dGVzdF90eXBlKSB7CiAJCQljYXNlIFBBVFRFUk5fVEVTVDoKLQkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogdGVzdC0+cmVnX29mZnNldCksCisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKworCQkJCQkJKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKIAkJCQkJCXRlc3QtPm1hc2ssCiAJCQkJCQl0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNFVF9SRUFEX1RFU1Q6Ci0JCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsgKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKKwkJCQlSRUdfU0VUX0FORF9DSEVDSyh0ZXN0LT5yZWcgKworCQkJCQkJKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKIAkJCQkJCXRlc3QtPm1hc2ssCiAJCQkJCQl0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCSpkYXRhID0gMDsKIAkvKiBSZWFkIGFuZCBhZGQgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBFRVBST00gKi8KIAlmb3IgKGkgPSAwOyBpIDwgKE5WTV9DSEVDS1NVTV9SRUcgKyAxKTsgaSsrKSB7Ci0JCWlmICgoYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkX252bSgmYWRhcHRlci0+aHcsIGksIDEsICZ0ZW1wKSkKKwkJaWYgKChhZGFwdGVyLT5ody5udm0ub3BzLnJlYWQoJmFkYXB0ZXItPmh3LCBpLCAxLCAmdGVtcCkpCiAJCSAgICA8IDApIHsKIAkJCSpkYXRhID0gMTsKIAkJCWJyZWFrOwpAQCAtMTA5MSwxNiArMTA5MSwxNyBAQAogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1MzIgbWFzaywgaSA9IDAsIHNoYXJlZF9pbnQgPSB0cnVlOworCXUzMiBtYXNrLCBpY3NfbWFzaywgaSA9IDAsIHNoYXJlZF9pbnQgPSB0cnVlOwogCXUzMiBpcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7CiAKIAkqZGF0YSA9IDA7CiAKIAkvKiBIb29rIHVwIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIganVzdCBmb3IgdGhpcyB0ZXN0ICovCi0JaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCiAJCS8qIE5PVEU6IHdlIGRvbid0IHRlc3QgTVNJLVggaW50ZXJydXB0cyBoZXJlLCB5ZXQgKi8KIAkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19NU0kpIHsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19NU0kpIHsKIAkJc2hhcmVkX2ludCA9IGZhbHNlOwogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCAmaWdiX3Rlc3RfaW50ciwgMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CiAJCQkqZGF0YSA9IDE7CkBAIC0xMTE2LDE2ICsxMTE3LDMxIEBACiAJfQogCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKIAkJKHNoYXJlZF9pbnQgPyAic2hhcmVkIiA6ICJ1bnNoYXJlZCIpKTsKLQogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCiAJd3IzMihFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOwogCW1zbGVlcCgxMCk7CiAKKwkvKiBEZWZpbmUgYWxsIHdyaXRhYmxlIGJpdHMgZm9yIElDUyAqLworCXN3aXRjaChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc1OgorCQlpY3NfbWFzayA9IDB4MzdGNDdFREQ7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzY6CisJCWljc19tYXNrID0gMHg3N0Q0RkJGRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWNzX21hc2sgPSAweDdGRkZGRkZGOworCQlicmVhazsKKwl9CisKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCi0JZm9yICg7IGkgPCAxMDsgaSsrKSB7CisJZm9yICg7IGkgPCAzMTsgaSsrKSB7CiAJCS8qIEludGVycnVwdCB0byB0ZXN0ICovCiAJCW1hc2sgPSAxIDw8IGk7CiAKKwkJaWYgKCEobWFzayAmIGljc19tYXNrKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICghc2hhcmVkX2ludCkgewogCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGJlIHJlcG9ydGVkIGluCiAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKQEAgLTExMzQsOCArMTE1MCwxMiBAQAogCQkJICogdGVzdCBmYWlsZWQuCiAJCQkgKi8KIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLQkJCXdyMzIoRTEwMDBfSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOwotCQkJd3IzMihFMTAwMF9JQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7CisKKwkJCS8qIEZsdXNoIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJCXdyMzIoRTEwMDBfSUNSLCB+MCk7CisKKwkJCXdyMzIoRTEwMDBfSU1DLCBtYXNrKTsKKwkJCXdyMzIoRTEwMDBfSUNTLCBtYXNrKTsKIAkJCW1zbGVlcCgxMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTExNTEsNiArMTE3MSwxMCBAQAogCQkgKiB0ZXN0IGZhaWxlZC4KIAkJICovCiAJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKKworCQkvKiBGbHVzaCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCXdyMzIoRTEwMDBfSUNSLCB+MCk7CisKIAkJd3IzMihFMTAwMF9JTVMsIG1hc2spOwogCQl3cjMyKEUxMDAwX0lDUywgbWFzayk7CiAJCW1zbGVlcCgxMCk7CkBAIC0xMTY4LDExICsxMTkyLDE1IEBACiAJCQkgKiB0ZXN0IGZhaWxlZC4KIAkJCSAqLwogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwotCQkJd3IzMihFMTAwMF9JTUMsIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQl3cjMyKEUxMDAwX0lDUywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKworCQkJLyogRmx1c2ggYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQkJd3IzMihFMTAwMF9JQ1IsIH4wKTsKKworCQkJd3IzMihFMTAwMF9JTUMsIH5tYXNrKTsKKwkJCXdyMzIoRTEwMDBfSUNTLCB+bWFzayk7CiAJCQltc2xlZXAoMTApOwogCi0JCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IpIHsKKwkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKIAkJCQkqZGF0YSA9IDU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMTgwLDcgKzEyMDgsNyBAQAogCX0KIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCi0Jd3IzMihFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOworCXdyMzIoRTEwMDBfSU1DLCB+MCk7CiAJbXNsZWVwKDEwKTsKIAogCS8qIFVuaG9vayB0ZXN0IGludGVycnVwdCBoYW5kbGVyICovCkBAIC0xMjQ0LDYgKzEyNzIsNyBAQAogCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50ZXN0X3R4X3Jpbmc7CiAJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gJmFkYXB0ZXItPnRlc3RfcnhfcmluZzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXUzMiByY3RsOwogCWludCBpLCByZXRfdmFsOwogCkBAIC0xMjYwLDcgKzEyODksNyBAQAogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKLQl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpOworCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyk7CiAJdHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3JpbmctPnNpemUsIDQwOTYpOwogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLAogCQkJCQkgICAgICZ0eF9yaW5nLT5kbWEpOwpAQCAtMTI3NCw3ICsxMzAzLDcgQEAKIAkJCSgodTY0KSB0eF9yaW5nLT5kbWEgJiAweDAwMDAwMDAwRkZGRkZGRkYpKTsKIAl3cjMyKEUxMDAwX1REQkFIKDApLCAoKHU2NCkgdHhfcmluZy0+ZG1hID4+IDMyKSk7CiAJd3IzMihFMTAwMF9URExFTigwKSwKLQkJCXR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSk7CisJCQl0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYykpOwogCXdyMzIoRTEwMDBfVERIKDApLCAwKTsKIAl3cjMyKEUxMDAwX1REVCgwKSwgMCk7CiAJd3IzMihFMTAwMF9UQ1RMLApAQCAtMTI4MywyNyArMTMxMiwzMSBAQAogCQkJRTEwMDBfQ09MTElTSU9OX0RJU1RBTkNFIDw8IEUxMDAwX0NPTERfU0hJRlQpOwogCiAJZm9yIChpID0gMDsgaSA8IHR4X3JpbmctPmNvdW50OyBpKyspIHsKLQkJc3RydWN0IGUxMDAwX3R4X2Rlc2MgKnR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKKwkJdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgKnR4X2Rlc2M7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXVuc2lnbmVkIGludCBzaXplID0gMTAyNDsKIAorCQl0eF9kZXNjID0gRTEwMDBfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOwogCQlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CiAJCQlyZXRfdmFsID0gMzsKIAkJCWdvdG8gZXJyX25vbWVtOwogCQl9CiAJCXNrYl9wdXQoc2tiLCBzaXplKTsKLQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwotCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5sZW5ndGggPSBza2ItPmxlbjsKLQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQl0eF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSk7Ci0JCXR4X2Rlc2MtPmxvd2VyLmRhdGEgPSBjcHVfdG9fbGUzMihza2ItPmxlbik7Ci0JCXR4X2Rlc2MtPmxvd2VyLmRhdGEgfD0gY3B1X3RvX2xlMzIoRTEwMDBfVFhEX0NNRF9FT1AgfAotCQkJCQkJICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwKLQkJCQkJCSAgIEUxMDAwX1RYRF9DTURfUlMpOwotCQl0eF9kZXNjLT51cHBlci5kYXRhID0gMDsKKwkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CisJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBza2ItPmxlbjsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJdHhfZGVzYy0+cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOworCQl0eF9kZXNjLT5yZWFkLm9saW5mb19zdGF0dXMgPSBjcHVfdG9fbGUzMihza2ItPmxlbikgPDwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVDsKKwkJdHhfZGVzYy0+cmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMihza2ItPmxlbik7CisJCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuIHw9IGNwdV90b19sZTMyKEUxMDAwX1RYRF9DTURfRU9QIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfVFhEX0NNRF9SUyB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9BRFZUWERfRENNRF9ERVhUKTsKIAl9CiAKIAkvKiBTZXR1cCBSeCBkZXNjcmlwdG9yIHJpbmcgYW5kIFJ4IGJ1ZmZlcnMgKi8KQEAgLTEzMTksNyArMTM1Miw3IEBACiAJCWdvdG8gZXJyX25vbWVtOwogCX0KIAotCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfcnhfZGVzYyk7CisJcnhfcmluZy0+c2l6ZSA9IHJ4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjKTsKIAlyeF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwKIAkJCQkJICAgICAmcnhfcmluZy0+ZG1hKTsKIAlpZiAoIXJ4X3JpbmctPmRlc2MpIHsKQEAgLTEzMzgsMTYgKzEzNzEsMTcgQEAKIAl3cjMyKEUxMDAwX1JESCgwKSwgMCk7CiAJd3IzMihFMTAwMF9SRFQoMCksIDApOwogCXJjdGwgJj0gfihFMTAwMF9SQ1RMX0xCTV9UQ1ZSIHwgRTEwMDBfUkNUTF9MQk1fTUFDKTsKLQlyY3RsID0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwgRTEwMDBfUkNUTF9TWl8yMDQ4IHwKLQkJRTEwMDBfUkNUTF9SRE1UU19IQUxGIHwKKwlyY3RsID0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwgRTEwMDBfUkNUTF9SRE1UU19IQUxGIHwKIAkJKGFkYXB0ZXItPmh3Lm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAl3cjMyKEUxMDAwX1JDVEwsIHJjdGwpOwotCXdyMzIoRTEwMDBfU1JSQ1RMKDApLCAwKTsKKwl3cjMyKEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpOwogCiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKLQkJc3RydWN0IGUxMDAwX3J4X2Rlc2MgKnJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwkJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2M7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKKwkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAJCXNrYiA9IGFsbG9jX3NrYihJR0JfUlhCVUZGRVJfMjA0OCArIE5FVF9JUF9BTElHTiwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFza2IpIHsKQEAgLTEzNTUsMTEgKzEzODksMTEgQEAKIAkJCWdvdG8gZXJyX25vbWVtOwogCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQkJcnhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwotCQlyeF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBJR0JfUlhCVUZGRVJfMjA0OCwKLQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJcnhfZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChyeF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEpOworCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdCX1JYQlVGRkVSXzIwNDgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CiAJCW1lbXNldChza2ItPmRhdGEsIDB4MDAsIHNrYi0+bGVuKTsKIAl9CiAKQEAgLTE0NTgsNyArMTQ5Miw3IEBACiAJCQkgRTEwMDBfQ1RSTF9URkNFIHwKIAkJCSBFMTAwMF9DVFJMX0xSU1QpOwogCQlyZWcgfD0gRTEwMDBfQ1RSTF9TTFUgfAotCQkgICAgICAgRTEwMDBfQ1RSTF9GRDsgCisJCSAgICAgICBFMTAwMF9DVFJMX0ZEOwogCQl3cjMyKEUxMDAwX0NUUkwsIHJlZyk7CiAKIAkJLyogVW5zZXQgc3dpdGNoIGNvbnRyb2wgdG8gc2VyZGVzIGVuZXJneSBkZXRlY3QgKi8KQEAgLTE3NDUsNiArMTc3OSwxNSBAQAogCQkvKiByZXR1cm4gc3VjY2VzcyBmb3Igbm9uIGV4Y2x1ZGVkIGFkYXB0ZXIgcG9ydHMgKi8KIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIHF1YWQgcG9ydCBhZGFwdGVycyBvbmx5IHN1cHBvcnQgV29MIG9uIHBvcnQgQSAqLworCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX1FVQURfUE9SVF9BKSkgeworCQkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIGR1YWwgcG9ydCBjYXJkcyBvbmx5IHN1cHBvcnQgV29MIG9uIHBvcnQgQSBmcm9tIG5vdyBvbgogCQkgKiB1bmxlc3MgaXQgd2FzIGVuYWJsZWQgaW4gdGhlIGVlcHJvbSBmb3IgcG9ydCBCCkBAIC0xODI3LDkgKzE4NzAsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiB0b2dnbGUgTEVEIDQgdGltZXMgcGVyIHNlY29uZCA9IDIgImJsaW5rcyIgcGVyIHNlY29uZCAqLwotI2RlZmluZSBJR0JfSURfSU5URVJWQUwJCShIWi80KQotCiAvKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwogI2RlZmluZSBJR0JfTEVEX09OCQkwCiAKQEAgLTE5MjEsMTggKzE5NjEsNiBAQAogCWludCBzdGF0X2NvdW50ID0gc2l6ZW9mKHN0cnVjdCBpZ2JfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHU2NCk7CiAJaW50IGo7CiAJaW50IGk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQlpbnQgYWdncmVnYXRlZCA9IDAsIGZsdXNoZWQgPSAwLCBub19kZXNjID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJYWdncmVnYXRlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQkJZmx1c2hlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQkJbm9fZGVzYyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKLQl9Ci0JYWRhcHRlci0+bHJvX2FnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVkOwotCWFkYXB0ZXItPmxyb19mbHVzaGVkID0gZmx1c2hlZDsKLQlhZGFwdGVyLT5scm9fbm9fZGVzYyA9IG5vX2Rlc2M7Ci0jZW5kaWYKIAogCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAJZm9yIChpID0gMDsgaSA8IElHQl9HTE9CQUxfU1RBVFNfTEVOOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggOWRkMTNhZC4uY2E4NDIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KQEAgLTQ4LDEyICs0OSwxMiBAQAogI2VuZGlmCiAjaW5jbHVkZSAiaWdiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMi40NS1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMy4xNi1rMiIKIGNoYXIgaWdiX2RyaXZlcl9uYW1lW10gPSAiaWdiIjsKIGNoYXIgaWdiX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjb25zdCBjaGFyIGlnYl9kcml2ZXJfc3RyaW5nW10gPQogCQkJCSJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIjsKLXN0YXRpYyBjb25zdCBjaGFyIGlnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIjsKK3N0YXRpYyBjb25zdCBjaGFyIGlnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmlnYl9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU3NV0gPSAmZTEwMDBfODI1NzVfaW5mbywKQEAgLTYxLDggKzYyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZ2JfcGNpX3RibFtdID0gewogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NiksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X05TKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfRklCRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1RUJfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVFQl9GSUJFUl9TRVJERVMpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKQEAgLTEwNSw3ICsxMDgsNiBAQAogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X290aGVyKGludCBpcnEsIHZvaWQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfcngoaW50IGlycSwgdm9pZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF90eChpbnQgaXJxLCB2b2lkICopOwotc3RhdGljIGludCBpZ2JfY2xlYW5fcnhfcmluZ19tc2l4KHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogI2lmZGVmIENPTkZJR19JR0JfRENBCiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3J4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKik7CiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3R4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKik7CkBAIC0xMTUsOSArMTE3LDYgQEAKIHN0YXRpYyBpbnQgaWdiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CiBzdGF0aWMgYm9vbCBpZ2JfY2xlYW5fcnhfaXJxX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKiwgaW50ICosIGludCk7CiBzdGF0aWMgdm9pZCBpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoc3RydWN0IGlnYl9yaW5nICosIGludCk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLXN0YXRpYyBpbnQgaWdiX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKiosIHZvaWQgKiosIHU2NCAqLCB2b2lkICopOwotI2VuZGlmCiBzdGF0aWMgaW50IGlnYl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50IGNtZCk7CiBzdGF0aWMgdm9pZCBpZ2JfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIGlnYl9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKQEAgLTEyNSw2ICsxMjQsMTYgQEAKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2KTsKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyBpbnQgaWdiX3Jjdl9tc2dfZnJvbV92ZihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgdTMyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3JhaF9wb29sKHN0cnVjdCBlMTAwMF9odyAqLCBpbnQgLCBpbnQpOworc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIHUxNik7CitzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGUxMDAwX2h3ICosIGludCk7CitzdGF0aWMgaW5saW5lIGludCBpZ2Jfc2V0X3ZmX3JscG1sKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIGludCk7CitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50LCB1bnNpZ25lZCBjaGFyICopOworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICosIHBtX21lc3NhZ2VfdCk7CiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xMzksMTIgKzE0OCwxOCBAQAogCS5wcmlvcml0eQk9IDAKIH07CiAjZW5kaWYKLQogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKiBmb3IgbmV0ZHVtcCAvIG5ldCBjb25zb2xlICovCiBzdGF0aWMgdm9pZCBpZ2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKK3N0YXRpYyBzc2l6ZV90IGlnYl9zZXRfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBzaXplX3QpOworc3RhdGljIHNzaXplX3QgaWdiX3Nob3dfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKTsKK0RFVklDRV9BVFRSKG51bV92ZnMsIFNfSVJVR08gfCBTX0lXVVNSLCBpZ2Jfc2hvd19udW1fdmZzLCBpZ2Jfc2V0X251bV92ZnMpOworI2VuZGlmCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpZ2JfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKiwKIAkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90KTsKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGlnYl9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtMTc4LDYgKzE5Myw1NCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCisvKioKKyAqIFNjYWxlIHRoZSBOSUMgY2xvY2sgY3ljbGUgYnkgYSBsYXJnZSBmYWN0b3Igc28gdGhhdAorICogcmVsYXRpdmVseSBzbWFsbCBjbG9jayBjb3JyZWN0aW9ucyBjYW4gYmUgYWRkZWQgb3IKKyAqIHN1YnN0cmFjdGVkIGF0IGVhY2ggY2xvY2sgdGljay4gVGhlIGRyYXdiYWNrcyBvZiBhCisgKiBsYXJnZSBmYWN0b3IgYXJlIGEpIHRoYXQgdGhlIGNsb2NrIHJlZ2lzdGVyIG92ZXJmbG93cworICogbW9yZSBxdWlja2x5IChub3Qgc3VjaCBhIGJpZyBkZWFsKSBhbmQgYikgdGhhdCB0aGUKKyAqIGluY3JlbWVudCBwZXIgdGljayBoYXMgdG8gZml0IGludG8gMjQgYml0cy4KKyAqCisgKiBOb3RlIHRoYXQKKyAqICAgVElNSU5DQSA9IElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTICoKKyAqICAgICAgICAgICAgIElHQl9UU1lOQ19TQ0FMRQorICogICBUSU1JTkNBICs9IFRJTUlOQ0EgKiBhZGp1c3RtZW50IFtwcG1dIC8gMWU5CisgKgorICogVGhlIGJhc2Ugc2NhbGUgZmFjdG9yIGlzIGludGVudGlvbmFsbHkgYSBwb3dlciBvZiB0d28KKyAqIHNvIHRoYXQgdGhlIGRpdmlzaW9uIGluICVzdHJ1Y3QgdGltZWNvdW50ZXIgY2FuIGJlIGRvbmUgd2l0aAorICogYSBzaGlmdC4KKyAqLworI2RlZmluZSBJR0JfVFNZTkNfU0hJRlQgKDE5KQorI2RlZmluZSBJR0JfVFNZTkNfU0NBTEUgKDE8PElHQl9UU1lOQ19TSElGVCkKKworLyoqCisgKiBUaGUgZHVyYXRpb24gb2Ygb25lIGNsb2NrIGN5Y2xlIG9mIHRoZSBOSUMuCisgKgorICogQHRvZG8gVGhpcyBoYXJkLWNvZGVkIHZhbHVlIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG1pZ2h0IGNoYW5nZQorICogaW4gZnV0dXJlIGhhcmR3YXJlIHJldmlzaW9ucy4gQWRkIHJldmlzaW9uIGNoZWNrLgorICovCisjZGVmaW5lIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTIDE2CisKKyNpZiAoSUdCX1RTWU5DX1NDQUxFICogSUdCX1RTWU5DX0NZQ0xFX1RJTUVfSU5fTkFOT1NFQ09ORFMpID49ICgxPDwyNCkKKyMgZXJyb3IgSUdCX1RTWU5DX1NDQUxFIGFuZC9vciBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyBhcmUgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIFRJTUlOQ0EKKyNlbmRpZgorCisvKioKKyAqIGlnYl9yZWFkX2Nsb2NrIC0gcmVhZCByYXcgY3ljbGUgY291bnRlciAodG8gYmUgdXNlZCBieSB0aW1lIGNvdW50ZXIpCisgKi8KK3N0YXRpYyBjeWNsZV90IGlnYl9yZWFkX2Nsb2NrKGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKnRjKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih0Yywgc3RydWN0IGlnYl9hZGFwdGVyLCBjeWNsZXMpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTY0IHN0YW1wOworCisJc3RhbXAgPSAgcmQzMihFMTAwMF9TWVNUSU1MKTsKKwlzdGFtcCB8PSAodTY0KXJkMzIoRTEwMDBfU1lTVElNSCkgPDwgMzJVTEw7CisKKwlyZXR1cm4gc3RhbXA7Cit9CisKICNpZmRlZiBERUJVRwogLyoqCiAgKiBpZ2JfZ2V0X2h3X2Rldl9uYW1lIC0gcmV0dXJuIGRldmljZSBuYW1lIHN0cmluZwpAQCAtMTg4LDkgKzI1MSw0NCBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwogCXJldHVybiBhZGFwdGVyLT5uZXRkZXYtPm5hbWU7CiB9CisKKy8qKgorICogaWdiX2dldF90aW1lX3N0ciAtIGZvcm1hdCBjdXJyZW50IE5JQyBhbmQgc3lzdGVtIHRpbWUgYXMgc3RyaW5nCisgKi8KK3N0YXRpYyBjaGFyICppZ2JfZ2V0X3RpbWVfc3RyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgIGNoYXIgYnVmZmVyWzE2MF0pCit7CisJY3ljbGVfdCBodyA9IGFkYXB0ZXItPmN5Y2xlcy5yZWFkKCZhZGFwdGVyLT5jeWNsZXMpOworCXN0cnVjdCB0aW1lc3BlYyBuaWMgPSBuc190b190aW1lc3BlYyh0aW1lY291bnRlcl9yZWFkKCZhZGFwdGVyLT5jbG9jaykpOworCXN0cnVjdCB0aW1lc3BlYyBzeXM7CisJc3RydWN0IHRpbWVzcGVjIGRlbHRhOworCWdldG5zdGltZW9mZGF5KCZzeXMpOworCisJZGVsdGEgPSB0aW1lc3BlY19zdWIobmljLCBzeXMpOworCisJc3ByaW50ZihidWZmZXIsCisJCSJIVyAlbGx1LCBOSUMgJWxkLiUwOWx1cywgU1lTICVsZC4lMDlsdXMsIE5JQy1TWVMgJWxkcyArICUwOWx1bnMiLAorCQlodywKKwkJKGxvbmcpbmljLnR2X3NlYywgbmljLnR2X25zZWMsCisJCShsb25nKXN5cy50dl9zZWMsIHN5cy50dl9uc2VjLAorCQkobG9uZylkZWx0YS50dl9zZWMsIGRlbHRhLnR2X25zZWMpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KICNlbmRpZgogCiAvKioKKyAqIGlnYl9kZXNjX3VudXNlZCAtIGNhbGN1bGF0ZSBpZiB3ZSBoYXZlIHVudXNlZCBkZXNjcmlwdG9ycworICoqLworc3RhdGljIGludCBpZ2JfZGVzY191bnVzZWQoc3RydWN0IGlnYl9yaW5nICpyaW5nKQoreworCWlmIChyaW5nLT5uZXh0X3RvX2NsZWFuID4gcmluZy0+bmV4dF90b191c2UpCisJCXJldHVybiByaW5nLT5uZXh0X3RvX2NsZWFuIC0gcmluZy0+bmV4dF90b191c2UgLSAxOworCisJcmV0dXJuIHJpbmctPmNvdW50ICsgcmluZy0+bmV4dF90b19jbGVhbiAtIHJpbmctPm5leHRfdG9fdXNlIC0gMTsKK30KKworLyoqCiAgKiBpZ2JfaW5pdF9tb2R1bGUgLSBEcml2ZXIgUmVnaXN0cmF0aW9uIFJvdXRpbmUKICAqCiAgKiBpZ2JfaW5pdF9tb2R1bGUgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcwpAQCAtMjQzLDYgKzM0MSw3IEBACiBzdGF0aWMgdm9pZCBpZ2JfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgaW50IHJiYXNlX29mZnNldCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NjoKQEAgLTI1Miw5ICszNTEsMTEgQEAKIAkJICogYW5kIGNvbnRpbnVlIGNvbnN1bWluZyBxdWV1ZXMgaW4gdGhlIHNhbWUgc2VxdWVuY2UKIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBRX0lEWF84MjU3NihpKTsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihpKTsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IFFfSURYXzgyNTc2KGkpOworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGkpOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc1OgogCWRlZmF1bHQ6CkBAIC0zNTQsNyArNDU1LDcgQEAKIAkJICAgYSB2ZWN0b3IgbnVtYmVyIGFsb25nIHdpdGggYSAidmFsaWQiIGJpdC4gIFNhZGx5LCB0aGUgbGF5b3V0CiAJCSAgIG9mIHRoZSB0YWJsZSBpcyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLiAqLwogCQlpZiAocnhfcXVldWUgPiBJR0JfTjBfUVVFVUUpIHsKLQkJCWluZGV4ID0gKHJ4X3F1ZXVlID4+IDEpOworCQkJaW5kZXggPSAocnhfcXVldWUgPj4gMSkgKyBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCQkJaXZhciA9IGFycmF5X3JkMzIoRTEwMDBfSVZBUjAsIGluZGV4KTsKIAkJCWlmIChyeF9xdWV1ZSAmIDB4MSkgewogCQkJCS8qIHZlY3RvciBnb2VzIGludG8gdGhpcmQgYnl0ZSBvZiByZWdpc3RlciAqLwpAQCAtMzY5LDcgKzQ3MCw3IEBACiAJCQlhcnJheV93cjMyKEUxMDAwX0lWQVIwLCBpbmRleCwgaXZhcik7CiAJCX0KIAkJaWYgKHR4X3F1ZXVlID4gSUdCX04wX1FVRVVFKSB7Ci0JCQlpbmRleCA9ICh0eF9xdWV1ZSA+PiAxKTsKKwkJCWluZGV4ID0gKHR4X3F1ZXVlID4+IDEpICsgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAkJCWl2YXIgPSBhcnJheV9yZDMyKEUxMDAwX0lWQVIwLCBpbmRleCk7CiAJCQlpZiAodHhfcXVldWUgJiAweDEpIHsKIAkJCQkvKiB2ZWN0b3IgZ29lcyBpbnRvIGhpZ2ggYnl0ZSBvZiByZWdpc3RlciAqLwpAQCAtNDA3LDcgKzUwOCw3IEBACiAJCS8qIFR1cm4gb24gTVNJLVggY2FwYWJpbGl0eSBmaXJzdCwgb3Igb3VyIHNldHRpbmdzCiAJCSAqIHdvbid0IHN0aWNrLiAgQW5kIGl0IHdpbGwgdGFrZSBkYXlzIHRvIGRlYnVnLiAqLwogCQl3cjMyKEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwKLQkJCQkgICBFMTAwMF9HUElFX1BCQSB8IEUxMDAwX0dQSUVfRUlBTUUgfCAKKwkJCQkgICBFMTAwMF9HUElFX1BCQSB8IEUxMDAwX0dQSUVfRUlBTUUgfAogIAkJCQkgICBFMTAwMF9HUElFX05TSUNSKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKQEAgLTUwNiw5ICs2MDcsNiBAQAogCQkJZ290byBvdXQ7CiAJCXJpbmctPml0cl9yZWdpc3RlciA9IEUxMDAwX0VJVFIoMCkgKyAodmVjdG9yIDw8IDIpOwogCQlyaW5nLT5pdHJfdmFsID0gYWRhcHRlci0+aXRyOwotCQkvKiBvdmVyd3JpdGUgdGhlIHBvbGwgcm91dGluZSBmb3IgTVNJWCwgd2UndmUgYWxyZWFkeSBkb25lCi0JCSAqIG5ldGlmX25hcGlfYWRkICovCi0JCXJpbmctPm5hcGkucG9sbCA9ICZpZ2JfY2xlYW5fcnhfcmluZ19tc2l4OwogCQl2ZWN0b3IrKzsKIAl9CiAKQEAgLTU0Niw2ICs2NDQsMTEgQEAKIAlpbnQgZXJyOwogCWludCBudW12ZWNzLCBpOwogCisJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMuICovCisJLyogSGF2aW5nIG1vcmUgcXVldWVzIHRoYW4gQ1BVcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1RYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOworCiAJbnVtdmVjcyA9IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgMTsKIAlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKG51bXZlY3MsIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksCiAJCQkJCUdGUF9LRVJORUwpOwpAQCAtNjg3LDcgKzc5MCwxMCBAQAogCQl3cjMyKEUxMDAwX0VJQUMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQl3cjMyKEUxMDAwX0VJQU0sIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQl3cjMyKEUxMDAwX0VJTVMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwotCQl3cjMyKEUxMDAwX0lNUywgRTEwMDBfSU1TX0xTQyk7CisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJd3IzMihFMTAwMF9NQlZGSU1SLCAweEZGKTsKKwkJd3IzMihFMTAwMF9JTVMsIChFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX1ZNTUIgfAorCQkgICAgICAgICAgICAgICAgIEUxMDAwX0lNU19ET1VUU1lOQykpOwogCX0gZWxzZSB7CiAJCXdyMzIoRTEwMDBfSU1TLCBJTVNfRU5BQkxFX01BU0spOwogCQl3cjMyKEUxMDAwX0lBTSwgSU1TX0VOQUJMRV9NQVNLKTsKQEAgLTc3OCwxMiArODg0LDEyIEBACiAKIAlpZ2JfcnhfZmlmb19mbHVzaF84MjU3NSgmYWRhcHRlci0+aHcpOwogCi0JLyogY2FsbCBJR0JfREVTQ19VTlVTRUQgd2hpY2ggYWx3YXlzIGxlYXZlcworCS8qIGNhbGwgaWdiX2Rlc2NfdW51c2VkIHdoaWNoIGFsd2F5cyBsZWF2ZXMKIAkgKiBhdCBsZWFzdCAxIGRlc2NyaXB0b3IgdW51c2VkIHRvIG1ha2Ugc3VyZQogCSAqIG5leHRfdG9fdXNlICE9IG5leHRfdG9fY2xlYW4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOwotCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocmluZywgSUdCX0RFU0NfVU5VU0VEKHJpbmcpKTsKKwkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJpbmcsIGlnYl9kZXNjX3VudXNlZChyaW5nKSk7CiAJfQogCiAKQEAgLTgxMSw2ICs5MTcsMTAgQEAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQogCQlpZ2JfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CiAKKwlpZ2Jfdm1tX2NvbnRyb2woYWRhcHRlcik7CisJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CisJaWdiX3NldF92bW9scihodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisKIAkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwogCXJkMzIoRTEwMDBfSUNSKTsKIAlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKQEAgLTg1Niw2ICs5NjYsMTAgQEAKIAogCW5ldGRldi0+dHhfcXVldWVfbGVuID0gYWRhcHRlci0+dHhfcXVldWVfbGVuOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisKKwkvKiByZWNvcmQgdGhlIHN0YXRzIGJlZm9yZSByZXNldCovCisJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKKwogCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOwogCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsKIApAQCAtODg2LDExICsxMDAwLDE0IEBACiAJLyogUmVwYXJ0aXRpb24gUGJhIGZvciBncmVhdGVyIHRoYW4gOWsgbXR1CiAJICogVG8gdGFrZSBlZmZlY3QgQ1RSTC5SU1QgaXMgcmVxdWlyZWQuCiAJICovCi0JaWYgKG1hYy0+dHlwZSAhPSBlMTAwMF84MjU3NikgewotCXBiYSA9IEUxMDAwX1BCQV8zNEs7Ci0JfQotCWVsc2UgeworCXN3aXRjaCAobWFjLT50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NjoKIAkJcGJhID0gRTEwMDBfUEJBXzY0SzsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF84MjU3NToKKwlkZWZhdWx0OgorCQlwYmEgPSBFMTAwMF9QQkFfMzRLOworCQlicmVhazsKIAl9CiAKIAlpZiAoKGFkYXB0ZXItPm1heF9mcmFtZV9zaXplID4gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSAmJgpAQCAtOTEyLDcgKzEwMjksNyBAQAogCQkvKiB0aGUgdHggZmlmbyBhbHNvIHN0b3JlcyAxNiBieXRlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHgKIAkJICogYnV0IGRvbid0IGluY2x1ZGUgZXRoZXJuZXQgRkNTIGJlY2F1c2UgaGFyZHdhcmUgYXBwZW5kcyBpdCAqLwogCQltaW5fdHhfc3BhY2UgPSAoYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgKwotCQkJCXNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykgLQorCQkJCXNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYykgLQogCQkJCUVUSF9GQ1NfTEVOKSAqIDI7CiAJCW1pbl90eF9zcGFjZSA9IEFMSUdOKG1pbl90eF9zcGFjZSwgMTAyNCk7CiAJCW1pbl90eF9zcGFjZSA+Pj0gMTA7CkBAIC05NTYsNiArMTA3MywyMCBAQAogCWZjLT5zZW5kX3hvbiA9IDE7CiAJZmMtPnR5cGUgPSBmYy0+b3JpZ2luYWxfdHlwZTsKIAorCS8qIGRpc2FibGUgcmVjZWl2ZSBmb3IgYWxsIFZGcyBhbmQgd2FpdCBvbmUgc2Vjb25kICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsgaSsrKQorCQkJYWRhcHRlci0+dmZfZGF0YVtpXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CisKKwkJLyogcGluZyBhbGwgdGhlIGFjdGl2ZSB2ZnMgdG8gbGV0IHRoZW0ga25vdyB3ZSBhcmUgZ29pbmcgZG93biAqLworCQkJaWdiX3BpbmdfYWxsX3ZmcyhhZGFwdGVyKTsKKworCQkvKiBkaXNhYmxlIHRyYW5zbWl0cyBhbmQgcmVjZWl2ZXMgKi8KKwkJd3IzMihFMTAwMF9WRlJFLCAwKTsKKwkJd3IzMihFMTAwMF9WRlRFLCAwKTsKKwl9CisKIAkvKiBBbGxvdyB0aW1lIGZvciBwZW5kaW5nIG1hc3RlciByZXF1ZXN0cyB0byBydW4gKi8KIAlhZGFwdGVyLT5ody5tYWMub3BzLnJlc2V0X2h3KCZhZGFwdGVyLT5odyk7CiAJd3IzMihFMTAwMF9XVUMsIDApOwpAQCAtOTcyLDIxICsxMTAzLDYgQEAKIAlpZ2JfZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7CiB9CiAKLS8qKgotICogaWdiX2lzX25lZWRfaW9wb3J0IC0gZGV0ZXJtaW5lIGlmIGFuIGFkYXB0ZXIgbmVlZHMgaW9wb3J0IHJlc291cmNlcyBvciBub3QKLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiBhZGFwdGVyIG5lZWRzIGlvcG9ydCByZXNvdXJjZXMKLSAqKi8KLXN0YXRpYyBpbnQgaWdiX2lzX25lZWRfaW9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7Ci0JLyogQ3VycmVudGx5IHRoZXJlIGFyZSBubyBhZGFwdGVycyB0aGF0IG5lZWQgaW9wb3J0IHJlc291cmNlcyAqLwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWdiX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuIAkJPSBpZ2Jfb3BlbiwKIAkubmRvX3N0b3AJCT0gaWdiX2Nsb3NlLApAQCAtMTAyNSwyMSArMTE0MSwxMiBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHc7CiAJY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmVpID0gaWdiX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47Ci0JaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKKwlpbnQgZXJyLCBwY2lfdXNpbmdfZGFjOwogCXUxNiBlZXByb21fZGF0YSA9IDA7CiAJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBJR0JfRUVQUk9NX0FQTUU7CiAJdTMyIHBhcnRfbnVtOwotCWludCBiYXJzLCBuZWVkX2lvcG9ydDsKIAotCS8qIGRvIG5vdCBhbGxvY2F0ZSBpb3BvcnQgYmFycyB3aGVuIG5vdCBuZWVkZWQgKi8KLQluZWVkX2lvcG9ydCA9IGlnYl9pc19uZWVkX2lvcG9ydChwZGV2KTsKLQlpZiAobmVlZF9pb3BvcnQpIHsKLQkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfSU8pOwotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQl9IGVsc2UgewotCQliYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwotCX0KKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA2MSw3ICsxMTY4LDkgQEAKIAkJfQogCX0KIAotCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycywgaWdiX2RyaXZlcl9uYW1lKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdiX2RyaXZlcl9uYW1lKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wY2lfcmVnOwogCkBAIC0xMDc2LDcgKzExODUsOCBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJZXJyID0gLUVOT01FTTsKLQluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGlnYl9hZGFwdGVyKSwgSUdCX01BWF9UWF9RVUVVRVMpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaWdiX2FkYXB0ZXIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIElHQl9BQlNfTUFYX1RYX1FVRVVFUyk7CiAJaWYgKCFuZXRkZXYpCiAJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OwogCkBAIC0xMDg5LDE1ICsxMTk5LDEzIEBACiAJaHcgPSAmYWRhcHRlci0+aHc7CiAJaHctPmJhY2sgPSBhZGFwdGVyOwogCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFOwotCWFkYXB0ZXItPmJhcnMgPSBiYXJzOwotCWFkYXB0ZXItPm5lZWRfaW9wb3J0ID0gbmVlZF9pb3BvcnQ7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAogCWVyciA9IC1FSU87Ci0JYWRhcHRlci0+aHcuaHdfYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOwotCWlmICghYWRhcHRlci0+aHcuaHdfYWRkcikKKwlody0+aHdfYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghaHctPmh3X2FkZHIpCiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmaWdiX25ldGRldl9vcHM7CkBAIC0xMTI1LDggKzEyMzMsOSBAQAogCS8qIEluaXRpYWxpemUgc2tldy1zcGVjaWZpYyBjb25zdGFudHMgKi8KIAllcnIgPSBlaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2h3X2luaXQ7CisJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAllcnIgPSBpZ2Jfc3dfaW5pdChhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zd19pbml0OwpAQCAtMTE1OCwyNyArMTI2NywyNSBAQAogCQkJIlBIWSByZXNldCBpcyBibG9ja2VkIGR1ZSB0byBTT0wvSURFUiBzZXNzaW9uLlxuIik7CiAKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8Ci0JCQkgICBORVRJRl9GX0hXX0NTVU0gfAorCQkJICAgTkVUSUZfRl9JUF9DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9UWCB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fUlggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLSNlbmRpZgorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CiAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIAlhZGFwdGVyLT5lbl9tbmdfcHQgPSBpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoJmFkYXB0ZXItPmh3KTsKIAogCS8qIGJlZm9yZSByZWFkaW5nIHRoZSBOVk0sIHJlc2V0IHRoZSBjb250cm9sbGVyIHRvIHB1dCB0aGUgZGV2aWNlIGluIGEKQEAgLTEyMDUsMjUgKzEzMTIsMTUgQEAKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZpZ2Jfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOwotCi0JaW5pdF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIpOwotCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmZ1bmN0aW9uID0gJmlnYl91cGRhdGVfcGh5X2luZm87Ci0JYWRhcHRlci0+cGh5X2luZm9fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgJmlnYl93YXRjaGRvZywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CisJc2V0dXBfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLCAmaWdiX3VwZGF0ZV9waHlfaW5mbywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGlnYl9yZXNldF90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIGlnYl93YXRjaGRvZ190YXNrKTsKIAotCS8qIEluaXRpYWxpemUgbGluayAmIHJpbmcgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VyLWNoYW5nZWFibGUgKi8KLQlhZGFwdGVyLT50eF9yaW5nLT5jb3VudCA9IDI1NjsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQ7Ci0JYWRhcHRlci0+cnhfcmluZy0+Y291bnQgPSAyNTY7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IGFkYXB0ZXItPnJ4X3JpbmctPmNvdW50OwotCisJLyogSW5pdGlhbGl6ZSBsaW5rIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlci1jaGFuZ2VhYmxlICovCiAJYWRhcHRlci0+ZmNfYXV0b25lZyA9IHRydWU7CiAJaHctPm1hYy5hdXRvbmVnID0gdHJ1ZTsKIAlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IDB4MmY7CkBAIC0xMjMxLDcgKzEzMjgsNyBAQAogCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKIAlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAKLQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDM7CisJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBJR0JfREVGQVVMVF9JVFI7CiAJYWRhcHRlci0+aXRyID0gSUdCX1NUQVJUX0lUUjsKIAogCWlnYl92YWxpZGF0ZV9tZGlfc2V0dGluZyhodyk7CkBAIC0xMjQyLDEwICsxMzM5LDEwIEBACiAJICogZW5hYmxlIHRoZSBBQ1BJIE1hZ2ljIFBhY2tldCBmaWx0ZXIKIAkgKi8KIAotCWlmIChody0+YnVzLmZ1bmMgPT0gMCB8fAotCSAgICBody0+ZGV2aWNlX2lkID09IEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUikKLQkJaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSwgMSwKLQkJCQkgICAgICZlZXByb21fZGF0YSk7CisJaWYgKGh3LT5idXMuZnVuYyA9PSAwKQorCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EsIDEsICZlZXByb21fZGF0YSk7CisJZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IDEpCisJCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQiwgMSwgJmVlcHJvbV9kYXRhKTsKIAogCWlmIChlZXByb21fZGF0YSAmIGVlcHJvbV9hcG1lX21hc2spCiAJCWFkYXB0ZXItPmVlcHJvbV93b2wgfD0gRTEwMDBfV1VGQ19NQUc7CkBAIC0xMjY1LDYgKzEzNjIsMTYgQEAKIAkJaWYgKHJkMzIoRTEwMDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCiAJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIGlmIHF1YWQgcG9ydCBhZGFwdGVyLCBkaXNhYmxlIFdvTCBvbiBhbGwgYnV0IHBvcnQgQSAqLworCQlpZiAoZ2xvYmFsX3F1YWRfcG9ydF9hICE9IDApCisJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKKwkJZWxzZQorCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfUVVBRF9QT1JUX0E7CisJCS8qIFJlc2V0IGZvciBtdWx0aXBsZSBxdWFkIHBvcnQgYWRhcHRlcnMgKi8KKwkJaWYgKCsrZ2xvYmFsX3F1YWRfcG9ydF9hID09IDQpCisJCQlnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOworCQlicmVhazsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3b2wgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGVlcHJvbSBzZXR0aW5ncyAqLwpAQCAtMTI4NywxNyArMTM5NCw4MiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiBzaW5jZSBpb3YgZnVuY3Rpb25hbGl0eSBpc24ndCBjcml0aWNhbCB0byBiYXNlIGRldmljZSBmdW5jdGlvbiB3ZQorCSAqIGNhbiBhY2NlcHQgZmFpbHVyZS4gIElmIGl0IGZhaWxzIHdlIGRvbid0IGFsbG93IGlvdiB0byBiZSBlbmFibGVkICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQllcnIgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIDApOworCQlpZiAoIWVycikKKwkJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV0ZGV2LT5kZXYsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJmRldl9hdHRyX251bV92ZnMpOworCQlpZiAoZXJyKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgSU9WXG4iKTsKKwl9CisKKyNlbmRpZgogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEQ0EgZW5hYmxlZFxuIik7CiAJCS8qIEFsd2F5cyB1c2UgQ0IyIG1vZGUsIGRpZmZlcmVuY2UgaXMgbWFza2VkCiAJCSAqIGluIHRoZSBDQiBkcml2ZXIuICovCi0JCXdyMzIoRTEwMDBfRENBX0NUUkwsIDIpOworCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjIpOwogCQlpZ2Jfc2V0dXBfZGNhKGFkYXB0ZXIpOwogCX0KICNlbmRpZgogCisJLyoKKwkgKiBJbml0aWFsaXplIGhhcmR3YXJlIHRpbWVyOiB3ZSBrZWVwIGl0IHJ1bm5pbmcganVzdCBpbiBjYXNlCisJICogdGhhdCBzb21lIHByb2dyYW0gbmVlZHMgaXQgbGF0ZXIgb24uCisJICovCisJbWVtc2V0KCZhZGFwdGVyLT5jeWNsZXMsIDAsIHNpemVvZihhZGFwdGVyLT5jeWNsZXMpKTsKKwlhZGFwdGVyLT5jeWNsZXMucmVhZCA9IGlnYl9yZWFkX2Nsb2NrOworCWFkYXB0ZXItPmN5Y2xlcy5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCk7CisJYWRhcHRlci0+Y3ljbGVzLm11bHQgPSAxOworCWFkYXB0ZXItPmN5Y2xlcy5zaGlmdCA9IElHQl9UU1lOQ19TSElGVDsKKwl3cjMyKEUxMDAwX1RJTUlOQ0EsCisJICAgICAoMTw8MjQpIHwKKwkgICAgIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTICogSUdCX1RTWU5DX1NDQUxFKTsKKyNpZiAwCisJLyoKKwkgKiBBdm9pZCByb2xsb3ZlciB3aGlsZSB3ZSBpbml0aWFsaXplIGJ5IHJlc2V0dGluZyB0aGUgdGltZSBjb3VudGVyLgorCSAqLworCXdyMzIoRTEwMDBfU1lTVElNTCwgMHgwMDAwMDAwMCk7CisJd3IzMihFMTAwMF9TWVNUSU1ILCAweDAwMDAwMDAwKTsKKyNlbHNlCisJLyoKKwkgKiBTZXQgcmVnaXN0ZXJzIHNvIHRoYXQgcm9sbG92ZXIgb2NjdXJzIHNvb24gdG8gdGVzdCB0aGlzLgorCSAqLworCXdyMzIoRTEwMDBfU1lTVElNTCwgMHgwMDAwMDAwMCk7CisJd3IzMihFMTAwMF9TWVNUSU1ILCAweEZGODAwMDAwKTsKKyNlbmRpZgorCXdyZmwoKTsKKwl0aW1lY291bnRlcl9pbml0KCZhZGFwdGVyLT5jbG9jaywKKwkJCSAmYWRhcHRlci0+Y3ljbGVzLAorCQkJIGt0aW1lX3RvX25zKGt0aW1lX2dldF9yZWFsKCkpKTsKKworCS8qCisJICogU3luY2hyb25pemUgb3VyIE5JQyBjbG9jayBhZ2FpbnN0IHN5c3RlbSB3YWxsIGNsb2NrLiBOSUMKKwkgKiB0aW1lIHN0YW1wIHJlYWRpbmcgcmVxdWlyZXMgfjN1cyBwZXIgc2FtcGxlLCBlYWNoIHNhbXBsZQorCSAqIHdhcyBwcmV0dHkgc3RhYmxlIGV2ZW4gdW5kZXIgbG9hZCA9PiBvbmx5IHJlcXVpcmUgMTAKKwkgKiBzYW1wbGVzIGZvciBlYWNoIG9mZnNldCBjb21wYXJpc29uLgorCSAqLworCW1lbXNldCgmYWRhcHRlci0+Y29tcGFyZSwgMCwgc2l6ZW9mKGFkYXB0ZXItPmNvbXBhcmUpKTsKKwlhZGFwdGVyLT5jb21wYXJlLnNvdXJjZSA9ICZhZGFwdGVyLT5jbG9jazsKKwlhZGFwdGVyLT5jb21wYXJlLnRhcmdldCA9IGt0aW1lX2dldF9yZWFsOworCWFkYXB0ZXItPmNvbXBhcmUubnVtX3NhbXBsZXMgPSAxMDsKKwl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIDApOworCisjaWZkZWYgREVCVUcKKwl7CisJCWNoYXIgYnVmZmVyWzE2MF07CisJCXByaW50ayhLRVJOX0RFQlVHCisJCQkiaWdiOiAlczogaHcgJXAgaW5pdGlhbGl6ZWQgdGltZXJcbiIsCisJCQlpZ2JfZ2V0X3RpbWVfc3RyKGFkYXB0ZXIsIGJ1ZmZlciksCisJCQkmYWRhcHRlci0+aHcpOworCX0KKyNlbmRpZgorCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTmV0d29yayBDb25uZWN0aW9uXG4iKTsKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiAoUENJZTolczolcykgJXBNXG4iLApAQCAtMTMzMCwxNSArMTUwMiwxNCBAQAogCWlmIChody0+Zmxhc2hfYWRkcmVzcykKIAkJaW91bm1hcChody0+Zmxhc2hfYWRkcmVzcyk7CiAKLQlpZ2JfcmVtb3ZlX2RldmljZShodyk7CiAJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOwogZXJyX3N3X2luaXQ6Ci1lcnJfaHdfaW5pdDoKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiBlcnJfYWxsb2NfZXRoZXJkZXY6Ci0JcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBiYXJzKTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pKTsKIGVycl9wY2lfcmVnOgogZXJyX2RtYToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0xMzU4LDkgKzE1MjksNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLSNpZmRlZiBDT05GSUdfSUdCX0RDQQogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0jZW5kaWYKIAlpbnQgZXJyOwogCiAJLyogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC0xMzc2LDcgKzE1NDUsNyBAQAogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKIAkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoJnBkZXYtPmRldik7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKLQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgMSk7CisJCXdyMzIoRTEwMDBfRENBX0NUUkwsIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0RJU0FCTEUpOwogCX0KICNlbmRpZgogCkBAIC0xMzg5LDE1ICsxNTU4LDI5IEBACiAJaWYgKCFpZ2JfY2hlY2tfcmVzZXRfYmxvY2soJmFkYXB0ZXItPmh3KSkKIAkJaWdiX3Jlc2V0X3BoeSgmYWRhcHRlci0+aHcpOwogCi0JaWdiX3JlbW92ZV9kZXZpY2UoJmFkYXB0ZXItPmh3KTsKIAlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CiAKIAlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CiAKLQlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwotCWlmIChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQotCQlpb3VubWFwKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpOwotCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYWRhcHRlci0+YmFycyk7CisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiByZWNsYWltIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gVkZzICovCisJaWYgKGFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJLyogZGlzYWJsZSBpb3YgYW5kIGFsbG93IHRpbWUgZm9yIHRyYW5zYWN0aW9ucyB0byBjbGVhciAqLworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJbXNsZWVwKDUwMCk7CisKKwkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOworCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCW1zbGVlcCgxMDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSU9WIERpc2FibGVkXG4iKTsKKwl9CisjZW5kaWYKKwlpb3VubWFwKGh3LT5od19hZGRyKTsKKwlpZiAoaHctPmZsYXNoX2FkZHJlc3MpCisJCWlvdW5tYXAoaHctPmZsYXNoX2FkZHJlc3MpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgcGNpX3NlbGVjdF9iYXJzKHBkZXYsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1JFU09VUkNFX01FTSkpOwogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMTQzMiwxMSArMTYxNSw2IEBACiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAJYWRhcHRlci0+bWluX2ZyYW1lX3NpemUgPSBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMuICovCi0JLyogSGF2aW5nIG1vcmUgcXVldWVzIHRoYW4gQ1BVcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuICovCi0JYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1RYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOwotCiAJLyogVGhpcyBjYWxsIG1heSBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBkZXBlbmRpbmcgb24KIAkgKiBpbnRlcnJ1cHQgbW9kZS4gKi8KIAlpZ2Jfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwpAQCAtMTQ5OSw2ICsxNjc3LDEwIEBACiAJICogY2xlYW5fcnggaGFuZGxlciBiZWZvcmUgd2UgZG8gc28uICAqLwogCWlnYl9jb25maWd1cmUoYWRhcHRlcik7CiAKKwlpZ2Jfdm1tX2NvbnRyb2woYWRhcHRlcik7CisJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CisJaWdiX3NldF92bW9scihodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisKIAllcnIgPSBpZ2JfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVxX2lycTsKQEAgLTE1NzQsNyArMTc1Niw2IEBACiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotCiBpbnQgaWdiX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7CkBAIC0xNTg4LDcgKzE3NjksNyBAQAogCW1lbXNldCh0eF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCi0JdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLApAQCAtMTYzNSw3ICsxODE2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSUdCX01BWF9UWF9RVUVVRVM7IGkrKykgewogCQlyX2lkeCA9IGkgJSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOwogCQlhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtpXSA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKLQl9CQorCX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjU0LDEzICsxODM1LDEzIEBACiAJaW50IGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW2ldOwogCQlqID0gcmluZy0+cmVnX2lkeDsKIAkJd3IzMihFMTAwMF9URExFTihqKSwKLQkJCQlyaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOworCQkgICAgIHJpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjKSk7CiAJCXRkYmEgPSByaW5nLT5kbWE7CiAJCXdyMzIoRTEwMDBfVERCQUwoaiksCi0JCQkJdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CisJCSAgICAgdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CiAJCXdyMzIoRTEwMDBfVERCQUgoaiksIHRkYmEgPj4gMzIpOwogCiAJCXJpbmctPmhlYWQgPSBFMTAwMF9UREgoaik7CkBAIC0xNjgwLDEyICsxODYxLDExIEBACiAJCXdyMzIoRTEwMDBfRENBX1RYQ1RSTChqKSwgdHhjdHJsKTsKIAl9CiAKLQotCi0JLyogVXNlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFR4IEludGVyIFBhY2tldCBHYXAgKElQRykgdGltZXIgKi8KKwkvKiBkaXNhYmxlIHF1ZXVlIDAgdG8gcHJldmVudCB0YWlsIGJ1bXAgdy9vIHJlLWNvbmZpZ3VyYXRpb24gKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJd3IzMihFMTAwMF9UWERDVEwoMCksIDApOwogCiAJLyogUHJvZ3JhbSB0aGUgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciAqLwotCiAJdGN0bCA9IHJkMzIoRTEwMDBfVENUTCk7CiAJdGN0bCAmPSB+RTEwMDBfVENUTF9DVDsKIAl0Y3RsIHw9IEUxMDAwX1RDVExfUFNQIHwgRTEwMDBfVENUTF9SVExDIHwKQEAgLTE3MDksMjEgKzE4ODksMTIgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotCiBpbnQgaWdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplLCBkZXNjX2xlbjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIE1BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gdm1hbGxvYyhzaXplKTsKLQlpZiAoIXJ4X3JpbmctPmxyb19tZ3IubHJvX2FycikKLQkJZ290byBlcnI7Ci0JbWVtc2V0KHJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciwgMCwgc2l6ZSk7Ci0jZW5kaWYKLQogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJcnhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+YnVmZmVyX2luZm8pCkBAIC0xNzUwLDEwICsxOTIxLDYgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotI2VuZGlmCiAJdmZyZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOwogCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKIAkJInRoZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ1xuIik7CkBAIC0xODAyLDEzICsxOTY5LDEzIEBACiAJcmN0bCAmPSB+KEUxMDAwX1JDVExfTEJNX1RDVlIgfCBFMTAwMF9SQ1RMX0xCTV9NQUMpOwogCiAJcmN0bCB8PSBFMTAwMF9SQ1RMX0VOIHwgRTEwMDBfUkNUTF9CQU0gfCBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgfAotCQkoYWRhcHRlci0+aHcubWFjLm1jX2ZpbHRlcl90eXBlIDw8IEUxMDAwX1JDVExfTU9fU0hJRlQpOworCQkoaHctPm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAogCS8qCiAJICogZW5hYmxlIHN0cmlwcGluZyBvZiBDUkMuIEl0J3MgdW5saWtlbHkgdGhpcyB3aWxsIGJyZWFrIEJNQwogCSAqIHJlZGlyZWN0aW9uIGFzIGl0IGRpZCB3aXRoIGUxMDAwLiBOZXdlciBmZWF0dXJlcyByZXF1aXJlCiAJICogdGhhdCB0aGUgSFcgc3RyaXBzIHRoZSBDUkMuCi0JKi8KKwkgKi8KIAlyY3RsIHw9IEUxMDAwX1JDVExfU0VDUkM7CiAKIAkvKgpAQCAtMTg1Miw2ICsyMDE5LDMwIEBACiAJCXNycmN0bCB8PSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRjsKIAl9CiAKKwkvKiBBdHRlbnRpb24hISEgIEZvciBTUi1JT1YgUEYgZHJpdmVyIG9wZXJhdGlvbnMgeW91IG11c3QgZW5hYmxlCisJICogcXVldWUgZHJvcCBmb3IgYWxsIFZGIGFuZCBQRiBxdWV1ZXMgdG8gcHJldmVudCBoZWFkIG9mIGxpbmUgYmxvY2tpbmcKKwkgKiBpZiBhbiB1bi10cnVzdGVkIFZGIGRvZXMgbm90IHByb3ZpZGUgZGVzY3JpcHRvcnMgdG8gaGFyZHdhcmUuCisJICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKKwkJdTMyIHZtb2xyOworCisJCWogPSBhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHg7CisKKwkJLyogc2V0IGFsbCBxdWV1ZSBkcm9wIGVuYWJsZSBiaXRzICovCisJCXdyMzIoRTEwMDBfUURFLCBBTExfUVVFVUVTKTsKKwkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9EUk9QX0VOOworCisJCS8qIGRpc2FibGUgcXVldWUgMCB0byBwcmV2ZW50IHRhaWwgd3JpdGUgdy9vIHJlLWNvbmZpZyAqLworCQl3cjMyKEUxMDAwX1JYRENUTCgwKSwgMCk7CisKKwkJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKGopKTsKKwkJaWYgKHJjdGwgJiBFMTAwMF9SQ1RMX0xQRSkKKwkJCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX0xQRTsKKwkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAwKQorCQkJdm1vbHIgfD0gRTEwMDBfVk1PTFJfUlNTRTsKKwkJd3IzMihFMTAwMF9WTU9MUihqKSwgdm1vbHIpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKIAkJd3IzMihFMTAwMF9TUlJDVEwoaiksIHNycmN0bCk7CkBAIC0xODYxLDYgKzIwNTIsNTQgQEAKIH0KIAogLyoqCisgKiBpZ2JfcmxwbWxfc2V0IC0gc2V0IG1heGltdW0gcmVjZWl2ZSBwYWNrZXQgc2l6ZQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIG1heGltdW0gcmVjZWl2YWJsZSBwYWNrZXQgc2l6ZS4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9ybHBtbF9zZXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBtYXhfZnJhbWVfc2l6ZSA9IGFkYXB0ZXItPm1heF9mcmFtZV9zaXplOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKKworCWlmIChhZGFwdGVyLT52bGdycCkKKwkJbWF4X2ZyYW1lX3NpemUgKz0gVkxBTl9UQUdfU0laRTsKKworCS8qIGlmIHZmcyBhcmUgZW5hYmxlZCB3ZSBzZXQgUkxQTUwgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgcmVxdWVzdAorCSAqIHNpemUgYW5kIHNldCB0aGUgVk1PTFIgUkxQTUwgdG8gdGhlIHNpemUgd2UgbmVlZCAqLworCWlmIChwZl9pZCkgeworCQlpZ2Jfc2V0X3ZmX3JscG1sKGFkYXB0ZXIsIG1heF9mcmFtZV9zaXplLCBwZl9pZCk7CisJCW1heF9mcmFtZV9zaXplID0gTUFYX1NURF9KVU1CT19GUkFNRV9TSVpFICsgVkxBTl9UQUdfU0laRTsKKwl9CisKKwl3cjMyKEUxMDAwX1JMUE1MLCBtYXhfZnJhbWVfc2l6ZSk7Cit9CisKKy8qKgorICogaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2wgLSBDb25maWd1cmUgVlQgZGVmYXVsdCBwb29sCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgcG9vbAorICoqLworc3RhdGljIHZvaWQgaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2woc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKKwl1MzIgdnRjdGw7CisKKwkvKiBub3QgaW4gc3ItaW92IG1vZGUgLSBkbyBub3RoaW5nICovCisJaWYgKCFwZl9pZCkKKwkJcmV0dXJuOworCisJdnRjdGwgPSByZDMyKEUxMDAwX1ZUX0NUTCk7CisJdnRjdGwgJj0gfihFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX01BU0sgfAorCQkgICBFMTAwMF9WVF9DVExfRElTQUJMRV9ERUZfUE9PTCk7CisJdnRjdGwgfD0gcGZfaWQgPDwgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9TSElGVDsKKwl3cjMyKEUxMDAwX1ZUX0NUTCwgdnRjdGwpOworfQorCisvKioKICAqIGlnYl9jb25maWd1cmVfcnggLSBDb25maWd1cmUgcmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCkBAIC0xODcyLDcgKzIxMTEsNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJjdGwsIHJ4Y3N1bTsKIAl1MzIgcnhkY3RsOwotCWludCBpLCBqOworCWludCBpOwogCiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJjdGwgPSByZDMyKEUxMDAwX1JDVEwpOwpAQCAtMTg4NiwxNCArMjEyNSwxNCBAQAogCS8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kCiAJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwotCQlqID0gcmluZy0+cmVnX2lkeDsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCWludCBqID0gcmluZy0+cmVnX2lkeDsKIAkJcmRiYSA9IHJpbmctPmRtYTsKIAkJd3IzMihFMTAwMF9SREJBTChqKSwKLQkJCQlyZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKKwkJICAgICByZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKIAkJd3IzMihFMTAwMF9SREJBSChqKSwgcmRiYSA+PiAzMik7CiAJCXdyMzIoRTEwMDBfUkRMRU4oaiksCi0JCQkgICAgICAgcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpKTsKKwkJICAgICByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYykpOwogCiAJCXJpbmctPmhlYWQgPSBFMTAwMF9SREgoaik7CiAJCXJpbmctPnRhaWwgPSBFMTAwMF9SRFQoaik7CkBAIC0xOTA3LDE2ICsyMTQ2LDYgQEAKIAkJcnhkY3RsIHw9IElHQl9SWF9IVEhSRVNIIDw8IDg7CiAJCXJ4ZGN0bCB8PSBJR0JfUlhfV1RIUkVTSCA8PCAxNjsKIAkJd3IzMihFMTAwMF9SWERDVEwoaiksIHJ4ZGN0bCk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQkJLyogSW50aXRpYWwgTFJPIFNldHRpbmdzICovCi0JCXJpbmctPmxyb19tZ3IubWF4X2FnZ3IgPSBNQVhfTFJPX0FHR1I7Ci0JCXJpbmctPmxyb19tZ3IubWF4X2Rlc2MgPSBNQVhfTFJPX0RFU0NSSVBUT1JTOwotCQlyaW5nLT5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaWdiX2dldF9za2JfaGRyOwotCQlyaW5nLT5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfTkFQSSB8IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKLQkJcmluZy0+bHJvX21nci5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLSNlbmRpZgogCX0KIAogCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID4gMSkgewpAQCAtMTk0MSw3ICsyMTcwLDEwIEBACiAJCQkJd3JpdGVsKHJldGEuZHdvcmQsCiAJCQkJICAgICAgIGh3LT5od19hZGRyICsgRTEwMDBfUkVUQSgwKSArIChqICYgfjMpKTsKIAkJfQotCQltcnFjID0gRTEwMDBfTVJRQ19FTkFCTEVfUlNTXzRROworCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCW1ycWMgPSBFMTAwMF9NUlFDX0VOQUJMRV9WTURRX1JTU18yUTsKKwkJZWxzZQorCQkJbXJxYyA9IEUxMDAwX01SUUNfRU5BQkxFX1JTU180UTsKIAogCQkvKiBGaWxsIG91dCBoYXNoIGZ1bmN0aW9uIHNlZWRzICovCiAJCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKQpAQCAtMTk2NiwyNyArMjE5OCwyMyBAQAogCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1BDU0Q7CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBtdWx0aS1xdWV1ZSBmb3Igc3ItaW92ICovCisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJd3IzMihFMTAwMF9NUlFDLCBFMTAwMF9NUlFDX0VOQUJMRV9WTURRKTsKIAkJLyogRW5hYmxlIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KIAkJcnhjc3VtID0gcmQzMihFMTAwMF9SWENTVU0pOwotCQlpZiAoYWRhcHRlci0+cnhfY3N1bSkgewotCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTDsKKwkJaWYgKGFkYXB0ZXItPnJ4X2NzdW0pCisJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1RVT0ZMIHwgRTEwMDBfUlhDU1VNX0lQUENTRTsKKwkJZWxzZQorCQkJcnhjc3VtICY9IH4oRTEwMDBfUlhDU1VNX1RVT0ZMIHwgRTEwMDBfUlhDU1VNX0lQUENTRSk7CiAKLQkJCS8qIEVuYWJsZSBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMKLQkJCSAqIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHBhY2tldC1zcGxpdC4gKi8KLQkJCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKLQkJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX0lQUENTRTsKLQkJfSBlbHNlIHsKLQkJCXJ4Y3N1bSAmPSB+RTEwMDBfUlhDU1VNX1RVT0ZMOwotCQkJLyogZG9uJ3QgbmVlZCB0byBjbGVhciBJUFBDU0UgYXMgaXQgZGVmYXVsdHMgdG8gMCAqLwotCQl9CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0KIAotCWlmIChhZGFwdGVyLT52bGdycCkKLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOwotCWVsc2UKLQkJd3IzMihFMTAwMF9STFBNTCwgYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOworCS8qIFNldCB0aGUgZGVmYXVsdCBwb29sIGZvciB0aGUgUEYncyBmaXJzdCBxdWV1ZSAqLworCWlnYl9jb25maWd1cmVfdnRfZGVmYXVsdF9wb29sKGFkYXB0ZXIpOworCisJaWdiX3JscG1sX3NldChhZGFwdGVyKTsKIAogCS8qIEVuYWJsZSBSZWNlaXZlcyAqLwogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CkBAIC0yMDI5LDE0ICsyMjU3LDEwIEBACiBzdGF0aWMgdm9pZCBpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICBzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQlidWZmZXJfaW5mby0+ZG1hLAotCQkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGgsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCX0KKwlidWZmZXJfaW5mby0+ZG1hID0gMDsKIAlpZiAoYnVmZmVyX2luZm8tPnNrYikgeworCQlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGJ1ZmZlcl9pbmZvLT5za2IsCisJCSAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOwogCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAl9CkBAIC0yMTA1LDExICsyMzI5LDYgQEAKIAl2ZnJlZShyeF9yaW5nLT5idWZmZXJfaW5mbyk7CiAJcnhfcmluZy0+YnVmZmVyX2luZm8gPSBOVUxMOwogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7Ci0jZW5kaWYgCi0KIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHJ4X3JpbmctPnNpemUsIHJ4X3JpbmctPmRlc2MsIHJ4X3JpbmctPmRtYSk7CiAKIAlyeF9yaW5nLT5kZXNjID0gTlVMTDsKQEAgLTIyMDksMTUgKzI0MjgsMTggQEAKIHN0YXRpYyBpbnQgaWdiX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCW1lbWNweShhZGFwdGVyLT5ody5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGh3LT5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlhZGFwdGVyLT5ody5tYWMub3BzLnJhcl9zZXQoJmFkYXB0ZXItPmh3LCBhZGFwdGVyLT5ody5tYWMuYWRkciwgMCk7CisJaHctPm1hYy5vcHMucmFyX3NldChodywgaHctPm1hYy5hZGRyLCAwKTsKKworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjM3LDcgKzI0NTksNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQl1OCAgKm10YV9saXN0OworCXU4ICAqbXRhX2xpc3QgPSBOVUxMOwogCXUzMiByY3RsOwogCWludCBpOwogCkBAIC0yMjU4LDE3ICsyNDgwLDE1IEBACiAJfQogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAKLQlpZiAoIW5ldGRldi0+bWNfY291bnQpIHsKLQkJLyogbm90aGluZyB0byBwcm9ncmFtLCBzbyBjbGVhciBtYyBsaXN0ICovCi0JCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KGh3LCBOVUxMLCAwLCAxLAotCQkJCQkgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKLQkJcmV0dXJuOworCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7CisJCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJCWlmICghbXRhX2xpc3QpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSAgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtdWx0aWNhc3QgZmlsdGVyIGxpc3RcbiIpOworCQkJcmV0dXJuOworCQl9CiAJfQogCi0JbXRhX2xpc3QgPSBremFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlDKTsKLQlpZiAoIW10YV9saXN0KQotCQlyZXR1cm47Ci0KIAkvKiBUaGUgc2hhcmVkIGZ1bmN0aW9uIGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCiAJbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwogCkBAIC0yMjc4LDggKzI0OTgsMTMgQEAKIAkJbWVtY3B5KG10YV9saXN0ICsgKGkqRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCW1jX3B0ciA9IG1jX3B0ci0+bmV4dDsKIAl9Ci0JaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoaHcsIG10YV9saXN0LCBpLCAxLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGksCisJICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDEsCisJICAgICAgICAgICAgICAgICAgICAgICAgbWFjLT5yYXJfZW50cnlfY291bnQpOworCisJaWdiX3NldF9tY19saXN0X3Bvb2xzKGFkYXB0ZXIsIGksIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOworCiAJa2ZyZWUobXRhX2xpc3QpOwogfQogCkBAIC0yMjkyLDYgKzI1MTcsNDYgQEAKIH0KIAogLyoqCisgKiBpZ2JfaGFzX2xpbmsgLSBjaGVjayBzaGFyZWQgY29kZSBmb3IgbGluayBhbmQgZGV0ZXJtaW5lIHVwL2Rvd24KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGRyaXZlciBwcml2YXRlIGluZm8KKyAqKi8KK3N0YXRpYyBib29sIGlnYl9oYXNfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlib29sIGxpbmtfYWN0aXZlID0gZmFsc2U7CisJczMyIHJldF92YWwgPSAwOworCisJLyogZ2V0X2xpbmtfc3RhdHVzIGlzIHNldCBvbiBMU0MgKGxpbmsgc3RhdHVzKSBpbnRlcnJ1cHQgb3IKKwkgKiByeCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQuICBnZXRfbGlua19zdGF0dXMgd2lsbCBzdGF5CisJICogZmFsc2UgdW50aWwgdGhlIGUxMDAwX2NoZWNrX2Zvcl9saW5rIGVzdGFibGlzaGVzIGxpbmsKKwkgKiBmb3IgY29wcGVyIGFkYXB0ZXJzIE9OTFkKKwkgKi8KKwlzd2l0Y2ggKGh3LT5waHkubWVkaWFfdHlwZSkgeworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI6CisJCWlmIChody0+bWFjLmdldF9saW5rX3N0YXR1cykgeworCQkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJCWxpbmtfYWN0aXZlID0gIWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzOworCQl9IGVsc2UgeworCQkJbGlua19hY3RpdmUgPSB0cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKKwkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJbGlua19hY3RpdmUgPSAhIShyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpOworCQlicmVhazsKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgorCQlyZXRfdmFsID0gaHctPm1hYy5vcHMuY2hlY2tfZm9yX2xpbmsoaHcpOworCQlsaW5rX2FjdGl2ZSA9IGh3LT5tYWMuc2VyZGVzX2hhc19saW5rOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV91bmtub3duOgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGlua19hY3RpdmU7Cit9CisKKy8qKgogICogaWdiX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCiAgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCiAgKiovCkBAIC0yMzA3LDM0ICsyNTcyLDE2IEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBpZ2JfYWRhcHRlciwgd2F0Y2hkb2dfdGFzayk7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CiAJdTMyIGxpbms7CiAJdTMyIGVpY3MgPSAwOwotCXMzMiByZXRfdmFsOwogCWludCBpOwogCi0JaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmCi0JICAgIChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKQorCWxpbmsgPSBpZ2JfaGFzX2xpbmsoYWRhcHRlcik7CisJaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmIGxpbmspCiAJCWdvdG8gbGlua191cDsKIAotCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluaygmYWRhcHRlci0+aHcpOwotCWlmICgocmV0X3ZhbCA9PSBFMTAwMF9FUlJfUEhZKSAmJgotCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykgJiYKLQkgICAgKHJkMzIoRTEwMDBfQ1RSTCkgJgotCSAgICAgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUpKQotCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJICJHaWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7Ci0KLQlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKLQkgICAgIShyZDMyKEUxMDAwX1RYQ1cpICYgRTEwMDBfVFhDV19BTkUpKQotCQlsaW5rID0gbWFjLT5zZXJkZXNfaGFzX2xpbms7Ci0JZWxzZQotCQlsaW5rID0gcmQzMihFMTAwMF9TVEFUVVMpICYKLQkJCQkgICAgICBFMTAwMF9TVEFUVVNfTFU7Ci0KIAlpZiAobGluaykgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJdTMyIGN0cmw7CkBAIC0yMzczLDYgKzI2MjAsOSBAQAogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7CiAKKwkJCWlnYl9waW5nX2FsbF92ZnMoYWRhcHRlcik7CisKKwkJCS8qIGxpbmsgc3RhdGUgaGFzIGNoYW5nZWQsIHNjaGVkdWxlIHBoeSBpbmZvIHVwZGF0ZSAqLwogCQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCiAJCQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CkBAIC0yMzg2LDYgKzI2MzYsMTAgQEAKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCisJCQlpZ2JfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCisJCQkvKiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkLCBzY2hlZHVsZSBwaHkgaW5mbyB1cGRhdGUgKi8KIAkJCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCQltb2RfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLAogCQkJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwpAQCAtMjM5NSw5ICsyNjQ5LDkgQEAKIGxpbmtfdXA6CiAJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAotCW1hYy0+dHhfcGFja2V0X2RlbHRhID0gYWRhcHRlci0+c3RhdHMudHB0IC0gYWRhcHRlci0+dHB0X29sZDsKKwlody0+bWFjLnR4X3BhY2tldF9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLnRwdCAtIGFkYXB0ZXItPnRwdF9vbGQ7CiAJYWRhcHRlci0+dHB0X29sZCA9IGFkYXB0ZXItPnN0YXRzLnRwdDsKLQltYWMtPmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKKwlody0+bWFjLmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKIAlhZGFwdGVyLT5jb2xjX29sZCA9IGFkYXB0ZXItPnN0YXRzLmNvbGM7CiAKIAlhZGFwdGVyLT5nb3JjID0gYWRhcHRlci0+c3RhdHMuZ29yYyAtIGFkYXB0ZXItPmdvcmNfb2xkOwpAQCAtMjQwOCw3ICsyNjYyLDcgQEAKIAlpZ2JfdXBkYXRlX2FkYXB0aXZlKCZhZGFwdGVyLT5odyk7CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpICsgMSA8IHR4X3JpbmctPmNvdW50KSB7CisJCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgKyAxIDwgdHhfcmluZy0+Y291bnQpIHsKIAkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAogCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKIAkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgpAQCAtMjU1NCw3ICsyODA4LDcgQEAKIAkJaWYgKGJ5dGVzID4gMjUwMDApIHsKIAkJCWlmIChwYWNrZXRzID4gMzUpCiAJCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7Ci0JCX0gZWxzZSBpZiAoYnl0ZXMgPCA2MDAwKSB7CisJCX0gZWxzZSBpZiAoYnl0ZXMgPCAxNTAwKSB7CiAJCQlyZXR2YWwgPSBsb3dfbGF0ZW5jeTsKIAkJfQogCQlicmVhazsKQEAgLTI1ODYsMTUgKzI4NDAsMTMgQEAKIAkJCQkJICAgIGFkYXB0ZXItPnR4X2l0ciwKIAkJCQkJICAgIGFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX3BhY2tldHMsCiAJCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyk7Ci0KIAkJY3VycmVudF9pdHIgPSBtYXgoYWRhcHRlci0+cnhfaXRyLCBhZGFwdGVyLT50eF9pdHIpOwogCX0gZWxzZSB7CiAJCWN1cnJlbnRfaXRyID0gYWRhcHRlci0+cnhfaXRyOwogCX0KIAogCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLwotCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmCi0JICAgIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQogCQljdXJyZW50X2l0ciA9IGxvd19sYXRlbmN5OwogCiAJc3dpdGNoIChjdXJyZW50X2l0cikgewpAQCAtMjY0Niw2ICsyODk4LDcgQEAKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1ZMQU4JCTB4MDAwMDAwMDIKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1RTTwkJMHgwMDAwMDAwNAogI2RlZmluZSBJR0JfVFhfRkxBR1NfSVBWNAkJMHgwMDAwMDAwOAorI2RlZmluZSBJR0JfVFhfRkxBR1NfVFNUQU1QICAgICAgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1ZMQU5fTUFTSwkweGZmZmYwMDAwCiAjZGVmaW5lIElHQl9UWF9GTEFHU19WTEFOX1NISUZUCTE2CiAKQEAgLTI3MTEsNyArMjk2NCw3IEBACiAJbXNzX2w0bGVuX2lkeCA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplIDw8IEUxMDAwX0FEVlRYRF9NU1NfU0hJRlQpOwogCW1zc19sNGxlbl9pZHggfD0gKGw0bGVuIDw8IEUxMDAwX0FEVlRYRF9MNExFTl9TSElGVCk7CiAKLQkvKiBDb250ZXh0IGluZGV4IG11c3QgYmUgdW5pcXVlIHBlciByaW5nLiAqLworCS8qIEZvciA4MjU3NSwgY29udGV4dCBpbmRleCBtdXN0IGJlIHVuaXF1ZSBwZXIgcmluZy4gKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19ORUVEX0NUWF9JRFgpCiAJCW1zc19sNGxlbl9pZHggfD0gdHhfcmluZy0+cXVldWVfaW5kZXggPDwgNDsKIApAQCAtMjc1NiwxMyArMzAwOSwyNCBAQAogCQl0dV9jbWQgfD0gKEUxMDAwX1RYRF9DTURfREVYVCB8IEUxMDAwX0FEVlRYRF9EVFlQX0NUWFQpOwogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQlfX2JlMTYgcHJvdG9jb2w7CisKKwkJCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgeworCQkJCWNvbnN0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmhkciA9CisJCQkJICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIqKXNrYi0+ZGF0YTsKKworCQkJCXByb3RvY29sID0gdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJCX0gZWxzZSB7CisJCQkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCQkJfQorCisJCQlzd2l0Y2ggKHByb3RvY29sKSB7CisJCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJCQl0dV9jbWQgfD0gRTEwMDBfQURWVFhEX1RVQ01EX0lQVjQ7CiAJCQkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KIAkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOwpAQCAtMjc4MSw2ICszMDQ1LDggQEAKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfTkVFRF9DVFhfSURYKQogCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0KIAkJCQljcHVfdG9fbGUzMih0eF9yaW5nLT5xdWV1ZV9pbmRleCA8PCA0KTsKKwkJZWxzZQorCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0gMDsKIAogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKQEAgLTI3OTMsOCArMzA1OSw2IEBACiAKIAkJcmV0dXJuIHRydWU7CiAJfQotCi0KIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI4MDksMjUgKzMwNzMsMzMgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCUJVR19PTihsZW4gPj0gSUdCX01BWF9EQVRBX1BFUl9UWEQpOwogCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBsZW47CiAJLyogc2V0IHRpbWVfc3RhbXAgKmJlZm9yZSogZG1hIHRvIGhlbHAgYXZvaWQgYSBwb3NzaWJsZSByYWNlICovCiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKLQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgc2tiLT5kYXRhLCBsZW4sCi0JCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CisJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtjb3VudF07CiAJY291bnQrKzsKLQlpKys7Ci0JaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCWkgPSAwOwogCiAJZm9yIChmID0gMDsgZiA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGYrKykgewogCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwogCisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7CiAKQEAgLTI4MzYsMTkgKzMxMDgsMTAgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGxlbjsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJCWZyYWctPnBhZ2UsCi0JCQkJCQlmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkJCWxlbiwKLQkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbY291bnRdOwogCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CiAJfQogCi0JaSA9ICgoaSA9PSAwKSA/IHR4X3JpbmctPmNvdW50IC0gMSA6IGkgLSAxKTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0yODcxLDYgKzMxMzQsOSBAQAogCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFHU19WTEFOKQogCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVkxFOwogCisJaWYgKHR4X2ZsYWdzICYgSUdCX1RYX0ZMQUdTX1RTVEFNUCkKKwkJY21kX3R5cGVfbGVuIHw9IEUxMDAwX0FEVlRYRF9NQUNfVFNUQU1QOworCiAJaWYgKHR4X2ZsYWdzICYgSUdCX1RYX0ZMQUdTX1RTTykgewogCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVFNFOwogCkBAIC0yOTMzLDcgKzMxOTksNyBAQAogCiAJLyogV2UgbmVlZCB0byBjaGVjayBhZ2FpbiBpbiBhIGNhc2UgYW5vdGhlciBDUFUgaGFzIGp1c3QKIAkgKiBtYWRlIHJvb20gYXZhaWxhYmxlLiAqLwotCWlmIChJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPCBzaXplKQorCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgPCBzaXplKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQSByZXByaWV2ZSEgKi8KQEAgLTI5NDUsMTMgKzMyMTEsMTEgQEAKIHN0YXRpYyBpbnQgaWdiX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKIHsKLQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IHNpemUpCisJaWYgKGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSA+PSBzaXplKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gX19pZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOwogfQogCi0jZGVmaW5lIFRYRF9VU0VfQ09VTlQoUykgKCgoUykgPj4gKElHQl9NQVhfVFhEX1BXUikpICsgMSkKLQogc3RhdGljIGludCBpZ2JfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQpAQCAtMjk1OSwxMSArMzIyMywxMCBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgaW50IGZpcnN0OwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7Ci0JdW5zaWduZWQgaW50IGxlbjsKIAl1OCBoZHJfbGVuID0gMDsKKwlpbnQgY291bnQgPSAwOwogCWludCB0c28gPSAwOwotCi0JbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwl1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4OwogCiAJaWYgKHRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTI5ODQsNyArMzI0NywyMSBAQAogCQkvKiB0aGlzIGlzIGEgaGFyZCBlcnJvciAqLwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCXNrYl9vcnBoYW4oc2tiKTsKKworCS8qCisJICogVE9ETzogY2hlY2sgdGhhdCB0aGVyZSBjdXJyZW50bHkgaXMgbm8gb3RoZXIgcGFja2V0IHdpdGgKKwkgKiB0aW1lIHN0YW1waW5nIGluIHRoZSBxdWV1ZQorCSAqCisJICogV2hlbiBkb2luZyB0aW1lIHN0YW1waW5nLCBrZWVwIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzb2NrZXQKKwkgKiBhIHdoaWxlIGxvbmdlcjogaXQgaXMgc3RpbGwgbmVlZGVkIGJ5IHNrYl9od3RzdGFtcF90eCgpLAorCSAqIGNhbGxlZCBlaXRoZXIgaW4gaWdiX3R4X2h3dHN0YW1wKCkgb3IgYnkgb3VyIGNhbGxlciB3aGVuCisJICogZG9pbmcgc29mdHdhcmUgdGltZSBzdGFtcGluZy4KKwkgKi8KKwlzaHR4ID0gc2tiX3R4KHNrYik7CisJaWYgKHVubGlrZWx5KHNodHgtPmhhcmR3YXJlKSkgeworCQlzaHR4LT5pbl9wcm9ncmVzcyA9IDE7CisJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19UU1RBTVA7CisJfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfVkxBTjsKQEAgLTI5OTUsNyArMzI3Miw2IEBACiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19JUFY0OwogCiAJZmlyc3QgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKLQogCXRzbyA9IHNrYl9pc19nc28oc2tiKSA/IGlnYl90c29fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsCiAJCQkJCSAgICAgICZoZHJfbGVuKSA6IDA7CiAKQEAgLTMwMDYsMTggKzMyODIsMjcgQEAKIAogCWlmICh0c28pCiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19UU087Ci0JZWxzZSBpZiAoaWdiX3R4X2NzdW1fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpKQotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCi0JCQkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX0NTVU07CisJZWxzZSBpZiAoaWdiX3R4X2NzdW1fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpICYmCisJICAgICAgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQorCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfQ1NVTTsKIAotCWlnYl90eF9xdWV1ZV9hZHYoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCi0JCQkgaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCksCi0JCQkgc2tiLT5sZW4sIGhkcl9sZW4pOworCS8qCisJICogY291bnQgcmVmbGVjdHMgZGVzY3JpcHRvcnMgbWFwcGVkLCBpZiAwIHRoZW4gbWFwcGluZyBlcnJvcgorCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqLworCWNvdW50ID0gaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQlpZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyA0KTsKKwlpZiAoY291bnQpIHsKKwkJaWdiX3R4X3F1ZXVlX2FkdihhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywgY291bnQsCisJCQkgICAgICAgICBza2ItPmxlbiwgaGRyX2xlbik7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWlnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDQpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKKwl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMzAyOCw3ICszMzEzLDcgQEAKIAlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3Jpbmc7CiAKIAlpbnQgcl9pZHggPSAwOwotCXJfaWR4ID0gc2tiLT5xdWV1ZV9tYXBwaW5nICYgKElHQl9NQVhfVFhfUVVFVUVTIC0gMSk7CisJcl9pZHggPSBza2ItPnF1ZXVlX21hcHBpbmcgJiAoSUdCX0FCU19NQVhfVFhfUVVFVUVTIC0gMSk7CiAJdHhfcmluZyA9IGFkYXB0ZXItPm11bHRpX3R4X3RhYmxlW3JfaWR4XTsKIAogCS8qIFRoaXMgZ29lcyBiYWNrIHRvIHRoZSBxdWVzdGlvbiBvZiBob3cgdG8gbG9naWNhbGx5IG1hcCBhIHR4IHF1ZXVlCkBAIC0zMDUwLDggKzMzMzUsOCBAQAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCiAJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwotCXdyMzIoRTEwMDBfRUlDUywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayAmCi0JCX4oRTEwMDBfRUlNU19UQ1BfVElNRVIgfCBFMTAwMF9FSU1TX09USEVSKSk7CisJd3IzMihFMTAwMF9FSUNTLAorCSAgICAgKGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgJiB+YWRhcHRlci0+ZWltc19vdGhlcikpOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0zMDY5LDggKzMzNTQsNyBAQAogICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgogICogVGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IHVwZGF0ZWQgZnJvbSB0aGUgdGltZXIgY2FsbGJhY2suCiAgKiovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotaWdiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZ2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMzA5Niw3ICszMzgwLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0jZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CiAJaWYgKG1heF9mcmFtZSA+IE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJNVFUgPiA5MjE2IG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTA0LDYgKzMzODcsNyBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CisKIAkvKiBpZ2JfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBtYXhfZnJhbWU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKQEAgLTMxMjksNiArMzQxMywxMiBAQAogI2Vsc2UKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IFBBR0VfU0laRSAvIDI7CiAjZW5kaWYKKworCS8qIGlmIHNyLWlvdiBpcyBlbmFibGVkIHdlIG5lZWQgdG8gZm9yY2UgYnVmZmVyIHNpemUgdG8gMUsgb3IgbGFyZ2VyICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgJiYKKwkgICAgKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPCBJR0JfUlhCVUZGRVJfMTAyNCkpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJR0JfUlhCVUZGRVJfMTAyNDsKKwogCS8qIGFkanVzdCBhbGxvY2F0aW9uIGlmIExQRSBwcm90ZWN0cyB1cywgYW5kIHdlIGFyZW4ndCB1c2luZyBTQlAgKi8KIAlpZiAoKG1heF9mcmFtZSA9PSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pIHx8CiAJICAgICAobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkKQEAgLTMyNzMsOCArMzU2Myw3IEBACiAJLyogUGh5IFN0YXRzICovCiAJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlpZiAoKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKLQkJICAgKCFpZ2JfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkgICAgICAmcGh5X3RtcCkpKSB7CisJCSAgICghaWdiX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV90bXApKSkgewogCQkJcGh5X3RtcCAmPSBQSFlfSURMRV9FUlJPUl9DT1VOVF9NQVNLOwogCQkJYWRhcHRlci0+cGh5X3N0YXRzLmlkbGVfZXJyb3JzICs9IHBoeV90bXA7CiAJCX0KQEAgLTMyODYsNyArMzU3NSw2IEBACiAJYWRhcHRlci0+c3RhdHMubWdwZGMgKz0gcmQzMihFMTAwMF9NR1RQREMpOwogfQogCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9vdGhlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwpAQCAtMzI5NSwxNSArMzU4MywyNCBAQAogCXUzMiBpY3IgPSByZDMyKEUxMDAwX0lDUik7CiAKIAkvKiByZWFkaW5nIElDUiBjYXVzZXMgYml0IDMxIG9mIEVJQ1IgdG8gYmUgY2xlYXJlZCAqLwotCWlmICghKGljciAmIEUxMDAwX0lDUl9MU0MpKQotCQlnb3RvIG5vX2xpbmtfaW50ZXJydXB0OwotCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKLQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KLQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKLQkKLW5vX2xpbmtfaW50ZXJydXB0OgotCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDKTsKKworCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CisKKwkvKiBDaGVjayBmb3IgYSBtYWlsYm94IGV2ZW50ICovCisJaWYgKGljciAmIEUxMDAwX0lDUl9WTU1CKQorCQlpZ2JfbXNnX3Rhc2soYWRhcHRlcik7CisKKwlpZiAoaWNyICYgRTEwMDBfSUNSX0xTQykgeworCQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7CisJCS8qIGd1YXJkIGFnYWluc3QgaW50ZXJydXB0IHdoZW4gd2UncmUgZ29pbmcgZG93biAqLworCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJfQorCisJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MgfCBFMTAwMF9JTVNfRE9VVFNZTkMgfCBFMTAwMF9JTVNfVk1NQik7CiAJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX290aGVyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTMzMTksNiArMzYxNiw3IEBACiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfdHhfZGNhKHR4X3JpbmcpOwogI2VuZGlmCisKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CiAJdHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiAKQEAgLTMzMzksMTMgKzM2MzcsMTEgQEAKIAlpZiAoKHJpbmctPmFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgJiYgcmluZy0+c2V0X2l0cikgewogCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCQljYXNlIGUxMDAwXzgyNTc2OgotCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsCi0JCQkgICAgIHJpbmctPml0cl92YWwgfAorCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsIHJpbmctPml0cl92YWwgfAogCQkJICAgICAweDgwMDAwMDAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsCi0JCQkgICAgIHJpbmctPml0cl92YWwgfAorCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsIHJpbmctPml0cl92YWwgfAogCQkJICAgICAocmluZy0+aXRyX3ZhbCA8PCAxNikpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTMzNjMsOCArMzY1OSw4IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKHJ4X3JpbmcpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnJ4X3JpbmctPm5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZyeF9yaW5nLT5uYXBpKSkKKwkJX19uYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKIAogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKHJ4X3JpbmctPmFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCkBAIC0zMzg2LDExICszNjgyLDExIEBACiAJCWRjYV9yeGN0cmwgPSByZDMyKEUxMDAwX0RDQV9SWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfcnhjdHJsICY9IH5FMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfcnhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV9yeGN0cmwgJj0gfkUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV9yeGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3J4Y3RybCB8PSBFMTAwMF9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCQlkY2FfcnhjdHJsIHw9IEUxMDAwX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CkBAIC0zNDEzLDExICszNzA5LDExIEBACiAJCWRjYV90eGN0cmwgPSByZDMyKEUxMDAwX0RDQV9UWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfdHhjdHJsICY9IH5FMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfdHhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV90eGN0cmwgJj0gfkUxMDAwX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV90eGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3R4Y3RybCB8PSBFMTAwMF9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwogCQl3cjMyKEUxMDAwX0RDQV9UWENUUkwocSksIGRjYV90eGN0cmwpOwpAQCAtMzQ1Nyw3ICszNzUzLDcgQEAKIAkJCWJyZWFrOwogCQkvKiBBbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZAogCQkgKiBpbiB0aGUgQ0IgZHJpdmVyLiAqLwotCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAyKTsKKwkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyKTsKIAkJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKGRldikgPT0gMCkgewogCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGVuYWJsZWRcbiIpOwpAQCAtMzQ3Miw3ICszNzY4LDcgQEAKIAkJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKGRldik7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKIAkJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKLQkJCXdyMzIoRTEwMDBfRENBX0NUUkwsIDEpOworCQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfRElTQUJMRSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMzQ5Miw2ICszNzg4LDMyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19JR0JfRENBICovCiAKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQlwaW5nID0gRTEwMDBfUEZfQ09OVFJPTF9NU0c7CisJCWlmIChhZGFwdGVyLT52Zl9kYXRhW2ldLmNsZWFyX3RvX3NlbmQpCisJCQlwaW5nIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmcGluZywgMSwgaSk7CisJfQorfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICB1MzIgKm1zZ2J1ZiwgdTMyIHZmKQoreworCWludCBuID0gKG1zZ2J1ZlswXSAmIEUxMDAwX1ZUX01TR0lORk9fTUFTSykgPj4gRTEwMDBfVlRfTVNHSU5GT19TSElGVDsKKwl1MTYgKmhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGEgPSAmYWRhcHRlci0+dmZfZGF0YVt2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHVwIHRvIDMwIGhhc2ggdmFsdWVzIHN1cHBvcnRlZCAqLworCWlmIChuID4gMzApCisJCW4gPSAzMDsKKworCS8qIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmX2RhdGEtPm51bV92Zl9tY19oYXNoZXMgPSBuOworCisJLyogVkZzIGFyZSBsaW1pdGVkIHRvIHVzaW5nIHRoZSBNVEEgaGFzaCB0YWJsZSBmb3IgdGhlaXIgbXVsdGljYXN0CisJICogYWRkcmVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2ldID0gaGFzaF9saXN0W2ldOzsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpZ2Jfc2V0X211bHRpKGFkYXB0ZXItPm5ldGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlICp2Zl9kYXRhOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQl2Zl9kYXRhID0gJmFkYXB0ZXItPnZmX2RhdGFbaV07CisJCWZvciAoaiA9IDA7IGogPCB2Zl9kYXRhLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspCisJCQlpZ2JfbXRhX3NldChodywgdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2pdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9jbGVhcl92Zl92ZnRhKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBvb2xfbWFzaywgcmVnLCB2aWQ7CisJaW50IGk7CisKKwlwb29sX21hc2sgPSAxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKyB2Zik7CisKKwkvKiBGaW5kIHRoZSB2bGFuIGZpbHRlciBmb3IgdGhpcyBpZCAqLworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9WTFZGX0FSUkFZX1NJWkU7IGkrKykgeworCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCisJCS8qIHJlbW92ZSB0aGUgdmYgZnJvbSB0aGUgcG9vbCAqLworCQlyZWcgJj0gfnBvb2xfbWFzazsKKworCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1BPT0xTRUxfTUFTSykgJiYKKwkJICAgIChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQlyZWcgPSAwOworCQkJdmlkID0gcmVnICYgRTEwMDBfVkxWRl9WTEFOSURfTUFTSzsKKwkJCWlnYl92ZnRhX3NldChodywgdmlkLCBmYWxzZSk7CisJCX0KKworCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CisJfQorfQorCitzdGF0aWMgczMyIGlnYl92bHZmX3NldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2aWQsIGJvb2wgYWRkLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnLCBpOworCisJLyogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gVkZzIGFyZSBub3QgZW5hYmxlZCAqLworCWlmICghYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJcmV0dXJuIC0xOworCisJLyogRmluZCB0aGUgdmxhbiBmaWx0ZXIgZm9yIHRoaXMgaWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJcmVnID0gcmQzMihFMTAwMF9WTFZGKGkpKTsKKwkJaWYgKChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpICYmCisJCSAgICB2aWQgPT0gKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX01BU0spKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFkZCkgeworCQlpZiAoaSA9PSBFMTAwMF9WTFZGX0FSUkFZX1NJWkUpIHsKKwkJCS8qIERpZCBub3QgZmluZCBhIG1hdGNoaW5nIFZMQU4gSUQgZW50cnkgdGhhdCB3YXMKKwkJCSAqIGVuYWJsZWQuICBTZWFyY2ggZm9yIGEgZnJlZSBmaWx0ZXIgZW50cnksIGkuZS4KKwkJCSAqIG9uZSB3aXRob3V0IHRoZSBlbmFibGUgYml0IHNldAorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCQkJCWlmICghKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFKSB7CisJCQkvKiBGb3VuZCBhbiBlbmFibGVkL2F2YWlsYWJsZSBlbnRyeSAqLworCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKTsKKworCQkJLyogaWYgIWVuYWJsZWQgd2UgbmVlZCB0byBzZXQgdGhpcyB1cCBpbiB2ZnRhICovCisJCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQkJLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUsIGlmIGJpdCBhbHJlYWR5IHNldAorCQkJCSAqIFBGIG11c3QgaGF2ZSBhZGRlZCBpdCBvdXRzaWRlIG9mIHRhYmxlICovCisJCQkJaWYgKGlnYl92ZnRhX3NldChodywgdmlkLCB0cnVlKSkKKwkJCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArCisJCQkJCQlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KTsKKwkJCQlyZWcgfD0gRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFOworCQkJfQorCQkJcmVnICY9IH5FMTAwMF9WTFZGX1ZMQU5JRF9NQVNLOworCQkJcmVnIHw9IHZpZDsKKworCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRSkgeworCQkJLyogcmVtb3ZlIHZmIGZyb20gdGhlIHBvb2wgKi8KKwkJCXJlZyAmPSB+KDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKSk7CisJCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQkJaWYgKCEocmVnICYgRTEwMDBfVkxWRl9QT09MU0VMX01BU0spKSB7CisJCQkJcmVnID0gMDsKKwkJCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOworCQkJfQorCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnYnVmLCB1MzIgdmYpCit7CisJaW50IGFkZCA9IChtc2didWZbMF0gJiBFMTAwMF9WVF9NU0dJTkZPX01BU0spID4+IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQ7CisJaW50IHZpZCA9IChtc2didWZbMV0gJiBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLKTsKKworCXJldHVybiBpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBhZGQsIHZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogZGlzYWJsZSBtYWlsYm94IGZ1bmN0aW9uYWxpdHkgZm9yIHZmICovCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCisJLyogcmVzZXQgb2ZmbG9hZHMgdG8gZGVmYXVsdHMgKi8KKwlpZ2Jfc2V0X3Ztb2xyKGh3LCB2Zik7CisKKwkvKiByZXNldCB2bGFucyBmb3IgZGV2aWNlICovCisJaWdiX2NsZWFyX3ZmX3ZmdGEoYWRhcHRlciwgdmYpOworCisJLyogcmVzZXQgbXVsdGljYXN0IHRhYmxlIGFycmF5IGZvciB2ZiAqLworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLm51bV92Zl9tY19oYXNoZXMgPSAwOworCisJLyogRmx1c2ggYW5kIHJlc2V0IHRoZSBtdGEgd2l0aCB0aGUgbmV3IHZhbHVlcyAqLworCWlnYl9zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9tc2coc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzOworCXUzMiByZWcsIG1zZ2J1ZlszXTsKKwl1OCAqYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKKworCS8qIHByb2Nlc3MgYWxsIHRoZSBzYW1lIGl0ZW1zIGNsZWFyZWQgaW4gYSBmdW5jdGlvbiBsZXZlbCByZXNldCAqLworCWlnYl92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7CisKKwkvKiBzZXQgdmYgbWFjIGFkZHJlc3MgKi8KKwlpZ2JfcmFyX3NldChodywgdmZfbWFjLCB2ZiArIDEpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCB2ZiArIDEpOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IHJkMzIoRTEwMDBfVkZURSk7CisJd3IzMihFMTAwMF9WRlRFLCByZWcgfCAoMSA8PCB2ZikpOworCXJlZyA9IHJkMzIoRTEwMDBfVkZSRSk7CisJd3IzMihFMTAwMF9WRlJFLCByZWcgfCAoMSA8PCB2ZikpOworCisJLyogZW5hYmxlIG1haWxib3ggZnVuY3Rpb25hbGl0eSBmb3IgdmYgKi8KKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCS8qIHJlcGx5IHRvIHJlc2V0IHdpdGggYWNrIGFuZCB2ZiBtYWMgYWRkcmVzcyAqLworCW1zZ2J1ZlswXSA9IEUxMDAwX1ZGX1JFU0VUIHwgRTEwMDBfVlRfTVNHVFlQRV9BQ0s7CisJbWVtY3B5KGFkZHIsIHZmX21hYywgNik7CisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAzLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWNfYWRkcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnLCBpbnQgdmYpCit7CisJCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAoY2hhciAqKSZtc2dbMV07CisJCWludCBlcnIgPSAtMTsKKworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJCWVyciA9IGlnYl9zZXRfdmZfbWFjKGFkYXB0ZXIsIHZmLCBhZGRyKTsKKworCQlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyB2b2lkIGlnYl9yY3ZfYWNrX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kKQorCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmbXNnLCAxLCB2Zik7Cit9CisKKworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2ZjsKKworCWZvciAodmYgPSAwOyB2ZiA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IHZmKyspIHsKKwkJLyogcHJvY2VzcyBhbnkgcmVzZXQgcmVxdWVzdHMgKi8KKwkJaWYgKCFpZ2JfY2hlY2tfZm9yX3JzdChodywgdmYpKSB7CisJCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CisJCQlpZ2JfdmZfcmVzZXRfZXZlbnQoYWRhcHRlciwgdmYpOworCQl9CisKKwkJLyogcHJvY2VzcyBhbnkgbWVzc2FnZXMgcGVuZGluZyAqLworCQlpZiAoIWlnYl9jaGVja19mb3JfbXNnKGh3LCB2ZikpCisJCQlpZ2JfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaWdiX2NoZWNrX2Zvcl9hY2soaHcsIHZmKSkKKwkJCWlnYl9yY3ZfYWNrX2Zyb21fdmYoYWRhcHRlciwgdmYpOworCisJfQorfQorCitzdGF0aWMgaW50IGlnYl9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gRTEwMDBfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCisJcmV0dmFsID0gaWdiX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSAgICAgICAgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKEUxMDAwX1ZUX01TR1RZUEVfQUNLIHwgRTEwMDBfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHJlc2V0IGl0IHNob3VsZCBub3QgYmUKKwkgKiBhbGxvd2VkIHRvIHN0YXJ0IGFueSBjb25maWd1cmF0aW9uLgorCSAqLworCisJaWYgKG1zZ2J1ZlswXSA9PSBFMTAwMF9WRl9SRVNFVCkgeworCQlpZ2JfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCkgeworCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDEsIHZmKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzd2l0Y2ggKChtc2didWZbMF0gJiAweEZGRkYpKSB7CisJY2FzZSBFMTAwMF9WRl9TRVRfTUFDX0FERFI6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfbWFjX2FkZHIoYWRhcHRlciwgbXNnYnVmLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX01VTFRJQ0FTVDoKKwkJcmV0dmFsID0gaWdiX3NldF92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQlicmVhazsKKwljYXNlIEUxMDAwX1ZGX1NFVF9MUEU6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfcmxwbWwoYWRhcHRlciwgbXNnYnVmWzFdLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX1ZMQU46CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfdmxhbihhZGFwdGVyLCBtc2didWYsIHZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5oYW5kbGVkIE1zZyAlMDh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSAtMTsKKwkJYnJlYWs7CisJfQorCisJLyogbm90aWZ5IHRoZSBWRiBvZiB0aGUgcmVzdWx0cyBvZiB3aGF0IGl0IHNlbnQgdXMgKi8KKwlpZiAocmV0dmFsKQorCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCWVsc2UKKwkJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQUNLOworCisJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKioKICAqIGlnYl9pbnRyX21zaSAtIEludGVycnVwdCBIYW5kbGVyCiAgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCkBAIC0zNTA3LDE5ICs0MTE5LDI0IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKGFkYXB0ZXItPnJ4X3JpbmcpOwogCisJaWYoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CisJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KKwkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOworCX0KKwogCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCi0gKiBpZ2JfaW50ciAtIEludGVycnVwdCBIYW5kbGVyCisgKiBpZ2JfaW50ciAtIExlZ2FjeSBJbnRlcnJ1cHQgSGFuZGxlcgogICogQGlycTogaW50ZXJydXB0IG51bWJlcgogICogQGRhdGE6IHBvaW50ZXIgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiovCkBAIC0zNTMxLDcgKzQxNDgsNiBAQAogCS8qIEludGVycnVwdCBBdXRvLU1hc2suLi51cG9uIHJlYWRpbmcgSUNSLCBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQuICBObwogCSAqIG5lZWQgZm9yIHRoZSBJTUMgd3JpdGUgKi8KIAl1MzIgaWNyID0gcmQzMihFMTAwMF9JQ1IpOwotCXUzMiBlaWNyID0gMDsKIAlpZiAoIWljcikKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIApAQCAtMzU0Miw3ICs0MTU4LDEwIEBACiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWVpY3IgPSByZDMyKEUxMDAwX0VJQ1IpOworCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CiAKIAlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKQEAgLTM1NTEsMTEgKzQxNzAsMzEgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5yeF9yaW5nWzBdLm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3J4X2lycV9lbmFibGUoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpIHsKKwkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPT0gMSkKKwkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOworCQllbHNlCisJCQlpZ2JfdXBkYXRlX3JpbmdfaXRyKHJ4X3JpbmcpOworCX0KKworCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQorCQkJd3IzMihFMTAwMF9FSU1TLCByeF9yaW5nLT5laW1zX3ZhbHVlKTsKKwkJZWxzZQorCQkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQorfQorCiAvKioKICAqIGlnYl9wb2xsIC0gTkFQSSBSeCBwb2xsaW5nIGNhbGxiYWNrCiAgKiBAbmFwaTogbmFwaSBwb2xsaW5nIHN0cnVjdHVyZQpAQCAtMzU2NCw3MCArNDIwMyw2NCBAQAogc3RhdGljIGludCBpZ2JfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpZ2JfcmluZywgbmFwaSk7Ci0Jc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCB0eF9jbGVhbl9jb21wbGV0ZSwgd29ya19kb25lID0gMDsKLQotCS8qIHRoaXMgcG9sbCByb3V0aW5lIG9ubHkgc3VwcG9ydHMgb25lIHR4IGFuZCBvbmUgcnggcXVldWUgKi8KLSNpZmRlZiBDT05GSUdfSUdCX0RDQQotCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQotCQlpZ2JfdXBkYXRlX3R4X2RjYSgmYWRhcHRlci0+dHhfcmluZ1swXSk7Ci0jZW5kaWYKLQl0eF9jbGVhbl9jb21wbGV0ZSA9IGlnYl9jbGVhbl90eF9pcnEoJmFkYXB0ZXItPnR4X3JpbmdbMF0pOwotCi0jaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKLQkJaWdiX3VwZGF0ZV9yeF9kY2EoJmFkYXB0ZXItPnJ4X3JpbmdbMF0pOwotI2VuZGlmCi0JaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbMF0sICZ3b3JrX2RvbmUsIGJ1ZGdldCk7Ci0KLQkvKiBJZiBubyBUeCBhbmQgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwotCWlmICgodHhfY2xlYW5fY29tcGxldGUgJiYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkpIHx8Ci0JICAgICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKLQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGlnYl9jbGVhbl9yeF9yaW5nX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQotewotCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaWdiX3JpbmcsIG5hcGkpOwotCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCWludCB3b3JrX2RvbmUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKKwlpZiAocnhfcmluZy0+YWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaWdiX3VwZGF0ZV9yeF9kY2EocnhfcmluZyk7CiAjZW5kaWYKIAlpZ2JfY2xlYW5fcnhfaXJxX2FkdihyeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCi0KLQkvKiBJZiBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCi0JaWYgKCh3b3JrX2RvbmUgPT0gMCkgfHwgIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSB7Ci0JCQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9PSAxKQotCQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwotCQkJZWxzZQotCQkJCWlnYl91cGRhdGVfcmluZ19pdHIocnhfcmluZyk7Ci0JCX0KLQotCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQl3cjMyKEUxMDAwX0VJTVMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOwotCi0JCXJldHVybiAwOworCWlmIChyeF9yaW5nLT5idWRkeSkgeworI2lmZGVmIENPTkZJR19JR0JfRENBCisJCWlmIChyeF9yaW5nLT5hZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQorCQkJaWdiX3VwZGF0ZV90eF9kY2EocnhfcmluZy0+YnVkZHkpOworI2VuZGlmCisJCWlmICghaWdiX2NsZWFuX3R4X2lycShyeF9yaW5nLT5idWRkeSkpCisJCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAJfQogCi0JcmV0dXJuIDE7CisJLyogSWYgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWdiX3J4X2lycV9lbmFibGUocnhfcmluZyk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworLyoqCisgKiBpZ2JfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc2tiOiBwYWNrZXQgdGhhdCB3YXMganVzdCBzZW50CisgKgorICogSWYgd2Ugd2VyZSBhc2tlZCB0byBkbyBoYXJkd2FyZSBzdGFtcGluZyBhbmQgc3VjaCBhIHRpbWUgc3RhbXAgaXMKKyAqIGF2YWlsYWJsZSwgdGhlbiBpdCBtdXN0IGhhdmUgYmVlbiBmb3IgdGhpcyBza2IgaGVyZSBiZWNhdXNlIHdlIG9ubHkKKyAqIGFsbG93IG9ubHkgb25lIHN1Y2ggcGFja2V0IGludG8gdGhlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBpZ2JfdHhfaHd0c3RhbXAoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHggPSBza2JfdHgoc2tiKTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKHVubGlrZWx5KHNodHgtPmhhcmR3YXJlKSkgeworCQl1MzIgdmFsaWQgPSByZDMyKEUxMDAwX1RTWU5DVFhDVEwpICYgRTEwMDBfVFNZTkNUWENUTF9WQUxJRDsKKwkJaWYgKHZhbGlkKSB7CisJCQl1NjQgcmVndmFsID0gcmQzMihFMTAwMF9UWFNUTVBMKTsKKwkJCXU2NCBuczsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wczsKKworCQkJbWVtc2V0KCZzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKHNoaHd0c3RhbXBzKSk7CisJCQlyZWd2YWwgfD0gKHU2NClyZDMyKEUxMDAwX1RYU1RNUEgpIDw8IDMyOworCQkJbnMgPSB0aW1lY291bnRlcl9jeWMydGltZSgmYWRhcHRlci0+Y2xvY2ssCisJCQkJCQkgIHJlZ3ZhbCk7CisJCQl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOworCQkJc2hod3RzdGFtcHMuc3lzdHN0YW1wID0KKwkJCQl0aW1lY29tcGFyZV90cmFuc2Zvcm0oJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCXNrYl90c3RhbXBfdHgoc2tiLCAmc2hod3RzdGFtcHMpOworCQl9CisJfQogfQogCiAvKioKQEAgLTM2NjgsNiArNDMwMSw4IEBACiAJCQkJCSAgICBza2ItPmxlbjsKIAkJCQl0b3RhbF9wYWNrZXRzICs9IHNlZ3M7CiAJCQkJdG90YWxfYnl0ZXMgKz0gYnl0ZWNvdW50OworCisJCQkJaWdiX3R4X2h3dHN0YW1wKGFkYXB0ZXIsIHNrYik7CiAJCQl9CiAKIAkJCWlnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLCBidWZmZXJfaW5mbyk7CkBAIC0zNjc3LDcgKzQzMTIsNiBAQAogCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCiAJCQkJaSA9IDA7CiAJCX0KLQogCQllb3AgPSB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOwogCQllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOwogCX0KQEAgLTM2ODYsNyArNDMyMCw3IEBACiAKIAlpZiAodW5saWtlbHkoY291bnQgJiYKIAkJICAgICBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKLQkJICAgICBJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPj0gSUdCX1RYX1FVRVVFX1dBS0UpKSB7CisJCSAgICAgaWdiX2Rlc2NfdW51c2VkKHR4X3JpbmcpID49IElHQl9UWF9RVUVVRV9XQUtFKSkgewogCQkvKiBNYWtlIHN1cmUgdGhhdCBhbnlib2R5IHN0b3BwaW5nIHRoZSBxdWV1ZSBhZnRlciB0aGlzCiAJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgogCQkgKi8KQEAgLTM3NDIsNDQgKzQzNzYsMTEgQEAKIAlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLSAvKioKLSAqIGlnYl9nZXRfc2tiX2hkciAtIGhlbHBlciBmdW5jdGlvbiBmb3IgTFJPIGhlYWRlciBwcm9jZXNzaW5nCi0gKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgYWRkZWQgdG8gTFJPIHBhY2tldAotICogQGlwaGRyOiBwb2ludGVyIHRvIGlwIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEB0Y3BoOiBwb2ludGVyIHRvIHRjcCBoZWFkZXIgc3RydWN0dXJlCi0gKiBAaGRyX2ZsYWdzOiBwb2ludGVyIHRvIGhlYWRlciBmbGFncwotICogQHByaXY6IHBvaW50ZXIgdG8gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBmb3IgdGhlIGN1cnJlbnQgc2tfYnVmZgotICoqLwotc3RhdGljIGludCBpZ2JfZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwaGRyLCB2b2lkICoqdGNwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKLQl1MTYgcGt0X3R5cGUgPSByeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5wa3RfaW5mbyAmCi0JICAgICAgICAgICAgICAgKEUxMDAwX1JYREFEVl9QS1RUWVBFX0lQVjQgfCBFMTAwMF9SWERBRFZfUEtUVFlQRV9UQ1ApOwotCi0JLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZhbGlkIElQdjQgVENQIHBhY2tldCAqLwotCWlmIChwa3RfdHlwZSAhPSAoRTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCB8Ci0JICAgICAgICAgICAgICAgICAgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogU2V0IG5ldHdvcmsgaGVhZGVycyAqLwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2hkcmxlbihza2IpKTsKLQkqaXBoZHIgPSBpcF9oZHIoc2tiKTsKLQkqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCi0JcmV0dXJuIDA7Ci0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSUdCX0xSTyAqLwotCiAvKioKICAqIGlnYl9yZWNlaXZlX3NrYiAtIGhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgcnggaW5kaWNhdGlvbnMKLSAqIEByaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyByZWNldmluZyB0aGlzIHBhY2tldCAKKyAqIEByaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyByZWNldmluZyB0aGlzIHBhY2tldAogICogQHN0YXR1czogZGVzY3JpcHRvciBzdGF0dXMgZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZQotICogQHZsYW46IGRlc2NyaXB0b3IgdmxhbiBmaWVsZCBhcyB3cml0dGVuIGJ5IGhhcmR3YXJlIChubyBsZS9iZSBjb252ZXJzaW9uKQorICogQHJ4X2Rlc2M6IHJlY2VpdmUgZGVzY3JpcHRvciBjb250YWluaW5nIHZsYW4gYW5kIHR5cGUgaW5mb3JtYXRpb24uCiAgKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgaW5kaWNhdGVkIHRvIHN0YWNrCiAgKiovCiBzdGF0aWMgdm9pZCBpZ2JfcmVjZWl2ZV9za2Ioc3RydWN0IGlnYl9yaW5nICpyaW5nLCB1OCBzdGF0dXMsCkBAIC0zNzg5LDMxICs0MzkwLDIzIEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICogYWRhcHRlciA9IHJpbmctPmFkYXB0ZXI7CiAJYm9vbCB2bGFuX2V4dHJhY3RlZCA9IChhZGFwdGVyLT52bGdycCAmJiAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKTsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyAmJgotCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByaW5nLT5xdWV1ZV9pbmRleCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CiAJCWlmICh2bGFuX2V4dHJhY3RlZCkKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKLQkJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52bGdycCwKLQkJCSAgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKLQkJCSAgICAgICAgICAgICAgICAgICByeF9kZXNjKTsKKwkJCXZsYW5fZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIGFkYXB0ZXItPnZsZ3JwLAorCQkJICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKKwkJCSAgICAgICAgICAgICAgICAgc2tiKTsKIAkJZWxzZQotCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLHNrYiwgcnhfZGVzYyk7Ci0JCXJpbmctPmxyb191c2VkID0gMTsKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIHNrYik7CiAJfSBlbHNlIHsKLSNlbmRpZgogCQlpZiAodmxhbl9leHRyYWN0ZWQpCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKIAkJCSAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnZsYW4pKTsKIAkJZWxzZQotCiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCiAJfQotI2VuZGlmCiB9CiAKLQogc3RhdGljIGlubGluZSB2b2lkIGlnYl9yeF9jaGVja3N1bV9hZHYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgICAgICB1MzIgc3RhdHVzX2Vyciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTM4NDEsMTcgKzQ0MzQsMTkgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvICwgKm5leHRfYnVmZmVyOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAlib29sIGNsZWFuZWQgPSBmYWxzZTsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAKQEAgLTM4NTksNyArNDQ1NCwzMCBAQAogCQlpZiAoKndvcmtfZG9uZSA+PSBidWRnZXQpCiAJCQlicmVhazsKIAkJKCp3b3JrX2RvbmUpKys7Ci0JCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJbmV4dF9yeGQgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CisJCXByZWZldGNoKG5leHRfcnhkKTsKKwkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisKKwkJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKKwkJY2xlYW5lZCA9IHRydWU7CisJCWNsZWFuZWRfY291bnQrKzsKKworCQlpZiAoIWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsKKwkJCQkJICAgTkVUX0lQX0FMSUdOLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCQkJZ290byBzZW5kX3VwOworCQl9CiAKIAkJLyogSFcgd2lsbCBub3QgRE1BIGluIGRhdGEgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIGJ1ZmZlciwgZXZlbgogCQkgKiBpZiBpdCBwYXJzZXMgdGhlIChORlMsIG9mIGNvdXJzZSkgaGVhZGVyIHRvIGJlIGxhcmdlci4gIEluCkBAIC0zODcxLDI2ICs0NDg5LDkgQEAKIAkJaWYgKGhsZW4gPiBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKIAkJCWhsZW4gPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKIAotCQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGgpOwotCQljbGVhbmVkID0gdHJ1ZTsKLQkJY2xlYW5lZF9jb3VudCsrOwotCi0JCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7Ci0JCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7Ci0JCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwotCQlpZiAoIWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsKLQkJCQkJICAgTkVUX0lQX0FMSUdOLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCQkJZ290byBzZW5kX3VwOwotCQl9Ci0KIAkJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSArCi0JCQkJCSAgIE5FVF9JUF9BTElHTiwKKwkJCQkJIGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplICsgTkVUX0lQX0FMSUdOLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBobGVuKTsKIAkJfQpAQCAtMzkxNiwxMyArNDUxNyw2IEBACiAKIAkJCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOwogCQl9Ci1zZW5kX3VwOgotCQlpKys7Ci0JCWlmIChpID09IHJ4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7Ci0JCW5leHRfcnhkID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwotCQlwcmVmZXRjaChuZXh0X3J4ZCk7Ci0JCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCiAJCWlmICghKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9FT1ApKSB7CiAJCQlidWZmZXJfaW5mby0+c2tiID0gbmV4dF9idWZmZXItPnNrYjsKQEAgLTM5MzEsNiArNDUyNSw0NyBAQAogCQkJbmV4dF9idWZmZXItPmRtYSA9IDA7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQorc2VuZF91cDoKKwkJLyoKKwkJICogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBSWCByZWdpc3RlcnMgY29udGFpbgorCQkgKiB0aGUgdGltZSBzdGFtcC4gTm8gb3RoZXIgcGFja2V0IHdpbGwgYmUgdGltZQorCQkgKiBzdGFtcGVkIHVudGlsIHdlIHJlYWQgdGhlc2UgcmVnaXN0ZXJzLCBzbyByZWFkIHRoZQorCQkgKiByZWdpc3RlcnMgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSBhZ2Fpbi4gQmVjYXVzZQorCQkgKiBvbmx5IG9uZSBwYWNrZXQgY2FuIGJlIHRpbWUgc3RhbXBlZCBhdCBhIHRpbWUsIHdlCisJCSAqIGtub3cgdGhhdCB0aGUgcmVnaXN0ZXIgdmFsdWVzIG11c3QgYmVsb25nIHRvIHRoaXMKKwkJICogb25lIGhlcmUgYW5kIHRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIHRvIGNvbXBhcmUKKwkJICogYW55IG9mIHRoZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgc3RvcmVkIGZvciBpdC4KKwkJICoKKwkJICogSWYgbm90aGluZyB3ZW50IHdyb25nLCB0aGVuIGl0IHNob3VsZCBoYXZlIGEKKwkJICogc2tiX3NoYXJlZF90eCB0aGF0IHdlIGNhbiB0dXJuIGludG8gYQorCQkgKiBza2Jfc2hhcmVkX2h3dHN0YW1wcy4KKwkJICoKKwkJICogVE9ETzogY2FuIHRpbWUgc3RhbXBpbmcgYmUgdHJpZ2dlcmVkICh0aHVzIGxvY2tpbmcKKwkJICogdGhlIHJlZ2lzdGVycykgd2l0aG91dCB0aGUgcGFja2V0IHJlYWNoaW5nIHRoaXMgcG9pbnQKKwkJICogaGVyZT8gSW4gdGhhdCBjYXNlIFJYIHRpbWUgc3RhbXBpbmcgd291bGQgZ2V0IHN0dWNrLgorCQkgKgorCQkgKiBUT0RPOiBpbiAidGltZSBzdGFtcCBhbGwgcGFja2V0cyIgbW9kZSB0aGlzIGJpdCBpcworCQkgKiBub3Qgc2V0LiBOZWVkIGEgZ2xvYmFsIGZsYWcgZm9yIHRoaXMgbW9kZSBhbmQgdGhlbgorCQkgKiBhbHdheXMgcmVhZCB0aGUgcmVnaXN0ZXJzLiBDYW5ub3QgYmUgZG9uZSB3aXRob3V0CisJCSAqIGEgcmFjZSBjb25kaXRpb24uCisJCSAqLworCQlpZiAodW5saWtlbHkoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX1RTKSkgeworCQkJdTY0IHJlZ3ZhbDsKKwkJCXU2NCBuczsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqc2hod3RzdGFtcHMgPQorCQkJCXNrYl9od3RzdGFtcHMoc2tiKTsKKworCQkJV0FSTighKHJkMzIoRTEwMDBfVFNZTkNSWENUTCkgJiBFMTAwMF9UU1lOQ1JYQ1RMX1ZBTElEKSwKKwkJCSAgICAgImlnYjogbm8gUlggdGltZSBzdGFtcCBhdmFpbGFibGUgZm9yIHRpbWUgc3RhbXBlZCBwYWNrZXQiKTsKKwkJCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfUlhTVE1QTCk7CisJCQlyZWd2YWwgfD0gKHU2NClyZDMyKEUxMDAwX1JYU1RNUEgpIDw8IDMyOworCQkJbnMgPSB0aW1lY291bnRlcl9jeWMydGltZSgmYWRhcHRlci0+Y2xvY2ssIHJlZ3ZhbCk7CisJCQl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCW1lbXNldChzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKCpzaGh3dHN0YW1wcykpOworCQkJc2hod3RzdGFtcHMtPmh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOworCQkJc2hod3RzdGFtcHMtPnN5c3RzdGFtcCA9CisJCQkJdGltZWNvbXBhcmVfdHJhbnNmb3JtKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CisJCX0KIAogCQlpZiAoc3RhdGVyciAmIEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0spIHsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CkBAIC0zOTU4LDE5ICs0NTkzLDExIEBACiAJCS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLwogCQlyeF9kZXNjID0gbmV4dF9yeGQ7CiAJCWJ1ZmZlcl9pbmZvID0gbmV4dF9idWZmZXI7Ci0KIAkJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAJfQogCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7Ci0JY2xlYW5lZF9jb3VudCA9IElHQl9ERVNDX1VOVVNFRChyeF9yaW5nKTsKLQotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7Ci0JCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOwotCQlyeF9yaW5nLT5scm9fdXNlZCA9IDA7Ci0JfQotI2VuZGlmCisJY2xlYW5lZF9jb3VudCA9IGlnYl9kZXNjX3VudXNlZChyeF9yaW5nKTsKIAogCWlmIChjbGVhbmVkX2NvdW50KQogCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocnhfcmluZywgY2xlYW5lZF9jb3VudCk7CkBAIC0zOTg0LDcgKzQ2MTEsNiBAQAogCXJldHVybiBjbGVhbmVkOwogfQogCi0KIC8qKgogICogaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2IC0gUmVwbGFjZSB1c2VkIHJlY2VpdmUgYnVmZmVyczsgcGFja2V0IHNwbGl0CiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtMzk5OSwxMCArNDYyNSwxNyBAQAogCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpOworCWludCBidWZzejsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKIAlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAorCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKKwkJYnVmc3ogPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKKwllbHNlCisJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKKwlidWZzeiArPSBORVRfSVBfQUxJR047CisKIAl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CiAJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAKQEAgLTQwMTgsMjMgKzQ2NTEsMTQgQEAKIAkJCQlidWZmZXJfaW5mby0+cGFnZV9vZmZzZXQgXj0gUEFHRV9TSVpFIC8gMjsKIAkJCX0KIAkJCWJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKHBkZXYsCi0JCQkJCSAgICAgYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJcGNpX21hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5wYWdlLAogCQkJCQkgICAgIGJ1ZmZlcl9pbmZvLT5wYWdlX29mZnNldCwKIAkJCQkJICAgICBQQUdFX1NJWkUgLyAyLAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAogCQlpZiAoIWJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWludCBidWZzejsKLQotCQkJaWYgKGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKQotCQkJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7Ci0JCQllbHNlCi0JCQkJYnVmc3ogPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwotCQkJYnVmc3ogKz0gTkVUX0lQX0FMSUdOOwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGJ1ZnN6KTsKLQogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJCWdvdG8gbm9fYnVmZmVyczsKQEAgLTQwNTAsNyArNDY3NCw2IEBACiAJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAogCQkJCQkJCSAgYnVmc3osCiAJCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKIAkJICogZWFjaCB3cml0ZS1iYWNrIGVyYXNlcyB0aGlzIGluZm8uICovCkBAIC00MTIwLDYgKzQ3NDMsMTYzIEBACiB9CiAKIC8qKgorICogaWdiX2h3dHN0YW1wX2lvY3RsIC0gY29udHJvbCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nCisgKiBAbmV0ZGV2OgorICogQGlmcmVxOgorICogQGNtZDoKKyAqCisgKiBPdXRnb2luZyB0aW1lIHN0YW1waW5nIGNhbiBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZC4gUGxheSBuaWNlIGFuZAorICogZGlzYWJsZSBpdCB3aGVuIHJlcXVlc3RlZCwgYWx0aG91Z2ggaXQgc2hvdWxkbid0IGNhc2UgYW55IG92ZXJoZWFkCisgKiB3aGVuIG5vIHBhY2tldCBuZWVkcyBpdC4gQXQgbW9zdCBvbmUgcGFja2V0IGluIHRoZSBxdWV1ZSBtYXkgYmUKKyAqIG1hcmtlZCBmb3IgdGltZSBzdGFtcGluZywgb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gdGVsbAorICogZm9yIHN1cmUgdG8gd2hpY2ggcGFja2V0IHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIGJlbG9uZ3MuCisgKgorICogSW5jb21pbmcgdGltZSBzdGFtcGluZyBoYXMgdG8gYmUgY29uZmlndXJlZCB2aWEgdGhlIGhhcmR3YXJlCisgKiBmaWx0ZXJzLiBOb3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkLCBpbiBwYXJ0aWN1bGFyIGV2ZW50CisgKiB0eXBlIGhhcyB0byBiZSBzcGVjaWZpZWQuIE1hdGNoaW5nIHRoZSBraW5kIG9mIGV2ZW50IHBhY2tldCBpcworICogbm90IHN1cHBvcnRlZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICJhbGwgVjIgZXZlbnRzIHJlZ2FyZGxlc3Mgb2YKKyAqIGxldmVsIDIgb3IgNCIuCisgKgorICoqLworc3RhdGljIGludCBpZ2JfaHd0c3RhbXBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNvbmZpZzsKKwl1MzIgdHN5bmNfdHhfY3RsX2JpdCA9IEUxMDAwX1RTWU5DVFhDVExfRU5BQkxFRDsKKwl1MzIgdHN5bmNfcnhfY3RsX2JpdCA9IEUxMDAwX1RTWU5DUlhDVExfRU5BQkxFRDsKKwl1MzIgdHN5bmNfcnhfY3RsX3R5cGUgPSAwOworCXUzMiB0c3luY19yeF9jZmcgPSAwOworCWludCBpc19sNCA9IDA7CisJaW50IGlzX2wyID0gMDsKKwlzaG9ydCBwb3J0ID0gMzE5OyAvKiBQVFAgKi8KKwl1MzIgcmVndmFsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjb25maWcsIGlmci0+aWZyX2RhdGEsIHNpemVvZihjb25maWcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8KKwlpZiAoY29uZmlnLmZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY29uZmlnLnR4X3R5cGUpIHsKKwljYXNlIEhXVFNUQU1QX1RYX09GRjoKKwkJdHN5bmNfdHhfY3RsX2JpdCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfVFhfT046CisJCXRzeW5jX3R4X2N0bF9iaXQgPSBFMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCXN3aXRjaCAoY29uZmlnLnJ4X2ZpbHRlcikgeworCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CisJCXRzeW5jX3J4X2N0bF9iaXQgPSAwOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6CisJCS8qCisJCSAqIHJlZ2lzdGVyIFRTWU5DUlhDRkcgbXVzdCBiZSBzZXQsIHRoZXJlZm9yZSBpdCBpcyBub3QKKwkJICogcG9zc2libGUgdG8gdGltZSBzdGFtcCBib3RoIFN5bmMgYW5kIERlbGF5X1JlcSBtZXNzYWdlcworCQkgKiA9PiBmYWxsIGJhY2sgdG8gdGltZSBzdGFtcGluZyBhbGwgcGFja2V0cworCQkgKi8KKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfQUxMOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0w0X1YxOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9TWU5DX01FU1NBR0U7CisJCWlzX2w0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUToKKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDRfVjE7CisJCXRzeW5jX3J4X2NmZyA9IEUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0RFTEFZX1JFUV9NRVNTQUdFOworCQlpc19sNCA9IDE7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOgorCQl0c3luY19yeF9jdGxfdHlwZSA9IEUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9MNF9WMjsKKwkJdHN5bmNfcnhfY2ZnID0gRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU1lOQ19NRVNTQUdFOworCQlpc19sMiA9IDE7CisJCWlzX2w0ID0gMTsKKwkJY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9TT01FOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVROgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0wyX0w0X1YyOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVFfTUVTU0FHRTsKKwkJaXNfbDIgPSAxOworCQlpc19sNCA9IDE7CisJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfU09NRTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0VWRU5UX1YyOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDsKKwkJaXNfbDIgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwkvKiBlbmFibGUvZGlzYWJsZSBUWCAqLworCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfVFNZTkNUWENUTCk7CisJcmVndmFsID0gKHJlZ3ZhbCAmIH5FMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQpIHwgdHN5bmNfdHhfY3RsX2JpdDsKKwl3cjMyKEUxMDAwX1RTWU5DVFhDVEwsIHJlZ3ZhbCk7CisKKwkvKiBlbmFibGUvZGlzYWJsZSBSWCwgZGVmaW5lIHdoaWNoIFBUUCBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RTWU5DUlhDVEwpOworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+RTEwMDBfVFNZTkNSWENUTF9FTkFCTEVEKSB8IHRzeW5jX3J4X2N0bF9iaXQ7CisJcmVndmFsID0gKHJlZ3ZhbCAmIH4weEUpIHwgdHN5bmNfcnhfY3RsX3R5cGU7CisJd3IzMihFMTAwMF9UU1lOQ1JYQ1RMLCByZWd2YWwpOworCXdyMzIoRTEwMDBfVFNZTkNSWENGRywgdHN5bmNfcnhfY2ZnKTsKKworCS8qCisJICogRXRoZXJ0eXBlIEZpbHRlciBRdWV1ZSBGaWx0ZXJbMF1bMTU6MF0gPSAweDg4RjcKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFdGhlcnR5cGUgdG8gZmlsdGVyIG9uKQorCSAqIEV0aGVydHlwZSBGaWx0ZXIgUXVldWUgRmlsdGVyWzBdWzI2XSA9IDB4MSAoRW5hYmxlIGZpbHRlcikKKwkgKiBFdGhlcnR5cGUgRmlsdGVyIFF1ZXVlIEZpbHRlclswXVszMF0gPSAweDEgKEVuYWJsZSBUaW1lc3RhbXBpbmcpCisJICovCisJd3IzMihFMTAwMF9FVFFGMCwgaXNfbDIgPyAweDQ0MDA4OGY3IDogMCk7CisKKwkvKiBMNCBRdWV1ZSBGaWx0ZXJbMF06IG9ubHkgZmlsdGVyIGJ5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCAqLworCXdyMzIoRTEwMDBfU1BRRjAsIGh0b25zKHBvcnQpKTsKKwl3cjMyKEUxMDAwX0lNSVJFWFQoMCksIGlzX2w0ID8KKwkgICAgICgoMTw8MTIpIHwgKDE8PDE5KSAvKiBieXBhc3Mgc2l6ZSBhbmQgY29udHJvbCBmbGFncyAqLykgOiAwKTsKKwl3cjMyKEUxMDAwX0lNSVIoMCksIGlzX2w0ID8KKwkgICAgIChodG9ucyhwb3J0KQorCSAgICAgIHwgKDA8PDE2KSAvKiBpbW1lZGlhdGUgaW50ZXJydXB0IGRpc2FibGVkICovCisJICAgICAgfCAwIC8qICgxPDwxNykgYml0IGNsZWFyZWQ6IGRvIG5vdCBieXBhc3MKKwkJICAgICBkZXN0aW5hdGlvbiBwb3J0IGNoZWNrICovKQorCQk6IDApOworCXdyMzIoRTEwMDBfRlRRRjAsIGlzX2w0ID8KKwkgICAgICgweDExIC8qIFVEUCAqLworCSAgICAgIHwgKDE8PDE1KSAvKiBWRiBub3QgY29tcGFyZWQgKi8KKwkgICAgICB8ICgxPDwyNykgLyogRW5hYmxlIFRpbWVzdGFtcGluZyAqLworCSAgICAgIHwgKDc8PDI4KSAvKiBvbmx5IHNvdXJjZSBwb3J0IGZpbHRlciBlbmFibGVkLAorCQkJICAgc291cmNlL3RhcmdldCBhZGRyZXNzIGFuZCBwcm90b2NvbAorCQkJICAgbWFza2VkICovKQorCSAgICAgOiAoKDE8PDE1KSB8ICgxNTw8MjgpIC8qIGFsbCBtYXNrIGJpdHMgc2V0ID0gZmlsdGVyIG5vdAorCQkJCSAgICAgIGVuYWJsZWQgKi8pKTsKKworCXdyZmwoKTsKKworCWFkYXB0ZXItPmh3dHN0YW1wX2NvbmZpZyA9IGNvbmZpZzsKKworCS8qIGNsZWFyIFRYL1JYIHRpbWUgc3RhbXAgcmVnaXN0ZXJzLCBqdXN0IHRvIGJlIHN1cmUgKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RYU1RNUEgpOworCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfUlhTVE1QSCk7CisKKwlyZXR1cm4gY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZjb25maWcsIHNpemVvZihjb25maWcpKSA/CisJCS1FRkFVTFQgOiAwOworfQorCisvKioKICAqIGlnYl9pb2N0bCAtCiAgKiBAbmV0ZGV2OgogICogQGlmcmVxOgpAQCAtNDEzMiw2ICs0OTEyLDggQEAKIAljYXNlIFNJT0NHTUlJUkVHOgogCWNhc2UgU0lPQ1NNSUlSRUc6CiAJCXJldHVybiBpZ2JfbWlpX2lvY3RsKG5ldGRldiwgaWZyLCBjbWQpOworCWNhc2UgU0lPQ1NIV1RTVEFNUDoKKwkJcmV0dXJuIGlnYl9od3RzdGFtcF9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtNDE1OCw4ICs0OTQwLDYgQEAKIAkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKIAkJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKIAkJaWdiX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOwogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOwpAQCAtNDE3MCwxMCArNDk1MCwxMCBAQAogCQkJaWdiX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBhZGFwdGVyLT5tbmdfdmxhbl9pZCk7CiAJCQlhZGFwdGVyLT5tbmdfdmxhbl9pZCA9IElHQl9NTkdfVkxBTl9OT05FOwogCQl9Ci0JCXdyMzIoRTEwMDBfUkxQTUwsCi0JCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOwogCX0KIAorCWlnYl9ybHBtbF9zZXQoYWRhcHRlcik7CisKIAlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogfQpAQCAtNDE4MiwyNCArNDk2MiwyNSBAQAogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgdmZ0YSwgaW5kZXg7CisJaW50IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAotCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgorCWlmICgoaHctPm1uZ19jb29raWUuc3RhdHVzICYKIAkgICAgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTikgJiYKIAkgICAgKHZpZCA9PSBhZGFwdGVyLT5tbmdfdmxhbl9pZCkpCiAJCXJldHVybjsKLQkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLwotCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7Ci0JdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOwotCXZmdGEgfD0gKDEgPDwgKHZpZCAmIDB4MUYpKTsKLQlpZ2Jfd3JpdGVfdmZ0YSgmYWRhcHRlci0+aHcsIGluZGV4LCB2ZnRhKTsKKworCS8qIGFkZCB2aWQgdG8gdmx2ZiBpZiBzci1pb3YgaXMgZW5hYmxlZCwKKwkgKiBpZiB0aGF0IGZhaWxzIGFkZCBkaXJlY3RseSB0byBmaWx0ZXIgdGFibGUgKi8KKwlpZiAoaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIHZpZCwgdHJ1ZSwgcGZfaWQpKQorCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgdHJ1ZSk7CisKIH0KIAogc3RhdGljIHZvaWQgaWdiX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIHZmdGEsIGluZGV4OworCWludCBwZl9pZCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAKIAlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOwpAQCAtNDIxNSwxMSArNDk5NiwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogcmVtb3ZlIFZJRCBmcm9tIGZpbHRlciB0YWJsZSAqLwotCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7Ci0JdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOwotCXZmdGEgJj0gfigxIDw8ICh2aWQgJiAweDFGKSk7Ci0JaWdiX3dyaXRlX3ZmdGEoJmFkYXB0ZXItPmh3LCBpbmRleCwgdmZ0YSk7CisJLyogcmVtb3ZlIHZpZCBmcm9tIHZsdmYgaWYgc3ItaW92IGlzIGVuYWJsZWQsCisJICogaWYgbm90IGluIHZsdmYgcmVtb3ZlIGZyb20gdmZ0YSAqLworCWlmIChpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBmYWxzZSwgcGZfaWQpKQorCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKQEAgLTQyNzYsNyArNTA1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC00MzY4LDEwICs1MTQ3LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCi0JCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWVsc2UKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJpZ2I6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwpAQCAtNDM5Miw2ICs1MTY4LDExIEBACiAJLyogZTEwMDBfcG93ZXJfdXBfcGh5KGFkYXB0ZXIpOyAqLwogCiAJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCisJLyogbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93IHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZQorCSAqIGRyaXZlci4gKi8KKwlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CisKIAl3cjMyKEUxMDAwX1dVUywgfjApOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtNDQwMiwxMCArNTE4Myw2IEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKLQkvKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCi0JICogZHJpdmVyLiAqLwotCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKLQogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00NDI0LDIyICs1MjAxLDI3IEBACiBzdGF0aWMgdm9pZCBpZ2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgaTsKLQlpbnQgd29ya19kb25lID0gMDsKIAotCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLQlhZGFwdGVyLT5mbGFncyB8PSBJR0JfRkxBR19JTl9ORVRQT0xMOworCWlmICghYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CisJCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwkJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKKwkJcmV0dXJuOworCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl90eF9pcnEoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CisJCXdyMzIoRTEwMDBfRUlNQywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisJCWlnYl9jbGVhbl90eF9pcnEodHhfcmluZyk7CisJCXdyMzIoRTEwMDBfRUlNUywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisJfQogCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbaV0sCi0JCQkJICAgICAmd29ya19kb25lLAotCQkJCSAgICAgYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpLndlaWdodCk7Ci0KLQlhZGFwdGVyLT5mbGFncyAmPSB+SUdCX0ZMQUdfSU5fTkVUUE9MTDsKLQlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOworCQl3cjMyKEUxMDAwX0VJTUMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOworCQluYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwl9CiB9CiAjZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIApAQCAtNDQ4MiwxMiArNTI2NCw3IEBACiAJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAJaW50IGVycjsKIAotCWlmIChhZGFwdGVyLT5uZWVkX2lvcG9ydCkKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JZWxzZQotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7Ci0KLQlpZiAoZXJyKSB7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CkBAIC00NTQwLDQgKzUzMTcsMTcyIEBACiAJaWdiX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3NldF92bW9scihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgdmZuKQoreworCXUzMiByZWdfZGF0YTsKKworCXJlZ19kYXRhID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKKwlyZWdfZGF0YSB8PSBFMTAwMF9WTU9MUl9CQU0gfAkgLyogQWNjZXB0IGJyb2FkY2FzdCAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1JPUEUgfCAgIC8qIEFjY2VwdCBwYWNrZXRzIG1hdGNoZWQgaW4gVVRBICovCisJICAgICAgICAgICAgRTEwMDBfVk1PTFJfUk9NUEUgfCAgLyogQWNjZXB0IHBhY2tldHMgbWF0Y2hlZCBpbiBNVEEgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9BVVBFIHwgICAvKiBBY2NlcHQgdW50YWdnZWQgcGFja2V0cyAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1NUUlZMQU47IC8qIFN0cmlwIHZsYW4gdGFncyAqLworCXdyMzIoRTEwMDBfVk1PTFIodmZuKSwgcmVnX2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZ2Jfc2V0X3ZmX3JscG1sKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmZuKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHZtb2xyOworCisJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKHZmbikpOworCXZtb2xyICY9IH5FMTAwMF9WTU9MUl9STFBNTF9NQVNLOworCXZtb2xyIHw9IHNpemUgfCBFMTAwMF9WTU9MUl9MUEU7CisJd3IzMihFMTAwMF9WTU9MUih2Zm4pLCB2bW9scik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfcmFoX3Bvb2woc3RydWN0IGUxMDAwX2h3ICpodywgaW50IHBvb2wsIGludCBlbnRyeSkKK3sKKwl1MzIgcmVnX2RhdGE7CisKKwlyZWdfZGF0YSA9IHJkMzIoRTEwMDBfUkFIKGVudHJ5KSk7CisJcmVnX2RhdGEgJj0gfkUxMDAwX1JBSF9QT09MX01BU0s7CisJcmVnX2RhdGEgfD0gRTEwMDBfUkFIX1BPT0xfMSA8PCBwb29sOzsKKwl3cjMyKEUxMDAwX1JBSChlbnRyeSksIHJlZ19kYXRhKTsKK30KKworc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIGludCBlbnRyeV9jb3VudCwgdTE2IHRvdGFsX3Jhcl9maWx0ZXJzKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGkgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ICsgMTsKKworCWlmICgoaSArIGVudHJ5X2NvdW50KSA8IHRvdGFsX3Jhcl9maWx0ZXJzKQorCQl0b3RhbF9yYXJfZmlsdGVycyA9IGkgKyBlbnRyeV9jb3VudDsKKworCWZvciAoOyBpIDwgdG90YWxfcmFyX2ZpbHRlcnM7IGkrKykKKwkJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgaSk7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHJhcl9lbnRyeSA9IHZmICsgMTsgLyogVkYgTUFDIGFkZHJlc3NlcyBzdGFydCBhdCBlbnRyeSAxICovCisKKwlpZ2JfcmFyX3NldChodywgbWFjX2FkZHIsIHJhcl9lbnRyeSk7CisKKwltZW1jcHkoYWRhcHRlci0+dmZfZGF0YVt2Zl0udmZfbWFjX2FkZHJlc3NlcywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCByYXJfZW50cnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl92bW1fY29udHJvbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnX2RhdGE7CisKKwlpZiAoIWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXJldHVybjsKKworCS8qIFZGJ3MgbmVlZCBQRiByZXNldCBpbmRpY2F0aW9uIGJlZm9yZSB0aGV5CisJICogY2FuIHNlbmQvcmVjZWl2ZSBtYWlsICovCisJcmVnX2RhdGEgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwlyZWdfZGF0YSB8PSBFMTAwMF9DVFJMX0VYVF9QRlJTVEQ7CisJd3IzMihFMTAwMF9DVFJMX0VYVCwgcmVnX2RhdGEpOworCisJaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKGh3LCB0cnVlKTsKKwlpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoaHcsIHRydWUpOworfQorCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKK3N0YXRpYyBzc2l6ZV90IGlnYl9zaG93X251bV92ZnMoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlnYl9zZXRfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXVuc2lnbmVkIGludCBudW1fdmZzLCBpOworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOworCWludCBlcnI7CisKKwlzc2NhbmYoYnVmLCAiJXUiLCAmbnVtX3Zmcyk7CisKKwlpZiAobnVtX3ZmcyA+IDcpCisJCW51bV92ZnMgPSA3OworCisJLyogdmFsdWUgdW5jaGFuZ2VkIGRvIG5vdGhpbmcgKi8KKwlpZiAobnVtX3ZmcyA9PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQlyZXR1cm4gY291bnQ7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaWdiX2Nsb3NlKG5ldGRldik7CisKKwlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOworCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOworCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOworCWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPSAwOworCisJLyogcmVjbGFpbSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIFZGcyBzaW5jZSB3ZSBhcmUgY2hhbmdpbmcgY291bnQgKi8KKwlpZiAoYWRhcHRlci0+dmZfZGF0YSkgeworCQkvKiBkaXNhYmxlIGlvdiBhbmQgYWxsb3cgdGltZSBmb3IgdHJhbnNhY3Rpb25zIHRvIGNsZWFyICovCisJCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOworCQltc2xlZXAoNTAwKTsKKworCQlrZnJlZShhZGFwdGVyLT52Zl9kYXRhKTsKKwkJYWRhcHRlci0+dmZfZGF0YSA9IE5VTEw7CisJCXdyMzIoRTEwMDBfSU9WQ1RMLCBFMTAwMF9JT1ZDVExfUkVVU0VfVkZRKTsKKwkJbXNsZWVwKDEwMCk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJT1YgRGlzYWJsZWRcbiIpOworCX0KKworCWlmIChudW1fdmZzKSB7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBrY2FsbG9jKG51bV92ZnMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghYWRhcHRlci0+dmZfZGF0YSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIFZGIHByaXZhdGUgIgorCQkJCSJkYXRhIC0gSU9WIGVuYWJsZSBmYWlsZWRcbiIpOworCQl9IGVsc2UgeworCQkJZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTsKKwkJCWlmICghZXJyKSB7CisJCQkJYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCA9IG51bV92ZnM7CisJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkIHZmcyBhbGxvY2F0ZWRcbiIsIG51bV92ZnMpOworCQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyBpKyspIHsKKwkJCQkJcmFuZG9tX2V0aGVyX2FkZHIobWFjX2FkZHIpOworCQkJCQlpZ2Jfc2V0X3ZmX21hYyhhZGFwdGVyLCBpLCBtYWNfYWRkcik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlrZnJlZShhZGFwdGVyLT52Zl9kYXRhKTsKKwkJCQlhZGFwdGVyLT52Zl9kYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCWlnYl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWdiX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKTsKKwlpZ2JfcmVzZXQoYWRhcHRlcik7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaWdiX29wZW4obmV0ZGV2KTsKKworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLwogLyogaWdiX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCmluZGV4IDE3Nzc5ZjkuLmFkMTc5NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKQEAgLTI1OSw2ICsyNTksMjAgQEAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fZnVuY19fKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhbGlfaXJjY19zaXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGFsaV9pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGFsaV9pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19zaXJfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGFsaV9pcmNjX25ldF9pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWxpX2lyY2NfZmlyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBhbGlfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYWxpX2lyY2NfZmlyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBhbGlfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gYWxpX2lyY2Nfb3BlbiAoaW50IGksIGNoaXBpb190ICppbmYpCiAgKgpAQCAtMzYxLDEwICszNzUsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IGFsaV9pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gYWxpX2lyY2NfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gYWxpX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpAQCAtOTc0LDcgKzk4NSw3IEBACiAJCWFsaV9pcmNjX2Zpcl9jaGFuZ2Vfc3BlZWQoc2VsZiwgYmF1ZCk7CQkJCiAJCQogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQ7CQkKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmFsaV9pcmNjX2Zpcl9vcHM7CiAJCQkJCiAJCS8qIEVuYWJsZSBJbnRlcnV1cHQgKi8KIAkJc2VsZi0+aWVyID0gSUVSX0VPTTsgLy8gYmVuamFtaW4gMjAwMC8xMS8yMCAwNzoyNFBNCQkJCQkKQEAgLTk4OCw3ICs5OTksNyBAQAogCQlhbGlfaXJjY19zaXJfY2hhbmdlX3NwZWVkKHNlbGYsIGJhdWQpOwogCQkJCQogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCX0KIAkKIAkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggNmYzZTdmNy4uNmI2NTQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtMTUyNCw2ICsxNTI0LDEzIEBACiAgIGZyZWVfbmV0ZGV2KHNlbGYtPm5ldGRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdG9zaG9ib2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSB0b3Nob2JvZV9uZXRfb3BlbiwKKwkubmRvX3N0b3AJPSB0b3Nob2JvZV9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CT0gdG9zaG9ib2VfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwJPSB0b3Nob2JvZV9uZXRfaW9jdGwsCit9OworCiBzdGF0aWMgaW50CiB0b3Nob2JvZV9vcGVuIChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkaWQpCiB7CkBAIC0xNjU3LDEwICsxNjY0LDcgQEAKICNlbmRpZgogCiAgIFNFVF9ORVRERVZfREVWKGRldiwgJnBjaV9kZXYtPmRldik7Ci0gIGRldi0+aGFyZF9zdGFydF94bWl0ID0gdG9zaG9ib2VfaGFyZF94bWl0OwotICBkZXYtPm9wZW4gPSB0b3Nob2JvZV9uZXRfb3BlbjsKLSAgZGV2LT5zdG9wID0gdG9zaG9ib2VfbmV0X2Nsb3NlOwotICBkZXYtPmRvX2lvY3RsID0gdG9zaG9ib2VfbmV0X2lvY3RsOworICBkZXYtPm5ldGRldl9vcHMgPSAmdG9zaG9ib2VfbmV0ZGV2X29wczsKIAogICBlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCAzYTIyZGM0Li4wMDZiYTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC0xNDAxLDYgKzE0MDEsMTQgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmRhX3VzYl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGlyZGFfdXNiX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGlyZGFfdXNiX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsICAgPSBpcmRhX3VzYl9uZXRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0ID0gaXJkYV91c2JfaGFyZF94bWl0LAorCS5uZG9fdHhfdGltZW91dAk9IGlyZGFfdXNiX25ldF90aW1lb3V0LAorfTsKKwogLyoKICAqIEluaXRpYWxpc2UgdGhlIG5ldHdvcmsgc2lkZSBvZiB0aGUgaXJkYS11c2IgaW5zdGFuY2UKICAqIENhbGxlZCB3aGVuIGEgbmV3IFVTQiBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIGluIGlyZGFfdXNiX3Byb2JlKCkKQEAgLTE0MTEsMTUgKzE0MTksOSBAQAogCiAJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaXJkYV91c2JfaW5pdF9xb3Moc2VsZik7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmlyZGFfdXNiX25ldGRldl9vcHM7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlyZGFfdXNiX2hhcmRfeG1pdDsKLQluZXRkZXYtPnR4X3RpbWVvdXQJPSBpcmRhX3VzYl9uZXRfdGltZW91dDsKLQluZXRkZXYtPndhdGNoZG9nX3RpbWVvICA9IDI1MCpIWi8xMDAwOwkvKiAyNTAgbXMgPiBVU0IgdGltZW91dCAqLwotCW5ldGRldi0+b3BlbiAgICAgICAgICAgID0gaXJkYV91c2JfbmV0X29wZW47Ci0JbmV0ZGV2LT5zdG9wICAgICAgICAgICAgPSBpcmRhX3VzYl9uZXRfY2xvc2U7Ci0JbmV0ZGV2LT5kb19pb2N0bCAgICAgICAgPSBpcmRhX3VzYl9uZXRfaW9jdGw7CisJaXJkYV91c2JfaW5pdF9xb3Moc2VsZik7CiAKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggYjRhNjE3MS4uOWQ4MTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtNDE4LDYgKzQxOCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMga2luZ3N1bl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQsCisJLm5kb19vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgICAgICAgPSBraW5nc3VuX25ldF9pb2N0bCwKK307CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKQEAgLTUyMCwxMCArNTI2LDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZraW5nc3VuLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBraW5nc3VuX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gICAgICAgICAgICA9IGtpbmdzdW5fbmV0X29wZW47Ci0JbmV0LT5zdG9wICAgICAgICAgICAgPSBraW5nc3VuX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsICAgICAgICA9IGtpbmdzdW5fbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZraW5nc3VuX29wczsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IDU1MzIyZmIuLmI2ZmZlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtNjY4LDYgKzY2OCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMga3M5NTlfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdAk9IGtzOTU5X2hhcmRfeG1pdCwKKwkubmRvX29wZW4JPSBrczk1OV9uZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBrczk1OV9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGtzOTU5X25ldF9pb2N0bCwKK307CiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC03ODAsMTAgKzc4Niw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga3M5NTlfaGFyZF94bWl0OwotCW5ldC0+b3BlbiA9IGtzOTU5X25ldF9vcGVuOwotCW5ldC0+c3RvcCA9IGtzOTU5X25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsID0ga3M5NTlfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZrczk1OV9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCA1YjMyN2IwLi42NGRmMjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTU2Miw2ICs1NjIsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtzZGF6emxlX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBrc2RhenpsZV9oYXJkX3htaXQsCisJLm5kb19vcGVuCT0ga3NkYXp6bGVfbmV0X29wZW4sCisJLm5kb19zdG9wCT0ga3NkYXp6bGVfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBrc2RhenpsZV9uZXRfaW9jdGwsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC02ODQsMTAgKzY5MSw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga3NkYXp6bGVfaGFyZF94bWl0OwotCW5ldC0+b3BlbiA9IGtzZGF6emxlX25ldF9vcGVuOwotCW5ldC0+c3RvcCA9IGtzZGF6emxlX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsID0ga3NkYXp6bGVfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZrc2RhenpsZV9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IDg1ZTg4ZGEuLmZhYzUwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC04NzMsNiArODczLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBtY3NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gbWNzX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBtY3NfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgPSBtY3NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UgaW4gdGhlCiAgKiBzeXN0ZW0uICBOZWVkIHRvIHZlcmlmeSB0aGUgZGV2aWNlIGFuZCBpZiBpdCBpcywgdGhlbiBzdGFydCBoYW5kbGluZyBpdC4KQEAgLTkxOSwxMSArOTI2LDcgQEAKIAkvKiBTcGVlZCBjaGFuZ2Ugd29yayBpbml0aWFsaXNhdGlvbiovCiAJSU5JVF9XT1JLKCZtY3MtPndvcmssIG1jc19zcGVlZF93b3JrKTsKIAotCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1jc19oYXJkX3htaXQ7Ci0JbmRldi0+b3BlbiA9IG1jc19uZXRfb3BlbjsKLQluZGV2LT5zdG9wID0gbWNzX25ldF9jbG9zZTsKLQluZGV2LT5kb19pb2N0bCA9IG1jc19uZXRfaW9jdGw7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZtY3NfbmV0ZGV2X29wczsKIAogCWlmICghaW50Zi0+Y3VyX2FsdHNldHRpbmcpCiAJCWdvdG8gZXJyb3IyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCmluZGV4IDYxZTUwOWMuLjQ1ZmQ5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKQEAgLTMzMSw2ICszMzEsMjAgQEAKIAlwbnBfcmVnaXN0ZXJlZCA9IDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNjX2lyY2Nfc2lyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuc2NfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBuc2NfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X3NpciwKKwkubmRvX2RvX2lvY3RsICAgPSBuc2NfaXJjY19uZXRfaW9jdGwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zY19pcmNjX2Zpcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gbnNjX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9maXIsCisJLm5kb19kb19pb2N0bCAgID0gbnNjX2lyY2NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIG5zY19pcmNjX29wZW4gKGlvYmFzZSwgaXJxKQogICoKQEAgLTQ0MSwxMCArNDU1LDcgQEAKIAlzZWxmLT50eF9maWZvLnRhaWwgPSBzZWxmLT50eF9idWZmLmhlYWQ7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXI7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgPSBuc2NfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IG5zY19pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IG5zY19pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbnNjX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKQEAgLTEzMjAsMTIgKzEzMzEsMTIgQEAKIAlzd2l0Y2hfYmFuayhpb2Jhc2UsIEJBTkswKTsgCiAJaWYgKHNwZWVkID4gMTE1MjAwKSB7CiAJCS8qIEluc3RhbGwgRklSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9maXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZuc2NfaXJjY19maXJfb3BzOwogCQlpZXIgPSBJRVJfU0ZJRl9JRTsKIAkJbnNjX2lyY2NfZG1hX3JlY2VpdmUoc2VsZik7CiAJfSBlbHNlIHsKIAkJLyogSW5zdGFsbCBTSVIgeG1pdCBoYW5kbGVyICovCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X3NpcjsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm5zY19pcmNjX3Npcl9vcHM7CiAJCWllciA9IElFUl9SWEhETF9JRTsKIAl9CiAJLyogU2V0IG91ciBjdXJyZW50IGludGVycnVwdCBtYXNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCmluZGV4IDMxNzk0YzIuLmU3NzUzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCkBAIC0yNCw5ICsyNCw4IEBACiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtb3N0Lmg+CiAKICNkZWZpbmUgRklDUAkJX19SRUcoMHg0MDgwMDAwMCkgIC8qIFN0YXJ0IG9mIEZJQ1AgYXJlYSAqLwogI2RlZmluZSBJQ0NSMAkJX19SRUcoMHg0MDgwMDAwMCkgIC8qIElDUCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMKaW5kZXggNWI1ODYyNC4uZDk0MDgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMKQEAgLTc1Myw3ICs3NTMsOCBAQAogCWRldi0+cnhfYnVmZi50cnVlc2l6ZSA9IElSREFfU0tCX01BWF9NVFU7IAogCiAJLyogQm9vdHN0cmFwIFplcm9Db3B5IFJ4ICovCi0JZGV2LT5yeF9idWZmLnNrYiA9IF9fZGV2X2FsbG9jX3NrYihkZXYtPnJ4X2J1ZmYudHJ1ZXNpemUsIEdGUF9LRVJORUwpOworCWRldi0+cnhfYnVmZi5za2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LT5uZXRkZXYsIGRldi0+cnhfYnVmZi50cnVlc2l6ZSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldi0+cnhfYnVmZi5za2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2tiX3Jlc2VydmUoZGV2LT5yeF9idWZmLnNrYiwgMSk7CkBAIC03NzksOCArNzgwLDcgQEAKIAogc3RhdGljIHZvaWQgc2lyZGV2X2ZyZWVfYnVmZmVycyhzdHJ1Y3Qgc2lyX2RldiAqZGV2KQogewotCWlmIChkZXYtPnJ4X2J1ZmYuc2tiKQotCQlrZnJlZV9za2IoZGV2LT5yeF9idWZmLnNrYik7CisJa2ZyZWVfc2tiKGRldi0+cnhfYnVmZi5za2IpOwogCWtmcmVlKGRldi0+dHhfYnVmZi5oZWFkKTsKIAlkZXYtPnJ4X2J1ZmYuaGVhZCA9IGRldi0+dHhfYnVmZi5oZWFkID0gTlVMTDsKIAlkZXYtPnJ4X2J1ZmYuc2tiID0gTlVMTDsKQEAgLTg2NSw2ICs4NjUsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzaXJkZXZfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdAk9IHNpcmRldl9oYXJkX3htaXQsCisJLm5kb19vcGVuCT0gc2lyZGV2X29wZW4sCisJLm5kb19zdG9wCT0gc2lyZGV2X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBzaXJkZXZfaW9jdGwsCit9OwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNpcl9kZXYgKiBzaXJkZXZfZ2V0X2luc3RhbmNlKGNvbnN0IHN0cnVjdCBzaXJfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC05MDgsMTAgKzkxNCw3IEBACiAJZGV2LT5uZXRkZXYgPSBuZGV2OwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gc2lyZGV2X2hhcmRfeG1pdDsKLQluZGV2LT5vcGVuID0gc2lyZGV2X29wZW47Ci0JbmRldi0+c3RvcCA9IHNpcmRldl9jbG9zZTsKLQluZGV2LT5kb19pb2N0bCA9IHNpcmRldl9pb2N0bDsKKwluZGV2LT5uZXRkZXZfb3BzID0gJnNpcmRldl9vcHM7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5kZXYpKSB7CiAJCUlSREFfRVJST1IoIiVzKCksIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggZGQ3M2NjZS4uNTlkNzk4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTQ4Niw2ICs0ODYsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNtc2NfaXJjY19uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHNlbGYtPmlvLnNwZWVkID4gMTE1MjAwKQorCQlyZXR1cm4gCXNtc2NfaXJjY19oYXJkX3htaXRfZmlyKHNrYiwgZGV2KTsKKwllbHNlCisJCXJldHVybiAJc21zY19pcmNjX2hhcmRfeG1pdF9zaXIoc2tiLCBkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtc2NfaXJjY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHNtc2NfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBzbXNjX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgICA9IHNtc2NfaXJjY19uZXRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0ID0gc21zY19pcmNjX25ldF94bWl0LAorI2lmIFNNU0NfSVJDQzJfQ19ORVRfVElNRU9VVAorCS5uZG9fdHhfdGltZW91dAk9IHNtc2NfaXJjY190aW1lb3V0LAorI2VuZGlmCit9OworCiAvKgogICogRnVuY3Rpb24gc21zY19pcmNjX29wZW4gKGZpcmJhc2UsIHNpcmJhc2UsIGRtYSwgaXJxKQogICoKQEAgLTUxOSwxNCArNTM5LDEwIEBACiAJCWdvdG8gZXJyX291dDE7CiAJfQogCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbXNjX2lyY2NfaGFyZF94bWl0X3NpcjsKICNpZiBTTVNDX0lSQ0MyX0NfTkVUX1RJTUVPVVQKLQlkZXYtPnR4X3RpbWVvdXQJICAgICA9IHNtc2NfaXJjY190aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gID0gSFogKiAyOyAgLyogQWxsb3cgZW5vdWdoIHRpbWUgZm9yIHNwZWVkIGNoYW5nZSAqLwogI2VuZGlmCi0JZGV2LT5vcGVuICAgICAgICAgICAgPSBzbXNjX2lyY2NfbmV0X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBzbXNjX2lyY2NfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gc21zY19pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc21zY19pcmNjX25ldGRldl9vcHM7CiAKIAlzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzZWxmLT5uZXRkZXYgPSBkZXY7CkBAIC05OTUsOSArMTAxMSw2IEBACiAKIAkvKiBSZXNldCBldmVyeXRoaW5nICovCiAKLQkvKiBJbnN0YWxsIEZJUiB0cmFuc21pdCBoYW5kbGVyICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbXNjX2lyY2NfaGFyZF94bWl0X2ZpcjsKLQogCS8qIENsZWFyIEZJRk8gKi8KIAlvdXRiKGluYihmaXJfYmFzZSArIElSQ0NfTENSX0EpIHwgSVJDQ19MQ1JfQV9GSUZPX1JFU0VULCBmaXJfYmFzZSArIElSQ0NfTENSX0EpOwogCkBAIC0xODk0LDcgKzE5MDcsNiBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJZGV2ID0gc2VsZi0+bmV0ZGV2OwogCUlSREFfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm47KTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzbXNjX2lyY2NfaGFyZF94bWl0X3NpcjsKIAogCWZpcl9iYXNlID0gc2VsZi0+aW8uZmlyX2Jhc2U7CiAJc2lyX2Jhc2UgPSBzZWxmLT5pby5zaXJfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwppbmRleCA4YjE2NThjLi44ZTVlNDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCkBAIC0xMDA3LDYgKzEwMDcsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0aXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBzdGlyX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHN0aXJfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHN0aXJfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHN0aXJfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtMTA1NCwxMCArMTA2MSw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgmc3Rpci0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gc3Rpcl9oYXJkX3htaXQ7Ci0JbmV0LT5vcGVuICAgICAgICAgICAgPSBzdGlyX25ldF9vcGVuOwotCW5ldC0+c3RvcCAgICAgICAgICAgID0gc3Rpcl9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCAgICAgICAgPSBzdGlyX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAmc3Rpcl9uZXRkZXZfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCmluZGV4IDhiM2U1NDUuLjg2NDc5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKQEAgLTMxMCw2ICszMTAsMTkgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZ2aWFfZHJpdmVyKTsgCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmlhX2lyY2Nfc2lyX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfc2lyLAorCS5uZG9fb3BlbiA9IHZpYV9pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IHZpYV9pcmNjX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsID0gdmlhX2lyY2NfbmV0X2lvY3RsLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmlhX2lyY2NfZmlyX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfZmlyLAorCS5uZG9fb3BlbiA9IHZpYV9pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IHZpYV9pcmNjX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsID0gdmlhX2lyY2NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIHZpYV9pcmNjX29wZW4gKGlvYmFzZSwgaXJxKQogICoKQEAgLTQyOCwxMCArNDQxLDcgQEAKIAlzZWxmLT50eF9maWZvLnRhaWwgPSBzZWxmLT50eF9idWZmLmhlYWQ7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXI7Ci0JZGV2LT5vcGVuID0gdmlhX2lyY2NfbmV0X29wZW47Ci0JZGV2LT5zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnZpYV9pcmNjX3Npcl9vcHM7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQpAQCAtNzk4LDExICs4MDgsMTEgQEAKIAogCWlmIChzcGVlZCA+IDExNTIwMCkgewogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfZmlyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2NfZmlyX29wczsKIAkJdmlhX2lyY2NfZG1hX3JlY2VpdmUoc2VsZik7CiAJfSBlbHNlIHsKIAkJLyogSW5zdGFsbCBTSVIgeG1pdCBoYW5kbGVyICovCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X3NpcjsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnZpYV9pcmNjX3Npcl9vcHM7CiAJfQogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKaW5kZXggNzIzYzQ1OC4uMTI0M2JjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKQEAgLTE1NzMsNiArMTU3MywxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsc2lfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB2bHNpX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gdmxzaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSB2bHNpX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSB2bHNpX2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IHZsc2lfdHhfdGltZW91dCwKK307CisKIHN0YXRpYyBpbnQgdmxzaV9pcmRhX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJdmxzaV9pcmRhX2Rldl90ICppZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC0xNjA4LDExICsxNjE2LDcgQEAKIAluZGV2LT5mbGFncyB8PSBJRkZfUE9SVFNFTCB8IElGRl9BVVRPTUVESUE7CiAJbmRldi0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsKICAKLQluZGV2LT5vcGVuCSAgICAgID0gdmxzaV9vcGVuOwotCW5kZXYtPnN0b3AJICAgICAgPSB2bHNpX2Nsb3NlOwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZsc2lfaGFyZF9zdGFydF94bWl0OwotCW5kZXYtPmRvX2lvY3RsCSAgICAgID0gdmxzaV9pb2N0bDsKLQluZGV2LT50eF90aW1lb3V0ICAgICAgPSB2bHNpX3R4X3RpbWVvdXQ7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZ2bHNpX25ldGRldl9vcHM7CiAJbmRldi0+d2F0Y2hkb2dfdGltZW8gID0gNTAwKkhaLzEwMDA7CS8qIG1heC4gYWxsb3dlZCB0dXJuIHRpbWUgZm9yIElyTEFQICovCiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYwppbmRleCBkYzBhMmU0Li5kMDg4MzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCkBAIC0xNDAsNiArMTQwLDEzIEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHc4Mzk3N19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHc4Mzk3N2FmX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHc4Mzk3N2FmX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSB3ODM5NzdhZl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gdzgzOTc3YWZfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIHc4Mzk3N2FmX29wZW4gKGlvYmFzZSwgaXJxKQogICoKQEAgLTIzMSwxMSArMjM4LDcgQEAKIAlzZWxmLT5yeF9idWZmLmRhdGEgPSBzZWxmLT5yeF9idWZmLmhlYWQ7CiAJc2VsZi0+bmV0ZGV2ID0gZGV2OwogCi0JLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB3ODM5NzdhZl9oYXJkX3htaXQ7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgPSB3ODM5NzdhZl9uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IHc4Mzk3N2FmX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IHc4Mzk3N2FmX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMJPSAmdzgzOTc3X25ldGRldl9vcHM7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBlZWUyOGQzLi40YjBlYTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTg4NywxOSArODg3LDEzIEBACiBpeGdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCi0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpCi0JCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCi0JCSAgICAgICAgICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JLyogb2theSB0byBjYWxsIGtmcmVlX3NrYiBoZXJlIGluc3RlYWQgb2Yga2ZyZWVfc2tiX2FueSBiZWNhdXNlCi0JICogdGhpcyBpcyBuZXZlciBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlpZiAoYnVmZmVyX2luZm8tPnNrYikKLQkJZGV2X2tmcmVlX3NrYihidWZmZXJfaW5mby0+c2tiKTsKLQotCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCX0KIAlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogdGhlc2UgZmllbGRzIG11c3QgYWx3YXlzIGJlIGluaXRpYWxpemVkIGluIHR4CiAJICogYnVmZmVyX2luZm8tPmxlbmd0aCA9IDA7CkBAIC0xMjc1LDE3ICsxMjY5LDIzIEBACiB7CiAJc3RydWN0IGl4Z2JfZGVzY19yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmc7CiAJc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbzsKLQlpbnQgbGVuID0gc2tiLT5sZW47CisJaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKIAogCXVuc2lnbmVkIGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IGY7Ci0KLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgSVhHQl9NQVhfREFUQV9QRVJfVFhEKTsKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQlXQVJOX09OKGJ1ZmZlcl9pbmZvLT5kbWEgIT0gMCk7CiAJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKLQkJYnVmZmVyX2luZm8tPmRtYSA9CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CiAJCQlwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAogCQkJCXNrYi0+ZGF0YSArIG9mZnNldCwKIAkJCQlzaXplLApAQCAtMTMwNyw3ICsxMzA3LDExIEBACiAJCWxlbiAtPSBzaXplOwogCQlvZmZzZXQgKz0gc2l6ZTsKIAkJY291bnQrKzsKLQkJaWYgKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCQl9CiAJfQogCiAJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKQEAgLTEzMTgsNiArMTMyMiwxMCBAQAogCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCiAJCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJCXNpemUgPSBtaW4obGVuLCBJWEdCX01BWF9EQVRBX1BFUl9UWEQpOwogCkBAIC0xMzI5LDIxICsxMzM3LDE0IEBACiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0ICsgb2Zmc2V0LAotCQkJCQlzaXplLAotCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbZiArIDFdICsgb2Zmc2V0OwogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOwogCiAJCQlsZW4gLT0gc2l6ZTsKIAkJCW9mZnNldCArPSBzaXplOwogCQkJY291bnQrKzsKLQkJCWlmICgrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOwogCQl9CiAJfQotCWkgPSAoaSA9PSAwKSA/IHR4X3JpbmctPmNvdW50IC0gMSA6IGkgLSAxOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0ubmV4dF90b193YXRjaCA9IGk7CiAKQEAgLTE0NDUsNiArMTQ0Niw3IEBACiAJdW5zaWduZWQgaW50IGZpcnN0OwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJaW50IHZsYW5faWQgPSAwOworCWludCBjb3VudCA9IDA7CiAJaW50IHRzbzsKIAogCWlmICh0ZXN0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkgewpAQCAtMTQ3OSwxMyArMTQ4MSwxOSBAQAogCWVsc2UgaWYgKGl4Z2JfdHhfY3N1bShhZGFwdGVyLCBza2IpKQogCQl0eF9mbGFncyB8PSBJWEdCX1RYX0ZMQUdTX0NTVU07CiAKLQlpeGdiX3R4X3F1ZXVlKGFkYXB0ZXIsIGl4Z2JfdHhfbWFwKGFkYXB0ZXIsIHNrYiwgZmlyc3QpLCB2bGFuX2lkLAotCQkJdHhfZmxhZ3MpOworCWNvdW50ID0gaXhnYl90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoY291bnQpIHsKKwkJaXhnYl90eF9xdWV1ZShhZGFwdGVyLCBjb3VudCwgdmxhbl9pZCwgdHhfZmxhZ3MpOworCQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLworCQlpeGdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCAmYWRhcHRlci0+dHhfcmluZywgREVTQ19ORUVERUQpOwogCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwotCWl4Z2JfbWF5YmVfc3RvcF90eChuZXRkZXYsICZhZGFwdGVyLT50eF9yaW5nLCBERVNDX05FRURFRCk7CisJfSBlbHNlIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYWRhcHRlci0+dHhfcmluZy5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCWFkYXB0ZXItPnR4X3JpbmcubmV4dF90b191c2UgPSBmaXJzdDsKKwl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTcyMSwxNCArMTcyOSwxNCBAQAogCQlpZiAoIXRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgcmVnaXN0ZXIgZm9yIHBvbGwuIFRoZSBmbHVzaAogCQkgIG9mIHRoZSBwb3N0ZWQgd3JpdGUgaXMgaW50ZW50aW9uYWxseSBsZWZ0IG91dC4KIAkJKi8KIAogCQlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgfjApOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTc0OSw3ICsxNzU3LDcgQEAKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncykpCiAJCQlpeGdiX2lycV9lbmFibGUoYWRhcHRlcik7CiAJfQpAQCAtMTgxOCw3ICsxODI2LDcgQEAKIAkJLyogZGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQogCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCiAJCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gZmFsc2U7Ci0JCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLmRtYSAmJgorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCiAJCSAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopCiAJCSAgICYmICEoSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJgogCQkgICAgICAgIElYR0JfU1RBVFVTX1RYT0ZGKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZQppbmRleCA2ZTdlZjc2Li5iM2Y4MjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCiAjIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0jIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzMsNiArMzMsNyBAQAogb2JqLSQoQ09ORklHX0lYR0JFKSArPSBpeGdiZS5vCiAKIGl4Z2JlLW9ianMgOj0gaXhnYmVfbWFpbi5vIGl4Z2JlX2NvbW1vbi5vIGl4Z2JlX2V0aHRvb2wubyBcCi0gICAgICAgICAgICAgIGl4Z2JlXzgyNTk4Lm8gaXhnYmVfcGh5Lm8KKyAgICAgICAgICAgICAgaXhnYmVfODI1OTkubyBpeGdiZV84MjU5OC5vIGl4Z2JlX3BoeS5vCiAKLWl4Z2JlLSQoQ09ORklHX0lYR0JFX0RDQikgKz0gIGl4Z2JlX2RjYi5vIGl4Z2JlX2RjYl84MjU5OC5vIGl4Z2JlX2RjYl9ubC5vCitpeGdiZS0kKENPTkZJR19JWEdCRV9EQ0IpICs9ICBpeGdiZV9kY2IubyBpeGdiZV9kY2JfODI1OTgubyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9kY2JfODI1OTkubyBpeGdiZV9kY2JfbmwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggZTExMjAwOC4uYzI2NDMzZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgpAQCAtNzIsNiArNzEsNyBAQAogI2RlZmluZSBJWEdCRV9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIElYR0JFX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KICNkZWZpbmUgSVhHQkVfUlhCVUZGRVJfMjA0OCAgMjA0OAorI2RlZmluZSBJWEdCRV9NQVhfUlhCVUZGRVIgICAxNjM4NCAgLyogbGFyZ2VzdCBzaXplIGZvciBhIHNpbmdsZSBkZXNjcmlwdG9yICovCiAKICNkZWZpbmUgSVhHQkVfUlhfSERSX1NJWkUgSVhHQkVfUlhCVUZGRVJfMjU2CiAKQEAgLTg4LDkgKzg4LDYgQEAKICNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9QUklPX01BU0sgICAweDAwMDBlMDAwCiAjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKIAotI2RlZmluZSBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTICAgICAgIDgKLSNkZWZpbmUgSVhHQkVfTUFYX0xST19BR0dSRUdBVEUgICAgICAgICAzMgotCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTE0MiwyMSArMTM5LDI1IEBACiAJLyogY3B1IGZvciB0eCBxdWV1ZSAqLwogCWludCBjcHU7CiAjZW5kaWYKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlib29sIGxyb191c2VkOwogCXN0cnVjdCBpeGdiZV9xdWV1ZV9zdGF0cyBzdGF0czsKLQl1MTYgdl9pZHg7IC8qIG1hcHMgZGlyZWN0bHkgdG8gdGhlIGluZGV4IGZvciB0aGlzIHJpbmcgaW4gdGhlIGhhcmR3YXJlCi0JICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKLQkgICAgICAgICAgICogYW5kIGZyaWVuZHMgdGhhdCByZXByZXNlbnRzIHRoZSB2ZWN0b3IgZm9yIHRoaXMgcmluZyAqLworCXU2NCB2X2lkeDsgLyogbWFwcyBkaXJlY3RseSB0byB0aGUgaW5kZXggZm9yIHRoaXMgcmluZyBpbiB0aGUgaGFyZHdhcmUKKwkgICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKKwkgICAgICAgICAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KIAogCiAJdTE2IHdvcmtfbGltaXQ7ICAgICAgICAgICAgICAgIC8qIG1heCB3b3JrIHBlciBpbnRlcnJ1cHQgKi8KIAl1MTYgcnhfYnVmX2xlbjsKIH07CiAKLSNkZWZpbmUgUklOR19GX0RDQiAgMAotI2RlZmluZSBSSU5HX0ZfVk1EUSAxCi0jZGVmaW5lIFJJTkdfRl9SU1MgIDIKK2VudW0gaXhnYmVfcmluZ19mX2VudW0geworCVJJTkdfRl9OT05FID0gMCwKKwlSSU5HX0ZfRENCLAorCVJJTkdfRl9WTURRLAorCVJJTkdfRl9SU1MsCisKKwlSSU5HX0ZfQVJSQVlfU0laRSAgICAgIC8qIG11c3QgYmUgbGFzdCBpbiBlbnVtIHNldCAqLworfTsKKwogI2RlZmluZSBJWEdCRV9NQVhfRENCX0lORElDRVMgICA4CiAjZGVmaW5lIElYR0JFX01BWF9SU1NfSU5ESUNFUyAgMTYKICNkZWZpbmUgSVhHQkVfTUFYX1ZNRFFfSU5ESUNFUyAxNgpAQCAtMTY1LDggKzE2Niw4IEBACiAJaW50IG1hc2s7CiB9OwogCi0jZGVmaW5lIE1BWF9SWF9RVUVVRVMgNjQKLSNkZWZpbmUgTUFYX1RYX1FVRVVFUyAzMgorI2RlZmluZSBNQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDEyOAogCiAjZGVmaW5lIE1BWF9SWF9QQUNLRVRfQlVGRkVSUyAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4IDogMSkKQEAgLTE4OCwxMCArMTg5LDExIEBACiB9OwogCiAvKiBIZWxwZXIgbWFjcm9zIHRvIHN3aXRjaCBiZXR3ZWVuIGludHMvc2VjIGFuZCB3aGF0IHRoZSByZWdpc3RlciB1c2VzLgotICogQW5kIHllcywgaXQncyB0aGUgc2FtZSBtYXRoIGdvaW5nIGJvdGggd2F5cy4KKyAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuICBUaGUgbG93ZXN0IHZhbHVlCisgKiBzdXBwb3J0ZWQgYnkgYWxsIG9mIHRoZSBpeGdiZSBoYXJkd2FyZSBpcyA4LgogICovCiAjZGVmaW5lIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhfZWl0cikgXAotCSgoX2VpdHIpID8gKDEwMDAwMDAwMDAgLyAoKF9laXRyKSAqIDI1NikpIDogMCkKKwkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDgpCiAjZGVmaW5lIEVJVFJfUkVHX1RPX0lOVFNfUEVSX1NFQyBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcKIAogI2RlZmluZSBJWEdCRV9ERVNDX1VOVVNFRChSKSBcCkBAIC0yMTAsOSArMjEyLDE1IEBACiAjZGVmaW5lIE9USEVSX1ZFQ1RPUiAxCiAjZGVmaW5lIE5PTl9RX1ZFQ1RPUlMgKE9USEVSX1ZFQ1RPUikKIAotI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgMTYKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OSA2NAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTkgNjQKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OCAxOAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTggMTYKKworI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk5CisjZGVmaW5lIE1BWF9NU0lYX0NPVU5UIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTkKKwogI2RlZmluZSBNSU5fTVNJWF9RX1ZFQ1RPUlMgMgotI2RlZmluZSBNQVhfTVNJWF9DT1VOVCAoTUFYX01TSVhfUV9WRUNUT1JTICsgTk9OX1FfVkVDVE9SUykKICNkZWZpbmUgTUlOX01TSVhfQ09VTlQgKE1JTl9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KQEAgLTIyMiw3ICsyMzAsNyBAQAogCXUxNiBiZF9udW1iZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yIHFfdmVjdG9yW01BWF9NU0lYX1FfVkVDVE9SU107Ci0JY2hhciBuYW1lW01BWF9NU0lYX0NPVU5UXVtJRk5BTVNJWiArIDVdOworCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA5XTsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyBkY2JfY2ZnOwogCXN0cnVjdCBpeGdiZV9kY2JfY29uZmlnIHRlbXBfZGNiX2NmZzsKIAl1OCBkY2Jfc2V0X2JpdG1hcDsKQEAgLTI0NywxMCArMjU1LDEyIEBACiAJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3Jpbmc7CS8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCiAJaW50IG51bV9yeF9xdWV1ZXM7CiAJdTY0IGh3X2NzdW1fcnhfZXJyb3I7CisJdTY0IGh3X3J4X25vX2RtYV9yZXNvdXJjZXM7CiAJdTY0IGh3X2NzdW1fcnhfZ29vZDsKIAl1NjQgbm9uX2VvcF9kZXNjczsKIAlpbnQgbnVtX21zaXhfdmVjdG9yczsKLQlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVszXTsKKwlpbnQgbWF4X21zaXhfcV92ZWN0b3JzOyAgICAgICAgIC8qIHRydWUgY291bnQgb2YgcV92ZWN0b3JzIGZvciBkZXZpY2UgKi8KKwlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVtSSU5HX0ZfQVJSQVlfU0laRV07CiAJc3RydWN0IG1zaXhfZW50cnkgKm1zaXhfZW50cmllczsKIAogCXU2NCByeF9oZHJfc3BsaXQ7CkBAIC0yNzQsNiArMjg0LDcgQEAKICNkZWZpbmUgSVhHQkVfRkxBR19EQ0FfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTEpCiAjZGVmaW5lIElYR0JFX0ZMQUdfSU1JUl9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEyKQogI2RlZmluZSBJWEdCRV9GTEFHX01RX0NBUEFCTEUgICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMykKKyNkZWZpbmUgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTQpCiAjZGVmaW5lIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE2KQogI2RlZmluZSBJWEdCRV9GTEFHX1JTU19DQVBBQkxFICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNykKICNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTgpCkBAIC0yODEsNyArMjkyLDggQEAKICNkZWZpbmUgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFICAgICAgICAgICAgICh1MzIpKDEgPDwgMjApCiAjZGVmaW5lIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSAgICAgICAgICAgICAodTMyKSgxIDw8IDIyKQogI2RlZmluZSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyMykKLSNkZWZpbmUgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjQpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNSkKIAogLyogZGVmYXVsdCB0byB0cnlpbmcgZm9yIGZvdXIgc2Vjb25kcyAqLwogI2RlZmluZSBJWEdCRV9UUllfTElOS19USU1FT1VUICg0ICogSFopCkBAIC0zMDEsOSArMzEzLDYgQEAKIAogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTY0IHR4X2J1c3k7Ci0JdTY0IGxyb19hZ2dyZWdhdGVkOwotCXU2NCBscm9fZmx1c2hlZDsKLQl1NjQgbHJvX25vX2Rlc2M7CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CiAKQEAgLTMxNCw2ICszMjMsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2ZwX3Rhc2s7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc2ZwX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHNmcF9jb25maWdfbW9kdWxlX3Rhc2s7CisJdTMyIHdvbDsKKwl1MTYgZWVwcm9tX3ZlcnNpb247CiB9OwogCiBlbnVtIGl4YmdlX3N0YXRlX3QgewpAQCAtMzI1LDkgKzMzOCwxMSBAQAogCiBlbnVtIGl4Z2JlX2JvYXJkcyB7CiAJYm9hcmRfODI1OTgsCisJYm9hcmRfODI1OTksCiB9OwogCiBleHRlcm4gc3RydWN0IGl4Z2JlX2luZm8gaXhnYmVfODI1OThfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OV9pbmZvOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIGV4dGVybiBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgZGNibmxfb3BzOwogZXh0ZXJuIGludCBpeGdiZV9jb3B5X2RjYl9jZmcoc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKnNyY19kY2JfY2ZnLApAQCAtMzUyLDUgKzM2Nyw2IEBACiBleHRlcm4gaW50IGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGl4Z2JlX25hcGlfZGVsX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZV93cml0ZV9laXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICosIGludCwgdTMyKTsKIAogI2VuZGlmIC8qIF9JWEdCRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKaW5kZXggYWQ1Njk5ZC4uZWQyNjVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTAsNiArNTAsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSk7CiAKIC8qKgorICogIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTggLSBHZXRzIE1TSS1YIHZlY3RvciBjb3VudAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCisgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KKyAqKi8KK3N0YXRpYyB1MTYgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IG1zaXhfY291bnQ7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJRV9NU0lYXzgyNTk4X0NBUFMsCisJICAgICAgICAgICAgICAgICAgICAgJm1zaXhfY291bnQpOworCW1zaXhfY291bnQgJj0gSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLOworCisJLyogTVNJLVggY291bnQgaXMgemVyby1iYXNlZCBpbiBIVywgc28gaW5jcmVtZW50IHRvIGdpdmUgcHJvcGVyIHZhbHVlICovCisJbXNpeF9jb3VudCsrOworCisJcmV0dXJuIG1zaXhfY291bnQ7Cit9CisKKy8qKgogICovCiBzdGF0aWMgczMyIGl4Z2JlX2dldF9pbnZhcmlhbnRzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CkBAIC01OCw2ICs3OSw5IEBACiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQ7CiAKKwkvKiBTZXQgdGhlIGJ1cyBpbmZvcm1hdGlvbiBwcmlvciB0byBQSFkgaWRlbnRpZmljYXRpb24gKi8KKwltYWMtPm9wcy5nZXRfYnVzX2luZm8oaHcpOworCiAJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIHBoeSB0eXBlICovCiAJaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOwogCkBAIC0xMDYsNiArMTMwLDcgQEAKIAltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFXzgyNTk4X1JBUl9FTlRSSUVTOwogCW1hYy0+bWF4X3J4X3F1ZXVlcyA9IElYR0JFXzgyNTk4X01BWF9SWF9RVUVVRVM7CiAJbWFjLT5tYXhfdHhfcXVldWVzID0gSVhHQkVfODI1OThfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk4KGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMTI0LDE4ICsxNDksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpCiB7CiAJczMyIHN0YXR1cyA9IDA7Ci0JczMyIGF1dG9jX3JlZzsKIAotCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0KLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvY19yZWcgJj0gfklYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRTsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19hdHRhY2hfdHlwZTsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQl9Ci0KLQlzd2l0Y2ggKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CisJLyoKKwkgKiBEZXRlcm1pbmUgbGluayBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdGhlIHN0b3JlZCB2YWx1ZSBvZiBBVVRPQywKKwkgKiB3aGljaCByZXByZXNlbnRzIEVFUFJPTSBkZWZhdWx0cy4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CiAJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjoKIAkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKIAkJKmF1dG9uZWcgPSBmYWxzZTsKQEAgLTE1NCw5ICsxNzMsOSBAQAogCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTjoKIAljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU46CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKLQkJaWYgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCiAJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0JCWlmIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19LWF9TVVBQKQorCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKIAkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOwogCQkqYXV0b25lZyA9IHRydWU7CiAJCWJyZWFrOwpAQCAtMjEzLDYgKzIzMiwxMCBAQAogCiAJLyogTWVkaWEgdHlwZSBmb3IgSTgyNTk4IGlzIGJhc2VkIG9uIGRldmljZSBJRCAqLwogCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmU7CisJCWJyZWFrOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QUZfU0lOR0xFX1BPUlQ6CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OThFQl9DWDQ6CkBAIC0yMzUsNiArMjU4LDEwMiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mY19lbmFibGVfODI1OTggLSBFbmFibGUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBwYWNrZXRidWZfbnVtOiBwYWNrZXQgYnVmZmVyIG51bWJlciAoMC03KQorICoKKyAqICBFbmFibGUgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZmNfZW5hYmxlXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgZmN0cmxfcmVnOworCXUzMiBybWNzX3JlZzsKKwl1MzIgcmVnOworCisJZmN0cmxfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKKwlmY3RybF9yZWcgJj0gfihJWEdCRV9GQ1RSTF9SRkNFIHwgSVhHQkVfRkNUUkxfUlBGQ0UpOworCisJcm1jc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7CisJcm1jc19yZWcgJj0gfihJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFkgfCBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6IEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogMTogUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQKKwkgKiAgICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCWZjdHJsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJZmN0cmxfcmVnIHw9IElYR0JFX0ZDVFJMX1JGQ0U7CisJCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybF9yZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUk1DUywgcm1jc19yZWcpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLCBlbmFibGUgWE9OLiAqLworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTChwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAoaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkUpKTsKKwkJfSBlbHNlIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgaHctPmZjLmxvd193YXRlcik7CisJCX0KKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIKHBhY2tldGJ1Zl9udW0pLAorCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyIHwgSVhHQkVfRkNSVEhfRkNFTikpOworCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0pKTsKKwlpZiAoKHBhY2tldGJ1Zl9udW0gJiAxKSA9PSAwKQorCQlyZWcgPSAocmVnICYgMHhGRkZGMDAwMCkgfCBody0+ZmMucGF1c2VfdGltZTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiAweDAwMDBGRkZGKSB8IChody0+ZmMucGF1c2VfdGltZSA8PCAxNik7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtIC8gMiksIHJlZyk7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGl4Z2JlX3NldHVwX2ZjXzgyNTk4IC0gQ29uZmlndXJlIGZsb3cgY29udHJvbCBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKQEAgLTI0NCwxMTAgKzM2Myw2NCBAQAogICoqLwogc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9mY184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKIHsKLQl1MzIgZnJjdGxfcmVnOwotCXUzMiBybWNzX3JlZzsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBzcGVlZDsKKwlib29sIGxpbmtfdXA7CiAKKwkvKiBWYWxpZGF0ZSB0aGUgcGFja2V0YnVmIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAocGFja2V0YnVmX251bSA8IDAgfHwgcGFja2V0YnVmX251bSA+IDcpIHsKIAkJaHdfZGJnKGh3LCAiSW52YWxpZCBwYWNrZXQgYnVmZmVyIG51bWJlciBbJWRdLCBleHBlY3RlZCByYW5nZSBpcyIKIAkJICAgICAgICAgICIgMC03XG4iLCBwYWNrZXRidWZfbnVtKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OwogCX0KIAotCWZyY3RsX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7Ci0JZnJjdGxfcmVnICY9IH4oSVhHQkVfRkNUUkxfUkZDRSB8IElYR0JFX0ZDVFJMX1JQRkNFKTsKLQotCXJtY3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotCXJtY3NfcmVnICY9IH4oSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIHwgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7Ci0KIAkvKgotCSAqIDEwIGdpZyBwYXJ0cyBkbyBub3QgaGF2ZSBhIHdvcmQgaW4gdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlCi0JICogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gZnVsbC4KLQkgKi8KLQlpZiAoaHctPmZjLnR5cGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOwotCi0JLyoKLQkgKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0IGluCi0JICogY2FzZSB3ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQgaHViCi0JICogb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRpZXMuCi0JICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKLQotCS8qCi0JICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgImZsb3dfY29udHJvbCIgcGFyYW1ldGVyIGFyZToKLQkgKiAwOiBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAotCSAqIDE6IFJ4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gcmVjZWl2ZSBwYXVzZSBmcmFtZXMgYnV0IG5vdAotCSAqICAgIHNlbmQgcGF1c2UgZnJhbWVzKS4KLQkgKiAyOiBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dCB3ZSBkbyBub3QKLQkgKiAgICBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpCi0JICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgotCSAqIG90aGVyOiBJbnZhbGlkLgotCSAqLwotCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKLQljYXNlIGl4Z2JlX2ZjX25vbmU6Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6Ci0JCS8qCi0JCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLAotCQkgKiBhbmQgVHggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLgotCQkgKi8KLQkJZnJjdGxfcmVnIHw9IElYR0JFX0ZDVFJMX1JGQ0U7Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfdHhfcGF1c2U6Ci0JCS8qCi0JCSAqIFR4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgUnggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLAotCQkgKiBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4KLQkJICovCi0JCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfZnVsbDoKLQkJLyoKLQkJICogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBhIHNvZnR3YXJlCi0JCSAqIG92ZXItcmlkZS4KLQkJICovCi0JCWZyY3RsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOwotCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuICBUaGUgdmFsdWUgc2hvdWxkIGJlIDAtMy4gKi8KLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEVuYWJsZSA4MDIuM3ggYmFzZWQgZmxvdyBjb250cm9sIHNldHRpbmdzLiAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUUkwsIGZyY3RsX3JlZyk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9STUNTLCBybWNzX3JlZyk7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBpbnZhbGlkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24sIHplcm9zIGFyZSBjb21wbGV0ZWx5Ci0JICogaW52YWxpZCBmb3IgYWxsIHBhcmFtZXRlcnMgdXNlZCBwYXN0IHRoaXMgcG9pbnQsIGFuZCBpZiB3ZSBlbmFibGUKLQkgKiBmbG93IGNvbnRyb2wgd2l0aCB6ZXJvIHdhdGVyIG1hcmtzLCB3ZSBibGFzdCBmbG93IGNvbnRyb2wgcGFja2V0cy4KKwkgKiBWYWxpZGF0ZSB0aGUgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uLiAgWmVybyB3YXRlciBtYXJrcyBhcmUgaW52YWxpZAorCSAqIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGp1c3QgYmxhc3Qgb3V0IGZjIHBhY2tldHMuCiAJICovCiAJaWYgKCFody0+ZmMubG93X3dhdGVyIHx8ICFody0+ZmMuaGlnaF93YXRlciB8fCAhaHctPmZjLnBhdXNlX3RpbWUpIHsKLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHN0cnVjdHVyZSBpbml0aWFsaXplZCBpbmNvcnJlY3RseVxuIik7Ci0JCXJldHVybiBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlod19kYmcoaHcsICJJbnZhbGlkIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvblxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBSZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIKLQkgKiBtYXJrcyBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mCi0JICogWE9OIGZyYW1lcy4KKwkgKiBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIG1vZGUuICBTdHJpY3QgSUVFRSBtb2RlIGRvZXMgbm90IGFsbG93CisJICogaXhnYmVfZmNfcnhfcGF1c2UgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHRlc3RpbmcgYW5vbWFsaWVzLgogCSAqLwotCWlmIChody0+ZmMudHlwZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKSB7Ci0JCWlmIChody0+ZmMuc2VuZF94b24pIHsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCi0JCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7Ci0JCX0gZWxzZSB7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgIGh3LT5mYy5sb3dfd2F0ZXIpOwotCQl9Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEgocGFja2V0YnVmX251bSksCi0JCSAgICAgICAgICAgICAgICAoaHctPmZjLmhpZ2hfd2F0ZXIpfElYR0JFX0ZDUlRIX0ZDRU4pOworCWlmIChody0+ZmMuc3RyaWN0X2llZWUgJiYgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJCWh3X2RiZyhodywgIml4Z2JlX2ZjX3J4X3BhdXNlIG5vdCB2YWxpZCBpbiBzdHJpY3QgSUVFRSBtb2RlXG4iKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OwogCX0KIAotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYoMCksIGh3LT5mYy5wYXVzZV90aW1lKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCS8qCisJICogMTBnaWcgcGFydHMgZG8gbm90IGhhdmUgYSB3b3JkIGluIHRoZSBFRVBST00gdG8gZGV0ZXJtaW5lIHRoZQorCSAqIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmcsIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGZ1bGwuCisJICovCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19kZWZhdWx0KQorCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOwogCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBTYXZlIG9mZiB0aGUgcmVxdWVzdGVkIGZsb3cgY29udHJvbCBtb2RlIGZvciB1c2UgbGF0ZXIuICBEZXBlbmRpbmcKKwkgKiBvbiB0aGUgbGluayBwYXJ0bmVyJ3MgY2FwYWJpbGl0aWVzLCB3ZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhpcyBtb2RlLgorCSAqLworCisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhdXRvbmVnIG9yIG5vdC4gKi8KKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlciAmJiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCisJCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKKworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9mY19lbmFibGVfODI1OTgoaHcsIHBhY2tldGJ1Zl9udW0pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgpAQCAtMzY0LDI3ICs0MzcsMTcgQEAKIAl1MzIgaTsKIAlzMzIgc3RhdHVzID0gMDsKIAotCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0KLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvY19yZWcgJj0gfklYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRTsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19hdHRhY2hfdHlwZTsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwotCQlJWEdCRV9XUklURV9GTFVTSChodyk7Ci0JCW1zbGVlcCg1MCk7Ci0JfQotCiAJLyogUmVzdGFydCBsaW5rICovCisJYXV0b2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKIAlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwogCiAJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLwogCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewotCQlpZiAoaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKLQkJICAgIGh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOKSB7CisJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTiB8fAorCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU4pIHsKIAkJCWxpbmtzX3JlZyA9IDA7IC8qIEp1c3QgaW4gY2FzZSBBdXRvbmVnIHRpbWUgPSAwICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfQVVUT19ORUdfVElNRTsgaSsrKSB7CiAJCQkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKQEAgLTQwNCw3ICs0NjcsNiBAQAogCSAqIGNhc2Ugd2UgZ2V0IGRpc2Nvbm5lY3RlZCBhbmQgdGhlbiByZWNvbm5lY3RlZCBpbnRvIGEgZGlmZmVyZW50IGh1YgogCSAqIG9yIHN3aXRjaCB3aXRoIGRpZmZlcmVudCBGbG93IENvbnRyb2wgY2FwYWJpbGl0aWVzLgogCSAqLwotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CiAJaXhnYmVfc2V0dXBfZmNfODI1OTgoaHcsIDApOwogCiAJLyogQWRkIGRlbGF5IHRvIGZpbHRlciBvdXQgbm9pc2VzIGR1cmluZyBpbml0aWFsIGxpbmsgc2V0dXAgKi8KQEAgLTUwOCwzNyArNTcwLDQzIEBACiAgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCiB7Ci0JczMyIHN0YXR1cyA9IDA7CisJczMyICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX2NhcGFiaWxpdGllcyA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKwl1MzIgICAgICAgICAgICAgIGN1cnJfYXV0b2MgICAgICAgID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwl1MzIgICAgICAgICAgICAgIGF1dG9jICAgICAgICAgICAgID0gY3Vycl9hdXRvYzsKKwl1MzIgICAgICAgICAgICAgIGxpbmtfbW9kZSAgICAgICAgID0gYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSzsKIAotCS8qIElmIHNwZWVkIGlzIDEwRywgdGhlbiBjaGVjayBmb3IgQ1g0IG9yIFhBVUkuICovCi0JaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgJiYKLQkgICAgKCEoaHctPm1hYy5saW5rX2F0dGFjaF90eXBlICYgSVhHQkVfQVVUT0NfMTBHX0tYNCkpKSB7Ci0JCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjsKLQl9IGVsc2UgaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSAmJiAoIWF1dG9uZWcpKSB7Ci0JCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOOwotCX0gZWxzZSBpZiAoYXV0b25lZykgewotCQkvKiBCWCBtb2RlIC0gQXV0b25lZ290aWF0ZSAxRyAqLwotCQlpZiAoIShody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgJiBJWEdCRV9BVVRPQ18xR19QTUFfUE1EKSkKLQkJCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xR19BTjsKLQkJZWxzZSAvKiBLWC9LWDQgbW9kZSAqLwotCQkJaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTjsKLQl9IGVsc2UgeworCS8qIENoZWNrIHRvIHNlZSBpZiBzcGVlZCBwYXNzZWQgaW4gaXMgc3VwcG9ydGVkLiAqLworCWl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OChodywgJmxpbmtfY2FwYWJpbGl0aWVzLCAmYXV0b25lZyk7CisJc3BlZWQgJj0gbGlua19jYXBhYmlsaXRpZXM7CisKKwlpZiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKQogCQlzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKKworCS8qIFNldCBLWDQvS1ggc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWQgcmVxdWVzdGVkICovCisJZWxzZSBpZiAobGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKKwkgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTikgeworCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSzsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWDRfU1VQUDsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkKKwkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0tYX1NVUFA7CisJCWlmIChhdXRvYyAhPSBjdXJyX2F1dG9jKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOwogCX0KIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTsKIAotCQlody0+bWFjLmxpbmtfc2V0dGluZ3NfbG9hZGVkID0gdHJ1ZTsKIAkJLyoKIAkJICogU2V0dXAgYW5kIHJlc3RhcnQgdGhlIGxpbmsgYmFzZWQgb24gdGhlIG5ldyB2YWx1ZXMgaW4KIAkJICogaXhnYmVfaHcgVGhpcyB3aWxsIHdyaXRlIHRoZSBBVVRPQyByZWdpc3RlciBiYXNlZCBvbiB0aGUgbmV3CiAJCSAqIHN0b3JlZCB2YWx1ZXMKIAkJICovCi0JCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKKwkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC01NjEsMTAgKzYyOSw2IEBACiAJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCiAJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7CiAKLQkvKiBTZXQgTUFDIHRvIEtYL0tYNCBhdXRvbmVnLCB3aGljaCBkZWZhdWx0cyB0byBQYXJhbGxlbCBkZXRlY3Rpb24gKi8KLQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPSAoSVhHQkVfQVVUT0NfMTBHX0tYNCB8IElYR0JFX0FVVE9DXzFHX0tYKTsKLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOOwotCiAJLyogU2V0IHVwIE1BQyAqLwogCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIApAQCAtNTkxLDEwICs2NTUsNiBAQAogCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmtfc3BlZWQoaHcsIHNwZWVkLCBhdXRvbmVnLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAotCS8qIFNldCBNQUMgdG8gS1gvS1g0IGF1dG9uZWcsIHdoaWNoIGRlZmF1bHRzIHRvIFBhcmFsbGVsIGRldGVjdGlvbiAqLwotCWh3LT5tYWMubGlua19hdHRhY2hfdHlwZSA9IChJWEdCRV9BVVRPQ18xMEdfS1g0IHwgSVhHQkVfQVVUT0NfMUdfS1gpOwotCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU19LWDRfQU47Ci0KIAkvKiBTZXQgdXAgTUFDICovCiAJaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwogCkBAIC02OTQsMjQgKzc1NCwxNiBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR0hFQ0NSLCBnaGVjY3IpOwogCiAJLyoKLQkgKiBBVVRPQyByZWdpc3RlciB3aGljaCBzdG9yZXMgbGluayBzZXR0aW5ncyBnZXRzIGNsZWFyZWQKLQkgKiBhbmQgcmVsb2FkZWQgZnJvbSBFRVBST00gYWZ0ZXIgcmVzZXQuIFdlIG5lZWQgdG8gcmVzdG9yZQotCSAqIG91ciBzdG9yZWQgdmFsdWUgZnJvbSBpbml0IGluIGNhc2UgU1cgY2hhbmdlZCB0aGUgYXR0YWNoCi0JICogdHlwZSBvciBzcGVlZC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgYW5kIGxpbmsgc2V0dGluZ3MKLQkgKiBoYXZlIG5vdCBiZWVuIHN0b3JlZCwgc3RvcmUgZGVmYXVsdCBzZXR0aW5ncyBmcm9tIEFVVE9DLgorCSAqIFN0b3JlIHRoZSBvcmlnaW5hbCBBVVRPQyB2YWx1ZSBpZiBpdCBoYXMgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiBBVVRPQyB2YWx1ZSBzaW5jZSB0aGUgcmVzZXQgb3BlcmF0aW9uIHNldHMgYmFjayB0byBkZWF1bHRzLgogCSAqLwogCWF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRSk7Ci0JCWF1dG9jICY9IH4oSVhHQkVfQVVUT0NfTE1TX01BU0spOwotCQlhdXRvYyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOwotCX0gZWxzZSB7Ci0JCWh3LT5tYWMubGlua19hdHRhY2hfdHlwZSA9Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAoYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUpOwotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSAoYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSyk7Ci0JCWh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQgPSB0cnVlOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIGlmIChhdXRvYyAhPSBody0+bWFjLm9yaWdfYXV0b2MpIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgaHctPm1hYy5vcmlnX2F1dG9jKTsKIAl9CiAKIAkvKiBTdG9yZSB0aGUgcGVybWFuZW50IG1hYyBhZGRyZXNzICovCkBAIC05OTcsMTEgKzEwNDksMTggQEAKICAqCiAgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KICAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHUzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7Ci0JczMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOwogCiAJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTg6CisJCS8qIERlZmF1bHQgZGV2aWNlIElEIGlzIG1lenphbmluZSBjYXJkIEtYL0tYNCAqLworCQlwaHlzaWNhbF9sYXllciA9IChJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX0tYNCB8CisJCQkJICBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9LWCk7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0JYOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4RUJfQ1g0OgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0NYNF9EVUFMX1BPUlQ6CiAJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9DWDQ7CkBAIC0xMDU1LDggKzExMTQsMTEgQEAKIAkuY2xlYXJfaHdfY250cnMJCT0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCiAJLmdldF9tZWRpYV90eXBlCQk9ICZpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OCwKIAkuZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllciA9ICZpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk4LAorCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYywKIAkuZ2V0X21hY19hZGRyCQk9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKIAkuc3RvcF9hZGFwdGVyCQk9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKKwkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKKwkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKIAkucmVhZF9hbmFsb2dfcmVnOAk9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk4LAogCS53cml0ZV9hbmFsb2dfcmVnOAk9ICZpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OCwKIAkuc2V0dXBfbGluawkJPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFlN2UwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpAQCAtMCwwICsxLDEyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgorCisjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTICAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X01DX1RCTF9TSVpFICAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRSAgMTI4CisKK3MzMiBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOworZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpsaW5rX3VwLCBib29sIGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzdGF0aWMgczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZyk7CitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKK3MzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7CitzMzIgaXhnYmVfY2xlYXJfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7CitzMzIgaXhnYmVfc2V0X3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZsYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZpbmQsIGJvb2wgdmxhbl9vbik7CitzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9ibGlua19sZWRfc3RvcF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOworczMyIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOworczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4ICp2YWwpOworczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCk7CitzMzIgaXhnYmVfc3RhcnRfaHdfcmV2XzBfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwordTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CisKK3ZvaWQgaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKKwkJLyogU2V0IHVwIGR1YWwgc3BlZWQgU0ZQKyBzdXBwb3J0ICovCisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXI7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXI7CisJfSBlbHNlIHsKKwkJbWFjLT5vcHMuc2V0dXBfbGluayA9CisJCSAgICAgICAgICAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTk7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5OworCX0KK30KKworczMyIGl4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQsIGRhdGFfdmFsdWU7CisKKwlpZiAoaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV91bmtub3duKSB7CisJCWl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KGh3KTsKKwkJcmV0X3ZhbCA9IGl4Z2JlX2dldF9zZnBfaW5pdF9zZXF1ZW5jZV9vZmZzZXRzKGh3LCAmbGlzdF9vZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vZmZzZXQpOworCisJCWlmIChyZXRfdmFsICE9IDApCisJCQlnb3RvIHNldHVwX3NmcF9vdXQ7CisKKwkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOworCQl3aGlsZSAoZGF0YV92YWx1ZSAhPSAweGZmZmYpIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgZGF0YV92YWx1ZSk7CisJCQlJWEdCRV9XUklURV9GTFVTSChodyk7CisJCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCArK2RhdGFfb2Zmc2V0LCAmZGF0YV92YWx1ZSk7CisJCX0KKwkJLyogTm93IHJlc3RhcnQgRFNQICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgMHgwMDAwMDEwMik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgMHgwMDAwMGIxZCk7CisJCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl9CisKK3NldHVwX3NmcF9vdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTkgLSBHZXRzIE1TSS1YIHZlY3RvciBjb3VudAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCisgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KKyAqKi8KK3UzMiBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwl1MTYgbXNpeF9jb3VudDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBJWEdCRV9QQ0lFX01TSVhfODI1OTlfQ0FQUywKKwkgICAgICAgICAgICAgICAgICAgICAmbXNpeF9jb3VudCk7CisJbXNpeF9jb3VudCAmPSBJWEdCRV9QQ0lFX01TSVhfVEJMX1NaX01BU0s7CisKKwkvKiBNU0ktWCBjb3VudCBpcyB6ZXJvLWJhc2VkIGluIEhXLCBzbyBpbmNyZW1lbnQgdG8gZ2l2ZSBwcm9wZXIgdmFsdWUgKi8KKwltc2l4X2NvdW50Kys7CisKKwlyZXR1cm4gbXNpeF9jb3VudDsKK30KKworc3RhdGljIHMzMiBpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJc3RydWN0IGl4Z2JlX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsKKworCS8qIFNldCB0aGUgYnVzIGluZm9ybWF0aW9uIHByaW9yIHRvIFBIWSBpZGVudGlmaWNhdGlvbiAqLworCW1hYy0+b3BzLmdldF9idXNfaW5mbyhodyk7CisKKwkvKiBDYWxsIFBIWSBpZGVudGlmeSByb3V0aW5lIHRvIGdldCB0aGUgQ3Ugb3IgU0ZJIHBoeSB0eXBlICovCisJcmV0X3ZhbCA9IHBoeS0+b3BzLmlkZW50aWZ5KGh3KTsKKworCWlmIChyZXRfdmFsID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkKKwkJZ290byBnZXRfaW52YXJpYW50c19vdXQ7CisKKwlpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShodyk7CisKKwkvKiBTZXR1cCBTRlAgbW9kdWxlIGlmIHRoZXJlIGlzIG9uZSBwcmVzZW50LiAqLworCXJldF92YWwgPSBtYWMtPm9wcy5zZXR1cF9zZnAoaHcpOworCisJLyogSWYgY29wcGVyIG1lZGlhLCBvdmVyd3JpdGUgd2l0aCBjb3BwZXIgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKwlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB7CisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTk7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTk7CisJCW1hYy0+b3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyA9CisJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5OworCX0KKworCS8qIFBIWSBJbml0ICovCisJc3dpdGNoIChody0+cGh5LnR5cGUpIHsKKwljYXNlIGl4Z2JlX3BoeV90bjoKKwkJcGh5LT5vcHMuY2hlY2tfbGluayA9ICZpeGdiZV9jaGVja19waHlfbGlua190bng7CisJCXBoeS0+b3BzLmdldF9maXJtd2FyZV92ZXJzaW9uID0KKwkJICAgICAgICAgICAgICAgICAgJml4Z2JlX2dldF9waHlfZmlybXdhcmVfdmVyc2lvbl90bng7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW1hYy0+bWNmdF9zaXplID0gSVhHQkVfODI1OTlfTUNfVEJMX1NJWkU7CisJbWFjLT52ZnRfc2l6ZSA9IElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRTsKKwltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTOworCW1hYy0+bWF4X3J4X3F1ZXVlcyA9IElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVM7CisJbWFjLT5tYXhfdHhfcXVldWVzID0gSVhHQkVfODI1OTlfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KGh3KTsKKworZ2V0X2ludmFyaWFudHNfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkgLSBEZXRlcm1pbmVzIGxpbmsgY2FwYWJpbGl0aWVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogcG9pbnRlciB0byBsaW5rIHNwZWVkCisgKiAgQG5lZ290aWF0aW9uOiB0cnVlIHdoZW4gYXV0b25lZyBvciBhdXRvdHJ5IGlzIGVuYWJsZWQKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgbGluayBjYXBhYmlsaXRpZXMgYnkgcmVhZGluZyB0aGUgQVVUT0MgcmVnaXN0ZXIuCisgKiovCitzMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpuZWdvdGlhdGlvbikKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCXN3aXRjaCAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0spIHsKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IGZhbHNlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzFHX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUw6CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1I6CisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LUl9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TX1NHTUlJXzFHXzEwME06CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKKwkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKKwkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMIHwKKwkJICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OSAtIERldGVybWluZXMgbGluayBjYXBhYmlsaXRpZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogYm9vbGVhbiBhdXRvLW5lZ290aWF0aW9uIHZhbHVlCisgKgorICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJdTE2IHNwZWVkX2FiaWxpdHk7CisKKwkqc3BlZWQgPSAwOworCSphdXRvbmVnID0gdHJ1ZTsKKworCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBJWEdCRV9NRElPX1BIWV9TUEVFRF9BQklMSVRZLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX01ESU9fUE1BX1BNRF9ERVZfVFlQRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3BlZWRfYWJpbGl0eSk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKHNwZWVkX2FiaWxpdHkgJiBJWEdCRV9NRElPX1BIWV9TUEVFRF8xMEcpCisJCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgSVhHQkVfTURJT19QSFlfU1BFRURfMUcpCisJCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OSAtIEdldCBtZWRpYSB0eXBlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBSZXR1cm5zIHRoZSBtZWRpYSB0eXBlIChmaWJlciwgY29wcGVyLCBiYWNrcGxhbmUpCisgKiovCitlbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwllbnVtIGl4Z2JlX21lZGlhX3R5cGUgbWVkaWFfdHlwZTsKKworCS8qIERldGVjdCBpZiB0aGVyZSBpcyBhIGNvcHBlciBQSFkgYXR0YWNoZWQuICovCisJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfY3VfdW5rbm93biB8fAorCSAgICBody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3RuKSB7CisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcjsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTk6CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0OgorCQkvKiBEZWZhdWx0IGRldmljZSBJRCBpcyBtZXp6YW5pbmUgY2FyZCBLWC9LWDQgKi8KKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2ZpYmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV91bmtub3duOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIG1lZGlhX3R5cGU7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5IC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KKyAqICBSZXN0YXJ0cyB0aGUgbGluay4gIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgYXV0b2NfcmVnOworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisJczMyIHN0YXR1cyA9IDA7CisKKwkvKiBSZXN0YXJ0IGxpbmsgKi8KKwlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jX3JlZyB8PSBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jX3JlZyk7CisKKwkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCisJaWYgKGh3LT5waHkuYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CisJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJKSB7CisJCQlsaW5rc19yZWcgPSAwOyAvKiBKdXN0IGluIGNhc2UgQXV0b25lZyB0aW1lID0gMCAqLworCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgeworCQkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJCQkJaWYgKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxMDApOworCQkJfQorCQkJaWYgKCEobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkpIHsKKwkJCQlzdGF0dXMgPSBJWEdCRV9FUlJfQVVUT05FR19OT1RfQ09NUExFVEU7CisJCQkJaHdfZGJnKGh3LCAiQXV0b25lZyBkaWQgbm90IGNvbXBsZXRlLlxuIik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJc3RhdHVzID0gaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhodywgMCk7CisKKwkvKiBBZGQgZGVsYXkgdG8gZmlsdGVyIG91dCBub2lzZXMgZHVyaW5nIGluaXRpYWwgbGluayBzZXR1cCAqLworCW1zbGVlcCg1MCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KKyAqICBSZXN0YXJ0cyB0aGUgbGluayBmb3IgbXVsdGktc3BlZWQgZmliZXIgYXQgMUcgc3BlZWQsIGlmIGxpbmsKKyAqICBmYWlscyBhdCAxMEcuCisgKiAgUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF84MjU5OV9BVVRPTkVHOworCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsIGxpbmtfc3BlZWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0IE1BQyBsaW5rIHNwZWVkCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgd2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGlzIG5lZWRlZAorICoKKyAqICBTZXQgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGFuZCByZXN0YXJ0cyBsaW5rLgorICoqLworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlpeGdiZV9saW5rX3NwZWVkIHBoeV9saW5rX3NwZWVkOworCWl4Z2JlX2xpbmtfc3BlZWQgaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCXUzMiBzcGVlZGNudCA9IDA7CisJdTMyIGVzZHBfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VTRFApOworCWJvb2wgbGlua191cCA9IGZhbHNlOworCWJvb2wgbmVnb3RpYXRpb247CisKKwkvKiBNYXNrIG9mZiByZXF1ZXN0ZWQgYnV0IG5vbi1zdXBwb3J0ZWQgc3BlZWRzICovCisJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmcGh5X2xpbmtfc3BlZWQsICZuZWdvdGlhdGlvbik7CisJc3BlZWQgJj0gcGh5X2xpbmtfc3BlZWQ7CisKKwkvKgorCSAqIFRyeSBlYWNoIHNwZWVkIG9uZSBieSBvbmUsIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QuICBXZSBkbyB0aGlzIGluCisJICogc29mdHdhcmUgYmVjYXVzZSAxMGdiIGZpYmVyIGRvZXNuJ3Qgc3VwcG9ydCBzcGVlZCBhdXRvbmVnb3RpYXRpb24uCisJICovCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpIHsKKwkJc3BlZWRjbnQrKzsKKwkJaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisKKwkJLyogU2V0IGhhcmR3YXJlIFNEUCdzICovCisJCWVzZHBfcmVnIHw9IChJWEdCRV9FU0RQX1NEUDVfRElSIHwgSVhHQkVfRVNEUF9TRFA1KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FU0RQLCBlc2RwX3JlZyk7CisKKwkJaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCisJCW1zbGVlcCg1MCk7CisKKwkJLyogSWYgd2UgaGF2ZSBsaW5rLCBqdXN0IGp1bXAgb3V0ICovCisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZwaHlfbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwkJaWYgKGxpbmtfdXApCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSB7CisJCXNwZWVkY250Kys7CisJCWlmIChoaWdoZXN0X2xpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKQorCQkJaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKworCQkvKiBTZXQgaGFyZHdhcmUgU0RQJ3MgKi8KKwkJZXNkcF9yZWcgJj0gfklYR0JFX0VTRFBfU0RQNTsKKwkJZXNkcF9yZWcgfD0gSVhHQkVfRVNEUF9TRFA1X0RJUjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FU0RQLCBlc2RwX3JlZyk7CisKKwkJaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoCisJCQlodywgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCwgYXV0b25lZywKKwkJCWF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisKKwkJbXNsZWVwKDUwKTsKKworCQkvKiBJZiB3ZSBoYXZlIGxpbmssIGp1c3QganVtcCBvdXQgKi8KKwkJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnBoeV9saW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOworCQlpZiAobGlua191cCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgZGlkbid0IGdldCBsaW5rLiAgQ29uZmlndXJlIGJhY2sgdG8gdGhlIGhpZ2hlc3Qgc3BlZWQgd2UgdHJpZWQsCisJICogKGlmIHRoZXJlIHdhcyBtb3JlIHRoYW4gb25lKS4gIFdlIGNhbGwgb3Vyc2VsdmVzIGJhY2sgd2l0aCBqdXN0IHRoZQorCSAqIHNpbmdsZSBoaWdoZXN0IHNwZWVkIHRoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLgorCSAqLworCWlmIChzcGVlZGNudCA+IDEpCisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0X2xpbmtfc3BlZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5IC0gRGV0ZXJtaW5lIGxpbmsgYW5kIHNwZWVkIHN0YXR1cworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBsaW5rX3VwOiB0cnVlIHdoZW4gbGluayBpcyB1cAorICogIEBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGU6IGJvb2wgdXNlZCB0byB3YWl0IGZvciBsaW5rIHVwIG9yIG5vdAorICoKKyAqICBSZWFkcyB0aGUgbGlua3MgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGlmIGxpbmsgaXMgdXAgYW5kIHRoZSBjdXJyZW50IHNwZWVkCisgKiovCitzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpCit7CisJdTMyIGxpbmtzX3JlZzsKKwl1MzIgaTsKKworCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJaWYgKGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfTElOS19VUF9USU1FOyBpKyspIHsKKwkJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkgeworCQkJCSpsaW5rX3VwID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJKmxpbmtfdXAgPSBmYWxzZTsKKwkJCX0KKwkJCW1zbGVlcCgxMDApOworCQkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkKKwkJCSpsaW5rX3VwID0gdHJ1ZTsKKwkJZWxzZQorCQkJKmxpbmtfdXAgPSBmYWxzZTsKKwl9CisKKwlpZiAoKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX1NQRUVEXzgyNTk5KSA9PQorCSAgICBJWEdCRV9MSU5LU19TUEVFRF8xMEdfODI1OTkpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCWVsc2UgaWYgKChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSkgPT0KKwkgICAgICAgICBJWEdCRV9MSU5LU19TUEVFRF8xR184MjU5OSkKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwllbHNlCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7CisKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OSAtIFNldCBNQUMgbGluayBzcGVlZAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCXUzMiBhdXRvYzIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MyKTsKKwl1MzIgbGlua19tb2RlID0gYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwl1MzIgcG1hX3BtZF8xZyA9IGF1dG9jICYgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9NQVNLOworCXUzMiBwbWFfcG1kXzEwZ19zZXJpYWwgPSBhdXRvYzIgJiBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX01BU0s7CisJdTMyIGxpbmtzX3JlZzsKKwl1MzIgaTsKKwlpeGdiZV9saW5rX3NwZWVkIGxpbmtfY2FwYWJpbGl0aWVzID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHNwZWVkIHBhc3NlZCBpbiBpcyBzdXBwb3J0ZWQuICovCisJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmbGlua19jYXBhYmlsaXRpZXMsICZhdXRvbmVnKTsKKwlzcGVlZCAmPSBsaW5rX2NhcGFiaWxpdGllczsKKworCWlmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV04pIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJfSBlbHNlIGlmIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCSAgICAgICAgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJKSB7CisJCS8qIFNldCBLWDQvS1gvS1Igc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWQgcmVxdWVzdGVkICovCisJCWF1dG9jICY9IH4oSVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSyB8IElYR0JFX0FVVE9DX0tSX1NVUFApOworCQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKwkJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWDRfU1VQUDsKKwkJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LUl9TVVBQKQorCQkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0tSX1NVUFA7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWF9TVVBQOworCX0gZWxzZSBpZiAoKHBtYV9wbWRfMWcgPT0gSVhHQkVfQVVUT0NfMUdfU0ZJKSAmJgorCSAgICAgICAgICAgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTiB8fAorCSAgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMUdfQU4pKSB7CisJCS8qIFN3aXRjaCBmcm9tIDFHIFNGSSB0byAxMEcgU0ZJIGlmIHJlcXVlc3RlZCAqLworCQlpZiAoKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSAmJgorCQkgICAgKHBtYV9wbWRfMTBnX3NlcmlhbCA9PSBJWEdCRV9BVVRPQzJfMTBHX1NGSSkpIHsKKwkJCWF1dG9jICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMOworCQl9CisJfSBlbHNlIGlmICgocG1hX3BtZF8xMGdfc2VyaWFsID09IElYR0JFX0FVVE9DMl8xMEdfU0ZJKSAmJgorCSAgICAgICAgICAgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTCkpIHsKKwkJLyogU3dpdGNoIGZyb20gMTBHIFNGSSB0byAxRyBTRkkgaWYgcmVxdWVzdGVkICovCisJCWlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgJiYKKwkJICAgIChwbWFfcG1kXzFnID09IElYR0JFX0FVVE9DXzFHX1NGSSkpIHsKKwkJCWF1dG9jICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwkJCWlmIChhdXRvbmVnKQorCQkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0xNU18xR19BTjsKKwkJCWVsc2UKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBSZXN0YXJ0IGxpbmsgKi8KKwkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOworCisJCS8qIE9ubHkgcG9sbCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBpZiBzcGVjaWZpZWQgdG8gZG8gc28gKi8KKwkJaWYgKGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCQkJaWYgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSIHx8CisJCQkgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkJCSAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkJCWxpbmtzX3JlZyA9IDA7IC8qSnVzdCBpbiBjYXNlIEF1dG9uZWcgdGltZT0wKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfQVVUT19ORUdfVElNRTsgaSsrKSB7CisJCQkJCWxpbmtzX3JlZyA9CisJCQkJCSAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCQkJCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkKKwkJCQkJCWJyZWFrOworCQkJCQltc2xlZXAoMTAwKTsKKwkJCQl9CisJCQkJaWYgKCEobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkpIHsKKwkJCQkJc3RhdHVzID0KKwkJCQkJICAgICAgICBJWEdCRV9FUlJfQVVUT05FR19OT1RfQ09NUExFVEU7CisJCQkJCWh3X2RiZyhodywgIkF1dG9uZWcgZGlkIG5vdCAiCisJCQkJCSAgICAgICAiY29tcGxldGUuXG4iKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoaHcsIDApOworCisJCS8qIEFkZCBkZWxheSB0byBmaWx0ZXIgb3V0IG5vaXNlcyBkdXJpbmcgaW5pdGlhbCBsaW5rIHNldHVwICovCisJCW1zbGVlcCg1MCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkgLSBTZXR1cCBjb3BwZXIgbGluayBzZXR0aW5ncworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzdGFydHMgdGhlIGxpbmsgb24gUEhZIGFuZCB0aGVuIE1BQy4gUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzOworCisJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCisJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7CisKKwkvKiBTZXQgdXAgTUFDICovCisJaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgdGhlIFBIWSBhdXRvbmVnIGFkdmVydGlzZWQgZmllbGQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAorICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSBpZiB3YWl0aW5nIGlzIG5lZWRlZCB0byBjb21wbGV0ZQorICoKKyAqICBSZXN0YXJ0cyBsaW5rIG9uIFBIWSBhbmQgTUFDIGJhc2VkIG9uIHNldHRpbmdzIHBhc3NlZCBpbi4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzOworCisJLyogU2V0dXAgdGhlIFBIWSBhY2NvcmRpbmcgdG8gaW5wdXQgc3BlZWQgKi8KKwlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisJLyogU2V0IHVwIE1BQyAqLworCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5IC0gUGVyZm9ybSBoYXJkd2FyZSByZXNldAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcworICogIGFuZCBjbGVhcnMgYWxsIGludGVycnVwdHMsIHBlcmZvcm0gYSBQSFkgcmVzZXQsIGFuZCBwZXJmb3JtIGEgbGluayAoTUFDKQorICogIHJlc2V0LgorICoqLworczMyIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIGN0cmwsIGN0cmxfZXh0OworCXUzMiBpOworCXUzMiBhdXRvYzsKKwl1MzIgYXV0b2MyOworCisJLyogQ2FsbCBhZGFwdGVyIHN0b3AgdG8gZGlzYWJsZSB0eC9yeCBhbmQgY2xlYXIgaW50ZXJydXB0cyAqLworCWh3LT5tYWMub3BzLnN0b3BfYWRhcHRlcihodyk7CisKKwkvKiBSZXNldCBQSFkgKi8KKwlody0+cGh5Lm9wcy5yZXNldChodyk7CisKKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIGZyb20gaGFuZ2luZyBieSBkaXNhYmxpbmcgUENJLUUgbWFzdGVyCisJICogYWNjZXNzIGFuZCB2ZXJpZnkgbm8gcGVuZGluZyByZXF1ZXN0cyBiZWZvcmUgcmVzZXQKKwkgKi8KKwlpZiAoaXhnYmVfZGlzYWJsZV9wY2llX21hc3RlcihodykgIT0gMCkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkc7CisJCWh3X2RiZyhodywgIlBDSS1FIE1hc3RlciBkaXNhYmxlIHBvbGxpbmcgaGFzIGZhaWxlZC5cbiIpOworCX0KKworCS8qCisJICogSXNzdWUgZ2xvYmFsIHJlc2V0IHRvIHRoZSBNQUMuICBUaGlzIG5lZWRzIHRvIGJlIGEgU1cgcmVzZXQuCisJICogSWYgbGluayByZXNldCBpcyB1c2VkLCBpdCBtaWdodCByZXNldCB0aGUgTUFDIHdoZW4gbW5nIGlzIHVzaW5nIGl0CisJICovCisJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgSVhHQkVfQ1RSTF9SU1QpKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwkvKiBQb2xsIGZvciByZXNldCBiaXQgdG8gc2VsZi1jbGVhciBpbmRpY2F0aW5nIHJlc2V0IGlzIGNvbXBsZXRlICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJdWRlbGF5KDEpOworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOworCQlpZiAoIShjdHJsICYgSVhHQkVfQ1RSTF9SU1QpKQorCQkJYnJlYWs7CisJfQorCWlmIChjdHJsICYgSVhHQkVfQ1RSTF9SU1QpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX1JFU0VUX0ZBSUxFRDsKKwkJaHdfZGJnKGh3LCAiUmVzZXQgcG9sbGluZyBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsKKwl9CisJLyogQ2xlYXIgUEYgUmVzZXQgRG9uZSBiaXQgc28gUEYvVkYgTWFpbCBPcHMgY2FuIHdvcmsgKi8KKwljdHJsX2V4dCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCk7CisJY3RybF9leHQgfD0gSVhHQkVfQ1RSTF9FWFRfUEZSU1REOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKworCW1zbGVlcCg1MCk7CisKKworCisJLyoKKwkgKiBTdG9yZSB0aGUgb3JpZ2luYWwgQVVUT0MvQVVUT0MyIHZhbHVlcyBpZiB0aGV5IGhhdmUgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiB2YWx1ZXMgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBzZXRzIGJhY2sgdG8gZGVmYXVsdHMuCisJICovCisJYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jMiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQzIpOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19hdXRvYzIgPSBhdXRvYzI7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKGF1dG9jICE9IGh3LT5tYWMub3JpZ19hdXRvYykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIChody0+bWFjLm9yaWdfYXV0b2MgfAorCQkJICAgICAgICAgICAgICAgIElYR0JFX0FVVE9DX0FOX1JFU1RBUlQpKTsKKworCQlpZiAoKGF1dG9jMiAmIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLKSAhPQorCQkgICAgKGh3LT5tYWMub3JpZ19hdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykpIHsKKwkJCWF1dG9jMiAmPSB+SVhHQkVfQVVUT0MyX1VQUEVSX01BU0s7CisJCQlhdXRvYzIgfD0gKGh3LT5tYWMub3JpZ19hdXRvYzIgJgorCQkJICAgICAgICAgICBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSyk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DMiwgYXV0b2MyKTsKKwkJfQorCX0KKworCS8qIFN0b3JlIHRoZSBwZXJtYW5lbnQgbWFjIGFkZHJlc3MgKi8KKwlody0+bWFjLm9wcy5nZXRfbWFjX2FkZHIoaHcsIGh3LT5tYWMucGVybV9hZGRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkgLSBEaXNhc3NvY2lhdGUgYSBWTURxIHBvb2wgaW5kZXggZnJvbSBhIHJ4IGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0CisgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGRpc2Fzc29jaWF0ZQorICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXggdG8gcmVtb3ZlIGZyb20gdGhlIHJhcgorICoqLworczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpCit7CisJdTMyIG1wc2FyX2xvLCBtcHNhcl9oaTsKKwl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKKworCWlmIChyYXIgPCByYXJfZW50cmllcykgeworCQltcHNhcl9sbyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpKTsKKwkJbXBzYXJfaGkgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSk7CisKKwkJaWYgKCFtcHNhcl9sbyAmJiAhbXBzYXJfaGkpCisJCQlnb3RvIGRvbmU7CisKKwkJaWYgKHZtZHEgPT0gSVhHQkVfQ0xFQVJfVk1EUV9BTEwpIHsKKwkJCWlmIChtcHNhcl9sbykgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSwgMCk7CisJCQkJbXBzYXJfbG8gPSAwOworCQkJfQorCQkJaWYgKG1wc2FyX2hpKSB7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCAwKTsKKwkJCQltcHNhcl9oaSA9IDA7CisJCQl9CisJCX0gZWxzZSBpZiAodm1kcSA8IDMyKSB7CisJCQltcHNhcl9sbyAmPSB+KDEgPDwgdm1kcSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIG1wc2FyX2xvKTsKKwkJfSBlbHNlIHsKKwkJCW1wc2FyX2hpICY9IH4oMSA8PCAodm1kcSAtIDMyKSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhciksIG1wc2FyX2hpKTsKKwkJfQorCisJCS8qIHdhcyB0aGF0IHRoZSBsYXN0IHBvb2wgdXNpbmcgdGhpcyByYXI/ICovCisJCWlmIChtcHNhcl9sbyA9PSAwICYmIG1wc2FyX2hpID09IDAgJiYgcmFyICE9IDApCisJCQlody0+bWFjLm9wcy5jbGVhcl9yYXIoaHcsIHJhcik7CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiUkFSIGluZGV4ICVkIGlzIG91dCBvZiByYW5nZS5cbiIsIHJhcik7CisJfQorCitkb25lOgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdm1kcV84MjU5OSAtIEFzc29jaWF0ZSBhIFZNRHEgcG9vbCBpbmRleCB3aXRoIGEgcnggYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3QKKyAqICBAcmFyOiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXggdG8gYXNzb2NpYXRlIHdpdGggYSBWTURxIGluZGV4CisgKiAgQHZtZHE6IFZNRHEgcG9vbCBpbmRleAorICoqLworczMyIGl4Z2JlX3NldF92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQoreworCXUzMiBtcHNhcjsKKwl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKKworCWlmIChyYXIgPCByYXJfZW50cmllcykgeworCQlpZiAodm1kcSA8IDMyKSB7CisJCQltcHNhciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpKTsKKwkJCW1wc2FyIHw9IDEgPDwgdm1kcTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSwgbXBzYXIpOworCQl9IGVsc2UgeworCQkJbXBzYXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSk7CisJCQltcHNhciB8PSAxIDw8ICh2bWRxIC0gMzIpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCBtcHNhcik7CisJCX0KKwl9IGVsc2UgeworCQlod19kYmcoaHcsICJSQVIgaW5kZXggJWQgaXMgb3V0IG9mIHJhbmdlLlxuIiwgcmFyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF92ZnRhXzgyNTk5IC0gU2V0IFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEB2bGFuOiBWTEFOIGlkIHRvIHdyaXRlIHRvIFZMQU4gZmlsdGVyCisgKiAgQHZpbmQ6IFZNRHEgb3V0cHV0IGluZGV4IHRoYXQgbWFwcyBxdWV1ZSB0byBWTEFOIGlkIGluIFZGVkZCCisgKiAgQHZsYW5fb246IGJvb2xlYW4gZmxhZyB0byB0dXJuIG9uL29mZiBWTEFOIGluIFZGVkYKKyAqCisgKiAgVHVybiBvbi9vZmYgc3BlY2lmaWVkIFZMQU4gaW4gdGhlIFZMQU4gZmlsdGVyIHRhYmxlLgorICoqLworczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLCB1MzIgdmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZsYW5fb24pCit7CisJdTMyIHJlZ2luZGV4OworCXUzMiBiaXRpbmRleDsKKwl1MzIgYml0czsKKwl1MzIgZmlyc3RfZW1wdHlfc2xvdDsKKworCWlmICh2bGFuID4gNDA5NSkKKwkJcmV0dXJuIElYR0JFX0VSUl9QQVJBTTsKKworCS8qCisJICogdGhpcyBpcyBhIDIgcGFydCBvcGVyYXRpb24gLSBmaXJzdCB0aGUgVkZUQSwgdGhlbiB0aGUKKwkgKiBWTFZGIGFuZCBWTFZGQiBpZiB2aW5kIGlzIHNldAorCSAqLworCisJLyogUGFydCAxCisJICogVGhlIFZGVEEgaXMgYSBiaXRzdHJpbmcgbWFkZSB1cCBvZiAxMjggMzItYml0IHJlZ2lzdGVycworCSAqIHRoYXQgZW5hYmxlIHRoZSBwYXJ0aWN1bGFyIFZMQU4gaWQsIG11Y2ggbGlrZSB0aGUgTVRBOgorCSAqICAgIGJpdHNbMTEtNV06IHdoaWNoIHJlZ2lzdGVyCisJICogICAgYml0c1s0LTBdOiAgd2hpY2ggYml0IGluIHRoZSByZWdpc3RlcgorCSAqLworCXJlZ2luZGV4ID0gKHZsYW4gPj4gNSkgJiAweDdGOworCWJpdGluZGV4ID0gdmxhbiAmIDB4MUY7CisJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRBKHJlZ2luZGV4KSk7CisJaWYgKHZsYW5fb24pCisJCWJpdHMgfD0gKDEgPDwgYml0aW5kZXgpOworCWVsc2UKKwkJYml0cyAmPSB+KDEgPDwgYml0aW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCksIGJpdHMpOworCisKKwkvKiBQYXJ0IDIKKwkgKiBJZiB0aGUgdmluZCBpcyBzZXQKKwkgKiAgIEVpdGhlciB2bGFuX29uCisJICogICAgIG1ha2Ugc3VyZSB0aGUgdmxhbiBpcyBpbiBWTFZGCisJICogICAgIHNldCB0aGUgdmluZCBiaXQgaW4gdGhlIG1hdGNoaW5nIFZMVkZCCisJICogICBPciAhdmxhbl9vbgorCSAqICAgICBjbGVhciB0aGUgcG9vbCBiaXQgYW5kIHBvc3NpYmx5IHRoZSB2aW5kCisJICovCisJaWYgKHZpbmQpIHsKKwkJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCisJCWZpcnN0X2VtcHR5X3Nsb3QgPSAwOworCisJCWZvciAocmVnaW5kZXggPSAxOyByZWdpbmRleCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgcmVnaW5kZXgrKykgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSk7CisJCQlpZiAoIWJpdHMgJiYgIWZpcnN0X2VtcHR5X3Nsb3QpCisJCQkJZmlyc3RfZW1wdHlfc2xvdCA9IHJlZ2luZGV4OworCQkJZWxzZSBpZiAoKGJpdHMgJiAweDBGRkYpID09IHZsYW4pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVnaW5kZXggPj0gSVhHQkVfVkxWRl9FTlRSSUVTKSB7CisJCQlpZiAoZmlyc3RfZW1wdHlfc2xvdCkKKwkJCQlyZWdpbmRleCA9IGZpcnN0X2VtcHR5X3Nsb3Q7CisJCQllbHNlIHsKKwkJCQlod19kYmcoaHcsICJObyBzcGFjZSBpbiBWTFZGLlxuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQlpZiAodmxhbl9vbikgeworCQkJLyogc2V0IHRoZSBwb29sIGJpdCAqLworCQkJaWYgKHZpbmQgPCAzMikgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOworCQkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSwgYml0cyk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOworCQkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBjbGVhciB0aGUgcG9vbCBiaXQgKi8KKwkJCWlmICh2aW5kIDwgMzIpIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOworCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKKwkJCX0gZWxzZSB7CisJCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7CisJCQkJYml0cyAmPSB+KDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQkJYml0cyB8PSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOworCQkJfQorCQl9CisKKwkJaWYgKGJpdHMpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLAorCQkJICAgICAgICAgICAgICAgIChJWEdCRV9WTFZGX1ZJRU4gfCB2bGFuKSk7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCksIDApOworCX0KKworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9jbGVhcl92ZnRhXzgyNTk5IC0gQ2xlYXIgVkxBTiBmaWx0ZXIgdGFibGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsZWFycyB0aGUgVkxBTiBmaWxlciB0YWJsZSwgYW5kIHRoZSBWTURxIGluZGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyCisgKiovCitzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGh3LT5tYWMudmZ0X3NpemU7IG9mZnNldCsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEob2Zmc2V0KSwgMCk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgb2Zmc2V0KyspIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKG9mZnNldCksIDApOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkZCKG9mZnNldCAqIDIpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGQigob2Zmc2V0ICogMikgKyAxKSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OSAtIEJsaW5rIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGluZGV4OiBsZWQgbnVtYmVyIHRvIGJsaW5rCisgKiovCitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0YXJ0XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCkKK3sKKwl1MzIgbGVkX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MRURDVEwpOworCisJbGVkX3JlZyAmPSB+SVhHQkVfTEVEX01PREVfTUFTSyhpbmRleCk7CisJbGVkX3JlZyB8PSBJWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkgLSBTdG9wIGJsaW5raW5nIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGluZGV4OiBsZWQgbnVtYmVyIHRvIHN0b3AgYmxpbmtpbmcKKyAqKi8KK3MzMiBpeGdiZV9ibGlua19sZWRfc3RvcF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIGxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9CTElOSyhpbmRleCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9MRURDVEwsIGxlZF9yZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkgLSBJbml0aWFsaXplIHRoZSBVbmljYXN0IFRhYmxlIEFycmF5CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoqLworczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCWludCBpOworCWh3X2RiZyhodywgIiBDbGVhcmluZyBVVEFcbiIpOworCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1VUQShpKSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OSAtIFJlYWRzIDggYml0IE9tZXIgYW5hbG9nIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWc6IGFuYWxvZyByZWdpc3RlciB0byByZWFkCisgKiAgQHZhbDogcmVhZCB2YWx1ZQorICoKKyAqICBQZXJmb3JtcyByZWFkIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCisgKiovCitzMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKQoreworCXUzMiAgY29yZV9jdGw7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIElYR0JFX0NPUkVDVExfV1JJVEVfQ01EIHwKKwkgICAgICAgICAgICAgICAgKHJlZyA8PCA4KSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgxMCk7CisJY29yZV9jdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ09SRUNUTCk7CisJKnZhbCA9ICh1OCljb3JlX2N0bDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OSAtIFdyaXRlcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVnOiBhdGxhcyByZWdpc3RlciB0byB3cml0ZQorICogIEB2YWw6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIHdyaXRlIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggdmFsKQoreworCXUzMiAgY29yZV9jdGw7CisKKwljb3JlX2N0bCA9IChyZWcgPDwgOCkgfCB2YWw7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DT1JFQ1RMLCBjb3JlX2N0bCk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc3RhcnRfaHdfODI1OTkgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbi4KKyAqICBUaGVuIHBlcmZvcm1zIGRldmljZS1zcGVjaWZpYzoKKyAqICBDbGVhcnMgdGhlIHJhdGUgbGltaXRlciByZWdpc3RlcnMuCisgKiovCitzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcV9udW07CisKKwlpeGdiZV9zdGFydF9od19nZW5lcmljKGh3KTsKKworCS8qIENsZWFyIHRoZSByYXRlIGxpbWl0ZXJzICovCisJZm9yIChxX251bSA9IDA7IHFfbnVtIDwgaHctPm1hYy5tYXhfdHhfcXVldWVzOyBxX251bSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIHFfbnVtKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRCQ05SQywgMCk7CisJfQorCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkgLSBHZXQgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBwaHlzaWNhbCBsYXllciBtb2R1bGUgZm91bmQgb24gdGhlIGN1cnJlbnQgYWRhcHRlci4KKyAqKi8KK3MzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX1BIWV9BRERSX0lOVkFMSUQ7CisJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfc2ZwX21vZHVsZV9nZW5lcmljKGh3KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5IC0gUmV0dXJucyBwaHlzaWNhbCBsYXllciB0eXBlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHBoeXNpY2FsIGxheWVyIGNhcGFiaWxpdGllcyBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICoqLwordTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCXU4IGNvbXBfY29kZXNfMTBnID0gMDsKKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKwkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCisJCXBoeXNpY2FsX2xheWVyID0gKElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfS1g0IHwKKwkJICAgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1gpOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCWh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisKKwkJc3dpdGNoIChody0+cGh5LnNmcF90eXBlKSB7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3U6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTE6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1NGUF9QTFVTX0NVOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfc3I6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfU1I7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9zZnBfdHlwZV9scjoKKwkJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9MUjsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMToKKwkJCWh3LT5waHkub3BzLnJlYWRfaTJjX2VlcHJvbShodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9TRkZfMTBHQkVfQ09NUF9DT0RFUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcF9jb2Rlc18xMGcpOworCQkJaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCXBoeXNpY2FsX2xheWVyID0KKwkJCQkgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9TUjsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCXBoeXNpY2FsX2xheWVyID0KKwkJCQkgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9MUjsKKwkJCWVsc2UKKwkJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCWRlZmF1bHQ6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiBwaHlzaWNhbF9sYXllcjsKK30KKworLyoqCisgKiAgaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OSAtIEVuYWJsZSB0aGUgUnggRE1BIHVuaXQgb24gODI1OTkKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHJlZ3ZhbDogcmVnaXN0ZXIgdmFsdWUgdG8gd3JpdGUgdG8gUlhDVFJMCisgKgorICogIEVuYWJsZXMgdGhlIFJ4IERNQSB1bml0IGZvciA4MjU5OQorICoqLworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3sKKyNkZWZpbmUgSVhHQkVfTUFYX1NFQ1JYX1BPTEwgMzAKKwlpbnQgaTsKKwlpbnQgc2VjcnhyZWc7CisKKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIDgyNTk5IHNpbGljb24gZXJyYXRhIHdoZW4gZW5hYmxpbmcgdGhlIFJ4IGRhdGFwYXRoLgorCSAqIElmIHRyYWZmaWMgaXMgaW5jb21pbmcgYmVmb3JlIHdlIGVuYWJsZSB0aGUgUnggdW5pdCwgaXQgY291bGQgaGFuZworCSAqIHRoZSBSeCBETUEgdW5pdC4gIFRoZXJlZm9yZSwgbWFrZSBzdXJlIHRoZSBzZWN1cml0eSBlbmdpbmUgaXMKKwkgKiBjb21wbGV0ZWx5IGRpc2FibGVkIHByaW9yIHRvIGVuYWJsaW5nIHRoZSBSeCB1bml0LgorCSAqLworCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCk7CisJc2VjcnhyZWcgfD0gSVhHQkVfU0VDUlhDVFJMX1JYX0RJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCwgc2VjcnhyZWcpOworCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfU0VDUlhfUE9MTDsgaSsrKSB7CisJCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYU1RBVCk7CisJCWlmIChzZWNyeHJlZyAmIElYR0JFX1NFQ1JYU1RBVF9TRUNSWF9SRFkpCisJCQlicmVhazsKKwkJZWxzZQorCQkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiBGb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5ICovCisJaWYgKGkgPj0gSVhHQkVfTUFYX1NFQ1JYX1BPTEwpCisJCWh3X2RiZyhodywgIlJ4IHVuaXQgYmVpbmcgZW5hYmxlZCBiZWZvcmUgc2VjdXJpdHkgIgorCQkgICAgICAgInBhdGggZnVsbHkgZGlzYWJsZWQuICBDb250aW51aW5nIHdpdGggaW5pdC5cbiIpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJlZ3ZhbCk7CisJc2VjcnhyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU0VDUlhDVFJMKTsKKwlzZWNyeHJlZyAmPSB+SVhHQkVfU0VDUlhDVFJMX1JYX0RJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCwgc2VjcnhyZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIG1hY19vcHNfODI1OTkgPSB7CisJLmluaXRfaHcgICAgICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9od19nZW5lcmljLAorCS5yZXNldF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3Jlc2V0X2h3XzgyNTk5LAorCS5zdGFydF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3N0YXJ0X2h3XzgyNTk5LAorCS5jbGVhcl9od19jbnRycyAgICAgICAgID0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCisJLmdldF9tZWRpYV90eXBlICAgICAgICAgPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTksCisJLmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIgPSAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OSwKKwkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5LAorCS5nZXRfbWFjX2FkZHIgICAgICAgICAgID0gJml4Z2JlX2dldF9tYWNfYWRkcl9nZW5lcmljLAorCS5zdG9wX2FkYXB0ZXIgICAgICAgICAgID0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAorCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLAorCS5zZXRfbGFuX2lkICAgICAgICAgICAgID0gJml4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llLAorCS5yZWFkX2FuYWxvZ19yZWc4ICAgICAgID0gJml4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTksCisJLndyaXRlX2FuYWxvZ19yZWc4ICAgICAgPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTksCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTksCisJLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTksCisJLmNoZWNrX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTksCisJLmdldF9saW5rX2NhcGFiaWxpdGllcyAgPSAmaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5LAorCS5sZWRfb24gICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLAorCS5sZWRfb2ZmICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vZmZfZ2VuZXJpYywKKwkuYmxpbmtfbGVkX3N0YXJ0ICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTksCisJLmJsaW5rX2xlZF9zdG9wICAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTksCisJLnNldF9yYXIgICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3Jhcl9nZW5lcmljLAorCS5jbGVhcl9yYXIgICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3Jhcl9nZW5lcmljLAorCS5zZXRfdm1kcSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92bWRxXzgyNTk5LAorCS5jbGVhcl92bWRxICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZtZHFfODI1OTksCisJLmluaXRfcnhfYWRkcnMgICAgICAgICAgPSAmaXhnYmVfaW5pdF9yeF9hZGRyc19nZW5lcmljLAorCS51cGRhdGVfdWNfYWRkcl9saXN0ICAgID0gJml4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYywKKwkudXBkYXRlX21jX2FkZHJfbGlzdCAgICA9ICZpeGdiZV91cGRhdGVfbWNfYWRkcl9saXN0X2dlbmVyaWMsCisJLmVuYWJsZV9tYyAgICAgICAgICAgICAgPSAmaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMsCisJLmRpc2FibGVfbWMgICAgICAgICAgICAgPSAmaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljLAorCS5jbGVhcl92ZnRhICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZmdGFfODI1OTksCisJLnNldF92ZnRhICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3ZmdGFfODI1OTksCisJLnNldHVwX2ZjICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYywKKwkuaW5pdF91dGFfdGFibGVzICAgICAgICA9ICZpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTksCisJLnNldHVwX3NmcCAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfc2ZwX21vZHVsZXNfODI1OTksCit9OworCitzdGF0aWMgc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIGVlcHJvbV9vcHNfODI1OTkgPSB7CisJLmluaXRfcGFyYW1zICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX2dlbmVyaWMsCisJLnJlYWQgICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYywKKwkud3JpdGUgICAgICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYywKKwkudmFsaWRhdGVfY2hlY2tzdW0gICAgICA9ICZpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW1fZ2VuZXJpYywKKwkudXBkYXRlX2NoZWNrc3VtICAgICAgICA9ICZpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3RydWN0IGl4Z2JlX3BoeV9vcGVyYXRpb25zIHBoeV9vcHNfODI1OTkgPSB7CisJLmlkZW50aWZ5ICAgICAgICAgICAgICAgPSAmaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5LAorCS5pZGVudGlmeV9zZnAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYywKKwkucmVzZXQgICAgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9waHlfZ2VuZXJpYywKKwkucmVhZF9yZWcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZWFkX3BoeV9yZWdfZ2VuZXJpYywKKwkud3JpdGVfcmVnICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9waHlfcmVnX2dlbmVyaWMsCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfZ2VuZXJpYywKKwkuc2V0dXBfbGlua19zcGVlZCAgICAgICA9ICZpeGdiZV9zZXR1cF9waHlfbGlua19zcGVlZF9nZW5lcmljLAorCS5yZWFkX2kyY19ieXRlICAgICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYywKKwkud3JpdGVfaTJjX2J5dGUgICAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljLAorCS5yZWFkX2kyY19lZXByb20gICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljLAorCS53cml0ZV9pMmNfZWVwcm9tICAgICAgID0gJml4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYywKK307CisKK3N0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk5X2luZm8gPSB7CisJLm1hYyAgICAgICAgICAgICAgICAgICAgPSBpeGdiZV9tYWNfODI1OTlFQiwKKwkuZ2V0X2ludmFyaWFudHMgICAgICAgICA9ICZpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OSwKKwkubWFjX29wcyAgICAgICAgICAgICAgICA9ICZtYWNfb3BzXzgyNTk5LAorCS5lZXByb21fb3BzICAgICAgICAgICAgID0gJmVlcHJvbV9vcHNfODI1OTksCisJLnBoeV9vcHMgICAgICAgICAgICAgICAgPSAmcGh5X29wc184MjU5OSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IGY2N2M2ODQuLjhjZmQzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAorI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCiAKQEAgLTgwLDkgKzgxLDYgQEAKIAkvKiBDbGVhciB0aGUgVkxBTiBmaWx0ZXIgdGFibGUgKi8KIAlody0+bWFjLm9wcy5jbGVhcl92ZnRhKGh3KTsKIAotCS8qIFNldCB1cCBsaW5rICovCi0JaHctPm1hYy5vcHMuc2V0dXBfbGluayhodyk7Ci0KIAkvKiBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycyAqLwogCWh3LT5tYWMub3BzLmNsZWFyX2h3X2NudHJzKGh3KTsKIApAQCAtMjU0LDYgKzI1Miw4MSBAQAogfQogCiAvKioKKyAqICBpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYyAtIEdlbmVyaWMgc2V0IFBDSSBidXMgaW5mbworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB0aGUgUENJIGJ1cyBpbmZvIChzcGVlZCwgd2lkdGgsIHR5cGUpIHdpdGhpbiB0aGUgaXhnYmVfaHcgc3RydWN0dXJlCisgKiovCitzMzIgaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTE2IGxpbmtfc3RhdHVzOworCisJaHctPmJ1cy50eXBlID0gaXhnYmVfYnVzX3R5cGVfcGNpX2V4cHJlc3M7CisKKwkvKiBHZXQgdGhlIG5lZ290aWF0ZWQgbGluayB3aWR0aCBhbmQgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJX0xJTktfU1RBVFVTLAorCSAgICAgICAgICAgICAgICAgICAgICZsaW5rX3N0YXR1cyk7CisKKwlzd2l0Y2ggKGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfV0lEVEgpIHsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzE6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94MTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF8yOgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDI7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfV0lEVEhfNDoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0OworCQlicmVhazsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzg6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF91bmtub3duOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfU1BFRUQpIHsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDA6CisJCWh3LT5idXMuc3BlZWQgPSBpeGdiZV9idXNfc3BlZWRfMjUwMDsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19TUEVFRF81MDAwOgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkXzUwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3LT5idXMuc3BlZWQgPSBpeGdiZV9idXNfc3BlZWRfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorCisJbWFjLT5vcHMuc2V0X2xhbl9pZChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUgLSBTZXQgTEFOIGlkIGZvciBQQ0llIG11bHRpcGxlIHBvcnQgZGV2aWNlcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIERldGVybWluZXMgdGhlIExBTiBmdW5jdGlvbiBpZCBieSByZWFkaW5nIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzCisgKiAgYW5kIHN3YXBzIHRoZSBwb3J0IHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAqKi8KK3ZvaWQgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8gKmJ1cyA9ICZody0+YnVzOworCXUzMiByZWc7CisKKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU1RBVFVTKTsKKwlidXMtPmZ1bmMgPSAocmVnICYgSVhHQkVfU1RBVFVTX0xBTl9JRCkgPj4gSVhHQkVfU1RBVFVTX0xBTl9JRF9TSElGVDsKKwlidXMtPmxhbl9pZCA9IGJ1cy0+ZnVuYzsKKworCS8qIGNoZWNrIGZvciBhIHBvcnQgc3dhcCAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQUNUUFMpOworCWlmIChyZWcgJiBJWEdCRV9GQUNUUFNfTEZTKQorCQlidXMtPmZ1bmMgXj0gMHgxOworfQorCisvKioKICAqICBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyAtIEdlbmVyaWMgc3RvcCBUeC9SeCB1bml0cwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0zOTMsNiArNDY2LDczIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljIC0gV3JpdGVzIDE2IGJpdCB2YWx1ZSB0byBFRVBST00KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHdyaXR0ZW4gdG8KKyAqICBAZGF0YTogMTYgYml0IHdvcmQgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NCisgKgorICogIElmIGl4Z2JlX2VlcHJvbV91cGRhdGVfY2hlY2tzdW0gaXMgbm90IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLCB0aGUKKyAqICBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCisgKiovCitzMzIgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1OCB3cml0ZV9vcGNvZGUgPSBJWEdCRV9FRVBST01fV1JJVEVfT1BDT0RFX1NQSTsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUHJlcGFyZSB0aGUgRUVQUk9NIGZvciB3cml0aW5nICAqLworCXN0YXR1cyA9IGl4Z2JlX2FjcXVpcmVfZWVwcm9tKGh3KTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoaXhnYmVfcmVhZHlfZWVwcm9tKGh3KSAhPSAwKSB7CisJCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CisJCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOworCQl9CisJfQorCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQkvKiAgU2VuZCB0aGUgV1JJVEUgRU5BQkxFIGNvbW1hbmQgKDggYml0IG9wY29kZSApICAqLworCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIElYR0JFX0VFUFJPTV9XUkVOX09QQ09ERV9TUEksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOworCisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQkvKgorCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQorCQkgKiBvcGNvZGUKKwkJICovCisJCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQorCQkJd3JpdGVfb3Bjb2RlIHw9IElYR0JFX0VFUFJPTV9BOF9PUENPREVfU1BJOworCisJCS8qIFNlbmQgdGhlIFdyaXRlIGNvbW1hbmQgKDgtYml0IG9wY29kZSArIGFkZHIpICovCisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgd3JpdGVfb3Bjb2RlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVQUk9NX09QQ09ERV9CSVRTKTsKKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCAodTE2KShvZmZzZXQqMiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+ZWVwcm9tLmFkZHJlc3NfYml0cyk7CisKKwkJLyogU2VuZCB0aGUgZGF0YSAqLworCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoZGF0YSA8PCA4KTsKKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBkYXRhLCAxNik7CisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQltc2xlZXAoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkpOworCQkvKiBEb25lIHdpdGggd3JpdGluZyAtIHJlbGVhc2UgdGhlIEVFUFJPTSAqLworCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiAgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgYml0LWJhbmcKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKQEAgLTUyMSw3ICs2NjEsNyBAQAogc3RhdGljIHMzMiBpeGdiZV9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiBzdGF0dXMgPSAwOwotCXUzMiBlZWM7CisJdTMyIGVlYyA9IDA7CiAJdTMyIGk7CiAKIAlpZiAoaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSAhPSAwKQpAQCAtMTQ5MCw2ICsxNjMwLDMyNiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mY19lbmFibGUgLSBFbmFibGUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBwYWNrZXRidWZfbnVtOiBwYWNrZXQgYnVmZmVyIG51bWJlciAoMC03KQorICoKKyAqICBFbmFibGUgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqKi8KK3MzMiBpeGdiZV9mY19lbmFibGUoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBtZmxjbl9yZWc7CisJdTMyIGZjY2ZnX3JlZzsKKwl1MzIgcmVnOworCisJbWZsY25fcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwltZmxjbl9yZWcgJj0gfihJWEdCRV9NRkxDTl9SRkNFIHwgSVhHQkVfTUZMQ05fUlBGQ0UpOworCisJZmNjZmdfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDQ0ZHKTsKKwlmY2NmZ19yZWcgJj0gfihJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCB8IElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFkpOworCisJLyoKKwkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIGZjLmN1cnJlbnRfbW9kZSBhcmU6CisJICogMDogRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAxOiBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLAorCSAqICAgIGJ1dCBub3Qgc2VuZCBwYXVzZSBmcmFtZXMpLgorCSAqIDI6IFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIDQ6IFByaW9yaXR5IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCW1mbGNuX3JlZyB8PSBJWEdCRV9NRkxDTl9SRkNFOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCWZjY2ZnX3JlZyB8PSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWDsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19mdWxsOgorCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLworCQltZmxjbl9yZWcgfD0gSVhHQkVfTUZMQ05fUkZDRTsKKwkJZmNjZmdfcmVnIHw9IElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfRENCCisJY2FzZSBpeGdiZV9mY19wZmM6CisJCWdvdG8gb3V0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCBtZmxjbl9yZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNDRkcsIGZjY2ZnX3JlZyk7CisKKwkvKiBTZXQgdXAgYW5kIGVuYWJsZSBSeCBoaWdoL2xvdyB3YXRlciBtYXJrIHRocmVzaG9sZHMsIGVuYWJsZSBYT04uICovCisJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgJiBpeGdiZV9mY190eF9wYXVzZSkgeworCQlpZiAoaHctPmZjLnNlbmRfeG9uKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAoaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkUpKTsKKwkJZWxzZQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICBody0+ZmMubG93X3dhdGVyKTsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KHBhY2tldGJ1Zl9udW0pLAorCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyIHwgSVhHQkVfRkNSVEhfRkNFTikpOworCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0pKTsKKwlpZiAoKHBhY2tldGJ1Zl9udW0gJiAxKSA9PSAwKQorCQlyZWcgPSAocmVnICYgMHhGRkZGMDAwMCkgfCBody0+ZmMucGF1c2VfdGltZTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiAweDAwMDBGRkZGKSB8IChody0+ZmMucGF1c2VfdGltZSA8PCAxNik7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtIC8gMiksIHJlZyk7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2ZjX2F1dG9uZWcgLSBDb25maWd1cmUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBOZWdvdGlhdGVzIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMgd2l0aCBsaW5rIHBhcnRuZXIgdXNpbmcgYXV0b25lZyBhbmQKKyAqICBhcHBsaWVzIHRoZSByZXN1bHRzLgorICoqLworczMyIGl4Z2JlX2ZjX2F1dG9uZWcoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGksIHJlZywgcGNzX2FuYWR2X3JlZywgcGNzX2xwYWJfcmVnOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5BKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6ICBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAorCSAqIDE6ICBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLAorCSAqICAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQKKwkgKiAgICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogIEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiA0OiAgUHJpb3JpdHkgRmxvdyBDb250cm9sIGlzIGVuYWJsZWQuCisJICogb3RoZXI6IEludmFsaWQuCisJICovCisJc3dpdGNoIChody0+ZmMuY3VycmVudF9tb2RlKSB7CisJY2FzZSBpeGdiZV9mY19ub25lOgorCQkvKiBGbG93IGNvbnRyb2wgY29tcGxldGVseSBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4gKi8KKwkJcmVnICY9IH4oSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFIHwgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19yeF9wYXVzZToKKwkJLyoKKwkJICogUnggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQgYW5kIFR4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4gU2luY2UgdGhlcmUgcmVhbGx5CisJCSAqIGlzbid0IGEgd2F5IHRvIGFkdmVydGlzZSB0aGF0IHdlIGFyZSBjYXBhYmxlIG9mIFJYCisJCSAqIFBhdXNlIE9OTFksIHdlIHdpbGwgYWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBib3RoCisJCSAqIHN5bW1ldHJpYyBhbmQgYXN5bW1ldHJpYyBSeCBQQVVTRS4gIExhdGVyLCB3ZSB3aWxsCisJCSAqIGRpc2FibGUgdGhlIGFkYXB0ZXIncyBhYmlsaXR5IHRvIHNlbmQgUEFVU0UgZnJhbWVzLgorCQkgKi8KKwkJcmVnIHw9IChJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgfCBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCXJlZyB8PSAoSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJcmVnICY9IH4oSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19mdWxsOgorCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLworCQlyZWcgfD0gKElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSB8IElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19EQ0IKKwljYXNlIGl4Z2JlX2ZjX3BmYzoKKwkJZ290byBvdXQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CisJCXJldF92YWwgPSAtSVhHQkVfRVJSX0NPTkZJRzsKKwkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUENTMUdBTkEsIHJlZyk7CisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHTENUTCk7CisKKwkvKiBTZXQgUENTIHJlZ2lzdGVyIGZvciBhdXRvbmVnICovCisJLyogRW5hYmxlIGFuZCByZXN0YXJ0IGF1dG9uZWcgKi8KKwlyZWcgfD0gSVhHQkVfUENTMUdMQ1RMX0FOX0VOQUJMRSB8IElYR0JFX1BDUzFHTENUTF9BTl9SRVNUQVJUOworCisJLyogRGlzYWJsZSBBTiB0aW1lb3V0ICovCisJaWYgKGh3LT5mYy5zdHJpY3RfaWVlZSkKKwkJcmVnICY9IH5JWEdCRV9QQ1MxR0xDVExfQU5fMUdfVElNRU9VVF9FTjsKKworCWh3X2RiZyhodywgIkNvbmZpZ3VyaW5nIEF1dG9uZWc7IFBDU19MQ1RMID0gMHglMDhYXG4iLCByZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUENTMUdMQ1RMLCByZWcpOworCisJLyogU2VlIGlmIGF1dG9uZWdvdGlhdGlvbiBoYXMgc3VjY2VlZGVkICovCisJaHctPm1hYy5hdXRvbmVnX3N1Y2NlZWRlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEZJQkVSX0xJTktfVVBfTElNSVQ7IGkrKykgeworCQltc2xlZXAoMTApOworCQlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUENTMUdMU1RBKTsKKwkJaWYgKChyZWcgJiAoSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgfAorCQkgICAgIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSkpID09CisJCSAgICAoSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgfAorCQkgICAgIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSkpIHsKKwkJCWlmICghKHJlZyAmIElYR0JFX1BDUzFHTFNUQV9BTl9USU1FRF9PVVQpKQorCQkJCWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQpIHsKKwkJLyogQXV0b25lZyBmYWlsZWQgdG8gYWNoaWV2ZSBhIGxpbmssIHNvIHdlIHR1cm4gZmMgb2ZmICovCisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19ub25lOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBOT05FLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUmVhZCB0aGUgQU4gYWR2ZXJ0aXNlbWVudCBhbmQgTFAgYWJpbGl0eSByZWdpc3RlcnMgYW5kIHJlc29sdmUKKwkgKiBsb2NhbCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgYWNjb3JkaW5nbHkKKwkgKi8KKwlwY3NfYW5hZHZfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5BKTsKKwlwY3NfbHBhYl9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUENTMUdBTkxQKTsKKwlpZiAoKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCShwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpKSB7CisJCS8qCisJCSAqIE5vdyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIHNlbGVjdGVkIFJ4IE9OTFkKKwkJICogb2YgcGF1c2UgZnJhbWVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBoYWQgdG8gYWR2ZXJ0aXNlCisJCSAqIEZVTEwgZmxvdyBjb250cm9sIGJlY2F1c2Ugd2UgY291bGQgbm90IGFkdmVydGlzZSBSWAorCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KKwkJICogdHVybiBPRkYgdGhlIFRSQU5TTUlTU0lPTiBvZiBQQVVTRSBmcmFtZXMuCisJCSAqLworCQlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwpIHsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19mdWxsOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gRlVMTC5cbiIpOworCQl9IGVsc2UgeworCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAoIShwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkgICAocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3R4X3BhdXNlOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBUWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOworCX0gZWxzZSBpZiAoKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKSAmJgorCQkgICAhKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOworCX0gZWxzZSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19ub25lOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBOT05FLlxuIik7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMgLSBTZXQgdXAgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIHVwIGZsb3cgY29udHJvbC4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9mY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwlpeGdiZV9saW5rX3NwZWVkIHNwZWVkOworCWJvb2wgbGlua191cDsKKworI2lmZGVmIENPTkZJR19EQ0IKKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3BmYykgeworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCQlnb3RvIG91dDsKKwl9CisKKyNlbmRpZgorCS8qIFZhbGlkYXRlIHRoZSBwYWNrZXRidWYgY29uZmlndXJhdGlvbiAqLworCWlmIChwYWNrZXRidWZfbnVtIDwgMCB8fCBwYWNrZXRidWZfbnVtID4gNykgeworCQlod19kYmcoaHcsICJJbnZhbGlkIHBhY2tldCBidWZmZXIgbnVtYmVyIFslZF0sIGV4cGVjdGVkIHJhbmdlICIKKwkJICAgICAgICJpcyAwLTdcbiIsIHBhY2tldGJ1Zl9udW0pOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uLiAgWmVybyB3YXRlciBtYXJrcyBhcmUgaW52YWxpZAorCSAqIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGp1c3QgYmxhc3Qgb3V0IGZjIHBhY2tldHMuCisJICovCisJaWYgKCFody0+ZmMubG93X3dhdGVyIHx8ICFody0+ZmMuaGlnaF93YXRlciB8fCAhaHctPmZjLnBhdXNlX3RpbWUpIHsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCB3YXRlciBtYXJrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIG1vZGUuICBTdHJpY3QgSUVFRSBtb2RlIGRvZXMgbm90IGFsbG93CisJICogaXhnYmVfZmNfcnhfcGF1c2UgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHRlc3RpbmcgYW5vbWFsaWVzLgorCSAqLworCWlmIChody0+ZmMuc3RyaWN0X2llZWUgJiYgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJCWh3X2RiZyhodywgIml4Z2JlX2ZjX3J4X3BhdXNlIG5vdCB2YWxpZCBpbiBzdHJpY3QgIgorCQkgICAgICAgIklFRUUgbW9kZVxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIDEwZ2lnIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgRUVQUk9NIHRvIGRldGVybWluZSB0aGUKKwkgKiBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBmdWxsLgorCSAqLworCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKKworCS8qCisJICogU2F2ZSBvZmYgdGhlIHJlcXVlc3RlZCBmbG93IGNvbnRyb2wgbW9kZSBmb3IgdXNlIGxhdGVyLiAgRGVwZW5kaW5nCisJICogb24gdGhlIGxpbmsgcGFydG5lcidzIGNhcGFiaWxpdGllcywgd2UgbWF5IG9yIG1heSBub3QgdXNlIHRoaXMgbW9kZS4KKwkgKi8KKwlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGF1dG9uZWcgb3Igbm90LiAqLworCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZzcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKKwkJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2F1dG9uZWcoaHcpOworCisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2VuYWJsZShodywgcGFja2V0YnVmX251bSk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgaXhnYmVfZGlzYWJsZV9wY2llX21hc3RlciAtIERpc2FibGUgUENJLWV4cHJlc3MgbWFzdGVyIGFjY2VzcwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0xNTk3LDMgKzIwNTcsMTYgQEAKIAlpeGdiZV9yZWxlYXNlX2VlcHJvbV9zZW1hcGhvcmUoaHcpOwogfQogCisvKioKKyAqICBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMgLSBFbmFibGUgdGhlIFJ4IERNQSB1bml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWd2YWw6IHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlIHRvIFJYQ1RSTAorICoKKyAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdAorICoqLworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKQoreworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWd2YWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDE5MmY4ZDAuLjdlOTRkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzcsMTIgKzM3LDE0IEBACiBzMzIgaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICpwYmFfbnVtKTsKIHMzMiBpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpOwogczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogczMyIGl4Z2JlX2xlZF9vbl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiBzMzIgaXhnYmVfbGVkX29mZl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiAKIHMzMiBpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSk7CiBzMzIgaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CkBAIC02MSw2ICs2MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgYWRkcl9jb3VudCwgaXhnYmVfbWNfYWRkcl9pdHIgZnVuYyk7CiBzMzIgaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKTsKK3MzMiBpeGdiZV9zZXR1cF9mY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKTsKK3MzMiBpeGdiZV9mY19lbmFibGUoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2t0ZXRidWZfbnVtKTsKK3MzMiBpeGdiZV9mY19hdXRvbmVnKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogCiBzMzIgaXhnYmVfdmFsaWRhdGVfbWFjX2FkZHIodTggKm1hY19hZGRyKTsKIHMzMiBpeGdiZV9hY3F1aXJlX3N3Zndfc3luYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWFzayk7CkBAIC03Miw2ICs3OCwxMyBAQAogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFRyhhLCByZWcsIHZhbHVlKSB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKIAorI2lmbmRlZiB3cml0ZXEKKyNkZWZpbmUgd3JpdGVxKHZhbCwgYWRkcikgd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsgXAorICAgIHdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7CisjZW5kaWYKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUc2NChhLCByZWcsIHZhbHVlKSB3cml0ZXEoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKKwogI2RlZmluZSBJWEdCRV9SRUFEX1JFRyhhLCByZWcpIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpKQogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpIChcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCmluZGV4IGUyZTI4YWMuLmExNTYyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKICNpbmNsdWRlICJpeGdiZV9kY2IuaCIKICNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTguaCIKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKIAogLyoqCiAgKiBpeGdiZV9kY2JfY29uZmlnIC0gU3RydWN0IGNvbnRhaW5pbmcgRENCIHNldHRpbmdzLgpAQCAtMjE1LDYgKzIxNiw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OChodywgc3RhdHMsIHRjX2NvdW50KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkoaHcsIHN0YXRzLCB0Y19jb3VudCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjMyLDYgKzIzNSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTgoaHcsIHN0YXRzLCB0Y19jb3VudCk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShodywgc3RhdHMsIHRjX2NvdW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDgsNiArMjUzLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjQsNiArMjcxLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjgwLDYgKzI4OSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5Niw2ICszMDcsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTEsNiArMzI0LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk4KGh3KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoaHcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyNyw2ICszNDIsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9od19jb25maWdfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAppbmRleCA3NWY2ZWZlLi42NGE5ZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTc1LDYgKzc1LDI2IEBACiAJcHJpb19saW5rCiB9OwogCisvKiBEQ0IgY2FwYWJpbGl0eSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9EQ0JfUEdfU1VQUE9SVCAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9EQ0JfUEZDX1NVUFBPUlQgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9EQ0JfQkNOX1NVUFBPUlQgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9EQ0JfVVAyVENfU1VQUE9SVCAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJWEdCRV9EQ0JfR1NQX1NVUFBPUlQgICAgICAgMHgwMDAwMDAxMAorCisjZGVmaW5lIElYR0JFX0RDQl84X1RDX1NVUFBPUlQgICAgICAweDgwCisKK3N0cnVjdCBkY2Jfc3VwcG9ydCB7CisJLyogRENCIGNhcGFiaWxpdGllcyAqLworCXUzMiBjYXBhYmlsaXRpZXM7CisKKwkvKiBFYWNoIGJpdCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIFRDcyBjb25maWd1cmFibGUgaW4gdGhlIGh3LgorCSAqIElmIDggdHJhZmZpYyBjbGFzc2VzIGNhbiBiZSBjb25maWd1cmVkLCB0aGUgdmFsdWUgaXMgMHg4MC4KKwkgKi8KKwl1OCAgdHJhZmZpY19jbGFzc2VzOworCXU4ICBwZmNfdHJhZmZpY19jbGFzc2VzOworfTsKKwogLyogVHJhZmZpYyBjbGFzcyBiYW5kd2lkdGggYWxsb2NhdGlvbiBwZXIgZGlyZWN0aW9uICovCiBzdHJ1Y3QgdGNfYndfYWxsb2MgewogCXU4IGJ3Z19pZDsJCSAgLyogQmFuZHdpZHRoIEdyb3VwIChCV0cpIElEICovCkBAIC0xMDgsMzggKzEyOCwxOCBAQAogCXBiYV84MF80OCAgICAgIC8qIFBCQVswLTNdIGVhY2ggdXNlIDgwS0IsIFBCQVs0LTddIGVhY2ggdXNlIDQ4S0IgKi8KIH07CiAKLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBtYW55IHZhbHVlcyBlbmNvZGVkIGFzIGZpeGVkLXBvaW50Ci0gKiBudW1iZXJzLCBtZWFuaW5nIHRoYXQgc29tZSBvZiBiaXRzIGFyZSBkZWRpY2F0ZWQgdG8gdGhlCi0gKiBtYWduaXR1ZGUgYW5kIG90aGVycyB0byB0aGUgZnJhY3Rpb24gcGFydC4gSW4gdGhlIGNvbW1lbnRzCi0gKiB0aGlzIGlzIHNob3duIGFzIGY9biwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGJpdHMuCi0gKiBUaGVzZSBmcmFjdGlvbiBiaXRzIGFyZSBhbHdheXMgdGhlIGxvdy1vcmRlciBiaXRzLiBUaGUgc2l6ZQotICogb2YgdGhlIG1hZ25pdHVkZSBpcyBub3Qgc3BlY2lmaWVkLgotICovCi1zdHJ1Y3QgYmNuX2NvbmZpZyB7Ci0JdTMyIHJwX2FkbWluX21vZGVbTUFYX1RSQUZGSUNfQ0xBU1NdOyAvKiBCQ04gZW5hYmxlZCwgcGVyIFRDICovCi0JdTMyIGJjbmFfb3B0aW9uWzJdOyAvKiBCQ05BIFBvcnQgKyBNQUMgQWRkciAqLwotCXUzMiBycF93OyAgICAgICAgLyogRGVyaXZhdGl2ZSBXZWlnaHQsIGY9MyAqLwotCXUzMiBycF9naTsgICAgICAgLyogSW5jcmVhc2UgR2FpbiwgZj0xMiAqLwotCXUzMiBycF9nZDsgICAgICAgLyogRGVjcmVhc2UgR2FpbiwgZj0xMiAqLwotCXUzMiBycF9ydTsgICAgICAgLyogUmF0ZSBVbml0ICovCi0JdTMyIHJwX2FscGhhOyAgICAvKiBNYXggRGVjcmVhc2UgRmFjdG9yLCBmPTEyICovCi0JdTMyIHJwX2JldGE7ICAgICAvKiBNYXggSW5jcmVhc2UgRmFjdG9yLCBmPTEyICovCi0JdTMyIHJwX3JpOyAgICAgICAvKiBJbml0aWFsIFJhdGUgKi8KLQl1MzIgcnBfdGQ7ICAgICAgIC8qIERyaWZ0IEludGVydmFsIFRpbWVyICovCi0JdTMyIHJwX3JkOyAgICAgICAvKiBEcmlmdCBJbmNyZWFzZSAqLwotCXUzMiBycF90bWF4OyAgICAgLyogU2V2ZXJlIENvbmdlc3Rpb24gQmFja29mZiBUaW1lciBSYW5nZSAqLwotCXUzMiBycF9ybWluOyAgICAgLyogU2V2ZXJlIENvbmdlc3Rpb24gUmVzdGFydCBSYXRlICovCi0JdTMyIHJwX3dydHQ7ICAgICAvKiBSVFQgTW92aW5nIEF2ZXJhZ2UgV2VpZ2h0ICovCitzdHJ1Y3QgZGNiX251bV90Y3MgeworCXU4IHBnX3RjczsKKwl1OCBwZmNfdGNzOwogfTsKIAogc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgewotCXN0cnVjdCBiY25fY29uZmlnIGJjbjsKLQorCXN0cnVjdCBkY2Jfc3VwcG9ydCBzdXBwb3J0OworCXN0cnVjdCBkY2JfbnVtX3RjcyBudW1fdGNzOwogCXN0cnVjdCB0Y19jb25maWd1cmF0aW9uIHRjX2NvbmZpZ1tNQVhfVFJBRkZJQ19DTEFTU107CiAJdTggICAgIGJ3X3BlcmNlbnRhZ2VbMl1bTUFYX0JXX0dST1VQXTsgLyogT25lIGVhY2ggZm9yIFR4L1J4ICovCi0KLQlib29sICByb3VuZF9yb2Jpbl9lbmFibGU7CisJYm9vbCAgIHBmY19tb2RlX2VuYWJsZTsKKwlib29sICAgcm91bmRfcm9iaW5fZW5hYmxlOwogCiAJZW51bSBkY2JfcnhfcGJhX2NmZyByeF9wYmFfY2ZnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCmluZGV4IDJjMDQ2YjAuLjYyMjA2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjk4LDcgKzI5OCw2IEBACiAJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZyAmPSB+SVhHQkVfUk1DU19URkNFXzgwMl8zWDsKIAkvKiBjb3JyZWN0IHRoZSByZXBvcnRpbmcgb2Ygb3VyIGZsb3cgY29udHJvbCBzdGF0dXMgKi8KLQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX25vbmU7CiAJcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWTsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JNQ1MsIHJlZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKaW5kZXggMWU2YTMxMy4uZWJiZTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYwpAQCAtMCwwICsxLDQ2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIml4Z2JlLmgiCisjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYi5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgorCisvKioKKyAqIGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkgLSBSZXR1cm5zIHN0YXR1cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKyAqIEB0Y19jb3VudDogIE51bWJlciBvZiBlbGVtZW50cyBpbiBid2dfYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0dXMgZGF0YSBmb3IgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzc2VzIGluIHVzZS4KKyAqLworczMyIGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB0Y19jb3VudCkKK3sKKwlpbnQgdGM7CisKKwlpZiAodGNfY291bnQgPiBNQVhfVFJBRkZJQ19DTEFTUykKKwkJcmV0dXJuIERDQl9FUlJfUEFSQU07CisJLyogU3RhdGlzdGljcyBwZXJ0YWluaW5nIHRvIGVhY2ggdHJhZmZpYyBjbGFzcyAqLworCWZvciAodGMgPSAwOyB0YyA8IHRjX2NvdW50OyB0YysrKSB7CisJCS8qIFRyYW5zbWl0dGVkIFBhY2tldHMgKi8KKwkJc3RhdHMtPnFwdGNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKHRjKSk7CisJCS8qIFRyYW5zbWl0dGVkIEJ5dGVzICovCisJCXN0YXRzLT5xYnRjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyh0YykpOworCQkvKiBSZWNlaXZlZCBQYWNrZXRzICovCisJCXN0YXRzLT5xcHJjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSQyh0YykpOworCQkvKiBSZWNlaXZlZCBCeXRlcyAqLworCQlzdGF0cy0+cWJyY1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCUkModGMpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OSAtIFJldHVybiBDQkZDIHN0YXR1cyBkYXRhCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKyAqIEB0Y19jb3VudDogIE51bWJlciBvZiBlbGVtZW50cyBpbiBid2dfYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBDQkZDIHN0YXR1cyBkYXRhIGZvciBlYWNoIG9mIHRoZSBUcmFmZmljIENsYXNzZXMuCisgKi8KK3MzMiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpCit7CisJaW50IHRjOworCisJaWYgKHRjX2NvdW50ID4gTUFYX1RSQUZGSUNfQ0xBU1MpCisJCXJldHVybiBEQ0JfRVJSX1BBUkFNOworCWZvciAodGMgPSAwOyB0YyA8IHRjX2NvdW50OyB0YysrKSB7CisJCS8qIFByaW9yaXR5IFhPRkYgVHJhbnNtaXR0ZWQgKi8KKwkJc3RhdHMtPnB4b2ZmdHhjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPRkZUWEModGMpKTsKKwkJLyogUHJpb3JpdHkgWE9GRiBSZWNlaXZlZCAqLworCQlzdGF0cy0+cHhvZmZyeGNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QWE9GRlJYQ05UKHRjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19wYWNrZXRfYnVmZmVyc184MjU5OSAtIENvbmZpZ3VyZSBEQ0IgcGFja2V0IGJ1ZmZlcnMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHBhY2tldCBidWZmZXJzIGZvciBEQ0IgbW9kZS4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgdmFsdWUgPSBJWEdCRV9SWFBCU0laRV82NEtCOworCXU4ICBpID0gMDsKKworCS8qIFNldHVwIFJ4IHBhY2tldCBidWZmZXIgc2l6ZXMgKi8KKwlzd2l0Y2ggKGRjYl9jb25maWctPnJ4X3BiYV9jZmcpIHsKKwljYXNlIHBiYV84MF80ODoKKwkJLyogU2V0dXAgdGhlIGZpcnN0IGZvdXIgYXQgODBLQiAqLworCQl2YWx1ZSA9IElYR0JFX1JYUEJTSVpFXzgwS0I7CisJCWZvciAoOyBpIDwgNDsgaSsrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgdmFsdWUpOworCQkvKiBTZXR1cCB0aGUgbGFzdCBmb3VyIGF0IDQ4S0IuLi5kb24ndCByZS1pbml0IGkgKi8KKwkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV80OEtCOworCQkvKiBGYWxsIFRocm91Z2ggKi8KKwljYXNlIHBiYV9lcXVhbDoKKwlkZWZhdWx0OgorCQlmb3IgKDsgaSA8IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsgaSsrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgdmFsdWUpOworCisJCS8qIFNldHVwIFR4IHBhY2tldCBidWZmZXIgc2l6ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsgaSsrKSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYUEJTSVpFKGkpLAorCQkJICAgICAgICAgICAgICAgIElYR0JFX1RYUEJTSVpFXzIwS0IpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCVEhSRVNIKGkpLAorCQkJICAgICAgICAgICAgICAgIElYR0JFX1RYUEJUSFJFU0hfRENCKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkgLSBDb25maWcgUnggRGF0YSBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBSeCBQYWNrZXQgQXJiaXRlciBhbmQgY3JlZGl0cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXN0cnVjdCB0Y19id19hbGxvYyAgICAqcDsKKwl1MzIgICAgcmVnICAgICAgICAgICA9IDA7CisJdTMyICAgIGNyZWRpdF9yZWZpbGwgPSAwOworCXUzMiAgICBjcmVkaXRfbWF4ICAgID0gMDsKKwl1OCAgICAgaSAgICAgICAgICAgICA9IDA7CisKKwkvKiBEaXNhYmxlIHRoZSBhcmJpdGVyIGJlZm9yZSBjaGFuZ2luZyBwYXJhbWV0ZXJzICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIElYR0JFX1JUUlBDU19BUkJESVMpOworCisJLyogTWFwIGFsbCB0cmFmZmljIGNsYXNzZXMgdG8gdGhlaXIgVVAsIDEgdG8gMSAqLworCXJlZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCXJlZyB8PSAoaSA8PCAoaSAqIElYR0JFX1JUUlVQMlRDX1VQX1NISUZUKSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJVUDJUQywgcmVnKTsKKworCS8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzIGNyZWRpdHMgYW5kIHByaW9yaXR5ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJcCA9ICZkY2JfY29uZmlnLT50Y19jb25maWdbaV0ucGF0aFtEQ0JfUlhfQ09ORklHXTsKKworCQljcmVkaXRfcmVmaWxsID0gcC0+ZGF0YV9jcmVkaXRzX3JlZmlsbDsKKwkJY3JlZGl0X21heCAgICA9IHAtPmRhdGFfY3JlZGl0c19tYXg7CisJCXJlZyA9IGNyZWRpdF9yZWZpbGwgfCAoY3JlZGl0X21heCA8PCBJWEdCRV9SVFJQVDRDX01DTF9TSElGVCk7CisKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRSUFQ0Q19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2xpbmspCisJCQlyZWcgfD0gSVhHQkVfUlRSUFQ0Q19MU1A7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQVDRDKGkpLCByZWcpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIFJ4IHBhY2tldCBwbGFuZSAocmVjeWNsZSBtb2RlOyBXU1ApIGFuZAorCSAqIGVuYWJsZSBhcmJpdGVyCisJICovCisJcmVnID0gSVhHQkVfUlRSUENTX1JSTSB8IElYR0JFX1JUUlBDU19SQUM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OSAtIENvbmZpZyBUeCBEZXNjLiBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBUeCBEZXNjcmlwdG9yIEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJc3RydWN0IHRjX2J3X2FsbG9jICpwOworCXUzMiAgICByZWcsIG1heF9jcmVkaXRzOworCXU4ICAgICBpOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCBJWEdCRV9SVFREQ1NfQVJCRElTKTsKKworCS8qIENsZWFyIHRoZSBwZXItVHggcXVldWUgY3JlZGl0czsgd2UgdXNlIHBlci1UQyBpbnN0ZWFkICovCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIGkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERUMUMsIDApOworCX0KKworCS8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzIGNyZWRpdHMgYW5kIHByaW9yaXR5ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJcCA9ICZkY2JfY29uZmlnLT50Y19jb25maWdbaV0ucGF0aFtEQ0JfVFhfQ09ORklHXTsKKwkJbWF4X2NyZWRpdHMgPSBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGVzY19jcmVkaXRzX21heDsKKwkJcmVnID0gbWF4X2NyZWRpdHMgPDwgSVhHQkVfUlRURFQyQ19NQ0xfU0hJRlQ7CisJCXJlZyB8PSBwLT5kYXRhX2NyZWRpdHNfcmVmaWxsOworCQlyZWcgfD0gKHUzMikocC0+YndnX2lkKSA8PCBJWEdCRV9SVFREVDJDX0JXR19TSElGVDsKKworCQlpZiAocC0+cHJpb190eXBlID09IHByaW9fZ3JvdXApCisJCQlyZWcgfD0gSVhHQkVfUlRURFQyQ19HU1A7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2xpbmspCisJCQlyZWcgfD0gSVhHQkVfUlRURFQyQ19MU1A7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREVDJDKGkpLCByZWcpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIFR4IGRlc2NyaXB0b3IgcGxhbmUgKHJlY3ljbGUgbW9kZTsgV1NQKSBhbmQKKwkgKiBlbmFibGUgYXJiaXRlcgorCSAqLworCXJlZyA9IElYR0JFX1JUVERDU19URFBBQyB8IElYR0JFX1JUVERDU19URFJNOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkgLSBDb25maWcgVHggRGF0YSBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBUeCBQYWNrZXQgQXJiaXRlciBhbmQgY3JlZGl0cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzdHJ1Y3QgdGNfYndfYWxsb2MgKnA7CisJdTMyIHJlZzsKKwl1OCBpOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUENTLCBJWEdCRV9SVFRQQ1NfQVJCRElTKTsKKworCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KKwlyZWcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQorCQlyZWcgfD0gKGkgPDwgKGkgKiBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUVVAyVEMsIHJlZyk7CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1RYX0NPTkZJR107CisJCXJlZyA9IHAtPmRhdGFfY3JlZGl0c19yZWZpbGw7CisJCXJlZyB8PSAodTMyKShwLT5kYXRhX2NyZWRpdHNfbWF4KSA8PCBJWEdCRV9SVFRQVDJDX01DTF9TSElGVDsKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRUUFQyQ19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2dyb3VwKQorCQkJcmVnIHw9IElYR0JFX1JUVFBUMkNfR1NQOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUVFBUMkNfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUFQyQyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBUeCBwYWNrZXQgcGxhbmUgKHJlY3ljbGUgbW9kZTsgU1A7IGFyYiBkZWxheSkgYW5kCisJICogZW5hYmxlIGFyYml0ZXIKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFRQQ1NfVFBQQUMgfCBJWEdCRV9SVFRQQ1NfVFBSTSB8CisJICAgICAgKElYR0JFX1JUVFBDU19BUkJEX0RDQiA8PCBJWEdCRV9SVFRQQ1NfQVJCRF9TSElGVCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRQQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OSAtIENvbmZpZ3VyZSBwcmlvcml0eSBmbG93IGNvbnRyb2wKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIFByaW9yaXR5IEZsb3cgQ29udHJvbCAoUEZDKSBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwl1MzIgaSwgcmVnOworCisJLyogSWYgUEZDIGlzIGRpc2FibGVkIGdsb2JhbGx5IHRoZW4gZmFsbCBiYWNrIHRvIExGQy4gKi8KKwlpZiAoIWRjYl9jb25maWctPnBmY19tb2RlX2VuYWJsZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJCWh3LT5tYWMub3BzLnNldHVwX2ZjKGh3LCBpKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ29uZmlndXJlIFBGQyBUeCB0aHJlc2hvbGRzIHBlciBUQyAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCS8qIENvbmZpZyBhbmQgcmVtZW1iZXIgVHggKi8KKwkJaWYgKGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX2Z1bGwgfHwKKwkJICAgIGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX3R4KSB7CisJCQlyZWcgPSBody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU47CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KGkpLCByZWcpOworCQkJcmVnID0gaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCByZWcpOworCQl9IGVsc2UgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShpKSwgMCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCAwKTsKKwkJfQorCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gaHctPmZjLnBhdXNlX3RpbWUgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCWZvciAoaSA9IDA7IGkgPCAoTUFYX1RSQUZGSUNfQ0xBU1MgLyAyKTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFRWKGkpLCByZWcpOworCisJLyogQ29uZmlndXJlIGZsb3cgY29udHJvbCByZWZyZXNoIHRocmVzaG9sZCB2YWx1ZSAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVFYsIGh3LT5mYy5wYXVzZV90aW1lIC8gMik7CisKKwkvKiBFbmFibGUgVHJhbnNtaXQgUEZDICovCisJcmVnID0gSVhHQkVfRkNDRkdfVEZDRV9QUklPUklUWTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDQ0ZHLCByZWcpOworCisJLyoKKwkgKiBFbmFibGUgUmVjZWl2ZSBQRkMKKwkgKiBXZSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KKwkgKiB3ZSBhcmUgaW4gUEZDIG1vZGUuCisJICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwlyZWcgJj0gfklYR0JFX01GTENOX1JGQ0U7CisJcmVnIHw9IElYR0JFX01GTENOX1JQRkNFOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUZMQ04sIHJlZyk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OSAtIENvbmZpZyB0cmFmZmljIGNsYXNzIHN0YXRpc3RpY3MKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgcXVldWUgc3RhdGlzdGljcyByZWdpc3RlcnMsIGFsbCBxdWV1ZXMgYmVsb25naW5nIHRvIHNhbWUgdHJhZmZpYworICogY2xhc3MgdXNlcyBhIHNpbmdsZSBzZXQgb2YgcXVldWUgc3RhdGlzdGljcyBjb3VudGVycy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcmVnID0gMDsKKwl1OCAgaSAgID0gMDsKKworCS8qCisJICogUmVjZWl2ZSBRdWV1ZXMgc3RhdHMgc2V0dGluZworCSAqIDMyIFJRU01SIHJlZ2lzdGVycywgZWFjaCBjb25maWd1cmluZyA0IHF1ZXVlcy4KKwkgKiBTZXQgYWxsIDE2IHF1ZXVlcyBvZiBlYWNoIFRDIHRvIHRoZSBzYW1lIHN0YXQKKwkgKiB3aXRoIFRDICduJyBnb2luZyB0byBzdGF0ICduJy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlyZWcgPSAweDAxMDEwMTAxICogKGkgLyA0KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SUVNNUihpKSwgcmVnKTsKKwl9CisJLyoKKwkgKiBUcmFuc21pdCBRdWV1ZXMgc3RhdHMgc2V0dGluZworCSAqIDMyIFRRU00gcmVnaXN0ZXJzLCBlYWNoIGNvbnRyb2xsaW5nIDQgcXVldWVzLgorCSAqIFNldCBhbGwgcXVldWVzIG9mIGVhY2ggVEMgdG8gdGhlIHNhbWUgc3RhdAorCSAqIHdpdGggVEMgJ24nIGdvaW5nIHRvIHN0YXQgJ24nLgorCSAqIFR4IHF1ZXVlcyBhcmUgYWxsb2NhdGVkIG5vbi11bmlmb3JtbHkgdG8gVENzOgorCSAqIDMyLCAzMiwgMTYsIDE2LCA4LCA4LCA4LCA4LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChpIDwgOCkKKwkJCXJlZyA9IDB4MDAwMDAwMDA7CisJCWVsc2UgaWYgKGkgPCAxNikKKwkJCXJlZyA9IDB4MDEwMTAxMDE7CisJCWVsc2UgaWYgKGkgPCAyMCkKKwkJCXJlZyA9IDB4MDIwMjAyMDI7CisJCWVsc2UgaWYgKGkgPCAyNCkKKwkJCXJlZyA9IDB4MDMwMzAzMDM7CisJCWVsc2UgaWYgKGkgPCAyNikKKwkJCXJlZyA9IDB4MDQwNDA0MDQ7CisJCWVsc2UgaWYgKGkgPCAyOCkKKwkJCXJlZyA9IDB4MDUwNTA1MDU7CisJCWVsc2UgaWYgKGkgPCAzMCkKKwkJCXJlZyA9IDB4MDYwNjA2MDY7CisJCWVsc2UKKwkJCXJlZyA9IDB4MDcwNzA3MDc7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFFTTShpKSwgcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnXzgyNTk5IC0gQ29uZmlndXJlIGdlbmVyYWwgRENCIHBhcmFtZXRlcnMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIGdlbmVyYWwgRENCIHBhcmFtZXRlcnMuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHJlZzsKKwl1MzIgcTsKKworCS8qIERpc2FibGUgdGhlIFR4IGRlc2MgYXJiaXRlciBzbyB0aGF0IE1UUUMgY2FuIGJlIGNoYW5nZWQgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKKwlyZWcgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcmVnKTsKKworCS8qIEVuYWJsZSBEQ0IgZm9yIFJ4IHdpdGggOCBUQ3MgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVJRQyk7CisJc3dpdGNoIChyZWcgJiBJWEdCRV9NUlFDX01SUUVfTUFTSykgeworCWNhc2UgMDoKKwljYXNlIElYR0JFX01SUUNfUlQ0VENFTjoKKwkJLyogUlNTIGRpc2FibGVkIGNhc2VzICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVDhUQ0VOOworCQlicmVhazsKKwljYXNlIElYR0JFX01SUUNfUlNTRU46CisJY2FzZSBJWEdCRV9NUlFDX1JUUlNTNFRDRU46CisJCS8qIFJTUyBlbmFibGVkIGNhc2VzICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVFJTUzhUQ0VOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCB2YWx1ZSwgYXNzdW1lIHN0YWxlIGRhdGEsIG92ZXJ3cml0ZSBubyBSU1MgKi8KKwkJcmVnID0gKHJlZyAmIH5JWEdCRV9NUlFDX01SUUVfTUFTSykgfCBJWEdCRV9NUlFDX1JUOFRDRU47CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgcmVnKTsKKworCS8qIEVuYWJsZSBEQ0IgZm9yIFR4IHdpdGggOCBUQ3MgKi8KKwlyZWcgPSBJWEdCRV9NVFFDX1JUX0VOQSB8IElYR0JFX01UUUNfOFRDXzhUUTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIHJlZyk7CisKKwkvKiBEaXNhYmxlIGRyb3AgZm9yIGFsbCBxdWV1ZXMgKi8KKwlmb3IgKHEgPSAwOyBxIDwgMTI4OyBxKyspCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUURFLCBxIDw8IElYR0JFX1FERV9JRFhfU0hJRlQpOworCisJLyogRW5hYmxlIHRoZSBUeCBkZXNjIGFyYml0ZXIgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKKwlyZWcgJj0gfklYR0JFX1JUVERDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5IC0gQ29uZmlndXJlIGFuZCBlbmFibGUgRENCCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBkY2Igc2V0dGluZ3MgYW5kIGVuYWJsZSBkY2IgbW9kZS4KKyAqLworczMyIGl4Z2JlX2RjYl9od19jb25maWdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCWl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfODI1OTkoaHcpOworCWl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShodyk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVlMjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0RDQl84MjU5OV9DT05GSUdfSF8KKyNkZWZpbmUgX0RDQl84MjU5OV9DT05GSUdfSF8KKworLyogRENCIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1JUVERDU19URFBBQyAgICAgIDB4MDAwMDAwMDEgLyogMCBSb3VuZCBSb2JpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAxIFdTUCAtIFdlaWdodGVkIFN0cmljdCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVk1QQUMgICAgICAweDAwMDAwMDAyIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBXUlIgLSBXZWlnaHRlZCBSb3VuZCBSb2JpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVERSTSAgICAgICAweDAwMDAwMDEwIC8qIFRyYW5zbWl0IFJlY3ljbGUgTW9kZSAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIERDQiBhcmJpdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0JEUE0gICAgICAgMHgwMDQwMDAwMCAvKiBCeXBhc3MgRGF0YSBQaXBlIC0gbXVzdCBjbGVhciEgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0JQQkZTTSAgICAgMHgwMDgwMDAwMCAvKiBCeXBhc3MgUEIgRnJlZSBTcGFjZSAtIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2xlYXIhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfU1BFRURfQ0hHICAweDgwMDAwMDAwIC8qIExpbmsgc3BlZWQgY2hhbmdlICovCisKKy8qIFJlY2VpdmUgVVAyVEMgbWFwcGluZyAqLworI2RlZmluZSBJWEdCRV9SVFJVUDJUQ19VUF9TSElGVCAzCisvKiBUcmFuc21pdCBVUDJUQyBtYXBwaW5nICovCisjZGVmaW5lIElYR0JFX1JUVFVQMlRDX1VQX1NISUZUIDMKKworI2RlZmluZSBJWEdCRV9SVFJQVDRDX01DTF9TSElGVCAxMiAvKiBPZmZzZXQgdG8gTWF4IENyZWRpdCBMaW1pdCBzZXR0aW5nICovCisjZGVmaW5lIElYR0JFX1JUUlBUNENfQldHX1NISUZUIDkgIC8qIE9mZnNldCB0byBCV0cgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19HU1AgICAgICAgMHg0MDAwMDAwMCAvKiBHU1AgZW5hYmxlIGJpdCAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRDX0xTUCAgICAgICAweDgwMDAwMDAwIC8qIExTUCBlbmFibGUgYml0ICovCisKKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9NUEJFTiAgICAgMHgwMDAwMDAxMCAvKiBETUEgY29uZmlnIGZvciBtdWx0aXBsZSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBidWZmZXJzIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX01DRU4gICAgICAweDAwMDAwMDQwIC8qIERNQSBjb25maWcgZm9yIG11bHRpcGxlIGNvcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKFJTUykgZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFJUUlBDUyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTX1JSTSAgICAgICAgMHgwMDAwMDAwMiAvKiBSZWNlaXZlIFJlY3ljbGUgTW9kZSBlbmFibGUgKi8KKy8qIFJlY2VpdmUgQXJiaXRyYXRpb24gQ29udHJvbDogMCBSb3VuZCBSb2JpbiwgMSBERlAgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTX1JBQyAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9SVFJQQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIEFyYml0cmF0aW9uIGRpc2FibGUgYml0ICovCisKKy8qIFJUVERUMkMgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JUVERUMkNfTUNMX1NISUZUIDEyCisjZGVmaW5lIElYR0JFX1JUVERUMkNfQldHX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfUlRURFQyQ19HU1AgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9SVFREVDJDX0xTUCAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19NQ0xfU0hJRlQgMTIKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19CV0dfU0hJRlQgOQorI2RlZmluZSBJWEdCRV9SVFRQVDJDX0dTUCAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfTFNQICAgICAgIDB4ODAwMDAwMDAKKworLyogUlRUUENTIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfVFBQQUMgICAgICAweDAwMDAwMDIwIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBTUCAtIFN0cmljdCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIEFyYml0ZXIgZGlzYWJsZSAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfVFBSTSAgICAgICAweDAwMDAwMTAwIC8qIFRyYW5zbWl0IFJlY3ljbGUgTW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRfU0hJRlQgMjIKKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRfRENCICAgMHg0ICAgICAgICAvKiBBcmJpdHJhdGlvbiBkZWxheSBpbiBEQ0IgbW9kZSAqLworCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFXzIwS0IgICAgIDB4MDAwMDUwMDAgLyogMjBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFXzQwS0IgICAgIDB4MDAwMEEwMDAgLyogNDBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzQ4S0IgICAgIDB4MDAwMEMwMDAgLyogNDhLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzY0S0IgICAgIDB4MDAwMTAwMDAgLyogNjRLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzgwS0IgICAgIDB4MDAwMTQwMDAgLyogODBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzEyOEtCICAgIDB4MDAwMjAwMDAgLyogMTI4S0IgUGFja2V0IEJ1ZmZlciAqLworCisjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0hfRENCICAgIDB4QSAgICAgICAgLyogVEhSRVNIIHZhbHVlIGZvciBEQ0IgbW9kZSAqLworCisKKy8qIERDQiBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgQVBJcyAqLworCisvKiBEQ0IgUEZDIGZ1bmN0aW9ucyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9nZXRfcGZjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2h3X3N0YXRzICpzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB0Y19jb3VudCk7CisKKy8qIERDQiB0cmFmZmljIGNsYXNzIHN0YXRzICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpOworCisvKiBEQ0IgY29uZmlnIGFyYml0ZXJzICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CitzMzIgaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKTsKKworCisvKiBEQ0IgaHcgaW5pdGlhbGl6YXRpb24gKi8KK3MzMiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqY29uZmlnKTsKKworI2VuZGlmIC8qIF9EQ0JfODI1OTlfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggNDEyOTk3NjkuLjBhODczMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBCSVRfUEdfUlgJMHgwNAogI2RlZmluZSBCSVRfUEdfVFgJMHgwOAogI2RlZmluZSBCSVRfQkNOICAgICAgICAgMHgxMAorI2RlZmluZSBCSVRfTElOS1NQRUVEICAgMHg4MAogCiBpbnQgaXhnYmVfY29weV9kY2JfY2ZnKHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpzcmNfZGNiX2NmZywKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRzdF9kY2JfY2ZnLCBpbnQgdGNfbWF4KQpAQCAtODksMjUgKzkwLDYgQEAKIAkJCXNyY19kY2JfY2ZnLT50Y19jb25maWdbaSAtIERDQl9QRkNfVVBfQVRUUl8wXS5kY2JfcGZjOwogCX0KIAotCWZvciAoaSA9IERDQl9CQ05fQVRUUl9SUF8wOyBpIDwgRENCX0JDTl9BVFRSX1JQX0FMTDsgaSsrKSB7Ci0JCWRzdF9kY2JfY2ZnLT5iY24ucnBfYWRtaW5fbW9kZVtpIC0gRENCX0JDTl9BVFRSX1JQXzBdID0KLQkJCXNyY19kY2JfY2ZnLT5iY24ucnBfYWRtaW5fbW9kZVtpIC0gRENCX0JDTl9BVFRSX1JQXzBdOwotCX0KLQlkc3RfZGNiX2NmZy0+YmNuLmJjbmFfb3B0aW9uWzBdID0gc3JjX2RjYl9jZmctPmJjbi5iY25hX29wdGlvblswXTsKLQlkc3RfZGNiX2NmZy0+YmNuLmJjbmFfb3B0aW9uWzFdID0gc3JjX2RjYl9jZmctPmJjbi5iY25hX29wdGlvblsxXTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX2FscGhhID0gc3JjX2RjYl9jZmctPmJjbi5ycF9hbHBoYTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX2JldGEgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2JldGE7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9nZCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfZ2Q7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9naSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfZ2k7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF90bWF4ID0gc3JjX2RjYl9jZmctPmJjbi5ycF90bWF4OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfdGQgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3RkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcm1pbiA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcm1pbjsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3cgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3c7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9yZCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcmQ7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9ydSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcnU7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF93cnR0ID0gc3JjX2RjYl9jZmctPmJjbi5ycF93cnR0OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcmkgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMCwxMiArMTAyLDYgQEAKIAlyZXR1cm4gISEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKTsKIH0KIAotc3RhdGljIHUxNiBpeGdiZV9kY2Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JLyogQWxsIHRyYWZmaWMgc2hvdWxkIGRlZmF1bHQgdG8gY2xhc3MgMCAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTggaXhnYmVfZGNibmxfc2V0X3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHN0YXRlKQogewogCXU4IGVyciA9IDA7CkBAIC0xNTMsOCArMTI5LDggQEAKIAkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CiAJCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwogCQlhZGFwdGVyLT5yeF9yaW5nID0gTlVMTDsKLQkJbmV0ZGV2LT5zZWxlY3RfcXVldWUgPSAmaXhnYmVfZGNiX3NlbGVjdF9xdWV1ZTsKIAorCQlhZGFwdGVyLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX3BmYzsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7CiAJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKQEAgLTE2Myw2ICsxMzksNyBAQAogCX0gZWxzZSB7CiAJCS8qIFR1cm4gb2ZmIERDQiAqLwogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCQlhZGFwdGVyLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2RlZmF1bHQ7CiAJCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKIAkJCWl4Z2JlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwpAQCAtMTcyLDcgKzE0OSw2IEBACiAJCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKIAkJCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwogCQkJYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7Ci0JCQluZXRkZXYtPnNlbGVjdF9xdWV1ZSA9IE5VTEw7CiAKIAkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwogCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKQEAgLTQ0NCwxNzUgKzQyMCw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRiY25ycChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksCi0JCQkJICB1OCAqc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldOwotfQotCi0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldGJjbmNmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgZW51bV9pbmRleCwKLQkJCQkgIHUzMiAqc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlzd2l0Y2ggKGVudW1faW5kZXgpIHsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzA6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMF07Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQUxQSEE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWxwaGE7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JFVEE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYmV0YTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0Q6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2Q7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dJOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dpOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9UTUFYOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RtYXg7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1REOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9STUlOOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JtaW47Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1c6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdzsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkQ6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmQ7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JVOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3J1OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XUlRUOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3dydHQ7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JJOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqc2V0dGluZyA9IC0xOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfc2V0YmNucnAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LAotCQkJCSB1OCBzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV0gPSBzZXR0aW5nOwotCi0JaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV0gIT0KLQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV0pCi0JCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci19Ci0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX3NldGJjbmNmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgZW51bV9pbmRleCwKLQkJCQkgdTMyIHNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0Jc3dpdGNoIChlbnVtX2luZGV4KSB7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8wOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMF0gIT0KLQkJCWFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8xOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV0gIT0KLQkJCWFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQUxQSEE6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWxwaGEgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9hbHBoYSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWxwaGEpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CRVRBOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2JldGEgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9iZXRhICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9iZXRhKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0Q6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2QgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9nZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2QpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HSToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9naSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dpICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9naSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1RNQVg6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdG1heCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RtYXggIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RtYXgpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9URDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90ZCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RkICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90ZCkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JNSU46Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcm1pbiA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JtaW4gIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JtaW4pCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3cgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SVToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ydSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3J1ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ydSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1dSVFQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfd3J0dCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3dydHQgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3dydHQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SSToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yaSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JpICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yaSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RydWN0IGRjYm5sX3J0bmxfb3BzIGRjYm5sX29wcyA9IHsKIAkuZ2V0c3RhdGUJPSBpeGdiZV9kY2JubF9nZXRfc3RhdGUsCiAJLnNldHN0YXRlCT0gaXhnYmVfZGNibmxfc2V0X3N0YXRlLApAQCAtNjMzLDkgKzQ0MCw1IEBACiAJLnNldG51bXRjcwk9IGl4Z2JlX2RjYm5sX3NldG51bXRjcywKIAkuZ2V0cGZjc3RhdGUJPSBpeGdiZV9kY2JubF9nZXRwZmNzdGF0ZSwKIAkuc2V0cGZjc3RhdGUJPSBpeGdiZV9kY2JubF9zZXRwZmNzdGF0ZSwKLQkuZ2V0YmNuY2ZnICAgICAgPSBpeGdiZV9kY2JubF9nZXRiY25jZmcsCi0JLmdldGJjbnJwICAgICAgID0gaXhnYmVfZGNibmxfZ2V0YmNucnAsCi0JLnNldGJjbmNmZyAgICAgID0gaXhnYmVfZGNibmxfc2V0YmNuY2ZnLAotCS5zZXRiY25ycCAgICAgICA9IGl4Z2JlX2RjYm5sX3NldGJjbnJwCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggNjdmODdhNy4uMThlY2JhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTg5LDggKzg5LDcgQEAKIAl7InJ4X2hlYWRlcl9zcGxpdCIsIElYR0JFX1NUQVQocnhfaGRyX3NwbGl0KX0sCiAJeyJhbGxvY19yeF9wYWdlX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfcGFnZV9mYWlsZWQpfSwKIAl7ImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgSVhHQkVfU1RBVChhbGxvY19yeF9idWZmX2ZhaWxlZCl9LAotCXsibHJvX2FnZ3JlZ2F0ZWQiLCBJWEdCRV9TVEFUKGxyb19hZ2dyZWdhdGVkKX0sCi0JeyJscm9fZmx1c2hlZCIsIElYR0JFX1NUQVQobHJvX2ZsdXNoZWQpfSwKKwl7InJ4X25vX2RtYV9yZXNvdXJjZXMiLCBJWEdCRV9TVEFUKGh3X3J4X25vX2RtYV9yZXNvdXJjZXMpfSwKIH07CiAKICNkZWZpbmUgSVhHQkVfUVVFVUVfU1RBVFNfTEVOIFwKQEAgLTEzMiw2ICsxMzEsMjYgQEAKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CiAKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfSBlbHNlIGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpIHsKKwkJLyogU2V0IGFzIEZJQlJFIHVudGlsIFNFUkRFUyBkZWZpbmVkIGluIGtlcm5lbCAqLworCQlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwkJY2FzZSBJWEdCRV9ERVZfSURfODI1OTg6CisJCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJU1VQUE9SVEVEX0ZJQlJFKTsKKwkJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJYnJlYWs7CisJCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQkJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgIFNVUFBPUlRFRF9GSUJSRSk7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICBBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJCWJyZWFrOworCQl9CiAJfSBlbHNlIHsKIAkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9GSUJSRTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfApAQCAtMjA2LDEzICsyMjUsMTMgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX2Z1bGwgPyAxIDogMCk7CisJcGF1c2UtPmF1dG9uZWcgPSAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19mdWxsID8gMSA6IDApOwogCi0JaWYgKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfcnhfcGF1c2UpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKLQl9IGVsc2UgaWYgKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CisJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7Ci0JfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19mdWxsKSB7CisJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKIAkJcGF1c2UtPnR4X3BhdXNlID0gMTsKIAl9CkBAIC0yMjYsMjIgKzI0NSwxNyBAQAogCiAJaWYgKChwYXVzZS0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKIAkgICAgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX2Z1bGw7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CiAJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfcnhfcGF1c2U7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOwogCWVsc2UgaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX3R4X3BhdXNlOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY190eF9wYXVzZTsKIAllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfbm9uZTsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Ci0JZWxzZQotCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKKwlody0+bWFjLm9wcy5zZXR1cF9mYyhodywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1Niw3ICs0NzAsNyBAQAogCXJlZ3NfYnVmZls4MjVdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lQNkFUKTsKIAlyZWdzX2J1ZmZbODI2XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9XVVBMKTsKIAlyZWdzX2J1ZmZbODI3XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9XVVBNKTsKLQlyZWdzX2J1ZmZbODI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GSEZUKTsKKwlyZWdzX2J1ZmZbODI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GSEZUKDApKTsKIAogCXJlZ3NfYnVmZls4MjldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZ3NfYnVmZls4MzBdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RQTUNTKTsKQEAgLTY2MSwxMCArNjc1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwljaGFyIGZpcm13YXJlX3ZlcnNpb25bMzJdOwogCiAJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIGl4Z2JlX2RyaXZlcl9uYW1lLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBpeGdiZV9kcml2ZXJfdmVyc2lvbiwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIDMyKTsKKworCXNwcmludGYoZmlybXdhcmVfdmVyc2lvbiwgIiVkLiVkLSVkIiwKKwkgICAgICAgIChhZGFwdGVyLT5lZXByb21fdmVyc2lvbiAmIDB4RjAwMCkgPj4gMTIsCisJICAgICAgICAoYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweDBGRjApID4+IDQsCisJICAgICAgICBhZGFwdGVyLT5lZXByb21fdmVyc2lvbiAmIDB4MDAwRik7CisKKwlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sIGZpcm13YXJlX3ZlcnNpb24sIDMyKTsKIAlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwgMzIpOwogCWRydmluZm8tPm5fc3RhdHMgPSBJWEdCRV9TVEFUU19MRU47CiAJZHJ2aW5mby0+cmVnZHVtcF9sZW4gPSBpeGdiZV9nZXRfcmVnc19sZW4obmV0ZGV2KTsKQEAgLTgwOCwxNSArODI5LDYgQEAKIAlpbnQgc3RhdF9jb3VudCA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHU2NCk7CiAJaW50IGosIGs7CiAJaW50IGk7Ci0JdTY0IGFnZ3JlZ2F0ZWQgPSAwLCBmbHVzaGVkID0gMCwgbm9fZGVzYyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlhZ2dyZWdhdGVkICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOwotCQlmbHVzaGVkICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5mbHVzaGVkOwotCQlub19kZXNjICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5ub19kZXNjOwotCX0KLQlhZGFwdGVyLT5scm9fYWdncmVnYXRlZCA9IGFnZ3JlZ2F0ZWQ7Ci0JYWRhcHRlci0+bHJvX2ZsdXNoZWQgPSBmbHVzaGVkOwotCWFkYXB0ZXItPmxyb19ub19kZXNjID0gbm9fZGVzYzsKIAogCWl4Z2JlX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CkBAIC04OTcsMTIgKzkwOSw1MCBAQAogc3RhdGljIHZvaWQgaXhnYmVfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7Ci0Jd29sLT5zdXBwb3J0ZWQgPSAwOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9VQ0FTVCB8IFdBS0VfTUNBU1QgfAorCSAgICAgICAgICAgICAgICAgV0FLRV9CQ0FTVCB8IFdBS0VfTUFHSUM7CiAJd29sLT53b2xvcHRzID0gMDsKIAorCWlmICghZGV2aWNlX2Nhbl93YWtldXAoJmFkYXB0ZXItPnBkZXYtPmRldikpCisJCXJldHVybjsKKworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX0VYKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9VQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19NQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfQkMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX0JDQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX01BRykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7CisKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBpbnQgaXhnYmVfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHdvbC0+d29sb3B0cyAmIChXQUtFX1BIWSB8IFdBS0VfQVJQIHwgV0FLRV9NQUdJQ1NFQ1VSRSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWFkYXB0ZXItPndvbCA9IDA7CisKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9VQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfRVg7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX01DOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX0JDQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19CQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfTUFHOworCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGFkYXB0ZXItPndvbCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpeGdiZV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtOTY1LDQwICsxMDE1LDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGk7CiAKIAlpZiAoZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSkKIAkJYWRhcHRlci0+dHhfcmluZ1swXS53b3JrX2xpbWl0ID0gZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKIAogCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPiAxKSB7CisJCS8qIGNoZWNrIHRoZSBsaW1pdHMgKi8KKwkJaWYgKCgxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjcyA+IElYR0JFX01BWF9JTlRfUkFURSkgfHwKKwkJICAgICgxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjcyA8IElYR0JFX01JTl9JTlRfUkFURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQkvKiBzdG9yZSB0aGUgdmFsdWUgaW4gaW50cy9zZWNvbmQgKi8KIAkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzOwogCiAJCS8qIHN0YXRpYyB2YWx1ZSBvZiBpbnRlcnJ1cHQgcmF0ZSAqLwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IGFkYXB0ZXItPmVpdHJfcGFyYW07Ci0JCS8qIGNsZWFyIHRoZSBsb3dlciBiaXQgKi8KKwkJLyogY2xlYXIgdGhlIGxvd2VyIGJpdCBhcyBpdHMgdXNlZCBmb3IgZHluYW1pYyBzdGF0ZSAqLwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyAmPSB+MTsKIAl9IGVsc2UgaWYgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA9PSAxKSB7CiAJCS8qIDEgbWVhbnMgZHluYW1pYyBtb2RlICovCiAJCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAyMDAwMDsKIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAxOwogCX0gZWxzZSB7Ci0JCS8qIGFueSBvdGhlciB2YWx1ZSBtZWFucyBkaXNhYmxlIGVpdHIsIHdoaWNoIGlzIGJlc3QKLQkJICogc2VydmVkIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCByYXRlIHZlcnkgaGlnaCAqLwotCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gMzAwMDAwMDsKKwkJLyoKKwkJICogYW55IG90aGVyIHZhbHVlIG1lYW5zIGRpc2FibGUgZWl0ciwgd2hpY2ggaXMgYmVzdAorCQkgKiBzZXJ2ZWQgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IHJhdGUgdmVyeSBoaWdoCisJCSAqLworCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gSVhHQkVfTUFYX0lOVF9SQVRFOwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspIHsKIAkJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9ICZhZGFwdGVyLT5xX3ZlY3RvcltpXTsKIAkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQkvKiB0eCB2ZWN0b3IgZ2V0cyBoYWxmIHRoZSByYXRlICovCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IChhZGFwdGVyLT5laXRyX3BhcmFtID4+IDEpOwogCQllbHNlCiAJCQkvKiByeCBvbmx5IG9yIG1peGVkICovCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUihpKSwKLQkJICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIGksCisJCSAgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKHFfdmVjdG9yLT5laXRyKSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMDEyLDYgKzEwNjksNyBAQAogCS5nZXRfcmVnc19sZW4gICAgICAgICAgID0gaXhnYmVfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncyAgICAgICAgICAgICAgID0gaXhnYmVfZ2V0X3JlZ3MsCiAJLmdldF93b2wgICAgICAgICAgICAgICAgPSBpeGdiZV9nZXRfd29sLAorCS5zZXRfd29sICAgICAgICAgICAgICAgID0gaXhnYmVfc2V0X3dvbCwKIAkubndheV9yZXNldCAgICAgICAgICAgICA9IGl4Z2JlX253YXlfcmVzZXQsCiAJLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gaXhnYmVfZ2V0X2VlcHJvbV9sZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggNWQzNjRhOS4uNzlhYTgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQ3LDEyICs0NywxMyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIjsKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4zLjMwLWsyIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjgtazIiCiBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKLXN0YXRpYyBjaGFyIGl4Z2JlX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA3IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JlX2luZm8gKml4Z2JlX2luZm9fdGJsW10gPSB7CiAJW2JvYXJkXzgyNTk4XSA9ICZpeGdiZV84MjU5OF9pbmZvLAorCVtib2FyZF84MjU5OV0gPSAmaXhnYmVfODI1OTlfaW5mbywKIH07CiAKIC8qIGl4Z2JlX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCkBAIC02NCw2ICs2NSw4IEBACiAgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZV9wY2lfdGJsW10gPSB7CisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTgpLAorCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUKSwKIAkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUKSwKQEAgLTgyLDYgKzg1LDEyIEBACiAJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThFQl9TRlBfTE9NKSwKIAkgYm9hcmRfODI1OTggfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OF9CWCksCisJIGJvYXJkXzgyNTk4IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfS1g0KSwKKwkgYm9hcmRfODI1OTkgfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OV9TRlApLAorCSBib2FyZF84MjU5OSB9LAogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLCB9CkBAIC0xMjUsMTcgKzEzNCw1MyBAQAogCSAgICAgICAgICAgICAgICBjdHJsX2V4dCB8IElYR0JFX0NUUkxfRVhUX0RSVl9MT0FEKTsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfc2V0X2l2YXIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBpbnRfYWxsb2NfZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBtc2l4X3ZlY3RvcikKKy8qCisgKiBpeGdiZV9zZXRfaXZhciAtIHNldCB0aGUgSVZBUiByZWdpc3RlcnMsIG1hcHBpbmcgaW50ZXJydXB0IGNhdXNlcyB0byB2ZWN0b3JzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIHN0cnVjdAorICogQGRpcmVjdGlvbjogMCBmb3IgUngsIDEgZm9yIFR4LCAtMSBmb3Igb3RoZXIgY2F1c2VzCisgKiBAcXVldWU6IHF1ZXVlIHRvIG1hcCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgdG8KKyAqIEBtc2l4X3ZlY3RvcjogdGhlIHZlY3RvciB0byBtYXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcXVldWUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdmFyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBzOCBkaXJlY3Rpb24sCisJICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlLCB1OCBtc2l4X3ZlY3RvcikKIHsKIAl1MzIgaXZhciwgaW5kZXg7Ci0KLQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKLQlpbmRleCA9IChpbnRfYWxsb2NfZW50cnkgPj4gMikgJiAweDFGOwotCWl2YXIgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVIoaW5kZXgpKTsKLQlpdmFyICY9IH4oMHhGRiA8PCAoOCAqIChpbnRfYWxsb2NfZW50cnkgJiAweDMpKSk7Ci0JaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgKDggKiAoaW50X2FsbG9jX2VudHJ5ICYgMHgzKSkpOwotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKKwkJbXNpeF92ZWN0b3IgfD0gSVhHQkVfSVZBUl9BTExPQ19WQUw7CisJCWlmIChkaXJlY3Rpb24gPT0gLTEpCisJCQlkaXJlY3Rpb24gPSAwOworCQlpbmRleCA9ICgoKGRpcmVjdGlvbiAqIDY0KSArIHF1ZXVlKSA+PiAyKSAmIDB4MUY7CisJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSVZBUihpbmRleCkpOworCQlpdmFyICY9IH4oMHhGRiA8PCAoOCAqIChxdWV1ZSAmIDB4MykpKTsKKwkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgKDggKiAocXVldWUgJiAweDMpKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSVZBUihpbmRleCksIGl2YXIpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQlpZiAoZGlyZWN0aW9uID09IC0xKSB7CisJCQkvKiBvdGhlciBjYXVzZXMgKi8KKwkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQkJaW5kZXggPSAoKHF1ZXVlICYgMSkgKiA4KTsKKwkJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVJfTUlTQyk7CisJCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciA8PCBpbmRleCk7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSX01JU0MsIGl2YXIpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKiB0eCBvciByeCBjYXVzZXMgKi8KKwkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQkJaW5kZXggPSAoKDE2ICogKHF1ZXVlICYgMSkpICsgKDggKiBkaXJlY3Rpb24pKTsKKwkJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSVZBUihxdWV1ZSA+PiAxKSk7CisJCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciA8PCBpbmRleCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIocXVldWUgPj4gMSksIGl2YXIpOworCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjAwLDM5ICsyNDUsMzkgQEAKICNkZWZpbmUgREVTQ19ORUVERUQgKFRYRF9VU0VfQ09VTlQoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkgLyogc2tiLT5kYXRhICovICsgXAogCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxKSAvKiBmb3IgY29udGV4dCAqLwogCi0jZGVmaW5lIEdFVF9UWF9IRUFEX0ZST01fUklORyhyaW5nKSAoXAotCSoodm9sYXRpbGUgdTMyICopIFwKLQkoKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICopKHJpbmcpLT5kZXNjICsgKHJpbmcpLT5jb3VudCkpCiBzdGF0aWMgdm9pZCBpeGdiZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogCiAvKioKICAqIGl4Z2JlX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAdHhfcmluZzogdHggcmluZyB0byBjbGVhbgorICoKKyAqIHJldHVybnMgdHJ1ZSBpZiB0cmFuc21pdCB3b3JrIGlzIGRvbmUKICAqKi8KIHN0YXRpYyBib29sIGl4Z2JlX2NsZWFuX3R4X2lycShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKLQl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYzsKLQlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGhlYWQsIG9sZGhlYWQ7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYywgKmVvcF9kZXNjOworCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXVuc2lnbmVkIGludCBpLCBlb3AsIGNvdW50ID0gMDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXMgPSAwLCB0b3RhbF9wYWNrZXRzID0gMDsKIAotCXJtYigpOwotCWhlYWQgPSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcodHhfcmluZyk7Ci0JaGVhZCA9IGxlMzJfdG9fY3B1KGhlYWQpOwogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwotCXdoaWxlICgxKSB7Ci0JCXdoaWxlIChpICE9IGhlYWQpIHsKKwllb3AgPSB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOworCWVvcF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGVvcCk7CisKKwl3aGlsZSAoKGVvcF9kZXNjLT53Yi5zdGF0dXMgJiBjcHVfdG9fbGUzMihJWEdCRV9UWERfU1RBVF9ERCkpICYmCisJICAgICAgIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpKSB7CisJCWJvb2wgY2xlYW5lZCA9IGZhbHNlOworCQlmb3IgKCA7ICFjbGVhbmVkOyBjb3VudCsrKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQkJdHhfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBpKTsKIAkJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CiAJCQlza2IgPSB0eF9idWZmZXJfaW5mby0+c2tiOwogCi0JCQlpZiAoc2tiKSB7CisJCQlpZiAoY2xlYW5lZCAmJiBza2IpIHsKIAkJCQl1bnNpZ25lZCBpbnQgc2VncywgYnl0ZWNvdW50OwogCiAJCQkJLyogZ3NvX3NlZ3MgaXMgY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIHRjcCAqLwpAQCAtMjQ3LDIzICsyOTIsMTcgQEAKIAkJCWl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9idWZmZXJfaW5mbyk7CiAKKwkJCXR4X2Rlc2MtPndiLnN0YXR1cyA9IDA7CisKIAkJCWkrKzsKIAkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQogCQkJCWkgPSAwOwotCi0JCQljb3VudCsrOwotCQkJaWYgKGNvdW50ID09IHR4X3JpbmctPmNvdW50KQotCQkJCWdvdG8gZG9uZV9jbGVhbmluZzsKIAkJfQotCQlvbGRoZWFkID0gaGVhZDsKLQkJcm1iKCk7Ci0JCWhlYWQgPSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcodHhfcmluZyk7Ci0JCWhlYWQgPSBsZTMyX3RvX2NwdShoZWFkKTsKLQkJaWYgKGhlYWQgPT0gb2xkaGVhZCkKLQkJCWdvdG8gZG9uZV9jbGVhbmluZzsKLQl9IC8qIHdoaWxlICgxKSAqLwogCi1kb25lX2NsZWFuaW5nOgorCQllb3AgPSB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOworCQllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCX0KKwogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCkBAIC0yOTEsMTcgKzMzMCwxNiBAQAogCX0KIAogCS8qIHJlLWFybSB0aGUgaW50ZXJydXB0ICovCi0JaWYgKCh0b3RhbF9wYWNrZXRzID49IHR4X3JpbmctPndvcmtfbGltaXQpIHx8Ci0JICAgIChjb3VudCA9PSB0eF9yaW5nLT5jb3VudCkpCisJaWYgKGNvdW50ID49IHR4X3JpbmctPndvcmtfbGltaXQpCiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQ1MsIHR4X3JpbmctPnZfaWR4KTsKIAogCXR4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX2J5dGVzOwogCXR4X3JpbmctPnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsKLQl0eF9yaW5nLT5zdGF0cy5ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT5zdGF0cy5wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisJdHhfcmluZy0+c3RhdHMuYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7Ci0JcmV0dXJuICh0b3RhbF9wYWNrZXRzID8gdHJ1ZSA6IGZhbHNlKTsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCkBAIC0zMTQsMTMgKzM1MiwxOSBAQAogCiAJaWYgKHJ4X3JpbmctPmNwdSAhPSBjcHUpIHsKIAkJcnhjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfUlhDVFJMKHEpKTsKLQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7Ci0JCXJ4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQlyeGN0cmwgJj0gfklYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKKwkJCXJ4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1OTk7CisJCQlyeGN0cmwgfD0gKGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CisJCQkgICAgICAgICAgIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfU0hJRlRfODI1OTkpOworCQl9CiAJCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9IRUFEX0RDQV9FTjsKIAkJcnhjdHJsICY9IH4oSVhHQkVfRENBX1JYQ1RSTF9ERVNDX1JST19FTik7CiAJCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19XUk9fRU4gfAotCQkJICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKKwkJICAgICAgICAgICAgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4pOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfUlhDVFJMKHEpLCByeGN0cmwpOwogCQlyeF9yaW5nLT5jcHUgPSBjcHU7CiAJfQpAQCAtMzM2LDggKzM4MCwxNCBAQAogCiAJaWYgKHR4X3JpbmctPmNwdSAhPSBjcHUpIHsKIAkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpKTsKLQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7Ci0JCXR4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKKwkJCXR4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTk7CisJCQl0eGN0cmwgfD0gKGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CisJCQkgICAgICAgICAgIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfU0hJRlRfODI1OTkpOworCQl9CiAJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpLCB0eGN0cmwpOwogCQl0eF9yaW5nLT5jcHUgPSBjcHU7CkBAIC00MDMsMjMgKzQ1MywyMSBAQAogICogQHJ4X3Jpbmc6IHJ4IGRlc2NyaXB0b3IgcmluZyAoZm9yIGEgc3BlY2lmaWMgcXVldWUpIHRvIHNldHVwCiAgKiBAcnhfZGVzYzogcnggZGVzY3JpcHRvcgogICoqLwotc3RhdGljIHZvaWQgaXhnYmVfcmVjZWl2ZV9za2Ioc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCitzdGF0aWMgdm9pZCBpeGdiZV9yZWNlaXZlX3NrYihzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYykKIHsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZxX3ZlY3Rvci0+bmFwaTsKIAlib29sIGlzX3ZsYW4gPSAoc3RhdHVzICYgSVhHQkVfUlhEX1NUQVRfVlApOwogCXUxNiB0YWcgPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKTsKIAotCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8gJiYKLQkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcV92ZWN0b3IgLSAmYWRhcHRlci0+cV92ZWN0b3JbMF0pOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewogCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbiAmJiAodGFnICE9IDApKQotCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmcmluZy0+bHJvX21nciwgc2tiLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52bGdycCwgdGFnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9kZXNjKTsKKwkJCXZsYW5fZ3JvX3JlY2VpdmUobmFwaSwgYWRhcHRlci0+dmxncnAsIHRhZywgc2tiKTsKIAkJZWxzZQotCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLCBza2IsIHJ4X2Rlc2MpOwotCQlyaW5nLT5scm9fdXNlZCA9IHRydWU7CisJCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAJfSBlbHNlIHsKIAkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX05FVFBPTEwpKSB7CiAJCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbiAmJiAodGFnICE9IDApKQpAQCAtNDcwLDYgKzUxOCwxOSBAQAogCWFkYXB0ZXItPmh3X2NzdW1fcnhfZ29vZCsrOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcmVsZWFzZV9yeF9kZXNjKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nLCB1MzIgdmFsKQoreworCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCisJd21iKCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFQocnhfcmluZy0+cmVnX2lkeCksIHZhbCk7Cit9CisKIC8qKgogICogaXhnYmVfYWxsb2NfcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ4Miw2ICs1NDMsNyBAQAogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjOwogCXN0cnVjdCBpeGdiZV9yeF9idWZmZXIgKmJpOwogCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZzeiA9IHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKyBORVRfSVBfQUxJR047CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b191c2U7CiAJYmkgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CkBAIC01MTEsOSArNTczLDcgQEAKIAogCQlpZiAoIWJpLT5za2IpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgKHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgTkVUX0lQX0FMSUdOKSk7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwgYnVmc3opOwogCiAJCQlpZiAoIXNrYikgewogCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CkBAIC01MjgsOCArNTg4LDcgQEAKIAkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKIAogCQkJYmktPnNrYiA9IHNrYjsKLQkJCWJpLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCWJpLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGJ1ZnN6LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKQEAgLTU1MywxNCArNjEyLDcgQEAKIAkJaWYgKGktLSA9PSAwKQogCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOwogCi0JCS8qCi0JCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93Ci0JCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5Ci0JCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCi0JCSAqIHN1Y2ggYXMgSUEtNjQpLgotCQkgKi8KLQkJd21iKCk7Ci0JCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsIHJ4X3JpbmcsIGkpOwogCX0KIH0KIApAQCAtNTc0LDEwICs2MjYsMTEgQEAKIAlyZXR1cm4gcnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaHNfcnNzLnBrdF9pbmZvOwogfQogCi1zdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCitzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCiB7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MsICpuZXh0X3J4ZDsKIAlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbywgKm5leHRfYnVmZmVyOwpAQCAtNjc4LDcgKzczMSw3IEBACiAJCXRvdGFsX3J4X3BhY2tldHMrKzsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBhZGFwdGVyLT5uZXRkZXYpOwotCQlpeGdiZV9yZWNlaXZlX3NrYihhZGFwdGVyLCBza2IsIHN0YXRlcnIsIHJ4X3JpbmcsIHJ4X2Rlc2MpOworCQlpeGdiZV9yZWNlaXZlX3NrYihxX3ZlY3Rvciwgc2tiLCBzdGF0ZXJyLCByeF9kZXNjKTsKIAogbmV4dF9kZXNjOgogCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOwpAQCAtNjk2LDExICs3NDksNiBAQAogCQlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yKTsKIAl9CiAKLQlpZiAocnhfcmluZy0+bHJvX3VzZWQpIHsKLQkJbHJvX2ZsdXNoX2FsbCgmcnhfcmluZy0+bHJvX21ncik7Ci0JCXJ4X3JpbmctPmxyb191c2VkID0gZmFsc2U7Ci0JfQotCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CiAJY2xlYW5lZF9jb3VudCA9IElYR0JFX0RFU0NfVU5VU0VEKHJ4X3JpbmcpOwogCkBAIC03MzEsNyArNzc5LDggQEAKIAogCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOwogCi0JLyogUG9wdWxhdGUgdGhlIElWQVIgdGFibGUgYW5kIHNldCB0aGUgSVRSIHZhbHVlcyB0byB0aGUKKwkvKgorCSAqIFBvcHVsYXRlIHRoZSBJVkFSIHRhYmxlIGFuZCBzZXQgdGhlIElUUiB2YWx1ZXMgdG8gdGhlCiAJICogY29ycmVzcG9uZGluZyByZWdpc3Rlci4KIAkgKi8KIAlmb3IgKHZfaWR4ID0gMDsgdl9pZHggPCBxX3ZlY3RvcnM7IHZfaWR4KyspIHsKQEAgLTc0Miw3ICs3OTEsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKIAkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XS5yZWdfaWR4OwotCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9SWF9RVUVVRShqKSwgdl9pZHgpOworCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMCwgaiwgdl9pZHgpOwogCQkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LAogCQkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgcl9pZHggKyAxKTsKQEAgLTc1Miw3ICs4MDEsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKIAkJCWogPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XS5yZWdfaWR4OwotCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9UWF9RVUVVRShqKSwgdl9pZHgpOworCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMSwgaiwgdl9pZHgpOwogCQkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LAogCQkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgcl9pZHggKyAxKTsKQEAgLTc2MSwxNSArODEwLDIzIEBACiAJCS8qIGlmIHRoaXMgaXMgYSB0eCBvbmx5IHZlY3RvciBoYWx2ZSB0aGUgaW50ZXJydXB0IHJhdGUgKi8KIAkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IChhZGFwdGVyLT5laXRyX3BhcmFtID4+IDEpOwotCQllbHNlCisJCWVsc2UgaWYgKHFfdmVjdG9yLT5yeHJfY291bnQpCiAJCQkvKiByeCBvbmx5ICovCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CiAKKwkJLyoKKwkJICogc2luY2UgdGhpcyBpcyBpbml0aWFsIHNldCB1cCBkb24ndCBuZWVkIHRvIGNhbGwKKwkJICogaXhnYmVfd3JpdGVfZWl0ciBoZWxwZXIKKwkJICovCiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFIodl9pZHgpLAogCQkgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKHFfdmVjdG9yLT5laXRyKSk7CiAJfQogCi0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9PVEhFUl9DQVVTRVNfSU5ERVgsIHZfaWR4KTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIC0xLCBJWEdCRV9JVkFSX09USEVSX0NBVVNFU19JTkRFWCwKKwkJICAgICAgICAgICAgICAgdl9pZHgpOworCWVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgMSwgdl9pZHgpOwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFIodl9pZHgpLCAxOTUwKTsKIAogCS8qIHNldCB1cCB0byBhdXRvY2xlYXIgdGltZXIsIGFuZCB0aGUgdmVjdG9ycyAqLwpAQCAtODQ1LDEwICs5MDIsMzUgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqIGl4Z2JlX3dyaXRlX2VpdHIgLSB3cml0ZSBFSVRSIHJlZ2lzdGVyIGluIGhhcmR3YXJlIHNwZWNpZmljIHdheQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEB2X2lkeDogdmVjdG9yIGluZGV4IGludG8gcV92ZWN0b3IgYXJyYXkKKyAqIEBpdHJfcmVnOiBuZXcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiAqcmVnaXN0ZXIqIGZvcm1hdCwgbm90IGludHMvcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWFkZSB0byBiZSBjYWxsZWQgYnkgZXRodG9vbCBhbmQgYnkgdGhlIGRyaXZlcgorICogd2hlbiBpdCBuZWVkcyB0byB1cGRhdGUgRUlUUiByZWdpc3RlcnMgYXQgcnVudGltZS4gIEhhcmR3YXJlCisgKiBzcGVjaWZpYyBxdWlya3MvZGlmZmVyZW5jZXMgYXJlIHRha2VuIGNhcmUgb2YgaGVyZS4KKyAqLwordm9pZCBpeGdiZV93cml0ZV9laXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgdl9pZHgsIHUzMiBpdHJfcmVnKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLworCQlpdHJfcmVnIHw9IChpdHJfcmVnIDw8IDE2KTsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qCisJCSAqIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhbgorCQkgKiBpbW1lZGlhdGUgYXNzZXJ0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKwkJICovCisJCWl0cl9yZWcgfD0gSVhHQkVfRUlUUl9DTlRfV0RJUzsKKwl9CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgaXRyX3JlZyk7Cit9CisKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdHJfbXNpeChzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgbmV3X2l0cjsKIAl1OCBjdXJyZW50X2l0ciwgcmV0X2l0cjsKIAlpbnQgaSwgcl9pZHgsIHZfaWR4ID0gKCh2b2lkICopcV92ZWN0b3IgLSAodm9pZCAqKShhZGFwdGVyLT5xX3ZlY3RvcikpIC8KQEAgLTkwMywxNCArOTg1LDEzIEBACiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+ZWl0cikgewogCQl1MzIgaXRyX3JlZzsKKworCQkvKiBzYXZlIHRoZSBhbGdvcml0aG0gdmFsdWUgaGVyZSwgbm90IHRoZSBzbW9vdGhlZCBvbmUgKi8KKwkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KIAkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOwotCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7Ci0JCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLwotCQlEUFJJTlRLKFRYX0VSUiwgREVCVUcsICJ3cml0aW5nIGVpdHIoJWQpOiAlMDhYXG4iLCB2X2lkeCwKLQkJICAgICAgICBpdHJfcmVnKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgaXRyX3JlZyB8IChpdHJfcmVnKTw8MTYpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIHZfaWR4LCBpdHJfcmVnKTsKIAl9CiAKIAlyZXR1cm47CkBAIC05MjgsNiArMTAwOSwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZWljcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAxKSB7CisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAxKTsKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwl9IGVsc2UgaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAyKSB7CisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAyKTsKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJfSBlbHNlIHsKKwkJLyogSW50ZXJydXB0IGlzbid0IGZvciB1cy4uLiAqLworCQlyZXR1cm47CisJfQorfQorCiBzdGF0aWMgdm9pZCBpeGdiZV9jaGVja19sc2Moc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTk0NiwxMyArMTA0NSwyNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBlaWNyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VJQ1IpOworCXUzMiBlaWNyOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBTaWxpY29uIGVycmF0YS4gIFVzZSBjbGVhci1ieS13cml0ZSBpbnN0ZWFkCisJICogb2YgY2xlYXItYnktcmVhZC4gIFJlYWRpbmcgd2l0aCBFSUNTIHdpbGwgcmV0dXJuIHRoZQorCSAqIGludGVycnVwdCBjYXVzZXMgd2l0aG91dCBjbGVhcmluZywgd2hpY2ggbGF0ZXIgYmUgZG9uZQorCSAqIHdpdGggdGhlIHdyaXRlIHRvIEVJQ1IuCisJICovCisJZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNTKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1IsIGVpY3IpOwogCiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCi0JaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlpeGdiZV9jaGVja19zZnBfZXZlbnQoYWRhcHRlciwgZWljcik7CiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNU19PVEhFUik7CiAKQEAgLTEwMTUsNyArMTEyNiw3IEBACiAJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOwogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGlzIHZlY3RvciBvbmx5ICovCiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgcnhfcmluZy0+dl9pZHgpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZxX3ZlY3Rvci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTA1MiwxMiArMTE2MywxMiBAQAogCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIHJ4X3JpbmcpOwogI2VuZGlmCiAKLQlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKwlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCByeF9yaW5nLT52X2lkeCk7CkBAIC0xMDk1LDcgKzEyMDYsNyBAQAogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgotCQlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKwkJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCQllbmFibGVfbWFzayB8PSByeF9yaW5nLT52X2lkeDsKIAkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkgICAgICAgICAgICAgICAgICAgICAgcl9pZHggKyAxKTsKQEAgLTExMDUsOCArMTIxNiw4IEBACiAJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOwogCS8qIElmIGFsbCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpCisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDEpCiAJCQlpeGdiZV9zZXRfaXRyX21zaXgocV92ZWN0b3IpOwogCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIGVuYWJsZV9tYXNrKTsKQEAgLTEyNzYsNyArMTM4Nyw2IEBACiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdHIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3I7CiAJdTggY3VycmVudF9pdHI7CiAJdTMyIG5ld19pdHIgPSBxX3ZlY3Rvci0+ZWl0cjsKQEAgLTEzMTEsMzUgKzE0MjEsMTkgQEAKIAogCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CiAJCXUzMiBpdHJfcmVnOworCisJCS8qIHNhdmUgdGhlIGFsZ29yaXRobSB2YWx1ZSBoZXJlLCBub3QgdGhlIHNtb290aGVkIG9uZSAqLworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCS8qIGRvIGFuIGV4cG9uZW50aWFsIHNtb290aGluZyAqLwogCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkwKS8xMDApICsgKChuZXdfaXRyICogMTApLzEwMCk7Ci0JCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJaXRyX3JlZyA9IEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhuZXdfaXRyKTsKLQkJLyogbXVzdCB3cml0ZSBoaWdoIGFuZCBsb3cgMTYgYml0cyB0byByZXNldCBjb3VudGVyICovCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUigwKSwgaXRyX3JlZyB8IChpdHJfcmVnKTw8MTYpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIDAsIGl0cl9yZWcpOwogCX0KIAogCXJldHVybjsKIH0KIAogLyoqCi0gKiBpeGdiZV9pcnFfZGlzYWJsZSAtIE1hc2sgb2ZmIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoZSBOSUMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoqLwotc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9kaXNhYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQotewotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIH4wKTsKLQlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQotCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOwotCX0gZWxzZSB7Ci0JCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwotCX0KLX0KLQotLyoqCiAgKiBpeGdiZV9pcnFfZW5hYmxlIC0gRW5hYmxlIGRlZmF1bHQgaW50ZXJydXB0IGdlbmVyYXRpb24gc2V0dGluZ3MKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwpAQCAtMTM0OSw3ICsxNDQzLDIxIEBACiAJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFKQogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19FQ0M7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMTsKKwkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAyOworCX0KKwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBlbmFibGUgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlIHZlY3RvcnMgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgxKSwKKwkJICAgICAgICAgICAgICAgIChJWEdCRV9FSU1TX1JUWF9RVUVVRSA8PCAxNikpOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDIpLAorCQkgICAgICAgICAgICAgICAgKChJWEdCRV9FSU1TX1JUWF9RVUVVRSA8PCAxNikgfAorCQkgICAgICAgICAgICAgICAgICBJWEdCRV9FSU1TX1JUWF9RVUVVRSkpOworCX0KIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogfQogCkBAIC0xMzY1LDYgKzE0NzMsMTIgQEAKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBlaWNyOwogCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBzaWxpY29uIGVycmF0YS4gIE1hc2sgdGhlIGludGVycnVwdHMKKwkgKiBiZWZvcmUgdGhlIHJlYWQgb2YgRUlDUi4KKwkgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTUMsIElYR0JFX0lSUV9DTEVBUl9NQVNLKTsKKwogCS8qIGZvciBOQVBJLCB1c2luZyBFSUFNIHRvIGF1dG8tbWFzayB0eC9yeCBpbnRlcnJ1cHQgYml0cyBvbiByZWFkCiAJICogdGhlcmVmb3JlIG5vIGV4cGxpY3QgaW50ZXJydXB0IGRpc2FibGUgaXMgbmVjZXNzYXJ5ICovCiAJZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKQEAgLTEzNzksMTUgKzE0OTMsMTggQEAKIAlpZiAoZWljciAmIElYR0JFX0VJQ1JfTFNDKQogCQlpeGdiZV9jaGVja19sc2MoYWRhcHRlcik7CiAKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlpeGdiZV9jaGVja19zZnBfZXZlbnQoYWRhcHRlciwgZWljcik7CisKIAlpeGdiZV9jaGVja19mYW5fZmFpbHVyZShhZGFwdGVyLCBlaWNyKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpKSB7CiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0udG90YWxfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0udG90YWxfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT5yeF9yaW5nWzBdLnRvdGFsX3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT5yeF9yaW5nWzBdLnRvdGFsX2J5dGVzID0gMDsKIAkJLyogd291bGQgZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgYnV0IEVJQU0gZGlzYWJsZWQgaXQgKi8KLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTQ1OSw2ICsxNTc2LDM5IEBACiB9CiAKIC8qKgorICogaXhnYmVfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCB+MCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMSksIH4wKTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQ19FWCgyKSwgfjApOworCX0KKwlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCX0gZWxzZSB7CisJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9lbmFibGVfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBtYXNrID0gSVhHQkVfRUlNU19SVFhfUVVFVUU7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgbWFzayk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVNfRVgoMSksIG1hc2sgPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDIpLAorCQkgICAgICAgICAgICAgICAgKG1hc2sgPDwgMTYgfCBtYXNrKSk7CisJfQorCS8qIHNraXAgdGhlIGZsdXNoICovCit9CisKKy8qKgogICogaXhnYmVfY29uZmlndXJlX21zaV9hbmRfbGVnYWN5IC0gSW5pdGlhbGl6ZSBQSU4gKElOVEEuLi4pIGFuZCBNU0kgaW50ZXJydXB0cwogICoKICAqKi8KQEAgLTE0NjksOCArMTYxOSw4IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKDApLAogCSAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoYWRhcHRlci0+ZWl0cl9wYXJhbSkpOwogCi0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9SWF9RVUVVRSgwKSwgMCk7Ci0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9UWF9RVUVVRSgwKSwgMCk7CisJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMCwgMCwgMCk7CisJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMSwgMCwgMCk7CiAKIAltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCAwLCAwKTsKIAltYXBfdmVjdG9yX3RvX3R4cShhZGFwdGVyLCAwLCAwKTsKQEAgLTE0ODYsNyArMTYzNiw3IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9jb25maWd1cmVfdHgoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdTY0IHRkYmEsIHRkd2JhOworCXU2NCB0ZGJhOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGksIGosIHRkbGVuLCB0eGN0cmw7CiAKQEAgLTE0OTksMTEgKzE2NDksNiBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REQkFMKGopLAogCQkgICAgICAgICAgICAgICAgKHRkYmEgJiBETUFfMzJCSVRfTUFTSykpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REQkFIKGopLCAodGRiYSA+PiAzMikpOwotCQl0ZHdiYSA9IHJpbmctPmRtYSArCi0JCSAgICAgICAgKHJpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKSk7Ci0JCXRkd2JhIHw9IElYR0JFX1REV0JBTF9IRUFEX1dCX0VOQUJMRTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFdCQUwoaiksIHRkd2JhICYgRE1BXzMyQklUX01BU0spOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REV0JBSChqKSwgKHRkd2JhID4+IDMyKSk7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERMRU4oaiksIHRkbGVuKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREgoaiksIDApOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REVChqKSwgMCk7CkBAIC0xNTE2LDI2ICsxNjYxLDI1IEBACiAJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKGopLCB0eGN0cmwpOwogCX0KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qIFdlIGVuYWJsZSA4IHRyYWZmaWMgY2xhc3NlcywgRENCIG9ubHkgKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRRQywgKElYR0JFX01UUUNfUlRfRU5BIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9NVFFDXzhUQ184VFEpKTsKKwl9CiB9CiAKLSNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVAkyCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQgMgogCiBzdGF0aWMgdm9pZCBpeGdiZV9jb25maWd1cmVfc3JyY3RsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3Jpbmc7CiAJdTMyIHNycmN0bDsKLQlpbnQgcXVldWUwOworCWludCBxdWV1ZTAgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAotCS8qIHByb2dyYW0gb25lIHNycmN0bCByZWdpc3RlciBwZXIgVk1EcSBpbmRleCAqLwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfVk1EUV9FTkFCTEVEKSB7Ci0JCWxvbmcgc2hpZnQsIGxlbjsKLQkJbWFzayA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzazsKLQkJbGVuID0gc2l6ZW9mKGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV0ubWFzaykgKiA4OwotCQlzaGlmdCA9IGZpbmRfZmlyc3RfYml0KCZtYXNrLCBsZW4pOwotCQlxdWV1ZTAgPSBpbmRleCAmIG1hc2s7Ci0JCWluZGV4ID0gKGluZGV4ICYgbWFzaykgPj4gc2hpZnQ7Ci0JLyogcHJvZ3JhbSBvbmUgc3JyY3RsIHBlciBSU1MgcXVldWUgc2luY2UgUkRSWENUTC5NVk1FTiBpcyBlbmFibGVkICovCisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXF1ZXVlMCA9IGluZGV4OwogCX0gZWxzZSB7CiAJCW1hc2sgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2s7CiAJCXF1ZXVlMCA9IGluZGV4ICYgbWFzazsKQEAgLTE1NTAsNyArMTY5NCwxNCBAQAogCXNycmN0bCAmPSB+SVhHQkVfU1JSQ1RMX0JTSVpFUEtUX01BU0s7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKLQkJc3JyY3RsIHw9IElYR0JFX1JYQlVGRkVSXzIwNDggPj4gSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOworCQl1MTYgYnVmc3ogPSBJWEdCRV9SWEJVRkZFUl8yMDQ4OworCQkvKiBncm93IHRoZSBhbW91bnQgd2UgY2FuIHJlY2VpdmUgb24gbGFyZ2UgcGFnZSBtYWNoaW5lcyAqLworCQlpZiAoYnVmc3ogPCAoUEFHRV9TSVpFIC8gMikpCisJCQlidWZzeiA9IChQQUdFX1NJWkUgLyAyKTsKKwkJLyogY2FwIHRoZSBidWZzeiBhdCBvdXIgbGFyZ2VzdCBkZXNjcmlwdG9yIHNpemUgKi8KKwkJYnVmc3ogPSBtaW4oKHUxNilJWEdCRV9NQVhfUlhCVUZGRVIsIGJ1ZnN6KTsKKworCQlzcnJjdGwgfD0gYnVmc3ogPj4gSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOwogCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVM7CiAJCXNycmN0bCB8PSAoKElYR0JFX1JYX0hEUl9TSVpFIDw8CiAJCSAgICAgICAgICAgIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQpICYKQEAgLTE1NjUsNDAgKzE3MTYsMTEgQEAKIAkJCXNycmN0bCB8PSByeF9yaW5nLT5yeF9idWZfbGVuID4+CiAJCQkgICAgICAgICAgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOwogCX0KKwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1NSUkNUTChpbmRleCksIHNycmN0bCk7CiB9CiAKIC8qKgotICogaXhnYmVfZ2V0X3NrYl9oZHIgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIExSTyBoZWFkZXIgcHJvY2Vzc2luZwotICogQHNrYjogcG9pbnRlciB0byBza19idWZmIHRvIGJlIGFkZGVkIHRvIExSTyBwYWNrZXQKLSAqIEBpcGhkcjogcG9pbnRlciB0byBpcCBoZWFkZXIgc3RydWN0dXJlCi0gKiBAdGNwaDogcG9pbnRlciB0byB0Y3AgaGVhZGVyIHN0cnVjdHVyZQotICogQGhkcl9mbGFnczogcG9pbnRlciB0byBoZWFkZXIgZmxhZ3MKLSAqIEBwcml2OiBwcml2YXRlIGRhdGEKLSAqKi8KLXN0YXRpYyBpbnQgaXhnYmVfZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwaGRyLCB2b2lkICoqdGNwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCi17Ci0JdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgPSBwcml2OwotCi0JLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZhbGlkIElQdjQgVENQIHBhY2tldCAqLwotCWlmICghKChpeGdiZV9nZXRfcGt0X2luZm8ocnhfZGVzYykgJiBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFY0KSAmJgotCSAgICAgKGl4Z2JlX2dldF9wa3RfaW5mbyhyeF9kZXNjKSAmIElYR0JFX1JYREFEVl9QS1RUWVBFX1RDUCkpKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBTZXQgbmV0d29yayBoZWFkZXJzICovCi0Jc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7Ci0Jc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOwotCSppcGhkciA9IGlwX2hkcihza2IpOwotCSp0Y3BoID0gdGNwX2hkcihza2IpOwotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCi0KLS8qKgogICogaXhnYmVfY29uZmlndXJlX3J4IC0gQ29uZmlndXJlIDgyNTl4IFJlY2VpdmUgVW5pdCBhZnRlciBSZXNldAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKgpAQCAtMTYxNiw4ICsxNzM4LDcgQEAKIAkgICAgICAgICAgICAgICAgICAweEE1NEYyQkVDLCAweEVBNDlBRjdDLCAweEUyMTRBRDNELCAweEI4NTVBQUJFLAogCSAgICAgICAgICAgICAgICAgIDB4NkEzRTY3RUEsIDB4MTQzNjREMTcsIDB4M0JFRDIwMER9OwogCXUzMiBmY3RybCwgaGxyZWcwOwotCXUzMiBwYWdlczsKLQl1MzIgcmV0YSA9IDAsIG1ycWM7CisJdTMyIHJldGEgPSAwLCBtcnFjID0gMDsKIAl1MzIgcmRyeGN0bDsKIAlpbnQgcnhfYnVmX2xlbjsKIApAQCAtMTYyNyw2ICsxNzQ4LDE0IEBACiAJLyogU2V0IHRoZSBSWCBidWZmZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgbW9kZSAqLwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgewogCQlyeF9idWZfbGVuID0gSVhHQkVfUlhfSERSX1NJWkU7CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCS8qIFBTUlRZUEUgbXVzdCBiZSBpbml0aWFsaXplZCBpbiA4MjU5OSAqLworCQkJdTMyIHBzcnR5cGUgPSBJWEdCRV9QU1JUWVBFX1RDUEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfVURQSERSIHwKKwkJCSAgICAgICAgICAgICAgSVhHQkVfUFNSVFlQRV9JUFY0SERSIHwKKwkJCSAgICAgICAgICAgICAgSVhHQkVfUFNSVFlQRV9JUFY2SERSOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QU1JUWVBFKDApLCBwc3J0eXBlKTsKKwkJfQogCX0gZWxzZSB7CiAJCWlmIChuZXRkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCiAJCQlyeF9idWZfbGVuID0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkU7CkBAIC0xNjM3LDYgKzE3NjYsNyBAQAogCWZjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCk7CiAJZmN0cmwgfD0gSVhHQkVfRkNUUkxfQkFNOwogCWZjdHJsIHw9IElYR0JFX0ZDVFJMX0RQRjsgLyogZGlzY2FyZCBwYXVzZSBmcmFtZXMgd2hlbiBGQyBlbmFibGVkICovCisJZmN0cmwgfD0gSVhHQkVfRkNUUkxfUE1DRjsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOwogCiAJaGxyZWcwID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0hMUkVHMCk7CkBAIC0xNjQ2LDggKzE3NzYsNiBAQAogCQlobHJlZzAgfD0gSVhHQkVfSExSRUcwX0pVTUJPRU47CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ITFJFRzAsIGhscmVnMCk7CiAKLQlwYWdlcyA9IFBBR0VfVVNFX0NPVU5UKGFkYXB0ZXItPm5ldGRldi0+bXR1KTsKLQogCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwpAQCAtMTY2NiwzNyArMTc5NCw0NCBAQAogCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9SREgoaik7CiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0udGFpbCA9IElYR0JFX1JEVChqKTsKIAkJYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9idWZfbGVuID0gcnhfYnVmX2xlbjsKLQkJLyogSW50aXRpYWwgTFJPIFNldHRpbmdzICovCi0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5tYXhfYWdnciA9IElYR0JFX01BWF9MUk9fQUdHUkVHQVRFOwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IubWF4X2Rlc2MgPSBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuZ2V0X3NrYl9oZWFkZXIgPSBpeGdiZV9nZXRfc2tiX2hkcjsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfRVhUUkFDVF9WTEFOX0lEOwotCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fTkVUUE9MTCkpCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuZmVhdHVyZXMgfD0gTFJPX0ZfTkFQSTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCQlpeGdiZV9jb25maWd1cmVfc3JyY3RsKGFkYXB0ZXIsIGopOwogCX0KIAotCS8qCi0JICogRm9yIFZNRHEgc3VwcG9ydCBvZiBkaWZmZXJlbnQgZGVzY3JpcHRvciB0eXBlcyBvcgotCSAqIGJ1ZmZlciBzaXplcyB0aHJvdWdoIHRoZSB1c2Ugb2YgbXVsdGlwbGUgU1JSQ1RMCi0JICogcmVnaXN0ZXJzLCBSRFJYQ1RMLk1WTUVOIG11c3QgYmUgc2V0IHRvIDEKLQkgKgotCSAqIGFsc28sIHRoZSBtYW51YWwgZG9lc24ndCBtZW50aW9uIGl0IGNsZWFybHkgYnV0IERDQSBoaW50cwotCSAqIHdpbGwgb25seSB1c2UgcXVldWUgMCdzIHRhZ3MgdW5sZXNzIHRoaXMgYml0IGlzIHNldC4gIFNpZGUKLQkgKiBlZmZlY3RzIG9mIHNldHRpbmcgdGhpcyBiaXQgYXJlIG9ubHkgdGhhdCBTUlJDVEwgbXVzdCBiZQotCSAqIGZ1bGx5IHByb2dyYW1tZWQgWzAuLjE1XQotCSAqLwotCWlmIChhZGFwdGVyLT5mbGFncyAmCi0JICAgIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkvKgorCQkgKiBGb3IgVk1EcSBzdXBwb3J0IG9mIGRpZmZlcmVudCBkZXNjcmlwdG9yIHR5cGVzIG9yCisJCSAqIGJ1ZmZlciBzaXplcyB0aHJvdWdoIHRoZSB1c2Ugb2YgbXVsdGlwbGUgU1JSQ1RMCisJCSAqIHJlZ2lzdGVycywgUkRSWENUTC5NVk1FTiBtdXN0IGJlIHNldCB0byAxCisJCSAqCisJCSAqIGFsc28sIHRoZSBtYW51YWwgZG9lc24ndCBtZW50aW9uIGl0IGNsZWFybHkgYnV0IERDQSBoaW50cworCQkgKiB3aWxsIG9ubHkgdXNlIHF1ZXVlIDAncyB0YWdzIHVubGVzcyB0aGlzIGJpdCBpcyBzZXQuICBTaWRlCisJCSAqIGVmZmVjdHMgb2Ygc2V0dGluZyB0aGlzIGJpdCBhcmUgb25seSB0aGF0IFNSUkNUTCBtdXN0IGJlCisJCSAqIGZ1bGx5IHByb2dyYW1tZWQgWzAuLjE1XQorCQkgKi8KIAkJcmRyeGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMKTsKIAkJcmRyeGN0bCB8PSBJWEdCRV9SRFJYQ1RMX01WTUVOOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEUlhDVEwsIHJkcnhjdGwpOwogCX0KIAorCS8qIFByb2dyYW0gTVJRQyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiBxdWV1ZXMgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWludCBtYXNrID0gYWRhcHRlci0+ZmxhZ3MgJiAoCisJCQkJSVhHQkVfRkxBR19SU1NfRU5BQkxFRAorCQkJCXwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRAorCQkJCSk7CisKKwkJc3dpdGNoIChtYXNrKSB7CisJCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpOgorCQkJbXJxYyA9IElYR0JFX01SUUNfUlNTRU47CisJCQlicmVhazsKKwkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6CisJCQltcnFjID0gSVhHQkVfTVJRQ19SVDhUQ0VOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CiAJCS8qIEZpbGwgb3V0IHJlZGlyZWN0aW9uIHRhYmxlICovCiAJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMTI4OyBpKyssIGorKykgewpAQCAtMTcxMywxOSArMTg0OCwxNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlNTUksoaSksIHNlZWRbaV0pOwogCi0JCW1ycWMgPSBJWEdCRV9NUlFDX1JTU0VOCisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCQltcnFjIHw9IElYR0JFX01SUUNfUlNTRU47CiAJCSAgICAvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjQKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWF9UQ1AKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2Ci0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVURQOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIG1ycWMpOworCQltcnFjIHw9IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjQKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQCisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNgorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQCisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9VRFA7CiAJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgbXJxYyk7CiAKIAlyeGNzdW0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDU1VNKTsKIApAQCAtMTc0Miw2ICsxODc1LDEyIEBACiAJfQogCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENTVU0sIHJ4Y3N1bSk7CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXJkcnhjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkRSWENUTCk7CisJCXJkcnhjdGwgfD0gSVhHQkVfUkRSWENUTF9DUkNTVFJJUDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMLCByZHJ4Y3RsKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQpAQCAtMTc3NSw2ICsxOTE0LDcgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTMyIGN0cmw7CisJaW50IGksIGo7CiAKIAlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJaXhnYmVfaXJxX2Rpc2FibGUoYWRhcHRlcik7CkBAIC0xNzg2LDE4ICsxOTI2LDI0IEBACiAJICogbm90IGluIERDQiBtb2RlLgogCSAqLwogCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOwotCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUU7Ci0JY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKLQlpeGdiZV92bGFuX3J4X2FkZF92aWQobmV0ZGV2LCAwKTsKLQotCWlmIChncnApIHsKLQkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwotCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMKTsKLQkJY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOwogCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WRkU7CisJCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7CisJCWN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwsIGN0cmwpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfUlhEQ1RMKGopKTsKKwkJCWN0cmwgfD0gSVhHQkVfUlhEQ1RMX1ZNRTsKKwkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSwgY3RybCk7CisJCX0KIAl9CisJaXhnYmVfdmxhbl9yeF9hZGRfdmlkKG5ldGRldiwgMCk7CiAKIAlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKQEAgLTE5NjAsOSArMjEwNiwyMSBAQAogCX0KIAkvKiBFbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJdmxuY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTE5DVFJMKTsKLQl2bG5jdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FIHwgSVhHQkVfVkxOQ1RSTF9WRkU7Ci0JdmxuY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJdmxuY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOworCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCX0gZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXZsbmN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WRkU7CisJCXZsbmN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCQl2bG5jdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CisJCQl2bG5jdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgdmxuY3RybCk7CisJCX0KKwl9CiAJaHctPm1hYy5vcHMuc2V0X3ZmdGEoJmFkYXB0ZXItPmh3LCAwLCAwLCB0cnVlKTsKIH0KIApAQCAtMTk5MywxMyArMjE1MSwxMTUgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCAtIDEpKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2lzX3NmcChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CisJY2FzZSBpeGdiZV9waHlfc2ZwX2F2YWdvOgorCWNhc2UgaXhnYmVfcGh5X3NmcF9mdGw6CisJY2FzZSBpeGdiZV9waHlfc2ZwX2ludGVsOgorCWNhc2UgaXhnYmVfcGh5X3NmcF91bmtub3duOgorCWNhc2UgaXhnYmVfcGh5X3R3X3R5Y286CisJY2FzZSBpeGdiZV9waHlfdHdfdW5rbm93bjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCisgKiBpeGdiZV9zZnBfbGlua19jb25maWcgLSBzZXQgdXAgU0ZQKyBsaW5rCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCQlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCQkvKgorCQkJICogSW4gbXVsdGlzcGVlZCBmaWJlciBzZXR1cHMsIHRoZSBkZXZpY2UgbWF5IG5vdCBoYXZlCisJCQkgKiBoYWQgYSBwaHlzaWNhbCBjb25uZWN0aW9uIHdoZW4gdGhlIGRyaXZlciBsb2FkZWQuCisJCQkgKiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSBpbml0aWFsIGxpbmsgY29uZmlndXJhdGlvbgorCQkJICogY291bGRuJ3QgZ2V0IHRoZSBNQUMgaW50byAxMEcgb3IgMUcgbW9kZSwgc28gd2UnbGwKKwkJCSAqIG5ldmVyIGhhdmUgYSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IGZpcmUuCisJCQkgKiBXZSBuZWVkIHRvIHRyeSBhbmQgZm9yY2UgYW4gYXV0b25lZ290aWF0aW9uCisJCQkgKiBzZXNzaW9uLCB0aGVuIGJyaW5nIHVwIGxpbmsuCisJCQkgKi8KKwkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CisJCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEaXJlY3QgQXR0YWNoIEN1IGFuZCBub24tbXVsdGlzcGVlZCBmaWJlciBtb2R1bGVzCisJCQkgKiBzdGlsbCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgcHJpb3IgdG8KKwkJCSAqIGF0dGVtcHRpbmcgbGluay4KKwkJCSAqLworCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSykpCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJCX0KK30KKworLyoqCisgKiBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnIC0gc2V0IHVwIG5vbi1TRlArIGxpbmsKKyAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGl4Z2JlX25vbl9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgYXV0b25lZzsKKwlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwl1MzIgcmV0ID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisKKwlpZiAoaHctPm1hYy5vcHMuY2hlY2tfbGluaykKKwkJcmV0ID0gaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmF1dG9uZWcsICZsaW5rX3VwLCBmYWxzZSk7CisKKwlpZiAocmV0KQorCQlnb3RvIGxpbmtfY2ZnX291dDsKKworCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCisJCXJldCA9IGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGxpbmtfY2ZnX291dDsKKworCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQorCQlyZXQgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCBsaW5rX3VwKTsKK2xpbmtfY2ZnX291dDoKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIElYR0JFX01BWF9SWF9ERVNDX1BPTEwgMTAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9yeF9kZXNjX3F1ZXVlX2VuYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByeHIpCit7CisJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nW3J4cl0ucmVnX2lkeDsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBJWEdCRV9NQVhfUlhfREVTQ19QT0xMOyBrKyspIHsKKwkJaWYgKElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywKKwkJICAgICAgICAgICAgICAgICAgIElYR0JFX1JYRENUTChqKSkgJiBJWEdCRV9SWERDVExfRU5BQkxFKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCW1zbGVlcCgxKTsKKwl9CisJaWYgKGsgPj0gSVhHQkVfTUFYX1JYX0RFU0NfUE9MTCkgeworCQlEUFJJTlRLKERSViwgRVJSLCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCAiCisJCSAgICAgICAgIm5vdCBzZXQgd2l0aGluIHRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcnhyKTsKKwl9CisJaXhnYmVfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPnJ4X3JpbmdbcnhyXSwKKwkgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5jb3VudCAtIDEpKTsKK30KKwogc3RhdGljIGludCBpeGdiZV91cF9jb21wbGV0ZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGksIGogPSAwOworCWludCBudW1fcnhfcmluZ3MgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWludCBlcnI7CiAJaW50IG1heF9mcmFtZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKIAl1MzIgdHhkY3RsLCByeGRjdGwsIG1oYWRkOworCXUzMiBkbWF0eGN0bDsKIAl1MzIgZ3BpZTsKIAogCWl4Z2JlX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwpAQCAtMjAzMSw2ICsyMjkxLDEzIEBACiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CiAJfQogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlncGllID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dQSUUpOworCQlncGllIHw9IElYR0JFX1NEUDFfR1BJRU47CisJCWdwaWUgfD0gSVhHQkVfU0RQMl9HUElFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HUElFLCBncGllKTsKKwl9CisKIAltaGFkZCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NSEFERCk7CiAJaWYgKG1heF9mcmFtZSAhPSAobWhhZGQgPj4gSVhHQkVfTUhBRERfTUZTX1NISUZUKSkgewogCQltaGFkZCAmPSB+SVhHQkVfTUhBRERfTUZTX01BU0s7CkBAIC0yMDQ0LDExICsyMzExLDIzIEBACiAJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwoaikpOwogCQkvKiBlbmFibGUgV1RIUkVTSD04IGRlc2NyaXB0b3JzLCB0byBlbmNvdXJhZ2UgYnVyc3Qgd3JpdGViYWNrICovCiAJCXR4ZGN0bCB8PSAoOCA8PCAxNik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOworCX0KKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJLyogRE1BVFhDVEwuRU4gbXVzdCBiZSBzZXQgYWZ0ZXIgYWxsIFR4IHF1ZXVlIGNvbmZpZyBpcyBkb25lICovCisJCWRtYXR4Y3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMKTsKKwkJZG1hdHhjdGwgfD0gSVhHQkVfRE1BVFhDVExfVEU7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRE1BVFhDVEwsIGRtYXR4Y3RsKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X3JpbmdzOyBpKyspIHsKIAkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKIAkJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CiAJCS8qIGVuYWJsZSBQVEhSRVNIPTMyIGRlc2NyaXB0b3JzIChoYWxmIHRoZSBpbnRlcm5hbCBjYWNoZSkKQEAgLTIwNTcsMTkgKzIzMzYsMjIgQEAKIAkJcnhkY3RsIHw9IDB4MDAyMDsKIAkJcnhkY3RsIHw9IElYR0JFX1JYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopLCByeGRjdGwpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQkJaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoYWRhcHRlciwgaSk7CiAJfQogCS8qIGVuYWJsZSBhbGwgcmVjZWl2ZXMgKi8KIAlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKLQlyeGRjdGwgfD0gKElYR0JFX1JYQ1RSTF9ETUJZUFMgfCBJWEdCRV9SWENUUkxfUlhFTik7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJ4ZGN0bCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJcnhkY3RsIHw9IChJWEdCRV9SWENUUkxfRE1CWVBTIHwgSVhHQkVfUlhDVFJMX1JYRU4pOworCWVsc2UKKwkJcnhkY3RsIHw9IElYR0JFX1JYQ1RSTF9SWEVOOworCWh3LT5tYWMub3BzLmVuYWJsZV9yeF9kbWEoaHcsIHJ4ZGN0bCk7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkKIAkJaXhnYmVfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CiAJZWxzZQogCQlpeGdiZV9jb25maWd1cmVfbXNpX2FuZF9sZWdhY3koYWRhcHRlcik7CiAKLQlpeGdiZV9uYXBpX2FkZF9hbGwoYWRhcHRlcik7Ci0KIAljbGVhcl9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCWl4Z2JlX25hcGlfZW5hYmxlX2FsbChhZGFwdGVyKTsKIApAQCAtMjA3OCw2ICsyMzYwLDI4IEBACiAKIAlpeGdiZV9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCisJLyoKKwkgKiBGb3IgaG90LXBsdWdnYWJsZSBTRlArIGRldmljZXMsIGEgbmV3IFNGUCsgbW9kdWxlIG1heSBoYXZlCisJICogYXJyaXZlZCBiZWZvcmUgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQuICBXZSBuZWVkIHRvIGtpY2sgb2ZmCisJICogdGhlIFNGUCsgbW9kdWxlIHNldHVwIGZpcnN0LCB0aGVuIHRyeSB0byBicmluZyB1cCBsaW5rLgorCSAqIElmIHdlJ3JlIG5vdCBob3QtcGx1Z2dhYmxlIFNGUCssIHdlIGp1c3QgbmVlZCB0byBjb25maWd1cmUgbGluaworCSAqIGFuZCBicmluZyBpdCB1cC4KKwkgKi8KKwllcnIgPSBody0+cGh5Lm9wcy5pZGVudGlmeShodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiUEhZIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBOSUMgJWRcbiIsIGVycik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGl4Z2JlX2lzX3NmcChodykpIHsKKwkJaXhnYmVfc2ZwX2xpbmtfY29uZmlnKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWVyciA9IGl4Z2JlX25vbl9zZnBfbGlua19jb25maWcoaHcpOworCQlpZiAoZXJyKQorCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAibGlua19jb25maWcgRkFJTEVEICVkXG4iLCBlcnIpOworCX0KKwogCS8qIGVuYWJsZSB0cmFuc21pdHMgKi8KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAKQEAgLTIxMDQsNiArMjQwOCw4IEBACiAJLyogaGFyZHdhcmUgaGFzIGJlZW4gcmVzZXQsIHdlIG5lZWQgdG8gcmVsb2FkIHNvbWUgdGhpbmdzICovCiAJaXhnYmVfY29uZmlndXJlKGFkYXB0ZXIpOwogCisJaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOworCiAJcmV0dXJuIGl4Z2JlX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOwogfQogCkBAIC0yMTY1LDggKzI0NzEsMTAgQEAKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIAlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPmhlYWQpOwotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJaWYgKHJ4X3JpbmctPmhlYWQpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+aGVhZCk7CisJaWYgKHJ4X3JpbmctPnRhaWwpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CiB9CiAKIC8qKgpAQCAtMjE5Nyw4ICsyNTA1LDEwIEBACiAJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwogCi0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT5oZWFkKTsKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworCWlmICh0eF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPmhlYWQpOworCWlmICh0eF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOwogfQogCiAvKioKQEAgLTIyNjEsNiArMjU3MSwxMSBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwKIAkJICAgICAgICAgICAgICAgICh0eGRjdGwgJiB+SVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwogCX0KKwkvKiBEaXNhYmxlIHRoZSBUeCBETUEgZW5naW5lIG9uIDgyNTk5ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCwKKwkJICAgICAgICAgICAgICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRE1BVFhDVEwpICYKKwkJICAgICAgICAgICAgICAgICB+SVhHQkVfRE1BVFhDVExfVEUpKTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKQEAgLTIyOTcsMTAgKzI2MTIsMTAgQEAKICAqKi8KIHN0YXRpYyBpbnQgaXhnYmVfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGNvbnRhaW5lcl9vZihuYXBpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9xX3ZlY3RvciwgbmFwaSk7CisJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9CisJICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpeGdiZV9xX3ZlY3RvciwgbmFwaSk7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKLQlpbnQgdHhfY2xlYW5lZCwgd29ya19kb25lID0gMDsKKwlpbnQgdHhfY2xlYW5fY29tcGxldGUsIHdvcmtfZG9uZSA9IDA7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewpAQCAtMjMwOSwxOSArMjYyNCwxOSBAQAogCX0KICNlbmRpZgogCi0JdHhfY2xlYW5lZCA9IGl4Z2JlX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKLQlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKwl0eF9jbGVhbl9jb21wbGV0ZSA9IGl4Z2JlX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKKwlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuX2NvbXBsZXRlKQogCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cihhZGFwdGVyKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlpeGdiZV9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQkJaXhnYmVfaXJxX2VuYWJsZV9xdWV1ZXMoYWRhcHRlcik7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC0yMzUzLDY4ICsyNjY4LDc2IEBACiAJaXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfc2V0X251bV9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3NldF9kY2JfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBucnEgPSAxLCBudHEgPSAxOwotCWludCBmZWF0dXJlX21hc2sgPSAwLCByc3NfaSwgcnNzX207Ci0JaW50IGRjYl9pLCBkY2JfbTsKKwlib29sIHJldCA9IGZhbHNlOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKLQkJZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKLQkJZGNiX20gPSAwOwotCQlyc3NfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOwotCQlyc3NfbSA9IDA7Ci0JCWZlYXR1cmVfbWFzayB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKLQotCQlzd2l0Y2ggKGFkYXB0ZXItPmZsYWdzICYgZmVhdHVyZV9tYXNrKSB7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgfCBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKToKLQkJCWRjYl9tID0gMHg3IDw8IDM7Ci0JCQlyc3NfaSA9IG1pbig4LCByc3NfaSk7Ci0JCQlyc3NfbSA9IDB4NzsKLQkJCW5ycSA9IGRjYl9pICogcnNzX2k7Ci0JCQludHEgPSBtaW4oTUFYX1RYX1FVRVVFUywgZGNiX2kgKiByc3NfaSk7Ci0JCQlicmVhazsKLQkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlkY2JfbSA9IDB4NyA8PCAzOwotCQkJbnJxID0gZGNiX2k7Ci0JCQludHEgPSBkY2JfaTsKLQkJCWJyZWFrOwotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKLQkJCXJzc19tID0gMHhGOwotCQkJbnJxID0gcnNzX2k7Ci0JCQludHEgPSByc3NfaTsKLQkJCWJyZWFrOwotCQljYXNlIDA6Ci0JCWRlZmF1bHQ6Ci0JCQlkY2JfaSA9IDA7Ci0JCQlkY2JfbSA9IDA7Ci0JCQlyc3NfaSA9IDA7Ci0JCQlyc3NfbSA9IDA7Ci0JCQlucnEgPSAxOwotCQkJbnRxID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2FuaXR5IGNoZWNrLCB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSB6ZXJvIHF1ZXVlcyAqLwotCQlucnEgPSAobnJxID86MSk7Ci0JCW50cSA9IChudHEgPzoxKTsKLQotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyA9IGRjYl9pOwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0ubWFzayA9IGRjYl9tOwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlcyA9IHJzc19pOwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzayA9IHJzc19tOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlucnEgPSAxOwotCQludHEgPSAxOwotCQlicmVhazsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5tYXNrID0gMHg3IDw8IDM7CisJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPQorCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPQorCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisJCXJldCA9IHRydWU7CisJfSBlbHNlIHsKKwkJcmV0ID0gZmFsc2U7CiAJfQogCi0JYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG5ycTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbnRxOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyoqCisgKiBpeGdiZV9zZXRfcnNzX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBSU1MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogVGhpcyBpcyBvdXIgImJhc2UiIG11bHRpcXVldWUgbW9kZS4gIFJTUyAoUmVjZWl2ZSBTaWRlIFNjYWxpbmcpIHdpbGwgdHJ5CisgKiB0byBhbGxvY2F0ZSBvbmUgUnggcXVldWUgcGVyIENQVSwgYW5kIGlmIGF2YWlsYWJsZSwgb25lIFR4IHF1ZXVlIHBlciBDUFUuCisgKgorICoqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3NldF9yc3NfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CisJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrID0gMHhGOworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOworCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBxdWV1ZSBhbGxvY2F0aW9uIHJvdXRpbmUuICBUaGUgb3JkZXIgaGVyZSBpcyB2ZXJ5CisgKiBpbXBvcnRhbnQsIHN0YXJ0aW5nIHdpdGggdGhlICJtb3N0IiBudW1iZXIgb2YgZmVhdHVyZXMgdHVybmVkIG9uIGF0IG9uY2UsCisgKiBhbmQgZW5kaW5nIHdpdGggdGhlIHNtYWxsZXN0IHNldCBvZiBmZWF0dXJlcy4gIFRoaXMgd2F5IGxhcmdlIGNvbWJpbmF0aW9ucworICogY2FuIGJlIGFsbG9jYXRlZCBpZiB0aGV5J3JlIHR1cm5lZCBvbiwgYW5kIHNtYWxsZXIgY29tYmluYXRpb25zIGFyZSB0aGUKKyAqIGZhbGx0aHJvdWdoIGNvbmRpdGlvbnMuCisgKgorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2V0X251bV9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogU3RhcnQgd2l0aCBiYXNlIGNhc2UgKi8KKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKKworI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKKwlpZiAoaXhnYmVfc2V0X2RjYl9xdWV1ZXMoYWRhcHRlcikpCisJCXJldHVybjsKKworI2VuZGlmCisJaWYgKGl4Z2JlX3NldF9yc3NfcXVldWVzKGFkYXB0ZXIpKQorCQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX2FjcXVpcmVfbXNpeF92ZWN0b3JzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjQ2MCw3MSArMjc4MywxMDQgQEAKIAkJaXhnYmVfc2V0X251bV9xdWV1ZXMoYWRhcHRlcik7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQ7IC8qIFdvb3QhICovCi0JCWFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgPSB2ZWN0b3JzOworCQkvKgorCQkgKiBBZGp1c3QgZm9yIG9ubHkgdGhlIHZlY3RvcnMgd2UnbGwgdXNlLCB3aGljaCBpcyBtaW5pbXVtCisJCSAqIG9mIG1heF9tc2l4X3FfdmVjdG9ycyArIE5PTl9RX1ZFQ1RPUlMsIG9yIHRoZSBudW1iZXIgb2YKKwkJICogdmVjdG9ycyB3ZSB3ZXJlIGFsbG9jYXRlZC4KKwkJICovCisJCWFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgPSBtaW4odmVjdG9ycywKKwkJICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyArIE5PTl9RX1ZFQ1RPUlMpOwogCX0KIH0KIAogLyoqCisgKiBpeGdiZV9jYWNoZV9yaW5nX3JzcyAtIERlc2NyaXB0b3IgcmluZyB0byByZWdpc3RlciBtYXBwaW5nIGZvciBSU1MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogQ2FjaGUgdGhlIGRlc2NyaXB0b3IgcmluZyBvZmZzZXRzIGZvciBSU1MgdG8gdGhlIGFzc2lnbmVkIHJpbmdzLgorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9jYWNoZV9yaW5nX3JzcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJCXJldCA9IHRydWU7CisJfSBlbHNlIHsKKwkJcmV0ID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKKy8qKgorICogaXhnYmVfY2FjaGVfcmluZ19kY2IgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgRENCCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIENhY2hlIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2Zmc2V0cyBmb3IgRENCIHRvIHRoZSBhc3NpZ25lZCByaW5ncy4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19kY2Ioc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJYm9vbCByZXQgPSBmYWxzZTsKKwlpbnQgZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQkvKiB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBpcyBhc3N1bWVkIHRvIGJlIHN5bW1ldHJpYyAqLworCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDM7CisJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAyOworCQkJfQorCQkJcmV0ID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJfQorCQkJcmV0ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGZhbHNlOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisvKioKICAqIGl4Z2JlX2NhY2hlX3JpbmdfcmVnaXN0ZXIgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBPbmNlIHdlIGtub3cgdGhlIGZlYXR1cmUtc2V0IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UsIHdlJ2xsIGNhY2hlCiAgKiB0aGUgcmVnaXN0ZXIgb2Zmc2V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgaXMgYXNzaWduZWQgdG8uCisgKgorICogTm90ZSwgdGhlIG9yZGVyIHRoZSB2YXJpb3VzIGZlYXR1cmUgY2FsbHMgaXMgaW1wb3J0YW50LiAgSXQgbXVzdCBzdGFydCB3aXRoCisgKiB0aGUgIm1vc3QiIGZlYXR1cmVzIGVuYWJsZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlbiB0cmlja2xlIGRvd24gdG8gdGhlCisgKiBsZWFzdCBhbW91bnQgb2YgZmVhdHVyZXMgdHVybmVkIG9uIGF0IG9uY2UuCiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBmZWF0dXJlX21hc2sgPSAwLCByc3NfaTsKLQlpbnQgaSwgdHhyX2lkeCwgcnhyX2lkeDsKLQlpbnQgZGNiX2k7CisJLyogc3RhcnQgd2l0aCBkZWZhdWx0IGNhc2UgKi8KKwlhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHggPSAwOworCWFkYXB0ZXItPnR4X3JpbmdbMF0ucmVnX2lkeCA9IDA7CiAKLQkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyAqLwotCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKLQljYXNlIGl4Z2JlX21hY184MjU5OEVCOgotCQlkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOwotCQlyc3NfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOwotCQl0eHJfaWR4ID0gMDsKLQkJcnhyX2lkeCA9IDA7Ci0JCWZlYXR1cmVfbWFzayB8PSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKLQkJc3dpdGNoIChhZGFwdGVyLT5mbGFncyAmIGZlYXR1cmVfbWFzaykgewotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZGNiX2k7IGkrKykgewotCQkJCWludCBqOwotCQkJCS8qIFJ4IGZpcnN0ICovCi0JCQkJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGorKykgewotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW3J4cl9pZHhdLnJlZ19pZHggPQotCQkJCQkJaSA8PCAzIHwgajsKLQkJCQkJcnhyX2lkeCsrOwotCQkJCX0KLQkJCQkvKiBUeCBub3cgKi8KLQkJCQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7Ci0JCQkJCWFkYXB0ZXItPnR4X3JpbmdbdHhyX2lkeF0ucmVnX2lkeCA9Ci0JCQkJCQlpIDw8IDIgfCAoaiA+PiAxKTsKLQkJCQkJaWYgKGogJiAxKQotCQkJCQkJdHhyX2lkeCsrOwotCQkJCX0KLQkJCX0KLQkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQkvKiB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBpcyBhc3N1bWVkIHRvIGJlIHN5bW1ldHJpYyAqLwotCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDM7Ci0JCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAyOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpOgotCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOwotCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMDoKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisJaWYgKGl4Z2JlX2NhY2hlX3JpbmdfZGNiKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKyNlbmRpZgorCWlmIChpeGdiZV9jYWNoZV9yaW5nX3JzcyhhZGFwdGVyKSkKKwkJcmV0dXJuOwogfQogCiAvKioKQEAgLTI1MzIsNyArMjg4OCw4IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIFdlIGFsbG9jYXRlIG9uZSByaW5nIHBlciBxdWV1ZSBhdCBydW4tdGltZSBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZQotICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuCisgKiBudW1iZXIgb2YgcXVldWVzIGF0IGNvbXBpbGUtdGltZS4gIFRoZSBwb2xsaW5nX25ldGRldiBhcnJheSBpcworICogaW50ZW5kZWQgZm9yIE11bHRpcXVldWUsIGJ1dCBzaG91bGQgd29yayBmaW5lIHdpdGggYSBzaW5nbGUgcXVldWUuCiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTI3MTEsNyArMzA2OCw4IEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKilkYXRhOwogCi0JLyogRG8gdGhlIHNmcF90aW1lciBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0IGR1ZSB0byB0aGUKKwkvKgorCSAqIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCiAJICogZGVsYXlzIHRoYXQgc2ZwKyBkZXRlY3Rpb24gcmVxdWlyZXMKIAkgKi8KIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfdGFzayk7CkBAIC0yNzg1LDYgKzMxNDMsMTAgQEAKIAlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlcyA9IHJzczsKIAlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOwogCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzID0gSVhHQkVfTUFYX0RDQl9JTkRJQ0VTOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5ODsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OTsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIAkvKiBDb25maWd1cmUgRENCIHRyYWZmaWMgY2xhc3NlcyAqLwpAQCAtMjgwNSwyMSArMzE2NywxNCBAQAogCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyk7CiAKICNlbmRpZgotCWlmIChody0+bWFjLm9wcy5nZXRfbWVkaWFfdHlwZSAmJgotCSAgICAoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSkKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFOwogCiAJLyogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KLQlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGl4Z2JlX2ZjX25vbmU7Ci0JaHctPmZjLnR5cGUgPSBpeGdiZV9mY19ub25lOworCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CiAJaHctPmZjLmhpZ2hfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRIOwogCWh3LT5mYy5sb3dfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRMOwogCWh3LT5mYy5wYXVzZV90aW1lID0gSVhHQkVfREVGQVVMVF9GQ1BBVVNFOwogCWh3LT5mYy5zZW5kX3hvbiA9IHRydWU7CiAKLQkvKiBzZWxlY3QgMTBHIGxpbmsgYnkgZGVmYXVsdCAqLwotCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjsKLQogCS8qIGVuYWJsZSBpdHIgYnkgZGVmYXVsdCBpbiBkeW5hbWljIG1vZGUgKi8KIAlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDE7CiAJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDIwMDAwOwpAQCAtMjg2Niw4ICszMjIxLDcgQEAKIAltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwotCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYykgKwotCSAgICAgICAgICAgICAgICBzaXplb2YodTMyKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLApAQCAtMjkyNiwxMiArMzI4MCw2IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplOwogCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIElYR0JFX01BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gdm1hbGxvYyhzaXplKTsKLQlpZiAoIXJ4X3JpbmctPmxyb19tZ3IubHJvX2FycikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciwgMCwgc2l6ZSk7Ci0KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiZV9yeF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKQEAgLTI5NjAsOCArMzMwOCw2IEBACiAJcmV0dXJuIDA7CiAKIGFsbG9jX2ZhaWxlZDoKLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTMwMjQsNyArMzM3MCw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT50eF9yaW5nW2ldLmRlc2MpCisJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzAzOSw5ICszMzg2LDYgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7Ci0KIAlpeGdiZV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsIHJ4X3JpbmcpOwogCiAJdmZyZWUocnhfcmluZy0+cnhfYnVmZmVyX2luZm8pOwpAQCAtMzA2Myw3ICszNDA3LDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJaWYgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uZGVzYykKKwkJCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0zMTI2LDYgKzM0NzEsOCBAQAogCiAJaXhnYmVfY29uZmlndXJlKGFkYXB0ZXIpOwogCisJaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOworCiAJZXJyID0gaXhnYmVfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVxX2lycTsKQEAgLTMxODAsNiArMzUyNyw3IEBACiAvKioKICAqIGl4Z2JlX25hcGlfYWRkX2FsbCAtIHByZXAgbmFwaSBzdHJ1Y3RzIGZvciB1c2UKICAqIEBhZGFwdGVyOiBwcml2YXRlIHN0cnVjdAorICoKICAqIGhlbHBlciBmdW5jdGlvbiB0byBuYXBpX2FkZCBlYWNoIHBvc3NpYmxlIHFfdmVjdG9yLT5uYXBpCiAgKi8KIHZvaWQgaXhnYmVfbmFwaV9hZGRfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMzI1Miw3ICszNjAwLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpeGdiZV9uYXBpX2FkZF9hbGwoYWRhcHRlcik7CiAJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CkBAIC0zMjcxLDYgKzM2MTgsOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGN0cmwsIGZjdHJsOworCXUzMiB3dWZjID0gYWRhcHRlci0+d29sOwogI2lmZGVmIENPTkZJR19QTQogCWludCByZXR2YWwgPSAwOwogI2VuZGlmCkBAIC0zMjkzLDEwICszNjQzLDM1IEBACiAJcmV0dmFsID0gcGNpX3NhdmVfc3RhdGUocGRldik7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLSNlbmRpZgogCi0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworI2VuZGlmCisJaWYgKHd1ZmMpIHsKKwkJaXhnYmVfc2V0X3J4X21vZGUobmV0ZGV2KTsKKworCQkvKiB0dXJuIG9uIGFsbC1tdWx0aSBtb2RlIGlmIHdha2Ugb24gbXVsdGljYXN0IGlzIGVuYWJsZWQgKi8KKwkJaWYgKHd1ZmMgJiBJWEdCRV9XVUZDX01DKSB7CisJCQlmY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CisJCQlmY3RybCB8PSBJWEdCRV9GQ1RSTF9NUEU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybCk7CisJCX0KKworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOworCQljdHJsIHw9IElYR0JFX0NUUkxfR0lPX0RJUzsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCBjdHJsKTsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVRkMsIHd1ZmMpOworCX0gZWxzZSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfV1VDLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9XVUZDLCAwKTsKKwl9CisKKwlpZiAod3VmYyAmJiBody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwl9IGVsc2UgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworCX0KIAogCWl4Z2JlX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKIApAQCAtMzMyMiw2ICszNjk3LDEyIEBACiAJdTY0IHRvdGFsX21wYyA9IDA7CiAJdTMyIGksIG1pc3NlZF9yeCA9IDAsIG1wYywgYnByYywgbHhvbiwgbHhvZmYsIHhvbl9vZmZfdG90OwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWFkYXB0ZXItPmh3X3J4X25vX2RtYV9yZXNvdXJjZXMgKz0KKwkJCSAgICAgICAgICAgICAgICAgICAgIElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFJEQyhpKSk7CisJfQorCiAJYWRhcHRlci0+c3RhdHMuY3JjZXJycyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1JDRVJSUyk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQkvKiBmb3IgcGFja2V0IGJ1ZmZlcnMgbm90IHVzZWQsIHRoZSByZWdpc3RlciBzaG91bGQgcmVhZCAwICovCkBAIC0zMzI5LDMyICszNzEwLDU1IEBACiAJCW1pc3NlZF9yeCArPSBtcGM7CiAJCWFkYXB0ZXItPnN0YXRzLm1wY1tpXSArPSBtcGM7CiAJCXRvdGFsX21wYyArPSBhZGFwdGVyLT5zdGF0cy5tcGNbaV07Ci0JCWFkYXB0ZXItPnN0YXRzLnJuYmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JOQkMoaSkpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJYWRhcHRlci0+c3RhdHMucm5iY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk5CQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFwdGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQVEMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xYnRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlRDKGkpKTsKIAkJYWRhcHRlci0+c3RhdHMucXByY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFicmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCUkMoaSkpOwotCQlhZGFwdGVyLT5zdGF0cy5weG9ucnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05SWEMoaSkpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9ucnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPTlJYQ05UKGkpKTsKKwkJCWFkYXB0ZXItPnN0YXRzLnB4b2ZmcnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQ05UKGkpKTsKKwkJCWFkYXB0ZXItPnN0YXRzLnFwcmRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFJEQyhpKSk7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9ucnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OUlhDKGkpKTsKKwkJCWFkYXB0ZXItPnN0YXRzLnB4b2ZmcnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGUlhDKGkpKTsKKwkJfQogCQlhZGFwdGVyLT5zdGF0cy5weG9udHhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05UWEMoaSkpOwotCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnB4b2ZmdHhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGVFhDKGkpKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZUWEMoaSkpOwogCX0KIAlhZGFwdGVyLT5zdGF0cy5ncHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUFJDKTsKIAkvKiB3b3JrIGFyb3VuZCBoYXJkd2FyZSBjb3VudGluZyBpc3N1ZSAqLwogCWFkYXB0ZXItPnN0YXRzLmdwcmMgLT0gbWlzc2VkX3J4OwogCiAJLyogODI1OTggaGFyZHdhcmUgb25seSBoYXMgYSAzMiBiaXQgY291bnRlciBpbiB0aGUgaGlnaCByZWdpc3RlciAqLwotCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsKLQlhZGFwdGVyLT5zdGF0cy5nb3RjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1RDSCk7Ci0JYWRhcHRlci0+c3RhdHMudG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JIKTsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsgLyogdG8gY2xlYXIgKi8KKwkJYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0wpOworCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOyAvKiB0byBjbGVhciAqLworCQlhZGFwdGVyLT5zdGF0cy50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkwpOworCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7IC8qIHRvIGNsZWFyICovCisJCWFkYXB0ZXItPnN0YXRzLmx4b25yeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05SWENOVCk7CisJCWFkYXB0ZXItPnN0YXRzLmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQ05UKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDKTsKKwkJYWRhcHRlci0+c3RhdHMubHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKKwkJYWRhcHRlci0+c3RhdHMuZ29yYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09SQ0gpOworCQlhZGFwdGVyLT5zdGF0cy5nb3RjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1RDSCk7CisJCWFkYXB0ZXItPnN0YXRzLnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJfQogCWJwcmMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQlBSQyk7CiAJYWRhcHRlci0+c3RhdHMuYnByYyArPSBicHJjOwogCWFkYXB0ZXItPnN0YXRzLm1wcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QUkMpOwotCWFkYXB0ZXItPnN0YXRzLm1wcmMgLT0gYnByYzsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5zdGF0cy5tcHJjIC09IGJwcmM7CiAJYWRhcHRlci0+c3RhdHMucm9jICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ST0MpOwogCWFkYXB0ZXItPnN0YXRzLnByYzY0ICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkM2NCk7CiAJYWRhcHRlci0+c3RhdHMucHJjMTI3ICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkMxMjcpOwpAQCAtMzM2Myw4ICszNzY3LDYgQEAKIAlhZGFwdGVyLT5zdGF0cy5wcmMxMDIzICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkMxMDIzKTsKIAlhZGFwdGVyLT5zdGF0cy5wcmMxNTIyICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkMxNTIyKTsKIAlhZGFwdGVyLT5zdGF0cy5ybGVjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STEVDKTsKLQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDKTsKLQlhZGFwdGVyLT5zdGF0cy5seG9mZnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWEMpOwogCWx4b24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlRYQyk7CiAJYWRhcHRlci0+c3RhdHMubHhvbnR4YyArPSBseG9uOwogCWx4b2ZmID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGVFhDKTsKQEAgLTM0MTYsMTcgKzM4MTgsNTQgQEAKIAkvKiBEbyB0aGUgd2F0Y2hkb2cgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlIGxvdmVseQogCSAqIGRlbGF5cyB0aGF0IHNvbWUgb2YgdGhlIG5ld2VyIGhhcmR3YXJlIHJlcXVpcmVzICovCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJdTY0IGVpY3MgPSAwOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykKKwkJCWVpY3MgfD0gKDEgPDwgaSk7CisKIAkJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5ncyBhcmUgY2xlYW5lZCAqLwotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewotCQkJdTMyIGVpY3MgPQotCQkJICgxIDw8IChhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUykpIC0gMTsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywgZWljcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBGb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55IGJpdHMgdGhhdAotCQkJICogYXJlIGVuYWJsZWQgZm9yIEVJQU0sIGJlY2F1c2UgdGhpcyBvcGVyYXRpb24gd291bGQKLQkJCSAqIHNldCAqYm90aCogRUlNUyBhbmQgRUlDUyBmb3IgYW55IGJpdCBpbiBFSUFNICovCi0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVhHQkVfRUlDU19UQ1BfVElNRVIgfCBJWEdCRV9FSUNTX09USEVSKSk7CisJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywgKHUzMillaWNzKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBmb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55CisJCQkJICogYml0cyB0aGF0IGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMKKwkJCQkgKiBvcGVyYXRpb24gd291bGQgc2V0ICpib3RoKiBFSU1TIGFuZCBFSUNTIGZvcgorCQkJCSAqIGFueSBiaXQgaW4gRUlBTQorCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJCQkvKgorCQkJCSAqIEVJQ1MoMC4uMTUpIGZpcnN0IDAtMTUgcSB2ZWN0b3JzCisJCQkJICogRUlDU1sxXSAoMTYuLjMxKSBxIHZlY3RvcnMgMTYtMzEKKwkJCQkgKiBFSUNTWzJdICgwLi4zMSkgcSB2ZWN0b3JzIDMyLTYzCisJCQkJICovCisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAorCQkJCSAgICAgICAgICAgICAgICAodTMyKShlaWNzICYgMHhGRkZGKSk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTX0VYKDEpLAorCQkJCSAgICAgICAgICAgICAgICAodTMyKShlaWNzICYgMHhGRkZGMDAwMCkpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDU19FWCgyKSwKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyA+PiAzMikpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIGZvciBsZWdhY3kgYW5kIE1TSSBpbnRlcnJ1cHRzIGRvbid0IHNldCBhbnkKKwkJCQkgKiBiaXRzIHRoYXQgYXJlIGVuYWJsZWQgZm9yIEVJQU0sIGJlY2F1c2UgdGhpcworCQkJCSAqIG9wZXJhdGlvbiB3b3VsZCBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yCisJCQkJICogYW55IGJpdCBpbiBFSUFNCisJCQkJICovCisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAorCQkJCSAgICAgKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQkvKiBSZXNldCB0aGUgdGltZXIgKi8KIAkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKQEAgLTM0MzcsNiArMzg3Niw1NSBAQAogfQogCiAvKioKKyAqIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIG11bHRpc3BlZWQgZmliZXIKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGF1dG9uZWc7CisKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7CisJaWYgKGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcykKKwkJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZody0+bWFjLmF1dG9uZWcpOworCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQorCQlody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCB0cnVlKTsKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEU7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSzsKK30KKworLyoqCisgKiBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrIC0gd29ya2VyIHRocmVhZCB0byBjb25maWd1cmUgYSBuZXcgU0ZQKyBtb2R1bGUKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgZXJyOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0s7CisJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnlfc2ZwKGh3KTsKKwlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJQSFkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIE5JQyAlZFxuIiwgZXJyKTsKKwkJaXhnYmVfZG93bihhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKwlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCisJaWYgKCFhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykKKwkJLyogVGhpcyB3aWxsIGFsc28gd29yayBmb3IgREEgVHdpbmF4IGNvbm5lY3Rpb25zICovCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOworfQorCisvKioKICAqIGl4Z2JlX3dhdGNoZG9nX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGJyaW5nIGxpbmsgdXAKICAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKICAqKi8KQEAgLTM0NjYsMTAgKzM5NTQsMjAgQEAKIAogCWlmIChsaW5rX3VwKSB7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOwotCQkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7Ci0jZGVmaW5lIEZMT1dfUlggKGZyY3RsICYgSVhHQkVfRkNUUkxfUkZDRSkKLSNkZWZpbmUgRkxPV19UWCAocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpCisJCQlib29sIGZsb3dfcngsIGZsb3dfdHg7CisKKwkJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCQl1MzIgbWZsY24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOworCQkJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJCQkJZmxvd19yeCA9IChtZmxjbiAmIElYR0JFX01GTENOX1JGQ0UpOworCQkJCWZsb3dfdHggPSAoZmNjZmcgJiBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCk7CisJCQl9IGVsc2UgeworCQkJCXUzMiBmcmN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CisJCQkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7CisJCQkJZmxvd19yeCA9IChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpOworCQkJCWZsb3dfdHggPSAocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOworCQkJfQorCiAJCQlwcmludGsoS0VSTl9JTkZPICJpeGdiZTogJXMgTklDIExpbmsgaXMgVXAgJXMsICIKIAkJCSAgICAgICAiRmxvdyBDb250cm9sOiAlc1xuIiwKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUsCkBAIC0zNDc3LDkgKzM5NzUsOSBAQAogCQkJICAgICAgICAiMTAgR2JwcyIgOgogCQkJICAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMID8KIAkJCSAgICAgICAgICIxIEdicHMiIDogInVua25vd24gc3BlZWQiKSksCi0JCQkgICAgICAgKChGTE9XX1JYICYmIEZMT1dfVFgpID8gIlJYL1RYIiA6Ci0JCQkgICAgICAgIChGTE9XX1JYID8gIlJYIiA6Ci0JCQkgICAgICAgIChGTE9XX1RYID8gIlRYIiA6ICJOb25lIikpKSk7CisJCQkgICAgICAgKChmbG93X3J4ICYmIGZsb3dfdHgpID8gIlJYL1RYIiA6CisJCQkgICAgICAgIChmbG93X3J4ID8gIlJYIiA6CisJCQkgICAgICAgIChmbG93X3R4ID8gIlRYIiA6ICJOb25lIikpKSk7CiAKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJfSBlbHNlIHsKQEAgLTM2MTksMTMgKzQxMTcsMTMgQEAKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCQkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9JUFY0OwogCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQogCQkJCQkgICAgICAgIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KIAkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHlwZV90dWNtZF9tbGhsIHw9CkBAIC0zODIzLDYgKzQzMjEsMTYgQEAKIAlyZXR1cm4gX19peGdiZV9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7CiB9CiAKK3N0YXRpYyB1MTYgaXhnYmVfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKKwkJcmV0dXJuIDA7ICAvKiBBbGwgdHJhZmZpYyBzaG91bGQgZGVmYXVsdCB0byBjbGFzcyAwICovCisKKwlyZXR1cm4gc2tiX3R4X2hhc2goZGV2LCBza2IpOworfQorCiBzdGF0aWMgaW50IGl4Z2JlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0zOTQ4LDMwICs0NDU2LDExIEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBpeGdiZV9saW5rX2NvbmZpZyAtIHNldCB1cCBpbml0aWFsIGxpbmsgd2l0aCBkZWZhdWx0IHNwZWVkIGFuZCBkdXBsZXgKLSAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdAotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCi0gKiovCi1zdGF0aWMgaW50IGl4Z2JlX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCi17Ci0JdTMyIGF1dG9uZWcgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKLQotCS8qIG11c3QgYWx3YXlzIGF1dG9uZWcgZm9yIGJvdGggMUcgYW5kIDEwRyBsaW5rICovCi0JaHctPm1hYy5hdXRvbmVnID0gdHJ1ZTsKLQotCWlmICgoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSAmJgotCSAgICAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSkKLQkJYXV0b25lZyA9IElYR0JFX0xJTktfU1BFRURfODI1OThfQVVUT05FRzsKLQotCXJldHVybiBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCB0cnVlKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpeGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiAJCT0gaXhnYmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gaXhnYmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGl4Z2JlX3htaXRfZnJhbWUsCisJLm5kb19zZWxlY3RfcXVldWUJPSBpeGdiZV9zZWxlY3RfcXVldWUsCiAJLm5kb19nZXRfc3RhdHMJCT0gaXhnYmVfZ2V0X3N0YXRzLAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gaXhnYmVfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpeGdiZV9zZXRfcnhfbW9kZSwKQEAgLTQwMDcsNyArNDQ5Niw3IEBACiAJY29uc3Qgc3RydWN0IGl4Z2JlX2luZm8gKmlpID0gaXhnYmVfaW5mb190YmxbZW50LT5kcml2ZXJfZGF0YV07CiAJc3RhdGljIGludCBjYXJkc19mb3VuZDsKIAlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwotCXUxNiBsaW5rX3N0YXR1cywgbGlua19zcGVlZCwgbGlua193aWR0aDsKKwl1MTYgcG1fdmFsdWUgPSAwOwogCXUzMiBwYXJ0X251bSwgZWVjOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC00MTA2LDYgKzQ1OTUsMTMgQEAKIAogCUlOSVRfV09SSygmYWRhcHRlci0+c2ZwX3Rhc2ssIGl4Z2JlX3NmcF90YXNrKTsKIAorCS8qIG11bHRpc3BlZWQgZmliZXIgaGFzIGl0cyBvd24gdGFza2xldCwgY2FsbGVkIGZyb20gR1BJIFNEUDEgY29udGV4dCAqLworCUlOSVRfV09SSygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrLCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCisJLyogYSBuZXcgU0ZQKyBtb2R1bGUgYXJyaXZhbCwgY2FsbGVkIGZyb20gR1BJIFNEUDIgY29udGV4dCAqLworCUlOSVRfV09SSygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzaywKKwkgICAgICAgICAgaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisKIAllcnIgPSBpaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCkgewogCQkvKiBzdGFydCBhIGtlcm5lbCB0aHJlYWQgdG8gd2F0Y2ggZm9yIGEgbW9kdWxlIHRvIGFycml2ZSAqLwpAQCAtNDE0Miw3ICs0NjM4LDcgQEAKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CkBAIC00MTg2LDI2ICs0NjgyLDQxIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dfaW5pdDsKIAorCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0OgorI2RlZmluZSBJWEdCRV9QQ0lFX1BNQ1NSIDB4NDQKKwkJYWRhcHRlci0+d29sID0gSVhHQkVfV1VGQ19NQUc7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIElYR0JFX1BDSUVfUE1DU1IsICZwbV92YWx1ZSk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBJWEdCRV9QQ0lFX1BNQ1NSLAorCQkgICAgICAgICAgICAgICAgICAgICAgKHBtX3ZhbHVlIHwgKDEgPDwgOCkpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWRhcHRlci0+d29sID0gMDsKKwkJYnJlYWs7CisJfQorCWRldmljZV9pbml0X3dha2V1cCgmYWRhcHRlci0+cGRldi0+ZGV2LCB0cnVlKTsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmFkYXB0ZXItPnBkZXYtPmRldiwgYWRhcHRlci0+d29sKTsKKwogCS8qIHByaW50IGJ1cyB0eXBlL3NwZWVkL3dpZHRoIGluZm8gKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJWEdCRV9QQ0lfTElOS19TVEFUVVMsICZsaW5rX3N0YXR1cyk7Ci0JbGlua19zcGVlZCA9IGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfU1BFRUQ7Ci0JbGlua193aWR0aCA9IGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfV0lEVEg7CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIihQQ0kgRXhwcmVzczolczolcykgJXBNXG4iLAotCSAgICAgICAgKChsaW5rX3NwZWVkID09IElYR0JFX1BDSV9MSU5LX1NQRUVEXzUwMDApID8gIjUuMEdiL3MiIDoKLQkgICAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9QQ0lfTElOS19TUEVFRF8yNTAwKSA/ICIyLjVHYi9zIiA6Ci0JICAgICAgICAgIlVua25vd24iKSwKLQkgICAgICAgICgobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF84KSA/ICJXaWR0aCB4OCIgOgotCSAgICAgICAgIChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzQpID8gIldpZHRoIHg0IiA6Ci0JICAgICAgICAgKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfMikgPyAiV2lkdGggeDIiIDoKLQkgICAgICAgICAobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF8xKSA/ICJXaWR0aCB4MSIgOgorCSAgICAgICAgKChody0+YnVzLnNwZWVkID09IGl4Z2JlX2J1c19zcGVlZF81MDAwKSA/ICI1LjBHYi9zIjoKKwkgICAgICAgICAoaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfMjUwMCkgPyAiMi41R2IvcyI6IlVua25vd24iKSwKKwkgICAgICAgICgoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94OCkgPyAiV2lkdGggeDgiIDoKKwkgICAgICAgICAoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NCkgPyAiV2lkdGggeDQiIDoKKwkgICAgICAgICAoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94MSkgPyAiV2lkdGggeDEiIDoKIAkgICAgICAgICAiVW5rbm93biIpLAogCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkcik7CiAJaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoaHcsICZwYXJ0X251bSk7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAotCSAgICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLAotCSAgICAgICAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOworCWlmIChpeGdiZV9pc19zZnAoaHcpICYmIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfbm90X3ByZXNlbnQpCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBTRlArOiAlZCwgUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCisJCSAgICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLCBody0+cGh5LnNmcF90eXBlLAorCQkgICAgICAgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKKwllbHNlCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKKwkJICAgICAgICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCisJCSAgICAgICAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOwogCi0JaWYgKGxpbmtfd2lkdGggPD0gSVhHQkVfUENJX0xJTktfV0lEVEhfNCkgeworCWlmIChody0+YnVzLndpZHRoIDw9IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0KSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJQQ0ktRXhwcmVzcyBiYW5kd2lkdGggYXZhaWxhYmxlIGZvciAiCiAJCSAgICAgICAgICJ0aGlzIGNhcmQgaXMgbm90IHN1ZmZpY2llbnQgZm9yIG9wdGltYWwgIgogCQkgICAgICAgICAicGVyZm9ybWFuY2UuXG4iKTsKQEAgLTQyMTMsMTYgKzQ3MjQsMTIgQEAKIAkJICAgICAgICAgIlBDSS1FeHByZXNzIHNsb3QgaXMgcmVxdWlyZWQuXG4iKTsKIAl9CiAKKwkvKiBzYXZlIG9mZiBFRVBST00gdmVyc2lvbiBudW1iZXIgKi8KKwlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCAweDI5LCAmYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24pOworCiAJLyogcmVzZXQgdGhlIGhhcmR3YXJlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyAqLwogCWh3LT5tYWMub3BzLnN0YXJ0X2h3KGh3KTsKIAotCS8qIGxpbmtfY29uZmlnIGRlcGVuZHMgb24gc3RhcnRfaHcgYmVpbmcgY2FsbGVkIGF0IGxlYXN0IG9uY2UgKi8KLQllcnIgPSBpeGdiZV9saW5rX2NvbmZpZyhodyk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzZXR1cF9saW5rX3NwZWVkIEZBSUxFRCAlZFxuIiwgZXJyKTsKLQkJZ290byBlcnJfcmVnaXN0ZXI7Ci0JfQotCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwpAQCAtNDI1Myw2ICs0NzYwLDggQEAKIAljbGVhcl9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CkBAIC00Mjg5LDYgKzQ3OTgsOCBAQAogCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZnBfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCkBAIC00MzcyLDcgKzQ4ODMsNyBAQAogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7Ci0KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfV1VTLCB+MCk7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKaW5kZXggNWE4NjY5YS4uMTRlOTYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMiw2ICszMiwxOCBAQAogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgogCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RhcnQoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RvcChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKmRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2dldF9pMmNfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgKmRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9yYWlzZV9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKTsKK3N0YXRpYyB2b2lkIGl4Z2JlX2xvd2VyX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpOworc3RhdGljIHMzMiBpeGdiZV9zZXRfaTJjX2RhdGEoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwsIGJvb2wgZGF0YSk7CitzdGF0aWMgYm9vbCBpeGdiZV9nZXRfaTJjX2RhdGEodTMyICppMmNjdGwpOworc3RhdGljIHZvaWQgaXhnYmVfaTJjX2J1c19jbGVhcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHN0YXRpYyBib29sIGl4Z2JlX3ZhbGlkYXRlX3BoeV9hZGRyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBwaHlfYWRkcik7CiBzdGF0aWMgZW51bSBpeGdiZV9waHlfdHlwZSBpeGdiZV9nZXRfcGh5X3R5cGVfZnJvbV9pZCh1MzIgcGh5X2lkKTsKIHN0YXRpYyBzMzIgaXhnYmVfZ2V0X3BoeV9pZChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKQEAgLTU0Myw4ICs1NTUsOSBAQAogCXU4IGlkZW50aWZpZXIgPSAwOwogCXU4IGNvbXBfY29kZXNfMWcgPSAwOwogCXU4IGNvbXBfY29kZXNfMTBnID0gMDsKLQl1OCBvdWlfYnl0ZXNbNF0gPSB7MCwgMCwgMCwgMH07CisJdTggb3VpX2J5dGVzWzNdID0gezAsIDAsIDB9OwogCXU4IHRyYW5zbWlzc2lvbl9tZWRpYSA9IDA7CisJdTE2IGVuZm9yY2Vfc2ZwID0gMDsKIAogCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfaTJjX2VlcHJvbShodywgSVhHQkVfU0ZGX0lERU5USUZJRVIsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZGVudGlmaWVyKTsKQEAgLTU2NCwxOCArNTc3LDQ4IEBACiAKIAkJLyogSUQgTW9kdWxlCiAJCSAqID09PT09PT09PQotCQkgKiAwCVNGUF9EQV9DVQotCQkgKiAxCVNGUF9TUgotCQkgKiAyCVNGUF9MUgorCQkgKiAwICAgIFNGUF9EQV9DVQorCQkgKiAxICAgIFNGUF9TUgorCQkgKiAyICAgIFNGUF9MUgorCQkgKiAzICAgIFNGUF9EQV9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDQgICAgU0ZQX0RBX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKKwkJICogNSAgICBTRlBfU1IvTFJfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA2ICAgIFNGUF9TUi9MUl9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCiAJCSAqLwotCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9kYV9jdTsKLQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRVNSX0NBUEFCTEUpCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfc3I7Ci0JCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2xyOwotCQllbHNlCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bjsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2RhX2N1OworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRVNSX0NBUEFCTEUpCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3NyOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2xyOworCQkJZWxzZQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOworCQl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRVNSX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxOworCQkJZWxzZQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOworCQl9CiAKIAkJLyogRGV0ZXJtaW5lIFBIWSB2ZW5kb3IgKi8KIAkJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfdW5rbm93bikgewpAQCAtNjA3LDYgKzY1MCw5IEBACiAJCQljYXNlIElYR0JFX1NGRl9WRU5ET1JfT1VJX0FWQUdPOgogCQkJCWh3LT5waHkudHlwZSA9IGl4Z2JlX3BoeV9zZnBfYXZhZ287CiAJCQkJYnJlYWs7CisJCQljYXNlIElYR0JFX1NGRl9WRU5ET1JfT1VJX0lOVEVMOgorCQkJCWh3LT5waHkudHlwZSA9IGl4Z2JlX3BoeV9zZnBfaW50ZWw7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJgogCQkJCSAgICBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQpAQCAtNjE2LDcgKzY2MiwyOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXN0YXR1cyA9IDA7CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIgfHwKKwkJICAgIChody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX3NyICYmCisJCSAgICAgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9sciAmJgorCQkgICAgIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMCAmJgorCQkgICAgIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMSkpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIElYR0JFX1BIWV9FTkZPUkNFX0lOVEVMX1NGUF9PRkZTRVQsCisJCSAgICAgICAgICAgICAgICAgICAgJmVuZm9yY2Vfc2ZwKTsKKwkJaWYgKCEoZW5mb3JjZV9zZnAgJiBJWEdCRV9QSFlfQUxMT1dfQU5ZX1NGUCkpIHsKKwkJCS8qIE1ha2Ugc3VyZSB3ZSdyZSBhIHN1cHBvcnRlZCBQSFkgdHlwZSAqLworCQkJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfc2ZwX2ludGVsKSB7CisJCQkJc3RhdHVzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJaHdfZGJnKGh3LCAiU0ZQKyBtb2R1bGUgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJc3RhdHVzID0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gMDsKKwkJfQogCX0KIAogb3V0OgpAQCAtNjUxLDcgKzcxOCw3IEBACiAJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUEhZX0lOSVRfT0ZGU0VUX05MLCBsaXN0X29mZnNldCk7CiAKIAlpZiAoKCEqbGlzdF9vZmZzZXQpIHx8ICgqbGlzdF9vZmZzZXQgPT0gMHhGRkZGKSkKLQkJcmV0dXJuIElYR0JFX0VSUl9QSFk7CisJCXJldHVybiBJWEdCRV9FUlJfU0ZQX05PX0lOSVRfU0VRX1BSRVNFTlQ7CiAKIAkvKiBTaGlmdCBvZmZzZXQgdG8gZmlyc3QgSUQgd29yZCAqLwogCSgqbGlzdF9vZmZzZXQpKys7CkBAIC02ODgsNiArNzU1LDUwMSBAQAogfQogCiAvKioKKyAqICBpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYyAtIFJlYWRzIDggYml0IEVFUFJPTSB3b3JkIG92ZXIgSTJDIGludGVyZmFjZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IEVFUFJPTSBieXRlIG9mZnNldCB0byByZWFkCisgKiAgQGVlcHJvbV9kYXRhOiB2YWx1ZSByZWFkCisgKgorICogIFBlcmZvcm1zIGJ5dGUgcmVhZCBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UuCisgKiovCitzMzIgaXhnYmVfcmVhZF9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmVlcHJvbV9kYXRhKQoreworCXJldHVybiBody0+cGh5Lm9wcy5yZWFkX2kyY19ieXRlKGh3LCBieXRlX29mZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9JMkNfRUVQUk9NX0RFVl9BRERSLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbV9kYXRhKTsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljIC0gV3JpdGVzIDggYml0IEVFUFJPTSB3b3JkIG92ZXIgSTJDIGludGVyZmFjZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IEVFUFJPTSBieXRlIG9mZnNldCB0byB3cml0ZQorICogIEBlZXByb21fZGF0YTogdmFsdWUgdG8gd3JpdGUKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSB3cml0ZSBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBlZXByb21fZGF0YSkKK3sKKwlyZXR1cm4gaHctPnBoeS5vcHMud3JpdGVfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9JMkNfRUVQUk9NX0RFVl9BRERSLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21fZGF0YSk7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyAtIFJlYWRzIDggYml0IHdvcmQgb3ZlciBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBieXRlIG9mZnNldCB0byByZWFkCisgKiAgQGRhdGE6IHZhbHVlIHJlYWQKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSByZWFkIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZSBhdAorICogIGEgc3BlY2lmaWVkIGRlaXZjZSBhZGRyZXNzLgorICoqLworczMyIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBtYXhfcmV0cnkgPSAxOworCXUzMiByZXRyeSA9IDA7CisJYm9vbCBuYWNrID0gMTsKKworCWRvIHsKKwkJaXhnYmVfaTJjX3N0YXJ0KGh3KTsKKworCQkvKiBEZXZpY2UgQWRkcmVzcyBhbmQgd3JpdGUgaW5kaWNhdGlvbiAqLworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGRldl9hZGRyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJaXhnYmVfaTJjX3N0YXJ0KGh3KTsKKworCQkvKiBEZXZpY2UgQWRkcmVzcyBhbmQgcmVhZCBpbmRpY2F0aW9uICovCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgKGRldl9hZGRyIHwgMHgxKSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZShodywgZGF0YSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChodywgbmFjayk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlpeGdiZV9pMmNfc3RvcChodyk7CisJCWJyZWFrOworCitmYWlsOgorCQlpeGdiZV9pMmNfYnVzX2NsZWFyKGh3KTsKKwkJcmV0cnkrKzsKKwkJaWYgKHJldHJ5IDwgbWF4X3JldHJ5KQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgcmVhZCBlcnJvciAtIFJldHJ5aW5nLlxuIik7CisJCWVsc2UKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHJlYWQgZXJyb3IuXG4iKTsKKworCX0gd2hpbGUgKHJldHJ5IDwgbWF4X3JldHJ5KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2kyY19ieXRlX2dlbmVyaWMgLSBXcml0ZXMgOCBiaXQgd29yZCBvdmVyIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IGJ5dGUgb2Zmc2V0IHRvIHdyaXRlCisgKiAgQGRhdGE6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIGJ5dGUgd3JpdGUgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlIGF0CisgKiAgYSBzcGVjaWZpZWQgZGV2aWNlIGFkZHJlc3MuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRldl9hZGRyLCB1OCBkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBtYXhfcmV0cnkgPSAxOworCXUzMiByZXRyeSA9IDA7CisKKwlkbyB7CisJCWl4Z2JlX2kyY19zdGFydChodyk7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBkZXZfYWRkcik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgZGF0YSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlpeGdiZV9pMmNfc3RvcChodyk7CisJCWJyZWFrOworCitmYWlsOgorCQlpeGdiZV9pMmNfYnVzX2NsZWFyKGh3KTsKKwkJcmV0cnkrKzsKKwkJaWYgKHJldHJ5IDwgbWF4X3JldHJ5KQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgd3JpdGUgZXJyb3IgLSBSZXRyeWluZy5cbiIpOworCQllbHNlCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSB3cml0ZSBlcnJvci5cbiIpOworCX0gd2hpbGUgKHJldHJ5IDwgbWF4X3JldHJ5KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2kyY19zdGFydCAtIFNldHMgSTJDIHN0YXJ0IGNvbmRpdGlvbgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyBJMkMgc3RhcnQgY29uZGl0aW9uIChIaWdoIC0+IExvdyBvbiBTREEgd2hpbGUgU0NMIGlzIEhpZ2gpCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RhcnQoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwkvKiBTdGFydCBjb25kaXRpb24gbXVzdCBiZWdpbiB3aXRoIGRhdGEgYW5kIGNsb2NrIGhpZ2ggKi8KKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDEpOworCWl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogU2V0dXAgdGltZSBmb3Igc3RhcnQgY29uZGl0aW9uICg0Ljd1cykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfU1VfU1RBKTsKKworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMCk7CisKKwkvKiBIb2xkIHRpbWUgZm9yIHN0YXJ0IGNvbmRpdGlvbiAoNHVzKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9IRF9TVEEpOworCisJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisKK30KKworLyoqCisgKiAgaXhnYmVfaTJjX3N0b3AgLSBTZXRzIEkyQyBzdG9wIGNvbmRpdGlvbgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyBJMkMgc3RvcCBjb25kaXRpb24gKExvdyAtPiBIaWdoIG9uIFNEQSB3aGlsZSBTQ0wgaXMgSGlnaCkKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdG9wKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJLyogU3RvcCBjb25kaXRpb24gbXVzdCBiZWdpbiB3aXRoIGRhdGEgbG93IGFuZCBjbG9jayBoaWdoICovCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAwKTsKKwlpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIFNldHVwIHRpbWUgZm9yIHN0b3AgY29uZGl0aW9uICg0dXMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1NVX1NUTyk7CisKKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDEpOworCisJLyogYnVzIGZyZWUgdGltZSBiZXR3ZWVuIHN0b3AgYW5kIHN0YXJ0ICg0Ljd1cykqLworCXVkZWxheShJWEdCRV9JMkNfVF9CVUYpOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZSAtIENsb2NrcyBpbiBvbmUgYnl0ZSB2aWEgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiBkYXRhIGJ5dGUgdG8gY2xvY2sgaW4KKyAqCisgKiAgQ2xvY2tzIGluIG9uZSBieXRlIGRhdGEgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXMzMiBpOworCWJvb2wgYml0ID0gMDsKKworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQoaHcsICZiaXQpOworCQkqZGF0YSB8PSBiaXQgPDwgaTsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUgLSBDbG9ja3Mgb3V0IG9uZSBieXRlIHZpYSBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgYnl0ZSBjbG9ja2VkIG91dAorICoKKyAqICBDbG9ja3Mgb3V0IG9uZSBieXRlIGRhdGEgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXMzMiBpOworCXUzMiBpMmNjdGw7CisJYm9vbCBiaXQgPSAwOworCisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJYml0ID0gKGRhdGEgPj4gaSkgJiAweDE7CisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KGh3LCBiaXQpOworCisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCS8qIFJlbGVhc2UgU0RBIGxpbmUgKHNldCBoaWdoKSAqLworCWkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCWkyY2N0bCB8PSBJWEdCRV9JMkNfREFUQV9PVVQ7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsIGkyY2N0bCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfaTJjX2FjayAtIFBvbGxzIGZvciBJMkMgQUNLCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbG9ja3MgaW4vb3V0IG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2dldF9pMmNfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1czsKKwl1MzIgaSA9IDA7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCXUzMiB0aW1lb3V0ID0gMTA7CisJYm9vbCBhY2sgPSAxOworCisJc3RhdHVzID0gaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gb3V0OworCisJLyogTWluaW11bSBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwkvKiBQb2xsIGZvciBBQ0suICBOb3RlIHRoYXQgQUNLIGluIEkyQyBzcGVjIGlzCisJICogdHJhbnNpdGlvbiBmcm9tIDEgdG8gMCAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJCWFjayA9IGl4Z2JlX2dldF9pMmNfZGF0YSgmaTJjY3RsKTsKKworCQl1ZGVsYXkoMSk7CisJCWlmIChhY2sgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChhY2sgPT0gMSkgeworCQlod19kYmcoaHcsICJJMkMgYWNrIHdhcyBub3QgcmVjZWl2ZWQuXG4iKTsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0kyQzsKKwl9CisKKwlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQgLSBDbG9ja3MgaW4gb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IHJlYWQgZGF0YSB2YWx1ZQorICoKKyAqICBDbG9ja3MgaW4gb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sICpkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJc3RhdHVzID0gaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCWkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCSpkYXRhID0gaXhnYmVfZ2V0X2kyY19kYXRhKCZpMmNjdGwpOworCisJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdCAtIENsb2NrcyBpbi9vdXQgb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiAgQ2xvY2tzIG91dCBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwlzdGF0dXMgPSBpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIGRhdGEpOworCWlmIChzdGF0dXMgPT0gMCkgeworCQlzdGF0dXMgPSBpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW5pbXVtIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwkJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cy4KKwkJICogVGhpcyBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIGRhdGEgaG9sZCB0aW1lLgorCQkgKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0kyQzsKKwkJaHdfZGJnKGh3LCAiSTJDIGRhdGEgd2FzIG5vdCBzZXQgdG8gJVhcbiIsIGRhdGEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisvKioKKyAqICBpeGdiZV9yYWlzZV9pMmNfY2xrIC0gUmFpc2VzIHRoZSBJMkMgU0NMIGNsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKgorICogIFJhaXNlcyB0aGUgSTJDIGNsb2NrIGxpbmUgJzAnLT4nMScKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfcmFpc2VfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCSppMmNjdGwgfD0gSVhHQkVfSTJDX0NMS19PVVQ7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgKmkyY2N0bCk7CisKKwkvKiBTQ0wgcmlzZSB0aW1lICgxMDAwbnMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1JJU0UpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfbG93ZXJfaTJjX2NsayAtIExvd2VycyB0aGUgSTJDIFNDTCBjbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICoKKyAqICBMb3dlcnMgdGhlIEkyQyBjbG9jayBsaW5lICcxJy0+JzAnCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9sb3dlcl9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKQoreworCisJKmkyY2N0bCAmPSB+SVhHQkVfSTJDX0NMS19PVVQ7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgKmkyY2N0bCk7CisKKwkvKiBTQ0wgZmFsbCB0aW1lICgzMDBucykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfRkFMTCk7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF9pMmNfZGF0YSAtIFNldHMgdGhlIEkyQyBkYXRhIGJpdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICogIEBkYXRhOiBJMkMgZGF0YSB2YWx1ZSAoMCBvciAxKSB0byBzZXQKKyAqCisgKiAgU2V0cyB0aGUgSTJDIGRhdGEgYml0CisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldF9pMmNfZGF0YShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCwgYm9vbCBkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCisJaWYgKGRhdGEpCisJCSppMmNjdGwgfD0gSVhHQkVfSTJDX0RBVEFfT1VUOworCWVsc2UKKwkJKmkyY2N0bCAmPSB+SVhHQkVfSTJDX0RBVEFfT1VUOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCisJLyogRGF0YSByaXNlL2ZhbGwgKDEwMDBucy8zMDBucykgYW5kIHNldC11cCB0aW1lICgyNTBucykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfUklTRSArIElYR0JFX0kyQ19UX0ZBTEwgKyBJWEdCRV9JMkNfVF9TVV9EQVRBKTsKKworCS8qIFZlcmlmeSBkYXRhIHdhcyBzZXQgY29ycmVjdGx5ICovCisJKmkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCWlmIChkYXRhICE9IGl4Z2JlX2dldF9pMmNfZGF0YShpMmNjdGwpKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JMkM7CisJCWh3X2RiZyhodywgIkVycm9yIC0gSTJDIGRhdGEgd2FzIG5vdCBzZXQgdG8gJVguXG4iLCBkYXRhKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfaTJjX2RhdGEgLSBSZWFkcyB0aGUgSTJDIFNEQSBkYXRhIGJpdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICoKKyAqICBSZXR1cm5zIHRoZSBJMkMgZGF0YSBiaXQgdmFsdWUKKyAqKi8KK3N0YXRpYyBib29sIGl4Z2JlX2dldF9pMmNfZGF0YSh1MzIgKmkyY2N0bCkKK3sKKwlib29sIGRhdGE7CisKKwlpZiAoKmkyY2N0bCAmIElYR0JFX0kyQ19EQVRBX0lOKQorCQlkYXRhID0gMTsKKwllbHNlCisJCWRhdGEgPSAwOworCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qKgorICogIGl4Z2JlX2kyY19idXNfY2xlYXIgLSBDbGVhcnMgdGhlIEkyQyBidXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsZWFycyB0aGUgSTJDIGJ1cyBieSBzZW5kaW5nIG5pbmUgY2xvY2sgcHVsc2VzLgorICogIFVzZWQgd2hlbiBkYXRhIGxpbmUgaXMgc3R1Y2sgbG93LgorICoqLworc3RhdGljIHZvaWQgaXhnYmVfaTJjX2J1c19jbGVhcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwl1MzIgaTsKKworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCWl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbiBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbiBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuN3VzKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisJfQorCisJLyogUHV0IHRoZSBpMmMgYnVzIGJhY2sgdG8gZGVmYXVsdCBzdGF0ZSAqLworCWl4Z2JlX2kyY19zdG9wKGh3KTsKK30KKworLyoqCiAgKiAgaXhnYmVfY2hlY2tfcGh5X2xpbmtfdG54IC0gRGV0ZXJtaW5lIGxpbmsgYW5kIHNwZWVkIHN0YXR1cwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCmluZGV4IDQzYTk3YmMuLmNjNWYxYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTQsMTQgKzU0LDE1IEBACiAjZGVmaW5lIElYR0JFX0kyQ19FRVBST01fU1RBVFVTX0lOX1BST0dSRVNTICAweDMKIAogLyogQml0LXNoaWZ0IG1hY3JvcyAqLwotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMF9TSElGVCAgICAxMgotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMV9TSElGVCAgICA4Ci0jZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUyX1NISUZUICAgIDQKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTBfU0hJRlQgICAgMjQKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTFfU0hJRlQgICAgMTYKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTJfU0hJRlQgICAgOAogCiAvKiBWZW5kb3IgT1VJczogZm9ybWF0IG9mIE9VSSBpcyAweFtieXRlMF1bYnl0ZTFdW2J5dGUyXVswMF0gKi8KICNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfVFlDTyAgICAgMHgwMDQwNzYwMAogI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9GVEwgICAgICAweDAwOTA2NTAwCiAjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0FWQUdPICAgIDB4MDAxNzZBMDAKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfSU5URUwgICAgMHgwMDFCMjEwMAogCiAvKiBJMkMgU0RBIGFuZCBTQ0wgdGltaW5nIHBhcmFtZXRlcnMgZm9yIHN0YW5kYXJkIG1vZGUgKi8KICNkZWZpbmUgSVhHQkVfSTJDX1RfSERfU1RBICA0CkBAIC0xMDEsNSArMTAyLDEyIEBACiBzMzIgaXhnYmVfZ2V0X3NmcF9pbml0X3NlcXVlbmNlX29mZnNldHMoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmxpc3Rfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YV9vZmZzZXQpOwotCitzMzIgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggKmRhdGEpOworczMyIGl4Z2JlX3dyaXRlX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggZGF0YSk7CitzMzIgaXhnYmVfcmVhZF9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmVlcHJvbV9kYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGVlcHJvbV9kYXRhKTsKICNlbmRpZiAvKiBfSVhHQkVfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKaW5kZXggZjAxMWM1Ny4uMmIyZWNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgSVhHQkVfSU5URUxfVkVORE9SX0lEICAgMHg4MDg2CiAKIC8qIERldmljZSBJRHMgKi8KKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4ICAgICAgICAgICAgICAgMHgxMEI2CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9CWCAgICAgICAgICAgIDB4MTUwOAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThBRl9EVUFMX1BPUlQgICAweDEwQzYKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QUZfU0lOR0xFX1BPUlQgMHgxMEM3CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEVCX1NGUF9MT00gICAgIDB4MTBEQgpAQCAtNDMsNiArNDUsOSBAQAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThfREFfRFVBTF9QT1JUICAweDEwRjEKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X1NSX0RVQUxfUE9SVF9FTSAgICAgIDB4MTBFMQogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThFQl9YRl9MUiAgICAgICAweDEwRjQKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5ICAgICAgICAgICAgICAgMHgxMEQ4CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9LWDQgICAgICAgICAgIDB4MTBGNworI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQICAgICAgICAgICAweDEwRkIKIAogLyogR2VuZXJhbCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTCAgICAgIDB4MDAwMDAKQEAgLTUwLDkgKzU1LDEyIEBACiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUICAweDAwMDE4CiAjZGVmaW5lIElYR0JFX0VTRFAgICAgICAweDAwMDIwCiAjZGVmaW5lIElYR0JFX0VPRFNEUCAgICAweDAwMDI4CisjZGVmaW5lIElYR0JFX0kyQ0NUTCAgICAweDAwMDI4CiAjZGVmaW5lIElYR0JFX0xFRENUTCAgICAweDAwMjAwCiAjZGVmaW5lIElYR0JFX0ZSVElNRVIgICAweDAwMDQ4CiAjZGVmaW5lIElYR0JFX1RDUFRJTUVSICAweDAwMDRDCisjZGVmaW5lIElYR0JFX0NPUkVTUEFSRSAweDAwNjAwCisjZGVmaW5lIElYR0JFX0VYVkVUICAgICAweDA1MDc4CiAKIC8qIE5WTSBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfRUVDICAgICAgIDB4MTAwMTAKQEAgLTY2LDYgKzc0LDE5IEBACiAjZGVmaW5lIElYR0JFX0ZMT1AgICAgICAweDEwMTNDCiAjZGVmaW5lIElYR0JFX0dSQyAgICAgICAweDEwMjAwCiAKKy8qIEdlbmVyYWwgUmVjZWl2ZSBDb250cm9sICovCisjZGVmaW5lIElYR0JFX0dSQ19NTkcgIDB4MDAwMDAwMDEgLyogTWFuYWdlYWJpbGl0eSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfR1JDX0FQTUUgMHgwMDAwMDAwMiAvKiBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVuYWJsZSAqLworCisjZGVmaW5lIElYR0JFX1ZQRERJQUcwICAweDEwMjA0CisjZGVmaW5lIElYR0JFX1ZQRERJQUcxICAweDEwMjA4CisKKy8qIEkyQ0NUTCBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfSTJDX0NMS19JTiAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX0kyQ19DTEtfT1VUICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9JMkNfREFUQV9JTiAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfSTJDX0RBVEFfT1VUICAweDAwMDAwMDA4CisKIC8qIEludGVycnVwdCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfRUlDUiAgICAgIDB4MDA4MDAKICNkZWZpbmUgSVhHQkVfRUlDUyAgICAgIDB4MDA4MDgKQEAgLTczLDI4ICs5NCw2MyBAQAogI2RlZmluZSBJWEdCRV9FSU1DICAgICAgMHgwMDg4OAogI2RlZmluZSBJWEdCRV9FSUFDICAgICAgMHgwMDgxMAogI2RlZmluZSBJWEdCRV9FSUFNICAgICAgMHgwMDg5MAotI2RlZmluZSBJWEdCRV9FSVRSKF9pKSAgKCgoX2kpIDw9IDIzKSA/ICgweDAwODIwICsgKChfaSkgKiA0KSkgOiAoMHgwMTIzMDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfRUlDU19FWChfaSkgICAoMHgwMEE5MCArIChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9FSU1TX0VYKF9pKSAgICgweDAwQUEwICsgKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX0VJTUNfRVgoX2kpICAgKDB4MDBBQjAgKyAoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfRUlBTV9FWChfaSkgICAoMHgwMEFEMCArIChfaSkgKiA0KQorLyoKKyAqIDgyNTk4IEVJVFIgaXMgMTYgYml0cyBidXQgc2V0IHRoZSBsaW1pdHMgYmFzZWQgb24gdGhlIG1heAorICogc3VwcG9ydGVkIGJ5IGFsbCBpeGdiZSBoYXJkd2FyZS4gIDgyNTk5IEVJVFIgaXMgb25seSAxMiBiaXRzLAorICogd2l0aCB0aGUgbG93ZXIgMyBhbHdheXMgemVyby4KKyAqLworI2RlZmluZSBJWEdCRV9NQVhfSU5UX1JBVEUgNDg4MjgxCisjZGVmaW5lIElYR0JFX01JTl9JTlRfUkFURSA5NTYKKyNkZWZpbmUgSVhHQkVfTUFYX0VJVFIgICAgIDB4MDAwMDBGRjgKKyNkZWZpbmUgSVhHQkVfTUlOX0VJVFIgICAgIDgKKyNkZWZpbmUgSVhHQkVfRUlUUihfaSkgICgoKF9pKSA8PSAyMykgPyAoMHgwMDgyMCArICgoX2kpICogNCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMjMwMCArICgoKF9pKSAtIDI0KSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfRUlUUl9JVFJfSU5UX01BU0sgMHgwMDAwMEZGOAorI2RlZmluZSBJWEdCRV9FSVRSX0xMSV9NT0QgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIElYR0JFX0VJVFJfQ05UX1dESVMgICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgSVhHQkVfSVZBUihfaSkgICgweDAwOTAwICsgKChfaSkgKiA0KSkgLyogMjQgYXQgMHg5MDAtMHg5NjAgKi8KKyNkZWZpbmUgSVhHQkVfSVZBUl9NSVNDIDB4MDBBMDAgLyogbWlzYyBNU0ktWCBpbnRlcnJ1cHQgY2F1c2VzICovCisjZGVmaW5lIElYR0JFX0VJVFJTRUwgICAweDAwODk0CiAjZGVmaW5lIElYR0JFX01TSVhUICAgICAweDAwMDAwIC8qIE1TSS1YIFRhYmxlLiAweDAwMDAgLSAweDAxQyAqLwogI2RlZmluZSBJWEdCRV9NU0lYUEJBICAgMHgwMjAwMCAvKiBNU0ktWCBQZW5kaW5nIGJpdCBhcnJheSAqLwogI2RlZmluZSBJWEdCRV9QQkFDTChfaSkgKCgoX2kpID09IDApID8gKDB4MTEwNjgpIDogKDB4MTEwQzAgKyAoKF9pKSAqIDQpKSkKICNkZWZpbmUgSVhHQkVfR1BJRSAgICAgIDB4MDA4OTgKIAogLyogRmxvdyBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9GQ0FEQlVMICAgMHgwMzIxMAorI2RlZmluZSBJWEdCRV9GQ0FEQlVIICAgMHgwMzIxNAorI2RlZmluZSBJWEdCRV9GQ0FNQUNMICAgMHgwNDMyOAorI2RlZmluZSBJWEdCRV9GQ0FNQUNIICAgMHgwNDMyQworI2RlZmluZSBJWEdCRV9GQ1JUSF84MjU5OShfaSkgKDB4MDMyNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX0ZDUlRMXzgyNTk5KF9pKSAoMHgwMzIyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfUEZDVE9QICAgIDB4MDMwMDgKICNkZWZpbmUgSVhHQkVfRkNUVFYoX2kpICgweDAzMjAwICsgKChfaSkgKiA0KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9GQ1JUTChfaSkgKDB4MDMyMjAgKyAoKF9pKSAqIDgpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0ZDUlRIKF9pKSAoMHgwMzI2MCArICgoX2kpICogOCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfRkNSVFYgICAgIDB4MDMyQTAKKyNkZWZpbmUgSVhHQkVfRkNDRkcgICAgIDB4MDNEMDAKICNkZWZpbmUgSVhHQkVfVEZDUyAgICAgIDB4MENFMDAKIAogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCi0jZGVmaW5lIElYR0JFX1JEQkFMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMDAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SREJBSChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDA0ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRMRU4oX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA4ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAwOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JESChfaSkgICAoKChfaSkgPCA2NCkgPyAoMHgwMTAxMCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMTAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SRFQoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTggKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDE4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUlhEQ1RMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAyOCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMjggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREJBTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAwMCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JEQkFIKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDA0ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRMRU4oX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA4ICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMDggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREgoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTAgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAxMCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JEVChfaSkgICAoKChfaSkgPCA2NCkgPyAoMHgwMTAxOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDE4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUlhEQ1RMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAyOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAyOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JERENDICAgICAgMHgwMkYyMAorI2RlZmluZSBJWEdCRV9SWE1FTVdSQVAgIDB4MDMxOTAKKyNkZWZpbmUgSVhHQkVfU1RBUkNUUkwgICAweDAzMDI0CiAvKgogICogU3BsaXQgYW5kIFJlcGxpY2F0aW9uIFJlY2VpdmUgQ29udHJvbCBSZWdpc3RlcnMKICAqIDAwLTE1IDogMHgwMjEwMCArIG4qNApAQCAtMTI3LDEwICsxODMsMTUgQEAKICNkZWZpbmUgSVhHQkVfRFJFQ0NDVExfRElTQUJMRSAwCiAvKiBNdWx0aWNhc3QgVGFibGUgQXJyYXkgLSAxMjggZW50cmllcyAqLwogI2RlZmluZSBJWEdCRV9NVEEoX2kpICAgKDB4MDUyMDAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9SQUwoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDAwICsgKChfaSkgKiA4KSkgOiAoMHgwQTIwMCArICgoX2kpICogOCkpKQotI2RlZmluZSBJWEdCRV9SQUgoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDA0ICsgKChfaSkgKiA4KSkgOiAoMHgwQTIwNCArICgoX2kpICogOCkpKQorI2RlZmluZSBJWEdCRV9SQUwoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDAwICsgKChfaSkgKiA4KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEyMDAgKyAoKF9pKSAqIDgpKSkKKyNkZWZpbmUgSVhHQkVfUkFIKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwNCArICgoX2kpICogOCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBMjA0ICsgKChfaSkgKiA4KSkpCisjZGVmaW5lIElYR0JFX01QU0FSX0xPKF9pKSAoMHgwQTYwMCArICgoX2kpICogOCkpCisjZGVmaW5lIElYR0JFX01QU0FSX0hJKF9pKSAoMHgwQTYwNCArICgoX2kpICogOCkpCiAvKiBQYWNrZXQgc3BsaXQgcmVjZWl2ZSB0eXBlICovCi0jZGVmaW5lIElYR0JFX1BTUlRZUEUoX2kpICAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQ4MCArICgoX2kpICogNCkpIDogKDB4MEVBMDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRShfaSkgICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDgwICsgKChfaSkgKiA0KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRUEwMCArICgoX2kpICogNCkpKQogLyogYXJyYXkgb2YgNDA5NiAxLWJpdCB2bGFuIGZpbHRlcnMgKi8KICNkZWZpbmUgSVhHQkVfVkZUQShfaSkgICgweDBBMDAwICsgKChfaSkgKiA0KSkKIC8qYXJyYXkgb2YgNDA5NiA0LWJpdCB2bGFuIHZtZHEgaW5kaWNlcyAqLwpAQCAtMTM5LDYgKzIwMCwyOCBAQAogI2RlZmluZSBJWEdCRV9WTE5DVFJMICAgMHgwNTA4OAogI2RlZmluZSBJWEdCRV9NQ1NUQ1RSTCAgMHgwNTA5MAogI2RlZmluZSBJWEdCRV9NUlFDICAgICAgMHgwNTgxOAorI2RlZmluZSBJWEdCRV9TQVFGKF9pKSAgKDB4MEUwMDAgKyAoKF9pKSAqIDQpKSAvKiBTb3VyY2UgQWRkcmVzcyBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfREFRRihfaSkgICgweDBFMjAwICsgKChfaSkgKiA0KSkgLyogRGVzdC4gQWRkcmVzcyBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfU0RQUUYoX2kpICgweDBFNDAwICsgKChfaSkgKiA0KSkgLyogU3JjIERlc3QuIEFkZHIgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0ZUUUYoX2kpICAoMHgwRTYwMCArICgoX2kpICogNCkpIC8qIEZpdmUgVHVwbGUgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0VUUUYoX2kpICAoMHgwNTEyOCArICgoX2kpICogNCkpIC8qIEVUeXBlIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9FVFFTKF9pKSAgKDB4MEVDMDAgKyAoKF9pKSAqIDQpKSAvKiBFVHlwZSBRdWV1ZSBTZWxlY3QgKi8KKyNkZWZpbmUgSVhHQkVfU1lOUUYgICAgIDB4MEVDMzAgLyogU1lOIFBhY2tldCBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfUlFUQyAgICAgIDB4MEVDNzAKKyNkZWZpbmUgSVhHQkVfTVRRQyAgICAgIDB4MDgxMjAKKyNkZWZpbmUgSVhHQkVfVkxWRihfaSkgICgweDBGMTAwICsgKChfaSkgKiA0KSkgIC8qIDY0IG9mIHRoZXNlICgwLTYzKSAqLworI2RlZmluZSBJWEdCRV9WTFZGQihfaSkgKDB4MEYyMDAgKyAoKF9pKSAqIDQpKSAgLyogMTI4IG9mIHRoZXNlICgwLTEyNykgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMICAgIDB4MDUxQjAKKyNkZWZpbmUgSVhHQkVfVkZSRShfaSkgICgweDA1MUUwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVkZURShfaSkgICgweDA4MTEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfUURFICAgICAgIDB4MkYwNAorI2RlZmluZSBJWEdCRV9WTU9MUihfaSkgKDB4MEYwMDAgKyAoKF9pKSAqIDQpKSAvKiA2NCB0b3RhbCAqLworI2RlZmluZSBJWEdCRV9VVEEoX2kpICAgKDB4MEY0MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJDVEwoX2kpICAgICAgICAoMHgwRjYwMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZMQU4oX2kpICAgICAgICgweDBGNjEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SVk0oX2kpICAgICAgICAgKDB4MEY2MzAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9MMzRUX0lNSVIoX2kpICAgICAgKDB4MEU4MDAgKyAoKF9pKSAqIDQpKSAvKjEyOCBvZiB0aGVzZSAoMC0xMjcpKi8KKyNkZWZpbmUgSVhHQkVfTExJVEhSRVNIIDB4MEVDOTAKICNkZWZpbmUgSVhHQkVfSU1JUihfaSkgICgweDA1QTgwICsgKChfaSkgKiA0KSkgIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVChfaSkgICAgICAgKDB4MDVBQTAgKyAoKF9pKSAqIDQpKSAgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9JTUlSVlAgICAgMHgwNUFDMApAQCAtMTQ2LDcgKzIyOSw2IEBACiAjZGVmaW5lIElYR0JFX1JFVEEoX2kpICAoMHgwNUMwMCArICgoX2kpICogNCkpICAvKiAzMiBvZiB0aGVzZSAoMC0zMSkgKi8KICNkZWZpbmUgSVhHQkVfUlNTUksoX2kpICgweDA1QzgwICsgKChfaSkgKiA0KSkgIC8qIDEwIG9mIHRoZXNlICgwLTkpICovCiAKLQogLyogVHJhbnNtaXQgRE1BIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9UREJBTChfaSkgKDB4MDYwMDAgKyAoKF9pKSAqIDB4NDApKSAvKiAzMiBvZiB0aGVzZSAoMC0zMSkqLwogI2RlZmluZSBJWEdCRV9UREJBSChfaSkgKDB4MDYwMDQgKyAoKF9pKSAqIDB4NDApKQpAQCAtMTU4LDcgKzI0MCwyMCBAQAogI2RlZmluZSBJWEdCRV9URFdCQUgoX2kpICgweDA2MDNDICsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgSVhHQkVfRFRYQ1RMICAgIDB4MDdFMDAKIAorI2RlZmluZSBJWEdCRV9ETUFUWENUTCAgMHgwNEE4MAorI2RlZmluZSBJWEdCRV9EVFhNWFNaUlEgICAgIDB4MDgxMDAKKyNkZWZpbmUgSVhHQkVfRFRYVENQRkxHTCAgICAweDA0QTg4CisjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0ggICAgMHgwNEE4QworI2RlZmluZSBJWEdCRV9MQkRSUEVOICAgICAgIDB4MENBMDAKKyNkZWZpbmUgSVhHQkVfVFhQQlRIUkVTSChfaSkgKDB4MDQ5NTAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDAgLSA3ICovCisKKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfVEUgICAgICAgMHgxIC8qIFRyYW5zbWl0IEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9ETUFUWENUTF9OUyAgICAgICAweDIgLyogTm8gU25vb3AgTFNPIGhkciBidWZmZXIgKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfR0RWICAgICAgMHg4IC8qIEdsb2JhbCBEb3VibGUgVkxBTiAqLworI2RlZmluZSBJWEdCRV9ETUFUWENUTF9WVF9TSElGVCAxNiAgLyogVkxBTiBFdGhlclR5cGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTChfaSkgICAgKDB4MDcyMDAgKyAoKF9pKSAqIDQpKSAvKiAxNiBvZiB0aGVzZSAoMC0xNSkgKi8KKy8qIFR4IERDQSBDb250cm9sIHJlZ2lzdGVyIDogMTI4IG9mIHRoZXNlICgwLTEyNykgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShfaSkgICgweDA2MDBDICsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgSVhHQkVfVElQRyAgICAgIDB4MENCMDAKICNkZWZpbmUgSVhHQkVfVFhQQlNJWkUoX2kpICAgICAgKDB4MENDMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX01OR1RYTUFQICAweDBDRDEwCkBAIC0xNzUsOSArMjcwLDY5IEBACiAKICNkZWZpbmUgSVhHQkVfV1VQTCAgICAgIDB4MDU5MDAKICNkZWZpbmUgSVhHQkVfV1VQTSAgICAgIDB4MDVBMDAgLyogd2FrZSB1cCBwa3QgbWVtb3J5IDB4NUEwMC0weDVBN0MgKi8KLSNkZWZpbmUgSVhHQkVfRkhGVCAgICAgIDB4MDkwMDAgLyogRmxleCBob3N0IGZpbHRlciB0YWJsZSA5MDAwLTkzRkMgKi8KKyNkZWZpbmUgSVhHQkVfRkhGVChfbikgICAgICgweDA5MDAwICsgKF9uICogMHgxMDApKSAvKiBGbGV4IGhvc3QgZmlsdGVyIHRhYmxlICovCisjZGVmaW5lIElYR0JFX0ZIRlRfRVhUKF9uKSAoMHgwOTgwMCArIChfbiAqIDB4MTAwKSkgLyogRXh0IEZsZXhpYmxlIEhvc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGaWx0ZXIgVGFibGUgKi8KIAotLyogTXVzaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0ZMRVhJQkxFX0ZJTFRFUl9DT1VOVF9NQVggICAgICAgICA0CisjZGVmaW5lIElYR0JFX0VYVF9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYICAgICAyCisKKy8qIEVhY2ggRmxleGlibGUgRmlsdGVyIGlzIGF0IG1vc3QgMTI4ICgweDgwKSBieXRlcyBpbiBsZW5ndGggKi8KKyNkZWZpbmUgSVhHQkVfRkxFWElCTEVfRklMVEVSX1NJWkVfTUFYICAxMjgKKyNkZWZpbmUgSVhHQkVfRkhGVF9MRU5HVEhfT0ZGU0VUICAgICAgICAweEZDICAvKiBMZW5ndGggYnl0ZSBpbiBGSEZUICovCisjZGVmaW5lIElYR0JFX0ZIRlRfTEVOR1RIX01BU0sgICAgICAgICAgMHgwRkYgLyogTGVuZ3RoIGluIGxvd2VyIGJ5dGUgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHdha2V1cCByZWdpc3RlcnMgKi8KKy8qIFdha2UgVXAgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9XVUNfUE1FX0VOICAgICAweDAwMDAwMDAyIC8qIFBNRSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VDX1BNRV9TVEFUVVMgMHgwMDAwMDAwNCAvKiBQTUUgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1dVQ19BRFZEM1dVQyAgIDB4MDAwMDAwMTAgLyogRDNDb2xkIHdha2UgdXAgY2FwLiBlbmFibGUqLworCisvKiBXYWtlIFVwIEZpbHRlciBDb250cm9sICovCisjZGVmaW5lIElYR0JFX1dVRkNfTE5LQyAweDAwMDAwMDAxIC8qIExpbmsgU3RhdHVzIENoYW5nZSBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTUFHICAweDAwMDAwMDAyIC8qIE1hZ2ljIFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRVggICAweDAwMDAwMDA0IC8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19NQyAgIDB4MDAwMDAwMDggLyogRGlyZWN0ZWQgTXVsdGljYXN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19CQyAgIDB4MDAwMDAwMTAgLyogQnJvYWRjYXN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19BUlAgIDB4MDAwMDAwMjAgLyogQVJQIFJlcXVlc3QgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19JUFY0IDB4MDAwMDAwNDAgLyogRGlyZWN0ZWQgSVB2NCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0lQVjYgMHgwMDAwMDA4MCAvKiBEaXJlY3RlZCBJUHY2IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTU5HICAweDAwMDAwMTAwIC8qIERpcmVjdGVkIE1nbXQgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9XVUZDX0lHTk9SRV9UQ08gICAweDAwMDA4MDAwIC8qIElnbm9yZSBXYWtlT24gVENPIHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgwIDB4MDAwMTAwMDAgLyogRmxleGlibGUgRmlsdGVyIDAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMSAweDAwMDIwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAxIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDIgMHgwMDA0MDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMiBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgzIDB4MDAwODAwMDAgLyogRmxleGlibGUgRmlsdGVyIDMgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYNCAweDAwMTAwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciA0IEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDUgMHgwMDIwMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgNSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFhfRklMVEVSUyAgICAgMHgwMDBGMDAwMCAvKiBNYXNrIGZvciA0IGZsZXggZmlsdGVycyAqLworI2RlZmluZSBJWEdCRV9XVUZDX0VYVF9GTFhfRklMVEVSUyAweDAwMzAwMDAwIC8qIE1hc2sgZm9yIEV4dC4gZmxleCBmaWx0ZXJzICovCisjZGVmaW5lIElYR0JFX1dVRkNfQUxMX0ZJTFRFUlMgICAgIDB4MDAzRjAwRkYgLyogTWFzayBmb3IgYWxsIDYgd2FrZXVwIGZpbHRlcnMqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWF9PRkZTRVQgICAgICAxNiAvKiBPZmZzZXQgdG8gdGhlIEZsZXhpYmxlIEZpbHRlcnMgYml0cyAqLworCisvKiBXYWtlIFVwIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9XVVNfTE5LQyAgSVhHQkVfV1VGQ19MTktDCisjZGVmaW5lIElYR0JFX1dVU19NQUcgICBJWEdCRV9XVUZDX01BRworI2RlZmluZSBJWEdCRV9XVVNfRVggICAgSVhHQkVfV1VGQ19FWAorI2RlZmluZSBJWEdCRV9XVVNfTUMgICAgSVhHQkVfV1VGQ19NQworI2RlZmluZSBJWEdCRV9XVVNfQkMgICAgSVhHQkVfV1VGQ19CQworI2RlZmluZSBJWEdCRV9XVVNfQVJQICAgSVhHQkVfV1VGQ19BUlAKKyNkZWZpbmUgSVhHQkVfV1VTX0lQVjQgIElYR0JFX1dVRkNfSVBWNAorI2RlZmluZSBJWEdCRV9XVVNfSVBWNiAgSVhHQkVfV1VGQ19JUFY2CisjZGVmaW5lIElYR0JFX1dVU19NTkcgICBJWEdCRV9XVUZDX01ORworI2RlZmluZSBJWEdCRV9XVVNfRkxYMCAgSVhHQkVfV1VGQ19GTFgwCisjZGVmaW5lIElYR0JFX1dVU19GTFgxICBJWEdCRV9XVUZDX0ZMWDEKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDIgIElYR0JFX1dVRkNfRkxYMgorI2RlZmluZSBJWEdCRV9XVVNfRkxYMyAgSVhHQkVfV1VGQ19GTFgzCisjZGVmaW5lIElYR0JFX1dVU19GTFg0ICBJWEdCRV9XVUZDX0ZMWDQKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDUgIElYR0JFX1dVRkNfRkxYNQorI2RlZmluZSBJWEdCRV9XVVNfRkxYX0ZJTFRFUlMgIElYR0JFX1dVRkNfRkxYX0ZJTFRFUlMKKworLyogV2FrZSBVcCBQYWNrZXQgTGVuZ3RoICovCisjZGVmaW5lIElYR0JFX1dVUExfTEVOR1RIX01BU0sgMHhGRkZGCisKKy8qIERDQiByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfUk1DUyAgICAgIDB4MDNEMDAKICNkZWZpbmUgSVhHQkVfRFBNQ1MgICAgIDB4MDdGNDAKICNkZWZpbmUgSVhHQkVfUERQTUNTICAgIDB4MENEMDAKQEAgLTE5MCw2ICszNDUsMTIyIEBACiAjZGVmaW5lIElYR0JFX1REUFQyVENTUihfaSkgICAgICgweDBDRDQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogCiAKKy8qIFNlY3VyaXR5IENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTCAgICAgICAgIDB4MDg4MDAKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUICAgICAgICAgMHgwODgwNAorI2RlZmluZSBJWEdCRV9TRUNUWEJVRkZBRiAgICAgICAweDA4ODA4CisjZGVmaW5lIElYR0JFX1NFQ1RYTUlOSUZHICAgICAgIDB4MDg4MTAKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUICAgICAgICAgMHgwODgwNAorI2RlZmluZSBJWEdCRV9TRUNSWENUUkwgICAgICAgICAweDA4RDAwCisjZGVmaW5lIElYR0JFX1NFQ1JYU1RBVCAgICAgICAgIDB4MDhEMDQKKworLyogU2VjdXJpdHkgQml0IEZpZWxkcyBhbmQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NFQ1RYX0RJUyAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9UWF9ESVMgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfU1RPUkVfRk9SV0FSRCAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBJWEdCRV9TRUNUWFNUQVRfU0VDVFhfUkRZICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUX0VDQ19UWEVSUiAgICAgICAweDAwMDAwMDAyCisKKyNkZWZpbmUgSVhHQkVfU0VDUlhDVFJMX1NFQ1JYX0RJUyAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTF9SWF9ESVMgICAgICAgICAgMHgwMDAwMDAwMgorCisjZGVmaW5lIElYR0JFX1NFQ1JYU1RBVF9TRUNSWF9SRFkgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNSWFNUQVRfRUNDX1JYRVJSICAgICAgIDB4MDAwMDAwMDIKKworLyogTGlua1NlYyAoTWFjU2VjKSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQICAgICAgICAgMHgwOEEwMAorI2RlZmluZSBJWEdCRV9MU0VDUlhDQVAgICAgICAgICAweDA4RjAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkwgICAgICAgIDB4MDhBMDQKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYU0NMICAgICAgICAgMHgwOEEwOCAvKiBTQ0kgTG93ICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFNDSCAgICAgICAgIDB4MDhBMEMgLyogU0NJIEhpZ2ggKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYU0EgICAgICAgICAgMHgwOEExMAorI2RlZmluZSBJWEdCRV9MU0VDVFhQTjAgICAgICAgICAweDA4QTE0CisjZGVmaW5lIElYR0JFX0xTRUNUWFBOMSAgICAgICAgIDB4MDhBMTgKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYS0VZMChfbikgICAgKDB4MDhBMUMgKyAoNCAqIChfbikpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0xTRUNUWEtFWTEoX24pICAgICgweDA4QTJDICsgKDQgKiAoX24pKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMICAgICAgICAweDA4RjA0CisjZGVmaW5lIElYR0JFX0xTRUNSWFNDTCAgICAgICAgIDB4MDhGMDgKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYU0NIICAgICAgICAgMHgwOEYwQworI2RlZmluZSBJWEdCRV9MU0VDUlhTQShfaSkgICAgICAoMHgwOEYxMCArICg0ICogKF9pKSkpIC8qIDIgb2YgdGhlc2UgKDAtMSkgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYUE4oX2kpICAgICAgKDB4MDhGMTggKyAoNCAqIChfaSkpKSAvKiAyIG9mIHRoZXNlICgwLTEpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWEtFWShfbiwgX20pICgweDA4RjIwICsgKCgweDEwICogKF9uKSkgKyAoNCAqIChfbSkpKSkKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYVVQgICAgICAgICAgMHgwOEEzQyAvKiBPdXRQa3RzVW50YWdnZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUEtURSAgICAgICAgMHgwOEE0MCAvKiBPdXRQa3RzRW5jcnlwdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFBLVFAgICAgICAgIDB4MDhBNDQgLyogT3V0UGt0c1Byb3RlY3RlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhPQ1RFICAgICAgICAweDA4QTQ4IC8qIE91dE9jdGV0c0VuY3J5cHRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhPQ1RQICAgICAgICAweDA4QTRDIC8qIE91dE9jdGV0c1Byb3RlY3RlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVVCAgICAgICAgICAweDA4RjQwIC8qIEluUGt0c1VudGFnZ2VkL0luUGt0c05vVGFnICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9DVEQgICAgICAgIDB4MDhGNDQgLyogSW5PY3RldHNEZWNyeXB0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYT0NUViAgICAgICAgMHgwOEY0OCAvKiBJbk9jdGV0c1ZhbGlkYXRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhCQUQgICAgICAgICAweDA4RjRDIC8qIEluUGt0c0JhZFRhZyAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOT1NDSSAgICAgICAweDA4RjUwIC8qIEluUGt0c05vU2NpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVOU0NJICAgICAgIDB4MDhGNTQgLyogSW5Qa3RzVW5rbm93blNjaSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVTkNIICAgICAgICAweDA4RjU4IC8qIEluUGt0c1VuY2hlY2tlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhERUxBWSAgICAgICAweDA4RjVDIC8qIEluUGt0c0RlbGF5ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTEFURSAgICAgICAgMHgwOEY2MCAvKiBJblBrdHNMYXRlICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9LKF9uKSAgICAgICgweDA4RjY0ICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzT2sgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYSU5WKF9uKSAgICAgKDB4MDhGNkMgKyAoMHgwNCAqIChfbikpKSAvKiBJblBrdHNJbnZhbGlkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE5WKF9uKSAgICAgICgweDA4Rjc0ICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzTm90VmFsaWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVU5TQSAgICAgICAgMHgwOEY3QyAvKiBJblBrdHNVbnVzZWRTYSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOVVNBICAgICAgICAweDA4RjgwIC8qIEluUGt0c05vdFVzaW5nU2EgKi8KKworLyogTGlua1NlYyAoTWFjU2VjKSBCaXQgRmllbGRzIGFuZCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhDQVBfU1VNX01BU0sgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQX1NVTV9TSElGVCAgICAgICAxNgorI2RlZmluZSBJWEdCRV9MU0VDUlhDQVBfU1VNX01BU0sgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQX1NVTV9TSElGVCAgICAgICAxNgorCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfRU5fTUFTSyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0RJU0FCTEUgICAgICAgIDB4MAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0FVVEggICAgICAgICAgIDB4MQorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0FVVEhfRU5DUllQVCAgIDB4MgorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0FJU0NJICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9QTlRIUlNIX01BU0sgICAweEZGRkZGRjAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfUlNWX01BU0sgICAgICAgMHgwMDAwMDBEOAorCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRU5fTUFTSyAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0VOX1NISUZUICAgICAgIDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9ESVNBQkxFICAgICAgICAweDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9DSEVDSyAgICAgICAgICAweDEKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9TVFJJQ1QgICAgICAgICAweDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9EUk9QICAgICAgICAgICAweDMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9QTFNIICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfUlAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1JTVl9NQVNLICAgICAgIDB4RkZGRkZGMzMKKworLyogSXBTZWMgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0lQU1RYSURYICAgICAgICAgIDB4MDg5MDAKKyNkZWZpbmUgSVhHQkVfSVBTVFhTQUxUICAgICAgICAgMHgwODkwNAorI2RlZmluZSBJWEdCRV9JUFNUWEtFWShfaSkgICAgICAoMHgwODkwOCArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhJRFggICAgICAgICAgMHgwOEUwMAorI2RlZmluZSBJWEdCRV9JUFNSWElQQUREUihfaSkgICAoMHgwOEUwNCArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhTUEkgICAgICAgICAgMHgwOEUxNAorI2RlZmluZSBJWEdCRV9JUFNSWElQSURYICAgICAgICAweDA4RTE4CisjZGVmaW5lIElYR0JFX0lQU1JYS0VZKF9pKSAgICAgICgweDA4RTFDICsgKDQgKiAoX2kpKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9JUFNSWFNBTFQgICAgICAgICAweDA4RTJDCisjZGVmaW5lIElYR0JFX0lQU1JYTU9EICAgICAgICAgIDB4MDhFMzAKKworI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfU1RPUkVfRk9SV0FSRF9FTkFCTEUgICAgMHg0CisKKy8qIERDQiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTICAgICAgMHgwMjQzMAorI2RlZmluZSBJWEdCRV9SVFREQ1MgICAgICAweDA0OTAwCisjZGVmaW5lIElYR0JFX1JUVFBDUyAgICAgIDB4MENEMDAKKyNkZWZpbmUgSVhHQkVfUlRSVVAyVEMgICAgMHgwMzAyMAorI2RlZmluZSBJWEdCRV9SVFRVUDJUQyAgICAweDBDODAwCisjZGVmaW5lIElYR0JFX1JUUlBUNEMoX2kpICgweDAyMTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRTKF9pKSAoMHgwMjE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRURFQyQyhfaSkgKDB4MDQ5MTAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERUMlMoX2kpICgweDA0OTMwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFRQVDJDKF9pKSAoMHgwQ0QyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUFQyUyhfaSkgKDB4MENENDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERRU0VMICAgIDB4MDQ5MDQKKyNkZWZpbmUgSVhHQkVfUlRURFQxQyAgICAgMHgwNDkwOAorI2RlZmluZSBJWEdCRV9SVFREVDFTICAgICAweDA0OTBDCisjZGVmaW5lIElYR0JFX1JUVERURUNDICAgIDB4MDQ5OTAKKyNkZWZpbmUgSVhHQkVfUlRURFRFQ0NfTk9fQkNOICAgMHgwMDAwMDEwMAorI2RlZmluZSBJWEdCRV9SVFRCQ05SQyAgICAweDA0OTg0CiAKIC8qIFN0YXRzIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9DUkNFUlJTICAgMHgwNDAwMApAQCAtMjA0LDYgKzQ3NSwxMSBAQAogI2RlZmluZSBJWEdCRV9MWE9OUlhDICAgMHgwQ0Y2MAogI2RlZmluZSBJWEdCRV9MWE9GRlRYQyAgMHgwM0Y2OAogI2RlZmluZSBJWEdCRV9MWE9GRlJYQyAgMHgwQ0Y2OAorI2RlZmluZSBJWEdCRV9MWE9OUlhDTlQgMHgwNDFBNAorI2RlZmluZSBJWEdCRV9MWE9GRlJYQ05UIDB4MDQxQTgKKyNkZWZpbmUgSVhHQkVfUFhPTlJYQ05UKF9pKSAgICAgKDB4MDQxNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1BYT0ZGUlhDTlQoX2kpICAgICgweDA0MTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9QWE9OMk9GRkNOVChfaSkgICAoMHgwMzI0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUFhPTlRYQyhfaSkgICAgICAgKDB4MDNGMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDNGMDAtM0YxQyovCiAjZGVmaW5lIElYR0JFX1BYT05SWEMoX2kpICAgICAgICgweDBDRjAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDRjAwLUNGMUMqLwogI2RlZmluZSBJWEdCRV9QWE9GRlRYQyhfaSkgICAgICAoMHgwM0YyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgM0YyMC0zRjNDKi8KQEAgLTI0MywxNCArNTE5LDIwIEBACiAjZGVmaW5lIElYR0JFX01QVEMgICAgICAweDA0MEYwCiAjZGVmaW5lIElYR0JFX0JQVEMgICAgICAweDA0MEY0CiAjZGVmaW5lIElYR0JFX1hFQyAgICAgICAweDA0MTIwCisjZGVmaW5lIElYR0JFX1NTVlBDICAgICAweDA4NzgwCiAKLSNkZWZpbmUgSVhHQkVfUlFTTVIoX2kpICgweDAyMzAwICsgKChfaSkgKiA0KSkgLyogMTYgb2YgdGhlc2UgKi8KLSNkZWZpbmUgSVhHQkVfVFFTTVIoX2kpICgoKF9pKSA8PSA3KSA/ICgweDA3MzAwICsgKChfaSkgKiA0KSkgOiAoMHgwODYwMCArICgoX2kpICogNCkpKQorI2RlZmluZSBJWEdCRV9SUVNNUihfaSkgKDB4MDIzMDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9UUVNNUihfaSkgKCgoX2kpIDw9IDcpID8gKDB4MDczMDAgKyAoKF9pKSAqIDQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwODYwMCArICgoX2kpICogNCkpKQorI2RlZmluZSBJWEdCRV9UUVNNKF9pKSAgKDB4MDg2MDAgKyAoKF9pKSAqIDQpKQogCiAjZGVmaW5lIElYR0JFX1FQUkMoX2kpICgweDAxMDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUVBUQyhfaSkgKDB4MDYwMzAgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9RQlJDKF9pKSAoMHgwMTAzNCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1FCVEMoX2kpICgweDA2MDM0ICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUVBSREMoX2kpICgweDAxNDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUUJUQ19MKF9pKSAoMHgwODcwMCArICgoX2kpICogMHg4KSkgLyogMTYgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUUJUQ19IKF9pKSAoMHgwODcwNCArICgoX2kpICogMHg4KSkgLyogMTYgb2YgdGhlc2UgKi8KIAogLyogTWFuYWdlbWVudCAqLwogI2RlZmluZSBJWEdCRV9NQVZUVihfaSkgKDB4MDUwMTAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCkBAIC0yNjMsNiArNTQ1LDkgQEAKICNkZWZpbmUgSVhHQkVfTU1BTChfaSkgICgweDA1OTEwICsgKChfaSkgKiA4KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9NTUFIKF9pKSAgKDB4MDU5MTQgKyAoKF9pKSAqIDgpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCiAjZGVmaW5lIElYR0JFX0ZURlQgICAgICAweDA5NDAwIC8qIDB4OTQwMC0weDk3RkMgKi8KKyNkZWZpbmUgSVhHQkVfTUVURihfaSkgICgweDA1MTkwICsgKChfaSkgKiA0KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9NREVGX0VYVChfaSkgKDB4MDUxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX0xTV0ZXICAgICAweDE1MDE0CiAKIC8qIEFSQyBTdWJzeXN0ZW0gcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0hJQ1IgICAgICAweDE1RjAwCkBAIC0yOTUsMTYgKzU4MCw2NSBAQAogI2RlZmluZSBJWEdCRV9EQ0FfSUQgICAgMHgxMTA3MAogI2RlZmluZSBJWEdCRV9EQ0FfQ1RSTCAgMHgxMTA3NAogCisvKiBQQ0llIHJlZ2lzdGVycyA4MjU5OS1zcGVjaWZpYyAqLworI2RlZmluZSBJWEdCRV9HQ1JfRVhUICAgICAgICAgICAweDExMDUwCisjZGVmaW5lIElYR0JFX0dTQ0xfNV84MjU5OSAgICAgIDB4MTEwMzAKKyNkZWZpbmUgSVhHQkVfR1NDTF82XzgyNTk5ICAgICAgMHgxMTAzNAorI2RlZmluZSBJWEdCRV9HU0NMXzdfODI1OTkgICAgICAweDExMDM4CisjZGVmaW5lIElYR0JFX0dTQ0xfOF84MjU5OSAgICAgIDB4MTEwM0MKKyNkZWZpbmUgSVhHQkVfUEhZQURSXzgyNTk5ICAgICAgMHgxMTA0MAorI2RlZmluZSBJWEdCRV9QSFlEQVRfODI1OTkgICAgICAweDExMDQ0CisjZGVmaW5lIElYR0JFX1BIWUNUTF84MjU5OSAgICAgIDB4MTEwNDgKKyNkZWZpbmUgSVhHQkVfUEJBQ0xSXzgyNTk5ICAgICAgMHgxMTA2OAorI2RlZmluZSBJWEdCRV9DSUFBXzgyNTk5ICAgICAgICAweDExMDg4CisjZGVmaW5lIElYR0JFX0NJQURfODI1OTkgICAgICAgIDB4MTEwOEMKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzBfODI1OTkgMHgxMTA5MAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMV84MjU5OSAweDExMDk0CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18yXzgyNTk5IDB4MTEwOTgKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzNfODI1OTkgMHgxMTA5QworI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNF84MjU5OSAweDExMEEwCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR181XzgyNTk5IDB4MTEwQTQKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzZfODI1OTkgMHgxMTBBOAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfN184MjU5OSAweDExMEMwCisjZGVmaW5lIElYR0JFX0lOVFJQVF9DU1JfODI1OTkgIDB4MTEwQjAKKyNkZWZpbmUgSVhHQkVfSU5UUlBUX01BU0tfODI1OTkgMHgxMTBCOAorI2RlZmluZSBJWEdCRV9DRFFfTUJSXzgyNTk5ICAgICAweDExMEI0CisjZGVmaW5lIElYR0JFX01JU0NfUkVHXzgyNTk5ICAgIDB4MTEwRjAKKyNkZWZpbmUgSVhHQkVfRUNDX0NUUkxfMF84MjU5OSAgMHgxMTEwMAorI2RlZmluZSBJWEdCRV9FQ0NfQ1RSTF8xXzgyNTk5ICAweDExMTA0CisjZGVmaW5lIElYR0JFX0VDQ19TVEFUVVNfODI1OTkgIDB4MTEwRTAKKyNkZWZpbmUgSVhHQkVfQkFSX0NUUkxfODI1OTkgICAgMHgxMTBGNAorCisvKiBUaW1lIFN5bmMgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1RTWU5DUlhDVEwgMHgwNTE4OCAvKiBSeCBUaW1lIFN5bmMgQ29udHJvbCByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX1RTWU5DVFhDVEwgMHgwOEMwMCAvKiBUeCBUaW1lIFN5bmMgQ29udHJvbCByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX1JYU1RNUEwgICAgMHgwNTFFOCAvKiBSeCB0aW1lc3RhbXAgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhTVE1QSCAgICAweDA1MUE0IC8qIFJ4IHRpbWVzdGFtcCBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhTQVRSTCAgICAweDA1MUEwIC8qIFJ4IHRpbWVzdGFtcCBhdHRyaWJ1dGUgbG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhTQVRSSCAgICAweDA1MUE4IC8qIFJ4IHRpbWVzdGFtcCBhdHRyaWJ1dGUgaGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYTVRSTCAgICAgMHgwNTEyMCAvKiBSWCBtZXNzYWdlIHR5cGUgcmVnaXN0ZXIgbG93IC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFhTVE1QTCAgICAweDA4QzA0IC8qIFR4IHRpbWVzdGFtcCB2YWx1ZSBMb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9UWFNUTVBIICAgIDB4MDhDMDggLyogVHggdGltZXN0YW1wIHZhbHVlIEhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9TWVNUSU1MICAgIDB4MDhDMEMgLyogU3lzdGVtIHRpbWUgcmVnaXN0ZXIgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfU1lTVElNSCAgICAweDA4QzEwIC8qIFN5c3RlbSB0aW1lIHJlZ2lzdGVyIEhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9USU1JTkNBICAgIDB4MDhDMTQgLyogSW5jcmVtZW50IGF0dHJpYnV0ZXMgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9SWFVEUCAgICAgIDB4MDhDMUMgLyogVGltZSBTeW5jIFJ4IFVEUCBQb3J0IC0gUlcgKi8KKwogLyogRGlhZ25vc3RpYyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfUkRTVEFUQ1RMICAgMHgwMkMyMAogI2RlZmluZSBJWEdCRV9SRFNUQVQoX2kpICAoMHgwMkMwMCArICgoX2kpICogNCkpIC8qIDB4MDJDMDAtMHgwMkMxQyAqLwogI2RlZmluZSBJWEdCRV9SREhNUE4gICAgICAweDAyRjA4CiAjZGVmaW5lIElYR0JFX1JJQ19EVyhfaSkgICgweDAyRjEwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgSVhHQkVfUkRQUk9CRSAgICAgMHgwMkYyMAorI2RlZmluZSBJWEdCRV9SRE1BTSAgICAgICAweDAyRjMwCisjZGVmaW5lIElYR0JFX1JETUFEICAgICAgIDB4MDJGMzQKICNkZWZpbmUgSVhHQkVfVERTVEFUQ1RMICAgMHgwN0MyMAogI2RlZmluZSBJWEdCRV9URFNUQVQoX2kpICAoMHgwN0MwMCArICgoX2kpICogNCkpIC8qIDB4MDdDMDAgLSAweDA3QzFDICovCiAjZGVmaW5lIElYR0JFX1RESE1QTiAgICAgIDB4MDdGMDgKKyNkZWZpbmUgSVhHQkVfVERITVBOMiAgICAgMHgwODJGQworI2RlZmluZSBJWEdCRV9UWERFU0NJQyAgICAweDA4MkNDCiAjZGVmaW5lIElYR0JFX1RJQ19EVyhfaSkgICgweDA3RjEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVElDX0RXMihfaSkgKDB4MDgyQjAgKyAoKF9pKSAqIDQpKQogI2RlZmluZSBJWEdCRV9URFBST0JFICAgICAweDA3RjIwCiAjZGVmaW5lIElYR0JFX1RYQlVGQ1RSTCAgIDB4MEM2MDAKICNkZWZpbmUgSVhHQkVfVFhCVUZEQVRBMCAgMHgwQzYxMApAQCAtMzMyLDYgKzY2Niw4IEBACiAjZGVmaW5lIElYR0JFX1RYREFUQVJEUFRSKF9pKSAgICgweDBDNzIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDNzIwLUM3MkMqLwogI2RlZmluZSBJWEdCRV9UWERFU0NSRFBUUihfaSkgICAoMHgwQzczMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzczMC1DNzNDKi8KICNkZWZpbmUgSVhHQkVfUENJRUVDQ0NUTCAweDExMDZDCisjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwwIDB4MTExMDAKKyNkZWZpbmUgSVhHQkVfUENJRUVDQ0NUTDEgMHgxMTEwNAogI2RlZmluZSBJWEdCRV9QQlRYRUNDICAgMHgwQzMwMAogI2RlZmluZSBJWEdCRV9QQlJYRUNDICAgMHgwMzMwMAogI2RlZmluZSBJWEdCRV9HSEVDQ1IgICAgMHgxMTBCMApAQCAtMzU3LDI0ICs2OTMsNjEgQEAKICNkZWZpbmUgSVhHQkVfTVNSV0QgICAgIDB4MDQyNjAKICNkZWZpbmUgSVhHQkVfTUxBREQgICAgIDB4MDQyNjQKICNkZWZpbmUgSVhHQkVfTUhBREQgICAgIDB4MDQyNjgKKyNkZWZpbmUgSVhHQkVfTUFYRlJTICAgIDB4MDQyNjgKICNkZWZpbmUgSVhHQkVfVFJFRyAgICAgIDB4MDQyNkMKICNkZWZpbmUgSVhHQkVfUENTUzEgICAgIDB4MDQyODgKICNkZWZpbmUgSVhHQkVfUENTUzIgICAgIDB4MDQyOEMKICNkZWZpbmUgSVhHQkVfWFBDU1MgICAgIDB4MDQyOTAKKyNkZWZpbmUgSVhHQkVfTUZMQ04gICAgIDB4MDQyOTQKICNkZWZpbmUgSVhHQkVfU0VSREVTQyAgIDB4MDQyOTgKICNkZWZpbmUgSVhHQkVfTUFDUyAgICAgIDB4MDQyOUMKICNkZWZpbmUgSVhHQkVfQVVUT0MgICAgIDB4MDQyQTAKICNkZWZpbmUgSVhHQkVfTElOS1MgICAgIDB4MDQyQTQKKyNkZWZpbmUgSVhHQkVfTElOS1MyICAgIDB4MDQzMjQKICNkZWZpbmUgSVhHQkVfQVVUT0MyICAgIDB4MDQyQTgKICNkZWZpbmUgSVhHQkVfQVVUT0MzICAgIDB4MDQyQUMKICNkZWZpbmUgSVhHQkVfQU5MUDEgICAgIDB4MDQyQjAKICNkZWZpbmUgSVhHQkVfQU5MUDIgICAgIDB4MDQyQjQKICNkZWZpbmUgSVhHQkVfQVRMQVNDVEwgIDB4MDQ4MDAKKyNkZWZpbmUgSVhHQkVfTU1OR0MgICAgIDB4MDQyRDAKKyNkZWZpbmUgSVhHQkVfQU5MUE5QMSAgIDB4MDQyRDQKKyNkZWZpbmUgSVhHQkVfQU5MUE5QMiAgIDB4MDQyRDgKKyNkZWZpbmUgSVhHQkVfS1JQQ1NGQyAgIDB4MDQyRTAKKyNkZWZpbmUgSVhHQkVfS1JQQ1NTICAgIDB4MDQyRTQKKyNkZWZpbmUgSVhHQkVfRkVDUzEgICAgIDB4MDQyRTgKKyNkZWZpbmUgSVhHQkVfRkVDUzIgICAgIDB4MDQyRUMKKyNkZWZpbmUgSVhHQkVfU01BREFSQ1RMIDB4MTRGMTAKKyNkZWZpbmUgSVhHQkVfTVBWQyAgICAgIDB4MDQzMTgKKyNkZWZpbmUgSVhHQkVfU0dNSUlDICAgIDB4MDQzMTQKKworLyogT21lciBDT1JFQ1RMICovCisjZGVmaW5lIElYR0JFX0NPUkVDVEwgICAgICAgICAgIDB4MDE0RjAwCisvKiBCQVJDVFJMICovCisjZGVmaW5lIElYR0JFX0JBUkNUUkwgICAgICAgICAgIDB4MTEwRjQKKyNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9GTFNJWkUgICAgMHgwNzAwCisjZGVmaW5lIElYR0JFX0JBUkNUUkxfQ1NSU0laRSAgIDB4MjAwMAogCiAvKiBSRFJYQ1RMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX1JETVRTXzFfMiAgICAgMHgwMDAwMDAwMCAvKiBSeCBEZXNjIE1pbiBUaHJlc2hvbGQgU2l6ZSAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0NSQ1NUUklQICAgICAgMHgwMDAwMDAwMiAvKiBDUkMgU3RyaXAgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9NVk1FTiAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgSVhHQkVfUkRSWENUTF9ETUFJRE9ORSAgICAgIDB4MDAwMDAwMDggLyogRE1BIGluaXQgY3ljbGUgZG9uZSAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0FHR0RJUyAgICAgICAgMHgwMDAxMDAwMCAvKiBBZ2dyZWdhdGlvbiBkaXNhYmxlICovCisKKy8qIFJRVEMgQml0IE1hc2tzIGFuZCBTaGlmdHMgKi8KKyNkZWZpbmUgSVhHQkVfUlFUQ19TSElGVF9UQyhfaSkgICAgICgoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzBfTUFTSyAgICAgICAgICgweDcgPDwgMCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzFfTUFTSyAgICAgICAgICgweDcgPDwgNCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzJfTUFTSyAgICAgICAgICgweDcgPDwgOCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzNfTUFTSyAgICAgICAgICgweDcgPDwgMTIpCisjZGVmaW5lIElYR0JFX1JRVENfVEM0X01BU0sgICAgICAgICAoMHg3IDw8IDE2KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDNV9NQVNLICAgICAgICAgKDB4NyA8PCAyMCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzZfTUFTSyAgICAgICAgICgweDcgPDwgMjQpCisjZGVmaW5lIElYR0JFX1JRVENfVEM3X01BU0sgICAgICAgICAoMHg3IDw8IDI4KQorCisvKiBQU1JUWVBFLlJRUEwgQml0IG1hc2tzIGFuZCBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1JRUExfTUFTSyAgICAgMHg3CisjZGVmaW5lIElYR0JFX1BTUlRZUEVfUlFQTF9TSElGVCAgICAyOQogCiAvKiBDVFJMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0dJT19ESVMgICAgICAweDAwMDAwMDA0IC8qIEdsb2JhbCBJTyBNYXN0ZXIgRGlzYWJsZSBiaXQgKi8KQEAgLTM4OSw2ICs3NjIsNyBAQAogI2RlZmluZSBJWEdCRV9NSEFERF9NRlNfU0hJRlQgICAxNgogCiAvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9QRlJTVEQgICAweDAwMDA0MDAwIC8qIFBoeXNpY2FsIEZ1bmN0aW9uIFJlc2V0IERvbmUgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfTlNfRElTICAgMHgwMDAxMDAwMCAvKiBObyBTbm9vcCBkaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX1JPX0RJUyAgIDB4MDAwMjAwMDAgLyogUmVsYXhlZCBPcmRlcmluZyBkaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX0RSVl9MT0FEIDB4MTAwMDAwMDAgLyogRHJpdmVyIGxvYWRlZCBiaXQgZm9yIEZXICovCkBAIC00MDEsNiArNzc1LDggQEAKICNkZWZpbmUgSVhHQkVfRENBX0NUUkxfRENBX01PREVfQ0IyIDB4MDIgLyogRENBIE1vZGUgQ0IyICovCiAKICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLIDB4MDAwMDAwMUYgLyogUnggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1OTkgIDB4RkYwMDAwMDAgLyogUnggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5IDI0IC8qIFJ4IENQVUlEIFNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFJ4IERlc2MgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU4gKDEgPDwgNikgLyogRENBIFJ4IERlc2MgaGVhZGVyIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0RBVEFfRENBX0VOICgxIDw8IDcpIC8qIERDQSBSeCBEZXNjIHBheWxvYWQgZW5hYmxlICovCkBAIC00MDksNiArNzg1LDggQEAKICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4gKDEgPDwgMTUpIC8qIERDQSBSeCBTcGxpdCBIZWFkZXIgUk8gKi8KIAogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0sgMHgwMDAwMDAxRiAvKiBUeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfTUFTS184MjU5OSAgMHhGRjAwMDAwMCAvKiBUeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfU0hJRlRfODI1OTkgMjQgLyogVHggQ1BVSUQgU2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTiAoMSA8PCA1KSAvKiBEQ0EgVHggRGVzYyBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTiAoMSA8PCAxMSkgLyogVHggRGVzYyB3cml0ZWJhY2sgUk8gYml0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9NQVhfUVVFVUVTXzgyNTk4ICAgMTYgLyogRENBIHJlZ3Mgb25seSBvbiAxNiBxdWV1ZXMgKi8KQEAgLTQ1Miw2ICs4MzAsOCBAQAogI2RlZmluZSBJWEdCRV9BVExBU19QRE5fVFhfMUdfUUxfQUxMICAgIDB4RjAKICNkZWZpbmUgSVhHQkVfQVRMQVNfUEROX1RYX0FOX1FMX0FMTCAgICAweEYwCiAKKy8qIE9tZXIgYml0IG1hc2tzICovCisjZGVmaW5lIElYR0JFX0NPUkVDVExfV1JJVEVfQ01EICAgICAgICAgMHgwMDAxMDAwMAogCiAvKiBEZXZpY2UgVHlwZSBkZWZpbml0aW9ucyBmb3IgbmV3IHByb3RvY29sIE1ESU8gY29tbWFuZHMgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX0RFVl9UWVBFICAgICAgICAgICAgICAgMHgxCkBAIC00NzksOCArODU5LDExIEBACiAjZGVmaW5lIElYR0JFX01ESU9fUEhZX1NQRUVEX0FCSUxJVFkgICAweDQgLyogU3BlZWQgQWJpbGl0eSBSZWcgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QSFlfU1BFRURfMTBHICAgICAgIDB4MDAwMSAvKiAxMEcgY2FwYWJsZSAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BIWV9TUEVFRF8xRyAgICAgICAgMHgwMDEwIC8qIDFHIGNhcGFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QSFlfRVhUX0FCSUxJVFkgICAgICAgIDB4QiAvKiBFeHQgQWJpbGl0eSBSZWcgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QSFlfMTBHQkFTRVRfQUJJTElUWSAgIDB4MDAwNCAvKiAxMEdCYXNlVCBjYXBhYmxlICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZXzEwMDBCQVNFVF9BQklMSVRZICAweDAwMjAgLyogMTAwMEJhc2VUIGNhcGFibGUgKi8KIAotI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9BRERSICAgICAweEMzMEEgLyogUEhZX1hTIFNEQS9TQ0wgQWRkcmVzcyBSZWcgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfQUREUiAgICAgMHhDMzBBIC8qIFBIWV9YUyBTREEvU0NMIEFkZHIgUmVnICovCiAjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX0RBVEEgICAgIDB4QzMwQiAvKiBQSFlfWFMgU0RBL1NDTCBEYXRhIFJlZyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9TVEFUICAgICAweEMzMEMgLyogUEhZX1hTIFNEQS9TQ0wgU3RhdHVzIFJlZyAqLwogCkBAIC00OTUsNyArODc4LDcgQEAKICNkZWZpbmUgSVhHQkVfUEhZX1JFVklTSU9OX01BU0sgICAgICAgIDB4RkZGRkZGRjAKICNkZWZpbmUgSVhHQkVfTUFYX1BIWV9BRERSICAgICAgICAgICAgIDMyCiAKLS8qIFBIWSBJRHMgKi8KKy8qIFBIWSBJRHMqLwogI2RlZmluZSBUTjEwMTBfUEhZX0lEICAgIDB4MDBBMTk0MTAKICNkZWZpbmUgVE5YX0ZXX1JFViAgICAgICAweEIKICNkZWZpbmUgUVQyMDIyX1BIWV9JRCAgICAweDAwNDNBNDAwCkBAIC01MTUsMTUgKzg5OCwyMiBAQAogI2RlZmluZSBJWEdCRV9DT05UUk9MX05MICAgICAgICAgMHgwMDBGCiAjZGVmaW5lIElYR0JFX0NPTlRST0xfRU9MX05MICAgICAweDBGRkYKICNkZWZpbmUgSVhHQkVfQ09OVFJPTF9TT0xfTkwgICAgIDB4MDAwMAorI2RlZmluZSBJWEdCRV9QSFlfRU5GT1JDRV9JTlRFTF9TRlBfT0ZGU0VUIDB4MDAyQworI2RlZmluZSBJWEdCRV9QSFlfQUxMT1dfQU5ZX1NGUCAgICAgICAgICAgIDB4MQogCiAvKiBHZW5lcmFsIHB1cnBvc2UgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9TRFAwX0dQSUVOICAgICAgICAgMHgwMDAwMDAwMSAvKiBTRFAwICovCiAjZGVmaW5lIElYR0JFX1NEUDFfR1BJRU4gICAgICAgICAweDAwMDAwMDAyIC8qIFNEUDEgKi8KKyNkZWZpbmUgSVhHQkVfU0RQMl9HUElFTiAgICAgICAgIDB4MDAwMDAwMDQgLyogU0RQMiAqLwogI2RlZmluZSBJWEdCRV9HUElFX01TSVhfTU9ERSAgICAgMHgwMDAwMDAxMCAvKiBNU0ktWCBtb2RlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfT0NEICAgICAgICAgICAweDAwMDAwMDIwIC8qIE90aGVyIENsZWFyIERpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9FSU1FTiAgICAgICAgIDB4MDAwMDAwNDAgLyogSW1tZWRpYXRlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9FSUFNRSAgICAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgSVhHQkVfR1BJRV9QQkFfU1VQUE9SVCAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfTUFTSyAgIDB4MDAwMEMwMDAgLyogVlQgTW9kZSBNYXNrICovCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzE2ICAgICAweDAwMDA0MDAwIC8qIDE2IFZGcyA4IHF1ZXVlcyBwZXIgVkYgKi8KKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfMzIgICAgIDB4MDAwMDgwMDAgLyogMzIgVkZzIDQgcXVldWVzIHBlciBWRiAqLworI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV82NCAgICAgMHgwMDAwQzAwMCAvKiA2NCBWRnMgMiBxdWV1ZXMgcGVyIFZGICovCiAKIC8qIFRyYW5zbWl0IEZsb3cgQ29udHJvbCBzdGF0dXMgKi8KICNkZWZpbmUgSVhHQkVfVEZDU19UWE9GRiAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTU2NCw2ICs5NTQsMjEgQEAKICNkZWZpbmUgSVhHQkVfVk1EX0NUTF9WTURRX0VOICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIElYR0JFX1ZNRF9DVExfVk1EUV9GSUxURVIgMHgwMDAwMDAwMgogCisvKiBWVF9DVEwgYml0bWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX0RJU19ERUZQTCAgMHgyMDAwMDAwMCAvKiBkaXNhYmxlIGRlZmF1bHQgcG9vbCAqLworI2RlZmluZSBJWEdCRV9WVF9DVExfUkVQTEVOICAgICAweDQwMDAwMDAwIC8qIHJlcGxpY2F0aW9uIGVuYWJsZWQgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX1ZUX0VOQUJMRSAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFZUIE1vZGUgKi8KKworLyogVk1PTFIgYml0bWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfQVVQRSAgICAgICAgMHgwMTAwMDAwMCAvKiBhY2NlcHQgdW50YWdnZWQgcGFja2V0cyAqLworI2RlZmluZSBJWEdCRV9WTU9MUl9ST01QRSAgICAgICAweDAyMDAwMDAwIC8qIGFjY2VwdCBwYWNrZXRzIGluIE1UQSB0YmwgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfUk9QRSAgICAgICAgMHgwNDAwMDAwMCAvKiBhY2NlcHQgcGFja2V0cyBpbiBVQyB0YmwgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfQkFNICAgICAgICAgMHgwODAwMDAwMCAvKiBhY2NlcHQgYnJvYWRjYXN0IHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfTVBFICAgICAgICAgMHgxMDAwMDAwMCAvKiBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgKi8KKworLyogVkZSRSBiaXRtYXNrICovCisjZGVmaW5lIElYR0JFX1ZGUkVfRU5BQkxFX0FMTCAgIDB4RkZGRkZGRkYKKwogLyogUkRITVBOIGFuZCBUREhNUE4gYml0bWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNBRERSICAgICAgIDB4MDA3RkY4MDAKICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNSRFJFUSAgICAgIDB4MDA4MDAwMDAKQEAgLTU3MiwxMyArOTc3LDM5IEBACiAjZGVmaW5lIElYR0JFX1RESE1QTl9URElDUkRSRVEgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX1RESE1QTl9URElDQUREUl9TSElGVCAxMQogCisjZGVmaW5lIElYR0JFX1JETUFNX01FTV9TRUxfU0hJRlQgICAxMworI2RlZmluZSBJWEdCRV9SRE1BTV9EV09SRF9TSElGVCAgICAgOQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTVBfRklGTyAgMQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk8gICAgMgorI2RlZmluZSBJWEdCRV9SRE1BTV9UQ05fU1RBVFVTX1JBTSAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9XQl9DT0xMX0ZJRk8gICAgNQorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTSAgICAgNgorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfQ05UICAgOAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfUkFNICAgMHhBCisjZGVmaW5lIElYR0JFX1JETUFNX0RFU0NfQ09NX0ZJRk9fUkFOR0UgICAgIDEzNQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTV9GSUZPX0NPVU5UICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX0RGQ19DTURfRklGT19SQU5HRSAgICAgIDQ4CisjZGVmaW5lIElYR0JFX1JETUFNX0RGQ19DTURfRklGT19DT1VOVCAgICAgIDcKKyNkZWZpbmUgSVhHQkVfUkRNQU1fVENOX1NUQVRVU19SQU1fUkFOR0UgICAgMjU2CisjZGVmaW5lIElYR0JFX1JETUFNX1RDTl9TVEFUVVNfUkFNX0NPVU5UICAgIDkKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPX1JBTkdFICAgICAgOAorI2RlZmluZSBJWEdCRV9SRE1BTV9XQl9DT0xMX0ZJRk9fQ09VTlQgICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19DTlRfUkFNX1JBTkdFICAgICAgIDY0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19DTlRfUkFNX0NPVU5UICAgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVF9SQU5HRSAgICAgMzIKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVF9DT1VOVCAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfUkFNX1JBTkdFICAgICAxMjgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTV9DT1VOVCAgICAgOAorCisjZGVmaW5lIElYR0JFX1RYREVTQ0lDX1JFQURZICAgICAgICAweDgwMDAwMDAwCisKIC8qIFJlY2VpdmUgQ2hlY2tzdW0gQ29udHJvbCAqLwogI2RlZmluZSBJWEdCRV9SWENTVU1fSVBQQ1NFICAgICAweDAwMDAxMDAwICAgLyogSVAgcGF5bG9hZCBjaGVja3N1bSBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfUlhDU1VNX1BDU0QgICAgICAgMHgwMDAwMjAwMCAgIC8qIHBhY2tldCBjaGVja3N1bSBkaXNhYmxlZCAqLwogCiAvKiBGQ1JUTCBCaXQgTWFza3MgKi8KLSNkZWZpbmUgSVhHQkVfRkNSVExfWE9ORSAgICAgICAgMHg4MDAwMDAwMCAgLyogYml0IDMxLCBYT04gZW5hYmxlICovCi0jZGVmaW5lIElYR0JFX0ZDUlRIX0ZDRU4gICAgICAgIDB4ODAwMDAwMDAgIC8qIFJ4IEZsb3cgY29udHJvbCBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNSVExfWE9ORSAgICAgICAgMHg4MDAwMDAwMCAgLyogWE9OIGVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9GQ1JUSF9GQ0VOICAgICAgICAweDgwMDAwMDAwICAvKiBQYWNrZXQgYnVmZmVyIGZjIGVuYWJsZSAqLwogCiAvKiBQQVAgYml0IG1hc2tzKi8KICNkZWZpbmUgSVhHQkVfUEFQX1RYUEFVU0VDTlRfTUFTSyAgIDB4MDAwMEZGRkYgLyogUGF1c2UgY291bnRlciBtYXNrICovCkBAIC01ODgsMTkgKzEwMTksMjkgQEAKIC8qIFJlY2VpdmUgQXJiaXRyYXRpb24gQ29udHJvbDogMCBSb3VuZCBSb2JpbiwgMSBERlAgKi8KICNkZWZpbmUgSVhHQkVfUk1DU19SQUMgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBJWEdCRV9STUNTX0RGUCAgICAgICAgICBJWEdCRV9STUNTX1JBQyAvKiBEZWZpY2l0IEZpeGVkIFByaW9yaXR5IGVuYSAqLwotI2RlZmluZSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYICAweDAwMDAwMDA4IC8qIFR4IFByaW9yaXR5IGZsb3cgY29udHJvbCBlbmEgKi8KLSNkZWZpbmUgSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIDB4MDAwMDAwMTAgLyogVHggUHJpb3JpdHkgZmxvdyBjb250cm9sIGVuYSAqLworI2RlZmluZSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYICAgICAgICAgMHgwMDAwMDAwOCAvKiBUeCBQcmlvcml0eSBGQyBlbmEgKi8KKyNkZWZpbmUgSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZICAgICAgIDB4MDAwMDAwMTAgLyogVHggUHJpb3JpdHkgRkMgZW5hICovCiAjZGVmaW5lIElYR0JFX1JNQ1NfQVJCRElTICAgICAgIDB4MDAwMDAwNDAgLyogQXJiaXRyYXRpb24gZGlzYWJsZSBiaXQgKi8KIAorLyogRkNDRkcgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYICAgICAgICAgMHgwMDAwMDAwOCAvKiBUeCBsaW5rIEZDIGVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9GQ0NGR19URkNFX1BSSU9SSVRZICAgICAgIDB4MDAwMDAwMTAgLyogVHggcHJpb3JpdHkgRkMgZW5hYmxlICovCiAKIC8qIEludGVycnVwdCByZWdpc3RlciBiaXRtYXNrcyAqLwogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgQ2F1c2UgUmVhZCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1JUWF9RVUVVRSAgICAweDAwMDBGRkZGIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9GTE9XX0RJUiAgICAgMHgwMDAxMDAwMCAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNSX1JYX01JU1MgICAgICAweDAwMDIwMDAwIC8qIFBhY2tldCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSUNSX1BDSSAgICAgICAgICAweDAwMDQwMDAwIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9NQUlMQk9YICAgICAgMHgwMDA4MDAwMCAvKiBWRiB0byBQRiBNYWlsYm94IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0xTQyAgICAgICAgICAweDAwMTAwMDAwIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBJWEdCRV9FSUNSX0xJTktTRUMgICAgICAweDAwMjAwMDAwIC8qIFBOIFRocmVzaG9sZCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX01ORyAgICAgICAgICAweDAwNDAwMDAwIC8qIE1hbmFnZWFiaWxpdHkgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfR1BJX1NEUDAgICAgIDB4MDEwMDAwMDAgLyogR2VuIFB1cnBvc2UgSW50ZXJydXB0IG9uIFNEUDAgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9HUElfU0RQMSAgICAgMHgwMjAwMDAwMCAvKiBHZW4gUHVycG9zZSBJbnRlcnJ1cHQgb24gU0RQMSAqLworI2RlZmluZSBJWEdCRV9FSUNSX0dQSV9TRFAyICAgICAweDA0MDAwMDAwIC8qIEdlbiBQdXJwb3NlIEludGVycnVwdCBvbiBTRFAyICovCisjZGVmaW5lIElYR0JFX0VJQ1JfRUNDICAgICAgICAgIDB4MTAwMDAwMDAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfUEJVUiAgICAgICAgIDB4MTAwMDAwMDAgLyogUGFja2V0IEJ1ZmZlciBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfREhFUiAgICAgICAgIDB4MjAwMDAwMDAgLyogRGVzY3JpcHRvciBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfVENQX1RJTUVSICAgIDB4NDAwMDAwMDAgLyogVENQIFRpbWVyICovCkBAIC02MDgsMTAgKzEwNDksMTYgQEAKIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFNldCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfRkxPV19ESVIgICAgIElYR0JFX0VJQ1JfRkxPV19ESVIgIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1NfUlhfTUlTUyAgICAgIElYR0JFX0VJQ1JfUlhfTUlTUyAgIC8qIFBrdCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSUNTX1BDSSAgICAgICAgICBJWEdCRV9FSUNSX1BDSSAgICAgICAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1NfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfTFNDICAgICAgICAgIElYR0JFX0VJQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBJWEdCRV9FSUNTX01ORyAgICAgICAgICBJWEdCRV9FSUNSX01ORyAgICAgICAvKiBNTkcgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfR1BJX1NEUDAgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDAgIC8qIFNEUDAgR2VuIFB1cnBvc2UgSW50ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfR1BJX1NEUDEgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDEgIC8qIFNEUDEgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfR1BJX1NEUDIgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDIgIC8qIFNEUDIgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfRUNDICAgICAgICAgIElYR0JFX0VJQ1JfRUNDICAgICAgIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX1BCVVIgICAgICAgICBJWEdCRV9FSUNSX1BCVVIgICAgICAvKiBQa3QgQnVmIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfREhFUiAgICAgICAgIElYR0JFX0VJQ1JfREhFUiAgICAgIC8qIERlc2MgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTYxOSwxMCArMTA2NiwxNiBAQAogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSU1TX0ZMT1dfRElSICAgICBJWEdCRV9FSUNSX0ZMT1dfRElSICAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSU1TX1JYX01JU1MgICAgICBJWEdCRV9FSUNSX1JYX01JU1MgICAvKiBQYWNrZXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19QQ0kgICAgICAgICAgSVhHQkVfRUlDUl9QQ0kgICAgICAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSU1TX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0xTQyAgICAgICAgICBJWEdCRV9FSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19NTkcgICAgICAgICAgSVhHQkVfRUlDUl9NTkcgICAgICAgLyogTU5HIEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0dQSV9TRFAwICAgICBJWEdCRV9FSUNSX0dQSV9TRFAwICAvKiBTRFAwIEdlbiBQdXJwb3NlIEludCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0dQSV9TRFAxICAgICBJWEdCRV9FSUNSX0dQSV9TRFAxICAvKiBTRFAxIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSU1TX0dQSV9TRFAyICAgICBJWEdCRV9FSUNSX0dQSV9TRFAyICAvKiBTRFAyIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSU1TX0VDQyAgICAgICAgICBJWEdCRV9FSUNSX0VDQyAgICAgICAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19QQlVSICAgICAgICAgSVhHQkVfRUlDUl9QQlVSICAgICAgLyogUGt0IEJ1ZiBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0RIRVIgICAgICAgICBJWEdCRV9FSUNSX0RIRVIgICAgICAvKiBEZXNjciBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTVNfVENQX1RJTUVSICAgIElYR0JFX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwpAQCAtNjMwLDEwICsxMDgzLDE2IEBACiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIENsZWFyICovCiAjZGVmaW5lIElYR0JFX0VJTUNfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19GTE9XX0RJUiAgICAgSVhHQkVfRUlDUl9GTE9XX0RJUiAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19SWF9NSVNTICAgICAgSVhHQkVfRUlDUl9SWF9NSVNTICAgLyogUGFja2V0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJTUNfUENJICAgICAgICAgIElYR0JFX0VJQ1JfUENJICAgICAgIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19MU0MgICAgICAgICAgSVhHQkVfRUlDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIElYR0JFX0VJTUNfTU5HICAgICAgICAgIElYR0JFX0VJQ1JfTU5HICAgICAgIC8qIE1ORyBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19HUElfU0RQMCAgICAgSVhHQkVfRUlDUl9HUElfU0RQMCAgLyogU0RQMCBHZW4gUHVycG9zZSBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19HUElfU0RQMSAgICAgSVhHQkVfRUlDUl9HUElfU0RQMSAgLyogU0RQMSBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19HUElfU0RQMiAgICAgSVhHQkVfRUlDUl9HUElfU0RQMiAgLyogU0RQMiBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19FQ0MgICAgICAgICAgSVhHQkVfRUlDUl9FQ0MgICAgICAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTUNfUEJVUiAgICAgICAgIElYR0JFX0VJQ1JfUEJVUiAgICAgIC8qIFBrdCBCdWYgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19ESEVSICAgICAgICAgSVhHQkVfRUlDUl9ESEVSICAgICAgLyogRGVzYyBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTY1Niw2ICsxMTE1LDMzIEBACiAjZGVmaW5lIElYR0JFX0lNSVJFWFRfQ1RSTF9TWU4gICAgMHgwMDAyMDAwMCAgLyogQ2hlY2sgU1lOIGJpdCBpbiBoZWFkZXIgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVF9DVFJMX0ZJTiAgICAweDAwMDQwMDAwICAvKiBDaGVjayBGSU4gYml0IGluIGhlYWRlciAqLwogI2RlZmluZSBJWEdCRV9JTUlSRVhUX0NUUkxfQlAgICAgIDB4MDAwODAwMDAgIC8qIEJ5cGFzcyBjaGVjayBvZiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9TSVpFX0JQXzgyNTk5ICAweDAwMDAxMDAwIC8qIFBhY2tldCBzaXplIGJ5cGFzcyAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfVVJHXzgyNTk5IDB4MDAwMDIwMDAgLyogQ2hlY2sgVVJHIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX0FDS184MjU5OSAweDAwMDA0MDAwIC8qIENoZWNrIEFDSyBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9QU0hfODI1OTkgMHgwMDAwODAwMCAvKiBDaGVjayBQU0ggYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfUlNUXzgyNTk5IDB4MDAwMTAwMDAgLyogQ2hlY2sgUlNUIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1NZTl84MjU5OSAweDAwMDIwMDAwIC8qIENoZWNrIFNZTiBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9GSU5fODI1OTkgMHgwMDA0MDAwMCAvKiBDaGVjayBGSU4gYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfQlBfODI1OTkgIDB4MDAwODAwMDAgLyogQnlwYXNzIGNoZWNrIG9mIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBJWEdCRV9JTUlSX0xMSV9FTl84MjU5OSAgIDB4MDAxMDAwMDAgLyogRW5hYmxlcyBsb3cgbGF0ZW5jeSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9SWF9RVUVVRV9NQVNLXzgyNTk5ICAweDAwMDAwMDdGIC8qIFJ4IFF1ZXVlIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9SWF9RVUVVRV9TSElGVF84MjU5OSAyMSAvKiBSeCBRdWV1ZSBTaGlmdCAqLworI2RlZmluZSBJWEdCRV9JTUlSVlBfUFJJT1JJVFlfTUFTSyAgICAgIDB4MDAwMDAwMDcgLyogVkxBTiBwcmlvcml0eSBtYXNrICovCisjZGVmaW5lIElYR0JFX0lNSVJWUF9QUklPUklUWV9FTiAgICAgICAgMHgwMDAwMDAwOCAvKiBWTEFOIHByaW9yaXR5IGVuYWJsZSAqLworCisjZGVmaW5lIElYR0JFX01BWF9GVFFGX0ZJTFRFUlMgICAgICAgICAgMTI4CisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfTUFTSyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX1RDUCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9VRFAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfU0NUUCAgICAgICAgMgorI2RlZmluZSBJWEdCRV9GVFFGX1BSSU9SSVRZX01BU0sgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUklPUklUWV9TSElGVCAgICAgICAyCisjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJWEdCRV9GVFFGX1BPT0xfU0hJRlQgICAgICAgICAgIDgKKyNkZWZpbmUgSVhHQkVfRlRRRl81VFVQTEVfTUFTS19NQVNLICAgICAweDAwMDAwMDFGCisjZGVmaW5lIElYR0JFX0ZUUUZfNVRVUExFX01BU0tfU0hJRlQgICAgMjUKKyNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX01BU0tfRU4gICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElYR0JFX0ZUUUZfUVVFVUVfRU5BQkxFICAgICAgICAgMHg4MDAwMDAwMAogCiAvKiBJbnRlcnJ1cHQgY2xlYXIgbWFzayAqLwogI2RlZmluZSBJWEdCRV9JUlFfQ0xFQVJfTUFTSyAgICAweEZGRkZGRkZGCkBAIC02NzUsNiArMTE2MSwzMSBAQAogCiAjZGVmaW5lIElYR0JFX0lWQVJfQUxMT0NfVkFMICAgIDB4ODAgLyogSW50ZXJydXB0IEFsbG9jYXRpb24gdmFsaWQgKi8KIAorLyogRVRZUEUgUXVldWUgRmlsdGVyL1NlbGVjdCBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfTUFYX0VUUUZfRklMVEVSUyAgOAorI2RlZmluZSBJWEdCRV9FVFFGX0JDTiAgICAgICAgICAweDEwMDAwMDAwIC8qIGJpdCAyOCAqLworI2RlZmluZSBJWEdCRV9FVFFGXzE1ODggICAgICAgICAweDQwMDAwMDAwIC8qIGJpdCAzMCAqLworI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9FTiAgICAweDgwMDAwMDAwIC8qIGJpdCAzMSAqLworI2RlZmluZSBJWEdCRV9FVFFGX1BPT0xfRU5BQkxFICAgKDEgPDwgMjYpIC8qIGJpdCAyNiAqLworCisjZGVmaW5lIElYR0JFX0VUUVNfUlhfUVVFVUUgICAgIDB4MDA3RjAwMDAgLyogYml0cyAyMjoxNiAqLworI2RlZmluZSBJWEdCRV9FVFFTX1JYX1FVRVVFX1NISUZUICAgICAgIDE2CisjZGVmaW5lIElYR0JFX0VUUVNfTExJICAgICAgICAgIDB4MjAwMDAwMDAgLyogYml0IDI5ICovCisjZGVmaW5lIElYR0JFX0VUUVNfUVVFVUVfRU4gICAgIDB4ODAwMDAwMDAgLyogYml0IDMxICovCisKKy8qCisgKiBFVFFGIGZpbHRlciBsaXN0OiBvbmUgc3RhdGljIGZpbHRlciBwZXIgZmlsdGVyIGNvbnN1bWVyLiBUaGlzIGlzCisgKiAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBmaWx0ZXIgY29sbGlzaW9ucyBsYXRlci4gQWRkIG5ldyBmaWx0ZXJzCisgKiAgICAgICAgICAgICAgICAgICBoZXJlISEKKyAqCisgKiBDdXJyZW50IGZpbHRlcnM6CisgKiAgICBFQVBPTCA4MDIuMXggKDB4ODg4ZSk6IEZpbHRlciAwCisgKiAgICBCQ04gKDB4ODkwNCk6ICAgICAgICAgIEZpbHRlciAxCisgKiAgICAxNTg4ICgweDg4ZjcpOiAgICAgICAgIEZpbHRlciAzCisgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRUFQT0wgICAgICAgICAgMAorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9CQ04gICAgICAgICAgICAxCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSXzE1ODggICAgICAgICAgIDMKIC8qIFZMQU4gQ29udHJvbCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9WRVQgICAgICAgMHgwMDAwRkZGRiAgLyogYml0cyAwLTE1ICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfQ0ZJICAgICAgIDB4MTAwMDAwMDAgIC8qIGJpdCAyOCAqLwpAQCAtNjgyLDIxICsxMTkzLDI4IEBACiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVkZFICAgICAgIDB4NDAwMDAwMDAgIC8qIGJpdCAzMCAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX1ZNRSAgICAgICAweDgwMDAwMDAwICAvKiBiaXQgMzEgKi8KIAorLyogVkxBTiBwb29sIGZpbHRlcmluZyBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9WTFZGX1ZJRU4gICAgICAgICAweDgwMDAwMDAwICAvKiBmaWx0ZXIgaXMgdmFsaWQgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRl9FTlRSSUVTICAgICAgNjQKIAogI2RlZmluZSBJWEdCRV9FVEhFUk5FVF9JRUVFX1ZMQU5fVFlQRSAweDgxMDAgIC8qIDgwMi4xcSBwcm90b2NvbCAqLwogCiAvKiBTVEFUVVMgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSUQgICAgIDB4MDAwMDAwMEMgLyogTEFOIElEICovCi0jZGVmaW5lIElYR0JFX1NUQVRVU19HSU8gICAgICAgIDB4MDAwODAwMDAgLyogR0lPIE1hc3RlciBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSUQgICAgICAgICAweDAwMDAwMDBDIC8qIExBTiBJRCAqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEX1NISUZUICAgMiAgICAgICAgICAvKiBMQU4gSUQgU2hpZnQqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfR0lPICAgICAgICAgICAgMHgwMDA4MDAwMCAvKiBHSU8gTWFzdGVyIEVuYWJsZSBTdGF0dXMgKi8KIAogI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEXzAgICAweDAwMDAwMDAwIC8qIExBTiBJRCAwICovCiAjZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSURfMSAgIDB4MDAwMDAwMDQgLyogTEFOIElEIDEgKi8KIAogLyogRVNEUCBCaXQgTWFza3MgKi8KLSNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0IDB4MDAwMDAwMDEgLyogU0RQNCBEYXRhIFZhbHVlICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNSAweDAwMDAwMDAyIC8qIFNEUDUgRGF0YSBWYWx1ZSAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9FU0RQX1NEUDEgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9FU0RQX1NEUDQgMHgwMDAwMDAxMCAvKiBTRFA0IERhdGEgVmFsdWUgKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA1IDB4MDAwMDAwMjAgLyogU0RQNSBEYXRhIFZhbHVlICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNiAweDAwMDAwMDQwIC8qIFNEUDYgRGF0YSBWYWx1ZSAqLwogI2RlZmluZSBJWEdCRV9FU0RQX1NEUDRfRElSICAgICAweDAwMDAwMDA0IC8qIFNEUDQgSU8gZGlyZWN0aW9uICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNV9ESVIgICAgIDB4MDAwMDAwMDggLyogU0RQNSBJTyBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA1X0RJUiAgICAgMHgwMDAwMjAwMCAvKiBTRFA1IElPIGRpcmVjdGlvbiAqLwogCiAvKiBMRURDVEwgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0xFRF9JVlJUX0JBU0UgICAgICAweDAwMDAwMDQwCkBAIC03MTksNiArMTIzNyw3IEBACiAjZGVmaW5lIElYR0JFX0xFRF9PRkYgICAgICAgICAgIDB4RgogCiAvKiBBVVRPQyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSyAweEMwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0tYNF9TVVBQICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfS1hfU1VQUCAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19QQVVTRSAgICAgICAweDMwMDAwMDAwCkBAIC03MjcsOSArMTI0NiwxNyBAQAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SWF9MT09TRSAweDAxMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JYX0RSSUZUIDB4MDA4MDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUlhfQUxJR04gMHgwMDdDMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQ19GRUNBICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DX0ZFQ1IgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfS1JfU1VQUCAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUICAweDAwMDAxMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0ZMVSAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX1NISUZUICAgMTMKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUwgICAgICAoMHgzIDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiAgICAgICAoMHg0IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX1NHTUlJXzFHXzEwME0gICAoMHg1IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl8xR19BTiAoMHg2IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSAoMHg3IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX01BU0sgICAgICAgICAgICAoMHg3IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU4gICAoMHgwIDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TXzEwR19MSU5LX05PX0FOICAoMHgxIDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKQEAgLTczOCwxNSArMTI2NSwyNCBAQAogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOICAgICgweDYgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUgICAgICgweDcgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRCAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTUQgICAgICAgIDB4MDAwMDAxODAKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQgNwotI2RlZmluZSBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9NQVNLICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCAgIDkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfTUFTSyAgIDB4MDAwMDAxODAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQgIDcKICNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1hBVUkgICAoMHgwIDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfS1g0ICAgICgweDEgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19DWDQgICAgKDB4MiA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfQlggICAgICAoMHgwIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0tYICAgICAgKDB4MSA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ18xR19TRkkgICAgICgweDAgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfS1hfQlggICAoMHgxIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCisKKyNkZWZpbmUgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0sgIDB4RkZGRjAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9NQVNLICAweDAwMDMwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQgMTYKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19LUiAgKDB4MCA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1hGSSAoMHgxIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0ZJICgweDIgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKIAogLyogTElOS1MgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0xJTktTX0tYX0FOX0NPTVAgIDB4ODAwMDAwMDAKQEAgLTc1Niw2ICsxMjkyLDcgQEAKICNkZWZpbmUgSVhHQkVfTElOS1NfUlhfTU9ERSAgICAgMHgwNjAwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19UWF9NT0RFICAgICAweDAxODAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX1hHWFNfRU4gICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU0dNSUlfRU4gICAgMHgwMjAwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19QQ1NfMUdfRU4gICAweDAwMjAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTXzFHX0FOX0VOICAgIDB4MDAxMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfS1hfQU5fSURMRSAgMHgwMDA4MDAwMApAQCAtNzY1LDkgKzEzMDIsMzUgQEAKICNkZWZpbmUgSVhHQkVfTElOS1NfVExfRkFVTFQgICAgMHgwMDAwMTAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19TSUdOQUwgICAgICAweDAwMDAwRjAwCiAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfODI1OTkgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfMTBHXzgyNTk5IDB4MzAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfMUdfODI1OTkgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfMTAwXzgyNTk5IDB4MTAwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS19VUF9USU1FICAgICAgOTAgLyogOS4wIFNlY29uZHMgKi8KICNkZWZpbmUgSVhHQkVfQVVUT19ORUdfVElNRSAgICAgNDUgLyogNC41IFNlY29uZHMgKi8KIAorI2RlZmluZSBGSUJFUl9MSU5LX1VQX0xJTUlUICAgICA1MAorCisvKiBQQ1MxR0xTVEEgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9MSU5LX09LICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfU1lOS19PSyAgICAgICAgIDB4MTAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX0NPTVBMRVRFICAgICAweDEwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9QQUdFX1JYICAgICAgMHgyMDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fVElNRURfT1VUICAgIDB4NDAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX1JFTU9URV9GQVVMVCAweDgwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9FUlJPUl9SV1MgICAgMHgxMDAwMDAKKworI2RlZmluZSBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgICAgICAgIDB4ODAKKyNkZWZpbmUgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFICAgICAgICAweDEwMAorCisvKiBQQ1MxR0xDVEwgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9BTl8xR19USU1FT1VUX0VOICAweDAwMDQwMDAwIC8qIFBDUyAxRyBhdXRvbmVnIHRvIGVuICovCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9GTFZfTElOS19VUCAgICAgMQorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfRk9SQ0VfTElOSyAgICAgIDB4MjAKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0xPV19MSU5LX0xBVENIICAweDQwCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9BTl9FTkFCTEUgICAgICAgMHgxMDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfQU5fUkVTVEFSVCAgICAgIDB4MjAwMDAKKwogLyogU1cgU2VtYXBob3JlIFJlZ2lzdGVyIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1NXU01fU01CSSAweDAwMDAwMDAxIC8qIERyaXZlciBTZW1hcGhvcmUgYml0ICovCiAjZGVmaW5lIElYR0JFX1NXU01fU1dFU01CSSAweDAwMDAwMDAyIC8qIEZXIFNlbWFwaG9yZSBiaXQgKi8KQEAgLTgxOSw2ICsxMzgyLDExIEBACiAjZGVmaW5lIElYR0JFX0ZXX1BUUiAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgSVhHQkVfUEJBTlVNMF9QVFIgICAgICAgMHgxNQogI2RlZmluZSBJWEdCRV9QQkFOVU0xX1BUUiAgICAgICAweDE2CisjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF84MjU5OV9DQVBTICAweDcyCisjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF84MjU5OF9DQVBTICAweDYyCisKKy8qIE1TSS1YIGNhcGFiaWxpdHkgZmllbGRzIG1hc2tzICovCisjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF9UQkxfU1pfTUFTSyAgICAgMHg3RkYKIAogLyogTGVnYWN5IEVFUFJPTSB3b3JkIG9mZnNldHMgKi8KICNkZWZpbmUgSVhHQkVfSVNDU0lfQk9PVF9DQVBTICAgICAgICAgICAweDAwMzMKQEAgLTg2Nyw2ICsxNDM1LDggQEAKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRUQgICAgICAweEYKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRURfMjUwMCAweDEKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMCAweDIKKyNkZWZpbmUgSVhHQkVfUENJX0hFQURFUl9UWVBFX1JFR0lTVEVSICAweDBFCisjZGVmaW5lIElYR0JFX1BDSV9IRUFERVJfVFlQRV9NVUxUSUZVTkMgMHg4MAogCiAvKiBOdW1iZXIgb2YgMTAwIG1pY3Jvc2Vjb25kcyB3ZSB3YWl0IGZvciBQQ0kgRXhwcmVzcyBtYXN0ZXIgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9QQ0lfTUFTVEVSX0RJU0FCTEVfVElNRU9VVCA4MDAKQEAgLTkxOSw2ICsxNDg5LDcgQEAKICNkZWZpbmUgSVhHQkVfUlhDVFJMX1JYRU4gICAgICAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFJlY2VpdmVyICovCiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9ETUJZUFMgICAgIDB4MDAwMDAwMDIgIC8qIERlc2NyaXB0b3IgTW9uaXRvciBCeXBhc3MgKi8KICNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCisjZGVmaW5lIElYR0JFX1JYRENUTF9WTUUgICAgICAgIDB4NDAwMDAwMDAgIC8qIFZMQU4gbW9kZSBlbmFibGUgKi8KIAogI2RlZmluZSBJWEdCRV9GQ1RSTF9TQlAgMHgwMDAwMDAwMiAvKiBTdG9yZSBCYWQgUGFja2V0ICovCiAjZGVmaW5lIElYR0JFX0ZDVFJMX01QRSAweDAwMDAwMTAwIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyBFbmEqLwpAQCAtOTI5LDkgKzE1MDAsMjMgQEAKIC8qIFJlY2VpdmUgUHJpb3JpdHkgRmxvdyBDb250cm9sIEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9GQ1RSTF9SUEZDRSAweDAwMDA0MDAwCiAjZGVmaW5lIElYR0JFX0ZDVFJMX1JGQ0UgMHgwMDAwODAwMCAvKiBSZWNlaXZlIEZsb3cgQ29udHJvbCBFbmEgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUE1DRiAgICAgICAgMHgwMDAwMDAwMSAvKiBQYXNzIE1BQyBDb250cm9sIEZyYW1lcyAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9EUEYgICAgICAgICAweDAwMDAwMDAyIC8qIERpc2NhcmQgUGF1c2UgRnJhbWUgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUlBGQ0UgICAgICAgMHgwMDAwMDAwNCAvKiBSZWNlaXZlIFByaW9yaXR5IEZDIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9SRkNFICAgICAgICAweDAwMDAwMDA4IC8qIFJlY2VpdmUgRkMgRW5hYmxlICovCiAKIC8qIE11bHRpcGxlIFJlY2VpdmUgUXVldWUgQ29udHJvbCAqLwogI2RlZmluZSBJWEdCRV9NUlFDX1JTU0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvKiBSU1MgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01SUUNfTVJRRV9NQVNLICAgICAgICAgICAgICAgICAgICAweEYgLyogQml0cyAzOjAgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVDhUQ0VOICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiA4IFRDIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUNFRDRU4gICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIDQgVEMgbm8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfUlRSU1M4VENFTiAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogOCBUQyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVFJTUzRUQ0VOICAgICAgICAgICAgMHgwMDAwMDAwNSAvKiA0IFRDIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFFTiAgICAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIFZNRHEyIDY0IHBvb2xzIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSU1MzMkVOICAgICAgICAgICAweDAwMDAwMDBBIC8qIFZNRHEyIDMyIHBvb2xzIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSU1M2NEVOICAgICAgICAgICAweDAwMDAwMDBCIC8qIFZNRHEyIDY0IHBvb2xzIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSVDhUQ0VOICAgICAgICAgICAweDAwMDAwMDBDIC8qIFZNRHEyL1JUIDE2IHBvb2wgOCBUQyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSVDRUQ0VOICAgICAgICAgICAweDAwMDAwMDBEIC8qIFZNRHEyL1JUIDMyIHBvb2wgNCBUQyAqLwogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9NQVNLICAgICAgICAweEZGRkYwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNCAgICAgICAgMHgwMDAyMDAwMApAQCAtOTQyLDYgKzE1MjcsMTIgQEAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAgICAgMHgwMDQwMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUCAgICAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVURQIDB4MDEwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTVJRQ19MM0w0VFhTV0VOICAgICAgICAgICAgMHgwMDAwODAwMAorCisvKiBRdWV1ZSBEcm9wIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9RREVfRU5BQkxFICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1FERV9JRFhfTUFTSyAgIDB4MDAwMDdGMDAKKyNkZWZpbmUgSVhHQkVfUURFX0lEWF9TSElGVCAgICAgICAgICAgOAogCiAjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19JWFNNIDB4MDEgICAgICAgLyogSW5zZXJ0IElQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19UWFNNIDB4MDIgICAgICAgLyogSW5zZXJ0IFRDUC9VRFAgY2hlY2tzdW0gKi8KQEAgLTk1MywxMCArMTU0NCwyNSBAQAogI2RlZmluZSBJWEdCRV9UWERfQ01EX1ZMRSAgICAweDQwMDAwMDAwIC8qIEFkZCBWTEFOIHRhZyAqLwogI2RlZmluZSBJWEdCRV9UWERfU1RBVF9ERCAgICAweDAwMDAwMDAxIC8qIERlc2NyaXB0b3IgRG9uZSAqLwogCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19TVEFUVVNfU0VDUCAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0lOVkFMSURfUFJPVE9DT0wgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfSU5WQUxJRF9MRU5HVEggICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9BVVRIX0ZBSUxFRCAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0JJVF9NQVNLICAgICAgICAgICAgICAgMHgxODAwMDAwMAorLyogTXVsdGlwbGUgVHJhbnNtaXQgUXVldWUgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBJWEdCRV9NVFFDX1JUX0VOQSAgICAgICAweDEgLyogRENCIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NVFFDX1ZUX0VOQSAgICAgICAweDIgLyogVk1EUTIgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01UUUNfNjRRXzFQQiAgICAgIDB4MCAvKiA2NCBxdWV1ZXMgMSBwYWNrIGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9NVFFDXzY0VkYgICAgICAgICAweDggLyogMiBUWCBRdWV1ZXMgcGVyIHBvb2wgdy82NFZGJ3MgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ184VENfOFRRICAgICAgMHhDIC8qIDggVEMgaWYgUlRfRU5BIG9yIDggVFEgaWYgVlRfRU5BICovCisKIC8qIFJlY2VpdmUgRGVzY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfREQgICAgICAgMHgwMSAgICAvKiBEZXNjcmlwdG9yIERvbmUgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRU9QICAgICAgMHgwMiAgICAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0ZMTSAgICAgIDB4MDQgICAgLyogRkRpciBNYXRjaCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WUCAgICAgICAweDA4ICAgIC8qIElFRUUgVkxBTiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX05FWFRQX01BU0sgICAweDAwMEZGRkYwIC8qIE5leHQgRGVzY3JpcHRvciBJbmRleCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfU0hJRlQgIDB4MDAwMDAwMDQKICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQQ1MgICAgMHgxMCAgICAvKiBVRFAgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0w0Q1MgICAgIDB4MjAgICAgLyogTDQgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0lQQ1MgICAgIDB4NDAgICAgLyogSVAgeHN1bSBjYWxjdWxhdGVkICovCkBAIC05NjUsNiArMTU3MSwxMCBAQAogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WRVhUICAgICAweDIwMCAgIC8qIDFzdCBWTEFOIGZvdW5kICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUFYgICAgIDB4NDAwICAgLyogVmFsaWQgVURQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MTElOVCAgICAweDgwMCAgIC8qIFBrdCBjYXVzZWQgTG93IExhdGVuY3kgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1RTICAgICAgIDB4MTAwMDAgLyogVGltZSBTdGFtcCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9TRUNQICAgICAweDIwMDAwIC8qIFNlY3VyaXR5IFByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTEIgICAgICAgMHg0MDAwMCAvKiBMb29wYmFjayBTdGF0dXMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfQUNLICAgICAgMHg4MDAwICAvKiBBQ0sgUGFja2V0IGluZGljYXRpb24gKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9DRSAgICAgICAgMHgwMSAgICAvKiBDUkMgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9MRSAgICAgICAgMHgwMiAgICAvKiBMZW5ndGggRXJyb3IgKi8KQEAgLTk3Myw2ICsxNTgzLDggQEAKICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9VU0UgICAgICAgMHgyMCAgICAvKiBVbmRlcnNpemUgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9UQ1BFICAgICAgMHg0MCAgICAvKiBUQ1AvVURQIENoZWNrc3VtIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfSVBFICAgICAgIDB4ODAgICAgLyogSVAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9NQVNLICAgICAgICAgICAweGZmZjAwMDAwIC8qIFJERVNDLkVSUk9SUyBtYXNrICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfU0hJRlQgICAgICAgICAgMjAgICAgICAgICAvKiBSREVTQy5FUlJPUlMgc2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9IQk8gICAgMHgwMDgwMDAwMCAvKkhlYWRlciBCdWZmZXIgT3ZlcmZsb3cgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9DRSAgICAgMHgwMTAwMDAwMCAvKiBDUkMgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9MRSAgICAgMHgwMjAwMDAwMCAvKiBMZW5ndGggRXJyb3IgKi8KQEAgLTk4Nyw5ICsxNTk5LDIzIEBACiAjZGVmaW5lIElYR0JFX1JYRF9DRklfTUFTSyAgICAgIDB4MTAwMCAgLyogQ0ZJIGlzIGJpdCAxMiAqLwogI2RlZmluZSBJWEdCRV9SWERfQ0ZJX1NISUZUICAgICAxMgogCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0REICAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfREQgIC8qIERvbmUgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRU9QICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9FT1AgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GTE0gICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0ZMTSAvKiBGRGlyIE1hdGNoICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX1ZQICAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfVlAgIC8qIElFRUUgVkxBTiBQa3QgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfTUFTSyAgICAgICAgICAweDAwMGZmZmZmIC8qIFN0YXQvTkVYVFA6IGJpdCAwLTE5ICovCisKKy8qIFBTUlRZUEUgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfVENQSERSICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9VRFBIRFIgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0lQVjRIRFIgICAweDAwMDAwMTAwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNkhEUiAgIDB4MDAwMDAyMDAKIAogLyogU1JSQ1RMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVQS1RfU0hJRlQgICAgIDEwICAgICAvKiBzbyBtYW55IEtCcyAqLworI2RlZmluZSBJWEdCRV9TUlJDVExfUkRNVFNfU0hJRlQgICAgICAgIDIyCisjZGVmaW5lIElYR0JFX1NSUkNUTF9SRE1UU19NQVNLICAgICAgICAgMHgwMUMwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfRFJPUF9FTiAgICAgICAgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX01BU0sgICAgICAweDAwMDAwMDdGCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUl9NQVNLICAgICAgMHgwMDAwM0YwMAogI2RlZmluZSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfTEVHQUNZICAgIDB4MDAwMDAwMDAKQEAgLTEwMDQsNiArMTYzMCw3IEBACiAKICNkZWZpbmUgSVhHQkVfUlhEQURWX1JTU1RZUEVfTUFTSyAgICAgICAweDAwMDAwMDBGCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0sgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLX0VYICAgIDB4MDAwMUZGRjAKICNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9NQVNLICAgICAweDAwMDA3RkUwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQgICAgNQogI2RlZmluZSBJWEdCRV9SWERBRFZfU1BMSVRIRUFERVJfRU4gICAgIDB4MDAwMDEwMDAKQEAgLTEwMzEsNiArMTY1OCwyMCBAQAogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9VRFAgICAgICAgIDB4MDAwMDAyMDAgLyogVURQIGhkciBwcmVzZW50ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX1NDVFAgICAgICAgMHgwMDAwMDQwMCAvKiBTQ1RQIGhkciBwcmVzZW50ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX05GUyAgICAgICAgMHgwMDAwMDgwMCAvKiBORlMgaGRyIHByZXNlbnQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBTRUNfRVNQICAweDAwMDAxMDAwIC8qIElQU2VjIEVTUCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFNFQ19BSCAgIDB4MDAwMDIwMDAgLyogSVBTZWMgQUggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTElOS1NFQyAgICAweDAwMDA0MDAwIC8qIExpbmtTZWMgRW5jYXAgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfRVRRRiAgICAgICAweDAwMDA4MDAwIC8qIFBLVFRZUEUgaXMgRVRRRiBpbmRleCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9FVFFGX01BU0sgIDB4MDAwMDAwNzAgLyogRVRRRiBoYXMgOCBpbmRpY2VzICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0VUUUZfU0hJRlQgNCAgICAgICAgICAvKiBSaWdodC1zaGlmdCA0IGJpdHMgKi8KKworLyogU2VjdXJpdHkgUHJvY2Vzc2luZyBiaXQgSW5kaWNhdGlvbiAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX1NUQVRVU19TRUNQICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX05PX1NBX01BVENIICAgMHgwODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX1JFUExBWV9FUlJPUiAgMHgxMDAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX0JJVF9NQVNLICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX0JBRF9TSUcgICAgICAgMHgxODAwMDAwMAorCiAvKiBNYXNrcyB0byBkZXRlcm1pbmUgaWYgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZCBkdWUgdG8gZnJhbWUgZXJyb3JzICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1JYRF9FUlJfQ0UgfCBcCkBAIC0xMDYwLDYgKzE3MDEsMTQgQEAKICNkZWZpbmUgSVhHQkVfUlhfREVTQ19TUEVDSUFMX1BSSV9TSElGVCAgMHgwMDBEIC8qIFByaW9yaXR5IGluIHVwcGVyIDMgb2YgMTYgKi8KICNkZWZpbmUgSVhHQkVfVFhfREVTQ19TUEVDSUFMX1BSSV9TSElGVCAgSVhHQkVfUlhfREVTQ19TUEVDSUFMX1BSSV9TSElGVAogCisvKiBMaXR0bGUgRW5kaWFuIGRlZmluZXMgKi8KKyNpZm5kZWYgX19sZTMyCisjZGVmaW5lIF9fbGUzMiAgdTMyCisjZW5kaWYKKyNpZm5kZWYgX19sZTY0CisjZGVmaW5lIF9fbGU2NCAgdTY0CisKKyNlbmRpZgogCiAvKiBUcmFuc21pdCBEZXNjcmlwdG9yIC0gTGVnYWN5ICovCiBzdHJ1Y3QgaXhnYmVfbGVnYWN5X3R4X2Rlc2MgewpAQCAtMTE0Nyw2ICsxNzk2LDkgQEAKIAogLyogQWR2IFRyYW5zbWl0IERlc2NyaXB0b3IgQ29uZmlnIE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVEFMRU5fTUFTSyAgICAgIDB4MDAwMEZGRkYgLyogRGF0YSBidWYgbGVuZ3RoKGJ5dGVzKSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTUFDX0xJTktTRUMgICAgICAweDAwMDQwMDAwIC8qIEluc2VydCBMaW5rU2VjICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9JUFNFQ19TQV9JTkRFWF9NQVNLICAgMHgwMDAwMDNGRiAvKiBJUFNlYyBTQSBpbmRleCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfSVBTRUNfRVNQX0xFTl9NQVNLICAgIDB4MDAwMDAxRkYgLyogSVBTZWMgRVNQIGxlbmd0aCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9NQVNLICAweDAwRjAwMDAwIC8qIERUWVAgbWFzayAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9DVFhUICAweDAwMjAwMDAwIC8qIEFkdmFuY2VkIENvbnRleHQgRGVzYyAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9EQVRBICAweDAwMzAwMDAwIC8qIEFkdmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLwpAQCAtMTE4MSw2ICsxODMzLDkgQEAKICNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1AgICAweDAwMDAwODAwICAvKiBMNCBQYWNrZXQgVFlQRSBvZiBUQ1AgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9TQ1RQICAweDAwMDAxMDAwICAvKiBMNCBQYWNrZXQgVFlQRSBvZiBTQ1RQICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9NS1JSRVEgICAgMHgwMDAwMjAwMCAvKlJlcSByZXF1aXJlcyBNYXJrZXJzIGFuZCBDUkMqLworI2RlZmluZSBJWEdCRV9BRFZUWERfUE9QVFNfSVBTRUMgICAgICAweDAwMDAwNDAwIC8qIElQU2VjIG9mZmxvYWQgcmVxdWVzdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfSVBTRUNfVFlQRV9FU1AgMHgwMDAwMjAwMCAvKiBJUFNlYyBUeXBlIEVTUCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfSVBTRUNfRU5DUllQVF9FTiAweDAwMDA0MDAwLyogRVNQIEVuY3J5cHQgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9MNExFTl9TSElGVCAgICAgOCAgLyogQWR2IGN0eHQgTDRMRU4gc2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX01TU19TSElGVCAgICAgICAxNiAgLyogQWR2IGN0eHQgTVNTIHNoaWZ0ICovCiAKQEAgLTExOTQsNiArMTg0OSwxMiBAQAogI2RlZmluZSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCAweDAwODAKICNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF84MjU5OF9BVVRPTkVHIChJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorI2RlZmluZSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk5X0FVVE9ORUcgKElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEwgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKworI2RlZmluZSBJWEdCRV9QQ0lFX0RFVl9DVFJMXzIgMHhDOAorI2RlZmluZSBQQ0lFX0NPTVBMX1RPX1ZBTFVFIDB4MDUKIAogLyogUGh5c2ljYWwgbGF5ZXIgdHlwZSAqLwogdHlwZWRlZiB1MzIgaXhnYmVfcGh5c2ljYWxfbGF5ZXI7CkBAIC0xMjEwLDcgKzE4NzEsNiBAQAogI2RlZmluZSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9LWCAgMHgwMjAwCiAjZGVmaW5lIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0JYICAweDA0MDAKIAotCiBlbnVtIGl4Z2JlX2VlcHJvbV90eXBlIHsKIAlpeGdiZV9lZXByb21fdW5pbml0aWFsaXplZCA9IDAsCiAJaXhnYmVfZWVwcm9tX3NwaSwKQEAgLTEyMjAsMTIgKzE4ODAsMTQgQEAKIGVudW0gaXhnYmVfbWFjX3R5cGUgewogCWl4Z2JlX21hY191bmtub3duID0gMCwKIAlpeGdiZV9tYWNfODI1OThFQiwKKwlpeGdiZV9tYWNfODI1OTlFQiwKIAlpeGdiZV9udW1fbWFjcwogfTsKIAogZW51bSBpeGdiZV9waHlfdHlwZSB7CiAJaXhnYmVfcGh5X3Vua25vd24gPSAwLAogCWl4Z2JlX3BoeV90biwKKwlpeGdiZV9waHlfY3VfdW5rbm93biwKIAlpeGdiZV9waHlfcXQsCiAJaXhnYmVfcGh5X3hhdWksCiAJaXhnYmVfcGh5X25sLApAQCAtMTIzNCwyMiArMTg5NiwzMSBAQAogCWl4Z2JlX3BoeV9zZnBfYXZhZ28sCiAJaXhnYmVfcGh5X3NmcF9mdGwsCiAJaXhnYmVfcGh5X3NmcF91bmtub3duLAorCWl4Z2JlX3BoeV9zZnBfaW50ZWwsCiAJaXhnYmVfcGh5X2dlbmVyaWMKIH07CiAKIC8qCiAgKiBTRlArIG1vZHVsZSB0eXBlIElEczoKICAqCi0gKiBJRAlNb2R1bGUgVHlwZQorICogSUQgICBNb2R1bGUgVHlwZQogICogPT09PT09PT09PT09PQotICogMAlTRlBfREFfQ1UKLSAqIDEJU0ZQX1NSCi0gKiAyCVNGUF9MUgorICogMCAgICBTRlBfREFfQ1UKKyAqIDEgICAgU0ZQX1NSCisgKiAyICAgIFNGUF9MUgorICogMyAgICBTRlBfREFfQ1VfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworICogNCAgICBTRlBfREFfQ1VfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYworICogNSAgICBTRlBfU1IvTFJfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworICogNiAgICBTRlBfU1IvTFJfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYwogICovCiBlbnVtIGl4Z2JlX3NmcF90eXBlIHsKIAlpeGdiZV9zZnBfdHlwZV9kYV9jdSA9IDAsCiAJaXhnYmVfc2ZwX3R5cGVfc3IgPSAxLAogCWl4Z2JlX3NmcF90eXBlX2xyID0gMiwKKwlpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMCA9IDMsCisJaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTEgPSA0LAorCWl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTAgPSA1LAorCWl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTEgPSA2LAogCWl4Z2JlX3NmcF90eXBlX25vdF9wcmVzZW50ID0gMHhGRkZFLAogCWl4Z2JlX3NmcF90eXBlX3Vua25vd24gPSAweEZGRkYKIH07CkBAIC0xMjYzLDE0ICsxOTM0LDUxIEBACiB9OwogCiAvKiBGbG93IENvbnRyb2wgU2V0dGluZ3MgKi8KLWVudW0gaXhnYmVfZmNfdHlwZSB7CitlbnVtIGl4Z2JlX2ZjX21vZGUgewogCWl4Z2JlX2ZjX25vbmUgPSAwLAogCWl4Z2JlX2ZjX3J4X3BhdXNlLAogCWl4Z2JlX2ZjX3R4X3BhdXNlLAogCWl4Z2JlX2ZjX2Z1bGwsCisjaWZkZWYgQ09ORklHX0RDQgorCWl4Z2JlX2ZjX3BmYywKKyNlbmRpZgogCWl4Z2JlX2ZjX2RlZmF1bHQKIH07CiAKKy8qIFBDSSBidXMgdHlwZXMgKi8KK2VudW0gaXhnYmVfYnVzX3R5cGUgeworCWl4Z2JlX2J1c190eXBlX3Vua25vd24gPSAwLAorCWl4Z2JlX2J1c190eXBlX3BjaSwKKwlpeGdiZV9idXNfdHlwZV9wY2l4LAorCWl4Z2JlX2J1c190eXBlX3BjaV9leHByZXNzLAorCWl4Z2JlX2J1c190eXBlX3Jlc2VydmVkCit9OworCisvKiBQQ0kgYnVzIHNwZWVkcyAqLworZW51bSBpeGdiZV9idXNfc3BlZWQgeworCWl4Z2JlX2J1c19zcGVlZF91bmtub3duID0gMCwKKwlpeGdiZV9idXNfc3BlZWRfMzMsCisJaXhnYmVfYnVzX3NwZWVkXzY2LAorCWl4Z2JlX2J1c19zcGVlZF8xMDAsCisJaXhnYmVfYnVzX3NwZWVkXzEyMCwKKwlpeGdiZV9idXNfc3BlZWRfMTMzLAorCWl4Z2JlX2J1c19zcGVlZF8yNTAwLAorCWl4Z2JlX2J1c19zcGVlZF81MDAwLAorCWl4Z2JlX2J1c19zcGVlZF9yZXNlcnZlZAorfTsKKworLyogUENJIGJ1cyB3aWR0aHMgKi8KK2VudW0gaXhnYmVfYnVzX3dpZHRoIHsKKwlpeGdiZV9idXNfd2lkdGhfdW5rbm93biA9IDAsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDEsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDIsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQgPSA0LAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3g4ID0gOCwKKwlpeGdiZV9idXNfd2lkdGhfMzIsCisJaXhnYmVfYnVzX3dpZHRoXzY0LAorCWl4Z2JlX2J1c193aWR0aF9yZXNlcnZlZAorfTsKKwogc3RydWN0IGl4Z2JlX2FkZHJfZmlsdGVyX2luZm8gewogCXUzMiBudW1fbWNfYWRkcnM7CiAJdTMyIHJhcl91c2VkX2NvdW50OwpAQCAtMTI4MCw2ICsxOTg4LDE2IEBACiAJYm9vbCB1c2VyX3NldF9wcm9taXNjOwogfTsKIAorLyogQnVzIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBpeGdiZV9idXNfaW5mbyB7CisJZW51bSBpeGdiZV9idXNfc3BlZWQgc3BlZWQ7CisJZW51bSBpeGdiZV9idXNfd2lkdGggd2lkdGg7CisJZW51bSBpeGdiZV9idXNfdHlwZSB0eXBlOworCisJdTE2IGZ1bmM7CisJdTE2IGxhbl9pZDsKK307CisKIC8qIEZsb3cgY29udHJvbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgaXhnYmVfZmNfaW5mbyB7CiAJdTMyIGhpZ2hfd2F0ZXI7IC8qIEZsb3cgQ29udHJvbCBIaWdoLXdhdGVyICovCkBAIC0xMjg3LDggKzIwMDUsOCBAQAogCXUxNiBwYXVzZV90aW1lOyAvKiBGbG93IENvbnRyb2wgUGF1c2UgdGltZXIgKi8KIAlib29sIHNlbmRfeG9uOyAvKiBGbG93IGNvbnRyb2wgc2VuZCBYT04gKi8KIAlib29sIHN0cmljdF9pZWVlOyAvKiBTdHJpY3QgSUVFRSBtb2RlICovCi0JZW51bSBpeGdiZV9mY190eXBlIHR5cGU7IC8qIFR5cGUgb2YgZmxvdyBjb250cm9sICovCi0JZW51bSBpeGdiZV9mY190eXBlIG9yaWdpbmFsX3R5cGU7CisJZW51bSBpeGdiZV9mY19tb2RlIGN1cnJlbnRfbW9kZTsgLyogRkMgbW9kZSBpbiBlZmZlY3QgKi8KKwllbnVtIGl4Z2JlX2ZjX21vZGUgcmVxdWVzdGVkX21vZGU7IC8qIEZDIG1vZGUgcmVxdWVzdGVkIGJ5IGNhbGxlciAqLwogfTsKIAogLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLwpAQCAtMTM0OCw2ICsyMDY2LDE0IEBACiAJdTY0IHFwdGNbMTZdOwogCXU2NCBxYnJjWzE2XTsKIAl1NjQgcWJ0Y1sxNl07CisJdTY0IHFwcmRjWzE2XTsKKwl1NjQgcHhvbjJvZmZjWzhdOworCXU2NCBmZGlydXN0YXRfYWRkOworCXU2NCBmZGlydXN0YXRfcmVtb3ZlOworCXU2NCBmZGlyZnN0YXRfZmFkZDsKKwl1NjQgZmRpcmZzdGF0X2ZyZW1vdmU7CisJdTY0IGZkaXJtYXRjaDsKKwl1NjQgZmRpcm1pc3M7CiB9OwogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCkBAIC0xMzcyLDEyICsyMDk4LDE1IEBACiAJczMyICgqc3RhcnRfaHcpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpjbGVhcl9od19jbnRycykoc3RydWN0IGl4Z2JlX2h3ICopOwogCWVudW0gaXhnYmVfbWVkaWFfdHlwZSAoKmdldF9tZWRpYV90eXBlKShzdHJ1Y3QgaXhnYmVfaHcgKik7Ci0JczMyICgqZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcikoc3RydWN0IGl4Z2JlX2h3ICopOworCXUzMiAoKmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpnZXRfbWFjX2FkZHIpKHN0cnVjdCBpeGdiZV9odyAqLCB1OCAqKTsKIAlzMzIgKCpzdG9wX2FkYXB0ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpnZXRfYnVzX2luZm8pKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl2b2lkICgqc2V0X2xhbl9pZCkoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKnJlYWRfYW5hbG9nX3JlZzgpKHN0cnVjdCBpeGdiZV9odyosIHUzMiwgdTgqKTsKIAlzMzIgKCp3cml0ZV9hbmFsb2dfcmVnOCkoc3RydWN0IGl4Z2JlX2h3KiwgdTMyLCB1OCk7CisJczMyICgqc2V0dXBfc2ZwKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZW5hYmxlX3J4X2RtYSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMik7CiAKIAkvKiBMaW5rICovCiAJczMyICgqc2V0dXBfbGluaykoc3RydWN0IGl4Z2JlX2h3ICopOwpAQCAtMTQzMyw3ICsyMTYyLDcgQEAKIHN0cnVjdCBpeGdiZV9lZXByb21faW5mbyB7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zICBvcHM7CiAJZW51bSBpeGdiZV9lZXByb21fdHlwZSAgICAgICAgICB0eXBlOwotCXUzMgkJCQlzZW1hcGhvcmVfZGVsYXk7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVfZGVsYXk7CiAJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkX3NpemU7CiAJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2JpdHM7CiB9OwpAQCAtMTQ0OSwxMSArMjE3OCwxMiBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jhcl9lbnRyaWVzOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3R4X3F1ZXVlczsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yeF9xdWV1ZXM7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX2F0dGFjaF90eXBlOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19tb2RlX3NlbGVjdDsKLQlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfc2V0dGluZ3NfbG9hZGVkOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X21zaXhfdmVjdG9yczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfYXV0b2M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2F1dG9jMjsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnOwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ19mYWlsZWQ7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3N1Y2NlZWRlZDsKIH07CiAKIHN0cnVjdCBpeGdiZV9waHlfaW5mbyB7CkBAIC0xNDY3LDYgKzIxOTcsNyBAQAogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfZGlzYWJsZTsKIAlpeGdiZV9hdXRvbmVnX2FkdmVydGlzZWQgICAgICAgIGF1dG9uZWdfYWR2ZXJ0aXNlZDsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc3BlZWRfZmliZXI7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfaHcgewpAQCAtMTQ3Nyw2ICsyMjA4LDcgQEAKIAlzdHJ1Y3QgaXhnYmVfZmNfaW5mbwkJZmM7CiAJc3RydWN0IGl4Z2JlX3BoeV9pbmZvCQlwaHk7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvCWVlcHJvbTsKKwlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8JCWJ1czsKIAl1MTYJCQkJZGV2aWNlX2lkOwogCXUxNgkJCQl2ZW5kb3JfaWQ7CiAJdTE2CQkJCXN1YnN5c3RlbV9kZXZpY2VfaWQ7CkBAIC0xNTE1LDYgKzIyNDcsNyBAQAogI2RlZmluZSBJWEdCRV9FUlJfSTJDICAgICAgICAgICAgICAgICAgICAgICAgICAgLTE4CiAjZGVmaW5lIElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAtMTkKICNkZWZpbmUgSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCAgICAgICAgICAgICAgIC0yMAorI2RlZmluZSBJWEdCRV9FUlJfU0ZQX05PX0lOSVRfU0VRX1BSRVNFTlQgICAgICAgLTIxCiAjZGVmaW5lIElYR0JFX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCiAKICNlbmRpZiAvKiBfSVhHQkVfVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKaW5kZXggMDE0NzQ1Ny4uZDNiZjJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJCWJyZWFrOwogCX0gd2hpbGUgKGl4cDIwMDBfcmVnX3JlYWQoSVhQMjAwMF9JUlFfVEhEX1JBV19TVEFUVVNfQV8wKSAmIDB4MDBmZik7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfU0VUX0FfMCwgMHgwMGZmKTsKIAogCXJldHVybiByeDsKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiAJCWl4cDIwMDBfcmVnX3dyYihJWFAyMDAwX0lSUV9USERfRU5BQkxFX0NMRUFSX0FfMCwgMHgwMGZmKTsKIAkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmlwLT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmlwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmaXAtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaXhwMjAwMDogaXJxIHdoaWxlIHBvbGxpbmchIVxuIik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKaW5kZXggMzM0ZmY5ZS4uMTQyNDhjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKQEAgLTEzMSw3ICsxMzEsOCBAQAogCWlmIChzb25pY19kZWJ1ZyAgJiYgIHZlcnNpb25fcHJpbnRlZCsrID09IDApCiAJCXByaW50ayh2ZXJzaW9uKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTb25pYyBldGhlcm5ldCBmb3VuZCBhdCAweCUwOGx4LCAiLCBscC0+ZGV2aWNlLT5idXNfaWQsIGRldi0+YmFzZV9hZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogU29uaWMgZXRoZXJuZXQgZm91bmQgYXQgMHglMDhseCwgIiwKKwkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSksIGRldi0+YmFzZV9hZGRyKTsKIAogCS8qCiAJICogUHV0IHRoZSBzb25pYyBpbnRvIHNvZnR3YXJlIHJlc2V0LCB0aGVuCkBAIC0xNTYsNyArMTU3LDggQEAKIAlpZiAoKGxwLT5kZXNjcmlwdG9ycyA9IGRtYV9hbGxvY19jb2hlcmVudChscC0+ZGV2aWNlLAogCQkJCVNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCiAJCQkJJmxwLT5kZXNjcmlwdG9yc19sYWRkciwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsCisJCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCBhNmUxYTM1Li44NjBkY2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtNDI5LDEwICs0MjksOSBAQAogCiAJCWptZS0+cGh5bGluayA9IHBoeWxpbms7CiAKLQkJZ2hjID0gam1lLT5yZWdfZ2hjICYgfihHSENfU1BFRURfMTBNIHwKLQkJCQkJR0hDX1NQRUVEXzEwME0gfAotCQkJCQlHSENfU1BFRURfMTAwME0gfAotCQkJCQlHSENfRFBYKTsKKwkJZ2hjID0gam1lLT5yZWdfZ2hjICYgfihHSENfU1BFRUQgfCBHSENfRFBYIHwKKwkJCQlHSENfVE9fQ0xLX1BDSUUgfCBHSENfVFhNQUNfQ0xLX1BDSUUgfAorCQkJCUdIQ19UT19DTEtfR1BIWSB8IEdIQ19UWE1BQ19DTEtfR1BIWSk7CiAJCXN3aXRjaCAocGh5bGluayAmIFBIWV9MSU5LX1NQRUVEX01BU0spIHsKIAkJY2FzZSBQSFlfTElOS19TUEVFRF8xME06CiAJCQlnaGMgfD0gR0hDX1NQRUVEXzEwTSB8CkBAIC0xODM0LDcgKzE4MzMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1qbWVfZmlsbF9maXJzdF90eF9kZXNjKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWR4KQoram1lX2ZpbGxfdHhfZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkeCkKIHsKIAlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9IGptZS0+dHhyaW5nOwogCXN0cnVjdCB0eGRlc2MgKnR4ZGVzYzsKQEAgLTE4NjQsNiArMTg2Myw3IEBACiAJaWYgKGptZV90eF90c28oc2tiLCAmdHhkZXNjLT5kZXNjMS5tc3MsICZmbGFncykpCiAJCWptZV90eF9jc3VtKGptZSwgc2tiLCAmZmxhZ3MpOwogCWptZV90eF92bGFuKHNrYiwgJnR4ZGVzYy0+ZGVzYzEudmxhbiwgJmZsYWdzKTsKKwlqbWVfbWFwX3R4X3NrYihqbWUsIHNrYiwgaWR4KTsKIAl0eGRlc2MtPmRlc2MxLmZsYWdzID0gZmxhZ3M7CiAJLyoKIAkgKiBTZXQgdHggYnVmZmVyIGluZm8gYWZ0ZXIgdGVsbGluZyBOSUMgdG8gc2VuZApAQCAtMTkzMyw4ICsxOTMzLDcgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCWptZV9tYXBfdHhfc2tiKGptZSwgc2tiLCBpZHgpOwotCWptZV9maWxsX2ZpcnN0X3R4X2Rlc2Moam1lLCBza2IsIGlkeCk7CisJam1lX2ZpbGxfdHhfZGVzYyhqbWUsIHNrYiwgaWR4KTsKIAogCWp3cml0ZTMyKGptZSwgSk1FX1RYQ1MsIGptZS0+cmVnX3R4Y3MgfAogCQkJCVRYQ1NfU0VMRUNUX1FVRVVFMCB8CkBAIC0yNTkxLDYgKzI1OTAsMTYgQEAKIHN0YXRpYyBpbnQKIGptZV9wY2lfZG1hNjQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwICYmCisJICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJaWYgKCFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQorCQkJcmV0dXJuIDE7CisKKwlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTAgJiYKKwkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzQwQklUX01BU0spKQorCQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNDBCSVRfTUFTSykpCisJCQlyZXR1cm4gMTsKKwogCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCiAJCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkKIAkJCXJldHVybiAwOwpAQCAtMjg1Nyw3ICsyODY2LDExIEBACiAJCWdvdG8gZXJyX291dF9mcmVlX3NoYWRvdzsKIAl9CiAKLQltc2dfcHJvYmUoam1lLCAiSk1DMjUwIGdpZ2FiaXQlcyB2ZXI6JXggcmV2OiV4IG1hY2FkZHI6JXBNXG4iLAorCW1zZ19wcm9iZShqbWUsICIlcyVzIHZlcjoleCByZXY6JXggbWFjYWRkcjolcE1cbiIsCisJCShqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwKSA/CisJCQkiSk1DMjUwIEdpZ2FiaXQgRXRoZXJuZXQiIDoKKwkJCShqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjYwKSA/CisJCQkJIkpNQzI2MCBGYXN0IEV0aGVybmV0IiA6ICJVbmtub3duIiwKIAkJKGptZS0+ZnBnYXZlciAhPSAwKSA/ICIgKEZQR0EpIiA6ICIiLAogCQkoam1lLT5mcGdhdmVyICE9IDApID8gam1lLT5mcGdhdmVyIDogam1lLT5jaGlwcmV2LAogCQlqbWUtPnJldiwgbmV0ZGV2LT5kZXZfYWRkcik7CkBAIC0zMDAzLDcgKzMwMTYsNyBAQAogc3RhdGljIGludCBfX2luaXQKIGptZV9pbml0X21vZHVsZSh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gUEZYICJKTWljcm9uIEpNQzI1MCBnaWdhYml0IGV0aGVybmV0ICIKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiSk1pY3JvbiBKTUMyWFggZXRoZXJuZXQgIgogCSAgICAgICAiZHJpdmVyIHZlcnNpb24gJXNcbiIsIERSVl9WRVJTSU9OKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmam1lX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuaCBiL2RyaXZlcnMvbmV0L2ptZS5oCmluZGV4IDUxNTQ0MTEuLjA5OTZhMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5oCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIF9fSk1FX0hfSU5DTFVERURfXwogCiAjZGVmaW5lIERSVl9OQU1FCSJqbWUiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC40IgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwCTB4MDI1MApAQCAtMzk4LDE1ICszOTgsMTUgQEAKICNkZWZpbmUgSk1FX05BUElfV0VJR0hUKHcpIGludCB3CiAjZGVmaW5lIEpNRV9OQVBJX1dFSUdIVF9WQUwodykgdwogI2RlZmluZSBKTUVfTkFQSV9XRUlHSFRfU0VUKHcsIHIpCi0jZGVmaW5lIEpNRV9SWF9DT01QTEVURShkZXYsIG5hcGlzKSBuZXRpZl9yeF9jb21wbGV0ZShuYXBpcykKKyNkZWZpbmUgSk1FX1JYX0NPTVBMRVRFKGRldiwgbmFwaXMpIG5hcGlfY29tcGxldGUobmFwaXMpCiAjZGVmaW5lIEpNRV9OQVBJX0VOQUJMRShwcml2KSBuYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAjZGVmaW5lIEpNRV9OQVBJX0RJU0FCTEUocHJpdikgXAogCWlmICghbmFwaV9kaXNhYmxlX3BlbmRpbmcoJnByaXYtPm5hcGkpKSBcCiAJCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAjZGVmaW5lIEpNRV9SWF9TQ0hFRFVMRV9QUkVQKHByaXYpIFwKLQluZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKQorCW5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkKICNkZWZpbmUgSk1FX1JYX1NDSEVEVUxFKHByaXYpIFwKLQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCiAvKgogICogSm1hYyBBZGFwdGVyIFByaXZhdGUgZGF0YQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva29yaW5hLmMgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwppbmRleCA3NTAxMGNhLi4zOGQ2NjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rb3JpbmEuYworKysgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCQkJRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCiAJCQkJJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pOwogCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAogCQlpZiAoZG1hcyAmIERNQV9TVEFUX0VSUikKIAkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IERNQSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCiAJd29ya19kb25lID0ga29yaW5hX3J4KGRldiwgYnVkZ2V0KTsKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCXdyaXRlbChyZWFkbCgmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzbSkgJgogCQkJfihETUFfU1RBVF9ET05FIHwgRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sYW5jZS5jIGIvZHJpdmVycy9uZXQvbGFuY2UuYwppbmRleCBkN2FmYjkzLi42MzM4MDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKQEAgLTM5MSw3ICszOTEsOCBAQAogICAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGRvX2xhbmNlX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50ICpwb3J0LCByZXN1bHQ7CisJdW5zaWduZWQgaW50ICpwb3J0OworCWludCByZXN1bHQ7CiAKIAlpZiAoaGlnaF9tZW1vcnkgPD0gcGh5c190b192aXJ0KDE2KjEwMjQqMTAyNCkpCiAJCWxhbmNlX25lZWRfaXNhX2JvdW5jZV9idWZmZXJzID0gMDsKQEAgLTQ1MywxNiArNDU0LDI4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsYW5jZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbGFuY2Vfb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGFuY2Vfc3RhcnRfeG1pdCwKKwkubmRvX3N0b3AJCT0gbGFuY2VfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbGFuY2VfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBsYW5jZV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBsYW5jZV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkciwgaW50IGlycSwgaW50IG9wdGlvbnMpCiB7CiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwOwotCWxvbmcgZG1hX2NoYW5uZWxzOwkJCS8qIE1hcmsgc3B1cmlvdXNseS1idXN5IERNQSBjaGFubmVscyAqLworCXVuc2lnbmVkIGxvbmcgZG1hX2NoYW5uZWxzOwkvKiBNYXJrIHNwdXJpb3VzbHktYnVzeSBETUEgY2hhbm5lbHMgKi8KIAlpbnQgaSwgcmVzZXRfdmFsLCBsYW5jZV92ZXJzaW9uOwogCWNvbnN0IGNoYXIgKmNoaXBuYW1lOwogCS8qIEZsYWdzIGZvciBzcGVjaWZpYyBjaGlwcyBvciBib2FyZHMuICovCi0JdW5zaWduZWQgY2hhciBocEoyNDA1QSA9IDA7CQkvKiBIUCBJU0EgYWRhcHRvciAqLwotCWludCBocF9idWlsdGluID0gMDsJCQkvKiBIUCBvbi1ib2FyZCBldGhlcm5ldC4gKi8KLQlzdGF0aWMgaW50IGRpZF92ZXJzaW9uOwkJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCisJdW5zaWduZWQgY2hhciBocEoyNDA1QSA9IDA7CS8qIEhQIElTQSBhZGFwdG9yICovCisJaW50IGhwX2J1aWx0aW4gPSAwOwkJLyogSFAgb24tYm9hcmQgZXRoZXJuZXQuICovCisJc3RhdGljIGludCBkaWRfdmVyc2lvbjsJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl2b2lkIF9faW9tZW0gKmJpb3M7CkBAIC03MTMsMTIgKzcyNiw3IEBACiAJCXByaW50ayh2ZXJzaW9uKTsKIAogCS8qIFRoZSBMQU5DRS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9IGxhbmNlX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYW5jZV9zdGFydF94bWl0OwotCWRldi0+c3RvcCA9IGxhbmNlX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gbGFuY2VfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGxhbmNlX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmxhbmNlX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKaW5kZXggNGQxYTA1OS4uZDQ0YmRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbHA0ODZlLmMKKysrIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKQEAgLTk1Miw2ICs5NTIsMTcgQEAKIAkJKHVuc2lnbmVkIGNoYXIpIGFkZFsxMl0sICh1bnNpZ25lZCBjaGFyKSBhZGRbMTNdKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNTk2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGk1OTZfb3BlbiwKKwkubmRvX3N0b3AJCT0gaTU5Nl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaTU5Nl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBpNTk2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGxwNDg2ZV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CiAJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHA7CiAJdW5zaWduZWQgY2hhciBldGhfYWRkcls2XSA9IHsgMCwgMHhhYSwgMCwgMCwgMCwgMCB9OwpAQCAtMTAxNCwxMiArMTAyNSw4IEBACiAJcHJpbnRrKCJcbiIpOwogCiAJLyogVGhlIExQNDg2RS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZpNTk2X29wZW47Ci0JZGV2LT5zdG9wID0gJmk1OTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmaTU5Nl9zdGFydF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaTU5Nl9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwotCWRldi0+dHhfdGltZW91dCA9IGk1OTZfdHhfdGltZW91dDsKIAogI2lmIDAKIAkvKiBzZWxmdGVzdCByZXBvcnRzIDB4MzIwOTI1YWUgLSBkb24ndCBrbm93IHdoYXQgdGhhdCBtZWFucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGY2YzQ5MzYuLmY1MDUwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5pc19ybWlpKSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkmbWFjYl9oYW5kbGVfbGlua19jaGFuZ2UsIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKTsKIAl9IGVsc2UgewotCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkJJm1hY2JfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAl9CiAKQEAgLTUxMyw3ICs1MTMsNiBAQAogc3RhdGljIGludCBtYWNiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbWFjYiwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CiAJaW50IHdvcmtfZG9uZTsKIAl1MzIgc3RhdHVzOwogCkBAIC01MjcsNyArNTI2LDcgQEAKIAkJICogdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIGxhc3QgdGltZSwgYW5kIG5vIHBhY2tldHMKIAkJICogaGF2ZSBiZWVuIHJlY2VpdmVkIHNpbmNlLgogCQkgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTM4LDEzICs1MzcsMTMgQEAKIAkJZGV2X3dhcm4oJmJwLT5wZGV2LT5kZXYsCiAJCQkgIk5vIFJYIGJ1ZmZlcnMgY29tcGxldGUsIHN0YXR1cyA9ICUwMmx4XG4iLAogCQkJICh1bnNpZ25lZCBsb25nKXN0YXR1cyk7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlnb3RvIG91dDsKIAl9CiAKIAl3b3JrX2RvbmUgPSBtYWNiX3J4KGJwLCBidWRnZXQpOwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyoKIAkgKiBXZSd2ZSBkb25lIHdoYXQgd2UgY2FuIHRvIGNsZWFuIHRoZSBidWZmZXJzLiBNYWtlIHN1cmUgd2UKQEAgLTU3OSw3ICs1NzgsNyBAQAogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIE1BQ0JfUlhfSU5UX0ZMQUdTKSB7Ci0JCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYnAtPm5hcGkpKSB7CisJCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKIAkJCQkvKgogCQkJCSAqIFRoZXJlJ3Mgbm8gcG9pbnQgdGFraW5nIGFueSBtb3JlIGludGVycnVwdHMKIAkJCQkgKiB1bnRpbCB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYnVmZmVycwpAQCAtNTg3LDcgKzU4Niw3IEBACiAJCQkJbWFjYl93cml0ZWwoYnAsIElEUiwgTUFDQl9SWF9JTlRfRkxBR1MpOwogCQkJCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsCiAJCQkJCSJzY2hlZHVsaW5nIFJYIHNvZnRpcnFcbiIpOwotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJwLT5uYXBpKTsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKIAkJCX0KIAkJfQogCkBAIC0xMDc3LDcgKzEwNzYsNyBAQAogCiAJc3RyY3B5KGluZm8tPmRyaXZlciwgYnAtPnBkZXYtPmRldi5kcml2ZXItPm5hbWUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCAiJFJldmlzaW9uOiAxLjE0ICQiKTsKLQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGJwLT5wZGV2LT5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZicC0+cGRldi0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFjYl9ldGh0b29sX29wcyA9IHsKQEAgLTEyMzQsOCArMTIzMyw4IEBACiAKIAlwaHlkZXYgPSBicC0+cGh5X2RldjsKIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKLQkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLCBkZXYtPm5hbWUsCisJCXBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggMjA1YmIwNS4uNTI3MTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAlpZiAoKGxwLT5kZXNjcmlwdG9ycyA9IGRtYV9hbGxvY19jb2hlcmVudChscC0+ZGV2aWNlLAogCSAgICAgICAgICAgIFNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCiAJICAgICAgICAgICAgJmxwLT5kZXNjcmlwdG9yc19sYWRkciwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsCisJCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzM3LDcgKzMzOCw3IEBACiAJCXNvbmljX3ZlcnNpb25fcHJpbnRlZCA9IDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBvbmJvYXJkIC8gY29tbS1zbG90IFNPTklDIGF0IDB4JTA4bHhcbiIsCi0JICAgICAgIGxwLT5kZXZpY2UtPmJ1c19pZCwgZGV2LT5iYXNlX2FkZHIpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgZGV2LT5iYXNlX2FkZHIpOwogCiAJLyogVGhlIFBvd2VyQm9vaydzIFNPTklDIGlzIDE2IGJpdCBhbHdheXMuICovCiAJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9QQjUyMCkgewpAQCAtMzcwLDEwICszNzEsMTAgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiJXM6IHJldmlzaW9uIDB4JTA0eCwgdXNpbmcgJWQgYml0IERNQSBhbmQgcmVnaXN0ZXIgb2Zmc2V0ICVkXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIHNyLCBscC0+ZG1hX2JpdG1vZGU/MzI6MTYsIGxwLT5yZWdfb2Zmc2V0KTsKKwkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSksIHNyLCBscC0+ZG1hX2JpdG1vZGU/MzI6MTYsIGxwLT5yZWdfb2Zmc2V0KTsKIAogI2lmIDAgLyogVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGZpbmQgb3V0IGhvdyBNYWNPUyBjb25maWd1cmVkIHRoZSBjYXJkLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ1I6IDB4JTA0eCwgRENSMjogMHglMDR4XG4iLCBscC0+ZGV2aWNlLT5idXNfaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpLAogCSAgICAgICBTT05JQ19SRUFEKFNPTklDX0RDUikgJiAweGZmZmYsIFNPTklDX1JFQUQoU09OSUNfRENSMikgJiAweGZmZmYpOwogI2VuZGlmCiAKQEAgLTUyNSwxMiArNTI2LDEyIEBACiAJCXNvbmljX3ZlcnNpb25fcHJpbnRlZCA9IDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBpbiBzbG90ICVYXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIG5kZXYtPmJvYXJkLT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBuZGV2LT5ib2FyZC0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXZpc2lvbiAweCUwNHgsIHVzaW5nICVkIGJpdCBETUEgYW5kIHJlZ2lzdGVyIG9mZnNldCAlZFxuIiwKLQkgICAgICAgbHAtPmRldmljZS0+YnVzX2lkLCBTT05JQ19SRUFEKFNPTklDX1NSKSwgZG1hX2JpdG1vZGU/MzI6MTYsIHJlZ19vZmZzZXQpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgU09OSUNfUkVBRChTT05JQ19TUiksIGRtYV9iaXRtb2RlPzMyOjE2LCByZWdfb2Zmc2V0KTsKIAogI2lmIDAgLyogVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGZpbmQgb3V0IGhvdyBNYWNPUyBjb25maWd1cmVkIHRoZSBjYXJkLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ1I6IDB4JTA0eCwgRENSMjogMHglMDR4XG4iLCBscC0+ZGV2aWNlLT5idXNfaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpLAogCSAgICAgICBTT05JQ19SRUFEKFNPTklDX0RDUikgJiAweGZmZmYsIFNPTklDX1JFQUQoU09OSUNfRENSMikgJiAweGZmZmYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA3ZTI0YjUwLi43MGQzZWY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtNjAsNiArNjAsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2FkZChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCit7CisJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IHZsYW4tPnBvcnQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHZsYW4tPmRldi0+ZGV2X2FkZHI7CisKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2FkZHJbNV1dKTsKK30KKworc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2RlbChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCit7CisJaGxpc3RfZGVsX3JjdSgmdmxhbi0+aGxpc3QpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfY2hhbmdlX2FkZHIoc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCW1hY3ZsYW5faGFzaF9kZWwodmxhbik7CisJLyogTm93IHRoYXQgd2UgYXJlIHVuaGFzaGVkIGl0IGlzIHNhZmUgdG8gY2hhbmdlIHRoZSBkZXZpY2UKKwkgKiBhZGRyZXNzIHdpdGhvdXQgY29uZnVzaW5nIHBhY2tldCBkZWxpdmVyeS4KKwkgKi8KKwltZW1jcHkodmxhbi0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCW1hY3ZsYW5faGFzaF9hZGQodmxhbik7Cit9CisKK3N0YXRpYyBpbnQgbWFjdmxhbl9hZGRyX2J1c3koY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCS8qIFRlc3QgdG8gc2VlIGlmIHRoZSBzcGVjaWZpZWQgbXVsdGljYXN0IGFkZHJlc3MgaXMKKwkgKiBjdXJyZW50bHkgaW4gdXNlIGJ5IHRoZSB1bmRlcmx5aW5nIGRldmljZSBvcgorCSAqIGFub3RoZXIgbWFjdmxhbi4KKwkgKi8KKwlpZiAobWVtY21wKHBvcnQtPmRldi0+ZGV2X2FkZHIsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCWlmIChtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGFkZHIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtYWN2bGFuX2Jyb2FkY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIHsKQEAgLTE4NCwxMCArMjI1LDEzIEBACiBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IHZsYW4tPnBvcnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi0+bG93ZXJkZXY7CiAJaW50IGVycjsKIAorCWVyciA9IC1FQlVTWTsKKwlpZiAobWFjdmxhbl9hZGRyX2J1c3kodmxhbi0+cG9ydCwgZGV2LT5kZXZfYWRkcikpCisJCWdvdG8gb3V0OworCiAJZXJyID0gZGV2X3VuaWNhc3RfYWRkKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMTk2LDggKzI0MCw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBkZWxfdW5pY2FzdDsKIAl9Ci0KLQlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2Rldi0+ZGV2X2FkZHJbNV1dKTsKKwltYWN2bGFuX2hhc2hfYWRkKHZsYW4pOwogCXJldHVybiAwOwogCiBkZWxfdW5pY2FzdDoKQEAgLTIxNyw4ICsyNjAsNyBAQAogCiAJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKLQlobGlzdF9kZWxfcmN1KCZ2bGFuLT5obGlzdCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMyLDE2ICsyNzQsMjEgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKQotCQlnb3RvIG91dDsKKwlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkgeworCQkvKiBKdXN0IGNvcHkgaW4gdGhlIG5ldyBhZGRyZXNzICovCisJCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJLyogUmVoYXNoIGFuZCB1cGRhdGUgdGhlIGRldmljZSBmaWx0ZXJzICovCisJCWlmIChtYWN2bGFuX2FkZHJfYnVzeSh2bGFuLT5wb3J0LCBhZGRyLT5zYV9kYXRhKSkKKwkJCXJldHVybiAtRUJVU1k7CiAKLQllcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJaWYgKChlcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKSkpCisJCQlyZXR1cm4gZXJyOwogCi1vdXQ6Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwkJbWFjdmxhbl9oYXNoX2NoYW5nZV9hZGRyKHZsYW4sIGFkZHItPnNhX2RhdGEpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYxLDEyICs1MDgsMTMgQEAKIAlpZiAobG93ZXJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBEb24ndCBhbGxvdyBtYWN2bGFucyBvbiB0b3Agb2Ygb3RoZXIgbWFjdmxhbnMgLSBpdHMgbm90IHJlYWxseQotCSAqIHdyb25nLCBidXQgbG9ja2RlcCBjYW4ndCBoYW5kbGUgaXQgYW5kIGl0cyBub3QgdXNlZnVsIGZvciBhbnl0aGluZwotCSAqIHlvdSBjb3VsZG4ndCBkbyBkaXJlY3RseSBvbiB0b3Agb2YgdGhlIHJlYWwgZGV2aWNlLgorCS8qIFdoZW4gY3JlYXRpbmcgbWFjdmxhbnMgb24gdG9wIG9mIG90aGVyIG1hY3ZsYW5zIC0gdXNlCisJICogdGhlIHJlYWwgZGV2aWNlIGFzIHRoZSBsb3dlcmRldi4KIAkgKi8KLQlpZiAobG93ZXJkZXYtPnJ0bmxfbGlua19vcHMgPT0gZGV2LT5ydG5sX2xpbmtfb3BzKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAobG93ZXJkZXYtPnJ0bmxfbGlua19vcHMgPT0gZGV2LT5ydG5sX2xpbmtfb3BzKSB7CisJCXN0cnVjdCBtYWN2bGFuX2RldiAqbG93ZXJ2bGFuID0gbmV0ZGV2X3ByaXYobG93ZXJkZXYpOworCQlsb3dlcmRldiA9IGxvd2Vydmxhbi0+bG93ZXJkZXY7CisJfQogCiAJaWYgKCF0YltJRkxBX01UVV0pCiAJCWRldi0+bXR1ID0gbG93ZXJkZXYtPm10dTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYyBiL2RyaXZlcnMvbmV0L21pcHNuZXQuYwppbmRleCA0ZTdhNWZhLi42NjQ4MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taXBzbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIHsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbWlwc25ldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCWludCBlcnI7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbmV0ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG5ldGRldik7CiAKIAluZXRkZXYtPm9wZW4JCQk9IG1pcHNuZXRfb3BlbjsKIAluZXRkZXYtPnN0b3AJCQk9IG1pcHNuZXRfY2xvc2U7CkBAIC0yOTMsMjMgKzI5MywyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG1pcHNuZXRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtaXBzbmV0X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIHNpemVvZihzdHJ1Y3QgbWlwc25ldF9yZWdzKSk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtaXBzbmV0X2RyaXZlciA9IHsKLQkubmFtZQk9IG1pcHNuZXRfc3RyaW5nLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gbWlwc25ldF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobWlwc25ldF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1pcHNuZXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IG1pcHNuZXRfc3RyaW5nLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWlwc25ldF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1pcHNuZXRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X2luaXRfbW9kdWxlKHZvaWQpCkBAIC0zMTksNyArMzIxLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNSVBTTmV0IEV0aGVybmV0IGRyaXZlci4gVmVyc2lvbjogJXMuICIKIAkgICAgICAgIihjKTIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy5cbiIsIE1JUFNORVRfVkVSU0lPTik7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIApAQCAtMzI4LDcgKzMzMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtaXBzbmV0X2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtaXBzbmV0X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tbHg0L01ha2VmaWxlCmluZGV4IGE3YTk3YmYuLjIxMDQwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIG9iai0kKENPTkZJR19NTFg0X0NPUkUpCQkrPSBtbHg0X2NvcmUubwogCiBtbHg0X2NvcmUteSA6PQlhbGxvYy5vIGNhdGFzLm8gY21kLm8gY3EubyBlcS5vIGZ3Lm8gaWNtLm8gaW50Zi5vIG1haW4ubyBtY2cubyBcCi0JCW1yLm8gcGQubyBwb3J0Lm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzcnEubworCQltci5vIHBkLm8gcG9ydC5vIHByb2ZpbGUubyBxcC5vIHJlc2V0Lm8gc2Vuc2UubyBzcnEubwogCiBvYmotJChDT05GSUdfTUxYNF9FTikgICAgICAgICAgICAgICArPSBtbHg0X2VuLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jIGIvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCmluZGV4IGYwOTRlZTAuLmFhOTY3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKQEAgLTQyLDcgKzQyLDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2F0YXNfbG9jayk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoY2F0YXNfbGlzdCk7Ci1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNhdGFzX3dxOwogc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBjYXRhc193b3JrOwogCiBzdGF0aWMgaW50IGludGVybmFsX2Vycl9yZXNldCA9IDE7CkBAIC03Nyw3ICs3Niw3IEBACiAJCQlsaXN0X2FkZCgmcHJpdi0+Y2F0YXNfZXJyLmxpc3QsICZjYXRhc19saXN0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXRhc19sb2NrKTsKIAotCQkJcXVldWVfd29yayhjYXRhc193cSwgJmNhdGFzX3dvcmspOworCQkJcXVldWVfd29yayhtbHg0X3dxLCAmY2F0YXNfd29yayk7CiAJCX0KIAl9IGVsc2UKIAkJbW9kX3RpbWVyKCZwcml2LT5jYXRhc19lcnIudGltZXIsCkBAIC0xNDYsMTggKzE0NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjYXRhc19sb2NrKTsKIH0KIAotaW50IF9faW5pdCBtbHg0X2NhdGFzX2luaXQodm9pZCkKK3ZvaWQgIF9faW5pdCBtbHg0X2NhdGFzX2luaXQodm9pZCkKIHsKIAlJTklUX1dPUksoJmNhdGFzX3dvcmssIGNhdGFzX3Jlc2V0KTsKLQotCWNhdGFzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm1seDRfZXJyIik7Ci0JaWYgKCFjYXRhc193cSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBtbHg0X2NhdGFzX2NsZWFudXAodm9pZCkKLXsKLQlkZXN0cm95X3dvcmtxdWV1ZShjYXRhc193cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggYzYxYjBiZC4uYTQxMzBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtNzY4LDYgKzc2OCw3IEBACiAKIAkJc2tiLT5pcF9zdW1tZWQgPSBpcF9zdW1tZWQ7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBjcS0+cmluZyk7CiAKIAkJLyogUHVzaCBpdCB1cCB0aGUgc3RhY2sgKi8KIAkJaWYgKHByaXYtPnZsZ3JwICYmIChiZTMyX3RvX2NwdShjcWUtPnZsYW5fbXlfcXBuKSAmCkBAIC04MTQsNyArODE1LDcgQEAKIAlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY3EtPmRldik7CiAKIAlpZiAocHJpdi0+cG9ydF91cCkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNxLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3EtPm5hcGkpOwogCWVsc2UKIAkJbWx4NF9lbl9hcm1fY3EocHJpdiwgY3EpOwogfQpAQCAtODM0LDcgKzgzNSw3IEBACiAJCUlOQ19QRVJGX0NPVU5URVIocHJpdi0+cHN0YXRzLm5hcGlfcXVvdGEpOwogCWVsc2UgewogCQkvKiBEb25lIGZvciBub3cgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCW1seDRfZW5fYXJtX2NxKHByaXYsIGNxKTsKIAl9CiAJcmV0dXJuIGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKaW5kZXggMmMxOWJmZjdjLi44ODMwZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lcS5jCkBAIC0xNjMsNiArMTYzLDcgQEAKIAlpbnQgY3FuOwogCWludCBlcWVzX2ZvdW5kID0gMDsKIAlpbnQgc2V0X2NpID0gMDsKKwlpbnQgcG9ydDsKIAogCXdoaWxlICgoZXFlID0gbmV4dF9lcWVfc3coZXEpKSkgewogCQkvKgpAQCAtMjAzLDExICsyMDQsMTYgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1BPUlRfQ0hBTkdFOgotCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsCi0JCQkJCSAgICBlcWUtPnN1YnR5cGUgPT0gTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0FDVElWRSA/Ci0JCQkJCSAgICBNTFg0X0RFVl9FVkVOVF9QT1JUX1VQIDoKLQkJCQkJICAgIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKLQkJCQkJICAgIGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjgpOworCQkJcG9ydCA9IGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjg7CisJCQlpZiAoZXFlLT5zdWJ0eXBlID09IE1MWDRfUE9SVF9DSEFOR0VfU1VCVFlQRV9ET1dOKSB7CisJCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKKwkJCQkJCSAgICBwb3J0KTsKKwkJCQltbHg0X3ByaXYoZGV2KS0+c2Vuc2UuZG9fc2Vuc2VfcG9ydFtwb3J0XSA9IDE7CisJCQl9IGVsc2UgeworCQkJCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0RFVl9FVkVOVF9QT1JUX1VQLAorCQkJCQkJICAgIHBvcnQpOworCQkJCW1seDRfcHJpdihkZXYpLT5zZW5zZS5kb19zZW5zZV9wb3J0W3BvcnRdID0gMDsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX0NRX0VSUk9SOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA2ZWYyNDkwLi5hNjZmNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtNTEsNiArNTEsOCBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWx4NF93cTsKKwogI2lmZGVmIENPTkZJR19NTFg0X0RFQlVHCiAKIGludCBtbHg0X2RlYnVnX2xldmVsID0gMDsKQEAgLTk4LDI0ICsxMDAsMjMgQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX3ByaW8sICJFbmFibGUgc3RlZXJpbmcgYnkgVkxBTiBwcmlvcml0eSBvbiBFVEggcG9ydHMgIgogCQkgICIoMC8xLCBkZWZhdWx0IDApIik7CiAKLXN0YXRpYyBpbnQgbWx4NF9jaGVja19wb3J0X3BhcmFtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKLQkJCQkgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZSkKK2ludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspIHsKLQkJaWYgKHBvcnRfdHlwZVtpXSAhPSBwb3J0X3R5cGVbaSsxXSAmJgotCQkgICAgIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgewotCQkJbWx4NF9lcnIoZGV2LCAiT25seSBzYW1lIHBvcnQgdHlwZXMgc3VwcG9ydGVkICIKLQkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwb3J0X3R5cGVbaV0gIT0gcG9ydF90eXBlW2kgKyAxXSkgeworCQkJaWYgKCEoZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfRFBEUCkpIHsKKwkJCQltbHg0X2VycihkZXYsICJPbmx5IHNhbWUgcG9ydCB0eXBlcyBzdXBwb3J0ZWQgIgorCQkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKHBvcnRfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9FVEggJiYKKwkJCSAgICBwb3J0X3R5cGVbaSArIDFdID09IE1MWDRfUE9SVF9UWVBFX0lCKQorCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCWlmICgocG9ydF90eXBlWzBdID09IE1MWDRfUE9SVF9UWVBFX0VUSCkgJiYKLQkgICAgKHBvcnRfdHlwZVsxXSA9PSBNTFg0X1BPUlRfVFlQRV9JQikpIHsKLQkJbWx4NF9lcnIoZGV2LCAiZXRoLWliIGNvbmZpZ3VyYXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CiAJCWlmICghKHBvcnRfdHlwZVtpXSAmIGRldi0+Y2Fwcy5zdXBwb3J0ZWRfdHlwZVtpKzFdKSkgewpAQCAtMjI1LDYgKzIyNiw5IEBACiAJCQlkZXYtPmNhcHMucG9ydF90eXBlW2ldID0gTUxYNF9QT1JUX1RZUEVfSUI7CiAJCWVsc2UKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbaV0gPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJCWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID0gZGV2LT5jYXBzLnBvcnRfdHlwZVtpXTsKKwkJbWx4NF9wcml2KGRldiktPnNlbnNlLnNlbnNlX2FsbG93ZWRbaV0gPQorCQkJZGV2LT5jYXBzLnN1cHBvcnRlZF90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE87CiAKIAkJaWYgKGRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPiBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV0pIHsKIAkJCWRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPSBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV07CkBAIC0yNjMsMTQgKzI2NywxNiBAQAogICogQ2hhbmdlIHRoZSBwb3J0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZS4KICAqIEV2ZXJ5IHVzZXIgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGhvbGQgdGhlIHBvcnQgbXV0ZXguCiAgKi8KLXN0YXRpYyBpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKLQkJCQkgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpCitpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IGNoYW5nZSA9IDA7CiAJaW50IHBvcnQ7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgIGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykgeworCQkvKiBDaGFuZ2UgdGhlIHBvcnQgdHlwZSBvbmx5IGlmIHRoZSBuZXcgdHlwZSBpcyBkaWZmZXJlbnQKKwkJICogZnJvbSB0aGUgY3VycmVudCwgYW5kIG5vdCBzZXQgdG8gQXV0byAqLwogCQlpZiAocG9ydF90eXBlc1twb3J0XSAhPSBkZXYtPmNhcHMucG9ydF90eXBlW3BvcnQgKyAxXSkgewogCQkJY2hhbmdlID0gMTsKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydCArIDFdID0gcG9ydF90eXBlc1twb3J0XTsKQEAgLTMwMiwxMCArMzA4LDE3IEBACiAJc3RydWN0IG1seDRfcG9ydF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBtbHg0X3BvcnRfaW5mbywKIAkJCQkJCSAgIHBvcnRfYXR0cik7CiAJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OworCWNoYXIgdHlwZVs4XTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAotCQkgICAgICAgbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaW5mby0+cG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfSUIgPwotCQkgICAgICAgImliIiA6ICJldGgiKTsKKwlzcHJpbnRmKHR5cGUsICIlcyIsCisJCShtZGV2LT5jYXBzLnBvcnRfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9JQikgPworCQkiaWIiIDogImV0aCIpOworCWlmIChtZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaW5mby0+cG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykKKwkJc3ByaW50ZihidWYsICJhdXRvICglcylcbiIsIHR5cGUpOworCWVsc2UKKwkJc3ByaW50ZihidWYsICIlc1xuIiwgdHlwZSk7CisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF9wb3J0X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMzE3LDYgKzMzMCw3IEBACiAJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OwogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYobWRldik7CiAJZW51bSBtbHg0X3BvcnRfdHlwZSB0eXBlc1tNTFg0X01BWF9QT1JUU107CisJZW51bSBtbHg0X3BvcnRfdHlwZSBuZXdfdHlwZXNbTUxYNF9NQVhfUE9SVFNdOwogCWludCBpOwogCWludCBlcnIgPSAwOwogCkBAIC0zMjQsMjYgKzMzOCw1NiBAQAogCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0lCOwogCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZXRoXG4iKSkKIAkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJZWxzZSBpZiAoIXN0cmNtcChidWYsICJhdXRvXG4iKSkKKwkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9BVVRPOwogCWVsc2UgewogCQltbHg0X2VycihtZGV2LCAiJXMgaXMgbm90IHN1cHBvcnRlZCBwb3J0IHR5cGVcbiIsIGJ1Zik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCW1seDRfc3RvcF9zZW5zZShtZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKLQkJdHlwZXNbaV0gPSBwcml2LT5wb3J0W2krMV0udG1wX3R5cGUgPyBwcml2LT5wb3J0W2krMV0udG1wX3R5cGUgOgotCQkJCQltZGV2LT5jYXBzLnBvcnRfdHlwZVtpKzFdOworCS8qIFBvc3NpYmxlIHR5cGUgaXMgYWx3YXlzIHRoZSBvbmUgdGhhdCB3YXMgZGVsaXZlcmVkICovCisJbWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2luZm8tPnBvcnRdID0gaW5mby0+dG1wX3R5cGU7CiAKLQllcnIgPSBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKG1kZXYsIHR5cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykgeworCQl0eXBlc1tpXSA9IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA/IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA6CisJCQkJCW1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpKzFdOworCQlpZiAodHlwZXNbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykKKwkJCXR5cGVzW2ldID0gbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaSsxXTsKKwl9CisKKwlpZiAoIShtZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfRFBEUCkpIHsKKwkJZm9yIChpID0gMTsgaSA8PSBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CisJCQlpZiAobWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE8pIHsKKwkJCQltZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPSBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpXTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkF1dG8gc2Vuc2luZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgSENBLiAiCisJCQkgICAgICAgIlNldCBvbmx5ICdldGgnIG9yICdpYicgZm9yIGJvdGggcG9ydHMgIgorCQkJICAgICAgICIoc2hvdWxkIGJlIHRoZSBzYW1lKVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCW1seDRfZG9fc2Vuc2VfcG9ydHMobWRldiwgbmV3X3R5cGVzLCB0eXBlcyk7CisKKwllcnIgPSBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKG1kZXYsIG5ld190eXBlcyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IG1kZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCi0JCXByaXYtPnBvcnRbaV0udG1wX3R5cGUgPSAwOworCS8qIFdlIGFyZSBhYm91dCB0byBhcHBseSB0aGUgY2hhbmdlcyBhZnRlciB0aGUgY29uZmlndXJhdGlvbgorCSAqIHdhcyB2ZXJpZmllZCwgbm8gbmVlZCB0byByZW1lbWJlciB0aGUgdGVtcG9yYXJ5IHR5cGVzCisJICogYW55IG1vcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJcHJpdi0+cG9ydFtpICsgMV0udG1wX3R5cGUgPSAwOwogCi0JZXJyID0gbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhtZGV2LCB0eXBlcyk7CisJZXJyID0gbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhtZGV2LCBuZXdfdHlwZXMpOwogCiBvdXQ6CisJbWx4NF9zdGFydF9zZW5zZShtZGV2KTsKIAltdXRleF91bmxvY2soJnByaXYtPnBvcnRfbXV0ZXgpOwogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KQEAgLTExMTcsNiArMTE2MSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcG9ydDsKIAorCW1seDRfc2Vuc2VfaW5pdChkZXYpOworCW1seDRfc3RhcnRfc2Vuc2UoZGV2KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTgyLDYgKzEyMjksNyBAQAogCWludCBwOwogCiAJaWYgKGRldikgeworCQltbHg0X3N0b3Bfc2Vuc2UoZGV2KTsKIAkJbWx4NF91bnJlZ2lzdGVyX2RldmljZShkZXYpOwogCiAJCWZvciAocCA9IDE7IHAgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcCsrKSB7CkBAIC0xMjMwLDYgKzEyNzgsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjczYykgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBRRFIgUENJZSBnZW4yICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzY4KSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEVOIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc1MCkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBFTiAxMEdpZ0UgUENJZSBnZW4yICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyAwLCB9CiB9OwogCkBAIC0xMjY0LDkgKzEzMTQsMTEgQEAKIAlpZiAobWx4NF92ZXJpZnlfcGFyYW1zKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gbWx4NF9jYXRhc19pbml0KCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwltbHg0X2NhdGFzX2luaXQoKTsKKworCW1seDRfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibWx4NCIpOworCWlmICghbWx4NF93cSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtbHg0X2RyaXZlcik7CiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwpAQCAtMTI3NSw3ICsxMzI3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtbHg0X2NsZWFudXAodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1seDRfZHJpdmVyKTsKLQltbHg0X2NhdGFzX2NsZWFudXAoKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtbHg0X3dxKTsKIH0KIAogbW9kdWxlX2luaXQobWx4NF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKaW5kZXggZTAyMTNiYWQuLjViZDc5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KQEAgLTI3Niw2ICsyNzcsMTMgQEAKIAlzdHJ1Y3QgbWx4NF92bGFuX3RhYmxlCXZsYW5fdGFibGU7CiB9OwogCitzdHJ1Y3QgbWx4NF9zZW5zZSB7CisJc3RydWN0IG1seDRfZGV2CQkqZGV2OworCXU4CQkJZG9fc2Vuc2VfcG9ydFtNTFg0X01BWF9QT1JUUyArIDFdOworCXU4CQkJc2Vuc2VfYWxsb3dlZFtNTFg0X01BWF9QT1JUUyArIDFdOworCXN0cnVjdCBkZWxheWVkX3dvcmsJc2Vuc2VfcG9sbDsKK307CisKIHN0cnVjdCBtbHg0X3ByaXYgewogCXN0cnVjdCBtbHg0X2RldgkJZGV2OwogCkBAIC0zMDUsNiArMzEzLDcgQEAKIAlzdHJ1Y3QgbWx4NF91YXIJCWRyaXZlcl91YXI7CiAJdm9pZCBfX2lvbWVtCSAgICAgICAqa2FyOwogCXN0cnVjdCBtbHg0X3BvcnRfaW5mbwlwb3J0W01MWDRfTUFYX1BPUlRTICsgMV07CisJc3RydWN0IG1seDRfc2Vuc2UgICAgICAgc2Vuc2U7CiAJc3RydWN0IG11dGV4CQlwb3J0X211dGV4OwogfTsKIApAQCAtMzEzLDYgKzMyMiwxMCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWx4NF9wcml2LCBkZXYpOwogfQogCisjZGVmaW5lIE1MWDRfU0VOU0VfUkFOR0UJKEhaICogMykKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptbHg0X3dxOworCiB1MzIgbWx4NF9iaXRtYXBfYWxsb2Moc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXApOwogdm9pZCBtbHg0X2JpdG1hcF9mcmVlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqKTsKIHUzMiBtbHg0X2JpdG1hcF9hbGxvY19yYW5nZShzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCwgaW50IGNudCwgaW50IGFsaWduKTsKQEAgLTM0Niw4ICszNTksNyBAQAogCiB2b2lkIG1seDRfc3RhcnRfY2F0YXNfcG9sbChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CiB2b2lkIG1seDRfc3RvcF9jYXRhc19wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKLWludCBtbHg0X2NhdGFzX2luaXQodm9pZCk7Ci12b2lkIG1seDRfY2F0YXNfY2xlYW51cCh2b2lkKTsKK3ZvaWQgbWx4NF9jYXRhc19pbml0KHZvaWQpOwogaW50IG1seDRfcmVzdGFydF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogaW50IG1seDRfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CkBAIC0zNzksNiArMzkxLDE3IEBACiAKIHZvaWQgbWx4NF9oYW5kbGVfY2F0YXNfZXJyKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIAordm9pZCBtbHg0X2RvX3NlbnNlX3BvcnRzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKnN0eXBlLAorCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKmRlZmF1bHRzKTsKK3ZvaWQgbWx4NF9zdGFydF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfc3RvcF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfc2Vuc2VfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitpbnQgbWx4NF9jaGVja19wb3J0X3BhcmFtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZSk7CitpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpOworCiB2b2lkIG1seDRfaW5pdF9tYWNfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X21hY190YWJsZSAqdGFibGUpOwogdm9pZCBtbHg0X2luaXRfdmxhbl90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfdmxhbl90YWJsZSAqdGFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCmluZGV4IDBhMDU3ZTUuLjdjY2UzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCkBAIC0yOTgsMjAgKzI5OCwxNyBAQAogewogCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OwogCWludCBlcnI7Ci0JdTggaXNfZXRoID0gZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9FVEg7CiAKIAltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOwogCWlmIChJU19FUlIobWFpbGJveCkpCiAJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOwogCiAJbWVtc2V0KG1haWxib3gtPmJ1ZiwgMCwgMjU2KTsKLQlpZiAoaXNfZXRoKSB7Ci0JCSgodTggKikgbWFpbGJveC0+YnVmKVszXSA9IDY7Ci0JCSgoX19iZTE2ICopIG1haWxib3gtPmJ1ZilbNF0gPSBjcHVfdG9fYmUxNigxIDw8IDE1KTsKLQkJKChfX2JlMTYgKikgbWFpbGJveC0+YnVmKVs2XSA9IGNwdV90b19iZTE2KDEgPDwgMTUpOwotCX0gZWxzZQotCQkoKF9fYmUzMiAqKSBtYWlsYm94LT5idWYpWzFdID0gZGV2LT5jYXBzLmliX3BvcnRfZGVmX2NhcFtwb3J0XTsKLQllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgcG9ydCwgaXNfZXRoLCBNTFg0X0NNRF9TRVRfUE9SVCwKKwlpZiAoZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9FVEgpCisJCXJldHVybiAwOworCisJKChfX2JlMzIgKikgbWFpbGJveC0+YnVmKVsxXSA9IGRldi0+Y2Fwcy5pYl9wb3J0X2RlZl9jYXBbcG9ydF07CisJZXJyID0gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIHBvcnQsIDAsIE1MWDRfQ01EX1NFVF9QT1JULAogCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKIAogCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jIGIvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorCitzdGF0aWMgaW50IG1seDRfU0VOU0VfUE9SVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQsCisJCQkgICBlbnVtIG1seDRfcG9ydF90eXBlICp0eXBlKQoreworCXU2NCBvdXRfcGFyYW07CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBtbHg0X2NtZF9pbW0oZGV2LCAwLCAmb3V0X3BhcmFtLCBwb3J0LCAwLAorCQkJICAgTUxYNF9DTURfU0VOU0VfUE9SVCwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIlNlbnNlIGNvbW1hbmQgZmFpbGVkIGZvciBwb3J0OiAlZFxuIiwgcG9ydCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKG91dF9wYXJhbSA+IDIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiU2Vuc2UgcmV0dXJuZWQgaWxsZWdhbCB2YWx1ZTogMHglbGx4XG4iLCBvdXRfcGFyYW0pOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCSp0eXBlID0gb3V0X3BhcmFtOworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfZG9fc2Vuc2VfcG9ydHMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqc3R5cGUsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqZGVmYXVsdHMpCit7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gJm1seDRfcHJpdihkZXYpLT5zZW5zZTsKKwlpbnQgZXJyOworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJc3R5cGVbaSAtIDFdID0gMDsKKwkJaWYgKHNlbnNlLT5kb19zZW5zZV9wb3J0W2ldICYmIHNlbnNlLT5zZW5zZV9hbGxvd2VkW2ldICYmCisJCSAgICBkZXYtPmNhcHMucG9zc2libGVfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKSB7CisJCQllcnIgPSBtbHg0X1NFTlNFX1BPUlQoZGV2LCBpLCAmc3R5cGVbaSAtIDFdKTsKKwkJCWlmIChlcnIpCisJCQkJc3R5cGVbaSAtIDFdID0gZGVmYXVsdHNbaSAtIDFdOworCQl9IGVsc2UKKwkJCXN0eXBlW2kgLSAxXSA9IGRlZmF1bHRzW2kgLSAxXTsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBwb3J0IGNvbmZpZ3VyYXRpb246CisJICogSWYgcG9ydCAxIHNlbnNlZCBub3RoaW5nIGFuZCBwb3J0IDIgaXMgSUIsIHNldCBib3RoIGFzIElCCisJICogSWYgcG9ydCAyIHNlbnNlZCBub3RoaW5nIGFuZCBwb3J0IDEgaXMgRXRoLCBzZXQgYm90aCBhcyBFdGgKKwkgKi8KKwlpZiAoc3R5cGVbMF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSB7CisJCWZvciAoaSA9IDE7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCQlzdHlwZVtpXSA9IHN0eXBlW2ldID8gc3R5cGVbaV0gOiBNTFg0X1BPUlRfVFlQRV9FVEg7CisJfQorCWlmIChzdHlwZVtkZXYtPmNhcHMubnVtX3BvcnRzIC0gMV0gPT0gTUxYNF9QT1JUX1RZUEVfSUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspCisJCQlzdHlwZVtpXSA9IHN0eXBlW2ldID8gc3R5cGVbaV0gOiBNTFg0X1BPUlRfVFlQRV9JQjsKKwl9CisKKwkvKgorCSAqIElmIHNlbnNlZCBub3RoaW5nLCByZW1haW4gaW4gY3VycmVudCBjb25maWd1cmF0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IGRlZmF1bHRzW2ldOworCit9CisKK3N0YXRpYyB2b2lkIG1seDRfc2Vuc2VfcG9ydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gY29udGFpbmVyX29mKGRlbGF5LCBzdHJ1Y3QgbWx4NF9zZW5zZSwKKwkJCQkJCXNlbnNlX3BvbGwpOworCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gc2Vuc2UtPmRldjsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJZW51bSBtbHg0X3BvcnRfdHlwZSBzdHlwZVtNTFg0X01BWF9QT1JUU107CisKKwltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwltbHg0X2RvX3NlbnNlX3BvcnRzKGRldiwgc3R5cGUsICZkZXYtPmNhcHMucG9ydF90eXBlWzFdKTsKKworCWlmIChtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKGRldiwgc3R5cGUpKQorCQlnb3RvIHNlbnNlX2FnYWluOworCisJaWYgKG1seDRfY2hhbmdlX3BvcnRfdHlwZXMoZGV2LCBzdHlwZSkpCisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBjaGFuZ2UgcG9ydF90eXBlc1xuIik7CisKK3NlbnNlX2FnYWluOgorCW11dGV4X3VubG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CisJcXVldWVfZGVsYXllZF93b3JrKG1seDRfd3EgLCAmc2Vuc2UtPnNlbnNlX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKE1MWDRfU0VOU0VfUkFOR0UpKTsKK30KKwordm9pZCBtbHg0X3N0YXJ0X3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmcHJpdi0+c2Vuc2U7CisKKwlpZiAoIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkKKwkJcmV0dXJuOworCisJcXVldWVfZGVsYXllZF93b3JrKG1seDRfd3EgLCAmc2Vuc2UtPnNlbnNlX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKE1MWDRfU0VOU0VfUkFOR0UpKTsKK30KKwordm9pZCBtbHg0X3N0b3Bfc2Vuc2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtbHg0X3ByaXYoZGV2KS0+c2Vuc2Uuc2Vuc2VfcG9sbCk7Cit9CisKK3ZvaWQgIG1seDRfc2Vuc2VfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gJnByaXYtPnNlbnNlOworCWludCBwb3J0OworCisJc2Vuc2UtPmRldiA9IGRldjsKKwlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykKKwkJc2Vuc2UtPmRvX3NlbnNlX3BvcnRbcG9ydF0gPSAxOworCisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmc2Vuc2UtPnNlbnNlX3BvbGwsIG1seDRfc2Vuc2VfcG9ydCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCBiMGJjM2JjLi5hNTZkOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogc3RhdGljIGNoYXIgbXY2NDN4eF9ldGhfZHJpdmVyX25hbWVbXSA9ICJtdjY0M3h4X2V0aCI7CkBAIC0yMjcsNiArMjI4LDEyIEBACiAjZGVmaW5lIFJYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MjAwMDAwMDAKICNkZWZpbmUgUlhfRklSU1RfREVTQwkJCTB4MDgwMDAwMDAKICNkZWZpbmUgUlhfTEFTVF9ERVNDCQkJMHgwNDAwMDAwMAorI2RlZmluZSBSWF9JUF9IRFJfT0sJCQkweDAyMDAwMDAwCisjZGVmaW5lIFJYX1BLVF9JU19JUFY0CQkJMHgwMTAwMDAwMAorI2RlZmluZSBSWF9QS1RfSVNfRVRIRVJORVRWMgkJMHgwMDgwMDAwMAorI2RlZmluZSBSWF9QS1RfTEFZRVI0X1RZUEVfTUFTSwkJMHgwMDYwMDAwMAorI2RlZmluZSBSWF9QS1RfTEFZRVI0X1RZUEVfVENQX0lQVjQJMHgwMDAwMDAwMAorI2RlZmluZSBSWF9QS1RfSVNfVkxBTl9UQUdHRUQJCTB4MDAwODAwMDAKIAogLyogVFggZGVzY3JpcHRvciBjb21tYW5kICovCiAjZGVmaW5lIFRYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MDA4MDAwMDAKQEAgLTI4Niw2ICsyOTMsOSBAQAogI2RlZmluZSBUWF9CV19DT05UUk9MX09MRF9MQVlPVVQJMQogI2RlZmluZSBUWF9CV19DT05UUk9MX05FV19MQVlPVVQJMgogCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAogLyogcGVyLXBvcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgbWliX2NvdW50ZXJzIHsKQEAgLTMyMSw2ICszMzEsMTIgQEAKIAl1MzIgbGF0ZV9jb2xsaXNpb247CiB9OwogCitzdHJ1Y3QgbHJvX2NvdW50ZXJzIHsKKwl1MzIgbHJvX2FnZ3JlZ2F0ZWQ7CisJdTMyIGxyb19mbHVzaGVkOworCXUzMiBscm9fbm9fZGVzYzsKK307CisKIHN0cnVjdCByeF9xdWV1ZSB7CiAJaW50IGluZGV4OwogCkBAIC0zMzQsNiArMzUwLDkgQEAKIAlkbWFfYWRkcl90IHJ4X2Rlc2NfZG1hOwogCWludCByeF9kZXNjX2FyZWFfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKKworCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOworCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Fycls4XTsKIH07CiAKIHN0cnVjdCB0eF9xdWV1ZSB7CkBAIC0zNjksNiArMzg4LDggQEAKIAlzcGlubG9ja190IG1pYl9jb3VudGVyc19sb2NrOwogCXN0cnVjdCBtaWJfY291bnRlcnMgbWliX2NvdW50ZXJzOwogCisJc3RydWN0IGxyb19jb3VudGVycyBscm9fY291bnRlcnM7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF90YXNrOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CkBAIC0zODUsNyArNDA2LDcgQEAKIAkvKgogCSAqIFJYIHN0YXRlLgogCSAqLwotCWludCBkZWZhdWx0X3J4X3Jpbmdfc2l6ZTsKKwlpbnQgcnhfcmluZ19zaXplOwogCXVuc2lnbmVkIGxvbmcgcnhfZGVzY19zcmFtX2FkZHI7CiAJaW50IHJ4X2Rlc2Nfc3JhbV9zaXplOwogCWludCByeHFfY291bnQ7CkBAIC0zOTUsNyArNDE2LDcgQEAKIAkvKgogCSAqIFRYIHN0YXRlLgogCSAqLwotCWludCBkZWZhdWx0X3R4X3Jpbmdfc2l6ZTsKKwlpbnQgdHhfcmluZ19zaXplOwogCXVuc2lnbmVkIGxvbmcgdHhfZGVzY19zcmFtX2FkZHI7CiAJaW50IHR4X2Rlc2Nfc3JhbV9zaXplOwogCWludCB0eHFfY291bnQ7CkBAIC00OTMsMTIgKzUxNCw0MCBAQAogCiAKIC8qIHJ4IG5hcGkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorbXY2NDN4eF9nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqaXBoZHIsIHZvaWQgKip0Y3BoLAorCQkgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBjbWRfc3RzID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhpcyBwYWNrZXQgaXMgRXRoZXJuZXQgSUksIGlzIG5vdCBWTEFOCisJICogdGFnZ2VkLCBpcyBJUHY0LCBoYXMgYSB2YWxpZCBJUCBoZWFkZXIsIGFuZCBpcyBUQ1AuCisJICovCisJaWYgKChjbWRfc3RzICYgKFJYX0lQX0hEUl9PSyB8IFJYX1BLVF9JU19JUFY0IHwKKwkJICAgICAgIFJYX1BLVF9JU19FVEhFUk5FVFYyIHwgUlhfUEtUX0xBWUVSNF9UWVBFX01BU0sgfAorCQkgICAgICAgUlhfUEtUX0lTX1ZMQU5fVEFHR0VEKSkgIT0KKwkgICAgKFJYX0lQX0hEUl9PSyB8IFJYX1BLVF9JU19JUFY0IHwKKwkgICAgIFJYX1BLVF9JU19FVEhFUk5FVFYyIHwgUlhfUEtUX0xBWUVSNF9UWVBFX1RDUF9JUFY0KSkKKwkJcmV0dXJuIC0xOworCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOworCSppcGhkciA9IGlwX2hkcihza2IpOworCSp0Y3BoID0gdGNwX2hkcihza2IpOworCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgcnhfcXVldWUgKnJ4cSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSByeHFfdG9fbXAocnhxKTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbXAtPmRldi0+c3RhdHM7CisJaW50IGxyb19mbHVzaF9uZWVkZWQ7CiAJaW50IHJ4OwogCisJbHJvX2ZsdXNoX25lZWRlZCA9IDA7CiAJcnggPSAwOwogCXdoaWxlIChyeCA8IGJ1ZGdldCAmJiByeHEtPnJ4X2Rlc2NfY291bnQpIHsKIAkJc3RydWN0IHJ4X2Rlc2MgKnJ4X2Rlc2M7CkBAIC01NTgsNyArNjA3LDEzIEBACiAJCWlmIChjbWRfc3RzICYgTEFZRVJfNF9DSEVDS1NVTV9PSykKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1wLT5kZXYpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCWlmIChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyAmJgorCQkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwkJCWxyb19yZWNlaXZlX3NrYigmcnhxLT5scm9fbWdyLCBza2IsICh2b2lkICopY21kX3N0cyk7CisJCQlscm9fZmx1c2hfbmVlZGVkID0gMTsKKwkJfSBlbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJCWNvbnRpbnVlOwogCkBAIC01NzksNiArNjM0LDkgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAorCWlmIChscm9fZmx1c2hfbmVlZGVkKQorCQlscm9fZmx1c2hfYWxsKCZyeHEtPmxyb19tZ3IpOworCiAJaWYgKHJ4IDwgYnVkZ2V0KQogCQltcC0+d29ya19yeCAmPSB+KDEgPDwgcnhxLT5pbmRleCk7CiAKQEAgLTkwNyw3ICs5NjUsNyBAQAogCiAJCWlmIChza2IgIT0gTlVMTCkgewogCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJm1wLT5yeF9yZWN5Y2xlKSA8Ci0JCQkJCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSAmJgorCQkJCQltcC0+cnhfcmluZ19zaXplICYmCiAJCQkgICAgc2tiX3JlY3ljbGVfY2hlY2soc2tiLCBtcC0+c2tiX3NpemUgKwogCQkJCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0gMSkpCiAJCQkJX19za2JfcXVldWVfaGVhZCgmbXAtPnJ4X3JlY3ljbGUsIHNrYik7CkBAIC0xMTU4LDYgKzEyMTYsMjYgQEAKIAlyZXR1cm4gc3RhdHM7CiB9CiAKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dyYWJfbHJvX3N0YXRzKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCkKK3sKKwl1MzIgbHJvX2FnZ3JlZ2F0ZWQgPSAwOworCXUzMiBscm9fZmx1c2hlZCA9IDA7CisJdTMyIGxyb19ub19kZXNjID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtcC0+cnhxX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHJ4X3F1ZXVlICpyeHEgPSBtcC0+cnhxICsgaTsKKworCQlscm9fYWdncmVnYXRlZCArPSByeHEtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKKwkJbHJvX2ZsdXNoZWQgKz0gcnhxLT5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7CisJCWxyb19ub19kZXNjICs9IHJ4cS0+bHJvX21nci5zdGF0cy5ub19kZXNjOworCX0KKworCW1wLT5scm9fY291bnRlcnMubHJvX2FnZ3JlZ2F0ZWQgPSBscm9fYWdncmVnYXRlZDsKKwltcC0+bHJvX2NvdW50ZXJzLmxyb19mbHVzaGVkID0gbHJvX2ZsdXNoZWQ7CisJbXAtPmxyb19jb3VudGVycy5scm9fbm9fZGVzYyA9IGxyb19ub19kZXNjOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBtaWJfcmVhZChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIHJkbChtcCwgTUlCX0NPVU5URVJTKG1wLT5wb3J0X251bSkgKyBvZmZzZXQpOwpAQCAtMTIyMSw2ICsxMjk5LDg1IEBACiB9CiAKIAorLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSGFyZHdhcmUgY29hbGVzY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgaW4gdW5pdHMgb2YgNjQgdF9jbGsKKyAqIGN5Y2xlcy4gIEkuZS46CisgKgorICoJY29hbF9kZWxheV9pbl91c2VjID0gNjQwMDAwMDAgKiByZWdpc3Rlcl92YWx1ZSAvIHRfY2xrX3JhdGUKKyAqCisgKglyZWdpc3Rlcl92YWx1ZSA9IGNvYWxfZGVsYXlfaW5fdXNlYyAqIHRfY2xrX3JhdGUgLyA2NDAwMDAwMAorICoKKyAqIEluIHRoZSAtPnNldCooKSBtZXRob2RzLCB3ZSByb3VuZCB0aGUgY29tcHV0ZWQgcmVnaXN0ZXIgdmFsdWUKKyAqIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3J4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXUzMiB2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7CisJdTY0IHRlbXA7CisKKwlpZiAobXAtPnNoYXJlZC0+ZXh0ZW5kZWRfcnhfY29hbF9saW1pdCkKKwkJdGVtcCA9ICgodmFsICYgMHgwMjAwMDAwMCkgPj4gMTApIHwgKCh2YWwgJiAweDAwM2ZmZjgwKSA+PiA3KTsKKwllbHNlCisJCXRlbXAgPSAodmFsICYgMHgwMDNmZmYwMCkgPj4gODsKKworCXRlbXAgKj0gNjQwMDAwMDA7CisJZG9fZGl2KHRlbXAsIG1wLT5zaGFyZWQtPnRfY2xrKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KXRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yeF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IHVzZWMpCit7CisJdTY0IHRlbXA7CisJdTMyIHZhbDsKKworCXRlbXAgPSAodTY0KXVzZWMgKiBtcC0+c2hhcmVkLT50X2NsazsKKwl0ZW1wICs9IDMxOTk5OTk5OworCWRvX2Rpdih0ZW1wLCA2NDAwMDAwMCk7CisKKwl2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7CisJaWYgKG1wLT5zaGFyZWQtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQpIHsKKwkJaWYgKHRlbXAgPiAweGZmZmYpCisJCQl0ZW1wID0gMHhmZmZmOworCQl2YWwgJj0gfjB4MDIzZmZmODA7CisJCXZhbCB8PSAodGVtcCAmIDB4ODAwMCkgPDwgMTA7CisJCXZhbCB8PSAodGVtcCAmIDB4N2ZmZikgPDwgNzsKKwl9IGVsc2UgeworCQlpZiAodGVtcCA+IDB4M2ZmZikKKwkJCXRlbXAgPSAweDNmZmY7CisJCXZhbCAmPSB+MHgwMDNmZmYwMDsKKwkJdmFsIHw9ICh0ZW1wICYgMHgzZmZmKSA8PCA4OworCX0KKwl3cmxwKG1wLCBTRE1BX0NPTkZJRywgdmFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdHhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJdTY0IHRlbXA7CisKKwl0ZW1wID0gKHJkbHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCkgJiAweDNmZmYwKSA+PiA0OworCXRlbXAgKj0gNjQwMDAwMDA7CisJZG9fZGl2KHRlbXAsIG1wLT5zaGFyZWQtPnRfY2xrKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KXRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90eF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IHVzZWMpCit7CisJdTY0IHRlbXA7CisKKwl0ZW1wID0gKHU2NCl1c2VjICogbXAtPnNoYXJlZC0+dF9jbGs7CisJdGVtcCArPSAzMTk5OTk5OTsKKwlkb19kaXYodGVtcCwgNjQwMDAwMDApOworCisJaWYgKHRlbXAgPiAweDNmZmYpCisJCXRlbXAgPSAweDNmZmY7CisKKwl3cmxwKG1wLCBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTEQsIHRlbXAgPDwgNCk7Cit9CisKKwogLyogZXRodG9vbCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgbXY2NDN4eF9ldGhfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTEyMzcsNiArMTM5NCwxMCBAQAogCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbWliX2NvdW50ZXJzLCBtKSwJCVwKIAkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbWliX2NvdW50ZXJzLm0pIH0KIAorI2RlZmluZSBMUk9TVEFUKG0pCQkJCQkJXAorCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbHJvX2NvdW50ZXJzLCBtKSwJCVwKKwkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbHJvX2NvdW50ZXJzLm0pIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyBtdjY0M3h4X2V0aF9zdGF0c1tdID0gewogCVNTVEFUKHJ4X3BhY2tldHMpLAogCVNTVEFUKHR4X3BhY2tldHMpLApAQCAtMTI3NiwxMiArMTQzNywxNSBAQAogCU1JQlNUQVQoYmFkX2NyY19ldmVudCksCiAJTUlCU1RBVChjb2xsaXNpb24pLAogCU1JQlNUQVQobGF0ZV9jb2xsaXNpb24pLAorCUxST1NUQVQobHJvX2FnZ3JlZ2F0ZWQpLAorCUxST1NUQVQobHJvX2ZsdXNoZWQpLAorCUxST1NUQVQobHJvX25vX2Rlc2MpLAogfTsKIAogc3RhdGljIGludAotbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQorbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeShzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAogCWVyciA9IHBoeV9yZWFkX3N0YXR1cyhtcC0+cGh5KTsKQEAgLTEyOTgsMTAgKzE0NjIsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeWxlc3Moc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBwb3J0X3N0YXR1czsKIAogCXBvcnRfc3RhdHVzID0gcmRscChtcCwgUE9SVF9TVEFUVVMpOwpAQCAtMTMzNCwxMCArMTQ5NywyNCBAQAogfQogCiBzdGF0aWMgaW50CittdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChtcC0+cGh5ICE9IE5VTEwpCisJCXJldHVybiBtdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5KG1wLCBjbWQpOworCWVsc2UKKwkJcmV0dXJuIG12NjQzeHhfZXRoX2dldF9zZXR0aW5nc19waHlsZXNzKG1wLCBjbWQpOworfQorCitzdGF0aWMgaW50CiBtdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmIChtcC0+cGh5ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBUaGUgTUFDIGRvZXMgbm90IHN1cHBvcnQgMTAwMGJhc2VUX0hhbGYuCiAJICovCkBAIC0xMzQ2LDEzICsxNTIzLDYgQEAKIAlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChtcC0+cGh5LCBjbWQpOwogfQogCi1zdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKQEAgLTEzNjcsMTIgKzE1MzcsMTAgQEAKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcobXAtPnBoeSk7Ci19CisJaWYgKG1wLT5waHkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfbndheV9yZXNldF9waHlsZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcobXAtPnBoeSk7CiB9CiAKIHN0YXRpYyB1MzIgbXY2NDN4eF9ldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEzODAsNiArMTU0OCw4NiBAQAogCXJldHVybiAhIW5ldGlmX2NhcnJpZXJfb2soZGV2KTsKIH0KIAorc3RhdGljIGludAorbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gZ2V0X3J4X2NvYWwobXApOworCWVjLT50eF9jb2FsZXNjZV91c2VjcyA9IGdldF90eF9jb2FsKG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittdjY0M3h4X2V0aF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzZXRfcnhfY29hbChtcCwgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKKwlzZXRfdHhfY29hbChtcCwgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXY2NDN4eF9ldGhfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwllci0+cnhfbWF4X3BlbmRpbmcgPSA0MDk2OworCWVyLT50eF9tYXhfcGVuZGluZyA9IDQwOTY7CisJZXItPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCWVyLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisKKwllci0+cnhfcGVuZGluZyA9IG1wLT5yeF9yaW5nX3NpemU7CisJZXItPnR4X3BlbmRpbmcgPSBtcC0+dHhfcmluZ19zaXplOworCWVyLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCWVyLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKK30KKworc3RhdGljIGludAorbXY2NDN4eF9ldGhfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoZXItPnJ4X21pbmlfcGVuZGluZyB8fCBlci0+cnhfanVtYm9fcGVuZGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltcC0+cnhfcmluZ19zaXplID0gZXItPnJ4X3BlbmRpbmcgPCA0MDk2ID8gZXItPnJ4X3BlbmRpbmcgOiA0MDk2OworCW1wLT50eF9yaW5nX3NpemUgPSBlci0+dHhfcGVuZGluZyA8IDQwOTYgPyBlci0+dHhfcGVuZGluZyA6IDQwOTY7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW12NjQzeHhfZXRoX3N0b3AoZGV2KTsKKwkJaWYgKG12NjQzeHhfZXRoX29wZW4oZGV2KSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LAorCQkJCSAgICJmYXRhbCBlcnJvciBvbiByZS1vcGVuaW5nIGRldmljZSBhZnRlciAiCisJCQkJICAgInJpbmcgcGFyYW0gY2hhbmdlXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIKK212NjQzeHhfZXRoX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAhIShyZGxwKG1wLCBQT1JUX0NPTkZJRykgJiAweDAyMDAwMDAwKTsKK30KKworc3RhdGljIGludAorbXY2NDN4eF9ldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X2NzdW0pCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdybHAobXAsIFBPUlRfQ09ORklHLCByeF9jc3VtID8gMHgwMjAwMDAwMCA6IDB4MDAwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIHVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSkKIHsKQEAgLTE0MDMsNiArMTY1MSw3IEBACiAKIAltdjY0M3h4X2V0aF9nZXRfc3RhdHMoZGV2KTsKIAltaWJfY291bnRlcnNfdXBkYXRlKG1wKTsKKwltdjY0M3h4X2V0aF9ncmFiX2xyb19zdGF0cyhtcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdjY0M3h4X2V0aF9zdGF0cyk7IGkrKykgewogCQljb25zdCBzdHJ1Y3QgbXY2NDN4eF9ldGhfc3RhdHMgKnN0YXQ7CkBAIC0xNDM0LDIxICsxNjgzLDE4IEBACiAJLmdldF9kcnZpbmZvCQk9IG12NjQzeHhfZXRoX2dldF9kcnZpbmZvLAogCS5ud2F5X3Jlc2V0CQk9IG12NjQzeHhfZXRoX253YXlfcmVzZXQsCiAJLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAorCS5nZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfc2V0X2NvYWxlc2NlLAorCS5nZXRfcmluZ3BhcmFtCQk9IG12NjQzeHhfZXRoX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0JCT0gbXY2NDN4eF9ldGhfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3J4X2NzdW0JCT0gbXY2NDN4eF9ldGhfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IG12NjQzeHhfZXRoX3NldF9yeF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtLAogCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3NzZXRfY291bnQJCT0gbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRoX2V0aHRvb2xfb3BzX3BoeWxlc3MgPSB7Ci0JLmdldF9zZXR0aW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcywKLQkuc2V0X3NldHRpbmdzCQk9IG12NjQzeHhfZXRoX3NldF9zZXR0aW5nc19waHlsZXNzLAotCS5nZXRfZHJ2aW5mbwkJPSBtdjY0M3h4X2V0aF9nZXRfZHJ2aW5mbywKLQkubndheV9yZXNldAkJPSBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0X3BoeWxlc3MsCi0JLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKLQkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IG12NjQzeHhfZXRoX2dldF9zc2V0X2NvdW50LAogfTsKIApAQCAtMTYzNyw3ICsxODgzLDcgQEAKIAogCXJ4cS0+aW5kZXggPSBpbmRleDsKIAotCXJ4cS0+cnhfcmluZ19zaXplID0gbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplOworCXJ4cS0+cnhfcmluZ19zaXplID0gbXAtPnJ4X3Jpbmdfc2l6ZTsKIAogCXJ4cS0+cnhfZGVzY19jb3VudCA9IDA7CiAJcnhxLT5yeF9jdXJyX2Rlc2MgPSAwOwpAQCAtMTY4Myw2ICsxOTI5LDE5IEBACiAJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKTsKIAl9CiAKKwlyeHEtPmxyb19tZ3IuZGV2ID0gbXAtPmRldjsKKwltZW1zZXQoJnJ4cS0+bHJvX21nci5zdGF0cywgMCwgc2l6ZW9mKHJ4cS0+bHJvX21nci5zdGF0cykpOworCXJ4cS0+bHJvX21nci5mZWF0dXJlcyA9IExST19GX05BUEk7CisJcnhxLT5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJ4cS0+bHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJ4cS0+bHJvX21nci5tYXhfZGVzYyA9IEFSUkFZX1NJWkUocnhxLT5scm9fYXJyKTsKKwlyeHEtPmxyb19tZ3IubWF4X2FnZ3IgPSAzMjsKKwlyeHEtPmxyb19tZ3IuZnJhZ19hbGlnbl9wYWQgPSAwOworCXJ4cS0+bHJvX21nci5scm9fYXJyID0gcnhxLT5scm9fYXJyOworCXJ4cS0+bHJvX21nci5nZXRfc2tiX2hlYWRlciA9IG12NjQzeHhfZ2V0X3NrYl9oZWFkZXI7CisKKwltZW1zZXQoJnJ4cS0+bHJvX2FyciwgMCwgc2l6ZW9mKHJ4cS0+bHJvX2FycikpOworCiAJcmV0dXJuIDA7CiAKIApAQCAtMTczNyw3ICsxOTk2LDcgQEAKIAogCXR4cS0+aW5kZXggPSBpbmRleDsKIAotCXR4cS0+dHhfcmluZ19zaXplID0gbXAtPmRlZmF1bHRfdHhfcmluZ19zaXplOworCXR4cS0+dHhfcmluZ19zaXplID0gbXAtPnR4X3Jpbmdfc2l6ZTsKIAogCXR4cS0+dHhfZGVzY19jb3VudCA9IDA7CiAJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwpAQCAtMjA2MSwzNiArMjMyMCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfcnhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGludCBkZWxheSkKLXsKLQl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwotCXUzMiB2YWw7Ci0KLQl2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7Ci0JaWYgKG1wLT5zaGFyZWQtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQpIHsKLQkJaWYgKGNvYWwgPiAweGZmZmYpCi0JCQljb2FsID0gMHhmZmZmOwotCQl2YWwgJj0gfjB4MDIzZmZmODA7Ci0JCXZhbCB8PSAoY29hbCAmIDB4ODAwMCkgPDwgMTA7Ci0JCXZhbCB8PSAoY29hbCAmIDB4N2ZmZikgPDwgNzsKLQl9IGVsc2UgewotCQlpZiAoY29hbCA+IDB4M2ZmZikKLQkJCWNvYWwgPSAweDNmZmY7Ci0JCXZhbCAmPSB+MHgwMDNmZmYwMDsKLQkJdmFsIHw9IChjb2FsICYgMHgzZmZmKSA8PCA4OwotCX0KLQl3cmxwKG1wLCBTRE1BX0NPTkZJRywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3R4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBpbnQgZGVsYXkpCi17Ci0JdW5zaWduZWQgaW50IGNvYWwgPSAoKG1wLT5zaGFyZWQtPnRfY2xrIC8gMTAwMDAwMCkgKiBkZWxheSkgLyA2NDsKLQotCWlmIChjb2FsID4gMHgzZmZmKQotCQljb2FsID0gMHgzZmZmOwotCXdybHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCwgKGNvYWwgJiAweDNmZmYpIDw8IDQpOwotfQotCiBzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9yZWNhbGNfc2tiX3NpemUoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQogewogCWludCBza2Jfc2l6ZTsKQEAgLTIxNTksMTMgKzIzODgsOCBAQAogCQl9CiAJfQogCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQogCXBvcnRfc3RhcnQobXApOwogCi0Jc2V0X3J4X2NvYWwobXAsIDApOwotCXNldF90eF9jb2FsKG1wLCAwKTsKLQogCXdybHAobXAsIElOVF9NQVNLX0VYVCwgSU5UX0VYVF9MSU5LX1BIWSB8IElOVF9FWFRfVFgpOwogCXdybHAobXAsIElOVF9NQVNLLCBJTlRfVFhfRU5EIHwgSU5UX1JYIHwgSU5UX0VYVCk7CiAKQEAgLTI1MzEsMTcgKzI3NTUsMTcgQEAKIAllbHNlCiAJCXVjX2FkZHJfZ2V0KG1wLCBkZXYtPmRldl9hZGRyKTsKIAotCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSA9IERFRkFVTFRfUlhfUVVFVUVfU0laRTsKKwltcC0+cnhfcmluZ19zaXplID0gREVGQVVMVF9SWF9RVUVVRV9TSVpFOwogCWlmIChwZC0+cnhfcXVldWVfc2l6ZSkKLQkJbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplID0gcGQtPnJ4X3F1ZXVlX3NpemU7CisJCW1wLT5yeF9yaW5nX3NpemUgPSBwZC0+cnhfcXVldWVfc2l6ZTsKIAltcC0+cnhfZGVzY19zcmFtX2FkZHIgPSBwZC0+cnhfc3JhbV9hZGRyOwogCW1wLT5yeF9kZXNjX3NyYW1fc2l6ZSA9IHBkLT5yeF9zcmFtX3NpemU7CiAKIAltcC0+cnhxX2NvdW50ID0gcGQtPnJ4X3F1ZXVlX2NvdW50ID8gOiAxOwogCi0JbXAtPmRlZmF1bHRfdHhfcmluZ19zaXplID0gREVGQVVMVF9UWF9RVUVVRV9TSVpFOworCW1wLT50eF9yaW5nX3NpemUgPSBERUZBVUxUX1RYX1FVRVVFX1NJWkU7CiAJaWYgKHBkLT50eF9xdWV1ZV9zaXplKQotCQltcC0+ZGVmYXVsdF90eF9yaW5nX3NpemUgPSBwZC0+dHhfcXVldWVfc2l6ZTsKKwkJbXAtPnR4X3Jpbmdfc2l6ZSA9IHBkLT50eF9xdWV1ZV9zaXplOwogCW1wLT50eF9kZXNjX3NyYW1fYWRkciA9IHBkLT50eF9zcmFtX2FkZHI7CiAJbXAtPnR4X2Rlc2Nfc3JhbV9zaXplID0gcGQtPnR4X3NyYW1fc2l6ZTsKIApAQCAtMjU4OCw3ICsyODEyLDcgQEAKIAogCXBoeV9yZXNldChtcCk7CiAKLQlwaHlfYXR0YWNoKG1wLT5kZXYsIHBoeS0+ZGV2LmJ1c19pZCwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOworCXBoeV9hdHRhY2gobXAtPmRldiwgZGV2X25hbWUoJnBoeS0+ZGV2KSwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOwogCiAJaWYgKHNwZWVkID09IDApIHsKIAkJcGh5LT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CkBAIC0yNjMyLDYgKzI4NTYsMjEgQEAKIAl3cmxwKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MLCBwc2NyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtdjY0M3h4X2V0aF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBtdjY0M3h4X2V0aF9vcGVuLAorCS5uZG9fc3RvcAkJPSBtdjY0M3h4X2V0aF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtdjY0M3h4X2V0aF94bWl0LAorCS5uZG9fc2V0X3J4X21vZGUJPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IG12NjQzeHhfZXRoX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG12NjQzeHhfZXRoX2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gbXY2NDN4eF9ldGhfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpwZDsKQEAgLTI2NzIsMTIgKzI5MTEsMTAgQEAKIAlpZiAocGQtPnBoeV9hZGRyICE9IE1WNjQzWFhfRVRIX1BIWV9OT05FKQogCQltcC0+cGh5ID0gcGh5X3NjYW4obXAsIHBkLT5waHlfYWRkcik7CiAKLQlpZiAobXAtPnBoeSAhPSBOVUxMKSB7CisJaWYgKG1wLT5waHkgIT0gTlVMTCkKIAkJcGh5X2luaXQobXAsIHBkLT5zcGVlZCwgcGQtPmR1cGxleCk7Ci0JCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aF9ldGh0b29sX29wcyk7Ci0JfSBlbHNlIHsKLQkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRoX2V0aHRvb2xfb3BzX3BoeWxlc3MpOwotCX0KKworCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aF9ldGh0b29sX29wcyk7CiAKIAlpbml0X3BzY3IobXAsIHBkLT5zcGVlZCwgcGQtPmR1cGxleCk7CiAKQEAgLTI3MDUsMTggKzI5NDIsOCBAQAogCUJVR19PTighcmVzKTsKIAlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CiAKLQlkZXYtPmdldF9zdGF0cyA9IG12NjQzeHhfZXRoX2dldF9zdGF0czsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG12NjQzeHhfZXRoX3htaXQ7Ci0JZGV2LT5vcGVuID0gbXY2NDN4eF9ldGhfb3BlbjsKLQlkZXYtPnN0b3AgPSBtdjY0M3h4X2V0aF9zdG9wOwotCWRldi0+c2V0X3J4X21vZGUgPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gbXY2NDN4eF9ldGhfaW9jdGw7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gbXY2NDN4eF9ldGhfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0OwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBtdjY0M3h4X2V0aF9uZXRwb2xsOwotI2VuZGlmCisJZGV2LT5uZXRkZXZfb3BzID0gJm12NjQzeHhfZXRoX25ldGRldl9vcHM7CisKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOwogCWRldi0+YmFzZV9hZGRyID0gMDsKIApAQCAtMjcyOCw2ICsyOTU1LDExIEBACiAJaWYgKG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KQogCQl3cmwobXAsIFdJTkRPV19QUk9URUNUKG1wLT5wb3J0X251bSksIG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KTsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlzZXRfcnhfY29hbChtcCwgMjUwKTsKKwlzZXRfdHhfY29hbChtcCwgMCk7CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IGU5YzEyOTYuLmFlYTlmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMTMyNCw2ICsxMzI0LDcgQEAKIAkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDA7CiAJfQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHNzIC0gJm1ncC0+c3NbMF0pOwogCiAJaWYgKG1ncC0+Y3N1bV9mbGFnKSB7CiAJCWlmICgoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHx8CkBAIC0xNTE0LDcgKzE1MTUsNyBAQAogCXdvcmtfZG9uZSA9IG15cmkxMGdlX2NsZWFuX3J4X2RvbmUoc3MsIGJ1ZGdldCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlwdXRfYmUzMihodG9ubCgzKSwgc3MtPmlycV9jbGFpbSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNTMyLDcgKzE1MzMsNyBAQAogCS8qIGFuIGludGVycnVwdCBvbiBhIG5vbi16ZXJvIHJlY2VpdmUtb25seSBzbGljZSBpcyBpbXBsaWNpdGx5CiAJICogdmFsaWQgIHNpbmNlIE1TSS1YIGlycXMgYXJlIG5vdCBzaGFyZWQgKi8KIAlpZiAoKG1ncC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPT0gMSkgJiYgKHNzICE9IG1ncC0+c3MpKSB7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZzcy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNzLT5uYXBpKTsKIAkJcmV0dXJuIChJUlFfSEFORExFRCk7CiAJfQogCkBAIC0xNTQzLDcgKzE1NDQsNyBAQAogCS8qIGxvdyBiaXQgaW5kaWNhdGVzIHJlY2VpdmVzIGFyZSBwcmVzZW50LCBzbyBzY2hlZHVsZQogCSAqIG5hcGkgcG9sbCBoYW5kbGVyICovCiAJaWYgKHN0YXRzLT52YWxpZCAmIDEpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZzcy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNzLT5uYXBpKTsKIAogCWlmICghbWdwLT5tc2lfZW5hYmxlZCAmJiAhbWdwLT5tc2l4X2VuYWJsZWQpIHsKIAkJcHV0X2JlMzIoMCwgbWdwLT5pcnFfZGVhc3NlcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKaW5kZXggY2FhNmNiYi4uNjJhMWNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaAorKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oCkBAIC05LDYgKzksNyBAQAogI2RlZmluZSBNQ1BfVFlQRV9FVEggMHg0NTU0NDgyMAkvKiAiRVRIICIgKi8KICNkZWZpbmUgTUNQX1RZUEVfTUNQMCAweDRkNDM1MDMwCS8qICJNQ1AwIiAqLwogI2RlZmluZSBNQ1BfVFlQRV9ERkxUIDB4MjAyMDIwMjAJLyogIiAgICAiICovCisjZGVmaW5lIE1DUF9UWVBFX0VUSFogMHg0NTU0NDg1YQkvKiAiRVRIWiIgKi8KIAogc3RydWN0IG1jcF9nZW5faGVhZGVyIHsKIAkvKiB0aGUgZmlyc3QgNCBmaWVsZHMgYXJlIGZpbGxlZCBhdCBjb21waWxlIHRpbWUgKi8KQEAgLTQzLDcgKzQ0LDE1IEBACiAJdW5zaWduZWQgbXNpeF90YWJsZV9hZGRyOwkvKiBzdGFydCBhZGRyZXNzIG9mIG1zaXggdGFibGUgaW4gZmlybXdhcmUgKi8KIAl1bnNpZ25lZCBic3NfYWRkcjsJLyogc3RhcnQgb2YgYnNzICovCiAJdW5zaWduZWQgZmVhdHVyZXM7CisJdW5zaWduZWQgZWVfaGRyX2FkZHI7CiAJLyogOCAqLwogfTsKIAorc3RydWN0IHptY3BfaW5mbyB7CisJdW5zaWduZWQgaW5mb19sZW47CisJdW5zaWduZWQgem1jcF9hZGRyOworCXVuc2lnbmVkIHptY3BfbGVuOworCXVuc2lnbmVkIG1jcF9lZGF0YTsKK307CisKICNlbmRpZgkJCQkvKiBfX01ZUkkxMEdFX01DUF9HRU5fSEVBREVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCA4OTllZDA2Li4wODUzNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJc3dpdGNoIChldGgtPmhfcHJvdG8pCiAJewogI2lmZGVmIENPTkZJR19JTkVUCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKICAJCXJldHVybiBhcnBfZmluZChldGgtPmhfZGVzdCwgc2tiKTsKICNlbmRpZgogCkBAIC04OTYsNiArODk2LDE3IEBACiAJLmNhY2hlX3VwZGF0ZQk9IG15cmlfaGVhZGVyX2NhY2hlX3VwZGF0ZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXlyaV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG15cmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gbXlyaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXlyaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbXlyaV9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBteXJpX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG15cmlfc2J1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOwpAQCAtMTA0OCwxMyArMTA1OSw5IEBACiAJc2J1c193cml0ZWwoKDEgPDwgaSksIG1wLT5jcmVncyArIE1ZUklDVFJMX0lSUUxWTCk7CiAKIAltcC0+ZGV2ID0gZGV2OwotCWRldi0+b3BlbiA9ICZteXJpX29wZW47Ci0JZGV2LT5zdG9wID0gJm15cmlfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXlyaV9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZteXJpX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbXlyaV9zZXRfbXVsdGljYXN0OwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5uZXRkZXZfb3BzID0gJm15cmlfb3BzOwogCiAJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgbm93LiAqLwogCURFVCgoIlJlcXVlc3RpbmcgTVlSSWNvbSBJUlEgbGluZS5cbiIpKTsKQEAgLTEwNjUsNyArMTA3Miw2IEBACiAJfQogCiAJZGV2LT5tdHUJCT0gTVlSSU5FVF9NVFU7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dTsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJm15cmlfaGVhZGVyX29wczsKIAogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gKEVUSF9ITEVOICsgTVlSSV9QQURfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBjNWRlYzU0Li5jOWJmZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKICNkZWZpbmUgTkFUU0VNSV9SWF9MSU1JVAkyMDQ2CS8qIG1heGltdW0gc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICovCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICBLRVJOX0lORk8gRFJWX05BTUUgIiBkcDgzODF4IGRyaXZlciwgdmVyc2lvbiAiCiAgICAgICBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICJcbiIKICAgS0VSTl9JTkZPICIgIG9yaWdpbmFsbHkgYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKQEAgLTIxOTgsMTAgKzIxOTgsMTAgQEAKIAogCXByZWZldGNoKCZucC0+cnhfc2tidWZmW25wLT5jdXJfcnggJSBSWF9SSU5HX1NJWkVdKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpIHsKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWdpc3RlciBmb3IgcG9sbCAqLwogCQluYXRzZW1pX2lycV9kaXNhYmxlKGRldik7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkgICAgICAgCSAgICAgICAiJXM6IElnbm9yaW5nIGludGVycnVwdCwgc3RhdHVzICUjMDh4LCBtYXNrICUjMDh4LlxuIiwKQEAgLTIyNTMsNyArMjI1Myw3IEBACiAJCW5wLT5pbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCX0gd2hpbGUgKG5wLT5pbnRyX3N0YXR1cyk7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyBwcm92aWRpbmcgbm90aGluZyBpcyB0cnlpbmcgdG8gc2h1dAogCSAqIHRoZSBjaGlwIGRvd24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBmMDkwZDNiLi5lYjY2ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTYyLDggKzYyLDkgQEAKICNpbmNsdWRlICI4MzkwLmgiCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIEQuIEJlY2tlci9QLiBHb3J0bWFrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKICNkZWZpbmUgaW5sX2xlKGFkZHIpICBsZTMyX3RvX2NwdShpbmwoYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTMyMTAuYyBiL2RyaXZlcnMvbmV0L25lMzIxMC5jCmluZGV4IGZhYzQzZmQuLjZhODQzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMzIxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lMzIxMC5jCkBAIC0xNTAsNyArMTUwLDggQEAKIAkJaWYgKHBoeXNfbWVtIDwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSkgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAibmUzMjEwLmM6IENhcmQgUkFNIG92ZXJsYXBzIHdpdGggbm9ybWFsIG1lbW9yeSEhIVxuIik7CiAJCQlwcmludGsoS0VSTl9DUklUICJuZTMyMTAuYzogVXNlIEVJU0EgU0NVIHRvIHNldCBjYXJkIG1lbW9yeSBiZWxvdyAxTUIsXG4iKTsKLQkJCXByaW50ayhLRVJOX0NSSVQgIm5lMzIxMC5jOiBvciB0byBhbiBhZGRyZXNzIGFib3ZlIDB4JWx4LlxuIiwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7CisJCQlwcmludGsoS0VSTl9DUklUICJuZTMyMTAuYzogb3IgdG8gYW4gYWRkcmVzcyBhYm92ZSAweCVsbHguXG4iLAorCQkJCSh1NjQpdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7CiAJCQlwcmludGsoS0VSTl9DUklUICJuZTMyMTAuYzogRHJpdmVyIE5PVCBpbnN0YWxsZWQuXG4iKTsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKaW5kZXggOGU3YzRjOS4uY2YwMWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDExICsyMSwxMCBAQAogIyAKICMgQ29udGFjdCBJbmZvcm1hdGlvbjoKICMgICAgaW5mb0BuZXR4ZW4uY29tCi0jIE5ldFhlbiwKLSMgMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotIyBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyMgTmV0WGVuIEluYywKKyMgMTg5MjIgRm9yZ2UgRHJpdmUKKyMgQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAjCi0jIE1ha2VmaWxlIGZvciB0aGUgTmV0WGVuIE5JQyBEcml2ZXIKICMKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCAxZmYwNjZiLi5jNDA4MTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9ORVRYRU5fTklDX0hfCkBAIC02NSw4ICs2Niw4IEBACiAKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IgNAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMTEKLSNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMTEiCisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMzAKKyNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMzAiCiAKICNkZWZpbmUgTkVUWEVOX1ZFUlNJT05fQ09ERShhLCBiLCBjKQkoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQogCkBAIC03NywxOSArNzgsMTkgQEAKIAogI2RlZmluZSBQSEFOX1ZFTkRPUl9JRCAweDQwNDAKIAotI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykqIGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KQotI2RlZmluZSBMUk9fREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihyY3ZEZXNjX3QpICogYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50KQotI2RlZmluZSBUWF9SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFJDVl9CVUZGU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpCisjZGVmaW5lIFJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogKHJkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bnVtX2Rlc2MpCisjZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3Qgc3RhdHVzX2Rlc2MpICogKHNkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyKSAqIGFkYXB0ZXItPm51bV90eGQpCisjZGVmaW5lIFRYX0RFU0NfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqIGFkYXB0ZXItPm51bV90eGQpCisKICNkZWZpbmUgZmluZF9kaWZmX2Ftb25nKGEsYixyYW5nZSkgKChhKTwoYik/KChiKS0oYSkpOigoYikrKHJhbmdlKS0oYSkpKQogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfU1RBVFVTCQkweDEKICNkZWZpbmUgTkVUWEVOX1JDVl9QUk9EVUNFUl9PRkZTRVQJMAogI2RlZmluZSBORVRYRU5fUkNWX1BFR19EQl9JRAkJMgogI2RlZmluZSBORVRYRU5fSE9TVF9EVU1NWV9ETUFfU0laRSAxMDI0CkBAIC0xODgsMjIgKzE4OSwxMiBAQAogLyogSG9zdCB3cml0ZXMgdGhlIGZvbGxvd2luZyB0byBub3RpZnkgdGhhdCBpdCBoYXMgZG9uZSB0aGUgaW5pdC1oYW5kc2hha2UgKi8KICNkZWZpbmUgUEhBTl9JTklUSUFMSVpFX0FDSwkweGYwMGYKIAotI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMwkvKiBObyBvZiBSY3YgRGVzY3JpcHRvciBjb250ZXh0cyAqLworI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMworI2RlZmluZSBOVU1fU1RTX0RFU0NfUklOR1MJNAogCi0vKiBkZXNjcmlwdG9yIHR5cGVzICovCi0jZGVmaW5lIFJDVl9ERVNDX05PUk1BTAkJMHgwMQotI2RlZmluZSBSQ1ZfREVTQ19KVU1CTwkJMHgwMgotI2RlZmluZSBSQ1ZfREVTQ19MUk8JCTB4MDQKLSNkZWZpbmUgUkNWX0RFU0NfTk9STUFMX0NUWElECTAKLSNkZWZpbmUgUkNWX0RFU0NfSlVNQk9fQ1RYSUQJMQotI2RlZmluZSBSQ1ZfREVTQ19MUk9fQ1RYSUQJMgotCi0jZGVmaW5lIFJDVl9ERVNDX1RZUEUoSUQpIFwKLQkoKElEID09IFJDVl9ERVNDX0pVTUJPX0NUWElEKQlcCi0JCT8gUkNWX0RFU0NfSlVNQk8JXAotCQk6ICgoSUQgPT0gUkNWX0RFU0NfTFJPX0NUWElEKQlcCi0JCQk/IFJDVl9ERVNDX0xSTyA6CVwKLQkJCShSQ1ZfREVTQ19OT1JNQUwpKSkKKyNkZWZpbmUgUkNWX1JJTkdfTk9STUFMCTAKKyNkZWZpbmUgUkNWX1JJTkdfSlVNQk8JMQorI2RlZmluZSBSQ1ZfUklOR19MUk8JMgogCiAjZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTQwOTYKICNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMTYzODQKQEAgLTM1NywxMCArMzQ4LDcgQEAKIAkJX19sZTY0IGFkZHJfYnVmZmVyMTsKIAl9OwogCi0JX19sZTE2IGJ1ZmZlcjFfbGVuZ3RoOwotCV9fbGUxNiBidWZmZXIyX2xlbmd0aDsKLQlfX2xlMTYgYnVmZmVyM19sZW5ndGg7Ci0JX19sZTE2IGJ1ZmZlcjRfbGVuZ3RoOworCV9fbGUxNiBidWZmZXJfbGVuZ3RoWzRdOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtMzkxLDExICszNzksOCBAQAogI2RlZmluZSBTVEFUVVNfQ0tTVU1fT0sJCSgyKQogCiAvKiBvd25lciBiaXRzIG9mIHN0YXR1c19kZXNjICovCi0jZGVmaW5lIFNUQVRVU19PV05FUl9IT1NUCSgweDEpCi0jZGVmaW5lIFNUQVRVU19PV05FUl9QSEFOVE9NCSgweDIpCi0KLSNkZWZpbmUgTkVUWEVOX1BST1RfSVAJCSgxKQotI2RlZmluZSBORVRYRU5fUFJPVF9VTktOT1dOCSgwKQorI2RlZmluZSBTVEFUVVNfT1dORVJfSE9TVAkoMHgxVUxMIDw8IDU2KQorI2RlZmluZSBTVEFUVVNfT1dORVJfUEhBTlRPTQkoMHgyVUxMIDw8IDU2KQogCiAvKiBOb3RlOiBzaXplb2Yoc3RhdHVzX2Rlc2MpIHNob3VsZCBhbHdheXMgYmUgYSBtdXRsaXBsZSBvZiAyICovCiAKQEAgLTQyMSwxNSArNDA2LDYgQEAKICNkZWZpbmUgbmV0eGVuX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhKQlcCiAJKCgoc3RzX2RhdGEpID4+IDU4KSAmIDB4MDNGKQogCi0jZGVmaW5lIG5ldHhlbl9nZXRfc3RzX293bmVyKHN0YXR1c19kZXNjKQlcCi0JKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA1NikgJiAweDAzKQotI2RlZmluZSBuZXR4ZW5fc2V0X3N0c19vd25lcihzdGF0dXNfZGVzYywgdmFsKQl7IFwKLQkoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhID0gXAotCQkoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSAmIFwKLQkJfmNwdV90b19sZTY0KDB4M1VMTCA8PCA1NikpIHwgXAotCQljcHVfdG9fbGU2NCgodTY0KSgodmFsKSAmIDB4MykgPDwgNTYpOyBcCi19Ci0KIHN0cnVjdCBzdGF0dXNfZGVzYyB7CiAJLyogQml0IHBhdHRlcm46IDAtMyBwb3J0LCA0LTcgc3RhdHVzLCA4LTExIHR5cGUsIDEyLTI3IHRvdGFsX2xlbmd0aAogCSAgIDI4LTQzIHJlZmVyZW5jZV9oYW5kbGUsIDQ0LTQ3IHByb3RvY29sLCA0OC01MiBwa3Rfb2Zmc2V0CkBAIC03MTIsNiArNjg4LDE1IEBACiAJTkVUWEVOX0ZJWEVEX1NUQVJUID0gMHgzRjAwMDAJLyogYmFja3VwIG9mIGNyYmluaXQgKi8KIH0gbmV0eGVuX2ZsYXNoX21hcF90OwogCisjZGVmaW5lIE5YX0ZXX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDQwOCkKKyNkZWZpbmUgTlhfRldfU0laRV9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4NDBjKQorI2RlZmluZSBOWF9CSU9TX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDgzYykKKyNkZWZpbmUgTlhfRldfTUFHSUNfT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKzB4MTI4KQorI2RlZmluZSBOWF9GV19NSU5fU0laRQkJKDB4M2ZmZmZmKQorI2RlZmluZSBOWF9QMl9NTl9ST01JTUFHRQkwCisjZGVmaW5lIE5YX1AzX0NUX1JPTUlNQUdFCTEKKyNkZWZpbmUgTlhfUDNfTU5fUk9NSU1BR0UJMgorCiAjZGVmaW5lIE5FVFhFTl9VU0VSX1NUQVJUX09MRCBORVRYRU5fUFhFX1NUQVJUCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKICNkZWZpbmUgTkVUWEVOX0ZMQVNIX1NUQVJUCQkoTkVUWEVOX0NSQklOSVRfU1RBUlQpCkBAIC03MzksNyArNzI0LDcgQEAKICNlbmRpZgogCiAvKiBOdW1iZXIgb2Ygc3RhdHVzIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBwZXIgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSgxMjgpCisjZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSg2NCkKIAogLyoKICAqIG5ldHhlbl9za2JfZnJhZ3t9IGlzIHRvIGNvbnRhaW4gbWFwcGluZyBpbmZvIGZvciBlYWNoIFNHIGxpc3QuIFRoaXMKQEAgLTc4Myw5ICs3NjgsNiBAQAogCXU2NCBkbWE7CiAJdTE2IHJlZl9oYW5kbGU7CiAJdTE2IHN0YXRlOwotCXUzMiBscm9fZXhwZWN0ZWRfZnJhZ3M7Ci0JdTMyIGxyb19jdXJyZW50X2ZyYWdzOwotCXUzMiBscm9fbGVuZ3RoOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTgwMCwyMSArNzgyLDE5IEBACiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTA7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTE7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTI7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlX2dyb3VwX2VuZDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQ7CiAJdm9pZCBfX2lvbWVtICpkYl9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZGJfbGVuOwogCXVuc2lnbmVkIGxvbmcgcGNpX2xlbjA7CiAKLQl1OCBjdXRfdGhyb3VnaDsKIAlpbnQgcWRyX3NuX3dpbmRvdzsKIAlpbnQgZGRyX21uX3dpbmRvdzsKIAl1bnNpZ25lZCBsb25nIG1uX3dpbl9jcmI7CiAJdW5zaWduZWQgbG9uZyBtc193aW5fY3JiOwogCisJdTggY3V0X3Rocm91Z2g7CiAJdTggcmV2aXNpb25faWQ7Ci0JdTE2IGJvYXJkX3R5cGU7Ci0Jc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvIGJvYXJkY2ZnOworCXUxNiBwb3J0X3R5cGU7CisJaW50IGJvYXJkX3R5cGU7CiAJdTMyIGxpbmt1cDsKIAkvKiBBZGRyZXNzIG9mIGNtZCByaW5nIGluIFBoYW50b20gKi8KIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmNtZF9kZXNjX2hlYWQ7CkBAIC04MjMsOCArODAzLDYgQEAKIAlpbnQgcGNpX2Z1bmM7CiB9OwogCi0jZGVmaW5lIFJDVl9SSU5HX0xSTwlSQ1ZfREVTQ19MUk8KLQogI2RlZmluZSBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUJNjQJLyogV2l0aCBGQ1MgKi8KICNkZWZpbmUgRVRIRVJORVRfRkNTX1NJWkUJCTQKIApAQCAtODUwLDE2ICs4MjgsMzYgQEAKICAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCiAgKi8KIHN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHsKLQl1MzIgZmxhZ3M7CiAJdTMyIHByb2R1Y2VyOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOwkvKiByZWcgb2Zmc2V0ICovCi0Jc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CS8qIGFkZHJlc3Mgb2YgcnggcmluZyBpbiBQaGFudG9tICovCi0JdTMyIG1heF9yeF9kZXNjX2NvdW50OworCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOworCXUzMiBudW1fZGVzYzsKIAl1MzIgZG1hX3NpemU7CiAJdTMyIHNrYl9zaXplOwotCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwkvKiByeCBidWZmZXJzIGZvciByZWNlaXZlICAgKi8KKwl1MzIgZmxhZ3M7CisJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworfTsKKworc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgeworCXUzMiBjb25zdW1lcjsKKwl1MzIgY3JiX3N0c19jb25zdW1lcjsKKwl1MzIgY3JiX2ludHJfbWFzazsKKwl1MzIgbnVtX2Rlc2M7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3RbTlVNX1JDVl9ERVNDX1JJTkdTXTsKKworCXUxNiBjbGVhbl90eDsKKwl1MTYgcG9zdF9yeGQ7CisJaW50IGlycTsKKworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWNoYXIgbmFtZVtJRk5BTVNJWis0XTsKIH07CiAKIC8qCkBAIC04NzQsMTAgKzg3Miw3IEBACiAJdTE2IHZpcnRfcG9ydDsKIAogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHJkc19yaW5nc1tOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBzdGF0dXNfcnhfY29uc3VtZXI7Ci0JdTMyIGNyYl9zdHNfY29uc3VtZXI7CS8qIHJlZyBvZmZzZXQgKi8KLQlkbWFfYWRkcl90IHJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHI7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpyY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyBzZHNfcmluZ3NbTlVNX1NUU19ERVNDX1JJTkdTXTsKIH07CiAKIC8qIE5ldyBIVyBjb250ZXh0IGNyZWF0aW9uICovCkBAIC0xMjAzLDEzICsxMTk4LDEzIEBACiAjZGVmaW5lIE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpIFwKIAkoKGFkYXB0ZXIpLT5mbGFncyAmIChORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpKQogCi0jZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUgkxCisjZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKICNkZWZpbmUgTkVUWEVOX01TSVhfVEJMX1NQQUNFCQk4MTkyCiAjZGVmaW5lIE5FVFhFTl9QQ0lfUkVHX01TSVhfVEJMCQkweDQ0CiAKICNkZWZpbmUgTkVUWEVOX0RCX01BUFNJWkVfQllURVMgICAgCTB4MTAwMAogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfV0VJR0hUIDEyMAorI2RlZmluZSBORVRYRU5fTkVUREVWX1dFSUdIVCAxMjgKICNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CiAjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCkBAIC0xMjI0LDcgKzEyMTksNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IHBjaV91c2luZ19kYWM7Ci0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwogCWludCBtdHU7CiAJaW50IHBvcnRudW07CkBAIC0xMjM2LDcgKzEyMzAsNiBAQAogCW54X21hY19saXN0X3QJKm1hY19saXN0OwogCiAJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHI7Ci0JdTMyCWNyYl9pbnRyX21hc2s7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKQEAgLTEyNDYsMjAgKzEyMzksMjAgQEAKIAl1MzIgY3JiX3dpbjsKIAlyd2xvY2tfdCBhZGFwdGVyX2xvY2s7CiAKLQl1aW50NjRfdCBkbWFfbWFzazsKLQogCXUzMiBjbWRfcHJvZHVjZXI7CiAJX19sZTMyICpjbWRfY29uc3VtZXI7CiAJdTMyIGxhc3RfY21kX2NvbnN1bWVyOwogCXUzMiBjcmJfYWRkcl9jbWRfcHJvZHVjZXI7CiAJdTMyIGNyYl9hZGRyX2NtZF9jb25zdW1lcjsKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CiAKLQl1MzIgbWF4X3R4X2Rlc2NfY291bnQ7Ci0JdTMyIG1heF9yeF9kZXNjX2NvdW50OwotCXUzMiBtYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQl1MzIgbWF4X2xyb19yeF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkOworCXUzMiBudW1fcnhkOworCXUzMiBudW1fanVtYm9fcnhkOworCXUzMiBudW1fbHJvX3J4ZDsKIAogCWludCBtYXhfcmRzX3JpbmdzOworCWludCBtYXhfc2RzX3JpbmdzOwogCiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CkBAIC0xMjY3LDkgKzEyNjAsOSBAQAogCXUzMiB0ZW1wOwogCiAJdTMyIGZ3X21ham9yOworCXUzMiBmd192ZXJzaW9uOwogCi0JdTggbXNpeF9zdXBwb3J0ZWQ7Ci0JdTggbWF4X3Bvc3NpYmxlX3Jzc19yaW5nczsKKwlpbnQgbXNpeF9zdXBwb3J0ZWQ7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW01TSVhfRU5UUklFU19QRVJfQURBUFRFUl07CiAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CkBAIC0xMjc5LDcgKzEyNzIsNiBAQAogCXUxNiBzdGF0ZTsKIAl1MTYgbGlua19hdXRvbmVnOwogCWludCByeF9jc3VtOwotCWludCBzdGF0dXM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwkvKiBDb21tYW5kIGJ1ZmZlcnMgZm9yIHhtaXQgKi8KIApAQCAtMTI4Nyw3ICsxMjc5LDcgQEAKIAkgKiBSZWNlaXZlIGluc3RhbmNlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvbmUgcGVyIHBvcnQsCiAJICogb3Igb25lIHBlciBwZWcsIGV0Yy4KIAkgKi8KLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eFtNQVhfUkNWX0NUWF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgcmVjdl9jdHg7CiAKIAlpbnQgaXNfdXA7CiAJc3RydWN0IG5ldHhlbl9kdW1teV9kbWEgZHVtbXlfZG1hOwpAQCAtMTM5OCw2ICsxMzkwLDggQEAKIHZvaWQgbmV0eGVuX25pY19yZWFkX3cxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKTsKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBpbnQgbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOwpAQCAtMTQ3MSwxNSArMTQ2NSwxNiBAQAogaW50IG5ldHhlbl9pbml0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjdHgsCi0JCQkgICAgdTMyIHJpbmdpZCk7Cit2b2lkIG5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogaW50IG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci11MzIgbmV0eGVuX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY3R4LCBpbnQgbWF4KTsKK2ludCBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwogdm9pZCBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmV0eGVuX3AzX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5ldHhlbl9wM19mcmVlX21hY19saXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX3AzX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMik7CiBpbnQgbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKIAogaW50IG54X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSk7CiBpbnQgbmV0eGVuX25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKaW5kZXggNzQ2YmRiNC4uOTIzNDQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOCBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogbnhfZndfY21kX3NldF9tdHUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KQogewogCXUzMiByY29kZSA9IE5YX1JDT0RFX1NVQ0NFU1M7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4WzBdOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChyZWN2X2N0eC0+c3RhdGUgPT0gTlhfSE9TVF9DVFhfU1RBVEVfQUNUSVZFKQogCQlyY29kZSA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKQEAgLTE2OSw2ICsxNjksNyBAQAogCW54X2NhcmRyc3BfcmRzX3JpbmdfdCAqcHJzcF9yZHM7CiAJbnhfY2FyZHJzcF9zZHNfcmluZ190ICpwcnNwX3NkczsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwogCiAJZG1hX2FkZHJfdCBob3N0cnFfcGh5c19hZGRyLCBjYXJkcnNwX3BoeXNfYWRkcjsKIAl1NjQgcGh5c19hZGRyOwpAQCAtMTc5LDExICsxODAsMTAgQEAKIAogCWludCBlcnI7CiAKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbMF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JLyogb25seSBvbmUgc2RzIHJpbmcgZm9yIG5vdyAqLwogCW5yZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOwotCW5zZHNfcmluZ3MgPSAxOworCW5zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOwogCiAJcnFfc2l6ZSA9CiAJCVNJWkVPRl9IT1NUUlFfUlgobnhfaG9zdHJxX3J4X2N0eF90LCBucmRzX3JpbmdzLCBuc2RzX3JpbmdzKTsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW2ldOwogCiAJCXBycV9yZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJcHJxX3Jkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcnFfcmRzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5udW1fZGVzYyk7CiAJCXBycV9yZHNbaV0ucmluZ19raW5kID0gY3B1X3RvX2xlMzIoaSk7CiAJCXBycV9yZHNbaV0uYnVmZl9zaXplID0gY3B1X3RvX2xlNjQocmRzX3JpbmctPmRtYV9zaXplKTsKIAl9CkBAIC0yMzksMTEgKzIzOSwxNCBAQAogCXBycV9zZHMgPSAobnhfaG9zdHJxX3Nkc19yaW5nX3QgKikocHJxLT5kYXRhICsKIAkJCWxlMzJfdG9fY3B1KHBycS0+c2RzX3Jpbmdfb2Zmc2V0KSk7CiAKLQlwcnFfc2RzWzBdLmhvc3RfcGh5c19hZGRyID0KLQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCXBycV9zZHNbMF0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCS8qIG9ubHkgb25lIG1zaXggdmVjdG9yIGZvciBub3cgKi8KLQlwcnFfc2RzWzBdLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KDApOworCWZvciAoaSA9IDA7IGkgPCBuc2RzX3JpbmdzOyBpKyspIHsKKworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW2ldOworCisJCXBycV9zZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJcHJxX3Nkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihzZHNfcmluZy0+bnVtX2Rlc2MpOworCQlwcnFfc2RzW2ldLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KGkpOworCX0KIAogCXBoeXNfYWRkciA9IGhvc3RycV9waHlzX2FkZHI7CiAJZXJyID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLApAQCAtMjcyLDExICsyNzUsMTYgQEAKIAogCXByc3Bfc2RzID0gKChueF9jYXJkcnNwX3Nkc19yaW5nX3QgKikKIAkJCSZwcnNwLT5kYXRhW2xlMzJfdG9fY3B1KHByc3AtPnNkc19yaW5nX29mZnNldCldKTsKLQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1swXS5ob3N0X2NvbnN1bWVyX2NyYik7Ci0JcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CiAKLQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1swXS5pbnRlcnJ1cHRfY3JiKTsKLQlhZGFwdGVyLT5jcmJfaW50cl9tYXNrID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwcnNwLT5udW1fc2RzX3JpbmdzKTsgaSsrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbaV07CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbaV0uaG9zdF9jb25zdW1lcl9jcmIpOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKworCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5pbnRlcnJ1cHRfY3JiKTsKKwkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJfQogCiAJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwogCXJlY3ZfY3R4LT5jb250ZXh0X2lkID0gbGUxNl90b19jcHUocHJzcC0+Y29udGV4dF9pZCk7CkBAIC0yOTIsNyArMzAwLDcgQEAKIHN0YXRpYyB2b2lkCiBueF9md19jbWRfZGVzdHJveV9yeF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlpZiAobmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLAogCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLApAQCAtMzYyLDcgKzM3MCw3IEBACiAJcHJxX2Nkcy0+aG9zdF9waHlzX2FkZHIgPQogCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAotCXBycV9jZHMtPnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwlwcnFfY2RzLT5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5udW1fdHhkKTsKIAogCXBoeXNfYWRkciA9IHJxX3BoeXNfYWRkcjsKIAllcnIgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCkBAIC00ODgsMzAgKzQ5NiwyOCBAQAogewogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7Ci0JaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IHJpbmc7CiAJaW50IGZ1bmNfaWQgPSBhZGFwdGVyLT5wb3J0bnVtOwogCiAJYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX2FkZHIgPQogCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX3Jpbmdfc2l6ZSA9Ci0JCWNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJY3B1X3RvX2xlMzIoYWRhcHRlci0+bnVtX3R4ZCk7CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyID0KLQkJCQljcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQotCQkJCWNwdV90b19sZTMyKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JCX0KLQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX2FkZHIgPQotCQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCQlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3Jpbmdfc2l6ZSA9Ci0JCQljcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX2FkZHIgPQorCQkJY3B1X3RvX2xlNjQocmRzX3JpbmctPnBoeXNfYWRkcik7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQorCQkJY3B1X3RvX2xlMzIocmRzX3JpbmctPm51bV9kZXNjKTsKIAl9CisJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1swXTsKKwlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3JpbmdfYWRkciA9IGNwdV90b19sZTY0KHNkc19yaW5nLT5waHlzX2FkZHIpOworCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19zaXplID0gY3B1X3RvX2xlMzIoc2RzX3JpbmctPm51bV9kZXNjKTsKIAogCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0NUWF9BRERSX1JFR19MTyhmdW5jX2lkKSwKIAkJCWxvd2VyMzIoYWRhcHRlci0+Y3R4X2Rlc2NfcGh5c19hZGRyKSk7CkBAIC01MzMsOSArNTM5LDEzIEBACiAJdTMyIHN0YXRlID0gMDsKIAl2b2lkICphZGRyOwogCWludCBlcnIgPSAwOwotCWludCBjdHgsIHJpbmc7CisJaW50IHJpbmc7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CkBAIC01NDQsMTIgKzU1NCwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsgc2l6ZW9mKHVpbnQzMl90KSwKIAkJCSZhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewotCQlEUFJJTlRLKEVSUiwgImZhaWxlZCB0byBhbGxvY2F0ZSBodyBjb250ZXh0XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGh3IGNvbnRleHRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSk7CkBAIC01NjIsNjEgKzU3Miw1NyBAQAogCQkoX19sZTMyICopKCgoY2hhciAqKWFkZHIpICsgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKIAogCS8qIGNtZCBkZXNjIHJpbmcgKi8KLQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICoKLQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAorCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAorCQkJVFhfREVTQ19SSU5HU0laRShhZGFwdGVyKSwKIAkJCSZody0+Y21kX2Rlc2NfcGh5c19hZGRyKTsKIAogCWlmIChhZGRyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2MgcmluZ1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlody0+Y21kX2Rlc2NfaGVhZCA9IChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKilhZGRyOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQkvKiByeCBkZXNjIHJpbmcgKi8KLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107Ci0JCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkJUkNWX0RFU0NfUklOR1NJWkUsCi0JCQkJCSZyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSByeCAiCi0JCQkJCSJkZXNjIHJpbmdbJWRdXG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCByaW5nKTsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyX291dF9mcmVlOwotCQkJfQotCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3QgcmN2X2Rlc2MgKilhZGRyOwotCi0JCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0KLQkJCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW2FkYXB0ZXItPnBvcnRudW1dLgotCQkJCQljcmJfcmN2X3Byb2R1Y2VyW3JpbmddOwotCQl9Ci0KLQkJLyogc3RhdHVzIGRlc2MgcmluZyAqLworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUsCi0JCQkJJnJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSBzdHMgZGVzYyByaW5nXG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBbJWRdXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X2ZyZWU7CiAJCX0KLQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CisJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKIAogCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIgPQorCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIgPQogCQkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KLQkJCQljcmJfc3RzX2NvbnN1bWVyOworCQkJCWNyYl9yY3ZfcHJvZHVjZXJbcmluZ107CiAJfQogCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCisJCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKKwkJCQkmc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCWlmIChhZGRyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBzZHMgcmluZyBbJWRdXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKilhZGRyOworCX0KKworCiAJaWYgKGFkYXB0ZXItPmZ3X21ham9yID49IDQpIHsKIAkJYWRhcHRlci0+aW50cl9zY2hlbWUgPSBJTlRSX1NDSEVNRV9QRVJQT1JUOwogCQlhZGFwdGVyLT5tc2lfbW9kZSA9IE1TSV9NT0RFX01VTFRJRlVOQzsKQEAgLTYyOCwxMiArNjM0LDE2IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9IGVsc2UgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzWzBdOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9CisJCQlyZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uY3JiX3N0c19jb25zdW1lcjsKIAogCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAogCQkJCUNSQl9OSUNfQ0FQQUJJTElUSUVTX0ZXKTsKIAkJYWRhcHRlci0+bXNpX21vZGUgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKIAkJCQlDUkJfTklDX01TSV9NT0RFX0ZXKTsKLQkJYWRhcHRlci0+Y3JiX2ludHJfbWFzayA9IHN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOworCQlyZWN2X2N0eC0+c2RzX3JpbmdzWzBdLmNyYl9pbnRyX21hc2sgPQorCQkJCXN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOwogCiAJCWVyciA9IG5ldHhlbl9pbml0X29sZF9jdHgoYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKQEAgLTY1NCw3ICs2NjQsOCBAQAogewogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7Ci0JaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IHJpbmc7CiAKIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgewogCQlueF9md19jbWRfZGVzdHJveV90eF9jdHgoYWRhcHRlcik7CkBAIC02NzMsMzIgKzY4NCwzNCBAQAogCWlmIChhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCAhPSBOVUxMKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQlzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqCi0JCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQsCisJCQkJYWRhcHRlci0+bnVtX3R4ZCwKIAkJCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCwKIAkJCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAkJYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgPSBOVUxMOwogCX0KIAotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eF07Ci0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7Ci0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQkJUkNWX0RFU0NfUklOR1NJWkUsCi0JCQkJCQlyZHNfcmluZy0+ZGVzY19oZWFkLAotCQkJCQkJcmRzX3JpbmctPnBoeXNfYWRkcik7Ci0JCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJaWYgKHJkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQlTVEFUVVNfREVTQ19SSU5HU0laRSwKLQkJCQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkLAotCQkJCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7Ci0JCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSBOVUxMOworCQkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQsCisJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOworCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CisJCX0KKwl9CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisKKwkJaWYgKHNkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKKwkJCQlzZHNfcmluZy0+ZGVzY19oZWFkLAorCQkJCXNkc19yaW5nLT5waHlzX2FkZHIpOworCQkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggMDg5NGE3Yi4uYTY3N2ZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogZXRodG9vbCBzdXBwb3J0IGZvciBuZXR4ZW4gbmljCisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC0xMTgsMTAgKzExNSw5IEBACiBuZXR4ZW5fbmljX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbyA9ICZhZGFwdGVyLT5haHcuYm9hcmRjZmc7CiAKIAkvKiByZWFkIHdoaWNoIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfApAQCAtMTQwLDcgKzEzNiw3IEBACiAJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCi0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCXUzMiB2YWw7CiAKIAkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fUE9SVF9NT0RFX0FERFIsICZ2YWwsIDQpOwpAQCAtMTcyLDcgKzE2OCw3IEBACiAJZWNtZC0+cGh5X2FkZHJlc3MgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEc6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzJHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgpAQCAtMTg4LDcgKzE4NCw3IEBACiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CiAJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFA7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwotCQllY21kLT5hdXRvbmVnID0gKGJvYXJkaW5mby0+Ym9hcmRfdHlwZSA9PQorCQllY21kLT5hdXRvbmVnID0gKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09CiAJCQkJIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNCkgPwogCQkgICAgKEFVVE9ORUdfRElTQUJMRSkgOiAoYWRhcHRlci0+bGlua19hdXRvbmVnKTsKIAkJYnJlYWs7CkBAIC0yMTUsNyArMjExLDcgQEAKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAkJYnJlYWs7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfRklCUkUgfCBTVVBQT1JURURfVFApOwogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KQEAgLTIzMSw3ICsyMjcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIm5ldHhlbi1uaWM6IFVuc3VwcG9ydGVkIGJvYXJkIG1vZGVsICVkXG4iLAotCQkgICAgICAgKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSk7CisJCSAgICAgICAobmV0eGVuX2JyZHR5cGVfdClhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ1LDcgKzI0MSw3IEBACiAJX191MzIgc3RhdHVzOwogCiAJLyogcmVhZCB3aGljaCBtb2RlICovCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJLyogYXV0b25lZ290aWF0aW9uICovCiAJCWlmIChhZGFwdGVyLT5waHlfd3JpdGUKIAkJICAgICYmIGFkYXB0ZXItPnBoeV93cml0ZShhZGFwdGVyLApAQCAtNDMzLDcgKzQyOSw3IEBACiAJaW50IHZhbDsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWlmIChhZGFwdGVyLT5waHlfcmVhZAogCQkgICAgJiYgYWRhcHRlci0+cGh5X3JlYWQoYWRhcHRlciwKIAkJCQkJIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLApAQCAtNDQzLDcgKzQzOSw3IEBACiAJCQl2YWwgPSBuZXR4ZW5fZ2V0X3BoeV9saW5rKHN0YXR1cyk7CiAJCQlyZXR1cm4gIXZhbDsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQl2YWwgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKTsKIAkJcmV0dXJuICh2YWwgPT0gWEdfTElOS19VUCkgPyAwIDogMTsKIAl9CkBAIC00NzMsOTUgKzQ2OSwyMCBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotc3RhdGljIGludAotbmV0eGVuX25pY19zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAotCQkJdTggKiBieXRlcykKLXsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBvZmZzZXQgPSBlZXByb20tPm9mZnNldDsKLQlzdGF0aWMgaW50IGZsYXNoX3N0YXJ0OwotCXN0YXRpYyBpbnQgcmVhZHlfdG9fZmxhc2g7Ci0JaW50IHJldDsKLQotCWlmIChmbGFzaF9zdGFydCA9PSAwKSB7Ci0JCW5ldHhlbl9oYWx0X3BlZ3MoYWRhcHRlcik7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF91bmxvY2soYWRhcHRlcik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCB1bmxvY2sgZmFpbGVkLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZsYXNoIHVubG9ja2VkLiBcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY29uZGFyeShhZGFwdGVyKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCBlcmFzZSBmYWlsZWQuXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogc2Vjb25kYXJ5IGZsYXNoIGVyYXNlZCBzdWNjZXNzZnVsbHkuXG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWZsYXNoX3N0YXJ0ID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKG9mZnNldCA9PSBORVRYRU5fQk9PVExEX1NUQVJUKSB7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9wcmltYXJ5KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZsYXNoIGVyYXNlIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBORVRYRU5fVVNFUl9TVEFSVCk7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykKLQkJCXJldHVybiByZXQ7Ci0JCXJldCA9IG5ldHhlbl9yb21fc2UoYWRhcHRlciwgTkVUWEVOX0ZJWEVEX1NUQVJUKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJcmV0dXJuIHJldDsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogcHJpbWFyeSBmbGFzaCBlcmFzZWQgc3VjY2Vzc2Z1bGx5XG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0KLQkJcmV0ID0gbmV0eGVuX2JhY2t1cF9jcmJpbml0KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENSQmluaXQgYmFja3VwIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDUkJpbml0IGJhY2t1cCBkb25lLlxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlyZWFkeV90b19mbGFzaCA9IDE7Ci0JfQotCi0JaWYgKCFyZWFkeV90b19mbGFzaCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIHdyaXRlIHNlcXVlbmNlLCByZXR1cm5pbmcuLi5cbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBvZmZzZXQsIGJ5dGVzLCBlZXByb20tPmxlbik7Ci19Ci0jZW5kaWYgLyogMCAqLwotCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwogCiAJcmluZy0+cnhfcGVuZGluZyA9IDA7CiAJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9SQ1ZfQ1RYOyArK2kpIHsKLQkJcmluZy0+cnhfcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eFtpXS4KLQkJICAgIHJkc19yaW5nc1tSQ1ZfREVTQ19OT1JNQUxfQ1RYSURdLm1heF9yeF9kZXNjX2NvdW50OwotCQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4W2ldLgotCQkgICAgcmRzX3JpbmdzW1JDVl9ERVNDX0pVTUJPX0NUWElEXS5tYXhfcnhfZGVzY19jb3VudDsKLQl9Ci0JcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OworCXJpbmctPnJ4X3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHguCisJCXJkc19yaW5nc1tSQ1ZfUklOR19OT1JNQUxdLm51bV9kZXNjOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHguCisJCXJkc19yaW5nc1tSQ1ZfUklOR19KVU1CT10ubnVtX2Rlc2M7CisJcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm51bV90eGQ7CiAKLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKIAllbHNlCiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7CkBAIC01NzksNyArNTAwLDcgQEAKIAlfX3UzMiB2YWw7CiAJaW50IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9HQkVfUE9SVFMpKQogCQkJcmV0dXJuOwogCQkvKiBnZXQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCkBAIC02MDIsNyArNTIzLDcgQEAKIAkJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKG5ldHhlbl9nYl9nZXRfZ2IzX21hc2sodmFsKSk7CiAJCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm47CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CkBAIC02MTMsNyArNTM0LDcgQEAKIAkJCXBhdXNlLT50eF9wYXVzZSA9ICEobmV0eGVuX3hnX2dldF94ZzFfbWFzayh2YWwpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIiJXM6IFVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpOworCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPmFody5wb3J0X3R5cGUpOwogCX0KIH0KIApAQCAtNjI1LDcgKzU0Niw3IEBACiAJX191MzIgdmFsOwogCWludCBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAkvKiByZWFkIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJLyogc2V0IGZsb3cgY29udHJvbCAqLwpAQCAtNjY5LDcgKzU5MCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJbmV0eGVuX25pY193cml0ZV93MChhZGFwdGVyLCBORVRYRU5fTklVX0dCX1BBVVNFX0NUTCwgdmFsKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdfUEFVU0VfQ1RMLCAmdmFsKTsKQEAgLTY4OCw3ICs2MDksNyBAQAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCiAJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CisJCQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODEwLDYgKzczMSw1MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b2xfY2ZnID0gMDsKKworCXdvbC0+c3VwcG9ydGVkID0gMDsKKwl3b2wtPndvbG9wdHMgPSAwOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybjsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHX05WKTsKKwlpZiAod29sX2NmZyAmICgxVUwgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCXdvbC0+c3VwcG9ydGVkIHw9IFdBS0VfTUFHSUM7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKK30KKworc3RhdGljIGludAorbmV0eGVuX25pY19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b2xfY2ZnID0gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHX05WKTsKKwlpZiAoISh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCXdvbF9jZmcgfD0gMVVMIDw8IGFkYXB0ZXItPnBvcnRudW07CisJZWxzZQorCQl3b2xfY2ZnICY9IH4oMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pOworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHLCB3b2xfY2ZnKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU2V0IHRoZSBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuIEN1cnJlbnRseSBvbmx5IG5vcm1hbCBpcyBzdXBwb3J0ZWQuCiAgKiBJZiByeF9jb2FsZXNjZV91c2VjcyA9PSAwIG9yIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID09IDAgdGhlbiBzZXQgdGhlCkBAIC05MDYsOSArODc0LDYgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gPSBuZXR4ZW5fbmljX2dldF9lZXByb20sCi0jaWYgMAotCS5zZXRfZWVwcm9tID0gbmV0eGVuX25pY19zZXRfZWVwcm9tLAotI2VuZGlmCiAJLmdldF9yaW5ncGFyYW0gPSBuZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX3NldF9wYXVzZXBhcmFtLApAQCAtOTE2LDYgKzg4MSw4IEBACiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfdHNvID0gbmV0eGVuX25pY19nZXRfdHNvLAogCS5zZXRfdHNvID0gbmV0eGVuX25pY19zZXRfdHNvLAorCS5nZXRfd29sID0gbmV0eGVuX25pY19nZXRfd29sLAorCS5zZXRfd29sID0gbmV0eGVuX25pY19zZXRfd29sLAogCS5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGU4MGY5ZTMuLjAxNmM2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw5ICsyMiwxMCBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKKyAqCiAgKi8KIAogI2lmbmRlZiBfX05FVFhFTl9OSUNfSERSX0hfCkBAIC0zNjIsMTIgKzM2Myw2IEBACiAjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfTFBDCVwKIAkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0xQQ19DUkJfQUdUX0FEUikKIAotLyoKLSAqIE1BWF9SQ1ZfQ1RYIDogVGhlIG51bWJlciBvZiByZWNlaXZlIGNvbnRleHRzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbgotICogdGhlIHBoYW50b20uCi0gKi8KLSNkZWZpbmUgTUFYX1JDVl9DVFgJCQkxCi0KICNkZWZpbmUgTkVUWEVOX1NSRV9JTlRfU1RBVFVTCQkoTkVUWEVOX0NSQl9TUkUgKyAweDAwMDM0KQogI2RlZmluZSBORVRYRU5fU1JFX1BCSV9BQ1RJVkVfU1RBVFVTCShORVRYRU5fQ1JCX1NSRSArIDB4MDEwMTQpCiAjZGVmaW5lIE5FVFhFTl9TUkVfTDFSRV9DVEwJCShORVRYRU5fQ1JCX1NSRSArIDB4MDMwMDApCkBAIC04NTgsNiArODUzLDEyIEBACiAjZGVmaW5lIE5FVFhFTl9QT1JUX01PREVfQUREUgkJKE5FVFhFTl9DQU1fUkFNKDB4MjQpKQogI2RlZmluZSBORVRYRU5fV09MX1BPUlRfTU9ERQkJKE5FVFhFTl9DQU1fUkFNKDB4MTk4KSkKIAorI2RlZmluZSBORVRYRU5fV09MX0NPTkZJR19OVgkJKE5FVFhFTl9DQU1fUkFNKDB4MTg0KSkKKyNkZWZpbmUgTkVUWEVOX1dPTF9DT05GSUcJCShORVRYRU5fQ0FNX1JBTSgweDE4OCkpCisKKyNkZWZpbmUgTlhfUEVHX1RVTkVfTU5fUFJFU0VOVAkJMHgxCisjZGVmaW5lIE5YX1BFR19UVU5FX0NBUEFCSUxJVFkJCShORVRYRU5fQ0FNX1JBTSgweDAyYykpCisKICNkZWZpbmUgTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwJCSgweDE0KQogCiAjZGVmaW5lCUlTUl9NU0lfSU5UX1RSSUdHRVIoRlVOQykgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX01TSV9GKEZVTkMpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCmluZGV4IDdmZWE3NzAuLjUwMjY4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU291cmNlIGZpbGUgZm9yIE5JQyByb3V0aW5lcyB0byBhY2Nlc3MgdGhlIFBoYW50b20gaGFyZHdhcmUKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTM1LDcgKzMyLDcgQEAKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCiAjaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCi0KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCiAjZGVmaW5lIE1BU0sobikgKCgxVUxMPDwobikpLTEpCkBAIC01MTgsNyArNTE1LDcgQEAKIAkJCSZjbWRfZGVzY19hcnJbaV0sIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApKTsKIAogCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLAotCQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJCQlhZGFwdGVyLT5udW1fdHhkKTsKIAkJaSsrOwogCiAJfSB3aGlsZSAoaSAhPSBucl9lbGVtZW50cyk7CkBAIC02NzMsNiArNjcwLDUzIEBACiAJcmV0dXJuIHJ2OwogfQogCisjZGVmaW5lIFJTU19IQVNIVFlQRV9JUF9UQ1AJMHgzCisKK2ludCBuZXR4ZW5fY29uZmlnX3JzcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgaSwgcnY7CisKKwl1NjQga2V5W10gPSB7IDB4YmVhYzAxZmE2YTQyYjczYlVMTCwgMHg4MDMwZjIwYzc3Y2IyZGEzVUxMLAorCQkJMHhhZTdiMzBiNGQwY2EyYmNiVUxMLCAweDQzYTM4ZmIwNDE2NzI1M2RVTEwsCisJCQkweDI1NWIwZWMyNmQ1YTU2ZGFVTEwgfTsKKworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gTlhfTklDX0gyQ19PUENPREVfQ09ORklHX1JTUyB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwkvKgorCSAqIFJTUyByZXF1ZXN0OgorCSAqIGJpdHMgMy0wOiBoYXNoX21ldGhvZAorCSAqICAgICAgNS00OiBoYXNoX3R5cGVfaXB2NAorCSAqCTctNjogaGFzaF90eXBlX2lwdjYKKwkgKgkgIDg6IGVuYWJsZQorCSAqICAgICAgICA5OiB1c2UgaW5kaXJlY3Rpb24gdGFibGUKKwkgKiAgICA0Ny0xMDogcmVzZXJ2ZWQKKwkgKiAgICA2My00ODogaW5kaXJlY3Rpb24gdGFibGUgbWFzaworCSAqLworCXdvcmQgPSAgKCh1NjQpKFJTU19IQVNIVFlQRV9JUF9UQ1AgJiAweDMpIDw8IDQpIHwKKwkJKCh1NjQpKFJTU19IQVNIVFlQRV9JUF9UQ1AgJiAweDMpIDw8IDYpIHwKKwkJKCh1NjQpKGVuYWJsZSAmIDB4MSkgPDwgOCkgfAorCQkoKDB4N1VMTCkgPDwgNDgpOworCXJlcS53b3Jkc1swXSA9IGNwdV90b19sZTY0KHdvcmQpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXJlcS53b3Jkc1tpKzFdID0gY3B1X3RvX2xlNjQoa2V5W2ldKTsKKworCisJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBjb25maWd1cmUgUlNTXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJ2OworfQorCiAvKgogICogbmV0eGVuX25pY19jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKICAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQpAQCAtNzA5LDkgKzc1Myw4IEBACiBzdGF0aWMgaW50IG5ldHhlbl9nZXRfZmxhc2hfYmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYmFzZSwKIAkJCQkgIGludCBzaXplLCBfX2xlMzIgKiBidWYpCiB7Ci0JaW50IGksIGFkZHI7CisJaW50IGksIHYsIGFkZHI7CiAJX19sZTMyICpwdHIzMjsKLQl1MzIgdjsKIAogCWFkZHIgPSBiYXNlOwogCXB0cjMyID0gYnVmOwpAQCAtOTE0LDEzICs5NTcsMTIgQEAKIAl1MzIgd2luX3JlYWQ7CiAKIAlhZGFwdGVyLT5jcmJfd2luID0gQ1JCX0hJKCpvZmYpOwotCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAodm9pZCAqKShDUkJfV0lORE9XXzJNICsKLQkJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCkpOworCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9XSU5ET1dfMk0pKTsKIAkvKgogCSAqIFJlYWQgYmFjayB2YWx1ZSB0byBtYWtlIHN1cmUgd3JpdGUgaGFzIGdvbmUgdGhyb3VnaCBiZWZvcmUgdHJ5aW5nCiAJICogdG8gdXNlIGl0LgogCSAqLwotCXdpbl9yZWFkID0gcmVhZGwoKHZvaWQgKikoQ1JCX1dJTkRPV18yTSArIGFkYXB0ZXItPmFody5wY2lfYmFzZTApKTsKKwl3aW5fcmVhZCA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNKTsKIAlpZiAod2luX3JlYWQgIT0gYWRhcHRlci0+Y3JiX3dpbikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0dGVuIGNyYndpbiAoMHgleCkgIT0gIgogCQkJCSJSZWFkIGNyYndpbiAoMHgleCksIG9mZj0weCVseFxuIiwKQEAgLTkzMCwyNCArOTcyLDY5IEBACiAJCSh1bG9uZylhZGFwdGVyLT5haHcucGNpX2Jhc2UwOwogfQogCi1pbnQgbmV0eGVuX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludAorbmV0eGVuX2RvX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICpmd25hbWUsCisJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0JaW50IGk7Ci0JdTMyIGRhdGEsIHNpemUgPSAwOwotCXUzMiBmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCXU2NCAqcHRyNjQ7CisJdTMyIGksIGZsYXNoYWRkciwgc2l6ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpLzQ7CisJaWYgKGZ3KQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZpbGUgJXNcbiIsIGZ3bmFtZSk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZsYXNoXG4iKTsKIAogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJTkVUWEVOX1JPTVVTQl9HTEJfQ0FTX1JTVCwgMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBmbGFzaGFkZHIsIChpbnQgKikmZGF0YSkgIT0gMCkKLQkJCXJldHVybiAtRUlPOworCWlmIChmdykgeworCQlfX2xlNjQgZGF0YTsKIAotCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDQpOwotCQlmbGFzaGFkZHIgKz0gNDsKKwkJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKSAvIDg7CisKKwkJcHRyNjQgPSAodTY0ICopJmZ3LT5kYXRhW05FVFhFTl9CT09UTERfU1RBUlRdOworCQlmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisJCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDgpOworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKworCQlzaXplID0gKih1MzIgKikmZnctPmRhdGFbTlhfRldfU0laRV9PRkZTRVRdOworCQlzaXplID0gKF9fZm9yY2UgdTMyKWNwdV90b19sZTMyKHNpemUpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKikmZnctPmRhdGFbTkVUWEVOX0lNQUdFX1NUQVJUXTsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0lNQUdFX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA4KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKwl9IGVsc2UgeworCQl1MzIgZGF0YTsKKworCQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpIC8gNDsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0JPT1RMRF9TVEFSVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCQkJZmxhc2hhZGRyLCAoaW50ICopJmRhdGEpICE9IDApCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA0KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDQ7CisJCX0KIAl9CiAJbXNsZWVwKDEpOwogCkBAIC05NjQsMTIgKzEwNTEsMTM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKmZ3bmFtZSwKKwkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlfX2xlMzIgdmFsOworCXUzMiBtYWpvciwgbWlub3IsIGJ1aWxkLCB2ZXIsIG1pbl92ZXIsIGJpb3M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKGZ3LT5zaXplIDwgTlhfRldfTUlOX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfRldfTUFHSUNfT0ZGU0VUXSk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gTkVUWEVOX0JESU5GT19NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtOWF9GV19WRVJTSU9OX09GRlNFVF0pOworCW1ham9yID0gKF9fZm9yY2UgdTMyKXZhbCAmIDB4ZmY7CisJbWlub3IgPSAoKF9fZm9yY2UgdTMyKXZhbCA+PiA4KSAmIDB4ZmY7CisJYnVpbGQgPSAoX19mb3JjZSB1MzIpdmFsID4+IDE2OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW1pbl92ZXIgPSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIxNik7CisJZWxzZQorCQltaW5fdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpOworCisJdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERShtYWpvciwgbWlub3IsIGJ1aWxkKTsKKworCWlmICgobWFqb3IgPiBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUikgfHwgKHZlciA8IG1pbl92ZXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJZnduYW1lLCBtYWpvciwgbWlub3IsIGJ1aWxkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfQklPU19WRVJTSU9OX09GRlNFVF0pOworCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIE5YX0JJT1NfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmYmlvcyk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gYmlvcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmlybXdhcmUgYmlvcyBpcyBpbmNvbXBhdGlibGVcbiIsCisJCQkJZnduYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgZmxhc2hlZCBmaXJtd2FyZSBpcyBuZXdlciAqLworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisJbWFqb3IgPSAoX19mb3JjZSB1MzIpdmFsICYgMHhmZjsKKwltaW5vciA9ICgoX19mb3JjZSB1MzIpdmFsID4+IDgpICYgMHhmZjsKKwlidWlsZCA9IChfX2ZvcmNlIHUzMil2YWwgPj4gMTY7CisJaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUobWFqb3IsIG1pbm9yLCBidWlsZCkgPiB2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX0NBTV9SQU0oMHgxZmMpLAorCQkJTkVUWEVOX0JESU5GT19NQUdJQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpmd19uYW1lW10gPSB7ICJueHJvbWltZy5iaW4iLCAibngzZndjdC5iaW4iLCAibngzZndtbi5iaW4iIH07CisKK2ludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNhcGFiaWxpdHksIGZsYXNoZWRfdmVyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGZ3X3R5cGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByYyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlmd190eXBlID0gTlhfUDJfTU5fUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9IGVsc2UgeworCQlmd190eXBlID0gTlhfUDNfQ1RfUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9CisKK3JlcXVlc3RfbW46CisJY2FwYWJpbGl0eSA9IDA7CisKKwluZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmZmxhc2hlZF92ZXIpOworCWlmIChmbGFzaGVkX3ZlciA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIyMCkpIHsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCU5YX1BFR19UVU5FX0NBUEFCSUxJVFksICZjYXBhYmlsaXR5LCA0KTsKKwkJaWYgKGNhcGFiaWxpdHkgJiBOWF9QRUdfVFVORV9NTl9QUkVTRU5UKSB7CisJCQlmd190eXBlID0gTlhfUDNfTU5fUk9NSU1BR0U7CisJCQlnb3RvIHJlcXVlc3RfZnc7CisJCX0KKwl9CisKK3JlcXVlc3RfZnc6CisJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZVtmd190eXBlXSwgJnBkZXYtPmRldik7CisJaWYgKHJjICE9IDApIHsKKwkJaWYgKGZ3X3R5cGUgPT0gTlhfUDNfQ1RfUk9NSU1BR0UpIHsKKwkJCW1zbGVlcCgxKTsKKwkJCWdvdG8gcmVxdWVzdF9tbjsKKwkJfQorCisJCWZ3ID0gTlVMTDsKKwkJZ290byBsb2FkX2Z3OworCX0KKworCXJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKwlpZiAocmMgIT0gMCkgeworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQkJbXNsZWVwKDEpOworCQkJZ290byByZXF1ZXN0X21uOworCQl9CisKKwkJZncgPSBOVUxMOworCX0KKworbG9hZF9mdzoKKwlyYyA9IG5ldHhlbl9kb19sb2FkX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKworCWlmIChmdykKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJjOworfQorCiBpbnQKIG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKSB7CiAJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwogCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLwpAQCAtOTc3LDM3ICsxMTg3LDEzIEBACiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKIAl9CiAKLQlEUFJJTlRLKElORk8sICJ3cml0aW5nIHRvIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXAiCi0JCSIgZGF0YSAlbGx4IGxlbiAlZFxuIiwKLQkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyLAotCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIGxlbik7CiAJaWYgKCFhZGRyKSB7CiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCXdyaXRlYigqKHU4ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHUxNiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd3JpdGVxKCoodTY0ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuID4+IDMpKTsKKwl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7CiAKLQkJbmV0eGVuX25pY19od19ibG9ja193cml0ZTY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAgKGxlbiA+PiAzKSk7Ci0JCWJyZWFrOwotCX0KIAlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAKQEAgLTEwMjAsNiArMTIwNiw4IEBACiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCisJQlVHX09OKGxlbiAhPSA0KTsKKwogCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewkvKiBXaW5kb3cgMSAqLwogCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKIAl9IGVsc2UgewkJLyogV2luZG93IDAgKi8KQEAgLTEwMjcsMzEgKzEyMTUsMTIgQEAKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCX0KIAotCURQUklOVEsoSU5GTywgInJlYWRpbmcgZnJvbSBiYXNlICVseCBvZmZzZXQgJWxseCBhZGRyICVwXG4iLAotCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIpOwogCWlmICghYWRkcikgewogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAJCXJldHVybiAxOwogCX0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1OCAqKSBkYXRhID0gcmVhZGIoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKih1MTYgKikgZGF0YSA9IHJlYWR3KGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSoodTMyICopIGRhdGEgPSByZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHU2NCAqKSBkYXRhID0gcmVhZHEoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5ldHhlbl9uaWNfaHdfYmxvY2tfcmVhZDY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAobGVuID4+IDMpKTsKLQkJYnJlYWs7Ci0JfQotCURQUklOVEsoSU5GTywgInJlYWQgJWx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgKilkYXRhKTsKKworCSoodTMyICopZGF0YSA9IHJlYWRsKGFkZHIpOwogCiAJaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwpAQCAtMTA2Niw2ICsxMjM1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcnY7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJcnYgPSBuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZiwgbGVuKTsKIAogCWlmIChydiA9PSAtMSkgewpAQCAtMTA3OSwzNCArMTI1MCwxMiBAQAogCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7CiAJCW5ldHhlbl9uaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgJm9mZik7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAid3JpdGUgZGF0YSAlbHggdG8gb2Zmc2V0ICVsbHgsIGxlbj0lZFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyAqKWRhdGEsIG9mZiwgbGVuKTsKLQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQl3cml0ZWIoKih1aW50OF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHVpbnQxNl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCXdyaXRlcSgqKHVpbnQ2NF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKDEsIElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuPj4zKSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAocnYgPT0gMSkgeworCQl3cml0ZWwoKih1aW50MzJfdCAqKWRhdGEsICh2b2lkIF9faW9tZW0gKilvZmYpOwogCQljcmJfd2luX3VubG9jayhhZGFwdGVyKTsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KKwl9IGVsc2UKKwkJd3JpdGVsKCoodWludDMyX3QgKilkYXRhLCAodm9pZCBfX2lvbWVtICopb2ZmKTsKKwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTE4LDYgKzEyNjcsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCBydjsKIAorCUJVR19PTihsZW4gIT0gNCk7CisKIAlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmLCBsZW4pOwogCiAJaWYgKHJ2ID09IC0xKSB7CkBAIC0xMTMxLDMzICsxMjgyLDExIEBACiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJbmV0eGVuX25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCAmb2ZmKTsKLQl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkIGZyb20gb2Zmc2V0ICVseCwgbGVuPSVkXG4iLCBvZmYsIGxlbik7Ci0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1aW50OF90ICopZGF0YSA9IHJlYWRiKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqKHVpbnQzMl90ICopZGF0YSA9IHJlYWRsKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHVpbnQ2NF90ICopZGF0YSA9IHJlYWRxKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOwotCi0JaWYgKHJ2ID09IDEpIHsKKwkJKih1aW50MzJfdCAqKWRhdGEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb2ZmKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQl9CisJfSBlbHNlCisJCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW9mZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTksMTAgKzE1NDgsOSBAQAogCQkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOworCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwogCWludCByZXQgPSAwOwogCXU2NCBzdGFydDsKLQl1aW50OF90ICptZW1fcHRyID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7CiAKQEAgLTE0NDIsNyArMTU3MCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCk7CiAJaWYgKCFhZGRyKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CkBAIC0xNDgxLDcgKzE2MDksNiBAQAogCQlicmVhazsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCURQUklOVEsoMSwgSU5GTywgInJlYWQgJWxseFxuIiwgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkYXRhKTsKIAogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwpAQCAtMTQ5MywxMCArMTYyMCw5IEBACiAJCXZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKKwl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAl1NjQgc3RhcnQ7Ci0JdWludDhfdCAqbWVtX3B0ciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKIAl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwogCkBAIC0xNTE2LDcgKzE2NDIsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JYWRkciA9ICh2b2lkICopKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCkpOworCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpOwogCWlmICghYWRkcikgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApOwpAQCAtMTU1Myw4ICsxNjc5LDYgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQlEUFJJTlRLKDEsIElORk8sICJ3cml0aW5nIGRhdGEgJWxseCB0byBvZmZzZXQgJWxseFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSwgc3RhcnQpOwogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwogCXJldHVybiByZXQ7CkBAIC0xNTY2LDEwICsxNjkwLDExIEBACiBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7CiAJdWludDMyX3QgICAgICB0ZW1wOwogCXVpbnQ2NF90ICAgICAgb2ZmOCwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAkvKgogCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCkBAIC0xNTgzLDcgKzE3MDgsNyBAQAogCXN6WzBdID0gKHNpemUgPCAoOCAtIG9mZjApKSA/IHNpemUgOiAoOCAtIG9mZjApOwogCXN6WzFdID0gc2l6ZSAtIHN6WzBdOwogCWxvb3AgPSAoKG9mZjAgKyBzaXplIC0gMSkgPj4gMykgKyAxOwotCW1lbV9jcmIgPSAodW5zaWduZWQgbG9uZylwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CiAKIAlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpICB7CiAJCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKQEAgLTE2MjEsMjggKzE3NDYsMjkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKIAkJd3JpdGVsKCh1aW50MzJfdCkob2ZmOCArIChpIDw8IDMpKSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CiAJCXdyaXRlbCgwLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKIAkJd3JpdGVsKHdvcmRbaV0gJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CiAJCXdyaXRlbCgod29yZFtpXSA+PiAzMikgJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CiAJCXdyaXRlbChNSVVfVEFfQ1RMX0VOQUJMRXxNSVVfVEFfQ1RMX1dSSVRFLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJd3JpdGVsKE1JVV9UQV9DVExfU1RBUlR8TUlVX1RBX0NUTF9FTkFCTEV8TUlVX1RBX0NUTF9XUklURSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkgICAgIChtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoIiVzOiAlcyBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCV9fZnVuY19fLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJcmV0ID0gLTE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY1NywxMCArMTc4MywxMSBAQAogbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiA9IDAsIGssIHN0YXJ0LCBlbmQsIGxvb3AsIHN6WzJdLCBvZmYwWzJdOwogCXVpbnQzMl90ICAgICAgdGVtcDsKIAl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAogCS8qCkBAIC0xNjc1LDMxICsxODAyLDMyIEBACiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMFswXSkpID8gc2l6ZSA6ICg4IC0gb2ZmMFswXSk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAJbG9vcCA9ICgob2ZmMFswXSArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JbWVtX2NyYiA9ICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewogCQl3cml0ZWwoKHVpbnQzMl90KShvZmY4ICsgKGkgPDwgMykpLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTykpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAkJd3JpdGVsKDAsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9FTkFCTEUsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVHxNSVVfVEFfQ1RMX0VOQUJMRSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAgKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJICAgICAgKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIEZhaWwgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iLAotCQkJCQlfX2Z1bmNfXywgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTcwNyw3ICsxODM1LDcgQEAKIAkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKIAkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKIAkJCXdvcmRbaV0gfD0gKCh1aW50NjRfdCkgcmVhZGwoCi0JCQkJICAgICh2b2lkICopKG1lbV9jcmIgKworCQkJCSAgICAobWVtX2NyYiArCiAJCQkJICAgIE1JVV9URVNUX0FHVF9SRERBVEEoaykpKSA8PCAoMzIqaykpOwogCQl9CiAJfQpAQCAtMTczOSw3ICsxODY3LDYgQEAKIAkJKih1aW50NjRfdCAqKWRhdGEgPSB2YWw7CiAJCWJyZWFrOwogCX0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MzUsOCArMTk2Miw5IEBACiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIik7CiAJCQlyZXQgPSAtMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xOTA1LDggKzIwMzMsOSBAQAogCQl9CiAKIAkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE5NDgsNyArMjA3Nyw2IEBACiAJCSoodWludDY0X3QgKilkYXRhID0gdmFsOwogCQlicmVhazsKIAl9Ci0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTgzLDYyICsyMTExLDQ2IEBACiAJcmV0dXJuIHRlbXA7CiB9CiAKLSNpZiAwCi1pbnQKLW5ldHhlbl9uaWNfZXJhc2VfcHhlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAobmV0eGVuX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9QWEVfU1RBUlQsIDApID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVyYXNlIHB4ZSBmYWlsZWRcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgcnYgPSAwOwotCWludCBhZGRyID0gTkVUWEVOX0JSRENGR19TVEFSVDsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbzsKLQlpbnQgaW5kZXg7Ci0JdTMyICpwdHIzMjsKKwlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYywgaGVhZGVyX3ZlcnNpb247CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYm9hcmRpbmZvID0gJmFkYXB0ZXItPmFody5ib2FyZGNmZzsKLQlwdHIzMiA9ICh1MzIgKikgYm9hcmRpbmZvOworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIG1hZ2ljKTsKKwlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmbWFnaWMpKQorCQlyZXR1cm4gLUVJTzsKIAotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8pIC8gc2l6ZW9mKHUzMik7Ci0JICAgICBpbmRleCsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCBwdHIzMikgPT0gLTEpIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXB0cjMyKys7Ci0JCWFkZHIgKz0gc2l6ZW9mKHUzMik7Ci0JfQotCWlmIChib2FyZGluZm8tPm1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMpIHsKLQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCBjb25maWcuIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPm1hZ2ljLCBORVRYRU5fQkRJTkZPX01BR0lDKTsKLQkJcnYgPSAtMTsKLQl9Ci0JaWYgKGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7Ci0JCXByaW50aygiJXM6IFVua25vd24gYm9hcmQgY29uZmlnIHZlcnNpb24uIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24sIE5FVFhFTl9CRElORk9fVkVSU0lPTik7Ci0JCXJ2ID0gLTE7CisJb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCisJCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgaGVhZGVyX3ZlcnNpb24pOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZoZWFkZXJfdmVyc2lvbikpCisJCXJldHVybiAtRUlPOworCisJaWYgKG1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMgfHwKKwkJCWhlYWRlcl92ZXJzaW9uICE9IE5FVFhFTl9CRElORk9fVkVSU0lPTikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBib2FyZCBjb25maWcsIG1hZ2ljPSUwOHgsIHZlcnNpb249JTA4eFxuIiwKKwkJCW1hZ2ljLCBoZWFkZXJfdmVyc2lvbik7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChib2FyZGluZm8tPmJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTSkgeworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIGJvYXJkX3R5cGUpOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlpZiAoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NKSB7CiAJCXUzMiBncGlvID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLAogCQkJCU5FVFhFTl9ST01VU0JfR0xCX1BBRF9HUElPX0kpOwogCQlpZiAoKGdwaW8gJiAweDgwMDApID09IDApCi0JCQlib2FyZGluZm8tPmJvYXJkX3R5cGUgPSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA7CisJCQlib2FyZF90eXBlID0gTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOwogCX0KIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX0dCRTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOwogCQlicmVhazsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKQEAgLTIwNTQsNyArMjE2Niw3IEBACiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1hGUDoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfQkQ6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9TQjoKQEAgLTIwNjMsMjAgKzIxNzUsMTkgQEAKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0I6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gTkVUWEVOX05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gKGFkYXB0ZXItPnBvcnRudW0gPCAyKSA/CiAJCQlORVRYRU5fTklDX1hHQkUgOiBORVRYRU5fTklDX0dCRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVW5rbm93bigleClcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPmJvYXJkX3R5cGUpOwotCQlydiA9IC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVua25vd24gYm9hcmQgdHlwZSAleFxuIiwgYm9hcmRfdHlwZSk7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogLyogTklVIGFjY2VzcyBzZWN0aW9ucyAqLwpAQCAtMjEyMiw3ICsyMjMzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKIAkJCQlORVRYRU5fUE9SVF9NT0RFX0FERFIsICZwb3J0X21vZGUsIDQpOwogCQlpZiAocG9ydF9tb2RlID09IE5FVFhFTl9QT1JUX01PREVfODAyXzNfQVApIHsKQEAgLTIxNzcsMzIgKzIyODgsMjcgQEAKIAl9CiB9CiAKLXZvaWQgbmV0eGVuX25pY19mbGFzaF9wcmludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIG5ldHhlbl9uaWNfZ2V0X2Zpcm13YXJlX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBmd19tYWpvciA9IDA7Ci0JdTMyIGZ3X21pbm9yID0gMDsKLQl1MzIgZndfYnVpbGQgPSAwOworCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOwogCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKIAljaGFyIHNlcmlhbF9udW1bMzJdOwotCWludCBpLCBhZGRyOwotCV9fbGUzMiAqcHRyMzI7Ci0KLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmKGFkYXB0ZXItPmFody5ib2FyZGNmZyk7CisJaW50IGksIGFkZHIsIHZhbDsKKwlpbnQgKnB0cjMyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAogCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CiAKLQlwdHIzMiA9ICh1MzIgKikmc2VyaWFsX251bTsKKwlwdHIzMiA9IChpbnQgKikmc2VyaWFsX251bTsKIAlhZGRyID0gTkVUWEVOX1VTRVJfU1RBUlQgKwogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8sIHNlcmlhbF9udW0pOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHB0cjMyKSA9PSAtMSkgewotCQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCB1c2VyYXJlYS5cbiIsCi0JCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ2YWwpID09IC0xKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJvYXJkIGluZm9cbiIpOwogCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKIAkJCXJldHVybjsKIAkJfQotCQlwdHIzMisrOworCQlwdHIzMltpXSA9IGNwdV90b19sZTMyKHZhbCk7CiAJCWFkZHIgKz0gc2l6ZW9mKHUzMik7CiAJfQogCkBAIC0yMjExLDIzICsyMzE3LDQ4IEBACiAJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIsICZmd19idWlsZCwgNCk7CiAKIAlhZGFwdGVyLT5md19tYWpvciA9IGZ3X21ham9yOworCWFkYXB0ZXItPmZ3X3ZlcnNpb24gPSBORVRYRU5fVkVSU0lPTl9DT0RFKGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwogCiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgewotCQlnZXRfYnJkX25hbWVfYnlfdHlwZShib2FyZF9pbmZvLT5ib2FyZF90eXBlLCBicmRfbmFtZSk7CisJCWdldF9icmRfbmFtZV9ieV90eXBlKGFkYXB0ZXItPmFody5ib2FyZF90eXBlLCBicmRfbmFtZSk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuICVzIEJvYXJkIFMvTiAlcyAgQ2hpcCByZXYgMHgleFxuIiwKIAkJCQlicmRfbmFtZSwgc2VyaWFsX251bSwgYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuIEZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWRcbiIsCi0JCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAJfQogCi0JaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUoZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCkgPAotCQkJTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpKSB7CisJaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPCBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKIAkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKIAkJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKIAkJcmV0dXJuOwogCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkXG4iLAorCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmaSwgNCk7CisJCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA9IChpICYgMHg0KSA/IDEgOiAwOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgcnVubmluZyBpbiAlcyBtb2RlXG4iLAorCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPyAiY3V0LXRocm91Z2giIDogImxlZ2FjeSIpOworCX0KIH0KIAoraW50CituZXR4ZW5fbmljX3dvbF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB3b2xfY2ZnOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAwOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUdfTlYpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkgeworCQl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJCWlmICh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCmluZGV4IGFhZTczN2QuLjA0YjQ3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU3RydWN0dXJlcywgZW51bXMsIGFuZCBtYWNyb3MgZm9yIHRoZSBNQUMKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTU0LDM3ICs1MSwxMiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2h3X2Jsb2NrX3dyaXRlNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKLQkJCQkJICAgICAgIHU2NCBfX2lvbWVtICogYWRkciwKLQkJCQkJICAgICAgIGludCBudW1fd29yZHMpCi17Ci0JaW50IG51bTsKLQlmb3IgKG51bSA9IDA7IG51bSA8IG51bV93b3JkczsgbnVtKyspIHsKLQkJd3JpdGVxKHJlYWRxKCh2b2lkIF9faW9tZW0gKilkYXRhX3B0ciksIGFkZHIpOwotCQlhZGRyKys7Ci0JCWRhdGFfcHRyKys7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKLQkJCQkJICAgICAgdTY0IF9faW9tZW0gKiBhZGRyLCBpbnQgbnVtX3dvcmRzKQotewotCWludCBudW07Ci0JZm9yIChudW0gPSAwOyBudW0gPCBudW1fd29yZHM7IG51bSsrKSB7Ci0JCXdyaXRlcShyZWFkcSgodm9pZCBfX2lvbWVtICopYWRkciksIGRhdGFfcHRyKTsKLQkJYWRkcisrOwotCQlkYXRhX3B0cisrOwotCX0KLQotfQotCiBzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXI7CiAKICNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFX0JZVEVTICAoTkVUWEVOX1BDSV9NQVBTSVpFIDw8IDIwKQogCiBzdHJ1Y3QgbmV0eGVuX3BvcnQ7CiB2b2lkIG5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBuZXR4ZW5fbmljX2ZsYXNoX3ByaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKIHR5cGVkZWYgdTggbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdFs2XTsKIApAQCAtMTQ4LDMzICsxMjAsNiBAQAogI2RlZmluZSBuZXR4ZW5fZ2JfZ2V0X3NvZnRfcmVzZXQoY29uZmlnX3dvcmQpCVwKIAkJX25ldHhlbl9jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAzMSkKIAotLyoKLSAqIE5JVSBHQiBNQUMgQ29uZmlnIFJlZ2lzdGVyIDEgKGFwcGxpZXMgdG8gR0IwLCBHQjEsIEdCMiwgR0IzKQotICoKLSAqCUJpdCAwCSAgICA6IGR1cGxleCA9PiAxOmZ1bGwgZHVwbGV4IG1vZGUsIDA6aGFsZiBkdXBsZXgKLSAqCUJpdCAxCSAgICA6IGNyY19lbmFibGUgPT4gMTphcHBlbmQgQ1JDIHRvIHhtaXQgZnJhbWVzLCAwOmRvbnQgYXBwZW5kCi0gKglCaXQgMgkgICAgOiBwYWRzaG9ydCA9PiAxOnBhZCBzaG9ydCBmcmFtZXMgYW5kIGFkZCBDUkMsIDA6ZG9udCBwYWQKLSAqCUJpdCA0CSAgICA6IGNoZWNrbGVuZ3RoID0+IDE6Y2hlY2sgZnJhbWVsZW4gd2l0aCBhY3R1YWwsMDpkb250IGNoZWNrCi0gKglCaXQgNQkgICAgOiBodWdlZnJhbWVzID0+IDE6YWxsb3cgb3ZlcnNpemUgeG1pdCBmcmFtZXMsIDA6ZG9udCBhbGxvdwotICoJQml0cyA4LTkgICAgOiBpbnRmbW9kZSA9PiAwMTpuaWJibGUgKDEwLzEwMCksIDEwOmJ5dGUgKDEwMDApCi0gKglCaXRzIDEyLTE1ICA6IHByZWFtYmxlbGVuID0+IHByZWFtYmxlIGZpZWxkIGxlbmd0aCBpbiBieXRlcywgZGVmYXVsdCA3Ci0gKi8KLQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2R1cGxleChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEpCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfcGFkc2hvcnQoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAyKQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2NoZWNrbGVuZ3RoKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNCkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNSkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9wcmVhbWJsZWxlbihjb25maWdfd29yZCwgdmFsKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsKSA8PCAxMikgJiAweEYwMDApCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfaW50Zm1vZGUoY29uZmlnX3dvcmQsIHZhbCkJCVwKLQkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpIDw8IDgpICYgMHgzMDApCi0KICNkZWZpbmUgbmV0eGVuX2diX2dldF9zdGF0aW9uYWRkcmVzc19sb3coY29uZmlnX3dvcmQpICgoY29uZmlnX3dvcmQpID4+IDE2KQogCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfbWlpX21nbXRfY2xvY2tzZWxlY3QoY29uZmlnX3dvcmQsIHZhbCkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IGZmZDM3YmUuLjA3NTljMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqIFNvdXJjZSBmaWxlIGZvciBOSUMgcm91dGluZXMgdG8gaW5pdGlhbGl6ZSB0aGUgUGhhbnRvbSBIYXJkd2FyZQorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtNTIsMTcgKzQ5LDkgQEAKIAogI2RlZmluZSBORVRYRU5fTklDX1hETUFfUkVTRVQgMHg4MDAwZmYKIAotc3RhdGljIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdWludDMyX3QgY3R4LCB1aW50MzJfdCByaW5naWQpOwotCi0jaWYgMAotc3RhdGljIHZvaWQgbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdW5zaWduZWQgbG9uZyBvZmYsIGludCAqZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKLQl3cml0ZWwoKmRhdGEsIGFkZHIpOwotfQotI2VuZGlmICAvKiAgMCAgKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogCiBzdGF0aWMgdm9pZCBjcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAodm9pZCkKIHsKQEAgLTE2MCwyMyArMTQ5LDIxIEBACiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOwotCWludCBpLCBjdHhpZCwgcmluZzsKKwlpbnQgaSwgcmluZzsKIAotCWZvciAoY3R4aWQgPSAwOyBjdHhpZCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eGlkKSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWZvciAoaSA9IDA7IGkgPCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQ7ICsraSkgewotCQkJCXJ4X2J1ZiA9ICYocmRzX3JpbmctPnJ4X2J1Zl9hcnJbaV0pOwotCQkJCWlmIChyeF9idWYtPnN0YXRlID09IE5FVFhFTl9CVUZGRVJfRlJFRSkKLQkJCQkJY29udGludWU7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAotCQkJCQkJcnhfYnVmLT5kbWEsCi0JCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCWlmIChyeF9idWYtPnNrYiAhPSBOVUxMKQotCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7Ci0JCQl9CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlmb3IgKGkgPSAwOyBpIDwgcmRzX3JpbmctPm51bV9kZXNjOyArK2kpIHsKKwkJCXJ4X2J1ZiA9ICYocmRzX3JpbmctPnJ4X2J1Zl9hcnJbaV0pOworCQkJaWYgKHJ4X2J1Zi0+c3RhdGUgPT0gTkVUWEVOX0JVRkZFUl9GUkVFKQorCQkJCWNvbnRpbnVlOworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAorCQkJCQlyeF9idWYtPmRtYSwKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplLAorCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJaWYgKHJ4X2J1Zi0+c2tiICE9IE5VTEwpCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkocnhfYnVmLT5za2IpOwogCQl9CiAJfQogfQpAQCAtMTg4LDcgKzE3NSw3IEBACiAJaW50IGksIGo7CiAKIAljbWRfYnVmID0gYWRhcHRlci0+Y21kX2J1Zl9hcnI7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4ZDsgaSsrKSB7CiAJCWJ1ZmZyYWcgPSBjbWRfYnVmLT5mcmFnX2FycmF5OwogCQlpZiAoYnVmZnJhZy0+ZG1hKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKQEAgLTIwNCw3ICsxOTEsNiBAQAogCQkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CiAJCQl9CiAJCX0KLQkJLyogRnJlZSB0aGUgc2tiIHdlIHJlY2VpdmVkIGluIG5ldHhlbl9uaWNfeG1pdF9mcmFtZSAqLwogCQlpZiAoY21kX2J1Zi0+c2tiKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShjbWRfYnVmLT5za2IpOwogCQkJY21kX2J1Zi0+c2tiID0gTlVMTDsKQEAgLTIxNywxOCArMjAzLDE3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKLQlpbnQgY3R4LCByaW5nOworCWludCByaW5nOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FycikgewotCQkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKLQkJCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IE5VTEw7Ci0JCQl9CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlpZiAocmRzX3JpbmctPnJ4X2J1Zl9hcnIpIHsKKwkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKKwkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gTlVMTDsKIAkJfQogCX0KKwogCWlmIChhZGFwdGVyLT5jbWRfYnVmX2FycikKIAkJdmZyZWUoYWRhcHRlci0+Y21kX2J1Zl9hcnIpOwogCXJldHVybjsKQEAgLTIzOCw5MCArMjIzLDk3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1ZjsKLQlpbnQgY3R4LCByaW5nLCBpLCBudW1fcnhfYnVmczsKKwlpbnQgcmluZywgaSwgbnVtX3J4X2J1ZnM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQljbWRfYnVmX2FyciA9IChzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKil2bWFsbG9jKFRYX1JJTkdTSVpFKTsKKwljbWRfYnVmX2FyciA9CisJCShzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKil2bWFsbG9jKFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikpOwogCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgYnVmZmVyIHJpbmdcbiIsCiAJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9SSU5HU0laRSk7CisJbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9CVUZGX1JJTkdTSVpFKGFkYXB0ZXIpKTsKIAlhZGFwdGVyLT5jbWRfYnVmX2FyciA9IGNtZF9idWZfYXJyOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCXN3aXRjaCAoUkNWX0RFU0NfVFlQRShyaW5nKSkgewotCQkJY2FzZSBSQ1ZfREVTQ19OT1JNQUw6Ci0JCQkJcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50ID0KLQkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQ7Ci0JCQkJcmRzX3JpbmctPmZsYWdzID0gUkNWX0RFU0NfTk9STUFMOwotCQkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKLQkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKLQkJCQl9IGVsc2UgewotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9ETUFfTUFQX0xFTjsKLQkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBSQ1ZfREVTQ19KVU1CTzoKLQkJCQlyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQgPQotCQkJCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19KVU1CTzsKLQkJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX1AzX1JYX0pVTUJPX0JVRl9NQVhfTEVOOwotCQkJCWVsc2UKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJc3dpdGNoIChyaW5nKSB7CisJCWNhc2UgUkNWX1JJTkdfTk9STUFMOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX3J4ZDsKKwkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CiAJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOwotCQkJCWJyZWFrOworCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CisJCQl9IGVsc2UgeworCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0RNQV9NQVBfTEVOOworCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOworCQkJfQorCQkJYnJlYWs7CiAKLQkJCWNhc2UgUkNWX1JJTkdfTFJPOgotCQkJCXJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCA9Ci0JCQkJCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19MUk87Ci0JCQkJcmRzX3JpbmctPmRtYV9zaXplID0gUlhfTFJPX0RNQV9NQVBfTEVOOwotCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IE1BWF9SWF9MUk9fQlVGRkVSX0xFTkdUSDsKLQkJCQlicmVhazsKKwkJY2FzZSBSQ1ZfUklOR19KVU1CTzoKKwkJCXJkc19yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV9qdW1ib19yeGQ7CisJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9QM19SWF9KVU1CT19CVUZfTUFYX0xFTjsKKwkJCWVsc2UKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9QMl9SWF9KVU1CT19CVUZfTUFYX0xFTjsKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOworCQkJYnJlYWs7CiAKLQkJCX0KLQkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCi0JCQkJdm1hbGxvYyhSQ1ZfQlVGRlNJWkUpOwotCQkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJCQkicnggYnVmZmVyIHJpbmcgJWRcbiIsCi0JCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7Ci0JCQkJLyogZnJlZSB3aGF0ZXZlciB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KLQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQl9Ci0JCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGU0laRSk7Ci0JCQlJTklUX0xJU1RfSEVBRCgmcmRzX3JpbmctPmZyZWVfbGlzdCk7Ci0JCQkvKgotCQkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcwotCQkJICogYW5kIHB1dCB0aGVtIGluIHRoZSBxdWV1ZXMuCi0JCQkgKi8KLQkJCW51bV9yeF9idWZzID0gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50OwotCQkJcnhfYnVmID0gcmRzX3JpbmctPnJ4X2J1Zl9hcnI7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X2J1ZnM7IGkrKykgewotCQkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKLQkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKLQkJCQlyeF9idWYtPnJlZl9oYW5kbGUgPSBpOwotCQkJCXJ4X2J1Zi0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7Ci0JCQkJcnhfYnVmKys7Ci0JCQl9CisJCWNhc2UgUkNWX1JJTkdfTFJPOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX2xyb19yeGQ7CisJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9MUk9fRE1BX01BUF9MRU47CisJCQlyZHNfcmluZy0+c2tiX3NpemUgPSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEg7CisJCQlicmVhazsKKwogCQl9CisJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCisJCQl2bWFsbG9jKFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FyciA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJCSJyeCBidWZmZXIgcmluZyAlZFxuIiwKKwkJCQluZXRkZXYtPm5hbWUsIHJpbmcpOworCQkJLyogZnJlZSB3aGF0ZXZlciB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCUlOSVRfTElTVF9IRUFEKCZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJLyoKKwkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcworCQkgKiBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlcy4KKwkJICovCisJCW51bV9yeF9idWZzID0gcmRzX3JpbmctPm51bV9kZXNjOworCQlyeF9idWYgPSByZHNfcmluZy0+cnhfYnVmX2FycjsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWZzOyBpKyspIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKKwkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJcnhfYnVmLT5yZWZfaGFuZGxlID0gaTsKKwkJCXJ4X2J1Zi0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7CisJCQlyeF9idWYrKzsKKwkJfQorCQlzcGluX2xvY2tfaW5pdCgmcmRzX3JpbmctPmxvY2spOworCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJc2RzX3JpbmctPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1tyaW5nXS52ZWN0b3I7CisJCXNkc19yaW5nLT5jbGVhbl90eCA9IChyaW5nID09IDApOworCQlzZHNfcmluZy0+cG9zdF9yeGQgPSAocmluZyA9PSAwKTsKKwkJc2RzX3JpbmctPmFkYXB0ZXIgPSBhZGFwdGVyOworCQlzZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fcnhkOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkNWX0RFU0NfUklOR1M7IGkrKykKKwkJCUlOSVRfTElTVF9IRUFEKCZzZHNfcmluZy0+ZnJlZV9saXN0W2ldKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMzMyw3ICszMjUsNyBAQAogCiB2b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CiAJY2FzZSBORVRYRU5fTklDX0dCRToKIAkJYWRhcHRlci0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzID0KIAkJICAgIG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0czsKQEAgLTM5OSw5ICszOTEsNiBAQAogCiBzdGF0aWMgbG9uZyByb21fbWF4X3RpbWVvdXQgPSAxMDA7CiBzdGF0aWMgbG9uZyByb21fbG9ja190aW1lb3V0ID0gMTAwMDA7Ci0jaWYgMAotc3RhdGljIGxvbmcgcm9tX3dyaXRlX3RpbWVvdXQgPSA3MDA7Ci0jZW5kaWYKIAogc3RhdGljIGludCByb21fbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00NTIsMzggKzQ0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd3JlbihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogU2V0IHdyaXRlIGVuYWJsZSBsYXRjaCBpbiBST00gc3RhdHVzIHJlZ2lzdGVyICovCi0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfV1JFTik7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0eGVuX3JkY3JicmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGFkZHIpCi17Ci0JdW5zaWduZWQgaW50IGRhdGEgPSAweGRlYWRkZWFkOwotCWRhdGEgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIGFkZHIpOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9kb19yb21fcmRzcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLAotCQkJICAgICBNMjVQX0lOU1RSX1JEU1IpOwotCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBuZXR4ZW5fcmRjcmJyZWcoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fUkRBVEEpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIG5ldHhlbl9yb21fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgdmFsOwpAQCAtNDkzLDQ0ICs0NTAsNiBAQAogCiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd2lwX3BvbGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWxvbmcgdGltZW91dCA9IDA7Ci0JbG9uZyB3aXAgPSAxOwotCWludCB2YWw7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQl3aGlsZSAod2lwICE9IDApIHsKLQkJdmFsID0gbmV0eGVuX2RvX3JvbV9yZHNyKGFkYXB0ZXIpOwotCQl3aXAgPSB2YWwgJiAxOwotCQl0aW1lb3V0Kys7Ci0JCWlmICh0aW1lb3V0ID4gcm9tX21heF90aW1lb3V0KSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fcm9tX2Zhc3Rfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKLQkJCSAgICAgaW50IGRhdGEpCi17Ci0JaWYgKG5ldHhlbl9yb21fd3JlbihhZGFwdGVyKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1dEQVRBLCBkYXRhKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKLQkJCSAgICAgTTI1UF9JTlNUUl9QUCk7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FCWVRFX0NOVCwgMCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgIGludCBhZGRyLCBpbnQgKnZhbHApCiB7CkBAIC01OTcsMjg0ICs1MTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX3JvbV9mYXN0X3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBkYXRhKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKHJvbV9sb2NrKGFkYXB0ZXIpICE9IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLCBhZGRyLCBkYXRhKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRvX3JvbV9mYXN0X3dyaXRlX3dvcmRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICBpbnQgYWRkciwgdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgYWRkcmlkeCA9IGFkZHI7Ci0JaW50IHJldCA9IDA7Ci0KLQl3aGlsZSAoYWRkcmlkeCA8IChhZGRyICsgc2l6ZSkpIHsKLQkJaW50IGxhc3RfYXR0ZW1wdCA9IDA7Ci0JCWludCB0aW1lb3V0ID0gMDsKLQkJaW50IGRhdGE7Ci0KLQkJZGF0YSA9IGxlMzJfdG9fY3B1KCgqKF9fbGUzMiopYnl0ZXMpKTsKLQkJcmV0ID0gZG9fcm9tX2Zhc3Rfd3JpdGUoYWRhcHRlciwgYWRkcmlkeCwgZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQl3aGlsZSgxKSB7Ci0JCQlpbnQgZGF0YTE7Ci0KLQkJCXJldCA9IGRvX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkcmlkeCwgJmRhdGExKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCWlmIChkYXRhMSA9PSBkYXRhKQotCQkJCWJyZWFrOwotCi0JCQlpZiAodGltZW91dCsrID49IHJvbV93cml0ZV90aW1lb3V0KSB7Ci0JCQkJaWYgKGxhc3RfYXR0ZW1wdCsrIDwgNCkgewotCQkJCQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLAotCQkJCQkJCQlhZGRyaWR4LCBkYXRhKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiRGF0YSB3cml0ZSBkaWQgbm90ICIKLQkJCQkJICAgInN1Y2NlZWQgYXQgYWRkcmVzcyAweCV4XG4iLCBhZGRyaWR4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJYnl0ZXMgKz0gNDsKLQkJYWRkcmlkeCArPSA0OwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKLQkJCQkJdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IHJvbV9sb2NrKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZG9fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoYWRhcHRlciwgYWRkciwgYnl0ZXMsIHNpemUpOwotCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fcm9tX3dyc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbmV0eGVuX3JvbV93cmVuKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1dEQVRBLCBkYXRhKTsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKLQkJCQkJTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLCAweDEpOwotCi0JcmV0ID0gbmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fcm9tX3Jkc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByb21fbG9jayhhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5ldHhlbl9kb19yb21fcmRzcihhZGFwdGVyKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbmV0eGVuX2JhY2t1cF9jcmJpbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgdmFsOwotCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2MoTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQkvKiB1bmxvY2sgc2VjdG9yIDYzICovCi0JdmFsID0gbmV0eGVuX3JvbV9yZHNyKGFkYXB0ZXIpOwotCXZhbCA9IHZhbCAmIDB4ZTM7Ci0JcmV0ID0gbmV0eGVuX3JvbV93cnNyKGFkYXB0ZXIsIHZhbCk7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCS8qIGNvcHkgIHNlY3RvciAwIHRvIHNlY3RvciA2MyAqLwotCXJldCA9IG5ldHhlbl9yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIE5FVFhFTl9DUkJJTklUX1NUQVJULAotCQkJCQlidWZmZXIsIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRSk7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCXJldCA9IG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBORVRYRU5fRklYRURfU1RBUlQsCi0JCQkJCWJ1ZmZlciwgTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JLyogbG9jayBzZWN0b3IgNjMgKi8KLQl2YWwgPSBuZXR4ZW5fcm9tX3Jkc3IoYWRhcHRlcik7Ci0JaWYgKCEodmFsICYgMHg4KSkgewotCQl2YWwgfD0gKDB4MSA8PCAyKTsKLQkJLyogbG9jayBzZWN0b3IgNjMgKi8KLQkJaWYgKG5ldHhlbl9yb21fd3JzcihhZGFwdGVyLCB2YWwpID09IDApIHsKLQkJCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCQkJZ290byBvdXRfa2ZyZWU7Ci0KLQkJCS8qIGxvY2sgU1Igd3JpdGVzICovCi0JCQlyZXQgPSBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotCQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJCWdvdG8gb3V0X2tmcmVlOwotCQl9Ci0JfQotCi1vdXRfa2ZyZWU6Ci0Ja2ZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9kb19yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQluZXR4ZW5fcm9tX3dyZW4oYWRhcHRlcik7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUREUkVTUywgYWRkcik7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAzKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfU0UpOwotCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgewotCQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja19lcmFzZWRfZmxhc2goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQlpbnQgaTsKLQlpbnQgdmFsOwotCWludCBjb3VudCA9IDAsIGVyYXNlZF9lcnJvcnMgPSAwOwotCWludCByYW5nZTsKLQotCXJhbmdlID0gKGFkZHIgPT0gTkVUWEVOX1VTRVJfU1RBUlQpID8KLQkJTkVUWEVOX0ZJWEVEX1NUQVJUIDogYWRkciArIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQotCWZvciAoaSA9IGFkZHI7IGkgPCByYW5nZTsgaSArPSA0KSB7Ci0JCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGksICZ2YWwpOwotCQlpZiAodmFsICE9IDB4ZmZmZmZmZmYpCi0JCQllcmFzZWRfZXJyb3JzKys7Ci0JCWNvdW50Kys7Ci0JfQotCi0JaWYgKGVyYXNlZF9lcnJvcnMpCi0JCXByaW50ayhLRVJOX0lORk8gIjB4JXggb3V0IG9mIDB4JXggd29yZHMgZmFpbCB0byBiZSBlcmFzZWQgIgotCQkJImZvciBzZWN0b3IgYWRkcmVzczogJXhcbiIsIGVyYXNlZF9lcnJvcnMsIGNvdW50LCBhZGRyKTsKLX0KLQotaW50IG5ldHhlbl9yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldCA9IG5ldHhlbl9kb19yb21fc2UoYWRhcHRlciwgYWRkcik7Ci0JbmV0eGVuX3JvbV91bmxvY2soYWRhcHRlcik7Ci0JbXNsZWVwKDMwKTsKLQljaGVja19lcmFzZWRfZmxhc2goYWRhcHRlciwgYWRkcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWN0aW9ucyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgIGludCBzdGFydCwgaW50IGVuZCkKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBpICogTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQlyZXQgPSBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50Ci1uZXR4ZW5fZmxhc2hfZXJhc2Vfc2Vjb25kYXJ5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgc3RhcnQsIGVuZDsKLQotCXN0YXJ0ID0gTkVUWEVOX1NFQ09OREFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQllbmQgICA9IE5FVFhFTl9VU0VSX1NUQVJUIC8gTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFOwotCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWN0aW9ucyhhZGFwdGVyLCBzdGFydCwgZW5kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotbmV0eGVuX2ZsYXNoX2VyYXNlX3ByaW1hcnkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQgPSBGTEFTSF9TVUNDRVNTOwotCWludCBzdGFydCwgZW5kOwotCi0Jc3RhcnQgPSBORVRYRU5fUFJJTUFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQllbmQgICA9IE5FVFhFTl9TRUNPTkRBUllfU1RBUlQgLyBORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkU7Ci0JcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY3Rpb25zKGFkYXB0ZXIsIHN0YXJ0LCBlbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBuZXR4ZW5faGFsdF9wZWdzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8wICsgMHgzYywgMSk7Ci0JIG5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4M2MsIDEpOwotCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzIgKyAweDNjLCAxKTsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8zICsgMHgzYywgMSk7Ci19Ci0KLWludCBuZXR4ZW5fZmxhc2hfdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IG5ldHhlbl9yb21fd3JzcihhZGFwdGVyLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5ldHhlbl9yb21fd3JlbihhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiAjZGVmaW5lIE5FVFhFTl9CT0FSRFRZUEUJCTB4NDAwOAogI2RlZmluZSBORVRYRU5fQk9BUkROVU0gCQkweDQwMGMKICNkZWZpbmUgTkVUWEVOX0NISVBOVU0JCQkweDQwMTAKQEAgLTExNjgsNiArODA5LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl9hbGxvY19yeF9za2Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsCisJCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlidWZmZXItPnNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKKwlpZiAoIWJ1ZmZlci0+c2tiKQorCQlyZXR1cm4gMTsKKworCXNrYiA9IGJ1ZmZlci0+c2tiOworCisJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCisJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYnVmZmVyLT5za2IgPSBOVUxMOworCQlyZXR1cm4gMTsKKwl9CisKKwlidWZmZXItPnNrYiA9IHNrYjsKKwlidWZmZXItPmRtYSA9IGRtYTsKKwlidWZmZXItPnN0YXRlID0gTkVUWEVOX0JVRkZFUl9CVVNZOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0eGVuX3Byb2Nlc3NfcnhidWYoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsIHUxNiBpbmRleCwgdTE2IGNrc3VtKQogewpAQCAtMTE5MiwxNjQgKzg2NywxMjEgQEAKIAlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCWJ1ZmZlci0+c2tiID0gTlVMTDsKLQogbm9fc2tiOgogCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7Ci0JYnVmZmVyLT5scm9fY3VycmVudF9mcmFncyA9IDA7Ci0JYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MgPSAwOwotCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJnJkc19yaW5nLT5mcmVlX2xpc3QpOwogCXJldHVybiBza2I7CiB9CiAKLS8qCi0gKiBuZXR4ZW5fcHJvY2Vzc19yY3YoKSBzZW5kIHRoZSByZWNlaXZlZCBwYWNrZXQgdG8gdGhlIHByb3RvY29sIHN0YWNrLgotICogYW5kIGlmIHRoZSBudW1iZXIgb2YgcmVjZWl2ZXMgZXhjZWVkcyBSWF9CVUZGRVJTX1JFRklMTCwgdGhlbiB3ZQotICogaW52b2tlIHRoZSByb3V0aW5lIHRvIHNlbmQgbW9yZSByeCBidWZmZXJzIHRvIHRoZSBQaGFudG9tLi4uCi0gKi8KLXN0YXRpYyB2b2lkIG5ldHhlbl9wcm9jZXNzX3JjdihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwKLQkJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjLCBzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmZyYWdfZGVzYykKK3N0YXRpYyBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqCituZXR4ZW5fcHJvY2Vzc19yY3Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlpbnQgcmluZywgaW50IGluZGV4LCBpbnQgbGVuZ3RoLCBpbnQgY2tzdW0sIGludCBwa3Rfb2Zmc2V0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTY0IHN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YSk7Ci0JaW50IGluZGV4ID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhKTsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgbGVuZ3RoID0gbmV0eGVuX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpOwotCXUzMiBkZXNjX2N0eDsKLQl1MTYgcGt0X29mZnNldCA9IDAsIGNrc3VtOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAotCWRlc2NfY3R4ID0gbmV0eGVuX2dldF9zdHNfdHlwZShzdHNfZGF0YSk7Ci0JaWYgKHVubGlrZWx5KGRlc2NfY3R4ID49IE5VTV9SQ1ZfREVTQ19SSU5HUykpIHsKLQkJcHJpbnRrKCIlczogJXMgQmFkIFJjdiBkZXNjcmlwdG9yIHJpbmdcbiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQorCWlmICh1bmxpa2VseShpbmRleCA+IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOwogCi0JcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tkZXNjX2N0eF07Ci0JaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KSkgewotCQlEUFJJTlRLKEVSUiwgIkdvdCBhIGJ1ZmZlciBpbmRleDoleCBNYXggaXMgJXhcbiIsCi0JCQlpbmRleCwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKLQkJcmV0dXJuOwotCX0KIAlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOwotCWlmIChkZXNjX2N0eCA9PSBSQ1ZfREVTQ19MUk9fQ1RYSUQpIHsKLQkJYnVmZmVyLT5scm9fY3VycmVudF9mcmFncysrOwotCQlpZiAobmV0eGVuX2dldF9zdHNfZGVzY19scm9fbGFzdF9mcmFnKGRlc2MpKSB7Ci0JCQlidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyA9Ci0JCQkgICAgbmV0eGVuX2dldF9zdHNfZGVzY19scm9fY250KGRlc2MpOwotCQkJYnVmZmVyLT5scm9fbGVuZ3RoID0gbGVuZ3RoOwotCQl9Ci0JCWlmIChidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzICE9IGJ1ZmZlci0+bHJvX2V4cGVjdGVkX2ZyYWdzKSB7Ci0JCQlpZiAoYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MgIT0gMCkgewotCQkJCXByaW50aygiTFJPOiAocmVmaGFuZGxlOiV4KSByZWN2IGZyYWcuICIKLQkJCQkgICAgICAgIndhaXQgZm9yIGxhc3QuIGZsYWdzOiAleCBleHBlY3RlZDolZCAiCi0JCQkJICAgICAgICJoYXZlOiVkXG4iLCBpbmRleCwKLQkJCQkgICAgICAgbmV0eGVuX2dldF9zdHNfZGVzY19scm9fbGFzdF9mcmFnKGRlc2MpLAotCQkJCSAgICAgICBidWZmZXItPmxyb19leHBlY3RlZF9mcmFncywKLQkJCQkgICAgICAgYnVmZmVyLT5scm9fY3VycmVudF9mcmFncyk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlja3N1bSA9IG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSk7CiAKIAlza2IgPSBuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIGNrc3VtKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOworCQlyZXR1cm4gYnVmZmVyOwogCi0JaWYgKGRlc2NfY3R4ID09IFJDVl9ERVNDX0xST19DVFhJRCkgewotCQkvKiBUcnVlIGxlbmd0aCB3YXMgb25seSBhdmFpbGFibGUgb24gdGhlIGxhc3QgcGt0ICovCi0JCXNrYl9wdXQoc2tiLCBidWZmZXItPmxyb19sZW5ndGgpOwotCX0gZWxzZSB7Ci0JCWlmIChsZW5ndGggPiByZHNfcmluZy0+c2tiX3NpemUpCi0JCQlza2JfcHV0KHNrYiwgcmRzX3JpbmctPnNrYl9zaXplKTsKLQkJZWxzZQotCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CisJaWYgKGxlbmd0aCA+IHJkc19yaW5nLT5za2Jfc2l6ZSkKKwkJc2tiX3B1dChza2IsIHJkc19yaW5nLT5za2Jfc2l6ZSk7CisJZWxzZQorCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAotCQlwa3Rfb2Zmc2V0ID0gbmV0eGVuX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSk7Ci0JCWlmIChwa3Rfb2Zmc2V0KQotCQkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKLQl9CisKKwlpZiAocGt0X29mZnNldCkKKwkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQkvKgotCSAqIHJ4IGJ1ZmZlciBjaGFpbmluZyBpcyBkaXNhYmxlZCwgd2FsayBhbmQgZnJlZQotCSAqIGFueSBzcHVyaW91cyByeCBidWZmZXIgY2hhaW4uCi0JICovCi0JaWYgKGZyYWdfZGVzYykgewotCQl1MTYgaSwgbnJfZnJhZ3MgPSBkZXNjLT5ucl9mcmFnczsKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7Ci0JCQlpbmRleCA9IGxlMTZfdG9fY3B1KGZyYWdfZGVzYy0+ZnJhZ19oYW5kbGVzW2ldKTsKLQkJCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsCi0JCQkJCXJkc19yaW5nLCBpbmRleCwgY2tzdW0pOwotCQkJaWYgKHNrYikKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4ZHJvcHBlZCsrOwotCX0gZWxzZSB7Ci0JCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7CisJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CiAKLQkJYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOwotCX0KKwlyZXR1cm4gYnVmZmVyOwogfQogCi0vKiBQcm9jZXNzIFJlY2VpdmUgc3RhdHVzIHJpbmcgKi8KLXUzMiBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwgaW50IG1heCkKKyNkZWZpbmUgbmV0eGVuX21lcmdlX3J4X2J1ZmZlcnMobGlzdCwgaGVhZCkgXAorCWRvIHsgbGlzdF9zcGxpY2VfdGFpbF9pbml0KGxpc3QsIGhlYWQpOyB9IHdoaWxlICgwKTsKKworaW50CituZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpCiB7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJihhZGFwdGVyLT5yZWN2X2N0eFtjdHhpZF0pOwotCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkID0gcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkOwotCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYywgKmZyYWdfZGVzYzsKLQl1MzIgY29uc3VtZXIgPSByZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyOwotCWludCBjb3VudCA9IDAsIHJpbmc7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2M7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4YnVmOworCisJdTMyIGNvbnN1bWVyID0gc2RzX3JpbmctPmNvbnN1bWVyOworCisJaW50IGNvdW50ID0gMDsKIAl1NjQgc3RzX2RhdGE7Ci0JdTE2IG9wY29kZTsKKwlpbnQgb3Bjb2RlLCByaW5nLCBpbmRleCwgbGVuZ3RoLCBja3N1bSwgcGt0X29mZnNldDsKIAogCXdoaWxlIChjb3VudCA8IG1heCkgewotCQlkZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07Ci0JCWlmICghKG5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpICYgU1RBVFVTX09XTkVSX0hPU1QpKSB7Ci0JCQlEUFJJTlRLKEVSUiwgImRlc2MgJXAgb3duZWRieSAleFxuIiwgZGVzYywKLQkJCQluZXR4ZW5fZ2V0X3N0c19vd25lcihkZXNjKSk7Ci0JCQlicmVhazsKLQkJfQotCisJCWRlc2MgPSAmc2RzX3JpbmctPmRlc2NfaGVhZFtjb25zdW1lcl07CiAJCXN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YSk7CisKKwkJaWYgKCEoc3RzX2RhdGEgJiBTVEFUVVNfT1dORVJfSE9TVCkpCisJCQlicmVhazsKKworCQlyaW5nICAgPSBuZXR4ZW5fZ2V0X3N0c190eXBlKHN0c19kYXRhKTsKKwkJaWYgKHJpbmcgPiBSQ1ZfUklOR19KVU1CTykKKwkJCWNvbnRpbnVlOworCiAJCW9wY29kZSA9IG5ldHhlbl9nZXRfc3RzX29wY29kZShzdHNfZGF0YSk7Ci0JCWZyYWdfZGVzYyA9IE5VTEw7Ci0JCWlmIChvcGNvZGUgPT0gTkVUWEVOX05JQ19SWFBLVF9ERVNDKSB7Ci0JCQlpZiAoZGVzYy0+bnJfZnJhZ3MpIHsKLQkJCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLAotCQkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQkJCWZyYWdfZGVzYyA9ICZkZXNjX2hlYWRbY29uc3VtZXJdOwotCQkJCW5ldHhlbl9zZXRfc3RzX293bmVyKGZyYWdfZGVzYywKLQkJCQkJCVNUQVRVU19PV05FUl9QSEFOVE9NKTsKLQkJCX0KLQkJfQogCi0JCW5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCBjdHhpZCwgZGVzYywgZnJhZ19kZXNjKTsKKwkJaW5kZXggID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhKTsKKwkJbGVuZ3RoID0gbmV0eGVuX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpOworCQlja3N1bSAgPSBuZXR4ZW5fZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEpOworCQlwa3Rfb2Zmc2V0ID0gbmV0eGVuX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSk7CiAKLQkJbmV0eGVuX3NldF9zdHNfb3duZXIoZGVzYywgU1RBVFVTX09XTkVSX1BIQU5UT00pOworCQlyeGJ1ZiA9IG5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCByaW5nLCBpbmRleCwKKwkJCQlsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0KTsKIAotCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLAotCQkJCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJaWYgKHJ4YnVmKQorCQkJbGlzdF9hZGRfdGFpbCgmcnhidWYtPmxpc3QsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKTsKKworCQlkZXNjLT5zdGF0dXNfZGVzY19kYXRhID0gY3B1X3RvX2xlNjQoU1RBVFVTX09XTkVSX1BIQU5UT00pOworCisJCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsIHNkc19yaW5nLT5udW1fZGVzYyk7CiAJCWNvdW50Kys7CiAJfQotCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspCi0JCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnNfbm9kYihhZGFwdGVyLCBjdHhpZCwgcmluZyk7CiAKLQkvKiB1cGRhdGUgdGhlIGNvbnN1bWVyIGluZGV4IGluIHBoYW50b20gKi8KKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9CisJCQkmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOworCisJCWlmICghbGlzdF9lbXB0eSgmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSkpIHsKKwkJCWxpc3RfZm9yX2VhY2goY3VyLCAmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSkgeworCQkJCXJ4YnVmID0gbGlzdF9lbnRyeShjdXIsCisJCQkJCQlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CisJCQkJbmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgcnhidWYpOworCQkJfQorCQkJc3Bpbl9sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCQluZXR4ZW5fbWVyZ2VfcnhfYnVmZmVycygmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSwKKwkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCX0KKworCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoYWRhcHRlciwgcmRzX3JpbmcpOworCX0KKwogCWlmIChjb3VudCkgewotCQlyZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyID0gY29uc3VtZXI7Ci0KLQkJLyogV2luZG93ID0gMSAqLworCQlzZHNfcmluZy0+Y29uc3VtZXIgPSBjb25zdW1lcjsKIAkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyLCBjb25zdW1lcik7CisJCQkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIsIGNvbnN1bWVyKTsKIAl9CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0xMzY2LDcgKzk5OCwxMSBAQAogCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmZyYWc7CiAJaW50IGRvbmUgPSAwOwogCisJaWYgKCFzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spKQorCQlyZXR1cm4gMTsKKwogCWxhc3RfY29uc3VtZXIgPSBhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcjsKKwliYXJyaWVyKCk7IC8qIGNtZF9jb25zdW1lciBjYW4gY2hhbmdlIHVuZGVybmVhdGggKi8KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CiAKIAl3aGlsZSAobGFzdF9jb25zdW1lciAhPSBjb25zdW1lcikgewpAQCAtMTM4OSw3ICsxMDI1LDcgQEAKIAkJfQogCiAJCWxhc3RfY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChsYXN0X2NvbnN1bWVyLAotCQkJCQkgICAgICAgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCQkJCQkgICAgICAgYWRhcHRlci0+bnVtX3R4ZCk7CiAJCWlmICgrK2NvdW50ID49IE1BWF9TVEFUVVNfSEFORExFKQogCQkJYnJlYWs7CiAJfQpAQCAtMTQxNyw3NSArMTA1Myw1NSBAQAogCSAqIFRoZXJlIGlzIHN0aWxsIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBob3N0IGNvdWxkIG1pc3MgYW4KIAkgKiBpbnRlcnJ1cHQuIFRoZSBjYXJkIGhhcyB0byB0YWtlIGNhcmUgb2YgdGhpcy4KIAkgKi8KKwliYXJyaWVyKCk7IC8qIGNtZF9jb25zdW1lciBjYW4gY2hhbmdlIHVuZGVybmVhdGggKi8KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CiAJZG9uZSA9IChsYXN0X2NvbnN1bWVyID09IGNvbnN1bWVyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAKIAlyZXR1cm4gKGRvbmUpOwogfQogCi0vKgotICogbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyBwdXRzIGJ1ZmZlciBpbiB0aGUgUGhhbnRvbSBtZW1vcnkKLSAqLwotdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGN0eCwgdTMyIHJpbmdpZCkKK3ZvaWQKK25ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eF0pOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9IE5VTEw7Ci0JdWludCBwcm9kdWNlcjsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IGNvdW50ID0gMDsKKwlpbnQgcHJvZHVjZXIsIGNvdW50ID0gMDsKIAluZXR4ZW5fY3R4X21zZyBtc2cgPSAwOwotCWRtYV9hZGRyX3QgZG1hOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKLQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmdpZF07Ci0KIAlwcm9kdWNlciA9IHJkc19yaW5nLT5wcm9kdWNlcjsKLQloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CiAKLQkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KKwlzcGluX2xvY2soJnJkc19yaW5nLT5sb2NrKTsKKwloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihyZHNfcmluZy0+c2tiX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCWJyZWFrOwotCQl9CisJCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCi0JCWlmICghYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoKQotCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQotCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCi0JCQkJcmRzX3JpbmctPmRtYV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlicmVhazsKKwkJaWYgKCFidWZmZXItPnNrYikgeworCQkJaWYgKG5ldHhlbl9hbGxvY19yeF9za2IoYWRhcHRlciwgcmRzX3JpbmcsIGJ1ZmZlcikpCisJCQkJYnJlYWs7CiAJCX0KIAogCQljb3VudCsrOwotCQlidWZmZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAKLQkJYnVmZmVyLT5za2IgPSBza2I7Ci0JCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0JVU1k7Ci0JCWJ1ZmZlci0+ZG1hID0gZG1hOwotCiAJCS8qIG1ha2UgYSByY3YgZGVzY3JpcHRvciAgKi8KIAkJcGRlc2MgPSAmcmRzX3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07Ci0JCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGRtYSk7CisJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOwogCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAKLQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm51bV9kZXNjKTsKIAl9Ci0JLyogaWYgd2UgZGlkIGFsbG9jYXRlIGJ1ZmZlcnMsIHRoZW4gd3JpdGUgdGhlIGNvdW50IHRvIFBoYW50b20gKi8KKwlzcGluX3VubG9jaygmcmRzX3JpbmctPmxvY2spOworCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQkJLyogV2luZG93ID0gMSAqLwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCi0JCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudC0xKSk7CisJCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5udW1fZGVzYy0xKSk7CiAKIAkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewogCQkJLyoKQEAgLTE0OTYsOSArMTExMiw4IEBACiAJCQluZXR4ZW5fc2V0X21zZ19wZWdfaWQobXNnLCBORVRYRU5fUkNWX1BFR19EQl9JRCk7CiAJCQluZXR4ZW5fc2V0X21zZ19wcml2aWQobXNnKTsKIAkJCW5ldHhlbl9zZXRfbXNnX2NvdW50KG1zZywKLQkJCQkJICAgICAoKHByb2R1Y2VyIC0KLQkJCQkJICAgICAgIDEpICYgKHJkc19yaW5nLT4KLQkJCQkJCSAgICAgbWF4X3J4X2Rlc2NfY291bnQgLSAxKSkpOworCQkJCQkgICAgICgocHJvZHVjZXIgLSAxKSAmCisJCQkJCSAgICAgIChyZHNfcmluZy0+bnVtX2Rlc2MgLSAxKSkpOwogCQkJbmV0eGVuX3NldF9tc2dfY3R4aWQobXNnLCBhZGFwdGVyLT5wb3J0bnVtKTsKIAkJCW5ldHhlbl9zZXRfbXNnX29wY29kZShtc2csIE5FVFhFTl9SQ1ZfUFJPRFVDRVIocmluZ2lkKSk7CiAJCQl3cml0ZWwobXNnLApAQCAtMTUwOCw2OCArMTEyMyw0OSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdWludDMyX3QgY3R4LCB1aW50MzJfdCByaW5naWQpCitzdGF0aWMgdm9pZAorbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7Ci0Jc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0gTlVMTDsKLQl1MzIgcHJvZHVjZXI7CiAJc3RydWN0IHJjdl9kZXNjICpwZGVzYzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOwotCWludCBjb3VudCA9IDA7CisJaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlkbWFfYWRkcl90IGRtYTsKLQotCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ2lkXTsKIAogCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOworCWlmICghc3Bpbl90cnlsb2NrKCZyZHNfcmluZy0+bG9jaykpCisJCXJldHVybjsKKwogCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKLQkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHJkc19yaW5nLT5za2Jfc2l6ZSk7Ci0JCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJYnJlYWs7Ci0JCX0KKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CiAKLQkJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCi0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCi0JCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKLQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZG1hKSkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCWJyZWFrOworCQlpZiAoIWJ1ZmZlci0+c2tiKSB7CisJCQlpZiAobmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgYnVmZmVyKSkKKwkJCQlicmVhazsKIAkJfQogCiAJCWNvdW50Kys7Ci0JCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKIAotCQlidWZmZXItPnNrYiA9IHNrYjsKLQkJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfQlVTWTsKLQkJYnVmZmVyLT5kbWEgPSBkbWE7Ci0KIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwogCQlwZGVzYyA9ICZyZHNfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKIAkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOwogCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAotCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bnVtX2Rlc2MpOwogCX0KIAotCS8qIGlmIHdlIGRpZCBhbGxvY2F0ZSBidWZmZXJzLCB0aGVuIHdyaXRlIHRoZSBjb3VudCB0byBQaGFudG9tICovCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQkJLyogV2luZG93ID0gMSAqLwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKLQkJCQkocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50LTEpKTsKKwkJCQkocHJvZHVjZXIgLSAxKSAmIChyZHNfcmluZy0+bnVtX2Rlc2MgLSAxKSk7CiAJCQl3bWIoKTsKIAl9CisJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKIH0KIAogdm9pZCBuZXR4ZW5fbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCBjMTcyYjZlLi4xYWY0NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiAgTWFpbiBzb3VyY2UgZmlsZSBmb3IgTmV0WGVuIE5JQyBEcml2ZXIgb24gTGludXgKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTk3LDIwICs5NCw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXR4ZW5fcGNpX3RibCk7CiAKLS8qCi0gKiBJbiBuZXR4ZW5fbmljX2Rvd24oKSwgd2UgbXVzdCB3YWl0IGZvciBhbnkgcGVuZGluZyBjYWxsYmFjayByZXF1ZXN0cyBpbnRvCi0gKiBuZXR4ZW5fd2F0Y2hkb2dfdGFzaygpIHRvIGNvbXBsZXRlOyBlZyBvdGhlcndpc2UgdGhlIHdhdGNoZG9nX3RpbWVyIGNvdWxkIGJlCi0gKiByZWVuYWJsZWQgcmlnaHQgYWZ0ZXIgaXQgaXMgZGVsZXRlZCBpbiBuZXR4ZW5fbmljX2Rvd24oKS4KLSAqIEZMVVNIX1NDSEVEVUxFRF9XT1JLKCkgIGRvZXMgdGhpcyBzeW5jaHJvbml6YXRpb24uCi0gKgotICogTm9ybWFsbHksIHNjaGVkdWxlX3dvcmsoKS9mbHVzaF9zY2hlZHVsZWRfd29yaygpIGNvdWxkIGhhdmUgd29ya2VkLCBidXQKLSAqIG5ldHhlbl9uaWNfY2xvc2UoKSBpcyBpbnZva2VkIHdpdGgga2VybmVsIHJ0bmwgbG9jayBoZWxkLiBuZXRpZl9jYXJyaWVyX29mZigpCi0gKiBjYWxsIGluIG5ldHhlbl9uaWNfY2xvc2UoKSB0cmlnZ2VycyBhIHNjaGVkdWxlX3dvcmsoJmxpbmt3YXRjaF93b3JrKSwgYW5kIGEKLSAqIHN1YnNlcXVlbnQgY2FsbCB0byBmbHVzaF9zY2hlZHVsZWRfd29yaygpIGluIG5ldHhlbl9uaWNfZG93bigpIHdvdWxkIGNhdXNlCi0gKiBsaW5rd2F0Y2hfZXZlbnQoKSB0byBiZSBleGVjdXRlZCB3aGljaCBhbHNvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHJ0bmwKLSAqIGxvY2sgdGh1cyBjYXVzaW5nIGEgZGVhZGxvY2suCi0gKi8KLQogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR4ZW5fd29ya3E7CiAjZGVmaW5lIFNDSEVEVUxFX1dPUksodHApCXF1ZXVlX3dvcmsobmV0eGVuX3dvcmtxLCB0cCkKICNkZWZpbmUgRkxVU0hfU0NIRURVTEVEX1dPUksoKQlmbHVzaF93b3JrcXVldWUobmV0eGVuX3dvcmtxKQpAQCAtMTUyLDEzMCArMTM1LDE0OCBAQAogCiBzdGF0aWMgc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHJbXSA9IE5YX0xFR0FDWV9JTlRSX0NPTkZJRzsKIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQogewotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMCk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19lbmFibGVfaW50KHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKIHsKLQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIGFkYXB0ZXItPmNyYl9pbnRyX21hc2ssIDB4MSk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAweDEpOwogCiAJaWYgKCFORVRYRU5fSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKIAkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAogCQkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKIH0KIAorc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2FkZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gKG51bV9vbmxpbmVfY3B1cygpID49IDQpID8gNCA6IDI7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gMTsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmc2RzX3JpbmctPm5hcGksCisJCQkJbmV0eGVuX25pY19wb2xsLCBORVRYRU5fTkVUREVWX1dFSUdIVCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25hcGlfZW5hYmxlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluYXBpX2VuYWJsZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2Rpc2FibGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc2RzX3JpbmcpOworCQluYXBpX2Rpc2FibGUoJnNkc19yaW5nLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbnhfc2V0X2RtYV9tYXNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCByZXZpc2lvbl9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IGVycjsKLQl1aW50NjRfdCBtYXNrOworCXVpbnQ2NF90IG1hc2ssIGNtYXNrOwogCi0jaWZkZWYgQ09ORklHX0lBNjQKLQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotI2Vsc2UKLQlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApIHsKLQkJLyogc2hvdWxkIGdvIHRvIERNQV82NEJJVF9NQVNLICovCi0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AzX0EyKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AyX0MxKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM1QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzVCSVRfTUFTSzsKLQl9IGVsc2UgewotCQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotCQltYXNrID0gRE1BXzMyQklUX01BU0s7Ci0JCWdvdG8gc2V0XzMyX2JpdF9tYXNrOwotCX0KKwlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMDsKIAorCW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKIAkvKgogCSAqIENvbnNpc3RlbnQgRE1BIG1hc2sgaXMgc2V0IHRvIDMyIGJpdCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBzZXQgdG8KIAkgKiAzNSBiaXRzLiBGb3IgUDMgYWxzbyBsZWF2ZSBpdCBhdCAzMiBiaXRzIGZvciBub3cuIE9ubHkgdGhlIHJpbmdzCiAJICogY29tZSBvZmYgdGhpcyBwb29sLgogCSAqLworCWNtYXNrID0gRE1BXzMyQklUX01BU0s7CisKKyNpZm5kZWYgQ09ORklHX0lBNjQKKwlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApCisJCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKKwllbHNlIGlmIChyZXZpc2lvbl9pZCA9PSBOWF9QMl9DMSkKKwkJbWFzayA9IERNQV8zNUJJVF9NQVNLOworI2VuZGlmCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzaykgPT0gMCAmJgotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spID09IDApIHsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIGNtYXNrKSA9PSAwKSB7CiAJCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAxOwogCQlyZXR1cm4gMDsKIAl9Ci1zZXRfMzJfYml0X21hc2s6Ci0jZW5kaWYgLyogQ09ORklHX0lBNjQgKi8KIAotCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmICghZXJyKQotCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmIChlcnIpIHsKLQkJRFBSSU5USyhFUlIsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nOiVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOworfQorCisvKiBVcGRhdGUgYWRkcmVzc2FibGUgcmFuZ2UgaWYgZmlybXdhcmUgc3VwcG9ydHMgaXQgKi8KK3N0YXRpYyBpbnQKK254X3VwZGF0ZV9kbWFfbWFzayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNoYW5nZSwgc2hpZnQsIGVycjsKKwl1aW50NjRfdCBtYXNrLCBvbGRfbWFzazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwljaGFuZ2UgPSAwOworCisJc2hpZnQgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQpOworCWlmIChzaGlmdCA+PSAzMikKKwkJcmV0dXJuIDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSAmJiAoc2hpZnQgPiA5KSkKKwkJY2hhbmdlID0gMTsKKwllbHNlIGlmICgoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID09IE5YX1AyX0MxKSAmJiAoc2hpZnQgPD0gNCkpCisJCWNoYW5nZSA9IDE7CisKKwlpZiAoY2hhbmdlKSB7CisJCW9sZF9tYXNrID0gcGRldi0+ZG1hX21hc2s7CisJCW1hc2sgPSAoMVVMTDw8KDMyK3NoaWZ0KSkgLSAxOworCisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzayk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBvbGRfbWFzayk7CiAJfQogCi0JYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldHhlbl9jaGVja19vcHRpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19ITUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfWEdfTE9NOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDRfTFA6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19JTUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9RVDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19TRlBfQ1Q6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgorCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCWVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWFkYXB0ZXItPm51bV9yeGQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19ITUVaOgorCWVsc2UKIAkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQlicmVhazsKIAotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQjoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0JfTU06Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQkJYnJlYWs7CisJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVDsKKwlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUzsKKwlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwogCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRzoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBib2FyZCB0eXBlKDB4JXgpXG4iLAotCQkJCWFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1Q7Ci0JYWRhcHRlci0+bWF4X2p1bWJvX3J4X2Rlc2NfY291bnQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOwotCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwotCi0JYWRhcHRlci0+bWF4X3Bvc3NpYmxlX3Jzc19yaW5ncyA9IDE7CiAJcmV0dXJuOwogfQogCkBAIC0zMzYsNyArMzM3LDcgQEAKIHsKIAl1MzIgdmFsLCBkYXRhOwogCi0JdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGU7CisJdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CiAJaWYgKCh2YWwgPT0gTkVUWEVOX0JSRFRZUEVfUDNfSE1FWikgfHwKIAkJKHZhbCA9PSBORVRYRU5fQlJEVFlQRV9QM19YR19MT00pKSB7CiAJCWlmIChwb3J0X21vZGUgPT0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUCkgewpAQCAtNDU0LDQyICs0NTUsNDU4IEBACiAjZW5kaWYKIH07CiAKLS8qCi0gKiBuZXR4ZW5fbmljX3Byb2JlKCkKLSAqCi0gKiBUaGUgTGludXggc3lzdGVtIHdpbGwgaW52b2tlIHRoaXMgYWZ0ZXIgaWRlbnRpZnlpbmcgdGhlIHZlbmRvciBJRCBhbmQKLSAqIGRldmljZSBJZCBpbiB0aGUgcGNpX3RibCBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuCi0gKgotICogQSBxdWFkIHBvcnQgY2FyZCBoYXMgb25lIG9wZXJhdGlvbmFsIFBDSSBjb25maWcgc3BhY2UsIChmdW5jdGlvbiAwKSwKLSAqIHdoaWNoIGlzIHVzZWQgdG8gYWNjZXNzIGFsbCBmb3VyIHBvcnRzLgotICoKLSAqIFRoaXMgcm91dGluZSB3aWxsIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIsIGFuZCBzZXR1cCB0aGUgZ2xvYmFsIHBhcmFtZXRlcnMKLSAqIGFsb25nIHdpdGggdGhlIHBvcnQncyBzcGVjaWZpYyBzdHJ1Y3R1cmUuCi0gKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fc2V0dXBfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+KE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQgfCBORVRYRU5fTklDX01TSVhfRU5BQkxFRCk7CisJYWRhcHRlci0+aW50cl9zY2hlbWUgPSAtMTsKKwlhZGFwdGVyLT5tc2lfbW9kZSA9IC0xOworCisJaWYgKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKKwkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody5wY2lfZnVuY107CisJZWxzZQorCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbMF07CisJYWRhcHRlci0+bGVnYWN5X2ludHIuaW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnID0gbGVnYWN5X2ludHJwLT50Z3Rfc3RhdHVzX3JlZzsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3RfbWFza19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9tYXNrX3JlZzsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci5wY2lfaW50X3JlZyA9IGxlZ2FjeV9pbnRycC0+cGNpX2ludF9yZWc7CisKKwluZXR4ZW5fc2V0X21zaXhfYml0KHBkZXYsIDApOworCisJaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7CisKKwkJbmV0eGVuX2luaXRfbXNpeF9lbnRyaWVzKGFkYXB0ZXIpOworCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKKwkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKKwkJCWdvdG8gcmVxdWVzdF9tc2k7CisKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7CisJCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKKworCX0gZWxzZSB7CityZXF1ZXN0X21zaToKKwkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKKwkJfSBlbHNlCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOworCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fY2xlYW51cF9wY2lfbWFwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+YWh3LmRiX2Jhc2UgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcuZGJfYmFzZSk7CisJaWYgKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKKwlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOworCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UyICE9IE5VTEwpCisJCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9zZXR1cF9wY2lfbWFwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIxID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmRiX3B0ciA9IE5VTEw7CisKKwl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4gPSAwLCBwY2lfbGVuMCA9IDA7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOworCisJaW50IGVyciA9IDA7CisKKwkvKgorCSAqIFNldCB0aGUgQ1JCIHdpbmRvdyB0byBpbnZhbGlkLiBJZiBhbnkgcmVnaXN0ZXIgaW4gd2luZG93IDAgaXMKKwkgKiBhY2Nlc3NlZCBpdCBzaG91bGQgc2V0IHRoZSB3aW5kb3cgdG8gMCBhbmQgdGhlbiByZXNldCBpdCB0byAxLgorCSAqLworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OworCWFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID0gLTE7CisJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAtMTsKKworCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLworCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLworCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCXBjaV9sZW4wID0gMDsKKworCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOworCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKKwlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOworCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKKworCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCisJaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7CisJCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCisJCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7CisJCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCisJCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKKwkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCisJCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8yTUJfU0laRSkgeworCQlhZGFwdGVyLT5od193cml0ZV93eCA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk07CisJCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk07CisJCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzJNOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlID0KKwkJCW5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTTsKKwkJYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplID0gbmV0eGVuX25pY19wY2lfcmVhZF9ub3JtYWxpemVfMk07CisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPQorCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfbm9ybWFsaXplXzJNOworCQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk07CisJCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzJNOworCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNOworCisJCW1lbV9wdHIwID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCQlpZiAobWVtX3B0cjAgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBQQ0kgYmFyIDBcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcGNpX2xlbjAgPSBtZW1fbGVuOworCisJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKKwkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOworCisJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCisJCQkocGNpX2Z1bmMgKiAweDIwKTsKKwkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOworCQlpZiAocGNpX2Z1bmMgPCA0KQorCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jICogMHgyMCk7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9CisJCQkJCTB4QTAgKyAoKHBjaV9mdW5jIC0gNCkgKiAweDEwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOworCisJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOworCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOworCWFkYXB0ZXItPmFody5wY2lfYmFzZTEgPSBtZW1fcHRyMTsKKwlhZGFwdGVyLT5haHcucGNpX2Jhc2UyID0gbWVtX3B0cjI7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJZ290byBza2lwX2Rvb3JiZWxsOworCisJZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsJLyogZG9vcmJlbGwgaXMgb24gYmFyIDQgKi8KKwlkYl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpOworCisJaWYgKGRiX2xlbiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3JiZWxsIGlzIGRpc2FibGVkXG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7CisJaWYgKCFkYl9wdHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGRvb3JiZWxsIG1hcC4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCitza2lwX2Rvb3JiZWxsOgorCWFkYXB0ZXItPmFody5kYl9iYXNlID0gZGJfcHRyOworCWFkYXB0ZXItPmFody5kYl9sZW4gPSBkYl9sZW47CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fc3RhcnRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCB2YWwsIGVyciwgZmlyc3RfYm9vdDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpbnQgZmlyc3RfZHJpdmVyID0gMDsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCisJCQlmaXJzdF9kcml2ZXIgPSAxOworCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCisJCQlmaXJzdF9kcml2ZXIgPSAxOworCX0KKworCWlmICghZmlyc3RfZHJpdmVyKQorCQlyZXR1cm4gMDsKKworCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSk7CisKKwllcnIgPSBuZXR4ZW5fY2hlY2tfaHdfaW5pdChhZGFwdGVyLCBmaXJzdF9ib290KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIGluIGluaXQgSFcgaW5pdCBzZXF1ZW5jZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgeworCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJCUNSQl9DTURQRUdfU1RBVEUsIDApOworCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBDUkJfRE1BX1NISUZULCAweDU1NTU1NTU1KTsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7CisKKwluZXR4ZW5fbG9hZF9maXJtd2FyZShhZGFwdGVyKTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisKKwkJLyogSW5pdGlhbGl6ZSBtdWx0aWNhc3QgYWRkciBwb29sIG93bmVycyAqLworCQl2YWwgPSAweDc2NTQ7CisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJCXZhbCB8PSAweDBmMDAwMDAwOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQlORVRYRU5fTUFDX0FERFJfQ05UTF9SRUcsIHZhbCk7CisKKwl9CisKKwllcnIgPSBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgorCSAqLworCXZhbCA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKKwkJfCAoKF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDw8IDgpKQorCQl8IChfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OKTsKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgdmFsKTsKKworCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KKwllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOworCWlmIChlcnIpIHsKKwkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3JlcXVlc3RfaXJxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpcnFfaGFuZGxlcl90IGhhbmRsZXI7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCBlcnIsIHJpbmc7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKChhZGFwdGVyLT5tc2lfbW9kZSAhPSBNU0lfTU9ERV9NVUxUSUZVTkMpIHx8CisJCShhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBpbnRlcnJ1cHQgc2NoZW1lIGlzICIKKwkJCQkiaW5jb21wYXRpYmxlIHdpdGggZHJpdmVyXG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CisJCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQloYW5kbGVyID0gbmV0eGVuX21zaXhfaW50cjsKKwllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCisJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpX2ludHI7CisJZWxzZSB7CisJCWZsYWdzIHw9IElSUUZfU0hBUkVEOworCQloYW5kbGVyID0gbmV0eGVuX2ludHI7CisJfQorCWFkYXB0ZXItPmlycSA9IG5ldGRldi0+aXJxOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlzcHJpbnRmKHNkc19yaW5nLT5uYW1lLCAiJTE2c1slZF0iLCBuZXRkZXYtPm5hbWUsIHJpbmcpOworCQllcnIgPSByZXF1ZXN0X2lycShzZHNfcmluZy0+aXJxLCBoYW5kbGVyLAorCQkJCSAgZmxhZ3MsIHNkc19yaW5nLT5uYW1lLCBzZHNfcmluZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19mcmVlX2lycShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlmcmVlX2lycShzZHNfcmluZy0+aXJxLCBzZHNfcmluZyk7CisJfQorfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3VwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkcik7CisKKwluZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoYWRhcHRlcik7CisKKwluZXR4ZW5fc2V0X211bHRpY2FzdF9saXN0KG5ldGRldik7CisJaWYgKGFkYXB0ZXItPnNldF9tdHUpCisJCWFkYXB0ZXItPnNldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOworCisJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA+IDEpCisJCW5ldHhlbl9jb25maWdfcnNzKGFkYXB0ZXIsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2Rvd24oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+c3RvcF9wb3J0KQorCQlhZGFwdGVyLT5zdG9wX3BvcnQoYWRhcHRlcik7CisKKwluZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOworCisJRkxVU0hfU0NIRURVTEVEX1dPUksoKTsKKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworfQorCisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfYXR0YWNoKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgZXJyLCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKworCWVyciA9IG5ldHhlbl9pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKKwkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKKworCWVyciA9IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CisKKwllcnIgPSBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaW4gc2V0dGluZyBodyByZXNvdXJjZXNcbiIsCisJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfc3c7CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgeworCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIgPQorCQkJY3JiX2NtZF9wcm9kdWNlclthZGFwdGVyLT5wb3J0bnVtXTsKKwkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0KKwkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV07CisKKwkJbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIDApOworCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoYWRhcHRlciwgMCk7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmRzX3JpbmcpOworCX0KKworCWVyciA9IG5ldHhlbl9uaWNfcmVxdWVzdF9pcnEoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIHNldHVwIGludGVycnVwdFxuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKKwl9CisKKwlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcnhidWY6CisJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKKwluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfb3V0X2ZyZWVfc3c6CisJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2RldGFjaChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbmV0eGVuX25pY19mcmVlX2lycShhZGFwdGVyKTsKKworCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKKworCWFkYXB0ZXItPmlzX3VwID0gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIG5ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIxID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKLQotCi0JdTggX19pb21lbSAqZGJfcHRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4sIHBjaV9sZW4wID0gMDsKIAlpbnQgaSA9IDAsIGVycjsKLQlpbnQgZmlyc3RfZHJpdmVyLCBmaXJzdF9ib290OwotCXUzMiB2YWw7CiAJaW50IHBjaV9mdW5jX2lkID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwotCXN0cnVjdCBuZXR4ZW5fbGVnYWN5X2ludHJfc2V0ICpsZWdhY3lfaW50cnA7CiAJdWludDhfdCByZXZpc2lvbl9pZDsKIAotCWlmIChwY2lfZnVuY19pZCA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKLQogCWlmIChwZGV2LT5jbGFzcyAhPSAweDAyMDAwMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiTmV0WGVuIGZ1bmN0aW9uICVkLCBjbGFzcyAleCB3aWxsIG5vdCAiCiAJCQkJImJlIGVuYWJsZWQuXG4iLHBjaV9mdW5jX2lkLCBwZGV2LT5jbGFzcyk7CkBAIC01MzksMTMwICs5NTYsMTQgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7Ci0JYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAtMTsKLQlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IC0xOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAotCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLwotCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLwotCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwotCXBjaV9sZW4wID0gMDsKLQotCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOwotCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKLQlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOwotCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKLQotCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCi0JaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7Ci0JCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7Ci0JCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IEZJUlNUX1BBR0VfR1JPVVBfU1RBUlQ7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSBGSVJTVF9QQUdFX0dST1VQX0VORDsKLQl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCi0JCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzJNQl9TSVpFKSB7Ci0JCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTTsKLQkJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTTsKLQkJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPQotCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNOwotCQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9Ci0JCQluZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk07Ci0JCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTTsKLQkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk07Ci0JCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk07Ci0KLQkJbWVtX3B0cjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7Ci0JCWlmIChtZW1fcHRyMCA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFBDSSBiYXIgMFxuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXBjaV9sZW4wID0gbWVtX2xlbjsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCi0JCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKLQkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOwotCi0JCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCi0JCQkocGNpX2Z1bmNfaWQgKiAweDIwKTsKLQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOwotCQlpZiAocGNpX2Z1bmNfaWQgPCA0KQotCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jX2lkICogMHgyMCk7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9Ci0JCQkJCTB4QTAgKyAoKHBjaV9mdW5jX2lkIC0gNCkgKiAweDEwKTsKLQl9IGVsc2UgewotCQllcnIgPSAtRUlPOworCWVyciA9IG5ldHhlbl9zZXR1cF9wY2lfbWFwKGFkYXB0ZXIpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKLQl9Ci0KLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOwotCi0JZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsJLyogZG9vcmJlbGwgaXMgb24gYmFyIDQgKi8KLQlkYl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpOwotCi0JaWYgKGRiX2xlbiA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3JiZWxsIGlzIGRpc2FibGVkXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQl9Ci0JRFBSSU5USyhJTkZPLCAiZG9vcmJlbGwgaW9yZW1hcCBmcm9tICVseCBhIHNpemUgb2YgJWx4XG4iLCBkYl9iYXNlLAotCQlkYl9sZW4pOwotCi0JZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7Ci0JaWYgKCFkYl9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGRvb3JiZWxsIG1hcC4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQl9Ci0JRFBSSU5USyhJTkZPLCAiZG9vcmJlbGwgaW9yZW1hcGVkIGF0ICVwXG4iLCBkYl9wdHIpOwotCi0JYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOwotCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOwotCWFkYXB0ZXItPmFody5maXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKLQlhZGFwdGVyLT5haHcuZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCWFkYXB0ZXItPmFody5wY2lfYmFzZTEgPSBtZW1fcHRyMTsKLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UyID0gbWVtX3B0cjI7Ci0JYWRhcHRlci0+YWh3LmRiX2Jhc2UgPSBkYl9wdHI7Ci0JYWRhcHRlci0+YWh3LmRiX2xlbiA9IGRiX2xlbjsKLQotCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCi0JCQluZXR4ZW5fbmljX3BvbGwsIE5FVFhFTl9ORVRERVZfV0VJR0hUKTsKLQotCWlmIChyZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKLQkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW3BjaV9mdW5jX2lkXTsKLQllbHNlCi0JCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50clswXTsKLQotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLmludF92ZWNfYml0ID0gbGVnYWN5X2ludHJwLT5pbnRfdmVjX2JpdDsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X3N0YXR1c19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X21hc2tfcmVnID0gbGVnYWN5X2ludHJwLT50Z3RfbWFza19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIucGNpX2ludF9yZWcgPSBsZWdhY3lfaW50cnAtPnBjaV9pbnRfcmVnOwotCi0JLyogdGhpcyB3aWxsIGJlIHJlYWQgZnJvbSBGVyBsYXRlciAqLwotCWFkYXB0ZXItPmludHJfc2NoZW1lID0gLTE7Ci0JYWRhcHRlci0+bXNpX21vZGUgPSAtMTsKIAogCS8qIFRoaXMgd2lsbCBiZSByZXNldCBmb3IgbWV6eiBjYXJkcyAgKi8KIAlhZGFwdGVyLT5wb3J0bnVtID0gcGNpX2Z1bmNfaWQ7Ci0JYWRhcHRlci0+c3RhdHVzICAgJj0gfk5FVFhFTl9ORVRERVZfU1RBVFVTOwogCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwogCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAwOwogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpCkBAIC02OTAsMTIgKzk5MSw2IEBACiAJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJfQogCi0JLyoKLQkgKiBTZXQgdGhlIENSQiB3aW5kb3cgdG8gaW52YWxpZC4gSWYgYW55IHJlZ2lzdGVyIGluIHdpbmRvdyAwIGlzCi0JICogYWNjZXNzZWQgaXQgc2hvdWxkIHNldCB0aGUgd2luZG93IHRvIDAgYW5kIHRoZW4gcmVzZXQgaXQgdG8gMS4KLQkgKi8KLQlhZGFwdGVyLT5jdXJyX3dpbmRvdyA9IDI1NTsKLQogCWlmIChuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpICE9IDApIHsKIAkJcHJpbnRrKCIlczogRXJyb3IgZ2V0dGluZyBib2FyZCBjb25maWcgaW5mby5cbiIsCiAJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CkBAIC03MDYsNyArMTAwMSw3IEBACiAJbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vcHMoYWRhcHRlcik7CiAKIAkvKiBNZXp6IGNhcmRzIGhhdmUgUENJIGZ1bmN0aW9uIDAsMiwzIGVuYWJsZWQgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVo6CiAJCWlmIChwY2lfZnVuY19pZCA+PSAyKQpAQCAtNzE2LDgyICsxMDExLDEzIEBACiAJCWJyZWFrOwogCX0KIAotCS8qCi0JICogVGhpcyBjYWxsIHdpbGwgc2V0dXAgdmFyaW91cyBtYXggcngvdHggY291bnRzLgotCSAqIEl0IG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGJ1ZmZlci9yaW5nIGFsbG9jYXRpb25zLgotCSAqLwotCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCWZpcnN0X2RyaXZlciA9IDA7Ci0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0KKwlueF91cGRhdGVfZG1hX21hc2soYWRhcHRlcik7CiAKLQlpZiAoZmlyc3RfZHJpdmVyKSB7Ci0JCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKLQkJCQlORVRYRU5fQ0FNX1JBTSgweDFmYykpOwotCi0JCWVyciA9IG5ldHhlbl9jaGVja19od19pbml0KGFkYXB0ZXIsIGZpcnN0X2Jvb3QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiBpbml0IEhXIGluaXQgc2VxdWVuY2VcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JCX0KLQotCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQotCQkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7Ci0KLQkJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgewotCQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCQkJQ1JCX0NNRFBFR19TVEFURSwgMCk7Ci0JCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7Ci0JCQltc2xlZXAoMSk7Ci0JCX0KLQkJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7Ci0KLQkJaWYgKE5YX0lTX1JFVklTSU9OX1AyKHJldmlzaW9uX2lkKSkgewotCi0JCQkvKiBJbml0aWFsaXplIG11bHRpY2FzdCBhZGRyIHBvb2wgb3duZXJzICovCi0JCQl2YWwgPSAweDc2NTQ7Ci0JCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKQotCQkJCXZhbCB8PSAweDBmMDAwMDAwOwotCQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9NQUNfQUREUl9DTlRMX1JFRywgdmFsKTsKLQotCQl9Ci0KLQkJZXJyID0gbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0KLQkJLyoKLQkJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgotCQkgKi8KLQkJaSA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKLQkJCXwgKChfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiA8PCA4KSkKLQkJCXwgKF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04pOwotCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgaSk7Ci0KLQkJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLwotCQllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfb2ZmbG9hZDsKLQotCX0JLyogZmlyc3RfZHJpdmVyICovCi0KLQluZXR4ZW5fbmljX2ZsYXNoX3ByaW50KGFkYXB0ZXIpOwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCi0JCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmdmFsLCA0KTsKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKHZhbCAmIDB4NCkgPyAxIDogMDsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHJ1bm5pbmcgaW4gJXMgbW9kZVxuIiwKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dCB0aHJvdWdoIiA6ICJsZWdhY3kiKTsKLQl9CisJbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhhZGFwdGVyKTsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBmaXJtd2FyZSBnYXZlIHVzIGEgdmlydHVhbC1waHlzaWNhbCBwb3J0IG1hcHBpbmcuCkBAIC04MDQsNDEgKzEwMzAsMTMgQEAKIAkJCWFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgPSBpOwogCX0KIAotCWFkYXB0ZXItPmZsYWdzICY9IH4oTkVUWEVOX05JQ19NU0lfRU5BQkxFRCB8IE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKTsKKwluZXR4ZW5fY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAotCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMCk7CisJbmV0eGVuX3NldHVwX2ludHIoYWRhcHRlcik7CiAKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCWlmICgobWVtX2xlbiAhPSBORVRYRU5fUENJXzEyOE1CX1NJWkUpICYmCi0JCQltZW1fbGVuICE9IE5FVFhFTl9QQ0lfMk1CX1NJWkUpCi0JCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7Ci0JfQorCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAotCWlmIChhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCkgewotCi0JCW5ldHhlbl9pbml0X21zaXhfZW50cmllcyhhZGFwdGVyKTsKLQotCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKLQkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKLQkJCWdvdG8gcmVxdWVzdF9tc2k7Ci0KLQkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7Ci0JCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKLQotCX0gZWxzZSB7Ci1yZXF1ZXN0X21zaToKLQkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7Ci0JCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOwotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKLQkJfSBlbHNlCi0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOwotCX0KLQotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQotCQluZXRkZXYtPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3I7Ci0JZWxzZQotCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKwluZXR4ZW5fbmFwaV9hZGQoYWRhcHRlciwgbmV0ZGV2KTsKIAogCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKIAlpZiAoZXJyKQpAQCAtODY3LDcgKzEwNjUsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgeworCXN3aXRjaCAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSkgewogCWNhc2UgTkVUWEVOX05JQ19HQkU6CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlczogR2JFIHBvcnQgaW5pdGlhbGl6ZWRcbiIsCiAJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKQEAgLTg4MSwyNSArMTA3OSwxMiBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X2Rpc2FibGVfbXNpOgotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQotCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwluZXR4ZW5fdGVhcmRvd25faW50cihhZGFwdGVyKTsKIAotZXJyX291dF9mcmVlX29mZmxvYWQ6Ci0JaWYgKGZpcnN0X2RyaXZlcikKLQkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKIAogZXJyX291dF9pb3VubWFwOgotCWlmIChkYl9wdHIpCi0JCWlvdW5tYXAoZGJfcHRyKTsKLQotCWlmIChtZW1fcHRyMCkKLQkJaW91bm1hcChtZW1fcHRyMCk7Ci0JaWYgKG1lbV9wdHIxKQotCQlpb3VubWFwKG1lbV9wdHIxKTsKLQlpZiAobWVtX3B0cjIpCi0JCWlvdW5tYXAobWVtX3B0cjIpOworCW5ldHhlbl9jbGVhbnVwX3BjaV9tYXAoYWRhcHRlcik7CiAKIGVycl9vdXRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTkyNyw5ICsxMTEyLDcgQEAKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7Ci0JCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKLQkJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKLQkJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKIAogCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJCW5ldHhlbl9wM19mcmVlX21hY19saXN0KGFkYXB0ZXIpOwpAQCAtOTM4LDIwICsxMTIxLDkgQEAKIAlpZiAoYWRhcHRlci0+cG9ydG51bSA9PSAwKQogCQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CiAKLQlpZiAoYWRhcHRlci0+aXJxKQotCQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOworCW5ldHhlbl90ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwotCi0JaW91bm1hcChhZGFwdGVyLT5haHcuZGJfYmFzZSk7Ci0JaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKLQlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSAhPSBOVUxMKQotCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOwotCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UyICE9IE5VTEwpCi0JCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtOTYwLDEyNSArMTEzMiw5NSBAQAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9CiAKLS8qCi0gKiBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCi0gKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKLSAqLworc3RhdGljIGludAorbmV0eGVuX25pY19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OworCisJZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWVyciA9IG5ldHhlbl9uaWNfYXR0YWNoKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuZXR4ZW5fbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnIgPSAwOwotCWludCBjdHgsIHJpbmc7Ci0JaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CiAKIAlpZiAoYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykgewotCQllcnIgPSBuZXR4ZW5faW5pdF9maXJtd2FyZShhZGFwdGVyKTsKLQkJaWYgKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAzOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKLQotCQllcnIgPSBuZXR4ZW5fYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJbmV0eGVuX25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKLQotCQllcnIgPSBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIGh3IHJlc291cmNlc1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3N3OwotCQl9Ci0KLQkJaWYgKChhZGFwdGVyLT5tc2lfbW9kZSAhPSBNU0lfTU9ERV9NVUxUSUZVTkMpIHx8Ci0JCQkoYWRhcHRlci0+aW50cl9zY2hlbWUgIT0gSU5UUl9TQ0hFTUVfUEVSUE9SVCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGludGVycnVwdCBzY2hlbWUgaXMgIgotCQkJCQkiaW5jb21wYXRpYmxlIHdpdGggZHJpdmVyXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOwotCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX2h3OwotCQl9Ci0KLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewotCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX3Byb2R1Y2VyID0KLQkJCQljcmJfY21kX3Byb2R1Y2VyW2FkYXB0ZXItPnBvcnRudW1dOwotCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0KLQkJCQljcmJfY21kX2NvbnN1bWVyW2FkYXB0ZXItPnBvcnRudW1dOwotCi0JCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7Ci0JCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoYWRhcHRlciwgMCk7Ci0JCX0KLQotCQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykKLQkJCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIGN0eCwgcmluZyk7Ci0JCX0KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCQloYW5kbGVyID0gbmV0eGVuX21zaXhfaW50cjsKLQkJZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQotCQkJaGFuZGxlciA9IG5ldHhlbl9tc2lfaW50cjsKLQkJZWxzZSB7Ci0JCQlmbGFncyB8PSBJUlFGX1NIQVJFRDsKLQkJCWhhbmRsZXIgPSBuZXR4ZW5faW50cjsKLQkJfQotCQlhZGFwdGVyLT5pcnEgPSBuZXRkZXYtPmlycTsKLQkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBoYW5kbGVyLAotCQkJCSAgZmxhZ3MsIG5ldGRldi0+bmFtZSwgYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfcnhidWY7Ci0JCX0KLQotCQlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOwogCX0KIAotCS8qIERvbmUgaGVyZSBhZ2FpbiBzbyB0aGF0IGV2ZW4gaWYgcGhhbnRvbSBzdyBvdmVyd3JvdGUgaXQsCi0JICogd2Ugc2V0IGl0ICovCi0JZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOwotCX0KLQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyKTsKLQotCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyKTsKLQotCW5ldHhlbl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2KTsKLQlpZiAoYWRhcHRlci0+c2V0X210dSkKLQkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7Ci0KLQlhZGFwdGVyLT5haHcubGlua3VwID0gMDsKLQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKLQotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9mcmVlX2lycToKLQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOwotZXJyX291dF9mcmVlX3J4YnVmOgotCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfaHc6Ci0JbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotZXJyX291dF9mcmVlX3N3OgotCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9vdXQ6CisJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA4OSwyMCArMTIzMSw3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0KLQlpZiAoYWRhcHRlci0+c3RvcF9wb3J0KQotCQlhZGFwdGVyLT5zdG9wX3BvcnQoYWRhcHRlcik7Ci0KLQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOwotCi0JbmV0eGVuX3JlbGVhc2VfdHhfYnVmZmVycyhhZGFwdGVyKTsKLQotCUZMVVNIX1NDSEVEVUxFRF9XT1JLKCk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQorCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTE0LDcgKzEyNDMsNyBAQAogCV9fYmUxNiBwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CiAJdTE2IGZsYWdzID0gMDsKIAotCWlmIChwcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKIAkJc3RydWN0IHZsYW5fZXRoaGRyICp2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CiAJCXByb3RvY29sID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiAJCWZsYWdzID0gRkxBR1NfVkxBTl9UQUdHRUQ7CkBAIC0xMTI3LDIxICsxMjU2LDIxIEBACiAJCWRlc2MtPnRvdGFsX2hkcl9sZW5ndGggPQogCQkJc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKIAotCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSkgPworCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpID8KIAkJCQlUWF9UQ1BfTFNPNiA6IFRYX1RDUF9MU087CiAJCXRzbyA9IHRydWU7CiAKIAl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJdTggbDRwcm90bzsKIAotCQlpZiAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkpIHsKKwkJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgewogCQkJbDRwcm90byA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKIAogCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQkJb3Bjb2RlID0gVFhfVENQX1BLVDsKIAkJCWVsc2UgaWYobDRwcm90byA9PSBJUFBST1RPX1VEUCkKIAkJCQlvcGNvZGUgPSBUWF9VRFBfUEtUOwotCQl9IGVsc2UgaWYgKHByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgewogCQkJbDRwcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CiAKIAkJCWlmIChsNHByb3RvID09IElQUFJPVE9fVENQKQpAQCAtMTE3NCw3ICsxMzAzLDE2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGlubGluZSB2b2lkCituZXR4ZW5fY2xlYXJfY21kZGVzYyh1NjQgKmRlc2MpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGVzY1tpXSA9IDBVTEw7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5ldHhlbl9oYXJkd2FyZV9jb250ZXh0ICpodyA9ICZhZGFwdGVyLT5haHc7CkBAIC0xMTg4LDcgKzEzMjYsNyBAQAogCiAJdTMyIHByb2R1Y2VyLCBjb25zdW1lcjsKIAlpbnQgZnJhZ19jb3VudCwgbm9fb2ZfZGVzYzsKLQl1MzIgbnVtX3R4ZCA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkID0gYWRhcHRlci0+bnVtX3R4ZDsKIAlib29sIGlzX3RzbyA9IGZhbHNlOwogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOwpAQCAtMTIwNyw3ICsxMzQ1LDcgQEAKIAogCS8qIENvcHkgdGhlIGRlc2NyaXB0b3JzIGludG8gdGhlIGhhcmR3YXJlICAgICovCiAJaHdkZXNjID0gJmh3LT5jbWRfZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CisJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJLyogVGFrZSBza2ItPmRhdGEgaXRzZWxmICovCiAJcGJ1ZiA9ICZhZGFwdGVyLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CiAKQEAgLTEyMjYsNyArMTM2NCw3IEBACiAJbmV0eGVuX3NldF90eF9mcmFnc19sZW4oaHdkZXNjLCBmcmFnX2NvdW50LCBza2ItPmxlbik7CiAJbmV0eGVuX3NldF90eF9wb3J0KGh3ZGVzYywgYWRhcHRlci0+cG9ydG51bSk7CiAKLQlod2Rlc2MtPmJ1ZmZlcjFfbGVuZ3RoID0gY3B1X3RvX2xlMTYoZmlyc3Rfc2VnX2xlbik7CisJaHdkZXNjLT5idWZmZXJfbGVuZ3RoWzBdID0gY3B1X3RvX2xlMTYoZmlyc3Rfc2VnX2xlbik7CiAJaHdkZXNjLT5hZGRyX2J1ZmZlcjEgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCiAJZm9yIChpID0gMSwgayA9IDE7IGkgPCBmcmFnX2NvdW50OyBpKyssIGsrKykgewpAQCAtMTIzOSw3ICsxMzc3LDcgQEAKIAkJCWsgPSAwOwogCQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CiAJCQlod2Rlc2MgPSAmaHctPmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdOwotCQkJbWVtc2V0KGh3ZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOworCQkJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJCQlwYnVmID0gJmFkYXB0ZXItPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKIAkJCXBidWYtPnNrYiA9IE5VTEw7CiAJCX0KQEAgLTEyNTksMjEgKzEzOTcsMTggQEAKIAkJYnVmZnJhZy0+ZG1hID0gdGVtcF9kbWE7CiAJCWJ1ZmZyYWctPmxlbmd0aCA9IHRlbXBfbGVuOwogCisJCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFtrXSA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJc3dpdGNoIChrKSB7CiAJCWNhc2UgMDoKLQkJCWh3ZGVzYy0+YnVmZmVyMV9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlod2Rlc2MtPmJ1ZmZlcjJfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjIgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJaHdkZXNjLT5idWZmZXIzX2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCWh3ZGVzYy0+YnVmZmVyNF9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyNCA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzg4LDcgKzE1MjMsNyBAQAogCQlsaW5rdXAgPSAodmFsID09IFhHX0xJTktfVVBfUDMpOwogCX0gZWxzZSB7CiAJCXZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOwotCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQogCQkJbGlua3VwID0gKHZhbCA+PiBwb3J0KSAmIDE7CiAJCWVsc2UgewogCQkJdmFsID0gKHZhbCA+PiBwb3J0KjgpICYgMHhmZjsKQEAgLTE0NTUsMTMgKzE1OTAsMTEgQEAKIAlwcmludGsoS0VSTl9FUlIgIiVzICVzOiB0cmFuc21pdCB0aW1lb3V0LCByZXNldHRpbmcuXG4iLAogCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwogCi0JbmV0eGVuX25pY19kaXNhYmxlX2ludChhZGFwdGVyKTsKLQluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CisJbmV0eGVuX25hcGlfZW5hYmxlKGFkYXB0ZXIpOwogCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIH0KIApAQCAtMTQ5OSw3ICsxNjMyLDggQEAKIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCXUzMiBzdGF0dXMgPSAwOwogCiAJc3RhdHVzID0gYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKQEAgLTE1MzAsNyArMTY2NCw3IEBACiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKIAogCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnLApAQCAtMTUzOSw2MSArMTY3Myw0OSBAQAogCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7CiAJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKIAotCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2lfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKIAogCS8qIGNsZWFyIGludGVycnVwdCAqLwogCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKIAkJCW1zaV90Z3Rfc3RhdHVzW2FkYXB0ZXItPmFody5wY2lfZnVuY10sIDB4ZmZmZmZmZmYpOwogCi0JbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CiAKLQluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgbmFwaSk7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nLCBuYXBpKTsKKworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCiAJaW50IHR4X2NvbXBsZXRlOwotCWludCBjdHg7CiAJaW50IHdvcmtfZG9uZTsKIAogCXR4X2NvbXBsZXRlID0gbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcoYWRhcHRlcik7CiAKLQl3b3JrX2RvbmUgPSAwOwotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCS8qCi0JCSAqIEZhaXJuZXNzIGlzc3VlLiBUaGlzIHdpbGwgZ2l2ZSB1bmR1ZSB3ZWlnaHQgdG8gdGhlCi0JCSAqIHJlY2VpdmUgY29udGV4dCAwLgotCQkgKi8KLQotCQkvKgotCQkgKiBUbyBhdm9pZCBzdGFydmF0aW9uLCB3ZSBnaXZlIGVhY2ggb2Ygb3VyIHJlY2VpdmVycywKLQkJICogYSBmcmFjdGlvbiBvZiB0aGUgcXVvdGEuIFNvbWV0aW1lcywgaXQgbWlnaHQgaGFwcGVuIHRoYXQgd2UKLQkJICogaGF2ZSBlbm91Z2ggcXVvdGEgdG8gcHJvY2VzcyBldmVyeSBwYWNrZXQsIGJ1dCBzaW5jZSBhbGwgdGhlCi0JCSAqIHBhY2tldHMgYXJlIG9uIG9uZSBjb250ZXh0LCBpdCBnZXRzIG9ubHkgaGFsZiBvZiB0aGUgcXVvdGEsCi0JCSAqIGFuZCBlbmRzIHVwIG5vdCBwcm9jZXNzaW5nIGl0LgotCQkgKi8KLQkJd29ya19kb25lICs9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKGFkYXB0ZXIsIGN0eCwKLQkJCQkJCSAgICAgYnVkZ2V0IC8gTUFYX1JDVl9DVFgpOwotCX0KKwl3b3JrX2RvbmUgPSBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKIAogCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiB0eF9jb21wbGV0ZSkgewotCQluZXRpZl9yeF9jb21wbGV0ZSgmYWRhcHRlci0+bmFwaSk7Ci0JCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwkJbmFwaV9jb21wbGV0ZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNjEzLDEzICsxNzM1LDE3IEBACiAJLm5hbWUgPSBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IG5ldHhlbl9wY2lfdGJsLAogCS5wcm9iZSA9IG5ldHhlbl9uaWNfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5ldHhlbl9uaWNfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChuZXR4ZW5fbmljX3JlbW92ZSksCisJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lCiB9OwogCiAvKiBEcml2ZXIgUmVnaXN0cmF0aW9uIG9uIE5ldFhlbiBjYXJkICAgICovCiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKQogeworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOworCiAJaWYgKChuZXR4ZW5fd29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibmV0eGVuIikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCmluZGV4IGMzYjljODMuLmQ4NTIwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQgaC93IGJsb2NrLgorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMjk5LDE0ICsyOTYsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX25pdV94Z2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9BQ1RJVkVfSU5ULCAtMSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiBzdGF0aWMgaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTQ2NywxMDQgKzQ1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKgotICogbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQgLSBIYW5kbGVzIEdiRSBQSFkgaW50ZXJydXB0cwotICogQHBhcmFtIGVuYWJsZSAwIG1lYW5zIGRvbid0IGVuYWJsZSB0aGUgcG9ydAotICoJCSAxIG1lYW5zIGVuYWJsZSAob3IgcmUtZW5hYmxlKSB0aGUgcG9ydAotICovCi1pbnQgbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JX191MzIgaW50X3NyYzsKLQotCXByaW50ayhLRVJOX0lORk8gUEZYICJORVRYRU46IEhhbmRsaW5nIFBIWSBpbnRlcnJ1cHQgb24gcG9ydCAlZCIKLQkgICAgICAgIiAoZGV2aWNlIGVuYWJsZSA9ICVkKVxuIiwgKGludClwb3J0LCAoaW50KWVuYWJsZSk7Ci0KLQkvKgotCSAqIFRoZSByZWFkIG9mIHRoZSBQSFkgSU5UIHN0YXR1cyB3aWxsIGNsZWFyIHRoZSBwZW5kaW5nCi0JICogaW50ZXJydXB0IHN0YXR1cwotCSAqLwotCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZChhZGFwdGVyLAotCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX1NUQVRVUywKLQkJCQkgICAgJmludF9zcmMpICE9IDApCi0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQSFkgSW50ZXJydXB0IHNvdXJjZSA9IDB4JXggXG4iLCBpbnRfc3JjKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9qYWJiZXIoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiamFiYmVyIEludGVycnVwdCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wb2xhcml0eV9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBvbGFyaXR5IGNoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZW5lcmd5X2RldGVjdChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJlbmVyZ3kgZGV0ZWN0IFxuIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZG93bnNoaWZ0KGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRvd25zaGlmdCBcbiIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X21kaV94b3Zlcl9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIm1kaV94b3Zlcl9jaGFuZ2VkICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2ZpZm9fb3Zlcl91bmRlcmZsb3coaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmlmb19vdmVyX3VuZGVyZmxvdyAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9mYWxzZV9jYXJyaWVyKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhbHNlX2NhcnJpZXIgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3ltYm9sX2Vycm9yKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInN5bWJvbF9lcnJvciAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2NvbXBsZXRlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wYWdlX3JlY2VpdmVkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBhZ2VfcmVjZWl2ZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZHVwbGV4X2NoYW5nZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZHVwbGV4X2NoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19lcnJvcihpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2Vycm9yICIpOwotCQlpZiAoKG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGludF9zcmMpKQotCQkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgewotCQkJX191MzIgc3RhdHVzOwotCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICJzcGVlZF9jaGFuZ2VkIG9yIGxpbmsgc3RhdHVzIGNoYW5nZWQiKTsKLQkJCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZAotCQkJICAgIChhZGFwdGVyLAotCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCSAgICAgJnN0YXR1cykgPT0gMCkgewotCQkJCWlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDIpIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAwMCBNYnBzXG4iKTsKLQkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X2dtaWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgIHBvcnQsCi0JCQkJCQkJCSAgICAgZW5hYmxlKTsKLQkJCQl9IGVsc2UgaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMSkgewotCQkJCQlwcmludGsKLQkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCi0JCQkJCSAgICAgIiB0byAxMDAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIGlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDApIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1IgcmVhZGluZyAiCi0JCQkJCSAgICAgICAiUEhZIHN0YXR1cy4gSW52YWxpZCBzcGVlZC5cbiIpOwotCQkJCQlyZXN1bHQgPSAtMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIkVSUk9SIHJlYWRpbmcgUEhZIHN0YXR1cy5cbiIpOwotCQkJCXJlc3VsdCA9IC0xOwotCQkJfQotCi0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qCiAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KICAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCkBAIC02NDEsODYgKzUzMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKiBFbmFibGUgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9lbmFibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIGludCBwb3J0LCBuZXR4ZW5fbml1X2diZV9pZm1vZGVfdCBtb2RlKQotewotCV9fdTMyIG1hY19jZmcwOwotCV9fdTMyIG1hY19jZmcxOwotCV9fdTMyIG1paV9jZmc7Ci0KLQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9lbmFibGVfdHgobWFjX2NmZzApOwotCW5ldHhlbl9nYl9lbmFibGVfcngobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF9yeF9mbG93Y3RsKG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfdHhfcmVzZXRfcGIobWFjX2NmZzApOwotCW5ldHhlbl9nYl9yeF9yZXNldF9wYihtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3R4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3J4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0KLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzEgPSAwOwotCW5ldHhlbl9nYl9zZXRfcHJlYW1ibGVsZW4obWFjX2NmZzEsIDB4Zik7Ci0JbmV0eGVuX2diX3NldF9kdXBsZXgobWFjX2NmZzEpOwotCW5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9wYWRzaG9ydChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9jaGVja2xlbmd0aChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKG1hY19jZmcxKTsKLQotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfMTBfMTAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDEpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQkvKiBzZXQgbWlpIG1vZGUgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMSk7Ci0KLQl9IGVsc2UgaWYgKG1vZGUgPT0gTkVUWEVOX05JVV8xMDAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDIpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJLyogc2V0IGdtaWkgbW9kZSAqLwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfTUlJX01PREUgKwotCQkJCQkgICAgKHBvcnQgPDwgMyksIDApOwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsKLQkJCQkJICAgIChwb3J0IDw8IDMpLCAxKTsKLQl9Ci0JbWlpX2NmZyA9IDA7Ci0JbmV0eGVuX2diX3NldF9taWlfbWdtdF9jbG9ja3NlbGVjdChtaWlfY2ZnLCA3KTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcocG9ydCksCi0JCQkJICAgJm1paV9jZmcsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX2VuYWJsZV90eChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX2VuYWJsZV9yeChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF90eF9mbG93Y3RsKG1hY19jZmcwKTsKLQotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkgICAmbWFjX2NmZzAsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qIERpc2FibGUgYSBHYkUgaW50ZXJmYWNlICovCiBpbnQgbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTg2OSwzOSArNjgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KLSAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gKi8KLWludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQotewotCWludCBwaHkgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXUzMiBzdGF0aW9uaGlnaDsKLQl1MzIgc3RhdGlvbmxvdzsKLQl1OCB2YWxbOF07Ci0KLQlpZiAoYWRkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocGh5ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCi0JCQkJICAmc3RhdGlvbmhpZ2gsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAotCQkJCSAgJnN0YXRpb25sb3csIDQpKQotCQlyZXR1cm4gLUVJTzsKLQkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7Ci0JKChfX2xlMzIgKil2YWwpWzBdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmxvdyk7Ci0KLQltZW1jcHkoYWRkciwgdmFsICsgMiwgNik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTMyIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAppbmRleCBiMjkzYWRjLi41MDE4MzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCkBAIC05MCw2ICs5MSw3IEBACiAjZGVmaW5lIENSQl9SWF9MUk9fU1RBUlRfTlVNICAgICAgICBORVRYRU5fTklDX1JFRygweGMwKQogI2RlZmluZSBDUkJfTVBPUlRfTU9ERSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjNCkJLyogTXVsdGlwb3J0IE1vZGUgKi8KICNkZWZpbmUgQ1JCX0NNRF9SSU5HX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzgpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGNjKQogI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUiAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkNCkKICNkZWZpbmUgQ1JCX0NUWF9SRVNFVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZDgpCiAjZGVmaW5lIENSQl9IT1NUX1NUU19QUk9EICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk1Mi5jIGIvZHJpdmVycy9uZXQvbmk1Mi5jCmluZGV4IGE4YmNjMDAuLjc3ZDQ0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTIuYworKysgYi9kcml2ZXJzL25ldC9uaTUyLmMKQEAgLTQ0MSw2ICs0NDEsMTggQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5pNTJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbmk1Ml9vcGVuLAorCS5uZG9fc3RvcAkJPSBuaTUyX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IG5pNTJfZ2V0X3N0YXRzLAorCS5uZG9fdHhfdGltZW91dCAJPSBuaTUyX3RpbWVvdXQsCisJLm5kb19zdGFydF94bWl0IAk9IG5pNTJfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG5pNTJfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJaW50IGksIHNpemUsIHJldHZhbDsKQEAgLTU2MSwxNSArNTczLDggQEAKIAkJcHJpbnRrKCJJUlEgJWQgKGFzc2lnbmVkIGFuZCBub3QgY2hlY2tlZCEpLlxuIiwgZGV2LT5pcnEpOwogCX0KIAotCWRldi0+b3BlbgkJPSBuaTUyX29wZW47Ci0JZGV2LT5zdG9wCQk9IG5pNTJfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbmk1Ml9nZXRfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0IAk9IG5pNTJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5pNTJfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFovMjA7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgCT0gbmk1Ml9zZW5kX3BhY2tldDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQotCWRldi0+aWZfcG9ydCAJCT0gMDsKIAogCXJldHVybiAwOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk2NS5jIGIvZHJpdmVycy9uZXQvbmk2NS5jCmluZGV4IDI1NDA1NzIuLjY0NzRmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNjUuYworKysgYi9kcml2ZXJzL25ldC9uaTY1LmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXZvaWQgKnRtZGJvdW5jZVtUTUROVU1dOwogCWludCB0bWRib3VuY2VudW07CiAJaW50IGxvY2sseG1pdF9xdWV1ZWQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKIAl2b2lkICpzZWxmOwogCWludCBjbWRyX2FkZHI7CiAJaW50IGNhcmRubzsKQEAgLTI1Nyw3ICsyNTcsNiBAQAogc3RhdGljIGludCAgbmk2NV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5pNjVfYWxsb2NfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbmk2NV9mcmVlX2J1ZmZlcihzdHJ1Y3QgcHJpdiAqcCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5pNjVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW50IGlycXRhYltdIF9faW5pdGRhdGEgPSB7IDksMTIsMTUsNSB9OyAvKiBpcnEgY29uZmlnLXRyYW5zbGF0ZSAqLwpAQCAtNDAxLDYgKzQwMCwxNyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmk2NV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuaTY1X29wZW4sCisJLm5kb19zdG9wCQk9IG5pNjVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5pNjVfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IG5pNjVfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIHRoaXMgaXMgdGhlIHJlYWwgY2FyZCBwcm9iZSAuLgogICovCkBAIC00ODEsOCArNDkxLDkgQEAKIAllbHNlIHsKIAkJaWYoZGV2LT5kbWEgPT0gMCkgewogCQkvKiAnc3R1Y2sgdGVzdCcgZnJvbSBsYW5jZS5jICovCi0JCQlsb25nIGRtYV9jaGFubmVscyA9ICgoaW5iKERNQTFfU1RBVF9SRUcpID4+IDQpICYgMHgwZikgfAotCQkJCQkgICAgKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOworCQkJdW5zaWduZWQgbG9uZyBkbWFfY2hhbm5lbHMgPQorCQkJCSgoaW5iKERNQTFfU1RBVF9SRUcpID4+IDQpICYgMHgwZikKKwkJCQl8IChpbmIoRE1BMl9TVEFUX1JFRykgJiAweGYwKTsKIAkJCWZvcihpPTE7aTw1O2krKykgewogCQkJCWludCBkbWEgPSBkbWF0YWJbaV07CiAJCQkJaWYodGVzdF9iaXQoZG1hLCZkbWFfY2hhbm5lbHMpIHx8IHJlcXVlc3RfZG1hKGRtYSwibmk2NTEwIikpCkBAIC01NDgsMTMgKzU1OSw5IEBACiAJfQogCiAJZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7Ci0JZGV2LT5vcGVuCQk9IG5pNjVfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbmk2NV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG5pNjVfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG5pNjVfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmk2NV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWi8yOwotCWRldi0+Z2V0X3N0YXRzCQk9IG5pNjVfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OworCiAJcmV0dXJuIDA7IC8qIGV2ZXJ5dGhpbmcgaXMgT0sgKi8KIH0KIApAQCAtODk3LDE3ICs5MDQsMTYgQEAKIAogCQlpZihjc3IwICYgQ1NSMF9FUlIpCiAJCXsKLQkJCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwogCQkJaWYoZGVidWdsZXZlbCA+IDEpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZ2VuZXJhbCBlcnJvcjogJTA0eC5cbiIsZGV2LT5uYW1lLGNzcjApOwogCQkJaWYoY3NyMCAmIENTUjBfQkFCTCkKLQkJCQlwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYoY3NyMCAmIENTUjBfTUlTUykgewogCQkJCWludCBpOwogCQkJCWZvcihpPTA7aTxSTUROVU07aSsrKQogCQkJCQlwcmludGsoIiUwMnggIixwLT5ybWRoZWFkW2ldLnUucy5zdGF0dXMpOwogCQkJCXByaW50aygiXG4iKTsKLQkJCQlwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJfQogCQkJaWYoY3NyMCAmIENTUjBfTUVSUikgewogCQkJCWlmKGRlYnVnbGV2ZWwgPiAxKQpAQCAtOTIyLDggKzkyOCw3IEBACiAgaW50IGo7CiAgZm9yKGo9MDtqPFJNRE5VTTtqKyspCiAgewotCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwotCWludCBpLGssbnVtMSxudW0yOworCWludCBpLCBudW0yOwogCWZvcihpPVJNRE5VTS0xO2k+MDtpLS0pIHsKIAkJIG51bTIgPSAocC0+cm1kbnVtICsgaSkgJiAoUk1ETlVNLTEpOwogCQkgaWYoIShwLT5ybWRoZWFkW251bTJdLnUucy5zdGF0dXMgJiBSQ1ZfT1dOKSkKQEAgLTkzMSw2ICs5MzYsNyBAQAogCX0KIAogCWlmKGkpIHsKKwkJaW50IGssIG51bTE7CiAJCWZvcihrPTA7azxSTUROVU07aysrKSB7CiAJCQludW0xID0gKHAtPnJtZG51bSArIGspICYgKFJNRE5VTS0xKTsKIAkJCWlmKCEocC0+cm1kaGVhZFtudW0xXS51LnMuc3RhdHVzICYgUkNWX09XTikpCkBAIC05NDIsNyArOTQ4LDYgQEAKIAkJaWYoZGVidWdsZXZlbCA+IDApCiAJCXsKIAkJCWNoYXIgYnVmWzI1Nl0sKmJ1ZjE7Ci0JCQlpbnQgazsKIAkJCWJ1ZjEgPSBidWY7CiAJCQlmb3Ioaz0wO2s8Uk1ETlVNO2srKykgewogCQkJCXNwcmludGYoYnVmMSwiJTAyeCAiLChwLT5ybWRoZWFkW2tdLnUucy5zdGF0dXMpKTsgLyogJiBSQ1ZfT1dOKSApOyAqLwpAQCAtOTk4LDEyICsxMDAzLDEyIEBACiAjZW5kaWYKIAkJIC8qIGNoZWNraW5nIHNvbWUgZXJyb3JzICovCiAJCQlpZih0bWRwLT5zdGF0dXMyICYgWE1JVF9SVFJZKQotCQkJCXAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYodG1kcC0+c3RhdHVzMiAmIFhNSVRfTENBUikKLQkJCQlwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWlmKHRtZHAtPnN0YXR1czIgJiAoWE1JVF9CVUZGIHwgWE1JVF9VRkxPICkpIHsKIAkJLyogdGhpcyBzdG9wcyB0aGUgeG1pdHRlciAqLwotCQkJCXAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCWlmKGRlYnVnbGV2ZWwgPiAwKQogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBYbWl0IEZJRk8vQlVGRiBlcnJvclxuIixkZXYtPm5hbWUpOwogCQkJCWlmKHAtPmZlYXR1cmVzICYgSU5JVF9SSU5HX0JFRk9SRV9TVEFSVCkgewpAQCAtMTAxNywxMiArMTAyMiwxMiBAQAogCQkJaWYoZGVidWdsZXZlbCA+IDIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogeG1pdC1lcnJvcjogJTA0eCAlMDJ4LSUwNHhcbiIsZGV2LT5uYW1lLGNzcjAsKGludCkgdG1kc3RhdCwoaW50KSB0bWRwLT5zdGF0dXMyKTsKIAkJCWlmKCEoY3NyMCAmIENTUjBfQkFCTCkpIC8qIGRvbid0IGNvdW50IGVycm9ycyB0d2ljZSAqLwotCQkJCXAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQl0bWRwLT5zdGF0dXMyID0gMDsKIAkJfQogCQllbHNlIHsKLQkJCXAtPnN0YXRzLnR4X2J5dGVzIC09IChzaG9ydCkodG1kcC0+Ymxlbik7Ci0JCQlwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzIC09IChzaG9ydCkodG1kcC0+Ymxlbik7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJfQogCiAjaWZkZWYgWE1UX1ZJQV9TS0IKQEAgLTEwNTgsNyArMTA2Myw3IEBACiAJCQlpZighKHJtZHN0YXQgJiBSQ1ZfRVJSKSkgewogCQkJCWlmKHJtZHN0YXQgJiBSQ1ZfU1RBUlQpCiAJCQkJewotCQkJCQlwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWN2LCBwYWNrZXQgdG9vIGxvbmc6ICVkXG4iLGRldi0+bmFtZSxybWRwLT5tbGVuICYgMHgwZmZmKTsKIAkJCQl9CiAJCQl9CkBAIC0xMDY3LDE2ICsxMDcyLDE2IEBACiAJCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlY2VpdmUtZXJyb3I6ICUwNHgsIGxhbmNlLXN0YXR1czogJTA0eC8lMDR4XG4iLAogCQkJCQkJCQkJZGV2LT5uYW1lLChpbnQpIHJtZHN0YXQsY3NyMCwoaW50KSBpbncoUE9SVCtMX0RBVEFSRUcpICk7CiAJCQkJaWYocm1kc3RhdCAmIFJDVl9GUkFNKQotCQkJCQlwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCQlpZihybWRzdGF0ICYgUkNWX09GTE8pCi0JCQkJCXAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCQlpZihybWRzdGF0ICYgUkNWX0NSQykKLQkJCQkJcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQlpZihybWRzdGF0ICYgUkNWX0JVRl9FUlIpCi0JCQkJCXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCX0KIAkJCWlmKCEoY3NyMCAmIENTUjBfTUlTUykpIC8qIGRvbid0IGNvdW50IGVycm9ycyB0d2ljZSAqLwotCQkJCXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCX0KIAkJZWxzZSBpZiggKGxlbiA9IChybWRwLT5tbGVuICYgMHgwZmZmKSAtIDQpID49IDYwKQogCQl7CkBAIC0xMTA3LDIwICsxMTEyLDIwIEBACiAJCQkJc2tiX3B1dChza2IsbGVuKTsKIAkJCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsICh1bnNpZ25lZCBjaGFyICopIHAtPnJlY3Zib3VuY2VbcC0+cm1kbnVtXSxsZW4pOwogI2VuZGlmCi0JCQkJcC0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJCXAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAkJCQlza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQl9CiAJCQllbHNlCiAJCQl7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgYWxsb2MgbmV3IHNrX2J1ZmZcbiIsZGV2LT5uYW1lKTsKLQkJCQlwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9CiAJCX0KIAkJZWxzZSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgcnVudCBwYWNrZXRcbiIsZGV2LT5uYW1lKTsKLQkJCXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJfQogCQlybWRwLT5ibGVuID0gLShSX0JVRl9TSVpFLTgpOwogCQlybWRwLT5tbGVuID0gMDsKQEAgLTEyMTQsMjMgKzEyMTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5pNjVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLSNpZiAwCi0JaW50IGk7Ci0Jc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7Ci0JZm9yKGk9MDtpPFJNRE5VTTtpKyspCi0JewotCQlzdHJ1Y3Qgcm1kICpybWRwID0gcC0+cm1kaGVhZCArICgocC0+cm1kbnVtICsgaSkgJiAoUk1ETlVNLTEpKTsKLQkJcHJpbnRrKCIlMDJ4ICIscm1kcC0+dS5zLnN0YXR1cyk7Ci0JfQotCXByaW50aygiXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuICYoKHN0cnVjdCBwcml2ICopZGV2LT5tbF9wcml2KS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmKCFuaTY1X2xhbmNlX3JlaW5pdChkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAwYzBiNzUyLi41MGMxMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMTExNSw2ICsxMTE1LDEzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzX21paShzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCit7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBlcnI7CisJaW50IGJtc3IsIGFkdmVydCwgY3RybDEwMDAsIHN0YXQxMDAwLCBscGEsIGJtY3IsIGVzdGF0dXM7CisJaW50IHN1cHBvcnRlZCwgYWR2ZXJ0aXNpbmcsIGFjdGl2ZV9zcGVlZCwgYWN0aXZlX2R1cGxleDsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1zciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlhZHZlcnQgPSBlcnI7CisKKwllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfTFBBKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJbHBhID0gZXJyOworCisJaWYgKGxpa2VseShibXNyICYgQk1TUl9FU1RBVEVOKSkgeworCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfRVNUQVRVUyk7CisJCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJCXJldHVybiBlcnI7CisJCWVzdGF0dXMgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0NUUkwxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJY3RybDEwMDAgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX1NUQVQxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJc3RhdDEwMDAgPSBlcnI7CisJfSBlbHNlCisJCWVzdGF0dXMgPSBjdHJsMTAwMCA9IHN0YXQxMDAwID0gMDsKKworCXN1cHBvcnRlZCA9IDA7CisJaWYgKGJtc3IgJiBCTVNSX0FORUdDQVBBQkxFKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJaWYgKGJtc3IgJiBCTVNSXzEwSEFMRikKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7CisJaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisJaWYgKGJtc3IgJiBCTVNSXzEwMEhBTEYpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYm1zciAmIEJNU1JfMTAwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RIQUxGKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RGVUxMKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCWxwLT5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7CisKKwlhZHZlcnRpc2luZyA9IDA7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoY3RybDEwMDAgJiBBRFZFUlRJU0VfMTAwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGY7CisJaWYgKGN0cmwxMDAwICYgQURWRVJUSVNFXzEwMDBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CisJCWludCBuZWcsIG5lZzEwMDA7CisKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMTsKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCisJCW5lZyA9IGFkdmVydCAmIGxwYTsKKwkJbmVnMTAwMCA9IChjdHJsMTAwMCA8PCAyKSAmIHN0YXQxMDAwOworCisJCWlmIChuZWcxMDAwICYgKExQQV8xMDAwRlVMTCB8IExQQV8xMDAwSEFMRikpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChuZWcgJiBMUEFfMTAwKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTAwOworCQllbHNlIGlmIChuZWcgJiAoTFBBXzEwSEFMRiB8IExQQV8xMEZVTEwpKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisJCWVsc2UKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisKKwkJaWYgKChuZWcxMDAwICYgTFBBXzEwMDBGVUxMKSB8fCAobmVnICYgTFBBX0RVUExFWCkpCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UgaWYgKGFjdGl2ZV9zcGVlZCAhPSBTUEVFRF9JTlZBTElEKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9IQUxGOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMDsKKworCQlpZiAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwMCkgJiYgIShibWNyICYgQk1DUl9TUEVFRDEwMCkpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChibWNyICYgQk1DUl9TUEVFRDEwMCkKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZWxzZQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisKKwkJaWYgKGJtY3IgJiBCTUNSX0ZVTExEUExYKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfQorCisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyA9IGFkdmVydGlzaW5nOworCWxwLT5hY3RpdmVfc3BlZWQgPSBhY3RpdmVfc3BlZWQ7CisJbHAtPmFjdGl2ZV9kdXBsZXggPSBhY3RpdmVfZHVwbGV4OworCSpsaW5rX3VwX3AgPSAhIShibXNyICYgQk1TUl9MU1RBVFVTKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnX3JnbWlpKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKIHsKIAlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CkBAIC0xMTcxLDYgKzEyOTUsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwllcnIgPSBsaW5rX3N0YXR1c19taWkobnAsIGxpbmtfdXBfcCk7CisJbHAtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGJjbTg3MDRfcmVzZXQoc3RydWN0IG5pdSAqbnApCiB7CiAJaW50IGVyciwgbGltaXQ7CkBAIC0xNjc2LDM5ICsxODE2LDg4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIFhYWCBjb25maWd1cmFibGUgWFhYICovCi0JLyogWFhYIGZvciBub3cgZG9uJ3QgYWR2ZXJ0aXNlIGhhbGYtZHVwbGV4IG9yIGFzeW0gcGF1c2UuLi4gWFhYICovCi0JYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOwotCWlmIChibXNyICYgQk1TUl8xMEZVTEwpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCWlmIChibXNyICYgQk1TUl8xMDBGVUxMKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7Ci0JZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlpZiAobHAtPmF1dG9uZWcpIHsKKwkJdTE2IGN0cmwxMDAwOwogCi0JaWYgKGJtc3IgJiBCTVNSX0VTVEFURU4pIHsKLQkJdTE2IGN0cmwxMDAwID0gMDsKLQotCQlpZiAoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpCi0JCQljdHJsMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikpCisJCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKKwkJaWYgKChibXNyICYgQk1TUl8xMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7CisJCWlmICgoYm1zciAmIEJNU1JfMTAwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKSkKKwkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwkJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCisJCWlmIChsaWtlbHkoYm1zciAmIEJNU1JfRVNUQVRFTikpIHsKKwkJCWN0cmwxMDAwID0gMDsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKKwkJCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLAorCQkJCQlNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJfSBlbHNlIHsKKwkJLyogIWxwLT5hdXRvbmVnICovCisJCWludCBmdWxsZHB4OworCisJCWlmIChscC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisJCQlmdWxsZHB4ID0gMTsKKwkJfSBlbHNlIGlmIChscC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJZnVsbGRweCA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChscC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJLyogaWYgWC1mdWxsIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLCBvcgorCQkJICAgWC1oYWxmIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLi4uICovCisJCQlpZiAoKGZ1bGxkcHggJiYgIShlc3RhdCAmIEVTVEFUVVNfMTAwMF9URlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CisJCX0gZWxzZSBpZiAobHAtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwRlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwSEFMRikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCQl9IGVsc2UgaWYgKGxwLT5zcGVlZCA9PSBTUEVFRF8xMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTBGVUxMKSkgfHwKKwkJCQkoIWZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAogCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorI2lmIDAKIAllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKwogCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLSNpZiAwCisJYm1zciA9IGVycjsKKwogCXByX2luZm8oUEZYICJQb3J0ICV1IGFmdGVyIE1JSSBpbml0IGJtY3JbJTA0eF0gYm1zclslMDR4XVxuIiwKIAkJbnAtPnBvcnQsIGJtY3IsIGJtc3IpOwogI2VuZGlmCkBAIC0yMDU0LDg3ICsyMjQzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKLXsKLQlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7Ci0JdTE2IGN1cnJlbnRfc3BlZWQsIGJtc3I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBjdXJyZW50X2R1cGxleDsKLQlpbnQgZXJyLCBsaW5rX3VwOwotCi0JbGlua191cCA9IDA7Ci0JY3VycmVudF9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7Ci0JY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobnAtPmxpbmtfY29uZmlnLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfRElTQUJMRUQpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWJtc3IgPSBlcnI7Ci0JaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKLQkJdTE2IGFkdiwgbHBhLCBjb21tb24sIGVzdGF0OwotCi0JCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlhZHYgPSBlcnI7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0xQQSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWxwYSA9IGVycjsKLQotCQljb21tb24gPSBhZHYgJiBscGE7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQllc3RhdCA9IGVycjsKLQotCQlsaW5rX3VwID0gMTsKLQkJaWYgKGVzdGF0ICYgKEVTVEFUVVNfMTAwMF9URlVMTCB8IEVTVEFUVVNfMTAwMF9USEFMRikpIHsKLQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJaWYgKGVzdGF0ICYgRVNUQVRVU18xMDAwX1RGVUxMKQotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQllbHNlCi0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJfSBlbHNlIHsKLQkJCWlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwQkFTRTQpIHsKLQkJCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UgaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMDBGVUxMKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwSEFMRikgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZSBpZiAoY29tbW9uICYgQURWRVJUSVNFXzEwRlVMTCkgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTBIQUxGKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UKLQkJCQlsaW5rX3VwID0gMDsKLQkJfQotCX0KLQlscC0+YWN0aXZlX3NwZWVkID0gY3VycmVudF9zcGVlZDsKLQlscC0+YWN0aXZlX2R1cGxleCA9IGN1cnJlbnRfZHVwbGV4OwotCWVyciA9IDA7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JKmxpbmtfdXBfcCA9IGxpbmtfdXA7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBuaXVfbGlua19zdGF0dXMoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQogewogCWNvbnN0IHN0cnVjdCBuaXVfcGh5X29wcyAqb3BzID0gbnAtPnBoeV9vcHM7CkBAIC0yMjg0LDcgKzIzOTIsNiBAQAogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnLCB0ZXN0X2NmZ19yZWcsIHBsbF9jZmcsIGk7CiAJdTY0IGN0cmxfdmFsLCB0ZXN0X2NmZ192YWwsIHNpZywgbWFzaywgdmFsOwotCWludCBlcnI7CiAJdTY0IHJlc2V0X3ZhbDsKIAogCXN3aXRjaCAobnAtPnBvcnQpIHsKQEAgLTIzMzcsNiArMjQ0NCw3IEBACiAJLyogSW5pdGlhbGl6ZSBhbGwgNCBsYW5lcyBvZiB0aGUgU0VSREVTLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXUzMiByeHR4X2N0cmwsIGdsdWUwOworCQlpbnQgZXJyOwogCiAJCWVyciA9IGVzcl9yZWFkX3J4dHhfY3RybChucCwgaSwgJnJ4dHhfY3RybCk7CiAJCWlmIChlcnIpCkBAIC0yNDU2LDcgKzI1NjQsNyBAQAogCiAJCWNhc2UgTklVX0ZMQUdTXzEwRzoKIAkJCS8qIDEwRyBjb3BwZXIgKi8KLQkJCXRwID0gJnBoeV90ZW1wbGF0ZV8xZ19jb3BwZXI7CisJCQl0cCA9ICZwaHlfdGVtcGxhdGVfMTBnX2NvcHBlcjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTklVX0ZMQUdTX0ZJQkVSOgpAQCAtMjg3Myw3ICsyOTgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKIHN0YXRpYyBpbnQgdGNhbV91c2VyX2lwX2NsYXNzX3NldChzdHJ1Y3Qgbml1ICpucCwgdW5zaWduZWQgbG9uZyBjbGFzcywKIAkJCQkgIGludCBpcHY2LCB1NjQgcHJvdG9jb2xfaWQsCiAJCQkJICB1NjQgdG9zX21hc2ssIHU2NCB0b3NfdmFsKQpAQCAtMjkwMSw3ICszMDA4LDYgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgdGNhbV9lYXJseV9pbml0KHN0cnVjdCBuaXUgKm5wKQogewpAQCAtMzE2OCw2ICszMjc0LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEVudHJpZXMgZm9yIHRoZSBwb3J0cyBhcmUgaW50ZXJsZWF2ZWQgaW4gdGhlIFRDQU0gKi8KK3N0YXRpYyB1MTYgdGNhbV9nZXRfaW5kZXgoc3RydWN0IG5pdSAqbnAsIHUxNiBpZHgpCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJaWYgKGlkeCA+PSAobnAtPmNsYXMudGNhbV9zeiAtIDEpKQorCQlpZHggPSAwOworCXJldHVybiAobnAtPmNsYXMudGNhbV90b3AgKyAoKGlkeCsxKSAqIG5wLT5wYXJlbnQtPm51bV9wb3J0cykpOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3NpemUoc3RydWN0IG5pdSAqbnApCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJcmV0dXJuIG5wLT5jbGFzLnRjYW1fc3ogLSAxOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3ZhbGlkX2VudHJ5X2NudChzdHJ1Y3Qgbml1ICpucCkKK3sKKwkvKiBPbmUgZW50cnkgcmVzZXJ2ZWQgZm9yIElQIGZyYWdtZW50IHJ1bGUgKi8KKwlyZXR1cm4gbnAtPmNsYXMudGNhbV92YWxpZF9lbnRyaWVzIC0gMTsKK30KKwogc3RhdGljIHZvaWQgbml1X3J4X3NrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgICB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSkKIHsKQEAgLTMzOTAsNiArMzUxNyw3IEBACiAJcnAtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbnAtPmRldik7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJwLT5yeF9jaGFubmVsKTsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJcmV0dXJuIG51bV9yY3I7CkBAIC0zNjY5LDcgKzM3OTcsNyBAQAogCXdvcmtfZG9uZSA9IG5pdV9wb2xsX2NvcmUobnAsIGxwLCBidWRnZXQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJbml1X2xkZ19yZWFybShucCwgbHAsIDEpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwpAQCAtNDA4OCwxMiArNDIxNiwxMiBAQAogc3RhdGljIHZvaWQgbml1X3NjaGVkdWxlX25hcGkoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBuaXVfbGRnICpscCwKIAkJCSAgICAgIHU2NCB2MCwgdTY0IHYxLCB1NjQgdjIpCiB7Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpKSB7CisJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkpIHsKIAkJbHAtPnYwID0gdjA7CiAJCWxwLT52MSA9IHYxOwogCQlscC0+djIgPSB2MjsKIAkJX19uaXVfZmFzdHBhdGhfaW50ZXJydXB0KG5wLCBscC0+bGRnX251bSwgdjApOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCX0KIH0KIApAQCAtNDg5MCw4ICs1MDE4LDcgQEAKIAlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOwogCWludCBpbmRleCwgZXJyOwogCi0JLyogWFhYIGZpeCB0aGlzIGFsbG9jYXRpb24gc2NoZW1lIFhYWCAqLwotCWluZGV4ID0gY3AtPnRjYW1faW5kZXg7CisJaW5kZXggPSBjcC0+dGNhbV90b3A7CiAJdHAgPSAmcGFyZW50LT50Y2FtW2luZGV4XTsKIAogCS8qIE5vdGUgdGhhdCB0aGUgbm9wb3J0IGJpdCBpcyB0aGUgc2FtZSBpbiBib3RoIGlwdjQgYW5kCkBAIC00OTA4LDYgKzUwMzUsOCBAQAogCWVyciA9IHRjYW1fYXNzb2Nfd3JpdGUobnAsIGluZGV4LCB0cC0+YXNzb2NfZGF0YSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKKwl0cC0+dmFsaWQgPSAxOworCWNwLT50Y2FtX3ZhbGlkX2VudHJpZXMrKzsKIAogCXJldHVybiAwOwogfQpAQCAtNTIxMSwxMCArNTM0MCwxMCBAQAogCWlmIChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfMTBHKSB7CiAJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX1hHTUlJOwogCX0gZWxzZSB7Ci0JCWlmIChscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMCkKLQkJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX01JSTsKLQkJZWxzZQorCQlpZiAobHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwKQogCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfR01JSTsKKwkJZWxzZQorCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfTUlJOwogCX0KIAogCW53NjRfbWFjKFhNQUNfQ09ORklHLCB2YWwpOwpAQCAtNjQ0NiwxMSArNjU3NSwxMSBAQAogCiAJaXB2NiA9IGlobCA9IDA7CiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CiAJCWlobCA9IGlwX2hkcihza2IpLT5paGw7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlpcF9wcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CiAJCWlobCA9ICg0MCA+PiAyKTsKIAkJaXB2NiA9IDE7CkBAIC02NzAyLDE3ICs2ODMxLDI3IEBACiAJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKIAljbWQtPnBoeV9hZGRyZXNzID0gbnAtPnBoeV9hZGRyOwogCWNtZC0+c3VwcG9ydGVkID0gbHAtPnN1cHBvcnRlZDsKLQljbWQtPmFkdmVydGlzaW5nID0gbHAtPmFkdmVydGlzaW5nOwotCWNtZC0+YXV0b25lZyA9IGxwLT5hdXRvbmVnOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSBscC0+YWN0aXZlX2FkdmVydGlzaW5nOworCWNtZC0+YXV0b25lZyA9IGxwLT5hY3RpdmVfYXV0b25lZzsKIAljbWQtPnNwZWVkID0gbHAtPmFjdGl2ZV9zcGVlZDsKIAljbWQtPmR1cGxleCA9IGxwLT5hY3RpdmVfZHVwbGV4OworCWNtZC0+cG9ydCA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfRklCRVIpID8gUE9SVF9GSUJSRSA6IFBPUlRfVFA7CisJY21kLT50cmFuc2NlaXZlciA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWENWUl9TRVJERVMpID8KKwkJWENWUl9FWFRFUk5BTCA6IFhDVlJfSU5URVJOQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBuaXVfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisKKwlscC0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOworCWxwLT5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJbHAtPmR1cGxleCA9IGNtZC0+ZHVwbGV4OworCWxwLT5hdXRvbmVnID0gY21kLT5hdXRvbmVnOworCXJldHVybiBuaXVfaW5pdF9saW5rKG5wKTsKIH0KIAogc3RhdGljIHUzMiBuaXVfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02NzI3LDYgKzY4NjYsMTYgQEAKIAlucC0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCitzdGF0aWMgaW50IG5pdV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5wLT5saW5rX2NvbmZpZy5hdXRvbmVnKQorCQlyZXR1cm4gbml1X2luaXRfbGluayhucCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuaXVfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02Nzc4LDYgKzY5MjcsNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbml1X2V0aGZsb3dfdG9fbDNwcm90byhpbnQgZmxvd190eXBlLCB1OCAqcGlkKQoreworCXN3aXRjaCAoZmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFRDUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19UQ1A7CisJCWJyZWFrOworCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fVURQOworCQlicmVhazsKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fU0NUUDsKKwkJYnJlYWs7CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fQUg7CisJCWJyZWFrOworCWNhc2UgRVNQX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fRVNQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqcGlkID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pdV9jbGFzc190b19ldGhmbG93KHU2NCBjbGFzcywgaW50ICpmbG93X3R5cGUpCit7CisJc3dpdGNoIChjbGFzcykgeworCWNhc2UgQ0xBU1NfQ09ERV9UQ1BfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFRDUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVURQX0lQVjQ6CisJCSpmbG93X3R5cGUgPSBVRFBfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OgorCQkqZmxvd190eXBlID0gQUhfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1NDVFBfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFNDVFBfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1RDUF9JUFY2OgorCQkqZmxvd190eXBlID0gVENQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VRFBfSVBWNjoKKwkJKmZsb3dfdHlwZSA9IFVEUF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfQUhfRVNQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBBSF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfU0NUUF9JUFY2OgorCQkqZmxvd190eXBlID0gU0NUUF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMToKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMjoKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMzoKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HNDoKKwkJKmZsb3dfdHlwZSA9IElQX1VTRVJfRkxPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgbml1X2V0aGZsb3dfdG9fY2xhc3MoaW50IGZsb3dfdHlwZSwgdTY0ICpjbGFzcykKIHsKIAlzd2l0Y2ggKGZsb3dfdHlwZSkgewpAQCAtNjc4Nyw3ICs3MDA1LDggQEAKIAljYXNlIFVEUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY0OwogCQlicmVhazsKLQljYXNlIEFIX0VTUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OwogCQlicmVhazsKIAljYXNlIFNDVFBfVjRfRkxPVzoKQEAgLTY3OTksNyArNzAxOCw4IEBACiAJY2FzZSBVRFBfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9VRFBfSVBWNjsKIAkJYnJlYWs7Ci0JY2FzZSBBSF9FU1BfVjZfRkxPVzoKKwljYXNlIEFIX1Y2X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1Y2X0ZMT1c6CkBAIC02ODE2LDggKzcwMzYsNiBAQAogewogCXU2NCBldGhmbG93ID0gMDsKIAotCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX1BPUlQpCi0JCWV0aGZsb3cgfD0gUlhIX0RFVl9QT1JUOwogCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX0wyREEpCiAJCWV0aGZsb3cgfD0gUlhIX0wyREE7CiAJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfVkxBTikKQEAgLTY4NDEsOCArNzA1OSw2IEBACiB7CiAJdTY0IGtleSA9IDA7CiAKLQlpZiAoZXRoZmxvdyAmIFJYSF9ERVZfUE9SVCkKLQkJa2V5IHw9IEZMT1dfS0VZX1BPUlQ7CiAJaWYgKGV0aGZsb3cgJiBSWEhfTDJEQSkKIAkJa2V5IHw9IEZMT1dfS0VZX0wyREE7CiAJaWYgKGV0aGZsb3cgJiBSWEhfVkxBTikKQEAgLTY4NjQsNDEgKzcwODAsMjc5IEBACiAKIH0KIAotc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQorc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKIHsKLQlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTY0IGNsYXNzOwogCi0JY21kLT5kYXRhID0gMDsKKwluZmMtPmRhdGEgPSAwOwogCi0JaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKG5mYy0+Zmxvd190eXBlLCAmY2xhc3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChucC0+cGFyZW50LT50Y2FtX2tleVtjbGFzcyAtIENMQVNTX0NPREVfVVNFUl9QUk9HMV0gJgogCSAgICBUQ0FNX0tFWV9ESVNDKQotCQljbWQtPmRhdGEgPSBSWEhfRElTQ0FSRDsKKwkJbmZjLT5kYXRhID0gUlhIX0RJU0NBUkQ7CiAJZWxzZQotCi0JCWNtZC0+ZGF0YSA9IG5pdV9mbG93a2V5X3RvX2V0aGZsb3cobnAtPnBhcmVudC0+Zmxvd19rZXlbY2xhc3MgLQorCQluZmMtPmRhdGEgPSBuaXVfZmxvd2tleV90b19ldGhmbG93KG5wLT5wYXJlbnQtPmZsb3dfa2V5W2NsYXNzIC0KIAkJCQkJCSAgICAgIENMQVNTX0NPREVfVVNFUl9QUk9HMV0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pdV9zZXRfaGFzaF9vcHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCitzdGF0aWMgdm9pZCBuaXVfZ2V0X2lwNGZzX2Zyb21fdGNhbV9rZXkoc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cCwKKwkJCQkJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3ApCit7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0c3JjID0gKHRwLT5rZXlbM10gJiBUQ0FNX1Y0S0VZM19TQUREUikgPj4KKwkJVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9ICh0cC0+a2V5WzNdICYgVENBTV9WNEtFWTNfREFERFIpID4+CisJCVRDQU1fVjRLRVkzX0RBRERSX1NISUZUOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPSAodHAtPmtleV9tYXNrWzNdICYgVENBTV9WNEtFWTNfU0FERFIpID4+CisJCVRDQU1fVjRLRVkzX1NBRERSX1NISUZUOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QgPSAodHAtPmtleV9tYXNrWzNdICYgVENBTV9WNEtFWTNfREFERFIpID4+CisJCVRDQU1fVjRLRVkzX0RBRERSX1NISUZUOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9CisJCWNwdV90b19iZTMyKGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPQorCQljcHVfdG9fYmUzMihmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9CisJCWNwdV90b19iZTMyKGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnRvcyA9ICh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfVE9TKSA+PgorCQlUQ0FNX1Y0S0VZMl9UT1NfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnRvcyA9ICh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9UT1MpID4+CisJCVRDQU1fVjRLRVkyX1RPU19TSElGVDsKKworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCSgodHAtPmtleVsyXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSA+PiAxNjsKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJKCh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpICYgMHhmZmZmOworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucHNyYyA9CisJCQkoKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSA+PiAxNjsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJKCh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCSBUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVCkgJiAweGZmZmY7CisKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQljcHVfdG9fYmUxNihmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCWNwdV90b19iZTE2KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjKTsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKwkJZnNwLT5tX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCSh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCisJCWZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSA9CisJCQljcHVfdG9fYmUzMihmc3AtPmhfdS5haF9pcDRfc3BlYy5zcGkpOworCQlmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJY3B1X3RvX2JlMzIoZnNwLT5tX3UuYWhfaXA0X3NwZWMuc3BpKTsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCWZzcC0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKwkJZnNwLT5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQ7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMpOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQljcHVfdG9fYmUzMihmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLnByb3RvID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUFJPVE8pID4+CisJCQlUQ0FNX1Y0S0VZMl9QUk9UT19TSElGVDsKKwkJZnNwLT5tX3UudXNyX2lwNF9zcGVjLnByb3RvID0KKwkJCSh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QUk9UTykgPj4KKwkJCVRDQU1fVjRLRVkyX1BST1RPX1NISUZUOworCisJCWZzcC0+aF91LnVzcl9pcDRfc3BlYy5pcF92ZXIgPSBFVEhfUlhfTkZDX0lQNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pdV9nZXRfZXRodG9vbF90Y2FtX2VudHJ5KHN0cnVjdCBuaXUgKm5wLAorCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMpCit7CisJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CisJc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cDsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCA9ICZuZmMtPmZzOworCXUxNiBpZHg7CisJdTY0IGNsYXNzOworCWludCByZXQgPSAwOworCisJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsICh1MTYpbmZjLT5mcy5sb2NhdGlvbik7CisKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKwlpZiAoIXRwLT52YWxpZCkgeworCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIGVudHJ5IFslZF0gaW52YWxpZCBmb3IgaWR4WyVkXVxuIiwKKwkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgKHUxNiluZmMtPmZzLmxvY2F0aW9uLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBmaWxsIHRoZSBmbG93IHNwZWMgZW50cnkgKi8KKwljbGFzcyA9ICh0cC0+a2V5WzBdICYgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERSkgPj4KKwkJVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKwlyZXQgPSBuaXVfY2xhc3NfdG9fZXRoZmxvdyhjbGFzcywgJmZzcC0+Zmxvd190eXBlKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2NsYXNzX3RvX2V0aGZsb3cgZmFpbGVkXG4iLAorCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGZzcC0+Zmxvd190eXBlID09IEFIX1Y0X0ZMT1cgfHwgZnNwLT5mbG93X3R5cGUgPT0gQUhfVjZfRkxPVykgeworCQl1MzIgcHJvdG8gPSAodHAtPmtleVsyXSAmIFRDQU1fVjRLRVkyX1BST1RPKSA+PgorCQkJVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQ7CisJCWlmIChwcm90byA9PSBJUFBST1RPX0VTUCkgeworCQkJaWYgKGZzcC0+Zmxvd190eXBlID09IEFIX1Y0X0ZMT1cpCisJCQkJZnNwLT5mbG93X3R5cGUgPSBFU1BfVjRfRkxPVzsKKwkJCWVsc2UKKwkJCQlmc3AtPmZsb3dfdHlwZSA9IEVTUF9WNl9GTE9XOworCQl9CisJfQorCisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJbml1X2dldF9pcDRmc19mcm9tX3RjYW1fa2V5KHRwLCBmc3ApOworCQlicmVhazsKKwljYXNlIFRDUF9WNl9GTE9XOgorCWNhc2UgVURQX1Y2X0ZMT1c6CisJY2FzZSBTQ1RQX1Y2X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCWNhc2UgRVNQX1Y2X0ZMT1c6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCW5pdV9nZXRfaXA0ZnNfZnJvbV90Y2FtX2tleSh0cCwgZnNwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHRwLT5hc3NvY19kYXRhICYgVENBTV9BU1NPQ0RBVEFfRElTQykKKwkJZnNwLT5yaW5nX2Nvb2tpZSA9IFJYX0NMU19GTE9XX0RJU0M7CisJZWxzZQorCQlmc3AtPnJpbmdfY29va2llID0gKHRwLT5hc3NvY19kYXRhICYgVENBTV9BU1NPQ0RBVEFfT0ZGU0VUKSA+PgorCQkJVENBTV9BU1NPQ0RBVEFfT0ZGU0VUX1NISUZUOworCisJLyogcHV0IHRoZSB0Y2FtIHNpemUgaGVyZSAqLworCW5mYy0+ZGF0YSA9IHRjYW1fZ2V0X3NpemUobnApOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9ldGh0b29sX3RjYW1fYWxsKHN0cnVjdCBuaXUgKm5wLAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjLAorCQkJCSAgICB1MzIgKnJ1bGVfbG9jcykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCWludCBpLCBpZHgsIGNudDsKKwl1MTYgbl9lbnRyaWVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCS8qIHB1dCB0aGUgdGNhbSBzaXplIGhlcmUgKi8KKwluZmMtPmRhdGEgPSB0Y2FtX2dldF9zaXplKG5wKTsKKworCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCW5fZW50cmllcyA9IG5mYy0+cnVsZV9jbnQ7CisJZm9yIChjbnQgPSAwLCBpID0gMDsgaSA8IG5mYy0+ZGF0YTsgaSsrKSB7CisJCWlkeCA9IHRjYW1fZ2V0X2luZGV4KG5wLCBpKTsKKwkJdHAgPSAmcGFyZW50LT50Y2FtW2lkeF07CisJCWlmICghdHAtPnZhbGlkKQorCQkJY29udGludWU7CisJCXJ1bGVfbG9jc1tjbnRdID0gaTsKKwkJY250Kys7CisJfQorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZiAobl9lbnRyaWVzICE9IGNudCkgeworCQkvKiBwcmludCB3YXJuaW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2dldF9ldGh0b29sX3RjYW1fYWxsLCAiCisJCQkibl9lbnRyaWVzWyVkXSAhPSBjbnRbJWRdISEhXG5cbiIsCisJCQlucC0+cGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgbl9lbnRyaWVzLCBjbnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pdV9nZXRfbmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsCisJCSAgICAgICB2b2lkICpydWxlX2xvY3MpCiB7CiAJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9HUlhGSDoKKwkJcmV0ID0gbml1X2dldF9oYXNoX29wdHMobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhSSU5HUzoKKwkJY21kLT5kYXRhID0gbnAtPm51bV9yeF9yaW5nczsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCQljbWQtPnJ1bGVfY250ID0gdGNhbV9nZXRfdmFsaWRfZW50cnlfY250KG5wKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJCXJldCA9IG5pdV9nZXRfZXRodG9vbF90Y2FtX2VudHJ5KG5wLCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCXJldCA9IG5pdV9nZXRfZXRodG9vbF90Y2FtX2FsbChucCwgY21kLCAodTMyICopcnVsZV9sb2NzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfc2V0X2hhc2hfb3B0cyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKIAl1NjQgY2xhc3M7CiAJdTY0IGZsb3dfa2V5ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKG5mYy0+Zmxvd190eXBlLCAmY2xhc3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjbGFzcyA8IENMQVNTX0NPREVfVVNFUl9QUk9HMSB8fAogCSAgICBjbGFzcyA+IENMQVNTX0NPREVfU0NUUF9JUFY2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbWQtPmRhdGEgJiBSWEhfRElTQ0FSRCkgeworCWlmIChuZmMtPmRhdGEgJiBSWEhfRElTQ0FSRCkgewogCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKIAkJZmxvd19rZXkgPSBucC0+cGFyZW50LT50Y2FtX2tleVtjbGFzcyAtCiAJCQkJCSAgICAgICBDTEFTU19DT0RFX1VTRVJfUFJPRzFdOwpAQCAtNjkyMyw3ICs3Mzc3LDcgQEAKIAkJfQogCX0KIAotCWlmICghbml1X2V0aGZsb3dfdG9fZmxvd2tleShjbWQtPmRhdGEsICZmbG93X2tleSkpCisJaWYgKCFuaXVfZXRoZmxvd190b19mbG93a2V5KG5mYy0+ZGF0YSwgJmZsb3dfa2V5KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKQEAgLTY5MzQsNiArNzM4OCwzMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbml1X2dldF90Y2Fta2V5X2Zyb21faXA0ZnMoc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3AsCisJCQkJICAgICAgIHN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHAsCisJCQkJICAgICAgIGludCBsMl9yZGNfdGFiLCB1NjQgY2xhc3MpCit7CisJdTggcGlkID0gMDsKKwl1MzIgc2lwLCBkaXAsIHNpcG0sIGRpcG0sIHNwaSwgc3BpbTsKKwl1MTYgc3BvcnQsIGRwb3J0LCBzcG0sIGRwbTsKKworCXNpcCA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCXNpcG0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwlkaXAgPSBiZTMyX3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwlkaXBtID0gYmUzMl90b19jcHUoZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisKKwl0cC0+a2V5WzBdID0gY2xhc3MgPDwgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKwl0cC0+a2V5X21hc2tbMF0gPSBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFOworCXRwLT5rZXlbMV0gPSAodTY0KWwyX3JkY190YWIgPDwgVENBTV9WNEtFWTFfTDJSRENOVU1fU0hJRlQ7CisJdHAtPmtleV9tYXNrWzFdID0gVENBTV9WNEtFWTFfTDJSRENOVU07CisKKwl0cC0+a2V5WzNdID0gKHU2NClzaXAgPDwgVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJdHAtPmtleVszXSB8PSBkaXA7CisKKwl0cC0+a2V5X21hc2tbM10gPSAodTY0KXNpcG0gPDwgVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJdHAtPmtleV9tYXNrWzNdIHw9IGRpcG07CisKKwl0cC0+a2V5WzJdIHw9ICgodTY0KWZzcC0+aF91LnRjcF9pcDRfc3BlYy50b3MgPDwKKwkJICAgICAgIFRDQU1fVjRLRVkyX1RPU19TSElGVCk7CisJdHAtPmtleV9tYXNrWzJdIHw9ICgodTY0KWZzcC0+bV91LnRjcF9pcDRfc3BlYy50b3MgPDwKKwkJCSAgICBUQ0FNX1Y0S0VZMl9UT1NfU0hJRlQpOworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCXNwb3J0ID0gYmUxNl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlzcG0gPSBiZTE2X3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCWRwb3J0ID0gYmUxNl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQlkcG0gPSBiZTE2X3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCk7CisKKwkJdHAtPmtleVsyXSB8PSAoKCh1NjQpc3BvcnQgPDwgMTYpIHwgZHBvcnQpOworCQl0cC0+a2V5X21hc2tbMl0gfD0gKCgodTY0KXNwbSA8PCAxNikgfCBkcG0pOworCQluaXVfZXRoZmxvd190b19sM3Byb3RvKGZzcC0+Zmxvd190eXBlLCAmcGlkKTsKKwkJYnJlYWs7CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCXNwaSA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSk7CisJCXNwaW0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkpOworCisJCXRwLT5rZXlbMl0gfD0gc3BpOworCQl0cC0+a2V5X21hc2tbMl0gfD0gc3BpbTsKKwkJbml1X2V0aGZsb3dfdG9fbDNwcm90byhmc3AtPmZsb3dfdHlwZSwgJnBpZCk7CisJCWJyZWFrOworCWNhc2UgSVBfVVNFUl9GTE9XOgorCQlzcGkgPSBiZTMyX3RvX2NwdShmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisJCXNwaW0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisKKwkJdHAtPmtleVsyXSB8PSBzcGk7CisJCXRwLT5rZXlfbWFza1syXSB8PSBzcGltOworCQlwaWQgPSBmc3AtPmhfdS51c3JfaXA0X3NwZWMucHJvdG87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXRwLT5rZXlbMl0gfD0gKCh1NjQpcGlkIDw8IFRDQU1fVjRLRVkyX1BST1RPX1NISUZUKTsKKwlpZiAocGlkKSB7CisJCXRwLT5rZXlfbWFza1syXSB8PSBUQ0FNX1Y0S0VZMl9QUk9UTzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnkoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0gJm5mYy0+ZnM7CisJc3RydWN0IG5pdV9yZGNfdGFibGVzICpyZGNfdGFibGUgPSAmcGFyZW50LT5yZGNfZ3JvdXBfY2ZnW25wLT5wb3J0XTsKKwlpbnQgbDJfcmRjX3RhYmxlID0gcmRjX3RhYmxlLT5maXJzdF90YWJsZV9udW07CisJdTE2IGlkeDsKKwl1NjQgY2xhc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyLCByZXQ7CisKKwlyZXQgPSAwOworCisJaWR4ID0gbmZjLT5mcy5sb2NhdGlvbjsKKwlpZiAoaWR4ID49IHRjYW1fZ2V0X3NpemUobnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmc3AtPmZsb3dfdHlwZSA9PSBJUF9VU0VSX0ZMT1cpIHsKKwkJaW50IGk7CisJCWludCBhZGRfdXNyX2NscyA9IDA7CisJCWludCBpcHY2ID0gMDsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgKnVzcGVjID0gJmZzcC0+aF91LnVzcl9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgKnVtYXNrID0gJmZzcC0+bV91LnVzcl9pcDRfc3BlYzsKKworCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTklVX0wzX1BST0dfQ0xTOyBpKyspIHsKKwkJCWlmIChwYXJlbnQtPmwzX2Nsc1tpXSkgeworCQkJCWlmICh1c3BlYy0+cHJvdG8gPT0gcGFyZW50LT5sM19jbHNfcGlkW2ldKSB7CisJCQkJCWNsYXNzID0gcGFyZW50LT5sM19jbHNbaV07CisJCQkJCXBhcmVudC0+bDNfY2xzX3JlZmNudFtpXSsrOworCQkJCQlhZGRfdXNyX2NscyA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogUHJvZ3JhbSBuZXcgdXNlciBJUCBjbGFzcyAqLworCQkJCXN3aXRjaCAoaSkgeworCQkJCWNhc2UgMDoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzM7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodXNwZWMtPmlwX3ZlciA9PSBFVEhfUlhfTkZDX0lQNikKKwkJCQkJaXB2NiA9IDE7CisJCQkJcmV0ID0gdGNhbV91c2VyX2lwX2NsYXNzX3NldChucCwgY2xhc3MsIGlwdjYsCisJCQkJCQkJICAgICB1c3BlYy0+cHJvdG8sCisJCQkJCQkJICAgICB1c3BlYy0+dG9zLAorCQkJCQkJCSAgICAgdW1hc2stPnRvcyk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3NfZW5hYmxlKG5wLCBjbGFzcywgMSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisJCQkJcGFyZW50LT5sM19jbHNbaV0gPSBjbGFzczsKKwkJCQlwYXJlbnQtPmwzX2Nsc19waWRbaV0gPSB1c3BlYy0+cHJvdG87CisJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldKys7CisJCQkJYWRkX3Vzcl9jbHMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghYWRkX3Vzcl9jbHMpIHsKKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCQkiQ291bGQgbm90IGZpbmQvaW5zZXJ0IGNsYXNzIGZvciBwaWQgJWRcbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgdXNwZWMtPnByb3RvKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCX0gZWxzZSB7CisJCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MoZnNwLT5mbG93X3R5cGUsICZjbGFzcykpIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgaWR4KTsKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKworCW1lbXNldCh0cCwgMCwgc2l6ZW9mKCp0cCkpOworCisJLyogZmlsbCBpbiB0aGUgdGNhbSBrZXkgYW5kIG1hc2sgKi8KKwlzd2l0Y2ggKGZzcC0+Zmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQluaXVfZ2V0X3RjYW1rZXlfZnJvbV9pcDRmcyhmc3AsIHRwLCBsMl9yZGNfdGFibGUsIGNsYXNzKTsKKwkJYnJlYWs7CisJY2FzZSBUQ1BfVjZfRkxPVzoKKwljYXNlIFVEUF9WNl9GTE9XOgorCWNhc2UgU0NUUF9WNl9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgorCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJmbG93ICVkIGZvciBJUHY2IG5vdCBpbXBsZW1lbnRlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgZnNwLT5mbG93X3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJaWYgKGZzcC0+aF91LnVzcl9pcDRfc3BlYy5pcF92ZXIgPT0gRVRIX1JYX05GQ19JUDQpIHsKKwkJCW5pdV9nZXRfdGNhbWtleV9mcm9tX2lwNGZzKGZzcCwgdHAsIGwyX3JkY190YWJsZSwKKwkJCQkJCSAgIGNsYXNzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJ1c3IgZmxvdyBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcblxuIiwKKwkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJVbmtub3duIGZsb3cgdHlwZSAlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgZnNwLT5mbG93X3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBmaWxsIGluIHRoZSBhc3NvYyBkYXRhICovCisJaWYgKGZzcC0+cmluZ19jb29raWUgPT0gUlhfQ0xTX0ZMT1dfRElTQykgeworCQl0cC0+YXNzb2NfZGF0YSA9IFRDQU1fQVNTT0NEQVRBX0RJU0M7CisJfSBlbHNlIHsKKwkJaWYgKGZzcC0+cmluZ19jb29raWUgPj0gbnAtPm51bV9yeF9yaW5ncykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJCSJJbnZhbGlkIFJYIHJpbmcgJWxsZFxuXG4iLAorCQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUsCisJCQkJKGxvbmcgbG9uZykgZnNwLT5yaW5nX2Nvb2tpZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJdHAtPmFzc29jX2RhdGEgPSAoVENBTV9BU1NPQ0RBVEFfVFJFU19VU0VfT0ZGU0VUIHwKKwkJCQkgIChmc3AtPnJpbmdfY29va2llIDw8CisJCQkJICAgVENBTV9BU1NPQ0RBVEFfT0ZGU0VUX1NISUZUKSk7CisJfQorCisJZXJyID0gdGNhbV93cml0ZShucCwgaWR4LCB0cC0+a2V5LCB0cC0+a2V5X21hc2spOworCWlmIChlcnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWVyciA9IHRjYW1fYXNzb2Nfd3JpdGUobnAsIGlkeCwgdHAtPmFzc29jX2RhdGEpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdmFsaWRhdGUgdGhlIGVudHJ5ICovCisJdHAtPnZhbGlkID0gMTsKKwlucC0+Y2xhcy50Y2FtX3ZhbGlkX2VudHJpZXMrKzsKK291dDoKKwluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeShzdHJ1Y3Qgbml1ICpucCwgdTMyIGxvYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXUxNiBpZHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgY2xhc3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAobG9jID49IHRjYW1fZ2V0X3NpemUobnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsIGxvYyk7CisJdHAgPSAmcGFyZW50LT50Y2FtW2lkeF07CisKKwkvKiBpZiB0aGUgZW50cnkgaXMgb2YgYSB1c2VyIGRlZmluZWQgY2xhc3MsIHRoZW4gdXBkYXRlKi8KKwljbGFzcyA9ICh0cC0+a2V5WzBdICYgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERSkgPj4KKwkJVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKworCWlmIChjbGFzcyA+PSBDTEFTU19DT0RFX1VTRVJfUFJPRzEgJiYgY2xhc3MgPD0gQ0xBU1NfQ09ERV9VU0VSX1BST0c0KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgTklVX0wzX1BST0dfQ0xTOyBpKyspIHsKKwkJCWlmIChwYXJlbnQtPmwzX2Nsc1tpXSA9PSBjbGFzcykgeworCQkJCXBhcmVudC0+bDNfY2xzX3JlZmNudFtpXS0tOworCQkJCWlmICghcGFyZW50LT5sM19jbHNfcmVmY250W2ldKSB7CisJCQkJCS8qIGRpc2FibGUgY2xhc3MgKi8KKwkJCQkJcmV0ID0gdGNhbV91c2VyX2lwX2NsYXNzX2VuYWJsZShucCwKKwkJCQkJCQkJCWNsYXNzLAorCQkJCQkJCQkJMCk7CisJCQkJCWlmIChyZXQpCisJCQkJCQlnb3RvIG91dDsKKwkJCQkJcGFyZW50LT5sM19jbHNbaV0gPSAwOworCQkJCQlwYXJlbnQtPmwzX2Nsc19waWRbaV0gPSAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBOSVVfTDNfUFJPR19DTFMpIHsKKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnksIgorCQkJCSJVc3IgY2xhc3MgMHglbGx4IG5vdCBmb3VuZCBcbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjbGFzcyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXQgPSB0Y2FtX2ZsdXNoKG5wLCBpZHgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogaW52YWxpZGF0ZSB0aGUgZW50cnkgKi8KKwl0cC0+dmFsaWQgPSAwOworCW5wLT5jbGFzLnRjYW1fdmFsaWRfZW50cmllcy0tOworb3V0OgorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9zZXRfbmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCit7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9TUlhGSDoKKwkJcmV0ID0gbml1X3NldF9oYXNoX29wdHMobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmV0ID0gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDoKKwkJcmV0ID0gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZC0+ZnMubG9jYXRpb24pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwogfSBuaXVfeG1hY19zdGF0X2tleXNbXSA9IHsKQEAgLTcxNTgsNiArNzkzNyw3IEBACiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSBuaXVfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gbml1X3NldF9tc2dsZXZlbCwKKwkubndheV9yZXNldAkJPSBuaXVfbndheV9yZXNldCwKIAkuZ2V0X2VlcHJvbV9sZW4JCT0gbml1X2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tCQk9IG5pdV9nZXRfZWVwcm9tLAogCS5nZXRfc2V0dGluZ3MJCT0gbml1X2dldF9zZXR0aW5ncywKQEAgLTcxNjYsOCArNzk0Niw4IEBACiAJLmdldF9zdGF0c19jb3VudAk9IG5pdV9nZXRfc3RhdHNfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbml1X2dldF9ldGh0b29sX3N0YXRzLAogCS5waHlzX2lkCQk9IG5pdV9waHlzX2lkLAotCS5nZXRfcnhoYXNoCQk9IG5pdV9nZXRfaGFzaF9vcHRzLAotCS5zZXRfcnhoYXNoCQk9IG5pdV9zZXRfaGFzaF9vcHRzLAorCS5nZXRfcnhuZmMJCT0gbml1X2dldF9uZmMsCisJLnNldF9yeG5mYwkJPSBuaXVfc2V0X25mYywKIH07CiAKIHN0YXRpYyBpbnQgbml1X2xkZ19hc3NpZ25fbGRuKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50LApAQCAtODIzNyw3ICs5MDE3LDggQEAKIAluaXVkYmcoUFJPQkUsICJuaXVfY2xhc3NpZmllcl9zd3N0YXRlX2luaXQ6IG51bV90Y2FtKCVkKVxuIiwKIAkgICAgICAgbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyk7CiAKLQljcC0+dGNhbV9pbmRleCA9ICh1MTYpIG5wLT5wb3J0OworCWNwLT50Y2FtX3RvcCA9ICh1MTYpIG5wLT5wb3J0OworCWNwLT50Y2FtX3N6ID0gbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyAvIG5wLT5wYXJlbnQtPm51bV9wb3J0czsKIAljcC0+aDFfaW5pdCA9IDB4ZmZmZmZmZmY7CiAJY3AtPmgyX2luaXQgPSAweGZmZmY7CiAKQEAgLTgyNTcsNyArOTAzOCw5IEBACiAJCQkgICBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CiAJCQkgICBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCWxwLT5zcGVlZCA9IGxwLT5hY3RpdmVfc3BlZWQgPSBTUEVFRF9JTlZBTElEOwotCWxwLT5kdXBsZXggPSBscC0+YWN0aXZlX2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCWxwLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwlscC0+YWN0aXZlX2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCWxwLT5hdXRvbmVnID0gMTsKICNpZiAwCiAJbHAtPmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19NQUM7CiAJbHAtPmFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmggYi9kcml2ZXJzL25ldC9uaXUuaAppbmRleCBlMWE3MzkyLi44NzU0ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuaAorKysgYi9kcml2ZXJzL25ldC9uaXUuaApAQCAtMzAwNCw3ICszMDA0LDkgQEAKIAlzdHJ1Y3Qgbml1X2FsdG1hY19yZGMJYWx0X21hY19tYXBwaW5nc1sxNl07CiAJc3RydWN0IG5pdV92bGFuX3JkYwl2bGFuX21hcHBpbmdzW0VORVRfVkxBTl9UQkxfTlVNX0VOVFJJRVNdOwogCi0JdTE2CQkJdGNhbV9pbmRleDsKKwl1MTYJCQl0Y2FtX3RvcDsKKwl1MTYJCQl0Y2FtX3N6OworCXUxNgkJCXRjYW1fdmFsaWRfZW50cmllczsKIAl1MTYJCQludW1fYWx0X21hY19tYXBwaW5nczsKIAogCXUzMgkJCWgxX2luaXQ7CkBAIC0zMDQwLDYgKzMwNDIsNyBAQAogfTsKIAogc3RydWN0IG5pdV90Y2FtX2VudHJ5IHsKKwl1OAkJCXZhbGlkOwogCXU2NAkJCWtleVs0XTsKIAl1NjQJCQlrZXlfbWFza1s0XTsKIAl1NjQJCQlhc3NvY19kYXRhOwpAQCAtMzEwNywxMCArMzExMCwxNSBAQAogCXN0cnVjdCBwaHlfcHJvYmVfaW5mbwlwaHlfcHJvYmVfaW5mbzsKIAogCXN0cnVjdCBuaXVfdGNhbV9lbnRyeQl0Y2FtW05JVV9UQ0FNX0VOVFJJRVNfTUFYXTsKLQl1NjQJCQlsMl9jbHNbMl07Ci0JdTY0CQkJbDNfY2xzWzRdOworCisjZGVmaW5lCU5JVV9MMl9QUk9HX0NMUwkJMgorI2RlZmluZQlOSVVfTDNfUFJPR19DTFMJCTQKKwl1NjQJCQlsMl9jbHNbTklVX0wyX1BST0dfQ0xTXTsKKwl1NjQJCQlsM19jbHNbTklVX0wzX1BST0dfQ0xTXTsKIAl1NjQJCQl0Y2FtX2tleVsxMl07CiAJdTY0CQkJZmxvd19rZXlbMTJdOworCXUxNgkJCWwzX2Nsc19yZWZjbnRbTklVX0wzX1BST0dfQ0xTXTsKKwl1OAkJCWwzX2Nsc19waWRbTklVX0wzX1BST0dfQ0xTXTsKIH07CiAKIHN0cnVjdCBuaXVfb3BzIHsKQEAgLTMxMzEsMTYgKzMxMzksMTkgQEAKIH07CiAKIHN0cnVjdCBuaXVfbGlua19jb25maWcgeworCXUzMgkJCQlzdXBwb3J0ZWQ7CisKIAkvKiBEZXNjcmliZXMgd2hhdCB3ZSdyZSB0cnlpbmcgdG8gZ2V0LiAqLwogCXUzMgkJCQlhZHZlcnRpc2luZzsKLQl1MzIJCQkJc3VwcG9ydGVkOwogCXUxNgkJCQlzcGVlZDsKIAl1OAkJCQlkdXBsZXg7CiAJdTgJCQkJYXV0b25lZzsKIAogCS8qIERlc2NyaWJlcyB3aGF0IHdlIGFjdHVhbGx5IGhhdmUuICovCisJdTMyCQkJCWFjdGl2ZV9hZHZlcnRpc2luZzsKIAl1MTYJCQkJYWN0aXZlX3NwZWVkOwogCXU4CQkJCWFjdGl2ZV9kdXBsZXg7CisJdTgJCQkJYWN0aXZlX2F1dG9uZWc7CiAjZGVmaW5lIFNQRUVEX0lOVkFMSUQJCTB4ZmZmZgogI2RlZmluZSBEVVBMRVhfSU5WQUxJRAkJMHhmZgogI2RlZmluZSBBVVRPTkVHX0lOVkFMSUQJCTB4ZmYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBlODAyOTRkLi4yMjFiMGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC00MDksNyArNDA5LDcgQEAKIHN0cnVjdCByeF9pbmZvIHsKIAlzcGlubG9ja190CWxvY2s7CiAJaW50CQl1cDsKLQlsb25nCQlpZGxlOworCXVuc2lnbmVkIGxvbmcJaWRsZTsKIAogCXN0cnVjdCBza19idWZmCSpza2JzW05SX1JYX0RFU0NdOwogCkBAIC04MjIsOCArODIyLDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldi0+cnhfaW5mby5za2JzW2ldOwogCQlkZXYtPnJ4X2luZm8uc2tic1tpXSA9IE5VTEw7CiAJCWNsZWFyX3J4X2Rlc2MoZGV2LCBpKTsKLQkJaWYgKHNrYikKLQkJCWtmcmVlX3NrYihza2IpOworCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYyBiL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYwppbmRleCBkMDM0OWU3Li41ZWViNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAlpZiAoKmNoYW4tPnN0YXR1cyAmIFBBU19TVEFUVVNfRVJST1IpCiAJCXJlZyB8PSBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX0RJTlRDOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJm1hYy0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKIAogCXdyaXRlX2lvYl9yZWcoUEFTX0lPQl9ETUFfUlhDSF9SRVNFVChjaGFuLT5jaG5vKSwgcmVnKTsKIApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAogCW1vZF90aW1lcigmdHhyaW5nLT5jbGVhbl90aW1lciwgamlmZmllcyArIChUWF9DTEVBTl9JTlRFUlZBTCkqMik7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZtYWMtPm5hcGkpOwogCiAJaWYgKHJlZykKIAkJd3JpdGVfaW9iX3JlZyhQQVNfSU9CX0RNQV9UWENIX1JFU0VUKGNoYW4tPmNobm8pLCByZWcpOwpAQCAtMTYzOSw3ICsxNjM5LDcgQEAKIAlwa3RzID0gcGFzZW1pX21hY19jbGVhbl9yeChyeF9yaW5nKG1hYyksIGJ1ZGdldCk7CiAJaWYgKHBrdHMgPCBidWRnZXQpIHsKIAkJLyogYWxsIGRvbmUsIG5vIG1vcmUgcGFja2V0cyBwcmVzZW50ICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCXBhc2VtaV9tYWNfcmVzdGFydF9yeF9pbnRyKG1hYyk7CiAJCXBhc2VtaV9tYWNfcmVzdGFydF90eF9pbnRyKG1hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDI0MDRhODMuLjhmMzg3MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0yNTcsNiArMjU3LDE4IEBACiAJbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAJd2l0aCBDYXJkIFNlcnZpY2VzLgogKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWwzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbDNfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGVsM19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWwzX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVsM190eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsM19nZXRfc3RhdHMsCisJLm5kb19kb19pb2N0bAkJPSBlbDNfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCB0YzU3NF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKQEAgLTI4NCwxOCArMjk2LDkgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAotCS8qIFRoZSBFTDMtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZlbDNfZ2V0X3N0YXRzOwotCWRldi0+ZG9faW9jdGwgPSAmZWwzX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZlbDNfbmV0ZGV2X29wczsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLQlkZXYtPm9wZW4gPSAmZWwzX29wZW47Ci0JZGV2LT5zdG9wID0gJmVsM19jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDNfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgogCiAJcmV0dXJuIHRjNTc0X2NvbmZpZyhsaW5rKTsKIH0gLyogdGM1NzRfYXR0YWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDFlMDFiOGE2Li5jZGY2NjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMTY5LDYgKzE2OSwxOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbDNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcCAJCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfY29uZmlnCQk9IGVsM19jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCB0YzU4OV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwpAQCAtMTk1LDE3ICsyMDgsOSBAQAogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCi0gICAgLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsM19zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZlbDNfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotICAgIGRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZlbDNfbmV0ZGV2X29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgorCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKICAgICByZXR1cm4gdGM1ODlfY29uZmlnKGxpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAwYWZhNzIwLi41MDFhOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKQEAgLTkxLDYgKzkyLDEwIEBACiBzdGF0aWMgaW50IGF4bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBheG5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYXhuZXRfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGlycXJldHVybl90IGVpX2lycV93cmFwcGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBlaV93YXRjaGRvZyh1X2xvbmcgYXJnKTsKQEAgLTEwOCw3ICsxMTMsNiBAQAogCiBzdGF0aWMgdm9pZCBheG5ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBBWDg4MTkwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0cCk7CiBzdGF0aWMgaW50IGF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM0LDYgKzEzOCwxOSBAQAogCXJldHVybiBwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4bmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBheG5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBheG5ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGF4bmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBheG5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBheG5ldF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGdldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBheG5ldF9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMTQ2LDE1ICsxNjMsMTcgQEAKIHsKICAgICBheG5ldF9kZXZfdCAqaW5mbzsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworICAgIHN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsOwogCiAgICAgREVCVUcoMCwgImF4bmV0X2F0dGFjaCgpXG4iKTsKIAotICAgIGRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGVpX2RldmljZSkgKyBzaXplb2YoYXhuZXRfZGV2X3QpLAotCQkJImV0aCVkIiwgYXhkZXZfc2V0dXApOwotCisgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpICsgc2l6ZW9mKGF4bmV0X2Rldl90KSk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAKKyAgICBlaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisgICAgc3Bpbl9sb2NrX2luaXQoJmVpX2xvY2FsLT5wYWdlX2xvY2spOworCiAgICAgaW5mbyA9IFBSSVYoZGV2KTsKICAgICBpbmZvLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKQEAgLTE2MywxMCArMTgyLDEwIEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgZGV2LT5vcGVuID0gJmF4bmV0X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmF4bmV0X2Nsb3NlOwotICAgIGRldi0+ZG9faW9jdGwgPSAmYXhuZXRfaW9jdGw7CisgICAgZGV2LT5uZXRkZXZfb3BzID0gJmF4bmV0X25ldGRldl9vcHM7CisKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKKyAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogICAgIHJldHVybiBheG5ldF9jb25maWcobGluayk7CiB9IC8qIGF4bmV0X2F0dGFjaCAqLwpAQCAtODYxLDcgKzg4MCw3IEBACiAKICAgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb25fODM5MCA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uXzgzOTBbXSA9IEtFUk5fSU5GTyBcCiAgICAgIjgzOTAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBzY3lsZC5jb20pXG4iOwogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC05MDUsMTQgKzkyNCwxMiBAQAogLyogSW5kZXggdG8gZnVuY3Rpb25zLiAqLwogc3RhdGljIHZvaWQgZWlfdHhfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVpX3R4X2VycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGF4bmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogUm91dGluZXMgZ2VuZXJpYyB0byBOUzgzOTAtYmFzZWQgYm9hcmRzLiAqLwogc3RhdGljIHZvaWQgTlM4MzkwX3RyaWdnZXJfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkJCQlpbnQgc3RhcnRfcGFnZSk7Ci1zdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBkb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qCkBAIC05NTQsMTUgKzk3MSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQkvKiBUaGUgY2FyZCBJL08gcGFydCBvZiB0aGUgZHJpdmVyIChlLmcuIDNjNTAzKSBjYW4gaG9vayBhIFR4IHRpbWVvdXQKLQkgICAgd3JhcHBlciB0aGF0IGRvZXMgZS5nLiBtZWRpYSBjaGVjayAmIHRoZW4gY2FsbHMgYXhuZXRfdHhfdGltZW91dC4gKi8KLQlpZiAoZGV2LT50eF90aW1lb3V0ID09IE5VTEwpCi0JCSBkZXYtPnR4X3RpbWVvdXQgPSBheG5ldF90eF90aW1lb3V0OwotCWlmIChkZXYtPndhdGNoZG9nX3RpbWVvIDw9IDApCi0JCSBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgotCiAJLyoKIAkgKglHcmFiIHRoZSBwYWdlIGxvY2sgc28gd2Ugb3duIHRoZSByZWdpc3RlciBzZXQsIHRoZW4gY2FsbAogCSAqCXRoZSBpbml0IGZ1bmN0aW9uLgpAQCAtMTcwMSwzMCArMTcwOSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2soZGV2KSwgZmxhZ3MpOwogfQkKIAotLyoqCi0gKiBheGRldl9zZXR1cCAtIGluaXQgcmVzdCBvZiA4MzkwIGRldmljZSBzdHJ1Y3QKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSB0byBpbml0Ci0gKgotICogSW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgODM5MCBkZXZpY2Ugc3RydWN0dXJlLiAgRG8gTk9UIF9faW5pdAotICogdGhpcywgYXMgaXQgaXMgdXNlZCBieSA4MzkwIGJhc2VkIG1vZHVsYXIgZHJpdmVycyB0b28uCi0gKi8KLQotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbDsKLQlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsodmVyc2lvbl84MzkwKTsKLSAgICAKLQllaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0gICAgCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYXhuZXRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwk9IGdldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0KLQlldGhlcl9zZXR1cChkZXYpOwotfQotCiAvKiBUaGlzIHBhZ2Ugb2YgZnVuY3Rpb25zIHNob3VsZCBiZSA4MzkwIGdlbmVyaWMgKi8KIC8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aWFsaXppbmcgdGhlICJOSUMiLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA2OWRjZmJiLi44MWU2NjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTEwMCw3ICsxMDAsNiBAQAogc3RhdGljIGlycXJldHVybl90IGZqbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGZqbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGZqbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZmpuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKQEAgLTExOCw3ICsxMTcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCBub2RlOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIGxvbmcgb3Blbl90aW1lOwogICAgIHVpbnQgdHhfc3RhcnRlZDoxOwogICAgIHVpbnQgdHhfcXVldWU7CkBAIC0yMjksNiArMjI3LDE4IEBACiAjZGVmaW5lIEJBTktfMVUgICAgICAgICAgICAgIDB4MjQgLyogYmFuayAxIChDT05GSUdfMSkgKi8KICNkZWZpbmUgQkFOS18yVSAgICAgICAgICAgICAgMHgyOCAvKiBiYW5rIDIgKENPTkZJR18xKSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZqbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZmpuX29wZW4sCisJLm5kb19zdG9wCQk9IGZqbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZmpuX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGZqbl90eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBmam5fY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgZm12ajE4eF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwOwpAQCAtMjYwLDE3ICsyNzAsOSBAQAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIC8qIFRoZSBGTVZKMTh4IHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZmpuX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJmZqbl9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZmpuX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmZmpuX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmZqbl9jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBmam5fdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmZmpuX25ldGRldl9vcHM7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCiAgICAgcmV0dXJuIGZtdmoxOHhfY29uZmlnKGxpbmspOwpAQCAtNzkzLDcgKzc5NSw3IEBACiAJZmpuX3J4KGRldik7CiAgICAgfQogICAgIGlmICh0eF9zdGF0ICYgRl9UTVRfUkRZKSB7Ci0JbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gbHAtPnNlbnQgOworCWRldi0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+c2VudCA7CiAgICAgICAgIGxwLT5zZW50ID0gMCA7CiAJaWYgKGxwLT50eF9xdWV1ZSkgewogCSAgICBvdXRiKERPX1RYIHwgbHAtPnR4X3F1ZXVlLCBpb2FkZHIgKyBUWF9TVEFSVCk7CkBAIC04NDAsNyArODQyLDcgQEAKIAkgICBodG9ucyhpbncoaW9hZGRyICsgNikpLCBodG9ucyhpbncoaW9hZGRyICsgOCkpLAogCSAgIGh0b25zKGludyhpb2FkZHIgKzEwKSksIGh0b25zKGludyhpb2FkZHIgKzEyKSksCiAJICAgaHRvbnMoaW53KGlvYWRkciArMTQpKSk7Ci0gICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgLyogVG9EbzogV2Ugc2hvdWxkIHRyeSB0byByZXN0YXJ0IHRoZSBhZGFwdG9yLi4uICovCiAgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKICAgICBmam5fcmVzZXQoZGV2KTsKQEAgLTg4MCw3ICs4ODIsNyBAQAogCiAJREVCVUcoNCwgIiVzOiBUcmFuc21pdHRpbmcgYSBwYWNrZXQgb2YgbGVuZ3RoICVsdS5cbiIsCiAJICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylza2ItPmxlbik7Ci0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiBEaXNhYmxlIGJvdGggaW50ZXJydXB0cy4gKi8KIAlvdXR3KDB4MDAwMCwgaW9hZGRyICsgVFhfSU5UUik7CkBAIC0xMDA4LDcgKzEwMTAsNiBAQAogCiBzdGF0aWMgdm9pZCBmam5fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBib2d1c2NvdW50ID0gMTA7CS8qIDUgLT4gMTA6IGJ5IGFneSAxOTk0MDkyMiAqLwogCkBAIC0xMDI3LDExICsxMDI4LDExIEBACiAJfQogI2VuZGlmCiAJaWYgKChzdGF0dXMgJiAweEYwKSAhPSAweDIwKSB7CS8qIFRoZXJlIHdhcyBhbiBlcnJvci4gKi8KLQkgICAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCSAgICBpZiAoc3RhdHVzICYgRl9MRU5fRVJSKSBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCSAgICBpZiAoc3RhdHVzICYgRl9BTEdfRVJSKSBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX0NSQ19FUlIpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX09WUl9GTE8pIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgICBpZiAoc3RhdHVzICYgRl9MRU5fRVJSKSBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfQUxHX0VSUikgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfQ1JDX0VSUikgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJICAgIGlmIChzdGF0dXMgJiBGX09WUl9GTE8pIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAl9IGVsc2UgewogCSAgICB1X3Nob3J0IHBrdF9sZW4gPSBpbncoaW9hZGRyICsgREFUQVBPUlQpOwogCSAgICAvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlci4gKi8KQEAgLTEwNDEsNyArMTA0Miw3IEBACiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFRoZSBGTVYtMTh4IGNsYWltZWQgYSB2ZXJ5ICIKIAkJICAgICAgICJsYXJnZSBwYWNrZXQsIHNpemUgJWQuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlvdXRiKEZfU0tQX1BLVCwgaW9hZGRyICsgUlhfU0tJUCk7Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJYnJlYWs7CiAJICAgIH0KIAkgICAgc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKzIpOwpAQCAtMTA0OSw3ICsxMDUwLDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nICIKIAkJICAgICAgICJwYWNrZXQgKGxlbiAlZCkuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlvdXRiKEZfU0tQX1BLVCwgaW9hZGRyICsgUlhfU0tJUCk7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlicmVhazsKIAkgICAgfQogCkBAIC0xMDcwLDggKzEwNzEsOCBAQAogI2VuZGlmCiAKIAkgICAgbmV0aWZfcngoc2tiKTsKLQkgICAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkgICAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJfQogCWlmICgtLWJvZ3VzY291bnQgPD0gMCkKIAkgICAgYnJlYWs7CkBAIC0xMTkxLDE0ICsxMTkyLDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHJldHVybiAmbHAtPnN0YXRzOwotfSAvKiBmam5fZ2V0X3N0YXRzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiAvKgogICBTZXQgdGhlIG11bHRpY2FzdC9wcm9taXNjdW91cyBtb2RlIGZvciB0aGlzIGFkYXB0b3IuCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCmluZGV4IGVjN2M1ODguLjAyZWY2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKQEAgLTQzNiw2ICs0MzYsMTkgQEAKIAogc3RhdGljIHZvaWQgbm1jbGFuX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hY2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbWFjZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBtYWNlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtYWNlX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IG1hY2VfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gbWFjZV9jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gbWFjZV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG5tY2xhbl9hdHRhY2gKIAlDcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZyBsb2NhbCBkYXRhCkBAIC00NzQsMTcgKzQ4Nyw5IEBACiAKICAgICBscC0+dHhfZnJlZV9mcmFtZXM9QU0yMTUwX01BWF9UWF9GUkFNRVM7CiAKLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZtYWNlX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJm1hY2VfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzID0gJm1hY2VfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbWFjZV9uZXRkZXZfb3BzOwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwotICAgIGRldi0+b3BlbiA9ICZtYWNlX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJm1hY2VfY2xvc2U7Ci0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCi0gICAgZGV2LT50eF90aW1lb3V0ID0gbWFjZV90eF90aW1lb3V0OwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCiAKICAgICByZXR1cm4gbm1jbGFuX2NvbmZpZyhsaW5rKTsKIH0gLyogbm1jbGFuX2F0dGFjaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCBhNjk5OTQwLi4yZmJmOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KQEAgLTIzMyw2ICsyMzQsMjMgQEAKIAlyZXR1cm4gKHBjbmV0X2Rldl90ICopKHAgKyBzaXplb2Yoc3RydWN0IGVpX2RldmljZSkpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBjbmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHBjbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHBjbmV0X2Nsb3NlLAorCS5uZG9fc2V0X2NvbmZpZwkJPSBzZXRfY29uZmlnLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlaV9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsIAkJPSBlaV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWlfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgCT0gZWlfcG9sbCwKKyNlbmRpZgorfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBwY25ldF9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMjYwLDkgKzI3OCw3IEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgZGV2LT5vcGVuID0gJnBjbmV0X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnBjbmV0X2Nsb3NlOwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZzZXRfY29uZmlnOworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZwY25ldF9uZXRkZXZfb3BzOwogCiAgICAgcmV0dXJuIHBjbmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogcGNuZXRfYXR0YWNoICovCkBAIC02NDAsMTggKzY1NiwxMiBAQAogCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKLSAgICBpZiAoaW5mby0+ZmxhZ3MgJiAoSVNfREwxMDAxOXxJU19ETDEwMDIyKSkgewotCWRldi0+ZG9faW9jdGwgPSAmZWlfaW9jdGw7CisgICAgaWYgKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpCiAJbWlpX3BoeV9wcm9iZShkZXYpOwotICAgIH0KIAogICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKLSNlbmRpZgotCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgInBjbmV0X2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwogCWxpbmstPmRldl9ub2RlID0gTlVMTDsKQEAgLTExODMsNiArMTE5MywxMCBAQAogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogICAgIHUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OwogICAgIHVuc2lnbmVkIGludCBtaWlfYWRkciA9IGRldi0+YmFzZV9hZGRyICsgRExJTktfR1BJTzsKKworICAgIGlmICghKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpKQorCXJldHVybiAtRUlOVkFMOworCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICBjYXNlIFNJT0NHTUlJUEhZOgogCWRhdGFbMF0gPSBpbmZvLT5waHlfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IGZjY2Q1M2UuLjc3NDIzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBzcGlubG9ja190CQkJbG9jazsKICAgICB1X3Nob3J0CQkJbWFuZmlkOwogICAgIHVfc2hvcnQJCQljYXJkaWQ7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisKICAgICBkZXZfbm9kZV90CQkJbm9kZTsKICAgICBzdHJ1Y3Qgc2tfYnVmZgkJKnNhdmVkX3NrYjsKICAgICBpbnQJCQkJcGFja2V0c193YWl0aW5nOwpAQCAtMjg5LDcgKzI4OSw2IEBACiBzdGF0aWMgaW50IHNtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHNtY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHNtY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc21jX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzOWtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTsKIHN0YXRpYyB2b2lkIHNtY19zZXRfeGN2cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZfcG9ydCk7CkBAIC0zMDEsNiArMzAwLDE5IEBACiBzdGF0aWMgaW50IHNtY19saW5rX29rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc21jX29wZW4sCisJLm5kb19zdG9wCQk9IHNtY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc21jX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHNtY190eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBzOWtfY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19kb19pb2N0bAkJPSAmc21jX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICBzbWM5MWM5Ml9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMzM2LDE4ICszNDgsOSBAQAogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAgICAgLyogVGhlIFNNQzkxYzkyLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc21jX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmc21jX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmczlrX2NvbmZpZzsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmc21jX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnNtY19jbG9zZTsKLSAgICBkZXYtPmRvX2lvY3RsID0gJnNtY19pb2N0bDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBzbWNfdHhfdGltZW91dDsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgogCiAgICAgc21jLT5taWlfaWYuZGV2ID0gZGV2OwogICAgIHNtYy0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKQEAgLTEyOTEsNyArMTI5NCw3IEBACiAJcmV0dXJuOwogICAgIH0KIAotICAgIHNtYy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKICAgICAvKiBUaGUgY2FyZCBzaG91bGQgdXNlIHRoZSBqdXN0LWFsbG9jYXRlZCBidWZmZXIuICovCiAgICAgb3V0dyhwYWNrZXRfbm8sIGlvYWRkciArIFBOUl9BUlIpOwogICAgIC8qIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCAqLwpAQCAtMTM0MCw3ICsxMzQzLDcgQEAKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBTTUM5MWM5MiB0cmFuc21pdCB0aW1lZCBvdXQsICIKIAkgICAiVHhfc3RhdHVzICUyLjJ4IHN0YXR1cyAlNC40eC5cbiIsCiAJICAgZGV2LT5uYW1lLCBpbncoaW9hZGRyKSYweGZmLCBpbncoaW9hZGRyICsgMikpOwotICAgIHNtYy0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBzbWNfcmVzZXQoZGV2KTsKICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKICAgICBzbWMtPnNhdmVkX3NrYiA9IE5VTEw7CkBAIC0xMzYyLDcgKzEzNjUsNyBAQAogCiAgICAgaWYgKHNtYy0+c2F2ZWRfc2tiKSB7CiAJLyogVEhJUyBTSE9VTEQgTkVWRVIgSEFQUEVOLiAqLwotCXNtYy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcm5hbCBlcnJvciAtLSBzZW50IHBhY2tldCB3aGlsZSBidXN5LlxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKIAlyZXR1cm4gMTsKQEAgLTEzNzUsNyArMTM3OCw3IEBACiAJcHJpbnRrKEtFUk5fRVJSICIlczogRmFyIHRvbyBiaWcgcGFja2V0IGVycm9yLlxuIiwgZGV2LT5uYW1lKTsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCXNtYy0+c2F2ZWRfc2tiID0gTlVMTDsKLQlzbWMtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAlyZXR1cm4gMDsJCS8qIERvIG5vdCByZS1xdWV1ZSB0aGlzIHBhY2tldC4gKi8KICAgICB9CiAgICAgLyogQSBwYWNrZXQgaXMgbm93IHdhaXRpbmcuICovCkBAIC0xNDMzLDExICsxNDM2LDExIEBACiAKICAgICB0eF9zdGF0dXMgPSBpbncoaW9hZGRyICsgREFUQV8xKTsKIAotICAgIHNtYy0+c3RhdHMudHhfZXJyb3JzKys7Ci0gICAgaWYgKHR4X3N0YXR1cyAmIFRTX0xPU1RDQVIpIHNtYy0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLSAgICBpZiAodHhfc3RhdHVzICYgVFNfTEFUQ09MKSAgc21jLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKyAgICBpZiAodHhfc3RhdHVzICYgVFNfTE9TVENBUikgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworICAgIGlmICh0eF9zdGF0dXMgJiBUU19MQVRDT0wpICBkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKICAgICBpZiAodHhfc3RhdHVzICYgVFNfMTZDT0wpIHsKLQlzbWMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCXNtYy0+dHhfZXJyKys7CiAgICAgfQogCkBAIC0xNDc0LDEwICsxNDc3LDEwIEBACiAgICAgLyogQ291bGQgYmUgYSBjb3VudGVyIHJvbGwtb3ZlciB3YXJuaW5nOiB1cGRhdGUgc3RhdHMuICovCiAgICAgY2FyZF9zdGF0cyA9IGludyhpb2FkZHIgKyBDT1VOVEVSKTsKICAgICAvKiBzaW5nbGUgY29sbGlzaW9ucyAqLwotICAgIHNtYy0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CiAgICAgLyogbXVsdGlwbGUgY29sbGlzaW9ucyAqLwotICAgIHNtYy0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogI2lmIDAgCQkvKiBUaGVzZSBhcmUgZm9yIHdoZW4gbGludXggc3VwcG9ydHMgdGhlc2Ugc3RhdGlzdGljcyAqLwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CQkJLyogZGVmZXJyZWQgKi8KICAgICBjYXJkX3N0YXRzID4+PSA0OwkJCS8qIGV4Y2VzcyBkZWZlcnJlZCAqLwpAQCAtMTU1MSw3ICsxNTU0LDcgQEAKIAlpZiAoc3RhdHVzICYgSU1fVFhfRU1QVFlfSU5UKSB7CiAJICAgIG91dHcoSU1fVFhfRU1QVFlfSU5ULCBpb2FkZHIgKyBJTlRFUlJVUFQpOwogCSAgICBtYXNrICY9IH5JTV9UWF9FTVBUWV9JTlQ7Ci0JICAgIHNtYy0+c3RhdHMudHhfcGFja2V0cyArPSBzbWMtPnBhY2tldHNfd2FpdGluZzsKKwkgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IHNtYy0+cGFja2V0c193YWl0aW5nOwogCSAgICBzbWMtPnBhY2tldHNfd2FpdGluZyA9IDA7CiAJfQogCWlmIChzdGF0dXMgJiBJTV9BTExPQ19JTlQpIHsKQEAgLTE1NjcsOCArMTU3MCw4IEBACiAJICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CiAJaWYgKHN0YXR1cyAmIElNX1JYX09WUk5fSU5UKSB7Ci0JICAgIHNtYy0+c3RhdHMucnhfZXJyb3JzKys7Ci0JICAgIHNtYy0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCSAgICBpZiAoc21jLT5kdXBsZXgpCiAJCXNtYy0+cnhfb3ZybiA9IDE7IC8qIG5lZWQgTUNfUkVTRVQgb3V0c2lkZSBzbWNfaW50ZXJydXB0ICovCiAJICAgIG91dHcoSU1fUlhfT1ZSTl9JTlQsIGlvYWRkciArIElOVEVSUlVQVCk7CkBAIC0xNjE4LDcgKzE2MjEsNiBAQAogCiBzdGF0aWMgdm9pZCBzbWNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCByeF9zdGF0dXM7CiAgICAgaW50IHBhY2tldF9sZW5ndGg7CS8qIENhdXRpb246IG5vdCBmcmFtZSBsZW5ndGgsIHJhdGhlciB3b3JkcwpAQCAtMTY0OSw3ICsxNjUxLDcgQEAKIAkKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkgICAgREVCVUcoMSwgIiVzOiBMb3cgbWVtb3J5LCBwYWNrZXQgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSk7Ci0JICAgIHNtYy0+c3RhdHMucnhfZHJvcHBlZCsrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkgICAgb3V0dyhNQ19SRUxFQVNFLCBpb2FkZHIgKyBNTVVfQ01EKTsKIAkgICAgcmV0dXJuOwogCX0KQEAgLTE2NjIsMTggKzE2NjQsMTggQEAKIAkKIAluZXRpZl9yeChza2IpOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0Jc21jLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0Jc21jLT5zdGF0cy5yeF9ieXRlcyArPSBwYWNrZXRfbGVuZ3RoOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGFja2V0X2xlbmd0aDsKIAlpZiAocnhfc3RhdHVzICYgUlNfTVVMVElDQVNUKQotCSAgICBzbWMtPnN0YXRzLm11bHRpY2FzdCsrOworCSAgICBkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogICAgIH0gZWxzZSB7CiAJLyogZXJyb3IgLi4uICovCi0Jc21jLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQotCWlmIChyeF9zdGF0dXMgJiBSU19BTEdORVJSKSAgc21jLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwlpZiAocnhfc3RhdHVzICYgUlNfQUxHTkVSUikgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJaWYgKHJ4X3N0YXR1cyAmIChSU19UT09TSE9SVCB8IFJTX1RPT0xPTkcpKQotCSAgICBzbWMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQlpZiAocnhfc3RhdHVzICYgUlNfQkFEQ1JDKQlzbWMtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJaWYgKHJ4X3N0YXR1cyAmIFJTX0JBRENSQykJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAgICAgfQogICAgIC8qIExldCB0aGUgTU1VIGZyZWUgdGhlIG1lbW9yeSBvZiB0aGlzIHBhY2tldC4gKi8KICAgICBvdXR3KE1DX1JFTEVBU0UsIGlvYWRkciArIE1NVV9DTUQpOwpAQCAtMTY4MSwxNSArMTY4Myw2IEBACiAgICAgcmV0dXJuOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIC8qIE5vdGhpbmcgdG8gdXBkYXRlIC0gdGhlIDkxYzkyIGlzIGEgcHJldHR5IHByaW1hdGl2ZSBjaGlwLiAqLwotICAgIHJldHVybiAmc21jLT5zdGF0czsKLX0KLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBDYWxjdWxhdGUgdmFsdWVzIGZvciB0aGUgaGFyZHdhcmUgbXVsdGljYXN0IGZpbHRlciBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggZmVmN2UxOC4uYTM2ODVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IG5vZGU7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKICAgICBpbnQgY2FyZF90eXBlOwogICAgIGludCBwcm9iZV9wb3J0OwogICAgIGludCBzaWxpY29uOyAvKiBzaWxpY29uIHJldmlzaW9uLiAwPW9sZCBDRTIsIDE9U2NpcHBlciwgND1Nb2hhd2sgKi8KQEAgLTM1NSw3ICszNTUsNiBAQAogc3RhdGljIGludCBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyYzJwc190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZG9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2V0X2NhcmRfdHlwZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgY29uc3Qgdm9pZCAqcyk7CkBAIC01NDYsNiArNTQ1LDE5IEBACiAKIC8qPT09PT09PT09PT09PSBNYWluIGJ1bGsgb2YgZnVuY3Rpb25zCT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGRvX29wZW4sCisJLm5kb19zdG9wCQk9IGRvX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGRvX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHhpcmNfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gZG9fY29uZmlnLAorCS5uZG9fZG9faW9jdGwJCT0gZG9faW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKioqKioqKioqKioqKioqCiAgKiB4aXJjMnBzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCiAgKiBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKQEAgLTU4MSwxOSArNTkzLDEwIEBACiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAgICAgLyogRmlsbCBpbiBjYXJkIHNwZWNpZmljIGVudHJpZXMgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZkb19zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZkb19jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZG9fZ2V0X3N0YXRzOwotICAgIGRldi0+ZG9faW9jdGwgPSAmZG9faW9jdGw7Ci0gICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotICAgIGRldi0+b3BlbiA9ICZkb19vcGVuOwotICAgIGRldi0+c3RvcCA9ICZkb19zdG9wOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IHhpcmNfdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKKyAgICBkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICAgICBJTklUX1dPUksoJmxvY2FsLT50eF90aW1lb3V0X3Rhc2ssIHhpcmMycHNfdHhfdGltZW91dF90YXNrKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIHhpcmMycHNfY29uZmlnKGxpbmspOwogfSAvKiB4aXJjMnBzX2F0dGFjaCAqLwpAQCAtMTE3Miw3ICsxMTc1LDcgQEAKIAlpZiAoYnl0ZXNfcmN2ZCA+IG1heHJ4X2J5dGVzICYmIChyc3IgJiBQa3RSeE9rKSkgewogCSAgICAvKiB0b28gbWFueSBieXRlcyByZWNlaXZlZCBkdXJpbmcgdGhpcyBpbnQsIGRyb3AgdGhlIHJlc3Qgb2YgdGhlCiAJICAgICAqIHBhY2tldHMgKi8KLQkgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJICAgIERFQlVHKDIsICIlczogUlggZHJvcCwgdG9vIG11Y2ggZG9uZVxuIiwgZGV2LT5uYW1lKTsKIAl9IGVsc2UgaWYgKHJzciAmIFBrdFJ4T2spIHsKIAkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTExODYsNyArMTE4OSw3IEBACiAJICAgIGlmICghc2tiKSB7CiAJCXByaW50ayhLTk9UX1hJUkMgImxvdyBtZW1vcnksIHBhY2tldCBkcm9wcGVkIChzaXplPSV1KVxuIiwKIAkJICAgICAgIHBrdGxlbik7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCSAgICB9IGVsc2UgeyAvKiBva2F5IGdldCB0aGUgcGFja2V0ICovCiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCWlmIChscC0+c2lsaWNvbiA9PSAwICkgeyAvKiB3b3JrIGFyb3VuZCBhIGhhcmR3YXJlIGJ1ZyAqLwpAQCAtMTI0MiwyNCArMTI0NSwyNCBAQAogCQl9CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RsZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdGxlbjsKIAkJaWYgKCEocnNyICYgUGh5UGt0KSkKLQkJICAgIGxwLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJICAgIGRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJICAgIH0KIAl9IGVsc2UgeyAvKiBiYWQgcGFja2V0ICovCiAJICAgIERFQlVHKDUsICJyc3I9JSMwMnhcbiIsIHJzcik7CiAJfQogCWlmIChyc3IgJiBQa3RUb29Mb25nKSB7Ci0JICAgIGxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkgICAgREVCVUcoMywgIiVzOiBQYWNrZXQgdG9vIGxvbmdcbiIsIGRldi0+bmFtZSk7CiAJfQogCWlmIChyc3IgJiBDUkNFcnIpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJICAgIERFQlVHKDMsICIlczogQ1JDIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCX0KIAlpZiAocnNyICYgQWxpZ25FcnIpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7IC8qIG9rYXkgPyAqLworCSAgICBkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7IC8qIG9rYXkgPyAqLwogCSAgICBERUJVRygzLCAiJXM6IEFsaWdubWVudCBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKQEAgLTEyNzAsNyArMTI3Myw3IEBACiAJZXRoX3N0YXR1cyA9IEdldEJ5dGUoWElSQ1JFR19FU1IpOwogICAgIH0KICAgICBpZiAocnhfc3RhdHVzICYgMHgxMCkgeyAvKiBSZWNlaXZlIG92ZXJydW4gKi8KLQlscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJUHV0Qnl0ZShYSVJDUkVHX0NSLCBDbGVhclJ4T3ZydW4pOwogCURFQlVHKDMsICJyZWNlaXZlIG92ZXJydW4gY2xlYXJlZFxuIik7CiAgICAgfQpAQCAtMTI4MywxMSArMTI4NiwxMSBAQAogCW5uID0gR2V0Qnl0ZShYSVJDUkVHMF9QVFIpOwogCWxwLT5sYXN0X3B0cl92YWx1ZSA9IG5uOwogCWlmIChubiA8IG4pIC8qIHJvbGxvdmVyICovCi0JICAgIGxwLT5zdGF0cy50eF9wYWNrZXRzICs9IDI1NiAtIG47CisJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSAyNTYgLSBuOwogCWVsc2UgaWYgKG4gPT0gbm4pIHsgLyogaGFwcGVucyBzb21ldGltZXMgLSBkb24ndCBrbm93IHdoeSAqLwogCSAgICBERUJVRygwLCAiUFRSIG5vdCBjaGFuZ2VkP1xuIik7CiAJfSBlbHNlCi0JICAgIGxwLT5zdGF0cy50eF9wYWNrZXRzICs9IGxwLT5sYXN0X3B0cl92YWx1ZSAtIG47CisJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+bGFzdF9wdHJfdmFsdWUgLSBuOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKICAgICB9CiAgICAgaWYgKHR4X3N0YXR1cyAmIDB4MDAwMikgewkvKiBFeGVjZXNzaXZlIGNvbGxpc3Npb25zICovCkBAIC0xMjk1LDcgKzEyOTgsNyBAQAogCVB1dEJ5dGUoWElSQ1JFR19DUiwgUmVzdGFydFR4KTsgIC8qIHJlc3RhcnQgdHJhbnNtaXR0ZXIgcHJvY2VzcyAqLwogICAgIH0KICAgICBpZiAodHhfc3RhdHVzICYgMHgwMDQwKQotCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAogICAgIC8qIHJlY2FsY3VsYXRlIG91ciB3b3JrIGNodW5rIHNvIHRoYXQgd2UgbGltaXQgdGhlIGR1cmF0aW9uIG9mIHRoaXMKICAgICAgKiBJU1IgdG8gYWJvdXQgMS8xMCBvZiBhIHNlY29uZC4KQEAgLTEzNTMsNyArMTM1Niw3IEBACiB4aXJjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXRcbiIsIGRldi0+bmFtZSk7CiAgICAgc2NoZWR1bGVfd29yaygmbHAtPnR4X3RpbWVvdXRfdGFzayk7CiB9CkBAIC0xNDA5LDIwICsxNDEyLDExIEBACiAKICAgICBkZXZfa2ZyZWVfc2tiIChza2IpOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotICAgIGxwLT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWRvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0gICAgLyoJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBHZXRCeXRlKD8pICovCi0gICAgcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KIC8qKioqKioqKioqKioqKioqCiAgKiBTZXQgYWxsIGFkZHJlc3NlczogVGhpcyBmaXJzdCBvbmUgaXMgdGhlIGluZGl2aWR1YWwgYWRkcmVzcywKICAqIHRoZSBuZXh0IDkgYWRkcmVzc2VzIGFyZSB0YWtlbiBmcm9tIHRoZSBtdWx0aWNhc3QgbGlzdCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCA2NjVhNDI4Li44MDEyNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xMzk3LDcgKzEzOTcsNyBAQAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCS8qIGNsZWFyIGludGVycnVwdCBtYXNrcyAqLwogCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOwpAQCAtMjU5MiwxNCArMjU5MiwxNCBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjApOwogCQkJLyogdW5saWtlIGZvciB0aGUgbGFuY2UsIHRoZXJlIGlzIG5vIHJlc3RhcnQgbmVlZGVkICovCiAJCX0KLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKIAkJCXUxNiB2YWw7CiAJCQkvKiBzZXQgaW50ZXJydXB0IG1hc2tzICovCiAJCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOwogCQkJdmFsIHw9IDB4NWYwMDsKIAkJCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjMsIHZhbCk7CiAJCQltbWlvd2IoKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCQkJYnJlYWs7CiAJCX0KIAkJY3NyMCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKaW5kZXggYWYyOGZmNy4uMzM5ODRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwpAQCAtMjAyLDE2ICsyMDIsMjEgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKIAlzdHJ1Y3QgbWRpb19ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CiAKIAlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGRhdGEtPm1kYyA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAwKTsKLQlwZGF0YS0+bWRpbyA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAxKTsKLQotCWlmIChwZGF0YS0+bWRjIDwgMCB8fCBwZGF0YS0+bWRpbyA8IDApCisJcmV0ID0gb2ZfZ2V0X2dwaW8ob2ZkZXYtPm5vZGUsIDApOworCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCXBkYXRhLT5tZGMgPSByZXQ7CisKKwlyZXQgPSBvZl9nZXRfZ3BpbyhvZmRldi0+bm9kZSwgMSk7CisJaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKKwlwZGF0YS0+bWRpbyA9IHJldDsKIAogCXdoaWxlICgobnAgPSBvZl9nZXRfbmV4dF9jaGlsZChvZmRldi0+bm9kZSwgbnApKSkKIAkJaWYgKCFzdHJjbXAobnAtPnR5cGUsICJldGhlcm5ldC1waHkiKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKaW5kZXggODExYTYzNzY5Li5iNzU0MDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC05OCw3ICs5OSw3IEBACiAJYnVzLT5kZXYucGFyZW50ID0gYnVzLT5wYXJlbnQ7CiAJYnVzLT5kZXYuY2xhc3MgPSAmbWRpb19idXNfY2xhc3M7CiAJYnVzLT5kZXYuZ3JvdXBzID0gTlVMTDsKLQlkZXZfc2V0X25hbWUoJmJ1cy0+ZGV2LCBidXMtPmlkKTsKKwlkZXZfc2V0X25hbWUoJmJ1cy0+ZGV2LCAiJXMiLCBidXMtPmlkKTsKIAogCWVyciA9IGRldmljZV9yZWdpc3RlcigmYnVzLT5kZXYpOwogCWlmIChlcnIpIHsKQEAgLTI4NiwzMyArMjg3LDU4IEBACiAJCShwaHlkZXYtPnBoeV9pZCAmIHBoeWRydi0+cGh5X2lkX21hc2spKTsKIH0KIAorc3RhdGljIGJvb2wgbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IHBoeWRldi0+ZGV2LmRyaXZlcjsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkcnYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwaHlkZXYtPmF0dGFjaGVkX2RldjsKKworCWlmICghZHJ2IHx8ICFwaHlkcnYtPnN1c3BlbmQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFBIWSBub3QgYXR0YWNoZWQ/IE1heSBzdXNwZW5kLiAqLworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogRG9uJ3Qgc3VzcGVuZCBQSFkgaWYgdGhlIGF0dGNoZWQgbmV0ZGV2IHBhcmVudCBtYXkgd2FrZXVwLgorCSAqIFRoZSBwYXJlbnQgbWF5IHBvaW50IHRvIGEgUENJIGRldmljZSwgYXMgaW4gdGczIGRyaXZlci4KKwkgKi8KKwlpZiAobmV0ZGV2LT5kZXYucGFyZW50ICYmIGRldmljZV9tYXlfd2FrZXVwKG5ldGRldi0+ZGV2LnBhcmVudCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogQWxzbyBkb24ndCBzdXNwZW5kIFBIWSBpZiB0aGUgbmV0ZGV2IGl0c2VsZiBtYXkgd2FrZXVwLiBUaGlzCisJICogaXMgdGhlIGNhc2UgZm9yIGRldmljZXMgdy9vIHVuZGVybGF5aW5nIHB3ci4gbWdtdC4gYXdhcmUgYnVzLAorCSAqIGUuZy4gU29DIGRldmljZXMuCisJICovCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZuZXRkZXYtPmRldikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKiBTdXNwZW5kIGFuZCByZXN1bWUuICBDb3BpZWQgZnJvbSBwbGF0Zm9ybV9zdXNwZW5kIGFuZAogICogcGxhdGZvcm1fcmVzdW1lCiAgKi8KIHN0YXRpYyBpbnQgbWRpb19idXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYgPSB0b19waHlfZHJpdmVyKGRydik7CisJc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7CiAKLQlpZiAoZHJ2ICYmIHBoeWRydi0+c3VzcGVuZCAmJiAhZGV2aWNlX21heV93YWtldXAocGh5ZGV2LT5kZXYucGFyZW50KSkKLQkJcmV0ID0gcGh5ZHJ2LT5zdXNwZW5kKHBoeWRldik7Ci0KLQlyZXR1cm4gcmV0OworCWlmICghbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHBoeWRldikpCisJCXJldHVybiAwOworCXJldHVybiBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBtZGlvX2J1c19yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZHJ2KTsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKIAotCWlmIChkcnYgJiYgcGh5ZHJ2LT5yZXN1bWUgJiYgIWRldmljZV9tYXlfd2FrZXVwKHBoeWRldi0+ZGV2LnBhcmVudCkpCi0JCXJldCA9IHBoeWRydi0+cmVzdW1lKHBoeWRldik7Ci0KLQlyZXR1cm4gcmV0OworCWlmICghbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHBoeWRldikpCisJCXJldHVybiAwOworCXJldHVybiBwaHlkcnYtPnJlc3VtZShwaHlkZXYpOwogfQogCiBzdHJ1Y3QgYnVzX3R5cGUgbWRpb19idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCBlNGVkZTYwLi41OGI3M2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC00MTQsNyArNDE0LDYgQEAKIAogc3RhdGljIHZvaWQgcGh5X2NoYW5nZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIHBoeV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKioKICAqIHBoeV9zdGFydF9tYWNoaW5lIC0gc3RhcnQgUEhZIHN0YXRlIG1hY2hpbmUgdHJhY2tpbmcKQEAgLTQzNCwxMSArNDMzLDggQEAKIHsKIAlwaHlkZXYtPmFkanVzdF9zdGF0ZSA9IGhhbmRsZXI7CiAKLQlJTklUX1dPUksoJnBoeWRldi0+c3RhdGVfcXVldWUsIHBoeV9zdGF0ZV9tYWNoaW5lKTsKLQlpbml0X3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0JcGh5ZGV2LT5waHlfdGltZXIuZnVuY3Rpb24gPSAmcGh5X3RpbWVyOwotCXBoeWRldi0+cGh5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGh5ZGV2OwotCW1vZF90aW1lcigmcGh5ZGV2LT5waHlfdGltZXIsIGppZmZpZXMgKyBIWik7CisJSU5JVF9ERUxBWUVEX1dPUksoJnBoeWRldi0+c3RhdGVfcXVldWUsIHBoeV9zdGF0ZV9tYWNoaW5lKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsIGppZmZpZXMgKyBIWik7CiB9CiAKIC8qKgpAQCAtNDUxLDggKzQ0Nyw3IEBACiAgKi8KIHZvaWQgcGh5X3N0b3BfbWFjaGluZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWRlbF90aW1lcl9zeW5jKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0JY2FuY2VsX3dvcmtfc3luYygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKIAogCW11dGV4X2xvY2soJnBoeWRldi0+bG9jayk7CiAJaWYgKHBoeWRldi0+c3RhdGUgPiBQSFlfVVApCkBAIC02ODAsMTEgKzY3NSw5IEBACiAJaWYgKGVycikKIAkJZ290byBpcnFfZW5hYmxlX2VycjsKIAotCS8qIFN0b3AgdGltZXIgYW5kIHJ1biB0aGUgc3RhdGUgcXVldWUgbm93LiAgVGhlIHdvcmsgZnVuY3Rpb24gZm9yCi0JICogc3RhdGVfcXVldWUgd2lsbCBzdGFydCB0aGUgdGltZXIgdXAgYWdhaW4uCi0JICovCi0JZGVsX3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0Jc2NoZWR1bGVfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJLyogcmVzY2hlZHVsZSBzdGF0ZSBxdWV1ZSB3b3JrIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsIDApOwogCiAJcmV0dXJuOwogCkBAIC03NjEsMTQgKzc1NCwxMyBAQAogLyoqCiAgKiBwaHlfc3RhdGVfbWFjaGluZSAtIEhhbmRsZSB0aGUgc3RhdGUgbWFjaGluZQogICogQHdvcms6IHdvcmtfc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSB3b3JrIHRvIGJlIGRvbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjogU2NoZWR1bGVkIGJ5IHRoZSBzdGF0ZV9xdWV1ZSB3b3JrcXVldWUgZWFjaCB0aW1lCi0gKiAgIHBoeV90aW1lciBpcyB0cmlnZ2VyZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHBoeV9zdGF0ZV9tYWNoaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9Ci0JCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKKwkJCWNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKIAlpbnQgbmVlZHNfYW5lZyA9IDA7CiAJaW50IGVyciA9IDA7CiAKQEAgLTk0NiwxNyArOTM4LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcGh5X2Vycm9yKHBoeWRldik7CiAKLQltb2RfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyLCBqaWZmaWVzICsgUEhZX1NUQVRFX1RJTUUgKiBIWik7Ci19Ci0KLS8qIFBIWSB0aW1lciB3aGljaCBzY2hlZHVsZXMgdGhlIHN0YXRlIG1hY2hpbmUgd29yayAqLwotc3RhdGljIHZvaWQgcGh5X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YTsKLQotCS8qCi0JICogUEhZIEkvTyBvcGVyYXRpb25zIGNhbiBwb3RlbnRpYWxseSBzbGVlcCBzbyB3ZSBlbnN1cmUgdGhhdAotCSAqIGl0J3MgZG9uZSBmcm9tIGEgcHJvY2VzcyBjb250ZXh0Ci0JICovCi0Jc2NoZWR1bGVfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlLAorCQkJCWppZmZpZXMgKyBQSFlfU1RBVEVfVElNRSAqIEhaKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCmluZGV4IDEzODcxODcuLjUxMjNiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpAQCAtMTU5LDYgKzE1OSwzMCBAQAogCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSwgfQogfTsKIAorc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGxhbjg3MTBfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMDA3YzBmMCwgLyogT1VJPTB4MDA4MDBmLCBNb2RlbCM9MHgwZiAqLworCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIlNNU0MgTEFOODcxMC9MQU44NzIwIiwKKworCS5mZWF0dXJlcwk9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UKKwkJCQl8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlKSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19JTlRFUlJVUFQgfCBQSFlfSEFTX01BR0lDQU5FRywKKworCS8qIGJhc2ljIGZ1bmN0aW9ucyAqLworCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmNvbmZpZ19pbml0CT0gc21zY19waHlfY29uZmlnX2luaXQsCisKKwkvKiBJUlEgcmVsYXRlZCAqLworCS5hY2tfaW50ZXJydXB0CT0gc21zY19waHlfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBzbXNjX3BoeV9jb25maWdfaW50ciwKKworCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAorCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLCB9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTc5LDggKzIwMywxNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyNDsKIAorCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIgKCZsYW44NzEwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCiAJcmV0dXJuIDA7CiAKK2VycjU6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuOTExeF9pbnRfZHJpdmVyKTsKIGVycjQ6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcwMF9kcml2ZXIpOwogZXJyMzoKQEAgLTE5Myw2ICsyMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc21zY19leGl0KHZvaWQpCiB7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcxMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlciAoJmxhbjkxMXhfaW50X2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcwMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlciAoJmxhbjgxODdfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKaW5kZXggNjU2N2ZhYi4uNmRlODM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKQEAgLTE1Nyw2ICsxNTcsNyBAQAogewogCXN0cnVjdCBhc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE4Nyw2ICsxODgsOCBAQAogCWFwLT5jaGFuLnByaXZhdGUgPSBhcDsKIAlhcC0+Y2hhbi5vcHMgPSAmYXN5bmNfb3BzOwogCWFwLT5jaGFuLm10dSA9IFBQUF9NUlU7CisJc3BlZWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWFwLT5jaGFuLnNwZWVkID0gc3BlZWQ7CiAJZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjMzLDExICsyMzYsOSBAQAogCXRhc2tsZXRfa2lsbCgmYXAtPnRzayk7CiAKIAlwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCZhcC0+Y2hhbik7Ci0JaWYgKGFwLT5ycGt0KQotCQlrZnJlZV9za2IoYXAtPnJwa3QpOworCWtmcmVlX3NrYihhcC0+cnBrdCk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZhcC0+cnF1ZXVlKTsKLQlpZiAoYXAtPnRwa3QpCi0JCWtmcmVlX3NrYihhcC0+dHBrdCk7CisJa2ZyZWVfc2tiKGFwLT50cGt0KTsKIAlrZnJlZShhcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDdiMjcyOGIuLjhlZTkxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtNDksNiArNDksMTAgQEAKICNpbmNsdWRlIDxuZXQvc2xoY192ai5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNkZWZpbmUgUFBQX1ZFUlNJT04JIjIuNC4yIgogCiAvKgpAQCAtMTMxLDYgKzEzNSw3IEBACiAJc3RydWN0IHNvY2tfZmlsdGVyICphY3RpdmVfZmlsdGVyOy8qIGZpbHRlciBmb3IgcGt0cyB0byByZXNldCBpZGxlICovCiAJdW5zaWduZWQgcGFzc19sZW4sIGFjdGl2ZV9sZW47CiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi8KKwlzdHJ1Y3QgbmV0CSpwcHBfbmV0OwkvKiB0aGUgbmV0IHdlIGJlbG9uZyB0byAqLwogfTsKIAogLyoKQEAgLTE1NSwxMiArMTYwLDE0IEBACiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBjaGFuX3NlbTsJLyogcHJvdGVjdHMgYGNoYW4nIGR1cmluZyBjaGFuIGlvY3RsICovCiAJc3BpbmxvY2tfdAlkb3dubDsJCS8qIHByb3RlY3RzIGBjaGFuJywgZmlsZS54cSBkZXF1ZXVlICovCiAJc3RydWN0IHBwcAkqcHBwOwkJLyogcHBwIHVuaXQgd2UncmUgY29ubmVjdGVkIHRvICovCisJc3RydWN0IG5ldAkqY2hhbl9uZXQ7CS8qIHRoZSBuZXQgY2hhbm5lbCBiZWxvbmdzIHRvICovCiAJc3RydWN0IGxpc3RfaGVhZCBjbGlzdDsJCS8qIGxpbmsgaW4gbGlzdCBvZiBjaGFubmVscyBwZXIgdW5pdCAqLwogCXJ3bG9ja190CXVwbDsJCS8qIHByb3RlY3RzIGBwcHAnICovCiAjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTksKIAl1OAkJYXZhaWw7CQkvKiBmbGFnIHVzZWQgaW4gbXVsdGlsaW5rIHN0dWZmICovCiAJdTgJCWhhZF9mcmFnOwkvKiA+PSAxIGZyYWdtZW50cyBoYXZlIGJlZW4gc2VudCAqLwogCXUzMgkJbGFzdHNlcTsJLyogTVA6IGxhc3Qgc2VxdWVuY2UgIyByZWNlaXZlZCAqLworCWludCAgICAgc3BlZWQ7CQkvKiBzcGVlZCBvZiB0aGUgY29ycmVzcG9uZGluZyBwcHAgY2hhbm5lbCovCiAjZW5kaWYgLyogQ09ORklHX1BQUF9NVUxUSUxJTksgKi8KIH07CiAKQEAgLTE3MywyNiArMTgwLDM1IEBACiAgKiBjaGFubmVsLmRvd25sLgogICovCiAKLS8qCi0gKiBhbGxfcHBwX211dGV4IHByb3RlY3RzIHRoZSBhbGxfcHBwX3VuaXRzIG1hcHBpbmcuCi0gKiBJdCBhbHNvIGVuc3VyZXMgdGhhdCBmaW5kaW5nIGEgcHBwIHVuaXQgaW4gdGhlIGFsbF9wcHBfdW5pdHMgbWFwCi0gKiBhbmQgdXBkYXRpbmcgaXRzIGZpbGUucmVmY250IGZpZWxkIGlzIGF0b21pYy4KLSAqLwotc3RhdGljIERFRklORV9NVVRFWChhbGxfcHBwX211dGV4KTsKIHN0YXRpYyBhdG9taWNfdCBwcHBfdW5pdF9jb3VudCA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIERFRklORV9JRFIocHBwX3VuaXRzX2lkcik7Ci0KLS8qCi0gKiBhbGxfY2hhbm5lbHNfbG9jayBwcm90ZWN0cyBhbGxfY2hhbm5lbHMgYW5kIGxhc3RfY2hhbm5lbF9pbmRleCwKLSAqIGFuZCB0aGUgYXRvbWljaXR5IG9mIGZpbmQgYSBjaGFubmVsIGFuZCB1cGRhdGluZyBpdHMgZmlsZS5yZWZjbnQKLSAqIGZpZWxkLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFsbF9jaGFubmVsc19sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoYWxsX2NoYW5uZWxzKTsKLXN0YXRpYyBMSVNUX0hFQUQobmV3X2NoYW5uZWxzKTsKLXN0YXRpYyBpbnQgbGFzdF9jaGFubmVsX2luZGV4Owogc3RhdGljIGF0b21pY190IGNoYW5uZWxfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIAorLyogcGVyLW5ldCBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCitzdGF0aWMgaW50IHBwcF9uZXRfaWQ7CitzdHJ1Y3QgcHBwX25ldCB7CisJLyogdW5pdHMgdG8gcHBwIG1hcHBpbmcgKi8KKwlzdHJ1Y3QgaWRyIHVuaXRzX2lkcjsKKworCS8qCisJICogYWxsX3BwcF9tdXRleCBwcm90ZWN0cyB0aGUgdW5pdHNfaWRyIG1hcHBpbmcuCisJICogSXQgYWxzbyBlbnN1cmVzIHRoYXQgZmluZGluZyBhIHBwcCB1bml0IGluIHRoZSB1bml0c19pZHIKKwkgKiBtYXAgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudCBmaWVsZCBpcyBhdG9taWMuCisJICovCisJc3RydWN0IG11dGV4IGFsbF9wcHBfbXV0ZXg7CisKKwkvKiBjaGFubmVscyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWxsX2NoYW5uZWxzOworCXN0cnVjdCBsaXN0X2hlYWQgbmV3X2NoYW5uZWxzOworCWludCBsYXN0X2NoYW5uZWxfaW5kZXg7CisKKwkvKgorCSAqIGFsbF9jaGFubmVsc19sb2NrIHByb3RlY3RzIGFsbF9jaGFubmVscyBhbmQKKwkgKiBsYXN0X2NoYW5uZWxfaW5kZXgsIGFuZCB0aGUgYXRvbWljaXR5IG9mIGZpbmQKKwkgKiBhIGNoYW5uZWwgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudCBmaWVsZC4KKwkgKi8KKwlzcGlubG9ja190IGFsbF9jaGFubmVsc19sb2NrOworfTsKKwogLyogR2V0IHRoZSBQUFAgcHJvdG9jb2wgbnVtYmVyIGZyb20gYSBza2IgKi8KICNkZWZpbmUgUFBQX1BST1RPKHNrYikJKCgoc2tiKS0+ZGF0YVswXSA8PCA4KSArIChza2IpLT5kYXRhWzFdKQogCkBAIC0yMTYsOCArMjMyLDggQEAKICNkZWZpbmUgc2VxX2FmdGVyKGEsIGIpCQkoKHMzMikoKGEpIC0gKGIpKSA+IDApCiAKIC8qIFByb3RvdHlwZXMuICovCi1zdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBwcHBfZmlsZSAqcGYsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgcHBwX3VuYXR0YWNoZWRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHBwX2ZpbGUgKnBmLAorCQkJc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyB2b2lkIHBwcF9zZW5kX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHApOwpAQCAtMjQwLDEyICsyNTYsMTIgQEAKIHN0YXRpYyB2b2lkIHBwcF9jY3BfY2xvc2VkKHN0cnVjdCBwcHAgKnBwcCk7CiBzdGF0aWMgc3RydWN0IGNvbXByZXNzb3IgKmZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSk7CiBzdGF0aWMgdm9pZCBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpOwotc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9jcmVhdGVfaW50ZXJmYWNlKGludCB1bml0LCBpbnQgKnJldHApOworc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgaW50IHVuaXQsIGludCAqcmV0cCk7CiBzdGF0aWMgdm9pZCBpbml0X3BwcF9maWxlKHN0cnVjdCBwcHBfZmlsZSAqcGYsIGludCBraW5kKTsKIHN0YXRpYyB2b2lkIHBwcF9zaHV0ZG93bl9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyB2b2lkIHBwcF9kZXN0cm95X2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApOwotc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9maW5kX3VuaXQoaW50IHVuaXQpOwotc3RhdGljIHN0cnVjdCBjaGFubmVsICpwcHBfZmluZF9jaGFubmVsKGludCB1bml0KTsKK3N0YXRpYyBzdHJ1Y3QgcHBwICpwcHBfZmluZF91bml0KHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpOworc3RhdGljIHN0cnVjdCBjaGFubmVsICpwcHBfZmluZF9jaGFubmVsKHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpOwogc3RhdGljIGludCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KTsKIHN0YXRpYyBpbnQgcHBwX2Rpc2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoKTsKIHN0YXRpYyB2b2lkIHBwcF9kZXN0cm95X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCk7CkBAIC0yNTYsNiArMjcyLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnBwcF9jbGFzczsKIAorLyogcGVyIG5ldC1uYW1lc3BhY2UgZGF0YSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwX25ldCAqcHBwX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJQlVHX09OKCFuZXQpOworCisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCk7Cit9CisKIC8qIFRyYW5zbGF0ZXMgYSBQUFAgcHJvdG9jb2wgbnVtYmVyIHRvIGEgTlAgaW5kZXggKE5QID09IG5ldHdvcmsgcHJvdG9jb2wpICovCiBzdGF0aWMgaW5saW5lIGludCBwcm90b190b19ucGluZGV4KGludCBwcm90bykKIHsKQEAgLTU0NCw3ICs1NjgsOCBAQAogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCiAJaWYgKCFwZikKLQkJcmV0dXJuIHBwcF91bmF0dGFjaGVkX2lvY3RsKHBmLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldHVybiBwcHBfdW5hdHRhY2hlZF9pb2N0bChjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsCisJCQkJCXBmLCBmaWxlLCBjbWQsIGFyZyk7CiAKIAlpZiAoY21kID09IFBQUElPQ0RFVEFDSCkgewogCQkvKgpAQCAtNzYzLDEyICs3ODgsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBwcHBfZmlsZSAqcGYsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBwcHBfdW5hdHRhY2hlZF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcHBfZmlsZSAqcGYsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHVuaXQsIGVyciA9IC1FRkFVTFQ7CiAJc3RydWN0IHBwcCAqcHBwOwogCXN0cnVjdCBjaGFubmVsICpjaGFuOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlpbnQgX191c2VyICpwID0gKGludCBfX3VzZXIgKilhcmc7CiAKIAlsb2NrX2tlcm5lbCgpOwpAQCAtNzc3LDcgKzgwMyw3IEBACiAJCS8qIENyZWF0ZSBhIG5ldyBwcHAgdW5pdCAqLwogCQlpZiAoZ2V0X3VzZXIodW5pdCwgcCkpCiAJCQlicmVhazsKLQkJcHBwID0gcHBwX2NyZWF0ZV9pbnRlcmZhY2UodW5pdCwgJmVycik7CisJCXBwcCA9IHBwcF9jcmVhdGVfaW50ZXJmYWNlKG5ldCwgdW5pdCwgJmVycik7CiAJCWlmICghcHBwKQogCQkJYnJlYWs7CiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CkBAIC03OTIsMjkgKzgxOCwzMSBAQAogCQkvKiBBdHRhY2ggdG8gYW4gZXhpc3RpbmcgcHBwIHVuaXQgKi8KIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwogCQllcnIgPSAtRU5YSU87Ci0JCXBwcCA9IHBwcF9maW5kX3VuaXQodW5pdCk7CisJCXBuID0gcHBwX3Blcm5ldChuZXQpOworCQltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CisJCXBwcCA9IHBwcF9maW5kX3VuaXQocG4sIHVuaXQpOwogCQlpZiAocHBwKSB7CiAJCQlhdG9taWNfaW5jKCZwcHAtPmZpbGUucmVmY250KTsKIAkJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CiAJCQllcnIgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgUFBQSU9DQVRUQ0hBTjoKIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCXNwaW5fbG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOwogCQllcnIgPSAtRU5YSU87Ci0JCWNoYW4gPSBwcHBfZmluZF9jaGFubmVsKHVuaXQpOworCQlwbiA9IHBwcF9wZXJuZXQobmV0KTsKKwkJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCQljaGFuID0gcHBwX2ZpbmRfY2hhbm5lbChwbiwgdW5pdCk7CiAJCWlmIChjaGFuKSB7CiAJCQlhdG9taWNfaW5jKCZjaGFuLT5maWxlLnJlZmNudCk7CiAJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAmY2hhbi0+ZmlsZTsKIAkJCWVyciA9IDA7CiAJCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTgzNCw2ICs4NjIsNTEgQEAKIAkucmVsZWFzZQk9IHBwcF9yZWxlYXNlCiB9OwogCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHBwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZHJfaW5pdCgmcG4tPnVuaXRzX2lkcik7CisJbXV0ZXhfaW5pdCgmcG4tPmFsbF9wcHBfbXV0ZXgpOworCisJSU5JVF9MSVNUX0hFQUQoJnBuLT5hbGxfY2hhbm5lbHMpOworCUlOSVRfTElTVF9IRUFEKCZwbi0+bmV3X2NoYW5uZWxzKTsKKworCXNwaW5fbG9ja19pbml0KCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCwgcG4pOworCWlmIChlcnIpIHsKKwkJa2ZyZWUocG4pOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcF9uZXQgKnBuOworCisJcG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBwcF9uZXRfaWQpOworCWlkcl9kZXN0cm95KCZwbi0+dW5pdHNfaWRyKTsKKwkvKgorCSAqIGlmIHNvbWVvbmUgaGFzIGNhY2hlZCBvdXIgbmV0IHRoZW4KKwkgKiBmdXJ0aGVyIG5ldF9nZW5lcmljIGNhbGwgd2lsbCByZXR1cm4gTlVMTAorCSAqLworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcF9uZXRfaWQsIE5VTEwpOworCWtmcmVlKHBuKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwcHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcF9pbml0X25ldCwKKwkuZXhpdCA9IHBwcF9leGl0X25ldCwKK307CisKICNkZWZpbmUgUFBQX01BSk9SCTEwOAogCiAvKiBDYWxsZWQgYXQgYm9vdCB0aW1lIGlmIHBwcCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsCkBAIC04NDMsMjUgKzkxNiwzNiBAQAogCWludCBlcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJQUFAgZ2VuZXJpYyBkcml2ZXIgdmVyc2lvbiAiIFBQUF9WRVJTSU9OICJcbiIpOwotCWVyciA9IHJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiLCAmcHBwX2RldmljZV9mb3BzKTsKLQlpZiAoIWVycikgewotCQlwcHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHAiKTsKLQkJaWYgKElTX0VSUihwcHBfY2xhc3MpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHBwcF9jbGFzcyk7Ci0JCQlnb3RvIG91dF9jaHJkZXY7Ci0JCX0KLQkJZGV2aWNlX2NyZWF0ZShwcHBfY2xhc3MsIE5VTEwsIE1LREVWKFBQUF9NQUpPUiwgMCksIE5VTEwsCi0JCQkgICAgICAicHBwIik7CisKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcHBwX25ldF9pZCwgJnBwcF9uZXRfb3BzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIFBQUCBwZXJuZXQgZGV2aWNlICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OwogCX0KIAotb3V0OgotCWlmIChlcnIpCisJZXJyID0gcmVnaXN0ZXJfY2hyZGV2KFBQUF9NQUpPUiwgInBwcCIsICZwcHBfZGV2aWNlX2ZvcHMpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgUFBQIGRldmljZSAoJWQpXG4iLCBlcnIpOwotCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X25ldDsKKwl9CisKKwlwcHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHAiKTsKKwlpZiAoSVNfRVJSKHBwcF9jbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihwcHBfY2xhc3MpOworCQlnb3RvIG91dF9jaHJkZXY7CisJfQorCisJLyogbm90IGEgYmlnIGRlYWwgaWYgd2UgZmFpbCBoZXJlIDotKSAqLworCWRldmljZV9jcmVhdGUocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLCBOVUxMLCAicHBwIik7CisKKwlyZXR1cm4gMDsKIAogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiKTsKLQlnb3RvIG91dDsKK291dF9uZXQ6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBfbmV0X2lkLCAmcHBwX25ldF9vcHMpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC05MDgsNyArOTkyLDcgQEAKIAogIG91dGY6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JKytwcHAtPmRldi0+c3RhdHMudHhfZHJvcHBlZDsKKwkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTY5LDYgKzEwNTMsNyBAQAogCWRldi0+dHhfcXVldWVfbGVuID0gMzsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfUFBQOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlAgfCBJRkZfTVVMVElDQVNUOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAogLyoKQEAgLTExNjEsOCArMTI0Niw3IEBACiAJcmV0dXJuOwogCiAgZHJvcDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAkrK3BwcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnM7CiB9CiAKQEAgLTEyMjQsMTM4ICsxMzA4LDE4MSBAQAogICovCiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgbGVuLCBmcmFnc2l6ZTsKLQlpbnQgaSwgYml0cywgaGRybGVuLCBtdHU7Ci0JaW50IGZsZW47Ci0JaW50IG5hdmFpbCwgbmZyZWU7Ci0JaW50IG5iaWdnZXI7CisJaW50CWxlbiwgdG90bGVuOworCWludAlpLCBiaXRzLCBoZHJsZW4sIG10dTsKKwlpbnQJZmxlbjsKKwlpbnQJbmF2YWlsLAluZnJlZSwgbnplcm87CisJaW50CW5iaWdnZXI7CisJaW50CXRvdHNwZWVkOworCWludAl0b3RmcmVlOwogCXVuc2lnbmVkIGNoYXIgKnAsICpxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKIAlzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW47CiAKLQluZnJlZSA9IDA7CS8qICMgY2hhbm5lbHMgd2hpY2ggaGF2ZSBubyBwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KKwl0b3RzcGVlZCA9IDA7IC8qdG90YWwgYml0cmF0ZSBvZiB0aGUgYnVuZGxlKi8KKwluZnJlZSA9CTA7CS8qICMgY2hhbm5lbHMgd2hpY2gJaGF2ZSBubwlwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KIAluYXZhaWwgPSAwOwkvKiB0b3RhbCAjIG9mIHVzYWJsZSBjaGFubmVscyAobm90IGRlcmVnaXN0ZXJlZCkgKi8KKwluemVybyA9CTA7IC8qIG51bWJlciBvZgljaGFubmVscyB3aXRoIHplcm8gc3BlZWQgYXNzb2NpYXRlZCovCisJdG90ZnJlZQk9IDA7IC8qdG90YWwgIyBvZiBjaGFubmVscyBhdmFpbGFibGUgYW5kCisJCQkJICAqaGF2aW5nIG5vIHF1ZXVlZCBwYWNrZXRzIGJlZm9yZQorCQkJCSAgKnN0YXJ0aW5nIHRoZSBmcmFnbWVudGF0aW9uKi8KKwogCWhkcmxlbiA9IChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjsKLQlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBwcC0+Y2hhbm5lbHMsIGNsaXN0KSB7CisJaSA9CTA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwcHAtPmNoYW5uZWxzLCBjbGlzdCkJewogCQluYXZhaWwgKz0gcGNoLT5hdmFpbCA9IChwY2gtPmNoYW4gIT0gTlVMTCk7Ci0JCWlmIChwY2gtPmF2YWlsKSB7CisJCXBjaC0+c3BlZWQgPSBwY2gtPmNoYW4tPnNwZWVkOworCQlpZiAocGNoLT5hdmFpbCkJewogCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAotCQkJICAgICFwY2gtPmhhZF9mcmFnKSB7Ci0JCQkJcGNoLT5hdmFpbCA9IDI7Ci0JCQkJKytuZnJlZTsKLQkJCX0KLQkJCWlmICghcGNoLT5oYWRfZnJhZyAmJiBpIDwgcHBwLT5ueGNoYW4pCi0JCQkJcHBwLT5ueGNoYW4gPSBpOworCQkJCSFwY2gtPmhhZF9mcmFnKQl7CisJCQkJCWlmIChwY2gtPnNwZWVkID09IDApCisJCQkJCQluemVybysrOworCQkJCQllbHNlCisJCQkJCQl0b3RzcGVlZCArPSBwY2gtPnNwZWVkOworCisJCQkJCXBjaC0+YXZhaWwgPSAyOworCQkJCQkrK25mcmVlOworCQkJCQkrK3RvdGZyZWU7CisJCQkJfQorCQkJaWYgKCFwY2gtPmhhZF9mcmFnICYmIGkJPCBwcHAtPm54Y2hhbikKKwkJCQlwcHAtPm54Y2hhbgk9IGk7CiAJCX0KIAkJKytpOwogCX0KLQogCS8qCi0JICogRG9uJ3Qgc3RhcnQgc2VuZGluZyB0aGlzIHBhY2tldCB1bmxlc3MgYXQgbGVhc3QgaGFsZiBvZgotCSAqIHRoZSBjaGFubmVscyBhcmUgZnJlZS4gIFRoaXMgZ2l2ZXMgbXVjaCBiZXR0ZXIgVENQCi0JICogcGVyZm9ybWFuY2UgaWYgd2UgaGF2ZSBhIGxvdCBvZiBjaGFubmVscy4KKwkgKiBEb24ndCBzdGFydCBzZW5kaW5nIHRoaXMJcGFja2V0IHVubGVzcyBhdCBsZWFzdCBoYWxmCW9mCisJICogdGhlIGNoYW5uZWxzCWFyZQlmcmVlLiAgVGhpcwlnaXZlcyBtdWNoIGJldHRlciBUQ1AKKwkgKiBwZXJmb3JtYW5jZSBpZiB3ZSBoYXZlIGEJbG90CW9mIGNoYW5uZWxzLgogCSAqLwotCWlmIChuZnJlZSA9PSAwIHx8IG5mcmVlIDwgbmF2YWlsIC8gMikKLQkJcmV0dXJuIDA7CS8qIGNhbid0IHRha2Ugbm93LCBsZWF2ZSBpdCBpbiB4bWl0X3BlbmRpbmcgKi8KKwlpZiAobmZyZWUgPT0gMCB8fCBuZnJlZQk8IG5hdmFpbCAvIDIpCisJCXJldHVybiAwOyAvKiBjYW4ndCB0YWtlIG5vdywgbGVhdmUgaXQgaW4geG1pdF9wZW5kaW5nCSovCiAKIAkvKiBEbyBwcm90b2NvbCBmaWVsZCBjb21wcmVzc2lvbiAoWFhYIHRoaXMgc2hvdWxkIGJlIG9wdGlvbmFsKSAqLwotCXAgPSBza2ItPmRhdGE7Ci0JbGVuID0gc2tiLT5sZW47CisJcCA9CXNrYi0+ZGF0YTsKKwlsZW4JPSBza2ItPmxlbjsKIAlpZiAoKnAgPT0gMCkgewogCQkrK3A7CiAJCS0tbGVuOwogCX0KIAotCS8qCi0JICogRGVjaWRlIG9uIGZyYWdtZW50IHNpemUuCi0JICogV2UgY3JlYXRlIGEgZnJhZ21lbnQgZm9yIGVhY2ggZnJlZSBjaGFubmVsIHJlZ2FyZGxlc3Mgb2YKLQkgKiBob3cgc21hbGwgdGhleSBhcmUgKGkuZS4gZXZlbiAwIGxlbmd0aCkgaW4gb3JkZXIgdG8gbWluaW1pemUKLQkgKiB0aGUgdGltZSB0aGF0IGl0IHdpbGwgdGFrZSB0byBkZXRlY3Qgd2hlbiBhIGNoYW5uZWwgZHJvcHMKLQkgKiBhIGZyYWdtZW50LgotCSAqLwotCWZyYWdzaXplID0gbGVuOwotCWlmIChuZnJlZSA+IDEpCi0JCWZyYWdzaXplID0gRElWX1JPVU5EX1VQKGZyYWdzaXplLCBuZnJlZSk7Ci0JLyogbmJpZ2dlciBjaGFubmVscyBnZXQgZnJhZ3NpemUgYnl0ZXMsIHRoZSByZXN0IGdldCBmcmFnc2l6ZS0xLAotCSAgIGV4Y2VwdCBpZiBuYmlnZ2VyPT0wLCB0aGVuIHRoZXkgYWxsIGdldCBmcmFnc2l6ZS4gKi8KLQluYmlnZ2VyID0gbGVuICUgbmZyZWU7CisJdG90bGVuID0gbGVuOworCW5iaWdnZXIJPSBsZW4gJQluZnJlZTsKIAotCS8qIHNraXAgdG8gdGhlIGNoYW5uZWwgYWZ0ZXIgdGhlIG9uZSB3ZSBsYXN0IHVzZWQKLQkgICBhbmQgc3RhcnQgYXQgdGhhdCBvbmUgKi8KKwkvKiBza2lwCXRvIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBvbmUgd2UJbGFzdCB1c2VkCisJICAgYW5kIHN0YXJ0IGF0CXRoYXQgb25lICovCiAJbGlzdCA9ICZwcHAtPmNoYW5uZWxzOwotCWZvciAoaSA9IDA7IGkgPCBwcHAtPm54Y2hhbjsgKytpKSB7CisJZm9yCShpID0gMDsJaSA8CXBwcC0+bnhjaGFuOyArK2kpIHsKIAkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWlmIChsaXN0ID09ICZwcHAtPmNoYW5uZWxzKSB7Ci0JCQlpID0gMDsKKwkJaWYgKGxpc3QgPT0JJnBwcC0+Y2hhbm5lbHMpCXsKKwkJCWkgPQkwOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQkvKiBjcmVhdGUgYSBmcmFnbWVudCBmb3IgZWFjaCBjaGFubmVsICovCisJLyogY3JlYXRlIGEJZnJhZ21lbnQgZm9yIGVhY2ggY2hhbm5lbCAqLwogCWJpdHMgPSBCOwotCXdoaWxlIChuZnJlZSA+IDAgfHwgbGVuID4gMCkgeworCXdoaWxlIChuZnJlZSA+IDAgJiYJbGVuCT4gMCkgewogCQlsaXN0ID0gbGlzdC0+bmV4dDsKLQkJaWYgKGxpc3QgPT0gJnBwcC0+Y2hhbm5lbHMpIHsKLQkJCWkgPSAwOworCQlpZiAobGlzdCA9PQkmcHBwLT5jaGFubmVscykJeworCQkJaSA9CTA7CiAJCQljb250aW51ZTsKIAkJfQotCQlwY2ggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CisJCXBjaAk9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGNoYW5uZWwsIGNsaXN0KTsKIAkJKytpOwogCQlpZiAoIXBjaC0+YXZhaWwpCiAJCQljb250aW51ZTsKIAogCQkvKgotCQkgKiBTa2lwIHRoaXMgY2hhbm5lbCBpZiBpdCBoYXMgYSBmcmFnbWVudCBwZW5kaW5nIGFscmVhZHkgYW5kCi0JCSAqIHdlIGhhdmVuJ3QgZ2l2ZW4gYSBmcmFnbWVudCB0byBhbGwgb2YgdGhlIGZyZWUgY2hhbm5lbHMuCisJCSAqIFNraXAJdGhpcyBjaGFubmVsIGlmCWl0IGhhcyBhIGZyYWdtZW50IHBlbmRpbmcgYWxyZWFkeSBhbmQKKwkJICogd2UgaGF2ZW4ndCBnaXZlbglhIGZyYWdtZW50IHRvIGFsbCBvZiB0aGUgZnJlZSBjaGFubmVscy4KIAkJICovCiAJCWlmIChwY2gtPmF2YWlsID09IDEpIHsKLQkJCWlmIChuZnJlZSA+IDApCisJCQlpZiAobmZyZWUgPgkwKQogCQkJCWNvbnRpbnVlOwogCQl9IGVsc2UgewotCQkJLS1uZnJlZTsKIAkJCXBjaC0+YXZhaWwgPSAxOwogCQl9CiAKIAkJLyogY2hlY2sgdGhlIGNoYW5uZWwncyBtdHUgYW5kIHdoZXRoZXIgaXQgaXMgc3RpbGwgYXR0YWNoZWQuICovCiAJCXNwaW5fbG9ja19iaCgmcGNoLT5kb3dubCk7CiAJCWlmIChwY2gtPmNoYW4gPT0gTlVMTCkgewotCQkJLyogY2FuJ3QgdXNlIHRoaXMgY2hhbm5lbCwgaXQncyBiZWluZyBkZXJlZ2lzdGVyZWQgKi8KKwkJCS8qIGNhbid0IHVzZSB0aGlzIGNoYW5uZWwsIGl0J3MJYmVpbmcgZGVyZWdpc3RlcmVkICovCisJCQlpZiAocGNoLT5zcGVlZCA9PSAwKQorCQkJCW56ZXJvLS07CisJCQllbHNlCisJCQkJdG90c3BlZWQgLT0JcGNoLT5zcGVlZDsKKwogCQkJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCQkJcGNoLT5hdmFpbCA9IDA7Ci0JCQlpZiAoLS1uYXZhaWwgPT0gMCkKKwkJCXRvdGxlbiA9IGxlbjsKKwkJCXRvdGZyZWUtLTsKKwkJCW5mcmVlLS07CisJCQlpZiAoLS1uYXZhaWwgPT0JMCkKIAkJCQlicmVhazsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyoKLQkJICogQ3JlYXRlIGEgZnJhZ21lbnQgZm9yIHRoaXMgY2hhbm5lbCBvZgotCQkgKiBtaW4obWF4KG10dSsyLWhkcmxlbiwgNCksIGZyYWdzaXplLCBsZW4pIGJ5dGVzLgotCQkgKiBJZiBtdHUrMi1oZHJsZW4gPCA0LCB0aGF0IGlzIGEgcmlkaWN1bG91c2x5IHNtYWxsCi0JCSAqIE1UVSwgc28gd2UgdXNlIG10dSA9IDIgKyBoZHJsZW4uCisJCSppZiB0aGUgY2hhbm5lbCBzcGVlZCBpcyBub3Qgc2V0IGRpdmlkZQorCQkqdGhlIHBhY2tldAlldmVubHkgYW1vbmcgdGhlIGZyZWUgY2hhbm5lbHM7CisJCSpvdGhlcndpc2UgZGl2aWRlIGl0IGFjY29yZGluZyB0byB0aGUgc3BlZWQKKwkJKm9mIHRoZSBjaGFubmVsIHdlIGFyZSBnb2luZyB0byB0cmFuc21pdCBvbgorCQkqLworCQlpZiAocGNoLT5zcGVlZCA9PSAwKSB7CisJCQlmbGVuID0gdG90bGVuL25mcmVlCTsKKwkJCWlmIChuYmlnZ2VyID4gMCkgeworCQkJCWZsZW4rKzsKKwkJCQluYmlnZ2VyLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQlmbGVuID0gKCgodG90ZnJlZSAtIG56ZXJvKSoodG90bGVuICsgaGRybGVuKnRvdGZyZWUpKSAvCisJCQkJKCh0b3RzcGVlZCp0b3RmcmVlKS9wY2gtPnNwZWVkKSkgLSBoZHJsZW47CisJCQlpZiAobmJpZ2dlciA+IDApIHsKKwkJCQlmbGVuICs9ICgodG90ZnJlZSAtIG56ZXJvKSpwY2gtPnNwZWVkKS90b3RzcGVlZDsKKwkJCQluYmlnZ2VyIC09ICgodG90ZnJlZSAtIG56ZXJvKSpwY2gtPnNwZWVkKS8KKwkJCQkJCQl0b3RzcGVlZDsKKwkJCX0KKwkJfQorCQluZnJlZS0tOworCisJCS8qCisJCSAqY2hlY2sJaWYgd2UgYXJlIG9uIHRoZSBsYXN0IGNoYW5uZWwgb3IKKwkJICp3ZSBleGNlZGVkIHRoZSBsZW5naHQJb2YgdGhlIGRhdGEJdG8KKwkJICpmcmFnbWVudAogCQkgKi8KLQkJaWYgKGZyYWdzaXplID4gbGVuKQotCQkJZnJhZ3NpemUgPSBsZW47Ci0JCWZsZW4gPSBmcmFnc2l6ZTsKLQkJbXR1ID0gcGNoLT5jaGFuLT5tdHUgKyAyIC0gaGRybGVuOwotCQlpZiAobXR1IDwgNCkKLQkJCW10dSA9IDQ7CisJCWlmICgobmZyZWUgPT0gMCkgfHwgKGZsZW4gPiBsZW4pKQorCQkJZmxlbiA9IGxlbjsKKwkJLyoKKwkJICppdCBpcyBub3Qgd29ydGggdG8gdHggb24gc2xvdyBjaGFubmVsczoKKwkJICppbiB0aGF0IGNhc2UgZnJvbSB0aGUgcmVzdWx0aW5nIGZsZW4gYWNjb3JkaW5nIHRvIHRoZQorCQkgKmFib3ZlIGZvcm11bGEgd2lsbCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gemVyby4KKwkJICpTa2lwIHRoZSBjaGFubmVsIGluIHRoaXMgY2FzZQorCQkgKi8KKwkJaWYgKGZsZW4gPD0JMCkgeworCQkJcGNoLT5hdmFpbCA9IDI7CisJCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW10dQk9IHBjaC0+Y2hhbi0+bXR1ICsgMiAtIGhkcmxlbjsKKwkJaWYgKG10dQk8IDQpCisJCQltdHUJPSA0OwogCQlpZiAoZmxlbiA+IG10dSkKIAkJCWZsZW4gPSBtdHU7Ci0JCWlmIChmbGVuID09IGxlbiAmJiBuZnJlZSA9PSAwKQotCQkJYml0cyB8PSBFOwotCQlmcmFnID0gYWxsb2Nfc2tiKGZsZW4gKyBoZHJsZW4gKyAoZmxlbiA9PSAwKSwgR0ZQX0FUT01JQyk7CisJCWlmIChmbGVuID09CWxlbikKKwkJCWJpdHMgfD0JRTsKKwkJZnJhZyA9IGFsbG9jX3NrYihmbGVuICsJaGRybGVuICsgKGZsZW4gPT0gMCksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWZyYWcpCiAJCQlnb3RvIG5vc2tiOwotCQlxID0gc2tiX3B1dChmcmFnLCBmbGVuICsgaGRybGVuKTsKKwkJcSA9CXNrYl9wdXQoZnJhZywgZmxlbiArIGhkcmxlbik7CiAKLQkJLyogbWFrZSB0aGUgTVAgaGVhZGVyICovCisJCS8qIG1ha2UJdGhlCU1QIGhlYWRlciAqLwogCQlxWzBdID0gUFBQX01QID4+IDg7CiAJCXFbMV0gPSBQUFBfTVA7CiAJCWlmIChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKSB7Ci0JCQlxWzJdID0gYml0cyArICgocHBwLT5ueHNlcSA+PiA4KSAmIDB4Zik7CisJCQlxWzJdID0gYml0cwkrICgocHBwLT5ueHNlcSA+PiA4KSAmIDB4Zik7CiAJCQlxWzNdID0gcHBwLT5ueHNlcTsKIAkJfSBlbHNlIHsKIAkJCXFbMl0gPSBiaXRzOwpAQCAtMTM2NCw0MyArMTQ5MSwyOCBAQAogCQkJcVs1XSA9IHBwcC0+bnhzZXE7CiAJCX0KIAotCQkvKgotCQkgKiBDb3B5IHRoZSBkYXRhIGluLgotCQkgKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIGEgYnVnIGluIG9sZGVyIHZlcnNpb25zIG9mCi0JCSAqIHRoZSBMaW51eCBQUFAgbXVsdGlsaW5rIHJlY29uc3RydWN0aW9uIGNvZGUgd2hlcmUgaXQKLQkJICogZHJvcHMgMC1sZW5ndGggZnJhZ21lbnRzLiAgVGhlcmVmb3JlIHdlIG1ha2Ugc3VyZSB0aGUKLQkJICogZnJhZ21lbnQgaGFzIGF0IGxlYXN0IG9uZSBieXRlIG9mIGRhdGEuICBBbnkgYnl0ZXMKLQkJICogd2UgYWRkIGluIHRoaXMgc2l0dWF0aW9uIHdpbGwgZW5kIHVwIGFzIHBhZGRpbmcgb24gdGhlCi0JCSAqIGVuZCBvZiB0aGUgcmVjb25zdHJ1Y3RlZCBwYWNrZXQuCi0JCSAqLwotCQlpZiAoZmxlbiA9PSAwKQotCQkJKnNrYl9wdXQoZnJhZywgMSkgPSAwOwotCQllbHNlCi0JCQltZW1jcHkocSArIGhkcmxlbiwgcCwgZmxlbik7CisJCW1lbWNweShxICsgaGRybGVuLCBwLCBmbGVuKTsKIAogCQkvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovCiAJCWNoYW4gPSBwY2gtPmNoYW47Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpIHx8Ci0JCSAgICAhY2hhbi0+b3BzLT5zdGFydF94bWl0KGNoYW4sIGZyYWcpKQorCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKQl8fAorCQkJIWNoYW4tPm9wcy0+c3RhcnRfeG1pdChjaGFuLCBmcmFnKSkKIAkJCXNrYl9xdWV1ZV90YWlsKCZwY2gtPmZpbGUueHEsIGZyYWcpOwotCQlwY2gtPmhhZF9mcmFnID0gMTsKKwkJcGNoLT5oYWRfZnJhZyA9CTE7CiAJCXAgKz0gZmxlbjsKLQkJbGVuIC09IGZsZW47CisJCWxlbgktPSBmbGVuOwogCQkrK3BwcC0+bnhzZXE7CiAJCWJpdHMgPSAwOwogCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7Ci0KLQkJaWYgKC0tbmJpZ2dlciA9PSAwICYmIGZyYWdzaXplID4gMCkKLQkJCS0tZnJhZ3NpemU7CiAJfQotCXBwcC0+bnhjaGFuID0gaTsKKwlwcHAtPm54Y2hhbgk9IGk7CiAKIAlyZXR1cm4gMTsKIAogIG5vc2tiOgogCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAlpZiAocHBwLT5kZWJ1ZyAmIDEpCi0JCXByaW50ayhLRVJOX0VSUiAiUFBQOiBubyBtZW1vcnkgKGZyYWdtZW50KVxuIik7CisJCXByaW50ayhLRVJOX0VSUgkiUFBQOiBubyBtZW1vcnkJKGZyYWdtZW50KVxuIik7CiAJKytwcHAtPmRldi0+c3RhdHMudHhfZXJyb3JzOwogCSsrcHBwLT5ueHNlcTsKIAlyZXR1cm4gMTsJLyogYWJhbmRvbiB0aGUgZnJhbWUgKi8KQEAgLTE5ODYsMTkgKzIwOTgsMjcgQEAKICAqIENoYW5uZWwgaW50ZXJmYWNlLgogICovCiAKLS8qCi0gKiBDcmVhdGUgYSBuZXcsIHVuYXR0YWNoZWQgcHBwIGNoYW5uZWwuCi0gKi8KLWludAotcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQorLyogQ3JlYXRlIGEgbmV3LCB1bmF0dGFjaGVkIHBwcCBjaGFubmVsLiAqLworaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgY2hhbik7Cit9CisKKy8qIENyZWF0ZSBhIG5ldywgdW5hdHRhY2hlZCBwcHAgY2hhbm5lbCBmb3Igc3BlY2lmaWVkIG5ldC4gKi8KK2ludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CiAKIAlwY2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhbm5lbCksIEdGUF9LRVJORUwpOwogCWlmICghcGNoKQogCQlyZXR1cm4gLUVOT01FTTsKKworCXBuID0gcHBwX3Blcm5ldChuZXQpOworCiAJcGNoLT5wcHAgPSBOVUxMOwogCXBjaC0+Y2hhbiA9IGNoYW47CisJcGNoLT5jaGFuX25ldCA9IG5ldDsKIAljaGFuLT5wcHAgPSBwY2g7CiAJaW5pdF9wcHBfZmlsZSgmcGNoLT5maWxlLCBDSEFOTkVMKTsKIAlwY2gtPmZpbGUuaGRybGVuID0gY2hhbi0+aGRybGVuOwpAQCAtMjAwOCwxMSArMjEyOCwxMyBAQAogCWluaXRfcndzZW0oJnBjaC0+Y2hhbl9zZW0pOwogCXNwaW5fbG9ja19pbml0KCZwY2gtPmRvd25sKTsKIAlyd2xvY2tfaW5pdCgmcGNoLT51cGwpOwotCXNwaW5fbG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOwotCXBjaC0+ZmlsZS5pbmRleCA9ICsrbGFzdF9jaGFubmVsX2luZGV4OwotCWxpc3RfYWRkKCZwY2gtPmxpc3QsICZuZXdfY2hhbm5lbHMpOworCisJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCXBjaC0+ZmlsZS5pbmRleCA9ICsrcG4tPmxhc3RfY2hhbm5lbF9pbmRleDsKKwlsaXN0X2FkZCgmcGNoLT5saXN0LCAmcG4tPm5ld19jaGFubmVscyk7CiAJYXRvbWljX2luYygmY2hhbm5lbF9jb3VudCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG4tPmFsbF9jaGFubmVsc19sb2NrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDUzLDkgKzIxNzUsMTEgQEAKIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLT5wcHA7CisJc3RydWN0IHBwcF9uZXQgKnBuOwogCiAJaWYgKCFwY2gpCiAJCXJldHVybjsJCS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwogCWNoYW4tPnBwcCA9IE5VTEw7CiAKIAkvKgpAQCAtMjA2OCw5ICsyMTkyLDEyIEBACiAJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCXVwX3dyaXRlKCZwY2gtPmNoYW5fc2VtKTsKIAlwcHBfZGlzY29ubmVjdF9jaGFubmVsKHBjaCk7Ci0Jc3Bpbl9sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CisKKwlwbiA9IHBwcF9wZXJuZXQocGNoLT5jaGFuX25ldCk7CisJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOwogCWxpc3RfZGVsKCZwY2gtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CisKIAlwY2gtPmZpbGUuZGVhZCA9IDE7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwY2gtPmZpbGUucndhaXQpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwY2gtPmZpbGUucmVmY250KSkKQEAgLTIzOTUsOSArMjUyMiwxMCBAQAogICogdW5pdCA9PSAtMSBtZWFucyBhbGxvY2F0ZSBhIG5ldyBudW1iZXIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHBwICoKLXBwcF9jcmVhdGVfaW50ZXJmYWNlKGludCB1bml0LCBpbnQgKnJldHApCitwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB1bml0LCBpbnQgKnJldHApCiB7CiAJc3RydWN0IHBwcCAqcHBwOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKQEAgLTI0MDYsNiArMjUzNCw4IEBACiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0MTsKIAorCXBuID0gcHBwX3Blcm5ldChuZXQpOworCiAJcHBwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcHAtPmRldiA9IGRldjsKIAlwcHAtPm1ydSA9IFBQUF9NUlU7CkBAIC0yNDIxLDE3ICsyNTUxLDIzIEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHBwLT5tcnEpOwogI2VuZGlmIC8qIENPTkZJR19QUFBfTVVMVElMSU5LICovCiAKKwkvKgorCSAqIGRydW0gcm9sbDogZG9uJ3QgZm9yZ2V0IHRvIHNldAorCSAqIHRoZSBuZXQgZGV2aWNlIGlzIGJlbG9uZyB0bworCSAqLworCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKwogCXJldCA9IC1FRVhJU1Q7Ci0JbXV0ZXhfbG9jaygmYWxsX3BwcF9tdXRleCk7CisJbXV0ZXhfbG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCiAJaWYgKHVuaXQgPCAwKSB7Ci0JCXVuaXQgPSB1bml0X2dldCgmcHBwX3VuaXRzX2lkciwgcHBwKTsKKwkJdW5pdCA9IHVuaXRfZ2V0KCZwbi0+dW5pdHNfaWRyLCBwcHApOwogCQlpZiAodW5pdCA8IDApIHsKIAkJCSpyZXRwID0gdW5pdDsKIAkJCWdvdG8gb3V0MjsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICh1bml0X2ZpbmQoJnBwcF91bml0c19pZHIsIHVuaXQpKQorCQlpZiAodW5pdF9maW5kKCZwbi0+dW5pdHNfaWRyLCB1bml0KSkKIAkJCWdvdG8gb3V0MjsgLyogdW5pdCBhbHJlYWR5IGV4aXN0cyAqLwogCQkvKgogCQkgKiBpZiBjYWxsZXIgbmVlZCBhIHNwZWNpZmllZCB1bml0IG51bWJlcgpAQCAtMjQ0Miw3ICsyNTc4LDcgQEAKIAkJICogZmFpciBidXQgYXQgbGVhc3QgcHBwZCB3aWxsIGFzayB1cyB0byBhbGxvY2F0ZQogCQkgKiBuZXcgdW5pdCBpbiB0aGlzIGNhc2Ugc28gdXNlciBpcyBoYXBweSA6KQogCQkgKi8KLQkJdW5pdCA9IHVuaXRfc2V0KCZwcHBfdW5pdHNfaWRyLCBwcHAsIHVuaXQpOworCQl1bml0ID0gdW5pdF9zZXQoJnBuLT51bml0c19pZHIsIHBwcCwgdW5pdCk7CiAJCWlmICh1bml0IDwgMCkKIAkJCWdvdG8gb3V0MjsKIAl9CkBAIC0yNDUzLDIwICsyNTg5LDIyIEBACiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJdW5pdF9wdXQoJnBwcF91bml0c19pZHIsIHVuaXQpOworCQl1bml0X3B1dCgmcG4tPnVuaXRzX2lkciwgdW5pdCk7CiAJCXByaW50ayhLRVJOX0VSUiAiUFBQOiBjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgJXMgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAorCXBwcC0+cHBwX25ldCA9IG5ldDsKKwogCWF0b21pY19pbmMoJnBwcF91bml0X2NvdW50KTsKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCiAJKnJldHAgPSAwOwogCXJldHVybiBwcHA7CiAKIG91dDI6Ci0JbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKKwltdXRleF91bmxvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKIAlmcmVlX25ldGRldihkZXYpOwogb3V0MToKIAkqcmV0cCA9IHJldDsKQEAgLTI0OTIsNyArMjYzMCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBwcHBfc2h1dGRvd25faW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcCkKIHsKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisKKwlwbiA9IHBwcF9wZXJuZXQocHBwLT5wcHBfbmV0KTsKKwltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CisKIAkvKiBUaGlzIHdpbGwgY2FsbCBkZXZfY2xvc2UoKSBmb3IgdXMuICovCiAJcHBwX2xvY2socHBwKTsKIAlpZiAoIXBwcC0+Y2xvc2luZykgewpAQCAtMjUwMiwxMSArMjY0NCwxMiBAQAogCX0gZWxzZQogCQlwcHBfdW5sb2NrKHBwcCk7CiAKLQl1bml0X3B1dCgmcHBwX3VuaXRzX2lkciwgcHBwLT5maWxlLmluZGV4KTsKKwl1bml0X3B1dCgmcG4tPnVuaXRzX2lkciwgcHBwLT5maWxlLmluZGV4KTsKIAlwcHAtPmZpbGUuZGVhZCA9IDE7CiAJcHBwLT5vd25lciA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHAtPmZpbGUucndhaXQpOwotCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisKKwltdXRleF91bmxvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKIH0KIAogLyoKQEAgLTI1NDMsOCArMjY4Niw3IEBACiAJcHBwLT5hY3RpdmVfZmlsdGVyID0gTlVMTDsKICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqLwogCi0JaWYgKHBwcC0+eG1pdF9wZW5kaW5nKQotCQlrZnJlZV9za2IocHBwLT54bWl0X3BlbmRpbmcpOworCWtmcmVlX3NrYihwcHAtPnhtaXRfcGVuZGluZyk7CiAKIAlmcmVlX25ldGRldihwcHAtPmRldik7CiB9CkBAIC0yNTU0LDkgKzI2OTYsOSBAQAogICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIGFsbF9wcHBfbXV0ZXguCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHBwICoKLXBwcF9maW5kX3VuaXQoaW50IHVuaXQpCitwcHBfZmluZF91bml0KHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpCiB7Ci0JcmV0dXJuIHVuaXRfZmluZCgmcHBwX3VuaXRzX2lkciwgdW5pdCk7CisJcmV0dXJuIHVuaXRfZmluZCgmcG4tPnVuaXRzX2lkciwgdW5pdCk7CiB9CiAKIC8qCkBAIC0yNTY4LDIwICsyNzEwLDIyIEBACiAgKiB3aGVuIHdlIGhhdmUgYSBsb3Qgb2YgY2hhbm5lbHMgaW4gdXNlLgogICovCiBzdGF0aWMgc3RydWN0IGNoYW5uZWwgKgotcHBwX2ZpbmRfY2hhbm5lbChpbnQgdW5pdCkKK3BwcF9maW5kX2NoYW5uZWwoc3RydWN0IHBwcF9uZXQgKnBuLCBpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqcGNoOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZuZXdfY2hhbm5lbHMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBuLT5uZXdfY2hhbm5lbHMsIGxpc3QpIHsKIAkJaWYgKHBjaC0+ZmlsZS5pbmRleCA9PSB1bml0KSB7Ci0JCQlsaXN0X21vdmUoJnBjaC0+bGlzdCwgJmFsbF9jaGFubmVscyk7CisJCQlsaXN0X21vdmUoJnBjaC0+bGlzdCwgJnBuLT5hbGxfY2hhbm5lbHMpOwogCQkJcmV0dXJuIHBjaDsKIAkJfQogCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJmFsbF9jaGFubmVscywgbGlzdCkgeworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwbi0+YWxsX2NoYW5uZWxzLCBsaXN0KSB7CiAJCWlmIChwY2gtPmZpbGUuaW5kZXggPT0gdW5pdCkKIAkJCXJldHVybiBwY2g7CiAJfQorCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI1OTIsMTEgKzI3MzYsMTQgQEAKIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpCiB7CiAJc3RydWN0IHBwcCAqcHBwOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlpbnQgcmV0ID0gLUVOWElPOwogCWludCBoZHJsZW47CiAKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKLQlwcHAgPSBwcHBfZmluZF91bml0KHVuaXQpOworCXBuID0gcHBwX3Blcm5ldChwY2gtPmNoYW5fbmV0KTsKKworCW11dGV4X2xvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKKwlwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTsKIAlpZiAoIXBwcCkKIAkJZ290byBvdXQ7CiAJd3JpdGVfbG9ja19iaCgmcGNoLT51cGwpOwpAQCAtMjYyMCw3ICsyNzY3LDcgQEAKICBvdXRsOgogCXdyaXRlX3VubG9ja19iaCgmcGNoLT51cGwpOwogIG91dDoKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI2NzcsNyArMjgyNCw3IEBACiAJdW5yZWdpc3Rlcl9jaHJkZXYoUFBQX01BSk9SLCAicHBwIik7CiAJZGV2aWNlX2Rlc3Ryb3kocHBwX2NsYXNzLCBNS0RFVihQUFBfTUFKT1IsIDApKTsKIAljbGFzc19kZXN0cm95KHBwcF9jbGFzcyk7Ci0JaWRyX2Rlc3Ryb3koJnBwcF91bml0c19pZHIpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocHBwX25ldF9pZCwgJnBwcF9uZXRfb3BzKTsKIH0KIAogLyoKQEAgLTI3NDMsNiArMjg5MCw3IEBACiBtb2R1bGVfaW5pdChwcHBfaW5pdCk7CiBtb2R1bGVfZXhpdChwcHBfY2xlYW51cCk7CiAKK0VYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKTsKIEVYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX2NoYW5uZWwpOwogRVhQT1JUX1NZTUJPTChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKTsKIEVYUE9SVF9TWU1CT0wocHBwX2NoYW5uZWxfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMWU4OTJiNy4uZDJmYTJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIHsKIAlzdHJ1Y3Qgc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIzNCw2ICsyMzUsOCBAQAogCWFwLT5jaGFuLm9wcyA9ICZzeW5jX29wczsKIAlhcC0+Y2hhbi5tdHUgPSBQUFBfTVJVOwogCWFwLT5jaGFuLmhkcmxlbiA9IDI7CS8qIGZvciBBL0MgYnl0ZXMgKi8KKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYXAtPmNoYW4uc3BlZWQgPSBzcGVlZDsKIAllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yODEsOCArMjg0LDcgQEAKIAogCXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5ycXVldWUpOwotCWlmIChhcC0+dHBrdCkKLQkJa2ZyZWVfc2tiKGFwLT50cGt0KTsKKwlrZnJlZV9za2IoYXAtPnRwa3QpOwogCWtmcmVlKGFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggYzIyYjMwNS4uZjAwMzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC03OCwzOCArNzgsNzMgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgUFBQT0VfSEFTSF9CSVRTIDQKLSNkZWZpbmUgUFBQT0VfSEFTSF9TSVpFICgxPDxQUFBPRV9IQVNIX0JJVFMpCi0KLXN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzOworI2RlZmluZSBQUFBPRV9IQVNIX1NJWkUgKDEgPDwgUFBQT0VfSEFTSF9CSVRTKQorI2RlZmluZSBQUFBPRV9IQVNIX01BU0sJKFBQUE9FX0hBU0hfU0laRSAtIDEpCiAKIHN0YXRpYyBpbnQgcHBwb2VfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhwcHBvZV9oYXNoX2xvY2spOwotCiBzdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wczsKIAorLyogcGVyLW5ldCBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCitzdGF0aWMgaW50IHBwcG9lX25ldF9pZDsKK3N0cnVjdCBwcHBvZV9uZXQgeworCS8qCisJICogd2UgY291bGQgdXNlIF9zaW5nbGVfIGhhc2ggdGFibGUgZm9yIGFsbAorCSAqIG5ldHMgYnkgaW5qZWN0aW5nIG5ldCBpZCBpbnRvIHRoZSBoYXNoIGJ1dAorCSAqIGl0IHdvdWxkIGluY3JlYXNlIGhhc2ggY2hhaW5zIGFuZCBhZGQKKwkgKiBhIGZldyBhZGRpdGlvbmFsIG1hdGggY29tcGFyYXRpb25zIG1lc3N5CisJICogYXMgd2VsbCwgbW9yZW92ZXIgaW4gY2FzZSBvZiBTTVAgbGVzcyBsb2NraW5nCisJICogY29udHJvdmVyc3kgaGVyZQorCSAqLworCXN0cnVjdCBwcHBveF9zb2NrICpoYXNoX3RhYmxlW1BQUE9FX0hBU0hfU0laRV07CisJcndsb2NrX3QgaGFzaF9sb2NrOworfTsKKworLyogdG8gZWxpbWluYXRlIGEgcmFjZSBidHcgcHBwb2VfZmx1c2hfZGV2IGFuZCBwcHBvZV9yZWxlYXNlICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZsdXNoX2xvY2spOworCisvKgorICogUFBQb0UgY291bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBzdGFnZXM6CisgKiAxKSBEaXNjb3Zlcnkgc3RhZ2UgKHRvIG9idGFpbiByZW1vdGUgTUFDIGFuZCBTZXNzaW9uIElEKQorICogMikgU2Vzc2lvbiBzdGFnZSAoTUFDIGFuZCBTSUQgYXJlIGtub3duKQorICoKKyAqIEV0aGVybmV0IGZyYW1lcyBoYXZlIGEgc3BlY2lhbCB0YWcgZm9yIHRoaXMgYnV0CisgKiB3ZSB1c2Ugc2ltcGxpZXIgYXBwcm9hY2ggYmFzZWQgb24gc2Vzc2lvbiBpZAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhZ2Vfc2Vzc2lvbihfX2JlMTYgc2lkKQoreworCXJldHVybiBzaWQgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKQogewotCXJldHVybiAoYS0+c2lkID09IGItPnNpZCAmJgotCQkobWVtY21wKGEtPnJlbW90ZSwgYi0+cmVtb3RlLCBFVEhfQUxFTikgPT0gMCkpOworCXJldHVybiBhLT5zaWQgPT0gYi0+c2lkICYmICFtZW1jbXAoYS0+cmVtb3RlLCBiLT5yZW1vdGUsIEVUSF9BTEVOKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY21wX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIpCiB7Ci0JcmV0dXJuIChhLT5zaWQgPT0gc2lkICYmCi0JCShtZW1jbXAoYS0+cmVtb3RlLGFkZHIsRVRIX0FMRU4pID09IDApKTsKKwlyZXR1cm4gYS0+c2lkID09IHNpZCAmJiAhbWVtY21wKGEtPnJlbW90ZSwgYWRkciwgRVRIX0FMRU4pOwogfQogCi0jaWYgOCVQUFBPRV9IQVNIX0JJVFMKKyNpZiA4ICUgUFBQT0VfSEFTSF9CSVRTCiAjZXJyb3IgOCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgUFBQT0VfSEFTSF9CSVRTCiAjZW5kaWYKIApAQCAtMTE4LDY5ICsxNTMsNzEgQEAKIAl1bnNpZ25lZCBjaGFyIGhhc2ggPSAwOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMCA7IGkgPCBFVEhfQUxFTiA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQloYXNoIF49IGFkZHJbaV07Ci0JfQotCWZvciAoaSA9IDAgOyBpIDwgc2l6ZW9mKHNpZF90KSo4IDsgaSArPSA4ICl7Ci0JCWhhc2ggXj0gKF9fZm9yY2UgX191MzIpc2lkPj5pOwotCX0KLQlmb3IgKGkgPSA4IDsgKGk+Pj0xKSA+PSBQUFBPRV9IQVNIX0JJVFMgOyApIHsKLQkJaGFzaCBePSBoYXNoPj5pOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpZF90KSAqIDg7IGkgKz0gOCkKKwkJaGFzaCBePSAoX19mb3JjZSBfX3UzMilzaWQgPj4gaTsKKwlmb3IgKGkgPSA4OyAoaSA+Pj0gMSkgPj0gUFBQT0VfSEFTSF9CSVRTOykKKwkJaGFzaCBePSBoYXNoID4+IGk7CiAKLQlyZXR1cm4gaGFzaCAmICggUFBQT0VfSEFTSF9TSVpFIC0gMSApOworCXJldHVybiBoYXNoICYgUFBQT0VfSEFTSF9NQVNLOwogfQogCi0vKiB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqLwotc3RhdGljIHN0cnVjdCBwcHBveF9zb2NrICppdGVtX2hhc2hfdGFibGVbUFBQT0VfSEFTSF9TSVpFXTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgU2V0L2dldC9kZWxldGUvcmVoYXNoIGl0ZW1zICAoaW50ZXJuYWwgdmVyc2lvbnMpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oX19iZTE2IHNpZCwgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJaW50IGhhc2ggPSBoYXNoX2l0ZW0oc2lkLCBhZGRyKTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcmV0OwogCi0JcmV0ID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCXJldCA9IHBuLT5oYXNoX3RhYmxlW2hhc2hdOworCXdoaWxlIChyZXQpIHsKKwkJaWYgKGNtcF9hZGRyKCZyZXQtPnBwcG9lX3BhLCBzaWQsIGFkZHIpICYmCisJCSAgICByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkKKwkJCXJldHVybiByZXQ7CiAKLQl3aGlsZSAocmV0ICYmICEoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYgcmV0LT5wcHBvZV9pZmluZGV4ID09IGlmaW5kZXgpKQogCQlyZXQgPSByZXQtPm5leHQ7CisJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX3NldF9pdGVtKHN0cnVjdCBwcHBveF9zb2NrICpwbykKK3N0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKQogewogCWludCBoYXNoID0gaGFzaF9pdGVtKHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUpOwogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07CisJcmV0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CiAJd2hpbGUgKHJldCkgewotCQlpZiAoY21wXzJfYWRkcigmcmV0LT5wcHBvZV9wYSwgJnBvLT5wcHBvZV9wYSkgJiYgcmV0LT5wcHBvZV9pZmluZGV4ID09IHBvLT5wcHBvZV9pZmluZGV4KQorCQlpZiAoY21wXzJfYWRkcigmcmV0LT5wcHBvZV9wYSwgJnBvLT5wcHBvZV9wYSkgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBwby0+cHBwb2VfaWZpbmRleCkKIAkJCXJldHVybiAtRUFMUkVBRFk7CiAKIAkJcmV0ID0gcmV0LT5uZXh0OwogCX0KIAotCXBvLT5uZXh0ID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOwotCWl0ZW1faGFzaF90YWJsZVtoYXNoXSA9IHBvOworCXBvLT5uZXh0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CisJcG4tPmhhc2hfdGFibGVbaGFzaF0gPSBwbzsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZGVsZXRlX2l0ZW0oX19iZTE2IHNpZCwgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZGVsZXRlX2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJCWNoYXIgKmFkZHIsIGludCBpZmluZGV4KQogewogCWludCBoYXNoID0gaGFzaF9pdGVtKHNpZCwgYWRkcik7CiAJc3RydWN0IHBwcG94X3NvY2sgKnJldCwgKipzcmM7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07Ci0Jc3JjID0gJml0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlyZXQgPSBwbi0+aGFzaF90YWJsZVtoYXNoXTsKKwlzcmMgPSAmcG4tPmhhc2hfdGFibGVbaGFzaF07CiAKIAl3aGlsZSAocmV0KSB7Ci0JCWlmIChjbXBfYWRkcigmcmV0LT5wcHBvZV9wYSwgc2lkLCBhZGRyKSAmJiByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkgeworCQlpZiAoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7CiAJCQkqc3JjID0gcmV0LT5uZXh0OwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw0NiArMjM0LDU0IEBACiAgKiAgU2V0L2dldC9kZWxldGUvcmVoYXNoIGl0ZW1zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShfX2JlMTYgc2lkLAotCQkJCQkgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCwKKwkJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCXBvID0gX19nZXRfaXRlbShzaWQsIGFkZHIsIGlmaW5kZXgpOworCXJlYWRfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJcG8gPSBfX2dldF9pdGVtKHBuLCBzaWQsIGFkZHIsIGlmaW5kZXgpOwogCWlmIChwbykKIAkJc29ja19ob2xkKHNrX3BwcG94KHBvKSk7Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcmV0dXJuIHBvOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3ApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3ApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb3hfc29jazsKKwogCWludCBpZmluZGV4OwogCi0JZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKLQlpZighZGV2KQorCWRldiA9IGRldl9nZXRfYnlfbmFtZShuZXQsIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7CisJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOworCiAJaWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKKwlwcHBveF9zb2NrID0gZ2V0X2l0ZW0ocG4sIHNwLT5zYV9hZGRyLnBwcG9lLnNpZCwKKwkJCQlzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUsIGlmaW5kZXgpOwogCWRldl9wdXQoZGV2KTsKLQlyZXR1cm4gZ2V0X2l0ZW0oc3AtPnNhX2FkZHIucHBwb2Uuc2lkLCBzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUsIGlmaW5kZXgpOworCisJcmV0dXJuIHBwcG94X3NvY2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmRlbGV0ZV9pdGVtKF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIsIGludCBpZmluZGV4KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqZGVsZXRlX2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJCWNoYXIgKmFkZHIsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQl3cml0ZV9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCXJldCA9IF9fZGVsZXRlX2l0ZW0oc2lkLCBhZGRyLCBpZmluZGV4KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJcmV0ID0gX19kZWxldGVfaXRlbShwbiwgc2lkLCBhZGRyLCBpZmluZGV4KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgSGFuZGxlciBmb3IgZGV2aWNlIGV2ZW50cy4KQEAgLTI0NiwyNSArMjkxLDMzIEBACiAKIHN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBoYXNoOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCWludCBpOworCiAJQlVHX09OKGRldiA9PSBOVUxMKTsKIAotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JZm9yIChoYXNoID0gMDsgaGFzaCA8IFBQUE9FX0hBU0hfU0laRTsgaGFzaCsrKSB7Ci0JCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCWlmICghcG4pIC8qIGFscmVhZHkgZnJlZWQgKi8KKwkJcmV0dXJuOworCisJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IFBQUE9FX0hBU0hfU0laRTsgaSsrKSB7CisJCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCiAJCXdoaWxlIChwbyAhPSBOVUxMKSB7Ci0JCQlzdHJ1Y3Qgc29jayAqc2sgPSBza19wcHBveChwbyk7CisJCQlzdHJ1Y3Qgc29jayAqc2s7CiAJCQlpZiAocG8tPnBwcG9lX2RldiAhPSBkZXYpIHsKIAkJCQlwbyA9IHBvLT5uZXh0OwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJc2sgPSBza19wcHBveChwbyk7CisJCQlzcGluX2xvY2soJmZsdXNoX2xvY2spOwogCQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CisJCQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7CiAJCQlkZXZfcHV0KGRldik7CiAKLQogCQkJLyogV2UgYWx3YXlzIGdyYWIgdGhlIHNvY2tldCBsb2NrLCBmb2xsb3dlZCBieSB0aGUKLQkJCSAqIHBwcG9lX2hhc2hfbG9jaywgaW4gdGhhdCBvcmRlci4gIFNpbmNlIHdlIHNob3VsZAorCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkCiAJCQkgKiBob2xkIHRoZSBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywKIAkJCSAqIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLgogCQkJICogSG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgc29jayBzbyBpdCBkb2Vzbid0IGRpc2FwcGVhcgpAQCAtMjczLDcgKzMyNiw3IEBACiAKIAkJCXNvY2tfaG9sZChzayk7CiAKLQkJCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlsb2NrX3NvY2soc2spOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgewpAQCAtMjg5LDIwICszNDIsMTcgQEAKIAkJCSAqIFdoaWxlIHRoZSBsb2NrIHdhcyBkcm9wcGVkIHRoZSBjaGFpbiBjb250ZW50cyBtYXkKIAkJCSAqIGhhdmUgY2hhbmdlZC4KIAkJCSAqLwotCQkJd3JpdGVfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKLQkJCXBvID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCQlwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCQl9CiAJfQotCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHBwcG9lX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwdHI7Ci0KLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwdHI7CiAKIAkvKiBPbmx5IGxvb2sgYXQgc29ja2V0cyB0aGF0IGFyZSB1c2luZyB0aGlzIHNwZWNpZmljIGRldmljZS4gKi8KIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0zMjQsMTIgKzM3NCwxMCBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwcG9lX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gcHBwb2VfZGV2aWNlX2V2ZW50LAogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRG8gdGhlIHJlYWwgd29yayBvZiByZWNlaXZpbmcgYSBQUFBvRSBTZXNzaW9uIGZyYW1lLgpAQCAtMzQzLDggKzM5MSw4IEBACiAJaWYgKHNrLT5za19zdGF0ZSAmIFBQUE9YX0JPVU5EKSB7CiAJCXBwcF9pbnB1dCgmcG8tPmNoYW4sIHNrYik7CiAJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgJiBQUFBPWF9SRUxBWSkgewotCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoJnBvLT5wcHBvZV9yZWxheSk7Ci0KKwkJcmVsYXlfcG8gPSBnZXRfaXRlbV9ieV9hZGRyKGRldl9uZXQocG8tPnBwcG9lX2RldiksCisJCQkJCQkmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKHJlbGF5X3BvID09IE5VTEwpCiAJCQlnb3RvIGFib3J0X2tmcmVlOwogCkBAIC0zNzMsMjIgKzQyMSwxOCBAQAogICogUmVjZWl2ZSB3cmFwcGVyIGNhbGxlZCBpbiBCSCBjb250ZXh0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LAotCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKLQorc3RhdGljIGludCBwcHBvZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOwogCWludCBsZW47CiAKLQlpZiAoIShza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkpCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCi0JCWdvdG8gZHJvcDsKLQogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSkpCiAJCWdvdG8gZHJvcDsKIApAQCAtNDAyLDcgKzQ0Niw4IEBACiAJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIGxlbikpCiAJCWdvdG8gZHJvcDsKIAotCXBvID0gZ2V0X2l0ZW0ocGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKCFwbykKIAkJZ290byBkcm9wOwogCkBAIC00MjAsMTkgKzQ2NSwxNiBAQAogICogVGhpcyBpcyBzb2xlbHkgZm9yIGRldGVjdGlvbiBvZiBQQURUIGZyYW1lcwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcHBwb2VfZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IHBhY2tldF90eXBlICpwdCwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCBwcHBvZV9kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiAKIHsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJZ290byBhYm9ydDsKLQotCWlmICghKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSkKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKQpAQCAtNDQyLDcgKzQ4NCw4IEBACiAJaWYgKHBoLT5jb2RlICE9IFBBRFRfQ09ERSkKIAkJZ290byBhYm9ydDsKIAotCXBvID0gZ2V0X2l0ZW0ocGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKHBvKSB7CiAJCXN0cnVjdCBzb2NrICpzayA9IHNrX3BwcG94KHBvKTsKIApAQCAtNDcwLDE3ICs1MTMsMTcgQEAKIAlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7IC8qIExpZXMuLi4gOi0pICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VzX3B0eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VzX3B0eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBfU0VTKSwKIAkuZnVuYwk9IHBwcG9lX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VkX3B0eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfRElTQyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lZF9wdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX0RJU0MpLAogCS5mdW5jCT0gcHBwb2VfZGlzY19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvID0geworc3RhdGljIHN0cnVjdCBwcm90byBwcHBvZV9za19wcm90byBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCSAgPSAiUFBQT0UiLAogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLm9ial9zaXplID0gc2l6ZW9mKHN0cnVjdCBwcHBveF9zb2NrKSwKQEAgLTQ5MywzOCArNTM2LDM3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHBwb2VfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCXN0cnVjdCBzb2NrICpzazsKIAogCXNrID0gc2tfYWxsb2MobmV0LCBQRl9QUFBPWCwgR0ZQX0tFUk5FTCwgJnBwcG9lX3NrX3Byb3RvKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKLQlzb2NrLT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwotCXNvY2stPm9wcyAgID0gJnBwcG9lX29wczsKKwlzb2NrLT5zdGF0ZQk9IFNTX1VOQ09OTkVDVEVEOworCXNvY2stPm9wcwk9ICZwcHBvZV9vcHM7CiAKLQlzay0+c2tfYmFja2xvZ19yY3YgPSBwcHBvZV9yY3ZfY29yZTsKLQlzay0+c2tfc3RhdGUJICAgPSBQUFBPWF9OT05FOwotCXNrLT5za190eXBlCSAgID0gU09DS19TVFJFQU07Ci0Jc2stPnNrX2ZhbWlseQkgICA9IFBGX1BQUE9YOwotCXNrLT5za19wcm90b2NvbAkgICA9IFBYX1BST1RPX09FOworCXNrLT5za19iYWNrbG9nX3Jjdgk9IHBwcG9lX3Jjdl9jb3JlOworCXNrLT5za19zdGF0ZQkJPSBQUFBPWF9OT05FOworCXNrLT5za190eXBlCQk9IFNPQ0tfU1RSRUFNOworCXNrLT5za19mYW1pbHkJCT0gUEZfUFBQT1g7CisJc2stPnNrX3Byb3RvY29sCQk9IFBYX1BST1RPX09FOwogCi0JZXJyb3IgPSAwOwotb3V0OglyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHBwb2VfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKIAogCWlmICghc2spCiAJCXJldHVybiAwOwogCiAJbG9ja19zb2NrKHNrKTsKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKXsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAtRUJBREY7CiAJfQpAQCAtNTM0LDI2ICs1NzYsMzkgQEAKIAkvKiBTaWduYWwgdGhlIGRlYXRoIG9mIHRoZSBzb2NrZXQuICovCiAJc2stPnNrX3N0YXRlID0gUFBQT1hfREVBRDsKIAorCS8qCisJICogcHBwb2VfZmx1c2hfZGV2IGNvdWxkIGxlYWQgdG8gYSByYWNlIHdpdGgKKwkgKiB0aGlzIHJvdXRpbmUgc28gd2UgdXNlIGZsdXNoX2xvY2sgdG8gZWxpbWluYXRlCisJICogc3VjaCBhIGNhc2UgKHdlIG9ubHkgbmVlZCBwZXItbmV0IHNwZWNpZmljIGRhdGEpCisJICovCisJc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKKwlwbyA9IHBwcG94X3NrKHNrKTsKKwlpZiAoIXBvLT5wcHBvZV9kZXYpIHsKKwkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChwby0+cHBwb2VfZGV2KSk7CisJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwogCi0JLyogV3JpdGUgbG9jayBvbiBoYXNoIGxvY2sgcHJvdGVjdHMgdGhlIGVudGlyZSAicG8iIHN0cnVjdCBmcm9tCi0JICogY29uY3VycmVudCB1cGRhdGVzIHZpYSBwcHBvZV9mbHVzaF9kZXYuIFRoZSAicG8iIHN0cnVjdCBzaG91bGQKLQkgKiBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGhhc2ggdGFibGUgY29udGVudHMsIHRodXMgcHJvdGVjdGVkCi0JICogYnkgdGhlIGhhc2ggdGFibGUgbG9jayAqLwotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJLyoKKwkgKiBwcm90ZWN0ICJwbyIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXMKKwkgKiBvbiBwcHBvZV9mbHVzaF9kZXYKKwkgKi8KKwl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAogCXBvID0gcHBwb3hfc2soc2spOwotCWlmIChwby0+cHBwb2VfcGEuc2lkKSB7Ci0JCV9fZGVsZXRlX2l0ZW0ocG8tPnBwcG9lX3BhLnNpZCwKLQkJCSAgICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKLQl9CisJaWYgKHN0YWdlX3Nlc3Npb24ocG8tPnBwcG9lX3BhLnNpZCkpCisJCV9fZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsCisJCQkJcG8tPnBwcG9lX2lmaW5kZXgpOwogCiAJaWYgKHBvLT5wcHBvZV9kZXYpIHsKIAkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKIAkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CiAJfQogCi0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAKK291dDoKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCkBAIC01NjQsMTQgKzYxOSwxNCBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVzZXJ2YWRkciwKIAkJICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqKSB1c2VydmFkZHI7CisJc3RydWN0IHNvY2thZGRyX3BwcG94ICpzcCA9IChzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKil1c2VydmFkZHI7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAJaW50IGVycm9yOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTU4Miw0NCArNjM3LDQ1IEBACiAKIAkvKiBDaGVjayBmb3IgYWxyZWFkeSBib3VuZCBzb2NrZXRzICovCiAJZXJyb3IgPSAtRUJVU1k7Ci0JaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpICYmIHNwLT5zYV9hZGRyLnBwcG9lLnNpZCkKKwlpZiAoKHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkgJiYKKwkgICAgIHN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkKIAkJZ290byBlbmQ7CiAKIAkvKiBDaGVjayBmb3IgYWxyZWFkeSBkaXNjb25uZWN0ZWQgc29ja2V0cywgb24gYXR0ZW1wdHMgdG8gZGlzY29ubmVjdCAqLwogCWVycm9yID0gLUVBTFJFQURZOwotCWlmICgoc2stPnNrX3N0YXRlICYgUFBQT1hfREVBRCkgJiYgIXNwLT5zYV9hZGRyLnBwcG9lLnNpZCApCisJaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKSAmJgorCSAgICAgIXN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkKIAkJZ290byBlbmQ7CiAKIAllcnJvciA9IDA7Ci0JaWYgKHBvLT5wcHBvZV9wYS5zaWQpIHsKKworCS8qIERlbGV0ZSB0aGUgb2xkIGJpbmRpbmcgKi8KKwlpZiAoc3RhZ2Vfc2Vzc2lvbihwby0+cHBwb2VfcGEuc2lkKSkgewogCQlwcHBveF91bmJpbmRfc29jayhzayk7Ci0KLQkJLyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqLwotCQlkZWxldGVfaXRlbShwby0+cHBwb2VfcGEuc2lkLHBvLT5wcHBvZV9wYS5yZW1vdGUscG8tPnBwcG9lX2lmaW5kZXgpOwotCi0JCWlmKHBvLT5wcHBvZV9kZXYpCisJCWlmIChwby0+cHBwb2VfZGV2KSB7CisJCQlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KHBvLT5wcHBvZV9kZXYpKTsKKwkJCWRlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLAorCQkJCXBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJCWRldl9wdXQocG8tPnBwcG9lX2Rldik7Ci0KKwkJfQogCQltZW1zZXQoc2tfcHBwb3gocG8pICsgMSwgMCwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb3hfc29jaykgLSBzaXplb2Yoc3RydWN0IHNvY2spKTsKLQogCQlzay0+c2tfc3RhdGUgPSBQUFBPWF9OT05FOwogCX0KIAotCS8qIERvbid0IHJlLWJpbmQgaWYgc2lkPT0wICovCi0JaWYgKHNwLT5zYV9hZGRyLnBwcG9lLnNpZCAhPSAwKSB7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7Ci0KKwkvKiBSZS1iaW5kIGluIHNlc3Npb24gc3RhZ2Ugb25seSAqLworCWlmIChzdGFnZV9zZXNzaW9uKHNwLT5zYV9hZGRyLnBwcG9lLnNpZCkpIHsKIAkJZXJyb3IgPSAtRU5PREVWOworCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc29ja19uZXQoc2spLCBzcC0+c2FfYWRkci5wcHBvZS5kZXYpOwogCQlpZiAoIWRldikKIAkJCWdvdG8gZW5kOwogCiAJCXBvLT5wcHBvZV9kZXYgPSBkZXY7CiAJCXBvLT5wcHBvZV9pZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCi0JCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKXsKLQkJCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTsKKwkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJZ290byBlcnJfcHV0OwogCQl9CiAKQEAgLTYyNyw4ICs2ODMsOCBAQAogCQkgICAgICAgJnNwLT5zYV9hZGRyLnBwcG9lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9hZGRyKSk7CiAKLQkJZXJyb3IgPSBfX3NldF9pdGVtKHBvKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCQllcnJvciA9IF9fc2V0X2l0ZW0ocG4sIHBvKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gZXJyX3B1dDsKIApAQCAtNjM5LDcgKzY5NSw3IEBACiAJCXBvLT5jaGFuLnByaXZhdGUgPSBzazsKIAkJcG8tPmNoYW4ub3BzID0gJnBwcG9lX2NoYW5fb3BzOwogCi0JCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwkJZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCAmcG8tPmNoYW4pOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycl9wdXQ7CiAKQEAgLTY0OCw3ICs3MDQsNyBAQAogCiAJcG8tPm51bSA9IHNwLT5zYV9hZGRyLnBwcG9lLnNpZDsKIAotIGVuZDoKK2VuZDoKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnJvcjsKIGVycl9wdXQ6CkBAIC02NTksNyArNzE1LDYgQEAKIAlnb3RvIGVuZDsKIH0KIAotCiBzdGF0aWMgaW50IHBwcG9lX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKIAkJICBpbnQgKnVzb2NrYWRkcl9sZW4sIGludCBwZWVyKQogewpAQCAtNjc4LDcgKzczMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBwcHBvZV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTY5MCw3ICs3NDQsNiBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NHTVJVOgogCQllcnIgPSAtRU5YSU87Ci0KIAkJaWYgKCEoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSkKIAkJCWJyZWFrOwogCkBAIC02OTgsNyArNzUxLDcgQEAKIAkJaWYgKHB1dF91c2VyKHBvLT5wcHBvZV9kZXYtPm10dSAtCiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtCiAJCQkgICAgIFBQUF9IRFJMRU4sCi0JCQkgICAgIChpbnQgX191c2VyICopIGFyZykpCisJCQkgICAgIChpbnQgX191c2VyICopYXJnKSkKIAkJCWJyZWFrOwogCQllcnIgPSAwOwogCQlicmVhazsKQEAgLTcwOSw3ICs3NjIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHZhbCwoaW50IF9fdXNlciAqKSBhcmcpKQorCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQlicmVhazsKIAogCQlpZiAodmFsIDwgKHBvLT5wcHBvZV9kZXYtPm10dQpAQCAtNzIyLDcgKzc3NSw3IEBACiAKIAljYXNlIFBQUElPQ1NGTEFHUzoKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpKQogCQkJYnJlYWs7CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtNzQ5LDEzICs4MDIsMTIgQEAKIAogCQllcnIgPSAtRUlOVkFMOwogCQlpZiAocG8tPnBwcG9lX3JlbGF5LnNhX2ZhbWlseSAhPSBBRl9QUFBPWCB8fAotCQkgICAgcG8tPnBwcG9lX3JlbGF5LnNhX3Byb3RvY29sIT0gUFhfUFJPVE9fT0UpCisJCSAgICBwby0+cHBwb2VfcmVsYXkuc2FfcHJvdG9jb2wgIT0gUFhfUFJPVE9fT0UpCiAJCQlicmVhazsKIAogCQkvKiBDaGVjayB0aGF0IHRoZSBzb2NrZXQgcmVmZXJlbmNlZCBieSB0aGUgYWRkcmVzcwogCQkgICBhY3R1YWxseSBleGlzdHMuICovCi0JCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcigmcG8tPnBwcG9lX3JlbGF5KTsKLQorCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoc29ja19uZXQoc2spLCAmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKCFyZWxheV9wbykKIAkJCWJyZWFrOwogCkBAIC03ODEsNyArODMzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCSAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbikKIHsKQEAgLTgwOCw3ICs4NTksNyBAQAogCWRldiA9IHBvLT5wcHBvZV9kZXY7CiAKIAllcnJvciA9IC1FTVNHU0laRTsKLSAJaWYgKHRvdGFsX2xlbiA+IChkZXYtPm10dSArIGRldi0+aGFyZF9oZWFkZXJfbGVuKSkKKwlpZiAodG90YWxfbGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlnb3RvIGVuZDsKIAogCkBAIC04MjYsMTMgKzg3NywxMiBAQAogCXNrYi0+ZGV2ID0gZGV2OwogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyk7CiAKLQlwaCA9IChzdHJ1Y3QgcHBwb2VfaGRyICopIHNrYl9wdXQoc2tiLCB0b3RhbF9sZW4gKyBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOwotCXN0YXJ0ID0gKGNoYXIgKikgJnBoLT50YWdbMF07CisJcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKXNrYl9wdXQoc2tiLCB0b3RhbF9sZW4gKyBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOworCXN0YXJ0ID0gKGNoYXIgKikmcGgtPnRhZ1swXTsKIAogCWVycm9yID0gbWVtY3B5X2Zyb21pb3ZlYyhzdGFydCwgbS0+bXNnX2lvdiwgdG90YWxfbGVuKTsKLQogCWlmIChlcnJvciA8IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZW5kOwpAQCAtODUzLDcgKzkwMyw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB4bWl0IGZ1bmN0aW9uIGZvciBpbnRlcm5hbCB1c2UuCkBAIC04ODgsNyArOTM3LDcgQEAKIAlwaC0+c2lkCT0gcG8tPm51bTsKIAlwaC0+bGVuZ3RoID0gaHRvbnMoZGF0YV9sZW4pOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOwogCXNrYi0+ZGV2ID0gZGV2OwogCiAJZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBFVEhfUF9QUFBfU0VTLApAQCAtOTAzLDcgKzk1Miw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHhtaXQgZnVuY3Rpb24gY2FsbGVkIGJ5IGdlbmVyaWMgUFBQIGRyaXZlcgpAQCAtOTEyLDExICs5NjAsMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopIGNoYW4tPnByaXZhdGU7CisJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi0+cHJpdmF0ZTsKIAlyZXR1cm4gX19wcHBvZV94bWl0KHNrLCBza2IpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0gewogCS5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCwKIH07CkBAIC05MzUsNyArOTgyLDYgQEAKIAogCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyAmIH5NU0dfRE9OVFdBSVQsCiAJCQkJZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnJvcik7Ci0KIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGVuZDsKIApAQCAtOTY4LDQ0ICsxMDE0LDQ3IEBACiAJZGV2X25hbWUgPSBwby0+cHBwb2VfcGEuZGV2OwogCiAJc2VxX3ByaW50ZihzZXEsICIlMDhYICVwTSAlOHNcbiIsCi0JCSAgIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTsKKwkJcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwogb3V0OgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb2VfZ2V0X2lkeChsb2ZmX3QgcG9zKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb2VfZ2V0X2lkeChzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87Ci0JaW50IGkgPSAwOworCWludCBpOwogCi0JZm9yICg7IGkgPCBQUFBPRV9IQVNIX1NJWkU7IGkrKykgewotCQlwbyA9IGl0ZW1faGFzaF90YWJsZVtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBQT0VfSEFTSF9TSVpFOyBpKyspIHsKKwkJcG8gPSBwbi0+aGFzaF90YWJsZVtpXTsKIAkJd2hpbGUgKHBvKSB7CiAJCQlpZiAoIXBvcy0tKQogCQkJCWdvdG8gb3V0OwogCQkJcG8gPSBwby0+bmV4dDsKIAkJfQogCX0KKwogb3V0OgogCXJldHVybiBwbzsKIH0KIAogc3RhdGljIHZvaWQgKnBwcG9lX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhwcHBvZV9oYXNoX2xvY2spCisJX19hY3F1aXJlcyhwbi0+aGFzaF9sb2NrKQogeworCXN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTsKIAlsb2ZmX3QgbCA9ICpwb3M7CiAKLQlyZWFkX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JcmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmVhZF9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlyZXR1cm4gbCA/IHBwcG9lX2dldF9pZHgocG4sIC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKIHN0YXRpYyB2b2lkICpwcHBvZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CisJc3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKIAogCSsrKnBvczsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJcG8gPSBwcHBvZV9nZXRfaWR4KDApOworCQlwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApOwogCQlnb3RvIG91dDsKIAl9CiAJcG8gPSB2OwpAQCAtMTAxNSwyMiArMTA2NCwyNCBAQAogCQlpbnQgaGFzaCA9IGhhc2hfaXRlbShwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlKTsKIAogCQl3aGlsZSAoKytoYXNoIDwgUFBQT0VfSEFTSF9TSVpFKSB7Ci0JCQlwbyA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwkJCXBvID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CiAJCQlpZiAocG8pCiAJCQkJYnJlYWs7CiAJCX0KIAl9CisKIG91dDoKIAlyZXR1cm4gcG87CiB9CiAKIHN0YXRpYyB2b2lkIHBwcG9lX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMocHBwb2VfaGFzaF9sb2NrKQorCV9fcmVsZWFzZXMocG4tPmhhc2hfbG9jaykKIHsKLQlyZWFkX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7CisJcmVhZF91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CQk9IHBwcG9lX3NlcV9zdGFydCwKIAkubmV4dAkJPSBwcHBvZV9zZXFfbmV4dCwKIAkuc3RvcAkJPSBwcHBvZV9zZXFfc3RvcCwKQEAgLTEwMzksNyArMTA5MCw4IEBACiAKIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcHBvZV9zZXFfb3BzKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2Vfc2VxX29wcywKKwkJCXNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBwcG9lX3NlcV9mb3BzID0gewpAQCAtMTA0Nyw3NCArMTA5OSwxMTUgQEAKIAkub3BlbgkJPSBwcHBvZV9zZXFfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcHBwb2VfcHJvY19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwotCi0JcCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInBwcG9lIiwgU19JUlVHTywgJnBwcG9lX3NlcV9mb3BzKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotI2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBwcG9lX3Byb2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzID0gewotICAgIC5mYW1pbHkJCT0gQUZfUFBQT1gsCi0gICAgLm93bmVyCQk9IFRISVNfTU9EVUxFLAotICAgIC5yZWxlYXNlCQk9IHBwcG9lX3JlbGVhc2UsCi0gICAgLmJpbmQJCT0gc29ja19ub19iaW5kLAotICAgIC5jb25uZWN0CQk9IHBwcG9lX2Nvbm5lY3QsCi0gICAgLnNvY2tldHBhaXIJCT0gc29ja19ub19zb2NrZXRwYWlyLAotICAgIC5hY2NlcHQJCT0gc29ja19ub19hY2NlcHQsCi0gICAgLmdldG5hbWUJCT0gcHBwb2VfZ2V0bmFtZSwKLSAgICAucG9sbAkJPSBkYXRhZ3JhbV9wb2xsLAotICAgIC5saXN0ZW4JCT0gc29ja19ub19saXN0ZW4sCi0gICAgLnNodXRkb3duCQk9IHNvY2tfbm9fc2h1dGRvd24sCi0gICAgLnNldHNvY2tvcHQJCT0gc29ja19ub19zZXRzb2Nrb3B0LAotICAgIC5nZXRzb2Nrb3B0CQk9IHNvY2tfbm9fZ2V0c29ja29wdCwKLSAgICAuc2VuZG1zZwkJPSBwcHBvZV9zZW5kbXNnLAotICAgIC5yZWN2bXNnCQk9IHBwcG9lX3JlY3Ztc2csCi0gICAgLm1tYXAJCT0gc29ja19ub19tbWFwLAotICAgIC5pb2N0bAkJPSBwcHBveF9pb2N0bCwKKwkuZmFtaWx5CQk9IEFGX1BQUE9YLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQk9IHBwcG9lX3JlbGVhc2UsCisJLmJpbmQJCT0gc29ja19ub19iaW5kLAorCS5jb25uZWN0CT0gcHBwb2VfY29ubmVjdCwKKwkuc29ja2V0cGFpcgk9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQk9IHNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lCT0gcHBwb2VfZ2V0bmFtZSwKKwkucG9sbAkJPSBkYXRhZ3JhbV9wb2xsLAorCS5saXN0ZW4JCT0gc29ja19ub19saXN0ZW4sCisJLnNodXRkb3duCT0gc29ja19ub19zaHV0ZG93biwKKwkuc2V0c29ja29wdAk9IHNvY2tfbm9fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAk9IHNvY2tfbm9fZ2V0c29ja29wdCwKKwkuc2VuZG1zZwk9IHBwcG9lX3NlbmRtc2csCisJLnJlY3Ztc2cJPSBwcHBvZV9yZWN2bXNnLAorCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKKwkuaW9jdGwJCT0gcHBwb3hfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBwcG94X3Byb3RvIHBwcG9lX3Byb3RvID0gewotICAgIC5jcmVhdGUJPSBwcHBvZV9jcmVhdGUsCi0gICAgLmlvY3RsCT0gcHBwb2VfaW9jdGwsCi0gICAgLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLmNyZWF0ZQk9IHBwcG9lX2NyZWF0ZSwKKwkuaW9jdGwJPSBwcHBvZV9pb2N0bCwKKwkub3duZXIJPSBUSElTX01PRFVMRSwKIH07CiAKLQotc3RhdGljIGludCBfX2luaXQgcHBwb2VfaW5pdCh2b2lkKQorc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9lX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpbnQgZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvLCAwKTsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKwlpbnQgZXJyOwogCisJcG4gPSBremFsbG9jKHNpemVvZigqcG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ3bG9ja19pbml0KCZwbi0+aGFzaF9sb2NrKTsKKworCWVyciA9IG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCwgcG4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0gCWVyciA9IHJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09FLCAmcHBwb2VfcHJvdG8pOworCXBkZSA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInBwcG9lIiwgU19JUlVHTywgJnBwcG9lX3NlcV9mb3BzKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmICghcGRlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7CisKK291dDoKKwlrZnJlZShwbik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBvZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CisKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAicHBwb2UiKTsKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKKwkvKgorCSAqIGlmIHNvbWVvbmUgaGFzIGNhY2hlZCBvdXIgbmV0IHRoZW4KKwkgKiBmdXJ0aGVyIG5ldF9nZW5lcmljIGNhbGwgd2lsbCByZXR1cm4gTlVMTAorCSAqLworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCwgTlVMTCk7CisJa2ZyZWUocG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcG9lX25ldF9vcHMgPSB7CisJLmluaXQgPSBwcHBvZV9pbml0X25ldCwKKwkuZXhpdCA9IHBwcG9lX2V4aXRfbmV0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHBwb2VfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwcm90b19yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8sIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gcmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UsICZwcHBvZV9wcm90byk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcHBvZV9wcm90bzsKIAotCWVyciA9IHBwcG9lX3Byb2NfaW5pdCgpOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwogCiAJZGV2X2FkZF9wYWNrKCZwcHBvZXNfcHR5cGUpOwogCWRldl9hZGRfcGFjaygmcHBwb2VkX3B0eXBlKTsKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBwcG9lX25vdGlmaWVyKTsKLW91dDoKLQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7CisKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UpOwogb3V0X3VucmVnaXN0ZXJfcHBwb2VfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8pOwotCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvZV9leGl0KHZvaWQpCkBAIC0xMTIzLDcgKzEyMTYsNyBAQAogCWRldl9yZW1vdmVfcGFjaygmcHBwb2VzX3B0eXBlKTsKIAlkZXZfcmVtb3ZlX3BhY2soJnBwcG9lZF9wdHlwZSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBwcG9lX25vdGlmaWVyKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgicHBwb2UiLCBpbml0X25ldC5wcm9jX25ldCk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMgYi9kcml2ZXJzL25ldC9wcHBvbDJ0cC5jCmluZGV4IGYxYTk0NjcuLjViMDdkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2wydHAuYwpAQCAtOTAsNyArOTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KQEAgLTIwNCw2ICsyMDYsNyBAQAogCXN0cnVjdCBzb2NrCQkqc29jazsJCS8qIFBhcmVudCBzb2NrZXQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBLZWVwIGEgbGlzdCBvZiBhbGwgb3BlbgogCQkJCQkJICogcHJlcGFyZWQgc29ja2V0cyAqLworCXN0cnVjdCBuZXQJCSpwcHBvbDJ0cF9uZXQ7CS8qIHRoZSBuZXQgd2UgYmVsb25nIHRvICovCiAKIAlhdG9taWNfdAkJcmVmX2NvdW50OwogfTsKQEAgLTIyNyw4ICsyMzAsMjAgQEAKIHN0YXRpYyBhdG9taWNfdCBwcHBvbDJ0cF9zZXNzaW9uX2NvdW50Owogc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7IHBwcG9sMnRwX3htaXQgLCBOVUxMIH07CiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyBwcHBvbDJ0cF9vcHM7Ci1zdGF0aWMgTElTVF9IRUFEKHBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgcHBwb2wydHBfbmV0X2lkOworc3RydWN0IHBwcG9sMnRwX25ldCB7CisJc3RydWN0IGxpc3RfaGVhZCBwcHBvbDJ0cF90dW5uZWxfbGlzdDsKKwlyd2xvY2tfdCBwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwcHBvbDJ0cF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9sMnRwX25ldF9pZCk7Cit9CiAKIC8qIEhlbHBlcnMgdG8gb2J0YWluIHR1bm5lbC9zZXNzaW9uIGNvbnRleHRzIGZyb20gc29ja2V0cy4KICAqLwpAQCAtMzIxLDE4ICszMzYsMTkgQEAKIAogLyogTG9va3VwIGEgdHVubmVsIGJ5IGlkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICpwcHBvbDJ0cF90dW5uZWxfZmluZCh1MTYgdHVubmVsX2lkKQorc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnBwcG9sMnRwX3R1bm5lbF9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTE2IHR1bm5lbF9pZCkKIHsKLQlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWwgPSBOVUxMOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbiA9IHBwcG9sMnRwX3Blcm5ldChuZXQpOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1bm5lbCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0LCBsaXN0KSB7CisJcmVhZF9sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dW5uZWwsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHR1bm5lbC0+c3RhdHMudHVubmVsX2lkID09IHR1bm5lbF9pZCkgewotCQkJcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCQkJcmVhZF91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAkJCXJldHVybiB0dW5uZWw7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEyODcsMTAgKzEzMDMsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgcHBwb2wydHBfdHVubmVsX2ZyZWUoc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsKQogeworCXN0cnVjdCBwcHBvbDJ0cF9uZXQgKnBuID0gcHBwb2wydHBfcGVybmV0KHR1bm5lbC0+cHBwb2wydHBfbmV0KTsKKwogCS8qIFJlbW92ZSBmcm9tIHNvY2tldCBsaXN0ICovCi0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAogCWF0b21pY19kZWMoJnBwcG9sMnRwX3R1bm5lbF9jb3VudCk7CiAJa2ZyZWUodHVubmVsKTsKQEAgLTE0NDQsMTMgKzE0NjIsMTQgQEAKIC8qIEludGVybmFsIGZ1bmN0aW9uIHRvIHByZXBhcmUgYSB0dW5uZWwgKFVEUCkgc29ja2V0IHRvIGhhdmUgUFBQb1gKICAqIHNvY2tldHMgYXR0YWNoZWQgdG8gaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KGludCBmZCwgdTE2IHR1bm5lbF9pZCwKLQkJCQkJCSAgIGludCAqZXJyb3IpCitzdGF0aWMgc3RydWN0IHNvY2sgKnBwcG9sMnRwX3ByZXBhcmVfdHVubmVsX3NvY2tldChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCWludCBmZCwgdTE2IHR1bm5lbF9pZCwgaW50ICplcnJvcikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CiAJc3RydWN0IHNvY2sgKnJldCA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIHR1bm5lbCBVRFAgc29ja2V0IGZyb20gdGhlIGZkLCB3aGljaCB3YXMgb3BlbmVkIGJ5CkBAIC0xNTI0LDExICsxNTQzLDE1IEBACiAJLyogTWlzYyBpbml0ICovCiAJcndsb2NrX2luaXQoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKKwkvKiBUaGUgbmV0IHdlIGJlbG9uZyB0byAqLworCXR1bm5lbC0+cHBwb2wydHBfbmV0ID0gbmV0OworCXBuID0gcHBwb2wydHBfcGVybmV0KG5ldCk7CisKIAkvKiBBZGQgdHVubmVsIHRvIG91ciBsaXN0ICovCiAJSU5JVF9MSVNUX0hFQUQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJnR1bm5lbC0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZCgmdHVubmVsLT5saXN0LCAmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAlhdG9taWNfaW5jKCZwcHBvbDJ0cF90dW5uZWxfY291bnQpOwogCiAJLyogQnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGUgdHVubmVsIGNvbnRleHQgaXMgZGVsZXRlZApAQCAtMTYyOSw3ICsxNjUyLDggQEAKIAkgKiB0dW5uZWwgaWQuCiAJICovCiAJaWYgKChzcC0+cHBwb2wydHAuc19zZXNzaW9uID09IDApICYmIChzcC0+cHBwb2wydHAuZF9zZXNzaW9uID09IDApKSB7Ci0JCXR1bm5lbF9zb2NrID0gcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KHNwLT5wcHBvbDJ0cC5mZCwKKwkJdHVubmVsX3NvY2sgPSBwcHBvbDJ0cF9wcmVwYXJlX3R1bm5lbF9zb2NrZXQoc29ja19uZXQoc2spLAorCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLmZkLAogCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLnNfdHVubmVsLAogCQkJCQkJCSAgICAgJmVycm9yKTsKIAkJaWYgKHR1bm5lbF9zb2NrID09IE5VTEwpCkBAIC0xNjM3LDcgKzE2NjEsNyBAQAogCiAJCXR1bm5lbCA9IHR1bm5lbF9zb2NrLT5za191c2VyX2RhdGE7CiAJfSBlbHNlIHsKLQkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc3AtPnBwcG9sMnRwLnNfdHVubmVsKTsKKwkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc29ja19uZXQoc2spLCBzcC0+cHBwb2wydHAuc190dW5uZWwpOwogCiAJCS8qIEVycm9yIGlmIHdlIGNhbid0IGZpbmQgdGhlIHR1bm5lbCAqLwogCQllcnJvciA9IC1FTk9FTlQ7CkBAIC0xNzI1LDcgKzE3NDksNyBAQAogCXBvLT5jaGFuLm9wcwkgPSAmcHBwb2wydHBfY2hhbl9vcHM7CiAJcG8tPmNoYW4ubXR1CSA9IHNlc3Npb24tPm10dTsKIAotCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwllcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChzb2NrX25ldChzayksICZwby0+Y2hhbik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVuZF9wdXRfdHVuOwogCkBAIC0yMzQ3LDggKzIzNzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSB7Ci0Jc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOyAvKiBjdXJyZW50IHR1bm5lbCAqLwotCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOyAvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKKwlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CQkvKiBjdXJyZW50IHR1bm5lbCAqLworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwkvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpuZXh0X3Nlc3Npb24oc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiAqY3VycikKQEAgLTIzODQsMTcgKzI0MDksMTggQEAKIAlyZXR1cm4gc2Vzc2lvbjsKIH0KIAotc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKm5leHRfdHVubmVsKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCitzdGF0aWMgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqbmV4dF90dW5uZWwoc3RydWN0IHBwcG9sMnRwX25ldCAqcG4sCisJCQkJCSAgIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDsKIAotCXJlYWRfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfaXNfbGFzdCgmY3Vyci0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkgeworCXJlYWRfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCWlmIChsaXN0X2lzX2xhc3QoJmN1cnItPmxpc3QsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QpKSB7CiAJCWdvdG8gb3V0OwogCX0KIAl0dW5uZWwgPSBsaXN0X2VudHJ5KGN1cnItPmxpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiBvdXQ6Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gdHVubmVsOwogfQpAQCAtMjQwMiw2ICsyNDI4LDcgQEAKIHN0YXRpYyB2b2lkICpwcHBvbDJ0cF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKm9mZnMpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IFNFUV9TVEFSVF9UT0tFTjsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbjsKIAlsb2ZmX3QgcG9zID0gKm9mZnM7CiAKIAlpZiAoIXBvcykKQEAgLTI0MDksMTQgKzI0MzYsMTUgQEAKIAogCUJVR19PTihtLT5wcml2YXRlID09IE5VTEwpOwogCXBkID0gbS0+cHJpdmF0ZTsKKwlwbiA9IHBwcG9sMnRwX3Blcm5ldChzZXFfZmlsZV9uZXQobSkpOwogCiAJaWYgKHBkLT50dW5uZWwgPT0gTlVMTCkgewotCQlpZiAoIWxpc3RfZW1wdHkoJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkKLQkJCXBkLT50dW5uZWwgPSBsaXN0X2VudHJ5KHBwcG9sMnRwX3R1bm5lbF9saXN0Lm5leHQsIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwsIGxpc3QpOworCQlpZiAoIWxpc3RfZW1wdHkoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdCkpCisJCQlwZC0+dHVubmVsID0gbGlzdF9lbnRyeShwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiAJfSBlbHNlIHsKIAkJcGQtPnNlc3Npb24gPSBuZXh0X3Nlc3Npb24ocGQtPnR1bm5lbCwgcGQtPnNlc3Npb24pOwogCQlpZiAocGQtPnNlc3Npb24gPT0gTlVMTCkgewotCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBkLT50dW5uZWwpOworCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBuLCBwZC0+dHVubmVsKTsKIAkJfQogCX0KIApAQCAtMjUxNyw3ICsyNTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0gewogCS5zdGFydAkJPSBwcHBvbDJ0cF9zZXFfc3RhcnQsCiAJLm5leHQJCT0gcHBwb2wydHBfc2VxX25leHQsCiAJLnN0b3AJCT0gcHBwb2wydHBfc2VxX3N0b3AsCkBAIC0yNTMwLDUxICsyNTU4LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzZXFfZmlsZSAqbTsKLQlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJnBwcG9sMnRwX3NlcV9vcHMpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBvdXIgcHJvY19kYXRhIGZvciBhY2Nlc3MgbGF0ZXIgKi8KLQlyZXQgPSAtRU5PTUVNOwotCW0tPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAobS0+cHJpdmF0ZSA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCXBkID0gbS0+cHJpdmF0ZTsKLQlyZXQgPSAwOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2wydHBfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7CiB9CiAKLS8qIENhbGxlZCB3aGVuIC9wcm9jIGZpbGUgYWNjZXNzIGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWtmcmVlKG0tPnByaXZhdGUpOwotCW0tPnByaXZhdGUgPSBOVUxMOwotCi0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwcHBvbDJ0cF9wcm9jX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcHBvbDJ0cF9wcm9jOwotCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjA2LDYgKzI2MDEsNTcgQEAKIAkuaW9jdGwJCT0gcHBwb2wydHBfaW9jdGwKIH07CiAKK3N0YXRpYyBfX25ldF9pbml0IGludCBwcHBvbDJ0cF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwlyd2xvY2tfaW5pdCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBwbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwZGUgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJwcHBvbDJ0cCIsIFNfSVJVR08sICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCFwZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKHBuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcG9sMnRwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKworCXByb2NfbmV0X3JlbW92ZShuZXQsICJwcHBvbDJ0cCIpOworCXBuID0gbmV0X2dlbmVyaWMobmV0LCBwcHBvbDJ0cF9uZXRfaWQpOworCS8qCisJICogaWYgc29tZW9uZSBoYXMgY2FjaGVkIG91ciBuZXQgdGhlbgorCSAqIGZ1cnRoZXIgbmV0X2dlbmVyaWMgY2FsbCB3aWxsIHJldHVybiBOVUxMCisJICovCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBOVUxMKTsKKwlrZnJlZShwbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwb2wydHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcG9sMnRwX2luaXRfbmV0LAorCS5leGl0ID0gcHBwb2wydHBfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBwcHBvbDJ0cF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTI2MTcsMjMgKzI2NjMsMTcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG9sMnRwX3Byb3RvOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcHBvbDJ0cF9wcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAicHBwb2wydHAiLCAwLAotCQkJCQkgICAgICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOwotCWlmICghcHBwb2wydHBfcHJvYykgewotCQllcnIgPSAtRU5PTUVNOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvbDJ0cF9uZXRfaWQsICZwcHBvbDJ0cF9uZXRfb3BzKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCiAJcHJpbnRrKEtFUk5fSU5GTyAiUFBQb0wyVFAga2VybmVsIGRyaXZlciwgJXNcbiIsCiAJICAgICAgIFBQUE9MMlRQX0RSVl9WRVJTSU9OKTsKIAogb3V0OgogCXJldHVybiBlcnI7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0wyVFApOwotI2VuZGlmCiBvdXRfdW5yZWdpc3Rlcl9wcHBvbDJ0cF9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvbDJ0cF9za19wcm90byk7CiAJZ290byBvdXQ7CkBAIC0yNjQyLDEwICsyNjgyLDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvbDJ0cF9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PTDJUUCk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJwcHBvbDJ0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgogCXByb3RvX3VucmVnaXN0ZXIoJnBwcG9sMnRwX3NrX3Byb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggMDNhZWNjOS4uNGY2ZDMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC0xMDgsOSArMTA4LDYgQEAKIHsKIAlpbnQgcmMgPSAtRVBST1RPVFlQRTsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQogCWlmIChwcm90b2NvbCA8IDAgfHwgcHJvdG9jb2wgPiBQWF9NQVhfUFJPVE8pCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKaW5kZXggNGI1NjRlZC4uMzA5MDBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgdG9wIG9mIGJ1ZmZlciAqLwogCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBWTEFOX0hMRU4sIDIgKiBFVEhfQUxFTik7CiAKLQl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSk7CiAJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHRhZyk7CiAKIAlyZXR1cm4gc2tiOwpAQCAtMTQwMyw2ICsxNDAzLDE5IEBACiAJCWF0b21pY19kZWMoJmNhcmQtPnR4X3RpbWVvdXRfdGFza19jb3VudGVyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZWxpY19uZXRkZXZpY2Vfb3BzID0geworCS5uZG9fb3BlbiA9IGdlbGljX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IGdlbGljX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogLyoqCiAgKiBnZWxpY19ldGhlcl9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQxMiwyMSArMTQyNSwxMiBAQAogc3RhdGljIHZvaWQgZ2VsaWNfZXRoZXJfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewotCW5ldGRldi0+b3BlbiA9ICZnZWxpY19uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfbmV0X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZ2VsaWNfbmV0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZ2VsaWNfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmZ2VsaWNfbmV0X2NoYW5nZV9tdHU7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmZ2VsaWNfbmV0X3R4X3RpbWVvdXQ7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEdFTElDX05FVF9XQVRDSERPR19USU1FT1VUOwogCS8qIE5BUEkgKi8KIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsIG5hcGksCiAJCSAgICAgICBnZWxpY19uZXRfcG9sbCwgR0VMSUNfTkVUX05BUElfV0VJR0hUKTsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmdlbGljX2V0aGVyX2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZWxpY19uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmdlbGljX25ldGRldmljZV9vcHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCAzMzVkYTQ4My4uYTVhYzJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTI2OTcsNiArMjY5NywxOSBAQAogCiAvKiAtLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdlbGljX3dsX25ldGRldmljZV9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2VsaWNfd2xfb3BlbiwKKwkubmRvX3N0b3AgPSBnZWxpY193bF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCkBAIC0yNzExLDIxICsyNzI0LDEyIEBACiAJc3RydWN0IGdlbGljX3dsX2luZm8gKndsOwogCXdsID0gcG9ydF93bChuZXRkZXZfcHJpdihuZXRkZXYpKTsKIAlCVUdfT04oIXdsKTsKLQluZXRkZXYtPm9wZW4gPSAmZ2VsaWNfd2xfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfd2xfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZnZWxpY19uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZnZWxpY19uZXRfc2V0X211bHRpOwotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZnZWxpY19uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7Ci0JbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwotCS8qIHR4IHdhdGNoZG9nICovCi0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJmdlbGljX25ldF90eF90aW1lb3V0OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBHRUxJQ19ORVRfV0FUQ0hET0dfVElNRU9VVDsKIAogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZ2VsaWNfd2xfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IGdlbGljX25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmZ2VsaWNfd2xfbmV0ZGV2aWNlX29wczsKKwluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7CisJbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDE4OWVjMjkuLjhiMjgyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAKIAlpZiAodHhfY2xlYW5lZCArIHJ4X2NsZWFuZWQgIT0gYnVkZ2V0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfdXBkYXRlX3NtYWxsX2J1ZnFfcHJvZF9pbmRleChxZGV2KTsKIAkJcWxfdXBkYXRlX2xyZ19idWZxX3Byb2RfaW5kZXgocWRldik7CiAJCXdyaXRlbChxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXgsCkBAIC0yMzUxLDggKzIzNTEsOCBAQAogCQlzcGluX3VubG9jaygmcWRldi0+YWRhcHRlcl9sb2NrKTsKIAl9IGVsc2UgaWYgKHZhbHVlICYgSVNQX0lNUl9ESVNBQkxFX0NNUExfSU5UKSB7CiAJCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZxZGV2LT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcWRldi0+bmFwaSkpKSB7CisJCQlfX25hcGlfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCBhZmY5YzVmLi5mY2IxNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtMjgsOCArMjgsOCBAQAogICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUUxHRV9WRU5ET1JfSUQgICAgMHgxMDc3Ci0jZGVmaW5lIFFMR0VfREVWSUNFX0lEICAgIDB4ODAxMgotCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMTIJMHg4MDEyCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMDAJMHg4MDAwCiAjZGVmaW5lIE1BWF9DUFVTIDgKICNkZWZpbmUgTUFYX1RYX1JJTkdTIE1BWF9DUFVTCiAjZGVmaW5lIE1BWF9SWF9SSU5HUyAoKE1BWF9DUFVTICogMikgKyAxKQpAQCAtMTY0LDcgKzE2NCw3IEBACiAJQ1NSX1JQID0gKDEgPDwgMTApLAogCUNTUl9DTURfUEFSTV9TSElGVCA9IDIyLAogCUNTUl9DTURfTk9QID0gMHgwMDAwMDAwMCwKLQlDU1JfQ01EX1NFVF9SU1QgPSAweDEwMDAwMDAsCisJQ1NSX0NNRF9TRVRfUlNUID0gMHgxMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9SU1QgPSAweDIwMDAwMDAwLAogCUNTUl9DTURfU0VUX1BBVVNFID0gMHgzMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9QQVVTRSA9IDB4NDAwMDAwMDAsCkBAIC00MjQsNyArNDI0LDcgQEAKIAlSWF9TWU1CT0xfRVJSID0gMHgwMDAwMDM3MCwKIAlSWF9NQUNfRVJSID0gMHgwMDAwMDM3OCwKIAlSWF9DVExfUEtUUyA9IDB4MDAwMDAzODAsCi0JUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODQsCisJUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODgsCiAJUlhfNjRfUEtUUyA9IDB4MDAwMDAzOTAsCiAJUlhfNjVfVE9fMTI3X1BLVFMgPSAweDAwMDAwMzk4LAogCVJYXzEyOF8yNTVfUEtUUyA9IDB4MDAwMDAzYTAsCkBAIC03MzMsNiArNzMzLDExIEBACiAJQUVOX0xJTktfRE9XTiA9IDB4MDAwMDgwMTIsCiAJQUVOX0lEQ19DTVBMVCA9IDB4MDAwMDgxMDAsCiAJQUVOX0lEQ19SRVEgPSAweDAwMDA4MTAxLAorCUFFTl9JRENfRVhUID0gMHgwMDAwODEwMiwKKwlBRU5fRENCWF9DSEcgPSAweDAwMDA4MTEwLAorCUFFTl9BRU5fTE9TVCA9IDB4MDAwMDgxMjAsCisJQUVOX0FFTl9TRlBfSU4gPSAweDAwMDA4MTMwLAorCUFFTl9BRU5fU0ZQX09VVCA9IDB4MDAwMDgxMzEsCiAJQUVOX0ZXX0lOSVRfRE9ORSA9IDB4MDAwMDg0MDAsCiAJQUVOX0ZXX0lOSVRfRkFJTCA9IDB4MDAwMDg0MDEsCiAKQEAgLTc0Miw0MCArNzQ3LDQ4IEBACiAJTUJfQ01EX01CX1RFU1QgPSAweDAwMDAwMDA2LAogCU1CX0NNRF9DU1VNX1RFU1QgPSAweDAwMDAwMDA3LAkvKiBWZXJpZnkgQ2hlY2tzdW0gKi8KIAlNQl9DTURfQUJPVVRfRlcgPSAweDAwMDAwMDA4LAorCU1CX0NNRF9DT1BZX1JJU0NfUkFNID0gMHgwMDAwMDAwYSwKIAlNQl9DTURfTE9BRF9SSVNDX1JBTSA9IDB4MDAwMDAwMGIsCiAJTUJfQ01EX0RVTVBfUklTQ19SQU0gPSAweDAwMDAwMDBjLAogCU1CX0NNRF9XUklURV9SQU0gPSAweDAwMDAwMDBkLAorCU1CX0NNRF9JTklUX1JJU0NfUkFNID0gMHgwMDAwMDAwZSwKIAlNQl9DTURfUkVBRF9SQU0gPSAweDAwMDAwMDBmLAogCU1CX0NNRF9TVE9QX0ZXID0gMHgwMDAwMDAxNCwKIAlNQl9DTURfTUFLRV9TWVNfRVJSID0gMHgwMDAwMDAyYSwKKwlNQl9DTURfV1JJVEVfU0ZQID0gMHgwMDAwMDAzMCwKKwlNQl9DTURfUkVBRF9TRlAgPSAweDAwMDAwMDMxLAogCU1CX0NNRF9JTklUX0ZXID0gMHgwMDAwMDA2MCwKLQlNQl9DTURfR0VUX0lOSVRfQ0IgPSAweDAwMDAwMDYxLAorCU1CX0NNRF9HRVRfSUZDQiA9IDB4MDAwMDAwNjEsCiAJTUJfQ01EX0dFVF9GV19TVEFURSA9IDB4MDAwMDAwNjksCiAJTUJfQ01EX0lEQ19SRVEgPSAweDAwMDAwMTAwLAkvKiBJbnRlci1Ecml2ZXIgQ29tbXVuaWNhdGlvbiAqLwogCU1CX0NNRF9JRENfQUNLID0gMHgwMDAwMDEwMSwJLyogSW50ZXItRHJpdmVyIENvbW11bmljYXRpb24gKi8KIAlNQl9DTURfU0VUX1dPTF9NT0RFID0gMHgwMDAwMDExMCwJLyogV2FrZSBPbiBMYW4gKi8KLQlNQl9XT0xfRElTQUJMRSA9IDB4MDAwMDAwMDAsCi0JTUJfV09MX01BR0lDX1BLVCA9IDB4MDAwMDAwMDEsCi0JTUJfV09MX0ZMVFIgPSAweDAwMDAwMDAyLAotCU1CX1dPTF9VQ0FTVCA9IDB4MDAwMDAwMDQsCi0JTUJfV09MX01DQVNUID0gMHgwMDAwMDAwOCwKLQlNQl9XT0xfQkNBU1QgPSAweDAwMDAwMDEwLAotCU1CX1dPTF9MSU5LX1VQID0gMHgwMDAwMDAyMCwKLQlNQl9XT0xfTElOS19ET1dOID0gMHgwMDAwMDA0MCwKKwlNQl9XT0xfRElTQUJMRSA9IDAsCisJTUJfV09MX01BR0lDX1BLVCA9ICgxIDw8IDEpLAorCU1CX1dPTF9GTFRSID0gKDEgPDwgMiksCisJTUJfV09MX1VDQVNUID0gKDEgPDwgMyksCisJTUJfV09MX01DQVNUID0gKDEgPDwgNCksCisJTUJfV09MX0JDQVNUID0gKDEgPDwgNSksCisJTUJfV09MX0xJTktfVVAgPSAoMSA8PCA2KSwKKwlNQl9XT0xfTElOS19ET1dOID0gKDEgPDwgNyksCiAJTUJfQ01EX1NFVF9XT0xfRkxUUiA9IDB4MDAwMDAxMTEsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLwotCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLworCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsIC8qIFdha2UgT24gTGFuIEZpbHRlciAqLwogCU1CX0NNRF9TRVRfV09MX01BR0lDID0gMHgwMDAwMDExMywJLyogV2FrZSBPbiBMYW4gTWFnaWMgUGFja2V0ICovCi0JTUJfQ01EX0NMRUFSX1dPTF9NQUdJQyA9IDB4MDAwMDAxMTQsCS8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9DTEVBUl9XT0xfTUFHSUMgPSAweDAwMDAwMTE0LC8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9TRVRfV09MX0lNTUVEID0gMHgwMDAwMDExNSwKIAlNQl9DTURfUE9SVF9SRVNFVCA9IDB4MDAwMDAxMjAsCiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCi0JTUJfQ01EX1NFVF9BU0lDX1ZPTFRTID0gMHgwMDAwMDEzMCwKLQlNQl9DTURfR0VUX1NOU19EQVRBID0gMHgwMDAwMDEzMSwJLyogVGVtcCBhbmQgVm9sdCBTZW5zZSBkYXRhLiAqLworCU1CX0NNRF9HRVRfTElOS19TVFMgPSAweDAwMDAwMTI0LAogCiAJLyogTWFpbGJveCBDb21tYW5kIFN0YXR1cy4gKi8KIAlNQl9DTURfU1RTX0dPT0QgPSAweDAwMDA0MDAwLAkvKiBTdWNjZXNzLiAqLwogCU1CX0NNRF9TVFNfSU5UUk1EVCA9IDB4MDAwMDEwMDAsCS8qIEludGVybWVkaWF0ZSBDb21wbGV0ZS4gKi8KLQlNQl9DTURfU1RTX0VSUiA9IDB4MDAwMDQwMDUsCS8qIEVycm9yLiAqLworCU1CX0NNRF9TVFNfSU5WTERfQ01EID0gMHgwMDAwNDAwMSwJLyogSW52YWxpZC4gKi8KKwlNQl9DTURfU1RTX1hGQ19FUlIgPSAweDAwMDA0MDAyLAkvKiBJbnRlcmZhY2UgRXJyb3IuICovCisJTUJfQ01EX1NUU19DU1VNX0VSUiA9IDB4MDAwMDQwMDMsCS8qIENzdW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19FUlIgPSAweDAwMDA0MDA1LAkvKiBTeXN0ZW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19QQVJBTV9FUlIgPSAweDAwMDA0MDA2LAkvKiBQYXJhbWV0ZXIgRXJyb3IuICovCiB9OwogCiBzdHJ1Y3QgbWJveF9wYXJhbXMgewpAQCAtNzg1LDcgKzc5OCw3IEBACiAJaW50IG91dF9jb3VudDsKIH07CiAKLXN0cnVjdCBmbGFzaF9wYXJhbXMgeworc3RydWN0IGZsYXNoX3BhcmFtc184MDEyIHsKIAl1OCBkZXZfaWRfc3RyWzRdOwogCV9fbGUxNiBzaXplOwogCV9fbGUxNiBjc3VtOwpAQCAtNzk1LDYgKzgwOCw0MyBAQAogCV9fbGUxNiByZXM7CiB9OwogCisvKiA4MDAwIGRldmljZSdzIGZsYXNoIGlzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICogYXQgYSBkaWZmZXJlbnQgb2Zmc2V0IGluIGZsYXNoLgorICovCisjZGVmaW5lIEZVTkMwX0ZMQVNIX09GRlNFVCAweDE0MDIwMAorI2RlZmluZSBGVU5DMV9GTEFTSF9PRkZTRVQgMHgxNDA2MDAKKworLyogRmxhc2ggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgeworCXU4IGRldl9pZF9zdHJbNF07CS8qICI4MDAwIiAqLworCV9fbGUxNiB2ZXI7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGNzdW07CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMTYgdG90YWxfc2l6ZTsKKwlfX2xlMTYgZW50cnlfY291bnQ7CisJdTggZGF0YV90eXBlMDsKKwl1OCBkYXRhX3NpemUwOworCXU4IG1hY19hZGRyWzZdOworCXU4IGRhdGFfdHlwZTE7CisJdTggZGF0YV9zaXplMTsKKwl1OCBtYWNfYWRkcjFbNl07CisJdTggZGF0YV90eXBlMjsKKwl1OCBkYXRhX3NpemUyOworCV9fbGUxNiB2bGFuX2lkOworCXU4IGRhdGFfdHlwZTM7CisJdTggZGF0YV9zaXplMzsKKwlfX2xlMTYgbGFzdDsKKwl1OCByZXNlcnZlZDFbNDY0XTsKKwlfX2xlMTYJc3Vic3lzX3Zlbl9pZDsKKwlfX2xlMTYJc3Vic3lzX2Rldl9pZDsKKwl1OCByZXNlcnZlZDJbNF07Cit9OworCit1bmlvbiBmbGFzaF9wYXJhbXMgeworCXN0cnVjdCBmbGFzaF9wYXJhbXNfODAxMiBmbGFzaF9wYXJhbXNfODAxMjsKKwlzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgZmxhc2hfcGFyYW1zXzgwMDA7Cit9OwogCiAvKgogICogZG9vcmJlbGwgc3BhY2UgZm9yIHRoZSByeCByaW5nIGNvbnRleHQKQEAgLTk2OCw2ICsxMDE4LDcgQEAKIAlfX2xlMTYgdmxhbl9pZDsJCS8qIDEyIGJpdHMgKi8KICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX0MJMHgxMDAwCS8qIFZMQU4gQ0ZJIGJpdCAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfQ09TX1NISUZUCTEyCS8qIGNsYXNzIG9mIHNlcnZpY2UgdmFsdWUgKi8KKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSwkweDBmZmZmCiAKIAlfX2xlMTYgcmVzZXJ2ZWQxOwogCV9fbGUzMiByZXNlcnZlZDJbNl07CkBAIC0xMDMzLDYgKzEwODQsNyBAQAogI2RlZmluZSBRX0xFTl9DUFBfMTYJMHgwMDAxCiAjZGVmaW5lIFFfTEVOX0NQUF8zMgkweDAwMDIKICNkZWZpbmUgUV9MRU5fQ1BQXzY0CTB4MDAwMworI2RlZmluZSBRX0xFTl9DUFBfNTEyCTB4MDAwNgogCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUV9QUklfU0hJRlQJMQogI2RlZmluZSBRX0ZMQUdTX0xDCTB4MTAwMApAQCAtMTMxNCwyNyArMTM2Niw0OSBAQAogCVFMX0RNQTY0ID0gKDEgPDwgNSksCiAJUUxfUFJPTUlTQ1VPVVMgPSAoMSA8PCA2KSwKIAlRTF9BTExNVUxUSSA9ICgxIDw8IDcpLAorCVFMX1BPUlRfQ0ZHID0gKDEgPDwgOCksCisJUUxfQ0FNX1JUX1NFVCA9ICgxIDw8IDkpLAogfTsKIAogLyogbGlua19zdGF0dXMgYml0IGRlZmluaXRpb25zICovCiBlbnVtIHsKLQlMT09QQkFDS19NQVNLID0gMHgwMDAwMDcwMCwKLQlMT09QQkFDS19QQ1MgPSAweDAwMDAwMTAwLAotCUxPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCi0JTE9PUEJBQ0tfRVhUID0gMHgwMDAwMDMwMCwKLQlQQVVTRV9NQVNLID0gMHgwMDAwMDBjMCwKLQlQQVVTRV9TVEQgPSAweDAwMDAwMDQwLAotCVBBVVNFX1BSSSA9IDB4MDAwMDAwODAsCi0JU1BFRURfTUFTSyA9IDB4MDAwMDAwMzgsCi0JU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAotCVNQRUVEXzFHYiA9IDB4MDAwMDAwMDgsCi0JU1BFRURfMTBHYiA9IDB4MDAwMDAwMTAsCi0JTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAotCUxJTktfVFlQRV9YRkkgPSAweDAwMDAwMDAxLAotCUxJTktfVFlQRV9YQVVJID0gMHgwMDAwMDAwMiwKLQlMSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKLQlMSU5LX1RZUEVfWEFVSV9CUCA9IDB4MDAwMDAwMDQsCi0JTElOS19UWVBFXzEwR0JBU0VUID0gMHgwMDAwMDAwNSwKKwlTVFNfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDA3MDAsCisJU1RTX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAxMDAsCisJU1RTX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCisJU1RTX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAzMDAsCisJU1RTX1BBVVNFX01BU0sgPSAweDAwMDAwMGMwLAorCVNUU19QQVVTRV9TVEQgPSAweDAwMDAwMDQwLAorCVNUU19QQVVTRV9QUkkgPSAweDAwMDAwMDgwLAorCVNUU19TUEVFRF9NQVNLID0gMHgwMDAwMDAzOCwKKwlTVFNfU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAorCVNUU19TUEVFRF8xR2IgPSAweDAwMDAwMDA4LAorCVNUU19TUEVFRF8xMEdiID0gMHgwMDAwMDAxMCwKKwlTVFNfTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAorCVNUU19MSU5LX1RZUEVfWEZJID0gMHgwMDAwMDAwMSwKKwlTVFNfTElOS19UWVBFX1hBVUkgPSAweDAwMDAwMDAyLAorCVNUU19MSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKKwlTVFNfTElOS19UWVBFX1hBVUlfQlAgPSAweDAwMDAwMDA0LAorCVNUU19MSU5LX1RZUEVfMTBHQkFTRVQgPSAweDAwMDAwMDA1LAorfTsKKworLyogbGlua19jb25maWcgYml0IGRlZmluaXRpb25zICovCitlbnVtIHsKKwlDRkdfSlVNQk9fRlJBTUVfU0laRSA9IDB4MDAwMTAwMDAsCisJQ0ZHX1BBVVNFX01BU0sgPSAweDAwMDAwMDYwLAorCUNGR19QQVVTRV9TVEQgPSAweDAwMDAwMDIwLAorCUNGR19QQVVTRV9QUkkgPSAweDAwMDAwMDQwLAorCUNGR19EQ0JYID0gMHgwMDAwMDAxMCwKKwlDRkdfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDAwMDcsCisJQ0ZHX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAwMDIsCisJQ0ZHX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAwMDQsCisJQ0ZHX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAwMDYsCisJQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkUgPSAweDAwMDAyNTgwLAorfTsKKworc3RydWN0IG5pY19vcGVyYXRpb25zIHsKKworCWludCAoKmdldF9mbGFzaCkgKHN0cnVjdCBxbF9hZGFwdGVyICopOworCWludCAoKnBvcnRfaW5pdGlhbGl6ZSkgKHN0cnVjdCBxbF9hZGFwdGVyICopOwogfTsKIAogLyoKQEAgLTEzNzcsNiArMTQ1MSw4IEBACiAKIAl1MzIgbWFpbGJveF9pbjsKIAl1MzIgbWFpbGJveF9vdXQ7CisJc3RydWN0IG1ib3hfcGFyYW1zIGlkY19tYmM7CisJc3RydWN0IG11dGV4CW1waV9tdXRleDsKIAogCWludCB0eF9yaW5nX3NpemU7CiAJaW50IHJ4X3Jpbmdfc2l6ZTsKQEAgLTE0MTIsOCArMTQ4OCwxMCBAQAogCXUzMiBwb3J0X2xpbmtfdXA7CiAJdTMyIHBvcnRfaW5pdDsKIAl1MzIgbGlua19zdGF0dXM7CisJdTMyIGxpbmtfY29uZmlnOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKIAotCXN0cnVjdCBmbGFzaF9wYXJhbXMgZmxhc2g7CisJdW5pb24gZmxhc2hfcGFyYW1zIGZsYXNoOwogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnFfd29ya3F1ZXVlOwpAQCAtMTQyMSw2ICsxNDk5LDExIEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc2ljX3Jlc2V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3BvcnRfY2ZnX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfaWRjX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gaWRlX2NvbXBsZXRpb247CisJc3RydWN0IG5pY19vcGVyYXRpb25zICpuaWNfb3BzOworCXUxNiBkZXZpY2VfaWQ7CiB9OwogCiAvKgpAQCAtMTQ5Myw2ICsxNTc2LDEwIEBACiB1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CiB2b2lkIHFsX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgcWxfcmVhZF94Z21hY19yZWc2NChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTY0ICpkYXRhKTsKK3ZvaWQgcWxfbXBpX2lkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiAKICNpZiAxCiAjZGVmaW5lIFFMX0FMTF9EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggMzc5Yjg5NS4uNDBhNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtODMsNiArODMsMTAgQEAKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWVbM107CisKKwlpID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKQEAgLTExMSwxMiArMTE1LDE2IEBACiAJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGksIHZhbHVlWzFdLCB2YWx1ZVswXSk7CiAJCX0KIAl9CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiB9CiAKIHZvaWQgcWxfZHVtcF9yb3V0aW5nX2VudHJpZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IGk7CiAJdTMyIHZhbHVlOworCWkgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXZhbHVlID0gMDsKIAkJaWYgKHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpKSB7CkBAIC0xMzEsNiArMTM5LDcgQEAKIAkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwgdmFsdWUpOwogCQl9CiAJfQorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIH0KIAogdm9pZCBxbF9kdW1wX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCA5ZDkyMmUyLi5hNTAwNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGw7CiAJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQlpZiAoKHFkZXYtPmxpbmtfc3RhdHVzICYgTElOS19UWVBFX01BU0spID09IExJTktfVFlQRV8xMEdCQVNFVCkgeworCWlmICgocWRldi0+bGlua19zdGF0dXMgJiBTVFNfTElOS19UWVBFX01BU0spID09CisJCQkJU1RTX0xJTktfVFlQRV8xMEdCQVNFVCkgewogCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BdXRvbmVnKTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDkxMTkxZjcuLjE3MGQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNTgsOCArNTgsOCBAQAogICAgIE5FVElGX01TR19JRlVQIHwKICAgICBORVRJRl9NU0dfUlhfRVJSIHwKICAgICBORVRJRl9NU0dfVFhfRVJSIHwKLSAgICBORVRJRl9NU0dfVFhfUVVFVUVEIHwKLSAgICBORVRJRl9NU0dfSU5UUiB8IE5FVElGX01TR19UWF9ET05FIHwgTkVUSUZfTVNHX1JYX1NUQVRVUyB8CisvKiAgTkVUSUZfTVNHX1RYX1FVRVVFRCB8ICovCisvKiAgTkVUSUZfTVNHX0lOVFIgfCBORVRJRl9NU0dfVFhfRE9ORSB8IE5FVElGX01TR19SWF9TVEFUVVMgfCAqLwogLyogTkVUSUZfTVNHX1BLVERBVEEgfCAqLwogICAgIE5FVElGX01TR19IVyB8IE5FVElGX01TR19XT0wgfCAwOwogCkBAIC03NSw3ICs3NSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycV90eXBlLCAiMCA9IE1TSS1YLCAxID0gTVNJLCAyID0gTGVnYWN5LiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWxnZV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KIH07CkBAIC0yNDcsOSArMjQ4LDYgQEAKIAl1MzIgb2Zmc2V0ID0gMDsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUM6CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CkBAIC0zMDgsNyArMzA2LDYgQEAKIAkJc3RhdHVzID0gLUVQRVJNOwogCX0KIGV4aXQ6Ci0JcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIxLDkgKzMxOCw2IEBACiAJdTMyIG9mZnNldCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX01BQzoKIAljYXNlIE1BQ19BRERSX1RZUEVfQ0FNX01BQzoKQEAgLTMzNCw3ICszMjgsNyBAQAogCQkJICAgIChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKIAkJCSAgICAoYWRkcls1XSk7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIkFkZGluZyAlcyBhZGRyZXNzICVwTSIKIAkJCQkiIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAogCQkJCSgodHlwZSA9PQpAQCAtNDE1LDcgKzQwOSw2IEBACiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQyNiwxMCArNDE5LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXhpdDsKLQogCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBSVF9JRFgsIFJUX0lEWF9NVywgMCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBleGl0OwpAQCAtNDQxLDcgKzQzMCw2IEBACiAJCWdvdG8gZXhpdDsKIAkqdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgUlRfREFUQSk7CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00NTMsMTMgKzQ0MSw5IEBACiBzdGF0aWMgaW50IHFsX3NldF9yb3V0aW5nX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGluZGV4LCB1MzIgbWFzaywKIAkJCSAgICAgIGludCBlbmFibGUpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsgLyogUmV0dXJuIGVycm9yIGlmIG5vIG1hc2sgbWF0Y2guICovCiAJdTMyIHZhbHVlID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0KIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAogCQkiJXMgJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAogCQkoZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKQEAgLTU1NSw3ICs1MzksNiBAQAogCQlxbF93cml0ZTMyKHFkZXYsIFJUX0RBVEEsIGVuYWJsZSA/IG1hc2sgOiAwKTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MDQsNyArNTg3LDYgQEAKIHN0YXRpYyB1MzIgcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCiB7CiAJdTMyIHZhciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHg7CiAKIAkvKiBIVyBkaXNhYmxlcyBmb3IgdXMgaWYgd2UncmUgTVNJWCBtdWx0aSBpbnRlcnJ1cHRzIGFuZApAQCAtNjE0LDE0ICs1OTYsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAljdHggPSBxZGV2LT5pbnRyX2NvbnRleHQgKyBpbnRyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAoIWF0b21pY19yZWFkKCZjdHgtPmlycV9jbnQpKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwKIAkJY3R4LT5pbnRyX2Rpc19tYXNrKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CiAJfQogCWF0b21pY19pbmMoJmN0eC0+aXJxX2NudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlyZXR1cm4gdmFyOwogfQogCkBAIC02NDEsNiArNjIzLDI4IEBACiAKIH0KIAorc3RhdGljIGludCBxbF92YWxpZGF0ZV9mbGFzaChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHNpemUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgc3RhdHVzLCBpOworCXUxNiBjc3VtID0gMDsKKwlfX2xlMTYgKmZsYXNoID0gKF9fbGUxNiAqKSZxZGV2LT5mbGFzaDsKKworCXN0YXR1cyA9IHN0cm5jbXAoKGNoYXIgKikmcWRldi0+Zmxhc2gsIHN0ciwgNCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgZmxhc2ggc2lnbmF0dXJlLlxuIik7CisJCXJldHVybglzdGF0dXM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY3N1bSArPSBsZTE2X3RvX2NwdSgqZmxhc2grKyk7CisKKwlpZiAoY3N1bSkKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKKworCXJldHVybiBjc3VtOworfQorCiBzdGF0aWMgaW50IHFsX3JlYWRfZmxhc2hfd29yZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgaW50IG9mZnNldCwgX19sZTMyICpkYXRhKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtNjY1LDIzICs2NjksNzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHFsX2dldF9mbGFzaF9wYXJhbXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCitzdGF0aWMgaW50IHFsX2dldF84MDAwX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwl1MzIgaSwgc2l6ZTsKKwlpbnQgc3RhdHVzOworCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CisJdTMyIG9mZnNldDsKKworCS8qIEdldCBmbGFzaCBvZmZzZXQgZm9yIGZ1bmN0aW9uIGFuZCBhZGp1c3QKKwkgKiBmb3IgZHdvcmQgYWNjZXNzLgorCSAqLworCWlmICghcWRldi0+ZnVuYykKKwkJb2Zmc2V0ID0gRlVOQzBfRkxBU0hfT0ZGU0VUIC8gc2l6ZW9mKHUzMik7CisJZWxzZQorCQlvZmZzZXQgPSBGVU5DMV9GTEFTSF9PRkZTRVQgLyBzaXplb2YodTMyKTsKKworCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MzIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHArKykgeworCQlzdGF0dXMgPSBxbF9yZWFkX2ZsYXNoX3dvcmQocWRldiwgaStvZmZzZXQsIHApOworCQlpZiAoc3RhdHVzKSB7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMDAiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDAwLm1hY19hZGRyKSkgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShxZGV2LT5uZGV2LT5kZXZfYWRkciwKKwkJcWRldi0+Zmxhc2guZmxhc2hfcGFyYW1zXzgwMDAubWFjX2FkZHIsCisJCXFkZXYtPm5kZXYtPmFkZHJfbGVuKTsKKworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9GTEFTSF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX2dldF84MDEyX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlpbnQgaTsKIAlpbnQgc3RhdHVzOwogCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CiAJdTMyIG9mZnNldCA9IDA7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MzIpOwogCiAJLyogU2Vjb25kIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBmb2xsb3cgdGhlIGZpcnN0CiAJICogZnVuY3Rpb24ncy4KIAkgKi8KIAlpZiAocWRldi0+ZnVuYykKLQkJb2Zmc2V0ID0gc2l6ZW9mKHFkZXYtPmZsYXNoKSAvIHNpemVvZih1MzIpOworCQlvZmZzZXQgPSBzaXplOwogCiAJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fRkxBU0hfTUFTSykpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihxZGV2LT5mbGFzaCkgLyBzaXplb2YodTMyKTsgaSsrLCBwKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CkBAIC02ODksNiArNzQ1LDI1IEBACiAJCX0KIAogCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMTIiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDEyLm1hY19hZGRyKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KHFkZXYtPm5kZXYtPmRldl9hZGRyLAorCQlxZGV2LT5mbGFzaC5mbGFzaF9wYXJhbXNfODAxMi5tYWNfYWRkciwKKwkJcWRldi0+bmRldi0+YWRkcl9sZW4pOworCiBleGl0OgogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spOwogCXJldHVybiBzdGF0dXM7CkBAIC03NTksMTMgKzgzNCwyNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgcWxfODAwMF9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSBxbF9tYl9nZXRfZndfc3RhdGUocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCS8qIFdha2UgdXAgYSB3b3JrZXIgdG8gZ2V0L3NldCB0aGUgVFgvUlggZnJhbWUgc2l6ZXMuICovCisJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyogVGFrZSB0aGUgTUFDIENvcmUgb3V0IG9mIHJlc2V0LgogICogRW5hYmxlIHN0YXRpc3RpY3MgY291bnRpbmcuCiAgKiBUYWtlIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlciBvdXQgb2YgcmVzZXQuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGRvbmUgaW4gdGhlIE1QSSBmaXJtd2FyZSBhdCBhCiAgKiBsYXRlciBkYXRlLgogICovCi1zdGF0aWMgaW50IHFsX3BvcnRfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3N0YXRpYyBpbnQgcWxfODAxMl9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGRhdGE7CkBAIC04ODEsNyArOTY4LDggQEAKIC8qIFByb2Nlc3MgKHJlZmlsbCkgYSBsYXJnZSBidWZmZXIgcXVldWUuICovCiBzdGF0aWMgdm9pZCBxbF91cGRhdGVfbGJxKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKLQlpbnQgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgc3RhcnRfaWR4ID0gY2xlYW5faWR4OwogCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYzsKIAl1NjQgbWFwOwogCWludCBpOwpAQCAtOTI4LDE5ICsxMDE2LDIzIEBACiAJCXJ4X3JpbmctPmxicV9wcm9kX2lkeCArPSAxNjsKIAkJaWYgKHJ4X3JpbmctPmxicV9wcm9kX2lkeCA9PSByeF9yaW5nLT5sYnFfbGVuKQogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKKwkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OworCX0KKworCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7CiAJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKIAkJCSJsYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKIAkJcWxfd3JpdGVfZGJfcmVnKHJ4X3JpbmctPmxicV9wcm9kX2lkeCwKIAkJCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnKTsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OwogCX0KIH0KIAogLyogUHJvY2VzcyAocmVmaWxsKSBhIHNtYWxsIGJ1ZmZlciBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIHFsX3VwZGF0ZV9zYnEoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWludCBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBzdGFydF9pZHggPSBjbGVhbl9pZHg7CiAJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjOwogCXU2NCBtYXA7CiAJaW50IGk7CkBAIC05OTAsMTMgKzEwODIsMTUgQEAKIAkJcnhfcmluZy0+c2JxX3Byb2RfaWR4ICs9IDE2OwogCQlpZiAocnhfcmluZy0+c2JxX3Byb2RfaWR4ID09IHJ4X3JpbmctPnNicV9sZW4pCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSAwOworCQlyeF9yaW5nLT5zYnFfZnJlZV9jbnQgLT0gMTY7CisJfQorCisJaWYgKHN0YXJ0X2lkeCAhPSBjbGVhbl9pZHgpIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAogCQkJInNicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwogCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAogCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwotCi0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCAtPSAxNjsKIAl9CiB9CiAKQEAgLTE0MTIsNiArMTUwNiw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiB2bGFuX2lkID0gKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKKwkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spCiAKIAlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CiAKQEAgLTE0NjMsMTggKzE1NTksMjYgQEAKIAkJCX0KIAkJfQogCX0KKwogCXFkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlxZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQlpZiAocWRldi0+dmxncnAgJiYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiUGFzc2luZyBhIFZMQU4gcGFja2V0IHVwc3RyZWFtLlxuIik7Ci0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHFkZXYtPnZsZ3JwLAotCQkJCWxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpKTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwKKwkJcnhfcmluZy0+Y3FfaWQgLSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJgorCQkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSAmJgorCQkJKHZsYW5faWQgIT0gMCkpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwKKwkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJQYXNzaW5nIGEgbm9ybWFsIHBhY2tldCB1cHN0cmVhbS5cbiIpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQlpZiAocWRldi0+dmxncnAgJiYKKwkJCShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVikgJiYKKwkJCSh2bGFuX2lkICE9IDApKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KIH0KIApAQCAtMTUyMSwxNCArMTYyNSwxMiBAQAogLyogRmlyZSB1cCBhIGhhbmRsZXIgdG8gcmVzZXQgdGhlIE1QSSBwcm9jZXNzb3IuICovCiB2b2lkIHFsX3F1ZXVlX2Z3X2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9yZXNldF93b3JrLCAwKTsKIH0KIAogdm9pZCBxbF9xdWV1ZV9hc2ljX2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCS8qIENsZWFyIGFkYXB0ZXIgdXAgYml0IHRvIHNpZ25hbCB0aGUgcmVjb3ZlcnkKQEAgLTE1ODMsNiArMTY4NSw3IEBACiAJc3RydWN0IG9iX21hY19pb2NiX3JzcCAqbmV0X3JzcCA9IE5VTEw7CiAJaW50IGNvdW50ID0gMDsKIAorCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwogCS8qIFdoaWxlIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLiAqLwogCXdoaWxlIChwcm9kICE9IHJ4X3JpbmctPmNuc21yX2lkeCkgewogCkBAIC0xNjA4LDE1ICsxNzExLDE2IEBACiAJCXByb2QgPSBxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpOwogCX0KIAlxbF93cml0ZV9jcV9pZHgocnhfcmluZyk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocWRldi0+bmRldikgJiYgbmV0X3JzcCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbbmV0X3JzcC0+dHhxX2lkeF07CisJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW25ldF9yc3AtPnR4cV9pZHhdOworCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpICYmCisJCQkJCW5ldF9yc3AgIT0gTlVMTCkgewogCQlpZiAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnF1ZXVlX3N0b3BwZWQpICYmCiAJCSAgICAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSA+ICh0eF9yaW5nLT53cV9sZW4gLyA0KSkpCiAJCQkvKgogCQkJICogVGhlIHF1ZXVlIGdvdCBzdG9wcGVkIGJlY2F1c2UgdGhlIHR4X3Jpbmcgd2FzIGZ1bGwuCiAJCQkgKiBXYWtlIGl0IHVwLCBiZWNhdXNlIGl0J3Mgbm93IGF0IGxlYXN0IDI1JSBlbXB0eS4KIAkJCSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShxZGV2LT5uZGV2KTsKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTE2NzcsNyArMTc4MSw3IEBACiAJCXJ4X3JpbmctPmNxX2lkKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIHJ4X3JpbmctPmlycSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNzAzLDE5ICsxODA3LDI5IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZW5hYmxlX2JpdCA9IE1BQ19BRERSX0U7CisJaW50IHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcKIAkgICAgKHFkZXYsICh1OCAqKSAmZW5hYmxlX2JpdCwgTUFDX0FERFJfVFlQRV9WTEFOLCB2aWQpKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgdmxhbiBhZGRyZXNzLlxuIik7CiAJfQogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcWxfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXUzMiBlbmFibGVfYml0ID0gMDsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnCkBAIC0xNzIzLDYgKzE4MzcsNyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBjbGVhciB2bGFuIGFkZHJlc3MuXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCiB9CiAKQEAgLTE3NjIsNyArMTg3Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcWxnZV9tc2l4X3J4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcgPSBkZXZfaWQ7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTg0OCw3ICsxOTYzLDcgQEAKIAkJCQkJCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywKIAkJCQkJCQkgICAgICAwKTsKIAkJCQllbHNlCi0JCQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwkJCQkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAJCQkJd29ya19kb25lKys7CiAJCQl9CiAJCX0KQEAgLTE5MzcsNyArMjA1Miw3IEBACiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgdHNvOwogCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwotCXUzMiB0eF9yaW5nX2lkeCA9ICh1MzIpIFFMX1RYUV9JRFgocWRldiwgc2tiKTsKKwl1MzIgdHhfcmluZ19pZHggPSAodTMyKSBza2ItPnF1ZXVlX21hcHBpbmc7CiAKIAl0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbdHhfcmluZ19pZHhdOwogCkBAIC0xOTQ4LDcgKzIwNjMsNyBAQAogCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgSU5GTywKIAkJCSIlczogc2h1dHRpbmcgZG93biB0eCBxdWV1ZSAlZCBkdSB0byBsYWNrIG9mIHJlc291cmNlcy5cbiIsCiAJCQlfX2Z1bmNfXywgdHhfcmluZ19pZHgpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHR4X3JpbmctPndxX2lkKTsKIAkJYXRvbWljX2luYygmdHhfcmluZy0+cXVldWVfc3RvcHBlZCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC0yMDI5LDYgKzIxNDQsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgUlggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWVtc2V0KHFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwgUEFHRV9TSVpFLAogCQkJCSAmcWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2RtYSk7CkBAIC0yMDM3LDYgKzIxNTMsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgVFggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl93cXBfc2hfYXJlYTsKIAl9CisJbWVtc2V0KHFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXJldHVybiAwOwogCiBlcnJfd3FwX3NoX2FyZWE6CkBAIC0yMTIxLDQ3ICsyMjM4LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBBbGxvY2F0ZSBhbmQgbWFwIGEgcGFnZSBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBsYnEuCi0gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2NfbGJxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCi0JCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOwotCXU2NCBtYXA7Ci0JX19sZTY0ICpicSA9IHJ4X3JpbmctPmxicV9iYXNlOwotCi0JZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmxicV9sZW47IGkrKykgewotCQlsYnFfZGVzYyA9ICZyeF9yaW5nLT5sYnFbaV07Ci0JCW1lbXNldChsYnFfZGVzYywgMCwgc2l6ZW9mKGxicV9kZXNjKSk7Ci0JCWxicV9kZXNjLT5hZGRyID0gYnE7Ci0JCWxicV9kZXNjLT5pbmRleCA9IGk7Ci0JCWxicV9kZXNjLT5wLmxicV9wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKHVubGlrZWx5KCFsYnFfZGVzYy0+cC5sYnFfcGFnZSkpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiZmFpbGVkIGFsbG9jX3BhZ2UoKS5cbiIpOwotCQkJZ290byBtZW1fZXJyb3I7Ci0JCX0gZWxzZSB7Ci0JCQltYXAgPSBwY2lfbWFwX3BhZ2UocWRldi0+cGRldiwKLQkJCQkJICAgbGJxX2Rlc2MtPnAubGJxX3BhZ2UsCi0JCQkJCSAgIDAsIFBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCQkiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7Ci0JCQkJZ290byBtZW1fZXJyb3I7Ci0JCQl9Ci0JCQlwY2lfdW5tYXBfYWRkcl9zZXQobGJxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCQlwY2lfdW5tYXBfbGVuX3NldChsYnFfZGVzYywgbWFwbGVuLCBQQUdFX1NJWkUpOwotCQkJKmxicV9kZXNjLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwKTsKLQkJfQotCQlicSsrOwotCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnJvcjoKLQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCXJldHVybiAtRU5PTUVNOwotfQotCiBzdGF0aWMgdm9pZCBxbF9mcmVlX3NicV9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKIAlpbnQgaTsKQEAgLTIxODQsNjMgKzIyNjAsNzIgQEAKIAl9CiB9CiAKLS8qIEFsbG9jYXRlIGFuZCBtYXAgYW4gc2tiIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIHNicS4gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2Nfc2JxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisvKiBGcmVlIGFsbCBsYXJnZSBhbmQgc21hbGwgcnggYnVmZmVycyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBjb21wbGV0aW9uIHF1ZXVlcyBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHFsX2ZyZWVfcnhfYnVmZmVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKKworCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOworCQlpZiAocnhfcmluZy0+bGJxKQorCQkJcWxfZnJlZV9sYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKKwkJaWYgKHJ4X3JpbmctPnNicSkKKwkJCXFsX2ZyZWVfc2JxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CisJCWlmIChyeF9yaW5nLT50eXBlICE9IFRYX1EpCisJCQlxbF91cGRhdGVfYnVmZmVyX3F1ZXVlcyhxZGV2LCByeF9yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2luaXRfbGJxX3Jpbmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCit7CisJaW50IGk7CisJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOworCV9fbGU2NCAqYnEgPSByeF9yaW5nLT5sYnFfYmFzZTsKKworCW1lbXNldChyeF9yaW5nLT5sYnEsIDAsIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2Yoc3RydWN0IGJxX2Rlc2MpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+bGJxX2xlbjsgaSsrKSB7CisJCWxicV9kZXNjID0gJnJ4X3JpbmctPmxicVtpXTsKKwkJbWVtc2V0KGxicV9kZXNjLCAwLCBzaXplb2YoKmxicV9kZXNjKSk7CisJCWxicV9kZXNjLT5pbmRleCA9IGk7CisJCWxicV9kZXNjLT5hZGRyID0gYnE7CisJCWJxKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9pbml0X3NicV9yaW5nKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewogCWludCBpOwogCXN0cnVjdCBicV9kZXNjICpzYnFfZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXU2NCBtYXA7CiAJX19sZTY0ICpicSA9IHJ4X3JpbmctPnNicV9iYXNlOwogCisJbWVtc2V0KHJ4X3JpbmctPnNicSwgMCwgcnhfcmluZy0+c2JxX2xlbiAqIHNpemVvZihzdHJ1Y3QgYnFfZGVzYykpOwogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5zYnFfbGVuOyBpKyspIHsKIAkJc2JxX2Rlc2MgPSAmcnhfcmluZy0+c2JxW2ldOwotCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZihzYnFfZGVzYykpOworCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZigqc2JxX2Rlc2MpKTsKIAkJc2JxX2Rlc2MtPmluZGV4ID0gaTsKIAkJc2JxX2Rlc2MtPmFkZHIgPSBicTsKLQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LCByeF9yaW5nLT5zYnFfYnVmX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJzbWFsbCBidWZmIGFsbG9jIGZhaWxlZCBmb3IgJWQgYnl0ZXMgYXQgaW5kZXggJWQuXG4iLAotCQkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSwgaSk7Ci0JCQlnb3RvIG1lbV9lcnI7Ci0JCX0KLQkJc2tiX3Jlc2VydmUoc2tiLCBRTEdFX1NCX1BBRCk7Ci0JCXNicV9kZXNjLT5wLnNrYiA9IHNrYjsKLQkJLyoKLQkJICogTWFwIG9ubHkgaGFsZiB0aGUgYnVmZmVyLiBCZWNhdXNlIHRoZQotCQkgKiBvdGhlciBoYWxmIG1heSBnZXQgc29tZSBkYXRhIGNvcGllZCB0byBpdAotCQkgKiB3aGVuIHRoZSBjb21wbGV0aW9uIGFycml2ZXMuCi0JCSAqLwotCQltYXAgPSBwY2lfbWFwX3NpbmdsZShxZGV2LT5wZGV2LAotCQkJCSAgICAgc2tiLT5kYXRhLAotCQkJCSAgICAgcnhfcmluZy0+c2JxX2J1Zl9zaXplIC8gMiwKLQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJQQ0kgbWFwcGluZyBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gbWVtX2VycjsKLQkJfQotCQlwY2lfdW5tYXBfYWRkcl9zZXQoc2JxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCXBjaV91bm1hcF9sZW5fc2V0KHNicV9kZXNjLCBtYXBsZW4sIHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpOwotCQkqc2JxX2Rlc2MtPmFkZHIgPSBjcHVfdG9fbGU2NChtYXApOwogCQlicSsrOwogCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnI6Ci0JcWxfZnJlZV9zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgcWxfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF9mcmVlX3NicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCiAJLyogRnJlZSB0aGUgc21hbGwgYnVmZmVyIHF1ZXVlLiAqLwogCWlmIChyeF9yaW5nLT5zYnFfYmFzZSkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCkBAIC0yMzE4LDExICsyNDAzLDcgQEAKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCi0JCWlmIChxbF9hbGxvY19zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIlNtYWxsIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwotCQkJZ290byBlcnJfbWVtOwotCQl9CisJCXFsX2luaXRfc2JxX3JpbmcocWRldiwgcnhfcmluZyk7CiAJfQogCiAJaWYgKHJ4X3JpbmctPmxicV9sZW4pIHsKQEAgLTIzNTAsMTQgKzI0MzEsNyBAQAogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIGJ1ZmZlcnMuCi0JCSAqLwotCQlpZiAocWxfYWxsb2NfbGJxX2J1ZmZlcnMocWRldiwgcnhfcmluZykpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJMYXJnZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gZXJyX21lbTsKLQkJfQorCQlxbF9pbml0X2xicV9yaW5nKHFkZXYsIHJ4X3JpbmcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ1MSw2ICsyNTI1LDcgQEAKIAkgICAgcWRldi0+ZG9vcmJlbGxfYXJlYSArIChEQl9QQUdFX1NJWkUgKiAoMTI4ICsgcnhfcmluZy0+Y3FfaWQpKTsKIAlpbnQgZXJyID0gMDsKIAl1MTYgYnFfbGVuOworCXU2NCB0bXA7CiAKIAkvKiBTZXQgdXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgZm9yIHRoaXMgcmluZy4gKi8KIAlyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcgPSBzaGFkb3dfcmVnOwpAQCAtMjQ5Niw3ICsyNTcxLDggQEAKIAkgICAgRkxBR1NfTEk7CQkvKiBMb2FkIGlycSBkZWxheSB2YWx1ZXMgKi8KIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTEw7CS8qIExvYWQgbGJxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+bGJxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPmxicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+bGJxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9idWZfc2l6ZSA9PSA2NTUzNikgPyAwIDoKQEAgLTI1MDUsMjUgKzI1ODEsMjYgQEAKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9sZW4gPT0gNjU1MzYpID8gMCA6CiAJCQkodTE2KSByeF9yaW5nLT5sYnFfbGVuOwogCQljcWljYi0+bGJxX2xlbiA9IGNwdV90b19sZTE2KGJxX2xlbik7Ci0JCXJ4X3JpbmctPmxicV9wcm9kX2lkeCA9IHJ4X3JpbmctPmxicV9sZW4gLSAxNjsKKwkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKIAkJcnhfcmluZy0+bGJxX2N1cnJfaWR4ID0gMDsKLQkJcnhfcmluZy0+bGJxX2NsZWFuX2lkeCA9IHJ4X3JpbmctPmxicV9wcm9kX2lkeDsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250ID0gMTY7CisJCXJ4X3JpbmctPmxicV9jbGVhbl9pZHggPSAwOworCQlyeF9yaW5nLT5sYnFfZnJlZV9jbnQgPSByeF9yaW5nLT5sYnFfbGVuOwogCX0KIAlpZiAocnhfcmluZy0+c2JxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTFM7CS8qIExvYWQgc2JxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+c2JxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPnNicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+c2JxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJY3FpY2ItPnNicV9idWZfc2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNigoKHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpICsgOCkgJiAweGZmZmZmZmY4KTsKKwkJICAgIGNwdV90b19sZTE2KCh1MTYpKHJ4X3JpbmctPnNicV9idWZfc2l6ZS8yKSk7CiAJCWJxX2xlbiA9IChyeF9yaW5nLT5zYnFfbGVuID09IDY1NTM2KSA/IDAgOgogCQkJKHUxNikgcnhfcmluZy0+c2JxX2xlbjsKIAkJY3FpY2ItPnNicV9sZW4gPSBjcHVfdG9fbGUxNihicV9sZW4pOwotCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSByeF9yaW5nLT5zYnFfbGVuIC0gMTY7CisJCXJ4X3JpbmctPnNicV9wcm9kX2lkeCA9IDA7CiAJCXJ4X3JpbmctPnNicV9jdXJyX2lkeCA9IDA7Ci0JCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfcHJvZF9pZHg7Ci0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCA9IDE2OworCQlyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gMDsKKwkJcnhfcmluZy0+c2JxX2ZyZWVfY250ID0gcnhfcmluZy0+c2JxX2xlbjsKIAl9CiAJc3dpdGNoIChyeF9yaW5nLT50eXBlKSB7CiAJY2FzZSBUWF9ROgpAQCAtMjU2OSwyNCArMjY0NiwxMyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW52YWxpZCByeF9yaW5nLT50eXBlID0gJWQuXG4iLAogCQkJcnhfcmluZy0+dHlwZSk7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CiAJZXJyID0gcWxfd3JpdGVfY2ZnKHFkZXYsIGNxaWNiLCBzaXplb2Yoc3RydWN0IGNxaWNiKSwKIAkJCSAgIENGR19MQ1EsIHJ4X3JpbmctPmNxX2lkKTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBDUUlDQi5cbiIpOwotCS8qCi0JICogQWR2YW5jZSB0aGUgcHJvZHVjZXIgaW5kZXggZm9yIHRoZSBidWZmZXIgcXVldWVzLgotCSAqLwotCXdtYigpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+bGJxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPmxicV9wcm9kX2lkeF9kYl9yZWcpOwotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI2MzMsNyArMjY5OSw3IEBACiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgdHhfcmluZy5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJTdWNjZXNzZnVsbHkgbG9hZGVkIFdRSUNCLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgV1FJQ0IuXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjc1LDcgKzI3NDEsNyBAQAogCQkgICAgKHFkZXYtPnBkZXYsIHFkZXYtPm1zaV94X2VudHJ5LCBxZGV2LT5yeF9yaW5nX2NvdW50KSkgewogCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CiAJCQlxZGV2LT5pbnRyX2NvdW50ID0gcWRldi0+cnhfcmluZ19jb3VudDsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKIAkJCQlxZGV2LT5pbnRyX2NvdW50KTsKIAkJCXJldHVybjsKQEAgLTI4MDIsMTEgKzI4NjgsMTEgQEAKIAkJCWlmICh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKIAkJCQlmcmVlX2lycShxZGV2LT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsCiAJCQkJCSAmcWRldi0+cnhfcmluZ1tpXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKKwkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgREVCVUcsCiAJCQkJCSJmcmVlaW5nIG1zaXggaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9IGVsc2UgewogCQkJCWZyZWVfaXJxKHFkZXYtPnBkZXYtPmlycSwgJnFkZXYtPnJ4X3JpbmdbMF0pOwotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBFUlIsCisJCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLAogCQkJCQkiZnJlZWluZyBtc2kgaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9CiAJCX0KQEAgLTI4MzcsNyArMjkwMyw3IEBACiAJCQkJCWkpOwogCQkJCWdvdG8gZXJyX2lycTsKIAkJCX0gZWxzZSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLAorCQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJCSJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcyVzJXMsIHdpdGggbmFtZSAlcy5cbiIsCiAJCQkJCWksCiAJCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQpAQCAtMjkxMiwxNCArMjk3OCwxNCBAQAogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2Nl9oYXNoX2tleVswXSwgNDApOwogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2NF9oYXNoX2tleVswXSwgMTYpOwogCi0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJJbml0aWFsaXppbmcgUlNTLlxuIik7CiAKIAlzdGF0dXMgPSBxbF93cml0ZV9jZmcocWRldiwgcmljYiwgc2l6ZW9mKHJpY2IpLCBDRkdfTFIsIDApOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBSSUNCLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgUklDQi5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJTdWNjZXNzZnVsbHkgbG9hZGVkIFJJQ0IuXG4iKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yOTI5LDEzICsyOTk1LDE3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGk7CiAKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCiAJLyogQ2xlYXIgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSByb3V0aW5nIHRhYmxlLiAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAwLCAwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIENBTSBwYWNrZXRzLlxuIik7Ci0JCQlyZXR1cm4gc3RhdHVzOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC0yOTQzLDEzICszMDEzLDEzIEBACiAJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBlcnJvciBwYWNrZXRzLlxuIik7Ci0JCXJldHVybiBzdGF0dXM7CisJCWdvdG8gZXhpdDsKIAl9CiAJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9CQ0FTVF9TTE9ULCBSVF9JRFhfQkNBU1QsIDEpOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgYnJvYWRjYXN0IHBhY2tldHMuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byBleGl0OwogCX0KIAkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgaW5ib3VuZCBxdWV1ZSwgdGhlbiB0dXJuIG9uIFJTUyBpbiB0aGUKIAkgKiByb3V0aW5nIGJsb2NrLgpAQCAtMjk2MCwxNyArMzAzMCwzOSBAQAogCQlpZiAoc3RhdHVzKSB7CiAJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgTUFUQ0ggUlNTIHBhY2tldHMuXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0NBTV9ISVRfU0xPVCwKIAkJCQkgICAgUlRfSURYX0NBTV9ISVQsIDEpOwotCWlmIChzdGF0dXMpIHsKKwlpZiAoc3RhdHVzKQogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gcGFja2V0cy5cbiIpOworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAorCQkJICAgICBNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMgKiBNQVhfQ1EpOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KKworCXN0YXR1cyA9IHFsX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zMDM4LDI4ICszMTMwLDI0IEBACiAJCX0KIAl9CiAKLQlzdGF0dXMgPSBxbF9wb3J0X2luaXRpYWxpemUocWRldik7Ci0JaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQorCS8qIEluaXRpYWxpemUgdGhlIHBvcnQgYW5kIHNldCB0aGUgbWF4IGZyYW1lc2l6ZS4gKi8KKwlzdGF0dXMgPSBxZGV2LT5uaWNfb3BzLT5wb3J0X2luaXRpYWxpemUocWRldik7CisgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICBRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7CisgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgfQogCi0Jc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAotCQkJCSAgICAgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKTsKKwkvKiBTZXQgdXAgdGhlIE1BQyBhZGRyZXNzIGFuZCBmcmFtZSByb3V0aW5nIGZpbHRlci4gKi8KKwlzdGF0dXMgPSBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgbWFjIGFkZHJlc3MuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlzdGF0dXMgPSBxbF9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwotCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBTdGFydCBOQVBJIGZvciB0aGUgUlNTIHF1ZXVlcy4gKi8KIAlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCisJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCiAJCQlpKTsKIAkJbmFwaV9lbmFibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAJfQpAQCAtMzA3MSwzNiArMzE1OSwyMyBAQAogc3RhdGljIGludCBxbF9hZGFwdGVyX3Jlc2V0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCXUzMiB2YWx1ZTsKLQlpbnQgbWF4X3dhaXRfdGltZTsKIAlpbnQgc3RhdHVzID0gMDsKLQlpbnQgcmVzZXRDbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsKKwkJbWF4KCh1bnNpZ25lZCBsb25nKTEsIHVzZWNzX3RvX2ppZmZpZXMoMzApKTsKIAotI2RlZmluZSBNQVhfUkVTRVRfQ05UICAgMQotaXNzdWVSZXNldDoKLQlyZXNldENudCsrOwotCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywgIklzc3VlIHNvZnQgcmVzZXQgdG8gY2hpcC5cbiIpOwogCXFsX3dyaXRlMzIocWRldiwgUlNUX0ZPLCAoUlNUX0ZPX0ZSIDw8IDE2KSB8IFJTVF9GT19GUik7Ci0JLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuICovCi0JbWF4X3dhaXRfdGltZSA9IDM7Ci0JUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLCAiV2FpdCAlZCBzZWNvbmRzIGZvciByZXNldCB0byBjb21wbGV0ZS5cbiIsCi0JCW1heF93YWl0X3RpbWUpOworCiAJZG8gewogCQl2YWx1ZSA9IHFsX3JlYWQzMihxZGV2LCBSU1RfRk8pOwogCQlpZiAoKHZhbHVlICYgUlNUX0ZPX0ZSKSA9PSAwKQogCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF9qaWZmaWVzKSk7CiAKLQkJc3NsZWVwKDEpOwotCX0gd2hpbGUgKCgtLW1heF93YWl0X3RpbWUpKTsKIAlpZiAodmFsdWUgJiBSU1RfRk9fRlIpIHsKIAkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKLQkJCSJTdHVjayBpbiBTb2Z0UmVzZXQ6ICBGU0NfU1I6MHglMDh4XG4iLCB2YWx1ZSk7Ci0JCWlmIChyZXNldENudCA8IE1BWF9SRVNFVF9DTlQpCi0JCQlnb3RvIGlzc3VlUmVzZXQ7Ci0JfQotCWlmIChtYXhfd2FpdF90aW1lID09IDApIHsKLQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKIAkJCSJFVElNRU9VVCEhISBlcnJvcmVkIG91dCBvZiByZXNldHRpbmcgdGhlIGNoaXAhXG4iKTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzEyMywxMiArMzE5OCwxMCBAQAogCiBzdGF0aWMgaW50IHFsX2FkYXB0ZXJfZG93bihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CiAJaW50IGksIHN0YXR1cyA9IDA7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwogCiAJLyogRG9uJ3Qga2lsbCB0aGUgcmVzZXQgd29ya2VyIHRocmVhZCBpZiB3ZQogCSAqIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZWNvdmVyeS4KQEAgLTMxMzcsNiArMzIxMCw4IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+YXNpY19yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAKIAkvKiBUaGUgZGVmYXVsdCBxdWV1ZSBhdCBpbmRleCAwIGlzIGFsd2F5cyBwcm9jZXNzZWQgaW4KIAkgKiBhIHdvcmtxdWV1ZS4KQEAgLTMxNzEsNiArMzI0Niw4IEBACiAJZm9yIChpID0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQ7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCiAJCW5ldGlmX25hcGlfZGVsKCZxZGV2LT5yeF9yaW5nW2ldLm5hcGkpOwogCisJcWxfZnJlZV9yeF9idWZmZXJzKHFkZXYpOworCiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlzdGF0dXMgPSBxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpOwogCWlmIChzdGF0dXMpCkBAIC0zMTg0LDIxICszMjYxLDE5IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWVyciA9IHFsX2FkYXB0ZXJfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlVuYWJsZSB0byBpbml0aWFsaXplIGFkYXB0ZXIuXG4iKTsKIAkJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOwogCQlnb3RvIGVycl9pbml0OwogCX0KLQlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CiAJc2V0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOworCXFsX2FsbG9jX3J4X2J1ZmZlcnMocWRldik7CisJaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkpCisJCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7CiAJcWxfZW5hYmxlX2ludGVycnVwdHMocWRldik7CiAJcWxfZW5hYmxlX2FsbF9jb21wbGV0aW9uX2ludGVycnVwdHMocWRldik7Ci0JaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKLQkJbmV0aWZfc3RhcnRfcXVldWUocWRldi0+bmRldik7Ci0JfQorCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMocWRldi0+bmRldik7CiAKIAlyZXR1cm4gMDsKIGVycl9pbml0OgpAQCAtMzIwNiwyOCArMzI4MSw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBxbF9jeWNsZV9hZGFwdGVyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQotewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXN0YXR1cyA9IHFsX2FkYXB0ZXJfdXAocWRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiBzdGF0dXM7Ci1lcnJvcjoKLQlRUFJJTlRLKHFkZXYsIElGVVAsIEFMRVJULAotCQkiRHJpdmVyIHVwL2Rvd24gY3ljbGUgZmFpbGVkLCBjbG9zaW5nIGRldmljZVxuIik7Ci0JcnRubF9sb2NrKCk7Ci0JZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOwotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQogc3RhdGljIHZvaWQgcWxfcmVsZWFzZV9hZGFwdGVyX3Jlc291cmNlcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlxbF9mcmVlX21lbV9yZXNvdXJjZXMocWRldik7CkBAIC0zMzA4LDYgKzMzNjEsNyBAQAogCSAqIGNvbXBsZXRpb24gaGFuZGxlciByeF9yaW5ncy4KIAkgKi8KIAlxZGV2LT5yeF9yaW5nX2NvdW50ID0gcWRldi0+dHhfcmluZ19jb3VudCArIHFkZXYtPnJzc19yaW5nX2NvdW50ICsgMTsKKwluZXRpZl9zZXRfZ3NvX21heF9zaXplKHFkZXYtPm5kZXYsIDY1NTM2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT50eF9yaW5nX2NvdW50OyBpKyspIHsKIAkJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW2ldOwpAQCAtMzQxNCw2ICszNDY4LDggQEAKIAogCWlmIChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDkwMDApIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwKKwkJCQkmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmssIDApOwogCX0gZWxzZSBpZiAobmRldi0+bXR1ID09IDkwMDAgJiYgbmV3X210dSA9PSAxNTAwKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiQ2hhbmdpbmcgdG8gbm9ybWFsIE1UVS5cbiIpOwogCX0gZWxzZSBpZiAoKG5kZXYtPm10dSA9PSAxNTAwICYmIG5ld19tdHUgPT0gMTUwMCkgfHwKQEAgLTM0MzYsOCArMzQ5MiwxMSBAQAogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbF9hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7Ci0JaW50IGk7CisJaW50IGksIHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybjsKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCS8qCiAJICogU2V0IG9yIGNsZWFyIHByb21pc2N1b3VzIG1vZGUgaWYgYQpAQCAtMzQ5MywxNCArMzU1MiwxOSBAQAogCX0KIAogCWlmIChuZGV2LT5tY19jb3VudCkgeworCQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBleGl0OwogCQlmb3IgKGkgPSAwLCBtY19wdHIgPSBuZGV2LT5tY19saXN0OyBtY19wdHI7CiAJCSAgICAgaSsrLCBtY19wdHIgPSBtY19wdHItPm5leHQpCiAJCQlpZiAocWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbWNfcHRyLT5kbWlfYWRkciwKIAkJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpKSkgewogCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKIAkJCQkJIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKKwkJCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CisJCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCSAgICAocWRldiwgUlRfSURYX01DQVNUX01BVENIX1NMT1QsIFJUX0lEWF9NQ0FTVF9NQVRDSCwgMSkpIHsKIAkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKQEAgLTM1MTEsMTMgKzM1NzUsMTQgQEAKIAl9CiBleGl0OgogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgcWxnZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwotCWludCByZXQgPSAwOworCWludCBzdGF0dXM7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTM1MjYsMTUgKzM1OTEsMTcgQEAKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCW1lbWNweShuZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmRldi0+YWRkcl9sZW4pOwogCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7Ci0JaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG5kZXYtPmRldl9hZGRyLAotCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKSkgey8qIFVuaWNhc3QgKi8KLQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKLQkJcmV0ID0gLTE7Ci0JfQorCXN0YXR1cyA9IHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG5kZXYtPmRldl9hZGRyLAorCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jICogTUFYX0NRKTsKIAlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgSFcsIEVSUiwgIkZhaWxlZCB0byBsb2FkIE1BQyBhZGRyZXNzLlxuIik7CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgcWxnZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtMzU0Nyw5ICszNjE0LDM3IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIGFzaWNfcmVzZXRfd29yay53b3JrKTsKLQlxbF9jeWNsZV9hZGFwdGVyKHFkZXYpOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHFsX2FkYXB0ZXJfdXAocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKworCXJldHVybjsKK2Vycm9yOgorCVFQUklOVEsocWRldiwgSUZVUCwgQUxFUlQsCisJCSJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKKwlydG5sX2xvY2soKTsKKwlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CisJZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAxMl9uaWNfb3BzID0geworCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMTJfZmxhc2hfcGFyYW1zLAorCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDEyX3BvcnRfaW5pdGlhbGl6ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAwMF9uaWNfb3BzID0geworCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMDBfZmxhc2hfcGFyYW1zLAorCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDAwX3BvcnRfaW5pdGlhbGl6ZSwKK307CisKKwogc3RhdGljIHZvaWQgcWxfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJcWRldi0+ZnVuYyA9CkBAIC0zNTY4LDYgKzM2NjMsMTEgQEAKIAkJcWRldi0+bWFpbGJveF9vdXQgPSBQUk9DX0FERFJfTVBJX1JJU0MgfCBQUk9DX0FERFJfRlVOQzBfTUJPOwogCX0KIAlxZGV2LT5jaGlwX3Jldl9pZCA9IHFsX3JlYWQzMihxZGV2LCBSRVZfSUQpOworCXFkZXYtPmRldmljZV9pZCA9IHFkZXYtPnBkZXYtPmRldmljZTsKKwlpZiAocWRldi0+ZGV2aWNlX2lkID09IFFMR0VfREVWSUNFX0lEXzgwMTIpCisJCXFkZXYtPm5pY19vcHMgPSAmcWxhODAxMl9uaWNfb3BzOworCWVsc2UgaWYgKHFkZXYtPmRldmljZV9pZCA9PSBRTEdFX0RFVklDRV9JRF84MDAwKQorCQlxZGV2LT5uaWNfb3BzID0gJnFsYTgwMDBfbmljX29wczsKIH0KIAogc3RhdGljIHZvaWQgcWxfcmVsZWFzZV9hbGwoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zNjYwLDI0ICszNzYwLDIwIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKIAlxZGV2LT5uZGV2ID0gbmRldjsKIAlxZGV2LT5wZGV2ID0gcGRldjsKKwlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKIAlxZGV2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnKTsKIAlzcGluX2xvY2tfaW5pdCgmcWRldi0+aHdfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPnN0YXRzX2xvY2spOwogCiAJLyogbWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwotCWVyciA9IHFsX2dldF9mbGFzaF9wYXJhbXMocWRldik7CisJZXJyID0gcWRldi0+bmljX29wcy0+Z2V0X2ZsYXNoKHFkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBGTEFTSC5cbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLm1hY19hZGRyKSkKLQkJZ290byBlcnJfb3V0OwotCi0JbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBxZGV2LT5mbGFzaC5tYWNfYWRkciwgbmRldi0+YWRkcl9sZW4pOwogCW1lbWNweShuZGV2LT5wZXJtX2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgcmluZyBzaXplcy4gKi8KQEAgLTM3MDAsNiArMzc5NiwxMCBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmssIHFsX2FzaWNfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9yZXNldF93b3JrLCBxbF9tcGlfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV93b3JrLCBxbF9tcGlfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCBxbF9tcGlfcG9ydF9jZmdfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9pZGNfd29yaywgcWxfbXBpX2lkY193b3JrKTsKKwltdXRleF9pbml0KCZxZGV2LT5tcGlfbXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmcWRldi0+aWRlX2NvbXBsZXRpb24pOwogCiAJaWYgKCFjYXJkc19mb3VuZCkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXNcbiIsIERSVl9TVFJJTkcpOwpAQCAtMzczNyw3ICszODM3LDggQEAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHFsX2FkYXB0ZXIpKTsKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBxbF9hZGFwdGVyKSwKKwkJCW1pbihNQVhfQ1BVUywgKGludCludW1fb25saW5lX2NwdXMoKSkpOwogCWlmICghbmRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM3NTcsNiArMzg1OCw3IEBACiAJCQkgIHwgTkVUSUZfRl9UU09fRUNOCiAJCQkgIHwgTkVUSUZfRl9IV19WTEFOX1RYCiAJCQkgIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUik7CisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAlpZiAodGVzdF9iaXQoUUxfRE1BNjQsICZxZGV2LT5mbGFncykpCiAJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTM3NzksNyArMzg4MSw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJcWxfZGlzcGxheV9kZXZfaW5mbyhuZGV2KTsKIAljYXJkc19mb3VuZCsrOwogCXJldHVybiAwOwpAQCAtMzgzMyw3ICszOTM0LDYgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBmYTMxODkxLi45ZjgxYjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC0xLDYgKzEsMjYgQEAKICNpbmNsdWRlICJxbGdlLmgiCiAKLXN0YXRpYyBpbnQgcWxfcmVhZF9tYm94X3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQorc3RhdGljIHZvaWQgcWxfZGlzcGxheV9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCQlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGk7CisJc3RhdGljIGNoYXIgKmVycl9zdHNbXSA9IHsKKwkJIkNvbW1hbmQgQ29tcGxldGUiLAorCQkiQ29tbWFuZCBOb3QgU3VwcG9ydGVkIiwKKwkJIkhvc3QgSW50ZXJmYWNlIEVycm9yIiwKKwkJIkNoZWNrc3VtIEVycm9yIiwKKwkJIlVudXNlZCBDb21wbGV0aW9uIFN0YXR1cyIsCisJCSJUZXN0IEZhaWxlZCIsCisJCSJDb21tYW5kIFBhcmFtZXRlciBFcnJvciJ9OworCisJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAiJXMuXG4iLAorCQllcnJfc3RzW21iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwMDAwZl0pOworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJaSwgbWJjcC0+bWJveF9vdXRbaV0pOworfQorCitpbnQgcWxfcmVhZF9tcGlfcmVnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLCB1MzIgKmRhdGEpCiB7CiAJaW50IHN0YXR1czsKIAkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLwpAQCAtMTksNiArMzksMzIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgcWxfd3JpdGVfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyIGRhdGEpCit7CisJaW50IHN0YXR1cyA9IDA7CisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgUFJPQ19BRERSLCBQUk9DX0FERFJfUkRZLCBQUk9DX0FERFJfRVJSKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisJLyogd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGRhdGEgcmVnICovCisJcWxfd3JpdGUzMihxZGV2LCBQUk9DX0RBVEEsIGRhdGEpOworCS8qIHRyaWdnZXIgdGhlIHdyaXRlICovCisJcWxfd3JpdGUzMihxZGV2LCBQUk9DX0FERFIsIHJlZyk7CisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgUFJPQ19BRERSLCBQUk9DX0FERFJfUkRZLCBQUk9DX0FERFJfRVJSKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RhdHVzID0gcWxfd3JpdGVfbXBpX3JlZyhxZGV2LCAweDAwMDAxMDEwLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgaW50IHFsX2dldF9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKIAlpbnQgaSwgc3RhdHVzOwpAQCAtMjgsNyArNzQsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykgewogCQlzdGF0dXMgPQotCQkgICAgcWxfcmVhZF9tYm94X3JlZyhxZGV2LCBxZGV2LT5tYWlsYm94X291dCArIGksCisJCSAgICBxbF9yZWFkX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9vdXQgKyBpLAogCQkJCSAgICAgJm1iY3AtPm1ib3hfb3V0W2ldKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZhaWxlZCBtYWlsYm94IHJlYWQuXG4iKTsKQEAgLTM5LDYzICs4NSw3NDQgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiBXYWl0IGZvciBhIHNpbmdsZSBtYWlsYm94IGNvbW1hbmQgdG8gY29tcGxldGUuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBxbF93YWl0X21ieF9jbWRfY21wbHQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGNvdW50ID0gNTA7CS8qIFRPRE86IGFyYml0cmFyeSBmb3Igbm93LiAqLworCXUzMiB2YWx1ZTsKKworCWRvIHsKKwkJdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgU1RTKTsKKwkJaWYgKHZhbHVlICYgU1RTX1BJKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheShVREVMQVlfREVMQVkpOyAvKiAxMHVzICovCisJfSB3aGlsZSAoLS1jb3VudCk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKKy8qIEV4ZWN1dGUgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kLgorICogQ2FsbGVyIG11c3QgaG9sZCBQUk9DX0FERFIgc2VtYXBob3JlLgorICovCitzdGF0aWMgaW50IHFsX2V4ZWNfbWJfY21kKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGksIHN0YXR1czsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBwZW5kaW5nLgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKwkgKi8KKwlpZiAocWxfcmVhZDMyKHFkZXYsIENTUikgJiBDU1JfSFJJKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qCisJICogRmlsbCB0aGUgb3V0Ym91bmQgbWFpbGJveGVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5pbl9jb3VudDsgaSsrKSB7CisJCXN0YXR1cyA9IHFsX3dyaXRlX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9pbiArIGksCisJCQkJCQltYmNwLT5tYm94X2luW2ldKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCX0KKwkvKgorCSAqIFdha2UgdXAgdGhlIE1QSSBmaXJtd2FyZS4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9TRVRfSDJSX0lOVCk7CitlbmQ6CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogV2UgYXJlIGJlaW5nIGFza2VkIGJ5IGZpcm13YXJlIHRvIGFjY2VwdAorICogYSBjaGFuZ2UgdG8gdGhlIHBvcnQuICBUaGlzIGlzIG9ubHkKKyAqIGEgY2hhbmdlIHRvIG1heCBmcmFtZSBzaXplcyAoVHgvUngpLCBwYXVzZQorICogcGFyYW10ZXJzLCBvciBsb29wYmFjayBtb2RlLiBXZSB3YWtlIHVwIGEgd29ya2VyCisgKiB0byBoYW5kbGVyIHByb2Nlc3NpbmcgdGhpcyBzaW5jZSBhIG1haWxib3ggY29tbWFuZAorICogd2lsbCBuZWVkIHRvIGJlIHNlbnQgdG8gQUNLIHRoZSByZXF1ZXN0LgorICovCitzdGF0aWMgaW50IHFsX2lkY19yZXFfYWVuKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CisKKwlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRW50ZXIhXG4iKTsKKwkvKiBHZXQgdGhlIHN0YXR1cyBkYXRhIGFuZCBzdGFydCB1cCBhIHRocmVhZCB0bworCSAqIGhhbmRsZSB0aGUgcmVxdWVzdC4KKwkgKi8KKwltYmNwID0gJnFkZXYtPmlkY19tYmM7CisJbWJjcC0+b3V0X2NvdW50ID0gNDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb3VsZCBub3QgcmVhZCBNUEksIHJlc2V0dGluZyBBU0lDIVxuIik7CisJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CisJfSBlbHNlCXsKKwkJLyogQmVnaW4gcG9sbGVkIG1vZGUgZWFybHkgc28KKwkJICogd2UgZG9uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0CisJCSAqIHdoZW4gd2UgbGVhdmUgbXBpX3dvcmtlci4KKwkJICovCisJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhxZGV2LT53b3JrcXVldWUsICZxZGV2LT5tcGlfaWRjX3dvcmssIDApOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBQcm9jZXNzIGFuIGludGVyLWRldmljZSBldmVudCBjb21wbGV0aW9uLgorICogSWYgZ29vZCwgc2lnbmFsIHRoZSBjYWxsZXIncyBjb21wbGV0aW9uLgorICovCitzdGF0aWMgaW50IHFsX2lkY19jbXBsdF9hZW4oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwltYmNwLT5vdXRfY291bnQgPSA0OworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKKwkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CisJfSBlbHNlCisJCS8qIFdha2UgdXAgdGhlIHNsZWVwaW5nIG1waV9pZGNfd29yayB0aHJlYWQgdGhhdCBpcworCQkgKiB3YWl0aW5nIGZvciB0aGlzIGV2ZW50LgorCQkgKi8KKwkJY29tcGxldGUoJnFkZXYtPmlkZV9jb21wbGV0aW9uKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyB2b2lkIHFsX2xpbmtfdXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKKwlpbnQgc3RhdHVzOwogCW1iY3AtPm91dF9jb3VudCA9IDI7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkKLQkJZ290byBleGl0OworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIiVzOiBDb3VsZCBub3QgZ2V0IG1haWxib3ggc3RhdHVzLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQogCiAJcWRldi0+bGlua19zdGF0dXMgPSBtYmNwLT5tYm94X291dFsxXTsKIAlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBVcC5cbiIpOwotCVFQUklOVEsocWRldiwgRFJWLCBJTkZPLCAiTGluayBTdGF0dXMgPSAweCUuMDh4LlxuIiwgbWJjcC0+bWJveF9vdXRbMV0pOwotCWlmICghbmV0aWZfY2Fycmllcl9vayhxZGV2LT5uZGV2KSkgewotCQlRUFJJTlRLKHFkZXYsIExJTkssIElORk8sICJMaW5rIGlzIFVwLlxuIik7Ci0JCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUocWRldi0+bmRldik7CisKKwkvKiBJZiB3ZSdyZSBjb21pbmcgYmFjayBmcm9tIGFuIElEQyBldmVudAorCSAqIHRoZW4gc2V0IHVwIHRoZSBDQU0gYW5kIGZyYW1lIHJvdXRpbmcuCisJICovCisJaWYgKHRlc3RfYml0KFFMX0NBTV9SVF9TRVQsICZxZGV2LT5mbGFncykpIHsKKwkJc3RhdHVzID0gcWxfY2FtX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJCWlmIChzdGF0dXMpIHsKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCWNsZWFyX2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpOwogCX0KLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisKKwkvKiBRdWV1ZSB1cCBhIHdvcmtlciB0byBjaGVjayB0aGUgZnJhbWUKKwkgKiBzaXplIGluZm9ybWF0aW9uLCBhbmQgZml4IGl0IGlmIGl0J3Mgbm90CisJICogdG8gb3VyIGxpa2luZy4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJRdWV1ZSBQb3J0IENvbmZpZyBXb3JrZXIhXG4iKTsKKwkJc2V0X2JpdChRTF9QT1JUX0NGRywgJnFkZXYtPmZsYWdzKTsKKwkJLyogQmVnaW4gcG9sbGVkIG1vZGUgZWFybHkgc28KKwkJICogd2UgZG9uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0CisJCSAqIHdoZW4gd2UgbGVhdmUgbXBpX3dvcmtlciBkcGMuCisJCSAqLworCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLAorCQkJCSZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgMCk7CisJfQorCisJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcWxfbGlua19kb3duKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKKwogCW1iY3AtPm91dF9jb3VudCA9IDM7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7Ci0JCWdvdG8gZXhpdDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMaW5rIGRvd24gQUVOIGJyb2tlbiFcbiIpOworCisJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7Cit9CisKK3N0YXRpYyBpbnQgcWxfc2ZwX2luKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKworCW1iY3AtPm91dF9jb3VudCA9IDU7CisKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJTRlAgaW4gQUVOIGJyb2tlbiFcbiIpOworCWVsc2UKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlNGUCBpbnNlcnRpb24gZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfc2ZwX291dChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBzdGF0dXM7CisKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIG91dCBBRU4gYnJva2VuIVxuIik7CisJZWxzZQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIHJlbW92YWwgZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfYWVuX2xvc3Qoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKK3sKKwlpbnQgc3RhdHVzOworCisJbWJjcC0+b3V0X2NvdW50ID0gNjsKKworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxvc3QgQUVOIGJyb2tlbiFcbiIpOworCWVsc2UgeworCQlpbnQgaTsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxvc3QgQUVOIGRldGVjdGVkLlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJtYm94X291dFslZF0gPSAweCUuMDh4LlxuIiwKKwkJCQkJaSwgbWJjcC0+bWJveF9vdXRbaV0pOworCiAJfQogCi0JaWYgKG5ldGlmX2NhcnJpZXJfb2socWRldi0+bmRldikpIHsKLQkJUVBSSU5USyhxZGV2LCBMSU5LLCBJTkZPLCAiTGluayBpcyBEb3duLlxuIik7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKHFkZXYtPm5kZXYpOwotCX0KLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBEb3duLlxuIik7Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxpbmsgU3RhdHVzID0gMHglLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzFdKTsKLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgcWxfaW5pdF9md19kb25lKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKKwogCW1iY3AtPm91dF9jb3VudCA9IDI7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkgeworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7Ci0JCWdvdG8gZXhpdDsKKwl9IGVsc2UgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCisJCQltYmNwLT5tYm94X291dFsxXSk7CisJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOworCQlpZiAoc3RhdHVzKQorCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCX0KLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgaW5pdGlhbGl6ZWQhXG4iKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgc3RhdHVzID0gMHglLjA4eC5cbiIsCi0JCW1iY3AtPm1ib3hfb3V0WzBdKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCi0JCW1iY3AtPm1ib3hfb3V0WzFdKTsKLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCit9CisKKy8qIFByb2Nlc3MgYW4gYXN5bmMgZXZlbnQgYW5kIGNsZWFyIGl0IHVubGVzcyBpdCdzIGFuCisgKiBlcnJvciBjb25kaXRpb24uCisgKiAgVGhpcyBjYW4gZ2V0IGNhbGxlZCBpdGVyYXRpdmVseSBmcm9tIHRoZSBtcGlfd29yayB0aHJlYWQKKyAqICB3aGVuIGV2ZW50cyBhcnJpdmUgdmlhIGFuIGludGVycnVwdC4KKyAqICBJdCBhbHNvIGdldHMgY2FsbGVkIHdoZW4gYSBtYWlsYm94IGNvbW1hbmQgaXMgcG9sbGluZyBmb3IKKyAqICBpdCdzIGNvbXBsZXRpb24uICovCitzdGF0aWMgaW50IHFsX21waV9oYW5kbGVyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKwlpbnQgb3JpZ19jb3VudCA9IG1iY3AtPm91dF9jb3VudDsKKworCS8qIEp1c3QgZ2V0IG1haWxib3ggemVybyBmb3Igbm93LiAqLworCW1iY3AtPm91dF9jb3VudCA9IDE7CisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOworCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOworCQlnb3RvIGVuZDsKKwl9CisKKwlzd2l0Y2ggKG1iY3AtPm1ib3hfb3V0WzBdKSB7CisKKwkvKiBUaGlzIGNhc2UgaXMgb25seSBhY3RpdmUgd2hlbiB3ZSBhcnJpdmUgaGVyZQorCSAqIGFzIGEgcmVzdWx0IG9mIGlzc3VpbmcgYSBtYWlsYm94IGNvbW1hbmQgdG8KKwkgKiB0aGUgZmlybXdhcmUuCisJICovCisJY2FzZSBNQl9DTURfU1RTX0lOVFJNRFQ6CisJY2FzZSBNQl9DTURfU1RTX0dPT0Q6CisJY2FzZSBNQl9DTURfU1RTX0lOVkxEX0NNRDoKKwljYXNlIE1CX0NNRF9TVFNfWEZDX0VSUjoKKwljYXNlIE1CX0NNRF9TVFNfQ1NVTV9FUlI6CisJY2FzZSBNQl9DTURfU1RTX0VSUjoKKwljYXNlIE1CX0NNRF9TVFNfUEFSQU1fRVJSOgorCQkvKiBXZSBjYW4gb25seSBnZXQgbWFpbGJveCBzdGF0dXMgaWYgd2UncmUgcG9sbGluZyBmcm9tIGFuCisJCSAqIHVuZmluaXNoZWQgY29tbWFuZC4gIEdldCB0aGUgcmVzdCBvZiB0aGUgc3RhdHVzIGRhdGEgYW5kCisJCSAqIHJldHVybiBiYWNrIHRvIHRoZSBjYWxsZXIuCisJCSAqIFdlIG9ubHkgZW5kIHVwIGhlcmUgd2hlbiB3ZSdyZSBwb2xsaW5nIGZvciBhIG1haWxib3gKKwkJICogY29tbWFuZCBjb21wbGV0aW9uLgorCQkgKi8KKwkJbWJjcC0+b3V0X2NvdW50ID0gb3JpZ19jb3VudDsKKwkJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIFdlIGFyZSBiZWluZyBhc2tlZCBieSBmaXJtd2FyZSB0byBhY2NlcHQKKwkgKiBhIGNoYW5nZSB0byB0aGUgcG9ydC4gIFRoaXMgaXMgb25seQorCSAqIGEgY2hhbmdlIHRvIG1heCBmcmFtZSBzaXplcyAoVHgvUngpLCBwYXVzZQorCSAqIHBhcmFtdGVycywgb3IgbG9vcGJhY2sgbW9kZS4KKwkgKi8KKwljYXNlIEFFTl9JRENfUkVROgorCQlzdGF0dXMgPSBxbF9pZGNfcmVxX2FlbihxZGV2KTsKKwkJYnJlYWs7CisKKwkvKiBQcm9jZXNzIGFuZCBpbmJvdW5kIElEQyBldmVudC4KKwkgKiBUaGlzIHdpbGwgaGFwcGVuIHdoZW4gd2UncmUgdHJ5aW5nIHRvCisJICogY2hhbmdlIHR4L3J4IG1heCBmcmFtZSBzaXplLCBjaGFuZ2UgcGF1c2UKKwkgKiBwYXJhbXRlcnMgb3IgbG9vcGJhY2sgbW9kZS4KKwkgKi8KKwljYXNlIEFFTl9JRENfQ01QTFQ6CisJY2FzZSBBRU5fSURDX0VYVDoKKwkJc3RhdHVzID0gcWxfaWRjX2NtcGx0X2FlbihxZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9MSU5LX1VQOgorCQlxbF9saW5rX3VwKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0xJTktfRE9XTjoKKwkJcWxfbGlua19kb3duKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0ZXX0lOSVRfRE9ORToKKwkJLyogSWYgd2UncmUgaW4gcHJvY2VzcyBvbiBleGVjdXRpbmcgdGhlIGZpcm13YXJlLAorCQkgKiB0aGVuIGNvbnZlcnQgdGhlIHN0YXR1cyB0byBub3JtYWwgbWFpbGJveCBzdGF0dXMuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfRVhfRlcpIHsKKwkJCW1iY3AtPm91dF9jb3VudCA9IG9yaWdfY291bnQ7CisJCQlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCQkJbWJjcC0+bWJveF9vdXRbMF0gPSBNQl9DTURfU1RTX0dPT0Q7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCXFsX2luaXRfZndfZG9uZShxZGV2LCBtYmNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9BRU5fU0ZQX0lOOgorCQlxbF9zZnBfaW4ocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJY2FzZSBBRU5fQUVOX1NGUF9PVVQ6CisJCXFsX3NmcF9vdXQocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJLyogVGhpcyBldmVudCBjYW4gYXJyaXZlIGF0IGJvb3QgdGltZSBvciBhZnRlciBhbgorCSAqIE1QSSByZXNldCBpZiB0aGUgZmlybXdhcmUgZmFpbGVkIHRvIGluaXRpYWxpemUuCisJICovCisJY2FzZSBBRU5fRldfSU5JVF9GQUlMOgorCQkvKiBJZiB3ZSdyZSBpbiBwcm9jZXNzIG9uIGV4ZWN1dGluZyB0aGUgZmlybXdhcmUsCisJCSAqIHRoZW4gY29udmVydCB0aGUgc3RhdHVzIHRvIG5vcm1hbCBtYWlsYm94IHN0YXR1cy4KKwkJICovCisJCWlmIChtYmNwLT5tYm94X2luWzBdID09IE1CX0NNRF9FWF9GVykgeworCQkJbWJjcC0+b3V0X2NvdW50ID0gb3JpZ19jb3VudDsKKwkJCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJCQltYmNwLT5tYm94X291dFswXSA9IE1CX0NNRF9TVFNfRVJSOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkZpcm13YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9TWVNfRVJSOgorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIlN5c3RlbSBFcnJvci5cbiIpOworCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwkJc3RhdHVzID0gLUVJTzsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9BRU5fTE9TVDoKKwkJcWxfYWVuX2xvc3QocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJVbnN1cHBvcnRlZCBBRSAlLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzBdKTsKKwkJLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCisJfQorZW5kOgogCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEV4ZWN1dGUgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kLgorICogbWJjcCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdTMyLiAgRWFjaAorICogZWxlbWVudCBpbiB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHZhbHVlIGZvciBpdCdzCisgKiByZXNwZWN0aXZlIG1haWxib3ggcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgcWxfbWFpbGJveF9jb21tYW5kKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1cywgY291bnQ7CisKKwltdXRleF9sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOworCisJLyogQmVnaW4gcG9sbGVkIG1vZGUgZm9yIE1QSSAqLworCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CisKKwkvKiBMb2FkIHRoZSBtYWlsYm94IHJlZ2lzdGVycyBhbmQgd2FrZSB1cCBNUEkgUklTQy4gKi8KKwlzdGF0dXMgPSBxbF9leGVjX21iX2NtZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVuZDsKKworCisJLyogSWYgd2UncmUgZ2VuZXJhdGluZyBhIHN5c3RlbSBlcnJvciwgdGhlbiB0aGVyZSdzIG5vdGhpbmcKKwkgKiB0byB3YWl0IGZvci4KKwkgKi8KKwlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfTUFLRV9TWVNfRVJSKQorCQlnb3RvIGVuZDsKKworCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBXZSBsb29wCisJICogaGVyZSBiZWNhdXNlIHNvbWUgQUVOIG1pZ2h0IGFycml2ZSB3aGlsZQorCSAqIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQgdG8KKwkgKiBjb21wbGV0ZS4gSWYgbW9yZSB0aGFuIDUgYXJyaXZlIHRoZW4gd2UgY2FuCisJICogYXNzdW1lIHNvbWV0aGluZyBpcyB3cm9uZy4gKi8KKwljb3VudCA9IDU7CisJZG8geworCQkvKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0IHRvIGNvbWUgaW4uICovCisJCXN0YXR1cyA9IHFsX3dhaXRfbWJ4X2NtZF9jbXBsdChxZGV2KTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCisJCS8qIFByb2Nlc3MgdGhlIGV2ZW50LiAgSWYgaXQncyBhbiBBRU4sIGl0CisJCSAqIHdpbGwgYmUgaGFuZGxlZCBpbi1saW5lIG9yIGEgd29ya2VyCisJCSAqIHdpbGwgYmUgc3Bhd25lZC4gSWYgaXQncyBvdXIgY29tcGxldGlvbgorCQkgKiB3ZSB3aWxsIGNhdGNoIGl0IGJlbG93LgorCQkgKi8KKwkJc3RhdHVzID0gcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKworCQkvKiBJdCdzIGVpdGhlciB0aGUgY29tcGxldGlvbiBmb3Igb3VyIG1haWxib3gKKwkJICogY29tbWFuZCBjb21wbGV0ZSBvciBhbiBBRU4uICBJZiBpdCdzIG91cgorCQkgKiBjb21wbGV0aW9uIHRoZW4gZ2V0IG91dC4KKwkJICovCisJCWlmICgoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgPT0KKwkJCQkJTUJfQ01EX1NUU19HT09EKSB8fAorCQkJKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApID09CisJCQkJCU1CX0NNRF9TVFNfSU5UUk1EVCkpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLWNvdW50KTsKKworCWlmICghY291bnQpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOworCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBOb3cgd2UgY2FuIGNsZWFyIHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uCisJICogYW5kIGxvb2sgYXQgb3VyIHN0YXR1cy4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9DTFJfUjJQQ0lfSU5UKTsKKworCWlmICgoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgIT0KKwkJCQkJTUJfQ01EX1NUU19HT09EKSAmJgorCQkoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgIT0KKwkJCQkJTUJfQ01EX1NUU19JTlRSTURUKSkgeworCQlxbF9kaXNwbGF5X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOworCS8qIEVuZCBwb2xsZWQgbW9kZSBmb3IgTVBJICovCisJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpIHwgSU5UUl9NQVNLX1BJKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgZnVuY3Rpb25hbCBzdGF0ZSBmb3IgTVBJIGZpcm13YXJlLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBxbF9tYl9nZXRfZndfc3RhdGUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAyOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9HRVRfRldfU1RBVEU7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogSWYgYml0IHplcm8gaXMgc2V0IGluIG1ieCAxIHRoZW4gdGhlIGZpcm13YXJlIGlzCisJICogcnVubmluZywgYnV0IG5vdCBpbml0aWFsaXplZC4gIFRoaXMgc2hvdWxkIG5ldmVyCisJICogaGFwcGVuLgorCSAqLworCWlmIChtYmNwLT5tYm94X291dFsxXSAmIDEpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGaXJtd2FyZSB3YWl0aW5nIGZvciBpbml0aWFsaXphdGlvbi5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFNlbmQgYW5kIEFDSyBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlIHRvCisgKiBsZXQgaXQgY29udGludWUgd2l0aCB0aGUgY2hhbmdlLgorICovCitpbnQgcWxfbWJfaWRjX2FjayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7CisJaW50IHN0YXR1cyA9IDA7CisKKwltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOworCisJbWJjcC0+aW5fY291bnQgPSA1OworCW1iY3AtPm91dF9jb3VudCA9IDE7CisKKwltYmNwLT5tYm94X2luWzBdID0gTUJfQ01EX0lEQ19BQ0s7CisJbWJjcC0+bWJveF9pblsxXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbMV07CisJbWJjcC0+bWJveF9pblsyXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbMl07CisJbWJjcC0+bWJveF9pblszXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbM107CisJbWJjcC0+bWJveF9pbls0XSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbNF07CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgSURDIEFDSyBzZW5kLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdldCBsaW5rIHNldHRpbmdzIGFuZCBtYXhpbXVtIGZyYW1lIHNpemUgc2V0dGluZ3MKKyAqIGZvciB0aGUgY3VycmVudCBwb3J0LgorICogTW9zdCBsaWtlbHkgd2lsbCBibG9jay4KKyAqLworc3RhdGljIGludCBxbF9tYl9zZXRfcG9ydF9jZmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMzsKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9TRVRfUE9SVF9DRkc7CisJbWJjcC0+bWJveF9pblsxXSA9IHFkZXYtPmxpbmtfY29uZmlnOworCW1iY3AtPm1ib3hfaW5bMl0gPSBxZGV2LT5tYXhfZnJhbWVfc2l6ZTsKKworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19JTlRSTURUKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiUG9ydCBDb25maWcgc2VudCwgd2FpdCBmb3IgSURDLlxuIik7CisJfSBlbHNlCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgU2V0IFBvcnQgQ29uZmlndXJhdGlvbi5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgbGluayBzZXR0aW5ncyBhbmQgbWF4aW11bSBmcmFtZSBzaXplIHNldHRpbmdzCisgKiBmb3IgdGhlIGN1cnJlbnQgcG9ydC4KKyAqIE1vc3QgbGlrZWx5IHdpbGwgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgcWxfbWJfZ2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzID0gMDsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDE7CisJbWJjcC0+b3V0X2NvdW50ID0gMzsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfR0VUX1BPUlRfQ0ZHOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9IGVsc2UJeworCQlRUFJJTlRLKHFkZXYsIERSViwgREVCVUcsCisJCQkiUGFzc2VkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJcWRldi0+bGlua19jb25maWcgPSBtYmNwLT5tYm94X291dFsxXTsKKwkJcWRldi0+bWF4X2ZyYW1lX3NpemUgPSBtYmNwLT5tYm94X291dFsyXTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogSURDIC0gSW50ZXIgRGV2aWNlIENvbW11bmljYXRpb24uLi4KKyAqIFNvbWUgZmlybXdhcmUgY29tbWFuZHMgcmVxdWlyZSBjb25zZW50IG9mIGFkamFjZW50IEZDT0UKKyAqIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdGhlIE9LLCBvciBhCisgKiBjb3VudGVyLXJlcXVlc3QgZm9yIGEgbGl0dGxlIG1vcmUgdGltZS5pCisgKiBUaGUgZmlybXdhcmUgd2lsbCBjb21wbGV0ZSB0aGUgcmVxdWVzdCBpZiB0aGUgb3RoZXIKKyAqIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzcG9uZC4KKyAqLworc3RhdGljIGludCBxbF9pZGNfd2FpdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzID0gLUVUSU1FRE9VVDsKKwlsb25nIHdhaXRfdGltZSA9IDEgKiBIWjsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwlkbyB7CisJCS8qIFdhaXQgaGVyZSBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUKKwkJICogdmlhIHRoZSBJREMgcHJvY2Vzcy4KKwkJICovCisJCXdhaXRfdGltZSA9CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnFkZXYtPmlkZV9jb21wbGV0aW9uLAorCQkJCQkJCXdhaXRfdGltZSk7CisJCWlmICghd2FpdF90aW1lKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgVGltZW91dC5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogTm93IGV4YW1pbmUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIElEQyBwcm9jZXNzLgorCQkgKiBXZSBtaWdodCBoYXZlIGEgZ29vZCBjb21wbGV0aW9uIG9yIGEgcmVxdWVzdCBmb3IKKwkJICogbW9yZSB3YWl0IHRpbWUuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gQUVOX0lEQ19FWFQpIHsKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkJIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CisJCQl3YWl0X3RpbWUgKz0gKG1iY3AtPm1ib3hfb3V0WzFdID4+IDgpICYgMHgwMDAwMDAwZjsKKwkJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBBRU5fSURDX0NNUExUKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgU3VjY2Vzcy5cbiIpOworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCQkiSURDOiBJbnZhbGlkIFN0YXRlIDB4JS4wNHguXG4iLAorCQkJCW1iY3AtPm1ib3hfb3V0WzBdKTsKKwkJCXN0YXR1cyA9IC1FSU87CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHdhaXRfdGltZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBBUEkgY2FsbGVkIGluIHdvcmsgdGhyZWFkIGNvbnRleHQgdG8gc2V0IG5ldyBUWC9SWAorICogbWF4aW11bSBmcmFtZSBzaXplIHZhbHVlcyB0byBtYXRjaCBNVFUuCisgKi8KK3N0YXRpYyBpbnQgcWxfc2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RhdHVzID0gcWxfbWJfc2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfaWRjX3dhaXQocWRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgd29ya2VyIHRocmVhZHMgdGhhdCBwcm9jZXNzCisgKiBldmVudHMgdGhhdCBtYXkgc2xlZXAgd2FpdGluZyBmb3IgY29tcGxldGlvbi4KKyAqLworCisvKiBUaGlzIHRocmVhZCBnZXRzIHRoZSBtYXhpbXVtIFRYIGFuZCBSWCBmcmFtZSBzaXplIHZhbHVlcworICogZnJvbSB0aGUgZmlybXdhcmUgYW5kLCBpZiBuZWNlc3NhcnksIGNoYW5nZXMgdGhlbSB0byBtYXRjaAorICogdGhlIE1UVSBzZXR0aW5nLgorICovCit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxfYWRhcHRlciwgbXBpX3BvcnRfY2ZnX3dvcmsud29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9tYl9nZXRfcG9ydF9jZmcocWRldik7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkJ1ZzogRmFpbGVkIHRvIGdldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChuZGV2LT5tdHUgPD0gMjUwMCkKKwkJZ290byBlbmQ7CisJZWxzZSBpZiAocWRldi0+bGlua19jb25maWcgJiBDRkdfSlVNQk9fRlJBTUVfU0laRSAmJgorCQkJcWRldi0+bWF4X2ZyYW1lX3NpemUgPT0KKwkJCUNGR19ERUZBVUxUX01BWF9GUkFNRV9TSVpFKQorCQlnb3RvIGVuZDsKKworCXFkZXYtPmxpbmtfY29uZmlnIHw9CUNGR19KVU1CT19GUkFNRV9TSVpFOworCXFkZXYtPm1heF9mcmFtZV9zaXplID0gQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkU7CisJc3RhdHVzID0gcWxfc2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IEZhaWxlZCB0byBzZXQgcG9ydCBjb25maWcgZGF0YS5cbiIpOworCQlnb3RvIGVycjsKKwl9CitlbmQ6CisJY2xlYXJfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpOworCXJldHVybjsKK2VycjoKKwlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwlnb3RvIGVuZDsKK30KKworLyogUHJvY2VzcyBhbiBpbnRlci1kZXZpY2UgcmVxdWVzdC4gIFRoaXMgaXMgaXNzdWVzIGJ5CisgKiB0aGUgZmlybXdhcmUgaW4gcmVzcG9uc2UgdG8gYW5vdGhlciBmdW5jdGlvbiByZXF1ZXN0aW5nCisgKiBhIGNoYW5nZSB0byB0aGUgcG9ydC4gV2Ugc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSBhIGNoYW5nZQorICogaGFzIGJlZW4gbWFkZSBhbmQgdGhlbiBzZW5kIGEgbWFpbGJveCBjb21tYW5kIEFDS2luZworICogdGhlIGNoYW5nZSByZXF1ZXN0LgorICovCit2b2lkIHFsX21waV9pZGNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9pZGNfd29yay53b3JrKTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZxZGV2LT5pZGNfbWJjOworCXUzMiBhZW47CisKKwlhZW4gPSBtYmNwLT5tYm94X291dFsxXSA+PiAxNjsKKworCXN3aXRjaCAoYWVuKSB7CisJZGVmYXVsdDoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IFVuaGFuZGxlZCBJREMgYWN0aW9uLlxuIik7CisJCWJyZWFrOworCWNhc2UgTUJfQ01EX1BPUlRfUkVTRVQ6CisJY2FzZSBNQl9DTURfU0VUX1BPUlRfQ0ZHOgorCWNhc2UgTUJfQ01EX1NUT1BfRlc6CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOworCQkvKiBTaWduYWwgdGhlIHJlc3VsdGluZyBsaW5rIHVwIEFFTgorCQkgKiB0aGF0IHRoZSBmcmFtZSByb3V0aW5nIGFuZCBtYWMgYWRkcgorCQkgKiBuZWVkcyB0byBiZSBzZXQuCisJCSAqICovCisJCXNldF9iaXQoUUxfQ0FNX1JUX1NFVCwgJnFkZXYtPmZsYWdzKTsKKwkJc3RhdHVzID0gcWxfbWJfaWRjX2FjayhxZGV2KTsKKwkJaWYgKHN0YXR1cykgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IE5vIHBlbmRpbmcgSURDIVxuIik7CisJCX0KKwl9CiB9CiAKIHZvaWQgcWxfbXBpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTA0LDM3ICs4MzEsMTYgQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBtcGlfd29yay53b3JrKTsKIAlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOwogCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7Ci0JbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW11dGV4X2xvY2soJnFkZXYtPm1waV9tdXRleCk7CiAKIAl3aGlsZSAocWxfcmVhZDMyKHFkZXYsIFNUUykgJiBTVFNfUEkpIHsKLQkJaWYgKHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCkpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKLQkJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7Ci0JCX0KLQotCQlzd2l0Y2ggKG1iY3AtPm1ib3hfb3V0WzBdKSB7Ci0JCWNhc2UgQUVOX0xJTktfVVA6Ci0JCQlxbF9saW5rX3VwKHFkZXYsIG1iY3ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUVOX0xJTktfRE9XTjoKLQkJCXFsX2xpbmtfZG93bihxZGV2LCBtYmNwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFFTl9GV19JTklUX0RPTkU6Ci0JCQlxbF9pbml0X2Z3X2RvbmUocWRldiwgbWJjcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBNQl9DTURfU1RTX0dPT0Q6Ci0JCQlicmVhazsKLQkJY2FzZSBBRU5fRldfSU5JVF9GQUlMOgotCQljYXNlIEFFTl9TWVNfRVJSOgotCQljYXNlIE1CX0NNRF9TVFNfRVJSOgotCQkJcWxfcXVldWVfZndfZXJyb3IocWRldik7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBDbGVhciB0aGUgTVBJIGZpcm13YXJlIHN0YXR1cy4gKi8KLQkJCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOwotCQkJYnJlYWs7Ci0JCX0KKwkJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKwkJbWJjcC0+b3V0X2NvdW50ID0gMTsKKwkJcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CiAJfQorCisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOwogCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCAwKTsKIH0KIApAQCAtMTQyLDkgKzg0OCw4IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9yZXNldF93b3JrLndvcmspOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCSJFbnRlciwgcWRldiA9ICVwLi5cbiIsIHFkZXYpOwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX1NFVF9SU1QpOwotCW1zbGVlcCg1MCk7Ci0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1JTVCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOworCXFsX3NvZnRfcmVzZXRfbXBpX3Jpc2MocWRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yNjA0MC5jIGIvZHJpdmVycy9uZXQvcjYwNDAuYwppbmRleCBiMmRjZGI1Li4wYTM3Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yNjA0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKQEAgLTQ5LDEyICs0OSwxMiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicjYwNDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIxIgotI2RlZmluZSBEUlZfUkVMREFURQkiMDlKYW4yMDA5IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjI1TWFyMjAwOSIKIAogLyogUEhZIENISVAgQWRkcmVzcyAqLwogI2RlZmluZSBQSFkxX0FERFIJMQkvKiBGb3IgTUFDMSAqLwotI2RlZmluZSBQSFkyX0FERFIJMgkvKiBGb3IgTUFDMiAqLworI2RlZmluZSBQSFkyX0FERFIJMwkvKiBGb3IgTUFDMiAqLwogI2RlZmluZSBQSFlfTU9ERQkweDMxMDAJLyogUEhZIENISVAgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBQSFlfQ0FQCQkweDAxRTEJLyogUEhZIENISVAgUmVnaXN0ZXIgNCAqLwogCkBAIC00ODQsMTIgKzQ4NCwxMiBAQAogCS8qIEZyZWUgRGVzY3JpcHRvciBtZW1vcnkgKi8KIAlpZiAobHAtPnJ4X3JpbmcpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9ERVNDX1NJWkUsIGxwLT5yeF9yaW5nLCBscC0+cnhfcmluZ19kbWEpOwotCQlscC0+cnhfcmluZyA9IDA7CisJCWxwLT5yeF9yaW5nID0gTlVMTDsKIAl9CiAKIAlpZiAobHAtPnR4X3JpbmcpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9ERVNDX1NJWkUsIGxwLT50eF9yaW5nLCBscC0+dHhfcmluZ19kbWEpOwotCQlscC0+dHhfcmluZyA9IDA7CisJCWxwLT50eF9yaW5nID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTY3Niw3ICs2NzYsNyBAQAogCXdvcmtfZG9uZSA9IHI2MDQwX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIEVuYWJsZSBSWCBpbnRlcnJ1cHQgKi8KIAkJaW93cml0ZTE2KGlvcmVhZDE2KGlvYWRkciArIE1JRVIpIHwgUlhfSU5UUywgaW9hZGRyICsgTUlFUik7CiAJfQpAQCAtNzEzLDcgKzcxMyw3IEBACiAKIAkJLyogTWFzayBvZmYgUlggaW50ZXJydXB0ICovCiAJCW1pc3IgJj0gflJYX0lOVFM7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAl9CiAKIAkvKiBUWCBpbnRlcnJ1cHQgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNDNmZWRiOS4uMDZjNTM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0zNTkzLDggKzM1OTMsOCBAQAogCQlSVExfVzE2KEludHJNYXNrLCB0cC0+aW50cl9ldmVudCAmIH50cC0+bmFwaV9ldmVudCk7CiAJCXRwLT5pbnRyX21hc2sgPSB+dHAtPm5hcGlfZXZlbnQ7CiAKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCQllbHNlIGlmIChuZXRpZl9tc2dfaW50cih0cCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHQgJTA0eCBpbiBwb2xsXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKQEAgLTM2MTUsNyArMzYxNSw3IEBACiAJcnRsODE2OV90eF9pbnRlcnJ1cHQoZGV2LCB0cCwgaW9hZGRyKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXRwLT5pbnRyX21hc2sgPSAweGZmZmY7CiAJCS8qCiAJCSAqIDIwMDQwNDI2OiB0aGUgYmFycmllciBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgYnV0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCBhNmZkMjdhLi5lYzU5ZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtMzYyLDggKzM2Miw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUklPTkVUX1JYX1JJTkdfU0laRTsgaSsrKQotCQlpZiAocm5ldC0+cnhfc2tiW2ldKQotCQkJa2ZyZWVfc2tiKHJuZXQtPnJ4X3NrYltpXSk7CisJCWtmcmVlX3NrYihybmV0LT5yeF9za2JbaV0pOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgJnJpb25ldF9wZWVycywgbm9kZSkgewogCQlpZiAocmlvbmV0X2FjdGl2ZVtwZWVyLT5yZGV2LT5kZXN0aWRdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggZjVjNTdjMC4uMTY4NjhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMjg1Miw3ICsyODUyLDcgQEAKIAlzMmlvX2Noa19yeF9idWZmZXJzKG5pYywgcmluZyk7CiAKIAlpZiAocGt0c19wcm9jZXNzZWQgPCBidWRnZXRfb3JnKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKlJlIEVuYWJsZSBNU0ktUnggVmVjdG9yKi8KIAkJYWRkciA9ICh1OCBfX2lvbWVtICopJmJhcjAtPnhtc2lfbWFza19yZWc7CiAJCWFkZHIgKz0gNyAtIHJpbmctPnJpbmdfbm87CkBAIC0yODg5LDcgKzI4ODksNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChwa3RzX3Byb2Nlc3NlZCA8IGJ1ZGdldF9vcmcpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIFJlIGVuYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIHJpbmcgKi8KIAkJd3JpdGVxKDAsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQlyZWFkbCgmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKQEAgLTM4NjIsNyArMzg2Miw3IEBACiAJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5pYy0+cGRldiwgbmljLT5lbnRyaWVzLCBuaWMtPm51bV9lbnRyaWVzKTsKIAkvKiBXZSBmYWlsIGluaXQgaWYgZXJyb3Igb3Igd2UgZ2V0IGxlc3MgdmVjdG9ycyB0aGFuIG1pbiByZXF1aXJlZCAqLwogCWlmIChyZXQpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRW5hYmxpbmcgTVNJWCBmYWlsZWRcbiIsIG5pYy0+ZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBFbmFibGluZyBNU0ktWCBmYWlsZWRcbiIpOwogCQlrZnJlZShuaWMtPmVudHJpZXMpOwogCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCiAJCQkrPSAobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwpAQCAtNDM0Miw3ICs0MzQyLDcgQEAKIAkJdmFsOCA9IChyaW5nLT5yaW5nX25vID09IDApID8gMHg3ZiA6IDB4ZmY7CiAJCXdyaXRlYih2YWw4LCBhZGRyKTsKIAkJdmFsOCA9IHJlYWRiKGFkZHIpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmcmluZy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnJpbmctPm5hcGkpOwogCX0gZWxzZSB7CiAJCXJ4X2ludHJfaGFuZGxlcihyaW5nLCAwKTsKIAkJczJpb19jaGtfcnhfYnVmZmVycyhzcCwgcmluZyk7CkBAIC00Nzg5LDcgKzQ3ODksNyBAQAogCiAJCWlmIChjb25maWctPm5hcGkpIHsKIAkJCWlmIChyZWFzb24gJiBHRU5fSU5UUl9SWFRSQUZGSUMpIHsKLQkJCQluZXRpZl9yeF9zY2hlZHVsZSgmc3AtPm5hcGkpOworCQkJCW5hcGlfc2NoZWR1bGUoJnNwLT5uYXBpKTsKIAkJCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQkJCXdyaXRlcShTMklPX01JTlVTX09ORSwgJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKIAkJCQlyZWFkbCgmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwpAQCAtNzIyMCw3ICs3MjIwLDYgQEAKIAogCS8qIEluaXRpYWxpc2UgbmFwaSAqLwogCWlmIChjb25maWctPm5hcGkpIHsKLQkJaW50IGk7CiAJCWlmIChjb25maWctPmludHJfdHlwZSA9PSAgTVNJX1gpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnJ4X3JpbmdfbnVtOyBpKyspCiAJCQkJbmFwaV9lbmFibGUoJnNwLT5tYWNfY29udHJvbC5yaW5nc1tpXS5uYXBpKTsKQEAgLTc1NDIsNiArNzU0MSw3IEBACiAKIAlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKIHNlbmRfdXA6CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJpbmdfbm8pOwogCXF1ZXVlX3J4X2ZyYW1lKHNrYiwgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKTsKIGFnZ3JlZ2F0ZToKIAlzcC0+bWFjX2NvbnRyb2wucmluZ3NbcmluZ19ub10ucnhfYnVmc19sZWZ0IC09IDE7CkBAIC04MDA5LDggKzgwMDksNyBAQAogCQlpZiAocmV0KSB7CiAKIAkJCURCR19QUklOVChFUlJfREJHLAotCQkJICAiJXM6IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIiwKLQkJCSAgZGV2LT5uYW1lKTsKKwkJCSAgInMyaW86IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIik7CiAJCQlzcC0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKaW5kZXggMzFlMzhmYS4uODhkZDJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwpAQCAtMjAzOSw5ICsyMDM5LDkgQEAKIAkJc2JkbWFfdHhfcHJvY2VzcyhzYywmKHNjLT5zYm1fdHhkbWEpLCAwKTsKIAogCWlmIChpc3IgJiAoTV9NQUNfSU5UX0NIQU5ORUwgPDwgU19NQUNfUlhfQ0gwKSkgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmc2MtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnNjLT5uYXBpKSkgewogCQkJX19yYXdfd3JpdGVxKDAsIHNjLT5zYm1faW1yKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnNjLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmc2MtPm5hcGkpOwogCQkJLyogRGVwZW5kIG9uIHRoZSBleGl0IGZyb20gcG9sbCB0byByZWVuYWJsZSBpbnRyICovCiAJCX0KIAkJZWxzZSB7CkBAIC0yNDc4LDcgKzI0NzgsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXBoeV9kZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9kZXYtPmRldi5idXNfaWQsICZzYm1hY19taWlfcG9sbCwgMCwKKwlwaHlfZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5X2Rldi0+ZGV2KSwgJnNibWFjX21paV9wb2xsLCAwLAogCQkJICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOwogCWlmIChJU19FUlIocGh5X2RldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CkBAIC0yNTAwLDcgKzI1MDAsNyBAQAogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKIAkJZGV2LT5uYW1lLCBwaHlfZGV2LT5kcnYtPm5hbWUsCi0JCXBoeV9kZXYtPmRldi5idXNfaWQsIHBoeV9kZXYtPmlycSk7CisJCWRldl9uYW1lKCZwaHlfZGV2LT5kZXYpLCBwaHlfZGV2LT5pcnEpOwogCiAJc2MtPnBoeV9kZXYgPSBwaHlfZGV2OwogCkBAIC0yNjY3LDcgKzI2NjcsNyBAQAogCXNiZG1hX3R4X3Byb2Nlc3Moc2MsICYoc2MtPnNibV90eGRtYSksIDEpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogI2lmZGVmIENPTkZJR19TQk1BQ19DT0FMRVNDRQogCQlfX3Jhd193cml0ZXEoKChNX01BQ19JTlRfRU9QX0NPVU5UIHwgTV9NQUNfSU5UX0VPUF9USU1FUikgPDwgU19NQUNfVFhfQ0gwKSB8CkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCXNibV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghc2JtX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIG1hcCBkZXZpY2UgcmVnaXN0ZXJzXG4iLAotCQkgICAgICAgcGxkZXYtPmRldi5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoJnBsZGV2LT5kZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfb3V0OwogCX0KQEAgLTI3MDgsNyArMjcwOCw3IEBACiAJICogSWYgd2UgZmluZCBhIHplcm8sIHNraXAgdGhpcyBNQUMuCiAJICovCiAJc2JtYWNfb3JpZ19od2FkZHIgPSBfX3Jhd19yZWFkcShzYm1fYmFzZSArIFJfTUFDX0VUSEVSTkVUX0FERFIpOwotCXByX2RlYnVnKCIlczogJXNjb25maWd1cmluZyBNQUMgYXQgMHglMDhMeFxuIiwgcGxkZXYtPmRldi5idXNfaWQsCisJcHJfZGVidWcoIiVzOiAlc2NvbmZpZ3VyaW5nIE1BQyBhdCAweCUwOEx4XG4iLCBkZXZfbmFtZSgmcGxkZXYtPmRldiksCiAJCSBzYm1hY19vcmlnX2h3YWRkciA/ICIiIDogIm5vdCAiLCAobG9uZyBsb25nKXJlcy0+c3RhcnQpOwogCWlmIChzYm1hY19vcmlnX2h3YWRkciA9PSAwKSB7CiAJCWVyciA9IDA7CkBAIC0yNzIxLDcgKzI3MjEsNyBAQAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc2JtYWNfc29mdGMpKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgZXRoZXJkZXZcbiIsCi0JCSAgICAgICBwbGRldi0+ZGV2LmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZSgmcGxkZXYtPmRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bm1hcDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKaW5kZXggOGI3NWJlZi4uYzEzY2JmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwpAQCAtMTMsNiArMTMsOSBAQAogICogIEJvdGggYXJlIGFsbW9zdCBpZGVudGljYWwgYW5kIHNlZW0gdG8gYmUgYmFzZWQgb24gcGNpLXNrZWxldG9uLmMKICAqCiAgKiAgUmV3cml0dGVuIGZvciAyLjYgYnkgQ2VzYXIgRWR1YXJkbyBCYXJyb3MKKyAqCisgKiAgQSBkYXRhc2hlZXQgZm9yIHRoaXMgY2hpcCBjYW4gYmUgZm91bmQgYXQKKyAqICBodHRwOi8vd3d3LnNpbGFuLmNvbS5jbi9lbmdsaXNoL3Byb2R1Y3RzL3BkZi9TQzkyMDMxQVkucGRmCiAgKi8KIAogLyogTm90ZSBhYm91dCBzZXRfbWFjX2FkZHJlc3M6IEkgZG9uJ3Qga25vdyBob3cgdG8gY2hhbmdlIHRoZSBoYXJkd2FyZQpAQCAtMzEsMTMgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJTEFOCQkweDE5MDQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUxBTl9TQzkyMDMxCTB4MjAzMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJTEFOXzgxMzlECTB4ODEzOQotCiAjZGVmaW5lIFNDOTIwMzFfTkFNRSAic2M5MjAzMSIKLSNkZWZpbmUgU0M5MjAzMV9ERVNDUklQVElPTiAiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIKLSNkZWZpbmUgU0M5MjAzMV9WRVJTSU9OICIyLjBjIgogCiAvKiBCQVIgMCBpcyBNTUlPLCBCQVIgMSBpcyBQSU8gKi8KICNpZm5kZWYgU0M5MjAzMV9VU0VfQkFSCkBAIC0xMjY0LDcgKzEyNjEsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcHJpdi0+cGRldjsKIAogCXN0cmNweShkcnZpbmZvLT5kcml2ZXIsIFNDOTIwMzFfTkFNRSk7Ci0Jc3RyY3B5KGRydmluZm8tPnZlcnNpb24sIFNDOTIwMzFfVkVSU0lPTik7CiAJc3RyY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShwZGV2KSk7CiB9CiAKQEAgLTE0MjMsNiArMTQxOSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2M5MjAzMV9wcml2ICpwcml2OwogCXUzMiBtYWMwLCBtYWMxOworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHVubGlrZWx5KGVyciA8IDApKQpAQCAtMTQ5Nyw2ICsxNDk0LDE0IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X3JlZ2lzdGVyX25ldGRldjsKIAorI2lmIFNDOTIwMzFfVVNFX0JBUiA9PSAwCisJYmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQ7CisjZWxpZiBTQzkyMDMxX1VTRV9CQVIgPT0gMQorCWJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOworI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNDOTIwMzEgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCQliYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKKwogCXJldHVybiAwOwogCiBvdXRfcmVnaXN0ZXJfbmV0ZGV2OgpAQCAtMTU4Niw4ICsxNTkxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIFBDSV9ERVZJQ0VfSURfU0lMQU5fU0M5MjAzMSkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgUENJX0RFVklDRV9JRF9TSUxBTl84MTM5RCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHgyMDMxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCAweDgxMzkpIH0sCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZSk7CkBAIC0xNjAzLDcgKzE2MDgsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzYzkyMDMxX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFNDOTIwMzFfREVTQ1JJUFRJT04gIiAiIFNDOTIwMzFfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2M5MjAzMV9wY2lfZHJpdmVyKTsKIH0KIApAQCAtMTYxNyw1ICsxNjIxLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2VzYXIgRWR1YXJkbyBCYXJyb3MgPGNlc2FyYkBjZXNhcmIubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKFNDOTIwMzFfREVTQ1JJUFRJT04pOwotTU9EVUxFX1ZFUlNJT04oU0M5MjAzMV9WRVJTSU9OKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2VlcTgwMDUuYyBiL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKaW5kZXggMTJhOGZmZi4uZWJiYmUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2VlcTgwMDUuYworKysgYi9kcml2ZXJzL25ldC9zZWVxODAwNS5jCkBAIC0xNDMsNiArMTQzLDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzZWVxODAwNV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzZWVxODAwNV9vcGVuLAorCS5uZG9fc3RvcAkJPSBzZWVxODAwNV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gc2VlcTgwMDVfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IHNlZXE4MDA1X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoaXMgaXMgdGhlIHJlYWwgcHJvYmUgcm91dGluZS4gIExpbnV4IGhhcyBhIGhpc3Rvcnkgb2YgZnJpZW5kbHkgZGV2aWNlCiAgICBwcm9iZXMgb24gdGhlIElTQSBidXMuICBBIGdvb2QgZGV2aWNlIHByb2JlcyBhdm9pZHMgZG9pbmcgd3JpdGVzLCBhbmQKICAgIHZlcmlmaWVzIHRoYXQgdGhlIGNvcnJlY3QgZGV2aWNlIGV4aXN0cyBhbmQgZnVuY3Rpb25zLiAgKi8KQEAgLTMzMiwxMiArMzQzLDggQEAKIAkJIH0KIAl9CiAjZW5kaWYKLQlkZXYtPm9wZW4JCT0gc2VlcTgwMDVfb3BlbjsKLQlkZXYtPnN0b3AJCT0gc2VlcTgwMDVfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgCT0gc2VlcTgwMDVfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IHNlZXE4MDA1X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNlZXE4MDA1X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaLzIwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwogCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKaW5kZXggYzUzNTQwOC4uMTJhODI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKQEAgLTIsNyArMiw2IEBACiAJdHJpc3RhdGUgIlNvbGFyZmxhcmUgU29sYXJzdG9ybSBTRkM0MDAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBNSUkKLQlzZWxlY3QgSU5FVF9MUk8KIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgSTJDCiAJc2VsZWN0IEkyQ19BTEdPQklUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYml0ZmllbGQuaCBiL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oCmluZGV4IGQ5NWMyMTguLmQ1NGQ4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oCkBAIC01NDMsNyArNTQzLDcgQEAKIAogLyogU3RhdGljIGluaXRpYWxpc2VyICovCiAjZGVmaW5lIEVGWF9PV09SRDMyKGEsIGIsIGMsIGQpCQkJCQkJXAotCXsgLnUzMiA9IHsgX19jb25zdGFudF9jcHVfdG9fbGUzMihhKSwgX19jb25zdGFudF9jcHVfdG9fbGUzMihiKSwgXAotCQkgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKGMpLCBfX2NvbnN0YW50X2NwdV90b19sZTMyKGQpIH0gfQorCXsgLnUzMiA9IHsgY3B1X3RvX2xlMzIoYSksIGNwdV90b19sZTMyKGIpLCBcCisJCSAgIGNwdV90b19sZTMyKGMpLCBjcHVfdG9fbGUzMihkKSB9IH0KIAogI2VuZGlmIC8qIEVGWF9CSVRGSUVMRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMgYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKaW5kZXggNjQ5MDM0OS4uNTE4MmFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYwpAQCAtMjYsNyArMjYsNyBAQAogewogCXN0cnVjdCBlZnhfbmljICplZnggPSAoc3RydWN0IGVmeF9uaWMgKiljb250ZXh0OwogCXN0cnVjdCBlZnhfYmxpbmtlciAqYmwgPSAmZWZ4LT5ib2FyZF9pbmZvLmJsaW5rZXI7Ci0JZWZ4LT5ib2FyZF9pbmZvLnNldF9mYXVsdF9sZWQoZWZ4LCBibC0+c3RhdGUpOworCWVmeC0+Ym9hcmRfaW5mby5zZXRfaWRfbGVkKGVmeCwgYmwtPnN0YXRlKTsKIAlibC0+c3RhdGUgPSAhYmwtPnN0YXRlOwogCWlmIChibC0+cmVzdWJtaXQpCiAJCW1vZF90aW1lcigmYmwtPnRpbWVyLCBqaWZmaWVzICsgQkxJTktfSU5URVJWQUwpOwpAQCAtNDgsNyArNDgsNyBAQAogCQlibGlua2VyLT5yZXN1Ym1pdCA9IGZhbHNlOwogCQlpZiAoYmxpbmtlci0+dGltZXIuZnVuY3Rpb24pCiAJCQlkZWxfdGltZXJfc3luYygmYmxpbmtlci0+dGltZXIpOwotCQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZChlZngsIGZhbHNlKTsKKwkJZWZ4LT5ib2FyZF9pbmZvLmluaXRfbGVkcyhlZngpOwogCX0KIH0KIApAQCAtMTg1LDcgKzE4NSw3IEBACiAjZGVmaW5lIFNGRTQwMDJfUlhfTEVEICAgICgwKQkvKiBHcmVlbiAqLwogI2RlZmluZSBTRkU0MDAyX1RYX0xFRCAgICAoMSkJLyogQW1iZXIgKi8KIAotc3RhdGljIGludCBzZmU0MDAyX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIHZvaWQgc2ZlNDAwMl9pbml0X2xlZHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAkvKiBTZXQgdGhlIFRYIGFuZCBSWCBMRURzIHRvIHJlZmxlY3Qgc3RhdHVzIGFuZCBhY3Rpdml0eSwgYW5kIHRoZQogCSAqIGZhdWx0IExFRCBvZmYgKi8KQEAgLTE5NCwxMSArMTk0LDkgQEAKIAl4ZnBfc2V0X2xlZChlZngsIFNGRTQwMDJfUlhfTEVELAogCQkgICAgUVVBS0VfTEVEX1JYTElOSyB8IFFVQUtFX0xFRF9MSU5LX0FDVFNUQVQpOwogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9GQVVMVF9MRUQsIFFVQUtFX0xFRF9PRkYpOwotCWVmeC0+Ym9hcmRfaW5mby5ibGlua2VyLmxlZF9udW0gPSBTRkU0MDAyX0ZBVUxUX0xFRDsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2ZlNDAwMl9mYXVsdF9sZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNmZTQwMDJfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQogewogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9GQVVMVF9MRUQsIHN0YXRlID8gUVVBS0VfTEVEX09OIDoKIAkJCVFVQUtFX0xFRF9PRkYpOwpAQCAtMjIyLDcgKzIyMCw2NyBAQAogCQlyZXR1cm4gcmM7CiAJZWZ4LT5ib2FyZF9pbmZvLm1vbml0b3IgPSBzZmU0MDAyX2NoZWNrX2h3OwogCWVmeC0+Ym9hcmRfaW5mby5pbml0X2xlZHMgPSBzZmU0MDAyX2luaXRfbGVkczsKLQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZCA9IHNmZTQwMDJfZmF1bHRfbGVkOworCWVmeC0+Ym9hcmRfaW5mby5zZXRfaWRfbGVkID0gc2ZlNDAwMl9zZXRfaWRfbGVkOworCWVmeC0+Ym9hcmRfaW5mby5ibGluayA9IGJvYXJkX2JsaW5rOworCWVmeC0+Ym9hcmRfaW5mby5maW5pID0gZWZ4X2ZpbmlfbG04NzsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdXBwb3J0IGZvciB0aGUgU0ZONDExMkYKKyAqCisgKi8KK3N0YXRpYyB1OCBzZm40MTEyZl9sbTg3X2NoYW5uZWwgPSAweDAzOyAvKiB1c2UgQUlOIG5vdCBGQU4gaW5wdXRzICovCisKK3N0YXRpYyBjb25zdCB1OCBzZm40MTEyZl9sbTg3X3JlZ3NbXSA9IHsKKwlMTTg3X0lOX0xJTUlUUygwLCAweDgzLCAweDkxKSwJCS8qIDIuNVY6ICAxLjhWICsvLSA1JSAqLworCUxNODdfSU5fTElNSVRTKDEsIDB4NTEsIDB4NWEpLAkJLyogVmNjcDE6IDEuMlYgKy8tIDUlICovCisJTE04N19JTl9MSU1JVFMoMiwgMHhiNiwgMHhjYSksCQkvKiAzLjNWOiAgMy4zViArLy0gNSUgKi8KKwlMTTg3X0lOX0xJTUlUUyg0LCAweGIwLCAweGUwKSwJCS8qIDEyVjogICAxMS0xNFYgKi8KKwlMTTg3X0lOX0xJTUlUUyg1LCAweDQ0LCAweDRiKSwJCS8qIFZjY3AyOiAxLjBWICsvLSA1JSAqLworCUxNODdfQUlOX0xJTUlUUygxLCAweDkxLCAweGExKSwJCS8qIEFJTjI6ICAxLjVWICsvLSA1JSAqLworCUxNODdfVEVNUF9JTlRfTElNSVRTKDEwLCA2MCksCQkvKiBib2FyZCAqLworCUxNODdfVEVNUF9FWFQxX0xJTUlUUygxMCwgNzApLAkJLyogRmFsY29uICovCisJMAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBzZm40MTEyZl9od21vbl9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJsbTg3IiwgMHgyZSksCisJLnBsYXRmb3JtX2RhdGEJPSAmc2ZuNDExMmZfbG04N19jaGFubmVsLAorCS5pcnEJCT0gLTEsCit9OworCisjZGVmaW5lIFNGTjQxMTJGX0FDVF9MRUQJMAorI2RlZmluZSBTRk40MTEyRl9MSU5LX0xFRAkxCisKK3N0YXRpYyB2b2lkIHNmbjQxMTJmX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfQUNUX0xFRCwKKwkJICAgIFFVQUtFX0xFRF9SWExJTksgfCBRVUFLRV9MRURfTElOS19BQ1QpOworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfTElOS19MRUQsCisJCSAgICBRVUFLRV9MRURfUlhMSU5LIHwgUVVBS0VfTEVEX0xJTktfU1RBVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNmbjQxMTJmX3NldF9pZF9sZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSkKK3sKKwl4ZnBfc2V0X2xlZChlZngsIFNGTjQxMTJGX0xJTktfTEVELAorCQkgICAgc3RhdGUgPyBRVUFLRV9MRURfT04gOiBRVUFLRV9MRURfT0ZGKTsKK30KKworc3RhdGljIGludCBzZm40MTEyZl9jaGVja19odyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCS8qIE1hc2sgb3V0IHVudXNlZCBzZW5zb3JzICovCisJcmV0dXJuIGVmeF9jaGVja19sbTg3KGVmeCwgfjB4NDgpOworfQorCitzdGF0aWMgaW50IHNmbjQxMTJmX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlpbnQgcmMgPSBlZnhfaW5pdF9sbTg3KGVmeCwgJnNmbjQxMTJmX2h3bW9uX2luZm8sIHNmbjQxMTJmX2xtODdfcmVncyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJZWZ4LT5ib2FyZF9pbmZvLm1vbml0b3IgPSBzZm40MTEyZl9jaGVja19odzsKKwllZngtPmJvYXJkX2luZm8uaW5pdF9sZWRzID0gc2ZuNDExMmZfaW5pdF9sZWRzOworCWVmeC0+Ym9hcmRfaW5mby5zZXRfaWRfbGVkID0gc2ZuNDExMmZfc2V0X2lkX2xlZDsKIAllZngtPmJvYXJkX2luZm8uYmxpbmsgPSBib2FyZF9ibGluazsKIAllZngtPmJvYXJkX2luZm8uZmluaSA9IGVmeF9maW5pX2xtODc7CiAJcmV0dXJuIDA7CkBAIC0yNDMsNiArMzAxLDggQEAKIAl7IEVGWF9CT0FSRF9TRkU0MDAyLCAiU0ZFNDAwMiIsICJYRlAgYWRhcHRlciIsIHNmZTQwMDJfaW5pdCB9LAogCXsgRUZYX0JPQVJEX1NGTjQxMTFULCAiU0ZONDExMVQiLCAiMTAwLzEwMDAvMTBHQkFTRS1UIGFkYXB0ZXIiLAogCSAgc2ZuNDExMXRfaW5pdCB9LAorCXsgRUZYX0JPQVJEX1NGTjQxMTJGLCAiU0ZONDExMkYiLCAiU0ZQKyBhZGFwdGVyIiwKKwkgIHNmbjQxMTJmX2luaXQgfSwKIH07CiAKIHZvaWQgZWZ4X3NldF9ib2FyZF9pbmZvKHN0cnVjdCBlZnhfbmljICplZngsIHUxNiByZXZpc2lvbl9pbmZvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCmluZGV4IGQ5M2M2YzYuLjQ0OTQyZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAlFRlhfQk9BUkRfU0ZFNDAwMSA9IDEsCiAJRUZYX0JPQVJEX1NGRTQwMDIgPSAyLAogCUVGWF9CT0FSRF9TRk40MTExVCA9IDB4NTEsCisJRUZYX0JPQVJEX1NGTjQxMTJGID0gMHg1MiwKIH07CiAKIGV4dGVybiB2b2lkIGVmeF9zZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1MTYgcmV2aXNpb25faW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggYWIwZTA5Yi4uMDBjMjNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMTMzLDYgKzEzMywxNiBAQAogbW9kdWxlX3BhcmFtKHBoeV9mbGFzaF9jZmcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBoeV9mbGFzaF9jZmcsICJTZXQgUEhZcyBpbnRvIHJlZmxhc2ggbW9kZSBpbml0aWFsbHkiKTsKIAorc3RhdGljIHVuc2lnbmVkIGlycV9hZGFwdF9sb3dfdGhyZXNoID0gMTAwMDA7Cittb2R1bGVfcGFyYW0oaXJxX2FkYXB0X2xvd190aHJlc2gsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcnFfYWRhcHRfbG93X3RocmVzaCwKKwkJICJUaHJlc2hvbGQgc2NvcmUgZm9yIHJlZHVjaW5nIElSUSBtb2RlcmF0aW9uIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpcnFfYWRhcHRfaGlnaF90aHJlc2ggPSAyMDAwMDsKK21vZHVsZV9wYXJhbShpcnFfYWRhcHRfaGlnaF90aHJlc2gsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcnFfYWRhcHRfaGlnaF90aHJlc2gsCisJCSAiVGhyZXNob2xkIHNjb3JlIGZvciBpbmNyZWFzaW5nIElSUSBtb2RlcmF0aW9uIik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFV0aWxpdHkgZnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCkBAIC0xODIsNyArMTkyLDYgQEAKIAkJY2hhbm5lbC0+cnhfcGt0ID0gTlVMTDsKIAl9CiAKLQllZnhfZmx1c2hfbHJvKGNoYW5uZWwpOwogCWVmeF9yeF9zdHJhdGVneShjaGFubmVsKTsKIAogCWVmeF9mYXN0X3B1c2hfcnhfZGVzY3JpcHRvcnMoJmVmeC0+cnhfcXVldWVbY2hhbm5lbC0+Y2hhbm5lbF0pOwpAQCAtMjI0LDEyICsyMzMsNDEgQEAKIAlyeF9wYWNrZXRzID0gZWZ4X3Byb2Nlc3NfY2hhbm5lbChjaGFubmVsLCBidWRnZXQpOwogCiAJaWYgKHJ4X3BhY2tldHMgPCBidWRnZXQpIHsKKwkJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKKworCQlpZiAoY2hhbm5lbC0+dXNlZF9mbGFncyAmIEVGWF9VU0VEX0JZX1JYICYmCisJCSAgICBlZngtPmlycV9yeF9hZGFwdGl2ZSAmJgorCQkgICAgdW5saWtlbHkoKytjaGFubmVsLT5pcnFfY291bnQgPT0gMTAwMCkpIHsKKwkJCXVuc2lnbmVkIG9sZF9pcnFfbW9kZXJhdGlvbiA9IGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uOworCisJCQlpZiAodW5saWtlbHkoY2hhbm5lbC0+aXJxX21vZF9zY29yZSA8CisJCQkJICAgICBpcnFfYWRhcHRfbG93X3RocmVzaCkpIHsKKwkJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9CisJCQkJCW1heF90KGludCwKKwkJCQkJICAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLQorCQkJCQkgICAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OLAorCQkJCQkgICAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hhbm5lbC0+aXJxX21vZF9zY29yZSA+CisJCQkJCSAgICBpcnFfYWRhcHRfaGlnaF90aHJlc2gpKSB7CisJCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPQorCQkJCQltaW4oY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gKworCQkJCQkgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiwKKwkJCQkJICAgIGVmeC0+aXJxX3J4X21vZGVyYXRpb24pOworCQkJfQorCisJCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gIT0gb2xkX2lycV9tb2RlcmF0aW9uKQorCQkJCWZhbGNvbl9zZXRfaW50X21vZGVyYXRpb24oY2hhbm5lbCk7CisKKwkJCWNoYW5uZWwtPmlycV9jb3VudCA9IDA7CisJCQljaGFubmVsLT5pcnFfbW9kX3Njb3JlID0gMDsKKwkJfQorCiAJCS8qIFRoZXJlIGlzIG5vIHJhY2UgaGVyZTsgYWx0aG91Z2ggbmFwaV9kaXNhYmxlKCkgd2lsbAotCQkgKiBvbmx5IHdhaXQgZm9yIG5ldGlmX3J4X2NvbXBsZXRlKCksIHRoaXMgaXNuJ3QgYSBwcm9ibGVtCisJCSAqIG9ubHkgd2FpdCBmb3IgbmFwaV9jb21wbGV0ZSgpLCB0aGlzIGlzbid0IGEgcHJvYmxlbQogCQkgKiBzaW5jZSBlZnhfY2hhbm5lbF9wcm9jZXNzZWQoKSB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmCiAJCSAqIGludGVycnVwdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGlzYWJsZWQuCiAJCSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJZWZ4X2NoYW5uZWxfcHJvY2Vzc2VkKGNoYW5uZWwpOwogCX0KIApAQCAtNTU4LDYgKzU5Niw4IEBACiAKIH0KIAorc3RhdGljIHZvaWQgZWZ4X2ZpbmlfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwogLyogVGhpcyBjYWxsIHJlaW5pdGlhbGlzZXMgdGhlIE1BQyB0byBwaWNrIHVwIG5ldyBQSFkgc2V0dGluZ3MuIFRoZQogICogY2FsbGVyIG11c3QgaG9sZCB0aGUgbWFjX2xvY2sgKi8KIHZvaWQgX19lZnhfcmVjb25maWd1cmVfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNTkzLDggKzYzMyw4IEBACiAKIGZhaWw6CiAJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gcmVjb25maWd1cmUgTUFDXG4iKTsKLQllZngtPnBoeV9vcC0+ZmluaShlZngpOwotCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOworCWVmeC0+cG9ydF9lbmFibGVkID0gZmFsc2U7CisJZWZ4X2ZpbmlfcG9ydChlZngpOwogfQogCiAvKiBSZWluaXRpYWxpc2UgdGhlIE1BQyB0byBwaWNrIHVwIG5ldyBQSFkgc2V0dGluZ3MsIGV2ZW4gaWYgdGhlIHBvcnQgaXMKQEAgLTg1NCwyMCArODk0LDI3IEBACiAgKiBpbnRlcnJ1cHRzIGFjcm9zcyB0aGVtLiAqLwogc3RhdGljIGludCBlZnhfd2FudGVkX3J4X3F1ZXVlcyh2b2lkKQogewotCWNwdW1hc2tfdCBjb3JlX21hc2s7CisJY3B1bWFza192YXJfdCBjb3JlX21hc2s7CiAJaW50IGNvdW50OwogCWludCBjcHU7CiAKLQljcHVzX2NsZWFyKGNvcmVfbWFzayk7CisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmY29yZV9tYXNrLCBHRlBfS0VSTkVMKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiZWZ4LmM6IGFsbG9jYXRpb24gZmFpbHVyZSwgaXJxIGJhbGFuY2luZyBob2JibGVkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY3B1bWFza19jbGVhcihjb3JlX21hc2spOwogCWNvdW50ID0gMDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpZiAoIWNwdV9pc3NldChjcHUsIGNvcmVfbWFzaykpIHsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY29yZV9tYXNrKSkgewogCQkJKytjb3VudDsKLQkJCWNwdXNfb3IoY29yZV9tYXNrLCBjb3JlX21hc2ssCi0JCQkJdG9wb2xvZ3lfY29yZV9zaWJsaW5ncyhjcHUpKTsKKwkJCWNwdW1hc2tfb3IoY29yZV9tYXNrLCBjb3JlX21hc2ssCisJCQkJICAgdG9wb2xvZ3lfY29yZV9jcHVtYXNrKGNwdSkpOwogCQl9CiAJfQogCisJZnJlZV9jcHVtYXNrX3Zhcihjb3JlX21hc2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtOTkwLDcgKzEwMzcsNyBAQAogCWVmeF9zZXRfY2hhbm5lbHMoZWZ4KTsKIAogCS8qIEluaXRpYWxpc2UgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIHNldHRpbmdzICovCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF9pcnFfbW9kX3VzZWMsIHJ4X2lycV9tb2RfdXNlYyk7CisJZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF9pcnFfbW9kX3VzZWMsIHJ4X2lycV9tb2RfdXNlYywgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODcsNyArMTIzNCw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFNldCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBwYXJhbWV0ZXJzICovCi12b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywgaW50IHJ4X3VzZWNzKQordm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsIGludCByeF91c2VjcywKKwkJCSAgICAgYm9vbCByeF9hZGFwdGl2ZSkKIHsKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKQEAgLTExOTcsNiArMTI0NSw4IEBACiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpCiAJCXR4X3F1ZXVlLT5jaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IHR4X3VzZWNzOwogCisJZWZ4LT5pcnFfcnhfYWRhcHRpdmUgPSByeF9hZGFwdGl2ZTsKKwllZngtPmlycV9yeF9tb2RlcmF0aW9uID0gcnhfdXNlY3M7CiAJZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpCiAJCXJ4X3F1ZXVlLT5jaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IHJ4X3VzZWNzOwogfQpAQCAtMTI2OSwxOCArMTMxOSwxMSBAQAogc3RhdGljIGludCBlZnhfaW5pdF9uYXBpKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwotCWludCByYzsKIAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkgewogCQljaGFubmVsLT5uYXBpX2RldiA9IGVmeC0+bmV0X2RldjsKLQkJcmMgPSBlZnhfbHJvX2luaXQoJmNoYW5uZWwtPmxyb19tZ3IsIGVmeCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXJyOwogCX0KIAlyZXR1cm4gMDsKLSBlcnI6Ci0JZWZ4X2ZpbmlfbmFwaShlZngpOwotCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgZWZ4X2ZpbmlfbmFwaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtMTI4OCw3ICsxMzMxLDYgQEAKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKLQkJZWZ4X2xyb19maW5pKCZjaGFubmVsLT5scm9fbWdyKTsKIAkJY2hhbm5lbC0+bmFwaV9kZXYgPSBOVUxMOwogCX0KIH0KQEAgLTE2NzYsNyArMTcxOCw4IEBACiAJCQlyYyA9IGVmeC0+cGh5X29wLT5pbml0KGVmeCk7CiAJCQlpZiAocmMpCiAJCQkJb2sgPSBmYWxzZTsKLQkJfSBlbHNlCisJCX0KKwkJaWYgKCFvaykKIAkJCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOwogCX0KIApAQCAtMTg1Nyw4ICsxOTAwLDggQEAKIAogc3RhdGljIHN0cnVjdCBlZnhfYm9hcmQgZWZ4X2R1bW15X2JvYXJkX2luZm8gPSB7CiAJLmluaXQJCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAotCS5pbml0X2xlZHMJPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCi0JLnNldF9mYXVsdF9sZWQJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKKwkuaW5pdF9sZWRzCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkuc2V0X2lkX2xlZAk9IGVmeF9wb3J0X2R1bW15X29wX2JsaW5rLAogCS5tb25pdG9yCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5ibGluawkJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKIAkuZmluaQkJPSBlZnhfcG9ydF9kdW1teV9vcF92b2lkLApAQCAtMjEyMCw3ICsyMTYzLDcgQEAKIAluZXRfZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkgICAgICBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTyk7CiAJaWYgKGxybykKLQkJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCS8qIE1hc2sgZm9yIGZlYXR1cmVzIHRoYXQgYWxzbyBhcHBseSB0byBWTEFOIGRldmljZXMgKi8KIAluZXRfZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkJICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IDU1ZDBmMTMuLmRhMTU3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTUyLDcgKzUyLDcgQEAKIGV4dGVybiB2b2lkIGVmeF9zdXNwZW5kKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIHZvaWQgZWZ4X3Jlc3VtZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywKLQkJCQkgICAgaW50IHJ4X3VzZWNzKTsKKwkJCQkgICAgaW50IHJ4X3VzZWNzLCBib29sIHJ4X2FkYXB0aXZlKTsKIGV4dGVybiBpbnQgZWZ4X3JlcXVlc3RfcG93ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IG13LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGVmeF9oZXhfZHVtcChjb25zdCB1OCAqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiAKQEAgLTgwLDcgKzgwLDcgQEAKIAkJICBjaGFubmVsLT5jaGFubmVsLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAljaGFubmVsLT53b3JrX3BlbmRpbmcgPSB0cnVlOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmNoYW5uZWwtPm5hcGlfc3RyKTsKKwluYXBpX3NjaGVkdWxlKCZjaGFubmVsLT5uYXBpX3N0cik7CiB9CiAKICNlbmRpZiAvKiBFRlhfRUZYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCmluZGV4IDdiNTkyNGMwLi42NDMwOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTUyOSw3ICs1MjksMTQgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAKLQlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmZWZ4LT5taWkpOworCWlmIChlZngtPnBoeV9vcC0+bW1kcyAmIERFVl9QUkVTRU5UX0JJVChNRElPX01NRF9BTikpIHsKKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZyhlZngsIGVmeC0+bWlpLnBoeV9pZCwgTURJT19NTURfQU4sCisJCQkJICAgICAgIE1ESU9fTU1EUkVHX0NUUkwxLAorCQkJCSAgICAgICBfX2ZmcyhCTUNSX0FOUkVTVEFSVCksIHRydWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKIHN0YXRpYyB1MzIgZWZ4X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCkBAIC01OTcsNyArNjA0LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0Jc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCiAJbWVtc2V0KGNvYWxlc2NlLCAwLCBzaXplb2YoKmNvYWxlc2NlKSk7CkBAIC02MTUsMTQgKzYyMSw4IEBACiAJCX0KIAl9CiAKLQkvKiBGaW5kIGxvd2VzdCBJUlEgbW9kZXJhdGlvbiBhY3Jvc3MgYWxsIHVzZWQgUlggcXVldWVzICovCi0JY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IH4oKHUzMikgMCk7Ci0JZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpIHsKLQkJY2hhbm5lbCA9IHJ4X3F1ZXVlLT5jaGFubmVsOwotCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPCBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxKQotCQkJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9Ci0JCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb247Ci0JfQorCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBlZngtPmlycV9yeF9hZGFwdGl2ZTsKKwljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID0gZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbjsKIAogCXJldHVybiAwOwogfQpAQCAtNjM2LDEwICs2MzYsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0JdW5zaWduZWQgdHhfdXNlY3MsIHJ4X3VzZWNzOworCXVuc2lnbmVkIHR4X3VzZWNzLCByeF91c2VjcywgYWRhcHRpdmU7CiAKLQlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSB8fAotCSAgICBjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQorCWlmIChjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzIHx8IGNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjcykgewpAQCAtNjUwLDYgKzY0OSw3IEBACiAKIAlyeF91c2VjcyA9IGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnE7CiAJdHhfdXNlY3MgPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaXJxOworCWFkYXB0aXZlID0gY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKIAogCS8qIElmIHRoZSBjaGFubmVsIGlzIHNoYXJlZCBvbmx5IGFsbG93IFJYIHBhcmFtZXRlcnMgdG8gYmUgc2V0ICovCiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpIHsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQl9CiAJfQogCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF91c2VjcywgcnhfdXNlY3MpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfdXNlY3MsIHJ4X3VzZWNzLCBhZGFwdGl2ZSk7CiAKIAkvKiBSZXNldCBjaGFubmVsIHRvIHBpY2sgdXAgbmV3IG1vZGVyYXRpb24gdmFsdWUuICBOb3RlIHRoYXQKIAkgKiB0aGlzIG1heSBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBpcnFfbW9kZXJhdGlvbiBmaWVsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IGQ1Mzc4ZTYuLmQ0NjI5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTM5LDExICszOSwxNiBAQAogICogQG5leHRfYnVmZmVyX3RhYmxlOiBGaXJzdCBhdmFpbGFibGUgYnVmZmVyIHRhYmxlIGlkCiAgKiBAcGNpX2RldjI6IFRoZSBzZWNvbmRhcnkgUENJIGRldmljZSBpZiBwcmVzZW50CiAgKiBAaTJjX2RhdGE6IE9wZXJhdGlvbnMgYW5kIHN0YXRlIGZvciBJMkMgYml0LWJhc2hpbmcgYWxnb3JpdGhtCisgKiBAaW50X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzIHNlZW4gcmVjZW50bHkKKyAqIEBpbnRfZXJyb3JfZXhwaXJlOiBUaW1lIGF0IHdoaWNoIGVycm9yIGNvdW50IHdpbGwgYmUgZXhwaXJlZAogICovCiBzdHJ1Y3QgZmFsY29uX25pY19kYXRhIHsKIAl1bnNpZ25lZCBuZXh0X2J1ZmZlcl90YWJsZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjI7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19kYXRhOworCisJdW5zaWduZWQgaW50X2Vycm9yX2NvdW50OworCXVuc2lnbmVkIGxvbmcgaW50X2Vycm9yX2V4cGlyZTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE5LDggKzEyNCwxMiBAQAogI2RlZmluZSBGQUxDT05fRVZRX1NJWkUgNDA5NgogI2RlZmluZSBGQUxDT05fRVZRX01BU0sgKEZBTENPTl9FVlFfU0laRSAtIDEpCiAKLS8qIE1heCBudW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzLiBBZnRlciB0aGlzIHJlc2V0cyB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KLSNkZWZpbmUgRkFMQ09OX01BWF9JTlRfRVJST1JTIDQKKy8qIElmIEZBTENPTl9NQVhfSU5UX0VSUk9SUyBpbnRlcm5hbCBlcnJvcnMgb2NjdXIgd2l0aGluCisgKiBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSBzZWNvbmRzLCB3ZSBjb25zaWRlciB0aGUgTklDIGJyb2tlbiBhbmQKKyAqIGRpc2FibGUgaXQuCisgKi8KKyNkZWZpbmUgRkFMQ09OX0lOVF9FUlJPUl9FWFBJUkUgMzYwMAorI2RlZmluZSBGQUxDT05fTUFYX0lOVF9FUlJPUlMgNQogCiAvKiBXZSBwb2xsIGZvciBldmVudHMgZXZlcnkgRkxVU0hfSU5URVJWQUwgbXMsIGFuZCBjaGVjayBGTFVTSF9QT0xMX0NPVU5UIHRpbWVzCiAgKi8KQEAgLTE0NiwxMyArMTU1LDYgQEAKIC8qIER1bW15IFNSQU0gc2l6ZSBjb2RlICovCiAjZGVmaW5lIFNSTV9OQl9CU1pfT05DSElQX09OTFkgKC0xKQogCi0vKiBCZSBuaWNlIGlmIHRoZXNlIChvciBlcXVpdi4pIHdlcmUgaW4gbGludXgvcGNpX3JlZ3MuaCwgYnV0IHRoZXkncmUgbm90LiAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMX0xCTgkxOAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMX0xCTgkyNgotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEX0xCTgk1Ci0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSUQJCTB4M2YwCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSURfTEJOCTQKLQogI2RlZmluZSBGQUxDT05fSVNfRFVBTF9GVU5DKGVmeCkJCVwKIAkoZmFsY29uX3JldihlZngpIDwgRkFMQ09OX1JFVl9CMCkKIApAQCAtMzM4LDEwICszNDAsMTAgQEAKIAluaWNfZGF0YS0+bmV4dF9idWZmZXJfdGFibGUgKz0gYnVmZmVyLT5lbnRyaWVzOwogCiAJRUZYX0xPRyhlZngsICJhbGxvY2F0aW5nIHNwZWNpYWwgYnVmZmVycyAlZC0lZCBhdCAlbGx4KyV4ICIKLQkJIih2aXJ0ICVwIHBoeXMgJWx4KVxuIiwgYnVmZmVyLT5pbmRleCwKKwkJIih2aXJ0ICVwIHBoeXMgJWxseClcbiIsIGJ1ZmZlci0+aW5kZXgsCiAJCWJ1ZmZlci0+aW5kZXggKyBidWZmZXItPmVudHJpZXMgLSAxLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWJ1ZmZlci0+ZG1hX2FkZHIsIGxlbiwKLQkJYnVmZmVyLT5hZGRyLCB2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CisJCSh1NjQpYnVmZmVyLT5kbWFfYWRkciwgbGVuLAorCQlidWZmZXItPmFkZHIsICh1NjQpdmlydF90b19waHlzKGJ1ZmZlci0+YWRkcikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTMsMTAgKzM1NSwxMCBAQAogCQlyZXR1cm47CiAKIAlFRlhfTE9HKGVmeCwgImRlYWxsb2NhdGluZyBzcGVjaWFsIGJ1ZmZlcnMgJWQtJWQgYXQgJWxseCsleCAiCi0JCSIodmlydCAlcCBwaHlzICVseClcbiIsIGJ1ZmZlci0+aW5kZXgsCisJCSIodmlydCAlcCBwaHlzICVsbHgpXG4iLCBidWZmZXItPmluZGV4LAogCQlidWZmZXItPmluZGV4ICsgYnVmZmVyLT5lbnRyaWVzIC0gMSwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmZXItPmRtYV9hZGRyLCBidWZmZXItPmxlbiwKLQkJYnVmZmVyLT5hZGRyLCB2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CisJCSh1NjQpYnVmZmVyLT5kbWFfYWRkciwgYnVmZmVyLT5sZW4sCisJCWJ1ZmZlci0+YWRkciwgKHU2NCl2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CiAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGVmeC0+cGNpX2RldiwgYnVmZmVyLT5sZW4sIGJ1ZmZlci0+YWRkciwKIAkJCSAgICBidWZmZXItPmRtYV9hZGRyKTsKQEAgLTcyNyw2ICs3MjksOSBAQAogCQl0eF9ldl9kZXNjX3B0ciA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX0RFU0NfUFRSKTsKIAkJdHhfZXZfcV9sYWJlbCA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX1FfTEFCRUwpOwogCQl0eF9xdWV1ZSA9ICZlZngtPnR4X3F1ZXVlW3R4X2V2X3FfbGFiZWxdOworCQljaGFubmVsLT5pcnFfbW9kX3Njb3JlICs9CisJCQkodHhfZXZfZGVzY19wdHIgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudCkgJgorCQkJZWZ4LT50eXBlLT50eGRfcmluZ19tYXNrOwogCQllZnhfeG1pdF9kb25lKHR4X3F1ZXVlLCB0eF9ldl9kZXNjX3B0cik7CiAJfSBlbHNlIGlmIChFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBUWF9FVl9XUV9GRl9GVUxMKSkgewogCQkvKiBSZXdyaXRlIHRoZSBGSUZPIHdyaXRlIHBvaW50ZXIgKi8KQEAgLTg5Niw2ICs5MDEsOCBAQAogCQkJZGlzY2FyZCA9IHRydWU7CiAJfQogCisJY2hhbm5lbC0+aXJxX21vZF9zY29yZSArPSAyOworCiAJLyogSGFuZGxlIHJlY2VpdmVkIHBhY2tldCAqLwogCWVmeF9yeF9wYWNrZXQocnhfcXVldWUsIHJ4X2V2X2Rlc2NfcHRyLCByeF9ldl9ieXRlX2NudCwKIAkJICAgICAgY2hlY2tzdW1tZWQsIGRpc2NhcmQpOwpAQCAtMTA3MywxNCArMTA4MCwxNSBAQAogCQkgKiBwcm9ncmFtIGlzIGJhc2VkIGF0IDAuICBTbyBhY3R1YWwgaW50ZXJydXB0IG1vZGVyYXRpb24KIAkJICogYWNoaWV2ZWQgaXMgKCh4ICsgMSkgKiByZXMpLgogCQkgKi8KLQkJdW5zaWduZWQgaW50IHJlcyA9IDU7Ci0JCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC09IChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAlIHJlcyk7Ci0JCWlmIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA8IHJlcykKLQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0gcmVzOworCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAtPSAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gJQorCQkJCQkgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTik7CisJCWlmIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA8IEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04pCisJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT047CiAJCUVGWF9QT1BVTEFURV9EV09SRF8yKHRpbWVyX2NtZCwKIAkJCQkgICAgIFRJTUVSX01PREUsIFRJTUVSX01PREVfSU5UX0hMRE9GRiwKIAkJCQkgICAgIFRJTUVSX1ZBTCwKLQkJCQkgICAgIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAvIHJlcykgLSAxKTsKKwkJCQkgICAgIGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC8KKwkJCQkgICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04gLSAxKTsKIAl9IGVsc2UgewogCQlFRlhfUE9QVUxBVEVfRFdPUkRfMih0aW1lcl9jbWQsCiAJCQkJICAgICBUSU1FUl9NT0RFLCBUSU1FUl9NT0RFX0RJUywKQEAgLTExODcsMzEgKzExOTUsMjkgQEAKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPSAmZWZ4LT5jaGFubmVsWzBdOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwogCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwotCXVuc2lnbmVkIGludCByZWFkX3B0ciwgaTsKKwl1bnNpZ25lZCBpbnQgcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7CisJdW5zaWduZWQgaW50IGVuZF9wdHIgPSAocmVhZF9wdHIgLSAxKSAmIEZBTENPTl9FVlFfTUFTSzsKIAotCXJlYWRfcHRyID0gY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyOwotCWZvciAoaSA9IDA7IGkgPCBGQUxDT05fRVZRX1NJWkU7ICsraSkgeworCWRvIHsKIAkJZWZ4X3F3b3JkX3QgKmV2ZW50ID0gZmFsY29uX2V2ZW50KGNoYW5uZWwsIHJlYWRfcHRyKTsKIAkJaW50IGV2X2NvZGUsIGV2X3N1Yl9jb2RlLCBldl9xdWV1ZTsKIAkJYm9vbCBldl9mYWlsZWQ7CisKIAkJaWYgKCFmYWxjb25fZXZlbnRfcHJlc2VudChldmVudCkpCiAJCQlicmVhazsKIAogCQlldl9jb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRVZfQ09ERSk7Ci0JCWlmIChldl9jb2RlICE9IERSSVZFUl9FVl9ERUNPREUpCi0JCQljb250aW51ZTsKLQogCQlldl9zdWJfY29kZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIERSSVZFUl9FVl9TVUJfQ09ERSk7Ci0JCXN3aXRjaCAoZXZfc3ViX2NvZGUpIHsKLQkJY2FzZSBUWF9ERVNDUV9GTFNfRE9ORV9FVl9ERUNPREU6CisJCWlmIChldl9jb2RlID09IERSSVZFUl9FVl9ERUNPREUgJiYKKwkJICAgIGV2X3N1Yl9jb2RlID09IFRYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERSkgewogCQkJZXZfcXVldWUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LAogCQkJCQkJICAgRFJJVkVSX0VWX1RYX0RFU0NRX0lEKTsKIAkJCWlmIChldl9xdWV1ZSA8IEVGWF9UWF9RVUVVRV9DT1VOVCkgewogCQkJCXR4X3F1ZXVlID0gZWZ4LT50eF9xdWV1ZSArIGV2X3F1ZXVlOwogCQkJCXR4X3F1ZXVlLT5mbHVzaGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFJYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERToKKwkJfSBlbHNlIGlmIChldl9jb2RlID09IERSSVZFUl9FVl9ERUNPREUgJiYKKwkJCSAgIGV2X3N1Yl9jb2RlID09IFJYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERSkgewogCQkJZXZfcXVldWUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LAogCQkJCQkJICAgRFJJVkVSX0VWX1JYX0RFU0NRX0lEKTsKIAkJCWV2X2ZhaWxlZCA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCkBAIC0xMjI1LDExICsxMjMxLDEwIEBACiAJCQkJZWxzZQogCQkJCQlyeF9xdWV1ZS0+Zmx1c2hlZCA9IHRydWU7CiAJCQl9Ci0JCQlicmVhazsKIAkJfQogCiAJCXJlYWRfcHRyID0gKHJlYWRfcHRyICsgMSkgJiBGQUxDT05fRVZRX01BU0s7Ci0JfQorCX0gd2hpbGUgKHJlYWRfcHRyICE9IGVuZF9wdHIpOwogfQogCiAvKiBIYW5kbGUgdHggYW5kIHJ4IGZsdXNoZXMgYXQgdGhlIHNhbWUgdGltZSwgc2luY2UgdGhleSBydW4gaW4KQEAgLTEzNzcsNyArMTM4Miw2IEBACiAJZWZ4X293b3JkX3QgKmludF9rZXIgPSBlZngtPmlycV9zdGF0dXMuYWRkcjsKIAllZnhfb3dvcmRfdCBmYXRhbF9pbnRyOwogCWludCBlcnJvciwgbWVtX3BlcnI7Ci0Jc3RhdGljIGludCBuX2ludF9lcnJvcnM7CiAKIAlmYWxjb25fcmVhZChlZngsICZmYXRhbF9pbnRyLCBGQVRBTF9JTlRSX1JFR19LRVIpOwogCWVycm9yID0gRUZYX09XT1JEX0ZJRUxEKGZhdGFsX2ludHIsIElOVF9LRVJfRVJST1IpOwpAQCAtMTQwNCw3ICsxNDA4LDE0IEBACiAJCXBjaV9jbGVhcl9tYXN0ZXIobmljX2RhdGEtPnBjaV9kZXYyKTsKIAlmYWxjb25fZGlzYWJsZV9pbnRlcnJ1cHRzKGVmeCk7CiAKLQlpZiAoKytuX2ludF9lcnJvcnMgPCBGQUxDT05fTUFYX0lOVF9FUlJPUlMpIHsKKwkvKiBDb3VudCBlcnJvcnMgYW5kIHJlc2V0IG9yIGRpc2FibGUgdGhlIE5JQyBhY2NvcmRpbmdseSAqLworCWlmIChuaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50ID09IDAgfHwKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBuaWNfZGF0YS0+aW50X2Vycm9yX2V4cGlyZSkpIHsKKwkJbmljX2RhdGEtPmludF9lcnJvcl9jb3VudCA9IDA7CisJCW5pY19kYXRhLT5pbnRfZXJyb3JfZXhwaXJlID0KKwkJCWppZmZpZXMgKyBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSAqIEhaOworCX0KKwlpZiAoKytuaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50IDwgRkFMQ09OX01BWF9JTlRfRVJST1JTKSB7CiAJCUVGWF9FUlIoZWZ4LCAiU1lTVEVNIEVSUk9SIC0gcmVzZXQgc2NoZWR1bGVkXG4iKTsKIAkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgUkVTRVRfVFlQRV9JTlRfRVJST1IpOwogCX0gZWxzZSB7CkBAIC0xNDIzLDYgKzE0MzQsNyBAQAogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBkZXZfaWQ7CiAJZWZ4X293b3JkX3QgKmludF9rZXIgPSBlZngtPmlycV9zdGF0dXMuYWRkcjsKKwlpcnFyZXR1cm5fdCByZXN1bHQgPSBJUlFfTk9ORTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAJZWZ4X2R3b3JkX3QgcmVnOwogCXUzMiBxdWV1ZXM7CkBAIC0xNDM3LDIzICsxNDQ5LDI0IEBACiAJaWYgKHVubGlrZWx5KHN5c2VycikpCiAJCXJldHVybiBmYWxjb25fZmF0YWxfaW50ZXJydXB0KGVmeCk7CiAKLQlpZiAocXVldWVzID09IDApCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlFRlhfVFJBQ0UoZWZ4LCAiSVJRICVkIG9uIENQVSAlZCBzdGF0dXMgIiBFRlhfRFdPUkRfRk1UICJcbiIsCi0JCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOwotCiAJLyogU2NoZWR1bGUgcHJvY2Vzc2luZyBvZiBhbnkgaW50ZXJydXB0aW5nIHF1ZXVlcyAqLwotCWNoYW5uZWwgPSAmZWZ4LT5jaGFubmVsWzBdOwotCXdoaWxlIChxdWV1ZXMpIHsKLQkJaWYgKHF1ZXVlcyAmIDB4MDEpCisJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7CisJCWlmICgocXVldWVzICYgMSkgfHwKKwkJICAgIGZhbGNvbl9ldmVudF9wcmVzZW50KAorCQkJICAgIGZhbGNvbl9ldmVudChjaGFubmVsLCBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHIpKSkgewogCQkJZWZ4X3NjaGVkdWxlX2NoYW5uZWwoY2hhbm5lbCk7Ci0JCWNoYW5uZWwrKzsKKwkJCXJlc3VsdCA9IElSUV9IQU5ETEVEOworCQl9CiAJCXF1ZXVlcyA+Pj0gMTsKIAl9CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKHJlc3VsdCA9PSBJUlFfSEFORExFRCkgeworCQllZngtPmxhc3RfaXJxX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKKwkJCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOworCX0KKworCXJldHVybiByZXN1bHQ7CiB9CiAKIApAQCAtMjI0OSw2ICsyMjYyLDcgQEAKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3NmdDkwMDFfcGh5X29wczsKIAkJYnJlYWs7CiAJY2FzZSBQSFlfVFlQRV9RVDIwMjJDMjoKKwljYXNlIFBIWV9UWVBFX1FUMjAyNUM6CiAJCWVmeC0+cGh5X29wID0gJmZhbGNvbl94ZnBfcGh5X29wczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIzNDMsMTAgKzIzNTcsMTAgQEAKIAkJCQkgRkFMQ09OX01BQ19TVEFUU19TSVpFKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKLQlFRlhfTE9HKGVmeCwgInN0YXRzIGJ1ZmZlciBhdCAlbGx4ICh2aXJ0ICVwIHBoeXMgJWx4KVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyllZngtPnN0YXRzX2J1ZmZlci5kbWFfYWRkciwKKwlFRlhfTE9HKGVmeCwgInN0YXRzIGJ1ZmZlciBhdCAlbGx4ICh2aXJ0ICVwIHBoeXMgJWxseClcbiIsCisJCSh1NjQpZWZ4LT5zdGF0c19idWZmZXIuZG1hX2FkZHIsCiAJCWVmeC0+c3RhdHNfYnVmZmVyLmFkZHIsCi0JCXZpcnRfdG9fcGh5cyhlZngtPnN0YXRzX2J1ZmZlci5hZGRyKSk7CisJCSh1NjQpdmlydF90b19waHlzKGVmeC0+c3RhdHNfYnVmZmVyLmFkZHIpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjkyMSw5ICsyOTM1LDkgQEAKIAkJZ290byBmYWlsNDsKIAlCVUdfT04oZWZ4LT5pcnFfc3RhdHVzLmRtYV9hZGRyICYgMHgwZik7CiAKLQlFRlhfTE9HKGVmeCwgIklOVF9LRVIgYXQgJWxseCAodmlydCAlcCBwaHlzICVseClcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpZWZ4LT5pcnFfc3RhdHVzLmRtYV9hZGRyLAotCQllZngtPmlycV9zdGF0dXMuYWRkciwgdmlydF90b19waHlzKGVmeC0+aXJxX3N0YXR1cy5hZGRyKSk7CisJRUZYX0xPRyhlZngsICJJTlRfS0VSIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwKKwkJKHU2NCllZngtPmlycV9zdGF0dXMuZG1hX2FkZHIsCisJCWVmeC0+aXJxX3N0YXR1cy5hZGRyLCAodTY0KXZpcnRfdG9fcGh5cyhlZngtPmlycV9zdGF0dXMuYWRkcikpOwogCiAJZmFsY29uX3Byb2JlX3NwaV9kZXZpY2VzKGVmeCk7CiAKQEAgLTMxMTMsOCArMzEyNywxMCBAQAogCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKIAlpbnQgcmM7CiAKKwkvKiBSZW1vdmUgSTJDIGFkYXB0ZXIgYW5kIGNsZWFyIGl0IGluIHByZXBhcmF0aW9uIGZvciBhIHJldHJ5ICovCiAJcmMgPSBpMmNfZGVsX2FkYXB0ZXIoJmVmeC0+aTJjX2FkYXApOwogCUJVR19PTihyYyk7CisJbWVtc2V0KCZlZngtPmkyY19hZGFwLCAwLCBzaXplb2YoZWZ4LT5pMmNfYWRhcCkpOwogCiAJZmFsY29uX3JlbW92ZV9zcGlfZGV2aWNlcyhlZngpOwogCWZhbGNvbl9mcmVlX2J1ZmZlcihlZngsICZlZngtPmlycV9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oCmluZGV4IDc4NjljM2QuLjc3ZjJlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmgKQEAgLTg1LDYgKzg1LDggQEAKIGV4dGVybiB2b2lkIGZhbGNvbl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBmYWxjb25fZmluaV9pbnRlcnJ1cHQoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAKKyNkZWZpbmUgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiA1CisKIC8qIEdsb2JhbCBSZXNvdXJjZXMgKi8KIGV4dGVybiBpbnQgZmFsY29uX3Byb2JlX25pYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiBpbnQgZmFsY29uX3Byb2JlX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaCBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaAppbmRleCBjMTZkYTMxLi44ODgzMDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2lvLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oCkBAIC0yMzgsMTggKzIzOCwyMSBAQAogLyogV3JpdGUgZHdvcmQgdG8gRmFsY29uIHBhZ2UtbWFwcGVkIHJlZ2lzdGVyIHdpdGggYW4gZXh0cmEgbG9jay4KICAqCiAgKiBBcyBmb3IgZmFsY29uX3dyaXRlbF9wYWdlKCksIGJ1dCBmb3IgYSByZWdpc3RlciB0aGF0IHN1ZmZlcnMgZnJvbQotICogU0ZDIGJ1ZyAzMTgxLiBUYWtlIG91dCBhIGxvY2sgc28gdGhlIEJJVSBjb2xsZWN0b3IgY2Fubm90IGJlCi0gKiBjb25mdXNlZC4gKi8KKyAqIFNGQyBidWcgMzE4MS4gIElmIHdyaXRpbmcgdG8gcGFnZSAwLCB0YWtlIG91dCBhIGxvY2sgc28gdGhlIEJJVQorICogY29sbGVjdG9yIGNhbm5vdCBiZSBjb25mdXNlZC4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIGZhbGNvbl93cml0ZWxfcGFnZV9sb2NrZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCQkJICAgICBlZnhfZHdvcmRfdCAqdmFsdWUsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgcGFnZSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZSA9PSAwKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwogCWZhbGNvbl93cml0ZWwoZWZ4LCB2YWx1ZSwgRkFMQ09OX1BBR0VEX1JFRyhwYWdlLCByZWcpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CisJaWYgKHBhZ2UgPT0gMCkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYgLyogRUZYX0ZBTENPTl9JT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuYyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCmluZGV4IGY5ZTJmOTUuLjlmNWVjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCkBAIC0xNyw2ICsxNywyMSBAQAogI2luY2x1ZGUgImJvYXJkcy5oIgogI2luY2x1ZGUgIndvcmthcm91bmRzLmgiCiAKK3Vuc2lnbmVkIG1kaW9faWRfb3VpKHUzMiBpZCkKK3sKKwl1bnNpZ25lZCBvdWkgPSAwOworCWludCBpOworCisJLyogVGhlIGJpdHMgb2YgdGhlIE9VSSBhcmUgZGVzaWduYXRlZCBhLi54LCB3aXRoIGE9MCBhbmQgYiB2YXJpYWJsZS4KKwkgKiBJbiB0aGUgaWQgcmVnaXN0ZXIgYyBpcyB0aGUgTVNCIGJ1dCB0aGUgT1VJIGlzIGNvbnZlbnRpb25hbGx5CisJICogd3JpdHRlbiBhcyBieXRlcyBoLi5hLCBwLi5pLCB4Li5xLiAgUmVvcmRlciB0aGUgYml0cyBhY2NvcmRpbmdseS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjI7ICsraSkKKwkJaWYgKGlkICYgKDEgPDwgKGkgKyAxMCkpKQorCQkJb3VpIHw9IDEgPDwgKGkgXiA3KTsKKworCXJldHVybiBvdWk7Cit9CisKIGludCBtZGlvX2NsYXVzZTQ1X3Jlc2V0X21tZChzdHJ1Y3QgZWZ4X25pYyAqcG9ydCwgaW50IG1tZCwKIAkJCSAgICBpbnQgc3BpbnMsIGludCBzcGludGltZSkKIHsKQEAgLTEyNSwyNCArMTQwLDI1IEBACiBpbnQgbWRpb19jbGF1c2U0NV9jaGVja19tbWRzKHN0cnVjdCBlZnhfbmljICplZngsCiAJCQkgICAgIHVuc2lnbmVkIGludCBtbWRfbWFzaywgdW5zaWduZWQgaW50IGZhdGFsX21hc2spCiB7CisJaW50IG1tZCA9IDAsIHByb2JlX21tZCwgZGV2czAsIGRldnMxOwogCXUzMiBkZXZpY2VzOwotCWludCBtbWQgPSAwLCBwcm9iZV9tbWQ7CiAKIAkvKiBIaXN0b3JpY2FsbHkgd2UgaGF2ZSBwcm9iZWQgdGhlIFBIWVhTIHRvIGZpbmQgb3V0IHdoYXQgZGV2aWNlcyBhcmUKIAkgKiBwcmVzZW50LGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBzbyB3ZWxsIGlmIHRoZSBQSFlYUyBpc24ndCBleHBlY3RlZAogCSAqIHRvIGV4aXN0LCBpZiBzbyBqdXN0IGZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3Qgc3VwcGxpZWQuICovCiAJcHJvYmVfbW1kID0gKG1tZF9tYXNrICYgTURJT19NTURSRUdfREVWU19QSFlYUykgPyBNRElPX01NRF9QSFlYUyA6CiAJICAgIF9fZmZzKG1tZF9tYXNrKTsKLQlkZXZpY2VzID0gKG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKLQkJCQkgICAgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMwKSB8Ci0JCSAgIG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKLQkJCQkgICAgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMxKSA8PCAxNik7CiAKIAkvKiBDaGVjayBhbGwgdGhlIGV4cGVjdGVkIE1NRHMgYXJlIHByZXNlbnQgKi8KLQlpZiAoZGV2aWNlcyA8IDApIHsKKwlkZXZzMCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKKwkJCQkgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMwKTsKKwlkZXZzMSA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKKwkJCQkgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMxKTsKKwlpZiAoZGV2czAgPCAwIHx8IGRldnMxIDwgMCkgewogCQlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byByZWFkIGRldmljZXMgcHJlc2VudFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KKwlkZXZpY2VzID0gZGV2czAgfCAoZGV2czEgPDwgMTYpOwogCWlmICgoZGV2aWNlcyAmIG1tZF9tYXNrKSAhPSBtbWRfbWFzaykgewogCQlFRlhfRVJSKGVmeCwgInJlcXVpcmVkIE1NRHMgbm90IHByZXNlbnQ6IGdvdCAleCwgIgogCQkJIndhbnRlZCAleFxuIiwgZGV2aWNlcywgbW1kX21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmggYi9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaAppbmRleCA4YmE0OTc3Li43MDE0ZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaApAQCAtNzAsMTAgKzcwLDEwIEBACiAjZGVmaW5lIE1ESU9fTU1EUkVHX1NUQVQxX0xQQUJMRV9MQk4JKDEpCiAjZGVmaW5lIE1ESU9fTU1EUkVHX1NUQVQxX0xQQUJMRV9XSURUSAkoMSkKIAotLyogQml0cyBpbiBJRCByZWcgKi8KLSNkZWZpbmUgTURJT19JRF9SRVYoX2lkMzIpCShfaWQzMiAmIDB4ZikKLSNkZWZpbmUgTURJT19JRF9NT0RFTChfaWQzMikJKChfaWQzMiA+PiA0KSAmIDB4M2YpCi0jZGVmaW5lIE1ESU9fSURfT1VJKF9pZDMyKQkoX2lkMzIgPj4gMTApCisvKiBCaXRzIGluIGNvbWJpbmVkIElEIHJlZ3MgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRpb19pZF9yZXYodTMyIGlkKSB7IHJldHVybiBpZCAmIDB4ZjsgfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZGlvX2lkX21vZGVsKHUzMiBpZCkgeyByZXR1cm4gKGlkID4+IDQpICYgMHgzZjsgfQorZXh0ZXJuIHVuc2lnbmVkIG1kaW9faWRfb3VpKHUzMiBpZCk7CiAKIC8qIEJpdHMgaW4gTU1EUkVHX0RFVlMwLzEuIFNvbWVvbmUgdGhvdWdodGZ1bGx5IGxheWVkIHRoaW5ncyBvdXQKICAqIHNvIHRoZSAnYml0IHByZXNlbnQnIGJpdCBudW1iZXIgb2YgYW4gTU1EIGlzIHRoZSBudW1iZXIgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYyBiL2RyaXZlcnMvbmV0L3NmYy9tdGQuYwppbmRleCA2NjVjYWZiLi44MjBjMjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbXRkLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIEVGWF9EUklWRVJfTkFNRSAic2ZjX210ZCIKICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAic3BpLmgiCisjaW5jbHVkZSAiZWZ4LmgiCiAKICNkZWZpbmUgRUZYX1NQSV9WRVJJRllfQlVGX0xFTiAxNgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCBlMDE5YWQxLi5lMTY5ZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTI1LDE1ICsyNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSAiZW51bS5oIgogI2luY2x1ZGUgImJpdGZpZWxkLmgiCiAKLSNkZWZpbmUgRUZYX01BWF9MUk9fREVTQ1JJUFRPUlMgOAotI2RlZmluZSBFRlhfTUFYX0xST19BR0dSIE1BWF9TS0JfRlJBR1MKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogQnVpbGQgZGVmaW5pdGlvbnMKQEAgLTM0MCwxMyArMzM2LDEyIEBACiAgKiBAZXZlbnRxX3JlYWRfcHRyOiBFdmVudCBxdWV1ZSByZWFkIHBvaW50ZXIKICAqIEBsYXN0X2V2ZW50cV9yZWFkX3B0cjogTGFzdCBldmVudCBxdWV1ZSByZWFkIHBvaW50ZXIgdmFsdWUuCiAgKiBAZXZlbnRxX21hZ2ljOiBFdmVudCBxdWV1ZSBtYWdpYyB2YWx1ZSBmb3IgZHJpdmVyLWdlbmVyYXRlZCB0ZXN0IGV2ZW50cwotICogQGxyb19tZ3I6IExSTyBzdGF0ZQorICogQGlycV9jb3VudDogTnVtYmVyIG9mIElSUXMgc2luY2UgbGFzdCBhZGFwdGl2ZSBtb2RlcmF0aW9uIGRlY2lzaW9uCisgKiBAaXJxX21vZF9zY29yZTogSVJRIG1vZGVyYXRpb24gc2NvcmUKICAqIEByeF9hbGxvY19sZXZlbDogV2F0ZXJtYXJrIGJhc2VkIGhldXJpc3RpYyBjb3VudGVyIGZvciBwdXNoaW5nIGRlc2NyaXB0b3JzCiAgKglhbmQgZGlhZ25vc3RpYyBjb3VudGVycwogICogQHJ4X2FsbG9jX3B1c2hfcGFnZXM6IFJYIGFsbG9jYXRpb24gbWV0aG9kIGN1cnJlbnRseSBpbiB1c2UgZm9yIHB1c2hpbmcKICAqCWRlc2NyaXB0b3JzCi0gKiBAcnhfYWxsb2NfcG9wX3BhZ2VzOiBSWCBhbGxvY2F0aW9uIG1ldGhvZCBjdXJyZW50bHkgaW4gdXNlIGZvciBwb3BwaW5nCi0gKglkZXNjcmlwdG9ycwogICogQG5fcnhfdG9iZV9kaXNjOiBDb3VudCBvZiBSWF9UT0JFX0RJU0MgZXJyb3JzCiAgKiBAbl9yeF9pcF9mcmFnX2VycjogQ291bnQgb2YgUlggSVAgZnJhZ21lbnQgZXJyb3JzCiAgKiBAbl9yeF9pcF9oZHJfY2hrc3VtX2VycjogQ291bnQgb2YgUlggSVAgaGVhZGVyIGNoZWNrc3VtIGVycm9ycwpAQCAtMzcxLDEwICszNjYsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbGFzdF9ldmVudHFfcmVhZF9wdHI7CiAJdW5zaWduZWQgaW50IGV2ZW50cV9tYWdpYzsKIAotCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOworCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CisJdW5zaWduZWQgaW50IGlycV9tb2Rfc2NvcmU7CisKIAlpbnQgcnhfYWxsb2NfbGV2ZWw7CiAJaW50IHJ4X2FsbG9jX3B1c2hfcGFnZXM7Ci0JaW50IHJ4X2FsbG9jX3BvcF9wYWdlczsKIAogCXVuc2lnbmVkIG5fcnhfdG9iZV9kaXNjOwogCXVuc2lnbmVkIG5fcnhfaXBfZnJhZ19lcnI7CkBAIC0zOTQsMTMgKzM5MCwxMSBAQAogCiAvKioKICAqIHN0cnVjdCBlZnhfYmxpbmtlciAtIFMvVyBMRUQgYmxpbmtpbmcgY29udGV4dAotICogQGxlZF9udW06IExFRCBJRCAoYm9hcmQtc3BlY2lmaWMgbWVhbmluZykKICAqIEBzdGF0ZTogQ3VycmVudCBzdGF0ZSAtIG9uIG9yIG9mZgogICogQHJlc3VibWl0OiBUaW1lciByZXN1Ym1pc3Npb24gZmxhZwogICogQHRpbWVyOiBDb250cm9sIHRpbWVyIGZvciBibGlua2luZwogICovCiBzdHJ1Y3QgZWZ4X2JsaW5rZXIgewotCWludCBsZWRfbnVtOwogCWJvb2wgc3RhdGU7CiAJYm9vbCByZXN1Ym1pdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKQEAgLTQxMyw4ICs0MDcsOCBAQAogICogQG1ham9yOiBNYWpvciByZXYuICgnQScsICdCJyAuLi4pCiAgKiBAbWlub3I6IE1pbm9yIHJldi4gKDAsIDEsIC4uLikKICAqIEBpbml0OiBJbml0aWFsaXNhdGlvbiBmdW5jdGlvbgotICogQGluaXRfbGVkczogU2V0cyB1cCBib2FyZCBMRURzCi0gKiBAc2V0X2ZhdWx0X2xlZDogVHVybnMgdGhlIGZhdWx0IExFRCBvbiBvciBvZmYKKyAqIEBpbml0X2xlZHM6IFNldHMgdXAgYm9hcmQgTEVEcy4gTWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5LgorICogQHNldF9pZF9sZWQ6IFR1cm5zIHRoZSBpZGVudGlmaWNhdGlvbiBMRUQgb24gb3Igb2ZmCiAgKiBAYmxpbms6IFN0YXJ0cy9zdG9wcyBibGlua2luZwogICogQG1vbml0b3I6IEJvYXJkLXNwZWNpZmljIGhlYWx0aCBjaGVjayBmdW5jdGlvbgogICogQGZpbmk6IENsZWFudXAgZnVuY3Rpb24KQEAgLTQzMCw5ICs0MjQsOSBAQAogCS8qIEFzIHRoZSBMRURzIGFyZSB0eXBpY2FsbHkgYXR0YWNoZWQgdG8gdGhlIFBIWSwgTEVEcwogCSAqIGhhdmUgYSBzZXBhcmF0ZSBpbml0IGNhbGxiYWNrIHRoYXQgaGFwcGVucyBsYXRlciB0aGFuCiAJICogYm9hcmQgaW5pdC4gKi8KLQlpbnQgKCppbml0X2xlZHMpKHN0cnVjdCBlZnhfbmljICplZngpOworCXZvaWQgKCppbml0X2xlZHMpKHN0cnVjdCBlZnhfbmljICplZngpOworCXZvaWQgKCpzZXRfaWRfbGVkKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSk7CiAJaW50ICgqbW9uaXRvcikgKHN0cnVjdCBlZnhfbmljICpuaWMpOwotCXZvaWQgKCpzZXRfZmF1bHRfbGVkKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSk7CiAJdm9pZCAoKmJsaW5rKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGFydCk7CiAJdm9pZCAoKmZpbmkpIChzdHJ1Y3QgZWZ4X25pYyAqbmljKTsKIAlzdHJ1Y3QgZWZ4X2JsaW5rZXIgYmxpbmtlcjsKQEAgLTQ1OSw2ICs0NTMsNyBAQAogCVBIWV9UWVBFX1FUMjAyMkMyID0gNCwKIAlQSFlfVFlQRV9QTTgzNTggPSA2LAogCVBIWV9UWVBFX1NGVDkwMDFBID0gOCwKKwlQSFlfVFlQRV9RVDIwMjVDID0gOSwKIAlQSFlfVFlQRV9TRlQ5MDAxQiA9IDEwLAogCVBIWV9UWVBFX01BWAkvKiBJbnNlcnQgYW55IG5ldyBpdGVtcyBiZWZvcmUgdGhpcyAqLwogfTsKQEAgLTcxMyw2ICs3MDgsOCBAQAogICogQG1lbWJhc2U6IE1lbW9yeSBCQVIgdmFsdWUKICAqIEBiaXVfbG9jazogQklVIChidXMgaW50ZXJmYWNlIHVuaXQpIGxvY2sKICAqIEBpbnRlcnJ1cHRfbW9kZTogSW50ZXJydXB0IG1vZGUKKyAqIEBpcnFfcnhfYWRhcHRpdmU6IEFkYXB0aXZlIElSUSBtb2RlcmF0aW9uIGVuYWJsZWQgZm9yIFJYIGV2ZW50IHF1ZXVlcworICogQGlycV9yeF9tb2RlcmF0aW9uOiBJUlEgbW9kZXJhdGlvbiB0aW1lIGZvciBSWCBldmVudCBxdWV1ZXMKICAqIEBpMmNfYWRhcDogSTJDIGFkYXB0ZXIKICAqIEBib2FyZF9pbmZvOiBCb2FyZC1sZXZlbCBpbmZvcm1hdGlvbgogICogQHN0YXRlOiBEZXZpY2Ugc3RhdGUgZmxhZy4gU2VyaWFsaXNlZCBieSB0aGUgcnRubF9sb2NrLgpAQCAtNzk0LDYgKzc5MSw4IEBACiAJdm9pZCBfX2lvbWVtICptZW1iYXNlOwogCXNwaW5sb2NrX3QgYml1X2xvY2s7CiAJZW51bSBlZnhfaW50X21vZGUgaW50ZXJydXB0X21vZGU7CisJYm9vbCBpcnFfcnhfYWRhcHRpdmU7CisJdW5zaWduZWQgaW50IGlycV9yeF9tb2RlcmF0aW9uOwogCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOwogCXN0cnVjdCBlZnhfYm9hcmQgYm9hcmRfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaCBiL2RyaXZlcnMvbmV0L3NmYy9waHkuaAppbmRleCAwN2U4NTVjLi5jMWNmZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCkBAIC0xOCwxMiArMTgsMTYgQEAKIAogZXh0ZXJuIHZvaWQgdGVueHByZXNzX3BoeV9ibGluayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIGJsaW5rKTsKIAorLyogV2FpdCBmb3IgdGhlIFBIWSB0byBib290LiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBQSFkgZmFpbGVkCisgKiB0byBib290IGR1ZSB0byBjb3JydXB0IGZsYXNoLCBvciBzb21lIG90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUuICovCitleHRlcm4gaW50IHNmdDkwMDFfd2FpdF9ib290KHN0cnVjdCBlZnhfbmljICplZngpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gdGhlIGRyaXZlciBmb3IgWEZQIG9wdGljYWwgUEhZcworICogQU1DQy9RdWFrZSBRVDIweHggUEhZcwogICovCiBleHRlcm4gc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25feGZwX3BoeV9vcHM7CiAKLS8qIFRoZSBRVUFLRSBYRlAgUEhZIHByb3ZpZGVzIHZhcmlvdXMgSC9XIGNvbnRyb2wgc3RhdGVzIGZvciBMRURzICovCisvKiBUaGVzZSBQSFlzIHByb3ZpZGUgdmFyaW91cyBIL1cgY29udHJvbCBzdGF0ZXMgZm9yIExFRHMgKi8KICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfSU5WQUwJKDApCiAjZGVmaW5lIFFVQUtFX0xFRF9MSU5LX1NUQVQJKDEpCiAjZGVmaW5lIFFVQUtFX0xFRF9MSU5LX0FDVAkoMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKaW5kZXggYjhiYTRiYi4uNjZkN2ZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKQEAgLTk5LDEwOSArOTksNiBAQAogfQogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIExpbnV4IGdlbmVyaWMgTFJPIGhhbmRsaW5nCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotc3RhdGljIGludCBlZnhfbHJvX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcF9oZHIsCi0JCQkgICAgICAgdm9pZCAqKnRjcHVkcF9oZHIsIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9IHByaXY7Ci0Jc3RydWN0IGlwaGRyICppcGg7Ci0Jc3RydWN0IHRjcGhkciAqdGg7Ci0KLQlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwotCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSB8fCBpcGgtPnByb3RvY29sICE9IElQUFJPVE9fVENQKQotCQlnb3RvIGZhaWw7Ci0KLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIGlwaC0+aWhsICogNCk7Ci0KLQkqdGNwdWRwX2hkciA9IHRoOwotCSppcF9oZHIgPSBpcGg7Ci0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9MUk87Ci0JcmV0dXJuIDA7Ci1mYWlsOgotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9TS0I7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGVmeF9nZXRfZnJhZ19oZHIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKm1hY19oZHIsCi0JCQkgICAgdm9pZCAqKmlwX2hkciwgdm9pZCAqKnRjcHVkcF9oZHIsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsID0gcHJpdjsKLQlzdHJ1Y3QgZXRoaGRyICplaDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQotCS8qIFdlIHN1cHBvcnQgRXRoZXJJSSBhbmQgVkxBTiBlbmNhcHN1bGF0ZWQgSVB2NCAqLwotCWVoID0gcGFnZV9hZGRyZXNzKGZyYWctPnBhZ2UpICsgZnJhZy0+cGFnZV9vZmZzZXQ7Ci0JKm1hY19oZHIgPSBlaDsKLQotCWlmIChlaC0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKShlaCArIDEpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKWVoOwotCQlpZiAodmVoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKLQkJCWdvdG8gZmFpbDsKLQotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKHZlaCArIDEpOwotCX0KLQkqaXBfaGRyID0gaXBoOwotCi0JLyogV2UgY2FuIG9ubHkgZG8gTFJPIG92ZXIgVENQICovCi0JaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCWdvdG8gZmFpbDsKLQotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7Ci0JKnRjcHVkcF9oZHIgPSAoc3RydWN0IHRjcGhkciAqKSgodTggKikgaXBoICsgaXBoLT5paGwgKiA0KTsKLQotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9MUk87Ci0JcmV0dXJuIDA7Ci0gZmFpbDoKLQljaGFubmVsLT5yeF9hbGxvY19sZXZlbCArPSBSWF9BTExPQ19GQUNUT1JfU0tCOwotCXJldHVybiAtMTsKLX0KLQotaW50IGVmeF9scm9faW5pdChzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IsIHN0cnVjdCBlZnhfbmljICplZngpCi17Ci0Jc2l6ZV90IHMgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBFRlhfTUFYX0xST19ERVNDUklQVE9SUzsKLQlzdHJ1Y3QgbmV0X2xyb19kZXNjICpscm9fYXJyOwotCi0JLyogQWxsb2NhdGUgdGhlIExSTyBkZXNjcmlwdG9ycyBzdHJ1Y3R1cmUgKi8KLQlscm9fYXJyID0ga3phbGxvYyhzLCBHRlBfS0VSTkVMKTsKLQlpZiAobHJvX2FyciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxyb19tZ3ItPmxyb19hcnIgPSBscm9fYXJyOwotCWxyb19tZ3ItPm1heF9kZXNjID0gRUZYX01BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JbHJvX21nci0+bWF4X2FnZ3IgPSBFRlhfTUFYX0xST19BR0dSOwotCWxyb19tZ3ItPmZyYWdfYWxpZ25fcGFkID0gRUZYX1BBR0VfU0tCX0FMSUdOOwotCi0JbHJvX21nci0+Z2V0X3NrYl9oZWFkZXIgPSBlZnhfbHJvX2dldF9za2JfaGRyOwotCWxyb19tZ3ItPmdldF9mcmFnX2hlYWRlciA9IGVmeF9nZXRfZnJhZ19oZHI7Ci0JbHJvX21nci0+ZGV2ID0gZWZ4LT5uZXRfZGV2OwotCi0JbHJvX21nci0+ZmVhdHVyZXMgPSBMUk9fRl9OQVBJOwotCi0JLyogV2UgY2FuIHBhc3MgcGFja2V0cyB1cCB3aXRoIHRoZSBjaGVja3N1bSBpbnRhY3QgKi8KLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQotCWxyb19tZ3ItPmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBlZnhfbHJvX2Zpbmkoc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyKQotewotCWtmcmVlKGxyb19tZ3ItPmxyb19hcnIpOwotCWxyb19tZ3ItPmxyb19hcnIgPSBOVUxMOwotfQotCiAvKioKICAqIGVmeF9pbml0X3J4X2J1ZmZlcl9za2IgLSBjcmVhdGUgbmV3IFJYIGJ1ZmZlciB1c2luZyBza2ItYmFzZWQgYWxsb2NhdGlvbgogICoKQEAgLTU0OSw3NyArNDQ2LDMxIEBACiBzdGF0aWMgdm9pZCBlZnhfcnhfcGFja2V0X2xybyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsCiAJCQkgICAgICBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmKQogewotCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciA9ICZjaGFubmVsLT5scm9fbWdyOwotCXZvaWQgKnByaXYgPSBjaGFubmVsOworCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZjaGFubmVsLT5uYXBpX3N0cjsKIAogCS8qIFBhc3MgdGhlIHNrYi9wYWdlIGludG8gdGhlIExSTyBlbmdpbmUgKi8KIAlpZiAocnhfYnVmLT5wYWdlKSB7Ci0JCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgZnJhZ3M7CisJCXN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyBpbmZvOwogCi0JCWZyYWdzLnBhZ2UgPSByeF9idWYtPnBhZ2U7Ci0JCWZyYWdzLnBhZ2Vfb2Zmc2V0ID0gZWZ4X3J4X2J1Zl9vZmZzZXQocnhfYnVmKTsKLQkJZnJhZ3Muc2l6ZSA9IHJ4X2J1Zi0+bGVuOworCQlpbmZvLmZyYWdzWzBdLnBhZ2UgPSByeF9idWYtPnBhZ2U7CisJCWluZm8uZnJhZ3NbMF0ucGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpOworCQlpbmZvLmZyYWdzWzBdLnNpemUgPSByeF9idWYtPmxlbjsKKwkJaW5mby5ucl9mcmFncyA9IDE7CisJCWluZm8uaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCWluZm8ubGVuID0gcnhfYnVmLT5sZW47CiAKLQkJbHJvX3JlY2VpdmVfZnJhZ3MobHJvX21nciwgJmZyYWdzLCByeF9idWYtPmxlbiwKLQkJCQkgIHJ4X2J1Zi0+bGVuLCBwcml2LCAwKTsKKwkJbmFwaV9ncm9fZnJhZ3MobmFwaSwgJmluZm8pOwogCiAJCUVGWF9CVUdfT05fUEFSQU5PSUQocnhfYnVmLT5za2IpOwogCQlyeF9idWYtPnBhZ2UgPSBOVUxMOwogCX0gZWxzZSB7CiAJCUVGWF9CVUdfT05fUEFSQU5PSUQoIXJ4X2J1Zi0+c2tiKTsKIAotCQlscm9fcmVjZWl2ZV9za2IobHJvX21nciwgcnhfYnVmLT5za2IsIHByaXYpOworCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHJ4X2J1Zi0+c2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwogCX0KIH0KIAotLyogQWxsb2NhdGUgYW5kIGNvbnN0cnVjdCBhbiBTS0IgYXJvdW5kIGEgc3RydWN0IHBhZ2UuKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZWZ4X3J4X21rX3NrYihzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmLAotCQkJCSAgICAgc3RydWN0IGVmeF9uaWMgKmVmeCwKLQkJCQkgICAgIGludCBoZHJfbGVuKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvKiBBbGxvY2F0ZSBhbiBTS0IgdG8gc3RvcmUgdGhlIGhlYWRlcnMgKi8KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGVmeC0+bmV0X2RldiwgaGRyX2xlbiArIEVGWF9QQUdFX1NLQl9BTElHTik7Ci0JaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewotCQlFRlhfRVJSX1JMKGVmeCwgIlJYIG91dCBvZiBtZW1vcnkgZm9yIHNrYlxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCUVGWF9CVUdfT05fUEFSQU5PSUQoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7Ci0JRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPmxlbiA8IGhkcl9sZW4pOwotCi0Jc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlza2JfcmVzZXJ2ZShza2IsIEVGWF9QQUdFX1NLQl9BTElHTik7Ci0KLQlza2ItPmxlbiA9IHJ4X2J1Zi0+bGVuOwotCXNrYi0+dHJ1ZXNpemUgPSByeF9idWYtPmxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7Ci0JbWVtY3B5KHNrYi0+ZGF0YSwgcnhfYnVmLT5kYXRhLCBoZHJfbGVuKTsKLQlza2ItPnRhaWwgKz0gaGRyX2xlbjsKLQotCS8qIEFwcGVuZCB0aGUgcmVtYWluaW5nIHBhZ2Ugb250byB0aGUgZnJhZyBsaXN0ICovCi0JaWYgKHVubGlrZWx5KHJ4X2J1Zi0+bGVuID4gaGRyX2xlbikpIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3M7Ci0JCWZyYWctPnBhZ2UgPSByeF9idWYtPnBhZ2U7Ci0JCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gZWZ4X3J4X2J1Zl9vZmZzZXQocnhfYnVmKSArIGhkcl9sZW47Ci0JCWZyYWctPnNpemUgPSBza2ItPmxlbiAtIGhkcl9sZW47Ci0JCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSAxOwotCQlza2ItPmRhdGFfbGVuID0gZnJhZy0+c2l6ZTsKLQl9IGVsc2UgewotCQlfX2ZyZWVfcGFnZXMocnhfYnVmLT5wYWdlLCBlZngtPnJ4X2J1ZmZlcl9vcmRlcik7Ci0JCXNrYi0+ZGF0YV9sZW4gPSAwOwotCX0KLQotCS8qIE93bmVyc2hpcCBoYXMgdHJhbnNmZXJyZWQgZnJvbSB0aGUgcnhfYnVmIHRvIHNrYiAqLwotCXJ4X2J1Zi0+cGFnZSA9IE5VTEw7Ci0KLQkvKiBNb3ZlIHBhc3QgdGhlIGV0aGVybmV0IGhlYWRlciAqLwotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGVmeC0+bmV0X2Rldik7Ci0KLQlyZXR1cm4gc2tiOwotfQotCiB2b2lkIGVmeF9yeF9wYWNrZXQoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUsIHVuc2lnbmVkIGludCBpbmRleCwKIAkJICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBjaGVja3N1bW1lZCwgYm9vbCBkaXNjYXJkKQogewpAQCAtNjg3LDcgKzUzOCw2IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgbHJvID0gISEoZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKTsKIAogCS8qIElmIHdlJ3JlIGluIGxvb3BiYWNrIHRlc3QsIHRoZW4gcGFzcyB0aGUgcGFja2V0IGRpcmVjdGx5IHRvIHRoZQogCSAqIGxvb3BiYWNrIGxheWVyLCBhbmQgZnJlZSB0aGUgcnhfYnVmIGhlcmUKQEAgLTcwOSw0MSArNTU5LDIzIEBACiAJCQkJCQkgICAgICAgZWZ4LT5uZXRfZGV2KTsKIAl9CiAKLQkvKiBCb3RoIG91ciBnZW5lcmljLUxSTyBhbmQgU0ZDLVNTUiBzdXBwb3J0IHNrYiBhbmQgcGFnZSBiYXNlZAotCSAqIGFsbG9jYXRpb24sIGJ1dCBuZWl0aGVyIHN1cHBvcnQgc3dpdGNoaW5nIGZyb20gb25lIHRvIHRoZQotCSAqIG90aGVyIG9uIHRoZSBmbHkuIElmIHdlIHNwb3QgdGhhdCB0aGUgYWxsb2NhdGlvbiBtb2RlIGhhcwotCSAqIGNoYW5nZWQsIHRoZW4gZmx1c2ggdGhlIExSTyBzdGF0ZS4KLQkgKi8KLQlpZiAodW5saWtlbHkoY2hhbm5lbC0+cnhfYWxsb2NfcG9wX3BhZ2VzICE9IChyeF9idWYtPnBhZ2UgIT0gTlVMTCkpKSB7Ci0JCWVmeF9mbHVzaF9scm8oY2hhbm5lbCk7Ci0JCWNoYW5uZWwtPnJ4X2FsbG9jX3BvcF9wYWdlcyA9IChyeF9idWYtPnBhZ2UgIT0gTlVMTCk7Ci0JfQotCWlmIChsaWtlbHkoY2hlY2tzdW1tZWQgJiYgbHJvKSkgeworCWlmIChsaWtlbHkoY2hlY2tzdW1tZWQgfHwgcnhfYnVmLT5wYWdlKSkgewogCQllZnhfcnhfcGFja2V0X2xybyhjaGFubmVsLCByeF9idWYpOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogRm9ybSBhbiBza2IgaWYgcmVxdWlyZWQgKi8KLQlpZiAocnhfYnVmLT5wYWdlKSB7Ci0JCWludCBoZHJfbGVuID0gbWluKHJ4X2J1Zi0+bGVuLCBFRlhfU0tCX0hFQURFUlMpOwotCQlza2IgPSBlZnhfcnhfbWtfc2tiKHJ4X2J1ZiwgZWZ4LCBoZHJfbGVuKTsKLQkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewotCQkJZWZ4X2ZyZWVfcnhfYnVmZmVyKGVmeCwgcnhfYnVmKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFdlIG5vdyBvd24gdGhlIFNLQiAqLwotCQlza2IgPSByeF9idWYtPnNrYjsKLQkJcnhfYnVmLT5za2IgPSBOVUxMOwotCX0KKwkvKiBXZSBub3cgb3duIHRoZSBTS0IgKi8KKwlza2IgPSByeF9idWYtPnNrYjsKKwlyeF9idWYtPnNrYiA9IE5VTEw7CiAKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+cGFnZSk7CiAJRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPnNrYik7CiAJRUZYX0JVR19PTl9QQVJBTk9JRCghc2tiKTsKIAogCS8qIFNldCB0aGUgU0tCIGZsYWdzICovCi0JaWYgKHVubGlrZWx5KCFjaGVja3N1bW1lZCB8fCAhZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkKSkKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBjaGFubmVsLT5jaGFubmVsKTsKIAogCS8qIFBhc3MgdGhlIHBhY2tldCB1cCAqLwogCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CkBAIC03NjAsNyArNTkyLDcgQEAKIAllbnVtIGVmeF9yeF9hbGxvY19tZXRob2QgbWV0aG9kID0gcnhfYWxsb2NfbWV0aG9kOwogCiAJLyogT25seSBtYWtlcyBzZW5zZSB0byB1c2UgcGFnZSBiYXNlZCBhbGxvY2F0aW9uIGlmIExSTyBpcyBlbmFibGVkICovCi0JaWYgKCEoY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkgeworCWlmICghKGNoYW5uZWwtPmVmeC0+bmV0X2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTykpIHsKIAkJbWV0aG9kID0gUlhfQUxMT0NfTUVUSE9EX1NLQjsKIAl9IGVsc2UgaWYgKG1ldGhvZCA9PSBSWF9BTExPQ19NRVRIT0RfQVVUTykgewogCQkvKiBDb25zdHJhaW4gdGhlIHJ4X2FsbG9jX2xldmVsICovCkBAIC04NjUsMTEgKzY5Nyw2IEBACiAJcnhfcXVldWUtPmJ1ZmZlciA9IE5VTEw7CiB9CiAKLXZvaWQgZWZ4X2ZsdXNoX2xybyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JbHJvX2ZsdXNoX2FsbCgmY2hhbm5lbC0+bHJvX21ncik7Ci19Ci0KIAogbW9kdWxlX3BhcmFtKHJ4X2FsbG9jX21ldGhvZCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocnhfYWxsb2NfbWV0aG9kLCAiQWxsb2NhdGlvbiBtZXRob2QgdXNlZCBmb3IgUlggYnVmZmVycyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmggYi9kcml2ZXJzL25ldC9zZmMvcnguaAppbmRleCAwZTg4YTlkLi40MmVlNzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvcnguaApAQCAtMTcsOSArMTcsNiBAQAogdm9pZCBlZnhfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSk7CiB2b2lkIGVmeF9maW5pX3J4X3F1ZXVlKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIAotaW50IGVmeF9scm9faW5pdChzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IsIHN0cnVjdCBlZnhfbmljICplZngpOwotdm9pZCBlZnhfbHJvX2Zpbmkoc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyKTsKLXZvaWQgZWZ4X2ZsdXNoX2xybyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogdm9pZCBlZnhfcnhfc3RyYXRlZ3koc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIHZvaWQgZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSk7CiB2b2lkIGVmeF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwppbmRleCBjYjI1YWU1Li40ZWFjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAiZWZ4LmgiCiAjaW5jbHVkZSAicGh5LmgiCkBAIC0zOTgsNiArMzk5LDcgQEAKIAogaW50IHNmbjQxMTF0X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlpbnQgaSA9IDA7CiAJaW50IHJjOwogCiAJZWZ4LT5ib2FyZF9pbmZvLmh3bW9uX2NsaWVudCA9CkBAIC00MTYsMTMgKzQxOCwyMCBAQAogCWlmIChyYykKIAkJZ290byBmYWlsX2h3bW9uOwogCi0JaWYgKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSB7Ci0JCWVmeF9zdGF0c19kaXNhYmxlKGVmeCk7Ci0JCXNmbjQxMTF0X3Jlc2V0KGVmeCk7Ci0JfQorCWRvIHsKKwkJaWYgKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSB7CisJCQkvKiBQSFkgbWF5IG5vdCBnZW5lcmF0ZSBhIDE1Ni4yNSBNSHogY2xvY2sgYW5kIE1BQworCQkJICogc3RhdHMgZmV0Y2ggd2lsbCBmYWlsLiAqLworCQkJZWZ4X3N0YXRzX2Rpc2FibGUoZWZ4KTsKKwkJCXNmbjQxMTF0X3Jlc2V0KGVmeCk7CisJCX0KKwkJcmMgPSBzZnQ5MDAxX3dhaXRfYm9vdChlZngpOworCQlpZiAocmMgPT0gMCkKKwkJCXJldHVybiAwOworCQllZngtPnBoeV9tb2RlID0gUEhZX01PREVfU1BFQ0lBTDsKKwl9IHdoaWxlIChyYyA9PSAtRUlOVkFMICYmICsraSA8IDIpOwogCi0JcmV0dXJuIDA7Ci0KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmVmeC0+cGNpX2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGh5X2ZsYXNoX2NmZyk7CiBmYWlsX2h3bW9uOgogCWkyY191bnJlZ2lzdGVyX2RldmljZShlZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50KTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKaW5kZXggZjBlZmQyNC4uZTYxZGM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwpAQCAtOCw2ICs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImVmeC5oIgogI2luY2x1ZGUgIm1kaW9fMTBnLmgiCkBAIC0xNTcsMTQgKzE1OCwxNiBAQAogI2RlZmluZSBQQ1NfMTBHQkFTRVRfQkxLTEtfV0lEVEggMQogCiAvKiBCb290IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBQQ1NfQk9PVF9TVEFUVVNfUkVHCTUzMjQ4Ci0jZGVmaW5lIFBDU19CT09UX0ZBVEFMX0VSUl9MQk4JKDApCi0jZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0xCTgkoMSkKLSNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfV0lEVEgJKDIpCi0jZGVmaW5lIFBDU19CT09UX0NPTVBMRVRFX0xCTgkoMykKLQotI2RlZmluZSBQQ1NfQk9PVF9NQVhfREVMQVkJKDEwMCkKLSNkZWZpbmUgUENTX0JPT1RfUE9MTF9ERUxBWQkoMTApCisjZGVmaW5lIFBDU19CT09UX1NUQVRVU19SRUcJCTUzMjQ4CisjZGVmaW5lIFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTgkwCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0xCTgkJMQorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSAkJMgorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19JTklUCQkwCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX1dBSVRfTURJTwkxCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0NIRUNLU1VNCTIKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfSlVNUAkJMworI2RlZmluZSBQQ1NfQk9PVF9ET1dOTE9BRF9XQUlUX0xCTgkzCisjZGVmaW5lIFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4JNAogCiAvKiAxMDBNLzFHIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgR1BIWV9YQ09OVFJPTF9SRUcJNDkxNTIKQEAgLTIyOSw0MCArMjMyLDYyIEBACiBzdGF0aWMgREVWSUNFX0FUVFIocGh5X3Nob3J0X3JlYWNoLCAwNjQ0LCBzaG93X3BoeV9zaG9ydF9yZWFjaCwKIAkJICAgc2V0X3BoeV9zaG9ydF9yZWFjaCk7CiAKLS8qIENoZWNrIHRoYXQgdGhlIEMxNjYgaGFzIGJvb3RlZCBzdWNjZXNzZnVsbHkgKi8KLXN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9jaGVjayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoraW50IHNmdDkwMDFfd2FpdF9ib290KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKLQlpbnQgY291bnQgPSBQQ1NfQk9PVF9NQVhfREVMQVkgLyBQQ1NfQk9PVF9QT0xMX0RFTEFZOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBIWiArIDE7CiAJaW50IGJvb3Rfc3RhdDsKIAotCS8qIFdhaXQgZm9yIHRoZSBib290IHRvIGNvbXBsZXRlIChvciBub3QpICovCi0Jd2hpbGUgKGNvdW50KSB7Ci0JCWJvb3Rfc3RhdCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwKKwlmb3IgKDs7KSB7CisJCWJvb3Rfc3RhdCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKIAkJCQkJICAgICAgIE1ESU9fTU1EX1BDUywKIAkJCQkJICAgICAgIFBDU19CT09UX1NUQVRVU19SRUcpOwotCQlpZiAoYm9vdF9zdGF0ICYgKDEgPDwgUENTX0JPT1RfQ09NUExFVEVfTEJOKSkKLQkJCWJyZWFrOwotCQljb3VudC0tOwotCQl1ZGVsYXkoUENTX0JPT1RfUE9MTF9ERUxBWSk7Ci0JfQorCQlpZiAoYm9vdF9zdGF0ID49IDApIHsKKwkJCUVGWF9MT0coZWZ4LCAiUEhZIGJvb3Qgc3RhdHVzID0gJSN4XG4iLCBib290X3N0YXQpOworCQkJc3dpdGNoIChib290X3N0YXQgJgorCQkJCSgoMSA8PCBQQ1NfQk9PVF9GQVRBTF9FUlJPUl9MQk4pIHwKKwkJCQkgKDMgPDwgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkJICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSB8CisJCQkJICgxIDw8IFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4pKSkgeworCQkJY2FzZSAoKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSB8CisJCQkgICAgICAoUENTX0JPT1RfUFJPR1JFU1NfQ0hFQ0tTVU0gPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pKToKKwkJCWNhc2UgKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAorCQkJICAgICAgKFBDU19CT09UX1BST0dSRVNTX0lOSVQgPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSk6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfV0FJVF9NRElPIDw8CisJCQkgICAgICAgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9ET1dOTE9BRF9XQUlUX0xCTikpOgorCQkJCXJldHVybiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpID8KKwkJCQkJMCA6IC1FSU87CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfSlVNUCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTikpOgorCQkJY2FzZSAoKFBDU19CT09UX1BST0dSRVNTX0pVTVAgPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9DT0RFX1NUQVJURURfTEJOKSk6CisJCQkJcmV0dXJuIChlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkgPworCQkJCQktRUlPIDogMDsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGJvb3Rfc3RhdCAmICgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikpCisJCQkJCXJldHVybiAtRUlPOworCQkJCWJyZWFrOworCQkJfQorCQl9CiAKLQlpZiAoIWNvdW50KSB7Ci0JCUVGWF9FUlIoZWZ4LCAiJXM6IFBIWSBib290IHRpbWVkIG91dC4gTGFzdCBzdGF0dXMgIgotCQkJIiV4XG4iLCBfX2Z1bmNfXywKLQkJCShib290X3N0YXQgPj4gUENTX0JPT1RfUFJPR1JFU1NfTEJOKSAmCi0JCQkoKDEgPDwgUENTX0JPT1RfUFJPR1JFU1NfV0lEVEgpIC0gMSkpOwotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQl9CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAKLQlyZXR1cm4gMDsKKwkJbXNsZWVwKDUwKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgdGVueHByZXNzX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlpbnQgcGh5X2lkID0gZWZ4LT5taWkucGh5X2lkOwogCWludCByZWc7Ci0JaW50IHJjOwogCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewogCQkvKiBFbmFibGUgMzEyLjUgTUh6IGNsb2NrICovCkBAIC0yODUsMTAgKzMxMCw2IEBACiAJCQkJICAgICAgIGZhbHNlKTsKIAl9CiAKLQlyYyA9IHRlbnhwcmVzc19waHlfY2hlY2soZWZ4KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KIAkvKiBTZXQgdGhlIExFRHMgdXAgYXM6IEdyZWVuID0gTGluaywgQW1iZXIgPSBMaW5rL0FjdCwgUmVkID0gT2ZmICovCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewogCQltZGlvX2NsYXVzZTQ1X3NldF9mbGFnKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCkBAIC0yOTksNyArMzIwLDcgQEAKIAkJCQkgICAgUE1BX1BNRF9MRURfT1ZFUlJfUkVHLCBQTUFfUE1EX0xFRF9ERUZBVUxUKTsKIAl9CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCkBAIC01NzEsMTUgKzU5MiwxNCBAQAogc3RhdGljIHZvaWQgdGVueHByZXNzX3BoeV9wb2xsKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IHRlbnhwcmVzc19waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOwotCWJvb2wgY2hhbmdlID0gZmFsc2UsIGxpbmtfb2s7Ci0JdW5zaWduZWQgbGlua19mYzsKKwlib29sIGNoYW5nZSA9IGZhbHNlOwogCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewotCQlsaW5rX29rID0gc2Z4NzEwMV9saW5rX29rKGVmeCk7CisJCWJvb2wgbGlua19vayA9IHNmeDcxMDFfbGlua19vayhlZngpOwogCQlpZiAobGlua19vayAhPSBlZngtPmxpbmtfdXApIHsKIAkJCWNoYW5nZSA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlsaW5rX2ZjID0gbWRpb19jbGF1c2U0NV9nZXRfcGF1c2UoZWZ4KTsKKwkJCXVuc2lnbmVkIGludCBsaW5rX2ZjID0gbWRpb19jbGF1c2U0NV9nZXRfcGF1c2UoZWZ4KTsKIAkJCWlmIChsaW5rX2ZjICE9IGVmeC0+bGlua19mYykKIAkJCQljaGFuZ2UgPSB0cnVlOwogCQl9CkBAIC02NzksMTIgKzY5OSwxMCBAQAogewogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7Ci0JaW50IHJjID0gMCwgcmMyLCBpLCByZXNfcmVnOworCWludCByYyA9IDAsIHJjMiwgaSwgY3RybF9yZWcsIHJlc19yZWc7CiAKLQlpZiAoIShmbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpKQotCQlyZXR1cm4gMDsKLQotCWVmeC0+cGh5X29wLT5nZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7CisJaWYgKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkKKwkJZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZlY21kKTsKIAogCS8qIEluaXRpYWxpc2UgY2FibGUgZGlhZ25vc3RpYyByZXN1bHRzIHRvIHVua25vd24gZmFpbHVyZSAqLwogCWZvciAoaSA9IDE7IGkgPCA5OyArK2kpCkBAIC02OTIsMTggKzcxMCwyMiBAQAogCiAJLyogUnVuIGNhYmxlIGRpYWdub3N0aWNzOyB3YWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlbSB0byBjb21wbGV0ZS4KIAkgKiBBIGNhYmxlIGZhdWx0IGlzIG5vdCBhIHNlbGYtdGVzdCBmYWlsdXJlLCBidXQgYSB0aW1lb3V0IGlzLiAqLworCWN0cmxfcmVnID0gKCgxIDw8IENESUFHX0NUUkxfSU1NRURfTEJOKSB8CisJCSAgICAoQ0RJQUdfQ1RSTF9MRU5fTUVUUkVTIDw8IENESUFHX0NUUkxfTEVOX1VOSVRfTEJOKSk7CisJaWYgKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQkvKiBCcmVhayB0aGUgbGluayBpbiBvcmRlciB0byBydW4gZnVsbCBkaWFnbm9zdGljcy4gIFdlCisJCSAqIG11c3QgcmVzZXQgdGhlIFBIWSB0byByZXN1bWUgbm9ybWFsIHNlcnZpY2UuICovCisJCWN0cmxfcmVnIHw9ICgxIDw8IENESUFHX0NUUkxfQlJLX0xJTktfTEJOKTsKKwl9CiAJbWRpb19jbGF1c2U0NV93cml0ZShlZngsIHBoeV9pZCwgTURJT19NTURfUE1BUE1ELAotCQkJICAgIFBNQV9QTURfQ0RJQUdfQ1RSTF9SRUcsCi0JCQkgICAgKDEgPDwgQ0RJQUdfQ1RSTF9JTU1FRF9MQk4pIHwKLQkJCSAgICAoMSA8PCBDRElBR19DVFJMX0JSS19MSU5LX0xCTikgfAotCQkJICAgIChDRElBR19DVFJMX0xFTl9NRVRSRVMgPDwgQ0RJQUdfQ1RSTF9MRU5fVU5JVF9MQk4pKTsKKwkJCSAgICBQTUFfUE1EX0NESUFHX0NUUkxfUkVHLCBjdHJsX3JlZyk7CiAJaSA9IDA7CiAJd2hpbGUgKG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwgTURJT19NTURfUE1BUE1ELAogCQkJCSAgUE1BX1BNRF9DRElBR19DVFJMX1JFRykgJgogCSAgICAgICAoMSA8PCBDRElBR19DVFJMX0lOX1BST0dfTEJOKSkgewogCQlpZiAoKytpID09IDUwKSB7CiAJCQlyYyA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIHJlc2V0OworCQkJZ290byBvdXQ7CiAJCX0KIAkJbXNsZWVwKDEwMCk7CiAJfQpAQCAtNzI4LDE3ICs3NTAsMTggQEAKIAkJCXJlc3VsdHNbNSArIGldID0gbGVuX3JlZzsKIAl9CiAKLQkvKiBXZSBtdXN0IHJlc2V0IHRvIGV4aXQgY2FibGUgZGlhZ25vc3RpYyBtb2RlLiAgVGhlIEJJU1Qgd2lsbAotCSAqIGFsc28gcnVuIHdoZW4gd2UgZG8gdGhpcy4gKi8KLXJlc2V0OgotCXJjMiA9IHRlbnhwcmVzc19zcGVjaWFsX3Jlc2V0KGVmeCk7Ci0JcmVzdWx0c1swXSA9IHJjMiA/IC0xIDogMTsKLQlpZiAoIXJjKQotCQlyYyA9IHJjMjsKK291dDoKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIFJlc2V0LCBydW5uaW5nIHRoZSBCSVNUIGFuZCB0aGVuIHJlc3VtaW5nIG5vcm1hbCBzZXJ2aWNlLiAqLworCQlyYzIgPSB0ZW54cHJlc3Nfc3BlY2lhbF9yZXNldChlZngpOworCQlyZXN1bHRzWzBdID0gcmMyID8gLTEgOiAxOworCQlpZiAoIXJjKQorCQkJcmMgPSByYzI7CiAKLQlyYzIgPSBlZngtPnBoeV9vcC0+c2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOwotCWlmICghcmMpCi0JCXJjID0gcmMyOworCQlyYzIgPSBlZngtPnBoeV9vcC0+c2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOworCQlpZiAoIXJjKQorCQkJcmMgPSByYzI7CisJfQogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCBkYTNlOWZmLi5kNjY4MWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMTYyLDYgKzE2MiwxNCBAQAogCS8qIEdldCBzaXplIG9mIHRoZSBpbml0aWFsIGZyYWdtZW50ICovCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAorCS8qIFBhZCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoRUZYX1dPUktBUk9VTkRfMTU1OTIoZWZ4KSAmJiBza2ItPmxlbiA8PSAzMikgeworCQlFRlhfQlVHX09OX1BBUkFOT0lEKHNrYi0+ZGF0YV9sZW4pOworCQlsZW4gPSAzMiArIDE7CisJCWlmIChza2JfcGFkKHNrYiwgbGVuIC0gc2tiLT5sZW4pKQorCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKIAlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5vbGRfcmVhZF9jb3VudDsKIAlxX3NwYWNlID0gZWZ4LT50eXBlLT50eGRfcmluZ19tYXNrIC0gMSAtIGZpbGxfbGV2ZWw7CiAKQEAgLTM3Niw2ICszODQsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAorCWlmICh1bmxpa2VseShlZngtPnBvcnRfaW5oaWJpdGVkKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCiAJaWYgKGxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKIAkJdHhfcXVldWUgPSAmZWZ4LT50eF9xdWV1ZVtFRlhfVFhfUVVFVUVfT0ZGTE9BRF9DU1VNXTsKIAllbHNlCkBAIC0zOTcsNyArNDA4LDcgQEAKIAkgKiBzZXBhcmF0ZXMgdGhlIHVwZGF0ZSBvZiByZWFkX2NvdW50IGZyb20gdGhlIHRlc3Qgb2YKIAkgKiBzdG9wcGVkLiAqLwogCXNtcF9tYigpOwotCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkpIHsKKwlpZiAodW5saWtlbHkodHhfcXVldWUtPnN0b3BwZWQpICYmIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfTkVUREVWX1RYX1RIUkVTSE9MRCh0eF9xdWV1ZSkpIHsKIAkJCUVGWF9CVUdfT05fUEFSQU5PSUQoIWVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy93b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKaW5kZXggNzhkZTY4Zi4uYzgyMWMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKQEAgLTM2LDYgKzM2LDggQEAKICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTE0ODIgRUZYX1dPUktBUk9VTkRfQUxXQVlTCiAvKiBGbHVzaCBldmVudHMgY2FuIHRha2UgYSB2ZXJ5IGxvbmcgdGltZSB0byBhcHBlYXIgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTE1NTcgRUZYX1dPUktBUk9VTkRfQUxXQVlTCisvKiBUcnVuY2F0ZWQgSVB2NCBwYWNrZXRzIGNhbiBjb25mdXNlIHRoZSBUWCBwYWNrZXQgcGFyc2VyICovCisjZGVmaW5lIEVGWF9XT1JLQVJPVU5EXzE1NTkyIEVGWF9XT1JLQVJPVU5EX0FMV0FZUwogCiAvKiBTcHVyaW91cyBwYXJpdHkgZXJyb3JzIGluIFRTT1JUIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfNTEyOSBFRlhfV09SS0FST1VORF9GQUxDT05fQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKaW5kZXggMmQ1MGI2ZS4uYmIxZWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCkBAIC03LDggKzcsOCBAQAogICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIC8qCi0gKiBEcml2ZXIgZm9yIFhGUCBvcHRpY2FsIFBIWXMgKHBsdXMgc29tZSBzdXBwb3J0IHNwZWNpZmljIHRvIHRoZSBRdWFrZSAyMDIyLzMyKQotICogU2VlIHd3dy5hbWNjLmNvbSBmb3IgZGV0YWlscyAoc2VhcmNoIGZvciBxdDIwMzIpCisgKiBEcml2ZXIgZm9yIFNGUCsgYW5kIFhGUCBvcHRpY2FsIFBIWXMgcGx1cyBzb21lIHN1cHBvcnQgc3BlY2lmaWMgdG8gdGhlCisgKiBBTUNDIFFUMjB4eCBhZGFwdGVyczsgc2VlIHd3dy5hbWNjLmNvbSBmb3IgZGV0YWlscwogICovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtMzEsNiArMzEsMjEgQEAKIC8qIFF1YWtlLXNwZWNpZmljIE1ESU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIE1ESU9fUVVBS0VfTEVEMF9SRUcJKDB4RDAwNikKIAorLyogUVQyMDI1QyBvbmx5ICovCisjZGVmaW5lIFBDU19GV19IRUFSVEJFQVRfUkVHCTB4ZDdlZQorI2RlZmluZSBQQ1NfRldfSEVBUlRCX0xCTgkwCisjZGVmaW5lIFBDU19GV19IRUFSVEJfV0lEVEgJOAorI2RlZmluZSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcJMHhkN2ZkCisjZGVmaW5lIFBDU19VQ19TVEFUVVNfTEJOCTAKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19XSURUSAk4CisjZGVmaW5lIFBDU19VQ19TVEFUVVNfRldfU0FWRQkweDIwCisjZGVmaW5lIFBNQV9QTURfRlRYX0NUUkwyX1JFRwkweGMzMDkKKyNkZWZpbmUgUE1BX1BNRF9GVFhfU1RBVElDX0xCTgkxMworI2RlZmluZSBQTUFfUE1EX1ZFTkQxX1JFRwkweGMwMDEKKyNkZWZpbmUgUE1BX1BNRF9WRU5EMV9MQlRYRF9MQk4JMTUKKyNkZWZpbmUgUENTX1ZFTkQxX1JFRwkgICAJMHhjMDAwCisjZGVmaW5lIFBDU19WRU5EMV9MQlRYRF9MQk4JNQorCiB2b2lkIHhmcF9zZXRfbGVkKHN0cnVjdCBlZnhfbmljICpwLCBpbnQgbGVkLCBpbnQgbW9kZSkKIHsKIAlpbnQgYWRkciA9IE1ESU9fUVVBS0VfTEVEMF9SRUcgKyBsZWQ7CkBAIC00NSw3ICs2MCw0OSBAQAogI2RlZmluZSBYRlBfTUFYX1JFU0VUX1RJTUUgNTAwCiAjZGVmaW5lIFhGUF9SRVNFVF9XQUlUIDEwCiAKLS8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCAoZm9yIHRoZSBRdWFrZSBQSFkpIGFzIGRvaW5nCitzdGF0aWMgaW50IHF0MjAyNWNfd2FpdF9yZXNldChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaOworCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7CisJaW50IHJlZywgb2xkX2NvdW50ZXIgPSAwOworCisJLyogV2FpdCBmb3IgZmlybXdhcmUgaGVhcnRiZWF0IHRvIHN0YXJ0ICovCisJZm9yICg7OykgeworCQlpbnQgY291bnRlcjsKKwkJcmVnID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QQ1MsCisJCQkJCSBQQ1NfRldfSEVBUlRCRUFUX1JFRyk7CisJCWlmIChyZWcgPCAwKQorCQkJcmV0dXJuIHJlZzsKKwkJY291bnRlciA9ICgocmVnID4+IFBDU19GV19IRUFSVEJfTEJOKSAmCisJCQkgICAgKCgxIDw8IFBDU19GV19IRUFSVEJfV0lEVEgpIC0gMSkpOworCQlpZiAob2xkX2NvdW50ZXIgPT0gMCkKKwkJCW9sZF9jb3VudGVyID0gY291bnRlcjsKKwkJZWxzZSBpZiAoY291bnRlciAhPSBvbGRfY291bnRlcikKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMTApOworCX0KKworCS8qIFdhaXQgZm9yIGZpcm13YXJlIHN0YXR1cyB0byBsb29rIGdvb2QgKi8KKwlmb3IgKDs7KSB7CisJCXJlZyA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwgTURJT19NTURfUENTLAorCQkJCQkgUENTX1VDODA1MV9TVEFUVVNfUkVHKTsKKwkJaWYgKHJlZyA8IDApCisJCQlyZXR1cm4gcmVnOworCQlpZiAoKHJlZyAmCisJCSAgICAgKCgxIDw8IFBDU19VQ19TVEFUVVNfV0lEVEgpIC0gMSkgPDwgUENTX1VDX1NUQVRVU19MQk4pID49CisJCSAgICBQQ1NfVUNfU1RBVFVTX0ZXX1NBVkUpCisJCQlicmVhazsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJbXNsZWVwKDEwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCAoZm9yIHRoZSBRdWFrZSBQSFlzKSBhcyBkb2luZwogICogYSBjb21wbGV0ZSBzb2Z0IHJlc2V0LgogICovCiBzdGF0aWMgaW50IHhmcF9yZXNldF9waHkoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU4LDYgKzExNSwxMiBAQAogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKIAorCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJcmMgPSBxdDIwMjVjX3dhaXRfcmVzZXQoZWZ4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKIAkvKiBXYWl0IDI1MG1zIGZvciB0aGUgUEhZIHRvIGNvbXBsZXRlIGJvb3R1cCAqLwogCW1zbGVlcCgyNTApOwogCkBAIC03Myw3ICsxMzYsNyBAQAogCXJldHVybiByYzsKIAogIGZhaWw6Ci0JRUZYX0VSUihlZngsICJYRlA6IHJlc2V0IHRpbWVkIG91dCFcbiIpOworCUVGWF9FUlIoZWZ4LCAiUEhZIHJlc2V0IHRpbWVkIG91dFxuIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04OCwxNSArMTUxLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWVmeC0+cGh5X2RhdGEgPSBwaHlfZGF0YTsKIAotCUVGWF9JTkZPKGVmeCwgIlhGUDogUEhZIElEIHJlZyAleCAoT1VJICV4IG1vZGVsICV4IHJldmlzaW9uIgotCQkgIiAleClcbiIsIGRldmlkLCBNRElPX0lEX09VSShkZXZpZCksIE1ESU9fSURfTU9ERUwoZGV2aWQpLAotCQkgTURJT19JRF9SRVYoZGV2aWQpKTsKKwlFRlhfSU5GTyhlZngsICJQSFkgSUQgcmVnICV4IChPVUkgJTA2eCBtb2RlbCAlMDJ4IHJldmlzaW9uICV4KVxuIiwKKwkJIGRldmlkLCBtZGlvX2lkX291aShkZXZpZCksIG1kaW9faWRfbW9kZWwoZGV2aWQpLAorCQkgbWRpb19pZF9yZXYoZGV2aWQpKTsKIAogCXBoeV9kYXRhLT5waHlfbW9kZSA9IGVmeC0+cGh5X21vZGU7CiAKIAlyYyA9IHhmcF9yZXNldF9waHkoZWZ4KTsKIAotCUVGWF9JTkZPKGVmeCwgIlhGUDogUEhZIGluaXQgJXMuXG4iLAorCUVGWF9JTkZPKGVmeCwgIlBIWSBpbml0ICVzLlxuIiwKIAkJIHJjID8gImZhaWxlZCIgOiAic3VjY2Vzc2Z1bCIpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKQEAgLTEzMSwxMiArMTk0LDI4IEBACiB7CiAJc3RydWN0IHhmcF9waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOwogCi0JLyogUmVzZXQgdGhlIFBIWSB3aGVuIG1vdmluZyBmcm9tIHR4IG9mZiB0byB0eCBvbiAqLwotCWlmICghKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9UWF9ESVNBQkxFRCkgJiYKLQkgICAgKHBoeV9kYXRhLT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSkKLQkJeGZwX3Jlc2V0X3BoeShlZngpOworCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJLyogVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHJlZ2lzdGVyIGJpdHMgd2hpY2ggY2FuCisJCSAqIGRpc2FibGUgVFggKGFuZCBzYXZlIHBvd2VyKSBvbiBkaXJlY3QtYXR0YWNoIGNhYmxlcworCQkgKiBvciBvcHRpY2FsIHRyYW5zY2VpdmVycywgdmFyeWluZyBzb21ld2hhdCBiZXR3ZWVuCisJCSAqIGZpcm13YXJlIHZlcnNpb25zLiAgT25seSAnc3RhdGljIG1vZGUnIGFwcGVhcnMgdG8KKwkJICogY292ZXIgZXZlcnl0aGluZy4gKi8KKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZygKKwkJCWVmeCwgZWZ4LT5taWkucGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCisJCQlQTUFfUE1EX0ZUWF9DVFJMMl9SRUcsIFBNQV9QTURfRlRYX1NUQVRJQ19MQk4sCisJCQllZngtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQgfHwKKwkJCWVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9MT1dfUE9XRVIgfHwKKwkJCWVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19QQ1MgfHwKKwkJCWVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19QTUFQTUQpOworCX0gZWxzZSB7CisJCS8qIFJlc2V0IHRoZSBQSFkgd2hlbiBtb3ZpbmcgZnJvbSB0eCBvZmYgdG8gdHggb24gKi8KKwkJaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSAmJgorCQkgICAgKHBoeV9kYXRhLT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSkKKwkJCXhmcF9yZXNldF9waHkoZWZ4KTsKIAotCW1kaW9fY2xhdXNlNDVfdHJhbnNtaXRfZGlzYWJsZShlZngpOworCQltZGlvX2NsYXVzZTQ1X3RyYW5zbWl0X2Rpc2FibGUoZWZ4KTsKKwl9CisKIAltZGlvX2NsYXVzZTQ1X3BoeV9yZWNvbmZpZ3VyZShlZngpOwogCiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggYmU0NDY1YmMuLjhhNzBkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC04MCw4ICs4MCw4IEBACiAjZGVmaW5lIFNJUzkwMF9NT0RVTEVfTkFNRSAic2lzOTAwIgogI2RlZmluZSBTSVM5MDBfRFJWX1ZFUlNJT04gInYxLjA4LjEwIEFwci4gMiAyMDA2IgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gInNpczkwMC5jOiAiIFNJUzkwMF9EUlZfVkVSU0lPTiAiXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gInNpczkwMC5jOiAiIFNJUzkwMF9EUlZfVkVSU0lPTiAiXG4iOwogCiBzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDQwOwogc3RhdGljIGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMTI4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oIGIvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCmluZGV4IDk0MzI1OTEuLjE3NThkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaAorKysgYi9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKQEAgLTQ2Nyw1ICs0NjcsMjIgQEAKICNlbmRpZgkvKiBERUJVR19CUkQgJiYgREVCVUcgKi8KIH0gOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGZkZGlfYWRkciBmZGRpX2Jyb2FkY2FzdDsKKworZXh0ZXJuIHZvaWQgYWxsX3NlbGVjdGlvbl9jcml0ZXJpYShzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBjYXJkX3N0b3Aoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIHZvaWQgaW5pdF9ib2FyZChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICptYWNfYWRkcik7CitleHRlcm4gaW50IGluaXRfZnBsdXMoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIHZvaWQgaW5pdF9wbGMoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIGludCBpbml0X3NtdChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOworZXh0ZXJuIHZvaWQgbWFjMV9pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgc3R1LCB1X3Nob3J0IHN0bCk7CitleHRlcm4gdm9pZCBtYWMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBjb2RlX3MydSwgdV9zaG9ydCBjb2RlX3MybCk7CitleHRlcm4gdm9pZCBtYWMzX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBjb2RlX3MzdSwgdV9zaG9ydCBjb2RlX3MzbCk7CitleHRlcm4gaW50IHBjbV9zdGF0dXNfdHdpc3RlZChzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBwbGMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBwbGMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCByZWFkX2FkZHJlc3Moc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqIG1hY19hZGRyKTsKK2V4dGVybiB2b2lkIHRpbWVyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CisKICNlbmRpZgkvKiBfU0NNRUNNXyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMgYi9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKaW5kZXggNDIxOGU5Ny4uZDMyMmYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwpAQCAtOTcsMjMgKzk3LDE1IEBACiAKIGV4dGVybiB2b2lkKiBtYWNfZHJ2X2dldF9zcGFjZShzdHJ1Y3Qgc19zbWMgKnNtYywgdW5zaWduZWQgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQqIG1hY19kcnZfZ2V0X2Rlc2NfbWVtKHN0cnVjdCBzX3NtYyAqc21jLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1leHRlcm4gdm9pZCBpbml0X2JvYXJkKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKm1hY19hZGRyKTsKIGV4dGVybiB2b2lkIG1hY19kcnZfZmlsbF9yeGQoc3RydWN0IHNfc21jICpzbWMpOwotZXh0ZXJuIHZvaWQgcGxjMV9pcnEoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl90eF9jb21wbGV0ZShzdHJ1Y3Qgc19zbWMgKnNtYywKIAkJCQl2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfdHhkICp0eGQpOwotZXh0ZXJuIHZvaWQgcGxjMl9pcnEoc3RydWN0IHNfc21jICpzbWMpOwotZXh0ZXJuIHZvaWQgbWFjMV9pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgc3R1LCB1X3Nob3J0IHN0bCk7Ci1leHRlcm4gdm9pZCBtYWMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBjb2RlX3MydSwgdV9zaG9ydCBjb2RlX3MybCk7Ci1leHRlcm4gdm9pZCBtYWMzX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBjb2RlX3MzdSwgdV9zaG9ydCBjb2RlX3MzbCk7Ci1leHRlcm4gdm9pZCB0aW1lcl9pcnEoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9yeF9jb21wbGV0ZShzdHJ1Y3Qgc19zbWMgKnNtYywKIAkJCQl2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsCiAJCQkJaW50IGZyYWdfY291bnQsIGludCBsZW4pOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9yZXF1ZXVlX3J4ZChzdHJ1Y3Qgc19zbWMgKnNtYywgCiAJCQkJdm9sYXRpbGUgc3RydWN0IHNfc210X2ZwX3J4ZCAqcnhkLAogCQkJCWludCBmcmFnX2NvdW50KTsKLWV4dGVybiB2b2lkIGluaXRfcGxjKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIG1hY19kcnZfY2xlYXJfcnhkKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJICAgICAgdm9sYXRpbGUgc3RydWN0IHNfc210X2ZwX3J4ZCAqcnhkLCBpbnQgZnJhZ19jb3VudCk7CiAKQEAgLTEzNiw3ICsxMjgsNiBAQAogCQkJIGludCBmbGFnKTsKICNlbmRpZgogCi1leHRlcm4gaW50IGluaXRfZnBsdXMoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIGludCBtYWNfZHJ2X3J4X2luaXQoc3RydWN0IHNfc21jICpzbWMsIGludCBsZW4sIGludCBmYywgY2hhciAqbG9va19haGVhZCwKIAkJCSAgIGludCBsYV9sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwppbmRleCA3NGUxMjlmLi5mMWRmMmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKQEAgLTE5OCw5ICsxOTgsNiBAQAogc3RhdGljIGNvbnN0IGludCBwbGNfaW1za19hY3QgPSBQTF9QQ01fQ09ERSB8IFBMX1RSQUNFX1BST1AgfCBQTF9QQ01fQlJFQUsgfAogCQkJUExfUENNX0VOQUJMRUQgfCBQTF9TRUxGX1RFU1QgfCBQTF9FQlVGX0VSUjsKIAotLyogZXh0ZXJuYWwgZnVuY3Rpb25zICovCi12b2lkIGFsbF9zZWxlY3Rpb25fY3JpdGVyaWEoc3RydWN0IHNfc21jICpzbWMpOwotCiAvKiBpbnRlcm5hbCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIHBjbV9mc20oc3RydWN0IHNfc21jICpzbWMsIHN0cnVjdCBzX3BoeSAqcGh5LCBpbnQgY21kKTsKIHN0YXRpYyB2b2lkIHBjX3Jjb2RlX2FjdGlvbnMoc3RydWN0IHNfc21jICpzbWMsIGludCBiaXQsIHN0cnVjdCBzX3BoeSAqcGh5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCmluZGV4IDlhMDBlNTUuLmUxNGFlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwpAQCAtMTM1LDE0ICsxMzUsMTEgQEAKIAogLy8gRXh0ZXJuYWwgZnVuY3Rpb25zIGZyb20gdGhlIGhhcmR3YXJlIG1vZHVsZQogZXh0ZXJuIHVfaW50IG1hY19kcnZfY2hlY2tfc3BhY2Uodm9pZCk7Ci1leHRlcm4gdm9pZCByZWFkX2FkZHJlc3Moc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqIG1hY19hZGRyKTsKLWV4dGVybiB2b2lkIGNhcmRfc3RvcChzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gaW50IG1hY19kcnZfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBod21fdHhfZnJhZyhzdHJ1Y3Qgc19zbWMgKnNtYywgY2hhciBmYXIgKiB2aXJ0LCB1X2xvbmcgcGh5cywKIAkJCWludCBsZW4sIGludCBmcmFtZV9zdGF0dXMpOwogZXh0ZXJuIGludCBod21fdHhfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyIGZjLCBpbnQgZnJhZ19jb3VudCwKIAkJICAgICAgIGludCBmcmFtZV9sZW4sIGludCBmcmFtZV9zdGF0dXMpOwotZXh0ZXJuIGludCBpbml0X3NtdChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOwogZXh0ZXJuIHZvaWQgZmRkaV9pc3Ioc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgaHdtX3J4X2ZyYWcoc3RydWN0IHNfc21jICpzbWMsIGNoYXIgZmFyICogdmlydCwgdV9sb25nIHBoeXMsCiAJCQlpbnQgbGVuLCBpbnQgZnJhbWVfc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCmluZGV4IDgwNTM4M2IuLjgzZDE2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9zbXQuYwpAQCAtNTUsMTYgKzU1LDYgQEAKIH0gOwogCiAvKgotICogZXh0ZXJuYWwgdmFyaWFibGVzCi0gKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmRkaV9hZGRyIGZkZGlfYnJvYWRjYXN0IDsKLQotLyoKLSAqIGV4dGVybmFsIGZ1bmN0aW9ucwotICovCi1pbnQgcGNtX3N0YXR1c190d2lzdGVkKHN0cnVjdCBzX3NtYyAqc21jKTsKLQotLyoKICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwogI2lmZGVmCUxJVFRMRV9FTkRJQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCBjOWRiYjA2Li45NTJkMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0zMjE0LDcgKzMyMTQsNyBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+aHdfbG9jaywgZmxhZ3MpOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCWh3LT5pbnRyX21hc2sgfD0gbmFwaW1hc2tbc2tnZS0+cG9ydF07CiAJCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CiAJCXNrZ2VfcmVhZDMyKGh3LCBCMF9JTVNLKTsKQEAgLTMzNzcsNyArMzM3Nyw3IEBACiAJaWYgKHN0YXR1cyAmIChJU19YQTFfRnxJU19SMV9GKSkgewogCQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoaHctPmRldlswXSk7CiAJCWh3LT5pbnRyX21hc2sgJj0gfihJU19YQTFfRnxJU19SMV9GKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgSVNfUEFfVE9fVFgxKQpAQCAtMzM5Nyw3ICszMzk3LDcgQEAKIAogCQlpZiAoc3RhdHVzICYgKElTX1hBMl9GfElTX1IyX0YpKSB7CiAJCQlody0+aW50cl9tYXNrICY9IH4oSVNfWEEyX0Z8SVNfUjJfRik7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKIAkJfQogCiAJCWlmIChzdGF0dXMgJiBJU19QQV9UT19SWDIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCA5OTQ3MDNjLi5kMDFjNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0xMDY4LDEzICsxMDY4LDE2IEBACiB9CiAKIAotc3RhdGljIHZvaWQgc2t5Ml9yeF9tYXBfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSwKK3N0YXRpYyBpbnQgc2t5Ml9yeF9tYXBfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSwKIAkJCSAgICB1bnNpZ25lZCBzaXplKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSByZS0+c2tiOwogCWludCBpOwogCiAJcmUtPmRhdGFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHJlLT5kYXRhX2FkZHIpKSkKKwkJcmV0dXJuIC1FSU87CisKIAlwY2lfdW5tYXBfbGVuX3NldChyZSwgZGF0YV9zaXplLCBzaXplKTsKIAogCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspCkBAIC0xMDgzLDYgKzEwODYsNyBAQAogCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCwKIAkJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSwKIAkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfcnhfdW5tYXBfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSkKQEAgLTEzNTQsNyArMTM1OCwxMiBAQAogCQlpZiAoIXJlLT5za2IpCiAJCQlnb3RvIG5vbWVtOwogCi0JCXNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSk7CisJCWlmIChza3kyX3J4X21hcF9za2IoaHctPnBkZXYsIHJlLCBza3kyLT5yeF9kYXRhX3NpemUpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHJlLT5za2IpOworCQkJcmUtPnNrYiA9IE5VTEw7CisJCQlnb3RvIG5vbWVtOworCQl9CisKIAkJc2t5Ml9yeF9zdWJtaXQoc2t5MiwgcmUpOwogCX0KIApAQCAtMTU0Nyw3ICsxNTU2LDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAlzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBOVUxMOwogCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlOwotCXVuc2lnbmVkIGksIGxlbjsKKwl1bnNpZ25lZCBpLCBsZW4sIGZpcnN0X3Nsb3Q7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUxNiBtc3M7CiAJdTggY3RybDsKQEAgLTE1NTUsMTMgKzE1NjQsMTcgQEAKICAJaWYgKHVubGlrZWx5KHR4X2F2YWlsKHNreTIpIDwgdHhfbGVfcmVxKHNrYikpKQogICAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc2t5Mi0+dHhfcHJvZCwgc2tiLT5sZW4pOwotCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoaHctPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaHctPnBkZXYsIG1hcHBpbmcpKQorCQlnb3RvIG1hcHBpbmdfZXJyb3I7CisKKwlmaXJzdF9zbG90ID0gc2t5Mi0+dHhfcHJvZDsKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X3F1ZXVlZChza3kyKSkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVldWVkLCBzbG90ICV1LCBsZW4gJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGZpcnN0X3Nsb3QsIHNrYi0+bGVuKTsKKwogCS8qIFNlbmQgaGlnaCBiaXRzIGlmIG5lZWRlZCAqLwogCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkgewogCQlsZSA9IGdldF90eF9sZShza3kyKTsKQEAgLTE2NDgsNiArMTY2MSw5IEBACiAJCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UoaHctPnBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAogCQkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGh3LT5wZGV2LCBtYXBwaW5nKSkKKwkJCWdvdG8gbWFwcGluZ191bndpbmQ7CisKIAkJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7CiAJCQlsZSA9IGdldF90eF9sZShza3kyKTsKIAkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhtYXBwaW5nKSk7CkBAIC0xNjc2LDYgKzE2OTIsMzQgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJldHVybiBORVRERVZfVFhfT0s7CisKK21hcHBpbmdfdW53aW5kOgorCWZvciAoaSA9IGZpcnN0X3Nsb3Q7IGkgIT0gc2t5Mi0+dHhfcHJvZDsgaSA9IFJJTkdfTkVYVChpLCBUWF9SSU5HX1NJWkUpKSB7CisJCWxlID0gc2t5Mi0+dHhfbGUgKyBpOworCQlyZSA9IHNreTItPnR4X3JpbmcgKyBpOworCisJCXN3aXRjaChsZS0+b3Bjb2RlICYgfkhXX09XTkVSKSB7CisJCWNhc2UgT1BfTEFSR0VTRU5EOgorCQljYXNlIE9QX1BBQ0tFVDoKKwkJCXBjaV91bm1hcF9zaW5nbGUoaHctPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCisJCQkJCSBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlicmVhazsKKwkJY2FzZSBPUF9CVUZGRVI6CisJCQlwY2lfdW5tYXBfcGFnZShody0+cGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJCSAgICAgICBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAorCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2t5Mi0+dHhfcHJvZCA9IGZpcnN0X3Nsb3Q7CittYXBwaW5nX2Vycm9yOgorCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCAiJXM6IHR4IG1hcHBpbmcgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC0yMTkxLDcgKzIyMzUsMTEgQEAKIAogCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJcmUtPnNrYiA9IG5za2I7Ci0Jc2t5Ml9yeF9tYXBfc2tiKHNreTItPmh3LT5wZGV2LCByZSwgaGRyX3NwYWNlKTsKKwlpZiAoc2t5Ml9yeF9tYXBfc2tiKHNreTItPmh3LT5wZGV2LCByZSwgaGRyX3NwYWNlKSkgeworCQlkZXZfa2ZyZWVfc2tiKG5za2IpOworCQlyZS0+c2tiID0gc2tiOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykKIAkJc2tiX3B1dF9mcmFncyhza2IsIGhkcl9zcGFjZSwgbGVuZ3RoKTsKQEAgLTI2ODcsMTMgKzI3MzUsNiBAQAogCQkJZ290byBkb25lOwogCX0KIAotCS8qIEJ1Zy9FcnJhdGEgd29ya2Fyb3VuZD8KLQkgKiBOZWVkIHRvIGtpY2sgdGhlIFRYIGlycSBtb2RlcmF0aW9uIHRpbWVyLgotCSAqLwotCWlmIChza3kyX3JlYWQ4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwpID09IFRJTV9TVEFSVCkgewotCQlza3kyX3dyaXRlOChodywgU1RBVF9UWF9USU1FUl9DVFJMLCBUSU1fU1RPUCk7Ci0JCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7Ci0JfQogCW5hcGlfY29tcGxldGUobmFwaSk7CiAJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwogZG9uZToKQEAgLTM4NjQsNiArMzkwNSw4NiBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2t5Ml9kZWJ1ZzsKIAorCisvKgorICogUmVhZCBhbmQgcGFyc2UgdGhlIGZpcnN0IHBhcnQgb2YgVml0YWwgUHJvZHVjdCBEYXRhCisgKi8KKyNkZWZpbmUgVlBEX1NJWkUJMTI4CisjZGVmaW5lIFZQRF9NQUdJQwkweDgyCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBkX3RhZyB7CisJY2hhciB0YWdbMl07CisJY2hhciAqbGFiZWw7Cit9IHZwZF90YWdzW10gPSB7CisJeyAiUE4iLAkiUGFydCBOdW1iZXIiIH0sCisJeyAiRUMiLCAiRW5naW5lZXJpbmcgTGV2ZWwiIH0sCisJeyAiTU4iLCAiTWFudWZhY3R1cmVyIiB9LAorCXsgIlNOIiwgIlNlcmlhbCBOdW1iZXIiIH0sCisJeyAiWUEiLCAiQXNzZXQgVGFnIiB9LAorCXsgIlZMIiwgIkZpcnN0IEVycm9yIExvZyBNZXNzYWdlIiB9LAorCXsgIlZGIiwgIlNlY29uZCBFcnJvciBMb2cgTWVzc2FnZSIgfSwKKwl7ICJWQiIsICJCb290IEFnZW50IFJPTSBDb25maWd1cmF0aW9uIiB9LAorCXsgIlZFIiwgIkVGSSBVTkRJIENvbmZpZ3VyYXRpb24iIH0sCit9OworCitzdGF0aWMgdm9pZCBza3kyX3Nob3dfdnBkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc2t5Ml9odyAqaHcpCit7CisJc2l6ZV90IHZwZF9zaXplOworCWxvZmZfdCBvZmZzOworCXU4IGxlbjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJdTE2IHJlZzI7CisKKwlyZWcyID0gc2t5Ml9wY2lfcmVhZDE2KGh3LCBQQ0lfREVWX1JFRzIpOworCXZwZF9zaXplID0gMSA8PCAoICgocmVnMiAmIFBDSV9WUERfUk9NX1NaKSA+PiAxNCkgKyA4KTsKKworCXNlcV9wcmludGYoc2VxLCAiJXMgUHJvZHVjdCBEYXRhXG4iLCBwY2lfbmFtZShody0+cGRldikpOworCWJ1ZiA9IGttYWxsb2ModnBkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXNlcV9wdXRzKHNlcSwgIm5vIG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBjaV9yZWFkX3ZwZChody0+cGRldiwgMCwgdnBkX3NpemUsIGJ1ZikgPCAwKSB7CisJCXNlcV9wdXRzKHNlcSwgIlZQRCByZWFkIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChidWZbMF0gIT0gVlBEX01BR0lDKSB7CisJCXNlcV9wcmludGYoc2VxLCAiVlBEIHRhZyBtaXNtYXRjaDogJSN4XG4iLCBidWZbMF0pOworCQlnb3RvIG91dDsKKwl9CisJbGVuID0gYnVmWzFdOworCWlmIChsZW4gPT0gMCB8fCBsZW4gPiB2cGRfc2l6ZSAtIDQpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJJbnZhbGlkIGlkIGxlbmd0aDogJWRcbiIsIGxlbik7CisJCWdvdG8gb3V0OworCX0KKworCXNlcV9wcmludGYoc2VxLCAiJS4qc1xuIiwgbGVuLCBidWYgKyAzKTsKKwlvZmZzID0gbGVuICsgMzsKKworCXdoaWxlIChvZmZzIDwgdnBkX3NpemUgLSA0KSB7CisJCWludCBpOworCisJCWlmICghbWVtY21wKCJSVyIsIGJ1ZiArIG9mZnMsIDIpKQkvKiBlbmQgbWFya2VyICovCisJCQlicmVhazsKKwkJbGVuID0gYnVmW29mZnMgKyAyXTsKKwkJaWYgKG9mZnMgKyBsZW4gKyAzID49IHZwZF9zaXplKQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBkX3RhZ3MpOyBpKyspIHsKKwkJCWlmICghbWVtY21wKHZwZF90YWdzW2ldLnRhZywgYnVmICsgb2ZmcywgMikpIHsKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIiAlczogJS4qc1xuIiwKKwkJCQkJICAgdnBkX3RhZ3NbaV0ubGFiZWwsIGxlbiwgYnVmICsgb2ZmcyArIDMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW9mZnMgKz0gbGVuICsgMzsKKwl9CitvdXQ6CisJa2ZyZWUoYnVmKTsKK30KKwogc3RhdGljIGludCBza3kyX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNlcS0+cHJpdmF0ZTsKQEAgLTM4NzMsMTQgKzM5OTQsMTggQEAKIAl1bnNpZ25lZCBpZHgsIGxhc3Q7CiAJaW50IHNvcDsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOworCXNreTJfc2hvd192cGQoc2VxLCBodyk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIklSUSBzcmM9JXggbWFzaz0leCBjb250cm9sPSV4XG4iLAorCXNlcV9wcmludGYoc2VxLCAiXG5JUlEgc3JjPSV4IG1hc2s9JXggY29udHJvbD0leFxuIiwKIAkJICAgc2t5Ml9yZWFkMzIoaHcsIEIwX0lTUkMpLAogCQkgICBza3kyX3JlYWQzMihodywgQjBfSU1TSyksCiAJCSAgIHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9JQ1IpKTsKIAorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXNlcV9wcmludGYoc2VxLCAibmV0d29yayBub3QgcnVubmluZ1xuIik7CisJCXJldHVybiAwOworCX0KKwogCW5hcGlfZGlzYWJsZSgmaHctPm5hcGkpOwogCWxhc3QgPSBza3kyX3JlYWQxNihodywgU1RBVF9QVVRfSURYKTsKIApAQCAtNDIwNCw2OSArNDMyOSw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIFJlYWQgYW5kIHBhcnNlIHRoZSBmaXJzdCBwYXJ0IG9mIFZpdGFsIFByb2R1Y3QgRGF0YQotICovCi0jZGVmaW5lIFZQRF9TSVpFCTEyOAotI2RlZmluZSBWUERfTUFHSUMJMHg4MgotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc2t5Ml92cGRfaW5mbyhzdHJ1Y3Qgc2t5Ml9odyAqaHcpCi17Ci0JaW50IGNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaHctPnBkZXYsIFBDSV9DQVBfSURfVlBEKTsKLQljb25zdCB1OCAqcDsKLQl1OCAqdnBkX2J1ZiA9IE5VTEw7Ci0JdTE2IGxlbjsKLQlzdGF0aWMgc3RydWN0IHZwZF90YWcgewotCQljaGFyIHRhZ1syXTsKLQkJY2hhciAqbGFiZWw7Ci0JfSB2cGRfdGFnc1tdID0gewotCQl7ICJQTiIsCSJQYXJ0IE51bWJlciIgfSwKLQkJeyAiRUMiLCAiRW5naW5lZXJpbmcgTGV2ZWwiIH0sCi0JCXsgIk1OIiwgIk1hbnVmYWN0dXJlciIgfSwKLQl9OwotCi0JaWYgKCFjYXApCi0JCWdvdG8gb3V0OwotCi0JdnBkX2J1ZiA9IGttYWxsb2MoVlBEX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghdnBkX2J1ZikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoc2t5Ml92cGRfcmVhZChodywgY2FwLCB2cGRfYnVmLCAwLCBWUERfU0laRSkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHZwZF9idWZbMF0gIT0gVlBEX01BR0lDKQotCQlnb3RvIG91dDsKLQlsZW4gPSB2cGRfYnVmWzFdOwotCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBWUERfU0laRSAtIDQpCi0JCWdvdG8gb3V0OwotCXAgPSB2cGRfYnVmICsgMzsKLQlkZXZfaW5mbygmaHctPnBkZXYtPmRldiwgIiUuKnNcbiIsIGxlbiwgcCk7Ci0JcCArPSBsZW47Ci0KLQl3aGlsZSAocCA8IHZwZF9idWYgKyBWUERfU0laRSAtIDQpIHsKLQkJaW50IGk7Ci0KLQkJaWYgKCFtZW1jbXAoIlJXIiwgcCwgMikpCS8qIGVuZCBtYXJrZXIgKi8KLQkJCWJyZWFrOwotCi0JCWxlbiA9IHBbMl07Ci0JCWlmIChsZW4gPiAocCAtIHZwZF9idWYpIC0gNCkKLQkJCWJyZWFrOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwZF90YWdzKTsgaSsrKSB7Ci0JCQlpZiAoIW1lbWNtcCh2cGRfdGFnc1tpXS50YWcsIHAsIDIpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlczogJS4qc1xuIiwKLQkJCQkgICAgICAgdnBkX3RhZ3NbaV0ubGFiZWwsIGxlbiwgcCArIDMpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXAgKz0gbGVuICsgMzsKLQl9Ci1vdXQ6Ci0Ja2ZyZWUodnBkX2J1Zik7Ci19Ci0KIC8qIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHl1a29uMiBjaGlwc2V0IG9ubHkgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpza3kyX25hbWUodTggY2hpcGlkLCBjaGFyICpidWYsIGludCBzeikKIHsKQEAgLTQyOTQsNiArNDM1Niw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHc7CiAJaW50IGVyciwgdXNpbmdfZGFjID0gMCwgd29sX2RlZmF1bHQ7CisJdTMyIHJlZzsKIAljaGFyIGJ1ZjFbMTZdOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC00MzI3LDYgKzQzOTAsMzQgQEAKIAkJfQogCX0KIAorCS8qIEdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisJICogTm90ZTogb25seSByZWd1bGFyIFBDSSBjb25maWcgYWNjZXNzIG9uY2UgdG8gdGVzdCBmb3IgSFcgaXNzdWVzCisJICogICAgICAgb3RoZXIgUENJIGFjY2VzcyB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgZm9yIHNwZWVkIGFuZCB0bworCSAqCSBhdm9pZCBNTUNPTkZJRyBwcm9ibGVtcy4KKwkgKi8KKwllcnIgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0RFVl9SRUcyLCAmcmVnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSByZWFkIGNvbmZpZyBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOworCX0KKworCS8qIHNpemUgb2YgYXZhaWxhYmxlIFZQRCwgb25seSBpbXBhY3Qgc3lzZnMgKi8KKwllcnIgPSBwY2lfdnBkX3RydW5jYXRlKHBkZXYsIDF1bCA8PCAoKChyZWcgJiBQQ0lfVlBEX1JPTV9TWikgPj4gMTQpICsgOCkpOworCWlmIChlcnIpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJDYW4ndCBzZXQgVlBEIHNpemVcbiIpOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJLyogVGhlIHNrOThsaW4gdmVuZG9yIGRyaXZlciB1c2VzIGhhcmR3YXJlIGJ5dGUgc3dhcHBpbmcgYnV0CisJICogdGhpcyBkcml2ZXIgdXNlcyBzb2Z0d2FyZSBzd2FwcGluZy4KKwkgKi8KKwlyZWcgJj0gflBDSV9SRVZfREVTQzsKKwllcnIgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsUENJX0RFVl9SRUcyLCByZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIHdyaXRlIGNvbmZpZyBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOworCX0KKyNlbmRpZgorCiAJd29sX2RlZmF1bHQgPSBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSA/IFdBS0VfTUFHSUMgOiAwOwogCiAJZXJyID0gLUVOT01FTTsKQEAgLTQzNDQsMTggKzQ0MzUsNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9odzsKIAl9CiAKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkvKiBUaGUgc2s5OGxpbiB2ZW5kb3IgZHJpdmVyIHVzZXMgaGFyZHdhcmUgYnl0ZSBzd2FwcGluZyBidXQKLQkgKiB0aGlzIGRyaXZlciB1c2VzIHNvZnR3YXJlIHN3YXBwaW5nLgotCSAqLwotCXsKLQkJdTMyIHJlZzsKLQkJcmVnID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzIpOwotCQlyZWcgJj0gflBDSV9SRVZfREVTQzsKLQkJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcyLCByZWcpOwotCX0KLSNlbmRpZgotCiAJLyogcmluZyBmb3Igc3RhdHVzIHJlc3BvbnNlcyAqLwogCWh3LT5zdF9sZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIFNUQVRVU19MRV9CWVRFUywgJmh3LT5zdF9kbWEpOwogCWlmICghaHctPnN0X2xlKQpAQCAtNDM3MCw4ICs0NDQ5LDYgQEAKIAogCXNreTJfcmVzZXQoaHcpOwogCi0Jc2t5Ml92cGRfaW5mbyhodyk7Ci0KIAlkZXYgPSBza3kyX2luaXRfbmV0ZGV2KGh3LCAwLCB1c2luZ19kYWMsIHdvbF9kZWZhdWx0KTsKIAlpZiAoIWRldikgewogCQllcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYwppbmRleCAyMDMzZmVlLi4wMjkxZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYworKysgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYwpAQCAtMTQyLDkgKzE0Miw2IEBACiAJaW50IGJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCBpcnEgPSBkZXYtPmlycTsKIAotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSAmdWx0cmFfcG9sbDsKLSNlbmRpZgogCWlmIChiYXNlX2FkZHIgPiAweDFmZikJCS8qIENoZWNrIGEgc2luZ2xlIHNwZWNpZmllZCBsb2NhdGlvbi4gKi8KIAkJcmV0dXJuIHVsdHJhX3Byb2JlMShkZXYsIGJhc2VfYWRkcik7CiAJZWxzZSBpZiAoYmFzZV9hZGRyICE9IDApCS8qIERvbid0IHByb2JlIGF0IGFsbC4gKi8KQEAgLTE5OSw3ICsxOTYsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlciAJPSBlaV9wb2xsLAorCS5uZG9fcG9sbF9jb250cm9sbGVyIAk9IHVsdHJhX3BvbGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCmluZGV4IGNiNmMwOTcuLjdhNTU0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYwpAQCAtMTUzLDYgKzE1MywyMiBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB1bHRyYTMyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSB1bHRyYTMyX29wZW4sCisJLm5kb19zdG9wIAkJPSB1bHRyYTMyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlaV9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBlaV90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlaV9wb2xsLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IF9faW5pdCB1bHRyYTMyX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQogewogCWludCBpLCBlZGdlLCBtZWRpYSwgcmV0dmFsOwpAQCAtMjczLDExICsyODksOCBAQAogCWVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSAmdWx0cmEzMl9ibG9ja19vdXRwdXQ7CiAJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZ1bHRyYTMyX2dldF84MzkwX2hkcjsKIAllaV9zdGF0dXMucmVzZXRfODM5MCA9ICZ1bHRyYTMyX3Jlc2V0XzgzOTA7Ci0JZGV2LT5vcGVuID0gJnVsdHJhMzJfb3BlbjsKLQlkZXYtPnN0b3AgPSAmdWx0cmEzMl9jbG9zZTsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKLSNlbmRpZgorCisJZGV2LT5uZXRkZXZfb3BzID0gJnVsdHJhMzJfbmV0ZGV2X29wczsKIAlOUzgzOTBfaW5pdChkZXYsIDApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggMjIzY2RlMC4uMjkzNjEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIHsKIAlzdHJuY3B5KGluZm8tPmRyaXZlciwgQ0FSRE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIAlzdHJuY3B5KGluZm8tPnZlcnNpb24sIHZlcnNpb24sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCiBzdGF0aWMgaW50IHNtYzkxMXhfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaAppbmRleCBhNDU5NTJlLi44MTQwZjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCkBAIC0yMzYsOCArMjM2LDcgQEAKICAqIFVzZSBhIERNQSBmb3IgUlggYW5kIFRYIHBhY2tldHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogc3RhdGljIGRtYV9hZGRyX3QgcnhfZG1hYnVmLCB0eF9kbWFidWY7CiBzdGF0aWMgaW50IHJ4X2RtYWxlbiwgdHhfZG1hbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTE5NC5jIGIvZHJpdmVycy9uZXQvc21jOTE5NC5jCmluZGV4IDE4ZDY1M2IuLjlhNzk3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTk0LmMKQEAgLTgzMSw2ICs4MzEsMTcgQEAKICNlbmRpZgogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJID0gc21jX29wZW4sCisJLm5kb19zdG9wCQk9IHNtY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgCT0gc21jX3dhaXRfdG9fc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CSAgICAJPSBzbWNfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNtY19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC4gRnVuY3Rpb246IHNtY19wcm9iZSggaW50IGlvYWRkciApCiAgLgpAQCAtMTA0NCwxMiArMTA1NSw4IEBACiAgIAkgIAlnb3RvIGVycl9vdXQ7CiAgICAgICAJfQogCi0JZGV2LT5vcGVuCQkgICAgICAgID0gc21jX29wZW47Ci0JZGV2LT5zdG9wCQkgICAgICAgID0gc21jX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgIAk9IHNtY193YWl0X3RvX3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dAkJICAgIAk9IHNtY190aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJCT0gJnNtY19uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JCT0gSFovMjA7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgCT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdDsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IGIyMTVhOGQuLmZkY2JhZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC0xNjE0LDcgKzE2MTQsNyBAQAogewogCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBDQVJETkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgdmVyc2lvbiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKIHN0YXRpYyBpbnQgc21jX2V0aHRvb2xfbndheXJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNjQzLDYgKzE2NDMsMTE3IEBACiAJbHAtPm1zZ19lbmFibGUgPSBsZXZlbDsKIH0KIAorc3RhdGljIGludCBzbWNfd3JpdGVfZWVwcm9tX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGFkZHIsIHUxNiB3b3JkKQoreworCXUxNiBjdGw7CisJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CisKKwlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CisJLyogbG9hZCB3b3JkIGludG8gR1AgcmVnaXN0ZXIgKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCVNNQ19TRVRfR1AobHAsIHdvcmQpOworCS8qIHNldCB0aGUgYWRkcmVzcyB0byBwdXQgdGhlIGRhdGEgaW4gRUVQUk9NICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX1BUUihscCwgYWRkcik7CisJLyogdGVsbCBpdCB0byB3cml0ZSAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJY3RsID0gU01DX0dFVF9DVEwobHApOworCVNNQ19TRVRfQ1RMKGxwLCBjdGwgfCAoQ1RMX0VFUFJPTV9TRUxFQ1QgfCBDVExfU1RPUkUpKTsKKwkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChTTUNfR0VUX0NUTChscCkgJiBDVExfU1RPUkUpOworCS8qIGNsZWFuIHVwICovCisJU01DX1NFVF9DVEwobHAsIGN0bCk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWNfcmVhZF9lZXByb21fd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkciwgdTE2ICp3b3JkKQoreworCXUxNiBjdGw7CisJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CisKKwlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CisJLyogc2V0IHRoZSBFRVBST00gYWRkcmVzcyB0byBnZXQgdGhlIGRhdGEgZnJvbSAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CisJU01DX1NFVF9QVFIobHAsIGFkZHIgfCBQVFJfUkVBRCk7CisJLyogdGVsbCBpdCB0byBsb2FkICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwlTTUNfU0VUX0dQKGxwLCAweGZmZmYpOwkvKiBpbml0IHRvIGtub3duICovCisJY3RsID0gU01DX0dFVF9DVEwobHApOworCVNNQ19TRVRfQ1RMKGxwLCBjdGwgfCAoQ1RMX0VFUFJPTV9TRUxFQ1QgfCBDVExfUkVMT0FEKSk7CisJLyogd2FpdCBmb3IgaXQgdG8gZmluaXNoICovCisJZG8geworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoU01DX0dFVF9DVEwobHApICYgQ1RMX1JFTE9BRCk7CisJLyogcmVhZCB3b3JkIGZyb20gR1AgcmVnaXN0ZXIgKi8KKwkqd29yZCA9IFNNQ19HRVRfR1AobHApOworCS8qIGNsZWFuIHVwICovCisJU01DX1NFVF9DVEwobHAsIGN0bCk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWNfZXRodG9vbF9nZXRlZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDB4MjMgKiAyOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX2dldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGk7CisJaW50IGltYXg7CisKKwlEQkcoMSwgIlJlYWRpbmcgJWQgYnl0ZXMgYXQgJWQoMHgleClcbiIsCisJCWVlcHJvbS0+bGVuLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5vZmZzZXQpOworCWltYXggPSBzbWNfZXRodG9vbF9nZXRlZXByb21fbGVuKGRldik7CisJZm9yIChpID0gMDsgaSA8IGVlcHJvbS0+bGVuOyBpICs9IDIpIHsKKwkJaW50IHJldDsKKwkJdTE2IHdidWY7CisJCWludCBvZmZzZXQgPSBpICsgZWVwcm9tLT5vZmZzZXQ7CisJCWlmIChvZmZzZXQgPiBpbWF4KQorCQkJYnJlYWs7CisJCXJldCA9IHNtY19yZWFkX2VlcHJvbV93b3JkKGRldiwgb2Zmc2V0ID4+IDEsICZ3YnVmKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwkJREJHKDIsICJSZWFkIDB4JXggZnJvbSAweCV4XG4iLCB3YnVmLCBvZmZzZXQgPj4gMSk7CisJCWRhdGFbaV0gPSAod2J1ZiA+PiA4KSAmIDB4ZmY7CisJCWRhdGFbaSsxXSA9IHdidWYgJiAweGZmOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWNfZXRodG9vbF9zZXRlZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQoreworCWludCBpOworCWludCBpbWF4OworCisJREJHKDEsICJXcml0aW5nICVkIGJ5dGVzIHRvICVkKDB4JXgpXG4iLAorCQkJZWVwcm9tLT5sZW4sIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCk7CisJaW1heCA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tLT5sZW47IGkgKz0gMikgeworCQlpbnQgcmV0OworCQl1MTYgd2J1ZjsKKwkJaW50IG9mZnNldCA9IGkgKyBlZXByb20tPm9mZnNldDsKKwkJaWYgKG9mZnNldCA+IGltYXgpCisJCQlicmVhazsKKwkJd2J1ZiA9IChkYXRhW2ldIDw8IDgpIHwgZGF0YVtpICsgMV07CisJCURCRygyLCAiV3JpdGluZyAweCV4IHRvIDB4JXhcbiIsIHdidWYsIG9mZnNldCA+PiAxKTsKKwkJcmV0ID0gc21jX3dyaXRlX2VlcHJvbV93b3JkKGRldiwgb2Zmc2V0ID4+IDEsIHdidWYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNtY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCT0gc21jX2V0aHRvb2xfZ2V0c2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IHNtY19ldGh0b29sX3NldHNldHRpbmdzLApAQCAtMTY1Miw4ICsxNzYzLDIyIEBACiAJLnNldF9tc2dsZXZlbAk9IHNtY19ldGh0b29sX3NldG1zZ2xldmVsLAogCS5ud2F5X3Jlc2V0CT0gc21jX2V0aHRvb2xfbndheXJlc2V0LAogCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0vLwkuZ2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX2dldGVlcHJvbSwKLS8vCS5zZXRfZWVwcm9tCT0gc21jX2V0aHRvb2xfc2V0ZWVwcm9tLAorCS5nZXRfZWVwcm9tX2xlbiA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4sCisJLmdldF9lZXByb20JPSBzbWNfZXRodG9vbF9nZXRlZXByb20sCisJLnNldF9lZXByb20JPSBzbWNfZXRodG9vbF9zZXRlZXByb20sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzbWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gc21jX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzbWNfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBzbWNfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNtY19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzbWNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCiB9OwogCiAvKgpAQCAtMTg2NSwxNiArMTk5MCw5IEBACiAJLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHdpdGggZXRoZXJuZXQgdmFsdWVzLiAqLwogCWV0aGVyX3NldHVwKGRldik7CiAKLQlkZXYtPm9wZW4gPSBzbWNfb3BlbjsKLQlkZXYtPnN0b3AgPSBzbWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbWNfaGFyZF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IHNtY190aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKHdhdGNoZG9nKTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNtY19zZXRfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNtY19uZXRkZXZfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmc21jX2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBzbWNfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAKIAl0YXNrbGV0X2luaXQoJmxwLT50eF90YXNrLCBzbWNfaGFyZHdhcmVfc2VuZF9wa3QsICh1bnNpZ25lZCBsb25nKWRldik7CiAJSU5JVF9XT1JLKCZscC0+cGh5X2NvbmZpZ3VyZSwgc21jX3BoeV9jb25maWd1cmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBjNGNjZDEyLi42YzQ0Zjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtNDQsNiArNDQsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX01BQ0hfTUFJTlNUT05FKSB8fFwKICAgICBkZWZpbmVkKENPTkZJR19NQUNIX1pZTE9OSVRFKSB8fFwKICAgICBkZWZpbmVkKENPTkZJR19NQUNIX0xJVFRMRVRPTikgfHxcCisgICAgZGVmaW5lZChDT05GSUdfTUFDSF9aWUxPTklURTIpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfVklQRVIpCiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDk0LDggKzQ5NSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KIAogI2lmZGVmIFNNQ19pbnNsCiAjdW5kZWYgU01DX2luc2wKQEAgLTExNDEsNiArMTE0MCwxNiBAQAogCiAjZGVmaW5lIFNNQ19HRVRfTUlJKGxwKQkJU01DX2ludyhpb2FkZHIsIE1JSV9SRUcobHApKQogCisjZGVmaW5lIFNNQ19HRVRfR1AobHApCQlTTUNfaW53KGlvYWRkciwgR1BfUkVHKGxwKSkKKworI2RlZmluZSBTTUNfU0VUX0dQKGxwLCB4KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChTTUNfTVVTVF9BTElHTl9XUklURShscCkpCQkJCVwKKwkJCVNNQ19vdXRsKCh4KTw8MTYsIGlvYWRkciwgU01DX1JFRyhscCwgOCwgMSkpOwlcCisJCWVsc2UJCQkJCQkJXAorCQkJU01DX291dHcoeCwgaW9hZGRyLCBHUF9SRUcobHApKTsJCVwKKwl9IHdoaWxlICgwKQorCiAjZGVmaW5lIFNNQ19TRVRfTUlJKGxwLCB4KQkJU01DX291dHcoeCwgaW9hZGRyLCBNSUlfUkVHKGxwKSkKIAogI2RlZmluZSBTTUNfR0VUX01JUihscCkJCVNNQ19pbncoaW9hZGRyLCBNSVJfUkVHKGxwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCmluZGV4IGQxNTkwYWMuLmFmOGY2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwpAQCAtMzY4LDQ4ICszNjgsNTMgQEAKIAlyZXR1cm4gcmVnOwogfQogCi0vKiBBdXRvZGV0ZWN0cyBhbmQgaW5pdGlhbGlzZXMgZXh0ZXJuYWwgcGh5IGZvciBTTVNDOTExNSBhbmQgU01TQzkxMTcgZmxhdm9ycy4KLSAqIElmIHNvbWV0aGluZyBnb2VzIHdyb25nLCByZXR1cm5zIC1FTk9ERVYgdG8gcmV2ZXJ0IGJhY2sgdG8gaW50ZXJuYWwgcGh5LgotICogUGVyZm9ybWVkIGF0IGluaXRpYWxpc2F0aW9uIG9ubHksIHNvIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KLXN0YXRpYyBpbnQgc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQorLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeS4gQXNzdW1lcyB0eCBhbmQgcnggYXJlIHN0b3BwZWQuICovCitzdGF0aWMgdm9pZCBzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKIHsKIAl1bnNpZ25lZCBpbnQgaHdjZmcgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSFdfQ0ZHKTsKIAotCS8qIEV4dGVybmFsIHBoeSBpcyByZXF1ZXN0ZWQsIHN1cHBvcnRlZCwgYW5kIGRldGVjdGVkICovCi0JaWYgKGh3Y2ZnICYgSFdfQ0ZHX0VYVF9QSFlfREVUXykgeworCS8qIERpc2FibGUgcGh5IGNsb2NrcyB0byB0aGUgTUFDICovCisJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKKwlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfQ0xLX0RJU187CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKKwl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHN0b3AgKi8KIAotCQkvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5LiBBc3N1bWluZyB0eCBhbmQgcnggYXJlIHN0b3BwZWQKLQkJICogYmVjYXVzZSBzbXNjOTExeF9waHlfaW5pdGlhbGlzZSBpcyBjYWxsZWQgYmVmb3JlCi0JCSAqIHNtc2M5MTF4X3J4X2luaXRpYWxpc2UgYW5kIHR4X2luaXRpYWxpc2UuICovCisJLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeSAqLworCWh3Y2ZnIHw9IEhXX0NGR19FWFRfUEhZX0VOXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwogCi0JCS8qIERpc2FibGUgcGh5IGNsb2NrcyB0byB0aGUgTUFDICovCi0JCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7Ci0JCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9DTEtfRElTXzsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKLQkJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byBzdG9wICovCisJLyogRW5hYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLworCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7CisJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0VYVF9QSFlfOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CisJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byByZXN0YXJ0ICovCiAKLQkJLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeSAqLwotCQlod2NmZyB8PSBIV19DRkdfRVhUX1BIWV9FTl87Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CisJaHdjZmcgfD0gSFdfQ0ZHX1NNSV9TRUxfOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Cit9CiAKLQkJLyogRW5hYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLwotCQlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOwotCQlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfRVhUX1BIWV87Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0JCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gcmVzdGFydCAqLworLyogQXV0b2RldGVjdHMgYW5kIGVuYWJsZXMgZXh0ZXJuYWwgcGh5IGlmIHByZXNlbnQgb24gc3VwcG9ydGVkIGNoaXBzLgorICogYXV0b2RldGVjdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzcGVjaWZ5aW5nIFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWQorICogb3IgU01TQzkxMVhfRk9SQ0VfRVhURVJOQUxfUEhZIGluIHRoZSBwbGF0Zm9ybV9kYXRhIGZsYWdzLiAqLworc3RhdGljIHZvaWQgc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQoreworCXVuc2lnbmVkIGludCBod2NmZyA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBIV19DRkcpOwogCi0JCWh3Y2ZnIHw9IEhXX0NGR19TTUlfU0VMXzsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKLQotCQlTTVNDX1RSQUNFKEhXLCAiU3VjY2Vzc2Z1bGx5IHN3aXRjaGVkIHRvIGV4dGVybmFsIFBIWSIpOworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfRk9SQ0VfSU5URVJOQUxfUEhZKSB7CisJCVNNU0NfVFJBQ0UoSFcsICJGb3JjaW5nIGludGVybmFsIFBIWSIpOworCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKKwl9IGVsc2UgaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9GT1JDRV9FWFRFUk5BTF9QSFkpIHsKKwkJU01TQ19UUkFDRShIVywgIkZvcmNpbmcgZXh0ZXJuYWwgUEhZIik7CisJCXNtc2M5MTF4X3BoeV9lbmFibGVfZXh0ZXJuYWwocGRhdGEpOworCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMTsKKwl9IGVsc2UgaWYgKGh3Y2ZnICYgSFdfQ0ZHX0VYVF9QSFlfREVUXykgeworCQlTTVNDX1RSQUNFKEhXLCAiSFdfQ0ZHIEVYVF9QSFlfREVUIHNldCwgdXNpbmcgZXh0ZXJuYWwgUEhZIik7CisJCXNtc2M5MTF4X3BoeV9lbmFibGVfZXh0ZXJuYWwocGRhdGEpOwogCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMTsKIAl9IGVsc2UgewotCQlTTVNDX1dBUk5JTkcoSFcsICJObyBleHRlcm5hbCBQSFkgZGV0ZWN0ZWQsICIKLQkJCSJVc2luZyBpbnRlcm5hbCBQSFkgaW5zdGVhZC4iKTsKLQkJLyogVXNlIGludGVybmFsIHBoeSAqLwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJU01TQ19UUkFDRShIVywgIkhXX0NGRyBFWFRfUEhZX0RFVCBjbGVhciwgdXNpbmcgaW50ZXJuYWwgUEhZIik7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyogRmV0Y2hlcyBhIHR4IHN0YXR1cyBvdXQgb2YgdGhlIHN0YXR1cyBmaWZvICovCkBAIC03NjksNyArNzc0LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkmc21zYzkxMXhfcGh5X2FkanVzdF9saW5rLCAwLCBwZGF0YS0+Y29uZmlnLnBoeV9pbnRlcmZhY2UpOwogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CkBAIC03NzgsNyArNzgzLDggQEAKIAl9CiAKIAlwcl9pbmZvKCIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwKKwkJZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEpOwogCiAJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KIAlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoUEhZX0JBU0lDX0ZFQVRVUkVTIHwgU1VQUE9SVEVEX1BhdXNlIHwKQEAgLTgyNCwyMiArODMwLDE4IEBACiAKIAlwZGF0YS0+bWlpX2J1cy0+cGFyZW50ID0gJnBkZXYtPmRldjsKIAotCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOwotCiAJc3dpdGNoIChwZGF0YS0+aWRyZXYgJiAweEZGRkYwMDAwKSB7CiAJY2FzZSAweDAxMTcwMDAwOgogCWNhc2UgMHgwMTE1MDAwMDoKIAljYXNlIDB4MTE3QTAwMDA6CiAJY2FzZSAweDExNUEwMDAwOgogCQkvKiBFeHRlcm5hbCBQSFkgc3VwcG9ydGVkLCB0cnkgdG8gYXV0b2RldGVjdCAqLwotCQlpZiAoc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwocGRhdGEpIDwgMCkgewotCQkJU01TQ19UUkFDRShIVywgIk5vIGV4dGVybmFsIFBIWSBkZXRlY3RlZCwgIgotCQkJCSJ1c2luZyBpbnRlcm5hbCBQSFkiKTsKLQkJfQorCQlzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChwZGF0YSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVNNU0NfVFJBQ0UoSFcsICJFeHRlcm5hbCBQSFkgaXMgbm90IHN1cHBvcnRlZCwgIgogCQkJInVzaW5nIGludGVybmFsIFBIWSIpOworCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAkJYnJlYWs7CiAJfQogCkBAIC04OTMsMjIgKzg5NSwyMiBAQAogCQkJU01TQ19XQVJOSU5HKEhXLAogCQkJCSJQYWNrZXQgdGFnIHJlc2VydmVkIGJpdCBpcyBoaWdoIik7CiAJCX0gZWxzZSB7Ci0JCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIDB4MDAwMDgwMDApKSB7CisJCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIFRYX1NUU19FU18pKSB7CiAJCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCX0gZWxzZSB7CiAJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSAodHhfc3RhdCA+PiAxNik7CiAJCQl9Ci0JCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIDB4MDAwMDAxMDApKSB7CisJCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIFRYX1NUU19FWENFU1NfQ09MXykpIHsKIAkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMTY7CiAJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSAxOwogCQkJfSBlbHNlIHsKIAkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0KIAkJCQkgICAgKCh0eF9zdGF0ID4+IDMpICYgMHhGKTsKIAkJCX0KLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDgwMCkpCisJCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIFRYX1NUU19MT1NUX0NBUlJJRVJfKSkKIAkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IDE7Ci0JCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIDB4MDAwMDAyMDApKSB7CisJCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIFRYX1NUU19MQVRFX0NPTF8pKSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CiAJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJfQpAQCAtOTIyLDE5ICs5MjQsMTcgQEAKIHsKIAlpbnQgY3JjX2VyciA9IDA7CiAKLQlpZiAodW5saWtlbHkocnhzdGF0ICYgMHgwMDAwODAwMCkpIHsKKwlpZiAodW5saWtlbHkocnhzdGF0ICYgUlhfU1RTX0VTXykpIHsKIAkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIDB4MDAwMDAwMDIpKSB7CisJCWlmICh1bmxpa2VseShyeHN0YXQgJiBSWF9TVFNfQ1JDX0VSUl8pKSB7CiAJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCWNyY19lcnIgPSAxOwogCQl9CiAJfQogCWlmIChsaWtlbHkoIWNyY19lcnIpKSB7Ci0JCWlmICh1bmxpa2VseSgocnhzdGF0ICYgMHgwMDAwMTAyMCkgPT0gMHgwMDAwMTAyMCkpIHsKLQkJCS8qIEZyYW1lIHR5cGUgaW5kaWNhdGVzIGxlbmd0aCwKLQkJCSAqIGFuZCBsZW5ndGggZXJyb3IgaXMgc2V0ICovCisJCWlmICh1bmxpa2VseSgocnhzdGF0ICYgUlhfU1RTX0ZSQU1FX1RZUEVfKSAmJgorCQkJICAgICAocnhzdGF0ICYgUlhfU1RTX0xFTkdUSF9FUlJfKSkpCiAJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJfQogCQlpZiAocnhzdGF0ICYgUlhfU1RTX01DQVNUXykKIAkJCWRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJfQpAQCAtOTUzLDcgKzk1Myw3IEBACiAJCWRvIHsKIAkJCXVkZWxheSgxKTsKIAkJCXZhbCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBSWF9EUF9DVFJMKTsKLQkJfSB3aGlsZSAoLS10aW1lb3V0ICYmICh2YWwgJiBSWF9EUF9DVFJMX1JYX0ZGV0RfKSk7CisJCX0gd2hpbGUgKCh2YWwgJiBSWF9EUF9DVFJMX1JYX0ZGV0RfKSAmJiAtLXRpbWVvdXQpOwogCiAJCWlmICh1bmxpa2VseSh0aW1lb3V0ID09IDApKQogCQkJU01TQ19XQVJOSU5HKEhXLCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yICIKQEAgLTk4NCw3ICs5ODQsNyBAQAogCQkJLyogV2UgcHJvY2Vzc2VkIGFsbCBwYWNrZXRzIGF2YWlsYWJsZS4gIFRlbGwgTkFQSSBpdCBjYW4KIAkJCSAqIHN0b3AgcG9sbGluZyB0aGVuIHJlLWVuYWJsZSByeCBpbnRlcnJ1cHRzICovCiAJCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlNGTF8pOwotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwogCQkJdGVtcCB8PSBJTlRfRU5fUlNGTF9FTl87CiAJCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7CkBAIC0xMTE5LDcgKzExMTksNyBAQAogCiAvKiBTZXRzIHRoZSBkZXZpY2UgTUFDIGFkZHJlc3MgdG8gZGV2X2FkZHIsIGNhbGxlZCB3aXRoIG1hY19sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkCi1zbXNjOTExeF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1OCBkZXZfYWRkcls2XSkKK3Ntc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHU4IGRldl9hZGRyWzZdKQogewogCXUzMiBtYWNfaGlnaDE2ID0gKGRldl9hZGRyWzVdIDw8IDgpIHwgZGV2X2FkZHJbNF07CiAJdTMyIG1hY19sb3czMiA9IChkZXZfYWRkclszXSA8PCAyNCkgfCAoZGV2X2FkZHJbMl0gPDwgMTYpIHwKQEAgLTExNjAsOCArMTE2MCw4IEBACiAKIAkvKiBNYWtlIHN1cmUgRUVQUk9NIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGJlZm9yZSBzZXR0aW5nIEdQSU9fQ0ZHICovCiAJdGltZW91dCA9IDUwOwotCXdoaWxlICgodGltZW91dC0tKSAmJgotCSAgICAgICAoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEUyUF9DTUQpICYgRTJQX0NNRF9FUENfQlVTWV8pKSB7CisJd2hpbGUgKChzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgRTJQX0NNRCkgJiBFMlBfQ01EX0VQQ19CVVNZXykgJiYKKwkgICAgICAgLS10aW1lb3V0KSB7CiAJCXVkZWxheSgxMCk7CiAJfQogCkBAIC0xMTc0LDcgKzExNzQsNyBAQAogCS8qIFRoZSBzb2Z0IHJlc2V0IGFib3ZlIGNsZWFyZWQgdGhlIGRldmljZSdzIE1BQyBhZGRyZXNzLAogCSAqIHJlc3RvcmUgaXQgZnJvbSBsb2NhbCBjb3B5IChzZXQgaW4gcHJvYmUpICovCiAJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKLQlzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwogCiAJLyogSW5pdGlhbGlzZSBpcnFzLCBidXQgbGVhdmUgYWxsIHNvdXJjZXMgZGlzYWJsZWQgKi8KQEAgLTEyNTAsNyArMTI1MCw3IEBACiAJbmFwaV9lbmFibGUoJnBkYXRhLT5uYXBpKTsKIAogCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKLQl0ZW1wIHw9IChJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fUlNGTF9FTl8pOworCXRlbXAgfD0gKElOVF9FTl9UREZBX0VOXyB8IElOVF9FTl9SU0ZMX0VOXyB8IElOVF9FTl9SWFNUT1BfSU5UX0VOXyk7CiAJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCiAJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKQEAgLTE0MjIsMTEgKzE0MjIsNiBAQAogCiAJCQkvKiBSZXF1ZXN0IHRoZSBoYXJkd2FyZSB0byBzdG9wLCB0aGVuIHBlcmZvcm0gdGhlCiAJCQkgKiB1cGRhdGUgd2hlbiB3ZSBnZXQgYW4gUlhfU1RPUCBpbnRlcnJ1cHQgKi8KLQkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SWFNUT1BfSU5UXyk7Ci0JCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JCQl0ZW1wIHw9IElOVF9FTl9SWFNUT1BfSU5UX0VOXzsKLQkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKLQogCQkJdGVtcCA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBNQUNfQ1IpOwogCQkJdGVtcCAmPSB+KE1BQ19DUl9SWEVOXyk7CiAJCQlzbXNjOTExeF9tYWNfd3JpdGUocGRhdGEsIE1BQ19DUiwgdGVtcCk7CkBAIC0xNDY1LDExICsxNDYwLDkgQEAKIAkJLyogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBtdWx0aWNhc3QgdXBkYXRlIHNjaGVkdWxlZCBhbmQKIAkJICogaXQgaXMgbm93IHNhZmUgdG8gY29tcGxldGUgdGhlIHVwZGF0ZSAqLwogCQlTTVNDX1RSQUNFKElOVFIsICJSWCBTdG9wIGludGVycnVwdCIpOwotCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JCXRlbXAgJj0gKH5JTlRfRU5fUlhTVE9QX0lOVF9FTl8pOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7CiAJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SWFNUT1BfSU5UXyk7Ci0JCXNtc2M5MTF4X3J4X211bHRpY2FzdF91cGRhdGVfd29ya2Fyb3VuZChwZGF0YSk7CisJCWlmIChwZGF0YS0+bXVsdGljYXN0X3VwZGF0ZV9wZW5kaW5nKQorCQkJc21zYzkxMXhfcnhfbXVsdGljYXN0X3VwZGF0ZV93b3JrYXJvdW5kKHBkYXRhKTsKIAkJc2VydmljZWQgPSBJUlFfSEFORExFRDsKIAl9CiAKQEAgLTE0ODksMTYgKzE0ODIsMTYgQEAKIAl9CiAKIAlpZiAobGlrZWx5KGludHN0cyAmIGludGVuICYgSU5UX1NUU19SU0ZMXykpIHsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwZGF0YS0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZwZGF0YS0+bmFwaSkpKSB7CiAJCQkvKiBEaXNhYmxlIFJ4IGludGVycnVwdHMgKi8KIAkJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKIAkJCXRlbXAgJj0gKH5JTlRfRU5fUlNGTF9FTl8pOwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCQkJLyogU2NoZWR1bGUgYSBOQVBJIHBvbGwgKi8KLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcGRhdGEtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJU01TQ19XQVJOSU5HKFJYX0VSUiwKLQkJCQkibmV0aWZfcnhfc2NoZWR1bGVfcHJlcCBmYWlsZWQiKTsKKwkJCQkibmFwaV9zY2hlZHVsZV9wcmVwIGZhaWxlZCIpOwogCQl9CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMTUxNSw2ICsxNTA4LDMxIEBACiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIAorc3RhdGljIGludCBzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwkvKiBPbiBvbGRlciBoYXJkd2FyZSByZXZpc2lvbnMgd2UgY2Fubm90IGNoYW5nZSB0aGUgbWFjIGFkZHJlc3MKKwkgKiByZWdpc3RlcnMgd2hpbGUgcmVjZWl2aW5nIGRhdGEuICBOZXdlciBkZXZpY2VzIGNhbiBzYWZlbHkgY2hhbmdlCisJICogdGhpcyBhdCBhbnkgdGltZS4gKi8KKwlpZiAocGRhdGEtPmdlbmVyYXRpb24gPD0gMSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisKKwlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOworCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOworCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKwogLyogU3RhbmRhcmQgaW9jdGxzIGZvciBtaWktdG9vbCAqLwogc3RhdGljIGludCBzbXNjOTExeF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKQEAgLTE1NDksNyArMTU2Nyw3IEBACiB7CiAJc3RybGNweShpbmZvLT5kcml2ZXIsIFNNU0NfQ0hJUE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGluZm8tPnZlcnNpb24sIFNNU0NfRFJWX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsCisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKIAkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKQEAgLTE2NjIsNiArMTY4MCw3IEBACiAJCQkJCSAgdTggYWRkcmVzcywgdTggZGF0YSkKIHsKIAl1MzIgb3AgPSBFMlBfQ01EX0VQQ19DTURfRVJBU0VfIHwgYWRkcmVzczsKKwl1MzIgdGVtcDsKIAlpbnQgcmV0OwogCiAJU01TQ19UUkFDRShEUlYsICJhZGRyZXNzIDB4JXgsIGRhdGEgMHgleCIsIGFkZHJlc3MsIGRhdGEpOwpAQCAtMTY3MCw2ICsxNjg5LDEwIEBACiAJaWYgKCFyZXQpIHsKIAkJb3AgPSBFMlBfQ01EX0VQQ19DTURfV1JJVEVfIHwgYWRkcmVzczsKIAkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBFMlBfREFUQSwgKHUzMilkYXRhKTsKKworCQkvKiBXb3JrYXJvdW5kIGZvciBoYXJkd2FyZSByZWFkLWFmdGVyLXdyaXRlIHJlc3RyaWN0aW9uICovCisJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgQllURV9URVNUKTsKKwogCQlyZXQgPSBzbXNjOTExeF9lZXByb21fc2VuZF9jbWQocGRhdGEsIG9wKTsKIAl9CiAKQEAgLTE3NDUsMTIgKzE3NjgsMjcgQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNtc2M5MTF4X3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2RvX2lvY3RsCQk9IHNtc2M5MTF4X2RvX2lvY3RsLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNtc2M5MTF4X3BvbGxfY29udHJvbGxlciwKICNlbmRpZgogfTsKIAorLyogY29waWVzIHRoZSBjdXJyZW50IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgdG8gZGV2LT5kZXZfYWRkciAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBtYWNfaGlnaDE2ID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJIKTsKKwl1MzIgbWFjX2xvdzMyID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJMKTsKKworCWRldi0+ZGV2X2FkZHJbMF0gPSAodTgpKG1hY19sb3czMik7CisJZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkobWFjX2xvdzMyID4+IDgpOworCWRldi0+ZGV2X2FkZHJbMl0gPSAodTgpKG1hY19sb3czMiA+PiAxNik7CisJZGV2LT5kZXZfYWRkclszXSA9ICh1OCkobWFjX2xvdzMyID4+IDI0KTsKKwlkZXYtPmRldl9hZGRyWzRdID0gKHU4KShtYWNfaGlnaDE2KTsKKwlkZXYtPmRldl9hZGRyWzVdID0gKHU4KShtYWNfaGlnaDE2ID4+IDgpOworfQorCiAvKiBJbml0aWFsaXppbmcgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlcywgb25seSBjYWxsZWQgZnJvbSBwcm9iZSAqLwogc3RhdGljIGludCBfX2RldmluaXQgc21zYzkxMXhfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTgzOCw2ICsxODc2LDEyIEBACiAJCVNNU0NfV0FSTklORyhQUk9CRSwKIAkJCSJUaGlzIGRyaXZlciBpcyBub3QgaW50ZW5kZWQgZm9yIHRoaXMgY2hpcCByZXZpc2lvbiIpOwogCisJLyogd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgYW4gZWVwcm9tLCB3aGVyZSB0aGUgbWFjIGFkZHJlc3MKKwkgKiBpcyBzdG9yZWQgZWxzZXdoZXJlIGFuZCBzZXQgYnkgdGhlIGJvb3Rsb2FkZXIuICBUaGlzIHNhdmVzIHRoZQorCSAqIG1hYyBhZGRyZXNzIGJlZm9yZSByZXNldHRpbmcgdGhlIGRldmljZSAqLworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfU0FWRV9NQUNfQUREUkVTUykKKwkJc21zYzkxMXhfcmVhZF9tYWNfYWRkcmVzcyhkZXYpOworCiAJLyogUmVzZXQgdGhlIExBTjkxMXggKi8KIAlpZiAoc21zYzkxMXhfc29mdF9yZXNldChwZGF0YSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTg5NiwxMSArMTk0MCwxMCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhOwogCXN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgKmNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqaXJxX3JlczsKIAl1bnNpZ25lZCBpbnQgaW50Y2ZnID0gMDsKLQlpbnQgcmVzX3NpemU7CisJaW50IHJlc19zaXplLCBpcnFfZmxhZ3M7CiAJaW50IHJldHZhbDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCXByX2luZm8oIiVzOiBEcml2ZXIgdmVyc2lvbiAlcy5cbiIsIFNNU0NfQ0hJUE5BTUUsIFNNU0NfRFJWX1ZFUlNJT04pOwogCkBAIC0xOTIzLDYgKzE5NjYsMTQgQEAKIAl9CiAJcmVzX3NpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQ7CiAKKwlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWlycV9yZXMpIHsKKwkJcHJfd2FybmluZygiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBpcnEgcmVzb3VyY2UuXG4iLAorCQkJU01TQ19DSElQTkFNRSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0XzA7CisJfQorCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUsIFNNU0NfQ0hJUE5BTUUpKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBvdXRfMDsKQEAgLTE5MzksNyArMTk5MCw4IEBACiAKIAlwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJZGV2LT5pcnEgPSBpcnFfcmVzLT5zdGFydDsKKwlpcnFfZmxhZ3MgPSBpcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCXBkYXRhLT5pb2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzX3NpemUpOwogCiAJLyogY29weSBjb25maWcgcGFyYW1ldGVycyBhY3Jvc3MgdG8gcGRhdGEgKi8KQEAgLTE5NzIsOCArMjAyNCw4IEBACiAJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIDApOwogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgMHhGRkZGRkZGRik7CiAKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc21zYzkxMXhfaXJxaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICAgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbXNjOTExeF9pcnFoYW5kbGVyLAorCQkJICAgICBpcnFfZmxhZ3MgfCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJU01TQ19XQVJOSU5HKFBST0JFLAogCQkJIlVuYWJsZSB0byBjbGFpbSByZXF1ZXN0ZWQgaXJxOiAlZCIsIGRldi0+aXJxKTsKQEAgLTIwMDQsMTkgKzIwNTYsMTIgQEAKIAogCS8qIENoZWNrIGlmIG1hYyBhZGRyZXNzIGhhcyBiZWVuIHNwZWNpZmllZCB3aGVuIGJyaW5naW5nIGludGVyZmFjZSB1cCAqLwogCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7Ci0JCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAJCVNNU0NfVFJBQ0UoUFJPQkUsICJNQUMgQWRkcmVzcyBpcyBzcGVjaWZpZWQgYnkgY29uZmlndXJhdGlvbiIpOwogCX0gZWxzZSB7CiAJCS8qIFRyeSByZWFkaW5nIG1hYyBhZGRyZXNzIGZyb20gZGV2aWNlLiBpZiBFRVBST00gaXMgcHJlc2VudAogCQkgKiBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldCAqLwotCQl1MzIgbWFjX2hpZ2gxNiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSSCk7Ci0JCXUzMiBtYWNfbG93MzIgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkwpOwotCQlkZXYtPmRldl9hZGRyWzBdID0gKHU4KShtYWNfbG93MzIpOwotCQlkZXYtPmRldl9hZGRyWzFdID0gKHU4KShtYWNfbG93MzIgPj4gOCk7Ci0JCWRldi0+ZGV2X2FkZHJbMl0gPSAodTgpKG1hY19sb3czMiA+PiAxNik7Ci0JCWRldi0+ZGV2X2FkZHJbM10gPSAodTgpKG1hY19sb3czMiA+PiAyNCk7Ci0JCWRldi0+ZGV2X2FkZHJbNF0gPSAodTgpKG1hY19oaWdoMTYpOwotCQlkZXYtPmRldl9hZGRyWzVdID0gKHU4KShtYWNfaGlnaDE2ID4+IDgpOworCQlzbXNjOTExeF9yZWFkX21hY19hZGRyZXNzKGRldik7CiAKIAkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKIAkJCS8qIGVlcHJvbSB2YWx1ZXMgYXJlIHZhbGlkICBzbyB1c2UgdGhlbSAqLwpAQCAtMjAyNSw3ICsyMDcwLDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIGVlcHJvbSB2YWx1ZXMgYXJlIGludmFsaWQsIGdlbmVyYXRlIHJhbmRvbSBNQUMgKi8KIAkJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwotCQkJc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwkJCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAJCQlTTVNDX1RSQUNFKFBST0JFLAogCQkJCSJNQUMgQWRkcmVzcyBpcyBzZXQgdG8gcmFuZG9tX2V0aGVyX2FkZHIiKTsKIAkJfQpAQCAtMjAzMyw4ICsyMDc4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAotCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlc1xuIiwKLQkJIHByaW50X21hYyhtYWMsIGRldi0+ZGV2X2FkZHIpKTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5oIGIvZHJpdmVycy9uZXQvc21zYzkxMXguaAppbmRleCAyYjc2NjU0Li5iNTcxNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKQEAgLTgxLDEyICs4MSwxOSBAQAogCiAjZGVmaW5lIFJYX1NUQVRVU19GSUZPCQkJMHg0MAogI2RlZmluZSBSWF9TVFNfRVNfCQkJMHgwMDAwODAwMAorI2RlZmluZSBSWF9TVFNfTEVOR1RIX0VSUl8JCTB4MDAwMDEwMDAKICNkZWZpbmUgUlhfU1RTX01DQVNUXwkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgUlhfU1RTX0ZSQU1FX1RZUEVfCQkweDAwMDAwMDIwCisjZGVmaW5lIFJYX1NUU19DUkNfRVJSXwkJCTB4MDAwMDAwMDIKIAogI2RlZmluZSBSWF9TVEFUVVNfRklGT19QRUVLCQkweDQ0CiAKICNkZWZpbmUgVFhfU1RBVFVTX0ZJRk8JCQkweDQ4CiAjZGVmaW5lIFRYX1NUU19FU18JCQkweDAwMDA4MDAwCisjZGVmaW5lIFRYX1NUU19MT1NUX0NBUlJJRVJfCQkweDAwMDAwODAwCisjZGVmaW5lIFRYX1NUU19OT19DQVJSSUVSXwkJMHgwMDAwMDQwMAorI2RlZmluZSBUWF9TVFNfTEFURV9DT0xfCQkweDAwMDAwMjAwCisjZGVmaW5lIFRYX1NUU19FWENFU1NfQ09MXwkJMHgwMDAwMDEwMAogCiAjZGVmaW5lIFRYX1NUQVRVU19GSUZPX1BFRUsJCTB4NEMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKaW5kZXggNGUxNWFlMC4uNTk1OWFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCkBAIC02NzAsNyArNjcwLDcgQEAKIAkJCXNtc2M5NDIwX3BjaV9mbHVzaF93cml0ZShwZCk7CiAKIAkJCWludHNfdG9fY2xlYXIgfD0gKERNQUNfU1RTX1JYXyB8IERNQUNfU1RTX05JU18pOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBkLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnBkLT5uYXBpKTsKIAkJfQogCiAJCWlmIChpbnRzX3RvX2NsZWFyKQpAQCAtODA3LDcgKzgwNyw3IEBACiAJaWYgKHBkLT5yeF9jc3VtKSB7CiAJCXUxNiBod19jc3VtID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYl90YWlsX3BvaW50ZXIoc2tiKSArCiAJCQlORVRfSVBfQUxJR04gKyBwYWNrZXRfbGVuZ3RoICsgNCk7Ci0JCXB1dF91bmFsaWduZWRfbGUxNihjcHVfdG9fbGUxNihod19jc3VtKSwgJnNrYi0+Y3N1bSk7CisJCXB1dF91bmFsaWduZWRfbGUxNihod19jc3VtLCAmc2tiLT5jc3VtKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAl9CiAKQEAgLTg5Myw3ICs4OTMsNyBAQAogCXNtc2M5NDIwX3BjaV9mbHVzaF93cml0ZShwZCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKCZwZC0+bmFwaSk7CisJCW5hcGlfY29tcGxldGUoJnBkLT5uYXBpKTsKIAogCQkvKiByZS1lbmFibGUgUlggRE1BIGludGVycnVwdHMgKi8KIAkJZG1hX2ludHJfZW5hID0gc21zYzk0MjBfcmVnX3JlYWQocGQsIERNQUNfSU5UUl9FTkEpOwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAlzbXNjX2luZm8oUFJPQkUsICJQSFkgYWRkciAlZCwgcGh5X2lkIDB4JTA4WCIsIHBoeWRldi0+YWRkciwKIAkJcGh5ZGV2LT5waHlfaWQpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkmc21zYzk0MjBfcGh5X2FkanVzdF9saW5rLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKIAl9CiAKIAlwcl9pbmZvKCIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEpOwogCiAJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KIAlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoUEhZX0JBU0lDX0ZFQVRVUkVTIHwgU1VQUE9SVEVEX1BhdXNlIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCA4OGQyYzY3Li45MGU2NjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogCS8qIGlmIGFsbCBwYWNrZXRzIGFyZSBpbiB0aGUgc3RhY2ssIGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZXR1cm4gMCAqLwogCS8qIGlmIG5vdCwgcmV0dXJuIDEgKi8KIAlpZiAocGFja2V0c19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlzcGlkZXJfbmV0X3J4X2lycV9vbihjYXJkKTsKIAkJY2FyZC0+aWdub3JlX3J4X3JhbWZ1bGwgPSAwOwogCX0KQEAgLTE1MjgsNyArMTUyOCw3IEBACiAJCQlzcGlkZXJfbmV0X3JlZmlsbF9yeF9jaGFpbihjYXJkKTsKIAkJCXNwaWRlcl9uZXRfZW5hYmxlX3J4ZG1hYyhjYXJkKTsKIAkJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCX0KIAkJc2hvd19lcnJvciA9IDA7CiAJCWJyZWFrOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCXNwaWRlcl9uZXRfZW5hYmxlX3J4ZG1hYyhjYXJkKTsKIAkJY2FyZC0+bnVtX3J4X2ludHMgKys7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKIApAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCXNwaWRlcl9uZXRfZW5hYmxlX3J4ZG1hYyhjYXJkKTsKIAkJY2FyZC0+bnVtX3J4X2ludHMgKys7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKIApAQCAtMTY1NiwxMSArMTY1NiwxMSBAQAogCiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX1JYSU5UICkgewogCQlzcGlkZXJfbmV0X3J4X2lycV9vZmYoY2FyZCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwogCX0KIAlpZiAoc3RhdHVzX3JlZyAmIFNQSURFUl9ORVRfVFhJTlQpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAKIAlpZiAoc3RhdHVzX3JlZyAmIFNQSURFUl9ORVRfTElOS0lOVCkKIAkJc3BpZGVyX25ldF9saW5rX3Jlc2V0KG5ldGRldik7CkBAIC0yMjU5LDYgKzIyNTksMjMgQEAKIAljYXJkLT5zcGlkZXJfc3RhdHMudHhfdGltZW91dHMrKzsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcGlkZXJfbmV0X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc3BpZGVyX25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBzcGlkZXJfbmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHNwaWRlcl9uZXRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNwaWRlcl9uZXRfc2V0X211bHRpLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gc3BpZGVyX25ldF9zZXRfbWFjLAorCS5uZG9fY2hhbmdlX210dQkJPSBzcGlkZXJfbmV0X2NoYW5nZV9tdHUsCisJLm5kb19kb19pb2N0bAkJPSBzcGlkZXJfbmV0X2RvX2lvY3RsLAorCS5uZG9fdHhfdGltZW91dAkJPSBzcGlkZXJfbmV0X3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLyogSFcgVkxBTiAqLworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLyogcG9sbCBjb250cm9sbGVyICovCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzcGlkZXJfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZiAvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLworfTsKKwogLyoqCiAgKiBzcGlkZXJfbmV0X3NldHVwX25ldGRldl9vcHMgLSBpbml0aWFsaXphdGlvbiBvZiBuZXRfZGV2aWNlIG9wZXJhdGlvbnMKICAqIEBuZXRkZXY6IG5ldF9kZXZpY2Ugc3RydWN0dXJlCkBAIC0yMjY4LDIxICsyMjg1LDggQEAKIHN0YXRpYyB2b2lkCiBzcGlkZXJfbmV0X3NldHVwX25ldGRldl9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQluZXRkZXYtPm9wZW4gPSAmc3BpZGVyX25ldF9vcGVuOwotCW5ldGRldi0+c3RvcCA9ICZzcGlkZXJfbmV0X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc3BpZGVyX25ldF94bWl0OwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNwaWRlcl9uZXRfc2V0X211bHRpOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gJnNwaWRlcl9uZXRfc2V0X21hYzsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmc3BpZGVyX25ldF9jaGFuZ2VfbXR1OwotCW5ldGRldi0+ZG9faW9jdGwgPSAmc3BpZGVyX25ldF9kb19pb2N0bDsKLQkvKiB0eCB3YXRjaGRvZyAqLwotCW5ldGRldi0+dHhfdGltZW91dCA9ICZzcGlkZXJfbmV0X3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnNwaWRlcl9uZXRfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBTUElERVJfTkVUX1dBVENIRE9HX1RJTUVPVVQ7Ci0JLyogSFcgVkxBTiAqLwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLyogcG9sbCBjb250cm9sbGVyICovCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSAmc3BpZGVyX25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIAkvKiBldGh0b29sIG9wcyAqLwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmc3BpZGVyX25ldF9ldGh0b29sX29wczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IGRhM2E3NmIuLmZjYjk0M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAjZGVmaW5lIEZJUk1XQVJFX1RYCSJhZGFwdGVjL3N0YXJmaXJlX3R4LmJpbiIKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogS0VSTl9JTkZPICJzdGFyZmlyZS5jOnYxLjAzIDcvMjYvMjAwMCAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgogS0VSTl9JTkZPICIgKHVub2ZmaWNpYWwgMi4yLzIuNCBrZXJuZWwgcG9ydCwgdmVyc2lvbiAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CiAKQEAgLTEzNDIsOCArMTM0Miw4IEBACiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKSB7CiAJCQl1MzIgZW5hYmxlOwogCi0JCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkpIHsKLQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbnAtPm5hcGkpKSkgeworCQkJCV9fbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCQkJCWVuYWJsZSA9IHJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOwogCQkJCWVuYWJsZSAmPSB+KEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSk7CiAJCQkJd3JpdGVsKGVuYWJsZSwgaW9hZGRyICsgSW50ckVuYWJsZSk7CkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCQlpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCX0gd2hpbGUgKGludHJfc3RhdHVzICYgKEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSkpOwogCi0JbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOwogCWludHJfc3RhdHVzIHw9IEludHJSeERvbmUgfCBJbnRyUnhFbXB0eTsKIAl3cml0ZWwoaW50cl9zdGF0dXMsIGlvYWRkciArIEludHJFbmFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCmluZGV4IDdmNjljN2YuLjUwMTdkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYworKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKQEAgLTEwNzQsNiArMTA3NCwxOCBAQAogCS5nZXRfbGluawkJPSBiaWdtYWNfZ2V0X2xpbmssCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJpZ21hY19vcHMgPSB7CisJLm5kb19vcGVuCQk9IGJpZ21hY19vcGVuLAorCS5uZG9fc3RvcAkJPSBiaWdtYWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGJpZ21hY19zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGJpZ21hY19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBiaWdtYWNfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYmlnbWFjX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYmlnbWFjX2V0aGVyX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJICAgICAgIHN0cnVjdCBvZl9kZXZpY2UgKnFlY19vcCkKIHsKQEAgLTExODcsMTYgKzExOTksOCBAQAogCWJwLT5kZXYgPSBkZXY7CiAKIAkvKiBTZXQgbGlua3MgdG8gb3VyIEJpZ01BQyBvcGVuIGFuZCBjbG9zZSByb3V0aW5lcy4gKi8KLQlkZXYtPm9wZW4gPSAmYmlnbWFjX29wZW47Ci0JZGV2LT5zdG9wID0gJmJpZ21hY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZiaWdtYWNfc3RhcnRfeG1pdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmJpZ21hY19ldGh0b29sX29wczsKLQotCS8qIFNldCBsaW5rcyB0byBCaWdNQUMgc3RhdGlzdGljIGFuZCBtdWx0aS1jYXN0IGxvYWRpbmcgY29kZS4gKi8KLQlkZXYtPmdldF9zdGF0cyA9ICZiaWdtYWNfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmJpZ21hY19zZXRfbXVsdGljYXN0OwotCi0JZGV2LT50eF90aW1lb3V0ID0gJmJpZ21hY190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZiaWdtYWNfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwogCiAJLyogRmluaXNoIG5ldCBkZXZpY2UgcmVnaXN0cmF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKaW5kZXggNDM2OTViNy4uYzM5OWIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCkBAIC0xMDksOCArMTA5LDkgQEAKICNlbmRpZgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VuZGFuY2UgQWx0YSBFdGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggYzljNzY1MC4uYzAyNDM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTkyMSw3ICs5MjEsNyBAQAogCQlncC0+c3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQpOwogCX0gd2hpbGUgKGdwLT5zdGF0dXMgJiBHUkVHX1NUQVRfTkFQSSk7CiAKLQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlnZW1fZW5hYmxlX2ludHMoZ3ApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKQEAgLTk0NCw3ICs5NDQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZ3AtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmZ3AtPm5hcGkpKSB7CiAJCXUzMiBnZW1fc3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQpOwogCiAJCWlmIChnZW1fc3RhdHVzID09IDApIHsKQEAgLTk1NCw3ICs5NTQsNyBAQAogCQl9CiAJCWdwLT5zdGF0dXMgPSBnZW1fc3RhdHVzOwogCQlnZW1fZGlzYWJsZV9pbnRzKGdwKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZ3AtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmdwLT5uYXBpKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VubGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKaW5kZXggMTZjNTI4ZC4uYWZjN2IzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VubGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCkBAIC0xMzExLDYgKzEzMTEsMTcgQEAKIAkuZ2V0X2xpbmsJCT0gc3BhcmNfbGFuY2VfZ2V0X2xpbmssCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNwYXJjX2xhbmNlX29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGFuY2Vfb3BlbiwKKwkubmRvX3N0b3AJCT0gbGFuY2VfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGxhbmNlX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBsYW5jZV9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBsYW5jZV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNwYXJjX2xhbmNlX3Byb2JlX29uZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKIAkJCQkJICAgc3RydWN0IG9mX2RldmljZSAqbGVkbWEsCiAJCQkJCSAgIHN0cnVjdCBvZl9kZXZpY2UgKmxlYnVmZmVyKQpAQCAtMTQ2MiwxMyArMTQ3Myw5IEBACiAKIAlscC0+ZGV2ID0gZGV2OwogCVNFVF9ORVRERVZfREVWKGRldiwgJm9wLT5kZXYpOwotCWRldi0+b3BlbiA9ICZsYW5jZV9vcGVuOwotCWRldi0+c3RvcCA9ICZsYW5jZV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZsYW5jZV9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZsYW5jZV90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmxhbmNlX3NldF9tdWx0aWNhc3Q7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZzcGFyY19sYW5jZV9ldGh0b29sX29wczsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3BhcmNfbGFuY2Vfb3BzOwogCiAJZGV2LT5pcnEgPSBvcC0+aXJxc1swXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VucWUuYyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKaW5kZXggZmUwYzNmMi4uYzZlYzYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VucWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5xZS5jCkBAIC04MjksNiArODI5LDE3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcWVjX29wcyA9IHsKKwkubmRvX29wZW4JCT0gcWVfb3BlbiwKKwkubmRvX3N0b3AJCT0gcWVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHFlX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBxZV9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBxZV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHFlY19ldGhlcl9pbml0KHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQ7CkBAIC04OTMsMTUgKzkwNCwxMSBAQAogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb3AtPmRldik7CiAKLQlkZXYtPm9wZW4gPSBxZV9vcGVuOwotCWRldi0+c3RvcCA9IHFlX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gcWVfc3RhcnRfeG1pdDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHFlX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gcWVfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKIAlkZXYtPmlycSA9IG9wLT5pcnFzWzBdOwogCWRldi0+ZG1hID0gMDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnFlX2V0aHRvb2xfb3BzOworCWRldi0+bmV0ZGV2X29wcyA9ICZxZWNfb3BzOwogCiAJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYyBiL2RyaXZlcnMvbmV0L3N1bnZuZXQuYwppbmRleCA2MTEyMzBmLi5hODJmYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW52bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCkBAIC0xMDEyLDYgKzEwMTIsMTYgQEAKIHN0YXRpYyBMSVNUX0hFQUQodm5ldF9saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgodm5ldF9saXN0X211dGV4KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bmV0X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB2bmV0X2Nsb3NlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdm5ldF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHZuZXRfc2V0X21hY19hZGRyLAorCS5uZG9fdHhfdGltZW91dAkJPSB2bmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHZuZXRfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdm5ldF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIHN0cnVjdCB2bmV0ICogX19kZXZpbml0IHZuZXRfbmV3KGNvbnN0IHU2NCAqbG9jYWxfbWFjKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMDQwLDE1ICsxMDUwLDkgQEAKIAlJTklUX0xJU1RfSEVBRCgmdnAtPmxpc3QpOwogCXZwLT5sb2NhbF9tYWMgPSAqbG9jYWxfbWFjOwogCi0JZGV2LT5vcGVuID0gdm5ldF9vcGVuOwotCWRldi0+c3RvcCA9IHZuZXRfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB2bmV0X3NldF9yeF9tb2RlOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gdm5ldF9zZXRfbWFjX2FkZHI7Ci0JZGV2LT50eF90aW1lb3V0ID0gdm5ldF90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ2bmV0X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZuZXRfZXRodG9vbF9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFZORVRfVFhfVElNRU9VVDsKLQlkZXYtPmNoYW5nZV9tdHUgPSB2bmV0X2NoYW5nZV9tdHU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2bmV0X3N0YXJ0X3htaXQ7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggYmNkMGU2MC4uYjUyYTFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNzI1LDcgKzcyNSw3IEBACiAJfQogCiAJLyogYXR0YWNoIHRoZSBtYWMgdG8gdGhlIHBoeSAqLwotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJCSAgICAgJnRjX2hhbmRsZV9saW5rX2NoYW5nZSwgMCwKIAkJCSAgICAgbHAtPmNoaXB0eXBlID09IFRDMzU4MTVfVFg0OTM5ID8KIAkJCSAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgOiBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKQEAgLTczNSw3ICs3MzUsNyBAQAogCX0KIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKIAkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpZD0leClcbiIsCi0JCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJcGh5ZGV2LT5waHlfaWQpOwogCiAJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KQEAgLTE2MDksOCArMTYwOSw4IEBACiAJaWYgKCEoZG1hY3RsICYgRE1BX0ludE1hc2spKSB7CiAJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCQl0Y193cml0ZWwoZG1hY3RsIHwgRE1BX0ludE1hc2ssICZ0ci0+RE1BX0N0bCk7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCQllbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludGVycnVwdCB0YWtlbiBpbiBwb2xsXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CkBAIC0xOTE5LDcgKzE5MTksNyBAQAogCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CiAKIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJCXRjX3dyaXRlbCh0Y19yZWFkbCgmdHItPkRNQV9DdGwpICYgfkRNQV9JbnRNYXNrLCAmdHItPkRNQV9DdGwpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKaW5kZXggYTdhNGRjNC4uN2RlYmQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKQEAgLTYzLDcgKzYzLDYgQEAKICAqLwogCiAjaW5jbHVkZSAidGVodXRpLmgiCi0jaW5jbHVkZSAidGVodXRpX2Z3LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIGJkeF9wY2lfdGJsW10gPSB7CiAJezB4MUZDOSwgMHgzMDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKQEAgLTI2NSw4ICsyNjQsOCBAQAogCQliZHhfaXNyX2V4dHJhKHByaXYsIGlzcik7CiAKIAlpZiAoaXNyICYgKElSX1JYX0RFU0NfMCB8IElSX1RYX0ZSRUVfMCkpIHsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnByaXYtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpKSB7CisJCQlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCQkJUkVUKElSUV9IQU5ETEVEKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE5PVEU6IHdlIGdldCBoZXJlIGlmIGludHIgaGFzIHNsaXBwZWQgaW50byB3aW5kb3cKQEAgLTMwMiw3ICszMDEsNyBAQAogCQkgKiBkZXZpY2UgbG9jayBhbmQgYWxsb3cgd2FpdGluZyB0YXNrcyAoZWcgcm1tb2QpIHRvIGFkdmFuY2UpICovCiAJCXByaXYtPm5hcGlfc3RvcCA9IDA7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWJkeF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAl9CiAJcmV0dXJuIHdvcmtfZG9uZTsKQEAgLTMxOCwyOCArMzE3LDQxIEBACiAKIHN0YXRpYyBpbnQgYmR4X2Z3X2xvYWQoc3RydWN0IGJkeF9wcml2ICpwcml2KQogeworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwogCWludCBtYXN0ZXIsIGk7CisJaW50IHJjOwogCiAJRU5URVI7CiAJbWFzdGVyID0gUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TRU1BUEhPUkUpOwogCWlmICghUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpICYmIG1hc3RlcikgewotCQliZHhfdHhfcHVzaF9kZXNjX3NhZmUocHJpdiwgc19maXJtTG9hZCwgc2l6ZW9mKHNfZmlybUxvYWQpKTsKKwkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgInRlaHV0aS9maXJtd2FyZS5iaW4iLCAmcHJpdi0+cGRldi0+ZGV2KTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCWJkeF90eF9wdXNoX2Rlc2Nfc2FmZShwcml2LCAoY2hhciAqKWZ3LT5kYXRhLCBmdy0+c2l6ZSk7CiAJCW1kZWxheSgxMDApOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKLQkJaWYgKFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSkKLQkJCWJyZWFrOworCQlpZiAoUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpKSB7CisJCQlyYyA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQogCQltZGVsYXkoMik7CiAJfQorCXJjID0gLUVJTzsKK291dDoKIAlpZiAobWFzdGVyKQogCQlXUklURV9SRUcocHJpdiwgcmVnSU5JVF9TRU1BUEhPUkUsIDEpOworCWlmIChmdykKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlpZiAoaSA9PSAyMDApIHsKKwlpZiAocmMpIHsKIAkJRVJSKCIlczogZmlybXdhcmUgbG9hZGluZyBmYWlsZWRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOwotCQlEQkcoIlZQQyA9IDB4JXggVklDID0gMHgleCBJTklUX1NUQVRVUyA9IDB4JXggaT0lZFxuIiwKLQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZQQyksCi0JCSAgICBSRUFEX1JFRyhwcml2LCByZWdWSUMpLCBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUyksIGkpOwotCQlSRVQoLUVJTyk7CisJCWlmIChyYyA9PSAtRUlPKQorCQkJREJHKCJWUEMgPSAweCV4IFZJQyA9IDB4JXggSU5JVF9TVEFUVVMgPSAweCV4IGk9JWRcbiIsCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVlBDKSwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdWSUMpLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSwgaSk7CisJCVJFVChyYyk7CiAJfSBlbHNlIHsKIAkJREJHKCIlczogZmlybXdhcmUgbG9hZGluZyBzdWNjZXNzXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKIAkJUkVUKDApOwpAQCAtNjE3LDEzICs2MjksNiBAQAogCVJFVChyYyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBiZHhfZmlybXdhcmVfZW5kaWFuZXNzKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc19maXJtTG9hZCk7IGkrKykKLQkJc19maXJtTG9hZFtpXSA9IENQVV9DSElQX1NXQVAzMihzX2Zpcm1Mb2FkW2ldKTsKLX0KLQogc3RhdGljIGludCBiZHhfcmFuZ2VfY2hlY2soc3RydWN0IGJkeF9wcml2ICpwcml2LCB1MzIgb2Zmc2V0KQogewogCXJldHVybiAob2Zmc2V0ID4gKHUzMikgKEJEWF9SRUdTX1NJWkUgLyBwcml2LT5uaWMtPnBvcnRfbnVtKSkgPwpAQCAtMjUwMSw3ICsyNTA2LDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGJkeF9tb2R1bGVfaW5pdCh2b2lkKQogewogCUVOVEVSOwotCWJkeF9maXJtd2FyZV9lbmRpYW5lc3MoKTsKIAlpbml0X3R4ZF9zaXplcygpOwogCXByaW50X2RyaXZlcl9pZCgpOwogCVJFVChwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZHhfcGNpX2RyaXZlcikpOwpAQCAtMjUyMSwzICsyNTI1LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oQkRYX0RSVl9ERVNDKTsKK01PRFVMRV9GSVJNV0FSRSgidGVodXRpL2Zpcm13YXJlLmJpbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmggYi9kcml2ZXJzL25ldC90ZWh1dGkuaAppbmRleCBlZmFmODRkLi5kZWM2N2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuaAorKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIENvbXBpbGUgVGltZSBTd2l0Y2hlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmggYi9kcml2ZXJzL25ldC90ZWh1dGlfZncuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2MDNhOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGlfZncuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNzEyICswLDAgQEAKLS8qCi0gKiBUZWh1dGkgTmV0d29ya3MoUikgTmV0d29yayBEcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZWh1dGkgTmV0d29ya3MgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0vKiBMb2FkaW5nIEZpcm13YXJlICovCi0vKiBJTlRfTUVNIFZlciAqLwotc3RhdGljIHUzMiBzX2Zpcm1Mb2FkW10gPSB7Ci0JMHgwMDBmMDAwMiwKLQkweDQwNzE4MDAwLAotCTB4MDAwMDAwMmQsCi0JMHhjMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDEsCi0JMHgwMDAwMDAyZCwKLQkweGMwODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMiwKLQkweDAwMDAwMDJkLAotCTB4YzEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAzLAotCTB4MDAwMDAwMmQsCi0JMHhjMTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDQsCi0JMHgwMDAwMDAyZCwKLQkweGMyMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNSwKLQkweDAwMDAwMDJkLAotCTB4YzI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA2LAotCTB4MDAwMDAwMmQsCi0JMHhjMzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDcsCi0JMHgwMDAwMDAyZCwKLQkweGMzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOCwKLQkweDAwMDAwMDJkLAotCTB4YzQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA5LAotCTB4MDAwMDAwMmQsCi0JMHhjNDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGEsCi0JMHgwMDAwMDAyZCwKLQkweGM1MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYiwKLQkweDAwMDAwMDJkLAotCTB4YzU4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBjLAotCTB4MDAwMDAwMmQsCi0JMHhjNjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGQsCi0JMHgwMDAwMDAyZCwKLQkweGM2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZSwKLQkweDAwMDAwMDJkLAotCTB4YzcwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBmLAotCTB4MDAwMDAwMmQsCi0JMHhjNzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTAsCi0JMHgwMDAwMDAyZCwKLQkweGM4MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMSwKLQkweDAwMDAwMDJkLAotCTB4Yzg4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEyLAotCTB4MDAwMDAwMmQsCi0JMHhjOTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTMsCi0JMHgwMDAwMDAyZCwKLQkweGM5ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNCwKLQkweDAwMDAwMDJkLAotCTB4Y2EwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE1LAotCTB4MDAwMDAwMmQsCi0JMHhjYTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTYsCi0JMHgwMDAwMDAyZCwKLQkweGNiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNywKLQkweDAwMDAwMDJkLAotCTB4Y2I4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE4LAotCTB4MDAwMDAwMmQsCi0JMHhjYzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTksCi0JMHgwMDAwMDAyZCwKLQkweGNjODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYSwKLQkweDAwMDAwMDJkLAotCTB4Y2QwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFiLAotCTB4MDAwMDAwMmQsCi0JMHhjZDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWMsCi0JMHgwMDAwMDAyZCwKLQkweGNlMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZCwKLQkweDAwMDAwMDJkLAotCTB4Y2U4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFlLAotCTB4MDAwMDAwMmQsCi0JMHhjZjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWYsCi0JMHgwMDAwMDAyZCwKLQkweGNmODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMCwKLQkweDAwMDAwMDJkLAotCTB4ZDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIxLAotCTB4MDAwMDAwMmQsCi0JMHhkMDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjIsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMywKLQkweDAwMDAwMDJkLAotCTB4ZDE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI0LAotCTB4MDAwMDAwMmQsCi0JMHhkMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjUsCi0JMHgwMDAwMDAyZCwKLQkweGQyODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNiwKLQkweDAwMDAwMDJkLAotCTB4ZDMwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI3LAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjgsCi0JMHgwMDAwMDAyZCwKLQkweGQ0MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOSwKLQkweDAwMDAwMDJkLAotCTB4ZDQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJhLAotCTB4MDAwMDAwMmQsCi0JMHhkNTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmIsCi0JMHgwMDAwMDAyZCwKLQkweGQ1ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYywKLQkweDAwMDAwMDJkLAotCTB4ZDYwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJkLAotCTB4MDAwMDAwMmQsCi0JMHhkNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmUsCi0JMHgwMDAwMDAyZCwKLQkweGQ3MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZiwKLQkweDAwMDAwMDJkLAotCTB4ZDc4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMwLAotCTB4MDAwMDAwMmQsCi0JMHhkODAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzEsCi0JMHgwMDAwMDAyZCwKLQkweGQ4ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMiwKLQkweDAwMDAwMDJkLAotCTB4ZDkwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMzLAotCTB4MDAwMDAwMmQsCi0JMHhkOTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzQsCi0JMHgwMDAwMDAyZCwKLQkweGRhMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNSwKLQkweDAwMDAwMDJkLAotCTB4ZGE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM2LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzcsCi0JMHgwMDAwMDAyZCwKLQkweGRiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOCwKLQkweDAwMDAwMDdiLAotCTB4ZGQ2MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM5LAotCTB4MDAwMDAwMmQsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2EsCi0JMHgwMDAwMDAyZCwKLQkweGRiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNjLAotCTB4MDAwMDAwMmQsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjQsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwM2QwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDcwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDM3MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDRhYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjgwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2YsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMWU0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODgsCi0JMHgwMDAwMDAzZiwKLQkweGQ3ODAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OSwKLQkweDAwMDAwMDNmLAotCTB4ZDc5ODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhhLAotCTB4MDAwMDAwNTksCi0JMHhkNzgwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGUsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ZDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZiwKLQkweDAwMDAwMDE4LAotCTB4MTdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MiwKLQkweDAwMDAwMDJkLAotCTB4ZDdkODAwYjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkzLAotCTB4MDAwMDAwMTgsCi0JMHgxN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDRhYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDljLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDA5MTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMTk4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTksCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFiLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDBjODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjgsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDBmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2EsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDM3ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2QsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZSwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMDM3ODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNmLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMDQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDAsCi0JMHgwMDAwMDAzZiwKLQkweGQxODQwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNCwKLQkweDAwMDAwMDNmLAotCTB4ZDE3ZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ1LAotCTB4MDAwMDAwM2YsCi0JMHhkMTdmZmY4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGMsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRlLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGYsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUxLAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTUsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU3LAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTgsCi0JMHgwMDAwMDA5NCwKLQkweDAwMGIzMTNiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOSwKLQkweDAwMDAwMDk0LAotCTB4MDAwOTMxM2QsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVhLAotCTB4MDAwMDAwOTQsCi0JMHgwMDA3MzEzZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWIsCi0JMHgwMDAwMDA5NCwKLQkweDAwMDUzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYywKLQkweDAwMDAwMDA5LAotCTB4YzFlZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVkLAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwYjc4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDA3ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYzLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjQsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY2LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjcsCi0JMHgwMDAwMDA1OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY5LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmQsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZSwKLQkweDAwMDAwMDE4LAotCTB4MWQyZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZmLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDAsCi0JMHgwMDAwMDAxOCwKLQkweDFkMTMzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMSwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAyLAotCTB4MDAwMDAwMTgsCi0JMHgxZDFiM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA4LAotCTB4MDAwMDAwMDksCi0JMHhjNTJkM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDksCi0JMHgwMDAwMDAyOSwKLQkweGQyMDEwMDY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBlLAotCTB4MDAwMDAwMDksCi0JMHhjMjI5M2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGYsCi0JMHgwMDAwMDAyOSwKLQkweGQyMDAwMDY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTExLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE0LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTUsCi0JMHgwMDAwMDA1OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE3LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTgsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFhLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWIsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYywKLQkweDAwMDAwMDE4LAotCTB4MWQwZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMiwKLQkweDAwMDAwMDA5LAotCTB4YzUyZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIzLAotCTB4MDAwMDAwMmQsCi0JMHhkMTA4MDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjQsCi0JMHgwMDAwMDAwOCwKLQkweDIzYzMzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNSwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDNiMGEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI2LAotCTB4MDAwMDAwM2YsCi0JMHhkMzAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjcsCi0JMHgwMDAwMDAzZiwKLQkweGQzMDQwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOCwKLQkweDAwMDAwMDJmLAotCTB4ZDY4MTQwODUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI5LAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwNzgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYiwKLQkweDAwMDAwMDNmLAotCTB4ZDFmZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJjLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmQsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzYsCi0JMHgwMDAwMDA2MSwKLQkweGY2MDAwNDZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNywKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM4LAotCTB4MDAwMDAwMTgsCi0JMHgzZDZiMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzksCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAwNThiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYSwKLQkweDAwMDAwMDJmLAotCTB4ZDY4MTAxMDYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNiLAotCTB4MDAwMDAwMmQsCi0JMHhkMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2MsCi0JMHgwMDAwMDAyMSwKLQkweGQyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNlLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2YsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQxLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ0LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDUsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NiwKLQkweDAwMDAwMDQ5LAotCTB4ZDE3YTMzZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ3LAotCTB4MDAwMDAwMmYsCi0JMHhkMTcxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDgsCi0JMHgwMDAwMDAyZiwKLQkweGQxNjEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRkLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGUsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUwLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTEsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUzLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTQsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NSwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU2LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTcsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU5LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWEsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YiwKLQkweDAwMDAwMDJkLAotCTB4ZDE2YzA3ZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVjLAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVmLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjAsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYyLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NCwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY4LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjksCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZiLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmMsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZCwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZlLAotCTB4MDAwMDAwNDksCi0JMHhkMTc4MzNlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmYsCi0JMHgwMDAwMDAyZiwKLQkweGQxNzEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MCwKLQkweDAwMDAwMDJmLAotCTB4ZDE2MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcxLAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc0LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzUsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc3LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzgsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2IsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdkLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2UsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgwLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODEsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MiwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgzLAotCTB4MDAwMDAwMmQsCi0JMHhkMTY4MDdlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODQsCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThjLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGQsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZSwKLQkweDAwMDAwMDA4LAotCTB4MjI3OTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThmLAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMDYwYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTAsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODEwMTA2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkyLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTMsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDAwMTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NCwKLQkweDAwMDAwMDNmLAotCTB4ZDUwMDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk1LAotCTB4MDAwMDAwM2YsCi0JMHhkNTgwMDIwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTYsCi0JMHgwMDAwMDAzZiwKLQkweGQ1ODAwMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk4LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTksCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YSwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTliLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzRlOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzNTZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTllLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMCwKLQkweDAwMDAwMDQxLAotCTB4ZDUwMDM1NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWExLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZWIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMywKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDNiMGQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE0LAotCTB4MDAwMDAwNDksCi0JMHhkNjgwM2IwNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTUsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDM2NjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZiwKLQkweDAwMDAwMDYxLAotCTB4ZjYwMDA0NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIwLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZWIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMiwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDNiMGUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIzLAotCTB4MDAwMDAwNDksCi0JMHhkNjgwM2IwOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjQsCi0JMHgwMDAwMDA0OSwKLQkweGQ1ODAzYjA5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzVlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJjLAotCTB4MDAwMDAwNDEsCi0JMHhkNjAwMDdlYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmQsCi0JMHgwMDAwMDA0MSwKLQkweGQ1ODAwODZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJmLAotCTB4MDAwMDAwMTgsCi0JMHgzN2VkMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMSwKLQkweDAwMDAwMDNmLAotCTB4ZDUwMjAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMyLAotCTB4MDAwMDAwM2YsCi0JMHhkNTE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzMsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzYsCi0JMHgwMDAwMDAyMSwKLQkweGQ1MDAwMGVhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNywKLQkweDAwMDAwMDQ5LAotCTB4ZGQwZTNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM4LAotCTB4MDAwMDAwMzUsCi0JMHhkMTA0MDA3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzksCi0JMHgwMDAwMDAxOCwKLQkweDM3ZjUwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYSwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNiLAotCTB4MDAwMDAwM2YsCi0JMHhkNTA0MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2MsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2YsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMCwKLQkweDAwMDAwMDUxLAotCTB4ZjUwMDAwZWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMywKLQkweDAwMDAwMDQ5LAotCTB4ZGQwZTNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ0LAotCTB4MDAwMDAwMzUsCi0JMHhkMTA0ODA3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDUsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZjUwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNiwKLQkweDAwMDAwMDNmLAotCTB4Yzc3ZjdmMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ3LAotCTB4MDAwMDAwM2YsCi0JMHhjNzdmN2YwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODA0MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOSwKLQkweDAwMDAwMDNmLAotCTB4ZDEwM2MwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRhLAotCTB4MDAwMDAwMjUsCi0JMHhkZTIwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGIsCi0JMHgwMDAwMDA0OSwKLQkweGRlODAyNzRlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGUsCi0JMHgwMDAwMDAzNSwKLQkweGQxMDAwMGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZiwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUwLAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMWQzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNSwKLQkweDAwMDAwMDdkLAotCTB4Yzc2MGE3MTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU2LAotCTB4MDAwMDAwMzEsCi0JMHhjMDgwMDA0MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTcsCi0JMHgwMDAwMDAzMSwKLQkweGM0MDAwMDQ4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOCwKLQkweDAwMDAwMDMxLAotCTB4YzI4MDAwNDUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNCwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYSwKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBhMTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmYsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA0ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDUwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBhOTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDgsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA1ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDYwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjE2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMTgwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE2MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEzODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYywKLQkweDAwMDAwMDNmLAotCTB4ZGQwNTAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2UsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAxOTAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjViLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTgwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBiOTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjUsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBjMTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmUsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzk4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjczLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2EsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjE2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2QsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBjOTksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGQxYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFkMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwZDliLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg4LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFlMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwZTFjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMGYwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NiwKLQkweDAwMDAwMDdkLAotCTB4Yzc2MGE3MTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk3LAotCTB4MDAwMDAwMzEsCi0JMHhjMDgwMDA0MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTgsCi0JMHgwMDAwMDAzMSwKLQkweGM0MDAwMDQ4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OSwKLQkweDAwMDAwMDMxLAotCTB4YzI4MDAwNDUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlhLAotCTB4MDAwMDAwMzEsCi0JMHhkNjgwMDA2ZCwKLS8qIEJSRFhfSU5JVF9TRFJBTSAqLwotCTB4MDAwZjAwMGYsCi0JMHgwMDcwMDA2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDQwLAotCTB4MDAwMDAxMDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAwMDY0LAotCTB4MDAwMDAwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAyNDAwLAotCTB4MDAwMDI4MDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAyODgwLAotCTB4MDAwMDAxODAsCi0JMHgwMDAwMDAwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAxN2QsCi0JMHgwMDAwMDAwOCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDA5LAotCTB4MDAwMDUwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotLyogQlJEWF9JTklUICovCi0JMHgwMDBmMDAwZiwKLQkweDAwNzAwMWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNDAsCi0JMHgwMDAwMDEwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDAwNjQsCi0JMHgwMDAwMDA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDI0MDAsCi0JMHgwMDAwMjgwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDI4ODAsCi0JMHgwMDAwMDE4MCwKLQkweDAwMDAwMDAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDE3ZCwKLQkweDAwMDAwMDA4LAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDksCi0JMHgwMDAwNTAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0vKiBaRVJPX0lOSVQgKi8KLQkweDAwMGYwMDAyLAotCTB4MDA3MDAwMDAsCi0JMHgwMDAwMDAwMSwKLQkweDAwMDAwMDAwLAotLyogWkVST19JTklUICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzAwMDAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKLS8qIExvYWRpbmcgb3BlcmF0aW9uYWwgRmlybXdhcmUgKi8KLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDAsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMSwKLQkweDAwMDAwMDA0LAotCTB4MDFkMTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAyLAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDMsCi0JMHgwMDAwMDAwNCwKLQkweDAyODkzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNCwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAxMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA1LAotCTB4MDAwMDAwMDQsCi0JMHgwMjg1M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDYsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMTgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNywKLQkweDAwMDAwMDA0LAotCTB4MDNmZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA4LAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOCwKLQkweDAwMDAwMDQ5LAotCTB4YzAwMDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI5LAotCTB4MDAwMDAwNDksCi0JMHhjMDgwM2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmEsCi0JMHgwMDAwMDA0OSwKLQkweGMxMDAzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYiwKLQkweDAwMDAwMDQ5LAotCTB4YzE4MDNiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJjLAotCTB4MDAwMDAwMjksCi0JMHhkZjYwMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmQsCi0JMHgwMDAwMDA0OSwKLQkweGRmNDQzYjdkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZSwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjAsCi0JMHgwMDAwMDAzZiwKLQkweGRmMDAwMDAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MSwKLQkweDAwMDAwMDJkLAotCTB4ZGRlMDBmODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDI4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQwMTgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NCwKLQkweDAwMDAwMDdkLAotCTB4ZmQxNTAwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY1LAotCTB4MDAwMDAwN2EsCi0JMHgxMDIwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjYsCi0JMHgwMDAwMDA3YSwKLQkweDMwMjA3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NywKLQkweDAwMDAwMDIxLAotCTB4ZDAyNDAwNjAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjksCi0JMHgwMDAwMDAzZiwKLQkweGRkNDAwMjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWJiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZiLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxZmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZCwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZlLAotCTB4MDAwMDAwNzksCi0JMHhmZDIxMDEwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmYsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMmI0MDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MCwKLQkweDAwMDAwMDQwLAotCTB4M2QwMDMwMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcxLAotCTB4MDAwMDAwNDgsCi0JMHgxZDAwM2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjE3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDA1N2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc0LAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc3LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzgsCi0JMHgwMDAwMDAyMSwKLQkweGUzMzcxZjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OSwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdhLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2IsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YywKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2UsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZiwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgwLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODEsCi0JMHgwMDAwMDAzZiwKLQkweGRmMDAwMDgzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMCwKLQkweDAwMDAwMDJkLAotCTB4ZDAwODA4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGExLAotCTB4MDAwMDAwMDgsCi0JMHgyMWI1ZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDEwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMTgxMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE0LAotCTB4MDAwMDAwN2QsCi0JMHhmZDAxODA4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTUsCi0JMHgwMDAwMDA3OSwKLQkweGQwOTAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNiwKLQkweDAwMDAwMDQ5LAotCTB4ZDA1ODNiN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE3LAotCTB4MDAwMDAwNDksCi0JMHhkMjA0M2IwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTgsCi0JMHgwMDAwMDAzZCwKLQkweGRkNDAwMDAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOSwKLQkweDAwMDAwMDI0LAotCTB4MzIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFhLAotCTB4MDAwMDAwM2QsCi0JMHhkZDdmZjgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWIsCi0JMHgwMDAwMDAyOSwKLQkweGQwMjAwMTdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYywKLQkweDAwMDAwMDQ5LAotCTB4ZDBhNDNiMGUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFkLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDJmZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWUsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIwLAotCTB4MDAwMDAwMzgsCi0JMHgzMDAwMDFlMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjEsCi0JMHgwMDAwMDAzOSwKLQkweGQwMDAwMTYwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMiwKLQkweDAwMDAwMDc5LAotCTB4ZDFiMTNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIzLAotCTB4MDAwMDAwMmQsCi0JMHhkZGUwMGZlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjQsCi0JMHgwMDAwMDA0OSwKLQkweGQwODAzMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNSwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTdiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI2LAotCTB4MDAwMDAwNzksCi0JMHhkZDMxM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjcsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMzc0MDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOCwKLQkweDAwMDAwMDA4LAotCTB4MDE3ZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI5LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDAzODcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJjLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxMDQwOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzE3ZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDMwMDNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJmLAotCTB4MDAwMDAwNzksCi0JMHhkMzgxYmI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzAsCi0JMHgwMDAwMDA3ZiwKLQkweGQxMDFiMjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMSwKLQkweDAwMDAwMDQ4LAotCTB4NTEwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMyLAotCTB4MDAwMDAwM2QsCi0JMHhkZDQwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzMsCi0JMHgwMDAwMDAwOCwKLQkweDAxOTUzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNCwKLQkweDAwMDAwMDIxLAotCTB4ZDMwMDA2NjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM1LAotCTB4MDAwMDAwMjAsCi0JMHg1MzgwMDBlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwODAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWIzNjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM4LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYjNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzksCi0JMHgwMDAwMDA3NSwKLQkweGYxMDE4NjYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYSwKLQkweDAwMDAwMDc1LAotCTB4ZDIwMWIxNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNiLAotCTB4MDAwMDAwNzgsCi0JMHgxZDAwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2MsCi0JMHgwMDAwMDAyNSwKLQkweGRkMDAwMWUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZCwKLQkweDAwMDAwMDA4LAotCTB4MDFiMTMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNlLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2YsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQxLAotCTB4MDAwMDAwMjEsCi0JMHhlMzM3OWY2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDIsCi0JMHgwMDAwMDA0OSwKLQkweGQzMDAzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMywKLQkweDAwMDAwMDc5LAotCTB4ZDM4MWJiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ0LAotCTB4MDAwMDAwN2YsCi0JMHhkMTAxYjI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDUsCi0JMHgwMDAwMDA0OCwKLQkweDUxMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNiwKLQkweDAwMDAwMDc1LAotCTB4ZDIwMWIxNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ3LAotCTB4MDAwMDAwNzgsCi0JMHgxZDAwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWMwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRhLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDgwODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYywKLQkweDAwMDAwMDc4LAotCTB4M2QwMWMwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDE4ZTNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU5LAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYiwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWQsCi0JMHgwMDAwMDA0OSwKLQkweGQyMDQzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDI4NDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVmLAotCTB4MDAwMDAwMjUsCi0JMHhkZDAwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjAsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTM0MTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMSwKLQkweDAwMDAwMDk0LAotCTB4MDAwYjQzNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYyLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDhlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjMsCi0JMHgwMDAwMDA5NCwKLQkweDAwMWI0OTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNCwKLQkweDAwMDAwMDk0LAotCTB4MDAyZjQwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY1LAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjYsCi0JMHgwMDAwMDAxZCwKLQkweGZkMmI4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNywKLQkweDAwMDAwMDMwLAotCTB4MzE4MzgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY4LAotCTB4MDAwMDAwMzAsCi0JMHgxMTgyODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjksCi0JMHgwMDAwMDAxZCwKLQkweGZkMjU4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYSwKLQkweDAwMDAwMDMwLAotCTB4MzE4MzAwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZiLAotCTB4MDAwMDAwMzAsCi0JMHgxMTgyMDA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmMsCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZCwKLQkweDAwMDAwMDFkLAotCTB4ZmQwOTgwZTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZlLAotCTB4MDAwMDAwMzAsCi0JMHgzMTgzZDM2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmYsCi0JMHgwMDAwMDAzMCwKLQkweDExODNkMjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMCwKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAxLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDIsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMywKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA0LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDUsCi0JMHgwMDAwMDAyNSwKLQkweGQyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNiwKLQkweDAwMDAwMDE4LAotCTB4N2Q3N2ZkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA3LAotCTB4MDAwMDAwNDksCi0JMHhkZTIwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDgsCi0JMHgwMDAwMDA0OSwKLQkweGRlODAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOSwKLQkweDAwMDAwMDIxLAotCTB4ZDE4MDAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBhLAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzMWUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwZTNiNzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBkLAotCTB4MDAwMDAwNjEsCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEwLAotCTB4MDAwMDAwMzUsCi0JMHhkZDAwMDBmYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTEsCi0JMHgwMDAwMDAxOCwKLQkweDNiN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEzLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNSwKLQkweDAwMDAwMDIxLAotCTB4ZDE4MDAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE2LAotCTB4MDAwMDAwNjksCi0JMHhkZDA0M2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTcsCi0JMHgwMDAwMDA2MSwKLQkweGYxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE5LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFjLAotCTB4MDAwMDAwMjUsCi0JMHhkMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWQsCi0JMHgwMDAwMDA5OCwKLQkweDYwNWRiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQwLAotCTB4MDAwMDAwNDksCi0JMHhkNDA4M2IwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDEsCi0JMHgwMDAwMDAwOSwKLQkweGMyOGIzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MiwKLQkweDAwMDAwMDNmLAotCTB4ZDQwMDAzODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQzLAotCTB4MDAwMDAwMDksCi0JMHhjMjhiM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDQsCi0JMHgwMDAwMDA0OSwKLQkweGQ0MGUzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NSwKLQkweDAwMDAwMDNmLAotCTB4ZDY0MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ2LAotCTB4MDAwMDAwMmYsCi0JMHhkMjgxNDA4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDcsCi0JMHgwMDAwMDAyZCwKLQkweGQyODQwMzY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGQsCi0JMHgwMDAwMDAzMSwKLQkweGQzMDNkMjY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZGU0MDNiNjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTMsCi0JMHgwMDAwMDA0OSwKLQkweGQ1ODAzYjdlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NCwKLQkweDAwMDAwMDIxLAotCTB4ZGU0MDAwZTYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU1LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NywKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU4LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTksCi0JMHgwMDAwMDA0OSwKLQkweGQ1MDAzYjdlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTViLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVlLAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODBlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWYsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0MTY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MCwKLQkweDAwMDAwMDk0LAotCTB4MDAyNTQ0ZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYxLAotCTB4MDAwMDAwOTQsCi0JMHgwMDIzNDFlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjIsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTc0NTY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MywKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQyNjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY0LAotCTB4MDAwMDAwOTQsCi0JMHgwMDI3NDJlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjUsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmQ0MzY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NiwKLQkweDAwMDAwMDk0LAotCTB4MDAyZDQ0NjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY3LAotCTB4MDAwMDAwOTQsCi0JMHgwMDMzNDNlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjgsCi0JMHgwMDAwMDAwNCwKLQkweDAzOTczYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OSwKLQkweDAwMDAwMDBkLAotCTB4ZTMwZGMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZhLAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmIsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDIwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YywKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZkLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmUsCi0JMHgwMDAwMDAwZCwKLQkweGUzM2ZjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZiwKLQkweDAwMDAwMDMwLAotCTB4MzIwNDYwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcwLAotCTB4MDAwMDAwMzAsCi0JMHgxMjA0NDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODI4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MiwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTczLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzQsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NSwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc2LAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzcsCi0JMHgwMDAwMDAwZCwKLQkweGUzNjNjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OCwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzIwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc5LAotCTB4MDAwMDAwMzAsCi0JMHgxMjAzMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2EsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODMwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YiwKLQkweDAwMDAwMDQ5LAotCTB4ZDI4MDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdjLAotCTB4MDAwMDAwMGQsCi0JMHhlMzBkYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2QsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDM4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZSwKLQkweDAwMDAwMDMwLAotCTB4MTIwMjgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdmLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgxMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2MDIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MSwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgyLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODMsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NCwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg1LAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg4LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODksCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YSwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThiLAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGMsCi0JMHgwMDAwMDA5OCwKLQkweDgwNjkzYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZCwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThlLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkxLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk0LAotCTB4MDAwMDAwNDksCi0JMHhkM2MwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTUsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NiwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWIsCi0JMHgwMDAwMDA0OSwKLQkweGQzYTAzYjM4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YywKLQkweDAwMDAwMDE5LAotCTB4ZGQ2MWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWUsCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZiwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEwLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMiwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMDE4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEzLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTQsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNSwKLQkweDAwMDAwMDk4LAotCTB4ODAzNzNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE2LAotCTB4MDAwMDAwNTEsCi0JMHhmMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWQsCi0JMHgwMDAwMDA0OSwKLQkweGQzODAzYjM4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZSwKLQkweDAwMDAwMDE5LAotCTB4ZGQ2ZmJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFmLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjAsCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMSwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIyLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNCwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI1LAotCTB4MDAwMDAwOTgsCi0JMHg4MDE3M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjYsCi0JMHgwMDAwMDA0OSwKLQkweGRlNDAzYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZCwKLQkweDAwMDAwMDIxLAotCTB4ZDIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJlLAotCTB4MDAwMDAwMTksCi0JMHhkM2VmN2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmYsCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNiwKLQkweDAwMDAwMDJkLAotCTB4ZGQ1NDAxODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM3LAotCTB4MDAwMDAwNzksCi0JMHhmM2UwODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzgsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzNjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2IsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYywKLQkweDAwMDAwMDU5LAotCTB4ZmQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMWMwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2UsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDEsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQzLAotCTB4MDAwMDAwMzEsCi0JMHhkNDgzODg2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNSwKLQkweDAwMDAwMDc5LAotCTB4ZjE4MTkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ2LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDcsCi0JMHgwMDAwMDA5OCwKLQkweDgwNTNiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOCwKLQkweDAwMDAwMDE5LAotCTB4ZGQ3ZjdiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ5LAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmUsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAwMjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDE4NDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAwLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAzLAotCTB4MDAwMDAwNjUsCi0JMHhmMTgwMDI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDQsCi0JMHgwMDAwMDAxOCwKLQkweDdkN2QzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2EwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2EzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMCwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0vKiBGSU5JU0ggSU5JVCBEZXNjcmlwdG9yICovCi0JMHgwMDBmMDAwMiwKLQkweDgwNzE4N2M0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IGRhYmRmNTkuLmY3ZWZjZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgogICoKICAqIEZpcm13YXJlIGlzOgogICoJRGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkIHNvdXJjZSBjb2RlLApAQCAtNjgsOCArNjgsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45NyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWNlbWJlciAxMCwgMjAwOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjk4IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDI1LCAyMDA5IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTg2MCw3ICs4NjAsNyBAQAogCiBzdGF0aWMgaW50IHRnM19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJwLCBpbnQgbWlpX2lkLCBpbnQgcmVnKQogewotCXN0cnVjdCB0ZzMgKnRwID0gKHN0cnVjdCB0ZzMgKilicC0+cHJpdjsKKwlzdHJ1Y3QgdGczICp0cCA9IGJwLT5wcml2OwogCXUzMiB2YWw7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX1BBVVNFRCkKQEAgLTg3NCw3ICs4NzQsNyBAQAogCiBzdGF0aWMgaW50IHRnM19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpicCwgaW50IG1paV9pZCwgaW50IHJlZywgdTE2IHZhbCkKIHsKLQlzdHJ1Y3QgdGczICp0cCA9IChzdHJ1Y3QgdGczICopYnAtPnByaXY7CisJc3RydWN0IHRnMyAqdHAgPSBicC0+cHJpdjsKIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfUEFVU0VEKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTIwNTAsOCArMjA1MCw2IEBACiAKIHN0YXRpYyB2b2lkIHRnM193cml0ZV9zaWdfcG9zdF9yZXNldChzdHJ1Y3QgdGczICosIGludCk7CiBzdGF0aWMgaW50IHRnM19oYWx0X2NwdShzdHJ1Y3QgdGczICosIHUzMik7Ci1zdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKik7Ci1zdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKik7CiAKIHN0YXRpYyB2b2lkIHRnM19wb3dlcl9kb3duX3BoeShzdHJ1Y3QgdGczICp0cCwgYm9vbCBkb19sb3dfcG93ZXIpCiB7CkBAIC0yMTA4LDYgKzIxMDYsMTk0IEBACiB9CiAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKKwkJaW50IGk7CisKKwkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKSB7CisJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfU0VUMSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgODAwMDsgaSsrKSB7CisJCQkJaWYgKHRyMzIoTlZSQU1fU1dBUkIpICYgU1dBUkJfR05UMSkKKwkJCQkJYnJlYWs7CisJCQkJdWRlbGF5KDIwKTsKKwkJCX0KKwkJCWlmIChpID09IDgwMDApIHsKKwkJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKwkJdHAtPm52cmFtX2xvY2tfY250Kys7CisJfQorCXJldHVybiAwOworfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7CisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPiAwKQorCQkJdHAtPm52cmFtX2xvY2tfY250LS07CisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkKKwkJCXR3MzJfZihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7CisJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKKworCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKKwkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOworCisJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHN0cnVjdCB0ZzMgKnRwLAorCQkJCQl1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKK3sKKwl1MzIgdG1wOworCWludCBpOworCisJaWYgKG9mZnNldCA+IEVFUFJPTV9BRERSX0FERFJfTUFTSyB8fCAob2Zmc2V0ICUgNCkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUikgJiB+KEVFUFJPTV9BRERSX0FERFJfTUFTSyB8CisJCQkJCUVFUFJPTV9BRERSX0RFVklEX01BU0sgfAorCQkJCQlFRVBST01fQUREUl9SRUFEKTsKKwl0dzMyKEdSQ19FRVBST01fQUREUiwKKwkgICAgIHRtcCB8CisJICAgICAoMCA8PCBFRVBST01fQUREUl9ERVZJRF9TSElGVCkgfAorCSAgICAgKChvZmZzZXQgPDwgRUVQUk9NX0FERFJfQUREUl9TSElGVCkgJgorCSAgICAgIEVFUFJPTV9BRERSX0FERFJfTUFTSykgfAorCSAgICAgRUVQUk9NX0FERFJfUkVBRCB8IEVFUFJPTV9BRERSX1NUQVJUKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpOworCisJCWlmICh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCWlmICghKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCSp2YWwgPSB0cjMyKEdSQ19FRVBST01fREFUQSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTlZSQU1fQ01EX1RJTUVPVVQgMTAwMDAKKworc3RhdGljIGludCB0ZzNfbnZyYW1fZXhlY19jbWQoc3RydWN0IHRnMyAqdHAsIHUzMiBudnJhbV9jbWQpCit7CisJaW50IGk7CisKKwl0dzMyKE5WUkFNX0NNRCwgbnZyYW1fY21kKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlZSQU1fQ01EX1RJTUVPVVQ7IGkrKykgeworCQl1ZGVsYXkoMTApOworCQlpZiAodHIzMihOVlJBTV9DTUQpICYgTlZSQU1fQ01EX0RPTkUpIHsKKwkJCXVkZWxheSgxMCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IE5WUkFNX0NNRF9USU1FT1VUKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgdGczX252cmFtX3BoeXNfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCisJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgorCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgorCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKKworCQlhZGRyID0gKChhZGRyIC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PAorCQkJQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKworCQkgICAgICAgKGFkZHIgJSB0cC0+bnZyYW1fcGFnZXNpemUpOworCisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB1MzIgdGczX252cmFtX2xvZ2ljYWxfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCisJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgorCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgorCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKKworCQlhZGRyID0gKChhZGRyID4+IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICoKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSkgKworCQkgICAgICAgKGFkZHIgJiAoKDEgPDwgQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgLSAxKSk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyogTk9URTogRGF0YSByZWFkIGluIGZyb20gTlZSQU0gaXMgYnl0ZXN3YXBwZWQgYWNjb3JkaW5nIHRvCisgKiB0aGUgYnl0ZXN3YXBwaW5nIHNldHRpbmdzIGZvciBhbGwgb3RoZXIgcmVnaXN0ZXIgYWNjZXNzZXMuCisgKiB0ZzMgZGV2aWNlcyBhcmUgQkUgZGV2aWNlcywgc28gb24gYSBCRSBtYWNoaW5lLCB0aGUgZGF0YQorICogcmV0dXJuZWQgd2lsbCBiZSBleGFjdGx5IGFzIGl0IGlzIHNlZW4gaW4gTlZSQU0uICBPbiBhIExFCisgKiBtYWNoaW5lLCB0aGUgMzItYml0IHZhbHVlIHdpbGwgYmUgYnl0ZXN3YXBwZWQuCisgKi8KK3N0YXRpYyBpbnQgdGczX252cmFtX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQoreworCWludCByZXQ7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQorCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7CisKKwlvZmZzZXQgPSB0ZzNfbnZyYW1fcGh5c19hZGRyKHRwLCBvZmZzZXQpOworCisJaWYgKG9mZnNldCA+IE5WUkFNX0FERFJfTVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHRnM19udnJhbV9sb2NrKHRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOworCisJdHczMihOVlJBTV9BRERSLCBvZmZzZXQpOworCXJldCA9IHRnM19udnJhbV9leGVjX2NtZCh0cCwgTlZSQU1fQ01EX1JEIHwgTlZSQU1fQ01EX0dPIHwKKwkJTlZSQU1fQ01EX0ZJUlNUIHwgTlZSQU1fQ01EX0xBU1QgfCBOVlJBTV9DTURfRE9ORSk7CisKKwlpZiAocmV0ID09IDApCisJCSp2YWwgPSB0cjMyKE5WUkFNX1JEREFUQSk7CisKKwl0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3ModHApOworCisJdGczX252cmFtX3VubG9jayh0cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBFbnN1cmVzIE5WUkFNIGRhdGEgaXMgaW4gYnl0ZXN0cmVhbSBmb3JtYXQuICovCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX2JlMzIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIF9fYmUzMiAqdmFsKQoreworCXUzMiB2OworCWludCByZXMgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdik7CisJaWYgKCFyZXMpCisJCSp2YWwgPSBjcHVfdG9fYmUzMih2KTsKKwlyZXR1cm4gcmVzOworfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgX190ZzNfc2V0X21hY19hZGRyKHN0cnVjdCB0ZzMgKnRwLCBpbnQgc2tpcF9tYWNfMSkKIHsKIAl1MzIgYWRkcl9oaWdoLCBhZGRyX2xvdzsKQEAgLTQzMzksNiArNDUyNSwxMyBAQAogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHRwLT5kZXYpOworCisJCWlmIChsZW4gPiAodHAtPmRldi0+bXR1ICsgRVRIX0hMRU4pICYmCisJCSAgICBza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QXzgwMjFRKSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byBuZXh0X3BrdDsKKwkJfQorCiAjaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAkJaWYgKHRwLT52bGdycCAhPSBOVUxMICYmCiAJCSAgICBkZXNjLT50eXBlX2ZsYWdzICYgUlhEX0ZMQUdfVkxBTikgewpAQCAtNDQ2MSw3ICs0NjU0LDcgQEAKIAkJCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CiAKIAkJaWYgKGxpa2VseSghdGczX2hhc193b3JrKHRwKSkpIHsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXRnM19yZXN0YXJ0X2ludHModHApOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ0NzEsNyArNDY2NCw3IEBACiAKIHR4X3JlY292ZXJ5OgogCS8qIHdvcmtfZG9uZSBpcyBndWFyYW50ZWVkIHRvIGJlIGxlc3MgdGhhbiBidWRnZXQuICovCi0JbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlzY2hlZHVsZV93b3JrKCZ0cC0+cmVzZXRfdGFzayk7CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KQEAgLTQ1MjAsNyArNDcxMyw3IEBACiAJcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKIAogCWlmIChsaWtlbHkoIXRnM19pcnFfc3luYyh0cCkpKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NTQ1LDcgKzQ3MzgsNyBAQAogCSAqLwogCXR3MzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOwogCWlmIChsaWtlbHkoIXRnM19pcnFfc3luYyh0cCkpKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKIH0KQEAgLTQ1ODcsNyArNDc4MCw3IEBACiAJc2Jsay0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKIAlpZiAobGlrZWx5KHRnM19oYXNfd29yayh0cCkpKSB7CiAJCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewogCQkvKiBObyB3b3JrLCBzaGFyZWQgaW50ZXJydXB0IHBlcmhhcHM/ICByZS1lbmFibGUKIAkJICogaW50ZXJydXB0cywgYW5kIGZsdXNoIHRoYXQgUENJIHdyaXRlCkBAIC00NjMzLDcgKzQ4MjYsNyBAQAogCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMHgwMDAwMDAwMSk7CiAJaWYgKHRnM19pcnFfc3luYyh0cCkpCiAJCWdvdG8gb3V0OwotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKIAkJcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKIAkJLyogVXBkYXRlIGxhc3RfdGFnIHRvIG1hcmsgdGhhdCB0aGlzIHN0YXR1cyBoYXMgYmVlbgogCQkgKiBzZWVuLiBCZWNhdXNlIGludGVycnVwdCBtYXkgYmUgc2hhcmVkLCB3ZSBtYXkgYmUKQEAgLTQ2NDEsNyArNDgzNCw3IEBACiAJCSAqIGlmIHRnM19wb2xsKCkgaXMgbm90IHNjaGVkdWxlZC4KIAkJICovCiAJCXRwLT5sYXN0X3RhZyA9IHNibGstPnN0YXR1c190YWc7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfQogb3V0OgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwpAQCAtNTYzMSw2MiArNTgyNCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgewotCQlpbnQgaTsKLQotCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApIHsKLQkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9TRVQxKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA4MDAwOyBpKyspIHsKLQkJCQlpZiAodHIzMihOVlJBTV9TV0FSQikgJiBTV0FSQl9HTlQxKQotCQkJCQlicmVhazsKLQkJCQl1ZGVsYXkoMjApOwotCQkJfQotCQkJaWYgKGkgPT0gODAwMCkgewotCQkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfQotCQl0cC0+bnZyYW1fbG9ja19jbnQrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA+IDApCi0JCQl0cC0+bnZyYW1fbG9ja19jbnQtLTsKLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKQotCQkJdHczMl9mKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7Ci0JfQotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKLQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyB8IEFDQ0VTU19FTkFCTEUpOwotCX0KLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgewotCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7Ci0KLQkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgdGczX2FwZV9zZW5kX2V2ZW50KHN0cnVjdCB0ZzMgKnRwLCB1MzIgZXZlbnQpCiB7CiAJaW50IGk7CkBAIC02ODI0LDcgKzY5NjEsOCBAQAogCV9fdGczX3NldF9tYWNfYWRkcih0cCwgMCk7CiAKIAkvKiBNVFUgKyBldGhlcm5ldCBoZWFkZXIgKyBGQ1MgKyBvcHRpb25hbCBWTEFOIHRhZyAqLwotCXR3MzIoTUFDX1JYX01UVV9TSVpFLCB0cC0+ZGV2LT5tdHUgKyBFVEhfSExFTiArIDgpOworCXR3MzIoTUFDX1JYX01UVV9TSVpFLAorCSAgICAgdHAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTiArIFZMQU5fSExFTik7CiAKIAkvKiBUaGUgc2xvdCB0aW1lIGlzIGNoYW5nZWQgYnkgdGczX3NldHVwX3BoeSBpZiB3ZQogCSAqIHJ1biBhdCBnaWdhYml0IHdpdGggaGFsZiBkdXBsZXguCkBAIC04Mzg2LDE3ICs4NTI0LDEzIEBACiAJcmV0dXJuIHRwLT5udnJhbV9zaXplOwogfQogCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCk7Ci1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX2xlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2xlMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3N3YWIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKTsKLQogc3RhdGljIGludCB0ZzNfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAJdTggICpwZDsKIAl1MzIgaSwgb2Zmc2V0LCBsZW4sIGJfb2Zmc2V0LCBiX2NvdW50OwotCV9fbGUzMiB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC04NDE1LDcgKzg1NDksNyBAQAogCQkJLyogaS5lLiBvZmZzZXQ9MSBsZW49MiAqLwogCQkJYl9jb3VudCA9IGxlbjsKIAkJfQotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCW1lbWNweShkYXRhLCAoKGNoYXIqKSZ2YWwpICsgYl9vZmZzZXQsIGJfY291bnQpOwpAQCAtODQyNyw3ICs4NTYxLDcgQEAKIAkvKiByZWFkIGJ5dGVzIHVwdG8gdGhlIGxhc3QgNCBieXRlIGJvdW5kYXJ5ICovCiAJcGQgPSAmZGF0YVtlZXByb20tPmxlbl07CiAJZm9yIChpID0gMDsgaSA8IChsZW4gLSAobGVuICYgMykpOyBpICs9IDQpIHsKLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCArIGksICZ2YWwpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQgKyBpLCAmdmFsKTsKIAkJaWYgKHJldCkgewogCQkJZWVwcm9tLT5sZW4gKz0gaTsKIAkJCXJldHVybiByZXQ7CkBAIC04NDQxLDcgKzg1NzUsNyBAQAogCQlwZCA9ICZkYXRhW2VlcHJvbS0+bGVuXTsKIAkJYl9jb3VudCA9IGxlbiAmIDM7CiAJCWJfb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuIC0gYl9jb3VudDsKLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIGJfb2Zmc2V0LCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgYl9vZmZzZXQsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbWVtY3B5KHBkLCAmdmFsLCBiX2NvdW50KTsKQEAgLTg0NTgsNyArODU5Miw3IEBACiAJaW50IHJldDsKIAl1MzIgb2Zmc2V0LCBsZW4sIGJfb2Zmc2V0LCBvZGRfbGVuOwogCXU4ICpidWY7Ci0JX19sZTMyIHN0YXJ0LCBlbmQ7CisJX19iZTMyIHN0YXJ0LCBlbmQ7CiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtODQ3MSw3ICs4NjA1LDcgQEAKIAogCWlmICgoYl9vZmZzZXQgPSAob2Zmc2V0ICYgMykpKSB7CiAJCS8qIGFkanVzdG1lbnRzIHRvIHN0YXJ0IG9uIHJlcXVpcmVkIDQgYnl0ZSBib3VuZGFyeSAqLwotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmc3RhcnQpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZzdGFydCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlsZW4gKz0gYl9vZmZzZXQ7CkBAIC04NDg1LDcgKzg2MTksNyBAQAogCQkvKiBhZGp1c3RtZW50cyB0byBlbmQgb24gcmVxdWlyZWQgNCBieXRlIGJvdW5kYXJ5ICovCiAJCW9kZF9sZW4gPSAxOwogCQlsZW4gPSAobGVuICsgMykgJiB+MzsKLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCtsZW4tNCwgJmVuZCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCtsZW4tNCwgJmVuZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTg1NDQsNyArODY3OCw3IEBACiAJCWNtZC0+ZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXg7CiAJfQogCWNtZC0+cGh5X2FkZHJlc3MgPSBQSFlfQUREUjsKLQljbWQtPnRyYW5zY2VpdmVyID0gMDsKKwljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAljbWQtPmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKIAljbWQtPm1heHR4cGt0ID0gMDsKIAljbWQtPm1heHJ4cGt0ID0gMDsKQEAgLTg1NjEsMjYgKzg2OTUsNTggQEAKIAkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQodHAtPm1kaW9fYnVzLT5waHlfbWFwW1BIWV9BRERSXSwgY21kKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSB7Ci0JCS8qIFRoZXNlIGFyZSB0aGUgb25seSB2YWxpZCBhZHZlcnRpc2VtZW50IGJpdHMgYWxsb3dlZC4gICovCi0JCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKLQkJICAgIChjbWQtPmFkdmVydGlzaW5nICYgfihBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKLQkJCQkJICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICBBRFZFUlRJU0VEX0F1dG9uZWcgfAotCQkJCQkgIEFEVkVSVElTRURfRklCUkUpKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBGaWJlciBjYW4gb25seSBkbyBTUEVFRF8xMDAwLiAgKi8KLQkJZWxzZSBpZiAoKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkgJiYKLQkJCSAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCS8qIENvcHBlciBjYW5ub3QgZm9yY2UgU1BFRURfMTAwMC4gICovCi0JfSBlbHNlIGlmICgoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKSAmJgotCQkgICAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSkKKwlpZiAoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFICYmCisJICAgIGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpCiAJCXJldHVybiAtRUlOVkFMOwotCWVsc2UgaWYgKChjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApICYmCi0JCSAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkKKworCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFICYmCisJICAgIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMICYmCisJICAgIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJdTMyIG1hc2sgPSBBRFZFUlRJU0VEX0F1dG9uZWcgfAorCQkJICAgQURWRVJUSVNFRF9QYXVzZSB8CisJCQkgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisKKwkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpCisJCQltYXNrIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisKKwkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSkKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF9UUDsKKwkJZWxzZQorCQkJbWFzayB8PSBBRFZFUlRJU0VEX0ZJQlJFOworCisJCWlmIChjbWQtPmFkdmVydGlzaW5nICYgfm1hc2spCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltYXNrICY9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKKworCQljbWQtPmFkdmVydGlzaW5nICY9IG1hc2s7CisJfSBlbHNlIHsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgeworCQkJaWYgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCisJCQkgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJdHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSBjbWQtPmF1dG9uZWc7CkBAIC05MDI1LDEwICs5MTkxLDEwIEBACiBzdGF0aWMgaW50IHRnM190ZXN0X252cmFtKHN0cnVjdCB0ZzMgKnRwKQogewogCXUzMiBjc3VtLCBtYWdpYzsKLQlfX2xlMzIgKmJ1ZjsKKwlfX2JlMzIgKmJ1ZjsKIAlpbnQgaSwgaiwgaywgZXJyID0gMCwgc2l6ZTsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmbWFnaWMpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmbWFnaWMpICE9IDApCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpCkBAIC05MDYyLDE0ICs5MjI4LDE1IEBACiAKIAllcnIgPSAtRUlPOwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc2l6ZTsgaSArPSA0LCBqKyspIHsKLQkJaWYgKChlcnIgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgaSwgJmJ1ZltqXSkpICE9IDApCisJCWVyciA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIGksICZidWZbal0pOworCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQogCWlmIChpIDwgc2l6ZSkKIAkJZ290byBvdXQ7CiAKIAkvKiBTZWxmYm9vdCBmb3JtYXQgKi8KLQltYWdpYyA9IHN3YWIzMihsZTMyX3RvX2NwdShidWZbMF0pKTsKKwltYWdpYyA9IGJlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJaWYgKChtYWdpYyAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PQogCSAgICBURzNfRUVQUk9NX01BR0lDX0ZXKSB7CiAJCXU4ICpidWY4ID0gKHU4ICopIGJ1ZiwgY3N1bTggPSAwOwpAQCAtOTA5OCw3ICs5MjY1LDcgQEAKIAlpZiAoKG1hZ2ljICYgVEczX0VFUFJPTV9NQUdJQ19IV19NU0spID09CiAJICAgIFRHM19FRVBST01fTUFHSUNfSFcpIHsKIAkJdTggZGF0YVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOwotCSAgICAgICAJdTggcGFyaXR5W05WUkFNX1NFTEZCT09UX0RBVEFfU0laRV07CisJCXU4IHBhcml0eVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOwogCQl1OCAqYnVmOCA9ICh1OCAqKSBidWY7CiAKIAkJLyogU2VwYXJhdGUgdGhlIHBhcml0eSBiaXRzIGFuZCB0aGUgZGF0YSBieXRlcy4gICovCkBAIC05MTQxLDEzICs5MzA4LDEzIEBACiAKIAkvKiBCb290c3RyYXAgY2hlY2tzdW0gYXQgb2Zmc2V0IDB4MTAgKi8KIAljc3VtID0gY2FsY19jcmMoKHVuc2lnbmVkIGNoYXIgKikgYnVmLCAweDEwKTsKLQlpZihjc3VtICE9IGxlMzJfdG9fY3B1KGJ1ZlsweDEwLzRdKSkKKwlpZiAoY3N1bSAhPSBiZTMyX3RvX2NwdShidWZbMHgxMC80XSkpCiAJCWdvdG8gb3V0OwogCiAJLyogTWFudWZhY3R1cmluZyBibG9jayBzdGFydHMgYXQgb2Zmc2V0IDB4NzQsIGNoZWNrc3VtIGF0IDB4ZmMgKi8KIAljc3VtID0gY2FsY19jcmMoKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZlsweDc0LzRdLCAweDg4KTsKLQlpZiAoY3N1bSAhPSBsZTMyX3RvX2NwdShidWZbMHhmYy80XSkpCi0JCSBnb3RvIG91dDsKKwlpZiAoY3N1bSAhPSBiZTMyX3RvX2NwdShidWZbMHhmYy80XSkpCisJCWdvdG8gb3V0OwogCiAJZXJyID0gMDsKIApAQCAtOTg1Niw4ICsxMDAyMywxMiBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdG9wKHRwKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQl0cC0+dmxncnAgPSBncnA7CisJCXJldHVybjsKKwl9CisKKwl0ZzNfbmV0aWZfc3RvcCh0cCk7CiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIApAQCAtOTg2Niw4ICsxMDAzNyw3IEBACiAJLyogVXBkYXRlIFJYX01PREVfS0VFUF9WTEFOX1RBRyBiaXQgaW4gUlhfTU9ERSByZWdpc3Rlci4gKi8KIAlfX3RnM19zZXRfcnhfbW9kZShkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJdGczX25ldGlmX3N0YXJ0KHRwKTsKKwl0ZzNfbmV0aWZfc3RhcnQodHApOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIH0KQEAgLTk5NzQsNyArMTAxNDQsNyBAQAogCiAJdHAtPm52cmFtX3NpemUgPSBFRVBST01fQ0hJUF9TSVpFOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZtYWdpYykgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZtYWdpYykgIT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKChtYWdpYyAhPSBURzNfRUVQUk9NX01BR0lDKSAmJgpAQCAtOTk5MCw3ICsxMDE2MCw3IEBACiAJY3Vyc2l6ZSA9IDB4MTA7CiAKIAl3aGlsZSAoY3Vyc2l6ZSA8IHRwLT5udnJhbV9zaXplKSB7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBjdXJzaXplLCAmdmFsKSAhPSAwKQorCQlpZiAodGczX252cmFtX3JlYWQodHAsIGN1cnNpemUsICZ2YWwpICE9IDApCiAJCQlyZXR1cm47CiAKIAkJaWYgKHZhbCA9PSBtYWdpYykKQEAgLTEwMDA2LDcgKzEwMTc2LDcgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZ2YWwpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmdmFsKSAhPSAwKQogCQlyZXR1cm47CiAKIAkvKiBTZWxmYm9vdCBmb3JtYXQgKi8KQEAgLTEwMDE3LDcgKzEwMTg3LDE4IEBACiAKIAlpZiAodGczX252cmFtX3JlYWQodHAsIDB4ZjAsICZ2YWwpID09IDApIHsKIAkJaWYgKHZhbCAhPSAwKSB7Ci0JCQl0cC0+bnZyYW1fc2l6ZSA9ICh2YWwgPj4gMTYpICogMTAyNDsKKwkJCS8qIFRoaXMgaXMgY29uZnVzaW5nLiAgV2Ugd2FudCB0byBvcGVyYXRlIG9uIHRoZQorCQkJICogMTYtYml0IHZhbHVlIGF0IG9mZnNldCAweGYyLiAgVGhlIHRnM19udnJhbV9yZWFkKCkKKwkJCSAqIGNhbGwgd2lsbCByZWFkIGZyb20gTlZSQU0gYW5kIGJ5dGVzd2FwIHRoZSBkYXRhCisJCQkgKiBhY2NvcmRpbmcgdG8gdGhlIGJ5dGVzd2FwcGluZyBzZXR0aW5ncyBmb3IgYWxsCisJCQkgKiBvdGhlciByZWdpc3RlciBhY2Nlc3Nlcy4gIFRoaXMgZW5zdXJlcyB0aGUgZGF0YSB3ZQorCQkJICogd2FudCB3aWxsIGFsd2F5cyByZXNpZGUgaW4gdGhlIGxvd2VyIDE2LWJpdHMuCisJCQkgKiBIb3dldmVyLCB0aGUgZGF0YSBpbiBOVlJBTSBpcyBpbiBMRSBmb3JtYXQsIHdoaWNoCisJCQkgKiBtZWFucyB0aGUgZGF0YSBmcm9tIHRoZSBOVlJBTSByZWFkIHdpbGwgYWx3YXlzIGJlCisJCQkgKiBvcHBvc2l0ZSB0aGUgZW5kaWFubmVzcyBvZiB0aGUgQ1BVLiAgVGhlIDE2LWJpdAorCQkJICogYnl0ZXN3YXAgdGhlbiBicmluZ3MgdGhlIGRhdGEgdG8gQ1BVIGVuZGlhbm5lc3MuCisJCQkgKi8KKwkJCXRwLT5udnJhbV9zaXplID0gc3dhYjE2KCh1MTYpKHZhbCAmIDB4MDAwMGZmZmYpKSAqIDEwMjQ7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xMDQ2OCwxNDEgKzEwNjQ5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHN0cnVjdCB0ZzMgKnRwLAotCQkJCQl1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQl1MzIgdG1wOwotCWludCBpOwotCi0JaWYgKG9mZnNldCA+IEVFUFJPTV9BRERSX0FERFJfTUFTSyB8fAotCSAgICAob2Zmc2V0ICUgNCkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUikgJiB+KEVFUFJPTV9BRERSX0FERFJfTUFTSyB8Ci0JCQkJCUVFUFJPTV9BRERSX0RFVklEX01BU0sgfAotCQkJCQlFRVBST01fQUREUl9SRUFEKTsKLQl0dzMyKEdSQ19FRVBST01fQUREUiwKLQkgICAgIHRtcCB8Ci0JICAgICAoMCA8PCBFRVBST01fQUREUl9ERVZJRF9TSElGVCkgfAotCSAgICAgKChvZmZzZXQgPDwgRUVQUk9NX0FERFJfQUREUl9TSElGVCkgJgotCSAgICAgIEVFUFJPTV9BRERSX0FERFJfTUFTSykgfAotCSAgICAgRUVQUk9NX0FERFJfUkVBRCB8IEVFUFJPTV9BRERSX1NUQVJUKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpOwotCi0JCWlmICh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfQotCWlmICghKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCSp2YWwgPSB0cjMyKEdSQ19FRVBST01fREFUQSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgTlZSQU1fQ01EX1RJTUVPVVQgMTAwMDAKLQotc3RhdGljIGludCB0ZzNfbnZyYW1fZXhlY19jbWQoc3RydWN0IHRnMyAqdHAsIHUzMiBudnJhbV9jbWQpCi17Ci0JaW50IGk7Ci0KLQl0dzMyKE5WUkFNX0NNRCwgbnZyYW1fY21kKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlZSQU1fQ01EX1RJTUVPVVQ7IGkrKykgewotCQl1ZGVsYXkoMTApOwotCQlpZiAodHIzMihOVlJBTV9DTUQpICYgTlZSQU1fQ01EX0RPTkUpIHsKLQkJCXVkZWxheSgxMCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSBOVlJBTV9DTURfVElNRU9VVCkgewotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiB0ZzNfbnZyYW1fcGh5c19hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCi0JICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQotCi0JCWFkZHIgPSAoKGFkZHIgLyB0cC0+bnZyYW1fcGFnZXNpemUpIDw8Ci0JCQlBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSArCi0JCSAgICAgICAoYWRkciAlIHRwLT5udnJhbV9wYWdlc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIHUzMiB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCi0JICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQotCi0JCWFkZHIgPSAoKGFkZHIgPj4gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKgotCQkJdHAtPm52cmFtX3BhZ2VzaXplKSArCi0JCSAgICAgICAoYWRkciAmICgoMSA8PCBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAtIDEpKTsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkKLQkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOwotCi0Jb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKLQotCWlmIChvZmZzZXQgPiBOVlJBTV9BRERSX01TSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSB0ZzNfbnZyYW1fbG9jayh0cCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKLQotCXR3MzIoTlZSQU1fQUREUiwgb2Zmc2V0KTsKLQlyZXQgPSB0ZzNfbnZyYW1fZXhlY19jbWQodHAsIE5WUkFNX0NNRF9SRCB8IE5WUkFNX0NNRF9HTyB8Ci0JCU5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOwotCi0JaWYgKHJldCA9PSAwKQotCQkqdmFsID0gc3dhYjMyKHRyMzIoTlZSQU1fUkREQVRBKSk7Ci0KLQl0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3ModHApOwotCi0JdGczX252cmFtX3VubG9jayh0cCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX2xlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2xlMzIgKnZhbCkKLXsKLQl1MzIgdjsKLQlpbnQgcmVzID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnYpOwotCWlmICghcmVzKQotCQkqdmFsID0gY3B1X3RvX2xlMzIodik7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9zd2FiKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQlpbnQgZXJyOwotCXUzMiB0bXA7Ci0KLQllcnIgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdG1wKTsKLQkqdmFsID0gc3dhYjMyKHRtcCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCB0ZzNfbnZyYW1fd3JpdGVfYmxvY2tfdXNpbmdfZWVwcm9tKHN0cnVjdCB0ZzMgKnRwLAogCQkJCSAgICB1MzIgb2Zmc2V0LCB1MzIgbGVuLCB1OCAqYnVmKQogewpAQCAtMTA2MTEsMTMgKzEwNjU3LDEzIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKIAkJdTMyIGFkZHI7Ci0JCV9fbGUzMiBkYXRhOworCQlfX2JlMzIgZGF0YTsKIAogCQlhZGRyID0gb2Zmc2V0ICsgaTsKIAogCQltZW1jcHkoJmRhdGEsIGJ1ZiArIGksIDQpOwogCi0JCXR3MzIoR1JDX0VFUFJPTV9EQVRBLCBsZTMyX3RvX2NwdShkYXRhKSk7CisJCXR3MzIoR1JDX0VFUFJPTV9EQVRBLCBiZTMyX3RvX2NwdShkYXRhKSk7CiAKIAkJdmFsID0gdHIzMihHUkNfRUVQUk9NX0FERFIpOwogCQl0dzMyKEdSQ19FRVBST01fQUREUiwgdmFsIHwgRUVQUk9NX0FERFJfQ09NUExFVEUpOwpAQCAtMTA2NjcsOCArMTA3MTMsOSBAQAogCQlwaHlfYWRkciA9IG9mZnNldCAmIH5wYWdlbWFzazsKIAogCQlmb3IgKGogPSAwOyBqIDwgcGFnZXNpemU7IGogKz0gNCkgewotCQkJaWYgKChyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgcGh5X2FkZHIgKyBqLAotCQkJCQkJKF9fbGUzMiAqKSAodG1wICsgaikpKSkKKwkJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIHBoeV9hZGRyICsgaiwKKwkJCQkJCSAgKF9fYmUzMiAqKSAodG1wICsgaikpOworCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQogCQlpZiAocmV0KQpAQCAtMTA3MTUsNyArMTA3NjIsNyBAQAogCQkJX19iZTMyIGRhdGE7CiAKIAkJCWRhdGEgPSAqKChfX2JlMzIgKikgKHRtcCArIGopKTsKLQkJCS8qIHN3YWIzMihsZTMyX3RvX2NwdShkYXRhKSksIGFjdHVhbGx5ICovCisKIAkJCXR3MzIoTlZSQU1fV1JEQVRBLCBiZTMyX3RvX2NwdShkYXRhKSk7CiAKIAkJCXR3MzIoTlZSQU1fQUREUiwgcGh5X2FkZHIgKyBqKTsKQEAgLTExMzAxLDI0ICsxMTM0OCwyNSBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfcGFydG5vKHN0cnVjdCB0ZzMgKnRwKQogewotCXVuc2lnbmVkIGNoYXIgdnBkX2RhdGFbMjU2XTsKKwl1bnNpZ25lZCBjaGFyIHZwZF9kYXRhWzI1Nl07ICAgLyogaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgKi8KIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgbWFnaWM7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMHgwLCAmbWFnaWMpKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHgwLCAmbWFnaWMpKQogCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAKIAlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykgewogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKIAkJCXUzMiB0bXA7CiAKLQkJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHgxMDAgKyBpLCAmdG1wKSkKKwkJCS8qIFRoZSBkYXRhIGlzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0IGluIE5WUkFNLgorCQkJICogVXNlIHRoZSBiaWctZW5kaWFuIHJlYWQgcm91dGluZXMgdG8gcHJlc2VydmUKKwkJCSAqIHRoZSBieXRlIG9yZGVyIGFzIGl0IGV4aXN0cyBpbiBOVlJBTS4KKwkJCSAqLworCQkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIDB4MTAwICsgaSwgJnRtcCkpCiAJCQkJZ290byBvdXRfbm90X2ZvdW5kOwogCi0JCQl2cGRfZGF0YVtpICsgMF0gPSAoKHRtcCA+PiAgMCkgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAxXSA9ICgodG1wID4+ICA4KSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDJdID0gKCh0bXAgPj4gMTYpICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgM10gPSAoKHRtcCA+PiAyNCkgJiAweGZmKTsKKwkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ0bXAsIHNpemVvZih0bXApKTsKIAkJfQogCX0gZWxzZSB7CiAJCWludCB2cGRfY2FwOwpAQCAtMTEzNDQsNyArMTEzOTIsNyBAQAogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCB2cGRfY2FwICsgUENJX1ZQRF9EQVRBLAogCQkJCQkgICAgICAmdG1wKTsKIAkJCXYgPSBjcHVfdG9fbGUzMih0bXApOwotCQkJbWVtY3B5KCZ2cGRfZGF0YVtpXSwgJnYsIDQpOworCQkJbWVtY3B5KCZ2cGRfZGF0YVtpXSwgJnYsIHNpemVvZih2KSk7CiAJCX0KIAl9CiAKQEAgLTExNDA0LDE1ICsxMTQ1Miw3OSBAQAogewogCXUzMiB2YWw7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0LCAmdmFsKSB8fAorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSB8fAogCSAgICAodmFsICYgMHhmYzAwMDAwMCkgIT0gMHgwYzAwMDAwMCB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSB8fAorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJnZhbCkgfHwKIAkgICAgdmFsICE9IDApCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9iY192ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgb2Zmc2V0LCBzdGFydCwgdmVyX29mZnNldDsKKwlpbnQgaTsKKwlib29sIG5ld3ZlciA9IGZhbHNlOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweGMsICZvZmZzZXQpIHx8CisJICAgIHRnM19udnJhbV9yZWFkKHRwLCAweDQsICZzdGFydCkpCisJCXJldHVybjsKKworCW9mZnNldCA9IHRnM19udnJhbV9sb2dpY2FsX2FkZHIodHAsIG9mZnNldCk7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCisJCXJldHVybjsKKworCWlmICgodmFsICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeworCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZ2YWwpKQorCQkJcmV0dXJuOworCisJCWlmICh2YWwgPT0gMCkKKwkJCW5ld3ZlciA9IHRydWU7CisJfQorCisJaWYgKG5ld3ZlcikgeworCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDgsICZ2ZXJfb2Zmc2V0KSkKKwkJCXJldHVybjsKKworCQlvZmZzZXQgPSBvZmZzZXQgKyB2ZXJfb2Zmc2V0IC0gc3RhcnQ7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7CisJCQlfX2JlMzIgdjsKKwkJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQgKyBpLCAmdikpCisJCQkJcmV0dXJuOworCisJCQltZW1jcHkodHAtPmZ3X3ZlciArIGksICZ2LCBzaXplb2YodikpOworCQl9CisJfSBlbHNlIHsKKwkJdTMyIG1ham9yLCBtaW5vcjsKKworCQlpZiAodGczX252cmFtX3JlYWQodHAsIFRHM19OVk1fUFRSRVZfQkNWRVIsICZ2ZXJfb2Zmc2V0KSkKKwkJCXJldHVybjsKKworCQltYWpvciA9ICh2ZXJfb2Zmc2V0ICYgVEczX05WTV9CQ1ZFUl9NQUpNU0spID4+CisJCQlURzNfTlZNX0JDVkVSX01BSlNGVDsKKwkJbWlub3IgPSB2ZXJfb2Zmc2V0ICYgVEczX05WTV9CQ1ZFUl9NSU5NU0s7CisJCXNucHJpbnRmKCZ0cC0+ZndfdmVyWzBdLCAzMiwgInYlZC4lMDJkIiwgbWFqb3IsIG1pbm9yKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9od3NiX3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsLCBtYWpvciwgbWlub3I7CisKKwkvKiBVc2UgbmF0aXZlIGVuZGlhbiByZXByZXNlbnRhdGlvbiAqLworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgVEczX05WTV9IV1NCX0NGRzEsICZ2YWwpKQorCQlyZXR1cm47CisKKwltYWpvciA9ICh2YWwgJiBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpNU0spID4+CisJCVRHM19OVk1fSFdTQl9DRkcxX01BSlNGVDsKKwltaW5vciA9ICh2YWwgJiBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5NU0spID4+CisJCVRHM19OVk1fSFdTQl9DRkcxX01JTlNGVDsKKworCXNucHJpbnRmKCZ0cC0+ZndfdmVyWzBdLCAzMiwgInNiIHYlZC4lMDJkIiwgbWFqb3IsIG1pbm9yKTsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX3NiX3ZlcihzdHJ1Y3QgdGczICp0cCwgdTMyIHZhbCkKIHsKIAl1MzIgb2Zmc2V0LCBtYWpvciwgbWlub3IsIGJ1aWxkOwpAQCAtMTE0MzgsNyArMTE1NTAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkpCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQogCQlyZXR1cm47CiAKIAlidWlsZCA9ICh2YWwgJiBURzNfRUVQUk9NX1NCX0VESF9CTERfTUFTSykgPj4KQEAgLTExNDU4LDQ5ICsxMTU3MCwxNSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2Z3X3ZlcihzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9tZ210ZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQogewogCXUzMiB2YWwsIG9mZnNldCwgc3RhcnQ7Ci0JdTMyIHZlcl9vZmZzZXQ7Ci0JaW50IGksIGJjbnQ7Ci0KLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJnZhbCkpCi0JCXJldHVybjsKLQotCWlmICh2YWwgIT0gVEczX0VFUFJPTV9NQUdJQykgewotCQlpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0ZXKQotCQkJdGczX3JlYWRfc2JfdmVyKHRwLCB2YWwpOwotCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMHhjLCAmb2Zmc2V0KSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweDQsICZzdGFydCkpCi0JCXJldHVybjsKLQotCW9mZnNldCA9IHRnM19udnJhbV9sb2dpY2FsX2FkZHIodHAsIG9mZnNldCk7Ci0KLQlpZiAoIXRnM19md19pbWdfaXNfdmFsaWQodHAsIG9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgOCwgJnZlcl9vZmZzZXQpKQotCQlyZXR1cm47Ci0KLQlvZmZzZXQgPSBvZmZzZXQgKyB2ZXJfb2Zmc2V0IC0gc3RhcnQ7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpIHsKLQkJX19sZTMyIHY7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0ICsgaSwgJnYpKQotCQkJcmV0dXJuOwotCi0JCW1lbWNweSh0cC0+ZndfdmVyICsgaSwgJnYsIDQpOwotCX0KLQotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAotCSAgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCi0JCXJldHVybjsKKwlpbnQgaSwgdmxlbjsKIAogCWZvciAob2Zmc2V0ID0gVEczX05WTV9ESVJfU1RBUlQ7CiAJICAgICBvZmZzZXQgPCBURzNfTlZNX0RJUl9FTkQ7CiAJICAgICBvZmZzZXQgKz0gVEczX05WTV9ESVJFTlRfU0laRSkgewotCQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0LCAmdmFsKSkKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQogCQkJcmV0dXJuOwogCiAJCWlmICgodmFsID4+IFRHM19OVk1fRElSVFlQRV9TSElGVCkgPT0gVEczX05WTV9ESVJUWVBFX0FTRklOSSkKQEAgLTExNTEyLDM2ICsxMTU5MCw4NyBAQAogCiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQlzdGFydCA9IDB4MDgwMDAwMDA7Ci0JZWxzZSBpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0IC0gNCwgJnN0YXJ0KSkKKwllbHNlIGlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0IC0gNCwgJnN0YXJ0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDQsICZvZmZzZXQpIHx8CisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmb2Zmc2V0KSB8fAogCSAgICAhdGczX2Z3X2ltZ19pc192YWxpZCh0cCwgb2Zmc2V0KSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA4LCAmdmFsKSkKKwkgICAgdGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDgsICZ2YWwpKQogCQlyZXR1cm47CiAKIAlvZmZzZXQgKz0gdmFsIC0gc3RhcnQ7CiAKLQliY250ID0gc3RybGVuKHRwLT5md192ZXIpOworCXZsZW4gPSBzdHJsZW4odHAtPmZ3X3Zlcik7CiAKLQl0cC0+ZndfdmVyW2JjbnQrK10gPSAnLCc7Ci0JdHAtPmZ3X3ZlcltiY250KytdID0gJyAnOworCXRwLT5md192ZXJbdmxlbisrXSA9ICcsJzsKKwl0cC0+ZndfdmVyW3ZsZW4rK10gPSAnICc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCV9fbGUzMiB2OwotCQlpZiAodGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCwgJnYpKQorCQlfX2JlMzIgdjsKKwkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCwgJnYpKQogCQkJcmV0dXJuOwogCiAJCW9mZnNldCArPSBzaXplb2Yodik7CiAKLQkJaWYgKGJjbnQgPiBURzNfVkVSX1NJWkUgLSBzaXplb2YodikpIHsKLQkJCW1lbWNweSgmdHAtPmZ3X3ZlcltiY250XSwgJnYsIFRHM19WRVJfU0laRSAtIGJjbnQpOworCQlpZiAodmxlbiA+IFRHM19WRVJfU0laRSAtIHNpemVvZih2KSkgeworCQkJbWVtY3B5KCZ0cC0+ZndfdmVyW3ZsZW5dLCAmdiwgVEczX1ZFUl9TSVpFIC0gdmxlbik7CiAJCQlicmVhazsKIAkJfQogCi0JCW1lbWNweSgmdHAtPmZ3X3ZlcltiY250XSwgJnYsIHNpemVvZih2KSk7Ci0JCWJjbnQgKz0gc2l6ZW9mKHYpOworCQltZW1jcHkoJnRwLT5md192ZXJbdmxlbl0sICZ2LCBzaXplb2YodikpOworCQl2bGVuICs9IHNpemVvZih2KTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9kYXNoX3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgdmxlbjsKKwl1MzIgYXBlZGF0YTsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgfHwKKwkgICAgISh0cC0+dGczX2ZsYWdzICAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfU0VHX1NJRyk7CisJaWYgKGFwZWRhdGEgIT0gQVBFX1NFR19TSUdfTUFHSUMpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9GV19TVEFUVVMpOworCWlmICghKGFwZWRhdGEgJiBBUEVfRldfU1RBVFVTX1JFQURZKSkKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX0ZXX1ZFUlNJT04pOworCisJdmxlbiA9IHN0cmxlbih0cC0+ZndfdmVyKTsKKworCXNucHJpbnRmKCZ0cC0+ZndfdmVyW3ZsZW5dLCBURzNfVkVSX1NJWkUgLSB2bGVuLCAiIERBU0ggdiVkLiVkLiVkLiVkIiwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fTUFKTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9NQUpTRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX01JTk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fTUlOU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9SRVZNU0spID4+IEFQRV9GV19WRVJTSU9OX1JFVlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fQkxETVNLKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9md192ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbDsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkpCisJCXJldHVybjsKKworCWlmICh2YWwgPT0gVEczX0VFUFJPTV9NQUdJQykKKwkJdGczX3JlYWRfYmNfdmVyKHRwKTsKKwllbHNlIGlmICgodmFsICYgVEczX0VFUFJPTV9NQUdJQ19GV19NU0spID09IFRHM19FRVBST01fTUFHSUNfRlcpCisJCXRnM19yZWFkX3NiX3Zlcih0cCwgdmFsKTsKKwllbHNlIGlmICgodmFsICYgVEczX0VFUFJPTV9NQUdJQ19IV19NU0spID09IFRHM19FRVBST01fTUFHSUNfSFcpCisJCXRnM19yZWFkX2h3c2JfdmVyKHRwKTsKKwllbHNlCisJCXJldHVybjsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAorCSAgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCisJCXJldHVybjsKKworCXRnM19yZWFkX21nbXRmd192ZXIodHApOwogCiAJdHAtPmZ3X3ZlcltURzNfVkVSX1NJWkUgLSAxXSA9IDA7CiB9CkBAIC0xMjMxMiwxNCArMTI0NDEsMTAgQEAKIAl9CiAJaWYgKCFhZGRyX29rKSB7CiAJCS8qIE5leHQsIHRyeSBOVlJBTS4gKi8KLQkJaWYgKCF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKLQkJICAgICF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDQsICZsbykpIHsKLQkJCWRldi0+ZGV2X2FkZHJbMF0gPSAoKGhpID4+IDE2KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclsxXSA9ICgoaGkgPj4gMjQpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzJdID0gKChsbyA+PiAgMCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbM10gPSAoKGxvID4+ICA4KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkcls0XSA9ICgobG8gPj4gMTYpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzVdID0gKChsbyA+PiAyNCkgJiAweGZmKTsKKwkJaWYgKCF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgorCQkgICAgIXRnM19udnJhbV9yZWFkX2JlMzIodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7CisJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMF0sICgoY2hhciAqKSZoaSkgKyAyLCAyKTsKKwkJCW1lbWNweSgmZGV2LT5kZXZfYWRkclsyXSwgKGNoYXIgKikmbG8sIHNpemVvZihsbykpOwogCQl9CiAJCS8qIEZpbmFsbHkganVzdCBmZXRjaCBpdCBvdXQgb2YgdGhlIE1BQyBjb250cm9sIHJlZ3MuICovCiAJCWVsc2UgewpAQCAtMTMyMDAsNiArMTMzMjUsOSBAQAogCQl9CiAKIAkJdGczX2FwZV9sb2NrX2luaXQodHApOworCisJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikKKwkJCXRnM19yZWFkX2Rhc2hfdmVyKHRwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCA1MDhkZWYzLi5jYjRjNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMTcxOSw2ICsxNzE5LDEyIEBACiAKICNkZWZpbmUgVEczX09UUF9ERUZBVUxUCQkJMHgyODZjMTY0MAogCisvKiBIYXJkd2FyZSBTZWxmYm9vdCBOVlJBTSBsYXlvdXQgKi8KKyNkZWZpbmUgVEczX05WTV9IV1NCX0NGRzEJCTB4MDAwMDAwMDQKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01BSk1TSwkweGY4MDAwMDAwCisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpTRlQJMjcKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01JTk1TSwkweDA3YzAwMDAwCisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5TRlQJMjIKIAogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDCQkweDY2OTk1NWFhCiAjZGVmaW5lIFRHM19FRVBST01fTUFHSUNfRlcJCTB4YTUwMDAwMDAKQEAgLTE3MzcsNiArMTc0MywxMCBAQAogI2RlZmluZSBURzNfTlZNX0RJUkVOVF9TSVpFCQkweGMKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX1NISUZUCQkyNAogI2RlZmluZSBURzNfTlZNX0RJUlRZUEVfQVNGSU5JCQkxCisjZGVmaW5lIFRHM19OVk1fUFRSRVZfQkNWRVIJCTB4OTQKKyNkZWZpbmUgVEczX05WTV9CQ1ZFUl9NQUpNU0sJCTB4MDAwMGZmMDAKKyNkZWZpbmUgVEczX05WTV9CQ1ZFUl9NQUpTRlQJCTgKKyNkZWZpbmUgVEczX05WTV9CQ1ZFUl9NSU5NU0sJCTB4MDAwMDAwZmYKIAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjBfRURIX09GRgkweDEwCiAjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSMl9FREhfT0ZGCTB4MTQKQEAgLTE5NjcsNiArMTk3NywxNCBAQAogLyogQVBFIHNoYXJlZCBtZW1vcnkuICBBY2Nlc3NpYmxlIHRocm91Z2ggQkFSMSAqLwogI2RlZmluZSBURzNfQVBFX0ZXX1NUQVRVUwkJMHg0MDBjCiAjZGVmaW5lICBBUEVfRldfU1RBVFVTX1JFQURZCQkgMHgwMDAwMDEwMAorI2RlZmluZSBURzNfQVBFX0ZXX1ZFUlNJT04JCTB4NDAxOAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUFKTVNLCQkgMHhmZjAwMDAwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUFKU0ZUCQkgMjQKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01JTk1TSwkJIDB4MDBmZjAwMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01JTlNGVAkJIDE2CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9SRVZNU0sJCSAweDAwMDBmZjAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9SRVZTRlQJCSA4CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9CTERNU0sJCSAweDAwMDAwMGZmCiAjZGVmaW5lIFRHM19BUEVfSE9TVF9TRUdfU0lHCQkweDQyMDAKICNkZWZpbmUgIEFQRV9IT1NUX1NFR19TSUdfTUFHSUMJCSAweDQ4NGY1MzU0CiAjZGVmaW5lIFRHM19BUEVfSE9TVF9TRUdfTEVOCQkweDQyMDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggNDM4NTNlMy4uNGE2NWZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTI3NCw2ICsyNzQsMTUgQEAKIAkKIAlyZXR1cm4gOyAKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4bF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB4bF9vcGVuLAorCS5uZG9fc3RvcAkJPSB4bF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0geGxfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0geGxfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHhsX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0geGxfc2V0X21hY19hZGRyZXNzLAorfTsKICAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHhsX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkgCkBAIC0zMzcsMTMgKzM0Niw3IEBACiAJCXJldHVybiBpIDsgCiAJfQkJCQkKIAotCWRldi0+b3Blbj0meGxfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdD0meGxfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHU9JnhsX2NoYW5nZV9tdHU7Ci0JZGV2LT5zdG9wPSZ4bF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsPU5VTEw7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q9JnhsX3NldF9yeF9tb2RlOwotCWRldi0+c2V0X21hY19hZGRyZXNzPSZ4bF9zZXRfbWFjX2FkZHJlc3MgOyAKKwlkZXYtPm5ldGRldl9vcHMgPSAmeGxfbmV0ZGV2X29wczsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsZGV2KSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwppbmRleCBiNTY2ZDZkLi5iOWRiMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwpAQCAtOTIsNiArOTIsOCBAQAogCW91dHcodmFsLCBkZXYtPmJhc2VfYWRkciArIHJlZyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWJ5c3NfbmV0ZGV2X29wczsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWJ5c3NfYXR0YWNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewkKIAlzdGF0aWMgaW50IHZlcnNpb25wcmludGVkOwpAQCAtMTU3LDggKzE1OSw3IEBACiAKIAltZW1jcHkodHAtPlByb2R1Y3RJRCwgIk1hZGdlIFBDSSAxNi80IE1rMiIsIFBST0RfSURfU0laRSArIDEpOwogCQkKLQlkZXYtPm9wZW4gPSBhYnlzc19vcGVuOwotCWRldi0+c3RvcCA9IGFieXNzX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcyA9ICZhYnlzc19uZXRkZXZfb3BzOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKQEAgLTQ1MCw2ICs0NTEsMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWJ5c3NfaW5pdCAodm9pZCkKIHsKKwlhYnlzc19uZXRkZXZfb3BzID0gdG1zMzgwdHJfbmV0ZGV2X29wczsKKworCWFieXNzX25ldGRldl9vcHMubmRvX29wZW4gPSBhYnlzc19vcGVuOworCWFieXNzX25ldGRldl9vcHMubmRvX3N0b3AgPSBhYnlzc19jbG9zZTsKKwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhYnlzc19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCmluZGV4IGZhN2JjZTZlMC4uOWQ4OTYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTIwMCw3ICsyMDAsNiBAQAogc3RhdGljIHZvaWQJaWJtdHJfcmVzZXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QqdG1yLHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJdG9rX3JlcnVuKHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpOwogc3RhdGljIHZvaWQJaWJtdHJfcmVhZGxvZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgCW5ldF9kZXZpY2Vfc3RhdHMgKnRva19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50CWlibXRyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CiBzdGF0aWMgdm9pZAlmaW5kX3R1cmJvX2FkYXB0ZXJzKGludCAqaW9saXN0KTsKIApAQCAtODE2LDE4ICs4MTUsMjEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRyZGV2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHRva19vcGVuLAorCS5uZG9fc3RvcAkJPSB0b2tfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHRva19zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHRva19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGlibXRyX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0cmRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlTRVRfUEFHRSh0aS0+c3JiX3BhZ2UpOwogICAgICAgICB0aS0+b3Blbl9mYWlsdXJlID0gTk8gICAgOwotCWRldi0+b3BlbiA9IHRva19vcGVuOwotCWRldi0+c3RvcCA9IHRva19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHRva19zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IHRva19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB0b2tfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGlibXRyX2NoYW5nZV9tdHU7CisJZGV2LT5uZXRkZXZfb3BzID0gJnRyZGV2X25ldGRldl9vcHM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NjAsNyArMTQ2Miw3IEBACiAJCQkJCSIlMDJYXG4iLAogCQkJCQkoaW50KXJldGNvZGUsIChpbnQpcmVhZGIodGktPnNzYiArIDYpKTsKIAkJCWVsc2UKLQkJCQl0aS0+dHJfc3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgWE1JVF9YSURfQ01EOgogCQkJRFBSSU5USygieG1pdCB4aWQgcmV0X2NvZGU6ICUwMlhcbiIsCkBAIC0xNjQ2LDcgKzE2NDgsNyBAQAogCQlicmVhazsKIAl9CiAJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwotCXRpLT50cl9zdGF0cy50eF9ieXRlcyArPSB0aS0+Y3VycmVudF9za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHRpLT5jdXJyZW50X3NrYi0+bGVuOwogCWRldl9rZnJlZV9za2JfaXJxKHRpLT5jdXJyZW50X3NrYik7CiAJdGktPmN1cnJlbnRfc2tiID0gTlVMTDsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CkBAIC0xNzIyLDcgKzE3MjQsNyBAQAogCWlmIChyZWFkYihsbGMgKyBvZmZzZXRvZihzdHJ1Y3QgdHJsbGMsIGxsYykpICE9IFVJX0NNRCkgewogCQlTRVRfUEFHRSh0aS0+YXNiX3BhZ2UpOwogCQl3cml0ZWIoREFUQV9MT1NULCB0aS0+YXNiICsgUkVUQ09ERV9PRlNUKTsKLQkJdGktPnRyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3NTcsNyArMTc1OSw3IEBACiAKIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYl9zaXplKSkpIHsKIAkJRFBSSU5USygib3V0IG9mIG1lbW9yeS4gZnJhbWUgZHJvcHBlZC5cbiIpOwotCQl0aS0+dHJfc3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJU0VUX1BBR0UodGktPmFzYl9wYWdlKTsKIAkJd3JpdGViKERBVEFfTE9TVCwgdGktPmFzYiArIG9mZnNldG9mKHN0cnVjdCBhc2JfcmVjLCByZXRfY29kZSkpOwogCQl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CkBAIC0xODEzLDggKzE4MTUsOCBAQAogCiAJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwogCi0JdGktPnRyX3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXRpLT50cl9zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSB0cl90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAlpZiAoSVB2NF9wKSB7CkBAIC0xODc2LDIxICsxODc4LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiB0b2tfZ2V0X3N0YXRzKCk6ICBCYXNpY2FsbHkgYSBzY2FmZm9sZCByb3V0aW5lIHdoaWNoIHdpbGwgcmV0dXJuCi0gICB0aGUgYWRkcmVzcyBvZiB0aGUgdHJfc3RhdGlzdGljcyBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoCi0gICB0aGlzIGRldmljZSAtLSB0aGUgdHIuLi4uIHN0cnVjdHVyZSBpcyBhbiBldGhuZXQgbG9vay1hbGlrZQotICAgc28gYXQgbGVhc3QgZm9yIHRoaXMgaXRlcmF0aW9uIG1heSBzdWZmaWNlLiAgICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdG9rX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0Jc3RydWN0IHRva19pbmZvICp0b2tpOwotCXRva2kgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKikgJnRva2ktPnRyX3N0YXRzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyBpbnQgaWJtdHJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KQogewogCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwppbmRleCAyMzljNzUyLi5mMzA5YjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiBzdGF0aWMgaW50IHN0cmVhbWVyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc3RyZWFtZXJfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3RyZWFtZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0cmVhbWVyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogc3RhdGljIHZvaWQgc3RyZWFtZXJfYXJiX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc3RyZWFtZXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KTsKQEAgLTIyMiw2ICsyMjEsMTggQEAKICNlbmRpZgogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RyZWFtZXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc3RyZWFtZXJfb3BlbiwKKwkubmRvX3N0b3AJCT0gc3RyZWFtZXJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHN0cmVhbWVyX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHN0cmVhbWVyX2NoYW5nZV9tdHUsCisjaWYgU1RSRUFNRVJfSU9DVEwKKwkubmRvX2RvX2lvY3RsCQk9IHN0cmVhbWVyX2lvY3RsLAorI2VuZGlmCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzdHJlYW1lcl9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHN0cmVhbWVyX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHN0cmVhbWVyX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMzIxLDE4ICszMzIsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0cmVhbWVyX3ByaXYtPnNyYl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdHJlYW1lcl9wcml2LT50cmJfd2FpdCk7CiAKLQlkZXYtPm9wZW4gPSAmc3RyZWFtZXJfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzdHJlYW1lcl94bWl0OwotCWRldi0+Y2hhbmdlX210dSA9ICZzdHJlYW1lcl9jaGFuZ2VfbXR1OwotCWRldi0+c3RvcCA9ICZzdHJlYW1lcl9jbG9zZTsKLSNpZiBTVFJFQU1FUl9JT0NUTAotCWRldi0+ZG9faW9jdGwgPSAmc3RyZWFtZXJfaW9jdGw7Ci0jZWxzZQotCWRldi0+ZG9faW9jdGwgPSBOVUxMOwotI2VuZGlmCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc3RyZWFtZXJfc2V0X3J4X21vZGU7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmc3RyZWFtZXJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gJnN0cmVhbWVyX3NldF9tYWNfYWRkcmVzczsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RyZWFtZXJfbmV0ZGV2X29wczsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlkZXYtPmJhc2VfYWRkcj1waW9fc3RhcnQ7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKQEAgLTYxNiw4ICs2MTYsNiBAQAogCXByaW50aygiU0lTUiBNYXNrID0gJTA0eFxuIiwgcmVhZHcoc3RyZWFtZXJfbW1pbyArIFNJU1JfTUFTSykpOwogI2VuZGlmCiAJZG8gewotCQlpbnQgaTsKLQogCQlmb3IgKGkgPSAwOyBpIDwgU1JCX0NPTU1BTkRfU0laRTsgaSArPSAyKSB7CiAJCQl3cml0ZXcoMCwgc3RyZWFtZXJfbW1pbyArIExBUERJTkMpOwogCQl9CkBAIC05MzcsNyArOTM1LDcgQEAKIAkJCWlmIChza2IgPT0gTlVMTCkgCiAJCQl7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgcGFja2V0IHRvIHVwcGVyIGxheWVycy4gXG4iLAlkZXYtPm5hbWUpOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCX0gZWxzZSB7CS8qIHdlIGFsbG9jYXRlZCBhbiBza2IgT0sgKi8KIAkJCQlpZiAoYnVmZmVyX2NudCA9PSAxKSB7CiAJCQkJCS8qIHJlbGVhc2UgdGhlIERNQSBtYXBwaW5nICovCkBAIC0xMDA5LDggKzEwMDcsOCBAQAogCQkJCQkvKiBzZW5kIHVwIHRvIHRoZSBwcm90b2NvbCAqLwogCQkJCQluZXRpZl9yeChza2IpOwogCQkJCX0KLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogCQkJfQkvKiBpZiBza2IgPT0gbnVsbCAqLwogCQl9CQkvKiBlbmQgcmVjZWl2ZWQgd2l0aG91dCBlcnJvcnMgKi8KIApAQCAtMTA1Myw4ICsxMDUxLDggQEAKIAkJCQl3aGlsZShzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl90eF9yaW5nWyhzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzICsgMSkgJiAoU1RSRUFNRVJfVFhfUklOR19TSVpFIC0gMSldLnN0YXR1cykgewogCQkJCXN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgPSAoc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyArIDEpICYgKFNUUkVBTUVSX1RYX1JJTkdfU0laRSAtIDEpOwogCQkJCXN0cmVhbWVyX3ByaXYtPmZyZWVfdHhfcmluZ19lbnRyaWVzKys7Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMudHhfYnl0ZXMgKz0gc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19za2Jbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzdHJlYW1lcl9wcml2LT50eF9yaW5nX3NrYltzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCWRldl9rZnJlZV9za2JfaXJxKHN0cmVhbWVyX3ByaXYtPnR4X3Jpbmdfc2tiW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdKTsKIAkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl90eF9yaW5nW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLmJ1ZmZlciA9IDB4ZGVhZGJlZWY7CiAJCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1tzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS5zdGF0dXMgPSAwOwpAQCAtMTQ4NCwxMyArMTQ4Miw2IEBACiAJfQkJCS8qIHN3aXRjaCBzcmJbMF0gKi8KIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdHJlYW1lcl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3RyZWFtZXJfcHJpdmF0ZSAqc3RyZWFtZXJfcHJpdjsKLQlzdHJlYW1lcl9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0czsKLX0KLQogc3RhdGljIGludCBzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyID0gYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmgKaW5kZXggMTNjY2VlNi4uM2M1OGQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmgKQEAgLTI5OSw3ICsyOTksNiBAQAogCWludCB0eF9yaW5nX2ZyZWUsIHR4X3JpbmdfbGFzdF9zdGF0dXMsIHJ4X3JpbmdfbGFzdF9yZWNlaXZlZCwKIAkgICAgZnJlZV90eF9yaW5nX2VudHJpZXM7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdHJlYW1lcl9zdGF0czsKIAlfX3UxNiBzdHJlYW1lcl9sYW5fc3RhdHVzOwogCV9fdTggc3RyZWFtZXJfcmluZ19zcGVlZDsKIAlfX3UxNiBwa3RfYnVmX3N6OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKaW5kZXggOTE3YjRkMi4uNDU2ZjhiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlyZXR1cm47CiB9CiAKLQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWRnZW1jX25ldGRldl9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbWFkZ2VtY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CQpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCWdvdG8gZ2V0b3V0OwogCX0KIAotCWRldi0+ZG1hID0gMDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbWFkZ2VtY19uZXRkZXZfb3BzOwogCiAJY2FyZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXJkX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZD09TlVMTCkgewpAQCAtMzQ4LDkgKzM0OCw2IEBACiAKIAltZW1jcHkodHAtPlByb2R1Y3RJRCwgIk1hZGdlIE1DQSAxNi80ICAgICIsIFBST0RfSURfU0laRSArIDEpOwogCi0JZGV2LT5vcGVuID0gbWFkZ2VtY19vcGVuOwotCWRldi0+c3RvcCA9IG1hZGdlbWNfY2xvc2U7Ci0KIAl0cC0+dG1zcHJpdiA9IGNhcmQ7CiAJZGV2X3NldF9kcnZkYXRhKGRldmljZSwgZGV2KTsKIApAQCAtNjkyLDggKzY4OSw2IEBACiAJCiAJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIi0tLS0tLS1cbiIpOwogCWlmIChjdXJjYXJkKSB7Ci0JCXN0cnVjdCBuZXRfbG9jYWwgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJDYXJkIFJldmlzaW9uOiAlZFxuIiwgY3VyY2FyZC0+Y2FyZHJldik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJSQU0gU2l6ZTogJWRrYlxuIiwgY3VyY2FyZC0+cmFtc2l6ZSk7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJDYWJsZSB0eXBlOiAlc1xuIiwgKGN1cmNhcmQtPmNhYmxldHlwZSk/IlNUUC9EQjkiOiJVVFAvUkotNDUiKTsKQEAgLTc2MCw2ICs3NTUsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWFkZ2VtY19pbml0ICh2b2lkKQogeworCW1hZGdlbWNfbmV0ZGV2X29wcyA9IHRtczM4MHRyX25ldGRldl9vcHM7CisJbWFkZ2VtY19uZXRkZXZfb3BzLm5kb19vcGVuID0gbWFkZ2VtY19vcGVuOworCW1hZGdlbWNfbmV0ZGV2X29wcy5uZG9fc3RvcCA9IG1hZGdlbWNfY2xvc2U7CisKIAlyZXR1cm4gbWNhX3JlZ2lzdGVyX2RyaXZlciAoJm1hZGdlbWNfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKaW5kZXggZWNiNWM3Yy4uZDA2OGE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCkBAIC0xODcsNyArMTg3LDYgQEAKIHN0YXRpYyB2b2lkIG9seW1waWNfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBvbHltcGljX2ZyZWVtZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAgCiBzdGF0aWMgaXJxcmV0dXJuX3Qgb2x5bXBpY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIG9seW1waWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBvbHltcGljX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKSA7IAogc3RhdGljIHZvaWQgb2x5bXBpY19hcmJfY21kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBvbHltcGljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CkBAIC0xOTUsNiArMTk0LDE1IEBACiBzdGF0aWMgdm9pZCBvbHltcGljX2FzYl9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSA7IAogc3RhdGljIGludCBvbHltcGljX3Byb2NfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkgOyAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvbHltcGljX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG9seW1waWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gb2x5bXBpY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gb2x5bXBpY194bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBvbHltcGljX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBvbHltcGljX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gb2x5bXBpY19zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvbHltcGljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgOyAKQEAgLTI1MywxNCArMjYxLDcgQEAKIAkJZ290byBvcF9mcmVlX2lvbWFwOwogCX0JCQkJCiAKLQlkZXYtPm9wZW49Jm9seW1waWNfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdD0mb2x5bXBpY194bWl0OwotCWRldi0+Y2hhbmdlX210dT0mb2x5bXBpY19jaGFuZ2VfbXR1OwotCWRldi0+c3RvcD0mb2x5bXBpY19jbG9zZTsKLQlkZXYtPmRvX2lvY3RsPU5VTEw7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q9Jm9seW1waWNfc2V0X3J4X21vZGU7Ci0JZGV2LT5nZXRfc3RhdHM9Jm9seW1waWNfZ2V0X3N0YXRzIDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcz0mb2x5bXBpY19zZXRfbWFjX2FkZHJlc3MgOyAgCisJZGV2LT5uZXRkZXZfb3BzID0gJm9seW1waWNfbmV0ZGV2X29wczsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsZGV2KSA7IApAQCAtNjk4LDcgKzY5OSw2IEBACiAJaWYgKG9seW1waWNfcHJpdi0+b2x5bXBpY19uZXR3b3JrX21vbml0b3IpIHsgCiAJCXU4IF9faW9tZW0gKm9hdDsKIAkJdTggX19pb21lbSAqb3B0OwotCQlpbnQgaTsKIAkJdTggYWRkcls2XTsKIAkJb2F0ID0gKG9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyBvbHltcGljX3ByaXYtPm9seW1waWNfYWRkcl90YWJsZV9hZGRyKTsKIAkJb3B0ID0gKG9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyBvbHltcGljX3ByaXYtPm9seW1waWNfcGFybXNfYWRkcik7CkBAIC03ODUsNyArNzg1LDcgQEAKIAkJCQl9IAogCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICs9IGkgOyAKIAkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCAmPSAoT0xZTVBJQ19SWF9SSU5HX1NJWkUgLTEpIDsgCi0JCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2Vycm9ycysrOwkgCisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCX0gZWxzZSB7CQogCQkJCiAJCQkJaWYgKGJ1ZmZlcl9jbnQgPT0gMSkgewpAQCAtNzk2LDcgKzc5Niw3IEBACiAKIAkJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgcGFja2V0IHRvIHVwcGVyIGxheWVycy4gXG4iLGRldi0+bmFtZSkgOwotCQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfZHJvcHBlZCsrIDsgCisJCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCQkvKiBVcGRhdGUgY291bnRlcnMgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdHJhbnNmZXIgdGhlIGZyYW1lICovCiAJCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICs9IGkgOyAKIAkJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgJj0gKE9MWU1QSUNfUlhfUklOR19TSVpFIC0xKSA7ICAKQEAgLTg2Miw4ICs4NjIsOCBAQAogCQkJCQkJc2tiLT5wcm90b2NvbCA9IHRyX3R5cGVfdHJhbnMoc2tiLGRldik7CiAJCQkJCQluZXRpZl9yeChza2IpIDsgCiAJCQkJCX0gCi0JCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9wYWNrZXRzKysgOyAKLQkJCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCA7IAorCQkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKyA7CisJCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoIDsKIAkJCQl9IC8qIGlmIHNrYiA9PSBudWxsICovCiAJCQl9IC8qIElmIHN0YXR1cyAmIDB4M2IgKi8KIApAQCAtOTcxLDggKzk3MSw4IEBACiAJCQkJb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzKys7CiAJCQkJb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzICY9IChPTFlNUElDX1RYX1JJTkdfU0laRS0xKTsKIAkJCQlvbHltcGljX3ByaXYtPmZyZWVfdHhfcmluZ19lbnRyaWVzKys7Ci0JCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnR4X2J5dGVzICs9IG9seW1waWNfcHJpdi0+dHhfcmluZ19za2Jbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOwotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy50eF9wYWNrZXRzKysgOyAKKwkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG9seW1waWNfcHJpdi0+dHhfcmluZ19za2Jbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrIDsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKG9seW1waWNfcHJpdi0+cGRldiwgCiAJCQkJCWxlMzJfdG9fY3B1KG9seW1waWNfcHJpdi0+b2x5bXBpY190eF9yaW5nW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10uYnVmZmVyKSwgCiAJCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19za2Jbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuLFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTM0NCwxMyArMTM0NCw2IEBACiAKIH0gCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIG9seW1waWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9seW1waWNfcHJpdmF0ZSAqb2x5bXBpY19wcml2IDsKLQlvbHltcGljX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHM7IAotfQotCiBzdGF0aWMgaW50IG9seW1waWNfc2V0X21hY19hZGRyZXNzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKSAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyID0gYWRkciA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmgKaW5kZXggMTBmYmJhMC4uMzA2MzFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaAorKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oCkBAIC0yNzUsNyArMjc1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfcmluZ19za2JbT0xZTVBJQ19UWF9SSU5HX1NJWkVdLCAqcnhfcmluZ19za2JbT0xZTVBJQ19SWF9SSU5HX1NJWkVdOwkKIAlpbnQgdHhfcmluZ19mcmVlLCB0eF9yaW5nX2xhc3Rfc3RhdHVzLCByeF9yaW5nX2xhc3RfcmVjZWl2ZWQscnhfc3RhdHVzX2xhc3RfcmVjZWl2ZWQsIGZyZWVfdHhfcmluZ19lbnRyaWVzOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgb2x5bXBpY19zdGF0cyA7CiAJdTE2IG9seW1waWNfbGFuX3N0YXR1cyA7CiAJdTggb2x5bXBpY19yaW5nX3NwZWVkIDsKIAl1MTYgcGt0X2J1Zl9zeiA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKaW5kZXggYjhjOTU1Zi4uMTZlODc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCkBAIC0xMTYsNiArMTE2LDggQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcm90ZW9uX25ldGRldl9vcHMgX19yZWFkX21vc3RseTsKKwogc3RhdGljIGludCBfX2luaXQgc2V0dXBfY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKnRwOwpAQCAtMTY3LDggKzE2OSw3IEBACiAKIAl0cC0+dG1zcHJpdiA9IE5VTEw7CiAKLQlkZXYtPm9wZW4gPSBwcm90ZW9uX29wZW47Ci0JZGV2LT5zdG9wID0gdG1zMzgwdHJfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJnByb3Rlb25fbmV0ZGV2X29wczsKIAogCWlmIChkZXYtPmlycSA9PSAwKQogCXsKQEAgLTM1Miw2ICszNTMsMTAgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCBpLCBudW0gPSAwLCBlcnIgPSAwOwogCisJcHJvdGVvbl9uZXRkZXZfb3BzID0gdG1zMzgwdHJfbmV0ZGV2X29wczsKKwlwcm90ZW9uX25ldGRldl9vcHMubmRvX29wZW4gPSBwcm90ZW9uX29wZW47CisJcHJvdGVvbl9uZXRkZXZfb3BzLm5kb19zdG9wID0gdG1zMzgwdHJfY2xvc2U7CisKIAllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwppbmRleCBjMGY1OGYwLi40NmRiNWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwpAQCAtMTMzLDYgKzEzMyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2tfaXNhX25ldGRldl9vcHMgX19yZWFkX21vc3RseTsKKwogc3RhdGljIGludCBfX2luaXQgc2V0dXBfY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKnRwOwpAQCAtMTg0LDggKzE4Niw3IEBACiAKIAl0cC0+dG1zcHJpdiA9IE5VTEw7CiAKLQlkZXYtPm9wZW4gPSBza19pc2Ffb3BlbjsKLQlkZXYtPnN0b3AgPSB0bXMzODB0cl9jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc2tfaXNhX25ldGRldl9vcHM7CiAKIAlpZiAoZGV2LT5pcnEgPT0gMCkKIAl7CkBAIC0zNjIsNiArMzYzLDEwIEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAorCXNrX2lzYV9uZXRkZXZfb3BzID0gdG1zMzgwdHJfbmV0ZGV2X29wczsKKwlza19pc2FfbmV0ZGV2X29wcy5uZG9fb3BlbiA9IHNrX2lzYV9vcGVuOworCXNrX2lzYV9uZXRkZXZfb3BzLm5kb19zdG9wID0gdG1zMzgwdHJfY2xvc2U7CisKIAllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNrX2lzYV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCmluZGV4IDUwZWIyOWMuLmE5MWQ5YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCkBAIC02MSw3ICs2MSw4IEBACiAKICNpbmNsdWRlICJzbWN0ci5oIiAgICAgICAgICAgICAgIC8qIE91ciBTdHVmZiAqLwogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAic21jdHIuYzogdjEuNCA3LzEyLzAwIGJ5IGpzY2hsc3RAc2FtYmEub3JnXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPQorCUtFUk5fSU5GTyAic21jdHIuYzogdjEuNCA3LzEyLzAwIGJ5IGpzY2hsc3RAc2FtYmEub3JnXG4iOwogc3RhdGljIGNvbnN0IGNoYXIgY2FyZG5hbWVbXSA9ICJzbWN0ciI7CiAKIApAQCAtMTIzLDcgKzEyNCw2IEBACiBzdGF0aWMgaW50IHNtY3RyX2dldF9waHlzaWNhbF9kcm9wX251bWJlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBfX3U4ICpzbWN0cl9nZXRfcnhfcG9pbnRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBxdWV1ZSk7CiBzdGF0aWMgaW50IHNtY3RyX2dldF9zdGF0aW9uX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbWN0cl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgRkNCbG9jayAqc21jdHJfZ2V0X3R4X2ZjYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3UxNiBxdWV1ZSwKICAgICAgICAgX191MTYgYnl0ZXNfY291bnQpOwogc3RhdGljIGludCBzbWN0cl9nZXRfdXBzdHJlYW1fbmVpZ2hib3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTM2MzIsNiArMzYzMiwxNCBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jdHJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgPSBzbWN0cl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICA9IHNtY3RyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICA9IHNtY3RyX3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dAkgICA9IHNtY3RyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgICAgID0gc21jdHJfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc21jdHJfc2V0X211bHRpY2FzdF9saXN0LAorfTsKIAogc3RhdGljIGludCBfX2luaXQgc21jdHJfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CkBAIC0zNjgyLDEzICszNjkwLDggQEAKICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KWRldi0+YmFzZV9hZGRyLAogICAgICAgICAgICAgICAgIGRldi0+aXJxLCB0cC0+cm9tX2Jhc2UsIHRwLT5yYW1fYmFzZSk7CiAKLSAgICAgICAgZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBzbWN0cl9vcGVuOwotICAgICAgICBkZXYtPnN0b3AgICAgICAgICAgICAgICA9IHNtY3RyX2Nsb3NlOwotICAgICAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IHNtY3RyX3NlbmRfcGFja2V0OwotICAgICAgICBkZXYtPnR4X3RpbWVvdXQJCT0gc21jdHJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc21jdHJfbmV0ZGV2X29wczsKICAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaOwotICAgICAgICBkZXYtPmdldF9zdGF0cyAgICAgICAgICA9IHNtY3RyX2dldF9zdGF0czsKLSAgICAgICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc21jdHJfc2V0X211bHRpY2FzdF9saXN0OwogICAgICAgICByZXR1cm4gKDApOwogCiBvdXQ6CkBAIC00MzkyLDUyICs0Mzk1LDQyIEBACiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjYXNlIFJJTkdfUkVDT1ZFUlk6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmluZyBSZWNvdmVyeVxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFJJTkdfUkVDT1ZFUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU0lOR0xFX1NUQVRJT046CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU2luZ2xlIFN0YXRpbm9uXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU0lOR0xFX1NUQVRJT047CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgQ09VTlRFUl9PVkVSRkxPVzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VudGVyIE92ZXJmbG93XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gQ09VTlRFUl9PVkVSRkxPVzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBSRU1PVkVfUkVDRUlWRUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmVtb3ZlIFJlY2VpdmVkXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gUkVNT1ZFX1JFQ0VJVkVEOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIEFVVE9fUkVNT1ZBTF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvIFJlbW92ZSBFcnJvclxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IEFVVE9fUkVNT1ZBTF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBMT0JFX1dJUkVfRkFVTFQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTG9iZSBXaXJlIEZhdWx0XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gTE9CRV9XSVJFX0ZBVUxUOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFRSQU5TTUlUX0JFQUNPTjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBUcmFuc21pdCBCZWFjb25cbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBUUkFOU01JVF9CRUFDT047CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU09GVF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBTb2Z0IEVycm9yXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU09GVF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBIQVJEX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhhcmQgRXJyb3JcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBIQVJEX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFNJR05BTF9MT1NTOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpZ25hbCBMb3NzXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU0lHTkFMX0xPU1M7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oCmluZGV4IDUyZGY3ZGQuLjZlNTcwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oCkBAIC05NzcsNyArOTc3LDYgQEAKIAlfX3U4CQltb25pdG9yX3N0YXRlX3JlYWR5OwogCV9fdTE2CQlyaW5nX3N0YXR1czsKIAlfX3U4CQlyaW5nX3N0YXR1c19mbGFnczsKLQlfX3U4CQljdXJyZW50X3Jpbmdfc3RhdHVzOwogCV9fdTgJCXN0YXRlOwogCiAJX191OAkJam9pbl9zdGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKaW5kZXggNWJlMzRjMi4uYjExYmI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKQEAgLTIzMzAsNiArMjMzMCwxNyBAQAogCQlETUFfQklESVJFQ1RJT05BTCk7CiB9CiAKK2NvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0bXMzODB0cl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB0bXMzODB0cl9vcGVuLAorCS5uZG9fc3RvcAkJPSB0bXMzODB0cl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdG1zMzgwdHJfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IHRtczM4MHRyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gdG1zMzgwdHJfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdG1zMzgwdHJfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdG1zMzgwdHJfc2V0X21hY19hZGRyZXNzLAorfTsKK0VYUE9SVF9TWU1CT0wodG1zMzgwdHJfbmV0ZGV2X29wcyk7CisKIGludCB0bXNkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKnRtc19sb2NhbDsKQEAgLTIzNTMsMTYgKzIzNjQsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJCi0JLyogVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNhcmQgZHJpdmVyIGlmIG5lZWRlZCAqLwotCWRldi0+b3BlbgkJPSB0bXMzODB0cl9vcGVuOwotCWRldi0+c3RvcAkJPSB0bXMzODB0cl9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsCQk9IE5VTEw7IAotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gdG1zMzgwdHJfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IHRtczM4MHRyX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZ0bXMzODB0cl9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWjsKLQlkZXYtPmdldF9zdGF0cwkJPSB0bXMzODB0cl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmdG1zMzgwdHJfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzCT0gdG1zMzgwdHJfc2V0X21hY19hZGRyZXNzOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCmluZGV4IDdhZjc2ZDcuLjYwYjMwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIC8qIG1vZHVsZSBwcm90b3R5cGVzICovCitleHRlcm4gY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRtczM4MHRyX25ldGRldl9vcHM7CiBpbnQgdG1zMzgwdHJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCB0bXMzODB0cl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGlycXJldHVybl90IHRtczM4MHRyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCmluZGV4IGUyMTUwYjMuLmY5MmZlODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKQEAgLTE1MiwxMyArMTUyLDEzIEBACiAKIAl0cC0+dG1zcHJpdiA9IGNhcmRpbmZvOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnRtczM4MHRyX25ldGRldl9vcHM7CisKIAlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHRtczM4MHRyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9vdXRfdG1zZGV2OwogCi0JZGV2LT5vcGVuID0gdG1zMzgwdHJfb3BlbjsKLQlkZXYtPnN0b3AgPSB0bXMzODB0cl9jbG9zZTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggYTlmZDJiMi4uYmI0M2U3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtODg4LDcgKzg4OCw3IEBACiAKIAlpZiAobnVtX3JlY2VpdmVkIDwgYnVkZ2V0KSB7CiAJCWRhdGEtPnJ4cGVuZGluZyA9IDA7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCVRTSV9XUklURShUU0kxMDhfRUNfSU5UTUFTSywKIAkJCQkgICAgIFRTSV9SRUFEKFRTSTEwOF9FQ19JTlRNQVNLKQpAQCAtOTE1LDExICs5MTUsMTEgQEAKIAkgKgogCSAqIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGlzIGNvZGUgcmFjZXMgd2l0aCB0c2kxMDhfcG9sbCgpLCB3aGljaCBtYXNrcwogCSAqIHRoZSBpbnRlcnJ1cHRzIGFmdGVyIHRzaTEwOF9pcnFfb25lKCkgcmVhZCB0aGUgbWFzaywgYnV0IGJlZm9yZQotCSAqIG5ldGlmX3J4X3NjaGVkdWxlIGlzIGNhbGxlZC4gIEl0IGNvdWxkIGFsc28gaGFwcGVuIGR1ZSB0byBjYWxscworCSAqIG5hcGlfc2NoZWR1bGUgaXMgY2FsbGVkLiAgSXQgY291bGQgYWxzbyBoYXBwZW4gZHVlIHRvIGNhbGxzCiAJICogZnJvbSB0c2kxMDhfY2hlY2tfcnhyaW5nKCkuCiAJICovCiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZGF0YS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZkYXRhLT5uYXBpKSkgewogCQkvKiBNYXNrLCByYXRoZXIgdGhhbiBhY2ssIHRoZSByZWNlaXZlIGludGVycnVwdHMuICBUaGUgYWNrCiAJCSAqIHdpbGwgaGFwcGVuIGluIHRzaTEwOF9wb2xsKCkuCiAJCSAqLwpAQCAtOTMwLDcgKzkzMCw3IEBACiAJCQkJICAgICB8IFRTSTEwOF9JTlRfUlhUSFJFU0ggfAogCQkJCSAgICAgVFNJMTA4X0lOVF9SWE9WRVJSVU4gfCBUU0kxMDhfSU5UX1JYRVJST1IgfAogCQkJCSAgICAgVFNJMTA4X0lOVF9SWFdBSVQpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZkYXRhLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZkYXRhLT5uYXBpKTsKIAl9IGVsc2UgewogCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJLyogVGhpcyBjYW4gaGFwcGVuIGlmIGFuIGludGVycnVwdCBvY2N1cnMgd2hpbGUgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCA2NDE4Zjc0Li5mOTQ5MWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTQ3OSw3ICs0NzksOCBAQAogCiAjaW5jbHVkZSAiZGU0eDUuaCIKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPSAiZGU0eDUuYzpWMC41NDYgMjAwMS8wMi8yMiBkYXZpZXNAbWFuaWFjLnVsdHJhbmV0LmNvbVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPICJkZTR4NS5jOlYwLjU0NiAyMDAxLzAyLzIyIGRhdmllc0BtYW5pYWMudWx0cmFuZXQuY29tXG4iOwogCiAjZGVmaW5lIGNfY2hhciBjb25zdCBjaGFyCiAKQEAgLTM5NDEsOCArMzk0Miw4IEBACiAJc3RyY3B5KG5hbWUsICJERTQzNC81Iik7CiAJcmV0dXJuIHN0YXR1czsKICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgYSBERUMgbmFtZSBpbiB0aGUgU1JPTSAqLwotCWludCBpID0gKigoY2hhciAqKSZscC0+c3JvbSArIDE5KSAqIDM7Ci0Jc3RybmNweShuYW1lLCAoY2hhciAqKSZscC0+c3JvbSArIDI2ICsgaSwgOCk7CisJaW50IHRtcCA9ICooKGNoYXIgKikmbHAtPnNyb20gKyAxOSkgKiAzOworCXN0cm5jcHkobmFtZSwgKGNoYXIgKikmbHAtPnNyb20gKyAyNiArIHRtcCwgOCk7CiAgICAgfQogICAgIG5hbWVbOF0gPSAnXDAnOwogICAgIGZvciAoaT0wOyBpPHNpZ2xlbjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKaW5kZXggMmU1Yzk5OS4uZTJjOWQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAJS0VSTl9JTkZPIERSVl9OQU1FICI6IERhdmljb20gRE05eHh4IG5ldCBkcml2ZXIsIHZlcnNpb24gIgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKaW5kZXggNmMzNDI4YS4uYzhkMjIwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogfQogCiBpbnQgdHVsaXBfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCkBAIC0xNDAsNiArMTQwLDcgQEAKICAgICAgICAgICAgICAgIC8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQgaXMgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwogICAgICAgICAgICAgICAgd2hpbGUgKCAhICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzICYgY3B1X3RvX2xlMzIoRGVzY093bmVkKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgczMyIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOworCQkgICAgICAgc2hvcnQgcGt0X2xlbjsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFID09IHRwLT5jdXJfcngpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTEsOCArMTUyLDI4IEBACiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4MzgwMDAzMDApICE9IDB4MDMwMCkgeworCQkgICAgICAgLyoKKwkJCSogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLgorCQkJKiAoTWF5IG5vdCBiZSBjb25zaWRlcmVkIHZhbGlkIHVudGlsIHdlIGhhdmUKKwkJCSogY2hlY2tlZCBzdGF0dXMgZm9yIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cykKKwkJCSovCisJCSAgICAgICBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKKworCQkgICAgICAgLyoKKwkJCSogTWF4aW11bSBwa3RfbGVuIGlzIDE1MTggKDE1MTQgKyB2bGFuIGhlYWRlcikKKwkJCSogQW55dGhpbmcgaGlnaGVyIHRoYW4gdGhpcyBpcyBhbHdheXMgaW52YWxpZAorCQkJKiByZWdhcmRsZXNzIG9mIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cworCQkJKi8KKworCQkgICAgICAgaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkJICAgICAgUnhEZXNjQ1JDRXJyb3IgfAorCQkJCSAgICAgIFJ4RGVzY0NvbGxpc2lvblNlZW4gfAorCQkJCSAgICAgIFJ4RGVzY1J1bnQgfAorCQkJCSAgICAgIFJ4RGVzY0Rlc2NFcnIgfAorCQkJCSAgICAgIFJ4V2hvbGVQa3QpKSAhPSBSeFdob2xlUGt0CisJCQkgICB8fCBwa3RfbGVuID4gMTUxOCkgeworCQkJICAgICAgIGlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJCQkgICAgICBSeFdob2xlUGt0KSkgIT0gUnhXaG9sZVBrdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHVsaXBfZGVidWcgPiAxKQpAQCAtMTYxLDMwICsxODIsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICYgUnhEZXNjRmF0YWxFcnIpIHsKKwkJCSAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwODkwKSB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCSAgICAgICBpZiAocGt0X2xlbiA+IDE1MTggfHwKKwkJCQkJICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQorCQkJCQkgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwNCkgdHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwMikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDAwMDEpIHRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBrdF9sZW4gPiAxNTE4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbiwgcGt0X2xlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfbGVuID0gMTUxODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwa3RfbGVuIDwgdHVsaXBfcnhfY29weWJyZWFrCkBAIC0zMDAsNyArMzE0LDcgQEAKIAogICAgICAgICAgLyogUmVtb3ZlIHVzIGZyb20gcG9sbGluZyBsaXN0IGFuZCBlbmFibGUgUlggaW50ci4gKi8KIAotICAgICAgICAgbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisgICAgICAgICBuYXBpX2NvbXBsZXRlKG5hcGkpOwogICAgICAgICAgaW93cml0ZTMyKHR1bGlwX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMsIHRwLT5iYXNlX2FkZHIrQ1NSNyk7CiAKICAgICAgICAgIC8qIFRoZSBsYXN0IG9wIGhhcHBlbnMgYWZ0ZXIgcG9sbCBjb21wbGV0aW9uLiBXaGljaCBtZWFucyB0aGUgZm9sbG93aW5nOgpAQCAtMzMzLDEwICszNDcsMTAgQEAKIAogICAgICAgICAgLyogVGhpbms6IHRpbWVyX3BlbmRpbmcoKSB3YXMgYW4gZXhwbGljaXQgc2lnbmF0dXJlIG9mIGJ1Zy4KICAgICAgICAgICAqIFRpbWVyIGNhbiBiZSBwZW5kaW5nIG5vdyBidXQgZmlyZWQgYW5kIGNvbXBsZXRlZAotICAgICAgICAgICogYmVmb3JlIHdlIGRpZCBuZXRpZl9yeF9jb21wbGV0ZSgpLiBTZWU/IFdlIHdvdWxkIGxvc2UgaXQuICovCisgICAgICAgICAgKiBiZWZvcmUgd2UgZGlkIG5hcGlfY29tcGxldGUoKS4gU2VlPyBXZSB3b3VsZCBsb3NlIGl0LiAqLwogCiAgICAgICAgICAvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHBvbGxpbmcgbGlzdCAqLwotICAgICAgICAgbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisgICAgICAgICBuYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAgICAgICAgICByZXR1cm4gd29ya19kb25lOwogfQpAQCAtMzU2LDE0ICszNzAsMzUgQEAKIAkvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0IGlzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KIAl3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogCQlzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCXNob3J0IHBrdF9sZW47CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTguOHguXG4iLAogCQkJCSAgIGRldi0+bmFtZSwgZW50cnksIHN0YXR1cyk7CiAJCWlmICgtLXJ4X3dvcmtfbGltaXQgPCAwKQogCQkJYnJlYWs7Ci0JCWlmICgoc3RhdHVzICYgMHgzODAwODMwMCkgIT0gMHgwMzAwKSB7Ci0JCQlpZiAoKHN0YXR1cyAmIDB4MzgwMDAzMDApICE9IDB4MDMwMCkgeworCisJCS8qCisJCSAgT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLgorCQkgIChNYXkgbm90IGJlIGNvbnNpZGVyZWQgdmFsaWQgdW50aWwgd2UgaGF2ZQorCQkgIGNoZWNrZWQgc3RhdHVzIGZvciBSeExlbmd0aE92ZXIyMDQ3IGJpdHMpCisJCSovCisJCXBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OworCQkvKgorCQkgIE1heGltdW0gcGt0X2xlbiBpcyAxNTE4ICgxNTE0ICsgdmxhbiBoZWFkZXIpCisJCSAgQW55dGhpbmcgaGlnaGVyIHRoYW4gdGhpcyBpcyBhbHdheXMgaW52YWxpZAorCQkgIHJlZ2FyZGxlc3Mgb2YgUnhMZW5ndGhPdmVyMjA0NyBiaXRzCisJCSovCisKKwkJaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkgICAgICAgUnhEZXNjQ1JDRXJyb3IgfAorCQkJICAgICAgIFJ4RGVzY0NvbGxpc2lvblNlZW4gfAorCQkJICAgICAgIFJ4RGVzY1J1bnQgfAorCQkJICAgICAgIFJ4RGVzY0Rlc2NFcnIgfAorCQkJICAgICAgIFJ4V2hvbGVQa3QpKSAgICAgICAgIT0gUnhXaG9sZVBrdAorCQkgICAgIHx8IHBrdF9sZW4gPiAxNTE4KSB7CisJCQlpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCSAgICAgUnhXaG9sZVBrdCkpICAgICAgICAgIT0gUnhXaG9sZVBrdCkgewogCQkJCS8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCiAJCQkJaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewogCQkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQpAQCAtMzcyLDMxICs0MDcsMjIgQEAKIAkJCQkJCQkgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAJCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJfQotCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBSeERlc2NGYXRhbEVycikgeworCQkJfSBlbHNlIHsKIAkJCQkvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KIAkJCQlpZiAodHVsaXBfZGVidWcgPiAyKQogCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlOC44eC5cbiIsCiAJCQkJCQkgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAJCQkJdHAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KLQkJCQlpZiAoc3RhdHVzICYgMHgwODkwKSB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWlmIChwa3RfbGVuID4gMTUxOCB8fAorCQkJCSAgICAoc3RhdHVzICYgUnhEZXNjUnVudCkpCisJCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwNCkgdHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiAweDAwMDIpIHRwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwMSkgdHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCi0JCQlzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAKLSNpZm5kZWYgZmluYWxfdmVyc2lvbgotCQkJaWYgKHBrdF9sZW4gPiAxNTE4KSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEJvZ3VzIHBhY2tldCBzaXplIG9mICVkICglI3gpLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBwa3RfbGVuLCBwa3RfbGVuKTsKLQkJCQlwa3RfbGVuID0gMTUxODsKLQkJCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJfQotI2VuZGlmCi0KIAkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwogCQkJICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwogCQkJaWYgKHBrdF9sZW4gPCB0dWxpcF9yeF9jb3B5YnJlYWsKQEAgLTUxOSw3ICs1NDUsNyBAQAogCQkJcnhkKys7CiAJCQkvKiBNYXNrIFJYIGludHJzIGFuZCBhZGQgdGhlIGRldmljZSB0byBwb2xsIGxpc3QuICovCiAJCQlpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycyZ+UnhQb2xsSW50LCBpb2FkZHIgKyBDU1I3KTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAKIAkJCWlmICghKGNzcjUmfihBYm5vcm1hbEludHJ8Tm9ybWFsSW50cnxSeFBvbGxJbnR8VFBMbmtQYXNzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwppbmRleCA5MWNmOWM4Li5kYWRkZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKQEAgLTY5LDExICs2OSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5taWlfbG9jaywgZmxhZ3MpOwogCWlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewotCQlpbnQgaSA9IDEwMDA7CiAJCWlvd3JpdGUzMigweDYwMDIwMDAwICsgKHBoeV9pZDw8MjMpICsgKGxvY2F0aW9uPDwxOCksIGlvYWRkciArIDB4QTApOwogCQlpb3JlYWQzMihpb2FkZHIgKyAweEEwKTsKIAkJaW9yZWFkMzIoaW9hZGRyICsgMHhBMCk7Ci0JCXdoaWxlICgtLWkgPiAwKSB7CisJCWZvciAoaSA9IDEwMDA7IGkgPj0gMDsgLS1pKSB7CiAJCQliYXJyaWVyKCk7CiAJCQlpZiAoICEgKChyZXR2YWwgPSBpb3JlYWQzMihpb2FkZHIgKyAweEEwKSkgJiAweDgwMDAwMDAwKSkKIAkJCQlicmVhazsKQEAgLTEzMSwxMyArMTMwLDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJaWYgKHRwLT5jaGlwX2lkID09IExDODJDMTY4KSB7Ci0JCWludCBpID0gMTAwMDsKIAkJaW93cml0ZTMyKGNtZCwgaW9hZGRyICsgMHhBMCk7Ci0JCWRvIHsKKwkJZm9yIChpID0gMTAwMDsgaSA+PSAwOyAtLWkpIHsKIAkJCWJhcnJpZXIoKTsKIAkJCWlmICggISAoaW9yZWFkMzIoaW9hZGRyICsgMHhBMCkgJiAweDgwMDAwMDAwKSkKIAkJCQlicmVhazsKLQkJfSB3aGlsZSAoLS1pID4gMCk7CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAppbmRleCAxOWFiYmMzLi4wYWZhMmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKQEAgLTIwMSw4ICsyMDEsMzggQEAKIAlEZXNjU3RhcnRQa3QgPSAweDIwMDAwMDAwLAogCURlc2NFbmRSaW5nICA9IDB4MDIwMDAwMDAsCiAJRGVzY1VzZUxpbmsgID0gMHgwMTAwMDAwMCwKLQlSeERlc2NGYXRhbEVyciA9IDB4MDA4MDAwLAorCisJLyoKKwkgKiBFcnJvciBzdW1tYXJ5IGZsYWcgaXMgbG9naWNhbCBvciBvZiAnQ1JDIEVycm9yJywgJ0NvbGxpc2lvbiBTZWVuJywKKwkgKiAnRnJhbWUgVG9vIExvbmcnLCAnUnVudCcgYW5kICdEZXNjcmlwdG9yIEVycm9yJyBmbGFncyBnZW5lcmF0ZWQKKwkgKiB3aXRoaW4gdHVsaXAgY2hpcC4KKwkgKi8KKwlSeERlc2NFcnJvclN1bW1hcnkgPSAweDgwMDAsCisJUnhEZXNjQ1JDRXJyb3IgPSAweDAwMDIsCisJUnhEZXNjQ29sbGlzaW9uU2VlbiA9IDB4MDA0MCwKKworCS8qCisJICogJ0ZyYW1lIFRvbyBMb25nJyBmbGFnIGlzIHNldCBpZiBwYWNrZXQgbGVuZ3RoIGluY2x1ZGluZyBDUkMgZXhjZWVkcworCSAqIDE1MTguICBIb3dldmVyLCBhIGZ1bGwgc2l6ZWQgVkxBTiB0YWdnZWQgZnJhbWUgaXMgMTUyMiBieXRlcworCSAqIGluY2x1ZGluZyBDUkMuCisJICoKKwkgKiBUaGUgdHVsaXAgY2hpcCBkb2VzIG5vdCBibG9jayBvdmVyc2l6ZWQgZnJhbWVzLCBhbmQgaWYgdGhpcyBmbGFnIGlzCisJICogc2V0IG9uIGEgcmVjZWl2ZSBkZXNjcmlwdG9yIGl0IGRvZXMgbm90IGluZGljYXRlIHRoZSBmcmFtZSBoYXMgYmVlbgorCSAqIHRydW5jYXRlZC4gIFRoZSByZWNlaXZlIGRlc2NyaXB0b3IgYWxzbyBpbmNsdWRlcyB0aGUgYWN0dWFsIGxlbmd0aC4KKwkgKiBUaGVyZWZvcmUgd2UgY2FuIHNhZmV0eSBpZ25vcmUgdGhpcyBmbGFnIGFuZCBjaGVjayB0aGUgbGVuZ3RoCisJICogb3Vyc2VsdmVzLgorCSAqLworCVJ4RGVzY0ZyYW1lVG9vTG9uZyA9IDB4MDA4MCwKKwlSeERlc2NSdW50ID0gMHgwODAwLAorCVJ4RGVzY0Rlc2NFcnIgPSAweDQwMDAsCiAJUnhXaG9sZVBrdCAgID0gMHgwMDAwMDMwMCwKKwkvKgorCSAqIFRvcCB0aHJlZSBiaXRzIG9mIDE0IGJpdCBmcmFtZSBsZW5ndGggKHN0YXR1cyBiaXRzIDI3LTI5KSBzaG91bGQKKwkgKiBuZXZlciBiZSBzZXQgYXMgdGhhdCB3b3VsZCBtYWtlIGZyYW1lIG92ZXIgMjA0NyBieXRlcy4gVGhlIFJlY2VpdmUKKwkgKiBXYXRjaGRvZyBmbGFnIChiaXQgNCkgbWF5IGluZGljYXRlIHRoZSBsZW5ndGggaXMgb3ZlciAyMDQ4IGFuZCB0aGUKKwkgKiBsZW5ndGggZmllbGQgaXMgaW52YWxpZC4KKwkgKi8KKwlSeExlbmd0aE92ZXIyMDQ3ID0gMHgzODAwMDAxMAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggMDMwZTAyZS4uYzIyN2RiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAJS0VSTl9JTkZPIERSVl9OQU1FICI6IFVMaSBNNTI2MS9NNTI2MyBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKIAlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCBmNDY3YmY4Li5jNjFhMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTEzOSw5ICsxMzksMTAgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4qLwogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAoMi40IHBvcnQpICIgRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2luaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICgyLjQgcG9ydCkgIgorCURSVl9SRUxEQVRFICIgIERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCisJS0VSTl9JTkZPICIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZHJpdmVycy5odG1sXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDA5ZmVhMzEuLmExYjA2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC02Myw2ICs2Myw4IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODcsMjYgKzg5LDEyNyBAQAogCXVuc2lnbmVkIGNoYXIJYWRkcltGTFRfRVhBQ1RfQ09VTlRdW0VUSF9BTEVOXTsKIH07CiAKK3N0cnVjdCB0dW5fZmlsZSB7CisJYXRvbWljX3QgY291bnQ7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OworfTsKKworc3RydWN0IHR1bl9zb2NrOworCiBzdHJ1Y3QgdHVuX3N0cnVjdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKKwlzdHJ1Y3QgdHVuX2ZpbGUJCSp0ZmlsZTsKIAl1bnNpZ25lZCBpbnQgCQlmbGFnczsKLQlpbnQJCQlhdHRhY2hlZDsKIAl1aWRfdAkJCW93bmVyOwogCWdpZF90CQkJZ3JvdXA7CiAKLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWFkcTsKIAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luYzsKIAogCXN0cnVjdCB0YXBfZmlsdGVyICAgICAgIHR4Zmx0OworCXN0cnVjdCBzb2NrCQkqc2s7CisJc3RydWN0IHNvY2tldAkJc29ja2V0OwogCiAjaWZkZWYgVFVOX0RFQlVHCiAJaW50IGRlYnVnOwogI2VuZGlmCiB9OwogCitzdHJ1Y3QgdHVuX3NvY2sgeworCXN0cnVjdCBzb2NrCQlzazsKKwlzdHJ1Y3QgdHVuX3N0cnVjdAkqdHVuOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHVuX3NvY2sgKnR1bl9zayhzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayk7Cit9CisKK3N0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJaW50IGVycjsKKworCUFTU0VSVF9SVE5MKCk7CisKKwkvKiBDaGVjayBwZXJtaXNzaW9ucyAqLworCWlmICgoKHR1bi0+b3duZXIgIT0gLTEgJiYgY3JlZC0+ZXVpZCAhPSB0dW4tPm93bmVyKSB8fAorCSAgICAgKHR1bi0+Z3JvdXAgIT0gLTEgJiYgIWluX2Vncm91cF9wKHR1bi0+Z3JvdXApKSkgJiYKKwkJIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwluZXRpZl90eF9sb2NrX2JoKHR1bi0+ZGV2KTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKHRmaWxlLT50dW4pCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVCVVNZOworCWlmICh0dW4tPnRmaWxlKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisJdGZpbGUtPnR1biA9IHR1bjsKKwl0dW4tPnRmaWxlID0gdGZpbGU7CisJZGV2X2hvbGQodHVuLT5kZXYpOworCWF0b21pY19pbmMoJnRmaWxlLT5jb3VudCk7CisKK291dDoKKwluZXRpZl90eF91bmxvY2tfYmgodHVuLT5kZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJLyogRGV0YWNoIGZyb20gbmV0IGRldmljZSAqLworCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOworCXRmaWxlLT50dW4gPSBOVUxMOworCXR1bi0+dGZpbGUgPSBOVUxMOworCW5ldGlmX3R4X3VubG9ja19iaCh0dW4tPmRldik7CisKKwkvKiBEcm9wIHJlYWQgcXVldWUgKi8KKwlza2JfcXVldWVfcHVyZ2UoJnR1bi0+cmVhZHEpOworCisJLyogRHJvcCB0aGUgZXh0cmEgY291bnQgb24gdGhlIG5ldCBkZXZpY2UgKi8KKwlkZXZfcHV0KHR1bi0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgdHVuX2RldGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXJ0bmxfbG9jaygpOworCV9fdHVuX2RldGFjaCh0dW4pOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqX190dW5fZ2V0KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IE5VTEw7CisKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmdGZpbGUtPmNvdW50KSkKKwkJdHVuID0gdGZpbGUtPnR1bjsKKworCXJldHVybiB0dW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2dldChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gX190dW5fZ2V0KGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHR1bl9wdXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gdHVuLT50ZmlsZTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0ZmlsZS0+Y291bnQpKQorCQl0dW5fZGV0YWNoKHRmaWxlLT50dW4pOworfQorCiAvKiBUQVAgZmlsdGVydGluZyAqLwogc3RhdGljIHZvaWQgYWRkcl9oYXNoX3NldCh1MzIgKm1hc2ssIGNvbnN0IHU4ICphZGRyKQogewpAQCAtMjE5LDEzICszMjIsMjMgQEAKIAogLyogTmV0d29yayBkZXZpY2UgcGFydCBvZiB0aGUgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgdHVuX25ldF9pZDsKLXN0cnVjdCB0dW5fbmV0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHM7CiAKKy8qIE5ldCBkZXZpY2UgZGV0YWNoIGZyb20gZmQuICovCitzdGF0aWMgdm9pZCB0dW5fbmV0X3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJLyogSW5mb3JtIHRoZSBtZXRob2RzIHRoZXkgbmVlZCB0byBzdG9wIHVzaW5nIHRoZSBkZXYuCisJICovCisJaWYgKHRmaWxlKSB7CisJCXdha2VfdXBfYWxsKCZ0ZmlsZS0+cmVhZF93YWl0KTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRmaWxlLT5jb3VudCkpCisJCQlfX3R1bl9kZXRhY2godHVuKTsKKwl9Cit9CisKIC8qIE5ldCBkZXZpY2Ugb3Blbi4gKi8KIHN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yNDgsNyArMzYxLDcgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX25ldF94bWl0ICVkXG4iLCB0dW4tPmRldi0+bmFtZSwgc2tiLT5sZW4pOwogCiAJLyogRHJvcCBwYWNrZXQgaWYgaW50ZXJmYWNlIGlzIG5vdCBhdHRhY2hlZCAqLwotCWlmICghdHVuLT5hdHRhY2hlZCkKKwlpZiAoIXR1bi0+dGZpbGUpCiAJCWdvdG8gZHJvcDsKIAogCS8qIERyb3AgaWYgdGhlIGZpbHRlciBkb2VzIG5vdCBsaWtlIGl0LgpAQCAtMjgwLDcgKzM5Myw3IEBACiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCiAJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fRkFTWU5DKQogCQlraWxsX2Zhc3luYygmdHVuLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+cmVhZF93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+dGZpbGUtPnJlYWRfd2FpdCk7CiAJcmV0dXJuIDA7CiAKIGRyb3A6CkBAIC0zMTIsNiArNDI1LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCkBAIC0zMTksNiArNDMzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb191bmluaXQJCT0gdHVuX25ldF91bmluaXQsCiAJLm5kb19vcGVuCQk9IHR1bl9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gdHVuX25ldF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHVuX25ldF94bWl0LApAQCAtMzY1LDg2ICs0ODAsNjYgQEAKIC8qIFBvbGwgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHVuX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSB0dW4tPnNrOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCWlmICghdHVuKQotCQlyZXR1cm4gLUVCQURGRDsKKwkJcmV0dXJuIFBPTExFUlI7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9wb2xsXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJnR1bi0+cmVhZF93YWl0LCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJnRmaWxlLT5yZWFkX3dhaXQsIHdhaXQpOwogCiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnR1bi0+cmVhZHEpKQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CiAKKwlpZiAoc29ja193cml0ZWFibGUoc2spIHx8CisJICAgICghdGVzdF9hbmRfc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykgJiYKKwkgICAgIHNvY2tfd3JpdGVhYmxlKHNrKSkpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKKwlpZiAodHVuLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkKKwkJbWFzayA9IFBPTExFUlI7CisKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIG1hc2s7CiB9CiAKIC8qIHByZXBhZCBpcyB0aGUgYW1vdW50IHRvIHJlc2VydmUgYXQgZnJvbnQuICBsZW4gaXMgbGVuZ3RoIGFmdGVyIHRoYXQuCiAgKiBsaW5lYXIgaXMgYSBoaW50IGFzIHRvIGhvdyBtdWNoIHRvIGNvcHkgKHVzdWFsbHkgaGVhZGVycykuICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc2l6ZV90IHByZXBhZCwgc2l6ZV90IGxlbiwgc2l6ZV90IGxpbmVhciwKLQkJCQkgICAgIGdmcF90IGdmcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKKwkJCQkJICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sCisJCQkJCSAgICBzaXplX3QgbGluZWFyLCBpbnQgbm9ibG9jaykKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSB0dW4tPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlza2IgPSBhbGxvY19za2IocHJlcGFkICsgbGVuLCBnZnB8X19HRlBfTk9XQVJOKTsKLQlpZiAoc2tiKSB7Ci0JCXNrYl9yZXNlcnZlKHNrYiwgcHJlcGFkKTsKLQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCXJldHVybiBza2I7Ci0JfQorCWludCBlcnI7CiAKIAkvKiBVbmRlciBhIHBhZ2U/ICBEb24ndCBib3RoZXIgd2l0aCBwYWdlZCBza2IuICovCiAJaWYgKHByZXBhZCArIGxlbiA8IFBBR0VfU0laRSkKLQkJcmV0dXJuIE5VTEw7CisJCWxpbmVhciA9IGxlbjsKIAotCS8qIFN0YXJ0IHdpdGggYSBub3JtYWwgc2tiLCBhbmQgYWRkIHBhZ2VzLiAqLwotCXNrYiA9IGFsbG9jX3NrYihwcmVwYWQgKyBsaW5lYXIsIGdmcCk7CisJc2tiID0gc29ja19hbGxvY19zZW5kX3Bza2Ioc2ssIHByZXBhZCArIGxpbmVhciwgbGVuIC0gbGluZWFyLCBub2Jsb2NrLAorCQkJCSAgICZlcnIpOwogCWlmICghc2tiKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogCXNrYl9yZXNlcnZlKHNrYiwgcHJlcGFkKTsKIAlza2JfcHV0KHNrYiwgbGluZWFyKTsKLQotCWxlbiAtPSBsaW5lYXI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1NLQl9GUkFHUzsgaSsrKSB7Ci0JCXNrYl9mcmFnX3QgKmYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQlmLT5wYWdlID0gYWxsb2NfcGFnZShnZnB8X19HRlBfWkVSTyk7Ci0JCWlmICghZi0+cGFnZSkKLQkJCWJyZWFrOwotCi0JCWYtPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJZi0+c2l6ZSA9IFBBR0VfU0laRTsKLQotCQlza2ItPmRhdGFfbGVuICs9IFBBR0VfU0laRTsKLQkJc2tiLT5sZW4gKz0gUEFHRV9TSVpFOwotCQlza2ItPnRydWVzaXplICs9IFBBR0VfU0laRTsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCi0JCWlmIChsZW4gPCBQQUdFX1NJWkUpIHsKLQkJCWxlbiA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlsZW4gLT0gUEFHRV9TSVpFOwotCX0KLQotCS8qIFRvbyBsYXJnZSwgb3IgYWxsb2MgZmFpbD8gKi8KLQlpZiAodW5saWtlbHkobGVuKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJc2tiID0gTlVMTDsKLQl9CisJc2tiLT5kYXRhX2xlbiA9IGxlbiAtIGxpbmVhcjsKKwlza2ItPmxlbiArPSBsZW4gLSBsaW5lYXI7CiAKIAlyZXR1cm4gc2tiOwogfQogCiAvKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi8KLXN0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCisJCQkJICAgICAgIHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgICAgaW50IG5vYmxvY2spCiB7Ci0Jc3RydWN0IHR1bl9waSBwaSA9IHsgMCwgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkgfTsKKwlzdHJ1Y3QgdHVuX3BpIHBpID0geyAwLCBjcHVfdG9fYmUxNihFVEhfUF9JUCkgfTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBsZW4gPSBjb3VudCwgYWxpZ24gPSAwOwogCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciBnc28gPSB7IDAgfTsKQEAgLTQ3NCw5ICs1NjksMTEgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghKHNrYiA9IHR1bl9hbGxvY19za2IoYWxpZ24sIGxlbiwgZ3NvLmhkcl9sZW4sIEdGUF9LRVJORUwpKSkgewotCQl0dW4tPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQlyZXR1cm4gLUVOT01FTTsKKwlza2IgPSB0dW5fYWxsb2Nfc2tiKHR1biwgYWxpZ24sIGxlbiwgZ3NvLmhkcl9sZW4sIG5vYmxvY2spOworCWlmIChJU19FUlIoc2tiKSkgeworCQlpZiAoUFRSX0VSUihza2IpICE9IC1FQUdBSU4pCisJCQl0dW4tPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCX0KIAogCWlmIChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2lvdmVjKHNrYiwgMCwgaXYsIGxlbikpIHsKQEAgLTU2MiwxNCArNjU5LDIwIEBACiBzdGF0aWMgc3NpemVfdCB0dW5fY2hyX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgcG9zKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOworCXNzaXplX3QgcmVzdWx0OwogCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfd3JpdGUgJWxkXG4iLCB0dW4tPmRldi0+bmFtZSwgY291bnQpOwogCi0JcmV0dXJuIHR1bl9nZXRfdXNlcih0dW4sIChzdHJ1Y3QgaW92ZWMgKikgaXYsIGlvdl9sZW5ndGgoaXYsIGNvdW50KSk7CisJcmVzdWx0ID0gdHVuX2dldF91c2VyKHR1biwgKHN0cnVjdCBpb3ZlYyAqKWl2LCBpb3ZfbGVuZ3RoKGl2LCBjb3VudCksCisJCQkgICAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwl0dW5fcHV0KHR1bik7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi8KQEAgLTY0Miw3ICs3NDUsOCBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNzaXplX3QgbGVuLCByZXQgPSAwOwpAQCAtNjUzLDEwICs3NTcsMTIgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9yZWFkXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKIAlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7Ci0JaWYgKGxlbiA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChsZW4gPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAotCWFkZF93YWl0X3F1ZXVlKCZ0dW4tPnJlYWRfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZ0ZmlsZS0+cmVhZF93YWl0LCAmd2FpdCk7CiAJd2hpbGUgKGxlbikgewogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIApAQCAtNjcwLDYgKzc3NiwxMCBAQAogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlicmVhazsKIAkJCX0KKwkJCWlmICh0dW4tPmRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJLyogTm90aGluZyB0byByZWFkLCBsZXQncyBzbGVlcCAqLwogCQkJc2NoZWR1bGUoKTsKQEAgLTY4Myw4ICs3OTMsMTAgQEAKIAl9CiAKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmdHVuLT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdGZpbGUtPnJlYWRfd2FpdCwgJndhaXQpOwogCitvdXQ6CisJdHVuX3B1dCh0dW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY5Myw1NCArODA1LDc4IEBACiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ0dW4tPnJlYWRxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dW4tPnJlYWRfd2FpdCk7CiAKIAl0dW4tPm93bmVyID0gLTE7CiAJdHVuLT5ncm91cCA9IC0xOwogCiAJZGV2LT5ldGh0b29sX29wcyA9ICZ0dW5fZXRodG9vbF9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogfQogCi1zdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9nZXRfYnlfbmFtZShzdHJ1Y3QgdHVuX25ldCAqdG4sIGNvbnN0IGNoYXIgKm5hbWUpCisvKiBUcml2aWFsIHNldCBvZiBuZXRsaW5rIG9wcyB0byBhbGxvdyBkZWxldGluZyB0dW4gb3IgdGFwCisgKiBkZXZpY2Ugd2l0aCBuZXRsaW5rLgorICovCitzdGF0aWMgaW50IHR1bl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0dW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKKwkua2luZAkJPSBEUlZfTkFNRSwKKwkucHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0dW5fc3RydWN0KSwKKwkuc2V0dXAJCT0gdHVuX3NldHVwLAorCS52YWxpZGF0ZQk9IHR1bl92YWxpZGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIHR1bl9zb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCi0JQVNTRVJUX1JUTkwoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1biwgJnRuLT5kZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cm5jbXAodHVuLT5kZXYtPm5hbWUsIG5hbWUsIElGTkFNU0laKSkKLQkJICAgIHJldHVybiB0dW47Ci0JfQorCWlmICghc29ja193cml0ZWFibGUoc2spKQorCQlyZXR1cm47CiAKLQlyZXR1cm4gTlVMTDsKKwlpZiAoc2stPnNrX3NsZWVwICYmIHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNrX3NsZWVwKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoc2stPnNrX3NsZWVwKTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJdHVuID0gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuOworCWtpbGxfZmFzeW5jKCZ0dW4tPmZhc3luYywgU0lHSU8sIFBPTExfT1VUKTsKIH0KIAorc3RhdGljIHZvaWQgdHVuX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQoreworCWRldl9wdXQoY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuLT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHByb3RvIHR1bl9wcm90byA9IHsKKwkubmFtZQkJPSAidHVuIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0dW5fc29jayksCit9OworCiBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewotCXN0cnVjdCB0dW5fbmV0ICp0bjsKKwlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQpOwotCXR1biA9IHR1bl9nZXRfYnlfbmFtZSh0biwgaWZyLT5pZnJfbmFtZSk7Ci0JaWYgKHR1bikgewotCQlpZiAodHVuLT5hdHRhY2hlZCkKLQkJCXJldHVybiAtRUJVU1k7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKTsKKwlpZiAoZGV2KSB7CisJCWlmICgoaWZyLT5pZnJfZmxhZ3MgJiBJRkZfVFVOKSAmJiBkZXYtPm5ldGRldl9vcHMgPT0gJnR1bl9uZXRkZXZfb3BzKQorCQkJdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJZWxzZSBpZiAoKGlmci0+aWZyX2ZsYWdzICYgSUZGX1RBUCkgJiYgZGV2LT5uZXRkZXZfb3BzID09ICZ0YXBfbmV0ZGV2X29wcykKKwkJCXR1biA9IG5ldGRldl9wcml2KGRldik7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIENoZWNrIHBlcm1pc3Npb25zICovCi0JCWlmICgoKHR1bi0+b3duZXIgIT0gLTEgJiYKLQkJICAgICAgY3JlZC0+ZXVpZCAhPSB0dW4tPm93bmVyKSB8fAotCQkgICAgICh0dW4tPmdyb3VwICE9IC0xICYmCi0JCSAgICAgIGNyZWQtPmVnaWQgIT0gdHVuLT5ncm91cCkpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQorCQllcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9Ci0JZWxzZSBpZiAoX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZSB7CiAJCWNoYXIgKm5hbWU7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtNzcxLDI1ICs5MDcsNDUgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKwkJZGV2LT5ydG5sX2xpbmtfb3BzID0gJnR1bl9saW5rX29wczsKIAogCQl0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCQl0dW4tPmRldiA9IGRldjsKIAkJdHVuLT5mbGFncyA9IGZsYWdzOwogCQl0dW4tPnR4Zmx0LmNvdW50ID0gMDsKIAorCQllcnIgPSAtRU5PTUVNOworCQlzayA9IHNrX2FsbG9jKG5ldCwgQUZfVU5TUEVDLCBHRlBfS0VSTkVMLCAmdHVuX3Byb3RvKTsKKwkJaWYgKCFzaykKKwkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCisJCS8qIFRoaXMgcmVmIGNvdW50IGlzIGZvciB0dW4tPnNrLiAqLworCQlkZXZfaG9sZChkZXYpOworCQlzb2NrX2luaXRfZGF0YSgmdHVuLT5zb2NrZXQsIHNrKTsKKwkJc2stPnNrX3dyaXRlX3NwYWNlID0gdHVuX3NvY2tfd3JpdGVfc3BhY2U7CisJCXNrLT5za19kZXN0cnVjdCA9IHR1bl9zb2NrX2Rlc3RydWN0OworCQlzay0+c2tfc25kYnVmID0gSU5UX01BWDsKKwkJc2stPnNrX3NsZWVwID0gJnRmaWxlLT5yZWFkX3dhaXQ7CisKKwkJdHVuLT5zayA9IHNrOworCQljb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW4gPSB0dW47CisKIAkJdHVuX25ldF9pbml0KGRldik7CiAKIAkJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKIAkJCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKIAkJCWlmIChlcnIgPCAwKQotCQkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCQkJCWdvdG8gZXJyX2ZyZWVfc2s7CiAJCX0KIAorCQllcnIgPSAtRUlOVkFMOwogCQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0JCWxpc3RfYWRkKCZ0dW4tPmxpc3QsICZ0bi0+ZGV2X2xpc3QpOworCQllcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9zZXRfaWZmXG4iLCB0dW4tPmRldi0+bmFtZSk7CkBAIC04MDksMTAgKzk2NSw2IEBACiAJZWxzZQogCQl0dW4tPmZsYWdzICY9IH5UVU5fVk5FVF9IRFI7CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSB0dW47Ci0JdHVuLT5hdHRhY2hlZCA9IDE7Ci0JZ2V0X25ldChkZXZfbmV0KHR1bi0+ZGV2KSk7Ci0KIAkvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW4KIAkgKiB4b2ZmIHN0YXRlLgogCSAqLwpAQCAtODIyLDYgKzk3NCw4IEBACiAJc3RyY3B5KGlmci0+aWZyX25hbWUsIHR1bi0+ZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIAorIGVycl9mcmVlX3NrOgorCXNvY2tfcHV0KHNrKTsKICBlcnJfZnJlZV9kZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKICBmYWlsZWQ6CkBAIC04MzAsNyArOTg0LDcgQEAKIAogc3RhdGljIGludCB0dW5fZ2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOwogCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwpAQCAtODU1LDYgKzEwMDksNyBAQAogCWlmICh0dW4tPmZsYWdzICYgVFVOX1ZORVRfSERSKQogCQlpZnItPmlmcl9mbGFncyB8PSBJRkZfVk5FVF9IRFI7CiAKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMSwzMiArMTA1NiwxNyBAQAogc3RhdGljIGludCB0dW5fY2hyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXZvaWQgX191c2VyKiBhcmdwID0gKHZvaWQgX191c2VyKilhcmc7CiAJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgc25kYnVmOwogCWludCByZXQ7CiAKIAlpZiAoY21kID09IFRVTlNFVElGRiB8fCBfSU9DX1RZUEUoY21kKSA9PSAweDg5KQogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgYXJncCwgc2l6ZW9mIGlmcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChjbWQgPT0gVFVOU0VUSUZGICYmICF0dW4pIHsKLQkJaW50IGVycjsKLQotCQlpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOwotCi0JCXJ0bmxfbG9jaygpOwotCQllcnIgPSB0dW5fc2V0X2lmZihjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsIGZpbGUsICZpZnIpOwotCQlydG5sX3VubG9jaygpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mKGlmcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChjbWQgPT0gVFVOR0VURkVBVFVSRVMpIHsKIAkJLyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogIndoYXQgSUZGIGZsYWdzIGFyZSB2YWxpZD8iLgogCQkgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5ldmVyIGNoZWNrZWQgZm9yIGludmFsaWQgZmxhZ3Mgb24KQEAgLTkzNiwxOSArMTA3NiwzOSBAQAogCQkJCSh1bnNpZ25lZCBpbnQgX191c2VyKilhcmdwKTsKIAl9CiAKKwl0dW4gPSBfX3R1bl9nZXQodGZpbGUpOworCWlmIChjbWQgPT0gVFVOU0VUSUZGICYmICF0dW4pIHsKKwkJaW50IGVycjsKKworCQlpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOworCisJCXJ0bmxfbG9jaygpOworCQllcnIgPSB0dW5fc2V0X2lmZih0ZmlsZS0+bmV0LCBmaWxlLCAmaWZyKTsKKwkJcnRubF91bmxvY2soKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIHNpemVvZihpZnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisKKwogCWlmICghdHVuKQogCQlyZXR1cm4gLUVCQURGRDsKIAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX2lvY3RsIGNtZCAlZFxuIiwgdHVuLT5kZXYtPm5hbWUsIGNtZCk7CiAKKwlyZXQgPSAwOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUVU5HRVRJRkY6CiAJCXJldCA9IHR1bl9nZXRfaWZmKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgZmlsZSwgJmlmcik7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YoaWZyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBUVU5TRVROT0NTVU06CkBAIC0xMDAwLDcgKzExNjAsNyBAQAogCQkJcmV0ID0gMDsKIAkJfQogCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OworCQlicmVhazsKIAogI2lmZGVmIFRVTl9ERUJVRwogCWNhc2UgVFVOU0VUREVCVUc6CkBAIC0xMDExLDI0ICsxMTcxLDI1IEBACiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBzZXRfb2ZmbG9hZCh0dW4tPmRldiwgYXJnKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKIAljYXNlIFRVTlNFVFRYRklMVEVSOgogCQkvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi8KKwkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKCh0dW4tPmZsYWdzICYgVFVOX1RZUEVfTUFTSykgIT0gVFVOX1RBUF9ERVYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gdXBkYXRlX2ZpbHRlcigmdHVuLT50eGZsdCwgKHZvaWQgX191c2VyICopYXJnKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKIAljYXNlIFNJT0NHSUZIV0FERFI6CiAJCS8qIEdldCBodyBhZGRyZXMgKi8KIAkJbWVtY3B5KGlmci5pZnJfaHdhZGRyLnNhX2RhdGEsIHR1bi0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCQlpZnIuaWZyX2h3YWRkci5zYV9mYW1pbHkgPSB0dW4tPmRldi0+dHlwZTsKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YgaWZyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCiAJY2FzZSBTSU9DU0lGSFdBRERSOgogCQkvKiBTZXQgaHcgYWRkcmVzcyAqLwpAQCAtMTAzOCwxOCArMTE5OSwzNSBAQAogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gZGV2X3NldF9tYWNfYWRkcmVzcyh0dW4tPmRldiwgJmlmci5pZnJfaHdhZGRyKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisKKwljYXNlIFRVTkdFVFNOREJVRjoKKwkJc25kYnVmID0gdHVuLT5zay0+c2tfc25kYnVmOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZzbmRidWYsIHNpemVvZihzbmRidWYpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBUVU5TRVRTTkRCVUY6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc25kYnVmLCBhcmdwLCBzaXplb2Yoc25kYnVmKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCXR1bi0+c2stPnNrX3NuZGJ1ZiA9IHNuZGJ1ZjsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfTsKIAotCXJldHVybiAwOworCXR1bl9wdXQodHVuKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHR1bl9jaHJfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOwogCWludCByZXQ7CiAKIAlpZiAoIXR1bikKQEAgLTEwNzEsNDIgKzEyNDksNTAgQEAKIAlyZXQgPSAwOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0dW5fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogeworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7CiAJY3ljbGVfa2VybmVsX2xvY2soKTsKIAlEQkcxKEtFUk5fSU5GTyAidHVuWDogdHVuX2Nocl9vcGVuXG4iKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJdGZpbGUgPSBrbWFsbG9jKHNpemVvZigqdGZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRmaWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhdG9taWNfc2V0KCZ0ZmlsZS0+Y291bnQsIDApOworCXRmaWxlLT50dW4gPSBOVUxMOworCXRmaWxlLT5uZXQgPSBnZXRfbmV0KGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdGZpbGUtPnJlYWRfd2FpdCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdGZpbGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHVuX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CiAKLQlpZiAoIXR1bikKLQkJcmV0dXJuIDA7CiAKLQlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9jbG9zZVxuIiwgdHVuLT5kZXYtPm5hbWUpOworCWlmICh0dW4pIHsKKwkJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfY2xvc2VcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKIAotCXJ0bmxfbG9jaygpOworCQlydG5sX2xvY2soKTsKKwkJX190dW5fZGV0YWNoKHR1bik7CiAKLQkvKiBEZXRhY2ggZnJvbSBuZXQgZGV2aWNlICovCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQl0dW4tPmF0dGFjaGVkID0gMDsKLQlwdXRfbmV0KGRldl9uZXQodHVuLT5kZXYpKTsKKwkJLyogSWYgZGVzaXJlYWJsZSwgdW5yZWdpc3RlciB0aGUgbmV0ZGV2aWNlLiAqLworCQlpZiAoISh0dW4tPmZsYWdzICYgVFVOX1BFUlNJU1QpKSB7CisJCQlzb2NrX3B1dCh0dW4tPnNrKTsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKKwkJfQogCi0JLyogRHJvcCByZWFkIHF1ZXVlICovCi0Jc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKLQotCWlmICghKHR1bi0+ZmxhZ3MgJiBUVU5fUEVSU0lTVCkpIHsKLQkJbGlzdF9kZWwoJnR1bi0+bGlzdCk7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKKwkJcnRubF91bmxvY2soKTsKIAl9CiAKLQlydG5sX3VubG9jaygpOworCXB1dF9uZXQodGZpbGUtPm5ldCk7CisJa2ZyZWUodGZpbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg3LDcgKzEzNzMsNyBAQAogc3RhdGljIHUzMiB0dW5fZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gdHVuLT5hdHRhY2hlZDsKKwlyZXR1cm4gISF0dW4tPnRmaWxlOwogfQogCiBzdGF0aWMgdTMyIHR1bl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTIxNiw0NSArMTQwMiw2IEBACiAJLnNldF9yeF9jc3VtCT0gdHVuX3NldF9yeF9jc3VtCiB9OwogCi1zdGF0aWMgaW50IHR1bl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0Jc3RydWN0IHR1bl9uZXQgKnRuOwotCi0JdG4gPSBrbWFsbG9jKHNpemVvZigqdG4pLCBHRlBfS0VSTkVMKTsKLQlpZiAodG4gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlJTklUX0xJU1RfSEVBRCgmdG4tPmRldl9saXN0KTsKLQotCWlmIChuZXRfYXNzaWduX2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkLCB0bikpIHsKLQkJa2ZyZWUodG4pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdHVuX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlzdHJ1Y3QgdHVuX25ldCAqdG47Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgKm54dDsKLQotCXRuID0gbmV0X2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkKTsKLQotCXJ0bmxfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0dW4sIG54dCwgJnRuLT5kZXZfbGlzdCwgbGlzdCkgewotCQlEQkcoS0VSTl9JTkZPICIlcyBjbGVhbmVkIHVwXG4iLCB0dW4tPmRldi0+bmFtZSk7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQotCWtmcmVlKHRuKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB0dW5fbmV0X29wcyA9IHsKLQkuaW5pdCA9IHR1bl9pbml0X25ldCwKLQkuZXhpdCA9IHR1bl9leGl0X25ldCwKLX07CiAKIHN0YXRpYyBpbnQgX19pbml0IHR1bl9pbml0KHZvaWQpCiB7CkBAIC0xMjYzLDEwICsxNDEwLDEwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidHVuOiAlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCXByaW50ayhLRVJOX0lORk8gInR1bjogJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCi0JcmV0ID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7CisJcmV0ID0gcnRubF9saW5rX3JlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0dW46IENhbid0IHJlZ2lzdGVyIHBlcm5ldCBvcHNcbiIpOwotCQlnb3RvIGVycl9wZXJuZXQ7CisJCXByaW50ayhLRVJOX0VSUiAidHVuOiBDYW4ndCByZWdpc3RlciBsaW5rX29wc1xuIik7CisJCWdvdG8gZXJyX2xpbmtvcHM7CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmdHVuX21pc2NkZXYpOwpAQCAtMTI3NCwxOCArMTQyMSwxNyBAQAogCQlwcmludGsoS0VSTl9FUlIgInR1bjogQ2FuJ3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2UgJWRcbiIsIFRVTl9NSU5PUik7CiAJCWdvdG8gZXJyX21pc2M7CiAJfQotCXJldHVybiAwOwotCisJcmV0dXJuICAwOwogZXJyX21pc2M6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOwotZXJyX3Blcm5ldDoKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmdHVuX2xpbmtfb3BzKTsKK2Vycl9saW5rb3BzOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHR1bl9jbGVhbnVwKHZvaWQpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOworCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogfQogCiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmggYi9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MmQ2OWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi1maXJtd2FyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzc3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCi0gKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKLSAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKLSAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCi0gKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKLSAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KLSAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCi0gKi8KLQotIC8qIHZlciAwMy4wMDEuMDA4ICovCi1zdGF0aWMgY29uc3QgdTggdHlwaG9vbl9maXJtd2FyZV9pbWFnZVtdID0gewotMHg1NCwgMHg1OSwgMHg1MCwgMHg0OCwgMHg0ZiwgMHg0ZiwgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4Y2IsIDB4OTksIDB4YjEsIDB4ZDQsCi0weDRjLCAweGI4LCAweGQwLCAweDRiLCAweDMyLCAweDAyLCAweGQ0LCAweGVlLCAweDczLCAweDdlLCAweDBiLCAweDEzLAotMHg5YiwgMHhjMCwgMHhhZSwgMHhmNCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmYywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MzksIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4ZWEsCi0weDA0LCAweDAwLCAweDAwLCAweGVhLCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDAwLCAweGVhLAotMHgwMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgzMiwgMHgwMiwgMHgwMCwgMHhlYSwgMHhjNSwgMHgxNCwgMHgwMCwgMHhlYSwKLTB4MDcsIDB4MDAsIDB4MmQsIDB4ZTksIDB4MGUsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4MGYsIDB4ZTEsCi0weGQwLCAweDIwLCAweDlmLCAweGU1LCAweDEyLCAweGZmLCAweDJmLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAotMHgwMSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwNCwgMHgyMCwgMHg4MSwgMHhlNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHhlMSwKLTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4YTAsIDB4ZTEsCi0weDBlLCAweGIwLCAweGEwLCAweGUxLCAweDAwLCAweDAwLCAweGEwLCAweGUzLCAweGE4LCAweDEwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHhhNCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTMsCi0weDAwLCAweDAwLCAweDgxLCAweGU1LCAweGQ3LCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg4OCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkYiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4N2MsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDc0LCAweGQwLCAweDlmLCAweGU1LCAweGQxLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg2YywgMHhkMCwgMHg5ZiwgMHhlNSwgMHg5YiwgMHgxNCwgMHgwMCwgMHhlYiwgMHhkMywgMHgwMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4NjAsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4NjAsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDYwLCAweDEwLCAweDlmLCAweGU1LCAweDYwLCAweDIwLCAweDlmLCAweGU1LCAweGRiLCAweGZmLCAweGZmLCAweGViLAotMHg1YywgMHgwMCwgMHg5ZiwgMHhlNSwgMHg1YywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHhhMCwgMHhlMywKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4NTQsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NTQsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weGQ0LCAweGZmLCAweGZmLCAweGViLCAweDBhLCAweDAwLCAweGEwLCAweGUxLCAweDBiLCAweGYwLCAweGEwLCAweGUxLAotMHhkMywgMHgxMCwgMHhhMCwgMHhlMywgMHgwMSwgMHhmMCwgMHgyMSwgMHhlMSwgMHhkNCwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4M2MsIDB4YTAsIDB4OWYsIDB4ZTUsIDB4MWEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4YzYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDE1LCAweDIxLCAweGZmLCAweGZmLCAweDBjLCAweDAwLCAweDEwLCAweDAwLCAweDFjLCAweDAwLCAweDEwLCAweDAwLAotMHgzYywgMHgzOCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzNywgMHgwMCwgMHg4MCwgMHhmYywgMHgzZiwgMHgwMCwgMHg4MCwKLTB4N2MsIDB4MzQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsCi0weGFkLCAweGRlLCAweGFkLCAweGRlLCAweGIwLCAweGJiLCAweDAwLCAweDAwLCAweDI0LCAweGFiLCAweDIwLCAweDQwLAotMHg0OCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhiZCwgMHhiYSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1OCwgMHg1NywgMHgwMCwgMHgwMCwgMHg4NiwgMHg0YiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHhmZiwgMHhmZiwKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NGQsIDB4MDAsIDB4MjQsIDB4MjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDFlLCAweGQwLCAweDM4LCAweDFjLCAweDEwLCAweDQ5LCAweDA0LCAweGYwLCAweDdiLCAweGZkLCAweDI5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHgyOCwgMHgxNSwgMHhkMCwgMHgzOCwgMHgwMSwgMHgwZCwgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4NDEsIDB4NmIsIDB4ODAsIDB4MjksCi0weDBjLCAweGQyLCAweDAxLCAweDMxLCAweDQxLCAweDYzLCAweDI4LCAweDY4LCAweGMxLCAweDY5LCAweGMwLCAweDQ2LAotMHgyOSwgMHg2MCwgMHgzOSwgMHgwNywgMHg0MSwgMHg2MCwgMHgwNCwgMHg2MiwgMHhjNywgMHg2MiwgMHhiMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsCi0weGVlLCAweDA1LCAweDAwLCAweDAwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweDAyLCAweDQ5LCAweDBhLCAweDY4LAotMHhjMCwgMHg0NiwgMHhjMiwgMHg2MSwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDAwLCAweDEwLCAweGEwLCAweGUxLAotMHhjMCwgMHgxMCwgMHg4MSwgMHhlMywgMHgwMSwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsCi0weGMwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHhjMCwgMHgwMCwgMHhjMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4NDAsIDB4MDAsIDB4ODAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLAotMHg4MCwgMHgwMCwgMHgxMCwgMHhlMywgMHg4MCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsCi0weDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweDEzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ZTAsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDIwLCAweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDgwLCAweGUwLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHg2NCwgMHgyOCwgMHgwNCwgMHhkMywKLTB4NjQsIDB4MjAsIDB4MzgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDMsIDB4ZTAsIDB4MzgsIDB4NjMsCi0weDA0LCAweDQ5LCAweDA1LCAweGYwLCAweDAxLCAweGZiLCAweDc4LCAweDYzLCAweGI4LCAweDYzLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4OCwgMHgxMywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4YjQsIDB4MTAsIDB4NGIsIDB4MDAsIDB4MjIsIDB4MWYsIDB4NmIsIDB4NjQsIDB4MmYsIDB4MDMsIDB4ZDIsCi0weDA5LCAweDY4LCAweDA5LCAweDY4LCAweDQ5LCAweDA4LCAweDAyLCAweGQyLCAweDEwLCAweDFjLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHgxOSwgMHgxYywgMHhkYiwgMHg2YiwgMHg0ZiwgMHg2YiwgMHhiYiwgMHg0MiwgMHgwNSwgMHhkMiwKLTB4NDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTgsIDB4MTgsIDB4YzgsIDB4NjMsIDB4ZjEsIDB4ZTcsCi0weDQxLCAweDY4LCAweDA1LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDA0LCAweDQ4LCAweGMxLCAweDZiLAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MywgMHgwMiwgMHgyMCwgMHhlOCwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDE1LCAweDRjLCAweDAwLCAweDIwLCAweDIxLCAweDZiLCAweDY0LCAweDI5LCAweDBiLCAweGQyLCAweGI5LCAweDZlLAotMHg0OSwgMHgwOCwgMHgwOCwgMHhkMywgMHgyMSwgMHg2YywgMHhhMiwgMHg2YiwgMHg5MSwgMHg0MiwgMHgwNywgMHhkMiwKLTB4ZmEsIDB4MWQsIDB4MzksIDB4MzIsIDB4NTIsIDB4OGIsIDB4ODksIDB4MTgsIDB4MjEsIDB4NjQsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLAotMHgzOCwgMHg2YiwgMHgwMiwgMHhmMCwgMHgyZCwgMHhmZSwgMHgzOCwgMHgxYywgMHgwMiwgMHhmMCwgMHhlOCwgMHhmYSwKLTB4MDEsIDB4MjAsIDB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsIDB4YzgsIDB4NzMsIDB4MDUsIDB4NDksCi0weDBhLCAweDZjLCAweDEyLCAweDE4LCAweDBhLCAweDY0LCAweDA0LCAweDQ5LCAweDhhLCAweDZkLCAweDEyLCAweDE4LAotMHg4YSwgMHg2NSwgMHhlNCwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MGEsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDIsIDB4MjMsCi0weDE4LCAweDQwLCAweDA5LCAweDRhLCAweDAwLCAweDIxLCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweGQxLCAweDYzLAotMHgxMSwgMHg2NCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwNiwgMHg0OCwgMHgwNywgMHg2OCwgMHg3YiwgMHgxYywKLTB4MDMsIDB4NjAsIDB4MGEsIDB4MmYsIDB4ZjcsIDB4ZDMsIDB4MDEsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMCwgMHgwYywgMHgxMCwgMHgxOCwgMHgwYSwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MDksIDB4MGMsIDB4NTEsIDB4MTgsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MGMsIDB4MDUsIDB4ZDAsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAwLCAweDBjLCAweDA4LCAweDE4LCAweDAxLCAweDBjLCAweGY5LCAweGQxLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwKLTB4MTgsIDB4ZDAsIDB4NGYsIDB4MDgsIDB4N2IsIDB4MWUsIDB4MDAsIDB4MmYsCi0weDA2LCAweGQwLCAweDA3LCAweDg4LCAweGJhLCAweDE4LCAweDAyLCAweDMwLCAweDFmLCAweDFjLCAweDAxLCAweDNiLAotMHgwMCwgMHgyZiwgMHhmOCwgMHhkMSwgMHg0OSwgMHgwOCwgMHgwMywgMHhkMywgMHgwMCwgMHg4OCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODIsIDB4MTgsIDB4MTAsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDExLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLCAweGY5LCAweGQxLCAweDEwLCAweDA0LCAweDAwLCAweDBjLAotMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4MywgMHg4OSwgMHhjNywgMHg4OSwgMHhmYiwgMHgxOCwKLTB4MDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDAsIDB4N2EsIDB4MDAsIDB4MDIsCi0weGM3LCAweDE4LCAweDM4LCAweDBjLCAweDA1LCAweGQwLCAweDM4LCAweDA0LCAweDAwLCAweDBjLCAweDNiLCAweDBjLAotMHhjNywgMHgxOCwgMHgzOCwgMHgwYywgMHhmOSwgMHhkMSwgMHgwOCwgMHgxYywgMHgxMSwgMHgxYywgMHhmZiwgMHhmNywKLTB4YzgsIDB4ZmYsIDB4MDEsIDB4MWMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjAsIDB4ZmYsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDAyLCAweDIzLCAweDgyLCAweDY4LCAweDFhLCAweDQwLAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgwZiwgMHhkMCwgMHgwYSwgMHg0YSwgMHg5MywgMHg2OSwgMHgwMSwgMHgzMywKLTB4OTMsIDB4NjEsIDB4MGEsIDB4NjgsIDB4OGIsIDB4NjgsIDB4OWEsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MWMsIDB4MTgsCi0weDU3LCAweDgxLCAweDA5LCAweDY5LCAweDEwLCAweDFjLCAweGZmLCAweGY3LCAweGFjLCAweGZmLCAweGMwLCAweDQzLAotMHg2MCwgMHg4MSwgMHgzOCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MjMsIDB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDExLCAweGQwLCAweDRhLCAweDY4LCAweDUyLCAweDA5LCAweDBlLCAweGQzLAotMHgwOSwgMHg0YSwgMHgxMywgMHg2YSwgMHgwMSwgMHgzMywgMHgxMywgMHg2MiwgMHhjYiwgMHg2OCwgMHgwMiwgMHg2OCwKLTB4OWMsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4M2EsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsCi0weDAwLCAweGYwLCAweDJlLCAweGY4LCAweDIwLCAweDgyLCAweDM4LCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHg4MCwgMHgyMywKLTB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZDAsIDB4NGEsIDB4NjgsCi0weDkyLCAweDA5LCAweDEyLCAweGQzLCAweDBiLCAweDRhLCAweGQzLCAweDY5LCAweDAxLCAweDMzLCAweGQzLCAweDYxLAotMHhjYiwgMHg2OCwgMHgwMiwgMHg2OCwgMHg5ZiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzYSwKLTB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDEsCi0weDA0LCAweDQ4LCAweGMwLCAweDQ2LCAweGY4LCAweDgwLCAweDIwLCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4YjAsIDB4YjUsIDB4MTQsIDB4MWMsIDB4MDUsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4NjksIDB4YjksIDB4NjgsCi0weDQxLCAweDE4LCAweDM4LCAweDY4LCAweGZmLCAweGY3LCAweDUzLCAweGZmLCAweGMwLCAweDQzLCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzOSwgMHhmZiwgMHgwNCwgMHgxYywgMHhiOCwgMHg2OCwKLTB4NzksIDB4NjksIDB4NDAsIDB4MTgsIDB4NjksIDB4NjgsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4MmEsIDB4NjgsCi0weDEyLCAweDE4LCAweDA5LCAweDFhLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAweDA1LCAweGY5LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgyNiwgMHhmZiwgMHgwNCwgMHgxYywKLTB4ZTAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweGMwLCAweDA4LCAweDFhLCAweGQzLCAweGI4LCAweDZhLAotMHhmOSwgMHg2YiwgMHg0MCwgMHgxOCwgMHg3OSwgMHg2YywgMHgwMCwgMHhmMCwgMHhlZCwgMHhmOCwgMHhjMCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4NDgsIDB4MDcsIDB4ZDAsIDB4MjAsIDB4MjMsIDB4YjksIDB4NjksCi0weDE5LCAweDQzLCAweGI5LCAweDYxLCAweDAxLCAweDZiLCAweDAxLCAweDMxLCAweDAxLCAweDYzLCAweDA3LCAweGUwLAotMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHhiOSwgMHg2OSwgMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHg0MSwgMHg2YSwKLTB4MDEsIDB4MzEsIDB4NDEsIDB4NjIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweDQxLCAweDA5LAotMHgxYywgMHhkMywgMHhjMCwgMHgwOCwgMHgxYSwgMHhkMywgMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHgwMCwgMHg3YiwKLTB4MDYsIDB4MjgsIDB4MTUsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4ZjgsIDB4MDEsIDB4MWMsCi0weDBhLCAweDQ4LCAweDA3LCAweGQwLCAweDQwLCAweDIzLCAweGI5LCAweDY5LAotMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywgMHgwNywgMHhlMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4YjksIDB4NjksIDB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4YzEsIDB4NmEsCi0weDAxLCAweDMxLCAweGMxLCAweDYyLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHg4MSwgMHgwOSwKLTB4MmMsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MmEsIDB4ZDMsIDB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4MDAsIDB4N2IsCi0weDExLCAweDI4LCAweDI1LCAweGQxLCAweGI4LCAweDZhLCAweDM5LCAweDZjLCAweDQwLCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwNiwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwNSwgMHgwNCwgMHgyZCwgMHgwYywKLTB4MGYsIDB4NGMsIDB4MTEsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWYsIDB4ZjgsIDB4MDAsIDB4MjgsCi0weDBjLCAweGQwLCAweGE4LCAweDQyLCAweDAyLCAweGQxLCAweDBjLCAweDRiLCAweDk4LCAweDQyLCAweDA3LCAweGQwLAotMHg4MCwgMHgyMywgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywgMHhiOCwgMHg2MSwgMHg2MCwgMHg2YiwgMHgwMSwgMHgzMCwKLTB4NjAsIDB4NjMsIDB4MDcsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsCi0weGI4LCAweDYxLCAweGEwLCAweDZhLCAweDAxLCAweDMwLCAweGEwLCAweDYyLCAweDAwLCAweDIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4ZjAsIDB4YjUsIDB4ZmYsIDB4YjAsIDB4OTksIDB4YjAsIDB4MDQsIDB4MWMsIDB4ZTAsIDB4NmIsIDB4NjEsIDB4NmMsCi0weDA5LCAweDE4LCAweDAzLCAweGFhLCAweDg1LCAweDE4LCAweGEzLCAweDZhLCAweDAwLCAweDIwLCAweDhhLCAweDA4LAotMHgwMSwgMHgzMiwgMHg5NywgMHg5MiwgMHgwNywgMHhkMCwgMHg4MiwgMHgwMCwgMHg5ZiwgMHg1OCwgMHgwMywgMHhhZSwKLTB4YjcsIDB4NTAsIDB4OTcsIDB4OWEsIDB4MDEsIDB4MzAsIDB4ODIsIDB4NDIsIDB4ZjcsIDB4ZDgsIDB4NjAsIDB4NmEsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDA0LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LAotMHgwMiwgMHg5MCwgMHgwMiwgMHhhZiwgMHgzZiwgMHg4OCwgMHgwMywgMHhhOCwgMHhmZiwgMHhmNywgMHg4NywgMHhmZSwKLTB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmQsIDB4ZmUsCi0weDA3LCAweDFjLCAweGUwLCAweDZiLCAweGExLCAweDZjLCAweDQwLCAweDE4LCAweDYxLCAweDZhLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwOCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwKLTB4MDEsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4YTIsIDB4NmEsCi0weDEyLCAweDE4LCAweDA5LCAweDFhLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAweDJmLCAweGY4LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg1MCwgMHhmZSwgMHgwNywgMHgxYywKLTB4YTgsIDB4ODksIDB4ZTksIDB4ODksIDB4MDgsIDB4MTgsIDB4MjksIDB4OGEsIDB4MDgsIDB4MTgsIDB4NjksIDB4OGEsCi0weDA4LCAweDE4LCAweDY5LCAweDdhLCAweDA5LCAweDAyLCAweDA4LCAweDE4LCAweGExLCAweDZjLCAweDYyLCAweDZjLAotMHg4OSwgMHgxYSwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMSwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDksIDB4MTgsIDB4MDgsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4MDQsCi0weDAwLCAweDBjLCAweDA5LCAweDBjLCAweDQxLCAweDE4LCAweDA4LCAweDBjLCAweGY5LCAweGQxLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgyZiwgMHhmZSwgMHhjMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3ZiwgMHhiMCwKLTB4MTksIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI5LCAweDJlLCAweGQwLCAweDgzLCAweDA3LCAweDliLCAweDBmLCAweGRjLCAweDAwLCAweDQ3LCAweDE4LAotMHgwNCwgMHgyNSwgMHhlZiwgMHgxYiwgMHhiZiwgMHgwNywgMHhiZiwgMHgwZiwgMHhmZiwgMHgwMCwgMHg4MCwgMHgwOCwKLTB4ODAsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDMsIDB4MzEsIDB4ODksIDB4MDgsIDB4NGQsIDB4MWUsIDB4MDIsIDB4YzgsCi0weGUxLCAweDQwLCAweGExLCAweDQwLCAweDZiLCAweDFlLCAweDAwLCAweDJkLCAweDA5LCAweGQwLCAweDBjLCAweDA0LAotMHgyNCwgMHgwYywgMHhhMiwgMHgxOCwgMHgwOSwgMHgwYywgMHg4YSwgMHgxOCwgMHgwMiwgMHhjOCwgMHgxYywgMHgxYywKLTB4MDEsIDB4M2IsIDB4MDAsIDB4MmMsIDB4ZjUsIDB4ZDEsIDB4YjksIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZjgsIDB4NDAsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDg5LCAweDE4LCAweDAwLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLAotMHgwNSwgMHhkMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMSwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywKLTB4ZjksIDB4ZDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDkwLCAweGI0LCAweDAwLCAweDIwLCAweDAxLCAweDI3LCAweDExLCAweDQ5LCAweDQyLCAweDAwLCAweDEyLCAweDE4LAotMHhkMiwgMHgwMCwgMHg1MywgMHgxOCwgMHg5YywgMHg2OCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDMsIDB4MWIsIDB4MGIsIDB4OGEsIDB4NTgsCi0weDEyLCAweDAzLCAweDEyLCAweDBiLCAweDkzLCAweDQyLCAweDBjLCAweGQxLCAweDAxLCAweDMwLCAweDA0LCAweDI4LAotMHhlYywgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg2YSwgMHgwMSwgMHgwMywgMHgwOSwgMHgwYiwgMHgwNywgMHg0OCwKLTB4MDAsIDB4NmYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZiLCAweGU3LCAweGE4LCAweDAzLCAweDAwLCAweDgwLAotMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5OCwgMHhiNCwgMHgxNCwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4ODMsIDB4MDAsIDB4MTMsIDB4NDgsIDB4YzAsIDB4NTgsIDB4MDcsIDB4MDMsCi0weDNmLCAweDBiLCAweDEyLCAweDQ4LCAweGMwLCAweDU4LCAweDAyLCAweDAzLCAweDEyLCAweDBiLCAweDExLCAweDQ4LAotMHhjMCwgMHg1OCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHgxMCwgMHg0YywgMHhlNCwgMHg1OCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDEsIDB4MjEsCi0weDk4LCAweDQyLCAweDAxLCAweGQxLCAweDA4LCAweDFjLCAweDA5LCAweGUwLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LAotMHgxMCwgMHgxYSwgMHhkYSwgMHgxYiwgMHg4MCwgMHgxOCwgMHgwMCwgMHhlMCwgMHgxOCwgMHgxYSwgMHg4NCwgMHg0MiwKLTB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4OTgsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weDIwLCAweDA0LCAweDAwLCAweDgwLCAweDI4LCAweDA0LCAweDAwLCAweDgwLCAweDA4LCAweDA0LCAweDAwLCAweDgwLAotMHgxOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgxMywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzYSwKLTB4ODAsIDB4MDAsIDB4MGIsIDB4MWMsIDB4MTMsIDB4NDksIDB4MGYsIDB4NTgsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsCi0weDBiLCAweDU4LCAweGMwLCAweDQ2LCAweDVhLCAweDYwLCAweDBhLCAweDU4LCAweDA4LCAweDMyLCAweDEwLCAweDRiLAotMHgxYiwgMHg1OCwgMHg5YSwgMHg0MiwgMHgwMSwgMHhkMywgMHgwZiwgMHg0YSwgMHgxMiwgMHg1OCwgMHgwZiwgMHg0YiwKLTB4MWYsIDB4NTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsCi0weDE3LCAweDAzLCAweDNmLCAweDBiLCAweDlmLCAweDQyLCAweDA2LCAweGQxLCAweDBhLCAweDQ4LCAweGMxLCAweDY4LAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MCwgMHgwMSwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwOCwgMHg0YiwKLTB4MWIsIDB4NTgsIDB4YzAsIDB4NDYsIDB4MWEsIDB4NjAsIDB4MGEsIDB4NTAsIDB4MDAsIDB4MjAsIDB4ZjYsIDB4ZTcsCi0weDA4LCAweDA0LCAweDAwLCAweDgwLCAweDI4LCAweDA0LCAweDAwLCAweDgwLCAweDIwLCAweDA0LCAweDAwLCAweDgwLAotMHgxOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4ZmYsIDB4NWYsIDB4MmQsIDB4ZTksIDB4NDgsIDB4ZmUsIDB4ZmYsIDB4ZWIsIDB4MDEsIDB4YjYsIDB4YTAsIDB4ZTMsCi0weDAxLCAweGIxLCAweDhiLCAweGUyLCAweDAyLCAweDhhLCAweGEwLCAweGUzLCAweDAxLCAweDdhLCAweGEwLCAweGUzLAotMHgwMSwgMHhhOSwgMHhhMCwgMHhlMywgMHgwMSwgMHg1NiwgMHhhMCwgMHhlMywgMHhjOCwgMHg2MCwgMHg5ZiwgMHhlNSwKLTB4YzgsIDB4OTAsIDB4OWYsIDB4ZTUsIDB4MTQsIDB4NDAsIDB4OWIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZTMsCi0weDJjLCAweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDBhLCAweDE0LCAweGUzLCAweDExLCAweDAwLCAweDAwLCAweDBhLAotMHgwYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg1MCwgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsCi0weDAxLCAweDBhLCAweGMwLCAweGUzLCAweDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAotMHgxNCwgMHg3MCwgMHg4NSwgMHhlNSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwYSwgMHgxNCwgMHhlMywKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDIsIDB4MGEsIDB4YzAsIDB4ZTMsCi0weDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LCAweDE0LCAweDgwLCAweDg1LCAweGU1LAotMHgwMSwgMHgwOSwgMHgxNCwgMHhlMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwKLTB4MDEsIDB4MDksIDB4YzAsIDB4ZTMsIDB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweGEwLCAweDg1LCAweGU1LCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDQwLCAweDAwLCAweDAwLCAweDFiLAotMHgwMSwgMHgwMCwgMHgxNCwgMHhlMywgMHg1NCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwYiwgMHgxNCwgMHhlMywKLTB4NjcsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDEsIDB4MGIsIDB4MTQsIDB4ZTMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDE4LCAweDAwLCAweDk5LCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDE4LCAweDAwLCAweDg5LCAweGU1LAotMHhkNSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMSwgMHgwYSwgMHhjMCwgMHhlMywKLTB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweDcwLCAweDg1LCAweGU1LCAweGUxLCAweGZmLCAweGZmLCAweGVhLCAweGZmLCAweDVmLCAweGJkLCAweGU4LAotMHgwNCwgMHhmMCwgMHg1ZSwgMHhlMiwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4MTAsIDB4MTAsIDB4MWYsIDB4ZTUsIDB4MTQsIDB4MzAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4YzMsIDB4ZTEsCi0weDE0LCAweDIwLCAweDgxLCAweGU1LCAweDAxLCAweDE2LCAweGEwLCAweGUzLCAweDBjLCAweDIwLCAweDgxLCAweGU1LAotMHgwYiwgMHgxMiwgMHhhMCwgMHhlMywgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHgxOCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4YjAsIDB4MjQsIDB4ZDEsIDB4ZTEsIDB4MDEsIDB4MjAsIDB4ODIsIDB4ZTIsIDB4YjAsIDB4MjQsIDB4YzEsIDB4ZTEsCi0weDNjLCAweDIwLCAweDkxLCAweGU1LCAweDAwLCAweDAwLCAweDgyLCAweGUxLCAweDNjLCAweDAwLCAweDgxLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDEsIDB4MGIsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsCi0weDE0LCAweDAwLCAweDgxLCAweGU1LCAweDAwLCAweDFhLCAweDgxLCAweGUxLCAweDI0LCAweDIwLCAweDkxLCAweGU1LAotMHg3MCwgMHgwMCwgMHgxZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgyMCwgMHg4MCwgMHhlNSwKLTB4MjgsIDB4MTAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTAsIDB4ODAsIDB4ZTUsCi0weDJjLCAweDIwLCAweDkwLCAweGU1LCAweDAxLCAweDIwLCAweDgyLCAweGUyLCAweDJjLCAweDIwLCAweDgwLCAweGU1LAotMHgzZiwgMHgwMCwgMHgwMSwgMHhlMiwgMHgzZiwgMHgwMCwgMHg1MCwgMHhlMywgMHgxZSwgMHhmZiwgMHgyZiwgMHgxMSwKLTB4MTgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4ODEsIDB4ZTIsCi0weDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAyLCAweDE4LCAweGEwLCAweGUzLCAweDBiLCAweDAyLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDAxLCAweDA4LCAweDExLCAweGUzLCAweDBiLCAweDEwLCAweGEwLCAweGUzLCAweDAyLCAweDE5LCAweDgxLCAweGUyLAotMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgyMCwgMHg5MCwgMHhlNSwgMHg0MiwgMHgyOCwgMHhiMCwgMHhlMSwKLTB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MDIsIDB4MGMsIDB4MTAsIDB4ZTMsCi0weDAyLCAweDAwLCAweDAwLCAweDBhLCAweDA2LCAweDA3LCAweGEwLCAweGUzLCAweDRjLCAweDExLCAweDgwLCAweGU1LAotMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwYywgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDA2LCAweGEwLCAweGUzLCAweDAxLCAweDAxLCAweDgwLCAweGUyLAotMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgwOCwgMHgxMSwgMHhlMywgMHgwYywgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDIsIDB4MTksIDB4ODEsIDB4ZTIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MjAsIDB4OTAsIDB4ZTUsCi0weDQyLCAweDI4LCAweGIwLCAweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDkwLCAweGU1LAotMHgwMiwgMHgwYywgMHgxMCwgMHhlMywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNiwgMHgwNywgMHhhMCwgMHhlMywKLTB4NGMsIDB4MTEsIDB4ODAsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4NGMsIDB4MDAsIDB4MWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweDgwLCAweGU1LCAweGZmLCAweGZmLCAweGZmLCAweGVhLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMiwgMHgxYiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywKLTB4MTQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4MjEsIDB4MWYsIDB4ZTUsCi0weDE0LCAweDMwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweGU1LAotMHgxYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MTQsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsCi0weDFjLCAweDEwLCAweDgyLCAweGU1LCAweDBjLCAweDEwLCAweDgwLCAweGU1LCAweDFjLCAweDEwLCAweDkyLCAweGU1LAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4YzAsIDB4MjEsIDB4MWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAxLCAweDE2LCAweGEwLCAweGUzLCAweDE0LCAweDAwLCAweDgyLCAweGU1LCAweDBjLCAweDAwLCAweDgxLCAweGU1LAotMHgxYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDE3LCAweGY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHg5MiwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDksIDB4ZjgsIDB4MDAsIDB4MjgsCi0weDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDg0LCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNCwgMHgwNywgMHg2OCwgMHgzYSwgMHg3OCwgMHhkMiwgMHgwNywKLTB4ZDIsIDB4MGYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4ZmYsIDB4MjIsIDB4MDEsIDB4MzIsCi0weDQyLCAweDYwLCAweDAwLCAweGUwLCAweDQ0LCAweDYwLCAweDNhLCAweDdiLCAweDdiLCAweDdiLCAweDFiLCAweDAyLAotMHgxYSwgMHg0MywgMHg4MSwgMHgyYSwgMHgwOCwgMHhkMSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg0MiwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4MDQsIDB4MjIsIDB4YmYsIDB4MTgsIDB4ODIsIDB4NjAsIDB4MDAsIDB4ZTAsCi0weDg0LCAweDYwLCAweDNhLCAweDdiLCAweDdiLCAweDdiLCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDA4LCAweDJhLAotMHgwNiwgMHhkMSwgMHgwNiwgMHgyMywgMHg0MSwgMHg2OCwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwKLTB4MGUsIDB4MzEsIDB4M2MsIDB4ZTAsIDB4YzEsIDB4MjMsIDB4ZGIsIDB4MDAsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDEsCi0weDQxLCAweDY4LCAweDI0LCAweDRiLCAweDE5LCAweDQzLCAweDNlLCAweGUwLCAweDIzLCAweDRiLCAweDlhLCAweDQyLAotMHgwNCwgMHhkMSwgMHgwMSwgMHgyMywgMHgxYiwgMHgwMywgMHg0MSwgMHg2OCwgMHgxOSwgMHg0MywgMHgzNiwgMHhlMCwKLTB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsCi0weDEyLCAweDBjLCAweDJlLCAweDNhLCAweDFjLCAweDRiLCAweDlhLCAweDQyLCAweDJkLCAweGQ4LCAweDAxLCAweDI1LAotMHg0MiwgMHg2OCwgMHgxNSwgMHg0MywgMHg0NSwgMHg2MCwgMHhiYSwgMHg3YiwgMHhmYiwgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWEsIDB4NDMsIDB4MTgsIDB4NGIsIDB4OWEsIDB4NDIsIDB4MjIsIDB4ZDEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsCi0weDQ0LCAweGNiLCAweDliLCAweDA3LCAweGRiLCAweDBlLCAweGRhLCAweDQwLCAweDViLCAweDQyLCAweDIwLCAweDMzLAotMHg5ZSwgMHg0MCwgMHgxNiwgMHg0MywgMHgwMywgMHgyZSwgMHgxOCwgMHhkMSwgMHgzOSwgMHg3ZCwgMHg3YiwgMHg3ZCwKLTB4MWIsIDB4MDIsIDB4MTksIDB4NDMsIDB4MDgsIDB4MjksIDB4MDcsIDB4ZDEsIDB4MDQsIDB4MjEsIDB4MjksIDB4NDMsCi0weDQxLCAweDYwLCAweDgxLCAweDY4LCAweDE2LCAweDMxLCAweDgxLCAweDYwLCAweDAxLCAweDIxLCAweDBhLCAweGUwLAotMHhjMSwgMHgyMywgMHhkYiwgMHgwMCwgMHg5OSwgMHg0MiwgMHgwNCwgMHhkMSwgMHgwMSwgMHgyMSwgMHg4OSwgMHgwMywKLTB4MjksIDB4NDMsIDB4NDEsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4ODQsIDB4NjAsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MWMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDgwLCAweDAwLCAweDAwLAotMHhhZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhYSwgMHhhYSwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNCwgMHg0MiwgMHg2OCwKLTB4ZDEsIDB4MDgsIDB4M2YsIDB4ZDMsIDB4MDEsIDB4NjgsIDB4ODMsIDB4NjgsIDB4NTksIDB4MTgsIDB4MDIsIDB4MzksCi0weDhmLCAweDc4LCAweDNmLCAweDA3LCAweDNmLCAweDBmLCAweDA1LCAweDJmLCAweDAzLCAweGQxLCAweGRhLCAweDFkLAotMHgwZCwgMHgzMiwgMHhjMiwgMHg2MCwgMHgwNSwgMHhlMCwgMHhiZiwgMHgwMCwgMHhkYiwgMHgxOSwgMHhjMywgMHg2MCwKLTB4MDgsIDB4MjMsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4OGEsIDB4NzgsIDB4MTIsIDB4MDcsIDB4MTIsIDB4MGYsCi0weDkyLCAweDAwLCAweDAyLCAweDYxLCAweDBhLCAweDc5LCAweDRiLCAweDc5LCAweDFiLCAweDAyLCAweDFhLCAweDQzLAotMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4NDIsIDB4NjEsIDB4Y2EsIDB4N2EsIDB4MDYsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4MTAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDEwLCAweGUwLCAweDExLCAweDJhLCAweDAzLCAweGQxLCAweDIwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwYSwgMHhlMCwgMHgzMywgMHgyYSwgMHgwMywgMHhkMSwgMHg0MCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MzIsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4ODAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweGM5LCAweDdhLCAweGMwLCAweDQ2LCAweDAxLCAweDc2LAotMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwYSwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MCwgMHg0YiwgMHg3OCwKLTB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4OGIsIDB4NzgsIDB4MWIsIDB4MDQsIDB4MWEsIDB4NDMsCi0weDAyLCAweDYwLCAweGM5LCAweDc4LCAweDA5LCAweDA2LCAweDExLCAweDQzLCAweDAxLCAweDYwLCAweDcwLCAweDQ3LAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHg0OCwgMHg2OCwgMHg4MCwgMHgwOSwgMHgyNiwgMHhkMywgMHhiOCwgMHg2YSwKLTB4YzksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDIsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDExLCAweDIzLCAweDliLCAweDAyLCAweDk4LCAweDQyLAotMHgxOCwgMHhkMSwgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjIsIDB4MzgsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4ZGEsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsCi0weDk1LCAweGZkLCAweDAxLCAweDIwLCAweDA3LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDczLCAweDA3LCAweDQ5LAotMHg0YSwgMHg2YywgMHgxMiwgMHgxOCwgMHg0YSwgMHg2NCwgMHgwNiwgMHg0OSwgMHg4YSwgMHg2ZCwgMHgxMiwgMHgxOCwKLTB4OGEsIDB4NjUsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmEsIDB4ZTcsCi0weDE4LCAweDFhLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHg4MSwgMHgwNywgMHgxOSwgMHhkMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDEsIDB4MWQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDIsIDB4MDIsCi0weDEyLCAweDBlLCAweDEyLCAweDA2LCAweDAwLCAweDBhLCAweGZmLCAweDIzLCAweDFiLCAweDA0LCAweDE4LCAweDQwLAotMHgxMCwgMHg0MywgMHgwYSwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxMCwgMHg0MywgMHgwOSwgMHgwMiwKLTB4MWIsIDB4MGEsIDB4MTksIDB4NDAsIDB4MDgsIDB4NDMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAxLCAweDA2LCAweDAyLCAweDAyLCAweGZmLCAweDIzLCAweDFiLCAweDA0LAotMHgxYSwgMHg0MCwgMHgxMSwgMHg0MywgMHgwMiwgMHgwYSwgMHgxYiwgMHgwYSwgMHgxYSwgMHg0MCwgMHgxMSwgMHg0MywKLTB4MDAsIDB4MGUsIDB4MDgsIDB4NDMsIDB4ZWQsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MjMsCi0weDgxLCAweDZiLCAweDE5LCAweDQwLCAweDAwLCAweDIyLCAweDAwLCAweDI5LCAweDQ2LCAweGQwLCAweGM3LCAweDFkLAotMHgzOSwgMHgzNywgMHgzOSwgMHg3YiwgMHgzMywgMHgyOSwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOSwgMHgzZiwgMHhkMSwKLTB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGEsIDB4NjUsIDB4YzQsIDB4MWQsIDB4MmQsIDB4MzQsIDB4Y2QsIDB4MWQsCi0weDJkLCAweDM1LCAweDAwLCAweDIyLCAweDkzLCAweDAwLCAweGU2LCAweDU4LCAweGMwLCAweDQ2LCAweGVlLCAweDUwLAotMHgwMSwgMHgzMiwgMHgwNywgMHgyYSwgMHhmOCwgMHhkMywgMHg4MiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0YSwgMHg2MywKLTB4ODIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjIsIDB4N2EsIDB4OGIsIDB4Y2IsIDB4MWQsIDB4MzksIDB4MzMsCi0weDVhLCAweDgzLCAweDQwLCAweDZhLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLCAweDEyLCAweDQ4LCAweDAxLCAweDI3LAotMHg0MiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMCwgMHhkMSwgMHhjMiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMywgMHhkMSwKLTB4NDIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsIDB4MDEsIDB4NjEsIDB4YzEsIDB4NjAsIDB4MDEsIDB4NmEsCi0weDAyLCAweDI5LCAweDAyLCAweGQzLCAweDIwLCAweDMwLCAweDA3LCAweDcxLCAweDBjLCAweGUwLCAweDAwLCAweGYwLAotMHgxMywgMHhmOCwgMHgwOSwgMHhlMCwgMHhjMiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMSwgMHgwMSwgMHg2MSwKLTB4YzEsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4MDIsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTEsIDB4NjUsIDB4MDEsIDB4NjEsCi0weDM4LCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDEwLCAweDFjLCAweGZhLCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgxZSwgMHg0OSwgMHgwMCwgMHgyMiwgMHhjYiwgMHg2OCwKLTB4MDAsIDB4MmIsIDB4MzQsIDB4ZDAsIDB4YzgsIDB4MWQsIDB4ZjksIDB4MzAsIDB4ODMsIDB4NjIsIDB4Y2IsIDB4NjgsCi0weDliLCAweDZhLCAweGMwLCAweDQ2LCAweGMzLCAweDYyLCAweGNmLCAweDY5LCAweDdiLCAweDAwLCAweGRmLCAweDE5LAotMHg3ZiwgMHgwMiwgMHgxNywgMHg0YiwgMHhmZiwgMHgxOCwgMHhmZiwgMHgzNywgMHg2NSwgMHgzNywgMHg4MywgMHg2MywKLTB4MDcsIDB4NjMsIDB4Y2IsIDB4MWQsIDB4ZmYsIDB4MzMsIDB4NWEsIDB4MzMsIDB4MWEsIDB4NzIsIDB4Y2IsIDB4NjksCi0weDAwLCAweDJiLCAweDAxLCAweGQwLCAweGNhLCAweDYxLCAweDAxLCAweGUwLCAweDAxLCAweDIzLCAweGNiLCAweDYxLAotMHgwZiwgMHgxYywgMHhjOSwgMHg2OCwgMHg0OSwgMHg2YSwgMHgwOSwgMHg4OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywKLTB4ZjgsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4M2EsIDB4MzAsIDB4NDIsIDB4NjAsIDB4MDIsIDB4ODIsIDB4ODIsIDB4NjAsCi0weGMyLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNlLCAweGZhLCAweDM4LCAweDZhLCAweDAxLCAweDMwLAotMHgzOCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwYSwgMHhmOCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLCAweGY5LCAweDFkLCAweGY5LCAweDMxLAotMHg4OCwgMHg2YSwgMHhjMiwgMHgxZCwgMHgyZCwgMHgzMiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMiwKLTB4MWEsIDB4NDMsIDB4YzgsIDB4NmEsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4ODAsIDB4MTgsCi0weDgyLCAweDc5LCAweGMzLCAweDc5LCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDEzLCAweDAyLCAweDEyLCAweDBhLAotMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMiwgMHgzOCwKLTB4OTIsIDB4MDQsIDB4OTIsIDB4MGMsIDB4MDAsIDB4MjYsIDB4MjUsIDB4NGQsCi0weGVjLCAweDFkLCAweGZmLCAweDM0LCAweDNhLCAweDM0LCAweDAwLCAweDJhLCAweDA0LCAweGQwLCAweDIwLCAweDhhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOCwgMHg0MywgMHgyYiwgMHhlMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4YzIsIDB4MWQsIDB4MGQsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MzAsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDEwLCAweDQzLCAweDAzLCAweDFjLAotMHhmOCwgMHgxZCwgMHhmZiwgMHgzMCwgMHg0YSwgMHgzMCwgMHg4MiwgMHg3OCwgMHhjOCwgMHg2YiwgMHgxOSwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZGEsIDB4MjAsIDB4OGEsIDB4ZmYsIDB4MjMsCi0weDAxLCAweDMzLCAweDE4LCAweDQzLCAweDBlLCAweGUwLCAweGY5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLAotMHgwOCwgMHg2MCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxYywgMHhmOCwKLTB4MDAsIDB4MjgsIDB4MTQsIDB4ZDEsIDB4MjAsIDB4OGEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MTgsIDB4NDMsCi0weDIwLCAweDgyLCAweDIxLCAweDhhLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGEyLCAweGZiLCAweGU4LCAweDY4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1NCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4ZTgsIDB4NjAsIDB4MzAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsCi0weGZhLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDA3LCAweDFjLAotMHhmYywgMHgxZCwgMHhmOSwgMHgzNCwgMHhhMCwgMHg2YiwgMHhhNiwgMHg2YSwgMHhjNSwgMHgxZCwgMHgwZCwgMHgzNSwKLTB4MzgsIDB4NDgsIDB4YzAsIDB4NmEsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDIsIDB4MTgsCi0weDAxLCAweDIwLCAweDgwLCAweDA3LCAweDEwLCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgwMCwgMHg5MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkMCwgMHgxZCwgMHgwNSwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MzgsIDB4MWMsIDB4MjksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZmEsIDB4YTgsIDB4ODgsCi0weDQxLCAweDA3LCAweDAxLCAweGQwLCAweDAwLCAweDIwLCAweDUxLCAweGUwLCAweDI5LCAweDg5LCAweDA5LCAweDE4LAotMHg2MCwgMHg2YiwgMHg4MSwgMHg0MiwgMHhmOCwgMHhkOCwgMHg2OSwgMHg4OSwgMHhlYSwgMHg4OCwgMHg4OSwgMHgxOCwKLTB4ODEsIDB4NDIsIDB4ZjMsIDB4ZDgsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MjUsIDB4ZDEsIDB4ZTAsIDB4NmEsCi0weGYxLCAweDZiLCAweDQwLCAweDE4LCAweDcxLCAweDZjLCAweGZhLCAweDFkLCAweGNkLCAweDMyLCAweDAxLCAweGYwLAotMHgzMywgMHhmOSwgMHhmYSwgMHgxZCwgMHhmZiwgMHgzMiwgMHgzYSwgMHgzMiwgMHhlMCwgMHg2YSwgMHg1MSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4YzMsIDB4MWQsIDB4MDMsIDB4MzMsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NWUsIDB4NTgsCi0weGM5LCAweDE5LCAweGZmLCAweDMxLCAweDAxLCAweDMxLCAweDRlLCAweDYxLCAweDAxLCAweDMwLCAweDA0LCAweDI4LAotMHhmNiwgMHhkMywgMHhlMCwgMHg2YSwgMHg1MSwgMHg2OSwgMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4NDMsIDB4MDAsIDB4Y2EsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsCi0weGZhLCAweGQzLCAweDI5LCAweDFjLCAweDExLCAweDRhLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweGFlLCAweGZiLAotMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg2MCwgMHg2YiwgMHgwMiwgMHg0MywgMHgwMSwgMHgyMCwgMHgyMSwgMHg2YiwKLTB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmIsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NjAsIDB4NmIsIDB4MDIsIDB4NDMsCi0weDAwLCAweDIwLCAweGUxLCAweDZhLCAweGZmLCAweGY3LCAweDllLCAweGZiLCAweGExLCAweDZiLCAweDA4LCAweDRhLAotMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHg5OSwgMHhmYiwgMHgwMywgMHgyMCwgMHgwNiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDU0LCAweDAwLCAweDAzLCAweDAwLCAweDE0LCAweDAwLCAweDBmLCAweDAwLAotMHg2YywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg4ZCwgMHhiMCwgMHgwMCwgMHgyMCwgMHhiNSwgMHg0YSwKLTB4ZDUsIDB4MWQsIDB4ZjksIDB4MzUsIDB4NjgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4YjMsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGE4LCAweDZhLCAweGM0LCAweDFkLCAweDJkLCAweDM0LCAweGIxLCAweDQ4LAotMHhjMCwgMHg2YSwgMHhkNywgMHgxZCwgMHhmZiwgMHgzNywgMHgzYSwgMHgzNywgMHgzOSwgMHg2OCwgMHg0YiwgMHgwMCwKLTB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsCi0weDA1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA4LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOSwgMHg5MCwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwYSwKLTB4MGEsIDB4OTAsIDB4MGEsIDB4OTgsIDB4YTQsIDB4NGUsIDB4MDEsIDB4MjgsIDB4NTksIDB4ZDEsIDB4MjgsIDB4NmIsCi0weGEyLCAweDY4LCAweDgwLCAweDE4LCAweGEyLCAweDRhLCAweDIxLCAweDY5LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHhmMCwgMHgyNiwgMHhmOSwgMHgyOCwgMHg2YiwgMHg3OSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4OTgsIDB4NGIsCi0weGQzLCAweDE4LCAweGZmLCAweDMzLCAweDAxLCAweDMzLCAweDViLCAweDY5LCAweGMwLCAweDQ2LCAweDhiLCAweDUwLAotMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHgzMSwgMHgxYywgMHg4MiwgMHgwMCwKLTB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDQsIDB4YWUsCi0weGIzLCAweDUwLCAweDAxLCAweDMwLCAweDAzLCAweDI4LCAweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDA4LCAweDkwLAotMHg5MCwgMHg0OSwgMHg0MiwgMHgwMCwgMHg4YiwgMHg1YSwgMHhiMiwgMHg1YSwgMHg5MywgMHg0MiwgMHgxMywgMHhkMCwKLTB4OGUsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4YjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweDM4LCAweDhhLCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDcxLCAweGUwLCAweDM4LCAweDhhLAotMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHg2ZCwgMHhlMCwgMHgwMCwgMHhmMCwgMHgxMSwgMHhmOSwgMHgwMSwgMHhmMCwKLTB4NjcsIDB4ZmYsIDB4ZjUsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZTMsIDB4ZDMsIDB4MDgsIDB4OTgsCi0weDAwLCAweDI4LCAweDBjLCAweGQxLCAweGI4LCAweDY4LCAweDQxLCAweDFjLCAweGI5LCAweDYwLCAweDAwLCAweDI4LAotMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHgwMiwgMHhlMCwgMHgzOCwgMHg4YSwKLTB4MDQsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODIsIDB4NzgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4NzgsIDB4NjAsCi0weDYyLCAweGUwLCAweDBhLCAweDk4LCAweDAyLCAweDI4LCAweDVmLCAweGQxLCAweDA5LCAweDk4LCAweDQwLCAweDBjLAotMHg3MywgMHhkMywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsCi0weDBjLCAweDM4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDAwLCAweDIxLCAweDhhLCAweDAwLCAweDZiLCAweDRiLAotMHhkNiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNCwgMHhhZSwKLTB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjMsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MWUsCi0weDBjLCAweDkzLCAweDY4LCAweDRhLCAweDE2LCAweDZiLCAweGMwLCAweDQ2LCAweDBiLCAweDk2LCAweDhhLCAweDAwLAotMHgwYywgMHg5YiwgMHg5YiwgMHgxOCwgMHgwYiwgMHg5ZSwgMHg5ZSwgMHgxOSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksCi0weGYxLCAweGQzLCAweDY5LCAweDQ2LCAweDhiLCAweDFjLCAweDA3LCAweDkzLCAweDAwLCAweDIxLCAweDA4LCAweDkxLAotMHgwNCwgMHhhZSwgMHg0YSwgMHgwMCwgMHgwNywgMHg5YiwgMHg5YiwgMHg1YSwgMHhiMiwgMHg1YSwgMHg5MywgMHg0MiwKLTB4MTEsIDB4ZDAsIDB4NTgsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4ZjgsIDB4NjgsCi0weDQxLCAweDFjLCAweGY5LCAweDYwLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDM4LCAweDhhLCAweDIwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMiwgMHhlMCwgMHgzOCwgMHg4YSwgMHg4MCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MiwKLTB4OGYsIDB4ZTcsIDB4MDEsIDB4MzEsIDB4MDYsIDB4MjksIDB4ZTQsIDB4ZDMsIDB4MDgsIDB4OTksIDB4MDAsIDB4MjksCi0weDBkLCAweGQxLCAweGY5LCAweDY4LCAweDRhLCAweDFjLCAweGZhLCAweDYwLCAweDAwLCAweDI5LCAweDA0LCAweGQxLAotMHgzOSwgMHg4YSwgMHgwMiwgMHgyMywgMHgxOSwgMHg0MywgMHgwMywgMHhlMCwgMHgwYywgMHhlMCwgMHgzOSwgMHg4YSwKLTB4MDgsIDB4MjMsIDB4MTksIDB4NDMsIDB4MzksIDB4ODIsIDB4MjksIDB4NmIsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDAxLCAweDM4LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDIwLCAweDc2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgxMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDAsIDB4ZTAsIDB4MTksIDB4ZTAsIDB4MzUsIDB4NDgsIDB4MmEsIDB4NmIsCi0weGMwLCAweDQ2LCAweGVhLCAweDYyLCAweDA0LCAweDI5LCAweDRmLCAweGQxLCAweDAxLCAweDIxLCAweGM2LCAweDFkLAotMHhmZiwgMHgzNiwgMHg1YSwgMHgzNiwgMHgzMSwgMHg3MiwgMHgwYSwgMHg5OSwgMHgwMiwgMHgyOSwgMHgxZSwgMHhkMSwKLTB4MDksIDB4OTksIDB4MDksIDB4MGUsIDB4NDksIDB4MDYsIDB4MWEsIDB4ZDEsIDB4ZTEsIDB4MWQsIDB4MDUsIDB4MzEsCi0weDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDM5LCAweDFhLCAweGUwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweGY5LCAweDY4LCAweDRhLCAweDFjLCAweGZhLCAweDYwLCAweDAwLCAweDI5LCAweGJjLCAweGQxLAotMHhiNiwgMHhlNywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMSwgMHgxZCwKLTB4MDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4YTEsIDB4NjAsCi0weGU4LCAweDZhLCAweGMwLCAweDQ2LCAweDIwLCAweDYwLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDg4LCAweGZjLAotMHgyMCwgMHg3ZSwgMHgzMywgMHgyOCwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwMSwgMHgyMSwKLTB4MTQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YjksIDB4NjAsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDg1LCAweGY4LCAweDI4LCAweDZiLCAweGE5LCAweDZhLCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDIwLCAweDFjLAotMHhmZiwgMHhmNywgMHhjMCwgMHhmZCwgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwZSwgMHhlMCwgMHgwMCwgMHgyMCwKLTB4MzAsIDB4NzIsIDB4MTEsIDB4ZTAsIDB4MzMsIDB4MjksIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjksIDB4MGQsIDB4ZDEsCi0weDA3LCAweDFjLCAweDAwLCAweGYwLCAweDcxLCAweGY4LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGIwLCAweGZkLAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMSwgMHhmMCwgMHg3MCwgMHhmZSwgMHgwZCwgMHhiMCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4ZjYsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg0MCwgMHgwNywgMHgwMCwgMHg4MCwgMHg4MiwgMHgwNywgMHgwMCwgMHg4MCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MjUsIDB4NDgsCi0weDQxLCAweDY4LCAweDAxLCAweDMxLCAweDQxLCAweDYwLCAweDI0LCAweDRmLCAweGY5LCAweDFkLCAweGY5LCAweDMxLAotMHgwMCwgMHgyNCwgMHg4OCwgMHg2YSwgMHhmYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5NCwgMHg2MSwgMHgwNCwgMHgyMiwKLTB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NjAsIDB4MTAsIDB4MjIsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDlhLCAweDYxLCAweGZhLCAweDFkLCAweGZmLCAweDMyLCAweDVhLCAweDMyLCAweDEzLCAweDdhLCAweDFiLCAweDRhLAotMHgwMCwgMHgyYiwgMHgwYiwgMHhkMCwgMHgxNSwgMHg4YSwgMHgyZSwgMHgwYSwgMHgzNiwgMHgwMiwgMHgzMywgMHgyMywKLTB4MmIsIDB4NDAsIDB4OWIsIDB4MDAsIDB4MWUsIDB4NDMsIDB4Y2MsIDB4MjMsIDB4MmIsIDB4NDAsIDB4OWIsIDB4MDgsCi0weDMzLCAweDQzLCAweDEzLCAweDgyLCAweDEyLCAweDhhLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDgzLAotMHg0YSwgMHg2YiwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MSwgMHgwYSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4ODIsIDB4NjIsIDB4YzQsIDB4NjIsIDB4YzMsIDB4MWQsIDB4MzksIDB4MzMsIDB4NGEsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDVhLCAweDgzLCAweDA0LCAweDIzLCAweDAyLCAweDY4LCAweDFhLCAweDQzLCAweDAyLCAweDYwLCAweDg4LCAweDZhLAotMHgwMSwgMHhmMCwgMHgzMiwgMHhmYSwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1NCwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjgsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhhYywgMHgwNywgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHhjMSwgMHgxZCwgMHhmOSwgMHgzMSwgMHg4YSwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDEsIDB4MWQsIDB4NDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weDBiLCAweDA2LCAweDFiLCAweDBlLCAweDAxLCAweDI3LCAweGMxLCAweDFkLCAweGZmLCAweDMxLCAweDRhLCAweDMxLAotMHgzMywgMHgyYiwgMHgwNSwgMHhkMSwgMHg4YiwgMHg3MCwgMHgwMSwgMHgxYywgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGYsIDB4ZjgsIDB4MDYsIDB4ZTAsIDB4MzIsIDB4MmIsIDB4MDgsIDB4ZDEsIDB4OGIsIDB4NzAsIDB4MDEsIDB4MWMsCi0weDEwLCAweDFjLCAweDAwLCAweGYwLCAweDNjLCAweGY4LCAweDM4LCAweDFjLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg4OCwgMHg3MCwgMHhmOSwgMHhlNywgMHg5MCwgMHhiNCwgMHhjYSwgMHgxZCwKLTB4ZjksIDB4MzIsIDB4MzMsIDB4MjcsIDB4Y2MsIDB4MWQsIDB4ZmYsIDB4MzQsIDB4NGEsIDB4MzQsIDB4ZDMsIDB4NmEsCi0weGMwLCAweDQ2LCAweGE3LCAweDcwLCAweGZmLCAweDMxLCAweDQxLCAweDMxLCAweDA3LCAweDZjLCAweGMwLCAweDQ2LAotMHg0ZiwgMHg2MSwgMHhmYiwgMHgxOCwgMHgzOSwgMHgxYywgMHg5ZiwgMHgxZSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4ZmMsIDB4MWMsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4OWIsIDB4MDAsCi0weDFiLCAweDA0LCAweDFiLCAweDBjLCAweGM5LCAweDE4LCAweDA4LCAweDMxLCAweDAxLCAweDY0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhiOSwgMHgxYywgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgzNCwgMHgzMCwgMHgwMSwgMHg3NiwKLTB4ZjgsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4YjksIDB4MWQsCi0weDE5LCAweDQzLCAweGQwLCAweDYzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDQzLAotMHhkMCwgMHg2MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjYSwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4YzUsIDB4MWQsIDB4MmQsIDB4MzUsIDB4MzIsIDB4MjAsIDB4Y2YsIDB4MWQsCi0weGZmLCAweDM3LCAweDRhLCAweDM3LCAweGQzLCAweDZhLCAweGMwLCAweDQ2LCAweGI4LCAweDcwLCAweGNjLCAweDFkLAotMHhmZiwgMHgzNCwgMHgzYSwgMHgzNCwgMHhlOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MSwgMHgxMCwgMHgzMCwKLTB4ZTgsIDB4NjAsIDB4NjAsIDB4NjksIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDM4LCAweDFkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweGI5LCAweDFjLCAweDE5LCAweDQzLAotMHhkMCwgMHg2MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHg0MywgMHhkMCwgMHg2MywKLTB4ZjgsIDB4MWQsIDB4MDMsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4ZmMsIDB4ZmIsIDB4MjAsIDB4NjIsIDB4ZjgsIDB4MWQsCi0weDA3LCAweDMwLCAweGZmLCAweGY3LCAweGY3LCAweGZiLCAweDYwLCAweDYyLCAweDAwLCAweDIwLCAweDI4LCAweDc2LAotMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmNywgMHhiNSwgMHg4MSwgMHhiMCwgMHgwMSwgMHg5OCwKLTB4YzcsIDB4MWQsIDB4ZjksIDB4MzcsIDB4YjgsIDB4NmEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDA1LCAweDM0LCAweDIzLCAweDQzLCAweDFjLCAweDY4LCAweGZmLCAweDIzLCAweGZlLCAweDMzLCAweDIzLCAweDQwLAotMHg3ZiwgMHg2YiwgMHgzZiwgMHgwNCwgMHgzYiwgMHg0MywgMHgwYiwgMHg2MCwgMHgzNCwgMHgzMCwgMHgxYywgMHgxYywKLTB4ODAsIDB4MjMsIDB4MjMsIDB4NDAsIDB4MDEsIDB4OWYsIDB4ZmYsIDB4MzcsIDB4NDEsIDB4MzcsIDB4MDAsIDB4MmIsCi0weDNjLCAweGQwLCAweDBjLCAweDIzLCAweDAwLCAweDkzLCAweDAwLCAweDIzLCAweDlkLCAweDAwLCAweGFlLCAweDE4LAotMHgzNiwgMHg2OSwgMHg2ZCwgMHgxOCwgMHg2ZSwgMHg2MSwgMHgwMSwgMHgzMywgMHgwNSwgMHgyYiwgMHhmNywgMHhkMywKLTB4MDAsIDB4MjMsIDB4OWQsIDB4MDAsIDB4YWUsIDB4MTgsIDB4NzYsIDB4NmEsIDB4NmQsIDB4MTgsIDB4YWUsIDB4NjIsCi0weDAxLCAweDMzLCAweDA1LCAweDJiLCAweGY3LCAweGQzLCAweDAxLCAweDliLCAweGZmLCAweDMzLCAweDUxLCAweDMzLAotMHg5YiwgMHg3OCwgMHgzMywgMHgyYiwgMHgwZSwgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwKLTB4MDEsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGM1LCAweDFkLCAweDBkLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDE2LCAweGUwLAotMHg3YiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwKLTB4MGQsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4N2QsIDB4NjksIDB4NWQsIDB4MWIsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGM2LCAweDFkLCAweDAxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweGViLCAweDE4LAotMHgwYywgMHgzYiwgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMywgMHgwMCwgMHg5MywgMHg0YiwgMHg4MSwgMHhjYiwgMHg4MCwKLTB4NjMsIDB4MDksIDB4NDksIDB4ZDMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzQsIDB4MWQsIDB4MDUsIDB4MzQsCi0weDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDgxLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhjNCwgMHgxZCwgMHgwZCwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwYywgMHg4OSwgMHgxYiwgMHgxYiwKLTB4MDAsIDB4OWMsIDB4MWMsIDB4MWIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDIwLCAweDE4LCAweDg4LCAweDgwLCAweDM4LCAweDZhLCAweDA0LCAweDBlLCAweGZmLCAweDIzLAotMHgxYiwgMHgwNCwgMHgwMywgMHg0MCwgMHgxYiwgMHgwYSwgMHgxYywgMHg0MywgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4MDMsIDB4NDAsIDB4MWIsIDB4MDIsIDB4MjMsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4YzgsIDB4NjAsCi0weDc4LCAweDZhLCAweDA3LCAweDBlLCAweGZmLCAweDIzLCAweDFiLCAweDA0LCAweDAzLCAweDQwLCAweDFiLCAweDBhLAotMHgxZiwgMHg0MywgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgwMywgMHg0MCwgMHgxYiwgMHgwMiwgMHgzYiwgMHg0MywKLTB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NjEsIDB4ZDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjMsCi0weDkwLCAweDZiLCAweGMwLCAweDQ2LCAweDA4LCAweDY0LCAweDUwLCAweDZjLCAweGMwLCAweDQ2LCAweDQ4LCAweDY0LAotMHgxMCwgMHg2YywgMHhjMCwgMHg0NiwgMHg4OCwgMHg2NCwgMHhkMCwgMHg2YywgMHhjMCwgMHg0NiwgMHhjOCwgMHg2NCwKLTB4OTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjUsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MGIsIDB4ODEsCi0weDhiLCAweDgwLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwZiwgMHg0YSwgMHg5MywgMHg4OSwgMHgwMSwgMHgzMywgMHg5MywgMHg4MSwgMHhjMiwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4MDQsIDB4MjMsIDB4OTAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzMsIDB4NjAsIDB4MTAsIDB4MjMsIDB4ODMsIDB4NjEsCi0weGNiLCAweDBhLCAweDAxLCAweGQzLCAweDE4LCAweDIzLCAweDgzLCAweDYxLCAweGMxLCAweDgzLCAweDUxLCAweDZiLAotMHhjMCwgMHg0NiwgMHhjMSwgMHg4MSwgMHg1MSwgMHg2YiwgMHhjMiwgMHgxZCwgMHgzOSwgMHgzMiwgMHg1MSwgMHg4MywKLTB4MDQsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4ZjgsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgxYiwgMHg0YywgMHgyMCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgxYiwgMHhkMiwgMHgwMCwgMHgyMCwKLTB4ZTcsIDB4MWQsIDB4MTksIDB4MzcsIDB4MzgsIDB4NzEsIDB4ZTEsIDB4NjgsIDB4ZTAsIDB4MWQsIDB4ZjksIDB4MzAsCi0weDAwLCAweDI5LCAweDE1LCAweGQwLCAweDQyLCAweDZhLCAweDAwLCAweDJhLCAweDEyLCAweGQxLCAweDAxLCAweDI1LAotMHgwYSwgMHhlMCwgMHhmZiwgMHhmNywgMHg4OSwgMHhmYiwgMHgwMCwgMHgyOCwgMHgwOSwgMHhkMSwgMHgyMCwgMHg2YSwKLTB4MDIsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4M2QsIDB4NzEsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsCi0weDM4LCAweDc5LCAweDAwLCAweDI4LCAweGYxLCAweGQwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHg2YSwgMHgwMCwgMHgyOCwgMHhmOSwgMHhkMSwgMHgwMCwgMHgyOSwgMHhmNywgMHhkMSwgMHg2MCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MDQsIDB4ZDAsIDB4MDYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsIDB4YTgsIDB4ZmMsCi0weGVmLCAweGU3LCAweDYwLCAweDY4LCAweDAwLCAweDI4LCAweGVjLCAweGQwLCAweDAwLCAweGYwLCAweDVhLCAweGY4LAotMHhlOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MjAsIDB4MjMsIDB4YjgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4MDEsIDB4MjQsCi0weDAwLCAweDI1LCAweDAwLCAweDI4LCAweDBiLCAweGQxLCAweDM4LCAweDZhLCAweDAwLCAweDI4LCAweDAzLCAweGQxLAotMHgyOCwgMHgxYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxZiwgMHg0OCwgMHgwMSwgMHg2ZSwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4NjYsIDB4MDMsIDB4ZTAsIDB4NDgsIDB4NjgsIDB4YzQsIDB4MjMsIDB4MTgsIDB4NDAsCi0weDAzLCAweGQxLCAweDM4LCAweDZhLCAweDAwLCAweGYwLCAweDBjLCAweGZjLCAweDJmLCAweGUwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHgxYywgMHhmYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYSwgMHhiOCwgMHg2OCwKLTB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4ZDEsIDB4ZmIsIDB4YjgsIDB4NjgsCi0weDM5LCAweDZhLCAweGMwLCAweDQ2LCAweDg4LCAweDYwLCAweDM4LCAweDZhLCAweGMwLCAweDQ2LCAweGM1LCAweDYwLAotMHgxMCwgMHg0OCwgMHg0MSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgxMSwgMHhkMSwgMHhjMSwgMHg2OCwgMHgwMCwgMHgyOSwKLTB4MDksIDB4ZDEsIDB4NDEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDEsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsCi0weDgxLCAweDYwLCAweDQxLCAweDYwLCAweDAwLCAweGYwLCAweDE0LCAweGY4LCAweDBiLCAweGUwLCAweDM5LCAweDZhLAotMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHg0MSwgMHg2MCwgMHgwNiwgMHhlMCwgMHgzOSwgMHg2YSwgMHg4MiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZDEsIDB4NjAsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4MjAsIDB4MWMsCi0weGJkLCAweGU3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHg5MCwgMHhiNSwgMHgwYiwgMHg0YywgMHg2NywgMHg2OCwgMHgwMCwgMHgyZiwgMHgwZiwgMHhkMCwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGEsIDB4ZDEsIDB4NjAsIDB4NjgsIDB4YzAsIDB4NjgsCi0weGMwLCAweDQ2LCAweDYwLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGMzLCAweGZiLCAweDAwLCAweDIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZmUsIDB4MWQsIDB4NDksIDB4MzYsCi0weDMwLCAweDc4LCAweDQwLCAweDAwLCAweGMwLCAweDE5LCAweDg1LCAweDhiLCAweDMzLCAweDRjLCAweDM0LCAweDRiLAotMHg5ZCwgMHg0MiwgMHgzYywgMHhkMCwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MWQsIDB4ZjksIDB4MzEsIDB4NDgsIDB4ODAsIDB4NmEsIDB4NTgsIDB4MjEsIDB4NjksIDB4NDMsIDB4NDAsIDB4MTgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgyYywgMHg0ZCwgMHgwMSwgMHgyOCwgMHgxYSwgMHhkMSwgMHgzMCwgMHg3OCwgMHhjMCwgMHgxOSwgMHhjMSwgMHgxZCwKLTB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsIDB4ODAsIDB4MTgsIDB4MDksIDB4N2IsIDB4ZWEsIDB4MWQsCi0weDIxLCAweDMyLCAweDAwLCAweGYwLCAweGUzLCAweGZjLCAweDMwLCAweDc4LCAweGMwLCAweDE5LCAweDIwLCAweDMwLAotMHgwMCwgMHg3OSwgMHgzOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjMsIDB4NDIsIDB4MDAsIDB4OGIsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZmEsIDB4ZDMsCi0weGEwLCAweDg4LCAweDQxLCAweDA3LCAweDBiLCAweGQxLCAweDIxLCAweDg5LCAweDA5LCAweDE4LCAweDc4LCAweDY4LAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg4MSwgMHg0MiwgMHgwNCwgMHhkOCwgMHg2MSwgMHg4OSwgMHhlMiwgMHg4OCwKLTB4ODksIDB4MTgsIDB4ODEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDIxLCAweDFjLCAweDE0LCAweDRhLCAweDAwLCAweDIwLCAweGZlLCAweGY3LCAweDVhLCAweGZmLAotMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg0MywKLTB4MDEsIDB4MjAsIDB4MzksIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NTIsIDB4ZmYsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsCi0weDc4LCAweDY4LCAweDAyLCAweDQzLCAweDAwLCAweDIwLCAweDM5LCAweDY4LCAweGZlLCAweGY3LCAweDRhLCAweGZmLAotMHgwYiwgMHg0OSwgMHgwYywgMHg0YSwgMHgwMSwgMHgyMCwgMHhmZSwgMHhmNywgMHg0NSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4ZTksIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4MDIsIDB4MjEsIDB4ZWEsIDB4MWQsIDB4ZjksIDB4MzIsCi0weDUxLCAweDYyLCAweGQ5LCAweGU3LCAweDI4LCAweGFjLCAweDIwLCAweDQwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwKLTB4MTQsIDB4YWMsIDB4MjAsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsCi0weDAwLCAweDIxLCAweDRmLCAweDQ4LCAweGMyLCAweDFkLCAweGY5LCAweDMyLCAweDUxLCAweDYyLCAweDAxLCAweDIxLAotMHhjOSwgMHgwNCwgMHg0ZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgxOSwgMHgzMSwKLTB4NDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4NGEsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsCi0weDliLCAweGZiLCAweDg3LCAweGUwLCAweDQ1LCAweDQ4LCAweDQ3LCAweDY4LCAweGZjLCAweDFkLCAweDQ5LCAweDM0LAotMHgyMSwgMHg3OCwgMHg0OCwgMHgwMCwgMHhjMCwgMHgxOSwgMHg4MCwgMHg4YiwgMHg0NCwgMHg0YSwgMHg5MiwgMHg2YSwKLTB4NTgsIDB4MjMsIDB4NTgsIDB4NDMsIDB4MTUsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZWEsIDB4MWQsCi0weDA1LCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDA4LCAweDM1LCAweDJiLCAweDQzLCAweDFkLCAweDY4LAotMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgyYiwgMHg0MCwgMHgxYiwgMHgwYSwgMHgzYywgMHg0ZCwgMHgwMSwgMHgyYiwKLTB4MjQsIDB4ZDEsIDB4YzgsIDB4MTksIDB4YzEsIDB4MWQsIDB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsCi0weDgwLCAweDE4LCAweDM5LCAweDRhLCAweDA5LCAweDdiLCAweDAwLCAweGYwLCAweGM1LCAweGZjLCAweDIwLCAweDc4LAotMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgMHgwMCwgMHg3OSwgMHgzOSwgMHg2OCwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyMCwKLTB4ODIsIDB4MDAsIDB4NTMsIDB4MTksIDB4OWIsIDB4NmUsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzAsCi0weDAzLCAweDI4LCAweGY3LCAweGQzLCAweGNhLCAweDFkLCAweDA1LCAweDMyLCAweDY5LCAweDQ2LCAweDAwLCAweDIwLAotMHg0MywgMHgwMCwgMHhjZCwgMHg1YSwgMHhjMCwgMHg0NiwgMHhkNSwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwKLTB4ZjgsIDB4ZDMsIDB4MmQsIDB4ZTAsIDB4MDIsIDB4MmIsIDB4MmIsIDB4ZDEsIDB4MTEsIDB4MGEsIDB4MjksIDB4ZDMsCi0weDAwLCAweDIxLCAweDhhLCAweDAwLCAweDUzLCAweDE5LCAweDliLCAweDZlLCAweDZlLCAweDQ2LCAweGIzLCAweDUwLAotMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmNywgMHhkMywgMHgyMSwgMHg3OCwgMHg0OSwgMHgwMCwgMHhjOSwgMHgxOSwKLTB4MDksIDB4OGYsIDB4M2EsIDB4NjgsIDB4OGIsIDB4MTgsIDB4NmEsIDB4NDYsIDB4MDAsIDB4MjEsIDB4NGQsIDB4MDAsCi0weDU2LCAweDViLCAweGMwLCAweDQ2LCAweDVlLCAweDUzLCAweDAxLCAweDMxLCAweDA2LCAweDI5LCAweGY4LCAweGQzLAotMHgxOSwgMHg0OSwgMHg4YSwgMHg2YSwgMHgxMywgMHgxOCwgMHgxYSwgMHg2ZCwgMHgwMCwgMHg5ZCwgMHg1NSwgMHg0MCwKLTB4MTksIDB4NGEsIDB4ZDYsIDB4NjgsIDB4NzUsIDB4NDAsIDB4MWQsIDB4NjUsIDB4ODksIDB4NmEsIDB4MDgsIDB4MTgsCi0weDQxLCAweDZkLCAweDAyLCAweDliLCAweDU5LCAweDQwLCAweDkyLCAweDY5LCAweDUxLCAweDQwLCAweDQxLCAweDY1LAotMHgyMCwgMHg3OCwgMHg0MSwgMHgxZSwgMHgyMSwgMHg3MCwgMHgwMCwgMHgyOCwgMHgwZCwgMHhkMCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZjQsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MGQsIDB4ZDEsIDB4MDgsIDB4NGEsIDB4NTAsIDB4NjgsCi0weGMwLCAweDY4LCAweGMwLCAweDQ2LCAweDUwLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGE0LCAweGZhLAotMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3MywgMHhmYSwgMHgwMSwgMHhmMCwgMHhkZSwgMHhmYSwKLTB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDM4LCAweDA0LCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg5NCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4NjksIDB4NGIsIDB4OWYsIDB4NmEsIDB4NTgsIDB4MjMsIDB4NWEsIDB4NDMsCi0weGJhLCAweDE4LCAweGMzLCAweDFkLCAweDQ5LCAweDMzLCAweDFmLCAweDc4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhkNCwgMHgxZCwgMHgwMSwgMHgzNCwgMHgyMywgMHg0MywgMHgxZCwgMHg2OCwgMHg0MywgMHg2OCwgMHgxYywgMHgwNCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4MDUsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDFjLCAweDQzLCAweDQyLCAweDIzLCAweDFjLCAweDQzLCAweDBjLCAweDYwLCAweGZmLCAweDI2LCAweDM2LCAweDAyLAotMHgyZSwgMHg0MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5ZSwgMHg0MiwgMHg3NCwgMHhkMSwgMHg2YiwgMHgwYywKLTB4MmIsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksCi0weGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDdiLCAweDAwLCAweDFiLCAweDE4LCAweDFiLCAweDhmLCAweDRjLCAweDg5LAotMHgxYiwgMHgxYiwgMHhjYiwgMHg4MCwgMHgwMCwgMHgyNCwgMHhhNiwgMHgwMCwgMHgwMSwgMHg5NiwgMHhiMywgMHgxOCwKLTB4ZGUsIDB4MWQsIDB4MDksIDB4MzYsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDAxLCAweDllLCAweDc2LCAweDE4LCAweDczLCAweDYxLCAweDAxLCAweDM0LCAweDA1LCAweDJjLCAweGYwLCAweGQzLAotMHgwMCwgMHgyNCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg5NiwgMHhiMywgMHgxOCwgMHhkZSwgMHgxZCwgMHgxZCwgMHgzNiwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDAsIDB4OWUsIDB4NzYsIDB4MTgsCi0weGIzLCAweDYyLCAweDAxLCAweDM0LCAweDA1LCAweDJjLCAweGYwLCAweGQzLCAweDA2LCAweGUwLCAweDAwLCAweDIzLAotMHg0YiwgMHg4MSwgMHhjYiwgMHg4MCwgMHg0MCwgMHgyMywgMHg5YywgMHg0MywgMHgwYywgMHg2MCwgMHgyMywgMHgxYywKLTB4NmIsIDB4MGUsIDB4NGEsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksIDB4MTAsIDB4MzMsCi0weDBiLCAweDgxLCAweDdiLCAweDAwLCAweDFiLCAweDE4LCAweDFiLCAweDhmLCAweDBmLCAweDg5LCAweGRiLCAweDFiLAotMHg4YiwgMHg4MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHgzNSwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDMxLCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDY0LCAweGFiLCAweDBlLAotMHgyMSwgMHhkMiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHgzZCwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDM5LCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDhiLCAweDY0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHg0NSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4Y2IsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4NDEsIDB4MzQsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDY1LCAweDAwLCAweGUwLCAweDBmLCAweGUwLCAweGZiLCAweDFmLAotMHgwMSwgMHgzYiwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHgwNywgMHg2OCwgMHhmZiwgMHgxOCwgMHgwMywgMHg2OSwKLTB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MmMsIDB4ZTAsIDB4MDAsIDB4MjMsCi0weDBiLCAweDgxLCAweDhiLCAweDgwLCAweDI4LCAweGUwLCAweDAwLCAweDIzLCAweDhiLCAweDgwLCAweDBiLCAweDgxLAotMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3YSwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHg3YiwgMHgwMCwKLTB4MTgsIDB4MTgsIDB4MDAsIDB4OGUsIDB4YzAsIDB4NDYsIDB4YzgsIDB4ODAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsCi0weGJiLCAweDE4LCAweGRjLCAweDFkLCAweDA5LCAweDM0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHg3ZiwgMHgxOCwgMHg3YiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwNSwgMHgyOCwgMHhmMiwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsIDB4YmIsIDB4MTgsIDB4ZGMsIDB4MWQsIDB4MWQsIDB4MzQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDdmLCAweDE4LCAweGJiLCAweDYyLCAweDAxLCAweDMwLAotMHgwNSwgMHgyOCwgMHhmMiwgMHhkMywgMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MWYsIDB4MWMsIDB4M2IsIDB4MGMsIDB4MTgsIDB4ZDIsCi0weDE3LCAweDZkLCAweDExLCAweDRiLCAweGMwLCAweDQ2LCAweGRmLCAweDYwLCAweDUyLCAweDZkLCAweGMwLCAweDQ2LAotMHgxYSwgMHg2MSwgMHhjNywgMHg2MCwgMHgxYSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MSwgMHhkOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4ZDgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ODAsIDB4MTgsIDB4NjksCi0weGMwLCAweDQ2LCAweDg4LCAweDgwLCAweDE4LCAweDY5LCAweDAwLCAweDBjLCAweGM4LCAweDgwLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHg0YSwgMHg4OCwgMHgxMiwgMHgwNCwgMHgwYiwgMHg4OCwgMHgxYSwgMHg0MywgMHhjMiwgMHg2MCwKLTB4OGEsIDB4ODgsIDB4YzksIDB4ODgsIDB4MDksIDB4MDQsIDB4MTEsIDB4NDMsIDB4MDEsIDB4NjEsIDB4ZjIsIDB4ZTcsCi0weDJjLCAweDA3LCAweDAwLCAweDgwLCAweGYxLCAweGI1LCAweDg4LCAweGIwLCAweDAwLCAweDIyLCAweDA4LCAweDk4LAotMHgwMCwgMHg2YSwgMHgwOCwgMHg5YiwgMHg5OSwgMHg2OCwgMHg0OSwgMHgwYSwgMHgwMiwgMHhkMywgMHgwMSwgMHgyNywKLTB4ZmYsIDB4MDMsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4OGIsIDB4MDAsIDB4MmIsIDB4MTksIDB4ZDAsCi0weGEzLCAweDQ5LCAweDg5LCAweDZhLCAweDFjLCAweDFjLCAweDU4LCAweDIzLCAweDYzLCAweDQzLCAweGM5LCAweDE4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1OCwgMHgzOSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDcsIDB4ZTAsCi0weDQxLCAweDhiLCAweDAwLCAweDI5LCAweDAyLCAweGQwLCAweDBjLCAweDIzLAotMHgxZiwgMHg0MywgMHgwMSwgMHhlMCwgMHgwNCwgMHgyMywgMHgxZiwgMHg0MywgMHg4MywgMHg4YSwgMHgwMCwgMHgyYiwKLTB4MTgsIDB4ZDAsIDB4OTUsIDB4NDksIDB4ODksIDB4NmEsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIDB4NjMsIDB4NDMsCi0weGM5LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDU4LCAweDM5LCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMiwgMHgyOSwgMHgwMSwgMHhkMSwgMHgwZiwgMHg0MywgMHgwNywgMHhlMCwKLTB4YzEsIDB4OGEsIDB4MDAsIDB4MjksIDB4MDIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDIzLCAweDFmLCAweDQzLCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweDA3LCAweDkxLCAweDRiLCAweDg5LAotMHgwYywgMHg4OSwgMHgxYywgMHgxOSwgMHgyNCwgMHgwNCwgMHgyNCwgMHgwYywgMHgwOCwgMHg5ZCwgMHgyZCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4OTUsIDB4YzksIDB4ODgsIDB4N2QsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4MWEsIDB4MWMsCi0weGMzLCAweDFkLCAweDE5LCAweDMzLCAweDFhLCAweDcyLCAweDA3LCAweDlhLCAweDkyLCAweDg5LCAweGMwLCAweDQ2LAotMHgxYSwgMHg3MywgMHgwNywgMHg5YSwgMHgxMiwgMHg4OSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg4NiwgMHgwNCwgMHg4NywKLTB4ODIsIDB4OGEsIDB4MDEsIDB4M2EsIDB4ODIsIDB4ODMsIDB4MDEsIDB4MjIsIDB4MTksIDB4NzEsIDB4MDgsIDB4OWIsCi0weDFiLCAweDY4LCAweDViLCAweDE4LCAweDViLCAweDc4LCAweDliLCAweDAwLCAweDFiLCAweDA0LCAweDFiLCAweDBjLAotMHgwOCwgMHgzMywgMHg1OSwgMHgxOCwgMHhiYiwgMHgwOCwgMHg0NywgMHhkMywgMHgwNywgMHg5YiwgMHg1YiwgMHg4OSwKLTB4ODUsIDB4MTgsIDB4MDYsIDB4OTUsIDB4MjAsIDB4MzUsIDB4MmIsIDB4NzIsIDB4MDcsIDB4OWIsIDB4OWIsIDB4ODksCi0weGMwLCAweDQ2LCAweDJiLCAweDczLCAweDA3LCAweDliLCAweDFiLCAweDg5LCAweDJlLCAweDFjLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgwNSwgMHg5NSwgMHgyYiwgMHg4NiwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMCwgMHhjMywgMHg4YSwKLTB4MDAsIDB4ZTAsIDB4ODMsIDB4OGEsIDB4MDEsIDB4M2IsIDB4MDUsIDB4OWQsIDB4YzAsIDB4NDYsIDB4YWIsIDB4ODMsCi0weDMxLCAweDcxLCAweDY1LCAweDRiLCAweDlkLCAweDZhLCAweDA1LCAweDliLCAweDllLCAweDhiLCAweDU4LCAweDIzLAotMHg3MywgMHg0MywgMHhlYiwgMHgxOCwgMHhkZCwgMHgxZCwgMHgwMSwgMHgzNSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsIDB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDEsIDB4ZDEsIDB4MDgsIDB4MzEsCi0weDAwLCAweGUwLCAweDEwLCAweDMxLCAweDgxLCAweDIzLCAweDViLCAweDAyLCAweDFkLCAweDQwLCAweDlkLCAweDQyLAotMHgwMywgMHhkMSwgMHhlMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwNSwgMHg5YiwKLTB4YzAsIDB4NDYsIDB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsCi0weDliLCAweDdiLCAweDA2LCAweDlkLCAweDQwLCAweDM1LCAweDJiLCAweDcwLCAweDJiLCAweDc4LCAweDAyLCAweDMzLAotMHhlMywgMHgxYSwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwMSwgMHgzMiwgMHhiYiwgMHgwOCwgMHg5YiwgMHgwNywKLTB4NmQsIDB4ZDAsIDB4ODMsIDB4MTgsIDB4MjAsIDB4MzMsIDB4MDQsIDB4OTMsIDB4MTksIDB4NzIsIDB4MDEsIDB4OWIsCi0weDVkLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA3LAotMHgxYiwgMHgwZiwgMHg5YiwgMHgwMCwgMHgwNCwgMHg5ZSwgMHhjMCwgMHg0NiwgMHgzMywgMHg3MywgMHgwMCwgMHg5NSwKLTB4MmIsIDB4NzgsIDB4MWIsIDB4MDcsIDB4MWIsIDB4MGYsIDB4OWIsIDB4MDAsIDB4MDQsIDB4OWQsIDB4YzAsIDB4NDYsCi0weDJiLCAweDczLCAweDAwLCAweDlkLCAweGViLCAweDc4LCAweGFkLCAweDc4LCAweDFiLCAweDAyLCAweDFkLCAweDQzLAotMHgyYiwgMHgwMiwgMHgyZCwgMHgwYSwgMHgyZCwgMHgwNiwgMHgyZCwgMHgwZSwgMHgyYiwgMHg0MywgMHg1NSwgMHgwMCwKLTB4MmQsIDB4MTgsIDB4MmIsIDB4ODYsIDB4MDQsIDB4OWIsIDB4YzAsIDB4NDYsIDB4NTksIDB4NzIsIDB4MDQsIDB4OWIsCi0weDFiLCAweDdiLCAweDJlLCAweDFjLCAweDA0LCAweDlkLCAweGMwLCAweDQ2LCAweDZiLCAweDczLCAweDMzLCAweDhlLAotMHhjMCwgMHg0NiwgMHg3MywgMHg4NiwgMHgwMCwgMHg5ZCwgMHgyYiwgMHg3OCwgMHgxYiwgMHgwNywgMHgxYiwgMHgwZiwKLTB4OWIsIDB4MDAsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4NTksIDB4MTgsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NDAsCi0weDBlLCAweGQwLCAweDM0LCAweDg3LCAweDAzLCAweDhiLCAweDAxLCAweDNiLCAweGIzLCAweDgzLCAweDEzLCAweDFjLAotMHgxYiwgMHgxOCwgMHgyMCwgMHgzMywgMHgxOSwgMHg3MSwgMHgwMSwgMHg5YiwgMHg1YiwgMHgxOCwgMHg1YiwgMHg3OCwKLTB4OWIsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDgsIDB4MzEsIDB4MDEsIDB4MzIsIDB4M2IsIDB4MDksIDB4MzcsIDB4ZDMsCi0weDAwLCAweDJkLCAweDAxLCAweGQwLCAweDQzLCAweDhiLCAweDAwLCAweGUwLCAweDAzLCAweDhiLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgwMSwgMHgzYiwgMHhhYiwgMHg4MywgMHg4MywgMHgxOCwgMHgwMywgMHg5MywgMHgyMCwgMHgzMywKLTB4MTksIDB4NzEsIDB4MjAsIDB4NGIsIDB4OWQsIDB4NmEsIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MDIsIDB4OTMsCi0weDllLCAweDhiLCAweDU4LCAweDIzLCAweDczLCAweDQzLCAweGViLCAweDE4LCAweGRkLCAweDFkLCAweDAxLCAweDM1LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwKLTB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4MTUsIDB4ZTAsCi0weDEwLCAweDMxLCAweDgxLCAweDIzLCAweDViLCAweDAyLCAweDFkLCAweDQwLCAweDlkLCAweDQyLCAweDAzLCAweGQxLAotMHhlMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwMiwgMHg5YiwgMHhjMCwgMHg0NiwKLTB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsIDB4OWIsIDB4N2IsCi0weDAzLCAweDljLCAweDQwLCAweDM0LCAweDIzLCAweDcwLCAweDAxLCAweDMyLCAweDA3LCAweDliLCAweGMwLCAweDQ2LAotMHhkOSwgMHg4MCwgMHg1MSwgMHgxZSwgMHhjMywgMHgxZCwgMHg0OSwgMHgzMywgMHgxOSwgMHg3MCwgMHgwNywgMHg2MSwKLTB4MDQsIDB4MmEsIDB4MDYsIDB4ZDIsIDB4MDYsIDB4NDksIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4OTksIDB4ODMsCi0weDAxLCAweDMyLCAweDA0LCAweDJhLCAweGY5LCAweGQzLCAweDA5LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NDgsIDB4MDEsIDB4NjgsCi0weDAxLCAweDMxLCAweDAxLCAweDYwLCAweDM4LCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDc4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5MCwgMHhiOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwZCwgMHg0OCwKLTB4NDEsIDB4NjgsIDB4YzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDRmLCAweGY4LCAweGI4LCAweDY4LCAweDQwLCAweDA5LCAweDA2LCAweGQzLCAweDEwLCAweDIzLCAweDAyLCAweDk4LAotMHgxOCwgMHg0MywgMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMiwgMHhmMCwgMHhlMSwgMHhmZiwgMHg2OCwgMHg0NiwKLTB4MDIsIDB4ZjAsIDB4OWEsIDB4ZmUsIDB4MGMsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDhjLCAweGIwLAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OCwgMHgwNSwgMHg0YiwgMHgxOSwgMHg0MywKLTB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4NjgsIDB4NDYsIDB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmUsCi0weDBjLCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAotMHgwMiwgMHg2YSwgMHgwMywgMHg2OCwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MCwgMHg0MCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NTAsIDB4NjAsIDB4NDAsIDB4MzIsIDB4NDgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTAsIDB4ODAsIDB4YzgsIDB4NjgsCi0weGMwLCAweDQ2LCAweGQwLCAweDgwLCAweDQ4LCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDgxLCAweDg4LCAweDY4LAotMHhjMCwgMHg0NiwgMHg1MCwgMHg4MSwgMHgwOCwgMHg3ZSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg3MywgMHgwOCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4OTAsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDQsIDB4NDksIDB4MDgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAwLCAweGQxLCAweDcwLCAweDQ3LCAweGMyLCAweDY4LCAweGMwLCAweDQ2LCAweDBhLCAweDYwLCAweGZhLCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0OSwgMHgwYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjMiwgMHg2MCwKLTB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDEyLCAweDRmLCAweDdjLCAweDdmLCAweDAxLCAweDM0LCAweDdjLCAweDc3LCAweDAzLCAweDIzLCAweGZjLCAweDFkLAotMHgxOSwgMHgzNCwgMHgzOCwgMHg2MiwgMHg3OSwgMHg2MiwgMHgyMywgMHg3MiwgMHgwZSwgMHg0YywgMHgyNSwgMHg2OCwKLTB4NmIsIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MjMsIDB4NjgsIDB4MWIsIDB4MGMsIDB4MTAsIDB4ZDEsIDB4MjQsIDB4NjgsCi0weGEzLCAweDBhLCAweDBkLCAweGQzLCAweDAxLCAweDIzLCAweDBhLCAweDRmLCAweGMwLCAweDQ2LCAweGZiLCAweDYyLAotMHgwOSwgMHg0ZiwgMHgwYSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhkZiwgMHg2MCwgMHg5OSwgMHg2MCwgMHg1OCwgMHg2MCwKLTB4MTAsIDB4MWMsIDB4MTgsIDB4NjAsIDB4MDEsIDB4MzIsIDB4ZmIsIDB4ZTcsIDB4MTAsIDB4MWMsIDB4MzgsIDB4NjQsCi0weDAxLCAweDMyLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMiwgMHg4MSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4ZjAsIDB4YjUsIDB4NDcsIDB4NGYsIDB4MzgsIDB4NjgsIDB4NDcsIDB4NGUsIDB4NDcsIDB4NGQsIDB4MDcsIDB4MjMsCi0weDViLCAweDAyLCAweGVjLCAweDE4LCAweDAwLCAweDI4LCAweDFkLCAweGQxLCAweDIwLCAweDZiLCAweDAxLCAweDMwLAotMHgyMCwgMHg2MywgMHg0NCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg0MywgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDAsIDB4MjksIDB4MTMsIDB4ZDAsIDB4YzEsIDB4MWQsIDB4NjksIDB4MzEsIDB4MDksIDB4N2IsIDB4MDAsIDB4MjksCi0weDBlLCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAxLCAweDZkLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHg4MSwgMHg2MSwgMHhjMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHgwNCwgMHhkMCwgMHhmMSwgMHg2YywKLTB4MDEsIDB4MzEsIDB4ZjEsIDB4NjQsIDB4MDEsIDB4ZjAsIDB4NTAsIDB4ZmUsCi0weDM4LCAweDY4LCAweDAxLCAweDI4LCAweDE3LCAweGQxLCAweDM3LCAweDQ4LCAweDQxLCAweDY5LCAweDAwLCAweDI5LAotMHgxMywgMHhkMCwgMHhjMSwgMHgxZCwgMHg2OSwgMHgzMSwgMHgwOSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwZSwgMHhkMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDEsIDB4NmQsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4YzAsIDB4NDYsCi0weDgxLCAweDYxLCAweGMyLCAweDY5LCAweDkxLCAweDQyLCAweDA0LCAweGQwLCAweGYxLCAweDZjLCAweDAxLCAweDMxLAotMHhmMSwgMHg2NCwgMHgwMSwgMHhmMCwgMHgzNSwgMHhmZSwgMHgzOCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgyZiwgMHhkMSwKLTB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZWUsIDB4MTgsIDB4NzAsIDB4N2IsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsCi0weDAwLCAweDIwLCAweDcwLCAweDczLCAweDAwLCAweGYwLCAweDRhLCAweGZkLCAweDMwLCAweDdiLCAweDAwLCAweDI4LAotMHgwMiwgMHhkMCwgMHg3OCwgMHg2OCwgMHgwMiwgMHhmMCwgMHhhYSwgMHhmZiwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwKLTB4ZTgsIDB4MTgsIDB4YzAsIDB4OGIsIDB4MDQsIDB4MjYsIDB4MDYsIDB4NDAsIDB4ZTAsIDB4NmEsIDB4YjAsIDB4NDIsCi0weDE0LCAweGQwLCAweGY4LCAweDY4LCAweDAxLCAweDMwLCAweGY4LCAweDYwLCAweDE5LCAweDI4LCAweDExLCAweGQzLAotMHgxYiwgMHg0OCwgMHgwMSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwZCwgMHhkMSwgMHhmZiwgMHgzMCwgMHg0MSwgMHgzMCwKLTB4NDAsIDB4NzgsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4YjgsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmYsCi0weDAwLCAweDIwLCAweGY4LCAweDYwLCAweGU2LCAweDYyLCAweDAxLCAweGUwLCAweDAwLCAweDIwLCAweGY4LCAweDYwLAotMHgzOCwgMHg2OCwgMHgwMywgMHgyOCwgMHgwYiwgMHhkMSwgMHhlYywgMHgxZCwgMHg3OSwgMHgzNCwgMHhlMCwgMHg2YiwKLTB4ODAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MDcsIDB4ZmMsIDB4MDIsIDB4MjMsCi0weGUwLCAweDZiLCAweDk4LCAweDQzLCAweGUwLCAweDYzLCAweDM4LCAweDY4LCAweDAxLCAweDMwLCAweDM4LCAweDYwLAotMHgwMywgMHgyOCwgMHgwMSwgMHhkOSwgMHgwMCwgMHgyMCwgMHgzOCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLAotMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgxZCwgMHg0OCwKLTB4ODQsIDB4OGEsIDB4MWQsIDB4NGEsIDB4MTMsIDB4OGEsIDB4YzEsIDB4MWQsIDB4MDksIDB4MzEsIDB4MDEsIDB4MjcsCi0weDljLCAweDQyLCAweDAzLCAweGQxLCAweDQzLCAweDhhLCAweDU0LCAweDhhLCAweGEzLCAweDQyLCAweDEwLCAweGQwLAotMHgwYiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgwZCwgMHhkMCwgMHg0YiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgwYSwgMHhkMCwKLTB4NDQsIDB4OGIsIDB4OTMsIDB4OGEsIDB4OWMsIDB4NDIsIDB4MDQsIDB4ZGMsIDB4MTMsIDB4NGIsIDB4YzAsIDB4NDYsCi0weDVmLCAweDYwLCAweDk3LCAweDgyLCAweDAxLCAweGUwLCAweDAxLCAweDMzLCAweDkzLCAweDgyLCAweGMzLCAweDhiLAotMHg1YywgMHgxYywgMHhjNCwgMHg4MywgMHg4NCwgMHg4YiwgMHhhMywgMHg0MiwgMHgwZSwgMHhkYiwgMHg4NCwgMHg4YSwKLTB4MDUsIDB4OGIsIDB4MDAsIDB4MjMsIDB4YWMsIDB4NDIsIDB4MDUsIDB4ZGEsIDB4NDQsIDB4OGEsIDB4YzUsIDB4OGEsCi0weGFjLCAweDQyLCAweDAxLCAweGRhLCAweDRiLCAweDcwLCAweDAwLCAweGUwLCAweDRmLCAweDcwLCAweDQzLCAweDgyLAotMHg4MywgMHg4MiwgMHhjMywgMHg4MywgMHg0MSwgMHg4YSwgMHhjMCwgMHg0NiwgMHg1MSwgMHg4MiwgMHg4MCwgMHg4YSwKLTB4YzAsIDB4NDYsIDB4MTAsIDB4ODIsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDNjLCAweDA0LCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAweGY3LCAweGI1LCAweDkxLCAweGIwLAotMHg2YiwgMHg0NiwgMHg4NCwgMHgxZSwgMHgxMiwgMHg5OSwgMHgxNCwgMHgyOSwgMHgxYSwgMHhkOSwgMHgwMCwgMHgyMCwKLTB4ODEsIDB4MDAsIDB4NjcsIDB4NTgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDEwLCAweDI4LCAweGY2LCAweGQzLCAweDAwLCAweDIxLCAweDA1LCAweDIwLCAweDg3LCAweDAwLAotMHhkNiwgMHg1OSwgMHg0ZiwgMHgxYywgMHgzZCwgMHgwNiwgMHgyZCwgMHgwZSwgMHgwZiwgMHgxYywgMHhiZiwgMHgwMCwKLTB4ZGUsIDB4NTEsIDB4MjksIDB4MWMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsCi0weGYxLCAweGQzLCAweDA5LCAweGUwLCAweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDYzLCAweDU4LCAweGMwLCAweDQ2LAotMHg1MywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNiwgMHgyOCwgMHhmNiwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4NzIsIDB4NjAsIDB4NzIsIDB4YTAsIDB4NzIsIDB4MjAsIDB4NzMsCi0weDYwLCAweDczLCAweDEyLCAweDk5LCAweDE0LCAweDI5LCAweDM3LCAweGQ5LCAweDY5LCAweDQ2LCAweDhlLCAweDFjLAotMHg5MSwgMHg3OCwgMHgwOSwgMHgwNywgMHgwOSwgMHgwZiwgMHg4OSwgMHgwMCwgMHgxNCwgMHgzOSwgMHgwZCwgMHgwNiwKLTB4MmQsIDB4MTYsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmQsIDB4MWIsIDB4ZGQsIDB4ZjAsIDB4MTksIDB4MTAsIDB4YTksCi0weDAwLCAweGYwLCAweDNkLCAweGY4LCAweDAwLCAweDI4LCAweDBlLCAweGQwLAotMHgwMCwgMHgyMCwgMHgxMCwgMHhhOSwgMHgwOSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkZCwgMHgwMCwgMHgyMiwKLTB4MzksIDB4MTgsIDB4NzIsIDB4NTQsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YTksCi0weDA5LCAweDc4LCAweDg4LCAweDQyLCAweGY2LCAweGRiLCAweDEwLCAweGE4LCAweDAwLCAweDc4LCAweDM4LCAweDE4LAotMHgwNywgMHgwNiwgMHgzZiwgMHgwZSwgMHhhZiwgMHg0MiwgMHhlMywgMHhkYiwgMHg2OCwgMHg0NiwgMHhlMiwgMHgxZCwKLTB4MGQsIDB4MzIsIDB4MDAsIDB4MjEsIDB4YWIsIDB4MDgsIDB4NWYsIDB4MWMsIDB4MDgsIDB4ZDAsIDB4OGIsIDB4MDAsCi0weGM0LCAweDU4LCAweGMwLCAweDQ2LCAweGQ0LCAweDUwLCAweDAxLCAweDMxLCAweDA5LCAweDA2LCAweDA5LCAweDBlLAotMHg4ZiwgMHg0MiwgMHhmNiwgMHhkOCwgMHgxNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4OTAsIDB4YjQsIDB4ODcsIDB4MWUsIDB4MDAsIDB4MjAsIDB4ODksIDB4MDgsIDB4NGIsIDB4MWMsIDB4MDgsIDB4ZDAsCi0weDgxLCAweDAwLCAweDU0LCAweDU4LCAweGMwLCAweDQ2LCAweDdjLCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MywgMHg0MiwgMHhmNiwgMHhkOCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwKLTB4MDIsIDB4NzgsIDB4ZDIsIDB4MDYsIDB4ZDIsIDB4MGUsIDB4MDAsIDB4MjMsIDB4MDEsIDB4MjcsIDB4MDEsIDB4MmEsCi0weDAxLCAweGRjLCAweDBmLCAweDcwLCAweDExLCAweGUwLCAweDQwLCAweDc4LCAweGMwLCAweDQ2LCAweDA4LCAweDcwLAotMHgxNCwgMHgyYSwgMHgwNCwgMHhkMSwgMHgwOCwgMHg0OCwgMHgwMSwgMHg3YSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg3MiwKLTB4MDcsIDB4ZTAsIDB4MDIsIDB4MmEsIDB4MDUsIDB4ZDAsIDB4MDUsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4MDYsIDB4MmEsCi0weDAxLCAweGQwLCAweDE1LCAweDJhLCAweDAyLCAweGQxLCAweDE4LCAweDFjLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHgzOCwgMHgxYywgMHhmYiwgMHhlNywgMHhlMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHgwZiwgMHg0OCwKLTB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksIDB4NDEsIDB4NjEsCi0weGQxLCAweDYwLCAweDAwLCAweDIxLCAweGExLCAweDIyLCAweDUyLCAweDAzLCAweDkxLCAweDYxLCAweDE5LCAweDFjLAotMHgwOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4ODAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NjEsIDB4ZmUsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDA0LCAweDQ4LCAweDQxLCAweDg4LCAweDAxLCAweDMxLCAweDQxLCAweDgwLCAweGY4LCAweGU3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhlMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODYsIDB4YjAsIDB4OTUsIDB4NGEsIDB4ZDAsIDB4NjgsCi0weGQ3LCAweDFkLCAweDc5LCAweDM3LCAweDAxLCAweDI4LCAweDA5LCAweGQxLCAweDM4LCAweDg5LCAweDAwLCAweDI4LAotMHgwNiwgMHhkMSwgMHhkMCwgMHg2ZiwgMHgwMiwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MTQsIDB4MjAsIDB4MzgsIDB4ODEsIDB4OGUsIDB4NGMsIDB4NjEsIDB4NmEsIDB4OGUsIDB4NDgsIDB4YzMsIDB4NmIsCi0weDU5LCAweDE4LCAweGMxLCAweDYzLCAweGEwLCAweDZhLCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGQ0LCAweDE4LAotMHhhMCwgMHg2MiwgMHgyMSwgMHg2YSwgMHgwOSwgMHgwMywgMHgwOSwgMHgwYiwgMHg4MSwgMHg0MiwgMHgwNSwgMHhkMSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsIDB4ODcsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTAsCi0weGJiLCAweDhhLCAweDU4LCAweDFjLCAweGI4LCAweDgyLCAweDNkLCAweDhiLCAweDAxLCAweDIwLCAweDAwLCAweDIxLAotMHhhYiwgMHg0MiwgMHgwNCwgMHhkYiwgMHhkMywgMHgxZCwgMHg4OSwgMHgzMywgMHg1OCwgMHg3MCwgMHhiOSwgMHg4MiwKLTB4ZjksIDB4ODMsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MDUsIDB4OTMsIDB4NWIsIDB4NjksCi0weDBmLCAweDJiLCAweDczLCAweGQyLCAweDAwLCAweDIxLCAweDdjLCAweDRmLCAweGMwLCAweDQ2LCAweDM5LCAweDYxLAotMHgyMSwgMHg2YSwgMHg4YSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg0YiwgMHg2OCwgMHgxZSwgMHgwYywKLTB4MzYsIDB4MDQsIDB4ZmQsIDB4MWYsIDB4MDksIDB4M2QsIDB4MDAsIDB4MmUsIDB4MDUsIDB4ZDEsIDB4M2IsIDB4MmEsCi0weDAzLCAweGQzLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDlhLCAweDQyLCAweDAxLCAweGQ5LCAweGE4LCAweDczLAotMHhjOCwgMHhlMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsIDB4MDMsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDc5LCAweDgyLCAweDQ5LCAweDA5LCAweDA1LCAweDMxLCAweDA5LCAweDA2LCAweDA5LCAweDBlLAotMHg2OSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5NiwgMHg2OSwgMHg0OCwgMHg0MywgMHg2YSwgMHhjMCwgMHg0NiwKLTB4MDEsIDB4OTMsIDB4ODMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTMsIDB4YzIsIDB4MWQsIDB4MTEsIDB4MzIsCi0weDgwLCAweDY5LCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDkyLCAweDY4LCAweGIzLCAweDA3LCAweDFhLCAweDQzLAotMHgxMiwgMHg2OCwgMHg5MCwgMHg0MiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MGQsIDB4ZTAsIDB4OTAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4OWIsIDB4MTgsIDB4MWEsIDB4MDEsIDB4OWIsCi0weGQyLCAweDFhLCAweDgyLCAweDE4LCAweDAwLCAweGUwLCAweDEyLCAweDFhLCAweDAxLCAweDIwLCAweDA5LCAweDAxLAotMHg5MSwgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyOCwgMHg2NSwgMHhkMSwgMHg1MSwgMHg0OSwKLTB4MjAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NjIsIDB4ZDAsIDB4MDUsIDB4OTksIDB4NDgsIDB4NjksIDB4MDEsIDB4MzAsCi0weDQ4LCAweDYxLCAweDAyLCAweDIwLCAweDIxLCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHhhNywgMHhmYywgMHg3OCwgMHg2MywgMHhiZSwgMHg2MCwgMHg0OSwgMHg0OSwgMHgyMiwgMHg2YSwgMHhhMywgMHg2YiwKLTB4ZDMsIDB4MTgsIDB4NjYsIDB4NmIsIDB4YjMsIDB4NDIsIDB4MDAsIDB4ZDksIDB4MjIsIDB4NmIsIDB4YzAsIDB4NDYsCi0weGJhLCAweDYyLCAweGJhLCAweDZhLCAweDBjLCAweDMyLCAweGZhLCAweDYyLCAweDAwLCAweDIyLCAweGZhLCAweDYxLAotMHgwMywgMHhhYSwgMHg1MiwgMHg4OCwgMHhkMiwgMHgwOSwgMHgwMywgMHhkMywgMHgwMSwgMHgyMiwgMHgwMCwgMHhlMCwKLTB4N2IsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjIsIDB4N2EsIDB4NjAsIDB4N2EsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDAyLCAweDYwLCAweDc4LCAweDhhLCAweDQxLCAweDRlLCAweDYwLCAweDI4LCAweDA0LCAweGRjLCAweGIwLCAweDgzLAotMHg3OCwgMHg4YSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MywgMHgwOCwgMHhlMCwgMHg2MCwgMHgyMCwgMHhiMCwgMHg4MywKLTB4NzksIDB4OGEsIDB4ZjgsIDB4NmEsIDB4NDIsIDB4MTgsIDB4NjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDgsCi0weGYxLCAweDgzLCAweDAwLCAweDIyLCAweDNhLCAweDYzLCAweDA1LCAweGUwLCAweDIxLCAweDZiLCAweGMwLCAweDQ2LAotMHgzOSwgMHg2MywgMHg2MSwgMHg2YiwgMHgwOCwgMHgxYSwgMHhmMCwgMHg4MywgMHgyZCwgMHg0OSwgMHg3OCwgMHg2YiwKLTB4NDIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YmEsIDB4NjAsIDB4ODIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NjAsCi0weDAyLCAweDY5LCAweGMwLCAweDQ2LCAweDdhLCAweDYxLCAweDQwLCAweDY5LCAweGMwLCAweDQ2LCAweGI4LCAweDYxLAotMHgyZSwgMHg0YiwgMHhjOCwgMHgxOCwgMHgwNCwgMHg5MCwgMHgwMCwgMHhmMCwgMHgzNywgMHhmOSwgMHgwNCwgMHg5OCwKLTB4MDAsIDB4ZjAsIDB4ODgsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4ZjYsIDB4ZmEsIDB4NzgsIDB4OGEsIDB4ZjEsIDB4OGIsCi0weDg4LCAweDQyLCAweDA0LCAweGQxLCAweGY5LCAweDZhLCAweDA4LCAweDE4LCAweDA0LCAweGUwLCAweDM4LCAweGUwLAotMHgzMiwgMHhlMCwgMHgzYSwgMHg2YiwgMHgxMCwgMHgxOCwgMHg0MCwgMHgxYSwgMHg4MSwgMHgwNywgMHgwMiwgMHhkMCwKLTB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDQsIDB4MzAsIDB4NjEsIDB4NmIsIDB4MDksIDB4MWEsIDB4YTIsIDB4NmIsCi0weDkxLCAweDQyLCAweDAwLCAweGQyLCAweDIwLCAweDZiLCAweGMwLCAweDQ2LCAweDIwLCAweDYyLCAweGU4LCAweDdiLAotMHgwMCwgMHgyOCwgMHgwOCwgMHhkMCwgMHgwMCwgMHgyMiwgMHhlYSwgMHg3MywgMHgwNSwgMHg5OSwgMHg0OCwgMHg2OSwKLTB4MDEsIDB4MzgsIDB4NDgsIDB4NjEsIDB4NzgsIDB4NmIsIDB4MDAsIDB4ZjAsIDB4NzMsIDB4ZmEsIDB4MTgsIDB4NDgsCi0weDgwLCAweDZhLCAweDgwLCAweDA2LCAweDgwLCAweDBlLCAweDAxLCAweDI4LCAweDBhLCAweGQxLCAweDIwLCAweDZhLAotMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHgwYiwgMHg0YywgMHhhMSwgMHg2YSwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMCwKLTB4MDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsCi0weDA4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDA2LCAweGUwLCAweGUwLCAweDY4LCAweDAwLCAweDI4LAotMHgwMSwgMHhkMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHhmYSwgMHgwMSwgMHgyMCwgMHhhOCwgMHg3MywgMHhlZCwgMHhlNywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDFhLCAweDAwLCAweDgwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYSwgMHgwMCwgMHg4MCwgMHhjNCwgMHgwYiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NzgsIDB4NmEsIDB4NDAsIDB4ODksCi0weGZmLCAweDIxLCAweDAxLCAweDMxLCAweDAxLCAweDQwLCAweDEwLCAweDQ4LCAweDAyLCAweGQxLCAweDgxLCAweDZjLAotMHgwMSwgMHgzMSwgMHg4MSwgMHg2NCwgMHg3OSwgMHg2YSwgMHg0OSwgMHg4OSwgMHg0OSwgMHgwYiwgMHgwMiwgMHhkMiwKLTB4NDEsIDB4NmMsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjQsIDB4MGIsIDB4NDgsIDB4NDEsIDB4NmEsIDB4MDEsIDB4MzEsCi0weDQxLCAweDYyLCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLCAweDM4LCAweDZiLAotMHgwMCwgMHhmMCwgMHhmOCwgMHhmYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiMywgMHhmOCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NzMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDE4LCAweDFhLCAweDAwLCAweDgwLAotMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgMHgwMCwgMHgyMiwgMHhmOSwgMHgxZCwgMHg2MSwgMHgzMSwgMHgwZCwgMHgxYywKLTB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4NDAsIDB4ODksCi0weDAzLCAweDBjLCAweDAxLCAweGQyLCAweDQwLCAweDBhLCAweDAzLCAweGQyLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhjMSwgMHhmZiwgMHg2NywgMHhlMCwgMHgzNSwgMHg0OCwgMHhjMCwgMHg2YiwgMHgwMCwgMHgwOSwgMHgxZiwgMHhkMywKLTB4MDgsIDB4NzgsIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NDMsIDB4MDAsIDB4Y2MsIDB4NWEsCi0weDMxLCAweDRlLCAweDllLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweDFiLCAweDg4LAotMHg5YywgMHg0MiwgMHgwZSwgMHhkMCwgMHhiOCwgMHg2OSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MSwKLTB4ZjgsIDB4NjgsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDI3LCAweGY5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDc0LCAweGY4LCAweDQ2LCAweGUwLCAweDAxLCAweDMwLAotMHgwMywgMHgyOCwgMHhlMywgMHhkYiwgMHgwMiwgMHgyMCwgMHg0MywgMHgwMCwgMHg1YywgMHgxOCwgMHhlNCwgMHg4OCwKLTB4MjIsIDB4NGUsIDB4OWUsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4MWIsIDB4ODgsCi0weDljLCAweDQyLCAweDAzLCAweGQxLCAweDAxLCAweDIzLCAweDAxLCAweDM4LCAweGQ4LCAweDQyLCAweGYwLCAweGRjLAotMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwgMHhjNCwgMHhkMCwgMHgxYiwgMHg0ZSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4ZjAsIDB4MTgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MjQsIDB4ZDAsIDB4N2QsIDB4NjMsIDB4MDAsIDB4OTgsCi0weDQwLCAweDg5LCAweDAwLCAweDBjLCAweDFmLCAweGQyLCAweDAwLCAweDI0LCAweDJkLCAweDIzLCAweDliLCAweDAxLAotMHhmMCwgMHgxOCwgMHhjMCwgMHg2YiwgMHgzNSwgMHgxYywgMHgwMCwgMHgyOCwgMHgxNywgMHhkMCwgMHhmZSwgMHgxZCwKLTB4MmQsIDB4MzYsIDB4YTIsIDB4MDAsIDB4NTIsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsCi0weGQyLCAweDZiLCAweDM4LCAweDFjLCAweDMxLCAweDFjLCAweDAyLCAweGYwLCAweDdiLCAweGZjLCAweDAxLCAweDI4LAotMHgwZSwgMHhkMCwgMHgwMSwgMHgzNCwgMHhhMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKLTB4YzAsIDB4MTgsIDB4YzAsIDB4NmIsIDB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MmEsCi0weDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA4LCAweGY4LCAweGY4LCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NjksIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjEsCi0weGY4LCAweDY4LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDc4LCAweDZhLCAweDQwLCAweDg5LAotMHgwMSwgMHgwYywgMHgwZSwgMHhkMiwgMHg0MCwgMHgwYSwgMHgwYywgMHhkMywgMHgzOCwgMHg2OCwgMHg0MCwgMHgwOCwKLTB4MDIsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGMsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGJiLCAweGY4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA4LCAweGY4LCAweDAyLCAweGUwLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgzMCwgMHhmZiwgMHgwMSwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDEsIDB4MjEsIDB4MDAsIDB4NmIsIDB4NDAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weGIwLCAweGI0LCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweDA5LCAweDhiLCAweDg5LCAweDA4LCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg4NCwgMHg2YSwgMHhjMiwgMHgxZCwgMHg2MSwgMHgzMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyOSwKLTB4MGMsIDB4ZGQsIDB4ODcsIDB4MDAsIDB4M2QsIDB4MTksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGQzLCAweDUxLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHg4OCwgMHg0MiwgMHhmMiwgMHhkYiwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHhhMCwgMHhiMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsIDB4MjEsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDBiLCAweDkxLCAweGMxLCAweDFkLCAweDUzLCAweDMxLCAweDE5LCAweDQzLCAweDFmLCAweDkxLAotMHgwOSwgMHg2OCwgMHgwMSwgMHhhZiwgMHhmYSwgMHgxZCwgMHgzOSwgMHgzMiwgMHgxZSwgMHg5MiwgMHgxNywgMHhhYiwKLTB4NTksIDB4ODAsIDB4M2EsIDB4NDksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGEsIDB4NmEsIDB4MTMsIDB4NDMsCi0weGNjLCAweDFkLCAweDExLCAweDM0LCAweDg5LCAweDY5LCAweDA5LCAweDAzLCAweDA5LCAweDBiLCAweDIyLCAweDY5LAotMHhlNSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxZCwgMHg5NSwgMHhmYywgMHgxZCwgMHgzOSwgMHgzNCwgMHg2NCwgMHg4YiwKLTB4NjQsIDB4MDksIDB4MDUsIDB4MzQsIDB4MjQsIDB4MDYsIDB4MjQsIDB4MGUsIDB4MWMsIDB4OTQsIDB4NTYsIDB4MWEsCi0weDFiLCAweDk2LCAweDFjLCAweDljLCAweDJlLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDAxLCAweDI2LAotMHgxZCwgMHg5ZCwgMHgxYSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwMSwgMHhkMSwgMHgzMiwgMHgxYywgMHgwYiwgMHhlMCwKLTB4OTEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4NTIsIDB4MWIsIDB4MWIsIDB4OWUsIDB4YjUsIDB4MTgsIDB4MDAsIDB4ZTAsCi0weDU1LCAweDFhLCAweDAxLCAweDIyLCAweDI0LCAweDAxLCAweGFjLCAweDQyLAotMHgwMCwgMHhkMywgMHgwMCwgMHgyMiwgMHgwMSwgMHgyYSwgMHhlNiwgMHhkMSwgMHg5MSwgMHgwNywgMHgwMSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4OTMsIDB4MDcsIDB4MDEsIDB4MWQsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDc5LCAweDYwLCAweGMxLCAweDFkLCAweDAxLCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MCwgMHgxZiwgMHg5OSwgMHgwOSwgMHg2OCwgMHgxZSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4NTEsIDB4ODMsIDB4YzEsIDB4MWQsIDB4MWQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDM4LCAweDYzLCAweDc5LCAweDYyLCAweGMxLCAweDFkLCAweDExLCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MSwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YzEsIDB4MWQsIDB4MTcsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDgzLCAweDBlLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhjMCwgMHg0NiwgMHhmOCwgMHg4MSwgMHgzOCwgMHg2OCwgMHg0MCwgMHgwOCwgMHgwMiwgMHhkMywgMHgzOCwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4NWMsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDU4LCAweGZmLCAweDIwLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHhmOCwgMHhiNSwgMHgwNywgMHgxYywKLTB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4NDEsIDB4OGIsIDB4MzksIDB4NGEsIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZGQsCi0weDQyLCAweDgzLCAweDQyLCAweDhiLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDAxLCAweDIwLCAweDNhLCAweDFkLAotMHgwNiwgMHhjYSwgMHhiYiwgMHg2YSwgMHgwMiwgMHhmMCwgMHgwZSwgMHhmZiwgMHgzMywgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MzMsIDB4NGUsIDB4MzAsIDB4NmEsIDB4MzMsIDB4NGMsIDB4ZTEsIDB4NmQsIDB4NDEsIDB4MTgsCi0weDM4LCAweDZiLCAweGMzLCAweDFkLCAweDA1LCAweDMzLCAweDAxLCAweDIwLCAweDcyLCAweDZhLCAweDAyLCAweGYwLAotMHhmYiwgMHhmZSwgMHhlMCwgMHg2ZCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgyNSwgMHhiMSwgMHg2YSwgMHg4MSwgMHg0MiwKLTB4MDEsIDB4ZDgsIDB4ZTUsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4ZTAsIDB4NjUsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsCi0weDIwLCAweDFjLCAweGUxLCAweDZkLCAweGU0LCAweDE4LCAweDIyLCAweDY4LCAweDkyLCAweDAwLCAweDI3LCAweDRiLAotMHhjMCwgMHg0NiwgMHg5OSwgMHg1MCwgMHgyNiwgMHg0OCwgMHhjMSwgMHg2YiwgMHg0YSwgMHgwOCwgMHgwNSwgMHhkMywKLTB4NDksIDB4MDgsIDB4NDksIDB4MDAsIDB4YzEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZDYsIDB4ZmYsCi0weDIyLCAweDRhLCAweDFmLCAweDQ4LCAweGMxLCAweDFkLCAweDg5LCAweDMxLCAweDBiLCAweDc4LCAweDAwLCAweDJiLAotMHgwMiwgMHhkMCwgMHg0OSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkMSwgMHgxZSwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MjAsIDB4NjgsIDB4ODAsIDB4MDAsIDB4MTksIDB4NGIsIDB4YzMsIDB4MTgsIDB4MDUsIDB4Y2UsCi0weGMxLCAweDFkLCAweDExLCAweDMxLCAweDAxLCAweDIwLCAweDAyLCAweGYwLCAweGM3LCAweGZlLCAweDE0LCAweDQ4LAotMHgyMSwgMHg2OCwgMHgwMSwgMHgzMSwgMHgyMSwgMHg2MCwgMHgxNywgMHgyOSwgMHgwMCwgMHhkMywgMHgyNSwgMHg2MCwKLTB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGQsIDB4NjUsIDB4NzksIDB4NmEsIDB4M2EsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDUxLCAweDYyLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDY4LCAweDAwLCAweDI5LAotMHgwMywgMHhkMSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHgwNCwgMHhlMCwgMHgzOSwgMHg2YiwKLTB4YzIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjUsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsCi0weGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGVhLCAweDA1LCAweDAwLCAweDAwLAotMHgxOCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NDQsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsCi0weDA0LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGI1LCAweDExLCAweDRlLCAweGZmLCAweDI1LCAweDAxLCAweDM1LAotMHgxMCwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzNSwgMHg2MCwgMHg3OCwgMHg2OSwgMHgwMSwgMHgzOCwgMHg3OCwgMHg2MSwKLTB4YmMsIDB4NjgsIDB4MDAsIDB4MmMsIDB4MTAsIDB4ZDAsIDB4MjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjAsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDIxLCAweGY4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDA0LCAweGZhLAotMHgwOCwgMHg0OCwgMHg4MCwgMHg2YSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwNywgMHhlOSwgMHhkMSwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4NDgsIDB4YzEsIDB4NzksIDB4MDEsIDB4MzEsIDB4YzEsIDB4NzEsCi0weGY3LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDFiLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4MDEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDM4LCAweDY4LCAweGMwLCAweDA4LAotMHgwOSwgMHhkMywgMHgxZCwgMHg0OCwgMHgwMSwgMHg2YSwgMHgwMSwgMHgzOSwgMHgwMSwgMHg2MiwgMHgyMCwgMHgzMCwKLTB4MDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZmUsIDB4ZjcsIDB4ZTksIDB4ZmQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGY4LCAweDFkLCAweDFkLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDE2LCAweDRjLAotMHg2MSwgMHg2YSwgMHg4MSwgMHg0MiwgMHgyMSwgMHhkMSwgMHgwMSwgMHgxYywgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjksIDB4MWEsIDB4ZDEsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZjgsCi0weDYwLCAweDYyLCAweDYwLCAweDZhLCAweDIxLCAweDZhLCAweDg4LCAweDQyLCAweDA1LCAweGQwLCAweDAxLCAweDIxLAotMHg4OSwgMHgwNywgMHgwMSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHhmMiwgMHhkMCwgMHg1MSwgMHgyMSwKLTB4ODksIDB4MDMsIDB4NjIsIDB4NmEsIDB4MjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4NjAsIDB4NmIsCi0weGEyLCAweDZiLCAweDgwLCAweDFhLCAweDA0LCAweDM4LCAweGM4LCAweDYwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3OSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmNywgMHhlNywKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGMxLCAweDFkLCAweDAxLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLAotMHgwOCwgMHgxOCwgMHgwZCwgMHgzMCwgMHg4MSwgMHgwNywgMHgwMiwgMHhkMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwKLTB4MDQsIDB4MzAsIDB4MDQsIDB4NDksIDB4OGEsIDB4NmIsIDB4MTIsIDB4MTgsIDB4NGIsIDB4NmIsIDB4OWEsIDB4NDIsCi0weDAwLCAweGQ5LCAweDA4LCAweDZiLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwNCwgMHg0OCwgMHhjMCwgMHg2OCwgMHgxMCwgMHgyOCwgMHgwMSwgMHhkMywgMHgwMCwgMHhmMCwKLTB4MDUsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weDg4LCAweGI1LCAweDBjLCAweDRmLCAweDM4LCAweDc5LCAweDAwLCAweDI4LCAweDExLCAweGQxLCAweDBiLCAweDQ5LAotMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhmNSwgMHhmZCwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMCwgMHgwMSwgMHgyMCwKLTB4MzgsIDB4NzEsIDB4MDgsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDcsIDB4NDgsIDB4NDIsIDB4NjgsCi0weDA3LCAweDRiLCAweDAxLCAweDY4LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweGRmLCAweGZkLCAweDg4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHhmNSwgMHgyYywgMHhmZiwgMHhmZiwKLTB4MTAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDkwLCAweGI1LCAweDAxLCAweDIwLCAweDQwLCAweDAyLCAweDEwLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLAotMHgwZiwgMHg0ZiwgMHgxMCwgMHgyMSwgMHhmOCwgMHgxZCwgMHgzZCwgMHgzMCwgMHgwMiwgMHhmMCwgMHg0YywgMHhmYywKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZmMsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsCi0weDAwLCAweGYwLCAweDE0LCAweGY4LCAweDAwLCAweDIwLCAweGM5LCAweDIzLCAweDFiLCAweDAxLCAweGY5LCAweDE4LAotMHgwOCwgMHg3MSwgMHhlMCwgMHg2OCwgMHgxMCwgMHgyOCwgMHgwNCwgMHhkMywgMHgwMSwgMHgyMCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4NDgsIDB4NzMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDM3LCAweDQ4LAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMSwgMHgxOCwgMHhjOSwgMHg2OCwgMHgzNSwgMHg0ZCwgMHgxMCwgMHgyOSwKLTB4MDAsIDB4ZDksIDB4MTAsIDB4MjEsIDB4NjksIDB4NjIsIDB4MzIsIDB4NDgsIDB4YzEsIDB4NmMsIDB4MDAsIDB4NmUsCi0weDgxLCAweDQyLCAweDA3LCAweGQ5LCAweDA4LCAweDFhLCAweDA3LCAweDA5LCAweDAwLCAweDI0LCAweDY4LCAweDZhLAotMHhiOCwgMHg0MiwgMHgxMiwgMHhkMiwgMHgwNywgMHgxYywgMHgxMCwgMHhlMCwgMHg4MSwgMHg0MiwgMHgyYSwgMHhkMiwKLTB4MmMsIDB4NGEsIDB4NTIsIDB4NmIsIDB4MTAsIDB4MWEsIDB4MDcsIDB4MDksIDB4NjgsIDB4NmEsIDB4YjgsIDB4NDIsCi0weDA1LCAweGQ5LCAweDBjLCAweDA5LCAweDM5LCAweDE5LCAweDg4LCAweDQyLCAweDAzLCAweGQyLCAweGM0LCAweDFiLAotMHgwMSwgMHhlMCwgMHgwMCwgMHgyNCwgMHgwNywgMHgxYywgMHgzZSwgMHgxOSwgMHgzMCwgMHgwMSwgMHgyNSwgMHg0OSwKLTB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4M2QsIDB4ZDAsIDB4MjMsIDB4NDgsIDB4MDAsIDB4MmMsCi0weDFhLCAweGQxLCAweDFlLCAweDQ5LCAweDNhLCAweDAxLCAweDZmLCAweDYyLCAweDA5LCAweDZlLCAweDhjLCAweDE4LAotMHgxZCwgMHg0ZCwgMHg2YiwgMHg2YiwgMHhhMywgMHg0MiwgMHgwMCwgMHhkOCwgMHhlNCwgMHgxYSwgMHgxZSwgMHg0YiwKLTB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4ZWEsIDB4NmEsIDB4NTEsIDB4MTgsCi0weDJhLCAweDZiLCAweDAzLCAweDFjLCAweDIwLCAweGUwLCAweDFiLCAweDQ4LCAweDAxLCAweDZiLCAweDAxLCAweDMxLAotMHgwMSwgMHg2MywgMHgwMCwgMHgyMCwgMHg2OCwgMHg2MiwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MTAsIDB4NDksIDB4MjQsIDB4MDEsIDB4M2YsIDB4MDEsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4M2EsIDB4NDMsCi0weDZlLCAweDYyLCAweDAwLCAweDkyLCAweDBlLCAweDRkLCAweGVhLCAweDZhLCAweDA5LCAweDZlLCAweDUxLCAweDE4LAotMHgwMywgMHgxYywgMHgwNiwgMHgxYywgMHgwMCwgMHgyMCwgMHgyYSwgMHg2YiwgMHgwMiwgMHhmMCwgMHg0YSwgMHhmZCwKLTB4MGMsIDB4NGEsIDB4MjIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YmIsIDB4MTksIDB4ZTksIDB4NmEsIDB4MmEsIDB4NmIsCi0weDAwLCAweDIwLCAweDAyLCAweGYwLCAweDQxLCAweGZkLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAweDA0LCAweDY2LAotMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwMSwgMHgyMCwgMHhkYSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NWQsIDB4MmUsIDB4ZmYsIDB4ZmYsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDM2LCAweDAyLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwNCwgMHg0OCwgMHgwMSwgMHg2ZSwgMHgwNCwgMHg0YSwgMHg4MCwgMHgzMCwgMHhkMSwgMHg2MCwgMHgwMiwgMHgyMywKLTB4YzEsIDB4NmIsIDB4MTksIDB4NDMsIDB4YzEsIDB4NjMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDAxLCAweDIwLCAweDgwLCAweDAyLAotMHgxYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHgyNywgMHgxYiwgMHg0ZSwgMHgzMywgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZjUsIDB4MTgsIDB4NjgsIDB4NmEsIDB4MDAsIDB4MjgsIDB4MWQsIDB4ZDksIDB4MTksIDB4NGMsCi0weDY4LCAweDQ2LCAweDEwLCAweDIxLCAweDAyLCAweGYwLCAweDkwLCAweGZiLCAweDY4LCAweDQ2LCAweDAwLCAweGYwLAotMHgzMywgMHhmOCwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMCwgMHgxNSwgMHg0OSwgMHg0OCwgMHg2OSwgMHgwMSwgMHgzMCwKLTB4NDgsIDB4NjEsIDB4MGEsIDB4ZTAsIDB4MTMsIDB4NDksIDB4NjAsIDB4N2IsIDB4MDEsIDB4MzAsIDB4NjAsIDB4NzMsCi0weDg4LCAweDc5LCAweDAxLCAweDMwLCAweDg4LCAweDcxLCAweDExLCAweDQ4LCAweDAwLCAweDY4LCAweDAyLCAweGYwLAotMHg2NSwgMHhmOSwgMHg2OCwgMHg2YSwgMHgwMSwgMHgzNywgMHhiOCwgMHg0MiwgMHhlMiwgMHhkOCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MjEsCi0weDgxLCAweDczLCAweGZmLCAweGY3LCAweDA1LCAweGZiLCAweGZmLCAweGY3LCAweGUzLCAweGZlLCAweDA0LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDU4LCAweDA0LCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDE3LCAweDRmLAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOSwgMHgxOCwgMHgwMCwgMHgyMiwgMHhjYiwgMHg2OCwgMHgwMCwgMHgyYiwKLTB4MjMsIDB4ZDAsIDB4MDEsIDB4M2IsIDB4Y2IsIDB4NjAsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZmYsIDB4MTgsCi0weGJiLCAweDY5LCAweDFjLCAweDZkLCAweGMwLCAweDQ2LCAweGJjLCAweDYxLCAweDA0LCAweDY4LCAweGMwLCAweDQ2LAotMHg1YywgMHg2MCwgMHg0NCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5YywgMHg2MCwgMHg4NCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MWMsIDB4NjEsIDB4YzAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTgsIDB4NjEsIDB4MWEsIDB4NjUsIDB4MDgsIDB4NjksCi0weDQyLCAweDFjLCAweDBhLCAweDYxLCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDM4LCAweDZhLCAweGMwLCAweDQ2LAotMHgwMywgMHg2NSwgMHgwMCwgMHhlMCwgMHhmYiwgMHg2MSwgMHgzYiwgMHg2MiwgMHgxOCwgMHgxYywgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDBhLCAweDRhLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQxLCAweDE4LCAweGM4LCAweDY5LCAweDE5LCAweDIzLAotMHhkYiwgMHgwMSwgMHhkMiwgMHgxOCwgMHgxMywgMHg2OSwgMHgwMCwgMHgyYiwgMHgwNiwgMHhkMCwgMHgwMSwgMHgzYiwKLTB4MTMsIDB4NjEsIDB4Y2EsIDB4NjksIDB4MTIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4Y2EsIDB4NjEsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIxLCAweDExLCAweDYxLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwNiwgMHg0YSwgMHgxMSwgMHg2OSwgMHg0YiwgMHgxYywgMHgxMywgMHg2MSwgMHg0MCwgMHgzMiwgMHgwMCwgMHgyOSwKLTB4MDEsIDB4ZDAsIDB4ZDEsIDB4NjksIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4ZDAsIDB4NjEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDA2LCAweDRhLCAweGQxLCAweDY4LAotMHg0YiwgMHgxYywgMHhkMywgMHg2MCwgMHg0MCwgMHgzMiwgMHgwMCwgMHgyOSwgMHgwMSwgMHhkMCwgMHg5MSwgMHg2OSwKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4OTAsIDB4NjEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGU4LCAweDFhLCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDAwLCAweDIxLAotMHgwZiwgMHg0YSwgMHg5NywgMHg4OSwgMHg5MiwgMHg2YSwgMHg0YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHg5YiwgMHg4YSwKLTB4MDAsIDB4MmIsIDB4MTIsIDB4ZDAsIDB4YmIsIDB4NDIsIDB4MTAsIDB4ZGMsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsCi0weDYzLCAweDQzLCAweGQzLCAweDE4LCAweGRjLCAweDFmLCAweDQ5LCAweDNjLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMywgMHgyYiwgMHgwMiwgMHhkMCwKLTB4MDAsIDB4MjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksIDB4ZTQsIDB4ZDMsCi0weDAxLCAweDIwLCAweGY4LCAweGU3LCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweGY3LCAweGI1LCAweDg2LCAweGIwLAotMHgzZCwgMHg0YSwgMHgwNywgMHgxYywgMHhkMSwgMHg2OSwgMHg4ZiwgMHg0MCwgMHgwMywgMHgxYywgMHgxNCwgMHg2YSwKLTB4ZTMsIDB4NDAsIDB4NWYsIDB4NDAsIDB4MDcsIDB4OWUsIDB4OGUsIDB4NDAsIDB4NzcsIDB4NDAsIDB4Y2YsIDB4NDAsCi0weDk0LCAweDY5LCAweGMwLCAweDQ2LCAweDA1LCAweDk0LCAweDAzLCAweDFjLCAweGEzLCAweDQwLCAweDAwLCAweDI1LAotMHgxNCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5NCwgMHgwMCwgMHgyYywgMHg1ZCwgMHhkOSwgMHgxYywgMHgxYywKLTB4MzIsIDB4NGUsIDB4MjYsIDB4NDMsIDB4OTQsIDB4NjksIDB4ZTYsIDB4NDAsIDB4MzMsIDB4MWMsIDB4MDMsIDB4OTYsCi0weDUzLCAweDZhLCAweGMwLCAweDQ2LCAweDAyLCAweDkzLCAweGQyLCAweDZhLCAweGMwLCAweDQ2LCAweDAxLCAweDkyLAotMHhiYiwgMHgwMCwgMHgwMiwgMHg5YSwgMHhkMiwgMHg1OCwgMHgxMywgMHgxYywgMHgwNSwgMHg5YywgMHhlMywgMHg0MCwKLTB4MDMsIDB4OWMsIDB4YTMsIDB4NDIsIDB4M2UsIDB4ZDEsIDB4OGEsIDB4NDAsIDB4Y2EsIDB4NDAsIDB4MTQsIDB4MWMsCi0weDYzLCAweDAwLCAweDFiLCAweDE5LCAweDViLCAweDAxLCAweDAxLCAweDlhLCAweGQyLCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHgwMSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwKLTB4MWIsIDB4MGUsIDB4MDMsIDB4MmIsIDB4MmMsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsCi0weDUxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA3LCAweDllLCAweDFlLCAweDQwLCAweDAwLCAweDk2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHg0OSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4ODMsIDB4NDIsIDB4MWIsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4NGQsIDB4MzYsCi0weDMzLCAweDQzLCAweDFiLCAweDY4LCAweDAwLCAweDllLCAweGIzLCAweDQyLCAweDEyLCAweGQxLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwOCwgMHg5YiwKLTB4MzIsIDB4MmIsIDB4MDQsIDB4ZDEsIDB4MDIsIDB4MmEsIDB4MDcsIDB4ZDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MTQsCi0weDBmLCAweGUwLCAweDA4LCAweDliLCAweDMzLCAweDJiLCAweDAxLCAweGQxLCAweDAxLCAweDJhLCAweGY3LCAweGQwLAotMHgwNCwgMHg5YSwgMHgwMSwgMHgzNywgMHg5NywgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyNywgMHgwNCwgMHg5YSwKLTB4MDEsIDB4MzUsIDB4YWEsIDB4NDIsIDB4YWUsIDB4ZDgsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDksIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgyNywgMHg0ZCwgMHg2OCwgMHg2OSwgMHgwMCwgMHgyOCwKLTB4MDYsIDB4ZDAsIDB4MjYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4MmIsIDB4ZjgsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIzLCAweDRjLCAweDAwLCAweDI2LCAweGEwLCAweDY4LCAweDIzLCAweDRmLAotMHgwMCwgMHgyOCwgMHgxNiwgMHhkMCwgMHgwZiwgMHhlMCwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMiwgMHhkMywKLTB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4MGYsIDB4ZTAsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsIDB4ZGUsIDB4ZmUsCi0weDAwLCAweDI4LCAweGVhLCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAxLCAweGQzLCAweDAxLCAweDIwLAotMHgzOCwgMHg3MSwgMHhlOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwKLTB4ZTksIDB4ZDAsIDB4NjgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NjAsCi0weGZlLCAweGY3LCAweGJjLCAweGZiLCAweDAwLCAweDI4LCAweGQ2LCAweGQxLCAweDY4LCAweDY4LCAweDAwLCAweDI4LAotMHhmNiwgMHhkMSwgMHgxMSwgMHhlMCwgMHgwMCwgMHgyOCwgMHhkMCwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4Y2EsIDB4ZTcsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsCi0weGI5LCAweGZlLCAweDAwLCAweDI4LCAweGM1LCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAxLCAweGQzLAotMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHhlOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhiZCwgMHhkMCwgMHgzOCwgMHg3OSwKLTB4MDAsIDB4MjgsIDB4ZTcsIDB4ZDAsIDB4YjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDVjLCAweDA0LCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDhjLCAweDA2LCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MWQsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweDAxLCAweGYwLCAweDlkLCAweGZjLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDQxLCAweDY4LAotMHgxOSwgMHg0MCwgMHgwYywgMHgwZiwgMHg2MSwgMHgwMSwgMHgwOSwgMHgxYiwgMHg4OSwgMHgwMCwgMHgxOCwgMHg0YSwKLTB4OGYsIDB4MTgsIDB4MDEsIDB4MjEsIDB4MzksIDB4ODAsIDB4ODEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjUsCi0weDQxLCAweDZhLCAweGMwLCAweDQ2LCAweDc5LCAweDY3LCAweGI5LCAweDZjLCAweGZhLCAweDZjLCAweDg5LCAweDE4LAotMHhiOSwgMHg2NCwgMHgwMCwgMHgyMSwgMHhmOSwgMHg2NCwgMHhiYSwgMHg2YiwgMHgzYiwgMHg2ZCwgMHhkMiwgMHgxOCwKLTB4YmEsIDB4NjMsIDB4MzksIDB4NjUsIDB4NDIsIDB4NmEsIDB4MjAsIDB4MzIsIDB4NTEsIDB4NzEsIDB4NzksIDB4NmQsCi0weDdhLCAweDZmLCAweGQyLCAweDZkLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGZjLCAweGY3LCAweGNhLCAweGZmLAotMHgyMCwgMHgwMSwgMHgwOSwgMHg0OSwgMHg0MCwgMHgxOCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4NzgsIDB4NmYsIDB4MDEsIDB4ZjAsIDB4YzYsIDB4ZmIsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg0MCwgMHgyMCwKLTB4MTIsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4NTksIDB4ZmMsIDB4MDcsIDB4MWMsCi0weDQwLCAweDY4LCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLCAweDA2LCAweDBmLCAweDcwLCAweDAxLAotMHg4MCwgMHgxYiwgMHg4MCwgMHgwMCwgMHgwYywgMHg0OSwgMHg0NCwgMHgxOCwgMHhiOCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4NjAsIDB4NjUsIDB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjcsIDB4ODAsIDB4NmYsIDB4MDUsIDB4MWQsCi0weGU1LCAweDYzLCAweGI5LCAweDY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDg5LCAweGY5LCAweDM4LCAweDFjLAotMHgyMSwgMHgxYywgMHgzMiwgMHgxYywgMHgyYiwgMHgxYywgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDRiLCAweDZmLCAweDliLCAweDZmLCAweDFmLCAweDFkLCAweGNmLCAweDYzLCAweDA1LCAweDY4LAotMHgwMCwgMHgyMywgMHg4NCwgMHg2OSwgMHhhNCwgMHgwOCwgMHgwOCwgMHhkMCwgMHg5YywgMHgwMCwgMHgyZSwgMHg1OSwKLTB4YzAsIDB4NDYsIDB4M2UsIDB4NTEsIDB4ODQsIDB4NjksIDB4YTQsIDB4MDgsIDB4MDEsIDB4MzMsIDB4OWMsIDB4NDIsCi0weGY2LCAweGQ4LCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweDAzLCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhmZiwgMHhiNSwgMHg4MSwgMHhiMCwgMHgwNCwgMHgxYywgMHgxZCwgMHgxYywgMHgwZiwgMHgxYywKLTB4NDYsIDB4NDgsIDB4MDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjEsIDB4ZjksIDB4MWQsIDB4NTEsIDB4MzEsCi0weGJkLCAweDY1LCAweDAwLCAweDkxLCAweDIwLCAweDFjLCAweGZkLCAweGY3LCAweDVkLCAweGZjLCAweGY4LCAweDZkLAotMHg0MCwgMHgwOSwgMHgzNiwgMHhkMiwgMHhiOCwgMHg2ZCwgMHgwNiwgMHg3YiwgMHg0MywgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWUsIDB4NDMsIDB4MTcsIDB4MjEsIDB4NDksIDB4MDIsIDB4MDEsIDB4NzMsIDB4MGIsIDB4MGEsIDB4NDMsIDB4NzMsCi0weDAwLCAweDk5LCAweDIwLCAweDFjLCAweGZkLCAweGY3LCAweDRjLCAweGZjLCAweGI4LCAweDZkLCAweGMwLCAweDQ2LAotMHgwNiwgMHg3MywgMHgzMywgMHgwYSwgMHg0MywgMHg3MywgMHhmOCwgMHg2ZCwgMHg0MCwgMHgwOSwgMHgyMCwgMHhkMiwKLTB4NjAsIDB4NjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDMsIDB4OTgsIDB4MDEsIDB4ZjAsIDB4Y2MsIDB4ZmMsCi0weDYwLCAweDY4LCAweDMyLCAweDRiLCAweDE4LCAweDQzLCAweDYwLCAweDYwLCAweDIwLCAweDFjLCAweDAxLCAweGYwLAotMHgzNSwgMHhmZCwgMHgwMCwgMHgyNSwgMHg3ZCwgMHg2MCwgMHhiZCwgMHg2MCwgMHgzZCwgMHg2NCwgMHg3ZCwgMHg2NCwKLTB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzEsIDB4ZmYsIDB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDM4LCAweDgwLCAweDdkLCAweDYyLCAweDI5LCAweDQ4LCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHhhMCwgMHhmYiwgMHg0NCwgMHhlMCwgMHgyMCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjQsIDB4NjAsIDB4NjgsCi0weDAyLCAweDA0LCAweDEyLCAweDBjLCAweDc4LCAweDZlLCAweDAxLCAweDI2LCAweGMxLCAweDFkLCAweDBkLCAweDMxLAotMHg4YSwgMHg0MiwgMHgwMiwgMHhkMiwgMHgzYSwgMHg2NCwgMHgwOCwgMHgxYywgMHgwZSwgMHhlMCwgMHg0MSwgMHgxOSwKLTB4ODksIDB4ODksIDB4ZjAsIDB4MjMsIDB4MTksIDB4NDAsIDB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsCi0weGY4LCAweDYwLCAweGY5LCAweDYxLCAweDYxLCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDgxLCAweDQyLAotMHgxNiwgMHhkMiwgMHgzOSwgMHg2NCwgMHg2MywgMHg2OCwgMHgxOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg0MCwgMHgxYSwKLTB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODIsIDB4MDAsIDB4YTAsIDB4NjEsCi0weDIwLCAweDY4LCAweDA5LCAweDE4LCAweDliLCAweDE4LCAweDYzLCAweDYwLCAweGMzLCAweDFmLCAweDA1LCAweDNiLAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmYSwgMHg3ZSwgMHg4MCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4YmYsIDB4ZmIsIDB4MGIsIDB4ZTAsIDB4YjksIDB4NjgsIDB4MDgsIDB4MWEsIDB4MDAsIDB4MjUsIDB4NzgsIDB4NjIsCi0weGJkLCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDNjLCAweGZjLCAweDIwLCAweDFjLCAweDM5LCAweDFjLAotMHgwMCwgMHhmMCwgMHg2NCwgMHhmOCwgMHgwNSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsCi0weGYwLCAweGI1LCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDZjLCAweGY5LCAweDZiLCAweDBkLCAweDE4LAotMHgyMSwgMHg2OCwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhhMiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwYiwgMHhkOSwKLTB4ODIsIDB4MDAsIDB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weGMwLCAweDQ2LCAweGFiLCAweDUwLCAweGEyLCAweDY5LCAweDAxLCAweDMwLCAweDgyLCAweDQyLCAweGYzLCAweGQ4LAotMHg3OCwgMHg2ZSwgMHhmOSwgMHg2YiwgMHgwOSwgMHgxOCwgMHg4OSwgMHg4OSwgMHhmMCwgMHgyMywgMHgxOSwgMHg0MCwKLTB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsIDB4ZjgsIDB4NjAsIDB4ZjksIDB4NjEsIDB4MjAsIDB4NjgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAxLCAweDY4LCAweDc4LCAweDZjLAotMHhmYywgMHhmNywgMHg5NSwgMHhmZiwgMHg3OCwgMHg2NCwgMHg2MCwgMHg2OCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4ZjgsIDB4NjgsIDB4ODEsIDB4NDIsIDB4MTksIDB4ZDIsIDB4MzksIDB4NjQsIDB4NjMsIDB4NjgsIDB4MTksIDB4MDQsCi0weDA5LCAweDBjLCAweDQwLCAweDFhLCAweDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgyLCAweDAwLCAweGEwLCAweDYxLAotMHgyMCwgMHg2OCwgMHgwOSwgMHgxOCwgMHg5YiwgMHgxOCwgMHg2MywgMHg2MCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4ZmEsIDB4MDEsIDB4MjAsIDB4NzgsIDB4ODAsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDVlLCAweGZiLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGI5LCAweDY4LAotMHgwOCwgMHgxYSwgMHg3OCwgMHg2MiwgMHgwMCwgMHgyMCwgMHhiOCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZDksIDB4ZmIsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4ZjgsIDB4ZWYsIDB4ZTcsCi0weGYwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDhlLCAweDQ4LCAweDQxLCAweDY5LAotMHgwMSwgMHgzMSwgMHg0MSwgMHg2MSwgMHgwMywgMHgyMCwgMHgwMCwgMHgwNywgMHg2MSwgMHg2OCwgMHgwOCwgMHg0MCwKLTB4MDYsIDB4MGYsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4NjgsIDB4MTEsIDB4MTgsIDB4ZmIsIDB4NjgsCi0weGQyLCAweDFhLCAweDdiLCAweDY4LCAweDlkLCAweDFhLCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDM4LCAweDFjLAotMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwgMHgyNiwgMHhmYSwgMHgwMCwgMHgyMCwgMHg3OCwgMHg4MCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MmUsIDB4ZmIsIDB4NjAsIDB4NjgsIDB4NDAsIDB4MTksIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDYwLCAweDYwLCAweDMwLCAweDFjLCAweDAxLCAweGYwLCAweGUwLCAweGZiLCAweDdkLCAweDRlLCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhmMCwgMHgxOCwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgxOSwgMHhkMCwgMHgwMCwgMHgyNSwKLTB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MTIsIDB4ZDAsCi0weGFhLCAweDAwLCAweDkyLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LCAweGQyLCAweDY4LAotMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMSwgMHhmMCwgMHgxYywgMHhmZSwgMHgwMSwgMHgzNSwgMHhhOCwgMHgwMCwKLTB4ODAsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsCi0weGVjLCAweGQxLCAweGY4LCAweDZiLCAweDAxLCAweDFmLCAweDhhLCAweDFjLCAweGZhLCAweDYzLCAweGZhLCAweDY4LAotMHg3ZCwgMHg2YywgMHgwMCwgMHhmMCwgMHhiYiwgMHhmOSwgMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTAsIDB4ZmYsIDB4MDMsIDB4OTAsIDB4ZjksIDB4NmIsIDB4M2EsIDB4NmUsCi0weDhlLCAweDE4LCAweDIwLCAweDY4LCAweDEyLCAweDE4LCAweDAxLCAweDkyLCAweDdhLCAweDZlLCAweDhkLCAweDE4LAotMHgxMSwgMHgxOCwgMHgwMiwgMHg5MSwgMHhjOCwgMHgxZCwgMHgwOSwgMHgzMCwgMHhlMCwgMHg2MCwgMHhiMSwgMHg4OCwKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDc4LCAweDYxLCAweDY4LCAweDY4LCAweDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwKLTB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDgsIDB4NDMsIDB4MzgsIDB4NjEsIDB4YTgsIDB4ODksCi0weDA5LCAweDIzLCAweDFiLCAweDAyLCAweDE4LCAweDQwLCAweGI4LCAweDYxLAotMHhhOCwgMHg4OSwgMHg5OCwgMHg0MywgMHhhOCwgMHg4MSwgMHhhOCwgMHg4OSwgMHgwMiwgMHg5OSwgMHhjMCwgMHg0NiwKLTB4ODgsIDB4ODEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4ODAsIDB4YjAsIDB4ODAsIDB4NzAsIDB4ODEsIDB4NjgsIDB4NjAsCi0weDI4LCAweDgyLCAweGI5LCAweDZlLCAweDMwLCAweDFjLCAweGZjLCAweGY3LCAweGU4LCAweGZlLCAweDM4LCAweDg2LAotMHhmYSwgMHg2OSwgMHgzMCwgMHgxYywgMHgyOSwgMHgxYywgMHhmYywgMHhmNywgMHgwMywgMHhmZiwgMHg3OCwgMHg4NiwKLTB4M2QsIDB4OGUsIDB4NzgsIDB4OGUsIDB4MDMsIDB4OTksIDB4ZmMsIDB4ZjcsIDB4YzgsIDB4ZmUsIDB4MDAsIDB4OTAsCi0weDYwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDM5LCAweDZlLCAweDQxLCAweDFhLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg3YSwgMHg2ZSwgMHg4MiwgMHgxYSwgMHgxMywgMHgwNCwgMHgxYiwgMHgwYywgMHgxYSwgMHgwMiwKLTB4MWIsIDB4MGEsIDB4MWEsIDB4NDMsIDB4MTYsIDB4MDQsIDB4MzYsIDB4MGMsIDB4YmEsIDB4NjgsIDB4ODIsIDB4NDIsCi0weDAxLCAweGQyLCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweDEwLCAweDFhLCAweGI4LCAweDYwLCAweDA4LCAweDAyLAotMHgwOSwgMHgxMiwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4YTMsIDB4ZmUsCi0weDA1LCAweDFjLCAweDAwLCAweDk4LCAweDMxLCAweDFjLCAweGZjLCAweGY3LCAweDllLCAweGZlLCAweDA2LCAweDFjLAotMHg3OCwgMHg2OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwYSwgMHgwOCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4ODAsIDB4MjgsIDB4MWMsCi0weGZjLCAweGY3LCAweDhmLCAweGZlLCAweDc5LCAweDY5LCAweDAxLCAweDMxLCAweGMwLCAweDQzLCAweDc5LCAweDYxLAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg4MSwgMHgzOCwgMHg2OSwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwKLTB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsCi0weDAyLCAweDQwLCAweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDAxLCAweDQzLCAweDMwLCAweDFjLAotMHhmYywgMHhmNywgMHg3NywgMHhmZSwgMHgzOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg4OSwgMHgxOCwgMHgzOSwgMHg2MSwKLTB4YjksIDB4NjgsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDEsIDB4MDIsIDB4OTksIDB4ODksIDB4ODksIDB4YmEsIDB4NjksCi0weDExLCAweDQzLCAweDAyLCAweDlhLCAweGMwLCAweDQ2LCAweDkxLCAweDgxLCAweGI5LCAweDY5LCAweGZjLCAweGY3LAotMHg2NiwgMHhmZSwgMHgyMCwgMHg4MiwgMHgwMCwgMHgyMCwgMHg2MCwgMHg4MiwgMHhmOCwgMHg2ZCwgMHg0MSwgMHgwOCwKLTB4MTYsIDB4ZDMsIDB4ODAsIDB4MGEsIDB4MGEsIDB4ZDMsIDB4NjAsIDB4NjgsIDB4MTAsIDB4MzgsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDIxLCAweDY4LCAweGMwLCAweDQ2LAotMHgwOCwgMHg4MiwgMHgwOSwgMHhlMCwgMHg2MCwgMHg2OCwgMHgwYywgMHgzOCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ODgsIDB4ODEsCi0weDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMSwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2ZSwgMHg0ZCwgMHgyOCwgMHg2OSwKLTB4MDEsIDB4MjIsIDB4MDQsIDB4OTksIDB4OGEsIDB4NDAsIDB4OTAsIDB4NDMsIDB4MjgsIDB4NjEsIDB4MDQsIDB4OTgsCi0weDQzLCAweDAxLCAweDE4LCAweDFhLCAweDgwLCAweDAwLCAweDE2LCAweDFjLCAweDY5LCAweDQ5LCAweDQ0LCAweDE4LAotMHhlMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHhhMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwKLTB4MDAsIDB4MjYsIDB4MjYsIDB4ZTAsIDB4NjUsIDB4NDgsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjEsCi0weDA0LCAweDk4LCAweGZjLCAweGY3LCAweDA5LCAweGZkLCAweDA3LCAweDFjLCAweDAzLCAweGQxLCAweDI4LCAweDY5LAotMHgzMCwgMHg0MywgMHgyOCwgMHg2MSwgMHhiNSwgMHhlMCwgMHhhMCwgMHg2OCwgMHg2NSwgMHg2OCwgMHhhOCwgMHg0MiwKLTB4MDAsIDB4ZDIsIDB4MDUsIDB4MWMsIDB4YTEsIDB4NmMsIDB4YTksIDB4NDIsIDB4MTYsIDB4ZDIsIDB4NDAsIDB4MWEsCi0weDYyLCAweDZhLCAweDEwLCAweDFhLCAweDAwLCAweDI2LCAweDYwLCAweDYyLCAweGE2LCAweDYwLCAweGE2LCAweDYyLAotMHgyMCwgMHg4OCwgMHg0OCwgMHgyMywgMHgxOCwgMHg0MywgMHgyMCwgMHg4MCwgMHgwZCwgMHgxYywgMHgwOSwgMHhkMSwKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTksIDB4ZmQsIDB4MDMsIDB4MjAsIDB4NjAsIDB4ODAsIDB4NjYsIDB4NjAsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDhkLCAweGY5LCAweDk2LCAweGUwLCAweGUxLCAweDY4LCAweDM4LCAweDY4LAotMHgwOSwgMHgxOCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgyMCwgMHgxYywgMHgwMiwgMHgzOSwgMHgyYSwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4Y2QsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZDcsIDB4ZjksIDB4ZTAsIDB4NjgsCi0weDQ2LCAweDE5LCAweDc4LCAweDY4LCAweDMwLCAweDQzLCAweDc4LCAweDYwLCAweDA0LCAweDk4LCAweDMxLCAweDFjLAotMHgwMSwgMHhmMCwgMHg4OCwgMHhmYSwgMHgyMSwgMHg2ZSwgMHgwMCwgMHg5OCwKLTB4MDgsIDB4MTgsIDB4MDEsIDB4OTAsIDB4NzAsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NjEsIDB4NmUsCi0weDcxLCAweDFhLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDExLCAweDAyLCAweDEyLCAweDBhLCAweDExLCAweDQzLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMiwgMHg5MSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwYSwgMHgwOCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjAsIDB4OGUsCi0weGZjLCAweGY3LCAweGNiLCAweGZkLCAweDA2LCAweDFjLCAweDYwLCAweDhlLCAweDAyLCAweDk5LCAweGZjLCAweGY3LAotMHhjNiwgMHhmZCwgMHgwMywgMHg5MCwgMHg2MCwgMHg2OSwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwKLTB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDgxLCAweDgwLCAweDMwLCAweDFjLCAweGZjLCAweGY3LCAweGI3LCAweGZkLCAweDYxLCAweDY5LCAweDAxLCAweDMxLAotMHhjMCwgMHg0MywgMHg2MSwgMHg2MSwgMHgwMSwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MSwgMHg2MCwgMHg2ZSwKLTB4MDAsIDB4OTksIDB4NDYsIDB4MTgsIDB4MjAsIDB4NjksIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLAotMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMSwgMHg0MywgMHg3MSwgMHg2MCwgMHgwMywgMHg5OCwKLTB4ZmMsIDB4ZjcsIDB4OWIsIDB4ZmQsIDB4MjEsIDB4NjksIDB4NDksIDB4MTksIDB4MjEsIDB4NjEsIDB4YTEsIDB4NjgsCi0weDQ5LCAweDFiLCAweGExLCAweDYwLCAweDA2LCAweGQxLCAweGIxLCAweDg5LCAweGEyLCAweDY5LCAweDExLCAweDQzLAotMHhiMSwgMHg4MSwgMHhhMSwgMHg2OSwgMHhmYywgMHhmNywgMHg4ZCwgMHhmZCwgMHgzOCwgMHg4MiwgMHg2MSwgMHg2ZSwKLTB4MzgsIDB4NjgsIDB4MDksIDB4MTgsIDB4MGUsIDB4MzEsIDB4ZjksIDB4NjAsIDB4ZTIsIDB4NjgsIDB4MDAsIDB4OTksCi0weDA0LCAweDM4LCAweDAwLCAweGYwLCAweDRjLCAweGY4LCAweDAyLCAweDIwLCAweDc4LCAweDgyLCAweGUwLCAweDZkLAotMHg0MSwgMHgwOCwgMHgxNiwgMHhkMywgMHg4MCwgMHgwYSwgMHgwYSwgMHhkMywgMHg3OCwgMHg2OCwgMHgxMCwgMHgzOCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MzksIDB4NjgsCi0weGMwLCAweDQ2LCAweGM4LCAweDgxLCAweDA5LCAweGUwLCAweDc4LCAweDY4LCAweDBjLCAweDM4LCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4ODEsIDB4MDUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhmNywgMHhiNSwgMHgwMywgMHgxYywgMHgwZiwgMHgxYywgMHgwMCwgMHgyMCwgMHgxYywgMHg2OCwgMHgyNiwgMHgwNCwKLTB4MzEsIDB4MWMsIDB4MWQsIDB4MWQsIDB4ZmMsIDB4ZjcsIDB4NTEsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OWEsCi0weGQxLCAweDFjLCAweDg5LCAweDA4LCAweDAxLCAweDM5LCAweDRhLCAweDFlLCAweDAyLCAweDkyLCAweDAwLCAweDI5LAotMHgwZCwgMHhkMCwgMHgyMSwgMHgwYywgMHgxMCwgMHhjZCwgMHgyMiwgMHgwNCwgMHgwYSwgMHg0MywgMHgxMSwgMHgxYywKLTB4MTYsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4NDAsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OTksIDB4NGEsIDB4MWUsCi0weDAyLCAweDkyLCAweDAwLCAweDI5LCAweGYxLCAweGQxLCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg4OSwgMHgwOCwgMHg4OSwgMHgwMCwgMHgwMywgMHgzMiwKLTB4OTMsIDB4MDgsIDB4NWEsIDB4MWUsIDB4MDAsIDB4MmIsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4YzksIDB4MDgsIDB4YzAsCi0weDEzLCAweDFjLCAweDAxLCAweDNhLCAweDAwLCAweDJiLCAweGY5LCAweGQxLCAweDcwLCAweDQ3LCAweGZmLCAweGI1LAotMHg4NiwgMHhiMCwgMHgxNywgMHgxYywgMHgwMCwgMHgyNiwgMHgwNiwgMHg5OCwgMHg4MCwgMHg2YywgMHhjMCwgMHgxYiwKLTB4MDYsIDB4OTksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjQsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MDYsIDB4OTksCi0weDg5LCAweDZiLCAweGMwLCAweDQ2LCAweDAxLCAweDkxLCAweDA2LCAweDk5LCAweDRjLCAweDZiLCAweDY3LCAweGUwLAotMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgMHg2MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwKLTB4YTEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTEsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsIDB4YjksIDB4NDIsCi0weDA4LCAweGQyLCAweDAyLCAweGFkLCAweDZkLCAweDg4LCAweDAyLCAweGE5LCAweDQ5LCAweDg4LCAweDdmLCAweDFhLAotMHgwMCwgMHgyMSwgMHgwMiwgMHhhYiwgMHg1OSwgMHg4MCwgMHgxOSwgMHhlMCwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwKLTB4YzksIDB4MWIsIDB4MDIsIDB4YWIsIDB4NTksIDB4ODAsIDB4M2QsIDB4MWMsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MjEsCi0weDQ5LCAweDA2LCAweDA3LCAweDliLCAweDlhLCAweDA3LCAweDkyLCAweDBmLCAweDBkLCAweGQwLCAweGViLCAweDA2LAotMHhkYiwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyYiwgMHgwOCwgMHhkMywgMHgxZSwgMHgyYiwgMHgwMiwgMHhkMSwKLTB4MDMsIDB4MmEsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MmEsCi0weDAxLCAweGQzLCAweDAxLCAweDI2LCAweDAwLCAweDIxLCAweDI5LCAweDQzLCAweDAxLCAweDQzLCAweDBhLCAweDFjLAotMHgwMCwgMHg5MSwgMHgwMCwgMHgyMCwgMHgwMywgMHg5OSwgMHgwNCwgMHg5YSwgMHgwNywgMHg5YiwgMHgwMSwgMHhmMCwKLTB4NWIsIDB4ZmYsIDB4MDcsIDB4OTksIDB4NDksIDB4MTksIDB4MDcsIDB4OTEsIDB4MDAsIDB4MmUsIDB4MGEsIDB4ZDAsCi0weDFkLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDFkLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHgwMCwgMHgyMCwgMHgwNywgMHg5YiwgMHgwMSwgMHhmMCwgMHg0YywgMHhmZiwgMHgwMCwgMHgyNiwgMHgwMiwgMHhhOCwKLTB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDAsIDB4MDMsIDB4OTgsIDB4NDAsIDB4MTksIDB4MDMsIDB4OTAsCi0weDAyLCAweDk4LCAweGMwLCAweDQ2LCAweDIwLCAweDYwLCAweDAzLCAweDk4LCAweGMwLCAweDQ2LCAweDYwLCAweDYwLAotMHgwNCwgMHg5OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MCwgMHgwMywgMHhlMCwgMHgwMSwgMHg5OCwgMHgwMSwgMHgzOCwKLTB4MDEsIDB4OTAsIDB4MTAsIDB4MzQsIDB4MDYsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDQsIDB4NjMsIDB4MDEsIDB4OTgsCi0weDA2LCAweDk5LCAweGMwLCAweDQ2LCAweDg4LCAweDYzLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDAyLCAweGQwLAotMHgwMSwgMHg5OSwgMHgwMCwgMHgyOSwgMHg5MiwgMHhkMSwgMHgwOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDYsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDksIDB4OWIsIDB4MDEsIDB4ZjAsCi0weDFmLCAweGZmLCAweDBhLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg1MywgMHgwMiwKLTB4OTAsIDB4YjUsIDB4MGMsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAxLCAweDY4LCAweDM4LCAweDhhLCAweGZjLCAweGY3LCAweDg1LCAweGZjLAotMHhjMCwgMHg0MywgMHhmOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHg3OCwgMHg4YSwgMHgzOSwgMHg2OCwKLTB4MDgsIDB4MWEsIDB4MzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4OGIsIDB4ZjksIDB4MzgsIDB4MWMsCi0weGZjLCAweGY3LCAweDhjLCAweGZiLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDMzLCAweGZlLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwMSwgMHg4OCwgMHg4YSwgMHgwOSwgMHgyMSwgMHhkMywKLTB4Y2EsIDB4MDksIDB4MWYsIDB4ZDIsIDB4OGEsIDB4MDgsIDB4MWQsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODAsCi0weDQxLCAweDgwLCAweDQ3LCAweDZmLCAweDQwLCAweDZkLCAweGZhLCAweDFkLCAweDE5LCAweDMyLCAweDUxLCAweDcxLAotMHhmYSwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MCwgMHgzYSwgMHg2ZSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MCwKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjMsIDB4YzEsIDB4NmIsIDB4NDksIDB4MDgsIDB4NDksIDB4MDAsCi0weGMxLCAweDYzLCAweDAxLCAweDIwLCAweDAwLCAweGYwLCAweGNjLCAweGZmLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHg2YiwgMHhmZiwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHgyMywgMHgxOSwgMHg0MywKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4NDksIDB4MDksIDB4ZjYsIDB4ZDIsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjgsCi0weGYzLCAweGU3LCAweDAwLCAweDAwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgxMCwgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyNCwgMHg1ZSwgMHgxZSwgMHgwMCwgMHgyYiwgMHgxOSwgMHhkMCwKLTB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4NDEsIDB4ODgsIDB4MGMsIDB4MTksIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDc5LCAweDYwLCAweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYwLCAweGMxLCAweDY4LAotMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMCwgMHgzNywgMHhlOSwgMHg2YSwgMHg4MSwgMHg0MiwKLTB4MDIsIDB4ZDgsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZWMsIDB4ZmYsIDB4MzEsIDB4MWMsIDB4MDEsIDB4M2UsCi0weDAwLCAweDI5LCAweGU1LCAweGQxLCAweDIwLCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgyMSwgMHhjMSwgMHg2MSwgMHgwNSwgMHg0OSwgMHgwYSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwKLTB4MDgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4NGEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDAsIDB4NjEsIDB4NDgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAwLCAweDgwLCAweDAzLCAweDQ5LCAweDA4LCAweDY4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHhjMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4ODEsIDB4NjcsIDB4MDUsIDB4NDksIDB4OGEsIDB4NjgsCi0weDAwLCAweDJhLCAweDAxLCAweGQxLCAweDg4LCAweDYwLCAweDAyLCAweGUwLCAweGNhLCAweDY4LCAweGMwLCAweDQ2LAotMHg5MCwgMHg2NywgMHhjOCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4MDMsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4ODIsIDB4NmYsIDB4YzAsIDB4NDYsCi0weDhhLCAweDYwLCAweDcwLCAweDQ3LCAweGQwLCAweDJjLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHg4MCwgMHgyMCwgMHgxMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmZiwgMHhmNywKLTB4ZDUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NDEsIDB4NjgsCi0weDE5LCAweDQwLCAweDBhLCAweDBmLCAweDUxLCAweDAxLCAweDg5LCAweDFhLCAweDg5LCAweDAwLCAweDBkLCAweDRiLAotMHhjOSwgMHgxOCwgMHg0YiwgMHg4OCwgMHgwMCwgMHgyYiwgMHgwNCwgMHhkMSwgMHgxMSwgMHgxYywgMHhmZiwgMHhmNywKLTB4M2IsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4ZmYsIDB4ZjcsCi0weDA1LCAweGZjLCAweGY4LCAweGU3LCAweDAyLCAweDJiLCAweGY2LCAweGQxLCAweGZmLCAweGY3LCAweDRlLCAweGZiLAotMHhmMywgMHhlNywgMHgwNCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHhlZSwgMHhlNywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAwLCAweGI1LCAweDIwLCAweDIwLCAweDBkLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGZmLCAweGY3LAotMHhiZiwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgMHgwMSwgMHg4OCwgMHgyMCwgMHgyMywgMHgxOSwgMHg0MywKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4MTAsIDB4MjMsIDB4OTksIDB4NDMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsCi0weDA5LCAweDBhLCAweDAxLCAweGQzLCAweGZmLCAweGY3LCAweDJlLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMywgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHhmOCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4OTgsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDIyLCAweDQ4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDIyLCAweDQ4LCAweGMzLCAweDFkLCAweDQxLCAweDMzLAotMHg0MSwgMHg2ZCwgMHg4MiwgMHg2ZCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg5YywgMHg2OCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OTgsIDB4NDIsIDB4MDAsIDB4ZDEsCi0weDBjLCAweGUwLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDEwLCAweDFhLCAweDU5LCAweDFhLCAweDQxLCAweDE4LAotMHgwMCwgMHhlMCwgMHgxOSwgMHgxYSwgMHgwMSwgMHgyMCwgMHgxMCwgMHgyOSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsIDB4NzgsIDB4NmEsIDB4ZjksIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsCi0weGI4LCAweDZhLCAweGY5LCAweDZhLCAweGMwLCAweDQ2LCAweDQ4LCAweDYwLCAweDEwLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHhmYiwgMHg2YSwgMHgwZiwgMHg0OCwgMHg0MiwgMHg2ZCwgMHgwMywgMHgyMCwgMHgzOSwgMHg2YSwKLTB4MDEsIDB4ZjAsIDB4ZTIsIDB4ZmQsIDB4MzgsIDB4ODgsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsCi0weDM4LCAweDg4LCAweDQwLCAweDIzLCAweDk4LCAweDQzLCAweDM4LCAweDgwLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHg1NSwgMHhmZiwgMHg5OCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsIDB4ZjcsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDA4LCAweDAwLCAweDExLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgyYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKLTB4ZmQsIDB4ZmUsIDB4MDcsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsCi0weDA1LCAweDBmLCAweDY4LCAweDAxLCAweDQwLCAweDFiLCAweDgwLCAweDAwLCAweDI2LCAweDQ5LCAweDQ0LCAweDE4LAotMHgyMCwgMHg4OCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywgMHgyMCwgMHg4MCwgMHgyMCwgMHg4OCwgMHg0MSwgMHgwOCwKLTB4MzQsIDB4ZDMsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YTAsIDB4NmMsIDB4ZTEsIDB4NmMsCi0weDQwLCAweDE4LCAweGEwLCAweDY0LCAweDAwLCAweDIwLCAweGUwLCAweDY0LCAweGExLCAweDZiLCAweDIyLCAweDZkLAotMHg4OSwgMHgxOCwgMHhhMSwgMHg2MywgMHgyMCwgMHg2NSwgMHhiOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NSwKLTB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NzgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4NzgsIDB4NjAsIDB4NjEsIDB4NjgsCi0weDM2LCAweDMxLCAweDk0LCAweDI5LCAweDA0LCAweGQ4LCAweDM4LCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYwLAotMHgzOCwgMHgyMCwgMHgwMywgMHhlMCwgMHg5NCwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MCwgMHg5NCwgMHgyMCwKLTB4YjgsIDB4NjEsIDB4MzksIDB4NjgsIDB4NzgsIDB4NjgsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4MWMsCi0weGNiLCAweDFmLCAweDA1LCAweDNiLCAweGZmLCAweGY3LCAweGQ3LCAweGZkLCAweDAyLCAweDIwLCAweDYwLCAweDgwLAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkZiwgMHhmZSwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MDcsIDB4ZmEsIDB4MjgsIDB4MDEsIDB4MDYsIDB4NDksIDB4NDAsIDB4MTgsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLAotMHhlZiwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDAsIDB4MjcsCi0weDBmLCAweDRjLCAweDBkLCAweGUwLCAweDQyLCAweDZiLCAweDAxLCAweDNhLCAweDQyLCAweDYzLCAweDAwLCAweDJhLAotMHgwNSwgMHhkYywgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0MiwgMHg2MywgMHhjMCwgMHg2YSwgMHgwMSwgMHhmMCwKLTB4YzYsIDB4ZjksIDB4MDEsIDB4MzcsIDB4MGIsIDB4MmYsIDB4MDcsIDB4ZDIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTksCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDZhLCAweDAwLCAweDI5LCAweGU5LCAweGQxLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDEwLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDMxLCAweGMxLCAweDYwLCAweDBmLCAweDQ5LCAweGM4LCAweDY4LAotMHgwMSwgMHgyOCwgMHgxNywgMHhkMSwgMHhjOCwgMHgxZCwgMHg3OSwgMHgzMCwgMHgwMiwgMHg4OSwgMHgwMCwgMHgyYSwKLTB4MTIsIDB4ZDAsIDB4MDEsIDB4M2EsIDB4MDIsIDB4ODEsIDB4MDIsIDB4ODksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsCi0weDQyLCAweDg5LCAweDAwLCAweDJhLCAweDA4LCAweGQxLCAweGM5LCAweDZmLCAweDAyLCAweDIzLCAweDBhLCAweDY4LAotMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MSwgMHgwMSwgMHgyMSwgMHgwMCwgMHhlMCwKLTB4MDAsIDB4MjEsIDB4NDEsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDA3LCAweDFjLCAweDAxLCAweDIzLCAweGY4LCAweDFkLAotMHg2OSwgMHgzMCwgMHgwMywgMHg3MywgMHgxZSwgMHg0OCwgMHhjMiwgMHgxZCwgMHg3OSwgMHgzMiwgMHg1NCwgMHg4YSwKLTB4NjEsIDB4MWMsIDB4NTEsIDB4ODIsIDB4ZDUsIDB4OGEsIDB4MDAsIDB4MjEsIDB4YWMsIDB4NDIsIDB4MDQsIDB4ZGIsCi0weGM0LCAweDFkLCAweDg5LCAweDM0LCAweDYzLCAweDcwLCAweDUxLCAweDgyLCAweGQxLCAweDgzLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgzYSwgMHg2ZCwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiYSwgMHg2MSwKLTB4ZmIsIDB4NjksIDB4OWEsIDB4NDIsIDB4MDYsIDB4ZDEsIDB4ZjgsIDB4NmMsIDB4MTIsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc5LCAweDYxLCAweDQxLCAweDY5LAotMHhmYSwgMHg2YywgMHg5MSwgMHg0MywgMHg0MSwgMHg2MSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHhjMSwgMHg2MCwKLTB4MzgsIDB4NjksIDB4MDIsIDB4MjgsIDB4ZjEsIDB4ZDAsIDB4YjgsIDB4NjksIDB4ZjksIDB4NjksIDB4NDEsIDB4MWEsCi0weDAxLCAweGQ1LCAweDc4LCAweDZkLCAweDQxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBlLCAweGY4LAotMHhmOSwgMHg2OSwgMHgwOSwgMHgxOCwgMHhmOSwgMHg2MSwgMHg3OCwgMHg2ZCwgMHg4MSwgMHg0MiwgMHhlMiwgMHhkMywKLTB4MDgsIDB4MWEsIDB4ZjgsIDB4NjEsIDB4ZGYsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweGY4LCAweGI1LCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweGZmLCAweDIzLAotMHgyMSwgMHgzMywgMHg5ZiwgMHg0MiwgMHgwMSwgMHhkOSwgMHhmZiwgMHgyNywgMHgyMSwgMHgzNywgMHhlMSwgMHg2ZSwKLTB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4Y2IsIDB4ZmMsIDB4MmQsIDB4NGQsIDB4MDAsIDB4MjgsIDB4MTMsIDB4ZDEsCi0weGUwLCAweDFkLCAweDQ5LCAweDMwLCAweDAxLCAweDdhLCAweDAxLCAweDIzLCAweDE5LCAweDQzLCAweDAxLCAweDcyLAotMHgyOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgyOSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4YjAsIDB4ZmMsIDB4MDAsIDB4MjAsIDB4ZjgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIwLCAweDY5LCAweDAxLCAweDMwLCAweDIwLCAweDYxLCAweDIzLCAweDQ5LAotMHhjOCwgMHgxZCwgMHhiOSwgMHgzMCwgMHgwMiwgMHg2YiwgMHg5MiwgMHgwMCwgMHg1MSwgMHgxOCwgMHhjMCwgMHgzMSwKLTB4MGYsIDB4NjEsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODksIDB4MDcsIDB4ODksIDB4MGYsIDB4MDEsIDB4NjMsCi0weDIwLCAweDZiLCAweGMyLCAweDE5LCAweDYxLCAweDZkLCAweDhhLCAweDQyLCAweDAzLCAweGQ4LCAweDIzLCAweDIyLAotMHgxMiwgMHgwNSwgMHgzYSwgMHg0MywgMHgwNSwgMHhlMCwgMHgwOSwgMHgxYSwgMHg3ZSwgMHgxYSwgMHgwNywgMHhkMSwKLTB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsIDB4MDksIDB4MTgsCi0weGEyLCAweDZlLCAweDEwLCAweGUwLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDBhLCAweDQzLCAweDAwLCAweDkyLAotMHg2MSwgMHg2ZSwgMHgwOSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhhMiwgMHg2ZSwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwKLTB4N2QsIDB4ZmMsIDB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MzIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsCi0weGEyLCAweDZlLCAweDAwLCAweDIwLCAweDJiLCAweDFjLCAweDAxLCAweGYwLCAweDczLCAweGZjLCAweDIwLCAweDZiLAotMHhjMCwgMHgxOSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg2MSwgMHg2ZCwgMHg4MSwgMHg0MiwgMHgwMCwgMHhkOCwKLTB4NDAsIDB4MWEsIDB4MjAsIDB4NjMsIDB4MzgsIDB4MWMsIDB4YjgsIDB4ZTcsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDA0LCAweDAwLCAweDFiLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwMywgMHgwZCwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MGMsIDB4NDksIDB4YzgsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDIsIDB4N2EsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDAzLCAweGQwLCAweDA3LCAweDcyLCAweDA4LCAweDFjLCAweGZmLCAweGY3LAotMHgzNywgMHhmZiwgMHgwOCwgMHg0OSwgMHhjOCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMiwgMHg3YSwgMHgwMCwgMHgyYSwKLTB4MDMsIDB4ZDAsIDB4MDcsIDB4NzIsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MmQsIDB4ZmYsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLAotMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMCwgMHgyMCwgMHgxOCwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4ZjgsIDB4NjAsIDB4MTYsIDB4NDgsCi0weGM0LCAweDFkLCAweGI5LCAweDM0LCAweDYxLCAweDZiLCAweDg5LCAweDAwLCAweDA5LCAweDE4LCAweGMwLCAweDMxLAotMHgwOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg5MiwgMHgwMCwgMHhkMiwgMHgxOSwgMHg1MSwgMHg2NCwgMHg2MSwgMHg2YiwKLTB4ODksIDB4MDAsIDB4MDgsIDB4MTgsIDB4YzAsIDB4MzAsIDB4MDEsIDB4NjksIDB4NzgsIDB4NjgsIDB4ODAsIDB4MDAsCi0weGMwLCAweDE5LCAweGMwLCAweDZiLCAweDAxLCAweGYwLCAweGEyLCAweGZhLCAweDAxLCAweDIzLCAweDc4LCAweDY4LAotMHg1OCwgMHg0MCwgMHg3OCwgMHg2MCwgMHg2MCwgMHg2YiwgMHgwMSwgMHgzMCwgMHg4MCwgMHgwNywgMHg4MCwgMHgwZiwKLTB4NjAsIDB4NjMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsIDB4NDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA3LCAweGY4LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MzksIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NjgsCi0weDgwLCAweDA5LCAweDAxLCAweGQzLCAweDAyLCAweDIwLCAweDAwLCAweGUwLCAweDc4LCAweDZmLCAweGZjLCAweGY3LAotMHg1OSwgMHhmOCwgMHgwNCwgMHgxYywgMHgwNiwgMHhkMSwgMHgwMSwgMHgyMCwgMHhmOSwgMHgxZCwgMHgxOSwgMHgzMSwKLTB4MDgsIDB4NzEsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjgsIDB4NmMsIDB4MmYsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGJhLCAweDZhLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweDAwLCAweGYwLAotMHg1OSwgMHhmOCwgMHg2NywgMHg2MiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGIsIDB4ZmQsIDB4ZWMsIDB4ZTcsIDB4ZjksIDB4NmQsIDB4MDksIDB4NjgsIDB4MDksIDB4MTgsIDB4MDksIDB4MDksCi0weDA5LCAweDAxLCAweDdhLCAweDZkLCAweDhhLCAweDQyLCAweDAwLCAweGQ4LCAweDg5LCAweDFhLCAweGExLCAweDYyLAotMHhiOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0YSwgMHg2YywgMHgwMCwgMHgyYSwgMHgwNywgMHhkMCwKLTB4NGEsIDB4NmMsIDB4MTIsIDB4MWEsIDB4NGEsIDB4NjQsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4YjksIDB4NmEsCi0weDA4LCAweDE4LCAweGI4LCAweDYyLCAweDM4LCAweDY4LCAweGI5LCAweDZhLCAweDgwLCAweDAwLCAweGMwLCAweDE5LAotMHg0MiwgMHg2YiwgMHg5MSwgMHg0MiwgMHgwZSwgMHhkMywgMHgwMCwgMHgyMSwgMHg0MSwgMHg2NCwgMHhiOCwgMHg2YSwKLTB4MzksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4NDksIDB4NmIsIDB4NDAsIDB4MWEsIDB4YjgsIDB4NjIsCi0weGI5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweGM5LCAweDZiLCAweDQwLCAweDE4LCAweGI4LCAweDYyLAotMHhiOCwgMHg2OCwgMHg4MSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0OSwgMHg2YywgMHgwMCwgMHgyOSwgMHhiOCwgMHhkMSwKLTB4YjksIDB4NmEsIDB4ZmEsIDB4NmIsIDB4OTEsIDB4NDIsIDB4YjQsIDB4ZDAsIDB4M2EsIDB4NmMsIDB4OTEsIDB4NDIsCi0weGIxLCAweGQwLCAweDAxLCAweDIzLCAweDU4LCAweDQwLCAweGI4LCAweDYwLCAweDgwLCAweDAwLCAweGMwLCAweDE5LAotMHhjMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHhmOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwKLTB4MDEsIDB4MzgsIDB4ZjgsIDB4NjAsIDB4MzgsIDB4NjksIDB4MDAsIDB4MjgsIDB4YTEsIDB4ZDAsIDB4MDEsIDB4MzgsCi0weDM4LCAweDYxLCAweDllLCAweGU3LCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHhmNywgMHhiNSwgMHg5MCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyMCwgMHgwNSwgMHg5MCwKLTB4MDIsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MDEsIDB4OTIsIDB4ZjksIDB4NDgsIDB4YzAsIDB4NmEsIDB4YzAsIDB4NDYsCi0weGE4LCAweDYxLCAweGEwLCAweDY4LCAweDgxLCAweDAwLCAweDA5LCAweDE5LCAweDQ5LCAweDZiLCAweGMwLCAweDQ2LAotMHgyMCwgMHg2MCwgMHhlMSwgMHg2MiwgMHgxMiwgMHg5YSwgMHhkMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhOCwgMHg2MCwKLTB4MTIsIDB4OWEsIDB4NTEsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MGMsIDB4OTEsIDB4ZjAsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweGQ3LCAweDFkLCAweDA5LCAweDM3LCAweGUwLCAweDZhLAotMHhjMSwgMHgxYiwgMHgwOSwgMHgwOSwgMHhlMywgMHgxZCwgMHgxOSwgMHgzMywgMHgwYywgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MGYsIDB4OTMsIDB4ZWIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MGUsIDB4OTMsIDB4OTEsIDB4NDIsIDB4MDEsIDB4ZDMsCi0weGI4LCAweDQyLCAweDIxLCAweGQ4LCAweGUxLCAweDY4LCAweDAyLCAweDI5LCAweDFlLCAweGQyLCAweDAxLCAweDIwLAotMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MSwgMHgwMCwgMHgyMCwgMHgwMywgMHg5OSwgMHgwMSwgMHhmMCwKLTB4NTcsIDB4ZmIsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsIDB4MDEsIDB4MzAsCi0weGQ4LCAweDYzLCAweDAxLCAweDIwLCAweDgwLCAweDA2LCAweDAwLCAweDI3LCAweDY4LCAweDYwLCAweGFmLCAweDYxLAotMHhkZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHhkZCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4ZGMsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4M2EsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4NWMsIDB4ZTMsCi0weGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDdiLCAweGZjLCAweDA3LCAweDFjLAotMHhkNywgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHg2NCwgMHhkMCwgMHgzOCwgMHg3OCwgMHg0MCwgMHgwNywKLTB4NDAsIDB4MGYsIDB4MDMsIDB4MjgsIDB4NjAsIDB4ZDEsIDB4MDUsIDB4OTgsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDA1LCAweDkwLCAweDM4LCAweDc4LCAweGYwLCAweDIzLCAweDE4LCAweDQwLCAweDU4LCAweGQxLAotMHhlMCwgMHg2YSwgMHhjMCwgMHgxYiwgMHgwMCwgMHgwOSwgMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHgwMiwgMHhkMiwKLTB4ZTAsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MDUsIDB4ZDMsIDB4Y2IsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDgzLCAweGZmLCAweDA2LCAweDFjLCAweDA2LCAweGQxLCAweDAzLCAweDliLCAweDI4LCAweDFjLCAweDM5LCAweDFjLAotMHgyMiwgMHgxYywgMHgwMCwgMHhmMCwgMHg4YiwgMHhmYywgMHgxNiwgMHhlMSwgMHgyZSwgMHg2MiwgMHhmOCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4YjgsIDB4ODksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4YzEsIDB4NDksCi0weGM5LCAweDY4LCAweDAwLCAweGYwLCAweDcwLCAweGZmLCAweGY4LCAweDg5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLAotMHhiZCwgMHg0OSwgMHhjOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg2OSwgMHhmZiwgMHg3YSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NzIsIDB4NjEsIDB4YjksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjEsIDB4NjEsIDB4MzAsIDB4MWMsIDB4YjgsIDB4NDksCi0weDA5LCAweDY4LCAweDAwLCAweGYwLCAweDVlLCAweGZmLCAweDAwLCAweDI4LCAweDE3LCAweGQxLCAweDMwLCAweDFjLAotMHhiNCwgMHg0OSwgMHg0OSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg1NywgMHhmZiwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwKLTB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjcsIDB4ZmMsIDB4MDcsIDB4MWMsCi0weDY4LCAweDY4LCAweGFmLCAweDRiLCAweDE4LCAweDQzLCAweDY4LCAweDYwLCAweDAwLCAweDIwLCAweGE4LCAweDYxLAotMHhhYywgMHgyMywgMHhhOCwgMHg2OCwgMHg5OCwgMHg0MywgMHhhOCwgMHg2MCwgMHhiMCwgMHhlMCwgMHhhOCwgMHg2OSwKLTB4YTgsIDB4MjgsIDB4MDEsIDB4ZDIsIDB4YTgsIDB4MjAsIDB4YTgsIDB4NjEsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsCi0weGI4LCAweDQyLCAweDZjLCAweGQ4LCAweDljLCAweGUwLCAweGE1LCAweGUwLCAweGE0LCAweGUwLCAweDEwLCAweDI4LAotMHg2OCwgMHhkMSwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg2OCwgMHg2OCwgMHgxOCwgMHg0MCwgMHgwMSwgMHgwZiwKLTB4NDgsIDB4MDEsIDB4NDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4YTAsIDB4NGEsIDB4ODIsIDB4MTgsIDB4MDEsIDB4OTIsCi0weDc4LCAweDg4LCAweDQyLCAweDBiLCAweDMxLCAweGQzLCAweDgyLCAweDBiLCAweDJmLCAweGQzLCAweDlkLCAweDQ4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwMiwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg4MCwKLTB4NzgsIDB4ODgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsCi0weGI4LCAweDY4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYwLCAweDc4LCAweDY4LCAweDAxLCAweDlhLAotMHhjMCwgMHg0NiwgMHgxMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2NCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4OGYsIDB4NDksIDB4NDAsIDB4MTgsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYzLCAweDAxLCAweDlhLCAweDUwLCAweDY4LCAweDM2LCAweDMwLAotMHg5NCwgMHgyOCwgMHgwMSwgMHhkOCwgMHgzOCwgMHgyMCwgMHgwMCwgMHhlMCwgMHg5NCwgMHgyMCwgMHhhOCwgMHg2MSwKLTB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MjgsIDB4ZDgsIDB4NTgsIDB4ZTAsIDB4N2EsIDB4ODgsCi0weDkyLCAweDBiLCAweDAzLCAweGQzLCAweDg1LCAweDQ4LCAweGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDIzLCAweGUwLAotMHgwMSwgMHgyMiwgMHgxMiwgMHgwMywgMHgwMiwgMHg0MCwgMHg4MywgMHg0YiwgMHgxZCwgMHhkMCwgMHgwMywgMHg5MywKLTB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIDB4YjgsIDB4NjgsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYwLCAweDc4LCAweDY4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHgxMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4OTAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4NzUsIDB4NDksCi0weDQwLCAweDE4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYzLCAweDAyLCAweGUwLCAweDMzLCAweGUwLAotMHgyYSwgMHhlMCwgMHgwMywgMHg5MywgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MSwKLTB4MTIsIDB4OWEsIDB4NTAsIDB4NzgsIDB4MDUsIDB4OTksIDB4NDMsIDB4MWEsIDB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsCi0weGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDkyLCAweGZiLAotMHgwNywgMHgxYywgMHgwMSwgMHg5YSwgMHg1MCwgMHg2YiwgMHg5MSwgMHg2YiwgMHgwOSwgMHgwMSwgMHg0MCwgMHgxOCwKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4N2QsIDB4ZmIsIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweGQwLCAweDY0LCAweDAxLCAweDlhLCAweDBiLCAweDliLCAweGMwLCAweDQ2LCAweDEzLCAweDY1LAotMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg2OCwgMHg2OCwgMHgxOCwgMHg0MywgMHg2OCwgMHg2MCwgMHgwMCwgMHgyMCwKLTB4YTgsIDB4NjEsIDB4MGQsIDB4ZTAsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDcxLCAweGZiLCAweDA3LCAweDFjLCAweDM4LCAweDc4LCAweDQwLCAweDA3LAotMHg0MCwgMHgwZiwgMHgwMywgMHgyOCwgMHgwMCwgMHhkMSwgMHhmOCwgMHhlNiwgMHhhOCwgMHg2OSwgMHgwMywgMHg5OSwKLTB4MDEsIDB4ZjAsIDB4MjYsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MmEsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsCi0weDAwLCAweGYwLCAweDc5LCAweGZiLCAweGE4LCAweDY4LCAweDgwLCAweDA5LCAweDA0LCAweGQzLCAweDMwLCAweDFjLAotMHg0OSwgMHg0OSwgMHg0OSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg4MSwgMHhmZSwgMHg0MSwgMHg0OSwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4ZjAsIDB4MTQsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsCi0weDAxLCAweDMwLCAweGQ4LCAweDYzLCAweDExLCAweGUwLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LAotMHg0OCwgMHg3MSwgMHg4MCwgMHgwNiwgMHgwMCwgMHgyNywgMHg2OCwgMHg2MCwgMHhhZiwgMHg2MSwgMHgzYSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MzksIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MzksIDB4NGIsCi0weDAwLCAweDIwLCAweDAxLCAweGYwLCAweGYzLCAweGY5LCAweDAwLCAweDIwLCAweDE1LCAweGUyLCAweDA1LCAweDk4LAotMHgwYywgMHg5OSwgMHgwOCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwYywgMHg5MCwgMHgwYiwgMHg5MCwKLTB4MGMsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsCi0weDQ4LCAweDcxLCAweDI4LCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkwLCAweDAwLCAweDI2LCAweDAwLCAweDIwLAotMHgwOCwgMHg5MCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg5MiwgMHgwYywgMHg5OCwgMHgwMSwgMHgzOCwgMHgwZCwgMHg5MCwKLTB4YTMsIDB4ZTAsIDB4NzgsIDB4ODgsIDB4OGEsIDB4MWIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4OTAsIDB4NDIsCi0weDA1LCAweGRkLCAweDA3LCAweDkyLCAweDgwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweDkwLAotMHgwMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgwOCwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwNywgMHhkMSwgMHgwZCwgMHg5OCwKLTB4MGEsIDB4OWEsIDB4OTAsIDB4NDIsIDB4MDcsIDB4ZGQsIDB4MDcsIDB4OTgsIDB4MzAsIDB4MTgsIDB4ODgsIDB4NDIsCi0weDAzLCAweGQ4LCAweDAxLCAweDIwLCAweDQwLCAweDA1LCAweDA2LCAweDkwLCAweDFjLCAweGUwLCAweDExLCAweDIwLAotMHg0MCwgMHgwNSwgMHgwNiwgMHg5MCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMSwKLTB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDYsIDB4OTAsIDB4YjEsIDB4MDcsIDB4ODksIDB4MGYsIDB4MGYsIDB4ZDAsCi0weDA3LCAweDk4LCAweGMwLCAweDA2LCAweGMwLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDI4LCAweDA5LCAweGRiLAotMHgxZSwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyOSwKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MDIsIDB4OTAsIDB4ZGUsIDB4ZTcsIDB4MGEsIDB4OWEsIDB4MDAsIDB4MmEsCi0weDA0LCAweGQxLCAweDAxLCAweDIzLCAweGRiLCAweDA1LCAweDA2LCAweDk4LCAweDE4LCAweDQzLCAweDA2LCAweDkwLAotMHgwNywgMHg5OCwgMHgwNiwgMHg5OSwgMHgwOCwgMHg0MywgMHgwMiwgMHgxYywgMHgwMCwgMHg5MCwgMHgwNCwgMHg5OCwKLTB4ODMsIDB4MTksIDB4MWQsIDB4ZTAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDksIDB4ZmYsIDB4ZmYsCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDEyLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHg2MCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NTUsIDB4MzIsIDB4ZmYsIDB4ZmYsCi0weGFjLCAweDVlLCAweDIxLCAweDQwLCAweDBkLCAweDNkLCAweGZmLCAweGZmLCAweGNkLCAweDMxLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4NmIsIDB4ZjksIDB4MDcsIDB4OTgsIDB4MzYsIDB4MTgsIDB4MDIsIDB4OTgsCi0weDAwLCAweDI4LCAweDE2LCAweGQwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDA0LCAweGQxLAotMHgwOSwgMHgyMywgMHg1YiwgMHgwNCwgMHgwNiwgMHg5OCwgMHgxOCwgMHg0MywgMHgwNiwgMHg5MCwgMHgwNiwgMHg5OCwKLTB4YzIsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4YzEsIDB4NDgsCi0weDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweDUxLCAweGY5LCAweDAwLCAweDIwLAotMHgwMiwgMHg5MCwgMHgwOCwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMSwgMHgwYiwgMHg5YiwgMHgwMSwgMHgzYiwKLTB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MGMsIDB4ZDgsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDhhLCAweGZhLCAweDA3LCAweDFjLCAweDA3LCAweGUwLCAweDc4LCAweDY4LCAweDA3LCAweDlhLAotMHg4MCwgMHgxOCwgMHg3OCwgMHg2MCwgMHg3OCwgMHg4OCwgMHgwNywgMHg5YSwgMHg4MCwgMHgxYSwgMHg3OCwgMHg4MCwKLTB4MGEsIDB4OWEsIDB4NTAsIDB4MWMsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGEsIDB4OTIsIDB4MGMsIDB4OTgsCi0weDBhLCAweDlhLCAweDgyLCAweDQyLCAweDAzLCAweGRhLCAweGE5LCAweDY5LCAweGIxLCAweDQyLCAweDAwLCAweGQ5LAotMHg1MywgMHhlNywgMHhhOCwgMHg2OSwgMHhiMCwgMHg0MiwgMHg2YiwgMHhkMSwgMHhhOCwgMHg2OCwgMHgwMSwgMHgwOSwKLTB4NjksIDB4ZDIsIDB4MDgsIDB4OWEsIDB4MDAsIDB4MmEsIDB4NTYsIDB4ZDAsIDB4MGMsIDB4OTksIDB4MGEsIDB4OWEsCi0weDhhLCAweDQyLCAweDNlLCAweGRiLCAweGIxLCAweDA3LCAweDg5LCAweDBmLCAweDBjLCAweGQwLCAweDA4LCAweDlhLAotMHhkMiwgMHgwNiwgMHhkMiwgMHgwZSwgMHgwYiwgMHhkMCwgMHgxZSwgMHgyYSwgMHgwNiwgMHhkYiwgMHgxZSwgMHgyYSwKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDAsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDIsCi0weDAyLCAweDk5LCAweDAwLCAweDI5LCAweDIxLCAweGQwLCAweDA4LCAweDlhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4MDEsIDB4ZjksIDB4MDgsIDB4OTgsIDB4MzYsIDB4MTgsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsCi0weDAyLCAweGQwLCAweDAxLCAweDIwLCAweDQwLCAweDA2LCAweDAwLCAweGUwLCAweDkyLCAweDQ4LCAweDAxLCAweDIyLAotMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHg4ZSwgMHg0OCwgMHgwMSwgMHg2ZCwKLTB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZWMsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4OTAsCi0weDE1LCAweGUwLCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAweDQwLCAweDA2LAotMHgwMCwgMHhlMCwgMHg4OCwgMHg0OCwgMHgwOCwgMHg5YSwgMHgwMiwgMHg0MywgMHgwMCwgMHhlMCwgMHgwOCwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsCi0weDA2LCAweGNhLCAweDAxLCAweGYwLCAweGQ1LCAweGY4LCAweDA4LCAweDk4LCAweDM2LCAweDE4LCAweDEwLCAweDM3LAotMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxNCwgMHhmYSwKLTB4MDcsIDB4MWMsIDB4NjgsIDB4NjgsIDB4ODAsIDB4MGUsIDB4NmIsIDB4ZDIsIDB4MGEsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDA5LCAweDkwLCAweDBjLCAweDk5LCAweDg4LCAweDQyLCAweDVjLCAweGRhLCAweDBkLCAweDk4LCAweDA5LCAweDk5LAotMHg4OCwgMHg0MiwgMHgwMywgMHhkMCwgMHg3YSwgMHg4OCwgMHgxZSwgMHhlMCwgMHg1ZiwgMHhlMCwgMHg1ZSwgMHhlMCwKLTB4NzgsIDB4ODgsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDYsIDB4MDIsIDB4NDMsIDB4YTksIDB4NjgsIDB4OGMsIDB4MjMsCi0weDE5LCAweDQwLCAweDAyLCAweGQxLCAweDA5LCAweDIzLCAweDViLCAweDA0LCAweDFhLCAweDQzLCAweGIxLCAweDA3LAotMHg4OSwgMHgwZiwgMHgwZSwgMHhkMCwgMHhjMywgMHgwNiwgMHhkYiwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyYiwKLTB4MDksIDB4ZGIsIDB4MWUsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MDEsIDB4ZTAsCi0weDAyLCAweDI5LCAweDAyLCAweGQzLCAweDAxLCAweDIxLCAweDAyLCAweDkxLCAweDAyLCAweDFjLCAweDA5LCAweDk4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwNSwgMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCi0weDhmLCAweGY4LCAweDc4LCAweDg4LCAweDg2LCAweDE5LCAweDEwLCAweDM3LCAweDAyLCAweDk4LCAweDAwLCAweDI4LAotMHgxNCwgMHhkMCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDYsIDB4MDAsIDB4ZTAsIDB4NTcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDUzLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLAotMHgwMSwgMHhmMCwgMHg3NiwgMHhmOCwgMHgwMCwgMHgyMCwgMHgwMiwgMHg5MCwgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwKLTB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDksIDB4OTgsCi0weDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA5LCAweDkwLAotMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHhhMiwgMHhkYiwgMHg2OCwgMHg2OCwgMHgzMCwgMHg0MywgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NjgsIDB4NjAsIDB4ZTgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmEsIDB4MjgsIDB4ZTAsCi0weDI3LCAweGUwLCAweGE4LCAweDY4LCAweDAwLCAweDA5LCAweDE0LCAweGQzLCAweDY4LCAweDY4LCAweDgwLCAweDBlLAotMHgxNSwgMHhkMiwgMHgwMSwgMHg5YSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHgwMSwgMHg5YSwgMHg1MCwgMHg2YiwKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODksIDB4ZjksIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweDkwLCAweDY0LCAweDAxLCAweDlhLCAweDBiLCAweDliLCAweGMwLCAweDQ2LCAweDkzLCAweDYzLAotMHgwMywgMHhlMCwgMHhlOCwgMHg2YSwgMHgzMSwgMHgxYywgMHgwMCwgMHhmMCwgMHg1ZCwgMHhmYSwgMHg2OCwgMHg2OCwKLTB4MzAsIDB4NDMsIDB4NjgsIDB4NjAsIDB4YTgsIDB4NjksIDB4YjAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDgwLCAweDFiLCAweDAwLCAweGYwLCAweGVlLCAweGY5LCAweGFlLCAweDYxLCAweGE4LCAweDY4LAotMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwYiwgMHhkMCwgMHgyZiwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MmEsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weDAwLCAweDIwLCAweDAxLCAweGYwLCAweDIzLCAweGY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIwLCAweDZkLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwgMHhlMSwgMHg2OSwgMHg4MSwgMHg0MiwKLTB4MTIsIDB4ZDAsIDB4MjIsIDB4NjksIDB4MDIsIDB4MmEsIDB4MGYsIDB4ZDIsIDB4NDEsIDB4MWEsIDB4MDEsIDB4ZDUsCi0weDYwLCAweDZkLCAweDQxLCAweDE4LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDNmLCAweGZiLCAweGUxLCAweDY5LAotMHg0MCwgMHgxOCwgMHhlMCwgMHg2MSwgMHg2MSwgMHg2ZCwgMHg4OCwgMHg0MiwgMHgyNCwgMHhkMywgMHg0MCwgMHgxYSwKLTB4ZTAsIDB4NjEsIDB4MjEsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MWYsIDB4ZDEsIDB4MjAsIDB4NjksIDB4MDIsIDB4MjgsCi0weDFjLCAweGQyLCAweDAxLCAweDIwLCAweDYwLCAweDYxLCAweDE4LCAweDQ4LCAweDQxLCAweDY5LCAweGUyLCAweDZjLAotMHgwYSwgMHg0MywgMHg0MiwgMHg2MSwgMHg4MSwgMHg2OSwgMHhlMywgMHg2YywgMHg5OSwgMHg0MywgMHg4MSwgMHg2MSwKLTB4MDEsIDB4MjEsIDB4MDksIDB4MDUsIDB4Y2EsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjEsCi0weDhiLCAweDAyLCAweDIwLCAweDZkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLAotMHhlMSwgMHg2OSwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHhjYywgMHhmYSwKLTB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZjksIDB4MGMsIDB4OTgsIDB4MDUsIDB4OTksIDB4NDAsIDB4MTgsCi0weDAwLCAweDAxLCAweDEwLCAweDMwLCAweDY4LCAweDYxLCAweDEzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MTIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDQwLCAweDIwLCAweDJkLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHgwMywgMHhmOSwgMHgwNywgMHgxYywgMHg4MSwgMHg2OSwgMHg0NCwgMHg2YSwgMHhhMCwgMHg2ZiwgMHgwMCwgMHhmMCwKLTB4NDUsIDB4ZmUsIDB4MDAsIDB4MjAsIDB4ZTEsIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4NzksIDB4NjgsCi0weGM5LCAweDBlLCAweDA5LCAweGQzLCAweGY4LCAweDZhLCAweDAwLCAweDAxLCAweDI0LCAweDQ5LCAweDQwLCAweDE4LAotMHgyNCwgMHg0YiwgMHhjMCwgMHgxOCwgMHgwMSwgMHg2OCwgMHgwMSwgMHgzOSwgMHgwMSwgMHg2MCwgMHgzNiwgMHhlMCwKLTB4ZTEsIDB4NmQsIDB4MDksIDB4NjgsIDB4MjIsIDB4NmUsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4MjAsIDB4NGUsCi0weGY1LCAweDFkLCAweDc5LCAweDM1LCAweDAxLCAweDIzLCAweGU5LCAweDZiLCAweDE5LCAweDQzLCAweGU5LCAweDYzLAotMHhiOSwgMHg2YSwgMHhlMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhiOSwgMHg2YSwgMHgyMiwgMHg2ZSwKLTB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4NjEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YTksIDB4NmIsCi0weDAxLCAweDMxLCAweGE5LCAweDYzLCAweDA4LCAweDI5LCAweDA3LCAweGQzLCAweGE4LCAweDYzLCAweDAxLCAweDIwLAotMHgwMCwgMHhmMCwgMHg4NiwgMHhmOCwgMHhlOCwgMHg2YiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHhlOCwgMHg2MywKLTB4NzgsIDB4NjgsIDB4ODEsIDB4MGUsIDB4MGYsIDB4ZDIsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjEsIDB4MTgsCi0weGM5LCAweDY4LCAweDAwLCAweDI5LCAweDA2LCAweGQwLCAweDAwLCAweDA4LCAweDA0LCAweGQyLCAweDIwLCAweDFjLAotMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHg0MywgMHhmOCwgMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MDUsIDB4ZmEsIDB4MzgsIDB4MWMsIDB4ZmIsIDB4ZjcsIDB4MDYsIDB4ZmMsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDBiLCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhiNCwgMHgwYywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsCi0weDAxLCAweDc5LCAweDAwLCAweDI5LCAweDA0LCAweGQwLCAweDAwLCAweDIxLCAweDAxLCAweDcxLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHg1NiwgMHhmYiwgMHhmOCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgwZCwgMHhkMCwgMHhiOCwgMHg2OCwKLTB4ODAsIDB4MDAsIDB4YzIsIDB4MTksIDB4NTAsIDB4NmMsIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDAsIDB4YjgsIDB4NmEsCi0weDQxLCAweDc4LCAweDA5LCAweDAxLCAweDEwLCAweDMxLCAweDUyLCAweDZiLCAweDEwLCAweDFhLCAweDg4LCAweDQyLAotMHgwNSwgMHhkMywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0MiwgMHhmYiwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MjgsIDB4ZmEsIDB4ZjgsIDB4ZTcsIDB4NzgsIDB4NjgsCi0weDgwLCAweDAwLCAweGMwLCAweDE5LCAweGMwLCAweDZiLCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweGYxLCAweGU3LAotMHhiMCwgMHhiNSwgMHg4NywgMHhiMCwgMHgwZiwgMHgxYywgMHg4MCwgMHg2ZiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKLTB4MDAsIDB4MjQsIDB4MTMsIDB4NGQsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZTgsIDB4MTgsIDB4ODAsIDB4NjksCi0weDAwLCAweDI4LCAweDE3LCAweGQwLCAweDY5LCAweDQ2LCAweGEyLCAweDAwLCAweDUyLCAweDE5LCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhkMiwgMHgxOCwgMHg5MiwgMHg2OSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5MiwgMHhmYiwKLTB4MDAsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MDEsIDB4MzQsIDB4YTAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGMwLCAweDE4LCAweDgwLCAweDY5LCAweDAwLCAweDI4LCAweGVhLCAweGQxLCAweDAxLCAweGUwLAotMHgwMSwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5ZCwgMHhmOSwgMHgwNywgMHhiMCwKLTB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGI4LCAweGI1LCAweGMyLCAweDA3LCAweGQyLCAweDBmLCAweDE2LCAweDRjLCAweDE2LCAweDQ5LCAweDAxLCAweGQwLAotMHgwOCwgMHgyMiwgMHgwOCwgMHhlMCwgMHg4MiwgMHgwOCwgMHgwNSwgMHhkMywgMHgwYywgMHgyMiwgMHhhNCwgMHgxOCwKLTB4MGIsIDB4NjgsIDB4ZGYsIDB4MWQsIDB4MTUsIDB4MzcsIDB4MDMsIDB4ZTAsIDB4MWMsIDB4MjIsIDB4MGIsIDB4NjgsCi0weGRmLCAweDFkLCAweDA5LCAweDM3LCAweDBmLCAweDRiLCAweDFkLCAweDc4LCAweDAwLCAweDJkLCAweDEzLCAweGQwLAotMHg1YiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgxMCwgMHhkMCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHgxYSwgMHg0MywKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4NWIsIDB4MDgsIDB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NGEsIDB4NjgsCi0weDAxLCAweDIwLCAweDM5LCAweDFjLCAweDIzLCAweDFjLCAweDAwLCAweGYwLCAweGRmLCAweGZlLCAweGI4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMywgMHgyMywgMHgxYiwgMHgwNiwgMHgxYSwgMHg0MywgMHhmMSwgMHhlNywKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4ZjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDIxLCAweGMxLCAweDYxLCAweDA1LCAweDQ5LCAweDhhLCAweDY4LCAweDAwLCAweDJhLCAweDAxLCAweGQxLAotMHg4OCwgMHg2MCwgMHgwMiwgMHhlMCwgMHhjYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMCwgMHg2MSwgMHhjOCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDMsIDB4NDksIDB4ODgsIDB4NjgsCi0weDAwLCAweDI4LCAweDAyLCAweGQwLCAweGMyLCAweDY5LCAweGMwLCAweDQ2LCAweDhhLCAweDYwLCAweDcwLCAweDQ3LAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgxYywgMHgwMSwgMHgyMywgMHg4OCwgMHg2OCwgMHg1OCwgMHg0MCwKLTB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4M2EsIDB4Y2EsIDB4NjAsIDB4MGEsIDB4NjksIDB4MDEsIDB4M2EsCi0weDgwLCAweDAwLCAweDBhLCAweDYxLCAweDQyLCAweDE4LCAweGQwLCAweDZiLCAweDUzLCAweDZiLCAweGMwLCAweDQ2LAotMHhjYiwgMHg2MiwgMHgwYiwgMHg2OCwgMHg5YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHg2YywgMHg1MywgMHg2YywKLTB4YzksIDB4MTgsIDB4NTEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4OGEsIDB4NjgsIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsCi0weGQzLCAweDZiLCAweDgzLCAweDQyLCAweDE3LCAweGQxLCAweGQwLCAweDFkLCAweDNkLCAweDMwLCAweDBhLCAweDY4LAotMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHg2YywgMHgwMywgMHg2OCwgMHg5YSwgMHgxYSwgMHgwMiwgMHg2MCwKLTB4MDEsIDB4MjMsIDB4ODgsIDB4NjgsIDB4NTgsIDB4NDAsIDB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4MzIsCi0weGNhLCAweDYwLCAweDBhLCAweDY5LCAweDAxLCAweDMyLCAweDgwLCAweDAwLCAweDQwLCAweDE4LCAweDBhLCAweDYxLAotMHg0MCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHg3MCwgMHg0NywgMHhiOCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MWQsIDB4MWMsIDB4MTcsIDB4MWMsIDB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDksIDB4ZmYsCi0weDAwLCAweDIwLCAweDI5LCAweDFjLCAweDAwLCAweGYwLCAweDdjLCAweGZlLCAweDAxLCAweDIwLCAweGY5LCAweDFkLAotMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHg4MCwgMHgwNiwgMHg2MCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhhMCwgMHg2MSwKLTB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDYsIDB4NDgsCi0weDAxLCAweDZkLCAweDQyLCAweDZkLCAweDA1LCAweDRiLCAweDAwLCAweDIwLCAweDAwLCAweGYwLCAweDYyLCAweGZlLAotMHhiOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwMiwKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDYsIDB4NDksIDB4MGEsIDB4NjgsCi0weDEwLCAweDE4LCAweDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LAotMHgwMywgMHg0OSwgMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsCi0weDA2LCAweDQ5LCAweDBhLCAweDY4LCAweDEwLCAweDE4LCAweDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLAotMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMywgMHg0OSwgMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDA2LCAweDQ5LCAweDBhLCAweDY4LCAweDEwLCAweDE4LAotMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMywgMHg0OSwKLTB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsIDB4NzAsIDB4NDcsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAyLCAweDQ4LCAweDQxLCAweDc5LCAweDAxLCAweDMxLCAweDQxLCAweDcxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg5MCwgMHhiNCwgMHg4MiwgMHgwMCwKLTB4MTcsIDB4NGIsIDB4OWEsIDB4NTgsIDB4OGIsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODksIDB4MDgsIDB4MGIsIDB4MWQsCi0weDAxLCAweGUwLCAweDg5LCAweDA4LCAweGNiLCAweDFjLCAweDExLCAweDY5LCAweGQ3LCAweDY4LCAweDEyLCAweDRjLAotMHg4MCwgMHgwMCwgMHgyMCwgMHg1OCwgMHg0MCwgMHg2OCwgMHhiOSwgMHg0MiwgMHgwMywgMHhkMSwgMHg4MSwgMHg0MiwKLTB4MTksIDB4ZDksIDB4MTEsIDB4NjgsIDB4MTcsIDB4ZTAsIDB4MDAsIDB4MjQsIDB4YjksIDB4NDIsIDB4MDksIDB4ZDksCi0weDgxLCAweDQyLCAweDEyLCAweGQ5LCAweDExLCAweDY4LCAweDc4LCAweDFhLCAweDAwLCAweGQ1LCAweDAzLCAweDMwLAotMHg4MCwgMHgxMCwgMHg5OCwgMHg0MiwgMHgwYiwgMHhkOCwgMHgwNywgMHhlMCwgMHg4MSwgMHg0MiwgMHgwNSwgMHhkOCwKLTB4NzgsIDB4MWEsIDB4MDAsIDB4ZDUsIDB4MDMsIDB4MzAsIDB4ODAsIDB4MTAsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDgsCi0weDIwLCAweDFjLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweGM4LCAweDFkLCAweDA1LCAweDMwLCAweGZhLCAweGU3LAotMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4MCwgMHgwMCwgMHgwZiwgMHg0YSwgMHgxNywgMHg1OCwKLTB4ODgsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODgsIDB4MDgsIDB4MDQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4ODgsIDB4MDgsCi0weDAzLCAweDMwLCAweDM5LCAweDY5LCAweDdhLCAweDY4LCAweDkxLCAweDQyLCAweDA5LCAweGQ5LCAweDM5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgzOSwgMHg2MSwgMHhmOSwgMHg2OCwgMHg3YSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwMiwgMHhkOSwKLTB4MzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4ODEsIDB4MDAsIDB4MzgsIDB4NjksIDB4MDAsIDB4ZjAsCi0weGQxLCAweGZkLCAweDM4LCAweDYxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwMywgMHgyMSwgMHgwOSwgMHgwNywgMHgwMSwgMHg0MCwKLTB4MGMsIDB4MGYsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjIsIDB4OTIsIDB4MDcsIDB4MDIsIDB4NDAsCi0weGEzLCAweDAwLCAweDFjLCAweDRmLCAweGZmLCAweDU4LCAweDg5LCAweDA3LCAweDg5LCAweDBmLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHg4MCwgMHgwOCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgyYSwKLTB4MDEsIDB4ZDAsIDB4MDIsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MzAsIDB4ZjksIDB4NjgsIDB4N2EsIDB4NjgsCi0weDkxLCAweDQyLCAweDAyLCAweGQ5LCAweDM5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDgxLCAweDAwLAotMHhmOCwgMHg2OCwgMHgwMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHhmOCwgMHg2MCwgMHgwZiwgMHg0OCwgMHgwMCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MjAsIDB4MWMsCi0weGZlLCAweGY3LCAweGNhLCAweGZjLCAweDBiLCAweDQ5LCAweGM4LCAweDFkLCAweDE5LCAweDMwLCAweDAzLCAweDc5LAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgwNSwgMHhkMSwgMHgwOSwgMHg0OSwgMHhjOCwgMHgxZCwgMHgxOSwgMHgzMCwKLTB4MDMsIDB4NzksIDB4MDAsIDB4MmIsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4NzEsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDc5LCAweGY5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDcwLCAweDA0LCAweDAwLCAweDgwLAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MmIsIDB4NDksIDB4MDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDEsIDB4NDEsIDB4NjgsCi0weDI5LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDgxLCAweDY4LAotMHg0OSwgMHgwOCwgMHgwMiwgMHhkMywgMHgwOSwgMHgyMSwgMHgwOSwgMHgwNCwgMHgwMSwgMHhlMCwgMHgwZCwgMHgyMSwKLTB4MDksIDB4MDQsIDB4MGMsIDB4YzgsIDB4MDgsIDB4MzgsIDB4MTksIDB4NDMsIDB4ODcsIDB4NjgsIDB4YmIsIDB4MGEsCi0weDAzLCAweGQzLCAweDQzLCAweDY4LCAweDViLCAweDA4LCAweDAwLCAweGQzLCAweDAxLCAweDMxLCAweDQwLCAweDY4LAotMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwgMHgwNywgMHgwZiwgMHhmOCwgMHgwMCwgMHgxZCwgMHg0YywKLTB4MDAsIDB4MTksIDB4MjMsIDB4NjgsIDB4YzAsIDB4MTgsIDB4NTAsIDB4MzAsIDB4MDAsIDB4NzksIDB4MDEsIDB4MjgsCi0weDEwLCAweGQxLCAweDYwLCAweDY4LCAweDAxLCAweDI4LCAweDBkLCAweGQwLCAweDEwLCAweDFjLCAweDAwLCAweGYwLAotMHg3MSwgMHhmOCwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDM4LCAweDAxLCAweDAwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDAzLCAweDZiLAotMHg1ZCwgMHgxYywgMHgwNSwgMHg2MywgMHhiZCwgMHgwMiwgMHgyZCwgMHgxOSwgMHhkYiwgMHgwMCwgMHhlYiwgMHgxOCwKLTB4ODAsIDB4MzMsIDB4MTksIDB4NjMsIDB4ZGEsIDB4NjIsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsCi0weDAxLCAweDIxLCAweGI5LCAweDQwLCAweDIyLCAweDY4LCAweDExLCAweDQzLCAweDIxLCAweDYwLCAweDAxLCAweDZiLAotMHg4MCwgMHgyOSwgMHhlMiwgMHhkMywgMHgwMCwgMHgyMSwgMHgwMSwgMHg2MywgMHhkZiwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDFmLCAweDRlLCAweDcwLCAweDY4LCAweDAwLCAweDI4LCAweDM2LCAweGQxLCAweDAwLCAweDI0LAotMHhiMSwgMHg2OCwgMHg0OCwgMHgxYywgMHhjOSwgMHgwMCwgMHg4OSwgMHgxOSwgMHhiMCwgMHg2MCwgMHgzMiwgMHg2OCwKLTB4ODksIDB4MTgsIDB4NjAsIDB4MzEsIDB4MGQsIDB4N2IsIDB4MDgsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4YjQsIDB4NjAsCi0weDI4LCAweDAxLCAweDgwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDg3LCAweDZiLAotMHgwMCwgMHgyZiwgMHgyMSwgMHhkMCwgMHhjMSwgMHg2YSwgMHg0YiwgMHgxYywgMHhhYSwgMHgwMiwgMHg5MiwgMHgxOSwKLTB4YzksIDB4MDAsIDB4NTEsIDB4MTgsIDB4ODAsIDB4MzEsIDB4YzMsIDB4NjIsIDB4Y2EsIDB4NmEsIDB4MDksIDB4NmIsCi0weDAxLCAweDNmLCAweDg3LCAweDYzLCAweDgwLCAweDJiLCAweDAwLCAweGQzLCAweGM0LCAweDYyLCAweDAwLCAweDJmLAotMHgwNiwgMHhkMSwgMHgwMSwgMHgyNywgMHhhZiwgMHg0MCwgMHgzYiwgMHgxYywgMHhkYiwgMHg0MywgMHgzNywgMHg2OCwKLTB4M2IsIDB4NDAsIDB4MzMsIDB4NjAsIDB4NDMsIDB4NmIsIDB4MDEsIDB4M2IsIDB4NDMsIDB4NjMsIDB4MTAsIDB4MWMsCi0weDM3LCAweDFjLCAweDAwLCAweGYwLCAweDA5LCAweGY4LCAweDc4LCAweDY4LCAweDAwLCAweDI4LCAweGM5LCAweGQwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4Y2QsIDB4MGYsIDB4ZWQsIDB4MDcsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MjcsIDB4MmUsIDB4NGIsCi0weDJlLCAweDRhLCAweDAwLCAweDJkLCAweDFkLCAweGQwLCAweGQ4LCAweDZhLCAweDAxLCAweDMwLCAweGQ4LCAweDYyLAotMHgxMCwgMHgxYywgMHg1MiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHgwMiwgMHg2OSwgMHg1MywgMHgxYywKLTB4OTIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MDMsIDB4NjEsIDB4OTEsIDB4NjEsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsCi0weDQxLCAweDYxLCAweDAyLCAweDY5LCAweDBmLCAweDJhLCAweDAwLCAweGQzLCAweDA3LCAweDYxLCAweDBmLCAweDI5LAotMHgwMCwgMHhkMywgMHg0NCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZWUsIDB4ZmUsIDB4ZjgsIDB4ZTcsIDB4MTUsIDB4NjksIDB4NmUsIDB4MWMsIDB4YWQsIDB4MDAsCi0weGFkLCAweDE4LCAweDE2LCAweDYxLCAweGE5LCAweDYxLCAweDU1LCAweDY5LCAweDAxLCAweDM1LCAweDU1LCAweDYxLAotMHgxNiwgMHg2OSwgMHgwZiwgMHgyZSwgMHgwMCwgMHhkMywgMHgxNywgMHg2MSwgMHgwZiwgMHgyZCwgMHgwMCwgMHhkMywKLTB4NTQsIDB4NjAsIDB4OGMsIDB4MDIsIDB4YTQsIDB4MGEsIDB4MTYsIDB4NGYsIDB4M2EsIDB4NmYsIDB4ZmQsIDB4NjgsCi0weGY5LCAweDFkLCAweDc5LCAweDMxLCAweDAxLCAweDJkLCAweDBjLCAweGQxLCAweGRiLCAweDZkLCAweDViLCAweDA4LAotMHgwOSwgMHhkMywgMHgwYiwgMHg4OSwgMHgwMCwgMHgyYiwgMHgwNiwgMHhkMSwgMHhmZCwgMHg2ZiwgMHgwMywgMHgzYiwKLTB4MmUsIDB4NjgsIDB4MzMsIDB4NDAsIDB4MmIsIDB4NjAsIDB4MTQsIDB4MjMsIDB4MGIsIDB4ODEsIDB4MTAsIDB4NjAsCi0weDgwLCAweDA3LCAweDgwLCAweDBhLCAweDIwLCAweDQzLCAweDAzLCAweDA0LCAweDAwLCAweGQwLCAweDAxLCAweDM4LAotMHg1MCwgMHg2MCwgMHgwOSwgMHg2YSwgMHgwOCwgMHgzMiwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkOCwgMHgwNywgMHg0YSwKLTB4MDAsIDB4MGQsIDB4MDIsIDB4ZDMsIDB4NTEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4ODIsIDB4NjEsIDB4M2EsIDB4NjcsCi0weGJlLCAweGU3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwKLTB4YjAsIDB4YjUsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MTYsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDE1LCAweDRjLCAweDAwLCAweDI1LCAweDY3LCAweDY5LCAweDAwLCAweDJmLAotMHgxNiwgMHhkMCwgMHhlMCwgMHg2OCwgMHg0MSwgMHgxYywgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhlMSwgMHg2MCwKLTB4ODAsIDB4NjksIDB4MDEsIDB4M2YsIDB4ZmYsIDB4ZjcsIDB4OTQsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MGYsIDB4MjgsCi0weDAwLCAweGQzLCAweGU1LCAweDYwLCAweGUwLCAweDY4LCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDgwLCAweDY5LAotMHgwMCwgMHgwOCwgMHgwMSwgMHhkMywgMHgwMCwgMHgyZiwgMHhlYSwgMHhkMSwgMHg2NywgMHg2MSwgMHgwMywgMHhlMCwKLTB4MDgsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4NjUsIDB4NjAsIDB4MjAsIDB4NjgsCi0weDAwLCAweDI4LCAweDAxLCAweGQwLCAweGZmLCAweGY3LCAweDI2LCAweGZmLCAweGIwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MTAsIDB4MjMsCi0weDgyLCAweDY4LCAweDEzLCAweDQwLCAweDAwLCAweDIxLCAweDAwLCAweDJiLCAweDE1LCAweGQwLCAweDBjLCAweDRiLAotMHgxYSwgMHg0MCwgMHgxMiwgMHgwMSwgMHg4MSwgMHgyNCwgMHgxNCwgMHg0MywgMHgwMiwgMHg2OCwgMHgxNSwgMHg2OCwKLTB4MTMsIDB4MWQsIDB4ODAsIDB4Y2IsIDB4MWIsIDB4NjgsIDB4MDQsIDB4M2EsIDB4MDIsIDB4NjAsIDB4MjAsIDB4YzIsCi0weDgwLCAweGMyLCAweDA4LCAweGMyLCAweDE0LCAweDYwLCAweDQyLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwNCwgMHgzMiwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHgwOCwgMHgxYywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4ZjAsIDB4ZmYsIDB4MGYsIDB4ZjAsIDB4YjQsIDB4ODIsIDB4NjgsIDB4NTMsIDB4MDksIDB4MzQsIDB4ZDMsCi0weDFiLCAweDRiLCAweDFhLCAweDQwLCAweDEyLCAweDAxLCAweDgxLCAweDI2LCAweDE2LCAweDQzLCAweDAzLCAweDY4LAotMHgxZCwgMHg2OCwgMHgxZiwgMHgxZCwgMHgxMCwgMHhjZiwgMHgzZiwgMHg2OCwgMHgwNCwgMHgzYiwgMHgwMywgMHg2MCwKLTB4MjAsIDB4YzMsIDB4MTAsIDB4YzMsIDB4ODAsIDB4YzMsIDB4MWUsIDB4NjAsIDB4NDMsIDB4NjgsIDB4MWYsIDB4MWQsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDNiLCAweDQzLCAweDQzLCAweDYwLCAweGNiLCAweDZiLCAweDE4LCAweDFmLAotMHhjOCwgMHg2MywgMHg4MCwgMHhjYiwgMHg4MCwgMHhjMCwgMHgxYywgMHg2OCwgMHgxZiwgMHgxZCwgMHgwMywgMHgxZCwKLTB4MDQsIDB4NjAsIDB4MzgsIDB4MWMsIDB4M2YsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MWYsIDB4NjAsIDB4MWYsIDB4MWQsCi0weDQzLCAweDY4LCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDgxLCAweDIzLCAweDIzLCAweDQzLCAweDNiLCAweDYwLAotMHg0MCwgMHg2OCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwNCwgMHgxMCwgMHg0MywgMHg3OCwgMHg2MCwgMHgwOCwgMHg2ZSwKLTB4MDQsIDB4MzAsIDB4MDgsIDB4NjYsIDB4NDgsIDB4NmUsIDB4MDQsIDB4MzAsIDB4NDgsIDB4NjYsIDB4MDAsIDB4MjAsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweGYwLCAweGZmLCAweDBmLCAweDgwLCAweGI0LCAweDgxLCAweDZhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjYSwgMHgxZCwgMHgwNSwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwKLTB4Y2YsIDB4MWQsIDB4MDEsIDB4MzcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDBmLCAweDFkLCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LAotMHg4YiwgMHg2MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgwYywgMHhjMSwKLTB4MDIsIDB4NjIsIDB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjIsIDB4MDQsIDB4MjMsIDB4ODEsIDB4NjksCi0weDE5LCAweDQzLCAweDgxLCAweDYxLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDkxLCAweDYxLCAweDgxLCAweDZhLAotMHgwNCwgMHgzMSwgMHg4MSwgMHg2MiwgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2MiwgMHhjMSwgMHgxZCwKLTB4MzksIDB4MzEsIDB4NGEsIDB4OGIsIDB4MDQsIDB4M2EsIDB4NGEsIDB4ODMsIDB4NDksIDB4OGIsIDB4MDIsIDB4NmIsCi0weDQwLCAweDMyLCAweDUxLCAweDgzLCAweGMxLCAweDg5LCAweDA0LCAweDM5LCAweGMxLCAweDgxLCAweGMxLCAweDY4LAotMHgwMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4MjAsIDB4NDcsIDB4MjgsIDB4NDcsCi0weDMwLCAweDQ3LCAweDM4LCAweDQ3LCAweDMwLCAweDQwLCAweDJkLCAweGU5LCAweDBjLCAweGMwLCAweDlkLCAweGU1LAotMHgwYywgMHg0OCwgMHhhMCwgMHhlMSwgMHgyNCwgMHg0OCwgMHhiMCwgMHhlMSwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDEsIDB4YzAsIDB4NGMsIDB4ZTIsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4NjQsIDB4NTEsIDB4OWYsIDB4ZTUsCi0weDk0LCAweDUwLCAweDIwLCAweGUwLCAweDAwLCAweDUwLCAweDkwLCAweGU1LCAweDE0LCAweDQwLCAweDkwLCAweGU1LAotMHgwMCwgMHgzMCwgMHg4NSwgMHhlNSwgMHgwNCwgMHhjMCwgMHg4NSwgMHhlNSwgMHgwOCwgMHgxMCwgMHg4NSwgMHhlNSwKLTB4MGMsIDB4MjAsIDB4ODUsIDB4ZTUsIDB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDEwLCAweDUwLCAweDg1LCAweGUyLCAweDAxLCAweDAwLCAweDU1LCAweGUxLCAweDBjLCAweDUwLCAweDkwLCAweDU1LAotMHgwNCwgMHgwMCwgMHg1NSwgMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4NTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCi0weDMwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDMwLCAweDkzLCAweGU1LAotMHgwOCwgMHgyMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgzMSwgMHg4MywgMHhlMywgMHgwMiwgMHgzNiwgMHg4MywgMHhlMywKLTB4MDMsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTQsIDB4MzAsIDB4ODAsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4MWEsCi0weDAxLCAweDAwLCAweGEwLCAweGUzLCAweGY0LCAweGZmLCAweGZmLCAweGVhLCAweDAxLCAweDA2LCAweDFjLCAweGUzLAotMHhmMSwgMHhmZiwgMHhmZiwgMHgwYSwgMHhlYywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMiwgMHhjNiwgMHhjYywgMHhlMywKLTB4NTQsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4ZTQsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4NTAsIDB4MTAsIDB4OTEsIDB4ZTUsCi0weGQ5LCAweGZmLCAweGZmLCAweGVhLCAweGYwLCAweDQ3LCAweDJkLCAweGU5LCAweDIwLCAweGMwLCAweDlkLCAweGU1LAotMHgwYywgMHg2OCwgMHhhMCwgMHhlMSwgMHgyNiwgMHg2OCwgMHhiMCwgMHhlMSwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4YjgsIDB4NTAsIDB4OWYsIDB4ZTUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZTAsCi0weDA1LCAweDAwLCAweDgwLCAweGUwLCAweDA4LCAweDQwLCAweDkwLCAweGU1LCAweDA0LCAweDgwLCAweDkwLCAweGU1LAotMHgwMCwgMHg3MCwgMHhhMCwgMHhlMywgMHgxZiwgMHhjMCwgMHhhMCwgMHhlMywgMHgwMiwgMHhjNCwgMHg4YywgMHhlMywKLTB4MDAsIDB4NTAsIDB4OTAsIDB4ZTUsIDB4MTAsIDB4OTAsIDB4OTAsIDB4ZTUsIDB4MTQsIDB4YTAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDMwLCAweDg1LCAweGU1LCAweDA0LCAweGMwLCAweDg1LCAweGU1LCAweDA4LCAweDEwLCAweDg1LCAweGU1LAotMHgwYywgMHgyMCwgMHg4NSwgMHhlNSwgMHgxMCwgMHg1MCwgMHg4NSwgMHhlMiwgMHgwOSwgMHgwMCwgMHg1NSwgMHhlMSwKLTB4MGMsIDB4NTAsIDB4OTAsIDB4NTUsIDB4MGEsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDAzLCAweDcwLCAweDE3LCAweGUyLCAweDIwLCAweDEwLCAweDgxLCAweGUyLCAweDIwLCAweDMwLCAweDgzLCAweGUyLAotMHgwYSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHg2MCwgMHg5NiwgMHhlMiwgMHgwMSwgMHg3MCwgMHg4NywgMHhlMiwKLTB4MDksIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjAsIDB4NjAsIDB4NDYsIDB4ZTIsIDB4MjAsIDB4MDAsIDB4NTYsIDB4ZTMsCi0weGVjLCAweGZmLCAweGZmLCAweGNhLCAweDAwLCAweDcwLCAweGEwLCAweGUzLCAweDAxLCAweGMwLCAweDQ2LCAweGUyLAotMHgwMiwgMHhjNCwgMHg4YywgMHhlMywgMHgwMCwgMHg2MCwgMHhhMCwgMHhlMywgMHhlNywgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4NTAsIDB4ODgsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDUwLCAweDgwLCAweGU1LCAweDAxLCAweDAwLCAweGEwLCAweGUxLCAweGYwLCAweDQ3LCAweGJkLCAweGU4LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHhhMCwgMHg5NCwgMHhlNSwgMHgwYSwgMHgwMCwgMHg1NSwgMHhlMSwKLTB4MTQsIDB4YTAsIDB4ODAsIDB4ZTUsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weGY1LCAweGZmLCAweGZmLCAweGVhLCAweGE4LCAweDAzLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHgwMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2OCwgMHg4MiwgMHg5ZiwgMHhlNSwgMHgwYiwgMHg5MiwgMHhhMCwgMHhlMywKLTB4NjQsIDB4YTIsIDB4OWYsIDB4ZTUsIDB4NTgsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsCi0weDU0LCAweGIwLCAweDlhLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDNmLCAweDQwLCAweDJkLCAweGU5LAotMHgwMCwgMHgwMCwgMHg0ZiwgMHhlMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgxMiwgMHgwMCwgMHg1MCwgMHhlMywKLTB4NTQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDA0LCAweDUwLCAweGEwLCAweGUzLCAweDAwLCAweDQwLCAweDk5LCAweGU1LAotMHgwOSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHg1MywgMHgwMCwgMHgwMCwgMHgxYiwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MjAsIDB4MDAsIDB4MTQsIDB4ZTMsCi0weDU5LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDA3LCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLAotMHgwMSwgMHgwNiwgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwOCwgMHgwMCwgMHgxNCwgMHhlMywKLTB4NDUsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDUsIDB4MTQsIDB4ZTMsIDB4NGEsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAyLCAweDA4LCAweDE0LCAweGUzLCAweDRiLCAweDAwLCAweDAwLCAweDFiLCAweGU1LCAweDBlLCAweDE0LCAweGUzLAotMHgwNywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNCwgMHgyMCwgMHg5OCwgMHhlNSwgMHgwYywgMHgxMCwgMHg5OCwgMHhlNSwKLTB4MDQsIDB4MzAsIDB4NTIsIDB4ZTIsIDB4M2MsIDB4MzAsIDB4YTAsIDB4YjMsIDB4MDQsIDB4MzAsIDB4ODgsIDB4ZTUsCi0weDAyLCAweDAwLCAweDkxLCAweGU3LCAweDBmLCAweGUwLCAweGEwLCAweGUxLAotMHgxMCwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHg1MCwgMHg1NSwgMHhlMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MGMsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDFiLCAweGZmLCAweDJmLCAweDExLCAweDA4LCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAotMHgwYiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHgwYywgMHgxNCwgMHhlMywgMHg5OCwgMHgwMSwgMHg5ZiwgMHgxNSwKLTB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MTQsIDB4ZTMsCi0weDhjLCAweDAxLCAweDlmLCAweDE1LCAweDBmLCAweGUwLCAweGEwLCAweDExLCAweDEwLCAweGZmLCAweDJmLCAweDExLAotMHgwMSwgMHgwOSwgMHgxNCwgMHhlMywgMHg4MCwgMHgwMSwgMHg5ZiwgMHgxNSwgMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwKLTB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDE2LCAweDAwLCAweDAwLCAweDBhLCAweDU0LCAweGUwLCAweDhmLCAweGUyLCAweDA0LCAweDAwLCAweDE0LCAweGUzLAotMHg0MCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwYSwgMHgxNCwgMHhlMywKLTB4NDQsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDksIDB4MTQsIDB4ZTMsCi0weDQ4LCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDAyLCAweDE0LCAweGUzLAotMHg0YywgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwNCwgMHgxNCwgMHhlMywKLTB4NTAsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsCi0weDIxLCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDBlLCAweDAwLCAweDAwLCAweDFiLAotMHgxMCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MDQsIDB4NTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ZTIsCi0weDFiLCAweGZmLCAweDJmLCAweDExLCAweDNmLCAweDQwLCAweGJkLCAweGU4LCAweDA0LCAweGYwLCAweDVlLCAweGUyLAotMHhjMCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHg2MSwgMHhlMSwgMHhmYSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MTgsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDU0LCAweGIwLCAweDlhLCAweGU1LCAweDFjLCAweDEwLCAweDlhLCAweGU1LCAweDE0LCAweDAwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyMCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MjQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDI4LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweDJjLCAweDEwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MzQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDM4LCAweGUwLCAweDlhLCAweGU1LCAweDNjLCAweDEwLCAweDlhLCAweGU1LCAweDE4LCAweDAwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzOCwgMHhlMCwgMHg5YSwgMHhlNSwgMHgzYywgMHgxMCwgMHg5YSwgMHhlNSwKLTB4MTQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NjQsIDB4MjAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDMwLCAweDkyLCAweGU1LCAweDAwLCAweDMwLCAweDUzLCAweGUwLCAweDBhLCAweDAwLCAweDAwLCAweGJhLAotMHgwMCwgMHgzMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwOCwgMHgzMCwgMHg5MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4OTEsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MTAsIDB4ODAsIDB4ZTcsCi0weDA0LCAweDMwLCAweDUzLCAweGUyLCAweDNjLCAweDMwLCAweGEwLCAweGIzLCAweDA4LCAweDMwLCAweDgyLCAweGU1LAotMHgwMSwgMHgwMCwgMHhhMCwgMHhlMywgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzYywgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDAwLCAweDAwLCAweGEwLCAweGUzLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAweDEwLCAweDAwLCAweDlmLCAweGU1LAotMHgwOCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwNCwgMHgxMCwgMHg1MSwgMHhlMiwgMHgzYywgMHgxMCwgMHhhMCwgMHhiMywKLTB4MDgsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGNjLCAweDA0LCAweDAwLCAweDgwLCAweDcxLCAweDJiLCAweGZmLCAweGZmLCAweGQxLCAweDNkLCAweGZmLCAweGZmLAotMHhjOSwgMHgyYiwgMHhmZiwgMHhmZiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhjOSwgMHgxYywgMHg4OSwgMHgwOCwKLTB4ODksIDB4MDAsIDB4MDEsIDB4MjMsIDB4ODUsIDB4NGEsIDB4NWIsIDB4MDcsIDB4MTgsIDB4NDMsIDB4MTMsIDB4NjgsCi0weDViLCAweDE4LCAweDEzLCAweDYwLCAweDAwLCAweDFmLCAweDgxLCAweGEzLCAweDViLCAweDFhLCAweDE4LCAweDQ3LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weDk4LCAweDAwLCAweDlmLCAweGU1LCAweDk4LCAweDEwLCAweDlmLCAweGU1LCAweDAxLCAweDIwLCAweDQwLCAweGUwLAotMHg5NCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsCi0weDAwLCAweDAwLCAweDAwLCAweDBhLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAweDc4LCAweDAwLCAweDlmLCAweGU1LAotMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwgMHg3NCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg3NCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsCi0weDAzLCAweDAwLCAweDUwLCAweGUxLCAweDAzLCAweDAwLCAweDAwLCAweDFhLCAweDA0LCAweDEwLCAweDgxLCAweGUyLAotMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4NTAsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsIDB4NGMsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDRjLCAweDEwLCAweDlmLCAweGU1LCAweDAxLCAweDIwLCAweDQwLCAweGUwLCAweDJjLCAweDMwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwKLTB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0weGY4LCAweGZmLCAweGZmLCAweGVhLCAweDI4LCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweDgwLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg3YywgMHgzNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwKLTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4YzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MzcsIDB4MDAsIDB4ODAsCi0weDgwLCAweDM0LCAweDAwLCAweDgwLCAweGM0LCAweDA0LCAweDAwLCAweDgwLCAweGZjLCAweDNmLCAweDAwLCAweDgwLAotMHg0MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhjOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzEsIDB4ZWEsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MzksIDB4ZmUsIDB4ZmYsIDB4ZWEsCi0weDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDYzLCAweGZlLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLAotMHgxYiwgMHhmZiwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YiwgMHhlYSwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDI4LCAweDA0LCAweDAwLCAweDAwLCAweGY4LCAweDNkLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLAotMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwYiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4ZmYsIDB4MDYsIDB4NTQsCi0weDAzLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDA0LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhhMSwgMHgwNSwgMHhmZiwgMHhmZiwgMHgwNCwgMHhmZiwgMHgwNywgMHg1NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKLTB4YjUsIDB4MDQsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDUsIDB4ZmYsIDB4ZmYsCi0weDA1LCAweGZmLCAweDA1LCAweDU0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDA0LCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwNSwgMHhmZiwgMHhmZiwgMHgwMSwgMHhmZiwgMHgwNCwgMHgwMCwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTgsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDYxLCAweDBlLCAweGZmLCAweGZmLCAweDAyLCAweGZmLCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhhMSwgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDBkLCAweGZmLCAweGZmLCAweDA2LCAweDAwLCAweGZmLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg1MCwgMHhmZiwgMHhmZiwgMHg4MSwgMHg1MCwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NDgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NzUsIDB4MjEsIDB4NDAsIDB4MWIsIDB4NzUsIDB4MjEsIDB4NDAsCi0weDMxLCAweDc1LCAweDIxLCAweDQwLCAweDQ5LCAweDc1LCAweDIxLCAweDQwLAotMHg1NSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg2MywgMHg3NSwgMHgyMSwgMHg0MCwgMHg3ZCwgMHg3NSwgMHgyMSwgMHg0MCwKLTB4YTksIDB4NzUsIDB4MjEsIDB4NDAsIDB4NmQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzUsIDB4NzYsIDB4MjEsIDB4NDAsCi0weGQzLCAweDc2LCAweDIxLCAweDQwLCAweGRkLCAweDc2LCAweDIxLCAweDQwLCAweGU3LCAweDc2LCAweDIxLCAweDQwLAotMHg5OSwgMHg3NywgMHgyMSwgMHg0MCwgMHhhNywgMHg3NywgMHgyMSwgMHg0MCwgMHhiNSwgMHg3NywgMHgyMSwgMHg0MCwKLTB4NjEsIDB4NzgsIDB4MjEsIDB4NDAsIDB4NWYsIDB4N2MsIDB4MjEsIDB4NDAsIDB4ZTksIDB4N2MsIDB4MjEsIDB4NDAsCi0weDg5LCAweDdkLCAweDIxLCAweDQwLCAweGJkLCAweDdlLCAweDIxLCAweDQwLCAweGM5LCAweDdlLCAweDIxLCAweDQwLAotMHgyOSwgMHg3ZiwgMHgyMSwgMHg0MCwgMHg4ZCwgMHg3ZiwgMHgyMSwgMHg0MCwgMHhiOSwgMHg3ZiwgMHgyMSwgMHg0MCwKLTB4ZGQsIDB4N2YsIDB4MjEsIDB4NDAsIDB4MWQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4NDUsIDB4ODAsIDB4MjEsIDB4NDAsCi0weDhkLCAweDgwLCAweDIxLCAweDQwLCAweDlkLCAweDgwLCAweDIxLCAweDQwLCAweGM1LCAweDgwLCAweDIxLCAweDQwLAotMHhkNSwgMHg4MCwgMHgyMSwgMHg0MCwgMHgxZCwgMHg4MSwgMHgyMSwgMHg0MCwgMHg1YiwgMHg4MSwgMHgyMSwgMHg0MCwKLTB4YjEsIDB4ODEsIDB4MjEsIDB4NDAsIDB4MTEsIDB4ODIsIDB4MjEsIDB4NDAsIDB4MWIsIDB4ODIsIDB4MjEsIDB4NDAsCi0weDFmLCAweDgyLCAweDIxLCAweDQwLCAweDhkLCAweDgyLCAweDIxLCAweDQwLCAweGQ5LCAweDgyLCAweDIxLCAweDQwLAotMHgzMSwgMHg4MywgMHgyMSwgMHg0MCwgMHg2ZCwgMHg4MywgMHgyMSwgMHg0MCwgMHhkMSwgMHg4MywgMHgyMSwgMHg0MCwKLTB4MDksIDB4ODQsIDB4MjEsIDB4NDAsIDB4MTksIDB4ODQsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODQsIDB4MjEsIDB4NDAsCi0weDYxLCAweDg0LCAweDIxLCAweDQwLCAweDc1LCAweDg0LCAweDIxLCAweDQwLCAweDlkLCAweDg0LCAweDIxLCAweDQwLAotMHhhNywgMHg4NCwgMHgyMSwgMHg0MCwgMHhiMSwgMHg4NCwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4NSwgMHgyMSwgMHg0MCwKLTB4NDUsIDB4ODUsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODUsIDB4MjEsIDB4NDAsIDB4YzUsIDB4ODUsIDB4MjEsIDB4NDAsCi0weGNmLCAweDg1LCAweDIxLCAweDQwLCAweGQ5LCAweDg1LCAweDIxLCAweDQwLCAweGUzLCAweDg1LCAweDIxLCAweDQwLAotMHhlZCwgMHg4NSwgMHgyMSwgMHg0MCwgMHhmNywgMHg4NSwgMHgyMSwgMHg0MCwgMHgwMSwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4MGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MTUsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MDEsIDB4ODksIDB4MjEsIDB4NDAsCi0weDFmLCAweDg2LCAweDIxLCAweDQwLCAweDI5LCAweDg2LCAweDIxLCAweDQwLCAweDMzLCAweDg2LCAweDIxLCAweDQwLAotMHgzZCwgMHg4NiwgMHgyMSwgMHg0MCwgMHg2NSwgMHg4NiwgMHgyMSwgMHg0MCwgMHg2ZiwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4ZDEsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZTUsIDB4ODYsIDB4MjEsIDB4NDAsCi0weGVmLCAweDg2LCAweDIxLCAweDQwLCAweGY5LCAweDg2LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHgwMywgMHg4NywgMHgyMSwgMHg0MCwgMHg2OSwgMHg4NywgMHgyMSwgMHg0MCwgMHhiNSwgMHg4NywgMHgyMSwgMHg0MCwKLTB4ZjksIDB4ODcsIDB4MjEsIDB4NDAsIDB4MDksIDB4ODgsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDU1LCAweDg4LCAweDIxLCAweDQwLCAweDU5LCAweDg4LCAweDIxLCAweDQwLCAweDVkLCAweDg4LCAweDIxLCAweDQwLAotMHhiNSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhkZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHhlOSwgMHg4OCwgMHgyMSwgMHg0MCwKLTB4ZWQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjEsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4ODgsIDB4MjEsIDB4NDAsCi0weGY5LCAweDg4LCAweDIxLCAweDQwLCAweGZkLCAweDg4LCAweDIxLCAweDQwLCAweDJkLCAweDg1LCAweDIxLCAweDQwLAotMHg4OSwgMHg4NSwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4MGQsIDB4ODksIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4ZTEsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4NmIsIDB4NzgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4N2IsIDB4MjEsIDB4NDAsIDB4MzEsIDB4N2MsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg1OCwgMHgwMSwgMHgxOCwgMHg0MCwKLTB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDAxLCAweDE4LCAweDQwLCAweDY4LCAweDAxLCAweDE4LCAweDQwLAotMHgyNCwgMHg4MywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NzgsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgxOCwgMHg0MCwKLTB4ODgsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsIDB4MjQsIDB4YWIsIDB4MjAsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwOCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwYywgMHgwMCwgMHgxMiwgMHgwMCwKLTB4MWMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsCi0weGE0LCAweGE4LCAweDIwLCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhkMSwgMHhhOCwgMHgyMSwgMHg0MCwgMHgyZCwgMHhhYSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4ODksIDB4NzAsIDB4MjEsIDB4NDAsIDB4YzksIDB4YTEsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1NywgMHg4OSwgMHgyMSwgMHg0MCwgMHhkMSwgMHhhOCwgMHgyMSwgMHg0MCwgMHhjNSwgMHgyZiwgMHhmZiwgMHhmZiwKLTB4MDUsIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4MjAsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YTcsIDB4MjEsIDB4NDAsCi0weDM0LCAweDJlLCAweDAwLCAweDgwLCAweDQ4LCAweDJlLCAweDAwLCAweDgwLCAweDVjLCAweDJlLCAweDAwLCAweDgwLAotMHgzMCwgMHgzMywgMHgzYSwgMHgzMSwgMHgzMSwgMHgzYSwgMHgzMSwgMHgzMSwgMHgwMCwgMHgzMCwgMHgzNywgMHgyZiwKLTB4MzIsIDB4MzMsIDB4MmYsIDB4MzAsIDB4MzEsIDB4MDAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MzUsCi0weDM2LCAweDM5LCAweDAwLCAweDQzLCAweDZmLCAweDcwLCAweDc5LCAweDcyLCAweDY5LCAweDY3LCAweDY4LCAweDc0LAotMHgyMCwgMHgyOCwgMHg2MywgMHgyOSwgMHgyMCwgMHgzMiwgMHgzMCwgMHgzMCwgMHgzMSwgMHgyMCwgMHgzMywgMHg0MywKLTB4NmYsIDB4NmQsIDB4MjAsIDB4NDMsIDB4NmYsIDB4NzIsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjksCi0weDZmLCAweDZlLCAweDBhLCAweDAwLCAweDA4LCAweDEwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg1MywgMHhmZiwgMHhmZiwKLTB4MjcsIDB4ZjAsIDB4N2QsIDB4ZmQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGUsIDB4ODIsIDB4MDAsCi0weDAxLCAweDQwLCAweDY0LCAweDA0LCAweDY0LCAweDJkLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHg2OSwgMHgzZSwgMHhmZiwgMHhmZiwgMHhjOSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhkNSwgMHgyNCwgMHhmZiwgMHhmZiwKLTB4YzksIDB4M2IsIDB4ZmYsIDB4ZmYsIDB4MjksIDB4M2MsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4MWEsIDB4ZmYsIDB4ZmYsCi0weDY1LCAweDExLCAweGZmLCAweGZmLCAweGNjLCAweDUzLCAweGZmLCAweGZmLCAweDIxLCAweDQwLCAweGZmLCAweGZmLAotMHg4OSwgMHg3MCwgMHgyMSwgMHg0MCwgMHg0OSwgMHg3MiwgMHgyMSwgMHg0MCwgMHhkOSwgMHgzZiwgMHhmZiwgMHhmZiwKLTB4MjEsIDB4OWEsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MjQsIDB4ZmYsIDB4ZmYsIDB4NjQsIDB4NTMsIDB4ZmYsIDB4ZmYsCi0weDhjLCAweDUzLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4YjAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MGUsIDB4MDAsIDB4MDAsCi0weDAwLCAweDZlLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhlZCwgMHg4OSwgMHgyMSwgMHg0MCwgMHg4YiwgMHg4OSwgMHgyMSwgMHg0MCwgMHhhNSwgMHg4YywgMHgyMSwgMHg0MCwKLTB4MDUsIDB4OGQsIDB4MjEsIDB4NDAsIDB4Y2QsIDB4OGQsIDB4MjEsIDB4NDAsIDB4OGIsIDB4OGIsIDB4MjEsIDB4NDAsCi0weGE5LCAweDhlLCAweDIxLCAweDQwLCAweDE1LCAweDhmLCAweDIxLCAweDQwLCAweDY5LCAweDhiLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwgMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHgyZCwgMHhiZSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MjAsIDB4MGEsIDB4NGEsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZDEsIDB4MTgsIDB4MmQsIDB4MjMsCi0weDliLCAweDAxLCAweGQzLCAweDE4LCAweDg4LCAweDYxLCAweGQ4LCAweDYwLCAweGQ4LCAweDYzLCAweDgwLCAweDMyLAotMHhjOCwgMHg2MCwgMHgwOCwgMHg2MSwgMHg0OCwgMHg2MSwgMHhkMCwgMHg2MiwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjAsIDB4ODgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGZlLCAweDAzLCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDBjLCAweDFjLCAweDA1LCAweDFjLAotMHgwMCwgMHgyMywgMHgwMCwgMHg5MywgMHhmZiwgMHhmNywgMHhkZSwgMHhmZiwgMHg2OCwgMHg0OSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4Y2YsIDB4MTgsIDB4NzgsIDB4NjgsIDB4MjgsIDB4NDAsCi0weDAwLCAweDIyLCAweGY4LCAweDYwLCAweDNhLCAweDYxLCAweGJhLCAweDY4LCAweDIyLCAweDQwLCAweDdhLCAweDYxLAotMHgwYywgMHgxYywgMHg0MSwgMHgwOSwgMHgwMywgMHhkMiwgMHg1MSwgMHgwOSwgMHgwMSwgMHhkMiwgMHg4MCwgMHgwYSwKLTB4MDIsIDB4ZDMsIDB4NjAsIDB4NDgsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4ZjksIDB4NjgsCi0weDQ5LCAweDA5LCAweDAzLCAweGQyLCAweDc5LCAweDY5LCAweDQ5LCAweDA5LCAweDAwLCAweGQyLCAweDAwLCAweDIwLAotMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwMywgMHhmMCwgMHhkNCwgMHhmYSwgMHhmOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4NzAsIDB4ZDAsIDB4MDAsIDB4MjMsIDB4MDIsIDB4OTMsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NGEsIDB4MDEsIDB4MjMsCi0weDE4LCAweDQzLCAweGY4LCAweDYwLCAweDAwLCAweDIwLCAweGQ1LCAweDFkLCAweDc5LCAweDM1LCAweDAzLCAweDk1LAotMHgwMSwgMHgyNCwgMHgwMCwgMHgyMSwgMHg0ZiwgMHg0ZCwgMHhmYSwgMHg2OCwgMHgyMiwgMHg0MCwgMHgzOSwgMHhkMCwKLTB4OGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4OTIsIDB4MDAsIDB4NGUsIDB4NGIsIDB4OWIsIDB4NWMsIDB4MWUsIDB4MWMsCi0weDgzLCAweDQyLCAweDA0LCAweGQwLCAweDRiLCAweDRiLCAweGQzLCAweDE4LCAweDViLCAweDc4LCAweDgzLCAweDQyLAotMHgyYywgMHhkMSwgMHg0OSwgMHg0YiwgMHhkMiwgMHgxOCwgMHhkMywgMHg3OCwgMHgwMywgMHg5ZCwgMHhlZCwgMHg2YSwKLTB4YWIsIDB4NDIsIDB4MDIsIDB4ZDksIDB4MDMsIDB4OWQsIDB4YzAsIDB4NDYsIDB4ZWIsIDB4NjIsIDB4NTMsIDB4NjgsCi0weDViLCAweDA4LCAweDAxLCAweGQzLCAweDAxLCAweDIzLCAweDAwLCAweDkzLCAweDg2LCAweDQyLCAweDBhLCAweGQxLAotMHg5NSwgMHg2OCwgMHgwMiwgMHg5YiwgMHg1ZSwgMHgxYywgMHgwMiwgMHg5NiwgMHg5YiwgMHgwMCwgMHgzYywgMHg0ZSwKLTB4OWUsIDB4MTksIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjMsIDB4MTgsIDB4OWQsIDB4NjEsIDB4NTMsIDB4NzgsCi0weDgzLCAweDQyLCAweDBkLCAweGQxLCAweGQyLCAweDY4LCAweDAxLCAweDliLCAweDVkLCAweDFjLCAweDAxLCAweDk1LAotMHg5YiwgMHgwMCwgMHgzNSwgMHg0ZCwgMHg1ZCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwKLTB4ZGEsIDB4NjAsIDB4M2EsIDB4NjksIDB4MDEsIDB4MzIsIDB4M2EsIDB4NjEsIDB4NjQsIDB4MDAsIDB4MDEsIDB4MzEsCi0weDBiLCAweDI5LCAweGJkLCAweGQzLCAweDAxLCAweDMwLCAweDA5LCAweDI4LCAweGI4LCAweGQzLCAweDAwLCAweDIwLAotMHgwMiwgMHg5YiwgMHg5OSwgMHgwMCwgMHgyYiwgMHg0YSwgMHg4OSwgMHgxOCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4YzksIDB4MTgsIDB4ODgsIDB4NjEsIDB4MDEsIDB4OWIsIDB4OTksIDB4MDAsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsCi0weDliLCAweDAxLCAweGM5LCAweDE4LCAweGM4LCAweDYwLCAweDAwLCAweDliLCAweDAwLCAweDJiLCAweDBjLCAweGQxLAotMHg4MSwgMHgwMCwgMHg4OSwgMHgxOCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhjOSwgMHgxOCwgMHhjYiwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4OGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDgsIDB4ZTAsCi0weDA3LCAweGUwLCAweDAzLCAweDlkLCAweGU4LCAweDZhLCAweDMwLCAweDI4LCAweDAzLCAweGQyLCAweDMwLCAweDIwLAotMHgwMywgMHg5ZCwgMHhjMCwgMHg0NiwgMHhlOCwgMHg2MiwgMHgxOSwgMHg0YSwgMHg3OCwgMHg2OSwgMHgwMCwgMHgyOCwKLTB4MmEsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjEsIDB4MDAsIDB4MjAsCi0weDAxLCAweDI0LCAweDAwLCAweDIyLCAweDEzLCAweDRlLCAweDdiLCAweDY5LCAweDIzLCAweDQwLCAweDEwLCAweGQwLAotMHg5MywgMHgwMCwgMHg5YiwgMHgxOCwgMHg5YiwgMHgwMCwgMHgxMiwgMHg0ZCwgMHg1YiwgMHgxOSwgMHg5ZCwgMHg3OCwKLTB4ODUsIDB4NDIsIDB4MDgsIDB4ZDEsIDB4MWQsIDB4NjksIDB4MGIsIDB4MWMsIDB4OWIsIDB4MDAsIDB4OWUsIDB4MTksCi0weDJkLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweGRkLCAweDYzLCAweDAxLCAweDMxLCAweDY0LCAweDAwLAotMHgwMSwgMHgzMiwgMHgwYiwgMHgyYSwgMHhlNiwgMHhkMywgMHgwMSwgMHgzMCwgMHgwOSwgMHgyOCwgMHhlMSwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODksIDB4MDAsIDB4MDQsIDB4NGEsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGM5LCAweDE4LCAweGM4LCAweDYzLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgzMCwgMHg1MywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCi0weDE4LCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAotMHgxMCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKLTB4MDgsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzgsIDB4NTIsIDB4ZmYsIDB4ZmYsCi0weDg4LCAweDUxLCAweGZmLCAweGZmLCAweGQ1LCAweGIwLCAweDIxLCAweDQwLCAweGYwLCAweGI1LCAweDA0LCAweDIwLAotMHgxYSwgMHg0OSwgMHgwMSwgMHgyNSwgMHgwOCwgMHg2MCwgMHgxYSwgMHg0ZiwgMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwKLTB4ZjgsIDB4MTgsIDB4MDUsIDB4NzMsIDB4MTgsIDB4NDgsIDB4NDEsIDB4NmIsIDB4MmMsIDB4MDUsIDB4MDAsIDB4MjAsCi0weDdhLCAweDZlLCAweDE3LCAweDRiLCAweDhhLCAweDQyLCAweDFkLCAweGQwLAotMHgxOSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgxNywgMHhkMSwgMHhkOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwKLTB4NDksIDB4NzgsIDB4MWUsIDB4MWMsIDB4MDAsIDB4MjksIDB4MTAsIDB4ZDEsIDB4YjAsIDB4NjAsIDB4MTAsIDB4MjAsCi0weDcwLCAweDYwLCAweDEwLCAweDRhLCAweDEwLCAweDQ5LCAweGZmLCAweGY3LCAweGMzLCAweGZmLCAweDAwLCAweDI4LAotMHgwNywgMHhkMCwgMHgzNSwgMHg3MywgMHgwNCwgMHgyMywgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywgMHhiOCwgMHg2MSwKLTB4MjAsIDB4NjEsIDB4MDAsIDB4ZjAsIDB4MTcsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDE4LCAweDczLCAweDA0LCAweDIzLCAweGI4LCAweDY5LCAweDk4LCAweDQzLCAweGI4LCAweDYxLCAweDIwLCAweDYxLAotMHhmNSwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weDdkLCAweDcxLCAweDIxLCAweDQwLCAweGY4LCAweGI1LCAweDE1LCAweDRmLCAweDM5LCAweDZjLCAweDE1LCAweDQ4LAotMHg0MCwgMHg2ZSwgMHgwYywgMHgxYSwgMHgxNCwgMHg0ZSwgMHg3MSwgMHg2OCwgMHgxNCwgMHg0ZCwgMHhhMSwgMHg0MiwKLTB4MDYsIDB4ZDgsIDB4MTQsIDB4NGEsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YjksIDB4NmIsIDB4MDksIDB4MTgsCi0weGZhLCAweDZiLCAweDExLCAweGUwLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDIyLCAweDQzLCAweDAwLCAweDkyLAotMHhiOSwgMHg2YiwgMHgwOSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhmYSwgMHg2YiwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywKLTB4OGQsIDB4ZmYsIDB4NzAsIDB4NjgsIDB4MDAsIDB4MWIsIDB4MGEsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weGI5LCAweDZiLCAweGZhLCAweDZiLCAweDAwLCAweDIwLCAweDJiLCAweDFjLCAweGZmLCAweGY3LCAweDgyLCAweGZmLAotMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDAwLCAweDAwLCAweDM3LCAweDAyLCAweGYwLCAweGI1LCAweDJiLCAweDRmLCAweGI4LCAweDY4LCAweDc5LCAweDY4LAotMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgMHgyOSwgMHg0YSwgMHhmZiwgMHhmNywgMHg2MywgMHhmZiwgMHgwMSwgMHgyMCwKLTB4YzAsIDB4MDIsIDB4MjgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YjksIDB4NjgsIDB4MzgsIDB4MWMsCi0weDI2LCAweDRkLCAweDAwLCAweDI0LCAweDI2LCAweDRlLCAweGVmLCAweDFkLCAweDc5LCAweDM3LCAweDAwLCAweDI5LAotMHgzMSwgMHhkMSwgMHgzMSwgMHg2OCwgMHgwYSwgMHg3OCwgMHgxMiwgMHgwYSwgMHgwMywgMHhkMiwgMHgwNCwgMHg3MywKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MGMsIDB4ZDEsCi0weDA1LCAweDFjLCAweDQwLCAweDY4LCAweDAwLCAweGYwLCAweDNlLCAweGY5LCAweDMwLCAweDY4LCAweDAwLCAweGYwLAotMHg2NywgMHhmOCwgMHgwMCwgMHgyOCwgMHgyNiwgMHhkMSwgMHgyYywgMHg3MywgMHhmZiwgMHhmNywgMHg1OCwgMHhmZiwKLTB4MjIsIDB4ZTAsIDB4MDksIDB4MDEsIDB4MDcsIDB4MWMsIDB4NDEsIDB4NjAsIDB4MDgsIDB4MWMsIDB4MTcsIDB4NGEsCi0weDE3LCAweDQ5LCAweGZmLCAweGY3LCAweDM1LCAweGZmLCAweDAwLCAweDI4LCAweDA3LCAweGQxLCAweDNjLCAweDczLAotMHgwNCwgMHgyMywgMHhhOCwgMHg2OSwgMHg5OCwgMHg0MywgMHg5OSwgMHgwNCwgMHhhOCwgMHg2MSwgMHgwOCwgMHg2MSwKLTB4ZGEsIDB4ZTcsIDB4MTAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MTAsIDB4MjAsIDB4YjgsIDB4NjAsCi0weGZmLCAweGY3LCAweDgyLCAweGZmLCAweGQyLCAweGU3LCAweDA1LCAweDFjLCAweDQwLCAweDY4LCAweDAwLCAweGYwLAotMHgxNywgMHhmOSwgMHgzMCwgMHg2OCwgMHgwMCwgMHhmMCwgMHg0MCwgMHhmOCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhkMCwKLTB4MDIsIDB4MjMsIDB4ZjgsIDB4NmIsIDB4MTgsIDB4NDMsIDB4ZjgsIDB4NjMsIDB4YzQsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDI4LCAweDA1LCAweDAwLCAweDgwLCAweGE1LCAweDU1LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4N2QsIDB4NzEsIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDMsIDB4MTAsIDB4NDksCi0weDAwLCAweDI3LCAweDA4LCAweDYwLCAweDBmLCAweDRjLCAweGUwLCAweDFkLCAweGZmLCAweDMwLCAweDNhLCAweDMwLAotMHg0NywgMHg3MCwgMHhlMCwgMHg2OSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg2OSwgMHgwMCwgMHhmMCwKLTB4ZDcsIDB4ZjgsIDB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZTcsIDB4NjEsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDIwLCAweGUwLCAweDYxLCAweDA3LCAweDQ4LCAweDAyLCAweDIzLCAweGMxLCAweDZiLCAweDE5LCAweDQzLAotMHhjMSwgMHg2MywgMHgyNywgMHg3MywgMHhmZiwgMHhmNywgMHgwMCwgMHhmZiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weGU4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDc4LCAweDg4LAotMHg2ZCwgMHgyOCwgMHgwMywgMHhkYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZjcsIDB4ZjgsIDB4MTcsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MGQsIDB4NDksIDB4MDksIDB4NTgsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweGNiLCAweGZlLCAweDAwLCAweDI4LCAweDBmLCAweGQxLCAweDM5LCAweDc4LCAweGM5LCAweDA5LAotMHgwYywgMHhkMywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmOCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhlOCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHgwMiwgMHgxYywgMHg0MSwgMHg0YiwKLTB4ZGQsIDB4MWQsIDB4ZmYsIDB4MzUsIDB4M2EsIDB4MzUsIDB4MmYsIDB4NzgsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDAsCi0weDAwLCAweDI3LCAweDAwLCAweGUwLCAweDAxLCAweDI3LCAweDJmLCAweDcwLCAweDJmLCAweDc4LCAweGZiLCAweDAwLAotMHhkYiwgMHgxOSwgMHg1YiwgMHgwMSwgMHgzYSwgMHg0ZiwgMHhkYywgMHgxOSwgMHg0MCwgMHg3OCwgMHgwMCwgMHgwMSwKLTB4YzcsIDB4MWQsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjAsIDB4ODMsIDB4MDAsIDB4ZDYsIDB4NTgsIDB4YzAsIDB4NDYsCi0weGU2LCAweDUwLCAweDAxLCAweDMwLCAweDA0LCAweDI4LCAweGY4LCAweGQzLCAweDAwLCAweDI5LCAweDBmLCAweGQwLAotMHgwMCwgMHgyMiwgMHhiYiwgMHgwOCwgMHgwMSwgMHg5MywgMHg4MywgMHg0MiwgMHgwYiwgMHhkOSwgMHgxMywgMHgxYywKLTB4OWIsIDB4MDAsIDB4Y2IsIDB4NTgsIDB4ODYsIDB4MDAsIDB4YTMsIDB4NTEsIDB4MDEsIDB4OWIsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMyLCAweDgzLCAweDQyLCAweGY1LCAweGQ4LCAweDAwLCAweGUwLCAweDEwLCAweDI3LCAweDJiLCAweDQ4LAotMHgwMiwgMHg2ZCwgMHg4MCwgMHg2ZSwgMHgyYSwgMHg0OSwgMHg4MiwgMHg0MiwgMHgwMywgMHhkOCwgMHg4MiwgMHgxYSwKLTB4Y2IsIDB4NmMsIDB4OWEsIDB4MWEsIDB4MDAsIDB4ZTAsIDB4MTIsIDB4MWEsIDB4YmEsIDB4NDIsIDB4MDUsIDB4ZDgsCi0weDI2LCAweDQ4LCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLCAweDAxLCAweDIwLCAweDM3LCAweGUwLAotMHhjMywgMHgxOSwgMHhjYSwgMHg2YywgMHg5MywgMHg0MiwgMHgwOCwgMHhkOCwgMHgyMiwgMHg0YSwgMHgzYSwgMHg0MywKLTB4MDAsIDB4OTIsIDB4MGEsIDB4MWMsIDB4NDksIDB4NmMsIDB4MDksIDB4MTgsIDB4OTIsIDB4NmMsIDB4MjMsIDB4MWMsCi0weDEyLCAweGUwLCAweDE2LCAweDFhLCAweDAwLCAweDk2LCAweDFiLCAweDQ5LCAweDQ5LCAweDZjLCAweDA5LCAweDE4LAotMHgxOSwgMHg0OCwgMHg4MiwgMHg2YywgMHgwMywgMHgyMCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg1ZSwgMHhmZSwKLTB4YjgsIDB4MWIsIDB4MTgsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YTMsIDB4MTksIDB4MTQsIDB4NDgsCi0weDgyLCAweDZjLCAweDQxLCAweDZjLCAweDAzLCAweDIwLCAweGZmLCAweGY3LCAweDUzLCAweGZlLCAweDAxLCAweDIwLAotMHgwZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg2OCwgMHg3MCwgMHg4YSwgMHg2OSwgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwKLTB4MTcsIDB4NjEsIDB4OGEsIDB4NjksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MjcsIDB4OGYsIDB4NjEsCi0weDAwLCAweGUwLCAweDg4LCAweDYxLCAweDBjLCAweDQ4LCAweDAyLCAweDIzLCAweGMxLCAweDZiLCAweDE5LCAweDQzLAotMHhjMSwgMHg2MywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0ZiwgMHg3MywKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weDUwLCAweGJhLCAweDIwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMiwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDksIDB4OGEsIDB4NmUsIDB4MTAsIDB4MTgsIDB4MDcsIDB4NGEsCi0weGQyLCAweDZjLCAweDEzLCAweDA0LCAweDFiLCAweDBjLCAweDgzLCAweDQyLCAweDAwLCAweGQ4LCAweDgwLCAweDFhLAotMHg4OCwgMHg2NiwgMHg4OCwgMHg2ZSwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwgMHg3MCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsCi0weDA2LCAweDQ5LCAweDRhLCAweDZlLCAweDEwLCAweDE4LCAweDA2LCAweDRhLCAweDEyLCAweDZjLCAweDgyLCAweDQyLAotMHgwMCwgMHhkOCwgMHg4MCwgMHgxYSwgMHg0OCwgMHg2NiwgMHg0OCwgMHg2ZSwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDA1LCAweDIyLCAweDBhLCAweDYwLCAweDgyLCAweDg4LCAweGMwLCAweDQ2LAotMHg4YSwgMHg4MCwgMHgwMCwgMHgyMiwgMHg0YSwgMHg3MCwgMHg0MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MCwKLTB4Y2EsIDB4ODAsIDB4OGEsIDB4NjAsIDB4Y2EsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDUsIDB4MjIsIDB4MDIsIDB4NjAsCi0weDAwLCAweDIyLCAweDgyLCAweDgwLCAweDQyLCAweDcwLCAweDQxLCAweDgwLCAweGMyLCAweDgwLCAweDgyLCAweDYwLAotMHhjMiwgMHg2MCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHgwZSwgMHg0OCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGRkLCAweGZmLCAweDM4LCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMSwgMHgyNywgMHhkZiwgMHg4MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4MTEsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MzgsIDB4MWMsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjMSwgMHg4OCwgMHgwOSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4OTEsIDB4ODEsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4YmQsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weDQwLCAweDAyLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhmNSwgMHhmZSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzMsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAxLCAweDIwLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcxLCAweGExLCAweDIxLAotMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MjAsIDB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzEsIDB4ZmYsIDB4MjEsIDB4YTEsIDB4MjIsCi0weDUyLCAweDAzLCAweDAxLCAweDMxLCAweDkxLCAweDYwLCAweDcwLCAweDQ3LCAweDI4LCAweDBmLCAweDAwLCAweDgwLAotMHgwMiwgMHgyMCwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsCi0weDcwLCAweDQ3LCAweGMwLCAweDg4LCAweGMwLCAweDA2LCAweGMwLCAweDBlLCAweGExLCAweDIxLCAweDQ5LCAweDAzLAotMHg0OCwgMHg2MSwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDgsIDB4NDksIDB4MGYsIDB4NmIsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDcxLCAweGZmLCAweGY4LCAweDA2LCAweGMwLCAweDBlLCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHhhOSwgMHhmZSwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDgwLCAweGI1LCAweDg1LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHg1YiwgMHhmZiwgMHhmOCwgMHg4OCwgMHgwNCwgMHhhOSwgMHgwMywgMHhmMCwgMHhjOSwgMHhmZiwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGYsIDB4ZDAsIDB4MDEsIDB4YTgsCi0weDQwLCAweDg4LCAweDgwLCAweDA4LCAweDAzLCAweDM4LCAweDgwLCAweDA4LCAweDAxLCAweDMwLCAweDA0LCAweDNiLAotMHg1OCwgMHg3MCwgMHgwNCwgMHg5OCwgMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgMHg0MCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDUsIDB4ZTAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDA0LCAweDk4LCAweGMxLCAweDFkLCAweDAxLCAweDMxLAotMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHg3NSwgMHhmZSwgMHgwMSwgMHgyMCwgMHgwNSwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTQsIDB4NGYsIDB4MzksIDB4N2IsCi0weDAwLCAweDI5LCAweDIwLCAweGQxLCAweGY5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLCAweDQ5LCAweDc4LAotMHgwMCwgMHgyOSwgMHgxYSwgMHhkMSwgMHgxMCwgMHg0OSwgMHgwNSwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwOCwgMHgyMiwKLTB4MDAsIDB4YWIsIDB4NWEsIDB4ODAsIDB4OTgsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MDAsIDB4YWIsIDB4NTgsIDB4NzAsCi0weDAwLCAweDI0LCAweGRjLCAweDgwLCAweDA4LCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDQ4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwMSwgMHgyMCwgMHgzOCwgMHg3MywgMHg2OCwgMHg0NiwgMHgwOCwgMHgzMSwKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDAsIDB4M2MsIDB4NzMsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZjksIDB4ZmUsIDB4YmEsIDB4NjgsIDB4MGQsIDB4NGMsIDB4MGUsIDB4NDgsCi0weDAwLCAweDJhLCAweDA1LCAweGQxLCAweDBkLCAweDQ5LCAweGZmLCAweGY3LCAweGU0LCAweGZjLCAweDAwLCAweDI4LAotMHgwYywgMHhkYSwgMHgwNSwgMHhlMCwgMHhiOSwgMHg4OCwgMHgwYiwgMHg0YiwgMHhmZiwgMHhmNywgMHhkZiwgMHhmYywKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZGEsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDIyLCAweGZlLCAweDAwLCAweDIwLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MGQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NTksIDB4YmQsIDB4MjEsIDB4NDAsCi0weDAwLCAweGI1LCAweGMwLCAweDg4LCAweDAzLCAweGYwLCAweDJlLCAweGZmLCAweDAwLCAweDIwLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhlMiwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZGQsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDAxLCAweDFjLCAweDAyLCAweDIwLCAweDAwLCAweGYwLCAweDAyLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhiMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHgwOCwgMHgxYywgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4YjUsIDB4ZmUsIDB4MjEsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4YTQsIDB4ZmMsIDB4MDQsIDB4MWMsIDB4MjAsIDB4NGEsCi0weDAwLCAweDIxLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGEwLCAweGZjLCAweDAwLCAweDI4LCAweDI3LCAweGQwLAotMHgwNCwgMHhhOSwgMHgxZCwgMHg0YSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg5OSwgMHhmYywgMHgwNCwgMHhhOCwKLTB4MDAsIDB4MjMsIDB4MDEsIDB4MmYsIDB4MDYsIDB4ZDEsIDB4MGMsIDB4YWEsIDB4MDIsIDB4MzIsIDB4MDAsIDB4MjEsCi0weDEzLCAweDYwLCAweDAxLCAweDMxLCAweDEwLCAweDI5LCAweGZiLCAweGQzLCAweDAxLCAweDY4LCAweDA0LCAweDI5LAotMHgwNCwgMHhkOSwgMHg4OSwgMHgwOCwgMHgwMywgMHgzOSwgMHg4OSwgMHgwOCwgMHgwMSwgMHgzMSwgMHgwMCwgMHhlMCwKLTB4MTksIDB4MWMsIDB4MDAsIDB4YWIsIDB4NTksIDB4NzAsIDB4MDYsIDB4YTksIDB4MDksIDB4NzgsIDB4YzAsIDB4NDYsCi0weGQ5LCAweDgwLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA3LCAweDk4LCAweGMwLCAweDQ2LAotMHgwMywgMHg5MCwgMHgwNCwgMHgzMywgMHgwOCwgMHhhZCwgMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmUsIDB4ZmMsIDB4NjgsIDB4NDYsCi0weDI5LCAweDFjLCAweGZmLCAweGY3LCAweGI3LCAweGZkLCAweDAxLCAweDIwLCAweDQ2LCAweGIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg1OSwgMHhiMSwgMHgyMSwgMHg0MCwKLTB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsCi0weDAyLCAweDIwLCAweDAwLCAweGYwLCAweDEwLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwMSwgMHgxYywgMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHhhMiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGYwLCAweGI1LCAweGM3LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDFjLAotMHgwMSwgMHhhOSwgMHhmZiwgMHhmNywgMHg0ZCwgMHhmZSwgMHgyMSwgMHg0OCwgMHhmZiwgMHhmNywgMHgzYywgMHhmYywKLTB4MDAsIDB4OTAsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NjgsIDB4MDQsIDB4MzAsIDB4ZmMsIDB4MmEsCi0weDI1LCAweGQ4LCAweGZmLCAweDIzLCAweDA5LCAweDMzLCAweDk4LCAweDQyLCAweDIxLCAweGQ4LCAweDE5LCAweDJjLAotMHgxZiwgMHhkOCwgMHhmZCwgMHg4OCwgMHhmOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MCwgMHhmOSwgMHgxZCwKLTB4MDksIDB4MzEsIDB4MDYsIDB4YWIsIDB4MDAsIDB4MjAsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZGQsCi0weDQwLCAweGM5LCAweDQwLCAweGMzLCAweDQwLCAweGM5LCAweDQwLCAweGMzLCAweDQwLCAweGM5LCAweDQwLCAweGMzLAotMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg3OCwKLTB4ODYsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MjAsIDB4MWMsIDB4MDUsIDB4YTksIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDIxLCAweGZjLCAweDAwLCAweDI4LCAweDA1LCAweGQwLCAweDAxLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMSwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNywgMHg0OSwgMHgwMCwgMHg5OCwgMHhmZiwgMHhmNywKLTB4MDYsIDB4ZmMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4NGYsIDB4ZmQsIDB4MDEsIDB4MjAsCi0weDQ3LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLAotMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHgxYiwgMHhmZSwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4ZmMsIDB4ODgsIDB4MjUsIDB4NGQsCi0weDY4LCAweDY4LCAweDAxLCAweDMwLCAweDY5LCAweDQ2LCAweDY4LCAweDYwLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhmNSwgMHhmZCwgMHgxMCwgMHgyYywgMHgwOCwgMHhkMywgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MTcsIDB4ZTAsCi0weDc4LCAweDc4LCAweDgyLCAweDAwLCAweGZiLCAweDFkLCAweDA5LCAweDMzLCAweDAwLCAweDIwLCAweGI5LCAweDY4LAotMHgwMCwgMHgyYSwgMHgxNSwgMHhkOSwgMHg0MCwgMHhjYiwgMHgwZiwgMHgxYywKLTB4MDEsIDB4MzEsIDB4YmUsIDB4NDIsIDB4MGQsIDB4ZDAsIDB4MDAsIDB4YWEsIDB4MTIsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDFhLCAweDQzLCAweDAwLCAweGFiLCAweDFhLCAweDcwLCAweDA0LCAweDIyLCAweGRhLCAweDgwLCAweDAyLCAweDkwLAotMHgwMywgMHg5MSwgMHgwNCwgMHgzMywgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgxNSwgMHhlMCwgMHgwMSwgMHgzMCwKLTB4OTAsIDB4NDIsIDB4ZTksIDB4ZDMsIDB4MDAsIDB4YWIsIDB4NWMsIDB4NzAsIDB4MDIsIDB4OTQsIDB4NjksIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkxLCAweGEyLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweDMzLCAweDAwLCAweDJhLAotMHgwNSwgMHhkOSwgMHgwZiwgMHgxYywgMHg4MCwgMHhjMywgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMSwgMHg5MCwgMHg0MiwKLTB4ZjksIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmMsIDB4MDEsIDB4MjAsCi0weDQ2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDljLCAweDAzLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgyMywgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMSwgMHg0MiwgMHgwOSwgMHgwMCwgMHhkMywKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MjcsIDB4M2EsIDB4MWMsIDB4NDMsIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4MjIsCi0weDExLCAweDQzLCAweDFlLCAweDRhLCAweDIwLCAweDI0LCAweGQzLCAweDY4LCAweDAxLCAweDJiLCAweDJlLCAweGQxLAotMHg4MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgwYywgMHg0MywgMHgyMCwgMHgxYywgMHgxYiwgMHgyMywKLTB4ZGIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4OGIsIDB4MDksIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDQsIDB4MjcsCi0weDM4LCAweDQzLCAweGQxLCAweDZmLCAweDA5LCAweDY4LCAweDA5LCAweDBhLCAweDA3LCAweGQyLCAweGQxLCAweDFkLAotMHg3OSwgMHgzMSwgMHgwOSwgMHg2OCwgMHgwOSwgMHg2OCwgMHgwOSwgMHgwYSwgMHgwMSwgMHhkMywgMHgwOCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4NzksIDB4MDMsIDB4MjksCi0weDAyLCAweGQxLCAweGZmLCAweDIzLCAweDAxLCAweDMzLCAweDE4LCAweDQzLCAweDBiLCAweDQ5LCAweDA5LCAweDZhLAotMHgxMCwgMHgyMiwgMHg0YiwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMiwgMHgxMCwgMHg0MywgMHg4OSwgMHgwNywKLTB4ODksIDB4MGYsIDB4ODksIDB4MDEsIDB4MDgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MGMsCi0weDAwLCAweGQyLCAweDAwLCAweDI0LCAweDBjLCAweDQzLCAweDIwLCAweDFjLCAweGVjLCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4M2EsIDB4NGMsIDB4MjAsIDB4MWMsIDB4MDQsIDB4ZjAsIDB4MDcsIDB4ZmEsIDB4MzksIDB4NDgsCi0weGUzLCAweDIzLCAweDFiLCAweDAxLCAweGM3LCAweDE4LCAweGI5LCAweDc5LCAweDM3LCAweDRlLCAweGM1LCAweDFkLAotMHg3OSwgMHgzNSwgMHgwNiwgMHgyOSwgMHg2MiwgMHhkMiwgMHgwMiwgMHhhMywgMHg1YiwgMHg1YywgMHg1YiwgMHgwMCwKLTB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsIDB4MDMsIDB4MGUsIDB4MWUsIDB4MzcsIDB4NGUsIDB4NTUsIDB4MDEsIDB4MjAsCi0weGI4LCAweDcxLCAweDAwLCAweDIwLCAweGIwLCAweDYwLCAweGZmLCAweGY3LCAweDk1LCAweGZmLCAweDA1LCAweDIzLAotMHg5OCwgMHg0MywgMHgwMCwgMHhmMCwgMHg2ZiwgMHhmOCwgMHgwYywgMHhlMCwgMHhmZiwgMHhmNywgMHg4ZSwgMHhmZiwKLTB4YzAsIDB4MDgsIDB4MDYsIDB4ZDMsIDB4YjAsIDB4NjgsIDB4NDEsIDB4MWMsIDB4YjEsIDB4NjAsIDB4MGEsIDB4MjgsCi0weDAzLCAweGQ5LCAweDA0LCAweDIwLCAweDAwLCAweGUwLCAweDAyLCAweDIwLCAweGI4LCAweDcxLCAweDY0LCAweDIyLAotMHgyMCwgMHgxYywgMHgyYiwgMHhlMCwgMHgwNiwgMHgxYywgMHhjMCwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MjAsIDB4YjgsIDB4NzEsIDB4MjAsIDB4MWMsIDB4MjAsIDB4NGEsCi0weDAwLCAweDIxLCAweDA0LCAweGYwLCAweDk5LCAweGY5LCAweGYwLCAweDZmLCAweDA0LCAweDIzLCAweDAxLCAweDY4LAotMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgyOCwgMHg2OCwgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4MjEsIDB4YjksIDB4NzEsIDB4MjksIDB4NjgsCi0weDA0LCAweDIzLCAweDBhLCAweDY4LCAweDlhLCAweDQzLCAweDBhLCAweDYwLCAweGMwLCAweDZmLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmZiwgMHhmNywgMHg1YSwgMHhmZiwgMHgwOCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MjAsIDB4MWMsIDB4MTAsIDB4NGEsIDB4MDAsIDB4MjEsIDB4MDQsIDB4ZjAsCi0weDc3LCAweGY5LCAweGU1LCAweGU3LCAweGZmLCAweGY3LCAweDRlLCAweGZmLCAweDA0LCAweDIzLCAweDE4LCAweDQzLAotMHgwMCwgMHhmMCwgMHgyOCwgMHhmOCwgMHhkZSwgMHhlNywgMHgwMCwgMHgyMCwgMHgyOSwgMHg2OCwgMHg2MCwgMHgyMywKLTB4MGEsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmEsIDB4ZDUsIDB4ZTcsCi0weDA2LCAweDIwLCAweGI4LCAweDcxLCAweGQyLCAweGU3LCAweDAwLCAweDAwLCAweGE5LCAweDc5LCAweDIxLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5YywgMHgwMywgMHgwMCwgMHg4MCwgMHgzMCwgMHg3NSwgMHgwMCwgMHgwMCwKLTB4MTAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MjAsCi0weDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDcxLCAweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwNCwgMHhmMCwgMHg0ZSwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YTksIDB4NzksIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MzEsIDB4NDgsIDB4MDAsIDB4NjgsCi0weDc5LCAweDA4LCAweDAzLCAweGQzLCAweDEwLCAweDIzLCAweDAxLCAweDFjLCAweDk5LCAweDQzLCAweDAxLCAweGUwLAotMHgxMCwgMHgyMSwgMHgwMSwgMHg0MywgMHgyZCwgMHg0YywgMHhlMiwgMHg2OCwgMHgwMSwgMHgyYSwgMHgwNSwgMHhkMSwKLTB4MjIsIDB4NzksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTksIDB4NDMsCi0weDgxLCAweDQyLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweDAxLCAweDYwLCAweGUwLCAweDY4LAotMHgwMSwgMHgyOCwgMHgyMCwgMHhkMSwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlMCwgMHgxOCwgMHg4MCwgMHg4YiwKLTB4ZjksIDB4MDgsIDB4MDQsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4MDEsIDB4MWMsIDB4OTksIDB4NDMsCi0weDAxLCAweGUwLCAweDAxLCAweDIxLCAweGM5LCAweDAyLCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHgxYSwgMHhmYiwgMHgzOCwgMHgwOSwgMHgwNywgMHhkMywgMHhlMCwgMHg2ZiwgMHg4MCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZTAsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MDAsIDB4ZTAsCi0weGUwLCAweDZmLCAweDgwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDE1LCAweDQ4LAotMHgwMSwgMHg2YSwgMHg3OCwgMHgwOSwgMHgwMywgMHhkMywgMHhmZiwgMHgyMCwgMHgwMSwgMHgzMCwgMHgwOCwgMHg0MywKLTB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDgsIDB4MWMsIDB4MDEsIDB4MzMsIDB4OTgsIDB4NDMsIDB4ODAsIDB4MDgsCi0weDgwLCAweDAwLCAweGJhLCAweDA5LCAweDkyLCAweDA3LCAweDkyLCAweDBmLCAweDEwLCAweDQzLCAweDg4LCAweDQyLAotMHgwMiwgMHhkMCwgMHgwYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwgMHhlMSwgMHg2OCwgMHgwMSwgMHgyOSwKLTB4MDgsIDB4ZDEsIDB4NzksIDB4MGEsIDB4MDYsIDB4ZDMsIDB4ZmYsIDB4MjMsIDB4MDQsIDB4MzMsIDB4MTgsIDB4NDAsCi0weDAzLCAweDI4LCAweDAxLCAweGQxLCAweGZmLCAweGY3LCAweDhlLCAweGZmLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsCi0weGIxLCAweGZlLCAweDgwLCAweDA5LCAweDFiLCAweGQyLCAweDBmLCAweDQ4LCAweGUzLCAweDIzLCAweDFiLCAweDAxLAotMHhjMSwgMHgxOCwgMHg0YSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgxNCwgMHhkMSwgMHgwMSwgMHgyMiwgMHg0YSwgMHg3MSwKLTB4MDAsIDB4MjcsIDB4ODAsIDB4MzAsIDB4MDAsIDB4NjgsIDB4NjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsCi0weDAxLCAweDYwLCAweDA4LCAweDQ4LCAweDA2LCAweGUwLCAweDAyLCAweDIwLCAweDAyLCAweGYwLCAweDhjLCAweGZjLAotMHgwNywgMHgyMCwgMHgwMiwgMHhmMCwgMHg1YiwgMHhmYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgzNiwgMHhmYSwKLTB4ZjUsIDB4ZTcsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHgzNywgMHhmYywgMHhmZiwgMHhmNywgMHg4NSwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHgwOCwgMHg0OCwKLTB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDcsIDB4NDgsIDB4MDAsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDY3LCAweGZiLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweDE3LCAweGZjLCAweGY4LCAweDg4LCAweGZmLCAweGY3LCAweDQyLCAweGZmLAotMHhmZiwgMHhmNywgMHg2MiwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGIwLCAweGI1LCAweGM2LCAweGIwLCAweGM3LCAweDg4LCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHgwMSwgMHhmYywgMHgwMSwgMHgyNCwgMHgxYSwgMHg0YiwgMHg5ZiwgMHg0MiwgMHgwYSwgMHhkOSwgMHgwMCwgMHhhOCwKLTB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsCi0weGQ4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDIwLCAweGUwLCAweDE0LCAweDQ4LCAweGZmLCAweGY3LAotMHhlMSwgMHhmOSwgMHgwNSwgMHgxYywgMHgxMywgMHg0YSwgMHgzOCwgMHgxYywgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywKLTB4ZGQsIDB4ZjksIDB4MTIsIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDgsIDB4ZjksIDB4MDEsIDB4MmYsCi0weDA2LCAweGQxLCAweDBjLCAweGE5LCAweDAwLCAweDIwLCAweDAwLCAweDIyLAotMHgwYSwgMHg2MCwgMHgwMSwgMHgzMCwgMHgxMCwgMHgyOCwgMHhmYiwgMHhkMywgMHgxMCwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4NTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDUsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDA2LCAweGE5LCAweGZmLCAweGY3LCAweDBmLCAweGZiLCAweDIwLCAweDFjLAotMHg0NiwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmZiwgMHgwMSwgMHgwMCwgMHgwMCwKLTB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhiYiwgMHhmYiwgMHhmYywgMHg4OCwgMHg3OCwgMHg3OCwgMHgwMSwgMHgyNSwgMHgxMCwgMHgyOCwgMHgwMSwgMHhkMSwKLTB4MTksIDB4MmMsIDB4MDksIDB4ZDksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDA0LCAweDMzLCAweDI3LCAweGUwLAotMHhiOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MCwgMHhmOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MCwKLTB4MDYsIDB4YWEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIDB4MDAsIDB4MjEsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MjgsCi0weDBkLCAweGRkLCAweDAwLCAweDIwLCAweDQwLCAweGNiLCAweDQwLCAweGMyLCAweDAxLCAweDMwLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwNCwgMHgyOCwgMHhmOCwgMHhkYiwgMHg0OCwgMHgxYywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4NzgsIDB4NzgsIDB4ODgsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MGIsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4N2UsIDB4ZjksCi0weDA3LCAweDFjLCAweDBhLCAweDRhLCAweDIwLCAweDFjLCAweDA0LCAweGE5LCAweGZmLCAweGY3LCAweDdhLCAweGY5LAotMHgwOCwgMHg0OSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg3NSwgMHhmOSwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4YmUsIDB4ZmEsIDB4MjgsIDB4MWMsIDB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweGM1LCAweGFmLCAweDIxLCAweDQwLAotMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwMCwgMHgyNywKLTB4ZTYsIDB4ODgsIDB4YTIsIDB4NjgsIDB4NDcsIDB4NDksIDB4MDgsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDAsCi0weDAwLCAweDJlLCAweDAxLCAweGQwLCAweDAxLCAweDJlLCAweDAxLCAweGQxLCAweDAxLCAweDI3LCAweDAxLCAweGUwLAotMHgwNCwgMHgyZSwgMHgwMCwgMHhkMSwgMHgwMywgMHgyNiwgMHgwMSwgMHgyNSwgMHg0MSwgMHg0OCwgMHgwNSwgMHgyZSwKLTB4NjYsIDB4ZDIsIDB4MDIsIDB4YTMsIDB4OWIsIDB4NWQsIDB4NWIsIDB4MDAsIDB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsCi0weDAzLCAweDA2LCAweDA4LCAweDBjLCAweDEwLCAweDAwLCAweDA1LCAweDgwLCAweDAwLCAweDIzLCAweDAzLCAweGUwLAotMHgwNSwgMHg4MCwgMHgwNSwgMHhlMCwgMHgwMCwgMHgyMywgMHgwMywgMHg4MCwgMHg0MywgMHg4MCwgMHgwNiwgMHhlMCwKLTB4MDAsIDB4MjMsIDB4MDMsIDB4ODAsIDB4NDUsIDB4ODAsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsCi0weDAzLCAweDgwLCAweGNiLCAweDFkLCAweDc5LCAweDMzLCAweDllLCAweDg5LCAweDAxLCAweDIzLCAweDViLCAweDAyLAotMHg5ZSwgMHg0MiwgMHgwMiwgMHhkYiwgMHhkMiwgMHgwNywgMHhkMiwgMHgwZiwgMHgwMCwgMHhlMCwgMHgwMSwgMHgyMiwKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4ODksIDB4ODgsIDB4ZmYsIDB4MjMsIDB4ZTEsIDB4MzMsCi0weDk5LCAweDQzLCAweDAxLCAweDIzLCAweDE5LCAweDQzLCAweDA2LCAweDg4LCAweGZmLCAweDMzLCAweDllLCAweDQyLAotMHgwZCwgMHhkMSwgMHhmZiwgMHgyMCwgMHhlMSwgMHgzMCwgMHgwOCwgMHg0MywgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MjAsIDB4ZTAsIDB4MDEsIDB4MjEsCi0weDg5LCAweDAyLCAweDAxLCAweDQzLCAweDFjLCAweGUwLCAweDAxLCAweDJlLCAweDBhLCAweGQxLCAweDQwLCAweDg4LAotMHgwMSwgMHgyOCwgMHgwNCwgMHhkMSwgMHg2MCwgMHgyMywgMHgxOSwgMHg0MywgMHgwMCwgMHgyYSwgMHgxMywgMHhkMCwKLTB4MGMsIDB4ZTAsIDB4MjAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MGYsIDB4ZTAsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZDEsCi0weDQwLCAweDg4LCAweDAxLCAweDI4LCAweDA4LCAweGQxLCAweGZmLCAweDIzLCAweDgxLCAweDMzLCAweDE5LCAweDQzLAotMHgwMCwgMHgyYSwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOSwgMHg0MywgMHgwMSwgMHhlMCwKLTB4ODAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDksIDB4MjEsCi0weDQ5LCAweDAyLCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDcwLCAweGY5LCAweDAwLCAweDJmLCAweDAyLCAweGQxLAotMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhmZiwgMHhlNywgMHg2OSwgMHg0NiwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsCi0weDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDA0LCAweDMzLAotMHhmZiwgMHhmNywgMHgyMiwgMHhmYSwgMHgyOCwgMHgxYywgMHgwNCwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDg4LCAweDFjLCAweDAwLCAweDgwLCAweGMwLCAweDg4LCAweDUxLCAweDIxLCAweDg5LCAweDAzLCAweDA4LCAweDYyLAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHgxNiwgMHg0ZiwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwKLTB4MDcsIDB4ZDEsIDB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4NDAsIDB4OGEsIDB4ODAsIDB4MjEsCi0weDAxLCAweDQzLCAweDFiLCAweDIwLCAweDA3LCAweGUwLCAweDZkLCAweDIzLCAweDViLCAweDAxLCAweGY4LCAweDE4LAotMHg4MCwgMHg4YiwgMHgwMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMSwgMHg0MywgMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwKLTB4MzMsIDB4ZjksIDB4MDEsIDB4MjAsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4MDgsIDB4ODAsCi0weDQ4LCAweDgwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGY4LCAweDE4LCAweDgwLCAweDhiLCAweDAxLCAweDIzLAotMHgxYiwgMHgwMywgMHg5OCwgMHg0MywgMHg0MSwgMHgyMSwgMHgwOSwgMHgwMiwgMHgwMSwgMHg0MywgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDE3LCAweDRmLCAweGY4LCAweDY4LCAweDAxLCAweDI4LAotMHgwOCwgMHhkMSwgMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg0MCwgMHg4YSwgMHg4MCwgMHgyMywKLTB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MWIsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGY4LCAweDE4LCAweDgwLCAweDhiLCAweDAxLCAweDIzLCAweDViLCAweDAzLCAweDk4LCAweDQzLCAweDAxLCAweDFjLAotMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHgwMSwgMHhmOSwgMHhmZiwgMHgyMCwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwKLTB4ZjksIDB4MTgsIDB4MDEsIDB4MzAsIDB4MDgsIDB4ODAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjgsIDB4MTgsCi0weDgwLCAweDhiLCAweDQxLCAweDIzLCAweDFiLCAweDAyLCAweDk4LCAweDQzLCAweDA5LCAweDIxLCAweDQ5LCAweDAyLAotMHgwMSwgMHg0MywgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhlZSwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA4LCAweDQ5LCAweGNmLCAweDZhLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDY5LCAweGZhLCAweGI4LCAweDA1LAotMHg4MCwgMHgwZCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4YTEsIDB4ZjksIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDQwLCAweGMwLCAweDg4LCAweDlmLCAweDIzLCAweDE4LCAweDQwLCAweDA1LCAweDQ5LAotMHhjOSwgMHg2YSwgMHgxYiwgMHgyMywgMHg1YiwgMHgwMSwgMHgxOSwgMHg0MCwgMHgwOCwgMHg0MywgMHgwMywgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDQwLCAweDAwLCAweDE0LCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDBkLCAweDQ5LCAweDBmLCAweDZhLAotMHgwMSwgMHgyZiwgMHgwMSwgMHhkMSwgMHhmZiwgMHgwMywgMHgwNywgMHhlMCwgMHgwMiwgMHgyZiwgMHgwMSwgMHhkMSwKLTB4M2YsIDB4MDMsIDB4MDMsIDB4ZTAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4ZmYsIDB4MDIsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDM1LCAweGZhLCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg2ZiwgMHhmOSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NDAsIDB4YzIsIDB4ODgsIDB4YTEsIDB4MjAsCi0weDQwLCAweDAzLCAweDAwLCAweDIxLCAweDAxLCAweDIzLCAweDViLCAweDAzLCAweDlhLCAweDQyLCAweDAxLCAweGQxLAotMHgwMiwgMHgyMiwgMHgwNCwgMHhlMCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg5YSwgMHg0MiwgMHgwMiwgMHhkMSwKLTB4MDEsIDB4MjIsIDB4MDIsIDB4NjIsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4NjIsIDB4MDgsIDB4MWMsIDB4NzAsIDB4NDcsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDAyLCAweGYwLCAweDlmLCAweGY4LCAweDY5LCAweDQ2LAotMHgwNCwgMHgxYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgwYSwgMHhmYSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwKLTB4MDksIDB4NGYsIDB4ZjgsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDQwLCAweGY5LCAweGY4LCAweDZkLCAweGMwLCAweDA3LCAweGMwLCAweDBmLCAweDA1LCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4ZTMsIDB4ZjksIDB4MDYsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDFiLCAweGY5LCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweDg3LCAweDY4LAotMHhmZiwgMHhmNywgMHhjNiwgMHhmOSwgMHgyMCwgMHgyZiwgMHgwNywgMHhkMiwgMHg3OCwgMHgwMCwgMHgwYywgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDYsIDB4ZTAsCi0weDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLAotMHgwMiwgMHgyMCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweGMxLCAweDg4LCAweDgyLCAweDY4LAotMHgyMCwgMHgyYSwgMHgwNCwgMHhkMiwgMHgxMCwgMHgxYywgMHgwMiwgMHhmMCwgMHgxNywgMHhmOCwgMHgwMCwgMHgyMCwKLTB4MTAsIDB4ZTAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4OWEsIDB4ZjksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsCi0weDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgwNCwgMHgzMywgMHhmZiwgMHhmNywgMHhjZCwgMHhmOCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzcsIDB4ODgsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDgzLCAweGY5LCAweDEwLCAweDQ4LCAweGZlLCAweGY3LCAweDcyLCAweGZmLAotMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHgwMiwgMHhmMCwgMHhmMiwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNiwgMHhkMCwKLTB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MzYsIDB4ZmYsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsCi0weDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDA3LCAweDQ5LCAweDIwLCAweDFjLAotMHhmZSwgMHhmNywgMHg1ZiwgMHhmZiwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHhhOCwgMHhmOCwKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDI0LCAweDAyLCAweGZmLCAweGZmLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweGIwLCAweGI1LCAweDg0LCAweGIwLAotMHhjNywgMHg4OCwgMHg2OSwgMHg0NiwgMHg4NCwgMHg2OCwgMHhmZiwgMHhmNywgMHg1NywgMHhmOSwgMHgxMCwgMHg0OCwKLTB4ZmUsIDB4ZjcsIDB4NDYsIDB4ZmYsIDB4MGYsIDB4NGEsIDB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4ZmUsIDB4ZjcsCi0weDQzLCAweGZmLCAweDAwLCAweDI4LCAweDA2LCAweGQwLCAweDBkLCAweDRiLCAweDAyLCAweDIwLCAweDM5LCAweDFjLAotMHgyMiwgMHgxYywgMHhmZSwgMHhmNywgMHgzYywgMHhmZiwgMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4MzIsIDB4ZmYsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDdiLCAweGY4LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg1OSwgMHhiMSwgMHgyMSwgMHg0MCwKLTB4NTksIDB4YjAsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsCi0weDQzLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LAotMHhjMiwgMHg4OCwgMHgxOSwgMHg0YiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMCwgMHgyYSwgMHgwMywgMHhkMSwKLTB4MTgsIDB4NmIsIDB4MTAsIDB4MjMsIDB4OTgsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MmEsIDB4MDQsIDB4ZDEsCi0weDE4LCAweDZiLCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDQ4LCAweDYxLCAweDFmLCAweGUwLCAweDAyLCAweDJhLAotMHgxZCwgMHhkMSwgMHhjMiwgMHg2OCwgMHg4NywgMHg2OCwgMHgwMCwgMHgyMCwgMHgzYiwgMHgxYywgMHhjMywgMHg0MCwKLTB4ZGIsIDB4MDcsIDB4ZGIsIDB4MGYsIDB4OWIsIDB4MDIsIDB4MDMsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDIwLCAweDI4LCAweGYzLCAweGRiLCAweDAwLCAweDIwLCAweDEzLCAweDFjLAotMHhjMywgMHg0MCwgMHhkYiwgMHgwNywgMHhkYiwgMHgwZiwgMHg5YiwgMHgwMiwgMHhjNywgMHgxZCwgMHgxOSwgMHgzNywKLTB4M2IsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MjAsIDB4MjgsCi0weGYxLCAweGRiLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHg4MCwgMHhiNCwgMHhjMiwgMHg4OCwgMHg4MSwgMHg2OCwgMHgxMCwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMCwgMHg0MywKLTB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjAsIDB4MGMsIDB4NGIsCi0weGMwLCAweDQ2LCAweDFhLCAweDgwLCAweDBhLCAweDBjLCAweDE3LCAweDAyLAotMHgxMiwgMHgxMiwgMHgzYSwgMHg0MywgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg0MiwgMHg2MCwgMHg1YSwgMHg4MCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4MDIsIDB4MDksIDB4MGEsIDB4MTEsIDB4NDMsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDgxLCAweDYwLCAweDk5LCAweDgwLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MTMsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTMsIDB4MDIsIDB4MTIsIDB4MTIsCi0weDEzLCAweDQzLCAweDRhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDFmLCAweDFjLCAweDEzLCAweDAyLAotMHgxMiwgMHgxMiwgMHgxMywgMHg0MywgMHg4OSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHgwMiwKLTB4MDksIDB4MTIsIDB4MTEsIDB4NDMsIDB4MGMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4NjksIDB4NDYsIDB4MWQsIDB4MWMsCi0weGZmLCAweGY3LCAweGFlLCAweGY4LCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDI4LCAweDA0LCAweDIwLCAweDQzLAotMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhlNSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMxLCAweDg4LCAweDgyLCAweDY4LCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgxMCwgMHgwYywgMHgwMywgMHgwMiwKLTB4MDAsIDB4MTIsIDB4MTgsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4NjEsIDB4MTAsIDB4MDQsCi0weDAwLCAweDBjLCAweDAyLCAweDAyLCAweDAwLCAweDBhLCAweDEwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHg0OCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTYsIDB4NGIsIDB4ZDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsCi0weDBhLCAweDAyLCAweDA5LCAweDEyLCAweDExLCAweDQzLCAweDFhLCAweDY5LCAweDEyLCAweDA0LCAweDEyLCAweDBjLAotMHgxNywgMHgwMiwgMHgxMiwgMHgxMiwgMHgzYSwgMHg0MywgMHg1YiwgMHg2OSwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywKLTB4MWYsIDB4MDIsIDB4MWIsIDB4MTIsIDB4M2IsIDB4NDMsIDB4MWYsIDB4MDQsIDB4M2YsIDB4MGMsIDB4MDUsIDB4MjMsCi0weDAwLCAweDkzLCAweDg0LCAweDg4LCAweDAxLCAweGFiLCAweDFjLCAweDgwLCAweDAwLCAweDI0LCAweDA0LCAweDNiLAotMHg1YywgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkOSwgMHg4MCwgMHgxMCwgMHgwNCwKLTB4MzgsIDB4NDMsIDB4MDIsIDB4OTAsIDB4MDMsIDB4OTQsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDk1LCAweGZmLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYiwgMHg0OSwgMHg4YSwgMHg2YSwKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsCi0weDA0LCAweDNiLCAweDU5LCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGRhLCAweDgwLAotMHgwMiwgMHg5MSwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHhmZSwgMHhmNywgMHg3OSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYiwgMHg0OSwgMHgwYSwgMHg2YSwKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsCi0weDA0LCAweDNiLCAweDU5LCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGRhLCAweDgwLAotMHgwMiwgMHg5MSwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHhmZSwgMHhmNywgMHg1NSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhmZSwgMHhmNywKLTB4ZjQsIDB4ZmQsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzUsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGY3LCAweGZmLCAweDA2LCAweDQ4LAotMHgwMCwgMHg2YiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4MmYsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGZkLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmOCwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZjMsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweDEwLCAweDQ4LCAweGZlLCAweGY3LCAweGM2LCAweGZkLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMSwKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NzEsIDB4MGMsIDB4NDgsIDB4MDIsIDB4NjgsIDB4NTIsIDB4MGMsCi0weDA1LCAweGQyLCAweDAyLCAweDY4LCAweDEyLCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLAotMHgwMywgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhjNywgMHg2MCwgMHgwMiwgMHhlMCwgMHgwNywgMHg0OCwKLTB4YzAsIDB4NDYsIDB4MDcsIDB4NjQsIDB4MDgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGQ1LCAweDk0LCAweDIxLCAweDQwLCAweDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMCwKLTB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4Y2IsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDg4LCAweDFjLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIwLAotMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MiwgMHgxNSwgMHgyMCwgMHhmZiwgMHhmNywgMHhiZiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4ZjAsCi0weGY5LCAweGZmLCAweDAxLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwNywgMHgxYywgMHhmOCwgMHg4OCwgMHgwMiwgMHhmMCwgMHhmZSwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwKLTB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4ODIsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweGJiLCAweGZlLCAweDAxLCAweDIwLAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsCi0weDZkLCAweGZmLCAweDAxLCAweDI3LCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDA5LCAweDQ4LCAweDgxLCAweDg5LAotMHgwOSwgMHgwNCwgMHhjMiwgMHg4OSwgMHgxMSwgMHg0MywgMHgwMiwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwOSwgMHgwNCwKLTB4YzAsIDB4ODgsIDB4MDgsIDB4NDMsIDB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDliLCAweGZlLCAweDM4LCAweDFjLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg2OSwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NjQsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweDVmLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHg1YSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4NTUsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NTAsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDRiLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0NiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NDEsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweDNjLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHgzNywgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHgzMiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDgsIDB4YTksIDB4ZmUsIDB4ZjcsCi0weDEzLCAweGZmLCAweDY5LCAweDQ2LCAweDA4LCAweGE4LCAweDAyLCAweGYwLCAweGE5LCAweGZmLCAweDAyLCAweDIwLAotMHgwOCwgMHhhYiwgMHg1OCwgMHg3MCwgMHg2OSwgMHg0NiwgMHgwOCwgMHhhOCwgMHhmZSwgMHhmNywgMHg0OCwgMHhmZSwKLTB4MDEsIDB4MjAsIDB4MGMsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weDE5LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLAotMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHhmOCwgMHhmZSwgMHhmYSwgMHg4OCwgMHgxMiwgMHg0OSwKLTB4MDEsIDB4MjQsIDB4YzgsIDB4MWQsIDB4ODksIDB4MzAsIDB4MDAsIDB4MmEsIDB4MGYsIDB4ZDAsIDB4MDQsIDB4NzAsCi0weDQ0LCAweDcwLCAweGI4LCAweDY4LCAweDAwLCAweDBjLCAweDgwLCAweDMxLCAweGM4LCAweDgyLCAweGI4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MywgMHhmOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg0OCwgMHg4MywgMHhmOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ODgsIDB4ODMsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjEsCi0weDAxLCAweDcwLCAweDQxLCAweDcwLCAweDA2LCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgxNywgMHhmZSwgMHgyMCwgMHgxYywgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweGUzLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHhkZSwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4ZDksIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZDQsIDB4ZmUsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGNmLCAweGZlLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywKLTB4ZmUsIDB4ZjcsIDB4YWUsIDB4ZmUsIDB4ZjgsIDB4ODgsIDB4MDMsIDB4MjQsIDB4ZTQsIDB4MDQsIDB4MDQsIDB4NDMsCi0weDAzLCAweDIzLCAweGRiLCAweDA0LCAweDljLCAweDQyLCAweDAyLCAweGQzLCAweDBmLCAweDRiLCAweDljLCAweDQyLAotMHgwNiwgMHhkOSwgMHgwZiwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmUsIDB4ZjcsIDB4ZGMsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDcsIDB4MjAsIDB4NDMsIDB4MDAsIDB4NjgsCi0weDAwLCAweDIxLCAweDAwLCAweGFiLCAweDU5LCAweDcwLCAweGZhLCAweDg4LCAweGMwLCAweDQ2LCAweGRhLCAweDgwLAotMHgwMiwgMHg5MCwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHgwNCwgMHgzMywgMHhmZSwgMHhmNywgMHhjYywgMHhmZCwKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGUwLCAweDAwLCAweDE4LCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHg3YiwgMHhmZSwgMHhmOCwgMHg4OCwKLTB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MTgsIDB4NDMsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4MGEsIDB4NGIsCi0weDk4LCAweDQyLCAweDA4LCAweGQ5LCAweDA5LCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhhYiwgMHhmZCwgMHgwMSwgMHgyMCwgMHgwMywgMHhlMCwgMHhiOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDE4LCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg4MCwgMHhiNSwgMHg4NiwgMHhiMCwgMHgwMiwgMHhhOSwgMHhmZSwgMHhmNywgMHg1NywgMHhmZSwgMHgwMSwgMHgyNywKLTB4MDIsIDB4YWIsIDB4NWYsIDB4NzAsIDB4MDAsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MGEsIDB4NDgsIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA0LCAweDkxLCAweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkxLCAweGMxLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MCwgMHg2OSwgMHg0NiwKLTB4MDIsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4ODEsIDB4ZmQsIDB4MzgsIDB4MWMsIDB4MDYsIDB4YjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGMxLCAweDY4LAotMHg4MCwgMHg2OCwgMHhmZSwgMHhmNywgMHg0NywgMHhmYiwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsCi0weDY4LCAweDQ2LCAweDUwLCAweDIxLCAweGZlLCAweGY3LCAweDM2LCAweGZlLCAweDAxLCAweGFiLCAweDVjLCAweDgwLAotMHgwMiwgMHg5NywgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHg2MSwgMHhmZCwgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsCi0weDY4LCAweDQ2LCAweDUxLCAweDIxLCAweGZlLCAweGY3LCAweDI0LCAweGZlLCAweDAxLCAweGFiLCAweDVmLCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHg1MCwgMHhmZCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDAwLCAweDI3LCAweDEyLCAweDQ5LCAweDA5LCAweDY4LCAweDEyLCAweDRhLAotMHgxMiwgMHg2YiwgMHgxMCwgMHgyMywgMHgxYSwgMHg0MCwgMHgwMSwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwMCwgMHhkMCwKLTB4MDEsIDB4MjcsIDB4OGEsIDB4MGMsIDB4MDMsIDB4ZDMsIDB4M2EsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDIsIDB4MjcsCi0weDE3LCAweDQzLCAweGM5LCAweDBjLCAweDAzLCAweGQzLCAweDM5LCAweDA0LCAweDA5LCAweDBjLCAweDA0LCAweDI3LAotMHgwZiwgMHg0MywgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhlYywgMHhmZCwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwKLTB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MjYsIDB4ZmQsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZDcsIDB4ZmQsIDB4MDYsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDBmLCAweGZkLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZGQsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4Y2IsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDgwLCAweGI1LCAweDg1LCAweGIwLCAweDAxLCAweGE5LCAweGZlLCAweGY3LCAweGFiLCAweGZkLCAweDAwLCAweDIwLAotMHgwMSwgMHhhYiwgMHg1OCwgMHg3MCwgMHgwYywgMHg0OSwgMHhjOSwgMHg2OCwgMHgwMSwgMHgyNywgMHgwMSwgMHgyOSwKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTcsIDB4MDEsIDB4ZTAsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTAsCi0weDY4LCAweDQ2LCAweDAxLCAweGYwLCAweDMzLCAweGZkLCAweDAyLCAweGFiLCAweDAwLCAweDk4LCAweGMwLCAweDQ2LAotMHg1OCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgwMSwgMHhhOCwgMHhmZSwgMHhmNywgMHhkMywgMHhmYywgMHgzOCwgMHgxYywKLTB4MDUsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDA0LCAweDQ5LCAweDAwLCAweDIwLCAweDAwLCAweDIyLCAweDBhLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHg2OCwgMHgyOCwgMHhmYSwgMHhkMywgMHg3MCwgMHg0NywgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MjIsIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDMsIDB4NDAsIDB4MWEsIDB4MDEsIDB4MzIsIDB4ODgsIDB4NDIsCi0weGZiLCAweGQyLCAweDEwLCAweDFjLCAweDcwLCAweDQ3LCAweDg4LCAweDQyLCAweDAyLCAweGQzLCAweDQwLCAweDFhLAotMHg4OCwgMHg0MiwgMHhmYywgMHhkMiwgMHg3MCwgMHg0NywgMHg5MCwgMHhiNCwgMHgwMSwgMHgxYywgMHhmZiwgMHgyNywKLTB4MDQsIDB4MjksIDB4MjcsIDB4ZGEsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NGEsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsCi0weGRiLCAweDAwLCAweGQ0LCAweDU4LCAweDYzLCAweDBjLCAweDFhLCAweGQyLCAweDRiLCAweDAwLCAweDU5LCAweDE4LAotMHhjOSwgMHgwMCwgMHg1NywgMHg1OCwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwgMHhkYiwgMHgwMCwgMHhkNywgMHg1MCwKLTB4ODksIDB4MTgsIDB4OWEsIDB4MTgsIDB4NGYsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NjAsIDB4OGIsIDB4NjgsCi0weGMwLCAweDQ2LCAweDkzLCAweDYwLCAweDBiLCAweDY5LCAweGMwLCAweDQ2LCAweDEzLCAweDYxLCAweDRiLCAweDY5LAotMHhjMCwgMHg0NiwgMHg1MywgMHg2MSwgMHhjOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMSwgMHg2MCwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDQsIDB4MjgsIDB4ZDksIDB4ZGIsCi0weDM4LCAweDFjLCAweGY2LCAweGU3LCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweGY3LCAweGI1LCAweGM0LCAweGIwLAotMHgwNCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0NiwgMHg5YSwgMHgxMSwgMHgyMSwgMHgxMSwgMHg0MCwgMHg2ZSwgMHhkMCwKLTB4MDAsIDB4MjcsIDB4NzksIDB4MDAsIDB4YzksIDB4MTksIDB4YzksIDB4MDAsIDB4NTcsIDB4NGEsIDB4NTEsIDB4NTgsCi0weDQ5LCAweDBjLCAweDAzLCAweGQyLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA0LCAweGUwLAotMHg3OSwgMHgxYywgMHgwZiwgMHgwNiwgMHgzZiwgMHgwZSwgMHgwNCwgMHgyZiwgMHhlZiwgMHhkYiwgMHgwMCwgMHgyOCwKLTB4NWIsIDB4ZDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MjEsCi0weDAwLCAweDIwLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDg4LCAweGZhLCAweDA0LCAweGE5LCAweDAwLCAweDIwLAotMHg4MiwgMHgwMCwgMHg4YSwgMHg1OCwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHhhMiwgMHg0MiwgMHgwMywgMHhkMSwKLTB4NzIsIDB4MWMsIDB4MTYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDEwLCAweDI4LCAweGYwLCAweGRiLCAweDAwLCAweDJlLCAweDNkLCAweGQwLCAweDA0LCAweDJjLAotMHgzZSwgMHhkMSwgMHg4MCwgMHgwMCwgMHgwOCwgMHg1OCwgMHg0MCwgMHgwMSwgMHg4MCwgMHgwZCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4OTIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmEsCi0weDAwLCAweDIxLCAweDAxLCAweDkxLCAweDAyLCAweGE4LCAweDA1LCAweDk5LCAweDQ5LCAweDBjLCAweDg5LCAweDA1LAotMHgyOSwgMHhkMCwgMHhjMSwgMHg2OCwgMHgwYSwgMHgwNiwgMHgxMiwgMHgwZSwgMHg0NSwgMHg5YiwgMHg5YSwgMHg0MiwKLTB4MTEsIDB4ZDEsIDB4YzAsIDB4NjgsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDUwLCAweGZhLAotMHgwMSwgMHg5OSwgMHgwMiwgMHg5ZCwgMHg0OCwgMHgxYywgMHgwMSwgMHgwNiwKLTB4MDksIDB4MGUsIDB4MDEsIDB4OTEsIDB4MGUsIDB4ZTAsIDB4NDgsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDkyLCAweDEwLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLAotMHgzZiwgMHhmYSwgMHgwMiwgMHhhOCwgMHgwNSwgMHg5OSwgMHg0OSwgMHgwYywgMHg4OSwgMHgwNSwgMHhkOCwgMHhkMSwKLTB4MDEsIDB4OTksIDB4MDAsIDB4MjksIDB4MGYsIDB4ZDEsIDB4ZmYsIDB4MjAsIDB4M2QsIDB4ZTAsIDB4NDAsIDB4ZTAsCi0weDgwLCAweDAwLCAweDA4LCAweDU4LCAweDQwLCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLCAweDAwLCAweDkyLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHgyOCwgMHhmYSwKLTB4MDIsIDB4OWQsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDQsIDB4NDYsIDB4OWEsIDB4MTAsIDB4NDMsIDB4NzksIDB4MDAsCi0weGM5LCAweDE5LCAweGM5LCAweDAwLCAweDE3LCAweDRhLCAweGMwLCAweDQ2LCAweDUwLCAweDUwLCAweDMwLCAweDFjLAotMHg4ZSwgMHgxOCwgMHg3MCwgMHg2MCwgMHgxMCwgMHgyMCwgMHgwNCwgMHgyYywgMHgwMCwgMHhkMCwgMHgwYywgMHgyMCwKLTB4MDQsIDB4MWMsIDB4YjAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MjAsIDB4MjEsIDB4NDYsIDB4OWEsIDB4MTEsIDB4NDAsCi0weDIwLCAweDI5LCAweDAwLCAweGQwLCAweDI4LCAweDFjLCAweDMwLCAweDYxLCAweDI4LCAweDE5LCAweGZmLCAweDIxLAotMHhmZiwgMHgzMCwgMHgwOCwgMHgzMCwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHgxOSwgMHhmZiwgMHg0MywgMHgwMSwKLTB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NzAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NTAsIDB4MjEsCi0weDQ2LCAweDlhLCAweDExLCAweDQwLCAweDUwLCAweDI5LCAweDAwLCAweGQxLCAweDI4LCAweDFjLCAweGYwLCAweDYwLAotMHgzOCwgMHgxYywgMHg0NywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmZiwgMHgyMCwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4YjQsIDB4MDAsIDB4MjMsCi0weDAwLCAweDIyLCAweDAwLCAweDI5LCAweDA2LCAweGQ5LCAweDg3LCAweDVjLCAweDdiLCAweDQwLCAweDFiLCAweDA2LAotMHgxYiwgMHgwZSwgMHgwMSwgMHgzMiwgMHg4YSwgMHg0MiwgMHhmOCwgMHhkMywgMHhkOCwgMHg0MywgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDQsIDB4MjgsCi0weDA3LCAweGRhLCAweDQxLCAweDAwLCAweDA5LCAweDE4LCAweGM5LCAweDAwLCAweDQ1LCAweDkxLCAweDQxLCAweDRhLAotMHg1MSwgMHg1OCwgMHg0YiwgMHgwYywgMHgwMiwgMHhkMiwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHg3NiwgMHhlMCwKLTB4MDEsIDB4MjMsIDB4NWIsIDB4MDQsIDB4MTksIDB4NDAsIDB4NDMsIDB4MDAsIDB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsCi0weDNhLCAweDRhLCAweDE0LCAweDE4LCAweDAwLCAweDI5LCAweDYxLCAweGQwLCAweDAwLCAweDIxLCAweDAyLCAweDkxLAotMHgyMCwgMHg2OSwgMHhhMSwgMHg2OCwgMHg0NSwgMHgxOCwgMHgzMCwgMHhkMCwgMHhmZiwgMHgyMSwgMHg2OCwgMHgxZSwKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZmUsIDB4NjEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4OTAsCi0weDAxLCAweDk4LCAweDgxLCAweDQyLCAweDAyLCAweGQxLCAweGE2LCAweDY4LCAweGFmLCAweDFiLCAweDA5LCAweGUwLAotMHgwMCwgMHgyNiwgMHhmZiwgMHgyMSwgMHgyOCwgMHgxYywgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhjNywgMHhmZSwKLTB4MDcsIDB4MWMsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4MjcsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDAxLCAweDk4LCAweDMxLCAweDFjLCAweDAzLCAweGFhLCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweDllLCAweGY5LAotMHgwMywgMHhhOCwgMHgzOSwgMHgxYywgMHhmZiwgMHhmNywgMHhhYywgMHhmZiwgMHhjMCwgMHg0MywgMHgwMiwgMHg5OSwKLTB4NDgsIDB4NDAsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDIsIDB4OTEsIDB4ZWQsIDB4MWIsIDB4YTAsIDB4NjgsCi0weGE4LCAweDQyLCAweDAwLCAweGQxLCAweDAwLCAweDI1LCAweDAwLCAweDJkLCAweGNlLCAweGQ4LCAweDAyLCAweDk5LAotMHhjZiwgMHg0MywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHg2MCwgMHg2OCwKLTB4MDMsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4ZjksIDB4MjAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsCi0weDA1LCAweDk4LCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDM5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLAotMHgwNSwgMHg5MCwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwNSwgMHg5MCwgMHgwYywgMHgyMSwKLTB4MDMsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmYsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MDUsIDB4OTksCi0weDk5LCAweDQzLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDAwLCAweDAyLCAweDA4LCAweDQzLCAweDA1LCAweDkwLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHg2MCwgMHg2OCwgMHgwMywgMHhhYSwgMHgwMCwgMHhmMCwgMHhjYSwgMHhmOSwKLTB4MDAsIDB4MjAsIDB4NDUsIDB4OTksIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NTAsIDB4YzEsIDB4NDMsCi0weDYxLCAweDYwLCAweGExLCAweDYwLCAweGUxLCAweDYwLCAweDIxLCAweDYxLCAweDYxLCAweDYxLCAweDQ2LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4YjAsIDB4YjQsIDB4NGMsIDB4NDIsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZGIsCi0weDBjLCAweDFjLCAweDAwLCAweDI3LCAweGZmLCAweDQzLCAweDA0LCAweDI4LCAweDIxLCAweGRhLCAweDEyLCAweDRkLAotMHg0MywgMHgwMCwgMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgwMSwgMHgyYSwgMHgwNSwgMHhkMCwKLTB4MDIsIDB4MmEsIDB4MDksIDB4ZDAsIDB4MDMsIDB4MmEsIDB4MTYsIDB4ZDEsIDB4MDEsIDB4NjksIDB4MGIsIDB4ZTAsCi0weDAwLCAweDI5LCAweDEyLCAweGRiLCAweDAyLCAweDY5LCAweDhhLCAweDQyLCAweDBmLCAweGQzLCAweDA1LCAweGUwLAotMHgwMCwgMHgyOSwgMHgwNywgMHhkYSwgMHhjMSwgMHg2OCwgMHhhMSwgMHg0MiwgMHgwOSwgMHhkMywgMHgwOSwgMHgxYiwKLTB4YzEsIDB4NjAsIDB4YzAsIDB4NjgsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YzEsIDB4NjgsIDB4MDksIDB4MTksCi0weDAyLCAweDY5LCAweDkxLCAweDQyLCAweGY2LCAweGQ5LCAweDM4LCAweDFjLCAweGY2LCAweGU3LCAweDAwLCAweDAwLAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNywgMHgxYywgMHgwZCwgMHgxYywKLTB4MDAsIDB4MjEsIDB4MDIsIDB4OTEsIDB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZDIsIDB4MDAsIDB4MmMsIDB4NDksCi0weDhiLCAweDU4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDAxLCAweDkzLCAweDAwLCAweDIzLCAweGRiLCAweDQzLAotMHgwNCwgMHgyOCwgMHgwMiwgMHhkYSwgMHgwMSwgMHg5OCwgMHg0MCwgMHgwOCwgMHgwMSwgMHhkMiwgMHgxOCwgMHgxYywKLTB4NDYsIDB4ZTAsIDB4NTQsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4YzIsIDB4MTksIDB4MjEsIDB4NjksIDB4OGEsIDB4NDIsCi0weDAwLCAweGQ5LCAweDBmLCAweDFhLCAweDAwLCAweDJmLCAweDNjLCAweGQ5LCAweGEwLCAweDY4LCAweGUxLCAweDY4LAotMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHgwZCwgMHhmZSwgMHg2MSwgMHg2OCwKLTB4NDYsIDB4MTgsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsCi0weGZmLCAweGY3LCAweDBkLCAweGZlLCAweGMyLCAweDE5LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweDhhLCAweDQyLAotMHgxNCwgMHhkOSwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwYiwgMHgxYSwgMHgwMywgMHg5MywKLTB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZTEsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weDAzLCAweDliLCAweGMwLCAweDE4LCAweGUwLCAweDYwLCAweDAzLCAweDliLCAweDVkLCAweDE5LCAweGZmLCAweDFhLAotMHgwMiwgMHg5OCwgMHgxOCwgMHgxOCwgMHgwMiwgMHg5MCwgMHgxMCwgMHhlMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGNkLCAweGY4LCAweGUwLCAweDY4LCAweGMwLCAweDE5LCAweGVkLCAweDE5LCAweGUwLCAweDYwLCAweDAyLCAweDk4LAotMHhjMCwgMHgxOSwgMHgwMiwgMHg5MCwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZiwgMHhjMiwgMHhkOCwgMHgwMiwgMHg5OCwKLTB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsCi0weGYwLCAweGI1LCAweDgzLCAweGIwLCAweDE3LCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDIxLCAweDAxLCAweDkxLAotMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHhkMiwgMHgwMCwgMHgwMiwgMHg5MiwgMHgzMCwgMHg0OSwgMHg4YSwgMHg1OCwKLTB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MDAsIDB4MjQsIDB4ZTQsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MDEsIDB4ZGEsCi0weDUwLCAweDA5LCAweDAxLCAweGQyLCAweDIwLCAweDFjLCAweDUxLCAweGUwLCAweDAyLCAweDlhLCAweDU0LCAweDE4LAotMHhlMCwgMHg2OCwgMHhjMiwgMHgxOSwgMHg2MCwgMHg2OSwgMHg4MiwgMHg0MiwgMHgwMSwgMHhkOSwgMHgyMiwgMHg2OSwKLTB4ODcsIDB4MWEsIDB4MDAsIDB4MmYsIDB4NDUsIDB4ZDksIDB4MjUsIDB4NGUsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsCi0weDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGE3LCAweGZkLCAweDYxLCAweDY4LAotMHg0MCwgMHgxOCwgMHgwMCwgMHg5MCwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmQsIDB4MDIsIDB4OWEsIDB4YjEsIDB4NTgsIDB4MDEsIDB4MjMsCi0weDViLCAweDA0LCAweDE5LCAweDQzLCAweGIxLCAweDUwLCAweGMxLCAweDE5LCAweGZmLCAweDIyLCAweDA5LCAweDMyLAotMHg5MSwgMHg0MiwgMHgxMywgMHhkOSwgMHgxMywgMHgxYSwgMHgwMSwgMHgxYywgMHgwMCwgMHg5OCwgMHgyYSwgMHgxYywKLTB4MWUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZGYsIDB4ZjgsIDB4ZTAsIDB4NjgsIDB4ODAsIDB4MTksIDB4NzUsIDB4MTksCi0weGUwLCAweDYwLCAweDIxLCAweDY5LCAweDg4LCAweDQyLCAweDAwLCAweGQ5LCAweDIwLCAweDYxLCAweGJmLCAweDFiLAotMHgwMSwgMHg5OCwgMHgzMCwgMHgxOCwgMHgwMSwgMHg5MCwgMHgxMiwgMHhlMCwgMHgwMSwgMHgxYywgMHgwMCwgMHg5ZSwKLTB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2IsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weGMwLCAweDE5LCAweGVkLCAweDE5LCAweGUwLCAweDYwLCAweDIxLCAweDY5LCAweDg4LCAweDQyLCAweDAwLCAweGQ5LAotMHgyMCwgMHg2MSwgMHgwMSwgMHg5OCwgMHhjMCwgMHgxOSwgMHgwMSwgMHg5MCwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZiwKLTB4YjksIDB4ZDgsIDB4MDEsIDB4OTgsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweGIwLCAweGI1LCAweGMzLCAweGIwLAotMHgwYywgMHgxYywgMHgwMCwgMHgyNywgMHhmYSwgMHg0MywgMHgwNCwgMHgyOCwgMHgwNiwgMHhkYSwgMHg0MSwgMHgwMCwKLTB4MDksIDB4MTgsIDB4YzksIDB4MDAsIDB4MTQsIDB4NDgsIDB4NDUsIDB4NTgsIDB4NmIsIDB4MGMsIDB4MDQsIDB4ZDIsCi0weDEwLCAweDFjLCAweDQzLCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDYyLCAweDA5LAotMHgxYiwgMHhkMywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwOCwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwYywgMHgyMywKLTB4MDAsIDB4MjEsIDB4MDEsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4ZjgsIDB4MTEsIDB4MmMsIDB4MGQsIDB4ZDAsCi0weDEyLCAweDJjLCAweDBkLCAweGQwLCAweDEzLCAweDJjLCAweDA1LCAweGQwLCAweDE0LCAweDJjLCAweDBhLCAweGQxLAotMHgwMywgMHg5OCwgMHgwMCwgMHgwNCwgMHgwNywgMHgwZSwgMHgwNiwgMHhlMCwgMHgwMywgMHg5OCwgMHgwNywgMHgwNiwKLTB4M2YsIDB4MGUsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4OWYsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4OWYsIDB4MzgsIDB4MWMsCi0weGRiLCAweGU3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweDAzLCAweDQ5LCAweDAwLCAweDIwLAotMHgwMCwgMHgyMiwgMHgwYSwgMHg1NCwgMHgwMSwgMHgzMCwgMHg2MCwgMHgyOCwgMHhmYiwgMHhkMywgMHg3MCwgMHg0NywKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4MDIsIDB4ZjAsIDB4NmYsIDB4ZmEsIDB4NTcsIDB4MjAsCi0weDAyLCAweGYwLCAweGNjLCAweGY5LCAweDAyLCAweGYwLCAweDQwLCAweGY5LCAweDAwLCAweDBhLCAweGZiLCAweGQzLAotMHgwMiwgMHhmMCwgMHg0ZSwgMHhmYSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwKLTB4MDcsIDB4OWQsIDB4MTQsIDB4MWMsIDB4MWYsIDB4MWMsIDB4MzAsIDB4NGEsIDB4ZDIsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDE2LCAweDY4LCAweDllLCAweDQzLCAweDE2LCAweDYwLCAweDMzLCAweDFjLCAweGZmLCAweDIyLCAweDAxLCAweDMyLAotMHgyYSwgMHg0MCwgMHg0MCwgMHgwMiwgMHgwOCwgMHg0MywgMHgwNSwgMHgwYSwgMHgwNiwgMHgxYywgMHgwMCwgMHgwYywKLTB4MDEsIDB4OTAsIDB4MDAsIDB4MmEsIDB4MjAsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NGIsIDB4ZmEsIDB4NTMsIDB4MjAsCi0weDAyLCAweGYwLCAweGE4LCAweGY5LCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDAyLCAweGYwLAotMHhhMywgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHhhMCwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4OWQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4MjMsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmYsIDB4MDIsIDB4ZjAsCi0weDM3LCAweGZhLCAweDU0LCAweDIwLCAweDAyLCAweGYwLCAweDk0LCAweGY5LCAweDAwLCAweDk4LCAweDAyLCAweGYwLAotMHg5MSwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4ZSwgMHhmOSwgMHgzMCwgMHgxYywgMHgxNCwgMHhlMCwKLTB4MDIsIDB4ZjAsIDB4MmEsIDB4ZmEsIDB4NTIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ODcsIDB4ZjksIDB4MDEsIDB4OTgsCi0weDAyLCAweGYwLCAweDg0LCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDgxLCAweGY5LCAweDMwLCAweDFjLAotMHgwMiwgMHhmMCwgMHg3ZSwgMHhmOSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3YiwgMHhmOSwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4NzgsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDcyLCAweGY5LCAweDAwLCAweDJmLCAweDA1LCAweGQ5LCAweDAyLCAweGYwLCAweGU0LCAweGY4LAotMHgyMCwgMHg3MCwgMHgwMSwgMHgzNCwgMHgwMSwgMHgzZiwgMHhmOSwgMHhkMSwgMHgwMiwgMHhmMCwgMHhmMCwgMHhmOSwKLTB4MDQsIDB4NGEsIDB4ZDAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCi0weDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHgxNCwgMHgxYywgMHgxZiwgMHgxYywgMHg0MiwgMHgwMiwgMHgwYSwgMHg0MywKLTB4MTUsIDB4MWMsIDB4MDEsIDB4MjgsIDB4NTQsIDB4ZDAsIDB4MmMsIDB4NDksIDB4YzgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLCAweGM4LCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMiwgMHhmMCwgMHhlNiwgMHhmOSwgMHg1MywgMHgyMCwgMHgwMiwgMHhmMCwKLTB4NDMsIDB4ZjksIDB4MjgsIDB4MGMsIDB4MDYsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4M2YsIDB4ZjksIDB4MjgsIDB4MGEsCi0weDAxLCAweDkwLCAweDAwLCAweDkwLCAweDAyLCAweGYwLCAweDNhLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLAotMHgzNywgMHhmOSwgMHgwMiwgMHhmMCwgMHhiZCwgMHhmOSwgMHhmZiwgMHhmNywgMHg2MSwgMHhmZiwgMHgwMiwgMHhmMCwKLTB4ZDEsIDB4ZjksIDB4ODQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MmUsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDJiLCAweGY5LCAweDAwLCAweDk4LCAweDAyLCAweGYwLCAweDI4LCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLAotMHgyNSwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwNSwgMHhkOSwgMHgyMCwgMHg3OCwgMHgwMSwgMHgzNCwgMHgwMiwgMHhmMCwKLTB4MWYsIDB4ZjksIDB4MDEsIDB4M2YsIDB4ZjksIDB4ZDEsIDB4MDIsIDB4ZjAsIDB4YTMsIDB4ZjksIDB4MDIsIDB4ZjAsCi0weGI5LCAweGY5LCAweDgzLCAweDIwLCAweDAyLCAweGYwLCAweDE2LCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAotMHgxMywgMHhmOSwgMHgwMSwgMHg5OCwgMHgwMiwgMHhmMCwgMHgxMCwgMHhmOSwKLTB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4OTMsIDB4ZjksIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA3LCAweDQ5LCAweGM4LCAweDZmLCAweDQwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLAotMHgwMiwgMHg2MCwgMHhjOCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDAxLCAweGYwLCAweDhmLCAweGY4LCAweDA2LCAweDRmLAotMHhjMCwgMHg0NiwgMHhmOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHhmMiwgMHhmOCwgMHg3OCwgMHg4MCwgMHgwMSwgMHhmMCwKLTB4YjEsIDB4ZjgsIDB4MzgsIDB4NzEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweGYwLCAweDA1LCAweGY5LCAweDAyLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MGIsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MTEsIDB4ZDEsIDB4YzEsIDB4NmYsIDB4MDIsIDB4MjMsCi0weDBhLCAweDY4LCAweDFhLCAweDQzLCAweDBhLCAweDYwLCAweGMxLCAweDZmLCAweDgwLCAweDIzLCAweDBhLCAweDY4LAotMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMSwgMHgxOCwgMHgwOCwgMHg2OCwgMHg4MiwgMHgyMywgMHgwMiwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDRhLCAweDQ5LCAweGNhLCAweDFkLCAweDlkLCAweDMyLAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHhkNywgMHg1MCwgMHgwMSwgMHgzMCwgMHgxNywgMHgyOCwKLTB4ZmEsIDB4ZDMsIDB4NDYsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4YTcsIDB4NTAsIDB4MDEsIDB4MzAsCi0weDIwLCAweDI4LCAweGZhLCAweGQzLCAweDQzLCAweDRhLCAweDAwLCAweDIwLCAweDgzLCAweDAwLCAweGQ3LCAweDUwLAotMHgwMSwgMHgzMCwgMHgyMCwgMHgyOCwgMHhmYSwgMHhkMywgMHhhNywgMHg2MSwgMHg5NywgMHg2MSwgMHg0ZiwgMHg2NSwKLTB4OGYsIDB4NjUsIDB4M2YsIDB4NGQsIDB4YzAsIDB4NDYsIDB4MmYsIDB4NjAsIDB4NmYsIDB4NjAsIDB4YWYsIDB4NjAsCi0weGFmLCAweDYxLCAweGVmLCAweDYwLCAweDJmLCAweDYxLCAweDZmLCAweDYxLCAweDAwLCAweDIwLCAweGMxLCAweDAwLAotMHgwOSwgMHgxOCwgMHg0OSwgMHgwMSwgMHgzNSwgMHg0YiwgMHhjOSwgMHgxOCwgMHg4NiwgMHgwMCwgMHhjYiwgMHgxZCwKLTB4ZjksIDB4MzMsIDB4MzQsIDB4NGMsIDB4MzQsIDB4MTksIDB4ZTMsIDB4NjMsIDB4MTEsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGNiLCAweDE4LCAweDYzLCAweDYzLCAweDBkLCAweDIzLCAweDliLCAweDAxLCAweGNiLCAweDE4LCAweGI0LCAweDE4LAotMHhlMywgMHg2MywgMHgyMywgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg2MSwgMHg2MywgMHgwMSwgMHgzMCwKLTB4MDIsIDB4MjgsIDB4ZTQsIDB4ZGIsIDB4MjksIDB4NDgsIDB4YzEsIDB4MWQsIDB4ZjksIDB4MzEsIDB4MjksIDB4NGMsCi0weGMwLCAweDQ2LCAweGExLCAweDYyLCAweDYxLCAweDZiLCAweDBkLCAweDIzLCAweDliLCAweDAxLCAweGUxLCAweDYyLAotMHhjMSwgMHgxOCwgMHg5MSwgMHg2MiwgMHg1MSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhkMSwgMHg2MiwgMHgwOCwgMHgyMSwKLTB4ZTEsIDB4NjQsIDB4MjUsIDB4NDksIDB4YzAsIDB4NDYsIDB4MjEsIDB4NjUsIDB4MjQsIDB4NDksIDB4MGIsIDB4NjksCi0weGMwLCAweDQ2LCAweDYzLCAweDY1LCAweGMzLCAweDFkLCAweDRkLCAweDMzLCAweGUzLCAweDY1LCAweDI1LCAweDY2LAotMHg4YiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg2MywgMHg2NiwgMHhjYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMywgMHg2NiwKLTB4MWUsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZTMsIDB4NjYsIDB4MjcsIDB4NjcsIDB4MGIsIDB4MjMsIDB4ZGIsIDB4MDEsCi0weGMzLCAweDE4LCAweGEzLCAweDY3LCAweDY3LCAweDY3LCAweDAxLCAweDI2LCAweGUzLCAweDFkLCAweDY5LCAweDMzLAotMHg2NiwgMHg2MSwgMHhlNywgMHg2MSwgMHgxZiwgMHg3MywgMHgwMiwgMHgyMywgMHhkMywgMHg2NCwgMHgxNywgMHg0YiwKLTB4YzAsIDB4NDYsIDB4MTMsIDB4NjUsIDB4Y2IsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTMsIDB4NjUsIDB4YzMsIDB4MWQsCi0weDUxLCAweDMzLCAweGQzLCAweDY1LCAweDJiLCAweDFkLCAweDEzLCAweDY2LCAweDRiLCAweDY5LCAweGMwLCAweDQ2LAotMHg1MywgMHg2NiwgMHg4OSwgMHg2OSwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2NiwgMHgwZiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4ZDEsIDB4NjYsIDB4MTYsIDB4NjcsIDB4MGYsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4OTAsIDB4NjcsCi0weDU2LCAweDY3LCAweGQ3LCAweDYxLCAweGQwLCAweDFkLCAweDY5LCAweDMwLCAweDU2LCAweDYxLCAweDA3LCAweDczLAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MzAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDAwLCAweDU1LCAweGZmLCAweGZmLCAweDM4LCAweDAxLCAweDE4LCAweDAwLAotMHgxMCwgMHg1NSwgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgxZSwgMHg0YSwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZDcsIDB4MTgsIDB4ZjksIDB4NzMsIDB4MTksIDB4MjMsCi0weGRiLCAweDAxLCAweGQwLCAweDE4LCAweDAxLCAweDI0LCAweGNkLCAweDIzLCAweDFiLCAweDAxLCAweGQzLCAweDE4LAotMHhjMSwgMHg2MSwgMHgxYywgMHg3MCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHg5OSwgMHg2MCwKLTB4YjksIDB4NzMsIDB4NTksIDB4NjEsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MTksIDB4NjAsCi0weDEzLCAweDRiLCAweDUxLCAweDI3LCAweGJmLCAweDAzLCAweDAzLCAweDYzLCAweDNiLCAweDYwLCAweDg0LCAweDY5LAotMHhlNCwgMHgxOCwgMHg0NCwgMHg2MywgMHgwNCwgMHgzYywgMHg3YywgMHg2MCwgMHgwMSwgMHgyNCwgMHhlNCwgMHgwMiwKLTB4ODQsIDB4NjMsIDB4MGUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4YmMsIDB4NjAsIDB4MDQsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDQ0LCAweDYyLCAweDg0LCAweDY5LCAweGU0LCAweDE4LCAweDBiLCAweDRiLCAweGUzLCAweDE4LCAweGZiLCAweDYwLAotMHgwMywgMHg2YiwgMHhjMCwgMHg0NiwgMHg4MywgMHg2MiwgMHg0MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMywgMHg2MiwKLTB4YzEsIDB4NjMsIDB4NTEsIDB4NjQsIDB4OTEsIDB4NjQsIDB4ZDEsIDB4NjUsIDB4ZDEsIDB4NjYsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHhmYywgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHhmNywgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MWIsIDB4NDksIDB4YzksIDB4MjMsIDB4MWIsIDB4MDEsIDB4YzgsIDB4MTgsIDB4MDIsIDB4NzEsIDB4MDEsIDB4MjAsCi0weGJiLCAweDIzLCAweDFiLCAweDAxLCAweGNiLCAweDE4LCAweDU4LCAweDczLCAweDE3LCAweDQ4LCAweDAzLCAweDFjLAotMHgwMCwgMHgyNywgMHhkYywgMHgxZCwgMHhjMSwgMHgzNCwgMHgxYywgMHg2NSwgMHgyMywgMHgxYywgMHgwMSwgMHgzNywKLTB4M2YsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MWEsIDB4NjUsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4Y2YsIDB4MTgsCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGNiLCAweDE4LCAweDNhLCAweDYxLCAweDk4LCAweDYxLCAweDQwLCAweDIwLAotMHhmOCwgMHg2MCwgMHhkYSwgMHg2MSwgMHgxYSwgMHg2MiwgMHhjYSwgMHg2NCwgMHgwYSwgMHg2NiwgMHgwYywgMHg0OCwKLTB4YzAsIDB4NDYsIDB4YzIsIDB4NjAsIDB4MGIsIDB4NDgsIDB4MDAsIDB4NmIsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsCi0weGY4LCAweDYzLCAweDBhLCAweDQ4LCAweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDE5LCAweDgwLCAweDQxLCAweDY4LAotMHhjMCwgMHg0NiwgMHg1OSwgMHg4MCwgMHg4MCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5OCwgMHg4MCwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YmMsIDB4MjAsIDB4NDAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLCAweDQwLCAweDAwLCAweDE0LCAweDQwLAotMHgwMCwgMHgyMCwgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MywgMHhjYiwgMHgxZCwgMHhmZiwgMHgzMywKLTB4M2EsIDB4MzMsIDB4ODgsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MTgsIDB4NzAsIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDEwLCAweDY1LCAweDUwLCAweDY2LCAweDkwLCAweDY2LCAweDA4LCAweDcwLCAweDU4LCAweDcwLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHgwOCwgMHg3MywgMHg3MCwgMHg0NywgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4MmYsIDB4NDksIDB4MmYsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDExLCAweDYxLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweGM4LCAweDE4LCAweDUwLCAweDYxLCAweDJkLCAweDQ4LAotMHhjMCwgMHg0NiwgMHgxMCwgMHg2MiwgMHhkYiwgMHgwMCwgMHhjMywgMHgxOCwgMHg1MywgMHg2MiwgMHgwMCwgMHgyMywKLTB4MTMsIDB4NjMsIDB4NTMsIDB4NjMsIDB4MjksIDB4NGEsIDB4MmEsIDB4NGYsIDB4ZDQsIDB4MWQsIDB4ZmYsIDB4MzQsCi0weGZhLCAweDM0LCAweDE0LCAweGM3LCAweDA4LCAweDNmLCAweDNiLCAweDYxLCAweDFjLCAweDFmLCAweDdjLCAweDYxLAotMHgyNiwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHhiOCwgMHg2MSwgMHg3OSwgMHg2MSwgMHhmOCwgMHg2MiwKLTB4M2IsIDB4NjMsIDB4N2IsIDB4NjQsIDB4YmEsIDB4NjQsIDB4ZmEsIDB4NjUsIDB4MjIsIDB4NGYsIDB4ZmUsIDB4MWQsCi0weGY5LCAweDM2LCAweDIyLCAweDRkLCAweGVjLCAweDFkLCAweDc5LCAweDM0LCAweDI2LCAweDYyLCAweDUxLCAweDI2LAotMHhiNiwgMHgwMywgMHgzNywgMHg2MSwgMHgyNCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3NCwgMHg2MSwgMHgyZiwgMHg2NywKLTB4MWQsIDB4NGQsIDB4MDksIDB4MjcsIDB4N2YsIDB4MDQsIDB4ZWMsIDB4MWQsIDB4NzUsIDB4MzQsIDB4N2MsIDB4NjAsCi0weDNkLCAweDYwLCAweDFiLCAweDRjLCAweGMwLCAweDQ2LCAweDNjLCAweDYxLCAweGU2LCAweDFkLCAweDc1LCAweDM2LAotMHg3ZSwgMHg2MSwgMHgxOSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHg3YywgMHg2MCwgMHgzZCwgMHg2MCwgMHgwZiwgMHgxYywKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4MjQsIDB4MDEsIDB4MzQsIDB4MWQsIDB4MWMsIDB4OGIsIDB4MDAsIDB4ZmQsIDB4NTAsCi0weDAxLCAweDMxLCAweGExLCAweDQyLCAweGZhLCAweGQzLCAweDAxLCAweDFjLCAweDAwLCAweDIwLCAweDAxLCAweDI3LAotMHhmZiwgMHgwMiwgMHg4MywgMHgwMCwgMHhjZCwgMHg1MCwgMHgwMSwgMHgzMCwgMHhiOCwgMHg0MiwgMHhmYSwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NTUsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODAsIDB4MjgsIDB4ZmEsIDB4ZDMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDI0LCAweGEzLCAweDIwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgyNCwgMHg4MywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwKLTB4ODAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE4LCAweDIwLCAweDQwLCAweGE0LCAweGE4LCAweDIwLCAweDQwLAotMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhiOCwgMHhiNSwgMHgyYywgMHg0OCwgMHhmZCwgMHhmNywgMHhiYSwgMHhmZCwKLTB4MDEsIDB4MjAsIDB4MmIsIDB4NDksIDB4MGEsIDB4NjgsIDB4NTIsIDB4MGMsIDB4MDYsIDB4ZDIsIDB4MGEsIDB4NjgsCi0weDEyLCAweDBjLCAweDAyLCAweGQxLCAweDBhLCAweDY4LCAweDkyLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIwLAotMHgwNCwgMHgwNiwgMHgyNCwgMHgwZSwgMHgyNSwgMHg0YSwgMHhkNywgMHgxZCwgMHgwZCwgMHgzNywgMHgwMCwgMHgyMywKLTB4MDAsIDB4MjAsIDB4OWQsIDB4MDAsIDB4NzgsIDB4NTEsIDB4MDEsIDB4MzMsIDB4MDQsIDB4MmIsIDB4ZmEsIDB4ZDMsCi0weDAxLCAweDI3LCAweDNmLCAweDA1LCAweDUwLCAweDYxLCAweGY4LCAweDYwLCAweGQwLCAweDYxLCAweGY4LCAweDYxLAotMHgwMCwgMHgyMywgMHhkYiwgMHg0MywgMHg5MywgMHg2MSwgMHgzYiwgMHg2MSwgMHgxMywgMHg2MiwgMHgzYiwgMHg2MiwKLTB4MDAsIDB4MjcsIDB4MWIsIDB4NGIsIDB4OGQsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4OGQsIDB4NjksCi0weGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDAwLCAweDJjLCAweDBiLCAweGQwLCAweGRkLCAweDZiLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5NSwgMHg5ZCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHg1ZCwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTUsIDB4MWQsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MzcsIDB4NDAsIDB4MmYsCi0weGU4LCAweGQzLCAweDAwLCAweDI3LCAweDZjLCAweDQ2LCAweDAxLCAweDIzLCAweDViLCAweDA3LCAweDFjLCAweDQzLAotMHgwMSwgMHhlMCwgMHgyMCwgMHg2MCwgMHgwMSwgMHgzNywgMHgwZCwgMHg2OCwgMHgyYiwgMHgwOSwgMHgwMiwgMHhkMiwKLTB4ODAsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MmYsIDB4MDMsIDB4ZDMsIDB4MDgsIDB4NDksCi0weDRiLCAweDZlLCAweDAxLCAweDMzLCAweDRiLCAweDY2LCAweGQwLCAweDYyLCAweGI4LCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDkwLCAweGI0LCAweDAwLCAweDIxLCAweDBlLCAweDRmLCAweDBmLCAweDRhLCAweDAwLCAweDIwLCAweDRjLCAweDAxLAotMHg2NCwgMHgxYSwgMHhhNCwgMHgwMCwgMHhhMywgMHgxOCwgMHg1OCwgMHg2MCwgMHg5OCwgMHg2MCwgMHgxOCwgMHg2NCwKLTB4NTgsIDB4NjQsIDB4MTAsIDB4NTMsIDB4NTgsIDB4ODAsIDB4Y2MsIDB4MDAsIDB4ZTQsIDB4MTksIDB4OTgsIDB4NjcsCi0weGRjLCAweDYyLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGVlLCAweGQzLCAweDA2LCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHg0OCwgMHg2MCwgMHg4OCwgMHg2MCwgMHhjOCwgMHg2MCwgMHgwOCwgMHg2MSwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NjYsIDB4MjEsIDB4NDAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDY0LCAweDIxLCAweDA1LCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDYzLAotMHgwMCwgMHgyMSwgMHhjOSwgMHg0MywgMHg0MSwgMHg2MywgMHg4MSwgMHg2MywgMHgwMCwgMHgyMSwgMHhjMSwgMHg2MywKLTB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjAsCi0weDQwLCAweDAyLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDNjLCAweDIwLCAweDQ4LCAweDYwLAotMHg4OCwgMHg2MCwgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwNywgMHg0YSwKLTB4ODcsIDB4MDAsIDB4Y2IsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NTEsIDB4MDEsIDB4MzAsIDB4MTAsIDB4MjgsCi0weGY4LCAweGQzLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAotMHhmNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHg1ZCwgMHg0YywgMHhmZiwgMHhmZiwgMHgxMiwgMHg0OSwgMHgxMywgMHg0OCwKLTB4NjcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2EsIDB4MTgsIDB4MDYsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MTEsIDB4NGIsCi0weGNhLCAweDE4LCAweGMxLCAweDYwLCAweDgyLCAweDYwLCAweDAxLCAweDYxLCAweDBmLCAweDQ5LCAweDEwLCAweDQ4LAotMHhhNywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYSwgMHgxOCwgMHgwNiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgwZSwgMHg0YiwKLTB4Y2EsIDB4MTgsIDB4YzEsIDB4NjAsIDB4ODIsIDB4NjAsIDB4MDEsIDB4NjEsIDB4MGMsIDB4NDgsIDB4MGQsIDB4NDksCi0weDY3LCAweDIzLCAweDliLCAweDAxLCAweGMyLCAweDE4LCAweDA1LCAweGMxLCAweDA4LCAweDM5LCAweDA1LCAweDRiLAotMHhjMiwgMHgxOCwgMHhjOCwgMHg2MCwgMHg4YSwgMHg2MCwgMHgwOCwgMHg2MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YWMsIDB4MWUsIDB4MjEsIDB4NDAsIDB4NDgsIDB4MmUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MWYsIDB4MDAsIDB4MDAsCi0weGFjLCAweGVlLCAweDIwLCAweDQwLCAweDM0LCAweDJlLCAweDAwLCAweDgwLCAweGZjLCAweDJmLCAweDAwLCAweDAwLAotMHhhYywgMHgzZSwgMHgyMSwgMHg0MCwgMHg1YywgMHgyZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4NDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4MGEsIDB4MDEsIDB4MTIsIDB4MTksCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGQyLCAweDE4LCAweGQwLCAweDYyLCAweDEwLCAweDYzLCAweDUwLCAweDYzLAotMHg5MCwgMHg2MywgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmMywgMHhkMywgMHgzYSwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjMsIDB4NDgsIDB4NjMsIDB4ODgsIDB4NjMsIDB4MjAsIDB4NjAsIDB4MDEsIDB4MjEsIDB4ZTMsIDB4MWQsCi0weDU5LCAweDMzLCAweDYwLCAweDYwLCAweDE5LCAweDcxLCAweDE4LCAweDcyLCAweDk4LCAweDcxLCAweDk4LCAweDcyLAotMHg1OSwgMHg3MSwgMHg1OCwgMHg3MiwgMHhkOCwgMHg3MSwgMHhkOCwgMHg3MiwgMHhlMiwgMHgxZCwgMHg0OSwgMHgzMiwKLTB4MTEsIDB4NzMsIDB4MTksIDB4NzAsIDB4OTAsIDB4NzMsIDB4OTgsIDB4NzAsIDB4NTEsIDB4NzMsIDB4NTksIDB4NzAsCi0weGQwLCAweDczLCAweGQ4LCAweDcwLCAweDExLCAweDcxLCAweDExLCAweDcyLCAweDkwLCAweDcxLCAweDkwLCAweDcyLAotMHg1MCwgMHg3MSwgMHg1MCwgMHg3MiwgMHhkMCwgMHg3MSwgMHhkMCwgMHg3MiwgMHgxOCwgMHg3MywgMHgwMiwgMHgyMiwKLTB4ZTcsIDB4MWQsIDB4NjksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YmEsIDB4NzAsIDB4NTgsIDB4NzMsCi0weDc4LCAweDcwLCAweGQ4LCAweDczLCAweGY4LCAweDcwLCAweDM5LCAweDcxLCAweDNhLCAweDcyLCAweGI5LCAweDcxLAotMHhiOSwgMHg3MiwgMHg3OCwgMHg3MSwgMHg3YSwgMHg3MiwgMHhmOSwgMHg3MSwgMHhmOSwgMHg3MiwgMHgzOSwgMHg3MywKLTB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OTksIDB4NzAsIDB4NzgsIDB4NzMsCi0weDVhLCAweDcwLCAweGY5LCAweDczLCAweGQ5LCAweDcwLCAweDFhLCAweDcxLCAweDFhLCAweDcyLCAweDk5LCAweDcxLAotMHg5YSwgMHg3MiwgMHg1OCwgMHg3MSwgMHg1YSwgMHg3MiwgMHhkOSwgMHg3MSwgMHhkYSwgMHg3MiwgMHgxOSwgMHg3MywKLTB4ZTcsIDB4MWQsIDB4ODksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YjksIDB4NzAsIDB4NTgsIDB4NzMsCi0weDdhLCAweDcwLCAweGQ5LCAweDczLCAweGY5LCAweDcwLCAweDM5LCAweDcxLCAweDNhLCAweDcyLCAweGI5LCAweDcxLAotMHhiOSwgMHg3MiwgMHg3OCwgMHg3MSwgMHg3YSwgMHg3MiwgMHhmOSwgMHg3MSwgMHhmOSwgMHg3MiwgMHgzYSwgMHg3MywKLTB4ZTMsIDB4MWQsIDB4OTksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OWEsIDB4NzAsIDB4NzgsIDB4NzMsCi0weDVhLCAweDcwLCAweGY5LCAweDczLCAweGRhLCAweDcwLCAweDE5LCAweDcxLCAweDFhLCAweDcyLCAweDk5LCAweDcxLAotMHg5OSwgMHg3MiwgMHg1OCwgMHg3MSwgMHg1YSwgMHg3MiwgMHhkOSwgMHg3MSwgMHhkOSwgMHg3MiwgMHgyMCwgMHg2MSwKLTB4ZTAsIDB4NjAsIDB4NjAsIDB4NjEsIDB4YTAsIDB4NjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGEwLCAweDFjLCAweDAwLCAweDgwLCAweGU4LCAweDE5LCAweDAwLCAweDgwLCAweDgxLCAweDIwLCAweDAwLCAweDAyLAotMHgwMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHg3MCwgMHg0NywgMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwKLTB4MDksIDB4NDksIDB4MGEsIDB4NGIsIDB4YzgsIDB4MTgsIDB4MDQsIDB4M2IsIDB4YzksIDB4MTgsIDB4MDgsIDB4NjAsCi0weDAwLCAweDIxLCAweGMyLCAweDFkLCAweDI5LCAweDMyLCAweGMyLCAweDYxLCAweDEwLCAweDFjLCAweDAxLCAweDMxLAotMHgwOCwgMHgyOSwgMHhmOCwgMHhkMywgMHhjMSwgMHgxZiwgMHgyOSwgMHgzOSwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODQsIDB4MDksIDB4MDAsIDB4MDAsCi0weDA2LCAweDQ4LCAweDA3LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDQ4LCAweDgwLCAweDAwLCAweDIwLAotMHg4OCwgMHg4MCwgMHhjOCwgMHg4MCwgMHg4OCwgMHg2MCwgMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwKLTB4ODgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweDIxLCAweDA2LCAweDQ4LCAweGMyLCAweDFkLCAweDE5LCAweDMyLAotMHhjMSwgMHg2MCwgMHgwMSwgMHg2MSwgMHhjMSwgMHg2MSwgMHgwMSwgMHg2MiwgMHgxMSwgMHg3MSwgMHhmZiwgMHgzMCwKLTB4MDEsIDB4MzAsIDB4NDEsIDB4NjIsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDA5LCAweDQ4LCAweDBhLCAweDRiLCAweGMwLCAweDQ2LCAweDE4LCAweDYwLCAweDAwLCAweDIxLCAweGMyLCAweDFkLAotMHg0ZCwgMHgzMiwgMHhjMiwgMHg2MCwgMHgxMCwgMHgxYywgMHgwMSwgMHgzMSwgMHgxNCwgMHgyOSwgMHhmOCwgMHhkMywKLTB4YzEsIDB4MWYsIDB4NGQsIDB4MzksIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjAsIDB4NTgsIDB4NjAsIDB4OTgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQ4LCAweDA3LCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwYiwgMHg0OSwgMHgwYiwgMHg0OCwgMHhmZCwgMHhmNywgMHhlYSwgMHhmYiwgMHgwYiwgMHg0OCwKLTB4MDAsIDB4NmEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYyLCAweDA5LCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDA0LCAweGQxLCAweGMwLCAweDZmLAotMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NzUsIDB4OTgsIDB4MjEsIDB4NDAsCi0weGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwZiwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgwNCwgMHhkMSwgMHhjMCwgMHg2ZiwKLTB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MGIsIDB4NGIsIDB4MGMsIDB4NDgsCi0weDBjLCAweDRhLCAweDAwLCAweDIxLCAweGZkLCAweGY3LCAweGJmLCAweGZiLCAweDBiLCAweDQ4LCAweDQxLCAweDhkLAotMHgwMSwgMHgzMSwgMHg0MSwgMHg4NSwgMHgwMCwgMHgyMSwgMHhjMSwgMHg4NSwgMHgwOSwgMHg0OCwgMHgwMCwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDU5LCAweGJkLCAweDIxLCAweDQwLAotMHg3NSwgMHg5OCwgMHgyMSwgMHg0MCwgMHhiOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MWIsIDB4NGMsCi0weDEwLCAweDI2LCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDA4LCAweGQxLCAweDYwLCAweDg4LCAweDAwLCAweDI4LAotMHgwNSwgMHhkMSwgMHgyMCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgxOSwgMHgyMCwgMHhhMCwgMHg2NywKLTB4MDAsIDB4ZTAsIDB4YTYsIDB4NjcsIDB4MDAsIDB4MjAsIDB4MDcsIDB4MjMsIDB4NWIsIDB4MDIsIDB4ZTUsIDB4MTgsCi0weGMxLCAweDQzLCAweGU4LCAweDYxLCAweDY5LCAweDYyLCAweDU5LCAweDA4LCAweGExLCAweDI3LCAweDdmLCAweDAzLAotMHg3OSwgMHg2MCwgMHgwZiwgMHgyMSwgMHg3OSwgMHg2MCwgMHhlMSwgMHgxZCwgMHhiOSwgMHgzMSwgMHgwOCwgMHg3MSwKLTB4MDEsIDB4MjAsIDB4YjgsIDB4NjAsIDB4NDAsIDB4MDIsIDB4YjgsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4NGMsIDB4ZmEsCi0weDAwLCAweGYwLCAweGYwLCAweGZhLCAweDA0LCAweDIwLCAweGI4LCAweDYwLCAweDA3LCAweDIwLCAweDc4LCAweDYxLAotMHg3ZSwgMHg2MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlMCwgMHgxOCwgMHhjMCwgMHg4YiwgMHgwNCwgMHgyMywKLTB4MTgsIDB4NDAsIDB4ZTgsIDB4NjIsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDAyLCAweDFjLCAweDAwLCAweDIwLCAweGZmLCAweDIzLAotMHgwMSwgMHgzMywgMHg5YSwgMHg0MiwgMHgwOCwgMHhkMCwgMHgwMSwgMHgyOSwgMHgwMCwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDFiLCAweDRhLCAweGQ3LCAweDY4LCAweDFhLCAweDRiLCAweDE5LCAweDc5LCAweDFjLCAweDFjLCAweDM3LCAweDIzLAotMHg5YiwgMHgwMSwgMHhlMywgMHgxOCwgMHgwMSwgMHgyZiwgMHgwZCwgMHhkMSwgMHg1NywgMHg4OCwgMHgwMCwgMHgyZiwKLTB4MGEsIDB4ZDEsIDB4MDAsIDB4MjksIDB4MGEsIDB4ZDEsIDB4NTksIDB4OGIsIDB4MGEsIDB4MDksIDB4MDAsIDB4ZDMsCi0weDAyLCAweDIwLCAweDQ5LCAweDA5LCAweGU4LCAweGQzLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweGU1LCAweGU3LAotMHgwMCwgMHgyOSwgMHgwMywgMHhkMCwgMHg5OCwgMHg4YSwgMHg4MCwgMHgwNywgMHg4MCwgMHgwZiwgMHhkZiwgMHhlNywKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4OGEsIDB4ODgsIDB4ZmYsIDB4MjcsIDB4MDEsIDB4MzcsCi0weDE3LCAweDQwLCAweDBhLCAweDQ5LCAweGM5LCAweDg4LCAweDAzLCAweGQwLCAweDRiLCAweDBhLCAweDAxLCAweGQzLAotMHgwMywgMHgyMCwgMHhkMSwgMHhlNywgMHgxMywgMHgwYSwgMHgwMywgMHhkMywgMHgwYiwgMHgwYSwgMHgwMSwgMHhkMywKLTB4MDIsIDB4MjAsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4MDksIDB4YzksIDB4ZDMsIDB4YzksIDB4MDksIDB4YzcsIDB4ZDMsCi0weDAxLCAweDIwLCAweGM1LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDA4LCAweDFjLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHhjMSwgMHhiMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNywgMHg1MiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4NTIsIDB4NDgsIDB4NDIsIDB4NjksIDB4NDAsIDB4MGQsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsCi0weDQ4LCAweDYwLCAweDUwLCAweDQ4LCAweGMwLCAweDZhLCAweDUwLCAweDRiLCAweDE4LCAweDQzLCAweDAwLCAweDIxLAotMHgwMywgMHgwMywgMHgxYiwgMHgwYiwgMHg0ZSwgMHg0YywgMHgyNywgMHg2ZiwgMHgzZCwgMHgwMywgMHgyZCwgMHgwYiwKLTB4ZTcsIDB4MWQsIDB4NzksIDB4MzcsIDB4YWIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsCi0weDFiLCAweDZhLCAweGMwLCAweDQ2LCAweDQwLCAweDkzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjYywgMHgwMCwgMHg2ZSwgMHg0NiwgMHgzMywgMHg1MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDYsIDB4MWQsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmMsIDB4NDQsIDB4NjMsIDB4NjAsIDB4MDgsIDB4MzAsCi0weDAxLCAweDMxLCAweDQwLCAweDliLCAweDgzLCAweDQyLCAweDAwLCAweGQ4LCAweDNmLCAweDQ4LCAweDAzLCAweDAzLAotMHgxYiwgMHgwYiwgMHhhYiwgMHg0MiwgMHhlNywgMHhkMSwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyMywgMHgxYiwgMHgwMywKLTB4MTMsIDB4NDAsIDB4M2MsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4NjMsIDB4NmEsIDB4MDEsIDB4MzMsIDB4NjMsIDB4NjIsCi0weDA5LCAweGUwLCAweDEzLCAweDBiLCAweDAzLCAweGQzLCAweDIzLCAweDZhLAotMHgwMSwgMHgzMywgMHgyMywgMHg2MiwgMHgwMywgMHhlMCwgMHgzNywgMHg0YiwgMHg1YywgMHg2ZCwgMHgwMSwgMHgzNCwKLTB4NWMsIDB4NjUsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDAsIDB4MDMsIDB4MWMsIDB4ZGMsIDB4MDAsIDB4MjMsIDB4MWMsCi0weDZiLCAweDQ0LCAweDVjLCAweDY4LCAweDAxLCAweDMwLCAweDIzLCAweDBkLCAweDAxLCAweGQyLCAweDg4LCAweDQyLAotMHhmNSwgMHhkMSwgMHgzMCwgMHg0YywgMHgyNSwgMHg2OCwgMHg2YiwgMHgwYywgMHgwNSwgMHhkMiwgMHgyMywgMHg2OCwKLTB4MWIsIDB4MGMsIDB4MDgsIDB4ZDEsIDB4MjQsIDB4NjgsIDB4YTMsIDB4MGEsIDB4MDUsIDB4ZDMsIDB4MjAsIDB4MjQsCi0weDJiLCAweDRiLCAweGMwLCAweDQ2LCAweDVjLCAweDYyLCAweDAwLCAweDI0LCAweDVjLCAweDYyLCAweDI1LCAweDRiLAotMHgyMywgMHg0YywgMHg1MSwgMHgyNiwgMHhiNiwgMHgwMywgMHgyMywgMHg2NywgMHgzMywgMHg2MSwgMHgzZCwgMHg2YSwKLTB4YzAsIDB4NDYsIDB4NzUsIDB4NjEsIDB4MDIsIDB4MjUsIDB4YTEsIDB4MjYsIDB4NzYsIDB4MDMsIDB4NzUsIDB4NjAsCi0weDAxLCAweDI1LCAweGI1LCAweDYwLCAweGU2LCAweDFkLCAweGI5LCAweDM2LCAweDM1LCAweDcxLCAweDg4LCAweDQyLAotMHgyMSwgMHhkMCwgMHgyNSwgMHgxYywgMHhjMywgMHgwMCwgMHg2YywgMHg0NiwgMHhlNCwgMHg1OCwgMHgyZSwgMHg2ZiwKLTB4NmIsIDB4NDQsIDB4MzQsIDB4NjAsIDB4NWIsIDB4NjgsIDB4MmMsIDB4NmYsIDB4YzAsIDB4NDYsIDB4NjMsIDB4NjAsCi0weDJiLCAweDZmLCAweDA4LCAweDMzLCAweDJiLCAweDY3LCAweDNjLCAweDZhLCAweGEzLCAweDQyLCAweDAyLCAweGQzLAotMHgxMiwgMHg0YiwgMHhjMCwgMHg0NiwgMHgyYiwgMHg2NywgMHgwMywgMHgxYywgMHhkYiwgMHgwMCwgMHg2YiwgMHg0NCwKLTB4NWMsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MjMsIDB4MGQsIDB4MDQsIDB4ZDMsIDB4NTEsIDB4MjQsIDB4YTQsIDB4MDMsCi0weDJiLCAweDZmLCAweGMwLCAweDQ2LCAweGEzLCAweDYxLCAweDg4LCAweDQyLCAweGRlLCAweGQxLCAweDEwLCAweDBiLAotMHgwMywgMHhkMywgMHgwZSwgMHg0OSwgMHgwMSwgMHgyMCwgMHhmZCwgMHhmNywgMHg3NCwgMHhmYSwgMHg0MSwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDAwLCAweDAxLCAweDE0LCAweDQwLCAweDAwLCAweDQwLCAweDE0LCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsCi0weGM5LCAweDRmLCAweGZmLCAweGZmLCAweGYwLCAweGI0LCAweDAwLCAweDIxLCAweDAwLCAweDIzLCAweDA3LCAweDIyLAotMHgwNiwgMHgyNCwgMHg0NywgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgwMSwgMHgzMywKLTB4MjAsIDB4MmIsIDB4ZjksIDB4ZDMsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NjEsIDB4MDUsIDB4MjMsIDB4M2IsIDB4NjEsCi0weDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNkLCAweDYxLCAweDNiLCAweDYxLAotMHgzZiwgMHg0ZCwgMHhhYiwgMHg2ZiwgMHhkZSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywKLTB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsCi0weDllLCAweDA4LCAweDAyLCAweDIzLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLAotMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwgMHg1ZSwgMHgwOCwgMHgwMiwgMHgyMywKLTB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsCi0weDNiLCAweDYxLCAweDAyLCAweDIzLCAweGFlLCAweDZmLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwgMHg1ZCwgMHgwMCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweGM1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHg4NSwgMHgwOCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDQ1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwMiwgMHgyNSwKLTB4MDUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsCi0weDNiLCAweDYxLCAweDQwLCAweDAwLCAweDAyLCAweDIzLCAweDE4LCAweDQwLCAweDA0LCAweDIzLCAweDAzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg2MSwgMHgwMCwgMHgyNSwgMHgzZCwgMHg2MSwKLTB4MDEsIDB4MjMsIDB4M2IsIDB4NjEsIDB4M2QsIDB4NjEsIDB4M2IsIDB4NjEsIDB4MDAsIDB4MjAsIDB4M2QsIDB4NjEsCi0weDBkLCAweDRiLCAweDFiLCAweDY5LCAweDQ5LCAweDAwLCAweDFlLCAweDFjLCAweDAyLCAweDIzLCAweDMzLCAweDQwLAotMHgxOSwgMHg0MywgMHgwMSwgMHgyMywgMHgzYiwgMHg2MSwgMHgwMSwgMHgzMCwKLTB4MTAsIDB4MjgsIDB4ZjIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MzgsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MzgsIDB4NjEsCi0weDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDM4LCAweDYxLCAweDQ4LCAweDA4LAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ZjAsIDB4YjQsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MjMsIDB4MDYsIDB4MjcsCi0weDQ0LCAweDRhLCAweGMwLCAweDQ2LCAweDE3LCAweDYxLCAweDEzLCAweDYxLCAweDAxLCAweDM0LCAweDIwLCAweDJjLAotMHhmOSwgMHhkMywgMHgwNCwgMHgyNiwgMHgxNiwgMHg2MSwgMHgwNSwgMHgyNCwgMHgxNCwgMHg2MSwgMHgxNywgMHg2MSwKLTB4MDcsIDB4MjMsIDB4MTMsIDB4NjEsIDB4MTYsIDB4NjEsIDB4MTQsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MTMsIDB4NjEsCi0weDNjLCAweDRiLCAweDliLCAweDZmLCAweGRkLCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLAotMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgzNywgMHg0YiwgMHg5YiwgMHg2ZiwKLTB4OWQsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsCi0weDI1LCAweDQzLCAweDE1LCAweDYxLCAweDMyLCAweDRiLCAweDliLCAweDZmLCAweDVkLCAweDA4LCAweDAyLCAweDIzLAotMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwKLTB4MmQsIDB4NGIsIDB4OWQsIDB4NmYsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsCi0weDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDI5LCAweDRiLCAweDliLCAweDZmLCAweDVkLCAweDAwLAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywKLTB4MTUsIDB4NjEsIDB4YzUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsCi0weDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDg1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLAotMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg0NSwgMHgwOCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsCi0weDE1LCAweDYxLCAweDAyLCAweDI1LCAweDA1LCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLAotMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwMywgMHgxYywKLTB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjAsIDB4NDMsIDB4MTAsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MDcsIDB4MjMsCi0weDEzLCAweDYxLCAweDE2LCAweDYxLCAweDE0LCAweDYxLCAweDRjLCAweDAwLCAweDAwLCAweDIwLCAweDBmLCAweDIxLAotMHgyNSwgMHgxYywgMHhjZCwgMHg0MCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywKLTB4MTMsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzksCi0weDEwLCAweDI4LCAweGYxLCAweGQzLCAweDE3LCAweDYxLCAweDA3LCAweDIzLCAweDEzLCAweDYxLCAweDE3LCAweDYxLAotMHgxMywgMHg2MSwgMHgwMywgMHgyMCwgMHgxMCwgMHg2MSwgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4NGYsIDB4NGQsCi0weDA4LCAweDIxLCAweDAyLCAweDIwLCAweDJhLCAweDFjLCAweGZkLCAweGY3LCAweDI3LCAweGY5LCAweDRkLCAweDRjLAotMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhlNywgMHgxOCwgMHgzOCwgMHg4MCwgMHgxYSwgMHgyMSwgMHgwMiwgMHgyMCwKLTB4MmEsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4MWQsIDB4ZjksIDB4NzgsIDB4ODAsIDB4MjAsIDB4NzksIDB4MDAsIDB4MjgsCi0weDBiLCAweGQwLCAweDAwLCAweDIwLCAweDM4LCAweDgwLCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDEwLCAweGQxLAotMHg0NCwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOCwgMHg0MywgMHg5OSwgMHgwMiwKLTB4MDgsIDB4NjAsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDYsIDB4ZDEsIDB4NjAsIDB4ODgsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweGY5LCAweDIxLCAweDEyLCAweDIwLCAweGZmLCAweGY3LCAweDQzLCAweGZmLCAweDAxLCAweDIxLAotMHhjOSwgMHgwMywgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgMHgwMCwgMHgyNSwgMHg3ZCwgMHgyNiwKLTB4ZjYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MzUsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OWMsIDB4ZmUsCi0weDAwLCAweDBjLCAweDAxLCAweGQzLCAweGI1LCAweDQyLCAweGY3LCAweGQzLCAweDAwLCAweDI1LCAweDA1LCAweGUwLAotMHgwMywgMHgyMSwgMHgwOSwgMHgwMywgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgyYiwgMHhmZiwgMHgwMSwgMHgzNSwKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OGQsIDB4ZmUsIDB4NDAsIDB4MGIsIDB4MDEsIDB4ZDIsIDB4YjUsIDB4NDIsCi0weGYyLCAweGQzLCAweDA0LCAweDIwLCAweGZmLCAweGY3LCAweDg2LCAweGZlLCAweGZmLCAweDIzLCAweGUxLCAweDMzLAotMHg5OCwgMHg0MywgMHgwMSwgMHgyMSwgMHgwMSwgMHg0MywgMHgzOCwgMHg4OCwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywKLTB4OTgsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4MmYsIDB4MjMsIDB4NWIsIDB4MDEsCi0weDE5LCAweDQzLCAweDE2LCAweGUwLCAweDAxLCAweDI4LCAweDA5LCAweGQxLCAweDc4LCAweDg4LCAweDAxLCAweDI4LAotMHgwMywgMHhkMSwgMHgyMywgMHgyMywgMHg1YiwgMHgwMSwgMHgxOSwgMHg0MywgMHgwZCwgMHhlMCwgMHgyMCwgMHgyMywKLTB4MTksIDB4NDMsIDB4MGEsIDB4ZTAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4NzgsIDB4ODgsIDB4MDEsIDB4MjgsCi0weDAzLCAweGQxLCAweDBiLCAweDIzLCAweGRiLCAweDAxLCAweDE5LCAweDQzLCAweDAxLCAweGUwLCAweDgwLCAweDIzLAotMHgxOSwgMHg0MywgMHgwNCwgMHgyMCwgMHhmZiwgMHhmNywgMHhmOCwgMHhmZSwgMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZjMsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsCi0weDAwLCAweDIxLCAweDFiLCAweDIwLCAweGZmLCAweGY3LCAweGVjLCAweGZlLCAweDFhLCAweDIwLCAweGZmLCAweGY3LAotMHg0ZiwgMHhmZSwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMywgMHgwMSwgMHg0MywgMHgxYSwgMHgyMCwgMHhmZiwgMHhmNywKLTB4ZTMsIDB4ZmUsIDB4MDAsIDB4MjcsIDB4MDMsIDB4ZTAsIDB4MDgsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmYsCi0weDA4LCAweGQ5LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDQwLCAweGZlLCAweDc5LCAweDAwLCAweDA5LCAweDE5LAotMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4OCwgMHg4MywgMHgwMSwgMHgzNywgMHgyMCwgMHgyZiwKLTB4ZWYsIDB4ZDMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZWQsIDB4YWYsIDB4MjEsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIwLCAweDEzLCAweDQ4LAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDAxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHg4MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4MDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDgxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMwLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHgwMSwgMHhiMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwOCwgMHgxNCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwKLTB4NjgsIDB4NGQsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZWYsIDB4MTgsIDB4ZjgsIDB4OGIsIDB4MDQsIDB4MjIsCi0weDAyLCAweDQwLCAweDAyLCAweDkyLCAweDcxLCAweDIzLCAweDViLCAweDAxLCAweGU4LCAweDE4LCAweDAxLCAweDg4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwgMHg0MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyNCwKLTB4MDMsIDB4ZTAsIDB4MDgsIDB4MmMsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmMsIDB4MDgsIDB4ZDksIDB4MjAsIDB4MWMsCi0weGZmLCAweGY3LCAweGU4LCAweGZkLCAweDYxLCAweDAwLCAweDQ5LCAweDE5LCAweDFiLCAweDIzLCAweGRiLCAweDAxLAotMHhjOSwgMHgxOCwgMHg4OCwgMHg4MywgMHgwMSwgMHgzNCwgMHgyMCwgMHgyYywgMHhlZiwgMHhkMywgMHg1OCwgMHg0YywKLTB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MTUsIDB4ZDAsIDB4NTcsIDB4NGUsIDB4MjAsIDB4MjUsIDB4MDEsIDB4M2QsCi0weDUzLCAweDQ5LCAweGUwLCAweDY5LCAweDMwLCAweDQwLCAweDBiLCAweGQwLCAweDY4LCAweDAwLCAweDQwLCAweDE4LAotMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg4YiwgMHgyOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NjUsIDB4ZmUsIDB4ZTAsIDB4NjksIDB4YjAsIDB4NDMsIDB4ZTAsIDB4NjEsIDB4NzYsIDB4MDgsIDB4MDAsIDB4MmQsCi0weGViLCAweGQxLCAweDAxLCAweDIwLCAweGZmLCAweGY3LCAweGMyLCAweGZkLCAweDQ4LCAweDQ5LCAweGMwLCAweDQ2LAotMHhmOCwgMHg4MywgMHhmOCwgMHg4YiwgMHhjMiwgMHgwOCwgMHgyNSwgMHhkMywgMHhjYSwgMHg2OCwgMHgwMSwgMHgyYSwKLTB4MTMsIDB4ZDEsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MWYsIDB4ZDEsIDB4NDksIDB4ODgsIDB4MDAsIDB4MjksCi0weDFjLCAweGQxLCAweDAxLCAweDk5LCAweDQzLCAweDRhLCAweDAwLCAweDI5LCAweDA1LCAweGQwLCAweDAxLCAweDI5LAotMHgxNiwgMHhkMSwgMHg1MSwgMHg4YiwgMHhjOSwgMHgwOCwgMHgxMywgMHhkMiwgMHgwZiwgMHhlMCwgMHg1MSwgMHg4YiwKLTB4MDksIDB4MDksIDB4MGYsIDB4ZDIsIDB4MGIsIDB4ZTAsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MGIsIDB4ZDEsCi0weDZkLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDhhLCAweDg4LCAweGM5LCAweDg4LCAweDExLCAweDQwLAotMHg0OSwgMHgwOSwgMHgwOSwgMHgwNywgMHgwMiwgMHhkMSwgMHgwNCwgMHgyMywgMHg5OCwgMHg0MywgMHhmOCwgMHg4MywKLTB4ZjgsIDB4OGIsIDB4MDQsIDB4MjEsIDB4MDEsIDB4NDAsIDB4MDIsIDB4OWEsIDB4MWYsIDB4ZDAsIDB4YjksIDB4OGIsCi0weDRhLCAweDBiLCAweDI3LCAweGQzLCAweDgwLCAweDA5LCAweDI1LCAweGQzLCAweGZmLCAweDIzLCAweDAxLCAweDk4LAotMHgwMSwgMHgzMywgMHg5OCwgMHg0MiwgMHgyMCwgMHhkMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwKLTB4MDAsIDB4ZDEsIDB4MDUsIDB4MDIsIDB4MDEsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4MjMsCi0weDViLCAweDAzLCAweDFkLCAweDQzLCAweGE5LCAweDQyLCAweDEzLCAweGQwLAotMHgwMCwgMHgyMCwgMHgyOSwgMHgxYywgMHhmZiwgMHhmNywgMHgxMCwgMHhmZSwgMHhiZCwgMHg4MywgMHgwMCwgMHgyMCwKLTB4YzAsIDB4NDMsIDB4NjAsIDB4NjIsIDB4MGEsIDB4ZTAsIDB4YjgsIDB4OGIsIDB4NDAsIDB4MGIsIDB4MDcsIDB4ZDIsCi0weDA5LCAweDIxLCAweDQ5LCAweDAyLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDAzLCAweGZlLCAweDA5LCAweDIwLAotMHg0MCwgMHgwMiwgMHhiOCwgMHg4MywgMHhmOCwgMHg4YiwgMHhjMCwgMHgwOCwgMHgyZCwgMHhkMywgMHgxZCwgMHg0OCwKLTB4YzcsIDB4NmEsIDB4MDEsIDB4OTgsIDB4MDAsIDB4OTksIDB4ZmYsIDB4ZjcsIDB4NTEsIDB4ZmMsIDB4YzIsIDB4MDcsCi0weGQyLCAweDBmLCAweDFhLCAweDQ5LCAweDAzLCAweGQwLCAweDA0LCAweDIzLCAweGNkLCAweDZkLCAweDJiLCAweDQzLAotMHgwMywgMHhlMCwgMHgwNCwgMHgyMywgMHhjZCwgMHg2ZCwgMHg5ZCwgMHg0MywgMHgyYiwgMHgxYywgMHhjYiwgMHg2NSwKLTB4ODMsIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MDIsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4MmIsIDB4NDMsIDB4MDMsIDB4ZTAsCi0weDAyLCAweDIzLCAweGNkLCAweDZkLCAweDlkLCAweDQzLCAweDJiLCAweDFjLCAweGNiLCAweDY1LCAweDYxLCAweDZhLAotMHg4MSwgMHg0MiwgMHgwYywgMHhkMCwgMHg2MCwgMHg2MiwgMHgwZSwgMHg0OCwgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwKLTB4ZmYsIDB4MjEsIDB4MjEsIDB4MzEsIDB4MzksIDB4NDMsIDB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MjEsIDB4MzMsCi0weDlmLCAweDQzLCAweDM5LCAweDFjLCAweGMxLCAweDYyLCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweGI0LCAweDAxLCAweDIyLAotMHgyMCwgMHgyOCwgMHgwZiwgMHhkMiwgMHg0MywgMHgwMCwgMHgwZiwgMHgxYywgMHgwNywgMHg0OSwgMHg1YywgMHgxOCwKLTB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4OWYsIDB4ODMsIDB4ODIsIDB4NDAsIDB4MDcsIDB4MjMsCi0weDViLCAweDAyLCAweGM5LCAweDE4LCAweDEwLCAweDFjLCAweGNhLCAweDY5LCAweDEwLCAweDQzLCAweGM4LCAweDYxLAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwYiwgMHg0OCwgMHg0MCwgMHg2OSwKLTB4MGIsIDB4NDksIDB4YzksIDB4OGIsIDB4MDQsIDB4MjIsIDB4MGEsIDB4NDAsIDB4MGEsIDB4NDksIDB4MDYsIDB4ZDAsCi0weDAxLCAweDIzLCAweGRiLCAweDAyLCAweDk4LCAweDQzLCAweDAxLCAweDIzLCAweGNhLCAweDZkLCAweDFhLCAweDQzLAotMHgwNSwgMHhlMCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHgxOCwgMHg0MywgMHhjYSwgMHg2ZCwgMHg1MiwgMHgwOCwKLTB4NTIsIDB4MDAsIDB4Y2EsIDB4NjUsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGU4LCAweDFiLCAweDAwLCAweDgwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLAotMHhmZiwgMHhmNywgMHhkZSwgMHhmZiwgMHgwMSwgMHgxYywgMHgwNSwgMHgyMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4YWIsIDB4MTgsIDB4ODAsIDB4MDQsIDB4M2IsIDB4NTgsIDB4NzAsIDB4MWIsIDB4MjIsIDB4MDAsIDB4YWIsCi0weDVhLCAweDgwLCAweGQ5LCAweDgwLCAweDA1LCAweDQ5LCAweGM5LCAweDZkLCAweGMwLCAweDQ2LCAweDAyLCAweDkxLAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZCwgMHhmNywgMHg3OSwgMHhmOCwgMHgwNCwgMHhiMCwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MGYsIDB4NDgsIDB4MDEsIDB4NjgsCi0weDQ5LCAweDBjLCAweDA1LCAweGQyLCAweDAxLCAweDY4LCAweDA5LCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LAotMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgwYiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMCwgMHgwYywgMHgwMSwgMHhlMCwKLTB4MGEsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDksIDB4NGIsIDB4OTgsIDB4NDIsCi0weDA1LCAweGQwLCAweDAyLCAweDMzLCAweDk4LCAweDQyLCAweDAyLCAweGQwLCAweDA3LCAweDRiLCAweDk4LCAweDQyLAotMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDA0LCAweDk5LCAweDAwLCAweDAwLCAweDA3LCAweDk5LCAweDAwLCAweDAwLCAweDkwLCAweGI0LCAweDAxLCAweDI0LAotMHgyMSwgMHgxYywgMHgxOCwgMHg0OCwgMHgwMiwgMHg2OCwgMHg1MiwgMHgwYywgMHgwNiwgMHhkMiwgMHgwMiwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjEsCi0weDA5LCAweDA2LCAweDA5LCAweDBlLCAweDEyLCAweDRmLCAweDEzLCAweDRhLCAweDAyLCAweGQwLCAweDM4LCAweDY4LAotMHgwMCwgMHgwYywgMHgwMCwgMHhlMCwgMHg5MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMCwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDgsIDB4ZDAsIDB4MDIsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MDUsIDB4ZDAsIDB4MGUsIDB4NGIsCi0weDk4LCAweDQyLCAweDAyLCAweGQwLCAweDAyLCAweDNiLCAweDk4LCAweDQyLCAweDBjLCAweGQxLCAweDAwLCAweDI5LAotMHgwMiwgMHhkMCwgMHhmOCwgMHg2YSwgMHgwMCwgMHgwYywgMHgwMCwgMHhlMCwKLTB4ZDAsIDB4NmMsIDB4NDAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MGUsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHg5OSwgMHgwMCwgMHgwMCwKLTB4MDcsIDB4OTksIDB4MDAsIDB4MDAsIDB4MGMsIDB4NDgsIDB4MDEsIDB4NjgsIDB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsCi0weDAxLCAweDY4LCAweDA5LCAweDBjLCAweDA1LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAyLCAweGQzLAotMHgwOCwgMHg0OCwgMHg4MCwgMHg2OCwgMHgwMSwgMHhlMCwgMHgwOCwgMHg0OCwgMHg0MCwgMHg2YywgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDAsIDB4MjEsIDB4MDMsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4NDAsIDB4MDgsIDB4MDEsIDB4ZDMsCi0weDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDA4LCAweDFjLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwMSwgMHgyNywKLTB4MWEsIDB4NGMsIDB4MjUsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NzIsIDB4ZmYsIDB4MDMsIDB4MWMsIDB4MTksIDB4NGEsCi0weDAyLCAweDIxLCAweDAxLCAweDI2LCAweDE4LCAweDQ4LCAweDAxLCAweDJiLCAweDFiLCAweGQxLCAweGNiLCAweDA0LAotMHgxZSwgMHg2MCwgMHg1NSwgMHgyMywgMHgwMywgMHg2MCwgMHgwMCwgMHgyMywgMHg0MywgMHg2MCwgMHgwNiwgMHg2OCwKLTB4NTUsIDB4MmUsIDB4MWIsIDB4ZDEsIDB4YWEsIDB4MjYsIDB4MDYsIDB4NjAsIDB4NDMsIDB4NjAsIDB4MDMsIDB4NjgsCi0weGFhLCAweDJiLCAweDE1LCAweGQxLCAweDA5LCAweDIzLCAweDAzLCAweDYwLCAweDA1LCAweDIzLCAweDBmLCAweDRmLAotMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwgMHgwMywgMHgyMywgMHgwZSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwKLTB4MTEsIDB4NjAsIDB4MDcsIDB4NjgsIDB4MDgsIDB4ZTAsIDB4MDgsIDB4MjMsIDB4MjMsIDB4NjAsIDB4MDQsIDB4MjMsCi0weDBhLCAweDRmLCAweGMwLCAweDQ2LCAweDNiLCAweDYwLCAweDExLCAweDYwLCAweDA2LCAweDYwLCAweDI3LCAweDY4LAotMHhjMCwgMHg0NiwgMHgyNSwgMHg2MCwgMHgzOCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NDAsCi0weDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAwLCAweDAwLCAweDI2LCAweDQwLCAweDAwLCAweDAwLCAweDI4LCAweDQwLAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhmZiwgMHhmNywgMHgzMCwgMHhmZiwgMHgwMSwgMHgyOCwgMHgwNSwgMHhkMSwKLTB4MTksIDB4NDgsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDksIDB4NDksIDB4NmIsIDB4MDgsIDB4NDAsIDB4MjIsIDB4ZTAsCi0weDE4LCAweDQ4LCAweDAxLCAweDY4LCAweDQ5LCAweDBjLCAweDA1LCAweGQyLCAweDAxLCAweDY4LCAweDA5LCAweDBjLAotMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgxNCwgMHg0OCwgMHgwMCwgMHg2OCwKLTB4MDAsIDB4MGMsIDB4MDEsIDB4ZTAsIDB4MTMsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDEyLCAweDRiLCAweGMwLCAweDE4LCAweDA4LCAweDI4LCAweDBiLCAweGQyLCAweDAxLCAweGEzLCAweDFiLCAweDVjLAotMHg1YiwgMHgwMCwgMHg5ZiwgMHg0NCwgMHgwNSwgMHgwMywgMHgwNywgMHgwMywgMHgwNywgMHgwNywgMHgwNSwgMHgwMywKLTB4MDMsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjEsCi0weDM4LCAweDYwLCAweDgwLCAweDA3LCAweDAwLCAweGQxLCAweDAwLCAweDIxLCAweDA4LCAweDA2LCAweDAwLCAweDBlLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzNCwgMHg2ZSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGZlLCAweDY2LCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDgyLCAweGIwLAotMHgwNywgMHgxYywgMHgwMSwgMHgyMCwgMHgwMSwgMHg5MCwgMHhmZiwgMHhmNywgMHhlNywgMHhmZSwgMHgwMSwgMHgyOCwKLTB4MTMsIDB4ZDEsIDB4MzgsIDB4MmYsIDB4MDEsIDB4ZDAsIDB4YTgsIDB4MmYsIDB4MDcsIDB4ZDEsIDB4MDAsIDB4MjYsCi0weGY2LCAweDQzLCAweDM0LCAweDFjLCAweGE4LCAweDJmLCAweDAyLCAweGQxLCAweDMwLCAweDFjLCAweDAwLCAweDk2LAotMHgzNSwgMHgxYywgMHgxMSwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwNiwgMHg2MiwgMHg0NCwgMHg2MiwgMHg4NSwgMHg2MiwKLTB4MDAsIDB4OTksIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjIsIDB4MDAsIDB4MjEsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDAxLCAweDYwLCAweDM4LCAweDJmLCAweDAxLCAweGQwLCAweGE4LCAweDJmLCAweDA1LCAweGQxLCAweDAxLCAweDIxLAotMHgwMSwgMHg2MCwgMHhhOCwgMHgyZiwgMHgwMSwgMHhkMSwgMHgwMywgMHgyMSwgMHgwMSwgMHg2MCwgMHgwMSwgMHg5OCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MzQsIDB4NmUsIDB4MjEsIDB4NDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgxMiwgMHg0YywgMHgyMSwgMHg2OCwgMHgxMiwgMHg0OCwgMHg4MSwgMHg0MiwgMHgwYiwgMHhkMCwgMHgwMCwgMHgyMywKLTB4MjEsIDB4MWMsIDB4ZTIsIDB4MWQsIDB4YzEsIDB4MzIsIDB4MDAsIDB4ZTAsCi0weDA4LCAweGMxLCAweDkxLCAweDQyLCAweGZjLCAweGQzLCAweDIwLCAweDYwLCAweGM4LCAweDIwLCAweGEwLCAweDgwLAotMHg2NywgMHg3MiwgMHgzOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxOCwgMHhmOCwgMHgyNywgMHg3MiwgMHgwYSwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4ZTAsIDB4NjAsIDB4MDksIDB4MmYsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MjcsIDB4ZTAsIDB4MTksCi0weDAxLCAweDdkLCAweDAxLCAweDMxLCAweDAxLCAweDc1LCAweGUwLCAweDg4LCAweDAxLCAweDMwLCAweGUwLCAweDgwLAotMHgwMSwgMHgyMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4ZWUsIDB4ZmYsIDB4YzAsIDB4ZDAsIDB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4YjQsIDB4MDgsIDB4NGEsCi0weGQxLCAweDFkLCAweDg5LCAweDMxLCAweDBiLCAweDdhLCAweDIwLCAweDJiLCAweDAxLCAweGQzLCAweDAwLCAweDIzLAotMHgwYiwgMHg3MiwgMHgwNywgMHgxYywgMHgwOCwgMHg3YSwgMHg0MywgMHgxYywgMHgwYiwgMHg3MiwgMHg4MCwgMHgxOCwKLTB4OTAsIDB4MzAsIDB4NDcsIDB4NzIsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDA3LCAweDQ5LCAweDAxLCAweDIyLCAweDEyLCAweDA0LCAweDA4LCAweDY4LCAweDAyLCAweDQwLCAweDAxLCAweDIwLAotMHgwMCwgMHgyYSwgMHgwNiwgMHhkMSwgMHgwYSwgMHg2OCwgMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwOSwgMHg2OCwKLTB4ODksIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDkwLCAweGI1LCAweDA3LCAweDFjLCAweDA5LCAweDRjLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweGZjLCAweGY3LAotMHg5MSwgMHhmZiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwgMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwKLTB4MDEsIDB4ZDEsIDB4MDAsIDB4MGMsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsCi0weGM1LCAweGZlLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGM0LCAweDY2LCAweDIxLCAweDQwLAotMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgMHg3OSwgMHg3YSwgMHg3NiwgMHg0OCwgMHgwMCwgMHgyMywgMHg3NiwgMHg0YywKLTB4MDEsIDB4MjksIDB4NWQsIDB4ZDEsIDB4YTIsIDB4ODgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4YTEsIDB4ODksCi0weDhhLCAweDQyLCAweDc0LCAweGRhLCAweGZhLCAweDdhLCAweDAwLCAweDJhLCAweDE1LCAweGQwLCAweDdhLCAweDZjLAotMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHg4YSwgMHg0MiwgMHgxMCwgMHhkOCwgMHgwMCwgMHg5YSwgMHg1MSwgMHgxYywKLTB4YTEsIDB4ODAsIDB4YTEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODEsIDB4NzgsIDB4NmMsIDB4NmIsIDB4NGUsCi0weGMwLCAweDQ2LCAweGYwLCAweDgwLCAweGEwLCAweDZhLCAweDU4LCAweDIzLCAweDc5LCAweDZjLCAweDU5LCAweDQzLAotMHg0MCwgMHgxOCwgMHhjMSwgMHgxYSwgMHgyOCwgMHhlMCwgMHgyMiwgMHg4OCwgMHgwMSwgMHgzMiwgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MjIsIDB4ODAsIDB4OGEsIDB4NDIsIDB4MDAsIDB4ZGIsIDB4MjMsIDB4ODAsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI5LCAweDY5LCAweGRkLCAweDVmLCAweDRjLCAweGE0LCAweDZhLCAweDVlLCAweDRiLCAweDFkLCAweDg4LAotMHg1OCwgMHgyMywgMHg2YiwgMHg0MywgMHhlMywgMHgxOCwgMHhkZSwgMHgxZCwgMHgwMSwgMHgzNiwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MTUsIDB4ZDEsIDB4NTgsIDB4NDksCi0weDAwLCAweDlhLCAweDAxLCAweDMyLCAweDhhLCAweDgwLCAweDhhLCAweDg4LCAweGMwLCAweDQ2LCAweDQyLCAweDgxLAotMHgwOCwgMHg4OCwgMHgwMSwgMHgzMCwgMHg1NCwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHg1OCwgMHgyMCwKLTB4NjgsIDB4NDMsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzksIDB4ZmIsIDB4ZjAsIDB4ODgsCi0weDAwLCAweDA0LCAweDAwLCAweDE0LCAweDk1LCAweGUwLCAweDRkLCAweDRiLCAweDAxLCAweDM1LCAweDJkLCAweDA0LAotMHgyZCwgMHgwYywgMHgxZCwgMHg4MCwgMHg4ZCwgMHg0MiwgMHgwMSwgMHhkYiwgMHgwMCwgMHgyNSwgMHgxZCwgMHg4MCwKLTB4MDEsIDB4MzIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MTQsIDB4OTEsIDB4NDIsIDB4Y2UsIDB4ZGMsIDB4ODEsIDB4ZTAsCi0weGUxLCAweDg4LCAweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDE4LCAweGRhLCAweGY5LCAweDdhLCAweDAwLCAweDI5LAotMHgyZiwgMHhkMCwgMHg3OSwgMHg2YywgMHg0OSwgMHgwNCwgMHg0OSwgMHgwYywgMHg3OSwgMHg2NCwgMHgyYSwgMHhkMCwKLTB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MjcsIDB4ZDgsIDB4ZTEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZTEsIDB4ODAsCi0weGUxLCAweDg4LCAweGMwLCAweDQ2LCAweDgxLCAweDgxLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDc4LCAweDZjLAotMHgxOCwgMHg0MywgMHgzYSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHgwMCwgMHhlMCwgMHg2MywgMHhlMCwKLTB4ZTAsIDB4NmEsIDB4NzksIDB4NmMsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsCi0weGMxLCAweDFmLCAweDU5LCAweDM5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBmLCAweGZiLCAweGUwLCAweDZhLAotMHg3OSwgMHg2YywgMHg0YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHgwMSwgMHg4MCwgMHgxOCwgMHgwMSwgMHgzOSwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4NjAsIDB4MzgsIDB4MDAsIDB4ZjAsIDB4ODksIDB4ZmIsIDB4YjYsIDB4ZTcsCi0weDRhLCAweGUwLCAweDYxLCAweDg4LCAweDAxLCAweDMxLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg2MSwgMHg4MCwgMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkYiwgMHg2MywgMHg4MCwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4M2UsIDB4ZGQsIDB4MjQsIDB4NGMsIDB4ZTQsIDB4NmEsIDB4MjMsIDB4NGIsCi0weDVkLCAweDg4LCAweDZiLCAweDAwLCAweDViLCAweDE5LCAweDViLCAweDAxLCAweGUzLCAweDE4LCAweGRlLCAweDFkLAotMHgwMSwgMHgzNiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwKLTB4MjAsIDB4ZDEsIDB4MWMsIDB4NGUsIDB4ZjEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZjEsIDB4ODAsIDB4ZjEsIDB4ODgsCi0weGMwLCAweDQ2LCAweDgxLCAweDgxLCAweDcwLCAweDg4LCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDAxLCAweDMwLAotMHgxOCwgMHg0MywgMHgxNywgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg4MCwgMHg2OCwgMHgwMCwgMHg0MCwgMHgxOSwKLTB4NDAsIDB4MDEsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZmEsIDB4NzEsIDB4ODgsCi0weDRhLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDAxLCAweGYwLCAweDZhLCAweDgwLCAweDE4LCAweDAwLCAweGYwLAotMHg0ZCwgMHhmYiwgMHgwZSwgMHg0OSwgMHhjOCwgMHg4OCwgMHg3OSwgMHhlNywgMHgwYiwgMHg0YiwgMHgwMSwgMHgzNSwKLTB4MmQsIDB4MDQsIDB4MmQsIDB4MGMsIDB4NWQsIDB4ODAsIDB4OTUsIDB4NDIsIDB4MDEsIDB4ZGIsIDB4MDAsIDB4MjUsCi0weDVkLCAweDgwLCAweDAxLCAweDMxLCAweDA5LCAweDA0LCAweDA5LCAweDE0LCAweDhhLCAweDQyLCAweGMyLCAweGRjLAotMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHhmOCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGM0LCAweDY2LCAweDIxLCAweDQwLCAweGYwLCAweGI0LCAweDA2LCAweDFjLCAweDAxLCAweDIzLCAweGRiLCAweDAzLAotMHgzMywgMHg0MCwgMHgwMSwgMHgyNCwgMHg0NCwgMHg0ZiwgMHgwMCwgMHgyMCwgMHg0NCwgMHg0YSwgMHg0NSwgMHg0ZCwKLTB4ZDEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDAsIDB4MmIsIDB4NDEsIDB4ZDAsIDB4ZTMsIDB4MDMsIDB4ZjMsIDB4MWEsCi0weDczLCAweGQwLCAweGVlLCAweDg5LCAweDllLCAweDQyLCAweDcxLCAweGQzLCAweGVlLCAweDg4LCAweDAwLCAweDJlLAotMHg2ZCwgMHhkMCwgMHhlZCwgMHg2YSwgMHg1ZSwgMHgxZSwgMHg3MywgMHgwMCwgMHg5YiwgMHgxOSwgMHg1YiwgMHgwMSwKLTB4ZWQsIDB4MTgsIDB4YWUsIDB4NjgsIDB4MzYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsCi0weGNlLCAweDg5LCAweDAxLCAweDM2LCAweGNlLCAweDgxLCAweDQwLCAweDM1LCAweGFkLCAweDhiLCAweGFkLCAweDAwLAotMHgzNSwgMHg0ZSwgMHg3NiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3MCwgMHg1MSwgMHg1NSwgMHg4OSwgMHgwMSwgMHgzNSwKLTB4NTUsIDB4ODEsIDB4MzIsIDB4NGUsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4OTAsIDB4NjAsIDB4ZjIsIDB4NmEsCi0weGQyLCAweDE4LCAweDkwLCAweDYzLCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweGQwLCAweDYzLCAweGYyLCAweDZhLAotMHhkMiwgMHgxOCwgMHgxMCwgMHg2NCwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHg1MCwgMHg2NCwgMHhmMiwgMHg2YSwKLTB4ZDIsIDB4MTgsIDB4OTAsIDB4NjQsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjQsIDB4ZjAsIDB4ODgsCi0weDAxLCAweDM4LCAweGYwLCAweDgwLCAweGYwLCAweDg4LCAweGMwLCAweDQ2LCAweDg4LCAweDgxLCAweDI0LCAweDQ5LAotMHgwMCwgMHgyOCwgMHgzOSwgMHhkMSwgMHg0ZiwgMHg4MCwgMHgzNywgMHhlMCwgMHgwMCwgMHgyZSwgMHgzOCwgMHhkOSwKLTB4YWIsIDB4ODksIDB4YjMsIDB4NDIsIDB4MzAsIDB4ZDMsIDB4YWIsIDB4ODgsIDB4MDAsIDB4MmIsIDB4MmMsIDB4ZDAsCi0weDUzLCAweDg5LCAweDAxLCAweDMzLCAweDUzLCAweDgxLCAweDJhLCAweDFjLCAweGFkLCAweDZhLCAweDU4LCAweDIzLAotMHgwMSwgMHgzZSwgMHg3MywgMHg0MywgMHhlZCwgMHgxOCwgMHhhZSwgMHg2OCwgMHgzNiwgMHgwNiwgMHgzNiwgMHgwZSwKLTB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsIDB4Y2UsIDB4ODksIDB4MDEsIDB4MzYsIDB4Y2UsIDB4ODEsIDB4YTgsIDB4NjAsCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweGE4LCAweDYzLCAweDk1LCAweDZhLCAweGVkLCAweDE4LCAweGU4LCAweDYzLAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHgyOCwgMHg2NCwgMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHg2OCwgMHg2NCwKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4YTgsIDB4NjQsIDB4OTUsIDB4NmEsIDB4ZWIsIDB4MTgsIDB4ZDgsIDB4NjQsCi0weDkwLCAweDg4LCAweDAxLCAweDM4LCAweDkwLCAweDgwLCAweDkwLCAweDg4LCAweGMwLCAweDQ2LCAweDQ4LCAweDgxLAotMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgwMSwgMHhlMCwgMHgwNCwgMHhlMCwgMHgwMywgMHhlMCwgMHgxNywgMHg4MCwKLTB4MjAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4Y2EsIDB4ODksIDB4MDEsIDB4MzIsIDB4Y2EsIDB4ODEsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgyMSwgMHg0MSwgMHg2MCwgMHgxMCwgMHg0OSwKLTB4NGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTAsIDB4ZDEsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDAsCi0weGNhLCAweDFkLCAweDE5LCAweDMyLCAweDEyLCAweDc5LCAweDAwLCAweDJhLCAweDA4LCAweGQwLCAweDRhLCAweDY5LAotMHgwMCwgMHgyYSwgMHgwYiwgMHhkMSwgMHg4OCwgMHg2MSwgMHg0OCwgMHg2MSwKLTB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGEsIDB4NjksIDB4MDAsIDB4MmEsCi0weDAyLCAweGQxLCAweDg4LCAweDYxLCAweDQ4LCAweDYxLCAweGY3LCAweGU3LCAweDhhLCAweDY5LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MCwgMHg4OCwgMHg2MSwgMHhmMiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MmEsIDB4NDgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NGMsIDB4ZDAsIDB4MDgsIDB4MjIsCi0weGMxLCAweDY4LCAweDBhLCAweDQwLCAweDAwLCAweDI3LCAweDI3LCAweDRiLCAweGQ5LCAweDFkLCAweGI5LCAweDMxLAotMHgwMCwgMHgyYSwgMHgxMSwgMHhkMCwgMHgwNCwgMHgyMiwgMHgyNSwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MSwKLTB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsCi0weDIzLCAweDRjLCAweGMwLCAweDQ2LCAweGNjLCAweDYyLCAweDIzLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYzLAotMHg0ZiwgMHg2MywgMHgxMiwgMHhlMCwgMHgwNSwgMHgyMiwgMHgyMSwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MSwKLTB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsCi0weDFmLCAweDRjLCAweGMwLCAweDQ2LCAweGNjLCAweDYyLCAweDFmLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYzLAotMHgxZSwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MywgMHg0MCwgMHgyNCwgMHhjYywgMHg4MiwgMHg0ZiwgMHg4MywKLTB4MWMsIDB4NGYsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZDksIDB4OGMsIDB4MDAsIDB4MDUsIDB4MTksCi0weDZkLCAweDZhLCAweDdkLCAweDQwLCAweGU0LCAweDE4LCAweGZmLCAweDM0LCAweDAxLCAweDM0LCAweDY1LCAweDYyLAotMHgwMSwgMHgzMSwgMHg5MSwgMHg0MiwgMHhmNCwgMHhkMywgMHgxMCwgMHgyOSwgMHgwNywgMHhkMiwgMHg4YSwgMHgwMCwKLTB4ZDIsIDB4MTgsIDB4ZmYsIDB4MzIsIDB4MDEsIDB4MzIsIDB4NTcsIDB4NjIsIDB4MDEsIDB4MzEsIDB4MTAsIDB4MjksCi0weGY3LCAweGQzLCAweDExLCAweDQ5LCAweDAwLCAweGYwLCAweDIyLCAweGY4LCAweGIwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwKLTB4MjgsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0weGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLCAweDIwLCAweDAxLCAweDQwLCAweDAwLAotMHg2NywgMHg0NSwgMHgyMywgMHgwMSwgMHhlZiwgMHhjZCwgMHhhYiwgMHg4OSwgMHg5OCwgMHhiYSwgMHhkYywgMHhmZSwKLTB4MTAsIDB4MzIsIDB4NTQsIDB4NzYsIDB4YzMsIDB4ZDIsIDB4ZTEsIDB4ZjAsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzYsCi0weDMwLCAweDgwLCAweDIwLCAweDQwLCAweGIwLCAweGI1LCAweDBmLCAweDFjLCAweDE1LCAweDRkLCAweGU5LCAweDFkLAotMHhjOSwgMHgzMSwgMHgxNSwgMHg0YywgMHgyMywgMHgxYywgMHgxNSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywKLTB4NDQsIDB4ZmIsIDB4ZTksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4MWUsIDB4MzEsIDB4MjMsIDB4MWMsIDB4MGQsIDB4MWMsCi0weDExLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDNiLCAweGZiLCAweDI5LCAweDFjLCAweDIzLCAweDFjLAotMHgwZSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywgMHgzNSwgMHhmYiwgMHgzOSwgMHgxYywgMHgyMywgMHgxYywKLTB4MGMsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MmYsIDB4ZmIsIDB4MDAsIDB4MjEsIDB4MGIsIDB4NDgsCi0weGMyLCAweDFkLCAweDE5LCAweDMyLCAweDUxLCAweDcxLCAweDAxLCAweDIxLCAweGZmLCAweDMwLCAweDAxLCAweDMwLAotMHg0MSwgMHg2MiwgMHgwOCwgMHgxYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4MjgsIDB4MDAsIDB4MDMsIDB4MDAsCi0weDQwLCAweDAwLCAweDAyLCAweDAwLCAweDE0LCAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHgzNywgMHg0YSwgMHg1MCwgMHg2OSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MzMsIDB4NGIsIDB4MDEsIDB4MjksCi0weDQ5LCAweGQxLCAweDFmLCAweDY4LCAweDE5LCAweDFjLCAweDMyLCAweDRiLCAweDlmLCAweDQyLCAweDA0LCAweGQxLAotMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMywKLTB4OWYsIDB4MDAsIDB4Y2MsIDB4NTksIDB4NTUsIDB4NjksIDB4ZWYsIDB4MTksIDB4M2MsIDB4NjEsIDB4MDEsIDB4MzMsCi0weDA1LCAweDJiLCAweGY3LCAweGQzLCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDAyLCAweDIzLCAweDE4LCAweDQzLAotMHg1MywgMHg2OSwgMHhjMCwgMHg0NiwgMHg5OCwgMHg2MCwgMHg1MCwgMHg2OSwgMHgwOCwgMHgyMywgMHhjMiwgMHg2OCwKLTB4MTMsIDB4NDAsIDB4MjUsIDB4NGYsIDB4ZmEsIDB4MWQsIDB4YjksIDB4MzIsIDB4MDAsIDB4MmIsIDB4MDIsIDB4ZDAsCi0weDA0LCAweDIzLCAweDIzLCAweDRjLCAweDAxLCAweGUwLCAweDA1LCAweDIzLCAweDIyLCAweDRjLCAweGMwLCAweDQ2LAotMHgxNCwgMHg2MSwgMHg0MCwgMHgyNCwgMHhkNCwgMHg4MiwgMHgwMCwgMHgyNCwgMHg1NCwgMHg4MywgMHgyMCwgMHg0YywKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MGMsIDB4ZDksIDB4OTUsIDB4MDAsCi0weDQ2LCAweDE5LCAweDc2LCAweDZhLCAweDY2LCAweDQwLCAweGVkLCAweDE5LCAweGZmLCAweDM1LCAweDAxLCAweDM1LAotMHg2ZSwgMHg2MiwgMHgwMSwgMHgzMiwgMHg5YSwgMHg0MiwgMHhmNCwgMHhkMywgMHgxMCwgMHgyYSwgMHgwNywgMHhkMiwKLTB4OTMsIDB4MDAsIDB4ZGIsIDB4MTksIDB4ZmYsIDB4MzMsIDB4MDEsIDB4MzMsIDB4NWMsIDB4NjIsIDB4MDEsIDB4MzIsCi0weDEwLCAweDJhLCAweGY3LCAweGQzLCAweGZmLCAweGY3LCAweDcwLCAweGZmLCAweGJjLCAweGU3LCAweDAwLCAweDIxLAotMHg4ZiwgMHgwMCwgMHhkYywgMHg1OSwgMHg1NSwgMHg2OSwgMHhlZiwgMHgxOSwgMHg3YywgMHg2MiwgMHgwMSwgMHgzMSwKLTB4MDUsIDB4MjksIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDUxLCAweDY5LCAweGMwLCAweDQ2LCAweDg4LCAweDYwLCAweDUwLCAweDY5LCAweDQwLCAweDY4LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MSwgMHgwOSwgMHg0OCwgMHhmYywgMHhmNywgMHhhNCwgMHhmYSwgMHhhNCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjcsIDB4NDUsIDB4MjMsIDB4MDEsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDI4LCAweDAxLCAweDQwLCAweDAwLCAweDIwLCAweDAxLCAweDQwLCAweDAwLAotMHg1YywgMHg1YywgMHg1YywgMHg1YywgMHgxMSwgMHgzMSwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKLTB4M2IsIDB4NDgsIDB4M2MsIDB4NGMsIDB4MDgsIDB4MjEsIDB4MjAsIDB4NjAsIDB4YTEsIDB4ODAsIDB4MDAsIDB4MjAsCi0weDIwLCAweDgxLCAweGUxLCAweDgwLCAweDYwLCAweDgxLCAweDM5LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYwLAotMHgzOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MSwgMHgzOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MSwKLTB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsIDB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjEsCi0weDM2LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYyLCAweDM2LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYyLAotMHgzNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MiwgMHgzNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MiwKLTB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjMsIDB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjMsCi0weDMzLCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYzLCAweDMzLCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYzLAotMHgzMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2NCwgMHgzMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NCwKLTB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjQsIDB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjQsCi0weDMwLCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDY1LCAweDMwLCAweDQ5LCAweGM4LCAweDY4LCAweDAyLCAweDA0LAotMHg4OSwgMHg2OSwgMHg0YSwgMHg0MCwgMHhlMywgMHgxZCwgMHg3OSwgMHgzMywgMHgwOSwgMHgwNCwgMHhjOSwgMHg0MywKLTB4YzAsIDB4NDMsIDB4NDgsIDB4NDAsIDB4ZTEsIDB4MWQsIDB4YjksIDB4MzEsIDB4ZGEsIDB4NjMsIDB4MDgsIDB4NjAsCi0weDI5LCAweDRkLCAweDIxLCAweDFjLCAweDJiLCAweDFjLCAweDI5LCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LAotMHgzZSwgMHhmYSwgMHgyOCwgMHg0YSwgMHhlMSwgMHgxZCwgMHhiNSwgMHgzMSwgMHgwMSwgMHgyMCwgMHgyYiwgMHgxYywKLTB4MGUsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzYsIDB4ZmEsIDB4MjQsIDB4NGEsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MWMsCi0weDJiLCAweDFjLCAweGZjLCAweGY3LCAweDMwLCAweGZhLCAweGUxLCAweDFkLCAweDRkLCAweDMxLCAweDJiLCAweDFjLAotMHgyMCwgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgyOSwgMHhmYSwgMHhlMCwgMHgxZCwgMHg1ZCwgMHgzMCwKLTB4MDEsIDB4NjgsIDB4MDAsIDB4MjksIDB4ZmMsIDB4ZDAsIDB4NjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MzgsIDB4NjUsCi0weDIwLCAweDZlLCAweGMwLCAweDQ2LCAweDc4LCAweDY1LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg4MCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHhiOSwgMHgyMCwgMHg0MCwgMHg4MSwgMHg4MSwgMHg0OCwgMHhiZCwKLTB4NzksIDB4NTYsIDB4MjMsIDB4OGMsIDB4OTMsIDB4MGMsIDB4ODIsIDB4OTUsIDB4MWQsIDB4MGUsIDB4MTIsIDB4Y2YsCi0weDliLCAweDNiLCAweGMwLCAweGU5LCAweGU2LCAweDU1LCAweDdjLCAweDgyLCAweDk5LCAweGY2LCAweDc4LCAweDAyLAotMHhkMSwgMHhkNywgMHgyNSwgMHg3MywgMHg3MiwgMHg4YywgMHgzMywgMHgxMCwgMHhmNywgMHgwMywgMHhmMSwgMHg0MiwKLTB4NmMsIDB4OWIsIDB4NGEsIDB4YTcsIDB4ODIsIDB4OGUsIDB4MjMsIDB4YTksIDB4OTAsIDB4YjEsIDB4ODIsIDB4OGUsCi0weGRjLCAweDNmLCAweGZiLCAweDI5LCAweDAwLCAweDYyLCAweDIyLCAweDQ1LCAweDg4LCAweDJiLCAweGYxLCAweDg1LAotMHgxMiwgMHg2MSwgMHhkMSwgMHg3MywgMHg2ZSwgMHhiMSwgMHgxMSwgMHgxNiwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4MDAsCi0weDE0LCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLAotMHgzMywgMHhmOCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0YywgMHhmZiwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgxZiwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCi0weGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLCAweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LAotMHgwOCwgMHg0MywgMHgzOCwgMHg2NSwgMHgyMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NSwgMHg2MCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4YjgsIDB4NjUsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksIDB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHgxZiwgMHgxOCwgMHhiZiwgMHg2OSwgMHg1YiwgMHgxOCwKLTB4NWYsIDB4NjIsIDB4MDEsIDB4MzIsIDB4MDUsIDB4MmEsIDB4ZjcsIDB4ZDMsIDB4MDcsIDB4N2EsIDB4ZmIsIDB4MDgsCi0weDAzLCAweGQzLCAweDAwLCAweDIzLCAweDkyLCAweDAwLCAweDUyLCAweDE4LCAweDEzLCAweDYyLCAweDA3LCAweDZiLAotMHhjMCwgMHg0NiwgMHg4ZiwgMHg2MywgMHhjNywgMHg2YSwgMHhjMCwgMHg0NiwgMHhjZiwgMHg2MywgMHg4NywgMHg2YiwKLTB4YzAsIDB4NDYsIDB4MGYsIDB4NjQsIDB4NDcsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGYsIDB4NjQsIDB4MDcsIDB4NmMsCi0weGMwLCAweDQ2LCAweDhmLCAweDY0LCAweGMyLCAweDZiLCAweGMwLCAweDQ2LCAweGNhLCAweDY0LCAweGMyLCAweDg4LAotMHhjMCwgMHg0NiwgMHgwYSwgMHg4MCwgMHg4MiwgMHg3YSwgMHgxMiwgMHgwNiwgMHgwMywgMHg3YSwgMHgxYiwgMHgwNCwKLTB4MWEsIDB4NDMsIDB4YzMsIDB4ODgsIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4NDMsIDB4N2EsIDB4ZGIsIDB4MDcsCi0weDFhLCAweDQzLCAweDhhLCAweDYwLCAweDE3LCAweDFjLCAweDgzLCAweDdhLCAweDVhLCAweDA4LCAweDA1LCAweGQzLAotMHgxNCwgMHgyMiwgMHgxYywgMHgxYywgMHhhMywgMHgwOCwgMHgwMiwgMHhkMiwgMHgxNSwgMHgyMiwgMHgwMCwgMHhlMCwKLTB4MDAsIDB4MjIsIDB4MDAsIDB4N2EsIDB4NDMsIDB4MDgsIDB4MTAsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsCi0weDg4LCAweDIwLCAweDEwLCAweDQzLCAweDAxLCAweGUwLCAweDgwLCAweDIwLCAweDEwLCAweDQzLCAweDNhLCAweDBhLAotMHgxMiwgMHgwMiwgMHgwMSwgMHgyMywgMHgxYSwgMHg0MywgMHhjOCwgMHg2MCwgMHg4YSwgMHg2MCwgMHgwOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4NzgsIDB4ZmQsIDB4MDUsIDB4ZTAsIDB4MzgsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsCi0weDE4LCAweDQzLCAweDg4LCAweDYwLCAweGNhLCAweDYwLCAweDAzLCAweDQ4LCAweDAxLCAweDg5LCAweDAxLCAweDMxLAotMHgwMSwgMHg4MSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjQsIDB4MDIsIDB4NmQsIDB4MTQsIDB4NGMsIDB4MTUsIDB4MWMsIDB4ZTcsIDB4NjksIDB4YmQsIDB4NDAsCi0weDEzLCAweDFjLCAweDI2LCAweDZhLCAweGYzLCAweDQwLCAweDVkLCAweDQwLCAweDJlLCAweDFjLCAweDQ1LCAweDZkLAotMHhiZCwgMHg0MCwgMHg2ZSwgMHg0MCwgMHgyYiwgMHgxYywgMHgzNSwgMHgxYywgMHhmZCwgMHg0MCwgMHgyZiwgMHgxYywKLTB4YmIsIDB4MDAsIDB4NjUsIDB4NmEsIDB4ZWIsIDB4NTgsIDB4MDAsIDB4MmIsIDB4MDgsIDB4ZDAsIDB4MjMsIDB4NjksCi0weDAxLCAweDM3LCAweDlmLCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDI3LCAweGJlLCAweDAwLCAweGFlLCAweDU5LAotMHgwMCwgMHgyZSwgMHhmNywgMHhkMSwgMHhhNCwgMHg2OSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg0MywgMHgwNSwgMHg0YiwKLTB4MTksIDB4NDMsIDB4YmEsIDB4MDAsIDB4YTksIDB4NTAsIDB4NDAsIDB4MzAsIDB4ODcsIDB4ODMsIDB4ZjAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMywgMHgwMCwgMHgyOSwgMHgwNSwgMHhkOSwgMHgwNywgMHg3OCwKLTB4N2EsIDB4NDAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzMsIDB4OGIsIDB4NDIsIDB4ZjksIDB4ZDMsIDB4ZDAsIDB4NDMsCi0weDAwLCAweDA2LCAweDAwLCAweDBlLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgwMCwgMHgyNCwgMHhmZiwgMHgyNiwgMHgwOSwgMHgzNiwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5YSwgMHhmOCwKLTB4MDAsIDB4ZjAsIDB4YjgsIDB4ZjksIDB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzcsIDB4ZmEsIDB4M2QsIDB4NzAsCi0weDI4LCAweDFjLCAweDAxLCAweDM3LCAweDAxLCAweDM0LCAweGI0LCAweDQyLCAweGYxLCAweGQzLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwMCwgMHhmMCwgMHg5MywgMHhmOCwgMHgwMCwgMHhmMCwKLTB4YTcsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZmEsIDB4MzgsIDB4MGEsIDB4ZjYsIDB4ZDMsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYzLCAweGI1LCAweDgyLCAweGIwLCAweDAyLCAweDk4LAotMHg0MSwgMHgwMiwgMHg1MywgMHgyMCwgMHgwMCwgMHhmMCwgMHg2NCwgMHhmOCwgMHgwMCwgMHhmMCwgMHhhOCwgMHhmYSwKLTB4ZmYsIDB4ZjcsIDB4ZTgsIDB4ZmYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MmUsIDB4MjAsCi0weDAwLCAweDkwLCAweDAwLCAweDI1LCAweDAwLCAweDI3LCAweDAyLCAweDk4LCAweDAxLCAweDI4LCAweDA0LCAweGQxLAotMHgwMCwgMHg5OCwgMHg4NCwgMHg0MiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyNiwKLTB4MDksIDB4ZTAsIDB4MDEsIDB4OTgsIDB4NDEsIDB4MWMsIDB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4NjAsIDB4ZjgsCi0weDAwLCAweGYwLCAweDdlLCAweGY5LCAweDA2LCAweDFjLCAweDAwLCAweGYwLCAweDhkLCAweGZhLCAweGY4LCAweDAwLAotMHg4NiwgMHg0MCwgMHgzNSwgMHg0MywgMHgwMSwgMHgzNCwgMHgwMSwgMHgzNywgMHgwNCwgMHgyZiwgMHhlNiwgMHhkMywKLTB4MDMsIDB4OTksIDB4MjAsIDB4YzEsIDB4MDMsIDB4OTEsIDB4ZmYsIDB4MjMsIDB4MDksIDB4MzMsIDB4OWMsIDB4NDIsCi0weGRkLCAweGQzLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI1LAotMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgwMSwgMHgyYywgMHgyYSwgMHhkMCwgMHgxNiwgMHg0OCwgMHhjMCwgMHg2ZiwKLTB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjYsIDB4MjAsIDB4Y2YsCi0weGIxLCAweDAwLCAweDg0LCAweDIwLCAweDAwLCAweGYwLCAweDI0LCAweGY4LCAweDI4LCAweDFjLCAweDAwLCAweGYwLAotMHhkZiwgMHhmOSwgMHgyOCwgMHgwYSwgMHgwMCwgMHhmMCwgMHhkYywgMHhmOSwgMHgyOCwgMHgwYywgMHgwMCwgMHhmMCwKLTB4ZDksIDB4ZjksIDB4MjgsIDB4MGUsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4ZjksIDB4MDAsIDB4ZjAsIDB4NWMsIDB4ZmEsCi0weDAxLCAweDM2LCAweDQyLCAweDJlLCAweGU5LCAweGQzLCAweDYxLCAweDAyLCAweDgzLCAweDIwLCAweDAwLCAweGYwLAotMHgwZiwgMHhmOCwgMHgwMCwgMHhmMCwgMHg1MywgMHhmYSwgMHhmZiwgMHhmNywgMHg5MywgMHhmZiwgMHgwNCwgMHg0OCwKLTB4YzAsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgwMCwgMHhmMCwgMHg1OSwgMHhmYSwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmOSwKLTB4MzgsIDB4MGMsIDB4MDAsIDB4ZjAsIDB4YjMsIDB4ZjksIDB4MzgsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjksCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweGFkLCAweGY5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywgMHg1NCwgMHgyMCwgMHhmZiwgMHhmNywgMHhlNywgMHhmZiwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4ZjAsIDB4YTIsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4MDAsIDB4ZjAsCi0weDNkLCAweGZhLCAweDU3LCAweDIwLCAweDAwLCAweGYwLCAweDlhLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg5MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHhmYSwgMHg2ZiwgMHgyMCwgMHgyMywgMHgxNCwgMHg2OCwgMHg5YywgMHg0MywKLTB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmYsIDB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHhmYSwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MTQsIDB4NjgsIDB4OWMsIDB4NDMsIDB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODcsIDB4ZmYsCi0weGY4LCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MGYsIDB4MWMsIDB4MTgsIDB4NGUsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsCi0weDAxLCAweDYwLCAweDYxLCAweDAyLCAweDUzLCAweDIwLCAweGZmLCAweGY3LCAweGE1LCAweGZmLCAweDAwLCAweGYwLAotMHhlOSwgMHhmOSwgMHhmZiwgMHhmNywgMHgyOSwgMHhmZiwgMHhmOCwgMHgxZCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgyYywKLTB4MDMsIDB4ZDEsIDB4MjIsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4MGYsIDB4ZTAsIDB4NDQsIDB4MWMsCi0weGZmLCAweGY3LCAweGFhLCAweGZmLCAweDAwLCAweGYwLCAweGM4LCAweGY4LCAweDA3LCAweDFjLCAweDAwLCAweGYwLAotMHhkNywgMHhmOSwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHhhMiwgMHhmZiwgMHgwMCwgMHhmMCwgMHhjMCwgMHhmOCwKLTB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZjksIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDI4LCAweDAyLCAweDM4LCAweDQzLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHhjMiwgMHhiMCwKLTB4MTQsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MmYsIDB4MmYsIDB4ZDAsIDB4NzksIDB4MDIsCi0weDE5LCAweDRlLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLAotMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHg2YiwgMHhmZiwgMHgwMCwgMHhmMCwgMHhhZiwgMHhmOSwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4ZDYsIDB4ZmUsIDB4NmEsIDB4NDYsIDB4ZTgsIDB4MWQsCi0weDA1LCAweDMwLCAweDE0LCAweDU0LCAweDIxLCAweDBhLCAweDY4LCAweDQ0LCAweDQxLCAweDcwLCAweDY4LCAweDQ2LAotMHgwMCwgMHg5OSwgMHgwYywgMHgzMCwgMHhmZiwgMHhmNywgMHhiYSwgMHhmZSwgMHgwMiwgMHhhYiwgMHgxOCwgMHg3MCwKLTB4MDAsIDB4MjAsIDB4NTgsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsCi0weGZmLCAweGY3LCAweGIyLCAweGZlLCAweDAyLCAweGFiLCAweDU4LCAweDcwLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgxNSwgMHhmZiwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4NDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZmLCAweGI1LCAweGMyLCAweGIwLCAweDA3LCAweDFjLCAweDAxLCAweDJmLAotMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwgMHgzNiwgMHhlMCwgMHg2YiwgMHg0NiwgMHgwMCwgMHgyMCwgMHhjNCwgMHg0MywKLTB4MTAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4NDIsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MzAsCi0weDAzLCAweDFjLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDBhLCAweGQ5LCAweDBlLCAweDg4LCAweGMwLCAweDQ2LAotMHgwNiwgMHg3MCwgMHgwZSwgMHg4OCwgMHgzNiwgMHgxMiwgMHg0NiwgMHg3MCwgMHgwMiwgMHgzMCwgMHgwMiwgMHgzMSwKLTB4MDIsIDB4MzQsIDB4OTQsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4OTIsIDB4MTgsIDB4MWMsIDB4MTEsIDB4MWMsCi0weGZmLCAweGY3LCAweDdjLCAweGZlLCAweDA0LCAweDFjLCAweDAwLCAweDIwLCAweDAxLCAweDkwLCAweDAyLCAweGFiLAotMHgxYywgMHg3MCwgMHg1OCwgMHg3MCwgMHg5ZCwgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwgMHhmZiwgMHhmNywKLTB4NzEsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NDUsIDB4OWIsIDB4MWQsIDB4MDYsIDB4MmQsIDB4MGUsCi0weGFjLCAweDQyLCAweDAzLCAweGQxLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDNlLCAweGZmLAotMHgwMSwgMHgyMCwgMHhhYywgMHg0MiwgMHgwMCwgMHhkMSwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YzIsIDB4YjAsIDB4MGYsIDB4MWMsIDB4NDEsIDB4MDIsCi0weDE0LCAweDRjLCAweGUwLCAweDZmLCAweDIwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLAotMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHhlZiwgMHhmZSwgMHgwMCwgMHhmMCwgMHgzMywgMHhmOSwgMHhmZiwgMHhmNywKLTB4NzMsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NWEsIDB4ZmUsIDB4ZTAsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAyLCAweGFkLCAweDAxLCAweDYwLCAweDZkLCAweDc4LCAweDAwLCAweDI0LAotMHgwMiwgMHhhYiwgMHg1YywgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwgMHhmZiwgMHhmNywgMHgzYywgMHhmZSwKLTB4YTgsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4OTgsIDB4ODcsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MjAsIDB4MWMsCi0weDAwLCAweGUwLCAweDAxLCAweDIwLCAweDQyLCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4YjQsIDB4MjIsIDB4OWYsIDB4ZTUsIDB4YjQsIDB4MzIsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4ODEsIDB4MDMsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHgwMSwgMHgwMywgMHg4MCwgMHhlMSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHg4MSwgMHgwMiwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHgwMSwgMHgwMiwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAweDgxLCAweDAxLCAweDgwLCAweGUxLAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDkzLCAweGU1LCAweDAxLCAweDAxLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDgxLCAweDAwLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDAxLCAweDAwLCAweDgwLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LAotMHhhNCwgMHgyMSwgMHg5ZiwgMHhlNSwgMHhhOCwgMHgzMSwgMHg5ZiwgMHhlNSwgMHhhMCwgMHgxMywgMHhhMCwgMHhlMSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgyMCwgMHgxMywgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHhhMCwgMHgxMiwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDIwLCAweDEyLCAweGEwLCAweGUxLAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweGEwLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDIwLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4YTAsIDB4MTAsIDB4YTAsIDB4ZTEsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4YTAsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDcwLCAweDMwLCAweDlmLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHgzNCwgMHgyMCwgMHg5ZiwgMHhlNSwKLTB4M2MsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGY4LCAweDAwLCAweDE4LCAweDQwLAotMHgwNCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhmYywgMHgwMCwgMHgxOCwgMHg0MCwKLTB4ODAsIDB4YjUsIDB4MDAsIDB4ZjAsIDB4MGMsIDB4ZjgsIDB4MDAsIDB4MjcsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDQ3LCAweGY4LCAweDc4LCAweDFjLCAweDA3LCAweDA0LCAweDNmLCAweDBjLCAweDBjLCAweDJmLCAweGY3LCAweGRkLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxZCwgMHg0OCwKLTB4MDIsIDB4NjgsIDB4MWQsIDB4NDksIDB4OGIsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjAsIDB4MDIsIDB4NjYsCi0weDhhLCAweDZhLCAweDQzLCAweDY4LCAweDliLCAweDE4LCAweDQzLCAweDYwLCAweDkzLCAweDQyLCAweDAyLCAweGQyLAotMHg4MiwgMHg2OCwgMHgwMSwgMHgzMiwgMHg4MiwgMHg2MCwgMHhjMiwgMHg2OCwgMHgwYiwgMHg2YSwgMHhkMiwgMHgxOCwKLTB4YzIsIDB4NjAsIDB4NDIsIDB4NjksIDB4Y2IsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4NDIsIDB4NjEsIDB4YzIsIDB4NjksCi0weDhiLCAweDY4LCAweGQyLCAweDE4LCAweGMyLCAweDYxLCAweDAyLCAweDY5LCAweDBiLCAweDY5LCAweGQyLCAweDE4LAotMHgwMiwgMHg2MSwgMHg4MiwgMHg2OSwgMHgwYiwgMHg2OCwgMHhkMiwgMHgxOCwgMHg4MiwgMHg2MSwgMHgwMiwgMHg2YiwKLTB4Y2IsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjMsIDB4NGEsIDB4NmEsIDB4NDMsIDB4NmIsIDB4OWIsIDB4MTgsCi0weDQzLCAweDYzLCAweDkzLCAweDQyLCAweDAyLCAweGQyLCAweDgyLCAweDZiLCAweDAxLCAweDMyLCAweDgyLCAweDYzLAotMHhjMiwgMHg2YiwgMHg0YiwgMHg2OSwgMHhkMiwgMHgxOCwgMHhjMiwgMHg2MywgMHgwMiwgMHg2YywgMHhjOSwgMHg2YSwKLTB4NTEsIDB4MTgsIDB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDA4LCAweDE0LCAweDQwLCAweDg4LCAweGI1LCAweDY5LCAweDQ2LCAweDAwLCAweGYwLCAweDE3LCAweGY4LAotMHg4MSwgMHgwOCwgMHgwYSwgMHhkMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyOSwgMHgwNywgMHhkOSwgMHgwMCwgMHgyMiwKLTB4ODMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODgsIDB4NDIsCi0weGY4LCAweGQzLCAweDg4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDAwLCAweGYwLAotMHgwNCwgMHhmOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDIsIDB4MjgsIDB4MGMsIDB4ZDAsCi0weDAzLCAweDI4LCAweDAyLCAweGQxLCAweDA3LCAweDQ4LCAweDFjLCAweDIyLCAweDA4LCAweDYwLCAweDEwLCAweDFjLAotMHg3MCwgMHg0NywgMHgwNiwgMHg0OCwgMHgwNCwgMHhlMCwgMHgwNiwgMHg0OCwgMHg1MCwgMHgyMiwgMHgwOCwgMHg2MCwKLTB4ZjcsIDB4ZTcsIDB4MDUsIDB4NDgsIDB4NjgsIDB4MjIsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDA4LCAweDgzLCAweDIwLCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg4MCwgMHhiNCwgMHgwMywgMHgyMiwgMHhjMiwgMHg4MCwgMHgxNSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4ODIsIDB4NjAsIDB4MTQsIDB4NGEsIDB4MTIsIDB4ODgsIDB4MDEsIDB4MzIsIDB4YzIsIDB4NjAsCi0weDAwLCAweDIwLCAweDEzLCAweDRhLCAweDEzLCAweDVjLCAweGMwLCAweDQ2LCAweDBiLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgyMCwgMHgyMiwgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMSwKLTB4MDAsIDB4MjAsIDB4MGUsIDB4NGIsIDB4MWYsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGYsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDBhLCAweDcwLCAweDAxLCAweDMxLCAweDAwLCAweDIwLAotMHgwOSwgMHg0YSwgMHgxMywgMHg1YywgMHhjMCwgMHg0NiwgMHgwYiwgMHg3MCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMSwKLTB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDgsIDB4NzAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDA4LCAweDEwLCAweDAwLCAweDAzLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDA0LCAweDAwLCAweDgwLAotMHg4NSwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4ZSwgMHgwNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMywKLTB4MGEsIDB4NDgsIDB4YzEsIDB4MWQsIDB4ODksIDB4MzEsIDB4NGIsIDB4NzAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4NzAsCi0weDY0LCAweDIxLCAweDgwLCAweDMwLCAweGMxLCAweDgyLCAweDAxLCAweDgzLCAweDQzLCAweDgzLCAweDdkLCAweDIxLAotMHhjOSwgMHgwMCwgMHg4MSwgMHg4MywgMHhjMiwgMHg4MywgMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MDAsIDB4ZjAsIDB4OGUsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGI1LCAweDIyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGUxLCAweGZmLCAweDEzLCAweDQ4LAotMHgwMiwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg4MCwgMHhmYiwgMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwKLTB4MGEsIDB4ZDEsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4Y2EsIDB4ODgsIDB4MDEsIDB4MzIsCi0weGNhLCAweDgwLCAweDgxLCAweDc5LCAweDAxLCAweDMxLCAweDgxLCAweDcxLCAweGZkLCAweGY3LCAweDcwLCAweGY5LAotMHgwYiwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwNSwgMHhkMSwgMHgwYSwgMHg0OCwgMHg3ZCwgMHgyMiwKLTB4ZDIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmIsIDB4MDgsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weGUxLCAweGZjLCAweDA4LCAweDQ4LCAweDI4LCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDYwLCAweGZiLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OSwgMHgyMSwgMHhmZiwgMHhmZiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YTUsIDB4N2IsIDB4MjEsIDB4NDAsCi0weDk1LCAweDJjLCAweGZmLCAweGZmLCAweDU5LCAweDAzLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDEwLCAweDIwLAotMHgwZiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwZiwgMHg0YSwgMHgwZiwgMHg0OCwgMHg2NCwgMHgyMSwKLTB4ZmIsIDB4ZjcsIDB4YzYsIDB4ZmMsIDB4MGUsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDEsIDB4NjgsCi0weDBhLCAweDQwLCAweDA4LCAweDIxLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDAyLCAweDY4LCAweDEyLCAweDBjLAotMHgwNywgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwNCwgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4YzEsIDB4NjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGE1LCAweDU1LCAweGZmLCAweGZmLAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MjcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAxLCAweDY4LCAweDBhLCAweDQwLCAweDA3LCAweDIxLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDAyLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgyMSwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsCi0weDFmLCAweDQ4LCAweGZiLCAweGY3LCAweDg3LCAweGZjLCAweDFmLCAweDQ4LCAweGMxLCAweDZiLCAweGZmLCAweDI5LAotMHhmYywgMHhkMSwgMHg4MSwgMHg2YiwgMHg0MiwgMHg2YiwgMHgxNiwgMHgxYywgMHgwZiwgMHgxYywgMHgxYywgMHg0YywKLTB4MTAsIDB4MjMsIDB4NjAsIDB4NjksIDB4MTgsIDB4NDMsIDB4NjAsIDB4NjEsIDB4YTEsIDB4NjksIDB4OTksIDB4NDMsCi0weDFkLCAweDA0LCAweGExLCAweDYxLCAweGU4LCAweDYwLCAweGEwLCAweDY5LCAweGMwLCAweDQ2LCAweDI4LCAweDYxLAotMHgxNiwgMHg0YSwgMHgxNywgMHg0OSwgMHg2NCwgMHgyMCwgMHhmYiwgMHhmNywgMHg2ZiwgMHhmYywgMHgxNiwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MTUsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MzksIDB4MWMsIDB4MzIsIDB4MWMsCi0weGZiLCAweGY3LCAweDZlLCAweGZjLCAweDEzLCAweDQ4LCAweGMxLCAweDY4LCAweDA4LCAweDI5LCAweGZjLCAweGQxLAotMHgxMiwgMHg0OCwgMHhmYiwgMHhmNywgMHg1ZCwgMHhmYywgMHgxMCwgMHgyMywgMHg2MCwgMHg2OSwgMHg5OCwgMHg0MywKLTB4NjAsIDB4NjEsIDB4ZTgsIDB4NjAsIDB4MDEsIDB4MjAsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsCi0weGM4LCAweDcxLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweGI2LCAweDIxLCAweDQwLCAweDY0LCAweDAwLCAweDMwLCAweDAyLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZCwgMHhmNywKLTB4MDEsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4MzIsIDB4ZmMsIDB4ZmQsIDB4ZjcsIDB4ZDYsIDB4ZmUsCi0weGZlLCAweGY3LCAweDA0LCAweGY4LCAweGZlLCAweGY3LCAweDE2LCAweGY4LCAweGZlLCAweGY3LCAweDI0LCAweGY4LAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MSwgMHgwMywgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNSwgMHhmZCwgMHhmNywKLTB4NmIsIDB4ZmMsIDB4MzQsIDB4NGYsIDB4MDAsIDB4MjQsIDB4ZjksIDB4NjgsIDB4ZjgsIDB4MWQsIDB4NzksIDB4MzAsCi0weDAxLCAweDI5LCAweDBmLCAweGQxLCAweDMxLCAweDQ5LCAweGMwLCAweDQ2LCAweGY5LCAweDY3LCAweDMxLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHgzMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwYywgMHg2MCwgMHg0YywgMHg2MCwKLTB4OGMsIDB4NjAsIDB4Y2MsIDB4NjAsIDB4MGMsIDB4NjEsIDB4NGMsIDB4NjEsIDB4OGMsIDB4NjEsIDB4MDQsIDB4ZTAsCi0weGY5LCAweDFkLCAweDdkLCAweDMxLCAweGY5LCAweDY3LCAweDEyLCAweGMwLCAweDA4LCAweDM4LCAweDAwLCAweDY4LAotMHg2MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDk5LCAweDQzLCAweDAxLCAweDYwLCAweDAwLCAweGYwLCAweDU0LCAweGY4LCAweGZkLCAweGY3LCAweDRlLCAweGZjLAotMHgwMCwgMHhmMCwgMHg1ZSwgMHhmOSwgMHhmZCwgMHhmNywgMHg3MywgMHhmOCwgMHhmZiwgMHhmNywgMHgwYywgMHhmZSwKLTB4ZmQsIDB4ZjcsIDB4MmUsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4YjYsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4YzIsIDB4ZmUsCi0weGZkLCAweGY3LCAweDU0LCAweGZkLCAweGZkLCAweGY3LCAweDBhLCAweGZkLCAweGZkLCAweGY3LCAweDk0LCAweGZkLAotMHgwMCwgMHhmMCwgMHgxYSwgMHhmYSwgMHhmZCwgMHhmNywgMHg5YywgMHhmZiwgMHhmZCwgMHhmNywgMHgwYSwgMHhmZiwKLTB4ZmQsIDB4ZjcsIDB4ZDIsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4M2MsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4ZGMsIDB4ZmEsCi0weGZmLCAweGY3LCAweDljLCAweGZmLCAweDcxLCAweDIzLCAweDViLCAweDAxLAotMHhmOCwgMHgxOCwgMHgwNCwgMHg3MiwgMHg0NCwgMHg3MiwgMHgwNywgMHgyMywgMHg1YiwgMHgwMiwgMHhmOCwgMHgxOCwKLTB4MDQsIDB4NjMsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4YTgsIDB4MjAsIDB4ZmUsIDB4ZjcsCi0weGIxLCAweGZkLCAweDA5LCAweDQ4LCAweGMwLCAweDQ2LCAweDQ0LCAweDYyLCAweDAwLCAweGYwLCAweDE4LCAweGZhLAotMHgwNywgMHg0OCwgMHhmYiwgMHhmNywgMHhiZCwgMHhmYiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MTEsIDB4NDAsCi0weDAwLCAweDAxLCAweDExLCAweDAwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDE1LCAweDhmLCAweDIxLCAweDQwLAotMHgwMCwgMHhiNSwgMHgwNCwgMHg0OCwgMHhmYiwgMHhmNywgMHhhYSwgMHhmYiwgMHhmZCwgMHhmNywgMHg1ZSwgMHhmZiwKLTB4ZmQsIDB4ZjcsIDB4MjQsIDB4ZmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MTUsIDB4OTksIDB4MjEsIDB4NDAsCi0weGZhLCAweDIxLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAweDQxLCAweDYyLCAweDQwLCAweDIxLCAweDQxLCAweDYyLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDcsIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjEsIDB4ODIsIDB4NjksIDB4OWEsIDB4NDMsIDB4ODIsIDB4NjEsCi0weDAxLCAweDIyLCAweDEyLCAweDA1LCAweGQxLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDYxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZSwgMHhhZiwgMHg5YSwgMHgxMCwKLTB4MDAsIDB4YjUsIDB4MDIsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4ODAsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGM4LCAweDU3LCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDI0LCAweDRjLCAweDAxLCAweDIxLCAweDA5LCAweDA0LAotMHgyMCwgMHg2OCwgMHgwMSwgMHg0MCwgMHgwOSwgMHgyMCwgMHgyMiwgMHg0ZSwgMHgyMiwgMHg0ZCwgMHgwMCwgMHgyOSwKLTB4MDUsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDQsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4ODksIDB4MGEsCi0weDAxLCAweGQzLCAweGYwLCAweDYwLCAweDAwLCAweGUwLCAweDI4LCAweDY0LCAweDFkLCAweDQ4LCAweGZiLCAweGY3LAotMHg2NSwgMHhmYiwgMHgxZCwgMHg0ZiwgMHgxZCwgMHg0OSwgMHg4OCwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4OCwgMHg2MSwKLTB4MzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4NzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsCi0weDE5LCAweDQ4LCAweGZiLCAweGY3LCAweDU3LCAweGZiLCAweDE5LCAweDQ4LCAweGZiLCAweGY3LCAweDU0LCAweGZiLAotMHgwMCwgMHgyOCwgMHhmYSwgMHhkMSwgMHgzOCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgxNiwgMHg0OCwKLTB4ZmIsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDQsIDB4MjAsIDB4NjgsIDB4MDEsIDB4NDAsCi0weDE0LCAweDIwLCAweDAwLCAweDI5LCAweDA1LCAweGQxLCAweDIxLCAweDY4LCAweDA5LCAweDBjLCAweDA0LCAweGQxLAotMHgyMSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMSwgMHhkMywgMHhmMCwgMHg2MCwgMHgwMSwgMHhlMCwgMHgyOCwgMHg2NCwKLTB4ZmYsIDB4ZTcsIDB4ZmUsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmQsIDB4MGIsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weDM1LCAweGZiLCAweGZmLCAweGY3LCAweGFmLCAweGZmLCAweGNkLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweDA3LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDk5LCAweDlmLCAweDIxLCAweDQwLAotMHgwMCwgMHgyMCwgMHgwNywgMHg0YSwgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNSwgMHg1MCwgMHg2MSwgMHhjOCwgMHg2MCwKLTB4ZDAsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MDMsIDB4NGEsIDB4MDEsIDB4MjEsCi0weGQxLCAweDYzLCAweDU4LCAweDYwLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHhiNSwgMHhjMCwgMHhiMCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MGEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4ZDEsIDB4ZmYsIDB4MDcsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4MjgsIDB4ZDAsCi0weDY5LCAweDQ2LCAweGZmLCAweDIyLCAweDM4LCAweDFjLCAweDAxLCAweDMyLCAweGZkLCAweGY3LCAweDU0LCAweGY5LAotMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHg5OCwgMHg0MiwgMHgxYiwgMHhkMSwgMHgwZCwgMHg5OCwgMHgwMCwgMHgwOSwKLTB4MTgsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4OGQsIDB4ZjgsIDB4MGUsIDB4NDksIDB4MDEsIDB4MjIsCi0weDEyLCAweDA0LCAweDA4LCAweDY4LCAweDAyLCAweDQwLCAweDBkLCAweDQ4LCAweDA1LCAweGQxLCAweDBhLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwOSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMywgMHhkMywgMHgwYSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsCi0weGZmLCAweGY3LCAweGJjLCAweGZmLCAweDM4LCAweDFjLCAweGZkLCAweGY3LCAweDc0LCAweGY4LCAweDQwLCAweGIwLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDE3LCAweDQ5LCAweDAxLCAweDIyLCAweDEyLCAweDA0LAotMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwNiwgMHgyMCwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwYSwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDksIDB4NjgsIDB4ODksIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MTEsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAyLCAweGUwLCAweDEwLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDY0LAotMHgwMywgMHgyMCwgMHhmZSwgMHhmNywgMHhkMywgMHhmYywgMHhmYiwgMHhmNywgMHgwZCwgMHhmZiwgMHgwMSwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZmIsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmUsIDB4ZmYsIDB4ZjcsCi0weDlkLCAweGZmLCAweGZmLCAweGY3LCAweDA1LCAweGZlLCAweGZmLCAweGY3LCAweGY1LCAweGZlLCAweGZmLCAweGY3LAotMHgwOSwgMHhmZiwgMHhmZiwgMHhmNywgMHg5YiwgMHhmZCwgMHhmZiwgMHhmNywgMHgyMSwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDQ2LCAweDRhLCAweDAxLCAweDIxLCAweGM5LCAweDAzLAotMHg0NSwgMHg0ZCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhlYywgMHgxOCwgMHhhMSwgMHg2MSwgMHgyOCwgMHg4OCwKLTB4NDAsIDB4MDQsIDB4NDMsIDB4NGIsIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWEsIDB4MDQsIDB4MjAsIDB4YWYsIDB4NjAsCi0weDQxLCAweDRlLCAweGMwLCAweDQ2LCAweGIwLCAweDYxLCAweDA4LCAweDIwLCAweGM4LCAweDIzLCAweDQzLCAweDQzLAotMHhiYiwgMHg0MiwgMHgyMSwgMHhkOSwgMHg0MSwgMHgwMCwgMHgzZCwgMHg0ZSwgMHhjMCwgMHg0NiwgMHgzMSwgMHg2MSwKLTB4YjYsIDB4NjksIDB4MjAsIDB4MjMsIDB4OWIsIDB4MWIsIDB4M2EsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjMsIDB4NjEsCi0weDEwLCAweDNiLCAweDMzLCAweDYyLCAweDhiLCAweDAwLCAweGZmLCAweDFhLCAweDQwLCAweDA4LCAweDgxLCAweDQyLAotMHgxNywgMHhkMywgMHhiOCwgMHgyMywgMHg0MywgMHg0MywgMHhiYiwgMHg0MiwgMHgwOCwgMHhkOSwgMHg0MSwgMHgxZSwKLTB4MzIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4OTksIDB4ODEsIDB4ZDksIDB4ODEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MzgsCi0weDU4LCAweDYxLCAweDBhLCAweGUwLCAweDAxLCAweDMwLCAweDgxLCAweDQyLCAweGVmLCAweGQyLCAweDA2LCAweGUwLAotMHgyYywgMHg0ZSwgMHhiMywgMHg2OSwgMHgwMSwgMHgzMywgMHhiMywgMHg2MSwgMHg0MCwgMHgwMCwgMHg4OCwgMHg0MiwKLTB4ZDIsIDB4ZDksIDB4MmEsIDB4NDksIDB4MDAsIDB4MjAsIDB4YTMsIDB4NjksIDB4OWIsIDB4MDgsIDB4MDcsIDB4ZDAsCi0weDI4LCAweDRiLCAweDg3LCAweDAwLCAweGNiLCAweDUxLCAweGE3LCAweDY5LCAweGJmLCAweDA4LCAweDAxLCAweDMwLAotMHg4NywgMHg0MiwgMHhmOCwgMHhkOCwgMHgyMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MiwgMHg4YywgMHg4OSwKLTB4NTgsIDB4MjAsIDB4NjAsIDB4NDMsIDB4ODcsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmMsCi0weDBhLCAweGRkLCAweDU4LCAweDIzLCAweDQzLCAweDQzLCAweDhjLCAweDZhLCAweGUzLCAweDE4LCAweDAxLCAweDMwLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg5YSwgMHg2MCwgMHg4YiwgMHg4OSwgMHg4MywgMHg0MiwgMHhmNCwgMHhkYywKLTB4Y2YsIDB4NjIsIDB4Y2MsIDB4ODksIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4MDEsIDB4YzcsIDB4MTksCi0weDAwLCAweDIwLCAweDAwLCAweDJjLCAweDBiLCAweGRkLCAweDQzLCAweDAwLCAweDFiLCAweDE4LCAweDViLCAweDAxLAotMHhjYywgMHg2YSwgMHhlMywgMHgxOCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg5YSwgMHg2MCwKLTB4Y2IsIDB4ODksIDB4ODMsIDB4NDIsIDB4ZjMsIDB4ZGMsIDB4NGYsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MGIsIDB4NjksCi0weDAwLCAweDJiLCAweDA3LCAweGQ5LCAweDg3LCAweDAwLCAweDRiLCAweDZhLCAweGMwLCAweDQ2LCAweGRhLCAweDUxLAotMHgwYiwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4MywgMHg0MiwgMHhmNywgMHhkOCwgMHg0OSwgMHg2YSwgMHg4MCwgMHgwMCwKLTB4MDgsIDB4MTgsIDB4MDQsIDB4MzgsIDB4MjgsIDB4NjEsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGIwLCAweGJlLCAweDIxLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHhhZCwgMHhkZSwgMHgwMCwKLTB4MGEsIDB4NDgsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksCi0weDQxLCAweDYxLCAweGQxLCAweDYwLCAweDAwLCAweDIxLCAweGExLCAweDIyLCAweDUyLCAweDAzLCAweDkxLCAweDYxLAotMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2MSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNiwKLTB4NTksIDB4MDUsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI0LCAweDAyLCAweDFjLCAweDBiLCAweDQ4LCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMzLCAweDE4LAotMHg5YSwgMHg2MSwgMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MiwgMHg2OSwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MSwKLTB4ODcsIDB4NjksIDB4OWYsIDB4NDMsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDUsCi0weDg3LCAweDYxLCAweGRhLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDE4LCAweDYxLCAweGExLCAweDIwLAotMHg0MCwgMHgwMywgMHg4MSwgMHg2MSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzksIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjgsCi0weDAwLCAweDIwLCAweDA5LCAweDQ5LCAweDAwLCAweDIyLCAweDAzLCAweDAxLCAweDVmLCAweDE4LCAweDMzLCAweDIzLAotMHg5YiwgMHgwMSwgMHhmYiwgMHgxOCwgMHg5YSwgMHg2MiwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhmNiwgMHhkMywKLTB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MzMsIDB4ZjgsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDFkLCAweDNlLCAweGZmLCAweGZmLAotMHgwMCwgMHhiNSwgMHgwMiwgMHg0OCwgMHgwMCwgMHhmMCwgMHgwNCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTgsIDB4NjEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGYsIDB4NGIsCi0weGExLCAweDIxLCAweDQ5LCAweDAzLCAweDAwLCAweDI4LCAweDBlLCAweGQwLCAweGM4LCAweDYxLCAweDE4LCAweDFjLAotMHg1OSwgMHg2OSwgMHg1MywgMHgwMSwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MSwgMHg4NywgMHg2OSwgMHg5ZiwgMHg0MywKLTB4ODcsIDB4NjEsIDB4ZDEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjEsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDE4LCAweDFjLCAweDVmLCAweDY5LCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDlmLCAweDQzLAotMHg0NywgMHg2MSwgMHhkNywgMHg2MCwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MSwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDcsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MTcsIDB4NGMsCi0weDAzLCAweDAxLCAweDFkLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAweDlkLCAweDZhLAotMHhiZCwgMHg0MiwgMHgwNSwgMHhkMSwgMHgxZCwgMHg2YiwgMHg5NSwgMHg0MiwgMHgwMiwgMHhkMSwgMHhkYiwgMHg2YSwKLTB4OGIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZWUsIDB4ZDMsIDB4MDAsIDB4MjAsCi0weDAzLCAweDAxLCAweDFkLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAweDliLCAweDZhLAotMHgwMCwgMHgyYiwgMHgwOSwgMHhkMSwgMHgwMywgMHgwMSwgMHgxYywgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwKLTB4ZTMsIDB4MTgsIDB4MWEsIDB4NjMsIDB4ZDksIDB4NjIsIDB4NWEsIDB4NjMsIDB4OWYsIDB4NjIsIDB4MDIsIDB4ZTAsCi0weDAxLCAweDMwLCAweDBiLCAweDI4LCAweGVhLCAweGQzLCAweDBiLCAweDI4LCAweDAxLCAweGQxLCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDEsIDB4MWMsIDB4MDAsIDB4MjIsIDB4MDEsIDB4MjAsIDB4MTYsIDB4NGYsIDB4MDEsIDB4ZTAsCi0weDAwLCAweDJhLCAweDA3LCAweGQxLCAweDAzLCAweDAxLCAweGRjLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLAotMHhlMywgMHgxOCwgMHg5YiwgMHg2OSwgMHg4YiwgMHg0MiwgMHgxMSwgMHhkMSwgMHgwMiwgMHgwMSwgMHhkMiwgMHgxOSwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4OTMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OTMsIDB4NjEsCi0weGQzLCAweDZhLCAweGMwLCAweDQ2LCAweGQzLCAweDYxLCAweDEzLCAweDZiLCAweGMwLCAweDQ2LCAweDEzLCAweDYyLAotMHg1MywgMHg2YiwgMHhjMCwgMHg0NiwgMHg1MywgMHg2MiwgMHgwMSwgMHgyMiwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwKLTB4ZTAsIDB4ZDMsIDB4MDcsIDB4NGIsIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4OWEsIDB4NjgsIDB4OGEsIDB4NDIsCi0weDAzLCAweGQxLCAweDAwLCAweDIxLCAweDk5LCAweDYwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHhmYSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlOCwgMHgxYiwgMHgwMCwgMHg4MCwKLTB4MGIsIDB4MjgsIDB4MTcsIDB4ZGEsIDB4MGMsIDB4NDksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4OGEsIDB4NjksCi0weDEzLCAweDQzLCAweDAxLCAweDIyLCAweDEyLCAweDA1LCAweDhiLCAweDYxLCAweDEzLCAweDYxLCAweDAwLCAweDAxLAotMHg0MCwgMHgxOCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHgwMywgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDMsIDB4NjMsIDB4NTMsIDB4MDEsIDB4ODgsIDB4NjksIDB4OTgsIDB4NDMsIDB4ODgsIDB4NjEsIDB4MTAsIDB4NjEsCi0weDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZjLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwOCwgMHg0YSwgMHhkMCwgMHg2OSwgMHgwMCwgMHgyMSwgMHgwNywgMHg0ZiwgMHhkMywgMHg2OSwKLTB4ODMsIDB4NDIsIDB4MDIsIDB4ZDksIDB4ZmMsIDB4MWEsIDB4MjAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4YzAsIDB4MWEsCi0weDA5LCAweDE4LCAweDE4LCAweDFjLCAweGI5LCAweDQyLCAweGY0LCAweGQ5LCAweDkwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHgxNCwgMHg0MCwgMHhhOCwgMHg2MSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MDAsIDB4MjQsIDB4MDAsIDB4MmYsIDB4MDQsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmYsIDB4MDEsIDB4MzQsCi0weGJjLCAweDQyLCAweGZhLCAweGQ5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggM2FmOWE5NS4uOWRkNGY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMTAwLDEwICsxMDAsMTEgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInR5cGhvb24iCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAJIjEuNS44IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjA2LzExLzA5IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gCSIxLjUuOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXIgMiwgMjAwOSIKICNkZWZpbmUgUEZYCQkJRFJWX01PRFVMRV9OQU1FICI6ICIKICNkZWZpbmUgRVJSX1BGWAkJCUtFUk5fRVJSIFBGWAorI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkiM2NvbS90eXBob29uLmJpbiIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTI5LDkgKzEzMCw5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJ0eXBob29uLmgiCi0jaW5jbHVkZSAidHlwaG9vbi1maXJtd2FyZS5oIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgICAgInR5cGhvb24uYzogdmVyc2lvbiAiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKQEAgLTEzOSw2ICsxNDAsNyBAQAogTU9EVUxFX0FVVEhPUigiRGF2aWQgRGlsbG93IDxkYXZlQHRoZWRpbGxvd3Mub3JnPiIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9OQU1FKTsKIE1PRFVMRV9ERVNDUklQVElPTigiM0NvbSBUeXBob29uIEZhbWlseSAoM0M5OTAsIDNDUjk5MCwgYW5kIHZhcmlhbnRzKSIpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssICJQYWNrZXRzIHNtYWxsZXIgdGhhbiB0aGlzIGFyZSBjb3BpZWQgYW5kICIKIAkJCSAgICAgICAidGhlIGJ1ZmZlciBnaXZlbiBiYWNrIHRvIHRoZSBOSUMuIERlZmF1bHQgIgpAQCAtMTM0NCwxNCArMTM0Niw3NCBAQAogCXRwLT50eEhpUmluZy5sYXN0UmVhZCA9IDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnR5cGhvb25fZnc7CisKK3N0YXRpYyBpbnQKK3R5cGhvb25fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgdHlwaG9vbiAqdHApCit7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7CisJY29uc3QgdTggKmltYWdlX2RhdGE7CisJdTMyIG51bVNlY3Rpb25zOworCXUzMiBzZWN0aW9uX2xlbjsKKwl1MzIgcmVtYWluaW5nOworCWludCBlcnI7CisKKwlpZiAodHlwaG9vbl9mdykKKwkJcmV0dXJuIDA7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZ0eXBob29uX2Z3LCBGSVJNV0FSRV9OQU1FLCAmdHAtPnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkJdHAtPm5hbWUsIEZJUk1XQVJFX05BTUUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWltYWdlX2RhdGEgPSAodTggKikgdHlwaG9vbl9mdy0+ZGF0YTsKKwlyZW1haW5pbmcgPSB0eXBob29uX2Z3LT5zaXplOworCWlmIChyZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpKQorCQlnb3RvIGludmFsaWRfZnc7CisKKwlmSGRyID0gKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICopIGltYWdlX2RhdGE7CisJaWYgKG1lbWNtcChmSGRyLT50YWcsICJUWVBIT09OIiwgOCkpCisJCWdvdG8gaW52YWxpZF9mdzsKKworCW51bVNlY3Rpb25zID0gbGUzMl90b19jcHUoZkhkci0+bnVtU2VjdGlvbnMpOworCWltYWdlX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKTsKKwlyZW1haW5pbmcgLT0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKTsKKworCXdoaWxlIChudW1TZWN0aW9ucy0tKSB7CisJCWlmIChyZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIpKQorCQkJZ290byBpbnZhbGlkX2Z3OworCisJCXNIZHIgPSAoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKKwkJaW1hZ2VfZGF0YSArPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIpOworCQlzZWN0aW9uX2xlbiA9IGxlMzJfdG9fY3B1KHNIZHItPmxlbik7CisKKwkJaWYgKHJlbWFpbmluZyA8IHNlY3Rpb25fbGVuKQorCQkJZ290byBpbnZhbGlkX2Z3OworCisJCWltYWdlX2RhdGEgKz0gc2VjdGlvbl9sZW47CisJCXJlbWFpbmluZyAtPSBzZWN0aW9uX2xlbjsKKwl9CisKKwlyZXR1cm4gMDsKKworaW52YWxpZF9mdzoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlXG4iLCB0cC0+bmFtZSk7CisJcmVsZWFzZV9maXJtd2FyZSh0eXBob29uX2Z3KTsKKwl0eXBob29uX2Z3ID0gTlVMTDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIGludAogdHlwaG9vbl9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdHlwaG9vbiAqdHApCiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+aW9hZGRyOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7Ci0Jc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7Ci0Jc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7Ci0JdTggKmltYWdlX2RhdGE7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7CisJY29uc3QgdTggKmltYWdlX2RhdGE7CiAJdm9pZCAqZHBhZ2U7CiAJZG1hX2FkZHJfdCBkcGFnZV9kbWE7CiAJX19zdW0xNiBjc3VtOwpAQCAtMTM2NSwyMCArMTQyNywxMiBAQAogCWludCBpOwogCWludCBlcnI7CiAKLQllcnIgPSAtRUlOVkFMOwotCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgdHlwaG9vbl9maXJtd2FyZV9pbWFnZTsKLQlpbWFnZV9kYXRhID0gKHU4ICopIGZIZHI7Ci0KLQlpZihtZW1jbXAoZkhkci0+dGFnLCAiVFlQSE9PTiIsIDgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2UhXG4iLCB0cC0+bmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9CisJaW1hZ2VfZGF0YSA9ICh1OCAqKSB0eXBob29uX2Z3LT5kYXRhOworCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKIAogCS8qIENhbm5vdCBqdXN0IG1hcCB0aGUgZmlybXdhcmUgaW1hZ2UgdXNpbmcgcGNpX21hcF9zaW5nbGUoKSBhcwotCSAqIHRoZSBmaXJtd2FyZSBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwvbW9kdWxlIGltYWdlLCBzbyB3ZSBhbGxvY2F0ZQotCSAqIHNvbWUgY29uc2lzdGVudCBtZW1vcnkgdG8gY29weSB0aGUgc2VjdGlvbnMgaW50bywgYXMgaXQgaXMgc2ltcGxlciwKLQkgKiBhbmQgc2hvcnQtbGl2ZWQuIElmIHdlIGV2ZXIgc3BsaXQgb3V0IGFuZCByZXF1aXJlIGEgdXNlcmxhbmQKLQkgKiBmaXJtd2FyZSBsb2FkZXIsIHRoZW4gd2UgY2FuIHJldmlzaXQgdGhpcy4KKwkgKiB0aGUgZmlybXdhcmUgaXMgdm1hbGxvYygpJ2QgYW5kIG1heSBub3QgYmUgcGh5c2ljYWxseSBjb250aWd1b3VzLAorCSAqIHNvIHdlIGFsbG9jYXRlIHNvbWUgY29uc2lzdGVudCBtZW1vcnkgdG8gY29weSB0aGUgc2VjdGlvbnMgaW50by4KIAkgKi8KIAllcnIgPSAtRU5PTUVNOwogCWRwYWdlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgUEFHRV9TSVpFLCAmZHBhZ2VfZG1hKTsKQEAgLTE3ODMsNyArMTgzNyw3IEBACiAJfQogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW93cml0ZTMyKFRZUEhPT05fSU5UUl9OT05FLAogCQkJCXRwLT5pb2FkZHIgKyBUWVBIT09OX1JFR19JTlRSX01BU0spOwogCQl0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyh0cC0+aW9hZGRyKTsKQEAgLTE4MDYsMTAgKzE4NjAsMTAgQEAKIAogCWlvd3JpdGUzMihpbnRyX3N0YXR1cywgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9TVEFUVVMpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQlpb3dyaXRlMzIoVFlQSE9PTl9JTlRSX0FMTCwgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9NQVNLKTsKIAkJdHlwaG9vbl9wb3N0X3BjaV93cml0ZXMoaW9hZGRyKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE5NDQsNyArMTk5OCw3IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURSk7Ci0JeHBfY21kLnBhcm0xID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfUF84MDIxUSk7CisJeHBfY21kLnBhcm0xID0gY3B1X3RvX2xlMTYoRVRIX1BfODAyMVEpOwogCWVyciA9IHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CiAJaWYoZXJyIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CkBAIC0yMDg2LDYgKzIxNDAsMTAgQEAKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnI7CiAKKwllcnIgPSB0eXBob29uX3JlcXVlc3RfZmlybXdhcmUodHApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJZXJyID0gdHlwaG9vbl93YWtldXAodHAsIFdhaXRTbGVlcCk7CiAJaWYoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gd2FrZXVwIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTI2MjQsNiArMjY4Miw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHR5cGhvb25fY2xlYW51cCh2b2lkKQogeworCWlmICh0eXBob29uX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdHlwaG9vbl9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmggYi9kcml2ZXJzL25ldC90eXBob29uLmgKaW5kZXggZGQ3MDIyYy4uNjczZmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaApAQCAtMTc0LDE4ICsxNzQsMTggQEAKIAkJdTY0IHR4X2FkZHI7CS8qIG9wYXF1ZSBmb3IgaGFyZHdhcmUsIGZvciBUWF9ERVNDICovCiAJfTsKIAlfX2xlMzIgcHJvY2Vzc0ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RYX1BGX05PX0NSQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9TRUdNRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBTRUMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1BSSU9SSVRZCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9QQURfRlJBTUUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9SRVNFUlZFRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwZTAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDBmZmZmMDAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZjAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfTk9fQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTgljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fUFJJT1JJVFkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfUEFEX0ZSQU1FCQljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1JFU0VSVkVECQljcHVfdG9fbGUzMigweDAwMDAwZTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJY3B1X3RvX2xlMzIoMHgwZmZmZjAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlRFUk5BTAkJY3B1X3RvX2xlMzIoMHhmMDAwMDAwMCkKICNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1RBR19TSElGVAkxMgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTIwMyw4ICsyMDMsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgbXNzX2ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFRZUEhPT05fVFNPX0xBU1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgyMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJY3B1X3RvX2xlMTYoMHgxMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19MQVNUCQljcHVfdG9fbGUxNigweDIwMDApCiAJX19sZTMyIHJlc3BBZGRyTG87CiAJX19sZTMyIGJ5dGVzVHg7CiAJX19sZTMyIHN0YXR1czsKQEAgLTIyMiw4ICsyMjIsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgaXBzZWNGbGFnczsKLSNkZWZpbmUgVFlQSE9PTl9JUFNFQ19HRU5fSVYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0lQU0VDX0dFTl9JVgljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCWNwdV90b19sZTE2KDB4MDAwMSkKIAlfX2xlMzIgc2ExOwogCV9fbGUzMiBzYTI7CiAJX19sZTMyIHJlc2VydmVkOwpAQCAtMjQ4LDQxICsyNDgsNDEgQEAKIAl1MzIgYWRkcjsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRyICovCiAJdTMyIGFkZHJIaTsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRySGkgKi8KIAlfX2xlMzIgcnhTdGF0dXM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9CQURfU1NECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX1JVTlQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX09WRVJTSVpFCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0FMSUdOCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDYpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fVU5LTk9XTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUFgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9WTEFOCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwODApCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfSU5URVJOQUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQkFEX1NTRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfUlVOVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9PVkVSU0laRQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQUxJR04JCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19VTktOT1dOCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVBYCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX1ZMQU4JCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFRZUEhPT05fUlhfSVBTRUMJCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0ZBSUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfRkFJTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwNDAwKQogCV9fbGUxNiBmaWx0ZXJSZXN1bHRzOwotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4N2ZmZikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01BU0sJCWNwdV90b19sZTE2KDB4N2ZmZikKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJY3B1X3RvX2xlMTYoMHg4MDAwKQogCV9fbGUxNiBpcHNlY1Jlc3VsdHM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VTktOT1dOX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FU1BfRk9STUFUX0VSUglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9HT09ECWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfR09PRAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9GQUlMCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9GQUlMCWNwdV90b19sZTE2KDB4MDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAljcHVfdG9fbGUxNigweDAwODApCisjZGVmaW5lIFRZUEhPT05fUlhfVU5LTk9XTl9TQQkJY3B1X3RvX2xlMTYoMHgwMTAwKQorI2RlZmluZSBUWVBIT09OX1JYX0VTUF9GT1JNQVRfRVJSCWNwdV90b19sZTE2KDB4MDIwMCkKIAlfX2JlMzIgdmxhblRhZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMTgsMzEgKzMxOCwzMSBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgY21kOwotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9FTkFCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRU5BQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRElTQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfU1RBVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA3KQotI2RlZmluZSBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMWEpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDFiKQotI2RlZmluZSBUWVBIT09OX0NNRF9HT1RPX1NMRUVQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDI1KQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyYikKLSNkZWZpbmUgVFlQSE9PTl9DTURfQ1JFQVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfREVMRVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MykKLSNkZWZpbmUgVFlQSE9PTl9DTURfSVJRX0NPQUxFU0NFX0NUUkwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0VOQUJMRV9XQUtFX0VWRU5UUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0OSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNGYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0hFTExPX1JFU1AJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDU3KQotI2RlZmluZSBUWVBIT09OX0NNRF9IQUxUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA1ZCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDVlKQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfSVBTRUNfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDY3KQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfQ01EX0xWTAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNjkpCisjZGVmaW5lIFRZUEhPT05fQ01EX1RYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX0NNRF9SWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJY3B1X3RvX2xlMTYoMHgwMDA1KQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1NUQVRTCQljcHVfdG9fbGUxNigweDAwMDcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1hDVlJfU0VMRUNUCQljcHVfdG9fbGUxNigweDAwMTMpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJY3B1X3RvX2xlMTYoMHgwMDFhKQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01FRElBX1NUQVRVUwljcHVfdG9fbGUxNigweDAwMWIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dPVE9fU0xFRVAJCWNwdV90b19sZTE2KDB4MDAyMykKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAyNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BQ19BRERSRVNTCWNwdV90b19sZTE2KDB4MDAyNikKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NQUNfQUREUkVTUwljcHVfdG9fbGUxNigweDAwMjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQljcHVfdG9fbGUxNigweDAwMmIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0NSRUFURV9TQQkJY3B1X3RvX2xlMTYoMHgwMDM0KQorI2RlZmluZSBUWVBIT09OX0NNRF9ERUxFVEVfU0EJCWNwdV90b19sZTE2KDB4MDAzNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwljcHVfdG9fbGUxNigweDAwNDMpCisjZGVmaW5lIFRZUEhPT05fQ01EX0lSUV9DT0FMRVNDRV9DVFJMCWNwdV90b19sZTE2KDB4MDA0NSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTCWNwdV90b19sZTE2KDB4MDA0OSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJY3B1X3RvX2xlMTYoMHgwMDRmKQorI2RlZmluZSBUWVBIT09OX0NNRF9IRUxMT19SRVNQCQljcHVfdG9fbGUxNigweDAwNTcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0hBTFQJCWNwdV90b19sZTE2KDB4MDA1ZCkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCWNwdV90b19sZTE2KDB4MDA1ZSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0lQU0VDX0VOQUJMRQljcHVfdG9fbGUxNigweDAwNjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9DTURfTFZMCQljcHVfdG9fbGUxNigweDAwNjkpCiAJdTE2IHNlcU5vOwogCV9fbGUxNiBwYXJtMTsKIAlfX2xlMzIgcGFybTI7CkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCiAvKiBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSIGZpbHRlciBiaXRzIChjbWQucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfRElSRUNURUQJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9QUk9NSVNDT1VTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVMJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAxMCkKIAogLyogVFlQSE9PTl9DTURfUkVBRF9TVEFUUyByZXNwb25zZSBmb3JtYXQKICAqLwpAQCAtNDE2LDQwICs0MTYsNDAgQEAKIAlfX2xlMzIgcnhPdmVyZmxvdzsKIAlfX2xlMzIgcnhGaWx0ZXJlZDsKIAlfX2xlMzIgbGlua1N0YXR1czsKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfQkFECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xMDBNQlBTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xME1CUFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0ZVTExfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0hBTEZfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fTElOS19CQUQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX0xJTktfMTAwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fTElOS19GVUxMX0RVUExFWAljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX0xJTktfSEFMRl9EVVBMRVgJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKIAlfX2xlMzIgdW51c2VkMjsKIAlfX2xlMzIgdW51c2VkMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVCB4Y3ZyIHZhbHVlcyAocmVzcC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBGVUxMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwSEFMRglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fWENWUl9BVVRPTkVHCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwRlVMTAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMDBIQUxGCWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX1hDVlJfQVVUT05FRwljcHVfdG9fbGUxNigweDAwMDQpCiAKIC8qIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTIChyZXNwLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DUkNfU1RSSVBfRElTQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NPTExJU0lPTl9ERVRFQ1QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDIwKQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfUE9MQVJJVFlfUkVWCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDQwMCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX05PX0xJTksJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwODAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ1JDX1NUUklQX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ09MTElTSU9OX0RFVEVDVAljcHVfdG9fbGUxNigweDAwMTApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX1BPTEFSSVRZX1JFVgkJY3B1X3RvX2xlMTYoMHgwNDAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfTk9fTElOSwkJY3B1X3RvX2xlMTYoMHgwODAwKQogCiAvKiBUWVBIT09OX0NNRF9TRVRfTVVMVElDQVNUX0hBU0ggZW5hYmxlIHZhbHVlcyAoY21kLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9ESVNBQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfU0VUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX1NFVAkJY3B1X3RvX2xlMTYoMHgwMDAyKQogCiAvKiBUWVBIT09OX0NNRF9DUkVBVEVfU0EgZGVzY3JpcHRvciBhbmQgc2V0dGluZ3MKICAqLwpAQCAtNDU5LDkgKzQ1OSw5IEBACiAJdTE2IGNtZDsKIAl1MTYgc2VxTm87CiAJdTE2IG1vZGU7Ci0jZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0FICQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0VTUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9BSAkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1NBX01PREVfRVNQCQljcHVfdG9fbGUxNigweDAwMDIpCiAJdTggIGhhc2hGbGFnczsKICNkZWZpbmUgVFlQSE9PTl9TQV9IQVNIX0VOQUJMRQkJMHgwMQogI2RlZmluZSBUWVBIT09OX1NBX0hBU0hfU0hBMQkJMHgwMgpAQCAtNDkzLDIyICs0OTMsMjIgQEAKIC8qIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTIGJpdHMgKGNtZC5wYXJtMiAoVHgpICYgY21kLnBhcm0zIChSeCkpCiAgKiBUaGlzIGlzIGFsbCBmb3IgSVB2NC4KICAqLwotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfREhDUF9QUkVWRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1ZMQU4JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfU0VHTUVOVAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0RIQ1BfUFJFVkVOVAljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVkxBTgkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKIAogLyogVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTIGJpdHMgKGNtZC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9MSU5LX0VWRU5UCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9JQ01QX0VDSE8JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwNCkKLSNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA4KQorI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQljcHVfdG9fbGUxNigweDAxKQorI2RlZmluZSBUWVBIT09OX1dBS0VfTElOS19FVkVOVAkJY3B1X3RvX2xlMTYoMHgwMikKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0lDTVBfRUNITwkJY3B1X3RvX2xlMTYoMHgwNCkKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJY3B1X3RvX2xlMTYoMHgwOCkKIAogLyogVGhlc2UgYXJlIHVzZWQgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW1hZ2Ugb24gdGhlIE5JQwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCAxZjYxZTQyLi44NmE0NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI3VuZGVmIERFQlVHCiAKQEAgLTIwMDksNiArMjAwOSw5IEBACiAJLyogRGlzYWJsZSBSeCBhbmQgVHggKi8KIAljbHJiaXRzMzIoJnVnX3JlZ3MtPm1hY2NmZzEsIE1BQ0NGRzFfRU5BQkxFX1JYIHwgTUFDQ0ZHMV9FTkFCTEVfVFgpOwogCisJcGh5X2Rpc2Nvbm5lY3QodWdldGgtPnBoeWRldik7CisJdWdldGgtPnBoeWRldiA9IE5VTEw7CisKIAl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CiB9CiAKQEAgLTMyNDksNyArMzI1Miw3IEBACiAJCWhvd21hbnkgKz0gdWNjX2dldGhfcngodWdldGgsIGksIGJ1ZGdldCAtIGhvd21hbnkpOwogCiAJaWYgKGhvd21hbnkgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXNldGJpdHMzMih1Z2V0aC0+dWNjZi0+cF91Y2NtLCBVQ0NFX1JYX0VWRU5UUyk7CiAJfQogCkBAIC0zMjgwLDEwICszMjgzLDEwIEBACiAKIAkvKiBjaGVjayBmb3IgcmVjZWl2ZSBldmVudHMgdGhhdCByZXF1aXJlIHByb2Nlc3NpbmcgKi8KIAlpZiAodWNjZSAmIFVDQ0VfUlhfRVZFTlRTKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ1Z2V0aC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdWdldGgtPm5hcGkpKSB7CiAJCQl1Y2NtICY9IH5VQ0NFX1JYX0VWRU5UUzsKIAkJCW91dF9iZTMyKHVjY2YtPnBfdWNjbSwgdWNjbSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ1Z2V0aC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnVnZXRoLT5uYXBpKTsKIAkJfQogCX0KIApAQCAtMzM0NSw2ICszMzQ4LDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWVyciA9IGluaXRfcGh5KGRldik7CisJaWYgKGVycikgeworCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQorCQkJdWdldGhfZXJyKCIlczogQ2Fubm90IGluaXRpYWxpemUgUEhZLCBhYm9ydGluZy4iLAorCQkJCSAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAllcnIgPSB1Y2Nfc3RydWN0X2luaXQodWdldGgpOwogCWlmIChlcnIpIHsKIAkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKQEAgLTMzODEsMTMgKzMzOTIsNiBAQAogCQkJCSAgICZ1Z2V0aC0+dWdfcmVncy0+bWFjc3RuYWRkcjEsCiAJCQkJICAgJnVnZXRoLT51Z19yZWdzLT5tYWNzdG5hZGRyMik7CiAKLQllcnIgPSBpbml0X3BoeShkZXYpOwotCWlmIChlcnIpIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKLQkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsaXplIFBIWSwgYWJvcnRpbmcuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQogCXBoeV9zdGFydCh1Z2V0aC0+cGh5ZGV2KTsKIAogCWVyciA9IHVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKQEAgLTM0MzAsOSArMzQzNCw2IEBACiAKIAlmcmVlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEsIHVnZXRoLT5kZXYpOwogCi0JcGh5X2Rpc2Nvbm5lY3QodWdldGgtPnBoeWRldik7Ci0JdWdldGgtPnBoeWRldiA9IE5VTEw7Ci0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTM1MDEsNiArMzUwMiwyMCBAQAogCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfTUlJOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVjY19nZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVjY19nZXRoX29wZW4sCisJLm5kb19zdG9wCQk9IHVjY19nZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1Y2NfZ2V0aF9zdGFydF94bWl0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHVjY19nZXRoX3NldF9tdWx0aSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdWNjX2dldGhfdGltZW91dCwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdWNjX25ldHBvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgdWNjX2dldGhfcHJvYmUoc3RydWN0IG9mX2RldmljZSogb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwpAQCAtMzY0MSw3ICszNjU2LDcgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiAtMTsKIAotCQl1ZWNfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CisJCWZzbF9wcV9tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKIAkJc25wcmludGYodWdfaW5mby0+cGh5X2J1c19pZCwgc2l6ZW9mKHVnX2luZm8tPnBoeV9idXNfaWQpLAogCQkJIiVzOiUwMngiLCBidXNfbmFtZSwgKnByb3ApOwogCX0KQEAgLTM3MTYsMTkgKzM3MzEsMTEgQEAKIAogCS8qIEZpbGwgaW4gdGhlIGRldiBzdHJ1Y3R1cmUgKi8KIAl1ZWNfc2V0X2V0aHRvb2xfb3BzKGRldik7Ci0JZGV2LT5vcGVuID0gdWNjX2dldGhfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHVjY19nZXRoX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gdWNjX2dldGhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdWNjX2dldGhfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAlJTklUX1dPUksoJnVnZXRoLT50aW1lb3V0X3dvcmssIHVjY19nZXRoX3RpbWVvdXRfd29yayk7CiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdWdldGgtPm5hcGksIHVjY19nZXRoX3BvbGwsIFVDQ19HRVRIX0RFVl9XRUlHSFQpOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSB1Y2NfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IHVjY19nZXRoX2Nsb3NlOwotLy8gICAgZGV2LT5jaGFuZ2VfbXR1ID0gdWNjX2dldGhfY2hhbmdlX210dTsKIAlkZXYtPm10dSA9IDE1MDA7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB1Y2NfZ2V0aF9zZXRfbXVsdGk7CiAKIAl1Z2V0aC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLm1zZ19lbmFibGUsIFVHRVRIX01TR19ERUZBVUxUKTsKIAl1Z2V0aC0+cGh5X2ludGVyZmFjZSA9IHBoeV9pbnRlcmZhY2U7CkBAIC0zNzg5LDExICszNzk2LDYgQEAKIHsKIAlpbnQgaSwgcmV0OwogCi0JcmV0ID0gdWVjX21kaW9faW5pdCgpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCWlmIChuZXRpZl9tc2dfZHJ2KCZkZWJ1ZykpCiAJCXByaW50ayhLRVJOX0lORk8gInVjY19nZXRoOiAiIERSVl9ERVNDICJcbiIpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCkBAIC0zODAyLDE2ICszODA0LDEyIEBACiAKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVjY19nZXRoX2RyaXZlcik7CiAKLQlpZiAocmV0KQotCQl1ZWNfbWRpb19leGl0KCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdWNjX2dldGhfZXhpdCh2b2lkKQogewogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOwotCXVlY19tZGlvX2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQodWNjX2dldGhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCA2MTFiZGVmLi5lM2EyNWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vdWNjLmg+CiAjaW5jbHVkZSA8YXNtL3VjY19mYXN0Lmg+CiAKLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKLQogI2RlZmluZSBEUlZfREVTQyAiUUUgVUNDIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlciIKICNkZWZpbmUgRFJWX05BTUUgInVjY19nZXRoIgogI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xIgpAQCAtMTg0LDYgKzE4MiwxOCBAQAogI2RlZmluZSBVQ0NFX1JYX0VWRU5UUyAgKFVDQ0VfUlhGIHwgVUNDX0dFVEhfVUNDRV9CU1kpCiAjZGVmaW5lIFVDQ0VfVFhfRVZFTlRTCShVQ0NFX1RYQiB8IFVDQ19HRVRIX1VDQ0VfVFhFKQogCisvKiBUQkkgZGVmaW5lcyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQ1IJCTB4MDAJLyogQ29udHJvbCAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfU1IJCTB4MDEJLyogU3RhdHVzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkEJMHgwNAkvKiBBTiBhZHZlcnRpc2VtZW50ICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkxQQlBBCTB4MDUJLyogQU4gbGluayBwYXJ0bmVyIGJhc2UgcGFnZSBhYmlsaXR5ICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkVYCTB4MDYJLyogQU4gZXhwYW5zaW9uICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTk5QVAkweDA3CS8qIEFOIG5leHQgcGFnZSB0cmFuc21pdCAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5MUEFOUAkweDA4CS8qIEFOIGxpbmsgcGFydG5lciBhYmlsaXR5IG5leHQgcGFnZSAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfRVhTVAkweDBGCS8qIEV4dGVuZGVkIHN0YXR1cyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfSkQJCTB4MTAJLyogSml0dGVyIGRpYWdub3N0aWNzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9UQklDT04JMHgxMQkvKiBUQkkgY29udHJvbCAqLworCiAvKiBVQ0MgR0VUSCBNQUNDRkcxIChNQUMgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyKSAqLwogI2RlZmluZSBNQUNDRkcxX0ZMT1dfUlggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBGbG93IENvbnRyb2wKIAkJCQkJCQkJICAgUnggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwppbmRleCA2OGE3ZjU0Li5hNzU1YmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKICNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgotI2luY2x1ZGUgInVjY19nZXRoX21paS5oIgogCiBzdGF0aWMgY2hhciBod19zdGF0X2dzdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAkidHgtNjQtZnJhbWVzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZGE0ZWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCi0gKgotICogUUUgVUNDIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyIC0tIE1JSSBNYW5hZ2VtZW50IEJ1cyBJbXBsZW1lbnRhdGlvbgotICogUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJIE1hbmFnZW1lbnQgcmVncyBpbiB0aGUgVUNDIHJlZ2lzdGVyIHNwYWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogQXV0aG9yczogTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KLSAqCSAgICBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGh5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3VjYy5oPgotCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCi0jaW5jbHVkZSAidWNjX2dldGguaCIKLQotI2RlZmluZSBERUJVRwotI2lmZGVmIERFQlVHCi0jZGVmaW5lIHZkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHICwgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSB2ZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSgwKQotI2VuZGlmCi0KLSNkZWZpbmUgTUlJX0RSVl9ERVNDICJRRSBVQ0MgRXRoZXJuZXQgQ29udHJvbGxlciBNSUkgQnVzIgotI2RlZmluZSBNSUlfRFJWX05BTUUgImZzbC11ZWNfbWRpbyIKLQotLyogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBmb3IgdGhpcyBkZXZpY2UgdG8gdGhlIHJlZ2lzdGVyIGF0IHJlZ251bSwgKi8KLS8qIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzIGRvbmUgYmVmb3JlIGl0IHJldHVybnMuICBBbGwgUEhZICovCi0vKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIG1hc3RlciBVRUMgTUlJTSByZWdzICovCi1pbnQgdWVjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQotCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLAotCQkgKG1paV9pZCA8PCBNSUlNQUREX1BIWV9BRERSRVNTX1NISUZUKSB8IHJlZ251bSk7Ci0KLQkvKiBTZXR0aW5nIHVwIHRoZSBNSUkgTWFuZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNvbiwgdmFsdWUpOwotCi0JLyogV2FpdCB0aWxsIE1JSSBtYW5hZ2VtZW50IHdyaXRlIGlzIGNvbXBsZXRlICovCi0Jd2hpbGUgKChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSkgJiBNSUlNSU5EX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlYWRzIGZyb20gcmVnaXN0ZXIgcmVnbnVtIGluIHRoZSBQSFkgZm9yIGRldmljZSBkZXYsICovCi0vKiByZXR1cm5pbmcgdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZICovCi0vKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IHVlY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSkKLXsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0JdTE2IHZhbHVlOwotCi0JLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsCi0JCSAobWlpX2lkIDw8IE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQpIHwgcmVnbnVtKTsKLQotCS8qIENsZWFyIG1paW1jb20sIHBlcmZvcm0gYW4gTUlJIG1hbmFnZW1lbnQgcmVhZCBjeWNsZSAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCAwKTsKLQlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgTUlJTUNPTV9SRUFEX0NZQ0xFKTsKLQotCS8qIFdhaXQgdGlsbCBNSUkgbWFuYWdlbWVudCB3cml0ZSBpcyBjb21wbGV0ZSAqLwotCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkpICYgKE1JSU1JTkRfQlVTWSB8IE1JSU1JTkRfTk9UX1ZBTElEKSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQkvKiBSZWFkIE1JSSBtYW5hZ2VtZW50IHN0YXR1cyAgKi8KLQl2YWx1ZSA9IGluX2JlMzIoJnJlZ3MtPm1paW1zdGF0KTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCi1zdGF0aWMgaW50IHVlY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCi17Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCWludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKLQotCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCS8qIFJlc2V0IHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUX01BTkFHRU1FTlQpOwotCi0JLyogU2V0dXAgdGhlIE1JSSBNZ210IGNsb2NrIHNwZWVkICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTEyKTsKLQotCS8qIFdhaXQgdW50aWwgdGhlIGJ1cyBpcyBmcmVlICovCi0Jd2hpbGUgKChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkgJiYgdGltZW91dC0tKQotCQljcHVfcmVsYXgoKTsKLQotCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JaWYgKHRpbWVvdXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRoZSBNSUkgQnVzIGlzIHN0dWNrIVxuIiwgYnVzLT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB1ZWNfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlLCAqdGVtcG5wID0gTlVMTDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVnczsKLQlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCWludCBrLCBlcnIgPSAwOwotCi0JbmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKLQlpZiAoTlVMTCA9PSBuZXdfYnVzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW5ld19idXMtPm5hbWUgPSAiVUNDIEV0aGVybmV0IENvbnRyb2xsZXIgTUlJIEJ1cyI7Ci0JbmV3X2J1cy0+cmVhZCA9ICZ1ZWNfbWRpb19yZWFkOwotCW5ld19idXMtPndyaXRlID0gJnVlY19tZGlvX3dyaXRlOwotCW5ld19idXMtPnJlc2V0ID0gJnVlY19tZGlvX3Jlc2V0OwotCi0JbWVtc2V0KCZyZXMsIDAsIHNpemVvZihyZXMpKTsKLQotCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwotCWlmIChlcnIpCi0JCWdvdG8gcmVnX21hcF9mYWlsOwotCi0JdWVjX21kaW9fYnVzX25hbWUobmV3X2J1cy0+aWQsIG5wKTsKLQotCW5ld19idXMtPmlycSA9IGttYWxsb2MoMzIgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoTlVMTCA9PSBuZXdfYnVzLT5pcnEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byByZWdfbWFwX2ZhaWw7Ci0JfQotCi0JZm9yIChrID0gMDsgayA8IDMyOyBrKyspCi0JCW5ld19idXMtPmlycVtrXSA9IFBIWV9QT0xMOwotCi0Jd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wLCBjaGlsZCkpICE9IE5VTEwpIHsKLQkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKLQkJaWYgKGlycSAhPSBOT19JUlEpIHsKLQkJCWNvbnN0IHUzMiAqaWQgPSBvZl9nZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCBOVUxMKTsKLQkJCW5ld19idXMtPmlycVsqaWRdID0gaXJxOwotCQl9Ci0JfQotCi0JLyogU2V0IHRoZSBiYXNlIGFkZHJlc3MgKi8KLQlyZWdzID0gaW9yZW1hcChyZXMuc3RhcnQsIHNpemVvZihzdHJ1Y3QgdWNjX21paV9tbmcpKTsKLQotCWlmIChOVUxMID09IHJlZ3MpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBpb3JlbWFwX2ZhaWw7Ci0JfQotCi0JbmV3X2J1cy0+cHJpdiA9ICh2b2lkIF9fZm9yY2UgKilyZWdzOwotCi0JbmV3X2J1cy0+cGFyZW50ID0gZGV2aWNlOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIG5ld19idXMpOwotCi0JLyogUmVhZCBNSUkgbWFuYWdlbWVudCBtYXN0ZXIgZnJvbSBkZXZpY2UgdHJlZSAqLwotCXdoaWxlICgodGVtcG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUodGVtcG5wLCAibmV0d29yayIsICJ1Y2NfZ2V0aCIpKQotCSAgICAgICAhPSBOVUxMKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSB0ZW1wcmVzOwotCi0JCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UodGVtcG5wLCAwLCAmdGVtcHJlcyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOwotCi0JCS8qIGlmIG91ciBtZGlvIHJlZ3MgZmFsbCB3aXRoaW4gdGhpcyBVQ0MgcmVncyByYW5nZSAqLwotCQlpZiAoKHJlcy5zdGFydCA+PSB0ZW1wcmVzLnN0YXJ0KSAmJgotCQkgICAgKHJlcy5lbmQgPD0gdGVtcHJlcy5lbmQpKSB7Ci0JCQkvKiBzZXQgdGhpcyBVQ0MgdG8gYmUgdGhlIE1JSSBtYXN0ZXIgKi8KLQkJCWNvbnN0IHUzMiAqaWQ7Ci0KLQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHRlbXBucCwgImNlbGwtaW5kZXgiLCBOVUxMKTsKLQkJCWlmICghaWQpIHsKLQkJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eSh0ZW1wbnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKLQkJCQlpZiAoIWlkKQotCQkJCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOwotCQkJfQotCi0JCQl1Y2Nfc2V0X3FlX211eF9taWlfbW5nKCppZCAtIDEpOwotCi0JCQkvKiBhc3NpZ24gdGhlIFRCSSBhbiBhZGRyZXNzIHdoaWNoIHdvbid0Ci0JCQkgKiBjb25mbGljdCB3aXRoIHRoZSBQSFlzICovCi0JCQlvdXRfYmUzMigmcmVncy0+dXRiaXBhciwgVVRCSVBBUl9JTklUX1RCSVBBKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKLQlpZiAoMCAhPSBlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAotCQkgICAgICAgbmV3X2J1cy0+bmFtZSk7Ci0JCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWJ1c19yZWdpc3Rlcl9mYWlsOgotCWlvdW5tYXAocmVncyk7Ci1pb3JlbWFwX2ZhaWw6Ci0Ja2ZyZWUobmV3X2J1cy0+aXJxKTsKLXJlZ19tYXBfZmFpbDoKLQltZGlvYnVzX2ZyZWUobmV3X2J1cyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHVlY19tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7Ci0KLQltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKLQotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOwotCi0JaW91bm1hcCgodm9pZCBfX2lvbWVtICopYnVzLT5wcml2KTsKLQlidXMtPnByaXYgPSBOVUxMOwotCW1kaW9idXNfZnJlZShidXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHVlY19tZGlvX21hdGNoW10gPSB7Ci0JewotCQkudHlwZSA9ICJtZGlvIiwKLQkJLmNvbXBhdGlibGUgPSAidWNjX2dldGhfcGh5IiwKLQl9LAotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIiwKLQl9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgdWVjX21kaW9fZHJpdmVyID0gewotCS5uYW1lCT0gTUlJX0RSVl9OQU1FLAotCS5wcm9iZQk9IHVlY19tZGlvX3Byb2JlLAotCS5yZW1vdmUJPSB1ZWNfbWRpb19yZW1vdmUsCi0JLm1hdGNoX3RhYmxlCT0gdWVjX21kaW9fbWF0Y2gsCi19OwotCi1pbnQgX19pbml0IHVlY19tZGlvX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZWNfbWRpb19kcml2ZXIpOwotfQotCi0vKiBjYWxsZWQgZnJvbSBfX2luaXQgdWNjX2dldGhfaW5pdCwgdGhlcmVmb3JlIGNhbiBub3QgYmUgX19leGl0ICovCi12b2lkIHVlY19tZGlvX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWVjX21kaW9fZHJpdmVyKTsKLX0KLQotdm9pZCB1ZWNfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotICAgICAgICBjb25zdCB1MzIgKnJlZzsKLQotICAgICAgICByZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKLQotICAgICAgICBzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AleCIsIG5wLT5uYW1lLCByZWcgPyAqcmVnIDogMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MGNmODAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oCi0gKgotICogUUUgVUNDIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyIC0tIE1JSSBNYW5hZ2VtZW50IEJ1cyBJbXBsZW1lbnRhdGlvbgotICogUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJIE1hbmFnZW1lbnQgcmVncyBpbiB0aGUgVUNDIHJlZ2lzdGVyIHNwYWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogQXV0aG9yczogTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KLSAqCSAgICBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaWZuZGVmIF9fVUVDX01JSV9ICi0jZGVmaW5lIF9fVUVDX01JSV9ICi0KLS8qIFVDQyBHRVRIIE1JSU1DRkcgKE1JSSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1DRkdfUkVTRVRfTUFOQUdFTUVOVCAgICAgICAgICAgICAgICAweDgwMDAwMDAwCS8qIFJlc2V0Ci0JCQkJCQkJCSAgIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgTUlJTUNGR19OT19QUkVBTUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogUHJlYW1ibGUKLQkJCQkJCQkJICAgc3VwcHJlc3MgKi8KLSNkZWZpbmUgTUlJTUNGR19DTE9DS19ESVZJREVfU0hJRlQgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBjbG9jayBkaXZpZGUKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLSNkZWZpbmUgTUlJTUNGR19DTE9DS19ESVZJREVfTUFYICAgICAgICAgICAgICAgIDB4ZgkvKiBtYXggY2xvY2sgZGl2aWRlICovCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMiAgICAweDAwMDAwMDAwCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNCAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNiAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfOCAgICAweDAwMDAwMDAzCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTQgICAweDAwMDAwMDA1Ci0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTYgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMjAgICAweDAwMDAwMDA2Ci0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMjggICAweDAwMDAwMDA3Ci0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMzIgICAweDAwMDAwMDA5Ci0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNDggICAweDAwMDAwMDBhCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNjQgICAweDAwMDAwMDBiCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfODAgICAweDAwMDAwMDBjCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTEyICAweDAwMDAwMDBkCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTYwICAweDAwMDAwMDBlCi0jZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMjI0ICAweDAwMDAwMDBmCi0KLS8qIFVDQyBHRVRIIE1JSU1DT00gKE1JSSBNYW5hZ2VtZW50IENvbW1hbmQgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1DT01fU0NBTl9DWUNMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFNjYW4gY3ljbGUgKi8KLSNkZWZpbmUgTUlJTUNPTV9SRUFEX0NZQ0xFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUmVhZCBjeWNsZSAqLwotCi0vKiBVQ0MgR0VUSCBNSUlNQUREIChNSUkgTWFuYWdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQUREX1BIWV9BRERSRVNTX1NISUZUICAgICAgICAgICAgICAgKDMxIC0gMjMpCS8qIFBIWSBBZGRyZXNzCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0jZGVmaW5lIE1JSU1BRERfUEhZX1JFR0lTVEVSX1NISUZUICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogUEhZIFJlZ2lzdGVyCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0KLS8qIFVDQyBHRVRIIE1JSU1DT04gKE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1DT05fUEhZX0NPTlRST0xfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogUEhZIENvbnRyb2wKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLSNkZWZpbmUgTUlJTUNPTl9QSFlfU1RBVFVTX1NISUZUICAgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgU3RhdHVzCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0KLS8qIFVDQyBHRVRIIE1JSU1JTkQgKE1JSSBNYW5hZ2VtZW50IEluZGljYXRvciBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUlORF9OT1RfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogTm90IHZhbGlkICovCi0jZGVmaW5lIE1JSU1JTkRfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFNjYW4gaW4KLQkJCQkJCQkJICAgcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLQotLyogSW5pdGlhbCBUQkkgUGh5c2ljYWwgQWRkcmVzcyAqLwotI2RlZmluZSBVVEJJUEFSX0lOSVRfVEJJUEEJCQkweDFmCi0KLXN0cnVjdCB1Y2NfbWlpX21uZyB7Ci0JdTMyIG1paW1jZmc7CQkvKiBNSUkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHJlZyAqLwotCXUzMiBtaWltY29tOwkJLyogTUlJIG1hbmFnZW1lbnQgY29tbWFuZCByZWcgKi8KLQl1MzIgbWlpbWFkZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGFkZHJlc3MgcmVnICovCi0JdTMyIG1paW1jb247CQkvKiBNSUkgbWFuYWdlbWVudCBjb250cm9sIHJlZyAqLwotCXUzMiBtaWltc3RhdDsJCS8qIE1JSSBtYW5hZ2VtZW50IHN0YXR1cyByZWcgKi8KLQl1MzIgbWlpbWluZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGluZGljYXRpb24gcmVnICovCi0JdTggbm90Y2FyZVsyOF07CQkvKiBTcGFjZSBob2xkZXIgKi8KLQl1MzIgdXRiaXBhcjsJCS8qIFRCSSBwaHkgYWRkcmVzcyByZWcgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBUQkkgLyBNSUkgU2V0IFJlZ2lzdGVyICovCi1lbnVtIGVuZXRfdGJpX21paV9yZWcgewotCUVORVRfVEJJX01JSV9DUiA9IDB4MDAsCS8qIENvbnRyb2wgKi8KLQlFTkVUX1RCSV9NSUlfU1IgPSAweDAxLAkvKiBTdGF0dXMgKi8KLQlFTkVUX1RCSV9NSUlfQU5BID0gMHgwNCwJLyogQU4gYWR2ZXJ0aXNlbWVudCAqLwotCUVORVRfVEJJX01JSV9BTkxQQlBBID0gMHgwNSwJLyogQU4gbGluayBwYXJ0bmVyIGJhc2UgcGFnZSBhYmlsaXR5ICovCi0JRU5FVF9UQklfTUlJX0FORVggPSAweDA2LAkvKiBBTiBleHBhbnNpb24gKi8KLQlFTkVUX1RCSV9NSUlfQU5OUFQgPSAweDA3LAkvKiBBTiBuZXh0IHBhZ2UgdHJhbnNtaXQgKi8KLQlFTkVUX1RCSV9NSUlfQU5MUEFOUCA9IDB4MDgsCS8qIEFOIGxpbmsgcGFydG5lciBhYmlsaXR5IG5leHQgcGFnZSAqLwotCUVORVRfVEJJX01JSV9FWFNUID0gMHgwRiwJLyogRXh0ZW5kZWQgc3RhdHVzICovCi0JRU5FVF9UQklfTUlJX0pEID0gMHgxMCwJLyogSml0dGVyIGRpYWdub3N0aWNzICovCi0JRU5FVF9UQklfTUlJX1RCSUNPTiA9IDB4MTEJLyogVEJJIGNvbnRyb2wgKi8KLX07Ci0KLWludCB1ZWNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pOwotaW50IHVlY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSk7Ci1pbnQgX19pbml0IHVlY19tZGlvX2luaXQodm9pZCk7Ci12b2lkIHVlY19tZGlvX2V4aXQodm9pZCk7Ci12b2lkIHVlY19tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwotI2VuZGlmCQkJCS8qIF9fVUVDX01JSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeC5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwppbmRleCAzOTZmODIxLi44N2I0YTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKQEAgLTgwNyw2ICs4MDcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheDg4MTcyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bAkJPSBhc2l4X2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXg4ODE3Ml9zZXRfbXVsdGljYXN0LAorfTsKKwogc3RhdGljIGludCBheDg4MTcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTg0Niw5ICs4NTgsOCBAQAogCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHgzZjsKIAlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7Ci0JZGV2LT5uZXQtPmRvX2lvY3RsID0gYXNpeF9pb2N0bDsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTcyX3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODE3Ml9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTcyX2V0aHRvb2xfb3BzOwogCiAJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKQEAgLTg5OCw2ICs5MDksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheDg4NzcyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bAkJPSBhc2l4X2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0LAorfTsKKwogc3RhdGljIGludCBheDg4NzcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0LCBlbWJkX3BoeTsKQEAgLTk2Miw3ICs5ODUsNiBAQAogCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBhc2l4X21kaW9fd3JpdGU7CiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDFmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7Ci0JZGV2LT5uZXQtPmRvX2lvY3RsID0gYXNpeF9pb2N0bDsKIAlkZXYtPm1paS5waHlfaWQgPSBhc2l4X2dldF9waHlfYWRkcihkZXYpOwogCiAJcGh5aWQgPSBhc2l4X2dldF9waHlpZChkZXYpOwpAQCAtOTc4LDcgKzEwMDAsNyBAQAogCiAJbXNsZWVwKDE1MCk7CiAKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODg3NzJfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODc3Ml9ldGh0b29sX29wczsKIAogCWFzaXhfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CkBAIC0xMTgxLDYgKzEyMDMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheDg4MTc4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdCwKKwkubmRvX2RvX2lvY3RsIAkJPSBhc2l4X2lvY3RsLAorCS5uZG9fY2hhbmdlX210dSAJPSBheDg4MTc4X2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgaW50IGF4ODgxNzhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CkBAIC0xMjQ3LDExICsxMjgxLDEwIEBACiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDFmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7CiAJZGV2LT5taWkuc3VwcG9ydHNfZ21paSA9IDE7Ci0JZGV2LT5uZXQtPmRvX2lvY3RsID0gYXNpeF9pb2N0bDsKIAlkZXYtPm1paS5waHlfaWQgPSBhc2l4X2dldF9waHlfYWRkcihkZXYpOwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3Q7CisKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4MTc4X25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODgxNzhfZXRodG9vbF9vcHM7Ci0JZGV2LT5uZXQtPmNoYW5nZV9tdHUgPSAmYXg4ODE3OF9jaGFuZ2VfbXR1OwogCiAJcGh5aWQgPSBhc2l4X2dldF9waHlpZChkZXYpOwogCWRiZygiUEhZSUQ9MHglMDh4IiwgcGh5aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggY2I3YWNiYi4uYjlkZDQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC0xNjMsNyArMTYzLDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdW5zaWduZWQgaW50IHR4X3B0ciwgdHhfaWR4OwpAQCAtMjQ1LDggKzI0NCw4IEBACiAJCWlmKCFjYXRjLT5pc19mNXUwMTEpIHsKIAkJCXBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTsKIAkJCWlmIChwa3RfbGVuID4gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQkJY2F0Yy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJCWNhdGMtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0yNjIsOCArMjYxLDggQEAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2F0Yy0+bmV0ZGV2KTsKIAkJbmV0aWZfcngoc2tiKTsKIAotCQljYXRjLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWNhdGMtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKIAkJLyogRjVVMDExIG9ubHkgZG9lcyBvbmUgcGFja2V0IHBlciBSWCAqLwogCQlpZiAoY2F0Yy0+aXNfZjV1MDExKQpAQCAtMzg2LDcgKzM4NSw3IEBACiAJCWRiZygiVHggUmVzZXQuIik7CiAJCXVyYi0+c3RhdHVzID0gMDsKIAkJY2F0Yy0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCWNhdGMtPnN0YXRzLnR4X2Vycm9ycysrOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQljbGVhcl9iaXQoVFhfUlVOTklORywgJmNhdGMtPmZsYWdzKTsKIAkJbmV0aWZfd2FrZV9xdWV1ZShjYXRjLT5uZXRkZXYpOwogCQlyZXR1cm47CkBAIC00MTIsNyArNDExLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgY2F0Y19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBpbnQgY2F0Y19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NDMsOCArNDQyLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7CiAKIAlpZiAociA+PSAwKSB7Ci0JCWNhdGMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCQljYXRjLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCX0KIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTU4OCwxNSArNTg3LDE1IEBACiAJc3dpdGNoIChpbmRleCkgewogCQljYXNlIFR4U2luZ2xlQ29sbDoKIAkJY2FzZSBUeE11bHRpQ29sbDoKLQkJCWNhdGMtPnN0YXRzLmNvbGxpc2lvbnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gZGF0YSAtIGxhc3Q7CiAJCQlicmVhazsKIAkJY2FzZSBUeEV4Y2Vzc0NvbGw6Ci0JCQljYXRjLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKLQkJCWNhdGMtPnN0YXRzLnR4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCQljYXNlIFJ4RnJhbUVycjoKLQkJCWNhdGMtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKLQkJCWNhdGMtPnN0YXRzLnJ4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CiAJCQlicmVhazsKIAl9CiAKQEAgLTYxNCwxMiArNjEzLDYgQEAKIAltb2RfdGltZXIoJmNhdGMtPnRpbWVyLCBqaWZmaWVzICsgU1RBVFNfVVBEQVRFKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjYXRjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlyZXR1cm4gJmNhdGMtPnN0YXRzOwotfQotCiAvKgogICogUmVjZWl2ZSBtb2Rlcy4gQnJvYWRjYXN0LCBNdWx0aWNhc3QsIFByb21pc2MuCiAgKi8KQEAgLTc1MCw2ICs3NDMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjYXRjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGNhdGNfb3BlbiwKKwkubmRvX3N0b3AJCT0gY2F0Y19zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjYXRjX3N0YXJ0X3htaXQsCisKKwkubmRvX3R4X3RpbWVvdXQJCT0gY2F0Y190eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gY2F0Y19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBVU0IgcHJvYmUsIGRpc2Nvbm5lY3QuCiAgKi8KQEAgLTc3NCwxMyArNzc5LDggQEAKIAogCWNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JbmV0ZGV2LT5vcGVuID0gY2F0Y19vcGVuOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gY2F0Y19oYXJkX3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5zdG9wID0gY2F0Y19zdG9wOwotCW5ldGRldi0+Z2V0X3N0YXRzID0gY2F0Y19nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gY2F0Y190eF90aW1lb3V0OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjYXRjX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBjYXRjX3NldF9tdWx0aWNhc3RfbGlzdDsKIAlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmb3BzKTsKIAogCWNhdGMtPnVzYmRldiA9IHVzYmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwppbmRleCA4MTY4MmM2Li42ZmM0ZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCkBAIC00MTksNiArNDE5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZG05NjAxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsIAkJPSBkbTk2MDFfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBkbTk2MDFfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGRtOTYwMV9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IGRtOTYwMV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJaW50IHJldDsKQEAgLTQyOCw5ICs0NDAsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JZGV2LT5uZXQtPmRvX2lvY3RsID0gZG05NjAxX2lvY3RsOwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBkbTk2MDFfc2V0X211bHRpY2FzdDsKLQlkZXYtPm5ldC0+c2V0X21hY19hZGRyZXNzID0gZG05NjAxX3NldF9tYWNfYWRkcmVzczsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZkbTk2MDFfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmZG05NjAxX2V0aHRvb2xfb3BzOwogCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gRE1fVFhfT1ZFUkhFQUQ7CiAJZGV2LT5oYXJkX210dSA9IGRldi0+bmV0LT5tdHUgKyBkZXYtPm5ldC0+aGFyZF9oZWFkZXJfbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGZlOThhY2EuLmNkZTQyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTkzNiw4ICs5MzYsNyBAQAogCQkJaWYgKCFvZGV2LT5yeF9idWZfbWlzc2luZykgewogCQkJCS8qIFBhY2tldCBpcyBjb21wbGV0ZS4gSW5qZWN0IGludG8gc3RhY2suICovCiAJCQkJLyogV2UgaGF2ZSBJUCBwYWNrZXQgaGVyZSAqLwotCQkJCW9kZXYtPnNrYl9yeF9idWYtPnByb3RvY29sID0KLQkJCQkJCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOworCQkJCW9kZXYtPnNrYl9yeF9idWYtPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfSVApOwogCQkJCS8qIGRvbid0IGNoZWNrIGl0ICovCiAJCQkJb2Rldi0+c2tiX3J4X2J1Zi0+aXBfc3VtbWVkID0KIAkJCQkJQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CkBAIC0xMjQ3LDcgKzEyNDYsNyBAQAogICogVGhpcyBuZWVkcyB0byBiZSBhIHRhc2tsZXQgb3RoZXJ3aXNlIHdlIHdpbGwKICAqIGVuZCB1cCByZWN1cnNpdmVseSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQgaHNvX3VudGhyb3R0bGVfdGFza2xldChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgaHNvX3VudGhyb3R0bGVfdGFza2xldChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEyNjYsNyArMTI2NSw3IEBACiAJdGFza2xldF9oaV9zY2hlZHVsZSgmc2VyaWFsLT51bnRocm90dGxlX3Rhc2tsZXQpOwogfQogCi12b2lkIGhzb191bnRocm90dGxlX3dvcmtmdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGhzb191bnRocm90dGxlX3dvcmtmdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0KIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoc29fc2VyaWFsLApAQCAtMTQ2NSw5ICsxNDY0LDkgQEAKIAogCXJldHVybiBjaGFyczsKIH0KLWludCB0aW9jbWdldF9zdWJtaXRfdXJiKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsCi0JCQlzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICAqdGlvY21nZXQsCi0JCQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQorc3RhdGljIGludCB0aW9jbWdldF9zdWJtaXRfdXJiKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsCisJCQkgICAgICAgc3RydWN0IGhzb190aW9jbWdldCAqdGlvY21nZXQsCisJCQkgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKIHsKIAlpbnQgcmVzdWx0OwogCkBAIC0yMzY0LDEyICsyMzYzLDYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qIEZyZWVzIGEgZ2VuZXJhbCBoc28gZGV2aWNlICovCi1zdGF0aWMgdm9pZCBoc29fZnJlZV9kZXZpY2Uoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYpCi17Ci0Ja2ZyZWUoaHNvX2Rldik7Ci19Ci0KIC8qIENyZWF0ZXMgYSBnZW5lcmFsIGhzbyBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2NyZWF0ZV9kZXZpY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkJCSAgICBpbnQgcG9ydF9zcGVjKQpAQCAtMjQzMiw5ICsyNDI1LDE2IEBACiAJCWZyZWVfbmV0ZGV2KGhzb19uZXQtPm5ldCk7CiAJfQogCi0JaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCWtmcmVlKGhzb19kZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzb19uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGhzb19uZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBoc29fbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGhzb19uZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoc29fbmV0X3R4X3RpbWVvdXQsCit9OworCiAvKiBpbml0aWFsaXplIHRoZSBuZXR3b3JrIGludGVyZmFjZSAqLwogc3RhdGljIHZvaWQgaHNvX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CkBAIC0yNDQzLDEwICsyNDQzLDcgQEAKIAlEMSgic2l6ZW9mIGhzb19uZXQgaXMgJWQiLCAoaW50KXNpemVvZigqaHNvX25ldCkpOwogCiAJLyogZmlsbCBpbiB0aGUgb3RoZXIgZmllbGRzICovCi0JbmV0LT5vcGVuID0gaHNvX25ldF9vcGVuOwotCW5ldC0+c3RvcCA9IGhzb19uZXRfY2xvc2U7Ci0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBoc29fbmV0X3N0YXJ0X3htaXQ7Ci0JbmV0LT50eF90aW1lb3V0ID0gaHNvX25ldF90eF90aW1lb3V0OworCW5ldC0+bmV0ZGV2X29wcyA9ICZoc29fbmV0ZGV2X29wczsKIAluZXQtPndhdGNoZG9nX3RpbWVvID0gSFNPX05FVF9UWF9USU1FT1VUOwogCW5ldC0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlAgfCBJRkZfTVVMVElDQVNUOwogCW5ldC0+dHlwZSA9IEFSUEhSRF9OT05FOwpAQCAtMjY0Niw3ICsyNjQzLDcgQEAKIAl9CiAJaHNvX2ZyZWVfdGlvbWdldChzZXJpYWwpOwogCWtmcmVlKHNlcmlhbCk7Ci0JaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCWtmcmVlKGhzb19kZXYpOwogfQogCiAvKiBDcmVhdGVzIGEgYnVsayBBVCBjaGFubmVsICovCkBAIC0yNzI3LDcgKzI3MjQsNyBAQAogZXhpdDoKIAloc29fZnJlZV90aW9tZ2V0KHNlcmlhbCk7CiAJa2ZyZWUoc2VyaWFsKTsKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI3ODYsNyArMjc4Myw3IEBACiAJCWtmcmVlKHNlcmlhbCk7CiAJfQogCWlmIChoc29fZGV2KQotCQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJCWtmcmVlKGhzb19kZXYpOwogCXJldHVybiBOVUxMOwogCiB9CkBAIC0yOTc5LDggKzI5NzYsNiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJmhzb19kcml2ZXIsIGludGVyZmFjZSwgaHNvX2Rldik7Ci0KIAkvKiBzYXZlIG91ciBkYXRhIHBvaW50ZXIgaW4gdGhpcyBkZXZpY2UgKi8KIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgaHNvX2Rldik7CiAKQEAgLTI5OTgsOCArMjk5Myw2IEBACiAKIAkvKiByZW1vdmUgcmVmZXJlbmNlIG9mIG91ciBwcml2YXRlIGRhdGEgKi8KIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0KLQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZoc29fZHJpdmVyLCBpbnRlcmZhY2UpOwogfQogCiBzdGF0aWMgdm9pZCBhc3luY19nZXRfaW50ZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwppbmRleCBjZWQ4ZjM2Li43YWU5YWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKQEAgLTQ4Niw2ICs0ODYsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3M3ODMwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsIAkJPSBtY3M3ODMwX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbWNzNzgzMF9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCSA9IG1jczc4MzBfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBtY3M3ODMwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2LT5uZXQ7CkBAIC00OTUsMTEgKzUwNyw5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQluZXQtPmRvX2lvY3RsID0gbWNzNzgzMF9pb2N0bDsKIAluZXQtPmV0aHRvb2xfb3BzID0gJm1jczc4MzBfZXRodG9vbF9vcHM7Ci0JbmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBtY3M3ODMwX3NldF9tdWx0aWNhc3Q7CisJbmV0LT5uZXRkZXZfb3BzID0gJm1jczc4MzBfbmV0ZGV2X29wczsKIAltY3M3ODMwX3NldF9tdWx0aWNhc3QobmV0KTsKLQluZXQtPnNldF9tYWNfYWRkcmVzcyA9IG1jczc4MzBfc2V0X21hY19hZGRyZXNzOwogCiAJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN0YXR1cyBieXRlIG9uIHJ4ICovCiAJZGV2LT5yeF91cmJfc2l6ZSA9IEVUSF9GUkFNRV9MRU4gKyAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggYmNkODU4Yy4uMWJmMjQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkJCQlzdHJ1Y3Qgcm5kaXNfa2VlcGFsaXZlX2MgKm1zZyA9ICh2b2lkICopYnVmOwogCiAJCQkJbXNnLT5tc2dfdHlwZSA9IFJORElTX01TR19LRUVQQUxJVkVfQzsKLQkJCQltc2ctPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKm1zZyk7CisJCQkJbXNnLT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICptc2cpOwogCQkJCW1zZy0+c3RhdHVzID0gUk5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAJCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKIAkJCQkJdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCkBAIC0yMzcsNyArMjM3LDcgQEAKIAl1LmdldC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5nZXQgKyBpbl9sZW4pOwogCXUuZ2V0LT5vaWQgPSBvaWQ7CiAJdS5nZXQtPmxlbiA9IGNwdV90b19sZTMyKGluX2xlbik7Ci0JdS5nZXQtPm9mZnNldCA9IGNjcHUyKDIwKTsKKwl1LmdldC0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoMjApOwogCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKQEAgLTI2Niw2ICsyNjYsMTYgQEAKIAlyZXR1cm4gLUVET007CiB9CiAKKy8qIHNhbWUgYXMgdXNibmV0X25ldGRldl9vcHMgYnV0IE1UVSBjaGFuZ2Ugbm90IGFsbG93ZWQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcm5kaXNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogaW50CiBnZW5lcmljX3JuZGlzX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgaW50IGZsYWdzKQogewpAQCAtMjk3LDkgKzMwNyw5IEBACiAJCWdvdG8gZmFpbDsKIAogCXUuaW5pdC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfSU5JVDsKLQl1LmluaXQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKnUuaW5pdCk7Ci0JdS5pbml0LT5tYWpvcl92ZXJzaW9uID0gY2NwdTIoMSk7Ci0JdS5pbml0LT5taW5vcl92ZXJzaW9uID0gY2NwdTIoMCk7CisJdS5pbml0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmluaXQpOworCXUuaW5pdC0+bWFqb3JfdmVyc2lvbiA9IGNwdV90b19sZTMyKDEpOworCXUuaW5pdC0+bWlub3JfdmVyc2lvbiA9IGNwdV90b19sZTMyKDApOwogCiAJLyogbWF4IHRyYW5zZmVyIChpbiBzcGVjKSBpcyAweDQwMDAgYXQgZnVsbCBzcGVlZCwgYnV0IGZvcgogCSAqIFRYIHdlJ2xsIHN0aWNrIHRvIG9uZSBFdGhlcm5ldCBwYWNrZXQgcGx1cyBSTkRJUyBmcmFtaW5nLgpAQCAtMzI3LDcgKzMzNyw4IEBACiAJZGV2LT5yeF91cmJfc2l6ZSAmPSB+KGRldi0+bWF4cGFja2V0IC0gMSk7CiAJdS5pbml0LT5tYXhfdHJhbnNmZXJfc2l6ZSA9IGNwdV90b19sZTMyKGRldi0+cnhfdXJiX3NpemUpOwogCi0JbmV0LT5jaGFuZ2VfbXR1ID0gTlVMTDsKKwluZXQtPm5ldGRldl9vcHMgPSAmcm5kaXNfbmV0ZGV2X29wczsKKwogCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CiAJCS8qIGl0IG1pZ2h0IG5vdCBldmVuIGJlIGFuIFJORElTIGRldmljZSEhICovCkBAIC00MDMsMTAgKzQxNCwxMCBAQAogCS8qIHNldCBhIG5vbnplcm8gZmlsdGVyIHRvIGVuYWJsZSBkYXRhIHRyYW5zZmVycyAqLwogCW1lbXNldCh1LnNldCwgMCwgc2l6ZW9mICp1LnNldCk7CiAJdS5zZXQtPm1zZ190eXBlID0gUk5ESVNfTVNHX1NFVDsKLQl1LnNldC0+bXNnX2xlbiA9IGNjcHUyKDQgKyBzaXplb2YgKnUuc2V0KTsKKwl1LnNldC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKDQgKyBzaXplb2YgKnUuc2V0KTsKIAl1LnNldC0+b2lkID0gT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI7Ci0JdS5zZXQtPmxlbiA9IGNjcHUyKDQpOwotCXUuc2V0LT5vZmZzZXQgPSBjY3B1Migoc2l6ZW9mICp1LnNldCkgLSA4KTsKKwl1LnNldC0+bGVuID0gY3B1X3RvX2xlMzIoNCk7CisJdS5zZXQtPm9mZnNldCA9IGNwdV90b19sZTMyKChzaXplb2YgKnUuc2V0KSAtIDgpOwogCSooX19sZTMyICopKHUuYnVmICsgc2l6ZW9mICp1LnNldCkgPSBSTkRJU19ERUZBVUxUX0ZJTFRFUjsKIAogCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CkBAIC00MjMsNyArNDM0LDcgQEAKIGhhbHRfZmFpbF9hbmRfcmVsZWFzZToKIAltZW1zZXQodS5oYWx0LCAwLCBzaXplb2YgKnUuaGFsdCk7CiAJdS5oYWx0LT5tc2dfdHlwZSA9IFJORElTX01TR19IQUxUOwotCXUuaGFsdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5oYWx0KTsKKwl1LmhhbHQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuaGFsdCk7CiAJKHZvaWQpIHJuZGlzX2NvbW1hbmQoZGV2LCAodm9pZCAqKXUuaGFsdCwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CiBmYWlsX2FuZF9yZWxlYXNlOgogCXVzYl9zZXRfaW50ZmRhdGEoaW5mby0+ZGF0YSwgTlVMTCk7CkBAIC00NDgsNyArNDU5LDcgQEAKIAloYWx0ID0ga3phbGxvYyhDT05UUk9MX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoaGFsdCkgewogCQloYWx0LT5tc2dfdHlwZSA9IFJORElTX01TR19IQUxUOwotCQloYWx0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICpoYWx0KTsKKwkJaGFsdC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqaGFsdCk7CiAJCSh2b2lkKSBybmRpc19jb21tYW5kKGRldiwgKHZvaWQgKiloYWx0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAkJa2ZyZWUoaGFsdCk7CiAJfQpAQCAtNTQzLDcgKzU1NCw3IEBACiAJbWVtc2V0KGhkciwgMCwgc2l6ZW9mICpoZHIpOwogCWhkci0+bXNnX3R5cGUgPSBSTkRJU19NU0dfUEFDS0VUOwogCWhkci0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKLQloZHItPmRhdGFfb2Zmc2V0ID0gY2NwdTIoc2l6ZW9mKCpoZHIpIC0gOCk7CisJaGRyLT5kYXRhX29mZnNldCA9IGNwdV90b19sZTMyKHNpemVvZigqaGRyKSAtIDgpOwogCWhkci0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW4pOwogCiAJLyogRklYTUUgbWFrZSB0aGUgbGFzdCBwYWNrZXQgYWx3YXlzIGJlIHNob3J0IC4uLiAqLwpAQCAtNTYyLDkgKzU3Myw2IEBACiAJLnR4X2ZpeHVwID0Jcm5kaXNfdHhfZml4dXAsCiB9OwogCi0jdW5kZWYgY2NwdTIKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQJcHJvZHVjdHMgW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwppbmRleCBkODY2NGJmLi5mOWZiNDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKQEAgLTE1NSw3ICsxNTUsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRsOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHVyYiAqcnhfdXJiLCAqdHhfdXJiLCAqaW50cl91cmIsICpjdHJsX3VyYjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiLCAqcnhfc2tiOwpAQCAtNDYzLDggKzQ2Miw4IEBACiAJc2tiX3B1dChkZXYtPnJ4X3NrYiwgcGt0X2xlbik7CiAJZGV2LT5yeF9za2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoZGV2LT5yeF9za2IsIG5ldGRldik7CiAJbmV0aWZfcngoZGV2LT5yeF9za2IpOwotCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKIAlzcGluX2xvY2soJmRldi0+cnhfcG9vbF9sb2NrKTsKIAlza2IgPSBwdWxsX3NrYihkZXYpOwpAQCAtNTczLDEzICs1NzIsMTMgQEAKIAogCWQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpZiAoZFswXSAmIFRTUl9FUlJPUlMpIHsKLQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlpZiAoZFtJTlRfVFNSXSAmIChUU1JfRUNPTCB8IFRTUl9KQlIpKQotCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgVFNSX0xDT0wpCi0JCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJCWRldi0+bmV0ZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgVFNSX0xPU1NfQ1JTKQotCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJfQogCS8qIFJlcG9ydCBsaW5rIHN0YXR1cyBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHN0YWNrICovCiAJaWYgKChkW0lOVF9NU1JdICYgTVNSX0xJTkspID09IDApIHsKQEAgLTY5NywxNyArNjk2LDEyIEBACiAJc2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxNTBfbmV0ZGV2X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICYoKHJ0bDgxNTBfdCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0czsKLX0KLQogc3RhdGljIHZvaWQgcnRsODE1MF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWRldl93YXJuKCZuZXRkZXYtPmRldiwgIlR4IHRpbWVvdXQuXG4iKTsKIAl1c2JfdW5saW5rX3VyYihkZXYtPnR4X3VyYik7Ci0JZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwluZXRkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTUwX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTc0NywxMiArNzQxLDEyIEBACiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKIAkJZWxzZSB7CiAJCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJmYWlsZWQgdHhfdXJiICVkXG4iLCByZXMpOwotCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCW5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAl9CiAKQEAgLTg5Nyw2ICs4OTEsMTkgQEAKIAlyZXR1cm4gcmVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gcnRsODE1MF9vcGVuLAorCS5uZG9fc3RvcAkJPSBydGw4MTUwX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gcnRsODE1MF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODE1MF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCAJPSBydGw4MTUwX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzcywKKworCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgcnRsODE1MF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC05MjMsMTUgKzkzMCw4IEBACiAJCiAJZGV2LT51ZGV2ID0gdWRldjsKIAlkZXYtPm5ldGRldiA9IG5ldGRldjsKLQluZXRkZXYtPm9wZW4gPSBydGw4MTUwX29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gcnRsODE1MF9jbG9zZTsKLQluZXRkZXYtPmRvX2lvY3RsID0gcnRsODE1MF9pb2N0bDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmcnRsODE1MF9uZXRkZXZfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBSVEw4MTUwX1RYX1RJTUVPVVQ7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gcnRsODE1MF90eF90aW1lb3V0OwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gcnRsODE1MF9zdGFydF94bWl0OwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcnRsODE1MF9zZXRfbXVsdGljYXN0OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gcnRsODE1MF9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBydGw4MTUwX25ldGRldl9zdGF0czsKIAlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmb3BzKTsKIAlkZXYtPmludHJfaW50ZXJ2YWwgPSAxMDA7CS8qIDEwMG1zICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKaW5kZXggNTU3NGFiZS4uZGMxNjY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKQEAgLTU1LDExICs1NSwxMCBAQAogCiBzdHJ1Y3QgdXNiX2NvbnRleHQgewogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOwotCXN0cnVjdCBjb21wbGV0aW9uIG5vdGlmeTsKIAlzdHJ1Y3QgdXNibmV0ICpkZXY7CiB9OwogCi1pbnQgdHVyYm9fbW9kZSA9IHRydWU7CitzdGF0aWMgaW50IHR1cmJvX21vZGUgPSB0cnVlOwogbW9kdWxlX3BhcmFtKHR1cmJvX21vZGUsIGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0dXJib19tb2RlLCAiRW5hYmxlIG11bHRpcGxlIGZyYW1lcyBwZXIgUnggdHJhbnNhY3Rpb24iKTsKIApAQCAtMzA3LDcgKzMwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNtc2M5NXh4X2FzeW5jX2NtZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX2NvbnRleHQgKnVzYl9jb250ZXh0ID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9jb250ZXh0LT5kZXY7CkBAIC0zMTYsOCArMzE1LDYgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZGV2d2FybihkZXYsICJhc3luYyBjYWxsYmFjayBmYWlsZWQgd2l0aCAlZCIsIHN0YXR1cyk7CiAKLQljb21wbGV0ZSgmdXNiX2NvbnRleHQtPm5vdGlmeSk7Ci0KIAlrZnJlZSh1c2JfY29udGV4dCk7CiAJdXNiX2ZyZWVfdXJiKHVyYik7CiB9CkBAIC0zNDgsMTEgKzM0NSwxMCBAQAogCXVzYl9jb250ZXh0LT5yZXEud1ZhbHVlID0gMDA7CiAJdXNiX2NvbnRleHQtPnJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CiAJdXNiX2NvbnRleHQtPnJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ1c2JfY29udGV4dC0+bm90aWZ5KTsKIAogCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKIAkJKHZvaWQgKikmdXNiX2NvbnRleHQtPnJlcSwgZGF0YSwgc2l6ZSwKLQkJKHVzYl9jb21wbGV0ZV90KXNtc2M5NXh4X2FzeW5jX2NtZF9jYWxsYmFjaywKKwkJc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrLAogCQkodm9pZCAqKXVzYl9jb250ZXh0KTsKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CkBAIC0xMDEyLDYgKzEwMDgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbXNjOTV4eF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IHNtc2M5NXh4X2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc21zYzk1eHhfc2V0X211bHRpY2FzdCwKK307CisKIHN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IE5VTEw7CkBAIC0xMDQyLDkgKzEwNTAsOCBAQAogCS8qIEluaXQgYWxsIHJlZ2lzdGVycyAqLwogCXJldCA9IHNtc2M5NXh4X3Jlc2V0KGRldik7CiAKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBzbXNjOTV4eF9pb2N0bDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZzbXNjOTV4eF9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZzbXNjOTV4eF9ldGh0b29sX29wczsKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gc21zYzk1eHhfc2V0X211bHRpY2FzdDsKIAlkZXYtPm5ldC0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKIAlkZXYtPm5ldC0+aGFyZF9oZWFkZXJfbGVuICs9IFNNU0M5NVhYX1RYX09WRVJIRUFEOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGMzMjI4NGYuLjY1OTY1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQoraW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgdXNibmV0CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCWludAkJbGxfbXR1ID0gbmV3X210dSArIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwpAQCAtMjQ2LDE0ICsyNDYsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdXNibmV0X2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKLXsKLQlzdHJ1Y3QgdXNibmV0CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXJldHVybiAmZGV2LT5zdGF0czsKLX0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9jaGFuZ2VfbXR1KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTQ4LDcgKzU0MSw3IEBACiAKIC8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAogCi1zdGF0aWMgaW50IHVzYm5ldF9zdG9wIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoraW50IHVzYm5ldF9zdG9wIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCWludAkJCXRlbXA7CkBAIC01OTIsNiArNTg1LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3N0b3ApOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01OTksNyArNTkzLDcgQEAKIAogLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CiAKLXN0YXRpYyBpbnQgdXNibmV0X29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitpbnQgdXNibmV0X29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJcmV0dmFsOwpAQCAtNjc0LDYgKzY2OCw3IEBACiBkb25lX25vcG06CiAJcmV0dXJuIHJldHZhbDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9vcGVuKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtOTA4LDcgKzkwMyw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQordm9pZCB1c2JuZXRfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIApAQCAtOTE3LDEwICs5MTIsMTEgQEAKIAogCS8vIEZJWE1FOiBkZXZpY2UgcmVjb3ZlcnkgLS0gcmVzZXQ/CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfdHhfdGltZW91dCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitpbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJbGVuZ3RoOwpAQCAtMTAwMyw3ICs5OTksNyBAQAogCX0KIAlyZXR1cm4gcmV0dmFsOwogfQotCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc3RhcnRfeG1pdCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTExMTAsNiArMTEwNiwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2Rpc2Nvbm5lY3QpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVzYm5ldF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTE3OSwxMyArMTE4NCwxNCBAQAogCQluZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKICNlbmRpZgogCi0JbmV0LT5jaGFuZ2VfbXR1ID0gdXNibmV0X2NoYW5nZV9tdHU7Ci0JbmV0LT5nZXRfc3RhdHMgPSB1c2JuZXRfZ2V0X3N0YXRzOworCW5ldC0+bmV0ZGV2X29wcyA9ICZ1c2JuZXRfbmV0ZGV2X29wczsKKyNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiAJbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSB1c2JuZXRfc3RhcnRfeG1pdDsKIAluZXQtPm9wZW4gPSB1c2JuZXRfb3BlbjsKIAluZXQtPnN0b3AgPSB1c2JuZXRfc3RvcDsKLQluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOwogCW5ldC0+dHhfdGltZW91dCA9IHVzYm5ldF90eF90aW1lb3V0OworI2VuZGlmCisJbmV0LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVRfSklGRklFUzsKIAluZXQtPmV0aHRvb2xfb3BzID0gJnVzYm5ldF9ldGh0b29sX29wczsKIAogCS8vIGFsbG93IGRldmljZS1zcGVjaWZpYyBiaW5kL2luaXQgcHJvY2VkdXJlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDEyNGZlNzUuLjAxNWRiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTE5LDEyICsxOSwxNyBAQAogI2RlZmluZSBEUlZfTkFNRQkidmV0aCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMCIKIAorI2RlZmluZSBNSU5fTVRVIDY4CQkvKiBNaW4gTDMgTVRVICovCisjZGVmaW5lIE1BWF9NVFUgNjU1MzUJCS8qIE1heCBMMyBNVFUgKGFyYml0cmFyeSkgKi8KKyNkZWZpbmUgTVRVX1BBRCAoRVRIX0hMRU4gKyA0KSAgLyogTWF4IGRpZmZlcmVuY2UgYmV0d2VlbiBMMiBhbmQgTDMgc2l6ZSBNVFUgKi8KKwogc3RydWN0IHZldGhfbmV0X3N0YXRzIHsKIAl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZwl0eF9wYWNrZXRzOwogCXVuc2lnbmVkIGxvbmcJcnhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZwl0eF9ieXRlczsKIAl1bnNpZ25lZCBsb25nCXR4X2Ryb3BwZWQ7CisJdW5zaWduZWQgbG9uZwlyeF9kcm9wcGVkOwogfTsKIAogc3RydWN0IHZldGhfcHJpdiB7CkBAIC0xNDcsNyArMTUyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmN2ID0gTlVMTDsKIAlzdHJ1Y3QgdmV0aF9wcml2ICpwcml2LCAqcmN2X3ByaXY7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzLCAqcmN2X3N0YXRzOwogCWludCBsZW5ndGgsIGNwdTsKIAogCXNrYl9vcnBoYW4oc2tiKTsKQEAgLTE1OCw5ICsxNjMsMTMgQEAKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPnN0YXRzLCBjcHUpOworCXJjdl9zdGF0cyA9IHBlcl9jcHVfcHRyKHJjdl9wcml2LT5zdGF0cywgY3B1KTsKIAogCWlmICghKHJjdi0+ZmxhZ3MgJiBJRkZfVVApKQotCQlnb3RvIG91dGY7CisJCWdvdG8gdHhfZHJvcDsKKworCWlmIChza2ItPmxlbiA+IChyY3YtPm10dSArIE1UVV9QQUQpKQorCQlnb3RvIHJ4X2Ryb3A7CiAKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcmN2KTsKQEAgLTE3OCwxNyArMTg3LDIxIEBACiAJc3RhdHMtPnR4X2J5dGVzICs9IGxlbmd0aDsKIAlzdGF0cy0+dHhfcGFja2V0cysrOwogCi0Jc3RhdHMgPSBwZXJfY3B1X3B0cihyY3ZfcHJpdi0+c3RhdHMsIGNwdSk7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKLQlzdGF0cy0+cnhfcGFja2V0cysrOworCXJjdl9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOworCXJjdl9zdGF0cy0+cnhfcGFja2V0cysrOwogCiAJbmV0aWZfcngoc2tiKTsKIAlyZXR1cm4gMDsKIAotb3V0ZjoKK3R4X2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKIAlyZXR1cm4gMDsKKworcnhfZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyY3Zfc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTIxMCw2ICsyMjMsNyBAQAogCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSAwOwogCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAwOwogCWRldl9zdGF0cy0+dHhfZHJvcHBlZCA9IDA7CisJZGV2X3N0YXRzLT5yeF9kcm9wcGVkID0gMDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXN0YXRzID0gcGVyX2NwdV9wdHIocHJpdi0+c3RhdHMsIGNwdSk7CkBAIC0yMTksNiArMjMzLDcgQEAKIAkJZGV2X3N0YXRzLT5yeF9ieXRlcyArPSBzdGF0cy0+cnhfYnl0ZXM7CiAJCWRldl9zdGF0cy0+dHhfYnl0ZXMgKz0gc3RhdHMtPnR4X2J5dGVzOwogCQlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7CisJCWRldl9zdGF0cy0+cnhfZHJvcHBlZCArPSBzdGF0cy0+cnhfZHJvcHBlZDsKIAl9CiAKIAlyZXR1cm4gZGV2X3N0YXRzOwpAQCAtMjQ5LDYgKzI2NCwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlzX3ZhbGlkX3ZldGhfbXR1KGludCBuZXdfbXR1KQoreworCXJldHVybiAobmV3X210dSA+PSBNSU5fTVRVICYmIG5ld19tdHUgPD0gTUFYX01UVSk7Cit9CisKK3N0YXRpYyBpbnQgdmV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCWlmICghaXNfdmFsaWRfdmV0aF9tdHUobmV3X210dSkpCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2ZXRoX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKQEAgLTI3Nyw2ICszMDUsNyBAQAogCS5uZG9fb3BlbiAgICAgICAgICAgID0gdmV0aF9vcGVuLAogCS5uZG9fc3RvcCAgICAgICAgICAgID0gdmV0aF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICA9IHZldGhfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUgICAgICA9IHZldGhfY2hhbmdlX210dSwKIAkubmRvX2dldF9zdGF0cyAgICAgICA9IHZldGhfZ2V0X3N0YXRzLAogCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLAogfTsKQEAgLTMwMyw2ICszMzIsMTAgQEAKIAkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5sYV9kYXRhKHRiW0lGTEFfQUREUkVTU10pKSkKIAkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9CisJaWYgKHRiW0lGTEFfTVRVXSkgeworCQlpZiAoIWlzX3ZhbGlkX3ZldGhfbXR1KG5sYV9nZXRfdTMyKHRiW0lGTEFfTVRVXSkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCmluZGV4IDNiOGU2MzIuLjg4MGVhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCkBAIC0xMDksOCArMTA5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMTAtTEsiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CiAKIC8qIFRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIHRvIHVzZSBQQ0kgbWVtb3J5IHNwYWNlLiBTb21lIGVhcmx5IHZlcnNpb25zCiAgICBvZiB0aGUgUmhpbmUgbWF5IG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBJL08gc3BhY2UgYWNjZXNzZXMuICovCkBAIC01ODksNyArNTkwLDcgQEAKIAl3b3JrX2RvbmUgPSByaGluZV9yeChkZXYsIGJ1ZGdldCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCWlvd3JpdGUxNihJbnRyUnhEb25lIHwgSW50clJ4RXJyIHwgSW50clJ4RW1wdHl8IEludHJSeE92ZXJmbG93IHwKIAkJCSAgSW50clJ4RHJvcHBlZCB8IEludHJSeE5vQnVmIHwgSW50clR4QWJvcnRlZCB8CkBAIC0xMzE5LDcgKzEzMjAsNyBAQAogCQkJCSAgSW50clBDSUVyciB8IEludHJTdGF0c01heCB8IEludHJMaW5rQ2hhbmdlLAogCQkJCSAgaW9hZGRyICsgSW50ckVuYWJsZSk7CiAKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZycC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZycC0+bmFwaSk7CiAJCX0KIAogCQlpZiAoaW50cl9zdGF0dXMgJiAoSW50clR4RXJyU3VtbWFyeSB8IEludHJUeERvbmUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaCBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oCmluZGV4IDI5YTMzMDkuLmVhNDNlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oCkBAIC0xODMsNyArMTgzLDcgQEAKIH07CiAKIGVudW0gewotCVJYX0lOVEVOID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisJUlhfSU5URU4gPSBjcHVfdG9fbGUxNigweDgwMDApCiB9OwogCiBzdHJ1Y3QgcnhfZGVzYyB7CkBAIC0yMTAsNyArMjEwLDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogZW51bSB7Ci0JVERfUVVFVUUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKwlURF9RVUVVRSA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIHN0cnVjdCB0ZF9idWYgewpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIGVudW0gIHZlbG9jaXR5X293bmVyIHsKIAlPV05FRF9CWV9IT1NUID0gMCwKLQlPV05FRF9CWV9OSUMgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKwlPV05FRF9CWV9OSUMgPSBjcHVfdG9fbGUxNigweDgwMDApCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBlNjdkMTZjLi5hNmYxZTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0zNywxMiArMzcsMTUgQEAKICNkZWZpbmUgTUFYX1BBQ0tFVF9MRU4gKEVUSF9ITEVOICsgVkxBTl9ITEVOICsgRVRIX0RBVEFfTEVOKQogI2RlZmluZSBHT09EX0NPUFlfTEVOCTEyOAogCisjZGVmaW5lIFZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCAgICAyCisKIHN0cnVjdCB2aXJ0bmV0X2luZm8KIHsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKLQlzdHJ1Y3QgdmlydHF1ZXVlICpydnEsICpzdnE7CisJc3RydWN0IHZpcnRxdWV1ZSAqcnZxLCAqc3ZxLCAqY3ZxOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJdW5zaWduZWQgaW50IHN0YXR1czsKIAogCS8qIFRoZSBza2Igd2UgY291bGRuJ3Qgc2VuZCBiZWNhdXNlIGJ1ZmZlcnMgd2VyZSBmdWxsLiAqLwogCXN0cnVjdCBza19idWZmICpsYXN0X3htaXRfc2tiOwpAQCAtMzc1LDkgKzM3OCw5IEBACiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBydnEtPnZkZXYtPnByaXY7CiAJLyogU2NoZWR1bGUgTkFQSSwgU3VwcHJlc3MgZnVydGhlciBpbnRlcnJ1cHRzIGlmIHN1Y2Nlc3NmdWwuICovCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgewogCQlydnEtPnZxX29wcy0+ZGlzYWJsZV9jYihydnEpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ2aS0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmdmktPm5hcGkpOwogCX0KIH0KIApAQCAtNDAzLDExICs0MDYsMTEgQEAKIAogCS8qIE91dCBvZiBwYWNrZXRzPyAqLwogCWlmIChyZWNlaXZlZCA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaWYgKHVubGlrZWx5KCF2aS0+cnZxLT52cV9vcHMtPmVuYWJsZV9jYih2aS0+cnZxKSkKIAkJICAgICYmIG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgewogCQkJdmktPnJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHZpLT5ydnEpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZShuYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KIAl9CkBAIC01NjIsNiArNTY1LDIyIEBACiAJZ290byBkb25lOwogfQogCitzdGF0aWMgaW50IHZpcnRuZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2ID0gdmktPnZkZXY7CisJaW50IHJldDsKKworCXJldCA9IGV0aF9tYWNfYWRkcihkZXYsIHApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2ZGV2LT5jb25maWctPnNldCh2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIG1hYyksCisJCQkgIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgdmlydG5ldF9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC01ODEsMTMgKzYwMCw2MCBAQAogCSAqIHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0cwogCSAqIG5vdy4gIHZpcnRuZXRfcG9sbCB3YW50cyByZS1lbmFibGUgdGhlIHF1ZXVlLCBzbyB3ZSBkaXNhYmxlIGhlcmUuCiAJICogV2Ugc3luY2hyb25pemUgYWdhaW5zdCBpbnRlcnJ1cHRzIHZpYSBOQVBJX1NUQVRFX1NDSEVEICovCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgewogCQl2aS0+cnZxLT52cV9vcHMtPmRpc2FibGVfY2IodmktPnJ2cSk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CiAJfQogCXJldHVybiAwOwogfQogCisvKgorICogU2VuZCBjb21tYW5kIHZpYSB0aGUgY29udHJvbCB2aXJ0cXVldWUgYW5kIGNoZWNrIHN0YXR1cy4gIENvbW1hbmRzCisgKiBzdXBwb3J0ZWQgYnkgdGhlIGh5cGVydmlzb3IsIGFzIGluZGljYXRlZCBieSBmZWF0dXJlIGJpdHMsIHNob3VsZAorICogbmV2ZXIgZmFpbCB1bmxlc3MgaW1wcm9wZXJseSBmb3JtYXRlZC4KKyAqLworc3RhdGljIGJvb2wgdmlydG5ldF9zZW5kX2NvbW1hbmQoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmksIHU4IGNsYXNzLCB1OCBjbWQsCisJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqZGF0YSwgaW50IG91dCwgaW50IGluKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1tWSVJUTkVUX1NFTkRfQ09NTUFORF9TR19NQVggKyAyXTsKKwlzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX2hkciBjdHJsOworCXZpcnRpb19uZXRfY3RybF9hY2sgc3RhdHVzID0gfjA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSkpIHsKKwkJQlVHKCk7ICAvKiBDYWxsZXIgc2hvdWxkIGtub3cgYmV0dGVyICovCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlCVUdfT04ob3V0ICsgaW4gPiBWSVJUTkVUX1NFTkRfQ09NTUFORF9TR19NQVgpOworCisJb3V0Kys7IC8qIEFkZCBoZWFkZXIgKi8KKwlpbisrOyAvKiBBZGQgcmV0dXJuIHN0YXR1cyAqLworCisJY3RybC5jbGFzcyA9IGNsYXNzOworCWN0cmwuY21kID0gY21kOworCisJc2dfaW5pdF90YWJsZShzZywgb3V0ICsgaW4pOworCisJc2dfc2V0X2J1Zigmc2dbMF0sICZjdHJsLCBzaXplb2YoY3RybCkpOworCW1lbWNweSgmc2dbMV0sIGRhdGEsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpICogKG91dCArIGluIC0gMikpOworCXNnX3NldF9idWYoJnNnW291dCArIGluIC0gMV0sICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKworCWlmICh2aS0+Y3ZxLT52cV9vcHMtPmFkZF9idWYodmktPmN2cSwgc2csIG91dCwgaW4sIHZpKSAhPSAwKQorCQlCVUcoKTsKKworCXZpLT5jdnEtPnZxX29wcy0+a2ljayh2aS0+Y3ZxKTsKKworCS8qCisJICogU3BpbiBmb3IgYSByZXNwb25zZSwgdGhlIGtpY2sgY2F1c2VzIGFuIGlvcG9ydCB3cml0ZSwgdHJhcHBpbmcKKwkgKiBpbnRvIHRoZSBoeXBlcnZpc29yLCBzbyB0aGUgcmVxdWVzdCBzaG91bGQgYmUgaGFuZGxlZCBpbW1lZGlhdGVseS4KKwkgKi8KKwl3aGlsZSAoIXZpLT5jdnEtPnZxX29wcy0+Z2V0X2J1Zih2aS0+Y3ZxLCAmdG1wKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gc3RhdHVzID09IFZJUlRJT19ORVRfT0s7Cit9CisKIHN0YXRpYyBpbnQgdmlydG5ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTYwOCw2ICs2NzQsOTkgQEAKIAlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bShkZXYsIGRhdGEpOwogfQogCitzdGF0aWMgdm9pZCB2aXJ0bmV0X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKKwl1OCBwcm9taXNjLCBhbGxtdWx0aTsKKwlzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX21hYyAqbWFjX2RhdGE7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKmFkZHI7CisJdm9pZCAqYnVmOworCWludCBpOworCisJLyogV2UgY2FuJ3QgZHluYW1pY2FseSBzZXQgbmRvX3NldF9yeF9tb2RlLCBzbyByZXR1cm4gZ3JhY2VmdWxseSAqLworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9SWCkpCisJCXJldHVybjsKKworCXByb21pc2MgPSAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgIT0gMCk7CisJYWxsbXVsdGkgPSAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICE9IDApOworCisJc2dfc2V0X2J1ZihzZywgJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfUlgsCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfUlhfUFJPTUlTQywKKwkJCQkgIHNnLCAxLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvICVzYWJsZSBwcm9taXNjIG1vZGUuXG4iLAorCQkJIHByb21pc2MgPyAiZW4iIDogImRpcyIpOworCisJc2dfc2V0X2J1ZihzZywgJmFsbG11bHRpLCBzaXplb2YoYWxsbXVsdGkpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9SWCwKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9SWF9BTExNVUxUSSwKKwkJCQkgIHNnLCAxLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvICVzYWJsZSBhbGxtdWx0aSBtb2RlLlxuIiwKKwkJCSBhbGxtdWx0aSA/ICJlbiIgOiAiZGlzIik7CisKKwkvKiBNQUMgZmlsdGVyIC0gdXNlIG9uZSBidWZmZXIgZm9yIGJvdGggbGlzdHMgKi8KKwltYWNfZGF0YSA9IGJ1ZiA9IGt6YWxsb2MoKChkZXYtPnVjX2NvdW50ICsgZGV2LT5tY19jb3VudCkgKiBFVEhfQUxFTikgKworCQkJCSAoMiAqIHNpemVvZihtYWNfZGF0YS0+ZW50cmllcykpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJObyBtZW1vcnkgZm9yIE1BQyBhZGRyZXNzIGJ1ZmZlclxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBTdG9yZSB0aGUgdW5pY2FzdCBsaXN0IGFuZCBjb3VudCBpbiB0aGUgZnJvbnQgb2YgdGhlIGJ1ZmZlciAqLworCW1hY19kYXRhLT5lbnRyaWVzID0gZGV2LT51Y19jb3VudDsKKwlhZGRyID0gZGV2LT51Y19saXN0OworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnVjX2NvdW50OyBpKyssIGFkZHIgPSBhZGRyLT5uZXh0KQorCQltZW1jcHkoJm1hY19kYXRhLT5tYWNzW2ldWzBdLCBhZGRyLT5kYV9hZGRyLCBFVEhfQUxFTik7CisKKwlzZ19zZXRfYnVmKCZzZ1swXSwgbWFjX2RhdGEsCisJCSAgIHNpemVvZihtYWNfZGF0YS0+ZW50cmllcykgKyAoZGV2LT51Y19jb3VudCAqIEVUSF9BTEVOKSk7CisKKwkvKiBtdWx0aWNhc3QgbGlzdCBhbmQgY291bnQgZmlsbCB0aGUgZW5kICovCisJbWFjX2RhdGEgPSAodm9pZCAqKSZtYWNfZGF0YS0+bWFjc1tkZXYtPnVjX2NvdW50XVswXTsKKworCW1hY19kYXRhLT5lbnRyaWVzID0gZGV2LT5tY19jb3VudDsKKwlhZGRyID0gZGV2LT5tY19saXN0OworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGFkZHIgPSBhZGRyLT5uZXh0KQorCQltZW1jcHkoJm1hY19kYXRhLT5tYWNzW2ldWzBdLCBhZGRyLT5kYV9hZGRyLCBFVEhfQUxFTik7CisKKwlzZ19zZXRfYnVmKCZzZ1sxXSwgbWFjX2RhdGEsCisJCSAgIHNpemVvZihtYWNfZGF0YS0+ZW50cmllcykgKyAoZGV2LT5tY19jb3VudCAqIEVUSF9BTEVOKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfTUFDLAorCQkJCSAgVklSVElPX05FVF9DVFJMX01BQ19UQUJMRV9TRVQsCisJCQkJICBzZywgMiwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgTUFDIGZpdGxlciB0YWJsZS5cbiIpOworCisJa2ZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQgdmlybmV0X3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19zZXRfYnVmKCZzZywgJnZpZCwgc2l6ZW9mKHZpZCkpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1ZMQU4sCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfVkxBTl9BREQsICZzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgVkxBTiBJRCAlZC5cbiIsIHZpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcm5ldF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCXNnX3NldF9idWYoJnNnLCAmdmlkLCBzaXplb2YodmlkKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfVkxBTiwKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0RFTCwgJnNnLCAxLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGtpbGwgVkxBTiBJRCAlZC5cbiIsIHZpZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdmlydG5ldF9ldGh0b29sX29wcyA9IHsKIAkuc2V0X3R4X2NzdW0gPSB2aXJ0bmV0X3NldF90eF9jc3VtLAogCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKQEAgLTYzMSwxMyArNzkwLDUxIEBACiAJLm5kb19zdG9wICAgCSAgICAgPSB2aXJ0bmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gc3RhcnRfeG1pdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIgICA9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gdmlydG5ldF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfcnhfbW9kZSAgICAgPSB2aXJ0bmV0X3NldF9yeF9tb2RlLAogCS5uZG9fY2hhbmdlX210dQkgICAgID0gdmlydG5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmxhbl9yeF9hZGRfdmlkID0gdmlybmV0X3ZsYW5fcnhfYWRkX3ZpZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQgPSB2aXJuZXRfdmxhbl9yeF9raWxsX3ZpZCwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyID0gdmlydG5ldF9uZXRwb2xsLAogI2VuZGlmCiB9OwogCitzdGF0aWMgdm9pZCB2aXJ0bmV0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCit7CisJdTE2IHY7CisKKwlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX1NUQVRVUykpCisJCXJldHVybjsKKworCXZpLT52ZGV2LT5jb25maWctPmdldCh2aS0+dmRldiwKKwkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgc3RhdHVzKSwKKwkJCSAgICAgICZ2LCBzaXplb2YodikpOworCisJLyogSWdub3JlIHVua25vd24gKGZ1dHVyZSkgc3RhdHVzIGJpdHMgKi8KKwl2ICY9IFZJUlRJT19ORVRfU19MSU5LX1VQOworCisJaWYgKHZpLT5zdGF0dXMgPT0gdikKKwkJcmV0dXJuOworCisJdmktPnN0YXR1cyA9IHY7CisKKwlpZiAodmktPnN0YXR1cyAmIFZJUlRJT19ORVRfU19MSU5LX1VQKSB7CisJCW5ldGlmX2NhcnJpZXJfb24odmktPmRldik7CisJCW5ldGlmX3dha2VfcXVldWUodmktPmRldik7CisJfSBlbHNlIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYodmktPmRldik7CisJCW5ldGlmX3N0b3BfcXVldWUodmktPmRldik7CisJfQorfQorCitzdGF0aWMgdm9pZCB2aXJ0bmV0X2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gdmRldi0+cHJpdjsKKworCXZpcnRuZXRfdXBkYXRlX3N0YXR1cyh2aSk7Cit9CisKIHN0YXRpYyBpbnQgdmlydG5ldF9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlpbnQgZXJyOwpAQCAtNjc5LDggKzg3NiwxMSBAQAogCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAogCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBtYWMpLAogCQkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CisJCXZkZXYtPmNvbmZpZy0+c2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWFjKSwKKwkJCQkgIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOworCX0KIAogCS8qIFNldCB1cCBvdXIgZGV2aWNlLXNwZWNpZmljIGluZm9ybWF0aW9uICovCiAJdmkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzE2LDYgKzkxNiwxNyBAQAogCQlnb3RvIGZyZWVfcmVjdjsKIAl9CiAKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSkpIHsKKwkJdmktPmN2cSA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cSh2ZGV2LCAyLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2aS0+Y3ZxKSkgeworCQkJZXJyID0gUFRSX0VSUih2aS0+c3ZxKTsKKwkJCWdvdG8gZnJlZV9zZW5kOworCQl9CisKKwkJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfVkxBTikpCisJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CisJfQorCiAJLyogSW5pdGlhbGl6ZSBvdXIgZW1wdHkgcmVjZWl2ZSBhbmQgc2VuZCBxdWV1ZXMuICovCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnJlY3YpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnZpLT5zZW5kKTsKQEAgLTcyOCw3ICs5MzksNyBAQAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJfZGVidWcoInZpcnRpb19uZXQ6IHJlZ2lzdGVyaW5nIGRldmljZSBmYWlsZWRcbiIpOwotCQlnb3RvIGZyZWVfc2VuZDsKKwkJZ290byBmcmVlX2N0cmw7CiAJfQogCiAJLyogTGFzdCBvZiBhbGwsIHNldCB1cCBzb21lIHJlY2VpdmUgYnVmZmVycy4gKi8KQEAgLTc0MCw2ICs5NTEsOCBAQAogCQlnb3RvIHVucmVnaXN0ZXI7CiAJfQogCisJdmktPnN0YXR1cyA9IFZJUlRJT19ORVRfU19MSU5LX1VQOworCXZpcnRuZXRfdXBkYXRlX3N0YXR1cyh2aSk7CiAJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCiAJcHJfZGVidWcoInZpcnRuZXQ6IHJlZ2lzdGVyZWQgZGV2aWNlICVzXG4iLCBkZXYtPm5hbWUpOwpAQCAtNzQ3LDYgKzk2MCw5IEBACiAKIHVucmVnaXN0ZXI6CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKK2ZyZWVfY3RybDoKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSkpCisJCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5jdnEpOwogZnJlZV9zZW5kOgogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5zdnEpOwogZnJlZV9yZWN2OgpAQCAtNzc4LDYgKzk5NCw4IEBACiAKIAl2ZGV2LT5jb25maWctPmRlbF92cSh2aS0+c3ZxKTsKIAl2ZGV2LT5jb25maWctPmRlbF92cSh2aS0+cnZxKTsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSkpCisJCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5jdnEpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KHZpLT5kZXYpOwogCiAJd2hpbGUgKHZpLT5wYWdlcykKQEAgLTc5Nyw3ICsxMDE1LDggQEAKIAlWSVJUSU9fTkVUX0ZfSE9TVF9UU080LCBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8sIFZJUlRJT19ORVRfRl9IT1NUX1RTTzYsCiAJVklSVElPX05FVF9GX0hPU1RfRUNOLCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNCwgVklSVElPX05FVF9GX0dVRVNUX1RTTzYsCiAJVklSVElPX05FVF9GX0dVRVNUX0VDTiwgLyogV2UgZG9uJ3QgeWV0IGhhbmRsZSBVRk8gaW5wdXQuICovCi0JVklSVElPX05FVF9GX01SR19SWEJVRiwKKwlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGLCBWSVJUSU9fTkVUX0ZfU1RBVFVTLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSwKKwlWSVJUSU9fTkVUX0ZfQ1RSTF9SWCwgVklSVElPX05FVF9GX0NUUkxfVkxBTiwKIAlWSVJUSU9fRl9OT1RJRllfT05fRU1QVFksCiB9OwogCkBAIC04MDksNiArMTAyOCw3IEBACiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCiAJLnByb2JlID0JdmlydG5ldF9wcm9iZSwKIAkucmVtb3ZlID0JX19kZXZleGl0X3AodmlydG5ldF9yZW1vdmUpLAorCS5jb25maWdfY2hhbmdlZCA9IHZpcnRuZXRfY29uZmlnX2NoYW5nZWQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwppbmRleCBiNDY4OTc5Li45NjkzYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKQEAgLTI5Niw3ICsyOTYsMTMgQEAKIAlrZnJlZShjYXJkKTsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGMxMDFfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGMxMDFfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBjMTAxX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gYzEwMV9pb2N0bCwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGMxMDFfcnVuKHVuc2lnbmVkIGxvbmcgaXJxLCB1bnNpZ25lZCBsb25nIHdpbmJhc2UpCiB7CkBAIC0zNjcsOSArMzczLDcgQEAKIAlkZXYtPm1lbV9zdGFydCA9IHdpbmJhc2U7CiAJZGV2LT5tZW1fZW5kID0gd2luYmFzZSArIEMxMDFfTUFQUEVEX1JBTV9TSVpFIC0gMTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCWRldi0+ZG9faW9jdGwgPSBjMTAxX2lvY3RsOwotCWRldi0+b3BlbiA9IGMxMDFfb3BlbjsKLQlkZXYtPnN0b3AgPSBjMTAxX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcyA9ICZjMTAxX29wczsKIAloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCWhkbGMtPnhtaXQgPSBzY2FfeG1pdDsKIAljYXJkLT5zZXR0aW5ncy5jbG9ja190eXBlID0gQ0xPQ0tfRVhUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggZDgwYjcyZS4uNjE1ODFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC00MjcsNiArNDI3LDE1IEBACiB9CiBtb2R1bGVfZXhpdChjb3NhX2V4aXQpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNvc2Ffb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGNvc2FfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gY29zYV9uZXRfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBjb3NhX25ldF9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBjb3NhX25ldF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCBjb3NhX3Byb2JlKGludCBiYXNlLCBpbnQgaXJxLCBpbnQgZG1hKQogewogCXN0cnVjdCBjb3NhX2RhdGEgKmNvc2EgPSBjb3NhX2NhcmRzK25yX2NhcmRzOwpAQCAtNTc1LDEwICs1ODQsNyBAQAogCQl9CiAJCWRldl90b19oZGxjKGNoYW4tPm5ldGRldiktPmF0dGFjaCA9IGNvc2FfbmV0X2F0dGFjaDsKIAkJZGV2X3RvX2hkbGMoY2hhbi0+bmV0ZGV2KS0+eG1pdCA9IGNvc2FfbmV0X3R4OwotCQljaGFuLT5uZXRkZXYtPm9wZW4gPSBjb3NhX25ldF9vcGVuOwotCQljaGFuLT5uZXRkZXYtPnN0b3AgPSBjb3NhX25ldF9jbG9zZTsKLQkJY2hhbi0+bmV0ZGV2LT5kb19pb2N0bCA9IGNvc2FfbmV0X2lvY3RsOwotCQljaGFuLT5uZXRkZXYtPnR4X3RpbWVvdXQgPSBjb3NhX25ldF90aW1lb3V0OworCQljaGFuLT5uZXRkZXYtPm5ldGRldl9vcHMgPSAmY29zYV9vcHM7CiAJCWNoYW4tPm5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCQljaGFuLT5uZXRkZXYtPmJhc2VfYWRkciA9IGNoYW4tPmNvc2EtPmRhdGFyZWc7CiAJCWNoYW4tPm5ldGRldi0+aXJxID0gY2hhbi0+Y29zYS0+aXJxOwpAQCAtNzI1LDggKzczMSw3IEBACiAJICogV2UgY2FuIHNhZmVseSBmYWxsIGJhY2sgdG8gbm9uLWRtYS1hYmxlIG1lbW9yeSwgYmVjYXVzZSB3ZSBoYXZlCiAJICogdGhlIGNvc2EtPmJvdW5jZWJ1ZiBwcmUtYWxsb2NhdGVkLgogCSAqLwotCWlmIChjaGFuLT5yeF9za2IpCi0JCWtmcmVlX3NrYihjaGFuLT5yeF9za2IpOworCWtmcmVlX3NrYihjaGFuLT5yeF9za2IpOwogCWNoYW4tPnJ4X3NrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CiAJaWYgKGNoYW4tPnJ4X3NrYiA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsCkBAIC05OTMsOCArOTk4LDggQEAKIHN0YXRpYyBpbnQgY29zYV9mYXN5bmMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKICAgICAgICAgaW50IHBvcnQgPSBpbWlub3IoaW5vZGUpOwotICAgICAgICBpbnQgcnYgPSBmYXN5bmNfaGVscGVyKGlub2RlLCBmaWxlLCBvbiwgJmZhc3luY1twb3J0XSk7Ci0gICAgICAgIHJldHVybiBydiA8IDAgPyBydiA6IDA7CisKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihpbm9kZSwgZmlsZSwgb24sICZmYXN5bmNbcG9ydF0pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jIGIvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKaW5kZXggNWZhNTI5Mi4uMzVkZWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKQEAgLTM1NSwxMiArMzU1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogY2FsbGJhY2sgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgKi8KLXN0YXRpYyB2b2lkIGN5Y3hfeDI1X2NoYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlkZXYtPmluaXQgPSBjeWN4X25ldGRldmljZV9pbml0OwotfQotCiAvKiBDcmVhdGUgbmV3IGxvZ2ljYWwgY2hhbm5lbC4KICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHJvdXRlciB3aGVuIFJPVVRFUl9JRk5FVyBJT0NUTCBpcyBiZWluZwogICogaGFuZGxlZC4KQEAgLTQ3Niw2ICs0NzAsMjcgQEAKIAkucmVidWlsZCA9IGN5Y3hfbmV0ZGV2aWNlX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjeWN4X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CT0gY3ljeF9uZXRkZXZpY2VfaW5pdCwKKwkubmRvX29wZW4JPSBjeWN4X25ldGRldmljZV9vcGVuLAorCS5uZG9fc3RvcAk9IGN5Y3hfbmV0ZGV2aWNlX3N0b3AsCisJLm5kb19zdGFydF94bWl0CT0gY3ljeF9uZXRkZXZpY2VfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCT0gY3ljeF9uZXRkZXZpY2VfZ2V0X3N0YXRzLAorfTsKKworc3RhdGljIHZvaWQgY3ljeF94MjVfY2hhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIEluaXRpYWxpemUgZGV2aWNlIGRyaXZlciBlbnRyeSBwb2ludHMgKi8KKwlkZXYtPm5ldGRldl9vcHMJCT0gJmN5Y3hfbmV0ZGV2X29wczsKKwlkZXYtPmhlYWRlcl9vcHMJCT0gJmN5Y3hfaGVhZGVyX29wczsKKworCS8qIEluaXRpYWxpemUgbWVkaWEtc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCWRldi0+bXR1CQk9IENZQ1hfWDI1X0NIQU5fTVRVOworCWRldi0+dHlwZQkJPSBBUlBIUkRfSFdYMjU7CS8qIEFSUCBoL3cgdHlwZSAqLworCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gMDsJCS8qIG1lZGlhIGhlYWRlciBsZW5ndGggKi8KKwlkZXYtPmFkZHJfbGVuCQk9IDA7CQkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLworfQorCiAvKiBJbml0aWFsaXplIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlLgogICoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBvbmNlIGZvciBlYWNoIGludGVyZmFjZSwgZHVyaW5nIExpbnV4IG5ldHdvcmsKQEAgLTQ4NywyMCArNTAyLDYgQEAKIAlzdHJ1Y3QgY3ljeF9kZXZpY2UgKmNhcmQgPSBjaGFuLT5jYXJkOwogCXN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwogCi0JLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotCWRldi0+b3BlbgkJPSBjeWN4X25ldGRldmljZV9vcGVuOwotCWRldi0+c3RvcAkJPSBjeWN4X25ldGRldmljZV9zdG9wOwotCWRldi0+aGVhZGVyX29wcwkJPSAmY3ljeF9oZWFkZXJfb3BzOwotCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gY3ljeF9uZXRkZXZpY2VfZ2V0X3N0YXRzOwotCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT5tdHUJCT0gQ1lDWF9YMjVfQ0hBTl9NVFU7Ci0JZGV2LT50eXBlCQk9IEFSUEhSRF9IV1gyNTsJLyogQVJQIGgvdyB0eXBlICovCi0JZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwkJLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLwotCWRldi0+YWRkcl9sZW4JCT0gMDsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCi0KIAlpZiAoIWNoYW4tPnN2YykKIAkJKihfX2JlMTYqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhjaGFuLT5sY24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZGxjaS5jIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwppbmRleCBhMjk3ZTNlLi5lOGQxNTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZGxjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaGRyKSkpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogaW52YWxpZCBkYXRhIG5vIGhlYWRlclxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJaWYgKGhkci0+Y29udHJvbCAhPSBGUkFEX0lfVUkpCiAJewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnZhbGlkIGhlYWRlciBmbGFnIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5jb250cm9sKTsKLQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAl9CiAJZWxzZQogCQlzd2l0Y2goaGRyLT5JUF9OTFBJRCkKQEAgLTEzNiwxNCArMTM2LDE0IEBACiAJCQkJaWYgKGhkci0+TkxQSUQgIT0gRlJBRF9QX1NOQVApCiAJCQkJewogCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbnN1cHBvcnRlZCBOTFBJRCAweCUwMlguXG4iLCBkZXYtPm5hbWUsIGhkci0+TkxQSUQpOwotCQkJCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlicmVhazsKIAkJCQl9CiAJIAogCQkJCWlmIChoZHItPk9VSVswXSArIGhkci0+T1VJWzFdICsgaGRyLT5PVUlbMl0gIT0gMCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIG9yZ2FuaXphdGlvbmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgMHglMDJYLSUwMlgtJTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5PVUlbMF0sIGhkci0+T1VJWzFdLCBoZHItPk9VSVsyXSk7Ci0JCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KIApAQCAtMTY0LDEyICsxNjQsMTIgQEAKIAkJCWNhc2UgRlJBRF9QX1E5MzM6CiAJCQljYXNlIEZSQURfUF9DTE5QOgogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5wYWQpOwotCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnZhbGlkIHBhZCBieXRlIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5wYWQpOwotCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlicmVhazsJCQkJCiAJCX0KIApAQCAtMTc4LDkgKzE3OCw5IEBACiAJCS8qIHdlJ3ZlIHNldCB1cCB0aGUgcHJvdG9jb2wsIHNvIGRpc2NhcmQgdGhlIGhlYWRlciAqLwogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCQlza2JfcHVsbChza2IsIGhlYWRlcik7Ci0JCWRscC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGlmX3J4KHNrYik7Ci0JCWRscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAl9CiAJZWxzZQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0yMDAsMTkgKzIwMCwxOSBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQotCXJldCA9IGRscC0+c2xhdmUtPmhhcmRfc3RhcnRfeG1pdChza2IsIGRscC0+c2xhdmUpOworCXJldCA9IGRscC0+c2xhdmUtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CiAJc3dpdGNoIChyZXQpCiAJewogCQljYXNlIERMQ0lfUkVUX09LOgotCQkJZGxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCWNhc2UgRExDSV9SRVRfRVJSOgotCQkJZGxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlyZXQgPSAwOwogCQkJYnJlYWs7CiAJCQljYXNlIERMQ0lfUkVUX0RST1A6Ci0JCQlkbHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0ID0gMTsKIAkJCWJyZWFrOwogCX0KQEAgLTI5NSwxMSArMjk1LDkgQEAKIAogc3RhdGljIGludCBkbGNpX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IGRsY2lfbG9jYWwgKmRscDsKKwlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWRscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4oKCpkbHAtPnNsYXZlLT5jaGFuZ2VfbXR1KShkbHAtPnNsYXZlLCBuZXdfbXR1KSk7CisJcmV0dXJuIGRldl9zZXRfbXR1KGRscC0+c2xhdmUsIG5ld19tdHUpOwogfQogCiBzdGF0aWMgaW50IGRsY2lfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzQyLDE1ICszNDAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRsY2lfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRsY2lfbG9jYWwgKmRscDsKLQotCWRscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4oJmRscC0+c3RhdHMpOwotfQotCiBzdGF0aWMgaW50IGRsY2lfYWRkKHN0cnVjdCBkbGNpX2FkZCAqZGxjaSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbWFzdGVyLCAqc2xhdmU7CkBAIC00ODgsMTggKzQ3NywyMSBAQAogCS5jcmVhdGUJPSBkbGNpX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZGxjaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGRsY2lfb3BlbiwKKwkubmRvX3N0b3AJPSBkbGNpX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBkbGNpX2Rldl9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQJPSBkbGNpX3RyYW5zbWl0LAorCS5uZG9fY2hhbmdlX210dQk9IGRsY2lfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyB2b2lkIGRsY2lfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWRldi0+ZmxhZ3MJCT0gMDsKLQlkZXYtPm9wZW4JCT0gZGxjaV9vcGVuOwotCWRldi0+c3RvcAkJPSBkbGNpX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwJCT0gZGxjaV9kZXZfaW9jdGw7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBkbGNpX3RyYW5zbWl0OwogCWRldi0+aGVhZGVyX29wcwkJPSAmZGxjaV9oZWFkZXJfb3BzOwotCWRldi0+Z2V0X3N0YXRzCQk9IGRsY2lfZ2V0X3N0YXRzOwotCWRldi0+Y2hhbmdlX210dQkJPSBkbGNpX2NoYW5nZV9tdHU7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZkbGNpX25ldGRldl9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OwogCiAJZGxwLT5yZWNlaXZlCQk9IGRsY2lfcmVjZWl2ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggODg4MDI1ZC4uOGZhY2U1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTg4Myw2ICs4ODMsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzY2M0X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBkc2NjNF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGRzY2M0X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gZHNjYzRfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gZHNjYzRfdHhfdGltZW91dCwKK307CisKIHN0YXRpYyBpbnQgZHNjYzRfZm91bmQxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKmlvYWRkcikKIHsKIAlzdHJ1Y3QgZHNjYzRfcGNpX3ByaXYgKnBwcml2OwpAQCAtOTE2LDEzICs5MjUsOCBAQAogCQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGQpOwogCiAJICAgICAgICBkLT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylpb2FkZHI7Ci0JCWQtPmluaXQgPSBOVUxMOwogCSAgICAgICAgZC0+aXJxID0gcGRldi0+aXJxOwotCSAgICAgICAgZC0+b3BlbiA9IGRzY2M0X29wZW47Ci0JICAgICAgICBkLT5zdG9wID0gZHNjYzRfY2xvc2U7Ci0JCWQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IE5VTEw7Ci0JICAgICAgICBkLT5kb19pb2N0bCA9IGRzY2M0X2lvY3RsOwotCQlkLT50eF90aW1lb3V0ID0gZHNjYzRfdHhfdGltZW91dDsKKwkJZC0+bmV0ZGV2X29wcyA9ICZkc2NjNF9vcHM7CiAJCWQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAkJU0VUX05FVERFVl9ERVYoZCwgJnBkZXYtPmRldik7CiAKQEAgLTEwNDgsNyArMTA1Miw3IEBACiAJc3RydWN0IGRzY2M0X3BjaV9wcml2ICpwcHJpdjsKIAlpbnQgcmV0ID0gLUVBR0FJTjsKIAotCWlmICgoZHNjYzRfbG9vcGJhY2tfY2hlY2soZHByaXYpIDwgMCkgfHwgIWRldi0+aGFyZF9zdGFydF94bWl0KQorCWlmICgoZHNjYzRfbG9vcGJhY2tfY2hlY2soZHByaXYpIDwgMCkpCiAJCWdvdG8gZXJyOwogCiAJaWYgKChyZXQgPSBoZGxjX29wZW4oZGV2KSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCA0OGEyYzlkLi4wMDk0NWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTI0MjQsNiArMjQyNCwxNSBAQAogCSAgICAgICB0eXBlX3N0cmluZ3NbY2FyZC0+dHlwZV0sIGNhcmQtPmlycSwgY2FyZC0+bnBvcnRzKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBmc3Rfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGZzdF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGZzdF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGZzdF9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBmc3RfdHhfdGltZW91dCwKK307CisKIC8qCiAgKiAgICAgIEluaXRpYWxpc2UgY2FyZCB3aGVuIGRldGVjdGVkLgogICogICAgICBSZXR1cm5zIDAgdG8gaW5kaWNhdGUgc3VjY2Vzcywgb3IgZXJybm8gb3RoZXJ3aXNlLgpAQCAtMjU2NSwxMiArMjU3NCw5IEBACiAgICAgICAgICAgICAgICAgZGV2LT5iYXNlX2FkZHIgICA9IGNhcmQtPnBjaV9jb25mOwogICAgICAgICAgICAgICAgIGRldi0+aXJxICAgICAgICAgPSBjYXJkLT5pcnE7CiAKLSAgICAgICAgICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiAgICAgICAgICA9IEZTVF9UWF9RVUVVRV9MRU47Ci0gICAgICAgICAgICAgICAgZGV2LT5vcGVuICAgICAgICAgICAgICAgICAgPSBmc3Rfb3BlbjsKLSAgICAgICAgICAgICAgICBkZXYtPnN0b3AgICAgICAgICAgICAgICAgICA9IGZzdF9jbG9zZTsKLSAgICAgICAgICAgICAgICBkZXYtPmRvX2lvY3RsICAgICAgICAgICAgICA9IGZzdF9pb2N0bDsKLSAgICAgICAgICAgICAgICBkZXYtPndhdGNoZG9nX3RpbWVvICAgICAgICA9IEZTVF9UWF9USU1FT1VUOwotICAgICAgICAgICAgICAgIGRldi0+dHhfdGltZW91dCAgICAgICAgICAgID0gZnN0X3R4X3RpbWVvdXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZmc3Rfb3BzOworCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IEZTVF9UWF9RVUVVRV9MRU47CisJCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBGU1RfVFhfVElNRU9VVDsKICAgICAgICAgICAgICAgICBoZGxjLT5hdHRhY2ggPSBmc3RfYXR0YWNoOwogICAgICAgICAgICAgICAgIGhkbGMtPnhtaXQgICA9IGZzdF9zdGFydF94bWl0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCmluZGV4IDA4YjM1MzYuLjQ5N2IwMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJCXJlY2VpdmVkID0gc2NhX3J4X2RvbmUocG9ydCwgYnVkZ2V0KTsKIAogCWlmIChyZWNlaXZlZCA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJZW5hYmxlX2ludHIocG9ydCk7CiAJfQogCkBAIC0zNTksNyArMzU5LDcgQEAKIAkJaWYgKHBvcnQgJiYgKGlzcjAgJiAoaSA/IDB4MDgwMDIyMDAgOiAweDAwMDgwMDIyKSkpIHsKIAkJCWhhbmRsZWQgPSAxOwogCQkJZGlzYWJsZV9pbnRyKHBvcnQpOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IDFmMmExNDAuLjc1OTZlYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwpAQCAtNDQsNyArNDQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gKmZpcnN0X3Byb3RvOwogCi1zdGF0aWMgaW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK2ludCBoZGxjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSERMQ19NQVhfTVRVKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MiwxNSArNTIsNiBAQAogCXJldHVybiAwOwogfQogCi0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpoZGxjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmZGV2LT5zdGF0czsKLX0KLQotCi0KIHN0YXRpYyBpbnQgaGRsY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewpAQCAtNzUsNyArNjYsMTUgQEAKIAlyZXR1cm4gaGRsYy0+cHJvdG8tPm5ldGlmX3J4KHNrYik7CiB9CiAKK2ludCBoZGxjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAKKwlpZiAoaGRsYy0+cHJvdG8tPnhtaXQpCisJCXJldHVybiBoZGxjLT5wcm90by0+eG1pdChza2IsIGRldik7CisKKwlyZXR1cm4gaGRsYy0+eG1pdChza2IsIGRldik7IC8qIGNhbGwgaGFyZHdhcmUgZHJpdmVyIGRpcmVjdGx5ICovCit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3Byb3RvX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMDIsMTEgKzEwMSwxMSBAQAogCWhkbGNfZGV2aWNlICpoZGxjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9uOwotIAorCiAJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAotCWlmIChkZXYtPmdldF9zdGF0cyAhPSBoZGxjX2dldF9zdGF0cykKKwlpZiAoIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfV0FOX0hETEMpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7IC8qIG5vdCBhbiBIRExDIGRldmljZSAqLwogCiAJaWYgKGV2ZW50ICE9IE5FVERFVl9DSEFOR0UpCkBAIC0yMzMsMTUgKzIzMiwxMyBAQAogCS8qIFJlLWluaXQgYWxsIHZhcmlhYmxlcyBjaGFuZ2VkIGJ5IEhETEMgcHJvdG9jb2wgZHJpdmVycywKIAkgKiBpbmNsdWRpbmcgZXRoZXJfc2V0dXAoKSBjYWxsZWQgZnJvbSBoZGxjX3Jhd19ldGguYy4KIAkgKi8KLQlkZXYtPmdldF9zdGF0cwkJID0gaGRsY19nZXRfc3RhdHM7CiAJZGV2LT5mbGFncwkJID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworCWRldi0+cHJpdl9mbGFncwkJID0gSUZGX1dBTl9IRExDOwogCWRldi0+bXR1CQkgPSBIRExDX01BWF9NVFU7CiAJZGV2LT50eXBlCQkgPSBBUlBIUkRfUkFXSERMQzsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgkgPSAxNjsKIAlkZXYtPmFkZHJfbGVuCQkgPSAwOwogCWRldi0+aGVhZGVyX29wcwkJID0gJmhkbGNfbnVsbF9vcHM7Ci0KLQlkZXYtPmNoYW5nZV9tdHUJCSA9IGhkbGNfY2hhbmdlX210dTsKIH0KIAogc3RhdGljIHZvaWQgaGRsY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzM5LDYgKzMzNiw4IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkhETEMgc3VwcG9ydCBtb2R1bGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIAorRVhQT1JUX1NZTUJPTChoZGxjX2NoYW5nZV9tdHUpOworRVhQT1JUX1NZTUJPTChoZGxjX3N0YXJ0X3htaXQpOwogRVhQT1JUX1NZTUJPTChoZGxjX29wZW4pOwogRVhQT1JUX1NZTUJPTChoZGxjX2Nsb3NlKTsKIEVYUE9SVF9TWU1CT0woaGRsY19pb2N0bCk7CkBAIC0zNDksOCArMzQ4LDggQEAKIEVYUE9SVF9TWU1CT0woYXR0YWNoX2hkbGNfcHJvdG9jb2wpOwogRVhQT1JUX1NZTUJPTChkZXRhY2hfaGRsY19wcm90b2NvbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGhkbGNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0hETEMpLAogCS5mdW5jID0gaGRsY19yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYwppbmRleCA0NGU2NGIxNS4uY2Y1ZmQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlkYXRhLT50eXBlID0gaHRvbmwodHlwZSk7CiAJZGF0YS0+cGFyMSA9IHBhcjE7CiAJZGF0YS0+cGFyMiA9IHBhcjI7Ci0JZGF0YS0+cmVsID0gX19jb25zdGFudF9odG9ucygweEZGRkYpOworCWRhdGEtPnJlbCA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJLyogd2Ugd2lsbCBuZWVkIGRvX2RpdiBoZXJlIGlmIDEwMDAgJSBIWiAhPSAwICovCiAJZGF0YS0+dGltZSA9IGh0b25sKChqaWZmaWVzIC0gSU5JVElBTF9KSUZGSUVTKSAqICgxMDAwIC8gSFopKTsKIApAQCAtMTM2LDIwICsxMzYsMjAgQEAKIAlzdHJ1Y3QgaGRsY19oZWFkZXIgKmRhdGEgPSAoc3RydWN0IGhkbGNfaGVhZGVyKilza2ItPmRhdGE7CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSkKLQkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CisJCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9IRExDKTsKIAogCWlmIChkYXRhLT5hZGRyZXNzICE9IENJU0NPX01VTFRJQ0FTVCAmJgogCSAgICBkYXRhLT5hZGRyZXNzICE9IENJU0NPX1VOSUNBU1QpCi0JCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOworCQlyZXR1cm4gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyk7CiAKIAlzd2l0Y2goZGF0YS0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFgpOgotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQWCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAJCXJldHVybiBkYXRhLT5wcm90b2NvbDsKIAlkZWZhdWx0OgotCQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKTsKKwkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCX0KIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBACiAJCWNhc2UgQ0lTQ09fQUREUl9SRVE6IC8qIFN0b2xlbiBmcm9tIHN5bmNwcHAuYyA6LSkgKi8KIAkJCWluX2RldiA9IGRldi0+aXBfcHRyOwogCQkJYWRkciA9IDA7Ci0JCQltYXNrID0gX19jb25zdGFudF9odG9ubCh+MCk7IC8qIGlzIHRoZSBtYXNrIGNvcnJlY3Q/ICovCisJCQltYXNrID0gfmNwdV90b19iZTMyKDApOyAvKiBpcyB0aGUgbWFzayBjb3JyZWN0PyAqLwogCiAJCQlpZiAoaW5fZGV2ICE9IE5VTEwpIHsKIAkJCQlzdHJ1Y3QgaW5faWZhZGRyICoqaWZhcCA9ICZpbl9kZXYtPmlmYV9saXN0OwpAQCAtMzgyLDcgKzM4Miw2IEBACiAKIAkJbWVtY3B5KCZzdGF0ZShoZGxjKS0+c2V0dGluZ3MsICZuZXdfc2V0dGluZ3MsIHNpemUpOwogCQlzcGluX2xvY2tfaW5pdCgmc3RhdGUoaGRsYyktPmxvY2spOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZjaXNjb19oZWFkZXJfb3BzOwogCQlkZXYtPnR5cGUgPSBBUlBIUkRfQ0lTQ087CiAJCW5ldGlmX2Rvcm1hbnRfb24oZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCmluZGV4IGYxZGRkN2MuLjgwMDUzMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwpAQCAtMjc4LDMxICsyNzgsMzEgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYl9wOwogCiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NDSVRUX0FOU0lfTE1JKToKKwljYXNlIGNwdV90b19iZTE2KE5MUElEX0NDSVRUX0FOU0lfTE1JKToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfQ0NJVFRfQU5TSV9MTUk7CiAJCWJyZWFrOwogCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NJU0NPX0xNSSk6CisJY2FzZSBjcHVfdG9fYmUxNihOTFBJRF9DSVNDT19MTUkpOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9DSVNDT19MTUk7CiAJCWJyZWFrOwogCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfSVA7CiAJCWJyZWFrOwogCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0lQVjY7CiAJCWJyZWFrOwogCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QXzgwMl8zKToKIAkJaGVhZF9sZW4gPSAxMDsKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgaGVhZF9sZW4pIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IyID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLApAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQkJc2tiX3B1dChza2IsIHBhZCk7CiAJCQkJbWVtc2V0KHNrYi0+ZGF0YSArIGxlbiwgMCwgcGFkKTsKIAkJCX0KLQkJCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyk7CiAJCX0KIAkJaWYgKCFmcl9oYXJkX2hlYWRlcigmc2tiLCBwdmMtPmRsY2kpKSB7CiAJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtNDQ0LDE4ICs0NDQsNiBAQAogCXJldHVybiAwOwogfQogCi0KLQotc3RhdGljIGludCBwdmNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKLXsKLQlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBIRExDX01BWF9NVFUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZnJfbG9nX2RsY2lfYWN0aXZlKHB2Y19kZXZpY2UgKnB2YykKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogRExDSSAlZCBbJXMlcyVzXSVzICVzXG4iLApAQCAtNTA4LDEwICs0OTYsMTAgQEAKIAltZW1zZXQoc2tiLT5kYXRhLCAwLCBsZW4pOwogCXNrYl9yZXNlcnZlKHNrYiwgNCk7CiAJaWYgKGxtaSA9PSBMTUlfQ0lTQ08pIHsKLQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0lTQ09fTE1JKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KE5MUElEX0NJU0NPX0xNSSk7CiAJCWZyX2hhcmRfaGVhZGVyKCZza2IsIExNSV9DSVNDT19ETENJKTsKIAl9IGVsc2UgewotCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhOTFBJRF9DQ0lUVF9BTlNJX0xNSSk7CisJCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihOTFBJRF9DQ0lUVF9BTlNJX0xNSSk7CiAJCWZyX2hhcmRfaGVhZGVyKCZza2IsIExNSV9DQ0lUVF9BTlNJX0RMQ0kpOwogCX0KIAlkYXRhID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOwpAQCAtMTA2OCw2ICsxMDU2LDE0IEBACiAJZGV2LT5hZGRyX2xlbiA9IDI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHZjX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBwdmNfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwdmNfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IHB2Y194bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHB2Y19pb2N0bCwKK307CisKIHN0YXRpYyBpbnQgZnJfYWRkX3B2YyhzdHJ1Y3QgbmV0X2RldmljZSAqZnJhZCwgdW5zaWduZWQgaW50IGRsY2ksIGludCB0eXBlKQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZnJhZCk7CkBAIC0xMTA0LDExICsxMTAwLDcgQEAKIAkJKihfX2JlMTYqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhkbGNpKTsKIAkJZGxjaV90b19xOTIyKGRldi0+YnJvYWRjYXN0LCBkbGNpKTsKIAl9Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBwdmNfeG1pdDsKLQlkZXYtPm9wZW4gPSBwdmNfb3BlbjsKLQlkZXYtPnN0b3AgPSBwdmNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHB2Y19pb2N0bDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBwdmNfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmcHZjX29wczsKIAlkZXYtPm10dSA9IEhETENfTUFYX01UVTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CiAJZGV2LT5tbF9wcml2ID0gcHZjOwpAQCAtMTI2MCw4ICsxMjUyLDYgQEAKIAkJCXN0YXRlKGhkbGMpLT5kY2VfcHZjX2NvdW50ID0gMDsKIAkJfQogCQltZW1jcHkoJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7Ci0KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjLT54bWl0OwogCQlkZXYtPnR5cGUgPSBBUlBIUkRfRlJBRDsKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMKaW5kZXggNTdmZTcxNC4uNzJhN2NkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMKQEAgLTE1MCwxMSArMTUwLDExIEBACiAJCXJldHVybiBodG9ucyhFVEhfUF9IRExDKTsKIAogCXN3aXRjaCAoZGF0YS0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoUElEX0lQKToKKwljYXNlIGNwdV90b19iZTE2KFBJRF9JUCk6CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcikpOwogCQlyZXR1cm4gaHRvbnMoRVRIX1BfSVApOwogCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKFBJRF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KFBJRF9JUFY2KToKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAJCXJldHVybiBodG9ucyhFVEhfUF9JUFY2KTsKIApAQCAtNTU4LDcgKzU1OCw2IEBACiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCi0KIHN0YXRpYyB2b2lkIHBwcF90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgcHJvdG8gKnByb3RvID0gKHN0cnVjdCBwcm90byAqKWFyZzsKQEAgLTY3OSw3ICs2NzgsNiBAQAogCQlwcHAtPmtlZXBhbGl2ZV9pbnRlcnZhbCA9IDEwOwogCQlwcHAtPmtlZXBhbGl2ZV90aW1lb3V0ID0gNjA7CiAKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjLT54bWl0OwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpOwogCQlkZXYtPmhlYWRlcl9vcHMgPSAmcHBwX2hlYWRlcl9vcHM7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9QUFA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXcuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jCmluZGV4IDg2MTIzMTEuLjE5ZjUxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jCkBAIC0yNywxMSArMjcsOSBAQAogCiBzdGF0aWMgX19iZTE2IHJhd190eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOworCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9JUCk7CiB9CiAKLQotCiBzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gcHJvdG8gPSB7CiAJLnR5cGVfdHJhbnMJPSByYXdfdHlwZV90cmFucywKIAkuaW9jdGwJCT0gcmF3X2lvY3RsLApAQCAtODYsNyArODQsNiBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjLT54bWl0OwogCQlkZXYtPnR5cGUgPSBBUlBIUkRfUkFXSERMQzsKIAkJbmV0aWZfZG9ybWFudF9vZmYoZGV2KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKaW5kZXggYTEzZmMzMi4uNDllNjhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwpAQCAtNDUsNiArNDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gcHJvdG8gPSB7CiAJLnR5cGVfdHJhbnMJPSBldGhfdHlwZV90cmFucywKKwkueG1pdAkJPSBldGhfdHgsCiAJLmlvY3RsCQk9IHJhd19ldGhfaW9jdGwsCiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKIH07CkBAIC01Niw5ICs1Nyw3IEBACiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YocmF3X2hkbGNfcHJvdG8pOwogCXJhd19oZGxjX3Byb3RvIG5ld19zZXR0aW5nczsKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7Ci0JaW50IHJlc3VsdDsKLQlpbnQgKCpvbGRfY2hfbXR1KShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwotCWludCBvbGRfcWxlbjsKKwlpbnQgcmVzdWx0LCBvbGRfcWxlbjsKIAogCXN3aXRjaCAoaWZyLT5pZnJfc2V0dGluZ3MudHlwZSkgewogCWNhc2UgSUZfR0VUX1BST1RPOgpAQCAtOTksMTEgKzk4LDggQEAKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAJCW1lbWNweShoZGxjLT5zdGF0ZSwgJm5ld19zZXR0aW5ncywgc2l6ZSk7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZXRoX3R4OwotCQlvbGRfY2hfbXR1ID0gZGV2LT5jaGFuZ2VfbXR1OwogCQlvbGRfcWxlbiA9IGRldi0+dHhfcXVldWVfbGVuOwogCQlldGhlcl9zZXR1cChkZXYpOwotCQlkZXYtPmNoYW5nZV9tdHUgPSBvbGRfY2hfbXR1OwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IG9sZF9xbGVuOwogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKIAkJbmV0aWZfZG9ybWFudF9vZmYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3gyNS5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKaW5kZXggY2JjYmY2Zi4uYjFkYzI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKQEAgLTE4NCw2ICsxODQsNyBAQAogCS5jbG9zZQkJPSB4MjVfY2xvc2UsCiAJLmlvY3RsCQk9IHgyNV9pb2N0bCwKIAkubmV0aWZfcngJPSB4MjVfcngsCisJLnhtaXQJCT0geDI1X3htaXQsCiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTIxMyw3ICsyMTQsNiBAQAogCiAJCWlmICgocmVzdWx0ID0gYXR0YWNoX2hkbGNfcHJvdG9jb2woZGV2LCAmcHJvdG8sIDApKSkKIAkJCXJldHVybiByZXN1bHQ7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0geDI1X3htaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9YMjU7CiAJCW5ldGlmX2Rvcm1hbnRfb2ZmKGRldik7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jIGIvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCmluZGV4IGFmNTRmMGMuLjU2N2Q0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYworKysgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKQEAgLTE3Myw2ICsxNzMsMTQgQEAKICAqCURlc2NyaXB0aW9uIGJsb2NrIGZvciBhIENvbXRyb2wgSG9zdGVzcyBTVjExIGNhcmQKICAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3Rlc3Nfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhvc3Rlc3Nfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBob3N0ZXNzX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaG9zdGVzc19pb2N0bCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgejg1MzBfZGV2ICpzdjExX2luaXQoaW50IGlvYmFzZSwgaW50IGlycSkKIHsKIAlzdHJ1Y3Qgejg1MzBfZGV2ICpzdjsKQEAgLTI2Nyw5ICsyNzUsNyBAQAogCiAJZGV2X3RvX2hkbGMobmV0ZGV2KS0+YXR0YWNoID0gaG9zdGVzc19hdHRhY2g7CiAJZGV2X3RvX2hkbGMobmV0ZGV2KS0+eG1pdCA9IGhvc3Rlc3NfcXVldWVfeG1pdDsKLQluZXRkZXYtPm9wZW4gPSBob3N0ZXNzX29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gaG9zdGVzc19jbG9zZTsKLQluZXRkZXYtPmRvX2lvY3RsID0gaG9zdGVzc19pb2N0bDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGVzc19vcHM7CiAJbmV0ZGV2LT5iYXNlX2FkZHIgPSBpb2Jhc2U7CiAJbmV0ZGV2LT5pcnEgPSBpcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCmluZGV4IDBkYmQ4NWIuLjNiZjdkM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYwpAQCAtNjIyLDcgKzYyMiw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoc3NfaGRsY19yeF9pcnFcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAlxbWdyX2Rpc2FibGVfaXJxKHF1ZXVlX2lkc1twb3J0LT5pZF0ucngpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIH0KIAogc3RhdGljIGludCBoc3NfaGRsY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKQEAgLTY0OSwxNSArNjQ5LDE1IEBACiAJCWlmICgobiA9IHF1ZXVlX2dldF9kZXNjKHJ4cSwgcG9ydCwgMCkpIDwgMCkgewogI2lmIERFQlVHX1JYCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhzc19oZGxjX3BvbGwiCi0JCQkgICAgICAgIiBuZXRpZl9yeF9jb21wbGV0ZVxuIiwgZGV2LT5uYW1lKTsKKwkJCSAgICAgICAiIG5hcGlfY29tcGxldGVcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXFtZ3JfZW5hYmxlX2lycShyeHEpOwogCQkJaWYgKCFxbWdyX3N0YXRfZW1wdHkocnhxKSAmJgotCQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpIHsKKwkJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKICNpZiBERUJVR19SWAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHNzX2hkbGNfcG9sbCIKLQkJCQkgICAgICAgIiBuZXRpZl9yeF9yZXNjaGVkdWxlIHN1Y2NlZWRlZFxuIiwKKwkJCQkgICAgICAgIiBuYXBpX3Jlc2NoZWR1bGUgc3VjY2VlZGVkXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUpOwogI2VuZGlmCiAJCQkJcW1ncl9kaXNhYmxlX2lycShyeHEpOwpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIAloc3Nfc3RhcnRfaGRsYyhwb3J0KTsKIAogCS8qIHdlIG1heSBhbHJlYWR5IGhhdmUgUlggZGF0YSwgZW5hYmxlcyBJUlEgKi8KLQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CiAJcmV0dXJuIDA7CiAKIGVycl91bmxvY2s6CkBAIC0xMjMwLDYgKzEyMzAsMTQgQEAKICAqIGluaXRpYWxpemF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc3NfaGRsY19vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaHNzX2hkbGNfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoc3NfaGRsY19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhzc19oZGxjX2lvY3RsLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgaHNzX2luaXRfb25lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHBvcnQgKnBvcnQ7CkBAIC0xMjU0LDkgKzEyNjIsNyBAQAogCWhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogCWhkbGMtPmF0dGFjaCA9IGhzc19oZGxjX2F0dGFjaDsKIAloZGxjLT54bWl0ID0gaHNzX2hkbGNfeG1pdDsKLQlkZXYtPm9wZW4gPSBoc3NfaGRsY19vcGVuOwotCWRldi0+c3RvcCA9IGhzc19oZGxjX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSBoc3NfaGRsY19pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaHNzX2hkbGNfb3BzOwogCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwogCXBvcnQtPmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CiAJcG9ydC0+Y2xvY2tfcmF0ZSA9IDIwNDgwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMgYi9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKaW5kZXggNWI2MWIzZS4uMmRkNzhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwpAQCAtNTUsNyArNTUsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZXRoZGV2OwkvKiBsaW5rIHRvIGV0aGVybmV0IGRldmljZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlCSpheGRldjsJCS8qIGxhcGJldGggZGV2aWNlIChsYXBiIykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJCS8qIHNvbWUgc3RhdGlzdGljcyAqLwogfTsKIAogc3RhdGljIExJU1RfSEVBRChsYXBiZXRoX2RldmljZXMpOwpAQCAtMTA3LDEwICsxMDYsOSBAQAogCWlmICghbmV0aWZfcnVubmluZyhsYXBiZXRoLT5heGRldikpCiAJCWdvdG8gZHJvcF91bmxvY2s7CiAKLQlsYXBiZXRoLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0KIAlsZW4gPSBza2ItPmRhdGFbMF0gKyBza2ItPmRhdGFbMV0gKiAyNTY7Ci0JbGFwYmV0aC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCiAJc2tiX3B1bGwoc2tiLCAyKTsJLyogUmVtb3ZlIHRoZSBsZW5ndGggYnl0ZXMgKi8KIAlza2JfdHJpbShza2IsIGxlbik7CS8qIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhICovCkBAIC0yMTAsOCArMjA4LDggQEAKIAkqcHRyKysgPSBzaXplICUgMjU2OwogCSpwdHIrKyA9IHNpemUgLyAyNTY7CiAKLQlsYXBiZXRoLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JbGFwYmV0aC0+c3RhdHMudHhfYnl0ZXMgKz0gc2l6ZTsKKwluZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2l6ZTsKIAogCXNrYi0+ZGV2ID0gZGV2ID0gbGFwYmV0aC0+ZXRoZGV2OwogCkBAIC0yNTUsMTUgKzI1Myw2IEBACiB9CiAKIC8qCi0gKglTdGF0aXN0aWNzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGFwYmV0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGFwYmV0aGRldiAqbGFwYmV0aCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZsYXBiZXRoLT5zdGF0czsKLX0KLQotLyoKICAqCVNldCBBWC4yNSBjYWxsc2lnbgogICovCiBzdGF0aWMgaW50IGxhcGJldGhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCkBAIC0zMTQsMTQgKzMwMywxNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsYXBiZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBsYXBiZXRoX29wZW4sCisJLm5kb19zdG9wCSAgICAgPSBsYXBiZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkgICAgID0gbGFwYmV0aF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCBsYXBiZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYXBiZXRoX3htaXQ7Ci0JZGV2LT5vcGVuCSAgICAgPSBsYXBiZXRoX29wZW47Ci0JZGV2LT5zdG9wCSAgICAgPSBsYXBiZXRoX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJmxhcGJldGhfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJICAgICA9IGZyZWVfbmV0ZGV2OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICA9IGxhcGJldGhfZ2V0X3N0YXRzOwogCWRldi0+dHlwZSAgICAgICAgICAgID0gQVJQSFJEX1gyNTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDM7CiAJZGV2LT5tdHUgICAgICAgICAgICAgPSAxMDAwOwpAQCAtNDIxLDggKzQxMyw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxhcGJldGhfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0RFQyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxhcGJldGhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0RFQyksCiAJLmZ1bmMgPSBsYXBiZXRoX3JjdiwKIH07CiAKQEAgLTQzMCw3ICs0MjIsOCBAQAogCS5ub3RpZmllcl9jYWxsID0gbGFwYmV0aF9kZXZpY2VfZXZlbnQsCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJMQVBCIEV0aGVybmV0IGRyaXZlciB2ZXJzaW9uIDAuMDJcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRjb25zdCA9CisJS0VSTl9JTkZPICJMQVBCIEV0aGVybmV0IGRyaXZlciB2ZXJzaW9uIDAuMDJcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGxhcGJldGhfaW5pdF9kcml2ZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwppbmRleCBmZWFjM2I5Li40NWIxODIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCkBAIC04MDYsNiArODA2LDE2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbG1jX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBsbWNfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBsbWNfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBsbWNfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gbG1jX2RyaXZlcl90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzICA9IGxtY19nZXRfc3RhdHMsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBsbWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtODQ5LDExICs4NTksNyBAQAogCWRldi0+dHlwZSA9IEFSUEhSRF9IRExDOwogCWRldl90b19oZGxjKGRldiktPnhtaXQgPSBsbWNfc3RhcnRfeG1pdDsKIAlkZXZfdG9faGRsYyhkZXYpLT5hdHRhY2ggPSBsbWNfYXR0YWNoOwotCWRldi0+b3BlbiA9IGxtY19vcGVuOwotCWRldi0+c3RvcCA9IGxtY19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IGxtY19nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bCA9IGxtY19pb2N0bDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBsbWNfZHJpdmVyX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmxtY19vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCAqLwogCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwogCXNjLT5sbWNfZGV2aWNlID0gZGV2OwpAQCAtMTA1OSw5ICsxMDY1LDYgQEAKICAgICBpZiAoKGVyciA9IGxtY19wcm90b19vcGVuKHNjKSkgIT0gMCkKIAkgICAgcmV0dXJuIGVycjsKIAotICAgIGRldi0+ZG9faW9jdGwgPSBsbWNfaW9jdGw7Ci0KLQogICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAgICAgc2MtPmV4dHJhX3N0YXRzLnR4X3RidXN5MCsrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90by5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfcHJvdG8uYwppbmRleCA5NGI0YzIwLi4wNDRhNDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90by5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMKQEAgLTUxLDMwICs1MSwxNSBAQAogdm9pZCBsbWNfcHJvdG9fYXR0YWNoKGxtY19zb2Z0Y190ICpzYykgLypGT0xEMDAqLwogewogICAgIGxtY190cmFjZShzYy0+bG1jX2RldmljZSwgImxtY19wcm90b19hdHRhY2ggaW4iKTsKLSAgICBzd2l0Y2goc2MtPmlmX3R5cGUpewotICAgIGNhc2UgTE1DX1BQUDoKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNjLT5sbWNfZGV2aWNlOwotICAgICAgICAgICAgZGV2LT5kb19pb2N0bCA9IGxtY19pb2N0bDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIExNQ19ORVQ6Ci0gICAgICAgIHsKKyAgICBpZiAoc2MtPmlmX3R5cGUgPT0gTE1DX05FVCkgewogICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNjLT5sbWNfZGV2aWNlOwogICAgICAgICAgICAgLyoKIAkgICAgICogVGhleSBzZXQgYSBmZXcgYmFzaWNzIGJlY2F1c2UgdGhleSBkb24ndCB1c2UgSERMQwogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBkZXYtPmZsYWdzIHw9IElGRl9QT0lOVE9QT0lOVDsKLQogICAgICAgICAgICAgZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwogICAgICAgICAgICAgZGV2LT5hZGRyX2xlbiA9IDA7CiAgICAgICAgIH0KLSAgICBjYXNlIExNQ19SQVc6IC8qIFNldHVwIHRoZSB0YXNrIHF1ZXVlLCBtYXliZSB3ZSBzaG91bGQgbm90aWZ5IHNvbWVvbmU/ICovCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICBsbWNfdHJhY2Uoc2MtPmxtY19kZXZpY2UsICJsbWNfcHJvdG9fYXR0YWNoIG91dCIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbjIuYyBiL2RyaXZlcnMvbmV0L3dhbi9uMi5jCmluZGV4IDY5NzcxNWEuLjgzZGE1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9uMi5jCkBAIC0zMjQsNyArMzI0LDEzIEBACiAJa2ZyZWUoY2FyZCk7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuMl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gbjJfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBuMl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IG4yX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgbjJfcnVuKHVuc2lnbmVkIGxvbmcgaW8sIHVuc2lnbmVkIGxvbmcgaXJxLAogCQkJIHVuc2lnbmVkIGxvbmcgd2luYmFzZSwgbG9uZyB2YWxpZDAsIGxvbmcgdmFsaWQxKQpAQCAtNDYwLDkgKzQ2Niw3IEBACiAJCWRldi0+bWVtX3N0YXJ0ID0gd2luYmFzZTsKIAkJZGV2LT5tZW1fZW5kID0gd2luYmFzZSArIFVTRV9XSU5ET1dTSVpFIC0gMTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IG4yX2lvY3RsOwotCQlkZXYtPm9wZW4gPSBuMl9vcGVuOwotCQlkZXYtPnN0b3AgPSBuMl9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm4yX29wczsKIAkJaGRsYy0+YXR0YWNoID0gc2NhX2F0dGFjaDsKIAkJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCQlwb3J0LT5zZXR0aW5ncy5jbG9ja190eXBlID0gQ0xPQ0tfRVhUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMgYi9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYwppbmRleCBmMjQ3ZTVkLi42MGVjZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYwpAQCAtMjg3LDcgKzI4NywxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGMzMDBfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHBjMzAwX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gcGMzMDBfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBwYzMwMF9pb2N0bCwKK307CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBjMzAwX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTQ0OCw5ICs0NTQsNyBAQAogCQlkZXYtPm1lbV9zdGFydCA9IHJhbXBoeXM7CiAJCWRldi0+bWVtX2VuZCA9IHJhbXBoeXMgKyByYW1zaXplIC0gMTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IHBjMzAwX2lvY3RsOwotCQlkZXYtPm9wZW4gPSBwYzMwMF9vcGVuOwotCQlkZXYtPnN0b3AgPSBwYzMwMF9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnBjMzAwX29wczsKIAkJaGRsYy0+YXR0YWNoID0gc2NhX2F0dGFjaDsKIAkJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCQlwb3J0LT5zZXR0aW5ncy5jbG9ja190eXBlID0gQ0xPQ0tfRVhUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IDExMDRkM2EuLmUwMzVkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTI2NSw3ICsyNjUsMTMgQEAKIAlrZnJlZShjYXJkKTsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBjaTIwMF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gcGNpMjAwX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gcGNpMjAwX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gcGNpMjAwX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGNpMjAwX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC0zOTUsOSArNDAxLDcgQEAKIAkJZGV2LT5tZW1fc3RhcnQgPSByYW1waHlzOwogCQlkZXYtPm1lbV9lbmQgPSByYW1waHlzICsgcmFtc2l6ZSAtIDE7CiAJCWRldi0+dHhfcXVldWVfbGVuID0gNTA7Ci0JCWRldi0+ZG9faW9jdGwgPSBwY2kyMDBfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHBjaTIwMF9vcGVuOwotCQlkZXYtPnN0b3AgPSBwY2kyMDBfY2xvc2U7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZwY2kyMDBfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwppbmRleCAwYWEyOGUxLi5mNDIxMWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKQEAgLTY4LDcgKzY4LDYgQEAKIC8qIGRldmljZSBwcml2YXRlIGRhdGEgKi8KIAogc3RydWN0IG5ldF9sb2NhbCB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CiAJc3RydWN0IHRpbWVyX2xpc3QJd2F0Y2hkb2c7CiAKIAlzcGlubG9ja190CWxvY2s7CkBAIC0xMTcsNyArMTE2LDYgQEAKIHN0YXRpYyBpbnQgIHNibmlfY2xvc2UoIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKIHN0YXRpYyBpbnQgIHNibmlfc3RhcnRfeG1pdCggc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9pb2N0bCggc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCApOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICAqc2JuaV9nZXRfc3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKIHN0YXRpYyB2b2lkICBzZXRfbXVsdGljYXN0X2xpc3QoIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKIAogc3RhdGljIGlycXJldHVybl90IHNibmlfaW50ZXJydXB0KCBpbnQsIHZvaWQgKiApOwpAQCAtMjA4LDE1ICsyMDYsMjEgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2JuaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzYm5pX29wZW4sCisJLm5kb19zdG9wCQk9IHNibmlfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNibmlfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2RvX2lvY3RsCQk9IHNibmlfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzYm5pX2RldnNldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZXRoZXJfc2V0dXAoIGRldiApOwotCWRldi0+b3BlbgkJPSAmc2JuaV9vcGVuOwotCWRldi0+c3RvcAkJPSAmc2JuaV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9ICZzYm5pX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gJnNibmlfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0CT0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmRvX2lvY3RsCQk9ICZzYm5pX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzYm5pX25ldGRldl9vcHM7CiB9CiAKIGludCBfX2luaXQgc2JuaV9wcm9iZShpbnQgdW5pdCkKQEAgLTIyOSw2ICsyMzMsOCBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZzYm5pX25ldGRldl9vcHM7CisKIAlzcHJpbnRmKGRldi0+bmFtZSwgInNibmklZCIsIHVuaXQpOwogCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CiAKQEAgLTcyMywxMyArNzI5LDExIEBACiAJCQlubC0+d2FpdF9mcmFtZW5vID0gMCwKIAkJCW5sLT5pbnBwb3MgPSAwLAogI2lmZGVmIENPTkZJR19TQk5JX01VTFRJTElORQotCQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQkJLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJCS0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJbmwtPm1hc3Rlci0+c3RhdHMucnhfZXJyb3JzKyssCisJCQlubC0+bWFzdGVyLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAjZWxzZQotCQkJbmwtPnN0YXRzLnJ4X2Vycm9ycysrLAotCQkJbmwtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJICAgICAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrLAorCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAjZW5kaWYKIAkJCS8qIG5vdyBza2lwIGFsbCBmcmFtZXMgdW50aWwgaXNfZmlyc3QgIT0gMCAqLwogCX0gZWxzZQpAQCAtNzQyLDEzICs3NDYsMTEgQEAKIAkJICovCiAJCW5sLT53YWl0X2ZyYW1lbm8gPSAwLAogI2lmZGVmIENPTkZJR19TQk5JX01VTFRJTElORQotCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCS0+c3RhdHMucnhfZXJyb3JzKyssCi0JCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2Vycm9ycysrLAorCQlubC0+bWFzdGVyLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAjZWxzZQotCQlubC0+c3RhdHMucnhfZXJyb3JzKyssCi0JCW5sLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKyssCisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogI2VuZGlmCiAKIAlyZXR1cm4gIGZyYW1lX29rOwpAQCAtNzU2LDE1ICs3NTgsMTYgQEAKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNlbmRfY29tcGxldGUoIHN0cnVjdCBuZXRfbG9jYWwgICpubCApCitzZW5kX2NvbXBsZXRlKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKIHsKKwlzdHJ1Y3QgbmV0X2xvY2FsICAqbmwgPSBuZXRkZXZfcHJpdihkZXYpOworCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpLT5zdGF0cy50eF9ieXRlcwotCQkrPSBubC0+dHhfYnVmX3AtPmxlbjsKKwlubC0+bWFzdGVyLT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmwtPm1hc3Rlci0+c3RhdHMudHhfYnl0ZXMgKz0gbmwtPnR4X2J1Zl9wLT5sZW47CiAjZWxzZQotCW5sLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JbmwtPnN0YXRzLnR4X2J5dGVzICs9IG5sLT50eF9idWZfcC0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbmwtPnR4X2J1Zl9wLT5sZW47CiAjZW5kaWYKIAlkZXZfa2ZyZWVfc2tiX2lycSggbmwtPnR4X2J1Zl9wICk7CiAKQEAgLTc5Miw3ICs3OTUsNyBAQAogCQkJCQkJICAgbmwtPm1heGZyYW1lLAogCQkJCQkJICAgbmwtPnR4X2J1Zl9wLT5sZW4gLSBubC0+b3V0cG9zKTsKIAkJCWVsc2UKLQkJCQlzZW5kX2NvbXBsZXRlKCBubCApLAorCQkJCXNlbmRfY29tcGxldGUoIGRldiApLAogI2lmZGVmIENPTkZJR19TQk5JX01VTFRJTElORQogCQkJCW5ldGlmX3dha2VfcXVldWUoIG5sLT5tYXN0ZXIgKTsKICNlbHNlCkBAIC04ODEsMTMgKzg4NCwxMSBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueSggbmwtPnR4X2J1Zl9wICksCiAJCW5sLT50eF9idWZfcCA9IE5VTEwsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJLT5zdGF0cy50eF9lcnJvcnMrKywKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCW5sLT5tYXN0ZXItPnN0YXRzLnR4X2Vycm9ycysrLAorCQlubC0+bWFzdGVyLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogI2Vsc2UKLQkJbmwtPnN0YXRzLnR4X2Vycm9ycysrLAotCQlubC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKywKKwkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogI2VuZGlmCiAKIAlubC0+dHhfZnJhbWVubwk9IDA7CkBAIC0xMDE3LDE0ICsxMDE4LDEzIEBACiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKCBza2IsIG5sLT5tYXN0ZXIgKTsKIAluZXRpZl9yeCggc2tiICk7Ci0JKysoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnJ4X3BhY2tldHM7Ci0JKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpLT5zdGF0cy5yeF9ieXRlcyArPQotCQlubC0+aW5wcG9zOworCSsrbmwtPm1hc3Rlci0+c3RhdHMucnhfcGFja2V0czsKKwlubC0+bWFzdGVyLT5zdGF0cy5yeF9ieXRlcyArPSBubC0+aW5wcG9zOwogI2Vsc2UKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgZGV2ICk7CiAJbmV0aWZfcngoIHNrYiApOwotCSsrbmwtPnN0YXRzLnJ4X3BhY2tldHM7Ci0JbmwtPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CisJKytkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBubC0+aW5wcG9zOwogI2VuZGlmCiAJbmwtPnJ4X2J1Zl9wID0gTlVMTDsJLyogcHJvdG9jb2wgZHJpdmVyIHdpbGwgY2xlYXIgdGhpcyBza19idWZmICovCiB9CkBAIC0xMTk3LDcgKzExOTcsNyBAQAogaGFuZGxlcl9hdHRhY2hlZDoKIAogCXNwaW5fbG9jayggJm5sLT5sb2NrICk7Ci0JbWVtc2V0KCAmbmwtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpICk7CisJbWVtc2V0KCAmZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSApOwogCW1lbXNldCggJm5sLT5pbl9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBzYm5pX2luX3N0YXRzKSApOwogCiAJY2FyZF9zdGFydCggZGV2ICk7CkBAIC0xNDEzLDcgKzE0MTMsNyBAQAogCiAJLyogU3VtbWFyeSBzdGF0aXN0aWNzIG9mIE11bHRpTGluZSBvcGVyYXRpb24gd2lsbCBiZSBzdG9yZWQKIAkgICBpbiBtYXN0ZXIncyBjb3VudGVycyAqLwotCW1lbXNldCggJnNubC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKKwltZW1zZXQoICZzbGF2ZV9kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpICk7CiAJbmV0aWZfc3RvcF9xdWV1ZSggc2xhdmVfZGV2ICk7CiAJbmV0aWZfd2FrZV9xdWV1ZSggZGV2ICk7CS8qIE5vdyB3ZSBhcmUgYWJsZSB0byB0cmFuc21pdCAqLwogCkBAIC0xNDY0LDE0ICsxNDY0LDYgQEAKIAogI2VuZGlmCiAKLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLXNibmlfZ2V0X3N0YXRzKCBzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiApCi17Ci0JcmV0dXJuICAmKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCi0KIHN0YXRpYyB2b2lkCiBzZXRfbXVsdGljYXN0X2xpc3QoIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKIHsKQEAgLTE1MjAsMTcgKzE1MTIsMTggQEAKIH0KIAogdm9pZAotY2xlYW51cF9tb2R1bGUoIHZvaWQgKQorY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKLQlpbnQgIG51bTsKKwlpbnQgaTsKIAotCWZvciggbnVtID0gMDsgIG51bSA8IFNCTklfTUFYX05VTV9DQVJEUzsgICsrbnVtICkKLQkJaWYoIChkZXYgPSBzYm5pX2NhcmRzWyBudW0gXSkgIT0gTlVMTCApIHsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KCBkZXYgKTsKLQkJCXJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgU0JOSV9JT19FWFRFTlQgKTsKLQkJCWZyZWVfbmV0ZGV2KCBkZXYgKTsKKwlmb3IgKGkgPSAwOyAgaSA8IFNCTklfTUFYX05VTV9DQVJEUzsgICsraSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2JuaV9jYXJkc1tpXTsKKwkJaWYgKGRldiAhPSBOVUxMKSB7CisJCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNCTklfSU9fRVhURU5UKTsKKwkJCWZyZWVfbmV0ZGV2KGRldik7CiAJCX0KKwl9CiB9CiAKICNlbHNlCS8qIE1PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGEuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKaW5kZXggNmEwN2JhOS4uMWQ2MzdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGEuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2RsYS5jCkBAIC03MTQsMTkgKzcxNCwxOSBAQAogCQlzd2l0Y2ggKHJldCkKIAkJewogCQkJY2FzZSBTRExBX1JFVF9PSzoKLQkJCQlmbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlyZXQgPSBETENJX1JFVF9PSzsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBTRExBX1JFVF9DSVJfT1ZFUkZMT1c6CiAJCQljYXNlIFNETEFfUkVUX0JVRl9PVkVSU0laRToKIAkJCWNhc2UgU0RMQV9SRVRfTk9fQlVGUzoKLQkJCQlmbHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlyZXQgPSBETENJX1JFVF9EUk9QOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCWZscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCQlyZXQgPSBETENJX1JFVF9FUlI7CiAJCQkJYnJlYWs7CiAJCX0KQEAgLTgwNyw3ICs4MDcsNyBAQAogCQlpZiAoaSA9PSBDT05GSUdfRExDSV9NQVgpCiAJCXsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFJlY2VpdmVkIHBhY2tldCBmcm9tIGludmFsaWQgRExDSSAlaSwgaWdub3JpbmcuIiwgZGV2LT5uYW1lLCBkbGNpKTsKLQkJCWZscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJc3VjY2VzcyA9IDA7CiAJCX0KIAl9CkBAIC04MTksNyArODE5LDcgQEAKIAkJaWYgKHNrYiA9PSBOVUxMKSAKIAkJewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsIGRldi0+bmFtZSk7Ci0JCQlmbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsgCisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCXN1Y2Nlc3MgPSAwOwogCQl9CiAJCWVsc2UKQEAgLTg1OSw3ICs4NTksNyBAQAogCiAJaWYgKHN1Y2Nlc3MpCiAJewotCQlmbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCWRscCA9IG5ldGRldl9wcml2KG1hc3Rlcik7CiAJCSgqZGxwLT5yZWNlaXZlKShza2IsIG1hc3Rlcik7CiAJfQpAQCAtMTU5MCwxMyArMTU5MCwxNCBAQAogCXJldHVybiBlcnI7CiB9CiAgCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNkbGFfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZnJhZF9sb2NhbCAqZmxwOwotCWZscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4oJmZscC0+c3RhdHMpOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzZGxhX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gc2RsYV9vcGVuLAorCS5uZG9fc3RvcAk9IHNkbGFfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IHNkbGFfaW9jdGwsCisJLm5kb19zZXRfY29uZmlnCT0gc2RsYV9zZXRfY29uZmlnLAorCS5uZG9fc3RhcnRfeG1pdAk9IHNkbGFfdHJhbnNtaXQsCisJLm5kb19jaGFuZ2VfbXR1CT0gc2RsYV9jaGFuZ2VfbXR1LAorfTsKIAogc3RhdGljIHZvaWQgc2V0dXBfc2RsYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTYwNCwyMCArMTYwNSwxMyBAQAogCiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIAorCWRldi0+bmV0ZGV2X29wcwkJPSAmc2RsYV9uZXRkZXZfb3BzOwogCWRldi0+ZmxhZ3MJCT0gMDsKIAlkZXYtPnR5cGUJCT0gMHhGRkZGOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gMDsKIAlkZXYtPmFkZHJfbGVuCQk9IDA7CiAJZGV2LT5tdHUJCT0gU0RMQV9NQVhfTVRVOwogCi0JZGV2LT5vcGVuCQk9IHNkbGFfb3BlbjsKLQlkZXYtPnN0b3AJCT0gc2RsYV9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsCQk9IHNkbGFfaW9jdGw7Ci0JZGV2LT5zZXRfY29uZmlnCQk9IHNkbGFfc2V0X2NvbmZpZzsKLQlkZXYtPmdldF9zdGF0cwkJPSBzZGxhX3N0YXRzOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gc2RsYV90cmFuc21pdDsKLQlkZXYtPmNoYW5nZV9tdHUJCT0gc2RsYV9jaGFuZ2VfbXR1OwotCiAJZmxwLT5hY3RpdmF0ZQkJPSBzZGxhX2FjdGl2YXRlOwogCWZscC0+ZGVhY3RpdmF0ZQkJPSBzZGxhX2RlYWN0aXZhdGU7CiAJZmxwLT5hc3NvYwkJPSBzZGxhX2Fzc29jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMgYi9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYwppbmRleCAwOTQxYTI2Li4yM2IyNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYwpAQCAtMTY5LDYgKzE2OSwxNCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNlYWxldmVsX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBzZWFsZXZlbF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHNlYWxldmVsX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gc2VhbGV2ZWxfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IHNsdmxfc2V0dXAoc3RydWN0IHNsdmxfZGV2aWNlICpzdiwgaW50IGlvYmFzZSwgaW50IGlycSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfaGRsY2Rldihzdik7CkBAIC0xNzcsOSArMTg1LDcgQEAKIAogCWRldl90b19oZGxjKGRldiktPmF0dGFjaCA9IHNlYWxldmVsX2F0dGFjaDsKIAlkZXZfdG9faGRsYyhkZXYpLT54bWl0ID0gc2VhbGV2ZWxfcXVldWVfeG1pdDsKLQlkZXYtPm9wZW4gPSBzZWFsZXZlbF9vcGVuOwotCWRldi0+c3RvcCA9IHNlYWxldmVsX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSBzZWFsZXZlbF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc2VhbGV2ZWxfb3BzOwogCWRldi0+YmFzZV9hZGRyID0gaW9iYXNlOwogCWRldi0+aXJxID0gaXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCmluZGV4IDRiZmZiNjcuLjg4N2FjYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCkBAIC01NDcsNiArNTQ3LDE1IEBACiAKICNpbmNsdWRlICJ3YW54bGZ3LmluYyIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3YW54bF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gd2FueGxfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSB3YW54bF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHdhbnhsX2lvY3RsLAorCS5uZG9fZ2V0X3N0YXRzICA9IHdhbnhsX2dldF9zdGF0cywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdhbnhsX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTc3NywxMiArNzg2LDkgQEAKIAkJaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IHdhbnhsX2lvY3RsOwotCQlkZXYtPm9wZW4gPSB3YW54bF9vcGVuOwotCQlkZXYtPnN0b3AgPSB3YW54bF9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJndhbnhsX29wczsKIAkJaGRsYy0+YXR0YWNoID0gd2FueGxfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gd2FueGxfeG1pdDsKLQkJZGV2LT5nZXRfc3RhdHMgPSB3YW54bF9nZXRfc3RhdHM7CiAJCXBvcnQtPmNhcmQgPSBjYXJkOwogCQlwb3J0LT5ub2RlID0gaTsKIAkJZ2V0X3N0YXR1cyhwb3J0KS0+Y2xvY2tpbmcgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwppbmRleCBlNmUyY2UzLi5kNjdlMjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkJbWVtY3B5KHNsLT54YnVmZiwgc2wtPnhoZWFkLCBzbC0+eGxlZnQpOwogCQl9IGVsc2UgIHsKIAkJCXNsLT54bGVmdCA9IDA7Ci0JCQlzbC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KIAl9CiAJc2wtPnhoZWFkID0gc2wtPnhidWZmOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJCQltZW1jcHkoc2wtPnJidWZmLCByYnVmZiwgc2wtPnJjb3VudCk7CiAJCX0gZWxzZSAgewogCQkJc2wtPnJjb3VudCA9IDA7Ci0JCQlzbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCXNldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKTsKIAkJfQogCX0KQEAgLTE4OCwxOCArMTg4LDE5IEBACiAKIHN0YXRpYyB2b2lkIHgyNV9hc3lfYnVtcChzdHJ1Y3QgeDI1X2FzeSAqc2wpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNsLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgY291bnQ7CiAJaW50IGVycjsKIAogCWNvdW50ID0gc2wtPnJjb3VudDsKLQlzbC0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKIAogCXNrYiA9IGRldl9hbGxvY19za2IoY291bnQrMSk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKIAkJCXNsLT5kZXYtPm5hbWUpOwotCQlzbC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHVzaChza2IsIDEpOwkvKiBMQVBCIGludGVybmFsIGNvbnRyb2wgKi8KQEAgLTIxMSw3ICsyMTIsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAieDI1X2FzeTogZGF0YSByZWNlaXZlZCBlcnIgLSAlZFxuIiwgZXJyKTsKIAl9IGVsc2UgewogCQluZXRpZl9yeChza2IpOwotCQlzbC0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAl9CiB9CiAKQEAgLTIyNiw3ICsyMjcsNyBAQAogCQlsZW4gPSBtdHU7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHJ1bmNhdGluZyBvdmVyc2l6ZWQgdHJhbnNtaXQgcGFja2V0IVxuIiwKIAkJCQkJc2wtPmRldi0+bmFtZSk7Ci0JCXNsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCXNsLT5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJeDI1X2FzeV91bmxvY2soc2wpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY2LDcgKzI2Nyw3IEBACiAJaWYgKHNsLT54bGVmdCA8PSAwKSB7CiAJCS8qIE5vdyBzZXJpYWwgYnVmZmVyIGlzIGFsbW9zdCBmcmVlICYgd2UgY2FuIHN0YXJ0CiAJCSAqIHRyYW5zbWlzc2lvbiBvZiBhbm90aGVyIHBhY2tldCAqLwotCQlzbC0+c3RhdHMudHhfcGFja2V0cysrOworCQlzbC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWNsZWFyX2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncyk7CiAJCXgyNV9hc3lfdW5sb2NrKHNsKTsKIAkJcmV0dXJuOwpAQCAtMzgzLDcgKzM4NCw3IEBACiAJLyogV2Ugd2VyZSBub3QgYnVzeSwgc28gd2UgYXJlIG5vdy4uLiA6LSkgKi8KIAlpZiAoc2tiICE9IE5VTEwpIHsKIAkJeDI1X2FzeV9sb2NrKHNsKTsKLQkJc2wtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQl4MjVfYXN5X2VuY2FwcyhzbCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CkBAIC01MzMsNyArNTM0LDcgQEAKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgJiYgKmZwKyspIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpKQotCQkJCXNsLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlzbC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWNwKys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjA4LDE0ICs2MDksNiBAQAogCXgyNV9hc3lfZnJlZShzbCk7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp4MjVfYXN5X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB4MjVfYXN5ICpzbCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZzbC0+c3RhdHM7Ci19Ci0KLQogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKgkJCVNUQU5EQVJEIFguMjUgRU5DQVBTVUxBVElPTgkJICAJICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjgyLDcgKzY3NSw3IEBACiAJCQlzbC0+cmJ1ZmZbc2wtPnJjb3VudCsrXSA9IHM7CiAJCQlyZXR1cm47CiAJCX0KLQkJc2wtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCXNsLT5kZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCXNldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKTsKIAl9CiB9CkBAIC03MTksNiArNzEyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeDI1X2FzeV9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IHgyNV9hc3lfb3Blbl9kZXYsCisJLm5kb19zdG9wCT0geDI1X2FzeV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJPSB4MjVfYXN5X3htaXQsCisJLm5kb190eF90aW1lb3V0CT0geDI1X2FzeV90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQk9IHgyNV9hc3lfY2hhbmdlX210dSwKK307CisKIC8qIEluaXRpYWxpc2UgdGhlIFguMjUgZHJpdmVyLiAgQ2FsbGVkIGJ5IHRoZSBkZXZpY2UgaW5pdCBjb2RlICovCiBzdGF0aWMgdm9pZCB4MjVfYXN5X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC03MzQsMTMgKzczNSw4IEBACiAJICovCiAKIAlkZXYtPm10dQkJPSBTTF9NVFU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSB4MjVfYXN5X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IHgyNV9hc3lfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJngyNV9hc3lfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFoqMjA7Ci0JZGV2LT5vcGVuCQk9IHgyNV9hc3lfb3Blbl9kZXY7Ci0JZGV2LT5zdG9wCQk9IHgyNV9hc3lfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IHgyNV9hc3lfZ2V0X3N0YXRzOwotCWRldi0+Y2hhbmdlX210dQkJPSB4MjVfYXN5X2NoYW5nZV9tdHU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwogCWRldi0+YWRkcl9sZW4JCT0gMDsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX1gyNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmggYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oCmluZGV4IDQxNzcwMjAuLjhmMGZjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmgKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaApAQCAtMjgsMTAgKzI4LDYgQEAKICAgdW5zaWduZWQgY2hhcgkJKnhidWZmOwkJLyogdHJhbnNtaXR0ZXIgYnVmZmVyCQkqLwogICB1bnNpZ25lZCBjaGFyICAgICAgICAgKnhoZWFkOyAgICAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCBieXRlIHRvIFhNSVQgKi8KICAgaW50ICAgICAgICAgICAgICAgICAgIHhsZWZ0OyAgICAgICAgICAvKiBieXRlcyBsZWZ0IGluIFhNSVQgcXVldWUgICAgICovCi0KLSAgLyogWC4yNSBpbnRlcmZhY2Ugc3RhdGlzdGljcy4gKi8KLSAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KICAgaW50ICAgICAgICAgICAgICAgICAgIGJ1ZmZzaXplOyAgICAgICAvKiBNYXggYnVmZmVycyBzaXplcyAgICAgICAgICAgICovCiAKICAgdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBGbGFnIHZhbHVlcy8gbW9kZSBldGMJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYwppbmRleCAzZDAwOTcxLi5hZDRlNzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCkBAIC0xNzc1LDcgKzE3NzUsOCBAQAogLyoKICAqCU1vZHVsZSBzdXBwb3J0CiAgKi8KLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkdlbmVyaWMgWjg1QzMwL1o4NTIzMCBpbnRlcmZhY2UgZHJpdmVyIHYwLjAyXG4iOworc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9CisJS0VSTl9JTkZPICJHZW5lcmljIFo4NUMzMC9aODUyMzAgaW50ZXJmYWNlIGRyaXZlciB2MC4wMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgejg1MjMwX2luaXRfZHJpdmVyKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUKaW5kZXggMTY5NmU5My4uNWQ5ZTAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKIAlkcml2ZXIubwlcCiAJZncubwkJXAogCW9wLXJma2lsbC5vCVwKKwlzeXNmcy5vCQlcCiAJbmV0ZGV2Lm8JXAogCXR4Lm8JCVwKIAlyeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwppbmRleCAxNWQ5ZjUxLi5iM2NhZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAqCiAgKiBpMjQwMG1fZGV2X2luaXRhbGl6ZSgpICAgICAgIENhbGxlZCBieSBpMjQwMG1fZGV2X3N0YXJ0KCkKICAqICAgaTI0MDBtX3NldF9pbml0X2NvbmZpZygpCi0gKiAgIGkyNDAwbV9maXJtd2FyZV9jaGVjaygpCiAgKiAgIGkyNDAwbV9jbWRfZ2V0X3N0YXRlKCkKICAqIGkyNDAwbV9kZXZfc2h1dGRvd24oKSAgICAgICAgQ2FsbGVkIGJ5IGkyNDAwbV9kZXZfc3RvcCgpCiAgKiAgIGkyNDAwbS0+YnVzX3Jlc2V0KCkKQEAgLTk0Miw4ICs5NDEsOCBAQAogLyogRmlybXdhcmUgaW50ZXJmYWNlIHZlcnNpb25zIHdlIHN1cHBvcnQgKi8KIGVudW0gewogCUkyNDAwTV9IREl2X01BSk9SID0gOSwKLQlJMjQwME1fSERJdl9NQUpPUl8yID0gOCwKIAlJMjQwME1fSERJdl9NSU5PUiA9IDEsCisJSTI0MDBNX0hESXZfTUlOT1JfMiA9IDIsCiB9OwogCiAKQEAgLTk1OSw2ICs5NTgsMTAgQEAKICAqIExvbmcgZnVuY3Rpb24sIGJ1dCBxdWl0ZSBzaW1wbGU7IGZpcnN0IGNodW5rIGxhdW5jaGVzIHRoZSBjb21tYW5kCiAgKiBhbmQgZG91YmxlIGNoZWNrcyB0aGUgcmVwbHkgZm9yIHRoZSByaWdodCBUTFYuIFRoZW4gd2UgcHJvY2VzcyB0aGUKICAqIFRMViAod2hlcmUgdGhlIG1lYXQgaXMpLgorICoKKyAqIE9uY2Ugd2UgcHJvY2VzcyB0aGUgVExWIHRoYXQgZ2l2ZXMgdXMgdGhlIGZpcm13YXJlJ3MgaW50ZXJmYWNlCisgKiB2ZXJzaW9uLCB3ZSBlbmNvZGUgaXQgYW5kIHNhdmUgaXQgaW4gaTI0MDBtLT5md192ZXJzaW9uIGZvciBmdXR1cmUKKyAqIHJlZmVyZW5jZS4KICAqLwogaW50IGkyNDAwbV9maXJtd2FyZV9jaGVjayhzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCiB7CkBAIC0xMDA5LDIyICsxMDEyLDIwIEBACiAJbWlub3IgPSBsZTE2X3RvX2NwdShsNG12LT5taW5vcik7CiAJYnJhbmNoID0gbGUxNl90b19jcHUobDRtdi0+YnJhbmNoKTsKIAlyZXN1bHQgPSAtRUlOVkFMOwotCWlmIChtYWpvciAhPSBJMjQwME1fSERJdl9NQUpPUgotCSAgICAmJiBtYWpvciAhPSBJMjQwME1fSERJdl9NQUpPUl8yKSB7Ci0JCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgbWFqb3IgZncgaW50ZXJmYWNlIHZlcnNpb24gIgorCWlmIChtYWpvciAhPSBJMjQwME1fSERJdl9NQUpPUikgeworCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIG1ham9yIGZ3IHZlcnNpb24gIgogCQkJIiV1LiV1LiV1XG4iLCBtYWpvciwgbWlub3IsIGJyYW5jaCk7CiAJCWdvdG8gZXJyb3JfYmFkX21ham9yOwogCX0KLQlpZiAobWFqb3IgPT0gSTI0MDBNX0hESXZfTUFKT1JfMikKLQkJZGV2X2VycihkZXYsICJkZXByZWNhdGVkIG1ham9yIGZ3IGludGVyZmFjZSB2ZXJzaW9uICIKLQkJCSIldS4ldS4ldVxuIiwgbWFqb3IsIG1pbm9yLCBicmFuY2gpOwogCXJlc3VsdCA9IDA7Ci0JaWYgKG1pbm9yICE9IEkyNDAwTV9IREl2X01JTk9SKQotCQlkZXZfd2FybihkZXYsICJ1bnRlc3RlZCBtaW5vciBmdyBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1XG4iLAorCWlmIChtaW5vciA8IEkyNDAwTV9IREl2X01JTk9SXzIgJiYgbWlub3IgPiBJMjQwME1fSERJdl9NSU5PUikKKwkJZGV2X3dhcm4oZGV2LCAidW50ZXN0ZWQgbWlub3IgZncgdmVyc2lvbiAldS4ldS4ldVxuIiwKIAkJCSBtYWpvciwgbWlub3IsIGJyYW5jaCk7Ci1lcnJvcl9iYWRfbWFqb3I6CisJLyogWWVzLCB3ZSBpZ25vcmUgdGhlIGJyYW5jaCAtLSB3ZSBkb24ndCBoYXZlIHRvIHRyYWNrIGl0ICovCisJaTI0MDBtLT5md192ZXJzaW9uID0gbWFqb3IgPDwgMTYgfCBtaW5vcjsKIAlkZXZfaW5mbyhkZXYsICJmaXJtd2FyZSBpbnRlcmZhY2UgdmVyc2lvbiAldS4ldS4ldVxuIiwKIAkJIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKK2Vycm9yX2JhZF9tYWpvcjoKIGVycm9yX25vX3RsdjoKIGVycm9yX2NtZF9mYWlsZWQ6CiAJa2ZyZWVfc2tiKGFja19za2IpOwpAQCAtMTIyMSw2ICsxMjIyLDc3IEBACiAKIAogLyoqCisgKiBpMjQwMG1fc2V0X2lkbGVfdGltZW91dCAtIFNldCB0aGUgZGV2aWNlJ3MgaWRsZSBtb2RlIHRpbWVvdXQKKyAqCisgKiBAaTI0MDBtOiBpMjQwMG0gZGV2aWNlIGRlc2NyaXB0b3IKKyAqCisgKiBAbXNlY3M6IG1pbGxpc2Vjb25kcyBmb3IgdGhlIHRpbWVvdXQgdG8gZW50ZXIgaWRsZSBtb2RlLiBCZXR3ZWVuCisgKiAgICAgMTAwIHRvIDMwMDAwMCAoNW0pOyAwIHRvIGRpc2FibGUuIEluIGluY3JlbWVudHMgb2YgMTAwLgorICoKKyAqIEFmdGVyIHRoaXMgQG1zZWNzIG9mIHRoZSBsaW5rIGJlaW5nIGlkbGUgKG5vIGRhdGEgYmVpbmcgc2VudCBvcgorICogcmVjZWl2ZWQpLCB0aGUgZGV2aWNlIHdpbGwgbmVnb3RpYXRlIHdpdGggdGhlIGJhc2VzdGF0aW9uIGVudGVyaW5nCisgKiBpZGxlIG1vZGUgZm9yIHNhdmluZyBwb3dlci4gVGhlIGNvbm5lY3Rpb24gaXMgbWFpbnRhaW5lZCwgYnV0CisgKiBnZXR0aW5nIG91dCBvZiBpdCAoZG9uZSBpbiB0eC5jKSB3aWxsIHJlcXVpcmUgc29tZSBuZWdvdGlhdGlvbiwKKyAqIHBvc3NpYmxlIGNyeXB0byByZS1oYW5kc2hha2UgYW5kIGEgcG9zc2libGUgREhDUCByZS1sZWFzZS4KKyAqCisgKiBPbmx5IGF2YWlsYWJsZSBpZiBmd192ZXJzaW9uID49IDB4MDAwOTAwMDIuCisgKgorICogUmV0dXJuczogMCBpZiBvaywgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKi8KK2ludCBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHVuc2lnbmVkIG1zZWNzKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXN0cnVjdCBza19idWZmICphY2tfc2tiOworCXN0cnVjdCB7CisJCXN0cnVjdCBpMjQwMG1fbDNsNF9oZHIgaGRyOworCQlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IGNpdDsKKwl9ICpjbWQ7CisJY29uc3Qgc3RydWN0IGkyNDAwbV9sM2w0X2hkciAqYWNrOworCXNpemVfdCBhY2tfbGVuOworCWNoYXIgc3RyZXJyWzMyXTsKKworCXJlc3VsdCA9IC1FTk9TWVM7CisJaWYgKGkyNDAwbV9sZV92MV8zKGkyNDAwbSkpCisJCWdvdG8gZXJyb3JfYWxsb2M7CisJcmVzdWx0ID0gLUVOT01FTTsKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlnb3RvIGVycm9yX2FsbG9jOworCWNtZC0+aGRyLnR5cGUgPSBjcHVfdG9fbGUxNihJMjQwME1fTVRfR0VUX1NUQVRFKTsKKwljbWQtPmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkgLSBzaXplb2YoY21kLT5oZHIpKTsKKwljbWQtPmhkci52ZXJzaW9uID0gY3B1X3RvX2xlMTYoSTI0MDBNX0wzTDRfVkVSU0lPTik7CisKKwljbWQtPmNpdC5oZHIudHlwZSA9CisJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCk7CisJY21kLT5jaXQuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihjbWQtPmNpdC50aW1lb3V0KSk7CisJY21kLT5jaXQudGltZW91dCA9IGNwdV90b19sZTMyKG1zZWNzKTsKKworCWFja19za2IgPSBpMjQwMG1fbXNnX3RvX2RldihpMjQwMG0sIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoSVNfRVJSKGFja19za2IpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlzc3VlICdzZXQgaWRsZSB0aW1lb3V0JyBjb21tYW5kOiAiCisJCQkiJWxkXG4iLCBQVFJfRVJSKGFja19za2IpKTsKKwkJcmVzdWx0ID0gUFRSX0VSUihhY2tfc2tiKTsKKwkJZ290byBlcnJvcl9tc2dfdG9fZGV2OworCX0KKwlhY2sgPSB3aW1heF9tc2dfZGF0YV9sZW4oYWNrX3NrYiwgJmFja19sZW4pOworCXJlc3VsdCA9IGkyNDAwbV9tc2dfY2hlY2tfc3RhdHVzKGFjaywgc3RyZXJyLCBzaXplb2Yoc3RyZXJyKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICInc2V0IGlkbGUgdGltZW91dCcgKDB4JTA0eCkgY29tbWFuZCBmYWlsZWQ6ICIKKwkJCSIlZCAtICVzXG4iLCBJMjQwME1fTVRfR0VUX1NUQVRFLCByZXN1bHQsIHN0cmVycik7CisJCWdvdG8gZXJyb3JfY21kX2ZhaWxlZDsKKwl9CisJcmVzdWx0ID0gMDsKKwlrZnJlZV9za2IoYWNrX3NrYik7CitlcnJvcl9jbWRfZmFpbGVkOgorZXJyb3JfbXNnX3RvX2RldjoKKwlrZnJlZShjbWQpOworZXJyb3JfYWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKICAqIGkyNDAwbV9kZXZfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgdGhlIGRldmljZSBvbmNlIGNvbW11bmljYXRpb25zIGFyZSByZWFkeQogICoKICAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCkBAIC0xMjM4LDI2ICsxMzEwLDU1IEBACiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfcGFyYW1ldGVycyBpZGxlX3BhcmFtczsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IGlkbGVfdGltZW91dDsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZDJoX2RhdGFfZm9ybWF0IGRmOworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kbF9ob3N0X3Jlb3JkZXIgZGxocjsKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgKmFyZ3NbOV07CiAJdW5zaWduZWQgYXJnYyA9IDA7CiAKIAlkX2Zuc3RhcnQoMywgZGV2LCAiKGkyNDAwbSAlcClcbiIsIGkyNDAwbSk7Ci0JLyogVXNlbGVzcyBmb3Igbm93Li4ubWlnaHQgY2hhbmdlICovCisJLyogRGlzYWJsZSBpZGxlIG1vZGU/IChlbmFibGVkIGJ5IGRlZmF1bHQpICovCiAJaWYgKGkyNDAwbV9pZGxlX21vZGVfZGlzYWJsZWQpIHsKLQkJaWRsZV9wYXJhbXMuaGRyLnR5cGUgPQotCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTKTsKLQkJaWRsZV9wYXJhbXMuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAotCQkJc2l6ZW9mKGlkbGVfcGFyYW1zKSAtIHNpemVvZihpZGxlX3BhcmFtcy5oZHIpKTsKLQkJaWRsZV9wYXJhbXMuaWRsZV90aW1lb3V0ID0gMDsKLQkJaWRsZV9wYXJhbXMuaWRsZV9wYWdpbmdfaW50ZXJ2YWwgPSAwOwotCQlhcmdzW2FyZ2MrK10gPSAmaWRsZV9wYXJhbXMuaGRyOworCQlpZiAoaTI0MDBtX2xlX3YxXzMoaTI0MDBtKSkgeworCQkJaWRsZV9wYXJhbXMuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyk7CisJCQlpZGxlX3BhcmFtcy5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCisJCQkJc2l6ZW9mKGlkbGVfcGFyYW1zKSAtIHNpemVvZihpZGxlX3BhcmFtcy5oZHIpKTsKKwkJCWlkbGVfcGFyYW1zLmlkbGVfdGltZW91dCA9IDA7CisJCQlpZGxlX3BhcmFtcy5pZGxlX3BhZ2luZ19pbnRlcnZhbCA9IDA7CisJCQlhcmdzW2FyZ2MrK10gPSAmaWRsZV9wYXJhbXMuaGRyOworCQl9IGVsc2UgeworCQkJaWRsZV90aW1lb3V0Lmhkci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQpOworCQkJaWRsZV90aW1lb3V0Lmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoaWRsZV90aW1lb3V0KSAtIHNpemVvZihpZGxlX3RpbWVvdXQuaGRyKSk7CisJCQlpZGxlX3RpbWVvdXQudGltZW91dCA9IDA7CisJCQlhcmdzW2FyZ2MrK10gPSAmaWRsZV90aW1lb3V0LmhkcjsKKwkJfQorCX0KKwlpZiAoaTI0MDBtX2dlX3YxXzQoaTI0MDBtKSkgeworCQkvKiBFbmFibGUgZXh0ZW5kZWQgUlggZGF0YSBmb3JtYXQ/ICovCisJCWRmLmhkci50eXBlID0KKwkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0QySF9EQVRBX0ZPUk1BVCk7CisJCWRmLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCXNpemVvZihkZikgLSBzaXplb2YoZGYuaGRyKSk7CisJCWRmLmZvcm1hdCA9IDE7CisJCWFyZ3NbYXJnYysrXSA9ICZkZi5oZHI7CisKKwkJLyogRW5hYmxlIFJYIGRhdGEgcmVvcmRlcmluZz8KKwkJICogKHN3aXRjaCBmbGlwcGVkIGluIHJ4LmM6aTI0MDBtX3J4X3NldHVwKCkgYWZ0ZXIgZncgdXBsb2FkKSAqLworCQlpZiAoaTI0MDBtLT5yeF9yZW9yZGVyKSB7CisJCQlkbGhyLmhkci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19ETF9IT1NUX1JFT1JERVIpOworCQkJZGxoci5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCisJCQkJc2l6ZW9mKGRsaHIpIC0gc2l6ZW9mKGRsaHIuaGRyKSk7CisJCQlkbGhyLnJlb3JkZXIgPSAxOworCQkJYXJnc1thcmdjKytdID0gJmRsaHIuaGRyOworCQl9CiAJfQogCXJlc3VsdCA9IGkyNDAwbV9zZXRfaW5pdF9jb25maWcoaTI0MDBtLCBhcmdzLCBhcmdjKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcjsKLQlyZXN1bHQgPSBpMjQwMG1fZmlybXdhcmVfY2hlY2soaTI0MDBtKTsJLyogZncgdmVyc2lvbnMgb2s/ICovCi0JaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZXJyb3I7CiAJLyoKIAkgKiBVcGRhdGUgc3RhdGU6IEhlcmUgaXQganVzdCBjYWxscyBhIGdldCBzdGF0ZTsgcGFyc2luZyB0aGUKIAkgKiByZXN1bHQgKFN5c3RlbSBTdGF0ZSBUTFYgYW5kIFJGIFN0YXR1cyBUTFYgW2RvbmUgaW4gdGhlIHJ4CkBAIC0xMjY2LDYgKzEzNjcsOCBAQAogCSAqLwogCXJlc3VsdCA9IGkyNDAwbV9jbWRfZ2V0X3N0YXRlKGkyNDAwbSk7CiBlcnJvcjoKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNlOiAlZFxuIiwgcmVzdWx0KTsKIAlkX2ZuZW5kKDMsIGRldiwgIihpMjQwMG0gJXApID0gJWRcbiIsIGkyNDAwbSwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oCmluZGV4IDMxODNiYWEuLjQ4ZmJmYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kZWJ1Zy1sZXZlbHMuaAorKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmgKQEAgLTM4LDYgKzM4LDcgQEAKIAlEX1NVQk1PRFVMRV9ERUNMQVJFKG5ldGRldiksCiAJRF9TVUJNT0RVTEVfREVDTEFSRShyZmtpbGwpLAogCURfU1VCTU9EVUxFX0RFQ0xBUkUocngpLAorCURfU1VCTU9EVUxFX0RFQ0xBUkUoc3lzZnMpLAogCURfU1VCTU9EVUxFX0RFQ0xBUkUodHgpLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCmluZGV4IGU4MGEwYjYuLjA3YTU0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICAqICAgICAgIGkyNDAwbV9kZXZfYm9vdHN0cmFwKCkKICAqICAgICAgIGkyNDAwbV90eF9zZXR1cCgpCiAgKiAgICAgICBpMjQwMG0tPmJ1c19kZXZfc3RhcnQoKQorICogICAgICAgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKCkKICAqICAgICAgIGkyNDAwbV9jaGVja19tYWNfYWRkcigpCiAgKiAgIHdpbWF4X2Rldl9hZGQoKQogICoKQEAgLTc1LDYgKzc2LDExIEBACiAJCSAiSWYgdHJ1ZSwgdGhlIGRldmljZSB3aWxsIG5vdCBlbmFibGUgaWRsZSBtb2RlIG5lZ290aWF0aW9uICIKIAkJICJ3aXRoIHRoZSBiYXNlIHN0YXRpb24gKHdoZW4gY29ubmVjdGVkKSB0byBzYXZlIHBvd2VyLiIpOwogCitpbnQgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQ7CS8qIDAgKHJ4IHJlb3JkZXIgZW5hYmxlZCkgYnkgZGVmYXVsdCAqLworbW9kdWxlX3BhcmFtX25hbWVkKHJ4X3Jlb3JkZXJfZGlzYWJsZWQsIGkyNDAwbV9yeF9yZW9yZGVyX2Rpc2FibGVkLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyeF9yZW9yZGVyX2Rpc2FibGVkLAorCQkgIklmIHRydWUsIFJYIHJlb3JkZXJpbmcgd2lsbCBiZSBkaXNhYmxlZC4iKTsKKwogLyoqCiAgKiBpMjQwMG1fcXVldWVfd29yayAtIHNjaGVkdWxlIHdvcmsgb24gYSBpMjQwMG0ncyBxdWV1ZQogICoKQEAgLTM5NSw2ICs0MDEsOSBAQAogCXJlc3VsdCA9IGkyNDAwbV90eF9zZXR1cChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX3R4X3NldHVwOworCXJlc3VsdCA9IGkyNDAwbV9yeF9zZXR1cChpMjQwMG0pOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX3J4X3NldHVwOwogCXJlc3VsdCA9IGkyNDAwbS0+YnVzX2Rldl9zdGFydChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX2J1c19kZXZfc3RhcnQ7CkBAIC00MDQsNiArNDEzLDkgQEAKIAkJZGV2X2VycihkZXYsICJjYW5ub3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCWdvdG8gZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZTsKIAl9CisJcmVzdWx0ID0gaTI0MDBtX2Zpcm13YXJlX2NoZWNrKGkyNDAwbSk7CS8qIGZ3IHZlcnNpb25zIG9rPyAqLworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGVycm9yX2Z3X2NoZWNrOwogCS8qIEF0IHRoaXMgcG9pbnQgaXMgb2sgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgZGV2aWNlICovCiAJcmVzdWx0ID0gaTI0MDBtX2NoZWNrX21hY19hZGRyKGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCkBAIC00MjEsMTAgKzQzMywxMyBAQAogCiBlcnJvcl9kZXZfaW5pdGlhbGl6ZToKIGVycm9yX2NoZWNrX21hY19hZGRyOgorZXJyb3JfZndfY2hlY2s6CiAJZGVzdHJveV93b3JrcXVldWUoaTI0MDBtLT53b3JrX3F1ZXVlKTsKIGVycm9yX2NyZWF0ZV93b3JrcXVldWU6CiAJaTI0MDBtLT5idXNfZGV2X3N0b3AoaTI0MDBtKTsKIGVycm9yX2J1c19kZXZfc3RhcnQ6CisJaTI0MDBtX3J4X3JlbGVhc2UoaTI0MDBtKTsKK2Vycm9yX3J4X3NldHVwOgogCWkyNDAwbV90eF9yZWxlYXNlKGkyNDAwbSk7CiBlcnJvcl90eF9zZXR1cDoKIGVycm9yX2Jvb3RzdHJhcDoKQEAgLTQ3Miw2ICs0ODcsNyBAQAogCWkyNDAwbS0+cmVhZHkgPSAwOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGkyNDAwbS0+d29ya19xdWV1ZSk7CiAJaTI0MDBtLT5idXNfZGV2X3N0b3AoaTI0MDBtKTsKKwlpMjQwMG1fcnhfcmVsZWFzZShpMjQwMG0pOwogCWkyNDAwbV90eF9yZWxlYXNlKGkyNDAwbSk7CiAJd2ltYXhfc3RhdGVfY2hhbmdlKHdpbWF4X2RldiwgV0lNQVhfU1RfRE9XTik7CiAJZF9mbmVuZCgzLCBkZXYsICIoaTI0MDBtICVwKSA9IDBcbiIsIGkyNDAwbSk7CkBAIC02MTMsNyArNjI5LDcgQEAKIAlkX2Zuc3RhcnQoMywgZGV2LCAiKGkyNDAwbSAlcClcbiIsIGkyNDAwbSk7CiAKIAlzbnByaW50Zih3aW1heF9kZXYtPm5hbWUsIHNpemVvZih3aW1heF9kZXYtPm5hbWUpLAotCQkgImkyNDAwbS0lczolcyIsIGRldi0+YnVzLT5uYW1lLCBkZXYtPmJ1c19pZCk7CisJCSAiaTI0MDBtLSVzOiVzIiwgZGV2LT5idXMtPm5hbWUsIGRldl9uYW1lKGRldikpOwogCiAJaTI0MDBtLT5ibV9jbWRfYnVmID0ga3phbGxvYyhJMjQwME1fQk1fQ01EX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoaTI0MDBtLT5ibV9jbWRfYnVmID09IE5VTEwpIHsKQEAgLTY1Nyw2ICs2NzMsMTEgQEAKIAl3aW1heF9zdGF0ZV9jaGFuZ2Uod2ltYXhfZGV2LCBXSU1BWF9TVF9VTklOSVRJQUxJWkVEKTsKIAogCS8qIE5vdyBzZXR1cCBhbGwgdGhhdCByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgbmV0IGFuZCB3aW1heCBkZXZpY2UuICovCisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXRfZGV2LT5kZXYua29iaiwgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3Qgc2V0dXAgaTI0MDBtJ3Mgc3lzZnM6ICVkXG4iLCByZXN1bHQpOworCQlnb3RvIGVycm9yX3N5c2ZzX3NldHVwOworCX0KIAlyZXN1bHQgPSBpMjQwMG1fZGVidWdmc19hZGQoaTI0MDBtKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBpMjQwMG0ncyBkZWJ1Z2ZzOiAlZFxuIiwgcmVzdWx0KTsKQEAgLTY2Niw2ICs2ODcsOSBAQAogCXJldHVybiByZXN1bHQ7CiAKIGVycm9yX2RlYnVnZnNfc2V0dXA6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2LT5kZXYua29iaiwKKwkJCSAgICZpMjQwMG1fZGV2X2F0dHJfZ3JvdXApOworZXJyb3Jfc3lzZnNfc2V0dXA6CiAJd2ltYXhfZGV2X3JtKCZpMjQwMG0tPndpbWF4X2Rldik7CiBlcnJvcl93aW1heF9kZXZfYWRkOgogCWkyNDAwbV9kZXZfc3RvcChpMjQwMG0pOwpAQCAtNjk3LDYgKzcyMSw4IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2KTsKIAogCWkyNDAwbV9kZWJ1Z2ZzX3JtKGkyNDAwbSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2LT5kZXYua29iaiwKKwkJCSAgICZpMjQwMG1fZGV2X2F0dHJfZ3JvdXApOwogCXdpbWF4X2Rldl9ybSgmaTI0MDBtLT53aW1heF9kZXYpOwogCWkyNDAwbV9kZXZfc3RvcChpMjQwMG0pOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwppbmRleCAxZDgyNzFmLi42NzVjNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYwpAQCAtMTQwLDEwICsxNDAsMTAgQEAKIAogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9BQ0tfQkFSS0VSWzRdID0gewotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpCisJY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9BQ0tfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCisJY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpCiB9OwogCiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCQlpZiAob2Zmc2V0ICsgc2VjdGlvbl9zaXplID4gYmNmX2xlbikgewogCQkJZGV2X2VycihkZXYsICJmdyAlczogYmFkIHNlY3Rpb24gIyV6dSwgIgogCQkJCSJlbmQgKEAlenUpIGJleW9uZCBFT0YgKEAlenUpXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHNlY3Rpb24sCisJCQkJaTI0MDBtLT5md19uYW1lLCBzZWN0aW9uLAogCQkJCW9mZnNldCArIHNlY3Rpb25fc2l6ZSwgIGJjZl9sZW4pOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3Jfc2VjdGlvbl9iZXlvbmRfZW9mOwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAJCQkJICAgICZhY2ssIHNpemVvZihhY2spLCBJMjQwME1fQk1fQ01EX1JBVyk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBzZWN0aW9uICMlenUgKEAlenUgJXp1IEIpICIKLQkJCQkiZmFpbGVkICVkXG4iLCBpMjQwMG0tPmJ1c19md19uYW1lLCBzZWN0aW9uLAorCQkJCSJmYWlsZWQgJWRcbiIsIGkyNDAwbS0+ZndfbmFtZSwgc2VjdGlvbiwKIAkJCQlvZmZzZXQsIHNpemVvZigqYmgpICsgZGF0YV9zaXplLCAoaW50KSByZXQpOwogCQkJZ290byBlcnJvcl9zZW5kOwogCQl9CkBAIC03NzEsOCArNzcxLDggQEAKIGludCBpMjQwMG1fZG5sb2FkX2luaXRfbm9uc2lnbmVkKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKIHsKICNkZWZpbmUgUE9LRShhLCBkKSB7CQkJCQlcCi0JLmFkZHJlc3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKGEpLAkJXAotCS5kYXRhID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihkKQkJXAorCS5hZGRyZXNzID0gY3B1X3RvX2xlMzIoYSksCQlcCisJLmRhdGEgPSBjcHVfdG9fbGUzMihkKQkJXAogfQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCQlfX2xlMzIgYWRkcmVzczsKQEAgLTg3NCw3ICs4NzQsNyBAQAogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IG5vbi1zaWduZWQgZG93bmxvYWQgIgogCQkJCSJpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJlc3VsdCk7CisJCQkJaTI0MDBtLT5md19uYW1lLCByZXN1bHQpOwogCX0gZWxzZSBpZiAoaTI0MDBtLT5zYm9vdCA9PSAwCiAJCSAmJiAobW9kdWxlX2lkICYgSTI0MDBNX0JDRl9NT0RfSURfUE9LRVMpKSB7CiAJCS8qIG5vbi1zaWduZWQgYm9vdCBwcm9jZXNzIHdpdGggcG9rZXMsIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTg4Niw3ICs4ODYsNyBAQAogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNpZ25lZCBib290IGRvd25sb2FkICIKIAkJCQkiaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXN1bHQpOworCQkJCWkyNDAwbS0+ZndfbmFtZSwgcmVzdWx0KTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkxNSw3ICs5MTUsNyBAQAogCWlmIChiY2Zfc2l6ZSA8IHNpemVvZigqYmNmKSkgewkvKiBiaWcgZW5vdWdoIGhlYWRlcj8gKi8KIAkJZGV2X2VycihkZXYsICJmaXJtd2FyZSAlcyB0b28gc2hvcnQ6ICIKIAkJCSIlenUgQiB2cyAlenUgKGF0IGxlYXN0KSBleHBlY3RlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIGJjZl9zaXplLCBzaXplb2YoKmJjZikpOworCQkJaTI0MDBtLT5md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZW9mKCpiY2YpKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTkzMSw3ICs5MzEsNyBAQAogCWlmIChiY2Zfc2l6ZSAhPSBzaXplKSB7CQkvKiBhbm5veWluZ2x5IHBhcmFub2lkICovCiAJCWRldl9lcnIoZGV2LCAiZmlybXdhcmUgJXM6IGJhZCBzaXplLCBnb3QgIgogCQkJIiV6dSBCIHZzICV1IGV4cGVjdGVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgYmNmX3NpemUsIHNpemUpOworCQkJaTI0MDBtLT5md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC05NDMsNyArOTQzLDcgQEAKIAogCWlmIChtb2R1bGVfdHlwZSAhPSA2KSB7CQkvKiBidWlsdCBmb3IgdGhlIHJpZ2h0IGhhcmR3YXJlPyAqLwogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlczogdW5leHBlY3RlZCBtb2R1bGUgdHlwZSAweCV4OyAiCi0JCQkiYWJvcnRpbmdcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIG1vZHVsZV90eXBlKTsKKwkJCSJhYm9ydGluZ1xuIiwgaTI0MDBtLT5md19uYW1lLCBtb2R1bGVfdHlwZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC05NTEsMTAgKzk1MSwxMCBAQAogCXJlc3VsdCA9IDA7CiAJaWYgKG1vZHVsZV92ZW5kb3IgIT0gMHg4MDg2KQogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlcz8gdW5leHBlY3RlZCB2ZW5kb3IgMHglMDR4XG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgbW9kdWxlX3ZlbmRvcik7CisJCQlpMjQwMG0tPmZ3X25hbWUsIG1vZHVsZV92ZW5kb3IpOwogCWlmIChkYXRlIDwgMHgyMDA4MDMwMCkKIAkJZGV2X2VycihkZXYsICJiYWQgZncgJXM/IGJ1aWxkIGRhdGUgdG9vIG9sZCAlMDh4XG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgZGF0ZSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGRhdGUpOwogZXJyb3I6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBACiAJCWdvdG8gZXJyb3JfZGV2X3JlYm9vdGVkOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiZncgJXM6IGRvd25sb2FkIGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOworCQkJaTI0MDBtLT5md19uYW1lLCByZXQpOwogCQlnb3RvIGVycm9yX2RubG9hZF9iY2Y7CiAJfQogCkBAIC0xMDI2LDEyICsxMDI2LDEyIEBACiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJmdyAlczogIgogCQkJImRvd25sb2FkIGZpbmFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgcmV0KTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgcmV0KTsKIAkJZ290byBlcnJvcl9kbmxvYWRfZmluYWxpemU7CiAJfQogCiAJZF9wcmludGYoMiwgZGV2LCAiZncgJXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXG4iLAotCQkgaTI0MDBtLT5idXNfZndfbmFtZSk7CisJCSBpMjQwMG0tPmZ3X25hbWUpOwogCWkyNDAwbS0+Ym9vdF9tb2RlID0gMDsKIGVycm9yX2RubG9hZF9maW5hbGl6ZToKIGVycm9yX2RubG9hZF9iY2Y6CkBAIC0xMDY3LDI4ICsxMDY3LDQxIEBACiAgKi8KIGludCBpMjQwMG1fZGV2X2Jvb3RzdHJhcChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIGVudW0gaTI0MDBtX2JyaSBmbGFncykKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgaXRyID0gMDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX2JjZl9oZHIgKmJjZjsJLyogRmlybXdhcmUgZGF0YSAqLworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CiAKIAlkX2Zuc3RhcnQoNSwgZGV2LCAiKGkyNDAwbSAlcClcbiIsIGkyNDAwbSk7Ci0JLyogTG9hZCBmaXJtd2FyZSBmaWxlcyB0byBtZW1vcnkuICovCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImZ3ICVzOiByZXF1ZXN0IGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOwotCQlnb3RvIGVycm9yX2Z3X3JlcTsKLQl9Ci0JYmNmID0gKHZvaWQgKikgZnctPmRhdGE7CiAKKwkvKiBMb2FkIGZpcm13YXJlIGZpbGVzIHRvIG1lbW9yeS4gKi8KKwlpdHIgPSAwOworCXdoaWxlKDEpIHsKKwkJZndfbmFtZSA9IGkyNDAwbS0+YnVzX2Z3X25hbWVzW2l0cl07CisJCWlmIChmd19uYW1lID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGZpbmQgYSB1c2FibGUgZmlybXdhcmUgaW1hZ2VcbiIpOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gZXJyb3Jfbm9fZnc7CisJCX0KKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsIGRldik7CisJCWlmIChyZXQgPT0gMCkKKwkJCWJyZWFrOwkJLyogZ290IGl0ICovCisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2VycihkZXYsICJmdyAlczogY2Fubm90IGxvYWQgZmlsZTogJWRcbiIsCisJCQkJZndfbmFtZSwgcmV0KTsKKwkJaXRyKys7CisJfQorCisJYmNmID0gKHZvaWQgKikgZnctPmRhdGE7CisJaTI0MDBtLT5md19uYW1lID0gZndfbmFtZTsKIAlyZXQgPSBpMjQwMG1fZndfY2hlY2soaTI0MDBtLCBiY2YsIGZ3LT5zaXplKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9md19iYWQ7CiAJcmV0ID0gaTI0MDBtX2Z3X2RubG9hZChpMjQwMG0sIGJjZiwgZnctPnNpemUsIGZsYWdzKTsKIGVycm9yX2Z3X2JhZDoKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLWVycm9yX2Z3X3JlcToKK2Vycm9yX25vX2Z3OgogCWRfZm5lbmQoNSwgZGV2LCAiKGkyNDAwbSAlcCkgPSAlZFxuIiwgaTI0MDBtLCByZXQpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKaW5kZXggM2I5ZDI3ZWEuLjNhZTJkZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAorKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKQEAgLTE1NiwxMCArMTU2LDYgQEAKIH07CiAKIAotLyogRmlybXdhcmUgdmVyc2lvbiB3ZSByZXF1ZXN0IHdoZW4gcHVsbGluZyB0aGUgZncgaW1hZ2UgZmlsZSAqLwotI2RlZmluZSBJMjQwME1fRldfVkVSU0lPTiAiMS40IgotCi0KIC8qKgogICogaTI0MDBtX3Jlc2V0X3R5cGUgLSBtZXRob2RzIHRvIHJlc2V0IGEgZGV2aWNlCiAgKgpAQCAtMTc4LDYgKzE3NCw3IEBACiB9OwogCiBzdHJ1Y3QgaTI0MDBtX3Jlc2V0X2N0eDsKK3N0cnVjdCBpMjQwMG1fcm9xOwogCiAvKioKICAqIHN0cnVjdCBpMjQwMG0gLSBkZXNjcmlwdG9yIGZvciBhbiBJbnRlbCAyNDAwbQpAQCAtMjQyLDEwICsyMzksMTQgQEAKICAqICAgICBUaGUgY2FsbGVyIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0aGUgcmVzcG9uc2UgaXMgYQogICogICAgIGJhcmtlciB0aGF0IGluZGljYXRlcyB0aGUgZGV2aWNlIGdvaW5nIGludG8gcmVzZXQgbW9kZS4KICAqCi0gKiBAYnVzX2Z3X25hbWU6IFtmaWxsXSBuYW1lIG9mIHRoZSBmaXJtd2FyZSBpbWFnZSAoaW4gbW9zdCBjYXNlcywKLSAqICAgICB0aGV5IGFyZSBhbGwgdGhlIHNhbWUgZm9yIGEgc2luZ2xlIHJlbGVhc2UsIGV4Y2VwdCB0aGF0IHRoZXkKLSAqICAgICBoYXZlIHRoZSB0eXBlIG9mIHRoZSBidXMgZW1iZWRkZWQgaW4gdGhlIG5hbWUgKGVnOgotICogICAgIGkyNDAwbS1mdy1YLVZFUlNJT04uc2JjZiwgd2hlcmUgWCBpcyB0aGUgYnVzIG5hbWUpLgorICogQGJ1c19md19uYW1lczogW2ZpbGxdIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IHdpdGggdGhlIG5hbWVzIG9mIHRoZQorICogICAgIGZpcm13YXJlIGltYWdlcyB0byB0cnkgbG9hZGluZy4gVGhpcyBpcyBtYWRlIGEgbGlzdCBzbyB3ZSBjYW4KKyAqICAgICBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb2YgZmlybXdhcmUgcmVsZWFzZXMgKGVnOiBpZiB3ZQorICogICAgIGNhbid0IGZpbmQgdGhlIGRlZmF1bHQgdjEuNCwgd2UgdHJ5IHYxLjMpLiBJbiBnZW5lcmFsLCB0aGUgbmFtZQorICogICAgIHNob3VsZCBiZSBpMjQwMG0tZnctWC1WRVJTSU9OLnNiY2YsIHdoZXJlIFggaXMgdGhlIGJ1cyBuYW1lLgorICogICAgIFRoZSBsaXN0IGlzIHRyaWVkIGluIG9yZGVyIGFuZCB0aGUgZmlyc3Qgb25lIHRoYXQgbG9hZHMgaXMKKyAqICAgICB1c2VkLiBUaGUgZncgbG9hZGVyIHdpbGwgc2V0IGkyNDAwbS0+ZndfbmFtZSB0byBwb2ludCB0byB0aGUKKyAqICAgICBhY3RpdmUgZmlybXdhcmUgaW1hZ2UuCiAgKgogICogQGJ1c19ibV9tYWNfYWRkcl9pbXBhaXJlZDogW2ZpbGxdIFNldCB0byB0cnVlIGlmIHRoZSBkZXZpY2UncyBNQUMKICAqICAgICBhZGRyZXNzIHByb3ZpZGVkIGluIGJvb3QgbW9kZSBpcyBraW5kIG9mIGJyb2tlbiBhbmQgbmVlZHMgdG8KQEAgLTI1Nyw2ICsyNTgsOSBAQAogICogICAgIGZvcmNlIHRoaXMgdG8gYmUgdGhlIGZpcnN0IGZpZWxkIHNvIHRoYXQgd2UgY2FuIGdldCBmcm9tCiAgKiAgICAgbmV0ZGV2X3ByaXYoKSB0aGUgcmlnaHQgcG9pbnRlci4KICAqCisgKiBAcnhfcmVvcmRlcjogMSBpZiBSWCByZW9yZGVyaW5nIGlzIGVuYWJsZWQ7IHRoaXMgY2FuIG9ubHkgYmUKKyAqICAgICBzZXQgYXQgcHJvYmUgdGltZS4KKyAqCiAgKiBAc3RhdGU6IGRldmljZSdzIHN0YXRlIChhcyByZXBvcnRlZCBieSBpdCkKICAqCiAgKiBAc3RhdGVfd3E6IHdhaXRxdWV1ZSB0aGF0IGlzIHdva2VuIHVwIHdoZW5ldmVyIHRoZSBzdGF0ZSBjaGFuZ2VzCkBAIC0zMTMsNiArMzE3LDEyIEBACiAgKgogICogQHJ4X3NpemVfbWF4OiBidWdnZXN0IFJYIG1lc3NhZ2UgcmVjZWl2ZWQuCiAgKgorICogQHJ4X3JvcTogUlggUmVPcmRlciBxdWV1ZXMuIChmdyA+PSB2MS40KSBXaGVuIHBhY2tldHMgYXJlIHJlY2VpdmVkCisgKiAgICAgb3V0IG9mIG9yZGVyLCB0aGUgZGV2aWNlIHdpbGwgYXNrIHRoZSBkcml2ZXIgdG8gaG9sZCBjZXJ0YWluCisgKiAgICAgcGFja2V0cyB1bnRpbCB0aGUgb25lcyB0aGF0IGFyZSByZWNlaXZlZCBvdXQgb2Ygb3JkZXIgY2FuIGJlCisgKiAgICAgZGVsaXZlcmVkLiBUaGVuIHRoZSBkcml2ZXIgY2FuIHJlbGVhc2UgdGhlbSB0byB0aGUgaG9zdC4gU2VlCisgKiAgICAgZHJpdmVycy9uZXQvaTI0MDBtL3J4LmMgZm9yIGRldGFpbHMuCisgKgogICogQGluaXRfbXV0ZXg6IE11dGV4IHVzZWQgZm9yIHNlcmlhbGl6aW5nIHRoZSBkZXZpY2UgYnJpbmd1cAogICogICAgIHNlcXVlbmNlOyB0aGlzIHdheSBpZiB0aGUgZGV2aWNlIHJlYm9vdHMgaW4gdGhlIG1pZGRsZSwgd2UKICAqICAgICBkb24ndCB0cnkgdG8gZG8gYSBicmluZ3VwIGFnYWluIHdoaWxlIHdlIGFyZSB0ZWFyaW5nIGRvd24gdGhlCkBAIC0zNjQsNiArMzc0LDExIEBACiAgKiAgICAgVGhlc2UgaGF2ZSB0byBiZSBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSwgYSBjaGlsZCBvZgogICogICAgICh3aW1heF9kZXYtPmRlYnVnZnNfZGVudHJ5KSBzbyB0aGV5IGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlCiAgKiAgICAgbW9kdWxlIHVubG9hZHMsIGFzIHdlIGRvbid0IGtlZXAgZWFjaCBkZW50cnkuCisgKgorICogQGZ3X25hbWU6IG5hbWUgb2YgdGhlIGZpcm13YXJlIGltYWdlIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQuCisgKgorICogQGZ3X3ZlcnNpb246IHZlcnNpb24gb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSwgTWFqb3IubWlub3IsCisgKiAgICAgZW5jb2RlZCBpbiB0aGUgaGlnaCB3b3JkIGFuZCBsb3cgd29yZCAobWFqb3IgPDwgMTYgfCBtaW5vcikuCiAgKi8KIHN0cnVjdCBpMjQwMG0gewogCXN0cnVjdCB3aW1heF9kZXYgd2ltYXhfZGV2OwkvKiBGSVJTVCEgU2VlIGRvYyAqLwpAQCAtMzcyLDYgKzM4Nyw3IEBACiAJdW5zaWduZWQgYm9vdF9tb2RlOjE7CQkvKiBpcyB0aGUgZGV2aWNlIGluIGJvb3QgbW9kZT8gKi8KIAl1bnNpZ25lZCBzYm9vdDoxOwkJLyogc2lnbmVkIG9yIHVuc2lnbmVkIGZ3IGJvb3QgKi8KIAl1bnNpZ25lZCByZWFkeToxOwkJLyogYWxsIHByb2Jpbmcgc3RlcHMgZG9uZSAqLworCXVuc2lnbmVkIHJ4X3Jlb3JkZXI6MTsJCS8qIFJYIHJlb3JkZXIgaXMgZW5hYmxlZCAqLwogCXU4IHRyYWNlX21zZ19mcm9tX3VzZXI7CQkvKiBlY2hvIHJ4IG1zZ3MgdG8gJ3RyYWNlJyBwaXBlICovCiAJCQkJCS8qIHR5cGVkIHU4IHNvIGRlYnVnZnMvdTggY2FuIHR3ZWFrICovCiAJZW51bSBpMjQwMG1fc3lzdGVtX3N0YXRlIHN0YXRlOwpAQCAtMzg4LDcgKzQwNCw3IEBACiAJCQkJICAgc2l6ZV90LCBpbnQgZmxhZ3MpOwogCXNzaXplX3QgKCpidXNfYm1fd2FpdF9mb3JfYWNrKShzdHJ1Y3QgaTI0MDBtICosCiAJCQkJICAgICAgIHN0cnVjdCBpMjQwMG1fYm9vdHJvbV9oZWFkZXIgKiwgc2l6ZV90KTsKLQljb25zdCBjaGFyICpidXNfZndfbmFtZTsKKwljb25zdCBjaGFyICoqYnVzX2Z3X25hbWVzOwogCXVuc2lnbmVkIGJ1c19ibV9tYWNfYWRkcl9pbXBhaXJlZDoxOwogCiAJc3BpbmxvY2tfdCB0eF9sb2NrOwkJLyogcHJvdGVjdCBUWCBzdGF0ZSAqLwpAQCAtNDAwLDEwICs0MTYsMTEgQEAKIAl1bnNpZ25lZCB0eF9wbF9udW0sIHR4X3BsX21heCwgdHhfcGxfbWluLAogCQl0eF9udW0sIHR4X3NpemVfYWNjLCB0eF9zaXplX21pbiwgdHhfc2l6ZV9tYXg7CiAKLQkvKiBSWCBzdGF0cyAqLworCS8qIFJYIHN0dWZmICovCiAJc3BpbmxvY2tfdCByeF9sb2NrOwkJLyogcHJvdGVjdCBSWCBzdGF0ZSAqLwogCXVuc2lnbmVkIHJ4X3BsX251bSwgcnhfcGxfbWF4LCByeF9wbF9taW4sCiAJCXJ4X251bSwgcnhfc2l6ZV9hY2MsIHJ4X3NpemVfbWluLCByeF9zaXplX21heDsKKwlzdHJ1Y3QgaTI0MDBtX3JvcSAqcnhfcm9xOwkvKiBub3QgdW5kZXIgcnhfbG9jayEgKi8KIAogCXN0cnVjdCBtdXRleCBtc2dfbXV0ZXg7CQkvKiBzZXJpYWxpemUgY29tbWFuZCBleGVjdXRpb24gKi8KIAlzdHJ1Y3QgY29tcGxldGlvbiBtc2dfY29tcGxldGlvbjsKQEAgLTQyMSw2ICs0MzgsOCBAQAogCXN0cnVjdCBza19idWZmICp3YWtlX3R4X3NrYjsKIAogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5OworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CQkvKiBuYW1lIG9mIHRoZSBjdXJyZW50IGZpcm13YXJlIGltYWdlICovCisJdW5zaWduZWQgbG9uZyBmd192ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgKi8KIH07CiAKIApAQCAtNDM1LDYgKzQ1NCw3IEBACiAJd2ltYXhfZGV2X2luaXQoJmkyNDAwbS0+d2ltYXhfZGV2KTsKIAogCWkyNDAwbS0+Ym9vdF9tb2RlID0gMTsKKwlpMjQwMG0tPnJ4X3Jlb3JkZXIgPSAxOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmkyNDAwbS0+c3RhdGVfd3EpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmkyNDAwbS0+dHhfbG9jayk7CkBAIC01NzgsMTIgKzU5OCwxOSBAQAogICogRHJpdmVyIC8gZGV2aWNlIHNldHVwIGFuZCBpbnRlcm5hbCBmdW5jdGlvbnMKICAqLwogZXh0ZXJuIHZvaWQgaTI0MDBtX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CitleHRlcm4gaW50IGkyNDAwbV9zeXNmc19zZXR1cChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqKTsKK2V4dGVybiB2b2lkIGkyNDAwbV9zeXNmc19yZWxlYXNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOwogZXh0ZXJuIGludCBpMjQwMG1fdHhfc2V0dXAoc3RydWN0IGkyNDAwbSAqKTsKIGV4dGVybiB2b2lkIGkyNDAwbV93YWtlX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgaTI0MDBtX3R4X3JlbGVhc2Uoc3RydWN0IGkyNDAwbSAqKTsKIAorZXh0ZXJuIGludCBpMjQwMG1fcnhfc2V0dXAoc3RydWN0IGkyNDAwbSAqKTsKK2V4dGVybiB2b2lkIGkyNDAwbV9yeF9yZWxlYXNlKHN0cnVjdCBpMjQwMG0gKik7CisKIGV4dGVybiB2b2lkIGkyNDAwbV9uZXRfcngoc3RydWN0IGkyNDAwbSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCB1bnNpZ25lZCwKIAkJCSAgY29uc3Qgdm9pZCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgaTI0MDBtX25ldF9lcngoc3RydWN0IGkyNDAwbSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJICAgZW51bSBpMjQwMG1fY3MpOwogZW51bSBpMjQwMG1fcHQ7CiBleHRlcm4gaW50IGkyNDAwbV90eChzdHJ1Y3QgaTI0MDBtICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBlbnVtIGkyNDAwbV9wdCk7CiAKQEAgLTY2NCwxNyArNjkxLDE3IEBACiBleHRlcm4gdm9pZCBpMjQwMG1fdHhfbXNnX3NlbnQoc3RydWN0IGkyNDAwbSAqKTsKIAogc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fTkJPT1RfQkFSS0VSWzRdID0gewotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX05CT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX05CT09UX0JBUktFUikKKwljcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKQogfTsKIAogc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fU0JPT1RfQkFSS0VSWzRdID0gewotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1NCT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1NCT09UX0JBUktFUikKKwljcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKQogfTsKIAogCkBAIC03MjEsNiArNzQ4LDcgQEAKIGV4dGVybiBpbnQgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBpMjQwMG0gKik7CiBleHRlcm4gaW50IGkyNDAwbV9zZXRfaW5pdF9jb25maWcoc3RydWN0IGkyNDAwbSAqLAogCQkJCSAgY29uc3Qgc3RydWN0IGkyNDAwbV90bHZfaGRyICoqLCBzaXplX3QpOworZXh0ZXJuIGludCBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgaTI0MDBtICosIHVuc2lnbmVkKTsKIAogc3RhdGljIGlubGluZQogc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp1c2JfZ2V0X2VwZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIGludCBlcCkKQEAgLTczMyw2ICs3NjEsMzIgQEAKIGV4dGVybiB2b2lkIGkyNDAwbV9yZXBvcnRfdGx2X3JmX3N3aXRjaGVzX3N0YXR1cygKIAlzdHJ1Y3QgaTI0MDBtICosIGNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X3JmX3N3aXRjaGVzX3N0YXR1cyAqKTsKIAorLyoKKyAqIEhlbHBlcnMgZm9yIGZpcm13YXJlIGJhY2t3YXJkcyBjb21wYWJpbGl0eQorICoKKyAqIEFzIHdlIGFpbSB0byBzdXBwb3J0IGF0IGxlYXN0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIHRoYXQgd2FzCisgKiByZWxlYXNlZCB3aXRoIHRoZSBwcmV2aW91cyBrZXJuZWwvZHJpdmVyIHJlbGVhc2UsIHNvbWUgY29kZSB3aWxsIGJlCisgKiBjb25kaXRpb25hbGx5IGV4ZWN1dGVkIGRlcGVuZGluZyBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbi4gT24gZWFjaAorICogcmVsZWFzZSwgdGhlIGNvZGUgdG8gc3VwcG9ydCBmdyByZWxlYXNlcyBwYXN0IHRoZSBsYXN0IHR3byBvbmVzCisgKiB3aWxsIGJlIHB1cmdlZC4KKyAqCisgKiBCeSBtYWtpbmcgaXQgZGVwZW5kIG9uIHRoaXMgbWFjcm9zLCBpdCBpcyBlYXNpZXIgdG8ga2VlcCBpdCBhIHRhYgorICogb24gd2hhdCBoYXMgdG8gZ28gYW5kIHdoYXQgbm90LgorICovCitzdGF0aWMgaW5saW5lCit1bnNpZ25lZCBpMjQwMG1fbGVfdjFfMyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCit7CisJLyogcnVubmluZyBmdyBpcyBsb3dlciBvciB2MS4zICovCisJcmV0dXJuIGkyNDAwbS0+ZndfdmVyc2lvbiA8PSAweDAwMDkwMDAxOworfQorCitzdGF0aWMgaW5saW5lCit1bnNpZ25lZCBpMjQwMG1fZ2VfdjFfNChzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCit7CisJLyogcnVubmluZyBmdyBpcyBoaWdoZXIgb3IgdjEuNCAqLworCXJldHVybiBpMjQwMG0tPmZ3X3ZlcnNpb24gPj0gMHgwMDA5MDAwMjsKK30KKwogCiAvKgogICogRG8gYSBtaWxsaXNlY29uZC1zbGVlcCBmb3IgYWxsb3dpbmcgd2lyZXNoYXJrIHRvIGR1bXAgYWxsIHRoZSBkYXRhCkBAIC03NTAsNiArODA0LDcgQEAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiAKIGV4dGVybiBpbnQgaTI0MDBtX2lkbGVfbW9kZV9kaXNhYmxlZDsKK2V4dGVybiBpbnQgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQ7CiAKIAogI2VuZGlmIC8qICNpZm5kZWYgX19JMjQwME1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKaW5kZXggNjNmZTcwOC4uNmIxZmU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwpAQCAtMjgsMTMgKzI4LDEyIEBACiAgKiBzcGFjZSBhbmQgZnJvbSB0aGUgb3RoZXIgc2lkZS4gVGhlIHdvcmxkIGlzIChzYWRseSkgY29uZmlndXJlZCB0bwogICogdGFrZSBpbiBvbmx5IEV0aGVybmV0IGRldmljZXMuLi4KICAqCi0gKiBCZWNhdXNlIG9mIHRoaXMsIGN1cnJlbnRseSB0aGVyZSBpcyBhbiBjb3B5LWVhY2gtcnhlZC1wYWNrZXQKLSAqIG92ZXJoZWFkIG9uIHRoZSBSWCBwYXRoLiBFYWNoIElQIHBhY2tldCBoYXMgdG8gYmUgcmVhbGxvY2F0ZWQgdG8KLSAqIGFkZCBhbiBldGhlcm5ldCBoZWFkZXIgKGFzIHRoZXJlIGlzIG5vIHNwYWNlIGluIHdoYXQgd2UgZ2V0IGZyb20KLSAqIHRoZSBkZXZpY2UpLiBUaGlzIGlzIGEga25vd24gZHJhd2JhY2sgYW5kIGNvbWluZyB2ZXJzaW9ucyBvZiB0aGUKLSAqIGRldmljZSdzIGZpcm13YXJlIGFyZSBiZWluZyBjaGFuZ2VkIHRvIGFkZCBoZWFkZXIgc3BhY2UgdGhhdCBjYW4gYmUKLSAqIHVzZWQgdG8gaW5zZXJ0IHRoZSBldGhlcm5ldCBoZWFkZXIgd2l0aG91dCBoYXZpbmcgdG8gcmVhbGxvY2F0ZSBhbmQKLSAqIGNvcHkuCisgKiBCZWNhdXNlIG9mIHRoaXMsIHdoZW4gdXNpbmcgZmlybXdhcmVzIDw9IHYxLjMsIHRoZXJlIGlzIGFuCisgKiBjb3B5LWVhY2gtcnhlZC1wYWNrZXQgb3ZlcmhlYWQgb24gdGhlIFJYIHBhdGguIEVhY2ggSVAgcGFja2V0IGhhcworICogdG8gYmUgcmVhbGxvY2F0ZWQgdG8gYWRkIGFuIGV0aGVybmV0IGhlYWRlciAoYXMgdGhlcmUgaXMgbm8gc3BhY2UKKyAqIGluIHdoYXQgd2UgZ2V0IGZyb20gdGhlIGRldmljZSkuIFRoaXMgaXMgYSBrbm93biBkcmF3YmFjayBhbmQKKyAqIGZpcm13YXJlcyA+PSAxLjQgYWRkIGhlYWRlciBzcGFjZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGluc2VydCB0aGUKKyAqIGV0aGVybmV0IGhlYWRlciB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlIGFuZCBjb3B5LgogICoKICAqIFRYIGVycm9yIGhhbmRsaW5nIGlzIHRyaWNreTsgYmVjYXVzZSB3ZSBoYXZlIHRvIEZJRk8vcXVldWUgdGhlCiAgKiBidWZmZXJzIGZvciB0cmFuc21pc3Npb24gKGFzIHRoZSBoYXJkd2FyZSBsaWtlcyBpdCBhZ2dyZWdhdGVkKSwgd2UKQEAgLTY3LDcgKzY2LDkgQEAKICAqIGkyNDAwbV90eF90aW1lb3V0ICAgICAgQ2FsbGVkIHdoZW4gdGhlIGRldmljZSB0aW1lcyBvdXQKICAqCiAgKiBpMjQwMG1fbmV0X3J4ICAgICAgICAgIENhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuIGEgZGF0YSBmcmFtZSBpcwotICogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSAoZmlybXdhcmUgPD0gMS4zKQorICogaTI0MDBtX25ldF9lcnggICAgICAgICBDYWxsZWQgYnkgdGhlIFJYIGNvZGUgd2hlbiBhIGRhdGEgZnJhbWUgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIChmaXJtd2FyZSA+PSAxLjQpLgogICogaTI0MDBtX25ldGRldl9zZXR1cCAgICBDYWxsZWQgdG8gc2V0dXAgYWxsIHRoZSBuZXRkZXYgc3R1ZmYgZnJvbQogICogICAgICAgICAgICAgICAgICAgICAgICBhbGxvY19uZXRkZXYuCiAgKi8KQEAgLTM5NiwzMCArMzk3LDE4IEBACiAgKiBDcmVhdGUgYSBmYWtlIGV0aGVybmV0IGhlYWRlcgogICoKICAqIEZvciBlbXVsYXRpbmcgYW4gZXRoZXJuZXQgZGV2aWNlLCBldmVyeSByZWNlaXZlZCBJUCBoZWFkZXIgaGFzIHRvCi0gKiBiZSBwcmVmaXhlZCB3aXRoIGFuIGV0aGVybmV0IGhlYWRlci4KLSAqCi0gKiBXaGF0IHdlIHJlY2VpdmUgaGFzIChwb3RlbnRpYWxseSkgbWFueSBJUCBwYWNrZXRzIGNvbmNhdGVuYXRlZCB3aXRoCi0gKiBubyBFVEhfSExFTiBieXRlcyBwcmVmaXhlZC4gVGh1cyB0aGVyZSBpcyBubyBzcGFjZSBmb3IgYW4gZXRoCi0gKiBoZWFkZXIuCi0gKgotICogV2Ugd291bGQgaGF2ZSB0byByZWFsbG9jYXRlIG9yIGRvIHVnbHkgZnJhZ21lbnQgdHJpY2tzIGluIG9yZGVyIHRvCi0gKiBhZGQgaXQuCi0gKgotICogQnV0IHdoYXQgd2UgZG8gaXMgdXNlIHRoZSBoZWFkZXIgc3BhY2Ugb2YgdGhlIFJYIHRyYW5zYWN0aW9uCi0gKiAoKm1zZ19oZHIpIGFzIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZTsgdGhlbiB3ZSdsbCBwb2ludCBhbGwgdGhlCi0gKiBkYXRhIHNrYnMgdGhlcmUsIGFzIHRoZXkgc2hhcmUgdGhlIHNhbWUgYmFja2luZyBzdG9yZS4KLSAqCi0gKiBXZSBvbmx5IHN1cHBvcnQgSVB2NCBmb3IgdjMgZmlybXdhcmUuCisgKiBiZSBwcmVmaXhlZCB3aXRoIGFuIGV0aGVybmV0IGhlYWRlci4gRmFrZSBpdCB3aXRoIHRoZSBnaXZlbgorICogcHJvdG9jb2wuCiAgKi8KIHN0YXRpYwogdm9pZCBpMjQwMG1fcnhfZmFrZV9ldGhfaGVhZGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgIHZvaWQgKl9ldGhfaGRyKQorCQkJICAgICAgIHZvaWQgKl9ldGhfaGRyLCBfX2JlMTYgcHJvdG9jb2wpCiB7CiAJc3RydWN0IGV0aGhkciAqZXRoX2hkciA9IF9ldGhfaGRyOwogCiAJbWVtY3B5KGV0aF9oZHItPmhfZGVzdCwgbmV0X2Rldi0+ZGV2X2FkZHIsIHNpemVvZihldGhfaGRyLT5oX2Rlc3QpKTsKIAltZW1zZXQoZXRoX2hkci0+aF9zb3VyY2UsIDAsIHNpemVvZihldGhfaGRyLT5oX2Rlc3QpKTsKLQlldGhfaGRyLT5oX3Byb3RvID0gX19jb25zdGFudF9jcHVfdG9fYmUxNihFVEhfUF9JUCk7CisJZXRoX2hkci0+aF9wcm90byA9IHByb3RvY29sOwogfQogCiAKQEAgLTQzMiw2ICs0MjEsMTMgQEAKICAqIEBidWY6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhCiAgKiBAbGVuOiBidWZmZXIncyBsZW5ndGgKICAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBub3cgZm9yIHRoZSB2MS4zIGZpcm13YXJlLiBJdCB3aWxsIGJlIGRlcHJlY2F0ZWQKKyAqIGluID49IDIuNi4zMS4KKyAqCisgKiBOb3RlIHRoYXQgZHVlIHRvIGZpcm13YXJlIGxpbWl0YXRpb25zLCB3ZSBkb24ndCBoYXZlIHNwYWNlIHRvIGFkZAorICogYW4gZXRoZXJuZXQgaGVhZGVyLCBzbyB3ZSBuZWVkIHRvIGNvcHkgZWFjaCBwYWNrZXQuIEZpcm13YXJlCisgKiB2ZXJzaW9ucyA+PSB2MS40IGZpeCB0aGlzIFtzZWUgaTI0MDBtX25ldF9lcngoKV0uCisgKgogICogV2UganVzdCBjbG9uZSB0aGUgc2tiIGFuZCBzZXQgaXQgdXAgc28gdGhhdCBpdCdzIHNrYi0+ZGF0YSBwb2ludGVyCiAgKiBwb2ludHMgdG8gImJ1ZiIgYW5kIGl0J3MgbGVuZ3RoLgogICoKQEAgLTQ3OCw3ICs0NzQsOCBAQAogCQltZW1jcHkoc2tiX3B1dChza2IsIGJ1Zl9sZW4pLCBidWYsIGJ1Zl9sZW4pOwogCX0KIAlpMjQwMG1fcnhfZmFrZV9ldGhfaGVhZGVyKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYsCi0JCQkJICBza2ItPmRhdGEgLSBFVEhfSExFTik7CisJCQkJICBza2ItPmRhdGEgLSBFVEhfSExFTiwKKwkJCQkgIGNwdV90b19iZTE2KEVUSF9QX0lQKSk7CiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgLUVUSF9ITEVOKTsKIAlza2ItPmRldiA9IGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXY7CiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKQEAgLTQ5NCw2ICs0OTEsNzMgQEAKIH0KIAogCisvKgorICogaTI0MDBtX25ldF9lcnggLSBwYXNzIGEgbmV0d29yayBwYWNrZXQgdG8gdGhlIHN0YWNrIChleHRlbmRlZCB2ZXJzaW9uKQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiOiB0aGUgc2tiIHdoZXJlIHRoZSBwYWNrZXQgaXMgLSB0aGUgc2tiIHNob3VsZCBiZSBzZXQgdG8gcG9pbnQKKyAqICAgICBhdCB0aGUgSVAgcGFja2V0OyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGV0aGVybmV0IGhlYWRlcnMgaWYKKyAqICAgICBuZWVkZWQuCisgKiBAY3M6IHBhY2tldCB0eXBlCisgKgorICogVGhpcyBpcyBvbmx5IHVzZWQgbm93IGZvciBmaXJtd2FyZSA+PSB2MS40LiBOb3RlIGl0IGlzIHF1aXRlCisgKiBzaW1pbGFyIHRvIGkyNDAwbV9uZXRfcngoKSAodXNlZCBvbmx5IGZvciB2MS4zIGZpcm13YXJlKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IHJ1biBmcm9tIGEgdGhyZWFkIGNvbnRleHQuIEhvd2V2ZXIsIHdlCisgKiBzdGlsbCB1c2UgbmV0aWZfcngoKSBpbnN0ZWFkIG9mIG5ldGlmX3JlY2VpdmVfc2tiKCkgYXMgd2FzCisgKiByZWNvbW1lbmRlZCBpbiB0aGUgbWFpbGluZyBsaXN0LiBSZWFzb24gaXMgaW4gc29tZSBzdHJlc3MgdGVzdHMKKyAqIHdoZW4gc2VuZGluZy9yZWNlaXZpbmcgYSBsb3Qgb2YgZGF0YSB3ZSBzZWVtIHRvIGhpdCBhIHNvZnRsb2NrIGluCisgKiB0aGUga2VybmVsJ3MgVENQIGltcGxlbWVudGF0aW9uIFthcm91ZG4gdGNwX2RlbGF5X3RpbWVyKCldLiBVc2luZworICogbmV0aWZfcngoKSB0b29rIGNhcmUgb2YgdGhlIGlzc3VlLgorICoKKyAqIFRoaXMgaXMsIG9mIGNvdXJzZSwgc3RpbGwgb3BlbiB0byBkbyBtb3JlIHJlc2VhcmNoIG9uIHdoeSBydW5uaW5nCisgKiB3aXRoIG5ldGlmX3JlY2VpdmVfc2tiKCkgaGl0cyB0aGlzIHNvZnRsb2NrLiBGSVhNRS4KKyAqLwordm9pZCBpMjQwMG1fbmV0X2VyeChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICBlbnVtIGkyNDAwbV9jcyBjcykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCWludCBwcm90b2NvbDsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbJXVdIGNzICVkKVxuIiwKKwkJICBpMjQwMG0sIHNrYiwgc2tiLT5sZW4sIGNzKTsKKwlzd2l0Y2goY3MpIHsKKwljYXNlIEkyNDAwTV9DU19JUFY0XzA6CisJY2FzZSBJMjQwME1fQ1NfSVBWNDoKKwkJcHJvdG9jb2wgPSBFVEhfUF9JUDsKKwkJaTI0MDBtX3J4X2Zha2VfZXRoX2hlYWRlcihpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2LAorCQkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCQkgIGNwdV90b19iZTE2KEVUSF9QX0lQKSk7CisJCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIC1FVEhfSExFTik7CisJCXNrYi0+ZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKKwkJbmV0X2Rldi0+c3RhdHMucnhfcGFja2V0cysrOworCQluZXRfZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJFUlg6IEJVRz8gQ1MgdHlwZSAldSB1bnN1cHBvcnRlZFxuIiwgY3MpOworCQlnb3RvIGVycm9yOworCisJfQorCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogcmVjZWl2aW5nICVkIGJ5dGVzIHRvIHRoZSBuZXR3b3JrIHN0YWNrXG4iLAorCQkgc2tiLT5sZW4pOworCWRfZHVtcCg0LCBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCW5ldGlmX3J4X25pKHNrYik7CS8qIHNlZSBub3RlcyBpbiBmdW5jdGlvbiBoZWFkZXIgKi8KK2Vycm9yOgorCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCBza2IgJXAgWyV1XSBjcyAlZCkgPSB2b2lkXG4iLAorCQlpMjQwMG0sIHNrYiwgc2tiLT5sZW4sIGNzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpMjQwMG1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBpMjQwMG1fb3BlbiwKKwkubmRvX3N0b3AgPSBpMjQwMG1fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQgPSBpMjQwMG1faGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCA9IGkyNDAwbV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dSA9IGkyNDAwbV9jaGFuZ2VfbXR1LAorfTsKKworCiAvKioKICAqIGkyNDAwbV9uZXRkZXZfc2V0dXAgLSBTZXR1cCBzZXR1cCBAbmV0X2RldidzIGkyNDAwbSBwcml2YXRlIGRhdGEKICAqCkBAIC01MTMsMTEgKzU3Nyw3IEBACiAJCSYgKH5JRkZfQlJPQURDQVNUCS8qIGkyNDAwbSBpcyBQMlAgKi8KIAkJICAgJiB+SUZGX01VTFRJQ0FTVCk7CiAJbmV0X2Rldi0+d2F0Y2hkb2dfdGltZW8gPSBJMjQwME1fVFhfVElNRU9VVDsKLQluZXRfZGV2LT5vcGVuID0gaTI0MDBtX29wZW47Ci0JbmV0X2Rldi0+c3RvcCA9IGkyNDAwbV9zdG9wOwotCW5ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGkyNDAwbV9oYXJkX3N0YXJ0X3htaXQ7Ci0JbmV0X2Rldi0+Y2hhbmdlX210dSA9IGkyNDAwbV9jaGFuZ2VfbXR1OwotCW5ldF9kZXYtPnR4X3RpbWVvdXQgPSBpMjQwMG1fdHhfdGltZW91dDsKKwluZXRfZGV2LT5uZXRkZXZfb3BzID0gJmkyNDAwbV9uZXRkZXZfb3BzOwogCWRfZm5lbmQoMywgTlVMTCwgIihuZXRfZGV2ICVwKSA9IHZvaWRcbiIsIG5ldF9kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTI0MDBtX25ldGRldl9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCmluZGV4IDY5MjIwMjI3Li4wMjQxOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYwpAQCAtMzksNyArMzksNyBAQAogICogIC0gVXNlIHNrYl9jbG9uZSgpLCBicmVhayB1cCBwcm9jZXNzaW5nIGluIGNodW5rcwogICogIC0gU3BsaXQgdHJhbnNwb3J0L2RldmljZSBzcGVjaWZpYwogICogIC0gTWFrZSBidWZmZXIgc2l6ZSBkeW5hbWljIHRvIGV4ZXJ0IGxlc3MgbWVtb3J5IHByZXNzdXJlCi0gKgorICogIC0gUlggcmVvcmRlciBzdXBwb3J0CiAgKgogICogVGhpcyBoYW5kbGVzIHRoZSBSWCBwYXRoLgogICoKQEAgLTY5LDYgKzY5LDUwIEBACiAgKiBTZWUgdHguYyBmb3IgYSBkZWVwZXIgZGVzY3JpcHRpb24gb24gYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQKICAqIG90aGVyIGZ1biBmYWN0cyBvZiBpdC4KICAqCisgKiBEQVRBIFBBQ0tFVFMKKyAqCisgKiBJbiBmaXJtd2FyZXMgPD0gdjEuMywgZGF0YSBwYWNrZXRzIGhhdmUgbm8gaGVhZGVyIGZvciBSWCwgYnV0IHRoZXkKKyAqIGRvIGZvciBUWCAoY3VycmVudGx5IHVudXNlZCkuCisgKgorICogSW4gZmlybXdhcmUgPj0gMS40LCBSWCBwYWNrZXRzIGhhdmUgYW4gZXh0ZW5kZWQgaGVhZGVyICgxNgorICogYnl0ZXMpLiBUaGlzIGhlYWRlciBjb252ZXlzIGluZm9ybWF0aW9uIGZvciBtYW5hZ2VtZW50IG9mIGhvc3QKKyAqIHJlb3JkZXJpbmcgb2YgcGFja2V0cyAodGhlIGRldmljZSBvZmZsb2FkcyBzdG9yYWdlIG9mIHRoZSBwYWNrZXRzCisgKiBmb3IgcmVvcmRlcmluZyB0byB0aGUgaG9zdCkuIFJlYWQgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogVGhlIGhlYWRlciBpcyB1c2VkIGFzIGR1bW15IHNwYWNlIHRvIGVtdWxhdGUgYW4gZXRoZXJuZXQgaGVhZGVyIGFuZAorICogdGh1cyBiZSBhYmxlIHRvIGFjdCBhcyBhbiBldGhlcm5ldCBkZXZpY2Ugd2l0aG91dCBoYXZpbmcgdG8gcmVhbGxvY2F0ZS4KKyAqCisgKiBEQVRBIFJYIFJFT1JERVJJTkcKKyAqCisgKiBTdGFydGluZyBpbiBmaXJtd2FyZSB2MS40LCB0aGUgZGV2aWNlIGNhbiBkZWxpdmVyIHBhY2tldHMgZm9yCisgKiBkZWxpdmVyeSB3aXRoIHNwZWNpYWwgcmVvcmRlcmluZyBpbmZvcm1hdGlvbjsgdGhpcyBhbGxvd3MgaXQgdG8KKyAqIG1vcmUgZWZmZWN0aXZlbHkgZG8gcGFja2V0IG1hbmFnZW1lbnQgd2hlbiBzb21lIGZyYW1lcyB3ZXJlIGxvc3QgaW4KKyAqIHRoZSByYWRpbyB0cmFmZmljLgorICoKKyAqIFRodXMsIGZvciBSWCBwYWNrZXRzIHRoYXQgY29tZSBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2UgZ2l2ZXMgdGhlCisgKiBkcml2ZXIgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHF1ZXVlIHRoZW0gcHJvcGVybHkgYW5kIHRoZW4gYXQgc29tZQorICogcG9pbnQsIHRoZSBzaWduYWwgdG8gZGVsaXZlciB0aGUgd2hvbGUgKG9yIHBhcnQpIG9mIHRoZSBxdWV1ZWQKKyAqIHBhY2tldHMgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoZXJlIGFyZSAxNiBzdWNoIHF1ZXVlcy4KKyAqCisgKiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIGEgcGFja2V0IGNvbWVzIGluIHdpdGggdGhlICJuZWVkIHJlb3JkZXIiCisgKiBmbGFnIHNldCBpbiB0aGUgUlggaGVhZGVyLiBXaGVuIHN1Y2ggYml0IGlzIHNldCwgdGhlIGZvbGxvd2luZworICogb3BlcmF0aW9ucyBtaWdodCBiZSBpbmRpY2F0ZWQ6CisgKgorICogIC0gcmVzZXQgcXVldWU6IHNlbmQgYWxsIHF1ZXVlZCBwYWNrZXRzIHRvIHRoZSBPUworICoKKyAqICAtIHF1ZXVlOiBxdWV1ZSBhIHBhY2tldAorICoKKyAqICAtIHVwZGF0ZSB3czogdXBkYXRlIHRoZSBxdWV1ZSdzIHdpbmRvdyBzdGFydCBhbmQgZGVsaXZlciBxdWV1ZWQKKyAqICAgIHBhY2tldHMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYQorICoKKyAqICAtIHF1ZXVlICYgdXBkYXRlIHdzOiBxdWV1ZSBhIHBhY2tldCwgdXBkYXRlIHRoZSB3aW5kb3cgc3RhcnQgYW5kCisgKiAgICBkZWxpdmVyIHF1ZXVlZCBwYWNrZXRzIHRoYXQgbWVldCB0aGUgY3JpdGVyaWEKKyAqCisgKiAoZGVsaXZlcnkgY3JpdGVyaWE6IHRoZSBwYWNrZXQncyBbbm9ybWFsaXplZF0gc2VxdWVuY2UgbnVtYmVyIGlzCisgKiBsb3dlciB0aGFuIHRoZSBuZXcgW25vcm1hbGl6ZWRdIHdpbmRvdyBzdGFydCkuCisgKgorICogU2VlIHRoZSBpMjQwMG1fcm9xXyooKSBmdW5jdGlvbnMgZm9yIGRldGFpbHMuCisgKgogICogUk9BRE1BUAogICoKICAqIGkyNDAwbV9yeApAQCAtNzYsNiArMTIwLDE5IEBACiAgKiAgIGkyNDAwbV9yeF9wbF9kZXNjcl9jaGVjawogICogICBpMjQwMG1fcnhfcGF5bG9hZAogICogICAgIGkyNDAwbV9uZXRfcngKKyAqICAgICBpMjQwMG1fcnhfZWRhdGEKKyAqICAgICAgIGkyNDAwbV9uZXRfZXJ4CisgKiAgICAgICBpMjQwMG1fcm9xX3Jlc2V0CisgKiAgICAgICAgIGkyNDAwbV9uZXRfZXJ4CisgKiAgICAgICBpMjQwMG1fcm9xX3F1ZXVlCisgKiAgICAgICAgIF9faTI0MDBtX3JvcV9xdWV1ZQorICogICAgICAgaTI0MDBtX3JvcV91cGRhdGVfd3MKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICAgIGkyNDAwbV9uZXRfZXJ4CisgKiAgICAgICBpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cworICogICAgICAgICBfX2kyNDAwbV9yb3FfcXVldWUKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICAgIGkyNDAwbV9uZXRfZXJ4CiAgKiAgICAgaTI0MDBtX3J4X2N0bAogICogICAgICAgaTI0MDBtX21zZ19zaXplX2NoZWNrCiAgKiAgICAgICBpMjQwMG1fcmVwb3J0X2hvb2tfd29yayAgICBbaW4gYSB3b3JrcXVldWVdCkBAIC0xNzcsOCArMjM0LDcgQEAKIAlyZXR1cm47CiAKIGVycm9yX3dhaXRlcl9jYW5jZWxsZWQ6Ci0JaWYgKGFja19za2IpCi0JCWtmcmVlX3NrYihhY2tfc2tiKTsKKwlrZnJlZV9za2IoYWNrX3NrYik7CiBlcnJvcl9ub193YWl0ZXI6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTI0MDBtLT5yeF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwpAQCAtMjY1LDggKzMyMSw2IEBACiB9CiAKIAotCi0KIC8qCiAgKiBSZWNlaXZlIGFuZCBzZW5kIHVwIGEgdHJhY2UKICAqCkBAIC0zMTcsMzAgKzM3MSw2MjggQEAKIAogCiAvKgorICogUmVvcmRlciBxdWV1ZSBkYXRhIHN0b3JlZCBvbiBza2ItPmNiIHdoaWxlIHRoZSBza2IgaXMgcXVldWVkIGluIHRoZQorICogcmVvcmRlciBxdWV1ZXMuCisgKi8KK3N0cnVjdCBpMjQwMG1fcm9xX2RhdGEgeworCXVuc2lnbmVkIHNuOwkJLyogU2VyaWFsIG51bWJlciBmb3IgdGhlIHNrYiAqLworCWVudW0gaTI0MDBtX2NzIGNzOwkvKiBwYWNrZXQgdHlwZSBmb3IgdGhlIHNrYiAqLworfTsKKworCisvKgorICogUmVPcmRlciBRdWV1ZQorICoKKyAqIEB3czogV2luZG93IFN0YXJ0OyBzZXF1ZW5jZSBudW1iZXIgd2hlcmUgdGhlIGN1cnJlbnQgd2luZG93IHN0YXJ0CisgKiAgICAgaXMgZm9yIHRoaXMgcXVldWUKKyAqIEBxdWV1ZTogdGhlIHNrYiBxdWV1ZSBpdHNlbGYKKyAqIEBsb2c6IGNpcmN1bGFyIHJpbmcgYnVmZmVyIHVzZWQgdG8gbG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogICAgIHJlb3JkZXIgcHJvY2VzcyBpbiB0aGlzIHF1ZXVlIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpbiBjYXNlIG9mCisgKiAgICAgZXJyb3IgdG8gaGVscCBkaWFnbm9zZSBpdC4KKyAqCisgKiBUaGlzIGlzIHRoZSBoZWFkIGZvciBhIGxpc3Qgb2Ygc2ticy4gSW4gdGhlIHNrYi0+Y2IgbWVtYmVyIG9mIHRoZQorICogc2tiIHdoZW4gcXVldWVkIGhlcmUgY29udGFpbnMgYSAnc3RydWN0IGkyNDAwbV9yb3FfZGF0YScgd2VyZSB3ZQorICogc3RvcmUgdGhlIHNlcXVlbmNlIG51bWJlciAoc24pIGFuZCB0aGUgY3MgKHBhY2tldCB0eXBlKSBjb21pbmcgZnJvbQorICogdGhlIFJYIHBheWxvYWQgaGVhZGVyIGZyb20gdGhlIGRldmljZS4KKyAqLworc3RydWN0IGkyNDAwbV9yb3EKK3sKKwl1bnNpZ25lZCB3czsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZyAqbG9nOworfTsKKworCitzdGF0aWMKK3ZvaWQgX19pMjQwMG1fcm9xX2luaXQoc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlyb3EtPndzID0gMDsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZyb3EtPnF1ZXVlKTsKK30KKworCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV9pbmRleChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EpCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZykgcm9xIC0gKHVuc2lnbmVkIGxvbmcpIGkyNDAwbS0+cnhfcm9xKQorCQkvIHNpemVvZigqcm9xKTsKK30KKworCisvKgorICogTm9ybWFsaXplIGEgc2VxdWVuY2UgbnVtYmVyIGJhc2VkIG9uIHRoZSBxdWV1ZSdzIHdpbmRvdyBzdGFydAorICoKKyAqIG5zbiA9IChzbiAtIHdzKSAlIDIwNDgKKyAqCisgKiBOb3RlIHRoYXQgaWYgQHNuIDwgQHJvcS0+d3MsIHdlIHN0aWxsIG5lZWQgYSBwb3NpdGl2ZSBudW1iZXI7ICUncworICogc2lnbiBpcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYywgc28gd2Ugbm9ybWFsaXplIGl0IGJ5IGFkZGluZyAyMDQ4CisgKiB0byBicmluZyBpdCB0byBiZSBwb3NpdGl2ZS4KKyAqLworc3RhdGljCit1bnNpZ25lZCBfX2kyNDAwbV9yb3FfbnNuKHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsIHVuc2lnbmVkIHNuKQoreworCWludCByOworCXIgPSAgKChpbnQpIHNuIC0gKGludCkgcm9xLT53cykgJSAyMDQ4OworCWlmIChyIDwgMCkKKwkJciArPSAyMDQ4OworCXJldHVybiByOworfQorCisKKy8qCisgKiBDaXJjdWxhciBidWZmZXIgdG8ga2VlcCB0aGUgbGFzdCBOIHJlb3JkZXIgb3BlcmF0aW9ucworICoKKyAqIEluIGNhc2Ugc29tZXRoaW5nIGZhaWxzLCBkdW1iIHRoZW4gdG8gdHJ5IHRvIGNvbWUgdXAgd2l0aCB3aGF0CisgKiBoYXBwZW5lZC4KKyAqLworZW51bSB7CisJSTI0MDBNX1JPUV9MT0dfTEVOR1RIID0gMzIsCit9OworCitzdHJ1Y3QgaTI0MDBtX3JvcV9sb2cgeworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSB7CisJCWVudW0gaTI0MDBtX3JvX3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgd3MsIGNvdW50LCBzbiwgbnNuLCBuZXdfd3M7CisJfSBlbnRyeVtJMjQwME1fUk9RX0xPR19MRU5HVEhdOworCXVuc2lnbmVkIGluLCBvdXQ7Cit9OworCisKKy8qIFByaW50IGEgbG9nIGVudHJ5ICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9sb2dfZW50cnlfcHJpbnQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCB1bnNpZ25lZCBpbmRleCwKKwkJCQl1bnNpZ25lZCBlX2luZGV4LAorCQkJCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisKKwlzd2l0Y2goZS0+dHlwZSkgeworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUkVTRVQ6CisJCWRldl9lcnIoZGV2LCAicSMlZCByZXNldCAgICAgICAgICAgd3MgJXUgY250ICV1IHNuICV1LyV1IgorCQkJIiAtIG5ldyBud3MgJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuLCBlLT5uZXdfd3MpOworCQlicmVhazsKKwljYXNlIEkyNDAwTV9ST19UWVBFX1BBQ0tFVDoKKwkJZGV2X2VycihkZXYsICJxIyVkIHF1ZXVlICAgICAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuKTsKKwkJYnJlYWs7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9XUzoKKwkJZGV2X2VycihkZXYsICJxIyVkIHVwZGF0ZV93cyAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXUiCisJCQkiIC0gbmV3IG53cyAldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24sIGUtPm5ld193cyk7CisJCWJyZWFrOworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTOgorCQlkZXZfZXJyKGRldiwgInEjJWQgcXVldWVfdXBkYXRlX3dzIHdzICV1IGNudCAldSBzbiAldS8ldSIKKwkJCSIgLSBuZXcgbndzICV1XG4iLAorCQkJaW5kZXgsIGUtPndzLCBlLT5jb3VudCwgZS0+c24sIGUtPm5zbiwgZS0+bmV3X3dzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJxIyVkIEJVRz8gZW50cnkgJXUgLSB1bmtub3duIHR5cGUgJXVcbiIsCisJCQlpbmRleCwgZV9pbmRleCwgZS0+dHlwZSk7CisJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9sb2dfYWRkKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwKKwkJCXN0cnVjdCBpMjQwMG1fcm9xICpyb3EsIGVudW0gaTI0MDBtX3JvX3R5cGUgdHlwZSwKKwkJCXVuc2lnbmVkIHdzLCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgc24sCisJCQl1bnNpZ25lZCBuc24sIHVuc2lnbmVkIG5ld193cykKK3sKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9sb2dfZW50cnkgKmU7CisJdW5zaWduZWQgY250X2lkeDsKKwlpbnQgaW5kZXggPSBfX2kyNDAwbV9yb3FfaW5kZXgoaTI0MDBtLCByb3EpOworCisJLyogaWYgd2UgcnVuIG91dCBvZiBzcGFjZSwgd2UgZWF0IGZyb20gdGhlIGVuZCAqLworCWlmIChyb3EtPmxvZy0+aW4gLSByb3EtPmxvZy0+b3V0ID09IEkyNDAwTV9ST1FfTE9HX0xFTkdUSCkKKwkJcm9xLT5sb2ctPm91dCsrOworCWNudF9pZHggPSByb3EtPmxvZy0+aW4rKyAlIEkyNDAwTV9ST1FfTE9HX0xFTkdUSDsKKwllID0gJnJvcS0+bG9nLT5lbnRyeVtjbnRfaWR4XTsKKworCWUtPnR5cGUgPSB0eXBlOworCWUtPndzID0gd3M7CisJZS0+Y291bnQgPSBjb3VudDsKKwllLT5zbiA9IHNuOworCWUtPm5zbiA9IG5zbjsKKwllLT5uZXdfd3MgPSBuZXdfd3M7CisKKwlpZiAoZF90ZXN0KDEpKQorCQlpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChpMjQwMG0sIGluZGV4LCBjbnRfaWR4LCBlKTsKK30KKworCisvKiBEdW1wIGFsbCB0aGUgZW50cmllcyBpbiB0aGUgRklGTyBhbmQgcmVpbml0aWFsaXplIGl0ICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9sb2dfZHVtcChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EpCit7CisJdW5zaWduZWQgY250LCBjbnRfaWR4OworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZTsKKwlpbnQgaW5kZXggPSBfX2kyNDAwbV9yb3FfaW5kZXgoaTI0MDBtLCByb3EpOworCisJQlVHX09OKHJvcS0+bG9nLT5vdXQgPiByb3EtPmxvZy0+aW4pOworCWZvciAoY250ID0gcm9xLT5sb2ctPm91dDsgY250IDwgcm9xLT5sb2ctPmluOyBjbnQrKykgeworCQljbnRfaWR4ID0gY250ICUgSTI0MDBNX1JPUV9MT0dfTEVOR1RIOworCQllID0gJnJvcS0+bG9nLT5lbnRyeVtjbnRfaWR4XTsKKwkJaTI0MDBtX3JvcV9sb2dfZW50cnlfcHJpbnQoaTI0MDBtLCBpbmRleCwgY250X2lkeCwgZSk7CisJCW1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKwl9CisJcm9xLT5sb2ctPmluID0gcm9xLT5sb2ctPm91dCA9IDA7Cit9CisKKworLyoKKyAqIEJhY2tib25lIGZvciB0aGUgcXVldWluZyBvZiBhbiBza2IgKGJ5IG5vcm1hbGl6ZWQgc2VxdWVuY2UgbnVtYmVyKQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiByZW9yZGVyIHF1ZXVlIHdoZXJlIHRvIGFkZAorICogQHNrYjogdGhlIHNrYiB0byBhZGQKKyAqIEBzbjogdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2tiCisgKiBAbnNuOiB0aGUgbm9ybWFsaXplZCBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHNrYiAocHJlLWNvbXB1dGVkIGJ5IHRoZQorICogICAgIGNhbGxlciBmcm9tIHRoZSBAc24gYW5kIEByb3EtPndzKS4KKyAqCisgKiBXZSB0cnkgZmlyc3QgYSBjb3VwbGUgb2YgcXVpY2sgY2FzZXM6CisgKgorICogICAtIHRoZSBxdWV1ZSBpcyBlbXB0eQorICogICAtIHRoZSBza2Igd291bGQgYmUgYXBwZW5kZWQgdG8gdGhlIHF1ZXVlCisgKgorICogVGhlc2Ugd2lsbCBiZSB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucy4KKyAqCisgKiBJZiB0aGVzZSBmYWlsLCB0aGVuIHdlIGhhdmUgdG8gZG8gYSBzb3J0ZWQgaW5zZXJ0aW9uIGluIHRoZSBxdWV1ZSwKKyAqIHdoaWNoIGlzIHRoZSBzbG93ZXN0IHBhdGguCisgKgorICogV2UgZG9uJ3QgaGF2ZSB0byBhY3F1aXJlIGEgcmVmZXJlbmNlIGNvdW50IGFzIHdlIGFyZSBnb2luZyB0byBvd24gaXQuCisgKi8KK3N0YXRpYwordm9pZCBfX2kyNDAwbV9yb3FfcXVldWUoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc24sIHVuc2lnbmVkIG5zbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyLCAqcm9xX2RhdGE7CisJdW5zaWduZWQgbnNuX2l0cjsKKworCWRfZm5zdGFydCg0LCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUgbnNuICV1KVxuIiwKKwkJICBpMjQwMG0sIHJvcSwgc2tiLCBzbiwgbnNuKTsKKworCXJvcV9kYXRhID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYi0+Y2I7CisJQlVJTERfQlVHX09OKHNpemVvZigqcm9xX2RhdGEpID4gc2l6ZW9mKHNrYi0+Y2IpKTsKKwlyb3FfZGF0YS0+c24gPSBzbjsKKwlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHJvcSAlcCBbd3MgJXVdIG5zbiAlZCBzbiAldVxuIiwKKwkJIHJvcSwgcm9xLT53cywgbnNuLCByb3FfZGF0YS0+c24pOworCisJLyogUXVldWVzIHdpbGwgYmUgZW1wdHkgb24gbm90LXNvLWJhZCBlbnZpcm9ubWVudHMsIHNvIHRyeQorCSAqIHRoYXQgZmlyc3QgKi8KKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZyb3EtPnF1ZXVlKSkgeworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIGZpcnN0IG9uZVxuIiwgcm9xKTsKKwkJX19za2JfcXVldWVfaGVhZCgmcm9xLT5xdWV1ZSwgc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdyB0cnkgYXBwZW5kLCBhcyBtb3N0IG9mIHRoZSBvcGVyYXRpb25zIHdpbGwgYmUgdGhhdCAqLworCXNrYl9pdHIgPSBza2JfcGVla190YWlsKCZyb3EtPnF1ZXVlKTsKKwlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJbnNuX2l0ciA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCByb3FfZGF0YV9pdHItPnNuKTsKKwkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJaWYgKG5zbiA+PSBuc25faXRyKSB7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gYXBwZW5kZWQgYWZ0ZXIgJXAgKG5zbiAlZCBzbiAldSlcbiIsCisJCQkgcm9xLCBza2JfaXRyLCBuc25faXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJX19za2JfcXVldWVfdGFpbCgmcm9xLT5xdWV1ZSwgc2tiKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vbmUgb2YgdGhlIGZhc3QgcGF0aHMgb3B0aW9uIHdvcmtlZC4gSXRlcmF0ZSB0byBmaW5kIHRoZQorCSAqIHJpZ2h0IHNwb3Qgd2hlcmUgdG8gaW5zZXJ0IHRoZSBwYWNrZXQ7IHdlIGtub3cgdGhlIHF1ZXVlIGlzCisJICogbm90IGVtcHR5LCBzbyB3ZSBhcmUgbm90IHRoZSBmaXJzdCBvbmVzOyB3ZSBhbHNvIGtub3cgd2UKKwkgKiBhcmUgbm90IGdvaW5nIHRvIGJlIHRoZSBsYXN0IG9uZXMuIFRoZSBsaXN0IGlzIHNvcnRlZCwgc28KKwkgKiB3ZSBoYXZlIHRvIGluc2VydCBiZWZvcmUgdGhlIHRoZSBmaXJzdCBndXkgd2l0aCBhbiBuc25faXRyCisJICogZ3JlYXRlciB0aGF0IG91ciBuc24uICovCisJc2tiX3F1ZXVlX3dhbGsoJnJvcS0+cXVldWUsIHNrYl9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWlmIChuc25faXRyID4gbnNuKSB7CisJCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHF1ZXVlZCBiZWZvcmUgJXAgIgorCQkJCSAiKG5zbiAlZCBzbiAldSlcbiIsIHJvcSwgc2tiX2l0ciwgbnNuX2l0ciwKKwkJCQkgcm9xX2RhdGFfaXRyLT5zbik7CisJCQlfX3NrYl9xdWV1ZV9iZWZvcmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHNrYik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhhdCBpcyBWRVJZIGJhZCAtLSBwcmludCBpbmZvIHRvIGhlbHAKKwkgKiBkaWFnbm9zZSBhbmQgY3Jhc2ggaXQgKi8KKwlkZXZfZXJyKGRldiwgIlNXIEJVRz8gZmFpbGVkIHRvIGluc2VydCBwYWNrZXRcbiIpOworCWRldl9lcnIoZGV2LCAiRVJYOiByb3EgJXAgW3dzICV1XSBza2IgJXAgbnNuICVkIHNuICV1XG4iLAorCQlyb3EsIHJvcS0+d3MsIHNrYiwgbnNuLCByb3FfZGF0YS0+c24pOworCXNrYl9xdWV1ZV93YWxrKCZyb3EtPnF1ZXVlLCBza2JfaXRyKSB7CisJCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwkJbnNuX2l0ciA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJLyogTlNOIGJvdW5kcyBhc3N1bWVkIGNvcnJlY3QgKGNoZWNrZWQgd2hlbiBpdCB3YXMgcXVldWVkKSAqLworCQlkZXZfZXJyKGRldiwgIkVSWDogcm9xICVwIHNrYl9pdHIgJXAgbnNuICVkIHNuICV1XG4iLAorCQkJcm9xLCBza2JfaXRyLCBuc25faXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwl9CisJQlVHKCk7CitvdXQ6CisJZF9mbmVuZCg0LCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUgbnNuICVkKSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCXJldHVybjsKK30KKworCisvKgorICogQmFja2JvbmUgZm9yIHRoZSB1cGRhdGUgd2luZG93IHN0YXJ0IG9wZXJhdGlvbgorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiBSZW9yZGVyIHF1ZXVlCisgKiBAc246IE5ldyBzZXF1ZW5jZSBudW1iZXIKKyAqCisgKiBVcGRhdGVzIHRoZSB3aW5kb3cgc3RhcnQgb2YgYSBxdWV1ZTsgd2hlbiBkb2luZyBzbywgaXQgbXVzdCBkZWxpdmVyCisgKiB0byB0aGUgbmV0d29ya2luZyBzdGFjayBhbGwgdGhlIHF1ZXVlZCBza2IncyB3aG9zZSBub3JtYWxpemVkCisgKiBzZXF1ZW5jZSBudW1iZXIgaXMgbG93ZXIgdGhhbiB0aGUgbmV3IG5vcm1hbGl6ZWQgd2luZG93IHN0YXJ0LgorICovCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV91cGRhdGVfd3Moc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkJCXVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0ciwgKnRtcF9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyOworCXVuc2lnbmVkIG5ld19ud3MsIG5zbl9pdHI7CisKKwluZXdfbndzID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHNuKTsKKwlpZiAodW5saWtlbHkobmV3X253cyA+PSAxMDI0KSAmJiBkX3Rlc3QoMSkpIHsKKwkJZGV2X2VycihkZXYsICJTVyBCVUc/IF9fdXBkYXRlX3dzIG5ld19ud3MgJXUgKHNuICV1IHdzICV1KVxuIiwKKwkJCW5ld19ud3MsIHNuLCByb3EtPndzKTsKKwkJV0FSTl9PTigxKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJfQorCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHRtcF9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWlmIChuc25faXRyIDwgbmV3X253cykgeworCQkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSByZWxlYXNlIHNrYiAlcCAiCisJCQkJICIobnNuICV1LyV1IG5ldyBud3MgJXUpXG4iLAorCQkJCSByb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24sCisJCQkJIG5ld19ud3MpOworCQkJX19za2JfdW5saW5rKHNrYl9pdHIsICZyb3EtPnF1ZXVlKTsKKwkJCWkyNDAwbV9uZXRfZXJ4KGkyNDAwbSwgc2tiX2l0ciwgcm9xX2RhdGFfaXRyLT5jcyk7CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CS8qIHJlc3Qgb2YgcGFja2V0cyBhbGwgbnNuX2l0ciA+IG53cyAqLworCX0KKwlyb3EtPndzID0gc247CisJcmV0dXJuIG5ld19ud3M7Cit9CisKKworLyoKKyAqIFJlc2V0IGEgcXVldWUKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQGNpbjogUXVldWUgSW5kZXgKKyAqCisgKiBEZWxpdmVyIGFsbCB0aGUgcGFja2V0cyBhbmQgcmVzZXQgdGhlIHdpbmRvdy1zdGFydCB0byB6ZXJvLiBOYW1lIGlzCisgKiBraW5kIG9mIG1pc2xlYWRpbmcuCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3Jlc2V0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9pdHIsICp0bXBfaXRyOworCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhX2l0cjsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcClcbiIsIGkyNDAwbSwgcm9xKTsKKwlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1JFU0VULAorCQkJICAgICByb3EtPndzLCBza2JfcXVldWVfbGVuKCZyb3EtPnF1ZXVlKSwKKwkJCSAgICAgfjAsIH4wLCAwKTsKKwlza2JfcXVldWVfd2Fsa19zYWZlKCZyb3EtPnF1ZXVlLCBza2JfaXRyLCB0bXBfaXRyKSB7CisJCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSByZWxlYXNlIHNrYiAlcCAoc24gJXUpXG4iLAorCQkJIHJvcSwgc2tiX2l0ciwgcm9xX2RhdGFfaXRyLT5zbik7CisJCV9fc2tiX3VubGluayhza2JfaXRyLCAmcm9xLT5xdWV1ZSk7CisJCWkyNDAwbV9uZXRfZXJ4KGkyNDAwbSwgc2tiX2l0ciwgcm9xX2RhdGFfaXRyLT5jcyk7CisJfQorCXJvcS0+d3MgPSAwOworCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXApID0gdm9pZFxuIiwgaTI0MDBtLCByb3EpOworCXJldHVybjsKK30KKworCisvKgorICogUXVldWUgYSBwYWNrZXQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQGNpbjogUXVldWUgSW5kZXgKKyAqIEBza2I6IGNvbnRhaW5pbmcgdGhlIHBhY2tldCBkYXRhCisgKiBAZmJuOiBGaXJzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKiBAbGJuOiBMYXN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqCisgKiBUaGUgaGFyZHdhcmUgaXMgYXNraW5nIHRoZSBkcml2ZXIgdG8gcXVldWUgYSBwYWNrZXQgZm9yIGxhdGVyCisgKiBkZWxpdmVyeSB0byB0aGUgbmV0d29ya2luZyBzdGFjay4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfcXVldWUoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgdW5zaWduZWQgbGJuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBuc24sIGxlbjsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgbGJuICV1KSA9IHZvaWRcbiIsCisJCSAgaTI0MDBtLCByb3EsIHNrYiwgbGJuKTsKKwlsZW4gPSBza2JfcXVldWVfbGVuKCZyb3EtPnF1ZXVlKTsKKwluc24gPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgbGJuKTsKKwlpZiAodW5saWtlbHkobnNuID49IDEwMjQpKSB7CisJCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBxdWV1ZSBuc24gJWQgKGxibiAldSB3cyAldSlcbiIsCisJCQluc24sIGxibiwgcm9xLT53cyk7CisJCWkyNDAwbV9yb3FfbG9nX2R1bXAoaTI0MDBtLCByb3EpOworCQlpMjQwMG0tPmJ1c19yZXNldChpMjQwMG0sIEkyNDAwTV9SVF9XQVJNKTsKKwl9IGVsc2UgeworCQlfX2kyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgbGJuLCBuc24pOworCQlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1BBQ0tFVCwKKwkJCQkgICAgIHJvcS0+d3MsIGxlbiwgbGJuLCBuc24sIH4wKTsKKwl9CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgbGJuICV1KSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgcm9xLCBza2IsIGxibik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBVcGRhdGUgdGhlIHdpbmRvdyBzdGFydCBpbiBhIHJlb3JkZXIgcXVldWUgYW5kIGRlbGl2ZXIgYWxsIHNrYnMKKyAqIHdpdGggYSBsb3dlciB3aW5kb3cgc3RhcnQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHJvcTogUmVvcmRlciBxdWV1ZQorICogQHNuOiBOZXcgc2VxdWVuY2UgbnVtYmVyCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkgIHVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBvbGRfd3MsIG5zbiwgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNuICV1KVxuIiwgaTI0MDBtLCByb3EsIHNuKTsKKwlvbGRfd3MgPSByb3EtPndzOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV91cGRhdGVfd3MoaTI0MDBtLCByb3EsIHNuKTsKKwlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1dTLAorCQkJICAgICBvbGRfd3MsIGxlbiwgc24sIG5zbiwgcm9xLT53cyk7CisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNuICV1KSA9IHZvaWRcbiIsIGkyNDAwbSwgcm9xLCBzbik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBRdWV1ZSBhIHBhY2tldCBhbmQgdXBkYXRlIHRoZSB3aW5kb3cgc3RhcnQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQGNpbjogUXVldWUgSW5kZXgKKyAqIEBza2I6IGNvbnRhaW5pbmcgdGhlIHBhY2tldCBkYXRhCisgKiBAZmJuOiBGaXJzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKiBAc246IExhc3QgYmxvY2sgbnVtYmVyIG9mIHRoZSBwYWNrZXQgaW4gQHNrYgorICoKKyAqIE5vdGUgdGhhdCB1bmxpa2UgaTI0MDBtX3JvcV91cGRhdGVfd3MoKSwgd2hpY2ggc2V0cyB0aGUgbmV3IHdpbmRvdworICogc3RhcnQgdG8gQHNuLCBpbiBoZXJlIHdlJ2xsIHNldCBpdCB0byBAc24gKyAxLgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9xdWV1ZV91cGRhdGVfd3Moc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xLAorCQkJCXN0cnVjdCBza19idWZmICogc2tiLCB1bnNpZ25lZCBzbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJdW5zaWduZWQgbnNuLCBvbGRfd3MsIGxlbjsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUpXG4iLAorCQkgIGkyNDAwbSwgcm9xLCBza2IsIHNuKTsKKwlsZW4gPSBza2JfcXVldWVfbGVuKCZyb3EtPnF1ZXVlKTsKKwluc24gPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgc24pOworCW9sZF93cyA9IHJvcS0+d3M7CisJaWYgKHVubGlrZWx5KG5zbiA+PSAxMDI0KSkgeworCQlkZXZfZXJyKGRldiwgIlNXIEJVRz8gcXVldWVfdXBkYXRlX3dzIG5zbiAldSAoc24gJXUgd3MgJXUpXG4iLAorCQkJbnNuLCBzbiwgcm9xLT53cyk7CisJCWkyNDAwbV9yb3FfbG9nX2R1bXAoaTI0MDBtLCByb3EpOworCQlpMjQwMG0tPmJ1c19yZXNldChpMjQwMG0sIEkyNDAwTV9SVF9XQVJNKTsKKwl9IGVsc2UgeworCQkvKiBpZiB0aGUgcXVldWUgaXMgZW1wdHksIGRvbid0IGJvdGhlciBhcyB3ZSdkIHF1ZXVlCisJCSAqIGl0IGFuZCBpbm1lZGlhdGVseSB1bnF1ZXVlIGl0IC0tIGp1c3QgZGVsaXZlciBpdCAqLworCQlpZiAobGVuID09IDApIHsKKwkJCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhOworCQkJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwkJCWkyNDAwbV9uZXRfZXJ4KGkyNDAwbSwgc2tiLCByb3FfZGF0YS0+Y3MpOworCQl9CisJCWVsc2UgeworCQkJX19pMjQwMG1fcm9xX3F1ZXVlKGkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCQkJX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc24gKyAxKTsKKwkJfQorCQlpMjQwMG1fcm9xX2xvZ19hZGQoaTI0MDBtLCByb3EsIEkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKKwkJCQkgICBvbGRfd3MsIGxlbiwgc24sIG5zbiwgcm9xLT53cyk7CisJfQorCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc2tiICVwIHNuICV1KSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgcm9xLCBza2IsIHNuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqCisgKiBAaTI0MDBtOiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHNrYl9yeDogc2tiIHRoYXQgY29udGFpbnMgdGhlIGV4dGVuZGVkIGRhdGEgcGFja2V0CisgKiBAc2luZ2xlX2xhc3Q6IDEgaWYgdGhlIHBheWxvYWQgaXMgdGhlIG9ubHkgb25lIG9yIHRoZSBsYXN0IG9uZSBvZgorICogICAgIHRoZSBza2IuCisgKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGFja2V0J3MgZGF0YSBpbnNpZGUgdGhlIHNrYgorICogQHNpemU6IHNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBTdGFydGluZyBpbiB2MS40IG9mIHRoZSBpMjQwMG0ncyBmaXJtd2FyZSwgdGhlIGRldmljZSBjYW4gc2VuZCBkYXRhCisgKiBwYWNrZXRzIHRvIHRoZSBob3N0IGluIGFuIGV4dGVuZGVkIGZvcm1hdCB0aGF0OyB0aGlzIGluY3VkZXMgYSAxNgorICogYnl0ZSBoZWFkZXIgKHN0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyKS4gVXNpbmcgdGhpcyBoZWFkZXIncyBzcGFjZQorICogd2UgY2FuIGZha2UgZXRoZXJuZXQgaGVhZGVycyBmb3IgZXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbiB3aXRob3V0CisgKiBoYXZpbmcgdG8gY29weSBwYWNrZXRzIGFyb3VuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgc2FpZCBwYXRoLgorICoKKyAqCisgKiBSZWNlaXZlIGFuZCBzZW5kIHVwIGFuIGV4dGVuZGVkIGRhdGEgcGFja2V0IHRoYXQgcmVxdWlyZXMgbm8gcmVvcmRlcmluZworICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiX3J4OiBza2IgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqIEBzaW5nbGVfbGFzdDogMSBpZiB0aGUgcGF5bG9hZCBpcyB0aGUgb25seSBvbmUgb3IgdGhlIGxhc3Qgb25lIG9mCisgKiAgICAgdGhlIHNrYi4KKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYWNrZXQncyBkYXRhIChwYXN0IHRoZSBhY3R1YWwgZXh0ZW5kZWQKKyAqICAgICBkYXRhIHBheWxvYWQgaGVhZGVyKS4KKyAqIEBzaXplOiBzaXplIG9mIHRoZSBwYXlsb2FkCisgKgorICogUGFzcyBvdmVyIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGEgZGF0YSBwYWNrZXQgdGhhdCBtaWdodCBoYXZlCisgKiByZW9yZGVyaW5nIHJlcXVpcmVtZW50cy4KKyAqCisgKiBUaGlzIG5lZWRzIHRvIHRoZSBkZWNpZGUgaWYgdGhlIHNrYiBpbiB3aGljaCB0aGUgcGFja2V0IGlzCisgKiBjb250YWluZWQgY2FuIGJlIHJldXNlZCBvciBpZiBpdCBuZWVkcyB0byBiZSBjbG9uZWQuIFRoZW4gaXQgaGFzIHRvCisgKiBiZSB0cmltbWVkIGluIHRoZSBlZGdlcyBzbyB0aGF0IHRoZSBiZWdpbm5pbmcgaXMgdGhlIHNwYWNlIGZvciBldGgKKyAqIGhlYWRlciBhbmQgdGhlbiBwYXNzIGl0IHRvIGkyNDAwbV9uZXRfZXJ4KCkgZm9yIHRoZSBzdGFjaworICoKKyAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgdmVyaWZpZWQgdGhlIHNhbml0eSBvZiB0aGUgcGF5bG9hZCAoc2l6ZSwKKyAqIGV0YykgYWxyZWFkeS4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yeF9lZGF0YShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBza19idWZmICpza2JfcngsCisJCSAgICAgdW5zaWduZWQgc2luZ2xlX2xhc3QsIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwljb25zdCBzdHJ1Y3QgaTI0MDBtX3BsX2VkYXRhX2hkciAqaGRyID0gcGF5bG9hZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwllbnVtIGkyNDAwbV9jcyBjczsKKwl1MzIgcmVvcmRlcjsKKwl1bnNpZ25lZCByb19uZWVkZWQsIHJvX3R5cGUsIHJvX2Npbiwgcm9fc247CisJc3RydWN0IGkyNDAwbV9yb3EgKnJvcTsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YTsKKworCUJVSUxEX0JVR19PTihFVEhfSExFTiA+IHNpemVvZigqaGRyKSk7CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCBza2JfcnggJXAgc2luZ2xlICV1IHBheWxvYWQgJXAgIgorCQkgICJzaXplICV6dSlcbiIsIGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgc2l6ZSk7CisJaWYgKHNpemUgPCBzaXplb2YoKmhkcikpIHsKKwkJZGV2X2VycihkZXYsICJFUlg6IEhXIEJVRz8gbWVzc2FnZSB3aXRoIHNob3J0IGhlYWRlciAoJXp1ICIKKwkJCSJ2cyAlenUgYnl0ZXMgZXhwZWN0ZWQpXG4iLCBzaXplLCBzaXplb2YoKmhkcikpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChzaW5nbGVfbGFzdCkgeworCQlza2IgPSBza2JfZ2V0KHNrYl9yeCk7CisJCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogc2tiICVwIHJldXNpbmdcbiIsIHNrYik7CisJfSBlbHNlIHsKKwkJc2tiID0gc2tiX2Nsb25lKHNrYl9yeCwgR0ZQX0tFUk5FTCk7CisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJFUlg6IG5vIG1lbW9yeSB0byBjbG9uZSBza2JcbiIpOworCQkJbmV0X2Rldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJZ290byBlcnJvcl9za2JfY2xvbmU7CisJCX0KKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBza2IgJXAgY2xvbmVkIGZyb20gJXBcbiIsIHNrYiwgc2tiX3J4KTsKKwl9CisJLyogbm93IHdlIGhhdmUgdG8gcHVsbCBhbmQgdHJpbSBzbyB0aGF0IHRoZSBza2IgcG9pbnRzIHRvIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgSVAgcGFja2V0OyB0aGUgbmV0ZGV2IHBhcnQgd2lsbCBhZGQgdGhlCisJICogZXRoZXJuZXQgaGVhZGVyIGFzIG5lZWRlZCAtIHdlIGtub3cgdGhlcmUgaXMgZW5vdWdoIHNwYWNlCisJICogYmVjYXVzZSB3ZSBjaGVja2VkIGluIGkyNDAwbV9yeF9lZGF0YSgpLiAqLworCXNrYl9wdWxsKHNrYiwgcGF5bG9hZCArIHNpemVvZigqaGRyKSAtICh2b2lkICopIHNrYi0+ZGF0YSk7CisJc2tiX3RyaW0oc2tiLCAodm9pZCAqKSBza2JfZW5kX3BvaW50ZXIoc2tiKSAtIHBheWxvYWQgLSBzaXplb2YoKmhkcikpOworCisJcmVvcmRlciA9IGxlMzJfdG9fY3B1KGhkci0+cmVvcmRlcik7CisJcm9fbmVlZGVkID0gcmVvcmRlciAmIEkyNDAwTV9ST19ORUVERUQ7CisJY3MgPSBoZHItPmNzOworCWlmIChyb19uZWVkZWQpIHsKKwkJcm9fdHlwZSA9IChyZW9yZGVyID4+IEkyNDAwTV9ST19UWVBFX1NISUZUKSAmIEkyNDAwTV9ST19UWVBFOworCQlyb19jaW4gPSAocmVvcmRlciA+PiBJMjQwME1fUk9fQ0lOX1NISUZUKSAmIEkyNDAwTV9ST19DSU47CisJCXJvX3NuID0gKHJlb3JkZXIgPj4gSTI0MDBNX1JPX1NOX1NISUZUKSAmIEkyNDAwTV9ST19TTjsKKworCQlyb3EgPSAmaTI0MDBtLT5yeF9yb3Fbcm9fY2luXTsKKwkJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwkJcm9xX2RhdGEtPnNuID0gcm9fc247CisJCXJvcV9kYXRhLT5jcyA9IGNzOworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJlb3JkZXIgbmVlZGVkOiAiCisJCQkgInR5cGUgJXUgY2luICV1IFt3cyAldV0gc24gJXUvJXUgbGVuICV6dUJcbiIsCisJCQkgcm9fdHlwZSwgcm9fY2luLCByb3EtPndzLCByb19zbiwKKwkJCSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9fc24pLCBzaXplKTsKKwkJZF9kdW1wKDIsIGRldiwgcGF5bG9hZCwgc2l6ZSk7CisJCXN3aXRjaChyb190eXBlKSB7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUkVTRVQ6CisJCQlpMjQwMG1fcm9xX3Jlc2V0KGkyNDAwbSwgcm9xKTsKKwkJCWtmcmVlX3NrYihza2IpOwkvKiBubyBkYXRhIGhlcmUgKi8KKwkJCWJyZWFrOworCQljYXNlIEkyNDAwTV9ST19UWVBFX1BBQ0tFVDoKKwkJCWkyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgcm9fc24pOworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfV1M6CisJCQlpMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgcm9fc24pOworCQkJa2ZyZWVfc2tiKHNrYik7CS8qIG5vIGRhdGEgaGVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTOgorCQkJaTI0MDBtX3JvcV9xdWV1ZV91cGRhdGVfd3MoaTI0MDBtLCByb3EsIHNrYiwgcm9fc24pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGRldiwgIkhXIEJVRz8gdW5rbm93biByZW9yZGVyIHR5cGUgJXVcbiIsIHJvX3R5cGUpOworCQl9CisJfQorCWVsc2UKKwkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2IsIGNzKTsKK2Vycm9yX3NrYl9jbG9uZToKK2Vycm9yOgorCWRfZm5lbmQoMiwgZGV2LCAiKGkyNDAwbSAlcCBza2JfcnggJXAgc2luZ2xlICV1IHBheWxvYWQgJXAgIgorCQkic2l6ZSAlenUpID0gdm9pZFxuIiwgaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBzaXplKTsKKwlyZXR1cm47Cit9CisKKworLyoKICAqIEFjdCBvbiBhIHJlY2VpdmVkIHBheWxvYWQKICAqCiAgKiBAaTI0MDBtOiBkZXZpY2UgaW5zdGFuY2UKICAqIEBza2Jfcng6IHNrYiB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gd2FzIHJlY2VpdmVkCi0gKiBAc2luZ2xlOiAxIGlmIHRoZXJlIGlzIG9ubHkgb25lIHBheWxvYWQsIDAgb3RoZXJ3aXNlCisgKiBAc2luZ2xlX2xhc3Q6IDEgdGhpcyBpcyB0aGUgb25seSBwYXlsb2FkIG9yIHRoZSBsYXN0IG9uZSAoc28gdGhlCisgKiAgICAgc2tiIGNhbiBiZSByZXVzZWQgaW5zdGVhZCBvZiBjbG9uZWQpLgogICogQHBsZDogcGF5bG9hZCBkZXNjcmlwdG9yCiAgKiBAcGF5bG9hZDogcGF5bG9hZCBkYXRhCiAgKgogICogVXBvbiByZWNlcHRpb24gb2YgYSBwYXlsb2FkLCBsb29rIGF0IGl0cyBndXRzIGluIHRoZSBwYXlsb2FkCi0gKiBkZXNjcmlwdG9yIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LgorICogZGVzY3JpcHRvciBhbmQgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdC4gSWYgaXQgaXMgYSBzaW5nbGUgcGF5bG9hZAorICogc2tiIG9yIGlmIHRoZSBsYXN0IHNrYiBpcyBhIGRhdGEgcGFja2V0LCB0aGUgc2tiIHdpbGwgYmUgcmVmZXJlbmNlZAorICogYW5kIG1vZGlmaWVkIChzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgY2xvbmVkKS4KICAqLwogc3RhdGljCiB2b2lkIGkyNDAwbV9yeF9wYXlsb2FkKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYl9yeCwKLQkJICAgICAgIHVuc2lnbmVkIHNpbmdsZSwgY29uc3Qgc3RydWN0IGkyNDAwbV9wbGQgKnBsZCwKKwkJICAgICAgIHVuc2lnbmVkIHNpbmdsZV9sYXN0LCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3BsZCAqcGxkLAogCQkgICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc2l6ZV90IHBsX3NpemUgPSBpMjQwMG1fcGxkX3NpemUocGxkKTsKIAllbnVtIGkyNDAwbV9wdCBwbF90eXBlID0gaTI0MDBtX3BsZF90eXBlKHBsZCk7CiAKKwlkX3ByaW50Zig3LCBkZXYsICJSWDogcmVjZWl2ZWQgcGF5bG9hZCB0eXBlICV1LCAlenUgYnl0ZXNcbiIsCisJCSBwbF90eXBlLCBwbF9zaXplKTsKKwlkX2R1bXAoOCwgZGV2LCBwYXlsb2FkLCBwbF9zaXplKTsKKwogCXN3aXRjaCAocGxfdHlwZSkgewogCWNhc2UgSTI0MDBNX1BUX0RBVEE6CiAJCWRfcHJpbnRmKDMsIGRldiwgIlJYOiBkYXRhIHBheWxvYWQgJXp1IGJ5dGVzXG4iLCBwbF9zaXplKTsKLQkJaTI0MDBtX25ldF9yeChpMjQwMG0sIHNrYl9yeCwgc2luZ2xlLCBwYXlsb2FkLCBwbF9zaXplKTsKKwkJaTI0MDBtX25ldF9yeChpMjQwMG0sIHNrYl9yeCwgc2luZ2xlX2xhc3QsIHBheWxvYWQsIHBsX3NpemUpOwogCQlicmVhazsKIAljYXNlIEkyNDAwTV9QVF9DVFJMOgogCQlpMjQwMG1fcnhfY3RsKGkyNDAwbSwgc2tiX3J4LCBwYXlsb2FkLCBwbF9zaXplKTsKQEAgLTM0OCw2ICsxMDAwLDEwIEBACiAJY2FzZSBJMjQwME1fUFRfVFJBQ0U6CiAJCWkyNDAwbV9yeF90cmFjZShpMjQwMG0sIHBheWxvYWQsIHBsX3NpemUpOwogCQlicmVhazsKKwljYXNlIEkyNDAwTV9QVF9FREFUQToKKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBkYXRhIHBheWxvYWQgJXp1IGJ5dGVzXG4iLCBwbF9zaXplKTsKKwkJaTI0MDBtX3J4X2VkYXRhKGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgcGxfc2l6ZSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CS8qIEFueXRoaW5nIGVsc2Ugc2hvdWxkbid0IGNvbWUgdG8gdGhlIGhvc3QgKi8KIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCWRldl9lcnIoZGV2LCAiUlg6IEhXIEJVRz8gdW5leHBlY3RlZCBwYXlsb2FkIHR5cGUgJXVcbiIsCkBAIC00NzUsNyArMTEzMSw3IEBACiAJY29uc3Qgc3RydWN0IGkyNDAwbV9tc2dfaGRyICptc2dfaGRyOwogCXNpemVfdCBwbF9pdHIsIHBsX3NpemUsIHNrYl9sZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBudW1fcGxzOworCXVuc2lnbmVkIG51bV9wbHMsIHNpbmdsZV9sYXN0OwogCiAJc2tiX2xlbiA9IHNrYi0+bGVuOwogCWRfZm5zdGFydCg0LCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbc2l6ZSAlenVdKVxuIiwKQEAgLTUwNCw3ICsxMTYwLDggQEAKIAkJCQkJCSAgcGxfaXRyLCBza2ItPmxlbik7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZ290byBlcnJvcl9wbF9kZXNjcl9jaGVjazsKLQkJaTI0MDBtX3J4X3BheWxvYWQoaTI0MDBtLCBza2IsIG51bV9wbHMgPT0gMSwgJm1zZ19oZHItPnBsZFtpXSwKKwkJc2luZ2xlX2xhc3QgPSBudW1fcGxzID09IDEgfHwgaSA9PSBudW1fcGxzIC0gMTsKKwkJaTI0MDBtX3J4X3BheWxvYWQoaTI0MDBtLCBza2IsIHNpbmdsZV9sYXN0LCAmbXNnX2hkci0+cGxkW2ldLAogCQkJCSAgc2tiLT5kYXRhICsgcGxfaXRyKTsKIAkJcGxfaXRyICs9IEFMSUdOKHBsX3NpemUsIEkyNDAwTV9QTF9QQUQpOwogCQljb25kX3Jlc2NoZWQoKTsJCS8qIERvbid0IG1vbm9wb2xpemUgKi8KQEAgLTUzMiwzICsxMTg5LDczIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGkyNDAwbV9yeCk7CisKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIFJYIHF1ZXVlIGFuZCBpbmZyYXN0cnVjdHVyZQorICoKKyAqIFRoaXMgc2V0cyB1cCBhbGwgdGhlIFJYIHJlb3JkZXJpbmcgaW5mcmFzdHJ1Y3R1cmVzLCB3aGljaCB3aWxsIG5vdAorICogYmUgdXNlZCBpZiByZW9yZGVyaW5nIGlzIG5vdCBlbmFibGVkIG9yIGlmIHRoZSBmaXJtd2FyZSBkb2VzIG5vdAorICogc3VwcG9ydCBpdC4gVGhlIGRldmljZSBpcyB0b2xkIHRvIGRvIHJlb3JkZXJpbmcgaW4KKyAqIGkyNDAwbV9kZXZfaW5pdGlhbGl6ZSgpLCB3aGVyZSBpdCBhbHNvIGxvb2tzIGF0IHRoZSB2YWx1ZSBvZiB0aGUKKyAqIGkyNDAwbS0+cnhfcmVvcmRlciBzd2l0Y2ggYmVmb3JlIHRha2luZyBhIGRlY2lzc2lvbi4KKyAqCisgKiBOb3RlIHdlIGFsbG9jYXRlIHRoZSByb3EgcXVldWVzIGluIG9uZSBjaHVuayBhbmQgdGhlIGFjdHVhbCBsb2dnaW5nCisgKiBzdXBwb3J0IGZvciBpdCAobG9nZ2luZykgaW4gYW5vdGhlciBvbmUgYW5kIHRoZW4gd2Ugc2V0dXAgdGhlCisgKiBwb2ludGVycyBmcm9tIHRoZSBmaXJzdCB0byB0aGUgbGFzdC4KKyAqLworaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCisJaTI0MDBtLT5yeF9yZW9yZGVyID0gaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQ/IDAgOiAxOworCWlmIChpMjQwMG0tPnJ4X3Jlb3JkZXIpIHsKKwkJdW5zaWduZWQgaXRyOworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IGkyNDAwbV9yb3FfbG9nICpyZDsKKworCQlyZXN1bHQgPSAtRU5PTUVNOworCisJCXNpemUgPSBzaXplb2YoaTI0MDBtLT5yeF9yb3FbMF0pICogKEkyNDAwTV9ST19DSU4gKyAxKTsKKwkJaTI0MDBtLT5yeF9yb3EgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoaTI0MDBtLT5yeF9yb3EgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJSWDogY2Fubm90IGFsbG9jYXRlICV6dSBieXRlcyBmb3IgIgorCQkJCSJyZW9yZGVyIHF1ZXVlc1xuIiwgc2l6ZSk7CisJCQlnb3RvIGVycm9yX3JvcV9hbGxvYzsKKwkJfQorCisJCXNpemUgPSBzaXplb2YoKmkyNDAwbS0+cnhfcm9xWzBdLmxvZykgKiAoSTI0MDBNX1JPX0NJTiArIDEpOworCQlyZCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciAiCisJCQkJInJlb3JkZXIgcXVldWVzIGxvZyBhcmVhc1xuIiwgc2l6ZSk7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcl9yb3FfbG9nX2FsbG9jOworCQl9CisKKwkJZm9yKGl0ciA9IDA7IGl0ciA8IEkyNDAwTV9ST19DSU4gKyAxOyBpdHIrKykgeworCQkJX19pMjQwMG1fcm9xX2luaXQoJmkyNDAwbS0+cnhfcm9xW2l0cl0pOworCQkJaTI0MDBtLT5yeF9yb3FbaXRyXS5sb2cgPSAmcmRbaXRyXTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyb3Jfcm9xX2xvZ19hbGxvYzoKKwlrZnJlZShpMjQwMG0tPnJ4X3JvcSk7CitlcnJvcl9yb3FfYWxsb2M6CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBUZWFyIGRvd24gdGhlIFJYIHF1ZXVlIGFuZCBpbmZyYXN0cnVjdHVyZSAqLwordm9pZCBpMjQwMG1fcnhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0pCit7CisJaWYgKGkyNDAwbS0+cnhfcmVvcmRlcikgeworCQl1bnNpZ25lZCBpdHI7CisJCWZvcihpdHIgPSAwOyBpdHIgPCBJMjQwME1fUk9fQ0lOICsgMTsgaXRyKyspCisJCQlfX3NrYl9xdWV1ZV9wdXJnZSgmaTI0MDBtLT5yeF9yb3FbaXRyXS5xdWV1ZSk7CisJCWtmcmVlKGkyNDAwbS0+cnhfcm9xWzBdLmxvZyk7CisJCWtmcmVlKGkyNDAwbS0+cnhfcm9xKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYwppbmRleCAxYmZhMjgzLi41YWM1ZTc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCkBAIC03MCw4ICs3MCwxMyBAQAogc3RhdGljIGludCBpb2VfdGltZW91dCA9IDI7CiBtb2R1bGVfcGFyYW0oaW9lX3RpbWVvdXQsIGludCwgMCk7CiAKLS8qIE91ciBmaXJtd2FyZSBmaWxlIG5hbWUgKi8KLSNkZWZpbmUgSTI0MDBNU19GV19GSUxFX05BTUUgImkyNDAwbS1mdy1zZGlvLSIgSTI0MDBNX0ZXX1ZFUlNJT04gIi5zYmNmIgorLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSBsaXN0ICovCitzdGF0aWMgY29uc3QgY2hhciAqaTI0MDBtc19idXNfZndfbmFtZXNbXSA9IHsKKyNkZWZpbmUgSTI0MDBNU19GV19GSUxFX05BTUUgImkyNDAwbS1mdy1zZGlvLTEuMy5zYmNmIgorCUkyNDAwTVNfRldfRklMRV9OQU1FLAorCU5VTEwKK307CisKIAogLyoKICAqIEVuYWJsZSB0aGUgU0RJTyBmdW5jdGlvbgpAQCAtMjU1LDE2ICsyNjAsMTYgQEAKIAkJY29udGFpbmVyX29mKGkyNDAwbSwgc3RydWN0IGkyNDAwbXMsIGkyNDAwbSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX1dBUk1fQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKIAl9OwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0NPTERfQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKIAl9OwogCiAJaWYgKHJ0ID09IEkyNDAwTV9SVF9XQVJNKQpAQCAtNDAxLDcgKzQwNiw3IEBACiAJaTI0MDBtLT5idXNfcmVzZXQgPSBpMjQwMG1zX2J1c19yZXNldDsKIAlpMjQwMG0tPmJ1c19ibV9jbWRfc2VuZCA9IGkyNDAwbXNfYnVzX2JtX2NtZF9zZW5kOwogCWkyNDAwbS0+YnVzX2JtX3dhaXRfZm9yX2FjayA9IGkyNDAwbXNfYnVzX2JtX3dhaXRfZm9yX2FjazsKLQlpMjQwMG0tPmJ1c19md19uYW1lID0gSTI0MDBNU19GV19GSUxFX05BTUU7CisJaTI0MDBtLT5idXNfZndfbmFtZXMgPSBpMjQwMG1zX2J1c19md19uYW1lczsKIAlpMjQwMG0tPmJ1c19ibV9tYWNfYWRkcl9pbXBhaXJlZCA9IDE7CiAKIAlyZXN1bHQgPSBpMjQwMG1zX2VuYWJsZV9mdW5jdGlvbihpMjQwMG1zLT5mdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zeXNmcy5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zeXNmcy5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBJbnRlbCBXaXJlbGVzcyBXaU1BWCBDb25uZWN0aW9uIDI0MDBtCisgKiBTeXNmcyBpbnRlcmZhY2VzIHRvIHNob3cgZHJpdmVyIGFuZCBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+CisgKiBJbmFreSBQZXJlei1Hb256YWxleiA8aW5ha3kucGVyZXotZ29uemFsZXpAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgImkyNDAwbS5oIgorCisKKyNkZWZpbmUgRF9TVUJNT0RVTEUgc3lzZnMKKyNpbmNsdWRlICJkZWJ1Zy1sZXZlbHMuaCIKKworCisvKgorICogU2V0IHRoZSBpZGxlIHRpbWVvdXQgKG1zZWNzKQorICoKKyAqIEZJWE1FOiBldmVudHVhbGx5IHRoaXMgc2hvdWxkIGJlIGEgY29tbW9uIFdpTUFYIHN0YWNrIG1ldGhvZCwgYnV0CisgKiB3b3VsZCBsaWtlIHRvIHdhaXQgdG8gc2VlIGhvdyBvdGhlciBkZXZpY2VzIG1hbmFnZSBpdC4KKyAqLworc3RhdGljCitzc2l6ZV90IGkyNDAwbV9pZGxlX3RpbWVvdXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNzaXplX3QgcmVzdWx0OworCXN0cnVjdCBpMjQwMG0gKmkyNDAwbSA9IG5ldF9kZXZfdG9faTI0MDBtKHRvX25ldF9kZXYoZGV2KSk7CisJdW5zaWduZWQgdmFsOworCisJcmVzdWx0ID0gLUVJTlZBTDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV1XG4iLCAmdmFsKSAhPSAxKQorCQlnb3RvIGVycm9yX25vX3Vuc2lnbmVkOworCWlmICh2YWwgIT0gMCAmJiAodmFsIDwgMTAwIHx8IHZhbCA+IDMwMDAwMCB8fCB2YWwgJSAxMDAgIT0gMCkpIHsKKwkJZGV2X2VycihkZXYsICJpZGxlX3RpbWVvdXQ6ICV1OiBpbnZhbGlkIG1zZWNzIHNwZWNpZmljYXRpb247ICIKKwkJCSJ2YWxpZCB2YWx1ZXMgYXJlIDAsIDEwMC0zMDAwMDAgaW4gMTAwIGluY3JlbWVudHNcbiIsCisJCQl2YWwpOworCQlnb3RvIGVycm9yX2JhZF92YWx1ZTsKKwl9CisJcmVzdWx0ID0gaTI0MDBtX3NldF9pZGxlX3RpbWVvdXQoaTI0MDBtLCB2YWwpOworCWlmIChyZXN1bHQgPj0gMCkKKwkJcmVzdWx0ID0gc2l6ZTsKK2Vycm9yX25vX3Vuc2lnbmVkOgorZXJyb3JfYmFkX3ZhbHVlOgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYworREVWSUNFX0FUVFIoaTI0MDBtX2lkbGVfdGltZW91dCwgU19JV1VTUiwKKwkgICAgTlVMTCwgaTI0MDBtX2lkbGVfdGltZW91dF9zdG9yZSk7CisKK3N0YXRpYworc3RydWN0IGF0dHJpYnV0ZSAqaTI0MDBtX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9pMjQwMG1faWRsZV90aW1lb3V0LmF0dHIsCisJTlVMTCwKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTI0MDBtX2Rldl9hdHRyX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwJCS8qIHdlIHdhbnQgdGhlbSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBpMjQwMG1fZGV2X2F0dHJzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2Itbm90aWYuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2Itbm90aWYuYwppbmRleCA5NzAyYzIyYi4uNmFkZDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2Itbm90aWYuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyBVbmtub3duL3VuZXhwZWN0ZWQgZGF0YSBpbiBub3RpZmljYXRpb24gIgogCQkJIm1lc3NhZ2UgKCV6dSBieXRlcylcbiIsIGJ1Zl9sZW4pOwogCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAiJXMgJXM6ICIsCi0JCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSAsIGRldi0+YnVzX2lkKTsKKwkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXZfbmFtZShkZXYpKTsKIAkJaWYgKGJ1Zl9sZW4gPiA2NCkgewogCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsIHByZWZpeCwgRFVNUF9QUkVGSVhfT0ZGU0VULAogCQkJCSAgICAgICA4LCA0LCBidWYsIDY0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYwppbmRleCBjNmQ5MzQ2Li5jYTQxNTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCkBAIC03Myw3ICs3MywxNCBAQAogCiAKIC8qIE91ciBmaXJtd2FyZSBmaWxlIG5hbWUgKi8KLSNkZWZpbmUgSTI0MDBNVV9GV19GSUxFX05BTUUgImkyNDAwbS1mdy11c2ItIiBJMjQwME1fRldfVkVSU0lPTiAiLnNiY2YiCitzdGF0aWMgY29uc3QgY2hhciAqaTI0MDBtdV9idXNfZndfbmFtZXNbXSA9IHsKKyNkZWZpbmUgSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfNCAiaTI0MDBtLWZ3LXVzYi0xLjQuc2JjZiIKKwlJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80LAorI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zICJpMjQwMG0tZnctdXNiLTEuMy5zYmNmIgorCUkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzMsCisJTlVMTCwKK307CisKIAogc3RhdGljCiBpbnQgaTI0MDBtdV9idXNfZGV2X3N0YXJ0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKQEAgLTIxMSwxNiArMjE4LDE2IEBACiAJCWNvbnRhaW5lcl9vZihpMjQwMG0sIHN0cnVjdCBpMjQwMG11LCBpMjQwMG0pOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9XQVJNX0JPT1RfQkFSS0VSWzRdID0gewotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCiAJfTsKIAlzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9DT0xEX0JPT1RfQkFSS0VSWzRdID0gewotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCisJCWNwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCiAJfTsKIAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwIHJ0ICV1KVxuIiwgaTI0MDBtLCBydCk7CkBAIC0zOTQsNyArNDAxLDcgQEAKIAlpMjQwMG0tPmJ1c19yZXNldCA9IGkyNDAwbXVfYnVzX3Jlc2V0OwogCWkyNDAwbS0+YnVzX2JtX2NtZF9zZW5kID0gaTI0MDBtdV9idXNfYm1fY21kX3NlbmQ7CiAJaTI0MDBtLT5idXNfYm1fd2FpdF9mb3JfYWNrID0gaTI0MDBtdV9idXNfYm1fd2FpdF9mb3JfYWNrOwotCWkyNDAwbS0+YnVzX2Z3X25hbWUgPSBJMjQwME1VX0ZXX0ZJTEVfTkFNRTsKKwlpMjQwMG0tPmJ1c19md19uYW1lcyA9IGkyNDAwbXVfYnVzX2Z3X25hbWVzOwogCWkyNDAwbS0+YnVzX2JtX21hY19hZGRyX2ltcGFpcmVkID0gMDsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNTk0LDQgKzYwMSw1IEBACiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiA8bGludXgtd2ltYXhAaW50ZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCAyNDAwTSBXaU1BWCBuZXR3b3JraW5nIGZvciBVU0IiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRSk7CitNT0RVTEVfRklSTVdBUkUoSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfNCk7CitNT0RVTEVfRklSTVdBUkUoSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfMyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCBlNGY5Zjc0Li44YTA4MjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTE1MSw2ICsxNTEsMTIgQEAKIAktLS1oZWxwLS0tCiAJICBBIGRyaXZlciBmb3IgTWFydmVsbCBMaWJlcnRhcyA4Mzg1IGFuZCA4Njg2IFNESU8gZGV2aWNlcy4KIAorY29uZmlnIExJQkVSVEFTX1NQSQorCXRyaXN0YXRlICJNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIDgwMi4xMWIvZyBjYXJkcyIKKwlkZXBlbmRzIG9uIExJQkVSVEFTICYmIFNQSSAmJiBHRU5FUklDX0dQSU8KKwktLS1oZWxwLS0tCisJICBBIGRyaXZlciBmb3IgTWFydmVsbCBMaWJlcnRhcyA4Njg2IFNQSSBkZXZpY2VzLgorCiBjb25maWcgTElCRVJUQVNfREVCVUcKIAlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBMaWJlcnRhcyBtb2R1bGUuIgogCWRlcGVuZHMgb24gTElCRVJUQVMKQEAgLTE4OCwxMjcgKzE5NCw2IEBACiAKIAkgIFRoZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB3aWxsIGJlIG5hbWVkICJhaXJvIi4KIAotY29uZmlnIEhFUk1FUwotCXRyaXN0YXRlICJIZXJtZXMgY2hpcHNldCA4MDIuMTFiIHN1cHBvcnQgKE9yaW5vY28vUHJpc20yL1N5bWJvbCkiCi0JZGVwZW5kcyBvbiAoUFBDX1BNQUMgfHwgUENJIHx8IFBDTUNJQSkgJiYgV0xBTl84MDIxMQotCXNlbGVjdCBXSVJFTEVTU19FWFQKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IENSWVBUTwotCXNlbGVjdCBDUllQVE9fTUlDSEFFTF9NSUMKLQktLS1oZWxwLS0tCi0JICBBIGRyaXZlciBmb3IgODAyLjExYiB3aXJlbGVzcyBjYXJkcyBiYXNlZCBvbiB0aGUgIkhlcm1lcyIgb3IKLQkgIEludGVyc2lsIEhGQTM4NHggKFByaXNtIDIpIE1BQyBjb250cm9sbGVyLiAgVGhpcyBpbmNsdWRlcyB0aGUgdmFzdAotCSAgbWFqb3JpdHkgb2YgdGhlIFBDTUNJQSA4MDIuMTFiIGNhcmRzICh3aGljaCBhcmUgbmVhcmx5IGFsbCByZWJhZGdlcykKLQkgIC0gZXhjZXB0IGZvciB0aGUgQ2lzY28vQWlyb25ldCBjYXJkcy4gIENhcmRzIHN1cHBvcnRlZCBpbmNsdWRlIHRoZQotCSAgQXBwbGUgQWlycG9ydCAobm90IGEgUENNQ0lBIGNhcmQpLCBXYXZlbGFuSUVFRS9Pcmlub2NvLAotCSAgQ2FibGV0cm9uL0VudGVyYVN5cyBSb2FtYWJvdXQsIEVMU0EgQWlyTGFuY2VyLCBNRUxDTyBCdWZmYWxvLCBBdmF5YSwKLQkgIElCTSBIaWdoIFJhdGUgV2lyZWxlc3MsIEZhcnJhbG9uIFN5eWxpbmUsIFNhbXN1bmcgTWFnaWNMQU4sIE5ldGdlYXIKLQkgIE1BNDAxLCBMaW5rU3lzIFdQQy0xMSwgRC1MaW5rIERXTC02NTAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwKLQkgIElQVzIwMTEsIGFuZCBTeW1ib2wgU3BlY3RydW0yNCBIaWdoIFJhdGUgYW1vbmdzdCBvdGhlcnMuCi0KLQkgIFRoaXMgb3B0aW9uIGluY2x1ZGVzIHRoZSBndXRzIG9mIHRoZSBkcml2ZXIsIGJ1dCBpbiBvcmRlciB0bwotCSAgYWN0dWFsbHkgdXNlIGEgY2FyZCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQQotCSAgSGVybWVzIGNhcmRzLCBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9ycyBvciB0aGUgQXBwbGUgQWlycG9ydCBiZWxvdy4KLQotCSAgWW91IHdpbGwgYWxzbyB2ZXJ5IGxpa2VseSBhbHNvIG5lZWQgdGhlIFdpcmVsZXNzIFRvb2xzIGluIG9yZGVyIHRvCi0JICBjb25maWd1cmUgeW91ciBjYXJkIGFuZCB0aGF0IC9ldGMvcGNtY2lhL3dpcmVsZXNzLm9wdHMgd29ya3MgOgotCSAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4KLQotY29uZmlnIEhFUk1FU19DQUNIRV9GV19PTl9JTklUCi0JYm9vbCAiQ2FjaGUgSGVybWVzIGZpcm13YXJlIG9uIGRyaXZlciBpbml0aWFsaXNhdGlvbiIKLQlkZXBlbmRzIG9uIEhFUk1FUwotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIFNheSBZIHRvIGNhY2hlIGFueSBmaXJtd2FyZSByZXF1aXJlZCBieSB0aGUgSGVybWVzIGRyaXZlcnMKLQkgIG9uIHN0YXJ0dXAuICBUaGUgZmlybXdhcmUgd2lsbCByZW1haW4gY2FjaGVkIHVudGlsIHRoZQotCSAgZHJpdmVyIGlzIHVubG9hZGVkLiAgVGhlIGNhY2hlIHVzZXMgNjRLIG9mIFJBTS4KLQotCSAgT3RoZXJ3aXNlIGxvYWQgdGhlIGZpcm13YXJlIGZyb20gdXNlcnNwYWNlIGFzIHJlcXVpcmVkLiAgSW4KLQkgIHRoaXMgY2FzZSB0aGUgZHJpdmVyIHNob3VsZCBiZSB1bmxvYWRlZCBhbmQgcmVzdGFydGVkCi0JICB3aGVuZXZlciB0aGUgZmlybXdhcmUgaXMgY2hhbmdlZC4KLQotCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkuCi0KLWNvbmZpZyBBUFBMRV9BSVJQT1JUCi0JdHJpc3RhdGUgIkFwcGxlIEFpcnBvcnQgc3VwcG9ydCAoYnVpbHQtaW4pIgotCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgSEVSTUVTCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBaXJwb3J0IDgwMi4xMWIgd2lyZWxlc3MgRXRoZXJuZXQgaGFyZHdhcmUKLQkgIGJ1aWx0IGludG8gdGhlIE1hY2ludG9zaCBpQm9vayBhbmQgb3RoZXIgcmVjZW50IFBvd2VyUEMtYmFzZWQKLQkgIE1hY2ludG9zaCBtYWNoaW5lcy4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIEx1Y2VudCBPcmlub2NvIGNhcmQgd2l0aCAKLQkgIGEgbm9uLXN0YW5kYXJkIGludGVyZmFjZS4KLQotCSAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQWlycG9ydCBFeHRyZW1lICg4MDIuMTFiL2cpLiBVc2UKLQkgIHRoZSBCQ000M3h4IGRyaXZlciBmb3IgQWlycG9ydCBFeHRyZW1lIGNhcmRzLgotCi1jb25maWcgUExYX0hFUk1FUwotCXRyaXN0YXRlICJIZXJtZXMgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvciBzdXBwb3J0IChOZXRnZWFyIE1BMzAxIGV0Yy4pIgotCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUwotCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoZSAiSGVybWVzIiAoYWthCi0JICBvcmlub2NvKSBkcml2ZXIgd2hlbiB1c2VkIGluIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzLiAgVGhlc2UKLQkgIGFkYXB0b3JzIGFyZSBub3QgYSBmdWxsIFBDTUNJQSBjb250cm9sbGVyIGJ1dCBhY3QgYXMgYSBtb3JlIGxpbWl0ZWQKLQkgIFBDSSA8LT4gUENNQ0lBIGJyaWRnZS4gIFNldmVyYWwgdmVuZG9ycyBzZWxsIHN1Y2ggYWRhcHRvcnMgc28gdGhhdAotCSAgODAyLjExYiBQQ01DSUEgY2FyZHMgY2FuIGJlIHVzZWQgaW4gZGVza3RvcCBtYWNoaW5lcy4gIFRoZSBOZXRnZWFyCi0JICBNQTMwMSBpcyBzdWNoIGFuIGFkYXB0b3IuCi0KLWNvbmZpZyBUTURfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKLQkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gVE1ENzE2MCBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQotCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAotCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0Ci0JICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLgotCi1jb25maWcgTk9SVEVMX0hFUk1FUwotCXRyaXN0YXRlICJOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKLQkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gTm9ydGVsIGVtb2JpbGl0eSBQQ0kgYWRhcHRvcnMuICBUaGVzZQotCSAgYWRhcHRvcnMgYXJlIG5vdCBmdWxsIFBDTUNJQSBjb250cm9sbGVycywgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAotCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLgotCi1jb25maWcgUENJX0hFUk1FUwotCXRyaXN0YXRlICJQcmlzbSAyLjUgUENJIDgwMi4xMWIgYWRhcHRvciBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUwotCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ0kgYW5kIG1pbmktUENJIDgwMi4xMWIgd2lyZWxlc3MgTklDcyBiYXNlZCBvbgotCSAgdGhlIFByaXNtIDIuNSBjaGlwc2V0LiAgVGhlc2UgYXJlIHRydWUgUENJIGNhcmRzLCBub3QgdGhlIDgwMi4xMWIKLQkgIFBDTUNJQSBjYXJkcyBidW5kbGVkIHdpdGggUENJPC0+UENNQ0lBIGFkYXB0b3JzIHdoaWNoIGFyZSBhbHNvCi0JICBjb21tb24uICBTb21lIG9mIHRoZSBidWlsdC1pbiB3aXJlbGVzcyBhZGFwdG9ycyBpbiBsYXB0b3BzIGFyZSBvZgotCSAgdGhpcyB2YXJpZXR5LgotCi1jb25maWcgUENNQ0lBX0hFUk1FUwotCXRyaXN0YXRlICJIZXJtZXMgUENNQ0lBIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKLQktLS1oZWxwLS0tCi0JICBBIGRyaXZlciBmb3IgIkhlcm1lcyIgY2hpcHNldCBiYXNlZCBQQ01DSUEgd2lyZWxlc3MgYWRhcHRvcnMsIHN1Y2gKLQkgIGFzIHRoZSBMdWNlbnQgV2F2ZWxhbklFRUUvT3Jpbm9jbyBjYXJkcyBhbmQgdGhlaXIgT0VNIChDYWJsZXRyb24vCi0JICBFbnRlcmFTeXMgUm9hbUFib3V0IDgwMi4xMSwgRUxTQSBBaXJsYW5jZXIsIE1lbGNvIEJ1ZmZhbG8gYW5kCi0JICBvdGhlcnMpLiAgSXQgc2hvdWxkIGFsc28gYmUgdXNhYmxlIG9uIHZhcmlvdXMgUHJpc20gSUkgYmFzZWQgY2FyZHMKLQkgIHN1Y2ggYXMgdGhlIExpbmtzeXMsIEQtTGluayBhbmQgRmFyYWxsb24gU2t5bGluZS4gIEl0IHNob3VsZCBhbHNvCi0JICB3b3JrIG9uIFN5bWJvbCBjYXJkcyBzdWNoIGFzIHRoZSAzQ29tIEFpckNvbm5lY3QgYW5kIEVyaWNzc29uIFdMQU4uCi0KLQkgIFlvdSB3aWxsIHZlcnkgbGlrZWx5IG5lZWQgdGhlIFdpcmVsZXNzIFRvb2xzIGluIG9yZGVyIHRvCi0JICBjb25maWd1cmUgeW91ciBjYXJkIGFuZCB0aGF0IC9ldGMvcGNtY2lhL3dpcmVsZXNzLm9wdHMgd29ya3M6Ci0JICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPi4KLQotY29uZmlnIFBDTUNJQV9TUEVDVFJVTQotCXRyaXN0YXRlICJTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5IFBDTUNJQSBjYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ01DSUEgJiYgSEVSTUVTCi0JLS0taGVscC0tLQotCi0JICBUaGlzIGlzIGEgZHJpdmVyIGZvciA4MDIuMTFiIGNhcmRzIHVzaW5nIFJBTS1sb2FkYWJsZSBTeW1ib2wKLQkgIGZpcm13YXJlLCBzdWNoIGFzIFN5bWJvbCBXaXJlbGVzcyBOZXR3b3JrZXIgTEE0MTAwLCBDb21wYWN0Rmxhc2gKLQkgIGNhcmRzIGJ5IFNvY2tldCBDb21tdW5pY2F0aW9ucyBhbmQgSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCLgotCi0JICBUaGlzIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBkb3dubG9hZCBvbiBzdGFydHVwLiAgVXRpbGl0aWVzCi0JICBmb3IgZG93bmxvYWRpbmcgU3ltYm9sIGZpcm13YXJlIGFyZSBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL29yaW5vY28vPgotCiBjb25maWcgQVRNRUwKICAgICAgIHRyaXN0YXRlICJBdG1lbCBhdDc2YzUweCBjaGlwc2V0ICA4MDIuMTFiIHN1cHBvcnQiCiAgICAgICBkZXBlbmRzIG9uIChQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCkBAIC0zNDMsNiArMjI4LDE0IEBACiAJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIGNvbnRhaW5pbmcgdGhlCiAJICBBdG1lbCBhdDc2YzUwMiBhbmQgYXQ3NmM1MDQgY2hpcHMuCiAKK2NvbmZpZyBBVDc2QzUwWF9VU0IKKyAgICAgICAgdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTAzL2F0NzZjNTA1L2F0NzZjNTA1YSBVU0IgY2FyZHMiCisgICAgICAgIGRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBVU0IKKyAgICAgICAgc2VsZWN0IEZXX0xPQURFUgorICAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICAgRW5hYmxlIHN1cHBvcnQgZm9yIFVTQiBXaXJlbGVzcyBkZXZpY2VzIHVzaW5nIEF0bWVsIGF0NzZjNTAzLAorICAgICAgICAgIGF0NzZjNTA1IG9yIGF0NzZjNTA1YSBjaGlwcy4KKwogY29uZmlnIEFJUk9fQ1MKIAl0cmlzdGF0ZSAiQ2lzY28vQWlyb25ldCAzNFgvMzVYLzQ1MDAvNDgwMCBQQ01DSUEgY2FyZHMiCiAJZGVwZW5kcyBvbiBQQ01DSUEgJiYgKEJST0tFTiB8fCAhTTMyUikgJiYgV0xBTl84MDIxMQpAQCAtNTgwLDkgKzQ3MywxOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTVdMOEsKKwl0cmlzdGF0ZSAiTWFydmVsbCA4OFc4eHh4IFBDSS9QQ0llIFdpcmVsZXNzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBQQ0kgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsIFRPUERPRyA4MDIuMTEgd2lyZWxlc3MgY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG13bDhrLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvS2NvbmZpZyIKQEAgLTU5MCw1ICs0OTMsNiBAQAogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCBhYzU5MGUxYy4uNTBlN2ZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDggQEAKIG9iai0kKENPTkZJR19QQ0lfQVRNRUwpICAgICAgICAgKz0gYXRtZWxfcGNpLm8gCiBvYmotJChDT05GSUdfUENNQ0lBX0FUTUVMKSAgICAgICs9IGF0bWVsX2NzLm8KIAorb2JqLSQoQ09ORklHX0FUNzZDNTBYX1VTQikgICAgICArPSBhdDc2YzUweC11c2IubworCiBvYmotJChDT05GSUdfUFJJU001NCkJCSs9IHByaXNtNTQvCiAKIG9iai0kKENPTkZJR19IT1NUQVApCQkrPSBob3N0YXAvCkBAIC00Niw2ICs0OCw4IEBACiAKIG9iai0kKENPTkZJR19BRE04MjExKQkrPSBhZG04MjExLm8KIAorb2JqLSQoQ09ORklHX01XTDhLKQkrPSBtd2w4ay5vCisKIG9iai0kKENPTkZJR19JV0xXSUZJKQkrPSBpd2x3aWZpLwogb2JqLSQoQ09ORklHX1JUMlgwMCkJKz0gcnQyeDAwLwogCkBAIC01Myw1ICs1Nyw2IEBACiAKIG9iai0kKENPTkZJR19BVEg1SykJKz0gYXRoNWsvCiBvYmotJChDT05GSUdfQVRIOUspCSs9IGF0aDlrLworb2JqLSQoQ09ORklHX0FSOTE3MF9VU0IpCSs9IGFyOTE3MC8KIAogb2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKQkrPSBtYWM4MDIxMV9od3NpbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggZmM0MzIyYy4uN2U4MGFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNDk2LDM5ICs0OTYsNDEgQEAKICAqIHNvIGFsbCByaWQgYWNjZXNzIHNob3VsZCB1c2UgdGhlIHJlYWQvd3JpdGVYWFhSaWQgcm91dGluZXMuCiAgKi8KIAotLyogVGhpcyBpcyByZWR1bmRhbnQgZm9yIHg4NiBhcmNocywgYnV0IGl0IHNlZW1zIG5lY2Vzc2FyeSBmb3IgQVJNICovCi0jcHJhZ21hIHBhY2soMSkKLQogLyogVGhpcyBzdHJ1Y3R1cmUgY2FtZSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gbWUgZnJvbSBhbiBlbmdpbmVlciBhdAogICAgYWlyb25ldCBmb3IgaW5jbHVzaW9uIGludG8gdGhpcyBkcml2ZXIgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IFdlcEtleVJpZCBXZXBLZXlSaWQ7CitzdHJ1Y3QgV2VwS2V5UmlkIHsKIAlfX2xlMTYgbGVuOwogCV9fbGUxNiBraW5kZXg7CiAJdTggbWFjW0VUSF9BTEVOXTsKIAlfX2xlMTYga2xlbjsKIAl1OCBrZXlbMTZdOwotfSBXZXBLZXlSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVGhlc2Ugc3RydWN0dXJlcyBhcmUgZnJvbSB0aGUgQWlyb25ldCdzIFBDNDUwMCBEZXZlbG9wZXJzIE1hbnVhbCAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgU3NpZCBTc2lkOworc3RydWN0IFNzaWQgewogCV9fbGUxNiBsZW47CiAJdTggc3NpZFszMl07Ci19IFNzaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgU3NpZFJpZCBTc2lkUmlkOworc3RydWN0IFNzaWRSaWQgewogCV9fbGUxNiBsZW47CiAJU3NpZCBzc2lkc1szXTsKLX0gU3NpZFJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBNb2R1bGF0aW9uUmlkIE1vZHVsYXRpb25SaWQ7CitzdHJ1Y3QgTW9kdWxhdGlvblJpZCB7CiAgICAgICAgIF9fbGUxNiBsZW47CiAgICAgICAgIF9fbGUxNiBtb2R1bGF0aW9uOwogI2RlZmluZSBNT0RfREVGQVVMVCBjcHVfdG9fbGUxNigwKQogI2RlZmluZSBNT0RfQ0NLIGNwdV90b19sZTE2KDEpCiAjZGVmaW5lIE1PRF9NT0sgY3B1X3RvX2xlMTYoMikKLX0gTW9kdWxhdGlvblJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBDb25maWdSaWQgQ29uZmlnUmlkOworc3RydWN0IENvbmZpZ1JpZCB7CiAJX19sZTE2IGxlbjsgLyogc2l6ZW9mKENvbmZpZ1JpZCkgKi8KIAlfX2xlMTYgb3Btb2RlOyAvKiBvcGVyYXRpbmcgbW9kZSAqLwogI2RlZmluZSBNT0RFX1NUQV9JQlNTIGNwdV90b19sZTE2KDApCkBAIC02NDksOSArNjUxLDEwIEBACiAjZGVmaW5lIE1BR0lDX1NUQVlfSU5fQ0FNICgxPDwxMCkKIAl1OCBtYWdpY0NvbnRyb2w7CiAJX19sZTE2IGF1dG9XYWtlOwotfSBDb25maWdSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgU3RhdHVzUmlkIFN0YXR1c1JpZDsKK3N0cnVjdCBTdGF0dXNSaWQgewogCV9fbGUxNiBsZW47CiAJdTggbWFjW0VUSF9BTEVOXTsKIAlfX2xlMTYgbW9kZTsKQEAgLTcwNywyMSArNzEwLDIzIEBACiAjZGVmaW5lIFNUQVRfTEVBUEZBSUxFRCA5MQogI2RlZmluZSBTVEFUX0xFQVBUSU1FRE9VVCA5MgogI2RlZmluZSBTVEFUX0xFQVBDT01QTEVURSA5MwotfSBTdGF0dXNSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgU3RhdHNSaWQgU3RhdHNSaWQ7CitzdHJ1Y3QgU3RhdHNSaWQgewogCV9fbGUxNiBsZW47CiAJX19sZTE2IHNwYWNlcjsKIAlfX2xlMzIgdmFsc1sxMDBdOwotfSBTdGF0c1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IEFQTGlzdFJpZCBBUExpc3RSaWQ7CitzdHJ1Y3QgQVBMaXN0UmlkIHsKIAlfX2xlMTYgbGVuOwogCXU4IGFwWzRdW0VUSF9BTEVOXTsKLX0gQVBMaXN0UmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IENhcGFiaWxpdHlSaWQgQ2FwYWJpbGl0eVJpZDsKK3N0cnVjdCBDYXBhYmlsaXR5UmlkIHsKIAlfX2xlMTYgbGVuOwogCWNoYXIgb3VpWzNdOwogCWNoYXIgemVybzsKQEAgLTc0OCwxNyArNzUzLDE4IEBACiAJX19sZTE2IGJvb3RCbG9ja1ZlcjsKIAlfX2xlMTYgcmVxdWlyZWRIYXJkOwogCV9fbGUxNiBleHRTb2Z0Q2FwOwotfSBDYXBhYmlsaXR5UmlkOwotCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogT25seSBwcmVzZW50IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IEJTU0xpc3RSaWRFeHRyYSBCU1NMaXN0UmlkRXh0cmE7CitzdHJ1Y3QgQlNTTGlzdFJpZEV4dHJhIHsKICAgX19sZTE2IHVua25vd25bNF07CiAgIHU4IGZpeGVkWzEyXTsgLyogV0xBTiBtYW5hZ2VtZW50IGZyYW1lICovCiAgIHU4IGllcFs2MjRdOwotfSBCU1NMaXN0UmlkRXh0cmE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQlNTTGlzdFJpZCBCU1NMaXN0UmlkOworc3RydWN0IEJTU0xpc3RSaWQgewogICBfX2xlMTYgbGVuOwogICBfX2xlMTYgaW5kZXg7IC8qIEZpcnN0IGlzIDAgYW5kIDB4ZmZmZiBtZWFucyBlbmQgb2YgbGlzdCAqLwogI2RlZmluZSBSQURJT19GSCAxIC8qIEZyZXF1ZW5jeSBob3BwaW5nIHJhZGlvIHR5cGUgKi8KQEAgLTc4OSwzMyArNzk1LDM3IEBACiAKICAgLyogT25seSBwcmVzZW50IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KICAgQlNTTGlzdFJpZEV4dHJhIGV4dHJhOwotfSBCU1NMaXN0UmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgQlNTTGlzdFJpZCBic3M7CiAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH0gQlNTTGlzdEVsZW1lbnQ7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IHRkc1Jzc2lFbnRyeSB0ZHNSc3NpRW50cnk7CitzdHJ1Y3QgdGRzUnNzaUVudHJ5IHsKICAgdTggcnNzaXBjdDsKICAgdTggcnNzaWRCbTsKLX0gdGRzUnNzaUVudHJ5OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IHRkc1Jzc2lSaWQgdGRzUnNzaVJpZDsKK3N0cnVjdCB0ZHNSc3NpUmlkIHsKICAgdTE2IGxlbjsKICAgdGRzUnNzaUVudHJ5IHhbMjU2XTsKLX0gdGRzUnNzaVJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTE2IGxlbjsKLQl1MTYgc3RhdGU7Ci0JdTE2IG11bHRpY2FzdFZhbGlkOwordHlwZWRlZiBzdHJ1Y3QgTUlDUmlkIE1JQ1JpZDsKK3N0cnVjdCBNSUNSaWQgeworCV9fbGUxNiBsZW47CisJX19sZTE2IHN0YXRlOworCV9fbGUxNiBtdWx0aWNhc3RWYWxpZDsKIAl1OCAgbXVsdGljYXN0WzE2XTsKLQl1MTYgdW5pY2FzdFZhbGlkOworCV9fbGUxNiB1bmljYXN0VmFsaWQ7CiAJdTggIHVuaWNhc3RbMTZdOwotfSBNSUNSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgTUlDQnVmZmVyIE1JQ0J1ZmZlcjsKK3N0cnVjdCBNSUNCdWZmZXIgewogCV9fYmUxNiB0eXBlbGVuOwogCiAJdW5pb24gewpAQCAtODMwLDE1ICs4NDAsMTMgQEAKIAl9IHU7CiAJX19iZTMyIG1pYzsKIAlfX2JlMzIgc2VxOwotfSBNSUNCdWZmZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXU4IGRhW0VUSF9BTEVOXTsKIAl1OCBzYVtFVEhfQUxFTl07CiB9IGV0aGVySGVhZDsKIAotI3ByYWdtYSBwYWNrKCkKLQogI2RlZmluZSBUWENUTF9UWE9LICgxPDwxKSAvKiByZXBvcnQgaWYgdHggaXMgb2sgKi8KICNkZWZpbmUgVFhDVExfVFhFWCAoMTw8MikgLyogcmVwb3J0IGlmIHR4IGZhaWxzICovCiAjZGVmaW5lIFRYQ1RMXzgwMl8zICgwPDwzKSAvKiA4MDIuMyBwYWNrZXQgKi8KQEAgLTk4MSw2ICs5ODksMTQgQEAKIAlkbWFfYWRkcl90IGhvc3RfYWRkcjsKIH0gVHhGaWQ7CiAKK3N0cnVjdCByeF9oZHIgeworCV9fbGUxNiBzdGF0dXMsIGxlbjsKKwl1OCByc3NpWzJdOworCXU4IHJhdGU7CisJdTggZnJlcTsKKwlfX2xlMTYgdG1wWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgIGN0bDogMTU7CiAJdW5zaWduZWQgaW50ICByZHk6IDE7CkBAIC0xMDcwLDEwICsxMDg2LDYgQEAKIAl9CiB9OwogCi0vLyBGcmVxdWVuY3kgbGlzdCAobWFwIGNoYW5uZWxzIHRvIGZyZXF1ZW5jaWVzKQotc3RhdGljIGNvbnN0IGxvbmcgZnJlcXVlbmN5X2xpc3RbXSA9IHsgMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKLQkJCQkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0IH07Ci0KIC8vIEEgZmV3IGRldGFpbHMgbmVlZGVkIGZvciBXRVAgKFdpcmVsZXNzIEVxdWl2YWxlbnQgUHJpdmFjeSkKICNkZWZpbmUgTUFYX0tFWV9TSVpFIDEzCQkJLy8gMTI4ICg/KSBiaXRzCiAjZGVmaW5lIE1JTl9LRVlfU0laRSAgNQkJCS8vIDQwIGJpdHMgUkM0IC0gV0VQCkBAIC0xMDgyLDEyICsxMDk0LDYgQEAKIAl1OAlrZXlbMTZdOwkvKiA0MC1iaXQgYW5kIDEwNC1iaXQga2V5cyAqLwogfSB3ZXBfa2V5X3Q7CiAKLS8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLSNpZm5kZWYgSVdfRU5DT0RFX05PS0VZCi0jZGVmaW5lIElXX0VOQ09ERV9OT0tFWSAgICAgICAgIDB4MDgwMCAgLyogS2V5IGlzIHdyaXRlIG9ubHksIHNvIG5vdCBwcmVzZW50ICovCi0jZGVmaW5lIElXX0VOQ09ERV9NT0RFICAoSVdfRU5DT0RFX0RJU0FCTEVEIHwgSVdfRU5DT0RFX1JFU1RSSUNURUQgfCBJV19FTkNPREVfT1BFTikKLSNlbmRpZiAvKiBJV19FTkNPREVfTk9LRVkgKi8KLQogLyogTGlzdCBvZiBXaXJlbGVzcyBIYW5kbGVycyAobmV3IEFQSSkgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYJYWlyb19oYW5kbGVyX2RlZjsKIApAQCAtMTE1NSw3ICsxMTYxLDcgQEAKIAkgICB1c2UgdGhlIGhpZ2ggYml0IHRvIG1hcmsgd2hldGhlciBpdCBpcyBpbiB1c2UuICovCiAjZGVmaW5lIE1BWF9GSURTIDYKICNkZWZpbmUgTVBJX01BWF9GSURTIDEKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWRzW01BWF9GSURTXTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWRzW01BWF9GSURTXTsKIAlDb25maWdSaWQgY29uZmlnOwogCWNoYXIga2V5aW5kZXg7IC8vIFVzZWQgd2l0aCBhdXRvIHdlcAogCWNoYXIgZGVmaW5kZXg7IC8vIFVzZWQgd2l0aCBhdXRvIHdlcApAQCAtMTIyOSw2ICsxMjM1LDkgQEAKICNkZWZpbmUJUENJX1NIQVJFRF9MRU4JCTIqTVBJX01BWF9GSURTKlBLVFNJWkUrUklEU0laRQogCWNoYXIJCQlwcm9jX25hbWVbSUZOQU1TSVpdOwogCisJaW50CQkJd2VwX2NhcGFibGU7CisJaW50CQkJbWF4X3dlcF9pZHg7CisKIAkvKiBXUEEtcmVsYXRlZCBzdHVmZiAqLwogCXVuc2lnbmVkIGludCBic3NMaXN0Rmlyc3Q7CiAJdW5zaWduZWQgaW50IGJzc0xpc3ROZXh0OwpAQCAtMTI4Nyw2ICsxMjk2LDI5IEBACiBzdGF0aWMgdm9pZCBlbW1oMzJfZmluYWwoZW1taDMyX2NvbnRleHQgKmNvbnRleHQsIHU4IGRpZ2VzdFs0XSk7CiBzdGF0aWMgaW50IGZsYXNocGNoYXIoc3RydWN0IGFpcm9faW5mbyAqYWksaW50IGJ5dGUsaW50IGR3ZWxsdGltZSk7CiAKK3N0YXRpYyB2b2lkIGFnZV9taWNfY29udGV4dChtaWNjbnR4ICpjdXIsIG1pY2NudHggKm9sZCwgdTggKmtleSwgaW50IGtleV9sZW4sCisJCQkgICAgc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSkKK3sKKwkvKiBJZiB0aGUgY3VycmVudCBNSUMgY29udGV4dCBpcyB2YWxpZCBhbmQgaXRzIGtleSBpcyB0aGUgc2FtZSBhcworCSAqIHRoZSBNSUMgcmVnaXN0ZXIsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KKwkgKi8KKwlpZiAoY3VyLT52YWxpZCAmJiAobWVtY21wKGN1ci0+a2V5LCBrZXksIGtleV9sZW4pID09IDApKQorCQlyZXR1cm47CisKKwkvKiBBZ2UgY3VycmVudCBtaWMgQ29udGV4dCAqLworCW1lbWNweShvbGQsIGN1ciwgc2l6ZW9mKCpjdXIpKTsKKworCS8qIEluaXRpYWxpemUgbmV3IGNvbnRleHQgKi8KKwltZW1jcHkoY3VyLT5rZXksIGtleSwga2V5X2xlbik7CisJY3VyLT53aW5kb3cgID0gMzM7IC8qIFdpbmRvdyBhbHdheXMgcG9pbnRzIHRvIHRoZSBtaWRkbGUgKi8KKwljdXItPnJ4ICAgICAgPSAwOyAgLyogUnggU2VxdWVuY2UgbnVtYmVycyAqLworCWN1ci0+dHggICAgICA9IDA7ICAvKiBUeCBzZXF1ZW5jZSBudW1iZXJzICovCisJY3VyLT52YWxpZCAgID0gMTsgIC8qIEtleSBpcyBub3cgdmFsaWQgKi8KKworCS8qIEdpdmUga2V5IHRvIG1pYyBzZWVkICovCisJZW1taDMyX3NldHNlZWQoJmN1ci0+c2VlZCwga2V5LCBrZXlfbGVuLCB0Zm0pOworfQorCiAvKiBtaWNpbml0IC0gSW5pdGlhbGl6ZSBtaWMgc2VlZCAqLwogCiBzdGF0aWMgdm9pZCBtaWNpbml0KHN0cnVjdCBhaXJvX2luZm8gKmFpKQpAQCAtMTI5Nyw0OSArMTMyOSwyNiBAQAogCVBDNDUwMF9yZWFkcmlkKGFpLCBSSURfTUlDLCAmbWljX3JpZCwgc2l6ZW9mKG1pY19yaWQpLCAwKTsKIAl1cCgmYWktPnNlbSk7CiAKLQlhaS0+bWljc3RhdHMuZW5hYmxlZCA9IChtaWNfcmlkLnN0YXRlICYgMHgwMEZGKSA/IDEgOiAwOwotCi0JaWYgKGFpLT5taWNzdGF0cy5lbmFibGVkKSB7Ci0JCS8qIEtleSBtdXN0IGJlIHZhbGlkIGFuZCBkaWZmZXJlbnQgKi8KLQkJaWYgKG1pY19yaWQubXVsdGljYXN0VmFsaWQgJiYgKCFhaS0+bW9kWzBdLm1DdHgudmFsaWQgfHwKLQkJICAgIChtZW1jbXAgKGFpLT5tb2RbMF0ubUN0eC5rZXksIG1pY19yaWQubXVsdGljYXN0LAotCQkJICAgICBzaXplb2YoYWktPm1vZFswXS5tQ3R4LmtleSkpICE9IDApKSkgewotCQkJLyogQWdlIGN1cnJlbnQgbWljIENvbnRleHQgKi8KLQkJCW1lbWNweSgmYWktPm1vZFsxXS5tQ3R4LCZhaS0+bW9kWzBdLm1DdHgsc2l6ZW9mKG1pY2NudHgpKTsKLQkJCS8qIEluaXRpYWxpemUgbmV3IGNvbnRleHQgKi8KLQkJCW1lbWNweSgmYWktPm1vZFswXS5tQ3R4LmtleSxtaWNfcmlkLm11bHRpY2FzdCxzaXplb2YobWljX3JpZC5tdWx0aWNhc3QpKTsKLQkJCWFpLT5tb2RbMF0ubUN0eC53aW5kb3cgID0gMzM7IC8vV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZQotCQkJYWktPm1vZFswXS5tQ3R4LnJ4ICAgICAgPSAwOyAgLy9SeCBTZXF1ZW5jZSBudW1iZXJzCi0JCQlhaS0+bW9kWzBdLm1DdHgudHggICAgICA9IDA7ICAvL1R4IHNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0ubUN0eC52YWxpZCAgID0gMTsgIC8vS2V5IGlzIG5vdyB2YWxpZAotICAKLQkJCS8qIEdpdmUga2V5IHRvIG1pYyBzZWVkICovCi0JCQllbW1oMzJfc2V0c2VlZCgmYWktPm1vZFswXS5tQ3R4LnNlZWQsbWljX3JpZC5tdWx0aWNhc3Qsc2l6ZW9mKG1pY19yaWQubXVsdGljYXN0KSwgYWktPnRmbSk7Ci0JCX0KLQotCQkvKiBLZXkgbXVzdCBiZSB2YWxpZCBhbmQgZGlmZmVyZW50ICovCi0JCWlmIChtaWNfcmlkLnVuaWNhc3RWYWxpZCAmJiAoIWFpLT5tb2RbMF0udUN0eC52YWxpZCB8fCAKLQkJICAgIChtZW1jbXAoYWktPm1vZFswXS51Q3R4LmtleSwgbWljX3JpZC51bmljYXN0LAotCQkJICAgIHNpemVvZihhaS0+bW9kWzBdLnVDdHgua2V5KSkgIT0gMCkpKSB7Ci0JCQkvKiBBZ2UgY3VycmVudCBtaWMgQ29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzFdLnVDdHgsJmFpLT5tb2RbMF0udUN0eCxzaXplb2YobWljY250eCkpOwotCQkJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzBdLnVDdHgua2V5LG1pY19yaWQudW5pY2FzdCxzaXplb2YobWljX3JpZC51bmljYXN0KSk7Ci0JCi0JCQlhaS0+bW9kWzBdLnVDdHgud2luZG93ICA9IDMzOyAvL1dpbmRvdyBhbHdheXMgcG9pbnRzIHRvIHRoZSBtaWRkbGUKLQkJCWFpLT5tb2RbMF0udUN0eC5yeCAgICAgID0gMDsgIC8vUnggU2VxdWVuY2UgbnVtYmVycwotCQkJYWktPm1vZFswXS51Q3R4LnR4ICAgICAgPSAwOyAgLy9UeCBzZXF1ZW5jZSBudW1iZXJzCi0JCQlhaS0+bW9kWzBdLnVDdHgudmFsaWQgICA9IDE7ICAvL0tleSBpcyBub3cgdmFsaWQKLQkKLQkJCS8vR2l2ZSBrZXkgdG8gbWljIHNlZWQKLQkJCWVtbWgzMl9zZXRzZWVkKCZhaS0+bW9kWzBdLnVDdHguc2VlZCwgbWljX3JpZC51bmljYXN0LCBzaXplb2YobWljX3JpZC51bmljYXN0KSwgYWktPnRmbSk7Ci0JCX0KLQl9IGVsc2UgewotICAgICAgLyogU28gbmV4dCB0aW1lIHdlIGhhdmUgYSB2YWxpZCBrZXkgYW5kIG1pYyBpcyBlbmFibGVkLCB3ZSB3aWxsIHVwZGF0ZQotICAgICAgICogdGhlIHNlcXVlbmNlIG51bWJlciBpZiB0aGUga2V5IGlzIHRoZSBzYW1lIGFzIGJlZm9yZS4KLSAgICAgICAqLworCWFpLT5taWNzdGF0cy5lbmFibGVkID0gKGxlMTZfdG9fY3B1KG1pY19yaWQuc3RhdGUpICYgMHgwMEZGKSA/IDEgOiAwOworCWlmICghYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKKwkJLyogU28gbmV4dCB0aW1lIHdlIGhhdmUgYSB2YWxpZCBrZXkgYW5kIG1pYyBpcyBlbmFibGVkLCB3ZSB3aWxsCisJCSAqIHVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSBrZXkgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCQkgKi8KIAkJYWktPm1vZFswXS51Q3R4LnZhbGlkID0gMDsKIAkJYWktPm1vZFswXS5tQ3R4LnZhbGlkID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmIChtaWNfcmlkLm11bHRpY2FzdFZhbGlkKSB7CisJCWFnZV9taWNfY29udGV4dCgmYWktPm1vZFswXS5tQ3R4LCAmYWktPm1vZFsxXS5tQ3R4LAorCQkgICAgICAgICAgICAgICAgbWljX3JpZC5tdWx0aWNhc3QsIHNpemVvZihtaWNfcmlkLm11bHRpY2FzdCksCisJCSAgICAgICAgICAgICAgICBhaS0+dGZtKTsKKwl9CisKKwlpZiAobWljX3JpZC51bmljYXN0VmFsaWQpIHsKKwkJYWdlX21pY19jb250ZXh0KCZhaS0+bW9kWzBdLnVDdHgsICZhaS0+bW9kWzFdLnVDdHgsCisJCQkJbWljX3JpZC51bmljYXN0LCBzaXplb2YobWljX3JpZC51bmljYXN0KSwKKwkJCQlhaS0+dGZtKTsKIAl9CiB9CiAKQEAgLTI2MzcsMTcgKzI2NDYsMjEgQEAKIAkucGFyc2UgPSB3bGxfaGVhZGVyX3BhcnNlLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhaXJvMTFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGFpcm9fb3BlbiwKKwkubmRvX3N0b3AgCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGFpcm9fc3RhcnRfeG1pdDExLAorCS5uZG9fZ2V0X3N0YXRzIAkJPSBhaXJvX2dldF9zdGF0cywKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgd2lmaV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWRldi0+bmV0ZGV2X29wcyA9ICZhaXJvMTFfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYWlyb19oZWFkZXJfb3BzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmFpcm9fc3RhcnRfeG1pdDExOwotCWRldi0+Z2V0X3N0YXRzID0gJmFpcm9fZ2V0X3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gJmFpcm9fc2V0X21hY19hZGRyZXNzOwotCWRldi0+ZG9faW9jdGwgPSAmYWlyb19pb2N0bDsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmFpcm9faGFuZGxlcl9kZWY7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gJmFpcm9fY2hhbmdlX210dTsKLQlkZXYtPm9wZW4gPSAmYWlyb19vcGVuOwotCWRldi0+c3RvcCA9ICZhaXJvX2Nsb3NlOwogCiAJZGV2LT50eXBlICAgICAgICAgICAgICAgPSBBUlBIUkRfSUVFRTgwMjExOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuICAgID0gRVRIX0hMRU47CkBAIC0yNzMwLDI3ICsyNzQzLDMyIEBACiAJCQkgICAgICAmYWktPm5ldHdvcmtfZnJlZV9saXN0KTsKIH0KIAotc3RhdGljIGludCBhaXJvX3Rlc3Rfd3BhX2NhcGFibGUoc3RydWN0IGFpcm9faW5mbyAqYWkpCi17Ci0JaW50IHN0YXR1czsKLQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gYWlyb19vcGVuLAorCS5uZG9fc3RvcAkJPSBhaXJvX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBhaXJvX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYWlyb19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBhaXJvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKLQlzdGF0dXMgPSByZWFkQ2FwYWJpbGl0eVJpZChhaSwgJmNhcF9yaWQsIDEpOwotCWlmIChzdGF0dXMgIT0gU1VDQ0VTUykgcmV0dXJuIDA7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1waV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG1waV9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYWlyb19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBhaXJvX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IGFpcm9faW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9fY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCi0JLyogT25seSBmaXJtd2FyZSB2ZXJzaW9ucyA1LjMwLjE3IG9yIGJldHRlciBjYW4gZG8gV1BBICovCi0JaWYgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgPiAweDUzMAotCSAgfHwgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgPT0gMHg1MzAKLQkgICAgICAmJiBsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRTdWJWZXIpID49IDE3KSkgewotCQlhaXJvX3ByaW50X2luZm8oIiIsICJXUEEgaXMgc3VwcG9ydGVkLiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBObyBXUEEgc3VwcG9ydCAqLwotCWFpcm9fcHJpbnRfaW5mbygiIiwgIldQQSB1bnN1cHBvcnRlZCAob25seSBmaXJtd2FyZSB2ZXJzaW9ucyA1LjMwLjE3IgotCQkiIGFuZCBncmVhdGVyIHN1cHBvcnQgV1BBLiAgRGV0ZWN0ZWQgJXMpIiwgY2FwX3JpZC5wcm9kVmVyKTsKLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpfaW5pdF9haXJvX2NhcmQoIHVuc2lnbmVkIHNob3J0IGlycSwgaW50IHBvcnQsCiAJCQkJCSAgIGludCBpc19wY21jaWEsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCkBAIC0yNzU5LDYgKzI3NzcsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGFpcm9faW5mbyAqYWk7CiAJaW50IGksIHJjOworCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsKIAogCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2Ugb2JqZWN0LiAqLwogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmFpKSwgIiIsIGV0aGVyX3NldHVwKTsKQEAgLTI3ODgsMjIgKzI4MDcsMTYgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJYWlyb19uZXR3b3Jrc19pbml0aWFsaXplIChhaSk7CiAKKwlza2JfcXVldWVfaGVhZF9pbml0ICgmYWktPnR4cSk7CisKIAkvKiBUaGUgQWlyby1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWlmICh0ZXN0X2JpdChGTEFHX01QSSwmYWktPmZsYWdzKSkgewotCQlza2JfcXVldWVfaGVhZF9pbml0ICgmYWktPnR4cSk7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJm1waV9zdGFydF94bWl0OwotCX0gZWxzZQotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZhaXJvX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmYWlyb19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmYWlyb19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYWlyb19zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5kb19pb2N0bCA9ICZhaXJvX2lvY3RsOworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwmYWktPmZsYWdzKSkKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm1waV9uZXRkZXZfb3BzOworCWVsc2UKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmFpcm9fbmV0ZGV2X29wczsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmFpcm9faGFuZGxlcl9kZWY7CiAJYWktPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmYWktPnNweV9kYXRhOwogCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZhaS0+d2lyZWxlc3NfZGF0YTsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmYWlyb19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9ICZhaXJvX29wZW47Ci0JZGV2LT5zdG9wID0gJmFpcm9fY2xvc2U7CiAJZGV2LT5pcnEgPSBpcnE7CiAJZGV2LT5iYXNlX2FkZHIgPSBwb3J0OwogCkBAIC0yODI4LDcgKzI4NDEsNyBAQAogCX0KIAogCWlmIChwcm9iZSkgewotCQlpZiAoIHNldHVwX2NhcmQoIGFpLCBkZXYtPmRldl9hZGRyLCAxICkgIT0gU1VDQ0VTUyApIHsKKwkJaWYgKHNldHVwX2NhcmQoYWksIGRldi0+ZGV2X2FkZHIsIDEpICE9IFNVQ0NFU1MpIHsKIAkJCWFpcm9fcHJpbnRfZXJyKGRldi0+bmFtZSwgIk1BQyBjb3VsZCBub3QgYmUgZW5hYmxlZCIgKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX291dF9tYXA7CkBAIC0yODM4LDE4ICsyODUxLDYgQEAKIAkJc2V0X2JpdChGTEFHX0ZMQVNISU5HLCAmYWktPmZsYWdzKTsKIAl9CiAKLQkvKiBUZXN0IGZvciBXUEEgc3VwcG9ydCAqLwotCWlmIChhaXJvX3Rlc3Rfd3BhX2NhcGFibGUoYWkpKSB7Ci0JCXNldF9iaXQoRkxBR19XUEFfQ0FQQUJMRSwgJmFpLT5mbGFncyk7Ci0JCWFpLT5ic3NMaXN0Rmlyc3QgPSBSSURfV1BBX0JTU0xJU1RGSVJTVDsKLQkJYWktPmJzc0xpc3ROZXh0ID0gUklEX1dQQV9CU1NMSVNUTkVYVDsKLQkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCk7Ci0JfSBlbHNlIHsKLQkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9CU1NMSVNURklSU1Q7Ci0JCWFpLT5ic3NMaXN0TmV4dCA9IFJJRF9CU1NMSVNUTkVYVDsKLQkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCkgLSBzaXplb2YoQlNTTGlzdFJpZEV4dHJhKTsKLQl9Ci0KIAlzdHJjcHkoZGV2LT5uYW1lLCAiZXRoJWQiKTsKIAlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyYykgewpAQCAtMjg2MCw2ICsyODYxLDQwIEBACiAJaWYgKCFhaS0+d2lmaWRldikKIAkJZ290byBlcnJfb3V0X3JlZzsKIAorCXJjID0gcmVhZENhcGFiaWxpdHlSaWQoYWksICZjYXBfcmlkLCAxKTsKKwlpZiAocmMgIT0gU1VDQ0VTUykgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyX291dF93aWZpOworCX0KKwkvKiBXRVAgY2FwYWJpbGl0eSBkaXNjb3ZlcnkgKi8KKwlhaS0+d2VwX2NhcGFibGUgPSAoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHgwMikpID8gMSA6IDA7CisJYWktPm1heF93ZXBfaWR4ID0gKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDB4ODApKSA/IDMgOiAwOworCisJYWlyb19wcmludF9pbmZvKGRldi0+bmFtZSwgIkZpcm13YXJlIHZlcnNpb24gJXguJXguJTAyeCIsCisJICAgICAgICAgICAgICAgICgobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA+PiA4KSAmIDB4RiksCisJICAgICAgICAgICAgICAgIChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpICYgMHhGRiksCisJICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFN1YlZlcikpOworCisJLyogVGVzdCBmb3IgV1BBIHN1cHBvcnQgKi8KKwkvKiBPbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTcgb3IgYmV0dGVyIGNhbiBkbyBXUEEgKi8KKwlpZiAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA+IDB4NTMwCisJIHx8IChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID09IDB4NTMwCisJICAgICAgJiYgbGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0U3ViVmVyKSA+PSAxNykpIHsKKwkJYWlyb19wcmludF9pbmZvKGFpLT5kZXYtPm5hbWUsICJXUEEgc3VwcG9ydGVkLiIpOworCisJCXNldF9iaXQoRkxBR19XUEFfQ0FQQUJMRSwgJmFpLT5mbGFncyk7CisJCWFpLT5ic3NMaXN0Rmlyc3QgPSBSSURfV1BBX0JTU0xJU1RGSVJTVDsKKwkJYWktPmJzc0xpc3ROZXh0ID0gUklEX1dQQV9CU1NMSVNUTkVYVDsKKwkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCk7CisJfSBlbHNlIHsKKwkJYWlyb19wcmludF9pbmZvKGFpLT5kZXYtPm5hbWUsICJXUEEgdW5zdXBwb3J0ZWQgd2l0aCBmaXJtd2FyZSAiCisJCQkidmVyc2lvbnMgb2xkZXIgdGhhbiA1LjMwLjE3LiIpOworCisJCWFpLT5ic3NMaXN0Rmlyc3QgPSBSSURfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfQlNTTElTVE5FWFQ7CisJCWFpLT5ic3NMaXN0UmlkTGVuID0gc2l6ZW9mKEJTU0xpc3RSaWQpIC0gc2l6ZW9mKEJTU0xpc3RSaWRFeHRyYSk7CisJfQorCiAJc2V0X2JpdChGTEFHX1JFR0lTVEVSRUQsJmFpLT5mbGFncyk7CiAJYWlyb19wcmludF9pbmZvKGRldi0+bmFtZSwgIk1BQyBlbmFibGVkICVwTSIsIGRldi0+ZGV2X2FkZHIpOwogCkBAIC0zMTI3LDMxNCArMzE2MiwzNTQgQEAKIAlyZXR1cm4gMjQ7CiB9CiAKK3N0YXRpYyB2b2lkIGFpcm9faGFuZGxlX2Npc2NvX21pYyhzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlpZiAodGVzdF9iaXQoRkxBR19NSUNfQ0FQQUJMRSwgJmFpLT5mbGFncykpIHsKKwkJc2V0X2JpdChKT0JfTUlDLCAmYWktPmpvYnMpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFpLT50aHJfd2FpdCk7CisJfQorfQorCisvKiBBaXJvIFN0YXR1cyBjb2RlcyAqLworI2RlZmluZSBTVEFUX05PQkVBQ09OCTB4ODAwMCAvKiBMb3NzIG9mIHN5bmMgLSBtaXNzZWQgYmVhY29ucyAqLworI2RlZmluZSBTVEFUX01BWFJFVFJJRVMJMHg4MDAxIC8qIExvc3Mgb2Ygc3luYyAtIG1heCByZXRyaWVzICovCisjZGVmaW5lIFNUQVRfTUFYQVJMCTB4ODAwMiAvKiBMb3NzIG9mIHN5bmMgLSBhdmVyYWdlIHJldHJ5IGxldmVsIGV4Y2VlZGVkKi8KKyNkZWZpbmUgU1RBVF9GT1JDRUxPU1MJMHg4MDAzIC8qIExvc3Mgb2Ygc3luYyAtIGhvc3QgcmVxdWVzdCAqLworI2RlZmluZSBTVEFUX1RTRlNZTkMJMHg4MDA0IC8qIExvc3Mgb2Ygc3luYyAtIFRTRiBzeW5jaHJvbml6YXRpb24gKi8KKyNkZWZpbmUgU1RBVF9ERUFVVEgJMHg4MTAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0RJU0FTU09DCTB4ODIwMCAvKiBsb3cgYnl0ZSBpcyA4MDIuMTEgcmVhc29uIGNvZGUgKi8KKyNkZWZpbmUgU1RBVF9BU1NPQ19GQUlMCTB4ODQwMCAvKiBsb3cgYnl0ZSBpcyA4MDIuMTEgcmVhc29uIGNvZGUgKi8KKyNkZWZpbmUgU1RBVF9BVVRIX0ZBSUwJMHgwMzAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FTU09DCTB4MDQwMCAvKiBBc3NvY2lhdGVkICovCisjZGVmaW5lIFNUQVRfUkVBU1NPQyAgICAweDA2MDAgLyogUmVhc3NvY2lhdGVkPyAgT25seSBvbiBmaXJtd2FyZSA+PSA1LjMwLjE3ICovCisKK3N0YXRpYyB2b2lkIGFpcm9fcHJpbnRfc3RhdHVzKGNvbnN0IGNoYXIgKmRldm5hbWUsIHUxNiBzdGF0dXMpCit7CisJdTggcmVhc29uID0gc3RhdHVzICYgMHhGRjsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBTVEFUX05PQkVBQ09OOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAibGluayBsb3N0IChtaXNzZWQgYmVhY29ucykiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX01BWFJFVFJJRVM6CisJY2FzZSBTVEFUX01BWEFSTDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAobWF4IHJldHJpZXMpIik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9GT1JDRUxPU1M6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJsaW5rIGxvc3QgKGxvY2FsIGNob2ljZSkiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX1RTRlNZTkM6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJsaW5rIGxvc3QgKFRTRiBzeW5jIGxvc3QpIik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9ERUFVVEg6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJkZWF1dGhlbnRpY2F0ZWQgKHJlYXNvbjogJWQpIiwgcmVhc29uKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0RJU0FTU09DOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAiZGlzYXNzb2NpYXRlZCAocmVhc29uOiAlZCkiLCByZWFzb24pOworCQlicmVhazsKKwljYXNlIFNUQVRfQVNTT0NfRkFJTDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImFzc29jaWF0aW9uIGZhaWxlZCAocmVhc29uOiAlZCkiLAorCQkJICAgICAgIHJlYXNvbik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9BVVRIX0ZBSUw6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJhdXRoZW50aWNhdGlvbiBmYWlsZWQgKHJlYXNvbjogJWQpIiwKKwkJCSAgICAgICByZWFzb24pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFpcm9faGFuZGxlX2xpbmsoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCWludCBzY2FuX2ZvcmNlbG9zcyA9IDA7CisJdTE2IHN0YXR1czsKKworCS8qIEdldCBuZXcgc3RhdHVzIGFuZCBhY2tub3dsZWRnZSB0aGUgbGluayBjaGFuZ2UgKi8KKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShJTjQ1MDAoYWksIExJTktTVEFUKSk7CisJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0xJTkspOworCisJaWYgKChzdGF0dXMgPT0gU1RBVF9GT1JDRUxPU1MpICYmIChhaS0+c2Nhbl90aW1lb3V0ID4gMCkpCisJCXNjYW5fZm9yY2Vsb3NzID0gMTsKKworCWFpcm9fcHJpbnRfc3RhdHVzKGFpLT5kZXYtPm5hbWUsIHN0YXR1cyk7CisKKwlpZiAoKHN0YXR1cyA9PSBTVEFUX0FTU09DKSB8fCAoc3RhdHVzID09IFNUQVRfUkVBU1NPQykpIHsKKwkJaWYgKGF1dG9fd2VwKQorCQkJYWktPmV4cGlyZXMgPSAwOworCQlpZiAoYWktPmxpc3RfYnNzX3Rhc2spCisJCQl3YWtlX3VwX3Byb2Nlc3MoYWktPmxpc3RfYnNzX3Rhc2spOworCQlzZXRfYml0KEZMQUdfVVBEQVRFX1VOSSwgJmFpLT5mbGFncyk7CisJCXNldF9iaXQoRkxBR19VUERBVEVfTVVMVEksICZhaS0+ZmxhZ3MpOworCisJCWlmIChkb3duX3RyeWxvY2soJmFpLT5zZW0pICE9IDApIHsKKwkJCXNldF9iaXQoSk9CX0VWRU5ULCAmYWktPmpvYnMpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOworCQl9IGVsc2UKKwkJCWFpcm9fc2VuZF9ldmVudChhaS0+ZGV2KTsKKwl9IGVsc2UgaWYgKCFzY2FuX2ZvcmNlbG9zcykgeworCQlpZiAoYXV0b193ZXAgJiYgIWFpLT5leHBpcmVzKSB7CisJCQlhaS0+ZXhwaXJlcyA9IFJVTl9BVCgzKkhaKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWktPnRocl93YWl0KTsKKwkJfQorCisJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKKwkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChhaS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFpcm9faGFuZGxlX3J4KHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCV9fbGUxNiBmYywgdiwgKmJ1ZmZlciwgdG1wYnVmWzRdOworCXUxNiBsZW4sIGhkcmxlbiA9IDAsIGdhcCwgZmlkOworCXN0cnVjdCByeF9oZHIgaGRyOworCWludCBzdWNjZXNzID0gMDsKKworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkKKwkJCW1waV9yZWNlaXZlXzgwMl8xMShhaSk7CisJCWVsc2UKKwkJCW1waV9yZWNlaXZlXzgwMl8zKGFpKTsKKwkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX1JYKTsKKwkJcmV0dXJuOworCX0KKworCWZpZCA9IElONDUwMChhaSwgUlhGSUQpOworCisJLyogR2V0IHRoZSBwYWNrZXQgbGVuZ3RoICovCisJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQliYXBfc2V0dXAgKGFpLCBmaWQsIDQsIEJBUDApOworCQliYXBfcmVhZCAoYWksIChfX2xlMTYqKSZoZHIsIHNpemVvZihoZHIpLCBCQVAwKTsKKwkJLyogQmFkIENSQy4gSWdub3JlIHBhY2tldCAqLworCQlpZiAobGUxNl90b19jcHUoaGRyLnN0YXR1cykgJiAyKQorCQkJaGRyLmxlbiA9IDA7CisJCWlmIChhaS0+d2lmaWRldiA9PSBOVUxMKQorCQkJaGRyLmxlbiA9IDA7CisJfSBlbHNlIHsKKwkJYmFwX3NldHVwKGFpLCBmaWQsIDB4MzYsIEJBUDApOworCQliYXBfcmVhZChhaSwgJmhkci5sZW4sIDIsIEJBUDApOworCX0KKwlsZW4gPSBsZTE2X3RvX2NwdShoZHIubGVuKTsKKworCWlmIChsZW4gPiBBSVJPX0RFRl9NVFUpIHsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIkJhZCBzaXplICVkIiwgbGVuKTsKKwkJZ290byBkb25lOworCX0KKwlpZiAobGVuID09IDApCisJCWdvdG8gZG9uZTsKKworCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJYmFwX3JlYWQoYWksICZmYywgc2l6ZW9mIChmYyksIEJBUDApOworCQloZHJsZW4gPSBoZWFkZXJfbGVuKGZjKTsKKwl9IGVsc2UKKwkJaGRybGVuID0gRVRIX0FMRU4gKiAyOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBoZHJsZW4gKyAyICsgMik7CisJaWYgKCFza2IpIHsKKwkJYWktPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlnb3RvIGRvbmU7CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCAyKTsgLyogVGhpcyB3YXkgdGhlIElQIGhlYWRlciBpcyBhbGlnbmVkICovCisJYnVmZmVyID0gKF9fbGUxNiAqKSBza2JfcHV0KHNrYiwgbGVuICsgaGRybGVuKTsKKwlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKSB7CisJCWJ1ZmZlclswXSA9IGZjOworCQliYXBfcmVhZChhaSwgYnVmZmVyICsgMSwgaGRybGVuIC0gMiwgQkFQMCk7CisJCWlmIChoZHJsZW4gPT0gMjQpCisJCQliYXBfcmVhZChhaSwgdG1wYnVmLCA2LCBCQVAwKTsKKworCQliYXBfcmVhZChhaSwgJnYsIHNpemVvZih2KSwgQkFQMCk7CisJCWdhcCA9IGxlMTZfdG9fY3B1KHYpOworCQlpZiAoZ2FwKSB7CisJCQlpZiAoZ2FwIDw9IDgpIHsKKwkJCQliYXBfcmVhZChhaSwgdG1wYnVmLCBnYXAsIEJBUDApOworCQkJfSBlbHNlIHsKKwkJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZ2FwbGVuIHRvbyAiCisJCQkJCSJiaWcuIFByb2JsZW1zIHdpbGwgZm9sbG93Li4uIik7CisJCQl9CisJCX0KKwkJYmFwX3JlYWQoYWksIGJ1ZmZlciArIGhkcmxlbi8yLCBsZW4sIEJBUDApOworCX0gZWxzZSB7CisJCU1JQ0J1ZmZlciBtaWNidWY7CisKKwkJYmFwX3JlYWQoYWksIGJ1ZmZlciwgRVRIX0FMRU4gKiAyLCBCQVAwKTsKKwkJaWYgKGFpLT5taWNzdGF0cy5lbmFibGVkKSB7CisJCQliYXBfcmVhZChhaSwgKF9fbGUxNiAqKSAmbWljYnVmLCBzaXplb2YgKG1pY2J1ZiksIEJBUDApOworCQkJaWYgKG50b2hzKG1pY2J1Zi50eXBlbGVuKSA+IDB4MDVEQykKKwkJCQliYXBfc2V0dXAoYWksIGZpZCwgMHg0NCwgQkFQMCk7CisJCQllbHNlIHsKKwkJCQlpZiAobGVuIDw9IHNpemVvZiAobWljYnVmKSkgeworCQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJbGVuIC09IHNpemVvZihtaWNidWYpOworCQkJCXNrYl90cmltKHNrYiwgbGVuICsgaGRybGVuKTsKKwkJCX0KKwkJfQorCisJCWJhcF9yZWFkKGFpLCBidWZmZXIgKyBFVEhfQUxFTiwgbGVuLCBCQVAwKTsKKwkJaWYgKGRlY2Fwc3VsYXRlKGFpLCAmbWljYnVmLCAoZXRoZXJIZWFkKikgYnVmZmVyLCBsZW4pKQorCQkJZGV2X2tmcmVlX3NrYl9pcnEgKHNrYik7CisJCWVsc2UKKwkJCXN1Y2Nlc3MgPSAxOworCX0KKworI2lmZGVmIFdJUkVMRVNTX1NQWQorCWlmIChzdWNjZXNzICYmIChhaS0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApKSB7CisJCWNoYXIgKnNhOworCQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7CisKKwkJLyogUHJlcGFyZSBzcHkgZGF0YSA6IGFkZHIgKyBxdWFsICovCisJCWlmICghdGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKSB7CisJCQlzYSA9IChjaGFyICopIGJ1ZmZlciArIDY7CisJCQliYXBfc2V0dXAoYWksIGZpZCwgOCwgQkFQMCk7CisJCQliYXBfcmVhZChhaSwgKF9fbGUxNiAqKSBoZHIucnNzaSwgMiwgQkFQMCk7CisJCX0gZWxzZQorCQkJc2EgPSAoY2hhciAqKSBidWZmZXIgKyAxMDsKKwkJd3N0YXRzLnF1YWwgPSBoZHIucnNzaVswXTsKKwkJaWYgKGFpLT5yc3NpKQorCQkJd3N0YXRzLmxldmVsID0gMHgxMDAgLSBhaS0+cnNzaVtoZHIucnNzaVsxXV0ucnNzaWRCbTsKKwkJZWxzZQorCQkJd3N0YXRzLmxldmVsID0gKGhkci5yc3NpWzFdICsgMzIxKSAvIDI7CisJCXdzdGF0cy5ub2lzZSA9IGFpLT53c3RhdHMucXVhbC5ub2lzZTsKKwkJd3N0YXRzLnVwZGF0ZWQgPSAgSVdfUVVBTF9MRVZFTF9VUERBVEVECisJCQkJfCBJV19RVUFMX1FVQUxfVVBEQVRFRAorCQkJCXwgSVdfUVVBTF9EQk07CisJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLworCQl3aXJlbGVzc19zcHlfdXBkYXRlKGFpLT5kZXYsIHNhLCAmd3N0YXRzKTsKKwl9CisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCisKK2RvbmU6CisJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX1JYKTsKKworCWlmIChzdWNjZXNzKSB7CisJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwkJCXNrYi0+ZGV2ID0gYWktPndpZmlkZXY7CisJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOworCQl9IGVsc2UKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFpLT5kZXYpOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwkJbmV0aWZfcngoc2tiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFpcm9faGFuZGxlX3R4KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgc3RhdHVzKQoreworCWludCBpLCBsZW4gPSAwLCBpbmRleCA9IC0xOworCXUxNiBmaWQ7CisKKwlpZiAodGVzdF9iaXQoRkxBR19NUEksICZhaS0+ZmxhZ3MpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQorCQkJZ2V0X3R4X2Vycm9yKGFpLCAtMSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFpLT5hdXhfbG9jaywgZmxhZ3MpOworCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYWktPnR4cSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpLT5hdXhfbG9jayxmbGFncyk7CisJCQltcGlfc2VuZF9wYWNrZXQoYWktPmRldik7CisJCX0gZWxzZSB7CisJCQljbGVhcl9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhaS0+ZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWktPmF1eF9sb2NrLGZsYWdzKTsKKwkJCW5ldGlmX3dha2VfcXVldWUoYWktPmRldik7CisJCX0KKwkJT1VUNDUwMChhaSwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKKwkJcmV0dXJuOworCX0KKworCWZpZCA9IElONDUwMChhaSwgVFhDT01QTEZJRCk7CisKKwlmb3IoaSA9IDA7IGkgPCBNQVhfRklEUzsgaSsrKSB7CisJCWlmICgoYWktPmZpZHNbaV0gJiAweGZmZmYpID09IGZpZCkgeworCQkJbGVuID0gYWktPmZpZHNbaV0gPj4gMTY7CisJCQlpbmRleCA9IGk7CisJCX0KKwl9CisKKwlpZiAoaW5kZXggIT0gLTEpIHsKKwkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQorCQkJZ2V0X3R4X2Vycm9yKGFpLCBpbmRleCk7CisKKwkJT1VUNDUwMChhaSwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYRVhDKSk7CisKKwkJLyogU2V0IHVwIHRvIGJlIHVzZWQgYWdhaW4gKi8KKwkJYWktPmZpZHNbaW5kZXhdICY9IDB4ZmZmZjsKKwkJaWYgKGluZGV4IDwgTUFYX0ZJRFMgLyAyKSB7CisJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlULCAmYWktPmZsYWdzKSkKKwkJCQluZXRpZl93YWtlX3F1ZXVlKGFpLT5kZXYpOworCQl9IGVsc2UgeworCQkJaWYgKCF0ZXN0X2JpdChGTEFHX1BFTkRJTkdfWE1JVDExLCAmYWktPmZsYWdzKSkKKwkJCQluZXRpZl93YWtlX3F1ZXVlKGFpLT53aWZpZGV2KTsKKwkJfQorCX0gZWxzZSB7CisJCU9VVDQ1MDAoYWksIEVWQUNLLCBzdGF0dXMgJiAoRVZfVFggfCBFVl9UWENQWSB8IEVWX1RYRVhDKSk7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJVbmFsbG9jYXRlZCBGSUQgd2FzIHVzZWQgdG8geG1pdCIpOworCX0KK30KKwogc3RhdGljIGlycXJldHVybl90IGFpcm9faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXUxNiBzdGF0dXM7Ci0JdTE2IGZpZDsKLQlzdHJ1Y3QgYWlyb19pbmZvICphcHJpdiA9IGRldi0+bWxfcHJpdjsKLQl1MTYgc2F2ZWRJbnRlcnJ1cHRzID0gMDsKKwl1MTYgc3RhdHVzLCBzYXZlZEludGVycnVwdHMgPSAwOworCXN0cnVjdCBhaXJvX2luZm8gKmFpID0gZGV2LT5tbF9wcml2OwogCWludCBoYW5kbGVkID0gMDsKIAogCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJZm9yICg7OykgewotCQlzdGF0dXMgPSBJTjQ1MDAoIGFwcml2LCBFVlNUQVQgKTsKLQkJaWYgKCAhKHN0YXR1cyAmIFNUQVRVU19JTlRTKSB8fCBzdGF0dXMgPT0gMHhmZmZmICkgYnJlYWs7CisJCXN0YXR1cyA9IElONDUwMChhaSwgRVZTVEFUKTsKKwkJaWYgKCEoc3RhdHVzICYgU1RBVFVTX0lOVFMpIHx8IChzdGF0dXMgPT0gMHhmZmZmKSkKKwkJCWJyZWFrOwogCiAJCWhhbmRsZWQgPSAxOwogCi0JCWlmICggc3RhdHVzICYgRVZfQVdBS0UgKSB7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX0FXQUtFICk7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX0FXQUtFICk7CisJCWlmIChzdGF0dXMgJiBFVl9BV0FLRSkgeworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0FXQUtFKTsKKwkJCU9VVDQ1MDAoYWksIEVWQUNLLCBFVl9BV0FLRSk7CiAJCX0KIAogCQlpZiAoIXNhdmVkSW50ZXJydXB0cykgewotCQkJc2F2ZWRJbnRlcnJ1cHRzID0gSU40NTAwKCBhcHJpdiwgRVZJTlRFTiApOwotCQkJT1VUNDUwMCggYXByaXYsIEVWSU5URU4sIDAgKTsKKwkJCXNhdmVkSW50ZXJydXB0cyA9IElONDUwMChhaSwgRVZJTlRFTik7CisJCQlPVVQ0NTAwKGFpLCBFVklOVEVOLCAwKTsKIAkJfQogCi0JCWlmICggc3RhdHVzICYgRVZfTUlDICkgewotCQkJT1VUNDUwMCggYXByaXYsIEVWQUNLLCBFVl9NSUMgKTsKLQkJCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCXNldF9iaXQoSk9CX01JQywgJmFwcml2LT5qb2JzKTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7Ci0JCQl9CisJCWlmIChzdGF0dXMgJiBFVl9NSUMpIHsKKwkJCU9VVDQ1MDAoYWksIEVWQUNLLCBFVl9NSUMpOworCQkJYWlyb19oYW5kbGVfY2lzY29fbWljKGFpKTsKIAkJfQotCQlpZiAoIHN0YXR1cyAmIEVWX0xJTksgKSB7Ci0JCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0JCQlpbnQgc2Nhbl9mb3JjZWxvc3MgPSAwOwotCQkJLyogVGhlIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkLCBpZiB5b3Ugd2FudCB0byBwdXQgYQotCQkJICAgbW9uaXRvciBob29rIGluLCBkbyBpdCBoZXJlLiAgKFJlbWVtYmVyIHRoYXQKLQkJCSAgIGludGVycnVwdHMgYXJlIHN0aWxsIGRpc2FibGVkISkKLQkJCSovCi0JCQl1MTYgbmV3U3RhdHVzID0gSU40NTAwKGFwcml2LCBMSU5LU1RBVCk7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX0xJTkspOwotCQkJLyogSGVyZSBpcyB3aGF0IG5ld1N0YXR1cyBtZWFuczogKi8KLSNkZWZpbmUgTk9CRUFDT04gMHg4MDAwIC8qIExvc3Mgb2Ygc3luYyAtIG1pc3NlZCBiZWFjb25zICovCi0jZGVmaW5lIE1BWFJFVFJJRVMgMHg4MDAxIC8qIExvc3Mgb2Ygc3luYyAtIG1heCByZXRyaWVzICovCi0jZGVmaW5lIE1BWEFSTCAweDgwMDIgLyogTG9zcyBvZiBzeW5jIC0gYXZlcmFnZSByZXRyeSBsZXZlbCBleGNlZWRlZCovCi0jZGVmaW5lIEZPUkNFTE9TUyAweDgwMDMgLyogTG9zcyBvZiBzeW5jIC0gaG9zdCByZXF1ZXN0ICovCi0jZGVmaW5lIFRTRlNZTkMgMHg4MDA0IC8qIExvc3Mgb2Ygc3luYyAtIFRTRiBzeW5jaHJvbml6YXRpb24gKi8KLSNkZWZpbmUgREVBVVRIIDB4ODEwMCAvKiBEZWF1dGhlbnRpY2F0aW9uIChsb3cgYnl0ZSBpcyByZWFzb24gY29kZSkgKi8KLSNkZWZpbmUgRElTQVNTIDB4ODIwMCAvKiBEaXNhc3NvY2lhdGlvbiAobG93IGJ5dGUgaXMgcmVhc29uIGNvZGUpICovCi0jZGVmaW5lIEFTU0ZBSUwgMHg4NDAwIC8qIEFzc29jaWF0aW9uIGZhaWx1cmUgKGxvdyBieXRlIGlzIHJlYXNvbgotCQkJICBjb2RlKSAqLwotI2RlZmluZSBBVVRIRkFJTCAweDAzMDAgLyogQXV0aGVudGljYXRpb24gZmFpbHVyZSAobG93IGJ5dGUgaXMgcmVhc29uCi0JCQkgICBjb2RlKSAqLwotI2RlZmluZSBBU1NPQ0lBVEVEIDB4MDQwMCAvKiBBc3NvY2lhdGVkICovCi0jZGVmaW5lIFJFQVNTT0NJQVRFRCAweDA2MDAgLyogUmVhc3NvY2lhdGVkPyAgT25seSBvbiBmaXJtd2FyZSA+PSA1LjMwLjE3ICovCi0jZGVmaW5lIFJDX1JFU0VSVkVEIDAgLyogUmVzZXJ2ZWQgcmV0dXJuIGNvZGUgKi8KLSNkZWZpbmUgUkNfTk9SRUFTT04gMSAvKiBVbnNwZWNpZmllZCByZWFzb24gKi8KLSNkZWZpbmUgUkNfQVVUSElOViAyIC8qIFByZXZpb3VzIGF1dGhlbnRpY2F0aW9uIGludmFsaWQgKi8KLSNkZWZpbmUgUkNfREVBVVRIIDMgLyogRGVhdXRoZW50aWNhdGVkIGJlY2F1c2Ugc2VuZGluZyBzdGF0aW9uIGlzCi0JCSAgICAgICBsZWF2aW5nICovCi0jZGVmaW5lIFJDX05PQUNUIDQgLyogRGlzYXNzb2NpYXRlZCBkdWUgdG8gaW5hY3Rpdml0eSAqLwotI2RlZmluZSBSQ19NQVhMT0FEIDUgLyogRGlzYXNzb2NpYXRlZCBiZWNhdXNlIEFQIGlzIHVuYWJsZSB0byBoYW5kbGUKLQkJCWFsbCBjdXJyZW50bHkgYXNzb2NpYXRlZCBzdGF0aW9ucyAqLwotI2RlZmluZSBSQ19CQURDTEFTUzIgNiAvKiBDbGFzcyAyIGZyYW1lIHJlY2VpdmVkIGZyb20KLQkJCSAgbm9uLUF1dGhlbnRpY2F0ZWQgc3RhdGlvbiAqLwotI2RlZmluZSBSQ19CQURDTEFTUzMgNyAvKiBDbGFzcyAzIGZyYW1lIHJlY2VpdmVkIGZyb20KLQkJCSAgbm9uLUFzc29jaWF0ZWQgc3RhdGlvbiAqLwotI2RlZmluZSBSQ19TVEFUTEVBVkUgOCAvKiBEaXNhc3NvY2lhdGVkIGJlY2F1c2Ugc2VuZGluZyBzdGF0aW9uIGlzCi0JCQkgIGxlYXZpbmcgQlNTICovCi0jZGVmaW5lIFJDX05PQVVUSCA5IC8qIFN0YXRpb24gcmVxdWVzdGluZyAoUmUpQXNzb2NpYXRpb24gaXMgbm90Ci0JCSAgICAgICBBdXRoZW50aWNhdGVkIHdpdGggdGhlIHJlc3BvbmRpbmcgc3RhdGlvbiAqLwotCQkJaWYgKG5ld1N0YXR1cyA9PSBGT1JDRUxPU1MgJiYgYXByaXYtPnNjYW5fdGltZW91dCA+IDApCi0JCQkJc2Nhbl9mb3JjZWxvc3MgPSAxOwotCQkJaWYobmV3U3RhdHVzID09IEFTU09DSUFURUQgfHwgbmV3U3RhdHVzID09IFJFQVNTT0NJQVRFRCkgewotCQkJCWlmIChhdXRvX3dlcCkKLQkJCQkJYXByaXYtPmV4cGlyZXMgPSAwOwotCQkJCWlmIChhcHJpdi0+bGlzdF9ic3NfdGFzaykKLQkJCQkJd2FrZV91cF9wcm9jZXNzKGFwcml2LT5saXN0X2Jzc190YXNrKTsKLQkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX1VOSSwgJmFwcml2LT5mbGFncyk7Ci0JCQkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFwcml2LT5mbGFncyk7CiAKLQkJCQlpZiAoZG93bl90cnlsb2NrKCZhcHJpdi0+c2VtKSAhPSAwKSB7Ci0JCQkJCXNldF9iaXQoSk9CX0VWRU5ULCAmYXByaXYtPmpvYnMpOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7Ci0JCQkJfSBlbHNlCi0JCQkJCWFpcm9fc2VuZF9ldmVudChkZXYpOwotCQkJfSBlbHNlIGlmICghc2Nhbl9mb3JjZWxvc3MpIHsKLQkJCQlpZiAoYXV0b193ZXAgJiYgIWFwcml2LT5leHBpcmVzKSB7Ci0JCQkJCWFwcml2LT5leHBpcmVzID0gUlVOX0FUKDMqSFopOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7Ci0JCQkJfQotCi0JCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0JCQkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAnXDAnLCBFVEhfQUxFTik7Ci0JCQkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSxOVUxMKTsKLQkJCX0KKwkJaWYgKHN0YXR1cyAmIEVWX0xJTkspIHsKKwkJCS8qIExpbmsgc3RhdHVzIGNoYW5nZWQgKi8KKwkJCWFpcm9faGFuZGxlX2xpbmsoYWkpOwogCQl9CiAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWNlaXZlICovCi0JCWlmICggc3RhdHVzICYgRVZfUlggICkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JCQlfX2xlMTYgZmMsIHY7Ci0JCQl1MTYgbGVuLCBoZHJsZW4gPSAwOwotI3ByYWdtYSBwYWNrKDEpCi0JCQlzdHJ1Y3QgewotCQkJCV9fbGUxNiBzdGF0dXMsIGxlbjsKLQkJCQl1OCByc3NpWzJdOwotCQkJCXU4IHJhdGU7Ci0JCQkJdTggZnJlcTsKLQkJCQlfX2xlMTYgdG1wWzRdOwotCQkJfSBoZHI7Ci0jcHJhZ21hIHBhY2soKQotCQkJdTE2IGdhcDsKLQkJCV9fbGUxNiB0bXBidWZbNF07Ci0JCQlfX2xlMTYgKmJ1ZmZlcjsKLQotCQkJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkKLQkJCQkJbXBpX3JlY2VpdmVfODAyXzExKGFwcml2KTsKLQkJCQllbHNlCi0JCQkJCW1waV9yZWNlaXZlXzgwMl8zKGFwcml2KTsKLQkJCQlPVVQ0NTAwKGFwcml2LCBFVkFDSywgRVZfUlgpOwotCQkJCWdvdG8gZXhpdHJ4OwotCQkJfQotCi0JCQlmaWQgPSBJTjQ1MDAoIGFwcml2LCBSWEZJRCApOwotCi0JCQkvKiBHZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDQsIEJBUDApOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgKF9fbGUxNiopJmhkciwgc2l6ZW9mKGhkciksIEJBUDApOwotCQkJCS8qIEJhZCBDUkMuIElnbm9yZSBwYWNrZXQgKi8KLQkJCQlpZiAobGUxNl90b19jcHUoaGRyLnN0YXR1cykgJiAyKQotCQkJCQloZHIubGVuID0gMDsKLQkJCQlpZiAoYXByaXYtPndpZmlkZXYgPT0gTlVMTCkKLQkJCQkJaGRyLmxlbiA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWJhcF9zZXR1cCAoYXByaXYsIGZpZCwgMHgzNiwgQkFQMCk7Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCAmaGRyLmxlbiwgMiwgQkFQMCk7Ci0JCQl9Ci0JCQlsZW4gPSBsZTE2X3RvX2NwdShoZHIubGVuKTsKLQotCQkJaWYgKGxlbiA+IEFJUk9fREVGX01UVSkgewotCQkJCWFpcm9fcHJpbnRfZXJyKGFwcml2LT5kZXYtPm5hbWUsICJCYWQgc2l6ZSAlZCIsIGxlbik7Ci0JCQkJZ290byBiYWRyeDsKLQkJCX0KLQkJCWlmIChsZW4gPT0gMCkKLQkJCQlnb3RvIGJhZHJ4OwotCi0JCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCAmZmMsIHNpemVvZihmYyksIEJBUDApOwotCQkJCWhkcmxlbiA9IGhlYWRlcl9sZW4oZmMpOwotCQkJfSBlbHNlCi0JCQkJaGRybGVuID0gRVRIX0FMRU4gKiAyOwotCi0JCQlza2IgPSBkZXZfYWxsb2Nfc2tiKCBsZW4gKyBoZHJsZW4gKyAyICsgMiApOwotCQkJaWYgKCAhc2tiICkgewotCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJCWdvdG8gYmFkcng7Ci0JCQl9Ci0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBUaGlzIHdheSB0aGUgSVAgaGVhZGVyIGlzIGFsaWduZWQgKi8KLQkJCWJ1ZmZlciA9IChfX2xlMTYqKXNrYl9wdXQgKHNrYiwgbGVuICsgaGRybGVuKTsKLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQlidWZmZXJbMF0gPSBmYzsKLQkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciArIDEsIGhkcmxlbiAtIDIsIEJBUDApOwotCQkJCWlmIChoZHJsZW4gPT0gMjQpCi0JCQkJCWJhcF9yZWFkIChhcHJpdiwgdG1wYnVmLCA2LCBCQVAwKTsKLQotCQkJCWJhcF9yZWFkIChhcHJpdiwgJnYsIHNpemVvZih2KSwgQkFQMCk7Ci0JCQkJZ2FwID0gbGUxNl90b19jcHUodik7Ci0JCQkJaWYgKGdhcCkgewotCQkJCQlpZiAoZ2FwIDw9IDgpIHsKLQkJCQkJCWJhcF9yZWFkIChhcHJpdiwgdG1wYnVmLCBnYXAsIEJBUDApOwotCQkJCQl9IGVsc2UgewotCQkJCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgImdhcGxlbiB0b28gIgotCQkJCQkJCSJiaWcuIFByb2JsZW1zIHdpbGwgZm9sbG93Li4uIik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCBidWZmZXIgKyBoZHJsZW4vMiwgbGVuLCBCQVAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJTUlDQnVmZmVyIG1pY2J1ZjsKLQkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciwgRVRIX0FMRU4qMiwgQkFQMCk7Ci0JCQkJaWYgKGFwcml2LT5taWNzdGF0cy5lbmFibGVkKSB7Ci0JCQkJCWJhcF9yZWFkIChhcHJpdiwoX19sZTE2KikmbWljYnVmLHNpemVvZihtaWNidWYpLEJBUDApOwotCQkJCQlpZiAobnRvaHMobWljYnVmLnR5cGVsZW4pID4gMHgwNURDKQotCQkJCQkJYmFwX3NldHVwIChhcHJpdiwgZmlkLCAweDQ0LCBCQVAwKTsKLQkJCQkJZWxzZSB7Ci0JCQkJCQlpZiAobGVuIDw9IHNpemVvZihtaWNidWYpKQotCQkJCQkJCWdvdG8gYmFkbWljOwotCi0JCQkJCQlsZW4gLT0gc2l6ZW9mKG1pY2J1Zik7Ci0JCQkJCQlza2JfdHJpbSAoc2tiLCBsZW4gKyBoZHJsZW4pOwotCQkJCQl9Ci0JCQkJfQotCQkJCWJhcF9yZWFkKGFwcml2LGJ1ZmZlcitFVEhfQUxFTixsZW4sQkFQMCk7Ci0JCQkJaWYgKGRlY2Fwc3VsYXRlKGFwcml2LCZtaWNidWYsKGV0aGVySGVhZCopYnVmZmVyLGxlbikpIHsKLWJhZG1pYzoKLQkJCQkJZGV2X2tmcmVlX3NrYl9pcnEgKHNrYik7Ci1iYWRyeDoKLQkJCQkJT1VUNDUwMCggYXByaXYsIEVWQUNLLCBFVl9SWCk7Ci0JCQkJCWdvdG8gZXhpdHJ4OwotCQkJCX0KLQkJCX0KLSNpZmRlZiBXSVJFTEVTU19TUFkKLQkJCWlmIChhcHJpdi0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApIHsKLQkJCQljaGFyICpzYTsKLQkJCQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7Ci0JCQkJLyogUHJlcGFyZSBzcHkgZGF0YSA6IGFkZHIgKyBxdWFsICovCi0JCQkJaWYgKCF0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQkJc2EgPSAoY2hhciopYnVmZmVyICsgNjsKLQkJCQkJYmFwX3NldHVwIChhcHJpdiwgZmlkLCA4LCBCQVAwKTsKLQkJCQkJYmFwX3JlYWQgKGFwcml2LCAoX19sZTE2KiloZHIucnNzaSwgMiwgQkFQMCk7Ci0JCQkJfSBlbHNlCi0JCQkJCXNhID0gKGNoYXIqKWJ1ZmZlciArIDEwOwotCQkJCXdzdGF0cy5xdWFsID0gaGRyLnJzc2lbMF07Ci0JCQkJaWYgKGFwcml2LT5yc3NpKQotCQkJCQl3c3RhdHMubGV2ZWwgPSAweDEwMCAtIGFwcml2LT5yc3NpW2hkci5yc3NpWzFdXS5yc3NpZEJtOwotCQkJCWVsc2UKLQkJCQkJd3N0YXRzLmxldmVsID0gKGhkci5yc3NpWzFdICsgMzIxKSAvIDI7Ci0JCQkJd3N0YXRzLm5vaXNlID0gYXByaXYtPndzdGF0cy5xdWFsLm5vaXNlOwotCQkJCXdzdGF0cy51cGRhdGVkID0gSVdfUVVBTF9MRVZFTF9VUERBVEVECi0JCQkJCXwgSVdfUVVBTF9RVUFMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX0RCTTsKLQkJCQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KLQkJCQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgc2EsICZ3c3RhdHMpOwotCQkJfQotI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwotCQkJT1VUNDUwMCggYXByaXYsIEVWQUNLLCBFVl9SWCk7Ci0KLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCQkJCXNrYi0+ZGV2ID0gYXByaXYtPndpZmlkZXY7Ci0JCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKLQkJCX0gZWxzZQotCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQotCQkJbmV0aWZfcngoIHNrYiApOwotCQl9Ci1leGl0cng6CisJCWlmIChzdGF0dXMgJiBFVl9SWCkKKwkJCWFpcm9faGFuZGxlX3J4KGFpKTsKIAogCQkvKiBDaGVjayB0byBzZWUgaWYgYSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgKi8KLQkJaWYgKCAgc3RhdHVzICYgKCBFVl9UWHxFVl9UWENQWXxFVl9UWEVYQyApICkgewotCQkJaW50IGk7Ci0JCQlpbnQgbGVuID0gMDsKLQkJCWludCBpbmRleCA9IC0xOworCQlpZiAoc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhDUFkgfCBFVl9UWEVYQykpCisJCQlhaXJvX2hhbmRsZV90eChhaSwgc3RhdHVzKTsKIAotCQkJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCWlmIChzdGF0dXMgJiBFVl9UWEVYQykKLQkJCQkJZ2V0X3R4X2Vycm9yKGFwcml2LCAtMSk7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFwcml2LT5hdXhfbG9jaywgZmxhZ3MpOwotCQkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhcHJpdi0+dHhxKSkgewotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcHJpdi0+YXV4X2xvY2ssZmxhZ3MpOwotCQkJCQltcGlfc2VuZF9wYWNrZXQgKGRldik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY2xlYXJfYml0KEZMQUdfUEVORElOR19YTUlULCAmYXByaXYtPmZsYWdzKTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXByaXYtPmF1eF9sb2NrLGZsYWdzKTsKLQkJCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLQkJCQl9Ci0JCQkJT1VUNDUwMCggYXByaXYsIEVWQUNLLAotCQkJCQlzdGF0dXMgJiAoRVZfVFh8RVZfVFhDUFl8RVZfVFhFWEMpKTsKLQkJCQlnb3RvIGV4aXR0eDsKLQkJCX0KLQotCQkJZmlkID0gSU40NTAwKGFwcml2LCBUWENPTVBMRklEKTsKLQotCQkJZm9yKCBpID0gMDsgaSA8IE1BWF9GSURTOyBpKysgKSB7Ci0JCQkJaWYgKCAoIGFwcml2LT5maWRzW2ldICYgMHhmZmZmICkgPT0gZmlkICkgewotCQkJCQlsZW4gPSBhcHJpdi0+Zmlkc1tpXSA+PiAxNjsKLQkJCQkJaW5kZXggPSBpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCWlmIChzdGF0dXMgJiBFVl9UWEVYQykKLQkJCQkJZ2V0X3R4X2Vycm9yKGFwcml2LCBpbmRleCk7Ci0JCQkJT1VUNDUwMCggYXByaXYsIEVWQUNLLCBzdGF0dXMgJiAoRVZfVFggfCBFVl9UWEVYQykpOwotCQkJCS8qIFNldCB1cCB0byBiZSB1c2VkIGFnYWluICovCi0JCQkJYXByaXYtPmZpZHNbaW5kZXhdICY9IDB4ZmZmZjsKLQkJCQlpZiAoaW5kZXggPCBNQVhfRklEUyAvIDIpIHsKLQkJCQkJaWYgKCF0ZXN0X2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJmFwcml2LT5mbGFncykpCi0JCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKCF0ZXN0X2JpdChGTEFHX1BFTkRJTkdfWE1JVDExLCAmYXByaXYtPmZsYWdzKSkKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoYXByaXYtPndpZmlkZXYpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJT1VUNDUwMCggYXByaXYsIEVWQUNLLCBzdGF0dXMgJiAoRVZfVFggfCBFVl9UWENQWSB8IEVWX1RYRVhDKSk7Ci0JCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgIlVuYWxsb2NhdGVkIEZJRCB3YXMgIgotCQkJCQkidXNlZCB0byB4bWl0IiApOwotCQkJfQotCQl9Ci1leGl0dHg6Ci0JCWlmICggc3RhdHVzICYgflNUQVRVU19JTlRTICYgfklHTk9SRV9JTlRTICkKLQkJCWFpcm9fcHJpbnRfd2FybihhcHJpdi0+ZGV2LT5uYW1lLCAiR290IHdlaXJkIHN0YXR1cyAleCIsCisJCWlmICggc3RhdHVzICYgflNUQVRVU19JTlRTICYgfklHTk9SRV9JTlRTICkgeworCQkJYWlyb19wcmludF93YXJuKGFpLT5kZXYtPm5hbWUsICJHb3Qgd2VpcmQgc3RhdHVzICV4IiwKIAkJCQlzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKTsKKwkJfQogCX0KIAogCWlmIChzYXZlZEludGVycnVwdHMpCi0JCU9VVDQ1MDAoIGFwcml2LCBFVklOVEVOLCBzYXZlZEludGVycnVwdHMgKTsKKwkJT1VUNDUwMChhaSwgRVZJTlRFTiwgc2F2ZWRJbnRlcnJ1cHRzKTsKIAotCS8qIGRvbmUuLiAqLwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0zNjEzLDE4ICszNjg4LDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJdTE2IGxlbiwgaGRybGVuID0gMDsKIAlfX2xlMTYgZmM7Ci0jcHJhZ21hIHBhY2soMSkKLQlzdHJ1Y3QgewotCQlfX2xlMTYgc3RhdHVzLCBsZW47Ci0JCXU4IHJzc2lbMl07Ci0JCXU4IHJhdGU7Ci0JCXU4IGZyZXE7Ci0JCV9fbGUxNiB0bXBbNF07Ci0JfSBoZHI7Ci0jcHJhZ21hIHBhY2soKQorCXN0cnVjdCByeF9oZHIgaGRyOwogCXUxNiBnYXA7CiAJdTE2ICpidWZmZXI7Ci0JY2hhciAqcHRyID0gYWktPnJ4Zmlkc1swXS52aXJ0dWFsX2hvc3RfYWRkcis0OworCWNoYXIgKnB0ciA9IGFpLT5yeGZpZHNbMF0udmlydHVhbF9ob3N0X2FkZHIgKyA0OwogCiAJbWVtY3B5X2Zyb21pbygmcnhkLCBhaS0+cnhmaWRzWzBdLmNhcmRfcmFtX29mZiwgc2l6ZW9mKHJ4ZCkpOwogCW1lbWNweSAoKGNoYXIgKikmaGRyLCBwdHIsIHNpemVvZihoZHIpKTsKQEAgLTM2OTEsNiArMzc1OCw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJbmV0aWZfcngoIHNrYiApOworCiBiYWRyeDoKIAlpZiAocnhkLnZhbGlkID09IDApIHsKIAkJcnhkLnZhbGlkID0gMTsKQEAgLTM3MDUsNyArMzc3Myw2IEBACiAJQ21kIGNtZDsKIAlSZXNwIHJzcDsKIAlpbnQgc3RhdHVzOwotCWludCBpOwogCVNzaWRSaWQgbXlTc2lkOwogCV9fbGUxNiBsYXN0aW5kZXg7CiAJV2VwS2V5UmlkIHdrcjsKQEAgLTM3NDcsNiArMzgxNCw3IEBACiAJaWYgKGxvY2spCiAJCXVwKCZhaS0+c2VtKTsKIAlpZiAoYWktPmNvbmZpZy5sZW4gPT0gMCkgeworCQlpbnQgaTsKIAkJdGRzUnNzaVJpZCByc3NpX3JpZDsKIAkJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwogCkBAIC0zNzk0LDE0ICszODYyLDEyIEBACiAJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluc21vZCBjb25maWd1cmVkCiAJCSAgIHJhdGVzIHRvIGFkZCAqLwogCQlpZiAoIHJhdGVzWzBdICkgewotCQkJaW50IGkgPSAwOwogCQkJbWVtc2V0KGFpLT5jb25maWcucmF0ZXMsMCxzaXplb2YoYWktPmNvbmZpZy5yYXRlcykpOwogCQkJZm9yKCBpID0gMDsgaSA8IDggJiYgcmF0ZXNbaV07IGkrKyApIHsKIAkJCQlhaS0+Y29uZmlnLnJhdGVzW2ldID0gcmF0ZXNbaV07CiAJCQl9CiAJCX0KIAkJaWYgKCBiYXNpY19yYXRlID4gMCApIHsKLQkJCWludCBpOwogCQkJZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApIHsKIAkJCQlpZiAoIGFpLT5jb25maWcucmF0ZXNbaV0gPT0gYmFzaWNfcmF0ZSB8fAogCQkJCSAgICAgIWFpLT5jb25maWcucmF0ZXMgKSB7CkBAIC00Njg2LDcgKzQ3NTIsNyBAQAogCVN0YXRzUmlkIHN0YXRzOwogCWludCBpLCBqOwogCV9fbGUzMiAqdmFscyA9IHN0YXRzLnZhbHM7Ci0JaW50IGxlbiA9IGxlMTZfdG9fY3B1KHN0YXRzLmxlbik7CisJaW50IGxlbjsKIAogCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00Njk3LDYgKzQ3NjMsNyBAQAogCX0KIAogCXJlYWRTdGF0c1JpZChhcHJpdiwgJnN0YXRzLCByaWQsIDEpOworCWxlbiA9IGxlMTZfdG9fY3B1KHN0YXRzLmxlbik7CiAKICAgICAgICAgaiA9IDA7CiAJZm9yKGk9MDsgc3RhdHNMYWJlbHNbaV0hPShjaGFyICopLTEgJiYgaSo0PGxlbjsgaSsrKSB7CkBAIC01MTMxLDU1ICs1MTk4LDk4IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGtleSBhdCB0aGUgaW5kZXguICBJZiBpbmRleCA9PSAweGZmZmYKLSAqIHRoZSBpbmRleCBvZiB0aGUgdHJhbnNtaXQga2V5IGlzIHJldHVybmVkLiAgSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LAotICogLTEgd2lsbCBiZSByZXR1cm5lZC4KKy8qIFJldHVybnMgdGhlIFdFUCBrZXkgYXQgdGhlIHNwZWNpZmllZCBpbmRleCwgb3IgLTEgaWYgdGhhdCBrZXkgZG9lcworICogbm90IGV4aXN0LiAgVGhlIGJ1ZmZlciBpcyBhc3N1bWVkIHRvIGJlIGF0IGxlYXN0IDE2IGJ5dGVzIGluIGxlbmd0aC4KICAqLwotc3RhdGljIGludCBnZXRfd2VwX2tleShzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IGluZGV4KSB7CitzdGF0aWMgaW50IGdldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgsIGNoYXIgKmJ1ZiwgdTE2IGJ1ZmxlbikKK3sKIAlXZXBLZXlSaWQgd2tyOwogCWludCByYzsKIAlfX2xlMTYgbGFzdGluZGV4OwogCiAJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAxLCAxKTsKLQlpZiAocmMgPT0gU1VDQ0VTUykgZG8geworCWlmIChyYyAhPSBTVUNDRVNTKQorCQlyZXR1cm4gLTE7CisJZG8gewogCQlsYXN0aW5kZXggPSB3a3Iua2luZGV4OwotCQlpZiAod2tyLmtpbmRleCA9PSBjcHVfdG9fbGUxNihpbmRleCkpIHsKLQkJCWlmIChpbmRleCA9PSAweGZmZmYpIHsKLQkJCQlyZXR1cm4gd2tyLm1hY1swXTsKLQkJCX0KLQkJCXJldHVybiBsZTE2X3RvX2NwdSh3a3Iua2xlbik7CisJCWlmIChsZTE2X3RvX2NwdSh3a3Iua2luZGV4KSA9PSBpbmRleCkgeworCQkJaW50IGtsZW4gPSBtaW5fdChpbnQsIGJ1ZmxlbiwgbGUxNl90b19jcHUod2tyLmtsZW4pKTsKKwkJCW1lbWNweShidWYsIHdrci5rZXksIGtsZW4pOworCQkJcmV0dXJuIGtsZW47CiAJCX0KLQkJcmVhZFdlcEtleVJpZChhaSwgJndrciwgMCwgMSk7CisJCXJjID0gcmVhZFdlcEtleVJpZChhaSwgJndrciwgMCwgMSk7CisJCWlmIChyYyAhPSBTVUNDRVNTKQorCQkJcmV0dXJuIC0xOwogCX0gd2hpbGUgKGxhc3RpbmRleCAhPSB3a3Iua2luZGV4KTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3dlcF9rZXkoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwKLQkJICAgICAgIGNvbnN0IGNoYXIgKmtleSwgdTE2IGtleWxlbiwgaW50IHBlcm0sIGludCBsb2NrICkKK3N0YXRpYyBpbnQgZ2V0X3dlcF90eF9pZHgoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJV2VwS2V5UmlkIHdrcjsKKwlpbnQgcmM7CisJX19sZTE2IGxhc3RpbmRleDsKKworCXJjID0gcmVhZFdlcEtleVJpZChhaSwgJndrciwgMSwgMSk7CisJaWYgKHJjICE9IFNVQ0NFU1MpCisJCXJldHVybiAtMTsKKwlkbyB7CisJCWxhc3RpbmRleCA9IHdrci5raW5kZXg7CisJCWlmICh3a3Iua2luZGV4ID09IGNwdV90b19sZTE2KDB4ZmZmZikpCisJCQlyZXR1cm4gd2tyLm1hY1swXTsKKwkJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJaWYgKHJjICE9IFNVQ0NFU1MpCisJCQlyZXR1cm4gLTE7CisJfSB3aGlsZSAobGFzdGluZGV4ICE9IHdrci5raW5kZXgpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBzZXRfd2VwX2tleShzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IGluZGV4LCBjb25zdCBjaGFyICprZXksCisJCSAgICAgICB1MTYga2V5bGVuLCBpbnQgcGVybSwgaW50IGxvY2spCiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjYWRkcltFVEhfQUxFTl0gPSB7IDB4MDEsIDAsIDAsIDAsIDAsIDAgfTsKIAlXZXBLZXlSaWQgd2tyOworCWludCByYzsKIAotCW1lbXNldCgmd2tyLCAwLCBzaXplb2Yod2tyKSk7CiAJaWYgKGtleWxlbiA9PSAwKSB7Ci0vLyBXZSBhcmUgc2VsZWN0aW5nIHdoaWNoIGtleSB0byB1c2UKLQkJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKLQkJd2tyLmtpbmRleCA9IGNwdV90b19sZTE2KDB4ZmZmZik7Ci0JCXdrci5tYWNbMF0gPSAoY2hhcilpbmRleDsKLQkJaWYgKHBlcm0pIGFpLT5kZWZpbmRleCA9IChjaGFyKWluZGV4OwotCX0gZWxzZSB7Ci0vLyBXZSBhcmUgYWN0dWFsbHkgc2V0dGluZyB0aGUga2V5Ci0JCXdrci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2Yod2tyKSk7Ci0JCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7Ci0JCXdrci5rbGVuID0gY3B1X3RvX2xlMTYoa2V5bGVuKTsKLQkJbWVtY3B5KCB3a3Iua2V5LCBrZXksIGtleWxlbiApOwotCQltZW1jcHkoIHdrci5tYWMsIG1hY2FkZHIsIEVUSF9BTEVOICk7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICIlczoga2V5IGxlbmd0aCB0byBzZXQgd2FzIHplcm8iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOwogCX0KIAorCW1lbXNldCgmd2tyLCAwLCBzaXplb2Yod2tyKSk7CisJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKKwl3a3Iua2luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOworCXdrci5rbGVuID0gY3B1X3RvX2xlMTYoa2V5bGVuKTsKKwltZW1jcHkod2tyLmtleSwga2V5LCBrZXlsZW4pOworCW1lbWNweSh3a3IubWFjLCBtYWNhZGRyLCBFVEhfQUxFTik7CisKIAlpZiAocGVybSkgZGlzYWJsZV9NQUMoYWksIGxvY2spOwotCXdyaXRlV2VwS2V5UmlkKGFpLCAmd2tyLCBwZXJtLCBsb2NrKTsKKwlyYyA9IHdyaXRlV2VwS2V5UmlkKGFpLCAmd2tyLCBwZXJtLCBsb2NrKTsKIAlpZiAocGVybSkgZW5hYmxlX01BQyhhaSwgbG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNldF93ZXBfdHhfaWR4KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgsIGludCBwZXJtLCBpbnQgbG9jaykKK3sKKwlXZXBLZXlSaWQgd2tyOworCWludCByYzsKKworCW1lbXNldCgmd2tyLCAwLCBzaXplb2Yod2tyKSk7CisJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKKwl3a3Iua2luZGV4ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKKwl3a3IubWFjWzBdID0gKGNoYXIpaW5kZXg7CisKKwlpZiAocGVybSkgeworCQlhaS0+ZGVmaW5kZXggPSAoY2hhcilpbmRleDsKKwkJZGlzYWJsZV9NQUMoYWksIGxvY2spOworCX0KKworCXJjID0gd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOworCisJaWYgKHBlcm0pCisJCWVuYWJsZV9NQUMoYWksIGxvY2spOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgcHJvY193ZXBrZXlfb25fY2xvc2UoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlICkgewpAQCAtNTE4Nyw3ICs1Mjk3LDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGlub2RlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZHAtPmRhdGE7CiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IGk7CisJaW50IGksIHJjOwogCWNoYXIga2V5WzE2XTsKIAl1MTYgaW5kZXggPSAwOwogCWludCBqID0gMDsKQEAgLTUyMDEsNyArNTMxMSwxMiBAQAogCSAgICAoZGF0YS0+d2J1ZmZlclsxXSA9PSAnICcgfHwgZGF0YS0+d2J1ZmZlclsxXSA9PSAnXG4nKSkgewogCQlpbmRleCA9IGRhdGEtPndidWZmZXJbMF0gLSAnMCc7CiAJCWlmIChkYXRhLT53YnVmZmVyWzFdID09ICdcbicpIHsKLQkJCXNldF93ZXBfa2V5KGFpLCBpbmRleCwgTlVMTCwgMCwgMSwgMSk7CisJCQlyYyA9IHNldF93ZXBfdHhfaWR4KGFpLCBpbmRleCwgMSwgMSk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgImZhaWxlZCB0byBzZXQgIgorCQkJCSAgICAgICAgICAgICAgICJXRVAgdHJhbnNtaXQgaW5kZXggdG8gJWQ6ICVkLiIsCisJCQkJICAgICAgICAgICAgICAgaW5kZXgsIHJjKTsKKwkJCX0KIAkJCXJldHVybjsKIAkJfQogCQlqID0gMjsKQEAgLTUyMjAsNyArNTMzNSwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc2V0X3dlcF9rZXkoYWksIGluZGV4LCBrZXksIGkvMywgMSwgMSk7CisKKwlyYyA9IHNldF93ZXBfa2V5KGFpLCBpbmRleCwga2V5LCBpLzMsIDEsIDEpOworCWlmIChyYyA8IDApIHsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgImZhaWxlZCB0byBzZXQgV0VQIGtleSBhdCBpbmRleCAiCisJCSAgICAgICAgICAgICAgICIlZDogJWQuIiwgaW5kZXgsIHJjKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcHJvY193ZXBrZXlfb3Blbiggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUgKQpAQCAtNTQ1MSwxMyArNTU3MSwxMyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgQVVUSF9TSEFSRURLRVk6CiAJCQlpZiAoYXByaXYtPmtleWluZGV4IDwgYXV0b193ZXApIHsKLQkJCQlzZXRfd2VwX2tleShhcHJpdiwgYXByaXYtPmtleWluZGV4LCBOVUxMLCAwLCAwLCAwKTsKKwkJCQlzZXRfd2VwX3R4X2lkeChhcHJpdiwgYXByaXYtPmtleWluZGV4LCAwLCAwKTsKIAkJCQlhcHJpdi0+Y29uZmlnLmF1dGhUeXBlID0gQVVUSF9TSEFSRURLRVk7CiAJCQkJYXByaXYtPmtleWluZGV4Kys7CiAJCQl9IGVsc2UgewogCQkJICAgICAgICAvKiBEcm9wIHRvIEVOQ1JZUFQgKi8KIAkJCQlhcHJpdi0+a2V5aW5kZXggPSAwOwotCQkJCXNldF93ZXBfa2V5KGFwcml2LCBhcHJpdi0+ZGVmaW5kZXgsIE5VTEwsIDAsIDAsIDApOworCQkJCXNldF93ZXBfdHhfaWR4KGFwcml2LCBhcHJpdi0+ZGVmaW5kZXgsIDAsIDApOwogCQkJCWFwcml2LT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX0VOQ1JZUFQ7CiAJCQl9CiAJCQlicmVhazsKQEAgLTU3MjUsMTYgKzU4NDUsMTIgQEAKIAlpbnQgcmMgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBJZiBzZXR0aW5nIGJ5IGZyZXF1ZW5jeSwgY29udmVydCB0byBhIGNoYW5uZWwgKi8KLQlpZigoZndycS0+ZSA9PSAxKSAmJgotCSAgIChmd3JxLT5tID49IChpbnQpIDIuNDEyZTgpICYmCi0JICAgKGZ3cnEtPm0gPD0gKGludCkgMi40ODdlOCkpIHsKKwlpZihmd3JxLT5lID09IDEpIHsKIAkJaW50IGYgPSBmd3JxLT5tIC8gMTAwMDAwOwotCQlpbnQgYyA9IDA7Ci0JCXdoaWxlKChjIDwgMTQpICYmIChmICE9IGZyZXF1ZW5jeV9saXN0W2NdKSkKLQkJCWMrKzsKKwogCQkvKiBIYWNrIHRvIGZhbGwgdGhyb3VnaC4uLiAqLwogCQlmd3JxLT5lID0gMDsKLQkJZndycS0+bSA9IGMgKyAxOworCQlmd3JxLT5tID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGYpOwogCX0KIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCiAJaWYoKGZ3cnEtPm0gPiAxMDAwKSB8fCAoZndycS0+ZSA+IDApKQpAQCAtNTc3OCw3ICs1ODk0LDcgQEAKIAogCWNoID0gbGUxNl90b19jcHUoc3RhdHVzX3JpZC5jaGFubmVsKTsKIAlpZigoY2ggPiAwKSAmJiAoY2ggPCAxNSkpIHsKLQkJZndycS0+bSA9IGZyZXF1ZW5jeV9saXN0W2NoIC0gMV0gKiAxMDAwMDA7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2gpICogMTAwMDAwOwogCQlmd3JxLT5lID0gMTsKIAl9IGVsc2UgewogCQlmd3JxLT5tID0gY2g7CkBAIC02MjM0LDExICs2MzUwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdmFsaWRfaW5kZXgoQ2FwYWJpbGl0eVJpZCAqcCwgaW50IGluZGV4KQorc3RhdGljIGlubGluZSBpbnQgdmFsaWRfaW5kZXgoc3RydWN0IGFpcm9faW5mbyAqYWksIGludCBpbmRleCkKIHsKLQlpZiAoaW5kZXggPCAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaW5kZXggPCAocC0+c29mdENhcCAmIGNwdV90b19sZTE2KDB4ODApID8gNCA6IDEpOworCXJldHVybiAoaW5kZXggPj0gMCkgJiYgKGluZGV4IDw9IGFpLT5tYXhfd2VwX2lkeCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTYyNTEsMTYgKzYzNjUsMTMgQEAKIAkJCSAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5tbF9wcml2OwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsJCS8qIENhcmQgY2FwYWJpbGl0eSBpbmZvICovCi0JaW50IHBlcm0gPSAoIGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1RFTVAgPyAwIDogMSApOworCWludCBwZXJtID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1RFTVAgPyAwIDogMSk7CiAJX19sZTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7CisJaW50IHJjID0gMDsKIAotCS8qIElzIFdFUCBzdXBwb3J0ZWQgPyAqLwotCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7Ci0JLyogT2xkZXIgZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXMuLi4KLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfSAqLworCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CiAKIAkvKiBCYXNpYyBjaGVja2luZzogZG8gd2UgaGF2ZSBhIGtleSB0byBzZXQgPwpAQCAtNjI3MiwxNCArNjM4MywyMSBAQAogCWlmIChkd3JxLT5sZW5ndGggPiAwKSB7CiAJCXdlcF9rZXlfdCBrZXk7CiAJCWludCBpbmRleCA9IChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCQlpbnQgY3VycmVudF9pbmRleCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCQlpbnQgY3VycmVudF9pbmRleDsKKwogCQkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUga2V5ICovCiAJCWlmIChkd3JxLT5sZW5ndGggPiBNQVhfS0VZX1NJWkUpIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisKKwkJY3VycmVudF9pbmRleCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGN1cnJlbnRfaW5kZXggPCAwKQorCQkJY3VycmVudF9pbmRleCA9IDA7CisKIAkJLyogQ2hlY2sgdGhlIGluZGV4IChub25lIC0+IHVzZSBjdXJyZW50KSAqLwotCQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpbmRleCkpCisJCWlmICghdmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkKIAkJCWluZGV4ID0gY3VycmVudF9pbmRleDsKKwogCQkvKiBTZXQgdGhlIGxlbmd0aCAqLwogCQlpZiAoZHdycS0+bGVuZ3RoID4gTUlOX0tFWV9TSVpFKQogCQkJa2V5LmxlbiA9IE1BWF9LRVlfU0laRTsKQEAgLTYyOTYsNyArNjQxNCwxMyBAQAogCQkJLyogQ29weSB0aGUga2V5IGluIHRoZSBkcml2ZXIgKi8KIAkJCW1lbWNweShrZXkua2V5LCBleHRyYSwgZHdycS0+bGVuZ3RoKTsKIAkJCS8qIFNlbmQgdGhlIGtleSB0byB0aGUgY2FyZCAqLwotCQkJc2V0X3dlcF9rZXkobG9jYWwsIGluZGV4LCBrZXkua2V5LCBrZXkubGVuLCBwZXJtLCAxKTsKKwkJCXJjID0gc2V0X3dlcF9rZXkobG9jYWwsIGluZGV4LCBrZXkua2V5LCBrZXkubGVuLCBwZXJtLCAxKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlhaXJvX3ByaW50X2Vycihsb2NhbC0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCIKKwkJCQkgICAgICAgICAgICAgICAiIFdFUCBrZXkgYXQgaW5kZXggJWQ6ICVkLiIsCisJCQkJICAgICAgICAgICAgICAgaW5kZXgsIHJjKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CiAJCX0KIAkJLyogV0Ugc3BlY2lmeSB0aGF0IGlmIGEgdmFsaWQga2V5IGlzIHNldCwgZW5jcnlwdGlvbgogCQkgKiBzaG91bGQgYmUgZW5hYmxlZCAodXNlciBtYXkgdHVybiBpdCBvZmYgbGF0ZXIpCkBAIC02MzA4LDEyICs2NDMyLDE5IEBACiAJfSBlbHNlIHsKIAkJLyogRG8gd2Ugd2FudCB0byBqdXN0IHNldCB0aGUgdHJhbnNtaXQga2V5IGluZGV4ID8gKi8KIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JCWlmICh2YWxpZF9pbmRleCgmY2FwX3JpZCwgaW5kZXgpKSB7Ci0JCQlzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIE5VTEwsIDAsIHBlcm0sIDEpOwotCQl9IGVsc2UKKwkJaWYgKHZhbGlkX2luZGV4KGxvY2FsLCBpbmRleCkpIHsKKwkJCXJjID0gc2V0X3dlcF90eF9pZHgobG9jYWwsIGluZGV4LCBwZXJtLCAxKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlhaXJvX3ByaW50X2Vycihsb2NhbC0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCIKKwkJCQkgICAgICAgICAgICAgICAiIFdFUCB0cmFuc21pdCBpbmRleCB0byAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KKwkJfSBlbHNlIHsKIAkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCiAJCQlpZiAoIShkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAkvKiBSZWFkIHRoZSBmbGFncyAqLwogCWlmKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQpAQCAtNjMzOSwxNCArNjQ3MCwxMyBAQAogewogCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5tbF9wcml2OwogCWludCBpbmRleCA9IChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsJCS8qIENhcmQgY2FwYWJpbGl0eSBpbmZvICovCisJdTggYnVmWzE2XTsKIAotCS8qIElzIGl0IHN1cHBvcnRlZCA/ICovCi0JcmVhZENhcGFiaWxpdHlSaWQobG9jYWwsICZjYXBfcmlkLCAxKTsKLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQorCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CisKIAkvKiBDaGVjayBlbmNyeXB0aW9uIG1vZGUgKi8KIAlzd2l0Y2gobG9jYWwtPmNvbmZpZy5hdXRoVHlwZSkJewogCQljYXNlIEFVVEhfRU5DUllQVDoKQEAgLTYzNjUsMTQgKzY0OTUsMTcgQEAKIAltZW1zZXQoZXh0cmEsIDAsIDE2KTsKIAogCS8qIFdoaWNoIGtleSBkbyB3ZSB3YW50ID8gLTEgLT4gdHggaW5kZXggKi8KLQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpbmRleCkpCi0JCWluZGV4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7Ci0JZHdycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOwotCS8qIENvcHkgdGhlIGtleSB0byB0aGUgdXNlciBidWZmZXIgKi8KLQlkd3JxLT5sZW5ndGggPSBnZXRfd2VwX2tleShsb2NhbCwgaW5kZXgpOwotCWlmIChkd3JxLT5sZW5ndGggPiAxNikgewotCQlkd3JxLT5sZW5ndGg9MDsKKwlpZiAoIXZhbGlkX2luZGV4KGxvY2FsLCBpbmRleCkpIHsKKwkJaW5kZXggPSBnZXRfd2VwX3R4X2lkeChsb2NhbCk7CisJCWlmIChpbmRleCA8IDApCisJCQlpbmRleCA9IDA7CiAJfQorCWR3cnEtPmZsYWdzIHw9IGluZGV4ICsgMTsKKworCS8qIENvcHkgdGhlIGtleSB0byB0aGUgdXNlciBidWZmZXIgKi8KKwlkd3JxLT5sZW5ndGggPSBnZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsICZidWZbMF0sIHNpemVvZihidWYpKTsKKwltZW1jcHkoZXh0cmEsIGJ1ZiwgZHdycS0+bGVuZ3RoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02Mzg4LDI4ICs2NTIxLDI3IEBACiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KIAlpbnQgcGVybSA9ICggZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX1RFTVAgPyAwIDogMSApOwogCV9fbGUxNiBjdXJyZW50QXV0aFR5cGUgPSBsb2NhbC0+Y29uZmlnLmF1dGhUeXBlOwotCWludCBpZHgsIGtleV9sZW4sIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMTsKKwlpbnQgaWR4LCBrZXlfbGVuLCBhbGcgPSBleHQtPmFsZywgc2V0X2tleSA9IDEsIHJjOwogCXdlcF9rZXlfdCBrZXk7CiAKLQkvKiBJcyBXRVAgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCS8qIE9sZGVyIGZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLi4uCi0JaWYoIShjYXBfcmlkLnNvZnRDYXAgJiBjcHVfdG9fbGUxNigyKSkpIHsKKwlpZiAoIWxvY2FsLT53ZXBfY2FwYWJsZSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0gKi8KKwogCXJlYWRDb25maWdSaWQobG9jYWwsIDEpOwogCiAJLyogRGV0ZXJtaW5lIGFuZCB2YWxpZGF0ZSB0aGUga2V5IGluZGV4ICovCiAJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogCWlmIChpZHgpIHsKLQkJaWYgKCF2YWxpZF9pbmRleCgmY2FwX3JpZCwgaWR4IC0gMSkpCisJCWlmICghdmFsaWRfaW5kZXgobG9jYWwsIGlkeCAtIDEpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlkeC0tOwotCX0gZWxzZQotCQlpZHggPSBnZXRfd2VwX2tleShsb2NhbCwgMHhmZmZmKTsKKwl9IGVsc2UgeworCQlpZHggPSBnZXRfd2VwX3R4X2lkeChsb2NhbCk7CisJCWlmIChpZHggPCAwKQorCQkJaWR4ID0gMDsKKwl9CiAKIAlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQogCQlhbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CkBAIC02NDE4LDcgKzY1NTAsMTMgQEAKIAkJLyogT25seSBzZXQgdHJhbnNtaXQga2V5IGluZGV4IGhlcmUsIGFjdHVhbAogCQkgKiBrZXkgaXMgc2V0IGJlbG93IGlmIG5lZWRlZC4KIAkJICovCi0JCXNldF93ZXBfa2V5KGxvY2FsLCBpZHgsIE5VTEwsIDAsIHBlcm0sIDEpOworCQlyYyA9IHNldF93ZXBfdHhfaWR4KGxvY2FsLCBpZHgsIHBlcm0sIDEpOworCQlpZiAocmMgPCAwKSB7CisJCQlhaXJvX3ByaW50X2Vycihsb2NhbC0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCAiCisJCQkgICAgICAgICAgICAgICAiV0VQIHRyYW5zbWl0IGluZGV4IHRvICVkOiAlZC4iLAorCQkJICAgICAgICAgICAgICAgaWR4LCByYyk7CisJCQlyZXR1cm4gcmM7CisJCX0KIAkJc2V0X2tleSA9IGV4dC0+a2V5X2xlbiA+IDAgPyAxIDogMDsKIAl9CiAKQEAgLTY0NDQsNyArNjU4MiwxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogU2VuZCB0aGUga2V5IHRvIHRoZSBjYXJkICovCi0JCXNldF93ZXBfa2V5KGxvY2FsLCBpZHgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQlyYyA9IHNldF93ZXBfa2V5KGxvY2FsLCBpZHgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQlpZiAocmMgPCAwKSB7CisJCQlhaXJvX3ByaW50X2Vycihsb2NhbC0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCBXRVAga2V5IgorCQkJICAgICAgICAgICAgICAgIiBhdCBpbmRleCAlZDogJWQuIiwgaWR4LCByYyk7CisJCQlyZXR1cm4gcmM7CisJCX0KIAl9CiAKIAkvKiBSZWFkIHRoZSBmbGFncyAqLwpAQCAtNjQ3NCwxNCArNjYxNywxMiBAQAogCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CiAJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsJCS8qIENhcmQgY2FwYWJpbGl0eSBpbmZvICovCiAJaW50IGlkeCwgbWF4X2tleV9sZW47CisJdTggYnVmWzE2XTsKIAotCS8qIElzIGl0IHN1cHBvcnRlZCA/ICovCi0JcmVhZENhcGFiaWxpdHlSaWQobG9jYWwsICZjYXBfcmlkLCAxKTsKLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQorCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CiAKIAltYXhfa2V5X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7CkBAIC02NDkwLDExICs2NjMxLDE0IEBACiAKIAlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAJaWYgKGlkeCkgewotCQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpZHggLSAxKSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaWR4IC0gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCX0gZWxzZSB7CisJCWlkeCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGlkeCA8IDApCisJCQlpZHggPSAwOworCX0KIAogCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7CiAJbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKQEAgLTY1MTcsMTAgKzY2NjEsOCBAQAogCW1lbXNldChleHRyYSwgMCwgMTYpOwogCQogCS8qIENvcHkgdGhlIGtleSB0byB0aGUgdXNlciBidWZmZXIgKi8KLQlleHQtPmtleV9sZW4gPSBnZXRfd2VwX2tleShsb2NhbCwgaWR4KTsKLQlpZiAoZXh0LT5rZXlfbGVuID4gMTYpIHsKLQkJZXh0LT5rZXlfbGVuPTA7Ci0JfQorCWV4dC0+a2V5X2xlbiA9IGdldF93ZXBfa2V5KGxvY2FsLCBpZHgsICZidWZbMF0sIHNpemVvZihidWYpKTsKKwltZW1jcHkoZXh0cmEsIGJ1ZiwgZXh0LT5rZXlfbGVuKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjc5NSw4ICs2OTM3LDggQEAKIAlrID0gMDsKIAlmb3IoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CiAJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsgLyogTGlzdCBpbmRleCAqLwotCQlyYW5nZS0+ZnJlcVtrXS5tID0gZnJlcXVlbmN5X2xpc3RbaV0gKiAxMDAwMDA7Ci0JCXJhbmdlLT5mcmVxW2srK10uZSA9IDE7CS8qIFZhbHVlcyBpbiB0YWJsZSBpbiBNSHogLT4gKiAxMF41ICogMTAgKi8KKwkJcmFuZ2UtPmZyZXFba10ubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpICsgMSkgKiAxMDAwMDA7CisJCXJhbmdlLT5mcmVxW2srK10uZSA9IDE7CS8qIFZhbHVlcyBpbiBNSHogLT4gKiAxMF41ICogMTAgKi8KIAl9CiAJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOwogCkBAIC03MDMxLDExICs3MTczLDE1IEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNvY2thZGRyICphZGRyZXNzID0gKHN0cnVjdCBzb2NrYWRkciAqKSBleHRyYTsKLQlzdHJ1Y3QgaXdfcXVhbGl0eSBxdWFsW0lXX01BWF9BUF07CisJc3RydWN0IGl3X3F1YWxpdHkgKnF1YWw7CiAJQlNTTGlzdFJpZCBCU1NMaXN0OwogCWludCBpOwogCWludCBsb3NlU3luYyA9IGNhcGFibGUoQ0FQX05FVF9BRE1JTikgPyAxOiAtMTsKIAorCXF1YWwgPSBrbWFsbG9jKElXX01BWF9BUCAqIHNpemVvZigqcXVhbCksIEdGUF9LRVJORUwpOworCWlmICghcXVhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgSVdfTUFYX0FQOyBpKyspIHsKIAkJdTE2IGRCbTsKIAkJaWYgKHJlYWRCU1NMaXN0UmlkKGxvY2FsLCBsb3NlU3luYywgJkJTU0xpc3QpKQpAQCAtNzA5MCw2ICs3MjM2LDcgQEAKIAl9CiAJZHdycS0+bGVuZ3RoID0gaTsKIAorCWtmcmVlKHF1YWwpOwogCXJldHVybiAwOwogfQogCkBAIC03MTg5LDEwICs3MzM2LDcgQEAKIAkvKiBBZGQgZnJlcXVlbmN5ICovCiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCWl3ZS51LmZyZXEubSA9IGxlMTZfdG9fY3B1KGJzcy0+ZHNDaGFubmVsKTsKLQkvKiBpd2UudS5mcmVxLm0gY29udGFpbnQgdGhlIGNoYW5uZWwgKHN0YXJ0aW5nIDEpLCBvdXIgCi0JICogZnJlcXVlbmN5X2xpc3QgYXJyYXkgc3RhcnQgYXQgaW5kZXggMC4uLgotCSAqLwotCWl3ZS51LmZyZXEubSA9IGZyZXF1ZW5jeV9saXN0W2l3ZS51LmZyZXEubSAtIDFdICogMTAwMDAwOworCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpd2UudS5mcmVxLm0pICogMTAwMDAwOwogCWl3ZS51LmZyZXEuZSA9IDE7CiAJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCiAJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IDI3Njk2YzIuLmQwNTkzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTE2LDggKzE2LDggQEAKICAgICBJbiBhZGRpdGlvbiB0aGlzIG1vZHVsZSB3YXMgZGVyaXZlZCBmcm9tIGR1bW15X2NzLgogICAgIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiBkdW1teV9jcyBpcyBEYXZpZCBBLiBIaW5kcwogICAgIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCi0gICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgIAotICAgIAorICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogI2lmZGVmIF9fSU5fUENNQ0lBX1BBQ0tBR0VfXwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSAiYWlyby5oIgpAQCAtNTQsNyArNTQsNyBAQAogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKIHN0YXRpYyBjaGFyICp2ZXJzaW9uID0gIiRSZXZpc2lvbjogMS4yICQiOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnID4gKG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsKICNlbHNlCiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTYyLDkgKzYyLDkgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBNT0RVTEVfQVVUSE9SKCJCZW5qYW1pbiBSZWVkIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0IFwKLSAgICAgICAgICAgICAgICAgICBjYXJkcy4gIFRoaXMgaXMgdGhlIG1vZHVsZSB0aGF0IGxpbmtzIHRoZSBQQ01DSUEgY2FyZCBcCi0JCSAgIHdpdGggdGhlIGFpcm8gbW9kdWxlLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBDaXNjby9BaXJvbmV0IDgwMi4xMSB3aXJlbGVzcyBldGhlcm5ldCAiCisJCSAgICJjYXJkcy4gIFRoaXMgaXMgdGhlIG1vZHVsZSB0aGF0IGxpbmtzIHRoZSBQQ01DSUEgY2FyZCAiCisJCSAgICJ3aXRoIHRoZSBhaXJvIG1vZHVsZS4iKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBaXJvbmV0IDQ1MDAsIDQ4MDAgYW5kIENpc2NvIDM0MCBQQ01DSUEgY2FyZHMiKTsKIApAQCAtNzYsNyArNzYsNyBAQAogICAgZXZlbnQgaXMgcmVjZWl2ZWQuICBUaGUgY29uZmlnKCkgYW5kIHJlbGVhc2UoKSBlbnRyeSBwb2ludHMgYXJlCiAgICB1c2VkIHRvIGNvbmZpZ3VyZSBvciByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkCiAgICBpbnNlcnRpb24gYW5kIGVqZWN0aW9uIGV2ZW50cy4gIFRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgYWlyb19jcwotICAgZXZlbnQgaGFuZGxlci4gCisgICBldmVudCBoYW5kbGVyLgogKi8KIAogc3RhdGljIGludCBhaXJvX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CkBAIC0xMDMsOCArMTAzLDkgQEAKICAgIGJ5IG9uZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCiAKICAgIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGEgbGlua2VkIGxpc3QgZm9yIHRoaXMgLS0gZm9yIGV4YW1wbGUsIHRoZQotICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjbWNpYV9kZXZpY2UgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCi0gICBkZXZpY2UgbnVtYmVycyBhcmUgdXNlZCB0byBkZXJpdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgaW5kZXguCisgICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywKKyAgIHdoZXJlIG1pbm9yIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZworICAgYXJyYXkgaW5kZXguCiAqLwogCiAvKgpAQCAtMTIyLDIyICsxMjMsMjIgQEAKICAgIGRldmljZSBJTyByb3V0aW5lcyBjYW4gdXNlIGEgZmxhZyBsaWtlIHRoaXMgdG8gdGhyb3R0bGUgSU8gdG8gYQogICAgY2FyZCB0aGF0IGlzIG5vdCByZWFkeSB0byBhY2NlcHQgaXQuCiAqLwotICAgCisKIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJZGV2X25vZGVfdAlub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpldGhfZGV2OwogfSBsb2NhbF9pbmZvX3Q7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBhaXJvX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCiAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAogICB3aXRoIENhcmQgU2VydmljZXMuCi0gIAorCiAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQogICBjYXJkIGluc2VydGlvbiBldmVudC4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgYWlyb19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCkBAIC0xNTAsNyArMTUxLDcgQEAKIAlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlwX2Rldi0+aXJxLkhhbmRsZXIgPSBOVUxMOwotCQorCiAJLyoKIAkgIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CkBAIC0xNjAsNyArMTYxLDcgQEAKIAkqLwogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSAwOwogCXBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLQkKKwogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CkBAIC0xNzMsMTIgKzE3NCwxMiBAQAogfSAvKiBhaXJvX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCiAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCiAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGFpcm9fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtMTg3LDIwICsxODgsMjAgQEAKIAogCWFpcm9fcmVsZWFzZShsaW5rKTsKIAotCWlmICggKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ICkgewotCQlzdG9wX2Fpcm9fY2FyZCggKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwICk7CisJaWYgKCgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYpIHsKKwkJc3RvcF9haXJvX2NhcmQoKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiwgMCk7CiAJfQotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7CiAKIAlrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogYWlyb19kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIGFpcm9fY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CiAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQogICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCi0gIAorCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKQEAgLTMyNSwyNiArMzI2LDI4IEBACiAJKi8KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCQorCiAJLyoKIAkgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAJICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogCSovCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKLQkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSAKLQkJaW5pdF9haXJvX2NhcmQoIGxpbmstPmlycS5Bc3NpZ25lZElSUSwKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspICk7Ci0JaWYgKCEoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYpIGdvdG8gY3NfZmFpbGVkOwotCQorCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAorCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCSgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYgPQorCQlpbml0X2Fpcm9fY2FyZChsaW5rLT5pcnEuQXNzaWduZWRJUlEsCisJCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxLCAxLCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisJaWYgKCEoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2KQorCQlnb3RvIGNzX2ZhaWxlZDsKKwogCS8qCiAJICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQogCSAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuCiAJKi8KLQlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUgKTsKKwlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2LT5uYW1lKTsKIAlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOwogCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKLQkKKwogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KIAlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiAiLAogCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwpAQCAtMzc0LDExICszNzcsMTEgQEAKIH0gLyogYWlyb19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIEFmdGVyIGEgY2FyZCBpcyByZW1vdmVkLCBhaXJvX3JlbGVhc2UoKSB3aWxsIHVucmVnaXN0ZXIgdGhlCiAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwogICBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGFpcm9fcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTQ3NSw3ICs0NzgsNyBAQAogICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKICAgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKICAgICBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgCisgICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCiBtb2R1bGVfaW5pdChhaXJvX2NzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQyODFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL0tjb25maWcKQEAgLTAsMCArMSwxNyBAQAorY29uZmlnIEFSOTE3MF9VU0IKKwl0cmlzdGF0ZSAiQXRoZXJvcyBBUjkxNzAgODAyLjExbiBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKKwloZWxwCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgQXRoZXJvcyAib3R1cyIgODAyLjExbiBVU0IgZGV2aWNlcy4KKworCSAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIGFkZGl0aW9uYWwgZmlybXdhcmUgKDIgZmlsZXMpLgorCSAgRm9yIG5vdywgdGhlc2UgZmlsZXMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBoZXJlOgorCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hcjkxNzAKKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGFyOTE3MHVzYi4KKworY29uZmlnIEFSOTE3MF9MRURTCisJYm9vbAorCWRlcGVuZHMgb24gQVI5MTcwX1VTQiAmJiBNQUM4MDIxMV9MRURTICYmIChMRURTX0NMQVNTID0geSB8fCBMRURTX0NMQVNTID0gQVI5MTcwX1VTQikKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDkxYzdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorYXI5MTcwdXNiLW9ianMgOj0gdXNiLm8gbWFpbi5vIGNtZC5vIG1hYy5vIHBoeS5vIGxlZC5vCisKK29iai0kKENPTkZJR19BUjkxNzBfVVNCKSArPSBhcjkxNzB1c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2FyOTE3MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2FyOTE3MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZmIyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvYXI5MTcwLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBEcml2ZXIgc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19BUjkxNzBfSAorI2RlZmluZSBfX0FSOTE3MF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCisjaW5jbHVkZSAiZWVwcm9tLmgiCisjaW5jbHVkZSAiaHcuaCIKKworI2RlZmluZSBQQVlMT0FEX01BWAkoQVI5MTcwX01BWF9DTURfTEVOLzQgLSAxKQorCitlbnVtIGFyOTE3MF9idyB7CisJQVI5MTcwX0JXXzIwLAorCUFSOTE3MF9CV180MF9CRUxPVywKKwlBUjkxNzBfQldfNDBfQUJPVkUsCisKKwlfX0FSOTE3MF9OVU1fQlcsCit9OworCitlbnVtIGFyOTE3MF9yZl9pbml0X21vZGUgeworCUFSOTE3MF9SRklfTk9ORSwKKwlBUjkxNzBfUkZJX1dBUk0sCisJQVI5MTcwX1JGSV9DT0xELAorfTsKKworI2RlZmluZSBBUjkxNzBfTUFYX1JYX0JVRkZFUl9TSVpFCQk4MTkyCisKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKK3N0cnVjdCBhcjkxNzA7CisKK3N0cnVjdCBhcjkxNzBfbGVkIHsKKwlzdHJ1Y3QgYXI5MTcwICphcjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGw7CisJY2hhciBuYW1lWzMyXTsKKwl1bnNpZ25lZCBpbnQgdG9nZ2xlZDsKKwlib29sIHJlZ2lzdGVyZWQ7Cit9OworCisjZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCisKK2VudW0gYXI5MTcwX2RldmljZV9zdGF0ZSB7CisJQVI5MTcwX1VOS05PV05fU1RBVEUsCisJQVI5MTcwX1NUT1BQRUQsCisJQVI5MTcwX0lETEUsCisJQVI5MTcwX1NUQVJURUQsCisJQVI5MTcwX0FTU09DSUFURUQsCit9OworCitzdHJ1Y3QgYXI5MTcwIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJZW51bSBhcjkxNzBfZGV2aWNlX3N0YXRlIHN0YXRlOworCisJaW50ICgqb3Blbikoc3RydWN0IGFyOTE3MCAqKTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IGFyOTE3MCAqKTsKKwlpbnQgKCp0eCkoc3RydWN0IGFyOTE3MCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBib29sLCB1bnNpZ25lZCBpbnQpOworCWludCAoKmV4ZWNfY21kKShzdHJ1Y3QgYXI5MTcwICosIGVudW0gYXI5MTcwX2NtZCwgdTMyICwKKwkJCXZvaWQgKiwgdTMyICwgdm9pZCAqKTsKKwl2b2lkICgqY2FsbGJhY2tfY21kKShzdHJ1Y3QgYXI5MTcwICosIHUzMiAsIHZvaWQgKik7CisKKwkvKiBpbnRlcmZhY2UgbW9kZSBzZXR0aW5ncyAqLworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCS8qIGJlYWNvbmluZyAqLworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl93b3JrOworCisJLyogY3J5cHRvZ3JhcGhpYyBlbmdpbmUgKi8KKwl1NjQgdXNlZGtleXM7CisJYm9vbCByeF9zb2Z0d2FyZV9kZWNyeXB0aW9uOworCWJvb2wgZGlzYWJsZV9vZmZsb2FkOworCisJLyogZmlsdGVyIHNldHRpbmdzICovCisJc3RydWN0IHdvcmtfc3RydWN0IGZpbHRlcl9jb25maWdfd29yazsKKwl1NjQgY3VyX21jX2hhc2gsIHdhbnRfbWNfaGFzaDsKKwl1MzIgY3VyX2ZpbHRlciwgd2FudF9maWx0ZXI7CisJdW5zaWduZWQgaW50IGZpbHRlcl9jaGFuZ2VkOworCWJvb2wgc25pZmZlcl9lbmFibGVkOworCisJLyogUEhZICovCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCWludCBub2lzZVs0XTsKKworCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KKwl1OCBwb3dlcl81R19sZWdbNF07CisJdTggcG93ZXJfMkdfY2NrWzRdOworCXU4IHBvd2VyXzJHX29mZG1bNF07CisJdTggcG93ZXJfNUdfaHQyMFs4XTsKKwl1OCBwb3dlcl81R19odDQwWzhdOworCXU4IHBvd2VyXzJHX2h0MjBbOF07CisJdTggcG93ZXJfMkdfaHQ0MFs4XTsKKworI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworCXN0cnVjdCBkZWxheWVkX3dvcmsgbGVkX3dvcms7CisJc3RydWN0IGFyOTE3MF9sZWQgbGVkc1tBUjkxNzBfTlVNX0xFRFNdOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworCisJLyogcW9zIHF1ZXVlIHNldHRpbmdzICovCisJc3BpbmxvY2tfdCB0eF9zdGF0c19sb2NrOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbNV07CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgZWRjZls1XTsKKworCXNwaW5sb2NrX3QgY21kbG9jazsKKwlfX2xlMzIgY21kYnVmW1BBWUxPQURfTUFYICsgMV07CisKKwkvKiBNQUMgc3RhdGlzdGljcyAqLworCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIHN0YXRzOworCisJLyogRUVQUk9NICovCisJc3RydWN0IGFyOTE3MF9lZXByb20gZWVwcm9tOworCisJLyogZ2xvYmFsIHR4IHN0YXR1cyBmb3IgdW5yZWdpc3RlcmVkIFN0YXRpb25zLiAqLworCXN0cnVjdCBza19idWZmX2hlYWQgZ2xvYmFsX3R4X3N0YXR1czsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGdsb2JhbF90eF9zdGF0dXNfd2FzdGU7CisJc3RydWN0IGRlbGF5ZWRfd29yayB0eF9zdGF0dXNfamFuaXRvcjsKK307CisKK3N0cnVjdCBhcjkxNzBfc3RhX2luZm8geworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfc3RhdHVzW19fQVI5MTcwX05VTV9UWFFdOworfTsKKworI2RlZmluZSBJU19TVEFSVEVEKGEpCQkoYS0+c3RhdGUgPj0gQVI5MTcwX1NUQVJURUQpCisjZGVmaW5lIElTX0FDQ0VQVElOR19DTUQoYSkJKGEtPnN0YXRlID49IEFSOTE3MF9JRExFKQorCisjZGVmaW5lIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9QUk9NSVNDCQlCSVQoMCkKKyNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVAkJQklUKDEpCisjZGVmaW5lIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9GUkFNRUZJTFRFUglCSVQoMikKKworLyogZXhwb3J0ZWQgaW50ZXJmYWNlICovCit2b2lkICphcjkxNzBfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSk7CitpbnQgYXI5MTcwX3JlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKK3ZvaWQgYXI5MTcwX3J4KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXI5MTcwX3VucmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIpOwordm9pZCBhcjkxNzBfaGFuZGxlX3R4X3N0YXR1cyhzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgYm9vbCB1cGRhdGVfc3RhdGlzdGljcywgdTE2IHR4X3N0YXR1cyk7CisKKy8qIE1BQyAqLworaW50IGFyOTE3MF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXI5MTcwX2luaXRfbWFjKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfc2V0X3FvcyhzdHJ1Y3QgYXI5MTcwICphcik7CitpbnQgYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3Qoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIG1heF9yZXRyeSk7CitpbnQgYXI5MTcwX3VwZGF0ZV9iZWFjb24oc3RydWN0IGFyOTE3MCAqYXIpOwordm9pZCBhcjkxNzBfbmV3X2JlYWNvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworaW50IGFyOTE3MF91cGxvYWRfa2V5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBpZCwgY29uc3QgdTggKm1hYywgdTgga3R5cGUsCisJCSAgICAgIHU4IGtleWlkeCwgdTggKmtleWRhdGEsIGludCBrZXlsZW4pOworaW50IGFyOTE3MF9kaXNhYmxlX2tleShzdHJ1Y3QgYXI5MTcwICphciwgdTggaWQpOworCisvKiBMRURzICovCisjaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCitpbnQgYXI5MTcwX3JlZ2lzdGVyX2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOwordm9pZCBhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKTsKKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KK2ludCBhcjkxNzBfaW5pdF9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfc2V0X2xlZHNfc3RhdGUoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBsZWRfc3RhdGUpOworCisvKiBQSFkgLyBSRiAqLworaW50IGFyOTE3MF9pbml0X3BoeShzdHJ1Y3QgYXI5MTcwICphciwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK2ludCBhcjkxNzBfaW5pdF9yZihzdHJ1Y3QgYXI5MTcwICphcik7CitpbnQgYXI5MTcwX3NldF9jaGFubmVsKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCSAgICAgICBlbnVtIGFyOTE3MF9yZl9pbml0X21vZGUgcmZpLCBlbnVtIGFyOTE3MF9idyBidyk7CisKKyNlbmRpZiAvKiBfX0FSOTE3MF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3YTYyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIEJhc2ljIEhXIHJlZ2lzdGVyL21lbW9yeS9jb21tYW5kIGFjY2VzcyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImFyOTE3MC5oIgorI2luY2x1ZGUgImNtZC5oIgorCitpbnQgYXI5MTcwX3dyaXRlX21lbShzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgX19sZTMyICpkYXRhLCBzaXplX3QgbGVuKQoreworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfV01FTSwgbGVuLCAodTggKikgZGF0YSwgMCwgTlVMTCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cml0aW5nIG1lbW9yeSBmYWlsZWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYXI5MTcwX3dyaXRlX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTMyIHZhbCkKK3sKKwlfX2xlMzIgYnVmWzJdID0geworCQljcHVfdG9fbGUzMihyZWcpLAorCQljcHVfdG9fbGUzMih2YWwpLAorCX07CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQorCQlyZXR1cm4gMDsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9XUkVHLCBzaXplb2YoYnVmKSwKKwkJCSAgICh1OCAqKSBidWYsIDAsIE5VTEwpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogd3JpdGluZyByZWcgJSN4ICh2YWwgJSN4KSBmYWlsZWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCByZWcsIHZhbCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfcmVhZF9tcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBpbnQgbnJlZ3MsCisJCQkgICAgY29uc3QgdTMyICpyZWdzLCB1MzIgKm91dCkKK3sKKwlpbnQgaSwgZXJyOworCV9fbGUzMiAqb2ZmcywgKnJlczsKKworCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQorCQlyZXR1cm4gMDsKKworCS8qIGFidXNlICJvdXQiIGZvciB0aGUgcmVnaXN0ZXIgb2Zmc2V0cywgbXVzdCBiZSBzYW1lIGxlbmd0aCAqLworCW9mZnMgPSAoX19sZTMyICopb3V0OworCWZvciAoaSA9IDA7IGkgPCBucmVnczsgaSsrKQorCQlvZmZzW2ldID0gY3B1X3RvX2xlMzIocmVnc1tpXSk7CisKKwkvKiBhbHNvIHVzZSB0aGUgc2FtZSBidWZmZXIgZm9yIHRoZSBpbnB1dCAqLworCXJlcyA9IChfX2xlMzIgKilvdXQ7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfUlJFRywKKwkJCSAgIDQgKiBucmVncywgKHU4ICopb2ZmcywKKwkJCSAgIDQgKiBucmVncywgKHU4ICopcmVzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogY29udmVydCByZXN1bHQgdG8gY3B1IGVuZGlhbiAqLworCWZvciAoaSA9IDA7IGkgPCBucmVnczsgaSsrKQorCQlvdXRbaV0gPSBsZTMyX3RvX2NwdShyZXNbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhcjkxNzBfcmVhZF9yZWcoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiByZWcsIHUzMiAqdmFsKQoreworCXJldHVybiBhcjkxNzBfcmVhZF9tcmVnKGFyLCAxLCAmcmVnLCB2YWwpOworfQorCitpbnQgYXI5MTcwX2VjaG9fdGVzdChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIHYpCit7CisJX19sZTMyIGVjaG9idWYgPSBjcHVfdG9fbGUzMih2KTsKKwlfX2xlMzIgZWNob3JlczsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX0VDSE8sCisJCQkgICA0LCAodTggKikmZWNob2J1ZiwKKwkJCSAgIDQsICh1OCAqKSZlY2hvcmVzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGVjaG9idWYgIT0gZWNob3JlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGYwZTUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBCYXNpYyBIVyByZWdpc3Rlci9tZW1vcnkvY29tbWFuZCBhY2Nlc3MgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fQ01EX0gKKyNkZWZpbmUgX19DTURfSAorCisjaW5jbHVkZSAiYXI5MTcwLmgiCisKKy8qIGJhc2ljIEhXIGFjY2VzcyAqLworaW50IGFyOTE3MF93cml0ZV9tZW0oc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IF9fbGUzMiAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgYXI5MTcwX3dyaXRlX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTMyIHZhbCk7CitpbnQgYXI5MTcwX3JlYWRfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgcmVnLCB1MzIgKnZhbCk7CitpbnQgYXI5MTcwX2VjaG9fdGVzdChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIHYpOworCisvKgorICogTWFjcm9zIHRvIGZhY2lsaXRhdGUgd3JpdGluZyBtdWx0aXBsZSByZWdpc3RlcnMgaW4gYSBzaW5nbGUKKyAqIHdyaXRlLWNvbWJpbmluZyBVU0IgY29tbWFuZC4gTm90ZSB0aGF0IHdoZW4gdGhlIGZpcnN0IGdyb3VwCisgKiBmYWlscyB0aGUgd2hvbGUgdGhpbmcgd2lsbCBmYWlsIHdpdGhvdXQgYW55IG90aGVycyBhdHRlbXB0ZWQsCisgKiBidXQgeW91IHdvbid0IGtub3cgd2hpY2ggd3JpdGUgaW4gdGhlIGdyb3VwIGZhaWxlZC4KKyAqLworI2RlZmluZSBhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWludCBfX25yZWcgPSAwLCBfX2VyciA9IDA7CQkJCQlcCisJc3RydWN0IGFyOTE3MCAqX19hciA9IGFyOworCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZShyLCB2KSBkbyB7CQkJCQlcCisJX19hci0+Y21kYnVmWzIgKiBfX25yZWcgKyAxXSA9IGNwdV90b19sZTMyKHIpOwkJCVwKKwlfX2FyLT5jbWRidWZbMiAqIF9fbnJlZyArIDJdID0gY3B1X3RvX2xlMzIodik7CQkJXAorCV9fbnJlZysrOwkJCQkJCQlcCisJaWYgKChfX25yZWcgPj0gUEFZTE9BRF9NQVgvMikpIHsJCQkJXAorCQlpZiAoSVNfQUNDRVBUSU5HX0NNRChfX2FyKSkJCQkJXAorCQkJX19lcnIgPSBhci0+ZXhlY19jbWQoX19hciwgQVI5MTcwX0NNRF9XUkVHLAlcCisJCQkJCSAgICAgOCAqIF9fbnJlZywJCVwKKwkJCQkJICAgICAodTggKikgJl9fYXItPmNtZGJ1ZlsxXSwJXAorCQkJCQkgICAgIDAsIE5VTEwpOwkJCVwKKwkJX19ucmVnID0gMDsJCQkJCQlcCisJCWlmIChfX2VycikJCQkJCQlcCisJCQlnb3RvIF9fcmVnd3JpdGVfb3V0OwkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCkJCQkJCVwKK19fcmVnd3JpdGVfb3V0IDoJCQkJCQkJXAorCWlmIChfX25yZWcpIHsJCQkJCQkJXAorCQlpZiAoSVNfQUNDRVBUSU5HX0NNRChfX2FyKSkJCQkJXAorCQkJX19lcnIgPSBhci0+ZXhlY19jbWQoX19hciwgQVI5MTcwX0NNRF9XUkVHLAlcCisJCQkJCSAgICAgOCAqIF9fbnJlZywgCQlcCisJCQkJCSAgICAgKHU4ICopICZfX2FyLT5jbWRidWZbMV0sCVwKKwkJCQkJICAgICAwLCBOVUxMKTsJCQlcCisJCV9fbnJlZyA9IDA7CQkJCQkJXAorCX0KKworI2RlZmluZSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCkJCQkJCVwKKwlfX2VycjsJCQkJCQkJCVwKK30gd2hpbGUgKDApOworCisjZW5kaWYgLyogX19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzhjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvZWVwcm9tLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBFRVBST00gbGF5b3V0CisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fQVI5MTcwX0VFUFJPTV9ICisjZGVmaW5lIF9fQVI5MTcwX0VFUFJPTV9ICisKKyNkZWZpbmUgQVI1NDE2X01BWF9DSEFJTlMJCTIKKyNkZWZpbmUgQVI1NDE2X01PREFMX1NQVVJTCQk1CisKK3N0cnVjdCBhcjkxNzBfZWVwcm9tX21vZGFsIHsKKwlfX2xlMzIJYW50Q3RybENoYWluW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwlfX2xlMzIJYW50Q3RybENvbW1vbjsKKwlzOAlhbnRlbm5hR2FpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlzd2l0Y2hTZXR0bGluZzsKKwl1OAl0eFJ4QXR0ZW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJcnhUeE1hcmdpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwlzOAlhZGNEZXNpcmVkU2l6ZTsKKwlzOAlwZ2FEZXNpcmVkU2l6ZTsKKwl1OAl4bG5hR2FpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAl0eEVuZFRvWHBhT2ZmOworCXU4CXR4RW5kVG9SeE9uOworCXU4CXR4RnJhbWVUb1hwYU9uOworCXU4CXRocmVzaDYyOworCXM4CW5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJeHBkR2FpbjsKKwl1OAl4cGQ7CisJczgJaXFDYWxJQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXM4CWlxQ2FsUUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlwZEdhaW5PdmVybGFwOworCXU4CW9iOworCXU4CWRiOworCXU4CXhwYUJpYXNMdmw7CisJdTgJcHdyRGVjcmVhc2VGb3IyQ2hhaW47CisJdTgJcHdyRGVjcmVhc2VGb3IzQ2hhaW47CisJdTgJdHhGcmFtZVRvRGF0YVN0YXJ0OworCXU4CXR4RnJhbWVUb1BhT247CisJdTgJaHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJdTgJYnN3QXR0ZW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CWJzd01hcmdpbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJc3dTZXR0bGVIdDQwOworCXU4CXJlc2VydmVkWzIyXTsKKwlzdHJ1Y3Qgc3B1cl9jaGFubmVsIHsKKwkJX19sZTE2IHNwdXJDaGFuOworCQl1OAlzcHVyUmFuZ2VMb3c7CisJCXU4CXNwdXJSYW5nZUhpZ2g7CisJfSBfX3BhY2tlZCBzcHVyX2NoYW5uZWxzW0FSNTQxNl9NT0RBTF9TUFVSU107Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMJCTQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTCQk1CisKK3N0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fZGF0YV9wZXJfZnJlcSB7CisJdTgJcHdyX3BkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOworCXU4CXZwZF9wZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMJCTgKKyNkZWZpbmUgQVI1NDE2X05VTV8yR19DQUxfUElFUlMJCTQKKworI2RlZmluZSBBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTCTgKKyNkZWZpbmUgQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlMJMworI2RlZmluZSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlMJNAorI2RlZmluZSBBUjU0MTZfTUFYX05VTV9UR1RfUFdSUwkJOAorCitzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9sZWdhY3kgeworCXU4CWZyZXE7CisJdTgJcG93ZXJbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odCB7CisJdTgJZnJlcTsKKwl1OAlwb3dlcls4XTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2X05VTV9DVExTCQkJMjQKKworc3RydWN0IGFyOTE3MF9jYWxjdGxfZWRnZXMgeworCXU4CWNoYW5uZWw7CisjZGVmaW5lIEFSOTE3MF9DQUxDVExfRURHRV9GTEFHUwkweEMwCisJdTgJcG93ZXJfZmxhZ3M7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFSNTQxNl9OVU1fQkFORF9FREdFUwkJOAorCitzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9kYXRhIHsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcworCQljb250cm9sX2VkZ2VzW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNX0JBTkRfRURHRVNdOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3QgYXI5MTcwX2VlcHJvbSB7CisJX19sZTE2CWxlbmd0aDsKKwlfX2xlMTYJY2hlY2tzdW07CisJX19sZTE2CXZlcnNpb247CisJdTgJb3BlcmF0aW5nX2ZsYWdzOworI2RlZmluZSBBUjkxNzBfT1BGTEFHXzVHSFogCQkxCisjZGVmaW5lIEFSOTE3MF9PUEZMQUdfMkdIWiAJCTIKKwl1OAltaXNjOworCV9fbGUxNglyZWdfZG9tYWluWzJdOworCXU4CW1hY19hZGRyZXNzWzZdOworCXU4CXJ4X21hc2s7CisJdTgJdHhfbWFzazsKKwlfX2xlMTYJcmZfc2lsZW50OworCV9fbGUxNglibHVldG9vdGhfb3B0aW9uczsKKwlfX2xlMTYJZGV2aWNlX2NhcGFiaWxpdGllczsKKwlfX2xlMzIJYnVpbGRfbnVtYmVyOworCXU4CWRldmljZVR5cGU7CisJdTgJcmVzZXJ2ZWRbMzNdOworCisJdTgJY3VzdG9tZXJfZGF0YVs2NF07CisKKwlzdHJ1Y3QgYXI5MTcwX2VlcHJvbV9tb2RhbAorCQltb2RhbF9oZWFkZXJbMl07CisKKwl1OAljYWxfZnJlcV9waWVyXzVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKwl1OAljYWxfZnJlcV9waWVyXzJHW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKKworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fZGF0YV9wZXJfZnJlcQorCQljYWxfcGllcl9kYXRhXzVHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU10sCisJCWNhbF9waWVyX2RhdGFfMkdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKKworCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9sZWdhY3kKKwkJY2FsX3RndF9wd3JfNUdbQVI1NDE2X05VTV81R19UQVJHRVRfUFdSU107CisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKKwkJY2FsX3RndF9wd3JfNUdfaHQyMFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXSwKKwkJY2FsX3RndF9wd3JfNUdfaHQ0MFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXTsKKworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeQorCQljYWxfdGd0X3B3cl8yR19jY2tbQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlNdLAorCQljYWxfdGd0X3B3cl8yR19vZmRtW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107CisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKKwkJY2FsX3RndF9wd3JfMkdfaHQyMFtBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlNdLAorCQljYWxfdGd0X3B3cl8yR19odDQwW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107CisKKwkvKiBjb25mb3JtYW5jZSB0ZXN0aW5nIGxpbWl0cyAqLworCXU4CWN0bF9pbmRleFtBUjU0MTZfTlVNX0NUTFNdOworCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEKKwkJY3RsX2RhdGFbQVI1NDE2X05VTV9DVExTXTsKKworCXU4CXBhZDsKKwlfX2xlMTYJc3Vic3lzdGVtX2lkOworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIF9fQVI5MTcwX0VFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDkxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvaHcuaApAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIEhhcmR3YXJlLXNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fQVI5MTcwX0hXX0gKKyNkZWZpbmUgX19BUjkxNzBfSFdfSAorCisjZGVmaW5lIEFSOTE3MF9NQVhfQ01EX0xFTgk2NAorCitlbnVtIGFyOTE3MF9jbWQgeworCUFSOTE3MF9DTURfUlJFRwkJPSAweDAwLAorCUFSOTE3MF9DTURfV1JFRwkJPSAweDAxLAorCUFSOTE3MF9DTURfUk1FTQkJPSAweDAyLAorCUFSOTE3MF9DTURfV01FTQkJPSAweDAzLAorCUFSOTE3MF9DTURfQklUQU5ECT0gMHgwNCwKKwlBUjkxNzBfQ01EX0JJVE9SCT0gMHgwNSwKKwlBUjkxNzBfQ01EX0VLRVkJCT0gMHgyOCwKKwlBUjkxNzBfQ01EX0RLRVkJCT0gMHgyOSwKKwlBUjkxNzBfQ01EX0ZSRVFVRU5DWQk9IDB4MzAsCisJQVI5MTcwX0NNRF9SRl9JTklUCT0gMHgzMSwKKwlBUjkxNzBfQ01EX1NZTlRICT0gMHgzMiwKKwlBUjkxNzBfQ01EX0ZSRVFfU1RBUlQJPSAweDMzLAorCUFSOTE3MF9DTURfRUNITwkJPSAweDgwLAorCUFSOTE3MF9DTURfVEFMTFkJPSAweDgxLAorCUFSOTE3MF9DTURfVEFMTFlfQVBECT0gMHg4MiwKKwlBUjkxNzBfQ01EX0NPTkZJRwk9IDB4ODMsCisJQVI5MTcwX0NNRF9SRVNFVAk9IDB4OTAsCisJQVI5MTcwX0NNRF9ES1JFU0VUCT0gMHg5MSwKKwlBUjkxNzBfQ01EX0RLVFhfU1RBVFVTCT0gMHg5MiwKKwlBUjkxNzBfQ01EX0ZEQwkJPSAweEEwLAorCUFSOTE3MF9DTURfV1JFRVBST00JPSAweEIwLAorCUFSOTE3MF9DTURfV0ZMQVNICT0gMHhCMCwKKwlBUjkxNzBfQ01EX0ZMQVNIX0VSQVNFCT0gMHhCMSwKKwlBUjkxNzBfQ01EX0ZMQVNIX1BST0cJPSAweEIyLAorCUFSOTE3MF9DTURfRkxBU0hfQ0hLU1VNCT0gMHhCMywKKwlBUjkxNzBfQ01EX0ZMQVNIX1JFQUQJPSAweEI0LAorCUFSOTE3MF9DTURfRldfRExfSU5JVAk9IDB4QjUsCisJQVI5MTcwX0NNRF9NRU1fV1JFRVBST00JPSAweEJCLAorfTsKKworLyogZW5kcG9pbnRzICovCisjZGVmaW5lIEFSOTE3MF9FUF9UWAkJCQkxCisjZGVmaW5lIEFSOTE3MF9FUF9SWAkJCQkyCisjZGVmaW5lIEFSOTE3MF9FUF9JUlEJCQkJMworI2RlZmluZSBBUjkxNzBfRVBfQ01ECQkJCTQKKworI2RlZmluZSBBUjkxNzBfRUVQUk9NX1NUQVJUCQkJMHgxNjAwCisKKyNkZWZpbmUgQVI5MTcwX0dQSU9fUkVHX0JBU0UJCQkweDFkMDEwMAorI2RlZmluZSBBUjkxNzBfR1BJT19SRUdfUE9SVF9UWVBFCQlBUjkxNzBfR1BJT19SRUdfQkFTRQorI2RlZmluZSBBUjkxNzBfR1BJT19SRUdfREFUQQkJCShBUjkxNzBfR1BJT19SRUdfQkFTRSArIDQpCisjZGVmaW5lIEFSOTE3MF9OVU1fTEVEUwkJCQkyCisKKworI2RlZmluZSBBUjkxNzBfVVNCX1JFR19CQVNFCQkJMHgxZTEwMDAKKyNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfRE1BX0NUTAkJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgxMDgpCisjZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9FTkFCTEVfVE9fREVWSUNFCQkweDEKKyNkZWZpbmUJCUFSOTE3MF9ETUFfQ1RMX0VOQUJMRV9GUk9NX0RFVklDRQkweDIKKyNkZWZpbmUJCUFSOTE3MF9ETUFfQ1RMX0hJR0hfU1BFRUQJCTB4NAorI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfUEFDS0VUX01PREUJCTB4OAorCisjZGVmaW5lIEFSOTE3MF9VU0JfUkVHX01BWF9BR0dfVVBMT0FECQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTEwKQorI2RlZmluZSBBUjkxNzBfVVNCX1JFR19VUExPQURfVElNRV9DVEwJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgxMTQpCisKKworCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JBU0UJCQkweDFjMzAwMAorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RTRl9MCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUxNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFNGX0gJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTE4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FUSU1fV0lORE9XCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTFDKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fUEVSSU9ECQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTIwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19QUkVUQlRUCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUyNCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19NQUNfQUREUl9MCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjEwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19NQUNfQUREUl9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjE0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CU1NJRF9MCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxOCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQlNTSURfSAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MWMpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYyNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYyOCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9USU1FT1VUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjJDKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JBU0lDX1JBVEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MzApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01BTkRBVE9SWV9SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjM0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MzgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JBQ0tPRkZfUFJPVEVDVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzYykKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfVEhSRVNIT0xECQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjQwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9QRV9ERUxBWQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY0QykKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19EWU5BTUlDX1NJRlNfQUNLCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjU4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19TTklGRkVSCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY3NCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfRU5BQkxFX1BST01JU0MJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19TTklGRkVSX0RFRkFVTFRTCQkweDAyMDAwMDAwCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT04JCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NzgpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX1JYX1NPRlRXQVJFCUJJVCgzKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9ERUZBVUxUUwkweDcwCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUlTQ182ODAJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjgwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9VTkRFUlJVTgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4OCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjhjKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FTU09DX1JFUQkJQklUKDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVNTT0NfUkVTUAkJQklUKDEpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUkVBU1NPQ19SRVEJCUJJVCgyKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1JFQVNTT0NfUkVTUAkJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUFJCX1JFUQkJQklUKDQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUFJCX1JFU1AJCUJJVCg1KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDYJCQlCSVQoNikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQ3CQkJQklUKDcpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQkVBQ09OCQlCSVQoOCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BVElNCQkJQklUKDkpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfREVBU1NPQwkJQklUKDEwKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FVVEgJCQlCSVQoMTEpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfREVBVVRICQlCSVQoMTIpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMTMJCUJJVCgxMykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQxNAkJQklUKDE0KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDE1CQlCSVQoMTUpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQkFSCQkJQklUKDI0KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDI1CQlCSVQoMjUpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUFNQT0xMCQlCSVQoMjYpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUlRTCQkJQklUKDI3KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0NUUwkJCUJJVCgyOCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BQ0sJCQlCSVQoMjkpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFCQkJQklUKDMwKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0NGRV9BQ0sJCUJJVCgzMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9ERUZBVUxUUwkJMHgwNTAwZmZmZgorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX01PTklUT1IJCTB4ZmQwMGZmZmYKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9UT1RBTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2QTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX0NSQzMyCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZBNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ1JDMTYJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkE4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9FUlJfREVDUllQVElPTl9VTkkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZBQykKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfT1ZFUlJVTgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZCMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfRVJSX0RFQ1JZUFRJT05fTVVMCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2QkMpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYX1JFVFJZCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZDQykKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfVE9UQUwJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkY0KQorCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUNLX0VYVEVOU0lPTgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY5MCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRUlGU19BTkRfU0lGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY5OCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19TTE9UX1RJTUUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2RjApCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUE9XRVJNQU5BR0VNRU5UCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzAwKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfSUJTUwkJMHhlMAorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfQVAJCTB4YTEKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX1NUQQkJMHgyCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUF9XRFMJCTB4MworI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfREVGQVVMVFMJKDB4ZiA8PCAyNCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19ST0xMX0NBTExfVEJMX0wJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDcwOCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzBfQ1cJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjAwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzFfQ1cJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjA0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzJfQ1cJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjA4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzNfQ1cJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjBDKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzRfQ1cJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjEwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzFfQUMwX0FJRlMJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMTQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDM19BQzJfQUlGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIxOCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SRVRSWV9NQVgJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMjgpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRkNTX1NFTEVDVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEJCMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRkNTX1NXRkNTCQkweDEKKyNkZWZpbmUJCUFSOTE3MF9NQUNfRkNTX0ZJRk9fUFJPVAkweDQKKworCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYT1BfTk9UX0VOT1VHSF9JTkQJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIzMCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQzFfQUMwX1RYT1AJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCNDQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDM19BQzJfVFhPUAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI0OCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfVEFCTEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhDMDApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEM1MCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWFJYX01QSQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEN0MpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1RYX01QSV9NQVNLCTB4MDAwMDAwMGYKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfVFhfVE9fTUFTSwkweDAwMDBmZmYwCisjZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1JYX01QSV9NQVNLCTB4MDAwZjAwMDAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfUlhfVE9fTUFTSwkweGZmZjAwMDAwCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0FERFIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDg0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDg4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fUExDUAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEOTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ5NCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0hUMQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEQTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9IVDIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4REE0KQorCisKKyNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfQkFTRQkJCTB4MUQ0MDAwCisKKyNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfQ0xPQ0tfU0VMCQkoQVI5MTcwX1BXUl9SRUdfQkFTRSArIDB4MDA4KQorI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzQwTUhaCTAKKyNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl8yMF8yMk1IWgkxCisjZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfNDBfNDRNSFoJMgorI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzgwXzg4TUhaCTMKKyNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0RBQ18xNjBfSU5WX0RMWQkweDcwCisKKworLyogcHV0IGJlYWNvbiBoZXJlIGluIG1lbW9yeSAqLworI2RlZmluZSBBUjkxNzBfQkVBQ09OX0JVRkZFUl9BRERSRVNTCQkweDExNzkwMAorCisKK3N0cnVjdCBhcjkxNzBfdHhfY29udHJvbCB7CisJX19sZTE2IGxlbmd0aDsKKwlfX2xlMTYgbWFjX2NvbnRyb2w7CisJX19sZTMyIHBoeV9jb250cm9sOworCXU4IGZyYW1lX2RhdGFbMF07Cit9IF9fcGFja2VkOworCisvKiB0aGVzZSBhcmUgZWl0aGVyLW9yICovCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUFJPVF9SVFMJCQkweDAwMDEKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19QUk9UX0NUUwkJCTB4MDAwMgorCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfTk9fQUNLCQkJMHgwMDA0CisvKiBpZiB1bnNldCwgTUFDIHdpbGwgb25seSBkbyBTSUZTIHNwYWNlIGJlZm9yZSBmcmFtZSAqLworI2RlZmluZSBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYJCQkweDAwMDgKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19CVVJTVAkJCTB4MDAxMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1IJCQkweDAwMjAKKworLyogZW5jcnlwdGlvbiBpcyBhIHR3by1iaXQgZmllbGQgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19FTkNSX05PTkUJCQkweDAwMDAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19FTkNSX1JDNAkJCTB4MDA0MAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfQ0VOQwkJCTB4MDA4MAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfQUVTCQkJMHgwMGMwCisKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19NTUlDCQkJMHgwMTAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04JCTB4MDIwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX1FPU19TSElGVAkJCTEwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUU9TX01BU0sJCQkoMyA8PCBBUjkxNzBfVFhfTUFDX1FPU19TSElGVCkKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19BR0dSX1FPU19CSVQxCQkweDA0MDAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19BR0dSX1FPU19CSVQyCQkweDA4MDAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19ESVNBQkxFX1RYT1AJCTB4MTAwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX1RYT1BfUklGUwkJCTB4MjAwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0lNTV9BTVBEVQkJCTB4NDAwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUJCTB4ODAwMAorCisvKiBlaXRoZXItb3IgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfQ0NLCQkJMHgwMDAwMDAwMAorI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNCQkJMHgwMDAwMDAwMQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9IVAkJCTB4MDAwMDAwMDIKKworLyogZGVwZW5kcyBvbiBtb2R1bGF0aW9uICovCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9HUkVFTkZJRUxECQkweDAwMDAwMDA0CisKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV19TSElGVAkJCTMKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV19NQVNLCQkJKDMgPDwgQVI5MTcwX1RYX1BIWV9CV19TSElGVCkKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV18yME1IWgkJCTAKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV180ME1IWgkJCTIKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV180ME1IWl9EVVAJCTMKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfU0hJRlQJNgorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfTUFTSwkoNyA8PCBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfU0hJRlQpCisKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQJCTkKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWF9QV1JfTUFTSwkJKDB4M2YgPDwgQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQpCisKKy8qIG5vdCBwYXJ0IG9mIHRoZSBody1zcGVjICovCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUCQkJMjUKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9RT1NfTUFTSwkJCSgzIDw8IEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUKQorCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVAkJMTUKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOX01BU0sJCSg3IDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCkKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOXzEJCQkxCisvKiB1c2UgZm9yIGNjaywgb2ZkbSA2LzkvMTIvMTgvMjQgYW5kIEhUIGlmIGNhcGFibGUgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOXzIJCQk1CisKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQJCQkxOAorI2RlZmluZSBBUjkxNzBfVFhfUEhZX01DU19NQVNLCQkJKDB4N2YgPDwgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQpCisKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9TSE9SVF9HSQkJCTB4ODAwMDAwMDAKKworc3RydWN0IGFyOTE3MF9yeF9oZWFkIHsKKwl1OCBwbGNwWzEyXTsKK307CisKK3N0cnVjdCBhcjkxNzBfcnhfdGFpbCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggcnNzaV9hbnQwLCByc3NpX2FudDEsIHJzc2lfYW50MiwKKwkJCSAgIHJzc2lfYW50MHgsIHJzc2lfYW50MXgsIHJzc2lfYW50MngsCisJCQkgICByc3NpX2NvbWJpbmVkOworCQl9OworCQl1OCByc3NpWzddOworCX07CisKKwl1OCBldm1fc3RyZWFtMFs2XSwgZXZtX3N0cmVhbTFbNl07CisJdTggcGh5X2VycjsKKwl1OCBTQWlkeCwgREFpZHg7CisJdTggZXJyb3I7CisJdTggc3RhdHVzOworfTsKKworI2RlZmluZSBBUjkxNzBfRU5DX0FMR19OT05FCQkJMHgwCisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX1dFUDY0CQkJMHgxCisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX1RLSVAJCQkweDIKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfQUVTQ0NNUAkJCTB4NAorI2RlZmluZSBBUjkxNzBfRU5DX0FMR19XRVAxMjgJCQkweDUKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfV0VQMjU2CQkJMHg2CisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX0NFTkMJCQkweDcKKworI2RlZmluZSBBUjkxNzBfUlhfRU5DX1NPRlRXQVJFCQkJMHg4CisKK3N0YXRpYyBpbmxpbmUgdTggYXI5MTcwX2dldF9kZWNyeXB0X3R5cGUoc3RydWN0IGFyOTE3MF9yeF90YWlsICp0KQoreworCXJldHVybiAodC0+U0FpZHggJiAweGMwKSA+PiA0IHwKKwkgICAgICAgKHQtPkRBaWR4ICYgMHhjMCkgPj4gNjsKK30KKworI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fTUFTSwkweDAzCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9DQ0sJCTB4MDAKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX09GRE0JMHgwMQorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fSFQJCTB4MDIKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0RVUE9GRE0JMHgwMworCisvKiBkZXBlbmRzIG9uIG1vZHVsYXRpb24gKi8KKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19TSE9SVF9QUkVBTUJMRQkJMHgwOAorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX0dSRUVORklFTEQJCTB4MDgKKworI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfTUFTSwkJMHgzMAorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfU0lOR0xFCQkweDAwCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9GSVJTVAkJMHgxMAorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfTUlERExFCQkweDIwCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9MQVNUCQkweDMwCisKKworI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfUlhUTwkJCTB4MDEKKyNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX09WRVJSVU4JCQkweDAyCisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9ERUNSWVBUCQkJMHgwNAorI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfRkNTCQkJMHgwOAorI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfV1JPTkdfUkEJCTB4MTAKKyNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX1BMQ1AJCQkweDIwCisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9NTUlDCQkJMHg0MAorCitzdHJ1Y3QgYXI5MTcwX2NtZF90eF9zdGF0dXMgeworCV9fbGUxNiB1bmtuOworCXU4IGRzdFtFVEhfQUxFTl07CisJX19sZTMyIHJhdGU7CisJX19sZTE2IHN0YXR1czsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI5MTcwX1RYX1NUQVRVU19DT01QTEVURQkJMHgwMAorI2RlZmluZSBBUjkxNzBfVFhfU1RBVFVTX1JFVFJZCQkJMHgwMQorI2RlZmluZSBBUjkxNzBfVFhfU1RBVFVTX0ZBSUxFRAkJCTB4MDIKKworc3RydWN0IGFyOTE3MF9jbWRfYmFfZmFpbGVkX2NvdW50IHsKKwlfX2xlMTYgZmFpbGVkOworCV9fbGUxNiByYXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFyOTE3MF9jbWRfcmVzcG9uc2UgeworCXU4IGZsYWc7CisJdTggdHlwZTsKKworCXVuaW9uIHsKKwkJc3RydWN0IGFyOTE3MF9jbWRfdHhfc3RhdHVzCQl0eF9zdGF0dXM7CisJCXN0cnVjdCBhcjkxNzBfY21kX2JhX2ZhaWxlZF9jb3VudAliYV9mYWlsX2NudDsKKwkJdTggZGF0YVswXTsKKwl9OworfSBfX3BhY2tlZDsKKworLyogUW9TICovCisKKy8qIG1hYzgwMjExIHF1ZXVlIHRvIEhXL0ZXIG1hcCAqLworc3RhdGljIGNvbnN0IHU4IGFyOTE3MF9xb3NfaHdtYXBbNF0gPSB7IDMsIDIsIDAsIDEgfTsKKworLyogSFcvRlcgcXVldWUgdG8gbWFjODAyMTEgbWFwICovCitzdGF0aWMgY29uc3QgdTggYXI5MTcwX3Fvc19tYWM4MDIxMW1hcFs0XSA9IHsgMiwgMywgMSwgMCB9OworCitlbnVtIGFyOTE3MF90eHEgeworCUFSOTE3MF9UWFFfQkUsCisJQVI5MTcwX1RYUV9CSywKKwlBUjkxNzBfVFhRX1ZJLAorCUFSOTE3MF9UWFFfVk8sCisKKwlfX0FSOTE3MF9OVU1fVFhRLAorfTsKKworI2VuZGlmIC8qIF9fQVI5MTcwX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFjZWFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2xlZC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogTEVEIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKworaW50IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlZF9zdGF0ZSkKK3sKKwlyZXR1cm4gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX0dQSU9fUkVHX0RBVEEsIGxlZF9zdGF0ZSk7Cit9CisKK2ludCBhcjkxNzBfaW5pdF9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBlcnI7CisKKwkvKiBkaXNhYmxlIExFRHMgKi8KKwkvKiBHUElPIFswLzEgbW9kZTogb3V0cHV0LCAyLzM6IGlucHV0XSAqLworCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9HUElPX1JFR19QT1JUX1RZUEUsIDMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogR1BJTyAwLzEgdmFsdWU6IG9mZiAqLworCWVyciA9IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgMCk7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCitzdGF0aWMgdm9pZCBhcjkxNzBfdXBkYXRlX2xlZHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsIGxlZF93b3JrLndvcmspOworCWludCBpLCB0bXAsIGJsaW5rX2RlbGF5ID0gMTAwMDsKKwl1MzIgbGVkX3ZhbCA9IDA7CisJYm9vbCByZXJ1biA9IGZhbHNlOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX0xFRFM7IGkrKykKKwkJaWYgKGFyLT5sZWRzW2ldLnRvZ2dsZWQpIHsKKwkJCWxlZF92YWwgfD0gMSA8PCBpOworCisJCQl0bXAgPSA3MCArIDIwMCAvIChhci0+bGVkc1tpXS50b2dnbGVkKTsKKwkJCWlmICh0bXAgPCBibGlua19kZWxheSkKKwkJCQlibGlua19kZWxheSA9IHRtcDsKKworCQkJaWYgKGFyLT5sZWRzW2ldLnRvZ2dsZWQgPiAxKQorCQkJCWFyLT5sZWRzW2ldLnRvZ2dsZWQgPSAwOworCisJCQlyZXJ1biA9IHRydWU7CisJCX0KKworCWFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgbGVkX3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCisJaWYgKHJlcnVuKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+bGVkX3dvcmssCisJCQkJICAgbXNlY3NfdG9famlmZmllcyhibGlua19kZWxheSkpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCwKKwkJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IGFyOTE3MF9sZWQgKmFybCA9IGNvbnRhaW5lcl9vZihsZWQsIHN0cnVjdCBhcjkxNzBfbGVkLCBsKTsKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGFybC0+YXI7CisKKwlhcmwtPnRvZ2dsZWQrKzsKKworCWlmIChsaWtlbHkoSVNfQUNDRVBUSU5HX0NNRChhcikgJiYgYnJpZ2h0bmVzcykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5sZWRfd29yaywgSFovMTApOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9yZWdpc3Rlcl9sZWQoc3RydWN0IGFyOTE3MCAqYXIsIGludCBpLCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCXNucHJpbnRmKGFyLT5sZWRzW2ldLm5hbWUsIHNpemVvZihhci0+bGVkc1tpXS5uYW1lKSwKKwkJICJhcjkxNzAtJXM6OiVzIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgbmFtZSk7CisKKwlhci0+bGVkc1tpXS5hciA9IGFyOworCWFyLT5sZWRzW2ldLmwubmFtZSA9IGFyLT5sZWRzW2ldLm5hbWU7CisJYXItPmxlZHNbaV0ubC5icmlnaHRuZXNzX3NldCA9IGFyOTE3MF9sZWRfYnJpZ2h0bmVzc19zZXQ7CisJYXItPmxlZHNbaV0ubC5icmlnaHRuZXNzID0gMDsKKwlhci0+bGVkc1tpXS5sLmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KGFyLT5ody0+d2lwaHkpLAorCQkJCSAgICAmYXItPmxlZHNbaV0ubCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRCAoJWQpLlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGFyLT5sZWRzW2ldLm5hbWUsIGVycik7CisJZWxzZQorCQlhci0+bGVkc1tpXS5yZWdpc3RlcmVkID0gdHJ1ZTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgYXI5MTcwX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlpbnQgaTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXItPmxlZF93b3JrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX0xFRFM7IGkrKykKKwkJaWYgKGFyLT5sZWRzW2ldLnJlZ2lzdGVyZWQpIHsKKwkJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhci0+bGVkc1tpXS5sKTsKKwkJCWFyLT5sZWRzW2ldLnJlZ2lzdGVyZWQgPSBmYWxzZTsKKwkJfQorfQorCitpbnQgYXI5MTcwX3JlZ2lzdGVyX2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJaW50IGVycjsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZhci0+bGVkX3dvcmssIGFyOTE3MF91cGRhdGVfbGVkcyk7CisKKwllcnIgPSBhcjkxNzBfcmVnaXN0ZXJfbGVkKGFyLCAwLCAidHgiLAorCQkJCSAgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShhci0+aHcpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwllcnIgPSBhcjkxNzBfcmVnaXN0ZXJfbGVkKGFyLCAxLCAiYXNzb2MiLAorCQkJCSBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKGFyLT5odykpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitmYWlsOgorCWFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoYXIpOworCXJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZhMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21hYy5jCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogTUFDIHByb2dyYW1taW5nCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiYXI5MTcwLmgiCisjaW5jbHVkZSAiY21kLmgiCisKK2ludCBhcjkxNzBfc2V0X3FvcyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMF9DVywgYXItPmVkY2ZbMF0uY3dfbWluIHwKKwkJCShhci0+ZWRjZlswXS5jd19tYXggPDwgMTYpKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMxX0NXLCBhci0+ZWRjZlsxXS5jd19taW4gfAorCQkJKGFyLT5lZGNmWzFdLmN3X21heCA8PCAxNikpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzJfQ1csIGFyLT5lZGNmWzJdLmN3X21pbiB8CisJCQkoYXItPmVkY2ZbMl0uY3dfbWF4IDw8IDE2KSk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19DVywgYXItPmVkY2ZbM10uY3dfbWluIHwKKwkJCShhci0+ZWRjZlszXS5jd19tYXggPDwgMTYpKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUM0X0NXLCBhci0+ZWRjZls0XS5jd19taW4gfAorCQkJKGFyLT5lZGNmWzRdLmN3X21heCA8PCAxNikpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUywKKwkJCSgoYXItPmVkY2ZbMF0uYWlmcyAqIDkgKyAxMCkpIHwKKwkJCSgoYXItPmVkY2ZbMV0uYWlmcyAqIDkgKyAxMCkgPDwgMTIpIHwKKwkJCSgoYXItPmVkY2ZbMl0uYWlmcyAqIDkgKyAxMCkgPDwgMjQpKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTLAorCQkJKChhci0+ZWRjZlsyXS5haWZzICogOSArIDEwKSA+PiA4KSB8CisJCQkoKGFyLT5lZGNmWzNdLmFpZnMgKiA5ICsgMTApIDw8IDQpIHwKKwkJCSgoYXItPmVkY2ZbNF0uYWlmcyAqIDkgKyAxMCkgPDwgMTYpKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzFfQUMwX1RYT1AsCisJCQlhci0+ZWRjZlswXS50eG9wIHwgYXItPmVkY2ZbMV0udHhvcCA8PCAxNik7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19BQzJfVFhPUCwKKwkJCWFyLT5lZGNmWzFdLnR4b3AgfCBhci0+ZWRjZlszXS50eG9wIDw8IDE2KTsKKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK2ludCBhcjkxNzBfaW5pdF9tYWMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQ0tfRVhURU5TSU9OLCAweDQwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SRVRSWV9NQVgsIDApOworCisJLyogZW5hYmxlIE1NSUMgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfU05JRkZFUiwKKwkJCUFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfREVGQVVMVFMpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JYX1RIUkVTSE9MRCwgMHhjMWY4MCk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUlhfUEVfREVMQVksIDB4NzApOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19FSUZTX0FORF9TSUZTLCAweGExNDQwMDApOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTE9UX1RJTUUsIDkgPDwgMTApOworCisJLyogQ0YtRU5EIG1vZGUgKi8KKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzNiMmMsIDB4MTkwMDAwMDApOworCisJLyogTkFWIHByb3RlY3RzIEFDSyBvbmx5IChpbiBUWE9QKSAqLworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2IzOCwgMHgyMDEpOworCisJLyogU2V0IEJlYWNvbiBQSFkgQ1RSTCdzIFRQQyB0byAweDcsIFRBMT0xICovCisJLyogT1RVUyBzZXQgQU0gdG8gMHgxICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9IVDEsIDB4ODAwMDE3MCk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkFDS09GRl9QUk9URUNULCAweDEwNSk7CisKKwkvKiBBR0cgdGVzdCBjb2RlKi8KKwkvKiBBZ2dyZWdhdGlvbiBNQVggbnVtYmVyIGFuZCB0aW1lb3V0ICovCisJYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYjljLCAweDEwMDAwYSk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUiwKKwkJCUFSOTE3MF9NQUNfUkVHX0ZURl9ERUZBVUxUUyk7CisKKwkvKiBFbmFibGUgZGVhZ2dyZWdhdG9yLCByZXNwb25zZSBpbiBzbmlmZmVyIG1vZGUgKi8KKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzNjNDAsIDB4MSB8IDE8PDMwKTsKKworCS8qIHJhdGUgc2V0cyAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQVNJQ19SQVRFLCAweDE1MGYpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19NQU5EQVRPUllfUkFURSwgMHgxNTBmKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUlRTX0NUU19SQVRFLCAweDEwYjAxYmIpOworCisJLyogTUlNTyByZXNwb25zZSBjb250cm9sICovCisJYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjk0LCAweDQwMDNDMUUpOy8qIGJpdCAyNn4yOCAgb3R1cy1BTSAqLworCisJLyogc3dpdGNoIE1BQyB0byBPVFVTIGludGVyZmFjZSAqLworCWFyOTE3MF9yZWd3cml0ZSgweDFjMzYwMCwgMHgzKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BTVBEVV9SWF9USFJFU0gsIDB4ZmZmZik7CisKKwkvKiBzZXQgUEhZIHJlZ2lzdGVyIHJlYWQgdGltZW91dCAoPz8pICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX01JU0NfNjgwLCAweGYwMDAwOCk7CisKKwkvKiBEaXNhYmxlIFJ4IFRpbWVPdXQsIHdvcmthcm91bmQgZm9yIEJCLiAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SWF9USU1FT1VULCAweDApOworCisJLyogU2V0IENQVSBjbG9jayBmcmVxdWVuY3kgdG8gODgvODBNSHogKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX1BXUl9SRUdfQ0xPQ0tfU0VMLAorCQkJQVI5MTcwX1BXUl9DTEtfQUhCXzgwXzg4TUhaIHwKKwkJCUFSOTE3MF9QV1JfQ0xLX0RBQ18xNjBfSU5WX0RMWSk7CisKKwkvKiBTZXQgV0xBTiBETUEgaW50ZXJydXB0IG1vZGU6IGdlbmVyYXRlIGludCBwZXIgcGFja2V0ICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1RYUlhfTVBJLCAweDExMDAxMSk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfRkNTX1NFTEVDVCwKKwkJCUFSOTE3MF9NQUNfRkNTX0ZJRk9fUFJPVCk7CisKKwkvKiBEaXNhYmxlcyB0aGUgQ0ZfRU5EIGZyYW1lLCB1bmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORCwKKwkJCTB4MTQxRTBGNDgpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfc2V0X21hY19yZWcoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiByZWcsIGNvbnN0IHU4ICptYWMpCit7CisJc3RhdGljIGNvbnN0IHU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CisKKwlpZiAoIW1hYykKKwkJbWFjID0gemVybzsKKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlhcjkxNzBfcmVnd3JpdGUocmVnLAorCQkJKG1hY1szXSA8PCAyNCkgfCAobWFjWzJdIDw8IDE2KSB8CisJCQkobWFjWzFdIDw8IDgpIHwgbWFjWzBdKTsKKworCWFyOTE3MF9yZWd3cml0ZShyZWcgKyA0LCAobWFjWzVdIDw8IDgpIHwgbWFjWzRdKTsKKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK2ludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlpbnQgZXJyOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfSCwKKwkJYXItPndhbnRfbWNfaGFzaCA+PiAzMik7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0wsCisJCWFyLT53YW50X21jX2hhc2gpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhci0+Y3VyX21jX2hhc2ggPSBhci0+d2FudF9tY19oYXNoOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUiwKKwkJCSAgICAgICBhci0+d2FudF9maWx0ZXIpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFyLT5jdXJfZmlsdGVyID0gYXItPndhbnRfZmlsdGVyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3NldF9wcm9taXNjb3VvdXMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJdTMyIGVuY3JfbW9kZSwgc25pZmZlcjsKKwlpbnQgZXJyOworCisJZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19TTklGRkVSLCAmc25pZmZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGFyOTE3MF9yZWFkX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTiwgJmVuY3JfbW9kZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChhci0+c25pZmZlcl9lbmFibGVkKSB7CisJCXNuaWZmZXIgfD0gQVI5MTcwX01BQ19SRUdfU05JRkZFUl9FTkFCTEVfUFJPTUlTQzsKKworCQkvKgorCQkgKiBSeCBkZWNyeXB0aW9uIHdvcmtzIGluIHBsYWNlLgorCQkgKgorCQkgKiBJZiB3ZSBkb24ndCBkaXNhYmxlIGl0LCB0aGUgaGFyZHdhcmUgd2lsbCByZW5kZXIgYWxsCisJCSAqIGVuY3J5cHRlZCBmcmFtZXMgd2hpY2ggYXJlIGVuY3J5cHRlZCB3aXRoIGFuIHVua25vd24KKwkJICoga2V5IHVzZWxlc3MuCisJCSAqLworCisJCWVuY3JfbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX1JYX1NPRlRXQVJFOworCQlhci0+c25pZmZlcl9lbmFibGVkID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlzbmlmZmVyICY9IH5BUjkxNzBfTUFDX1JFR19TTklGRkVSX0VOQUJMRV9QUk9NSVNDOworCisJCWlmIChhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbikKKwkJCWVuY3JfbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX1JYX1NPRlRXQVJFOworCQllbHNlCisJCQllbmNyX21vZGUgJj0gfkFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkU7CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTiwgZW5jcl9tb2RlKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfU05JRkZFUiwgc25pZmZlcik7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJdTMyIHBtX21vZGUgPSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9ERUZBVUxUUzsKKwl1OCAqbWFjX2FkZHIsICpic3NpZDsKKwlpbnQgZXJyOworCisJaWYgKGFyLT52aWYpIHsKKwkJbWFjX2FkZHIgPSBhci0+bWFjX2FkZHI7CisJCWJzc2lkID0gYXItPmJzc2lkOworCisJCXN3aXRjaCAoYXItPnZpZi0+dHlwZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0lCU1M7CisJCQlicmVhazsKKy8qCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJcG1fbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUDsKKwkJCWJyZWFrOyovCisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgorCQkJcG1fbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUF9XRFM7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJYXItPnNuaWZmZXJfZW5hYmxlZCA9IHRydWU7CisJCQlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBtX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfU1RBOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQltYWNfYWRkciA9IE5VTEw7CisJCWJzc2lkID0gTlVMTDsKKwl9CisKKwllcnIgPSBhcjkxNzBfc2V0X21hY19yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX01BQ19BRERSX0wsIG1hY19hZGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gYXI5MTcwX3NldF9tYWNfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19CU1NJRF9MLCBic3NpZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGFyOTE3MF9zZXRfcHJvbWlzY291b3VzKGFyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQsIHBtX21vZGUpOworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK2ludCBhcjkxNzBfc2V0X2h3cmV0cnlfbGltaXQoc3RydWN0IGFyOTE3MCAqYXIsIHVuc2lnbmVkIGludCBtYXhfcmV0cnkpCit7CisJdTMyIHRtcCA9IG1pbl90KHUzMiwgMHgzMzMzMywgbWF4X3JldHJ5ICogMHgxMTExMSk7CisKKwlyZXR1cm4gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfUkVUUllfTUFYLCB0bXApOworfQorCitpbnQgYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXUzMiB2ID0gMDsKKwl1MzIgcHJldGJ0dCA9IDA7CisKKwl2IHw9IGFyLT5ody0+Y29uZi5iZWFjb25faW50OworCisJaWYgKGFyLT52aWYpIHsKKwkJc3dpdGNoIChhci0+dmlmLT50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCXYgfD0gQklUKDI1KTsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJdiB8PSBCSVQoMjQpOworCQkJcHJldGJ0dCA9IChhci0+aHctPmNvbmYuYmVhY29uX2ludCAtIDYpIDw8IDE2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCXYgfD0gYXItPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QgPDwgMTY7CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19QUkVUQlRULCBwcmV0YnR0KTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX1BFUklPRCwgdik7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK2ludCBhcjkxNzBfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCV9fbGUzMiAqZGF0YSwgKm9sZCA9IE5VTEw7CisJdTMyIHdvcmQ7CisJaW50IGk7CisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChhci0+aHcsIGFyLT52aWYpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEgPSAoX19sZTMyICopc2tiLT5kYXRhOworCWlmIChhci0+YmVhY29uKQorCQlvbGQgPSAoX19sZTMyICopYXItPmJlYWNvbi0+ZGF0YTsKKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisJZm9yIChpID0gMDsgaSA8IERJVl9ST1VORF9VUChza2ItPmxlbiwgNCk7IGkrKykgeworCQkvKgorCQkgKiBYWFg6IFRoaXMgYWNjZXNzZXMgYmV5b25kIHNrYiBkYXRhIGZvciB1cAorCQkgKgl0byB0aGUgbGFzdCAzIGJ5dGVzISEKKwkJICovCisKKwkJaWYgKG9sZCAmJiAoZGF0YVtpXSA9PSBvbGRbaV0pKQorCQkJY29udGludWU7CisKKwkJd29yZCA9IGxlMzJfdG9fY3B1KGRhdGFbaV0pOworCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX0JFQUNPTl9CVUZGRVJfQUREUkVTUyArIDQgKiBpLCB3b3JkKTsKKwl9CisKKwkvKiBYWFg6IHVzZSBza2ItPmNiIGluZm8gKi8KKwlpZiAoYXItPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9QTENQLAorCQkJCSgoc2tiLT5sZW4gKyA0KSA8PCAoMysxNikpICsgMHgwNDAwKTsKKwllbHNlCisJCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUExDUCwKKwkJCQkoKHNrYi0+bGVuICsgNCkgPDwgKDMrMTYpKSArIDB4MDQwMCk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX0xFTkdUSCwgc2tiLT5sZW4gKyA0KTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX0FERFIsIEFSOTE3MF9CRUFDT05fQlVGRkVSX0FERFJFU1MpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fQ1RSTCwgMSk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisKKwlkZXZfa2ZyZWVfc2tiKGFyLT5iZWFjb24pOworCWFyLT5iZWFjb24gPSBza2I7CisKKwlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworfQorCit2b2lkIGFyOTE3MF9uZXdfYmVhY29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLAorCQkJCQkgYmVhY29uX3dvcmspOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKKwkJcmV0dXJuIDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisKKwlpZiAoIWFyLT52aWYpCisJCWdvdG8gb3V0OworCisJYXI5MTcwX3VwZGF0ZV9iZWFjb24oYXIpOworCisJcmN1X3JlYWRfbG9jaygpOworCXdoaWxlICgoc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhhci0+aHcsIGFyLT52aWYpKSkKKwkJYXI5MTcwX29wX3R4KGFyLT5odywgc2tiKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisgb3V0OgorCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKK30KKworaW50IGFyOTE3MF91cGxvYWRfa2V5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBpZCwgY29uc3QgdTggKm1hYywgdTgga3R5cGUsCisJCSAgICAgIHU4IGtleWlkeCwgdTggKmtleWRhdGEsIGludCBrZXlsZW4pCit7CisJX19sZTMyIHZhbHNbN107CisJc3RhdGljIGNvbnN0IHU4IGJjYXN0W0VUSF9BTEVOXSA9CisJCXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCXU4IGR1bW15OworCisJbWFjID0gbWFjID8gOiBiY2FzdDsKKworCXZhbHNbMF0gPSBjcHVfdG9fbGUzMigoa2V5aWR4IDw8IDE2KSArIGlkKTsKKwl2YWxzWzFdID0gY3B1X3RvX2xlMzIobWFjWzFdIDw8IDI0IHwgbWFjWzBdIDw8IDE2IHwga3R5cGUpOworCXZhbHNbMl0gPSBjcHVfdG9fbGUzMihtYWNbNV0gPDwgMjQgfCBtYWNbNF0gPDwgMTYgfAorCQkJICAgICAgbWFjWzNdIDw8IDggfCBtYWNbMl0pOworCW1lbXNldCgmdmFsc1szXSwgMCwgMTYpOworCWlmIChrZXlkYXRhKQorCQltZW1jcHkoJnZhbHNbM10sIGtleWRhdGEsIGtleWxlbik7CisKKwlyZXR1cm4gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX0VLRVksCisJCQkgICAgc2l6ZW9mKHZhbHMpLCAodTggKil2YWxzLAorCQkJICAgIDEsICZkdW1teSk7Cit9CisKK2ludCBhcjkxNzBfZGlzYWJsZV9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkKQoreworCV9fbGUzMiB2YWwgPSBjcHVfdG9fbGUzMihpZCk7CisJdTggZHVtbXk7CisKKwlyZXR1cm4gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX0VLRVksCisJCQkgICAgc2l6ZW9mKHZhbCksICh1OCAqKSZ2YWwsCisJCQkgICAgMSwgJmR1bW15KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OTZmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvbWFpbi5jCkBAIC0wLDAgKzEsMTY3MSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIG1hYzgwMjExIGludGVyYWN0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgImNtZC5oIgorCitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKKworI2RlZmluZSBSQVRFKF9iaXRyYXRlLCBfaHdfcmF0ZSwgX3R4cGlkeCwgX2ZsYWdzKSB7CVwKKwkuYml0cmF0ZQk9IChfYml0cmF0ZSksCQkJXAorCS5mbGFncwkJPSAoX2ZsYWdzKSwJCQlcCisJLmh3X3ZhbHVlCT0gKF9od19yYXRlKSB8IChfdHhwaWR4KSA8PCA0LAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgX19hcjkxNzBfcmF0ZXRhYmxlW10gPSB7CisJUkFURSgxMCwgMCwgMCwgMCksCisJUkFURSgyMCwgMSwgMSwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAorCVJBVEUoNTUsIDIsIDIsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFKDExMCwgMywgMywgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAorCVJBVEUoNjAsIDB4YiwgMCwgMCksCisJUkFURSg5MCwgMHhmLCAwLCAwKSwKKwlSQVRFKDEyMCwgMHhhLCAwLCAwKSwKKwlSQVRFKDE4MCwgMHhlLCAwLCAwKSwKKwlSQVRFKDI0MCwgMHg5LCAwLCAwKSwKKwlSQVRFKDM2MCwgMHhkLCAxLCAwKSwKKwlSQVRFKDQ4MCwgMHg4LCAyLCAwKSwKKwlSQVRFKDU0MCwgMHhjLCAzLCAwKSwKK307CisjdW5kZWYgUkFURQorCisjZGVmaW5lIGFyOTE3MF9nX3JhdGV0YWJsZQkoX19hcjkxNzBfcmF0ZXRhYmxlICsgMCkKKyNkZWZpbmUgYXI5MTcwX2dfcmF0ZXRhYmxlX3NpemUJMTIKKyNkZWZpbmUgYXI5MTcwX2FfcmF0ZXRhYmxlCShfX2FyOTE3MF9yYXRldGFibGUgKyA0KQorI2RlZmluZSBhcjkxNzBfYV9yYXRldGFibGVfc2l6ZQk4CisKKy8qCisgKiBOQjogVGhlIGh3X3ZhbHVlIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byB0aGUgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcworICogICAgIGFycmF5IGluIHBoeS5jIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBmcmVxdWVuY3kgbG9va3VwcyEKKyAqLworI2RlZmluZSBDSEFOKF9mcmVxLCBfaWR4KSB7CQlcCisJLmNlbnRlcl9mcmVxCT0gKF9mcmVxKSwJXAorCS5od192YWx1ZQk9IChfaWR4KSwJXAorCS5tYXhfcG93ZXIJPSAxOCwgLyogWFhYICovCVwKK30KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhcjkxNzBfMmdoel9jaGFudGFibGVbXSA9IHsKKwlDSEFOKDI0MTIsICAwKSwKKwlDSEFOKDI0MTcsICAxKSwKKwlDSEFOKDI0MjIsICAyKSwKKwlDSEFOKDI0MjcsICAzKSwKKwlDSEFOKDI0MzIsICA0KSwKKwlDSEFOKDI0MzcsICA1KSwKKwlDSEFOKDI0NDIsICA2KSwKKwlDSEFOKDI0NDcsICA3KSwKKwlDSEFOKDI0NTIsICA4KSwKKwlDSEFOKDI0NTcsICA5KSwKKwlDSEFOKDI0NjIsIDEwKSwKKwlDSEFOKDI0NjcsIDExKSwKKwlDSEFOKDI0NzIsIDEyKSwKKwlDSEFOKDI0ODQsIDEzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXI5MTcwXzVnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTig0OTIwLCAxNCksCisJQ0hBTig0OTQwLCAxNSksCisJQ0hBTig0OTYwLCAxNiksCisJQ0hBTig0OTgwLCAxNyksCisJQ0hBTig1MDQwLCAxOCksCisJQ0hBTig1MDYwLCAxOSksCisJQ0hBTig1MDgwLCAyMCksCisJQ0hBTig1MTgwLCAyMSksCisJQ0hBTig1MjAwLCAyMiksCisJQ0hBTig1MjIwLCAyMyksCisJQ0hBTig1MjQwLCAyNCksCisJQ0hBTig1MjYwLCAyNSksCisJQ0hBTig1MjgwLCAyNiksCisJQ0hBTig1MzAwLCAyNyksCisJQ0hBTig1MzIwLCAyOCksCisJQ0hBTig1NTAwLCAyOSksCisJQ0hBTig1NTIwLCAzMCksCisJQ0hBTig1NTQwLCAzMSksCisJQ0hBTig1NTYwLCAzMiksCisJQ0hBTig1NTgwLCAzMyksCisJQ0hBTig1NjAwLCAzNCksCisJQ0hBTig1NjIwLCAzNSksCisJQ0hBTig1NjQwLCAzNiksCisJQ0hBTig1NjYwLCAzNyksCisJQ0hBTig1NjgwLCAzOCksCisJQ0hBTig1NzAwLCAzOSksCisJQ0hBTig1NzQ1LCA0MCksCisJQ0hBTig1NzY1LCA0MSksCisJQ0hBTig1Nzg1LCA0MiksCisJQ0hBTig1ODA1LCA0MyksCisJQ0hBTig1ODI1LCA0NCksCisJQ0hBTig1MTcwLCA0NSksCisJQ0hBTig1MTkwLCA0NiksCisJQ0hBTig1MjEwLCA0NyksCisJQ0hBTig1MjMwLCA0OCksCit9OworI3VuZGVmIENIQU4KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYXI5MTcwX2JhbmRfMkdIeiA9IHsKKwkuY2hhbm5lbHMJPSBhcjkxNzBfMmdoel9jaGFudGFibGUsCisJLm5fY2hhbm5lbHMJPSBBUlJBWV9TSVpFKGFyOTE3MF8yZ2h6X2NoYW50YWJsZSksCisJLmJpdHJhdGVzCT0gYXI5MTcwX2dfcmF0ZXRhYmxlLAorCS5uX2JpdHJhdGVzCT0gYXI5MTcwX2dfcmF0ZXRhYmxlX3NpemUsCit9OworCisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisvKgorICogSW4gY2FzZSBzb21lIHdhbnRzIHdvcmtzIHdpdGggQVI5MTcwJ3MgY3JhenkgdHhfc3RhdHVzIHF1ZXVlaW5nIHRlY2huaXF1ZXMuCisgKiBIZSBtaWdodCBuZWVkIHRoaXMgcmF0aGVyIHVzZWZ1bCBwcm9iaW5nIGZ1bmN0aW9uLgorICoKKyAqIE5PVEU6IGNhbGxlciBtdXN0IGhvbGQgdGhlIHF1ZXVlJ3Mgc3BpbmxvY2shCisgKi8KKworc3RhdGljIHZvaWQgYXI5MTcwX3ByaW50X3R4aGVhZGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXR4Yy0+ZnJhbWVfZGF0YTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogPT4gRlJBTUUgW3NrYjolcCwgcXVldWU6JWQsIERBOlslcE1dICIKKwkJCSAgIm1hY19jb250cm9sOiUwNHgsIHBoeV9jb250cm9sOiUwOHhdXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAorCSAgICAgICBpZWVlODAyMTFfZ2V0X0RBKGhkciksIGxlMTZfdG9fY3B1KHR4Yy0+bWFjX2NvbnRyb2wpLAorCSAgICAgICBsZTMyX3RvX2NwdSh0eGMtPnBoeV9jb250cm9sKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9kdW1wX3N0YXRpb25fdHhfc3RhdHVzX3F1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaSA9IDA7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLS0tWyBjdXQgaGVyZSBdLS0tXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVkIGVudHJpZXMgaW4gdHhfc3RhdHVzIHF1ZXVlLlxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgc2tiX3F1ZXVlX2xlbihxdWV1ZSkpOworCisJc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgeworCQlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopdHhjLT5mcmFtZV9kYXRhOworCisJCXByaW50ayhLRVJOX0RFQlVHICJpbmRleDolZCA9PiBcbiIsIGkpOworCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICItLS1bIGVuZCBdLS0tXG4iKTsKK30KKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYXI5MTcwX2JhbmRfNUdIeiA9IHsKKwkuY2hhbm5lbHMJPSBhcjkxNzBfNWdoel9jaGFudGFibGUsCisJLm5fY2hhbm5lbHMJPSBBUlJBWV9TSVpFKGFyOTE3MF81Z2h6X2NoYW50YWJsZSksCisJLmJpdHJhdGVzCT0gYXI5MTcwX2FfcmF0ZXRhYmxlLAorCS5uX2JpdHJhdGVzCT0gYXI5MTcwX2FfcmF0ZXRhYmxlX3NpemUsCit9OworCit2b2lkIGFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBib29sIHZhbGlkX3N0YXR1cywgdTE2IHR4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbzsKKwl1bnNpZ25lZCBpbnQgcmV0cmllcyA9IDAsIHF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCWFyLT50eF9zdGF0c1txdWV1ZV0ubGVuLS07CisJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGFyLT5odywgcXVldWUpKQorCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShhci0+aHcsIHF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCisJdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGluZm8pOworCisJc3dpdGNoICh0eF9zdGF0dXMpIHsKKwljYXNlIEFSOTE3MF9UWF9TVEFUVVNfUkVUUlk6CisJCXJldHJpZXMgPSAyOworCWNhc2UgQVI5MTcwX1RYX1NUQVRVU19DT01QTEVURToKKwkJdHhpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCWJyZWFrOworCisJY2FzZSBBUjkxNzBfVFhfU1RBVFVTX0ZBSUxFRDoKKwkJcmV0cmllcyA9IGFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHR4X3N0YXR1cyByZXNwb25zZSAoJXgpLlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHR4X3N0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWlmICh2YWxpZF9zdGF0dXMpCisJCXR4aW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gcmV0cmllcyArIDE7CisKKwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wpKTsKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoYXItPmh3LCBza2IpOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFyOTE3MF9maW5kX3NrYl9pbl9xdWV1ZShzdHJ1Y3QgYXI5MTcwICphciwKKwkJCQkJCWNvbnN0IHU4ICptYWMsCisJCQkJCQljb25zdCB1MzIgcXVldWUsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJc2tiX3F1ZXVlX3dhbGsocSwgc2tiKSB7CisJCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhOworCQl1MzIgdHhjX3F1ZXVlID0gKGxlMzJfdG9fY3B1KHR4Yy0+cGh5X2NvbnRyb2wpICYKKwkJCQlBUjkxNzBfVFhfUEhZX1FPU19NQVNLKSA+PgorCQkJCUFSOTE3MF9UWF9QSFlfUU9TX1NISUZUOworCisJCWlmICAoKHF1ZXVlICE9IHR4Y19xdWV1ZSkgfHwKKwkJICAgICAoY29tcGFyZV9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSwgbWFjKSkpCisJCQljb250aW51ZTsKKworCQlfX3NrYl91bmxpbmsoc2tiLCBxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gc2tiOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXI5MTcwX2ZpbmRfcXVldWVkX3NrYihzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTggKm1hYywKKwkJCQkJICAgICAgY29uc3QgdTMyIHF1ZXVlKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qCisJICogVW5mb3J0dW5hdGVseSwgdGhlIGZpcm13YXJlIGRvZXMgbm90IHRlbGwgdG8gd2hpY2ggKHF1ZXVlZCkgZnJhbWUKKwkgKiB0aGlzIHRyYW5zbWlzc2lvbiBzdGF0dXMgcmVwb3J0IGJlbG9uZ3MgdG8uCisJICoKKwkgKiBTbyB3ZSBoYXZlIHRvIG1ha2Ugcmlza3kgZ3Vlc3NlcyAtIHdpdGggdGhlIHNjYXJjZSBpbmZvcm1hdGlvbgorCSAqIHRoZSBmaXJtd2FyZSBwcm92aWRlZCAoLT4gZGVzdGluYXRpb24gTUFDLCBhbmQgcGh5X2NvbnRyb2wpIC0KKwkgKiBhbmQgaG9wZSB0aGF0IHdlIHBpY2tlZCB0aGUgcmlnaHQgb25lLi4uCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShhci0+aHcsIG1hYyk7CisKKwlpZiAobGlrZWx5KHN0YSkpIHsKKwkJc3RydWN0IGFyOTE3MF9zdGFfaW5mbyAqc3RhX3ByaXYgPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OworCQlza2IgPSBza2JfZGVxdWV1ZSgmc3RhX3ByaXYtPnR4X3N0YXR1c1txdWV1ZV0pOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKGxpa2VseShza2IpKQorCQkJcmV0dXJuIHNrYjsKKwl9IGVsc2UKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkvKiBzY2FuIHRoZSB3YXN0ZSBxdWV1ZSBmb3IgY2FuZGlkYXRlcyAqLworCXNrYiA9IGFyOTE3MF9maW5kX3NrYl9pbl9xdWV1ZShhciwgbWFjLCBxdWV1ZSwKKwkJCQkgICAgICAgJmFyLT5nbG9iYWxfdHhfc3RhdHVzX3dhc3RlKTsKKwlpZiAoIXNrYikgeworCQkvKiBzbyBpdCBzdGlsbCBfbXVzdF8gYmUgaW4gdGhlIGdsb2JhbCBsaXN0LiAqLworCQlza2IgPSBhcjkxNzBfZmluZF9za2JfaW5fcXVldWUoYXIsIG1hYywgcXVldWUsCisJCQkJCSAgICAgICAmYXItPmdsb2JhbF90eF9zdGF0dXMpOworCX0KKworI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRworCWlmICh1bmxpa2VseSgoIXNrYikgJiYgbmV0X3JhdGVsaW1pdCgpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFU1M6WyVwTV0gZG9lcyBub3QgaGF2ZSBhbnkgIgorCQkJCSJvdXRzdGFuZGluZyBmcmFtZXMgaW4gdGhpcyBxdWV1ZSAoJWQpLlxuIiwKKwkJCQl3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBtYWMsIHF1ZXVlKTsKKwl9CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqIFRoaXMgd29ya2VyIHRyaWVzIHRvIGtlZXAgdGhlIGdsb2JhbCB0eF9zdGF0dXMgcXVldWUgZW1wdHkuCisgKiBTbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgaW5jb21pbmcgdHhfc3RhdHVzIHJlcG9ydHMgZm9yCisgKiB1bnJlZ2lzdGVyZWQgc3RhdGlvbnMgYXJlIGFsd2F5cyBzeW5jZWQgd2l0aCB0aGUgYWN0dWFsCisgKiBmcmFtZSAtIHdoaWNoIHdlIHRoaW5rIC0gYmVsb25ncyB0by4KKyAqLworCitzdGF0aWMgdm9pZCBhcjkxNzBfdHhfc3RhdHVzX2phbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsCisJCQkJCSB0eF9zdGF0dXNfamFuaXRvci53b3JrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCisJCXJldHVybiA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCS8qIHJlY3ljbGUgdGhlIGdhcmJhZ2UgYmFjayB0byBtYWM4MDIxMS4uLiBvbmUgYnkgb25lLiAqLworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmFyLT5nbG9iYWxfdHhfc3RhdHVzX3dhc3RlKSkpIHsKKyNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNwb3NlIHF1ZXVlZCBmcmFtZSA9PlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisJCWFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKGFyLCBza2IsIGZhbHNlLAorCQkJCQlBUjkxNzBfVFhfU1RBVFVTX0ZBSUxFRCk7CisJfQorCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYXItPmdsb2JhbF90eF9zdGF0dXMpKSkgeworI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1vdmluZyBmcmFtZSBpbnRvIHdhc3RlIHF1ZXVlID0+XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisKKwkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOworI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLworCQlza2JfcXVldWVfdGFpbCgmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUsIHNrYik7CisJfQorCisJLyogcmVjYWxsIHRoZSBqYW5pdG9yIGluIDEwMG1zIC0gaWYgdGhlcmUncyBnYXJiYWdlIGluIHRoZSBjYW4uICovCisJaWYgKHNrYl9xdWV1ZV9sZW4oJmFyLT5nbG9iYWxfdHhfc3RhdHVzX3dhc3RlKSA+IDApCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT50eF9zdGF0dXNfamFuaXRvciwKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGFyOTE3MCAqYXIsCisJCQkJCSAgIHZvaWQgKmJ1ZiwgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgYXI5MTcwX2NtZF9yZXNwb25zZSAqY21kID0gKHZvaWQgKikgYnVmOworCisJaWYgKChjbWQtPnR5cGUgJiAweGMwKSAhPSAweGMwKSB7CisJCWFyLT5jYWxsYmFja19jbWQoYXIsIGxlbiwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGhhcmR3YXJlIGV2ZW50IGhhbmRsZXJzICovCisJc3dpdGNoIChjbWQtPnR5cGUpIHsKKwljYXNlIDB4YzE6IHsKKwkJLyoKKwkJICogVFggc3RhdHVzIG5vdGlmaWNhdGlvbjoKKwkJICogYnl0ZXM6IDBjIGMxIFhYIFlZIE0xIE0yIE0zIE00IE01IE02IFI0IFIzIFIyIFIxIFMyIFMxCisJCSAqCisJCSAqIFhYIGFsd2F5cyA4MQorCQkgKiBZWSBhbHdheXMgMDAKKwkJICogTTEtTTYgaXMgdGhlIE1BQyBhZGRyZXNzCisJCSAqIFIxLVI0IGlzIHRoZSB0cmFuc21pdCByYXRlCisJCSAqIFMxLVMyIGlzIHRoZSB0cmFuc21pdCBzdGF0dXMKKwkJICovCisKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJdTMyIHF1ZXVlID0gKGxlMzJfdG9fY3B1KGNtZC0+dHhfc3RhdHVzLnJhdGUpICYKKwkJCSAgICBBUjkxNzBfVFhfUEhZX1FPU19NQVNLKSA+PiBBUjkxNzBfVFhfUEhZX1FPU19TSElGVDsKKworCQlza2IgPSBhcjkxNzBfZmluZF9xdWV1ZWRfc2tiKGFyLCBjbWQtPnR4X3N0YXR1cy5kc3QsIHF1ZXVlKTsKKwkJaWYgKHVubGlrZWx5KCFza2IpKQorCQkJcmV0dXJuIDsKKworCQlhcjkxNzBfaGFuZGxlX3R4X3N0YXR1cyhhciwgc2tiLCB0cnVlLAorCQkJCQlsZTE2X3RvX2NwdShjbWQtPnR4X3N0YXR1cy5zdGF0dXMpKTsKKwkJYnJlYWs7CisJCX0KKworCWNhc2UgMHhjMDoKKwkJLyoKKwkJICogcHJlLVRCVFQgZXZlbnQKKwkJICovCisJCWlmIChhci0+dmlmICYmIGFyLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCQlxdWV1ZV93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPmJlYWNvbl93b3JrKTsKKwkJYnJlYWs7CisKKwljYXNlIDB4YzI6CisJCS8qCisJCSAqIChJQlNTKSBiZWFjb24gc2VuZCBub3RpZmljYXRpb24KKwkJICogYnl0ZXM6IDA0IGMyIFhYIFlZIEI0IEIzIEIyIEIxCisJCSAqCisJCSAqIFhYIGFsd2F5cyA4MAorCQkgKiBZWSBhbHdheXMgMDAKKwkJICogQjEtQjQgInNob3VsZCIgYmUgdGhlIG51bWJlciBvZiBzZW5kIG91dCBiZWFjb25zLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIDB4YzM6CisJCS8qIEVuZCBvZiBBdGltIFdpbmRvdyAqLworCQlicmVhazsKKworCWNhc2UgMHhjNDoKKwljYXNlIDB4YzU6CisJCS8qIEJsb2NrQUNLIGV2ZW50cyAqLworCQlicmVhazsKKworCWNhc2UgMHhjNjoKKwkJLyogV2F0Y2hkb2cgSW50ZXJydXB0ICovCisJCWJyZWFrOworCisJY2FzZSAweGM5OgorCQkvKiByZXRyYW5zbWlzc2lvbiBpc3N1ZSAvIFNJRlMvRUlGUyBjb2xsaXNpb24gPyEgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJyZWNlaXZlZCB1bmhhbmRsZWQgZXZlbnQgJXhcbiIsIGNtZC0+dHlwZSk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJkdW1wOiIsIERVTVBfUFJFRklYX05PTkUsIGJ1ZiwgbGVuKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSWYgdGhlIGZyYW1lIGFsaWdubWVudCBpcyByaWdodCAob3IgdGhlIGtlcm5lbCBoYXMKKyAqIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSwgYW5kIHRoZXJlCisgKiBpcyBvbmx5IGEgc2luZ2xlIE1QRFUgaW4gdGhlIFVTQiBmcmFtZSwgdGhlbiB3ZSBjYW4KKyAqIHN1Ym1pdCB0byBtYWM4MDIxMSB0aGUgU0tCIGRpcmVjdGx5LiBIb3dldmVyLCBzaW5jZQorICogdGhlcmUgbWF5IGJlIG11bHRpcGxlIHBhY2tldHMgaW4gb25lIFNLQiBpbiBzdHJlYW0KKyAqIG1vZGUsIGFuZCB3ZSBuZWVkIHRvIG9ic2VydmUgdGhlIHByb3BlciBvcmRlcmluZywKKyAqIHRoaXMgaXMgbm9uLXRyaXZpYWwuCisgKi8KK3N0YXRpYyB2b2lkIGFyOTE3MF9oYW5kbGVfbXBkdShzdHJ1Y3QgYXI5MTcwICphciwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBhcjkxNzBfcnhfaGVhZCAqaGVhZCA9ICh2b2lkICopYnVmOworCXN0cnVjdCBhcjkxNzBfcnhfdGFpbCAqdGFpbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CisJaW50IG1wZHVfbGVuLCBpOworCXU4IGVycm9yLCBhbnRlbm5hcyA9IDAsIGRlY3J5cHQ7CisJX19sZTE2IGZjOworCWludCByZXNlcnZlZDsKKworCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQorCQlyZXR1cm4gOworCisJLyogUmVjZWl2ZWQgTVBEVSAqLworCW1wZHVfbGVuID0gbGVuOworCW1wZHVfbGVuIC09IHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQpOworCW1wZHVfbGVuIC09IHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X3RhaWwpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSAhPSAxMik7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X3RhaWwpICE9IDI0KTsKKworCWlmIChtcGR1X2xlbiA8PSBGQ1NfTEVOKQorCQlyZXR1cm47CisKKwl0YWlsID0gKHZvaWQgKikoYnVmICsgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCkgKyBtcGR1X2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlpZiAodGFpbC0+cnNzaVtpXSAhPSAweDgwKQorCQkJYW50ZW5uYXMgfD0gQklUKGkpOworCisJLyogcG9zdC1wcm9jZXNzIFJTU0kgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQlpZiAodGFpbC0+cnNzaVtpXSAmIDB4ODApCisJCQl0YWlsLT5yc3NpW2ldID0gKCh0YWlsLT5yc3NpW2ldICYgMHg3ZikgKyAxKSAmIDB4N2Y7CisKKwltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOworCisJc3RhdHVzLmJhbmQgPSBhci0+Y2hhbm5lbC0+YmFuZDsKKwlzdGF0dXMuZnJlcSA9IGFyLT5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlzdGF0dXMuc2lnbmFsID0gYXItPm5vaXNlWzBdICsgdGFpbC0+cnNzaV9jb21iaW5lZDsKKwlzdGF0dXMubm9pc2UgPSBhci0+bm9pc2VbMF07CisJc3RhdHVzLmFudGVubmEgPSBhbnRlbm5hczsKKworCXN3aXRjaCAodGFpbC0+c3RhdHVzICYgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX01BU0spIHsKKwljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9DQ0s6CisJCWlmICh0YWlsLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX1NIT1JUX1BSRUFNQkxFKQorCQkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKKwkJc3dpdGNoIChoZWFkLT5wbGNwWzBdKSB7CisJCWNhc2UgMHgwYToKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAweDE0OgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDB4Mzc6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMHg2ZToKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmICgoIWFyLT5zbmlmZmVyX2VuYWJsZWQpICYmIChuZXRfcmF0ZWxpbWl0KCkpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcGxjcCBjY2sgcmF0ZSAiCisJCQkJICAgICAgICIoJXgpLlxuIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwKKwkJCQkgICAgICAgaGVhZC0+cGxjcFswXSk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fT0ZETToKKwkJc3dpdGNoIChoZWFkLT5wbGNwWzBdICYgMHhGKSB7CisJCWNhc2UgMHhCOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDB4RjoKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAweEE6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMHhFOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMzsKKwkJCWJyZWFrOworCQljYXNlIDB4OToKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSAweEQ6CisJCQlzdGF0dXMucmF0ZV9pZHggPSA1OworCQkJYnJlYWs7CisJCWNhc2UgMHg4OgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gNjsKKwkJCWJyZWFrOworCQljYXNlIDB4QzoKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmICgoIWFyLT5zbmlmZmVyX2VuYWJsZWQpICYmIChuZXRfcmF0ZWxpbWl0KCkpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcGxjcCBvZmRtIHJhdGUgIgorCQkJCSAgICAgICAiKCV4KS5cbiIsIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksCisJCQkJICAgICAgIGhlYWQtPnBsY3BbMF0pOworCQkJcmV0dXJuOworCQl9CisJCWlmIChzdGF0dXMuYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJc3RhdHVzLnJhdGVfaWR4ICs9IDQ7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0hUOgorCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0RVUE9GRE06CisJCS8qIFhYWCAqLworCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIG1vZHVsYXRpb25cbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCXJldHVybjsKKwl9CisKKwllcnJvciA9IHRhaWwtPmVycm9yOworCisJaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX01NSUMpIHsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOworCQllcnJvciAmPSB+QVI5MTcwX1JYX0VSUk9SX01NSUM7CisJfQorCisJaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX1BMQ1ApIHsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfUExDUF9DUkM7CisJCWVycm9yICY9IH5BUjkxNzBfUlhfRVJST1JfUExDUDsKKwl9CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfRkNTKSB7CisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CisJCWVycm9yICY9IH5BUjkxNzBfUlhfRVJST1JfRkNTOworCX0KKworCWRlY3J5cHQgPSBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZSh0YWlsKTsKKwlpZiAoIShkZWNyeXB0ICYgQVI5MTcwX1JYX0VOQ19TT0ZUV0FSRSkgJiYKKwkgICAgZGVjcnlwdCAhPSBBUjkxNzBfRU5DX0FMR19OT05FKQorCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKworCS8qIGlnbm9yZSB3cm9uZyBSQSBlcnJvcnMgKi8KKwllcnJvciAmPSB+QVI5MTcwX1JYX0VSUk9SX1dST05HX1JBOworCisJaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQpIHsKKwkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9ERUNSWVBUOworCisJCS8qCisJCSAqIFJ4IGRlY3J5cHRpb24gaXMgZG9uZSBpbiBwbGFjZSwKKwkJICogdGhlIG9yaWdpbmFsIGRhdGEgaXMgbG9zdCBhbnl3YXkuCisJCSAqLworCQlyZXR1cm4gOworCX0KKworCS8qIGRyb3AgYW55IG90aGVyIGVycm9yIGZyYW1lcyAqLworCWlmICgoZXJyb3IpICYmIChuZXRfcmF0ZWxpbWl0KCkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXJyb3JzOiAlI3hcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBlcnJvcik7CisJCXJldHVybjsKKwl9CisKKwlidWYgKz0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCk7CisJZmMgPSAqKF9fbGUxNiAqKWJ1ZjsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYykpCisJCXJlc2VydmVkID0gMzIgKyAyOworCWVsc2UKKwkJcmVzZXJ2ZWQgPSAzMjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobXBkdV9sZW4gKyByZXNlcnZlZCk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCXNrYl9yZXNlcnZlKHNrYiwgcmVzZXJ2ZWQpOworCW1lbWNweShza2JfcHV0KHNrYiwgbXBkdV9sZW4pLCBidWYsIG1wZHVfbGVuKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShhci0+aHcsIHNrYiwgJnN0YXR1cyk7Cit9CisKK3ZvaWQgYXI5MTcwX3J4KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuc2lnbmVkIGludCBpLCB0bGVuLCByZXNwbGVuOworCXU4ICp0YnVmLCAqcmVzcGJ1ZjsKKworCXRidWYgPSBza2ItPmRhdGE7CisJdGxlbiA9IHNrYi0+bGVuOworCisJd2hpbGUgKHRsZW4gPj0gNCkgeworCQlpbnQgY2xlbiA9IHRidWZbMV0gPDwgOCB8IHRidWZbMF07CisJCWludCB3bGVuID0gKGNsZW4gKyAzKSAmIH4zOworCisJCS8qCisJCSAqIHBhcnNlIHN0cmVhbSAoaWYgYW55KQorCQkgKi8KKwkJaWYgKHRidWZbMl0gIT0gMCB8fCB0YnVmWzNdICE9IDB4NGUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1pc3NpbmcgdGFnIVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJCXJldHVybiA7CisJCX0KKwkJaWYgKHdsZW4gPiB0bGVuIC0gNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBSWCAoJWQsICVkLCAlZClcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgY2xlbiwgd2xlbiwgdGxlbik7CisJCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiZGF0YTogIiwKKwkJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCSAgICAgICAxNiwgMSwgdGJ1ZiwgdGxlbiwgdHJ1ZSk7CisJCQlyZXR1cm4gOworCQl9CisJCXJlc3BsZW4gPSBjbGVuOworCQlyZXNwYnVmID0gdGJ1ZiArIDQ7CisJCXRidWYgKz0gd2xlbiArIDQ7CisJCXRsZW4gLT0gd2xlbiArIDQ7CisKKwkJaSA9IDA7CisKKwkJLyogd2VpcmQgdGhpbmcsIGJ1dCB0aGlzIGlzIHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBkcml2ZXIgKi8KKwkJd2hpbGUgKHJlc3BsZW4gPiAyICYmIGkgPCAxMiAmJgorCQkgICAgICAgcmVzcGJ1ZlswXSA9PSAweGZmICYmIHJlc3BidWZbMV0gPT0gMHhmZikgeworCQkJaSArPSAyOworCQkJcmVzcGxlbiAtPSAyOworCQkJcmVzcGJ1ZiArPSAyOworCQl9CisKKwkJaWYgKHJlc3BsZW4gPCA0KQorCQkJY29udGludWU7CisKKwkJLyogZm91bmQgdGhlIDYgKiAweGZmZmYgbWFya2VyPyAqLworCQlpZiAoaSA9PSAxMikKKwkJCWFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShhciwgcmVzcGJ1ZiwgcmVzcGxlbik7CisJCWVsc2UKKwkJCWFyOTE3MF9oYW5kbGVfbXBkdShhciwgcmVzcGJ1ZiwgcmVzcGxlbik7CisJfQorCisJaWYgKHRsZW4pCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJ1ZmZlciByZW1haW5zIVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworfQorCisjZGVmaW5lIEFSOTE3MF9GSUxMX1FVRVVFKHF1ZXVlLCBhaV9mcywgY3dtaW4sIGN3bWF4LCBfdHhvcCkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcXVldWUuYWlmcyA9IGFpX2ZzOwkJCQkJCVwKKwlxdWV1ZS5jd19taW4gPSBjd21pbjsJCQkJCQlcCisJcXVldWUuY3dfbWF4ID0gY3dtYXg7CQkJCQkJXAorCXF1ZXVlLnR4b3AgPSBfdHhvcDsJCQkJCQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IGFyOTE3MF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCWludCBlcnIsIGk7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJLyogcmVpbml0aWFsaXplIHF1ZXVlcyBzdGF0aXN0aWNzICovCisJbWVtc2V0KCZhci0+dHhfc3RhdHMsIDAsIHNpemVvZihhci0+dHhfc3RhdHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhci0+dHhfc3RhdHMpOyBpKyspCisJCWFyLT50eF9zdGF0c1tpXS5saW1pdCA9IDg7CisKKwkvKiByZXNldCBRb1MgZGVmYXVsdHMgKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlswXSwgMywgMTUsIDEwMjMsICAwKTsgLyogQkVTVCBFRkZPUlQqLworCUFSOTE3MF9GSUxMX1FVRVVFKGFyLT5lZGNmWzFdLCA3LCAxNSwgMTAyMywgIDApOyAvKiBCQUNLR1JPVU5EICovCisJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbMl0sIDIsIDcsICAgIDE1LCA5NCk7IC8qIFZJREVPICovCisJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbM10sIDIsIDMsICAgICA3LCA0Nyk7IC8qIFZPSUNFICovCisJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbNF0sIDIsIDMsICAgICA3LCAgMCk7IC8qIFNQRUNJQUwgKi8KKworCWVyciA9IGFyLT5vcGVuKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGFyOTE3MF9pbml0X21hYyhhcik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBhcjkxNzBfc2V0X3Fvcyhhcik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBhcjkxNzBfaW5pdF9waHkoYXIsIElFRUU4MDIxMV9CQU5EXzJHSFopOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gYXI5MTcwX2luaXRfcmYoYXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogc3RhcnQgRE1BICovCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzNkMzAsIDB4MTAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWFyLT5zdGF0ZSA9IEFSOTE3MF9TVEFSVEVEOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisKKwlpZiAoSVNfU1RBUlRFRChhcikpCisJCWFyLT5zdGF0ZSA9IEFSOTE3MF9JRExFOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXItPnR4X3N0YXR1c19qYW5pdG9yKTsKKwljYW5jZWxfd29ya19zeW5jKCZhci0+ZmlsdGVyX2NvbmZpZ193b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhci0+YmVhY29uX3dvcmspOworCXNrYl9xdWV1ZV9wdXJnZSgmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpOworCXNrYl9xdWV1ZV9wdXJnZSgmYXItPmdsb2JhbF90eF9zdGF0dXMpOworCisJaWYgKElTX0FDQ0VQVElOR19DTUQoYXIpKSB7CisJCWFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgMCk7CisKKwkJLyogc3RvcCBETUEgKi8KKwkJYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzNkMzAsIDApOworCQlhci0+c3RvcChhcik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitpbnQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZTsKKwl1bnNpZ25lZCBpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfaW5mbyA9IE5VTEw7CisJdTMyIHBvd2VyLCBjaGFpbnM7CisJdTE2IGtleXR5cGUgPSAwOworCXUxNiBsZW4sIGljdiA9IDA7CisJaW50IGVycjsKKwlib29sIHR4X3N0YXR1czsKKworCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQorCQlnb3RvIGVycl9mcmVlOworCisJaGRyID0gKHZvaWQgKilza2ItPmRhdGE7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlsZW4gPSBza2ItPmxlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCWlmIChhci0+dHhfc3RhdHNbcXVldWVdLmxpbWl0IDwgYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlhci0+dHhfc3RhdHNbcXVldWVdLmxlbisrOworCWFyLT50eF9zdGF0c1txdWV1ZV0uY291bnQrKzsKKwlpZiAoYXItPnR4X3N0YXRzW3F1ZXVlXS5saW1pdCA9PSBhci0+dHhfc3RhdHNbcXVldWVdLmxlbikKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHF1ZXVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisKKwl0eGMgPSAodm9pZCAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCp0eGMpKTsKKworCXR4X3N0YXR1cyA9ICgoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUpICE9IDApIHx8CisJCSAgICAoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSAhPSAwKSk7CisKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKKwkJaWN2ID0gaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47CisKKwkJc3dpdGNoIChpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnKSB7CisJCWNhc2UgQUxHX1dFUDoKKwkJCWtleXR5cGUgPSBBUjkxNzBfVFhfTUFDX0VOQ1JfUkM0OworCQkJYnJlYWs7CisJCWNhc2UgQUxHX1RLSVA6CisJCQlrZXl0eXBlID0gQVI5MTcwX1RYX01BQ19FTkNSX1JDNDsKKwkJCWJyZWFrOworCQljYXNlIEFMR19DQ01QOgorCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9BRVM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7CisJCQlnb3RvIGVycl9kZXF1ZXVlOworCQl9CisJfQorCisJLyogTGVuZ3RoICovCisJdHhjLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4gKyBpY3YgKyA0KTsKKworCXR4Yy0+bWFjX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX0hXX0RVUkFUSU9OIHwKKwkJCQkgICAgICAgQVI5MTcwX1RYX01BQ19CQUNLT0ZGKTsKKwl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KGFyOTE3MF9xb3NfaHdtYXBbcXVldWVdIDw8CisJCQkJCUFSOTE3MF9UWF9NQUNfUU9TX1NISUZUKTsKKwl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KGtleXR5cGUpOworCXR4Yy0+cGh5X2NvbnRyb2wgPSBjcHVfdG9fbGUzMigwKTsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQorCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfTk9fQUNLKTsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19BR0dSKTsKKworCXR4cmF0ZSA9ICZpbmZvLT5jb250cm9sLnJhdGVzWzBdOworCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQorCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfUFJPVF9DVFMpOworCWVsc2UgaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19QUk9UX1JUUyk7CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX0dSRUVORklFTEQpOworCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUpOworCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfQldfNDBNSFopOworCS8qIHRoaXMgd29ya3MgYmVjYXVzZSA0MCBNSHogaXMgMiBhbmQgZHVwIGlzIDMgKi8KKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQSkKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX0JXXzQwTUhaX0RVUCk7CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX1NIT1JUX0dJKTsKKworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgeworCQl1MzIgciA9IHR4cmF0ZS0+aWR4OworCQl1OCAqdHhwb3dlcjsKKworCQlyIDw8PSBBUjkxNzBfVFhfUEhZX01DU19TSElGVDsKKwkJaWYgKFdBUk5fT04ociAmIH5BUjkxNzBfVFhfUEhZX01DU19NQVNLKSkKKwkJCWdvdG8gZXJyX2RlcXVldWU7CisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIociAmIEFSOTE3MF9UWF9QSFlfTUNTX01BU0spOworCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfTU9EX0hUKTsKKworCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpIHsKKwkJCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19odDQwOworCQkJZWxzZQorCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfaHQ0MDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19odDIwOworCQkJZWxzZQorCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfaHQyMDsKKwkJfQorCisJCXBvd2VyID0gdHhwb3dlclsodHhyYXRlLT5pZHgpICYgN107CisJfSBlbHNlIHsKKwkJdTggKnR4cG93ZXI7CisJCXUzMiBtb2Q7CisJCXUzMiBwaHlyYXRlOworCQl1OCBpZHggPSB0eHJhdGUtPmlkeDsKKworCQlpZiAoaW5mby0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCQlpZHggKz0gNDsKKwkJCXR4cG93ZXIgPSBhci0+cG93ZXJfNUdfbGVnOworCQkJbW9kID0gQVI5MTcwX1RYX1BIWV9NT0RfT0ZETTsKKwkJfSBlbHNlIHsKKwkJCWlmIChpZHggPCA0KSB7CisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19jY2s7CisJCQkJbW9kID0gQVI5MTcwX1RYX1BIWV9NT0RfQ0NLOworCQkJfSBlbHNlIHsKKwkJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNOworCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfb2ZkbTsKKwkJCX0KKwkJfQorCisJCXJhdGUgPSAmX19hcjkxNzBfcmF0ZXRhYmxlW2lkeF07CisKKwkJcGh5cmF0ZSA9IHJhdGUtPmh3X3ZhbHVlICYgMHhGOworCQlwb3dlciA9IHR4cG93ZXJbKHJhdGUtPmh3X3ZhbHVlICYgMHgzMCkgPj4gNF07CisJCXBoeXJhdGUgPDw9IEFSOTE3MF9UWF9QSFlfTUNTX1NISUZUOworCisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIobW9kKTsKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihwaHlyYXRlKTsKKwl9CisKKwlwb3dlciA8PD0gQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQ7CisJcG93ZXIgJj0gQVI5MTcwX1RYX1BIWV9UWF9QV1JfTUFTSzsKKwl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKHBvd2VyKTsKKworCS8qIHNldCBUWCBjaGFpbnMgKi8KKwlpZiAoYXItPmVlcHJvbS50eF9tYXNrID09IDEpIHsKKwkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7CisJfSBlbHNlIHsKKwkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzI7CisKKwkJLyogPj0gMzZNIGxlZ2FjeSBPRkRNIC0gdXNlIG9ubHkgb25lIGNoYWluICovCisJCWlmIChyYXRlICYmIHJhdGUtPmJpdHJhdGUgPj0gMzYwKQorCQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7CisJfQorCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoY2hhaW5zIDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCk7CisKKwlpZiAodHhfc3RhdHVzKSB7CisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19SQVRFX1BST0JFKTsKKwkJLyoKKwkJICogV0FSTklORzoKKwkJICogUHV0dGluZyB0aGUgUW9TIHF1ZXVlIGJpdHMgaW50byBhbiB1bmV4cGxvcmVkIHRlcnJpdG9yeSBpcworCQkgKiBjZXJ0YWlubHkgbm90IGVsZWdhbnQuCisJCSAqCisJCSAqIEluIG15IGRlZmVuc2U6IFRoaXMgaWRlYSBwcm92aWRlcyBhIHJlYXNvbmFibGUgd2F5IHRvCisJCSAqIHNtdWdnbGUgdmFsdWFibGUgaW5mb3JtYXRpb24gdG8gdGhlIHR4X3N0YXR1cyBjYWxsYmFjay4KKwkJICogQWxzbywgdGhlIGlkZWEgYmVoaW5kIHRoaXMgYml0LWFidXNlIGNhbWUgc3RyYWlnaHQgZnJvbQorCQkgKiB0aGUgb3JpZ2luYWwgZHJpdmVyIGNvZGUuCisJCSAqLworCisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0KKwkJCWNwdV90b19sZTMyKHF1ZXVlIDw8IEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUKTsKKworCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpIHsKKwkJCXN0YV9pbmZvID0gKHZvaWQgKikgaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCQkJc2tiX3F1ZXVlX3RhaWwoJnN0YV9pbmZvLT50eF9zdGF0dXNbcXVldWVdLCBza2IpOworCQl9IGVsc2UgeworCQkJc2tiX3F1ZXVlX3RhaWwoJmFyLT5nbG9iYWxfdHhfc3RhdHVzLCBza2IpOworCisJCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LT53b3JrcXVldWUsCisJCQkJCSAgICZhci0+dHhfc3RhdHVzX2phbml0b3IsCisJCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJCX0KKwl9CisKKwllcnIgPSBhci0+dHgoYXIsIHNrYiwgdHhfc3RhdHVzLCAwKTsKKwlpZiAodW5saWtlbHkodHhfc3RhdHVzICYmIGVycikpIHsKKwkJaWYgKGluZm8tPmNvbnRyb2wuc3RhKQorCQkJc2tiX3VubGluayhza2IsICZzdGFfaW5mby0+dHhfc3RhdHVzW3F1ZXVlXSk7CisJCWVsc2UKKwkJCXNrYl91bmxpbmsoc2tiLCAmYXItPmdsb2JhbF90eF9zdGF0dXMpOworCX0KKworCXJldHVybiBORVRERVZfVFhfT0s7CisKK2Vycl9kZXF1ZXVlOgorCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCWFyLT50eF9zdGF0c1txdWV1ZV0ubGVuLS07CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5jb3VudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisKK2Vycl9mcmVlOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJaWYgKGFyLT52aWYpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlhci0+dmlmID0gY29uZi0+dmlmOworCW1lbWNweShhci0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisKKwlpZiAobW9kcGFyYW1fbm9od2NyeXB0IHx8IChhci0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKSB7CisJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKKwkJYXItPmRpc2FibGVfb2ZmbG9hZCA9IHRydWU7CisJfQorCisJYXItPmN1cl9maWx0ZXIgPSAwOworCWFyLT53YW50X2ZpbHRlciA9IEFSOTE3MF9NQUNfUkVHX0ZURl9ERUZBVUxUUzsKKwllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhcik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2s7CisKKwllcnIgPSBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKGFyKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJYXItPnZpZiA9IE5VTEw7CisJYXItPndhbnRfZmlsdGVyID0gMDsKKwlhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhcik7CisJYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKKwlkZXZfa2ZyZWVfc2tiKGFyLT5iZWFjb24pOworCWFyLT5iZWFjb24gPSBOVUxMOworCWFyLT5zbmlmZmVyX2VuYWJsZWQgPSBmYWxzZTsKKwlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IGZhbHNlOworCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOworCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKK30KKworc3RhdGljIGludCBhcjkxNzBfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKKwkJLyogVE9ETyAqLworCQllcnIgPSAwOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTCkgeworCQkvKiBUT0RPICovCisJCWVyciA9IDA7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJLyogVE9ETyAqLworCQllcnIgPSAwOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CisJCS8qIFRPRE8gKi8KKwkJZXJyID0gMDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMpIHsKKwkJLyoKKwkJICogaXMgaXQgbG9uZ19mcmFtZV9tYXhfdHhfY291bnQgb3Igc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50PworCQkgKi8KKworCQllcnIgPSBhcjkxNzBfc2V0X2h3cmV0cnlfbGltaXQoYXIsCisJCQlhci0+aHctPmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKSB7CisJCWVyciA9IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhhcik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7CisJCWVyciA9IGFyOTE3MF9zZXRfY2hhbm5lbChhciwgaHctPmNvbmYuY2hhbm5lbCwKKwkJCQkJIEFSOTE3MF9SRklfTk9ORSwgQVI5MTcwX0JXXzIwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQkvKiBhZGp1c3Qgc2xvdCB0aW1lIGZvciA1IEdIeiAqLworCQlpZiAoaHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfU0xPVF9USU1FLAorCQkJCQkgICAgICAgOSA8PCAxMCk7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX29wX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisKKwlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEKSB7CisJCW1lbWNweShhci0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOworCX0KKworCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKSB7CisJCWVyciA9IGFyOTE3MF91cGRhdGVfYmVhY29uKGFyKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWVyciA9IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhhcik7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9zZXRfZmlsdGVycyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFyOTE3MCwKKwkJCQkJIGZpbHRlcl9jb25maWdfd29yayk7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKGFyLT5maWx0ZXJfY2hhbmdlZCAmIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9QUk9NSVNDKSB7CisJCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOworCQlpZiAoZXJyKQorCQkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKGFyLT5maWx0ZXJfY2hhbmdlZCAmIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NVUxUSUNBU1QpIHsKKwkJZXJyID0gYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3QoYXIpOworCQlpZiAoZXJyKQorCQkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKGFyLT5maWx0ZXJfY2hhbmdlZCAmIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9GUkFNRUZJTFRFUikKKwkJZXJyID0gYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqbmV3X2ZsYWdzLAorCQkJCSAgICAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisKKwkvKiBtYXNrIHN1cHBvcnRlZCBmbGFncyAqLworCSpuZXdfZmxhZ3MgJj0gRklGX0FMTE1VTFRJIHwgRklGX0NPTlRST0wgfCBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyB8CisJCSAgICAgIEZJRl9QUk9NSVNDX0lOX0JTUzsKKworCS8qCisJICogV2UgY2FuIHN1cHBvcnQgbW9yZSBieSBzZXR0aW5nIHRoZSBzbmlmZmVyIGJpdCBhbmQKKwkgKiB0aGVuIGNoZWNraW5nIHRoZSBlcnJvciBmbGFncywgbGF0ZXIuCisJICovCisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSkgeworCQlpZiAoKm5ld19mbGFncyAmIEZJRl9BTExNVUxUSSkgeworCQkJYXItPndhbnRfbWNfaGFzaCA9IH4wVUxMOworCQl9IGVsc2UgeworCQkJdTY0IG1jaGFzaDsKKwkJCWludCBpOworCisJCQkvKiBhbHdheXMgZ2V0IGJyb2FkY2FzdCBmcmFtZXMgKi8KKwkJCW1jaGFzaCA9IDFVTEwgPDwgKDB4ZmY+PjIpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQkJCWlmIChXQVJOX09OKCFtY2xpc3QpKQorCQkJCQlicmVhazsKKwkJCQltY2hhc2ggfD0gMVVMTCA8PCAobWNsaXN0LT5kbWlfYWRkcls1XSA+PiAyKTsKKwkJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJCQl9CisJCWFyLT53YW50X21jX2hhc2ggPSBtY2hhc2g7CisJCX0KKwkJYXItPmZpbHRlcl9jaGFuZ2VkIHw9IEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NVUxUSUNBU1Q7CisJfQorCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgeworCQl1MzIgZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX1BTUE9MTCB8CisJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9SVFMgfAorCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQ1RTIHwKKwkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX0FDSyB8CisJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DRkUgfAorCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSzsKKworCQlpZiAoKm5ld19mbGFncyAmIEZJRl9DT05UUk9MKQorCQkJYXItPndhbnRfZmlsdGVyID0gYXItPmN1cl9maWx0ZXIgfCBmaWx0ZXI7CisJCWVsc2UKKwkJCWFyLT53YW50X2ZpbHRlciA9IGFyLT5jdXJfZmlsdGVyICYgfmZpbHRlcjsKKworCQlhci0+ZmlsdGVyX2NoYW5nZWQgfD0gQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSOworCX0KKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB7CisJCWFyLT5zbmlmZmVyX2VuYWJsZWQgPSAoKCpuZXdfZmxhZ3MpICYgRklGX1BST01JU0NfSU5fQlNTKSAhPSAwOworCQlhci0+ZmlsdGVyX2NoYW5nZWQgfD0gQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX1BST01JU0M7CisJfQorCisJaWYgKGxpa2VseShJU19TVEFSVEVEKGFyKSkpCisJCXF1ZXVlX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+ZmlsdGVyX2NvbmZpZ193b3JrKTsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAorCQkJCSAgICAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CisJCWFyLT5zdGF0ZSA9IGJzc19jb25mLT5hc3NvYyA/IEFSOTE3MF9BU1NPQ0lBVEVEIDogYXItPnN0YXRlOworCisjaWZuZGVmIENPTkZJR19BUjkxNzBfTEVEUworCQkvKiBlbmFibGUgYXNzb2MgTEVELiAqLworCQllcnIgPSBhcjkxNzBfc2V0X2xlZHNfc3RhdGUoYXIsIGJzc19jb25mLT5hc3NvYyA/IDIgOiAwKTsKKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0hUKSB7CisJCS8qIFRPRE8gKi8KKwkJZXJyID0gMDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7CisJCXUzMiBzbG90dGltZSA9IDIwOworCisJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QpCisJCQlzbG90dGltZSA9IDk7CisKKwkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRSwgc2xvdHRpbWUgPDwgMTApOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKKwkJdTMyIGNjaywgb2ZkbTsKKworCQlpZiAoaHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCQlvZmRtID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzOworCQkJY2NrID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIGZvdXIgY2NrIHJhdGVzICovCisJCQljY2sgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXMgJiAweGY7CisJCQlvZmRtID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzID4+IDQ7CisJCX0KKwkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JBU0lDX1JBVEUsCisJCQkJb2ZkbSA8PCA4IHwgY2NrKTsKKwl9CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKK30KKworc3RhdGljIHU2NCBhcjkxNzBfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCWludCBlcnI7CisJdTMyIHRzZl9sb3c7CisJdTMyIHRzZl9oaWdoOworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCWVyciA9IGFyOTE3MF9yZWFkX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfVFNGX0wsICZ0c2ZfbG93KTsKKwlpZiAoIWVycikKKwkJZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19UU0ZfSCwgJnRzZl9oaWdoKTsKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisKKwlpZiAoV0FSTl9PTihlcnIpKQorCQlyZXR1cm4gMDsKKworCXRzZiA9IHRzZl9oaWdoOworCXRzZiA9ICh0c2YgPDwgMzIpIHwgdHNmX2xvdzsKKwlyZXR1cm4gdHNmOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciA9IDAsIGk7CisJdTgga3R5cGU7CisKKwlpZiAoKCFhci0+dmlmKSB8fCAoYXItPmRpc2FibGVfb2ZmbG9hZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXN3aXRjaCAoa2V5LT5hbGcpIHsKKwljYXNlIEFMR19XRVA6CisJCWlmIChrZXktPmtleWxlbiA9PSBMRU5fV0VQNDApCisJCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX1dFUDY0OworCQllbHNlCisJCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX1dFUDEyODsKKwkJYnJlYWs7CisJY2FzZSBBTEdfVEtJUDoKKwkJa3R5cGUgPSBBUjkxNzBfRU5DX0FMR19US0lQOworCQlicmVhazsKKwljYXNlIEFMR19DQ01QOgorCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX0FFU0NDTVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCWlmIChjbWQgPT0gU0VUX0tFWSkgeworCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgeworCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIGdyb3VwIGtleXMgbmVlZCBhbGwtemVyb2VzIGFkZHJlc3MgKi8KKwkJaWYgKCEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpCisJCQlzdGEgPSBOVUxMOworCisJCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJCQlpZiAoIShhci0+dXNlZGtleXMgJiBCSVQoaSkpKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IDY0KSB7CisJCQkJYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24gPSB0cnVlOworCQkJCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOworCQkJCWVyciA9IC1FTk9TUEM7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpID0gNjQgKyBrZXktPmtleWlkeDsKKwkJfQorCisJCWtleS0+aHdfa2V5X2lkeCA9IGk7CisKKwkJZXJyID0gYXI5MTcwX3VwbG9hZF9rZXkoYXIsIGksIHN0YSA/IHN0YS0+YWRkciA6IE5VTEwsIGt0eXBlLCAwLAorCQkJCQlrZXktPmtleSwgbWluX3QodTgsIDE2LCBrZXktPmtleWxlbikpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGtleS0+YWxnID09IEFMR19US0lQKSB7CisJCQllcnIgPSBhcjkxNzBfdXBsb2FkX2tleShhciwgaSwgc3RhID8gc3RhLT5hZGRyIDogTlVMTCwKKwkJCQkJCWt0eXBlLCAxLCBrZXktPmtleSArIDE2LCAxNik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCisJCQkvKgorCQkJICogaGFyZHdhcmUgaXMgbm90IGNhcGFibGUgZ2VuZXJhdGluZyB0aGUgTU1JQworCQkJICogZm9yIGZyYWdtZW50ZWQgZnJhbWVzIQorCQkJICovCisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDOworCQl9CisKKwkJaWYgKGkgPCA2NCkKKwkJCWFyLT51c2Vka2V5cyB8PSBCSVQoaSk7CisKKwkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpIHsKKwkJCS8qIFRoZSBkZXZpY2UgaXMgZ29uZS4uLiB0b2dldGhlciB3aXRoIHRoZSBrZXkgOy0pICovCisJCQllcnIgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSBhcjkxNzBfZGlzYWJsZV9rZXkoYXIsIGtleS0+aHdfa2V5X2lkeCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoa2V5LT5od19rZXlfaWR4IDwgNjQpIHsKKwkJCWFyLT51c2Vka2V5cyAmPSB+QklUKGtleS0+aHdfa2V5X2lkeCk7CisJCX0gZWxzZSB7CisJCQllcnIgPSBhcjkxNzBfdXBsb2FkX2tleShhciwga2V5LT5od19rZXlfaWR4LCBOVUxMLAorCQkJCQkJQVI5MTcwX0VOQ19BTEdfTk9ORSwgMCwKKwkJCQkJCU5VTEwsIDApOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKworCQkJaWYgKGtleS0+YWxnID09IEFMR19US0lQKSB7CisJCQkJZXJyID0gYXI5MTcwX3VwbG9hZF9rZXkoYXIsIGtleS0+aHdfa2V5X2lkeCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCUFSOTE3MF9FTkNfQUxHX05PTkUsIDEsCisJCQkJCQkJTlVMTCwgMCk7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJfQorCX0KKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfTCwgYXItPnVzZWRrZXlzKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9ILCBhci0+dXNlZGtleXMgPj4gMzIpOworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKwllcnIgPSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICppbmZvID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNUQV9OT1RJRllfQUREOgorCQlmb3IgKGkgPSAwOyBpIDwgYXItPmh3LT5xdWV1ZXM7IGkrKykKKwkJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmluZm8tPnR4X3N0YXR1c1tpXSk7CisJCWJyZWFrOworCisJY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKKworCQkvKgorCQkgKiB0cmFuc2ZlciBhbGwgb3V0c3RhbmRpbmcgZnJhbWVzIHRoYXQgbmVlZCBhIHR4X3N0YXR1cworCQkgKiByZXBvcnRzIHRvIHRoZSBnbG9iYWwgdHhfc3RhdHVzIHF1ZXVlCisJCSAqLworCisJCWZvciAoaSA9IDA7IGkgPCBhci0+aHctPnF1ZXVlczsgaSsrKSB7CisJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpbmZvLT50eF9zdGF0dXNbaV0pKSkgeworI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWVpbmcgZnJhbWUgaW4gIgorCQkJCQkgICJnbG9iYWwgdHhfc3RhdHVzIHF1ZXVlID0+XG4iLAorCQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKworCQkJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwkJCQlza2JfcXVldWVfdGFpbCgmYXItPmdsb2JhbF90eF9zdGF0dXMsIHNrYik7CisJCQl9CisJCX0KKwkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPnR4X3N0YXR1c19qYW5pdG9yLAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGFyOTE3MF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJdTMyIHZhbDsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX1RYX1JFVFJZLCAmdmFsKTsKKwlhci0+c3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQgKz0gdmFsOworCisJbWVtY3B5KHN0YXRzLCAmYXItPnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICp0eF9zdGF0cykKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCisJc3Bpbl9sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7CisJbWVtY3B5KHR4X3N0YXRzLCBhci0+dHhfc3RhdHMsIHNpemVvZih0eF9zdGF0c1swXSkgKiBody0+cXVldWVzKTsKKwlzcGluX3VubG9ja19iaCgmYXItPnR4X3N0YXRzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKKwkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJaWYgKChwYXJhbSkgJiYgIShxdWV1ZSA+IGFyLT5ody0+cXVldWVzKSkgeworCQltZW1jcHkoJmFyLT5lZGNmW2FyOTE3MF9xb3NfaHdtYXBbcXVldWVdXSwKKwkJICAgICAgIHBhcmFtLCBzaXplb2YoKnBhcmFtKSk7CisKKwkJcmV0ID0gYXI5MTcwX3NldF9xb3MoYXIpOworCX0gZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhcjkxNzBfb3BzID0geworCS5zdGFydAkJCT0gYXI5MTcwX29wX3N0YXJ0LAorCS5zdG9wCQkJPSBhcjkxNzBfb3Bfc3RvcCwKKwkudHgJCQk9IGFyOTE3MF9vcF90eCwKKwkuYWRkX2ludGVyZmFjZQkJPSBhcjkxNzBfb3BfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZQk9IGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcJCQk9IGFyOTE3MF9vcF9jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UJPSBhcjkxNzBfb3BfY29uZmlnX2ludGVyZmFjZSwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IGFyOTE3MF9vcF9jb25maWd1cmVfZmlsdGVyLAorCS5jb25mX3R4CQk9IGFyOTE3MF9jb25mX3R4LAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gYXI5MTcwX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLmdldF90c2YJCT0gYXI5MTcwX29wX2dldF90c2YsCisJLnNldF9rZXkJCT0gYXI5MTcwX3NldF9rZXksCisJLnN0YV9ub3RpZnkJCT0gYXI5MTcwX3N0YV9ub3RpZnksCisJLmdldF9zdGF0cwkJPSBhcjkxNzBfZ2V0X3N0YXRzLAorCS5nZXRfdHhfc3RhdHMJCT0gYXI5MTcwX2dldF90eF9zdGF0cywKK307CisKK3ZvaWQgKmFyOTE3MF9hbGxvYyhzaXplX3QgcHJpdl9zaXplKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBhcjkxNzAgKmFyOworCWludCBpOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcocHJpdl9zaXplLCAmYXI5MTcwX29wcyk7CisJaWYgKCFodykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhciA9IGh3LT5wcml2OworCWFyLT5odyA9IGh3OworCisJbXV0ZXhfaW5pdCgmYXItPm11dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmYXItPmNtZGxvY2spOworCXNwaW5fbG9ja19pbml0KCZhci0+dHhfc3RhdHNfbG9jayk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPmdsb2JhbF90eF9zdGF0dXMpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFyLT5nbG9iYWxfdHhfc3RhdHVzX3dhc3RlKTsKKwlJTklUX1dPUksoJmFyLT5maWx0ZXJfY29uZmlnX3dvcmssIGFyOTE3MF9zZXRfZmlsdGVycyk7CisJSU5JVF9XT1JLKCZhci0+YmVhY29uX3dvcmssIGFyOTE3MF9uZXdfYmVhY29uKTsKKwlJTklUX0RFTEFZRURfV09SSygmYXItPnR4X3N0YXR1c19qYW5pdG9yLCBhcjkxNzBfdHhfc3RhdHVzX2phbml0b3IpOworCisJLyogYWxsIGh3IHN1cHBvcnRzIDIuNCBHSHosIHNvIHNldCBjaGFubmVsIHRvIDEgYnkgZGVmYXVsdCAqLworCWFyLT5jaGFubmVsID0gJmFyOTE3MF8yZ2h6X2NoYW50YWJsZVswXTsKKworCS8qIGZpcnN0IHBhcnQgb2Ygd2lwaHkgaW5pdCAqLworCWFyLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCQkJCSBCSVQoTkw4MDIxMV9JRlRZUEVfV0RTKSB8CisJCQkJCSBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCWFyLT5ody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCQkgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCQkgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkJIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CisKKwlhci0+aHctPnF1ZXVlcyA9IF9fQVI5MTcwX05VTV9UWFE7CisJYXItPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDg7CisJYXItPmh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfc3RhX2luZm8pOworCisJYXItPmh3LT5tYXhfcmF0ZXMgPSAxOworCWFyLT5ody0+bWF4X3JhdGVfdHJpZXMgPSAzOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXItPm5vaXNlKTsgaSsrKQorCQlhci0+bm9pc2VbaV0gPSAtOTU7IC8qIEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SICovCisKKwlyZXR1cm4gYXI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3JlYWRfZWVwcm9tKHN0cnVjdCBhcjkxNzAgKmFyKQoreworI2RlZmluZSBSVwk4CS8qIG51bWJlciBvZiB3b3JkcyB0byByZWFkIGF0IG9uY2UgKi8KKyNkZWZpbmUgUkIJKHNpemVvZih1MzIpICogUlcpCisJREVDTEFSRV9NQUNfQlVGKG1idWYpOworCXU4ICplZXByb20gPSAodm9pZCAqKSZhci0+ZWVwcm9tOworCXU4ICphZGRyID0gYXItPmVlcHJvbS5tYWNfYWRkcmVzczsKKwlfX2xlMzIgb2Zmc2V0c1tSV107CisJaW50IGksIGosIGVyciwgYmFuZHMgPSAwOworCisJQlVJTERfQlVHX09OKHNpemVvZihhci0+ZWVwcm9tKSAmIDMpOworCisJQlVJTERfQlVHX09OKFJCID4gQVI5MTcwX01BWF9DTURfTEVOIC0gNCk7CisjaWZuZGVmIF9fQ0hFQ0tFUl9fCisJLyogZG9uJ3Qgd2FudCB0byBoYW5kbGUgdHJhaWxpbmcgcmVtYWlucyAqLworCUJVSUxEX0JVR19PTihzaXplb2YoYXItPmVlcHJvbSkgJSBSQik7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYXItPmVlcHJvbSkvUkI7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgUlc7IGorKykKKwkJCW9mZnNldHNbal0gPSBjcHVfdG9fbGUzMihBUjkxNzBfRUVQUk9NX1NUQVJUICsKKwkJCQkJCSBSQiAqIGkgKyA0ICogaik7CisKKwkJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1JSRUcsCisJCQkJICAgUkIsICh1OCAqKSAmb2Zmc2V0cywKKwkJCQkgICBSQiwgZWVwcm9tICsgUkIgKiBpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisjdW5kZWYgUlcKKyN1bmRlZiBSQgorCisJaWYgKGFyLT5lZXByb20ubGVuZ3RoID09IGNwdV90b19sZTE2KDB4RkZGRikpCisJCXJldHVybiAtRU5PREFUQTsKKworCWlmIChhci0+ZWVwcm9tLm9wZXJhdGluZ19mbGFncyAmIEFSOTE3MF9PUEZMQUdfMkdIWikgeworCQlhci0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZhcjkxNzBfYmFuZF8yR0h6OworCQliYW5kcysrOworCX0KKwlpZiAoYXItPmVlcHJvbS5vcGVyYXRpbmdfZmxhZ3MgJiBBUjkxNzBfT1BGTEFHXzVHSFopIHsKKwkJYXItPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmYXI5MTcwX2JhbmRfNUdIejsKKwkJYmFuZHMrKzsKKwl9CisJLyoKKwkgKiBJIG1lYXN1cmVkIHRoaXMsIGEgYmFuZHN3aXRjaCB0YWtlcyByb3VnaGx5CisJICogMTM1IG1zIGFuZCBhIGZyZXF1ZW5jeSBzd2l0Y2ggYWJvdXQgODAuCisJICoKKwkgKiBGSVhNRTogbWVhc3VyZSB0aGVzZSB2YWx1ZXMgYWdhaW4gb25jZSBFRVBST00gc2V0dGluZ3MKKwkgKgkgIGFyZSB1c2VkLCB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZW0hCisJICovCisJaWYgKGJhbmRzID09IDIpCisJCWFyLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEzNSAqIDEwMDA7CisJZWxzZQorCQlhci0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA4MCAqIDEwMDA7CisKKwkvKiBzZWNvbmQgcGFydCBvZiB3aXBoeSBpbml0ICovCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoYXItPmh3LCBhZGRyKTsKKworCXJldHVybiBiYW5kcyA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgYXI5MTcwX3JlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisKKwkvKiB0cnkgdG8gcmVhZCBFRVBST00sIGluaXQgTUFDIGFkZHIgKi8KKwllcnIgPSBhcjkxNzBfcmVhZF9lZXByb20oYXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhhci0+aHcpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGFyOTE3MF9pbml0X2xlZHMoYXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VucmVnOworCisjaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCisJZXJyID0gYXI5MTcwX3JlZ2lzdGVyX2xlZHMoYXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VucmVnOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworCisJZGV2X2luZm8ocGRldiwgIkF0aGVyb3MgQVI5MTcwIGlzIHJlZ2lzdGVyZWQgYXMgJyVzJ1xuIiwKKwkJIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCisJcmV0dXJuIGVycjsKKworZXJyX3VucmVnOgorCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGFyLT5odyk7CisKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBhcjkxNzBfdW5yZWdpc3RlcihzdHJ1Y3QgYXI5MTcwICphcikKK3sKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKKwlhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKGFyKTsKKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGFyLT5odyk7CisJbXV0ZXhfZGVzdHJveSgmYXItPm11dGV4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9waHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2UyMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3BoeS5jCkBAIC0wLDAgKzEsMTI0MCBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIFBIWSBhbmQgUkYgY29kZQorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisjaW5jbHVkZSAiYXI5MTcwLmgiCisjaW5jbHVkZSAiY21kLmgiCisKK3N0YXRpYyBpbnQgYXI5MTcwX2luaXRfcG93ZXJfY2FsKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweDk5M2MsIDB4N2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4OTkzNCwgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHg5OTM4LCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEyMzQsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTIzOCwgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhMzhjLCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzOTAsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTNjYywgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhM2QwLCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzZDQsIDB4M2YzZjNmM2YpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK3N0cnVjdCBhcjkxNzBfcGh5X2luaXQgeworCXUzMiByZWcsIF81Z2h6XzIwLCBfNWdoel80MCwgXzJnaHpfNDAsIF8yZ2h6XzIwOworfTsKKworc3RhdGljIHN0cnVjdCBhcjkxNzBfcGh5X2luaXQgYXI1NDE2X3BoeV9pbml0W10gPSB7CisJeyAweDFjNTgwMCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKKwl7IDB4MWM1ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCB9LAorCXsgMHgxYzU4MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTgwYywgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgfSwKKwl7IDB4MWM1ODEwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCB9LAorCXsgMHgxYzU4MTQsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIH0sCisJeyAweDFjNTgxOCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgfSwKKwl7IDB4MWM1ODFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIH0sCisJeyAweDFjNTgyNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgfSwKKwl7IDB4MWM1ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCB9LAorCXsgMHgxYzU4MmMsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIH0sCisJeyAweDFjNTgzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCB9LAorCXsgMHgxYzU4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIH0sCisJeyAweDFjNTgzYywgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgfSwKKwl7IDB4MWM1ODQwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCB9LAorCXsgMHgxYzU4NDQsIDB4MTM3MjE2MWUsIDB4MTM3MjFjMWUsIDB4MTM3MjFjMjQsIDB4MTM3MjE2YTQsIH0sCisJeyAweDFjNTg0OCwgMHgwMDFhNmE2NSwgMHgwMDFhNmE2NSwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OCwgfSwKKwl7IDB4MWM1ODRjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCB9LAorCXsgMHgxYzU4NTAsIDB4NmM0OGI0ZTQsIDB4NmM0OGI0ZTQsIDB4NmM0OGIwZTQsIDB4NmM0OGIwZTQsIH0sCisJeyAweDFjNTg1NCwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgfSwKKwl7IDB4MWM1ODU4LCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCB9LAorCXsgMHgxYzU4NWMsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIH0sCisJeyAweDFjNTg2MCwgMHgwMDA0ZGQxMCwgMHgwMDA0ZGQxMCwgMHgwMDA0ZGQyMCwgMHgwMDA0ZGQyMCwgfSwKKwl7IDB4MWM1ODY4LCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCB9LAorCXsgMHgxYzU4NmMsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIH0sCisJeyAweDFjNTkwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTkwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwODk4LCAweDAwMDAwODk4LCB9LAorCXsgMHgxYzU5MTgsIDB4MDAwMDAxMTgsIDB4MDAwMDAyMzAsIDB4MDAwMDAyNjgsIDB4MDAwMDAxMzQsIH0sCisJeyAweDFjNTkxYywgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgfSwKKwl7IDB4MWM1OTIwLCAweDA1MTAwODFjLCAweDA1MTAwODFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAorCXsgMHgxYzU5MjQsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIH0sCisJeyAweDFjNTkyOCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM1OTJjLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCB9LAorCXsgMHgxYzU5MzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCisJeyAweDFjNTkzOCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM1OTNjLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCB9LAorCXsgMHgxYzU5NDQsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIH0sCisJeyAweDFjNTk0OCwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgfSwKKwl7IDB4MWM1OTRjLCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCB9LAorCXsgMHgxYzU5NTQsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIH0sCisJeyAweDFjNTk1OCwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgfSwKKwl7IDB4MWM1OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCB9LAorCXsgMHgxYzU5NjQsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIH0sCisJeyAweDFjNTk3MCwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgfSwKKwl7IDB4MWM1OTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5NzgsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCisJeyAweDFjNTk3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5OTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTlhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWE0LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAorCXsgMHgxYzU5YTgsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIH0sCisJeyAweDFjNTlhYywgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgfSwKKwl7IDB4MWM1OWIwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCB9LAorCXsgMHgxYzU5YjQsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIH0sCisJeyAweDFjNTljMCwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgfSwKKwl7IDB4MWM1OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCB9LAorCXsgMHgxYzU5YzgsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIH0sCisJeyAweDFjNTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgfSwKKwl7IDB4MWM1OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCB9LAorCXsgMHgxYzU5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ZTAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIH0sCisJeyAweDFjNTllNCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgfSwKKwl7IDB4MWM1OWU4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCB9LAorCXsgMHgxYzU5ZWMsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIH0sCisJeyAweDFjNTlmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWZjLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCB9LAorCXsgMHgxYzVhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgfSwKKwl7IDB4MWM1YTA4LCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCB9LAorCXsgMHgxYzVhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDEsIDB4MDAwMDAxNDEsIH0sCisJeyAweDFjNWExMCwgMHgwMDAwMDFlMSwgMHgwMDAwMDFlMSwgMHgwMDAwMDE4MSwgMHgwMDAwMDE4MSwgfSwKKwl7IDB4MWM1YTE0LCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMWMxLCAweDAwMDAwMWMxLCB9LAorCXsgMHgxYzVhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCisJeyAweDFjNWExYywgMHgwMDAwMDE2OCwgMHgwMDAwMDE2OCwgMHgwMDAwMDA0MSwgMHgwMDAwMDA0MSwgfSwKKwl7IDB4MWM1YTIwLCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCB9LAorCXsgMHgxYzVhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIH0sCisJeyAweDFjNWEyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgfSwKKwl7IDB4MWM1YTJjLCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCB9LAorCXsgMHgxYzVhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAxODksIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIH0sCisJeyAweDFjNWEzNCwgMHgwMDAwMDFjOSwgMHgwMDAwMDFjOSwgMHgwMDAwMDE2OSwgMHgwMDAwMDE2OSwgfSwKKwl7IDB4MWM1YTM4LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMWE5LCAweDAwMDAwMWE5LCB9LAorCXsgMHgxYzVhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAwNDksIDB4MDAwMDAxZTksIDB4MDAwMDAxZTksIH0sCisJeyAweDFjNWE0MCwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDAyOSwgMHgwMDAwMDAyOSwgfSwKKwl7IDB4MWM1YTQ0LCAweDAwMDAwMTcwLCAweDAwMDAwMTcwLCAweDAwMDAwMDY5LCAweDAwMDAwMDY5LCB9LAorCXsgMHgxYzVhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIH0sCisJeyAweDFjNWE0YywgMHgwMDAwMDFmMCwgMHgwMDAwMDFmMCwgMHgwMDAwMDFkMCwgMHgwMDAwMDFkMCwgfSwKKwl7IDB4MWM1YTUwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCB9LAorCXsgMHgxYzVhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTAsIDB4MDAwMDAwNTAsIH0sCisJeyAweDFjNWE1OCwgMHgwMDAwMDE5MSwgMHgwMDAwMDE5MSwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgfSwKKwl7IDB4MWM1YTVjLCAweDAwMDAwMWQxLCAweDAwMDAwMWQxLCAweDAwMDAwMTUxLCAweDAwMDAwMTUxLCB9LAorCXsgMHgxYzVhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTEsIDB4MDAwMDAxOTEsIH0sCisJeyAweDFjNWE2NCwgMHgwMDAwMDA1MSwgMHgwMDAwMDA1MSwgMHgwMDAwMDFkMSwgMHgwMDAwMDFkMSwgfSwKKwl7IDB4MWM1YTY4LCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCB9LAorCXsgMHgxYzVhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTEsIDB4MDAwMDAwNTEsIH0sCisJeyAweDFjNWE3MCwgMHgwMDAwMDFmOCwgMHgwMDAwMDFmOCwgMHgwMDAwMDE5OCwgMHgwMDAwMDE5OCwgfSwKKwl7IDB4MWM1YTc0LCAweDAwMDAwMDM4LCAweDAwMDAwMDM4LCAweDAwMDAwMWQ4LCAweDAwMDAwMWQ4LCB9LAorCXsgMHgxYzVhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIH0sCisJeyAweDFjNWE3YywgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OSwgMHgwMDAwMDA1OCwgMHgwMDAwMDA1OCwgfSwKKwl7IDB4MWM1YTgwLCAweDAwMDAwMWQ5LCAweDAwMDAwMWQ5LCAweDAwMDAwMDk4LCAweDAwMDAwMDk4LCB9LAorCXsgMHgxYzVhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAxNTksIDB4MDAwMDAxNTksIH0sCisJeyAweDFjNWE4OCwgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OSwgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OSwgfSwKKwl7IDB4MWM1YThjLCAweDAwMDAwMDk5LCAweDAwMDAwMDk5LCAweDAwMDAwMWQ5LCAweDAwMDAwMWQ5LCB9LAorCXsgMHgxYzVhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIH0sCisJeyAweDFjNWE5NCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OSwgfSwKKwl7IDB4MWM1YTk4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMDk5LCAweDAwMDAwMDk5LCB9LAorCXsgMHgxYzVhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIH0sCisJeyAweDFjNWFhMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWE0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFhYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWIwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFiOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWJjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFjNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWM4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFkMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWQ0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFkYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWUwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFlOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWVjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFmNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWY4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YjA0LCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCB9LAorCXsgMHgxYzViMDgsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIH0sCisJeyAweDFjNWIwYywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgfSwKKwl7IDB4MWM1YjEwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCB9LAorCXsgMHgxYzViMTQsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIH0sCisJeyAweDFjNWIxOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgfSwKKwl7IDB4MWM1YjFjLCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCB9LAorCXsgMHgxYzViMjAsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIH0sCisJeyAweDFjNWIyNCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgfSwKKwl7IDB4MWM1YjI4LCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCB9LAorCXsgMHgxYzViMmMsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIH0sCisJeyAweDFjNWIzMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgfSwKKwl7IDB4MWM1YjM0LCAweDAwMDAwMDExLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCB9LAorCXsgMHgxYzViMzgsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIH0sCisJeyAweDFjNWIzYywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgfSwKKwl7IDB4MWM1YjQwLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCB9LAorCXsgMHgxYzViNDQsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIH0sCisJeyAweDFjNWI0OCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgfSwKKwl7IDB4MWM1YjRjLCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCB9LAorCXsgMHgxYzViNTAsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIH0sCisJeyAweDFjNWI1NCwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgfSwKKwl7IDB4MWM1YjU4LCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCB9LAorCXsgMHgxYzViNWMsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIH0sCisJeyAweDFjNWI2MCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgfSwKKwl7IDB4MWM1YjY0LCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCB9LAorCXsgMHgxYzViNjgsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIH0sCisJeyAweDFjNWI2YywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgfSwKKwl7IDB4MWM1YjcwLCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCB9LAorCXsgMHgxYzViNzQsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIH0sCisJeyAweDFjNWI3OCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgfSwKKwl7IDB4MWM1YjdjLCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCB9LAorCXsgMHgxYzViODAsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIH0sCisJeyAweDFjNWI4NCwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgfSwKKwl7IDB4MWM1Yjg4LCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCB9LAorCXsgMHgxYzViOGMsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIH0sCisJeyAweDFjNWI5MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgfSwKKwl7IDB4MWM1Yjk0LCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCB9LAorCXsgMHgxYzViOTgsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIH0sCisJeyAweDFjNWI5YywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgfSwKKwl7IDB4MWM1YmEwLCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCB9LAorCXsgMHgxYzViYTQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJhOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmFjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYjAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJiNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmI4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYmMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJjMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmM0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYzgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJjYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmQwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZDQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJkOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmRjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZTAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJlNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmU4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZWMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJmMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmY0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZjgsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIH0sCisJeyAweDFjNWJmYywgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgfSwKKwl7IDB4MWM1YzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWNmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1Y2Y0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWNmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MjAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCB9LAorCXsgMHgxYzYyMDQsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIH0sCisJeyAweDFjNjIwOCwgMHhkNmJlNDc4OCwgMHhkNmJlNDc4OCwgMHhkMDNlNDc4OCwgMHhkMDNlNDc4OCwgfSwKKwl7IDB4MWM2MjBjLCAweDAxMmU4MTYwLCAweDAxMmU4MTYwLCAweDAxMmE4MTYwLCAweDAxMmE4MTYwLCB9LAorCXsgMHgxYzYyMTAsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIH0sCisJeyAweDFjNjIxNCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgfSwKKwl7IDB4MWM2MjE4LCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCB9LAorCXsgMHgxYzYyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIH0sCisJeyAweDFjNjIyMCwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgfSwKKwl7IDB4MWM2MjI0LCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCB9LAorCXsgMHgxYzYyMjgsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIH0sCisJeyAweDFjNjIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MjMwLCAweDAwMDAwMTA4LCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCB9LAorCXsgMHgxYzYyMzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCisJeyAweDFjNjIzOCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2MjNjLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCB9LAorCXsgMHgxYzYyNDAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIH0sCisJeyAweDFjNjI0NCwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgfSwKKwl7IDB4MWM2MjQ4LCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCB9LAorCXsgMHgxYzYyNGMsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCisJeyAweDFjNjI1MCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgfSwKKwl7IDB4MWM2MjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyNTgsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIH0sCisJeyAweDFjNjI1YywgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgfSwKKwl7IDB4MWM2MjYwLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCB9LAorCXsgMHgxYzYyNjQsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIH0sCisJeyAweDFjNjI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAorCXsgMHgxYzYyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIH0sCisJeyAweDFjNjI3OCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgfSwKKwl7IDB4MWM2MjdjLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCB9LAorCXsgMHgxYzYzMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIH0sCisJeyAweDFjNjMwNCwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMiwgfSwKKwl7IDB4MWM2MzA4LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2LCB9LAorCXsgMHgxYzYzMGMsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIsIH0sCisJeyAweDFjNjMxMCwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYiwgfSwKKwl7IDB4MWM2MzE0LCAweDdhNGY2ZTFiLCAweDdhNGY2ZTFiLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhLCB9LAorCXsgMHgxYzYzMTgsIDB4OGM1YjdlNWEsIDB4OGM1YjdlNWEsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YsIH0sCisJeyAweDFjNjMxYywgMHg5ZDBmOTZjZiwgMHg5ZDBmOTZjZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0ZiwgfSwKKwl7IDB4MWM2MzIwLCAweGI1MWZhNjlmLCAweGI1MWZhNjlmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmLCB9LAorCXsgMHgxYzYzMjQsIDB4Y2IzZmJkMDcsIDB4Y2IzZmJjYmYsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YsIH0sCisJeyAweDFjNjMyOCwgMHgwMDAwZDdiZiwgMHgwMDAwZDdiZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzNDgsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIH0sCisJeyAweDFjNjM0YywgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgfSwKKwl7IDB4MWM2MzUwLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCB9LAorCXsgMHgxYzYzNTQsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIH0sCisJeyAweDFjNjM1OCwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgfSwKKwl7IDB4MWM2Mzg4LCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCB9LAorCXsgMHgxYzYzOGMsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCisJeyAweDFjNjM5MCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2Mzk0LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAorCXsgMHgxYzYzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIH0sCisJeyAweDFjNjM5YywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKKwl7IDB4MWM2M2EwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2FjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2I4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2M0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNjYywgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2M2QwLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYzZDQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCisJeyAweDFjNjNkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2RjLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAorCXsgMHgxYzYzZTAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIH0sCisJeyAweDFjNjg0OCwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2OCwgMHgwMDE4MGE2OCwgfSwKKwl7IDB4MWM2OTIwLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAorCXsgMHgxYzY5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCisJeyAweDFjNzIwYywgMHgwMTJlODE2MCwgMHgwMTJlODE2MCwgMHgwMTJhODE2MCwgMHgwMTJhODE2MCwgfSwKKwl7IDB4MWM3MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAorCXsgMHgxYzc4NDgsIDB4MDAxODBhNjUsIDB4MDAxODBhNjUsIDB4MDAxODBhNjgsIDB4MDAxODBhNjgsIH0sCisJeyAweDFjNzkyMCwgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgfSwKKwl7IDB4MWM3OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCB9LAorCXsgMHgxYzgyMGMsIDB4MDEyZTgxNjAsIDB4MDEyZTgxNjAsIDB4MDEyYTgxNjAsIDB4MDEyYTgxNjAsIH0sCisJeyAweDFjODI2YywgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgfSwKKy8qCXsgMHgxYzg4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIH0sICovCisJeyAweDFjODg2NCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgfSwKKwl7IDB4MWM4OTVjLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCB9LAorCXsgMHgxYzg5NjgsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIH0sCisJeyAweDFjODliYywgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgfSwKKwl7IDB4MWM5MjcwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCB9LAorCXsgMHgxYzkzNWMsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIH0sCisJeyAweDFjOTM2MCwgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgfSwKKwl7IDB4MWM5MzY0LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCB9LAorCXsgMHgxYzkzNjgsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIH0sCisJeyAweDFjOTM2YywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgfSwKKwl7IDB4MWM5MzcwLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCB9LAorCXsgMHgxYzkzNzQsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIH0sCisJeyAweDFjOTM3OCwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgfSwKKwl7IDB4MWM5MzdjLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCB9LAorCXsgMHgxYzkzODAsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIH0sCisJeyAweDFjOTM4NCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgfQorfTsKKworaW50IGFyOTE3MF9pbml0X3BoeShzdHJ1Y3QgYXI5MTcwICphciwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWludCBpLCBlcnI7CisJdTMyIHZhbDsKKwlib29sIGlzXzJnaHogPSBiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJYm9vbCBpc180MG1oeiA9IGZhbHNlOyAvKiBYWFg6IGZvciBub3cgKi8KKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcjU0MTZfcGh5X2luaXQpOyBpKyspIHsKKwkJaWYgKGlzXzQwbWh6KSB7CisJCQlpZiAoaXNfMmdoeikKKwkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfNDA7CisJCQllbHNlCisJCQkJdmFsID0gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzQwOworCQl9IGVsc2UgeworCQkJaWYgKGlzXzJnaHopCisJCQkJdmFsID0gYXI1NDE2X3BoeV9pbml0W2ldLl8yZ2h6XzIwOworCQkJZWxzZQorCQkJCXZhbCA9IGFyNTQxNl9waHlfaW5pdFtpXS5fNWdoel8yMDsKKwkJfQorCisJCWFyOTE3MF9yZWd3cml0ZShhcjU0MTZfcGh5X2luaXRbaV0ucmVnLCB2YWwpOworCX0KKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKwllcnIgPSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFhYWDogdXNlIEVFUFJPTSBkYXRhIGhlcmUhICovCisKKwllcnIgPSBhcjkxNzBfaW5pdF9wb3dlcl9jYWwoYXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBYWFg6IHJlbW92ZSBtYWdpYyEgKi8KKwlpZiAoaXNfMmdoeikKKwkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxZDQwMTQsIDB4NTE2Myk7CisJZWxzZQorCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAxNCwgMHg1MTQzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0cnVjdCBhcjkxNzBfcmZfaW5pdCB7CisJdTMyIHJlZywgXzVnaHosIF8yZ2h6OworfTsKKworc3RhdGljIHN0cnVjdCBhcjkxNzBfcmZfaW5pdCBhcjkxNzBfcmZfaW5pdFtdID0geworICAgICAvKiBiYW5rIDAgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MWU1Nzk1ZTUsICAweDFlNTc5NWU1fSwKKyAgICAgeyAweDFjNThlMCwgIDB4MDIwMDgwMjAsICAweDAyMDA4MDIwfSwKKyAgICAgLyogYmFuayAxICovCisgICAgIHsgMHgxYzU4YjAsICAweDAyMTA4NDIxLCAgMHgwMjEwODQyMX0sCisgICAgIHsgMHgxYzU4ZWMsICAweDAwMDAwMDA4LCAgMHgwMDAwMDAwOH0sCisgICAgIC8qIGJhbmsgMiAqLworICAgICB7IDB4MWM1OGIwLCAgMHgwZTczZmYxNywgIDB4MGU3M2ZmMTd9LAorICAgICB7IDB4MWM1OGUwLCAgMHgwMDAwMDQyMCwgIDB4MDAwMDA0MjB9LAorICAgICAvKiBiYW5rIDMgKi8KKyAgICAgeyAweDFjNThmMCwgIDB4MDE0MDAwMTgsICAweDAxYzAwMDE4fSwKKyAgICAgLyogYmFuayA0ICovCisgICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMWExLCAgMHgwMDAwMDFhMX0sCisgICAgIHsgMHgxYzU4ZTgsICAweDAwMDAwMDAxLCAgMHgwMDAwMDAwMX0sCisgICAgIC8qIGJhbmsgNSAqLworICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxMywgIDB4MDAwMDAwMTN9LAorICAgICB7IDB4MWM1OGU0LCAgMHgwMDAwMDAwMiwgIDB4MDAwMDAwMDJ9LAorICAgICAvKiBiYW5rIDYgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDQwMDAsICAweDAwMDA0MDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDZjMDAsICAweDAwMDA2YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDJjMDAsICAweDAwMDAyYzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDQ4MDAsICAweDAwMDA0ODAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDQwMDAsICAweDAwMDA0MDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDYwMDAsICAweDAwMDA2MDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDEwMDAsICAweDAwMDAxMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDQwMDAsICAweDAwMDA0MDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwODdjMDAsICAweDAwMDg3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDU0MDAsICAweDAwMDA1NDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDBjMDAsICAweDAwMDAwYzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDE4MDAsICAweDAwMDAxODAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDZjMDAsICAweDAwMDA2YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDZjMDAsICAweDAwMDA2YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDJjMDAsICAweDAwMDAyYzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDNjMDAsICAweDAwMDAzYzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDM4MDAsICAweDAwMDAzODAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDFjMDAsICAweDAwMDAxYzAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDA4MDAsICAweDAwMDAwODAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDA0MDgsICAweDAwMDAwNDA4fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDRjMTUsICAweDAwMDA0YzE1fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDQxODgsICAweDAwMDA0MTg4fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDIwMWUsICAweDAwMDAyMDFlfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMTA0MDgsICAweDAwMDEwNDA4fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDA4MDEsICAweDAwMDAwODAxfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDBjMDgsICAweDAwMDAwYzA4fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDE4MWUsICAweDAwMDAxODFlfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDEwMTYsICAweDAwMDAxMDE2fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDI4MDAsICAweDAwMDAyODAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDQwMTAsICAweDAwMDA0MDEwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDA4MWMsICAweDAwMDAwODFjfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAxMTUsICAweDAwMDAwMTE1fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMTUsICAweDAwMDAwMDE1fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwNjYsICAweDAwMDAwMDY2fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMWMsICAweDAwMDAwMDFjfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDQsICAweDAwMDAwMDA0fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMTUsICAweDAwMDAwMDE1fSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMWYsICAweDAwMDAwMDFmfSwKKyAgICAgeyAweDFjNThlMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwNDAwfSwKKyAgICAgLyogYmFuayA3ICovCisgICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMGEwLCAgMHgwMDAwMDBhMH0sCisgICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMDAwLCAgMHgwMDAwMDAwMH0sCisgICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMDQwLCAgMHgwMDAwMDA0MH0sCisgICAgIHsgMHgxYzU4ZjAsICAweDAwMDAwMDFjLCAgMHgwMDAwMDAxY30sCit9OworCitzdGF0aWMgaW50IGFyOTE3MF9pbml0X3JmX2JhbmtzXzBfNyhzdHJ1Y3QgYXI5MTcwICphciwgYm9vbCBiYW5kNWdoeikKK3sKKwlpbnQgZXJyLCBpOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyOTE3MF9yZl9pbml0KTsgaSsrKQorCQlhcjkxNzBfcmVnd3JpdGUoYXI5MTcwX3JmX2luaXRbaV0ucmVnLAorCQkJCWJhbmQ1Z2h6ID8gYXI5MTcwX3JmX2luaXRbaV0uXzVnaHoKKwkJCQkJIDogYXI5MTcwX3JmX2luaXRbaV0uXzJnaHopOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZiBpbml0IGZhaWxlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6LAorCQkJCSAgICB1MzIgZnJlcSwgZW51bSBhcjkxNzBfYncgYncpCit7CisJaW50IGVycjsKKwl1MzIgZDAsIGQxLCB0ZDAsIHRkMSwgZmQwLCBmZDE7CisJdTggY2hhbnNlbDsKKwl1OCByZWZzZWwwID0gMSwgcmVmc2VsMSA9IDA7CisJdTggbGZfc3ludGggPSAwOworCisJc3dpdGNoIChidykgeworCWNhc2UgQVI5MTcwX0JXXzQwX0FCT1ZFOgorCQlmcmVxICs9IDEwOworCQlicmVhazsKKwljYXNlIEFSOTE3MF9CV180MF9CRUxPVzoKKwkJZnJlcSAtPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBBUjkxNzBfQldfMjA6CisJCWJyZWFrOworCWNhc2UgX19BUjkxNzBfTlVNX0JXOgorCQlCVUcoKTsKKwl9CisKKwlpZiAoYmFuZDVnaHopIHsKKwkJaWYgKGZyZXEgJSAxMCkgeworCQkJY2hhbnNlbCA9IChmcmVxIC0gNDgwMCkgLyA1OworCQl9IGVsc2UgeworCQkJY2hhbnNlbCA9ICgoZnJlcSAtIDQ4MDApIC8gMTApICogMjsKKwkJCXJlZnNlbDAgPSAwOworCQkJcmVmc2VsMSA9IDE7CisJCX0KKwkJY2hhbnNlbCA9IGJ5dGVfcmV2X3RhYmxlW2NoYW5zZWxdOworCX0gZWxzZSB7CisJCWlmIChmcmVxID09IDI0ODQpIHsKKwkJCWNoYW5zZWwgPSAxMCArIChmcmVxIC0gMjI3NCkgLyA1OworCQkJbGZfc3ludGggPSAxOworCQl9IGVsc2UKKwkJCWNoYW5zZWwgPSAxNiArIChmcmVxIC0gMjI3MikgLyA1OworCQljaGFuc2VsICo9IDQ7CisJCWNoYW5zZWwgPSBieXRlX3Jldl90YWJsZVtjaGFuc2VsXTsKKwl9CisKKwlkMSA9CWNoYW5zZWw7CisJZDAgPQkweDIxIHwKKwkJcmVmc2VsMCA8PCAzIHwKKwkJcmVmc2VsMSA8PCAyIHwKKwkJbGZfc3ludGggPDwgMTsKKwl0ZDAgPQlkMCAmIDB4MWY7CisJdGQxID0JZDEgJiAweDFmOworCWZkMCA9CXRkMSA8PCA1IHwgdGQwOworCisJdGQwID0JKGQwID4+IDUpICYgMHg3OworCXRkMSA9CShkMSA+PiA1KSAmIDB4NzsKKwlmZDEgPQl0ZDEgPDwgNSB8IHRkMDsKKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4YjAsIGZkMCk7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM1OGU4LCBmZDEpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbXNsZWVwKDEwKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyB7CisJdTggY29lZmZfZXhwOworCXUxNiBjb2VmZl9tYW47CisJdTggY29lZmZfZXhwX3NoZ2k7CisJdTE2IGNvZWZmX21hbl9zaGdpOworfTsKKworc3RydWN0IGFyOTE3MF9waHlfZnJlcV9lbnRyeSB7CisJdTE2IGZyZXE7CisJc3RydWN0IGFyOTE3MF9waHlfZnJlcV9wYXJhbXMgcGFyYW1zW19fQVI5MTcwX05VTV9CV107Cit9OworCisvKiBOQjogbXVzdCBiZSBpbiBzeW5jIHdpdGggY2hhbm5lbCB0YWJsZXMgaW4gbWFpbiEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX2VudHJ5IGFyOTE3MF9waHlfZnJlcV9wYXJhbXNbXSA9IHsKKy8qCisgKglmcmVxLAorICoJCTIwTUh6LAorICoJCTQwTUh6IChiZWxvdyksCisgKgkJNDBNaHogKGFib3ZlKSwKKyAqLworCXsgMjQxMiwgeworCQl7IDMsIDIxNzM3LCAzLCAxOTU2MywgfSwKKwkJeyAzLCAyMTgyNywgMywgMTk2NDQsIH0sCisJCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAorCX0gfSwKKwl7IDI0MTcsIHsKKwkJeyAzLCAyMTY5MiwgMywgMTk1MjMsIH0sCisJCXsgMywgMjE3ODIsIDMsIDE5NjA0LCB9LAorCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKKwl9IH0sCisJeyAyNDIyLCB7CisJCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAorCQl7IDMsIDIxNzM3LCAzLCAxOTU2MywgfSwKKwkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCisJfSB9LAorCXsgMjQyNywgeworCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKKwkJeyAzLCAyMTY5MiwgMywgMTk1MjMsIH0sCisJCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAorCX0gfSwKKwl7IDI0MzIsIHsKKwkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCisJCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAorCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKKwl9IH0sCisJeyAyNDM3LCB7CisJCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAorCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKKwkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCisJfSB9LAorCXsgMjQ0MiwgeworCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKKwkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCisJCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAorCX0gfSwKKwl7IDI0NDcsIHsKKwkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCisJCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAorCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKKwl9IH0sCisJeyAyNDUyLCB7CisJCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAorCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKKwkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCisJfSB9LAorCXsgMjQ1NywgeworCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKKwkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCisJCXsgMywgMjEyNTIsIDMsIDE5MTI3LCB9LAorCX0gfSwKKwl7IDI0NjIsIHsKKwkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCisJCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAorCQl7IDMsIDIxMjA5LCAzLCAxOTA4OCwgfSwKKwl9IH0sCisJeyAyNDY3LCB7CisJCXsgMywgMjEyNTIsIDMsIDE5MTI3LCB9LAorCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKKwkJeyAzLCAyMTE2NiwgMywgMTkwNTAsIH0sCisJfSB9LAorCXsgMjQ3MiwgeworCQl7IDMsIDIxMjA5LCAzLCAxOTA4OCwgfSwKKwkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCisJCXsgMywgMjExMjQsIDMsIDE5MDExLCB9LAorCX0gfSwKKwl7IDI0ODQsIHsKKwkJeyAzLCAyMTEwNywgMywgMTg5OTYsIH0sCisJCXsgMywgMjExOTIsIDMsIDE5MDczLCB9LAorCQl7IDMsIDIxMDIyLCAzLCAxODkyMCwgfSwKKwl9IH0sCisJeyA0OTIwLCB7CisJCXsgNCwgMjEzMTMsIDQsIDE5MTgxLCB9LAorCQl7IDQsIDIxMzU2LCA0LCAxOTIyMCwgfSwKKwkJeyA0LCAyMTI2OSwgNCwgMTkxNDIsIH0sCisJfSB9LAorCXsgNDk0MCwgeworCQl7IDQsIDIxMjI2LCA0LCAxOTEwNCwgfSwKKwkJeyA0LCAyMTI2OSwgNCwgMTkxNDIsIH0sCisJCXsgNCwgMjExODMsIDQsIDE5MDY1LCB9LAorCX0gfSwKKwl7IDQ5NjAsIHsKKwkJeyA0LCAyMTE0MSwgNCwgMTkwMjcsIH0sCisJCXsgNCwgMjExODMsIDQsIDE5MDY1LCB9LAorCQl7IDQsIDIxMDk4LCA0LCAxODk4OCwgfSwKKwl9IH0sCisJeyA0OTgwLCB7CisJCXsgNCwgMjEwNTYsIDQsIDE4OTUwLCB9LAorCQl7IDQsIDIxMDk4LCA0LCAxODk4OCwgfSwKKwkJeyA0LCAyMTAxNCwgNCwgMTg5MTIsIH0sCisJfSB9LAorCXsgNTA0MCwgeworCQl7IDQsIDIwODA1LCA0LCAxODcyNSwgfSwKKwkJeyA0LCAyMDg0NiwgNCwgMTg3NjIsIH0sCisJCXsgNCwgMjA3NjQsIDQsIDE4Njg3LCB9LAorCX0gfSwKKwl7IDUwNjAsIHsKKwkJeyA0LCAyMDcyMywgNCwgMTg2NTEsIH0sCisJCXsgNCwgMjA3NjQsIDQsIDE4Njg3LCB9LAorCQl7IDQsIDIwNjgyLCA0LCAxODYxNCwgfSwKKwl9IH0sCisJeyA1MDgwLCB7CisJCXsgNCwgMjA2NDEsIDQsIDE4NTc3LCB9LAorCQl7IDQsIDIwNjgyLCA0LCAxODYxNCwgfSwKKwkJeyA0LCAyMDYwMSwgNCwgMTg1NDEsIH0sCisJfSB9LAorCXsgNTE4MCwgeworCQl7IDQsIDIwMjQzLCA0LCAxODIxOSwgfSwKKwkJeyA0LCAyMDI4MiwgNCwgMTgyNTQsIH0sCisJCXsgNCwgMjAyMDQsIDQsIDE4MTgzLCB9LAorCX0gfSwKKwl7IDUyMDAsIHsKKwkJeyA0LCAyMDE2NSwgNCwgMTgxNDgsIH0sCisJCXsgNCwgMjAyMDQsIDQsIDE4MTgzLCB9LAorCQl7IDQsIDIwMTI2LCA0LCAxODExNCwgfSwKKwl9IH0sCisJeyA1MjIwLCB7CisJCXsgNCwgMjAwODgsIDQsIDE4MDc5LCB9LAorCQl7IDQsIDIwMTI2LCA0LCAxODExNCwgfSwKKwkJeyA0LCAyMDA0OSwgNCwgMTgwNDQsIH0sCisJfSB9LAorCXsgNTI0MCwgeworCQl7IDQsIDIwMDExLCA0LCAxODAxMCwgfSwKKwkJeyA0LCAyMDA0OSwgNCwgMTgwNDQsIH0sCisJCXsgNCwgMTk5NzMsIDQsIDE3OTc2LCB9LAorCX0gfSwKKwl7IDUyNjAsIHsKKwkJeyA0LCAxOTkzNSwgNCwgMTc5NDEsIH0sCisJCXsgNCwgMTk5NzMsIDQsIDE3OTc2LCB9LAorCQl7IDQsIDE5ODk3LCA0LCAxNzkwNywgfSwKKwl9IH0sCisJeyA1MjgwLCB7CisJCXsgNCwgMTk4NTksIDQsIDE3ODczLCB9LAorCQl7IDQsIDE5ODk3LCA0LCAxNzkwNywgfSwKKwkJeyA0LCAxOTgyMiwgNCwgMTc4NDAsIH0sCisJfSB9LAorCXsgNTMwMCwgeworCQl7IDQsIDE5Nzg0LCA0LCAxNzgwNiwgfSwKKwkJeyA0LCAxOTgyMiwgNCwgMTc4NDAsIH0sCisJCXsgNCwgMTk3NDcsIDQsIDE3NzcyLCB9LAorCX0gfSwKKwl7IDUzMjAsIHsKKwkJeyA0LCAxOTcxMCwgNCwgMTc3MzksIH0sCisJCXsgNCwgMTk3NDcsIDQsIDE3NzcyLCB9LAorCQl7IDQsIDE5NjczLCA0LCAxNzcwNiwgfSwKKwl9IH0sCisJeyA1NTAwLCB7CisJCXsgNCwgMTkwNjUsIDQsIDE3MTU5LCB9LAorCQl7IDQsIDE5MTAwLCA0LCAxNzE5MCwgfSwKKwkJeyA0LCAxOTAzMCwgNCwgMTcxMjcsIH0sCisJfSB9LAorCXsgNTUyMCwgeworCQl7IDQsIDE4OTk2LCA0LCAxNzA5NiwgfSwKKwkJeyA0LCAxOTAzMCwgNCwgMTcxMjcsIH0sCisJCXsgNCwgMTg5NjIsIDQsIDE3MDY1LCB9LAorCX0gfSwKKwl7IDU1NDAsIHsKKwkJeyA0LCAxODkyNywgNCwgMTcwMzUsIH0sCisJCXsgNCwgMTg5NjIsIDQsIDE3MDY1LCB9LAorCQl7IDQsIDE4ODkzLCA0LCAxNzAwNCwgfSwKKwl9IH0sCisJeyA1NTYwLCB7CisJCXsgNCwgMTg4NTksIDQsIDE2OTczLCB9LAorCQl7IDQsIDE4ODkzLCA0LCAxNzAwNCwgfSwKKwkJeyA0LCAxODgyNSwgNCwgMTY5NDMsIH0sCisJfSB9LAorCXsgNTU4MCwgeworCQl7IDQsIDE4NzkyLCA0LCAxNjkxMywgfSwKKwkJeyA0LCAxODgyNSwgNCwgMTY5NDMsIH0sCisJCXsgNCwgMTg3NTgsIDQsIDE2ODgyLCB9LAorCX0gfSwKKwl7IDU2MDAsIHsKKwkJeyA0LCAxODcyNSwgNCwgMTY4NTIsIH0sCisJCXsgNCwgMTg3NTgsIDQsIDE2ODgyLCB9LAorCQl7IDQsIDE4NjkxLCA0LCAxNjgyMiwgfSwKKwl9IH0sCisJeyA1NjIwLCB7CisJCXsgNCwgMTg2NTgsIDQsIDE2NzkyLCB9LAorCQl7IDQsIDE4NjkxLCA0LCAxNjgyMiwgfSwKKwkJeyA0LCAxODYyNSwgNCwgMTY3NjIsIH0sCisJfSB9LAorCXsgNTY0MCwgeworCQl7IDQsIDE4NTkyLCA0LCAxNjczMywgfSwKKwkJeyA0LCAxODYyNSwgNCwgMTY3NjIsIH0sCisJCXsgNCwgMTg1NTksIDQsIDE2NzAzLCB9LAorCX0gfSwKKwl7IDU2NjAsIHsKKwkJeyA0LCAxODUyNiwgNCwgMTY2NzMsIH0sCisJCXsgNCwgMTg1NTksIDQsIDE2NzAzLCB9LAorCQl7IDQsIDE4NDkzLCA0LCAxNjY0NCwgfSwKKwl9IH0sCisJeyA1NjgwLCB7CisJCXsgNCwgMTg0NjEsIDQsIDE2NjE1LCB9LAorCQl7IDQsIDE4NDkzLCA0LCAxNjY0NCwgfSwKKwkJeyA0LCAxODQyOCwgNCwgMTY1ODYsIH0sCisJfSB9LAorCXsgNTcwMCwgeworCQl7IDQsIDE4Mzk2LCA0LCAxNjU1NiwgfSwKKwkJeyA0LCAxODQyOCwgNCwgMTY1ODYsIH0sCisJCXsgNCwgMTgzNjQsIDQsIDE2NTI3LCB9LAorCX0gfSwKKwl7IDU3NDUsIHsKKwkJeyA0LCAxODI1MiwgNCwgMTY0MjcsIH0sCisJCXsgNCwgMTgyODQsIDQsIDE2NDU1LCB9LAorCQl7IDQsIDE4MjIwLCA0LCAxNjM5OCwgfSwKKwl9IH0sCisJeyA1NzY1LCB7CisJCXsgNCwgMTgxODksIDUsIDMyNzQwLCB9LAorCQl7IDQsIDE4MjIwLCA0LCAxNjM5OCwgfSwKKwkJeyA0LCAxODE1NywgNSwgMzI2ODMsIH0sCisJfSB9LAorCXsgNTc4NSwgeworCQl7IDQsIDE4MTI2LCA1LCAzMjYyNiwgfSwKKwkJeyA0LCAxODE1NywgNSwgMzI2ODMsIH0sCisJCXsgNCwgMTgwOTQsIDUsIDMyNTcwLCB9LAorCX0gfSwKKwl7IDU4MDUsIHsKKwkJeyA0LCAxODA2MywgNSwgMzI1MTQsIH0sCisJCXsgNCwgMTgwOTQsIDUsIDMyNTcwLCB9LAorCQl7IDQsIDE4MDMyLCA1LCAzMjQ1OCwgfSwKKwl9IH0sCisJeyA1ODI1LCB7CisJCXsgNCwgMTgwMDEsIDUsIDMyNDAyLCB9LAorCQl7IDQsIDE4MDMyLCA1LCAzMjQ1OCwgfSwKKwkJeyA0LCAxNzk3MCwgNSwgMzIzNDcsIH0sCisJfSB9LAorCXsgNTE3MCwgeworCQl7IDQsIDIwMjgyLCA0LCAxODI1NCwgfSwKKwkJeyA0LCAyMDMyMSwgNCwgMTgyODksIH0sCisJCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAorCX0gfSwKKwl7IDUxOTAsIHsKKwkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCisJCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAorCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKKwl9IH0sCisJeyA1MjEwLCB7CisJCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAorCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKKwkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCisJfSB9LAorCXsgNTIzMCwgeworCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKKwkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCisJCXsgNCwgMjAwMTEsIDQsIDE4MDEwLCB9LAorCX0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqCithcjkxNzBfZ2V0X2h3X2R5bl9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJIGVudW0gYXI5MTcwX2J3IGJ3KQoreworCXVuc2lnbmVkIGludCBjaGFuaWR4ID0gMDsKKwl1MTYgZnJlcSA9IDI0MTI7CisKKwlpZiAoY2hhbm5lbCkgeworCQljaGFuaWR4ID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJCWZyZXEgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKKwl9CisKKwlCVUdfT04oY2hhbmlkeCA+PSBBUlJBWV9TSVpFKGFyOTE3MF9waHlfZnJlcV9wYXJhbXMpKTsKKworCUJVSUxEX0JVR19PTihfX0FSOTE3MF9OVU1fQlcgIT0gMyk7CisKKwlXQVJOX09OKGFyOTE3MF9waHlfZnJlcV9wYXJhbXNbY2hhbmlkeF0uZnJlcSAhPSBmcmVxKTsKKworCXJldHVybiAmYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tjaGFuaWR4XS5wYXJhbXNbYnddOworfQorCisKK2ludCBhcjkxNzBfaW5pdF9yZihzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwljb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqZnJlcXBhcjsKKwlfX2xlMzIgY21kWzddOworCWludCBlcnI7CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rc18wXzcoYXIsIGZhbHNlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKGFyLCBmYWxzZSwgMjQxMiwgQVI5MTcwX0JXXzIwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZnJlcXBhciA9IGFyOTE3MF9nZXRfaHdfZHluX3BhcmFtcyhOVUxMLCBBUjkxNzBfQldfMjApOworCisJY21kWzBdID0gY3B1X3RvX2xlMzIoMjQxMiAqIDEwMDApOworCWNtZFsxXSA9IGNwdV90b19sZTMyKDApOworCWNtZFsyXSA9IGNwdV90b19sZTMyKDEpOworCWNtZFszXSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX2V4cCk7CisJY21kWzRdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuKTsKKwljbWRbNV0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHBfc2hnaSk7CisJY21kWzZdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuX3NoZ2kpOworCisJLyogUkZfSU5JVCBlY2hvZXMgdGhlIGNvbW1hbmQgYmFjayB0byB1cyAqLworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SRl9JTklULAorCQkJICAgc2l6ZW9mKGNtZCksICh1OCAqKWNtZCwKKwkJCSAgIHNpemVvZihjbWQpLCAodTggKiljbWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltc2xlZXAoMTAwMCk7CisKKwlyZXR1cm4gYXI5MTcwX2VjaG9fdGVzdChhciwgMHhhYWJiY2NkZCk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2ZpbmRfZnJlcV9pZHgoaW50IG5mcmVxcywgdTggKmZyZXFzLCB1OCBmKQoreworCWludCBpZHggPSBuZnJlcXMgLSAyOworCisJd2hpbGUgKGlkeCA+PSAwKSB7CisJCWlmIChmID49IGZyZXFzW2lkeF0pCisJCQlyZXR1cm4gaWR4OworCQlpZHgtLTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHMzMiBhcjkxNzBfaW50ZXJwb2xhdGVfczMyKHMzMiB4LCBzMzIgeDEsIHMzMiB5MSwgczMyIHgyLCBzMzIgeTIpCit7CisJLyogbm90aGluZyB0byBpbnRlcnBvbGF0ZSwgaXQncyBob3Jpem9udGFsICovCisJaWYgKHkyID09IHkxKQorCQlyZXR1cm4geTE7CisKKwkvKiBjaGVjayBpZiB3ZSBoaXQgb25lIG9mIHRoZSBlZGdlcyAqLworCWlmICh4ID09IHgxKQorCQlyZXR1cm4geTE7CisJaWYgKHggPT0geDIpCisJCXJldHVybiB5MjsKKworCS8qIHgxID09IHgyIGlzIGJhZCwgaG9wZWZ1bGx5ID09IHggKi8KKwlpZiAoeDIgPT0geDEpCisJCXJldHVybiB5MTsKKworCXJldHVybiB5MSArICgoKHkyIC0geTEpICogKHggLSB4MSkpIC8gKHgyIC0geDEpKTsKK30KKworc3RhdGljIHU4IGFyOTE3MF9pbnRlcnBvbGF0ZV91OCh1OCB4LCB1OCB4MSwgdTggeTEsIHU4IHgyLCB1OCB5MikKK3sKKyNkZWZpbmUgU0hJRlQJCTgKKwlzMzIgeTsKKworCXkgPSBhcjkxNzBfaW50ZXJwb2xhdGVfczMyKHggPDwgU0hJRlQsCisJCQkJICAgeDEgPDwgU0hJRlQsIHkxIDw8IFNISUZULAorCQkJCSAgIHgyIDw8IFNISUZULCB5MiA8PCBTSElGVCk7CisKKwkvKgorCSAqIFhYWDogdW53cmFwIHRoaXMgZXhwcmVzc2lvbgorCSAqCUlzbid0IGl0IGp1c3QgRElWX1JPVU5EX1VQKHksIDE8PFNISUZUKT8KKwkgKglDYW4gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pc2UgYXdheSB0aGUgZGl2PworCSAqLworCXJldHVybiAoeSA+PiBTSElGVCkgKyAoKHkgJiAoMTw8KFNISUZULTEpKSkgPj4gKFNISUZUIC0gMSkpOworI3VuZGVmIFNISUZUCit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3NldF9wb3dlcl9jYWwoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBmcmVxLCBlbnVtIGFyOTE3MF9idyBidykKK3sKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9sZWdhY3kgKmN0cGw7CisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQgKmN0cGg7CisJdTggKmN0cHJlczsKKwlpbnQgbnRhcmdldHM7CisJaW50IGlkeCwgaSwgbjsKKwl1OCBhY2twb3dlciwgYWNrY2hhaW5zLCBmOworCXU4IHB3cl9mcmVxc1tBUjU0MTZfTUFYX05VTV9UR1RfUFdSU107CisKKwlpZiAoZnJlcSA8IDMwMDApCisJCWYgPSBmcmVxIC0gMjMwMDsKKwllbHNlCisJCWYgPSAoZnJlcSAtIDQ4MDApLzU7CisKKwkvKgorCSAqIGN5Y2xlIHRocm91Z2ggdGhlIHZhcmlvdXMgbW9kZXMKKwkgKgorCSAqIGxlZ2FjeSBtb2RlcyBmaXJzdDogNUcsIDJHIENDSywgMkcgT0ZETQorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDogLyogNSBHSHogbGVnYWN5ICovCisJCQljdHBsID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfNUdbMF07CisJCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfNUdfbGVnOworCQkJYnJlYWs7CisJCWNhc2UgMTogLyogMi40IEdIeiBDQ0sgKi8KKwkJCWN0cGwgPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19jY2tbMF07CisJCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX2NjazsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIDIuNCBHSHogT0ZETSAqLworCQkJY3RwbCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzJHX29mZG1bMF07CisJCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSUzsKKwkJCWN0cHJlcyA9IGFyLT5wb3dlcl8yR19vZmRtOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCWZvciAobiA9IDA7IG4gPCBudGFyZ2V0czsgbisrKSB7CisJCQlpZiAoY3RwbFtuXS5mcmVxID09IDB4ZmYpCisJCQkJYnJlYWs7CisJCQlwd3JfZnJlcXNbbl0gPSBjdHBsW25dLmZyZXE7CisJCX0KKwkJbnRhcmdldHMgPSBuOworCQlpZHggPSBhcjkxNzBfZmluZF9mcmVxX2lkeChudGFyZ2V0cywgcHdyX2ZyZXFzLCBmKTsKKwkJZm9yIChuID0gMDsgbiA8IDQ7IG4rKykKKwkJCWN0cHJlc1tuXSA9IGFyOTE3MF9pbnRlcnBvbGF0ZV91OCgKKwkJCQkJZiwKKwkJCQkJY3RwbFtpZHggKyAwXS5mcmVxLAorCQkJCQljdHBsW2lkeCArIDBdLnBvd2VyW25dLAorCQkJCQljdHBsW2lkeCArIDFdLmZyZXEsCisJCQkJCWN0cGxbaWR4ICsgMV0ucG93ZXJbbl0pOworCX0KKworCS8qCisJICogSFQgbW9kZXMgbm93OiA1RyBIVDIwLCA1RyBIVDQwLCAyRyBDQ0ssIDJHIE9GRE0sIDJHIEhUMjAsIDJHIEhUNDAKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6IC8qIDUgR0h6IEhUIDIwICovCisJCQljdHBoID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfNUdfaHQyMFswXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV81R19UQVJHRVRfUFdSUzsKKwkJCWN0cHJlcyA9IGFyLT5wb3dlcl81R19odDIwOworCQkJYnJlYWs7CisJCWNhc2UgMTogLyogNSBHSHogSFQgNDAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R19odDQwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzVHX2h0NDA7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvKiAyLjQgR0h6IEhUIDIwICovCisJCQljdHBoID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfMkdfaHQyMFswXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX2h0MjA7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiAyLjQgR0h6IEhUIDQwICovCisJCQljdHBoID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfMkdfaHQ0MFswXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX2h0NDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisKKwkJZm9yIChuID0gMDsgbiA8IG50YXJnZXRzOyBuKyspIHsKKwkJCWlmIChjdHBoW25dLmZyZXEgPT0gMHhmZikKKwkJCQlicmVhazsKKwkJCXB3cl9mcmVxc1tuXSA9IGN0cGhbbl0uZnJlcTsKKwkJfQorCQludGFyZ2V0cyA9IG47CisJCWlkeCA9IGFyOTE3MF9maW5kX2ZyZXFfaWR4KG50YXJnZXRzLCBwd3JfZnJlcXMsIGYpOworCQlmb3IgKG4gPSAwOyBuIDwgODsgbisrKQorCQkJY3RwcmVzW25dID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KAorCQkJCQlmLAorCQkJCQljdHBoW2lkeCArIDBdLmZyZXEsCisJCQkJCWN0cGhbaWR4ICsgMF0ucG93ZXJbbl0sCisJCQkJCWN0cGhbaWR4ICsgMV0uZnJlcSwKKwkJCQkJY3RwaFtpZHggKyAxXS5wb3dlcltuXSk7CisJfQorCisJLyogc2V0IEFDSy9DVFMgVFggcG93ZXIgKi8KKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJaWYgKGFyLT5lZXByb20udHhfbWFzayAhPSAxKQorCQlhY2tjaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMjsKKwllbHNlCisJCWFja2NoYWlucyA9IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl8xOworCisJaWYgKGZyZXEgPCAzMDAwKQorCQlhY2twb3dlciA9IGFyLT5wb3dlcl8yR19vZmRtWzBdICYgMHgzZjsKKwllbHNlCisJCWFja3Bvd2VyID0gYXItPnBvd2VyXzVHX2xlZ1swXSAmIDB4M2Y7CisKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzM2OTQsIGFja3Bvd2VyIDw8IDIwIHwgYWNrY2hhaW5zIDw8IDI2KTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzNiYjQsIGFja3Bvd2VyIDw8IDUgfCBhY2tjaGFpbnMgPDwgMTEgfAorCQkJCSAgYWNrcG93ZXIgPDwgMjEgfCBhY2tjaGFpbnMgPDwgMjcpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2NhbGNfbm9pc2VfZGJtKHUzMiByYXdfbm9pc2UpCit7CisJaWYgKHJhd19ub2lzZSAmIDB4MTAwKQorCQlyZXR1cm4gfigocmF3X25vaXNlICYgMHgwZmYpID4+IDEpOworCWVsc2UKKwkJcmV0dXJuIChyYXdfbm9pc2UgJiAweGZmKSA+PiAxOworfQorCitpbnQgYXI5MTcwX3NldF9jaGFubmVsKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCSAgICAgICBlbnVtIGFyOTE3MF9yZl9pbml0X21vZGUgcmZpLCBlbnVtIGFyOTE3MF9idyBidykKK3sKKwljb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqZnJlcXBhcjsKKwl1MzIgY21kLCB0bXAsIG9mZnM7CisJX19sZTMyIHZhbHNbOF07CisJaW50IGksIGVycjsKKwlib29sIGJhbmRzd2l0Y2g7CisKKwkvKiBjbGVhciBCQiBoZWF2eSBjbGlwIGVuYWJsZSAqLworCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWM1OWUwLCAweDIwMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIG1heSBiZSBOVUxMIGF0IGZpcnN0IHNldHVwICovCisJaWYgKGFyLT5jaGFubmVsKQorCQliYW5kc3dpdGNoID0gYXItPmNoYW5uZWwtPmJhbmQgIT0gY2hhbm5lbC0+YmFuZDsKKwllbHNlCisJCWJhbmRzd2l0Y2ggPSB0cnVlOworCisJLyogSFcgd29ya2Fyb3VuZCAqLworCWlmICghYXItPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gJiYKKwkgICAgY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPD0gMjQxNykKKwkJYmFuZHN3aXRjaCA9IHRydWU7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRlJFUV9TVEFSVCwgMCwgTlVMTCwgMCwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChyZmkgIT0gQVI5MTcwX1JGSV9OT05FIHx8IGJhbmRzd2l0Y2gpIHsKKwkJdTMyIHZhbCA9IDB4NDAwOworCisJCWlmIChyZmkgPT0gQVI5MTcwX1JGSV9DT0xEKQorCQkJdmFsID0gMHg4MDA7CisKKwkJLyogd2FybS9jb2xkIHJlc2V0IEJCL0FEREEgKi8KKwkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxZDQwMDQsIHZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDA0LCAweDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBhcjkxNzBfaW5pdF9waHkoYXIsIGNoYW5uZWwtPmJhbmQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rc18wXzcoYXIsCisJCQljaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQljbWQgPSBBUjkxNzBfQ01EX1JGX0lOSVQ7CisJfSBlbHNlIHsKKwkJY21kID0gQVI5MTcwX0NNRF9GUkVRVUVOQ1k7CisJfQorCisJZXJyID0gYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKGFyLAorCQljaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFosCisJCWNoYW5uZWwtPmNlbnRlcl9mcmVxLCBidyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAoYncpIHsKKwljYXNlIEFSOTE3MF9CV18yMDoKKwkJdG1wID0gMHgyNDA7CisJCW9mZnMgPSAwOworCQlicmVhazsKKwljYXNlIEFSOTE3MF9CV180MF9CRUxPVzoKKwkJdG1wID0gMHgyYzQ7CisJCW9mZnMgPSAzOworCQlicmVhazsKKwljYXNlIEFSOTE3MF9CV180MF9BQk9WRToKKwkJdG1wID0gMHgyZDQ7CisJCW9mZnMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJaWYgKDAgLyogMiBzdHJlYW1zIGNhcGFibGUgKi8pCisJCXRtcCB8PSAweDEwMDsKKworCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWM1ODA0LCB0bXApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBhcjkxNzBfc2V0X3Bvd2VyX2NhbChhciwgY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGJ3KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZnJlcXBhciA9IGFyOTE3MF9nZXRfaHdfZHluX3BhcmFtcyhjaGFubmVsLCBidyk7CisKKwl2YWxzWzBdID0gY3B1X3RvX2xlMzIoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgKiAxMDAwKTsKKwl2YWxzWzFdID0gY3B1X3RvX2xlMzIoYncgPT0gQVI5MTcwX0JXXzIwID8gMCA6IDEpOworCXZhbHNbMl0gPSBjcHVfdG9fbGUzMihvZmZzIDw8IDIgfCAxKTsKKwl2YWxzWzNdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwKTsKKwl2YWxzWzRdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuKTsKKwl2YWxzWzVdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwX3NoZ2kpOworCXZhbHNbNl0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW5fc2hnaSk7CisJdmFsc1s3XSA9IGNwdV90b19sZTMyKDEwMDApOworCisJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBjbWQsIHNpemVvZih2YWxzKSwgKHU4ICopdmFscywKKwkJCSAgIHNpemVvZih2YWxzKSwgKHU4ICopdmFscyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJYXItPm5vaXNlW2ldID0gYXI5MTcwX2NhbGNfbm9pc2VfZGJtKAorCQkJCShsZTMyX3RvX2NwdSh2YWxzWzIgKyBpXSkgPj4gMTkpICYgMHgxZmYpOworCisJCWFyLT5ub2lzZVtpICsgMl0gPSBhcjkxNzBfY2FsY19ub2lzZV9kYm0oCisJCQkJICAgIChsZTMyX3RvX2NwdSh2YWxzWzUgKyBpXSkgPj4gMjMpICYgMHgxZmYpOworCX0KKworCWFyLT5jaGFubmVsID0gY2hhbm5lbDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI5Njg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5jCkBAIC0wLDAgKzEsNzQ4IEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogVVNCIC0gZnJvbnRlbmQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSAiYXI5MTcwLmgiCisjaW5jbHVkZSAiY21kLmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKworTU9EVUxFX0FVVEhPUigiSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXRoZXJvcyBBUjkxNzAgODAyLjExbiBVU0Igd2lyZWxlc3MiKTsKK01PRFVMRV9GSVJNV0FSRSgiYXI5MTcwLTEuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYXI5MTcwLTIuZnciKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFyOTE3MF91c2JfaWRzW10gPSB7CisJLyogQXRoZXJvcyA5MTcwICovCisJeyBVU0JfREVWSUNFKDB4MGNmMywgMHg5MTcwKSB9LAorCS8qIEF0aGVyb3MgVEcxMjFOICovCisJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDAxKSB9LAorCS8qIEQtTGluayBEV0EgMTYwQSAqLworCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMCkgfSwKKwkvKiBOZXRnZWFyIFdOREEzMTAwICovCisJeyBVU0JfREVWSUNFKDB4MDg0NiwgMHg5MDEwKSB9LAorCS8qIE5ldGdlYXIgV04xMTEgdjIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwMDEpIH0sCisJLyogWnlkYXMgWkQxMjIxICovCisJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHgxMjIxKSB9LAorCS8qIFotQ29tIFVCODEgQkcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjMpIH0sCisJLyogWi1Db20gVUI4MiBBQkcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjYpIH0sCisJLyogQXJjYWR5YW4gV043NTEyICovCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhmNTIyKSB9LAorCS8qIFBsYW5leCBHV1VTMzAwICovCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHg1MzA0KSB9LAorCS8qIElPLURhdGEgV05HRE5VUzIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5M2YpIH0sCisKKwkvKiB0ZXJtaW5hdGUgKi8KKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhcjkxNzBfdXNiX2lkcyk7CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlX2ZyZWUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IChzdHJ1Y3QgYXI5MTcwX3VzYiAqKQorCSAgICAgIHVzYl9nZXRfaW50ZmRhdGEodXNiX2lmbnVtX3RvX2lmKHVyYi0+ZGV2LCAwKSk7CisKKwlpZiAoIWFydSkgeworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlyZXR1cm4gOworCX0KKworCWFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKCZhcnUtPmNvbW1vbiwgc2tiLCBmYWxzZSwKKwkJCQlBUjkxNzBfVFhfU1RBVFVTX0NPTVBMRVRFKTsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl90eF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2lycV9jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSB1cmItPmNvbnRleHQ7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJLyogZXZlcnl0aGluZyBpcyBmaW5lICovCisJY2FzZSAwOgorCQlicmVhazsKKworCS8qIGRpc2Nvbm5lY3QgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9ERVY6CisJY2FzZSAtRVNIVVRET1dOOgorCQlnb3RvIGZyZWU7CisKKwlkZWZhdWx0OgorCQlnb3RvIHJlc3VibWl0OworCX0KKworCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgaXJxOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCityZXN1Ym1pdDoKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQlnb3RvIGZyZWU7CisJfQorCisJcmV0dXJuOworCitmcmVlOgorCXVzYl9idWZmZXJfZnJlZShhcnUtPnVkZXYsIDY0LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3J4X2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHN0cnVjdCBhcjkxNzBfdXNiICopCisJCXVzYl9nZXRfaW50ZmRhdGEodXNiX2lmbnVtX3RvX2lmKHVyYi0+ZGV2LCAwKSk7CisJaW50IGVycjsKKworCWlmICghYXJ1KQorCQlnb3RvIGZyZWU7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJLyogZXZlcnl0aGluZyBpcyBmaW5lICovCisJY2FzZSAwOgorCQlicmVhazsKKworCS8qIGRpc2Nvbm5lY3QgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9ERVY6CisJY2FzZSAtRVNIVVRET1dOOgorCQlnb3RvIGZyZWU7CisKKwlkZWZhdWx0OgorCQlnb3RvIHJlc3VibWl0OworCX0KKworCXNrYl9wdXQoc2tiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWFyOTE3MF9yeCgmYXJ1LT5jb21tb24sIHNrYik7CisKK3Jlc3VibWl0OgorCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoc2tiKTsKKwlza2JfdHJpbShza2IsIDApOworCisJdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT5yeF9zdWJtaXR0ZWQpOworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVycikgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJfQorCisJcmV0dXJuIDsKKworZnJlZToKKwlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3ByZXBfcnhfdXJiKHN0cnVjdCBhcjkxNzBfdXNiICphcnUsCisJCQkJICBzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUgKyAzMiwgZ2ZwKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiByZXNlcnZlIHNvbWUgc3BhY2UgZm9yIG1hYzgwMjExJ3MgcmFkaW90YXAgKi8KKwlza2JfcmVzZXJ2ZShza2IsIDMyKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgYXJ1LT51ZGV2LAorCQkJICB1c2JfcmN2YnVsa3BpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfUlgpLAorCQkJICBza2ItPmRhdGEsIG1pbihza2JfdGFpbHJvb20oc2tiKSwKKwkJCSAgQVI5MTcwX01BWF9SWF9CVUZGRVJfU0laRSksCisJCQkgIGFyOTE3MF91c2JfcnhfY29tcGxldGVkLCBza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9hbGxvY19yeF9pcnFfdXJiKHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCit7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwl2b2lkICppYnVmOworCWludCBlcnIgPSAtRU5PTUVNOworCisJLyogaW5pdGlhbGl6ZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKQorCQlnb3RvIG91dDsKKworCWlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGFydS0+dWRldiwgNjQsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCFpYnVmKQorCQlnb3RvIG91dDsKKworCXVzYl9maWxsX2ludF91cmIodXJiLCBhcnUtPnVkZXYsCisJCQkgdXNiX3JjdmludHBpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfSVJRKSwgaWJ1ZiwKKwkJCSA2NCwgYXI5MTcwX3VzYl9pcnFfY29tcGxldGVkLCBhcnUsIDEpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJdXNiX2J1ZmZlcl9mcmVlKGFydS0+dWRldiwgNjQsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXVyYi0+dHJhbnNmZXJfZG1hKTsKKwl9CisKK291dDoKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfYWxsb2NfcnhfYnVsa191cmJzKHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBpOworCWludCBlcnIgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fUlhfVVJCUzsgaSsrKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKQorCQkJZ290byBlcnJfb3V0OworCisJCWVyciA9IGFyOTE3MF91c2JfcHJlcF9yeF91cmIoYXJ1LCB1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyKSB7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+cnhfc3VibWl0dGVkKTsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoKHZvaWQgKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQorCisJLyogdGhlIGRldmljZSBub3cgd2FpdGluZyBmb3IgYSBmaXJtd2FyZS4gKi8KKwlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9JRExFOworCXJldHVybiAwOworCitlcnJfb3V0OgorCisJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmYXJ1LT5yeF9zdWJtaXR0ZWQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfY2FuY2VsX3VyYnMoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlpbnQgcmV0OworCisJYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfVU5LTk9XTl9TVEFURTsKKworCXVzYl91bmxpbmtfYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOworCisJLyogZ2l2ZSB0aGUgTEVEIE9GRiBjb21tYW5kIGFuZCB0aGUgZGVhdXRoIGZyYW1lIGEgY2hhbmNlIHRvIGFpci4gKi8KKwlyZXQgPSB1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCgmYXJ1LT50eF9zdWJtaXR0ZWQsCisJCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCWlmIChyZXQgPT0gMCkKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJraWxsIHBlbmRpbmcgdHggdXJicy5cbiIpOworCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOworCisJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9leGVjX2NtZChzdHJ1Y3QgYXI5MTcwICphciwgZW51bSBhcjkxNzBfY21kIGNtZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxlbiwgdm9pZCAqcGF5bG9hZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3V0bGVuLCB2b2lkICpvdXQpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKFdBUk5fT04ocGxlbiA+IEFSOTE3MF9NQVhfQ01EX0xFTiAtIDQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCF1cmIpKQorCQlnb3RvIGVycl9mcmVlOworCisJYXItPmNtZGJ1ZlswXSA9IGNwdV90b19sZTMyKHBsZW4pOworCWFyLT5jbWRidWZbMF0gfD0gY3B1X3RvX2xlMzIoY21kIDw8IDgpOworCS8qIHdyaXRpbmcgbXVsdGlwbGUgcmVncyBmaWxscyB0aGlzIGJ1ZmZlciBhbHJlYWR5ICovCisJaWYgKHBsZW4gJiYgcGF5bG9hZCAhPSAodTggKikoJmFyLT5jbWRidWZbMV0pKQorCQltZW1jcHkoJmFyLT5jbWRidWZbMV0sIHBheWxvYWQsIHBsZW4pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKKwlhcnUtPnJlYWRidWYgPSAodTggKilvdXQ7CisJYXJ1LT5yZWFkbGVuID0gb3V0bGVuOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKKworCXVzYl9maWxsX2ludF91cmIodXJiLCBhcnUtPnVkZXYsCisJCQkgdXNiX3NuZGJ1bGtwaXBlKGFydS0+dWRldiwgQVI5MTcwX0VQX0NNRCksCisJCQkgYXJ1LT5jb21tb24uY21kYnVmLCBwbGVuICsgNCwKKwkJCSBhcjkxNzBfdXNiX3R4X3VyYl9jb21wbGV0ZSwgTlVMTCwgMSk7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWdvdG8gZXJyX3VuYnVmOworCX0KKwl1c2JfZnJlZV91cmIodXJiKTsKKworCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYXJ1LT5jbWRfd2FpdCwgSFopOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSAtRVRJTUVET1VUOworCQlnb3RvIGVycl91bmJ1ZjsKKwl9CisKKwlpZiAob3V0bGVuID49IDAgJiYgYXJ1LT5yZWFkbGVuICE9IG91dGxlbikgeworCQllcnIgPSAtRU1TR1NJWkU7CisJCWdvdG8gZXJyX3VuYnVmOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5idWY6CisJLyogTWF5YmUgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCBpbiB0aGUgc2Vjb25kIHdlIHdlcmUgd2FpdGluZz8gKi8KKwlpZiAoSVNfU1RBUlRFRChhcikpIHsKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJubyBjb21tYW5kIGZlZWRiYWNrICIKKwkJCQkJICJyZWNlaXZlZCAoJWQpLlxuIiwgZXJyKTsKKworCQkvKiBwcm92aWRlIHNvbWUgbWF5YmUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uICovCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgY21kOiAiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgYXJ1LT5jb21tb24uY21kYnVmLCBwbGVuICsgNCk7CisJCWR1bXBfc3RhY2soKTsKKwl9CisKKwkvKiBpbnZhbGlkYXRlIHRvIGF2b2lkIGNvbXBsZXRpbmcgdGhlIG5leHQgcHJlbWF0dXJlbHkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCWFydS0+cmVhZGJ1ZiA9IE5VTEw7CisJYXJ1LT5yZWFkbGVuID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7CisKK2Vycl9mcmVlOgorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3R4KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIGJvb2wgdHhzdGF0dXNfbmVlZGVkLCB1bnNpZ25lZCBpbnQgZXh0cmFfbGVuKQoreworCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikgYXI7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgeworCQkvKiBTZXJpb3VzbHksIHdoYXQgd2VyZSB5b3UgZHJpbmsuLi4gZXJyLi4uIHRoaW5raW5nIT8gKi8KKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghdXJiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGFydS0+dWRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGFydS0+dWRldiwgQVI5MTcwX0VQX1RYKSwKKwkJCSAgc2tiLT5kYXRhLCBza2ItPmxlbiArIGV4dHJhX2xlbiwgKHR4c3RhdHVzX25lZWRlZCA/CisJCQkgIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlIDoKKwkJCSAgYXI5MTcwX3VzYl90eF91cmJfY29tcGxldGVfZnJlZSksIHNrYik7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCisJdXNiX2ZyZWVfdXJiKHVyYik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYWxsYmFja19jbWQoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBsZW4gLCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGluLCBvdXQ7CisKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIDsKKworCWluID0gbGUzMl90b19jcHVwKChfX2xlMzIgKilidWZmZXIpOworCW91dCA9IGxlMzJfdG9fY3B1KGFyLT5jbWRidWZbMF0pOworCisJLyogbWFzayBvZmYgbGVuZ3RoIGJ5dGUgKi8KKwlvdXQgJj0gfjB4RkY7CisKKwlpZiAoYXJ1LT5yZWFkbGVuID49IDApIHsKKwkJLyogYWRkIGV4cGVjdGVkIGxlbmd0aCAqLworCQlvdXQgfD0gYXJ1LT5yZWFkbGVuOworCX0gZWxzZSB7CisJCS8qIGFkZCBvYnRhaW5lZCBsZW5ndGggKi8KKwkJb3V0IHw9IGluICYgMHhGRjsKKwl9CisKKwkvKgorCSAqIFNvbWUgY29tbWFuZHMgKGUuZzogQVI5MTcwX0NNRF9GUkVRVUVOQ1kpIGhhdmUgYSB2YXJpYWJsZSByZXNwb25zZQorCSAqIGxlbmd0aCBhbmQgd2UgY2Fubm90IHByZWRpY3QgdGhlIGNvcnJlY3QgbGVuZ3RoIGluIGFkdmFuY2UuCisJICogU28gd2Ugb25seSBjaGVjayBpZiB3ZSBwcm92aWRlZCBlbm91Z2ggc3BhY2UgZm9yIHRoZSBkYXRhLgorCSAqLworCWlmICh1bmxpa2VseShvdXQgPCBpbikpIHsKKwkJZGV2X3dhcm4oJmFydS0+dWRldi0+ZGV2LCAicmVjZWl2ZWQgaW52YWxpZCBjb21tYW5kIHJlc3BvbnNlICIKKwkJCQkJICAiZ290ICVkIGJ5dGVzLCBpbnN0ZWFkIG9mICVkIGJ5dGVzICIKKwkJCQkJICAiYW5kIHRoZSByZXNwIGxlbmd0aCBpcyAlZCBieXRlc1xuIiwKKwkJCSBpbiwgb3V0LCBsZW4pOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiYXI5MTcwIGludmFsaWQgcmVzcDogIiwKKwkJCQkgICAgIERVTVBfUFJFRklYX09GRlNFVCwgYnVmZmVyLCBsZW4pOworCQkvKgorCQkgKiBEbyBub3QgY29tcGxldGUsIHRoZW4gdGhlIGNvbW1hbmQgdGltZXMgb3V0LAorCQkgKiBhbmQgd2UgZ2V0IGEgc3RhY2sgdHJhY2UgZnJvbSB0aGVyZS4KKwkJICovCisJCXJldHVybiA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKKwlpZiAoYXJ1LT5yZWFkYnVmICYmIGxlbiA+IDApIHsKKwkJbWVtY3B5KGFydS0+cmVhZGJ1ZiwgYnVmZmVyICsgNCwgbGVuIC0gNCk7CisJCWFydS0+cmVhZGJ1ZiA9IE5VTEw7CisJfQorCWNvbXBsZXRlKCZhcnUtPmNtZF93YWl0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl91cGxvYWQoc3RydWN0IGFyOTE3MF91c2IgKmFydSwgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCSAgICAgc2l6ZV90IGxlbiwgdTMyIGFkZHIsIGJvb2wgY29tcGxldGUpCit7CisJaW50IHRyYW5zZmVyLCBlcnI7CisJdTggKmJ1ZiA9IGttYWxsb2MoNDA5NiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3aGlsZSAobGVuKSB7CisJCXRyYW5zZmVyID0gbWluX3QoaW50LCBsZW4sIDQwOTYpOworCQltZW1jcHkoYnVmLCBkYXRhLCB0cmFuc2Zlcik7CisKKwkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGFydS0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGFydS0+dWRldiwgMCksCisJCQkJICAgICAgMHgzMCAvKiBGVyBETCAqLywgMHg0MCB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAgIGFkZHIgPj4gOCwgMCwgYnVmLCB0cmFuc2ZlciwgMTAwMCk7CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWtmcmVlKGJ1Zik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJbGVuIC09IHRyYW5zZmVyOworCQlkYXRhICs9IHRyYW5zZmVyOworCQlhZGRyICs9IHRyYW5zZmVyOworCX0KKwlrZnJlZShidWYpOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWVyciA9IHVzYl9jb250cm9sX21zZyhhcnUtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShhcnUtPnVkZXYsIDApLAorCQkJCSAgICAgIDB4MzEgLyogRlcgREwgQ09NUExFVEUgKi8sCisJCQkJICAgICAgMHg0MCB8IFVTQl9ESVJfT1VULCAwLCAwLCBOVUxMLCAwLCA1MDAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmFydS0+aW5pdF92YWx1ZXMsICJhcjkxNzAtMS5mdyIsCisJCQkgICAgICAgJmFydS0+dWRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZmlsZSB3aXRoIGluaXQgdmFsdWVzIG5vdCBmb3VuZC5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmFydS0+ZmlybXdhcmUsICJhcjkxNzAtMi5mdyIsICZhcnUtPnVkZXYtPmRldik7CisJaWYgKGVycikgeworCQlyZWxlYXNlX2Zpcm13YXJlKGFydS0+aW5pdF92YWx1ZXMpOworCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImZpcm13YXJlIGZpbGUgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3Jlc2V0KHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCit7CisJaW50IHJldCwgbG9jayA9IChhcnUtPmludGYtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JJTkRJTkcpOworCisJaWYgKGxvY2spIHsKKwkJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChhcnUtPnVkZXYsIGFydS0+aW50Zik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgInVuYWJsZSB0byBsb2NrIGRldmljZSAiCisJCQkJImZvciByZXNldCAoJWQpLlxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKGFydS0+dWRldik7CisJaWYgKGxvY2spCisJCXVzYl91bmxvY2tfZGV2aWNlKGFydS0+dWRldik7CisKKwkvKiBsZXQgaXQgcmVzdCAtIGZvciBhIHNlY29uZCAtICovCisJbXNsZWVwKDEwMDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3VwbG9hZF9maXJtd2FyZShzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCWludCBlcnI7CisKKwkvKiBGaXJzdCwgdXBsb2FkIGluaXRpYWwgdmFsdWVzIHRvIGRldmljZSBSQU0gKi8KKwllcnIgPSBhcjkxNzBfdXNiX3VwbG9hZChhcnUsIGFydS0+aW5pdF92YWx1ZXMtPmRhdGEsCisJCQkJYXJ1LT5pbml0X3ZhbHVlcy0+c2l6ZSwgMHgxMDI4MDAsIGZhbHNlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZmlybXdhcmUgcGFydCAxICIKKwkJCSJ1cGxvYWQgZmFpbGVkICglZCkuXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFRoZW4sIHVwbG9hZCB0aGUgZmlybXdhcmUgaXRzZWxmIGFuZCBzdGFydCBpdCAqLworCXJldHVybiBhcjkxNzBfdXNiX3VwbG9hZChhcnUsIGFydS0+ZmlybXdhcmUtPmRhdGEsIGFydS0+ZmlybXdhcmUtPnNpemUsCisJCQkJMHgyMDAwMDAsIHRydWUpOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfaW5pdF90cmFuc3BvcnQoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9ICh2b2lkICopICZhcnUtPmNvbW1vbjsKKwlpbnQgZXJyOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCS8qIFNldCBVU0IgUnggc3RyZWFtIG1vZGUgTUFYIHBhY2tldCBudW1iZXIgdG8gMiAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfVVNCX1JFR19NQVhfQUdHX1VQTE9BRCwgMHg0KTsKKworCS8qIFNldCBVU0IgUnggc3RyZWFtIG1vZGUgdGltZW91dCB0byAxMHVzICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9VU0JfUkVHX1VQTE9BRF9USU1FX0NUTCwgMHg4MCk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisKKwllcnIgPSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7CisJaWYgKGVycikKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJVU0Igc2V0dXAgZmFpbGVkICglZCkuXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9zdG9wKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAodm9pZCAqKSBhcjsKKwlpbnQgcmV0OworCisJaWYgKElTX0FDQ0VQVElOR19DTUQoYXIpKQorCQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9TVE9QUEVEOworCisJLyogbGV0cyB3YWl0IGEgd2hpbGUgdW50aWwgdGhlIHR4IC0gcXVldWVzIGFyZSBkcmllZCBvdXQgKi8KKwlyZXQgPSB1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCgmYXJ1LT50eF9zdWJtaXR0ZWQsCisJCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwlpZiAocmV0ID09IDApCisJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAia2lsbCBwZW5kaW5nIHR4IHVyYnMuXG4iKTsKKworCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOworCisJLyoKKwkgKiBOb3RlOgorCSAqIFNvIGZhciB3ZSBmcmVlZCBhbGwgdHggdXJicywgYnV0IHdlIHdvbid0IGRhcmUgdG8gdG91Y2ggYW55IHJ4IHVyYnMuCisJICogRWxzZSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHVucmVzcG9uc2l2ZSBkZXZpY2UuLi4KKwkgKi8KK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX29wZW4oc3RydWN0IGFyOTE3MCAqYXIpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOworCWludCBlcnI7CisKKwl1c2JfdW5wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOworCWVyciA9IGFyOTE3MF91c2JfaW5pdF90cmFuc3BvcnQoYXJ1KTsKKwlpZiAoZXJyKSB7CisJCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1OworCXN0cnVjdCBhcjkxNzAgKmFyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCBlcnI7CisKKwlhcnUgPSBhcjkxNzBfYWxsb2Moc2l6ZW9mKCphcnUpKTsKKwlpZiAoSVNfRVJSKGFydSkpIHsKKwkJZXJyID0gUFRSX0VSUihhcnUpOworCQlnb3RvIG91dDsKKwl9CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl1c2JfZ2V0X2Rldih1ZGV2KTsKKwlhcnUtPnVkZXYgPSB1ZGV2OworCWFydS0+aW50ZiA9IGludGY7CisJYXIgPSAmYXJ1LT5jb21tb247CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGFydSk7CisJU0VUX0lFRUU4MDIxMV9ERVYoYXItPmh3LCAmdWRldi0+ZGV2KTsKKworCWluaXRfdXNiX2FuY2hvcigmYXJ1LT5yeF9zdWJtaXR0ZWQpOworCWluaXRfdXNiX2FuY2hvcigmYXJ1LT50eF9zdWJtaXR0ZWQpOworCWluaXRfY29tcGxldGlvbigmYXJ1LT5jbWRfd2FpdCk7CisKKwlhcnUtPmNvbW1vbi5zdG9wID0gYXI5MTcwX3VzYl9zdG9wOworCWFydS0+Y29tbW9uLm9wZW4gPSBhcjkxNzBfdXNiX29wZW47CisJYXJ1LT5jb21tb24udHggPSBhcjkxNzBfdXNiX3R4OworCWFydS0+Y29tbW9uLmV4ZWNfY21kID0gYXI5MTcwX3VzYl9leGVjX2NtZDsKKwlhcnUtPmNvbW1vbi5jYWxsYmFja19jbWQgPSBhcjkxNzBfdXNiX2NhbGxiYWNrX2NtZDsKKworCWVyciA9IGFyOTE3MF91c2JfcmVzZXQoYXJ1KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwllcnIgPSBhcjkxNzBfdXNiX3JlcXVlc3RfZmlybXdhcmUoYXJ1KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwllcnIgPSBhcjkxNzBfdXNiX2FsbG9jX3J4X2lycV91cmIoYXJ1KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlZnc7CisKKwllcnIgPSBhcjkxNzBfdXNiX2FsbG9jX3J4X2J1bGtfdXJicyhhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3Vucng7CisKKwllcnIgPSBhcjkxNzBfdXNiX3VwbG9hZF9maXJtd2FyZShhcnUpOworCWlmIChlcnIpIHsKKwkJZXJyID0gYXI5MTcwX2VjaG9fdGVzdCgmYXJ1LT5jb21tb24sIDB4NjBkNDMxMTApOworCQlpZiAoZXJyKSB7CisJCQkvKiBmb3JjZSB1c2VyIGludmVudGlvbiwgYnkgZGlzYWJsaW5nIHRoZSBkZXZpY2UgKi8KKwkJCWVyciA9IHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24oYXJ1LT51ZGV2LCAtMSk7CisJCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImRldmljZSBpcyBpbiBhIGJhZCBzdGF0ZS4gIgorCQkJCQkJICJwbGVhc2UgcmVjb25uZWN0IGl0IVxuIik7CisJCQlnb3RvIGVycl91bnJ4OworCQl9CisJfQorCisJZXJyID0gYXI5MTcwX3VzYl9vcGVuKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bnJ4OworCisJZXJyID0gYXI5MTcwX3JlZ2lzdGVyKGFyLCAmdWRldi0+ZGV2KTsKKworCWFyOTE3MF91c2Jfc3RvcChhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yeDsKKworCXJldHVybiAwOworCitlcnJfdW5yeDoKKwlhcjkxNzBfdXNiX2NhbmNlbF91cmJzKGFydSk7CisKK2Vycl9mcmVlZnc6CisJcmVsZWFzZV9maXJtd2FyZShhcnUtPmluaXRfdmFsdWVzKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGFydS0+ZmlybXdhcmUpOworCitlcnJfdW5sb2NrOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJdXNiX3B1dF9kZXYodWRldik7CisJaWVlZTgwMjExX2ZyZWVfaHcoYXItPmh3KTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoIWFydSkKKwkJcmV0dXJuOworCisJYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKKwlhcjkxNzBfdW5yZWdpc3RlcigmYXJ1LT5jb21tb24pOworCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKKworCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5pbml0X3ZhbHVlcyk7CisJcmVsZWFzZV9maXJtd2FyZShhcnUtPmZpcm13YXJlKTsKKworCXVzYl9wdXRfZGV2KGFydS0+dWRldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZWVlODAyMTFfZnJlZV9odyhhcnUtPmNvbW1vbi5odyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhcjkxNzBfZHJpdmVyID0geworCS5uYW1lID0gImFyOTE3MHVzYiIsCisJLnByb2JlID0gYXI5MTcwX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGFyOTE3MF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBhcjkxNzBfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPSAxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXI5MTcwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZhcjkxNzBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFyOTE3MF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFyOTE3MF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhcjkxNzBfaW5pdCk7Cittb2R1bGVfZXhpdChhcjkxNzBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4NTI5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgVVNCIGRyaXZlcgorICoKKyAqIERyaXZlciBzcGVjaWZpYyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19VU0JfSAorI2RlZmluZSBfX1VTQl9ICisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bmV0L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlICJlZXByb20uaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgImFyOTE3MC5oIgorCisjZGVmaW5lIEFSOTE3MF9OVU1fUlhfVVJCUwkJCTE2CisKK3N0cnVjdCBmaXJtd2FyZTsKKworc3RydWN0IGFyOTE3MF91c2IgeworCXN0cnVjdCBhcjkxNzAgY29tbW9uOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCisJc3RydWN0IHVzYl9hbmNob3Igcnhfc3VibWl0dGVkOworCXN0cnVjdCB1c2JfYW5jaG9yIHR4X3N1Ym1pdHRlZDsKKworCXNwaW5sb2NrX3QgY21kbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfd2FpdDsKKwlpbnQgcmVhZGxlbjsKKwl1OCAqcmVhZGJ1ZjsKKworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdF92YWx1ZXM7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKK307CisKKyNlbmRpZiAvKiBfX1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKaW5kZXggYmZjYTE1ZC4uYTU0YTY3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKQEAgLTEwMzAsNyArMTAzMCwxNyBAQAogCXJldHVybiAwOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXJsYW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gYXJsYW5fb3BlbiwKKwkubmRvX3N0b3AJCT0gYXJsYW5fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGFybGFuX3R4LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGFybGFuX3N0YXRpc3RpY3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhcmxhbl9zZXRfbXVsdGljYXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBhcmxhbl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYXJsYW5fbWFjX2FkZHIsCisJLm5kb190eF90aW1lb3V0CQk9IGFybGFuX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhcmxhbl9zZXR1cF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSkKIHsKQEAgLTEwNDIsMTQgKzEwNTIsNyBAQAogCWFwLT5jb25mID0gKHN0cnVjdCBhcmxhbl9zaG1lbSAqKShhcCsxKTsKIAogCWRldi0+dHhfcXVldWVfbGVuID0gdHhfcXVldWVfbGVuOwotCWRldi0+b3BlbiA9IGFybGFuX29wZW47Ci0JZGV2LT5zdG9wID0gYXJsYW5fY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhcmxhbl90eDsKLQlkZXYtPmdldF9zdGF0cyA9IGFybGFuX3N0YXRpc3RpY3M7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhcmxhbl9zZXRfbXVsdGljYXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGFybGFuX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBhcmxhbl9tYWNfYWRkcjsKLQlkZXYtPnR4X3RpbWVvdXQgPSBhcmxhbl90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZhcmxhbl9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAzKkhaOwogCQogCWFwLT5pcnFfdGVzdF9kb25lID0gMDsKQEAgLTEwODIsOCArMTA4NSw4IEBACiAJaWYgKGFybGFuX2NoZWNrX2ZpbmdlcnByaW50KG1lbWFkZHIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEFybGFuIGZvdW5kIGF0ICV4LCBcbiAiLCBkZXYtPm5hbWUsIAotCSAgICAgICAoaW50KSB2aXJ0X3RvX3BoeXMoKHZvaWQqKW1lbWFkZHIpKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBBcmxhbiBmb3VuZCBhdCAlbGx4LCBcbiAiLCBkZXYtPm5hbWUsIAorCSAgICAgICAodTY0KSB2aXJ0X3RvX3BoeXMoKHZvaWQqKW1lbWFkZHIpKTsKIAogCWFwLT5jYXJkID0gKHZvaWQgKikgbWVtYWRkcjsKIAlkZXYtPm1lbV9zdGFydCA9IG1lbWFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDJmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpAQCAtMCwwICsxLDI1MDEgQEAKKy8qCisgKiBhdDc2YzUwMy9hdDc2YzUwNSBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwMyBPbGl2ZXIgS3VydGgKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTmljayBKb25lcworICogQ29weXJpZ2h0IChjKSAyMDA0IEJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQmVybGlvcyBkcml2ZXIgZm9yIFdMQU4gVVNCIGRldmljZXMgYmFzZWQgb24gdGhlCisgKiBBdG1lbCBBVDc2QzUwM0EvNTA1LzUwNUEuCisgKgorICogU29tZSBpd19oYW5kbGVyIGNvZGUgd2FzIHRha2VuIGZyb20gYWlyby5jLCAoQykgMTk5OSBCZW5qYW1pbiBSZWVkCisgKgorICogVE9ETyBsaXN0IGlzIGF0IHRoZSB3aWtpOgorICoKKyAqIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXQ3NmM1MHgtdXNiI1RPRE8KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJhdDc2YzUweC11c2IuaCIKKworLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfTkFNRSAiYXQ3NmM1MHgtdXNiIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4xNyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkF0bWVsIGF0NzZ4IFVTQiBXaXJlbGVzcyBMQU4gRHJpdmVyIgorCisvKiBhdDc2X2RlYnVnIGJpdHMgKi8KKyNkZWZpbmUgREJHX1BST0dSRVNTCQkweDAwMDAwMDAxCS8qIGF1dGhlbnRpY2F0aW9uL2FjY29jaWF0aW9uICovCisjZGVmaW5lIERCR19CU1NfVEFCTEUJCTB4MDAwMDAwMDIJLyogc2hvdyBCU1MgdGFibGUgYWZ0ZXIgc2NhbnMgKi8KKyNkZWZpbmUgREJHX0lPQ1RMCQkweDAwMDAwMDA0CS8qIGlvY3RsIGNhbGxzIC8gc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX01BQ19TVEFURQkJMHgwMDAwMDAwOAkvKiBNQUMgc3RhdGUgdHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgREJHX1RYX0RBVEEJCTB4MDAwMDAwMTAJLyogdHggaGVhZGVyICovCisjZGVmaW5lIERCR19UWF9EQVRBX0NPTlRFTlQJMHgwMDAwMDAyMAkvKiB0eCBjb250ZW50ICovCisjZGVmaW5lIERCR19UWF9NR01UCQkweDAwMDAwMDQwCS8qIHR4IG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEEJCTB4MDAwMDAwODAJLyogcnggZGF0YSBoZWFkZXIgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEFfQ09OVEVOVAkweDAwMDAwMTAwCS8qIHJ4IGRhdGEgY29udGVudCAqLworI2RlZmluZSBEQkdfUlhfTUdNVAkJMHgwMDAwMDIwMAkvKiByeCBtZ210IGZyYW1lIGhlYWRlcnMgKi8KKyNkZWZpbmUgREJHX1JYX0JFQUNPTgkJMHgwMDAwMDQwMAkvKiByeCBiZWFjb24gKi8KKyNkZWZpbmUgREJHX1JYX0NUUkwJCTB4MDAwMDA4MDAJLyogcnggY29udHJvbCAqLworI2RlZmluZSBEQkdfUlhfTUdNVF9DT05URU5UCTB4MDAwMDEwMDAJLyogcnggbWdtdCBjb250ZW50ICovCisjZGVmaW5lIERCR19SWF9GUkFHUwkJMHgwMDAwMjAwMAkvKiByeCBkYXRhIGZyYWdtZW50IGhhbmRsaW5nICovCisjZGVmaW5lIERCR19ERVZTVEFSVAkJMHgwMDAwNDAwMAkvKiBmdyBkb3dubG9hZCwgZGV2aWNlIHN0YXJ0ICovCisjZGVmaW5lIERCR19VUkIJCQkweDAwMDA4MDAwCS8qIHJ4IHVyYiBzdGF0dXMsIC4uLiAqLworI2RlZmluZSBEQkdfUlhfQVRNRUxfSERSCTB4MDAwMTAwMDAJLyogQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVycyAqLworI2RlZmluZSBEQkdfUFJPQ19FTlRSWQkJMHgwMDAyMDAwMAkvKiBwcm9jZWR1cmUgZW50cmllcy9leGl0cyAqLworI2RlZmluZSBEQkdfUE0JCQkweDAwMDQwMDAwCS8qIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX0JTU19NQVRDSAkJMHgwMDA4MDAwMAkvKiBCU1MgbWF0Y2ggZmFpbHVyZXMgKi8KKyNkZWZpbmUgREJHX1BBUkFNUwkJMHgwMDEwMDAwMAkvKiBzaG93IGNvbmZpZ3VyZWQgcGFyYW1ldGVycyAqLworI2RlZmluZSBEQkdfV0FJVF9DT01QTEVURQkweDAwMjAwMDAwCS8qIGNvbW1hbmQgY29tcGxldGlvbiAqLworI2RlZmluZSBEQkdfUlhfRlJBR1NfU0tCCTB4MDA0MDAwMDAJLyogc2tiIGhlYWRlciBvZiBSeCBmcmFnbWVudHMgKi8KKyNkZWZpbmUgREJHX0JTU19UQUJMRV9STQkweDAwODAwMDAwCS8qIHB1cmdpbmcgYnNzIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgREJHX01PTklUT1JfTU9ERQkweDAxMDAwMDAwCS8qIG1vbml0b3IgbW9kZSAqLworI2RlZmluZSBEQkdfTUlCCQkJMHgwMjAwMDAwMAkvKiBkdW1wIGFsbCBNSUJzIG9uIHN0YXJ0dXAgKi8KKyNkZWZpbmUgREJHX01HTVRfVElNRVIJCTB4MDQwMDAwMDAJLyogZHVtcCBtZ210X3RpbWVyIG9wcyAqLworI2RlZmluZSBEQkdfV0VfRVZFTlRTCQkweDA4MDAwMDAwCS8qIGR1bXAgd2lyZWxlc3MgZXZlbnRzICovCisjZGVmaW5lIERCR19GVwkJCTB4MTAwMDAwMDAJLyogZmlybXdhcmUgZG93bmxvYWQgKi8KKyNkZWZpbmUgREJHX0RGVQkJCTB4MjAwMDAwMDAJLyogZGV2aWNlIGZpcm13YXJlIHVwZ3JhZGUgKi8KKyNkZWZpbmUgREJHX0NNRAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgREJHX01BQzgwMjExCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgREJHX0RFRkFVTFRTCQkwCisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworI2RlZmluZSBhdDc2X2RiZyhiaXRzLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkJCQkJIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCBcCisJCQkgICAgICAgIyMgYXJnKTsJCQkJCSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBhdDc2X2RiZ19kdW1wKGJpdHMsIGJ1ZiwgbGVuLCBmb3JtYXQsIGFyZy4uLikJXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkgeyBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgXAorCQkJICAgICAgICMjIGFyZyk7CQkJCQkgXAorCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgICAgIFwKKwkJCQkJICAgICBidWYsIGxlbik7CQkJIFwKKwkJfQkJCQkJCQkgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB1aW50IGF0NzZfZGVidWcgPSBEQkdfREVGQVVMVFM7CisKKy8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CisKK3N0YXRpYyBzdHJ1Y3QgZndlbnRyeSBmaXJtd2FyZXNbXSA9IHsKKwlbMF0gPSB7ICIiIH0sCisJW0JPQVJEXzUwM19JU0wzODYxXSA9IHsgImF0bWVsX2F0NzZjNTAzLWkzODYxLmJpbiIgfSwKKwlbQk9BUkRfNTAzX0lTTDM4NjNdID0geyAiYXRtZWxfYXQ3NmM1MDMtaTM4NjMuYmluIiB9LAorCVtCT0FSRF81MDNdID0geyAiYXRtZWxfYXQ3NmM1MDMtcmZtZC5iaW4iIH0sCisJW0JPQVJEXzUwM19BQ0NdID0geyAiYXRtZWxfYXQ3NmM1MDMtcmZtZC1hY2MuYmluIiB9LAorCVtCT0FSRF81MDVdID0geyAiYXRtZWxfYXQ3NmM1MDUtcmZtZC5iaW4iIH0sCisJW0JPQVJEXzUwNV8yOTU4XSA9IHsgImF0bWVsX2F0NzZjNTA1LXJmbWQyOTU4LmJpbiIgfSwKKwlbQk9BUkRfNTA1QV0gPSB7ICJhdG1lbF9hdDc2YzUwNWEtcmZtZDI5NTguYmluIiB9LAorCVtCT0FSRF81MDVBTVhdID0geyAiYXRtZWxfYXQ3NmM1MDVhbXgtcmZtZC5iaW4iIH0sCit9OworCisjZGVmaW5lIFVTQl9ERVZJQ0VfREFUQShfX29wcykJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShfX29wcykKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldl90YWJsZVtdID0geworCS8qCisJICogYXQ3NmM1MDMtaTM4NjEKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzLzM4NjEgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjAzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjEvdjIuNiAqLworCXsgVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBOZXRnZWFyIE1BMTAxIHJldi4gQSAqLworCXsgVVNCX0RFVklDRSgweDA4NjQsIDB4NDEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBUZWtyYW0gVTMwMEMgLyBBbGxuZXQgQUxMMDE5MyAqLworCXsgVVNCX0RFVklDRSgweDBiM2IsIDB4MTYxMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBIUCBITjIxMFcgSjc4MDFBICovCisJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgwMTFjKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIFNpdGVjb20vWi1Db20vWnl4ZWwgTTRZLTc1MCAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBEeW5hbGluay9Bc2tleSBXTEwwMTMgKGludGVyc2lsKSAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBFWiBjb25uZWN0IDExTXBicyBXaXJlbGVzcyBVU0IgQWRhcHRlciBTTUMyNjYyVyB2MSAqLworCXsgVVNCX0RFVklDRSgweDBkNWMsIDB4YTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBCZW5RIEFXTDMwMCAqLworCXsgVVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBBZGR0cm9uIEFXVS0xMjAsIENvbXBleCBXTFUxMSAqLworCXsgVVNCX0RFVklDRSgweDA1ZGQsIDB4ZmYzMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBJbnRlbCBBUDMxMCBBbnlQb2ludCBJSSBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHg4MDg2LCAweDAyMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogRHluYWxpbmsgTDExVSAqLworCXsgVVNCX0RFVklDRSgweDBkOGUsIDB4NzEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBBcmVzY29tIFdMLTIxMCwgRkNDIGlkIDA3Si1HTDI0MTFVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDhlLCAweDcxMTApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogSS1PIERBVEEgV04tQjExL1VTQiAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBCVCBWb3lhZ2VyIDEwMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjlhLCAweDA4MjEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1pMzg2MworCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvMzg2MyBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpIH0sCisJLyogU2Ftc3VuZyBTV0wtMjEwMFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTVkLCAweGEwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy9SRk1EIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogRHluYWxpbmsvQXNrZXkgV0xMMDEzIChyZm1kKSAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuNiAqLworCXsgVVNCX0RFVklDRSgweDA3N2IsIDB4MjIxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTmV0d29yayBFdmVyeXdoZXJlIE5XVTExQiAqLworCXsgVVNCX0RFVklDRSgweDA3N2IsIDB4MjIyNyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTmV0Z2VhciBNQTEwMSByZXYuIEIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODY0LCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEQtTGluayBEV0wtMTIwIHJldi4gRSAqLworCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4MzIwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQWN0aW9udGVjIDgwMlVBVDEsIEhXVTAxMTUwLTAxVUsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjY4LCAweDc2MDUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEFpclZhc3QgVy1CdWRkaWUgV04yMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIERpY2sgU21pdGggRWxlY3Ryb25pY3MgWEgxMTUzIDgwMi4xMWIgVVNCIGFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDU3NDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIENOZXQgQ05VU0I2MTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEZpYmVyTGluZSBGTC1XTDIwMFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEJlblEgQVdMNDAwIFVTQiBzdGljayAqLworCXsgVVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogM0NvbSAzQ1JTSEVXNjk2ICovCisJeyBVU0JfREVWSUNFKDB4MDUwNiwgMHgwYTAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBTaWVtZW5zIFNhbnRpcyBBRFNMIFdMQU4gVVNCIGFkYXB0ZXIgV0xMIDAxMyAqLworCXsgVVNCX0RFVklDRSgweDA2ODEsIDB4MDAxYiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQmVsa2luIEY1RDYwNTAsIHZlcnNpb24gMiAqLworCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDA1MCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogaUJsaXR6eiwgQldVNjEzIChub3QgKkIgb3IgKlNCKSAqLworCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogR2lnYWJ5dGUgR04tV0xCTTEwMSAqLworCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogUGxhbmV4IEdXLVVTMTFTICovCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHgzMjIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBJbnRlcm5hbCBXTEFOIGFkYXB0ZXIgaW4gaDVbNCw1XXh4IHNlcmllcyBpUEFRcyAqLworCXsgVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTgpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIFVuaWRlbiBQQ1cxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWRkLCAweGZmMzUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qCisJICogYXQ3NmM1MDMtcmZtZC1hY2MKKwkgKi8KKwkvKiBTTUMyNjY0VyAqLworCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4MzUwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfQUNDKSB9LAorCS8qIEJlbGtpbiBGNUQ2MDUwLCBTTUMyNjYyVyB2MiwgU01DMjY2MlctQVIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDVjLCAweGEwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0FDQykgfSwKKwkvKgorCSAqIGF0NzZjNTA1LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDYpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1KSB9LAorCS8qCisJICogYXQ3NmM1MDUtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQsIE92aXNMaW5rIFdMLTExMzBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogRmliZXJsaW5lIEZMLVdMMjQwVSAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4MDAxNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBDTmV0IENOVVNCLTYxMUcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuOCAqLworCXsgVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBYdGVyYXN5cyBYTi0yMTIyQiwgSUJsaXR6eiBCV1U2MTNCL0JXVTYxM1NCICovCisJeyBVU0JfREVWSUNFKDB4MTJmZCwgMHgxMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIENvcmVnYSBXTEFOIFVTQiBTdGljayAxMSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4NzYxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBNaWNyb3N0YXIgTVNJIEJveCBNUzY5NzggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDEwMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyoKKwkgKiBhdDc2YzUwNWEtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QSBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKiBHZW5lcmljIEFUNzZDNTA1QVMgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE3KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpIH0sCisJLyogU2llbWVucyBHaWdhc2V0IFVTQiBXTEFOIEFkYXB0ZXIgMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3MDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKgorCSAqIGF0NzZjNTA1YW14LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QU1YIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBTVgpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2X3RhYmxlKTsKKworLyogU3VwcG9ydGVkIHJhdGVzIG9mIHRoaXMgaGFyZHdhcmUsIGJpdCA3IG1hcmtzIGJhc2ljIHJhdGVzICovCitzdGF0aWMgY29uc3QgdTggaHdfcmF0ZXNbXSA9IHsgMHg4MiwgMHg4NCwgMHgwYiwgMHgxNiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcHJlYW1ibGVzW10gPSB7ICJsb25nIiwgInNob3J0IiwgImF1dG8iIH07CisKKy8qIEZpcm13YXJlIGRvd25sb2FkICovCisvKiBERlUgc3RhdGVzICovCisjZGVmaW5lIFNUQVRFX0lETEUJCQkweDAwCisjZGVmaW5lIFNUQVRFX0RFVEFDSAkJCTB4MDEKKyNkZWZpbmUgU1RBVEVfREZVX0lETEUJCQkweDAyCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DCQkweDAzCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZCQkweDA0CisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9JRExFCQkweDA1CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DCQkweDA2CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVAkJMHgwNworI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVAkweDA4CisjZGVmaW5lIFNUQVRFX0RGVV9VUExPQURfSURMRQkJMHgwOQorI2RlZmluZSBTVEFURV9ERlVfRVJST1IJCQkweDBhCisKKy8qIERGVSBjb21tYW5kcyAqLworI2RlZmluZSBERlVfREVUQUNICQkJMAorI2RlZmluZSBERlVfRE5MT0FECQkJMQorI2RlZmluZSBERlVfVVBMT0FECQkJMgorI2RlZmluZSBERlVfR0VUU1RBVFVTCQkJMworI2RlZmluZSBERlVfQ0xSU1RBVFVTCQkJNAorI2RlZmluZSBERlVfR0VUU1RBVEUJCQk1CisjZGVmaW5lIERGVV9BQk9SVAkJCTYKKworI2RlZmluZSBGV19CTE9DS19TSVpFIDEwMjQKKworc3RydWN0IGRmdV9zdGF0dXMgeworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgcG9sbF90aW1lb3V0WzNdOworCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdHJpbmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzX2ludGVyc2lsKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYxIHx8IGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDNyZm1kKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwMyB8fCBib2FyZCA9PSBCT0FSRF81MDNfQUNDKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDVhKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwNUEgfHwgYm9hcmQgPT0gQk9BUkRfNTA1QU1YKTsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBmaXJzdCAoaW50ZXJuYWwpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRfZndfYmxvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBibG9ja25vLAorCQkJCSAgdm9pZCAqYmxvY2ssIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCBERlVfRE5MT0FELAorCQkJICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGJsb2Nrbm8sIDAsIGJsb2NrLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBhdDc2X2RmdV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZnVfc3RhdHVzICpzdGF0dXMpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIERGVV9HRVRTVEFUVVMsCisJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAgMCwgMCwgc3RhdHVzLCBzaXplb2Yoc3RydWN0IGRmdV9zdGF0dXMpLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCBhdDc2X2RmdV9nZXRfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0dFVFNUQVRFLAorCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgIDAsIDAsIHN0YXRlLCAxLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQ29udmVydCB0aW1lb3V0IGZyb20gdGhlIERGVSBzdGF0dXMgdG8gamlmZmllcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0NzZfZ2V0X3RpbWVvdXQoc3RydWN0IGRmdV9zdGF0dXMgKnMpCit7CisJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoKHMtPnBvbGxfdGltZW91dFsyXSA8PCAxNikKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMV0gPDwgOCkKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMF0pKTsKK30KKworLyogTG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBmcm9tIHRoZSBidWZmZXIuICBJZiBtYW5pZmVzdF9zeW5jX3RpbWVvdXQgPiAwLCB1c2UKKyAqIGl0cyB2YWx1ZSBpbiBqaWZmaWVzIGluIHRoZSBNQU5JRkVTVF9TWU5DIHN0YXRlLiAgKi8KK3N0YXRpYyBpbnQgYXQ3Nl91c2JkZnVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpidWYsIHUzMiBzaXplLAorCQkJCWludCBtYW5pZmVzdF9zeW5jX3RpbWVvdXQpCit7CisJdTggKmJsb2NrOworCXN0cnVjdCBkZnVfc3RhdHVzIGRmdV9zdGF0X2J1ZjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbmVlZF9kZnVfc3RhdGUgPSAxOworCWludCBpc19kb25lID0gMDsKKwl1OCBkZnVfc3RhdGUgPSAwOworCXUzMiBkZnVfdGltZW91dCA9IDA7CisJaW50IGJzaXplID0gMDsKKwlpbnQgYmxvY2tubyA9IDA7CisKKwlhdDc2X2RiZyhEQkdfREZVLCAiJXMoICVwLCAldSwgJWQpIiwgX19mdW5jX18sIGJ1Ziwgc2l6ZSwKKwkJIG1hbmlmZXN0X3N5bmNfdGltZW91dCk7CisKKwlpZiAoIXNpemUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgIkZXIGJ1ZmZlciBsZW5ndGggaW52YWxpZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbyB7CisJCWlmIChuZWVkX2RmdV9zdGF0ZSkgeworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXRlKHVkZXYsICZkZnVfc3RhdGUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiY2Fubm90IGdldCBERlUgc3RhdGU6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJfQorCisJCXN3aXRjaCAoZGZ1X3N0YXRlKSB7CisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX1NZTkM6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0RPV05MT0FEX1NZTkMiKTsKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQlkZnVfc3RhdGUgPSBkZnVfc3RhdF9idWYuc3RhdGU7CisJCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJCX0gZWxzZQorCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJhdDc2X2RmdV9nZXRfc3RhdHVzIHJldHVybmVkICVkXG4iLAorCQkJCQkgICByZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfQlVTWToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRE9XTkxPQURfQlVTWSIpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAxOworCisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVOiBSZXNldHRpbmcgZGV2aWNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJET1dOTE9BRC4uLiIpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgU1RBVEVfREZVX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIElETEUiKTsKKworCQkJYnNpemUgPSBtaW5fdChpbnQsIHNpemUsIEZXX0JMT0NLX1NJWkUpOworCQkJbWVtY3B5KGJsb2NrLCBidWYsIGJzaXplKTsKKwkJCWF0NzZfZGJnKERCR19ERlUsICJpbnQgZncsIHNpemUgbGVmdCA9ICU1ZCwgIgorCQkJCSAiYnNpemUgPSAlNGQsIGJsb2Nrbm8gPSAlMmQiLCBzaXplLCBic2l6ZSwKKwkJCQkgYmxvY2tubyk7CisJCQlyZXQgPQorCQkJICAgIGF0NzZfbG9hZF9pbnRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJCWJ1ZiArPSBic2l6ZTsKKwkJCXNpemUgLT0gYnNpemU7CisJCQlibG9ja25vKys7CisKKwkJCWlmIChyZXQgIT0gYnNpemUpCisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImF0NzZfbG9hZF9pbnRfZndfYmxvY2sgIgorCQkJCQkgICAicmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DIik7CisKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKworCQkJZGZ1X3N0YXRlID0gZGZ1X3N0YXRfYnVmLnN0YXRlOworCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCisJCQkvKiBvdmVycmlkZSB0aGUgdGltZW91dCBmcm9tIHRoZSBzdGF0dXMgcmVzcG9uc2UsCisJCQkgICBuZWVkZWQgZm9yIEFUNzZDNTA1QSAqLworCQkJaWYgKG1hbmlmZXN0X3N5bmNfdGltZW91dCA+IDApCisJCQkJZGZ1X3RpbWVvdXQgPSBtYW5pZmVzdF9zeW5jX3RpbWVvdXQ7CisKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlU6IFdhaXRpbmcgZm9yIG1hbmlmZXN0IHBoYXNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1Q6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUIik7CisJCQlpc19kb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQiKTsKKwkJCWlzX2RvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfVVBMT0FEX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX1VQTE9BRF9JRExFIik7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9FUlJPUjoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRVJST1IiKTsKKwkJCXJldCA9IC1FUElQRTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIFVOS05PV04gU1RBVEUgKCVkKSIsIGRmdV9zdGF0ZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghaXNfZG9uZSAmJiAocmV0ID49IDApKTsKKworZXhpdDoKKwlrZnJlZShibG9jayk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBIRVgyU1RSX0JVRkZFUlMgNAorI2RlZmluZSBIRVgyU1RSX01BWF9MRU4gNjQKKyNkZWZpbmUgQklOMkhFWCh4KSAoKHgpIDwgMTAgPyAnMCcgKyAoeCkgOiAoeCkgKyAnQScgLSAxMCkKKworLyogQ29udmVydCBiaW5hcnkgZGF0YSBpbnRvIGhleCBzdHJpbmcgKi8KK3N0YXRpYyBjaGFyICpoZXgyc3RyKHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbSEVYMlNUUl9CVUZGRVJTXVszICogSEVYMlNUUl9NQVhfTEVOICsgMV07CisJY2hhciAqcmV0ID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoSEVYMlNUUl9CVUZGRVJTIC0gMSldOworCWNoYXIgKm9idWYgPSByZXQ7CisJdTggKmlidWYgPSBidWY7CisKKwlpZiAobGVuID4gSEVYMlNUUl9NQVhfTEVOKQorCQlsZW4gPSBIRVgyU1RSX01BWF9MRU47CisKKwlpZiAobGVuIDw9IDApIHsKKwkJcmV0WzBdID0gJ1wwJzsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJKm9idWYrKyA9IEJJTjJIRVgoKmlidWYgPj4gNCk7CisJCSpvYnVmKysgPSBCSU4ySEVYKCppYnVmICYgMHhmKTsKKwkJKm9idWYrKyA9ICctJzsKKwkJaWJ1ZisrOworCX0KKwkqKC0tb2J1ZikgPSAnXDAnOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUMyU1RSX0JVRkZFUlMgNAorCitzdGF0aWMgaW5saW5lIGNoYXIgKm1hYzJzdHIodTggKm1hYykKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbTUFDMlNUUl9CVUZGRVJTXVs2ICogM107CisJY2hhciAqc3RyOworCisJc3RyID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoTUFDMlNUUl9CVUZGRVJTIC0gMSldOworCXNwcmludGYoc3RyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwlyZXR1cm4gc3RyOworfQorCisvKiBMRUQgdHJpZ2dlciAqLworc3RhdGljIGludCB0eF9hY3Rpdml0eTsKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBERUZJTkVfVElNRVIobGVkdHJpZ190eF90aW1lciwgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYywgMCwgMCk7CitERUZJTkVfTEVEX1RSSUdHRVIobGVkdHJpZ190eCk7CisKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0YXRpYyBpbnQgdHhfbGFzdGFjdGl2aXR5OworCisJaWYgKHR4X2xhc3RhY3Rpdml0eSAhPSB0eF9hY3Rpdml0eSkgeworCQl0eF9sYXN0YWN0aXZpdHkgPSB0eF9hY3Rpdml0eTsKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ190eCwgTEVEX0ZVTEwpOworCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworCX0gZWxzZQorCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX3R4LCBMRURfT0ZGKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KHZvaWQpCit7CisJdHhfYWN0aXZpdHkrKzsKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmxlZHRyaWdfdHhfdGltZXIpKQorCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworfQorCitzdGF0aWMgaW50IGF0NzZfcmVtYXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBhLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgTlVMTCwgMCwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2dldF9vcF9tb2RlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJdTggc2F2ZWQ7CisJdTggKm9wX21vZGU7CisKKwlvcF9tb2RlID0ga21hbGxvYygxLCBHRlBfTk9JTyk7CisJaWYgKCFvcF9tb2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDAxLCAwLCBvcF9tb2RlLCAxLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXNhdmVkID0gKm9wX21vZGU7CisJa2ZyZWUob3BfbW9kZSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlIGlmIChyZXQgPCAxKQorCQlyZXR1cm4gLUVJTzsKKwllbHNlCisJCXJldHVybiBzYXZlZDsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBzZWNvbmQgKCJleHRlcm5hbCIpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2xvYWRfZXh0X2Z3X2Jsb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYmxvY2tubywKKwkJCQkJIHZvaWQgKmJsb2NrLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAgMHgwODAyLCBibG9ja25vLCBibG9jaywgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkgIHVuaW9uIGF0NzZfaHdjZmcgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MGEwMiwgMCwKKwkJCSAgICAgICBidWYsIGJ1Zl9zaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKy8qIEludGVyc2lsIGJvYXJkcyB1c2UgYSBkaWZmZXJlbnQgInZhbHVlIiBmb3IgR2V0SFdDb25maWcgcmVxdWVzdHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZ19pbnRlcnNpbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICAgdW5pb24gYXQ3Nl9od2NmZyAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwOTAyLCAwLAorCQkJICAgICAgIGJ1ZiwgYnVmX3NpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworLyogR2V0IHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYWRhcHRlciBhbmQgcHV0IGl0IHRvIHRoZSBhcHByb3ByaWF0ZQorICogZmllbGRzIG9mICdwcml2JyAodGhlIEdldEhXQ29uZmlnIHJlcXVlc3QgYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSByZXN1bHQKKyAqIGRlcGVuZHMgb24gdGhlIGJvYXJkIHR5cGUpICovCitzdGF0aWMgaW50IGF0NzZfZ2V0X2h3X2NvbmZpZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJdW5pb24gYXQ3Nl9od2NmZyAqaHdjZmcgPSBrbWFsbG9jKHNpemVvZigqaHdjZmcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaHdjZmcpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGF0NzZfaXNfaW50ZXJzaWwocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnX2ludGVyc2lsKHByaXYtPnVkZXYsIGh3Y2ZnLAorCQkJCQkgICAgICAgc2l6ZW9mKGh3Y2ZnLT5pKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5pLm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPmkucmVndWxhdG9yeV9kb21haW47CisJfSBlbHNlIGlmIChhdDc2X2lzXzUwM3JmbWQocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnKHByaXYtPnVkZXYsIGh3Y2ZnLCBzaXplb2YoaHdjZmctPnIzKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5yMy5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5yMy5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9IGVsc2UgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmcocHJpdi0+dWRldiwgaHdjZmcsIHNpemVvZihod2NmZy0+cjUpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPnI1Lm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPnI1LnJlZ3VsYXRvcnlfZG9tYWluOworCX0KKworZXhpdDoKKwlrZnJlZShod2NmZyk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBnZXQgSFcgQ29uZmlnIChlcnJvciAlZClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJlZ19kb21haW4gY29uc3QgKmF0NzZfZ2V0X3JlZ19kb21haW4odTE2IGNvZGUpCit7CisJaW50IGk7CisJc3RhdGljIHN0cnVjdCByZWdfZG9tYWluIGNvbnN0IGZkX3RhYltdID0geworCQl7IDB4MTAsICJGQ0MgKFVTQSkiLCAweDdmZiB9LAkvKiBjaCAxLTExICovCisJCXsgMHgyMCwgIklDIChDYW5hZGEpIiwgMHg3ZmYgfSwJLyogY2ggMS0xMSAqLworCQl7IDB4MzAsICJFVFNJIChtb3N0IG9mIEV1cm9wZSkiLCAweDFmZmYgfSwJLyogY2ggMS0xMyAqLworCQl7IDB4MzEsICJTcGFpbiIsIDB4NjAwIH0sCS8qIGNoIDEwLTExICovCisJCXsgMHgzMiwgIkZyYW5jZSIsIDB4MWUwMCB9LAkvKiBjaCAxMC0xMyAqLworCQl7IDB4NDAsICJNS0sgKEphcGFuKSIsIDB4MjAwMCB9LAkvKiBjaCAxNCAqLworCQl7IDB4NDEsICJNS0sxIChKYXBhbikiLCAweDNmZmYgfSwJLyogY2ggMS0xNCAqLworCQl7IDB4NTAsICJJc3JhZWwiLCAweDNmYyB9LAkvKiBjaCAzLTkgKi8KKwkJeyAweDAwLCAiPHVua25vd24+IiwgMHhmZmZmZmZmZiB9CS8qIGNoIDEtMzIgKi8KKwl9OworCisJLyogTGFzdCBlbnRyeSBpcyBmYWxsYmFjayBmb3IgdW5rbm93biBkb21haW4gY29kZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZkX3RhYikgLSAxOyBpKyspCisJCWlmIChjb2RlID09IGZkX3RhYltpXS5jb2RlKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gJmZkX3RhYltpXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfbWliKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1MTYgbWliLCB2b2lkICpidWYsCisJCQkgICAgICAgaW50IGJ1Zl9zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBtaWIgPDwgOCwgMCwgYnVmLCBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDAgJiYgcmV0ICE9IGJ1Zl9zaXplKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gcG9zaXRpdmUgbnVtYmVyIGZvciBzdGF0dXMsIG5lZ2F0aXZlIGZvciBhbiBlcnJvciAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfY21kX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggY21kKQoreworCXU4ICpzdGF0X2J1ZjsKKwlpbnQgcmV0OworCisJc3RhdF9idWYgPSBrbWFsbG9jKDQwLCBHRlBfTk9JTyk7CisJaWYgKCFzdGF0X2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDIyLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQlVU0JfUkVDSVBfSU5URVJGQUNFLCBjbWQsIDAsIHN0YXRfYnVmLAorCQkJNDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHN0YXRfYnVmWzVdOworCWtmcmVlKHN0YXRfYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFLRV9DTURfQ0FTRShjKSBjYXNlIChjKTogcmV0dXJuICNjCitzdGF0aWMgY29uc3QgY2hhciAqYXQ3Nl9nZXRfY21kX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9DQVNFKENNRF9TRVRfTUlCKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfR0VUX01JQik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1NDQU4pOworCQlNQUtFX0NNRF9DQVNFKENNRF9KT0lOKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU1RBUlRfSUJTUyk7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1JBRElPX09OKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfUkFESU9fT0ZGKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU1RBUlRVUCk7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9jYXJkX2NvbW1hbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGNtZCwgdm9pZCAqYnVmLAorCQkJCSBpbnQgYnVmX3NpemUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9jb21tYW5kICpjbWRfYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKworCQkJCQkgICAgICAgYnVmX3NpemUsIEdGUF9LRVJORUwpOworCisJaWYgKCFjbWRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZF9idWYtPmNtZCA9IGNtZDsKKwljbWRfYnVmLT5yZXNlcnZlZCA9IDA7CisJY21kX2J1Zi0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zl9zaXplKTsKKwltZW1jcHkoY21kX2J1Zi0+ZGF0YSwgYnVmLCBidWZfc2l6ZSk7CisKKwlhdDc2X2RiZ19kdW1wKERCR19DTUQsIGNtZF9idWYsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArIGJ1Zl9zaXplLAorCQkgICAgICAiaXNzdWluZyBjb21tYW5kICVzICgweCUwMngpIiwKKwkJICAgICAgYXQ3Nl9nZXRfY21kX3N0cmluZyhjbWQpLCBjbWQpOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsIDAsIGNtZF9idWYsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKyBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlrZnJlZShjbWRfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BS0VfQ01EX1NUQVRVU19DQVNFKGMpCWNhc2UgKGMpOiByZXR1cm4gI2MKK3N0YXRpYyBjb25zdCBjaGFyICphdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lETEUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0NPTVBMRVRFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19VTktOT1dOKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUik7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRCk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfVElNRV9PVVQpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lOX1BST0dSRVNTKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19IT1NUX0ZBSUxVUkUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1NDQU5fRkFJTEVEKTsKKwl9CisKKwlyZXR1cm4gIlVOS05PV04iOworfQorCisvKiBXYWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGNvbXBsZXRlZCAqLworc3RhdGljIGludCBhdDc2X3dhaXRfY29tcGxldGlvbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgY21kKQoreworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBDTURfQ09NUExFVElPTl9USU1FT1VUOworCisJZG8geworCQlzdGF0dXMgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIGNtZCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9jbWRfc3RhdHVzIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCQlhdDc2X2RiZyhEQkdfV0FJVF9DT01QTEVURSwKKwkJCSAiJXM6IFdhaXRpbmcgb24gY21kICVkLCBzdGF0dXMgPSAlZCAoJXMpIiwKKwkJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgc3RhdHVzLAorCQkJIGF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHN0YXR1cykpOworCisJCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUworCQkgICAgJiYgc3RhdHVzICE9IENNRF9TVEFUVVNfSURMRSkKKwkJCWJyZWFrOworCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDEwKTsJLyogMTAwIG1zICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGNvbXBsZXRpb24gdGltZW91dCBmb3IgY29tbWFuZCAlZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCk7CisJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfbWliKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBzZXRfbWliX2J1ZmZlciAqYnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NFVF9NSUIsIGJ1ZiwKKwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IHNldF9taWJfYnVmZmVyLAorCQkJCQkgICAgIGRhdGEpICsgYnVmLT5zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TRVRfTUlCKTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiBzZXRfbWliOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQgIgorCQkgICAgICAgIndpdGggJWRcbiIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gPCAwIG9uIGVycm9yLCA9PSAwIGlmIG5vIGNvbW1hbmQgc2VudCwgPT0gMSBpZiBjbWQgc2VudCAqLworc3RhdGljIGludCBhdDc2X3NldF9yYWRpbyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisJaW50IGNtZDsKKworCWlmIChwcml2LT5yYWRpb19vbiA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJY21kID0gZW5hYmxlID8gQ01EX1JBRElPX09OIDogQ01EX1JBRElPX09GRjsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBjbWQsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQoJWQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgcmV0KTsKKwllbHNlCisJCXJldCA9IDE7CisKKwlwcml2LT5yYWRpb19vbiA9IGVuYWJsZTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXQgY3VycmVudCBwb3dlciBzYXZlIG1vZGUgKEFUNzZfUE1fT0ZGL0FUNzZfUE1fT04vQVQ3Nl9QTV9TTUFSVCkgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcG1fbW9kZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIHBvd2VyX21nbXRfbW9kZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBwcml2LT5wbV9tb2RlOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocG1fbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcHJlYW1ibGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTggdHlwZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCBwcmVhbWJsZV90eXBlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHR5cGU7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwcmVhbWJsZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfZnJhZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIGZyYWdfdGhyZXNob2xkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KHNpemUpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoZnJhZyB0aHJlc2hvbGQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X3J0cyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIHJ0c190aHJlc2hvbGQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChydHMpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2F1dG9yYXRlX2ZhbGxiYWNrKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCB0eGF1dG9yYXRlX2ZhbGxiYWNrKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IG9ub2ZmOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoYXV0b3JhdGUgZmFsbGJhY2spIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19hZGRyKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19hZGRyICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfYWRkciksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfQUREUiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19hZGRyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfQUREUikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19BRERSOiBtYWNfYWRkciAlcyByZXMgMHgleCAweCV4IiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG1hYzJzdHIobS0+bWFjX2FkZHIpLCBtLT5yZXNbMF0sIG0tPnJlc1sxXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+Z3JvdXBfYWRkcik7IGkrKykKKwkJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX0FERFI6IGdyb3VwIGFkZHIgJWQ6ICVzLCAiCisJCQkgInN0YXR1cyAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSwKKwkJCSBtYWMyc3RyKG0tPmdyb3VwX2FkZHJbaV0pLCBtLT5ncm91cF9hZGRyX3N0YXR1c1tpXSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY193ZXAoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBrZXlfbGVuOworCXN0cnVjdCBtaWJfbWFjX3dlcCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19XRVAsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfd2VwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfV0VQKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX1dFUDogcHJpdl9pbnZva2VkICV1IGRlZl9rZXlfaWQgJXUgIgorCQkgImtleV9sZW4gJXUgZXhjbF91bmVuY3IgJXUgd2VwX2ljdl9lcnIgJXUgd2VwX2V4Y2x1ZGVkICV1ICIKKwkJICJlbmNyX2xldmVsICV1IGtleSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG0tPnByaXZhY3lfaW52b2tlZCwgbS0+d2VwX2RlZmF1bHRfa2V5X2lkLAorCQkgbS0+d2VwX2tleV9tYXBwaW5nX2xlbiwgbS0+ZXhjbHVkZV91bmVuY3J5cHRlZCwKKwkJIGxlMzJfdG9fY3B1KG0tPndlcF9pY3ZfZXJyb3JfY291bnQpLAorCQkgbGUzMl90b19jcHUobS0+d2VwX2V4Y2x1ZGVkX2NvdW50KSwgbS0+ZW5jcnlwdGlvbl9sZXZlbCwKKwkJIG0tPndlcF9kZWZhdWx0X2tleV9pZCk7CisKKwlrZXlfbGVuID0gKG0tPmVuY3J5cHRpb25fbGV2ZWwgPT0gMSkgPworCSAgICBXRVBfU01BTExfS0VZX0xFTiA6IFdFUF9MQVJHRV9LRVlfTEVOOworCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspCisJCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19XRVA6IGtleSAlZDogJXMiLAorCQkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSwKKwkJCSBoZXgyc3RyKG0tPndlcF9kZWZhdWx0X2tleXZhbHVlW2ldLCBrZXlfbGVuKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19tZ210KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19tZ210ICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfTUdNVCwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfTUdNVCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19NR01UOiBiZWFjb25fcGVyaW9kICVkIENGUF9tYXhfZHVyYXRpb24gIgorCQkgIiVkIG1lZGl1bV9vY2N1cGFuY3lfbGltaXQgJWQgc3RhdGlvbl9pZCAweCV4IEFUSU1fd2luZG93ICVkICIKKwkJICJDRlBfbW9kZSAlZCBwcml2YWN5X29wdF9pbXBsICVkIERUSU1fcGVyaW9kICVkIENGUF9wZXJpb2QgJWQgIgorCQkgImN1cnJlbnRfYnNzaWQgJXMgY3VycmVudF9lc3NpZCAlcyBjdXJyZW50X2Jzc190eXBlICVkICIKKwkJICJwbV9tb2RlICVkIGlic3NfY2hhbmdlICVkIHJlcyAlZCAiCisJCSAibXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQgJWQgIgorCQkgImludGVybmF0aW9uYWxfcm9hbWluZyAlZCBjb3VudHJ5X3N0cmluZyAlLjNzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUobS0+YmVhY29uX3BlcmlvZCksCisJCSBsZTE2X3RvX2NwdShtLT5DRlBfbWF4X2R1cmF0aW9uKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1lZGl1bV9vY2N1cGFuY3lfbGltaXQpLAorCQkgbGUxNl90b19jcHUobS0+c3RhdGlvbl9pZCksIGxlMTZfdG9fY3B1KG0tPkFUSU1fd2luZG93KSwKKwkJIG0tPkNGUF9tb2RlLCBtLT5wcml2YWN5X29wdGlvbl9pbXBsZW1lbnRlZCwgbS0+RFRJTV9wZXJpb2QsCisJCSBtLT5DRlBfcGVyaW9kLCBtYWMyc3RyKG0tPmN1cnJlbnRfYnNzaWQpLAorCQkgaGV4MnN0cihtLT5jdXJyZW50X2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBtLT5jdXJyZW50X2Jzc190eXBlLCBtLT5wb3dlcl9tZ210X21vZGUsIG0tPmlic3NfY2hhbmdlLAorCQkgbS0+cmVzLCBtLT5tdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZCwKKwkJIG0tPm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQsIG0tPmNvdW50cnlfc3RyaW5nKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hYyAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9tYWMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQzogbWF4X3R4X21zZHVfbGlmZXRpbWUgJWQgIgorCQkgIm1heF9yeF9saWZldGltZSAlZCBmcmFnX3RocmVzaG9sZCAlZCBydHNfdGhyZXNob2xkICVkICIKKwkJICJjd21pbiAlZCBjd21heCAlZCBzaG9ydF9yZXRyeV90aW1lICVkIGxvbmdfcmV0cnlfdGltZSAlZCAiCisJCSAic2Nhbl90eXBlICVkIHNjYW5fY2hhbm5lbCAlZCBwcm9iZV9kZWxheSAldSAiCisJCSAibWluX2NoYW5uZWxfdGltZSAlZCBtYXhfY2hhbm5lbF90aW1lICVkIGxpc3Rlbl9pbnQgJWQgIgorCQkgImRlc2lyZWRfc3NpZCAlcyBkZXNpcmVkX2Jzc2lkICVzIGRlc2lyZWRfYnNzdHlwZSAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfdHhfbXNkdV9saWZldGltZSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfcnhfbGlmZXRpbWUpLAorCQkgbGUxNl90b19jcHUobS0+ZnJhZ190aHJlc2hvbGQpLCBsZTE2X3RvX2NwdShtLT5ydHNfdGhyZXNob2xkKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmN3bWluKSwgbGUxNl90b19jcHUobS0+Y3dtYXgpLAorCQkgbS0+c2hvcnRfcmV0cnlfdGltZSwgbS0+bG9uZ19yZXRyeV90aW1lLCBtLT5zY2FuX3R5cGUsCisJCSBtLT5zY2FuX2NoYW5uZWwsIGxlMTZfdG9fY3B1KG0tPnByb2JlX2RlbGF5KSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1pbl9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+bWF4X2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5saXN0ZW5faW50ZXJ2YWwpLAorCQkgaGV4MnN0cihtLT5kZXNpcmVkX3NzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIG1hYzJzdHIobS0+ZGVzaXJlZF9ic3NpZCksIG0tPmRlc2lyZWRfYnNzdHlwZSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX3BoeShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9waHkgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX1BIWSwgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChQSFkpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBQSFk6IGVkX3RocmVzaG9sZCAlZCBzbG90X3RpbWUgJWQgIgorCQkgInNpZnNfdGltZSAlZCBwcmVhbWJsZV9sZW5ndGggJWQgcGxjcF9oZWFkZXJfbGVuZ3RoICVkICIKKwkJICJtcGR1X21heF9sZW5ndGggJWQgY2NhX21vZGVfc3VwcG9ydGVkICVkIG9wZXJhdGlvbl9yYXRlX3NldCAiCisJCSAiMHgleCAweCV4IDB4JXggMHgleCBjaGFubmVsX2lkICVkIGN1cnJlbnRfY2NhX21vZGUgJWQgIgorCQkgInBoeV90eXBlICVkIGN1cnJlbnRfcmVnX2RvbWFpbiAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGxlMzJfdG9fY3B1KG0tPmVkX3RocmVzaG9sZCksCisJCSBsZTE2X3RvX2NwdShtLT5zbG90X3RpbWUpLCBsZTE2X3RvX2NwdShtLT5zaWZzX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+cHJlYW1ibGVfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnBsY3BfaGVhZGVyX2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5tcGR1X21heF9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+Y2NhX21vZGVfc3VwcG9ydGVkKSwgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzBdLAorCQkgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzFdLCBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMl0sCisJCSBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbM10sIG0tPmNoYW5uZWxfaWQsIG0tPmN1cnJlbnRfY2NhX21vZGUsCisJCSBtLT5waHlfdHlwZSwgbS0+Y3VycmVudF9yZWdfZG9tYWluKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbG9jYWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbG9jYWwgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX0xPQ0FMLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9sb2NhbCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTE9DQUwpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBMT0NBTDogYmVhY29uX2VuYWJsZSAlZCAiCisJCSAidHhhdXRvcmF0ZV9mYWxsYmFjayAlZCBzc2lkX3NpemUgJWQgcHJvbWlzY3VvdXNfbW9kZSAlZCAiCisJCSAicHJlYW1ibGVfdHlwZSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG0tPmJlYWNvbl9lbmFibGUsCisJCSBtLT50eGF1dG9yYXRlX2ZhbGxiYWNrLCBtLT5zc2lkX3NpemUsIG0tPnByb21pc2N1b3VzX21vZGUsCisJCSBtLT5wcmVhbWJsZV90eXBlKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWRvbWFpbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tZG9tYWluICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tZG9tYWluKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTURPTUFJTiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1ET01BSU4pIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiBjaGFubmVsX2xpc3QgJXMiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgaGV4MnN0cihtLT5jaGFubmVsX2xpc3QsIHNpemVvZihtLT5jaGFubmVsX2xpc3QpKSk7CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiB0eF9wb3dlcmxldmVsICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIGhleDJzdHIobS0+dHhfcG93ZXJsZXZlbCwgc2l6ZW9mKG0tPnR4X3Bvd2VybGV2ZWwpKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCisvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfc3RhcnRfbW9uaXRvcihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9zY2FuIHNjYW47CisJaW50IHJldDsKKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9zY2FuKSk7CisJbWVtc2V0KHNjYW4uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKworCXNjYW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJc2Nhbi5zY2FuX3R5cGUgPSBTQ0FOX1RZUEVfUEFTU0lWRTsKKwlzY2FuLmludGVybmF0aW9uYWxfc2NhbiA9IDA7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NDQU4sICZzY2FuLCBzaXplb2Yoc2NhbikpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBDTURfU0NBTik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxjdWxhdGUgcGFkZGluZyBmcm9tIHR4YnVmLT53bGVuZ3RoICh3aGljaCBleGNsdWRlcyB0aGUgVVNCIFRYIGhlYWRlciksCisgICBsaWtlbHkgdG8gY29tcGVuc2F0ZSBhIGZsYXcgaW4gdGhlIEFUNzZDNTAzQSBVU0IgcGFydCAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfY2FsY19wYWRkaW5nKGludCB3bGVuKQoreworCS8qIGFkZCB0aGUgVVNCIFRYIGhlYWRlciAqLworCXdsZW4gKz0gQVQ3Nl9UWF9IRFJMRU47CisKKwl3bGVuID0gd2xlbiAlIDY0OworCisJaWYgKHdsZW4gPCA1MCkKKwkJcmV0dXJuIDUwIC0gd2xlbjsKKworCWlmICh3bGVuID49IDYxKQorCQlyZXR1cm4gNjQgKyA1MCAtIHdsZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKworCXByaXYtPnJ4X3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdWJtaXRfcnhfdXJiKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCisJaWYgKCFwcml2LT5yeF91cmIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHByaXYtPnJ4X3VyYiBpcyBOVUxMXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc2tiKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X2J1ZmZlcikpOworCQlpZiAoIXNrYikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIHJ4IHNrYnVmZlxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlwcml2LT5yeF9za2IgPSBza2I7CisJfSBlbHNlIHsKKwkJc2tiX3B1c2goc2tiLCBza2JfaGVhZHJvb20oc2tiKSk7CisJCXNrYl90cmltKHNrYiwgMCk7CisJfQorCisJc2l6ZSA9IHNrYl90YWlscm9vbShza2IpOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnJ4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+cnhfcGlwZSwKKwkJCSAgc2tiX3B1dChza2IsIHNpemUpLCBzaXplLCBhdDc2X3J4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5yeF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RFVikKKwkJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIHJldHVybmVkIC1FTk9ERVYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcngsIHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCX0KKworZXhpdDoKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0RFVikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHN1Ym1pdCByeCB1cmIgLSBwbGVhc2UgdW5sb2FkIHRoZSAiCisJCSAgICAgICAiZHJpdmVyIGFuZC9vciBwb3dlciBjeWNsZSB0aGUgZGV2aWNlXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGV4dGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9leHRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBvcF9tb2RlOworCWludCBibG9ja25vID0gMDsKKwlpbnQgYnNpemU7CisJdTggKmJsb2NrOworCXU4ICpidWYgPSBmd2UtPmV4dGZ3OworCWludCBzaXplID0gZndlLT5leHRmd19zaXplOworCisJaWYgKCFidWYgfHwgIXNpemUpCisJCXJldHVybiAtRU5PRU5UOworCisJb3BfbW9kZSA9IGF0NzZfZ2V0X29wX21vZGUodWRldik7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAib3Btb2RlICVkIiwgb3BfbW9kZSk7CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNIKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIG9wbW9kZSAlZFxuIiwKKwkJCSAgIG9wX21vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSIpOworCisJLyogZm9yIGZ3ID49IDAuMTAwLCB0aGUgZGV2aWNlIG5lZWRzIGFuIGV4dHJhIGVtcHR5IGJsb2NrICovCisJZG8geworCQlic2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgRldfQkxPQ0tfU0laRSk7CisJCW1lbWNweShibG9jaywgYnVmLCBic2l6ZSk7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCSAiZXh0IGZ3LCBzaXplIGxlZnQgPSAlNWQsIGJzaXplID0gJTRkLCBibG9ja25vID0gJTJkIiwKKwkJCSBzaXplLCBic2l6ZSwgYmxvY2tubyk7CisJCXJldCA9IGF0NzZfbG9hZF9leHRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJaWYgKHJldCAhPSBic2l6ZSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAibG9hZGluZyAlZHRoIGZpcm13YXJlIGJsb2NrIGZhaWxlZDogJWRcbiIsCisJCQkJICAgYmxvY2tubywgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlidWYgKz0gYnNpemU7CisJCXNpemUgLT0gYnNpemU7CisJCWJsb2Nrbm8rKzsKKwl9IHdoaWxlIChic2l6ZSA+IDApOworCisJaWYgKGF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpKSB7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIjIwMCBtcyBkZWxheSBmb3IgNTA1YSIpOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyA1ICsgMSk7CisJfQorCitleGl0OgorCWtmcmVlKGJsb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGludGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBuZWVkX3JlbWFwID0gIWF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpOworCisJcmV0ID0gYXQ3Nl91c2JkZnVfZG93bmxvYWQodWRldiwgZndlLT5pbnRmdywgZndlLT5pbnRmd19zaXplLAorCQkJCSAgIG5lZWRfcmVtYXAgPyAwIDogMiAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgaW50ZXJuYWwgZncgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJzZW5kaW5nIFJFTUFQIik7CisKKwkvKiBubyBSRU1BUCBmb3IgNTA1QSAoc2VlIFNGIGRyaXZlcikgKi8KKwlpZiAobmVlZF9yZW1hcCkgeworCQlyZXQgPSBhdDc2X3JlbWFwKHVkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAic2VuZGluZyBSRU1BUCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInNsZWVwaW5nIGZvciAyIHNlY29uZHMiKTsKKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMiAqIEhaICsgMSk7CisJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyAqY2NmZyA9ICZwcml2LT5jYXJkX2NvbmZpZzsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogc3NpZCAlLipzICglcykgbW9kZSAlcyBjaCAlZCB3ZXAgJXMga2V5ICVkICIKKwkJICJrZXlsZW4gJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHByaXYtPmVzc2lkX3NpemUsCisJCSBwcml2LT5lc3NpZCwgaGV4MnN0cihwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgcHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DID8gImFkaG9jIiA6ICJpbmZyYSIsCisJCSBwcml2LT5jaGFubmVsLCBwcml2LT53ZXBfZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCSBwcml2LT53ZXBfa2V5X2lkLCBwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0pOworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHByZWFtYmxlICVzIHJ0cyAlZCByZXRyeSAlZCBmcmFnICVkICIKKwkJICJ0eHJhdGUgJXMgYXV0aF9tb2RlICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgcHJlYW1ibGVzW3ByaXYtPnByZWFtYmxlX3R5cGVdLCBwcml2LT5ydHNfdGhyZXNob2xkLAorCQkgcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQsIHByaXYtPmZyYWdfdGhyZXNob2xkLAorCQkgcHJpdi0+dHhyYXRlID09IFRYX1JBVEVfMU1CSVQgPyAiMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzJNQklUID8gIjJNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV81XzVNQklUID8gIjUuNU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzExTUJJVCA/ICIxMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFX0FVVE8gPyAiYXV0byIgOiAiPGludmFsaWQ+IiwgcHJpdi0+YXV0aF9tb2RlKTsKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBwbV9tb2RlICVkIHBtX3BlcmlvZCAlZCBhdXRoX21vZGUgJXMgIgorCQkgInNjYW5fdGltZXMgJWQgJWQgc2Nhbl9tb2RlICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+cG1fbW9kZSwgcHJpdi0+cG1fcGVyaW9kLAorCQkgcHJpdi0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOID8gIm9wZW4iIDogInNoYXJlZF9zZWNyZXQiLAorCQkgcHJpdi0+c2Nhbl9taW5fdGltZSwgcHJpdi0+c2Nhbl9tYXhfdGltZSwKKwkJIHByaXYtPnNjYW5fbW9kZSA9PSBTQ0FOX1RZUEVfQUNUSVZFID8gImFjdGl2ZSIgOiAicGFzc2l2ZSIpOworCisJbWVtc2V0KGNjZmcsIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWNjZmctPnByb21pc2N1b3VzX21vZGUgPSAwOworCWNjZmctPnNob3J0X3JldHJ5X2xpbWl0ID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CisKKwlpZiAocHJpdi0+d2VwX2VuYWJsZWQpIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSA+IFdFUF9TTUFMTF9LRVlfTEVOKQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMjsKKwkJZWxzZQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMTsKKworCQkvKiBqYWw6IGFsd2F5cyBleGNsdWRlIHVuZW5jcnlwdGVkIGlmIFdFUCBpcyBhY3RpdmUgKi8KKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7CisJfSBlbHNlIHsKKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CisJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDA7CisJfQorCisJY2NmZy0+cnRzX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHByaXYtPnJ0c190aHJlc2hvbGQpOworCWNjZmctPmZyYWdtZW50YXRpb25fdGhyZXNob2xkID0gY3B1X3RvX2xlMTYocHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCisJbWVtY3B5KGNjZmctPmJhc2ljX3JhdGVfc2V0LCBod19yYXRlcywgNCk7CisJLyogamFsOiByZWFsbHkgbmVlZGVkLCB3ZSBkbyBhIHNldF9taWIgZm9yIGF1dG9yYXRlIGxhdGVyID8/PyAqLworCWNjZmctPmF1dG9fcmF0ZV9mYWxsYmFjayA9IChwcml2LT50eHJhdGUgPT0gVFhfUkFURV9BVVRPID8gMSA6IDApOworCWNjZmctPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCWNjZmctPnByaXZhY3lfaW52b2tlZCA9IHByaXYtPndlcF9lbmFibGVkOworCW1lbWNweShjY2ZnLT5jdXJyZW50X3NzaWQsIHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJY2NmZy0+c3NpZF9sZW4gPSBwcml2LT5lc3NpZF9zaXplOworCisJY2NmZy0+d2VwX2RlZmF1bHRfa2V5X2lkID0gcHJpdi0+d2VwX2tleV9pZDsKKwltZW1jcHkoY2NmZy0+d2VwX2RlZmF1bHRfa2V5X3ZhbHVlLCBwcml2LT53ZXBfa2V5cywKKwkgICAgICAgc2l6ZW9mKHByaXYtPndlcF9rZXlzKSk7CisKKwljY2ZnLT5zaG9ydF9wcmVhbWJsZSA9IHByaXYtPnByZWFtYmxlX3R5cGU7CisJY2NmZy0+YmVhY29uX3BlcmlvZCA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9wZXJpb2QpOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TVEFSVFVQLCAmcHJpdi0+Y2FyZF9jb25maWcsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TVEFSVFVQKTsKKworCS8qIHJlbW92ZSBCU1NJRCBmcm9tIHByZXZpb3VzIHJ1biAqLworCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCisJaWYgKGF0NzZfc2V0X3JhZGlvKHByaXYsIDEpID09IDEpCisJCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9SQURJT19PTik7CisKKwlyZXQgPSBhdDc2X3NldF9wcmVhbWJsZShwcml2LCBwcml2LT5wcmVhbWJsZV90eXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X2ZyYWcocHJpdiwgcHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfcnRzKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfYXV0b3JhdGVfZmFsbGJhY2socHJpdiwKKwkJCQkJIHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFX0FVVE8gPyAxIDogMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGF0NzZfZGVidWcgJiBEQkdfTUlCKSB7CisJCWF0NzZfZHVtcF9taWJfbWFjKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19hZGRyKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19tZ210KHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY193ZXAocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWRvbWFpbihwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9waHkocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbG9jYWwocHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zZXRfcHJvbWlzYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3NldF9wcm9taXNjKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHByb21pc2N1b3VzX21vZGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gcHJpdi0+cHJvbWlzYyA/IDEgOiAwOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocHJvbWlzY3VvdXNfbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogU3VibWl0IFJ4IHVyYiBiYWNrIHRvIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zdWJtaXRfcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zdWJtaXRfcngpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSAoc3RydWN0IHVyYiAqKXBhcmFtOworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWY7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0geyAwIH07CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgeworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkZXZpY2UgdW5wbHVnZ2VkIik7CisJCWlmICh1cmIpCisJCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJ1cmIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwcml2LT5yeF9za2IgfHwgIXByaXYtPnJ4X3NrYi0+ZGF0YSkKKwkJcmV0dXJuOworCisJYnVmID0gKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXByaXYtPnJ4X3NrYi0+ZGF0YTsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQorCQkJYXQ3Nl9kYmcoREJHX1VSQiwKKwkJCQkgIiVzICVzOiAtIG5vbnplcm8gUnggYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkgX19mdW5jX18sIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJCQkgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJYXQ3Nl9kYmcoREJHX1JYX0FUTUVMX0hEUiwKKwkJICIlczogcnggZnJhbWU6IHJhdGUgJWQgcnNzaSAlZCBub2lzZSAlZCBsaW5rICVkIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgYnVmLT5yeF9yYXRlLCBidWYtPnJzc2ksCisJCSBidWYtPm5vaXNlX2xldmVsLCBidWYtPmxpbmtfcXVhbGl0eSk7CisKKwlza2JfcHVsbChwcml2LT5yeF9za2IsIEFUNzZfUlhfSERSTEVOKTsKKwlza2JfdHJpbShwcml2LT5yeF9za2IsIGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCkpOworCWF0NzZfZGJnX2R1bXAoREJHX1JYX0RBVEEsIHByaXYtPnJ4X3NrYi0+ZGF0YSwKKwkJICAgICAgcHJpdi0+cnhfc2tiLT5sZW4sICJSWDogbGVuPSVkIiwgcHJpdi0+cnhfc2tiLT5sZW4pOworCisJcnhfc3RhdHVzLnNpZ25hbCA9IGJ1Zi0+cnNzaTsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiY2FsbGluZyBpZWVlODAyMTFfcnhfaXJxc2FmZSgpOiAlZC8lZCIsCisJCSBwcml2LT5yeF9za2ItPmxlbiwgcHJpdi0+cnhfc2tiLT5kYXRhX2xlbik7CisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHByaXYtPnJ4X3NrYiwgJnJ4X3N0YXR1cyk7CisKKwkvKiBVc2UgYSBuZXcgc2tiIGZvciB0aGUgbmV4dCByZWNlaXZlICovCisJcHJpdi0+cnhfc2tiID0gTlVMTDsKKworCWF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKK30KKworLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgYW5kIHBhcnNlIGl0ICovCitzdGF0aWMgc3RydWN0IGZ3ZW50cnkgKmF0NzZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICBlbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnN0cjsKKwlzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKmZ3aDsKKwlzdHJ1Y3QgZndlbnRyeSAqZndlID0gJmZpcm13YXJlc1tib2FyZF90eXBlXTsKKworCW11dGV4X2xvY2soJmZ3X211dGV4KTsKKworCWlmIChmd2UtPmxvYWRlZCkgeworCQlhdDc2X2RiZyhEQkdfRlcsICJyZS11c2luZyBwcmV2aW91c2x5IGxvYWRlZCBmdyIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZG93bmxvYWRpbmcgZmlybXdhcmUgJXMiLCBmd2UtPmZ3bmFtZSk7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndlLT5mdywgZndlLT5md25hbWUsICZ1ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBub3QgZm91bmQhXG4iLAorCQkJICAgZndlLT5md25hbWUpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgInlvdSBtYXkgbmVlZCB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgZnJvbSAiCisJCQkgICAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2F0NzZjNTAzYS9cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZ290IGl0LiIpOworCWZ3aCA9IChzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKikoZndlLT5mdy0+ZGF0YSk7CisKKwlpZiAoZndlLT5mdy0+c2l6ZSA8PSBzaXplb2YoKmZ3aCkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJmaXJtd2FyZSBpcyB0b28gc2hvcnQgKDB4JXp4KVxuIiwgZndlLT5mdy0+c2l6ZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBDUkMgY3VycmVudGx5IG5vdCBjaGVja2VkICovCisJZndlLT5ib2FyZF90eXBlID0gbGUzMl90b19jcHUoZndoLT5ib2FyZF90eXBlKTsKKwlpZiAoZndlLT5ib2FyZF90eXBlICE9IGJvYXJkX3R5cGUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJib2FyZCB0eXBlIG1pc21hdGNoLCByZXF1ZXN0ZWQgJXUsIGdvdCAldVxuIiwKKwkJCSAgIGJvYXJkX3R5cGUsIGZ3ZS0+Ym9hcmRfdHlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmd2UtPmZ3X3ZlcnNpb24ubWFqb3IgPSBmd2gtPm1ham9yOworCWZ3ZS0+ZndfdmVyc2lvbi5taW5vciA9IGZ3aC0+bWlub3I7CisJZndlLT5md192ZXJzaW9uLnBhdGNoID0gZndoLT5wYXRjaDsKKwlmd2UtPmZ3X3ZlcnNpb24uYnVpbGQgPSBmd2gtPmJ1aWxkOworCisJc3RyID0gKGNoYXIgKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPnN0cl9vZmZzZXQpOworCWZ3ZS0+aW50ZncgPSAodTggKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPmludF9md19vZmZzZXQpOworCWZ3ZS0+aW50Zndfc2l6ZSA9IGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbik7CisJZndlLT5leHRmdyA9ICh1OCAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X29mZnNldCk7CisJZndlLT5leHRmd19zaXplID0gbGUzMl90b19jcHUoZndoLT5leHRfZndfbGVuKTsKKworCWZ3ZS0+bG9hZGVkID0gMTsKKworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnVkZXYtPmRldiwKKwkJICAgInVzaW5nIGZpcm13YXJlICVzICh2ZXJzaW9uICVkLiVkLiVkLSVkKVxuIiwKKwkJICAgZndlLT5md25hbWUsIGZ3aC0+bWFqb3IsIGZ3aC0+bWlub3IsIGZ3aC0+cGF0Y2gsIGZ3aC0+YnVpbGQpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiYm9hcmQgJXUsIGludCAlZDolZCwgZXh0ICVkOiVkIiwgYm9hcmRfdHlwZSwKKwkJIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X29mZnNldCksIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbiksCisJCSBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19vZmZzZXQpLCBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19sZW4pKTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJmaXJtd2FyZSBpZCAlcyIsIHN0cik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZmd19tdXRleCk7CisKKwlpZiAoZndlLT5sb2FkZWQpCisJCXJldHVybiBmd2U7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9tYWM4MDIxMV90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHByaXYtPnR4X3NrYik7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCQkvKiBmYWlsLCB1cmIgaGFzIGJlZW4gdW5saW5rZWQgKi8KKwkJLyogRklYTUU6IGFkZCBlcnJvciBtZXNzYWdlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF0NzZfZGJnKERCR19VUkIsICIlcyAtIG5vbnplcm8gdHggc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgcHJpdi0+dHhfc2tiKTsKKworCXByaXYtPnR4X3NrYiA9IE5VTEw7CisKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworfQorCitzdGF0aWMgaW50IGF0NzZfbWFjODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhfYnVmZmVyID0gcHJpdi0+YnVsa19vdXRfYnVmZmVyOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbnQgcGFkZGluZywgc3VibWl0X2xlbiwgcmV0OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCWlmIChwcml2LT50eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgY2FsbGVkIHdoaWxlIHR4IHVyYiBpcyBwZW5kaW5nXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KCk7CS8qIHRlbGwgbGVkdHJpZ2dlciB3ZSBzZW5kIGEgcGFja2V0ICovCisKKwlXQVJOX09OKHByaXYtPnR4X3NrYiAhPSBOVUxMKTsKKworCXByaXYtPnR4X3NrYiA9IHNrYjsKKwlwYWRkaW5nID0gYXQ3Nl9jYWxjX3BhZGRpbmcoc2tiLT5sZW4pOworCXN1Ym1pdF9sZW4gPSBBVDc2X1RYX0hEUkxFTiArIHNrYi0+bGVuICsgcGFkZGluZzsKKworCS8qIHNldHVwICdBdG1lbCcgaGVhZGVyICovCisJbWVtc2V0KHR4X2J1ZmZlciwgMCwgc2l6ZW9mKCp0eF9idWZmZXIpKTsKKwl0eF9idWZmZXItPnBhZGRpbmcgPSBwYWRkaW5nOworCXR4X2J1ZmZlci0+d2xlbmd0aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKwl0eF9idWZmZXItPnR4X3JhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIGluZm8pLT5od192YWx1ZTsKKwltZW1zZXQodHhfYnVmZmVyLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHR4X2J1ZmZlci0+cmVzZXJ2ZWQpKTsKKwltZW1jcHkodHhfYnVmZmVyLT5wYWNrZXQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJYXQ3Nl9kYmcoREJHX1RYX0RBVEEsICIlcyB0eDogd2xlbiAweCV4IHBhZCAweCV4IHJhdGUgJWQgaGRyIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUodHhfYnVmZmVyLT53bGVuZ3RoKSwKKwkJIHR4X2J1ZmZlci0+cGFkZGluZywgdHhfYnVmZmVyLT50eF9yYXRlKTsKKworCS8qIHNlbmQgc3R1ZmYgKi8KKwlhdDc2X2RiZ19kdW1wKERCR19UWF9EQVRBX0NPTlRFTlQsIHR4X2J1ZmZlciwgc3VibWl0X2xlbiwKKwkJICAgICAgIiVzKCk6IHR4X2J1ZmZlciAlZCBieXRlczoiLCBfX2Z1bmNfXywgc3VibWl0X2xlbik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+dHhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT50eF9waXBlLCB0eF9idWZmZXIsCisJCQkgIHN1Ym1pdF9sZW4sIGF0NzZfbWFjODAyMTFfdHhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJaWYgKHJldCA9PSAtRUlOVkFMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiAtRUlOVkFMOiB0eCB1cmIgJXAgaGNwcml2ICVwIGNvbXBsZXRlICVwXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+dHhfdXJiLAorCQkJICAgICAgIHByaXYtPnR4X3VyYi0+aGNwcml2LCBwcml2LT50eF91cmItPmNvbXBsZXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X21hYzgwMjExX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlyZXQgPSBhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Blbjogc3VibWl0X3J4X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCWF0NzZfc3RhcnR1cF9kZXZpY2UocHJpdik7CisKKwlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlpZiAoIXByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKKwkJLyogV2UgYXJlIGNhbGxlZCBieSAiaWZjb25maWcgZXRoWCBkb3duIiwgbm90IGJlY2F1c2UgdGhlCisJCSAqIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuICovCisJCWF0NzZfc2V0X3JhZGlvKHByaXYsIDApOworCisJCS8qIFdlIHVubGluayByeF91cmIgYmVjYXVzZSBhdDc2X29wZW4oKSByZS1zdWJtaXRzIGl0LgorCQkgKiBJZiB1bnBsdWdnZWQsIGF0NzZfZGVsZXRlX2RldmljZSgpIHRha2VzIGNhcmUgb2YgaXQuICovCisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworc3RhdGljIGludCBhdDc2X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9qb2luKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcmVxX2pvaW4gam9pbjsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZqb2luLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKKwltZW1jcHkoam9pbi5lc3NpZCwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX3NpemUpOworCWpvaW4uZXNzaWRfc2l6ZSA9IHByaXYtPmVzc2lkX3NpemU7CisJbWVtY3B5KGpvaW4uYnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJam9pbi5ic3NfdHlwZSA9IElORlJBU1RSVUNUVVJFX01PREU7CisJam9pbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwlqb2luLnRpbWVvdXQgPSBjcHVfdG9fbGUxNigyMDAwKTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9KT0lOIiwgX19mdW5jX18pOworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfSk9JTiwgJmpvaW4sCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9KT0lOKTsKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogQ01EX0pPSU4gcmV0dXJuZWQ6IDB4JTAyeCIsIF9fZnVuY19fLCByZXQpOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfaHdfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19od19zY2FuLndvcmspOworCWludCByZXQ7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXJldCA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgQ01EX1NDQU4pOworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBDTURfU0NBTiBzdGF0dXMgMHglMDJ4IiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBGSVhNRTogYWRkIG1heGltdW0gdGltZSBmb3Igc2NhbiB0byBjb21wbGV0ZSAqLworCisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKKwkJCQkgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5ic3NpZCkpCisJCWF0NzZfam9pbihwcml2KTsKKworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgaW50IGF0NzZfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0NzZfcmVxX3NjYW4gc2NhbjsKKwl1OCAqc3NpZCA9IE5VTEw7CisJaW50IHJldCwgbGVuID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IiwgX19mdW5jX18pOworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbikpOworCW1lbXNldChzY2FuLmJzc2lkLCAweEZGLCBFVEhfQUxFTik7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNjYW4uc2Nhbl90eXBlID0gU0NBTl9UWVBFX0FDVElWRTsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9IGVsc2UgeworCQlzY2FuLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9QQVNTSVZFOworCX0KKworCWlmIChsZW4pIHsKKwkJbWVtY3B5KHNjYW4uZXNzaWQsIHNzaWQsIGxlbik7CisJCXNjYW4uZXNzaWRfc2l6ZSA9IGxlbjsKKwl9CisKKwlzY2FuLm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21pbl90aW1lKTsKKwlzY2FuLm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21heF90aW1lKTsKKwlzY2FuLnByb2JlX2RlbGF5ID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9taW5fdGltZSAqIDEwMDApOworCXNjYW4uaW50ZXJuYXRpb25hbF9zY2FuID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9TQ0FOIiwgX19mdW5jX18pOworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0NBTiwgJnNjYW4sIHNpemVvZihzY2FuKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIkNNRF9TQ0FOIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5kd29ya19od19zY2FuLAorCQkJICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbm5lbCAlZCByYWRpbyAlZCIsCisJCSBfX2Z1bmNfXywgaHctPmNvbmYuY2hhbm5lbC0+aHdfdmFsdWUsCisJCSBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+Y2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQlhdDc2X2pvaW4ocHJpdik7CisJZWxzZQorCQlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiIsIF9fZnVuY19fKTsKKwlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgY29uZi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQkvKiBtYWM4MDIxMSBpcyBqb2luaW5nIGEgYnNzICovCisJCWF0NzZfam9pbihwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCisvKiBtdXN0IGJlIGF0b21pYyAqLworc3RhdGljIHZvaWQgYXQ3Nl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLCBpbnQgbWNfY291bnQsCisJCQkJICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGZsYWdzOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbmdlZF9mbGFncz0weCUwOHggIgorCQkgInRvdGFsX2ZsYWdzPTB4JTA4eCBtY19jb3VudD0lZCIsCisJCSBfX2Z1bmNfXywgY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzLCBtY19jb3VudCk7CisKKwlmbGFncyA9IGNoYW5nZWRfZmxhZ3MgJiBBVDc2X1NVUFBPUlRFRF9GSUxURVJTOworCSp0b3RhbF9mbGFncyA9IEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlM7CisKKwkvKiBCYWlsIG91dCBhZnRlciB1cGRhdGluZyBmbGFncyB0byBwcmV2ZW50IGEgV0FSTl9PTiBpbiBtYWM4MDIxMS4gKi8KKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJLyogRklYTUU6IGFjY2VzcyB0byBwcml2LT5wcm9taXNjIHNob3VsZCBiZSBwcm90ZWN0ZWQgd2l0aAorCSAqIHByaXYtPm10eCwgYnV0IGl0J3MgaW1wb3NzaWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKwkgKiBhdG9taWMgKi8KKworCWlmIChmbGFncyAmJiAhcHJpdi0+cHJvbWlzYykgeworCQkvKiBtYWM4MDIxMSB3YW50cyB1cyB0byBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCQlwcml2LT5wcm9taXNjID0gMTsKKwl9IGVsc2UgaWYgKCFmbGFncyAmJiBwcml2LT5wcm9taXNjKSB7CisJCS8qIHdlIG5lZWQgdG8gZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCisJCXByaXYtPnByb21pc2MgPSAwOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlxdWV1ZV93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpbnQgaTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IGNtZCAlZCBrZXktPmFsZyAlZCBrZXktPmtleWlkeCAlZCAiCisJCSAia2V5LT5rZXlsZW4gJWQiLAorCQkgX19mdW5jX18sIGNtZCwga2V5LT5hbGcsIGtleS0+a2V5aWR4LCBrZXktPmtleWxlbik7CisKKwlpZiAoa2V5LT5hbGcgIT0gQUxHX1dFUCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJa2V5LT5od19rZXlfaWR4ID0ga2V5LT5rZXlpZHg7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNFVF9LRVk6CisJCW1lbWNweShwcml2LT53ZXBfa2V5c1trZXktPmtleWlkeF0sIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCXByaXYtPndlcF9rZXlzX2xlbltrZXktPmtleWlkeF0gPSBrZXktPmtleWxlbjsKKworCQkvKiBGSVhNRTogZmluZCBvdXQgaG93IHRvIGRvIHRoaXMgcHJvcGVybHkgKi8KKwkJcHJpdi0+d2VwX2tleV9pZCA9IGtleS0+a2V5aWR4OworCisJCWJyZWFrOworCWNhc2UgRElTQUJMRV9LRVk6CisJZGVmYXVsdDoKKwkJcHJpdi0+d2VwX2tleXNfbGVuW2tleS0+a2V5aWR4XSA9IDA7CisJCWJyZWFrOworCX0KKworCXByaXYtPndlcF9lbmFibGVkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c19sZW5baV0gIT0gMCkKKwkJCXByaXYtPndlcF9lbmFibGVkID0gMTsKKwl9CisKKwlhdDc2X3N0YXJ0dXBfZGV2aWNlKHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdDc2X29wcyA9IHsKKwkudHggPSBhdDc2X21hYzgwMjExX3R4LAorCS5hZGRfaW50ZXJmYWNlID0gYXQ3Nl9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gYXQ3Nl9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcgPSBhdDc2X2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZSA9IGF0NzZfY29uZmlnX2ludGVyZmFjZSwKKwkuY29uZmlndXJlX2ZpbHRlciA9IGF0NzZfY29uZmlndXJlX2ZpbHRlciwKKwkuc3RhcnQgPSBhdDc2X21hYzgwMjExX3N0YXJ0LAorCS5zdG9wID0gYXQ3Nl9tYWM4MDIxMV9zdG9wLAorCS5od19zY2FuID0gYXQ3Nl9od19zY2FuLAorCS5zZXRfa2V5ID0gYXQ3Nl9zZXRfa2V5LAorfTsKKworLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgc3RydWN0IGF0NzZfcHJpdiAqYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0NzZfcHJpdiksICZhdDc2X29wcyk7CisJaWYgKCFodykgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogY291bGQgbm90IHJlZ2lzdGVyIgorCQkgICAgICAgIiBpZWVlODAyMTFfaHdcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcml2ID0gaHctPnByaXY7CisJcHJpdi0+aHcgPSBodzsKKworCXByaXYtPnVkZXYgPSB1ZGV2OworCisJbXV0ZXhfaW5pdCgmcHJpdi0+bXR4KTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc2V0X3Byb21pc2MsIGF0NzZfd29ya19zZXRfcHJvbWlzYyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3N1Ym1pdF9yeCwgYXQ3Nl93b3JrX3N1Ym1pdF9yeCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2h3X3NjYW4sIGF0NzZfZHdvcmtfaHdfc2Nhbik7CisKKwl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIGF0NzZfcnhfdGFza2xldCwgMCk7CisKKwlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PRkY7CisJcHJpdi0+cG1fcGVyaW9kID0gMDsKKworCS8qIHVuaXQgdXMgKi8KKwlwcml2LT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDAwMDsKKworCXJldHVybiBwcml2OworfQorCitzdGF0aWMgaW50IGF0NzZfYWxsb2NfdXJicyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50LCAqZXBfaW4sICplcF9vdXQ7CisJaW50IGk7CisJaW50IGJ1ZmZlcl9zaXplOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCWF0NzZfZGJnKERCR19VUkIsICIlczogTnVtRW5kcG9pbnRzICVkICIsIF9fZnVuY19fLAorCQkgaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwllcF9pbiA9IE5VTEw7CisJZXBfb3V0ID0gTlVMTDsKKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlhdDc2X2RiZyhEQkdfVVJCLCAiJXM6ICVkLiBlbmRwb2ludDogYWRkciAweCV4IGF0dHIgMHgleCIsCisJCQkgX19mdW5jX18sIGksIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzLAorCQkJIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCisJCWlmICghZXBfaW4gJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKQorCQkJZXBfaW4gPSBlbmRwb2ludDsKKworCQlpZiAoIWVwX291dCAmJiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKQorCQkJZXBfb3V0ID0gZW5kcG9pbnQ7CisJfQorCisJaWYgKCFlcF9pbiB8fCAhZXBfb3V0KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJidWxrIGVuZHBvaW50cyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwcml2LT5yeF9waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlwcml2LT50eF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX291dC0+YkVuZHBvaW50QWRkcmVzcyk7CisKKwlwcml2LT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCXByaXYtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5yeF91cmIgfHwgIXByaXYtPnR4X3VyYikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgVVJCXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyKSArIE1BWF9QQURESU5HX1NJWkU7CisJcHJpdi0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5idWxrX291dF9idWZmZXIpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0NzZfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IFRYX1JBVEVfMU1CSVQsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSBUWF9SQVRFXzJNQklULCB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gVFhfUkFURV81XzVNQklULCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IFRYX1JBVEVfMTFNQklULCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdDc2X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQgfQorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYXQ3Nl9zdXBwb3J0ZWRfYmFuZCA9IHsKKwkuY2hhbm5lbHMgPSBhdDc2X2NoYW5uZWxzLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShhdDc2X2NoYW5uZWxzKSwKKwkuYml0cmF0ZXMgPSBhdDc2X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShhdDc2X3JhdGVzKSwKK307CisKKy8qIFJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlIGFuZCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSAqLworc3RhdGljIGludCBhdDc2X2luaXRfbmV3X2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJaW50IHJldDsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiVVNCIGludGVyZmFjZTogJWQgZW5kcG9pbnRzIiwKKwkJIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwlyZXQgPSBhdDc2X2FsbG9jX3VyYnMocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBleGl0OworCisJLyogTUFDIGFkZHJlc3MgKi8KKwlyZXQgPSBhdDc2X2dldF9od19jb25maWcocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBnZXQgTUFDIGFkZHJlc3NcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+ZG9tYWluID0gYXQ3Nl9nZXRfcmVnX2RvbWFpbihwcml2LT5yZWd1bGF0b3J5X2RvbWFpbik7CisKKwlwcml2LT5jaGFubmVsID0gREVGX0NIQU5ORUw7CisJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJcHJpdi0+cnRzX3RocmVzaG9sZCA9IERFRl9SVFNfVEhSRVNIT0xEOworCXByaXYtPmZyYWdfdGhyZXNob2xkID0gREVGX0ZSQUdfVEhSRVNIT0xEOworCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gREVGX1NIT1JUX1JFVFJZX0xJTUlUOworCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfQVVUTzsKKwlwcml2LT5wcmVhbWJsZV90eXBlID0gUFJFQU1CTEVfVFlQRV9MT05HOworCXByaXYtPmJlYWNvbl9wZXJpb2QgPSAxMDA7CisJcHJpdi0+YXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CisJcHJpdi0+c2Nhbl9taW5fdGltZSA9IERFRl9TQ0FOX01JTl9USU1FOworCXByaXYtPnNjYW5fbWF4X3RpbWUgPSBERUZfU0NBTl9NQVhfVElNRTsKKwlwcml2LT5zY2FuX21vZGUgPSBTQ0FOX1RZUEVfQUNUSVZFOworCXByaXYtPmRldmljZV91bnBsdWdnZWQgPSAwOworCisJLyogbWFjODAyMTEgaW5pdGlhbGlzYXRpb24gKi8KKwlwcml2LT5ody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwlwcml2LT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmF0NzZfc3VwcG9ydGVkX2JhbmQ7CisJcHJpdi0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCQkgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOworCXByaXYtPmh3LT5tYXhfc2lnbmFsID0gMTAwOworCisJU0VUX0lFRUU4MDIxMV9ERVYocHJpdi0+aHcsICZpbnRlcmZhY2UtPmRldik7CisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocHJpdi0+aHcsIHByaXYtPm1hY19hZGRyKTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCByZWdpc3RlciBtYWM4MDIxMSBodyAoc3RhdHVzICVkKSFcbiIsCisJCSAgICAgICByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogVVNCICVzLCBNQUMgJXMsIGZpcm13YXJlICVkLiVkLiVkLSVkXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJICAgICAgIGRldl9uYW1lKCZpbnRlcmZhY2UtPmRldiksIG1hYzJzdHIocHJpdi0+bWFjX2FkZHIpLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLm1ham9yLCBwcml2LT5md192ZXJzaW9uLm1pbm9yLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLnBhdGNoLCBwcml2LT5md192ZXJzaW9uLmJ1aWxkKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVndWxhdG9yeSBkb21haW4gMHglMDJ4OiAlc1xuIiwKKwkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCSAgICAgICBwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiwgcHJpdi0+ZG9tYWluLT5uYW1lKTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCS8qIFRoZSBkZXZpY2UgaXMgZ29uZSwgZG9uJ3QgYm90aGVyIHR1cm5pbmcgaXQgb2ZmICovCisJcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCA9IDE7CisKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOworCisJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfaHdfc2Nhbik7CisJCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsKKwkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCX0KKworCWlmIChwcml2LT50eF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXYtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwcml2LT50eF91cmIpOworCX0KKwlpZiAocHJpdi0+cnhfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIocHJpdi0+cnhfdXJiKTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiB1bmxpbmtlZCB1cmJzIiwgX19mdW5jX18pOworCisJa2ZyZWUocHJpdi0+YnVsa19vdXRfYnVmZmVyKTsKKworCWRlbF90aW1lcl9zeW5jKCZsZWR0cmlnX3R4X3RpbWVyKTsKKworCWlmIChwcml2LT5yeF9za2IpCisJCWtmcmVlX3NrYihwcml2LT5yeF9za2IpOworCisJdXNiX3B1dF9kZXYocHJpdi0+dWRldik7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBiZWZvcmUgZnJlZWluZyBwcml2L2llZWU4MDIxMV9odyIsCisJCSBfX2Z1bmNfXyk7CisJaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCBhdDc2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisJc3RydWN0IGZ3ZW50cnkgKmZ3ZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgb3BfbW9kZTsKKwlpbnQgbmVlZF9leHRfZncgPSAwOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd3Y7CisJaW50IGJvYXJkX3R5cGUgPSAoaW50KWlkLT5kcml2ZXJfaW5mbzsKKworCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCisJLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgKi8KKwlmd2UgPSBhdDc2X2xvYWRfZmlybXdhcmUodWRldiwgYm9hcmRfdHlwZSk7CisJaWYgKCFmd2UpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlvcF9tb2RlID0gYXQ3Nl9nZXRfb3BfbW9kZSh1ZGV2KTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIm9wbW9kZSAlZCIsIG9wX21vZGUpOworCisJLyogd2UgZ2V0IE9QTU9ERV9OT05FIHdpdGggMi40LjIzLCBTTUMyNjYyVy1BUiA/Pz8KKwkgICB3ZSBnZXQgMjA0IHdpdGggMi40LjIzLCBGaWJlcmxpbmUgRkwtV0wyNDB1ICg1MDVBK1JGTUQyOTU4KSA/Pz8gKi8KKworCWlmIChvcF9tb2RlID09IE9QTU9ERV9IV19DT05GSUdfTU9ERSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGhhbmRsZSBhIGRldmljZSBpbiBIV19DT05GSUdfTU9ERVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNICisJICAgICYmIG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSCkgeworCQkvKiBkb3dubG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBwYXJ0ICovCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iKTsKKwkJcmV0ID0gYXQ3Nl9sb2FkX2ludGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iLAorCQkJCSAgIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCXVzYl9wdXRfZGV2KHVkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEludGVybmFsIGZpcm13YXJlIGFscmVhZHkgaW5zaWRlIHRoZSBkZXZpY2UuICBHZXQgZmlybXdhcmUKKwkgKiB2ZXJzaW9uIHRvIHRlc3QgaWYgZXh0ZXJuYWwgZmlybXdhcmUgaXMgbG9hZGVkLgorCSAqIFRoaXMgd29ya3Mgb25seSBmb3IgbmV3ZXIgZmlybXdhcmUsIGUuZy4gdGhlIEludGVyc2lsIDAuOTAueAorCSAqIHNheXMgImNvbnRyb2wgdGltZW91dCBvbiBlcDBpbiIgYW5kIHN1YnNlcXVlbnQKKwkgKiBhdDc2X2dldF9vcF9tb2RlKCkgZmFpbCB0b28gOi0oICovCisKKwkvKiBpZiB2ZXJzaW9uID49IDAuMTAwLngueSBvciBkZXZpY2Ugd2l0aCBidWlsdC1pbiBmbGFzaCB3ZSBjYW4KKwkgKiBxdWVyeSB0aGUgZGV2aWNlIGZvciB0aGUgZncgdmVyc2lvbiAqLworCWlmICgoZndlLT5md192ZXJzaW9uLm1ham9yID4gMCB8fCBmd2UtPmZ3X3ZlcnNpb24ubWlub3IgPj0gMTAwKQorCSAgICB8fCAob3BfbW9kZSA9PSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNIKSkgeworCQlyZXQgPSBhdDc2X2dldF9taWIodWRldiwgTUlCX0ZXX1ZFUlNJT04sICZmd3YsIHNpemVvZihmd3YpKTsKKwkJaWYgKHJldCA8IDAgfHwgKGZ3di5tYWpvciB8IGZ3di5taW5vcikgPT0gMCkKKwkJCW5lZWRfZXh0X2Z3ID0gMTsKKwl9IGVsc2UKKwkJLyogTm8gd2F5IHRvIGNoZWNrIGZpcm13YXJlIHZlcnNpb24sIHJlbG9hZCB0byBiZSBzdXJlICovCisJCW5lZWRfZXh0X2Z3ID0gMTsKKworCWlmIChuZWVkX2V4dF9mdykgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZVxuIik7CisKKwkJcmV0ID0gYXQ3Nl9sb2FkX2V4dGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIFJlLWNoZWNrIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJcmV0ID0gYXQ3Nl9nZXRfbWliKHVkZXYsIE1JQl9GV19WRVJTSU9OLCAmZnd2LCBzaXplb2YoZnd2KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGdldHRpbmcgZmlybXdhcmUgdmVyc2lvblxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlwcml2ID0gYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHVkZXYpOworCWlmICghcHJpdikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBwcml2KTsKKworCW1lbWNweSgmcHJpdi0+ZndfdmVyc2lvbiwgJmZ3diwgc2l6ZW9mKHN0cnVjdCBtaWJfZndfdmVyc2lvbikpOworCXByaXYtPmJvYXJkX3R5cGUgPSBib2FyZF90eXBlOworCisJcmV0ID0gYXQ3Nl9pbml0X25ld19kZXZpY2UocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOworCisJcmV0dXJuIHJldDsKKworZXJyb3I6CisJdXNiX3B1dF9kZXYodWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJLyogRGlzY29ubmVjdCBhZnRlciBsb2FkaW5nIGludGVybmFsIGZpcm13YXJlICovCisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogZGlzY29ubmVjdGluZ1xuIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlhdDc2X2RlbGV0ZV9kZXZpY2UocHJpdik7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZpbnRlcmZhY2UtPmRldiwgImRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0NzZfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLnByb2JlID0gYXQ3Nl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGF0NzZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkZXZfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDc2X21vZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgbG9hZGluZ1xuIik7CisKKwltdXRleF9pbml0KCZmd19tdXRleCk7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhdDc2X2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCAoc3RhdHVzICVkKVxuIiwgcmVzdWx0KTsKKworCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiYXQ3Nl91c2ItdHgiLCAmbGVkdHJpZ190eCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0NzZfbW9kX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgdW5sb2FkaW5nXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmYXQ3Nl9kcml2ZXIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpcm13YXJlcyk7IGkrKykgeworCQlpZiAoZmlybXdhcmVzW2ldLmZ3KQorCQkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZXNbaV0uZncpOworCX0KKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShsZWR0cmlnX3R4KTsKK30KKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdDc2X2RlYnVnLCB1aW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbGV2ZWwiKTsKKworbW9kdWxlX2luaXQoYXQ3Nl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChhdDc2X21vZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiT2xpdmVyIEt1cnRoIDxva3VAbWFzcW1haWwuY3g+Iik7CitNT0RVTEVfQVVUSE9SKCJKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBbGV4IDxhbGV4QGZvb2dvZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIEpvbmVzIik7CitNT0RVTEVfQVVUSE9SKCJCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPiIpOworTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWM1Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBPbGl2ZXIgS3VydGgKKyAqCSAgICAgKGMpIDIwMDMsMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKgkgICAgIChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgU291cmNlZm9yZ2UgZHJpdmVyCisgKiByZWxlYXNlZCBhbmQgbWFpbnRhaW5lZCBieSBBdG1lbDoKKyAqCisgKiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hdG1lbHdsYW5kcml2ZXIvCisgKgorICogQWx0aG91Z2ggdGhlIGNvZGUgd2FzIGNvbXBsZXRlbHkgcmUtd3JpdHRlbiwKKyAqIGl0IHdvdWxkIGhhdmUgYmVlbiBpbXBvc3NpYmxlIHdpdGhvdXQgQXRtZWwncyBkZWNpc2lvbiB0bworICogcmVsZWFzZSBhbiBPcGVuIFNvdXJjZSBkcml2ZXIgKHVuZm9ydHVuYXRlbHkgdGhlIGZpcm13YXJlIHdhcworICoga2VwdCBiaW5hcnkgb25seSkuIFRoYW5rcyBmb3IgdGhhdCBkZWNpc2lvbiB0byBBdG1lbCEKKyAqLworCisjaWZuZGVmIF9BVDc2X1VTQl9ICisjZGVmaW5lIF9BVDc2X1VTQl9ICisKKy8qIEJvYXJkIHR5cGVzICovCitlbnVtIGJvYXJkX3R5cGUgeworCUJPQVJEXzUwM19JU0wzODYxID0gMSwKKwlCT0FSRF81MDNfSVNMMzg2MyA9IDIsCisJQk9BUkRfNTAzID0gMywKKwlCT0FSRF81MDNfQUNDID0gNCwKKwlCT0FSRF81MDUgPSA1LAorCUJPQVJEXzUwNV8yOTU4ID0gNiwKKwlCT0FSRF81MDVBID0gNywKKwlCT0FSRF81MDVBTVggPSA4Cit9OworCisjZGVmaW5lIENNRF9TVEFUVVNfSURMRQkJCQkweDAwCisjZGVmaW5lIENNRF9TVEFUVVNfQ09NUExFVEUJCQkweDAxCisjZGVmaW5lIENNRF9TVEFUVVNfVU5LTk9XTgkJCTB4MDIKKyNkZWZpbmUgQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUgkJMHgwMworI2RlZmluZSBDTURfU1RBVFVTX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQJMHgwNAorI2RlZmluZSBDTURfU1RBVFVTX1RJTUVfT1VUCQkJMHgwNworI2RlZmluZSBDTURfU1RBVFVTX0lOX1BST0dSRVNTCQkJMHgwOAorI2RlZmluZSBDTURfU1RBVFVTX0hPU1RfRkFJTFVSRQkJCTB4ZmYKKyNkZWZpbmUgQ01EX1NUQVRVU19TQ0FOX0ZBSUxFRAkJCTB4ZjAKKworLyogYW5zd2VycyB0byBnZXQgb3AgbW9kZSAqLworI2RlZmluZSBPUE1PREVfTk9ORQkJCQkweDAwCisjZGVmaW5lIE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gJCTB4MDEKKyNkZWZpbmUgT1BNT0RFX0hXX0NPTkZJR19NT0RFCQkJMHgwMgorI2RlZmluZSBPUE1PREVfREZVX01PREVfV0lUSF9GTEFTSAkJMHgwMworI2RlZmluZSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNICQkweDA0CisKKyNkZWZpbmUgQ01EX1NFVF9NSUIJCTB4MDEKKyNkZWZpbmUgQ01EX0dFVF9NSUIJCTB4MDIKKyNkZWZpbmUgQ01EX1NDQU4JCTB4MDMKKyNkZWZpbmUgQ01EX0pPSU4JCTB4MDQKKyNkZWZpbmUgQ01EX1NUQVJUX0lCU1MJCTB4MDUKKyNkZWZpbmUgQ01EX1JBRElPX09OCQkweDA2CisjZGVmaW5lIENNRF9SQURJT19PRkYJCTB4MDcKKyNkZWZpbmUgQ01EX1NUQVJUVVAJCTB4MEIKKworI2RlZmluZSBNSUJfTE9DQUwJCTB4MDEKKyNkZWZpbmUgTUlCX01BQ19BRERSCQkweDAyCisjZGVmaW5lIE1JQl9NQUMJCQkweDAzCisjZGVmaW5lIE1JQl9NQUNfTUdNVAkJMHgwNQorI2RlZmluZSBNSUJfTUFDX1dFUAkJMHgwNgorI2RlZmluZSBNSUJfUEhZCQkJMHgwNworI2RlZmluZSBNSUJfRldfVkVSU0lPTgkJMHgwOAorI2RlZmluZSBNSUJfTURPTUFJTgkJMHgwOQorCisjZGVmaW5lIEFESE9DX01PREUJCTEKKyNkZWZpbmUgSU5GUkFTVFJVQ1RVUkVfTU9ERQkyCisKKy8qIHZhbHVlcyBmb3Igc3RydWN0IG1pYl9sb2NhbCwgZmllbGQgcHJlYW1ibGVfdHlwZSAqLworI2RlZmluZSBQUkVBTUJMRV9UWVBFX0xPTkcJMAorI2RlZmluZSBQUkVBTUJMRV9UWVBFX1NIT1JUCTEKKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9BVVRPCTIKKworLyogdmFsdWVzIGZvciB0eF9yYXRlICovCisjZGVmaW5lIFRYX1JBVEVfMU1CSVQJCTAKKyNkZWZpbmUgVFhfUkFURV8yTUJJVAkJMQorI2RlZmluZSBUWF9SQVRFXzVfNU1CSVQgCTIKKyNkZWZpbmUgVFhfUkFURV8xMU1CSVQJCTMKKyNkZWZpbmUgVFhfUkFURV9BVVRPCQk0CisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZXMgKi8KKyNkZWZpbmUgQVQ3Nl9QTV9PRkYJCTEKKyNkZWZpbmUgQVQ3Nl9QTV9PTgkJMgorI2RlZmluZSBBVDc2X1BNX1NNQVJUCQkzCisKK3N0cnVjdCBod2NmZ19yNTA1IHsKKwl1OCBjcjM5X3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQxWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZDJbMTRdOworCXU4IGNyMTVfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfcmZtZCB7CisJdTggY3IyMF92YWx1ZXNbMTRdOworCXU4IGNyMjFfdmFsdWVzWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCBsb3dfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCBub3JtYWxfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDFbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfaW50ZXJzaWwgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBjcjMxX3ZhbHVlc1sxNF07CisJdTggY3I1OF92YWx1ZXNbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGF0NzZfaHdjZmcgeworCXN0cnVjdCBod2NmZ19pbnRlcnNpbCBpOworCXN0cnVjdCBod2NmZ19yZm1kIHIzOworCXN0cnVjdCBod2NmZ19yNTA1IHI1OworfTsKKworI2RlZmluZSBXRVBfU01BTExfS0VZX0xFTgkoNDAgLyA4KQorI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTgkoMTA0IC8gOCkKKyNkZWZpbmUgV0VQX0tFWVMJCSg0KQorCitzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyB7CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwl1OCBwcm9taXNjdW91c19tb2RlOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGVuY3J5cHRpb25fdHlwZTsKKwlfX2xlMTYgcnRzX3RocmVzaG9sZDsKKwlfX2xlMTYgZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7CS8qIDI1Ni4uMjM0NiAqLworCXU4IGJhc2ljX3JhdGVfc2V0WzRdOworCXU4IGF1dG9fcmF0ZV9mYWxsYmFjazsJLyogMCwxICovCisJdTggY2hhbm5lbDsKKwl1OCBwcml2YWN5X2ludm9rZWQ7CisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOwkvKiAwLi4zICovCisJdTggY3VycmVudF9zc2lkWzMyXTsKKwl1OCB3ZXBfZGVmYXVsdF9rZXlfdmFsdWVbNF1bV0VQX0xBUkdFX0tFWV9MRU5dOworCXU4IHNzaWRfbGVuOworCXU4IHNob3J0X3ByZWFtYmxlOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfY29tbWFuZCB7CisJdTggY21kOworCXU4IHJlc2VydmVkOworCV9fbGUxNiBzaXplOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9SWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3J4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggcnhfcmF0ZTsKKwl1OCBuZXdic3M7CisJdTggZnJhZ21lbnRhdGlvbjsKKwl1OCByc3NpOworCXU4IGxpbmtfcXVhbGl0eTsKKwl1OCBub2lzZV9sZXZlbDsKKwlfX2xlMzIgcnhfdGltZTsKKwl1OCBwYWNrZXRbSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgVHggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9UWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3R4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggdHhfcmF0ZTsKKwl1OCBwYWRkaW5nOworCXU4IHJlc2VydmVkWzRdOworCXU4IHBhY2tldFtJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGRlZmluZXMgZm9yIHNjYW5fdHlwZSBiZWxvdyAqLworI2RlZmluZSBTQ0FOX1RZUEVfQUNUSVZFCTAKKyNkZWZpbmUgU0NBTl9UWVBFX1BBU1NJVkUJMQorCitzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBzY2FuX3R5cGU7CisJdTggY2hhbm5lbDsKKwlfX2xlMTYgcHJvYmVfZGVsYXk7CisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCBpbnRlcm5hdGlvbmFsX3NjYW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcyB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfam9pbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCV9fbGUxNiB0aW1lb3V0OworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgeworCXU4IHR5cGU7CisJdTggc2l6ZTsKKwl1OCBpbmRleDsKKwl1OCByZXNlcnZlZDsKKwl1bmlvbiB7CisJCXU4IGJ5dGU7CisJCV9fbGUxNiB3b3JkOworCQl1OCBhZGRyW0VUSF9BTEVOXTsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2xvY2FsIHsKKwl1MTYgcmVzZXJ2ZWQwOworCXU4IGJlYWNvbl9lbmFibGU7CisJdTggdHhhdXRvcmF0ZV9mYWxsYmFjazsKKwl1OCByZXNlcnZlZDE7CisJdTggc3NpZF9zaXplOworCXU4IHByb21pc2N1b3VzX21vZGU7CisJdTE2IHJlc2VydmVkMjsKKwl1OCBwcmVhbWJsZV90eXBlOworCXUxNiByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY19hZGRyIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVzWzJdOwkJLyogPz8/ICovCisJdTggZ3JvdXBfYWRkcls0XVtFVEhfQUxFTl07CisJdTggZ3JvdXBfYWRkcl9zdGF0dXNbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hYyB7CisJX19sZTMyIG1heF90eF9tc2R1X2xpZmV0aW1lOworCV9fbGUzMiBtYXhfcnhfbGlmZXRpbWU7CisJX19sZTE2IGZyYWdfdGhyZXNob2xkOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBjd21pbjsKKwlfX2xlMTYgY3dtYXg7CisJdTggc2hvcnRfcmV0cnlfdGltZTsKKwl1OCBsb25nX3JldHJ5X3RpbWU7CisJdTggc2Nhbl90eXBlOwkJLyogYWN0aXZlIG9yIHBhc3NpdmUgKi8KKwl1OCBzY2FuX2NoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OwkvKiBkZWxheSBiZWZvcmUgUHJvYmVSZXEgaW4gYWN0aXZlIHNjYW4sIFJPICovCisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBkZXNpcmVkX3NzaWRbMzJdOworCXU4IGRlc2lyZWRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGRlc2lyZWRfYnNzdHlwZTsJLyogYWQtaG9jIG9yIGluZnJhc3RydWN0dXJlICovCisJdTggcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfbWdtdCB7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CisJX19sZTE2IENGUF9tYXhfZHVyYXRpb247CisJX19sZTE2IG1lZGl1bV9vY2N1cGFuY3lfbGltaXQ7CisJX19sZTE2IHN0YXRpb25faWQ7CS8qIGFzc29jIGlkICovCisJX19sZTE2IEFUSU1fd2luZG93OworCXU4IENGUF9tb2RlOworCXU4IHByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkOworCXU4IERUSU1fcGVyaW9kOworCXU4IENGUF9wZXJpb2Q7CisJdTggY3VycmVudF9ic3NpZFtFVEhfQUxFTl07CisJdTggY3VycmVudF9lc3NpZFszMl07CisJdTggY3VycmVudF9ic3NfdHlwZTsKKwl1OCBwb3dlcl9tZ210X21vZGU7CisJLyogcmZtZCBhbmQgNTA1ICovCisJdTggaWJzc19jaGFuZ2U7CisJdTggcmVzOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQ7CisJdTggY291bnRyeV9zdHJpbmdbM107CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY193ZXAgeworCXU4IHByaXZhY3lfaW52b2tlZDsJLyogMCBkaXNhYmxlIGVuY3IuLCAxIGVuYWJsZSBlbmNyICovCisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOworCXU4IHdlcF9rZXlfbWFwcGluZ19sZW47CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwlfX2xlMzIgd2VwX2ljdl9lcnJvcl9jb3VudDsKKwlfX2xlMzIgd2VwX2V4Y2x1ZGVkX2NvdW50OworCXU4IHdlcF9kZWZhdWx0X2tleXZhbHVlW1dFUF9LRVlTXVtXRVBfTEFSR0VfS0VZX0xFTl07CisJdTggZW5jcnlwdGlvbl9sZXZlbDsJLyogMSBmb3IgNDBiaXQsIDIgZm9yIDEwNGJpdCBlbmNyeXB0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX3BoeSB7CisJX19sZTMyIGVkX3RocmVzaG9sZDsKKworCV9fbGUxNiBzbG90X3RpbWU7CisJX19sZTE2IHNpZnNfdGltZTsKKwlfX2xlMTYgcHJlYW1ibGVfbGVuZ3RoOworCV9fbGUxNiBwbGNwX2hlYWRlcl9sZW5ndGg7CisJX19sZTE2IG1wZHVfbWF4X2xlbmd0aDsKKwlfX2xlMTYgY2NhX21vZGVfc3VwcG9ydGVkOworCisJdTggb3BlcmF0aW9uX3JhdGVfc2V0WzRdOworCXU4IGNoYW5uZWxfaWQ7CisJdTggY3VycmVudF9jY2FfbW9kZTsKKwl1OCBwaHlfdHlwZTsKKwl1OCBjdXJyZW50X3JlZ19kb21haW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24geworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHBhdGNoOworCXU4IGJ1aWxkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tZG9tYWluIHsKKwl1OCB0eF9wb3dlcmxldmVsWzE0XTsKKwl1OCBjaGFubmVsX2xpc3RbMTRdOwkvKiAwIGZvciBpbnZhbGlkIGNoYW5uZWxzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgeworCV9fbGUzMiBjcmM7CQkvKiBDUkMzMiBvZiB0aGUgd2hvbGUgaW1hZ2UgKi8KKwlfX2xlMzIgYm9hcmRfdHlwZTsJLyogZmlybXdhcmUgY29tcGF0aWJpbGl0eSBjb2RlICovCisJdTggYnVpbGQ7CQkvKiBmaXJtd2FyZSBidWlsZCBudW1iZXIgKi8KKwl1OCBwYXRjaDsJCS8qIGZpcm13YXJlIHBhdGNoIGxldmVsICovCisJdTggbWlub3I7CQkvKiBmaXJtd2FyZSBtaW5vciB2ZXJzaW9uICovCisJdTggbWFqb3I7CQkvKiBmaXJtd2FyZSBtYWpvciB2ZXJzaW9uICovCisJX19sZTMyIHN0cl9vZmZzZXQ7CS8qIG9mZnNldCBvZiB0aGUgY29weXJpZ2h0IHN0cmluZyAqLworCV9fbGUzMiBpbnRfZndfb2Zmc2V0OwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgaW50X2Z3X2xlbjsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCisJX19sZTMyIGV4dF9md19vZmZzZXQ7CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBleHRfZndfbGVuOwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGEgZGVzY3JpcHRpb24gb2YgYSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgdGhlIGFsbG93ZWQgY2hhbm5lbHMgKi8KK3N0cnVjdCByZWdfZG9tYWluIHsKKwl1MTYgY29kZTsKKwljaGFyIGNvbnN0ICpuYW1lOworCXUzMiBjaGFubmVsX21hcDsJLyogaWYgYml0IE4gaXMgc2V0LCBjaGFubmVsIChOKzEpIGlzIGFsbG93ZWQgKi8KK307CisKKy8qIERhdGEgZm9yIG9uZSBsb2FkZWQgZmlybXdhcmUgZmlsZSAqLworc3RydWN0IGZ3ZW50cnkgeworCWNvbnN0IGNoYXIgKmNvbnN0IGZ3bmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBleHRmd19zaXplOworCWludCBpbnRmd19zaXplOworCS8qIHBvaW50ZXIgdG8gbG9hZGVkIGZpcm13YXJlLCBubyBuZWVkIHRvIGZyZWUgKi8KKwl1OCAqZXh0Znc7CQkvKiBleHRlcm5hbCBmaXJtd2FyZSwgZXh0Zndfc2l6ZSBieXRlcyBsb25nICovCisJdTggKmludGZ3OwkJLyogaW50ZXJuYWwgZmlybXdhcmUsIGludGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOwkvKiBib2FyZCB0eXBlICovCisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisJaW50IGxvYWRlZDsJCS8qIExvYWRlZCBhbmQgcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLworfTsKKworc3RydWN0IGF0NzZfcHJpdiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsJLyogc2tidWZmIGZvciByZWNlaXZpbmcgZGF0YSAqLworCXN0cnVjdCBza19idWZmICp0eF9za2I7CS8qIHNrYnVmZiBmb3IgdHJhbnNtaXR0aW5nIGRhdGEgKi8KKwl2b2lkICpidWxrX291dF9idWZmZXI7CS8qIGJ1ZmZlciBmb3Igc2VuZGluZyBkYXRhICovCisKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CS8qIFVSQiBmb3Igc2VuZGluZyBkYXRhICovCisJc3RydWN0IHVyYiAqcnhfdXJiOwkvKiBVUkIgZm9yIHJlY2VpdmluZyBkYXRhICovCisKKwl1bnNpZ25lZCBpbnQgdHhfcGlwZTsJLyogYnVsayBvdXQgcGlwZSAqLworCXVuc2lnbmVkIGludCByeF9waXBlOwkvKiBidWxrIGluIHBpcGUgKi8KKworCXN0cnVjdCBtdXRleCBtdHg7CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisKKwkvKiB3b3JrIHF1ZXVlcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3NldF9wcm9taXNjOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N1Ym1pdF9yeDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2h3X3NjYW47CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKworCS8qIHRoZSBXRVAgc3R1ZmYgKi8KKwlpbnQgd2VwX2VuYWJsZWQ7CS8qIDEgaWYgV0VQIGlzIGVuYWJsZWQgKi8KKwlpbnQgd2VwX2tleV9pZDsJCS8qIGtleSBpZCB0byBiZSB1c2VkICovCisJdTggd2VwX2tleXNbV0VQX0tFWVNdW1dFUF9MQVJHRV9LRVlfTEVOXTsJLyogV0VQIGtleXMgKi8KKwl1OCB3ZXBfa2V5c19sZW5bV0VQX0tFWVNdOwkvKiBsZW5ndGggb2YgV0VQIGtleXMgKi8KKworCWludCBjaGFubmVsOworCWludCBpd19tb2RlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJaW50IGVzc2lkX3NpemU7CisJaW50IHJhZGlvX29uOworCWludCBwcm9taXNjOworCisJaW50IHByZWFtYmxlX3R5cGU7CS8qIDAgLSBsb25nLCAxIC0gc2hvcnQsIDIgLSBhdXRvICovCisJaW50IGF1dGhfbW9kZTsJCS8qIGF1dGhlbnRpY2F0aW9uIHR5cGU6IDAgb3BlbiwgMSBzaGFyZWQga2V5ICovCisJaW50IHR4cmF0ZTsJCS8qIDAsMSwyLDMgPSAxLDIsNS41LDExIE1icHMsIDQgaXMgYXV0byAqLworCWludCBmcmFnX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBmcmFnbWVudGF0aW9uIG9mIHR4IHBhY2tldHMgKi8KKwlpbnQgcnRzX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBSVFMgbWVjaGFuaXNtICovCisJaW50IHNob3J0X3JldHJ5X2xpbWl0OworCisJaW50IHNjYW5fbWluX3RpbWU7CS8qIHNjYW4gbWluIGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21heF90aW1lOwkvKiBzY2FuIG1heCBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tb2RlOwkJLyogU0NBTl9UWVBFX0FDVElWRSwgU0NBTl9UWVBFX1BBU1NJVkUgKi8KKwlpbnQgc2Nhbl9uZWVkX2FueTsJLyogaWYgc2V0LCBuZWVkIHRvIHNjYW4gZm9yIGFueSBFU1NJRCAqLworCisJdTE2IGFzc29jX2lkOwkJLyogY3VycmVudCBhc3NvY2lhdGlvbiBJRCwgaWYgYXNzb2NpYXRlZCAqLworCisJdTggcG1fbW9kZTsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAqLworCXUzMiBwbV9wZXJpb2Q7CQkvKiBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KKworCXN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICpkb21haW47CS8qIHJlZyBkb21haW4gZGVzY3JpcHRpb24gKi8KKworCS8qIFRoZXNlIGZpZWxkcyBjb250YWluIEhXIGNvbmZpZyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIChub3QgYWxsIG9mCisJICogdGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IGFsbCBib2FyZCB0eXBlcykgKi8KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyBjYXJkX2NvbmZpZzsKKworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCisJdW5zaWduZWQgaW50IGRldmljZV91bnBsdWdnZWQ6MTsKKwl1bnNpZ25lZCBpbnQgbmV0ZGV2X3JlZ2lzdGVyZWQ6MTsKKwlzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgbWliX2J1ZjsJLyogZ2xvYmFsIGJ1ZmZlciBmb3Igc2V0X21pYiBjYWxscyAqLworCisJaW50IGJlYWNvbl9wZXJpb2Q7CS8qIHBlcmlvZCBvZiBtZ210IGJlYWNvbnMsIEt1cyAqLworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJaW50IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Cit9OworCisjZGVmaW5lIEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlMgRklGX1BST01JU0NfSU5fQlNTCisKKyNkZWZpbmUgU0NBTl9QT0xMX0lOVEVSVkFMCShIWiAvIDQpCisKKyNkZWZpbmUgQ01EX0NPTVBMRVRJT05fVElNRU9VVAkoNSAqIEhaKQorCisjZGVmaW5lIERFRl9SVFNfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX0ZSQUdfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX1NIT1JUX1JFVFJZX0xJTUlUCTgKKyNkZWZpbmUgREVGX0NIQU5ORUwJCTEwCisjZGVmaW5lIERFRl9TQ0FOX01JTl9USU1FCTEwCisjZGVmaW5lIERFRl9TQ0FOX01BWF9USU1FCTEyMAorCisvKiB0aGUgbWF4IHBhZGRpbmcgc2l6ZSBmb3IgdHggaW4gYnl0ZXMgKHNlZSBjYWxjX3BhZGRpbmcpICovCisjZGVmaW5lIE1BWF9QQURESU5HX1NJWkUJNTMKKworI2VuZGlmCQkJCS8qIF9BVDc2X1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCmluZGV4IDcxOWNmYWUuLjg0YTc0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCkBAIC0xMCw1ICsxMCw2IEBACiBhdGg1ay15CQkJCSs9IHJlc2V0Lm8KIGF0aDVrLXkJCQkJKz0gYXR0YWNoLm8KIGF0aDVrLXkJCQkJKz0gYmFzZS5vCithdGg1ay15CQkJCSs9IGxlZC5vCiBhdGg1ay0kKENPTkZJR19BVEg1S19ERUJVRykJKz0gZGVidWcubwogb2JqLSQoQ09ORklHX0FUSDVLKQkJKz0gYXRoNWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKaW5kZXggMTgzZmZjOC4uMGI2MTZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oCkBAIC0xNjUsOSArMTY1LDYgQEAKICNkZWZpbmUgQVI1S19JTklfVkFMX1hSCQkJMAogI2RlZmluZSBBUjVLX0lOSV9WQUxfTUFYCQk1CiAKLSNkZWZpbmUgQVI1S19SRjUxMTFfSU5JX1JGX01BWF9CQU5LUwlBUjVLX01BWF9SRl9CQU5LUwotI2RlZmluZSBBUjVLX1JGNTExMl9JTklfUkZfTUFYX0JBTktTCUFSNUtfTUFYX1JGX0JBTktTCi0KIC8qIFVzZWQgZm9yIEJTU0lEIGV0YyBtYW5pcHVsYXRpb24gKi8KICNkZWZpbmUgQVI1S19MT1dfSUQoX2EpKAkJCQlcCiAoX2EpWzBdIHwgKF9hKVsxXSA8PCA4IHwgKF9hKVsyXSA8PCAxNiB8IChfYSlbM10gPDwgMjQJXApAQCAtMjA3LDkgKzIwNCw5IEBACiAjZGVmaW5lIEFSNUtfVFVORV9DV01BWF8xMUIJCQkxMDIzCiAjZGVmaW5lIEFSNUtfVFVORV9DV01BWF9YUgkJCTcKICNkZWZpbmUgQVI1S19UVU5FX05PSVNFX0ZMT09SCQkJLTcyCi0jZGVmaW5lIEFSNUtfVFVORV9NQVhfVFhQT1dFUgkJCTYwCi0jZGVmaW5lIEFSNUtfVFVORV9ERUZBVUxUX1RYUE9XRVIJCTMwCi0jZGVmaW5lIEFSNUtfVFVORV9UUENfVFhQT1dFUgkJCXRydWUKKyNkZWZpbmUgQVI1S19UVU5FX01BWF9UWFBPV0VSCQkJNjMKKyNkZWZpbmUgQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUgkJMjUKKyNkZWZpbmUgQVI1S19UVU5FX1RQQ19UWFBPV0VSCQkJZmFsc2UKICNkZWZpbmUgQVI1S19UVU5FX0FOVF9ESVZFUlNJVFkJCQl0cnVlCiAjZGVmaW5lIEFSNUtfVFVORV9IV1RYVFJJRVMJCQk0CiAKQEAgLTIyNSw2ICsyMjIsNyBAQAogI2VuZGlmCiAKIC8qIEluaXRpYWwgdmFsdWVzICovCisjZGVmaW5lCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEJCQkyCiAjZGVmaW5lIEFSNUtfSU5JVF9UWF9MQVRFTkNZCQkJNTAyCiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDCQkJCTM5CiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDX1RVUkJPCQkJNzkKQEAgLTMxNiw3ICszMTQsNyBAQAogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDI0CTB4OTAgLyogQ29uZG9yICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTMJMHhhNCAvKiBFYWdsZSBsaXRlICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTQJMHhhMCAvKiBFYWdsZSAqLwotI2RlZmluZSBBUjVLX1NSRVZfQVIyNDE1CTB4YjAgLyogQ29icmEgKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSMjQxNQkweGIwIC8qIFRhbG9uICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTYJMHhjMCAvKiBQQ0ktRSAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDE4CTB4Y2EgLyogUENJLUUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSMjQyNQkweGUwIC8qIFN3YW4gKi8KQEAgLTMzNCw3ICszMzIsNyBAQAogI2RlZmluZQlBUjVLX1NSRVZfUkFEXzIxMTJCCTB4NDYKICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDEzCTB4NTAKICNkZWZpbmUgQVI1S19TUkVWX1JBRF81NDEzCTB4NjAKLSNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAKKyNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAgLyogQ29icmEgU29DICovCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfMjMxNwkweDgwCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfNTQyNAkweGEwIC8qIE1vc3RseSBzYW1lIGFzIDU0MTMgKi8KICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDI1CTB4YTIKQEAgLTM0Miw3ICszNDAsOCBAQAogCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMQkweDMwCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMgkweDQxCi0jZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjExMkIJMHg0MworI2RlZmluZQlBUjVLX1NSRVZfUEhZXzUyMTJBCTB4NDIKKyNkZWZpbmUgQVI1S19TUkVWX1BIWV81MjEyQgkweDQzCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQxMwkweDQ1CiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTQxMwkweDYxCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQyNQkweDcwCkBAIC01NTIsMTEgKzU1MSwxMSBAQAogICovCiAjZGVmaW5lIEFSNUtfVFhQT1dFUl9PRkRNKF9yLCBfdikJKAkJCVwKIAkoKDAgJiAxKSA8PCAoKF92KSArIDYpKSB8CQkJCVwKLQkoKChhaC0+YWhfdHhwb3dlci50eHBfcmF0ZXNbKF9yKV0pICYgMHgzZikgPDwgKF92KSkJXAorCSgoKGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc19wb3dlcl90YWJsZVsoX3IpXSkgJiAweDNmKSA8PCAoX3YpKQlcCiApCiAKICNkZWZpbmUgQVI1S19UWFBPV0VSX0NDSyhfciwgX3YpCSgJCQlcCi0JKGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc1soX3IpXSAmIDB4M2YpIDw8IChfdikJXAorCShhaC0+YWhfdHhwb3dlci50eHBfcmF0ZXNfcG93ZXJfdGFibGVbKF9yKV0gJiAweDNmKSA8PCAoX3YpCVwKICkKIAogLyoKQEAgLTY0OSw0OSArNjQ4LDIxIEBACiAKIGVudW0gYXRoNWtfcmZnYWluIHsKIAlBUjVLX1JGR0FJTl9JTkFDVElWRSA9IDAsCisJQVI1S19SRkdBSU5fQUNUSVZFLAogCUFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVELAogCUFSNUtfUkZHQUlOX05FRURfQ0hBTkdFLAogfTsKIAotI2RlZmluZSBBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTEJCTQKLSNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCQk3Ci0jZGVmaW5lIEFSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTCQlBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTIKLSNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOCQkxNQotI2RlZmluZSBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4JCTIwCi0jZGVmaW5lIEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUgkJNQotI2RlZmluZSBBUjVLX0dBSU5fQ0NLX09GRE1fR0FJTl9ERUxUQQkJMTUKLSNkZWZpbmUgQVI1S19HQUlOX1NURVBfQ09VTlQJCQkxMAotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fVFhfQ0xJUAkJCTAKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzkwCQkJMQotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfODQJCQkyCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9HQUlOX1NFTAkJMwotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fTUlYX09STgkJCTAKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzOAkJCTEKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzNwkJCTIKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzNgkJCTMKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzMgkJCTQKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzMQkJCTUKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzMAkJCTYKLSNkZWZpbmUgQVI1S19HQUlOX0NIRUNLX0FESlVTVChfZykgCQlcCi0JKChfZyktPmdfY3VycmVudCA8PSAoX2cpLT5nX2xvdyB8fCAoX2cpLT5nX2N1cnJlbnQgPj0gKF9nKS0+Z19oaWdoKQotCi1zdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCB7Ci0JczE2CQkJCWdvc19wYXJhbVtBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUU107Ci0JczMyCQkJCWdvc19nYWluOwotfTsKLQogc3RydWN0IGF0aDVrX2dhaW4gewotCXUzMgkJCWdfc3RlcF9pZHg7Ci0JdTMyCQkJZ19jdXJyZW50OwotCXUzMgkJCWdfdGFyZ2V0OwotCXUzMgkJCWdfbG93OwotCXUzMgkJCWdfaGlnaDsKLQl1MzIJCQlnX2ZfY29ycjsKLQl1MzIJCQlnX2FjdGl2ZTsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAkqZ19zdGVwOworCXU4CQkJZ19zdGVwX2lkeDsKKwl1OAkJCWdfY3VycmVudDsKKwl1OAkJCWdfdGFyZ2V0OworCXU4CQkJZ19sb3c7CisJdTgJCQlnX2hpZ2g7CisJdTgJCQlnX2ZfY29ycjsKKwl1OAkJCWdfc3RhdGU7CiB9OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICAgQ09NTU9OIERFRklOSVRJT05TCiBcKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDUzLDcgKzEwMjQsNiBAQAogCWJvb2wJCQlhaF9ydW5uaW5nOwogCWJvb2wJCQlhaF9zaW5nbGVfY2hpcDsKIAlib29sCQkJYWhfY29tYmluZWRfbWljOwotCWVudW0gYXRoNWtfcmZnYWluCWFoX3JmX2dhaW47CiAKIAl1MzIJCQlhaF9tYWNfc3JldjsKIAl1MTYJCQlhaF9tYWNfdmVyc2lvbjsKQEAgLTEwNjEsNyArMTAzMSw2IEBACiAJdTE2CQkJYWhfcGh5X3JldmlzaW9uOwogCXUxNgkJCWFoX3JhZGlvXzVnaHpfcmV2aXNpb247CiAJdTE2CQkJYWhfcmFkaW9fMmdoel9yZXZpc2lvbjsKLQl1MzIJCQlhaF9waHlfc3BlbmRpbmc7CiAKIAllbnVtIGF0aDVrX3ZlcnNpb24JYWhfdmVyc2lvbjsKIAllbnVtIGF0aDVrX3JhZGlvCWFoX3JhZGlvOwpAQCAtMTExMiwxNiArMTA4MSwyOSBAQAogCXUzMgkJCWFoX3R4cV9pc3I7CiAJdTMyCQkJKmFoX3JmX2JhbmtzOwogCXNpemVfdAkJCWFoX3JmX2JhbmtzX3NpemU7CisJc2l6ZV90CQkJYWhfcmZfcmVnc19jb3VudDsKIAlzdHJ1Y3QgYXRoNWtfZ2FpbglhaF9nYWluOwotCXUzMgkJCWFoX29mZnNldFtBUjVLX01BWF9SRl9CQU5LU107CisJdTgJCQlhaF9vZmZzZXRbQVI1S19NQVhfUkZfQkFOS1NdOworCiAKIAlzdHJ1Y3QgewotCQl1MTYJCXR4cF9wY2RhY1tBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFXTsKLQkJdTE2CQl0eHBfcmF0ZXNbQVI1S19NQVhfUkFURVNdOwotCQlzMTYJCXR4cF9taW47Ci0JCXMxNgkJdHhwX21heDsKKwkJLyogVGVtcG9yYXJ5IHRhYmxlcyB1c2VkIGZvciBpbnRlcnBvbGF0aW9uICovCisJCXU4CQl0bXBMW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdCisJCQkJCVtBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFXTsKKwkJdTgJCXRtcFJbQVI1S19FRVBST01fTl9QRF9HQUlOU10KKwkJCQkJW0FSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkVdOworCQl1OAkJdHhwX3BkX3RhYmxlW0FSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUgKiAyXTsKKwkJdTE2CQl0eHBfcmF0ZXNfcG93ZXJfdGFibGVbQVI1S19NQVhfUkFURVNdOworCQl1OAkJdHhwX21pbl9pZHg7CiAJCWJvb2wJCXR4cF90cGM7CisJCS8qIFZhbHVlcyBpbiAwLjI1ZEIgdW5pdHMgKi8KKwkJczE2CQl0eHBfbWluX3B3cjsKKwkJczE2CQl0eHBfbWF4X3B3cjsKKwkJczE2CQl0eHBfb2Zmc2V0OwogCQlzMTYJCXR4cF9vZmRtOworCQkvKiBWYWx1ZXMgaW4gZEIgdW5pdHMgKi8KKwkJczE2CQl0eHBfY2NrX29mZG1fcHdyX2RlbHRhOworCQlzMTYJCXR4cF9jY2tfb2ZkbV9nYWluZl9kZWx0YTsKIAl9IGFoX3R4cG93ZXI7CiAKIAlzdHJ1Y3QgewpAQCAtMTE1OSw2ICsxMTQxLDEyIEBACiBleHRlcm4gc3RydWN0IGF0aDVrX2h3ICphdGg1a19od19hdHRhY2goc3RydWN0IGF0aDVrX3NvZnRjICpzYywgdTggbWFjX3ZlcnNpb24pOwogZXh0ZXJuIHZvaWQgYXRoNWtfaHdfZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpOwogCisvKiBMRUQgZnVuY3Rpb25zICovCitleHRlcm4gaW50IGF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworCiAvKiBSZXNldCBGdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfbmljX3dha2V1cChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgZmxhZ3MsIGJvb2wgaW5pdGlhbCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBib29sIGNoYW5nZV9jaGFubmVsKTsKQEAgLTExODUsNyArMTE3Myw5IEBACiAKIC8qIEVFUFJPTSBhY2Nlc3MgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2VlcHJvbV9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIHZvaWQgYXRoNWtfZWVwcm9tX2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpOworZXh0ZXJuIGJvb2wgYXRoNWtfZWVwcm9tX2lzX2hiNjMoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKIC8qIFByb3RvY29sIENvbnRyb2wgVW5pdCBGdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X29wbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKQEAgLTEyMDYsNiArMTE5Niw3IEBACiAvKiBCZWFjb24gY29udHJvbCBmdW5jdGlvbnMgKi8KIGV4dGVybiB1MzIgYXRoNWtfaHdfZ2V0X3RzZjMyKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIHU2NCBhdGg1a19od19nZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gdm9pZCBhdGg1a19od19zZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTY0IHRzZjY0KTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X2luaXRfYmVhY29uKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGludGVydmFsKTsKICNpZiAwCkBAIC0xMjYwLDEwICsxMjUxLDEyIEBACiBleHRlcm4gaW50IGF0aDVrX2h3X3dyaXRlX2luaXR2YWxzKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IG1vZGUsIGJvb2wgY2hhbmdlX2NoYW5uZWwpOwogCiAvKiBJbml0aWFsaXplIFJGICovCi1leHRlcm4gaW50IGF0aDVrX2h3X3JmcmVncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCBtb2RlKTsKLWV4dGVybiBpbnQgYXRoNWtfaHdfcmZnYWluKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKTsKLWV4dGVybiBlbnVtIGF0aDVrX3JmZ2FpbiBhdGg1a19od19nZXRfcmZfZ2FpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKLWV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X3JmZ2Fpbl9vcHQoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gaW50IGF0aDVrX2h3X3JmcmVnc19pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCXVuc2lnbmVkIGludCBtb2RlKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpOworZXh0ZXJuIGVudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfcmZnYWluX29wdF9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogUEhZL1JGIGNoYW5uZWwgZnVuY3Rpb25zICovCiBleHRlcm4gYm9vbCBhdGg1a19jaGFubmVsX29rKHN0cnVjdCBhdGg1a19odyAqYWgsIHUxNiBmcmVxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCBhdGg1a19od19jaGFubmVsKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7CkBAIC0xMjc2LDggKzEyNjksOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGg1a19od19nZXRfZGVmX2FudGVubmEoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogVFggcG93ZXIgc2V0dXAgKi8KLWV4dGVybiBpbnQgYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCB0eHBvd2VyKTsKLWV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHBvd2VyKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHU4IGVlX21vZGUsIHU4IHR4cG93ZXIpOworZXh0ZXJuIGludCBhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBlZV9tb2RlLCB1OCB0eHBvd2VyKTsKIAogLyoKICAqIEZ1bmN0aW9ucyB1c2VkIGludGVybmFseQpAQCAtMTI4NSw2ICsxMjc4LDcgQEAKIAogLyoKICAqIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCisgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayh1bnNpZ25lZCBpbnQgdXNlYywgYm9vbCB0dXJibykKIHsKQEAgLTEyOTMsNiArMTI4Nyw3IEBACiAKIC8qCiAgKiBUcmFuc2xhdGUgaHcgY2xvY2sgdW5pdHMgdG8gdXNlYworICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfY2xvY2t0b2godW5zaWduZWQgaW50IGNsb2NrLCBib29sIHR1cmJvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXR0YWNoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwppbmRleCBkZWEzNzhmLi43MGQzNzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwpAQCAtMzQsMTQgKzM0LDE0IEBACiBzdGF0aWMgaW50IGF0aDVrX2h3X3Bvc3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAotCWludCBpLCBjOwotCXUxNiBjdXJfcmVnOwotCXUxNiByZWdzWzJdID0ge0FSNUtfU1RBX0lEMCwgQVI1S19QSFkoOCl9OwotCXUzMiB2YXJfcGF0dGVybjsKLQl1MzIgc3RhdGljX3BhdHRlcm5bNF0gPSB7CisJc3RhdGljIGNvbnN0IHUzMiBzdGF0aWNfcGF0dGVybls0XSA9IHsKIAkJMHg1NTU1NTU1NSwJMHhhYWFhYWFhYSwKIAkJMHg2NjY2NjY2NiwJMHg5OTk5OTk5OQogCX07CisJc3RhdGljIGNvbnN0IHUxNiByZWdzWzJdID0geyBBUjVLX1NUQV9JRDAsIEFSNUtfUEhZKDgpIH07CisJaW50IGksIGM7CisJdTE2IGN1cl9yZWc7CisJdTMyIHZhcl9wYXR0ZXJuOwogCXUzMiBpbml0X3ZhbDsKIAl1MzIgY3VyX3ZhbDsKIApAQCAtMTA2LDcgKzEwNiw2IEBACiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCXU4IG1hY1tFVEhfQUxFTl0gPSB7fTsKIAlpbnQgcmV0OwogCXUzMiBzcmV2OwogCkBAIC0xNjksNyArMTY4LDYgQEAKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gZmFsc2U7CiAJCWFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uID0gYXRoNWtfaHdfcmFkaW9fcmV2aXNpb24oYWgsCiAJCQkJCQkJQ0hBTk5FTF8yR0haKTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzUxMTI6CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIxMTI6CkBAIC0xNzcsMzggKzE3NSwzMSBAQAogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSBmYWxzZTsKIAkJYWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24gPSBhdGg1a19od19yYWRpb19yZXZpc2lvbihhaCwKIAkJCQkJCQlDSEFOTkVMXzJHSFopOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyOwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjQxMzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MTM7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDEzOgogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTQxMzsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMzsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIzMTY6CiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkYyMzE2OwogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjMxNzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTc7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjIzMTc7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDI0OgogCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MjUgfHwKIAkJYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MTcpewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MjU7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNTsKIAkJfSBlbHNlIHsKIAkJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1NDEzOwogCQkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjU0MTM7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIyNywyOSArMjE4LDI1IEBACiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQyNTsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjQyNTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MjU7CiAJCX0gZWxzZSBpZiAoc3JldiA9PSBBUjVLX1NSRVZfQVI1MjEzQSAmJgotCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjExMkIpIHsKKwkJYWgtPmFoX3BoeV9yZXZpc2lvbiA9PSBBUjVLX1NSRVZfUEhZXzUyMTJCKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTExMjsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IGZhbHNlOwotCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIxMTJCOworCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzUxMTJCOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNSA+PiA0KSkgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTY7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIzMTY7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSNTQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfNTQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjU0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzU0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1NDEzOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzI0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyNDEzOwogCQl9IGVsc2UgewogCQkJQVRINUtfRVJSKHNjLCAiQ291bGRuJ3QgaWRlbnRpZnkgcmFkaW8gcmV2aXNpb24uXG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CkBAIC0zMjQsMTQgKzMxMSwxNCBAQAogCX0KIAogCS8qIE1BQyBhZGRyZXNzIGlzIGNsZWFyZWQgdW50aWwgYWRkX2ludGVyZmFjZSAqLwotCWF0aDVrX2h3X3NldF9sbGFkZHIoYWgsIG1hYyk7CisJYXRoNWtfaHdfc2V0X2xsYWRkcihhaCwgKHU4W0VUSF9BTEVOXSl7fSk7CiAKIAkvKiBTZXQgQlNTSUQgdG8gYmNhc3QgYWRkcmVzczogZmY6ZmY6ZmY6ZmY6ZmY6ZmYgZm9yIG5vdyAqLwogCW1lbXNldChhaC0+YWhfYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAlhdGg1a19od19zZXRfYXNzb2NpZChhaCwgYWgtPmFoX2Jzc2lkLCAwKTsKIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKIAotCWF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KGFoKTsKKwlhdGg1a19od19yZmdhaW5fb3B0X2luaXQoYWgpOwogCiAJcmV0dXJuIGFoOwogZXJyX2ZyZWU6CkBAIC0zNTQsNiArMzQxLDggQEAKIAlpZiAoYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCiAJCWtmcmVlKGFoLT5haF9yZl9iYW5rcyk7CiAKKwlhdGg1a19lZXByb21fZGV0YWNoKGFoKTsKKwogCS8qIGFzc3VtZSBpbnRlcnJ1cHRzIGFyZSBkb3duICovCiAJa2ZyZWUoYWgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCmluZGV4IDFkNzdlZTkuLjVkNTdkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAogCiAvKiBLbm93biBQQ0kgaWRzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoNWtfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19wY2lfaWRfdGFibGVbXSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDIwNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEwIH0sIC8qIDUyMTAgZWFybHkgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEwIH0sIC8qIDUyMTAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMSksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjExIH0sIC8qIDUzMTEgLSB0aGlzIGlzIG9uIEFIQiBidXMgISovCkBAIC0xMDMsNyArMTAzLDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGg1a19wY2lfaWRfdGFibGUpOwogCiAvKiBLbm93biBTUkVWcyAqLwotc3RhdGljIHN0cnVjdCBhdGg1a19zcmV2X25hbWUgc3Jldl9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19zcmV2X25hbWUgc3Jldl9uYW1lc1tdID0gewogCXsgIjUyMTAiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MjEwIH0sCiAJeyAiNTMxMSIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUzMTEgfSwKIAl7ICI1MzExQSIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUzMTFBIH0sCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl7ICJ4eHh4eCIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9VTktOT1dOIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0aDVrX3JhdGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0aDVrX3JhdGVzW10gPSB7CiAJeyAuYml0cmF0ZSA9IDEwLAogCSAgLmh3X3ZhbHVlID0gQVRINUtfUkFURV9DT0RFXzFNLCB9LAogCXsgLmJpdHJhdGUgPSAyMCwKQEAgLTIzMiwxMyArMjMyLDE0IEBACiAJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpOwogc3RhdGljIGludCBhdGg1a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQllbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogc3RhdGljIGludCBhdGg1a19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7CiBzdGF0aWMgaW50IGF0aDVrX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogc3RhdGljIHU2NCBhdGg1a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGF0aDVrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpOwogc3RhdGljIHZvaWQgYXRoNWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHN0YXRpYyBpbnQgYXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTI0Nyw3ICsyNDgsNyBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJdTMyIGNoYW5nZXMpOwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDVrX2h3X29wcyA9IHsKIAkudHggCQk9IGF0aDVrX3R4LAogCS5zdGFydCAJCT0gYXRoNWtfc3RhcnQsCiAJLnN0b3AgCQk9IGF0aDVrX3N0b3AsCkBAIC0yNjEsNiArMjYyLDcgQEAKIAkuY29uZl90eCAJPSBOVUxMLAogCS5nZXRfdHhfc3RhdHMgCT0gYXRoNWtfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmIAk9IGF0aDVrX2dldF90c2YsCisJLnNldF90c2YgCT0gYXRoNWtfc2V0X3RzZiwKIAkucmVzZXRfdHNmIAk9IGF0aDVrX3Jlc2V0X3RzZiwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IGF0aDVrX2Jzc19pbmZvX2NoYW5nZWQsCiB9OwpAQCAtMzA4LDYgKzMxMCwxOSBAQAogCWJmLT5za2IgPSBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfcnhidWZfZnJlZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAorCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmKQoreworCUJVR19PTighYmYpOworCWlmICghYmYtPnNrYikKKwkJcmV0dXJuOworCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLCBzYy0+cnhidWZzaXplLAorCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShiZi0+c2tiKTsKKwliZi0+c2tiID0gTlVMTDsKK30KKworCiAvKiBRdWV1ZXMgc2V0dXAgKi8KIHN0YXRpYyBzdHJ1Y3QgCWF0aDVrX3R4cSAqYXRoNWtfdHhxX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJaW50IHF0eXBlLCBpbnQgc3VidHlwZSk7CkBAIC0zMzUsNiArMzUwLDcgQEAKIHN0YXRpYyB2b2lkIAlhdGg1a19iZWFjb25fc2VuZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyB2b2lkIAlhdGg1a19iZWFjb25fY29uZmlnKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHZvaWQJYXRoNWtfYmVhY29uX3VwZGF0ZV90aW1lcnMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgdTY0IGJjX3RzZik7CitzdGF0aWMgdm9pZAlhdGg1a190YXNrbGV0X2JlYWNvbih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiBzdGF0aWMgaW5saW5lIHU2NCBhdGg1a19leHRlbmRfdHNmKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiByc3RhbXApCiB7CkBAIC0zNDcsMTggKzM2MywxMyBAQAogfQogCiAvKiBJbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLXN0YXRpYyBpbnQgCWF0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19yZXN1bWUpOworc3RhdGljIGludCAJYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyBpbnQgCWF0aDVrX3N0b3BfbG9ja2VkKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIGludCAJYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3N1c3BlbmQpOworc3RhdGljIGludCAJYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGg1a19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCAJYXRoNWtfdGFza2xldF9yZXNldCh1bnNpZ25lZCBsb25nIGRhdGEpOwogCiBzdGF0aWMgdm9pZCAJYXRoNWtfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0vKiBMRUQgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50CWF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkCWF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgdm9pZAlhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIHZvaWQJYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogCiAvKgogICogTW9kdWxlIGluaXQvZXhpdCBmdW5jdGlvbnMKQEAgLTY1Myw4ICs2NjQsNiBAQAogCiAJYXRoNWtfbGVkX29mZihzYyk7CiAKLQlhdGg1a19zdG9wX2h3KHNjLCB0cnVlKTsKLQogCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTY3NiwyNyArNjg1LDE1IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qCi0JICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bwotCSAqIHJlLWRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKLQkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlCi0JICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDApOwotCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGg1a19pbnRyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKTsKIAlpZiAoZXJyKSB7CiAJCUFUSDVLX0VSUihzYywgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQllcnIgPSBhdGg1a19pbml0KHNjLCB0cnVlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9pcnE7CiAJYXRoNWtfbGVkX2VuYWJsZShzYyk7Ci0KIAlyZXR1cm4gMDsKLWVycl9pcnE6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBzYyk7CisKIGVycl9ub19pcnE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiBlcnI7CkBAIC03ODEsNiArNzc4LDcgQEAKIAl0YXNrbGV0X2luaXQoJnNjLT5yeHRxLCBhdGg1a190YXNrbGV0X3J4LCAodW5zaWduZWQgbG9uZylzYyk7CiAJdGFza2xldF9pbml0KCZzYy0+dHh0cSwgYXRoNWtfdGFza2xldF90eCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnJlc3RxLCBhdGg1a190YXNrbGV0X3Jlc2V0LCAodW5zaWduZWQgbG9uZylzYyk7CisJdGFza2xldF9pbml0KCZzYy0+YmVhY29udHEsIGF0aDVrX3Rhc2tsZXRfYmVhY29uLCAodW5zaWduZWQgbG9uZylzYyk7CiAJc2V0dXBfdGltZXIoJnNjLT5jYWxpYl90aW0sIGF0aDVrX2NhbGlicmF0ZSwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCiAJcmV0ID0gYXRoNWtfZWVwcm9tX3JlYWRfbWFjKGFoLCBtYWMpOwpAQCAtMTA5MCw4ICsxMDg4LDE4IEBACiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBpbnQgaHdfcml4KQogewotCVdBUk5fT04oaHdfcml4IDwgMCB8fCBod19yaXggPiBBUjVLX01BWF9SQVRFUyk7Ci0JcmV0dXJuIHNjLT5yYXRlX2lkeFtzYy0+Y3VyYmFuZC0+YmFuZF1baHdfcml4XTsKKwlpbnQgcml4OworCisJLyogcmV0dXJuIGJhc2UgcmF0ZSBvbiBlcnJvcnMgKi8KKwlpZiAoV0FSTihod19yaXggPCAwIHx8IGh3X3JpeCA+PSBBUjVLX01BWF9SQVRFUywKKwkJCSJod19yaXggb3V0IG9mIGJvdW5kczogJXhcbiIsIGh3X3JpeCkpCisJCXJldHVybiAwOworCisJcml4ID0gc2MtPnJhdGVfaWR4W3NjLT5jdXJiYW5kLT5iYW5kXVtod19yaXhdOworCWlmIChXQVJOKHJpeCA8IDAsICJpbnZhbGlkIGh3X3JpeDogJXhcbiIsIGh3X3JpeCkpCisJCXJpeCA9IDA7CisKKwlyZXR1cm4gcml4OwogfQogCiAvKioqKioqKioqKioqKioqXApAQCAtMTE4OCw2ICsxMTk2LDEwIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCXVuc2lnbmVkIGludCBtcnJfcmF0ZVszXSwgbXJyX3RyaWVzWzNdOwogCWludCBpLCByZXQ7CisJdTE2IGh3X3JhdGU7CisJdTE2IGN0c19yYXRlID0gMDsKKwl1MTYgZHVyYXRpb24gPSAwOworCXU4IHJjX2ZsYWdzOwogCiAJZmxhZ3MgPSBBUjVLX1RYREVTQ19JTlRSRVEgfCBBUjVLX1RYREVTQ19DTFJETUFTSzsKIApAQCAtMTE5NSwyMCArMTIwNyw0MiBAQAogCWJmLT5za2JhZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAorCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc2MtPmh3LCBpbmZvKTsKKwogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQogCQlmbGFncyB8PSBBUjVLX1RYREVTQ19OT0FDSzsKIAorCXJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKKwlod19yYXRlID0gKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkgPworCQlyYXRlLT5od192YWx1ZV9zaG9ydCA6IHJhdGUtPmh3X3ZhbHVlOworCiAJcGt0bGVuID0gc2tiLT5sZW47CiAKKwkvKiBGSVhNRTogSWYgd2UgYXJlIGluIGcgbW9kZSBhbmQgcmF0ZSBpcyBhIENDSyByYXRlCisJICogc3VidHJhY3QgYWgtPmFoX3R4cG93ZXIudHhwX2Nja19vZmRtX3B3cl9kZWx0YQorCSAqIGZyb20gdHggcG93ZXIgKHZhbHVlIGlzIGluIGRCIHVuaXRzIGFscmVhZHkpICovCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CiAJCWtleWlkeCA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwogCQlwa3RsZW4gKz0gaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47CiAJfQorCWlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgeworCQlmbGFncyB8PSBBUjVLX1RYREVTQ19SVFNFTkE7CisJCWN0c19yYXRlID0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoc2MtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CisJCWR1cmF0aW9uID0gbGUxNl90b19jcHUoaWVlZTgwMjExX3J0c19kdXJhdGlvbihzYy0+aHcsCisJCQlzYy0+dmlmLCBwa3RsZW4sIGluZm8pKTsKKwl9CisJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkgeworCQlmbGFncyB8PSBBUjVLX1RYREVTQ19DVFNFTkE7CisJCWN0c19yYXRlID0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoc2MtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CisJCWR1cmF0aW9uID0gbGUxNl90b19jcHUoaWVlZTgwMjExX2N0c3Rvc2VsZl9kdXJhdGlvbihzYy0+aHcsCisJCQlzYy0+dmlmLCBwa3RsZW4sIGluZm8pKTsKKwl9CiAJcmV0ID0gYWgtPmFoX3NldHVwX3R4X2Rlc2MoYWgsIGRzLCBwa3RsZW4sCiAJCWllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYiksIEFSNUtfUEtUX1RZUEVfTk9STUFMLAogCQkoc2MtPnBvd2VyX2xldmVsICogMiksCi0JCWllZWU4MDIxMV9nZXRfdHhfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZSwKLQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCwga2V5aWR4LCAwLCBmbGFncywgMCwgMCk7CisJCWh3X3JhdGUsCisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQsIGtleWlkeCwgMCwgZmxhZ3MsCisJCWN0c19yYXRlLCBkdXJhdGlvbik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdW5tYXA7CiAKQEAgLTEzMjQsNyArMTM1OCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT50eGJ1ZiwgbGlzdCkKIAkJYXRoNWtfdHhidWZfZnJlZShzYywgYmYpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cnhidWYsIGxpc3QpCi0JCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIGJmKTsKKwkJYXRoNWtfcnhidWZfZnJlZShzYywgYmYpOwogCiAJLyogRnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFsbCBkZXNjcmlwdG9ycyAqLwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2MtPmRlc2NfbGVuLCBzYy0+ZGVzYywgc2MtPmRlc2NfZGFkZHIpOwpAQCAtMTY2OCw2ICsxNzAyLDM0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBhdGg1a190YXNrbGV0X2JlYWNvbih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoNWtfc29mdGMgKikgZGF0YTsKKworCS8qCisJICogU29mdHdhcmUgYmVhY29uIGFsZXJ0LS10aW1lIHRvIHNlbmQgYSBiZWFjb24uCisJICoKKwkgKiBJbiBJQlNTIG1vZGUgd2UgdXNlIHRoaXMgaW50ZXJydXB0IGp1c3QgdG8KKwkgKiBrZWVwIHRyYWNrIG9mIHRoZSBuZXh0IFRCVFQgKHRhcmdldCBiZWFjb24KKwkgKiB0cmFuc21pc3Npb24gdGltZSkgaW4gb3JkZXIgdG8gZGV0ZWN0IHdldGhlcgorCSAqIGF1dG9tYXRpYyBUU0YgdXBkYXRlcyBoYXBwZW5lZC4KKwkgKi8KKwlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCisJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoc2MtPmFoKTsKKwkJc2MtPm5leHR0YnR0ICs9IHNjLT5iaW50dmFsOworCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX0JFQUNPTiwKKwkJCQkiU1dCQSBuZXh0dGJ0dDogJXggaHdfdHU6ICV4ICIKKwkJCQkiVFNGOiAlbGx4XG4iLAorCQkJCXNjLT5uZXh0dGJ0dCwKKwkJCQlUU0ZfVE9fVFUodHNmKSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmc2MtPmJsb2NrKTsKKwkJYXRoNWtfYmVhY29uX3NlbmQoc2MpOworCQlzcGluX3VubG9jaygmc2MtPmJsb2NrKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkCiBhdGg1a190YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTE5ODcsNiArMjA0OSw5IEBACiAJCQlhbnRlbm5hID0gc2MtPmJzZW50ICYgNCA/IDIgOiAxOwogCX0KIAorCS8qIEZJWE1FOiBJZiB3ZSBhcmUgaW4gZyBtb2RlIGFuZCByYXRlIGlzIGEgQ0NLIHJhdGUKKwkgKiBzdWJ0cmFjdCBhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fcHdyX2RlbHRhCisJICogZnJvbSB0eCBwb3dlciAodmFsdWUgaXMgaW4gZEIgdW5pdHMgYWxyZWFkeSkgKi8KIAlkcy0+ZHNfZGF0YSA9IGJmLT5za2JhZGRyOwogCXJldCA9IGFoLT5haF9zZXR1cF90eF9kZXNjKGFoLCBkcywgc2tiLT5sZW4sCiAJCQlpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpLApAQCAtMjAwOCw5ICsyMDczLDggQEAKICAqIGZyYW1lIGNvbnRlbnRzIGFyZSBkb25lIGFzIG5lZWRlZCBhbmQgdGhlIHNsb3QgdGltZSBpcwogICogYWxzbyBhZGp1c3RlZCBiYXNlZCBvbiBjdXJyZW50IHN0YXRlLgogICoKLSAqIHRoaXMgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAoYXRoNWtfaW50cigpKQotICogYnV0IGFsc28gZnJvbSBhdGg1a19iZWFjb25fY29uZmlnKCkgaW4gSUJTUyBtb2RlIHdoaWNoIGluIHR1cm4KLSAqIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHRhc2tsZXQgYW5kIHVzZXIgY29udGV4dAorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzb2Z0d2FyZSBpcnEgY29udGV4dCAoYmVhY29udHEgb3IgcmVzdHEKKyAqIHRhc2tsZXRzKSBvciB1c2VyIGNvbnRleHQgZnJvbSBhdGg1a19iZWFjb25fY29uZmlnLgogICovCiBzdGF0aWMgdm9pZAogYXRoNWtfYmVhY29uX3NlbmQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKQEAgLTIxNzcsMTAgKzIyNDEsNiBAQAogICoKICAqIEBzYzogc3RydWN0IGF0aDVrX3NvZnRjIHBvaW50ZXIgd2UgYXJlIG9wZXJhdGluZyBvbgogICoKLSAqIFdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSB3ZSB3YW50IHRvIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZQotICogc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUCB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGggc28gd2UgY2FuIGxvb2sgZm9yCi0gKiBhbm90aGVyIEFQIHRvIGFzc29jaWF0ZSB3aXRoLgotICoKICAqIEluIElCU1MgbW9kZSB3ZSB1c2UgYSBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGlmIHBvc3NpYmxlLiBXZSBlbmFibGUgU1dCQQogICogaW50ZXJydXB0cyB0byBkZXRlY3QgVFNGIHVwZGF0ZXMgb25seS4KICAqLwpAQCAtMjE4OCwxNCArMjI0OCwxMyBAQAogYXRoNWtfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOwogCXNjLT5ibWlzc2NvdW50ID0gMDsKIAlzYy0+aW1hc2sgJj0gfihBUjVLX0lOVF9CTUlTUyB8IEFSNUtfSU5UX1NXQkEpOwogCi0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzYy0+aW1hc2sgfD0gQVI1S19JTlRfQk1JU1M7Ci0JfSBlbHNlIGlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKIAkJCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCB8fAogCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQkvKgpAQCAtMjIxMSw5ICsyMjcwLDkgQEAKIAogCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQkJaWYgKGF0aDVrX2h3X2hhc3Zlb2woYWgpKSB7Ci0JCQkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAkJCQlhdGg1a19iZWFjb25fc2VuZChzYyk7Ci0JCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0gZWxzZQogCQkJYXRoNWtfYmVhY29uX3VwZGF0ZV90aW1lcnMoc2MsIC0xKTsKQEAgLTIyMjgsMTggKzIyODcsMTMgQEAKIFwqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAotYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSkKK2F0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAKLQlpZiAoaXNfcmVzdW1lICYmICF0ZXN0X2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKSkKLQkJZ290byBvdXRfb2s7Ci0KLQlfX2NsZWFyX2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKTsKLQogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJtb2RlICVkXG4iLCBzYy0+b3Btb2RlKTsKIAogCS8qCkBAIC0yMjU5LDcgKzIzMTMsNyBAQAogCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbc2MtPmN1cmNoYW4tPmJhbmRdOwogCXNjLT5pbWFzayA9IEFSNUtfSU5UX1JYT0sgfCBBUjVLX0lOVF9SWEVSUiB8IEFSNUtfSU5UX1JYRU9MIHwKIAkJQVI1S19JTlRfUlhPUk4gfCBBUjVLX0lOVF9UWERFU0MgfCBBUjVLX0lOVF9UWEVPTCB8Ci0JCUFSNUtfSU5UX0ZBVEFMIHwgQVI1S19JTlRfR0xPQkFMIHwgQVI1S19JTlRfTUlCOworCQlBUjVLX0lOVF9GQVRBTCB8IEFSNUtfSU5UX0dMT0JBTDsKIAlyZXQgPSBhdGg1a19yZXNldChzYywgZmFsc2UsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CkBAIC0yMjcxLDE1ICsyMzI1LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IEFSNUtfS0VZVEFCTEVfU0laRTsgaSsrKQogCQlhdGg1a19od19yZXNldF9rZXkoYWgsIGkpOwogCi0JX19zZXRfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpOwotCiAJLyogU2V0IGFjayB0byBiZSBzZW50IGF0IGxvdyBiaXQtcmF0ZXMgKi8KIAlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgZmFsc2UpOwogCiAJbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CiAKLW91dF9vazoKIAlyZXQgPSAwOwogZG9uZToKIAltbWlvd2IoKTsKQEAgLTIzMzQsNyArMjM4NSw3IEBACiAgKiBzdG9wIGlzIHByZWVtcHRlZCkuCiAgKi8KIHN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19zdXNwZW5kKQorYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCWludCByZXQ7CiAKQEAgLTIzNjUsOCArMjQxNiw2IEBACiAJCX0KIAl9CiAJYXRoNWtfdHhidWZfZnJlZShzYywgc2MtPmJidWYpOwotCWlmICghaXNfc3VzcGVuZCkKLQkJX19jbGVhcl9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7CiAKIAltbWlvd2IoKTsKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKQEAgLTIzNzUsNiArMjQyNCw3IEBACiAJdGFza2xldF9raWxsKCZzYy0+cnh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+dHh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+cmVzdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMzkyLDE2ICsyNDQyLDkgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJZG8gewotCQkvKgotCQkgKiBGaWd1cmUgb3V0IHRoZSByZWFzb24ocykgZm9yIHRoZSBpbnRlcnJ1cHQuICBOb3RlCi0JCSAqIHRoYXQgZ2V0X2lzciByZXR1cm5zIGEgcHNldWRvLUlTUiB0aGF0IG1heSBpbmNsdWRlCi0JCSAqIGJpdHMgd2UgaGF2ZW4ndCBleHBsaWNpdGx5IGVuYWJsZWQgc28gd2UgbWFzayB0aGUKLQkJICogdmFsdWUgdG8gaW5zdXJlIHdlIG9ubHkgcHJvY2VzcyBiaXRzIHdlIHJlcXVlc3RlZC4KLQkJICovCiAJCWF0aDVrX2h3X2dldF9pc3IoYWgsICZzdGF0dXMpOwkJLyogTkI6IGNsZWFycyBJUlEgdG9vICovCiAJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfSU5UUiwgInN0YXR1cyAweCV4LzB4JXhcbiIsCiAJCQkJc3RhdHVzLCBzYy0+aW1hc2spOwotCQlzdGF0dXMgJj0gc2MtPmltYXNrOyAvKiBkaXNjYXJkIHVuYXNrZWQgZm9yIGJpdHMgKi8KIAkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIEFSNUtfSU5UX0ZBVEFMKSkgewogCQkJLyoKIAkJCSAqIEZhdGFsIGVycm9ycyBhcmUgdW5yZWNvdmVyYWJsZS4KQEAgLTI0MTIsMzIgKzI0NTUsNyBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9TV0JBKSB7Ci0JCQkJLyoKLQkJCQkqIFNvZnR3YXJlIGJlYWNvbiBhbGVydC0tdGltZSB0byBzZW5kIGEgYmVhY29uLgotCQkJCSogSGFuZGxlIGJlYWNvbiB0cmFuc21pc3Npb24gZGlyZWN0bHk7IGRlZmVycmluZwotCQkJCSogdGhpcyBpcyB0b28gc2xvdyB0byBtZWV0IHRpbWluZyBjb25zdHJhaW50cwotCQkJCSogdW5kZXIgbG9hZC4KLQkJCQkqCi0JCQkJKiBJbiBJQlNTIG1vZGUgd2UgdXNlIHRoaXMgaW50ZXJydXB0IGp1c3QgdG8KLQkJCQkqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgotCQkJCSogdHJhbnNtaXNzaW9uIHRpbWUpIGluIG9yZGVyIHRvIGRldGVjdCB3ZXRoZXIKLQkJCQkqIGF1dG9tYXRpYyBUU0YgdXBkYXRlcyBoYXBwZW5lZC4KLQkJCQkqLwotCQkJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkJCSAvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCi0JCQkJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoYWgpOwotCQkJCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7Ci0JCQkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAotCQkJCQkJICAiU1dCQSBuZXh0dGJ0dDogJXggaHdfdHU6ICV4ICIKLQkJCQkJCSAgIlRTRjogJWxseFxuIiwKLQkJCQkJCSAgc2MtPm5leHR0YnR0LAotCQkJCQkJICBUU0ZfVE9fVFUodHNmKSwKLQkJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzcGluX2xvY2soJnNjLT5ibG9jayk7Ci0JCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7Ci0JCQkJfQorCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5iZWFjb250cSk7CiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfUlhFT0wpIHsKIAkJCQkvKgpAQCAtMjQ1Nyw2ICsyNDc1LDcgQEAKIAkJCQkJfCBBUjVLX0lOVF9UWEVSUiB8IEFSNUtfSU5UX1RYRU9MKSkKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+dHh0cSk7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKKwkJCQkvKiBUT0RPICovCiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfTUlCKSB7CiAJCQkJLyoKQEAgLTI0OTYsNyArMjUxNSw3IEBACiAJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQlzYy0+Y3VyY2hhbi0+aHdfdmFsdWUpOwogCi0JaWYgKGF0aDVrX2h3X2dldF9yZl9nYWluKGFoKSA9PSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSkgeworCWlmIChhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpID09IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFKSB7CiAJCS8qCiAJCSAqIFJmZ2FpbiBpcyBvdXQgb2YgYm91bmRzLCByZXNldCB0aGUgY2hpcAogCQkgKiB0byBsb2FkIG5ldyBnYWluIHZhbHVlcy4KQEAgLTI1MTQsMTMwICsyNTMzLDYgQEAKIH0KIAogCi0KLS8qKioqKioqKioqKioqKipcCi0qIExFRCBmdW5jdGlvbnMgKgotXCoqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKLQkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOwotCQlhdGg1a19sZWRfb2ZmKHNjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb24oc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlyZXR1cm47Ci0JYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3Bpbiwgc2MtPmxlZF9vbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAotCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKLXsKLQlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKLQkJbGVkX2Rldik7Ci0KLQlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQotCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWVsc2UKLQkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOwotfQotCi1zdGF0aWMgaW50Ci1hdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAotCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQotewotCWludCBlcnI7Ci0KLQlsZWQtPnNjID0gc2M7Ci0Jc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKLQlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKLQlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7Ci0KLQllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOwotCWlmIChlcnIpIHsKLQkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOwotCQlsZWQtPnNjID0gTlVMTDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKLXsKLQlpZiAoIWxlZC0+c2MpCi0JCXJldHVybjsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKLQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWxlZC0+c2MgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOwotCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1hdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07Ci0KLQkvKgotCSAqIEF1dG8tZW5hYmxlIHNvZnQgbGVkIHByb2Nlc3NpbmcgZm9yIElCTSBjYXJkcyBhbmQgZm9yCi0JICogNTIxMSBtaW5pcGNpIGNhcmRzLgotCSAqLwotCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0gfHwKLQkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpIHsKLQkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOwotCQlzYy0+bGVkX3BpbiA9IDA7Ci0JCXNjLT5sZWRfb24gPSAwOyAgLyogYWN0aXZlIGxvdyAqLwotCX0KLQkvKiBFbmFibGUgc29mdGxlZCBvbiBQSU4xIG9uIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwICYgbng1MDAwIGxhcHRvcHMgKi8KLQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSkgewotCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7Ci0JCXNjLT5sZWRfcGluID0gMTsKLQkJc2MtPmxlZF9vbiA9IDE7ICAvKiBhY3RpdmUgaGlnaCAqLwotCX0KLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlnb3RvIG91dDsKLQotCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCBuYW1lLAotCQlpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIG5hbWUsCi0JCWllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoaHcpKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICogTWFjODAyMTEgZnVuY3Rpb25zICoKIFwqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI2NjcsNyArMjU2Miw3IEBACiAJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHBhZHNpemUpIHsKIAkJCUFUSDVLX0VSUihzYywgInR4IGhkcmxlbiBub3QgJSU0OiAlZCBub3QgZW5vdWdoIgogCQkJCSAgIiBoZWFkcm9vbSB0byBwYWQgJWRcbiIsIGhkcmxlbiwgcGFkc2l6ZSk7Ci0JCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCQlnb3RvIGRyb3BfcGFja2V0OwogCQl9CiAJCXNrYl9wdXNoKHNrYiwgcGFkc2l6ZSk7CiAJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGErcGFkc2l6ZSwgaGRybGVuKTsKQEAgLTI2NzgsNyArMjU3Myw3IEBACiAJCUFUSDVLX0VSUihzYywgIm5vIGZ1cnRoZXIgdHhidWYgYXZhaWxhYmxlLCBkcm9wcGluZyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJZ290byBkcm9wX3BhY2tldDsKIAl9CiAJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHhidWYsIHN0cnVjdCBhdGg1a19idWYsIGxpc3QpOwogCWxpc3RfZGVsKCZiZi0+bGlzdCk7CkBAIC0yNjk1LDEwICsyNTkwLDEyIEBACiAJCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKIAkJc2MtPnR4YnVmX2xlbisrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7CisJCWdvdG8gZHJvcF9wYWNrZXQ7CiAJfQorCXJldHVybiBORVRERVZfVFhfT0s7CiAKK2Ryb3BfcGFja2V0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMjcyMSwxMiArMjYxOCw2IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCS8qCi0JICogVGhpcyBpcyBuZWVkZWQgb25seSB0byBzZXR1cCBpbml0aWFsIHN0YXRlCi0JICogYnV0IGl0J3MgYmVzdCBkb25lIGFmdGVyIGEgcmVzZXQuCi0JICovCi0JYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc2MtPmFoLCAwKTsKLQogCXJldCA9IGF0aDVrX3J4X3N0YXJ0KHNjKTsKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgImNhbid0IHN0YXJ0IHJlY3YgbG9naWNcbiIpOwpAQCAtMjc2NiwxMiArMjY1NywxMiBAQAogCiBzdGF0aWMgaW50IGF0aDVrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXJldHVybiBhdGg1a19pbml0KGh3LT5wcml2LCBmYWxzZSk7CisJcmV0dXJuIGF0aDVrX2luaXQoaHctPnByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg1a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWF0aDVrX3N0b3BfaHcoaHctPnByaXYsIGZhbHNlKTsKKwlhdGg1a19zdG9wX2h3KGh3LT5wcml2KTsKIH0KIAogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMjg1Niw3ICsyNzQ3LDcgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmc2MtPmxvY2spOwogCWlmIChzYy0+dmlmICE9IHZpZikgewpAQCAtMjg4Miw5ICsyNzczLDcgQEAKIAkJfQogCQlhdGg1a19iZWFjb25fdXBkYXRlKHNjLCBiZWFjb24pOwogCX0KLQltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIAotCXJldHVybiBhdGg1a19yZXNldF93YWtlKHNjKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzAyMCw4ICsyOTA5LDggQEAKIAogc3RhdGljIGludAogYXRoNWtfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCWNvbnN0IHU4ICpsb2NhbF9hZGRyLCBjb25zdCB1OCAqYWRkciwKLQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gMDsKQEAgLTMwNDQsNyArMjkzMyw4IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0VUX0tFWToKLQkJcmV0ID0gYXRoNWtfaHdfc2V0X2tleShzYy0+YWgsIGtleS0+a2V5aWR4LCBrZXksIGFkZHIpOworCQlyZXQgPSBhdGg1a19od19zZXRfa2V5KHNjLT5haCwga2V5LT5rZXlpZHgsIGtleSwKKwkJCQkgICAgICAgc3RhID8gc3RhLT5hZGRyIDogTlVMTCk7CiAJCWlmIChyZXQpIHsKIAkJCUFUSDVLX0VSUihzYywgImNhbid0IHNldCB0aGUga2V5XG4iKTsKIAkJCWdvdG8gdW5sb2NrOwpAQCAtMzEwNCw2ICsyOTk0LDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCithdGg1a19zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCWF0aDVrX2h3X3NldF90c2Y2NChzYy0+YWgsIHRzZik7Cit9CisKK3N0YXRpYyB2b2lkCiBhdGg1a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCmluZGV4IGZhY2M2MGQuLjgyMjk1NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmgKQEAgLTExMiw3ICsxMTIsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBVEhfQ0hBTl9NQVhdOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZQlyYXRlc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBUjVLX01BWF9SQVRFU107Ci0JdTgJCQlyYXRlX2lkeFtJRUVFODAyMTFfTlVNX0JBTkRTXVtBUjVLX01BWF9SQVRFU107CisJczgJCQlyYXRlX2lkeFtJRUVFODAyMTFfTlVNX0JBTkRTXVtBUjVLX01BWF9SQVRFU107CiAJZW51bSBubDgwMjExX2lmdHlwZQlvcG1vZGU7CiAJc3RydWN0IGF0aDVrX2h3CQkqYWg7CQkvKiBBdGhlcm9zIEhXICovCiAKQEAgLTE0OCw4ICsxNDgsNyBAQAogCXU4CQkJYnNzaWRtYXNrW0VUSF9BTEVOXTsKIAogCXVuc2lnbmVkIGludAkJbGVkX3BpbiwJLyogR1BJTyBwaW4gZm9yIGRyaXZpbmcgTEVEICovCi0JCQkJbGVkX29uLAkJLyogcGluIHNldHRpbmcgZm9yIExFRCBvbiAqLwotCQkJCWxlZF9vZmY7CS8qIG9mZiB0aW1lIGZvciBjdXJyZW50IGJsaW5rICovCisJCQkJbGVkX29uOwkJLyogcGluIHNldHRpbmcgZm9yIExFRCBvbiAqLwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlc3RxOwkJLyogcmVzZXQgdGFza2xldCAqLwogCkBAIC0xNzAsNiArMTY5LDcgQEAKIAlzdHJ1Y3QgYXRoNWtfbGVkCXR4X2xlZDsJCS8qIHR4IGxlZCAqLwogCiAJc3BpbmxvY2tfdAkJYmxvY2s7CQkvKiBwcm90ZWN0cyBiZWFjb24gKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJYmVhY29udHE7CS8qIGJlYWNvbiBpbnRyIHRhc2tsZXQgKi8KIAlzdHJ1Y3QgYXRoNWtfYnVmCSpiYnVmOwkJLyogYmVhY29uIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludAkJYmhhbHEsCQkvKiBTVyBxIGZvciBvdXRnb2luZyBiZWFjb25zICovCiAJCQkJYm1pc3Njb3VudCwJLyogbWlzc2VkIGJlYWNvbiB0cmFuc21pdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYwppbmRleCAxNTBmNWVkLi4zNjdhNmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9jYXBzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jCkBAIC04NSw3ICs4NSw4IEBACiAJCS8qIEVuYWJsZSAgODAyLjExYiBpZiBhIDJHSHogY2FwYWJsZSByYWRpbyAoMjExMS81MTEyKSBpcwogCQkgKiBjb25uZWN0ZWQgKi8KIAkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUIoZWVfaGVhZGVyKSB8fAotCQkJCUFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSkgeworCQkgICAgKEFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSAmJgorCQkgICAgIGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjExKSkgewogCQkJLyogMjMxMiAqLwogCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9taW4gPSAyNDEyOwogCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9tYXggPSAyNzMyOwpAQCAtOTQsNyArOTUsOCBAQAogCQkJCV9fc2V0X2JpdChBUjVLX01PREVfMTFCLAogCQkJCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAKLQkJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFHKGVlX2hlYWRlcikpCisJCQlpZiAoQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpICYmCisJCQkgICAgYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTEpCiAJCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUcsCiAJCQkJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmMKaW5kZXggY2NhZWI1Yy4uOTc3MGJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCkBAIC04MiwxNCArODIsMTQgQEAKIC8qIGRlYnVnZnM6IHJlZ2lzdGVycyAqLwogCiBzdHJ1Y3QgcmVnIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGFkZHI7CiB9OwogCiAjZGVmaW5lIFJFR19TVFJVQ1RfSU5JVChyKSB7ICNyLCByIH0KIAogLyoganVzdCBhIGZldyByYW5kb20gcmVnaXN0ZXJzLCBtaWdodCB3YW50IHRvIGFkZCBtb3JlICovCi1zdGF0aWMgc3RydWN0IHJlZyByZWdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZyByZWdzW10gPSB7CiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfQ1IpLAogCVJFR19TVFJVQ1RfSU5JVChBUjVLX1JYRFApLAogCVJFR19TVFJVQ1RfSU5JVChBUjVLX0NGRyksCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogc3RhdGljIHZvaWQgKnJlZ19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gJnJlZ3NbKnBvc10gOiBOVUxMOworCXJldHVybiAqcG9zIDwgQVJSQVlfU0laRShyZWdzKSA/ICh2b2lkICopJnJlZ3NbKnBvc10gOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCByZWdfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqcCkKQEAgLTE1Myw3ICsxNTMsNyBAQAogc3RhdGljIHZvaWQgKnJlZ19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKIHsKIAkrKypwb3M7Ci0JcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gJnJlZ3NbKnBvc10gOiBOVUxMOworCXJldHVybiAqcG9zIDwgQVJSQVlfU0laRShyZWdzKSA/ICh2b2lkICopJnJlZ3NbKnBvc10gOiBOVUxMOwogfQogCiBzdGF0aWMgaW50IHJlZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcmVnaXN0ZXJfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcmVnaXN0ZXJfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSByZWdfc3RhcnQsCiAJLm5leHQgID0gcmVnX25leHQsCiAJLnN0b3AgID0gcmVnX3N0b3AsCkBAIC0xOTMsNDMgKzE5Myw2IEBACiB9OwogCiAKLS8qIGRlYnVnZnM6IFRTRiAqLwotCi1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfdHNmKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1ZlsxMDBdOwotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwMTZsbHhcbiIsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpKTsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDE5KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV90c2Yoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzIwXTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoc3RybmNtcChidWYsICJyZXNldCIsIDUpID09IDApIHsKLQkJYXRoNWtfaHdfcmVzZXRfdHNmKHNjLT5haCk7Ci0JCXByaW50ayhLRVJOX0lORk8gImRlYnVnZnMgcmVzZXQgVFNGXG4iKTsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3RzZiA9IHsKLQkucmVhZCA9IHJlYWRfZmlsZV90c2YsCi0JLndyaXRlID0gd3JpdGVfZmlsZV90c2YsCi0JLm9wZW4gPSBhdGg1a19kZWJ1Z2ZzX29wZW4sCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi19OwotCi0KIC8qIGRlYnVnZnM6IGJlYWNvbnMgKi8KIAogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX2JlYWNvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLApAQCAtMzI3LDcgKzI5MCw3IEBACiAKIC8qIGRlYnVnZnM6IGRlYnVnIGxldmVsICovCiAKLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJZW51bSBhdGg1a19kZWJ1Z19sZXZlbCBsZXZlbDsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmRlc2M7CkBAIC00MjMsOSArMzg2LDYgQEAKIAlzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVUdPLAogCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3JlZ2lzdGVycyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc190c2YgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0c2YiLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc190c2YpOwotCiAJc2MtPmRlYnVnLmRlYnVnZnNfYmVhY29uID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYmVhY29uIiwgU19JV1VTUiB8IFNfSVJVR08sCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfYmVhY29uKTsKIApAQCAtNDQ0LDcgKzQwNCw2IEBACiB7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfZGVidWcpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlZ2lzdGVycyk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfdHNmKTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19iZWFjb24pOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jlc2V0KTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19waHlkaXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmgKaW5kZXggZmZjNTI5My4uNjZmNjlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCkBAIC03Miw3ICs3Miw2IEBACiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcGh5ZGlyOwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX2RlYnVnOwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3JlZ2lzdGVyczsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc190c2Y7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfYmVhY29uOwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3Jlc2V0OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Rlc2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Rlc2MuYwppbmRleCBiNDBhOTI4Li5kYzMwYTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZXNjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVzYy5jCkBAIC0xOTQsNiArMTk0LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXR4X3Bvd2VyICs9IGFoLT5haF90eHBvd2VyLnR4cF9vZmZzZXQ7CisJaWYgKHR4X3Bvd2VyID4gQVI1S19UVU5FX01BWF9UWFBPV0VSKQorCQl0eF9wb3dlciA9IEFSNUtfVFVORV9NQVhfVFhQT1dFUjsKKwogCS8qIENsZWFyIGRlc2NyaXB0b3IgKi8KIAltZW1zZXQoJmRlc2MtPnVkLmRzX3R4NTIxMiwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19od181MjEyX3R4X2Rlc2MpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwppbmRleCAxY2I3ZWRmLi5jMGZiM2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBSZXlrIEZsb2V0ZXIgPHJleWtAb3BlbmJzZC5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtOTgsMTEgKzk4LDYgQEAKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKLQkvKiBJbml0aWFsIFRYIHRoZXJtYWwgYWRqdXN0bWVudCB2YWx1ZXMgKi8KLQllZS0+ZWVfdHhfY2xpcCA9IDQ7Ci0JZWUtPmVlX3B3ZF84NCA9IGVlLT5lZV9wd2RfOTAgPSAxOwotCWVlLT5lZV9nYWluX3NlbGVjdCA9IDE7Ci0KIAkvKgogCSAqIFJlYWQgdmFsdWVzIGZyb20gRUVQUk9NIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBjYXBhYmlsaXR5IHN0cnVjdHVyZQogCSAqLwpAQCAtMTM3LDYgKzEzMiwxOCBAQAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMCkgewogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMCwgZWVfbWlzYzApOwogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMSwgZWVfbWlzYzEpOworCisJCS8qIFhYWDogRG9uJ3Qga25vdyB3aGljaCB2ZXJzaW9ucyBpbmNsdWRlIHRoZXNlIHR3byAqLworCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMiwgZWVfbWlzYzIpOworCisJCWlmIChlZS0+ZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMykKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MzLCBlZV9taXNjMyk7CisKKwkJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wKSB7CisJCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDNCwgZWVfbWlzYzQpOworCQkJQVI1S19FRVBST01fUkVBRF9IRFIoQVI1S19FRVBST01fTUlTQzUsIGVlX21pc2M1KTsKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0M2LCBlZV9taXNjNik7CisJCX0KIAl9CiAKIAlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMykgewpAQCAtMTkyLDcgKzE5OSw3IEBACiAKIAkvKiBHZXQgYW50ZW5uYSBtb2RlcyAqLwogCWFoLT5haF9hbnRlbm5hW21vZGVdWzBdID0KLQkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KSB8IDB4MTsKKwkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KTsKIAlhaC0+YWhfYW50ZW5uYVttb2RlXVtBUjVLX0FOVF9GSVhFRF9BXSA9CiAJICAgICBlZS0+ZWVfYW50X2NvbnRyb2xbbW9kZV1bMV0gCXwKIAkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVsyXSA8PCA2KSAJfApAQCAtMjEzLDcgKzIyMCw4IEBACiB9CiAKIC8qCi0gKiBSZWFkIHN1cHBvcnRlZCBtb2RlcyBmcm9tIGVlcHJvbQorICogUmVhZCBzdXBwb3J0ZWQgbW9kZXMgYW5kIHNvbWUgbW9kZS1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhCisgKiBmcm9tIGVlcHJvbQogICovCiBzdGF0aWMgaW50IGF0aDVrX2VlcHJvbV9yZWFkX21vZGVzKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiAqb2Zmc2V0LAogCQl1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTIyOCwyMiArMjM2LDIyIEBACiAJZWUtPmVlX2FkY19kZXNpcmVkX3NpemVbbW9kZV0JPSAoczgpKCh2YWwgPj4gOCkgJiAweGZmKTsKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6Ci0JCWVlLT5lZV9vYlttb2RlXVszXQkJPSAodmFsID4+IDUpICYgMHg3OwotCQllZS0+ZWVfZGJbbW9kZV1bM10JCT0gKHZhbCA+PiAyKSAmIDB4NzsKLQkJZWUtPmVlX29iW21vZGVdWzJdCQk9ICh2YWwgPDwgMSkgJiAweDc7CisJCWVlLT5lZV9vYlttb2RlXVszXQk9ICh2YWwgPj4gNSkgJiAweDc7CisJCWVlLT5lZV9kYlttb2RlXVszXQk9ICh2YWwgPj4gMikgJiAweDc7CisJCWVlLT5lZV9vYlttb2RlXVsyXQk9ICh2YWwgPDwgMSkgJiAweDc7CiAKIAkJQVI1S19FRVBST01fUkVBRChvKyssIHZhbCk7Ci0JCWVlLT5lZV9vYlttb2RlXVsyXQkJfD0gKHZhbCA+PiAxNSkgJiAweDE7Ci0JCWVlLT5lZV9kYlttb2RlXVsyXQkJPSAodmFsID4+IDEyKSAmIDB4NzsKLQkJZWUtPmVlX29iW21vZGVdWzFdCQk9ICh2YWwgPj4gOSkgJiAweDc7Ci0JCWVlLT5lZV9kYlttb2RlXVsxXQkJPSAodmFsID4+IDYpICYgMHg3OwotCQllZS0+ZWVfb2JbbW9kZV1bMF0JCT0gKHZhbCA+PiAzKSAmIDB4NzsKLQkJZWUtPmVlX2RiW21vZGVdWzBdCQk9IHZhbCAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzJdCXw9ICh2YWwgPj4gMTUpICYgMHgxOworCQllZS0+ZWVfZGJbbW9kZV1bMl0JPSAodmFsID4+IDEyKSAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzFdCT0gKHZhbCA+PiA5KSAmIDB4NzsKKwkJZWUtPmVlX2RiW21vZGVdWzFdCT0gKHZhbCA+PiA2KSAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzBdCT0gKHZhbCA+PiAzKSAmIDB4NzsKKwkJZWUtPmVlX2RiW21vZGVdWzBdCT0gdmFsICYgMHg3OwogCQlicmVhazsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFHOgogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6Ci0JCWVlLT5lZV9vYlttb2RlXVsxXQkJPSAodmFsID4+IDQpICYgMHg3OwotCQllZS0+ZWVfZGJbbW9kZV1bMV0JCT0gdmFsICYgMHg3OworCQllZS0+ZWVfb2JbbW9kZV1bMV0JPSAodmFsID4+IDQpICYgMHg3OworCQllZS0+ZWVfZGJbbW9kZV1bMV0JPSB2YWwgJiAweDc7CiAJCWJyZWFrOwogCX0KIApAQCAtMzE1LDYgKzMyMyw5IEBACiAJaWYgKGFoLT5haF9lZV92ZXJzaW9uIDwgQVI1S19FRVBST01fVkVSU0lPTl80XzApCiAJCWdvdG8gZG9uZTsKIAorCS8qIE5vdGU6ID49IHY1IGhhdmUgYmcgZnJlcSBwaWVycyBvbiBhbm90aGVyIGxvY2F0aW9uCisJICogc28gdGhlc2UgZnJlcSBwaWVycyBhcmUgaWdub3JlZCBmb3IgPj0gdjUgKHNob3VsZCBiZSAweGZmCisJICogYW55d2F5KSAqLwogCXN3aXRjaChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKIAkJaWYgKGFoLT5haF9lZV92ZXJzaW9uIDwgQVI1S19FRVBST01fVkVSU0lPTl80XzEpCkBAIC00NDIsNyArNDUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotCisvKiBSZWFkIG1vZGUtc3BlY2lmaWMgZGF0YSAoZXhjZXB0IHBvd2VyIGNhbGlicmF0aW9uIGRhdGEpICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21faW5pdF9tb2RlcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtNDg4LDU2ICs0OTksNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1hdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtaW4sIHU4IG1heCwgdTggKnZwKQotewotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNbXSA9Ci0JCXsgMCwgNSwgMTAsIDIwLCAzMCwgNTAsIDcwLCA4NSwgOTAsIDk1LCAxMDAgfTsKLQljb25zdCBzdGF0aWMgdTE2IGludGVyY2VwdHMzXzJbXSA9Ci0JCXsgMCwgMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwIH07Ci0JY29uc3QgdTE2ICppcDsKLQlpbnQgaTsKLQotCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMikKLQkJaXAgPSBpbnRlcmNlcHRzM18yOwotCWVsc2UKLQkJaXAgPSBpbnRlcmNlcHRzMzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGVyY2VwdHMzKTsgaSsrKQotCQkqdnArKyA9IChpcFtpXSAqIG1heCArICgxMDAgLSBpcFtpXSkgKiBtaW4pIC8gMTAwOwotfQotCisvKiBSZWFkIHRoZSBmcmVxdWVuY3kgcGllcnMgZm9yIGVhY2ggbW9kZSAobW9zdGx5IHVzZWQgb24gbmV3ZXIgZWVwcm9tcyB3aXRoIDB4ZmYKKyAqIGZyZXF1ZW5jeSBtYXNrKSAqLwogc3RhdGljIGlubGluZSBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgKm9mZnNldCwgaW50IG1heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjLCB1OCAqY291bnQpCisJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlpbnQgbyA9ICpvZmZzZXQ7CiAJaW50IGkgPSAwOwotCXU4IGYxLCBmMjsKKwl1OCBmcmVxMSwgZnJlcTI7CiAJaW50IHJldDsKIAl1MTYgdmFsOwogCisJZWUtPmVlX25fcGllcnNbbW9kZV0gPSAwOwogCXdoaWxlKGkgPCBtYXgpIHsKIAkJQVI1S19FRVBST01fUkVBRChvKyssIHZhbCk7CiAKLQkJZjEgPSAodmFsID4+IDgpICYgMHhmZjsKLQkJZjIgPSB2YWwgJiAweGZmOwotCi0JCWlmIChmMSkKLQkJCXBjW2krK10uZnJlcSA9IGYxOwotCi0JCWlmIChmMikKLQkJCXBjW2krK10uZnJlcSA9IGYyOwotCi0JCWlmICghZjEgfHwgIWYyKQorCQlmcmVxMSA9IHZhbCAmIDB4ZmY7CisJCWlmICghZnJlcTEpCiAJCQlicmVhazsKKworCQlwY1tpKytdLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCQkJZnJlcTEsIG1vZGUpOworCQllZS0+ZWVfbl9waWVyc1ttb2RlXSsrOworCisJCWZyZXEyID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJCWlmICghZnJlcTIpCisJCQlicmVhazsKKworCQlwY1tpKytdLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCQkJZnJlcTIsIG1vZGUpOworCQllZS0+ZWVfbl9waWVyc1ttb2RlXSsrOwogCX0KKworCS8qIHJldHVybiBuZXcgb2Zmc2V0ICovCiAJKm9mZnNldCA9IG87Ci0JKmNvdW50ID0gaTsKIAogCXJldHVybiAwOwogfQogCisvKiBSZWFkIGZyZXF1ZW5jeSBwaWVycyBmb3IgODAyLjExYSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX2luaXRfMTFhX3BjYWxfZnJlcShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgb2Zmc2V0KQogewpAQCAtNTUwLDcgKzU1Miw3IEBACiAJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fM18zKSB7CiAJCWF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChhaCwgJm9mZnNldCwKIAkJCUFSNUtfRUVQUk9NX05fNUdIWl9DSEFOLCBwY2FsLAotCQkJJmVlLT5lZV9uX3BpZXJzW0FSNUtfRUVQUk9NX01PREVfMTFBXSk7CisJCQlBUjVLX0VFUFJPTV9NT0RFXzExQSk7CiAJfSBlbHNlIHsKIAkJbWFzayA9IEFSNUtfRUVQUk9NX0ZSRVFfTShhaC0+YWhfZWVfdmVyc2lvbik7CiAKQEAgLTU3NywyMyArNTc5LDI1IEBACiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKIAkJcGNhbFs5XS5mcmVxIHw9ICh2YWwgPj4gMTApICYgMHgzZjsKLQkJZWUtPmVlX25fcGllcnNbQVI1S19FRVBST01fTU9ERV8xMUFdID0gMTA7Ci0JfQogCi0JZm9yKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCS8qIEZpeGVkIG51bWJlciBvZiBwaWVycyAqLworCQllZS0+ZWVfbl9waWVyc1tBUjVLX0VFUFJPTV9NT0RFXzExQV0gPSAxMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkrKykgeworCQkJcGNhbFtpXS5mcmVxID0gYXRoNWtfZWVwcm9tX2JpbjJmcmVxKGVlLAogCQkJCXBjYWxbaV0uZnJlcSwgQVI1S19FRVBST01fTU9ERV8xMUEpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlYWQgZnJlcXVlbmN5IHBpZXJzIGZvciA4MDIuMTFiZyBvbiBlZXByb20gdmVyc2lvbnMgPj0gNSBhbmQgZWVtYXAgPj0gMiAqLwogc3RhdGljIGlubGluZSBpbnQKIGF0aDVrX2VlcHJvbV9pbml0XzExYmdfMjQxMyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjYWw7Ci0JaW50IGk7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6CkBAIC02MDgsMjMgKzYxMiwxMzQgQEAKIAogCWF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChhaCwgJm9mZnNldCwKIAkJQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMywgcGNhbCwKLQkJJmVlLT5lZV9uX3BpZXJzW21vZGVdKTsKLQlmb3IoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzOyBpICs9IDEpIHsKLQkJcGNhbFtpXS5mcmVxID0gYXRoNWtfZWVwcm9tX2JpbjJmcmVxKGVlLAotCQkJCXBjYWxbaV0uZnJlcSwgbW9kZSk7CisJCW1vZGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIHBvd2VyIGNhbGlicmF0aW9uIGZvciBSRjUxMTEgY2hpcHMKKyAqCisgKiBGb3IgUkY1MTExIHdlIGhhdmUgYW4gWFBEIC1lWHRlcm5hbCBQb3dlciBEZXRlY3Rvci0gY3VydmUKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4gRWFjaCBjdXJ2ZSBoYXMgMCw1ZEIgUG93ZXIgc3RlcHMKKyAqIG9uIHggYXhpcyBhbmQgUENEQUMgc3RlcHMgKG9mZnNldHMpIG9uIHkgYXhpcyBhbmQgbG9va3MgbGlrZSBhbgorICogZXhwb25lbnRpYWwgZnVuY3Rpb24uIFRvIHJlY3JlYXRlIHRoZSBjdXJ2ZSB3ZSByZWFkIDExIHBvaW50cworICogaGVyZSBhbmQgaW50ZXJwb2xhdGUgbGF0ZXIuCisgKi8KKworLyogVXNlZCB0byBtYXRjaCBQQ0RBQyBzdGVwcyB3aXRoIHBvd2VyIHZhbHVlcyBvbiBSRjUxMTEgY2hpcHMKKyAqIChlZXByb20gdmVyc2lvbnMgPCA0KS4gRm9yIFJGNTExMSB3ZSBoYXZlIDExIHByZS1kZWZpbmVkIFBDREFDCisgKiBzdGVwcyB0aGF0IG1hdGNoIHdpdGggdGhlIHBvd2VyIHZhbHVlcyB3ZSByZWFkIGZyb20gZWVwcm9tLiBPbgorICogb2xkZXIgZWVwcm9tIHZlcnNpb25zICg8IDMuMikgdGhlc2Ugc3RlcHMgYXJlIGVxdWFseSBzcGFjZWQgYXQKKyAqIDEwJSBvZiB0aGUgcGNkYWMgY3VydmUgLXVudGlsIHRoZSBjdXJ2ZSByZWFjaGVzIGl0J3MgbWF4aW11bS0KKyAqICgxMSBzdGVwcyBmcm9tIDAgdG8gMTAwJSkgYnV0IG9uIG5ld2VyIGVlcHJvbSB2ZXJzaW9ucyAoPj0gMy4yKQorICogdGhlc2UgMTEgc3RlcHMgYXJlIHNwYWNlZCBpbiBhIGRpZmZlcmVudCB3YXkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICogdGhlIHBjZGFjIHN0ZXBzIGJhc2VkIG9uIGVlcHJvbSB2ZXJzaW9uIGFuZCBjdXJ2ZSBtaW4vbWF4IHNvIHRoYXQgd2UKKyAqIGNhbiBoYXZlIHBjZGFjL3B3ciBwb2ludHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXRoNWtfZ2V0X3BjZGFjX2ludGVyY2VwdHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggbWluLCB1OCBtYXgsIHU4ICp2cCkKK3sKKwljb25zdCBzdGF0aWMgdTE2IGludGVyY2VwdHMzW10gPQorCQl7IDAsIDUsIDEwLCAyMCwgMzAsIDUwLCA3MCwgODUsIDkwLCA5NSwgMTAwIH07CisJY29uc3Qgc3RhdGljIHUxNiBpbnRlcmNlcHRzM18yW10gPQorCQl7IDAsIDEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTAsIDEwMCB9OworCWNvbnN0IHUxNiAqaXA7CisJaW50IGk7CisKKwlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl8zXzIpCisJCWlwID0gaW50ZXJjZXB0czNfMjsKKwllbHNlCisJCWlwID0gaW50ZXJjZXB0czM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnRlcmNlcHRzMyk7IGkrKykKKwkJdnBbaV0gPSAoaXBbaV0gKiBtYXggKyAoMTAwIC0gaXBbaV0pICogbWluKSAvIDEwMDsKK30KKworLyogQ29udmVydCBSRjUxMTEgc3BlY2lmaWMgZGF0YSB0byBnZW5lcmljIHJhdyBkYXRhCisgKiB1c2VkIGJ5IGludGVycG9sYXRpb24gY29kZSAqLworc3RhdGljIGludAorYXRoNWtfZWVwcm9tX2NvbnZlcnRfcGNhbF9pbmZvXzUxMTEoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUsCisJCQkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpjaGluZm8pCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMSAqcGNpbmZvOworCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQ7CisJdTggcGllciwgcG9pbnQsIGlkeDsKKwl1OCAqcGRnYWluX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W21vZGVdOworCisJLyogRmlsbCByYXcgZGF0YSBmb3IgZWFjaCBjYWxpYnJhdGlvbiBwaWVyICovCisJZm9yIChwaWVyID0gMDsgcGllciA8IGVlLT5lZV9uX3BpZXJzW21vZGVdOyBwaWVyKyspIHsKKworCQlwY2luZm8gPSAmY2hpbmZvW3BpZXJdLnJmNTExMV9pbmZvOworCisJCS8qIEFsbG9jYXRlIHBkX2N1cnZlcyBmb3IgdGhpcyBjYWwgcGllciAqLworCQljaGluZm9bcGllcl0ucGRfY3VydmVzID0KKwkJCWtjYWxsb2MoQVI1S19FRVBST01fTl9QRF9DVVJWRVMsCisJCQkJc2l6ZW9mKHN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFjaGluZm9bcGllcl0ucGRfY3VydmVzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogT25seSBvbmUgY3VydmUgZm9yIFJGNTExMQorCQkgKiBmaW5kIG91dCB3aGljaCBvbmUgYW5kIHBsYWNlCisJCSAqIGluIGluIHBkX2N1cnZlcy4KKwkJICogTm90ZTogZWVfeF9nYWluIGlzIHJldmVyc2VkIGhlcmUgKi8KKwkJZm9yIChpZHggPSAwOyBpZHggPCBBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUzsgaWR4KyspIHsKKworCQkJaWYgKCEoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gaWR4KSAmIDB4MSkpIHsKKwkJCQlwZGdhaW5faWR4WzBdID0gaWR4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gMTsKKworCQlwZCA9ICZjaGluZm9bcGllcl0ucGRfY3VydmVzW2lkeF07CisKKwkJcGQtPnBkX3BvaW50cyA9IEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExOworCisJCS8qIEFsbG9jYXRlIHBkIHBvaW50cyBmb3IgdGhpcyBjdXJ2ZSAqLworCQlwZC0+cGRfc3RlcCA9IGtjYWxsb2MoQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTEsCisJCQkJCXNpemVvZih1OCksIEdGUF9LRVJORUwpOworCQlpZiAoIXBkLT5wZF9zdGVwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcGQtPnBkX3B3ciA9IGtjYWxsb2MoQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTEsCisJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZC0+cGRfcHdyKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogRmlsbCByYXcgZGF0YXNldAorCQkgKiAoY29udmVydCBwb3dlciB0byAwLjI1ZEIgdW5pdHMKKwkJICogZm9yIFJGNTExMiBjb21iYXRpYmlsaXR5KSAqLworCQlmb3IgKHBvaW50ID0gMDsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOyBwb2ludCsrKSB7CisKKwkJCS8qIEFic29sdXRlIHZhbHVlcyAqLworCQkJcGQtPnBkX3B3cltwb2ludF0gPSAyICogcGNpbmZvLT5wd3JbcG9pbnRdOworCisJCQkvKiBBbHJlYWR5IHNvcnRlZCAqLworCQkJcGQtPnBkX3N0ZXBbcG9pbnRdID0gcGNpbmZvLT5wY2RhY1twb2ludF07CisJCX0KKworCQkvKiBTZXQgbWluL21heCBwd3IgKi8KKwkJY2hpbmZvW3BpZXJdLm1pbl9wd3IgPSBwZC0+cGRfcHdyWzBdOworCQljaGluZm9bcGllcl0ubWF4X3B3ciA9IHBkLT5wZF9wd3JbMTBdOworCiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLQorLyogUGFyc2UgRUVQUk9NIGRhdGEgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb181MTExKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNhbDsKIAlpbnQgb2Zmc2V0LCByZXQ7Ci0JaW50IGksIGo7CisJaW50IGk7CiAJdTE2IHZhbDsKIAogCW9mZnNldCA9IEFSNUtfRUVQUk9NX0dST1VQU19TVEFSVChlZS0+ZWVfdmVyc2lvbik7CkBAIC03MDQsMjYgKzgxOSwxNjcgQEAKIAogCQlhdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhhaCwgY2RhdGEtPnBjZGFjX21pbiwKIAkJCWNkYXRhLT5wY2RhY19tYXgsIGNkYXRhLT5wY2RhYyk7CisJfQogCi0JCWZvciAoaiA9IDA7IGogPCBBUjVLX0VFUFJPTV9OX1BDREFDOyBqKyspIHsKLQkJCWNkYXRhLT5wd3Jbal0gPSAodTE2KQotCQkJCShBUjVLX0VFUFJPTV9QT1dFUl9TVEVQICogY2RhdGEtPnB3cltqXSk7CisJcmV0dXJuIGF0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb181MTExKGFoLCBtb2RlLCBwY2FsKTsKK30KKworCisvKgorICogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkY1MTEyIGNoaXBzCisgKgorICogRm9yIFJGNTExMiB3ZSBoYXZlIDQgWFBEIC1lWHRlcm5hbCBQb3dlciBEZXRlY3Rvci0gY3VydmVzCisgKiBmb3IgZWFjaCBjYWxpYnJhdGVkIGNoYW5uZWwgb24gMCwgLTYsIC0xMiBhbmQgLTE4ZGJtIGJ1dCB3ZSBvbmx5CisgKiB1c2UgdGhlIGhpZ2hlciAoMykgYW5kIHRoZSBsb3dlciAoMCkgY3VydmVzLiBFYWNoIGN1cnZlIGhhcyAwLjVkQgorICogcG93ZXIgc3RlcHMgb24geCBheGlzIGFuZCBQQ0RBQyBzdGVwcyBvbiB5IGF4aXMgYW5kIGxvb2tzIGxpa2UgYQorICogbGluZWFyIGZ1bmN0aW9uLiBUbyByZWNyZWF0ZSB0aGUgY3VydmUgYW5kIHBhc3MgdGhlIHBvd2VyIHZhbHVlcworICogb24gaHcsIHdlIHJlYWQgNCBwb2ludHMgZm9yIHhwZCAwIChsb3dlciBnYWluIC0+IG1heCBwb3dlcikKKyAqIGFuZCAzIHBvaW50cyBmb3IgeHBkIDMgKGhpZ2hlciBnYWluIC0+IGxvd2VyIHBvd2VyKSBoZXJlIGFuZAorICogaW50ZXJwb2xhdGUgbGF0ZXIuCisgKgorICogTm90ZTogTWFueSB2ZW5kb3JzIGp1c3QgdXNlIHhwZCAwIHNvIHhwZCAzIGlzIHplcm9lZC4KKyAqLworCisvKiBDb252ZXJ0IFJGNTExMiBzcGVjaWZpYyBkYXRhIHRvIGdlbmVyaWMgcmF3IGRhdGEKKyAqIHVzZWQgYnkgaW50ZXJwb2xhdGlvbiBjb2RlICovCitzdGF0aWMgaW50CithdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fNTExMihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbW9kZSwKKwkJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmNoaW5mbykKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmY1MTEyICpwY2luZm87CisJdTggKnBkZ2Fpbl9pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFttb2RlXTsKKwl1bnNpZ25lZCBpbnQgcGllciwgcGRnLCBwb2ludDsKKworCS8qIEZpbGwgcmF3IGRhdGEgZm9yIGVhY2ggY2FsaWJyYXRpb24gcGllciAqLworCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7CisKKwkJcGNpbmZvID0gJmNoaW5mb1twaWVyXS5yZjUxMTJfaW5mbzsKKworCQkvKiBBbGxvY2F0ZSBwZF9jdXJ2ZXMgZm9yIHRoaXMgY2FsIHBpZXIgKi8KKwkJY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyA9CisJCQkJa2NhbGxvYyhBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyksCisJCQkJCUdGUF9LRVJORUwpOworCisJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIEZpbGwgcGRfY3VydmVzICovCisJCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgeworCisJCQl1OCBpZHggPSBwZGdhaW5faWR4W3BkZ107CisJCQlzdHJ1Y3QgYXRoNWtfcGRnYWluX2luZm8gKnBkID0KKwkJCQkJJmNoaW5mb1twaWVyXS5wZF9jdXJ2ZXNbaWR4XTsKKworCQkJLyogTG93ZXN0IGdhaW4gY3VydmUgKG1heCBwb3dlcikgKi8KKwkJCWlmIChwZGcgPT0gMCkgeworCQkJCS8qIE9uZSBtb3JlIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgKi8KKwkJCQlwZC0+cGRfcG9pbnRzID0gQVI1S19FRVBST01fTl9YUEQwX1BPSU5UUzsKKworCQkJCS8qIEFsbG9jYXRlIHBkIHBvaW50cyBmb3IgdGhpcyBjdXJ2ZSAqLworCQkJCXBkLT5wZF9zdGVwID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAorCQkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisKKwkJCQlpZiAoIXBkLT5wZF9zdGVwKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJCXBkLT5wZF9wd3IgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCQlzaXplb2YoczE2KSwgR0ZQX0tFUk5FTCk7CisKKwkJCQlpZiAoIXBkLT5wZF9wd3IpCisJCQkJCXJldHVybiAtRU5PTUVNOworCisKKwkJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCQkJICogKGFsbCBwb3dlciBsZXZlbHMgYXJlIGluIDAuMjVkQiB1bml0cykgKi8KKwkJCQlwZC0+cGRfc3RlcFswXSA9IHBjaW5mby0+cGNkYWNfeDBbMF07CisJCQkJcGQtPnBkX3B3clswXSA9IHBjaW5mby0+cHdyX3gwWzBdOworCisJCQkJZm9yIChwb2ludCA9IDE7IHBvaW50IDwgcGQtPnBkX3BvaW50czsKKwkJCQlwb2ludCsrKSB7CisJCQkJCS8qIEFic29sdXRlIHZhbHVlcyAqLworCQkJCQlwZC0+cGRfcHdyW3BvaW50XSA9CisJCQkJCQlwY2luZm8tPnB3cl94MFtwb2ludF07CisKKwkJCQkJLyogRGVsdGFzICovCisJCQkJCXBkLT5wZF9zdGVwW3BvaW50XSA9CisJCQkJCQlwZC0+cGRfc3RlcFtwb2ludCAtIDFdICsKKwkJCQkJCXBjaW5mby0+cGNkYWNfeDBbcG9pbnRdOworCQkJCX0KKworCQkJCS8qIFNldCBtaW4gcG93ZXIgZm9yIHRoaXMgZnJlcXVlbmN5ICovCisJCQkJY2hpbmZvW3BpZXJdLm1pbl9wd3IgPSBwZC0+cGRfcHdyWzBdOworCisJCQkvKiBIaWdoZXN0IGdhaW4gY3VydmUgKG1pbiBwb3dlcikgKi8KKwkJCX0gZWxzZSBpZiAocGRnID09IDEpIHsKKworCQkJCXBkLT5wZF9wb2ludHMgPSBBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTOworCisJCQkJLyogQWxsb2NhdGUgcGQgcG9pbnRzIGZvciB0aGlzIGN1cnZlICovCisJCQkJcGQtPnBkX3N0ZXAgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKKworCQkJCWlmICghcGQtPnBkX3N0ZXApCisJCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkJcGQtPnBkX3B3ciA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKworCQkJCWlmICghcGQtPnBkX3B3cikKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCQkJICogKGFsbCBwb3dlciBsZXZlbHMgYXJlIGluIDAuMjVkQiB1bml0cykgKi8KKwkJCQlmb3IgKHBvaW50ID0gMDsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOworCQkJCXBvaW50KyspIHsKKwkJCQkJLyogQWJzb2x1dGUgdmFsdWVzICovCisJCQkJCXBkLT5wZF9wd3JbcG9pbnRdID0KKwkJCQkJCXBjaW5mby0+cHdyX3gzW3BvaW50XTsKKworCQkJCQkvKiBGaXhlZCBwb2ludHMgKi8KKwkJCQkJcGQtPnBkX3N0ZXBbcG9pbnRdID0KKwkJCQkJCXBjaW5mby0+cGNkYWNfeDNbcG9pbnRdOworCQkJCX0KKworCQkJCS8qIFNpbmNlIHdlIGhhdmUgYSBoaWdoZXIgZ2FpbiBjdXJ2ZQorCQkJCSAqIG92ZXJyaWRlIG1pbiBwb3dlciAqLworCQkJCWNoaW5mb1twaWVyXS5taW5fcHdyID0gcGQtPnBkX3B3clswXTsKKwkJCX0KIAkJfQogCX0KIAogCXJldHVybiAwOwogfQogCisvKiBQYXJzZSBFRVBST00gZGF0YSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzUxMTIoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMiAqY2hhbl9wY2FsX2luZm87CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpnZW5fY2hhbl9pbmZvOworCXU4ICpwZGdhaW5faWR4ID0gZWUtPmVlX3BkY190b19pZHhbbW9kZV07CiAJdTMyIG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgaSwgYzsKKwl1OCBpLCBjOwogCXUxNiB2YWw7CiAJaW50IHJldDsKKwl1OCBwZF9nYWlucyA9IDA7CisKKwkvKiBDb3VudCBob3cgbWFueSBjdXJ2ZXMgd2UgaGF2ZSBhbmQKKwkgKiBpZGVudGlmeSB0aGVtICh3aGljaCBvbmUgb2YgdGhlIDQKKwkgKiBhdmFpbGFibGUgY3VydmVzIHdlIGhhdmUgb24gZWFjaCBjb3VudCkuCisJICogQ3VydmVzIGFyZSBzdG9yZWQgZnJvbSBsb3dlciAoeDApIHRvCisJICogaGlnaGVyICh4MykgZ2FpbiAqLworCWZvciAoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUzsgaSsrKSB7CisJCS8qIGVlX3hfZ2Fpblttb2RlXSBpcyB4IGdhaW4gbWFzayAqLworCQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gaSkgJiAweDEpCisJCQlwZGdhaW5faWR4W3BkX2dhaW5zKytdID0gaTsKKwl9CisJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gcGRfZ2FpbnM7CisKKwlpZiAocGRfZ2FpbnMgPT0gMCB8fCBwZF9nYWlucyA+IDIpCisJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKQEAgLTc2MSwxMyArMTAxNywxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgaSsrKSB7CiAJCWNoYW5fcGNhbF9pbmZvID0gJmdlbl9jaGFuX2luZm9baV0ucmY1MTEyX2luZm87CiAKLQkJLyogUG93ZXIgdmFsdWVzIGluIGRCbSAqIDQKKwkJLyogUG93ZXIgdmFsdWVzIGluIHF1YXJ0ZXIgZEIKIAkJICogZm9yIHRoZSBsb3dlciB4cGQgZ2FpbiBjdXJ2ZQogCQkgKiAoMCBkQm0gLT4gaGlnaGVyIG91dHB1dCBwb3dlcikgKi8KIAkJZm9yIChjID0gMDsgYyA8IEFSNUtfRUVQUk9NX05fWFBEMF9QT0lOVFM7IGMrKykgewogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JfeDBbY10gPSAodmFsICYgMHhmZik7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX3gwWysrY10gPSAoKHZhbCA+PiA4KSAmIDB4ZmYpOworCQkJY2hhbl9wY2FsX2luZm8tPnB3cl94MFtjXSA9IChzOCkgKHZhbCAmIDB4ZmYpOworCQkJY2hhbl9wY2FsX2luZm8tPnB3cl94MFsrK2NdID0gKHM4KSAoKHZhbCA+PiA4KSAmIDB4ZmYpOwogCQl9CiAKIAkJLyogUENEQUMgc3RlcHMKQEAgLTc3OCw0MiArMTAzNCw2MSBAQAogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMl0gPSAoKHZhbCA+PiA1KSAmIDB4MWYpOwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbM10gPSAoKHZhbCA+PiAxMCkgJiAweDFmKTsKIAotCQkvKiBQb3dlciB2YWx1ZXMgaW4gZEJtICogNAorCQkvKiBQb3dlciB2YWx1ZXMgaW4gcXVhcnRlciBkQgogCQkgKiBmb3IgdGhlIGhpZ2hlciB4cGQgZ2FpbiBjdXJ2ZQogCQkgKiAoMTggZEJtIC0+IGxvd2VyIG91dHB1dCBwb3dlcikgKi8KIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1swXSA9ICh2YWwgJiAweGZmKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1sxXSA9ICgodmFsID4+IDgpICYgMHhmZik7CisJCWNoYW5fcGNhbF9pbmZvLT5wd3JfeDNbMF0gPSAoczgpICh2YWwgJiAweGZmKTsKKwkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1sxXSA9IChzOCkgKCh2YWwgPj4gOCkgJiAweGZmKTsKIAogCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwogCQljaGFuX3BjYWxfaW5mby0+cHdyX3gzWzJdID0gKHZhbCAmIDB4ZmYpOwogCiAJCS8qIFBDREFDIHN0ZXBzCiAJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFib3ZlIHBvd2VyCi0JCSAqIG1lYXN1cmVtZW50cyAoc3RhdGljKSAqLworCQkgKiBtZWFzdXJlbWVudHMgKGZpeGVkKSAqLwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDNbMF0gPSAyMDsKIAkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gzWzFdID0gMzU7CiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194M1syXSA9IDYzOwogCiAJCWlmIChlZS0+ZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMykgewotCQkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzBdID0gKCh2YWwgPj4gOCkgJiAweGZmKTsKKwkJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFswXSA9ICgodmFsID4+IDgpICYgMHgzZik7CiAKIAkJCS8qIExhc3QgeHBkMCBwb3dlciBsZXZlbCBpcyBhbHNvIGNoYW5uZWwgbWF4aW11bSAqLwogCQkJZ2VuX2NoYW5faW5mb1tpXS5tYXhfcHdyID0gY2hhbl9wY2FsX2luZm8tPnB3cl94MFszXTsKIAkJfSBlbHNlIHsKIAkJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFswXSA9IDE7Ci0JCQlnZW5fY2hhbl9pbmZvW2ldLm1heF9wd3IgPSAoKHZhbCA+PiA4KSAmIDB4ZmYpOworCQkJZ2VuX2NoYW5faW5mb1tpXS5tYXhfcHdyID0gKHM4KSAoKHZhbCA+PiA4KSAmIDB4ZmYpOwogCQl9CiAKLQkJLyogUmVjcmVhdGUgcGNkYWNfeDAgdGFibGUgZm9yIHRoaXMgY2hhbm5lbCB1c2luZyBwY2RhYyBzdGVwcyAqLwotCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMV0gKz0gY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzBdOwotCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMl0gKz0gY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzFdOwotCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbM10gKz0gY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzJdOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBhdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fNTExMihhaCwgbW9kZSwgZ2VuX2NoYW5faW5mbyk7CiB9CiAKKworLyoKKyAqIFJlYWQgcG93ZXIgY2FsaWJyYXRpb24gZm9yIFJGMjQxMyBjaGlwcworICoKKyAqIEZvciBSRjI0MTMgd2UgaGF2ZSBhIFBvd2VyIHRvIFBEREFDIHRhYmxlIChQb3dlciBEZXRlY3RvcikKKyAqIGluc3RlYWQgb2YgYSBQQ0RBQyBhbmQgNCBwZCBnYWluIGN1cnZlcyBmb3IgZWFjaCBjYWxpYnJhdGVkIGNoYW5uZWwuCisgKiBFYWNoIGN1cnZlIGhhcyBwb3dlciBvbiB4IGF4aXMgaW4gMC41IGRiIHN0ZXBzIGFuZCBQRERBREMgc3RlcHMgb24geQorICogYXhpcyBhbmQgbG9va3MgbGlrZSBhbiBleHBvbmVudGlhbCBmdW5jdGlvbiBsaWtlIHRoZSBSRjUxMTEgY3VydmUuCisgKgorICogVG8gcmVjcmVhdGUgdGhlIGN1cnZlcyB3ZSByZWFkIGhlcmUgdGhlIHBvaW50cyBhbmQgaW50ZXJwb2xhdGUKKyAqIGxhdGVyLiBOb3RlIHRoYXQgaW4gbW9zdCBjYXNlcyBvbmx5IDIgKGhpZ2hlciBhbmQgbG93ZXIpIGN1cnZlcyBhcmUKKyAqIHVzZWQgKGxpa2UgUkY1MTEyKSBidXQgdmVuZG9ycyBoYXZlIHRoZSBvcG9ydHVuaXR5IHRvIGluY2x1ZGUgYWxsCisgKiA0IGN1cnZlcyBvbiBlZXByb20uIFRoZSBmaW5hbCBjdXJ2ZSAoaGlnaGVyIHBvd2VyKSBoYXMgYW4gZXh0cmEKKyAqIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgbGlrZSBSRjUxMTIuCisgKi8KKworLyogRm9yIFJGMjQxMyBwb3dlciBjYWxpYnJhdGlvbiBkYXRhIGRvZXNuJ3Qgc3RhcnQgb24gYSBmaXhlZCBsb2NhdGlvbiBhbmQKKyAqIGlmIGEgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLCBpdCdzIHNlY3Rpb24gaXMgbWlzc2luZyAtbm90IHplcm9lZC0uCisgKiBTbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgb2Zmc2V0IGZvciBlYWNoIHNlY3Rpb24gYnkgdXNpbmcKKyAqIHRoZXNlIHR3byBmdW5jdGlvbnMgKi8KKworLyogUmV0dXJuIHRoZSBzaXplIG9mIGVhY2ggc2VjdGlvbiBiYXNlZCBvbiB0aGUgbW9kZSBhbmQgdGhlIG51bWJlciBvZiBwZAorICogZ2FpbnMgYXZhaWxhYmxlIChtYXhpbXVtIDQpLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKHN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUsIHVuc2lnbmVkIGludCBtb2RlKQogewpAQCAtODI2LDYgKzExMDEsOCBAQAogCXJldHVybiBzejsKIH0KIAorLyogUmV0dXJuIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGEgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbW9kZXMgc3VwcG9ydGVkCisgKiBhbmQgZWFjaCBzZWN0aW9uJ3Mgc2l6ZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGF0aDVrX2NhbF9kYXRhX29mZnNldF8yNDEzKHN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUsIGludCBtb2RlKQogewpAQCAtODM0LDExICsxMTExLDE1IEBACiAJc3dpdGNoKG1vZGUpIHsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFHOgogCQlpZiAoQVI1S19FRVBST01fSERSXzExQihlZS0+ZWVfaGVhZGVyKSkKLQkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwgQVI1S19FRVBST01fTU9ERV8xMUIpICsgMjsKKwkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwKKwkJCQkJQVI1S19FRVBST01fTU9ERV8xMUIpICsKKwkJCQkJQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMyAvIDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6CiAJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFBKGVlLT5lZV9oZWFkZXIpKQotCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQSkgKyA1OworCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLAorCQkJCQlBUjVLX0VFUFJPTV9NT0RFXzExQSkgKworCQkJCQlBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTiAvIDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWJyZWFrOwpAQCAtODQ5LDI0ICsxMTMwLDExNyBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKKy8qIENvbnZlcnQgUkYyNDEzIHNwZWNpZmljIGRhdGEgdG8gZ2VuZXJpYyByYXcgZGF0YQorICogdXNlZCBieSBpbnRlcnBvbGF0aW9uIGNvZGUgKi8KK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlLAorCQkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgKnBjaW5mbzsKKwl1OCAqcGRnYWluX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W21vZGVdOworCXVuc2lnbmVkIGludCBwaWVyLCBwZGcsIHBvaW50OworCisJLyogRmlsbCByYXcgZGF0YSBmb3IgZWFjaCBjYWxpYnJhdGlvbiBwaWVyICovCisJZm9yIChwaWVyID0gMDsgcGllciA8IGVlLT5lZV9uX3BpZXJzW21vZGVdOyBwaWVyKyspIHsKKworCQlwY2luZm8gPSAmY2hpbmZvW3BpZXJdLnJmMjQxM19pbmZvOworCisJCS8qIEFsbG9jYXRlIHBkX2N1cnZlcyBmb3IgdGhpcyBjYWwgcGllciAqLworCQljaGluZm9bcGllcl0ucGRfY3VydmVzID0KKwkJCQlrY2FsbG9jKEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTLAorCQkJCQlzaXplb2Yoc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFjaGluZm9bcGllcl0ucGRfY3VydmVzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogRmlsbCBwZF9jdXJ2ZXMgKi8KKwkJZm9yIChwZGcgPSAwOyBwZGcgPCBlZS0+ZWVfcGRfZ2FpbnNbbW9kZV07IHBkZysrKSB7CisKKwkJCXU4IGlkeCA9IHBkZ2Fpbl9pZHhbcGRnXTsKKwkJCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQgPQorCQkJCQkmY2hpbmZvW3BpZXJdLnBkX2N1cnZlc1tpZHhdOworCisJCQkvKiBPbmUgbW9yZSBwb2ludCBmb3IgdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCSAqIGN1cnZlIChsb3dlc3QgZ2FpbikgKi8KKwkJCWlmIChwZGcgPT0gZWUtPmVlX3BkX2dhaW5zW21vZGVdIC0gMSkKKwkJCQlwZC0+cGRfcG9pbnRzID0gQVI1S19FRVBST01fTl9QRF9QT0lOVFM7CisJCQllbHNlCisJCQkJcGQtPnBkX3BvaW50cyA9IEFSNUtfRUVQUk9NX05fUERfUE9JTlRTIC0gMTsKKworCQkJLyogQWxsb2NhdGUgcGQgcG9pbnRzIGZvciB0aGlzIGN1cnZlICovCisJCQlwZC0+cGRfc3RlcCA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisKKwkJCWlmICghcGQtPnBkX3N0ZXApCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCXBkLT5wZF9wd3IgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKCFwZC0+cGRfcHdyKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCQkgKiBjb252ZXJ0IGFsbCBwd3IgbGV2ZWxzIHRvCisJCQkgKiBxdWFydGVyIGRCIGZvciBSRjUxMTIgY29tYmF0aWJpbGl0eSAqLworCQkJcGQtPnBkX3N0ZXBbMF0gPSBwY2luZm8tPnBkZGFjX2lbcGRnXTsKKwkJCXBkLT5wZF9wd3JbMF0gPSA0ICogcGNpbmZvLT5wd3JfaVtwZGddOworCisJCQlmb3IgKHBvaW50ID0gMTsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOyBwb2ludCsrKSB7CisKKwkJCQlwZC0+cGRfcHdyW3BvaW50XSA9IHBkLT5wZF9wd3JbcG9pbnQgLSAxXSArCisJCQkJCTIgKiBwY2luZm8tPnB3cltwZGddW3BvaW50IC0gMV07CisKKwkJCQlwZC0+cGRfc3RlcFtwb2ludF0gPSBwZC0+cGRfc3RlcFtwb2ludCAtIDFdICsKKwkJCQkJCXBjaW5mby0+cGRkYWNbcGRnXVtwb2ludCAtIDFdOworCisJCQl9CisKKwkJCS8qIEhpZ2hlc3QgZ2FpbiBjdXJ2ZSAtPiBtaW4gcG93ZXIgKi8KKwkJCWlmIChwZGcgPT0gMCkKKwkJCQljaGluZm9bcGllcl0ubWluX3B3ciA9IHBkLT5wZF9wd3JbMF07CisKKwkJCS8qIExvd2VzdCBnYWluIGN1cnZlIC0+IG1heCBwb3dlciAqLworCQkJaWYgKHBkZyA9PSBlZS0+ZWVfcGRfZ2FpbnNbbW9kZV0gLSAxKQorCQkJCWNoaW5mb1twaWVyXS5tYXhfcHdyID0KKwkJCQkJcGQtPnBkX3B3cltwZC0+cGRfcG9pbnRzIC0gMV07CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUGFyc2UgRUVQUk9NIGRhdGEgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgKmNoYW5fcGNhbF9pbmZvOwotCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqZ2VuX2NoYW5faW5mbzsKLQl1bnNpZ25lZCBpbnQgaSwgYzsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmYyNDEzICpwY2luZm87CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpjaGluZm87CisJdTggKnBkZ2Fpbl9pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFttb2RlXTsKIAl1MzIgb2Zmc2V0OwotCWludCByZXQ7CisJaW50IGlkeCwgaSwgcmV0OwogCXUxNiB2YWw7CiAJdTggcGRfZ2FpbnMgPSAwOwogCi0JaWYgKGVlLT5lZV94X2dhaW5bbW9kZV0gJiAweDEpIHBkX2dhaW5zKys7Ci0JaWYgKChlZS0+ZWVfeF9nYWluW21vZGVdID4+IDEpICYgMHgxKSBwZF9nYWlucysrOwotCWlmICgoZWUtPmVlX3hfZ2Fpblttb2RlXSA+PiAyKSAmIDB4MSkgcGRfZ2FpbnMrKzsKLQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gMykgJiAweDEpIHBkX2dhaW5zKys7CisJLyogQ291bnQgaG93IG1hbnkgY3VydmVzIHdlIGhhdmUgYW5kCisJICogaWRlbnRpZnkgdGhlbSAod2hpY2ggb25lIG9mIHRoZSA0CisJICogYXZhaWxhYmxlIGN1cnZlcyB3ZSBoYXZlIG9uIGVhY2ggY291bnQpLgorCSAqIEN1cnZlcyBhcmUgc3RvcmVkIGZyb20gaGlnaGVyIHRvCisJICogbG93ZXIgZ2FpbiBzbyB3ZSBnbyBiYWNrd2FyZHMgKi8KKwlmb3IgKGlkeCA9IEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTIC0gMTsgaWR4ID49IDA7IGlkeC0tKSB7CisJCS8qIGVlX3hfZ2Fpblttb2RlXSBpcyB4IGdhaW4gbWFzayAqLworCQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gaWR4KSAmIDB4MSkKKwkJCXBkZ2Fpbl9pZHhbcGRfZ2FpbnMrK10gPSBpZHg7CisKKwl9CiAJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gcGRfZ2FpbnM7CiAKKwlpZiAocGRfZ2FpbnMgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlvZmZzZXQgPSBhdGg1a19jYWxfZGF0YV9vZmZzZXRfMjQxMyhlZSwgbW9kZSk7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKQEAgLTg3NSw3ICsxMjQ5LDcgQEAKIAogCQlhdGg1a19lZXByb21faW5pdF8xMWFfcGNhbF9mcmVxKGFoLCBvZmZzZXQpOwogCQlvZmZzZXQgKz0gQVI1S19FRVBST01fTl81R0haX0NIQU4gLyAyOwotCQlnZW5fY2hhbl9pbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKIAkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQpAQCAtODgzLDcgKzEyNTcsNyBAQAogCiAJCWF0aDVrX2VlcHJvbV9pbml0XzExYmdfMjQxMyhhaCwgbW9kZSwgb2Zmc2V0KTsKIAkJb2Zmc2V0ICs9IEFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTMgLyAyOwotCQlnZW5fY2hhbl9pbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKIAkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQpAQCAtODkxLDQxICsxMjY1LDM1IEBACiAKIAkJYXRoNWtfZWVwcm9tX2luaXRfMTFiZ18yNDEzKGFoLCBtb2RlLCBvZmZzZXQpOwogCQlvZmZzZXQgKz0gQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMyAvIDI7Ci0JCWdlbl9jaGFuX2luZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocGRfZ2FpbnMgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgZWUtPmVlX25fcGllcnNbbW9kZV07IGkrKykgewotCQljaGFuX3BjYWxfaW5mbyA9ICZnZW5fY2hhbl9pbmZvW2ldLnJmMjQxM19pbmZvOworCQlwY2luZm8gPSAmY2hpbmZvW2ldLnJmMjQxM19pbmZvOwogCiAJCS8qCiAJCSAqIFJlYWQgcHdyX2ksIHBkZGFjX2kgYW5kIHRoZSBmaXJzdAogCQkgKiAyIHBkIHBvaW50cyAocHdyLCBwZGRhYykKIAkJICovCiAJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wd3JfaVswXSA9IHZhbCAmIDB4MWY7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY19pWzBdID0gKHZhbCA+PiA1KSAmIDB4N2Y7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wd3JbMF1bMF0gPQotCQkJCQkodmFsID4+IDEyKSAmIDB4ZjsKKwkJcGNpbmZvLT5wd3JfaVswXSA9IHZhbCAmIDB4MWY7CisJCXBjaW5mby0+cGRkYWNfaVswXSA9ICh2YWwgPj4gNSkgJiAweDdmOworCQlwY2luZm8tPnB3clswXVswXSA9ICh2YWwgPj4gMTIpICYgMHhmOwogCiAJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVswXSA9IHZhbCAmIDB4M2Y7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wd3JbMF1bMV0gPSAodmFsID4+IDYpICYgMHhmOwotCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMF1bMV0gPQotCQkJCQkodmFsID4+IDEwKSAmIDB4M2Y7CisJCXBjaW5mby0+cGRkYWNbMF1bMF0gPSB2YWwgJiAweDNmOworCQlwY2luZm8tPnB3clswXVsxXSA9ICh2YWwgPj4gNikgJiAweGY7CisJCXBjaW5mby0+cGRkYWNbMF1bMV0gPSAodmFsID4+IDEwKSAmIDB4M2Y7CiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3clswXVsyXSA9IHZhbCAmIDB4ZjsKLQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzJdID0KLQkJCQkJKHZhbCA+PiA0KSAmIDB4M2Y7CisJCXBjaW5mby0+cHdyWzBdWzJdID0gdmFsICYgMHhmOworCQlwY2luZm8tPnBkZGFjWzBdWzJdID0gKHZhbCA+PiA0KSAmIDB4M2Y7CiAKLQkJY2hhbl9wY2FsX2luZm8tPnB3clswXVszXSA9IDA7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVszXSA9IDA7CisJCXBjaW5mby0+cHdyWzBdWzNdID0gMDsKKwkJcGNpbmZvLT5wZGRhY1swXVszXSA9IDA7CiAKIAkJaWYgKHBkX2dhaW5zID4gMSkgewogCQkJLyoKQEAgLTkzMyw0NCArMTMwMSwzNiBAQAogCQkJICogc28gaXQgb25seSBoYXMgMiBwZCBwb2ludHMuCiAJCQkgKiBDb250aW51ZSB3aWggcGQgZ2FpbiAxLgogCQkJICovCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbMV0gPSAodmFsID4+IDEwKSAmIDB4MWY7CisJCQlwY2luZm8tPnB3cl9pWzFdID0gKHZhbCA+PiAxMCkgJiAweDFmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVsxXSA9ICh2YWwgPj4gMTUpICYgMHgxOworCQkJcGNpbmZvLT5wZGRhY19pWzFdID0gKHZhbCA+PiAxNSkgJiAweDE7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjX2lbMV0gfD0gKHZhbCAmIDB4M0YpIDw8IDE7CisJCQlwY2luZm8tPnBkZGFjX2lbMV0gfD0gKHZhbCAmIDB4M0YpIDw8IDE7CiAKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMV1bMF0gPSAodmFsID4+IDYpICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzBdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHgzZjsKKwkJCXBjaW5mby0+cHdyWzFdWzBdID0gKHZhbCA+PiA2KSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbMV1bMF0gPSAodmFsID4+IDEwKSAmIDB4M2Y7CiAKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzFdWzFdID0gdmFsICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzFdID0KLQkJCQkJCSh2YWwgPj4gNCkgJiAweDNmOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsxXVsyXSA9Ci0JCQkJCQkodmFsID4+IDEwKSAmIDB4ZjsKKwkJCXBjaW5mby0+cHdyWzFdWzFdID0gdmFsICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1sxXVsxXSA9ICh2YWwgPj4gNCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMV1bMl0gPSAodmFsID4+IDEwKSAmIDB4ZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzJdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY1sxXVsyXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1sxXVsyXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cGRkYWNbMV1bMl0gfD0gKHZhbCAmIDB4RikgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsxXVszXSA9IDA7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bM10gPSAwOworCQkJcGNpbmZvLT5wd3JbMV1bM10gPSAwOworCQkJcGNpbmZvLT5wZGRhY1sxXVszXSA9IDA7CiAJCX0gZWxzZSBpZiAocGRfZ2FpbnMgPT0gMSkgewogCQkJLyoKIAkJCSAqIFBkIGdhaW4gMCBpcyB0aGUgbGFzdCBvbmUgc28KIAkJCSAqIHJlYWQgdGhlIGV4dHJhIHBvaW50LgogCQkJICovCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzBdWzNdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHhmOworCQkJcGNpbmZvLT5wd3JbMF1bM10gPSAodmFsID4+IDEwKSAmIDB4ZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzNdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY1swXVszXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVszXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cGRkYWNbMF1bM10gfD0gKHZhbCAmIDB4RikgPDwgMjsKIAkJfQogCiAJCS8qCkBAIC05NzgsMTA1ICsxMzM4LDY1IEBACiAJCSAqIGFzIGFib3ZlLgogCQkgKi8KIAkJaWYgKHBkX2dhaW5zID4gMikgewotCQkJY2hhbl9wY2FsX2luZm8tPnB3cl9pWzJdID0gKHZhbCA+PiA0KSAmIDB4MWY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVsyXSA9ICh2YWwgPj4gOSkgJiAweDdmOworCQkJcGNpbmZvLT5wd3JfaVsyXSA9ICh2YWwgPj4gNCkgJiAweDFmOworCQkJcGNpbmZvLT5wZGRhY19pWzJdID0gKHZhbCA+PiA5KSAmIDB4N2Y7CiAKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzBdID0KLQkJCQkJCSh2YWwgPj4gMCkgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMl1bMF0gPQotCQkJCQkJKHZhbCA+PiA0KSAmIDB4M2Y7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzFdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHhmOworCQkJcGNpbmZvLT5wd3JbMl1bMF0gPSAodmFsID4+IDApICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1syXVswXSA9ICh2YWwgPj4gNCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMl1bMV0gPSAodmFsID4+IDEwKSAmIDB4ZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzFdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY1syXVsxXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1syXVsxXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cGRkYWNbMl1bMV0gfD0gKHZhbCAmIDB4RikgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsyXVsyXSA9Ci0JCQkJCQkodmFsID4+IDQpICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzJdID0KLQkJCQkJCSh2YWwgPj4gOCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMl1bMl0gPSAodmFsID4+IDQpICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1syXVsyXSA9ICh2YWwgPj4gOCkgJiAweDNmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzNdID0gMDsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1syXVszXSA9IDA7CisJCQlwY2luZm8tPnB3clsyXVszXSA9IDA7CisJCQlwY2luZm8tPnBkZGFjWzJdWzNdID0gMDsKIAkJfSBlbHNlIGlmIChwZF9nYWlucyA9PSAyKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzFdWzNdID0KLQkJCQkJCSh2YWwgPj4gNCkgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bM10gPQotCQkJCQkJKHZhbCA+PiA4KSAmIDB4M2Y7CisJCQlwY2luZm8tPnB3clsxXVszXSA9ICh2YWwgPj4gNCkgJiAweGY7CisJCQlwY2luZm8tPnBkZGFjWzFdWzNdID0gKHZhbCA+PiA4KSAmIDB4M2Y7CiAJCX0KIAogCQlpZiAocGRfZ2FpbnMgPiAzKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbM10gPSAodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cHdyX2lbM10gPSAodmFsID4+IDE0KSAmIDB4MzsKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbM10gfD0gKCh2YWwgPj4gMCkgJiAweDcpIDw8IDI7CisJCQlwY2luZm8tPnB3cl9pWzNdIHw9ICgodmFsID4+IDApICYgMHg3KSA8PCAyOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVszXSA9ICh2YWwgPj4gMykgJiAweDdmOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVswXSA9Ci0JCQkJCQkodmFsID4+IDEwKSAmIDB4ZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVswXSA9Ci0JCQkJCQkodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cGRkYWNfaVszXSA9ICh2YWwgPj4gMykgJiAweDdmOworCQkJcGNpbmZvLT5wd3JbM11bMF0gPSAodmFsID4+IDEwKSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbM11bMF0gPSAodmFsID4+IDE0KSAmIDB4MzsKIAogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVswXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbM11bMV0gPQotCQkJCQkJKHZhbCA+PiA0KSAmIDB4ZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVsxXSA9Ci0JCQkJCQkodmFsID4+IDgpICYgMHgzZjsKKwkJCXBjaW5mby0+cGRkYWNbM11bMF0gfD0gKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cHdyWzNdWzFdID0gKHZhbCA+PiA0KSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbM11bMV0gPSAodmFsID4+IDgpICYgMHgzZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVsyXSA9Ci0JCQkJCQkodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cHdyWzNdWzJdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVsyXSB8PQotCQkJCQkJKCh2YWwgPj4gMCkgJiAweDMpIDw8IDI7CisJCQlwY2luZm8tPnB3clszXVsyXSB8PSAoKHZhbCA+PiAwKSAmIDB4MykgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzJdID0KLQkJCQkJCSh2YWwgPj4gMikgJiAweDNmOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVszXSA9Ci0JCQkJCQkodmFsID4+IDgpICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1szXVsyXSA9ICh2YWwgPj4gMikgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbM11bM10gPSAodmFsID4+IDgpICYgMHhmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbM11bM10gPQotCQkJCQkJKHZhbCA+PiAxMikgJiAweEY7CisJCQlwY2luZm8tPnBkZGFjWzNdWzNdID0gKHZhbCA+PiAxMikgJiAweEY7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzNdIHw9Ci0JCQkJCQkoKHZhbCA+PiAwKSAmIDB4MykgPDwgNDsKKwkJCXBjaW5mby0+cGRkYWNbM11bM10gfD0gKCh2YWwgPj4gMCkgJiAweDMpIDw8IDQ7CiAJCX0gZWxzZSBpZiAocGRfZ2FpbnMgPT0gMykgewotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsyXVszXSA9Ci0JCQkJCQkodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cHdyWzJdWzNdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsyXVszXSB8PQotCQkJCQkJKCh2YWwgPj4gMCkgJiAweDMpIDw8IDI7CisJCQlwY2luZm8tPnB3clsyXVszXSB8PSAoKHZhbCA+PiAwKSAmIDB4MykgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzNdID0KLQkJCQkJCSh2YWwgPj4gMikgJiAweDNmOwotCQl9Ci0KLQkJZm9yIChjID0gMDsgYyA8IHBkX2dhaW5zOyBjKyspIHsKLQkJCS8qIFJlY3JlYXRlIHB3ciB0YWJsZSBmb3IgdGhpcyBjaGFubmVsIHVzaW5nIHB3ciBzdGVwcyAqLwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVswXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyX2lbY10gKiAyOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVsxXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzBdOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVsyXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzFdOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVszXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzJdOwotCQkJaWYgKGNoYW5fcGNhbF9pbmZvLT5wd3JbY11bM10gPT0gY2hhbl9wY2FsX2luZm8tPnB3cltjXVsyXSkKLQkJCQljaGFuX3BjYWxfaW5mby0+cHdyW2NdWzNdID0gMDsKLQotCQkJLyogUmVjcmVhdGUgcGRkYWMgdGFibGUgZm9yIHRoaXMgY2hhbm5lbCB1c2luZyBwZGRhYyBzdGVwcyAqLwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzBdICs9IGNoYW5fcGNhbF9pbmZvLT5wZGRhY19pW2NdOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzFdICs9IGNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVswXTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVsyXSArPSBjaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMV07Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bM10gKz0gY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzJdOwotCQkJaWYgKGNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVszXSA9PSBjaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMl0pCi0JCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzNdID0gMDsKKwkJCXBjaW5mby0+cGRkYWNbMl1bM10gPSAodmFsID4+IDIpICYgMHgzZjsKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBhdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fMjQxMyhhaCwgbW9kZSwgY2hpbmZvKTsKIH0KIAorCiAvKgogICogUmVhZCBwZXIgcmF0ZSB0YXJnZXQgcG93ZXIgKHRoaXMgaXMgdGhlIG1heGltdW0gdHggcG93ZXIKICAqIHN1cHBvcnRlZCBieSB0aGUgY2FyZCkuIFRoaXMgaW5mbyBpcyB1c2VkIHdoZW4gc2V0dGluZwpAQCAtMTA4NCwxMSArMTQwNCwxMiBAQAogICoKICAqIFRoaXMgYWxzbyB3b3JrcyBmb3IgdjUgRUVQUk9Ncy4KICAqLwotc3RhdGljIGludCBhdGg1a19lZXByb21fcmVhZF90YXJnZXRfcmF0ZV9wd3JfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9yZWFkX3RhcmdldF9yYXRlX3B3cl9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBtb2RlKQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcmF0ZV9wY2FsX2luZm87Ci0JdTE2ICpyYXRlX3RhcmdldF9wd3JfbnVtOworCXU4ICpyYXRlX3RhcmdldF9wd3JfbnVtOwogCXUzMiBvZmZzZXQ7CiAJdTE2IHZhbDsKIAlpbnQgcmV0LCBpOwpAQCAtMTE2Myw2ICsxNDg0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBSZWFkIHBlciBjaGFubmVsIGNhbGlicmF0aW9uIGluZm8gZnJvbSBFRVBST00KKyAqCisgKiBUaGlzIGluZm8gaXMgdXNlZCB0byBjYWxpYnJhdGUgdGhlIGJhc2ViYW5kIHBvd2VyIHRhYmxlLiBJbWFnaW5lCisgKiB0aGF0IGZvciBlYWNoIGNoYW5uZWwgdGhlcmUgaXMgYSBwb3dlciBjdXJ2ZSB0aGF0J3MgaHcgc3BlY2lmaWMKKyAqIChkZXBlbmRzIG9uIGFtcGxpZmllciBldGMpIGFuZCB3ZSB0cnkgdG8gImNvcnJlY3QiIHRoaXMgY3VydmUgdXNpbmcKKyAqIG9mZmVzdHMgd2UgcGFzcyBvbiB0byBwaHkgY2hpcCAoYmFzZWJhbmQgLT4gYmVmb3JlIGFtcGxpZmllcikgc28gdGhhdAorICogaXQgY2FuIHVzZSBhY2N1cmF0ZSBwb3dlciB2YWx1ZXMgd2hlbiBzZXR0aW5nIHR4IHBvd2VyICh0YWtlcyBhbXBsaWZpZXIncworICogcGVyZm9ybWFuY2Ugb24gZWFjaCBjaGFubmVsIGludG8gYWNjb3VudCkuCisgKgorICogRUVQUk9NIHByb3ZpZGVzIHVzIHdpdGggdGhlIG9mZnNldHMgZm9yIHNvbWUgcHJlLWNhbGlicmF0ZWQgY2hhbm5lbHMKKyAqIGFuZCB3ZSBoYXZlIHRvIGludGVycG9sYXRlIHRvIGNyZWF0ZSB0aGUgZnVsbCB0YWJsZSBmb3IgdGhlc2UgY2hhbm5lbHMgYW5kCisgKiBhbHNvIHRoZSB0YWJsZSBmb3IgYW55IGNoYW5uZWwuCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtMTE4MCw3ICsxNTE1LDkgQEAKIAllbHNlCiAJCXJlYWRfcGNhbCA9IGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb181MTExOwogCi0JZm9yIChtb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7IG1vZGUgPD0gQVI1S19FRVBST01fTU9ERV8xMUc7IG1vZGUrKykgeworCisJZm9yIChtb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7IG1vZGUgPD0gQVI1S19FRVBST01fTU9ERV8xMUc7CisJbW9kZSsrKSB7CiAJCWVyciA9IHJlYWRfcGNhbChhaCwgbW9kZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTE5Myw3ICsxNTMwLDYzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgKi8KK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmNoaW5mbzsKKwl1OCBwaWVyLCBwZGc7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFBOgorCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUEoZWUtPmVlX2hlYWRlcikpCisJCQlyZXR1cm4gMDsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKKwkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQorCQkJcmV0dXJuIDA7CisJCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2I7CisJCWJyZWFrOworCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUc6CisJCWlmICghQVI1S19FRVBST01fSERSXzExRyhlZS0+ZWVfaGVhZGVyKSkKKwkJCXJldHVybiAwOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKHBpZXIgPSAwOyBwaWVyIDwgZWUtPmVlX25fcGllcnNbbW9kZV07IHBpZXIrKykgeworCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCisJCQljb250aW51ZTsKKworCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKKwkJCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQgPQorCQkJCQkmY2hpbmZvW3BpZXJdLnBkX2N1cnZlc1twZGddOworCisJCQlpZiAocGQgIT0gTlVMTCkgeworCQkJCWtmcmVlKHBkLT5wZF9zdGVwKTsKKwkJCQlrZnJlZShwZC0+cGRfcHdyKTsKKwkJCX0KKwkJfQorCisJCWtmcmVlKGNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkCithdGg1a19lZXByb21fZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTggbW9kZTsKKworCWZvciAobW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOyBtb2RlIDw9IEFSNUtfRUVQUk9NX01PREVfMTFHOyBtb2RlKyspCisJCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7Cit9CisKKy8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtMTMyOCwxOSArMTcyMSwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKIC8qCiAgKiBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIGVlcHJvbQogICovCiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCiB7Ci0JdTggbWFjX2RbRVRIX0FMRU5dOworCXU4IG1hY19kW0VUSF9BTEVOXSA9IHt9OwogCXUzMiB0b3RhbCwgb2Zmc2V0OwogCXUxNiBkYXRhOwogCWludCBvY3RldCwgcmV0OwogCi0JbWVtc2V0KG1hYywgMCwgRVRIX0FMRU4pOwotCW1lbXNldChtYWNfZCwgMCwgRVRIX0FMRU4pOwotCiAJcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIDB4MjAsICZkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTM1NiwxMSArMTc0NywyMyBAQAogCQlvY3RldCArPSAyOwogCX0KIAotCW1lbWNweShtYWMsIG1hY19kLCBFVEhfQUxFTik7Ci0KIAlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKKwogCXJldHVybiAwOwogfQogCitib29sIGF0aDVrX2VlcHJvbV9pc19oYjYzKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTE2IGRhdGE7CisKKwlhdGg1a19od19lZXByb21fcmVhZChhaCwgQVI1S19FRVBST01fSVNfSEI2MywgJmRhdGEpOworCisJaWYgKChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MjUgPj4gNCkpICYmIGRhdGEpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oCmluZGV4IDA5ZWI3ZDAuLmIwYzA2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BR0lDXzUyMTEJCTB4MDAwMDE0NWIgLyogNTIxMSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9NQUdJQ181MjEwCQkweDAwMDAxNDVhIC8qIDUyMTAgKi8KIAorI2RlZmluZQlBUjVLX0VFUFJPTV9JU19IQjYzCQkweDAwMGIJLyogVGFsb24gZGV0ZWN0ICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX1JFR19ET01BSU4JCTB4MDBiZgkvKiBFRVBST00gcmVnZG9tICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0NIRUNLU1VNCQkweDAwYzAJLyogRUVQUk9NIGNoZWNrc3VtICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0lORk9fQkFTRQkJMHgwMGMwCS8qIEVFUFJPTSBoZWFkZXIgKi8KQEAgLTE3Miw2ICsxNzMsNyBAQAogI2RlZmluZSBBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTgkJMTAKICNkZWZpbmUgQVI1S19FRVBST01fTl8yR0haX0NIQU4JCTMKICNkZWZpbmUgQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMwk0CisjZGVmaW5lCUFSNUtfRUVQUk9NX05fMkdIWl9DSEFOX01BWAk0CiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BWF9DSEFOCQkxMAogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BXUl9QT0lOVFNfNTExMQkxMQogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BDREFDCQkxMQpAQCAtMTkyLDcgKzE5NCw3IEBACiAjZGVmaW5lIEFSNUtfRUVQUk9NX1NDQUxFX09DX0RFTFRBKF94KQkoKChfeCkgKiAyKSAvIDEwKQogI2RlZmluZSBBUjVLX0VFUFJPTV9OX0NUTFMoX3YpCQlBUjVLX0VFUFJPTV9PRkYoX3YsIDE2LCAzMikKICNkZWZpbmUgQVI1S19FRVBST01fTUFYX0NUTFMJCTMyCi0jZGVmaW5lIEFSNUtfRUVQUk9NX05fWFBEX1BFUl9DSEFOTkVMCTQKKyNkZWZpbmUgQVI1S19FRVBST01fTl9QRF9DVVJWRVMJCTQKICNkZWZpbmUgQVI1S19FRVBST01fTl9YUEQwX1BPSU5UUwk0CiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fWFBEM19QT0lOVFMJMwogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BEX0dBSU5TCQk0CkBAIC0yMzEsNyArMjMzLDcgQEAKIAlBUjVLX0NUTF8xMUIgPSAxLAogCUFSNUtfQ1RMXzExRyA9IDIsCiAJQVI1S19DVExfVFVSQk8gPSAzLAotCUFSNUtfQ1RMXzEwOEcgPSA0LAorCUFSNUtfQ1RMX1RVUkJPRyA9IDQsCiAJQVI1S19DVExfMkdIVDIwID0gNSwKIAlBUjVLX0NUTF81R0hUMjAgPSA2LAogCUFSNUtfQ1RMXzJHSFQ0MCA9IDcsCkBAIC0yMzksNjUgKzI0MSwxMTQgQEAKIAlBUjVLX0NUTF9NT0RFX00gPSAxNSwKIH07CiAKKy8qIERlZmF1bHQgQ1RMIGlkcyBmb3IgdGhlIDMgbWFpbiByZWcgZG9tYWlucy4KKyAqIEF0aGVyb3Mgb25seSB1c2VzIHRoZXNlIGJ5IGRlZmF1bHQgYnV0IHZlbmRvcnMKKyAqIGNhbiBoYXZlIHVwIHRvIDMyIGRpZmZlcmVudCBDVExzIGZvciBkaWZmZXJlbnQKKyAqIHNjZW5hcmlvcy4gTm90ZSB0aGF0IHRoZWVzZSB2YWx1ZXMgYXJlIE9SZWQgd2l0aAorICogdGhlIG1vZGUgaWQgKGFib3ZlKSBzbyB3ZSBjYW4gaGF2ZSB1cCB0byAyNCBDVEwKKyAqIGRhdGFzZXRzIG91dCBvZiB0aGVzZSAzIG1haW4gcmVnZG9tYWlucy4gVGhhdCBsZWF2ZXMKKyAqIDggaWRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdmVuZG9ycyBhbmQgc2luY2UgMHgyMCBpcworICogbWlzc2luZyBmcm9tIEhBTCBzb3VyY2VzIGkgZ3Vlc3MgdGhpcyBpcyB0aGUgc2V0IG9mCisgKiBjdXN0b20gQ1RMcyB2ZW5kb3JzIGNhbiB1c2UuICovCisjZGVmaW5lCUFSNUtfQ1RMX0ZDQwkweDEwCisjZGVmaW5lCUFSNUtfQ1RMX0NVU1RPTQkweDIwCisjZGVmaW5lCUFSNUtfQ1RMX0VUU0kJMHgzMAorI2RlZmluZQlBUjVLX0NUTF9NS0sJMHg0MAorCisvKiBJbmRpY2F0ZXMgYSBDVEwgd2l0aCBvbmx5IG1vZGUgc2V0IGFuZAorICogbm8gcmVnIGRvbWFpbiBtYXBwaW5nLCBzdWNoIENUTHMgYXJlIHVzZWQKKyAqIGZvciB3b3JsZCByb2FtaW5nIGRvbWFpbnMgb3Igc2ltcGx5IHdoZW4KKyAqIGEgcmVnIGRvbWFpbiBpcyBub3Qgc2V0ICovCisjZGVmaW5lCUFSNUtfQ1RMX05PX1JFR0RPTUFJTgkweGYwCisKKy8qIEluZGljYXRlcyBhbiBlbXB0eSAoaW52YWxpZCkgQ1RMICovCisjZGVmaW5lIEFSNUtfQ1RMX05PX0NUTAkJMHhmZgorCiAvKiBQZXIgY2hhbm5lbCBjYWxpYnJhdGlvbiBkYXRhLCB1c2VkIGZvciBwb3dlciB0YWJsZSBzZXR1cCAqLwogc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMSB7CiAJLyogUG93ZXIgbGV2ZWxzIGluIGhhbGYgZGJtIHVuaXRzCiAJICogZm9yIG9uZSBwb3dlciBjdXJ2ZS4gKi8KLQl1OAkJcHdyW0FSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExXTsKKwl1OCBwd3JbQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTFdOwogCS8qIFBDREFDIHRhYmxlIHN0ZXBzCiAJICogZm9yIHRoZSBhYm92ZSB2YWx1ZXMgKi8KLQl1OAkJcGNkYWNbQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTFdOworCXU4IHBjZGFjW0FSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExXTsKIAkvKiBTdGFydGluZyBQQ0RBQyBzdGVwICovCi0JdTgJCXBjZGFjX21pbjsKKwl1OCBwY2RhY19taW47CiAJLyogRmluYWwgUENEQUMgc3RlcCAqLwotCXU4CQlwY2RhY19tYXg7CisJdTggcGNkYWNfbWF4OwogfTsKIAogc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMiB7CiAJLyogUG93ZXIgbGV2ZWxzIGluIHF1YXJ0ZXIgZEJtIHVuaXRzCiAJICogZm9yIGxvd2VyICgwKSBhbmQgaGlnaGVyICgzKQotCSAqIGxldmVsIGN1cnZlcyAqLwotCXM4CQlwd3JfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107Ci0JczgJCXB3cl94M1tBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTXTsKKwkgKiBsZXZlbCBjdXJ2ZXMgaW4gMC4yNWRCIHVuaXRzICovCisJczggcHdyX3gwW0FSNUtfRUVQUk9NX05fWFBEMF9QT0lOVFNdOworCXM4IHB3cl94M1tBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTXTsKIAkvKiBQQ0RBQyB0YWJsZSBzdGVwcwogCSAqIGZvciB0aGUgYWJvdmUgdmFsdWVzICovCi0JdTgJcGNkYWNfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107Ci0JdTgJcGNkYWNfeDNbQVI1S19FRVBST01fTl9YUEQzX1BPSU5UU107CisJdTggcGNkYWNfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107CisJdTggcGNkYWNfeDNbQVI1S19FRVBST01fTl9YUEQzX1BPSU5UU107CiB9OwogCiBzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmYyNDEzIHsKIAkvKiBTdGFydGluZyBwd3IvcGRkYWMgdmFsdWVzICovCi0JczgJCXB3cl9pW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOwotCXU4CXBkZGFjX2lbQVI1S19FRVBST01fTl9QRF9HQUlOU107Ci0JLyogKHB3cixwZGRhYykgcG9pbnRzICovCi0JczgJCXB3cltBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXQotCQkJCVtBUjVLX0VFUFJPTV9OX1BEX1BPSU5UU107Ci0JdTgJcGRkYWNbQVI1S19FRVBST01fTl9QRF9HQUlOU10KLQkJCQlbQVI1S19FRVBST01fTl9QRF9QT0lOVFNdOworCXM4IHB3cl9pW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOworCXU4IHBkZGFjX2lbQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJLyogKHB3cixwZGRhYykgcG9pbnRzCisJICogcG93ZXIgbGV2ZWxzIGluIDAuNWRCIHVuaXRzICovCisJczggcHdyW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdCisJCVtBUjVLX0VFUFJPTV9OX1BEX1BPSU5UU107CisJdTggcGRkYWNbQVI1S19FRVBST01fTl9QRF9HQUlOU10KKwkJW0FSNUtfRUVQUk9NX05fUERfUE9JTlRTXTsKK307CisKK2VudW0gYXRoNWtfcG93ZXJ0YWJsZV90eXBlIHsKKwlBUjVLX1BXUlRBQkxFX1BXUl9UT19QQ0RBQyA9IDAsCisJQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUMgPSAxLAorCUFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDID0gMiwKK307CisKK3N0cnVjdCBhdGg1a19wZGdhaW5faW5mbyB7CisJdTggcGRfcG9pbnRzOworCXU4ICpwZF9zdGVwOworCS8qIFBvd2VyIHZhbHVlcyBhcmUgaW4KKwkgKiAwLjI1ZEIgdW5pdHMgKi8KKwlzMTYgKnBkX3B3cjsKIH07CiAKIHN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyB7CiAJLyogRnJlcXVlbmN5ICovCiAJdTE2CWZyZXE7Ci0JLyogTWF4IGF2YWlsYWJsZSBwb3dlciAqLwotCXM4CQltYXhfcHdyOworCS8qIFR4IHBvd2VyIGJvdW5kYXJpZXMgKi8KKwlzMTYJbWF4X3B3cjsKKwlzMTYJbWluX3B3cjsKIAl1bmlvbiB7CiAJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjUxMTEgcmY1MTExX2luZm87CiAJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjUxMTIgcmY1MTEyX2luZm87CiAJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgcmYyNDEzX2luZm87CiAJfTsKKwkvKiBSYXcgdmFsdWVzIHVzZWQgYnkgcGh5IGNvZGUKKwkgKiBDdXJ2ZXMgYXJlIHN0b3JlZCBpbiBvcmRlciBmcm9tIGxvd2VyCisJICogZ2FpbiB0byBoaWdoZXIgZ2FpbiAobWF4IHR4cG93ZXIgLT4gbWluIHR4cG93ZXIpICovCisJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZF9jdXJ2ZXM7CiB9OwogCi0vKiBQZXIgcmF0ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBlYWNoIG1vZGUsIHVzZWQgZm9yIHBvd2VyIHRhYmxlIHNldHVwICovCisvKiBQZXIgcmF0ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBlYWNoIG1vZGUsCisgKiB1c2VkIGZvciByYXRlIHBvd2VyIHRhYmxlIHNldHVwLgorICogTm90ZTogVmFsdWVzIGluIDAuNWRCIHVuaXRzICovCiBzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8gewogCXUxNglmcmVxOyAvKiBGcmVxdWVuY3kgKi8KLQkvKiBQb3dlciBsZXZlbCBmb3IgNi0yNE1iaXQvcyByYXRlcyAqLworCS8qIFBvd2VyIGxldmVsIGZvciA2LTI0TWJpdC9zIHJhdGVzIG9yCisJICogMU1iIHJhdGUgKi8KIAl1MTYJdGFyZ2V0X3Bvd2VyXzZ0bzI0OwotCS8qIFBvd2VyIGxldmVsIGZvciAzNk1iaXQgcmF0ZSAqLworCS8qIFBvd2VyIGxldmVsIGZvciAzNk1iaXQgcmF0ZSBvcgorCSAqIDJNYiByYXRlICovCiAJdTE2CXRhcmdldF9wb3dlcl8zNjsKLQkvKiBQb3dlciBsZXZlbCBmb3IgNDhNYml0IHJhdGUgKi8KKwkvKiBQb3dlciBsZXZlbCBmb3IgNDhNYml0IHJhdGUgb3IKKwkgKiA1LjVNYml0IHJhdGUgKi8KIAl1MTYJdGFyZ2V0X3Bvd2VyXzQ4OwotCS8qIFBvd2VyIGxldmVsIGZvciA1NE1iaXQgcmF0ZSAqLworCS8qIFBvd2VyIGxldmVsIGZvciA1NE1iaXQgcmF0ZSBvcgorCSAqIDExTWJpdCByYXRlICovCiAJdTE2CXRhcmdldF9wb3dlcl81NDsKIH07CiAKQEAgLTMyOSwxMiArMzgwLDYgQEAKIAl1MTYJZWVfY2NrX29mZG1fcG93ZXJfZGVsdGE7CiAJdTE2CWVlX3NjYWxlZF9jY2tfZGVsdGE7CiAKLQkvKiBVc2VkIGZvciB0eCB0aGVybWFsIGFkanVzdG1lbnQgKGVlcHJvbV9pbml0LCByZnJlZ3MpICovCi0JdTE2CWVlX3R4X2NsaXA7Ci0JdTE2CWVlX3B3ZF84NDsKLQl1MTYJZWVfcHdkXzkwOwotCXUxNgllZV9nYWluX3NlbGVjdDsKLQogCS8qIFJGIENhbGlicmF0aW9uIHNldHRpbmdzIChyZXNldCwgcmZyZWdzKSAqLwogCXUxNgllZV9pX2NhbFtBUjVLX0VFUFJPTV9OX01PREVTXTsKIAl1MTYJZWVfcV9jYWxbQVI1S19FRVBST01fTl9NT0RFU107CkBAIC0zNjIsMjMgKzQwNywyNSBAQAogCS8qIFBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KIAl1MTYJZWVfZmFsc2VfZGV0ZWN0W0FSNUtfRUVQUk9NX05fTU9ERVNdOwogCi0JLyogTnVtYmVyIG9mIHBkIGdhaW4gY3VydmVzIHBlciBtb2RlIChSRjI0MTMpICovCi0JdTggZWVfcGRfZ2FpbnNbQVI1S19FRVBST01fTl9NT0RFU107CisJLyogTnVtYmVyIG9mIHBkIGdhaW4gY3VydmVzIHBlciBtb2RlICovCisJdTgJZWVfcGRfZ2FpbnNbQVI1S19FRVBST01fTl9NT0RFU107CisJLyogQmFjayBtYXBwaW5nIHBkY3VydmUgbnVtYmVyIC0+IHBkY3VydmUgaW5kZXggaW4gcGQtPnBkX2N1cnZlcyAqLworCXU4CWVlX3BkY190b19pZHhbQVI1S19FRVBST01fTl9NT0RFU11bQVI1S19FRVBST01fTl9QRF9HQUlOU107CiAKLQl1OCBlZV9uX3BpZXJzW0FSNUtfRUVQUk9NX05fTU9ERVNdOworCXU4CWVlX25fcGllcnNbQVI1S19FRVBST01fTl9NT0RFU107CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfYVtBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTl07Ci0Jc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfYltBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl07Ci0Jc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfZ1tBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl07CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfYltBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbwllZV9wd3JfY2FsX2dbQVI1S19FRVBST01fTl8yR0haX0NIQU5fTUFYXTsKIAogCS8qIFBlciByYXRlIHRhcmdldCBwb3dlciBsZXZlbHMgKi8KLQl1MTYJZWVfcmF0ZV90YXJnZXRfcHdyX251bVtBUjVLX0VFUFJPTV9OX01PREVTXTsKKwl1OAllZV9yYXRlX3RhcmdldF9wd3JfbnVtW0FSNUtfRUVQUk9NX05fTU9ERVNdOwogCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfYVtBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTl07Ci0Jc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvCWVlX3JhdGVfdHB3cl9iW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOXTsKLQlzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8JZWVfcmF0ZV90cHdyX2dbQVI1S19FRVBST01fTl8yR0haX0NIQU5dOworCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfYltBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOworCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfZ1tBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOwogCiAJLyogQ29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgKFVudXNlZCkgKi8KLQl1MTYJZWVfY3RsczsKLQl1MTYJZWVfY3RsW0FSNUtfRUVQUk9NX01BWF9DVExTXTsKKwl1OAllZV9jdGxzOworCXU4CWVlX2N0bFtBUjVLX0VFUFJPTV9NQVhfQ1RMU107CiAJc3RydWN0IGF0aDVrX2VkZ2VfcG93ZXIgZWVfY3RsX3B3cltBUjVLX0VFUFJPTV9OX0VER0VTICogQVI1S19FRVBST01fTUFYX0NUTFNdOwogCiAJLyogTm9pc2UgRmxvb3IgQ2FsaWJyYXRpb24gc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYwppbmRleCBiNzcyMDVhLi42NGEyN2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZ3Bpby5jCkBAIC04Myw3ICs4Myw3IEBACiBpbnQgYXRoNWtfaHdfc2V0X2dwaW9faW5wdXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsCkBAIC05OSw3ICs5OSw3IEBACiBpbnQgYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLApAQCAtMTE1LDcgKzExNSw3IEBACiB1MzIgYXRoNWtfaHdfZ2V0X2dwaW8oc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKIAkvKiBHUElPIGlucHV0IG1hZ2ljICovCkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1MzIgZGF0YTsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogR1BJTyBvdXRwdXQgbWFnaWMgKi8KQEAgLTE1NCw3ICsxNTQsNyBAQAogCXUzMiBkYXRhOwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jCmluZGV4IDQ1MGJkNmUuLjYxZmI2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTM0MCw3ICszNDAsNyBAQAogCSAqIGNvbW1vbiBvbiBhbGwgY2FyZHMvbW9kZXMuCiAJICogTm90ZTogVGFibGUgaXMgcmV3cml0dGVuIGR1cmluZwogCSAqIHR4cG93ZXIgc2V0dXAgbGF0ZXIgdXNpbmcgY2FsaWJyYXRpb24KLQkgKiBkYXRhIGV0Yy4gc28gbmV4dCB3cml0ZSBpcyBub24tY29tbW9uCisJICogZGF0YSBldGMuIHNvIG5leHQgd3JpdGUgaXMgbm9uLWNvbW1vbiAqLwogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigxKSwgMHgwNmZmMDVmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigyKSwgMHgwN2ZmMDdmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzKSwgMHgwOGZmMDhmZiB9LApAQCAtMzcxLDcgKzM3MSw3IEBACiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDI4KSwgMHgzYWZmM2FmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigyOSksIDB4M2FmZjNhZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMzApLCAweDNhZmYzYWZmIH0sCi0JeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMxKSwgMHgzYWZmM2FmZiB9LCovCisJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMxKSwgMHgzYWZmM2FmZiB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsIDB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUEhZKDY0MiksIDB4NTAzZTQ2NDYgfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwgMHg2NDgwNDE2YyB9LApAQCAtMzg2LDg1ICszODYsODUgQEAKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjExCi0gKiBYWFg6IGhvdyBhYm91dCBnIC8gZ1R1cmJvID8gUkY1MTExIHN1cHBvcnRzIGl0LCBob3cgYWJvdXQgQVI1MjExID8KLSAqIE1heWJlIDUyMTEgc3VwcG9ydHMgT0ZETS1vbmx5IGcgYnV0IHdlIG5lZWQgdG8gdGVzdCBpdCAhCisgKiA1MjExIHN1cHBvcnRzIE9GRE0tb25seSBnIChkcmFmdCBnKSBidXQgd2UKKyAqIG5lZWQgdG8gdGVzdCBpdCAhCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjExX2luaV9tb2RlW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgYQkgICAgICBhVHVyYm8JICBiCQkqLwotCQl7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMWQgfSB9LAorCS8qCSAgYQkgICAgYVR1cmJvCSAgYgkgIGcgKE9GRE0pICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDFkLCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygwKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDEpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygzKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDQpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg2KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDcpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg5KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TTE9ULAotCQl7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjggfSB9LAorCSAgIHsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCwgMHgwMDAwMDE2OCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NJRlMsCi0JCXsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCB9IH0sCisJICAgeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwLCAweDAwMDAwMjMwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfRUlGUywKLQkJeyAweDAwMDAwZDk4LCAweDAwMDAxMTgwLCAweDAwMDAxZjQ4IH0gfSwKKwkgICB7IDB4MDAwMDBkOTgsIDB4MDAwMDExODAsIDB4MDAwMDFmNDgsIDB4MDAwMDBkOTggfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19NSVNDLAotCQl7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAgfSB9LAorCSAgIHsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCwgMHgwMDAwYTBlMCB9IH0sCiAJeyBBUjVLX1RJTUVfT1VULAotCQl7IDB4MDQwMDA0MDAsIDB4MDgwMDA4MDAsIDB4MjAwMDMwMDAgfSB9LAorCSAgIHsgMHgwNDAwMDQwMCwgMHgwODAwMDgwMCwgMHgyMDAwMzAwMCwgMHgwNDAwMDQwMCB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDBlOGQ4ZmE3LCAweDBlOGQ4ZmNmLCAweDAxNjA4Zjk1IH0gfSwKKwkgICB7IDB4MGU4ZDhmYTcsIDB4MGU4ZDhmY2YsIDB4MDE2MDhmOTUsIDB4MGU4ZDhmYTcgfSB9LAogCXsgQVI1S19QSFlfVFVSQk8sCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKIAl7IEFSNUtfUEhZKDgpLAotCQl7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAgfSB9LAorCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCB9IH0sCiAJeyBBUjVLX1BIWSg5KSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3IH0gfSwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcsIDB4MDAwMDBlMGUgfSB9LAogCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAwMDAgfSB9LAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDAwMCwgMHgwYTAyMDAwMSB9IH0sCiAJeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKIAl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiIH0gfSwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAogCXsgQVI1S19QSFkoMTcpLAotCQl7IDB4MTM3MjE2OWMsIDB4MTM3MjE2YTUsIDB4MTM3MjE2YTggfSB9LAorCSAgIHsgMHgxMzcyMTY5YywgMHgxMzcyMTZhNSwgMHgxMzcyMTZhOCwgMHgxMzcyMTY5YyB9IH0sCiAJeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4YmE2NywgMHgwMDE4YmE2NywgMHgwMDE4YmE2OSB9IH0sCisJICAgeyAweDAwMThiYTY3LCAweDAwMThiYTY3LCAweDAwMThiYTY5LCAweDAwMThiYTY5IH0gfSwKIAl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwIH0gfSwKKwkgICB7IDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VjMDBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWMwMGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NWQ1ZSwgMHgzMTM3NWQ1ZSwgMHgzMTNhNWQ1ZSB9IH0sCisJICAgeyAweDMxMzc1ZDVlLCAweDMxMzc1ZDVlLCAweDMxM2E1ZDVlLCAweDMxMzc1ZDVlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NUTCwKLQkJeyAweDAwMDBiZDEwLCAweDAwMDBiZDEwLCAweDAwMDBiZDM4IH0gfSwKKwkgICB7IDB4MDAwMGJkMTAsIDB4MDAwMGJkMTAsIDB4MDAwMGJkMzgsIDB4MDAwMGJkMTAgfSB9LAogCXsgQVI1S19QSFlfTkYsCi0JCXsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCisJICAgeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MgfSB9LAorCSAgIHsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YywgMHgwMDAwMjcxMCB9IH0sCiAJeyBBUjVLX1BIWSg3MCksCi0JCXsgMHgwMDAwMDE5MCwgMHgwMDAwMDE5MCwgMHgwMDAwMDA4NCB9IH0sCisJICAgeyAweDAwMDAwMTkwLCAweDAwMDAwMTkwLCAweDAwMDAwMDg0LCAweDAwMDAwMTkwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4NmZlMDEwMjAsIDB4NmZlMDEwMjAsIDB4NmZlMDA5MjAgfSB9LAotCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzUyMTEsCi0JCXsgMHgwNWZmMTRmZiwgMHgwNWZmMTRmZiwgMHgwNWZmMTRmZiB9IH0sCisJICAgeyAweDZmZTAxMDIwLCAweDZmZTAxMDIwLCAweDZmZTAwOTIwLCAweDZmZTAxMDIwIH0gfSwKKwl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRSwKKwkgICB7IDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE5ZmYgfSB9LAogCXsgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCQl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTAgfSB9LAorCSAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCiB9OwogCiAvKiBJbml0aWFsIHJlZ2lzdGVyIHNldHRpbmdzIGZvciBBUjUyMTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIGFyNTIxMl9pbmlbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIGFyNTIxMl9pbmlfY29tbW9uX3N0YXJ0W10gPSB7CiAJeyBBUjVLX1JYRFAsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1JYQ0ZHLAkJMHgwMDAwMDAwNSB9LAogCXsgQVI1S19NSUJDLAkJMHgwMDAwMDAwMCB9LApAQCAtNDg1LDkxICs0ODUsODMgQEAKIAl7IEFSNUtfUVVFVUVfVFhEUCg5KSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9UWFAsCQkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX0RDVV9UWF9GSUxURVJfMF9CQVNFLAkweDAwMDAwMDAwIH0sCi0JLyogVW5rbm93biB0YWJsZSAqLwotCXsgMHgxMDc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEwYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTBmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDExNzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMWY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyMzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTI3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTMzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMzc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTNmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE0NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTRiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNGY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1MzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTU3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNWI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1ZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTYzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNjc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTZmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNzM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE3NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTdiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxN2Y4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEwM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTA3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGJjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEwZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTEzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTdjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExYmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFmYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEyN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTM3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2JjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDdjLCAweDAwMDAwMDAwIH0sCisJLyogVHggZmlsdGVyIHRhYmxlIDAgKDMyIGVudHJpZXMpICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgwKSwgIDB4MDAwMDAwMDAgfSwgLyogRENVIDAgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgzKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDQpLCAgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgMSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoNSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg2KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDcpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoOCksICAweDAwMDAwMDAwIH0sIC8qIERDVSAyICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg5KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEwKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMiksIDB4MDAwMDAwMDAgfSwgLyogRENVIDMgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEzKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTQpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxNSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE2KSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNCAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTcpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxOCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE5KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjApLCAweDAwMDAwMDAwIH0sIC8qIERDVSA1ICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyMSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIyKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjMpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNCksIDB4MDAwMDAwMDAgfSwgLyogRENVIDYgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI1KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjYpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI4KSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNyAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjkpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgzMCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDMxKSwgMHgwMDAwMDAwMCB9LAorCS8qIFR4IGZpbHRlciB0YWJsZSAxICgxNiBlbnRyaWVzKSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMCksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDIpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg0KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDUpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg3KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDgpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoOSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDExKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTIpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDE0KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTUpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfQ0xSLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfU0VULCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9UWF9GSUxURVJfQ0xSLCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9UWF9GSUxURVJfU0VULCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1NUQV9JRDEsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JTU19JRDAsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JTU19JRDEsCQkweDAwMDAwMDAwIH0sCi0JLyp7IEFSNUtfUlNTSV9USFIsCTB4MDAwMDAwMDAgfSwqLwkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX0JFQUNPTl81MjExLAkweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfQ0ZQX1BFUklPRF81MjExLCAweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIwXzUyMTEsCTB4MDAwMDAwMzAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19USU1FUjFfNTIxMSwJMHgwMDA3ZmZmZiB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSMl81MjExLAkweDAxZmZmZmZmIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIzXzUyMTEsCTB4MDAwMDAwMzEgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19DRlBfRFVSXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLworCXsgQVI1S19CRUFDT05fNTIxMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19DRlBfUEVSSU9EXzUyMTEsIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfVElNRVIwXzUyMTEsCTB4MDAwMDAwMzAgfSwKKwl7IEFSNUtfVElNRVIxXzUyMTEsCTB4MDAwN2ZmZmYgfSwKKwl7IEFSNUtfVElNRVIyXzUyMTEsCTB4MDFmZmZmZmYgfSwKKwl7IEFSNUtfVElNRVIzXzUyMTEsCTB4MDAwMDAwMzEgfSwKKwl7IEFSNUtfQ0ZQX0RVUl81MjExLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1JYX0ZJTFRFUl81MjExLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RJQUdfU1dfNTIxMSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19BRERBQ19URVNULAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RFRkFVTFRfQU5URU5OQSwJMHgwMDAwMDAwMCB9LAotCXsgMHg4MDgwLCAweDAwMDAwMDAwIH0sCi0JLyp7IDB4ODA1YywgMHhmZmZmYzdmZiB9LCovIC8qIE9sZCB2YWx1ZSAqLwotCXsgMHg4MDVjLCAweDAwMGZjNzhmIH0sCi0JeyBBUjVLX05BVl81MjExLAkweDAwMDAwMDAwIH0sCS8qIE5vdCBmb3VuZCBvbiByZWNlbnQgKi8KLQl7IEFSNUtfUlRTX09LXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogZHVtcHMgYnV0IGl0IG1ha2VzICAqLwotCXsgQVI1S19SVFNfRkFJTF81MjExLAkweDAwMDAwMDAwIH0sCS8qIHNlbnNlIHRvIHJlc2V0IGNvdW50ZXJzICovCi0JeyBBUjVLX0FDS19GQUlMXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogc2luY2UgcGN1IHJlZ2lzdGVycyAqLwotCXsgQVI1S19GQ1NfRkFJTF81MjExLAkweDAwMDAwMDAwIH0sCS8qIGFyZSBza2lwZWQgZHVyaW5nIGNoYW4qLwotCXsgQVI1S19CRUFDT05fQ05UXzUyMTEsIDB4MDAwMDAwMDAgfSwJLyogY2hhbmdlICovCisJeyBBUjVLX0ZSQU1FX0NUTF9RT1NNLCAJMHgwMDBmYzc4ZiB9LAogCXsgQVI1S19YUk1PREUsCQkweDJhODIzMDFhIH0sCiAJeyBBUjVLX1hSREVMQVksCQkweDA1ZGMwMWUwIH0sCiAJeyBBUjVLX1hSVElNRU9VVCwJMHgxZjQwMjcxMCB9LAogCXsgQVI1S19YUkNISVJQLAkJMHgwMWY0MDAwMCB9LAogCXsgQVI1S19YUlNUT01QLAkJMHgwMDAwMWUxYyB9LAotCXsgQVI1S19TTEVFUDAsCQkweDAwMDJhYWFhIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfU0xFRVAxLAkJMHgwMjAwNTU1NSB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1NMRUVQMiwJCTB4MDAwMDAwMDAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLworCXsgQVI1S19TTEVFUDAsCQkweDAwMDJhYWFhIH0sCisJeyBBUjVLX1NMRUVQMSwJCTB4MDIwMDU1NTUgfSwKKwl7IEFSNUtfU0xFRVAyLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CU1NfSURNMCwJMHhmZmZmZmZmZiB9LAogCXsgQVI1S19CU1NfSURNMSwJMHgwMDAwZmZmZiB9LAogCXsgQVI1S19UWFBDLAkJMHgwMDAwMDAwMCB9LApAQCAtNTc3LDcgKzU2OSw4IEBACiAJeyBBUjVLX1BST0ZDTlRfUlgsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUFJPRkNOVF9SWENMUiwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19QUk9GQ05UX0NZQ0xFLAkweDAwMDAwMDAwIH0sCi0JeyAweDgwZmMsIDB4MDAwMDAwODggfSwKKwl7IEFSNUtfUVVJRVRfQ1RMMSwJMHgwMDAwMDA4OCB9LAorCS8qIEluaXRpYWwgcmF0ZSBkdXJhdGlvbiB0YWJsZSAoMzIgZW50cmllcyApKi8KIAl7IEFSNUtfUkFURV9EVVIoMCksCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUkFURV9EVVIoMSksCTB4MDAwMDAwOGMgfSwKIAl7IEFSNUtfUkFURV9EVVIoMiksCTB4MDAwMDAwZTQgfSwKQEAgLTYxMCw4ODEgKzYwMyw2MjUgQEAKIAl7IEFSNUtfUkFURV9EVVIoMjkpLAkweDAwMDAwMDdmIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDMwKSwJMHgwMDAwMDBhMiB9LAogCXsgQVI1S19SQVRFX0RVUigzMSksCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODEwMCwgMHgwMDAxMDAwMn0sCisJeyBBUjVLX1FVSUVUX0NUTDIsCTB4MDAwMTAwMDIgfSwKIAl7IEFSNUtfVFNGX1BBUk0sCTB4MDAwMDAwMDEgfSwKLQl7IDB4ODEwOCwgMHgwMDAwMDBjMCB9LAorCXsgQVI1S19RT1NfTk9BQ0ssCTB4MDAwMDAwYzAgfSwKIAl7IEFSNUtfUEhZX0VSUl9GSUwsCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODExMCwgMHgwMDAwMDE2OCB9LAotCXsgMHg4MTE0LCAweDAwMDAwMDAwIH0sCi0JLyogU29tZSBraW5kIG9mIHRhYmxlCi0JICogYWxzbyBub3RpY2UgLi4uMDM8LTAyPC0wMTwtMDApICovCi0JeyAweDg3YzAsIDB4MDMwMjAxMDAgfSwKLQl7IDB4ODdjNCwgMHgwNzA2MDUwNCB9LAotCXsgMHg4N2M4LCAweDBiMGEwOTA4IH0sCi0JeyAweDg3Y2MsIDB4MGYwZTBkMGMgfSwKLQl7IDB4ODdkMCwgMHgxMzEyMTExMCB9LAotCXsgMHg4N2Q0LCAweDE3MTYxNTE0IH0sCi0JeyAweDg3ZDgsIDB4MWIxYTE5MTggfSwKLQl7IDB4ODdkYywgMHgxZjFlMWQxYyB9LAotCS8qIGxvb3AgPyAqLwotCXsgMHg4N2UwLCAweDAzMDIwMTAwIH0sCi0JeyAweDg3ZTQsIDB4MDcwNjA1MDQgfSwKLQl7IDB4ODdlOCwgMHgwYjBhMDkwOCB9LAotCXsgMHg4N2VjLCAweDBmMGUwZDBjIH0sCi0JeyAweDg3ZjAsIDB4MTMxMjExMTAgfSwKLQl7IDB4ODdmNCwgMHgxNzE2MTUxNCB9LAotCXsgMHg4N2Y4LCAweDFiMWExOTE4IH0sCi0JeyAweDg3ZmMsIDB4MWYxZTFkMWMgfSwKLQkvKiBQSFkgcmVnaXN0ZXJzICovCi0JLyp7IEFSNUtfUEhZX0FHQywgMHgwMDAwMDAwMCB9LCovCi0JeyBBUjVLX1BIWSgzKSwJMHhhZDg0OGUxOSB9LAotCXsgQVI1S19QSFkoNCksCTB4N2QyOGUwMDAgfSwKLQl7IEFSNUtfUEhZX1RJTUlOR18zLCAweDljMGE5ZjZiIH0sCi0JeyBBUjVLX1BIWV9BQ1QsCTB4MDAwMDAwMDAgfSwKLQkvKnsgQVI1S19QSFkoMTEpLCAweDAwMDIyZmZlIH0sKi8KLQkvKnsgQVI1S19QSFkoMTUpLCAweDAwMDIwMTAwIH0sKi8KLQl7IEFSNUtfUEhZKDE2KSwJMHgyMDZhMDE3YSB9LAotCS8qeyBBUjVLX1BIWSgxOSksIDB4MTI4NDYxM2MgfSwqLwotCXsgQVI1S19QSFkoMjEpLAkweDAwMDAwODU5IH0sCi0JeyBBUjVLX1BIWSg2NCksCTB4MDAwMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY1KSwJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19QSFkoNjYpLAkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2NyksCTB4MDA4MDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY4KSwJMHgwMDAwMDAwMSB9LAorCXsgQVI1S19YUkxBVF9UWCwJMHgwMDAwMDE2OCB9LAorCXsgQVI1S19BQ0tTSUZTLAkJMHgwMDAwMDAwMCB9LAorCS8qIFJhdGUgLT4gZGIgdGFibGUKKwkgKiBub3RpY2UgLi4uMDM8LTAyPC0wMTwtMDAgISAqLworCXsgQVI1S19SQVRFMkRCKDApLAkweDAzMDIwMTAwIH0sCisJeyBBUjVLX1JBVEUyREIoMSksCTB4MDcwNjA1MDQgfSwKKwl7IEFSNUtfUkFURTJEQigyKSwJMHgwYjBhMDkwOCB9LAorCXsgQVI1S19SQVRFMkRCKDMpLAkweDBmMGUwZDBjIH0sCisJeyBBUjVLX1JBVEUyREIoNCksCTB4MTMxMjExMTAgfSwKKwl7IEFSNUtfUkFURTJEQig1KSwJMHgxNzE2MTUxNCB9LAorCXsgQVI1S19SQVRFMkRCKDYpLAkweDFiMWExOTE4IH0sCisJeyBBUjVLX1JBVEUyREIoNyksCTB4MWYxZTFkMWMgfSwKKwkvKiBEYiAtPiBSYXRlIHRhYmxlICovCisJeyBBUjVLX0RCMlJBVEUoMCksCTB4MDMwMjAxMDAgfSwKKwl7IEFSNUtfREIyUkFURSgxKSwJMHgwNzA2MDUwNCB9LAorCXsgQVI1S19EQjJSQVRFKDIpLAkweDBiMGEwOTA4IH0sCisJeyBBUjVLX0RCMlJBVEUoMyksCTB4MGYwZTBkMGMgfSwKKwl7IEFSNUtfREIyUkFURSg0KSwJMHgxMzEyMTExMCB9LAorCXsgQVI1S19EQjJSQVRFKDUpLAkweDE3MTYxNTE0IH0sCisJeyBBUjVLX0RCMlJBVEUoNiksCTB4MWIxYTE5MTggfSwKKwl7IEFSNUtfREIyUkFURSg3KSwJMHgxZjFlMWQxYyB9LAorCS8qIFBIWSByZWdpc3RlcnMgKENvbW1vbiBzZXR0aW5ncworCSAqIGZvciBhbGwgY2hpcHMvbW9kZXMpICovCisJeyBBUjVLX1BIWSgzKSwJCTB4YWQ4NDhlMTkgfSwKKwl7IEFSNUtfUEhZKDQpLAkJMHg3ZDI4ZTAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzMsCTB4OWMwYTlmNmIgfSwKKwl7IEFSNUtfUEhZX0FDVCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZKDE2KSwJCTB4MjA2YTAxN2EgfSwKKwl7IEFSNUtfUEhZKDIxKSwJCTB4MDAwMDA4NTkgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLXzEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLXzIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLXzMsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLX0NUTCwgMHgwMDgwMDAwMCB9LAorCXsgQVI1S19QSFlfQU5UX0NUTCwJMHgwMDAwMDAwMSB9LAogCS8qeyBBUjVLX1BIWSg3MSksIDB4MDAwMDA5MmEgfSwqLyAvKiBPbGQgdmFsdWUgKi8KLQl7IEFSNUtfUEhZKDcxKSwJMHgwMDAwMGM4MCB9LAotCXsgQVI1S19QSFlfSVEsCTB4MDUxMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDc0KSwgMHgwMDAwMDAwMSB9LAotCXsgQVI1S19QSFkoNzUpLCAweDAwMDAwMDA0IH0sCisJeyBBUjVLX1BIWV9NQVhfUlhfTEVOLAkweDAwMDAwYzgwIH0sCisJeyBBUjVLX1BIWV9JUSwJCTB4MDUxMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1dBUk1fUkVTRVQsCTB4MDAwMDAwMDEgfSwKKwl7IEFSNUtfUEhZX0NUTCwJCTB4MDAwMDAwMDQgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTEsIDB4MWUxZjIwMjIgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTIsIDB4MGEwYjBjMGQgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgsIDB4MDAwMDAwM2YgfSwKLQkvKnsgQVI1S19QSFkoODApLCAweDAwMDAwMDA0IH0sKi8KLQl7IEFSNUtfUEhZKDgyKSwgMHg5MjgwYjIxMiB9LAotCXsgQVI1S19QSFlfUkFEQVIsIDB4NWQ1MGUxODggfSwKKwl7IEFSNUtfUEhZKDgyKSwJCTB4OTI4MGIyMTIgfSwKKwl7IEFSNUtfUEhZX1JBREFSLAkweDVkNTBlMTg4IH0sCiAJLyp7IEFSNUtfUEhZKDg2KSwgMHgwMDAwMDBmZiB9LCovCi0JeyBBUjVLX1BIWSg4NyksIDB4MDA0YjZhOGUgfSwKLQl7IEFSNUtfUEhZKDkwKSwJMHgwMDAwMDNjZSB9LAotCXsgQVI1S19QSFkoOTIpLAkweDE5MmZiNTE1IH0sCi0JLyp7IEFSNUtfUEhZKDkzKSwgMHgwMDAwMDAwMCB9LCovCi0JeyBBUjVLX1BIWSg5NCksCTB4MDAwMDAwMDEgfSwKLQl7IEFSNUtfUEhZKDk1KSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFkoODcpLAkJMHgwMDRiNmE4ZSB9LAorCXsgQVI1S19QSFlfTkZUSFJFUywJMHgwMDAwMDNjZSB9LAorCXsgQVI1S19QSFlfUkVTVEFSVCwJMHgxOTJmYjUxNSB9LAorCXsgQVI1S19QSFkoOTQpLAkJMHgwMDAwMDAwMSB9LAorCXsgQVI1S19QSFlfUkZCVVNfUkVRLAkweDAwMDAwMDAwIH0sCiAJLyp7IEFSNUtfUEhZKDY0NCksIDB4MDA4MGEzMzMgfSwqLyAvKiBPbGQgdmFsdWUgKi8KIAkvKnsgQVI1S19QSFkoNjQ1KSwgMHgwMDIwNmMxMCB9LCovIC8qIE9sZCB2YWx1ZSAqLwotCXsgQVI1S19QSFkoNjQ0KSwgMHgwMDgwNjMzMyB9LAotCXsgQVI1S19QSFkoNjQ1KSwgMHgwMDEwNmMxMCB9LAotCXsgQVI1S19QSFkoNjQ2KSwgMHgwMDljNDA2MCB9LAotCXsgQVI1S19QSFkoNjQ3KSwgMHgxNDgzODAwYSB9LAotCS8qIHsgQVI1S19QSFkoNjQ4KSwgMHgwMTg4MzBjNiB9LCovIC8qIDI0MTMvMjQyNSAqLwotCXsgQVI1S19QSFkoNjQ4KSwgMHgwMTgzMTA2MSB9LAotCXsgQVI1S19QSFkoNjQ5KSwgMHgwMDAwMDQwMCB9LAorCXsgQVI1S19QSFkoNjQ0KSwJMHgwMDgwNjMzMyB9LAorCXsgQVI1S19QSFkoNjQ1KSwJMHgwMDEwNmMxMCB9LAorCXsgQVI1S19QSFkoNjQ2KSwJMHgwMDljNDA2MCB9LAorCS8qIHsgQVI1S19QSFkoNjQ3KSwgMHgxNDgzODAwYSB9LCAqLworCS8qIHsgQVI1S19QSFkoNjQ4KSwgMHgwMTgzMTA2MSB9LCAqLyAvKiBPbGQgdmFsdWUgKi8KKwl7IEFSNUtfUEhZKDY0OCksCTB4MDE4ODMwYzYgfSwKKwl7IEFSNUtfUEhZKDY0OSksCTB4MDAwMDA0MDAgfSwKIAkvKnsgQVI1S19QSFkoNjUwKSwgMHgwMDAwMDFiNSB9LCovCi0JeyBBUjVLX1BIWSg2NTEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWSg2NTEpLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUzLCAweDIwMjAyMDIwIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUyLCAweDIwMjAyMDIwIH0sCiAJLyp7IEFSNUtfUEhZKDY1NSksIDB4MTNjODg5YWYgfSwqLwotCXsgQVI1S19QSFkoNjU2KSwgMHgzODQ5MGEyMCB9LAotCXsgQVI1S19QSFkoNjU3KSwgMHgwMDAwN2JiNiB9LAotCXsgQVI1S19QSFkoNjU4KSwgMHgwZmZmM2ZmYyB9LAotCS8qeyBBUjVLX1BIWV9DQ0tUWENUTCwgMHgwMDAwMDAwMCB9LCovCisJeyBBUjVLX1BIWSg2NTYpLAkweDM4NDkwYTIwIH0sCisJeyBBUjVLX1BIWSg2NTcpLAkweDAwMDA3YmI2IH0sCisJeyBBUjVLX1BIWSg2NTgpLAkweDBmZmYzZmZjIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiAoV3JpdHRlbiBiZWZvcmUgYXI1MjEyX2luaSkgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjEyX2luaV9tb2RlX3N0YXJ0W10gPSB7Ci0JeyBBUjVLX1BIWSg2NDApLAotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcgKERZTikJICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDBiLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDApLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDApLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygxKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDIpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg0KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDUpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg3KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDgpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0lGUywKLQkJeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0gfSwKKwkgICB7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TTE9ULAotCQl7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSB9LAorCSAgIHsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX0VJRlMsCi0JCXsgMHgwMDAwMGU2MCwgMHgwMDAwMTE4MCwgMHgwMDAwMWYxYywgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9IH0sCisJICAgeyAweDAwMDAwZTYwLCAweDAwMDAxMTgwLCAweDAwMDAxZjFjLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfTUlTQywKLQkJeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwLCAweDAwMDBiMGUwLCAweDAwMDE0MDY4IH0gfSwKKwkgICB7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAsIDB4MDAwMGIwZTAsIDB4MDAwMTQwNjggfSB9LAogCXsgQVI1S19USU1FX09VVCwKLQkJeyAweDAzZTgwM2U4LCAweDA2ZTAwNmUwLCAweDA0MjAwNDIwLCAweDA4NDAwODQwLCAweDA2ZTAwNmUwIH0gfSwKKwkgICB7IDB4MDNlODAzZTgsIDB4MDZlMDA2ZTAsIDB4MDQyMDA0MjAsIDB4MDg0MDA4NDAsIDB4MDZlMDA2ZTAgfSB9LAogCXsgQVI1S19QSFlfVFVSQk8sCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzIH0gfSwKIAl7IEFSNUtfUEhZKDgpLAotCQl7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSB9LAotCXsgQVI1S19QSFkoOSksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNyksCi0JCXsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTZhMiwgMHgxMzcyMWMyNSB9IH0sCisJICAgeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDIsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1NFVFRMSU5HLAorCSAgIHsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTZhMiwgMHgxMzcyMWMyNSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDVEwsCi0JCXsgMHgwMDAwOWQxMCwgMHgwMDAwOWQxMCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCB9IH0sCisJICAgeyAweDAwMDA5ZDEwLCAweDAwMDA5ZDEwLCAweDAwMDA5ZDE4LCAweDAwMDA5ZDE4LCAweDAwMDA5ZDE4IH0gfSwKIAl7IEFSNUtfUEhZX05GLAotCQl7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAotCXsgQVI1S19QSFkoMjYpLAotCQl7IDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAgfSB9LAorCSAgIHsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fSElHSF9USFIsCisJICAgeyAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwIH0gfSwKIAl7IEFSNUtfUEhZKDcwKSwKLQkJeyAweDAwMDAwMWI4LCAweDAwMDAwMWI4LCAweDAwMDAwMDg0LCAweDAwMDAwMTA4LCAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUEhZKDczKSwKLQkJeyAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1IH0gfSwKKwkgICB7IDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwODQsIDB4MDAwMDAxMDgsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkgICB7IDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUgfSB9LAogCXsgMHhhMjMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9IH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiArIFJGNTExMSAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogTmV3IGR1bXAgcGVuZGluZyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZFtdID0gewotCXsgQVI1S19QSFkoNjQwKSwgLyogVGhpcyBvbmUgZGlmZmVycyBmcm9tIGFyNTIxMl9pbmlfbW9kZV9zdGFydCAhICovCi0JLyoJICBhL1hSCSAgICAgIGFUdXJibwkgIGIJICAgICAgZyAoRFlOKQkgIGdUdXJibyAqLwotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDYsIDB4MDAwMDAwMDYgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjUxMTFfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCQl7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MTI4ZDhmYTcsIDB4MDk4ODBmY2YsIDB4MDRlMDBmOTUsIDB4MTJlMDBmYWIsIDB4MDk4ODBmY2YgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOGRhNWEsIDB4MDAxOGRhNWEsIDB4MDAxOGNhNjksIDB4MDAxOGNhNjksIDB4MDAxOGNhNjkgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAorCSAgIHsgMHgxMjhkOGZhNywgMHgwOTg4MGZjZiwgMHgwNGUwMGY5NSwgMHgxMmUwMGZhYiwgMHgwOTg4MGZjZiB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThkYTVhLCAweDAwMThkYTVhLCAweDAwMThjYTY5LCAweDAwMThjYTY5LCAweDAwMThjYTY5IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODRkMmUsIDB4N2VlODRkMmUsIDB4N2U4MDBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjE1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MCwgMHgwNTBjYjA4MCB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2MTVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MCwgMHgwNTBjYjA4MCB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyYWY4LCAweDAwMDAyNzEwIH0gfSwKKwkgICB7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MsIDB4MDAwMDJhZjgsIDB4MDAwMDI3MTAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCB9IH0sCisJICAgeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDIwLCAweGY3YjgxMDIwLCAweGY3YjgxMDIwIH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDY0MmM0MTZhLCAweDY0MmM0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MgfSB9LAotCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwKLQkJeyAweDAwMDA0ODgzLCAweDAwMDA0ODgzLCAweDAwMDA0ODgzLCAweDAwMDA0ODgzLCAweDAwMDA0ODgzIH0gfSwKLQl7IEFSNUtfUEhZKDgwKSwKLQkJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZKDkzKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTggfSB9LAotCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYgfSB9LAorCSAgIHsgMHg2NDJjNDE2YSwgMHg2NDJjNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmNTExMV9pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsIAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLCAJMHgwMDAyMmZmZSB9LAorCXsgMHg5ODNjLCAJCTB4MDAwMjAxMDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULAkweDEyODQ2MTNjIH0sCisJeyBBUjVLX1BIWV9QQVBEX1BST0JFLAkweDAwMDA0ODgzIH0sCisJeyAweDk5NDAsCQkweDAwMDAwMDA0IH0sCisJeyAweDk5NTgsCQkweDAwMDAwMGZmIH0sCisJeyAweDk5NzQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxOCB9LAorCXsgQVI1S19QSFlfQ0NLVFhDVEwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsIDB4ZDAzZTY3ODggfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwMWI1IH0sCisJeyAweGEyM2MsCQkweDEzYzg4OWFmIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiArIFJGNTExMiAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgYnV0IGkgZm91bmQgc2V0dGluZ3MgZnJvbSBvbGQgdmFsdWVzIHNvIGl0IHNob3VsZCBiZSBvayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTJfcmY1MTEyX2luaV9tb2RlX2VuZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjUxMTJfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcgKERZTikJICBnVHVyYm8gKi8KLQkJeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThkYTZkLCAweDAwMThkYTZkLCAweDAwMThjYTc1LCAweDAwMThjYTc1LCAweDAwMThjYTc1IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMTAsIDB4ZjdiODEwMTAsIDB4ZjdiODEwMTAgfSB9LAorCSAgIHsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQxMCwgMHhmN2I4MTAxMCwgMHhmN2I4MTAxMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDY0MmMwMTQwLCAweDY0MmMwMTQwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MgfSB9LAotCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwKLQkJeyAweDAwMDA0ODgyLCAweDAwMDA0ODgyLCAweDAwMDA0ODgyLCAweDAwMDA0ODgyLCAweDAwMDA0ODgyIH0gfSwKLQl7IEFSNUtfUEhZKDgwKSwKLQkJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZKDkzKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmIH0gfSwKKwkgICB7IDB4NjQyYzAxNDAsIDB4NjQyYzAxNDAsIDB4NjQ0MmMxNjAsIDB4NjQ0MmMxNjAsIDB4NjQ0MmMxNjAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTJfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAyMmZmZSB9LAorCXsgMHg5ODNjLAkJMHgwMDAyMDEwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsCTB4MTI4NDYxM2MgfSwKKwl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCTB4MDAwMDQ4ODIgfSwKKwl7IDB4OTk0MCwJCTB4MDAwMDAwMDQgfSwKKwl7IDB4OTk1OCwJCTB4MDAwMDAwZmYgfSwKKwl7IDB4OTk3NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwMWI1IH0sCisJeyAweGEyM2MsCQkweDEzYzg4OWFmIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIFJGNTQxMy81NDE0IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCi0gKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmNTQxM19pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICBhL1hSCSAgICAgIGFUdXJibwkgIGIJICAgICAgZwkJICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMWExYTYzLCAweDAwMWExYTYzLCAweDAwMWExYTYzIH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBjOThiNGUwLCAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZmE2MSwgMHgwMDE4ZmE2MSwgMHgwMDFhMWE2MywgMHgwMDFhMWE2MywgMHgwMDFhMWE2MyB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBjOThiNGUwLCAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwkgICB7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAorCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKKwkgICB7IDB4MDAyZWMxZTAsIDB4MDAyZWMxZTAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCiAJeyAweGEzMDAsCi0JCXsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCisJICAgeyAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwIH0gfSwKIAl7IDB4YTMwNCwKLQkJeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKKwkgICB7IDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIgfSB9LAogCXsgMHhhMzA4LAotCQl7IDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYgfSB9LAorCSAgIHsgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiB9IH0sCiAJeyAweGEzMGMsCi0JCXsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCisJICAgeyAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhIH0gfSwKIAl7IDB4YTMxMCwKLQkJeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKKwkgICB7IDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYgfSB9LAogCXsgMHhhMzE0LAotCQl7IDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIgfSB9LAorCSAgIHsgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiB9IH0sCiAJeyAweGEzMTgsCi0JCXsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCisJICAgeyAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhIH0gfSwKIAl7IDB4YTMxYywKLQkJeyAweDkwY2Y4NjViLCAweDkwY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKKwkgICB7IDB4OTBjZjg2NWIsIDB4OTBjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIgfSB9LAogCXsgMHhhMzIwLAotCQl7IDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYgfSB9LAorCSAgIHsgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiB9IH0sCiAJeyAweGEzMjQsCi0JCXsgMHhhN2NmYTM4ZiwgMHhhN2NmYTM4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiB9IH0sCisJICAgeyAweGE3Y2ZhMzhmLCAweGE3Y2ZhMzhmLCAweGEzY2Y5ZjhmLCAweGEzY2Y5ZjhmLCAweGEzY2Y5ZjhmIH0gfSwKIAl7IDB4YTMyOCwKLQkJeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmIH0gfSwKKwkgICB7IDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYgfSB9LAogCXsgMHhhMzJjLAotCQl7IDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYgfSB9LAorCSAgIHsgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiB9IH0sCiAJeyAweGEzMzAsCi0JCXsgMHhjYjdmYzUzZiwgMHhjYjdmYzUzZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiB9IH0sCisJICAgeyAweGNiN2ZjNTNmLCAweGNiN2ZjNTNmLCAweGNiN2ZjNzNmLCAweGNiN2ZjNzNmLCAweGNiN2ZjNzNmIH0gfSwKIAl7IDB4YTMzNCwKLQkJeyAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAotCXsgMHg0MDY4LAotCQl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSB9LAotCXsgMHg4MDYwLAotCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAotCXsgMHg4MDljLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MGEwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTE4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTFjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTIwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTJjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTQwLAotCQl7IDB4ODAwMDAzZjksIDB4ODAwMDAzZjksIDB4ODAwMDAzZjksIDB4ODAwMDAzZjksIDB4ODAwMDAzZjkgfSB9LAotCXsgMHg4MTQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAotCXsgQVI1S19QSFlfU0NSLAotCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAotCXsgQVI1S19QSFlfU0xNVCwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUEhZX1NDQUwsCi0JCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiB9IH0sCi0JeyBBUjVLX1BIWSg5NiksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg5NyksCi0JCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMDQpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIwKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMSksCi0JCXsgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSB9IH0sCi0JeyBBUjVLX1BIWSgxMjIpLAotCQl7IDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzggfSB9LAotCXsgQVI1S19QSFkoMTIzKSwKLQkJeyAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhIH0gfSwKLQl7IEFSNUtfUEhZX1NDTE9DSywKLQkJeyAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjIH0gfSwKLQl7IEFSNUtfUEhZX1NERUxBWSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAotCXsgMHhhMjRjLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgMHhhMjUwLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgMHhhMjU0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjU4LAotCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAotCXsgMHhhMjVjLAotCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAotCXsgMHhhMjYwLAotCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAotCXsgMHhhMjY0LAotCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAotCXsgMHhhMjY4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjZjLAotCQl7IDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEgfSB9LAotCXsgMHhhMjcwLAotCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAotCXsgMHhhMjc0LAotCQl7IDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEgfSB9LAotCXsgMHhhMjc4LAotCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAotCXsgMHhhMjdjLAotCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAotCXsgMHhhMzM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ4LAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzRjLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzUwLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzU0LAotCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAotCXsgMHhhMzU4LAotCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAotCXsgMHhhMzVjLAotCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAotCXsgMHhhMzYwLAotCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAotCXsgMHhhMzY0LAotCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAotCXsgMHhhMzY4LAotCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAotCXsgMHhhMzZjLAotCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAotCXsgMHhhMzcwLAotCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAotCXsgMHhhMzc0LAotCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAotCXsgMHhhMzc4LAotCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAotCXsgMHhhMzdjLAotCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAotCXsgMHhhMzgwLAotCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAotCXsgMHhhMzg0LAotCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorCSAgIHsgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjU0MTNfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDNlMCB9LAorCXsgQVI1S181NDE0X0NCQ0ZHLAkweDAwMDAwMDEwIH0sCisJeyBBUjVLX1NFUV9NQVNLLAkweDAwMDAwMDBmIH0sCisJeyAweDgwOWMsCQkweDAwMDAwMDAwIH0sCisJeyAweDgwYTAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfU0VMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JU0NfTU9ERSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19PRkRNX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0NLX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDFfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMl9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RTRl9USFJFUywJMHgwMDAwMDAwMCB9LAorCXsgMHg4MTQwLAkJMHg4MDAwMDNmOSB9LAorCXsgMHg4MTQ0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAwYTAwMCB9LAorCXsgMHg5ODNjLAkJMHgwMDIwMDQwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsIDB4MTI4NDIzM2MgfSwKKwl7IEFSNUtfUEhZX1NDUiwJCTB4MDAwMDAwMWYgfSwKKwl7IEFSNUtfUEhZX1NMTVQsCTB4MDAwMDAwODAgfSwKKwl7IEFSNUtfUEhZX1NDQUwsCTB4MDAwMDAwMGUgfSwKKwl7IDB4OTk1OCwJCTB4MDAwODFmZmYgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR183LAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfOCwJMHgwMjgwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzExLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9IRUFWWV9DTElQX0VOQUJMRSwgMHgwMDAwMDAwMCB9LAorCXsgMHg5OWU0LAkJMHhhYWFhYWFhYSB9LAorCXsgMHg5OWU4LAkJMHgzYzQ2NjQ3OCB9LAorCXsgMHg5OWVjLAkJMHgwMDAwMDBhYSB9LAorCXsgQVI1S19QSFlfU0NMT0NLLAkweDAwMDAwMDBjIH0sCisJeyBBUjVLX1BIWV9TREVMQVksCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE0IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwgMHgwMDAwMDliNSB9LAorCXsgMHhhMjNjLAkJMHg5M2M4ODlhZiB9LAorCXsgQVI1S19QSFlfRkFTVF9BREMsCTB4MDAwMDAwMDEgfSwKKwl7IDB4YTI1MCwJCTB4MDAwMGEwMDAgfSwKKwl7IEFSNUtfUEhZX0JMVUVUT09USCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHMSwJMHgwY2M3NTM4MCB9LAorCXsgMHhhMjVjLAkJMHgwZjBmMGYwMSB9LAorCXsgMHhhMjYwLAkJMHg1ZjY5MGYwMSB9LAorCXsgMHhhMjY0LAkJMHgwMDQxOGExMSB9LAorCXsgMHhhMjY4LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHNSwJMHgwYzMwYzE2YSB9LAorCXsgMHhhMjcwLCAweDAwODIwODIwIH0sCisJeyAweGEyNzQsIDB4MDgxYjdjYWEgfSwKKwl7IDB4YTI3OCwgMHgxY2U3MzljZSB9LAorCXsgMHhhMjdjLCAweDA1MTcwMWNlIH0sCisJeyAweGEzMzgsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTMzYywgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQwLCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDQsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0OCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzRjLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTAsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1NCwgMHgwMDAzZmZmZiB9LAorCXsgMHhhMzU4LCAweDc5YThhYTFmIH0sCisJeyAweGEzNWMsIDB4MDY2YzQyMGYgfSwKKwl7IDB4YTM2MCwgMHgwZjI4MjIwNyB9LAorCXsgMHhhMzY0LCAweDE3NjAxNjg1IH0sCisJeyAweGEzNjgsIDB4MWY4MDExMDQgfSwKKwl7IDB4YTM2YywgMHgzN2EwMGMwMyB9LAorCXsgMHhhMzcwLCAweDNmYzQwODgzIH0sCisJeyAweGEzNzQsIDB4NTdjMDA4MDMgfSwKKwl7IDB4YTM3OCwgMHg1ZmQ4MDY4MiB9LAorCXsgMHhhMzdjLCAweDdmZTAwNDgyIH0sCisJeyAweGEzODAsIDB4N2YzYzdiYmEgfSwKKwl7IDB4YTM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBSRjI0MTMvMjQxNCAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgc28gdHVyYm9nIGlzIHRoZSBzYW1lIHdpdGggZyBoZXJlIHdpdGggc29tZQotICogbWlub3IgdHdlYWtpbmcgYmFzZWQgb24gZHVtcHMgZnJvbSBvdGhlciBjaGlwcyAqLworLyogWFhYOiBhIG1vZGUgPyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjI0MTNfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgICAgIGIJCWcJICAgIGdUdXJibyAqLwotCQl7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MDUwMjAwMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxYTZhNjQsIDB4MDAxYTZhNjQsIDB4MDAxYTZhNjQgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGRlOGIwZGEsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDAwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDAyLCAweDAwMDAwMDAyLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhIH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThkYTZkLCAweDAwMThkYTZkLCAweDAwMWE2YTY0LCAweDAwMWE2YTY0LCAweDAwMWE2YTY0IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGIwZGEsIDB4MGM5OGIwZGEsIDB4MGRlOGIwZGEgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2VlODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NjY1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzk2MDVlLCAweDMxMzc2NjVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4MDA0MmMxNDAsIDB4MDA0MmMxNDAsIDB4MDA0MmMxNDAgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCB9IH0sCi0JeyAweDgwNjAsCi0JCXsgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiB9IH0sCi0JeyAweDgxMTgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMmMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxNDAsCi0JCXsgMHg4MDAwMDBhOCwgMHg4MDAwMDBhOCwgMHg4MDAwMDBhOCB9IH0sCi0JeyAweDgxNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYyB9IH0sCi0JeyBBUjVLX1BIWV9TQ1IsCi0JCXsgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiB9IH0sCi0JeyBBUjVLX1BIWV9TTE1ULAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19QSFlfU0NBTCwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZKDk2KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDk3KSwKLQkJeyAweDAyODAwMDAwLCAweDAyODAwMDAwLCAweDAyODAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEwNCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjApLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIxKSwKLQkJeyAweGFhYWFhYWFhLCAweGFhYWFhYWFhLCAweGFhYWFhYWFhIH0gfSwKLQl7IEFSNUtfUEhZKDEyMiksCi0JCXsgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCB9IH0sCi0JeyBBUjVLX1BIWSgxMjMpLAotCQl7IDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEgfSB9LAotCXsgQVI1S19QSFlfU0NMT0NLLAotCQl7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMgfSB9LAotCXsgQVI1S19QSFlfU0RFTEFZLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFlfU1BFTkRJTkcsCi0JCXsgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiB9IH0sCi0JeyAweGEyNGMsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyAweGEyNTAsCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyAweGEyNTQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNTgsCi0JCXsgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCB9IH0sCi0JeyAweGEyNWMsCi0JCXsgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSB9IH0sCi0JeyAweGEyNjAsCi0JCXsgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSB9IH0sCi0JeyAweGEyNjQsCi0JCXsgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSB9IH0sCi0JeyAweGEyNjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNmMsCi0JCXsgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSB9IH0sCi0JeyAweGEyNzAsCi0JCXsgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCB9IH0sCi0JeyAweGEyNzQsCi0JCXsgMHgwMDFiN2NhYSwgMHgwMDFiN2NhYSwgMHgwMDFiN2NhYSB9IH0sCi0JeyAweGEyNzgsCi0JCXsgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9IH0sCi0JeyAweGEyN2MsCi0JCXsgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSB9IH0sCi0JeyAweGEzMDAsCi0JCXsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCi0JeyAweGEzMDQsCi0JCXsgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiB9IH0sCi0JeyAweGEzMDgsCi0JCXsgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiB9IH0sCi0JeyAweGEzMGMsCi0JCXsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCi0JeyAweGEzMTAsCi0JCXsgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiB9IH0sCi0JeyAweGEzMTQsCi0JCXsgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiB9IH0sCi0JeyAweGEzMTgsCi0JCXsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCi0JeyAweGEzMWMsCi0JCXsgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiB9IH0sCi0JeyAweGEzMjAsCi0JCXsgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiB9IH0sCi0JeyAweGEzMjQsCi0JCXsgMHhhNWNmYTE4ZiwgMHhhNWNmYTE4ZiwgMHhhNWNmYTE4ZiB9IH0sCi0JeyAweGEzMjgsCi0JCXsgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiB9IH0sCi0JeyAweGEzMmMsCi0JCXsgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiB9IH0sCi0JeyAweGEzMzAsCi0JCXsgMHhjZDdmYzczZiwgMHhjZDdmYzczZiwgMHhjZDdmYzczZiB9IH0sCi0JeyAweGEzMzQsCi0JCXsgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiB9IH0sCi0JeyAweGEzMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDgsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNGMsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTAsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTQsCi0JCXsgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiB9IH0sCi0JeyAweGEzNTgsCi0JCXsgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiB9IH0sCi0JeyAweGEzNWMsCi0JCXsgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiB9IH0sCi0JeyAweGEzNjAsCi0JCXsgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNyB9IH0sCi0JeyAweGEzNjQsCi0JCXsgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSB9IH0sCi0JeyAweGEzNjgsCi0JCXsgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCB9IH0sCi0JeyAweGEzNmMsCi0JCXsgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMyB9IH0sCi0JeyAweGEzNzAsCi0JCXsgMHgzZmM0MDg4MywgMHgzZmM0MDg4MywgMHgzZmM0MDg4MyB9IH0sCi0JeyAweGEzNzQsCi0JCXsgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMyB9IH0sCi0JeyAweGEzNzgsCi0JCXsgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiB9IH0sCi0JeyAweGEzN2MsCi0JCXsgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiB9IH0sCi0JeyAweGEzODAsCi0JCXsgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSB9IH0sCi0JeyAweGEzODQsCi0JCXsgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCB9IH0sCisJICAgeyAweDAwMmMwMTQwLCAweDAwMmMwMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmYyNDEzX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAzZTAgfSwKKwl7IEFSNUtfU0VRX01BU0ssCTB4MDAwMDAwMGYgfSwKKwl7IEFSNUtfTUlDX1FPU19DVEwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlDX1FPU19TRUwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlTQ19NT0RFLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX09GRE1fRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19DQ0tfRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMV9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfVFNGX1RIUkVTLAkweDAwMDAwMDAwIH0sCisJeyAweDgxNDAsCQkweDgwMDAwMGE4IH0sCisJeyAweDgxNDQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLAkweDAwMDBhMDAwIH0sCisJeyAweDk4M2MsCQkweDAwMjAwNDAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwJMHgxMjg0MjMzYyB9LAorCXsgQVI1S19QSFlfU0NSLAkJMHgwMDAwMDAxZiB9LAorCXsgQVI1S19QSFlfU0xNVCwJMHgwMDAwMDA4MCB9LAorCXsgQVI1S19QSFlfU0NBTCwJMHgwMDAwMDAwZSB9LAorCXsgMHg5OTU4LAkJMHgwMDAwMDBmZiB9LAorCXsgQVI1S19QSFlfVElNSU5HXzcsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR184LAkweDAyODAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfMTEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFLCAweDAwMDAwMDAwIH0sCisJeyAweDk5ZTQsCQkweGFhYWFhYWFhIH0sCisJeyAweDk5ZTgsCQkweDNjNDY2NDc4IH0sCisJeyAweDk5ZWMsCQkweDAwMDAwMGFhIH0sCisJeyBBUjVLX1BIWV9TQ0xPQ0ssCTB4MDAwMDAwMGMgfSwKKwl7IEFSNUtfUEhZX1NERUxBWSwJMHgwMDAwMDBmZiB9LAorCXsgQVI1S19QSFlfU1BFTkRJTkcsCTB4MDAwMDAwMTQgfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwOWI1IH0sCisJeyAweGEyM2MsCQkweDkzYzg4OWFmIH0sCisJeyBBUjVLX1BIWV9GQVNUX0FEQywJMHgwMDAwMDAwMSB9LAorCXsgMHhhMjUwLAkJMHgwMDAwYTAwMCB9LAorCXsgQVI1S19QSFlfQkxVRVRPT1RILAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkcxLAkweDBjYzc1MzgwIH0sCisJeyAweGEyNWMsCQkweDBmMGYwZjAxIH0sCisJeyAweGEyNjAsCQkweDVmNjkwZjAxIH0sCisJeyAweGEyNjQsCQkweDAwNDE4YTExIH0sCisJeyAweGEyNjgsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkc1LAkweDBjMzBjMTZhIH0sCisJeyAweGEyNzAsIDB4MDA4MjA4MjAgfSwKKwl7IDB4YTI3NCwgMHgwMDFiN2NhYSB9LAorCXsgMHhhMjc4LCAweDFjZTczOWNlIH0sCisJeyAweGEyN2MsIDB4MDUxNzAxY2UgfSwKKwl7IDB4YTMwMCwgMHgxODAxMDAwMCB9LAorCXsgMHhhMzA0LCAweDMwMDMyNjAyIH0sCisJeyAweGEzMDgsIDB4NDgwNzNlMDYgfSwKKwl7IDB4YTMwYywgMHg1NjBiNGMwYSB9LAorCXsgMHhhMzEwLCAweDY0MWE2MDBmIH0sCisJeyAweGEzMTQsIDB4Nzg0ZjZlMWIgfSwKKwl7IDB4YTMxOCwgMHg4NjhmN2M1YSB9LAorCXsgMHhhMzFjLCAweDhlY2Y4NjViIH0sCisJeyAweGEzMjAsIDB4OWQ0Zjk3MGYgfSwKKwl7IDB4YTMyNCwgMHhhNWNmYTE4ZiB9LAorCXsgMHhhMzI4LCAweGI1NWZhZjFmIH0sCisJeyAweGEzMmMsIDB4YmRkZmI5OWYgfSwKKwl7IDB4YTMzMCwgMHhjZDdmYzczZiB9LAorCXsgMHhhMzM0LCAweGQ1ZmZkMWJmIH0sCisJeyAweGEzMzgsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTMzYywgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQwLCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDQsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0OCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzRjLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTAsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1NCwgMHgwMDAzZmZmZiB9LAorCXsgMHhhMzU4LCAweDc5YThhYTFmIH0sCisJeyAweGEzNWMsIDB4MDY2YzQyMGYgfSwKKwl7IDB4YTM2MCwgMHgwZjI4MjIwNyB9LAorCXsgMHhhMzY0LCAweDE3NjAxNjg1IH0sCisJeyAweGEzNjgsIDB4MWY4MDExMDQgfSwKKwl7IDB4YTM2YywgMHgzN2EwMGMwMyB9LAorCXsgMHhhMzcwLCAweDNmYzQwODgzIH0sCisJeyAweGEzNzQsIDB4NTdjMDA4MDMgfSwKKwl7IDB4YTM3OCwgMHg1ZmQ4MDY4MiB9LAorCXsgMHhhMzdjLCAweDdmZTAwNDgyIH0sCisJeyAweGEzODAsIDB4N2YzYzdiYmEgfSwKKwl7IDB4YTM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBSRjI0MjUgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIHNvIHR1cmJvZyBpcyB0aGUgc2FtZSB3aXRoIGcgaGVyZSB3aXRoIHNvbWUKLSAqIG1pbm9yIHR3ZWFraW5nIGJhc2VkIG9uIGR1bXBzIGZyb20gb3RoZXIgY2hpcHMgKi8KKy8qIFhYWDogYSBtb2RlID8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmYyNDI1X2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgICAgICAgZwlnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAogCXsgQVI1S19QSFlfVFVSQk8sCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxNyksCi0JCXsgMHgxMzcyMTQyMiwgMHgxMzcyMTQyMiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE5OWE2NSwgMHgwMDE5OWE2NSB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfU0VUVExJTkcsCisJICAgeyAweDEzNzIxNjFjLCAweDEzNzIxYzI1LCAweDEzNzIxNzIyLCAweDEzNzIxNDIyLCAweDEzNzIxYzI1IH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMTk5YTY1LCAweDAwMTk5YTY1LCAweDAwMTk5YTY1IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGM5OGI0ZTAsIDB4MGM5OGI0ZTAsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorCSAgIHsgMHgwMDAwMDE0MCwgMHgwMDAwMDE0MCwgMHgwMDUyYzE0MCwgMHgwMDUyYzE0MCwgMHgwMDUyYzE0MCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKIAl7IDB4YTMyNCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzI4LAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMmMsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMzMCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzM0LAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCB9IH0sCi0JeyAweDgwNjAsCi0JCXsgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiB9IH0sCi0JeyAweDgwOWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgwYTAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMTgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMmMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxNDAsCi0JCXsgMHg4MDAwMDNmOSwgMHg4MDAwMDNmOSB9IH0sCi0JeyAweDgxNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0MjMzYywgMHgxMjg0MjMzYyB9IH0sCi0JeyBBUjVLX1BIWV9TQ1IsCi0JCXsgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiB9IH0sCi0JeyBBUjVLX1BIWV9TTE1ULAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19QSFlfU0NBTCwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDgxZmZmLCAweDAwMDgxZmZmIH0gfSwKLQl7IEFSNUtfUEhZKDk2KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDk3KSwKLQkJeyAweDAyODAwMDAwLCAweDAyODAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEwNCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMTkpLAotCQl7IDB4ZmViYWRiZTgsIDB4ZmViYWRiZTggfSB9LAotCXsgQVI1S19QSFkoMTIwKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMSksCi0JCXsgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSB9IH0sCi0JeyBBUjVLX1BIWSgxMjIpLAotCQl7IDB4M2M0NjY0NzgsIDB4M2M0NjY0NzggfSB9LAotCXsgQVI1S19QSFkoMTIzKSwKLQkJeyAweDAwMDAwMGFhLCAweDAwMDAwMGFhIH0gfSwKLQl7IEFSNUtfUEhZX1NDTE9DSywKLQkJeyAweDAwMDAwMDBjLCAweDAwMDAwMDBjIH0gfSwKLQl7IEFSNUtfUEhZX1NERUxBWSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUgfSB9LAotCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMywKLQkJeyAweDIwMjAyMDIwLCAweDIwMjAyMDIwIH0gfSwKLQl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTQsCi0JCXsgMHgyMDIwMjAyMCwgMHgyMDIwMjAyMCB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiB9IH0sCi0JeyAweGEyNGMsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyAweGEyNTAsCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyAweGEyNTQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNTgsCi0JCXsgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCB9IH0sCi0JeyAweGEyNWMsCi0JCXsgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSB9IH0sCi0JeyAweGEyNjAsCi0JCXsgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSB9IH0sCi0JeyAweGEyNjQsCi0JCXsgMHgwMDQxOGExMSwgMHgwMDQxOGExMSB9IH0sCi0JeyAweGEyNjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNmMsCi0JCXsgMHgwYzMwYzE2NiwgMHgwYzMwYzE2NiB9IH0sCi0JeyAweGEyNzAsCi0JCXsgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCB9IH0sCi0JeyAweGEyNzQsCi0JCXsgMHgwODFhM2NhYSwgMHgwODFhM2NhYSB9IH0sCi0JeyAweGEyNzgsCi0JCXsgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9IH0sCi0JeyAweGEyN2MsCi0JCXsgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSB9IH0sCi0JeyAweGEzMDAsCi0JCXsgMHgxNjAxMDAwMCwgMHgxNjAxMDAwMCB9IH0sCi0JeyAweGEzMDQsCi0JCXsgMHgyYzAzMjQwMiwgMHgyYzAzMjQwMiB9IH0sCi0JeyAweGEzMDgsCi0JCXsgMHg0ODQzM2U0MiwgMHg0ODQzM2U0MiB9IH0sCi0JeyAweGEzMGMsCi0JCXsgMHg1YTBmNTAwYiwgMHg1YTBmNTAwYiB9IH0sCi0JeyAweGEzMTAsCi0JCXsgMHg2YzRiNjI0YSwgMHg2YzRiNjI0YSB9IH0sCi0JeyAweGEzMTQsCi0JCXsgMHg3ZThiNzQ4YSwgMHg3ZThiNzQ4YSB9IH0sCi0JeyAweGEzMTgsCi0JCXsgMHg5NmNmOGNjYiwgMHg5NmNmOGNjYiB9IH0sCi0JeyAweGEzMWMsCi0JCXsgMHhhMzRmOWQwZiwgMHhhMzRmOWQwZiB9IH0sCi0JeyAweGEzMjAsCi0JCXsgMHhhN2NmYTU4ZiwgMHhhN2NmYTU4ZiB9IH0sCi0JeyAweGEzNDgsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNGMsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTAsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTQsCi0JCXsgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiB9IH0sCi0JeyAweGEzNTgsCi0JCXsgMHg3OWE4YWExZiwgMHg3OWE4YWExZiB9IH0sCi0JeyAweGEzNWMsCi0JCXsgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiB9IH0sCi0JeyAweGEzNjAsCi0JCXsgMHgwZjI4MjIwNywgMHgwZjI4MjIwNyB9IH0sCi0JeyAweGEzNjQsCi0JCXsgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSB9IH0sCi0JeyAweGEzNjgsCi0JCXsgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCB9IH0sCi0JeyAweGEzNmMsCi0JCXsgMHgzN2EwMGMwMywgMHgzN2EwMGMwMyB9IH0sCi0JeyAweGEzNzAsCi0JCXsgMHgzZmM0MDg4MywgMHgzZmM0MDg4MyB9IH0sCi0JeyAweGEzNzQsCi0JCXsgMHg1N2MwMDgwMywgMHg1N2MwMDgwMyB9IH0sCi0JeyAweGEzNzgsCi0JCXsgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiB9IH0sCi0JeyAweGEzN2MsCi0JCXsgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiB9IH0sCi0JeyAweGEzODAsCi0JCXsgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSB9IH0sCi0JeyAweGEzODQsCi0JCXsgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmMjQyNV9pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwM2UwIH0sCisJeyBBUjVLX1NFUV9NQVNLLAkweDAwMDAwMDBmIH0sCisJeyAweDgwOWMsCQkweDAwMDAwMDAwIH0sCisJeyAweDgwYTAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfU0VMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JU0NfTU9ERSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19PRkRNX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0NLX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDFfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMl9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RTRl9USFJFUywJMHgwMDAwMDAwMCB9LAorCXsgMHg4MTQwLAkJMHg4MDAwMDNmOSB9LAorCXsgMHg4MTQ0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAwYTAwMCB9LAorCXsgMHg5ODNjLAkJMHgwMDIwMDQwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsIDB4MTI4NDIzM2MgfSwKKwl7IEFSNUtfUEhZX1NDUiwJCTB4MDAwMDAwMWYgfSwKKwl7IEFSNUtfUEhZX1NMTVQsCTB4MDAwMDAwODAgfSwKKwl7IEFSNUtfUEhZX1NDQUwsCTB4MDAwMDAwMGUgfSwKKwl7IDB4OTk1OCwJCTB4MDAwODFmZmYgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR183LAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfOCwJMHgwMjgwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzExLAkweDAwMDAwMDAwIH0sCisJeyAweDk5ZGMsCQkweGZlYmFkYmU4IH0sCisJeyBBUjVLX1BIWV9IRUFWWV9DTElQX0VOQUJMRSwgMHgwMDAwMDAwMCB9LAorCXsgMHg5OWU0LAkJMHhhYWFhYWFhYSB9LAorCXsgMHg5OWU4LAkJMHgzYzQ2NjQ3OCB9LAorCXsgMHg5OWVjLAkJMHgwMDAwMDBhYSB9LAorCXsgQVI1S19QSFlfU0NMT0NLLAkweDAwMDAwMDBjIH0sCisJeyBBUjVLX1BIWV9TREVMQVksCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE0IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDliNSB9LAorCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMywgMHgyMDIwMjAyMCB9LAorCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFNCwgMHgyMDIwMjAyMCB9LAorCXsgMHhhMjNjLAkJMHg5M2M4ODlhZiB9LAorCXsgQVI1S19QSFlfRkFTVF9BREMsCTB4MDAwMDAwMDEgfSwKKwl7IDB4YTI1MCwJCTB4MDAwMGEwMDAgfSwKKwl7IEFSNUtfUEhZX0JMVUVUT09USCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHMSwJMHgwY2M3NTM4MCB9LAorCXsgMHhhMjVjLAkJMHgwZjBmMGYwMSB9LAorCXsgMHhhMjYwLAkJMHg1ZjY5MGYwMSB9LAorCXsgMHhhMjY0LAkJMHgwMDQxOGExMSB9LAorCXsgMHhhMjY4LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHNSwJMHgwYzMwYzE2NiB9LAorCXsgMHhhMjcwLCAweDAwODIwODIwIH0sCisJeyAweGEyNzQsIDB4MDgxYTNjYWEgfSwKKwl7IDB4YTI3OCwgMHgxY2U3MzljZSB9LAorCXsgMHhhMjdjLCAweDA1MTcwMWNlIH0sCisJeyAweGEzMDAsIDB4MTYwMTAwMDAgfSwKKwl7IDB4YTMwNCwgMHgyYzAzMjQwMiB9LAorCXsgMHhhMzA4LCAweDQ4NDMzZTQyIH0sCisJeyAweGEzMGMsIDB4NWEwZjUwMGIgfSwKKwl7IDB4YTMxMCwgMHg2YzRiNjI0YSB9LAorCXsgMHhhMzE0LCAweDdlOGI3NDhhIH0sCisJeyAweGEzMTgsIDB4OTZjZjhjY2IgfSwKKwl7IDB4YTMxYywgMHhhMzRmOWQwZiB9LAorCXsgMHhhMzIwLCAweGE3Y2ZhNThmIH0sCisJeyAweGEzNDgsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM0YywgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzUwLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTQsIDB4MDAwM2ZmZmYgfSwKKwl7IDB4YTM1OCwgMHg3OWE4YWExZiB9LAorCXsgMHhhMzVjLCAweDA2NmM0MjBmIH0sCisJeyAweGEzNjAsIDB4MGYyODIyMDcgfSwKKwl7IDB4YTM2NCwgMHgxNzYwMTY4NSB9LAorCXsgMHhhMzY4LCAweDFmODAxMTA0IH0sCisJeyAweGEzNmMsIDB4MzdhMDBjMDMgfSwKKwl7IDB4YTM3MCwgMHgzZmM0MDg4MyB9LAorCXsgMHhhMzc0LCAweDU3YzAwODAzIH0sCisJeyAweGEzNzgsIDB4NWZkODA2ODIgfSwKKwl7IDB4YTM3YywgMHg3ZmUwMDQ4MiB9LAorCXsgMHhhMzgwLCAweDdmM2M3YmJhIH0sCisJeyAweGEzODQsIDB4ZjMzMDdmZjAgfSwKIH07CiAKIC8qCkBAIC0xNTYwLDcgKzEyOTcsNyBAQAogCXsgQVI1S19CQl9HQUlOKDYzKSwgMHgwMDAwMDAxNiB9LAogfTsKIAotLyogUkY1MTEyIEluaXRpYWwgQmFzZUJhbmQgR2FpbiBzZXR0aW5ncyAoU2FtZSBmb3IgUkY1NDEzLzU0MTQpICovCisvKiBSRjUxMTIgSW5pdGlhbCBCYXNlQmFuZCBHYWluIHNldHRpbmdzIChTYW1lIGZvciBSRjU0MTMvNTQxNCspICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTJfaW5pX2JiZ2FpbltdID0gewogCXsgQVI1S19CQl9HQUlOKDApLCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JCX0dBSU4oMSksIDB4MDAwMDAwMDEgfSwKQEAgLTE2OTEsODcgKzE0MjgsOTcgQEAKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBzZXR0aW5ncyBjb21tb24gZm9yIGFsbCBtb2RlcwogCQkgKi8KLQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwgQVJSQVlfU0laRShhcjUyMTJfaW5pKSwKLQkJCQkJYXI1MjEyX2luaSwgY2hhbmdlX2NoYW5uZWwpOworCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLCBBUlJBWV9TSVpFKGFyNTIxMl9pbmlfY29tbW9uX3N0YXJ0KSwKKwkJCQlhcjUyMTJfaW5pX2NvbW1vbl9zdGFydCwgY2hhbmdlX2NoYW5uZWwpOwogCiAJCS8qIFNlY29uZCBzZXQgb2YgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7CisJCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJCWNhc2UgQVI1S19SRjUxMTE6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKLQkJCQkJQVJSQVlfU0laRShhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZCksCi0JCQkJCWFyNTIxMl9yZjUxMTFfaW5pX21vZGVfZW5kLCBtb2RlKTsKKwkJCQkJQVJSQVlfU0laRShyZjUxMTFfaW5pX21vZGVfZW5kKSwKKwkJCQkJcmY1MTExX2luaV9tb2RlX2VuZCwgbW9kZSk7CisKKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmY1MTExX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmY1MTExX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CiAKIAkJCS8qIEJhc2ViYW5kIGdhaW4gdGFibGUgKi8KIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTExX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTFfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwogCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGNTExMjoKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAotCQkJCQlBUlJBWV9TSVpFKGFyNTIxMl9yZjUxMTJfaW5pX21vZGVfZW5kKSwKLQkJCQkJYXI1MjEyX3JmNTExMl9pbmlfbW9kZV9lbmQsIG1vZGUpOworCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfbW9kZV9lbmQpLAorCQkJCQlyZjUxMTJfaW5pX21vZGVfZW5kLCBtb2RlKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjUxMTJfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CiAKLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHsKKwkJCWJyZWFrOworCQljYXNlIEFSNUtfUkY1NDEzOgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1NDEzX2luaV9tb2RlX2VuZCksCiAJCQkJCXJmNTQxM19pbmlfbW9kZV9lbmQsIG1vZGUpOwogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmNTQxM19pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmNTQxM19pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKIAotCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQxMykgewotCi0JCQlpZiAobW9kZSA8IDIpIHsKLQkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCQkidW5zdXBwb3J0ZWQgY2hhbm5lbCBtb2RlOiAlZFxuIiwgbW9kZSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQltb2RlID0gbW9kZSAtIDI7Ci0KLQkJCS8qIE92ZXJyaWRlIGEgc2V0dGluZyBmcm9tIGFyNTIxMl9pbmkgKi8KLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMTg4MzBjNiwgQVI1S19QSFkoNjQ4KSk7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGMjMxNjoKKwkJY2FzZSBBUjVLX1JGMjQxMzoKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmMjQxM19pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjI0MTNfaW5pX21vZGVfZW5kLCBtb2RlKTsKIAotCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjI0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKworCQkJLyogT3ZlcnJpZGUgc2V0dGluZ3MgZnJvbSByZjI0MTNfaW5pX2NvbW1vbl9lbmQgKi8KKwkJCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjIzMTYpIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDQwMDAsCisJCQkJCQkJQVI1S19QSFlfQUdDKTsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDgxYjdjYWEsCisJCQkJCQkJMHhhMjc0KTsKKwkJCX0KKwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7Ci0KLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MjUpIHsKLQotCQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkJInVuc3VwcG9ydGVkIGNoYW5uZWwgbW9kZTogJWRcbiIsIG1vZGUpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQkvKiBNYXAgYiB0byBnICovCi0JCQlpZiAobW9kZSA9PSAyKQotCQkJCW1vZGUgPSAwOwotCQkJZWxzZQotCQkJCW1vZGUgPSBtb2RlIC0gMzsKLQotCQkJLyogT3ZlcnJpZGUgYSBzZXR0aW5nIGZyb20gYXI1MjEyX2luaSAqLwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAxODgzMGM2LCBBUjVLX1BIWSg2NDgpKTsKKwkJCWJyZWFrOworCQljYXNlIEFSNUtfUkYyMzE3OgorCQljYXNlIEFSNUtfUkYyNDI1OgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmYyNDI1X2luaV9tb2RlX2VuZCksCiAJCQkJCXJmMjQyNV9pbmlfbW9kZV9lbmQsIG1vZGUpOwogCi0JCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmMjQyNV9pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmMjQyNV9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTU1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9sZWQuYwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IFNhbSBMZWZmbGVyLCBFcnJubyBDb25zdWx0aW5nCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICogICAgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkKKyAqICAgIHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlciBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OSU5GUklOR0VNRU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJhdGg1ay5oIgorI2luY2x1ZGUgImJhc2UuaCIKKworI2RlZmluZSBBVEhfU0RFVklDRShzdWJ2LHN1YmQpIFwKKwkudmVuZG9yID0gUENJX0FOWV9JRCwgLmRldmljZSA9IFBDSV9BTllfSUQsIFwKKwkuc3VidmVuZG9yID0gKHN1YnYpLCAuc3ViZGV2aWNlID0gKHN1YmQpCisKKyNkZWZpbmUgQVRIX0xFRChwaW4scG9sYXJpdHkpIC5kcml2ZXJfZGF0YSA9ICgoKHBpbikgPDwgOCkgfCAocG9sYXJpdHkpKQorI2RlZmluZSBBVEhfUElOKGRhdGEpICgoZGF0YSkgPj4gOCkKKyNkZWZpbmUgQVRIX1BPTEFSSVRZKGRhdGEpICgoZGF0YSkgJiAweGZmKQorCisvKiBEZXZpY2VzIHdlIG1hdGNoIG9uIGZvciBMRUQgY29uZmlnIGluZm8gKHR5cGljYWxseSBsYXB0b3BzKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX2xlZF9kZXZpY2VzW10gPSB7CisJLyogSUJNLXNwZWNpZmljIEFSNTIxMiAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0pLCBBVEhfTEVEKDAsIDApIH0sCisJLyogQVI1MjExICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjExKSwgQVRIX0xFRCgwLCAwKSB9LAorCS8qIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwLCBueDYwMDAgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUEFRLCBQQ0lfQU5ZX0lEKSwgQVRIX0xFRCgxLCAxKSB9LAorCS8qIEFjZXIgQXNwaXJlIE9uZSBBMTUwIChtYXhpbWxldml0c2t5QGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfRk9YQ09OTiwgMHhlMDA4KSwgQVRIX0xFRCgzLCAwKSB9LAorCS8qIEFjZXIgRmVycmFyaSA1MDAwIChydXNzLmRpbGxAZ21haWwuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUJJVCwgMHgwNDIyKSwgQVRIX0xFRCgxLCAxKSB9LAorCS8qIEUtbWFjaGluZXMgRTUxMCAodHVsaW9tQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQU1CSVQsIDB4MDQyOCksIEFUSF9MRUQoMywgMCkgfSwKKwkvKiBBY2VyIEV4dGVuc2EgNTYyMHogKG5la29yZWV2ZUBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX1FNSSwgMHgwMTA1KSwgQVRIX0xFRCgzLCAwKSB9LAorCXsgfQorfTsKKwordm9pZCBhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKHRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKSB7CisJCWF0aDVrX2h3X3NldF9ncGlvX291dHB1dChzYy0+YWgsIHNjLT5sZWRfcGluKTsKKwkJYXRoNWtfbGVkX29mZihzYyk7CisJfQorfQorCit2b2lkIGF0aDVrX2xlZF9vbihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCisJCXJldHVybjsKKwlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCBzYy0+bGVkX29uKTsKK30KKwordm9pZCBhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJcmV0dXJuOworCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKKwkJbGVkX2Rldik7CisKKwlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQorCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOworCWVsc2UKKwkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOworfQorCitzdGF0aWMgaW50CithdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAorCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQoreworCWludCBlcnI7CisKKwlsZWQtPnNjID0gc2M7CisJc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7CisKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpIHsKKwkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOworCQlsZWQtPnNjID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKK3sKKwlpZiAoIWxlZC0+c2MpCisJCXJldHVybjsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKKwlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOworCWxlZC0+c2MgPSBOVUxMOworfQorCit2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+cnhfbGVkKTsKKwlhdGg1a191bnJlZ2lzdGVyX2xlZCgmc2MtPnR4X2xlZCk7Cit9CisKK2ludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OworCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKm1hdGNoOworCisJbWF0Y2ggPSBwY2lfbWF0Y2hfaWQoJmF0aDVrX2xlZF9kZXZpY2VzWzBdLCBwZGV2KTsKKwlpZiAobWF0Y2gpIHsKKwkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOworCQlzYy0+bGVkX3BpbiA9IEFUSF9QSU4obWF0Y2gtPmRyaXZlcl9kYXRhKTsKKwkJc2MtPmxlZF9vbiA9IEFUSF9QT0xBUklUWShtYXRjaC0+ZHJpdmVyX2RhdGEpOworCX0KKworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCisJCWdvdG8gb3V0OworCisJYXRoNWtfbGVkX2VuYWJsZShzYyk7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5yeF9sZWQsIG5hbWUsCisJCWllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoaHcpKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjp0eCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnR4X2xlZCwgbmFtZSwKKwkJaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodykpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKaW5kZXggNzVlYjlmNC4uNTUxMjJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKQEAgLTY0Niw2ICs2NDYsMjIgQEAKIH0KIAogLyoqCisgKiBhdGg1a19od19zZXRfdHNmNjQgLSBTZXQgYSBuZXcgNjRiaXQgVFNGCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICogQHRzZjY0OiBUaGUgbmV3IDY0Yml0IFRTRgorICoKKyAqIFNldHMgdGhlIG5ldyBUU0YKKyAqLwordm9pZCBhdGg1a19od19zZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTY0IHRzZjY0KQoreworCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CisKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZjY0ICYgMHhmZmZmZmZmZiwgQVI1S19UU0ZfTDMyKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsICh0c2Y2NCA+PiAzMikgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9VMzIpOworfQorCisvKioKICAqIGF0aDVrX2h3X3Jlc2V0X3RzZiAtIEZvcmNlIGEgVFNGIHJlc2V0CiAgKgogICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwpAQCAtMTAyNiw2ICsxMDQyLDkgQEAKIAkJCXJldHVybiBBUjVLX0tFWVRBQkxFX1RZUEVfNDA7CiAJCWVsc2UgaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVAxMDQpCiAJCQlyZXR1cm4gQVI1S19LRVlUQUJMRV9UWVBFXzEwNDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTA0MSw3ICsxMDYwLDcgQEAKIAlfX2xlMzIga2V5X3ZbNV0gPSB7fTsKIAlfX2xlMzIga2V5MCA9IDAsIGtleTEgPSAwOwogCV9fbGUzMiAqcnhtaWMsICp0eG1pYzsKLQl1MzIga2V5dHlwZTsKKwlpbnQga2V5dHlwZTsKIAl1MTYgbWljZW50cnkgPSBlbnRyeSArIEFSNUtfS0VZVEFCTEVfTUlDX09GRlNFVDsKIAlib29sIGlzX3RraXA7CiAJY29uc3QgdTggKmtleV9wdHI7CkBAIC0xMTM5LDcgKzExNTgsNyBAQAogCiAJLyogTUFDIG1heSBiZSBOVUxMIGlmIGl0J3MgYSBicm9hZGNhc3Qga2V5LiBJbiB0aGlzIGNhc2Ugbm8gbmVlZCB0bwogCSAqIHRvIGNvbXB1dGUgQVI1S19MT1dfSUQgYW5kIEFSNUtfSElHSF9JRCBhcyB3ZSBhbHJlYWR5IGtub3cgaXQuICovCi0JaWYgKHVubGlrZWx5KG1hYyA9PSBOVUxMKSkgeworCWlmICghbWFjKSB7CiAJCWxvd19pZCA9IDB4ZmZmZmZmZmY7CiAJCWhpZ2hfaWQgPSAweGZmZmYgfCBBUjVLX0tFWVRBQkxFX1ZBTElEOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jCmluZGV4IDdiYTE4ZTAuLjllMmZhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jCkBAIC0yLDggKzIsOSBAQAogICogUEhZIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0yNiwxMTM4ICsyNywxOTMgQEAKICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImJhc2UuaCIKLQotLyogU3RydWN0IHRvIGhvbGQgaW5pdGlhbCBSRiByZWdpc3RlciB2YWx1ZXMgKFJGIEJhbmtzKSAqLwotc3RydWN0IGF0aDVrX2luaV9yZiB7Ci0JdTgJcmZfYmFuazsJLyogY2hlY2sgb3V0IGF0aDVrX3JlZy5oICovCi0JdTE2CXJmX3JlZ2lzdGVyOwkvKiByZWdpc3RlciBhZGRyZXNzICovCi0JdTMyCXJmX3ZhbHVlWzVdOwkvKiByZWdpc3RlciB2YWx1ZSBmb3IgZGlmZmVyZW50IG1vZGVzIChhYm92ZSkgKi8KLX07Ci0KLS8qCi0gKiBNb2RlLXNwZWNpZmljIFJGIEdhaW4gdGFibGUgKDY0Ynl0ZXMpIGZvciBSRjUxMTEvNTExMgotICogKFJGNTExMCBvbmx5IGNvbWVzIHdpdGggQVI1MjEwIGFuZCBvbmx5IHN1cHBvcnRzIGEvdHVyYm8gYSBtb2RlIHNvIGluaXRpYWwKLSAqIFJGIEdhaW4gdmFsdWVzIGFyZSBpbmNsdWRlZCBpbiBBUjVLX0FSNTIxMF9JTkkpCi0gKi8KLXN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHsKLQl1MTYJcmZnX3JlZ2lzdGVyOwkvKiBSRiBHYWluIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQl1MzIJcmZnX3ZhbHVlWzJdOwkvKiBbZnJlcSAoc2VlIGJlbG93KV0gKi8KLX07Ci0KLXN0cnVjdCBhdGg1a19nYWluX29wdCB7Ci0JdTMyCQkJZ29fZGVmYXVsdDsKLQl1MzIJCQlnb19zdGVwc19jb3VudDsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAlnb19zdGVwW0FSNUtfR0FJTl9TVEVQX0NPVU5UXTsKLX07Ci0KLS8qIFJGNTExMSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTExMVtdID0gewotCXsgMCwgMHg5ODljLAotCS8qICAgIG1vZGUgYS9YUiAgIG1vZGUgYVR1cmJvIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgIG1vZGUgZ1R1cmJvICovCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDA0MDBmOSwgMHgwMDA0MDBmOSwgMHgwMDA0MDBmZiwgMHgwMDA0MDBmZCwgMHgwMDA0MDBmZCB9IH0sCi0JeyAwLCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyAxLCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCB9IH0sCi0JeyAzLCAweDk4ZDgsCi0JICAgIHsgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDM4MDBjMCwgMHgwMDM4MDA4MCwgMHgwMjM4MDBjMCwgMHgwMDM4MDBjMCwgMHgwMDM4MDBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAwMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNyB9IH0sCi0JeyA2LCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSwgMHgwMDAwMDA2MSwgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0YywgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI5YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSB9IH0sCi0JeyA3LCAweDk4Y2MsCi0JICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTExW10gPSB7Ci0JLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KLQl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMWU5LCAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMTUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMTk5LCAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDEwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDU5LCAweDAwMDAwMDQ0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDg0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMWE1LCAweDAwMDAwMTQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDFlNSwgMHgwMDAwMDE4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMjUsIDB4MDAwMDAxYzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMDE0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDA0MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwODIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMTc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE5OCwgMHgwMDAwMDFiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxZDgsIDB4MDAwMDAxZjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDE4LCAweDAwMDAwMDEyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA1OCwgMHgwMDAwMDA1MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwOTgsIDB4MDAwMDAwOTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWE0LCAweDAwMDAwMTdjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFlNCwgMHgwMDAwMDFiYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMjQsIDB4MDAwMDAxZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDY0LCAweDAwMDAwMDBhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDBhNCwgMHgwMDAwMDA0YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwZTQsIDB4MDAwMDAwOGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMTBhLCAweDAwMDAwMTVhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE0YSwgMHgwMDAwMDE5YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxOGEsIDB4MDAwMDAxZGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMWNhLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwYSwgMHgwMDAwMDA0ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwNGEsIDB4MDAwMDAwOGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDhhLCAweDAwMDAwMTVlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFiYSwgMHgwMDAwMDE5ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAxZmEsIDB4MDAwMDAxZGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAxODYsIDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWM2LCAweDAwMDAwMTc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwNiwgMHgwMDAwMDFiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwNDYsIDB4MDAwMDAxZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDg2LCAweDAwMDAwMDM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWJkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwM2QgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDdkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTExID0gewotCTQsCi0JOSwKLQl7Ci0JCXsgeyA0LCAxLCAxLCAxIH0sIDYgfSwKLQkJeyB7IDQsIDAsIDEsIDEgfSwgNCB9LAotCQl7IHsgMywgMSwgMSwgMSB9LCAzIH0sCi0JCXsgeyA0LCAwLCAwLCAxIH0sIDEgfSwKLQkJeyB7IDQsIDEsIDEsIDAgfSwgMCB9LAotCQl7IHsgNCwgMCwgMSwgMCB9LCAtMiB9LAotCQl7IHsgMywgMSwgMSwgMCB9LCAtMyB9LAotCQl7IHsgNCwgMCwgMCwgMCB9LCAtNCB9LAotCQl7IHsgMiwgMSwgMSwgMCB9LCAtNiB9Ci0JfQotfTsKLQotLyogUkY1MTEyIG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181MTEyW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGIwLCAweDAwMDAwMGIwLCAweDAwMDAwMGE4LCAweDAwMDAwMGE4LCAweDAwMDAwMGE4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNmM0YTQxLCAweDAwNmM0YTQxLCAweDAwNmM0YWYxLCAweDAwNmM0YTYxLCAweDAwNmM0YTYxIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTA4OTJhLCAweDAwNTA4OTJhLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwIH0gfSwKLQl7IDYsIDB4OThkMCwKLQkgICAgeyAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIDB4OThjNCwKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLS8qIFJGNTExMkEgbW9kZS1zcGVjaWZpYyBpbml0IHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzUxMTJhW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNmUwMDAwLCAweDAwNmUwMDAwLCAweDAwNmUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTkwMDAwLCAweDAwMTkwMDAwLCAweDAwMTkwMDAwLCAweDAwMTkwMDAwLCAweDAwMTkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDIwMDgwLCAweDAwMDIwMDgwLCAweDAwMDIwMDgwLCAweDAwMDIwMDgwLCAweDAwMDIwMDgwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDgwMDA5LCAweDAwMDgwMDA5LCAweDAwMDgwMDA5LCAweDAwMDgwMDA5LCAweDAwMDgwMDA5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwIH0gfSwKLQl7IDYsIDB4OThkOCwKLQkgICAgeyAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIDB4OThjNCwKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzIxMTJhW10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyoJICAgbW9kZSBiCW1vZGUgZwkgIG1vZGUgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCi0JCXsgMHgwMzA2MDQwOCwgMHgwMzA2MDQwOCwgMHgwMzA3MDQwOCB9IH0sCi0JeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCi0JCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDBhMDAwMDAwLCAweDBhMDAwMDAwLCAweDBhMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwYzBjMDAwMCwgMHgwYzBjMDAwMCwgMHgwYzBjMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAyMTkwMDAwLCAweDAyMTkwMDAwLCAweDAyMTkwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjIwMDgwLCAweDAwZjIwMDgwLCAweDAwZjIwMDgwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNzAwMTksIDB4MDAwNzAwMTksIDB4MDAwNzAwMTkgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGIwMjE4NCwgMHgwMGIwMjE4NCwgMHgwMGIwMjE4NCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzUsCi0JCXsgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YyB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzEsCi0JCXsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMyB9IH0sCi19OwotCi0vKiBSRjU0MTMvNTQxNCBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTQxM1tdID0gewotCXsgMSwgMHg5OGQ0LAotCS8qICAgIG1vZGUgYS9YUiAgIG1vZGUgYVR1cmJvIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgIG1vZGUgZ1R1cmJvICovCi0JICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCAweDk4ZDAsCi0JICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCi0JeyAzLCAweDk4ZGMsCi0JICAgIHsgMHgwMGEwMDBjMCwgMHgwMGEwMDBjMCwgMHgwMGUwMDBjMCwgMHgwMGUwMDBjMCwgMHgwMGUwMDBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDUxMDA0MCwgMHgwMDUxMDA0MCwgMHgwMDUxMDBhMCwgMHgwMDUxMDBhMCwgMHgwMDUxMDBhMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDUwMDA2YSwgMHgwMDUwMDA2YSwgMHgwMDUwMDBkZCwgMHgwMDUwMDBkZCwgMHgwMDUwMDBkZCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMmMwMCwgMHgwMDAwMmMwMCwgMHgwMDAwMzYwMCwgMHgwMDAwMzYwMCwgMHgwMDAwMzYwMCB9IH0sCi0JeyA2LCAweDk4YzgsCi0JICAgIHsgMHgwMDAwMDQwMywgMHgwMDAwMDQwMywgMHgwMDA0MDQwMywgMHgwMDA0MDQwMywgMHgwMDA0MDQwMyB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCi0JeyA3LCAweDk4Y2MsCi0JICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi19OwotCi0vKiBSRjI0MTMvMjQxNCBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjQxM1tdID0gewotCXsgMSwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCS8qIAkgICBtb2RlIGIgICAgICBtb2RlIGcgICAgIG1vZGUgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCi0JCXsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCi0JeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCi0JCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHg0MDQwMDAwMCwgMHg0MDQwMDAwMCwgMHg0MDQwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAzMDAwMCwgMHgwMDAzMDAwMCwgMHgwMDAzMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDIyMDAwMCwgMHgwMDIyMDAwMCwgMHgwMDIyMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTggfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDI4MDA1MCwgMHgwMDI4MDA1MCwgMHgwMDI4MDA1MCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDQ1OCwgMHgwMDAwMDQ1OCwgMHgwMDAwMDQ1OCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF81LAotCQl7IDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMiwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIFJGMjQyNSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjQyNVtdID0gewotCXsgMSwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCS8qIAkgICBtb2RlIGcgICAgIG1vZGUgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCi0JCXsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCi0JeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCi0JCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZTcwMDAwLCAweDAwZTcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDcwMDFhLCAweDAwMDcwMDFhIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDIwODAzLCAweDAwMDIwODAzIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAxNjYwLCAweDAwMDAxNjYwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8xLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMiwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTJbXSA9IHsKLQkvKgkJCSAgICAgIDVHaHoJMkdoegkqLwotCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwNDcsIDB4MDAwMDAwNDcgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwODcsIDB4MDAwMDAwODcgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAxYTAsIDB4MDAwMDAxYTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxZTAsIDB4MDAwMDAxZTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAxZTEsIDB4MDAwMDAxZTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDE2MiwgMHgwMDAwMDE2MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYTIsIDB4MDAwMDAxYTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMWUyLCAweDAwMDAwMWUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwNjIsIDB4MDAwMDAwNjIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTYzLCAweDAwMDAwMTYzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFhMywgMHgwMDAwMDFhMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAxZTMsIDB4MDAwMDAxZTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDIzLCAweDAwMDAwMDIzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA2MywgMHgwMDAwMDA2MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxODQsIDB4MDAwMDAxODQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWM0LCAweDAwMDAwMWM0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAxZWEsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDJhLCAweDAwMDAwMDRiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDA2YSwgMHgwMDAwMDA4YiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwYWEsIDB4MDAwMDAxYWMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMWFiLCAweDAwMDAwMWVjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDFlYiwgMHgwMDAwMDAyYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMmIsIDB4MDAwMDAwMTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDZiLCAweDAwMDAwMDUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDBhYiwgMHgwMDAwMDA5MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAxYWMsIDB4MDAwMDAxOTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWVjLCAweDAwMDAwMWQzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAyYywgMHgwMDAwMDAxMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwNTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDkzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDBiYSwgMHgwMDAwMDE5NCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYmIsIDB4MDAwMDAxZDQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMWZiLCAweDAwMDAwMDE0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAzYiwgMHgwMDAwMDAzYSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwN2IsIDB4MDAwMDAwN2EgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGJiLCAweDAwMDAwMGJhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDFiYywgMHgwMDAwMDFiYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAxZmMsIDB4MDAwMDAxZmIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDNjLCAweDAwMDAwMDNiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDA3YywgMHgwMDAwMDA3YiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYmMsIDB4MDAwMDAwYmIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwM2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDdjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBiYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotfTsKLQotLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjU0MTMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTQxM1tdID0gewotCS8qCQkJICAgICAgNUdoegkyR2h6CSovCi0JeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDE2MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFhMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDFlMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDAyMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDE4OCwgMHgwMDAwMDA2MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDE4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMDQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDA4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAxNjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMWE5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDFlOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxZDAsIDB4MDAwMDAwMjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMDEwLCAweDAwMDAwMDY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDA1MCwgMHgwMDAwMDE5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwOTAsIDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMWIxLCAweDAwMDAwMDEwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFmMSwgMHgwMDAwMDA1MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAwMzEsIDB4MDAwMDAwOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDcxLCAweDAwMDAwMTcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAxZjgsIDB4MDAwMDAxZjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDM4LCAweDAwMDAwMDMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDA3OCwgMHgwMDAwMDA3MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDk4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDE3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMWY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDAzOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGMjQxMyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl8yNDEzW10gPSB7Ci0JeyBBUjVLX1JGX0dBSU4oMCksIHsgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksIHsgMHgwMDAwMDA0MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksIHsgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksIHsgMHgwMDAwMDE4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksIHsgMHgwMDAwMDFjMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksIHsgMHgwMDAwMDAwMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksIHsgMHgwMDAwMDA0MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksIHsgMHgwMDAwMDA4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksIHsgMHgwMDAwMDE2OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksIHsgMHgwMDAwMDFhOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLCB7IDB4MDAwMDAxZTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwgeyAweDAwMDAwMDI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksIHsgMHgwMDAwMDA2OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLCB7IDB4MDAwMDAxODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwgeyAweDAwMDAwMWM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksIHsgMHgwMDAwMDAwOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLCB7IDB4MDAwMDAwNDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwgeyAweDAwMDAwMDg5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksIHsgMHgwMDAwMDE5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLCB7IDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwgeyAweDAwMDAwMDEwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksIHsgMHgwMDAwMDA1MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLCB7IDB4MDAwMDAwOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwgeyAweDAwMDAwMTkxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksIHsgMHgwMDAwMDFkMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLCB7IDB4MDAwMDAwMTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwgeyAweDAwMDAwMDUxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksIHsgMHgwMDAwMDA5MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLCB7IDB4MDAwMDAxNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwgeyAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksIHsgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLCB7IDB4MDAwMDAwMzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwgeyAweDAwMDAwMDc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksIHsgMHgwMDAwMDE5OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLCB7IDB4MDAwMDAxZDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwgeyAweDAwMDAwMDE5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksIHsgMHgwMDAwMDA1OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLCB7IDB4MDAwMDAwOTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwgeyAweDAwMDAwMGQ5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksIHsgMHgwMDAwMDBmOSB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGMjQyNSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl8yNDI1W10gPSB7Ci0JeyBBUjVLX1JGX0dBSU4oMCksIHsgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksIHsgMHgwMDAwMDA0MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksIHsgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksIHsgMHgwMDAwMDE4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksIHsgMHgwMDAwMDFjMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksIHsgMHgwMDAwMDAwMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksIHsgMHgwMDAwMDA0MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksIHsgMHgwMDAwMDA4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksIHsgMHgwMDAwMDE4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksIHsgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLCB7IDB4MDAwMDAwMDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwgeyAweDAwMDAwMDQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksIHsgMHgwMDAwMDA4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLCB7IDB4MDAwMDAxODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwgeyAweDAwMDAwMWM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksIHsgMHgwMDAwMDAwOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLCB7IDB4MDAwMDAwNDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwgeyAweDAwMDAwMDg5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksIHsgMHgwMDAwMDFiMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLCB7IDB4MDAwMDAxZjAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwgeyAweDAwMDAwMDMwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksIHsgMHgwMDAwMDA3MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLCB7IDB4MDAwMDAxNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwgeyAweDAwMDAwMWIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksIHsgMHgwMDAwMDFmMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLCB7IDB4MDAwMDAwMzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwgeyAweDAwMDAwMDcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksIHsgMHgwMDAwMDFiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLCB7IDB4MDAwMDAxZjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwgeyAweDAwMDAwMDM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksIHsgMHgwMDAwMDA3OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLCB7IDB4MDAwMDAwYjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwgeyAweDAwMDAwMWI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksIHsgMHgwMDAwMDFmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLCB7IDB4MDAwMDAwMzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwgeyAweDAwMDAwMDc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksIHsgMHgwMDAwMDBiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksIHsgMHgwMDAwMDBmOSB9IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0IHJmZ2Fpbl9vcHRfNTExMiA9IHsKLQkxLAotCTgsCi0JewotCQl7IHsgMywgMCwgMCwgMCwgMCwgMCwgMCB9LCA2IH0sCi0JCXsgeyAyLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDAgfSwKLQkJeyB7IDEsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTMgfSwKLQkJeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTYgfSwKLQkJeyB7IDAsIDEsIDEsIDAsIDAsIDAsIDAgfSwgLTggfSwKLQkJeyB7IDAsIDEsIDEsIDAsIDEsIDEsIDAgfSwgLTEwIH0sCi0JCXsgeyAwLCAxLCAwLCAxLCAxLCAxLCAwIH0sIC0xMyB9LAotCQl7IHsgMCwgMSwgMCwgMSwgMSwgMCwgMSB9LCAtMTYgfSwKLQl9Ci19OworI2luY2x1ZGUgInJmYnVmZmVyLmgiCisjaW5jbHVkZSAicmZnYWluLmgiCiAKIC8qCiAgKiBVc2VkIHRvIG1vZGlmeSBSRiBCYW5rcyBiZWZvcmUgd3JpdGluZyB0aGVtIHRvIEFSNUtfUkZfQlVGRkVSCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfcmZyZWdzX29wKHUzMiAqcmYsIHUzMiBvZmZzZXQsIHUzMiByZWcsIHUzMiBiaXRzLAotCQl1MzIgZmlyc3QsIHUzMiBjb2wsIGJvb2wgc2V0KQorc3RhdGljIHVuc2lnbmVkIGludCBhdGg1a19od19yZmJfb3Aoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCQkJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVncywKKwkJCQkJdTMyIHZhbCwgdTggcmVnX2lkLCBib29sIHNldCkKIHsKLQl1MzIgbWFzaywgZW50cnksIGxhc3QsIGRhdGEsIHNoaWZ0LCBwb3NpdGlvbjsKLQlzMzIgbGVmdDsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZnJlZyA9IE5VTEw7CisJdTggb2Zmc2V0LCBiYW5rLCBudW1fYml0cywgY29sLCBwb3NpdGlvbjsKKwl1MTYgZW50cnk7CisJdTMyIG1hc2ssIGRhdGEsIGxhc3RfYml0LCBiaXRzX3NoaWZ0ZWQsIGZpcnN0X2JpdDsKKwl1MzIgKnJmYjsKKwlzMzIgYml0c19sZWZ0OwogCWludCBpOwogCiAJZGF0YSA9IDA7CisJcmZiID0gYWgtPmFoX3JmX2JhbmtzOwogCi0JaWYgKHJmID09IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IGFoLT5haF9yZl9yZWdzX2NvdW50OyBpKyspIHsKKwkJaWYgKHJmX3JlZ3NbaV0uaW5kZXggPT0gcmVnX2lkKSB7CisJCQlyZnJlZyA9ICZyZl9yZWdzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmZiID09IE5VTEwgfHwgcmZyZWcgPT0gTlVMTCkgeworCQlBVEg1S19QUklOVEYoIlJmIHJlZ2lzdGVyIG5vdCBmb3VuZCFcbiIpOwogCQkvKiBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlyZXR1cm4gMDsKKwl9CiAKLQlpZiAoIShjb2wgPD0gMyAmJiBiaXRzIDw9IDMyICYmIGZpcnN0ICsgYml0cyA8PSAzMTkpKSB7CisJYmFuayA9IHJmcmVnLT5iYW5rOworCW51bV9iaXRzID0gcmZyZWctPmZpZWxkLmxlbjsKKwlmaXJzdF9iaXQgPSByZnJlZy0+ZmllbGQucG9zOworCWNvbCA9IHJmcmVnLT5maWVsZC5jb2w7CisKKwkvKiBmaXJzdF9iaXQgaXMgYW4gb2Zmc2V0IGZyb20gYmFuaydzCisJICogc3RhcnQuIFNpbmNlIHdlIGhhdmUgYWxsIGJhbmtzIG9uCisJICogdGhlIHNhbWUgYXJyYXksIHdlIHVzZSB0aGlzIG9mZnNldAorCSAqIHRvIG1hcmsgZWFjaCBiYW5rJ3Mgc3RhcnQgKi8KKwlvZmZzZXQgPSBhaC0+YWhfb2Zmc2V0W2JhbmtdOworCisJLyogQm91bmRhcnkgY2hlY2sgKi8KKwlpZiAoIShjb2wgPD0gMyAmJiBudW1fYml0cyA8PSAzMiAmJiBmaXJzdF9iaXQgKyBudW1fYml0cyA8PSAzMTkpKSB7CiAJCUFUSDVLX1BSSU5URigiaW52YWxpZCB2YWx1ZXMgYXQgb2Zmc2V0ICV1XG4iLCBvZmZzZXQpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQllbnRyeSA9ICgoZmlyc3QgLSAxKSAvIDgpICsgb2Zmc2V0OwotCXBvc2l0aW9uID0gKGZpcnN0IC0gMSkgJSA4OworCWVudHJ5ID0gKChmaXJzdF9iaXQgLSAxKSAvIDgpICsgb2Zmc2V0OworCXBvc2l0aW9uID0gKGZpcnN0X2JpdCAtIDEpICUgODsKIAogCWlmIChzZXQpCi0JCWRhdGEgPSBhdGg1a19od19iaXRzd2FwKHJlZywgYml0cyk7CisJCWRhdGEgPSBhdGg1a19od19iaXRzd2FwKHZhbCwgbnVtX2JpdHMpOwogCi0JZm9yIChpID0gc2hpZnQgPSAwLCBsZWZ0ID0gYml0czsgbGVmdCA+IDA7IHBvc2l0aW9uID0gMCwgZW50cnkrKywgaSsrKSB7Ci0JCWxhc3QgPSAocG9zaXRpb24gKyBsZWZ0ID4gOCkgPyA4IDogcG9zaXRpb24gKyBsZWZ0OwotCQltYXNrID0gKCgoMSA8PCBsYXN0KSAtIDEpIF4gKCgxIDw8IHBvc2l0aW9uKSAtIDEpKSA8PCAoY29sICogOCk7CisJZm9yIChiaXRzX3NoaWZ0ZWQgPSAwLCBiaXRzX2xlZnQgPSBudW1fYml0czsgYml0c19sZWZ0ID4gMDsKKwlwb3NpdGlvbiA9IDAsIGVudHJ5KyspIHsKKworCQlsYXN0X2JpdCA9IChwb3NpdGlvbiArIGJpdHNfbGVmdCA+IDgpID8gOCA6CisJCQkJCXBvc2l0aW9uICsgYml0c19sZWZ0OworCisJCW1hc2sgPSAoKCgxIDw8IGxhc3RfYml0KSAtIDEpIF4gKCgxIDw8IHBvc2l0aW9uKSAtIDEpKSA8PAorCQkJCQkJCQkoY29sICogOCk7CiAKIAkJaWYgKHNldCkgewotCQkJcmZbZW50cnldICY9IH5tYXNrOwotCQkJcmZbZW50cnldIHw9ICgoZGF0YSA8PCBwb3NpdGlvbikgPDwgKGNvbCAqIDgpKSAmIG1hc2s7CisJCQlyZmJbZW50cnldICY9IH5tYXNrOworCQkJcmZiW2VudHJ5XSB8PSAoKGRhdGEgPDwgcG9zaXRpb24pIDw8IChjb2wgKiA4KSkgJiBtYXNrOwogCQkJZGF0YSA+Pj0gKDggLSBwb3NpdGlvbik7CiAJCX0gZWxzZSB7Ci0JCQlkYXRhID0gKCgocmZbZW50cnldICYgbWFzaykgPj4gKGNvbCAqIDgpKSA+PiBwb3NpdGlvbikKLQkJCQk8PCBzaGlmdDsKLQkJCXNoaWZ0ICs9IGxhc3QgLSBwb3NpdGlvbjsKKwkJCWRhdGEgfD0gKCgocmZiW2VudHJ5XSAmIG1hc2spID4+IChjb2wgKiA4KSkgPj4gcG9zaXRpb24pCisJCQkJPDwgYml0c19zaGlmdGVkOworCQkJYml0c19zaGlmdGVkICs9IGxhc3RfYml0IC0gcG9zaXRpb247CiAJCX0KIAotCQlsZWZ0IC09IDggLSBwb3NpdGlvbjsKKwkJYml0c19sZWZ0IC09IDggLSBwb3NpdGlvbjsKIAl9CiAKLQlkYXRhID0gc2V0ID8gMSA6IGF0aDVrX2h3X2JpdHN3YXAoZGF0YSwgYml0cyk7CisJZGF0YSA9IHNldCA/IDEgOiBhdGg1a19od19iaXRzd2FwKGRhdGEsIG51bV9iaXRzKTsKIAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdTMyIGF0aDVrX2h3X3JmcmVnc19nYWluZl9jb3JyKHN0cnVjdCBhdGg1a19odyAqYWgpCisvKioqKioqKioqKioqKioqKioqKioqKlwKKyogUkYgR2FpbiBvcHRpbWl6YXRpb24gKgorXCoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGNvZGUgaXMgdXNlZCB0byBvcHRpbWl6ZSByZiBnYWluIG9uIGRpZmZlcmVudCBlbnZpcm9ubWVudHMKKyAqICh0ZW1wcmF0dXJlIG1vc3RseSkgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSBhIHBvd2VyIGRldGVjdG9yLgorICoKKyAqIEl0J3Mgb25seSB1c2VkIG9uIFJGNTExMSBhbmQgUkY1MTEyLCBsYXRlciBSRiBjaGlwcyBzZWVtIHRvIGhhdmUKKyAqIGF1dG8gYWRqdXN0bWVudCBvbiBodyAtbm90aWNlIHRoZXkgaGF2ZSBhIG11Y2ggc21hbGxlciBCQU5LIDcgYW5kCisgKiBubyBnYWluIG9wdGltaXphdGlvbiBsYWRkZXItLgorICoKKyAqIEZvciBtb3JlIGluZm9zIGNoZWNrIG91dCB0aGlzIHBhdGVudCBkb2MKKyAqIGh0dHA6Ly93d3cuZnJlZXBhdGVudHNvbmxpbmUuY29tLzc0MDA2OTEuaHRtbAorICoKKyAqIFRoaXMgcGFwZXIgZGVzY3JpYmVzIHBvd2VyIGRyb3BzIGFzIHNlZW4gb24gdGhlIHJlY2VpdmVyIGR1ZSB0bworICogcHJvYmUgcGFja2V0cworICogaHR0cDovL3d3dy5jbnJpLmRpdC5pZS9wdWJsaWNhdGlvbnMvSUNUMDglMjAtJTIwUHJhY3RpY2FsJTIwSXNzdWVzCisgKiAlMjBvZiUyMFBvd2VyJTIwQ29udHJvbC5wZGYKKyAqCisgKiBBbmQgdGhpcyBpcyB0aGUgTWFkV2lGaSBidWcgZW50cnkgcmVsYXRlZCB0byB0aGUgYWJvdmUKKyAqIGh0dHA6Ly9tYWR3aWZpLXByb2plY3Qub3JnL3RpY2tldC8xNjU5CisgKiB3aXRoIHZhcmlvdXMgbWVhc3VyZW1lbnRzIGFuZCBkaWFncmFtcworICoKKyAqIFRPRE86IERlYWwgd2l0aCBwb3dlciBkcm9wcyBkdWUgdG8gcHJvYmVzIGJ5IHNldHRpbmcgYW4gYXByb3ByaWF0ZQorICogdHggcG93ZXIgb24gdGhlIHByb2JlIHBhY2tldHMgISBNYWtlIHRoaXMgcGFydCBvZiB0aGUgY2FsaWJyYXRpb24gcHJvY2Vzcy4KKyAqLworCisvKiBJbml0aWFsaXplIGFoX2dhaW4gZHVycmluZyBhdHRhY2ggKi8KK2ludCBhdGg1a19od19yZmdhaW5fb3B0X2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBnYWluIG9wdGltaXphdGlvbiB2YWx1ZXMgKi8KKwlzd2l0Y2ggKGFoLT5haF9yYWRpbykgeworCWNhc2UgQVI1S19SRjUxMTE6CisJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPSByZmdhaW5fb3B0XzUxMTEuZ29fZGVmYXVsdDsKKwkJYWgtPmFoX2dhaW4uZ19sb3cgPSAyMDsKKwkJYWgtPmFoX2dhaW4uZ19oaWdoID0gMzU7CisJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjUxMTI6CisJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPSByZmdhaW5fb3B0XzUxMTIuZ29fZGVmYXVsdDsKKwkJYWgtPmFoX2dhaW4uZ19sb3cgPSAyMDsKKwkJYWgtPmFoX2dhaW4uZ19oaWdoID0gODU7CisJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTY2hlZHVsZSBhIGdhaW4gcHJvYmUgY2hlY2sgb24gdGhlIG5leHQgdHJhbnNtaXRlZCBwYWNrZXQuCisgKiBUaGF0IG1lYW5zIG91ciBuZXh0IHBhY2tldCBpcyBnb2luZyB0byBiZSBzZW50IHdpdGggbG93ZXIKKyAqIHR4IHBvd2VyIGFuZCBhIFBlYWsgdG8gQXZlcmFnZSBQb3dlciBEZXRlY3RvciAoUEFQRCkgd2lsbCB0cnkKKyAqIHRvIG1lYXN1cmUgdGhlIGdhaW4uCisgKgorICogVE9ETzogVXNlIHByb3BwZXIgdHggcG93ZXIgc2V0dGluZyBmb3IgdGhlIHByb2JlIHBhY2tldCBzbworICogdGhhdCB3ZSBkb24ndCBvYnNlcnZlIGEgc2VyaW91cyBwb3dlciBkcm9wIG9uIHRoZSByZWNlaXZlcgorICoKKyAqIFhYWDogIEhvdyBhYm91dCBmb3JjaW5nIGEgdHggcGFja2V0IChieXBhc3NpbmcgUENVIGFyYml0cmF0b3IgZXRjKQorICoganVzdCBhZnRlciB3ZSBlbmFibGUgdGhlIHByb2JlIHNvIHRoYXQgd2UgZG9uJ3QgbWVzcyB3aXRoCisgKiBzdGFuZGFyZCB0cmFmZmljID8gTWF5YmUgaXQncyB0aW1lIHRvIHVzZSBzdyBpbnRlcnJ1cHRzIGFuZAorICogYSBwcm9iZSB0YXNrbGV0ICEhIQorICovCitzdGF0aWMgdm9pZCBhdGg1a19od19yZXF1ZXN0X3JmZ2Fpbl9wcm9iZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCisJLyogU2tpcCBpZiBnYWluIGNhbGlicmF0aW9uIGlzIGluYWN0aXZlIG9yCisJICogd2UgYWxyZWFkeSBoYW5kbGUgYSBwcm9iZSByZXF1ZXN0ICovCisJaWYgKGFoLT5haF9nYWluLmdfc3RhdGUgIT0gQVI1S19SRkdBSU5fQUNUSVZFKQorCQlyZXR1cm47CisKKwkvKiBTZW5kIHRoZSBwYWNrZXQgd2l0aCAyZEIgYmVsb3cgbWF4IHBvd2VyIGFzCisJICogcGF0ZW50IGRvYyBzdWdnZXN0ICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhwb3dlci50eHBfbWF4X3B3ciAtIDQsCisJCQlBUjVLX1BIWV9QQVBEX1BST0JFX1RYUE9XRVIpIHwKKwkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhfTkVYVCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7CisKKwlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQ7CisKK30KKworLyogQ2FsY3VsYXRlIGdhaW5fRiBtZWFzdXJlbWVudCBjb3JyZWN0aW9uCisgKiBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGVwIGZvciBSRjUxMTIgcmV2LiAyICovCitzdGF0aWMgdTMyIGF0aDVrX2h3X3JmX2dhaW5mX2NvcnIoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAl1MzIgbWl4LCBzdGVwOwogCXUzMiAqcmY7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbzsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCAqZ19zdGVwOworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmX3JlZ3M7CisKKwkvKiBPbmx5IFJGNTExMiBSZXYuIDIgc3VwcG9ydHMgaXQgKi8KKwlpZiAoKGFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTExMikgfHwKKwkoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPD0gQVI1S19TUkVWX1JBRF81MTEyQSkpCisJCXJldHVybiAwOworCisJZ28gPSAmcmZnYWluX29wdF81MTEyOworCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTJhOworCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTJhKTsKKworCWdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKIAogCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMTY1LDExICsyMjEsMTUgQEAKIAlyZiA9IGFoLT5haF9yZl9iYW5rczsKIAlhaC0+YWhfZ2Fpbi5nX2ZfY29yciA9IDA7CiAKLQlpZiAoYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLCAwLCAxLCAzNiwgMCwgZmFsc2UpICE9IDEpCisJLyogTm8gVkdBIChWYXJpYWJsZSBHYWluIEFtcGxpZmllcikgb3ZlcnJpZGUsIHNraXAgKi8KKwlpZiAoYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAwLCBBUjVLX1JGX01JWFZHQV9PVlIsIGZhbHNlKSAhPSAxKQogCQlyZXR1cm4gMDsKIAotCXN0ZXAgPSBhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDQsIDMyLCAwLCBmYWxzZSk7Ci0JbWl4ID0gYWgtPmFoX2dhaW4uZ19zdGVwLT5nb3NfcGFyYW1bMF07CisJLyogTWl4IGdhaW4gc3RlcHBpbmcgKi8KKwlzdGVwID0gYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAwLCBBUjVLX1JGX01JWEdBSU5fU1RFUCwgZmFsc2UpOworCisJLyogTWl4IGdhaW4gb3ZlcnJpZGUgKi8KKwltaXggPSBnX3N0ZXAtPmdvc19wYXJhbVswXTsKIAogCXN3aXRjaCAobWl4KSB7CiAJY2FzZSAzOgpAQCAtMTE4OSw5ICsyNDksMTQgQEAKIAlyZXR1cm4gYWgtPmFoX2dhaW4uZ19mX2NvcnI7CiB9CiAKLXN0YXRpYyBib29sIGF0aDVrX2h3X3JmcmVnc19nYWluX3JlYWRiYWNrKHN0cnVjdCBhdGg1a19odyAqYWgpCisvKiBDaGVjayBpZiBjdXJyZW50IGdhaW5fRiBtZWFzdXJlbWVudCBpcyBpbiB0aGUgcmFuZ2Ugb2Ygb3VyCisgKiBwb3dlciBkZXRlY3RvciB3aW5kb3dzLiBJZiB3ZSBnZXQgYSBtZWFzdXJlbWVudCBvdXRzaWRlIHJhbmdlCisgKiB3ZSBrbm93IGl0J3Mgbm90IGFjY3VyYXRlIChkZXRlY3RvcnMgY2FuJ3QgbWVhc3VyZSBhbnl0aGluZyBvdXRzaWRlCisgKiB0aGVpciBkZXRlY3Rpb24gd2luZG93KSBzbyB3ZSBtdXN0IGlnbm9yZSBpdCAqLworc3RhdGljIGJvb2wgYXRoNWtfaHdfcmZfY2hlY2tfZ2FpbmZfcmVhZGJhY2soc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQl1MzIgc3RlcCwgbWl4LCBsZXZlbFs0XTsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzOworCXUzMiBzdGVwLCBtaXhfb3ZyLCBsZXZlbFs0XTsKIAl1MzIgKnJmOwogCiAJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKQpAQCAtMTIwMCwyMyArMjY1LDMzIEBACiAJcmYgPSBhaC0+YWhfcmZfYmFua3M7CiAKIAlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7Ci0JCXN0ZXAgPSBhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDYsIDM3LCAwLAotCQkJCWZhbHNlKTsKKworCQlyZl9yZWdzID0gcmZfcmVnc181MTExOworCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTExKTsKKworCQlzdGVwID0gYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAwLCBBUjVLX1JGX1JGR0FJTl9TVEVQLAorCQkJZmFsc2UpOworCiAJCWxldmVsWzBdID0gMDsKLQkJbGV2ZWxbMV0gPSAoc3RlcCA9PSAweDNmKSA/IDB4MzIgOiBzdGVwICsgNDsKLQkJbGV2ZWxbMl0gPSAoc3RlcCAhPSAweDNmKSA/IDB4NDAgOiBsZXZlbFswXTsKLQkJbGV2ZWxbM10gPSBsZXZlbFsyXSArIDB4MzI7CisJCWxldmVsWzFdID0gKHN0ZXAgPT0gNjMpID8gNTAgOiBzdGVwICsgNDsKKwkJbGV2ZWxbMl0gPSAoc3RlcCAhPSA2MykgPyA2NCA6IGxldmVsWzBdOworCQlsZXZlbFszXSA9IGxldmVsWzJdICsgNTAgOwogCiAJCWFoLT5haF9nYWluLmdfaGlnaCA9IGxldmVsWzNdIC0KLQkJCShzdGVwID09IDB4M2YgPyBBUjVLX0dBSU5fRFlOX0FESlVTVF9ISV9NQVJHSU4gOiAtNSk7CisJCQkoc3RlcCA9PSA2MyA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTiA6IC01KTsKIAkJYWgtPmFoX2dhaW4uZ19sb3cgPSBsZXZlbFswXSArCi0JCQkoc3RlcCA9PSAweDNmID8gQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOIDogMCk7CisJCQkoc3RlcCA9PSA2MyA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0xPX01BUkdJTiA6IDApOwogCX0gZWxzZSB7Ci0JCW1peCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgMSwgMzYsIDAsCi0JCQkJZmFsc2UpOworCisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTI7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTIpOworCisJCW1peF9vdnIgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYVkdBX09WUiwKKwkJCWZhbHNlKTsKKwogCQlsZXZlbFswXSA9IGxldmVsWzJdID0gMDsKIAotCQlpZiAobWl4ID09IDEpIHsKKwkJaWYgKG1peF9vdnIgPT0gMSkgewogCQkJbGV2ZWxbMV0gPSBsZXZlbFszXSA9IDgzOwogCQl9IGVsc2UgewogCQkJbGV2ZWxbMV0gPSBsZXZlbFszXSA9IDEwNzsKQEAgLTEyMzAsOSArMzA1LDEyIEBACiAJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPD0gbGV2ZWxbM10pOwogfQogCi1zdGF0aWMgczMyIGF0aDVrX2h3X3JmcmVnc19nYWluX2FkanVzdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQorLyogUGVyZm9ybSBnYWluX0YgYWRqdXN0bWVudCBieSBjaG9vc2luZyB0aGUgcmlnaHQgc2V0CisgKiBvZiBwYXJhbWV0ZXJzIGZyb20gcmYgZ2FpbiBvcHRpbWl6YXRpb24gbGFkZGVyICovCitzdGF0aWMgczggYXRoNWtfaHdfcmZfZ2FpbmZfYWRqdXN0KHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CiAJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbzsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCAqZ19zdGVwOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKQEAgLTEyNDYsMzUgKzMyNCwzOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwogCiAJaWYgKGFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2hpZ2gpIHsKKworCQkvKiBSZWFjaGVkIG1heGltdW0gKi8KIAkJaWYgKGFoLT5haF9nYWluLmdfc3RlcF9pZHggPT0gMCkKIAkJCXJldHVybiAtMTsKKwogCQlmb3IgKGFoLT5haF9nYWluLmdfdGFyZ2V0ID0gYWgtPmFoX2dhaW4uZ19jdXJyZW50OwogCQkJCWFoLT5haF9nYWluLmdfdGFyZ2V0ID49ICBhaC0+YWhfZ2Fpbi5nX2hpZ2ggJiYKIAkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4ID4gMDsKLQkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkJCQkmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCisJCQkJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQogCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgLT0gMiAqCiAJCQkgICAgKGdvLT5nb19zdGVwWy0tKGFoLT5haF9nYWluLmdfc3RlcF9pZHgpXS5nb3NfZ2FpbiAtCi0JCQkgICAgYWgtPmFoX2dhaW4uZ19zdGVwLT5nb3NfZ2Fpbik7CisJCQkgICAgZ19zdGVwLT5nb3NfZ2Fpbik7CiAKIAkJcmV0ID0gMTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmIChhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPD0gYWgtPmFoX2dhaW4uZ19sb3cpIHsKKworCQkvKiBSZWFjaGVkIG1pbmltdW0gKi8KIAkJaWYgKGFoLT5haF9nYWluLmdfc3RlcF9pZHggPT0gKGdvLT5nb19zdGVwc19jb3VudCAtIDEpKQogCQkJcmV0dXJuIC0yOworCiAJCWZvciAoYWgtPmFoX2dhaW4uZ190YXJnZXQgPSBhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQ7CiAJCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgPD0gYWgtPmFoX2dhaW4uZ19sb3cgJiYKIAkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4IDwgZ28tPmdvX3N0ZXBzX2NvdW50LTE7Ci0JCQkJYWgtPmFoX2dhaW4uZ19zdGVwID0KLQkJCQkJJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQorCQkJCWdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XSkKIAkJCWFoLT5haF9nYWluLmdfdGFyZ2V0IC09IDIgKgogCQkJICAgIChnby0+Z29fc3RlcFsrK2FoLT5haF9nYWluLmdfc3RlcF9pZHhdLmdvc19nYWluIC0KLQkJCSAgICBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19nYWluKTsKKwkJCSAgICBnX3N0ZXAtPmdvc19nYWluKTsKIAogCQlyZXQgPSAyOwogCQlnb3RvIGRvbmU7CkBAIC0xMjg5LDM1MyArMzcxLDc4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJlYWQgRUVQUk9NIENhbGlicmF0aW9uIGRhdGEsIG1vZGlmeSBSRiBCYW5rcyBhbmQgSW5pdGlhbGl6ZSBSRjUxMTEKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjUxMTFfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCisvKiBNYWluIGNhbGxiYWNrIGZvciB0aGVybWFsIHJmIGdhaW4gY2FsaWJyYXRpb24gZW5naW5lCisgKiBDaGVjayBmb3IgYSBuZXcgZ2FpbiByZWFkaW5nIGFuZCBzY2hlZHVsZSBhbiBhZGp1c3RtZW50CisgKiBpZiBuZWVkZWQuCisgKgorICogVE9ETzogVXNlIHN3IGludGVycnVwdCB0byBzY2hlZHVsZSByZXNldCBpZiBnYWluX0YgbmVlZHMKKyAqIGFkanVzdG1lbnQgKi8KK2VudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogeworCXUzMiBkYXRhLCB0eXBlOwogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiAqcmY7Ci0JY29uc3QgdW5zaWduZWQgaW50IHJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTExKTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7Ci0JdTMyIGVlX21vZGU7CiAKLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKKwlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0JcmYgPSBhaC0+YWhfcmZfYmFua3M7CisJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMIHx8CisJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9PSBBUjVLX1JGR0FJTl9JTkFDVElWRSkKKwkJcmV0dXJuIEFSNUtfUkZHQUlOX0lOQUNUSVZFOwogCi0JLyogQ29weSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZW0gKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChyZnJlZ3NfNTExMVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTExX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJLyogTm8gY2hlY2sgcmVxdWVzdGVkLCBlaXRoZXIgZW5naW5lIGlzIGluYWN0aXZlCisJICogb3IgYW4gYWRqdXN0bWVudCBpcyBhbHJlYWR5IHJlcXVlc3RlZCAqLworCWlmIChhaC0+YWhfZ2Fpbi5nX3N0YXRlICE9IEFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVEKQorCQlnb3RvIGRvbmU7CisKKwkvKiBSZWFkIHRoZSBQQVBEIChQZWFrIHRvIEF2ZXJhZ2UgUG93ZXIgRGV0ZWN0b3IpCisJICogcmVnaXN0ZXIgKi8KKwlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1BBUERfUFJPQkUpOworCisJLyogTm8gcHJvYmUgaXMgc2NoZWR1bGVkLCByZWFkIGdhaW5fRiBtZWFzdXJlbWVudCAqLworCWlmICghKGRhdGEgJiBBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQpKSB7CisJCWFoLT5haF9nYWluLmdfY3VycmVudCA9IGRhdGEgPj4gQVI1S19QSFlfUEFQRF9QUk9CRV9HQUlORl9TOworCQl0eXBlID0gQVI1S19SRUdfTVMoZGF0YSwgQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFKTsKKworCQkvKiBJZiB0eCBwYWNrZXQgaXMgQ0NLIGNvcnJlY3QgdGhlIGdhaW5fRiBtZWFzdXJlbWVudAorCQkgKiBieSBjY2sgb2ZkbSBnYWluIGRlbHRhICovCisJCWlmICh0eXBlID09IEFSNUtfUEhZX1BBUERfUFJPQkVfVFlQRV9DQ0spIHsKKwkJCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzUxMTJBKQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPQorCQkJCQllZS0+ZWVfY2NrX29mZG1fZ2Fpbl9kZWx0YTsKKwkJCWVsc2UKKwkJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgKz0KKwkJCQkJQVI1S19HQUlOX0NDS19QUk9CRV9DT1JSOwogCQl9CiAKLQkJaWYgKGJhbmsgIT0gcmZyZWdzXzUxMTFbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmcmVnc181MTExW2ldLnJmX2Jhbms7Ci0JCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKKwkJLyogRnVydGhlciBjb3JyZWN0IGdhaW5fRiBtZWFzdXJlbWVudCBmb3IKKwkJICogUkY1MTEyQSByYWRpb3MgKi8KKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJCWF0aDVrX2h3X3JmX2dhaW5mX2NvcnIoYWgpOworCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0KKwkJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPj0gYWgtPmFoX2dhaW4uZ19mX2NvcnIgPworCQkJCShhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQtYWgtPmFoX2dhaW4uZ19mX2NvcnIpIDoKKwkJCQkwOwogCQl9CiAKLQkJcmZbaV0gPSByZnJlZ3NfNTExMVtpXS5yZl92YWx1ZVttb2RlXTsKKwkJLyogQ2hlY2sgaWYgbWVhc3VyZW1lbnQgaXMgb2sgYW5kIGlmIHdlIG5lZWQKKwkJICogdG8gYWRqdXN0IGdhaW4sIHNjaGVkdWxlIGEgZ2FpbiBhZGp1c3RtZW50LAorCQkgKiBlbHNlIHN3aXRjaCBiYWNrIHRvIHRoZSBhY2l2ZSBzdGF0ZSAqLworCQlpZiAoYXRoNWtfaHdfcmZfY2hlY2tfZ2FpbmZfcmVhZGJhY2soYWgpICYmCisJCUFSNUtfR0FJTl9DSEVDS19BREpVU1QoJmFoLT5haF9nYWluKSAmJgorCQlhdGg1a19od19yZl9nYWluZl9hZGp1c3QoYWgpKSB7CisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fTkVFRF9DSEFOR0U7CisJCX0gZWxzZSB7CisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCQl9CiAJfQogCi0JLyogTW9kaWZ5IGJhbmsgMCAqLwotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfMkdIWikgewotCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKLQkJZWxzZQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwotCQlvYmRiID0gMDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFswXSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDExOSwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFswXSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDEyMiwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlvYmRiID0gMTsKLQkvKiBNb2RpZnkgYmFuayA2ICovCi0JfSBlbHNlIHsKLQkJLyogRm9yIDExYSwgVHVyYm8gYW5kIFhSICovCi0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJb2JkYiA9CSBjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NzI1ID8gMyA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTUwMCA/IDIgOgotCQkJKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDUyNjAgPyAxIDoKLQkJCSAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPiA0MDAwID8gMCA6IC0xKSkpOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9wd2RfODQsIDEsIDUxLCAzLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9wd2RfOTAsIDEsIDQ1LCAzLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJIWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDk1LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDQsIDk2LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwgb2JkYiA+PSAwID8KLQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSA6IDAsIDMsIDEwNCwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sIG9iZGIgPj0gMCA/Ci0JCQllZS0+ZWVfZGJbZWVfbW9kZV1bb2JkYl0gOiAwLCAzLCAxMDcsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE1vZGlmeSBiYW5rIDcgKi8KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwKLQkJCWVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sIDYsIDI5LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwKLQkJCWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDQsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJQVI1S19SRUdfV0FJVChpKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZltpXSwgcmZyZWdzXzUxMTFbaV0ucmZfcmVnaXN0ZXIpOwotCX0KLQotCXJldHVybiAwOworZG9uZToKKwlyZXR1cm4gYWgtPmFoX2dhaW4uZ19zdGF0ZTsKIH0KIAotLyoKLSAqIFJlYWQgRUVQUk9NIENhbGlicmF0aW9uIGRhdGEsIG1vZGlmeSBSRiBCYW5rcyBhbmQgSW5pdGlhbGl6ZSBSRjUxMTIKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjUxMTJfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiAqcmZfaW5pOwotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiAqcmY7Ci0JdW5zaWduZWQgaW50IHJmX3NpemUsIGk7Ci0JaW50IG9iZGIgPSAtMSwgYmFuayA9IC0xOwotCXUzMiBlZV9tb2RlOwotCi0JQVI1S19BU1NFUlRfRU5UUlkobW9kZSwgQVI1S19NT0RFX01BWCk7Ci0KLQlyZiA9IGFoLT5haF9yZl9iYW5rczsKLQotCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzIxMTJBCi0JCSYmICF0ZXN0X2JpdChBUjVLX01PREVfMTFBLCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKSkgewotCQlyZl9pbmkgPSByZnJlZ3NfMjExMmE7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyYSk7Ci0JCWlmIChtb2RlIDwgMikgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgY2hhbm5lbCBtb2RlOiAlaVxuIiwKLQkJCQkgIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbW9kZSA9IG1vZGUgLSAyOyAvKm5vIGEvdHVyYm9hIG1vZGVzIGZvciAyMTEyKi8KLQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKLQkJcmZfaW5pID0gcmZyZWdzXzUxMTJhOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTExMmEpOwotCX0gZWxzZSB7Ci0JCXJmX2luaSA9IHJmcmVnc181MTEyOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTExMik7Ci0JfQotCi0JLyogQ29weSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZW0gKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChyZl9pbmlbaV0ucmZfYmFuayA+PSBBUjVLX1JGNTExMl9JTklfUkZfTUFYX0JBTktTKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBiYW5rXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGJhbmsgIT0gcmZfaW5pW2ldLnJmX2JhbmspIHsKLQkJCWJhbmsgPSByZl9pbmlbaV0ucmZfYmFuazsKLQkJCWFoLT5haF9vZmZzZXRbYmFua10gPSBpOwotCQl9Ci0KLQkJcmZbaV0gPSByZl9pbmlbaV0ucmZfdmFsdWVbbW9kZV07Ci0JfQotCi0JLyogTW9kaWZ5IGJhbmsgNiAqLwotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfMkdIWikgewotCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pCi0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7Ci0JCWVsc2UKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKLQkJb2JkYiA9IDA7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLCAzLCAyODcsIDAsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLCAzLCAyOTAsIDAsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJLyogRm9yIDExYSwgVHVyYm8gYW5kIFhSICovCi0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJb2JkYiA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKLQkJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgotCQkJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7Ci0KLQkJaWYgKG9iZGIgPT0gLTEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI3OSwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI4MiwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JICAgIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDIsIDI3MCwgMCwgdHJ1ZSk7Ci0JYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCSAgICBlZS0+ZWVfeF9nYWluW2VlX21vZGVdLCAyLCAyNTcsIDAsIHRydWUpOwotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQllZS0+ZWVfeHBkW2VlX21vZGVdLCAxLCAzMDIsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE1vZGlmeSBiYW5rIDcgKi8KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwKLQkJCWVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sIDYsIDE0LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBXcml0ZSBSRiB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZfc2l6ZTsgaSsrKQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmW2ldLCByZl9pbmlbaV0ucmZfcmVnaXN0ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIFJGNTQxMy81NDE0IGFuZCBmdXR1cmUgY2hpcHMKLSAqICh1bnRpbCB3ZSBjb21lIHVwIHdpdGggYSBiZXR0ZXIgc29sdXRpb24pCi0gKi8KLXN0YXRpYyBpbnQgYXRoNWtfaHdfcmY1NDEzX3JmcmVncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCBtb2RlKQotewotCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgKnJmX2luaTsKLQl1MzIgKnJmOwotCXVuc2lnbmVkIGludCByZl9zaXplLCBpOwotCWludCBiYW5rID0gLTE7Ci0KLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKLQotCXJmID0gYWgtPmFoX3JmX2JhbmtzOwotCi0Jc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKLQljYXNlIEFSNUtfUkY1NDEzOgotCQlyZl9pbmkgPSByZnJlZ3NfNTQxMzsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzU0MTMpOwotCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDEzOgotCQlyZl9pbmkgPSByZnJlZ3NfMjQxMzsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzI0MTMpOwotCi0JCWlmIChtb2RlIDwgMikgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLCBtb2RlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbW9kZSA9IG1vZGUgLSAyOwotCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDI1OgotCQlyZl9pbmkgPSByZnJlZ3NfMjQyNTsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzI0MjUpOwotCi0JCWlmIChtb2RlIDwgMikgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLCBtb2RlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyogTWFwIGIgdG8gZyAqLwotCQlpZiAobW9kZSA9PSAyKQotCQkJbW9kZSA9IDA7Ci0JCWVsc2UKLQkJCW1vZGUgPSBtb2RlIC0gMzsKLQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmX2luaVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTEyX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoYmFuayAhPSByZl9pbmlbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmX2luaVtpXS5yZl9iYW5rOwotCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7Ci0JCX0KLQotCQlyZltpXSA9IHJmX2luaVtpXS5yZl92YWx1ZVttb2RlXTsKLQl9Ci0KLQkvKgotCSAqIEFmdGVyIGNvbXBhaXJpbmcgZHVtcHMgZnJvbSBkaWZmZXJlbnQgY2FyZHMKLQkgKiB3ZSBnZXQgdGhlIHNhbWUgUkZfQlVGRkVSIHNldHRpbmdzIChkaWZmIHJldHVybnMKLQkgKiAwIGxpbmVzKS4gSXQgc2VlbXMgdGhhdCBSRl9CVUZGRVIgc2V0dGluZ3MgYXJlIHN0YXRpYwotCSAqIGFuZCBhcmUgd3JpdHRlbiB1bm1vZGlmaWVkIChubyBFRVBST00gc3R1ZmYKLQkgKiBpcyB1c2VkIGJlY2F1c2UgY2FsaWJyYXRpb24gZGF0YSB3b3VsZCBiZQotCSAqIGRpZmZlcmVudCBiZXR3ZWVuIGRpZmZlcmVudCBjYXJkcyBhbmQgd291bGQgcmVzdWx0Ci0JICogZGlmZmVyZW50IFJGX0JVRkZFUiBzZXR0aW5ncykKLQkgKi8KLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmZbaV0sIHJmX2luaVtpXS5yZl9yZWdpc3Rlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgUkYKLSAqLwotaW50IGF0aDVrX2h3X3JmcmVncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCi0JCXVuc2lnbmVkIGludCBtb2RlKQotewotCWludCAoKmZ1bmMpKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50KTsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKLQljYXNlIEFSNUtfUkY1MTExOgotCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IHNpemVvZihyZnJlZ3NfNTExMSk7Ci0JCWZ1bmMgPSBhdGg1a19od19yZjUxMTFfcmZyZWdzOwotCQlicmVhazsKLQljYXNlIEFSNUtfUkY1MTEyOgotCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkKLQkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTEyYSk7Ci0JCWVsc2UKLQkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTEyKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTExMl9yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjU0MTM6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181NDEzKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MTM6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc18yNDEzKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MjU6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc18yNDI1KTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgewotCQkvKiBYWFggZG8gZXh0cmEgY2hlY2tzPyAqLwotCQlhaC0+YWhfcmZfYmFua3MgPSBrbWFsbG9jKGFoLT5haF9yZl9iYW5rc19zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCXJldCA9IGZ1bmMoYWgsIGNoYW5uZWwsIG1vZGUpOwotCWlmICghcmV0KQotCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX0lOQUNUSVZFOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGF0aDVrX2h3X3JmZ2FpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgZnJlcSkKKy8qIFdyaXRlIGluaXRpYWwgcmYgZ2FpbiB0YWJsZSB0byBzZXQgdGhlIFJGIHNlbnNpdGl2aXR5CisgKiB0aGlzIG9uZSB3b3JrcyBvbiBhbGwgUkYgY2hpcHMgYW5kIGhhcyBub3RoaW5nIHRvIGRvCisgKiB3aXRoIGdhaW5fRiBjYWxpYnJhdGlvbiAqLworaW50IGF0aDVrX2h3X3JmZ2Fpbl9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKQogewogCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluICphdGg1a19yZmc7CiAJdW5zaWduZWQgaW50IGksIHNpemU7CkBAIC0xNjQ5LDE5ICs0NTYsMjIgQEAKIAkJYXRoNWtfcmZnID0gcmZnYWluXzUxMTI7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl81MTEyKTsKIAkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQxMzoKKwkJYXRoNWtfcmZnID0gcmZnYWluXzI0MTM7CisJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNjoKKwkJYXRoNWtfcmZnID0gcmZnYWluXzIzMTY7CisJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yMzE2KTsKKwkJYnJlYWs7CiAJY2FzZSBBUjVLX1JGNTQxMzoKIAkJYXRoNWtfcmZnID0gcmZnYWluXzU0MTM7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl81NDEzKTsKIAkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQxMzoKLQkJYXRoNWtfcmZnID0gcmZnYWluXzI0MTM7Ci0JCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDEzKTsKLQkJZnJlcSA9IDA7IC8qIG9ubHkgMkdoeiAqLwotCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE3OgogCWNhc2UgQVI1S19SRjI0MjU6CiAJCWF0aDVrX3JmZyA9IHJmZ2Fpbl8yNDI1OwogCQlzaXplID0gQVJSQVlfU0laRShyZmdhaW5fMjQyNSk7Ci0JCWZyZXEgPSAwOyAvKiBvbmx5IDJHaHogKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjg0LDczICs0OTQsMzI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWVudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dldF9yZl9nYWluKHN0cnVjdCBhdGg1a19odyAqYWgpCisKKworLyoqKioqKioqKioqKioqKioqKioqXAorKiBSRiBSZWdpc3RlcnMgc2V0dXAgKgorXCoqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisgKiBTZXR1cCBSRiByZWdpc3RlcnMgYnkgd3JpdGluZyByZiBidWZmZXIgb24gaHcKKyAqLworaW50IGF0aDVrX2h3X3JmcmVnc19pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJdW5zaWduZWQgaW50IG1vZGUpCiB7Ci0JdTMyIGRhdGEsIHR5cGU7CisJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVnczsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyICppbmlfcmZiOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCAqZ28gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTggZWVfbW9kZSA9IDA7CisJdTMyICpyZmI7CisJaW50IGksIG9iZGIgPSAtMSwgYmFuayA9IC0xOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQotCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCB8fCAhYWgtPmFoX2dhaW4uZ19hY3RpdmUgfHwKLQkJCWFoLT5haF92ZXJzaW9uIDw9IEFSNUtfQVI1MjExKQotCQlyZXR1cm4gQVI1S19SRkdBSU5fSU5BQ1RJVkU7Ci0KLQlpZiAoYWgtPmFoX3JmX2dhaW4gIT0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQpCi0JCWdvdG8gZG9uZTsKLQotCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7Ci0KLQlpZiAoIShkYXRhICYgQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhUKSkgewotCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPSBkYXRhID4+IEFSNUtfUEhZX1BBUERfUFJPQkVfR0FJTkZfUzsKLQkJdHlwZSA9IEFSNUtfUkVHX01TKGRhdGEsIEFSNUtfUEhZX1BBUERfUFJPQkVfVFlQRSk7Ci0KLQkJaWYgKHR5cGUgPT0gQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFX0NDSykKLQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlI7Ci0KLQkJaWYgKGFoLT5haF9yYWRpbyA+PSBBUjVLX1JGNTExMikgewotCQkJYXRoNWtfaHdfcmZyZWdzX2dhaW5mX2NvcnIoYWgpOwotCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0KLQkJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPj0gYWgtPmFoX2dhaW4uZ19mX2NvcnIgPwotCQkJCShhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQtYWgtPmFoX2dhaW4uZ19mX2NvcnIpIDoKLQkJCQkwOwotCQl9Ci0KLQkJaWYgKGF0aDVrX2h3X3JmcmVnc19nYWluX3JlYWRiYWNrKGFoKSAmJgotCQkJCUFSNUtfR0FJTl9DSEVDS19BREpVU1QoJmFoLT5haF9nYWluKSAmJgotCQkJCWF0aDVrX2h3X3JmcmVnc19nYWluX2FkanVzdChhaCkpCi0JCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFOwotCX0KLQotZG9uZToKLQlyZXR1cm4gYWgtPmFoX3JmX2dhaW47Ci19Ci0KLWludCBhdGg1a19od19zZXRfcmZnYWluX29wdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQotewotCS8qIEluaXRpYWxpemUgdGhlIGdhaW4gb3B0aW1pemF0aW9uIHZhbHVlcyAqLwogCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CiAJY2FzZSBBUjVLX1JGNTExMToKLQkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMS5nb19kZWZhdWx0OwotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkgICAgJnJmZ2Fpbl9vcHRfNTExMS5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwotCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOwotCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSAzNTsKLQkJYWgtPmFoX2dhaW4uZ19hY3RpdmUgPSAxOworCQlyZl9yZWdzID0gcmZfcmVnc181MTExOworCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTExKTsKKwkJaW5pX3JmYiA9IHJmYl81MTExOworCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzUxMTEpOworCQlnbyA9ICZyZmdhaW5fb3B0XzUxMTE7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19SRjUxMTI6Ci0JCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPSByZmdhaW5fb3B0XzUxMTIuZ29fZGVmYXVsdDsKLQkJYWgtPmFoX2dhaW4uZ19zdGVwID0KLQkJICAgICZyZmdhaW5fb3B0XzUxMTIuZ29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKLQkJYWgtPmFoX2dhaW4uZ19sb3cgPSAyMDsKLQkJYWgtPmFoX2dhaW4uZ19oaWdoID0gODU7Ci0JCWFoLT5haF9nYWluLmdfYWN0aXZlID0gMTsKKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTJhOworCQkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMmEpOworCQkJaW5pX3JmYiA9IHJmYl81MTEyYTsKKwkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTExMmEpOworCQl9IGVsc2UgeworCQkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMjsKKwkJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTIpOworCQkJaW5pX3JmYiA9IHJmYl81MTEyOworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81MTEyKTsKKwkJfQorCQlnbyA9ICZyZmdhaW5fb3B0XzUxMTI7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MTM6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzI0MTM7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzI0MTMpOworCQlpbmlfcmZiID0gcmZiXzI0MTM7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjQxMyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTY6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzIzMTY7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzIzMTYpOworCQlpbmlfcmZiID0gcmZiXzIzMTY7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjMxNik7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjU0MTM6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzU0MTM7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzU0MTMpOworCQlpbmlfcmZiID0gcmZiXzU0MTM7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTQxMyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTc6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzI0MjU7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzI0MjUpOworCQlpbmlfcmZiID0gcmZiXzIzMTc7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjMxNyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MjU6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzI0MjU7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzI0MjUpOworCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSMjQxNykgeworCQkJaW5pX3JmYiA9IHJmYl8yNDI1OworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDI1KTsKKwkJfSBlbHNlIHsKKwkJCWluaV9yZmIgPSByZmJfMjQxNzsKKwkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjQxNyk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogSWYgaXQncyB0aGUgZmlyc3QgdGltZSB3ZSBzZXQgcmYgYnVmZmVyLCBhbGxvY2F0ZQorCSAqIGFoLT5haF9yZl9iYW5rcyBiYXNlZCBvbiBhaC0+YWhfcmZfYmFua3Nfc2l6ZQorCSAqIHdlIHNldCBhYm92ZSAqLworCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgeworCQlhaC0+YWhfcmZfYmFua3MgPSBrbWFsbG9jKHNpemVvZih1MzIpICogYWgtPmFoX3JmX2JhbmtzX3NpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpIHsKKwkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJLyogQ29weSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZW0gKi8KKwlyZmIgPSBhaC0+YWhfcmZfYmFua3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX2JhbmtzX3NpemU7IGkrKykgeworCQlpZiAoaW5pX3JmYltpXS5yZmJfYmFuayA+PSBBUjVLX01BWF9SRl9CQU5LUykgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIEJhbmsgY2hhbmdlZCwgd3JpdGUgZG93biB0aGUgb2Zmc2V0ICovCisJCWlmIChiYW5rICE9IGluaV9yZmJbaV0ucmZiX2JhbmspIHsKKwkJCWJhbmsgPSBpbmlfcmZiW2ldLnJmYl9iYW5rOworCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7CisJCX0KKworCQlyZmJbaV0gPSBpbmlfcmZiW2ldLnJmYl9tb2RlX2RhdGFbbW9kZV07CisJfQorCisJLyogU2V0IE91dHB1dCBhbmQgRHJpdmVyIGJpYXMgY3VycmVudCAoT0IvREIpICovCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7CisKKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spCisJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUI7CisJCWVsc2UKKwkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKKworCQkvKiBGb3IgUkY1MTFYL1JGMjExWCBjb21iaW5hdGlvbiB3ZQorCQkgKiB1c2UgYl9PQiBhbmQgYl9EQiBwYXJhbWV0ZXJzIHN0b3JlZAorCQkgKiBpbiBlZXByb20gb24gZWUtPmVlX29iW2VlX21vZGVdWzBdCisJCSAqCisJCSAqIEZvciBhbGwgb3RoZXIgY2hpcHMgd2UgdXNlIE9CL0RCIGZvciAyR2h6CisJCSAqIHN0b3JlZCBpbiB0aGUgYi9nIG1vZGFsIHNlY3Rpb24ganVzdCBsaWtlCisJCSAqIDgwMi4xMWEgb24gZWUtPmVlX29iW2VlX21vZGVdWzFdICovCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSkKKwkJCW9iZGIgPSAwOworCQllbHNlCisJCQlvYmRiID0gMTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfT0JfMkdIWiwgdHJ1ZSk7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfZGJbZWVfbW9kZV1bb2JkYl0sCisJCQkJCQlBUjVLX1JGX0RCXzJHSFosIHRydWUpOworCisJLyogUkY1MTExIGFsd2F5cyBuZWVkcyBPQi9EQiBmb3IgNUdIeiwgZXZlbiBpZiB3ZSB1c2UgMkdIeiAqLworCX0gZWxzZSBpZiAoKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKSB8fAorCQkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkpIHsKKworCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgd2UgbmVlZCB0byBjaG9vc2UKKwkJICogT0IvREIgYmFzZWQgb24gZnJlcXVlbmN5IHJhbmdlICovCisJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKKwkJb2JkYiA9CSBjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NzI1ID8gMyA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTUwMCA/IDIgOgorCQkJKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDUyNjAgPyAxIDoKKwkJCSAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPiA0MDAwID8gMCA6IC0xKSkpOworCisJCWlmIChvYmRiIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9PQl81R0haLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfREJfNUdIWiwgdHJ1ZSk7CisJfQorCisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOworCisJLyogQmFuayBNb2RpZmljYXRpb25zIChjaGlwLXNwZWNpZmljKSAqLworCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHsKKworCQkvKiBTZXQgZ2Fpbl9GIHNldHRpbmdzIGFjY29yZGluZyB0byBjdXJyZW50IHN0ZXAgKi8KKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSB7CisKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0ZSQU1FX0NUTCwKKwkJCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsCisJCQkJCWdfc3RlcC0+Z29zX3BhcmFtWzBdKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsxXSwKKwkJCQkJCQlBUjVLX1JGX1BXRF85MCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bMl0sCisJCQkJCQkJQVI1S19SRl9QV0RfODQsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzNdLAorCQkJCQkJQVI1S19SRl9SRkdBSU5fU0VMLCB0cnVlKTsKKworCQkJLyogV2UgcHJvZ3JhbW1lZCBnYWluX0YgcGFyYW1ldGVycywgc3dpdGNoIGJhY2sKKwkJCSAqIHRvIGFjdGl2ZSBzdGF0ZSAqLworCQkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKworCQl9CisKKwkJLyogQmFuayA2Lzcgc2V0dXAgKi8KKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsICFlZS0+ZWVfeHBkW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QV0RfWFBELCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1hQRF9HQUlOLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX0dBSU5fSSwgdHJ1ZSk7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfeHBkW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QTE9fU0VMLCB0cnVlKTsKKworCQkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgY2hhbm5lbCBzdXBwb3J0ICovCisJfQorCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgeworCisJCS8qIFNldCBnYWluX0Ygc2V0dGluZ3MgYWNjb3JkaW5nIHRvIGN1cnJlbnQgc3RlcCAqLworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVswXSwKKwkJCQkJCUFSNUtfUkZfTUlYR0FJTl9PVlIsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzFdLAorCQkJCQkJQVI1S19SRl9QV0RfMTM4LCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsyXSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzNywgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bM10sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzYsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzRdLAorCQkJCQkJQVI1S19SRl9QV0RfMTMyLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVs1XSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzMSwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bNl0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzAsIHRydWUpOworCisJCQkvKiBXZSBwcm9ncmFtbWVkIGdhaW5fRiBwYXJhbWV0ZXJzLCBzd2l0Y2ggYmFjaworCQkJICogdG8gYWN0aXZlIHN0YXRlICovCisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCQl9CisKKwkJLyogQmFuayA2Lzcgc2V0dXAgKi8KKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1hQRF9TRUwsIHRydWUpOworCisJCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJCS8qIFJldi4gMSBzdXBwb3J0cyBvbmx5IG9uZSB4cGQgKi8KKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1hQRF9HQUlOLCB0cnVlKTsKKworCQl9IGVsc2UgeworCQkJLyogVE9ETzogU2V0IGhpZ2ggYW5kIGxvdyBnYWluIGJpdHMgKi8KKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BEX0dBSU5fTE8sIHRydWUpOworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfUERfR0FJTl9ISSwgdHJ1ZSk7CisKKwkJCS8qIExvd2VyIHN5bnRoIHZvbHRhZ2Ugb24gUmV2IDIgKi8KKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9ISUdIX1ZDX0NQLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX01JRF9WQ19DUCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9MT1dfVkNfQ1AsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCisJCQkJCUFSNUtfUkZfUFVTSF9VUCwgdHJ1ZSk7CisKKwkJCS8qIERlY3JlYXNlIHBvd2VyIGNvbnN1bXB0aW9uIG9uIDUyMTMrIEJhc2VCYW5kICovCisJCQlpZiAoYWgtPmFoX3BoeV9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUEhZXzUyMTJBKSB7CisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QQUQyR05ELCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfWEIyX0xWTCwgdHJ1ZSk7CisKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1hCNV9MVkwsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QV0RfMTY3LCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfUFdEXzE2NiwgdHJ1ZSk7CisJCQl9CisJCX0KKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX0dBSU5fSSwgdHJ1ZSk7CisKKwkJLyogVE9ETzogSGFsZi9xdWFydGVyIGNoYW5uZWwgc3VwcG9ydCAqLworCisJfQorCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMyAmJgorCWNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLCBBUjVLX1JGX0RFUkJZX0NIQU5fU0VMX01PREUsCisJCQkJCQkJCQl0cnVlKTsKKworCQkvKiBTZXQgb3B0aW11bSB2YWx1ZSBmb3IgZWFybHkgcmV2aXNpb25zIChvbiBwY2ktZSBjaGlwcykgKi8KKwkJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1NDI0ICYmCisJCWFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjU0MTMpCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGF0aDVrX2h3X2JpdHN3YXAoNiwgMyksCisJCQkJCQlBUjVLX1JGX1BXRF9JQ0xPQlVGXzJHLCB0cnVlKTsKKworCX0KKworCS8qIFdyaXRlIFJGIGJhbmtzIG9uIGh3ICovCisJZm9yIChpID0gMDsgaSA8IGFoLT5haF9yZl9iYW5rc19zaXplOyBpKyspIHsKKwkJQVI1S19SRUdfV0FJVChpKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZmJbaV0sIGluaV9yZmJbaV0ucmZiX2N0cmxfcmVnaXN0ZXIpOworCX0KKwogCXJldHVybiAwOwogfQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKlwKICAgUEhZL1JGIGNoYW5uZWwgZnVuY3Rpb25zCiBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjcxLDEzICsxMzM0LDggQEAKIAkgKiBhcyBvZnRlbiBhcyBJL1EgY2FsaWJyYXRpb24uKi8KIAlhdGg1a19od19ub2lzZV9mbG9vcl9jYWxpYnJhdGlvbihhaCwgY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCi0JLyogUmVxdWVzdCBSRiBnYWluICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cG93ZXIudHhwX21heCwKLQkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhQT1dFUikgfAotCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhULCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKLQkJYWgtPmFoX3JmX2dhaW4gPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRDsKLQl9CisJLyogSW5pdGlhdGUgYSBnYWluX0YgY2FsaWJyYXRpb24gKi8KKwlhdGg1a19od19yZXF1ZXN0X3JmZ2Fpbl9wcm9iZShhaCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNzgsOTMgKzE0MzYsMTEyMCBAQAogCXJldHVybiBmYWxzZTsgLypYWFg6IFdoYXQgZG8gd2UgcmV0dXJuIGZvciA1MjEwID8qLwogfQogCisKKy8qKioqKioqKioqKioqKioqXAorKiBUWCBwb3dlciBzZXR1cCAqCitcKioqKioqKioqKioqKioqKi8KKwogLyoKLSAqIFRYIHBvd2VyIHNldHVwCisgKiBIZWxwZXIgZnVuY3Rpb25zCiAgKi8KIAogLyoKLSAqIEluaXRpYWxpemUgdGhlIHR4IHBvd2VyIHRhYmxlIChub3QgZnVsbHkgaW1wbGVtZW50ZWQpCisgKiBEbyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBnaXZlbiAoeCwgeSkgcG9pbnRzCiAgKi8KLXN0YXRpYyB2b2lkIGF0aDVrX3R4cG93ZXJfdGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBzMTYgbWF4X3Bvd2VyKQorc3RhdGljIHMxNgorYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShzMTYgdGFyZ2V0LCBzMTYgeF9sZWZ0LCBzMTYgeF9yaWdodCwKKwkJCQkJczE2IHlfbGVmdCwgczE2IHlfcmlnaHQpCiB7Ci0JdW5zaWduZWQgaW50IGksIG1pbiwgbWF4LCBuOwotCXUxNiB0eHBvd2VyLCAqcmF0ZXM7CisJczE2IHJhdGlvLCByZXN1bHQ7CiAKLQlyYXRlcyA9IGFoLT5haF90eHBvd2VyLnR4cF9yYXRlczsKKwkvKiBBdm9pZCBkaXZpZGUgYnkgemVybyBhbmQgc2tpcCBpbnRlcnBvbGF0aW9uCisJICogaWYgd2UgaGF2ZSB0aGUgc2FtZSBwb2ludCAqLworCWlmICgoeF9sZWZ0ID09IHhfcmlnaHQpIHx8ICh5X2xlZnQgPT0geV9yaWdodCkpCisJCXJldHVybiB5X2xlZnQ7CiAKLQl0eHBvd2VyID0gQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUiAqIDI7Ci0JaWYgKG1heF9wb3dlciA+IHR4cG93ZXIpCi0JCXR4cG93ZXIgPSBtYXhfcG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIgPwotCQkgICAgQVI1S19UVU5FX01BWF9UWFBPV0VSIDogbWF4X3Bvd2VyOworCS8qCisJICogU2luY2Ugd2UgdXNlIGludHMgYW5kIG5vdCBmcHMsIHdlIG5lZWQgdG8gc2NhbGUgdXAgaW4KKwkgKiBvcmRlciB0byBnZXQgYSBzYW5lIHJhdGlvIHZhbHVlIChvciBlbHNlIHdlICdsbCBlZy4gZ2V0CisJICogYWx3YXlzIDEgaW5zdGVhZCBvZiAxLjI1LCAxLjc1IGV0YykuIFdlIHNjYWxlIHVwIGJ5IDEwMAorCSAqIHRvIGhhdmUgc29tZSBhY2N1cmFjeSBib3RoIGZvciAwLjUgYW5kIDAuMjUgc3RlcHMuCisJICovCisJcmF0aW8gPSAoKDEwMCAqIHlfcmlnaHQgLSAxMDAgKiB5X2xlZnQpLyh4X3JpZ2h0IC0geF9sZWZ0KSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVI1S19NQVhfUkFURVM7IGkrKykKLQkJcmF0ZXNbaV0gPSB0eHBvd2VyOworCS8qIE5vdyBzY2FsZSBkb3duIHRvIGJlIGluIHJhbmdlICovCisJcmVzdWx0ID0geV9sZWZ0ICsgKHJhdGlvICogKHRhcmdldCAtIHhfbGVmdCkgLyAxMDApOwogCi0JLyogWFhYIHNldHVwIHRhcmdldCBwb3dlcnMgYnkgcmF0ZSAqLwotCi0JYWgtPmFoX3R4cG93ZXIudHhwX21pbiA9IHJhdGVzWzddOwotCWFoLT5haF90eHBvd2VyLnR4cF9tYXggPSByYXRlc1swXTsKLQlhaC0+YWhfdHhwb3dlci50eHBfb2ZkbSA9IHJhdGVzWzBdOwotCi0JLyogQ2FsY3VsYXRlIHRoZSBwb3dlciB0YWJsZSAqLwotCW4gPSBBUlJBWV9TSVpFKGFoLT5haF90eHBvd2VyLnR4cF9wY2RhYyk7Ci0JbWluID0gQVI1S19FRVBST01fUENEQUNfU1RBUlQ7Ci0JbWF4ID0gQVI1S19FRVBST01fUENEQUNfU1RPUDsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSArPSBBUjVLX0VFUFJPTV9QQ0RBQ19TVEVQKQotCQlhaC0+YWhfdHhwb3dlci50eHBfcGNkYWNbaV0gPQotI2lmZGVmIG5vdHlldAotCQltaW4gKyAoKGkgKiAobWF4IC0gbWluKSkgLyBuKTsKLSNlbHNlCi0JCW1pbjsKLSNlbmRpZgorCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCi0gKiBTZXQgdHJhbnNtaXRpb24gcG93ZXIKKyAqIEZpbmQgdmVydGljYWwgYm91bmRhcnkgKG1pbiBwd3IpIGZvciB0aGUgbGluZWFyIFBDREFDIGN1cnZlLgorICoKKyAqIFNpbmNlIHdlIGhhdmUgdGhlIHRvcCBvZiB0aGUgY3VydmUgYW5kIHdlIGRyYXcgdGhlIGxpbmUgYmVsb3cKKyAqIHVudGlsIHdlIHJlYWNoIDEgKDEgcGNkYWMgc3RlcCkgd2UgbmVlZCB0byBrbm93IHdoaWNoIHBvaW50CisgKiAoeCB2YWx1ZSkgdGhhdCBpcyBzbyB0aGF0IHdlIGRvbid0IGdvIGJlbG93IHkgYXhpcyBhbmQgaGF2ZSBuZWdhdGl2ZQorICogcGNkYWMgdmFsdWVzIHdoZW4gY3JlYXRpbmcgdGhlIGN1cnZlLCBvciBmaWxsIHRoZSB0YWJsZSB3aXRoIHplcm9lcy4KICAqLwotaW50IC8qTy5LLiAtIHR4cG93ZXJfdGFibGUgaXMgdW5pbXBsZW1lbnRlZCBzbyB0aGlzIGRvZXNuJ3Qgd29yayovCi1hdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJdW5zaWduZWQgaW50IHR4cG93ZXIpCitzdGF0aWMgczE2CithdGg1a19nZXRfbGluZWFyX3BjZGFjX21pbihjb25zdCB1OCAqc3RlcEwsIGNvbnN0IHU4ICpzdGVwUiwKKwkJCQljb25zdCBzMTYgKnB3ckwsIGNvbnN0IHMxNiAqcHdyUikKIHsKLQlib29sIHRwYyA9IGFoLT5haF90eHBvd2VyLnR4cF90cGM7Ci0JdW5zaWduZWQgaW50IGk7CisJczggdG1wOworCXMxNiBtaW5fcHdyTCwgbWluX3B3clI7CisJczE2IHB3cl9pID0gcHdyTFswXTsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKHR4cG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgdHggcG93ZXI6ICV1XG4iLCB0eHBvd2VyKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJZG8geworCQlwd3JfaS0tOworCQl0bXAgPSAoczgpIGF0aDVrX2dldF9pbnRlcnBvbGF0ZWRfdmFsdWUocHdyX2ksCisJCQkJCQlwd3JMWzBdLCBwd3JMWzFdLAorCQkJCQkJc3RlcExbMF0sIHN0ZXBMWzFdKTsKKworCX0gd2hpbGUgKHRtcCA+IDEpOworCisJbWluX3B3ckwgPSBwd3JfaTsKKworCXB3cl9pID0gcHdyUlswXTsKKwlkbyB7CisJCXB3cl9pLS07CisJCXRtcCA9IChzOCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShwd3JfaSwKKwkJCQkJCXB3clJbMF0sIHB3clJbMV0sCisJCQkJCQlzdGVwUlswXSwgc3RlcFJbMV0pOworCisJfSB3aGlsZSAodG1wID4gMSk7CisKKwltaW5fcHdyUiA9IHB3cl9pOworCisJLyogS2VlcCB0aGUgcmlnaHQgYm91bmRhcnkgc28gdGhhdCBpdCB3b3JrcyBmb3IgYm90aCBjdXJ2ZXMgKi8KKwlyZXR1cm4gbWF4KG1pbl9wd3JMLCBtaW5fcHdyUik7Cit9CisKKy8qCisgKiBJbnRlcnBvbGF0ZSAocHdyLHZwZCkgcG9pbnRzIHRvIGNyZWF0ZSBhIFBvd2VyIHRvIFBEQURDIG9yIGEKKyAqIFBvd2VyIHRvIFBDREFDIGN1cnZlLgorICoKKyAqIEVhY2ggY3VydmUgaGFzIHBvd2VyIG9uIHggYXhpcyAoaW4gMC41ZEIgdW5pdHMpIGFuZCBQQ0RBQy9QREFEQworICogc3RlcHMgKG9mZnNldHMpIG9uIHkgYXhpcy4gUG93ZXIgY2FuIGdvIHVwIHRvIDMxLjVkQiBhbmQgbWF4CisgKiBQQ0RBQy9QREFEQyBzdGVwIGZvciBlYWNoIGN1cnZlIGlzIDY0IGJ1dCB3ZSBjYW4gd3JpdGUgbW9yZSB0aGFuCisgKiBvbmUgY3VydmVzIG9uIGh3IHNvIHdlIGNhbiBnbyB1cCB0byAxMjggKHdoaWNoIGlzIHRoZSBtYXggc3RlcCB3ZQorICogY2FuIHdyaXRlIG9uIHRoZSBmaW5hbCB0YWJsZSkuCisgKgorICogV2Ugd3JpdGUgeSB2YWx1ZXMgKFBDREFDL1BEQURDIHN0ZXBzKSBvbiBody4KKyAqLworc3RhdGljIHZvaWQKK2F0aDVrX2NyZWF0ZV9wb3dlcl9jdXJ2ZShzMTYgcG1pbiwgczE2IHBtYXgsCisJCQljb25zdCBzMTYgKnB3ciwgY29uc3QgdTggKnZwZCwKKwkJCXU4IG51bV9wb2ludHMsCisJCQl1OCAqdnBkX3RhYmxlLCB1OCB0eXBlKQoreworCXU4IGlkeFsyXSA9IHsgMCwgMSB9OworCXMxNiBwd3JfaSA9IDIqcG1pbjsKKwlpbnQgaTsKKworCWlmIChudW1fcG9pbnRzIDwgMikKKwkJcmV0dXJuOworCisJLyogV2Ugd2FudCB0aGUgd2hvbGUgbGluZSwgc28gYWRqdXN0IGJvdW5kYXJpZXMKKwkgKiB0byBjb3ZlciB0aGUgZW50aXJlIHBvd2VyIHJhbmdlLiBOb3RlIHRoYXQKKwkgKiBwb3dlciB2YWx1ZXMgYXJlIGFscmVhZHkgMC4yNWRCIHNvIG5vIG5lZWQKKwkgKiB0byBtdWx0aXBseSBwd3JfaSBieSAyICovCisJaWYgKHR5cGUgPT0gQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUMpIHsKKwkJcHdyX2kgPSBwbWluOworCQlwbWluID0gMDsKKwkJcG1heCA9IDYzOwogCX0KIAotCS8qCi0JICogUkYyNDEzIGZvciBzb21lIHJlYXNvbiBjYW4ndAotCSAqIHRyYW5zbWl0IGFueXRoaW5nIGlmIHdlIGNhbGwKLQkgKiB0aGlzIGZ1bnRpb24sIHNvIHdlIHNraXAgaXQKLQkgKiB1bnRpbCB3ZSBmaXggdHhwb3dlci4KKwkvKiBGaW5kIHN1cnJvdW5kaW5nIHR1cm5pbmcgcG9pbnRzIChUUHMpCisJICogYW5kIGludGVycG9sYXRlIGJldHdlZW4gdGhlbSAqLworCWZvciAoaSA9IDA7IChpIDw9ICh1MTYpIChwbWF4IC0gcG1pbikpICYmCisJKGkgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFKTsgaSsrKSB7CisKKwkJLyogV2UgcGFzc2VkIHRoZSByaWdodCBUUCwgbW92ZSB0byB0aGUgbmV4dCBzZXQgb2YgVFBzCisJCSAqIGlmIHdlIHBhc3MgdGhlIGxhc3QgVFAsIGV4dHJhcG9sYXRlIGFib3ZlIHVzaW5nIHRoZSBsYXN0CisJCSAqIHR3byBUUHMgZm9yIHJhdGlvICovCisJCWlmICgocHdyX2kgPiBwd3JbaWR4WzFdXSkgJiYgKGlkeFsxXSA8IG51bV9wb2ludHMgLSAxKSkgeworCQkJaWR4WzBdKys7CisJCQlpZHhbMV0rKzsKKwkJfQorCisJCXZwZF90YWJsZVtpXSA9ICh1OCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShwd3JfaSwKKwkJCQkJCXB3cltpZHhbMF1dLCBwd3JbaWR4WzFdXSwKKwkJCQkJCXZwZFtpZHhbMF1dLCB2cGRbaWR4WzFdXSk7CisKKwkJLyogSW5jcmVhc2UgYnkgMC41ZEIKKwkJICogKDAuMjUgZEIgdW5pdHMpICovCisJCXB3cl9pICs9IDI7CisJfQorfQorCisvKgorICogR2V0IHRoZSBzdXJyb3VuZGluZyBwZXItY2hhbm5lbCBwb3dlciBjYWxpYnJhdGlvbiBwaWVycworICogZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IHNvIHRoYXQgd2UgY2FuIGludGVycG9sYXRlIGJldHdlZW4KKyAqIHRoZW0gYW5kIGNvbWUgdXAgd2l0aCBhbiBhcHJvcHJpYXRlIGRhdGFzZXQgZm9yIG91ciBjdXJyZW50CisgKiBjaGFubmVsLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfZ2V0X2NoYW5fcGNhbF9zdXJyb3VuZGluZ19waWVycyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICoqcGNpbmZvX2wsCisJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKipwY2luZm9fcikKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjaW5mbzsKKwl1OCBpZHhfbCwgaWR4X3I7CisJdTggbW9kZSwgbWF4LCBpOworCXUzMiB0YXJnZXQgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKKworCWlkeF9sID0gMDsKKwlpZHhfciA9IDA7CisKKwlpZiAoIShjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkpIHsKKwkJcGNpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOworCX0gZWxzZSBpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKwkJcGNpbmZvID0gZWUtPmVlX3B3cl9jYWxfZzsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCX0gZWxzZSB7CisJCXBjaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2E7CisJCW1vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKKwl9CisJbWF4ID0gZWUtPmVlX25fcGllcnNbbW9kZV0gLSAxOworCisJLyogRnJlcXVlbmN5IGlzIGJlbG93IG91ciBjYWxpYnJhdGVkCisJICogcmFuZ2UuIFVzZSB0aGUgbG93ZXN0IHBvd2VyIGN1cnZlCisJICogd2UgaGF2ZSAqLworCWlmICh0YXJnZXQgPCBwY2luZm9bMF0uZnJlcSkgeworCQlpZHhfbCA9IGlkeF9yID0gMDsKKwkJZ290byBkb25lOworCX0KKworCS8qIEZyZXF1ZW5jeSBpcyBhYm92ZSBvdXIgY2FsaWJyYXRlZAorCSAqIHJhbmdlLiBVc2UgdGhlIGhpZ2hlc3QgcG93ZXIgY3VydmUKKwkgKiB3ZSBoYXZlICovCisJaWYgKHRhcmdldCA+IHBjaW5mb1ttYXhdLmZyZXEpIHsKKwkJaWR4X2wgPSBpZHhfciA9IG1heDsKKwkJZ290byBkb25lOworCX0KKworCS8qIEZyZXF1ZW5jeSBpcyBpbnNpZGUgb3VyIGNhbGlicmF0ZWQKKwkgKiBjaGFubmVsIHJhbmdlLiBQaWNrIHRoZSBzdXJyb3VuZGluZworCSAqIGNhbGlicmF0aW9uIHBpZXJzIHNvIHRoYXQgd2UgY2FuCisJICogaW50ZXJwb2xhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG1heDsgaSsrKSB7CisKKwkJLyogRnJlcXVlbmN5IG1hdGNoZXMgb25lIG9mIG91ciBjYWxpYnJhdGlvbgorCQkgKiBwaWVycywgbm8gbmVlZCB0byBpbnRlcnBvbGF0ZSwganVzdCB1c2UKKwkJICogdGhhdCBjYWxpYnJhdGlvbiBwaWVyICovCisJCWlmIChwY2luZm9baV0uZnJlcSA9PSB0YXJnZXQpIHsKKwkJCWlkeF9sID0gaWR4X3IgPSBpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogV2UgZm91bmQgYSBjYWxpYnJhdGlvbiBwaWVyIHRoYXQncyBhYm92ZQorCQkgKiBmcmVxdWVuY3ksIHVzZSB0aGlzIHBpZXIgYW5kIHRoZSBwcmV2aW91cworCQkgKiBvbmUgdG8gaW50ZXJwb2xhdGUgKi8KKwkJaWYgKHRhcmdldCA8IHBjaW5mb1tpXS5mcmVxKSB7CisJCQlpZHhfciA9IGk7CisJCQlpZHhfbCA9IGlkeF9yIC0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwkqcGNpbmZvX2wgPSAmcGNpbmZvW2lkeF9sXTsKKwkqcGNpbmZvX3IgPSAmcGNpbmZvW2lkeF9yXTsKKworCXJldHVybjsKK30KKworLyoKKyAqIEdldCB0aGUgc3Vycm91bmRpbmcgcGVyLXJhdGUgcG93ZXIgY2FsaWJyYXRpb24gZGF0YQorICogZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHBvd2VyCisgKiB2YWx1ZXMgdG8gc2V0IG1heCB0YXJnZXQgcG93ZXIgc3VwcG9ydGVkIGJ5IGh3IGZvcgorICogZWFjaCByYXRlLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfZ2V0X3JhdGVfcGNhbF9kYXRhKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQlzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8gKnJhdGVzKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcnBpbmZvOworCXU4IGlkeF9sLCBpZHhfcjsKKwl1OCBtb2RlLCBtYXgsIGk7CisJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJaWR4X2wgPSAwOworCWlkeF9yID0gMDsKKworCWlmICghKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSkgeworCQlycGluZm8gPSBlZS0+ZWVfcmF0ZV90cHdyX2I7CisJCW1vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKKwl9IGVsc2UgaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7CisJCXJwaW5mbyA9IGVlLT5lZV9yYXRlX3Rwd3JfZzsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCX0gZWxzZSB7CisJCXJwaW5mbyA9IGVlLT5lZV9yYXRlX3Rwd3JfYTsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOworCX0KKwltYXggPSBlZS0+ZWVfcmF0ZV90YXJnZXRfcHdyX251bVttb2RlXSAtIDE7CisKKwkvKiBHZXQgdGhlIHN1cnJvdW5kaW5nIGNhbGlicmF0aW9uCisJICogcGllcnMgLSBzYW1lIGFzIGFib3ZlICovCisJaWYgKHRhcmdldCA8IHJwaW5mb1swXS5mcmVxKSB7CisJCWlkeF9sID0gaWR4X3IgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHRhcmdldCA+IHJwaW5mb1ttYXhdLmZyZXEpIHsKKwkJaWR4X2wgPSBpZHhfciA9IG1heDsKKwkJZ290byBkb25lOworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gbWF4OyBpKyspIHsKKworCQlpZiAocnBpbmZvW2ldLmZyZXEgPT0gdGFyZ2V0KSB7CisJCQlpZHhfbCA9IGlkeF9yID0gaTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmICh0YXJnZXQgPCBycGluZm9baV0uZnJlcSkgeworCQkJaWR4X3IgPSBpOworCQkJaWR4X2wgPSBpZHhfciAtIDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJLyogTm93IGludGVycG9sYXRlIHBvd2VyIHZhbHVlLCBiYXNlZCBvbiB0aGUgZnJlcXVlbmN5ICovCisJcmF0ZXMtPmZyZXEgPSB0YXJnZXQ7CisKKwlyYXRlcy0+dGFyZ2V0X3Bvd2VyXzZ0bzI0ID0KKwkJYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsIHJwaW5mb1tpZHhfbF0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9yXS5mcmVxLAorCQkJCQlycGluZm9baWR4X2xdLnRhcmdldF9wb3dlcl82dG8yNCwKKwkJCQkJcnBpbmZvW2lkeF9yXS50YXJnZXRfcG93ZXJfNnRvMjQpOworCisJcmF0ZXMtPnRhcmdldF9wb3dlcl8zNiA9CisJCWF0aDVrX2dldF9pbnRlcnBvbGF0ZWRfdmFsdWUodGFyZ2V0LCBycGluZm9baWR4X2xdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfcl0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9sXS50YXJnZXRfcG93ZXJfMzYsCisJCQkJCXJwaW5mb1tpZHhfcl0udGFyZ2V0X3Bvd2VyXzM2KTsKKworCXJhdGVzLT50YXJnZXRfcG93ZXJfNDggPQorCQlhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwgcnBpbmZvW2lkeF9sXS5mcmVxLAorCQkJCQlycGluZm9baWR4X3JdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfbF0udGFyZ2V0X3Bvd2VyXzQ4LAorCQkJCQlycGluZm9baWR4X3JdLnRhcmdldF9wb3dlcl80OCk7CisKKwlyYXRlcy0+dGFyZ2V0X3Bvd2VyXzU0ID0KKwkJYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsIHJwaW5mb1tpZHhfbF0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9yXS5mcmVxLAorCQkJCQlycGluZm9baWR4X2xdLnRhcmdldF9wb3dlcl81NCwKKwkJCQkJcnBpbmZvW2lkeF9yXS50YXJnZXRfcG93ZXJfNTQpOworfQorCisvKgorICogR2V0IHRoZSBtYXggZWRnZSBwb3dlciBmb3IgdGhpcyBjaGFubmVsIGlmCisgKiB3ZSBoYXZlIHN1Y2ggZGF0YSBmcm9tIEVFUFJPTSdzIENvbmZvcm1hbmNlIFRlc3QKKyAqIExpbWl0cyAoQ1RMKSwgYW5kIGxpbWl0IG1heCBwb3dlciBpZiBuZWVkZWQuCisgKgorICogRklYTUU6IE9ubHkgd29ya3MgZm9yIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucworICovCitzdGF0aWMgdm9pZAorYXRoNWtfZ2V0X21heF9jdGxfcG93ZXIoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfZWRnZV9wb3dlciAqcmVwID0gZWUtPmVlX2N0bF9wd3I7CisJdTggKmN0bF92YWwgPSBlZS0+ZWVfY3RsOworCXMxNiBtYXhfY2hhbl9wd3IgPSBhaC0+YWhfdHhwb3dlci50eHBfbWF4X3B3ciAvIDQ7CisJczE2IGVkZ2VfcHdyID0gMDsKKwl1OCByZXBfaWR4OworCXU4IGksIGN0bF9tb2RlOworCXU4IGN0bF9pZHggPSAweEZGOworCXUzMiB0YXJnZXQgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKKworCS8qIEZpbmQgb3V0IGEgQ1RMIGZvciBvdXIgbW9kZSB0aGF0J3Mgbm90IG1hcHBlZAorCSAqIG9uIGEgc3BlY2lmaWMgcmVnIGRvbWFpbi4KIAkgKgotCSAqIFhYWDogQXNzdW1lIHNhbWUgZm9yIFJGMjQyNQotCSAqIHRvIGJlIHNhZmUuCi0JICovCi0JaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MTMpIHx8IChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MjUpKQotCQlyZXR1cm4gMDsKKwkgKiBUT0RPOiBNYXAgb3VyIGN1cnJlbnQgcmVnIGRvbWFpbiB0byBvbmUgb2YgdGhlIDMgYXZhaWxhYmxlCisJICogcmVnIGRvbWFpbiBpZHMgc28gdGhhdCB3ZSBjYW4gc3VwcG9ydCBtb3JlIENUTHMuICovCisJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKKwljYXNlIENIQU5ORUxfQToKKwkJY3RsX21vZGUgPSBBUjVLX0NUTF8xMUEgfCBBUjVLX0NUTF9OT19SRUdET01BSU47CisJCWJyZWFrOworCWNhc2UgQ0hBTk5FTF9HOgorCQljdGxfbW9kZSA9IEFSNUtfQ1RMXzExRyB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX0I6CisJCWN0bF9tb2RlID0gQVI1S19DVExfMTFCIHwgQVI1S19DVExfTk9fUkVHRE9NQUlOOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfVDoKKwkJY3RsX21vZGUgPSBBUjVLX0NUTF9UVVJCTyB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX1RHOgorCQljdGxfbW9kZSA9IEFSNUtfQ1RMX1RVUkJPRyB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX1hSOgorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQogCi0JLyogUmVzZXQgVFggcG93ZXIgdmFsdWVzICovCi0JbWVtc2V0KCZhaC0+YWhfdHhwb3dlciwgMCwgc2l6ZW9mKGFoLT5haF90eHBvd2VyKSk7Ci0JYWgtPmFoX3R4cG93ZXIudHhwX3RwYyA9IHRwYzsKKwlmb3IgKGkgPSAwOyBpIDwgZWUtPmVlX2N0bHM7IGkrKykgeworCQlpZiAoY3RsX3ZhbFtpXSA9PSBjdGxfbW9kZSkgeworCQkJY3RsX2lkeCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KIAotCS8qIEluaXRpYWxpemUgVFggcG93ZXIgdGFibGUgKi8KLQlhdGg1a190eHBvd2VyX3RhYmxlKGFoLCBjaGFubmVsLCB0eHBvd2VyKTsKKwkvKiBJZiB3ZSBoYXZlIGEgQ1RMIGRhdGFzZXQgYXZhaWxhYmxlIGdyYWIgaXQgYW5kIGZpbmQgdGhlCisJICogZWRnZSBwb3dlciBmb3Igb3VyIGZyZXF1ZW5jeSAqLworCWlmIChjdGxfaWR4ID09IDB4RkYpCisJCXJldHVybjsKKworCS8qIEVkZ2UgcG93ZXJzIGFyZSBzb3J0ZWQgYnkgZnJlcXVlbmN5IGZyb20gbG93ZXIKKwkgKiB0byBoaWdoZXIuIEVhY2ggQ1RMIGNvcnJlc3BvbmRzIHRvIDggZWRnZSBwb3dlcgorCSAqIG1lYXN1cmVtZW50cy4gKi8KKwlyZXBfaWR4ID0gY3RsX2lkeCAqIEFSNUtfRUVQUk9NX05fRURHRVM7CisKKwkvKiBEb24ndCBkbyBib3VuZGFyaWVzIGNoZWNrIGJlY2F1c2Ugd2UKKwkgKiBtaWdodCBoYXZlIG1vcmUgdGhhdCBvbmUgYmFuZHMgZGVmaW5lZAorCSAqIGZvciB0aGlzIG1vZGUgKi8KKworCS8qIEdldCB0aGUgZWRnZSBwb3dlciB0aGF0J3MgY2xvc2VyIHRvIG91cgorCSAqIGZyZXF1ZW5jeSAqLworCWZvciAoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OX0VER0VTOyBpKyspIHsKKwkJcmVwX2lkeCArPSBpOworCQlpZiAodGFyZ2V0IDw9IHJlcFtyZXBfaWR4XS5mcmVxKQorCQkJZWRnZV9wd3IgPSAoczE2KSByZXBbcmVwX2lkeF0uZWRnZTsKKwl9CisKKwlpZiAoZWRnZV9wd3IpCisJCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gNCptaW4oZWRnZV9wd3IsIG1heF9jaGFuX3B3cik7Cit9CisKKworLyoKKyAqIFBvd2VyIHRvIFBDREFDIHRhYmxlIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBGaWxsIFBvd2VyIHRvIFBDREFDIHRhYmxlIG9uIFJGNTExMQorICoKKyAqIE5vIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBuZWVkZWQgZm9yIFJGNTExMSwgdGhlIG9ubHkgdGhpbmcgd2UgaGF2ZSB0bworICogZG8gaXMgZmlsbCB0aGUgdmFsdWVzIGJlbG93IGFuZCBhYm92ZSBjYWxpYnJhdGlvbiByYW5nZSBzaW5jZSBlZXByb20gZGF0YQorICogbWF5IG5vdCBjb3ZlciB0aGUgZW50aXJlIFBDREFDIHRhYmxlLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfZmlsbF9wd3JfdG9fcGNkYWNfdGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwgczE2KiB0YWJsZV9taW4sCisJCQkJCQkJczE2ICp0YWJsZV9tYXgpCit7CisJdTggCSpwY2RhY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJdTgJKnBjZGFjX3RtcCA9IGFoLT5haF90eHBvd2VyLnRtcExbMF07CisJdTgJcGNkYWNfMCwgcGNkYWNfbiwgcGNkYWNfaSwgcHdyX2lkeCwgaTsKKwlzMTYJbWluX3B3ciwgbWF4X3B3cjsKKworCS8qIEdldCB0YWJsZSBib3VuZGFyaWVzICovCisJbWluX3B3ciA9IHRhYmxlX21pblswXTsKKwlwY2RhY18wID0gcGNkYWNfdG1wWzBdOworCisJbWF4X3B3ciA9IHRhYmxlX21heFswXTsKKwlwY2RhY19uID0gcGNkYWNfdG1wW3RhYmxlX21heFswXSAtIHRhYmxlX21pblswXV07CisKKwkvKiBFeHRyYXBvbGF0ZSBiZWxvdyBtaW5pbXVtIHVzaW5nIHBjZGFjXzAgKi8KKwlwY2RhY19pID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWluX3B3cjsgaSsrKQorCQlwY2RhY19vdXRbcGNkYWNfaSsrXSA9IHBjZGFjXzA7CisKKwkvKiBDb3B5IHZhbHVlcyBmcm9tIHBjZGFjX3RtcCAqLworCXB3cl9pZHggPSBtaW5fcHdyOworCWZvciAoaSA9IDAgOyBwd3JfaWR4IDw9IG1heF9wd3IgJiYKKwlwY2RhY19pIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRTsgaSsrKSB7CisJCXBjZGFjX291dFtwY2RhY19pKytdID0gcGNkYWNfdG1wW2ldOworCQlwd3JfaWR4Kys7CisJfQorCisJLyogRXh0cmFwb2xhdGUgYWJvdmUgbWF4aW11bSAqLworCXdoaWxlIChwY2RhY19pIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSkKKwkJcGNkYWNfb3V0W3BjZGFjX2krK10gPSBwY2RhY19uOworCit9CisKKy8qCisgKiBDb21iaW5lIGF2YWlsYWJsZSBYUEQgQ3VydmVzIGFuZCBmaWxsIExpbmVhciBQb3dlciB0byBQQ0RBQyB0YWJsZQorICogb24gUkY1MTEyCisgKgorICogUkZYMTEyIGNhbiBoYXZlIHVwIHRvIDIgY3VydmVzIChvbmUgZm9yIGxvdyB0eHBvd2VyIHJhbmdlIGFuZCBvbmUgZm9yCisgKiBoaWdoZXIgdHhwb3dlciByYW5nZSkuIFdlIG5lZWQgdG8gcHV0IHRoZW0gYm90aCBvbiBwY2RhY19vdXQgYW5kIHBsYWNlCisgKiB0aGVtIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBJbiBjYXNlIHdlIG9ubHkgaGF2ZSBvbmUgY3VydmUgYXZhaWxhYmxlCisgKiBqdXN0IGZpdCBpdCBvbiBwY2RhY19vdXQgKGl0J3Mgc3VwcG9zZWQgdG8gY292ZXIgdGhlIGVudGlyZSByYW5nZSBvZgorICogYXZhaWxhYmxlIHB3ciBsZXZlbHMgc2luY2UgaXQncyBhbHdheXMgdGhlIGhpZ2hlciBwb3dlciBjdXJ2ZSkuIEV4dHJhcG9sYXRlCisgKiBiZWxvdyBhbmQgYWJvdmUgZmluYWwgdGFibGUgaWYgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfY29tYmluZV9saW5lYXJfcGNkYWNfY3VydmVzKHN0cnVjdCBhdGg1a19odyAqYWgsIHMxNiogdGFibGVfbWluLAorCQkJCQkJczE2ICp0YWJsZV9tYXgsIHU4IHBkY3VydmVzKQoreworCXU4IAkqcGNkYWNfb3V0ID0gYWgtPmFoX3R4cG93ZXIudHhwX3BkX3RhYmxlOworCXU4CSpwY2RhY19sb3dfcHdyOworCXU4CSpwY2RhY19oaWdoX3B3cjsKKwl1OAkqcGNkYWNfdG1wOworCXU4CXB3cjsKKwlzMTYJbWF4X3B3cl9pZHg7CisJczE2CW1pbl9wd3JfaWR4OworCXMxNgltaWRfcHdyX2lkeCA9IDA7CisJLyogRWRnZSBmbGFnIHR1cnMgb24gdGhlIDdudGggYml0IG9uIHRoZSBQQ0RBQworCSAqIHRvIGRlbGNhcmUgdGhlIGhpZ2hlciBwb3dlciBjdXJ2ZSAoZm9yY2UgdmFsdWVzCisJICogdG8gYmUgZ3JlYXRlciB0aGFuIDY0KS4gSWYgd2Ugb25seSBoYXZlIG9uZSBjdXJ2ZQorCSAqIHdlIGRvbid0IG5lZWQgdG8gc2V0IHRoaXMsIGlmIHdlIGhhdmUgMiBjdXJ2ZXMgYW5kCisJICogZmlsbCB0aGUgdGFibGUgYmFja3dhcmRzIHRoaXMgY2FuIGFsc28gYmUgdXNlZCB0bworCSAqIHN3aXRjaCBmcm9tIGhpZ2hlciBwb3dlciBjdXJ2ZSB0byBsb3dlciBwb3dlciBjdXJ2ZSAqLworCXU4CWVkZ2VfZmxhZzsKKwlpbnQJaTsKKworCS8qIFdoZW4gd2UgaGF2ZSBvbmx5IG9uZSBjdXJ2ZSBhdmFpbGFibGUKKwkgKiB0aGF0J3MgdGhlIGhpZ2hlciBwb3dlciBjdXJ2ZS4gSWYgd2UgaGF2ZQorCSAqIHR3byBjdXJ2ZXMgdGhlIGZpcnN0IGlzIHRoZSBoaWdoIHBvd2VyIGN1cnZlCisJICogYW5kIHRoZSBuZXh0IGlzIHRoZSBsb3cgcG93ZXIgY3VydmUuICovCisJaWYgKHBkY3VydmVzID4gMSkgeworCQlwY2RhY19sb3dfcHdyID0gYWgtPmFoX3R4cG93ZXIudG1wTFsxXTsKKwkJcGNkYWNfaGlnaF9wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzBdOworCQltaWRfcHdyX2lkeCA9IHRhYmxlX21heFsxXSAtIHRhYmxlX21pblsxXSAtIDE7CisJCW1heF9wd3JfaWR4ID0gKHRhYmxlX21heFswXSAtIHRhYmxlX21pblswXSkgLyAyOworCisJCS8qIElmIHRhYmxlIHNpemUgZ29lcyBiZXlvbmQgMzEuNWRCLCBrZWVwIHRoZQorCQkgKiB1cHBlciAzMS41ZEIgcmFuZ2Ugd2hlbiBzZXR0aW5nIHR4IHBvd2VyLgorCQkgKiBOb3RlOiAxMjYgPSAzMS41IGRCIGluIHF1YXJ0ZXIgZEIgc3RlcHMgKi8KKwkJaWYgKHRhYmxlX21heFswXSAtIHRhYmxlX21pblsxXSA+IDEyNikKKwkJCW1pbl9wd3JfaWR4ID0gdGFibGVfbWF4WzBdIC0gMTI2OworCQllbHNlCisJCQltaW5fcHdyX2lkeCA9IHRhYmxlX21pblsxXTsKKworCQkvKiBTaW5jZSB3ZSBmaWxsIHRhYmxlIGJhY2t3YXJkcworCQkgKiBzdGFydCBmcm9tIGhpZ2ggcG93ZXIgY3VydmUgKi8KKwkJcGNkYWNfdG1wID0gcGNkYWNfaGlnaF9wd3I7CisKKwkJZWRnZV9mbGFnID0gMHg0MDsKKyNpZiAwCisJCS8qIElmIGJvdGggbWluIGFuZCBtYXggcG93ZXIgbGltaXRzIGFyZSBpbiBsb3dlcgorCQkgKiBwb3dlciBjdXJ2ZSdzIHJhbmdlLCBvbmx5IHVzZSB0aGUgbG93IHBvd2VyIGN1cnZlLgorCQkgKiBUT0RPOiBtaW4vbWF4IGxldmVscyBhcmUgcmVsYXRlZCB0byB0YXJnZXQKKwkJICogcG93ZXIgdmFsdWVzIHJlcXVlc3RlZCBmcm9tIGRyaXZlci91c2VyCisJCSAqIFhYWDogSXMgdGhpcyByZWFsbHkgbmVlZGVkID8gKi8KKwkJaWYgKG1pbl9wd3IgPCB0YWJsZV9tYXhbMV0gJiYKKwkJbWF4X3B3ciA8IHRhYmxlX21heFsxXSkgeworCQkJZWRnZV9mbGFnID0gMDsKKwkJCXBjZGFjX3RtcCA9IHBjZGFjX2xvd19wd3I7CisJCQltYXhfcHdyX2lkeCA9ICh0YWJsZV9tYXhbMV0gLSB0YWJsZV9taW5bMV0pLzI7CisJCX0KKyNlbmRpZgorCX0gZWxzZSB7CisJCXBjZGFjX2xvd19wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzFdOyAvKiBaZXJvZWQgKi8KKwkJcGNkYWNfaGlnaF9wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzBdOworCQltaW5fcHdyX2lkeCA9IHRhYmxlX21pblswXTsKKwkJbWF4X3B3cl9pZHggPSAodGFibGVfbWF4WzBdIC0gdGFibGVfbWluWzBdKSAvIDI7CisJCXBjZGFjX3RtcCA9IHBjZGFjX2hpZ2hfcHdyOworCQllZGdlX2ZsYWcgPSAwOworCX0KKworCS8qIFRoaXMgaXMgdXNlZCB3aGVuIHNldHRpbmcgdHggcG93ZXIqLworCWFoLT5haF90eHBvd2VyLnR4cF9taW5faWR4ID0gbWluX3B3cl9pZHgvMjsKKworCS8qIEZpbGwgUG93ZXIgdG8gUENEQUMgdGFibGUgYmFja3dhcmRzICovCisJcHdyID0gbWF4X3B3cl9pZHg7CisJZm9yIChpID0gNjM7IGkgPj0gMDsgaS0tKSB7CisJCS8qIEVudGVyaW5nIGxvd2VyIHBvd2VyIHJhbmdlLCByZXNldAorCQkgKiBlZGdlIGZsYWcgYW5kIHNldCBwY2RhY190bXAgdG8gbG93ZXIKKwkJICogcG93ZXIgY3VydmUuKi8KKwkJaWYgKGVkZ2VfZmxhZyA9PSAweDQwICYmCisJCSgyKnB3ciA8PSAodGFibGVfbWF4WzFdIC0gdGFibGVfbWluWzBdKSB8fCBwd3IgPT0gMCkpIHsKKwkJCWVkZ2VfZmxhZyA9IDB4MDA7CisJCQlwY2RhY190bXAgPSBwY2RhY19sb3dfcHdyOworCQkJcHdyID0gbWlkX3B3cl9pZHgvMjsKKwkJfQorCisJCS8qIERvbid0IGdvIGJlbG93IDEsIGV4dHJhcG9sYXRlIGJlbG93IGlmIHdlIGhhdmUKKwkJICogYWxyZWFkeSBzd2l0aGNlZCB0byB0aGUgbG93ZXIgcG93ZXIgY3VydmUgLW9yCisJCSAqIHdlIG9ubHkgaGF2ZSBvbmUgY3VydmUgYW5kIGVkZ2VfZmxhZyBpcyB6ZXJvCisJCSAqIGFueXdheSAqLworCQlpZiAocGNkYWNfdG1wW3B3cl0gPCAxICYmIChlZGdlX2ZsYWcgPT0gMHgwMCkpIHsKKwkJCXdoaWxlIChpID49IDApIHsKKwkJCQlwY2RhY19vdXRbaV0gPSBwY2RhY19vdXRbaSArIDFdOworCQkJCWktLTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJcGNkYWNfb3V0W2ldID0gcGNkYWNfdG1wW3B3cl0gfCBlZGdlX2ZsYWc7CisKKwkJLyogRXh0cmFwb2xhdGUgYWJvdmUgaWYgcGNkYWMgaXMgZ3JlYXRlciB0aGFuCisJCSAqIDEyNiAtdGhpcyBjYW4gaGFwcGVuIGJlY2F1c2Ugd2UgT1IgcGNkYWNfb3V0CisJCSAqIHZhbHVlIHdpdGggZWRnZV9mbGFnIG9uIGhpZ2ggcG93ZXIgY3VydmUgKi8KKwkJaWYgKHBjZGFjX291dFtpXSA+IDEyNikKKwkJCXBjZGFjX291dFtpXSA9IDEyNjsKKworCQkvKiBEZWNyZWFzZSBieSBhIDAuNWRCIHN0ZXAgKi8KKwkJcHdyLS07CisJfQorfQorCisvKiBXcml0ZSBQQ0RBQyB2YWx1ZXMgb24gaHcgKi8KK3N0YXRpYyB2b2lkCithdGg1a19zZXR1cF9wY2RhY190YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXU4IAkqcGNkYWNfb3V0ID0gYWgtPmFoX3R4cG93ZXIudHhwX3BkX3RhYmxlOworCWludAlpOwogCiAJLyoKIAkgKiBXcml0ZSBUWCBwb3dlciB2YWx1ZXMKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKEFSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUgLyAyKTsgaSsrKSB7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKLQkJCSgoKChhaC0+YWhfdHhwb3dlci50eHBfcGNkYWNbKGkgPDwgMSkgKyAxXSA8PCA4KSB8IDB4ZmYpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKCgoYWgtPmFoX3R4cG93ZXIudHhwX3BjZGFjWyhpIDw8IDEpICAgIF0gPDwgOCkgfCAweGZmKSAmIDB4ZmZmZiksCisJCQkoKChwY2RhY19vdXRbMippICsgMF0gPDwgOCB8IDB4ZmYpICYgMHhmZmZmKSA8PCAwKSB8CisJCQkoKChwY2RhY19vdXRbMippICsgMV0gPDwgOCB8IDB4ZmYpICYgMHhmZmZmKSA8PCAxNiksCiAJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKGkpKTsKIAl9Cit9CiAKKworLyoKKyAqIFBvd2VyIHRvIFBEQURDIHRhYmxlIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBTZXQgdGhlIGdhaW4gYm91bmRhcmllcyBhbmQgY3JlYXRlIGZpbmFsIFBvd2VyIHRvIFBEQURDIHRhYmxlCisgKgorICogV2UgY2FuIGhhdmUgdXAgdG8gNCBwZCBjdXJ2ZXMsIHdlIG5lZWQgdG8gZG8gYSBzaW1taWxhciBwcm9jZXNzCisgKiBhcyB3ZSBkbyBmb3IgUkY1MTEyLiBUaGlzIHRpbWUgd2UgZG9uJ3QgaGF2ZSBhbiBlZGdlX2ZsYWcgYnV0IHdlCisgKiBzZXQgdGhlIGdhaW4gYm91bmRhcmllcyBvbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfY29tYmluZV9wd3JfdG9fcGRhZGNfY3VydmVzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzMTYgKnB3cl9taW4sIHMxNiAqcHdyX21heCwgdTggcGRjdXJ2ZXMpCit7CisJdTggZ2Fpbl9ib3VuZGFyaWVzW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOworCXU4ICpwZGFkY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJdTggKnBkYWRjX3RtcDsKKwlzMTYgcGRhZGNfMDsKKwl1OCBwZGFkY19pLCBwZGFkY19uLCBwd3Jfc3RlcCwgcGRnLCBtYXhfaWR4LCB0YWJsZV9zaXplOworCXU4IHBkX2dhaW5fb3ZlcmxhcDsKKworCS8qIE5vdGU6IFJlZ2lzdGVyIHZhbHVlIGlzIGluaXRpYWxpemVkIG9uIGluaXR2YWxzCisJICogdGhlcmUgaXMgbm8gZmVlZGJhY2sgZnJvbSBody4KKwkgKiBYWFg6IFdoYXQgYWJvdXQgcGRfZ2Fpbl9vdmVybGFwIGZyb20gRUVQUk9NID8gKi8KKwlwZF9nYWluX292ZXJsYXAgPSAodTgpIGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UUENfUkc1KSAmCisJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQOworCisJLyogQ3JlYXRlIGZpbmFsIFBEQURDIHRhYmxlICovCisJZm9yIChwZGcgPSAwLCBwZGFkY19pID0gMDsgcGRnIDwgcGRjdXJ2ZXM7IHBkZysrKSB7CisJCXBkYWRjX3RtcCA9IGFoLT5haF90eHBvd2VyLnRtcExbcGRnXTsKKworCQlpZiAocGRnID09IHBkY3VydmVzIC0gMSkKKwkJCS8qIDIgZEIgYm91bmRhcnkgc3RyZXRjaCBmb3IgbGFzdAorCQkJICogKGhpZ2hlciBwb3dlcikgY3VydmUgKi8KKwkJCWdhaW5fYm91bmRhcmllc1twZGddID0gcHdyX21heFtwZGddICsgNDsKKwkJZWxzZQorCQkJLyogU2V0IGdhaW4gYm91bmRhcnkgaW4gdGhlIG1pZGRsZQorCQkJICogYmV0d2VlbiB0aGlzIGN1cnZlIGFuZCB0aGUgbmV4dCBvbmUgKi8KKwkJCWdhaW5fYm91bmRhcmllc1twZGddID0KKwkJCQkocHdyX21heFtwZGddICsgcHdyX21pbltwZGcgKyAxXSkgLyAyOworCisJCS8qIFNhbml0eSBjaGVjayBpbiBjYXNlIG91ciAyIGRiIHN0cmV0Y2ggZ290IG91dCBvZgorCQkgKiByYW5nZS4gKi8KKwkJaWYgKGdhaW5fYm91bmRhcmllc1twZGddID4gQVI1S19UVU5FX01BWF9UWFBPV0VSKQorCQkJZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPSBBUjVLX1RVTkVfTUFYX1RYUE9XRVI7CisKKwkJLyogRm9yIHRoZSBmaXJzdCBjdXJ2ZSAobG93ZXIgcG93ZXIpCisJCSAqIHN0YXJ0IGZyb20gMCBkQiAqLworCQlpZiAocGRnID09IDApCisJCQlwZGFkY18wID0gMDsKKwkJZWxzZQorCQkJLyogRm9yIHRoZSBvdGhlciBjdXJ2ZXMgdXNlIHRoZSBnYWluIG92ZXJsYXAgKi8KKwkJCXBkYWRjXzAgPSAoZ2Fpbl9ib3VuZGFyaWVzW3BkZyAtIDFdIC0gcHdyX21pbltwZGddKSAtCisJCQkJCQkJcGRfZ2Fpbl9vdmVybGFwOworCisJCS8qIEZvcmNlIGVhY2ggcG93ZXIgc3RlcCB0byBiZSBhdCBsZWFzdCAwLjUgZEIgKi8KKwkJaWYgKChwZGFkY190bXBbMV0gLSBwZGFkY190bXBbMF0pID4gMSkKKwkJCXB3cl9zdGVwID0gcGRhZGNfdG1wWzFdIC0gcGRhZGNfdG1wWzBdOworCQllbHNlCisJCQlwd3Jfc3RlcCA9IDE7CisKKwkJLyogSWYgcGRhZGNfMCBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBleHRyYXBvbGF0ZQorCQkgKiBiZWxvdyB0aGlzIHBkZ2FpbiBieSBhIG51bWJlciBvZiBwd3Jfc3RlcHMgKi8KKwkJd2hpbGUgKChwZGFkY18wIDwgMCkgJiYgKHBkYWRjX2kgPCAxMjgpKSB7CisJCQlzMTYgdG1wID0gcGRhZGNfdG1wWzBdICsgcGRhZGNfMCAqIHB3cl9zdGVwOworCQkJcGRhZGNfb3V0W3BkYWRjX2krK10gPSAodG1wIDwgMCkgPyAwIDogKHU4KSB0bXA7CisJCQlwZGFkY18wKys7CisJCX0KKworCQkvKiBTZXQgbGFzdCBwd3IgbGV2ZWwsIHVzaW5nIGdhaW4gYm91bmRhcmllcyAqLworCQlwZGFkY19uID0gZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gKyBwZF9nYWluX292ZXJsYXAgLSBwd3JfbWluW3BkZ107CisJCS8qIExpbWl0IGl0IHRvIGJlIGluc2lkZSBwd3IgcmFuZ2UgKi8KKwkJdGFibGVfc2l6ZSA9IHB3cl9tYXhbcGRnXSAtIHB3cl9taW5bcGRnXTsKKwkJbWF4X2lkeCA9IChwZGFkY19uIDwgdGFibGVfc2l6ZSkgPyBwZGFkY19uIDogdGFibGVfc2l6ZTsKKworCQkvKiBGaWxsIHBkYWRjX291dCB0YWJsZSAqLworCQl3aGlsZSAocGRhZGNfMCA8IG1heF9pZHgpCisJCQlwZGFkY19vdXRbcGRhZGNfaSsrXSA9IHBkYWRjX3RtcFtwZGFkY18wKytdOworCisJCS8qIE5lZWQgdG8gZXh0cmFwb2xhdGUgYWJvdmUgdGhpcyBwZGdhaW4/ICovCisJCWlmIChwZGFkY19uIDw9IG1heF9pZHgpCisJCQljb250aW51ZTsKKworCQkvKiBGb3JjZSBlYWNoIHBvd2VyIHN0ZXAgdG8gYmUgYXQgbGVhc3QgMC41IGRCICovCisJCWlmICgocGRhZGNfdG1wW3RhYmxlX3NpemUgLSAxXSAtIHBkYWRjX3RtcFt0YWJsZV9zaXplIC0gMl0pID4gMSkKKwkJCXB3cl9zdGVwID0gcGRhZGNfdG1wW3RhYmxlX3NpemUgLSAxXSAtCisJCQkJCQlwZGFkY190bXBbdGFibGVfc2l6ZSAtIDJdOworCQllbHNlCisJCQlwd3Jfc3RlcCA9IDE7CisKKwkJLyogRXh0cmFwb2xhdGUgYWJvdmUgKi8KKwkJd2hpbGUgKChwZGFkY18wIDwgKHMxNikgcGRhZGNfbikgJiYKKwkJKHBkYWRjX2kgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFICogMikpIHsKKwkJCXMxNiB0bXAgPSBwZGFkY190bXBbdGFibGVfc2l6ZSAtIDFdICsKKwkJCQkJKHBkYWRjXzAgLSBtYXhfaWR4KSAqIHB3cl9zdGVwOworCQkJcGRhZGNfb3V0W3BkYWRjX2krK10gPSAodG1wID4gMTI3KSA/IDEyNyA6ICh1OCkgdG1wOworCQkJcGRhZGNfMCsrOworCQl9CisJfQorCisJd2hpbGUgKHBkZyA8IEFSNUtfRUVQUk9NX05fUERfR0FJTlMpIHsKKwkJZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPSBnYWluX2JvdW5kYXJpZXNbcGRnIC0gMV07CisJCXBkZysrOworCX0KKworCXdoaWxlIChwZGFkY19pIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSAqIDIpIHsKKwkJcGRhZGNfb3V0W3BkYWRjX2ldID0gcGRhZGNfb3V0W3BkYWRjX2kgLSAxXTsKKwkJcGRhZGNfaSsrOworCX0KKworCS8qIFNldCBnYWluIGJvdW5kYXJpZXMgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCUFSNUtfUkVHX1NNKHBkX2dhaW5fb3ZlcmxhcCwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1swXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8xKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1sxXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8yKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1syXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8zKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1szXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV80KSwKKwkJQVI1S19QSFlfVFBDX1JHNSk7CisKKwkvKiBVc2VkIGZvciBzZXR0aW5nIHJhdGUgcG93ZXIgdGFibGUgKi8KKwlhaC0+YWhfdHhwb3dlci50eHBfbWluX2lkeCA9IHB3cl9taW5bMF07CisKK30KKworLyogV3JpdGUgUERBREMgdmFsdWVzIG9uIGh3ICovCitzdGF0aWMgdm9pZAorYXRoNWtfc2V0dXBfcHdyX3RvX3BkYWRjX3RhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQl1OCBwZGN1cnZlcywgdTggKnBkZ190b19pZHgpCit7CisJdTggKnBkYWRjX291dCA9IGFoLT5haF90eHBvd2VyLnR4cF9wZF90YWJsZTsKKwl1MzIgcmVnOworCXU4IGk7CisKKwkvKiBTZWxlY3QgdGhlIHJpZ2h0IHBkZ2FpbiBjdXJ2ZXMgKi8KKworCS8qIENsZWFyIGN1cnJlbnQgc2V0dGluZ3MgKi8KKwlyZWcgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfVFBDX1JHMSk7CisJcmVnICY9IH4oQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMSB8CisJCUFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzIgfAorCQlBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8zIHwKKwkJQVI1S19QSFlfVFBDX1JHMV9OVU1fUERfR0FJTik7CisKKwkvKgorCSAqIFVzZSBwZF9nYWlucyBjdXJ2ZSBmcm9tIGVlcHJvbQorCSAqCisJICogVGhpcyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZyBmcm9tIGluaXR2YWxzCisJICogaW4gY2FzZSBzb21lIHZlbmRvcnMgKGUuZy4gWmNvbWF4KSBkb24ndCB1c2UgdGhlIGRlZmF1bHQKKwkgKiBjdXJ2ZXMuIElmIHdlIGRvbid0IGhvbm9yIHRoZWlyIHNldHRpbmdzIHdlICdsbCBnZXQgYQorCSAqIDVkQiAoMSAqIGdhaW4gb3ZlcmxhcCA/KSBkcm9wLgorCSAqLworCXJlZyB8PSBBUjVLX1JFR19TTShwZGN1cnZlcywgQVI1S19QSFlfVFBDX1JHMV9OVU1fUERfR0FJTik7CisKKwlzd2l0Y2ggKHBkY3VydmVzKSB7CisJY2FzZSAzOgorCQlyZWcgfD0gQVI1S19SRUdfU00ocGRnX3RvX2lkeFsyXSwgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMyk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgMjoKKwkJcmVnIHw9IEFSNUtfUkVHX1NNKHBkZ190b19pZHhbMV0sIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzIpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIDE6CisJCXJlZyB8PSBBUjVLX1JFR19TTShwZGdfdG9faWR4WzBdLCBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8xKTsKKwkJYnJlYWs7CisJfQorCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmVnLCBBUjVLX1BIWV9UUENfUkcxKTsKKworCS8qCisJICogV3JpdGUgVFggcG93ZXIgdmFsdWVzCisJICovCisJZm9yIChpID0gMDsgaSA8IChBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFIC8gMik7IGkrKykgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQkoKHBkYWRjX291dFs0KmkgKyAwXSAmIDB4ZmYpIDw8IDApIHwKKwkJCSgocGRhZGNfb3V0WzQqaSArIDFdICYgMHhmZikgPDwgOCkgfAorCQkJKChwZGFkY19vdXRbNCppICsgMl0gJiAweGZmKSA8PCAxNikgfAorCQkJKChwZGFkY19vdXRbNCppICsgM10gJiAweGZmKSA8PCAyNCksCisJCQlBUjVLX1BIWV9QREFEQ19UWFBPV0VSKGkpKTsKKwl9Cit9CisKKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBQQ0RBQy9QREFEQyB0YWJsZXMKKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IHVzZXMgYWxsIG9mIHRoZSBhYm92ZQorICogdG8gc2V0IFBDREFDL1BEQURDIHRhYmxlIG9uIGh3IGZvciB0aGUgY3VycmVudCBjaGFubmVsLgorICogVGhpcyB0YWJsZSBpcyB1c2VkIGZvciB0eCBwb3dlciBjYWxpYnJhdGlvbiBvbiB0aGUgYmFzYmFuZCwKKyAqIHdpdGhvdXQgaXQgd2UgZ2V0IHdlaXJkIHR4IHBvd2VyIGxldmVscyBhbmQgaW4gc29tZSBjYXNlcworICogZGlzdG9ydGVkIHNwZWN0cmFsIG1hc2sKKyAqLworc3RhdGljIGludAorYXRoNWtfc2V0dXBfY2hhbm5lbF9wb3dlcnRhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQl1OCBlZV9tb2RlLCB1OCB0eXBlKQoreworCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGRnX0wsICpwZGdfUjsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjaW5mb19MOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNpbmZvX1I7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTggKnBkZ19jdXJ2ZV90b19pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFtlZV9tb2RlXTsKKwlzMTYgdGFibGVfbWluW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOworCXMxNiB0YWJsZV9tYXhbQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJdTggKnRtcEw7CisJdTggKnRtcFI7CisJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCWludCBwZGcsIGk7CisKKwkvKiBHZXQgc3Vyb3VuZGluZyBmcmVxIHBpZXJzIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlhdGg1a19nZXRfY2hhbl9wY2FsX3N1cnJvdW5kaW5nX3BpZXJzKGFoLCBjaGFubmVsLAorCQkJCQkJJnBjaW5mb19MLAorCQkJCQkJJnBjaW5mb19SKTsKKworCS8qIExvb3Agb3ZlciBwZCBnYWluIGN1cnZlcyBvbgorCSAqIHN1cm91bmRpbmcgZnJlcSBwaWVycyBieSBpbmRleCAqLworCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdOyBwZGcrKykgeworCisJCS8qIEZpbGwgY3VydmVzIGluIHJldmVyc2Ugb3JkZXIKKwkJICogZnJvbSBsb3dlciBwb3dlciAobWF4IGdhaW4pCisJCSAqIHRvIGhpZ2hlciBwb3dlci4gVXNlIGN1cnZlIC0+IGlkeAorCQkgKiBiYWNrbWFwaW5nIHdlIGRpZCBvbiBlZXByb20gaW5pdCAqLworCQl1OCBpZHggPSBwZGdfY3VydmVfdG9faWR4W3BkZ107CisKKwkJLyogR3JhYiB0aGUgbmVlZGVkIGN1cnZlcyBieSBpbmRleCAqLworCQlwZGdfTCA9ICZwY2luZm9fTC0+cGRfY3VydmVzW2lkeF07CisJCXBkZ19SID0gJnBjaW5mb19SLT5wZF9jdXJ2ZXNbaWR4XTsKKworCQkvKiBJbml0aWFsaXplIHRoZSB0ZW1wIHRhYmxlcyAqLworCQl0bXBMID0gYWgtPmFoX3R4cG93ZXIudG1wTFtwZGddOworCQl0bXBSID0gYWgtPmFoX3R4cG93ZXIudG1wUltwZGddOworCisJCS8qIFNldCBjdXJ2ZSdzIHggYm91bmRhcmllcyBhbmQgY3JlYXRlCisJCSAqIGN1cnZlcyBzbyB0aGF0IHRoZXkgY292ZXIgdGhlIHNhbWUKKwkJICogcmFuZ2UgKGlmIHdlIGRvbid0IGRvIHRoYXQgb25lIHRhYmxlCisJCSAqIHdpbGwgaGF2ZSB2YWx1ZXMgb24gc29tZSByYW5nZSBhbmQgdGhlCisJCSAqIG90aGVyIG9uZSB3b24ndCBoYXZlIGFueSBzbyBpbnRlcnBvbGF0aW9uCisJCSAqIHdpbGwgZmFpbCkgKi8KKwkJdGFibGVfbWluW3BkZ10gPSBtaW4ocGRnX0wtPnBkX3B3clswXSwKKwkJCQkJcGRnX1ItPnBkX3B3clswXSkgLyAyOworCisJCXRhYmxlX21heFtwZGddID0gbWF4KHBkZ19MLT5wZF9wd3JbcGRnX0wtPnBkX3BvaW50cyAtIDFdLAorCQkJCXBkZ19SLT5wZF9wd3JbcGRnX1ItPnBkX3BvaW50cyAtIDFdKSAvIDI7CisKKwkJLyogTm93IGNyZWF0ZSB0aGUgY3VydmVzIG9uIHN1cnJvdW5kaW5nIGNoYW5uZWxzCisJCSAqIGFuZCBpbnRlcnBvbGF0ZSBpZiBuZWVkZWQgdG8gZ2V0IHRoZSBmaW5hbAorCQkgKiBjdXJ2ZSBmb3IgdGhpcyBnYWluIG9uIHRoaXMgY2hhbm5lbCAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBBUjVLX1BXUlRBQkxFX0xJTkVBUl9QQ0RBQzoKKwkJCS8qIE92ZXJyaWRlIG1pbi9tYXggc28gdGhhdCB3ZSBkb24ndCBsb29zZQorCQkJICogYWNjdXJhY3kgKGRvbid0IGRpdmlkZSBieSAyKSAqLworCQkJdGFibGVfbWluW3BkZ10gPSBtaW4ocGRnX0wtPnBkX3B3clswXSwKKwkJCQkJCXBkZ19SLT5wZF9wd3JbMF0pOworCisJCQl0YWJsZV9tYXhbcGRnXSA9CisJCQkJbWF4KHBkZ19MLT5wZF9wd3JbcGRnX0wtPnBkX3BvaW50cyAtIDFdLAorCQkJCQlwZGdfUi0+cGRfcHdyW3BkZ19SLT5wZF9wb2ludHMgLSAxXSk7CisKKwkJCS8qIE92ZXJyaWRlIG1pbmltdW0gc28gdGhhdCB3ZSBkb24ndCBnZXQKKwkJCSAqIG91dCBvZiBib3VuZHMgd2hpbGUgZXh0cmFwb2xhdGluZworCQkJICogYmVsb3cuIERvbid0IGRvIHRoaXMgd2hlbiB3ZSBoYXZlIDIKKwkJCSAqIGN1cnZlcyBhbmQgd2UgYXJlIG9uIHRoZSBoaWdoIHBvd2VyIGN1cnZlCisJCQkgKiBiZWNhdXNlIHRhYmxlX21pbiBpcyBvayBpbiB0aGlzIGNhc2UgKi8KKwkJCWlmICghKGVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXSA+IDEgJiYgcGRnID09IDApKSB7CisKKwkJCQl0YWJsZV9taW5bcGRnXSA9CisJCQkJCWF0aDVrX2dldF9saW5lYXJfcGNkYWNfbWluKHBkZ19MLT5wZF9zdGVwLAorCQkJCQkJCQlwZGdfUi0+cGRfc3RlcCwKKwkJCQkJCQkJcGRnX0wtPnBkX3B3ciwKKwkJCQkJCQkJcGRnX1ItPnBkX3B3cik7CisKKwkJCQkvKiBEb24ndCBnbyB0b28gbG93IGJlY2F1c2Ugd2Ugd2lsbAorCQkJCSAqIG1pc3MgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIGN1cnZlLgorCQkJCSAqIE5vdGU6IDEyNiA9IDMxLjVkQiAobWF4IHBvd2VyIHN1cHBvcnRlZCkKKwkJCQkgKiBpbiAwLjI1ZEIgdW5pdHMgKi8KKwkJCQlpZiAodGFibGVfbWF4W3BkZ10gLSB0YWJsZV9taW5bcGRnXSA+IDEyNikKKwkJCQkJdGFibGVfbWluW3BkZ10gPSB0YWJsZV9tYXhbcGRnXSAtIDEyNjsKKwkJCX0KKworCQkJLyogRmFsbCB0aHJvdWdoICovCisJCWNhc2UgQVI1S19QV1JUQUJMRV9QV1JfVE9fUENEQUM6CisJCWNhc2UgQVI1S19QV1JUQUJMRV9QV1JfVE9fUERBREM6CisKKwkJCWF0aDVrX2NyZWF0ZV9wb3dlcl9jdXJ2ZSh0YWJsZV9taW5bcGRnXSwKKwkJCQkJCXRhYmxlX21heFtwZGddLAorCQkJCQkJcGRnX0wtPnBkX3B3ciwKKwkJCQkJCXBkZ19MLT5wZF9zdGVwLAorCQkJCQkJcGRnX0wtPnBkX3BvaW50cywgdG1wTCwgdHlwZSk7CisKKwkJCS8qIFdlIGFyZSBpbiBhIGNhbGlicmF0aW9uCisJCQkgKiBwaWVyLCBubyBuZWVkIHRvIGludGVycG9sYXRlCisJCQkgKiBiZXR3ZWVuIGZyZXEgcGllcnMgKi8KKwkJCWlmIChwY2luZm9fTCA9PSBwY2luZm9fUikKKwkJCQljb250aW51ZTsKKworCQkJYXRoNWtfY3JlYXRlX3Bvd2VyX2N1cnZlKHRhYmxlX21pbltwZGddLAorCQkJCQkJdGFibGVfbWF4W3BkZ10sCisJCQkJCQlwZGdfUi0+cGRfcHdyLAorCQkJCQkJcGRnX1ItPnBkX3N0ZXAsCisJCQkJCQlwZGdfUi0+cGRfcG9pbnRzLCB0bXBSLCB0eXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBJbnRlcnBvbGF0ZSBiZXR3ZWVuIGN1cnZlcworCQkgKiBvZiBzdXJvdW5kaW5nIGZyZXEgcGllcnMgdG8KKwkJICogZ2V0IHRoZSBmaW5hbCBjdXJ2ZSBmb3IgdGhpcworCQkgKiBwZCBnYWluLiBSZS11c2UgdG1wTCBmb3IgaW50ZXJwb2xhdGlvbgorCQkgKiBvdXRwdXQgKi8KKwkJZm9yIChpID0gMDsgKGkgPCAodTE2KSAodGFibGVfbWF4W3BkZ10gLSB0YWJsZV9taW5bcGRnXSkpICYmCisJCShpIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSk7IGkrKykgeworCQkJdG1wTFtpXSA9ICh1OCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsCisJCQkJCQkJKHMxNikgcGNpbmZvX0wtPmZyZXEsCisJCQkJCQkJKHMxNikgcGNpbmZvX1ItPmZyZXEsCisJCQkJCQkJKHMxNikgdG1wTFtpXSwKKwkJCQkJCQkoczE2KSB0bXBSW2ldKTsKKwkJfQorCX0KKworCS8qIE5vdyB3ZSBoYXZlIGEgc2V0IG9mIGN1cnZlcyBmb3IgdGhpcworCSAqIGNoYW5uZWwgb24gdG1wTCAoeCByYW5nZSBpcyB0YWJsZV9tYXggLSB0YWJsZV9taW4KKwkgKiBhbmQgeSB2YWx1ZXMgYXJlIHRtcExbcGRnXVtdKSBzb3J0ZWQgaW4gdGhlIHNhbWUKKwkgKiBvcmRlciBhcyBFRVBST00gKGJlY2F1c2Ugd2UndmUgdXNlZCB0aGUgYmFja21hcGluZykuCisJICogU28gZm9yIFJGNTExMiBpdCdzIGZyb20gaGlnaGVyIHBvd2VyIHRvIGxvd2VyIHBvd2VyCisJICogYW5kIGZvciBSRjI0MTMgaXQncyBmcm9tIGxvd2VyIHBvd2VyIHRvIGhpZ2hlciBwb3dlci4KKwkgKiBGb3IgUkY1MTExIHdlIG9ubHkgaGF2ZSBvbmUgY3VydmUuICovCisKKwkvKiBGaWxsIG1pbiBhbmQgbWF4IHBvd2VyIGxldmVscyBmb3IgdGhpcworCSAqIGNoYW5uZWwgYnkgaW50ZXJwb2xhdGluZyB0aGUgdmFsdWVzIG9uCisJICogc3Vyb3VuZGluZyBjaGFubmVscyB0byBjb21wbGV0ZSB0aGUgZGF0YXNldCAqLworCWFoLT5haF90eHBvd2VyLnR4cF9taW5fcHdyID0gYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsCisJCQkJCShzMTYpIHBjaW5mb19MLT5mcmVxLAorCQkJCQkoczE2KSBwY2luZm9fUi0+ZnJlcSwKKwkJCQkJcGNpbmZvX0wtPm1pbl9wd3IsIHBjaW5mb19SLT5taW5fcHdyKTsKKworCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsCisJCQkJCShzMTYpIHBjaW5mb19MLT5mcmVxLAorCQkJCQkoczE2KSBwY2luZm9fUi0+ZnJlcSwKKwkJCQkJcGNpbmZvX0wtPm1heF9wd3IsIHBjaW5mb19SLT5tYXhfcHdyKTsKKworCS8qIFdlIGFyZSByZWFkeSB0byBnbywgZmlsbCBQQ0RBQy9QREFEQworCSAqIHRhYmxlIGFuZCB3cml0ZSBzZXR0aW5ncyBvbiBoYXJkd2FyZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUM6CisJCS8qIEZvciBSRjUxMTIgd2UgY2FuIGhhdmUgb25lIG9yIHR3byBjdXJ2ZXMKKwkJICogYW5kIGVhY2ggY3VydmUgY292ZXJzIGEgY2VydGFpbiBwb3dlciBsdmwKKwkJICogcmFuZ2Ugc28gd2UgbmVlZCB0byBkbyBzb21lIG1vcmUgcHJvY2Vzc2luZyAqLworCQlhdGg1a19jb21iaW5lX2xpbmVhcl9wY2RhY19jdXJ2ZXMoYWgsIHRhYmxlX21pbiwgdGFibGVfbWF4LAorCQkJCQkJZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdKTsKKworCQkvKiBTZXQgdHhwLm9mZnNldCBzbyB0aGF0IHdlIGNhbgorCQkgKiBtYXRjaCBtYXggcG93ZXIgdmFsdWUgd2l0aCBtYXgKKwkJICogdGFibGUgaW5kZXggKi8KKwkJYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldCA9IDY0IC0gKHRhYmxlX21heFswXSAvIDIpOworCisJCS8qIFdyaXRlIHNldHRpbmdzIG9uIGh3ICovCisJCWF0aDVrX3NldHVwX3BjZGFjX3RhYmxlKGFoKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1BXUlRBQkxFX1BXUl9UT19QQ0RBQzoKKwkJLyogV2UgYXJlIGRvbmUgZm9yIFJGNTExMSBzaW5jZSBpdCBoYXMgb25seQorCQkgKiBvbmUgY3VydmUsIGp1c3QgZml0IHRoZSBjdXJ2ZSBvbiB0aGUgdGFibGUgKi8KKwkJYXRoNWtfZmlsbF9wd3JfdG9fcGNkYWNfdGFibGUoYWgsIHRhYmxlX21pbiwgdGFibGVfbWF4KTsKKworCQkvKiBObyByYXRlIHBvd2VydGFibGUgYWRqdXN0bWVudCBmb3IgUkY1MTExICovCisJCWFoLT5haF90eHBvd2VyLnR4cF9taW5faWR4ID0gMDsKKwkJYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldCA9IDA7CisKKwkJLyogV3JpdGUgc2V0dGluZ3Mgb24gaHcgKi8KKwkJYXRoNWtfc2V0dXBfcGNkYWNfdGFibGUoYWgpOworCQlicmVhazsKKwljYXNlIEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDOgorCQkvKiBTZXQgUERBREMgYm91bmRhcmllcyBhbmQgZmlsbAorCQkgKiBmaW5hbCBQREFEQyB0YWJsZSAqLworCQlhdGg1a19jb21iaW5lX3B3cl90b19wZGFkY19jdXJ2ZXMoYWgsIHRhYmxlX21pbiwgdGFibGVfbWF4LAorCQkJCQkJZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdKTsKKworCQkvKiBXcml0ZSBzZXR0aW5ncyBvbiBodyAqLworCQlhdGg1a19zZXR1cF9wd3JfdG9fcGRhZGNfdGFibGUoYWgsIHBkZywgcGRnX2N1cnZlX3RvX2lkeCk7CisKKwkJLyogU2V0IHR4cC5vZmZzZXQsIG5vdGUgdGhhdCB0YWJsZV9taW4KKwkJICogY2FuIGJlIG5lZ2F0aXZlICovCisJCWFoLT5haF90eHBvd2VyLnR4cF9vZmZzZXQgPSB0YWJsZV9taW5bMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBQZXItcmF0ZSB0eCBwb3dlciBzZXR0aW5nCisgKgorICogVGhpcyBpcyB0aGUgY29kZSB0aGF0IHNldHMgdGhlIGRlc2lyZWQgdHggcG93ZXIgKGJlbG93CisgKiBtYXhpbXVtKSBvbiBodyBmb3IgZWFjaCByYXRlICh3ZSBhbHNvIGhhdmUgVFBDIHRoYXQgc2V0cworICogcG93ZXIgcGVyIHBhY2tldCkuIFdlIGRvIHRoYXQgYnkgcHJvdmlkaW5nIGFuIGluZGV4IG9uIHRoZQorICogUENEQUMvUERBREMgdGFibGUgd2Ugc2V0IHVwLgorICovCisKKy8qCisgKiBTZXQgcmF0ZSBwb3dlciB0YWJsZQorICoKKyAqIEZvciBub3cgd2Ugb25seSBsaW1pdCB0eHBvd2VyIGJhc2VkIG9uIG1heGltdW0gdHggcG93ZXIKKyAqIHN1cHBvcnRlZCBieSBodyAod2hhdCdzIGluc2lkZSByYXRlX2luZm8pLiBXZSBuZWVkIHRvIGxpbWl0CisgKiB0aGlzIGV2ZW4gbW9yZSwgYmFzZWQgb24gcmVndWxhdG9yeSBkb21haW4gZXRjLgorICoKKyAqIFJhdGUgcG93ZXIgdGFibGUgY29udGFpbnMgaW5kaWNlcyB0byBQQ0RBQy9QREFEQyB0YWJsZSAoMC41ZEIgc3RlcHMpCisgKiBhbmQgaXMgaW5kZXhlZCBhcyBmb2xsb3dzOgorICogcmF0ZXNbMF0gLSByYXRlc1s3XSAtPiBPRkRNIHJhdGVzCisgKiByYXRlc1s4XSAtIHJhdGVzWzE0XSAtPiBDQ0sgcmF0ZXMKKyAqIHJhdGVzWzE1XSAtPiBYUiByYXRlcyAodGhleSBhbGwgaGF2ZSB0aGUgc2FtZSBwb3dlcikKKyAqLworc3RhdGljIHZvaWQKK2F0aDVrX3NldHVwX3JhdGVfcG93ZXJ0YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgbWF4X3B3ciwKKwkJCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcmF0ZV9pbmZvLAorCQkJdTggZWVfbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYgKnJhdGVzOworCisJLyogbWF4X3B3ciBpcyBwb3dlciBsZXZlbCB3ZSBnb3QgZnJvbSBkcml2ZXIvdXNlciBpbiAwLjVkQgorCSAqIHVuaXRzLCBzd2l0Y2ggdG8gMC4yNWRCIHVuaXRzIHNvIHdlIGNhbiBjb21wYXJlICovCisJbWF4X3B3ciAqPSAyOworCW1heF9wd3IgPSBtaW4obWF4X3B3ciwgKHUxNikgYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IpIC8gMjsKKworCS8qIGFwcGx5IHJhdGUgbGltaXRzICovCisJcmF0ZXMgPSBhaC0+YWhfdHhwb3dlci50eHBfcmF0ZXNfcG93ZXJfdGFibGU7CisKKwkvKiBPRkRNIHJhdGVzIDYgdG8gMjRNYi9zICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcmF0ZXNbaV0gPSBtaW4obWF4X3B3ciwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNnRvMjQpOworCisJLyogUmVzdCBPRkRNIHJhdGVzICovCisJcmF0ZXNbNV0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzM2KTsKKwlyYXRlc1s2XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNDgpOworCXJhdGVzWzddID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl81NCk7CisKKwkvKiBDQ0sgcmF0ZXMgKi8KKwkvKiAxTCAqLworCXJhdGVzWzhdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl82dG8yNCk7CisJLyogMkwgKi8KKwlyYXRlc1s5XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfMzYpOworCS8qIDJTICovCisJcmF0ZXNbMTBdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl8zNik7CisJLyogNUwgKi8KKwlyYXRlc1sxMV0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzQ4KTsKKwkvKiA1UyAqLworCXJhdGVzWzEyXSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNDgpOworCS8qIDExTCAqLworCXJhdGVzWzEzXSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNTQpOworCS8qIDExUyAqLworCXJhdGVzWzE0XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNTQpOworCisJLyogWFIgcmF0ZXMgKi8KKwlyYXRlc1sxNV0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzZ0bzI0KTsKKworCS8qIENDSyByYXRlcyBoYXZlIGRpZmZlcmVudCBwZWFrIHRvIGF2ZXJhZ2UgcmF0aW8KKwkgKiBzbyB3ZSBoYXZlIHRvIHR3ZWFrIHRoZWlyIHBvd2VyIHNvIHRoYXQgZ2FpbmYKKwkgKiBjb3JyZWN0aW9uIHdvcmtzIG9rLiBGb3IgdGhpcyB3ZSB1c2UgT0ZETSB0bworCSAqIENDSyBkZWx0YSBmcm9tIGVlcHJvbSAqLworCWlmICgoZWVfbW9kZSA9PSBBUjVLX0VFUFJPTV9NT0RFXzExRykgJiYKKwkoYWgtPmFoX3BoeV9yZXZpc2lvbiA8IEFSNUtfU1JFVl9QSFlfNTIxMkEpKQorCQlmb3IgKGkgPSA4OyBpIDw9IDE1OyBpKyspCisJCQlyYXRlc1tpXSAtPSBhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fZ2FpbmZfZGVsdGE7CisKKwlhaC0+YWhfdHhwb3dlci50eHBfbWluX3B3ciA9IHJhdGVzWzddOworCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gcmF0ZXNbMF07CisJYWgtPmFoX3R4cG93ZXIudHhwX29mZG0gPSByYXRlc1s3XTsKK30KKworCisvKgorICogU2V0IHRyYW5zbWl0aW9uIHBvd2VyCisgKi8KK2ludAorYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCXU4IGVlX21vZGUsIHU4IHR4cG93ZXIpCit7CisJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvIHJhdGVfaW5mbzsKKwl1OCB0eXBlOworCWludCByZXQ7CisKKwlBVEg1S19UUkFDRShhaC0+YWhfc2MpOworCWlmICh0eHBvd2VyID4gQVI1S19UVU5FX01BWF9UWFBPV0VSKSB7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIHR4IHBvd2VyOiAldVxuIiwgdHhwb3dlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodHhwb3dlciA9PSAwKQorCQl0eHBvd2VyID0gQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUjsKKworCS8qIFJlc2V0IFRYIHBvd2VyIHZhbHVlcyAqLworCW1lbXNldCgmYWgtPmFoX3R4cG93ZXIsIDAsIHNpemVvZihhaC0+YWhfdHhwb3dlcikpOworCWFoLT5haF90eHBvd2VyLnR4cF90cGMgPSBBUjVLX1RVTkVfVFBDX1RYUE9XRVI7CisJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9wd3IgPSAwOworCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gQVI1S19UVU5FX01BWF9UWFBPV0VSOworCisJLyogSW5pdGlhbGl6ZSBUWCBwb3dlciB0YWJsZSAqLworCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJY2FzZSBBUjVLX1JGNTExMToKKwkJdHlwZSA9IEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BDREFDOworCQlicmVhazsKKwljYXNlIEFSNUtfUkY1MTEyOgorCQl0eXBlID0gQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUM7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MTM6CisJY2FzZSBBUjVLX1JGNTQxMzoKKwljYXNlIEFSNUtfUkYyMzE2OgorCWNhc2UgQVI1S19SRjIzMTc6CisJY2FzZSBBUjVLX1JGMjQyNToKKwkJdHlwZSA9IEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGSVhNRTogT25seSBvbiBjaGFubmVsL21vZGUgY2hhbmdlICovCisJcmV0ID0gYXRoNWtfc2V0dXBfY2hhbm5lbF9wb3dlcnRhYmxlKGFoLCBjaGFubmVsLCBlZV9tb2RlLCB0eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogTGltaXQgbWF4IHBvd2VyIGlmIHdlIGhhdmUgYSBDVEwgYXZhaWxhYmxlICovCisJYXRoNWtfZ2V0X21heF9jdGxfcG93ZXIoYWgsIGNoYW5uZWwpOworCisJLyogRklYTUU6IFR4IHBvd2VyIGxpbWl0IGZvciB0aGlzIHJlZ2RvbWFpbgorCSAqIFhYWDogTWFjODAyMTEvQ1JEQSB3aWxsIGRvIHRoYXQgYW55d2F5ID8gKi8KKworCS8qIEZJWE1FOiBBbnRlbm5hIHJlZHVjdGlvbiBzdHVmZiAqLworCisJLyogRklYTUU6IExpbWl0IHBvd2VyIG9uIHR1cmJvIG1vZGVzICovCisKKwkvKiBGSVhNRTogVFBDIHNjYWxlIHJlZHVjdGlvbiAqLworCisJLyogR2V0IHN1cm91bmRpbmcgY2hhbm5lbHMgZm9yIHBlci1yYXRlIHBvd2VyIHRhYmxlCisJICogY2FsaWJyYXRpb24gKi8KKwlhdGg1a19nZXRfcmF0ZV9wY2FsX2RhdGEoYWgsIGNoYW5uZWwsICZyYXRlX2luZm8pOworCisJLyogU2V0dXAgcmF0ZSBwb3dlciB0YWJsZSAqLworCWF0aDVrX3NldHVwX3JhdGVfcG93ZXJ0YWJsZShhaCwgdHhwb3dlciwgJnJhdGVfaW5mbywgZWVfbW9kZSk7CisKKwkvKiBXcml0ZSByYXRlIHBvd2VyIHRhYmxlIG9uIGh3ICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1RYUE9XRVJfT0ZETSgzLCAyNCkgfAogCQlBUjVLX1RYUE9XRVJfT0ZETSgyLCAxNikgfCBBUjVLX1RYUE9XRVJfT0ZETSgxLCA4KSB8CiAJCUFSNUtfVFhQT1dFUl9PRkRNKDAsIDApLCBBUjVLX1BIWV9UWFBPV0VSX1JBVEUxKTsKQEAgLTI0ODEsMjYgKzI1NjYsMzQgQEAKIAkJQVI1S19UWFBPV0VSX0NDSygxMywgMTYpIHwgQVI1S19UWFBPV0VSX0NDSygxMiwgOCkgfAogCQlBUjVLX1RYUE9XRVJfQ0NLKDExLCAwKSwgQVI1S19QSFlfVFhQT1dFUl9SQVRFNCk7CiAKLQlpZiAoYWgtPmFoX3R4cG93ZXIudHhwX3RwYykKKwkvKiBGSVhNRTogVFBDIHN1cHBvcnQgKi8KKwlpZiAoYWgtPmFoX3R4cG93ZXIudHhwX3RwYykgewogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVhfVFBDX0VOQUJMRSB8CiAJCQlBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgpOwotCWVsc2UKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQlBUjVLX1JFR19NUyhBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfVFBDX0FDSykgfAorCQkJQVI1S19SRUdfTVMoQVI1S19UVU5FX01BWF9UWFBPV0VSLCBBUjVLX1RQQ19DVFMpIHwKKwkJCUFSNUtfUkVHX01TKEFSNUtfVFVORV9NQVhfVFhQT1dFUiwgQVI1S19UUENfQ0hJUlApLAorCQkJQVI1S19UUEMpOworCX0gZWxzZSB7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFhQT1dFUl9SQVRFX01BWCB8CiAJCQlBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgpOworCX0KIAogCXJldHVybiAwOwogfQogCi1pbnQgYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHBvd2VyKQoraW50IGF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IG1vZGUsIHU4IHR4cG93ZXIpCiB7CiAJLypKdXN0IGEgdHJ5IE0uRi4qLwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9ICZhaC0+YWhfY3VycmVudF9jaGFubmVsOwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBVEg1S19EQkcoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19UWFBPV0VSLAotCQkiY2hhbmdpbmcgdHhwb3dlciB0byAlZFxuIiwgcG93ZXIpOworCQkiY2hhbmdpbmcgdHhwb3dlciB0byAlZFxuIiwgdHhwb3dlcik7CiAKLQlyZXR1cm4gYXRoNWtfaHdfdHhwb3dlcihhaCwgY2hhbm5lbCwgcG93ZXIpOworCXJldHVybiBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBtb2RlLCB0eHBvd2VyKTsKIH0KIAogI3VuZGVmIF9BVEg1S19QSFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3FjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKaW5kZXggMWI3YmM1MC4uNTA5NGMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogICovCiB1MzIgYXRoNWtfaHdfbnVtX3R4X3BlbmRpbmcoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQogeworCXUzMiBwZW5kaW5nOwogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKQEAgLTE1OSw3ICsxNjAsMTUgQEAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBBUjVLX1FVRVVFX1NUQVRVUyhxdWV1ZSkgJiBBUjVLX1FDVV9TVFNfRlJNUEVORENOVDsKKwlwZW5kaW5nID0gKEFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSAmIEFSNUtfUUNVX1NUU19GUk1QRU5EQ05UKTsKKworCS8qIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBubyBmcmFtZXMgcGVuZGluZyBldmVuIGlmIFRYRQorCSAqIGlzIHNldC4gVG8gaW5kaWNhdGUgdGhhdCBxIGhhcyBub3Qgc3RvcHBlZCByZXR1cm4KKwkgKiB0cnVlICovCisJaWYgKCFwZW5kaW5nICYmIEFSNUtfUkVHX1JFQURfUShhaCwgQVI1S19RQ1VfVFhFLCBxdWV1ZSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKIC8qCkBAIC0zMjQsOCArMzMzLDE4IEBACiAJCS8qCiAJCSAqIFNldCBtaXNjIHJlZ2lzdGVycwogCQkgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSwKLQkJCUFSNUtfUVVFVUVfTUlTQyhxdWV1ZSkpOworCQkvKiBFbmFibGUgRENVIGVhcmx5IHRlcm1pbmF0aW9uIGZvciB0aGlzIHF1ZXVlICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSk7CisKKwkJLyogRW5hYmxlIERDVSB0byB3YWl0IGZvciBuZXh0IGZyYWdtZW50IGZyb20gUUNVICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKKwkJCQkJQVI1S19EQ1VfTUlTQ19GUkFHX1dBSVQpOworCisJCS8qIE9uIE1hdWkgYW5kIFNwaXJpdCB1c2UgdGhlIGdsb2JhbCBzZXFudW0gb24gRENVICovCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPCBBUjVLX1NSRVZfQVI1MjExKQorCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAorCQkJCQkJQVI1S19EQ1VfTUlTQ19TRVFOVU1fQ1RMKTsKIAogCQlpZiAodHEtPnRxaV9jYnJfcGVyaW9kKSB7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKHRxLT50cWlfY2JyX3BlcmlvZCwKQEAgLTM0MSw3ICszNjAsOCBAQAogCQkJCQlBUjVLX1FDVV9NSVNDX0NCUl9USFJFU19FTkFCTEUpOwogCQl9CiAKLQkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSkKKwkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSAmJgorCQkodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfSURfQ0FCKSkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAogCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfSU5UVkFMKSB8CiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCkBAIC0zODMsMTMgKzQwMyw2IEBACiAJCQkJQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9TKSB8CiAJCQkJQVI1S19EQ1VfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyB8CiAJCQkJQVI1S19EQ1VfTUlTQ19CQ05fRU5BQkxFKTsKLQotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKEFSNUtfVFVORV9CRUFDT05fSU5URVJWQUwgLQotCQkJCShBUjVLX1RVTkVfU1dfQkVBQ09OX1JFU1AgLQotCQkJCUFSNUtfVFVORV9ETUFfQkVBQ09OX1JFU1ApIC0KLQkJCQlBUjVLX1RVTkVfQURESVRJT05BTF9TV0JBX0JBQ0tPRkYpICogMTAyNCkgfAotCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfRU5BQkxFLAotCQkJCUFSNUtfUVVFVUVfUkRZVElNRUNGRyhxdWV1ZSkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBUjVLX1RYX1FVRVVFX0NBQjoKQEAgLTM5OCw2ICs0MTEsMTMgQEAKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0JDTl9ESVMpOwogCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19UVU5FX0JFQUNPTl9JTlRFUlZBTCAtCisJCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCisJCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQorCQkJCUFSNUtfVFVORV9BRERJVElPTkFMX1NXQkFfQkFDS09GRikgKiAxMDI0KSB8CisJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCisJCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CisKIAkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKIAkJCQkoQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9HTE9CQUwgPDwKIAkJCQlBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX1MpKTsKQEAgLTQxMyw2ICs0MzMsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQkvKiBUT0RPOiBIYW5kbGUgZnJhbWUgY29tcHJlc3Npb24gKi8KKwogCQkvKgogCQkgKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB0eCBxdWV1ZQogCQkgKiBpbiB0aGUgc2Vjb25kYXJ5IGludGVycnVwdCBtYXNrIHJlZ2lzdGVycwpAQCAtNDgzLDYgKzUwNSw5IEBACiAJCSAqIGJ5IHNldHRpbmcgQVI1S19UWE5PRlJNIHRvIHplcm8gKi8KIAkJaWYgKGFoLT5haF90eHFfaW1yX25vZnJtID09IDApCiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfVFhOT0ZSTSk7CisKKwkJLyogU2V0IFFDVSBtYXNrIGZvciB0aGlzIERDVSB0byBzYXZlIHBvd2VyICovCisJCUFSNUtfUkVHX1dSSVRFX1EoYWgsIEFSNUtfUVVFVUVfUUNVTUFTSyhxdWV1ZSksIHF1ZXVlKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKaW5kZXggOTE4OWFiMS4uNzA3MGQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKQEAgLTE4Nyw2ICsxODcsNyBAQAogI2RlZmluZSBBUjVLX1RYQ0ZHX0ZSTVBBRF9ESVMJCTB4MDAwMDIwMDAJLyogWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX1JEWV9DQlJfRElTCQkweDAwMDA0MDAwCS8qIFJlYWR5IHRpbWUgQ0JSIGRpc2FibGUgWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX0pVTUJPX0ZSTV9NT0RFCTB4MDAwMDgwMDAJLyogSnVtYm8gZnJhbWUgbW9kZSBbNTIxMStdICovCisjZGVmaW5lCUFSNUtfVFhDRkdfRENVX0RCTF9CVUZfRElTCTB4MDAwMDgwMDAJLyogRGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG9uIERDVSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX0RDVV9DQUNISU5HX0RJUwkweDAwMDEwMDAwCS8qIERpc2FibGUgRENVIGNhY2hpbmcgKi8KIAogLyoKQEAgLTc1Myw3ICs3NTQsNyBAQAogICovCiAjZGVmaW5lIEFSNUtfRENVX1NFUU5VTV9CQVNFCQkweDExNDAKICNkZWZpbmUJQVI1S19EQ1VfU0VRTlVNX00JCTB4MDAwMDBmZmYKLSNkZWZpbmUJQVI1S19RVUVVRV9ERlNfU0VRTlVNKF9xKQlBUjVLX1FVRVVFX1JFRyhBUjVLX0RDVV9TRVFOVU1fQkFTRSwgX3EpCisjZGVmaW5lCUFSNUtfUVVFVUVfRENVX1NFUU5VTShfcSkJQVI1S19RVUVVRV9SRUcoQVI1S19EQ1VfU0VRTlVNX0JBU0UsIF9xKQogCiAvKgogICogRENVIGdsb2JhbCBJRlMgU0lGUyByZWdpc3RlcgpAQCAtODExLDYgKzgxMiw4IEBACiAKIC8qCiAgKiBEQ1UgdHJhbnNtaXQgZmlsdGVyIHRhYmxlIDAgKDMyIGVudHJpZXMpCisgKiBlYWNoIGVudHJ5IGNvbnRhaW5zIGEgMzJiaXQgc2xpY2Ugb2YgdGhlCisgKiAxMjhiaXQgdHggZmlsdGVyIGZvciBlYWNoIERDVSAoNCBzbGljZXMgcGVyIERDVSkKICAqLwogI2RlZmluZSBBUjVLX0RDVV9UWF9GSUxURVJfMF9CQVNFCTB4MTAzOAogI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMChfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8wX0JBU0UgKyAoX24gKiA2NCkpCkBAIC04MTksNyArODIyLDcgQEAKICAqIERDVSB0cmFuc21pdCBmaWx0ZXIgdGFibGUgMSAoMTYgZW50cmllcykKICAqLwogI2RlZmluZSBBUjVLX0RDVV9UWF9GSUxURVJfMV9CQVNFCTB4MTAzYwotI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMShfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UgKyAoKF9uIC0gMzIpICogNjQpKQorI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMShfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UgKyAoX24gKiA2NCkpCiAKIC8qCiAgKiBEQ1UgY2xlYXIgdHJhbnNtaXQgZmlsdGVyIHJlZ2lzdGVyCkBAIC0xNDQ3LDcgKzE0NTAsNyBAQAogCQkJCUFSNUtfVFNGX1UzMl81MjEwIDogQVI1S19UU0ZfVTMyXzUyMTEpCiAKIC8qCi0gKiBMYXN0IGJlYWNvbiB0aW1lc3RhbXAgcmVnaXN0ZXIKKyAqIExhc3QgYmVhY29uIHRpbWVzdGFtcCByZWdpc3RlciAoUmVhZCBPbmx5KQogICovCiAjZGVmaW5lIEFSNUtfTEFTVF9UU1RQCTB4ODA4MAogCkBAIC0xNDY1LDcgKzE0NjgsNyBAQAogI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFJJR19QVFkJMHgwMDAyMDAwMAkvKiBUcmlnZ2VyIHBvbGFyaXR5ICovCiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9SWENPTlQJCTB4MDAwNDAwMDAJLyogQ29udGludW91cyBjYXB0dXJlICovCiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9DQVBUVVJFCQkweDAwMDgwMDAwCS8qIEJlZ2luIGNhcHR1cmUgKi8KLSNkZWZpbmUgQVI1S19BRERBQ19URVNUX1RTVF9BUk0JCTB4MDAxMDAwMDAJLyogVGVzdCBBUk0gKEFkYXB0aXZlIFJhZGlvIE1vZGUgPykgKi8KKyNkZWZpbmUgQVI1S19BRERBQ19URVNUX1RTVF9BUk0JCTB4MDAxMDAwMDAJLyogQVJNIHJ4IGJ1ZmZlciBmb3IgY2FwdHVyZSAqLwogCiAvKgogICogRGVmYXVsdCBhbnRlbm5hIHJlZ2lzdGVyIFs1MjExK10KQEAgLTE1NTEsNiArMTU1NCwxOSBAQAogLyo9PT01MjEyIFNwZWNpZmljIFBDVSByZWdpc3RlcnM9PT0qLwogCiAvKgorICogVHJhbnNtaXQgcG93ZXIgY29udHJvbCByZWdpc3RlcgorICovCisjZGVmaW5lIEFSNUtfVFBDCQkJMHg4MGU4CisjZGVmaW5lIEFSNUtfVFBDX0FDSwkJCTB4MDAwMDAwM2YJLyogYWNrIGZyYW1lcyAqLworI2RlZmluZSBBUjVLX1RQQ19BQ0tfUwkJCTAKKyNkZWZpbmUgQVI1S19UUENfQ1RTCQkJMHgwMDAwM2YwMAkvKiBjdHMgZnJhbWVzICovCisjZGVmaW5lIEFSNUtfVFBDX0NUU19TCQkJOAorI2RlZmluZSBBUjVLX1RQQ19DSElSUAkJCTB4MDAzZjAwMDAJLyogY2hpcnAgZnJhbWVzICovCisjZGVmaW5lIEFSNUtfVFBDX0NISVJQX1MJCTE2CisjZGVmaW5lIEFSNUtfVFBDX0RPUFBMRVIJCTB4MGYwMDAwMDAJLyogZG9wcGxlciBjaGlycCBzcGFuICovCisjZGVmaW5lIEFSNUtfVFBDX0RPUFBMRVJfUwkJMjQKKworLyoKICAqIFhSIChlWHRlbmRlZCBSYW5nZSkgbW9kZSByZWdpc3RlcgogICovCiAjZGVmaW5lIEFSNUtfWFJNT0RFCQkJMHg4MGMwCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwpAQCAtMTY3Nyw3ICsxNjkzLDcgQEAKICAqIFRTRiBwYXJhbWV0ZXIgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNCQkJMHg4MTA0CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19NCQkweDAwMDAwMGZmCS8qIE1hc2sgZm9yIFRTRiBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQVI1S19UU0ZfUEFSTV9JTkMJCTB4MDAwMDAwZmYJLyogTWFzayBmb3IgVFNGIGluY3JlbWVudCAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19TCQkwCiAKIC8qCkBAIC0xNjg5LDcgKzE3MDUsNyBAQAogI2RlZmluZSBBUjVLX1FPU19OT0FDS19CSVRfT0ZGU0VUCTB4MDAwMDAwNzAJLyogPz8/ICovCiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVRfUwk0CiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUCTB4MDAwMDAxODAJLyogPz8/ICovCi0jZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUX1MJOAorI2RlZmluZSBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVF9TCTcKIAogLyoKICAqIFBIWSBlcnJvciBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE4NDgsMTUgKzE4NjQsMTQgQEAKICAqIFRTVF8yIChNaXNjIGNvbmZpZyBwYXJhbWV0ZXJzKQogICovCiAjZGVmaW5lCUFSNUtfUEhZX1RTVDIJCQkweDk4MDAJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJR19TRUwJCTB4MDAwMDAwMDEJLyogVHJpZ2dlciBzZWxlY3QgKD8pIChmaWVsZCA/KSAqLwotI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUcJCTB4MDAwMDAwMTAJLyogVHJpZ2dlciAoPykgKGZpZWxkID8pICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0JVU19NT0RFCQkweDAwMDAwMTAwCS8qIENhcmRidXMgbW9kZSAoPykgKi8KLS8qIGJpdCByZXNlcnZlZCAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUdfU0VMCQkweDAwMDAwMDA3CS8qIFRyaWdnZXIgc2VsZWN0ICg/KSovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJRwkJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyICg/KSAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX0NCVVNfTU9ERQkJMHgwMDAwMDA2MAkvKiBDYXJkYnVzIG1vZGUgKD8pICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0xLMzIJCTB4MDAwMDA0MDAJLyogQ0xLX09VVCBpcyBDTEszMiAoMzJLaHogZXh0ZXJuYWwpICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0hBTkNPUl9EVU1QX0VOCTB4MDAwMDA4MDAJLyogRW5hYmxlIENoYW5jb3IgZHVtcCAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9FVkVOX0NIQU5DT1JfRFVNUAkweDAwMDAxMDAwCS8qIEV2ZW4gQ2hhbmNvciBkdW1wICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1JGU0lMRU5UX0VOCTB4MDAwMDIwMDAJLyogRW5hYmxlIFJGU0lMRU5UICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2gpICovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2ggPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9NSU5JX09CU19FTgkweDAwMDA4MDAwCS8qIEVuYWJsZSBtaW5pIE9CUyAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9SWDJfSVNfUlg1X0lOVgkweDAwMDEwMDAwCS8qIDJHSHogcnggcGF0aCBpcyB0aGUgNUdIeiBwYXRoIGludmVydGVkICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1NMT1dfQ0xLMTYwCTB4MDAwMjAwMDAJLyogU2xvdyBDTEsxNjAgKD8pICovCkBAIC0xOTI2LDggKzE5NDEsOCBAQAogI2RlZmluZQlBUjVLX1BIWV9SRl9DVEwyX1RYRjJUWERfU1RBUlRfUwkwCiAKICNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMMwkJMHg5ODI4CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1BIWV9SRl9DVEwzX1RYRTJYTE5BX09OCTB4MDAwMDAwMGYJLyogVFggZW5kIHRvIFhMTkEgb24gKi8KLSNkZWZpbmUJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTl9TCTAKKyNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTgkweDAwMDBmZjAwCS8qIFRYIGVuZCB0byBYTE5BIG9uICovCisjZGVmaW5lCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT05fUwk4CiAKICNkZWZpbmUJQVI1S19QSFlfQURDX0NUTAkJCTB4OTgyYwogI2RlZmluZQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PRkYJCTB4MDAwMDAwMDMKQEAgLTE5NjEsNyArMTk3Niw3IEBACiAjZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5HX0FHQwkJMHgwMDAwMDA3ZgkvKiBBR0Mgc2V0dGxpbmcgdGltZSAqLwogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19BR0NfUwkJMAogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gJMHgwMDAwM2Y4MAkvKiBTd2l0Y2ggc2V0dGxpZyB0aW1lICovCi0jZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5LX1NXSVRDSF9TCTcKKyNkZWZpbmUJQVI1S19QSFlfU0VUVExJTkdfU1dJVENIX1MJNwogCiAvKgogICogUEhZIEdhaW4gcmVnaXN0ZXJzCkBAIC0yMDY3LDE0ICsyMDgyLDE0IEBACiAgKiBQSFkgc2xlZXAgcmVnaXN0ZXJzIFs1MTEyK10KICAqLwogI2RlZmluZSBBUjVLX1BIWV9TQ1IJCQkweDk4NzAKLSNkZWZpbmUgQVI1S19QSFlfU0NSXzMyTUhaCQkweDAwMDAwMDFmCiAKICNkZWZpbmUgQVI1S19QSFlfU0xNVAkJCTB4OTg3NAogI2RlZmluZSBBUjVLX1BIWV9TTE1UXzMyTUhaCQkweDAwMDAwMDdmCiAKICNkZWZpbmUgQVI1S19QSFlfU0NBTAkJCTB4OTg3OAogI2RlZmluZSBBUjVLX1BIWV9TQ0FMXzMyTUhaCQkweDAwMDAwMDBlCi0KKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3CTB4MDAwMDAwMGEKKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzCTB4MDAwMDAwMzIKIAogLyoKICAqIFBIWSBQTEwgKFBoYXNlIExvY2tlZCBMb29wKSBjb250cm9sIHJlZ2lzdGVyCkBAIC0yMTAxLDM0ICsyMTE2LDEwIEBACiAvKgogICogUkYgQnVmZmVyIHJlZ2lzdGVyCiAgKgotICogVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjb250cm9sIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAotICogdGhhdCBob2xkIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCi0gKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KLSAqCi0gKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0Ci0gKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGJ1ZmZlciByZWdpc3RlciBhbmQKLSAqIHRoZW4gd3JpdGUgb24gYW5vdGhlciBzcGVjaWFsIHJlZ2lzdGVyIHRvIG5vdGlmeSBodwotICogdG8gYXBwbHkgdGhlIHNldHRpbmdzLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBjb250cm9sIHJlZ2lzdGVycwotICogY2FuIGJlIGR5bmFtaWNhbHkgcHJvZ3JhbW1lZCBkdXJpbmcgb3BlcmF0aW9uIGFuZCB0aGUgc2V0dGluZ3MKLSAqIGFyZSBhcHBsaWVkIGZhc3RlciBvbiB0aGUgaHcuCi0gKgotICogV2Ugc2VudCBzdWNoIGRhdGEgcGFja2V0cyBkdXJpbmcgcmYgaW5pdGlhbGl6YXRpb24gYW5kIGNoYW5uZWwgY2hhbmdlCi0gKiB0aHJvdWdoIGF0aDVrX2h3X3JmKl9yZnJlZ3MgYW5kIGF0aDVrX2h3X3JmKl9jaGFubmVsIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgZGF0YSBwYWNrZXRzIHdlIHNlbmQgZHVyaW5nIGluaXRpYWxpemFkaW9uIGFyZSBpbnNpZGUgYXRoNWtfaW5pX3JmCi0gKiBzdHJ1Y3QgKHNlZSBhdGg1a19ody5oKSBhbmQgZWFjaCBvbmUgaXMgcmVsYXRlZCB0byBhbiAicmYgcmVnaXN0ZXIgYmFuayIuCi0gKiBXZSB1c2UgKnJmcmVncyBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZW0gIGFjb3JkaW5nIHRvIGN1cnJlbnQgb3BlcmF0aW9uCi0gKiBtb2RlIGFuZCBlZXByb20gdmFsdWVzIGFuZCBwYXNzIHRoZW0gYWxsIHRvZ2V0aGVyIHRvIHRoZSBjaGlwLgotICoKICAqIEl0J3Mgb2J2aW91cyBmcm9tIHRoZSBjb2RlIHRoYXQgMHg5ODljIGlzIHRoZSBidWZmZXIgcmVnaXN0ZXIgYnV0CiAgKiBmb3IgdGhlIG90aGVyIHNwZWNpYWwgcmVnaXN0ZXJzIHRoYXQgd2Ugd3JpdGUgdG8gYWZ0ZXIgc2VuZGluZyBlYWNoCiAgKiBwYWNrZXQsIGkgaGF2ZSBubyBpZGVhLiBTbyBpJ2xsIG5hbWUgdGhlbSBCVUZGRVJfQ09OVFJPTF9YIHJlZ2lzdGVycwogICogZm9yIG5vdy4gSXQncyBpbnRlcmVzdGluZyB0aGF0IHRoZXkgYXJlIGFsc28gdXNlZCBmb3Igc29tZSBvdGhlciBvcGVyYXRpb25zLgotICoKLSAqIEFsc28gY2hlY2sgb3V0IGh3LmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgotICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6Ci0gKgotICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCiAgKi8KIAogI2RlZmluZSBBUjVLX1JGX0JVRkZFUgkJCTB4OTg5YwpAQCAtMjE3OCw3ICsyMTY5LDggQEAKICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIFRYL1JYICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9BTlRfQ1RMX1NFQ1RPUkVEX0FOVAkweDAwMDAwMDA0CS8qIFNlY3RvcmVkIEFudGVubmEgKi8KICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9ISVRVTkU1CTB4MDAwMDAwMDgJLyogSGl0dW5lNSAoPykgKi8KLSNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDAxMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDNmMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEVfUwk0CiAKIC8qCiAgKiBQSFkgcmVjZWl2ZXIgZGVsYXkgcmVnaXN0ZXIgWzUxMTErXQpAQCAtMjIxOCw3ICsyMjEwLDcgQEAKICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUgkJCTB4OTkyNAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKi8KICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIGN5Y2xpYyBSU1NJIHRociAxICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMQkweDAwMDAwMGZlCS8qIE1hc2sgZm9yIEN5Y2xpYyBSU1NJIHRocmVzaG9sZCAxICovCi0jZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMV9TCTAKKyNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX1MJMQogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjMJMHgwMDAwMDEwMAkvKiBDeWNsaWMgUlNTSSB0aHJlc2hvbGQgMyAoZmllbGQpICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX1JTU0lfMUFUSFJfRU4JMHgwMDAwODAwMAkvKiBFbmFibGUgMUEgUlNTSSB0aHJlc2hvbGQgKD8pICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfUlNTSV8xQVRIUgkweDAwMDEwMDAwCS8qIDFBIFJTU0kgdGhyZXNob2xkIChmaWVsZCkgKD8pICovCkBAIC0yMjQzLDkgKzIyMzUsNyBAQAogI2RlZmluZQlBUjVLX1BIWV9DVExfTE9XX0ZSRVFfU0xFX0VOCTB4MDAwMDAwODAJLyogRW5hYmxlIGxvdyBmcmVxIHNsZWVwICovCiAKIC8qCi0gKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMSsgKD8pXQotICogSXMgdGhpcyBvbmx5IHByZXNlbnQgaW4gNTIxMiA/Ci0gKiBCZWNhdXNlIGl0J3MgYWx3YXlzIDAgaW4gNTIxMSBpbml0aWFsaXphdGlvbiBjb2RlCisgKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMStdCiAgKi8KICNkZWZpbmUJQVI1S19QSFlfUEFQRF9QUk9CRQkJMHg5OTMwCiAjZGVmaW5lCUFSNUtfUEhZX1BBUERfUFJPQkVfU0hfSElfUEFSCTB4MDAwMDAwMDEKQEAgLTIzMDMsNiArMjI5MywxNSBAQAogCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RJTUlOR19FUlIKIAogLyoKKyAqIFBIWSBUeCBQb3dlciBhZGp1c3RtZW50IHJlZ2lzdGVyIFs1MjEyQStdCisgKi8KKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESgkJCTB4OTk0YworI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBCTB4MDAwMDBmYzAKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfR0FJTl9ERUxUQV9TCTYKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgJMHgwMGZjMDAwMAorI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19QQ0RBQ19JTkRFWF9TCTE4CisKKy8qCiAgKiBQSFkgcmFkYXIgZGV0ZWN0aW9uIHJlZ2lzdGVyIFs1MTExK10KICAqLwogI2RlZmluZQlBUjVLX1BIWV9SQURBUgkJCTB4OTk1NApAQCAtMjM1NSw3ICsyMzU0LDcgQEAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDJfUwkzCiAjZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0ZJTFQxCTB4MDAwMDFmMDAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDFfUwk4Ci0jZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQCTB4MDFmZjMwMDAKKyNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfQURDX0NMSVAJMHgwMWZmZTAwMAogI2RlZmluZSBBUjVLX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUF9TCTEzCiAKIC8qCkBAIC0yMzg3LDIxICsyMzg2LDIxIEBACiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNAkweDAwMDAzZmZmCiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNF9TCTAKIAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzkJCQkweDk5OTgKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMAkJMHg5OTljCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCTB4MDAwZmZmZmYKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR185CQkJMHg5OTk4CisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMAkJCTB4OTk5YworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCQkweDAwMGZmZmZmCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCiAKIC8qCiAgKiBTcHVyIG1pdGlnYXRpb24gY29udHJvbAogICovCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFCTB4MDAwZmZmZmYJLyogU3B1ciBkZWx0YSBwaGFzZSAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0VfUwkwCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0ZSRVFfU0RfUwkyMAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX0FHQwkweDQwMDAwMDAwCS8qIFNwdXIgZmlsdGVyIGluIEFHQyBkZXRlY3RvciAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0UJMHgwMDBmZmZmZgkvKiBTcHVyIGRlbHRhIHBoYXNlICovCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFX1MJMAorI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfRlJFUV9TRF9TCTIwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9VU0VfU1BVUl9JTl9BR0MJMHg0MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBBR0MgZGV0ZWN0b3IgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLwogCiAvKgogICogR2FpbiB0YWJsZXMKQEAgLTI0ODMsMTcgKzI0ODIsNyBAQAogI2RlZmluZSBBUjVLX1BIWV9TREVMQVkJCQkweDk5ZjQKICNkZWZpbmUgQVI1S19QSFlfU0RFTEFZXzMyTUhaCQkweDAwMDAwMGZmCiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HCQkweDk5ZjgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTQJCTB4MDAwMDAwMTQKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTgJCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyCTB4MDAwMDAwMTQKLS8qICNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyQQkweDAwMDAwMDBlICovCi0vKiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQyNAkweDAwMDAwMDEyICovCi0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNgkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNQkweDAwMDAwMDE0CisKIAogLyoKICAqIFBIWSBQQVBEIEkgKHBvd2VyPykgdGFibGUgKD8pCkBAIC0yNTA1LDExICsyNDk0LDcgQEAKIC8qCiAgKiBQSFkgUENEQUMgVFggcG93ZXIgdGFibGUKICAqLwotI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMQkweGExODAKLSNkZWZpbmUgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzI0MTMJMHhhMjgwCi0jZGVmaW5lIEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRQkoYWgtPmFoX3JhZGlvID49IEFSNUtfUkYyNDEzID8gXAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfMjQxMyA6XAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMSkKKyNkZWZpbmUJQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFCTB4YTE4MAogI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCiAKIC8qCkBAIC0yNTc4LDYgKzI1NjMsMTIgQEAKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHMQkJMHhhMjU4CiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzFfTlVNX1BEX0dBSU4JMHgwMDAwYzAwMAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkcxX05VTV9QRF9HQUlOX1MJMTQKKyNkZWZpbmUgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMQkweDAwMDMwMDAwCisjZGVmaW5lIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzFfUwkxNgorI2RlZmluZSBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8yCTB4MDAwYzAwMDAKKyNkZWZpbmUgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMl9TCTE4CisjZGVmaW5lIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzMJMHgwMDMwMDAwMAorI2RlZmluZSBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8zX1MJMjAKIAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1CQkJMHhhMjZDCiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQCTB4MDAwMDAwMEYKQEAgLTI1OTAsMyArMjU4MSw5IEBACiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8zX1MJMTYKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQJMHgwRkMwMDAwMAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1X1BEX0dBSU5fQk9VTkRBUllfNF9TCTIyCisKKy8qCisgKiBQSFkgUERBREMgVHggcG93ZXIgdGFibGUKKyAqLworI2RlZmluZSBBUjVLX1BIWV9QREFEQ19UWFBPV0VSX0JBU0UJMHhhMjgwCisjZGVmaW5lCUFSNUtfUEhZX1BEQURDX1RYUE9XRVIoX24pCShBUjVLX1BIWV9QREFEQ19UWFBPV0VSX0JBU0UgKyAoKF9uKSA8PCAyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jCmluZGV4IGRjMmQ3ZDguLjdhMTdkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVzZXQuYwpAQCAtMjUsNyArMjUsOCBAQAogICBSZXNldCBmdW5jdGlvbnMgYW5kIGhlbHBlcnMKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPiAJCS8qIFRvIGRldGVybWluZSBpZiBhIGNhcmQgaXMgcGNpLWUgKi8KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4JLyogRm9yIGdldF9iaXRtYXNrX29yZGVyICovCiAjaW5jbHVkZSAiYXRoNWsuaCIKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJiYXNlLmgiCkBAIC0zNywxMCArMzgsMTQgQEAKICAqIEBhaDogdGhlICZzdHJ1Y3QgYXRoNWtfaHcKICAqIEBjaGFubmVsOiB0aGUgY3VycmVudGx5IHNldCBjaGFubmVsIHVwb24gcmVzZXQKICAqCi0gKiBXcml0ZSB0aGUgT0ZETSB0aW1pbmdzIGZvciB0aGUgQVI1MjEyIHVwb24gcmVzZXQuIFRoaXMgaXMgYSBoZWxwZXIgZm9yCi0gKiBhdGg1a19od19yZXNldCgpLiBUaGlzIHNlZW1zIHRvIHR1bmUgdGhlIFBMTCBhIHNwZWNpZmllZCBmcmVxdWVuY3kKLSAqIGRlcGVuZGluZyBvbiB0aGUgYmFuZHdpZHRoIG9mIHRoZSBjaGFubmVsLgorICogV3JpdGUgdGhlIGRlbHRhIHNsb3BlIGNvZWZmaWNpZW50ICh1c2VkIG9uIHBpbG90IHRyYWNraW5nID8pIGZvciBPRkRNCisgKiBvcGVyYXRpb24gb24gdGhlIEFSNTIxMiB1cG9uIHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvciBhdGg1a19od19yZXNldCgpLgogICoKKyAqIFNpbmNlIGRlbHRhIHNsb3BlIGlzIGZsb2F0aW5nIHBvaW50IHdlIHNwbGl0IGl0IG9uIGl0cyBleHBvbmVudCBhbmQKKyAqIG1hbnRpc3NhIGFuZCBwcm92aWRlIHRoZXNlIHZhbHVlcyBvbiBody4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcyBpIHRoaW5rIHRoaXMgcGF0ZW50IGlzIHJlbGF0ZWQKKyAqIGh0dHA6Ly93d3cuZnJlZXBhdGVudHNvbmxpbmUuY29tLzcxODQ0OTUuaHRtbAogICovCiBzdGF0aWMgaW5saW5lIGludCBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCkBAIC01MywyMyArNTgsMzQgQEAKIAkJIShjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkpCiAJCUJVRygpOwogCi0JLyogU2VlbXMgdGhlcmUgYXJlIHR3byBQTExzLCBvbmUgZm9yIGJhc2ViYW5kIHNhbXBsaW5nIGFuZCBvbmUKLQkgKiBmb3IgdHVuaW5nLiBUdW5pbmcgYmFzZWJhbmRzIGFyZSA0MCBNSHogb3IgODBNSHogd2hlbiBpbgotCSAqIHR1cmJvLiAqLwotCWNsb2NrID0gY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPID8gODAgOiA0MDsKLQljb2VmX3NjYWxlZCA9ICgoNSAqIChjbG9jayA8PCAyNCkpIC8gMikgLwotCWNoYW5uZWwtPmNlbnRlcl9mcmVxOworCS8qIEdldCBjb2VmZmljaWVudAorCSAqIEFMR086IGNvZWYgPSAoNSAqIGNsb2NrICogY2Fycmllcl9mcmVxKSAvIDIpCisJICogd2Ugc2NhbGUgY29lZiBieSBzaGlmdGluZyBjbG9jayB2YWx1ZSBieSAyNCBmb3IKKwkgKiBiZXR0ZXIgcHJlY2lzaW9uIHNpbmNlIHdlIHVzZSBpbnRlZ2VycyAqLworCS8qIFRPRE86IEhhbGYvcXVhcnRlciByYXRlICovCisJY2xvY2sgPSAgYXRoNWtfaHdfaHRvY2xvY2soMSwgY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKTsKIAotCWZvciAoY29lZl9leHAgPSAzMTsgY29lZl9leHAgPiAwOyBjb2VmX2V4cC0tKQotCQlpZiAoKGNvZWZfc2NhbGVkID4+IGNvZWZfZXhwKSAmIDB4MSkKLQkJCWJyZWFrOworCWNvZWZfc2NhbGVkID0gKCg1ICogKGNsb2NrIDw8IDI0KSkgLyAyKSAvIGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCisJLyogR2V0IGV4cG9uZW50CisJICogQUxHTzogY29lZl9leHAgPSAxNCAtIGhpZ2hlc3Qgc2V0IGJpdCBwb3NpdGlvbiAqLworCWNvZWZfZXhwID0gZ2V0X2JpdG1hc2tfb3JkZXIoY29lZl9zY2FsZWQpOworCisJLyogRG9lc24ndCBtYWtlIHNlbnNlIGlmIGl0J3MgemVybyovCiAJaWYgKCFjb2VmX2V4cCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBOb3RlOiB3ZSd2ZSBzaGlmdGVkIGNvZWZfc2NhbGVkIGJ5IDI0ICovCiAJY29lZl9leHAgPSAxNCAtIChjb2VmX2V4cCAtIDI0KTsKKworCisJLyogR2V0IG1hbnRpc3NhIChzaWduaWZpY2FudCBkaWdpdHMpCisJICogQUxHTzogY29lZl9tYW50ID0gZmxvb3IoY29lZl9zY2FsZWQqIDJeY29lZl9leHArMC41KSAqLwogCWNvZWZfbWFuID0gY29lZl9zY2FsZWQgKwogCQkoMSA8PCAoMjQgLSBjb2VmX2V4cCAtIDEpKTsKKworCS8qIENhbGN1bGF0ZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCBleHBvbmVudAorCSAqIGFuZCBtYW50aXNzYSAocmVtb3ZlIHNjYWxpbmcpIGFuZCBzZXQgdGhlbSBvbiBodyAqLwogCWRzX2NvZWZfbWFuID0gY29lZl9tYW4gPj4gKDI0IC0gY29lZl9leHApOwogCWRzX2NvZWZfZXhwID0gY29lZl9leHAgLSAxNjsKIApAQCAtODYsMjAgKzEwMiwyNyBAQAogICogaW5kZXggaW50byByYXRlcyBmb3IgY29udHJvbCByYXRlcywgd2UgY2FuIHNldCBpdCB1cCBsaWtlIHRoaXMgYmVjYXVzZQogICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIEFSNTIxMiBhbmQgd2Uga25vdyBpdCBzdXBwb3J0cyBHIG1vZGUKICAqLwotc3RhdGljIGludCBjb250cm9sX3JhdGVzW10gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb250cm9sX3JhdGVzW10gPQogCXsgMCwgMSwgMSwgMSwgNCwgNCwgNiwgNiwgOCwgOCwgOCwgOCB9OwogCiAvKioKLSAqIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24gLSBzZXQgcmF0ZSBkdXJhdGlvbiBkdXJpbmcgaHcgcmVzZXRzCisgKiBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uIC0gZmlsbCByYXRlIGNvZGUgdG8gZHVyYXRpb24gdGFibGUKICAqCiAgKiBAYWg6IHRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKiBAbW9kZTogb25lIG9mIGVudW0gYXRoNWtfZHJpdmVyX21vZGUKICAqCi0gKiBXcml0ZSB0aGUgcmF0ZSBkdXJhdGlvbiB0YWJsZSB1cG9uIGh3IHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgotICogYXRoNWtfaHdfcmVzZXQoKS4gSXQgc2VlbXMgYWxsIHRoaXMgaXMgZG9pbmcgaXMgc2V0dGluZyBhbiBBQ0sgdGltZW91dCBmb3IKLSAqIHRoZSBoYXJkd2FyZSBmb3IgdGhlIGN1cnJlbnQgbW9kZSBmb3IgZWFjaCByYXRlLiBUaGUgcmF0ZXMgd2hpY2ggYXJlIGNhcGFibGUKLSAqIG9mIHNob3J0IHByZWFtYmxlICg4MDIuMTFiIHJhdGVzIDJNYnBzLCA1LjVNYnBzLCBhbmQgMTFNYnBzKSBoYXZlIGFub3RoZXIKLSAqIHJlZ2lzdGVyIGZvciB0aGUgc2hvcnQgcHJlYW1ibGUgQUNLIHRpbWVvdXQgY2FsY3VsYXRpb24uCisgKiBXcml0ZSB0aGUgcmF0ZSBjb2RlIHRvIGR1cmF0aW9uIHRhYmxlIHVwb24gaHcgcmVzZXQuIFRoaXMgaXMgYSBoZWxwZXIgZm9yCisgKiBhdGg1a19od19yZXNldCgpLiBJdCBzZWVtcyBhbGwgdGhpcyBpcyBkb2luZyBpcyBzZXR0aW5nIGFuIEFDSyB0aW1lb3V0IG9uCisgKiB0aGUgaGFyZHdhcmUsIGJhc2VkIG9uIGN1cnJlbnQgbW9kZSwgZm9yIGVhY2ggcmF0ZS4gVGhlIHJhdGVzIHdoaWNoIGFyZQorICogY2FwYWJsZSBvZiBzaG9ydCBwcmVhbWJsZSAoODAyLjExYiByYXRlcyAyTWJwcywgNS41TWJwcywgYW5kIDExTWJwcykgaGF2ZQorICogZGlmZmVyZW50IHJhdGUgY29kZSBzbyB3ZSB3cml0ZSB0aGVpciB2YWx1ZSB0d2ljZSAob25lIGZvciBsb25nIHByZWFtcGxlCisgKiBhbmQgb25lIGZvciBzaG9ydCkuCisgKgorICogTm90ZTogQmFuZCBkb2Vzbid0IG1hdHRlciBoZXJlLCBpZiB3ZSBzZXQgdGhlIHZhbHVlcyBmb3IgT0ZETSBpdCB3b3JrcworICogb24gYm90aCBhIGFuZCBnIG1vZGVzLiBTbyBhbGwgd2UgaGF2ZSB0byBkbyBpcyBzZXQgdmFsdWVzIGZvciBhbGwgZyByYXRlcworICogdGhhdCBpbmNsdWRlIGFsbCBPRkRNIGFuZCBDQ0sgcmF0ZXMuIElmIHdlIG9wZXJhdGUgaW4gdHVyYm8gb3IgeHIvaGFsZi8KKyAqIHF1YXJ0ZXIgcmF0ZSBtb2RlLCB3ZSBuZWVkIHRvIHVzZSBhbm90aGVyIHNldCBvZiBiaXRyYXRlcyAodGhhdCdzIHdoeSB3ZQorICogbmVlZCB0aGUgbW9kZSBwYXJhbWV0ZXIpIGJ1dCB3ZSBkb24ndCBoYW5kbGUgdGhlc2UgcHJvcHJpZXRhcnkgbW9kZXMgeWV0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQpAQCAtMjc1LDcgKzI5OCw4IEBACiB9CiAKIC8qCi0gKiBCcmluZyB1cCBNQUMgKyBQSFkgQ2hpcHMKKyAqIEJyaW5nIHVwIE1BQyArIFBIWSBDaGlwcyBhbmQgcHJvZ3JhbSBQTEwKKyAqIFRPRE86IEhhbGYvUXVhcnRlciByYXRlIHN1cHBvcnQKICAqLwogaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpCiB7CkBAIC0zMzMsNyArMzU3LDExIEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoZmxhZ3MgJiBDSEFOTkVMXzVHSFopIHsKIAkJCW1vZGUgfD0gQVI1S19QSFlfTU9ERV9GUkVRXzVHSFo7Ci0JCQljbG9jayB8PSBBUjVLX1BIWV9QTExfNDBNSFo7CisKKwkJCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpCisJCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaXzU0MTM7CisJCQllbHNlCisJCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaOwogCiAJCQlpZiAoZmxhZ3MgJiBDSEFOTkVMX09GRE0pCiAJCQkJbW9kZSB8PSBBUjVLX1BIWV9NT0RFX01PRF9PRkRNOwpAQCAtMzkxLDEwICs0MTksMTQgQEAKIAl9CiAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJLyogLi4uc2V0IHRoZSBQSFkgb3BlcmF0aW5nIG1vZGUgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBjbG9jaywgQVI1S19QSFlfUExMKTsKLQkJdWRlbGF5KDMwMCk7CiAKKwkJLyogLi4udXBkYXRlIFBMTCBpZiBuZWVkZWQgKi8KKwkJaWYgKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9QTEwpICE9IGNsb2NrKSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGNsb2NrLCBBUjVLX1BIWV9QTEwpOworCQkJdWRlbGF5KDMwMCk7CisJCX0KKworCQkvKiAuLi5zZXQgdGhlIFBIWSBvcGVyYXRpbmcgbW9kZSAqLwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIG1vZGUsIEFSNUtfUEhZX01PREUpOwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR1cmJvLCBBUjVLX1BIWV9UVVJCTyk7CiAJfQpAQCAtNDAzLDIyICs0MzUsMzk5IEBACiB9CiAKIC8qCisgKiBJZiB0aGVyZSBpcyBhbiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIGF2YWlsYWJsZSwgdXNlIGl0CisgKiBhcyByZWYuIGNsb2NrIGluc3RlYWQgb2YgMzIvNDBNSHogY2xvY2sgYW5kIGJhc2ViYW5kIGNsb2NrcworICogdG8gc2F2ZSBwb3dlciBkdXJpbmcgc2xlZXAgb3IgcmVzdG9yZSBub3JtYWwgMzIvNDBNSHoKKyAqIG9wZXJhdGlvbi4KKyAqCisgKiBYWFg6IFdoZW4gb3BlcmF0aW5nIG9uIDMyS0h6IGNlcnRhaW4gUEhZIHJlZ2lzdGVycyAoMjcgLSAzMSwKKyAqIAkxMjMgLSAxMjcpIHJlcXVpcmUgZGVsYXkgb24gYWNjZXNzLgorICovCitzdGF0aWMgdm9pZCBhdGg1a19od19zZXRfc2xlZXBfY2xvY2soc3RydWN0IGF0aDVrX2h3ICphaCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTMyIHNjYWwsIHNwZW5kaW5nLCB1c2VjMzI7CisKKwkvKiBPbmx5IHNldCAzMktIeiBzZXR0aW5ncyBpZiB3ZSBoYXZlIGFuIGV4dGVybmFsCisJICogMzJLSHogY3J5c3RhbCBwcmVzZW50ICovCisJaWYgKChBUjVLX0VFUFJPTV9IQVMzMktIWkNSWVNUQUwoZWUtPmVlX21pc2MxKSB8fAorCUFSNUtfRUVQUk9NX0hBUzMyS0haQ1JZU1RBTF9PTEQoZWUtPmVlX21pc2MxKSkgJiYKKwllbmFibGUpIHsKKworCQkvKiAxIHVzZWMvY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19VU0VDXzUyMTEsIEFSNUtfVVNFQ18zMiwgMSk7CisJCS8qIFNldCB1cCB0c2YgaW5jcmVtZW50IG9uIGVhY2ggY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDYxKTsKKworCQkvKiBTZXQgYmFzZWJhbmQgc2xlZXAgY29udHJvbCByZWdpc3RlcnMKKwkJICogYW5kIHNsZWVwIGNvbnRyb2wgcmF0ZSAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MWYsIEFSNUtfUEhZX1NDUik7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQkJc3BlbmRpbmcgPSAweDE0OworCQllbHNlCisJCQlzcGVuZGluZyA9IDB4MTg7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkJKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkpIHsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyNiwgQVI1S19QSFlfU0xNVCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGQsIEFSNUtfUEhZX1NDQUwpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDA3LCBBUjVLX1BIWV9TQ0xPQ0spOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDNmLCBBUjVLX1BIWV9TREVMQVkpOworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMHgwMik7CisJCX0gZWxzZSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGEsIEFSNUtfUEhZX1NMTVQpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBjLCBBUjVLX1BIWV9TQ0FMKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMywgQVI1S19QSFlfU0NMT0NLKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyMCwgQVI1S19QSFlfU0RFTEFZKTsKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDB4MDMpOworCQl9CisKKwkJLyogRW5hYmxlIHNsZWVwIGNsb2NrIG9wZXJhdGlvbiAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfRU4pOworCisJfSBlbHNlIHsKKworCQkvKiBEaXNhYmxlIHNsZWVwIGNsb2NrIG9wZXJhdGlvbiBhbmQKKwkJICogcmVzdG9yZSBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19FTik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMCk7CisKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOworCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3OworCQllbHNlIGlmIChhdGg1a19lZXByb21faXNfaGI2MyhhaCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOworCQllbHNlCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQkJc3BlbmRpbmcgPSAweDE0OworCQllbHNlCisJCQlzcGVuZGluZyA9IDB4MTg7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykpCisJCQl1c2VjMzIgPSAzOTsKKwkJZWxzZQorCQkJdXNlYzMyID0gMzE7CisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIHVzZWMzMik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDEpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBib29sIGF0aDVrX2h3X2NoYW5faGFzX3NwdXJfbm9pc2Uoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJdTggcmVmY2xrX2ZyZXE7CisKKwlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQlyZWZjbGtfZnJlcSA9IDQwOworCWVsc2UKKwkJcmVmY2xrX2ZyZXEgPSAzMjsKKworCWlmICgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSAhPSAwKSAmJgorCSgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSA8IDEwKSB8fAorCShjaGFubmVsLT5jZW50ZXJfZnJlcSAlIHJlZmNsa19mcmVxID4gMjIpKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRPRE86IEhhbGYvUXVhcnRlciByYXRlICovCitzdGF0aWMgdm9pZCBhdGg1a19od190d2Vha19pbml0dmFsX3NldHRpbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgorCSAgICBhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKworCQkvKiBTZXR1cCBBREMgY29udHJvbCAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQkJKEFSNUtfUkVHX1NNKDIsCisJCQkJQVI1S19QSFlfQURDX0NUTF9JTkJVRkdBSU5fT0ZGKSB8CisJCQkJQVI1S19SRUdfU00oMiwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PTikgfAorCQkJCUFSNUtfUEhZX0FEQ19DVExfUFdEX0RBQ19PRkYgfAorCQkJCUFSNUtfUEhZX0FEQ19DVExfUFdEX0FEQ19PRkYpLAorCQkJCUFSNUtfUEhZX0FEQ19DVEwpOworCisKKworCQkvKiBEaXNhYmxlIGJhcmtlciBSU1NJIHRocmVzaG9sZCAqLworCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAorCQkJCUFSNUtfUEhZX0RBR19DQ0tfQ1RMX0VOX1JTU0lfVEhSKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwKKwkJCUFSNUtfUEhZX0RBR19DQ0tfQ1RMX1JTU0lfVEhSLCAyKTsKKworCQkvKiBTZXQgdGhlIG11dGUgbWFzayAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMGYsIEFSNUtfU0VRX01BU0spOworCX0KKworCS8qIENsZWFyIFBIWV9CTFVFVE9PVEggdG8gYWxsb3cgUlhfQ0xFQVIgbGluZSBkZWJ1ZyAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkIpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19QSFlfQkxVRVRPT1RIKTsKKworCS8qIEVuYWJsZSBEQ1UgZG91YmxlIGJ1ZmZlcmluZyAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID4gQVI1S19TUkVWX1BIWV81MjEyQikKKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJCUFSNUtfVFhDRkdfRENVX0RCTF9CVUZfRElTKTsKKworCS8qIFNldCBEQUMvQURDIGRlbGF5cyAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQl1MzIgc2NhbDsKKwkJaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaXzI0MTc7CisJCWVsc2UgaWYgKGF0aDVrX2VlcHJvbV9pc19oYjYzKGFoKSkKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaX0hCNjM7CisJCWVsc2UKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNjYWwsIEFSNUtfUEhZX1NDQUwpOworCX0KKworCS8qIFNldCBmYXN0IEFEQyAqLworCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKSB7CisJCXUzMiBmYXN0X2FkYyA9IHRydWU7CisKKwkJaWYgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID09IDI0NjIgfHwKKwkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPT0gMjQ2NykKKwkJCWZhc3RfYWRjID0gMDsKKworCQkvKiBPbmx5IHVwZGF0ZSBpZiBuZWVkZWQgKi8KKwkJaWYgKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9GQVNUX0FEQykgIT0gZmFzdF9hZGMpCisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBmYXN0X2FkYywKKwkJCQkJCUFSNUtfUEhZX0ZBU1RfQURDKTsKKwl9CisKKwkvKiBGaXggZm9yIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBSRjUxMTIgUkYgY2hpcHNldCAqLworCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIgJiYKKwkJCWFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwKKwkJCUFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJdTMyIGRhdGE7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQ0NLVFhDVExfV09STEQsCisJCQkJQVI1S19QSFlfQ0NLVFhDVEwpOworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCisJCQlkYXRhID0gMHhmZmI4MTAyMDsKKwkJZWxzZQorCQkJZGF0YSA9IDB4ZmZiODBkMjA7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfRlJBTUVfQ1RMKTsKKwl9CisKKwlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQl1MzIgdXNlY19yZWc7CisJCS8qIDUzMTEgaGFzIGRpZmZlcmVudCB0eC9yeCBsYXRlbmN5IG1hc2tzCisJCSAqIGZyb20gNTIxMSwgc2luY2Ugd2UgZGVhbCA1MzExIHRoZSBzYW1lCisJCSAqIGFzIDUyMTEgd2hlbiBzZXR0aW5nIGluaXR2YWxzLCBzaGlmdAorCQkgKiB2YWx1ZXMgaGVyZSB0byB0aGVpciBwcm9wZXIgbG9jYXRpb25zICovCisJCXVzZWNfcmVnID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVVNFQ181MjExKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB1c2VjX3JlZyAmIChBUjVLX1VTRUNfMSB8CisJCQkJQVI1S19VU0VDXzMyIHwKKwkJCQlBUjVLX1VTRUNfVFhfTEFURU5DWV81MjExIHwKKwkJCQlBUjVLX1JFR19TTSgyOSwKKwkJCQlBUjVLX1VTRUNfUlhfTEFURU5DWV81MjEwKSksCisJCQkJQVI1S19VU0VDXzUyMTEpOworCQkvKiBDbGVhciBRQ1UvRENVIGNsb2NrIGdhdGluZyByZWdpc3RlciAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUUNVRENVX0NMS0dUKTsKKwkJLyogU2V0IERBQy9BREMgZGVsYXlzICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwOCwgQVI1S19QSFlfU0NBTCk7CisJCS8qIEVuYWJsZSBQQ1UgRklGTyBjb3JydXB0aW9uIEVDTyAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19ESUFHX1NXXzUyMTEsCisJCQkJCUFSNUtfRElBR19TV19FQ09fRU5BQkxFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1OCAqYW50LCB1OCBlZV9tb2RlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXMxNiBjY2tfb2ZkbV9wd3JfZGVsdGE7CisKKwkvKiBBZGp1c3QgcG93ZXIgZGVsdGEgZm9yIGNoYW5uZWwgMTQgKi8KKwlpZiAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPT0gMjQ4NCkKKwkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCSgoZWUtPmVlX2Nja19vZmRtX3Bvd2VyX2RlbHRhIC0KKwkJCWVlLT5lZV9zY2FsZWRfY2NrX2RlbHRhKSAqIDIpIC8gMTA7CisJZWxzZQorCQljY2tfb2ZkbV9wd3JfZGVsdGEgPQorCQkJKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAqIDIpIC8gMTA7CisKKwkvKiBTZXQgQ0NLIHRvIE9GRE0gcG93ZXIgZGVsdGEgb24gdHggcG93ZXIKKwkgKiBhZGp1c3RtZW50IHJlZ2lzdGVyICovCisJaWYgKGFoLT5haF9waHlfcmV2aXNpb24gPj0gQVI1S19TUkVWX1BIWV81MjEyQSkgeworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oKGVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhICogLTEpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREpfQ0NLX0dBSU5fREVMVEEpIHwKKwkJCUFSNUtfUkVHX1NNKChjY2tfb2ZkbV9wd3JfZGVsdGEgKiAtMSksCisJCQkJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREopOworCQllbHNlCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX1RYX1BXUl9BREopOworCX0gZWxzZSB7CisJCS8qIEZvciBvbGRlciByZXZzIHdlIHNjYWxlIHBvd2VyIG9uIHN3IGR1cmluZyB0eCBwb3dlcgorCQkgKiBzZXR1cCAqLworCQlhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fcHdyX2RlbHRhID0gY2NrX29mZG1fcHdyX2RlbHRhOworCQlhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fZ2FpbmZfZGVsdGEgPQorCQkJCQkJZWUtPmVlX2Nja19vZmRtX2dhaW5fZGVsdGE7CisJfQorCisJLyogU2V0IGFudGVubmEgaWRsZSBzd2l0Y2ggdGFibGUgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9BTlRfQ1RMLAorCQkJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUsCisJCQkoYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bMF0gfAorCQkJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOKSk7CisKKwkvKiBTZXQgYW50ZW5uYSBzd2l0Y2ggdGFibGUgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9hbnRlbm5hW2VlX21vZGVdW2FudFswXV0sCisJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMV1dLAorCQlBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFXzEpOworCisJLyogTm9pc2UgZmxvb3IgdGhyZXNob2xkICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQlBUjVLX1BIWV9ORl9TVkFMKGVlLT5lZV9ub2lzZV9mbG9vcl90aHJbZWVfbW9kZV0pLAorCQlBUjVLX1BIWV9ORlRIUkVTKTsKKworCWlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKSAmJgorCShhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzVfMCkpIHsKKwkJLyogU3dpdGNoIHNldHRsaW5nIHRpbWUgKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKKwkJCQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJZWUtPmVlX3N3aXRjaF9zZXR0bGluZ190dXJib1tlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggYXR0ZW51YXRpb24gKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAorCQkJCUFSNUtfUEhZX0dBSU5fVFhSWF9BVFRFTiwKKwkJCQllZS0+ZWVfYXRuX3R4X3J4X3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBBREMvUEdBIGRlc2lyZWQgc2l6ZSAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfQURDLAorCQkJCWVlLT5lZV9hZGNfZGVzaXJlZF9zaXplX3R1cmJvW2VlX21vZGVdKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX1BHQSwKKwkJCQllZS0+ZWVfcGdhX2Rlc2lyZWRfc2l6ZV90dXJib1tlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggbWFyZ2luIChUdXJibykgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfR0FJTl8yR0haLAorCQkJCUFSNUtfUEhZX0dBSU5fMkdIWl9NQVJHSU5fVFhSWCwKKwkJCQllZS0+ZWVfbWFyZ2luX3R4X3J4X3R1cmJvW2VlX21vZGVdKTsKKworCX0gZWxzZSB7CisJCS8qIFN3aXRjaCBzZXR0bGluZyB0aW1lICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAorCQkJCUFSNUtfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJCQllZS0+ZWVfc3dpdGNoX3NldHRsaW5nW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBhdHRlbnVhdGlvbiAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAorCQkJCUFSNUtfUEhZX0dBSU5fVFhSWF9BVFRFTiwKKwkJCQllZS0+ZWVfYXRuX3R4X3J4W2VlX21vZGVdKTsKKworCQkvKiBBREMvUEdBIGRlc2lyZWQgc2l6ZSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX0FEQywKKwkJCQllZS0+ZWVfYWRjX2Rlc2lyZWRfc2l6ZVtlZV9tb2RlXSk7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCQkJCUFSNUtfUEhZX0RFU0lSRURfU0laRV9QR0EsCisJCQkJZWUtPmVlX3BnYV9kZXNpcmVkX3NpemVbZWVfbW9kZV0pOworCisJCS8qIFR4L1J4IG1hcmdpbiAqLworCQlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl80XzEpCisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOXzJHSFosCisJCQkJQVI1S19QSFlfR0FJTl8yR0haX01BUkdJTl9UWFJYLAorCQkJCWVlLT5lZV9tYXJnaW5fdHhfcnhbZWVfbW9kZV0pOworCX0KKworCS8qIFhQQSBkZWxheXMgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDI0KSB8CisJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDE2KSB8CisJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0gPDwgOCkgfAorCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdKSwgQVI1S19QSFlfUkZfQ1RMNCk7CisKKwkvKiBYTE5BIGRlbGF5ICovCisJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfUkZfQ1RMMywKKwkJCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT04sCisJCQllZS0+ZWVfdHhfZW5kMnhsbmFfZW5hYmxlW2VlX21vZGVdKTsKKworCS8qIFRocmVzaDY0IChBTkkpICovCisJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfTkYsCisJCQlBUjVLX1BIWV9ORl9USFJFU0g2MiwKKwkJCWVlLT5lZV90aHJfNjJbZWVfbW9kZV0pOworCisKKwkvKiBGYWxzZSBkZXRlY3QgYmFja29mZiBmb3IgY2hhbm5lbHMKKwkgKiB0aGF0IGhhdmUgc3B1ciBub2lzZS4gV3JpdGUgdGhlIG5ldworCSAqIGN5Y2xpYyBwb3dlciBSU1NJIHRocmVzaG9sZC4gKi8KKwlpZiAoYXRoNWtfaHdfY2hhbl9oYXNfc3B1cl9ub2lzZShhaCwgY2hhbm5lbCkpCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsCisJCQkJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxLAorCQkJCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEgKworCQkJCWVlLT5lZV9mYWxzZV9kZXRlY3RbZWVfbW9kZV0pOworCWVsc2UKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkJCQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjEsCisJCQkJQVI1S19JTklUX0NZQ1JTU0lfVEhSMSk7CisKKwkvKiBJL1EgY29ycmVjdGlvbgorCSAqIFRPRE86IFBlciBjaGFubmVsIGkvcSBpbmZvcyA/ICovCisJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLAorCQlBUjVLX1BIWV9JUV9DT1JSX0VOQUJMRSB8CisJCShlZS0+ZWVfaV9jYWxbZWVfbW9kZV0gPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSB8CisJCWVlLT5lZV9xX2NhbFtlZV9tb2RlXSk7CisKKwkvKiBIZWF2eSBjbGlwcGluZyAtZGlzYWJsZSBmb3Igbm93ICovCisJaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8xKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFKTsKKworCXJldHVybjsKK30KKworLyoKICAqIE1haW4gcmVzZXQgZnVuY3Rpb24KICAqLwogaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgY2hhbmdlX2NoYW5uZWwpCiB7Ci0Jc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhaC0+YWhfc2MtPnBkZXY7Ci0JdTMyIGRhdGEsIHNfc2VxLCBzX2FudCwgc19sZWRbM10sIGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBpLCBtb2RlLCBmcmVxLCBlZV9tb2RlLCBhbnRbMl07Ci0JaW50IHJldDsKKwl1MzIgc19zZXFbMTBdLCBzX2FudCwgc19sZWRbM10sIHN0YWlkMV9mbGFncywgdHNmX3VwLCB0c2ZfbG87CisJdTMyIHBoeV90c3QxOworCXU4IG1vZGUsIGZyZXEsIGVlX21vZGUsIGFudFsyXTsKKwlpbnQgaSwgcmV0OwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAotCXNfc2VxID0gMDsKIAlzX2FudCA9IDA7CiAJZWVfbW9kZSA9IDA7CisJc3RhaWQxX2ZsYWdzID0gMDsKKwl0c2ZfdXAgPSAwOworCXRzZl9sbyA9IDA7CiAJZnJlcSA9IDA7CiAJbW9kZSA9IDA7CiAKQEAgLTQyNyw0OCArODM2LDYgQEAKIAkgKi8KIAkvKkRDVS9BbnRlbm5hIHNlbGVjdGlvbiBub3QgYXZhaWxhYmxlIG9uIDUyMTAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKLQkJCS8qIFNlcSBudW1iZXIgZm9yIHF1ZXVlIDAgLWRvIHRoaXMgZm9yIGFsbCBxdWV1ZXMgPyAqLwotCQkJc19zZXEgPSBhdGg1a19od19yZWdfcmVhZChhaCwKLQkJCQkJQVI1S19RVUVVRV9ERlNfU0VRTlVNKDApKTsKLQkJCS8qRGVmYXVsdCBhbnRlbm5hKi8KLQkJCXNfYW50ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKLQkJfQotCX0KLQotCS8qR1BJT3MqLwotCXNfbGVkWzBdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUENJQ0ZHKSAmIEFSNUtfUENJQ0ZHX0xFRFNUQVRFOwotCXNfbGVkWzFdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0NSKTsKLQlzX2xlZFsyXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0dQSU9ETyk7Ci0KLQlpZiAoY2hhbmdlX2NoYW5uZWwgJiYgYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCi0JCWF0aDVrX2h3X2dldF9yZl9nYWluKGFoKTsKLQotCi0JLypXYWtldXAgdGhlIGRldmljZSovCi0JcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgY2hhbm5lbC0+aHdfdmFsdWUsIGZhbHNlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG9wZXJhdGluZyBtb2RlCi0JICovCi0JYWgtPmFoX29wX21vZGUgPSBvcF9tb2RlOwotCi0JLyoKLQkgKiA1MTExLzUxMTIgU2V0dGluZ3MKLQkgKiA1MjEwIG9ubHkgY29tZXMgd2l0aCBSRjUxMTAKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJaWYgKGFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTExMSAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTEyICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjU0MTMgJiYKLQkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGMjQxMyAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkYyNDI1KSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIHBoeSByYWRpbzogJXVcbiIsIGFoLT5haF9yYWRpbyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCXN3aXRjaCAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX01PREVTKSB7CiAJCWNhc2UgQ0hBTk5FTF9BOgpAQCAtNDkxLDggKzg1OCwxMiBAQAogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl81R0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwogCQkJYnJlYWs7Ci0JCS8qSXMgdGhpcyBvayBvbiA1MjExIHRvbyA/Ki8KIAkJY2FzZSBDSEFOTkVMX1RHOgorCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjExKSB7CisJCQkJQVRINUtfRVJSKGFoLT5haF9zYywKKwkJCQkJIlR1cmJvRyBtb2RlIG5vdCBhdmFpbGFibGUgb24gNTIxMSIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJbW9kZSA9IEFSNUtfTU9ERV8xMUdfVFVSQk87CiAJCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzJHSFo7CiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7CkBAIC01MTMsMTEgKzg4NCw5MyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQkvKiBQSFkgYWNjZXNzIGVuYWJsZSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CisJCQkvKgorCQkJICogU2F2ZSBmcmFtZSBzZXF1ZW5jZSBjb3VudAorCQkJICogRm9yIHJldnMuIGFmdGVyIE9haHUsIG9ubHkgc2F2ZQorCQkJICogc2VxIG51bSBmb3IgRENVIDAgKEdsb2JhbCBzZXEgbnVtKQorCQkJICovCisJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgewogCisJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJCXNfc2VxW2ldID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oaSkpOworCisJCQl9IGVsc2UgeworCQkJCXNfc2VxWzBdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oMCkpOworCQkJfQorCisJCQkvKiBUU0YgYWNjZWxlcmF0ZXMgb24gQVI1MjExIGR1cnJpbmcgcmVzZXQKKwkJCSAqIEFzIGEgd29ya2Fyb3VuZCBzYXZlIGl0IGhlcmUgYW5kIHJlc3RvcmUKKwkJCSAqIGl0IGxhdGVyIHNvIHRoYXQgaXQncyBiYWNrIGluIHRpbWUgYWZ0ZXIKKwkJCSAqIHJlc2V0LiBUaGlzIHdheSBpdCdsbCBnZXQgcmUtc3luY2VkIG9uIHRoZQorCQkJICogbmV4dCBiZWFjb24gd2l0aG91dCBicmVha2luZyBhZC1ob2MuCisJCQkgKgorCQkJICogT24gQVI1MjEyIFRTRiBpcyBhbG1vc3QgcHJlc2VydmVkIGFjcm9zcyBhCisJCQkgKiByZXNldCBzbyBpdCBzdGF5cyBiYWNrIGluIHRpbWUgYW55d2F5IGFuZAorCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBzYXZlL3Jlc3RvcmUgaXQuCisJCQkgKgorCQkJICogWFhYOiBTaW5jZSB0aGlzIGJyZWFrcyBwb3dlciBzYXZpbmcgd2UgaGF2ZQorCQkJICogdG8gZGlzYWJsZSBwb3dlciBzYXZpbmcgdW50aWwgd2UgcmVjZWl2ZSB0aGUKKwkJCSAqIG5leHQgYmVhY29uLCBzbyB3ZSBjYW4gcmVzeW5jIGJlYWNvbiB0aW1lcnMgKi8KKwkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJCXRzZl91cCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9VMzIpOworCQkJCXRzZl9sbyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9MMzIpOworCQkJfQorCQl9CisKKwkJLyogU2F2ZSBkZWZhdWx0IGFudGVubmEgKi8KKwkJc19hbnQgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOworCisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQkJLyogUmVzdG9yZSBub3JtYWwgMzIvNDBNSHogY2xvY2sgb3BlcmF0aW9uCisJCQkgKiB0byBhdm9pZCByZWdpc3RlciBhY2Nlc3MgZGVsYXkgb24gY2VydGFpbgorCQkJICogUEhZIHJlZ2lzdGVycyAqLworCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCBmYWxzZSk7CisKKwkJCS8qIFNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSByZiBidWZmZXIKKwkJCSAqIGNoZWNrIGlmIHdlIGhhdmUgYW55IHBlbmRpbmcgZ2Fpbl9GCisJCQkgKiBvcHRpbWl6YXRpb24gc2V0dGluZ3MgKi8KKwkJCWlmIChjaGFuZ2VfY2hhbm5lbCAmJiBhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKKwkJCQlhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpOworCQl9CiAJfQogCisJLypHUElPcyovCisJc19sZWRbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYKKwkJCQkJQVI1S19QQ0lDRkdfTEVEU1RBVEU7CisJc19sZWRbMV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPQ1IpOworCXNfbGVkWzJdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0RPKTsKKworCS8qIEFSNUtfU1RBX0lEMSBmbGFncywgb25seSBwcmVzZXJ2ZSBhbnRlbm5hCisJICogc2V0dGluZ3MgYW5kIGFjay9jdHMgcmF0ZSBtb2RlICovCisJc3RhaWQxX2ZsYWdzID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSkgJgorCQkJKEFSNUtfU1RBX0lEMV9ERUZBVUxUX0FOVEVOTkEgfAorCQkJQVI1S19TVEFfSUQxX0RFU0NfQU5URU5OQSB8CisJCQlBUjVLX1NUQV9JRDFfUlRTX0RFRl9BTlRFTk5BIHwKKwkJCUFSNUtfU1RBX0lEMV9BQ0tDVFNfNk1CIHwKKwkJCUFSNUtfU1RBX0lEMV9CQVNFX1JBVEVfMTFCIHwKKwkJCUFSNUtfU1RBX0lEMV9TRUxGR0VOX0RFRl9BTlQpOworCisJLyogV2FrZXVwIHRoZSBkZXZpY2UgKi8KKwlyZXQgPSBhdGg1a19od19uaWNfd2FrZXVwKGFoLCBjaGFubmVsLT5od192YWx1ZSwgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgb3BlcmF0aW5nIG1vZGUKKwkgKi8KKwlhaC0+YWhfb3BfbW9kZSA9IG9wX21vZGU7CisKKwkvKiBQSFkgYWNjZXNzIGVuYWJsZSAqLworCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTIxMSkKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TSElGVF81R0haLCBBUjVLX1BIWSgwKSk7CisJZWxzZQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFogfCAweDQwLAorCQkJCQkJCUFSNUtfUEhZKDApKTsKKworCS8qIFdyaXRlIGluaXRpYWwgc2V0dGluZ3MgKi8KIAlyZXQgPSBhdGg1a19od193cml0ZV9pbml0dmFscyhhaCwgbW9kZSwgY2hhbmdlX2NoYW5uZWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01MjYsNjkgKzk3OSwyOSBAQAogCSAqIDUyMTEvNTIxMiBTcGVjaWZpYwogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCiAJCS8qCiAJCSAqIFdyaXRlIGluaXRpYWwgUkYgZ2FpbiBzZXR0aW5ncwogCQkgKiBUaGlzIHNob3VsZCB3b3JrIGZvciBib3RoIDUxMTEvNTExMgogCQkgKi8KLQkJcmV0ID0gYXRoNWtfaHdfcmZnYWluKGFoLCBmcmVxKTsKKwkJcmV0ID0gYXRoNWtfaHdfcmZnYWluX2luaXQoYWgsIGZyZXEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAogCQltZGVsYXkoMSk7CiAKIAkJLyoKLQkJICogV3JpdGUgc29tZSBtb3JlIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZm9yIHJldmlzZWQgY2hpcHMKKwkJICogVHdlYWsgaW5pdHZhbCBzZXR0aW5ncyBmb3IgcmV2aXNlZAorCQkgKiBjaGlwc2V0cyBhbmQgYWRkIHNvbWUgbW9yZSBjb25maWcKKwkJICogYml0cwogCQkgKi8KLQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCi0JCSAgICBhaC0+YWhfcGh5X3JldmlzaW9uID4gMHg0MSkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDJhMDAyLCAweDk4MmMpOwotCi0JCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQotCQkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVIyNDEzKQotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDBmODBkODAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTQyNCkKLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMzgwMTQwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJCWVsc2UgaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjI0MjUpCi0JCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGZjMGVjMCwKLQkJCQkJCQkJMHg5OTRjKTsKLQkJCQllbHNlIC8qIDI0MjUgKi8KLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwZmMwZmMwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJZWxzZQotCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHg5OTRjKTsKLQotCQkJLyogR290IHRoaXMgZnJvbSBsZWdhY3ktaGFsICovCi0JCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIDB4YTIyOCwgMHgyMDApOwotCi0JCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgMHhhMjI4LCAweDgwMCwgMHhmZmZlMDNmZik7Ci0KLQkJCS8qIEp1c3Qgd3JpdGUgMHg5YjUgPyAqLwotCQkJLyogYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwOWI1LCAweGEyMjgpOyAqLwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBmLCBBUjVLX1NFUV9NQVNLKTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHhhMjU0KTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwZSwgQVI1S19QSFlfU0NBTCk7Ci0JCX0KLQotCQkvKiBGaXggZm9yIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBSRjUxMTIgUkYgY2hpcHNldCAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID49IEFSNUtfUkY1MTEyICYmCi0JCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPAotCQkJCUFSNUtfU1JFVl9SQURfNTExMkEpIHsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQ0NLVFhDVExfV09STEQsCi0JCQkJCUFSNUtfUEhZX0NDS1RYQ1RMKTsKLQkJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfNUdIWikKLQkJCQlkYXRhID0gMHhmZmI4MTAyMDsKLQkJCWVsc2UKLQkJCQlkYXRhID0gMHhmZmI4MGQyMDsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfRlJBTUVfQ1RMKTsKLQkJCWRhdGEgPSAwOwotCQl9CisJCWF0aDVrX2h3X3R3ZWFrX2luaXR2YWxfc2V0dGluZ3MoYWgsIGNoYW5uZWwpOwogCiAJCS8qCiAJCSAqIFNldCBUWCBwb3dlciAoRklYTUUpCiAJCSAqLwotCQlyZXQgPSBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBBUjVLX1RVTkVfREVGQVVMVF9UWFBPV0VSKTsKKwkJcmV0ID0gYXRoNWtfaHdfdHhwb3dlcihhaCwgY2hhbm5lbCwgZWVfbW9kZSwKKwkJCQkJQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC02MDEsMTUgKzEwMTQsMTIgQEAKIAkJCWF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oYWgsIG1vZGUpOwogCiAJCS8qCi0JCSAqIFdyaXRlIFJGIHJlZ2lzdGVycworCQkgKiBXcml0ZSBSRiBidWZmZXIKIAkJICovCi0JCXJldCA9IGF0aDVrX2h3X3JmcmVncyhhaCwgY2hhbm5lbCwgbW9kZSk7CisJCXJldCA9IGF0aDVrX2h3X3JmcmVnc19pbml0KGFoLCBjaGFubmVsLCBtb2RlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICogQ29uZmlndXJlIGFkZGl0aW9uYWwgcmVnaXN0ZXJzCi0JCSAqLwogCiAJCS8qIFdyaXRlIE9GRE0gdGltaW5ncyBvbiA1MjEyKi8KIAkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCkBAIC02MzEsMTcgKzEwNDEsNiBAQAogCQl9CiAKIAkJLyoKLQkJICogU2V0IGNoYW5uZWwgYW5kIGNhbGlicmF0ZSB0aGUgUEhZCi0JCSAqLwotCQlyZXQgPSBhdGg1a19od19jaGFubmVsKGFoLCBjaGFubmVsKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJLyogU2V0IGFudGVubmEgbW9kZSAqLwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfQU5UX0NUTCwKLQkJCWFoLT5haF9hbnRlbm5hW2VlX21vZGVdWzBdLCAweGZmZmZmYzA2KTsKLQotCQkvKgogCQkgKiBJbiBjYXNlIGEgZml4ZWQgYW50ZW5uYSB3YXMgc2V0IGFzIGRlZmF1bHQKIAkJICogd3JpdGUgdGhlIHNhbWUgc2V0dGluZ3Mgb24gYm90aCBBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFCiAJCSAqIHJlZ2lzdGVycy4KQEAgLTY1Niw1NCArMTA1NSwxNiBAQAogCQkJYW50WzFdID0gQVI1S19BTlRfRklYRURfQjsKIAkJfQogCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzBdXSwKLQkJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzFdXSwKLQkJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7Ci0KIAkJLyogQ29tbWl0IHZhbHVlcyBmcm9tIEVFUFJPTSAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKQotCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfRlJBTUVfQ1RMLAotCQkJICAgIEFSNUtfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLCBlZS0+ZWVfdHhfY2xpcCk7Ci0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJQVI1S19QSFlfTkZfU1ZBTChlZS0+ZWVfbm9pc2VfZmxvb3JfdGhyW2VlX21vZGVdKSwKLQkJCUFSNUtfUEhZX05GVEhSRVMpOwotCi0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKLQkJCShlZS0+ZWVfc3dpdGNoX3NldHRsaW5nW2VlX21vZGVdIDw8IDcpICYgMHgzZjgwLAotCQkJMHhmZmZmYzA3Zik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAotCQkJKGVlLT5lZV9hdG5fdHhfcnhbZWVfbW9kZV0gPDwgMTIpICYgMHgzZjAwMCwKLQkJCTB4ZmZmYzBmZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAotCQkJKGVlLT5lZV9hZGNfZGVzaXJlZF9zaXplW2VlX21vZGVdICYgMHgwMGZmKSB8Ci0JCQkoKGVlLT5lZV9wZ2FfZGVzaXJlZF9zaXplW2VlX21vZGVdIDw8IDgpICYgMHhmZjAwKSwKLQkJCTB4ZmZmZjAwMDApOwotCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKLQkJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDI0KSB8Ci0JCQkoZWUtPmVlX3R4X2VuZDJ4cGFfZGlzYWJsZVtlZV9tb2RlXSA8PCAxNikgfAotCQkJKGVlLT5lZV90eF9mcm0yeHBhX2VuYWJsZVtlZV9tb2RlXSA8PCA4KSB8Ci0JCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdKSwgQVI1S19QSFlfUkZfQ1RMNCk7Ci0KLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX1JGX0NUTDMsCi0JCQllZS0+ZWVfdHhfZW5kMnhsbmFfZW5hYmxlW2VlX21vZGVdIDw8IDgsIDB4ZmZmZjAwZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfTkYsCi0JCQkoZWUtPmVlX3Rocl82MltlZV9tb2RlXSA8PCAxMikgJiAweDdmMDAwLCAweGZmZjgwZmZmKTsKLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsIDQsIDB4ZmZmZmZmMDEpOwotCi0JCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9JUSwKLQkJICAgIEFSNUtfUEhZX0lRX0NPUlJfRU5BQkxFIHwKLQkJICAgIChlZS0+ZWVfaV9jYWxbZWVfbW9kZV0gPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSB8Ci0JCSAgICBlZS0+ZWVfcV9jYWxbZWVfbW9kZV0pOwotCi0JCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMSkKLQkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJCQlBUjVLX1BIWV9HQUlOXzJHSFpfTUFSR0lOX1RYUlgsCi0JCQkJZWUtPmVlX21hcmdpbl90eF9yeFtlZV9tb2RlXSk7CisJCWF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MoYWgsIGNoYW5uZWwsIGFudCwgZWVfbW9kZSk7CiAKIAl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgNTIxMCB3ZSBkbyBhbGwgaW5pdGlhbGl6YXRpb24gdXNpbmcKKwkJICogaW5pdHZhbHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5CisJCSAqIGFueSBzZXR0aW5ncyAoNTIxMCBhbHNvIG9ubHkgc3VwcG9ydHMKKwkJICogYS9hdHVyYm8gbW9kZXMpCisJCSAqLwogCQltZGVsYXkoMSk7CiAJCS8qIERpc2FibGUgcGh5IGFuZCB3YWl0ICovCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0RJU0FCTEUsIEFSNUtfUEhZX0FDVCk7CkBAIC03MTMsMTAwICsxMDc0LDE1NCBAQAogCS8qCiAJICogUmVzdG9yZSBzYXZlZCB2YWx1ZXMKIAkgKi8KKwogCS8qRENVL0FudGVubmEgc2VsZWN0aW9uIG5vdCBhdmFpbGFibGUgb24gNTIxMCovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXEsIEFSNUtfUVVFVUVfREZTX1NFUU5VTSgwKSk7CisKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CisJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfc2VxW2ldLAorCQkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKGkpKTsKKwkJCX0gZWxzZSB7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcVswXSwKKwkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKDApKTsKKwkJCX0KKworCisJCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl91cCwgQVI1S19UU0ZfVTMyKTsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl9sbywgQVI1S19UU0ZfTDMyKTsKKwkJCX0KKwkJfQorCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19hbnQsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKIAl9CisKKwkvKiBMZWRzdGF0ZSAqLwogCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywgc19sZWRbMF0pOworCisJLyogR3BpbyBzZXR0aW5ncyAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19sZWRbMV0sIEFSNUtfR1BJT0NSKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfbGVkWzJdLCBBUjVLX0dQSU9ETyk7CiAKKwkvKiBSZXN0b3JlIHN0YV9pZCBmbGFncyBhbmQgcHJlc2VydmUgb3VyIG1hYyBhZGRyZXNzKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfTE9XX0lEKGFoLT5haF9zdGFfaWQpLAorCQkJCQkJQVI1S19TVEFfSUQwKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIHN0YWlkMV9mbGFncyB8IEFSNUtfSElHSF9JRChhaC0+YWhfc3RhX2lkKSwKKwkJCQkJCUFSNUtfU1RBX0lEMSk7CisKKwogCS8qCi0JICogTWlzYworCSAqIENvbmZpZ3VyZSBQQ1UKIAkgKi8KKworCS8qIFJlc3RvcmUgYnNzaWQgYW5kIGJzc2lkIG1hc2sgKi8KIAkvKiBYWFg6IGFkZCBhaC0+YWlkIG9uY2UgbWFjODAyMTEgZ2l2ZXMgdGhpcyB0byB1cyAqLwogCWF0aDVrX2h3X3NldF9hc3NvY2lkKGFoLCBhaC0+YWhfYnNzaWQsIDApOwogCisJLyogU2V0IFBDVSBjb25maWcgKi8KIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKLQkvKlBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cworCSAqIFBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHhmZmZmZmZmZiwgQVI1S19QSVNSKTsKLQkJLyogSWYgd2UgbGF0ZXIgYWxsb3cgdHVuaW5nIGZvciB0aGlzLCBzdG9yZSBpbnRvIHNjIHN0cnVjdHVyZSAqLwotCQlkYXRhID0gQVI1S19UVU5FX1JTU0lfVEhSRVMgfAotCQkJQVI1S19UVU5FX0JNSVNTX1RIUkVTIDw8IEFSNUtfUlNTSV9USFJfQk1JU1NfUzsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1JTU0lfVEhSKTsKKworCS8qIFNldCBSU1NJL0JSU1NJIHRocmVzaG9sZHMKKwkgKgorCSAqIE5vdGU6IElmIHdlIGRlY2lkZSB0byBzZXQgdGhpcyB2YWx1ZQorCSAqIGR5bmFtaWNhbHksIGhhdmUgaW4gbWluZCB0aGF0IHdoZW4gQVI1S19SU1NJX1RIUgorCSAqIHJlZ2lzdGVyIGlzIHJlYWQgaXQgbWlnaHQgcmV0dXJuIDB4NDAgaWYgd2UgaGF2ZW4ndAorCSAqIHdyb3RlIGFueXRoaW5nIHRvIGl0IHBsdXMgQk1JU1MgUlNTSSB0aHJlc2hvbGQgaXMgemVyb2VkLgorCSAqIFNvIGRvaW5nIGEgc2F2ZS9yZXN0b3JlIHByb2NlZHVyZSBoZXJlIGlzbid0IHRoZSByaWdodAorCSAqIGNob2ljZS4gSW5zdGVhZCBzdG9yZSBpdCBvbiBhdGg1a19odyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKEFSNUtfVFVORV9SU1NJX1RIUkVTIHwKKwkJCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwKKwkJCQlBUjVLX1JTU0lfVEhSX0JNSVNTX1MpLAorCQkJCUFSNUtfUlNTSV9USFIpOworCisJLyogTUlDIFFvUyBzdXBwb3J0ICovCisJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVIyNDEzKSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgQVI1S19NSUNfUU9TX0NUTCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgQVI1S19NSUNfUU9TX1NFTCk7CiAJfQogCi0JLyoKLQkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KLQkgKgotCSAqIFNldCBtYXhpbXVtIERNQSBzaXplICg1MTIpIGV4Y2VwdCBmb3IgUENJLUUgY2FyZHMgc2luY2UKLQkgKiBpdCBjYXVzZXMgcnggb3ZlcnJ1bnMgYW5kIHR4IGVycm9ycyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlCi0JICogcnggb3ZlcnJ1bnMgYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKLQkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgotCSAqCi0JICogSW4gZHVtcHMgdGhpcyBpcyAxMjggZm9yIGFsbGNoaXBzLgotCSAqCi0JICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKLQkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQotCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQotCSAqLwotCWRtYV9zaXplID0gKHBkZXYtPmlzX3BjaWUpID8gQVI1S19ETUFTSVpFXzEyOEIgOiBBUjVLX0RNQVNJWkVfNTEyQjsKLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UWENGRywKLQkJCUFSNUtfVFhDRkdfU0RNQU1SLCBkbWFfc2l6ZSk7Ci0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUlhDRkcsCi0JCQlBUjVLX1JYQ0ZHX1NETUFNVywgZG1hX3NpemUpOworCS8qIFFvUyBOT0FDSyBQb2xpY3kgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oMiwgQVI1S19RT1NfTk9BQ0tfMkJJVF9WQUxVRVMpIHwKKwkJCUFSNUtfUkVHX1NNKDUsIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVQpICB8CisJCQlBUjVLX1JFR19TTSgwLCBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVCksCisJCQlBUjVLX1FPU19OT0FDSyk7CiAJfQogCisKKwkvKgorCSAqIENvbmZpZ3VyZSBQSFkKKwkgKi8KKworCS8qIFNldCBjaGFubmVsIG9uIFBIWSAqLworCXJldCA9IGF0aDVrX2h3X2NoYW5uZWwoYWgsIGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKgogCSAqIEVuYWJsZSB0aGUgUEhZIGFuZCB3YWl0IHVudGlsIGNvbXBsZXRpb24KKwkgKiBUaGlzIGluY2x1ZGVzIEJhc2VCYW5kIGFuZCBTeW50aGVzaXplcgorCSAqIGFjdGl2YXRpb24uCiAJICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9BQ1RfRU5BQkxFLCBBUjVLX1BIWV9BQ1QpOwogCiAJLyoKIAkgKiBPbiA1MjExKyByZWFkIGFjdGl2YXRpb24gLT4gcnggZGVsYXkKIAkgKiBhbmQgdXNlIGl0LgorCSAqCisJICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUgc3VwcG9ydAogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCisJCXUzMiBkZWxheTsKKwkJZGVsYXkgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKIAkJCUFSNUtfUEhZX1JYX0RFTEFZX007Ci0JCWRhdGEgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkYXRhIDw8IDIpIC8gMjIpIDogKGRhdGEgLyAxMCk7CisJCWRlbGF5ID0gKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spID8KKwkJCSgoZGVsYXkgPDwgMikgLyAyMikgOiAoZGVsYXkgLyAxMCk7CiAKLQkJdWRlbGF5KDEwMCArICgyICogZGF0YSkpOwotCQlkYXRhID0gMDsKKwkJdWRlbGF5KDEwMCArICgyICogZGVsYXkpKTsKIAl9IGVsc2UgewogCQltZGVsYXkoMSk7CiAJfQogCiAJLyoKLQkgKiBQZXJmb3JtIEFEQyB0ZXN0ICg/KQorCSAqIFBlcmZvcm0gQURDIHRlc3QgdG8gc2VlIGlmIGJhc2ViYW5kIGlzIHJlYWR5CisJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCiAJICovCi0JZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKKwlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RTVDFfVFhIT0xELCBBUjVLX1BIWV9UU1QxKTsKIAlmb3IgKGkgPSAwOyBpIDw9IDIwOyBpKyspIHsKIAkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQogCQkJYnJlYWs7CiAJCXVkZWxheSgyMDApOwogCX0KLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUEhZX1RTVDEpOwotCWRhdGEgPSAwOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5X3RzdDEsIEFSNUtfUEhZX1RTVDEpOwogCiAJLyoKLQkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjYWxpYnJhdGlvbgorCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgY2FsaWJyYXRpb24KIAkgKgogCSAqIER1cmluZyBBR0MgY2FsaWJyYXRpb24gUlggcGF0aCBpcyByZS1yb3V0ZWQgdG8KLQkgKiBhIHNpZ25hbCBkZXRlY3RvciBzbyB3ZSBkb24ndCByZWNlaXZlIGFueXRoaW5nLgorCSAqIGEgcG93ZXIgZGV0ZWN0b3Igc28gd2UgZG9uJ3QgcmVjZWl2ZSBhbnl0aGluZy4KIAkgKgogCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2FsaWJyYXRlIHNvbWUgc3RhdGljIG9mZnNldHMKIAkgKiB1c2VkIHRvZ2V0aGVyIHdpdGggb24tdGhlIGZseSBJL1EgY2FsaWJyYXRpb24gKHRoZQogCSAqIG9uZSBwZXJmb3JtZWQgdmlhIGF0aDVrX2h3X3BoeV9jYWxpYnJhdGUpLCB0aGF0IGRvZXNuJ3QKIAkgKiBpbnRlcnJ1cHQgcnggcGF0aC4KIAkgKgorCSAqIFdoaWxlIHJ4IHBhdGggaXMgcmUtcm91dGVkIHRvIHRoZSBwb3dlciBkZXRlY3RvciB3ZSBhbHNvCisJICogc3RhcnQgYSBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiwgdG8gbWVhc3VyZSB0aGUKKwkgKiBjYXJkJ3Mgbm9pc2UgZmxvb3IgKHRoZSBub2lzZSB3ZSBtZWFzdXJlIHdoZW4gd2UgYXJlIG5vdAorCSAqIHRyYW5zbWl0aW5nIG9yIHJlY2VpdmluZyBhbnl0aGluZykuCisJICoKIAkgKiBJZiB3ZSBhcmUgaW4gYSBub2lzeSBlbnZpcm9ubWVudCBBR0MgY2FsaWJyYXRpb24gbWF5IHRpbWUKLQkgKiBvdXQuCisJICogb3V0IGFuZC9vciBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBtaWdodCB0aW1lb3V0LgogCSAqLwogCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9BR0NDVEwsCiAJCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCk7CkBAIC04MjgsMzAgKzEyNDMsMzcgQEAKIAkJCUFSNUtfUEhZX0FHQ0NUTF9DQUwsIDAsIGZhbHNlKSkgewogCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZ2FpbiBjYWxpYnJhdGlvbiB0aW1lb3V0ICgldU1IeilcbiIsCiAJCQljaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JCXJldHVybiAtRUFHQUlOOwogCX0KIAogCS8qCi0JICogU3RhcnQgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24KLQkgKgogCSAqIElmIHdlIHJ1biBORiBjYWxpYnJhdGlvbiBiZWZvcmUgQUdDLCBpdCBhbHdheXMgdGltZXMgb3V0LgogCSAqIEJpbmFyeSBIQUwgc3RhcnRzIE5GIGFuZCBBR0MgY2FsaWJyYXRpb24gYXQgdGhlIHNhbWUgdGltZQotCSAqIGFuZCBvbmx5IHdhaXRzIGZvciBBR0MgdG8gZmluaXNoLiBJIGJlbGlldmUgdGhhdCdzIHdyb25nIGJlY2F1c2UKLQkgKiBkdXJpbmcgTkYgY2FsaWJyYXRpb24sIHJ4IHBhdGggaXMgYWxzbyByb3V0ZWQgdG8gYSBkZXRlY3Rvciwgc28gaWYKLQkgKiBpdCBkb2Vzbid0IGZpbmlzaCB3ZSB3b24ndCBoYXZlIFJYLgotCSAqCi0JICogWFhYOiBGaW5kIGFuIGludGVydmFsIHRoYXQncyBPSyBmb3IgYWxsIGNhcmRzLi4uCisJICogYW5kIG9ubHkgd2FpdHMgZm9yIEFHQyB0byBmaW5pc2guIEFsc28gaWYgQUdDIG9yIE5GIGNhbC4KKwkgKiB0aW1lcyBvdXQsIHJlc2V0IGRvZXNuJ3QgZmFpbCBvbiBiaW5hcnkgSEFMLiBJIGJlbGlldmUKKwkgKiB0aGF0J3Mgd3JvbmcgYmVjYXVzZSBzaW5jZSByeCBwYXRoIGlzIHJvdXRlZCB0byBhIGRldGVjdG9yLAorCSAqIGlmIGNhbC4gZG9lc24ndCBmaW5pc2ggd2Ugd29uJ3QgaGF2ZSBSWC4gU2FtJ3MgSEFMIGZvciBBUjUyMTAvNTIxMQorCSAqIGVuYWJsZXMgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24gYWZ0ZXIgb2Zmc2V0IGNhbGlicmF0aW9uIGFuZCBpZiBub2lzZQorCSAqIGZsb29yIGNhbGlicmF0aW9uIGZhaWxzLCByZXNldCBmYWlscy4gSSBiZWxpZXZlIHRoYXQncworCSAqIGEgYmV0dGVyIGFwcHJvYWNoLCB3ZSBqdXN0IG5lZWQgdG8gZmluZCBhIHBvbGxpbmcgaW50ZXJ2YWwKKwkgKiB0aGF0IHN1aXRzIGJlc3QsIGV2ZW4gaWYgcmVzZXQgY29udGludWVzIHdlIG5lZWQgdG8gbWFrZQorCSAqIHN1cmUgdGhhdCByeCBwYXRoIGlzIHJlYWR5LgogCSAqLwogCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKKworCS8qCisJICogQ29uZmlndXJlIFFDVXMvRENVcworCSAqLworCisJLyogVE9ETzogSFcgQ29tcHJlc3Npb24gc3VwcG9ydCBmb3IgZGF0YSBxdWV1ZXMgKi8KKwkvKiBUT0RPOiBCdXJzdCBwcmVmZXRjaCBmb3IgZGF0YSBxdWV1ZXMgKi8KKwogCS8qCiAJICogUmVzZXQgcXVldWVzIGFuZCBzdGFydCBiZWFjb24gdGltZXJzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc2V0IHJvdXRpbmUKKwkgKiBUaGlzIGFsc28gc2V0cyBRQ1UgbWFzayBvbiBlYWNoIERDVSBmb3IgMToxIHFjdSB0byBkY3UgbWFwcGluZworCSAqIE5vdGU6IElmIHdlIHdhbnQgd2UgY2FuIGFzc2lnbiBtdWx0aXBsZSBxY3VzIG9uIG9uZSBkY3UuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bTsgaSsrKSB7Ci0JCS8qTm8gUUNVIG9uIDUyMTAqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCi0JCQlBUjVLX1JFR19XUklURV9RKGFoLCBBUjVLX1FVRVVFX1FDVU1BU0soaSksIGkpOwotCiAJCXJldCA9IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJQVRINUtfRVJSKGFoLT5haF9zYywKQEAgLTg2MCwxNCArMTI4Miw0MCBAQAogCQl9CiAJfQogCisKKwkvKgorCSAqIENvbmZpZ3VyZSBETUEvSW50ZXJydXB0cworCSAqLworCisJLyoKKwkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KKwkgKgorCSAqIFNldCBzdGFuZGFyZCBETUEgc2l6ZSAoMTI4KS4gTm90ZSB0aGF0CisJICogYSBETUEgc2l6ZSBvZiA1MTIgY2F1c2VzIHJ4IG92ZXJydW5zIGFuZCB0eCBlcnJvcnMKKwkgKiBvbiBwY2ktZSBjYXJkcyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlIHJ4IG92ZXJydW5zCisJICogYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKKwkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgorCSAqCisJICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKKwkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQorCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJQVI1S19UWENGR19TRE1BTVIsIEFSNUtfRE1BU0laRV8xMjhCKTsKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19SWENGRywKKwkJCUFSNUtfUlhDRkdfU0RNQU1XLCBBUjVLX0RNQVNJWkVfMTI4Qik7CisJfQorCiAJLyogUHJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9uIDUyMTEvNTIxMiovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQogCQlhdGg1a19od19zZXRfaW1yKGFoLCBhaC0+YWhfaW1yKTsKIAogCS8qCi0JICogU2V0IFJGIGtpbGwgZmxhZ3MgaWYgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgKHJlYWQgZnJvbSB0aGUgRUVQUk9NKQotCSAqIERpc2FibGUgZ3Bpb19pbnRyIGZvciBub3cgc2luY2UgaXQgcmVzdWx0cyBzeXN0ZW0gaGFuZy4KLQkgKiBUT0RPOiBIYW5kbGUgdGhpcyBpbiBhdGg1a19pbnRyCisJICogU2V0dXAgUkZLaWxsIGludGVycnVwdCBpZiByZmtpbGwgZmxhZyBpcyBzZXQgb24gZWVwcm9tLgorCSAqIFRPRE86IFVzZSBncGlvIHBpbiBhbmQgcG9sYXJpdHkgaW5mb3MgZnJvbSBlZXByb20KKwkgKiBUT0RPOiBIYW5kbGUgdGhpcyBpbiBhdGg1a19pbnRyIGJlY2F1c2UgaXQnbGwgcmVzdWx0CisJICogCSBhIG5hc3R5IGludGVycnVwdCBzdG9ybS4KIAkgKi8KICNpZiAwCiAJaWYgKEFSNUtfRUVQUk9NX0hEUl9SRktJTEwoYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX2hlYWRlcikpIHsKQEAgLTg4MCwzMyArMTMyOCwxMiBAQAogCX0KICNlbmRpZgogCi0JLyoKLQkgKiBTZXQgdGhlIDMyTUh6IHJlZmVyZW5jZSBjbG9jayBvbiA1MjEyIHBoeSBjbG9jayBzbGVlcCByZWdpc3RlcgotCSAqCi0JICogVE9ETzogRmluZCBvdXQgaG93IHRvIHN3aXRjaCB0byBleHRlcm5hbCAzMktoeiBjbG9jayB0byBzYXZlIHBvd2VyCi0JICovCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NSXzMyTUhaLCBBUjVLX1BIWV9TQ1IpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDQUxfMzJNSFosIEFSNUtfUEhZX1NDQUwpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3BoeV9zcGVuZGluZywgQVI1S19QSFlfU1BFTkRJTkcpOwotCi0JCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19VU0VDXzUyMTEpICYgMHhmZmZmYzA3ZiA7Ci0JCWRhdGEgfD0gKGFoLT5haF9waHlfc3BlbmRpbmcgPT0gQVI1S19QSFlfU1BFTkRJTkdfMTgpID8KLQkJCQkJCTB4MDAwMDBmODAgOiAweDAwMDAxMzgwIDsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1VTRUNfNTIxMSk7Ci0JCWRhdGEgPSAwOwotCX0KLQotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMTAwYWEsIDB4ODExOCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgMHg4MTFjKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDUyLCAweDgxMDgpOwotCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjI0MTMpCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMDQsIDB4ODEyMCk7Ci0JfQorCS8qIEVuYWJsZSAzMktIeiBjbG9jayBmdW5jdGlvbiBmb3IgQVI1MjEyKyBjaGlwcworCSAqIFNldCBjbG9ja3MgdG8gMzJLSHogb3BlcmF0aW9uIGFuZCB1c2UgYW4KKwkgKiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIHdoZW4gc2xlZXBpbmcgaWYgb25lCisJICogZXhpc3RzICovCisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQorCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCB0cnVlKTsKIAogCS8qCiAJICogRGlzYWJsZSBiZWFjb25zIGFuZCByZXNldCB0aGUgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmJ1ZmZlci5oCkBAIC0wLDAgKzEsMTE4MSBAQAorLyoKKyAqIFJGIEJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqLworCisKKy8qCisgKiBUaGVyZSBhcmUgc29tZSBzcGVjaWFsIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAorICogdGhhdCBjb250cm9sIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCisgKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KKyAqCisgKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0CisgKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGNoaXAsIHVzaW5nIGEgc3BlY2lhbCByZWdpc3RlciwKKyAqIHRoYXQgaG9sZHMgYWxsIHRoZSBzZXR0aW5ncyB3ZSBuZWVkLiBBZnRlciB3ZSAndmUgc2VudCB0aGUKKyAqIGRhdGEgcGFja2V0LCB3ZSB3cml0ZSBvbiBhbm90aGVyIHNwZWNpYWwgcmVnaXN0ZXIgdG8gbm90aWZ5IGh3CisgKiB0byBhcHBseSB0aGUgc2V0dGluZ3MuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBjYW4gYmUgZHluYW1pY2FseSBwcm9ncmFtbWVkIGR1cmluZyBvcGVyYXRpb24gYW5kIHRoZSBzZXR0aW5ncworICogYXJlIGFwcGxpZWQgZmFzdGVyIG9uIHRoZSBody4KKyAqCisgKiBXZSBjYWxsIGVhY2ggZGF0YSBwYWNrZXQgYW4gIlJGIEJhbmsiIGFuZCBhbGwgdGhlIGRhdGEgd2Ugd3JpdGUKKyAqIChhbGwgUkYgQmFua3MpICJSRiBCdWZmZXIiLiBUaGlzIGZpbGUgaG9sZHMgaW5pdGlhbCBSRiBCdWZmZXIKKyAqIGRhdGEgZm9yIHRoZSBkaWZmZXJlbnQgUkYgY2hpcHMsIGFuZCB2YXJpb3VzIGluZm8gdG8gbWF0Y2ggUkYKKyAqIEJ1ZmZlciBvZmZzZXRzIHdpdGggc3BlY2lmaWMgUkYgcmVnaXN0ZXJzIHNvIHRoYXQgd2UgY2FuIGFjY2VzcworICogdGhlbS4gV2UgdHdlYWsgdGhlc2Ugc2V0dGluZ3Mgb24gcmZyZWdzX2luaXQgZnVuY3Rpb24uCisgKgorICogQWxzbyBjaGVjayBvdXQgcmVnLmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgorICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6CisgKgorICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCisgKi8KKworCisvKgorICogU3RydWN0IHRvIGhvbGQgZGVmYXVsdCBtb2RlIHNwZWNpZmljIFJGCisgKiByZWdpc3RlciB2YWx1ZXMgKFJGIEJhbmtzKQorICovCitzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHsKKwl1OAlyZmJfYmFuazsJCS8qIFJGIEJhbmsgbnVtYmVyICovCisJdTE2CXJmYl9jdHJsX3JlZ2lzdGVyOwkvKiBSRiBCdWZmZXIgY29udHJvbCByZWdpc3RlciAqLworCXUzMglyZmJfbW9kZV9kYXRhWzVdOwkvKiBSRiBCdWZmZXIgZGF0YSBmb3IgZWFjaCBtb2RlICovCit9OworCisvKgorICogU3RydWN0IHRvIGhvbGQgUkYgQnVmZmVyIGZpZWxkCisgKiBpbmZvcyB1c2VkIHRvIGFjY2VzcyBjZXJ0YWluIFJGCisgKiBhbmFsb2cgcmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBhdGg1a19yZmJfZmllbGQgeworCXU4CWxlbjsJLyogRmllbGQgbGVuZ3RoICovCisJdTE2CXBvczsJLyogT2Zmc2V0IG9uIHRoZSByYXcgcGFja2V0ICovCisJdTgJY29sOwkvKiBDb2x1bW4gLXVzZWQgZm9yIHNoaWZ0aW5nICovCit9OworCisvKgorICogUkYgYW5hbG9nIHJlZ2lzdGVyIGRlZmluaXRpb24KKyAqLworc3RydWN0IGF0aDVrX3JmX3JlZyB7CisJdTgJCQliYW5rOwkvKiBSRiBCdWZmZXIgQmFuayBudW1iZXIgKi8KKwl1OAkJCWluZGV4OwkvKiBSZWdpc3RlcidzIGluZGV4IG9uIHJmX3JlZ3NfaWR4ICovCisJc3RydWN0IGF0aDVrX3JmYl9maWVsZAlmaWVsZDsJLyogUkYgQnVmZmVyIGZpZWxkIGZvciB0aGlzIHJlZ2lzdGVyICovCit9OworCisvKiBNYXAgUkYgcmVnaXN0ZXJzIHRvIGluZGV4ZXMKKyAqIFdlIGRvIHRoaXMgdG8gaGFuZGxlIGNvbW1vbiBiaXRzIGFuZCBtYWtlIG91cgorICogbGlmZSBlYXNpZXIgYnkgdXNpbmcgYW4gaW5kZXggZm9yIGVhY2ggcmVnaXN0ZXIKKyAqIGluc3RlYWQgb2YgYSBmdWxsIHJmYl9maWVsZCAqLworZW51bSBhdGg1a19yZl9yZWdzX2lkeCB7CisJLyogQkFOSyA2ICovCisJQVI1S19SRl9PQl8yR0haID0gMCwKKwlBUjVLX1JGX09CXzVHSFosCisJQVI1S19SRl9EQl8yR0haLAorCUFSNUtfUkZfREJfNUdIWiwKKwlBUjVLX1JGX0ZJWEVEX0JJQVNfQSwKKwlBUjVLX1JGX0ZJWEVEX0JJQVNfQiwKKwlBUjVLX1JGX1BXRF9YUEQsCisJQVI1S19SRl9YUERfU0VMLAorCUFSNUtfUkZfWFBEX0dBSU4sCisJQVI1S19SRl9QRF9HQUlOX0xPLAorCUFSNUtfUkZfUERfR0FJTl9ISSwKKwlBUjVLX1JGX0hJR0hfVkNfQ1AsCisJQVI1S19SRl9NSURfVkNfQ1AsCisJQVI1S19SRl9MT1dfVkNfQ1AsCisJQVI1S19SRl9QVVNIX1VQLAorCUFSNUtfUkZfUEFEMkdORCwKKwlBUjVLX1JGX1hCMl9MVkwsCisJQVI1S19SRl9YQjVfTFZMLAorCUFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsCisJQVI1S19SRl9QV0RfODQsCisJQVI1S19SRl9QV0RfOTAsCisJQVI1S19SRl9QV0RfMTMwLAorCUFSNUtfUkZfUFdEXzEzMSwKKwlBUjVLX1JGX1BXRF8xMzIsCisJQVI1S19SRl9QV0RfMTM2LAorCUFSNUtfUkZfUFdEXzEzNywKKwlBUjVLX1JGX1BXRF8xMzgsCisJQVI1S19SRl9QV0RfMTY2LAorCUFSNUtfUkZfUFdEXzE2NywKKwlBUjVLX1JGX0RFUkJZX0NIQU5fU0VMX01PREUsCisJLyogQkFOSyA3ICovCisJQVI1S19SRl9HQUlOX0ksCisJQVI1S19SRl9QTE9fU0VMLAorCUFSNUtfUkZfUkZHQUlOX1NFTCwKKwlBUjVLX1JGX1JGR0FJTl9TVEVQLAorCUFSNUtfUkZfV0FJVF9TLAorCUFSNUtfUkZfV0FJVF9JLAorCUFSNUtfUkZfTUFYX1RJTUUsCisJQVI1S19SRl9NSVhWR0FfT1ZSLAorCUFSNUtfUkZfTUlYR0FJTl9PVlIsCisJQVI1S19SRl9NSVhHQUlOX1NURVAsCisJQVI1S19SRl9QRF9ERUxBWV9BLAorCUFSNUtfUkZfUERfREVMQVlfQiwKKwlBUjVLX1JGX1BEX0RFTEFZX1hSLAorCUFSNUtfUkZfUERfUEVSSU9EX0EsCisJQVI1S19SRl9QRF9QRVJJT0RfQiwKKwlBUjVLX1JGX1BEX1BFUklPRF9YUiwKK307CisKKworLyoqKioqKioqKioqKioqKioqKipcCisqIFJGNTExMSAoU29tYnJlcm8pICoKK1wqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTExX09CXzJHSFoJCXsgMywgMTE5LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfREJfMkdIWgkJeyAzLCAxMjIsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTExX09CXzVHSFoJCXsgMywgMTA0LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfREJfNUdIWgkJeyAzLCAxMDcsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTExX1BXRF9YUEQJCXsgMSwgOTUsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfWFBEX0dBSU4JCXsgNCwgOTYsICAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTFfUFdEKF9uKQkJeyAxLCAoMTM1IC0gX24pLCAzIH0KKworLyogQkFOSyA3CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMV9HQUlOX0kJCXsgNiwgMjksICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfUExPX1NFTAkJeyAxLCA0LCAgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9SRkdBSU5fU0VMCQl7IDEsIDM2LCAgMCB9CisjZGVmaW5lIEFSNUtfUkY1MTExX1JGR0FJTl9TVEVQCQl7IDYsIDM3LCAgMCB9CisvKiBPbmx5IG9uIEFSNTIxMiBCYXNlQmFuZCBhbmQgdXAgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTFfV0FJVF9TCQl7IDUsIDE5LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX1dBSVRfSQkJeyA1LCAyNCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9NQVhfVElNRQkJeyAyLCA0OSwgIDAgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTFbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjUxMTFfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkY1MTExX0RCXzJHSFp9LAorCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMV9PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJQVI1S19SRjUxMTFfREJfNUdIWn0sCisJezYsIEFSNUtfUkZfUFdEX1hQRCwJCUFSNUtfUkY1MTExX1BXRF9YUER9LAorCXs2LCBBUjVLX1JGX1hQRF9HQUlOLAkJQVI1S19SRjUxMTFfWFBEX0dBSU59LAorCXs2LCBBUjVLX1JGX1BXRF84NCwJCUFSNUtfUkY1MTExX1BXRCg4NCl9LAorCXs2LCBBUjVLX1JGX1BXRF85MCwJCUFSNUtfUkY1MTExX1BXRCg5MCl9LAorCXs3LCBBUjVLX1JGX0dBSU5fSSwJCUFSNUtfUkY1MTExX0dBSU5fSX0sCisJezcsIEFSNUtfUkZfUExPX1NFTCwJCUFSNUtfUkY1MTExX1BMT19TRUx9LAorCXs3LCBBUjVLX1JGX1JGR0FJTl9TRUwsCQlBUjVLX1JGNTExMV9SRkdBSU5fU0VMfSwKKwl7NywgQVI1S19SRl9SRkdBSU5fU1RFUCwJQVI1S19SRjUxMTFfUkZHQUlOX1NURVB9LAorCXs3LCBBUjVLX1JGX1dBSVRfUywJCUFSNUtfUkY1MTExX1dBSVRfU30sCisJezcsIEFSNUtfUkZfV0FJVF9JLAkJQVI1S19SRjUxMTFfV0FJVF9JfSwKKwl7NywgQVI1S19SRl9NQVhfVElNRSwJCUFSNUtfUkY1MTExX01BWF9USU1FfQorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfNTExMVtdID0geworCXsgMCwgMHg5ODljLAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDA0MDBmOSwgMHgwMDA0MDBmOSwgMHgwMDA0MDBmZiwgMHgwMDA0MDBmZCwgMHgwMDA0MDBmZCB9IH0sCisJeyAwLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCisJeyAxLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCB9IH0sCisJeyAzLCAweDk4ZDgsCisJICAgIHsgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDM4MDBjMCwgMHgwMDM4MDA4MCwgMHgwMjM4MDBjMCwgMHgwMDM4MDBjMCwgMHgwMDM4MDBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAwMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNyB9IH0sCisJeyA2LCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSwgMHgwMDAwMDA2MSwgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0YywgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI5YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjUxMTIvUkYyMTEyIChEZXJieSkgKgorXCoqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDcgKENvbW1vbikJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJYX0dBSU5fSQkJeyA2LCAxNCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYVkdBX09WUgkJeyAxLCAzNiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlIJeyAyLCAzNywgIDAgfQorI2RlZmluZSBBUjVLX1JGNTExMlhfTUlYR0FJTl9TVEVQCXsgNCwgMzIsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0EJCXsgNCwgNTgsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0IJCXsgNCwgNjIsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX1hSCXsgNCwgNjYsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9BCXsgNCwgNzAsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9CCXsgNCwgNzQsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUgl7IDQsIDc4LCAgMCB9CisKKy8qIFJGWDExMiAoRGVyYnkgMSkgKi8KKworLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJfT0JfMkdIWgkJeyAzLCAyNjksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9EQl8yR0haCQl7IDMsIDI3MiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJfT0JfNUdIWgkJeyAzLCAyNjEsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9EQl81R0haCQl7IDMsIDI2NCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJfRklYRURfQklBU19BCXsgMSwgMjYwLCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJfRklYRURfQklBU19CCXsgMSwgMjU5LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9YUERfU0VMCQl7IDEsIDI4NCwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX1hQRF9HQUlOCQl7IDIsIDI1MiwgMCB9CisKKy8qIEFjY2VzcyB0byBQV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFSNUtfUkY1MTEyX1BXRChfbikJCXsgMSwgKDMwMiAtIF9uKSwgMyB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMltdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGNTExMl9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTJfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTEyX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQlBUjVLX1JGNTExMl9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0EsCUFSNUtfUkY1MTEyX0ZJWEVEX0JJQVNfQX0sCisJezYsIEFSNUtfUkZfRklYRURfQklBU19CLAlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0J9LAorCXs2LCBBUjVLX1JGX1hQRF9TRUwsCQlBUjVLX1JGNTExMl9YUERfU0VMfSwKKwl7NiwgQVI1S19SRl9YUERfR0FJTiwJCUFSNUtfUkY1MTEyX1hQRF9HQUlOfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMwLAkJQVI1S19SRjUxMTJfUFdEKDEzMCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzEsCQlBUjVLX1JGNTExMl9QV0QoMTMxKX0sCisJezYsIEFSNUtfUkZfUFdEXzEzMiwJCUFSNUtfUkY1MTEyX1BXRCgxMzIpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM2LAkJQVI1S19SRjUxMTJfUFdEKDEzNil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzcsCQlBUjVLX1JGNTExMl9QV0QoMTM3KX0sCisJezYsIEFSNUtfUkZfUFdEXzEzOCwJCUFSNUtfUkY1MTEyX1BXRCgxMzgpfSwKKwl7NywgQVI1S19SRl9HQUlOX0ksCQlBUjVLX1JGNTExMlhfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9NSVhWR0FfT1ZSLAkJQVI1S19SRjUxMTJYX01JWFZHQV9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fT1ZSLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fU1RFUCwJQVI1S19SRjUxMTJYX01JWEdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQSwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9BfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9CLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0J9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX1hSLAlBUjVLX1JGNTExMlhfUERfREVMQVlfWFJ9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9BLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0F9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9CLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0J9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9YUiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTEyW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGIwLCAweDAwMDAwMGIwLCAweDAwMDAwMGE4LCAweDAwMDAwMGE4LCAweDAwMDAwMGE4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNmM0YTQxLCAweDAwNmM0YTQxLCAweDAwNmM0YWYxLCAweDAwNmM0YTYxLCAweDAwNmM0YTYxIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTA4OTJhLCAweDAwNTA4OTJhLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwIH0gfSwKKwl7IDYsIDB4OThkMCwKKwkgICAgeyAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKKwl7IDcsIDB4OThjNCwKKwkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKK307CisKKy8qIFJGWDExMkEgKERlcmJ5IDIpICovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJBX09CXzJHSFoJCXsgMywgMjg3LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX0RCXzJHSFoJCXsgMywgMjkwLCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMkFfT0JfNUdIWgkJeyAzLCAyNzksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfREJfNUdIWgkJeyAzLCAyODIsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0EJeyAxLCAyNzgsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfRklYRURfQklBU19CCXsgMSwgMjc3LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMkFfWFBEX1NFTAkJeyAxLCAzMDIsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfUERHQUlOTE8JCXsgMiwgMjcwLCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX1BER0FJTkhJCQl7IDIsIDI1NywgMCB9CisKKy8qIEFjY2VzcyB0byBQV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFSNUtfUkY1MTEyQV9QV0QoX24pCQl7IDEsICgzMDYgLSBfbiksIDMgfQorCisvKiBWb2x0YWdlIHJlZ3VsYXRvcnMgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJBX0hJR0hfVkNfQ1AJCXsgMiwgOTAsICAyIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX01JRF9WQ19DUAkJeyAyLCA5MiwgIDIgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfTE9XX1ZDX0NQCQl7IDIsIDk0LCAgMiB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QVVNIX1VQCQl7IDEsIDI1NCwgIDIgfQorCisvKiBQb3dlciBjb25zdW1wdGlvbiAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfUEFEMkdORAkJeyAxLCAyODEsIDEgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfWEIyX0xWTAkJeyAyLCAxLAkgIDMgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfWEI1X0xWTAkJeyAyLCAzLAkgIDMgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTJhW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkY1MTEyQV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTJBX0RCXzJHSFp9LAorCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMkFfT0JfNUdIWn0sCisJezYsIEFSNUtfUkZfREJfNUdIWiwJCUFSNUtfUkY1MTEyQV9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0EsCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0F9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQiwJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQn0sCisJezYsIEFSNUtfUkZfWFBEX1NFTCwJCUFSNUtfUkY1MTEyQV9YUERfU0VMfSwKKwl7NiwgQVI1S19SRl9QRF9HQUlOX0xPLAkJQVI1S19SRjUxMTJBX1BER0FJTkxPfSwKKwl7NiwgQVI1S19SRl9QRF9HQUlOX0hJLAkJQVI1S19SRjUxMTJBX1BER0FJTkhJfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMwLAkJQVI1S19SRjUxMTJBX1BXRCgxMzApfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMxLAkJQVI1S19SRjUxMTJBX1BXRCgxMzEpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMyLAkJQVI1S19SRjUxMTJBX1BXRCgxMzIpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM2LAkJQVI1S19SRjUxMTJBX1BXRCgxMzYpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM3LAkJQVI1S19SRjUxMTJBX1BXRCgxMzcpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM4LAkJQVI1S19SRjUxMTJBX1BXRCgxMzgpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTY2LAkJQVI1S19SRjUxMTJBX1BXRCgxNjYpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTY3LAkJQVI1S19SRjUxMTJBX1BXRCgxNjcpfSwKKwl7NiwgQVI1S19SRl9ISUdIX1ZDX0NQLAkJQVI1S19SRjUxMTJBX0hJR0hfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX01JRF9WQ19DUCwJCUFSNUtfUkY1MTEyQV9NSURfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX0xPV19WQ19DUCwJCUFSNUtfUkY1MTEyQV9MT1dfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX1BVU0hfVVAsCQlBUjVLX1JGNTExMkFfUFVTSF9VUH0sCisJezYsIEFSNUtfUkZfUEFEMkdORCwJCUFSNUtfUkY1MTEyQV9QQUQyR05EfSwKKwl7NiwgQVI1S19SRl9YQjJfTFZMLAkJQVI1S19SRjUxMTJBX1hCMl9MVkx9LAorCXs2LCBBUjVLX1JGX1hCNV9MVkwsCQlBUjVLX1JGNTExMkFfWEI1X0xWTH0sCisJezcsIEFSNUtfUkZfR0FJTl9JLAkJQVI1S19SRjUxMTJYX0dBSU5fSX0sCisJezcsIEFSNUtfUkZfTUlYVkdBX09WUiwJCUFSNUtfUkY1MTEyWF9NSVhWR0FfT1ZSfSwKKwl7NywgQVI1S19SRl9NSVhHQUlOX09WUiwJQVI1S19SRjUxMTJYX01JWEdBSU5fT1ZSfSwKKwl7NywgQVI1S19SRl9NSVhHQUlOX1NURVAsCUFSNUtfUkY1MTEyWF9NSVhHQUlOX1NURVB9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX0EsCQlBUjVLX1JGNTExMlhfUERfREVMQVlfQX0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQiwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9CfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9YUiwJQVI1S19SRjUxMTJYX1BEX0RFTEFZX1hSfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfQSwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9BfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfQiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9CfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfWFIsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfWFJ9LAorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfNTExMmFbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTkgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAorCXsgNiwgMHg5OGQ4LAorCSAgICB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKipcCisqIFJGMjQxMyAoR3JpZmZpbikgKgorXCoqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjI0MTNfT0JfMkdIWgkJeyAzLCAxNjgsIDAgfQorI2RlZmluZQlBUjVLX1JGMjQxM19EQl8yR0haCQl7IDMsIDE2NSwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjQxM1tdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjQxM19PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjI0MTNfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MKKyAqIFhYWDogYS9hVHVyYm8gPz8/CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yNDEzW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjgwMDAwLCAweDAwMjgwMDAwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTAwMGMwLCAweDAwNTAwMGMwLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwIH0gfSwKKwl7IDYsIDB4OThkOCwKKwkgICAgeyAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjIzMTUvUkYyMzE2IChDb2JyYSBTb0MpICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjIzMTZfT0JfMkdIWgkJeyAzLCAxNzgsIDAgfQorI2RlZmluZQlBUjVLX1JGMjMxNl9EQl8yR0haCQl7IDMsIDE3NSwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjMxNltdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjMxNl9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjIzMTZfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yMzE2W10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDgwLCAweDAwYTAwMDgwLCAweDAwYTAwMDgwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDBkLCAweDAwNDAwMDBkLCAweDAwNDAwMDBkIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4IH0gfSwKKwl7IDYsIDB4OThjMCwKKwkgICAgeyAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjU0MTMvUkY1NDI0IChFYWdsZS9Db25kb3IpICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjU0MTNfT0JfMkdIWgkJeyAzLCAyNDEsIDAgfQorI2RlZmluZQlBUjVLX1JGNTQxM19EQl8yR0haCQl7IDMsIDIzOCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjU0MTNfT0JfNUdIWgkJeyAzLCAyNDcsIDAgfQorI2RlZmluZQlBUjVLX1JGNTQxM19EQl81R0haCQl7IDMsIDI0NCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjU0MTNfUFdEX0lDTE9CVUYyRwl7IDMsIDEzMSwgMyB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RFUkJZX0NIQU5fU0VMX01PREUJeyAxLCAyOTEsIDIgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzU0MTNbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJIEFSNUtfUkY1NDEzX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQkgQVI1S19SRjU0MTNfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCSBBUjVLX1JGNTQxM19PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJIEFSNUtfUkY1NDEzX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX1BXRF9JQ0xPQlVGXzJHLAkgQVI1S19SRjU0MTNfUFdEX0lDTE9CVUYyR30sCisJezYsIEFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwgQVI1S19SRjU0MTNfREVSQllfQ0hBTl9TRUxfTU9ERX0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81NDEzW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAwMGMwLCAweDAwYTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAyYzAwLCAweDAwMDAyYzAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwLCAweDAwMDAyYzAwIH0gfSwKKwl7IDYsIDB4OThjOCwKKwkgICAgeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjI0MjUvUkYyNDE3IChTd2FuL05hbGEpICoKKyogQVIyMzE3IChTcGlkZXIgU29DKSAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkYyNDI1X09CXzJHSFoJCXsgMywgMTkzLCAwIH0KKyNkZWZpbmUJQVI1S19SRjI0MjVfREJfMkdIWgkJeyAzLCAxOTAsIDAgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzI0MjVbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjI0MjVfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkYyNDI1X0RCXzJHSFp9LAorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzCisgKiBYWFg6IGEvYVR1cmJvID8KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MjVbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAorCXsgNiwgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworLyoKKyAqIFRPRE86IEhhbmRsZSB0aGUgZmV3IGRpZmZlcmVuY2VzIHdpdGggc3dhbiBkdXJpbmcKKyAqIGJhbmsgbW9kaWZpY2F0aW9uIGFuZCBnZXQgcmlkIG9mIHRoaXMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzIzMTdbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODggfSB9LAorCXsgNiwgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworLyoKKyAqIFRPRE86IEhhbmRsZSB0aGUgZmV3IGRpZmZlcmVuY2VzIHdpdGggc3dhbiBkdXJpbmcKKyAqIGJhbmsgbW9kaWZpY2F0aW9uIGFuZCBnZXQgcmlkIG9mIHRoaXMKKyAqIFhYWDogYS9hVHVyYm8gPworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjQxN1tdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHg4MGU3MDAwMCwgMHg4MGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZnYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzU0ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZnYWluLmgKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiBSRiBHYWluIG9wdGltaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKi8KKworLyoKKyAqIE1vZGUtc3BlY2lmaWMgUkYgR2FpbiB0YWJsZSAoNjRieXRlcykgZm9yIFJGNTExMS81MTEyCisgKiAoUkY1MTEwIG9ubHkgY29tZXMgd2l0aCBBUjUyMTAgYW5kIG9ubHkgc3VwcG9ydHMgYS90dXJibyBhIG1vZGUgc28gaW5pdGlhbAorICogUkYgR2FpbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKKyAqLworc3RydWN0IGF0aDVrX2luaV9yZmdhaW4geworCXUxNglyZmdfcmVnaXN0ZXI7CS8qIFJGIEdhaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLworCXUzMglyZmdfdmFsdWVbMl07CS8qIFtmcmVxIChzZWUgYmVsb3cpXSAqLworfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjUxMTEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTExMVtdID0geworCS8qCQkJICAgICAgNUdoegkyR2h6CSovCisJeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDAyOSwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDE1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDFkOSwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA0NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDA5OSwgMHgwMDAwMDA4NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDFhNSwgMHgwMDAwMDE0OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAxZTUsIDB4MDAwMDAxODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDI1LCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDAxNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAwMDgsIDB4MDAwMDAwNDIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDQ4LCAweDAwMDAwMDgyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA4OCwgMHgwMDAwMDE3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxOTgsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMWQ4LCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDAxOCwgMHgwMDAwMDAxMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwNTgsIDB4MDAwMDAwNTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMDk4LCAweDAwMDAwMDkyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFhNCwgMHgwMDAwMDE3YyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAxZTQsIDB4MDAwMDAxYmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDI0LCAweDAwMDAwMWZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDA2NCwgMHgwMDAwMDAwYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAwYTQsIDB4MDAwMDAwNGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMGU0LCAweDAwMDAwMDhhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDEwYSwgMHgwMDAwMDE1YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxNGEsIDB4MDAwMDAxOWEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMThhLCAweDAwMDAwMWRhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDFjYSwgMHgwMDAwMDAwZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwMGEsIDB4MDAwMDAwNGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDRhLCAweDAwMDAwMDhlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDA4YSwgMHgwMDAwMDE1ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAxYmEsIDB4MDAwMDAxOWUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMWZhLCAweDAwMDAwMWRlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwN2EsIDB4MDAwMDAwNDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMTg2LCAweDAwMDAwMDg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDFjNiwgMHgwMDAwMDE3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwMDYsIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMDQ2LCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDA4NiwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFiZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAxZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDNkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3ZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCit9OworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTEyW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQ3LCAweDAwMDAwMDQ3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDg3LCAweDAwMDAwMDg3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWEwLCAweDAwMDAwMWEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUwLCAweDAwMDAwMWUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMWExLCAweDAwMDAwMWExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWUxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMDIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDA2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAxNjIsIDB4MDAwMDAxNjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWEyLCAweDAwMDAwMWEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlMiwgMHgwMDAwMDFlMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDYyLCAweDAwMDAwMDYyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE2MywgMHgwMDAwMDE2MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxYTMsIDB4MDAwMDAxYTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMWUzLCAweDAwMDAwMWUzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAyMywgMHgwMDAwMDAyMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMTg0LCAweDAwMDAwMTg0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFjNCwgMHgwMDAwMDFjNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWVhLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAyYSwgMHgwMDAwMDA0YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwNmEsIDB4MDAwMDAwOGIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMGFhLCAweDAwMDAwMWFjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDFhYiwgMHgwMDAwMDFlYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZWIsIDB4MDAwMDAwMmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDJiLCAweDAwMDAwMDEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA2YiwgMHgwMDAwMDA1MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwYWIsIDB4MDAwMDAwOTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMWFjLCAweDAwMDAwMTkzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFlYywgMHgwMDAwMDFkMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMmMsIDB4MDAwMDAwMTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDUzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA5MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwYmEsIDB4MDAwMDAxOTQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWJiLCAweDAwMDAwMWQ0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDFmYiwgMHgwMDAwMDAxNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwM2IsIDB4MDAwMDAwM2EgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDdiLCAweDAwMDAwMDdhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBiYiwgMHgwMDAwMDBiYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAxYmMsIDB4MDAwMDAxYmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMWZjLCAweDAwMDAwMWZiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAzYywgMHgwMDAwMDAzYiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwN2MsIDB4MDAwMDAwN2IgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGJjLCAweDAwMDAwMGJiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAxZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDNjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDA3YyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwYmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDEzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MTNbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDkxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTk5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFkOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDU5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA5OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgQVIyMzE2ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzIzMTZbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFhOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA2OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKK307CisKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjU0MTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTQxM1tdID0geworCS8qCQkJICAgICAgNUdoegkyR2h6CSovCisJeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDE2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFhMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDFlMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDAyMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDE4OCwgMHgwMDAwMDA2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDE4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDFjOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMDQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDA4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAxNjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMWE5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDFlOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxZDAsIDB4MDAwMDAwMjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMDEwLCAweDAwMDAwMDY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDA1MCwgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwOTAsIDB4MDAwMDAxZDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMWIxLCAweDAwMDAwMDEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFmMSwgMHgwMDAwMDA1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAwMzEsIDB4MDAwMDAwOTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDcxLCAweDAwMDAwMTcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAxZjgsIDB4MDAwMDAxZjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDM4LCAweDAwMDAwMDMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDA3OCwgMHgwMDAwMDA3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDk4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDE3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCit9OworCisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDI1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MjVbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDcwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFmOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKK307CisKKyNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTExCQk0CisjZGVmaW5lIEFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMgkJNworI2RlZmluZSBBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUUwkJQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCisjZGVmaW5lIEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTgkJMTUKKyNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOCQkyMAorI2RlZmluZSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlIJCTUKKyNkZWZpbmUgQVI1S19HQUlOX0NDS19PRkRNX0dBSU5fREVMVEEJCTE1CisjZGVmaW5lIEFSNUtfR0FJTl9TVEVQX0NPVU5UCQkJMTAKKworLyogQ2hlY2sgaWYgb3VyIGN1cnJlbnQgbWVhc3VyZW1lbnQgaXMgaW5zaWRlIG91cgorICogY3VycmVudCB2YXJpYWJsZSBhdHRlbnVhdGlvbiB3aW5kb3cgKi8KKyNkZWZpbmUgQVI1S19HQUlOX0NIRUNLX0FESlVTVChfZykgCQlcCisJKChfZyktPmdfY3VycmVudCA8PSAoX2cpLT5nX2xvdyB8fCAoX2cpLT5nX2N1cnJlbnQgPj0gKF9nKS0+Z19oaWdoKQorCitzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCB7CisJczgJCQkJZ29zX3BhcmFtW0FSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTXTsKKwlzOAkJCQlnb3NfZ2FpbjsKK307CisKK3N0cnVjdCBhdGg1a19nYWluX29wdCB7CisJdTgJCQkJZ29fZGVmYXVsdDsKKwl1OAkJCQlnb19zdGVwc19jb3VudDsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAlnb19zdGVwW0FSNUtfR0FJTl9TVEVQX0NPVU5UXTsKK307CisKKy8qCisgKiBQYXJhbWV0ZXJzIG9uIGdvc19wYXJhbToKKyAqIDEpIFR4IGNsaXAgUEhZIHJlZ2lzdGVyCisgKiAyKSBQV0QgOTAgUkYgcmVnaXN0ZXIKKyAqIDMpIFBXRCA4NCBSRiByZWdpc3RlcgorICogNCkgUkZHYWluU2VsIFJGIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTExID0geworCTQsCisJOSwKKwl7CisJCXsgeyA0LCAxLCAxLCAxIH0sIDYgfSwKKwkJeyB7IDQsIDAsIDEsIDEgfSwgNCB9LAorCQl7IHsgMywgMSwgMSwgMSB9LCAzIH0sCisJCXsgeyA0LCAwLCAwLCAxIH0sIDEgfSwKKwkJeyB7IDQsIDEsIDEsIDAgfSwgMCB9LAorCQl7IHsgNCwgMCwgMSwgMCB9LCAtMiB9LAorCQl7IHsgMywgMSwgMSwgMCB9LCAtMyB9LAorCQl7IHsgNCwgMCwgMCwgMCB9LCAtNCB9LAorCQl7IHsgMiwgMSwgMSwgMCB9LCAtNiB9CisJfQorfTsKKworLyoKKyAqIFBhcmFtZXRlcnMgb24gZ29zX3BhcmFtOgorICogMSkgTWl4Z2FpbiBvdnIgUkYgcmVnaXN0ZXIKKyAqIDIpIFBXRCAxMzggUkYgcmVnaXN0ZXIKKyAqIDMpIFBXRCAxMzcgUkYgcmVnaXN0ZXIKKyAqIDQpIFBXRCAxMzYgUkYgcmVnaXN0ZXIKKyAqIDUpIFBXRCAxMzIgUkYgcmVnaXN0ZXIKKyAqIDYpIFBXRCAxMzEgUkYgcmVnaXN0ZXIKKyAqIDcpIFBXRCAxMzAgUkYgcmVnaXN0ZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTIgPSB7CisJMSwKKwk4LAorCXsKKwkJeyB7IDMsIDAsIDAsIDAsIDAsIDAsIDAgfSwgNiB9LAorCQl7IHsgMiwgMCwgMCwgMCwgMCwgMCwgMCB9LCAwIH0sCisJCXsgeyAxLCAwLCAwLCAwLCAwLCAwLCAwIH0sIC0zIH0sCisJCXsgeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sIC02IH0sCisJCXsgeyAwLCAxLCAxLCAwLCAwLCAwLCAwIH0sIC04IH0sCisJCXsgeyAwLCAxLCAxLCAwLCAxLCAxLCAwIH0sIC0xMCB9LAorCQl7IHsgMCwgMSwgMCwgMSwgMSwgMSwgMCB9LCAtMTMgfSwKKwkJeyB7IDAsIDEsIDAsIDEsIDEsIDAsIDEgfSwgLTE2IH0sCisJfQorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQppbmRleCAxMjA5ZDE0Li4xYTRkNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQpAQCAtOSw4ICs5LDExIEBACiAJCW1haW4ubyBcCiAJCXJlY3YubyBcCiAJCXhtaXQubyBcCisJCXZpcnR1YWwubyBcCiAJCXJjLm8KIAorYXRoOWstJChDT05GSUdfUENJKSArPSBwY2kubworYXRoOWstJChDT05GSUdfQVRIRVJPU19BUjcxWFgpICs9IGFoYi5vCiBhdGg5ay0kKENPTkZJR19BVEg5S19ERUJVRykgKz0gZGVidWcubwogCiBvYmotJChDT05GSUdfQVRIOUspICs9IGF0aDlrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NWM1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiYXRoOWsuaCIKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX2FoYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJKmNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9haGJfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpb3VubWFwKHNjLT5tZW0pOworfQorCitzdGF0aWMgYm9vbCBhdGhfYWhiX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlwZGF0YSA9IChzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAob2ZmID49IChBUlJBWV9TSVpFKHBkYXRhLT5lZXByb21fZGF0YSkpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIiVzOiBmbGFzaCByZWFkIGZhaWxlZCwgb2Zmc2V0ICUwOHggaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fLCBvZmYpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBwZGF0YS0+ZWVwcm9tX2RhdGFbb2ZmXTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfYWhiX2J1c19vcHMgID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9haGJfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfYWhiX2NsZWFudXAsCisKKwkuZWVwcm9tX3JlYWQgPSBhdGhfYWhiX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQgPSAwOworCXN0cnVjdCBhdGhfaHcgKmFoOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwltZW0gPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlpcnEgPSByZXMtPnN0YXJ0OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJYXBoeSA9IGh3LT5wcml2OworCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgKGFwaHkgKyAxKTsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnByaV93aXBoeSA9IGFwaHk7CisJc2MtPmh3ID0gaHc7CisJc2MtPmRldiA9ICZwZGV2LT5kZXY7CisJc2MtPm1lbSA9IG1lbTsKKwlzYy0+YnVzX29wcyA9ICZhdGhfYWhiX2J1c19vcHM7CisJc2MtPmlycSA9IGlycTsKKworCXJldCA9IGF0aF9hdHRhY2goQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGRldmljZSwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9kZXRhY2g7CisJfQorCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4LCAiCisJICAgICAgICJBUiVzIFJGIFJldjoleCwgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKKwkgICAgICAgYXRoX21hY19iYl9uYW1lKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJICAgICAgIGF0aF9yZl9uYW1lKChhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ICYgQVJfUkFESU9fU1JFVl9NQUpPUikpLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5waHlSZXYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgaXJxKTsKKworCXJldHVybiAwOworCisgZXJyX2RldGFjaDoKKwlhdGhfZGV0YWNoKHNjKTsKKyBlcnJfZnJlZV9odzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisgZXJyX2lvdW5tYXA6CisJaW91bm1hcChtZW0pOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGhfYWhiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaHcpIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJCWF0aF9jbGVhbnVwKHNjKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aF9haGJfZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gYXRoX2FoYl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGF0aF9haGJfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdGg5ayIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgYXRoX2FoYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRoX2FoYl9kcml2ZXIpOworfQorCit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCmluZGV4IDI1MWUyZDkuLjZjNWU4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMjMgKzE0LDE5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9hbmlfY2hhbm5lbF9pZHgoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGludCBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWhwLT5haF9hbmkpOyBpKyspIHsKLQkJaWYgKGFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9PSBjaGFuLT5jaGFubmVsKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFoLT5hbmkpOyBpKyspIHsKKwkJaWYgKGFoLT5hbmlbaV0uYyAmJgorCQkgICAgYWgtPmFuaVtpXS5jLT5jaGFubmVsID09IGNoYW4tPmNoYW5uZWwpCiAJCQlyZXR1cm4gaTsKLQkJaWYgKGFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9PSAwKSB7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jLmNoYW5uZWwgPSBjaGFuLT5jaGFubmVsOwotCQkJYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsRmxhZ3MgPSBjaGFuLT5jaGFubmVsRmxhZ3M7CisJCWlmIChhaC0+YW5pW2ldLmMgPT0gTlVMTCkgeworCQkJYWgtPmFuaVtpXS5jID0gY2hhbjsKIAkJCXJldHVybiBpOwogCQl9CiAJfQpAQCAtNDEsNDEgKzM3LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2FuaV9jb250cm9sKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X2FuaV9jb250cm9sKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSBlbnVtIGF0aDlrX2FuaV9jbWQgY21kLCBpbnQgcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CiAKLQlzd2l0Y2ggKGNtZCAmIGFocC0+YWhfYW5pX2Z1bmN0aW9uKSB7CisJc3dpdGNoIChjbWQgJiBhaC0+YW5pX2Z1bmN0aW9uKSB7CiAJY2FzZSBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw6ewogCQl1MzIgbGV2ZWwgPSBwYXJhbTsKIAotCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWQpKSB7CisJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJCSJsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAogCQkJCWxldmVsLAotCQkJCSh1bnNpZ25lZClBUlJBWV9TSVpFKGFocC0+YWhfdG90YWxTaXplRGVzaXJlZCkpOworCQkJCSh1bnNpZ25lZClBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKIAkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1RPVF9ERVMsCi0JCQkgICAgICBhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWRbbGV2ZWxdKTsKKwkJCSAgICAgIGFoLT50b3RhbFNpemVEZXNpcmVkW2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9BR0NfQ1RMMSwKIAkJCSAgICAgIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfTE9XLAotCQkJICAgICAgYWhwLT5haF9jb2Fyc2VMb3dbbGV2ZWxdKTsKKwkJCSAgICAgIGFoLT5jb2Fyc2VfbG93W2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9BR0NfQ1RMMSwKIAkJCSAgICAgIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfSElHSCwKLQkJCSAgICAgIGFocC0+YWhfY29hcnNlSGlnaFtsZXZlbF0pOworCQkJICAgICAgYWgtPmNvYXJzZV9oaWdoW2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GSU5EX1NJRywKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJQV1IsCi0JCQkgICAgICBhaHAtPmFoX2ZpcnB3cltsZXZlbF0pOworCQkJICAgICAgYWgtPmZpcnB3cltsZXZlbF0pOwogCiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbml1cCsrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfbml1cCsrOwogCQllbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbmlkb3duKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9uaWRvd24rKzsKIAkJYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0xMjksOSArMTI0LDkgQEAKIAogCQlpZiAoIW9uICE9IGFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikgewogCQkJaWYgKG9uKQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKIAkJCWVsc2UKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbW9mZisrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1vZmYrKzsKIAkJCWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9ICFvbjsKIAkJfQogCQlicmVhazsKQEAgLTE0NSw5ICsxNDAsOSBAQAogCQkJICAgICAgd2Vha1NpZ1RockNja1toaWdoXSk7CiAJCWlmIChoaWdoICE9IGFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkKSB7CiAJCQlpZiAoaGlnaCkKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NraGlnaCsrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2hpZ2grKzsKIAkJCWVsc2UKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NrbG93Kys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfY2NrbG93Kys7CiAJCQlhbmlTdGF0ZS0+Y2NrV2Vha1NpZ1RocmVzaG9sZCA9IGhpZ2g7CiAJCX0KIAkJYnJlYWs7CkBAIC0xNjcsOSArMTYyLDkgQEAKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJTVEVQLAogCQkJICAgICAgZmlyc3RlcFtsZXZlbF0pOwogCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQotCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3N0ZXB1cCsrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcHVwKys7CiAJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcGRvd24rKzsKIAkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0xOTAsOSArMTg1LDkgQEAKIAkJCSAgICAgIEFSX1BIWV9USU1JTkc1X0NZQ1BXUl9USFIxLAogCQkJICAgICAgY3ljcHdyVGhyMVtsZXZlbF0pOwogCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3B1cnVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zcHVydXArKzsKIAkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJkb3duKys7CiAJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0yMjMsNyArMjE4LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIHN0cnVjdCBhdGg5a19taWJfc3RhdHMgKnN0YXRzKQogewogCXN0YXRzLT5hY2tyY3ZfYmFkICs9IFJFR19SRUFEKGFoLCBBUl9BQ0tfRkFJTCk7CkBAIC0yMzMsMTggKzIyOCwxNyBAQAogCXN0YXRzLT5iZWFjb25zICs9IFJFR19SRUFEKGFoLCBBUl9CRUFDT05fQ05UKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAogCWFuaVN0YXRlLT5saXN0ZW5UaW1lID0gMDsKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJaWYgKGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggPiBBUl9QSFlfQ09VTlRNQVgpIHsKIAkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9IDA7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCkBAIC0yNzAsMjQgKzI2NCwyMiBAQAogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKIAotCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaHAtPmFoX21pYlN0YXRzKTsKKwkJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAl9CiAJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IDA7CiAJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0JZW51bSB3aXJlbGVzc19tb2RlIG1vZGU7CiAJaW50MzJfdCByc3NpOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAogCWlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgSEFMX05PSVNFX0lNTVVORV9NQVgpIHsKIAkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsCkBAIC0zMDMsMTQgKzI5NSwxNCBAQAogCQl9CiAJfQogCi0JaWYgKGFoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkgewogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQotCXJzc2kgPSBCRUFDT05fUlNTSShhaHApOworCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpIHsKIAkJaWYgKCFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpIHsKIAkJCWlmIChhdGg5a19od19hbmlfY29udHJvbChhaCwKQEAgLTMzNiw4ICszMjgsNyBAQAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7Ci0JCW1vZGUgPSBhdGg5a19od19jaGFuMndtb2RlKGFoLCBjaGFuKTsKLQkJaWYgKG1vZGUgPT0gQVRIOUtfTU9ERV8xMUcgfHwgbW9kZSA9PSBBVEg5S19NT0RFXzExQikgeworCQlpZiAoY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCQlpZiAoIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikKIAkJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKIAkJCQkgICAgIEFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiwKQEAgLTM1MCwzOSArMzQxLDM2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfY2NrX2Vycl90cmlnZ2VyKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0JZW51bSB3aXJlbGVzc19tb2RlIG1vZGU7CiAJaW50MzJfdCByc3NpOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA8IEhBTF9OT0lTRV9JTU1VTkVfTUFYKSB7CiAJCWlmIChhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMLAogCQkJCQkgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCArIDEpKSB7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JaWYgKGFoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkgewogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQotCXJzc2kgPSBCRUFDT05fUlNTSShhaHApOworCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkKIAkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkJICAgICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICsgMSk7CiAJfSBlbHNlIHsKLQkJbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQlpZiAobW9kZSA9PSBBVEg5S19NT0RFXzExRyB8fCBtb2RlID09IEFUSDlLX01PREVfMTFCKSB7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkKIAkJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKIAkJCQkJICAgICBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwgMCk7CkBAIC0zOTAsMjIgKzM3OCwyMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJaW50MzJfdCByc3NpOwogCi0JYW5pU3RhdGUgPSBhaHAtPmFoX2N1cmFuaTsKKwlhbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CiAKLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkgewogCQkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkJCSBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIC0gMSkpCiAJCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKLQkJcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJCWlmIChyc3NpID4gYW5pU3RhdGUtPnJzc2lUaHJIaWdoKSB7CiAJCQkvKiBYWFg6IEhhbmRsZSBtZSAqLwogCQl9IGVsc2UgaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykgewpAQCAtNDQ0LDkgKzQzMSw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50MzJfdCBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQzMl90IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCXUzMiB0eEZyYW1lQ291bnQsIHJ4RnJhbWVDb3VudCwgY3ljbGVDb3VudDsKIAlpbnQzMl90IGxpc3RlblRpbWU7CkBAIC00NTUsMTEgKzQ0MSwxMSBAQAogCXJ4RnJhbWVDb3VudCA9IFJFR19SRUFEKGFoLCBBUl9SRkNOVCk7CiAJY3ljbGVDb3VudCA9IFJFR19SRUFEKGFoLCBBUl9DQ0NOVCk7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPmN5Y2xlQ291bnQgPT0gMCB8fCBhbmlTdGF0ZS0+Y3ljbGVDb3VudCA+IGN5Y2xlQ291bnQpIHsKIAogCQlsaXN0ZW5UaW1lID0gMDsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2x6ZXJvKys7CisJCWFoLT5zdGF0cy5hc3RfYW5pX2x6ZXJvKys7CiAJfSBlbHNlIHsKIAkJaW50MzJfdCBjY2RlbHRhID0gY3ljbGVDb3VudCAtIGFuaVN0YXRlLT5jeWNsZUNvdW50OwogCQlpbnQzMl90IHJmZGVsdGEgPSByeEZyYW1lQ291bnQgLSBhbmlTdGF0ZS0+cnhGcmFtZUNvdW50OwpAQCAtNDczLDI1ICs0NTksMjQgQEAKIAlyZXR1cm4gbGlzdGVuVGltZTsKIH0KIAotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+Y3VyY2hhbjsKIAlpbnQgaW5kZXg7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAogCWluZGV4ID0gYXRoOWtfaHdfZ2V0X2FuaV9jaGFubmVsX2lkeChhaCwgY2hhbik7Ci0JYW5pU3RhdGUgPSAmYWhwLT5haF9hbmlbaW5kZXhdOwotCWFocC0+YWhfY3VyYW5pID0gYW5pU3RhdGU7CisJYW5pU3RhdGUgPSAmYWgtPmFuaVtpbmRleF07CisJYWgtPmN1cmFuaSA9IGFuaVN0YXRlOwogCi0JaWYgKERPX0FOSShhaCkgJiYgYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OCi0JICAgICYmIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoRE9fQU5JKGFoKSAmJiBhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04KKwkgICAgJiYgYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkiUmVzZXQgQU5JIHN0YXRlIG9wbW9kZSAldVxuIiwgYWgtPmFoX29wbW9kZSk7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9yZXNldCsrOworCQkJIlJlc2V0IEFOSSBzdGF0ZSBvcG1vZGUgJXVcbiIsIGFoLT5vcG1vZGUpOworCQlhaC0+c3RhdHMuYXN0X2FuaV9yZXNldCsrOwogCiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsIDApOwogCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwsIDApOwpAQCAtNTA0LDE1ICs0ODksMTUgQEAKIAkJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKGFoKSB8CiAJCQkJICAgICBBVEg5S19SWF9GSUxURVJfUEhZRVJSKTsKIAotCQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJYWhwLT5haF9jdXJhbmktPm9mZG1UcmlnSGlnaCA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfaGlnaDsKLQkJCWFocC0+YWhfY3VyYW5pLT5vZmRtVHJpZ0xvdyA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfbG93OwotCQkJYWhwLT5haF9jdXJhbmktPmNja1RyaWdIaWdoID0KLQkJCQlhaC0+YWhfY29uZmlnLmNja190cmlnX2hpZ2g7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+Y2NrVHJpZ0xvdyA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5jY2tfdHJpZ19sb3c7CisJCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQlhaC0+Y3VyYW5pLT5vZmRtVHJpZ0hpZ2ggPQorCQkJCWFoLT5jb25maWcub2ZkbV90cmlnX2hpZ2g7CisJCQlhaC0+Y3VyYW5pLT5vZmRtVHJpZ0xvdyA9CisJCQkJYWgtPmNvbmZpZy5vZmRtX3RyaWdfbG93OworCQkJYWgtPmN1cmFuaS0+Y2NrVHJpZ0hpZ2ggPQorCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaDsKKwkJCWFoLT5jdXJhbmktPmNja1RyaWdMb3cgPQorCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfbG93OwogCQl9CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKIAkJcmV0dXJuOwpAQCAtNTMzLDcgKzUxOCw3IEBACiAJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgIT0gMCkKIAkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCk7Ci0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCBhdGg5a19od19nZXRyeGZpbHRlcihhaCkgJgogCQkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwogCQlhdGg5a19hbmlfcmVzdGFydChhaCk7CkBAIC01NDcsMzEgKzUzMiwzMyBAQAogCX0KIH0KIAotdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKIAlpbnQzMl90IGxpc3RlblRpbWU7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOwotCWFocC0+YWhfc3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKKwlpZiAoIURPX0FOSShhaCkpCisJCXJldHVybjsKKworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKwlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWxpc3RlblRpbWUgPSBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKGFoKTsKIAlpZiAobGlzdGVuVGltZSA8IDApIHsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2xuZWcrKzsKKwkJYWgtPnN0YXRzLmFzdF9hbmlfbG5lZysrOwogCQlhdGg5a19hbmlfcmVzdGFydChhaCk7CiAJCXJldHVybjsKIAl9CiAKIAlhbmlTdGF0ZS0+bGlzdGVuVGltZSArPSBsaXN0ZW5UaW1lOwogCi0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCXUzMiBwaHlDbnQxLCBwaHlDbnQyOwogCQl1MzIgb2ZkbVBoeUVyckNudCwgY2NrUGh5RXJyQ250OwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOwogCiAJCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKIAkJcGh5Q250MiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzIpOwpAQCAtNjA0LDI3ICs1OTEsMjQgQEAKIAkJfQogCiAJCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KIAkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKIAogCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KIAkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OwogCX0KIAotCWlmICghRE9fQU5JKGFoKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFocC0+YWhfYW5pUGVyaW9kKSB7CisJaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFoLT5hbmlwZXJpb2QpIHsKIAkJaWYgKGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPD0gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPm9mZG1UcmlnTG93IC8gMTAwMCAmJgogCQkgICAgYW5pU3RhdGUtPmNja1BoeUVyckNvdW50IDw9IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5jY2tUcmlnTG93IC8gMTAwMCkKIAkJCWF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShhaCk7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKLQl9IGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gYWhwLT5haF9hbmlQZXJpb2QpIHsKKwl9IGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gYWgtPmFuaXBlcmlvZCkgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA+IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggLyAxMDAwKSB7CiAJCQlhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihhaCk7CkBAIC02MzgsMjAgKzYyMiwxNiBAQAogCX0KIH0KIAotYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzID8gdHJ1ZSA6IGZhbHNlOworCXJldHVybiBhaC0+aGFzX2h3X3BoeWNvdW50ZXJzID8gdHJ1ZSA6IGZhbHNlOwogfQogCi12b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19lbmFibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJFbmFibGUgTUlCIGNvdW50ZXJzXG4iKTsKIAotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfT0ZETSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9GSUxUX0NDSywgMCk7CkBAIC02NjIsMjEgKzY0MiwxOCBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzIsIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKQorLyogRnJlZXplIHRoZSBNSUIgY291bnRlcnMsIGdldCB0aGUgc3RhdHMgYW5kIHRoZW4gY2xlYXIgdGhlbSAqLwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLCAiRGlzYWJsZSBNSUIgY291bnRlcnNcbiIpOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyB8IEFSX01JQkNfQ01DKTsKLQotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOwotCisJUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyk7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfQ01DKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfT0ZETSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9GSUxUX0NDSywgMCk7CiB9CiAKLXUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2hhbCAqYWgsCit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICB1MzIgKnJ4Y19wY250LAogCQkJCSAgdTMyICpyeGZfcGNudCwKIAkJCQkgIHUzMiAqdHhmX3BjbnQpCkBAIC03MjEsMTAgKzY5OCw5IEBACiAgKiBhbnkgb2YgdGhlIE1JQiBjb3VudGVycyBvdmVyZmxvdy90cmlnZ2VyIHNvIGRvbid0IGFzc3VtZSB3ZSdyZQogICogaGVyZSBiZWNhdXNlIGEgUEhZIGVycm9yIGNvdW50ZXIgdHJpZ2dlcmVkLgogICovCi12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBwaHlDbnQxLCBwaHlDbnQyOwogCiAJLyogUmVzZXQgdGhlc2UgY291bnRlcnMgcmVnYXJkbGVzcyAqLwpAQCAtNzM0LDggKzcxMCw4IEBACiAJCVJFR19XUklURShhaCwgQVJfU0xQX01JQl9DVFJMLCBBUl9TTFBfTUlCX0NMRUFSKTsKIAogCS8qIENsZWFyIHRoZSBtaWIgY291bnRlcnMgYW5kIHNhdmUgdGhlbSBpbiB0aGUgc3RhdHMgKi8KLQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaHAtPmFoX21pYlN0YXRzKTsKLQlhaHAtPmFoX3N0YXRzLmFzdF9ub2Rlc3RhdHMgPSAqc3RhdHM7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwpAQCAtNzQ1LDE3ICs3MjEsMTcgQEAKIAlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CiAJaWYgKCgocGh5Q250MSAmIEFSX01JQkNOVF9JTlRSTUFTSykgPT0gQVJfTUlCQ05UX0lOVFJNQVNLKSB8fAogCSAgICAoKHBoeUNudDIgJiBBUl9NSUJDTlRfSU5UUk1BU0spID09IEFSX01JQkNOVF9JTlRSTUFTSykpIHsKLQkJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAkJdTMyIG9mZG1QaHlFcnJDbnQsIGNja1BoeUVyckNudDsKIAogCQkvKiBOQjogb25seSB1c2UgYXN0X2FuaV8qZXJycyB3aXRoIEFIX1BSSVZBVEVfRElBRyAqLwogCQlvZmRtUGh5RXJyQ250ID0gcGh5Q250MSAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CiAJCQlvZmRtUGh5RXJyQ250IC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IG9mZG1QaHlFcnJDbnQ7CiAKIAkJY2NrUGh5RXJyQ250ID0gcGh5Q250MiAtIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NrZXJycyArPQorCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CiAJCQljY2tQaHlFcnJDbnQgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQ7CiAJCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IGNja1BoeUVyckNudDsKIApAQCAtNzc0LDkgKzc1MCw4IEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJY29uc3QgaW50IHRvdGFsU2l6ZURlc2lyZWRbXSA9IHsgLTU1LCAtNTUsIC01NSwgLTU1LCAtNjIgfTsKQEAgLTc4NSw2NiArNzYwLDYzIEBACiAJY29uc3QgaW50IGZpcnB3cltdID0geyAtNzgsIC03OCwgLTc4LCAtNzgsIC04MCB9OwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWRbaV0gPSB0b3RhbFNpemVEZXNpcmVkW2ldOwotCQlhaHAtPmFoX2NvYXJzZUhpZ2hbaV0gPSBjb2Fyc2VIaWdoW2ldOwotCQlhaHAtPmFoX2NvYXJzZUxvd1tpXSA9IGNvYXJzZUxvd1tpXTsKLQkJYWhwLT5haF9maXJwd3JbaV0gPSBmaXJwd3JbaV07CisJCWFoLT50b3RhbFNpemVEZXNpcmVkW2ldID0gdG90YWxTaXplRGVzaXJlZFtpXTsKKwkJYWgtPmNvYXJzZV9oaWdoW2ldID0gY29hcnNlSGlnaFtpXTsKKwkJYWgtPmNvYXJzZV9sb3dbaV0gPSBjb2Fyc2VMb3dbaV07CisJCWFoLT5maXJwd3JbaV0gPSBmaXJwd3JbaV07CiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19hbmlfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJBdHRhY2ggQU5JXG4iKTsKIAotCWFocC0+YWhfaGFzSHdQaHlDb3VudGVycyA9IDE7CisJYWgtPmhhc19od19waHljb3VudGVycyA9IDE7CiAKLQltZW1zZXQoYWhwLT5haF9hbmksIDAsIHNpemVvZihhaHAtPmFoX2FuaSkpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFocC0+YWhfYW5pKTsgaSsrKSB7Ci0JCWFocC0+YWhfYW5pW2ldLm9mZG1UcmlnSGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0ub2ZkbVRyaWdMb3cgPSBBVEg5S19BTklfT0ZETV9UUklHX0xPVzsKLQkJYWhwLT5haF9hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1c7Ci0JCWFocC0+YWhfYW5pW2ldLnJzc2lUaHJIaWdoID0gQVRIOUtfQU5JX1JTU0lfVEhSX0hJR0g7Ci0JCWFocC0+YWhfYW5pW2ldLnJzc2lUaHJMb3cgPSBBVEg5S19BTklfUlNTSV9USFJfTE9XOwotCQlhaHAtPmFoX2FuaVtpXS5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9CisJbWVtc2V0KGFoLT5hbmksIDAsIHNpemVvZihhaC0+YW5pKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWgtPmFuaSk7IGkrKykgeworCQlhaC0+YW5pW2ldLm9mZG1UcmlnSGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5vZmRtVHJpZ0xvdyA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XOworCQlhaC0+YW5pW2ldLmNja1RyaWdIaWdoID0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CisJCWFoLT5hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1c7CisJCWFoLT5hbmlbaV0ucnNzaVRockhpZ2ggPSBBVEg5S19BTklfUlNTSV9USFJfSElHSDsKKwkJYWgtPmFuaVtpXS5yc3NpVGhyTG93ID0gQVRIOUtfQU5JX1JTU0lfVEhSX0xPVzsKKwkJYWgtPmFuaVtpXS5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9CiAJCQkhQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KKwkJYWgtPmFuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KIAkJCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSOwotCQlhaHAtPmFoX2FuaVtpXS5zcHVySW1tdW5pdHlMZXZlbCA9IEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkw7Ci0JCWFocC0+YWhfYW5pW2ldLmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTDsKLQkJaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgewotCQkJYWhwLT5haF9hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQorCQlhaC0+YW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTDsKKwkJYWgtPmFuaVtpXS5maXJzdGVwTGV2ZWwgPSBBVEg5S19BTklfRklSU1RFUF9MVkw7CisJCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CisJCQlhaC0+YW5pW2ldLm9mZG1QaHlFcnJCYXNlID0KIAkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0g7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jY2tQaHlFcnJCYXNlID0KKwkJCWFoLT5hbmlbaV0uY2NrUGh5RXJyQmFzZSA9CiAJCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CiAJCX0KIAl9Ci0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJCSJTZXR0aW5nIE9mZG1FcnJCYXNlID0gMHglMDh4XG4iLAotCQkJYWhwLT5haF9hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOworCQkJYWgtPmFuaVswXS5vZmRtUGh5RXJyQmFzZSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIlNldHRpbmcgY2NrRXJyQmFzZSA9IDB4JTA4eFxuIiwKLQkJCWFocC0+YWhfYW5pWzBdLmNja1BoeUVyckJhc2UpOworCQkJYWgtPmFuaVswXS5jY2tQaHlFcnJCYXNlKTsKIAotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgYWhwLT5haF9hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgYWhwLT5haF9hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CiAJCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCX0KLQlhaHAtPmFoX2FuaVBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0Q7Ci0JaWYgKGFoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKLQkJYWhwLT5haF9wcm9jUGh5RXJyIHw9IEhBTF9QUk9DRVNTX0FOSTsKKwlhaC0+YW5pcGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKKwlpZiAoYWgtPmNvbmZpZy5lbmFibGVfYW5pKQorCQlhaC0+cHJvY19waHllcnIgfD0gSEFMX1BST0NFU1NfQU5JOwogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19hbmlfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJEZXRhY2ggQU5JXG4iKTsKIAotCWlmIChhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMpIHsKKwlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewogCQlhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhhaCk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI0ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFOSV9ICisjZGVmaW5lIEFOSV9ICisKKyNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCisKKyNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKKworI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCisJSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKKwkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAorI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKKyNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKKyNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCisjZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3CisjZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCisjZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAorI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNworI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICAgIDQKKyNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgICAgICAgICAgIDIKKworZW51bSBhdGg5a19hbmlfY21kIHsKKwlBVEg5S19BTklfUFJFU0VOVCA9IDB4MSwKKwlBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwgPSAweDIsCisJQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OID0gMHg0LAorCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSID0gMHg4LAorCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMID0gMHgxMCwKKwlBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCA9IDB4MjAsCisJQVRIOUtfQU5JX01PREUgPSAweDQwLAorCUFUSDlLX0FOSV9QSFlFUlJfUkVTRVQgPSAweDgwLAorCUFUSDlLX0FOSV9BTEwgPSAweGZmCit9OworCitzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIHsKKwl1MzIgYWNrcmN2X2JhZDsKKwl1MzIgcnRzX2JhZDsKKwl1MzIgcnRzX2dvb2Q7CisJdTMyIGZjc19iYWQ7CisJdTMyIGJlYWNvbnM7Cit9OworCitzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyB7CisJdTMyIG5zX2F2Z2Jyc3NpOworCXUzMiBuc19hdmdyc3NpOworCXUzMiBuc19hdmd0eHJzc2k7CisJdTMyIG5zX2F2Z3R4cmF0ZTsKK307CisKK3N0cnVjdCBhcjU0MTZBbmlTdGF0ZSB7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7CisJdTggbm9pc2VJbW11bml0eUxldmVsOworCXU4IHNwdXJJbW11bml0eUxldmVsOworCXU4IGZpcnN0ZXBMZXZlbDsKKwl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKKwl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOworCXUzMiBsaXN0ZW5UaW1lOworCXUzMiBvZmRtVHJpZ0hpZ2g7CisJdTMyIG9mZG1UcmlnTG93OworCWludDMyX3QgY2NrVHJpZ0hpZ2g7CisJaW50MzJfdCBjY2tUcmlnTG93OworCWludDMyX3QgcnNzaVRockxvdzsKKwlpbnQzMl90IHJzc2lUaHJIaWdoOworCXUzMiBub2lzZUZsb29yOworCXUzMiB0eEZyYW1lQ291bnQ7CisJdTMyIHJ4RnJhbWVDb3VudDsKKwl1MzIgY3ljbGVDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckNvdW50OworCXUzMiBjY2tQaHlFcnJDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckJhc2U7CisJdTMyIGNja1BoeUVyckJhc2U7CisJaW50MTZfdCBwa3RSc3NpWzJdOworCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07CisJaW50MTZfdCBjY2tFcnJSc3NpWzJdOworfTsKKworc3RydWN0IGFyNTQxNlN0YXRzIHsKKwl1MzIgYXN0X2FuaV9uaXVwOworCXUzMiBhc3RfYW5pX25pZG93bjsKKwl1MzIgYXN0X2FuaV9zcHVydXA7CisJdTMyIGFzdF9hbmlfc3B1cmRvd247CisJdTMyIGFzdF9hbmlfb2ZkbW9uOworCXUzMiBhc3RfYW5pX29mZG1vZmY7CisJdTMyIGFzdF9hbmlfY2NraGlnaDsKKwl1MzIgYXN0X2FuaV9jY2tsb3c7CisJdTMyIGFzdF9hbmlfc3RlcHVwOworCXUzMiBhc3RfYW5pX3N0ZXBkb3duOworCXUzMiBhc3RfYW5pX29mZG1lcnJzOworCXUzMiBhc3RfYW5pX2Nja2VycnM7CisJdTMyIGFzdF9hbmlfcmVzZXQ7CisJdTMyIGFzdF9hbmlfbHplcm87CisJdTMyIGFzdF9hbmlfbG5lZzsKKwlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOworfTsKKyNkZWZpbmUgYWhfbWliU3RhdHMgc3RhdHMuYXN0X21pYnN0YXRzCisKK3ZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKKwkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqcnhjX3BjbnQsCisJCQkJICB1MzIgKnJ4Zl9wY250LCB1MzIgKnR4Zl9wY250KTsKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCmluZGV4IDY2NTBmNjAuLjI2ODlhMDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNywxMDQxICsxNyw3NDEgQEAKICNpZm5kZWYgQVRIOUtfSAogI2RlZmluZSBBVEg5S19ICiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCi0jZGVmaW5lIEFUSEVST1NfVkVORE9SX0lECTB4MTY4YworI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAicmMuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogCi0jZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0kJMHgwMDIzCi0jZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0lFCTB4MDAyNAotI2RlZmluZSBBUjkxNjBfREVWSURfUENJCTB4MDAyNwotI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQotI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKLSNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCitzdHJ1Y3QgYXRoX25vZGU7CiAKLSNkZWZpbmUgQVI1NDE2X0FSOTEwMF9ERVZJRAkweDAwMGIKKy8qIE1hY3JvIHRvIGV4cGFuZCBzY2FsYXJzIHRvIDY0LWJpdCBvYmplY3RzICovCiAKLSNkZWZpbmUJQVJfU1VCVkVORE9SX0lEX05PRwkweDBlMTEKLSNkZWZpbmUgQVJfU1VCVkVORE9SX0lEX05FV19BCTB4NzA2NQorI2RlZmluZQlpdG82NCh4KSAoc2l6ZW9mKHgpID09IDgpID8JCQlcCisJKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgKDB4ZmYpKSA6CVwKKwkoc2l6ZW9mKHgpID09IDE2KSA/CQkJCVwKKwkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmYpIDoJXAorCSgoc2l6ZW9mKHgpID09IDMyKSA/CQkJCVwKKwkgKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgMHhmZmZmZmZmZikgOiBcCisJICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkKIAotI2RlZmluZSBBVEg5S19UWEVSUl9YUkVUUlkgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1RYRVJSX0ZJTFQgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfVFhFUlJfRklGTyAgICAgICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKKy8qIGluY3JlbWVudCB3aXRoIHdyYXAtYXJvdW5kICovCisjZGVmaW5lIElOQ1IoX2wsIF9zeikgICBkbyB7CQkJXAorCQkoX2wpKys7CQkJCVwKKwkJKF9sKSAmPSAoKF9zeikgLSAxKTsJCVwKKwl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFUSDlLX1RYX0JBICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIOUtfVFhfUFdSTUdNVCAgICAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19UWF9ERVNDX0NGR19FUlIgICAgICAweDA0Ci0jZGVmaW5lIEFUSDlLX1RYX0RBVEFfVU5ERVJSVU4gICAgIDB4MDgKLSNkZWZpbmUgQVRIOUtfVFhfREVMSU1fVU5ERVJSVU4gICAgMHgxMAotI2RlZmluZSBBVEg5S19UWF9TV19BQk9SVEVEICAgICAgICAweDQwCi0jZGVmaW5lIEFUSDlLX1RYX1NXX0ZJTFRFUkVEICAgICAgIDB4ODAKKy8qIGRlY3JlbWVudCB3aXRoIHdyYXAtYXJvdW5kICovCisjZGVmaW5lIERFQ1IoX2wsICBfc3opICBkbyB7CQkJXAorCQkoX2wpLS07CQkJCVwKKwkJKF9sKSAmPSAoKF9zeikgLSAxKTsJCVwKKwl9IHdoaWxlICgwKQogCi0jZGVmaW5lIE5CQlkgICAgOAorI2RlZmluZSBBX01BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQogCi1zdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7Ci0JdTMyIHRzX3RzdGFtcDsKLQl1MTYgdHNfc2VxbnVtOwotCXU4IHRzX3N0YXR1czsKLQl1OCB0c19yYXRlY29kZTsKLQl1OCB0c19yYXRlaW5kZXg7Ci0JaW50OF90IHRzX3Jzc2k7Ci0JdTggdHNfc2hvcnRyZXRyeTsKLQl1OCB0c19sb25ncmV0cnk7Ci0JdTggdHNfdmlydGNvbDsKLQl1OCB0c19hbnRlbm5hOwotCXU4IHRzX2ZsYWdzOwotCWludDhfdCB0c19yc3NpX2N0bDA7Ci0JaW50OF90IHRzX3Jzc2lfY3RsMTsKLQlpbnQ4X3QgdHNfcnNzaV9jdGwyOwotCWludDhfdCB0c19yc3NpX2V4dDA7Ci0JaW50OF90IHRzX3Jzc2lfZXh0MTsKLQlpbnQ4X3QgdHNfcnNzaV9leHQyOwotCXU4IHBhZFszXTsKLQl1MzIgYmFfbG93OwotCXUzMiBiYV9oaWdoOwotCXUzMiBldm0wOwotCXUzMiBldm0xOwotCXUzMiBldm0yOworI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAorCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAorCQkJQlVHKCk7CQkJXAorCQl9CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAorCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKKworI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQorCitzdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisKK3N0cnVjdCBhdGhfY29uZmlnIHsKKwl1MzIgYXRoX2FnZ3JfcHJvdDsKKwl1MTYgdHhwb3dsaW1pdDsKKwl1OCBjYWJxUmVhZHl0aW1lOworCXU4IHN3QmVhY29uUHJvY2VzczsKIH07CiAKLXN0cnVjdCBhdGhfcnhfc3RhdHVzIHsKLQl1MzIgcnNfdHN0YW1wOwotCXUxNiByc19kYXRhbGVuOwotCXU4IHJzX3N0YXR1czsKLQl1OCByc19waHllcnI7Ci0JaW50OF90IHJzX3Jzc2k7Ci0JdTggcnNfa2V5aXg7Ci0JdTggcnNfcmF0ZTsKLQl1OCByc19hbnRlbm5hOwotCXU4IHJzX21vcmU7Ci0JaW50OF90IHJzX3Jzc2lfY3RsMDsKLQlpbnQ4X3QgcnNfcnNzaV9jdGwxOwotCWludDhfdCByc19yc3NpX2N0bDI7Ci0JaW50OF90IHJzX3Jzc2lfZXh0MDsKLQlpbnQ4X3QgcnNfcnNzaV9leHQxOwotCWludDhfdCByc19yc3NpX2V4dDI7Ci0JdTggcnNfaXNhZ2dyOwotCXU4IHJzX21vcmVhZ2dyOwotCXU4IHJzX251bV9kZWxpbXM7Ci0JdTggcnNfZmxhZ3M7Ci0JdTMyIGV2bTA7Ci0JdTMyIGV2bTE7Ci0JdTMyIGV2bTI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCisJCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCisJCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKKwkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCisJCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhdGhfYnVmX3N0YXRlKSk7CQlcCisJfSB3aGlsZSAoMCkKKworLyoqCisgKiBlbnVtIGJ1ZmZlcl90eXBlIC0gQnVmZmVyIHR5cGUgZmxhZ3MKKyAqCisgKiBAQlVGX0hUOiBTZW5kIHRoaXMgYnVmZmVyIHVzaW5nIEhUIGNhcGFiaWxpdGllcworICogQEJVRl9BTVBEVTogVGhpcyBidWZmZXIgaXMgYW4gYW1wZHUsIGFzIHBhcnQgb2YgYW4gYWdncmVnYXRlIChkdXJpbmcgVFgpCisgKiBAQlVGX0FHR1I6IEluZGljYXRlcyB3aGV0aGVyIHRoZSBidWZmZXIgY2FuIGJlIGFnZ3JlZ2F0ZWQKKyAqCSh1c2VkIGluIGFnZ3JlZ2F0aW9uIHNjaGVkdWxpbmcpCisgKiBAQlVGX1JFVFJZOiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVmZmVyIGlzIHJldHJpZWQKKyAqIEBCVUZfWFJFVFJZOiBUbyBkZW5vdGUgZXhjZXNzaXZlIHJldHJpZXMgb2YgdGhlIGJ1ZmZlcgorICovCitlbnVtIGJ1ZmZlcl90eXBlIHsKKwlCVUZfSFQJCQk9IEJJVCgxKSwKKwlCVUZfQU1QRFUJCT0gQklUKDIpLAorCUJVRl9BR0dSCQk9IEJJVCgzKSwKKwlCVUZfUkVUUlkJCT0gQklUKDQpLAorCUJVRl9YUkVUUlkJCT0gQklUKDUpLAogfTsKIAotI2RlZmluZSBBVEg5S19SWEVSUl9DUkMgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIOUtfUlhFUlJfUEhZICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFUSDlLX1JYRVJSX0ZJRk8gICAgICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19SWEVSUl9ERUNSWVBUICAgICAgIDB4MDgKLSNkZWZpbmUgQVRIOUtfUlhFUlJfTUlDICAgICAgICAgICAweDEwCi0KLSNkZWZpbmUgQVRIOUtfUlhfTU9SRSAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1JYX01PUkVfQUdHUiAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19SWF9HSSAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfUlhfMjA0MCAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1JYX0RFTElNX0NSQ19QUkUgICAgMHgxMAotI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUE9TVCAgIDB4MjAKLSNkZWZpbmUgQVRIOUtfUlhfREVDUllQVF9CVVNZICAgICAweDQwCi0KLSNkZWZpbmUgQVRIOUtfUlhLRVlJWF9JTlZBTElECSgodTgpLTEpCi0jZGVmaW5lIEFUSDlLX1RYS0VZSVhfSU5WQUxJRAkoKHUzMiktMSkKLQotc3RydWN0IGF0aF9kZXNjIHsKLQl1MzIgZHNfbGluazsKLQl1MzIgZHNfZGF0YTsKLQl1MzIgZHNfY3RsMDsKLQl1MzIgZHNfY3RsMTsKLQl1MzIgZHNfaHdbMjBdOwotCXVuaW9uIHsKLQkJc3RydWN0IGF0aF90eF9zdGF0dXMgdHg7Ci0JCXN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4OwotCQl2b2lkICpzdGF0czsKLQl9IGRzX3VzOwotCXZvaWQgKmRzX3ZkYXRhOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZQlkc190eHN0YXQJZHNfdXMudHgKLSNkZWZpbmUJZHNfcnhzdGF0CWRzX3VzLnJ4Ci0jZGVmaW5lIGRzX3N0YXQJCWRzX3VzLnN0YXRzCi0KLSNkZWZpbmUgQVRIOUtfVFhERVNDX0NMUkRNQVNLCQkweDAwMDEKLSNkZWZpbmUgQVRIOUtfVFhERVNDX05PQUNLCQkweDAwMDIKLSNkZWZpbmUgQVRIOUtfVFhERVNDX1JUU0VOQQkJMHgwMDA0Ci0jZGVmaW5lIEFUSDlLX1RYREVTQ19DVFNFTkEJCTB4MDAwOAotLyogQVRIOUtfVFhERVNDX0lOVFJFUSBmb3JjZXMgYSB0eCBpbnRlcnJ1cHQgdG8gYmUgZ2VuZXJhdGVkIGZvcgotICogdGhlIGRlc2NyaXB0b3IgaXRzIG1hcmtlZCBvbi4gIFdlIHRha2UgYSB0eCBpbnRlcnJ1cHQgdG8gcmVhcAotICogZGVzY3JpcHRvcnMgd2hlbiB0aGUgaC93IGhpdHMgYW4gRU9MIGNvbmRpdGlvbiBvcgotICogd2hlbiB0aGUgZGVzY3JpcHRvciBpcyBzcGVjaWZpY2FsbHkgbWFya2VkIHRvIGdlbmVyYXRlCi0gKiBhbiBpbnRlcnJ1cHQgd2l0aCB0aGlzIGZsYWcuIERlc2NyaXB0b3JzIHNob3VsZCBiZQotICogbWFya2VkIHBlcmlvZGljYWxseSB0byBpbnN1cmUgdGltZWx5IHJlcGxlbmlzaGluZyBvZiB0aGUKLSAqIHN1cHBseSBuZWVkZWQgZm9yIHNlbmRpbmcgZnJhbWVzLiBEZWZlcmluZyBpbnRlcnJ1cHRzCi0gKiByZWR1Y2VzIHN5c3RlbSBsb2FkIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgbW9yZSBjb25jdXJyZW50Ci0gKiB3b3JrIHRvIGJlIGRvbmUgYnV0IGlmIGRvbmUgdG8gYWdncmVzc2l2ZWx5IGNhbiBjYXVzZQotICogc2VuZGVycyB0byBiYWNrdXAuIFdoZW4gdGhlIGhhcmR3YXJlIHF1ZXVlIGlzIGxlZnQgdG9vCi0gKiBsYXJnZSByYXRlIGNvbnRyb2wgaW5mb3JtYXRpb24gbWF5IGFsc28gYmUgdG9vIG91dCBvZgotICogZGF0ZS4gQW4gQWx0ZXJuYXRpdmUgZm9yIHRoaXMgaXMgVFggaW50ZXJydXB0IG1pdGlnYXRpb24KLSAqIGJ1dCB0aGlzIG5lZWRzIG1vcmUgdGVzdGluZy4gKi8KLSNkZWZpbmUgQVRIOUtfVFhERVNDX0lOVFJFUQkJMHgwMDEwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19WRU9MCQkweDAwMjAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0VYVF9PTkxZCQkweDAwNDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0VYVF9BTkRfQ1RMCTB4MDA4MAotI2RlZmluZSBBVEg5S19UWERFU0NfVk1GCQkweDAxMDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0ZSQUdfSVNfT04gCTB4MDIwMAotI2RlZmluZSBBVEg5S19UWERFU0NfQ0FCCQkweDA0MDAKLQotI2RlZmluZSBBVEg5S19SWERFU0NfSU5UUkVRCQkweDAwMjAKLQotZW51bSB3aXJlbGVzc19tb2RlIHsKLQlBVEg5S19NT0RFXzExQSA9IDAsCi0JQVRIOUtfTU9ERV8xMUIgPSAyLAotCUFUSDlLX01PREVfMTFHID0gMywKLQlBVEg5S19NT0RFXzExTkFfSFQyMCA9IDYsCi0JQVRIOUtfTU9ERV8xMU5HX0hUMjAgPSA3LAotCUFUSDlLX01PREVfMTFOQV9IVDQwUExVUyA9IDgsCi0JQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUyA9IDksCi0JQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTID0gMTAsCi0JQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUyA9IDExLAotCUFUSDlLX01PREVfTUFYCitzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7CisJaW50IGJmc19uZnJhbWVzOworCXUxNiBiZnNfYWw7CisJdTE2IGJmc19mcm1sZW47CisJaW50IGJmc19zZXFubzsKKwlpbnQgYmZzX3RpZG5vOworCWludCBiZnNfcmV0cmllczsKKwl1MzIgYmZfdHlwZTsKKwl1MzIgYmZzX2tleWl4OworCWVudW0gYXRoOWtfa2V5X3R5cGUgYmZzX2tleXR5cGU7CiB9OwogCi1lbnVtIGF0aDlrX2h3X2NhcHMgewotCUFUSDlLX0hXX0NBUF9DSEFOX1NQUkVBRAkJPSBCSVQoMCksCi0JQVRIOUtfSFdfQ0FQX01JQ19BRVNDQ00gICAgICAgICAgICAgICAgID0gQklUKDEpLAotCUFUSDlLX0hXX0NBUF9NSUNfQ0tJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgyKSwKLQlBVEg5S19IV19DQVBfTUlDX1RLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCi0JQVRIOUtfSFdfQ0FQX0NJUEhFUl9BRVNDQ00gICAgICAgICAgICAgID0gQklUKDQpLAotCUFUSDlLX0hXX0NBUF9DSVBIRVJfQ0tJUCAgICAgICAgICAgICAgICA9IEJJVCg1KSwKLQlBVEg5S19IV19DQVBfQ0lQSEVSX1RLSVAgICAgICAgICAgICAgICAgPSBCSVQoNiksCi0JQVRIOUtfSFdfQ0FQX1ZFT0wgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDcpLAotCUFUSDlLX0hXX0NBUF9CU1NJRE1BU0sgICAgICAgICAgICAgICAgICA9IEJJVCg4KSwKLQlBVEg5S19IV19DQVBfTUNBU1RfS0VZU0VBUkNIICAgICAgICAgICAgPSBCSVQoOSksCi0JQVRIOUtfSFdfQ0FQX0NIQU5fSEFMRlJBVEUgICAgICAgICAgICAgID0gQklUKDEwKSwKLQlBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSAgICAgICAgICAgPSBCSVQoMTEpLAotCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMiksCi0JQVRIOUtfSFdfQ0FQX0dUVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKLQlBVEg5S19IV19DQVBfRkFTVENDICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAotCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCi0JQVRIOUtfSFdfQ0FQX1dPVyAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE2KSwKLQlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTcpLAotCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgxOCksCi0JQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCAgICAgICAgICAgICAgICAgID0gQklUKDE5KSwKLQlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoMjApLAotCUFUSDlLX0hXX0NBUF9XT1dfTUFUQ0hQQVRURVJOX0VYQUNUICAgICA9IEJJVCgyMSksCisjZGVmaW5lIGJmX25mcmFtZXMgICAgICAJYmZfc3RhdGUuYmZzX25mcmFtZXMKKyNkZWZpbmUgYmZfYWwgICAgICAgICAgIAliZl9zdGF0ZS5iZnNfYWwKKyNkZWZpbmUgYmZfZnJtbGVuICAgICAgIAliZl9zdGF0ZS5iZnNfZnJtbGVuCisjZGVmaW5lIGJmX3JldHJpZXMgICAgICAJYmZfc3RhdGUuYmZzX3JldHJpZXMKKyNkZWZpbmUgYmZfc2Vxbm8gICAgICAgIAliZl9zdGF0ZS5iZnNfc2Vxbm8KKyNkZWZpbmUgYmZfdGlkbm8gICAgICAgIAliZl9zdGF0ZS5iZnNfdGlkbm8KKyNkZWZpbmUgYmZfa2V5aXggICAgICAgICAgICAgICAgYmZfc3RhdGUuYmZzX2tleWl4CisjZGVmaW5lIGJmX2tleXR5cGUgICAgICAJYmZfc3RhdGUuYmZzX2tleXR5cGUKKyNkZWZpbmUgYmZfaXNodChiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9IVCkKKyNkZWZpbmUgYmZfaXNhbXBkdShiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9BTVBEVSkKKyNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCisjZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQorI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQorCitzdHJ1Y3QgYXRoX2J1ZiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0YmY7CS8qIGxhc3QgYnVmIG9mIHRoaXMgdW5pdCAoYSBmcmFtZSBvcgorCQkJCQkgICBhbiBhZ2dyZWdhdGUpICovCisJc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLworCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLworCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KKwlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCisJZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KKwl1MzIgYmZfc3RhdHVzOworCXUxNiBiZl9mbGFnczsKKwlzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSBiZl9zdGF0ZTsKKwlkbWFfYWRkcl90IGJmX2RtYWNvbnRleHQ7CiB9OwogCi1lbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB7Ci0JQVRIOUtfQ0FQX0NJUEhFUiA9IDAsCi0JQVRIOUtfQ0FQX1RLSVBfTUlDLAotCUFUSDlLX0NBUF9US0lQX1NQTElULAotCUFUSDlLX0NBUF9QSFlDT1VOVEVSUywKLQlBVEg5S19DQVBfRElWRVJTSVRZLAotCUFUSDlLX0NBUF9UWFBPVywKLQlBVEg5S19DQVBfUEhZRElBRywKLQlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKLQlBVEg5S19DQVBfVFNGX0FESlVTVCwKLQlBVEg5S19DQVBfV01FX1RLSVBNSUMsCi0JQVRIOUtfQ0FQX1JGU0lMRU5ULAotCUFUSDlLX0NBUF9BTlRfQ0ZHXzJHSFosCi0JQVRIOUtfQ0FQX0FOVF9DRkdfNUdIWgorI2RlZmluZSBBVEhfUlhCVUZfUkVTRVQoX2JmKSAgICAoKF9iZiktPmJmX3N0YXR1cyA9IDApCisjZGVmaW5lIEFUSF9CVUZTVEFUVVNfU1RBTEUgICAgIDB4MDAwMDAwMDIKKworc3RydWN0IGF0aF9kZXNjZG1hIHsKKwljb25zdCBjaGFyICpkZF9uYW1lOworCXN0cnVjdCBhdGhfZGVzYyAqZGRfZGVzYzsKKwlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CisJdTMyIGRkX2Rlc2NfbGVuOworCXN0cnVjdCBhdGhfYnVmICpkZF9idWZwdHI7CisJZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwogfTsKIAotc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyB7Ci0JdTMyIGh3X2NhcHM7IC8qIEFUSDlLX0hXX0NBUF8qIGZyb20gYXRoOWtfaHdfY2FwcyAqLwotCURFQ0xBUkVfQklUTUFQKHdpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7IC8qIEFUSDlLX01PREVfKiAqLwotCXUxNiB0b3RhbF9xdWV1ZXM7Ci0JdTE2IGtleWNhY2hlX3NpemU7Ci0JdTE2IGxvd181Z2h6X2NoYW4sIGhpZ2hfNWdoel9jaGFuOwotCXUxNiBsb3dfMmdoel9jaGFuLCBoaWdoXzJnaHpfY2hhbjsKLQl1MTYgbnVtX21yX3JldHJpZXM7Ci0JdTE2IHJ0c19hZ2dyX2xpbWl0OworaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKK3ZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKKworLyoqKioqKioqKioqLworLyogUlggLyBUWCAqLworLyoqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKKyNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCisjZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMworI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAorI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0CisjZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0CisjZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQorI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCisKKyNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCisJKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAorCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKKwkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCisJIFdNRV9BQ19WTykKKworI2RlZmluZSBXTUVfQUNfQkUgICAwCisjZGVmaW5lIFdNRV9BQ19CSyAgIDEKKyNkZWZpbmUgV01FX0FDX1ZJICAgMgorI2RlZmluZSBXTUVfQUNfVk8gICAzCisjZGVmaW5lIFdNRV9OVU1fQUMgIDQKKworI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAorI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0CisjZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCisvKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCisjZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCisvKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCisjZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKKyNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKKyNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX01BWCAgICAgICAgKDY0ICogMTAyNCAtIDEpCisjZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICAgIEFUSF9BTVBEVV9MSU1JVF9NQVgKKworI2RlZmluZSBJRUVFODAyMTFfU0VRX1NFUV9TSElGVCAgICA0CisjZGVmaW5lIElFRUU4MDIxMV9TRVFfTUFYICAgICAgICAgIDQwOTYKKyNkZWZpbmUgSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgICAgMHg4CisjZGVmaW5lIElFRUU4MDIxMV9IVENBUF9NQVhSWEFNUERVX0ZBQ1RPUiAxMworI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgICAzCisjZGVmaW5lIElFRUU4MDIxMV9XRVBfS0lETEVOICAgICAgIDEKKyNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgICAgNAorI2RlZmluZSBJRUVFODAyMTFfTUFYX01QRFVfTEVOICAgICAoMzg0MCArIEZDU19MRU4gKwkJXAorCQkJCSAgICAoSUVFRTgwMjExX1dFUF9JVkxFTiArCVwKKwkJCQkgICAgIElFRUU4MDIxMV9XRVBfS0lETEVOICsJXAorCQkJCSAgICAgSUVFRTgwMjExX1dFUF9DUkNMRU4pKQorCisvKiByZXR1cm4gd2hldGhlciBhIGJpdCBhdCBpbmRleCBfbiBpbiBiaXRtYXAgX2JtIGlzIHNldAorICogX3N6IGlzIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgICovCisjZGVmaW5lIEFUSF9CQV9JU1NFVChfYm0sIF9uKSAgKCgoX24pIDwgKFdNRV9CQV9CTVBfU0laRSkpICYmCQlcCisJCQkJKChfYm0pWyhfbikgPj4gNV0gJiAoMSA8PCAoKF9uKSAmIDMxKSkpKQorCisvKiByZXR1cm4gYmxvY2stYWNrIGJpdG1hcCBpbmRleCBnaXZlbiBzZXF1ZW5jZSBhbmQgc3RhcnRpbmcgc2VxdWVuY2UgKi8KKyNkZWZpbmUgQVRIX0JBX0lOREVYKF9zdCwgX3NlcSkgKCgoX3NlcSkgLSAoX3N0KSkgJiAoSUVFRTgwMjExX1NFUV9NQVggLSAxKSkKKworLyogcmV0dXJucyBkZWxpbWl0ZXIgcGFkZGluZyByZXF1aXJlZCBnaXZlbiB0aGUgcGFja2V0IGxlbmd0aCAqLworI2RlZmluZSBBVEhfQUdHUl9HRVRfTkRFTElNKF9sZW4pCQkJCQlcCisJKCgoKChfbGVuKSArIEFUSF9BR0dSX0RFTElNX1NaKSA8IEFUSF9BR0dSX01JTlBMRU4pID8gICAgICAgICAgIFwKKwkgIChBVEhfQUdHUl9NSU5QTEVOIC0gKF9sZW4pIC0gQVRIX0FHR1JfREVMSU1fU1opIDogMCkgPj4gMikKKworI2RlZmluZSBCQVdfV0lUSElOKF9zdGFydCwgX2Jhd3N6LCBfc2Vxbm8pIFwKKwkoKCgoX3NlcW5vKSAtIChfc3RhcnQpKSAmIDQwOTUpIDwgKF9iYXdzeikpCisKKyNkZWZpbmUgQVRIX0RTX0JBX1NFUShfZHMpICAgICAgICAgKChfZHMpLT5kc191cy50eC50c19zZXFudW0pCisjZGVmaW5lIEFUSF9EU19CQV9CSVRNQVAoX2RzKSAgICAgICgmKF9kcyktPmRzX3VzLnR4LmJhX2xvdykKKyNkZWZpbmUgQVRIX0RTX1RYX0JBKF9kcykgICAgICAgICAgKChfZHMpLT5kc191cy50eC50c19mbGFncyAmIEFUSDlLX1RYX0JBKQorI2RlZmluZSBBVEhfQU5fMl9USUQoX2FuLCBfdGlkbm8pICAoJihfYW4pLT50aWRbKF90aWRubyldKQorCitlbnVtIEFUSF9BR0dSX1NUQVRVUyB7CisJQVRIX0FHR1JfRE9ORSwKKwlBVEhfQUdHUl9CQVdfQ0xPU0VELAorCUFUSF9BR0dSX0xJTUlURUQsCit9OworCitzdHJ1Y3QgYXRoX3R4cSB7CisJdTMyIGF4cV9xbnVtOworCXUzMiAqYXhxX2xpbms7CisJc3RydWN0IGxpc3RfaGVhZCBheHFfcTsKKwlzcGlubG9ja190IGF4cV9sb2NrOworCXUzMiBheHFfZGVwdGg7CisJdTggYXhxX2FnZ3JfZGVwdGg7CisJdTMyIGF4cV90b3RhbHF1ZXVlZDsKKwlib29sIHN0b3BwZWQ7CisJc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOworCisJLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCisJc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKKworCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCisJICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCisJc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Cit9OworCisjZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQorI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKKyNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCisKK3N0cnVjdCBhdGhfYXR4X3RpZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CisJc3RydWN0IGF0aF9idWYgKnR4X2J1ZltBVEhfVElEX01BWF9CVUZTXTsKKwl1MTYgc2VxX3N0YXJ0OworCXUxNiBzZXFfbmV4dDsKKwl1MTYgYmF3X3NpemU7CisJaW50IHRpZG5vOworCWludCBiYXdfaGVhZDsJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCisJaW50IGJhd190YWlsOwkvKiBuZXh0IHVudXNlZCB0eCBidWZmZXIgc2xvdCAqLworCWludCBzY2hlZDsKKwlpbnQgcGF1c2VkOworCXU4IHN0YXRlOworCWludCBhZGRiYV9leGNoYW5nZWF0dGVtcHRzOworfTsKKworc3RydWN0IGF0aF9hdHhfYWMgeworCWludCBzY2hlZDsKKwlpbnQgcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKK307CisKK3N0cnVjdCBhdGhfdHhfY29udHJvbCB7CisJc3RydWN0IGF0aF90eHEgKnR4cTsKKwlpbnQgaWZfaWQ7CisJZW51bSBhdGg5a19pbnRlcm5hbF9mcmFtZV90eXBlIGZyYW1lX3R5cGU7Cit9OworCisjZGVmaW5lIEFUSF9UWF9FUlJPUiAgICAgICAgMHgwMQorI2RlZmluZSBBVEhfVFhfWFJFVFJZICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIX1RYX0JBUiAgICAgICAgICAweDA0CisKKy8qIEFsbCBSU1NJIHZhbHVlcyBhcmUgbm9pc2UgZmxvb3IgYWRqdXN0ZWQgKi8KK3N0cnVjdCBhdGhfdHhfc3RhdCB7CisJaW50IHJzc2k7CisJaW50IHJzc2ljdGxbQVRIX01BWF9BTlRFTk5BXTsKKwlpbnQgcnNzaWV4dG5bQVRIX01BWF9BTlRFTk5BXTsKKwlpbnQgcmF0ZWllZWU7CisJaW50IHJhdGVLYnBzOworCWludCByYXRlY29kZTsKKwlpbnQgZmxhZ3M7CisJdTMyIGFpcnRpbWU7CS8qIHRpbWUgb24gYWlyIHBlciBmaW5hbCB0eCByYXRlICovCit9OworCitzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtIHsKKwlpbnQgcGFyYW1fbWF4X2ZyYW1lczsKKwlpbnQgcGFyYW1fbWF4X2xlbjsKKwlpbnQgcGFyYW1fcmw7CisJaW50IHBhcmFtX2FsOworCXN0cnVjdCBhdGhfcmNfc2VyaWVzICpwYXJhbV9yY3M7Cit9OworCitzdHJ1Y3QgYXRoX25vZGUgeworCXN0cnVjdCBhdGhfc29mdGMgKmFuX3NjOworCXN0cnVjdCBhdGhfYXR4X3RpZCB0aWRbV01FX05VTV9USURdOworCXN0cnVjdCBhdGhfYXR4X2FjIGFjW1dNRV9OVU1fQUNdOworCXUxNiBtYXhhbXBkdTsKKwl1OCBtcGR1ZGVuc2l0eTsKK307CisKK3N0cnVjdCBhdGhfdHggeworCXUxNiBzZXFfbm87CisJdTMyIHR4cXNldHVwOworCWludCBod3FfbWFwW0FUSDlLX1dNRV9BQ19WTysxXTsKKwlzcGlubG9ja190IHR4YnVmbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmOworCXN0cnVjdCBhdGhfdHhxIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKKwlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhkbWE7Cit9OworCitzdHJ1Y3QgYXRoX3J4IHsKKwl1OCBkZWZhbnQ7CisJdTggcnhvdGhlcmFudDsKKwl1MzIgKnJ4bGluazsKKwlpbnQgYnVmc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhmaWx0ZXI7CisJc3BpbmxvY2tfdCByeGZsdXNobG9jazsKKwlzcGlubG9ja190IHJ4YnVmbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4YnVmOworCXN0cnVjdCBhdGhfZGVzY2RtYSByeGRtYTsKK307CisKK2ludCBhdGhfc3RhcnRyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2Jvb2wgYXRoX3N0b3ByZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX2ZsdXNocmVjdihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit1MzIgYXRoX2NhbGNyeGZpbHRlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoX3J4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcyk7Cit2b2lkIGF0aF9yeF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfcnhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGZsdXNoKTsKK3N0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKK3ZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKK2ludCBhdGhfdHhfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBoYWx0eXBlKTsKK3ZvaWQgYXRoX2RyYWluX2FsbF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwordm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Cit2b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwordm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKK3ZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSk7CitpbnQgYXRoX3R4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcyk7CitpbnQgYXRoX3R4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKKwkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOworaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwordm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2Jvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKTsKK2ludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pOworaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwordm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOworCisvKioqKioqKiovCisvKiBWSUZzICovCisvKioqKioqKiovCisKK3N0cnVjdCBhdGhfdmlmIHsKKwlpbnQgYXZfYnNsb3Q7CisJX19sZTY0IHRzZl9hZGp1c3Q7IC8qIFRTRiBhZGp1c3RtZW50IGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLworCWVudW0gbmw4MDIxMV9pZnR5cGUgYXZfb3Btb2RlOworCXN0cnVjdCBhdGhfYnVmICphdl9iY2J1ZjsKKwlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgYXZfYnR4Y3RsOworCXU4IGJzc2lkW0VUSF9BTEVOXTsgLyogY3VycmVudCBCU1NJRCBmcm9tIGNvbmZpZ19pbnRlcmZhY2UgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqLworLyogQmVhY29uIEhhbmRsaW5nICovCisvKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCisgKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKKyAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgorICovCisjZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKKyNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTQKKyNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLworI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKKyNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKKworc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTE2IGR0aW1fcGVyaW9kOworCXUxNiBibWlzc190aW1lb3V0OworCXU4IGR0aW1fY291bnQ7Cit9OworCitzdHJ1Y3QgYXRoX2JlYWNvbiB7CisJZW51bSB7CisJCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLworCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLworCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCisJfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KKworCXUzMiBiZWFjb25xOworCXUzMiBibWlzc2NudDsKKwl1MzIgYXN0X2JlX3htaXQ7CisJdTY0IGJjX3RzdGFtcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIX0JDQlVGXTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICpic2xvdF9hcGh5W0FUSF9CQ0JVRl07CisJaW50IHNsb3R0aW1lOworCWludCBzbG90dXBkYXRlOworCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIGJlYWNvbl9xaTsKKwlzdHJ1Y3QgYXRoX2Rlc2NkbWEgYmRtYTsKKwlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJidWY7Cit9OworCit2b2lkIGF0aF9iZWFjb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOworaW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF93aXBoeSAqYXBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKTsKKworLyoqKioqKiovCisvKiBBTkkgKi8KKy8qKioqKioqLworCisjZGVmaW5lIEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUwgMTAwMCAgICAvKiAxIHNlY29uZCAqLworI2RlZmluZSBBVEhfQVBfU0hPUlRfQ0FMSU5URVJWQUwgIDEwMCAgICAgLyogMTAwIG1zICovCisjZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgICAgMTAwICAgICAvKiAxMDAgbXMgKi8KKyNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgICAzMDAwMCAgIC8qIDMwIHNlY29uZHMgKi8KKyNkZWZpbmUgQVRIX1JFU1RBUlRfQ0FMSU5URVJWQUwgICAxMjAwMDAwIC8qIDIwIG1pbnV0ZXMgKi8KKworc3RydWN0IGF0aF9hbmkgeworCWJvb2wgY2FsZG9uZTsKKwlpbnQxNl90IG5vaXNlX2Zsb29yOworCXVuc2lnbmVkIGludCBsb25nY2FsX3RpbWVyOworCXVuc2lnbmVkIGludCBzaG9ydGNhbF90aW1lcjsKKwl1bnNpZ25lZCBpbnQgcmVzZXRjYWxfdGltZXI7CisJdW5zaWduZWQgaW50IGNoZWNrYW5pX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogICBMRUQgQ29udHJvbCAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9MRURfUElOCTEKKyNkZWZpbmUgQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFCTM1MAkvKiBpbiBtc2VjcyAqLworI2RlZmluZSBBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFCTI1MAkvKiBpbiBtc2VjcyAqLworCitlbnVtIGF0aF9sZWRfdHlwZSB7CisJQVRIX0xFRF9SQURJTywKKwlBVEhfTEVEX0FTU09DLAorCUFUSF9MRURfVFgsCisJQVRIX0xFRF9SWAorfTsKKworc3RydWN0IGF0aF9sZWQgeworCXN0cnVjdCBhdGhfc29mdGMgKnNjOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7CisJZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7CisJY2hhciBuYW1lWzMyXTsKKwlib29sIHJlZ2lzdGVyZWQ7Cit9OworCisvKiBSZmtpbGwgKi8KKyNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KKworc3RydWN0IGF0aF9yZmtpbGwgeworCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCWNoYXIgcmZraWxsX25hbWVbMzJdOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTWFpbiBkcml2ZXIgY29yZSAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgorICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUworKi8KKyNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKKyNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1CisjZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCisjZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KKyNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKKyNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1CisjZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KKworLyoKKyAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKKyAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgorICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCisgKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KKyAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKKyAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgorICovCisjZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KKworI2RlZmluZSBBVEhfVFhQT1dFUl9NQVggICAgICAgICAxMDAgICAgIC8qIC41IGRCbSB1bml0cyAqLworI2RlZmluZSBBVEhfUlNTSV9EVU1NWV9NQVJLRVIgICAweDEyNworI2RlZmluZSBBVEhfUkFURV9EVU1NWV9NQVJLRVIgICAwCisKKyNkZWZpbmUgU0NfT1BfSU5WQUxJRCAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFNDX09QX0JFQUNPTlMgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBTQ19PUF9SWEFHR1IgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lIFNDX09QX0NIQUlOTUFTS19VUERBVEUgIEJJVCg0KQorI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUICAgICAgICBCSVQoNSkKKyNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQgICAgQklUKDYpCisjZGVmaW5lIFNDX09QX1BST1RFQ1RfRU5BQkxFICAgIEJJVCg3KQorI2RlZmluZSBTQ19PUF9SWEZMVVNIICAgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgU0NfT1BfTEVEX0FTU09DSUFURUQgICAgQklUKDkpCisjZGVmaW5lIFNDX09QX1JGS0lMTF9SRUdJU1RFUkVEIEJJVCgxMCkKKyNkZWZpbmUgU0NfT1BfUkZLSUxMX1NXX0JMT0NLRUQgQklUKDExKQorI2RlZmluZSBTQ19PUF9SRktJTExfSFdfQkxPQ0tFRCBCSVQoMTIpCisjZGVmaW5lIFNDX09QX1dBSVRfRk9SX0JFQUNPTiAgIEJJVCgxMykKKyNkZWZpbmUgU0NfT1BfTEVEX09OICAgICAgICAgICAgQklUKDE0KQorI2RlZmluZSBTQ19PUF9TQ0FOTklORyAgICAgICAgICBCSVQoMTUpCisjZGVmaW5lIFNDX09QX1RTRl9SRVNFVCAgICAgICAgIEJJVCgxNikKKworc3RydWN0IGF0aF9idXNfb3BzIHsKKwl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opOworCXZvaWQJCSgqY2xlYW51cCkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworCWJvb2wJCSgqZWVwcm9tX3JlYWQpKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOworfTsKKworc3RydWN0IGF0aF93aXBoeTsKKworc3RydWN0IGF0aF9zb2Z0YyB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJc3BpbmxvY2tfdCB3aXBoeV9sb2NrOyAvKiBzcGlubG9jayB0byBwcm90ZWN0IGF0aF93aXBoeSBkYXRhICovCisJc3RydWN0IGF0aF93aXBoeSAqcHJpX3dpcGh5OworCXN0cnVjdCBhdGhfd2lwaHkgKipzZWNfd2lwaHk7IC8qIHNlY29uZGFyeSB3aXBoeXMgKHZpcnR1YWwgcmFkaW9zKTsgbWF5CisJCQkJICAgICAgICogaGF2ZSBOVUxMIGVudHJpZXMgKi8KKwlpbnQgbnVtX3NlY193aXBoeTsgLyogbnVtYmVyIG9mIHNlY193aXBoeSBwb2ludGVycyBpbiB0aGUgYXJyYXkgKi8KKwlpbnQgY2hhbl9pZHg7CisJaW50IGNoYW5faXNfaHQ7CisJc3RydWN0IGF0aF93aXBoeSAqbmV4dF93aXBoeTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hhbl93b3JrOworCWludCB3aXBoeV9zZWxlY3RfZmFpbHVyZXM7CisJdW5zaWduZWQgbG9uZyB3aXBoeV9zZWxlY3RfZmlyc3RfZmFpbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdpcGh5X3dvcms7CisJdW5zaWduZWQgbG9uZyB3aXBoeV9zY2hlZHVsZXJfaW50OworCWludCB3aXBoeV9zY2hlZHVsZXJfaW5kZXg7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaW50cl90cTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYmNvbl90YXNrbGV0OworCXN0cnVjdCBhdGhfaHcgKnNjX2FoOworCXZvaWQgX19pb21lbSAqbWVtOworCWludCBpcnE7CisJc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7CisJc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJdTggY3VyYnNzaWRbRVRIX0FMRU5dOworCXU4IGJzc2lkbWFza1tFVEhfQUxFTl07CisJdTMyIGludHJzdGF0dXM7CisJdTMyIHNjX2ZsYWdzOyAvKiBTQ19PUF8qICovCisJdTE2IGN1cnR4cG93OworCXUxNiBjdXJhaWQ7CisJdTE2IGNhY2hlbHN6OworCXU4IG5iY252aWZzOworCXUxNiBudmlmczsKIAl1OCB0eF9jaGFpbm1hc2s7CiAJdTggcnhfY2hhaW5tYXNrOwotCXUxNiB0eF90cmlnbGV2ZWxfbWF4OwotCXUxNiByZWdfY2FwOwotCXU4IG51bV9ncGlvX3BpbnM7Ci0JdTggbnVtX2FudGNmZ18yZ2h6OwotCXU4IG51bV9hbnRjZmdfNWdoejsKLX07Ci0KLXN0cnVjdCBhdGg5a19vcHNfY29uZmlnIHsKLQlpbnQgZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lOwotCWludCBzd19iZWFjb25fcmVzcG9uc2VfdGltZTsKLQlpbnQgYWRkaXRpb25hbF9zd2JhX2JhY2tvZmY7Ci0JaW50IGFja182bWI7Ci0JaW50IGN3bV9pZ25vcmVfZXh0Y2NhOwotCXU4IHBjaWVfcG93ZXJzYXZlX2VuYWJsZTsKLQl1OCBwY2llX2wxc2twX2VuYWJsZTsKLQl1OCBwY2llX2Nsb2NrX3JlcTsKLQl1MzIgcGNpZV93YWVuOwotCWludCBwY2llX3Bvd2VyX3Jlc2V0OwotCXU4IHBjaWVfcmVzdG9yZTsKLQl1OCBhbmFsb2dfc2hpZnRyZWc7Ci0JdTggaHRfZW5hYmxlOwotCXUzMiBvZmRtX3RyaWdfbG93OwotCXUzMiBvZmRtX3RyaWdfaGlnaDsKLQl1MzIgY2NrX3RyaWdfaGlnaDsKLQl1MzIgY2NrX3RyaWdfbG93OwotCXUzMiBlbmFibGVfYW5pOwotCXU4IG5vaXNlX2ltbXVuaXR5X2xldmVsOwotCXUzMiBvZmRtX3dlYWtzaWduYWxfZGV0OwotCXUzMiBjY2tfd2Vha3NpZ25hbF90aHI7Ci0JdTggc3B1cl9pbW11bml0eV9sZXZlbDsKLQl1OCBmaXJzdGVwX2xldmVsOwotCWludDhfdCByc3NpX3Rocl9oaWdoOwotCWludDhfdCByc3NpX3Rocl9sb3c7Ci0JdTE2IGRpdmVyc2l0eV9jb250cm9sOwotCXUxNiBhbnRlbm5hX3N3aXRjaF9zd2FwOwotCWludCBzZXJpYWxpemVfcmVnbW9kZTsKLQlpbnQgaW50cl9taXRpZ2F0aW9uOwotI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCi0jZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKLSNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgotI2RlZmluZSBBUl9FRVBST01fTU9EQUxfU1BVUlMgICA1Ci0jZGVmaW5lIEFSX1NQVVJfNTQxM18xICAgICAgCTE2NDAKLSNkZWZpbmUgQVJfU1BVUl81NDEzXzIgICAgICAJMTIwMAotI2RlZmluZSBBUl9OT19TUFVSICAgICAgCTB4ODAwMAotI2RlZmluZSBBUl9CQVNFX0ZSRVFfMkdIWiAgIAkyMzAwCi0jZGVmaW5lIEFSX0JBU0VfRlJFUV81R0haICAgCTQ5MDAKLSNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUNDAgMTkKLSNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUMjAgMTAKLQlpbnQgc3B1cm1vZGU7Ci0JdTE2IHNwdXJjaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdWzJdOwotfTsKLQotZW51bSBhdGg5a190eF9xdWV1ZSB7Ci0JQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUgPSAwLAotCUFUSDlLX1RYX1FVRVVFX0RBVEEsCi0JQVRIOUtfVFhfUVVFVUVfQkVBQ09OLAotCUFUSDlLX1RYX1FVRVVFX0NBQiwKLQlBVEg5S19UWF9RVUVVRV9VQVBTRCwKLQlBVEg5S19UWF9RVUVVRV9QU1BPTEwKLX07Ci0KLSNkZWZpbmUJQVRIOUtfTlVNX1RYX1FVRVVFUyAxMAotCi1lbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgewotCUFUSDlLX1dNRV9BQ19CSyA9IDAsCi0JQVRIOUtfV01FX0FDX0JFLAotCUFUSDlLX1dNRV9BQ19WSSwKLQlBVEg5S19XTUVfQUNfVk8sCi0JQVRIOUtfV01FX1VQU0QKLX07Ci0KLWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgewotCVRYUV9GTEFHX1RYT0tJTlRfRU5BQkxFID0gMHgwMDAxLAotCVRYUV9GTEFHX1RYRVJSSU5UX0VOQUJMRSA9IDB4MDAwMSwKLQlUWFFfRkxBR19UWERFU0NJTlRfRU5BQkxFID0gMHgwMDAyLAotCVRYUV9GTEFHX1RYRU9MSU5UX0VOQUJMRSA9IDB4MDAwNCwKLQlUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUgPSAweDAwMDgsCi0JVFhRX0ZMQUdfQkFDS09GRl9ESVNBQkxFID0gMHgwMDEwLAotCVRYUV9GTEFHX0NPTVBSRVNTSU9OX0VOQUJMRSA9IDB4MDAyMCwKLQlUWFFfRkxBR19SRFlUSU1FX0VYUF9QT0xJQ1lfRU5BQkxFID0gMHgwMDQwLAotCVRYUV9GTEFHX0ZSQUdfQlVSU1RfQkFDS09GRl9FTkFCTEUgPSAweDAwODAsCi19OwotCi0jZGVmaW5lIEFUSDlLX1RYUV9VU0VERUZBVUxUICgodTMyKSAtMSkKLQotI2RlZmluZSBBVEg5S19ERUNPTVBfTUFTS19TSVpFICAgICAxMjgKLSNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCAgNTAKLSNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCAgOTYKLQotZW51bSBhdGg5a19wa3RfdHlwZSB7Ci0JQVRIOUtfUEtUX1RZUEVfTk9STUFMID0gMCwKLQlBVEg5S19QS1RfVFlQRV9BVElNLAotCUFUSDlLX1BLVF9UWVBFX1BTUE9MTCwKLQlBVEg5S19QS1RfVFlQRV9CRUFDT04sCi0JQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUCwKLQlBVEg5S19QS1RfVFlQRV9DSElSUCwKLQlBVEg5S19QS1RfVFlQRV9HUlBfUE9MTCwKLX07Ci0KLXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHsKLQl1MzIgdHFpX3ZlcjsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlIHRxaV90eXBlOwotCWVudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB0cWlfc3VidHlwZTsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHRxaV9xZmxhZ3M7Ci0JdTMyIHRxaV9wcmlvcml0eTsKLQl1MzIgdHFpX2FpZnM7Ci0JdTMyIHRxaV9jd21pbjsKLQl1MzIgdHFpX2N3bWF4OwotCXUxNiB0cWlfc2hyZXRyeTsKLQl1MTYgdHFpX2xncmV0cnk7Ci0JdTMyIHRxaV9jYnJQZXJpb2Q7Ci0JdTMyIHRxaV9jYnJPdmVyZmxvd0xpbWl0OwotCXUzMiB0cWlfYnVyc3RUaW1lOwotCXUzMiB0cWlfcmVhZHlUaW1lOwotCXUzMiB0cWlfcGh5c0NvbXBCdWY7Ci0JdTMyIHRxaV9pbnRGbGFnczsKLX07Ci0KLWVudW0gYXRoOWtfcnhfZmlsdGVyIHsKLQlBVEg5S19SWF9GSUxURVJfVUNBU1QgPSAweDAwMDAwMDAxLAotCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVCA9IDB4MDAwMDAwMDIsCi0JQVRIOUtfUlhfRklMVEVSX0JDQVNUID0gMHgwMDAwMDAwNCwKLQlBVEg5S19SWF9GSUxURVJfQ09OVFJPTCA9IDB4MDAwMDAwMDgsCi0JQVRIOUtfUlhfRklMVEVSX0JFQUNPTiA9IDB4MDAwMDAwMTAsCi0JQVRIOUtfUlhfRklMVEVSX1BST00gPSAweDAwMDAwMDIwLAotCUFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUSA9IDB4MDAwMDAwODAsCi0JQVRIOUtfUlhfRklMVEVSX1BTUE9MTCA9IDB4MDAwMDQwMDAsCi0JQVRIOUtfUlhfRklMVEVSX1BIWUVSUiA9IDB4MDAwMDAxMDAsCi0JQVRIOUtfUlhfRklMVEVSX1BIWVJBREFSID0gMHgwMDAwMjAwMCwKLX07Ci0KLWVudW0gYXRoOWtfaW50IHsKLQlBVEg5S19JTlRfUlggPSAweDAwMDAwMDAxLAotCUFUSDlLX0lOVF9SWERFU0MgPSAweDAwMDAwMDAyLAotCUFUSDlLX0lOVF9SWE5PRlJNID0gMHgwMDAwMDAwOCwKLQlBVEg5S19JTlRfUlhFT0wgPSAweDAwMDAwMDEwLAotCUFUSDlLX0lOVF9SWE9STiA9IDB4MDAwMDAwMjAsCi0JQVRIOUtfSU5UX1RYID0gMHgwMDAwMDA0MCwKLQlBVEg5S19JTlRfVFhERVNDID0gMHgwMDAwMDA4MCwKLQlBVEg5S19JTlRfVElNX1RJTUVSID0gMHgwMDAwMDEwMCwKLQlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAotCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAotCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCi0JQVRIOUtfSU5UX1JYS0NNID0gMHgwMDAwODAwMCwKLQlBVEg5S19JTlRfU1dCQSA9IDB4MDAwMTAwMDAsCi0JQVRIOUtfSU5UX0JNSVNTID0gMHgwMDA0MDAwMCwKLQlBVEg5S19JTlRfQk5SID0gMHgwMDEwMDAwMCwKLQlBVEg5S19JTlRfVElNID0gMHgwMDIwMDAwMCwKLQlBVEg5S19JTlRfRFRJTSA9IDB4MDA0MDAwMDAsCi0JQVRIOUtfSU5UX0RUSU1TWU5DID0gMHgwMDgwMDAwMCwKLQlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCi0JQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCi0JQVRIOUtfSU5UX0NTVCA9IDB4MTAwMDAwMDAsCi0JQVRIOUtfSU5UX0dUVCA9IDB4MjAwMDAwMDAsCi0JQVRIOUtfSU5UX0ZBVEFMID0gMHg0MDAwMDAwMCwKLQlBVEg5S19JTlRfR0xPQkFMID0gMHg4MDAwMDAwMCwKLQlBVEg5S19JTlRfQk1JU0MgPSBBVEg5S19JTlRfVElNIHwKLQkJQVRIOUtfSU5UX0RUSU0gfAotCQlBVEg5S19JTlRfRFRJTVNZTkMgfAotCQlBVEg5S19JTlRfQ0FCRU5ELAotCUFUSDlLX0lOVF9DT01NT04gPSBBVEg5S19JTlRfUlhOT0ZSTSB8Ci0JCUFUSDlLX0lOVF9SWERFU0MgfAotCQlBVEg5S19JTlRfUlhFT0wgfAotCQlBVEg5S19JTlRfUlhPUk4gfAotCQlBVEg5S19JTlRfVFhVUk4gfAotCQlBVEg5S19JTlRfVFhERVNDIHwKLQkJQVRIOUtfSU5UX01JQiB8Ci0JCUFUSDlLX0lOVF9SWFBIWSB8Ci0JCUFUSDlLX0lOVF9SWEtDTSB8Ci0JCUFUSDlLX0lOVF9TV0JBIHwKLQkJQVRIOUtfSU5UX0JNSVNTIHwKLQkJQVRIOUtfSU5UX0dQSU8sCi0JQVRIOUtfSU5UX05PQ0FSRCA9IDB4ZmZmZmZmZmYKLX07Ci0KLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTICAweDAwMDEKLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU18yMDQwICAgICAweDAwMDIKLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU19IQUxGR0kgICAweDAwMDQKLQotc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyB7Ci0JdTMyIFRyaWVzOwotCXUzMiBSYXRlOwotCXUzMiBQa3REdXJhdGlvbjsKLQl1MzIgQ2hTZWw7Ci0JdTMyIFJhdGVGbGFnczsKLX07Ci0KLSNkZWZpbmUgQ0hBTk5FTF9DV19JTlQgICAgMHgwMDAwMgotI2RlZmluZSBDSEFOTkVMX0NDSyAgICAgICAweDAwMDIwCi0jZGVmaW5lIENIQU5ORUxfT0ZETSAgICAgIDB4MDAwNDAKLSNkZWZpbmUgQ0hBTk5FTF8yR0haICAgICAgMHgwMDA4MAotI2RlZmluZSBDSEFOTkVMXzVHSFogICAgICAweDAwMTAwCi0jZGVmaW5lIENIQU5ORUxfUEFTU0lWRSAgIDB4MDAyMDAKLSNkZWZpbmUgQ0hBTk5FTF9EWU4gICAgICAgMHgwMDQwMAotI2RlZmluZSBDSEFOTkVMX0hBTEYgICAgICAweDA0MDAwCi0jZGVmaW5lIENIQU5ORUxfUVVBUlRFUiAgIDB4MDgwMDAKLSNkZWZpbmUgQ0hBTk5FTF9IVDIwICAgICAgMHgxMDAwMAotI2RlZmluZSBDSEFOTkVMX0hUNDBQTFVTICAweDIwMDAwCi0jZGVmaW5lIENIQU5ORUxfSFQ0ME1JTlVTIDB4NDAwMDAKLQotI2RlZmluZSBDSEFOTkVMX0lOVEVSRkVSRU5DRSAgICAweDAxCi0jZGVmaW5lIENIQU5ORUxfREZTICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQ0hBTk5FTF80TVNfTElNSVQgICAgICAgMHgwNAotI2RlZmluZSBDSEFOTkVMX0RGU19DTEVBUiAgICAgICAweDA4Ci0jZGVmaW5lIENIQU5ORUxfRElTQUxMT1dfQURIT0MgIDB4MTAKLSNkZWZpbmUgQ0hBTk5FTF9QRVJfMTFEX0FESE9DICAgMHgyMAotCi0jZGVmaW5lIENIQU5ORUxfQSAgICAgICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE0pCi0jZGVmaW5lIENIQU5ORUxfQiAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0NDSykKLSNkZWZpbmUgQ0hBTk5FTF9HICAgICAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfT0ZETSkKLSNkZWZpbmUgQ0hBTk5FTF9HX0hUMjAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQyMCkKLSNkZWZpbmUgQ0hBTk5FTF9BX0hUMjAgICAgICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQyMCkKLSNkZWZpbmUgQ0hBTk5FTF9HX0hUNDBQTFVTICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQ0MFBMVVMpCi0jZGVmaW5lIENIQU5ORUxfR19IVDQwTUlOVVMgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBNSU5VUykKLSNkZWZpbmUgQ0hBTk5FTF9BX0hUNDBQTFVTICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQ0MFBMVVMpCi0jZGVmaW5lIENIQU5ORUxfQV9IVDQwTUlOVVMgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBNSU5VUykKLSNkZWZpbmUgQ0hBTk5FTF9BTEwJCQkJXAotCShDSEFOTkVMX09GRE18CQkJCVwKLQkgQ0hBTk5FTF9DQ0t8CQkJCVwKLQkgQ0hBTk5FTF8yR0haIHwJCQkJXAotCSBDSEFOTkVMXzVHSFogfAkJCQlcCi0JIENIQU5ORUxfSFQyMCB8CQkJCVwKLQkgQ0hBTk5FTF9IVDQwUExVUyB8CQkJXAotCSBDSEFOTkVMX0hUNDBNSU5VUykKLQotc3RydWN0IGF0aDlrX2NoYW5uZWwgewotCXUxNiBjaGFubmVsOwotCXUzMiBjaGFubmVsRmxhZ3M7Ci0JdTggcHJpdkZsYWdzOwotCWludDhfdCBtYXhSZWdUeFBvd2VyOwotCWludDhfdCBtYXhUeFBvd2VyOwotCWludDhfdCBtaW5UeFBvd2VyOwotCXUzMiBjaGFubW9kZTsKLQlpbnQzMl90IENhbFZhbGlkOwotCWJvb2wgb25lVGltZUNhbHNEb25lOwotCWludDhfdCBpQ29mZjsKLQlpbnQ4X3QgcUNvZmY7Ci0JaW50MTZfdCByYXdOb2lzZUZsb29yOwotCWludDhfdCBhbnRlbm5hTWF4OwotCXUzMiByZWdEbW5GbGFnczsKLQl1MzIgY29uZm9ybWFuY2VUZXN0TGltaXRbM107IC8qIDA6MTFhLCAxOiAxMWIsIDI6MTFnICovCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0Jc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgSVNfQ0hBTl9BKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0EpID09IENIQU5ORUxfQSkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUMjApID09IENIQU5ORUxfQV9IVDIwKSB8fCBcCi0gICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0MFBMVVMpID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fRyhfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgKENIQU5ORUxfRykpID09IENIQU5ORUxfRykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUMjApID09IENIQU5ORUxfR19IVDIwKSB8fCBcCi0gICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0MFBMVVMpID09IENIQU5ORUxfR19IVDQwUExVUykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fT0ZETShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX09GRE0pICE9IDApCi0jZGVmaW5lIElTX0NIQU5fNUdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApCi0jZGVmaW5lIElTX0NIQU5fMkdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzJHSFopICE9IDApCi0jZGVmaW5lIElTX0NIQU5fUEFTU0lWRShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpICE9IDApCi0jZGVmaW5lIElTX0NIQU5fSEFMRl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfSEFMRikgIT0gMCkKLSNkZWZpbmUgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9RVUFSVEVSKSAhPSAwKQotCi0vKiBUaGVzZSBtYWNyb3MgY2hlY2sgY2hhbm1vZGUgYW5kIG5vdCBjaGFubmVsRmxhZ3MgKi8KLSNkZWZpbmUgSVNfQ0hBTl9CKF9jKSAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9CKQotI2RlZmluZSBJU19DSEFOX0hUMjAoX2MpICgoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUMjApIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKSkKLSNkZWZpbmUgSVNfQ0hBTl9IVDQwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fAlcCi0JCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKLSNkZWZpbmUgSVNfQ0hBTl9IVChfYykgKElTX0NIQU5fSFQyMCgoX2MpKSB8fCBJU19DSEFOX0hUNDAoKF9jKSkpCi0KLSNkZWZpbmUgSVNfQ0hBTl9JTl9QVUJMSUNfU0FGRVRZX0JBTkQoX2MpICgoX2MpID4gNDk0MCAmJiAoX2MpIDwgNDk5MCkKLSNkZWZpbmUgSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKF9jKQkJCVwKLQkoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApICYmCVwKLQkgKCgoX2MpLT5jaGFubmVsICUgMjApICE9IDApICYmCQkJXAotCSAoKChfYyktPmNoYW5uZWwgJSAxMCkgIT0gMCkpCi0KLXN0cnVjdCBhdGg5a19rZXl2YWwgewotCXU4IGt2X3R5cGU7Ci0JdTgga3ZfcGFkOwotCXUxNiBrdl9sZW47Ci0JdTgga3ZfdmFsWzE2XTsKLQl1OCBrdl9taWNbOF07Ci0JdTgga3ZfdHhtaWNbOF07Ci19OwotCi1lbnVtIGF0aDlrX2tleV90eXBlIHsKLQlBVEg5S19LRVlfVFlQRV9DTEVBUiwKLQlBVEg5S19LRVlfVFlQRV9XRVAsCi0JQVRIOUtfS0VZX1RZUEVfQUVTLAotCUFUSDlLX0tFWV9UWVBFX1RLSVAsCi19OwotCi1lbnVtIGF0aDlrX2NpcGhlciB7Ci0JQVRIOUtfQ0lQSEVSX1dFUCA9IDAsCi0JQVRIOUtfQ0lQSEVSX0FFU19PQ0IgPSAxLAotCUFUSDlLX0NJUEhFUl9BRVNfQ0NNID0gMiwKLQlBVEg5S19DSVBIRVJfQ0tJUCA9IDMsCi0JQVRIOUtfQ0lQSEVSX1RLSVAgPSA0LAotCUFUSDlLX0NJUEhFUl9DTFIgPSA1LAotCUFUSDlLX0NJUEhFUl9NSUMgPSAxMjcKLX07Ci0KLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9DT01QUkVTU19ESVMgICAweDAwMDEKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9BRVNfRElTICAgICAgICAweDAwMDIKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9GQVNURlJBTUVfRElTICAweDAwMDQKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9CVVJTVF9ESVMgICAgICAweDAwMDgKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9NQVhRQ1UgICAgICAgICAweDAxRjAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9NQVhRQ1VfUyAgICAgICA0Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfSEVBVllfQ0xJUF9FTiAgMHgwMjAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFUyAgICAgMHhGMDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFU19TICAgMTIKLQotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQgICAweDAwNDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU4gICAgMHgwMDgwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMiAgICAgICAgIDB4MDEwMAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCAgICAweDAyMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERCAgICAgMHgwNDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBICAgIDB4MDgwMAotCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PRERfUFJFNF8wICAweDQwMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUFfUFJFNF8wIDB4ODAwMAotCi0jZGVmaW5lIFNEX05PX0NUTCAgICAgICAgICAgICAgIDB4RTAKLSNkZWZpbmUgTk9fQ1RMICAgICAgICAgICAgICAgICAgMHhmZgotI2RlZmluZSBDVExfTU9ERV9NICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENUTF8xMUEgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ1RMXzExQiAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDVExfMTFHICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENUTF8yR0hUMjAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgQ1RMXzVHSFQyMCAgICAgICAgICAgICAgNgotI2RlZmluZSBDVExfMkdIVDQwICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENUTF81R0hUNDAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBBUl9FRVBST01fTUFDKGkpICAgICAgICAoMHgxZCsoaSkpCi0KLSNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKLSNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQotCi0jZGVmaW5lIENUUllfREVCVUcgMHgxZmYKLSNkZWZpbmUJQ1RSWV9ERUZBVUxUIDAKLQotZW51bSByZWdfZXh0X2JpdG1hcCB7Ci0JUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKLQlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCi0JUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCi0JUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKLX07Ci0KLXN0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKLQl1MTYgY291bnRyeUNvZGU7Ci0JdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ0RtbjVHOwotCXUxNiByZWdEbW4yRzsKLQl1OCBpc011bHRpZG9tYWluOwotCXU4IGlzb1szXTsKLX07Ci0KLSNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgYXRoOWtfaW93cml0ZTMyKChfYWgpLCAoX3JlZyksIChfdmFsKSkKLSNkZWZpbmUgUkVHX1JFQUQoX2FoLCBfcmVnKSBhdGg5a19pb3JlYWQzMigoX2FoKSwgKF9yZWcpKQotCi0jZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCi0jZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCi0jZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCi0JUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKLSNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAotCVJFR19XUklURShfYSwgX3IsIFwKLQkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKLSNkZWZpbmUgUkVHX1NFVF9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgfCBfZikKLSNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+X2YpCi0KLSNkZWZpbmUgQVRIOUtfVFhRX1VTRV9MT0NLT1VUX0JLT0ZGX0RJUyAgIDB4MDAwMDAwMDEKLQotI2RlZmluZSBJTklUX0FJRlMgICAgICAgMgotI2RlZmluZSBJTklUX0NXTUlOICAgICAgMTUKLSNkZWZpbmUgSU5JVF9DV01JTl8xMUIgIDMxCi0jZGVmaW5lIElOSVRfQ1dNQVggICAgICAxMDIzCi0jZGVmaW5lIElOSVRfU0hfUkVUUlkgICAxMAotI2RlZmluZSBJTklUX0xHX1JFVFJZICAgMTAKLSNkZWZpbmUgSU5JVF9TU0hfUkVUUlkgIDMyCi0jZGVmaW5lIElOSVRfU0xHX1JFVFJZICAzMgotCi0jZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQotCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9NQVggICAgICAoNjQgKiAxMDI0IC0gMSkKLSNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQgIEFUSF9BTVBEVV9MSU1JVF9NQVgKLQotI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgMwotI2RlZmluZSBJRUVFODAyMTFfV0VQX0tJRExFTiAgICAgMQotI2RlZmluZSBJRUVFODAyMTFfV0VQX0NSQ0xFTiAgICAgNAotI2RlZmluZSBJRUVFODAyMTFfTUFYX01QRFVfTEVOICAoMzg0MCArIEZDU19MRU4gKwkJXAotCQkJCSAoSUVFRTgwMjExX1dFUF9JVkxFTiArCQlcCi0JCQkJICBJRUVFODAyMTFfV0VQX0tJRExFTiArCVwKLQkJCQkgIElFRUU4MDIxMV9XRVBfQ1JDTEVOKSkKLSNkZWZpbmUgTUFYX1JBVEVfUE9XRVIgNjMKLQotZW51bSBhdGg5a19wb3dlcl9tb2RlIHsKLQlBVEg5S19QTV9BV0FLRSA9IDAsCi0JQVRIOUtfUE1fRlVMTF9TTEVFUCwKLQlBVEg5S19QTV9ORVRXT1JLX1NMRUVQLAotCUFUSDlLX1BNX1VOREVGSU5FRAotfTsKLQotc3RydWN0IGF0aDlrX21pYl9zdGF0cyB7Ci0JdTMyIGFja3Jjdl9iYWQ7Ci0JdTMyIHJ0c19iYWQ7Ci0JdTMyIHJ0c19nb29kOwotCXUzMiBmY3NfYmFkOwotCXUzMiBiZWFjb25zOwotfTsKLQotZW51bSBhdGg5a19hbnRfc2V0dGluZyB7Ci0JQVRIOUtfQU5UX1ZBUklBQkxFID0gMCwKLQlBVEg5S19BTlRfRklYRURfQSwKLQlBVEg5S19BTlRfRklYRURfQgotfTsKLQotI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfNiA2Ci0jZGVmaW5lIEFUSDlLX1NMT1RfVElNRV85IDkKLSNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzIwIDIwCi0KLWVudW0gYXRoOWtfaHRfbWFjbW9kZSB7Ci0JQVRIOUtfSFRfTUFDTU9ERV8yMCA9IDAsCi0JQVRIOUtfSFRfTUFDTU9ERV8yMDQwID0gMSwKLX07Ci0KLWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgewotCUFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwID0gMCwKLQlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSA9IDEsCi19OwotCi1zdHJ1Y3QgYXRoOWtfaHRfY3dtIHsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgaHRfbWFjbW9kZTsKKwl1MzIga2V5bWF4OworCURFQ0xBUkVfQklUTUFQKGtleW1hcCwgQVRIX0tFWU1BWCk7CisJdTggc3BsaXRtaWM7CisJYXRvbWljX3QgcHNfdXNlY291bnQ7CisJZW51bSBhdGg5a19pbnQgaW1hc2s7CiAJZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBodF9leHRwcm90c3BhY2luZzsKLX07CisJZW51bSBhdGg5a19odF9tYWNtb2RlIHR4X2NoYW5fd2lkdGg7CiAKLWVudW0gYXRoOWtfYW5pX2NtZCB7Ci0JQVRIOUtfQU5JX1BSRVNFTlQgPSAweDEsCi0JQVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMID0gMHgyLAotCUFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiA9IDB4NCwKLQlBVEg5S19BTklfQ0NLX1dFQUtfU0lHTkFMX1RIUiA9IDB4OCwKLQlBVEg5S19BTklfRklSU1RFUF9MRVZFTCA9IDB4MTAsCi0JQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgPSAweDIwLAotCUFUSDlLX0FOSV9NT0RFID0gMHg0MCwKLQlBVEg5S19BTklfUEhZRVJSX1JFU0VUID0gMHg4MCwKLQlBVEg5S19BTklfQUxMID0gMHhmZgotfTsKKwlzdHJ1Y3QgYXRoX2NvbmZpZyBjb25maWc7CisJc3RydWN0IGF0aF9yeCByeDsKKwlzdHJ1Y3QgYXRoX3R4IHR4OworCXN0cnVjdCBhdGhfYmVhY29uIGJlYWNvbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU11bQVRIX1JBVEVfTUFYXTsKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV9NQVhdOworCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqY3VyX3JhdGVfdGFibGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLWVudW0gewotCVdMQU5fUkNfUEhZX09GRE0sCi0JV0xBTl9SQ19QSFlfQ0NLLAotCVdMQU5fUkNfUEhZX0hUXzIwX1NTLAotCVdMQU5fUkNfUEhZX0hUXzIwX0RTLAotCVdMQU5fUkNfUEhZX0hUXzQwX1NTLAotCVdMQU5fUkNfUEhZX0hUXzQwX0RTLAotCVdMQU5fUkNfUEhZX0hUXzIwX1NTX0hHSSwKLQlXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0ksCi0JV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLAotCVdMQU5fUkNfUEhZX0hUXzQwX0RTX0hHSSwKLQlXTEFOX1JDX1BIWV9NQVgKLX07CisJc3RydWN0IGF0aF9sZWQgcmFkaW9fbGVkOworCXN0cnVjdCBhdGhfbGVkIGFzc29jX2xlZDsKKwlzdHJ1Y3QgYXRoX2xlZCB0eF9sZWQ7CisJc3RydWN0IGF0aF9sZWQgcnhfbGVkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgYXRoX2xlZF9ibGlua193b3JrOworCWludCBsZWRfb25fZHVyYXRpb247CisJaW50IGxlZF9vZmZfZHVyYXRpb247CisJaW50IGxlZF9vbl9jbnQ7CisJaW50IGxlZF9vZmZfY250OwogCi1lbnVtIGF0aDlrX3RwX3NjYWxlIHsKLQlBVEg5S19UUF9TQ0FMRV9NQVggPSAwLAotCUFUSDlLX1RQX1NDQUxFXzUwLAotCUFUSDlLX1RQX1NDQUxFXzI1LAotCUFUSDlLX1RQX1NDQUxFXzEyLAotCUFUSDlLX1RQX1NDQUxFX01JTgotfTsKLQotZW51bSBzZXJfcmVnX21vZGUgewotCVNFUl9SRUdfTU9ERV9PRkYgPSAwLAotCVNFUl9SRUdfTU9ERV9PTiA9IDEsCi0JU0VSX1JFR19NT0RFX0FVVE8gPSAyLAotfTsKLQotI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCi0jZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xMjEKLSNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKLSNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKLQotI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggICAgICAgICAgIDUKLSNkZWZpbmUgTlVNX05GX1JFQURJTkdTICAgICAgICAgICAgICAgICA2Ci0KLXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKLQlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07Ci0JdTggY3VyckluZGV4OwotCWludDE2X3QgcHJpdk5GOwotCXU4IGludmFsaWRORmNvdW50OwotfTsKLQotc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSB7Ci0JdTMyIGJzX25leHR0YnR0OwotCXUzMiBic19uZXh0ZHRpbTsKLQl1MzIgYnNfaW50dmFsOwotI2RlZmluZSBBVEg5S19CRUFDT05fUEVSSU9EICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgQVRIOUtfQkVBQ09OX0VOQSAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YgICAgMHgwMTAwMDAwMAotCXUzMiBic19kdGltcGVyaW9kOwotCXUxNiBic19jZnBwZXJpb2Q7Ci0JdTE2IGJzX2NmcG1heGR1cmF0aW9uOwotCXUzMiBic19jZnBuZXh0OwotCXUxNiBic190aW1vZmZzZXQ7Ci0JdTE2IGJzX2JtaXNzdGhyZXNob2xkOwotCXUzMiBic19zbGVlcGR1cmF0aW9uOwotfTsKLQotc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgewotCXUzMiBuc19hdmdicnNzaTsKLQl1MzIgbnNfYXZncnNzaTsKLQl1MzIgbnNfYXZndHhyc3NpOwotCXUzMiBuc19hdmd0eHJhdGU7Ci19OwotCi0jZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCi0KLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCAgICAgICAgICAgICAwCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX0FUVEVOVElPTl9MRUQgMQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9QT1dFUl9MRUQgICAgIDIKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19ORVRXT1JLX0xFRCAgICA1Ci0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfUE9XRVJfTEVEICAgICAgNgotCi1lbnVtIHsKLQlBVEg5S19SRVNFVF9QT1dFUl9PTiwKLQlBVEg5S19SRVNFVF9XQVJNLAotCUFUSDlLX1JFU0VUX0NPTEQsCi19OwotCi0jZGVmaW5lIEFIX1VTRV9FRVBST00gICAweDEKLQotc3RydWN0IGF0aF9oYWwgewotCXUzMiBhaF9tYWdpYzsKLQl1MTYgYWhfZGV2aWQ7Ci0JdTE2IGFoX3N1YnZlbmRvcmlkOwotCXUzMiBhaF9tYWNWZXJzaW9uOwotCXUxNiBhaF9tYWNSZXY7Ci0JdTE2IGFoX3BoeVJldjsKLQl1MTYgYWhfYW5hbG9nNUdoelJldjsKLQl1MTYgYWhfYW5hbG9nMkdoelJldjsKLQotCXZvaWQgX19pb21lbSAqYWhfc2g7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYWhfc2M7Ci0KLQllbnVtIG5sODAyMTFfaWZ0eXBlIGFoX29wbW9kZTsKLQlzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyBhaF9jb25maWc7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyBhaF9jYXBzOwotCi0JdTE2IGFoX2NvdW50cnlDb2RlOwotCXUzMiBhaF9mbGFnczsKLQlpbnQxNl90IGFoX3Bvd2VyTGltaXQ7Ci0JdTE2IGFoX21heFBvd2VyTGV2ZWw7Ci0JdTMyIGFoX3RwU2NhbGU7Ci0JdTE2IGFoX2N1cnJlbnRSRDsKLQl1MTYgYWhfY3VycmVudFJERXh0OwotCXUxNiBhaF9jdXJyZW50UkRJblVzZTsKLQl1MTYgYWhfY3VycmVudFJENUc7Ci0JdTE2IGFoX2N1cnJlbnRSRDJHOwotCWNoYXIgYWhfaXNvWzRdOwotCi0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgYWhfY2hhbm5lbHNbMTUwXTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYWhfY3VyY2hhbjsKLQl1MzIgYWhfbmNoYW47Ci0KLQlib29sIGFoX2lzUGNpRXhwcmVzczsKLQl1MTYgYWhfdHhUcmlnTGV2ZWw7Ci0JdTE2IGFoX3Jmc2lsZW50OwotCXUzMiBhaF9yZmtpbGxfZ3BpbzsKLQl1MzIgYWhfcmZraWxsX3BvbGFyaXR5OwotCi0jaWZuZGVmIEFUSF9ORl9QRVJfQ0hBTgotCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IG5mQ2FsSGlzdFtOVU1fTkZfUkVBRElOR1NdOworCXN0cnVjdCBhdGhfcmZraWxsIHJmX2tpbGw7CisJc3RydWN0IGF0aF9hbmkgYW5pOworCXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIG5vZGVzdGF0czsKKyNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKKwlzdHJ1Y3QgYXRoOWtfZGVidWcgZGVidWc7CiAjZW5kaWYKKwlzdHJ1Y3QgYXRoX2J1c19vcHMgKmJ1c19vcHM7CiB9OwogCi1zdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKLQl1MTYgc3ludGhfY2VudGVyOwotCXUxNiBjdGxfY2VudGVyOwotCXUxNiBleHRfY2VudGVyOworc3RydWN0IGF0aF93aXBoeSB7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2M7IC8qIHNoYXJlZCBmb3IgYWxsIHZpcnR1YWwgd2lwaHlzICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBhdGhfd2lwaHlfc3RhdGUgeworCQlBVEhfV0lQSFlfSU5BQ1RJVkUsCisJCUFUSF9XSVBIWV9BQ1RJVkUsCisJCUFUSF9XSVBIWV9QQVVTSU5HLAorCQlBVEhfV0lQSFlfUEFVU0VELAorCQlBVEhfV0lQSFlfU0NBTiwKKwl9IHN0YXRlOworCWludCBjaGFuX2lkeDsKKwlpbnQgY2hhbl9pc19odDsKIH07CiAKLXN0cnVjdCBhdGhfcmF0ZV90YWJsZTsKK2ludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOworaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwogCi0vKiBIZWxwZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX3JlYWRfY2FjaGVzaXplKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgKmNzeikKK3sKKwlzYy0+YnVzX29wcy0+cmVhZF9jYWNoZXNpemUoc2MsIGNzeik7Cit9CiAKLWVudW0gd2lyZWxlc3NfbW9kZSBhdGg5a19od19jaGFuMndtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7Ci11MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKLWJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICB1MTYgZmxhZ3MsIHUxNiAqbG93LAotCQkJICAgICB1MTYgKmhpZ2gpOwotdTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKLQkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwKLQkJCSAgIGJvb2wgc2hvcnRQcmVhbWJsZSk7Ci11MzIgYXRoOWtfaHdfbWh6MmllZWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZnJlcSwgdTMyIGZsYWdzKTsKLXZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIHN0cnVjdCBjaGFuX2NlbnRlcnMgKmNlbnRlcnMpOworc3RhdGljIGlubGluZSB2b2lkIGF0aF9idXNfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzYy0+YnVzX29wcy0+Y2xlYW51cChzYyk7Cit9CiAKLS8qIEF0dGFjaCwgRGV0YWNoICovCitleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzOwogCi1jb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7Ci12b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCXZvaWQgX19pb21lbSAqbWVtLCBpbnQgKmVycm9yKTsKLXZvaWQgYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KTsKK3ZvaWQgYXRoX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworY29uc3QgY2hhciAqYXRoX21hY19iYl9uYW1lKHUzMiBtYWNfYmJfdmVyc2lvbik7Citjb25zdCBjaGFyICphdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbik7Cit2b2lkIGF0aF9zZXRfaHdfY2FwYWIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbik7Cit2b2lkIGF0aF91cGRhdGVfY2hhaW5tYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaXNfaHQpOworaW50IGF0aF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pOwordm9pZCBhdGhfcmFkaW9fZW5hYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogCi0KLS8qIEhXIFJlc2V0ICovCi0KLWJvb2wgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlLAotCQkgICAgdTggdHhjaGFpbm1hc2ssIHU4IHJ4Y2hhaW5tYXNrLAotCQkgICAgZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZywKLQkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UsIGludCAqc3RhdHVzKTsKLQotLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KLQotYm9vbCBhdGg5a19od19rZXlyZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSk7Ci1ib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSwgY29uc3QgdTggKm1hYyk7Ci1ib29sIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSwKLQkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSk7Ci1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpOwotCi0vKiBQb3dlciBNYW5hZ2VtZW50ICovCi0KLWJvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSk7Ci0KLS8qIEJlYWNvbiB0aW1lcnMgKi8KLQotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCk7Ci12b2lkIGF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKTsKLS8qIEhXIENhcGFiaWxpdGllcyAqLwotCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKLWJvb2wgYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiBzZXR0aW5nLCBpbnQgKnN0YXR1cyk7Ci0KLS8qIEdQSU8gLyBSRktJTEwgLyBBbnRlbm5hZSAqLwotCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pOwotdTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pOwotdm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sCi0JCQkgdTMyIGFoX3NpZ25hbF90eXBlKTsKLXZvaWQgYXRoOWtfaHdfc2V0X2dwaW8oc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCk7CisjaWZkZWYgQ09ORklHX1BDSQoraW50IGF0aF9wY2lfaW5pdCh2b2lkKTsKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF0aF9wY2lfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgotaW50IGF0aDlrX2h3X3NlbGVjdF9hbnRjb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2ZnKTsKLXUzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldGFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgYW50ZW5uYSk7Ci1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCi0JCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKLQkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAotCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpOwogCi0vKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwotCi11MzIgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgYml0cyk7Ci1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBsaW1pdCk7Ci12b2lkIGF0aDlrX2h3X2dldG1hYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4ICptYWMpOwotYm9vbCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqbWFjKTsKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKLXZvaWQgYXRoOWtfaHdfZ2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfaGFsICphaCwgdTggKm1hc2spOwotYm9vbCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqbWFzayk7Ci12b2lkIGF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqYnNzaWQsIHUxNiBhc3NvY0lkKTsKLXU2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKTsKLWJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpOwotdm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19odF9tYWNtb2RlIG1vZGUpOwotCi0vKiBSZWd1bGF0b3J5ICovCi0KLWJvb2wgYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotc3RydWN0IGF0aDlrX2NoYW5uZWwqIGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpOwotdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXUzMiBhdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgIHUzMiBtYXhjaGFucywgdTMyICpuY2hhbnMsIHU4ICpyZWdjbGFzc2lkcywKLQkJCSAgICAgIHUzMiBtYXhyZWdpZHMsIHUzMiAqbnJlZ2lkcywgdTE2IGNjLAotCQkJICAgICAgYm9vbCBlbmFibGVPdXRkb29yLCBib29sIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpOwotCi0vKiBBTkkgKi8KLQotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCi0JCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdTMyIGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHUzMiAqcnhjX3BjbnQsCi0JCQkJICB1MzIgKnJ4Zl9wY250LAotCQkJCSAgdTMyICp0eGZfcGNudCk7Ci12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpOwotdm9pZCBhdGg5a19od19hbmlfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19hbmlfZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KLS8qIENhbGlicmF0aW9uICovCi0KLXZvaWQgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKTsKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotaW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCi0JCQlib29sICppc0NhbERvbmUpOwotYm9vbCBhdGg5a19od19pbml0X2NhbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci0KLQotLyogRUVQUk9NICovCi0KLWludCBhdGg5a19od19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCk7Ci12b2lkIGF0aDlrX2h3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGludDE2X3QgKnJhdGVzQXJyYXksCi0JCQkJICAgICAgIHUxNiBjZmdDdGwsCi0JCQkJICAgICAgIHU4IEFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCSAgICAgICB1OCBwb3dlckxpbWl0KTsKLWJvb2wgYXRoOWtfaHdfc2V0X3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpOwotYm9vbCBhdGg5a19od19lZXByb21fc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotaW50IGF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKTsKLXU4IGF0aDlrX2h3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpOwotdTE2IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KTsKLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KLS8qIEludGVycnVwdCBIYW5kbGluZyAqLwotCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKTsKLQotLyogTUFDIChQQ1UvUUNVKSAqLwotCi11MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLXUzMiBhdGg5a19od19udW10eHBlbmRpbmcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKHN0cnVjdCBhdGhfaGFsICphaCwgYm9vbCBiSW5jVHJpZ0xldmVsKTsKLWJvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od19maWxsdHhkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCSB1MzIgc2VnTGVuLCBib29sIGZpcnN0U2VnLAotCQkJIGJvb2wgbGFzdFNlZywgY29uc3Qgc3RydWN0IGF0aF9kZXNjICpkczApOwotdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgICAgdTMyIHBrdExlbiwgZW51bSBhdGg5a19wa3RfdHlwZSB0eXBlLCB1MzIgdHhQb3dlciwKLQkJCSAgICB1MzIga2V5SXgsIGVudW0gYXRoOWtfa2V5X3R5cGUga2V5VHlwZSwgdTMyIGZsYWdzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKLQkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCi0JCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCi0JCQkJICBzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1tdLAotCQkJCSAgdTMyIG5zZXJpZXMsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQl1MzIgYWdnckxlbik7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJIHUzMiBudW1EZWxpbXMpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQkgICB1MzIgYnVyc3REdXJhdGlvbik7Ci12b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSAgICAgdTMyIHZtZik7Ci12b2lkIGF0aDlrX2h3X2dldHR4aW50cnR4cXMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgKnR4cXMpOwotYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IHEsCi0JCQkgICAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAotCQkJICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Ci1pbnQgYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a190eF9xdWV1ZSB0eXBlLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOwotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotaW50IGF0aDlrX2h3X3J4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJdTMyIHBhLCBzdHJ1Y3QgYXRoX2Rlc2MgKm5kcywgdTY0IHRzZik7Ci1ib29sIGF0aDlrX2h3X3NldHVwcnhkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCSAgdTMyIHNpemUsIHUzMiBmbGFncyk7Ci1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCk7Ci12b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJ4ZHApOwotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLQorI2lmZGVmIENPTkZJR19BVEhFUk9TX0FSNzFYWAoraW50IGF0aF9haGJfaW5pdCh2b2lkKTsKK3ZvaWQgYXRoX2FoYl9leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF0aF9haGJfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWlmIChhdG9taWNfaW5jX3JldHVybigmc2MtPnBzX3VzZWNvdW50KSA9PSAxKQorCQlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9ICBBVEg5S19QTV9BV0FLRSkgeworCQkJc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUgPSBzYy0+c2NfYWgtPnBvd2VyX21vZGU7CisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKKwkJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2MtPnBzX3VzZWNvdW50KSkKKwkJaWYgKChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKKwkJICAgICEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQkVBQ09OKSkKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwKKwkJCQkJICBzYy0+c2NfYWgtPnJlc3RvcmVfbW9kZSk7Cit9CisKKwordm9pZCBhdGg5a19zZXRfYnNzaWRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgYXRoOWtfd2lwaHlfYWRkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a193aXBoeV9kZWwoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7Cit2b2lkIGF0aDlrX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoOWtfd2lwaHlfcGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CitpbnQgYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKK2ludCBhdGg5a193aXBoeV9zZWxlY3Qoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7Cit2b2lkIGF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtc2VjX2ludCk7Cit2b2lkIGF0aDlrX3dpcGh5X2NoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworYm9vbCBhdGg5a193aXBoeV9zdGFydGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfd2lwaHlfcGF1c2VfYWxsX2ZvcmNlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgIHN0cnVjdCBhdGhfd2lwaHkgKnNlbGVjdGVkKTsKK2Jvb2wgYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a193aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSwgdGhleSBib3RoIHNoYXJlIHRoZSBzYW1lIGxvY2suIFdlIGRvIHRoaXMgdG8gc2VyaWFsaXplCisgKiByZWFkcyBhbmQgd3JpdGVzIG9uIEF0aGVyb3MgODAyLjExbiBQQ0kgZGV2aWNlcyBvbmx5LiBUaGlzIGlzIHJlcXVpcmVkCisgKiBhcyB0aGUgRklGTyBvbiB0aGVzZSBkZXZpY2VzIGNhbiBvbmx5IGFjY2VwdCBzYW5lbHkgMiByZXF1ZXN0cy4gQWZ0ZXIKKyAqIHRoYXQgdGhlIGRldmljZSBnb2VzIGJhbmFuYXMuIFNlcmlhbGl6aW5nIHRoZSByZWFkcy93cml0ZXMgcHJldmVudHMgdGhpcworICogZnJvbSBoYXBwZW5pbmcuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2lvd3JpdGUzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQsIHUzMiB2YWwpCit7CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCQlpb3dyaXRlMzIodmFsLCBhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQlpb3dyaXRlMzIodmFsLCBhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg5a19pb3JlYWQzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQpCit7CisJdTMyIHZhbDsKKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJfSBlbHNlCisJCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJcmV0dXJuIHZhbDsKK30KKworI2VuZGlmIC8qIEFUSDlLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKaW5kZXggM2FiMGI0My4uZWM5OTU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKKworI2RlZmluZSBGVURHRSAyCiAKIC8qCiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBjZXJ0YWluIHRyYW5zbWl0IHF1ZXVlIHByb3BlcnRpZXMgZGVwZW5kaW5nIG9uCkBAIC0yMywxMSArMjUsMTEgQEAKICovCiBzdGF0aWMgaW50IGF0aF9iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKIAlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsICZxaSk7Ci0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIEFsd2F5cyBidXJzdCBvdXQgYmVhY29uIGFuZCBDQUIgdHJhZmZpYy4gKi8KIAkJcWkudHFpX2FpZnMgPSAxOwogCQlxaS50cWlfY3dtaW4gPSAwOwpAQCAtNDQsNDYgKzQ2LDMzIEBACiAJCQkidW5hYmxlIHRvIHVwZGF0ZSBoL3cgYmVhY29uIHF1ZXVlIHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJcmV0dXJuIDE7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGhfYnN0dWNrX3Byb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzdHVjayBiZWFjb247IHJlc2V0dGluZyAoYm1pc3MgY291bnQgJXUpXG4iLAotCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLX0KLQogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKICAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCiAgKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KICovCi1zdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICBzdHJ1Y3QgYXRoX3ZhcCAqYXZwLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOwogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0JaW50IGZsYWdzLCBhbnRlbm5hOwotCXU4IHJpeCwgcmF0ZTsKLQlpbnQgY3RzcmF0ZSA9IDA7Ci0JaW50IGN0c2R1cmF0aW9uID0gMDsKKwlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJdTggcmF0ZTsKIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibSAlcCBsZW4gJXVcbiIsIHNrYiwgc2tiLT5sZW4pOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvcnMgKi8KIAlkcyA9IGJmLT5iZl9kZXNjOwotCiAJZmxhZ3MgPSBBVEg5S19UWERFU0NfTk9BQ0s7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKKwlpZiAoKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgJiYKKwkgICAgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJZHMtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7IC8qIHNlbGYtbGlua2VkICovCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19WRU9MOwogCQkvKiBMZXQgaGFyZHdhcmUgaGFuZGxlIGFudGVubmEgc3dpdGNoaW5nLiAqLwpAQCAtOTIsNjUgKzgxLDUzIEBACiAJCWRzLT5kc19saW5rID0gMDsKIAkJLyoKIAkJICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCQkgKiBTaG91bGQgb25seSBzd2l0Y2ggZXZlcnkgYmVhY29uIHBlcmlvZCwgbm90IGZvciBldmVyeQotCQkgKiBTV0JBJ3MKLQkJICogWFhYIGFzc3VtZXMgdHdvIGFudGVubmEKKwkJICogU2hvdWxkIG9ubHkgc3dpdGNoIGV2ZXJ5IGJlYWNvbiBwZXJpb2QsIG5vdCBmb3IgZXZlcnkgU1dCQQorCQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKIAkJICovCi0JCWFudGVubmEgPSAoKHNjLT5iZWFjb24uYXN0X2JlX3htaXQgLyBzYy0+c2NfbmJjbnZhcHMpICYgMSA/IDIgOiAxKTsKKwkJYW50ZW5uYSA9ICgoc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCAvIHNjLT5uYmNudmlmcykgJiAxID8gMiA6IDEpOwogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCi0JLyoKLQkgKiBDYWxjdWxhdGUgcmF0ZSBjb2RlLgotCSAqIFhYWCBldmVyeXRoaW5nIGF0IG1pbiB4bWl0IHJhdGUKLQkgKi8KLQlyaXggPSAwOwogCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCXJhdGUgPSBydC0+aW5mb1swXS5yYXRlY29kZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJcmF0ZSB8PSBydC0+aW5mb1swXS5zaG9ydF9wcmVhbWJsZTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLAotCQkJICAgICAgIHNrYi0+bGVuICsgRkNTX0xFTiwgICAgIC8qIGZyYW1lIGxlbmd0aCAqLwotCQkJICAgICAgIEFUSDlLX1BLVF9UWVBFX0JFQUNPTiwgIC8qIEF0aGVyb3MgcGFja2V0IHR5cGUgKi8KLQkJCSAgICAgICBNQVhfUkFURV9QT1dFUiwgICAgICAgICAvKiBGSVhNRSAqLwotCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwgIC8qIG5vIGVuY3J5cHRpb24gKi8KLQkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwgICAvKiBubyBlbmNyeXB0aW9uICovCi0JCQkgICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgLyogbm8gYWNrLAotCQkJCQkJCSAgdmVvbCBmb3IgYmVhY29ucyAqLwotCQkpOworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAorCQkJICAgICAgIE1BWF9SQVRFX1BPV0VSLAorCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwkJCSAgICAgICBmbGFncyk7CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgcm91bmR1cChza2ItPmxlbiwgNCksIC8qIGJ1ZmZlciBsZW5ndGggKi8KLQkJCSAgICB0cnVlLCAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsICAgICAgICAgICAgICAgICAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICBkcyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCQkpOworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLCByb3VuZHVwKHNrYi0+bGVuLCA0KSwKKwkJCSAgICB0cnVlLCB0cnVlLCBkcyk7CiAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKLQlzZXJpZXNbMF0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOworCXNlcmllc1swXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CiAJc2VyaWVzWzBdLlJhdGVGbGFncyA9IChjdHNyYXRlKSA/IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDA7Ci0JYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhhaCwgZHMsIGRzLCAwLAotCQljdHNyYXRlLCBjdHNkdXJhdGlvbiwgc2VyaWVzLCA0LCAwKTsKKwlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgZHMsIDAsIGN0c3JhdGUsIGN0c2R1cmF0aW9uLAorCQkJCSAgICAgc2VyaWVzLCA0LCAwKTsKIH0KIAotLyogR2VuZXJhdGUgYmVhY29uIGZyYW1lIGFuZCBxdWV1ZSBjYWIgZGF0YSBmb3IgYSB2YXAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHN0cnVjdCBhdGhfYnVmICphdGhfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlpbnQgY2FicV9kZXB0aDsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKKwlpZiAoYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJY2FicSA9IHNjLT5iZWFjb24uY2FicTsKQEAgLTE2MSwxOSArMTM4LDI0IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIFJlbGVhc2UgdGhlIG9sZCBiZWFjb24gZmlyc3QgKi8KKwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKIAlpZiAoc2tiKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiAKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChzYy0+aHcsIHZpZik7CisJLyogR2V0IGEgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExICovCisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAliZi0+YmZfbXBkdSA9IHNrYjsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOworCSgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wID0KKwkJYXZwLT50c2ZfYWRqdXN0OwogCiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKQEAgLTE4OCw1NCArMTcwLDQyIEBACiAJfQogCiAJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQgPQotCQlwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLAotCQkJICAgICAgIHNrYi0+bGVuLAotCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CisJCWRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCSAgICAgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJmLT5iZl9tcGR1ID0gTlVMTDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gYmVhY29uaW5nXG4iKTsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImRtYV9tYXBwaW5nX2Vycm9yIG9uIGJlYWNvbmluZ1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoc2MtPmh3LCB2aWYpOworCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoaHcsIHZpZik7CiAKIAkvKgogCSAqIGlmIHRoZSBDQUJRIHRyYWZmaWMgZnJvbSBwcmV2aW91cyBEVElNIGlzIHBlbmRpbmcgYW5kIHRoZSBjdXJyZW50CiAJICogIGJlYWNvbiBpcyBhbHNvIGEgRFRJTS4KLQkgKiAgMSkgaWYgdGhlcmUgaXMgb25seSBvbmUgdmFwIGxldCB0aGUgY2FiIHRyYWZmaWMgY29udGludWUuCi0JICogIDIpIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHZhcCBhbmQgd2UgYXJlIHVzaW5nIHN0YWdnZXJlZAorCSAqICAxKSBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2aWYgbGV0IHRoZSBjYWIgdHJhZmZpYyBjb250aW51ZS4KKwkgKiAgMikgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdmlmIGFuZCB3ZSBhcmUgdXNpbmcgc3RhZ2dlcmVkCiAJICogICAgIGJlYWNvbnMsIHRoZW4gZHJhaW4gdGhlIGNhYnEgYnkgZHJvcHBpbmcgYWxsIHRoZSBmcmFtZXMgaW4KLQkgKiAgICAgdGhlIGNhYnEgc28gdGhhdCB0aGUgY3VycmVudCB2YXBzIGNhYiB0cmFmZmljIGNhbiBiZSBzY2hlZHVsZWQuCisJICogICAgIHRoZSBjYWJxIHNvIHRoYXQgdGhlIGN1cnJlbnQgdmlmcyBjYWIgdHJhZmZpYyBjYW4gYmUgc2NoZWR1bGVkLgogCSAqLwogCXNwaW5fbG9ja19iaCgmY2FicS0+YXhxX2xvY2spOwogCWNhYnFfZGVwdGggPSBjYWJxLT5heHFfZGVwdGg7CiAJc3Bpbl91bmxvY2tfYmgoJmNhYnEtPmF4cV9sb2NrKTsKIAogCWlmIChza2IgJiYgY2FicV9kZXB0aCkgewotCQkvKgotCQkgKiBVbmxvY2sgdGhlIGNhYnEgbG9jayBhcyBhdGhfdHhfZHJhaW50eHEgYWNxdWlyZXMKLQkJICogdGhlIGxvY2sgYWdhaW4gd2hpY2ggaXMgYSBjb21tb24gZnVuY3Rpb24gYW5kIHRoYXQKLQkJICogYWNxdWlyZXMgdHhxIGxvY2sgaW5zaWRlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19udmFwcyA+IDEpIHsKLQkJCWF0aF90eF9kcmFpbnR4cShzYywgY2FicSwgZmFsc2UpOworCQlpZiAoc2MtPm52aWZzID4gMSkgewogCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJImZsdXNoIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQkJIkZsdXNoaW5nIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQlhdGhfZHJhaW50eHEoc2MsIGNhYnEsIGZhbHNlKTsKIAkJfQogCX0KIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCi0JLyoKLQkgKiBFbmFibGUgdGhlIENBQiBxdWV1ZSBiZWZvcmUgdGhlIGJlYWNvbiBxdWV1ZSB0bwotCSAqIGluc3VyZSBjYWIgZnJhbWVzIGFyZSB0cmlnZ2VyZWQgYnkgdGhpcyBiZWFjb24uCi0JICovCiAJd2hpbGUgKHNrYikgewotCQlhdGhfdHhfY2FicShzYywgc2tiKTsKLQkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJCWF0aF90eF9jYWJxKGh3LCBza2IpOworCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGh3LCB2aWYpOwogCX0KIAogCXJldHVybiBiZjsKQEAgLTI0NSwyOCArMjE1LDIyIEBACiAgKiBTdGFydHVwIGJlYWNvbiB0cmFuc21pc3Npb24gZm9yIGFkaG9jIG1vZGUgd2hlbiB0aGV5IGFyZSBzZW50IGVudGlyZWx5CiAgKiBieSB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIHNlbGYtbGlua2VkIGRlc2NyaXB0b3IgKyB2ZW9sIHRyaWNrLgogKi8KLXN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl2aWYgPSBzYy0+c2NfdmFwc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAiYXZwPSVwIGF2X2JjYnVmPSVwXG4iLAotCQkJYXZwLCBhdnAgIT0gTlVMTCA/IGF2cC0+YXZfYmNidWYgOiBOVUxMKTsKKwlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQorCiAJYmYgPSBhdnAtPmF2X2JjYnVmOwogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBiZi0+YmZfbXBkdTsKIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCiAJLyogTkI6IGNhbGxlciBpcyBrbm93biB0byBoYXZlIGFscmVhZHkgc3RvcHBlZCB0eCBkbWEgKi8KQEAgLTI3Niw3ICsyNDAsNyBAQAogCQlzYy0+YmVhY29uLmJlYWNvbnEsIGl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKIH0KIAotaW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGhfYmVhY29ucV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIApAQCAtMjg4LDE4ICsyNTIsMTQgQEAKIAlyZXR1cm4gYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKGFoLCBBVEg5S19UWF9RVUVVRV9CRUFDT04sICZxaSk7CiB9CiAKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCitpbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX2xlNjQgdHN0YW1wOwogCi0JdmlmID0gc2MtPnNjX3ZhcHNbaWZfaWRdOwotCUFTU0VSVCh2aWYpOwotCiAJYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCiAJLyogQWxsb2NhdGUgYSBiZWFjb24gZGVzY3JpcHRvciBpZiB3ZSBoYXZlbid0IGRvbmUgc28uICovCkBAIC0zMTAsNTEgKzI3MCw0NiBAQAogCQkJCQkJIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmF2cC0+YXZfYmNidWYtPmxpc3QpOwogCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCQkgICAgIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkgeworCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgICEoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJCWludCBzbG90OwogCQkJLyoKLQkJCSAqIEFzc2lnbiB0aGUgdmFwIHRvIGEgYmVhY29uIHhtaXQgc2xvdC4gQXMKKwkJCSAqIEFzc2lnbiB0aGUgdmlmIHRvIGEgYmVhY29uIHhtaXQgc2xvdC4gQXMKIAkJCSAqIGFib3ZlLCB0aGlzIGNhbm5vdCBmYWlsIHRvIGZpbmQgb25lLgogCQkJICovCiAJCQlhdnAtPmF2X2JzbG90ID0gMDsKIAkJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykKLQkJCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSA9PSBBVEhfSUZfSURfQU5ZKSB7CisJCQkJaWYgKHNjLT5iZWFjb24uYnNsb3Rbc2xvdF0gPT0gTlVMTCkgewogCQkJCQkvKgogCQkJCQkgKiBYWFggaGFjaywgc3BhY2Ugb3V0IHNsb3RzIHRvIGJldHRlcgogCQkJCQkgKiBkZWFsIHdpdGggbWlzc2VzCiAJCQkJCSAqLwogCQkJCQlpZiAoc2xvdCsxIDwgQVRIX0JDQlVGICYmCi0JCQkJCSAgICBzYy0+YmVhY29uLmJzbG90W3Nsb3QrMV0gPT0KLQkJCQkJCUFUSF9JRl9JRF9BTlkpIHsKKwkJCQkJICAgIHNjLT5iZWFjb24uYnNsb3Rbc2xvdCsxXSA9PSBOVUxMKSB7CiAJCQkJCQlhdnAtPmF2X2JzbG90ID0gc2xvdCsxOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQkJYXZwLT5hdl9ic2xvdCA9IHNsb3Q7CiAJCQkJCS8qIE5COiBrZWVwIGxvb2tpbmcgZm9yIGEgZG91YmxlIHNsb3QgKi8KIAkJCQl9Ci0JCQlCVUdfT04oc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSAhPSBBVEhfSUZfSURfQU5ZKTsKLQkJCXNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gPSBpZl9pZDsKLQkJCXNjLT5zY19uYmNudmFwcysrOworCQkJQlVHX09OKHNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gIT0gTlVMTCk7CisJCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gdmlmOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2F2cC0+YXZfYnNsb3RdID0gYXBoeTsKKwkJCXNjLT5uYmNudmlmcysrOwogCQl9CiAJfQogCi0JLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lICwgaWYgaXQgYWxyZWFkeSBleGlzdHMuICovCisJLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJaWYgKGJmLT5iZl9tcGR1ICE9IE5VTEwpIHsKIAkJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJYmYtPmJmX21wZHUgPSBOVUxMOwogCX0KIAotCS8qCi0JICogTkI6IHRoZSBiZWFjb24gZGF0YSBidWZmZXIgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4KLQkgKiBGSVhNRTogRmlsbCBhdnAtPmF2X2J0eGN0bC50eHBvd2VyIGFuZAotCSAqIGF2cC0+YXZfYnR4Y3RsLnNob3J0UHJlYW1ibGUKLQkgKi8KKwkvKiBOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqLwogCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHNjLT5odywgdmlmKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJjYW5ub3QgZ2V0IHNrYlxuIik7CkBAIC0zNjMsNzUgKzMxOCw2NSBAQAogCiAJdHN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CiAJc2MtPmJlYWNvbi5iY190c3RhbXAgPSBsZTY0X3RvX2NwdSh0c3RhbXApOwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgYSBUU0YgYWRqdXN0bWVudCBmYWN0b3IgcmVxdWlyZWQgZm9yCi0JICogc3RhZ2dlcmVkIGJlYWNvbnMuICBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBmb3JtYXQKLQkgKiBvZiB0aGUgYmVhY29uIGZyYW1lIGxlYXZlcyB0aGUgdHN0YW1wIGZpZWxkIGltbWVkaWF0ZWx5Ci0JICogZm9sbG93aW5nIHRoZSBoZWFkZXIuCi0JICovCisJLyogQ2FsY3VsYXRlIGEgVFNGIGFkanVzdG1lbnQgZmFjdG9yIHJlcXVpcmVkIGZvciBzdGFnZ2VyZWQgYmVhY29ucy4gKi8KIAlpZiAoYXZwLT5hdl9ic2xvdCA+IDApIHsKIAkJdTY0IHRzZmFkanVzdDsKLQkJX19sZTY0IHZhbDsKIAkJaW50IGludHZhbDsKIAogCQlpbnR2YWwgPSBzYy0+aHctPmNvbmYuYmVhY29uX2ludCA/CiAJCQlzYy0+aHctPmNvbmYuYmVhY29uX2ludCA6IEFUSF9ERUZBVUxUX0JJTlRWQUw7CiAKIAkJLyoKLQkJICogVGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBpbiBUVSdzOyB0aGUgVFNGIGluIHVzZWNzLgotCQkgKiBXZSBmaWd1cmUgb3V0IGhvdyBtYW55IFRVJ3MgdG8gYWRkIHRvIGFsaWduIHRoZQotCQkgKiB0aW1lc3RhbXAgdGhlbiBjb252ZXJ0IHRvIFRTRiB1bml0cyBhbmQgaGFuZGxlCi0JCSAqIGJ5dGUgc3dhcHBpbmcgYmVmb3JlIHdyaXRpbmcgaXQgaW4gdGhlIGZyYW1lLgotCQkgKiBUaGUgaGFyZHdhcmUgd2lsbCB0aGVuIGFkZCB0aGlzIGVhY2ggdGltZSBhIGJlYWNvbgotCQkgKiBmcmFtZSBpcyBzZW50LiAgTm90ZSB0aGF0IHdlIGFsaWduIHZhcCdzIDEuLk4KLQkJICogYW5kIGxlYXZlIHZhcCAwIHVudG91Y2hlZC4gIFRoaXMgbWVhbnMgdmFwIDAKLQkJICogaGFzIGEgdGltZXN0YW1wIGluIG9uZSBiZWFjb24gaW50ZXJ2YWwgd2hpbGUgdGhlCi0JCSAqIG90aGVycyBnZXQgYSB0aW1lc3RhbXAgYWxpZ25lZCB0byB0aGUgbmV4dCBpbnRlcnZhbC4KKwkJICogQ2FsY3VsYXRlIHRoZSBUU0Ygb2Zmc2V0IGZvciB0aGlzIGJlYWNvbiBzbG90LCBpLmUuLCB0aGUKKwkJICogbnVtYmVyIG9mIHVzZWNzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgdGltZXN0YW1wIGZpZWxkCisJCSAqIGluIEJlYWNvbiBhbmQgUHJvYmUgUmVzcG9uc2UgZnJhbWVzLiBCZWFjb24gc2xvdCAwIGlzCisJCSAqIHByb2Nlc3NlZCBhdCB0aGUgY29ycmVjdCBvZmZzZXQsIHNvIGl0IGRvZXMgbm90IHJlcXVpcmUgVFNGCisJCSAqIGFkanVzdG1lbnQuIE90aGVyIHNsb3RzIGFyZSBhZGp1c3RlZCB0byBnZXQgdGhlIHRpbWVzdGFtcAorCQkgKiBjbG9zZSB0byB0aGUgVEJUVCBmb3IgdGhlIEJTUy4KIAkJICovCi0JCXRzZmFkanVzdCA9IChpbnR2YWwgKiAoQVRIX0JDQlVGIC0gYXZwLT5hdl9ic2xvdCkpIC8gQVRIX0JDQlVGOwotCQl2YWwgPSBjcHVfdG9fbGU2NCh0c2ZhZGp1c3QgPDwgMTApOyAgICAgLyogVFUtPlRTRiAqLworCQl0c2ZhZGp1c3QgPSBpbnR2YWwgKiBhdnAtPmF2X2JzbG90IC8gQVRIX0JDQlVGOworCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOwogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAogCQkJInN0YWdnZXIgYmVhY29ucywgYnNsb3QgJWQgaW50dmFsICV1IHRzZmFkanVzdCAlbGx1XG4iLAogCQkJYXZwLT5hdl9ic2xvdCwgaW50dmFsLCAodW5zaWduZWQgbG9uZyBsb25nKXRzZmFkanVzdCk7CiAKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCQltZW1jcHkoJmhkclsxXSwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCX0KKwkJKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXAgPQorCQkJYXZwLT50c2ZfYWRqdXN0OworCX0gZWxzZQorCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NCgwKTsKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwogCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCSAgICAgICBza2ItPmxlbiwKLQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgeworCQlkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCBza2ItPmRhdGEsCisJCQkgICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIGJlYWNvbiBhbGxvY1xuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uIGFsbG9jXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRoX2JlYWNvbl9yZXR1cm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmFwICphdnApCit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKQogewogCWlmIChhdnAtPmF2X2JjYnVmICE9IE5VTEwpIHsKIAkJc3RydWN0IGF0aF9idWYgKmJmOwogCiAJCWlmIChhdnAtPmF2X2JzbG90ICE9IC0xKSB7Ci0JCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gQVRIX0lGX0lEX0FOWTsKLQkJCXNjLT5zY19uYmNudmFwcy0tOworCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBOVUxMOworCQkJc2MtPm5iY252aWZzLS07CiAJCX0KIAogCQliZiA9IGF2cC0+YXZfYmNidWY7CiAJCWlmIChiZi0+YmZfbXBkdSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKLQkJCQkJIHNrYi0+bGVuLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0LAorCQkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJfQpAQCAtNDQxLDkyICszODYsNDUgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBOVUxMOwotCWludCBzbG90LCBpZl9pZDsKLQl1MzIgYmZhZGRyOwotCXUzMiByeF9jbGVhciA9IDAsIHJ4X2ZyYW1lID0gMCwgdHhfZnJhbWUgPSAwOwotCXUzMiBzaG93X2N5Y2xlcyA9IDA7Ci0JdTMyIGJjID0gMDsgLyogYmVhY29uIGNvdW50ICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCWludCBzbG90OworCXUzMiBiZmFkZHIsIGJjID0gMCwgdHNmdHU7CiAJdTY0IHRzZjsKLQl1MzIgdHNmdHU7CiAJdTE2IGludHZhbDsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQlzaG93X2N5Y2xlcyA9IGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KGFoLAotCQkJCQkgICAgJnJ4X2NsZWFyLCAmcnhfZnJhbWUsICZ0eF9mcmFtZSk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYmVhY29uIGhhcyBnb25lIG91dC4gIElmCiAJICogbm90IGRvbid0IHRyeSB0byBwb3N0IGFub3RoZXIsIHNraXAgdGhpcyBwZXJpb2QKIAkgKiBhbmQgd2FpdCBmb3IgdGhlIG5leHQuICBNaXNzZWQgYmVhY29ucyBpbmRpY2F0ZQogCSAqIGEgcHJvYmxlbSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIElmIHdlIG1pc3MgdG9vCiAJICogbWFueSBjb25zZWN1dGl2ZSBiZWFjb25zIHJlc2V0IHRoZSBkZXZpY2UuCi0JICoKLQkgKiBGSVhNRTogQ2xlYW4gdXAgdGhpcyBtZXNzICEhCiAJICovCiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKLQkJLyogWFhYOiBkb3RoIG5lZWRzIHRoZSBjaGFuY2hhbmdlIElFIGNvdW50ZG93biBkZWNyZW1lbnRlZC4KLQkJICogICAgICBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgbWFjODAyMTEgY2FsbCB0byBpbmRpY2F0ZQotCQkgKiAgICAgIGEgYmVhY29uIG1pc3Mgc28gYXBwcm9wcmlhdGUgYWN0aW9uIGNvdWxkIGJlIHRha2VuCi0JCSAqICAgICAgKGluIHRoYXQgbGF5ZXIpLgotCQkgKi8KKwogCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKLQkJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJCWlmIChzaG93X2N5Y2xlcykgewotCQkJCQkvKgotCQkJCQkgKiBEaXNwbGF5IGN5Y2xlIGNvdW50ZXIgc3RhdHMgZnJvbSBIVwotCQkJCQkgKiB0byBhaWRlIGluIGRlYnVnIG9mIHN0aWNraW5lc3MuCi0JCQkJCSAqLwotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJidXN5IHRpbWVzOiByeF9jbGVhcj0lZCwgIgotCQkJCQkJInJ4X2ZyYW1lPSVkLCB0eF9mcmFtZT0lZFxuIiwKLQkJCQkJCXJ4X2NsZWFyLCByeF9mcmFtZSwKLQkJCQkJCXR4X2ZyYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJ1bmFibGUgdG8gb2J0YWluICIKLQkJCQkJCSJidXN5IHRpbWVzXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJfQorCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQl9IGVsc2UgaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPj0gQlNUVUNLX1RIUkVTSCkgewotCQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX05PX1JFU0VUKSB7Ci0JCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPT0gQlNUVUNLX1RIUkVTSCkgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSAiCi0JCQkJCQkic3R1Y2tcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7Ci0JCQkJYXRoX2JzdHVja19wcm9jZXNzKHNjKTsKLQkJCX0KKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKIAkJfQorCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJfQorCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNTQyLDIxICs0NDAsMzAgQEAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CiAJdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKIAlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCWlmX2lkID0gc2MtPmJlYWNvbi5ic2xvdFsoc2xvdCArIDEpICUgQVRIX0JDQlVGXTsKKwkvKgorCSAqIFJldmVyc2UgdGhlIHNsb3Qgb3JkZXIgdG8gZ2V0IHNsb3QgMCBvbiB0aGUgVEJUVCBvZmZzZXQgdGhhdCBkb2VzCisJICogbm90IHJlcXVpcmUgVFNGIGFkanVzdG1lbnQgYW5kIG90aGVyIHNsb3RzIGFkZGluZworCSAqIHNsb3QvQVRIX0JDQlVGICogYmVhY29uX2ludCB0byB0aW1lc3RhbXAuIEZvciBleGFtcGxlLCB3aXRoCisJICogQVRIX0JDQlVGID0gNCwgd2UgcHJvY2VzcyBiZWFjb24gc2xvdHMgYXMgZm9sbG93czogMyAyIDEgMCAzIDIgMSAuLgorCSAqIGFuZCBzbG90IDAgaXMgYXQgY29ycmVjdCBvZmZzZXQgdG8gVEJUVC4KKwkgKi8KKwlzbG90ID0gQVRIX0JDQlVGIC0gc2xvdCAtIDE7CisJdmlmID0gc2MtPmJlYWNvbi5ic2xvdFtzbG90XTsKKwlhcGh5ID0gc2MtPmJlYWNvbi5ic2xvdF9hcGh5W3Nsb3RdOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIGlmX2lkICVkXG4iLAotCQlzbG90LCAodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCWludHZhbCwgaWZfaWQpOworCQkic2xvdCAlZCBbdHNmICVsbHUgdHNmdHUgJXUgaW50dmFsICV1XSB2aWYgJXBcbiIsCisJCXNsb3QsIHRzZiwgdHNmdHUsIGludHZhbCwgdmlmKTsKIAogCWJmYWRkciA9IDA7Ci0JaWYgKGlmX2lkICE9IEFUSF9JRl9JRF9BTlkpIHsKLQkJYmYgPSBhdGhfYmVhY29uX2dlbmVyYXRlKHNjLCBpZl9pZCk7CisJaWYgKHZpZikgeworCQliZiA9IGF0aF9iZWFjb25fZ2VuZXJhdGUoYXBoeS0+aHcsIHZpZik7CiAJCWlmIChiZiAhPSBOVUxMKSB7CiAJCQliZmFkZHIgPSBiZi0+YmZfZGFkZHI7CiAJCQliYyA9IDE7CiAJCX0KIAl9CisKIAkvKgogCSAqIEhhbmRsZSBzbG90IHRpbWUgY2hhbmdlIHdoZW4gYSBub24tRVJQIHN0YXRpb24gam9pbnMvbGVhdmVzCiAJICogYW4gMTFnIG5ldHdvcmsuICBUaGUgODAyLjExIGxheWVyIG5vdGlmaWVzIHVzIHZpYSBjYWxsYmFjaywKQEAgLTU3Myw3ICs0ODAsNiBAQAogCSAqICAgICBpbnRlcnZhbCBoYXMgcGFzc2VkLiAgV2hlbiBidXJzdGluZyBzbG90IGlzIGFsd2F5cyBsZWZ0CiAJICogICAgIHNldCB0byBBVEhfQkNCVUYgc28gdGhpcyBjaGVjayBpcyBhIG5vb3AuCiAJICovCi0JLyogWFhYIGxvY2tpbmcgKi8KIAlpZiAoc2MtPmJlYWNvbi51cGRhdGVzbG90ID09IFVQREFURSkgewogCQlzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPSBDT01NSVQ7IC8qIGNvbW1pdCBuZXh0IGJlYWNvbiAqLwogCQlzYy0+YmVhY29uLnNsb3R1cGRhdGUgPSBzbG90OwpAQCAtNTkwLDUyICs0OTYsMjI0IEBACiAJCWlmICghYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJCSJiZWFjb24gcXVldWUgJXUgZGlkIG5vdCBzdG9wP1xuIiwgc2MtPmJlYWNvbi5iZWFjb25xKTsKLQkJCS8qIE5COiB0aGUgSEFMIHN0aWxsIHN0b3BzIERNQSwgc28gcHJvY2VlZCAqLwogCQl9CiAKIAkJLyogTkI6IGNhYnEgdHJhZmZpYyBzaG91bGQgYWxyZWFkeSBiZSBxdWV1ZWQgYW5kIHByaW1lZCAqLwogCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgc2MtPmJlYWNvbi5iZWFjb25xLCBiZmFkZHIpOwogCQlhdGg5a19od190eHN0YXJ0KGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi0JCXNjLT5iZWFjb24uYXN0X2JlX3htaXQgKz0gYmM7ICAgICAvKiBYWFggcGVyLXZhcD8gKi8KKwkJc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCArPSBiYzsgICAgIC8qIFhYWCBwZXItdmlmPyAqLwogCX0KIH0KIAogLyoKLSAqIENvbmZpZ3VyZSB0aGUgYmVhY29uIGFuZCBzbGVlcCB0aW1lcnMuCi0gKgotICogV2hlbiBvcGVyYXRpbmcgYXMgYW4gQVAgdGhpcyByZXNldHMgdGhlIFRTRiBhbmQgc2V0cwotICogdXAgdGhlIGhhcmR3YXJlIHRvIG5vdGlmeSB1cyB3aGVuIHdlIG5lZWQgdG8gaXNzdWUgYmVhY29ucy4KLSAqCi0gKiBXaGVuIG9wZXJhdGluZyBpbiBzdGF0aW9uIG1vZGUgdGhpcyBzZXRzIHVwIHRoZSBiZWFjb24KLSAqIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZWNlaXZlZAotICogYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCi0gKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUKLSAqIHdpbGwgd2FrZXVwIGluIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcwotICogdGhlIGJlYWNvbiBtaXNzIGhhbmRsaW5nIHNvIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUwotICogaW50ZXJydXB0IHdoZW4gd2Ugc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUAotICogd2UndmUgYXNzb2NpYXRlZCB3aXRoLgorICogRm9yIG11bHRpLWJzcyBhcCBzdXBwb3J0IGJlYWNvbnMgYXJlIGVpdGhlciBzdGFnZ2VyZWQgZXZlbmx5IG92ZXIgTiBzbG90cyBvcgorICogYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lciBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2gKKyAqIHNsb3QuIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCiAgKi8KLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJIHN0cnVjdCBhdGhfdmlmICphdnApCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIGNvbmY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKIAl1MzIgbmV4dHRidHQsIGludHZhbDsKIAotCWlmIChpZl9pZCAhPSBBVEhfSUZfSURfQU5ZKSB7Ci0JCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQkJQVNTRVJUKHZpZik7Ci0JCWF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKLQkJb3Btb2RlID0gYXZwLT5hdl9vcG1vZGU7CisJLyogQ29uZmlndXJlIHRoZSB0aW1lcnMgb25seSB3aGVuIHRoZSBUU0YgaGFzIHRvIGJlIHJlc2V0ICovCisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UU0ZfUkVTRVQpKQorCQlyZXR1cm47CisKKwkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLworCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCisJbmV4dHRidHQgPSBpbnR2YWw7CisJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9SRVNFVF9UU0Y7CisKKwkvKgorCSAqIEluIEFQIG1vZGUgd2UgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGFuZCBTV0JBIGludGVycnVwdHMgdG8KKwkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuCisJICovCisJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CisJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CisKKwkvKiBTZXQgdGhlIGNvbXB1dGVkIEFQIGJlYWNvbiB0aW1lcnMgKi8KKworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgMCk7CisJYXRoOWtfaHdfYmVhY29uaW5pdChzYy0+c2NfYWgsIG5leHR0YnR0LCBpbnR2YWwpOworCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKKworCS8qIENsZWFyIHRoZSByZXNldCBUU0YgZmxhZywgc28gdGhhdCBzdWJzZXF1ZW50IGJlYWNvbiB1cGRhdGlvbgorCSAgIHdpbGwgbm90IHJlc2V0IHRoZSBIVyBUU0YuICovCisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1RTRl9SRVNFVDsKK30KKworLyoKKyAqIFRoaXMgc2V0cyB1cCB0aGUgYmVhY29uIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdAorICogcmVjZWl2ZWQgYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCisgKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUgd2lsbCB3YWtldXAgaW4KKyAqIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcyB0aGUgYmVhY29uIG1pc3MgaGFuZGxpbmcgc28KKyAqIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZSBzdG9wIHNlZWluZyBiZWFjb25zIGZyb20gdGhlIEFQCisgKiB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGguCisgKi8KK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX3N0YShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZiwKKwkJCQkgIHN0cnVjdCBhdGhfdmlmICphdnApCit7CisJc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSBiczsKKwlpbnQgZHRpbXBlcmlvZCwgZHRpbWNvdW50LCBzbGVlcGR1cmF0aW9uOworCWludCBjZnBwZXJpb2QsIGNmcGNvdW50OworCXUzMiBuZXh0dGJ0dCA9IDAsIGludHZhbCwgdHNmdHU7CisJdTY0IHRzZjsKKworCW1lbXNldCgmYnMsIDAsIHNpemVvZihicykpOworCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisKKwkvKgorCSAqIFNldHVwIGR0aW0gYW5kIGNmcCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bworCSAqIGxhc3QgYmVhY29uIHdlIHJlY2VpdmVkICh3aGljaCBtYXkgYmUgbm9uZSkuCisJICovCisJZHRpbXBlcmlvZCA9IGNvbmYtPmR0aW1fcGVyaW9kOworCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KKwkJZHRpbXBlcmlvZCA9IDE7CisJZHRpbWNvdW50ID0gY29uZi0+ZHRpbV9jb3VudDsKKwlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KKwkJZHRpbWNvdW50ID0gMDsKKwljZnBwZXJpb2QgPSAxOwkJCS8qIE5COiBubyBQQ0Ygc3VwcG9ydCB5ZXQgKi8KKwljZnBjb3VudCA9IDA7CisKKwlzbGVlcGR1cmF0aW9uID0gY29uZi0+bGlzdGVuX2ludGVydmFsICogaW50dmFsOworCWlmIChzbGVlcGR1cmF0aW9uIDw9IDApCisJCXNsZWVwZHVyYXRpb24gPSBpbnR2YWw7CisKKwkvKgorCSAqIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50CisJICogVFNGIGFuZCBjYWxjdWxhdGUgZHRpbStjZnAgc3RhdGUgZm9yIHRoZSByZXN1bHQuCisJICovCisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSh0c2Y+PjMyLCB0c2YpICsgRlVER0U7CisJZG8geworCQluZXh0dGJ0dCArPSBpbnR2YWw7CisJCWlmICgtLWR0aW1jb3VudCA8IDApIHsKKwkJCWR0aW1jb3VudCA9IGR0aW1wZXJpb2QgLSAxOworCQkJaWYgKC0tY2ZwY291bnQgPCAwKQorCQkJCWNmcGNvdW50ID0gY2ZwcGVyaW9kIC0gMTsKKwkJfQorCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOworCisJYnMuYnNfaW50dmFsID0gaW50dmFsOworCWJzLmJzX25leHR0YnR0ID0gbmV4dHRidHQ7CisJYnMuYnNfZHRpbXBlcmlvZCA9IGR0aW1wZXJpb2QqaW50dmFsOworCWJzLmJzX25leHRkdGltID0gYnMuYnNfbmV4dHRidHQgKyBkdGltY291bnQqaW50dmFsOworCWJzLmJzX2NmcHBlcmlvZCA9IGNmcHBlcmlvZCpicy5ic19kdGltcGVyaW9kOworCWJzLmJzX2NmcG5leHQgPSBicy5ic19uZXh0ZHRpbSArIGNmcGNvdW50KmJzLmJzX2R0aW1wZXJpb2Q7CisJYnMuYnNfY2ZwbWF4ZHVyYXRpb24gPSAwOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRvIG1pc3MqIGJlZm9yZSB0YWtpbmcKKwkgKiBhIEJNSVNTIGludGVycnVwdC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkIGluIFRVIHNvIHdlIG9ubHkKKwkgKiBuZWVkIGNhbGN1bGF0ZSBiYXNlZAlvbiB0aGUgYmVhY29uIGludGVydmFsLiAgTm90ZSB0aGF0IHdlIGNsYW1wIHRoZQorCSAqIHJlc3VsdCB0byBhdCBtb3N0IDE1IGJlYWNvbnMuCisJICovCisJaWYgKHNsZWVwZHVyYXRpb24gPiBpbnR2YWwpIHsKKwkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKgorCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgLyAyOwogCX0gZWxzZSB7Ci0JCW9wbW9kZSA9IHNjLT5zY19haC0+YWhfb3Btb2RlOworCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IERJVl9ST1VORF9VUChjb25mLT5ibWlzc190aW1lb3V0LCBpbnR2YWwpOworCQlpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPiAxNSkKKwkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTU7CisJCWVsc2UgaWYgKGJzLmJzX2JtaXNzdGhyZXNob2xkIDw9IDApCisJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE7CiAJfQogCi0JbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yoc3RydWN0IGF0aF9iZWFjb25fY29uZmlnKSk7CisJLyoKKwkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uIFRoZSBjb25maWd1cmF0aW9uIGlzIGdpdmVuIGluIG1zLgorCSAqIFdlIGVuc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24gcGVyaW9kIGlzIHVzZWQuIEFsc28sIGlmIHRoZSBzbGVlcAorCSAqIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB0aGUgRFRJTSBwZXJpb2QgdGhlbiBpdCBtYWtlcyBzZW5zZXMKKwkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KKwkgKgorCSAqIFhYWCBmaXhlZCBhdCAxMDBtcworCSAqLwogCisJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IHJvdW5kdXAoSUVFRTgwMjExX01TX1RPX1RVKDEwMCksIHNsZWVwZHVyYXRpb24pOworCWlmIChicy5ic19zbGVlcGR1cmF0aW9uID4gYnMuYnNfZHRpbXBlcmlvZCkKKwkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7CisKKwkvKiBUU0Ygb3V0IG9mIHJhbmdlIHRocmVzaG9sZCBmaXhlZCBhdCAxIHNlY29uZCAqLworCWJzLmJzX3RzZm9vcl90aHJlc2hvbGQgPSBBVEg5S19UU0ZPT1JfVEhSRVNIT0xEOworCisJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJ0c2Y6ICVsbHUgdHNmdHU6ICV1XG4iLCB0c2YsIHRzZnR1KTsKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJImJtaXNzOiAldSBzbGVlcDogJXUgY2ZwLXBlcmlvZDogJXUgbWF4ZHVyOiAldSBuZXh0OiAldVxuIiwKKwkJYnMuYnNfYm1pc3N0aHJlc2hvbGQsIGJzLmJzX3NsZWVwZHVyYXRpb24sCisJCWJzLmJzX2NmcHBlcmlvZCwgYnMuYnNfY2ZwbWF4ZHVyYXRpb24sIGJzLmJzX2NmcG5leHQpOworCisJLyogU2V0IHRoZSBjb21wdXRlZCBTVEEgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc2MtPnNjX2FoLCAmYnMpOworCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfQk1JU1M7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworfQorCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX2NvbmZpZ19hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAorCQkJCSAgICBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXU2NCB0c2Y7CisJdTMyIHRzZnR1LCBpbnR2YWwsIG5leHR0YnR0OworCisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKworCS8qIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IFRTRiAqLworCisJbmV4dHRidHQgPSBUU0ZfVE9fVFUoc2MtPmJlYWNvbi5iY190c3RhbXAgPj4gMzIsIHNjLT5iZWFjb24uYmNfdHN0YW1wKTsKKwlpZiAobmV4dHRidHQgPT0gMCkKKyAgICAgICAgICAgICAgICBuZXh0dGJ0dCA9IGludHZhbDsKKyAgICAgICAgZWxzZSBpZiAoaW50dmFsKQorICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gcm91bmR1cChuZXh0dGJ0dCwgaW50dmFsKTsKKworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KHNjLT5zY19haCk7CisJdHNmdHUgPSBUU0ZfVE9fVFUoKHUzMikodHNmPj4zMiksICh1MzIpdHNmKSArIEZVREdFOworCWRvIHsKKwkJbmV4dHRidHQgKz0gaW50dmFsOworCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOworCisJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCSJJQlNTIG5leHR0YnR0ICV1IGludHZhbCAldSAoJXUpXG4iLAorCQluZXh0dGJ0dCwgaW50dmFsLCBjb25mLT5iZWFjb25faW50ZXJ2YWwpOworCisJLyoKKwkgKiBJbiBJQlNTIG1vZGUgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGJ1dCBvbmx5IGVuYWJsZSBTV0JBIGludGVycnVwdHMKKwkgKiBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5IHByZXBhcmUgYmVhY29uIGZyYW1lcy4gIE90aGVyd2lzZSB3ZSB1c2UgYQorCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUgZGVhbCB3aXRoIHRoaW5ncy4KKwkgKi8KKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKKwkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCisJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKKworCS8qIFNldCB0aGUgY29tcHV0ZWQgQURIT0MgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19iZWFjb25pbml0KHNjLT5zY19haCwgbmV4dHRidHQsIGludHZhbCk7CisJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpCisJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIHZpZik7Cit9CisKK3ZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIGNvbmY7CisKKwkvKiBTZXR1cCB0aGUgYmVhY29uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yoc3RydWN0IGF0aF9iZWFjb25fY29uZmlnKSk7CiAJY29uZi5iZWFjb25faW50ZXJ2YWwgPSBzYy0+aHctPmNvbmYuYmVhY29uX2ludCA/CiAJCXNjLT5ody0+Y29uZi5iZWFjb25faW50IDogQVRIX0RFRkFVTFRfQklOVFZBTDsKIAljb25mLmxpc3Rlbl9pbnRlcnZhbCA9IDE7CkBAIC02NDMsMjEyICs3MjEsMjYgQEAKIAljb25mLmR0aW1fY291bnQgPSAxOwogCWNvbmYuYm1pc3NfdGltZW91dCA9IEFUSF9ERUZBVUxUX0JNSVNTX0xJTUlUICogY29uZi5iZWFjb25faW50ZXJ2YWw7CiAKLQkvKiBleHRyYWN0IHRzdGFtcCBmcm9tIGxhc3QgYmVhY29uIGFuZCBjb252ZXJ0IHRvIFRVICovCi0JbmV4dHRidHQgPSBUU0ZfVE9fVFUoc2MtPmJlYWNvbi5iY190c3RhbXAgPj4gMzIsIHNjLT5iZWFjb24uYmNfdHN0YW1wKTsKKwlpZiAodmlmKSB7CisJCXN0cnVjdCBhdGhfdmlmICphdnAgPSAoc3RydWN0IGF0aF92aWYgKil2aWYtPmRydl9wcml2OwogCi0JLyogWFhYIGNvbmRpdGlvbmFsaXplIG11bHRpLWJzcyBzdXBwb3J0PyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkvKgotCQkgKiBGb3IgbXVsdGktYnNzIGFwIHN1cHBvcnQgYmVhY29ucyBhcmUgZWl0aGVyIHN0YWdnZXJlZAotCQkgKiBldmVubHkgb3ZlciBOIHNsb3RzIG9yIGJ1cnN0IHRvZ2V0aGVyLiAgRm9yIHRoZSBmb3JtZXIKLQkJICogYXJyYW5nZSBmb3IgdGhlIFNXQkEgdG8gYmUgZGVsaXZlcmVkIGZvciBlYWNoIHNsb3QuCi0JCSAqIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCi0JCSAqLwotCQkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLwotCQlpbnR2YWwgPSBjb25mLmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7Ci0JCWludHZhbCAvPSBBVEhfQkNCVUY7ICAgIC8qIGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLwotCX0gZWxzZSB7Ci0JCWludHZhbCA9IGNvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKLQl9Ci0KLQlpZiAobmV4dHRidHQgPT0gMCkJLyogZS5nLiBmb3IgYXAgbW9kZSAqLwotCQluZXh0dGJ0dCA9IGludHZhbDsKLQllbHNlIGlmIChpbnR2YWwpCS8qIE5COiBjYW4gYmUgMCBmb3IgbW9uaXRvciBtb2RlICovCi0JCW5leHR0YnR0ID0gcm91bmR1cChuZXh0dGJ0dCwgaW50dmFsKTsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCW5leHR0YnR0LCBpbnR2YWwsIGNvbmYuYmVhY29uX2ludGVydmFsKTsKLQotCS8qIENoZWNrIGZvciBOTDgwMjExX0lGVFlQRV9BUCBhbmQgc2Nfbm9zdGFiZWFjb25zIGZvciBXRFMgY2xpZW50ICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSBiczsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlpbnQgZHRpbXBlcmlvZCwgZHRpbWNvdW50LCBzbGVlcGR1cmF0aW9uOwotCQlpbnQgY2ZwcGVyaW9kLCBjZnBjb3VudDsKLQotCQkvKgotCQkgKiBTZXR1cCBkdGltIGFuZCBjZnAgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8KLQkJICogbGFzdCBiZWFjb24gd2UgcmVjZWl2ZWQgKHdoaWNoIG1heSBiZSBub25lKS4KLQkJICovCi0JCWR0aW1wZXJpb2QgPSBjb25mLmR0aW1fcGVyaW9kOwotCQlpZiAoZHRpbXBlcmlvZCA8PSAwKQkJLyogTkI6IDAgaWYgbm90IGtub3duICovCi0JCQlkdGltcGVyaW9kID0gMTsKLQkJZHRpbWNvdW50ID0gY29uZi5kdGltX2NvdW50OwotCQlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KLQkJCWR0aW1jb3VudCA9IDA7Ci0JCWNmcHBlcmlvZCA9IDE7CQkJLyogTkI6IG5vIFBDRiBzdXBwb3J0IHlldCAqLwotCQljZnBjb3VudCA9IDA7Ci0KLQkJc2xlZXBkdXJhdGlvbiA9IGNvbmYubGlzdGVuX2ludGVydmFsICogaW50dmFsOwotCQlpZiAoc2xlZXBkdXJhdGlvbiA8PSAwKQotCQkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKLQotI2RlZmluZSBGVURHRSAyCi0JCS8qCi0JCSAqIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50Ci0JCSAqIFRTRiBhbmQgY2FsY3VsYXRlIGR0aW0rY2ZwIHN0YXRlIGZvciB0aGUgcmVzdWx0LgotCQkgKi8KLQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQl0c2Z0dSA9IFRTRl9UT19UVSh0c2Y+PjMyLCB0c2YpICsgRlVER0U7Ci0JCWRvIHsKLQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCWlmICgtLWR0aW1jb3VudCA8IDApIHsKLQkJCQlkdGltY291bnQgPSBkdGltcGVyaW9kIC0gMTsKLQkJCQlpZiAoLS1jZnBjb3VudCA8IDApCi0JCQkJCWNmcGNvdW50ID0gY2ZwcGVyaW9kIC0gMTsKLQkJCX0KLQkJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7Ci0jdW5kZWYgRlVER0UKLQkJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7Ci0JCWJzLmJzX2ludHZhbCA9IGludHZhbDsKLQkJYnMuYnNfbmV4dHRidHQgPSBuZXh0dGJ0dDsKLQkJYnMuYnNfZHRpbXBlcmlvZCA9IGR0aW1wZXJpb2QqaW50dmFsOwotCQlicy5ic19uZXh0ZHRpbSA9IGJzLmJzX25leHR0YnR0ICsgZHRpbWNvdW50KmludHZhbDsKLQkJYnMuYnNfY2ZwcGVyaW9kID0gY2ZwcGVyaW9kKmJzLmJzX2R0aW1wZXJpb2Q7Ci0JCWJzLmJzX2NmcG5leHQgPSBicy5ic19uZXh0ZHRpbSArIGNmcGNvdW50KmJzLmJzX2R0aW1wZXJpb2Q7Ci0JCWJzLmJzX2NmcG1heGR1cmF0aW9uID0gMDsKLQotCQkvKgotCQkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRvIG1pc3MKLQkJICogYmVmb3JlIHRha2luZyBhIEJNSVNTIGludGVycnVwdC4gIFRoZSBjb25maWd1cmF0aW9uCi0JCSAqIGlzIHNwZWNpZmllZCBpbiBUVSBzbyB3ZSBvbmx5IG5lZWQgY2FsY3VsYXRlIGJhc2VkCi0JCSAqIG9uIHRoZSBiZWFjb24gaW50ZXJ2YWwuICBOb3RlIHRoYXQgd2UgY2xhbXAgdGhlCi0JCSAqIHJlc3VsdCB0byBhdCBtb3N0IDE1IGJlYWNvbnMuCi0JCSAqLwotCQlpZiAoc2xlZXBkdXJhdGlvbiA+IGludHZhbCkgewotCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSBjb25mLmxpc3Rlbl9pbnRlcnZhbCAqCi0JCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgLyAyOwotCQl9IGVsc2UgewotCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPQotCQkJCURJVl9ST1VORF9VUChjb25mLmJtaXNzX3RpbWVvdXQsIGludHZhbCk7Ci0JCQlpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPiAxNSkKLQkJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE1OwotCQkJZWxzZSBpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPD0gMCkKLQkJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE7CisJCXN3aXRjaChhdnAtPmF2X29wbW9kZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJYXRoX2JlYWNvbl9jb25maWdfYXAoc2MsICZjb25mLCBhdnApOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHNjLCAmY29uZiwgYXZwLCB2aWYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAorCQkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uICBUaGUgY29uZmlndXJhdGlvbiBpcwotCQkgKiBnaXZlbiBpbiBtcy4gIFdlIGluc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24KLQkJICogcGVyaW9kIGlzIHVzZWQuICBBbHNvLCBpZiB0aGUgc2xlZXAgZHVyYXRpb24gaXMKLQkJICogZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcwotCQkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KLQkJICoKLQkJICogWFhYIGZpeGVkIGF0IDEwMG1zCi0JCSAqLwotCi0JCWJzLmJzX3NsZWVwZHVyYXRpb24gPSByb3VuZHVwKElFRUU4MDIxMV9NU19UT19UVSgxMDApLAotCQkJCQkgICAgICBzbGVlcGR1cmF0aW9uKTsKLQkJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkidHNmICVsbHUgIgotCQkJInRzZjp0dSAldSAiCi0JCQkiaW50dmFsICV1ICIKLQkJCSJuZXh0dGJ0dCAldSAiCi0JCQkiZHRpbSAldSAiCi0JCQkibmV4dGR0aW0gJXUgIgotCQkJImJtaXNzICV1ICIKLQkJCSJzbGVlcCAldSAiCi0JCQkiY2ZwOnBlcmlvZCAldSAiCi0JCQkibWF4ZHVyICV1ICIKLQkJCSJuZXh0ICV1ICIKLQkJCSJ0aW1vZmZzZXQgJXVcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCQlicy5ic19pbnR2YWwsCi0JCQlicy5ic19uZXh0dGJ0dCwKLQkJCWJzLmJzX2R0aW1wZXJpb2QsCi0JCQlicy5ic19uZXh0ZHRpbSwKLQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkLAotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJCWJzLmJzX2NmcHBlcmlvZCwKLQkJCWJzLmJzX2NmcG1heGR1cmF0aW9uLAotCQkJYnMuYnNfY2ZwbmV4dCwKLQkJCWJzLmJzX3RpbW9mZnNldAotCQkJKTsKLQotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7Ci0JfSBlbHNlIHsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWlmIChuZXh0dGJ0dCA9PSBpbnR2YWwpCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkvKgotCQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJCSAqIFRTRgotCQkJICovCi0jZGVmaW5lIEZVREdFIDIKLQkJCWlmICghKGludHZhbCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpKSB7Ci0JCQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQkJCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLAotCQkJCQkodTMyKXRzZikgKyBGVURHRTsKLQkJCQlkbyB7Ci0JCQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLQkJCX0KLSN1bmRlZiBGVURHRQotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCQkJbmV4dHRidHQsCi0JCQkJaW50dmFsICYgfkFUSDlLX0JFQUNPTl9SRVNFVF9UU0YsCi0JCQkJY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JCQkvKgotCQkJICogSW4gSUJTUyBtb2RlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBidXQgb25seQotCQkJICogZW5hYmxlIFNXQkEgaW50ZXJydXB0cyBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0JCQkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKLQkJCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUKLQkJCSAqIGRlYWwgd2l0aCB0aGluZ3MuCi0JCQkgKi8KLQkJCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOwotCQkJaWYgKCEoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCQlhdGhfYmVhY29ucV9jb25maWcoc2MpOwotCQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQkvKgotCQkJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kCi0JCQkgKiBTV0JBIGludGVycnVwdHMgdG8gcHJlcGFyZSBiZWFjb24gZnJhbWVzLgotCQkJICovCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKLQkJCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsgICAvKiBiZWFjb24gcHJlcGFyZSAqLwotCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKLQkJfQotCQlhdGg5a19od19iZWFjb25pbml0KGFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOwotCQkvKgotCQkgKiBXaGVuIHVzaW5nIGEgc2VsZi1saW5rZWQgYmVhY29uIGRlc2NyaXB0b3IgaW4KLQkJICogaWJzcyBtb2RlIGxvYWQgaXQgb25jZSBoZXJlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JCSAgICAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIDApOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKIAl9CiB9Ci0KLXZvaWQgYXRoX2JlYWNvbl9zeW5jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCi17Ci0JLyoKLQkgKiBSZXN5bmMgYmVhY29uIHRpbWVycyB1c2luZyB0aGUgdHNmIG9mIHRoZQotCSAqIGJlYWNvbiBmcmFtZSB3ZSBqdXN0IHJlY2VpdmVkLgotCSAqLwotCWF0aF9iZWFjb25fY29uZmlnKHNjLCBpZl9pZCk7Ci0Jc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuYwppbmRleCAzYzc0NTRmLi5lMmQ2MmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCwxMiArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0KLXN0YXRpYyBjb25zdCBpbnQxNl90IE5PSVNFX0ZMT09SW10gPSB7IC05NiwgLTkzLCAtOTgsIC05NiwgLTkzLCAtOTYgfTsKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAvKiBXZSBjYW4gdHVuZSB0aGlzIGFzIHdlIGdvIGJ5IG1vbml0b3JpbmcgcmVhbGx5IGxvdyB2YWx1ZXMgKi8KICNkZWZpbmUgQVRIOUtfTkZfVE9PX0xPVwktNjAKQEAgLTI4LDcgKzIzLDcgQEAKICAqIGlzIGluY29ycmVjdCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgc3RhdGljIE5GIHZhbHVlLiBMYXRlciB3ZSBjYW4gdHJ5IHRvCiAgKiBmaW5kIG91dCB3aHkgdGhleSBhcmUgcmVwb3J0aW5nIHRoZXNlIHZhbHVlcyAqLwogCi1zdGF0aWMgYm9vbCBhdGg5a19od19uZl9pbl9yYW5nZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHMxNiBuZikKK3N0YXRpYyBib29sIGF0aDlrX2h3X25mX2luX3JhbmdlKHN0cnVjdCBhdGhfaHcgKmFoLCBzMTYgbmYpCiB7CiAJaWYgKG5mID4gQVRIOUtfTkZfVE9PX0xPVykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCkBAIC05MSw3ICs4Niw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIGludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdKQogewogCWludDE2X3QgbmY7CkBAIC0xMDcsMjcgKzEwMiwyOSBAQAogCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMF0gaXMgJWRcbiIsIG5mKTsKIAluZmFycmF5WzBdID0gbmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAotCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7Ci0JZWxzZQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0NDQSksCi0JCQlBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOworCWlmICghQVJfU1JFVl85Mjg1KGFoKSkgeworCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKKwkJCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7CisJCWVsc2UKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKIAotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzFdID0gbmY7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9DQ0EpLAotCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKIAkJaWYgKG5mICYgMHgxMDApCiAJCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAyXSBpcyAlZFxuIiwgbmYpOwotCQluZmFycmF5WzJdID0gbmY7CisJCQkJIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDFdIGlzICVkXG4iLCBuZik7CisJCW5mYXJyYXlbMV0gPSBuZjsKKworCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDJfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKKwkJCWlmIChuZiAmIDB4MTAwKQorCQkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKKwkJCW5mYXJyYXlbMl0gPSBuZjsKKwkJfQogCX0KIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQpAQCAtMTQzLDU4ICsxNDAsNTIgQEAKIAkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDBdIGlzICVkXG4iLCBuZik7CiAJbmZhcnJheVszXSA9IG5mOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCi0JCQlBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7Ci0JZWxzZQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAotCQkJQVJfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CisJaWYgKCFBUl9TUkVWXzkyODUoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9FWFRfQ0NBKSwKKwkJCQkJQVI5MjgwX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IpOworCQllbHNlCisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKIAotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzRdID0gbmY7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwKLQkJCUFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IpOwogCQlpZiAobmYgJiAweDEwMCkKIAkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7Ci0JCW5mYXJyYXlbNV0gPSBuZjsKKwkJCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKKwkJbmZhcnJheVs0XSA9IG5mOworCisJCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMl9FWFRfTUlOQ0NBX1BXUik7CisJCQlpZiAobmYgJiAweDEwMCkKKwkJCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7CisJCQluZmFycmF5WzVdID0gbmY7CisJCX0KIAl9CiB9CiAKLXN0YXRpYyBib29sIGdldE5vaXNlRmxvb3JUaHJlc2goc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIGJvb2wgZ2V0Tm9pc2VGbG9vclRocmVzaChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJaW50MTZfdCAqbmZ0KQogewotCXN3aXRjaCAoY2hhbi0+Y2hhbm1vZGUpIHsKLQljYXNlIENIQU5ORUxfQToKLQljYXNlIENIQU5ORUxfQV9IVDIwOgotCWNhc2UgQ0hBTk5FTF9BX0hUNDBQTFVTOgotCWNhc2UgQ0hBTk5FTF9BX0hUNDBNSU5VUzoKLQkJKm5mdCA9IChpbnQ4X3QpYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzUpOworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJKm5mdCA9IChpbnQ4X3QpYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF81KTsKIAkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX0I6Ci0JY2FzZSBDSEFOTkVMX0c6Ci0JY2FzZSBDSEFOTkVMX0dfSFQyMDoKLQljYXNlIENIQU5ORUxfR19IVDQwUExVUzoKLQljYXNlIENIQU5ORUxfR19IVDQwTUlOVVM6Ci0JCSpuZnQgPSAoaW50OF90KWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF8yKTsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCSpuZnQgPSAoaW50OF90KWFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTkZUSFJFU0hfMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsIGZsYWdzIDB4JXhcbiIsIGNoYW4tPmNoYW5uZWxGbGFncyk7CisJCUJVR19PTigxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCkKIHsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApLApAQCAtMjI4LDEwICsyMTksOSBAQAogCQkgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19DQUwpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJYXRoOWtfaHdfc2V0dXBfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwpAQCAtMjM5LDIzICsyMjksMjEgQEAKIAljdXJyQ2FsLT5jYWxTdGF0ZSA9IENBTF9SVU5OSU5HOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF9NZWFzMC5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMS5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMi5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMy5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMwLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczEuc2lnbltpXSA9IDA7CisJCWFoLT5tZWFzMi5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMzLnNpZ25baV0gPSAwOwogCX0KIAotCWFocC0+YWhfQ2FsU2FtcGxlcyA9IDA7CisJYWgtPmNhbF9zYW1wbGVzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiwKIAkJCQkgICAgIHU4IHJ4Y2hhaW5tYXNrLAogCQkJCSAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCwKIAkJCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJKmlzQ2FsRG9uZSA9IGZhbHNlOwogCiAJaWYgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9SVU5OSU5HKSB7CkBAIC0yNjMsOSArMjUxLDkgQEAKIAkJICAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19DQUwpKSB7CiAKIAkJCWN1cnJDYWwtPmNhbERhdGEtPmNhbENvbGxlY3QoYWgpOwotCQkJYWhwLT5haF9DYWxTYW1wbGVzKys7CisJCQlhaC0+Y2FsX3NhbXBsZXMrKzsKIAotCQkJaWYgKGFocC0+YWhfQ2FsU2FtcGxlcyA+PSBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxOdW1TYW1wbGVzKSB7CisJCQlpZiAoYWgtPmNhbF9zYW1wbGVzID49IGN1cnJDYWwtPmNhbERhdGEtPmNhbE51bVNhbXBsZXMpIHsKIAkJCQlpbnQgaSwgbnVtQ2hhaW5zID0gMDsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewogCQkJCQlpZiAocnhjaGFpbm1hc2sgJiAoMSA8PCBpKSkKQEAgLTI4NSwxMTMgKzI3MywxMDUgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKy8qIEFzc3VtZXMgeW91IGFyZSB0YWxraW5nIGFib3V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjaGFubmVsICovCitzdGF0aWMgYm9vbCBhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICBlbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWJvb2wgcmV0dmFsID0gZmFsc2U7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAKLQlzd2l0Y2ggKGNhbFR5cGUgJiBhaHAtPmFoX3N1cHBDYWxzKSB7Ci0JY2FzZSBJUV9NSVNNQVRDSF9DQUw6Ci0JCWlmICghSVNfQ0hBTl9CKGNoYW4pKQotCQkJcmV0dmFsID0gdHJ1ZTsKLQkJYnJlYWs7CisJc3dpdGNoIChjYWxUeXBlICYgYWgtPnN1cHBfY2FscykgeworCWNhc2UgSVFfTUlTTUFUQ0hfQ0FMOiAvKiBCb3RoIDIgR0h6IGFuZCA1IEdIeiBzdXBwb3J0IE9GRE0gKi8KKwkJcmV0dXJuIHRydWU7CiAJY2FzZSBBRENfR0FJTl9DQUw6CiAJY2FzZSBBRENfRENfQ0FMOgotCQlpZiAoIUlTX0NIQU5fQihjaGFuKQotCQkgICAgJiYgIShJU19DSEFOXzJHSFooY2hhbikgJiYgSVNfQ0hBTl9IVDIwKGNoYW4pKSkKLQkJCXJldHZhbCA9IHRydWU7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogJiYKKwkJICBjb25mX2lzX2h0MjAoY29uZikpCisJCQlyZXR1cm4gdHJ1ZTsKIAkJYnJlYWs7CiAJfQotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2lxY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV0gKz0KKwkJYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18wKGkpKTsKLQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc1FbaV0gKz0KKwkJYWgtPnRvdGFsUG93ZXJNZWFzUVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKLQkJYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV0gKz0KKwkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMihpKSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIHBtaT0weCUwOHg7cG1xPTB4JTA4eDtpcWNtPTB4JTA4eDtcbiIsCi0JCQlhaHAtPmFoX0NhbFNhbXBsZXMsIGksIGFocC0+YWhfdG90YWxQb3dlck1lYXNJW2ldLAotCQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc1FbaV0sCi0JCQlhaHAtPmFoX3RvdGFsSXFDb3JyTWVhc1tpXSk7CisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCisJCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldLAorCQkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jb2xsZWN0KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzAoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY1FPZGRQaGFzZVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY1FFdmVuUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjUUV2ZW5QaGFzZVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18zKGkpKTsKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkiJWQ6IENobiAlZCBvZGRpPTB4JTA4eDsgZXZlbmk9MHglMDh4OyAiCiAJCQkib2RkcT0weCUwOHg7IGV2ZW5xPTB4JTA4eDtcbiIsCi0JCQlhaHAtPmFoX0NhbFNhbXBsZXMsIGksCi0JCQlhaHAtPmFoX3RvdGFsQWRjSU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY0lFdmVuUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY1FFdmVuUGhhc2VbaV0pOworCQkJYWgtPmNhbF9zYW1wbGVzLCBpLAorCQkJYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjSUV2ZW5QaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY1FPZGRQaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV0pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIG9kZGk9MHglMDh4OyBldmVuaT0weCUwOHg7ICIKIAkJCSJvZGRxPTB4JTA4eDsgZXZlbnE9MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldKTsKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwKKwkJCWFoLT50b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTggbnVtQ2hhaW5zKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIHBvd2VyTWVhc1EsIHBvd2VyTWVhc0ksIGlxQ29yck1lYXM7CiAJdTMyIHFDb2ZmRGVub20sIGlDb2ZmRGVub207CiAJaW50MzJfdCBxQ29mZiwgaUNvZmY7CiAJaW50IGlxQ29yck5lZywgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlwb3dlck1lYXNJID0gYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV07Ci0JCXBvd2VyTWVhc1EgPSBhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXTsKLQkJaXFDb3JyTWVhcyA9IGFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldOworCQlwb3dlck1lYXNJID0gYWgtPnRvdGFsUG93ZXJNZWFzSVtpXTsKKwkJcG93ZXJNZWFzUSA9IGFoLT50b3RhbFBvd2VyTWVhc1FbaV07CisJCWlxQ29yck1lYXMgPSBhaC0+dG90YWxJcUNvcnJNZWFzW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBJUSBDYWwgYW5kIENvcnJlY3Rpb24gZm9yIENoYWluICVkXG4iLApAQCAtMzk5LDcgKzM3OSw3IEBACiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIk9yaWduYWw6IENobiAlZGlxX2NvcnJfbWVhcyA9IDB4JTA4eFxuIiwKLQkJCWksIGFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJCWksIGFoLT50b3RhbElxQ29yck1lYXNbaV0pOwogCiAJCWlxQ29yck5lZyA9IDA7CiAKQEAgLTQ1NywxNyArNDM3LDE2IEBACiAJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9FTkFCTEUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHU4IG51bUNoYWlucykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBpT2RkTWVhc09mZnNldCwgaUV2ZW5NZWFzT2Zmc2V0LCBxT2RkTWVhc09mZnNldCwgcUV2ZW5NZWFzT2Zmc2V0OwogCXUzMiBxR2Fpbk1pc21hdGNoLCBpR2Fpbk1pc21hdGNoLCB2YWwsIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtQ2hhaW5zOyBpKyspIHsKLQkJaU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjSU9kZFBoYXNlW2ldOwotCQlpRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXTsKLQkJcU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldOwotCQlxRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXTsKKwkJaU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV07CisJCWlFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0lFdmVuUGhhc2VbaV07CisJCXFPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldOworCQlxRXZlbk1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNRRXZlblBoYXNlW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBBREMgR2FpbiBDYWwgZm9yIENoYWluICVkXG4iLCBpKTsKQEAgLTUxNSwyMSArNDk0LDIwIEBACiAJCSAgQVJfUEhZX05FV19BRENfR0FJTl9DT1JSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19kY2NhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCBudW1DaGFpbnMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgaU9kZE1lYXNPZmZzZXQsIGlFdmVuTWVhc09mZnNldCwgdmFsLCBpOwogCWludDMyX3QgcU9kZE1lYXNPZmZzZXQsIHFFdmVuTWVhc09mZnNldCwgcURjTWlzbWF0Y2gsIGlEY01pc21hdGNoOwogCWNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgKmNhbERhdGEgPQotCQlhaHAtPmFoX2NhbF9saXN0X2N1cnItPmNhbERhdGE7CisJCWFoLT5jYWxfbGlzdF9jdXJyLT5jYWxEYXRhOwogCXUzMiBudW1TYW1wbGVzID0KIAkJKDEgPDwgKGNhbERhdGEtPmNhbENvdW50TWF4ICsgNSkpICogY2FsRGF0YS0+Y2FsTnVtU2FtcGxlczsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlpT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXTsKLQkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXTsKLQkJcU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV07Ci0JCXFFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV07CisJCWlPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2VbaV07CisJCWlFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXTsKKwkJcU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXTsKKwkJcUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBBREMgREMgT2Zmc2V0IENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOwpAQCAtNTczLDUzICs1NTEsNDIgQEAKIAkJICBBUl9QSFlfTkVXX0FEQ19EQ19PRkZTRVRfQ09SUl9FTkFCTEUpOwogfQogCi12b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSkKKy8qIFRoaXMgaXMgZG9uZSBmb3IgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNoYW5uZWwgKi8KK2Jvb2wgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4gPQotCQlhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmN1cnJDYWwgPSBhaHAtPmFoX2NhbF9saXN0X2N1cnI7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFoLT5jYWxfbGlzdF9jdXJyOwogCi0JKmlzQ2FsRG9uZSA9IHRydWU7CisJaWYgKCFhaC0+Y3VyY2hhbikKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkgJiYgIUFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY3VyckNhbCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCisJCXJldHVybiB0cnVlOwogCiAJaWYgKGN1cnJDYWwtPmNhbFN0YXRlICE9IENBTF9ET05FKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJDYWxpYnJhdGlvbiBzdGF0ZSBpbmNvcnJlY3QsICVkXG4iLAogCQkJY3VyckNhbC0+Y2FsU3RhdGUpOwotCQlyZXR1cm47CisJCXJldHVybiB0cnVlOwogCX0KIAotCi0JaWYgKCFhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKQotCQlyZXR1cm47CisJaWYgKCFhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKQorCQlyZXR1cm4gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJIlJlc2V0dGluZyBDYWwgJWQgc3RhdGUgZm9yIGNoYW5uZWwgJXUvMHgleFxuIiwKLQkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSwgY2hhbi0+Y2hhbm5lbCwKLQkJY2hhbi0+Y2hhbm5lbEZsYWdzKTsKKwkJIlJlc2V0dGluZyBDYWwgJWQgc3RhdGUgZm9yIGNoYW5uZWwgJXVcbiIsCisJCWN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUsIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCWljaGFuLT5DYWxWYWxpZCAmPSB+Y3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZTsKKwlhaC0+Y3VyY2hhbi0+Q2FsVmFsaWQgJj0gfmN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGU7CiAJY3VyckNhbC0+Y2FsU3RhdGUgPSBDQUxfV0FJVElORzsKIAotCSppc0NhbERvbmUgPSBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAogCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0VOQUJMRV9ORik7CkBAIC02MjgsNyArNTk1LDcgQEAKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwogfQogCi12b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQordm9pZCBhdGg5a19od19sb2FkbmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoOwogCWludCBpLCBqOwpAQCAtNjQzLDE2ICs2MTAsMTQgQEAKIAl9OwogCXU4IGNoYWlubWFzazsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQorCWlmIChBUl9TUkVWXzkyODUoYWgpKQorCQljaGFpbm1hc2sgPSAweDk7CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSkKIAkJY2hhaW5tYXNrID0gMHgxQjsKIAllbHNlCiAJCWNoYWlubWFzayA9IDB4M0Y7CiAKLSNpZmRlZiBBVEhfTkZfUEVSX0NIQU4KLQloID0gY2hhbi0+bmZDYWxIaXN0OwotI2Vsc2UKIAloID0gYWgtPm5mQ2FsSGlzdDsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CiAJCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgewpAQCAtNjg2LDE4ICs2NTEsMTMgQEAKIAl9CiB9CiAKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9oYWwgKmFoLAoraW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCWludDE2X3QgbmYsIG5mVGhyZXNoOwogCWludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdID0geyAwIH07CiAJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7Ci0JdTggY2hhaW5tYXNrOwotCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCi0JCWNoYWlubWFzayA9IDB4MUI7Ci0JZWxzZQotCQljaGFpbm1hc2sgPSAweDNGOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYyA9IGNoYW4tPmNoYW47CiAKIAljaGFuLT5jaGFubmVsRmxhZ3MgJj0gKH5DSEFOTkVMX0NXX0lOVCk7CiAJaWYgKFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpICYgQVJfUEhZX0FHQ19DT05UUk9MX05GKSB7CkBAIC03MDksNyArNjY5LDcgQEAKIAl9IGVsc2UgewogCQlhdGg5a19od19kb19nZXRuZihhaCwgbmZhcnJheSk7CiAJCW5mID0gbmZhcnJheVswXTsKLQkJaWYgKGdldE5vaXNlRmxvb3JUaHJlc2goYWgsIGNoYW4sICZuZlRocmVzaCkKKwkJaWYgKGdldE5vaXNlRmxvb3JUaHJlc2goYWgsIGMtPmJhbmQsICZuZlRocmVzaCkKIAkJICAgICYmIG5mID4gbmZUaHJlc2gpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCQkibm9pc2UgZmxvb3IgZmFpbGVkIGRldGVjdGVkOyAiCkBAIC03MTksMTEgKzY3OSw3IEBACiAJCX0KIAl9CiAKLSNpZmRlZiBBVEhfTkZfUEVSX0NIQU4KLQloID0gY2hhbi0+bmZDYWxIaXN0OwotI2Vsc2UKIAloID0gYWgtPm5mQ2FsSGlzdDsKLSNlbmRpZgogCiAJYXRoOWtfaHdfdXBkYXRlX25mY2FsX2hpc3RfYnVmZmVyKGgsIG5mYXJyYXkpOwogCWNoYW4tPnJhd05vaXNlRmxvb3IgPSBoWzBdLnByaXZORjsKQEAgLTczMSw3ICs2ODcsNyBAQAogCXJldHVybiBjaGFuLT5yYXdOb2lzZUZsb29yOwogfQogCi12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBpLCBqOwogCkBAIC03NDUsMjYgKzcwMSwxNiBAQAogCQkJCUFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CiAJCX0KIAl9Ci0JcmV0dXJuOwogfQogCi1zMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorczE2IGF0aDlrX2h3X2dldGNoYW5fbm9pc2Uoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbjsKIAlzMTYgbmY7CiAKLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKGljaGFuID09IE5VTEwpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwotCX0KLQlpZiAoaWNoYW4tPnJhd05vaXNlRmxvb3IgPT0gMCkgewotCQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQluZiA9IE5PSVNFX0ZMT09SW21vZGVdOwotCX0gZWxzZQotCQluZiA9IGljaGFuLT5yYXdOb2lzZUZsb29yOworCWlmIChjaGFuLT5yYXdOb2lzZUZsb29yID09IDApCisJCW5mID0gLTk2OworCWVsc2UKKwkJbmYgPSBjaGFuLT5yYXdOb2lzZUZsb29yOwogCiAJaWYgKCFhdGg5a19od19uZl9pbl9yYW5nZShhaCwgbmYpKQogCQluZiA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwpAQCAtNzcyLDUzICs3MTgsMzQgQEAKIAlyZXR1cm4gbmY7CiB9CiAKLWJvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAotCQkJYm9vbCAqaXNDYWxEb25lKQorc3RhdGljIHZvaWQgYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFocC0+YWhfY2FsX2xpc3RfY3VycjsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4gPSBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOworCXUzMiByZGRhdGEsIGk7CisJaW50IGRlbHRhLCBjdXJyUERBREMsIHJlZ3ZhbDsKIAotCSppc0NhbERvbmUgPSB0cnVlOworCXJkZGF0YSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDQpOwogCi0JaWYgKGljaGFuID09IE5VTEwpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm8gbWFwcGluZ1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9CisJY3VyclBEQURDID0gTVMocmRkYXRhLCBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUKTsKIAotCWlmIChjdXJyQ2FsICYmCi0JICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAotCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7Ci0JCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgaWNoYW4sIHJ4Y2hhaW5tYXNrLCBjdXJyQ2FsLAotCQkJCQkgaXNDYWxEb25lKTsKLQkJaWYgKCppc0NhbERvbmUpIHsKLQkJCWFocC0+YWhfY2FsX2xpc3RfY3VyciA9IGN1cnJDYWwgPSBjdXJyQ2FsLT5jYWxOZXh0OworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0RBQ19IUFdSXzVHKSkKKwkJZGVsdGEgPSAoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQyArIDQpIC8gODsKKwllbHNlCisJCWRlbHRhID0gKGN1cnJQREFEQyAtIGFoLT5pbml0UERBREMgKyA1KSAvIDEwOwogCi0JCQlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpIHsKLQkJCQkqaXNDYWxEb25lID0gZmFsc2U7Ci0JCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwotCQkJfQorCWlmIChkZWx0YSAhPSBhaC0+UERBRENkZWx0YSkgeworCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOworCQlmb3IgKGkgPSAxOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKSB7CisJCQlyZWd2YWwgPSBhaC0+b3JpZ2luYWxHYWluW2ldIC0gZGVsdGE7CisJCQlpZiAocmVndmFsIDwgMCkKKwkJCQlyZWd2YWwgPSAwOworCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQsCisJCQkJCUFSX1BIWV9UWF9HQUlOLCByZWd2YWwpOwogCQl9CiAJfQotCi0JaWYgKGxvbmdjYWwpIHsKLQkJYXRoOWtfaHdfZ2V0bmYoYWgsIGljaGFuKTsKLQkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+YWhfY3VyY2hhbik7Ci0JCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKLQotCQlpZiAoKGljaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0NXX0lOVCkgIT0gMCkgewotCQkJY2hhbi0+Y2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfQ1dfSU5UOwotCQkJaWNoYW4tPmNoYW5uZWxGbGFncyAmPSB+Q0hBTk5FTF9DV19JTlQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od185Mjg1X3BhX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAogCXUzMiByZWdWYWw7CkBAIC05MTMsNTkgKzg0MCwxNzEgQEAKIAogfQogCi1ib29sIGF0aDlrX2h3X2luaXRfY2FsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCisJCQlib29sICppc0NhbERvbmUpCit7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFoLT5jYWxfbGlzdF9jdXJyOworCisJKmlzQ2FsRG9uZSA9IHRydWU7CisKKwlpZiAoY3VyckNhbCAmJgorCSAgICAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1JVTk5JTkcgfHwKKwkgICAgIGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9XQUlUSU5HKSkgeworCQlhdGg5a19od19wZXJfY2FsaWJyYXRpb24oYWgsIGNoYW4sIHJ4Y2hhaW5tYXNrLCBjdXJyQ2FsLAorCQkJCQkgaXNDYWxEb25lKTsKKwkJaWYgKCppc0NhbERvbmUpIHsKKwkJCWFoLT5jYWxfbGlzdF9jdXJyID0gY3VyckNhbCA9IGN1cnJDYWwtPmNhbE5leHQ7CisKKwkJCWlmIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykgeworCQkJCSppc0NhbERvbmUgPSBmYWxzZTsKKwkJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobG9uZ2NhbCkgeworCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoYWgpKQorCQkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgpOworCisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJCWF0aDlrX29sY190ZW1wX2NvbXBlbnNhdGlvbihhaCk7CisJCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKwkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CisJCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKKworCQlpZiAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9DV19JTlQpCisJCQljaGFuLT5jaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfQ1dfSU5UOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBhcjkyODVfY2xjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwlpZiAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9IVDIwKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX1BBUkFMTEVMX0NBTF9FTkFCTEUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RVUkJPLCBBUl9QSFlfRkNfRFlOMjA0MF9FTik7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisJCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkgIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwgIm9mZnNldCAiCisJCQkJImNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAiCisJCQkJIjFtczsgbm9pc3kgPz9cbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCX0KKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsCisJCQkgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0IGNhbGlicmF0aW9uICIKKwkJCQkiZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgbm9pc3kgPz9cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkgJiYgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCQlpZiAoIWFyOTI4NV9jbGMoYWgsIGNoYW4pKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKIAorCQkvKiBLaWNrIG9mZiB0aGUgY2FsICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKKwkJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkJQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwKKwkJCQkJQUhfV0FJVF9USU1FT1VUKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJvZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgIgorCQkJCSJub2lzeSBlbnZpcm9ubWVudD9cbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSk7CisJfQorCisJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8Ci0JCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8CisJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKIAotCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLCAwKSkgeworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLAorCQkJCTAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyAiCiAJCQkibm9pc3kgZW52aXJvbm1lbnQ/XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJfQorCisJLyogRG8gUEEgQ2FsaWJyYXRpb24gKi8KIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoYWgpKQogCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CiAKKwkvKiBEbyBORiBDYWxpYnJhdGlvbiAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKLQkJICBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOworCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKIAotCWFocC0+YWhfY2FsX2xpc3QgPSBhaHAtPmFoX2NhbF9saXN0X2xhc3QgPSBhaHAtPmFoX2NhbF9saXN0X2N1cnIgPSBOVUxMOworCWFoLT5jYWxfbGlzdCA9IGFoLT5jYWxfbGlzdF9sYXN0ID0gYWgtPmNhbF9saXN0X2N1cnIgPSBOVUxMOwogCiAJaWYgKEFSX1NSRVZfOTEwMChhaCkgfHwgQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewotCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBjaGFuLCBBRENfR0FJTl9DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9hZGNHYWluQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfYWRjR2FpbkNhbERhdGEpOworCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBBRENfR0FJTl9DQUwpKSB7CisJCQlJTklUX0NBTCgmYWgtPmFkY2dhaW5fY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2dhaW5fY2FsZGF0YSk7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgR2FpbiBDYWxpYnJhdGlvbi5cbiIpOwogCQl9Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19EQ19DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9hZGNEY0NhbERhdGEpOwotCQkJSU5TRVJUX0NBTChhaHAsICZhaHAtPmFoX2FkY0RjQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIEFEQ19EQ19DQUwpKSB7CisJCQlJTklUX0NBTCgmYWgtPmFkY2RjX2NhbGRhdGEpOworCQkJSU5TRVJUX0NBTChhaCwgJmFoLT5hZGNkY19jYWxkYXRhKTsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIERDIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQotCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBjaGFuLCBJUV9NSVNNQVRDSF9DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9pcUNhbERhdGEpOwotCQkJSU5TRVJUX0NBTChhaHAsICZhaHAtPmFoX2lxQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIElRX01JU01BVENIX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmlxX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQkJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQogCi0JCWFocC0+YWhfY2FsX2xpc3RfY3VyciA9IGFocC0+YWhfY2FsX2xpc3Q7CisJCWFoLT5jYWxfbGlzdF9jdXJyID0gYWgtPmNhbF9saXN0OwogCi0JCWlmIChhaHAtPmFoX2NhbF9saXN0X2N1cnIpCi0JCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgYWhwLT5haF9jYWxfbGlzdF9jdXJyKTsKKwkJaWYgKGFoLT5jYWxfbGlzdF9jdXJyKQorCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGFoLT5jYWxfbGlzdF9jdXJyKTsKIAl9CiAKLQlpY2hhbi0+Q2FsVmFsaWQgPSAwOworCWNoYW4tPkNhbFZhbGlkID0gMDsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3NGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIENBTElCX0gKKyNkZWZpbmUgQ0FMSUJfSAorCitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19pbml0X2RjX2NhbDsKKworI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKKworI2RlZmluZSBOVU1fTkZfUkVBRElOR1MgICAgICAgNgorI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggNQorCitzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgeworCXUzMiAqaWFfYXJyYXk7CisJdTMyIGlhX3Jvd3M7CisJdTMyIGlhX2NvbHVtbnM7Cit9OworCisjZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCisJCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCisJCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAorCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAorCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQorCisjZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAorCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKKwkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoX2FocCktPmNhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKKwkJCShfYWhwKS0+Y2FsX2xpc3QgPQkJCQlcCisJCQkJKF9haHApLT5jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCisJCQkoKF9haHApLT5jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCSgoX2FocCktPmNhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCisJCQkoX2FocCktPmNhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCisJCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmNhbF9saXN0OwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0gaGFsX2NhbF90eXBlcyB7CisJQURDX0RDX0lOSVRfQ0FMID0gMHgxLAorCUFEQ19HQUlOX0NBTCA9IDB4MiwKKwlBRENfRENfQ0FMID0gMHg0LAorCUlRX01JU01BVENIX0NBTCA9IDB4OAorfTsKKworZW51bSBoYWxfY2FsX3N0YXRlIHsKKwlDQUxfSU5BQ1RJVkUsCisJQ0FMX1dBSVRJTkcsCisJQ0FMX1JVTk5JTkcsCisJQ0FMX0RPTkUKK307CisKKyNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCisjZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAorI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKKyNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCisjZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAorCitzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKKwllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKKwl1MzIgY2FsTnVtU2FtcGxlczsKKwl1MzIgY2FsQ291bnRNYXg7CisJdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2h3ICopOworCXZvaWQgKCpjYWxQb3N0UHJvYykgKHN0cnVjdCBhdGhfaHcgKiwgdTgpOworfTsKKworc3RydWN0IGhhbF9jYWxfbGlzdCB7CisJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKKwllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKK307CisKK3N0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKKwlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07CisJdTggY3VyckluZGV4OworCWludDE2X3QgcHJpdk5GOworCXU4IGludmFsaWRORmNvdW50OworfTsKKworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3MxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Citib29sIGF0aDlrX2h3X2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAorCQkJYm9vbCAqaXNDYWxEb25lKTsKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisKKyNlbmRpZiAvKiBDQUxJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOTU2NmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBDT1JFX0gKLSNkZWZpbmUgQ09SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLQotI2luY2x1ZGUgImF0aDlrLmgiCi0jaW5jbHVkZSAicmMuaCIKLQotc3RydWN0IGF0aF9ub2RlOwotCi0vKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwotCi0jZGVmaW5lCWl0bzY0KHgpIChzaXplb2YoeCkgPT0gOCkgPwkJCVwKLQkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAoMHhmZikpIDoJXAotCShzaXplb2YoeCkgPT0gMTYpID8JCQkJXAotCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZikgOglcCi0JKChzaXplb2YoeCkgPT0gMzIpID8JCQkJXAotCSAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmZmZmZmKSA6IFwKLQkgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKQotCi0vKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLwotI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKLQkJKF9sKSsrOwkJCQlcCi0JCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotLyogZGVjcmVtZW50IHdpdGggd3JhcC1hcm91bmQgKi8KLSNkZWZpbmUgREVDUihfbCwgIF9zeikgIGRvIHsJCQlcCi0JCShfbCktLTsJCQkJXAotCQkoX2wpICY9ICgoX3N6KSAtIDEpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQotI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAotCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAotCQkJQlVHKCk7CQkJXAotCQl9CQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAotCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKLQotI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQotCi1zdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0KLWVudW0gQVRIX0RFQlVHIHsKLQlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCi0JQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKLQlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCi0JQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKLQlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCi0JQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCi0JQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAotCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCi0JQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKLQlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAotCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAotCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCi0JQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKLQlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKLQlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCi0JQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgotfTsKLQotI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKLQotI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwotCi0vKioKLSAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCi0gKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKLSAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycwotICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQotICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KLSAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCi0gKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KLSAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKLSAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCi0gKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCi0gKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0Ci0gKiBAYm1pc3M6IEJlYWNvbiBNaXNzCi0gKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5Ci0gKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKLSAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0Ci0gKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKLSAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYwotICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQotICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KLSAqLwotc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgewotCXUzMiB0b3RhbDsKLQl1MzIgcnhvazsKLQl1MzIgcnhlb2w7Ci0JdTMyIHJ4b3JuOwotCXUzMiB0eG9rOwotCXUzMiB0eGVvbDsKLQl1MzIgdHh1cm47Ci0JdTMyIG1pYjsKLQl1MzIgcnhwaHllcnI7Ci0JdTMyIHJ4X2tleWNhY2hlX21pc3M7Ci0JdTMyIHN3YmE7Ci0JdTMyIGJtaXNzOwotCXUzMiBibnI7Ci0JdTMyIGNzdDsKLQl1MzIgZ3R0OwotCXUzMiB0aW07Ci0JdTMyIGNhYmVuZDsKLQl1MzIgZHRpbXN5bmM7Ci0JdTMyIGR0aW07Ci19OwotCi1zdHJ1Y3QgYXRoX3N0YXRzIHsKLQlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfZGVidWcgewotCWludCBkZWJ1Z19tYXNrOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKLQlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwotfTsKLQotdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci12b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKLQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICAgIGVudW0gYXRoOWtfaW50IHN0YXR1cykKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLwotCi1zdHJ1Y3QgYXRoX2NvbmZpZyB7Ci0JdTMyIGF0aF9hZ2dyX3Byb3Q7Ci0JdTE2IHR4cG93bGltaXQ7Ci0JdTE2IHR4cG93bGltaXRfb3ZlcnJpZGU7Ci0JdTggY2FicVJlYWR5dGltZTsKLQl1OCBzd0JlYWNvblByb2Nlc3M7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCi0JCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCi0JCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX2xhc3Rmcm0gPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCi0JCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSBidWZmZXJfdHlwZSB7Ci0JQlVGX0RBVEEJCT0gQklUKDApLAotCUJVRl9BR0dSCQk9IEJJVCgxKSwKLQlCVUZfQU1QRFUJCT0gQklUKDIpLAotCUJVRl9IVAkJCT0gQklUKDMpLAotCUJVRl9SRVRSWQkJPSBCSVQoNCksCi0JQlVGX1hSRVRSWQkJPSBCSVQoNSksCi0JQlVGX1NIT1JUX1BSRUFNQkxFCT0gQklUKDYpLAotCUJVRl9CQVIJCQk9IEJJVCg3KSwKLQlCVUZfUFNQT0xMCQk9IEJJVCg4KSwKLQlCVUZfQUdHUl9CVVJTVAkJPSBCSVQoOSksCi0JQlVGX0NBTENfQUlSVElNRQk9IEJJVCgxMCksCi19OwotCi1zdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7Ci0JaW50IGJmc19uZnJhbWVzOwkJLyogIyBmcmFtZXMgaW4gYWdncmVnYXRlICovCi0JdTE2IGJmc19hbDsJCQkvKiBsZW5ndGggb2YgYWdncmVnYXRlICovCi0JdTE2IGJmc19mcm1sZW47CQkJLyogbGVuZ3RoIG9mIGZyYW1lICovCi0JaW50IGJmc19zZXFubzsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KLQlpbnQgYmZzX3RpZG5vOwkJCS8qIHRpZCBvZiB0aGlzIGZyYW1lICovCi0JaW50IGJmc19yZXRyaWVzOwkJLyogY3VycmVudCByZXRyaWVzICovCi0JdTMyIGJmX3R5cGU7CQkJLyogQlVGXyogKGVudW0gYnVmZmVyX3R5cGUpICovCi0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwotfTsKLQotI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCi0jZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCi0jZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgotI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCi0jZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCi0jZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCi0jZGVmaW5lIGJmX3JjcyAgICAgICAgICAJYmZfc3RhdGUuYmZzX3JjcwotI2RlZmluZSBiZl9rZXlpeCAgICAgICAgICAgICAgICBiZl9zdGF0ZS5iZnNfa2V5aXgKLSNkZWZpbmUgYmZfa2V5dHlwZSAgICAgIAliZl9zdGF0ZS5iZnNfa2V5dHlwZQotI2RlZmluZSBiZl9pc2RhdGEoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfREFUQSkKLSNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCi0jZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCi0jZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCi0jZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQotI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQotI2RlZmluZSBiZl9pc3NocHJlYW1ibGUoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9TSE9SVF9QUkVBTUJMRSkKLSNkZWZpbmUgYmZfaXNiYXIoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQkFSKQotI2RlZmluZSBiZl9pc3BzcG9sbChiZikgCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9QU1BPTEwpCi0jZGVmaW5lIGJmX2lzYWdncmJ1cnN0KGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQUdHUl9CVVJTVCkKLQotLyoKLSAqIEFic3RyYWN0aW9uIG9mIGEgY29udGlndW91cyBidWZmZXIgdG8gdHJhbnNtaXQvcmVjZWl2ZS4gIFRoZXJlIGlzIG9ubHkKLSAqIGEgc2luZ2xlIGh3IGRlc2NyaXB0b3IgZW5jYXBzdWxhdGVkIGhlcmUuCi0gKi8KLXN0cnVjdCBhdGhfYnVmIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGFzdDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKLQkJCQkJICAgYW4gYWdncmVnYXRlKSAqLwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ZnJtOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIGZyYW1lICovCi0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KLQlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCi0JZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KLQl1MzIgYmZfc3RhdHVzOwotCXUxNiBiZl9mbGFnczsJCQkvKiB0eCBkZXNjcmlwdG9yIGZsYWdzICovCi0Jc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CS8qIGJ1ZmZlciBzdGF0ZSAqLwotCWRtYV9hZGRyX3QgYmZfZG1hY29udGV4dDsKLX07Ci0KLSNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQotCi0vKiBodyBwcm9jZXNzaW5nIGNvbXBsZXRlLCBkZXNjIHByb2Nlc3NlZCBieSBoYWwgKi8KLSNkZWZpbmUgQVRIX0JVRlNUQVRVU19ET05FICAgICAgMHgwMDAwMDAwMQotLyogaHcgcHJvY2Vzc2luZyBjb21wbGV0ZSwgZGVzYyBob2xkIGZvciBodyAqLwotI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCi0vKiBSeC1vbmx5OiBPUyBpcyBkb25lIHdpdGggdGhpcyBwYWNrZXQgYW5kIGl0J3Mgb2sgdG8gcXVldWVkIGl0IHRvIGh3ICovCi0jZGVmaW5lIEFUSF9CVUZTVEFUVVNfRlJFRSAgICAgIDB4MDAwMDAwMDQKLQotLyogRE1BIHN0YXRlIGZvciB0eC9yeCBkZXNjcmlwdG9ycyAqLwotCi1zdHJ1Y3QgYXRoX2Rlc2NkbWEgewotCWNvbnN0IGNoYXIgKmRkX25hbWU7Ci0Jc3RydWN0IGF0aF9kZXNjICpkZF9kZXNjOwkvKiBkZXNjcmlwdG9ycyAgKi8KLQlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHIgb2YgZGRfZGVzYyAgKi8KLQl1MzIgZGRfZGVzY19sZW47CQkvKiBzaXplIG9mIGRkX2Rlc2MgICovCi0Jc3RydWN0IGF0aF9idWYgKmRkX2J1ZnB0cjsJLyogYXNzb2NpYXRlZCBidWZmZXJzICovCi0JZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwotfTsKLQotaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAotCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKLXZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKLQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLQotLyoqKioqKioqKioqLwotLyogUlggLyBUWCAqLwotLyoqKioqKioqKioqLwotCi0jZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKLSNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCi0jZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgotI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMwotI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAotI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0Ci0jZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0Ci0jZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQotI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCi0KLSNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCi0JKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAotCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKLQkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCi0JIFdNRV9BQ19WTykKLQotI2RlZmluZSBXTUVfQUNfQkUgICAwCi0jZGVmaW5lIFdNRV9BQ19CSyAgIDEKLSNkZWZpbmUgV01FX0FDX1ZJICAgMgotI2RlZmluZSBXTUVfQUNfVk8gICAzCi0jZGVmaW5lIFdNRV9OVU1fQUMgIDQKLQotI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAotI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0Ci0jZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCi0jZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCi0vKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCi0jZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKLSNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKLSNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAotI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2Ci0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAotI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKLQotLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKLSAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLwotI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAotCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKLQotLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCi0jZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCi0KLS8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAotCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCi0JICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCi0KLSNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCi0JKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQotCi0jZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQotI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCi0jZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKLSNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKLQotZW51bSBBVEhfQUdHUl9TVEFUVVMgewotCUFUSF9BR0dSX0RPTkUsCi0JQVRIX0FHR1JfQkFXX0NMT1NFRCwKLQlBVEhfQUdHUl9MSU1JVEVELAotCUFUSF9BR0dSX1NIT1JUUEtULAotCUFUSF9BR0dSXzhLX0xJTUlURUQsCi19OwotCi1zdHJ1Y3QgYXRoX3R4cSB7Ci0JdTMyIGF4cV9xbnVtOwkJCS8qIGhhcmR3YXJlIHEgbnVtYmVyICovCi0JdTMyICpheHFfbGluazsJCQkvKiBsaW5rIHB0ciBpbiBsYXN0IFRYIGRlc2MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwkJLyogdHJhbnNtaXQgcXVldWUgKi8KLQlzcGlubG9ja190IGF4cV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgYXhxX2xvY2tmbGFnczsJLyogaW50ciBzdGF0ZSB3aGVuIG11c3QgY2xpICovCi0JdTMyIGF4cV9kZXB0aDsJCQkvKiBxdWV1ZSBkZXB0aCAqLwotCXU4IGF4cV9hZ2dyX2RlcHRoOwkJLyogYWdncmVnYXRlcyBxdWV1ZWQgKi8KLQl1MzIgYXhxX3RvdGFscXVldWVkOwkJLyogdG90YWwgZXZlciBxdWV1ZWQgKi8KLQlib29sIHN0b3BwZWQ7CQkJLyogSXMgbWFjODAyMTEgcXVldWUgc3RvcHBlZCA/ICovCi0Jc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwkvKiB2aXJ0dWFsIGFkZHIgb2YgbGFzdCBidWZmZXIqLwotCi0JLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKLQotCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCi0JICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Ci19OwotCi0jZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQotI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKLSNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCi0KLS8qIHBlciBUSUQgYWdncmVnYXRlIHR4IHN0YXRlIGZvciBhIGRlc3RpbmF0aW9uICovCi1zdHJ1Y3QgYXRoX2F0eF90aWQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHJvdW5kLXJvYmluIHRpZCBlbnRyeSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CQkvKiBwZW5kaW5nIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqdHhfYnVmW0FUSF9USURfTUFYX0JVRlNdOyAvKiBhY3RpdmUgdHggZnJhbWVzICovCi0JdTE2IHNlcV9zdGFydDsKLQl1MTYgc2VxX25leHQ7Ci0JdTE2IGJhd19zaXplOwotCWludCB0aWRubzsKLQlpbnQgYmF3X2hlYWQ7CQkJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCi0JaW50IGJhd190YWlsOwkJCS8qIG5leHQgdW51c2VkIHR4IGJ1ZmZlciBzbG90ICovCi0JaW50IHNjaGVkOwotCWludCBwYXVzZWQ7Ci0JdTggc3RhdGU7Ci0JaW50IGFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHM7Ci19OwotCi0vKiBwZXIgYWNjZXNzLWNhdGVnb3J5IGFnZ3JlZ2F0ZSB0eCBzdGF0ZSBmb3IgYSBkZXN0aW5hdGlvbiAqLwotc3RydWN0IGF0aF9hdHhfYWMgewotCWludCBzY2hlZDsJCQkvKiBkZXN0LWFjIGlzIHNjaGVkdWxlZCAqLwotCWludCBxbnVtOwkJCS8qIEgvVyBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZAotCQkJCQkgICB3aXRoIHRoaXMgQUMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiByb3VuZC1yb2JpbiB0eHEgZW50cnkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRpZF9xOwkJLyogcXVldWUgb2YgVElEcyB3aXRoIGJ1ZmZlcnMgKi8KLX07Ci0KLS8qIHBlci1mcmFtZSB0eCBjb250cm9sIGJsb2NrICovCi1zdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgewotCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JaW50IGlmX2lkOwotfTsKLQotLyogcGVyIGZyYW1lIHR4IHN0YXR1cyBibG9jayAqLwotc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7Ci0JaW50IHJldHJpZXM7CS8qIG51bWJlciBvZiByZXRyaWVzIHRvIHN1Y2Nlc3N1ZnVsbHkKLQkJCSAgIHRyYW5zbWl0IHRoaXMgZnJhbWUgKi8KLQlpbnQgZmxhZ3M7CS8qIHN0YXR1cyBvZiB0cmFuc21pdCAqLwotI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCi0jZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAotfTsKLQotLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLwotc3RydWN0IGF0aF90eF9zdGF0IHsKLQlpbnQgcnNzaTsKLQlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOwotCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOwotCWludCByYXRlaWVlZTsKLQlpbnQgcmF0ZUticHM7Ci0JaW50IHJhdGVjb2RlOwotCWludCBmbGFnczsKLQl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KLX07Ci0KLXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gewotCWludCBwYXJhbV9tYXhfZnJhbWVzOwotCWludCBwYXJhbV9tYXhfbGVuOwotCWludCBwYXJhbV9ybDsKLQlpbnQgcGFyYW1fYWw7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKLX07Ci0KLXN0cnVjdCBhdGhfbm9kZSB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07Ci0Jc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107Ci0JdTE2IG1heGFtcGR1OwotCXU4IG1wZHVkZW5zaXR5OwotfTsKLQotc3RydWN0IGF0aF90eCB7Ci0JdTE2IHNlcV9ubzsKLQl1MzIgdHhxc2V0dXA7Ci0JaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOwotCXNwaW5sb2NrX3QgdHhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7Ci0Jc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOwotCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKLX07Ci0KLXN0cnVjdCBhdGhfcnggewotCXU4IGRlZmFudDsKLQl1OCByeG90aGVyYW50OwotCXUzMiAqcnhsaW5rOwotCWludCBidWZzaXplOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKLQlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOwotCXNwaW5sb2NrX3QgcnhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7Ci0Jc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOwotfTsKLQotaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXUzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKLXZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOwotc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwotdm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwotdm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Ci12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKLXZvaWQgYXRoX3R4X25vZGVfZnJlZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Ci12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpOwotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpOwotc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKLQkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci11MzIgYXRoX3R4cV9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdTMyIGF0aF90eHFfYWdncl9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCk7Ci1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLAlzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLQotLyoqKioqKioqLwotLyogVkFQcyAqLwotLyoqKioqKioqLwotCi0vKgotICogRGVmaW5lIHRoZSBzY2hlbWUgdGhhdCB3ZSBzZWxlY3QgTUFDIGFkZHJlc3MgZm9yIG11bHRpcGxlCi0gKiBCU1Mgb24gdGhlIHNhbWUgcmFkaW8uIFRoZSB2ZXJ5IGZpcnN0IFZBUCB3aWxsIGp1c3QgdXNlIHRoZSBNQUMKLSAqIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NLiBGb3IgdGhlIG5leHQgMyBWQVBzLCB3ZSBzZXQgdGhlCi0gKiBVL0wgYml0IChiaXQgMSkgaW4gTUFDIGFkZHJlc3MsIGFuZCB1c2UgdGhlIG5leHQgdHdvIGJpdHMgYXMgdGhlCi0gKiBpbmRleCBvZiB0aGUgVkFQLgotICovCi0KLSNkZWZpbmUgQVRIX1NFVF9WQVBfQlNTSURfTUFTSyhic3NpZF9tYXNrKSBcCi0JKChic3NpZF9tYXNrKVswXSAmPSB+KCgoQVRIX0JDQlVGLTEpPDwyKXwweDAyKSkKLQotc3RydWN0IGF0aF92YXAgewotCWludCBhdl9ic2xvdDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0Jc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQmVhY29uIEhhbmRsaW5nICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKLSAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgotICovCi0jZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKLSNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTEKLSNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLwotI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKLSNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKLQotc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGR0aW1fcGVyaW9kOwotCXUxNiBibWlzc190aW1lb3V0OwotCXU4IGR0aW1fY291bnQ7Ci0JdTggdGltX29mZnNldDsKLQl1bmlvbiB7Ci0JCXU2NCBsYXN0X3RzZjsKLQkJdTggbGFzdF90c3RhbXBbOF07Ci0JfSB1OyAvKiBsYXN0IHJlY2VpdmVkIGJlYWNvbi9wcm9iZSByZXNwb25zZSB0aW1lc3RhbXAgb2YgdGhpcyBCU1MuICovCi19OwotCi1zdHJ1Y3QgYXRoX2JlYWNvbiB7Ci0JZW51bSB7Ci0JCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLwotCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLwotCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCi0JfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KLQotCXUzMiBiZWFjb25xOwotCXUzMiBibWlzc2NudDsKLQl1MzIgYXN0X2JlX3htaXQ7Ci0JdTY0IGJjX3RzdGFtcDsKLQlpbnQgYnNsb3RbQVRIX0JDQlVGXTsKLQlpbnQgc2xvdHRpbWU7Ci0JaW50IHNsb3R1cGRhdGU7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gYmVhY29uX3FpOwotCXN0cnVjdCBhdGhfZGVzY2RtYSBiZG1hOwotCXN0cnVjdCBhdGhfdHhxICpjYWJxOwotCXN0cnVjdCBsaXN0X2hlYWQgYmJ1ZjsKLX07Ci0KLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7Ci1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpOwotdm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92YXAgKmF2cCk7Ci12b2lkIGF0aF9iZWFjb25fc3luYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKTsKLQotLyoqKioqKiovCi0vKiBBTkkgKi8KLS8qKioqKioqLwotCi0vKiBBTkkgdmFsdWVzIGZvciBTVEEgb25seS4KLSAgIEZJWE1FOiBBZGQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBBUCBsYXRlciAqLwotCi0jZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgIDEwMCAgICAgLyogMTAwIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIEFOSSBwb2xsICovCi0jZGVmaW5lIEFUSF9TSE9SVF9DQUxJTlRFUlZBTCAgIDEwMDAgICAgLyogMSBzZWNvbmQgYmV0d2VlbiBjYWxpYnJhdGlvbnMgKi8KLSNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzIGJldHdlZW4gY2FsaWJyYXRpb25zICovCi0jZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMIDEyMDAwMDAgLyogMjAgbWludXRlcyBiZXR3ZWVuIGNhbGlicmF0aW9ucyAqLwotCi1zdHJ1Y3QgYXRoX2FuaSB7Ci0JYm9vbCBzY19jYWxkb25lOwotCWludDE2X3Qgc2Nfbm9pc2VfZmxvb3I7Ci0JdW5zaWduZWQgaW50IHNjX2xvbmdjYWxfdGltZXI7Ci0JdW5zaWduZWQgaW50IHNjX3Nob3J0Y2FsX3RpbWVyOwotCXVuc2lnbmVkIGludCBzY19yZXNldGNhbF90aW1lcjsKLQl1bnNpZ25lZCBpbnQgc2NfY2hlY2thbmlfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKiovCi0vKiAgIExFRCBDb250cm9sICAgICovCi0vKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX0xFRF9QSU4JMQotCi1lbnVtIGF0aF9sZWRfdHlwZSB7Ci0JQVRIX0xFRF9SQURJTywKLQlBVEhfTEVEX0FTU09DLAotCUFUSF9MRURfVFgsCi0JQVRIX0xFRF9SWAotfTsKLQotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGhfc29mdGMgKnNjOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Ci0JZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7Ci0JY2hhciBuYW1lWzMyXTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0vKiBSZmtpbGwgKi8KLSNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KLQotc3RydWN0IGF0aF9yZmtpbGwgewotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOwotCWNoYXIgcmZraWxsX25hbWVbMzJdOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqLwotLyogTWFpbiBkcml2ZXIgY29yZSAqLwotLyoqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgotICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUwotKi8KLSNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKLSNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1Ci0jZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCi0jZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KLSNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKLSNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1Ci0jZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfVkFMICAgICAgMHg3ZgotLyoKLSAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKLSAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgotICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCi0gKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KLSAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKLSAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgotICovCi0jZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KLQotI2RlZmluZSBBVEhfSUZfSURfQU5ZICAgCTB4ZmYKLSNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KLSNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKLSNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAotCi1lbnVtIFBST1RfTU9ERSB7Ci0JUFJPVF9NX05PTkUgPSAwLAotCVBST1RfTV9SVFNDVFMsCi0JUFJPVF9NX0NUU09OTFkKLX07Ci0KLSNkZWZpbmUgU0NfT1BfSU5WQUxJRAkJQklUKDApCi0jZGVmaW5lIFNDX09QX0JFQUNPTlMJCUJJVCgxKQotI2RlZmluZSBTQ19PUF9SWEFHR1IJCUJJVCgyKQotI2RlZmluZSBTQ19PUF9UWEFHR1IJCUJJVCgzKQotI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFCUJJVCg0KQotI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUCUJJVCg1KQotI2RlZmluZSBTQ19PUF9OT19SRVNFVAkJQklUKDYpCi0jZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUCUJJVCg3KQotI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRQlCSVQoOCkKLSNkZWZpbmUgU0NfT1BfUlhGTFVTSAkJQklUKDkpCi0jZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVECUJJVCgxMCkKLSNkZWZpbmUgU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQJQklUKDExKQotI2RlZmluZSBTQ19PUF9SRktJTExfU1dfQkxPQ0tFRAlCSVQoMTIpCi0jZGVmaW5lIFNDX09QX1JGS0lMTF9IV19CTE9DS0VECUJJVCgxMykKLQotc3RydWN0IGF0aF9zb2Z0YyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKLQlzdHJ1Y3QgYXRoX2hhbCAqc2NfYWg7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7Ci0Jc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JdTggc2NfY3VyYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNjX215YWRkcltFVEhfQUxFTl07Ci0JdTggc2NfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MzIgc2NfaW50cnN0YXR1czsKLQl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KLQl1MTYgc2NfY3VydHhwb3c7Ci0JdTE2IHNjX2N1cmFpZDsKLQl1MTYgc2NfY2FjaGVsc3o7Ci0JdTggc2NfbmJjbnZhcHM7Ci0JdTE2IHNjX252YXBzOwotCXU4IHNjX3R4X2NoYWlubWFzazsKLQl1OCBzY19yeF9jaGFpbm1hc2s7Ci0JdTMyIHNjX2tleW1heDsKLQlERUNMQVJFX0JJVE1BUChzY19rZXltYXAsIEFUSF9LRVlNQVgpOwotCXU4IHNjX3NwbGl0bWljOwotCXU4IHNjX3Byb3RyaXg7Ci0JZW51bSBhdGg5a19pbnQgc2NfaW1hc2s7Ci0JZW51bSBQUk9UX01PREUgc2NfcHJvdG1vZGU7Ci0JZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBzY19odF9leHRwcm90c3BhY2luZzsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgdHhfY2hhbl93aWR0aDsKLQotCXN0cnVjdCBhdGhfY29uZmlnIHNjX2NvbmZpZzsKLQlzdHJ1Y3QgYXRoX3J4IHJ4OwotCXN0cnVjdCBhdGhfdHggdHg7Ci0Jc3RydWN0IGF0aF9iZWFjb24gYmVhY29uOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICpzY192YXBzW0FUSF9CQ0JVRl07Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBVEhfQ0hBTl9NQVhdOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgdHhfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKLQlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOwotCXN0cnVjdCBhdGhfYW5pIHNjX2FuaTsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBzY19oYWxzdGF0czsKLSNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKLQlzdHJ1Y3QgYXRoOWtfZGVidWcgc2NfZGVidWc7Ci0jZW5kaWYKLX07Ci0KLWludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1pbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwotCi0vKgotICogUmVhZCBhbmQgd3JpdGUsIHRoZXkgYm90aCBzaGFyZSB0aGUgc2FtZSBsb2NrLiBXZSBkbyB0aGlzIHRvIHNlcmlhbGl6ZQotICogcmVhZHMgYW5kIHdyaXRlcyBvbiBBdGhlcm9zIDgwMi4xMW4gUENJIGRldmljZXMgb25seS4gVGhpcyBpcyByZXF1aXJlZAotICogYXMgdGhlIEZJRk8gb24gdGhlc2UgZGV2aWNlcyBjYW4gb25seSBhY2NlcHQgc2FuZWx5IDIgcmVxdWVzdHMuIEFmdGVyCi0gKiB0aGF0IHRoZSBkZXZpY2UgZ29lcyBiYW5hbmFzLiBTZXJpYWxpemluZyB0aGUgcmVhZHMvd3JpdGVzIHByZXZlbnRzIHRoaXMKLSAqIGZyb20gaGFwcGVuaW5nLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnX29mZnNldCwgdTMyIHZhbCkKLXsKLQlpZiAoYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDlrX2lvcmVhZDMyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZ19vZmZzZXQpCi17Ci0JdTMyIHZhbDsKLQlpZiAoYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotI2VuZGlmIC8qIENPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmMKaW5kZXggYTgwZWQ1Ny4uZmRmOTUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMTkgKzE0LDIxIEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJhdGg5ay5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGF0aDlrX2RlYnVnID0gREJHX0RFRkFVTFQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF0aDlrX2RlYnVnLCB1aW50LCAwKTsKIAorc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0aDlrX2RlYnVnZnNfcm9vdDsKKwogdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCWlmICghc2MpCiAJCXJldHVybjsKIAotCWlmIChzYy0+c2NfZGVidWcuZGVidWdfbWFzayAmIGRiZ19tYXNrKSB7CisJaWYgKHNjLT5kZWJ1Zy5kZWJ1Z19tYXNrICYgZGJnX21hc2spIHsKIAkJdmFfbGlzdCBhcmdzOwogCiAJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC00Niw3ICs0OCw3IEBACiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAljaGFyIGJ1ZlsxMDI0XTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAl1MzIgdmFsW0FUSDlLX05VTV9ETUFfREVCVUdfUkVHU107CkBAIC0xMzIsNDEgKzEzNCw0MSBAQAogdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGVudW0gYXRoOWtfaW50IHN0YXR1cykKIHsKIAlpZiAoc3RhdHVzKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnRvdGFsKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2srKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeG9rKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWEVPTCkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeGVvbCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWE9STikKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeG9ybisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b3JuKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9UWCkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eG9rKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudHhvaysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFhVUk4pCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudHh1cm4rKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eHVybisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfTUlCKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLm1pYisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLm1pYisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfUlhQSFkpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhwaHllcnIrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeHBoeWVycisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfUlhLQ00pCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcysrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4X2tleWNhY2hlX21pc3MrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1NXQkEpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnN3YmErKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0JNSVNTKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJtaXNzKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0JOUikKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5ibnIrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ibnIrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0NTVCkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5jc3QrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5jc3QrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0dUVCkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5ndHQrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ndHQrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RJTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50aW0rKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50aW0rKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0NBQkVORCkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5jYWJlbmQrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5jYWJlbmQrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmR0aW1zeW5jKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0RUSU0pCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmR0aW0rKzsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX2ludGVycnVwdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLApAQCAtMTc3LDQxICsxNzksNDEgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiUlgiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2spOworCQkiJThzOiAlMTB1XG4iLCAiUlgiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2spOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiUlhFT0wiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKTsKKwkJIiU4czogJTEwdVxuIiwgIlJYRU9MIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeGVvbCk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWE9STiIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4pOworCQkiJThzOiAlMTB1XG4iLCAiUlhPUk4iLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b3JuKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRYIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eG9rKTsKKwkJIiU4czogJTEwdVxuIiwgIlRYIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eG9rKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRYVVJOIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eHVybik7CisJCSIlOHM6ICUxMHVcbiIsICJUWFVSTiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudHh1cm4pOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiTUlCIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5taWIpOworCQkiJThzOiAlMTB1XG4iLCAiTUlCIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5taWIpOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiUlhQSFkiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKTsKKwkJIiU4czogJTEwdVxuIiwgIlJYUEhZIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeHBoeWVycik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWEtDTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcyk7CisJCSIlOHM6ICUxMHVcbiIsICJSWEtDTSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcyk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJTV0JBIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5zd2JhKTsKKwkJIiU4czogJTEwdVxuIiwgIlNXQkEiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnN3YmEpOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiQk1JU1MiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJtaXNzKTsKKwkJIiU4czogJTEwdVxuIiwgIkJNSVNTIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ibWlzcyk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJCTlIiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJucik7CisJCSIlOHM6ICUxMHVcbiIsICJCTlIiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJucik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJDU1QiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNzdCk7CisJCSIlOHM6ICUxMHVcbiIsICJDU1QiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNzdCk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJHVFQiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmd0dCk7CisJCSIlOHM6ICUxMHVcbiIsICJHVFQiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmd0dCk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJUSU0iLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnRpbSk7CisJCSIlOHM6ICUxMHVcbiIsICJUSU0iLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRpbSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJDQUJFTkQiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCk7CisJCSIlOHM6ICUxMHVcbiIsICJDQUJFTkQiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJEVElNU1lOQyIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMpOworCQkiJThzOiAlMTB1XG4iLCAiRFRJTVNZTkMiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmR0aW1zeW5jKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkRUSU0iLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmR0aW0pOworCQkiJThzOiAlMTB1XG4iLCAiRFRJTSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJUT1RBTCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwpOworCQkiJThzOiAlMTB1XG4iLCAiVE9UQUwiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRvdGFsKTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KQEAgLTIyMiwyOSArMjI0LDMwOCBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFCiB9OwogCitzdGF0aWMgdm9pZCBhdGhfZGVidWdfc3RhdF8xMW5fcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5zdGF0dXMucmF0ZXM7CisJaW50IGZpbmFsX3RzX2lkeCwgaWR4OworCisJdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKKwlmaW5hbF90c19pZHggPSB0eF9pbmZvX3ByaXYtPnR4LnRzX3JhdGVpbmRleDsKKwlpZHggPSBzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9bcmF0ZXNbZmluYWxfdHNfaWR4XS5pZHhdLmRvdDExcmF0ZTsKKworCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5zdWNjZXNzKys7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9kZWJ1Z19zdGF0X2xlZ2FjeV9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPnN0YXR1cy5yYXRlczsKKwlpbnQgZmluYWxfdHNfaWR4LCBpZHg7CisKKwl0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWZpbmFsX3RzX2lkeCA9IHR4X2luZm9fcHJpdi0+dHgudHNfcmF0ZWluZGV4OworCWlkeCA9IHJhdGVzW2ZpbmFsX3RzX2lkeF0uaWR4OworCisJc2MtPmRlYnVnLnN0YXRzLmxlZ2FjeV9yY3N0YXRzW2lkeF0uc3VjY2VzcysrOworfQorCit2b2lkIGF0aF9kZWJ1Z19zdGF0X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlhdGhfZGVidWdfc3RhdF8xMW5fcmMoc2MsIHNrYik7CisJZWxzZQorCQlhdGhfZGVidWdfc3RhdF9sZWdhY3lfcmMoc2MsIHNrYik7Cit9CisKKy8qIEZJWE1FOiBsZWdhY3kgcmF0ZXMsIGxhdGVyIG9uIC4uICovCit2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCisJCQkgICAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcywgdTggcGVyKQoreworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKSB7CisJCWludCBpZHggPSBzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9bcml4XS5kb3QxMXJhdGU7CisKKwkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpZHhdLnhyZXRyaWVzICs9IHhyZXRyaWVzOworCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ucmV0cmllcyArPSByZXRyaWVzOworCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ucGVyID0gcGVyOworCX0KK30KKworc3RhdGljIHNzaXplX3QgYXRoX3JlYWRfZmlsZV9zdGF0XzExbl9yYyhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzEwMjRdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWludCBpID0gMDsKKworCWxlbiArPSBzcHJpbnRmKGJ1ZiwgIiU3cyAlMTNzICU4cyAlOHMgJTZzXG5cbiIsICJSYXRlIiwgIlN1Y2Nlc3MiLAorCQkgICAgICAgIlJldHJpZXMiLCAiWFJldHJpZXMiLCAiUEVSIik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDE1OyBpKyspIHsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkJIiU1cyUzZDogJTh1ICU4dSAlOHUgJTh1XG4iLCAiTUNTIiwgaSwKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnN1Y2Nlc3MsCisJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS5yZXRyaWVzLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0ueHJldHJpZXMsCisJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS5wZXIpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgYXRoX3JlYWRfZmlsZV9zdGF0X2xlZ2FjeV9yYyhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGkgPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmLCAiJTdzICUxM3NcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIpOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5jdXJfcmF0ZV90YWJsZS0+cmF0ZV9jbnQ7IGkrKykgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiU1dTogJTEydVxuIiwKKwkJCQlzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9baV0ucmF0ZWticHMgLyAxMDAwLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5sZWdhY3lfcmNzdGF0c1tpXS5zdWNjZXNzKTsKKwl9CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9yY3N0YXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChzYy0+Y3VyX3JhdGVfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSkKKwkJcmV0dXJuIGF0aF9yZWFkX2ZpbGVfc3RhdF8xMW5fcmMoZmlsZSwgdXNlcl9idWYsIGNvdW50LCBwcG9zKTsKKwllbHNlCisJCXJldHVybiBhdGhfcmVhZF9maWxlX3N0YXRfbGVnYWN5X3JjKGZpbGUsIHVzZXJfYnVmLCBjb3VudCAscHBvcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcmNzdGF0ID0geworCS5yZWFkID0gcmVhZF9maWxlX3Jjc3RhdCwKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBhdGhfd2lwaHlfc3RhdGVfc3RyKGVudW0gYXRoX3dpcGh5X3N0YXRlIHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEFUSF9XSVBIWV9JTkFDVElWRToKKwkJcmV0dXJuICJJTkFDVElWRSI7CisJY2FzZSBBVEhfV0lQSFlfQUNUSVZFOgorCQlyZXR1cm4gIkFDVElWRSI7CisJY2FzZSBBVEhfV0lQSFlfUEFVU0lORzoKKwkJcmV0dXJuICJQQVVTSU5HIjsKKwljYXNlIEFUSF9XSVBIWV9QQVVTRUQ6CisJCXJldHVybiAiUEFVU0VEIjsKKwljYXNlIEFUSF9XSVBIWV9TQ0FOOgorCQlyZXR1cm4gIlNDQU4iOworCX0KKwlyZXR1cm4gIj8iOworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfd2lwaHkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWludCBpOworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkicHJpbWFyeTogJXMgKCVzIGNoYW49JWQgaHQ9JWQpXG4iLAorCQkJd2lwaHlfbmFtZShzYy0+cHJpX3dpcGh5LT5ody0+d2lwaHkpLAorCQkJYXRoX3dpcGh5X3N0YXRlX3N0cihzYy0+cHJpX3dpcGh5LT5zdGF0ZSksCisJCQlzYy0+cHJpX3dpcGh5LT5jaGFuX2lkeCwgc2MtPnByaV93aXBoeS0+Y2hhbl9pc19odCk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkJInNlY29uZGFyeTogJXMgKCVzIGNoYW49JWQgaHQ9JWQpXG4iLAorCQkJCXdpcGh5X25hbWUoYXBoeS0+aHctPndpcGh5KSwKKwkJCQlhdGhfd2lwaHlfc3RhdGVfc3RyKGFwaHktPnN0YXRlKSwKKwkJCQlhcGh5LT5jaGFuX2lkeCwgYXBoeS0+Y2hhbl9pc19odCk7CisJfQorCisJcHV0X3VuYWxpZ25lZF9sZTMyKFJFR19SRUFEKHNjLT5zY19haCwgQVJfU1RBX0lEMCksIGFkZHIpOworCXB1dF91bmFsaWduZWRfbGUxNihSRUdfUkVBRChzYy0+c2NfYWgsIEFSX1NUQV9JRDEpICYgMHhmZmZmLCBhZGRyICsgNCk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiYWRkcjogJXBNXG4iLCBhZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMzIoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9CU1NNU0tMKSwgYWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KFJFR19SRUFEKHNjLT5zY19haCwgQVJfQlNTTVNLVSkgJiAweGZmZmYsIGFkZHIgKyA0KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJhZGRybWFzazogJXBNXG4iLCBhZGRyKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfd2lwaHkgKiBnZXRfd2lwaHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJaWYgKHN0cmNtcChuYW1lLCB3aXBoeV9uYW1lKHNjLT5wcmlfd2lwaHktPmh3LT53aXBoeSkpID09IDApCisJCXJldHVybiBzYy0+cHJpX3dpcGh5OworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSAmJiBzdHJjbXAobmFtZSwgd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpKSA9PSAwKQorCQkJcmV0dXJuIGFwaHk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlbF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9kZWwoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgcGF1c2Vfd2lwaHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGdldF93aXBoeShzYywgbmFtZSk7CisJaWYgKCFhcGh5KQorCQlyZXR1cm4gLUVOT0VOVDsKKwlyZXR1cm4gYXRoOWtfd2lwaHlfcGF1c2UoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgdW5wYXVzZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworfQorCitzdGF0aWMgaW50IHNlbGVjdF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9zZWxlY3QoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc2NoZWR1bGVfd2lwaHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGNvbnN0IGNoYXIgKm1zZWMpCit7CisJYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzYywgc2ltcGxlX3N0cnRvdWwobXNlYywgTlVMTCwgMCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3dpcGh5KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTBdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJYnVmW2xlbiAtIDFdID0gJ1wwJzsKKworCWlmIChzdHJuY21wKGJ1ZiwgImFkZCIsIDMpID09IDApIHsKKwkJaW50IHJlcyA9IGF0aDlrX3dpcGh5X2FkZChzYyk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiZGVsPSIsIDQpID09IDApIHsKKwkJaW50IHJlcyA9IGRlbF93aXBoeShzYywgYnVmICsgNCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAicGF1c2U9IiwgNikgPT0gMCkgeworCQlpbnQgcmVzID0gcGF1c2Vfd2lwaHkoc2MsIGJ1ZiArIDYpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CisJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZiwgInVucGF1c2U9IiwgOCkgPT0gMCkgeworCQlpbnQgcmVzID0gdW5wYXVzZV93aXBoeShzYywgYnVmICsgOCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic2VsZWN0PSIsIDcpID09IDApIHsKKwkJaW50IHJlcyA9IHNlbGVjdF93aXBoeShzYywgYnVmICsgNyk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic2NoZWR1bGU9IiwgOSkgPT0gMCkgeworCQlpbnQgcmVzID0gc2NoZWR1bGVfd2lwaHkoc2MsIGJ1ZiArIDkpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CisJfSBlbHNlCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc193aXBoeSA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV93aXBoeSwKKwkud3JpdGUgPSB3cml0ZV9maWxlX3dpcGh5LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCisKIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXNjLT5zY19kZWJ1Zy5kZWJ1Z19tYXNrID0gYXRoOWtfZGVidWc7CisJc2MtPmRlYnVnLmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKIAotCXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOwotCWlmICghc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCkKKwlzYy0+ZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKKwkJCQkJCSAgICAgIGF0aDlrX2RlYnVnZnNfcm9vdCk7CisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19waHkpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSksCi0JCQkJCQkgICAgICBzYy0+c2NfZGVidWcuZGVidWdmc19yb290KTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKKwlzYy0+ZGVidWcuZGVidWdmc19kbWEgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkbWEiLCBTX0lSVUdPLAorCQkJCSAgICAgICBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc19kbWEpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfZG1hKQogCQlnb3RvIGVycjsKIAotCXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2RtYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVR08sCi0JCQkJICAgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX2RtYSk7Ci0JaWYgKCFzYy0+c2NfZGVidWcuZGVidWdmc19kbWEpCi0JCWdvdG8gZXJyOwotCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfaW50ZXJydXB0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaW50ZXJydXB0IiwKKwlzYy0+ZGVidWcuZGVidWdmc19pbnRlcnJ1cHQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLAogCQkJCQkJICAgICBTX0lSVUdPLAotCQkJCQkJICAgICBzYy0+c2NfZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKIAkJCQkJCSAgICAgc2MsICZmb3BzX2ludGVycnVwdCk7Ci0JaWYgKCFzYy0+c2NfZGVidWcuZGVidWdmc19pbnRlcnJ1cHQpCisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19pbnRlcnJ1cHQpCisJCWdvdG8gZXJyOworCisJc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmNzdGF0IiwKKwkJCQkJCSAgU19JUlVHTywKKwkJCQkJCSAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJCQkJICBzYywgJmZvcHNfcmNzdGF0KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCkKKwkJZ290byBlcnI7CisKKwlzYy0+ZGVidWcuZGVidWdmc193aXBoeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoCisJCSJ3aXBoeSIsIFNfSVJVR08gfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkmZm9wc193aXBoeSk7CisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc193aXBoeSkKIAkJZ290byBlcnI7CiAKIAlyZXR1cm4gMDsKQEAgLTI1NSw4ICs1MzYsMjQgQEAKIAogdm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCWRlYnVnZnNfcmVtb3ZlKHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfZG1hKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+c2NfZGVidWcuZGVidWdmc19waHkpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfZG1hKTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19waHkpOworfQorCitpbnQgYXRoOWtfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCkKK3sKKwlhdGg5a19kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOworCWlmICghYXRoOWtfZGVidWdmc19yb290KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpCit7CisJZGVidWdmc19yZW1vdmUoYXRoOWtfZGVidWdmc19yb290KTsKKwlhdGg5a19kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwZTU0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIERFQlVHX0gKKyNkZWZpbmUgREVCVUdfSAorCitlbnVtIEFUSF9ERUJVRyB7CisJQVRIX0RCR19SRVNFVAkJPSAweDAwMDAwMDAxLAorCUFUSF9EQkdfUkVHX0lPCQk9IDB4MDAwMDAwMDIsCisJQVRIX0RCR19RVUVVRQkJPSAweDAwMDAwMDA0LAorCUFUSF9EQkdfRUVQUk9NCQk9IDB4MDAwMDAwMDgsCisJQVRIX0RCR19DQUxJQlJBVEUJPSAweDAwMDAwMDEwLAorCUFUSF9EQkdfQ0hBTk5FTAkJPSAweDAwMDAwMDIwLAorCUFUSF9EQkdfSU5URVJSVVBUCT0gMHgwMDAwMDA0MCwKKwlBVEhfREJHX1JFR1VMQVRPUlkJPSAweDAwMDAwMDgwLAorCUFUSF9EQkdfQU5JCQk9IDB4MDAwMDAxMDAsCisJQVRIX0RCR19QT1dFUl9NR01UCT0gMHgwMDAwMDIwMCwKKwlBVEhfREJHX1hNSVQJCT0gMHgwMDAwMDQwMCwKKwlBVEhfREJHX0JFQUNPTgkJPSAweDAwMDAxMDAwLAorCUFUSF9EQkdfQ09ORklHCQk9IDB4MDAwMDIwMDAsCisJQVRIX0RCR19LRVlDQUNIRQk9IDB4MDAwMDQwMDAsCisJQVRIX0RCR19GQVRBTAkJPSAweDAwMDA4MDAwLAorCUFUSF9EQkdfQU5ZCQk9IDB4ZmZmZmZmZmYKK307CisKKyNkZWZpbmUgREJHX0RFRkFVTFQgKEFUSF9EQkdfRkFUQUwpCisKKyNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKKworLyoqCisgKiBzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyAtIENvbnRhaW5zIHN0YXRpc3RpY3MgYWJvdXQgaW50ZXJydXB0cworICogQHRvdGFsOiBUb3RhbCBuby4gb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgc28gZmFyCisgKiBAcnhvazogUlggd2l0aCBubyBlcnJvcnMKKyAqIEByeGVvbDogUlggd2l0aCBubyBtb3JlIFJYREVTQyBhdmFpbGFibGUKKyAqIEByeG9ybjogUlggRklGTyBvdmVycnVuCisgKiBAdHhvazogVFggY29tcGxldGVkIGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZQorICogQHR4dXJuOiBUWCBGSUZPIHVuZGVycnVuCisgKiBAbWliOiBNSUIgcmVncyByZWFjaGluZyBpdHMgdGhyZXNob2xkCisgKiBAcnhwaHllcnI6IFJYIHdpdGggcGh5IGVycm9ycworICogQHJ4X2tleWNhY2hlX21pc3M6IFJYIHdpdGgga2V5IGNhY2hlIG1pc3NlcworICogQHN3YmE6IFNvZnR3YXJlIEJlYWNvbiBBbGVydAorICogQGJtaXNzOiBCZWFjb24gTWlzcworICogQGJucjogQmVhY29uIE5vdCBSZWFkeQorICogQGNzdDogQ2FycmllciBTZW5zZSBUSW1lb3V0CisgKiBAZ3R0OiBHbG9iYWwgVFggVGltZW91dAorICogQHRpbTogUlggYmVhY29uIFRJTSBvY2N1cnJlbmNlCisgKiBAY2FiZW5kOiBSWCBFbmQgb2YgQ0FCIHRyYWZmaWMKKyAqIEBkdGltc3luYzogRFRJTSBzeW5jIGxvc3NhZ2UKKyAqIEBkdGltOiBSWCBCZWFjb24gd2l0aCBEVElNCisgKi8KK3N0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIHsKKwl1MzIgdG90YWw7CisJdTMyIHJ4b2s7CisJdTMyIHJ4ZW9sOworCXUzMiByeG9ybjsKKwl1MzIgdHhvazsKKwl1MzIgdHhlb2w7CisJdTMyIHR4dXJuOworCXUzMiBtaWI7CisJdTMyIHJ4cGh5ZXJyOworCXUzMiByeF9rZXljYWNoZV9taXNzOworCXUzMiBzd2JhOworCXUzMiBibWlzczsKKwl1MzIgYm5yOworCXUzMiBjc3Q7CisJdTMyIGd0dDsKKwl1MzIgdGltOworCXUzMiBjYWJlbmQ7CisJdTMyIGR0aW1zeW5jOworCXUzMiBkdGltOworfTsKKworc3RydWN0IGF0aF9sZWdhY3lfcmNfc3RhdHMgeworCXUzMiBzdWNjZXNzOworfTsKKworc3RydWN0IGF0aF8xMW5fcmNfc3RhdHMgeworCXUzMiBzdWNjZXNzOworCXUzMiByZXRyaWVzOworCXUzMiB4cmV0cmllczsKKwl1OCBwZXI7Cit9OworCitzdHJ1Y3QgYXRoX3N0YXRzIHsKKwlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7CisJc3RydWN0IGF0aF9sZWdhY3lfcmNfc3RhdHMgbGVnYWN5X3Jjc3RhdHNbMTJdOwkvKiBtYXgoMTFhLDExYiwxMWcpICovCisJc3RydWN0IGF0aF8xMW5fcmNfc3RhdHMgbl9yY3N0YXRzWzE2XTsJCS8qIDAuLjE1IE1DUyByYXRlcyAqLworfTsKKworc3RydWN0IGF0aDlrX2RlYnVnIHsKKwlpbnQgZGVidWdfbWFzazsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OworCXN0cnVjdCBhdGhfc3RhdHMgc3RhdHM7Cit9OworCit2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKTsKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCk7Cit2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAorCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssCisJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfaW50ZXJydXB0KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgZW51bSBhdGg5a19pbnQgc3RhdHVzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCQkJICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQVRIOUtfREVCVUcgKi8KKworI2VuZGlmIC8qIERFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKaW5kZXggYWNkNmM1My4uZmZjMzZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCwxMiArMTQsOSBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgIHUzMiByZWcsIHUzMiBtYXNrLAogCQkJCSAgICAgIHUzMiBzaGlmdCwgdTMyIHZhbCkKIHsKQEAgLTMwLDcgKzI3LDcgQEAKIAogCVJFR19XUklURShhaCwgcmVnLCByZWdWYWwpOwogCi0JaWYgKGFoLT5haF9jb25maWcuYW5hbG9nX3NoaWZ0cmVnKQorCWlmIChhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykKIAkJdWRlbGF5KDEwMCk7CiAKIAlyZXR1cm47CkBAIC05MSw2MSArODgsMjYxIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19udnJhbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCiB7Ci0JKHZvaWQpUkVHX1JFQUQoYWgsIEFSNTQxNl9FRVBST01fT0ZGU0VUICsgKG9mZiA8PCBBUjU0MTZfRUVQUk9NX1MpKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKIAotCWlmICghYXRoOWtfaHdfd2FpdChhaCwKLQkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQSwKLQkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9CVVNZIHwKLQkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUywgMCkpIHsKLQkJcmV0dXJuIGZhbHNlOworCXJldHVybiBzYy0+YnVzX29wcy0+ZWVwcm9tX3JlYWQoYWgsIG9mZiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAorCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAorCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCit7CisJdTE2IGksIGs7CisJdTggY3VyclB3ciA9IHB3ck1pbjsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwOworCisJZm9yIChpID0gMDsgaSA8PSAocHdyTWF4IC0gcHdyTWluKSAvIDI7IGkrKykgeworCQlhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoY3VyclB3ciwgcFB3ckxpc3QsCisJCQkJCSAgICAgICBudW1JbnRlcmNlcHRzLCAmKGlkeEwpLAorCQkJCQkgICAgICAgJihpZHhSKSk7CisJCWlmIChpZHhSIDwgMSkKKwkJCWlkeFIgPSAxOworCQlpZiAoaWR4TCA9PSBudW1JbnRlcmNlcHRzIC0gMSkKKwkJCWlkeEwgPSAodTE2KSAobnVtSW50ZXJjZXB0cyAtIDIpOworCQlpZiAocFB3ckxpc3RbaWR4TF0gPT0gcFB3ckxpc3RbaWR4Ul0pCisJCQlrID0gcFZwZExpc3RbaWR4TF07CisJCWVsc2UKKwkJCWsgPSAodTE2KSgoKGN1cnJQd3IgLSBwUHdyTGlzdFtpZHhMXSkgKiBwVnBkTGlzdFtpZHhSXSArCisJCQkJICAgKHBQd3JMaXN0W2lkeFJdIC0gY3VyclB3cikgKiBwVnBkTGlzdFtpZHhMXSkgLworCQkJCSAgKHBQd3JMaXN0W2lkeFJdIC0gcFB3ckxpc3RbaWR4TF0pKTsKKwkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7CisJCWN1cnJQd3IgKz0gMjsKIAl9CiAKLQkqZGF0YSA9IE1TKFJFR19SRUFEKGFoLCBBUl9FRVBST01fU1RBVFVTX0RBVEEpLAotCQkgICBBUl9FRVBST01fU1RBVFVTX0RBVEFfVkFMKTsKLQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2ZsYXNoX21hcChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwb3dJbmZvLAorCQkJCSAgICAgIHUxNiBudW1DaGFubmVscywKKwkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBOZXdQb3dlciwKKwkJCQkgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNFeHRUYXJnZXQpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJdTE2IGNsbywgY2hpOworCWludCBpOworCWludCBtYXRjaEluZGV4ID0gLTEsIGxvd0luZGV4ID0gLTE7CisJdTE2IGZyZXE7CiAKLQlhaHAtPmFoX2NhbF9tZW0gPSBpb3JlbWFwKEFSNTQxNl9FRVBST01fU1RBUlRfQUREUiwgQVI1NDE2X0VFUFJPTV9NQVgpOworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKwlmcmVxID0gKGlzRXh0VGFyZ2V0KSA/IGNlbnRlcnMuZXh0X2NlbnRlciA6IGNlbnRlcnMuY3RsX2NlbnRlcjsKIAotCWlmICghYWhwLT5haF9jYWxfbWVtKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJjYW5ub3QgcmVtYXAgZWVwcm9tIHJlZ2lvbiBcbiIpOwotCQlyZXR1cm4gLUVJTzsKKwlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwKKwkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgeworCQltYXRjaEluZGV4ID0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgorCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7CisJCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCQkJbWF0Y2hJbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgorCQkJCSAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAorCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKKwkJCQlsb3dJbmRleCA9IGkgLSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgobWF0Y2hJbmRleCA9PSAtMSkgJiYgKGxvd0luZGV4ID09IC0xKSkKKwkJCW1hdGNoSW5kZXggPSBpIC0gMTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlpZiAobWF0Y2hJbmRleCAhPSAtMSkgeworCQkqcE5ld1Bvd2VyID0gcG93SW5mb1ttYXRjaEluZGV4XTsKKwl9IGVsc2UgeworCQljbG8gPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleF0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQljaGkgPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleCArIDFdLmJDaGFubmVsLAorCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtUmF0ZXM7IGkrKykgeworCQkJcE5ld1Bvd2VyLT50UG93MnhbaV0gPQorCQkJCSh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLCBjbG8sIGNoaSwKKwkJCQkJCXBvd0luZm9bbG93SW5kZXhdLnRQb3cyeFtpXSwKKwkJCQkJCXBvd0luZm9bbG93SW5kZXggKyAxXS50UG93MnhbaV0pOworCQl9CisJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19mbGFzaF9yZWFkKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQorc3RhdGljIHZvaWQgYXRoOWtfZ2V0X3R4Z2Fpbl9pbmRleChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCXN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqcmF3RGF0YXNldE9wTG9vcCwKKwkJdTggKmNhbENoYW5zLCAgdTE2IGF2YWlsUGllcnMsIHU4ICpwd3IsIHU4ICpwY2RhY0lkeCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXU4IHBjZGFjLCBpID0gMDsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKKwlib29sIG1hdGNoOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKIAotCSpkYXRhID0gaW9yZWFkMTYoYWhwLT5haF9jYWxfbWVtICsgb2ZmKTsKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKQorCQlpZiAoY2FsQ2hhbnNbbnVtUGllcnNdID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKworCW1hdGNoID0gYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KAorCQkJKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJCWNhbENoYW5zLCBudW1QaWVycywgJmlkeEwsICZpZHhSKTsKKwlpZiAobWF0Y2gpIHsKKwkJcGNkYWMgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnBjZGFjWzBdWzBdOworCQkqcHdyID0gcmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF07CisJfSBlbHNlIHsKKwkJcGNkYWMgPSByYXdEYXRhc2V0T3BMb29wW2lkeFJdLnBjZGFjWzBdWzBdOworCQkqcHdyID0gKHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucHdyUGRnWzBdWzBdICsKKwkJCQlyYXdEYXRhc2V0T3BMb29wW2lkeFJdLnB3clBkZ1swXVswXSkvMjsKKwl9CisKKwl3aGlsZSAocGNkYWMgPiBhaC0+b3JpZ2luYWxHYWluW2ldICYmCisJCQlpIDwgKEFSOTI4MF9UWF9HQUlOX1RBQkxFX1NJWkUgLSAxKSkKKwkJaSsrOworCisJKnBjZGFjSWR4ID0gaTsKKwlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19udnJhbV9yZWFkKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQorc3RhdGljIHZvaWQgYXRoOWtfb2xjX2dldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJdTMyIGluaXRUeEdhaW4sCisJCQkJaW50IHR4UG93ZXIsCisJCQkJdTggKnBQREFEQ1ZhbHVlcykKIHsKLQlpZiAoYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkKLQkJcmV0dXJuIGF0aDlrX2h3X2ZsYXNoX3JlYWQoYWgsIG9mZiwgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gYXRoOWtfaHdfZWVwcm9tX3JlYWQoYWgsIG9mZiwgZGF0YSk7CisJdTMyIGk7CisJdTMyIG9mZnNldDsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8wLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDZfMSwKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERSwgMyk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDcsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU4sIGluaXRUeEdhaW4pOworCisJb2Zmc2V0ID0gdHhQb3dlcjsKKwlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVM7IGkrKykKKwkJaWYgKGkgPCBvZmZzZXQpCisJCQlwUERBRENWYWx1ZXNbaV0gPSAweDA7CisJCWVsc2UKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4RkY7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2ZpbGxfNGtfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKKworCisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBvd0luZm8sCisJCQkJICAgICAgIHUxNiBudW1DaGFubmVscywKKwkJCQkgICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBOZXdQb3dlciwKKwkJCQkgICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzSHQ0MFRhcmdldCkKK3sKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJdTE2IGNsbywgY2hpOworCWludCBpOworCWludCBtYXRjaEluZGV4ID0gLTEsIGxvd0luZGV4ID0gLTE7CisJdTE2IGZyZXE7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisJZnJlcSA9IGlzSHQ0MFRhcmdldCA/IGNlbnRlcnMuc3ludGhfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOworCisJaWYgKGZyZXEgPD0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bMF0uYkNoYW5uZWwsIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKKwkJbWF0Y2hJbmRleCA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgKGkgPCBudW1DaGFubmVscykgJiYKKwkJCSAgICAgKHBvd0luZm9baV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgeworCQkJaWYgKGZyZXEgPT0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgeworCQkJCW1hdGNoSW5kZXggPSBpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgJiYKKwkJCQkgICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKKwkJCQkJbG93SW5kZXggPSBpIC0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQl9CisJCWlmICgobWF0Y2hJbmRleCA9PSAtMSkgJiYgKGxvd0luZGV4ID09IC0xKSkKKwkJCW1hdGNoSW5kZXggPSBpIC0gMTsKKwl9CisKKwlpZiAobWF0Y2hJbmRleCAhPSAtMSkgeworCQkqcE5ld1Bvd2VyID0gcG93SW5mb1ttYXRjaEluZGV4XTsKKwl9IGVsc2UgeworCQljbG8gPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleF0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQljaGkgPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleCArIDFdLmJDaGFubmVsLAorCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtUmF0ZXM7IGkrKykgeworCQkJcE5ld1Bvd2VyLT50UG93MnhbaV0gPSAodTgpYXRoOWtfaHdfaW50ZXJwb2xhdGUoZnJlcSwKKwkJCQkJCWNsbywgY2hpLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKKwkJCQkgICAgICAgYm9vbCBpczJHSHosIGludCBudW1fYmFuZF9lZGdlcykKK3sKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyAoaSA8IG51bV9iYW5kX2VkZ2VzKSAmJgorCQkgICAgIChwUmRFZGdlc1Bvd2VyW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKKwkJaWYgKGZyZXEgPT0gYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsIGlzMkdIeikpIHsKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0gcFJkRWRnZXNQb3dlcltpXS50UG93ZXI7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICgoaSA+IDApICYmCisJCQkgICAoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2ldLmJDaGFubmVsLAorCQkJCQkJICAgICAgaXMyR0h6KSkpIHsKKwkJCWlmIChhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpIC0gMV0uYkNoYW5uZWwsCisJCQkJCSAgICAgICBpczJHSHopIDwgZnJlcSAmJgorCQkJICAgIHBSZEVkZ2VzUG93ZXJbaSAtIDFdLmZsYWcpIHsKKwkJCQl0d2ljZU1heEVkZ2VQb3dlciA9CisJCQkJCXBSZEVkZ2VzUG93ZXJbaSAtIDFdLnRQb3dlcjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHR3aWNlTWF4RWRnZVBvd2VyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVFUFJPTSBPcGVyYXRpb25zIGZvciA0SyBzaXplZCBjYXJkcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV92ZXIoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKTsKK30KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3XzRrX2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQogewogI2RlZmluZSBTSVpFX0VFUFJPTV80SyAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQl1MTYgKmVlcF9kYXRhOworCXUxNiAqZWVwX2RhdGEgPSAodTE2ICopJmFoLT5lZXByb20ubWFwNGs7CiAJaW50IGFkZHIsIGVlcF9zdGFydF9sb2MgPSAwOwogCiAJZWVwX3N0YXJ0X2xvYyA9IDY0OwpAQCAtMTU1LDggKzM1Miw2IEBACiAJCQkiUmVhZGluZyBmcm9tIEVFUFJPTSwgbm90IGZsYXNoXG4iKTsKIAl9CiAKLQllZXBfZGF0YSA9ICh1MTYgKillZXA7Ci0KIAlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fNEs7IGFkZHIrKykgewogCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBlZXBfc3RhcnRfbG9jLCBlZXBfZGF0YSkpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKQEAgLTE2NSwxODAgKzM2MCwxNiBAQAogCQl9CiAJCWVlcF9kYXRhKys7CiAJfQorCiAJcmV0dXJuIHRydWU7CiAjdW5kZWYgU0laRV9FRVBST01fNEsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF9kZWZfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLSNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXUxNiAqZWVwX2RhdGE7Ci0JaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7Ci0KLQllZXBfZGF0YSA9ICh1MTYgKillZXA7Ci0KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKLQkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCi0JCQkJCSBlZXBfZGF0YSkpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJZWVwX2RhdGErKzsKLQl9Ci0JcmV0dXJuIHRydWU7Ci0jdW5kZWYgU0laRV9FRVBST01fREVGCi19Ci0KLXN0YXRpYyBib29sICgqYXRoOWtfZmlsbF9lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2ZpbGxfZGVmX2VlcHJvbSwKLQlhdGg5a19od19maWxsXzRrX2VlcHJvbQotfTsKLQotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2ZpbGxfZWVwcm9tW2FocC0+YWhfZWVwX21hcF0oYWgpOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICopICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOwotCXUzMiBzdW0gPSAwLCBlbDsKLQlib29sIG5lZWRfc3dhcCA9IGZhbHNlOwotCWludCBpLCBhZGRyLCBzaXplOwotCi0JaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwKLQkJCQkgJm1hZ2ljKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpOwotCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaHAtPmFoX2VlcHJvbSk7Ci0KLQkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKLQkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7Ci0JCQkJCSplZXBkYXRhID0gdGVtcDsKLQkJCQkJZWVwZGF0YSsrOwotCi0JCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJCSIweCUwNFggICIsICplZXBkYXRhKTsKLQotCQkJCQlpZiAoKChhZGRyICsgMSkgJSA2KSA9PSAwKQotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19FRVBST00sICJcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKLQkJCQkJImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCX0KLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKLQkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7Ci0KLQlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGg7Ci0KLQlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSkKLQkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpOwotCWVsc2UKLQkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwotCi0JZWVwZGF0YSA9ICh1MTYgKikoJmFocC0+YWhfZWVwcm9tKTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQotCQlzdW0gXj0gKmVlcGRhdGErKzsKLQotCWlmIChuZWVkX3N3YXApIHsKLQkJdTMyIGludGVnZXIsIGo7Ci0JCXUxNiB3b3JkOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcgXG4iKTsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7Ci0JCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKLQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKLQkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7Ci0JCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7Ci0JCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7Ci0JCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHN1bSAhPSAweGZmZmYgfHwgYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKLQkgICAgYXI1NDE2X2dldF9lZXBfcmV2KGFocCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAotCQkJc3VtLCBhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2NoZWNrXzRrX2VlcHJvbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKICNkZWZpbmUgRUVQUk9NXzRLX1NJWkUgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKikgJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCQkoc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKikgJmFoLT5lZXByb20ubWFwNGs7CiAJdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOwogCXUzMiBzdW0gPSAwLCBlbDsKIAlib29sIG5lZWRfc3dhcCA9IGZhbHNlOwpAQCAtMzQ2LDM4ICszNzcsMzAgQEAKIAogCiAJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7Ci0KIAkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwKIAkJCQkJICZtYWdpYykpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAogCQkJCSJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKIAogCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewogCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKIAogCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CiAJCQkJbmVlZF9zd2FwID0gdHJ1ZTsKLQkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFocC0+YWhfZWVwcm9tKTsKKwkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFoLT5lZXByb20pOwogCiAJCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IEVFUFJPTV80S19TSVpFOyBhZGRyKyspIHsKIAkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7CiAJCQkJCSplZXBkYXRhID0gdGVtcDsKIAkJCQkJZWVwZGF0YSsrOwotCi0JCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJCSIweCUwNFggICIsICplZXBkYXRhKTsKLQotCQkJCQlpZiAoKChhZGRyICsgMSkgJSA2KSA9PSAwKQotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19FRVBST00sICJcbiIpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAogCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKIAkJCQkJImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM4OSwxNiArNDEyLDE2IEBACiAJCW5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOwogCiAJaWYgKG5lZWRfc3dhcCkKLQkJZWwgPSBzd2FiMTYoYWhwLT5haF9lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOworCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKIAllbHNlCi0JCWVsID0gYWhwLT5haF9lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGg7CisJCWVsID0gYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKIAotCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpKQorCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykpCiAJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpOwogCWVsc2UKIAkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwogCi0JZWVwZGF0YSA9ICh1MTYgKikoJmFocC0+YWhfZWVwcm9tKTsKKwllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKIAkJc3VtIF49ICplZXBkYXRhKys7CkBAIC00MDgsNyArNDMxLDcgQEAKIAkJdTE2IHdvcmQ7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZyBcbiIpOworCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZ1xuIik7CiAKIAkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKIAkJZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9IHdvcmQ7CkBAIC00NDgsMTEgKzQ3MSwxMSBAQAogCQl9CiAJfQogCi0JaWYgKHN1bSAhPSAweGZmZmYgfHwgYXI1NDE2X2dldF9lZXA0a192ZXIoYWhwKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAotCSAgICBhcjU0MTZfZ2V0X2VlcDRrX3JldihhaHApIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAorCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKIAkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAotCQkJc3VtLCBhcjU0MTZfZ2V0X2VlcDRrX3ZlcihhaHApKTsKKwkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDYwLDQ4ICs0ODMsNTAgQEAKICN1bmRlZiBFRVBST01fNEtfU0laRQogfQogCi1zdGF0aWMgaW50ICgqYXRoOWtfY2hlY2tfZWVwcm9tW10pIChzdHJ1Y3QgYXRoX2hhbCAqKSA9IHsKLQlhdGg5a19od19jaGVja19kZWZfZWVwcm9tLAotCWF0aDlrX2h3X2NoZWNrXzRrX2VlcHJvbQotfTsKLQotc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaHdfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB1MzIgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyXzRrICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CiAKLQlyZXR1cm4gYXRoOWtfY2hlY2tfZWVwcm9tW2FocC0+YWhfZWVwX21hcF0oYWgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXRoOWtfaHdfZmlsbF92cGRfdGFibGUodTggcHdyTWluLCB1OCBwd3JNYXgsIHU4ICpwUHdyTGlzdCwKLQkJCQkJICAgdTggKnBWcGRMaXN0LCB1MTYgbnVtSW50ZXJjZXB0cywKLQkJCQkJICAgdTggKnBSZXRWcGRMaXN0KQotewotCXUxNiBpLCBrOwotCXU4IGN1cnJQd3IgPSBwd3JNaW47Ci0JdTE2IGlkeEwgPSAwLCBpZHhSID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPD0gKHB3ck1heCAtIHB3ck1pbikgLyAyOyBpKyspIHsKLQkJYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KGN1cnJQd3IsIHBQd3JMaXN0LAotCQkJCQkgICAgICAgbnVtSW50ZXJjZXB0cywgJihpZHhMKSwKLQkJCQkJICAgICAgICYoaWR4UikpOwotCQlpZiAoaWR4UiA8IDEpCi0JCQlpZHhSID0gMTsKLQkJaWYgKGlkeEwgPT0gbnVtSW50ZXJjZXB0cyAtIDEpCi0JCQlpZHhMID0gKHUxNikgKG51bUludGVyY2VwdHMgLSAyKTsKLQkJaWYgKHBQd3JMaXN0W2lkeExdID09IHBQd3JMaXN0W2lkeFJdKQotCQkJayA9IHBWcGRMaXN0W2lkeExdOwotCQllbHNlCi0JCQlrID0gKHUxNikoKChjdXJyUHdyIC0gcFB3ckxpc3RbaWR4TF0pICogcFZwZExpc3RbaWR4Ul0gKwotCQkJCSAgIChwUHdyTGlzdFtpZHhSXSAtIGN1cnJQd3IpICogcFZwZExpc3RbaWR4TF0pIC8KLQkJCQkgIChwUHdyTGlzdFtpZHhSXSAtIHBQd3JMaXN0W2lkeExdKSk7Ci0JCXBSZXRWcGRMaXN0W2ldID0gKHU4KSBrOwotCQljdXJyUHdyICs9IDI7CisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRUVQX05GVEhSRVNIXzI6CisJCXJldHVybiBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMCk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07CisJY2FzZSBBUl9FRVBST01fTUFDKDEpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOworCWNhc2UgQVJfRUVQUk9NX01BQygyKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKKwljYXNlIEVFUF9SRUdfMDoKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07CisJY2FzZSBFRVBfUkVHXzE6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOworCWNhc2UgRUVQX09QX0NBUDoKKwkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7CisJY2FzZSBFRVBfT1BfTU9ERToKKwkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOworCWNhc2UgRUVQX1JGX1NJTEVOVDoKKwkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKKwljYXNlIEVFUF9PQl8yOgorCQlyZXR1cm4gcE1vZGFsLT5vYl8wMTsKKwljYXNlIEVFUF9EQl8yOgorCQlyZXR1cm4gcE1vZGFsLT5kYjFfMDE7CisJY2FzZSBFRVBfTUlOT1JfUkVWOgorCQlyZXR1cm4gcEJhc2UtPnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLOworCWNhc2UgRUVQX1RYX01BU0s6CisJCXJldHVybiBwQmFzZS0+dHhNYXNrOworCWNhc2UgRUVQX1JYX01BU0s6CisJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX0ZSQUNfTl81RzoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CiAJfQotCi0JcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF80a19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF80a19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFTZXQsCiAJCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCkBAIC02MDUsNyArNjMwLDcgQEAKIAkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQogCQkJbWluKCh1MTYpQVI1NDE2X01BWF9SQVRFX1BPV0VSLCBwUGRHYWluQm91bmRhcmllc1tpXSk7CiAKLQkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgeworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKIAkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKIAkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CiAJCX0gZWxzZSB7CkBAIC02NDQsNyArNjY5LDcgQEAKIAkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7CiAJCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKIAotCQlpZiAodGd0SW5kZXggPiBtYXhJbmRleCkgeworCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKIAkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCiAJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKIAkJCQl0bXBWYWwgPSAoaW50MTZfdCkgVE1QX1ZBTF9WUERfVEFCTEU7CkBAIC02NjksNyArNjk0LDEyNTEgQEAKICN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKnBSYXdEYXRhc2V0OworCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKKwl1MTYgcGRHYWluT3ZlcmxhcF90MjsKKwlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOworCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IG51bVBpZXJzLCBpLCBqOworCWludDE2X3QgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdID0geyAwLCAwIH07CisJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OworCisJeHBkTWFzayA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci54cGRHYWluOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlwZEdhaW5PdmVybGFwX3QyID0KKwkJCXBFZXBEYXRhLT5tb2RhbEhlYWRlci5wZEdhaW5PdmVybGFwOworCX0gZWxzZSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCX0KKworCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKKwludW1QaWVycyA9IEFSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTOworCisJbnVtWHBkR2FpbiA9IDA7CisKKwlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKKwkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKKwkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMpCisJCQkJYnJlYWs7CisJCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KKwkJCQkodTE2KShBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAtIGkpOworCQkJbnVtWHBkR2FpbisrOworCQl9CisJfQorCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9OVU1fUERfR0FJTiwKKwkJICAgICAgKG51bVhwZEdhaW4gLSAxKSAmIDB4Myk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzEsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMF0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8yLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzFdKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlM7IGkrKykgeworCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgorCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJgorCQkgICAgKGkgIT0gMCkpIHsKKwkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7CisJCX0gZWxzZQorCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOworCisJCWlmIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci50eE1hc2sgJiAoMSA8PCBpKSkgeworCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKKworCQkJYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsIGNoYW4sCisJCQkJCSAgICBwUmF3RGF0YXNldCwgcENhbEJDaGFucywKKwkJCQkJICAgIG51bVBpZXJzLCBwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkgICAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCisJCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7CisKKwkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCSAgU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzBdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzEpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1sxXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8yKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMl0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMykKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzNdLAorCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCkpOworCQkJfQorCisJCQlyZWdPZmZzZXQgPSBBUl9QSFlfQkFTRSArICg2NzIgPDwgMikgKyByZWdDaGFpbk9mZnNldDsKKwkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQgKiBqICsgMF0gJiAweEZGKSA8PCAwKSB8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAxXSAmIDB4RkYpIDw8IDgpIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDJdICYgMHhGRikgPDwgMTYpfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgM10gJiAweEZGKSA8PCAyNCk7CisJCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKKworCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKKwkJCQkJIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKKwkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKKwkJCQkJcmVnMzIpOworCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKKwkJCQkJIlBEQURDOiBDaGFpbiAlZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfFxuIiwKKwkJCQkJaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKKwkJCQkJNCAqIGogKyAxLCBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAorCQkJCQk0ICogaiArIDIsIHBkYWRjVmFsdWVzWzQgKiBqICsgMl0sCisJCQkJCTQgKiBqICsgMywKKwkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7CisKKwkJCQlyZWdPZmZzZXQgKz0gNDsKKwkJCX0KKwkJfQorCX0KKworCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKKwkJCQkJCSB1MTYgY2ZnQ3RsLAorCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQorCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OworCisJaW50IGk7CisJaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOworCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgKnJlcDsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKKwkJMCwgeyAwLCAwLCAwLCAwfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKKwkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKKwkJMCwgeyAwLCAwLCAwLCAwIH0KKwl9OworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0geworCQkwLCB7MCwgMCwgMCwgMH0KKwl9OworCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7CisJdTE2IGN0bE1vZGVzRm9yMTFnW10gPQorCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKKwkJICBDVExfMkdIVDQwCisJCX07CisJdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCWludCB0eF9jaGFpbm1hc2s7CisJdTE2IHR3aWNlTWluRWRnZVBvd2VyOworCisJdHhfY2hhaW5tYXNrID0gYWgtPnR4Y2hhaW5tYXNrOworCisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci5hbnRlbm5hR2FpbkNoWzBdOworCisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KKwkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisKKwlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CisJCW1heFJlZ0FsbG93ZWRQb3dlciAtPQorCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOworCX0KKworCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CisJc2NhbGVkUG93ZXIgPSBtYXgoKHUxNikwLCBzY2FsZWRQb3dlcik7CisKKwludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0gU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDA7CisJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKKworCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKKwlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKKwlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQyMCwKKwkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKTsKKwkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDQwLAorCQkJCUFSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7CisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7CisJfQorCisJZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKKwkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8CisJCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7CisJCWlmIChpc0h0NDBDdGxNb2RlKQorCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOworCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKKwkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7CisJCWVsc2UKKwkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkiTE9PUC1Nb2RlIGN0bE1vZGUgJWQgPCAlZCwgaXNIdDQwQ3RsTW9kZSAlZCwgIgorCQkJIkVYVF9BRERJVElWRSAlZFxuIiwKKwkJCWN0bE1vZGUsIG51bUN0bE1vZGVzLCBpc0h0NDBDdGxNb2RlLAorCQkJKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKSk7CisKKwkJZm9yIChpID0gMDsgKGkgPCBBUjU0MTZfTlVNX0NUTFMpICYmCisJCQkJcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkJIiAgTE9PUC1DdGxpZHggJWQ6IGNmZ0N0bCAweCUyLjJ4ICIKKwkJCQkicEN0bE1vZGUgMHglMi4yeCBjdGxJbmRleCAweCUyLjJ4ICIKKwkJCQkiY2hhbiAlZFxuIiwKKwkJCQlpLCBjZmdDdGwsIHBDdGxNb2RlW2N0bE1vZGVdLAorCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXSwgY2hhbi0+Y2hhbm5lbCk7CisKKwkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKKwkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYgQ1RMX01PREVfTSkgfAorCQkJICAgICAgU0RfTk9fQ1RMKSkpIHsKKwkJCQlyZXAgPSAmKHBFZXBEYXRhLT5jdGxEYXRhW2ldKTsKKworCQkJCXR3aWNlTWluRWRnZVBvd2VyID0KKwkJCQkJYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKGZyZXEsCisJCQkJcmVwLT5jdGxFZGdlc1thcjU0MTZfZ2V0X250eGNoYWlucworCQkJCQkJKHR4X2NoYWlubWFzaykgLSAxXSwKKwkJCQlJU19DSEFOXzJHSFooY2hhbiksCisJCQkJQVI1NDE2X0VFUDRLX05VTV9CQU5EX0VER0VTKTsKKworCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgorCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCisJCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKKwkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKKwkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKKwkJCQkJKHR4X2NoYWlubWFzaykpOworCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9CisJCQkJCQltaW4odHdpY2VNYXhFZGdlUG93ZXIsCisJCQkJCQkgICAgdHdpY2VNaW5FZGdlUG93ZXIpOworCQkJCX0gZWxzZSB7CisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCW1pbkN0bFBvd2VyID0gKHU4KW1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkiICAgIFNFTC1NaW4gY3RsTW9kZSAlZCBwQ3RsTW9kZSAlZCAiCisJCQkiMnhNYXhFZGdlICVkIHNQICVkIG1pbkN0bFB3ciAlZFxuIiwKKwkJCWN0bE1vZGUsIHBDdGxNb2RlW2N0bE1vZGVdLCB0d2ljZU1heEVkZ2VQb3dlciwKKwkJCXNjYWxlZFBvd2VyLCBtaW5DdGxQb3dlcik7CisKKwkJc3dpdGNoIChwQ3RsTW9kZVtjdGxNb2RlXSkgeworCQljYXNlIENUTF8xMUI6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckNjay50UG93MngpOworCQkJCQlpKyspIHsKKwkJCQl0YXJnZXRQb3dlckNjay50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckNjay50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFHOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJPZmRtLnRQb3cyeCk7CisJCQkJCWkrKykgeworCQkJCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzJHSFQyMDoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOworCQkJCQlpKyspIHsKKwkJCQl0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldID0KKwkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUJfRVhUOgorCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdID0gbWluKCh1MTYpCisJCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSwKKwkJCQkJbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExR19FWFQ6CisJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0gbWluKCh1MTYpCisJCQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8yR0hUNDA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsKKwkJCQkJaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF0ZXNBcnJheVtyYXRlNm1iXSA9IHJhdGVzQXJyYXlbcmF0ZTltYl0gPSByYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJCXJhdGVzQXJyYXlbcmF0ZTE4bWJdID0gcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTM2bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU0OG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMl07CisJcmF0ZXNBcnJheVtyYXRlNTRtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzNdOworCXJhdGVzQXJyYXlbcmF0ZVhyXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKQorCQlyYXRlc0FycmF5W3JhdGVIdDIwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQyMC50UG93MnhbaV07CisKKwlyYXRlc0FycmF5W3JhdGUxbF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMF07CisJcmF0ZXNBcnJheVtyYXRlMnNdID0gcmF0ZXNBcnJheVtyYXRlMmxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzFdOworCXJhdGVzQXJyYXlbcmF0ZTVfNXNdID0gcmF0ZXNBcnJheVtyYXRlNV81bF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMl07CisJcmF0ZXNBcnJheVtyYXRlMTFzXSA9IHJhdGVzQXJyYXlbcmF0ZTExbF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbM107CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspIHsKKwkJCXJhdGVzQXJyYXlbcmF0ZUh0NDBfMCArIGldID0KKwkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldOworCQl9CisJCXJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dID0gdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSA9IHRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgdTE2IGNmZ0N0bCwKKwkJCQkgICB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkJICAgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJICAgdTggcG93ZXJMaW1pdCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGk7CisKKwltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKKworCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49CisJICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOworCX0KKworCWlmICghYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAorCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKKwkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKKwkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJICJhdGg5a19od19zZXRfdHhwb3dlcjogdW5hYmxlIHRvIHNldCBwb3dlciB0YWJsZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzQXJyYXkpOyBpKyspIHsKKwkJcmF0ZXNBcnJheVtpXSA9CShpbnQxNl90KSh0eFBvd2VySW5kZXhPZmZzZXQgKyByYXRlc0FycmF5W2ldKTsKKwkJaWYgKHJhdGVzQXJyYXlbaV0gPiBBUjU0MTZfTUFYX1JBVEVfUE9XRVIpCisJCQlyYXRlc0FycmF5W2ldID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCX0KKworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBcjU0MTZSYXRlU2l6ZTsgaSsrKQorCQkJcmF0ZXNBcnJheVtpXSAtPSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CisJfQorCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTEsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTE4bWJdLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMm1iXSwgMTYpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlOW1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU2bWJdLCAwKSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTIsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTU0bWJdLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU0OG1iXSwgMTYpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMzZtYl0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMjRtYl0sIDApKTsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisJfQorCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKworCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7CisKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOworCX0KKworCWkgPSByYXRlNm1iOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJaSA9IHJhdGVIdDQwXzA7CisJZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpID0gcmF0ZUh0MjBfMDsKKworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPQorCQkJcmF0ZXNBcnJheVtpXSArIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwllbHNlCisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJdTggYmlhc2xldmVsOworCisJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApCisJCXJldHVybjsKKworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKKwkJcmV0dXJuOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisKKwlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKKwkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPQorCQkgIChJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X2dhaW4oc3RydWN0IGF0aF9odyAqYWgsCisJCQkJIHN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwsCisJCQkJIHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAsCisJCQkJIHU4IHR4UnhBdHRlbkxvY2FsLCBpbnQgcmVnQ2hhaW5PZmZzZXQpCit7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKKwkJICBwTW9kYWwtPmFudEN0cmxDaGFpblswXSk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKKwkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCkgJgorCQkgICB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKKwkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJICBTTShwTW9kYWwtPmlxQ2FsSUNoWzBdLCBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAorCQkgIFNNKHBNb2RhbC0+aXFDYWxRQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbMF07CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwgcE1vZGFsLT5ic3dNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfREIsIHBNb2RhbC0+YnN3QXR0ZW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yTWFyZ2luWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLCBwTW9kYWwtPnhhdHRlbjJEYlswXSk7CisJfQorCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLCB0eFJ4QXR0ZW5Mb2NhbCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMF0pOworCisJaWYgKEFSX1NSRVZfOTI4NV8xMShhaCkpCisJCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDQsIChBUjkyODVfQU5fVE9QNF9ERUZBVUxUIHwgMHgxNCkpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJdTggdHhSeEF0dGVuTG9jYWw7CisJdTggb2JbNV0sIGRiMVs1XSwgZGIyWzVdOworCXU4IGFudF9kaXZfY29udHJvbDEsIGFudF9kaXZfY29udHJvbDI7CisJdTMyIHJlZ1ZhbDsKKworCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCXR4UnhBdHRlbkxvY2FsID0gMjM7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAorCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuKSk7CisKKwkvKiBTaW5nbGUgY2hhaW4gZm9yIDRLIEVFUFJPTSovCisJYXRoOWtfaHdfNGtfc2V0X2dhaW4oYWgsIHBNb2RhbCwgZWVwLCB0eFJ4QXR0ZW5Mb2NhbCwgMCk7CisKKwkvKiBJbml0aWFsaXplIEFudCBEaXZlcnNpdHkgc2V0dGluZ3MgZnJvbSBFRVBST00gKi8KKwlpZiAocE1vZGFsLT52ZXJzaW9uID09IDMpIHsKKwkJYW50X2Rpdl9jb250cm9sMSA9ICgocE1vZGFsLT5vYl8yMzQgPj4gMTIpICYgMHhmKTsKKwkJYW50X2Rpdl9jb250cm9sMiA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDEyKSAmIDB4Zik7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweDk5YWMpOworCQlyZWdWYWwgJj0gKH4oMHg3ZjAwMDAwMCkpOworCQlyZWdWYWwgfD0gKChhbnRfZGl2X2NvbnRyb2wxICYgMHgxKSA8PCAyNCk7CisJCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDEpICYgMHgxKSA8PCAyOSk7CisJCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDIpICYgMHgxKSA8PCAzMCk7CisJCXJlZ1ZhbCB8PSAoKGFudF9kaXZfY29udHJvbDIgJiAweDMpIDw8IDI1KTsKKwkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDIgPj4gMikgJiAweDMpIDw8IDI3KTsKKwkJUkVHX1dSSVRFKGFoLCAweDk5YWMsIHJlZ1ZhbCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweDk5YWMpOworCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjA4KTsKKwkJcmVnVmFsICY9ICh+KDB4MSA8PCAxMykpOworCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMSA+PiAzKSAmIDB4MSkgPDwgMTMpOworCQlSRUdfV1JJVEUoYWgsIDB4YTIwOCwgcmVnVmFsKTsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4YTIwOCk7CisJfQorCisJaWYgKHBNb2RhbC0+dmVyc2lvbiA+PSAyKSB7CisJCW9iWzBdID0gKHBNb2RhbC0+b2JfMDEgJiAweGYpOworCQlvYlsxXSA9IChwTW9kYWwtPm9iXzAxID4+IDQpICYgMHhmOworCQlvYlsyXSA9IChwTW9kYWwtPm9iXzIzNCAmIDB4Zik7CisJCW9iWzNdID0gKChwTW9kYWwtPm9iXzIzNCA+PiA0KSAmIDB4Zik7CisJCW9iWzRdID0gKChwTW9kYWwtPm9iXzIzNCA+PiA4KSAmIDB4Zik7CisKKwkJZGIxWzBdID0gKHBNb2RhbC0+ZGIxXzAxICYgMHhmKTsKKwkJZGIxWzFdID0gKChwTW9kYWwtPmRiMV8wMSA+PiA0KSAmIDB4Zik7CisJCWRiMVsyXSA9IChwTW9kYWwtPmRiMV8yMzQgJiAweGYpOworCQlkYjFbM10gPSAoKHBNb2RhbC0+ZGIxXzIzNCA+PiA0KSAmIDB4Zik7CisJCWRiMVs0XSA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDgpICYgMHhmKTsKKworCQlkYjJbMF0gPSAocE1vZGFsLT5kYjJfMDEgJiAweGYpOworCQlkYjJbMV0gPSAoKHBNb2RhbC0+ZGIyXzAxID4+IDQpICYgMHhmKTsKKwkJZGIyWzJdID0gKHBNb2RhbC0+ZGIyXzIzNCAmIDB4Zik7CisJCWRiMlszXSA9ICgocE1vZGFsLT5kYjJfMjM0ID4+IDQpICYgMHhmKTsKKwkJZGIyWzRdID0gKChwTW9kYWwtPmRiMl8yMzQgPj4gOCkgJiAweGYpOworCisJfSBlbHNlIGlmIChwTW9kYWwtPnZlcnNpb24gPT0gMSkgeworCQlvYlswXSA9IChwTW9kYWwtPm9iXzAxICYgMHhmKTsKKwkJb2JbMV0gPSBvYlsyXSA9IG9iWzNdID0gb2JbNF0gPSAocE1vZGFsLT5vYl8wMSA+PiA0KSAmIDB4ZjsKKwkJZGIxWzBdID0gKHBNb2RhbC0+ZGIxXzAxICYgMHhmKTsKKwkJZGIxWzFdID0gZGIxWzJdID0gZGIxWzNdID0KKwkJCWRiMVs0XSA9ICgocE1vZGFsLT5kYjFfMDEgPj4gNCkgJiAweGYpOworCQlkYjJbMF0gPSAocE1vZGFsLT5kYjJfMDEgJiAweGYpOworCQlkYjJbMV0gPSBkYjJbMl0gPSBkYjJbM10gPQorCQkJZGIyWzRdID0gKChwTW9kYWwtPmRiMl8wMSA+PiA0KSAmIDB4Zik7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCW9iW2ldID0gcE1vZGFsLT5vYl8wMTsKKwkJCWRiMVtpXSA9IHBNb2RhbC0+ZGIxXzAxOworCQkJZGIyW2ldID0gcE1vZGFsLT5kYjFfMDE7CisJCX0KKwl9CisKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfT0JfMCwgQVI5Mjg1X0FOX1JGMkczX09CXzBfUywgb2JbMF0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19PQl8xLCBBUjkyODVfQU5fUkYyRzNfT0JfMV9TLCBvYlsxXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX09CXzIsIEFSOTI4NV9BTl9SRjJHM19PQl8yX1MsIG9iWzJdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfT0JfMywgQVI5Mjg1X0FOX1JGMkczX09CXzNfUywgb2JbM10pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19PQl80LCBBUjkyODVfQU5fUkYyRzNfT0JfNF9TLCBvYls0XSk7CisKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfREIxXzAsIEFSOTI4NV9BTl9SRjJHM19EQjFfMF9TLCBkYjFbMF0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMSwgQVI5Mjg1X0FOX1JGMkczX0RCMV8xX1MsIGRiMVsxXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8yLCBBUjkyODVfQU5fUkYyRzNfREIxXzJfUywgZGIxWzJdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCisJCQlBUjkyODVfQU5fUkYyRzRfREIxXzMsIEFSOTI4NV9BTl9SRjJHNF9EQjFfM19TLCBkYjFbM10pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjFfNCwgQVI5Mjg1X0FOX1JGMkc0X0RCMV80X1MsIGRiMVs0XSk7CisKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCisJCQlBUjkyODVfQU5fUkYyRzRfREIyXzAsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMF9TLCBkYjJbMF0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMSwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8xX1MsIGRiMlsxXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8yLCBBUjkyODVfQU5fUkYyRzRfREIyXzJfUywgZGIyWzJdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCisJCQlBUjkyODVfQU5fUkYyRzRfREIyXzMsIEFSOTI4NV9BTl9SRjJHNF9EQjJfM19TLCBkYjJbM10pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfNCwgQVI5Mjg1X0FOX1JGMkc0X0RCMl80X1MsIGRiMls0XSk7CisKKworCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCBBUjkyODVfQU5fVE9QNF9ERUZBVUxUKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKKwkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAorCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKSB8CisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpIHwKKwkJICBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKSAgfAorCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLCBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCisJaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49CisJCQkJCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1OCBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9NQVA0S19TUFVSQ0hBTiBcCisJKGFoLT5lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCisJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKKwljYXNlIFNQVVJfRElTQUJMRToKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKKwkJc3B1cl92YWwgPSBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkiR2V0dGluZyBzcHVyIHZhbCBmcm9tIG5ldyBsb2MuICVkXG4iLCBzcHVyX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfRUVQUk9NOgorCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNwdXJfdmFsOworCisjdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCit9CisKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfNGtfb3BzID0geworCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfNGtfY2hlY2tfZWVwcm9tLAorCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2ZpbGxfZWVwcm9tLAorCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlciwKKwkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZywKKwkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCisJLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od180a19zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfNGtfc2V0X2FkZGFjLAorCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od180a19zZXRfdHhwb3dlciwKKwkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFRVBST00gT3BlcmF0aW9ucyBmb3Igbm9uLTRLIChEZWZhdWx0KSBjYXJkcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV92ZXIoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4Rik7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQorCXUxNiAqZWVwX2RhdGEgPSAodTE2ICopJmFoLT5lZXByb20uZGVmOworCWludCBhZGRyLCBhcjU0MTZfZWVwX3N0YXJ0X2xvYyA9IDB4MTAwOworCisJZm9yIChhZGRyID0gMDsgYWRkciA8IFNJWkVfRUVQUk9NX0RFRjsgYWRkcisrKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGFyNTQxNl9lZXBfc3RhcnRfbG9jLAorCQkJCQkgZWVwX2RhdGEpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisJcmV0dXJuIHRydWU7CisjdW5kZWYgU0laRV9FRVBST01fREVGCit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkciwgc2l6ZTsKKworCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsICZtYWdpYykpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsICJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCisJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOworCisJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZik7CisJCQkJbmVlZF9zd2FwID0gdHJ1ZTsKKwkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFoLT5lZXByb20pOworCisJCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IHNpemUgLyBzaXplb2YodTE2KTsgYWRkcisrKSB7CisJCQkJCXRlbXAgPSBzd2FiMTYoKmVlcGRhdGEpOworCQkJCQkqZWVwZGF0YSA9IHRlbXA7CisJCQkJCWVlcGRhdGErKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKKwkJCQkJIkVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CisKKwlpZiAobmVlZF9zd2FwKQorCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoOworCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXIsIGo7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcuXG4iKTsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOworCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7CisJCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOworCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7CisJCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKKwkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKKwkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisJCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CisJCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQkJfQorCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAorCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAorCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXRoOWtfaHdfZGVmX2dldF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9IGVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRUVQX05GVEhSRVNIXzU6CisJCXJldHVybiBwTW9kYWxbMF0ubm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgRUVQX05GVEhSRVNIXzI6CisJCXJldHVybiBwTW9kYWxbMV0ubm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzU6CisJCXJldHVybiBwTW9kYWxbMF0ub2I7CisJY2FzZSBFRVBfREJfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5kYjsKKwljYXNlIEVFUF9PQl8yOgorCQlyZXR1cm4gcE1vZGFsWzFdLm9iOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWxbMV0uZGI7CisJY2FzZSBFRVBfTUlOT1JfUkVWOgorCQlyZXR1cm4gQVI1NDE2X1ZFUl9NQVNLOworCWNhc2UgRUVQX1RYX01BU0s6CisJCXJldHVybiBwQmFzZS0+dHhNYXNrOworCWNhc2UgRUVQX1JYX01BU0s6CisJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX1JYR0FJTl9UWVBFOgorCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7CisJY2FzZSBFRVBfVFhHQUlOX1RZUEU6CisJCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKKwljYXNlIEVFUF9PTF9QV1JDVFJMOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5vcGVuTG9vcFB3ckNudGwgPyB0cnVlIDogZmFsc2U7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKwljYXNlIEVFUF9SQ19DSEFJTl9NQVNLOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5yY0NoYWluTWFzazsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfREFDX0hQV1JfNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjApCisJCQlyZXR1cm4gcEJhc2UtPmRhY0hpUHdyTW9kZV81RzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIyKQorCQkJcmV0dXJuIHBCYXNlLT5mcmFjX25fNWc7CisJCWVsc2UKKwkJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9nYWluKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCwKKwkJCQkgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwLAorCQkJCSAgdTggdHhSeEF0dGVuTG9jYWwsIGludCByZWdDaGFpbk9mZnNldCwgaW50IGkpCit7CisJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFtpXTsKKworCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3TWFyZ2luW2ldKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3QXR0ZW5baV0pOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMk1hcmdpbltpXSk7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJEYltpXSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pCisJCQkgIHwgU00ocE1vZGFsLT4gYnN3TWFyZ2luW2ldLAorCQkJICAgICAgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCisJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pCisJCQkgIHwgU00ocE1vZGFsLT5ic3dBdHRlbltpXSwKKwkJCSAgICAgICBBUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikpOworCQl9CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwKKwkJICAgICAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLCB0eFJ4QXR0ZW5Mb2NhbCk7CisJCVJFR19STVdfRklFTEQoYWgsCisJCSAgICAgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldKTsKKwl9IGVsc2UgeworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pCisJCQkgIHwgU00odHhSeEF0dGVuTG9jYWwsIEFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikpOworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSB8CisJCQkgIFNNKHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldLCBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCWludCBpLCByZWdDaGFpbk9mZnNldDsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwl0eFJ4QXR0ZW5Mb2NhbCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDIzIDogNDQ7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAorCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgeworCQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgeworCQkJaWYgKGkgPj0gMikKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmIChpICE9IDApKQorCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJZWxzZQorCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkKKwkJCWF0aDlrX2h3X2RlZl9zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsLAorCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwgaSk7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0IsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQl9TLAorCQkJCQkJICBwTW9kYWwtPm9iKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREJfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREJfUywKKwkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOworCQl9IGVsc2UgeworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1X1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGIpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1X1MsCisJCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNSwKKwkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0KKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKKwkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkxfUywKKwkJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTLAorCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTX1MsCisJCQkJCSAgcE1vZGFsLT5sb2NhbF9iaWFzKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1hQQV9DRkcsIEFSX1BIWV9GT1JDRV9YUEFfQ0ZHLAorCQkJICAgICAgcE1vZGFsLT5mb3JjZV94cGFvbik7CisJfQorCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAorCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osCisJCQkgICAgICBBUl9QSFlfREVTSVJFRF9TWl9QR0EsCisJCQkgICAgICBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAorCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKKwkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9IGVsc2UgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUl9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBLAorCQkJICAgICAgQVJfUEhZX0VYVF9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCSAgICBBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0tfVFhfQ1RSTCwKKwkJCSAgICAgIEFSX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLLAorCQkJICAgICAgcE1vZGFsLT5taXNjQml0cyk7CisKKworCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCisJCQkJCWVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCQllbHNlIGlmIChlZXAtPmJhc2VFZXBIZWFkZXIuZGFjSGlQd3JNb2RlXzVHKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsIDApOworCQllbHNlCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkgICAgICBlZXAtPmJhc2VFZXBIZWFkZXIuZGFjTHBNb2RlKTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRlJBTUVfQ1RMLCBBUl9QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsCisJCQkgICAgICBwTW9kYWwtPm1pc2NCaXRzID4+IDIpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMOSwKKwkJCSAgICAgIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSywKKwkJCSAgICAgIGVlcC0+YmFzZUVlcEhlYWRlci5kZXNpcmVkU2NhbGVDQ0spOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKyNkZWZpbmUgWFBBX0xWTF9GUkVRKGNudCkgKHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbY250XSkKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXU4IGJpYXNsZXZlbDsKKworCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQlyZXR1cm47CisKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCisJCXJldHVybjsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJfSBlbHNlIHsKKwkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKKwkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCisJCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKKwkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKKworCQlmcmVxQ291bnQrKzsKKworCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgeworCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKKwkJCQlicmVhazsKKworCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKKwkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKKwkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJCWZyZXFDb3VudCsrOworCQl9CisJfQorCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKKwl9IGVsc2UgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTYsIDEpICYgKH4weGMwKSkgfCBiaWFzbGV2ZWwgPDwgNjsKKwl9CisjdW5kZWYgWFBBX0xWTF9GUkVRCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhU2V0LAogCQkJCXU4ICpiQ2hhbnMsIHUxNiBhdmFpbFBpZXJzLApAQCAtNzY5LDcgKzIwMzgsNyBAQAogCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CiAJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKIAotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwogCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKIAkJfSBlbHNlIHsKQEAgLTgzNCwxNTAgKzIxMDMsMTUgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwb3dJbmZvLAotCQkJCSAgICAgIHUxNiBudW1DaGFubmVscywKLQkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBOZXdQb3dlciwKLQkJCQkgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNFeHRUYXJnZXQpCi17Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCXUxNiBjbG8sIGNoaTsKLQlpbnQgaTsKLQlpbnQgbWF0Y2hJbmRleCA9IC0xLCBsb3dJbmRleCA9IC0xOwotCXUxNiBmcmVxOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCWZyZXEgPSAoaXNFeHRUYXJnZXQpID8gY2VudGVycy5leHRfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOwotCi0JaWYgKGZyZXEgPD0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bMF0uYkNoYW5uZWwsCi0JCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKLQkJbWF0Y2hJbmRleCA9IDA7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgKGkgPCBudW1DaGFubmVscykgJiYKLQkJCSAgICAgKHBvd0luZm9baV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgewotCQkJaWYgKGZyZXEgPT0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgewotCQkJCW1hdGNoSW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIGlmICgoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgJiYKLQkJCQkgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpKSB7Ci0JCQkJbG93SW5kZXggPSBpIC0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoKG1hdGNoSW5kZXggPT0gLTEpICYmIChsb3dJbmRleCA9PSAtMSkpCi0JCQltYXRjaEluZGV4ID0gaSAtIDE7Ci0JfQotCi0JaWYgKG1hdGNoSW5kZXggIT0gLTEpIHsKLQkJKnBOZXdQb3dlciA9IHBvd0luZm9bbWF0Y2hJbmRleF07Ci0JfSBlbHNlIHsKLQkJY2xvID0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bbG93SW5kZXhdLmJDaGFubmVsLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJY2hpID0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bbG93SW5kZXggKyAxXS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bVJhdGVzOyBpKyspIHsKLQkJCXBOZXdQb3dlci0+dFBvdzJ4W2ldID0KLQkJCQkodTgpYXRoOWtfaHdfaW50ZXJwb2xhdGUoZnJlcSwgY2xvLCBjaGksCi0JCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCi0JCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBvd0luZm8sCi0JCQkJICAgICAgIHUxNiBudW1DaGFubmVscywKLQkJCQkgICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBOZXdQb3dlciwKLQkJCQkgICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzSHQ0MFRhcmdldCkKLXsKLQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7Ci0JdTE2IGNsbywgY2hpOwotCWludCBpOwotCWludCBtYXRjaEluZGV4ID0gLTEsIGxvd0luZGV4ID0gLTE7Ci0JdTE2IGZyZXE7Ci0KLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0JZnJlcSA9IGlzSHQ0MFRhcmdldCA/IGNlbnRlcnMuc3ludGhfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOwotCi0JaWYgKGZyZXEgPD0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bMF0uYkNoYW5uZWwsIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKLQkJbWF0Y2hJbmRleCA9IDA7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgKGkgPCBudW1DaGFubmVscykgJiYKLQkJCSAgICAgKHBvd0luZm9baV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgewotCQkJaWYgKGZyZXEgPT0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgewotCQkJCW1hdGNoSW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlCi0JCQkJaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgJiYKLQkJCQkgICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKLQkJCQkJbG93SW5kZXggPSBpIC0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQl9Ci0JCWlmICgobWF0Y2hJbmRleCA9PSAtMSkgJiYgKGxvd0luZGV4ID09IC0xKSkKLQkJCW1hdGNoSW5kZXggPSBpIC0gMTsKLQl9Ci0KLQlpZiAobWF0Y2hJbmRleCAhPSAtMSkgewotCQkqcE5ld1Bvd2VyID0gcG93SW5mb1ttYXRjaEluZGV4XTsKLQl9IGVsc2UgewotCQljbG8gPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleF0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCQljaGkgPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleCArIDFdLmJDaGFubmVsLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtUmF0ZXM7IGkrKykgewotCQkJcE5ld1Bvd2VyLT50UG93MnhbaV0gPSAodTgpYXRoOWtfaHdfaW50ZXJwb2xhdGUoZnJlcSwKLQkJCQkJCWNsbywgY2hpLAotCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAotCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKLQkJCQkgICAgICAgYm9vbCBpczJHSHosIGludCBudW1fYmFuZF9lZGdlcykKLXsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyAoaSA8IG51bV9iYW5kX2VkZ2VzKSAmJgotCQkgICAgIChwUmRFZGdlc1Bvd2VyW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKLQkJaWYgKGZyZXEgPT0gYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsIGlzMkdIeikpIHsKLQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gcFJkRWRnZXNQb3dlcltpXS50UG93ZXI7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmICgoaSA+IDApICYmCi0JCQkgICAoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgaXMyR0h6KSkpIHsKLQkJCWlmIChhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpIC0gMV0uYkNoYW5uZWwsCi0JCQkJCSAgICAgICBpczJHSHopIDwgZnJlcSAmJgotCQkJICAgIHBSZEVkZ2VzUG93ZXJbaSAtIDFdLmZsYWcpIHsKLQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9Ci0JCQkJCXBSZEVkZ2VzUG93ZXJbaSAtIDFdLnRQb3dlcjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHR3aWNlTWF4RWRnZVBvd2VyOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOworI2RlZmluZSBTTV9QRF9HQUlOKHgpIFNNKDB4MzgsIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8jI3gpCisjZGVmaW5lIFNNX1BER0FJTl9CKHgsIHkpIFwKKwkJU00oKGdhaW5Cb3VuZGFyaWVzW3hdKSwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeSkKKworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CiAJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YXNldDsKIAl1OCAqcENhbEJDaGFucyA9IE5VTEw7CiAJdTE2IHBkR2Fpbk92ZXJsYXBfdDI7CkBAIC0xMDEwLDYgKzIxNDQsMTIgQEAKIAkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUzsKIAl9CiAKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgJiYgSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCWFoLT5pbml0UERBREMgPSAoKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKQorCQkJCSBwUmF3RGF0YXNldCktPnZwZFBkZ1swXVswXTsKKwl9CisKIAludW1YcGRHYWluID0gMDsKIAogCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewpAQCAtMTAzMiw4ICsyMTcyLDggQEAKIAkJICAgICAgeHBkR2FpblZhbHVlc1syXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KSAmJgorCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgorCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJgogCQkgICAgKGkgIT0gMCkpIHsKIAkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7CiAJCX0gZWxzZQpAQCAtMTA0NSwyNSArMjE4NSw0NSBAQAogCQkJZWxzZQogCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhNUdbaV07CiAKLQkJCWF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKLQkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAotCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKLQkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKIAotCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7Ci0JCQkJUkVHX1dSSVRFKGFoLAotCQkJCQkgIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKLQkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCi0JCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQl1OCBwY2RhY0lkeDsKKwkJCQl1OCB0eFBvd2VyOworCisJCQkJYXRoOWtfZ2V0X3R4Z2Fpbl9pbmRleChhaCwgY2hhbiwKKwkJCQkoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopcFJhd0RhdGFzZXQsCisJCQkJcENhbEJDaGFucywgbnVtUGllcnMsICZ0eFBvd2VyLCAmcGNkYWNJZHgpOworCQkJCWF0aDlrX29sY19nZXRfcGRhZGNzKGFoLCBwY2RhY0lkeCwKKwkJCQkJCSAgICAgdHhQb3dlci8yLCBwZGFkY1ZhbHVlcyk7CisJCQl9IGVsc2UgeworCQkJCWF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwKKwkJCQkJCQljaGFuLCBwUmF3RGF0YXNldCwKKwkJCQkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCQlwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJCSZ0TWluQ2FsUG93ZXIsCisJCQkJCQkJZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkJcGRhZGNWYWx1ZXMsCisJCQkJCQkJbnVtWHBkR2Fpbik7CisJCQl9CisKKwkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQkJCVJFR19XUklURShhaCwKKwkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJCVNNKDB4NiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCQkJCQlTTV9QRF9HQUlOKDEpIHwgU01fUERfR0FJTigyKSB8CisJCQkJCQlTTV9QRF9HQUlOKDMpIHwgU01fUERfR0FJTig0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKXwKKwkJCQkJCVNNX1BER0FJTl9CKDAsIDEpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDEsIDIpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDIsIDMpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDMsIDQpKTsKKwkJCQl9CiAJCQl9CiAKIAkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OwpAQCAtMTA5NywxMjYgKzIyNTcsMTEgQEAKIAkqcFR4UG93ZXJJbmRleE9mZnNldCA9IDA7CiAKIAlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBTTV9QRF9HQUlOCisjdW5kZWYgU01fUERHQUlOX0IKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0Jc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YXNldDsKLQl1OCAqcENhbEJDaGFucyA9IE5VTEw7Ci0JdTE2IHBkR2Fpbk92ZXJsYXBfdDI7Ci0Jc3RhdGljIHU4IHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTXTsKLQl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOwotCXUxNiBudW1QaWVycywgaSwgajsKLQlpbnQxNl90IHRNaW5DYWxQb3dlcjsKLQl1MTYgbnVtWHBkR2FpbiwgeHBkTWFzazsKLQl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCwgMCwgMCB9OwotCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKLQotCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIueHBkR2FpbjsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9Ci0JCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIucGRHYWluT3ZlcmxhcDsKLQl9IGVsc2UgewotCQlwZEdhaW5PdmVybGFwX3QyID0gKHUxNikoTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UUENSRzUpLAotCQkJCQkgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApKTsKLQl9Ci0KLQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyMkc7Ci0JbnVtUGllcnMgPSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUzsKLQotCW51bVhwZEdhaW4gPSAwOwotCi0JZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7Ci0JCWlmICgoeHBkTWFzayA+PiAoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7Ci0JCQlpZiAobnVtWHBkR2FpbiA+PSBBUjU0MTZfTlVNX1BEX0dBSU5TKQotCQkJCWJyZWFrOwotCQkJeHBkR2FpblZhbHVlc1tudW1YcGRHYWluXSA9Ci0JCQkJKHUxNikoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKTsKLQkJCW51bVhwZEdhaW4rKzsKLQkJfQotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfTlVNX1BEX0dBSU4sCi0JCSAgICAgIChudW1YcGRHYWluIC0gMSkgJiAweDMpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8xLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzBdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMiwKLQkJICAgICAgeHBkR2FpblZhbHVlc1sxXSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzMsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMl0pOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWhwLT5haF9yeGNoYWlubWFzayA9PSA1IHx8IGFocC0+YWhfdHhjaGFpbm1hc2sgPT0gNSkgJiYKLQkJICAgIChpICE9IDApKSB7Ci0JCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOwotCQl9IGVsc2UKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKLQotCQlpZiAocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudHhNYXNrICYgKDEgPDwgaSkpIHsKLQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07Ci0KLQkJCWF0aDlrX2h3X2dldF80a19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLCBjaGFuLAotCQkJCQkgICAgcFJhd0RhdGFzZXQsIHBDYWxCQ2hhbnMsCi0JCQkJCSAgICBudW1QaWVycywgcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICZ0TWluQ2FsUG93ZXIsIGdhaW5Cb3VuZGFyaWVzLAotCQkJCQkgICAgcGRhZGNWYWx1ZXMsIG51bVhwZEdhaW4pOwotCi0JCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKLQkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCi0JCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7Ci0JCQl9Ci0KLQkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OwotCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKLQkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOwotCi0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAotCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAotCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAotCQkJCQlyZWczMik7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAotCQkJCQkiUERBREM6IENoYWluICVkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAotCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAotCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCi0JCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKLQkJCQkJNCAqIGogKyAzLAotCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKLQotCQkJCXJlZ09mZnNldCArPSA0OwotCQkJfQotCQl9Ci0JfQotCi0JKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJCQkgIGludDE2X3QgKnJhdGVzQXJyYXksCiAJCQkJCQkgIHUxNiBjZmdDdGwsCkBAIC0xMjI3LDggKzIyNzIsNyBAQAogI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLwogI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOICAgMTAgLyogMTAqbG9nMTAoMykqMiAqLwogCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOwogCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKIAlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CiAJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CkBAIC0xMjU4LDcgKzIzMDIsNyBAQAogCWludCB0eF9jaGFpbm1hc2s7CiAJdTE2IHR3aWNlTWluRWRnZVBvd2VyOwogCi0JdHhfY2hhaW5tYXNrID0gYWhwLT5haF90eGNoYWlubWFzazsKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CiAKIAlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CiAKQEAgLTEyNzcsOSArMjMyMSw5IEBACiAKIAltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CiAKLQlpZiAoYWgtPmFoX3RwU2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CisJaWYgKGFoLT5yZWd1bGF0b3J5LnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgewogCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KLQkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKGFoLT5haF90cFNjYWxlKV0gKiAyKTsKKwkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKGFoLT5yZWd1bGF0b3J5LnRwX3NjYWxlKV0gKiAyKTsKIAl9CiAKIAlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOwpAQCAtMTM2Nyw3ICsyNDExLDggQEAKIAkJZWxzZQogCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKIAotCQlpZiAoYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgPT0gMTQgJiYgYXI1NDE2X2dldF9lZXBfcmV2KGFocCkgPD0gMikKKwkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKIAkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCkBAIC0xNTA3LDI1NyArMjU1MiwyMSBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCQkJIGludDE2X3QgKnJhdGVzQXJyYXksCi0JCQkJCQkgdTE2IGNmZ0N0bCwKLQkJCQkJCSB1MTYgQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJCSB1MTYgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkJCQkgdTE2IHBvd2VyTGltaXQpCitzdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgIHUxNiBjZmdDdGwsCisJCQkJICAgIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkgICAgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJICAgIHU4IHBvd2VyTGltaXQpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KLQkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKLQotCWludCBpOwotCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKLQlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrICpyZXA7Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbSwgdGFyZ2V0UG93ZXJDY2sgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG1FeHQgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMH0gfSwgdGFyZ2V0UG93ZXJDY2tFeHQgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMCB9Ci0JfTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCB0YXJnZXRQb3dlckh0MjAsIHRhcmdldFBvd2VySHQ0MCA9IHsKLQkJMCwgezAsIDAsIDAsIDB9Ci0JfTsKLQl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOwotCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KLQkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCi0JCSAgQ1RMXzJHSFQ0MAotCQl9OwotCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQlpbnQgdHhfY2hhaW5tYXNrOwotCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKLQotCXR4X2NoYWlubWFzayA9IGFocC0+YWhfdHhjaGFpbm1hc2s7Ci0KLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF07Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gKGludDE2X3QpbWluKEFudGVubmFSZWR1Y3Rpb24gLQotCQkJCQkgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKLQotCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKLQotCWlmIChhaC0+YWhfdHBTY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKLQkJbWF4UmVnQWxsb3dlZFBvd2VyIC09Ci0JCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+YWhfdHBTY2FsZSldICogMik7Ci0JfQotCi0Jc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKLQlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKLQotCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKLQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOwotCi0JYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAotCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlckNjaywgNCwgZmFsc2UpOwotCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAotCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOwotCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAotCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOwotCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCi0JCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOwotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAotCQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VyQ2NrRXh0LCA0LCB0cnVlKTsKLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAotCQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKLQl9Ci0KLQlmb3IgKGN0bE1vZGUgPSAwOyBjdGxNb2RlIDwgbnVtQ3RsTW9kZXM7IGN0bE1vZGUrKykgewotCQlib29sIGlzSHQ0MEN0bE1vZGUgPSAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzVHSFQ0MCkgfHwKLQkJCShwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfMkdIVDQwKTsKLQkJaWYgKGlzSHQ0MEN0bE1vZGUpCi0JCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7Ci0JCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQotCQkJZnJlcSA9IGNlbnRlcnMuZXh0X2NlbnRlcjsKLQkJZWxzZQotCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKLQotCQlpZiAoYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgPT0gMTQgJiYKLQkJCQlhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8PSAyKQotCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCi0JCQkiRVhUX0FERElUSVZFICVkXG4iLAotCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCi0JCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKLQotCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCQkiICBMT09QLUN0bGlkeCAlZDogY2ZnQ3RsIDB4JTIuMnggIgotCQkJCSJwQ3RsTW9kZSAweCUyLjJ4IGN0bEluZGV4IDB4JTIuMnggIgotCQkJCSJjaGFuICVkXG4iLAotCQkJCWksIGNmZ0N0bCwgcEN0bE1vZGVbY3RsTW9kZV0sCi0JCQkJcEVlcERhdGEtPmN0bEluZGV4W2ldLCBjaGFuLT5jaGFubmVsKTsKLQotCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAotCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8Ci0JCQkgICAgICBTRF9OT19DVEwpKSkgewotCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOwotCi0JCQkJdHdpY2VNaW5FZGdlUG93ZXIgPQotCQkJCQlhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKLQkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zCi0JCQkJCQkodHhfY2hhaW5tYXNrKSAtIDFdLAotCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQlBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMpOwotCi0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCQkJIiAgICBNQVRDSC1FRV9JRFggJWQ6IGNoICVkIGlzMiAlZCAiCi0JCQkJCSIyeE1pbkVkZ2UgJWQgY2hhaW5tYXNrICVkIGNoYWlucyAlZFxuIiwKLQkJCQkJaSwgZnJlcSwgSVNfQ0hBTl8yR0haKGNoYW4pLAotCQkJCQl0d2ljZU1pbkVkZ2VQb3dlciwgdHhfY2hhaW5tYXNrLAotCQkJCQlhcjU0MTZfZ2V0X250eGNoYWlucwotCQkJCQkodHhfY2hhaW5tYXNrKSk7Ci0JCQkJaWYgKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgPT0gU0RfTk9fQ1RMKSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KLQkJCQkJCW1pbih0d2ljZU1heEVkZ2VQb3dlciwKLQkJCQkJCSAgICB0d2ljZU1pbkVkZ2VQb3dlcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSB0d2ljZU1pbkVkZ2VQb3dlcjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJbWluQ3RsUG93ZXIgPSAodTgpbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKLQkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAotCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKLQotCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7Ci0JCWNhc2UgQ1RMXzExQjoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUc6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCi0JCQkJCSAgICBtaW5DdGxQb3dlcik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMkdIVDIwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQl9FWFQ6Ci0JCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFHX0VYVDoKLQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzJHSFQ0MDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOwotCQkJCQlpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KLQkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9Ci0JCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07Ci0JcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOwotCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107Ci0JcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCi0JCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKLQotCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgewotCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07Ci0JCX0KLQkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKLQkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0gdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBhdGg5a19od19kZWZfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJIHUxNiBjZmdDdGwsCi0JCQkgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAotCQkJIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJIHU4IHBvd2VyTGltaXQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKKyNkZWZpbmUgUlRfQVJfREVMVEEoeCkgKHJhdGVzQXJyYXlbeF0gLSBjY2tfb2ZkbV9kZWx0YSkKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOwogCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQogCQkmKHBFZXBEYXRhLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKIAlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwogCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKIAl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7Ci0JaW50IGk7CisJaW50IGksIGNja19vZmRtX2RlbHRhID0gMDsKIAogCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOwogCkBAIC0xODA2LDE2ICsyNjE1LDMwIEBACiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMjRtYl0sIDApKTsKIAogCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJY2NrX29mZG1fZGVsdGEgPSAyOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUycyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUybCksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMWwpLCAwKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExcyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMWwpLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81cyksIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNWwpLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOworCQl9CiAJfQogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCkBAIC0xODQ4LDEyICsyNjcxLDE5IEBACiAJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKIAkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCiAJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGVFeHRDY2spLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlRHVwQ2NrKSwgMCkpOworCQl9IGVsc2UgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CisJCX0KIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9TVUIsCkBAIC0xODY4LDc2OSArMjY5OCwzMyBAQAogCQlpID0gcmF0ZUh0MjBfMDsKIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9CiAJCQlyYXRlc0FycmF5W2ldICsgQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwogCWVsc2UKLQkJYWgtPmFoX21heFBvd2VyTGV2ZWwgPSByYXRlc0FycmF5W2ldOworCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJIHUxNiBjZmdDdGwsCi0JCQkgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAotCQkJIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJIHU4IHBvd2VyTGltaXQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZwRWVwRGF0YS0+bW9kYWxIZWFkZXI7Ci0JaW50MTZfdCByYXRlc0FycmF5W0FyNTQxNlJhdGVTaXplXTsKLQlpbnQxNl90IHR4UG93ZXJJbmRleE9mZnNldCA9IDA7Ci0JdTggaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSAyOwotCWludCBpOwotCi0JbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7Ci0KLQlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCWh0NDBQb3dlckluY0ZvclBkYWRjID0gcE1vZGFsLT5odDQwUG93ZXJJbmNGb3JQZGFkYzsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKLQkJCQkJICAgICAgICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCi0JCQkJCSAgICAgICB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJCSAgICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJICAgICAgIHBvd2VyTGltaXQpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJhdGg5a19od19zZXRfdHhwb3dlcjogdW5hYmxlIHRvIHNldCAiCi0JCQkidHggcG93ZXIgcGVyIHJhdGUgdGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3NldF80a19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgcG93ZXIgdGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKLQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCi0JCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKLQl9Ci0KLQlpID0gcmF0ZTZtYjsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCWkgPSByYXRlSHQ0MF8wOwotCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKLQkJaSA9IHJhdGVIdDIwXzA7Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJYWgtPmFoX21heFBvd2VyTGV2ZWwgPQotCQkJcmF0ZXNBcnJheVtpXSArIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKLQllbHNlCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0gcmF0ZXNBcnJheVtpXTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50ICgqYXRoOWtfc2V0X3R4cG93ZXJbXSkgKHN0cnVjdCBhdGhfaGFsICosCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKiwKLQkJCQkgICB1MTYsIHU4LCB1OCwgdTgpID0gewotCWF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlciwKLQlhdGg5a19od180a19zZXRfdHhwb3dlcgotfTsKLQotaW50IGF0aDlrX2h3X3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSB1MTYgY2ZnQ3RsLAotCQkJIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCSB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCSB1OCBwb3dlckxpbWl0KQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfc2V0X3R4cG93ZXJbYWhwLT5haF9lZXBfbWFwXShhaCwgY2hhbiwgY2ZnQ3RsLAotCQkJdHdpY2VBbnRlbm5hUmVkdWN0aW9uLCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCXBvd2VyTGltaXQpOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmX2FkZGFjKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLSNkZWZpbmUgWFBBX0xWTF9GUkVRKGNudCkgKHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbY250XSkKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXU4IGJpYXNsZXZlbDsKLQotCWlmIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKLQkJcmV0dXJuOwotCi0JaWYgKGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKLQkJcmV0dXJuOwotCi0JcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCi0JaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7Ci0JCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKLQl9IGVsc2UgewotCQl1MTYgcmVzZXRGcmVxQmluLCBmcmVxQmluLCBmcmVxQ291bnQgPSAwOwotCQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7Ci0KLQkJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JCXJlc2V0RnJlcUJpbiA9IEZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0JCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoMCkgJiAweGZmOwotCQliaWFzbGV2ZWwgPSAodTgpIChYUEFfTFZMX0ZSRVEoMCkgPj4gMTQpOwotCi0JCWZyZXFDb3VudCsrOwotCi0JCXdoaWxlIChmcmVxQ291bnQgPCAzKSB7Ci0JCQlpZiAoWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgPT0gMHgwKQotCQkJCWJyZWFrOwotCi0JCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgJiAweGZmOwotCQkJaWYgKHJlc2V0RnJlcUJpbiA+PSBmcmVxQmluKQotCQkJCWJpYXNsZXZlbCA9ICh1OCkoWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgPj4gMTQpOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQkJZnJlcUNvdW50Kys7Ci0JCX0KLQl9Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCUlOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywgNywgMSkgPSAoSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLAotCQkJCQk3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7Ci0JfSBlbHNlIHsKLQkJSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA2LCAxKSA9IChJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsCi0JCQkJCTYsIDEpICYgKH4weGMwKSkgfCBiaWFzbGV2ZWwgPDwgNjsKLQl9Ci0jdW5kZWYgWFBBX0xWTF9GUkVRCi19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF80a19hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQl1OCBiaWFzbGV2ZWw7Ci0KLQlpZiAoYWgtPmFoX21hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApCi0JCXJldHVybjsKLQotCWlmIChhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCi0JCXJldHVybjsKLQotCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCi0JaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7Ci0JCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKLQkJSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSA9Ci0JCSAgKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywgNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOwotCX0KLX0KLQotc3RhdGljIHZvaWQgKCphdGg5a19zZXRfYWRkYWNbXSkgKHN0cnVjdCBhdGhfaGFsICosIHN0cnVjdCBhdGg5a19jaGFubmVsICopID0gewotCWF0aDlrX2h3X3NldF9kZWZfYWRkYWMsCi0JYXRoOWtfaHdfc2V0XzRrX2FkZGFjCi19OwotCi12b2lkIGF0aDlrX2h3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlhdGg5a19zZXRfYWRkYWNbYWhwLT5haF9lZXBfbWFwXShhaCwgY2hhbik7Ci19Ci0KLQotCi0vKiBYWFg6IENsZWFuIG1lIHVwLCBtYWtlIG1lIG1vcmUgbGVnaWJsZSAqLwotc3RhdGljIGJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9kZWZfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCWludCBpLCByZWdDaGFpbk9mZnNldDsKLQl1OCB0eFJ4QXR0ZW5Mb2NhbDsKLQl1MTYgYW50X2NvbmZpZzsKLQotCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKLQotCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKLQotCWF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4sIDAsICZhbnRfY29uZmlnKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBhbnRfY29uZmlnKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7Ci0JCQlpZiAoaSA+PSAyKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWhwLT5haF9yeGNoYWlubWFzayA9PSA1IHx8IGFocC0+YWhfdHhjaGFpbm1hc2sgPT0gNSkKLQkJICAgICYmIChpICE9IDApKQotCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKLQkJZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKLQotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsKLQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKLQkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKLQkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKLQotCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJgotCQkJICAgICBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07Ci0JCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCWJzd01hcmdpbltpXSk7Ci0JCQkJCVJFR19STVdfRklFTEQoYWgsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCXJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCWJzd0F0dGVuW2ldKTsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCXhhdHRlbjJNYXJnaW5baV0pOwotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwKLQkJCQkJCXBNb2RhbC0+Ci0JCQkJCQl4YXR0ZW4yRGJbaV0pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikKLQkJCQkJCSAgfCBTTShwTW9kYWwtPgotCQkJCQkJICBic3dNYXJnaW5baV0sCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikpOwotCQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJICByZWdDaGFpbk9mZnNldCwKLQkJCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKLQkJCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikKLQkJCQkJCSAgfCBTTShwTW9kYWwtPmJzd0F0dGVuW2ldLAotCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJICAgICAgQVJfUEhZX1JYR0FJTiArCi0JCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLAotCQkJCQkgICAgICB0eFJ4QXR0ZW5Mb2NhbCk7Ci0JCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJICAgICAgQVJfUEhZX1JYR0FJTiArCi0JCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwKLQkJCQkJICAgICAgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOwotCQkJfSBlbHNlIHsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCSAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkgICB+QVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSB8Ci0JCQkJCSAgU00odHhSeEF0dGVuTG9jYWwsCi0JCQkJCSAgICAgQVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSk7Ci0JCQkJUkVHX1dSSVRFKGFoLAotCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikgfAotCQkJCQkgIFNNKHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldLAotCQkJCQkgICAgIEFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0JfUywKLQkJCQkJCSAgcE1vZGFsLT5vYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKLQkJfSBlbHNlIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjUsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjVfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9Ci0JCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCi0JCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCi0JCQkJCSAgcE1vZGFsLT54cGFCaWFzTHZsKTsKLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBUywKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBU19TLAotCQkJCQkgIHBNb2RhbC0+bG9jYWxfYmlhcyk7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIkZvcmNlWFBBb246ICVkXG4iLAotCQkJcE1vZGFsLT5mb3JjZV94cGFvbik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9YUEFfQ0ZHLCBBUl9QSFlfRk9SQ0VfWFBBX0NGRywKLQkJCSAgICAgIHBNb2RhbC0+Zm9yY2VfeHBhb24pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKLQkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAotCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfUEdBLAotCQkJICAgICAgcE1vZGFsLT5wZ2FEZXNpcmVkU2l6ZSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKLQkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCX0gZWxzZSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EsCi0JCQkgICAgICBBUl9QSFlfRVhUX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCX0KLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAotCQkJICAgICAgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKLQkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCWludCByZWdDaGFpbk9mZnNldDsKLQl1OCB0eFJ4QXR0ZW5Mb2NhbDsKLQl1MTYgYW50X2NvbmZpZyA9IDA7Ci0JdTggb2JbNV0sIGRiMVs1XSwgZGIyWzVdOwotCXU4IGFudF9kaXZfY29udHJvbDEsIGFudF9kaXZfY29udHJvbDI7Ci0JdTMyIHJlZ1ZhbDsKLQotCi0JcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQl0eFJ4QXR0ZW5Mb2NhbCA9IDIzOwotCi0JYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwgMCwgJmFudF9jb25maWcpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCi0JcmVnQ2hhaW5PZmZzZXQgPSAwOwotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAoUkVHX1JFQUQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCkgJgotCQkgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8Ci0JCSBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKLQkJIFNNKHBNb2RhbC0+aXFDYWxJQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSB8Ci0JCSBTTShwTW9kYWwtPmlxQ2FsUUNoWzBdLCBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOwotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7Ci0JCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFswXTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwgcE1vZGFsLT5ic3dNYXJnaW5bMF0pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfREIsIHBNb2RhbC0+YnN3QXR0ZW5bMF0pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAotCQkJcE1vZGFsLT54YXR0ZW4yTWFyZ2luWzBdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLCBwTW9kYWwtPnhhdHRlbjJEYlswXSk7Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJCUFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7Ci0KLQlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKLQkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgKEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQgfCAweDE0KSk7Ci0KLQkvKiBJbml0aWFsaXplIEFudCBEaXZlcnNpdHkgc2V0dGluZ3MgZnJvbSBFRVBST00gKi8KLQlpZiAocE1vZGFsLT52ZXJzaW9uID09IDMpIHsKLQkJYW50X2Rpdl9jb250cm9sMSA9ICgocE1vZGFsLT5vYl8yMzQgPj4gMTIpICYgMHhmKTsKLQkJYW50X2Rpdl9jb250cm9sMiA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDEyKSAmIDB4Zik7Ci0JCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweDk5YWMpOwotCQlyZWdWYWwgJj0gKH4oMHg3ZjAwMDAwMCkpOwotCQlyZWdWYWwgfD0gKChhbnRfZGl2X2NvbnRyb2wxICYgMHgxKSA8PCAyNCk7Ci0JCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDEpICYgMHgxKSA8PCAyOSk7Ci0JCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDIpICYgMHgxKSA8PCAzMCk7Ci0JCXJlZ1ZhbCB8PSAoKGFudF9kaXZfY29udHJvbDIgJiAweDMpIDw8IDI1KTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDIgPj4gMikgJiAweDMpIDw8IDI3KTsKLQkJUkVHX1dSSVRFKGFoLCAweDk5YWMsIHJlZ1ZhbCk7Ci0JCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweDk5YWMpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjA4KTsKLQkJcmVnVmFsICY9ICh+KDB4MSA8PCAxMykpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMSA+PiAzKSAmIDB4MSkgPDwgMTMpOwotCQlSRUdfV1JJVEUoYWgsIDB4YTIwOCwgcmVnVmFsKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4YTIwOCk7Ci0JfQotCi0JaWYgKHBNb2RhbC0+dmVyc2lvbiA+PSAyKSB7Ci0JCW9iWzBdID0gKHBNb2RhbC0+b2JfMDEgJiAweGYpOwotCQlvYlsxXSA9IChwTW9kYWwtPm9iXzAxID4+IDQpICYgMHhmOwotCQlvYlsyXSA9IChwTW9kYWwtPm9iXzIzNCAmIDB4Zik7Ci0JCW9iWzNdID0gKChwTW9kYWwtPm9iXzIzNCA+PiA0KSAmIDB4Zik7Ci0JCW9iWzRdID0gKChwTW9kYWwtPm9iXzIzNCA+PiA4KSAmIDB4Zik7Ci0KLQkJZGIxWzBdID0gKHBNb2RhbC0+ZGIxXzAxICYgMHhmKTsKLQkJZGIxWzFdID0gKChwTW9kYWwtPmRiMV8wMSA+PiA0KSAmIDB4Zik7Ci0JCWRiMVsyXSA9IChwTW9kYWwtPmRiMV8yMzQgJiAweGYpOwotCQlkYjFbM10gPSAoKHBNb2RhbC0+ZGIxXzIzNCA+PiA0KSAmIDB4Zik7Ci0JCWRiMVs0XSA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDgpICYgMHhmKTsKLQotCQlkYjJbMF0gPSAocE1vZGFsLT5kYjJfMDEgJiAweGYpOwotCQlkYjJbMV0gPSAoKHBNb2RhbC0+ZGIyXzAxID4+IDQpICYgMHhmKTsKLQkJZGIyWzJdID0gKHBNb2RhbC0+ZGIyXzIzNCAmIDB4Zik7Ci0JCWRiMlszXSA9ICgocE1vZGFsLT5kYjJfMjM0ID4+IDQpICYgMHhmKTsKLQkJZGIyWzRdID0gKChwTW9kYWwtPmRiMl8yMzQgPj4gOCkgJiAweGYpOwotCi0JfSBlbHNlIGlmIChwTW9kYWwtPnZlcnNpb24gPT0gMSkgewotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJFRVBST00gTW9kZWwgdmVyc2lvbiBpcyBzZXQgdG8gMSBcbiIpOwotCQlvYlswXSA9IChwTW9kYWwtPm9iXzAxICYgMHhmKTsKLQkJb2JbMV0gPSBvYlsyXSA9IG9iWzNdID0gb2JbNF0gPSAocE1vZGFsLT5vYl8wMSA+PiA0KSAmIDB4ZjsKLQkJZGIxWzBdID0gKHBNb2RhbC0+ZGIxXzAxICYgMHhmKTsKLQkJZGIxWzFdID0gZGIxWzJdID0gZGIxWzNdID0KLQkJCWRiMVs0XSA9ICgocE1vZGFsLT5kYjFfMDEgPj4gNCkgJiAweGYpOwotCQlkYjJbMF0gPSAocE1vZGFsLT5kYjJfMDEgJiAweGYpOwotCQlkYjJbMV0gPSBkYjJbMl0gPSBkYjJbM10gPQotCQkJZGIyWzRdID0gKChwTW9kYWwtPmRiMl8wMSA+PiA0KSAmIDB4Zik7Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCW9iW2ldID0gcE1vZGFsLT5vYl8wMTsKLQkJCWRiMVtpXSA9IHBNb2RhbC0+ZGIxXzAxOwotCQkJZGIyW2ldID0gcE1vZGFsLT5kYjFfMDE7Ci0JCX0KLQl9Ci0KLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfMCwgQVI5Mjg1X0FOX1JGMkczX09CXzBfUywgb2JbMF0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8xLCBBUjkyODVfQU5fUkYyRzNfT0JfMV9TLCBvYlsxXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzIsIEFSOTI4NV9BTl9SRjJHM19PQl8yX1MsIG9iWzJdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfMywgQVI5Mjg1X0FOX1JGMkczX09CXzNfUywgb2JbM10pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl80LCBBUjkyODVfQU5fUkYyRzNfT0JfNF9TLCBvYls0XSk7Ci0KLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfREIxXzAsIEFSOTI4NV9BTl9SRjJHM19EQjFfMF9TLCBkYjFbMF0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMSwgQVI5Mjg1X0FOX1JGMkczX0RCMV8xX1MsIGRiMVsxXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8yLCBBUjkyODVfQU5fUkYyRzNfREIxXzJfUywgZGIxWzJdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIxXzMsIEFSOTI4NV9BTl9SRjJHNF9EQjFfM19TLCBkYjFbM10pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjFfNCwgQVI5Mjg1X0FOX1JGMkc0X0RCMV80X1MsIGRiMVs0XSk7Ci0KLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzAsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMF9TLCBkYjJbMF0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMSwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8xX1MsIGRiMlsxXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8yLCBBUjkyODVfQU5fUkYyRzRfREIyXzJfUywgZGIyWzJdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzMsIEFSOTI4NV9BTl9SRjJHNF9EQjJfM19TLCBkYjJbM10pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfNCwgQVI5Mjg1X0FOX1JGMkc0X0RCMl80X1MsIGRiMls0XSk7Ci0KLQotCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQotCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCBBUjkyODVfQU5fVE9QNF9ERUZBVUxUKTsKLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKLQkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKSB8Ci0JCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpIHwKLQkJICBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKSAgfAotCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAotCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKLQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLCBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCi0JCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JCQkJCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCi0JCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKLQl9Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKLQkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgKCphdGg5a19lZXByb21fc2V0X2JvYXJkX3ZhbHVlc1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKikgPSB7Ci0JYXRoOWtfaHdfZWVwcm9tX3NldF9kZWZfYm9hcmRfdmFsdWVzLAotCWF0aDlrX2h3X2VlcHJvbV9zZXRfNGtfYm9hcmRfdmFsdWVzCi19OwotCi1ib29sIGF0aDlrX2h3X2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4pOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9kZWZfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgIHU4IGluZGV4LCB1MTYgKmNvbmZpZykKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAoaW5kZXgpIHsKLQljYXNlIDA6Ci0JCSpjb25maWcgPSBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Ci0JCXJldHVybiAwOworCXN3aXRjaChhcjU0MTZfZ2V0X250eGNoYWlucyhhaC0+dHhjaGFpbm1hc2spKSB7CiAJY2FzZSAxOgotCQlpZiAocEJhc2UtPnZlcnNpb24gPj0gMHgwRTBEKSB7Ci0JCQlpZiAocE1vZGFsLT51c2VBbnQxKSB7Ci0JCQkJKmNvbmZpZyA9Ci0JCQkJKChwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkYwMDAwKSA+PiAxNik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSAyOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF80a19lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQlzd2l0Y2ggKGluZGV4KSB7Ci0JY2FzZSAwOgotCQkqY29uZmlnID0gcE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGOwotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCAoKmF0aDlrX2dldF9lZXByb21fYW50ZW5uYV9jZmdbXSkoc3RydWN0IGF0aF9oYWwgKiwKLQkJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqLAotCQkJCQkgICAgIHU4LCB1MTYgKikgPSB7Ci0JYXRoOWtfaHdfZ2V0X2RlZl9lZXByb21fYW50ZW5uYV9jZmcsCi0JYXRoOWtfaHdfZ2V0XzRrX2VlcHJvbV9hbnRlbm5hX2NmZwotfTsKLQotaW50IGF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZ1thaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuLAotCQkJCQkJCSAgICAgaW5kZXgsIGNvbmZpZyk7Ci19Ci0KLXN0YXRpYyB1OCBhdGg5a19od19nZXRfNGtfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1OCBhdGg5a19od19nZXRfZGVmX251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1OCBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOwogCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQogCQkmKGVlcC0+bW9kYWxIZWFkZXJbQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haID09IGZyZXFfYmFuZF0pOwogCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKQEAgLTI2NDUsMTgwICsyNzM5LDc1IEBACiAJcmV0dXJuIG51bV9hbnRfY29uZmlnOwogfQogCi1zdGF0aWMgdTggKCphdGg5a19nZXRfbnVtX2FudF9jb25maWdbXSkoc3RydWN0IGF0aF9oYWwgKiwKLQkJCQkJZW51bSBpZWVlODAyMTFfYmFuZCkgPSB7Ci0JYXRoOWtfaHdfZ2V0X2RlZl9udW1fYW50X2NvbmZpZywKLQlhdGg5a19od19nZXRfNGtfbnVtX2FudF9jb25maWcKLX07Ci0KLXU4IGF0aDlrX2h3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCitzdGF0aWMgdTE2IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwogCi0JcmV0dXJuIGF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1thaHAtPmFoX2VlcF9tYXBdKGFoLCBmcmVxX2JhbmQpOworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7CiB9CiAKLXUxNiBhdGg5a19od19lZXByb21fZ2V0X3NwdXJfY2hhbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKK3N0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKIHsKLSNkZWZpbmUgRUVQX01BUDRLX1NQVVJDSEFOIFwKLQkoYWhwLT5haF9lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQogI2RlZmluZSBFRVBfREVGX1NQVVJDSEFOIFwKLQkoYWhwLT5haF9lZXByb20uZGVmLm1vZGFsSGVhZGVyW2lzMkdIel0uc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJKGFoLT5lZXByb20uZGVmLm1vZGFsSGVhZGVyW2lzMkdIel0uc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCiAJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCi0JCWksIGlzMkdIeiwgYWgtPmFoX2NvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CiAKLQlzd2l0Y2ggKGFoLT5haF9jb25maWcuc3B1cm1vZGUpIHsKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKIAljYXNlIFNQVVJfRElTQUJMRToKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKLQkJc3B1cl92YWwgPSBhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006Ci0JCWlmIChhaHAtPmFoX2VlcF9tYXAgPT0gRUVQX01BUF80S0JJVFMpCi0JCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKLQkJZWxzZQotCQkJc3B1cl92YWwgPSBFRVBfREVGX1NQVVJDSEFOOworCQlzcHVyX3ZhbCA9IEVFUF9ERUZfU1BVUkNIQU47CiAJCWJyZWFrOwotCiAJfQogCiAJcmV0dXJuIHNwdXJfdmFsOworCiAjdW5kZWYgRUVQX0RFRl9TUFVSQ0hBTgotI3VuZGVmIEVFUF9NQVA0S19TUFVSQ0hBTgogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2dldF9lZXByb21fNGsoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyXzRrICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7Ci0KLQlzd2l0Y2ggKHBhcmFtKSB7Ci0JY2FzZSBFRVBfTkZUSFJFU0hfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDApOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOwotCWNhc2UgQVJfRUVQUk9NX01BQygxKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMik6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07Ci0JY2FzZSBFRVBfUkVHXzA6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOwotCWNhc2UgRUVQX1JFR18xOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKLQljYXNlIEVFUF9PUF9DQVA6Ci0JCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOwotCWNhc2UgRUVQX09QX01PREU6Ci0JCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKLQljYXNlIEVFUF9SRl9TSUxFTlQ6Ci0JCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbC0+b2JfMDE7Ci0JY2FzZSBFRVBfREJfMjoKLQkJcmV0dXJuIHBNb2RhbC0+ZGIxXzAxOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgYXRoOWtfaHdfZ2V0X2VlcHJvbV9kZWYoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPSBlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF81OgotCQlyZXR1cm4gcE1vZGFsWzBdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMCk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDEpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOwotCWNhc2UgQVJfRUVQUk9NX01BQygyKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKLQljYXNlIEVFUF9SRUdfMDoKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07Ci0JY2FzZSBFRVBfUkVHXzE6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOwotCWNhc2UgRUVQX09QX0NBUDoKLQkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7Ci0JY2FzZSBFRVBfT1BfTU9ERToKLQkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOwotCWNhc2UgRUVQX1JGX1NJTEVOVDoKLQkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKLQljYXNlIEVFUF9PQl81OgotCQlyZXR1cm4gcE1vZGFsWzBdLm9iOwotCWNhc2UgRUVQX0RCXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0uZGI7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5vYjsKLQljYXNlIEVFUF9EQl8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLmRiOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQljYXNlIEVFUF9SWEdBSU5fVFlQRToKLQkJcmV0dXJuIHBCYXNlLT5yeEdhaW5UeXBlOwotCWNhc2UgRUVQX1RYR0FJTl9UWVBFOgotCQlyZXR1cm4gcEJhc2UtPnR4R2FpblR5cGU7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1MzIgKCphdGg5a19nZXRfZWVwcm9tW10pKHN0cnVjdCBhdGhfaGFsICosIGVudW0gZWVwcm9tX3BhcmFtKSA9IHsKLQlhdGg5a19od19nZXRfZWVwcm9tX2RlZiwKLQlhdGg5a19od19nZXRfZWVwcm9tXzRrCitzdGF0aWMgc3RydWN0IGVlcHJvbV9vcHMgZWVwX2RlZl9vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tLAorCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tLAorCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od19kZWZfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlciwKKwkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2LAorCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCisJLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcywKKwkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlciwKKwkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsCiB9OwogCi11MzIgYXRoOWtfaHdfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQllbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2dldF9lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCwgcGFyYW0pOwotfQotCi1pbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitpbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgc3RhdHVzOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQlpZiAoYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkKLQkJYXRoOWtfaHdfZmxhc2hfbWFwKGFoKTsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCQlhaC0+ZWVwX21hcCA9IEVFUF9NQVBfNEtCSVRTOworCQlhaC0+ZWVwX29wcyA9ICZlZXBfNGtfb3BzOworCX0gZWxzZSB7CisJCWFoLT5lZXBfbWFwID0gRUVQX01BUF9ERUZBVUxUOworCQlhaC0+ZWVwX29wcyA9ICZlZXBfZGVmX29wczsKKwl9CiAKLQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKLQkJYWhwLT5haF9lZXBfbWFwID0gRUVQX01BUF80S0JJVFM7Ci0JZWxzZQotCQlhaHAtPmFoX2VlcF9tYXAgPSBFRVBfTUFQX0RFRkFVTFQ7Ci0KLQlpZiAoIWF0aDlrX2h3X2ZpbGxfZWVwcm9tKGFoKSkKKwlpZiAoIWFoLT5lZXBfb3BzLT5maWxsX2VlcHJvbShhaCkpCiAJCXJldHVybiAtRUlPOwogCi0Jc3RhdHVzID0gYXRoOWtfaHdfY2hlY2tfZWVwcm9tKGFoKTsKKwlzdGF0dXMgPSBhaC0+ZWVwX29wcy0+Y2hlY2tfZWVwcm9tKGFoKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjY4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uaApAQCAtMCwwICsxLDUwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgRUVQUk9NX0gKKyNkZWZpbmUgRUVQUk9NX0gKKworI2RlZmluZSBBSF9VU0VfRUVQUk9NICAgMHgxCisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKKyNlbHNlCisjZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUMgMHhhNTVhCisjZW5kaWYKKworI2RlZmluZSBDVFJZX0RFQlVHICAgMHgxZmYKKyNkZWZpbmUJQ1RSWV9ERUZBVUxUIDAKKworI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0NPTVBSRVNTX0RJUyAgIDB4MDAwMQorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0FFU19ESVMgICAgICAgIDB4MDAwMgorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0ZBU1RGUkFNRV9ESVMgIDB4MDAwNAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0JVUlNUX0RJUyAgICAgIDB4MDAwOAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX01BWFFDVSAgICAgICAgIDB4MDFGMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX01BWFFDVV9TICAgICAgIDQKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9IRUFWWV9DTElQX0VOICAweDAyMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTICAgICAweEYwMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTX1MgICAxMgorCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCAgIDB4MDA0MAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiAgICAweDAwODAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19NSURCQU5EICAgIDB4MDIwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REICAgICAweDA0MDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUEgICAgMHgwODAwCisKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERF9QUkU0XzAgIDB4NDAwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQV9QUkU0XzAgMHg4MDAwCisKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQgIDB4MAorI2RlZmluZSBBUjU0MTZfRUVQUk9NX1MgICAgICAgICAgICAgMgorI2RlZmluZSBBUjU0MTZfRUVQUk9NX09GRlNFVCAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFSNTQxNl9FRVBST01fTUFYICAgICAgICAgICAweGFlMAorCisjZGVmaW5lIEFSNTQxNl9FRVBST01fU1RBUlRfQUREUiBcCisJKEFSX1NSRVZfOTEwMChhaCkpID8gMHgxZmZmMTAwMCA6IDB4NTAzZjEyMDAKKworI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCisjZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgQ1RMX01PREVfTSAgICAgICAgICAgICAgNworI2RlZmluZSBDVExfMTFBICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENUTF8xMUIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1RMXzExRyAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDVExfMkdIVDIwICAgICAgICAgICAgICA1CisjZGVmaW5lIENUTF81R0hUMjAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1RMXzJHSFQ0MCAgICAgICAgICAgICAgNworI2RlZmluZSBDVExfNUdIVDQwICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgRVhUX0FERElUSVZFICgweDgwMDApCisjZGVmaW5lIENUTF8xMUFfRVhUIChDVExfMTFBIHwgRVhUX0FERElUSVZFKQorI2RlZmluZSBDVExfMTFHX0VYVCAoQ1RMXzExRyB8IEVYVF9BRERJVElWRSkKKyNkZWZpbmUgQ1RMXzExQl9FWFQgKENUTF8xMUIgfCBFWFRfQURESVRJVkUpCisKKyNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDAgMgorI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MCAzCisKKyNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLworI2RlZmluZSBJTkNSRUFTRV9NQVhQT1dfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCisKKy8qCisgKiBGb3IgQVI5Mjg1IGFuZCBsYXRlciBjaGlwc2V0cywgdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBub3QgYmVpbmcgcHJvZ3JhbW1lZAorICogaW4gRUVQUk9NIGFuZCBzbyBuZWVkIHRvIGJlIGVuYWJsZWQgYWx3YXlzLgorICoKKyAqIEJpdCAwOiBlbl9mY2NfbWlkCisgKiBCaXQgMTogZW5famFwX21pZAorICogQml0IDI6IGVuX2ZjY19kZnNfaHQ0MAorICogQml0IDM6IGVuX2phcF9odDQwCisgKiBCaXQgNDogZW5famFwX2Rmc19odDQwCisgKi8KKyNkZWZpbmUgQVI5Mjg1X1JERVhUX0RFRkFVTFQgICAgMHgxRgorCisjZGVmaW5lIEFSX0VFUFJPTV9NQUMoaSkJKDB4MWQrKGkpKQorI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKQkoKChfcikgJiAweDNmKSA8PCAoX3MpKQorI2RlZmluZSBGUkVRMkZCSU4oeCwgeSkJCSgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCisjZGVmaW5lIGF0aDlrX2h3X3VzZV9mbGFzaChfYWgpCSghKF9haC0+YWhfZmxhZ3MgJiBBSF9VU0VfRUVQUk9NKSkKKworI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKKyNkZWZpbmUgT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYgXAorCQkJCSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKQorCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9HUElPX1NFTCAgICAgMHgwMDFjCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9HUElPX1NFTF9TICAgMgorI2RlZmluZSBBUl9FRVBST01fUkZTSUxFTlRfUE9MQVJJVFkgICAgIDB4MDAwMgorI2RlZmluZSBBUl9FRVBST01fUkZTSUxFTlRfUE9MQVJJVFlfUyAgIDEKKworI2RlZmluZSBFRVBfUkZTSUxFTlRfRU5BQkxFRCAgICAgICAgMHgwMDAxCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEX1MgICAgICAwCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9QT0xBUklUWSAgICAgICAweDAwMDIKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZX1MgICAgIDEKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX0dQSU9fU0VMICAgICAgIDB4MDAxYworI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUxfUyAgICAgMgorCisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExQSAgICAgICAgICAgMHgwMQorI2RlZmluZSBBUjU0MTZfT1BGTEFHU18xMUcgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl81R19IVDQwICAgICAweDA0CisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQ0MCAgICAgMHgwOAorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUMjAgICAgIDB4MTAKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDIwICAgICAweDIwCisKKyNkZWZpbmUgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUiAgICAgICAweDEKKyNkZWZpbmUgQVI1NDE2X0VFUF9WRVIgICAgICAgICAgICAgICAweEUKKyNkZWZpbmUgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSyAgICAweDBGRkYKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMiAgICAgICAweDIKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMyAgICAgICAweDMKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNyAgICAgICAweDcKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfOSAgICAgICAweDkKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTYgICAgICAweDEwCisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3ICAgICAgMHgxMQorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSAgICAgIDB4MTMKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjAgICAgICAweDE0CisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIyICAgICAgMHgxNgorCisjZGVmaW5lIEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTICAgICAgICAgOAorI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUyAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fNUdfNDBfVEFSR0VUX1BPV0VSUyAgOAorI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTIDMKKyNkZWZpbmUgQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTICA0CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUyAgNAorI2RlZmluZSBBUjU0MTZfTlVNX0NUTFMgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFSNTQxNl9OVU1fQkFORF9FREdFUyAgICAgICAgICAgOAorI2RlZmluZSBBUjU0MTZfTlVNX1BEX0dBSU5TICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgICAgICAgICA0CisjZGVmaW5lIEFSNTQxNl9QRF9HQUlOX0lDRVBUUyAgICAgICAgICAgNQorI2RlZmluZSBBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTICAgICAgIDUKKyNkZWZpbmUgQVI1NDE2X01BWF9SQVRFX1BPV0VSICAgICAgICAgICA2MworI2RlZmluZSBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAgICAgICAgIDEyOAorI2RlZmluZSBBUjU0MTZfQkNIQU5fVU5VU0VEICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQiA2NAorI2RlZmluZSBBUjU0MTZfTUFYX0NIQUlOUyAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgICAgICAgICAtNQorCisvKiBSeCBnYWluIHR5cGUgdmFsdWVzICovCisjZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzIzREJfQkFDS09GRiAgICAgMAorI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl8xM0RCX0JBQ0tPRkYgICAgIDEKKyNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fT1JJRyAgICAgICAgICAgICAyCisKKy8qIFR4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fT1JJR0lOQUwgICAgICAgICAwCisjZGVmaW5lIEFSNTQxNl9FRVBfVFhHQUlOX0hJR0hfUE9XRVIgICAgICAgMQorCisjZGVmaW5lIEFSNTQxNl9FRVA0S19TVEFSVF9MT0MgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlMgICAgICAgICAzCisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR180MF9UQVJHRVRfUE9XRVJTICAzCisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9CQU5EX0VER0VTICAgICAgICAgICA0CisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMgICAgICAgICAgICAgMgorI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1CisjZGVmaW5lIEFSNTQxNl9FRVA0S19NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIEFSOTI4MF9UWF9HQUlOX1RBQkxFX1NJWkUgMjIKKworZW51bSBlZXByb21fcGFyYW0geworCUVFUF9ORlRIUkVTSF81LAorCUVFUF9ORlRIUkVTSF8yLAorCUVFUF9NQUNfTVNXLAorCUVFUF9NQUNfTUlELAorCUVFUF9NQUNfTFNXLAorCUVFUF9SRUdfMCwKKwlFRVBfUkVHXzEsCisJRUVQX09QX0NBUCwKKwlFRVBfT1BfTU9ERSwKKwlFRVBfUkZfU0lMRU5ULAorCUVFUF9PQl81LAorCUVFUF9EQl81LAorCUVFUF9PQl8yLAorCUVFUF9EQl8yLAorCUVFUF9NSU5PUl9SRVYsCisJRUVQX1RYX01BU0ssCisJRUVQX1JYX01BU0ssCisJRUVQX1JYR0FJTl9UWVBFLAorCUVFUF9UWEdBSU5fVFlQRSwKKwlFRVBfT0xfUFdSQ1RSTCwKKwlFRVBfUkNfQ0hBSU5fTUFTSywKKwlFRVBfREFDX0hQV1JfNUcsCisJRUVQX0ZSQUNfTl81RworfTsKKworZW51bSBhcjU0MTZfcmF0ZXMgeworCXJhdGU2bWIsIHJhdGU5bWIsIHJhdGUxMm1iLCByYXRlMThtYiwKKwlyYXRlMjRtYiwgcmF0ZTM2bWIsIHJhdGU0OG1iLCByYXRlNTRtYiwKKwlyYXRlMWwsIHJhdGUybCwgcmF0ZTJzLCByYXRlNV81bCwKKwlyYXRlNV81cywgcmF0ZTExbCwgcmF0ZTExcywgcmF0ZVhyLAorCXJhdGVIdDIwXzAsIHJhdGVIdDIwXzEsIHJhdGVIdDIwXzIsIHJhdGVIdDIwXzMsCisJcmF0ZUh0MjBfNCwgcmF0ZUh0MjBfNSwgcmF0ZUh0MjBfNiwgcmF0ZUh0MjBfNywKKwlyYXRlSHQ0MF8wLCByYXRlSHQ0MF8xLCByYXRlSHQ0MF8yLCByYXRlSHQ0MF8zLAorCXJhdGVIdDQwXzQsIHJhdGVIdDQwXzUsIHJhdGVIdDQwXzYsIHJhdGVIdDQwXzcsCisJcmF0ZUR1cENjaywgcmF0ZUR1cE9mZG0sIHJhdGVFeHRDY2ssIHJhdGVFeHRPZmRtLAorCUFyNTQxNlJhdGVTaXplCit9OworCitlbnVtIGF0aDlrX2hhbF9mcmVxX2JhbmQgeworCUFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWiA9IDAsCisJQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haID0gMQorfTsKKworc3RydWN0IGJhc2VfZWVwX2hlYWRlciB7CisJdTE2IGxlbmd0aDsKKwl1MTYgY2hlY2tzdW07CisJdTE2IHZlcnNpb247CisJdTggb3BDYXBGbGFnczsKKwl1OCBlZXBNaXNjOworCXUxNiByZWdEbW5bMl07CisJdTggbWFjQWRkcls2XTsKKwl1OCByeE1hc2s7CisJdTggdHhNYXNrOworCXUxNiByZlNpbGVudDsKKwl1MTYgYmx1ZVRvb3RoT3B0aW9uczsKKwl1MTYgZGV2aWNlQ2FwOworCXUzMiBiaW5CdWlsZE51bWJlcjsKKwl1OCBkZXZpY2VUeXBlOworCXU4IHB3ZGNsa2luZDsKKwl1OCBmdXR1cmVCYXNlXzFbMl07CisJdTggcnhHYWluVHlwZTsKKwl1OCBkYWNIaVB3ck1vZGVfNUc7CisJdTggb3Blbkxvb3BQd3JDbnRsOworCXU4IGRhY0xwTW9kZTsKKwl1OCB0eEdhaW5UeXBlOworCXU4IHJjQ2hhaW5NYXNrOworCXU4IGRlc2lyZWRTY2FsZUNDSzsKKwl1OCBwb3dlcl90YWJsZV9vZmZzZXQ7CisJdTggZnJhY19uXzVnOworCXU4IGZ1dHVyZUJhc2VfM1syMV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyXzRrIHsKKwl1MTYgbGVuZ3RoOworCXUxNiBjaGVja3N1bTsKKwl1MTYgdmVyc2lvbjsKKwl1OCBvcENhcEZsYWdzOworCXU4IGVlcE1pc2M7CisJdTE2IHJlZ0RtblsyXTsKKwl1OCBtYWNBZGRyWzZdOworCXU4IHJ4TWFzazsKKwl1OCB0eE1hc2s7CisJdTE2IHJmU2lsZW50OworCXUxNiBibHVlVG9vdGhPcHRpb25zOworCXUxNiBkZXZpY2VDYXA7CisJdTMyIGJpbkJ1aWxkTnVtYmVyOworCXU4IGRldmljZVR5cGU7CisJdTggdHhHYWluVHlwZTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IHNwdXJfY2hhbiB7CisJdTE2IHNwdXJDaGFuOworCXU4IHNwdXJSYW5nZUxvdzsKKwl1OCBzcHVyUmFuZ2VIaWdoOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgeworCXUzMiBhbnRDdHJsQ2hhaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXUzMiBhbnRDdHJsQ29tbW9uOworCXU4IGFudGVubmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHN3aXRjaFNldHRsaW5nOworCXU4IHR4UnhBdHRlbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCByeFR4TWFyZ2luQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IGFkY0Rlc2lyZWRTaXplOworCXU4IHBnYURlc2lyZWRTaXplOworCXU4IHhsbmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHR4RW5kVG9YcGFPZmY7CisJdTggdHhFbmRUb1J4T247CisJdTggdHhGcmFtZVRvWHBhT247CisJdTggdGhyZXNoNjI7CisJdTggbm9pc2VGbG9vclRocmVzaENoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCB4cGRHYWluOworCXU4IHhwZDsKKwl1OCBpcUNhbElDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggaXFDYWxRQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHBkR2Fpbk92ZXJsYXA7CisJdTggb2I7CisJdTggZGI7CisJdTggeHBhQmlhc0x2bDsKKwl1OCBwd3JEZWNyZWFzZUZvcjJDaGFpbjsKKwl1OCBwd3JEZWNyZWFzZUZvcjNDaGFpbjsKKwl1OCB0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTggdHhGcmFtZVRvUGFPbjsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYzsKKwl1OCBic3dBdHRlbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTggYnN3TWFyZ2luW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBzd1NldHRsZUh0NDA7CisJdTggeGF0dGVuMkRiW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCB4YXR0ZW4yTWFyZ2luW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBvYl9jaDE7CisJdTggZGJfY2gxOworCXU4IHVzZUFudDE6MSwKKwkgICAgZm9yY2VfeHBhb246MSwKKwkgICAgbG9jYWxfYmlhczoxLAorCSAgICBmZW1CYW5kU2VsZWN0VXNlZDoxLCB4bG5hYnVmaW46MSwgeGxuYWlzZWw6MiwgeGxuYWJ1Zm1vZGU6MTsKKwl1OCBtaXNjQml0czsKKwl1MTYgeHBhQmlhc0x2bEZyZXFbM107CisJdTggZnV0dXJlTW9kYWxbNl07CisKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCB7CisJdTggcHdyUGRnWzJdWzVdOworCXU4IHZwZFBkZ1syXVs1XTsKKwl1OCBwY2RhY1syXVs1XTsKKwl1OCBlbXB0eVsyXVs1XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyIHsKKwl1MzIgIGFudEN0cmxDaGFpbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTMyICBhbnRDdHJsQ29tbW9uOworCXU4ICAgYW50ZW5uYUdhaW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBzd2l0Y2hTZXR0bGluZzsKKwl1OCAgIHR4UnhBdHRlbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHJ4VHhNYXJnaW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBhZGNEZXNpcmVkU2l6ZTsKKwl1OCAgIHBnYURlc2lyZWRTaXplOworCXU4ICAgeGxuYUdhaW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICB0eEVuZFRvWHBhT2ZmOworCXU4ICAgdHhFbmRUb1J4T247CisJdTggICB0eEZyYW1lVG9YcGFPbjsKKwl1OCAgIHRocmVzaDYyOworCXU4ICAgbm9pc2VGbG9vclRocmVzaENoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHhwZEdhaW47CisJdTggICB4cGQ7CisJdTggICBpcUNhbElDaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBpcUNhbFFDaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBwZEdhaW5PdmVybGFwOworCXU4ICAgb2JfMDE7CisJdTggICBkYjFfMDE7CisJdTggICB4cGFCaWFzTHZsOworCXU4ICAgdHhGcmFtZVRvRGF0YVN0YXJ0OworCXU4ICAgdHhGcmFtZVRvUGFPbjsKKwl1OCAgIGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4ICAgYnN3QXR0ZW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgYnN3TWFyZ2luW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHN3U2V0dGxlSHQ0MDsKKwl1OCAgIHhhdHRlbjJEYltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICB4YXR0ZW4yTWFyZ2luW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGRiMl8wMTsKKwl1OCAgIHZlcnNpb247CisJdTE2ICBvYl8yMzQ7CisJdTE2ICBkYjFfMjM0OworCXUxNiAgZGIyXzIzNDsKKwl1OCAgIGZ1dHVyZU1vZGFsWzRdOworCisJc3RydWN0IHNwdXJfY2hhbiBzcHVyQ2hhbnNbQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSU107Cit9IF9fcGFja2VkOworCisKK3N0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSB7CisJdTggcHdyUGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107CisJdTggdnBkUGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgeworCXU4IHB3clBkZ1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXVtBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFNdOworCXU4IHZwZFBkZ1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXVtBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCB0UG93MnhbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCB7CisJdTggYkNoYW5uZWw7CisJdTggdFBvdzJ4WzhdOworfSBfX3BhY2tlZDsKKworCisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECitzdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7CisJdTggYkNoYW5uZWw7CisJdTggZmxhZzoyLCB0UG93ZXI6NjsKK30gX19wYWNrZWQ7CisjZWxzZQorc3RydWN0IGNhbF9jdGxfZWRnZXMgeworCXU4IGJDaGFubmVsOworCXU4IHRQb3dlcjo2LCBmbGFnOjI7Cit9IF9fcGFja2VkOworI2VuZGlmCisKK3N0cnVjdCBjYWxfY3RsX2RhdGEgeworCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCisJY3RsRWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIHsKKwlzdHJ1Y3QgY2FsX2N0bF9lZGdlcworCWN0bEVkZ2VzW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFyNTQxNl9lZXByb21fZGVmIHsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyIGJhc2VFZXBIZWFkZXI7CisJdTggY3VzdERhdGFbNjRdOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyIG1vZGFsSGVhZGVyWzJdOworCXU4IGNhbEZyZXFQaWVyNUdbQVI1NDE2X05VTV81R19DQUxfUElFUlNdOworCXU4IGNhbEZyZXFQaWVyMkdbQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcQorCSBjYWxQaWVyRGF0YTVHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCisJIGNhbFBpZXJEYXRhMkdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKKwkgY2FsVGFyZ2V0UG93ZXI1R1tBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJIGNhbFRhcmdldFBvd2VyNUdIVDIwW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXI1R0hUNDBbQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKKwkgY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJIGNhbFRhcmdldFBvd2VyMkdbQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCSBjYWxUYXJnZXRQb3dlcjJHSFQyMFtBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJIGNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI1NDE2X05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhIGN0bERhdGFbQVI1NDE2X05VTV9DVExTXTsKKwl1OCBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFyNTQxNl9lZXByb21fNGsgeworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgYmFzZUVlcEhlYWRlcjsKKwl1OCBjdXN0RGF0YVsyMF07CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgbW9kYWxIZWFkZXI7CisJdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrCisJY2FsUGllckRhdGEyR1tBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU11bQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCWNhbFRhcmdldFBvd2VyQ2NrW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCWNhbFRhcmdldFBvd2VyMkdbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwljYWxUYXJnZXRQb3dlcjJHSFQ0MFtBUjU0MTZfRUVQNEtfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlNdOworCXU4IGN0bEluZGV4W0FSNTQxNl9FRVA0S19OVU1fQ1RMU107CisJc3RydWN0IGNhbF9jdGxfZGF0YV80ayBjdGxEYXRhW0FSNTQxNl9FRVA0S19OVU1fQ1RMU107CisJdTggcGFkZGluZzsKK30gX19wYWNrZWQ7CisKK2VudW0gcmVnX2V4dF9iaXRtYXAgeworCVJFR19FWFRfSkFQQU5fTUlEQkFORCA9IDEsCisJUkVHX0VYVF9GQ0NfREZTX0hUNDAgPSAyLAorCVJFR19FWFRfSkFQQU5fTk9OREZTX0hUNDAgPSAzLAorCVJFR19FWFRfSkFQQU5fREZTX0hUNDAgPSA0Cit9OworCitzdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSB7CisJdTE2IGNvdW50cnlDb2RlOworCXUxNiByZWdEbW5FbnVtOworCXUxNiByZWdEbW41RzsKKwl1MTYgcmVnRG1uMkc7CisJdTggaXNNdWx0aWRvbWFpbjsKKwl1OCBpc29bM107Cit9OworCitlbnVtIGF0aDlrX2VlcF9tYXAgeworCUVFUF9NQVBfREVGQVVMVCA9IDB4MCwKKwlFRVBfTUFQXzRLQklUUywKKwlFRVBfTUFQX01BWAorfTsKKworc3RydWN0IGVlcHJvbV9vcHMgeworCWludCAoKmNoZWNrX2VlcHJvbSkoc3RydWN0IGF0aF9odyAqaHcpOworCXUzMiAoKmdldF9lZXByb20pKHN0cnVjdCBhdGhfaHcgKmh3LCBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSk7CisJYm9vbCAoKmZpbGxfZWVwcm9tKShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJaW50ICgqZ2V0X2VlcHJvbV92ZXIpKHN0cnVjdCBhdGhfaHcgKmh3KTsKKwlpbnQgKCpnZXRfZWVwcm9tX3Jldikoc3RydWN0IGF0aF9odyAqaHcpOworCXU4ICgqZ2V0X251bV9hbnRfY29uZmlnKShzdHJ1Y3QgYXRoX2h3ICpodywgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKKwl1MTYgKCpnZXRfZWVwcm9tX2FudGVubmFfY2ZnKShzdHJ1Y3QgYXRoX2h3ICpodywKKwkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisJdm9pZCAoKnNldF9ib2FyZF92YWx1ZXMpKHN0cnVjdCBhdGhfaHcgKmh3LCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisJdm9pZCAoKnNldF9hZGRhYykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwlpbnQgKCpzZXRfdHhwb3dlcikoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJICAgdTE2IGNmZ0N0bCwgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJICAgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsIHU4IHBvd2VyTGltaXQpOworCXUxNiAoKmdldF9zcHVyX2NoYW5uZWwpKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopOworfTsKKworI2RlZmluZSBhcjU0MTZfZ2V0X250eGNoYWlucyhfdHhjaGFpbm1hc2spCQkJXAorCSgoKF90eGNoYWlubWFzayA+PiAyKSAmIDEpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAoKF90eGNoYWlubWFzayA+PiAxKSAmIDEpICsgKF90eGNoYWlubWFzayAmIDEpKQorCitpbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7CisKKyNlbmRpZiAvKiBFRVBST01fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmMKaW5kZXggYzM4YTAwYi4uYjE1ZWFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTcsODggKzE3LDgwIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgImluaXR2YWxzLmgiCiAKLXN0YXRpYyBjb25zdCB1OCBDTE9DS19SQVRFW10gPSB7IDQwLCA4MCwgMjIsIDQ0LCA4OCwgNDAgfTsKK3N0YXRpYyBpbnQgYnRjb2V4X2VuYWJsZTsKK21vZHVsZV9wYXJhbShidGNvZXhfZW5hYmxlLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYnRjb2V4X2VuYWJsZSwgIkVuYWJsZSBCbHVldG9vdGggY29leGlzdGVuY2Ugc3VwcG9ydCIpOwogCi1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfbXVsdGlfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX3NpbmdsZV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19pbml0X2RjX2NhbDsKKyNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV9DQ0sJCTIyCisjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNCTQwCisjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNCTQ0CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdHlwZSk7Ci1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR5cGUpOworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJICAgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpOwotc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhLAogCQkJICAgICAgdTMyIHJlZywgdTMyIHZhbHVlKTsKLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitzdGF0aWMgdm9pZCBhdGg5a19od185MjgwX3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIAogLyoqKioqKioqKioqKioqKioqKioqLwogLyogSGVscGVyIEZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY191c2VjKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGNsa3MpCitzdGF0aWMgdTMyIGF0aDlrX2h3X21hY191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKIHsKLQlpZiAoYWgtPmFoX2N1cmNoYW4gIT0gTlVMTCkKLQkJcmV0dXJuIGNsa3MgLyBDTE9DS19SQVRFW2F0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGFoLT5haF9jdXJjaGFuKV07Ci0JZWxzZQotCQlyZXR1cm4gY2xrcyAvIENMT0NLX1JBVEVbQVRIOUtfTU9ERV8xMUJdOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOworCisJaWYgKCFhaC0+Y3VyY2hhbikgLyogc2hvdWxkIHJlYWxseSBjaGVjayBmb3IgQ0NLIGluc3RlYWQgKi8KKwkJcmV0dXJuIGNsa3MgLyBBVEg5S19DTE9DS19SQVRFX0NDSzsKKwlpZiAoY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNOworCisJcmV0dXJuIGNsa3MgLyBBVEg5S19DTE9DS19SQVRFXzVHSFpfT0ZETTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfdG9fdXNlYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjbGtzKQorc3RhdGljIHUzMiBhdGg5a19od19tYWNfdG9fdXNlYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGNsa3MpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKIAotCWlmIChjaGFuICYmIElTX0NIQU5fSFQ0MChjaGFuKSkKKwlpZiAoY29uZl9pc19odDQwKGNvbmYpKQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX3VzZWMoYWgsIGNsa3MpIC8gMjsKIAllbHNlCiAJCXJldHVybiBhdGg5a19od19tYWNfdXNlYyhhaCwgY2xrcyk7CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX2Nsa3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXNlY3MpCitzdGF0aWMgdTMyIGF0aDlrX2h3X21hY19jbGtzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXNlY3MpCiB7Ci0JaWYgKGFoLT5haF9jdXJjaGFuICE9IE5VTEwpCi0JCXJldHVybiB1c2VjcyAqIENMT0NLX1JBVEVbYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwKLQkJCWFoLT5haF9jdXJjaGFuKV07Ci0JZWxzZQotCQlyZXR1cm4gdXNlY3MgKiBDTE9DS19SQVRFW0FUSDlLX01PREVfMTFCXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKKworCWlmICghYWgtPmN1cmNoYW4pIC8qIHNob3VsZCByZWFsbHkgY2hlY2sgZm9yIENDSyBpbnN0ZWFkICovCisJCXJldHVybiB1c2VjcyAqQVRIOUtfQ0xPQ0tfUkFURV9DQ0s7CisJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJcmV0dXJuIHVzZWNzICpBVEg5S19DTE9DS19SQVRFXzJHSFpfT0ZETTsKKwlyZXR1cm4gdXNlY3MgKkFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b19jbGtzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzZWNzKQorc3RhdGljIHUzMiBhdGg5a19od19tYWNfdG9fY2xrcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzZWNzKQogewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAKLQlpZiAoY2hhbiAmJiBJU19DSEFOX0hUNDAoY2hhbikpCisJaWYgKGNvbmZfaXNfaHQ0MChjb25mKSkKIAkJcmV0dXJuIGF0aDlrX2h3X21hY19jbGtzKGFoLCB1c2VjcykgKiAyOwogCWVsc2UKIAkJcmV0dXJuIGF0aDlrX2h3X21hY19jbGtzKGFoLCB1c2Vjcyk7CiB9CiAKLWVudW0gd2lyZWxlc3NfbW9kZSBhdGg5a19od19jaGFuMndtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlpZiAoSVNfQ0hBTl9CKGNoYW4pKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMUI7Ci0JaWYgKElTX0NIQU5fRyhjaGFuKSkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFHOwotCi0JcmV0dXJuIEFUSDlLX01PREVfMTFBOwotfQotCi1ib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKK2Jvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwsIHUzMiB0aW1lb3V0KQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IChBSF9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNKTsgaSsrKSB7CisJQlVHX09OKHRpbWVvdXQgPCBBSF9USU1FX1FVQU5UVU0pOworCisJZm9yIChpID0gMDsgaSA8ICh0aW1lb3V0IC8gQUhfVElNRV9RVUFOVFVNKTsgaSsrKSB7CiAJCWlmICgoUkVHX1JFQUQoYWgsIHJlZykgJiBtYXNrKSA9PSB2YWwpCiAJCQlyZXR1cm4gdHJ1ZTsKIApAQCAtMTA2LDggKzk4LDggQEAKIAl9CiAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdfSU8sCi0JCSJ0aW1lb3V0IG9uIHJlZyAweCV4OiAweCUwOHggJiAweCUwOHggIT0gMHglMDh4XG4iLAotCQlyZWcsIFJFR19SRUFEKGFoLCByZWcpLCBtYXNrLCB2YWwpOworCQkidGltZW91dCAoJWQgdXMpIG9uIHJlZyAweCV4OiAweCUwOHggJiAweCUwOHggIT0gMHglMDh4XG4iLAorCQl0aW1lb3V0LCByZWcsIFJFR19SRUFEKGFoLCByZWcpLCBtYXNrLCB2YWwpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTI0LDExICsxMTYsMTEgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1ib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgIHUxNiBmbGFncywgdTE2ICpsb3csCiAJCQkgICAgIHUxNiAqaGlnaCkKIHsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAKIAlpZiAoZmxhZ3MgJiBDSEFOTkVMXzVHSFopIHsKIAkJKmxvdyA9IHBDYXAtPmxvd181Z2h6X2NoYW47CkBAIC0xNDMsNyArMTM1LDcgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXUxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaGFsICphaCwKK3UxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKIAkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwKIAkJCSAgIGJvb2wgc2hvcnRQcmVhbWJsZSkKQEAgLTE2NSwxNSArMTU3LDE1IEBACiAJCXR4VGltZSA9IENDS19TSUZTX1RJTUUgKyBwaHlUaW1lICsgKChudW1CaXRzICogMTAwMCkgLyBrYnBzKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX1JDX1BIWV9PRkRNOgotCQlpZiAoYWgtPmFoX2N1cmNoYW4gJiYgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoYWgtPmFoX2N1cmNoYW4pKSB7CisJCWlmIChhaC0+Y3VyY2hhbiAmJiBJU19DSEFOX1FVQVJURVJfUkFURShhaC0+Y3VyY2hhbikpIHsKIAkJCWJpdHNQZXJTeW1ib2wgPQkoa2JwcyAqIE9GRE1fU1lNQk9MX1RJTUVfUVVBUlRFUikgLyAxMDAwOwogCQkJbnVtQml0cyA9IE9GRE1fUExDUF9CSVRTICsgKGZyYW1lTGVuIDw8IDMpOwogCQkJbnVtU3ltYm9scyA9IERJVl9ST1VORF9VUChudW1CaXRzLCBiaXRzUGVyU3ltYm9sKTsKIAkJCXR4VGltZSA9IE9GRE1fU0lGU19USU1FX1FVQVJURVIKIAkJCQkrIE9GRE1fUFJFQU1CTEVfVElNRV9RVUFSVEVSCiAJCQkJKyAobnVtU3ltYm9scyAqIE9GRE1fU1lNQk9MX1RJTUVfUVVBUlRFUik7Ci0JCX0gZWxzZSBpZiAoYWgtPmFoX2N1cmNoYW4gJiYKLQkJCSAgIElTX0NIQU5fSEFMRl9SQVRFKGFoLT5haF9jdXJjaGFuKSkgeworCQl9IGVsc2UgaWYgKGFoLT5jdXJjaGFuICYmCisJCQkgICBJU19DSEFOX0hBTEZfUkFURShhaC0+Y3VyY2hhbikpIHsKIAkJCWJpdHNQZXJTeW1ib2wgPQkoa2JwcyAqIE9GRE1fU1lNQk9MX1RJTUVfSEFMRikgLyAxMDAwOwogCQkJbnVtQml0cyA9IE9GRE1fUExDUF9CSVRTICsgKGZyYW1lTGVuIDw8IDMpOwogCQkJbnVtU3ltYm9scyA9IERJVl9ST1VORF9VUChudW1CaXRzLCBiaXRzUGVyU3ltYm9sKTsKQEAgLTE5OSw1MiArMTkxLDExIEBACiAJcmV0dXJuIHR4VGltZTsKIH0KIAotdTMyIGF0aDlrX2h3X21oejJpZWVlKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZyZXEsIHUzMiBmbGFncykKLXsKLQlpZiAoZmxhZ3MgJiBDSEFOTkVMXzJHSFopIHsKLQkJaWYgKGZyZXEgPT0gMjQ4NCkKLQkJCXJldHVybiAxNDsKLQkJaWYgKGZyZXEgPCAyNDg0KQotCQkJcmV0dXJuIChmcmVxIC0gMjQwNykgLyA1OwotCQllbHNlCi0JCQlyZXR1cm4gMTUgKyAoKGZyZXEgLSAyNTEyKSAvIDIwKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgQ0hBTk5FTF81R0haKSB7Ci0JCWlmIChhdGg5a19yZWdkX2lzX3B1YmxpY19zYWZldHlfc2t1KGFoKSAmJgotCQkgICAgSVNfQ0hBTl9JTl9QVUJMSUNfU0FGRVRZX0JBTkQoZnJlcSkpIHsKLQkJCXJldHVybiAoKGZyZXEgKiAxMCkgKwotCQkJCSgoKGZyZXEgJSA1KSA9PSAyKSA/IDUgOiAwKSAtIDQ5NDAwKSAvIDU7Ci0JCX0gZWxzZSBpZiAoKGZsYWdzICYgQ0hBTk5FTF9BKSAmJiAoZnJlcSA8PSA1MDAwKSkgewotCQkJcmV0dXJuIChmcmVxIC0gNDAwMCkgLyA1OwotCQl9IGVsc2UgewotCQkJcmV0dXJuIChmcmVxIC0gNTAwMCkgLyA1OwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZyZXEgPT0gMjQ4NCkKLQkJCXJldHVybiAxNDsKLQkJaWYgKGZyZXEgPCAyNDg0KQotCQkJcmV0dXJuIChmcmVxIC0gMjQwNykgLyA1OwotCQlpZiAoZnJlcSA8IDUwMDApIHsKLQkJCWlmIChhdGg5a19yZWdkX2lzX3B1YmxpY19zYWZldHlfc2t1KGFoKQotCQkJICAgICYmIElTX0NIQU5fSU5fUFVCTElDX1NBRkVUWV9CQU5EKGZyZXEpKSB7Ci0JCQkJcmV0dXJuICgoZnJlcSAqIDEwKSArCi0JCQkJCSgoKGZyZXEgJSA1KSA9PQotCQkJCQkgIDIpID8gNSA6IDApIC0gNDk0MDApIC8gNTsKLQkJCX0gZWxzZSBpZiAoZnJlcSA+IDQ5MDApIHsKLQkJCQlyZXR1cm4gKGZyZXEgLSA0MDAwKSAvIDU7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiAxNSArICgoZnJlcSAtIDI1MTIpIC8gMjApOwotCQkJfQotCQl9Ci0JCXJldHVybiAoZnJlcSAtIDUwMDApIC8gNTsKLQl9Ci19Ci0KLXZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgIHN0cnVjdCBjaGFuX2NlbnRlcnMgKmNlbnRlcnMpCiB7CiAJaW50OF90IGV4dG9mZjsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKCFJU19DSEFOX0hUNDAoY2hhbikpIHsKIAkJY2VudGVycy0+Y3RsX2NlbnRlciA9IGNlbnRlcnMtPmV4dF9jZW50ZXIgPQpAQCAtMjY3LDE2ICsyMTgsMTUgQEAKIAkJY2VudGVycy0+c3ludGhfY2VudGVyIC0gKGV4dG9mZiAqIEhUNDBfQ0hBTk5FTF9DRU5URVJfU0hJRlQpOwogCWNlbnRlcnMtPmV4dF9jZW50ZXIgPQogCQljZW50ZXJzLT5zeW50aF9jZW50ZXIgKyAoZXh0b2ZmICoKLQkJCSAoKGFocC0+YWhfZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjApID8KKwkJCSAoKGFoLT5leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCkgPwogCQkJICBIVDQwX0NIQU5ORUxfQ0VOVEVSX1NISUZUIDogMTUpKTsKLQogfQogCiAvKioqKioqKioqKioqKioqKioqLwogLyogQ2hpcCBSZXZpc2lvbnMgKi8KIC8qKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3JlYWRfcmV2aXNpb25zKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3JlYWRfcmV2aXNpb25zKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB2YWw7CiAKQEAgLTI4NCwyMSArMjM0LDIyIEBACiAKIAlpZiAodmFsID09IDB4RkYpIHsKIAkJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1NSRVYpOwotCQlhaC0+YWhfbWFjVmVyc2lvbiA9ICh2YWwgJiBBUl9TUkVWX1ZFUlNJT04yKSA+PiBBUl9TUkVWX1RZUEUyX1M7Ci0JCWFoLT5haF9tYWNSZXYgPSBNUyh2YWwsIEFSX1NSRVZfUkVWSVNJT04yKTsKLQkJYWgtPmFoX2lzUGNpRXhwcmVzcyA9ICh2YWwgJiBBUl9TUkVWX1RZUEUyX0hPU1RfTU9ERSkgPyAwIDogMTsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9CisJCQkodmFsICYgQVJfU1JFVl9WRVJTSU9OMikgPj4gQVJfU1JFVl9UWVBFMl9TOworCQlhaC0+aHdfdmVyc2lvbi5tYWNSZXYgPSBNUyh2YWwsIEFSX1NSRVZfUkVWSVNJT04yKTsKKwkJYWgtPmlzX3BjaWV4cHJlc3MgPSAodmFsICYgQVJfU1JFVl9UWVBFMl9IT1NUX01PREUpID8gMCA6IDE7CiAJfSBlbHNlIHsKIAkJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKQotCQkJYWgtPmFoX21hY1ZlcnNpb24gPSBNUyh2YWwsIEFSX1NSRVZfVkVSU0lPTik7CisJCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID0gTVModmFsLCBBUl9TUkVWX1ZFUlNJT04pOwogCi0JCWFoLT5haF9tYWNSZXYgPSB2YWwgJiBBUl9TUkVWX1JFVklTSU9OOworCQlhaC0+aHdfdmVyc2lvbi5tYWNSZXYgPSB2YWwgJiBBUl9TUkVWX1JFVklTSU9OOwogCi0JCWlmIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKQotCQkJYWgtPmFoX2lzUGNpRXhwcmVzcyA9IHRydWU7CisJCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpCisJCQlhaC0+aXNfcGNpZXhwcmVzcyA9IHRydWU7CiAJfQogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9yYWRpb3JldihzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X2dldF9yYWRpb3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdmFsOwogCWludCBpOwpAQCAtMzE3LDkgKzI2OCw5IEBACiAvKiBIVyBBdHRhY2gsIERldGFjaCwgSW5pdCBSb3V0aW5lcyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZGlzYWJsZXBjaWUoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfZGlzYWJsZXBjaWUoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaWYgKCFBUl9TUkVWXzkxMDAoYWgpKQorCWlmIChBUl9TUkVWXzkxMDAoYWgpKQogCQlyZXR1cm47CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDkyNDhmYzAwKTsKQEAgLTMzNSw3ICsyODYsNyBAQAogCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF90ZXN0KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfdGVzdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcmVnQWRkclsyXSA9IHsgQVJfU1RBX0lEMCwgQVJfUEhZX0JBU0UgKyAoOCA8PCAyKSB9OwogCXUzMiByZWdIb2xkWzJdOwpAQCAtMzc3LDYgKzMyOCw3IEBACiAJCVJFR19XUklURShhaCwgcmVnQWRkcltpXSwgcmVnSG9sZFtpXSk7CiAJfQogCXVkZWxheSgxMDApOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM4OSw2ICszNDEsOCBAQAogCQlyZXR1cm4gIkF0aGVyb3MgNTQxOCI7CiAJY2FzZSBBUjkxNjBfREVWSURfUENJOgogCQlyZXR1cm4gIkF0aGVyb3MgOTE2MCI7CisJY2FzZSBBUjU0MTZfQVI5MTAwX0RFVklEOgorCQlyZXR1cm4gIkF0aGVyb3MgOTEwMCI7CiAJY2FzZSBBUjkyODBfREVWSURfUENJOgogCWNhc2UgQVI5MjgwX0RFVklEX1BDSUU6CiAJCXJldHVybiAiQXRoZXJvcyA5MjgwIjsKQEAgLTM5OSw0NCArMzUzLDQ0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZhdWx0cyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmYXVsdHMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKLQlhaC0+YWhfY29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSA9IDI7Ci0JYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IDEwOwotCWFoLT5haF9jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOwotCWFoLT5haF9jb25maWcuYWNrXzZtYiA9IDB4MDsKLQlhaC0+YWhfY29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKLQlhaC0+YWhfY29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX2wxc2twX2VuYWJsZSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2VyX3Jlc2V0ID0gMHgxMDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Jlc3RvcmUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV93YWVuID0gMDsKLQlhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZyA9IDE7Ci0JYWgtPmFoX2NvbmZpZy5odF9lbmFibGUgPSAxOwotCWFoLT5haF9jb25maWcub2ZkbV90cmlnX2xvdyA9IDIwMDsKLQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOwotCWFoLT5haF9jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKLQlhaC0+YWhfY29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKLQlhaC0+YWhfY29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCWFoLT5haF9jb25maWcubm9pc2VfaW1tdW5pdHlfbGV2ZWwgPSA0OwotCWFoLT5haF9jb25maWcub2ZkbV93ZWFrc2lnbmFsX2RldCA9IDE7Ci0JYWgtPmFoX2NvbmZpZy5jY2tfd2Vha3NpZ25hbF90aHIgPSAwOwotCWFoLT5haF9jb25maWcuc3B1cl9pbW11bml0eV9sZXZlbCA9IDI7Ci0JYWgtPmFoX2NvbmZpZy5maXJzdGVwX2xldmVsID0gMDsKLQlhaC0+YWhfY29uZmlnLnJzc2lfdGhyX2hpZ2ggPSA0MDsKLQlhaC0+YWhfY29uZmlnLnJzc2lfdGhyX2xvdyA9IDc7Ci0JYWgtPmFoX2NvbmZpZy5kaXZlcnNpdHlfY29udHJvbCA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKKwlhaC0+Y29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSA9IDI7CisJYWgtPmNvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IDEwOworCWFoLT5jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOworCWFoLT5jb25maWcuYWNrXzZtYiA9IDB4MDsKKwlhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKKwlhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX2wxc2twX2VuYWJsZSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX3Bvd2VyX3Jlc2V0ID0gMHgxMDA7CisJYWgtPmNvbmZpZy5wY2llX3Jlc3RvcmUgPSAwOworCWFoLT5jb25maWcucGNpZV93YWVuID0gMDsKKwlhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZyA9IDE7CisJYWgtPmNvbmZpZy5odF9lbmFibGUgPSAxOworCWFoLT5jb25maWcub2ZkbV90cmlnX2xvdyA9IDIwMDsKKwlhaC0+Y29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOworCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKKwlhaC0+Y29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKKwlhaC0+Y29uZmlnLmVuYWJsZV9hbmkgPSAxOworCWFoLT5jb25maWcubm9pc2VfaW1tdW5pdHlfbGV2ZWwgPSA0OworCWFoLT5jb25maWcub2ZkbV93ZWFrc2lnbmFsX2RldCA9IDE7CisJYWgtPmNvbmZpZy5jY2tfd2Vha3NpZ25hbF90aHIgPSAwOworCWFoLT5jb25maWcuc3B1cl9pbW11bml0eV9sZXZlbCA9IDI7CisJYWgtPmNvbmZpZy5maXJzdGVwX2xldmVsID0gMDsKKwlhaC0+Y29uZmlnLnJzc2lfdGhyX2hpZ2ggPSA0MDsKKwlhaC0+Y29uZmlnLnJzc2lfdGhyX2xvdyA9IDc7CisJYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbCA9IDA7CisJYWgtPmNvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQlhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVswXSA9IEFSX05PX1NQVVI7Ci0JCWFoLT5haF9jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKKwkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMF0gPSBBUl9OT19TUFVSOworCQlhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVsxXSA9IEFSX05PX1NQVVI7CiAJfQogCi0JYWgtPmFoX2NvbmZpZy5pbnRyX21pdGlnYXRpb24gPSAxOworCWFoLT5jb25maWcuaW50cl9taXRpZ2F0aW9uID0gMTsKIAogCS8qCiAJICogV2UgbmVlZCB0aGlzIGZvciBQQ0kgZGV2aWNlcyBvbmx5IChDYXJkYnVzLCBQQ0ksIG1pbmlQQ0kpCkBAIC00NTUsNjIgKzQwOSw1NCBAQAogCSAqIGRldmljZXMgKGxlZ2FjeSwgODAyLjExYWJnKS4KIAkgKi8KIAlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCi0JCWFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPSBTRVJfUkVHX01PREVfQVVUTzsKKwkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9IFNFUl9SRUdfTU9ERV9BVVRPOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9oYWxfNTQxNiAqYXRoOWtfaHdfbmV3c3RhdGUodTE2IGRldmlkLAotCQkJCQkgICAgICBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICAgICAgdm9pZCBfX2lvbWVtICptZW0sCi0JCQkJCSAgICAgIGludCAqc3RhdHVzKQorc3RhdGljIHN0cnVjdCBhdGhfaHcgKmF0aDlrX2h3X25ld3N0YXRlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJCWludCAqc3RhdHVzKQogewotCXN0YXRpYyBjb25zdCB1OCBkZWZic3NpZG1hc2tbRVRIX0FMRU5dID0KLQkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwOwotCXN0cnVjdCBhdGhfaGFsICphaDsKKwlzdHJ1Y3QgYXRoX2h3ICphaDsKIAotCWFocCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGhfaGFsXzU0MTYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoYWhwID09IE5VTEwpIHsKKwlhaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGhfaHcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWggPT0gTlVMTCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0YXRlIGJsb2NrXG4iKTsKIAkJKnN0YXR1cyA9IC1FTk9NRU07CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWFoID0gJmFocC0+YWg7CiAJYWgtPmFoX3NjID0gc2M7Ci0JYWgtPmFoX3NoID0gbWVtOwotCWFoLT5haF9tYWdpYyA9IEFSNTQxNl9NQUdJQzsKLQlhaC0+YWhfY291bnRyeUNvZGUgPSBDVFJZX0RFRkFVTFQ7Ci0JYWgtPmFoX2RldmlkID0gZGV2aWQ7Ci0JYWgtPmFoX3N1YnZlbmRvcmlkID0gMDsKKwlhaC0+aHdfdmVyc2lvbi5tYWdpYyA9IEFSNTQxNl9NQUdJQzsKKwlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX0RFRkFVTFQ7CisJYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKKwlhaC0+aHdfdmVyc2lvbi5zdWJ2ZW5kb3JpZCA9IDA7CiAKIAlhaC0+YWhfZmxhZ3MgPSAwOwogCWlmICgoZGV2aWQgPT0gQVI1NDE2X0FSOTEwMF9ERVZJRCkpCi0JCWFoLT5haF9tYWNWZXJzaW9uID0gQVJfU1JFVl9WRVJTSU9OXzkxMDA7CisJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCWFoLT5haF9mbGFncyA9IEFIX1VTRV9FRVBST007CiAKLQlhaC0+YWhfcG93ZXJMaW1pdCA9IE1BWF9SQVRFX1BPV0VSOwotCWFoLT5haF90cFNjYWxlID0gQVRIOUtfVFBfU0NBTEVfTUFYOwotCWFocC0+YWhfYXRpbVdpbmRvdyA9IDA7Ci0JYWhwLT5haF9kaXZlcnNpdHlDb250cm9sID0gYWgtPmFoX2NvbmZpZy5kaXZlcnNpdHlfY29udHJvbDsKLQlhaHAtPmFoX2FudGVubmFTd2l0Y2hTd2FwID0KLQkJYWgtPmFoX2NvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwOwotCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgPSBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRTsKLQlhaHAtPmFoX2JlYWNvbkludGVydmFsID0gMTAwOwotCWFocC0+YWhfZW5hYmxlMzJrSHpDbG9jayA9IERPTlRfVVNFXzMyS0haOwotCWFocC0+YWhfc2xvdHRpbWUgPSAodTMyKSAtMTsKLQlhaHAtPmFoX2Fja3RpbWVvdXQgPSAodTMyKSAtMTsKLQlhaHAtPmFoX2N0c3RpbWVvdXQgPSAodTMyKSAtMTsKLQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOwotCW1lbWNweSgmYWhwLT5haF9ic3NpZG1hc2ssIGRlZmJzc2lkbWFzaywgRVRIX0FMRU4pOworCWFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0ID0gTUFYX1JBVEVfUE9XRVI7CisJYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgPSBBVEg5S19UUF9TQ0FMRV9NQVg7CisJYWgtPmF0aW1fd2luZG93ID0gMDsKKwlhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wgPSBhaC0+Y29uZmlnLmRpdmVyc2l0eV9jb250cm9sOworCWFoLT5hbnRlbm5hX3N3aXRjaF9zd2FwID0KKwkJYWgtPmNvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwOworCWFoLT5zdGFfaWQxX2RlZmF1bHRzID0gQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7CisJYWgtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKKwlhaC0+ZW5hYmxlXzMya0h6X2Nsb2NrID0gRE9OVF9VU0VfMzJLSFo7CisJYWgtPnNsb3R0aW1lID0gKHUzMikgLTE7CisJYWgtPmFja3RpbWVvdXQgPSAodTMyKSAtMTsKKwlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOworCWFoLT5nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKIAotCWFocC0+YWhfZ0JlYWNvblJhdGUgPSAwOworCWFoLT5nYmVhY29uX3JhdGUgPSAwOwogCi0JcmV0dXJuIGFocDsKKwlyZXR1cm4gYWg7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcmZhdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19yZmF0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlib29sIHJmU3RhdHVzID0gZmFsc2U7CiAJaW50IGVjb2RlID0gMDsKQEAgLTUyNSw3ICs0NzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X3JmX2NsYWltKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcmZfY2xhaW0oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHZhbDsKIApAQCAtNTQ1LDg4ICs0OTEsODcgQEAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKIAkJCSI1RyBSYWRpbyBDaGlwIFJldiAweCUwMlggaXMgbm90ICIKIAkJCSJzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXJcbiIsCi0JCQlhaC0+YWhfYW5hbG9nNUdoelJldik7CisJCQlhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWFoLT5haF9hbmFsb2c1R2h6UmV2ID0gdmFsOworCWFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYgPSB2YWw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19pbml0X21hY2FkZHIoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19pbml0X21hY2FkZHIoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHN1bTsKIAlpbnQgaTsKIAl1MTYgZWV2YWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAogCXN1bSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEFSX0VFUFJPTV9NQUMoaSkpOworCQllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBBUl9FRVBST01fTUFDKGkpKTsKIAkJc3VtICs9IGVldmFsOwotCQlhaHAtPmFoX21hY2FkZHJbMiAqIGldID0gZWV2YWwgPj4gODsKLQkJYWhwLT5haF9tYWNhZGRyWzIgKiBpICsgMV0gPSBlZXZhbCAmIDB4ZmY7CisJCWFoLT5tYWNhZGRyWzIgKiBpXSA9IGVldmFsID4+IDg7CisJCWFoLT5tYWNhZGRyWzIgKiBpICsgMV0gPSBlZXZhbCAmIDB4ZmY7CiAJfQogCWlmIChzdW0gPT0gMCB8fCBzdW0gPT0gMHhmZmZmICogMykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCiAJCQkibWFjIGFkZHJlc3MgcmVhZCBmYWlsZWQ6ICVwTVxuIiwKLQkJCWFocC0+YWhfbWFjYWRkcik7CisJCQlhaC0+bWFjYWRkcik7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9yeGdhaW5faW5pKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcnhnYWluX2luaShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcnhnYWluX3R5cGU7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKSA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNykgewotCQlyeGdhaW5fdHlwZSA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SWEdBSU5fVFlQRSk7CisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKSA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNykgeworCQlyeGdhaW5fdHlwZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUlhHQUlOX1RZUEUpOwogCiAJCWlmIChyeGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1JYR0FJTl8xM0RCX0JBQ0tPRkYpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19iYWNrb2ZmXzEzZGJfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfYmFja29mZl8xM2RiX3J4Z2Fpbl85MjgwXzIpLCA2KTsKIAkJZWxzZSBpZiAocnhnYWluX3R5cGUgPT0gQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGKQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfYmFja29mZl8yM2RiX3J4Z2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX2JhY2tvZmZfMjNkYl9yeGdhaW5fOTI4MF8yKSwgNik7CiAJCWVsc2UKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX29yaWdpbmFsX3J4Z2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX29yaWdpbmFsX3J4Z2Fpbl85MjgwXzIpLCA2KTsKLQl9IGVsc2UKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sCisJfSBlbHNlIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX29yaWdpbmFsX3J4Z2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX29yaWdpbmFsX3J4Z2Fpbl85MjgwXzIpLCA2KTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdHhnYWluX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3R4Z2Fpbl9pbmkoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHR4Z2Fpbl90eXBlOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQlpZiAoYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX01JTk9SX1JFVikgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpIHsKLQkJdHhnYWluX3R5cGUgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfVFhHQUlOX1RZUEUpOworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX01JTk9SX1JFVikgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpIHsKKwkJdHhnYWluX3R5cGUgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKTsKIAogCQlpZiAodHhnYWluX3R5cGUgPT0gQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUikKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzVHhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85MjgwXzIpLCA2KTsKIAkJZWxzZQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4MF8yKSwgNik7Ci0JfSBlbHNlCi0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzVHhHYWluLAorCX0gZWxzZSB7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCWFyOTI4ME1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4MF8yLAogCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4MF8yKSwgNik7CisJfQogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X3Bvc3RfYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcG9zdF9hdHRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGVjb2RlOwogCkBAIC02NDMsNiArNTg4LDEwIEBACiAJZWNvZGUgPSBhdGg5a19od19lZXByb21fYXR0YWNoKGFoKTsKIAlpZiAoZWNvZGUgIT0gMCkKIAkJcmV0dXJuIGVjb2RlOworCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ09ORklHLCAiRWVwcm9tIFZFUjogJWQsIFJFVjogJWRcbiIsCisJCWFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCksIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkpOworCiAJZWNvZGUgPSBhdGg5a19od19yZmF0dGFjaChhaCk7CiAJaWYgKGVjb2RlICE9IDApCiAJCXJldHVybiBlY29kZTsKQEAgLTY1NSwyMzggKzYwNCwyMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBhdGhfaGFsICphdGg5a19od19kb19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICB2b2lkIF9faW9tZW0gKm1lbSwgaW50ICpzdGF0dXMpCitzdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfZG9fYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJCSBpbnQgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfaHcgKmFoOwogCWludCBlY29kZTsKIAl1MzIgaSwgajsKIAotCWFocCA9IGF0aDlrX2h3X25ld3N0YXRlKGRldmlkLCBzYywgbWVtLCBzdGF0dXMpOwotCWlmIChhaHAgPT0gTlVMTCkKKwlhaCA9IGF0aDlrX2h3X25ld3N0YXRlKGRldmlkLCBzYywgc3RhdHVzKTsKKwlpZiAoYWggPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlhaCA9ICZhaHAtPmFoOwotCiAJYXRoOWtfaHdfc2V0X2RlZmF1bHRzKGFoKTsKIAotCWlmIChhaC0+YWhfY29uZmlnLmludHJfbWl0aWdhdGlvbiAhPSAwKQotCQlhaHAtPmFoX2ludHJNaXRpZ2F0aW9uID0gdHJ1ZTsKKwlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24gIT0gMCkKKwkJYWgtPmludHJfbWl0aWdhdGlvbiA9IHRydWU7CiAKIAlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1BPV0VSX09OKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgIkNvdWxkbid0IHJlc2V0IGNoaXBcbiIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CiAJCWVjb2RlID0gLUVJTzsKIAkJZ290byBiYWQ7CiAJfQogCiAJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3Qgd2FrZXVwIGNoaXBcbiIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3Qgd2FrZXVwIGNoaXBcbiIpOwogCQllY29kZSA9IC1FSU87CiAJCWdvdG8gYmFkOwogCX0KIAotCWlmIChhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9BVVRPKSB7Ci0JCWlmIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgfHwKLQkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmICFhaC0+YWhfaXNQY2lFeHByZXNzKSkgewotCQkJYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJIHx8CisJCSAgICAoQVJfU1JFVl85MjgwKGFoKSAmJiAhYWgtPmlzX3BjaWV4cHJlc3MpKSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KIAkJCQlTRVJfUkVHX01PREVfT047CiAJCX0gZWxzZSB7Ci0JCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQogCQkJCVNFUl9SRUdfTU9ERV9PRkY7CiAJCX0KIAl9CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKLQkJInNlcmlhbGl6ZV9yZWdtb2RlIGlzICVkXG4iLAotCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlKTsKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCisJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOwogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpICYmCi0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSAmJgotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCisJaWYgKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkgJiYKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCiAJICAgICghQVJfU1JFVl85MTAwKGFoKSkgJiYgKCFBUl9TUkVWXzkyODAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4NShhaCkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkJIk1hYyBDaGlwIFJldiAweCUwMnguJXggaXMgbm90IHN1cHBvcnRlZCBieSAiCi0JCQkidGhpcyBkcml2ZXJcbiIsIGFoLT5haF9tYWNWZXJzaW9uLCBhaC0+YWhfbWFjUmV2KTsKKwkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKKwkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCWVjb2RlID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gYmFkOwogCX0KIAogCWlmIChBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCWFocC0+YWhfaXFDYWxEYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJYWhwLT5haF9zdXBwQ2FscyA9IElRX01JU01BVENIX0NBTDsKLQkJYWgtPmFoX2lzUGNpRXhwcmVzcyA9IGZhbHNlOworCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9tdWx0aV9zYW1wbGU7CisJCWFoLT5zdXBwX2NhbHMgPSBJUV9NSVNNQVRDSF9DQUw7CisJCWFoLT5pc19wY2lleHByZXNzID0gZmFsc2U7CiAJfQotCWFoLT5haF9waHlSZXYgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0NISVBfSUQpOworCWFoLT5od192ZXJzaW9uLnBoeVJldiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0hJUF9JRCk7CiAKIAlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewogCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjR2FpbkNhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9zaW5nbGVfc2FtcGxlOworCQkJYWgtPmFkY2dhaW5fY2FsZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZGNfY2FsX3NpbmdsZV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsSW5pdERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsaW5pdGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19pbml0X2RjX2NhbDsKIAkJfSBlbHNlIHsKLQkJCWFocC0+YWhfaXFDYWxEYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjR2FpbkNhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9tdWx0aV9zYW1wbGU7CisJCQlhaC0+YWRjZ2Fpbl9jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNEY0NhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2RjX2NhbF9tdWx0aV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsSW5pdERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsaW5pdGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19pbml0X2RjX2NhbDsKIAkJfQotCQlhaHAtPmFoX3N1cHBDYWxzID0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTCB8IElRX01JU01BVENIX0NBTDsKKwkJYWgtPnN1cHBfY2FscyA9IEFEQ19HQUlOX0NBTCB8IEFEQ19EQ19DQUwgfCBJUV9NSVNNQVRDSF9DQUw7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTE2MChhaCkpIHsKLQkJYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pID0gMTsKLQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gPSAoQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgfAotCQkJCQlBVEg5S19BTklfRklSU1RFUF9MRVZFTCk7Ci0JfSBlbHNlIHsKLQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOwotCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gJj0JfkFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDsKLQkJfQotCX0KKwlhaC0+YW5pX2Z1bmN0aW9uID0gQVRIOUtfQU5JX0FMTDsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJYWgtPmFuaV9mdW5jdGlvbiAmPSB+QVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOwogCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCisJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJIlRoaXMgTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBcbiIsCi0JCWFoLT5haF9tYWNWZXJzaW9uLCBhaC0+YWhfbWFjUmV2KTsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwgYWgtPmh3X3ZlcnNpb24ubWFjUmV2KTsKIAogCWlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1XzFfMiwKKworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1XzFfMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4NU1vZGVzXzkyODVfMV8yKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODVfMV8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1Q29tbW9uXzkyODVfMV8yKSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NV8xXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMiksIDIpOwogCQl9IGVsc2UgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCWFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMiwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yKSwKIAkJCQkgIDIpOwogCQl9CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1LAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NSksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyOTI4NUNvbW1vbl85Mjg1LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODUsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVDb21tb25fOTI4NSksIDIpOwogCi0JCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkgeworCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODUsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1KSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODUsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1KSwgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODBfMiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MF8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfOTI4MF8yKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODBfMiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4MENvbW1vbl85MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBDb21tb25fOTI4MF8yKSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQkgICAgICAgYXI5MjgwUGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4MCksMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJICAgICAgIGFyOTI4MFBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85MjgwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwUGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODApLCAyKTsKIAkJfQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc0FkZGl0aW9uYWwsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsLAogCQkJICAgICAgIGFyOTI4ME1vZGVzX2Zhc3RfY2xvY2tfOTI4MF8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzIpLCAzKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc185MjgwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MENvbW1vbl85MjgwKSwgMik7CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTE2MCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyNTQxNkNvbW1vbl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb25fOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswXzkxNjApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQkJfUmZHYWluLCBhcjU0MTZCQl9SZkdhaW5fOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluXzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMV85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhcjU0MTZCYW5rMl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMl85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazJfOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYXI1NDE2QmFuazNfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazNfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszXzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazYsIGFyNTQxNkJhbms2XzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2XzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNl85MTYwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUENfOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYXI1NDE2QmFuazdfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazdfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3XzkxNjApLCAyKTsKIAkJaWYgKEFSX1NSRVZfOTE2MF8xMShhaCkpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywKIAkJCQkgICAgICAgYXI1NDE2QWRkYWNfOTE2MDFfMSwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTYwMV8xKSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTE2MCwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxNjAsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWNfOTE2MCksIDIpOwogCQl9CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkxMDBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjU0MTZNb2Rlc185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTEwMCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyNTQxNkNvbW1vbl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb25fOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswXzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQkJfUmZHYWluLCBhcjU0MTZCQl9SZkdhaW5fOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluXzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMV85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhcjU0MTZCYW5rMl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMl85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazJfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYXI1NDE2QmFuazNfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazNfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszXzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazYsIGFyNTQxNkJhbms2XzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2XzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNl85MTAwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUENfOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYXI1NDE2QmFuazdfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazdfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3XzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTAwKSwgMik7CiAJfSBlbHNlIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2RlcywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNk1vZGVzKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2Q29tbW9uKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2FpbiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2FpbiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJCX1JmR2FpbiksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazEsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazEpLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsyKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rMywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazMsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMyksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazYsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2LAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazYpLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2VFBDKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rNywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazcsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNyksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWMpLCAyKTsKIAl9CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcykKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCiAJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7CiAJZWxzZQogCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CkBAIC04OTUsNiArODM1LDIyIEBACiAJaWYgKGVjb2RlICE9IDApCiAJCWdvdG8gYmFkOwogCisJaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwkJdTMyIHR4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CisKKwkJLyogdHhnYWluIHRhYmxlICovCisJCWlmICh0eGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yLAorCQkJQVJSQVlfU0laRShhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzIpLCA2KTsKKwkJfSBlbHNlIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQlhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yLAorCQkJQVJSQVlfU0laRShhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yKSwgNik7CisJCX0KKworCX0KKwogCS8qIHJ4Z2FpbiB0YWJsZSAqLwogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQogCQlhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoYWgpOwpAQCAtOTAzLDUzICs4NTksNTUgQEAKIAlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkKIAkJYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKGFoKTsKIAotCWlmIChhaC0+YWhfZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKLQkJCXUzMiByZWcgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIDApOworCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwgImZhaWxlZCBhdGg5a19od19maWxsX2NhcF9pbmZvXG4iKTsKKwkJZWNvZGUgPSAtRUlOVkFMOworCQlnb3RvIGJhZDsKKwl9CiAKLQkJCWZvciAoaiA9IDE7IGogPCBhaHAtPmFoX2luaU1vZGVzLmlhX2NvbHVtbnM7IGorKykgewotCQkJCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIGopOworCWlmICgoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgJiYKKwkgICAgdGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewogCi0JCQkJSU5JX1JBKCZhaHAtPmFoX2luaU1vZGVzLCBpLCBqKSA9CisJCS8qIEVFUFJPTSBGaXh1cCAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaU1vZGVzLmlhX3Jvd3M7IGkrKykgeworCQkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCAwKTsKKworCQkJZm9yIChqID0gMTsgaiA8IGFoLT5pbmlNb2Rlcy5pYV9jb2x1bW5zOyBqKyspIHsKKwkJCQl1MzIgdmFsID0gSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIGopOworCisJCQkJSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIGopID0KIAkJCQkJYXRoOWtfaHdfaW5pX2ZpeHVwKGFoLAotCQkJCQkJCSAgICZhaHAtPmFoX2VlcHJvbS5kZWYsCisJCQkJCQkJICAgJmFoLT5lZXByb20uZGVmLAogCQkJCQkJCSAgIHJlZywgdmFsKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCi0JCQkiZmFpbGVkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm9cbiIpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KLQogCWVjb2RlID0gYXRoOWtfaHdfaW5pdF9tYWNhZGRyKGFoKTsKIAlpZiAoZWNvZGUgIT0gMCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJCSJmYWlsZWQgaW5pdGlhbGl6aW5nIG1hYyBhZGRyZXNzXG4iKTsKIAkJZ290byBiYWQ7CiAJfQogCiAJaWYgKEFSX1NSRVZfOTI4NShhaCkpCi0JCWFoLT5haF90eFRyaWdMZXZlbCA9IChBUl9GVFJJR18yNTZCID4+IEFSX0ZUUklHX1MpOworCQlhaC0+dHhfdHJpZ19sZXZlbCA9IChBUl9GVFJJR18yNTZCID4+IEFSX0ZUUklHX1MpOwogCWVsc2UKLQkJYWgtPmFoX3R4VHJpZ0xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CisJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CiAKIAlhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKGFoKTsKIAogCXJldHVybiBhaDsKIGJhZDoKLQlpZiAoYWhwKQotCQlhdGg5a19od19kZXRhY2goKHN0cnVjdCBhdGhfaGFsICopIGFocCk7CisJaWYgKGFoKQorCQlhdGg5a19od19kZXRhY2goYWgpOwogCWlmIChzdGF0dXMpCiAJCSpzdGF0dXMgPSBlY29kZTsKIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2JiKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBzeW50aERlbGF5OwpAQCAtOTY1LDcgKzkyMyw3IEBACiAJdWRlbGF5KHN5bnRoRGVsYXkgKyBCQVNFX0FDVElWQVRFX0RFTEFZKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9xb3Moc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9xb3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9NSUNfUU9TX0NPTlRST0wsIDB4MTAwYWEpOwogCVJFR19XUklURShhaCwgQVJfTUlDX1FPU19TRUxFQ1QsIDB4MzIxMCk7CkBAIC05ODIsNyArOTQwLDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1RYT1BfMTJfMTUsIDB4RkZGRkZGRkYpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBwbGw7CkBAIC0xMDQzLDI3ICsxMDAxLDI2IEBACiAJCQkJcGxsIHw9IFNNKDB4YiwgQVJfUlRDX1BMTF9ESVYpOwogCQl9CiAJfQotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19QTExfQ09OVFJPTCksIHBsbCk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUExMX0NPTlRST0wsIHBsbCk7CiAKIAl1ZGVsYXkoUlRDX1BMTF9TRVRUTEVfREVMQVkpOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfU0xFRVBfQ0xLLCBBUl9SVENfRk9SQ0VfREVSSVZFRF9DTEspOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2NoYWluX21hc2tzKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfY2hhaW5fbWFza3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgcnhfY2hhaW5tYXNrLCB0eF9jaGFpbm1hc2s7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOwotCXR4X2NoYWlubWFzayA9IGFocC0+YWhfdHhjaGFpbm1hc2s7CisJcnhfY2hhaW5tYXNrID0gYWgtPnJ4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCXN3aXRjaCAocnhfY2hhaW5tYXNrKSB7CiAJY2FzZSAweDU6CiAJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQU5BTE9HX1NXQVAsCiAJCQkgICAgQVJfUEhZX1NXQVBfQUxUX0NIQUlOKTsKIAljYXNlIDB4MzoKLQkJaWYgKCgoYWgpLT5haF9tYWNWZXJzaW9uIDw9IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkgeworCQlpZiAoKChhaCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA8PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpIHsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX1JYX0NIQUlOTUFTSywgMHg3KTsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIDB4Nyk7CiAJCQlicmVhazsKQEAgLTEwODgsMjggKzEwNDUsMjYgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9BTkFMT0dfU1dBUCkgfCAweDAwMDAwMDAxKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWFocC0+YWhfbWFza1JlZyA9IEFSX0lNUl9UWEVSUiB8CisJYWgtPm1hc2tfcmVnID0gQVJfSU1SX1RYRVJSIHwKIAkJQVJfSU1SX1RYVVJOIHwKIAkJQVJfSU1SX1JYRVJSIHwKIAkJQVJfSU1SX1JYT1JOIHwKIAkJQVJfSU1SX0JDTk1JU0M7CiAKLQlpZiAoYWhwLT5haF9pbnRyTWl0aWdhdGlvbikKLQkJYWhwLT5haF9tYXNrUmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKIAllbHNlCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfUlhPSzsKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWE9LOwogCi0JYWhwLT5haF9tYXNrUmVnIHw9IEFSX0lNUl9UWE9LOworCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfVFhPSzsKIAogCWlmIChvcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfTUlCOworCQlhaC0+bWFza19yZWcgfD0gQVJfSU1SX01JQjsKIAotCVJFR19XUklURShhaCwgQVJfSU1SLCBhaHAtPmFoX21hc2tSZWcpOworCVJFR19XUklURShhaCwgQVJfSU1SLCBhaC0+bWFza19yZWcpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MyLCBSRUdfUkVBRChhaCwgQVJfSU1SX1MyKSB8IEFSX0lNUl9TMl9HVFQpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CkBAIC0xMTE5LDcyICsxMDc0LDY0IEBACiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzID4gYXRoOWtfaHdfbWFjX3RvX3VzZWMoYWgsIE1TKDB4ZmZmZmZmZmYsIEFSX1RJTUVfT1VUX0FDSykpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYmFkIGFjayB0aW1lb3V0ICV1XG4iLCB1cyk7Ci0JCWFocC0+YWhfYWNrdGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCiAJCQkgICAgICBBUl9USU1FX09VVF9BQ0ssIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX2Fja3RpbWVvdXQgPSB1czsKKwkJYWgtPmFja3RpbWVvdXQgPSB1czsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzID4gYXRoOWtfaHdfbWFjX3RvX3VzZWMoYWgsIE1TKDB4ZmZmZmZmZmYsIEFSX1RJTUVfT1VUX0NUUykpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYmFkIGN0cyB0aW1lb3V0ICV1XG4iLCB1cyk7Ci0JCWFocC0+YWhfY3RzdGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCiAJCQkgICAgICBBUl9USU1FX09VVF9DVFMsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX2N0c3RpbWVvdXQgPSB1czsKKwkJYWgtPmN0c3RpbWVvdXQgPSB1czsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0dSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdHUpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh0dSA+IDB4RkZGRikgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19YTUlULAogCQkJImJhZCBnbG9iYWwgdHggdGltZW91dCAldVxuIiwgdHUpOwotCQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CiAJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HVFhUTywgQVJfR1RYVE9fVElNRU9VVF9MSU1JVCwgdHUpOwotCQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9IHR1OworCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gdHU7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF91c2VyX3NldHRpbmdzKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYWgtPm1pc2NfbW9kZSAweCV4XG4iLAorCQlhaC0+bWlzY19tb2RlKTsKIAotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYWhwLT5haF9taXNjTW9kZSAweCV4XG4iLAotCQlhaHAtPmFoX21pc2NNb2RlKTsKLQotCWlmIChhaHAtPmFoX21pc2NNb2RlICE9IDApCisJaWYgKGFoLT5taXNjX21vZGUgIT0gMCkKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ1VfTUlTQywKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX1BDVV9NSVNDKSB8IGFocC0+YWhfbWlzY01vZGUpOwotCWlmIChhaHAtPmFoX3Nsb3R0aW1lICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWhwLT5haF9zbG90dGltZSk7Ci0JaWYgKGFocC0+YWhfYWNrdGltZW91dCAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KGFoLCBhaHAtPmFoX2Fja3RpbWVvdXQpOwotCWlmIChhaHAtPmFoX2N0c3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9jdHNfdGltZW91dChhaCwgYWhwLT5haF9jdHN0aW1lb3V0KTsKLQlpZiAoYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KGFoLCBhaHAtPmFoX2dsb2JhbHR4dGltZW91dCk7CisJCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaC0+bWlzY19tb2RlKTsKKwlpZiAoYWgtPnNsb3R0aW1lICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWgtPnNsb3R0aW1lKTsKKwlpZiAoYWgtPmFja3RpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWgtPmFja3RpbWVvdXQpOworCWlmIChhaC0+Y3RzdGltZW91dCAhPSAodTMyKSAtMSkKKwkJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhaC0+Y3RzdGltZW91dCk7CisJaWYgKGFoLT5nbG9iYWx0eHRpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KGFoLCBhaC0+Z2xvYmFsdHh0aW1lb3V0KTsKIH0KIAogY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpCkBAIC0xMTkzLDcgKzExNDAsNyBAQAogCQlhdGg5a19od19kZXZuYW1lKGRldmlkKSA6IE5VTEw7CiB9CiAKLXZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghQVJfU1JFVl85MTAwKGFoKSkKIAkJYXRoOWtfaHdfYW5pX2RldGFjaChhaCk7CkBAIC0xMjAzLDE5ICsxMTUwLDE5IEBACiAJa2ZyZWUoYWgpOwogfQogCi1zdHJ1Y3QgYXRoX2hhbCAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJdm9pZCBfX2lvbWVtICptZW0sIGludCAqZXJyb3IpCitzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBOVUxMOworCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKIAogCXN3aXRjaCAoZGV2aWQpIHsKIAljYXNlIEFSNTQxNl9ERVZJRF9QQ0k6CiAJY2FzZSBBUjU0MTZfREVWSURfUENJRToKKwljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6CiAJY2FzZSBBUjkxNjBfREVWSURfUENJOgogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgogCWNhc2UgQVI5Mjg1X0RFVklEX1BDSUU6Ci0JCWFoID0gYXRoOWtfaHdfZG9fYXR0YWNoKGRldmlkLCBzYywgbWVtLCBlcnJvcik7CisJCWFoID0gYXRoOWtfaHdfZG9fYXR0YWNoKGRldmlkLCBzYywgZXJyb3IpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkqZXJyb3IgPSAtRU5YSU87CkBAIC0xMjI5LDcgKzExNzYsNyBAQAogLyogSU5JICovCiAvKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfb3ZlcnJpZGVfaW5pKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCS8qCkBAIC0xMjQwLDIwICsxMTg3LDIwIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX0RJQUdfU1csIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAogCi0JaWYgKCFBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSB8fAorCWlmICghQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSB8fAogCSAgICBBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlyZXR1cm47CiAKIAlSRUdfV1JJVEUoYWgsIDB4OTgwMCArICg2NTEgPDwgMiksIDB4MTEpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICYocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIpOwogCi0Jc3dpdGNoIChhaC0+YWhfZGV2aWQpIHsKKwlzd2l0Y2ggKGFoLT5od192ZXJzaW9uLmRldmlkKSB7CiAJY2FzZSBBUjkyODBfREVWSURfUENJOgogCQlpZiAocmVnID09IDB4Nzg5NCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5ZLApAQCAtMTI4MSwyNCArMTIyOCwzMyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhLAogCQkJICAgICAgdTMyIHJlZywgdTMyIHZhbHVlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoYWhwLT5haF9lZXBfbWFwID09IEVFUF9NQVBfNEtCSVRTKQorCWlmIChhaC0+ZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKIAkJcmV0dXJuIHZhbHVlOwogCWVsc2UKIAkJcmV0dXJuIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoYWgsIHBFZXBEYXRhLCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19wcm9jZXNzX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspCisJCWFoLT5vcmlnaW5hbEdhaW5baV0gPQorCQkJTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCksCisJCQkJCUFSX1BIWV9UWF9HQUlOKTsKKwlhaC0+UERBRENkZWx0YSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcHJvY2Vzc19pbmkoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CiAJaW50IGksIHJlZ1dyaXRlcyA9IDA7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjaGFuLT5jaGFuOwogCXUzMiBtb2Rlc0luZGV4LCBmcmVxSW5kZXg7CiAJaW50IHN0YXR1czsKIApAQCAtMTMzMCw0MCArMTI4NiwzOCBAQAogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZKDApLCAweDAwMDAwMDA3KTsKLQogCVJFR19XUklURShhaCwgQVJfUEhZX0FEQ19TRVJJQUxfQ1RMLCBBUl9QSFlfU0VMX0VYVEVSTkFMX1JBRElPKTsKKwlhaC0+ZWVwX29wcy0+c2V0X2FkZGFjKGFoLCBjaGFuKTsKIAotCWF0aDlrX2h3X3NldF9hZGRhYyhhaCwgY2hhbik7Ci0KLQlpZiAoQVJfU1JFVl81NDE2X1YyMl9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCAxLCByZWdXcml0ZXMpOworCWlmIChBUl9TUkVWXzU0MTZfMjJfT1JfTEFURVIoYWgpKSB7CisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaUFkZGFjLCAxLCByZWdXcml0ZXMpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBhcjU0MTZJbmlBcnJheSB0ZW1wOwogCQl1MzIgYWRkYWNTaXplID0KLQkJCXNpemVvZih1MzIpICogYWhwLT5haF9pbmlBZGRhYy5pYV9yb3dzICoKLQkJCWFocC0+YWhfaW5pQWRkYWMuaWFfY29sdW1uczsKKwkJCXNpemVvZih1MzIpICogYWgtPmluaUFkZGFjLmlhX3Jvd3MgKgorCQkJYWgtPmluaUFkZGFjLmlhX2NvbHVtbnM7CiAKLQkJbWVtY3B5KGFocC0+YWhfYWRkYWM1NDE2XzIxLAotCQkgICAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9hcnJheSwgYWRkYWNTaXplKTsKKwkJbWVtY3B5KGFoLT5hZGRhYzU0MTZfMjEsCisJCSAgICAgICBhaC0+aW5pQWRkYWMuaWFfYXJyYXksIGFkZGFjU2l6ZSk7CiAKLQkJKGFocC0+YWhfYWRkYWM1NDE2XzIxKVszMSAqIGFocC0+YWhfaW5pQWRkYWMuaWFfY29sdW1ucyArIDFdID0gMDsKKwkJKGFoLT5hZGRhYzU0MTZfMjEpWzMxICogYWgtPmluaUFkZGFjLmlhX2NvbHVtbnMgKyAxXSA9IDA7CiAKLQkJdGVtcC5pYV9hcnJheSA9IGFocC0+YWhfYWRkYWM1NDE2XzIxOwotCQl0ZW1wLmlhX2NvbHVtbnMgPSBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnM7Ci0JCXRlbXAuaWFfcm93cyA9IGFocC0+YWhfaW5pQWRkYWMuaWFfcm93czsKKwkJdGVtcC5pYV9hcnJheSA9IGFoLT5hZGRhYzU0MTZfMjE7CisJCXRlbXAuaWFfY29sdW1ucyA9IGFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zOworCQl0ZW1wLmlhX3Jvd3MgPSBhaC0+aW5pQWRkYWMuaWFfcm93czsKIAkJUkVHX1dSSVRFX0FSUkFZKCZ0ZW1wLCAxLCByZWdXcml0ZXMpOwogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZX0FEQ19TRVJJQUxfQ1RMLCBBUl9QSFlfU0VMX0lOVEVSTkFMX0FEREFDKTsKIAotCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaU1vZGVzLmlhX3Jvd3M7IGkrKykgewotCQl1MzIgcmVnID0gSU5JX1JBKCZhaHAtPmFoX2luaU1vZGVzLCBpLCAwKTsKLQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgbW9kZXNJbmRleCk7CisJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKKwkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCAwKTsKKwkJdTMyIHZhbCA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCBtb2Rlc0luZGV4KTsKIAogCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKIAogCQlpZiAocmVnID49IDB4NzgwMCAmJiByZWcgPCAweDc4YTAKLQkJICAgICYmIGFoLT5haF9jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CisJCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykgewogCQkJdWRlbGF5KDEwMCk7CiAJCX0KIApAQCAtMTM3MSwxOSArMTMyNSwyMCBAQAogCX0KIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKQotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCi0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwgbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKKwlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCAoQVJfU1JFVl85Mjg1KGFoKSAmJgorCSAgICBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSkKKwkJUkVHX1dSSVRFX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlDb21tb24uaWFfcm93czsgaSsrKSB7Ci0JCXUzMiByZWcgPSBJTklfUkEoJmFocC0+YWhfaW5pQ29tbW9uLCBpLCAwKTsKLQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlDb21tb24sIGksIDEpOworCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pQ29tbW9uLmlhX3Jvd3M7IGkrKykgeworCQl1MzIgcmVnID0gSU5JX1JBKCZhaC0+aW5pQ29tbW9uLCBpLCAwKTsKKwkJdTMyIHZhbCA9IElOSV9SQSgmYWgtPmluaUNvbW1vbiwgaSwgMSk7CiAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKQEAgLTEzOTMsNyArMTM0OCw3IEBACiAJYXRoOWtfaHdfd3JpdGVfcmVncyhhaCwgbW9kZXNJbmRleCwgZnJlcUluZGV4LCByZWdXcml0ZXMpOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkgJiYgSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGNoYW4pKSB7Ci0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc0FkZGl0aW9uYWwsIG1vZGVzSW5kZXgsCisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzQWRkaXRpb25hbCwgbW9kZXNJbmRleCwKIAkJCQlyZWdXcml0ZXMpOwogCX0KIApAQCAtMTQwMSwxMyArMTM1NiwxNSBAQAogCWF0aDlrX2h3X3NldF9yZWdzKGFoLCBjaGFuLCBtYWNtb2RlKTsKIAlhdGg5a19od19pbml0X2NoYWluX21hc2tzKGFoKTsKIAotCXN0YXR1cyA9IGF0aDlrX2h3X3NldF90eHBvd2VyKGFoLCBjaGFuLAotCQkJCSAgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJICAgICAgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKGFoLAotCQkJCQkJCQkgICAgIGNoYW4pLAotCQkJCSAgICAgIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSAgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkJICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpOworCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJYXRoOWtfb2xjX2luaXQoYWgpOworCisJc3RhdHVzID0gYWgtPmVlcF9vcHMtPnNldF90eHBvd2VyKGFoLCBjaGFuLAorCQkJCSAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCQkgIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAorCQkJCSAgY2hhbm5lbC0+bWF4X3Bvd2VyICogMiwKKwkJCQkgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgICAgICAodTMyKSBhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCkpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAogCQkJImVycm9yIGluaXQnaW5nIHRyYW5zbWl0IHBvd2VyXG4iKTsKQEAgLTE0MjcsNyArMTM4NCw3IEBACiAvKiBSZXNldCBhbmQgQ2hhbm5lbCBTd2l0Y2hpbmcgUm91dGluZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmZtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmZtb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgcmZNb2RlID0gMDsKIApAQCAtMTQ0NywxMiArMTQwNCwxMiBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX01PREUsIHJmTW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9ESVMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0X2RtYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0X2RtYShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcmVndmFsOwogCkBAIC0xNDYyLDcgKzE0MTksNyBAQAogCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9UWENGRykgJiB+QVJfVFhDRkdfRE1BU1pfTUFTSzsKIAlSRUdfV1JJVEUoYWgsIEFSX1RYQ0ZHLCByZWd2YWwgfCBBUl9UWENGR19ETUFTWl8xMjhCKTsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1RYQ0ZHLCBBUl9GVFJJRywgYWgtPmFoX3R4VHJpZ0xldmVsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9UWENGRywgQVJfRlRSSUcsIGFoLT50eF90cmlnX2xldmVsKTsKIAogCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9SWENGRykgJiB+QVJfUlhDRkdfRE1BU1pfTUFTSzsKIAlSRUdfV1JJVEUoYWgsIEFSX1JYQ0ZHLCByZWd2YWwgfCBBUl9SWENGR19ETUFTWl8xMjhCKTsKQEAgLTE0NzgsNyArMTQzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgb3Btb2RlKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgb3Btb2RlKQogewogCXUzMiB2YWw7CiAKQEAgLTE0OTEsNiArMTQ0OCw3IEBACiAJCVJFR19DTFJfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgdmFsIHwgQVJfU1RBX0lEMV9BREhPQwogCQkJICB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7CiAJCVJFR19TRVRfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKQEAgLTE1MDIsNyArMTQ2MCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfZ2V0X2RlbHRhX3Nsb3BlX3ZhbHMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2dldF9kZWx0YV9zbG9wZV92YWxzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkJIHUzMiBjb2VmX3NjYWxlZCwKIAkJCQkJCSB1MzIgKmNvZWZfbWFudGlzc2EsCiAJCQkJCQkgdTMyICpjb2VmX2V4cG9uZW50KQpAQCAtMTUyMSw3ICsxNDc5LDcgQEAKIAkqY29lZl9leHBvbmVudCA9IGNvZWZfZXhwIC0gMTY7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWx0YV9zbG9wZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgY29lZl9zY2FsZWQsIGRzX2NvZWZfZXhwLCBkc19jb2VmX21hbjsKQEAgLTE1NTUsMTEgKzE1MTMsMTkgQEAKIAkJICAgICAgQVJfUEhZX0hBTEZHSV9EU0NfRVhQLCBkc19jb2VmX2V4cCk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCB0eXBlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgdHlwZSkKIHsKIAl1MzIgcnN0X2ZsYWdzOwogCXUzMiB0bXBSZWc7CiAKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSkgeworCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CisJCXZhbCAmPSB+QVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRDsKKwkJdmFsIHw9IFNNKDEsIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QpOworCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgdmFsKTsKKwkJKHZvaWQpUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CisJfQorCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwgQVJfUlRDX0ZPUkNFX1dBS0VfRU4gfAogCQkgIEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CiAKQEAgLTE1ODIsMTEgKzE1NDgsMTEgQEAKIAkJCXJzdF9mbGFncyB8PSBBUl9SVENfUkNfTUFDX0NPTEQ7CiAJfQogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgcnN0X2ZsYWdzKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SQywgcnN0X2ZsYWdzKTsKIAl1ZGVsYXkoNTApOwogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgMCk7Ci0JaWYgKCFhdGg5a19od193YWl0KGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgQVJfUlRDX1JDX00sIDApKSB7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkMsIDApOworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUlRDX1JDLCBBUl9SVENfUkNfTSwgMCwgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKIAkJCSJSVEMgc3R1Y2sgaW4gTUFDIHJlc2V0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTYwMywxOCArMTU2OSwyMCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcG93ZXJfb24oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3Bvd2VyX29uKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwgMCk7Ci0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwgMSk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDApOworCXVkZWxheSgyKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMSk7CiAKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsCiAJCQkgICBBUl9SVENfU1RBVFVTLAogCQkJICAgQVJfUlRDX1NUQVRVU19NLAotCQkJICAgQVJfUlRDX1NUQVRVU19PTikpIHsKKwkJCSAgIEFSX1JUQ19TVEFUVVNfT04sCisJCQkgICBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiUlRDIG5vdCB3YWtpbmcgdXBcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTYyNCw3ICsxNTkyLDcgQEAKIAlyZXR1cm4gYXRoOWtfaHdfc2V0X3Jlc2V0KGFoLCBBVEg5S19SRVNFVF9XQVJNKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0eXBlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR5cGUpCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9FTiB8IEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CkBAIC0xNjQyLDEyICsxNjEwLDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJICAgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CiAJdTMyIHBoeW1vZGU7CiAJdTMyIGVuYWJsZURhY0ZpZm8gPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKGFoKSkKIAkJZW5hYmxlRGFjRmlmbyA9IChSRUdfUkVBRChhaCwgQVJfUEhZX1RVUkJPKSAmCkBAIC0xNjYzLDcgKzE2MzAsNyBAQAogCQkgICAgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykpCiAJCQlwaHltb2RlIHw9IEFSX1BIWV9GQ19EWU4yMDQwX1BSSV9DSDsKIAotCQlpZiAoYWhwLT5haF9leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSkKKwkJaWYgKGFoLT5leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSkKIAkJCXBoeW1vZGUgfD0gQVJfUEhZX0ZDX0RZTjIwNDBfRVhUX0NIOwogCX0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UVVJCTywgcGh5bW9kZSk7CkBAIC0xNjc0LDU0ICsxNjQxLDMwIEBACiAJUkVHX1dSSVRFKGFoLCBBUl9DU1QsIDB4RiA8PCBBUl9DU1RfVElNRU9VVF9MSU1JVF9TKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pKQorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1BPV0VSX09OKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9XQVJNKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhaHAtPmFoX2NoaXBGdWxsU2xlZXAgPSBmYWxzZTsKLQorCWFoLT5jaGlwX2Z1bGxzbGVlcCA9IGZhbHNlOwogCWF0aDlrX2h3X2luaXRfcGxsKGFoLCBjaGFuKTsKLQogCWF0aDlrX2h3X3NldF9yZm1vZGUoYWgsIGNoYW4pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYXRoOWtfaHdfY2hlY2tfY2hhbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0JaWYgKCEoSVNfQ0hBTl8yR0haKGNoYW4pIF4gSVNfQ0hBTl81R0haKGNoYW4pKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBub3QgbWFya2VkIGFzICIKLQkJCSIyR0h6IG9yIDVHSHpcbiIsIGNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmICghSVNfQ0hBTl9PRkRNKGNoYW4pICYmCi0JICAgICFJU19DSEFOX0IoY2hhbikgJiYKLQkgICAgIUlTX0NIQU5fSFQyMChjaGFuKSAmJgotCSAgICAhSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vdCBtYXJrZWQgYXMgIgotCQkJIk9GRE0gb3IgQ0NLIG9yIEhUMjAgb3IgSFQ0MFBMVVMgb3IgSFQ0ME1JTlVTXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgc3ludGhEZWxheSwgcW51bTsKIAogCWZvciAocW51bSA9IDA7IHFudW0gPCBBUl9OVU1fUUNVOyBxbnVtKyspIHsKQEAgLTE3MzQsNyArMTY3Nyw3IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRkJVU19SRVEsIEFSX1BIWV9SRkJVU19SRVFfRU4pOwogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1JGQlVTX0dSQU5ULCBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sCi0JCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4pKSB7CisJCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAogCQkJIkNvdWxkIG5vdCBraWxsIGJhc2ViYW5kIFJYXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTc1NiwxMiArMTY5OSwxMiBAQAogCQl9CiAJfQogCi0JaWYgKGF0aDlrX2h3X3NldF90eHBvd2VyKGFoLCBjaGFuLAotCQkJCSBhdGg5a19yZWdkX2dldF9jdGwoYWgsIGNoYW4pLAotCQkJCSBhdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoYWgsIGNoYW4pLAotCQkJCSBjaGFuLT5tYXhSZWdUeFBvd2VyICogMiwKLQkJCQkgbWluKCh1MzIpIE1BWF9SQVRFX1BPV0VSLAotCQkJCSAgICAgKHUzMikgYWgtPmFoX3Bvd2VyTGltaXQpKSAhPSAwKSB7CisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKIAkJCSJlcnJvciBpbml0J2luZyB0cmFuc21pdCBwb3dlclxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE3OTEsNyArMTczNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgYmJfc3B1ciA9IEFSX05PX1NQVVI7CiAJaW50IGZyZXE7CkBAIC0xODI1LDkgKzE3NjgsOSBAQAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CiAKLQlhaC0+YWhfY29uZmlnLnNwdXJtb2RlID0gU1BVUl9FTkFCTEVfRUVQUk9NOworCWFoLT5jb25maWcuc3B1cm1vZGUgPSBTUFVSX0VOQUJMRV9FRVBST007CiAJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7Ci0JCWN1cl9iYl9zcHVyID0gYXRoOWtfaHdfZWVwcm9tX2dldF9zcHVyX2NoYW4oYWgsIGksIGlzMkdIeik7CisJCWN1cl9iYl9zcHVyID0gYWgtPmVlcF9vcHMtPmdldF9zcHVyX2NoYW5uZWwoYWgsIGksIGlzMkdIeik7CiAKIAkJaWYgKGlzMkdIeikKIAkJCWN1cl9iYl9zcHVyID0gKGN1cl9iYl9zcHVyIC8gMTApICsgQVJfQkFTRV9GUkVRXzJHSFo7CkBAIC0xOTM4LDkgKzE4ODEsOSBAQAogCQlpZiAoKGN1cl92aXRfbWFzayA+IGxvd2VyKSAmJiAoY3VyX3ZpdF9tYXNrIDwgdXBwZXIpKSB7CiAKIAkJCS8qIHdvcmthcm91bmQgZm9yIGdjYyBidWcgIzM3MDE0ICovCi0JCQl2b2xhdGlsZSBpbnQgdG1wID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CisJCQl2b2xhdGlsZSBpbnQgdG1wX3YgPSBhYnMoY3VyX3ZpdF9tYXNrIC0gYmluKTsKIAotCQkJaWYgKHRtcCA8IDc1KQorCQkJaWYgKHRtcF92IDwgNzUpCiAJCQkJbWFza19hbXQgPSAxOwogCQkJZWxzZQogCQkJCW1hc2tfYW10ID0gMDsKQEAgLTIwNDEsNyArMTk4NCw3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUFTSzJfUF82MV80NSwgdG1wX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgYmJfc3B1ciA9IEFSX05PX1NQVVI7CiAJaW50IGJpbiwgY3VyX2JpbjsKQEAgLTIwNzAsNyArMjAxMyw3IEBACiAJbWVtc2V0KCZtYXNrX3AsIDAsIHNpemVvZihpbnQ4X3QpICogMTIzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQljdXJfYmJfc3B1ciA9IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKGFoLCBpLCBpczJHSHopOworCQljdXJfYmJfc3B1ciA9IGFoLT5lZXBfb3BzLT5nZXRfc3B1cl9jaGFubmVsKGFoLCBpLCBpczJHSHopOwogCQlpZiAoQVJfTk9fU1BVUiA9PSBjdXJfYmJfc3B1cikKIAkJCWJyZWFrOwogCQljdXJfYmJfc3B1ciA9IGN1cl9iYl9zcHVyIC0gKGNoYW4tPmNoYW5uZWwgKiAxMCk7CkBAIC0yMTM5LDkgKzIwODIsOSBAQAogCQlpZiAoKGN1cl92aXRfbWFzayA+IGxvd2VyKSAmJiAoY3VyX3ZpdF9tYXNrIDwgdXBwZXIpKSB7CiAKIAkJCS8qIHdvcmthcm91bmQgZm9yIGdjYyBidWcgIzM3MDE0ICovCi0JCQl2b2xhdGlsZSBpbnQgdG1wID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CisJCQl2b2xhdGlsZSBpbnQgdG1wX3YgPSBhYnMoY3VyX3ZpdF9tYXNrIC0gYmluKTsKIAotCQkJaWYgKHRtcCA8IDc1KQorCQkJaWYgKHRtcF92IDwgNzUpCiAJCQkJbWFza19hbXQgPSAxOwogCQkJZWxzZQogCQkJCW1hc2tfYW10ID0gMDsKQEAgLTIyNDIsNTggKzIxODUsNDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NQVNLMl9QXzYxXzQ1LCB0bXBfbWFzayk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlLAotCQkgICAgdTggdHhjaGFpbm1hc2ssIHU4IHJ4Y2hhaW5tYXNrLAotCQkgICAgZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZywKLQkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UsIGludCAqc3RhdHVzKQoraW50IGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpCiB7CiAJdTMyIHNhdmVMZWRTdGF0ZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmN1cmNoYW4gPSBhaC0+Y3VyY2hhbjsKIAl1MzIgc2F2ZURlZkFudGVubmE7CiAJdTMyIG1hY1N0YUlkMTsKLQlpbnQgZWNvZGU7Ci0JaW50IGksIHJ4X2NoYWlubWFzazsKKwlpbnQgaSwgcnhfY2hhaW5tYXNrLCByOwogCi0JYWhwLT5haF9leHRwcm90c3BhY2luZyA9IGV4dHByb3RzcGFjaW5nOwotCWFocC0+YWhfdHhjaGFpbm1hc2sgPSB0eGNoYWlubWFzazsKLQlhaHAtPmFoX3J4Y2hhaW5tYXNrID0gcnhjaGFpbm1hc2s7CisJYWgtPmV4dHByb3RzcGFjaW5nID0gc2MtPmh0X2V4dHByb3RzcGFjaW5nOworCWFoLT50eGNoYWlubWFzayA9IHNjLT50eF9jaGFpbm1hc2s7CisJYWgtPnJ4Y2hhaW5tYXNrID0gc2MtPnJ4X2NoYWlubWFzazsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7Ci0JCWFocC0+YWhfdHhjaGFpbm1hc2sgJj0gMHgzOwotCQlhaHAtPmFoX3J4Y2hhaW5tYXNrICY9IDB4MzsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCQlhaC0+dHhjaGFpbm1hc2sgJj0gMHgxOworCQlhaC0+cnhjaGFpbm1hc2sgJj0gMHgxOworCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSkgeworCQlhaC0+dHhjaGFpbm1hc2sgJj0gMHgzOworCQlhaC0+cnhjaGFpbm1hc2sgJj0gMHgzOwogCX0KIAotCWlmIChhdGg5a19od19jaGVja19jaGFuKGFoLCBjaGFuKSA9PSBOVUxMKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkgewotCQllY29kZSA9IC1FSU87Ci0JCWdvdG8gYmFkOwotCX0KKwlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpCisJCXJldHVybiAtRUlPOwogCiAJaWYgKGN1cmNoYW4pCiAJCWF0aDlrX2h3X2dldG5mKGFoLCBjdXJjaGFuKTsKIAogCWlmIChiQ2hhbm5lbENoYW5nZSAmJgotCSAgICAoYWhwLT5haF9jaGlwRnVsbFNsZWVwICE9IHRydWUpICYmCi0JICAgIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKSAmJgotCSAgICAoY2hhbi0+Y2hhbm5lbCAhPSBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCkgJiYKKwkgICAgKGFoLT5jaGlwX2Z1bGxzbGVlcCAhPSB0cnVlKSAmJgorCSAgICAoYWgtPmN1cmNoYW4gIT0gTlVMTCkgJiYKKwkgICAgKGNoYW4tPmNoYW5uZWwgIT0gYWgtPmN1cmNoYW4tPmNoYW5uZWwpICYmCiAJICAgICgoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BTEwpID09Ci0JICAgICAoYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSkgJiYKKwkgICAgIChhaC0+Y3VyY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BTEwpKSAmJgogCSAgICAoIUFSX1NSRVZfOTI4MChhaCkgfHwgKCFJU19DSEFOX0FfNU1IWl9TUEFDRUQoY2hhbikgJiYKLQkJCQkgICAhSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGFoLT5haF9jdXJjaGFuKSkpKSB7CisJCQkJICAgIUlTX0NIQU5fQV81TUhaX1NQQUNFRChhaC0+Y3VyY2hhbikpKSkgewogCi0JCWlmIChhdGg5a19od19jaGFubmVsX2NoYW5nZShhaCwgY2hhbiwgbWFjbW9kZSkpIHsKLQkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmFoX2N1cmNoYW4pOworCQlpZiAoYXRoOWtfaHdfY2hhbm5lbF9jaGFuZ2UoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKSkgeworCQkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CiAJCQlhdGg5a19od19zdGFydF9uZmNhbChhaCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCkBAIC0yMzExLDI4ICsyMjQzLDMyIEBACiAKIAlpZiAoIWF0aDlrX2h3X2NoaXBfcmVzZXQoYWgsIGNoYW4pKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiY2hpcCByZXNldCBmYWlsZWRcbiIpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgewotCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCi0JCQkgICAgQVJfR1BJT19KVEFHX0RJU0FCTEUpOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKIAotCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkgewotCQkJaWYgKElTX0NIQU5fNUdIWihjaGFuKSkKLQkJCQlhdGg5a19od19zZXRfZ3BpbyhhaCwgOSwgMCk7Ci0JCQllbHNlCi0JCQkJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIDksIDEpOwotCQl9Ci0JCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIDksIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCX0KKwlyID0gYXRoOWtfaHdfcHJvY2Vzc19pbmkoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKLQllY29kZSA9IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKGFoLCBjaGFuLCBtYWNtb2RlKTsKLQlpZiAoZWNvZGUgIT0gMCkgewotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KKwkvKiBTZXR1cCBNRlAgb3B0aW9ucyBmb3IgQ0NNUCAqLworCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKSB7CisJCS8qIE1hc2sgUmV0cnkoYjExKSwgUHdyTWd0KGIxMiksIE1vcmVEYXRhKGIxMykgdG8gMCBpbiBtZ210CisJCSAqIGZyYW1lcyB3aGVuIGNvbnN0cnVjdGluZyBDQ01QIEFBRC4gKi8KKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQUVTX01VVEVfTUFTSzEsIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQsCisJCQkgICAgICAweGM3ZmYpOworCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSBmYWxzZTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJLyogRGlzYWJsZSBoYXJkd2FyZSBjcnlwdG8gZm9yIG1hbmFnZW1lbnQgZnJhbWVzICovCisJCVJFR19DTFJfQklUKGFoLCBBUl9QQ1VfTUlTQ19NT0RFMiwKKwkJCSAgICBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkgICAgQVJfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1QpOworCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSB0cnVlOworCX0gZWxzZQorCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSB0cnVlOwogCiAJaWYgKElTX0NIQU5fT0ZETShjaGFuKSB8fCBJU19DSEFOX0hUKGNoYW4pKQogCQlhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoYWgsIGNoYW4pOwpAQCAtMjM0Miw2MSArMjI3OCw1MiBAQAogCWVsc2UKIAkJYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShhaCwgY2hhbik7CiAKLQlpZiAoIWF0aDlrX2h3X2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzKGFoLCBjaGFuKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiZXJyb3Igc2V0dGluZyBib2FyZCBvcHRpb25zXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKLQl9CisJYWgtPmVlcF9vcHMtPnNldF9ib2FyZF92YWx1ZXMoYWgsIGNoYW4pOwogCiAJYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoYWgsIGNoYW4pOwogCi0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoYWhwLT5haF9tYWNhZGRyKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9tYWNhZGRyICsgNCkKKwlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaC0+bWFjYWRkcikpOworCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KGFoLT5tYWNhZGRyICsgNCkKIAkJICB8IG1hY1N0YUlkMQogCQkgIHwgQVJfU1RBX0lEMV9SVFNfVVNFX0RFRgotCQkgIHwgKGFoLT5haF9jb25maWcuCisJCSAgfCAoYWgtPmNvbmZpZy4KIAkJICAgICBhY2tfNm1iID8gQVJfU1RBX0lEMV9BQ0tDVFNfNk1CIDogMCkKLQkJICB8IGFocC0+YWhfc3RhSWQxRGVmYXVsdHMpOwotCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPmFoX29wbW9kZSk7CisJCSAgfCBhaC0+c3RhX2lkMV9kZWZhdWx0cyk7CisJYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKGFoLCBhaC0+b3Btb2RlKTsKIAotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7CisJUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShhaCwgQVJfQlNTTVNLVSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5ic3NpZG1hc2sgKyA0KSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCBzYXZlRGVmQW50ZW5uYSk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaHAtPmFoX2Jzc2lkKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZCArIDQpIHwKLQkJICAoKGFocC0+YWhfYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKHNjLT5jdXJic3NpZCkpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIAogCVJFR19XUklURShhaCwgQVJfSVNSLCB+MCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JTU0lfVEhSLCBJTklUX1JTU0lfVEhSKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmICghKGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChhaCwgY2hhbikpKSB7Ci0JCQllY29kZSA9IC1FSU87Ci0JCQlnb3RvIGJhZDsKLQkJfQorCQlpZiAoIShhdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoYWgsIGNoYW4pKSkKKwkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7Ci0JCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpIHsKLQkJCWVjb2RlID0gLUVJTzsKLQkJCWdvdG8gYmFkOwotCQl9CisJCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfTlVNX0RDVTsgaSsrKQogCQlSRUdfV1JJVEUoYWgsIEFSX0RRQ1VNQVNLKGkpLCAxIDw8IGkpOwogCi0JYWhwLT5haF9pbnRyVHhxcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBzLnRvdGFsX3F1ZXVlczsgaSsrKQorCWFoLT5pbnRyX3R4cXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy50b3RhbF9xdWV1ZXM7IGkrKykKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBpKTsKIAotCWF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKGFoLCBhaC0+YWhfb3Btb2RlKTsKKwlhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhhaCwgYWgtPm9wbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9xb3MoYWgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKICNlbmRpZgogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CkBAIC0yNDA4LDcgKzIzMzUsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9PQlMsIDgpOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikgewogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfTEFTVCwgNTAwKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9GSVJTVCwgMjAwMCk7CkBAIC0yNDE2LDEyICsyMzQzLDEwIEBACiAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAotCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKXsKLQkJZWNvZGUgPSAtRUlPOzsKLQkJZ290byBiYWQ7Ci0JfQorCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQorCQlyZXR1cm4gLUVJTzs7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKIAlpZiAoKHJ4X2NoYWlubWFzayA9PSAweDUpIHx8IChyeF9jaGFpbm1hc2sgPT0gMHgzKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CkBAIC0yNDQ4LDIyICsyMzczLDE4IEBACiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKLWJhZDoKLQlpZiAoc3RhdHVzKQotCQkqc3RhdHVzID0gZWNvZGU7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleXJlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpCiB7CiAJdTMyIGtleVR5cGU7CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNDkwLDE3ICsyNDExLDE3IEBACiAKIAl9CiAKLQlpZiAoYWgtPmFoX2N1cmNoYW4gPT0gTlVMTCkKKwlpZiAoYWgtPmN1cmNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpCitib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQogewogCXUzMiBtYWNIaSwgbWFjTG87CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNTI0LDE3ICsyNDQ1LDEzIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5LAorYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSkKKwkJCQkgY29uc3QgdTggKm1hYykKIHsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7Ci0JdTMyIHhvck1hc2sgPSB4b3JLZXkgPwotCQkoQVRIOUtfS0VZX1hPUiA8PCAyNCB8IEFUSDlLX0tFWV9YT1IgPDwgMTYgfCBBVEg5S19LRVlfWE9SIDw8IDgKLQkJIHwgQVRIOUtfS0VZX1hPUikgOiAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoZW50cnkgPj0gcENhcC0+a2V5Y2FjaGVfc2l6ZSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19LRVlDQUNIRSwKQEAgLTI1NTAsNyArMjQ2Nyw3IEBACiAJCWlmICghKHBDYXAtPmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSkpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJCSJBRVMtQ0NNIG5vdCBzdXBwb3J0ZWQgYnkgbWFjIHJldiAweCV4XG4iLAotCQkJCWFoLT5haF9tYWNSZXYpOworCQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJa2V5VHlwZSA9IEFSX0tFWVRBQkxFX1RZUEVfQ0NNOwpAQCAtMjU4NiwyNiArMjUwMyw1NyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Ja2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKSBeIHhvck1hc2s7Ci0Ja2V5MSA9IChnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdmFsICsgNCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXkyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDYpIF4geG9yTWFzazsKLQlrZXkzID0gKGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXk0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDEyKSBeIHhvck1hc2s7CisJa2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKTsKKwlrZXkxID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDQpOworCWtleTIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgNik7CisJa2V5MyA9IGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCk7CisJa2V5NCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAxMik7CiAJaWYgKGstPmt2X2xlbiA8PSBMRU5fV0VQMTA0KQogCQlrZXk0ICY9IDB4ZmY7CiAKKwkvKgorCSAqIE5vdGU6IEtleSBjYWNoZSByZWdpc3RlcnMgYWNjZXNzIHNwZWNpYWwgbWVtb3J5IGFyZWEgdGhhdCByZXF1aXJlcworCSAqIHR3byAzMi1iaXQgd3JpdGVzIHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgdmFsdWVzIGluIHRoZSBpbnRlcm5hbAorCSAqIG1lbW9yeS4gQ29uc2VxdWVudGx5LCB0aGUgZXhhY3Qgb3JkZXIgYW5kIHBhaXJzIHVzZWQgaGVyZSBtdXN0IGJlCisJICogbWFpbnRhaW5lZC4KKwkgKi8KKwogCWlmIChrZXlUeXBlID09IEFSX0tFWVRBQkxFX1RZUEVfVEtJUCAmJiBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkpIHsKIAkJdTE2IG1pY2VudHJ5ID0gZW50cnkgKyA2NDsKIAorCQkvKgorCQkgKiBXcml0ZSBpbnZlcnRlZCBrZXlbNDc6MF0gZmlyc3QgdG8gYXZvaWQgTWljaGFlbCBNSUMgZXJyb3JzCisJCSAqIG9uIGZyYW1lcyB0aGF0IGNvdWxkIGJlIHNlbnQgb3IgcmVjZWl2ZWQgYXQgdGhlIHNhbWUgdGltZS4KKwkJICogVGhlIGNvcnJlY3Qga2V5IHdpbGwgYmUgd3JpdHRlbiBpbiB0aGUgZW5kIG9uY2UgZXZlcnl0aGluZworCQkgKiBlbHNlIGlzIHJlYWR5LgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwgfmtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCB+a2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKKworCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCi0JCWlmIChhaHAtPmFoX21pc2NNb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkgeworCQlpZiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpIHsKKwkJCS8qCisJCQkgKiBUS0lQIHVzZXMgdHdvIGtleSBjYWNoZSBlbnRyaWVzOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkKKwkJCSAqIChpZHggPSBtYWluIGluZGV4ICsgNjQpOgorCQkJICoga2V5MCBbMzE6MF0gPSBSWCBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFsxNTowXSA9IFRYIGtleSBbMzE6MTZdCisJCQkgKiBrZXkxIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5MiBbMzE6MF0gPSBSWCBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMTU6MF0gPSBUWCBrZXkgWzE1OjBdCisJCQkgKiBrZXkzIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSBUWCBrZXkgWzYzOjMyXQorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMSwgbWljMiwgbWljMywgbWljNDsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKQEAgLTI2MTMsNTEgKzI1NjEsOTAgQEAKIAkJCW1pYzEgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAyKSAmIDB4ZmZmZjsKIAkJCW1pYzMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAwKSAmIDB4ZmZmZjsKIAkJCW1pYzQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdHhtaWMgKyA0KTsKKworCQkJLyogV3JpdGUgUlhbMzE6MF0gYW5kIFRYWzMxOjE2XSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKG1pY2VudHJ5KSwgbWljMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEobWljZW50cnkpLCBtaWMxKTsKKworCQkJLyogV3JpdGUgUlhbNjM6MzJdIGFuZCBUWFsxNTowXSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKG1pY2VudHJ5KSwgbWljMik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCBtaWMzKTsKKworCQkJLyogV3JpdGUgVFhbNjM6MzJdIGFuZCBrZXlUeXBlKHJlc2VydmVkKSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgbWljNCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVEtJUCB1c2VzIGZvdXIga2V5IGNhY2hlIGVudHJpZXMgKHR3byBmb3IgZ3JvdXAKKwkJCSAqIGtleXMpOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBhcmUgaW4gZGlmZmVyZW50IGtleSBjYWNoZQorCQkJICogZW50cmllcyAoaWR4ID0gbWFpbiBpbmRleCArIDY0IGZvciBUWCBhbmQKKwkJCSAqIG1haW4gaW5kZXggKyAzMiArIDk2IGZvciBSWCk6CisJCQkgKiBrZXkwIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFszMTowXSA9IHJlc2VydmVkCisJCQkgKiBrZXkyIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoKKwkJCSAqIFVwcGVyIGxheWVyIGNvZGUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gc2VwYXJhdGVseQorCQkJICogZm9yIFRYIGFuZCBSWCBrZXlzIHdoZW4gdGhlc2UgcmVnaXN0ZXJzIG9mZnNldHMgYXJlCisJCQkgKiB1c2VkLgorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMjsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKIAkJCW1pYzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgNCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbMzE6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbNjM6MzJdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIobWljZW50cnkpLCBtaWMyKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMyhtaWNlbnRyeSksIDApOworCisJCQkvKiBXcml0ZSBUWFs2MzozMl0gYW5kIGtleVR5cGUocmVzZXJ2ZWQpICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQobWljZW50cnkpLCAwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CiAJCX0KKworCQkvKiBNQUMgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGZvciB0aGUgTUlDIGVudHJ5ICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMChtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzEobWljZW50cnkpLCAwKTsKKworCQkvKgorCQkgKiBXcml0ZSB0aGUgY29ycmVjdCAodW4taW52ZXJ0ZWQpIGtleVs0NzowXSBsYXN0IHRvIGVuYWJsZQorCQkgKiBUS0lQIG5vdyB0aGF0IGFsbCBvdGhlciByZWdpc3RlcnMgYXJlIHNldCB3aXRoIGNvcnJlY3QKKwkJICogdmFsdWVzLgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOwogCX0gZWxzZSB7CisJCS8qIFdyaXRlIGtleVs0NzowXSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKIAorCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCX0KIAotCWlmIChhaC0+YWhfY3VyY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSkKIHsKLQlpZiAoZW50cnkgPCBhaC0+YWhfY2Fwcy5rZXljYWNoZV9zaXplKSB7CisJaWYgKGVudHJ5IDwgYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZSkgewogCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX0tFWVRBQkxFX01BQzEoZW50cnkpKTsKIAkJaWYgKHZhbCAmIEFSX0tFWVRBQkxFX1ZBTElEKQogCQkJcmV0dXJuIHRydWU7CkBAIC0yNjY5LDcgKzI2NTYsNyBAQAogLyogUG93ZXIgTWFuYWdlbWVudCAoQ2hpcHNldCkgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX3NldF9wb3dlcl9zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgc2V0Q2hpcCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfU1RBX0lEMSwgQVJfU1RBX0lEMV9QV1JfU0FWKTsKIAlpZiAoc2V0Q2hpcCkgewpAQCAtMjY3OCwxNiArMjY2NSwxNiBAQAogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIgfCBBUl9SQ19IT1NUSUYpOwogCi0JCVJFR19DTFJfQklUKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwKKwkJUkVHX0NMUl9CSVQoYWgsIChBUl9SVENfUkVTRVQpLAogCQkJICAgIEFSX1JUQ19SRVNFVF9FTik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX25ldHdvcmtfc2xlZXAoc3RydWN0IGF0aF9odyAqYWgsIGludCBzZXRDaGlwKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9TVEFfSUQxLCBBUl9TVEFfSUQxX1BXUl9TQVYpOwogCWlmIChzZXRDaGlwKSB7Ci0JCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAKIAkJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLApAQCAtMjY5OSw4ICsyNjg2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBpbnQgc2V0Q2hpcCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHNldENoaXApCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTI3NDEsMjAgKzI3MjcsMTggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewogCQkiQVdBS0UiLAogCQkiRlVMTC1TTEVFUCIsCiAJCSJORVRXT1JLIFNMRUVQIiwKIAkJIlVOREVGSU5FRCIKIAl9OwotCWludCBzdGF0dXMgPSB0cnVlLCBzZXRDaGlwID0gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsICIlcyAtPiAlcyAoJXMpXG4iLAotCQltb2Rlc1thaHAtPmFoX3Bvd2VyTW9kZV0sIG1vZGVzW21vZGVdLAorCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdLAogCQlzZXRDaGlwID8gInNldCBjaGlwICIgOiAiIik7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTI3NjMsNyArMjc0Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfUE1fRlVMTF9TTEVFUDoKIAkJYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKGFoLCBzZXRDaGlwKTsKLQkJYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gdHJ1ZTsKKwkJYWgtPmNoaXBfZnVsbHNsZWVwID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19QTV9ORVRXT1JLX1NMRUVQOgogCQlhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChhaCwgc2V0Q2hpcCk7CkBAIC0yNzczLDQxICsyNzU3LDU3IEBACiAJCQkiVW5rbm93biBwb3dlciBtb2RlICV1XG4iLCBtb2RlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlhaHAtPmFoX3Bvd2VyTW9kZSA9IG1vZGU7CisJYWgtPnBvd2VyX21vZGUgPSBtb2RlOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSkKKy8qCisgKiBIZWxwZXIgZm9yIEFTUE0gc3VwcG9ydC4KKyAqCisgKiBEaXNhYmxlIFBMTCB3aGVuIGluIEwwcyBhcyB3ZWxsIGFzIHJlY2VpdmVyIGNsb2NrIHdoZW4gaW4gTDEuCisgKiBUaGlzIHBvd2VyIHNhdmluZyBvcHRpb24gbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggdGhlIFNlckRlcy4KKyAqCisgKiBQcm9ncmFtbWluZyB0aGUgU2VyRGVzIG11c3QgZ28gdGhyb3VnaCB0aGUgc2FtZSAyODggYml0IHNlcmlhbCBzaGlmdAorICogcmVnaXN0ZXIgYXMgdGhlIG90aGVyIGFuYWxvZyByZWdpc3RlcnMuICBIZW5jZSB0aGUgOSB3cml0ZXMuCisgKi8KK3ZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcmVzdG9yZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXU4IGk7CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcyAhPSB0cnVlKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcyAhPSB0cnVlKQogCQlyZXR1cm47CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwkvKiBEbyBub3QgdG91Y2ggU2VyRGVzIHJlZ2lzdGVycyAqLworCWlmIChhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9PSAyKQogCQlyZXR1cm47CiAKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIHJlc3RvcmUgZm9yIDExTiAqLwogCWlmIChyZXN0b3JlKQogCQlyZXR1cm47CiAKIAlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlQY2llU2VyZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJUkVHX1dSSVRFKGFoLCBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMCksCi0JCQkJICBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMSkpOworCQkvKgorCQkgKiBBUjkyODAgMi4wIG9yIGxhdGVyIGNoaXBzIHVzZSBTZXJEZXMgdmFsdWVzIGZyb20gdGhlCisJCSAqIGluaXR2YWxzLmggaW5pdGlhbGl6ZWQgZGVwZW5kaW5nIG9uIGNoaXBzZXQgZHVyaW5nCisJCSAqIGF0aDlrX2h3X2RvX2F0dGFjaCgpCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaVBjaWVTZXJkZXMuaWFfcm93czsgaSsrKSB7CisJCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDApLAorCQkJCSAgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMSkpOwogCQl9Ci0JCXVkZWxheSgxMDAwKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkgJiYKLQkJICAgKGFoLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzEwKSkgeworCQkgICAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmQwMCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjQ5MjQ5MjQpOwogCisJCS8qIFJYIHNodXQgb2ZmIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhhODAwMDAxOSk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MTMxNjA4MjApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGU1OTgwNTYwKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkKKwkJLyogU2h1dCBvZmYgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLworCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkKIAkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4NDAxZGVmZmMpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDQwMWRlZmZkKTsKQEAgLTI4MTYsNDIgKzI4MTYsNTkgQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhiZTEwNTU1NCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAwNDMwMDcpOwogCisJCS8qIExvYWQgdGhlIG5ldyBzZXR0aW5ncyAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiAKLQkJdWRlbGF5KDEwMDApOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDI0OTI0OTI0KTsKKworCQkvKiBSWCBzaHV0IG9mZiB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjgwMDAwMzkpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDUzMTYwODI0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhlNTk4MDU3OSk7CisKKwkJLyoKKwkJICogSWdub3JlIGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgc2V0dGluZyBmb3IKKwkJICogcHJlLUFSOTI4MCAxMW4KKwkJICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAxZGVmZmYpOworCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MWFhYWJlNDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGJlMTA1NTU0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgwMDBlMzAwNyk7CisKKwkJLyogTG9hZCB0aGUgbmV3IHNldHRpbmdzICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKIAl9CiAKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiBzZXQgYml0IDE5IHRvIGFsbG93IGZvcmNpbmcgb2YgcGNpZSBjb3JlIGludG8gTDEgc3RhdGUgKi8KIAlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBBUl9QQ0lFX1BNX0NUUkxfRU5BKTsKIAotCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfd2FlbikgewotCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+YWhfY29uZmlnLnBjaWVfd2Flbik7CisJLyogU2V2ZXJhbCBQQ0llIG1hc3NhZ2VzIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3VyICovCisJaWYgKGFoLT5jb25maWcucGNpZV93YWVuKSB7CisJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5jb25maWcucGNpZV93YWVuKTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKKwkJLyoKKwkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCisJCSAqIG90aGVyd2lzZSBjYXJkIG1heSBkaXNhcHBlYXIuCisJCSAqLwogCQllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQkJUkVHX1dSSVRFKGFoLCBBUl9XQSwgQVI5MjgwX1dBX0RFRkFVTFQpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBBUl9XQV9ERUZBVUxUKTsKIAl9Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIGhvc3RfaXNyOwogCkBAIC0yODcwLDE0ICsyODg3LDEzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpCitib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgKm1hc2tlZCkKIHsKIAl1MzIgaXNyID0gMDsKIAl1MzIgbWFzazIgPSAwOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAl1MzIgc3luY19jYXVzZSA9IDA7CiAJYm9vbCBmYXRhbF9pbnQgPSBmYWxzZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CiAJCWlmIChSRUdfUkVBRChhaCwgQVJfSU5UUl9BU1lOQ19DQVVTRSkgJiBBUl9JTlRSX01BQ19JUlEpIHsKQEAgLTI5MTUsNiArMjkzMSw4IEBACiAJCQkJbWFzazIgfD0gQVRIOUtfSU5UX0dUVDsKIAkJCWlmIChpc3IyICYgQVJfSVNSX1MyX0NTVCkKIAkJCQltYXNrMiB8PSBBVEg5S19JTlRfQ1NUOworCQkJaWYgKGlzcjIgJiBBUl9JU1JfUzJfVFNGT09SKQorCQkJCW1hc2syIHw9IEFUSDlLX0lOVF9UU0ZPT1I7CiAJCX0KIAogCQlpc3IgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1JBQyk7CkBAIC0yOTI1LDcgKzI5NDMsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKSB7CisJCWlmIChhaC0+aW50cl9taXRpZ2F0aW9uKSB7CiAJCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCiAJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CiAJCX0KQEAgLTI5NDAsMTIgKzI5NTgsMTIgQEAKIAkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX1RYOwogCiAJCQlzMF9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TMF9TKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWE9LKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWERFU0MpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYT0spOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYREVTQyk7CiAKIAkJCXMxX3MgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1MxX1MpOwotCQkJYWhwLT5haF9pbnRyVHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRVJSKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczFfcywgQVJfSVNSX1MxX1FDVV9UWEVPTCk7CisJCQlhaC0+aW50cl90eHFzIHw9IE1TKHMxX3MsIEFSX0lTUl9TMV9RQ1VfVFhFUlIpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRU9MKTsKIAkJfQogCiAJCWlmIChpc3IgJiBBUl9JU1JfUlhPUk4pIHsKQEAgLTMwMDIsMTcgKzMwMjAsMTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitlbnVtIGF0aDlrX2ludCBhdGg5a19od19pbnRyZ2V0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXJldHVybiBBSDU0MTYoYWgpLT5haF9tYXNrUmVnOworCXJldHVybiBhaC0+bWFza19yZWc7CiB9CiAKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JdTMyIG9tYXNrID0gYWhwLT5haF9tYXNrUmVnOworCXUzMiBvbWFzayA9IGFoLT5tYXNrX3JlZzsKIAl1MzIgbWFzaywgbWFzazI7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSU5URVJSVVBULCAiMHgleCA9PiAweCV4XG4iLCBvbWFzaywgaW50cyk7CiAKQEAgLTMwMzMsMTggKzMwNTAsMTggQEAKIAltYXNrMiA9IDA7CiAKIAlpZiAoaW50cyAmIEFUSDlLX0lOVF9UWCkgewotCQlpZiAoYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eG9rX2ludGVycnVwdF9tYXNrKQogCQkJbWFzayB8PSBBUl9JTVJfVFhPSzsKLQkJaWYgKGFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGRlc2NfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWERFU0M7Ci0JCWlmIChhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaykKIAkJCW1hc2sgfD0gQVJfSU1SX1RYRVJSOwotCQlpZiAoYWhwLT5haF90eEVvbEludGVycnVwdE1hc2spCisJCWlmIChhaC0+dHhlb2xfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWEVPTDsKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKQorCQlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKIAkJCW1hc2sgfD0gQVJfSU1SX1JYTUlOVFIgfCBBUl9JTVJfUlhJTlRNOwogCQllbHNlCiAJCQltYXNrIHw9IEFSX0lNUl9SWE9LIHwgQVJfSU1SX1JYREVTQzsKQEAgLTMwNjEsNyArMzA3OCw5IEBACiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQogCQkJbWFzazIgfD0gQVJfSU1SX1MyX0RUSU1TWU5DOwogCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9DQUJFTkQpCi0JCQltYXNrMiB8PSAoQVJfSU1SX1MyX0NBQkVORCk7CisJCQltYXNrMiB8PSBBUl9JTVJfUzJfQ0FCRU5EOworCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9UU0ZPT1IpCisJCQltYXNrMiB8PSBBUl9JTVJfUzJfVFNGT09SOwogCX0KIAogCWlmIChpbnRzICYgKEFUSDlLX0lOVF9HVFQgfCBBVEg5S19JTlRfQ1NUKSkgewpAQCAtMzA4Miw3ICszMTAxLDcgQEAKIAkJCQkJICAgQVJfSU1SX1MyX1RTRk9PUiB8CiAJCQkJCSAgIEFSX0lNUl9TMl9HVFQgfCBBUl9JTVJfUzJfQ1NUKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgbWFzayB8IG1hc2syKTsKLQlhaHAtPmFoX21hc2tSZWcgPSBpbnRzOworCWFoLT5tYXNrX3JlZyA9IGludHM7CiAKIAlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpIHsKIAkJaWYgKGludHMgJiBBVEg5S19JTlRfVElNX1RJTUVSKQpAQCAtMzExNiwxNCArMzEzNSwxMyBAQAogLyogQmVhY29uIEhhbmRsaW5nICovCiAvKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKK3ZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBmbGFncyA9IDA7CiAKLQlhaHAtPmFoX2JlYWNvbkludGVydmFsID0gYmVhY29uX3BlcmlvZDsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gYmVhY29uX3BlcmlvZDsKIAotCXN3aXRjaCAoYWgtPmFoX29wbW9kZSkgeworCXN3aXRjaCAoYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKG5leHRfYmVhY29uKSk7CkBAIC0zMTMyLDIyICszMTUwLDIzIEBACiAJCWZsYWdzIHw9IEFSX1RCVFRfVElNRVJfRU47CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlSRUdfU0VUX0JJVChhaCwgQVJfVFhDRkcsCiAJCQkgICAgQVJfVFhDRkdfQURIT0NfQkVBQ09OX0FUSU1fVFhfUE9MSUNZKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX05EUF9USU1FUiwKIAkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiArCi0JCQkJICAgICAoYWhwLT5haF9hdGltV2luZG93ID8gYWhwLT4KLQkJCQkgICAgICBhaF9hdGltV2luZG93IDogMSkpKTsKKwkJCQkgICAgIChhaC0+YXRpbV93aW5kb3cgPyBhaC0+CisJCQkJICAgICAgYXRpbV93aW5kb3cgOiAxKSkpOwogCQlmbGFncyB8PSBBUl9ORFBfVElNRVJfRU47CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBkbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1NXQkEsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBzd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOwogCQlmbGFncyB8PQogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CkBAIC0zMTU1LDcgKzMxNzQsNyBAQAogCWRlZmF1bHQ6CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0JFQUNPTiwKIAkJCSIlczogdW5zdXBwb3J0ZWQgb3Btb2RlOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBhaC0+YWhfb3Btb2RlKTsKKwkJCV9fZnVuY19fLCBhaC0+b3Btb2RlKTsKIAkJcmV0dXJuOwogCQlicmVhazsKIAl9CkBAIC0zMTc0LDExICszMTkzLDExIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX1RJTUVSX01PREUsIGZsYWdzKTsKIH0KIAotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKQogewogCXUzMiBuZXh0VGJ0dCwgYmVhY29uaW50dmFsLCBkdGltcGVyaW9kLCBiZWFjb250aW1lb3V0OwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKGJzLT5ic19uZXh0dGJ0dCkpOwogCkBAIC0zMjMyLDQzICszMjUxLDQ2IEBACiAJCSAgICBBUl9UQlRUX1RJTUVSX0VOIHwgQVJfVElNX1RJTUVSX0VOIHwKIAkJICAgIEFSX0RUSU1fVElNRVJfRU4pOwogCisJLyogVFNGIE91dCBvZiBSYW5nZSBUaHJlc2hvbGQgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1RTRk9PUl9USFJFU0hPTEQsIGJzLT5ic190c2Zvb3JfdGhyZXNob2xkKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKiovCiAvKiBIVyBDYXBhYmlsaXRpZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXUxNiBjYXBGaWVsZCA9IDAsIGVldmFsOwogCi0JZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7CisJYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9IGVldmFsOwogCi0JYWgtPmFoX2N1cnJlbnRSRCA9IGVldmFsOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7CisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCWVldmFsIHw9IEFSOTI4NV9SREVYVF9ERUZBVUxUOworCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7Ci0JYWgtPmFoX2N1cnJlbnRSREV4dCA9IGVldmFsOworCWNhcEZpZWxkID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PUF9DQVApOwogCi0JY2FwRmllbGQgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKLQotCWlmIChhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9zdWJ2ZW5kb3JpZCA9PSBBUl9TVUJWRU5ET1JfSURfTkVXX0EpIHsKLQkJaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg2NCB8fCBhaC0+YWhfY3VycmVudFJEID09IDB4NjUpCi0JCQlhaC0+YWhfY3VycmVudFJEICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg0MSkKLQkJCWFoLT5haF9jdXJyZW50UkQgPSAweDQzOworCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgeworCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCisJCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPmFoX2N1cnJlbnRSRCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkKTsKIAl9CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PUF9NT0RFKTsKKwllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CiAJYml0bWFwX3plcm8ocENhcC0+d2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsKIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFBLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7Ci0JCWlmIChhaC0+YWhfY29uZmlnLmh0X2VuYWJsZSkgeworCQlpZiAoYWgtPmNvbmZpZy5odF9lbmFibGUpIHsKIAkJCWlmICghKGVldmFsICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwKSkKIAkJCQlzZXRfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLAogCQkJCQlwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CkBAIC0zMjg0LDcgKzMzMDYsNyBAQAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKLQkJaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKSB7CisJCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkgewogCQkJaWYgKCEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjApKQogCQkJCXNldF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsCiAJCQkJCXBDYXAtPndpcmVsZXNzX21vZGVzKTsKQEAgLTMyOTcsMTggKzMzMTksMTUgQEAKIAkJfQogCX0KIAotCXBDYXAtPnR4X2NoYWlubWFzayA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKLQlpZiAoKGFoLT5haF9pc1BjaUV4cHJlc3MpCi0JICAgIHx8IChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkpIHsKLQkJcENhcC0+cnhfY2hhaW5tYXNrID0KLQkJCWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKLQl9IGVsc2UgewotCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPQotCQkJKGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCAwKSkgPyAweDUgOiAweDc7Ci0JfQorCXBDYXAtPnR4X2NoYWlubWFzayA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhfTUFTSyk7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjU0MTZfREVWSURfUENJKSAmJgorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSkKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAotCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5haF9tYWNSZXYgPT0gMCkpKQotCQlhaHAtPmFoX21pc2NNb2RlIHw9IEFSX1BDVV9NSUNfTkVXX0xPQ19FTkE7CisJaWYgKCEoQVJfU1JFVl85MjgwKGFoKSAmJiAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IDApKSkKKwkJYWgtPm1pc2NfbW9kZSB8PSBBUl9QQ1VfTUlDX05FV19MT0NfRU5BOwogCiAJcENhcC0+bG93XzJnaHpfY2hhbiA9IDIzMTI7CiAJcENhcC0+aGlnaF8yZ2h6X2NoYW4gPSAyNzMyOwpAQCAtMzMyNiw3ICszMzQ1LDcgQEAKIAogCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFEOwogCi0JaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKQorCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfSFQ7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfSFQ7CkBAIC0zMzUyLDcgKzMzNzEsOSBAQAogCXBDYXAtPm51bV9tcl9yZXRyaWVzID0gNDsKIAlwQ2FwLT50eF90cmlnbGV2ZWxfbWF4ID0gTUFYX1RYX0ZJRk9fVEhSRVNIT0xEOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUjkyODVfTlVNX0dQSU87CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI4WF9OVU1fR1BJTzsKIAllbHNlCiAJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUl9OVU1fR1BJTzsKQEAgLTMzNzUsMjIgKzMzOTYsMjIgQEAKIAlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWFoLT5haF9yZnNpbGVudCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRl9TSUxFTlQpOwotCWlmIChhaC0+YWhfcmZzaWxlbnQgJiBFRVBfUkZTSUxFTlRfRU5BQkxFRCkgewotCQlhaC0+YWhfcmZraWxsX2dwaW8gPQotCQkJTVMoYWgtPmFoX3Jmc2lsZW50LCBFRVBfUkZTSUxFTlRfR1BJT19TRUwpOwotCQlhaC0+YWhfcmZraWxsX3BvbGFyaXR5ID0KLQkJCU1TKGFoLT5haF9yZnNpbGVudCwgRUVQX1JGU0lMRU5UX1BPTEFSSVRZKTsKKwlhaC0+cmZzaWxlbnQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JGX1NJTEVOVCk7CisJaWYgKGFoLT5yZnNpbGVudCAmIEVFUF9SRlNJTEVOVF9FTkFCTEVEKSB7CisJCWFoLT5yZmtpbGxfZ3BpbyA9CisJCQlNUyhhaC0+cmZzaWxlbnQsIEVFUF9SRlNJTEVOVF9HUElPX1NFTCk7CisJCWFoLT5yZmtpbGxfcG9sYXJpdHkgPQorCQkJTVMoYWgtPnJmc2lsZW50LCBFRVBfUkZTSUxFTlRfUE9MQVJJVFkpOwogCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1JGU0lMRU5UOwogCX0KICNlbmRpZgogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkgfHwKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApIHx8CisJICAgIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKIAkJcENhcC0+aHdfY2FwcyAmPSB+QVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKQEAgLTM0MDAsNyArMzQyMSw3IEBACiAJZWxzZQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUzsKIAotCWlmIChhaC0+YWhfY3VycmVudFJERXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgeworCWlmIChhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCAmICgxIDw8IFJFR19FWFRfSkFQQU5fTUlEQkFORCkpIHsKIAkJcENhcC0+cmVnX2NhcCA9CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSB8CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiB8CkBAIC0zNDE1LDE5ICszNDM2LDIyIEBACiAJcENhcC0+cmVnX2NhcCB8PSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQ7CiAKIAlwQ2FwLT5udW1fYW50Y2ZnXzVnaHogPQotCQlhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CisJCWFoLT5lZXBfb3BzLT5nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CiAJcENhcC0+bnVtX2FudGNmZ18yZ2h6ID0KLQkJYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgeworCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOworCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7CisJCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19nZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFUSDlLX0NBUF9DSVBIRVI6CiAJCXN3aXRjaCAoY2FwYWJpbGl0eSkgewpAQCAtMzQ0NiwyMyArMzQ3MCwxNyBAQAogCQljYXNlIDA6CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIChhaHAtPmFoX3N0YUlkMURlZmF1bHRzICYKKwkJCXJldHVybiAoYWgtPnN0YV9pZDFfZGVmYXVsdHMgJgogCQkJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKSA/IHRydWUgOgogCQkJZmFsc2U7CiAJCX0KIAljYXNlIEFUSDlLX0NBUF9US0lQX1NQTElUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKSA/CisJCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KIAkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9XTUVfVEtJUE1JQzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBBVEg5S19DQVBfUEhZQ09VTlRFUlM6Ci0JCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyAwIDogLUVOWElPOwogCWNhc2UgQVRIOUtfQ0FQX0RJVkVSU0lUWToKIAkJcmV0dXJuIChSRUdfUkVBRChhaCwgQVJfUEhZX0NDS19ERVRFQ1QpICYKIAkJCUFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpID8KIAkJCXRydWUgOiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9QSFlESUFHOgotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNIOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKIAkJY2FzZSAwOgpAQCAtMzQ3MSw1NyArMzQ4OSw0OCBAQAogCQkJaWYgKFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSAmIEFSX1NUQV9JRDFfQURIT0MpIHsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCXJldHVybiAoYWhwLT5haF9zdGFJZDFEZWZhdWx0cyAmCisJCQkJcmV0dXJuIChhaC0+c3RhX2lkMV9kZWZhdWx0cyAmCiAJCQkJCUFSX1NUQV9JRDFfTUNBU1RfS1NSQ0gpID8gdHJ1ZSA6CiAJCQkJCWZhbHNlOwogCQkJfQogCQl9CiAJCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfVFhfQUREX1RTRikgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1JGU0lMRU5UOgotCQlpZiAoY2FwYWJpbGl0eSA9PSAzKQotCQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX0FOVF9DRkdfMkdIWjoKLQkJKnJlc3VsdCA9IHBDYXAtPm51bV9hbnRjZmdfMmdoejsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfQU5UX0NGR181R0haOgotCQkqcmVzdWx0ID0gcENhcC0+bnVtX2FudGNmZ181Z2h6OwotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9UWFBPVzoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3Bvd2VyTGltaXQ7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQ7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSAyOgotCQkJKnJlc3VsdCA9IGFoLT5haF9tYXhQb3dlckxldmVsOworCQkJKnJlc3VsdCA9IGFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3RwU2NhbGU7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBBVEg5S19DQVBfRFM6CisJCXJldHVybiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkNfQ0hBSU5fTUFTSykgPT0gMSkpCisJCQk/IGZhbHNlIDogdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgdjsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQVRIOUtfQ0FQX1RLSVBfTUlDOgogCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgfD0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzIHw9CiAJCQkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7CiAJCWVsc2UKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgJj0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzICY9CiAJCQkJfkFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9ESVZFUlNJVFk6CkBAIC0zNTM0LDE1ICszNTQzLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKIAkJaWYgKHNldHRpbmcpCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzIHw9IEFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CisJCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwogCQllbHNlCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzICY9IH5BUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7Ci0JCWVsc2UKLQkJCWFocC0+YWhfbWlzY01vZGUgJj0gfkFSX1BDVV9UWF9BRERfVFNGOworCQkJYWgtPnN0YV9pZDFfZGVmYXVsdHMgJj0gfkFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTM1NTMsNyArMzU1Niw3IEBACiAvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19ncGlvX2NmZ19vdXRwdXRfbXV4KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dwaW9fY2ZnX291dHB1dF9tdXgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSB1MzIgZ3BpbywgdTMyIHR5cGUpCiB7CiAJaW50IGFkZHI7CkBAIC0zNTgxLDExICszNTg0LDExIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pCit2b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAl1MzIgZ3Bpb19zaGlmdDsKIAotCUFTU0VSVChncGlvIDwgYWgtPmFoX2NhcHMubnVtX2dwaW9fcGlucyk7CisJQVNTRVJUKGdwaW8gPCBhaC0+Y2Fwcy5udW1fZ3Bpb19waW5zKTsKIAogCWdwaW9fc2hpZnQgPSBncGlvIDw8IDE7CiAKQEAgLTM1OTUsMjIgKzM1OTgsMjMgQEAKIAkJKEFSX0dQSU9fT0VfT1VUX0RSViA8PCBncGlvX3NoaWZ0KSk7CiB9CiAKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKQordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+PSBhaC0+YWhfY2Fwcy5udW1fZ3Bpb19waW5zKQorI2RlZmluZSBNU19SRUdfUkVBRCh4LCB5KSBcCisJKE1TKFJFR19SRUFEKGFoLCBBUl9HUElPX0lOX09VVCksIHgjI19HUElPX0lOX1ZBTCkgJiAoQVJfR1BJT19CSVQoeSkpKQorCisJaWYgKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlyZXR1cm4gKE1TCi0JCQkoUkVHX1JFQUQoYWgsIEFSX0dQSU9fSU5fT1VUKSwKLQkJCSBBUjkyOFhfR1BJT19JTl9WQUwpICYgQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChNUyhSRUdfUkVBRChhaCwgQVJfR1BJT19JTl9PVVQpLCBBUl9HUElPX0lOX1ZBTCkgJgotCQkJQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfQorCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5Mjg1LCBncGlvKSAhPSAwOworCWVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyOFgsIGdwaW8pICE9IDA7CisJZWxzZQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVIsIGdwaW8pICE9IDA7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKIAkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpCiB7CiAJdTMyIGdwaW9fc2hpZnQ7CkBAIC0zNjI1LDE0ICszNjI5LDE0IEBACiAJCShBUl9HUElPX09FX09VVF9EUlYgPDwgZ3Bpb19zaGlmdCkpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpCit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCkKIHsKIAlSRUdfUk1XKGFoLCBBUl9HUElPX0lOX09VVCwgKCh2YWwgJiAxKSA8PCBncGlvKSwKIAkJQVJfR1BJT19CSVQoZ3BpbykpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCiAJCSAgICBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQik7CkBAIC0zNjQwLDUwICszNjQ0LDI4IEBACiAJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMiwKIAkJICAgIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCk7CiAKLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPnJma2lsbF9ncGlvKTsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RFU1QsIFJGU0lMRU5UX0JCKTsKIH0KICNlbmRpZgogCi1pbnQgYXRoOWtfaHdfc2VsZWN0X2FudGNvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjZmcpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOwotCXUxNiBhbnRfY29uZmlnOwotCXUzMiBoYWxOdW1BbnRDb25maWc7Ci0KLQloYWxOdW1BbnRDb25maWcgPSBJU19DSEFOXzJHSFooY2hhbikgPwotCQlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogOiBwQ2FwLT5udW1fYW50Y2ZnXzVnaHo7Ci0KLQlpZiAoY2ZnIDwgaGFsTnVtQW50Q29uZmlnKSB7Ci0JCWlmICghYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwKLQkJCQkJCSAgICAgY2ZnLCAmYW50X2NvbmZpZykpIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoKQordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIFJFR19SRUFEKGFoLCBBUl9ERUZfQU5URU5OQSkgJiAweDc7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBhbnRlbm5hKQordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCAoYW50ZW5uYSAmIDB4NykpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCiAJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKIAkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAogCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdGF0aWMgdTggdHhfY2hhaW5tYXNrX2NmZywgcnhfY2hhaW5tYXNrX2NmZzsKIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CkBAIC0zNzAwLDcgKzM2ODIsNyBAQAogCQkJKmFudGVubmFfY2ZnZCA9IHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVEg5S19BTlRfRklYRURfQjoKLQkJCWlmIChhaC0+YWhfY2Fwcy50eF9jaGFpbm1hc2sgPgorCQkJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayA+CiAJCQkgICAgQVRIOUtfQU5URU5OQTFfQ0hBSU5NQVNLKSB7CiAJCQkJKnR4X2NoYWlubWFzayA9IEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSzsKIAkJCX0KQEAgLTM3MTYsNyArMzY5OCw3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IHNldHRpbmdzOworCQlhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MjYsNyArMzcwOCw3IEBACiAvKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCkKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgYml0cyA9IFJFR19SRUFEKGFoLCBBUl9SWF9GSUxURVIpOwogCXUzMiBwaHliaXRzID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlIpOwpAQCAtMzczOSw3ICszNzIxLDcgQEAKIAlyZXR1cm4gYml0czsKIH0KIAotdm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBiaXRzKQordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpCiB7CiAJdTMyIHBoeWJpdHM7CiAKQEAgLTM3NTksMTIgKzM3NDEsMTIgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19aTEZETUEpOwogfQogCi1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pOwogfQogCi1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzc3Miw4MiArMzc1NCw1NCBAQAogCXJldHVybiBhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9DT0xEKTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGxpbWl0KQorYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+YWhfcG93ZXJMaW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCWFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKLQlpZiAoYXRoOWtfaHdfc2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwgY2hhbiksCi0JCQkJIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICAgICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpICE9IDApCisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKQordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCW1lbWNweShtYWMsIGFocC0+YWhfbWFjYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhaC0+bWFjYWRkciwgbWFjLCBFVEhfQUxFTik7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYykKK3ZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQotCXJldHVybiB0cnVlOworCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPm9wbW9kZSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoYWgsIGFoLT5haF9vcG1vZGUpOwotfQotCi12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQogewogCVJFR19XUklURShhaCwgQVJfTUNBU1RfRklMMCwgZmlsdGVyMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NQ0FTVF9GSUwxLCBmaWx0ZXIxKTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFzaykKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkobWFzaywgYWhwLT5haF9ic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShzYy0+c2NfYWgsIEFSX0JTU01TS1UsIGdldF91bmFsaWduZWRfbGUxNihzYy0+YnNzaWRtYXNrICsgNCkpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGNvbnN0IHU4ICptYXNrKQordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9ic3NpZG1hc2ssIG1hc2ssIEVUSF9BTEVOKTsKLQotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmN1cmJzc2lkKSk7CisJUkVHX1dSSVRFKHNjLT5zY19haCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIH0KIAotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JbWVtY3B5KGFocC0+YWhfYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYWhwLT5haF9hc3NvY0lkID0gYXNzb2NJZDsKLQotCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWQpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDEsIGdldF91bmFsaWduZWRfbGUxNihhaHAtPmFoX2Jzc2lkICsgNCkgfAotCQkgICgoYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOwotfQotCi11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKQordTY0IGF0aDlrX2h3X2dldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXU2NCB0c2Y7CiAKQEAgLTM4NTcsNyArMzgxMSwxMyBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgsIHU2NCB0c2Y2NCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIHRzZjY0ICYgMHhmZmZmZmZmZik7CisJUkVHX1dSSVRFKGFoLCBBUl9UU0ZfVTMyLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBjb3VudDsKIApAQCAtMzg3NCw0MiArMzgzNCw2NSBAQAogCVJFR19XUklURShhaCwgQVJfUkVTRVRfVFNGLCBBUl9SRVNFVF9UU0ZfT05DRSk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKQorYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHNldHRpbmcpCi0JCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CisJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CiAJZWxzZQotCQlhaHAtPmFoX21pc2NNb2RlICY9IH5BUl9QQ1VfVFhfQUREX1RTRjsKKwkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1cykKK2Jvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOworCQlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX3Nsb3R0aW1lID0gdXM7CisJCWFoLT5zbG90dGltZSA9IHVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKQordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSkKIHsKIAl1MzIgbWFjbW9kZTsKIAogCWlmIChtb2RlID09IEFUSDlLX0hUX01BQ01PREVfMjA0MCAmJgotCSAgICAhYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSkKKwkgICAgIWFoLT5jb25maWcuY3dtX2lnbm9yZV9leHRjY2EpCiAJCW1hY21vZGUgPSBBUl8yMDQwX0pPSU5FRF9SWF9DTEVBUjsKIAllbHNlCiAJCW1hY21vZGUgPSAwOwogCiAJUkVHX1dSSVRFKGFoLCBBUl8yMDQwX01PREUsIG1hY21vZGUpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIEJsdWV0b290aCBDb2V4aXN0ZW5jZSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwkvKiBjb25uZWN0IGJ0X2FjdGl2ZSB0byBiYXNlYmFuZCAqLworCVJFR19DTFJfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYpKTsKKworCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIEdQSU8gcG9ydCBmb3IgVFhfRlJBTUUgb3V0cHV0ICovCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPndsYW5hY3RpdmVfZ3BpbywKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKaW5kZXggOTFkOGY1OTQuLjBiNTk0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE5LDkzNiArMTksNDMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi1zdHJ1Y3QgYXI1NDE2X2Rlc2MgewotCXUzMiBkc19saW5rOwotCXUzMiBkc19kYXRhOwotCXUzMiBkc19jdGwwOwotCXUzMiBkc19jdGwxOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXUzMiBjdGwyOwotCQkJdTMyIGN0bDM7Ci0JCQl1MzIgY3RsNDsKLQkJCXUzMiBjdGw1OwotCQkJdTMyIGN0bDY7Ci0JCQl1MzIgY3RsNzsKLQkJCXUzMiBjdGw4OwotCQkJdTMyIGN0bDk7Ci0JCQl1MzIgY3RsMTA7Ci0JCQl1MzIgY3RsMTE7Ci0JCQl1MzIgc3RhdHVzMDsKLQkJCXUzMiBzdGF0dXMxOwotCQkJdTMyIHN0YXR1czI7Ci0JCQl1MzIgc3RhdHVzMzsKLQkJCXUzMiBzdGF0dXM0OwotCQkJdTMyIHN0YXR1czU7Ci0JCQl1MzIgc3RhdHVzNjsKLQkJCXUzMiBzdGF0dXM3OwotCQkJdTMyIHN0YXR1czg7Ci0JCQl1MzIgc3RhdHVzOTsKLQkJfSB0eDsKLQkJc3RydWN0IHsKLQkJCXUzMiBzdGF0dXMwOwotCQkJdTMyIHN0YXR1czE7Ci0JCQl1MzIgc3RhdHVzMjsKLQkJCXUzMiBzdGF0dXMzOwotCQkJdTMyIHN0YXR1czQ7Ci0JCQl1MzIgc3RhdHVzNTsKLQkJCXUzMiBzdGF0dXM2OwotCQkJdTMyIHN0YXR1czc7Ci0JCQl1MzIgc3RhdHVzODsKLQkJfSByeDsKLQl9IHU7Ci19IF9fcGFja2VkOworI2luY2x1ZGUgIm1hYy5oIgorI2luY2x1ZGUgImFuaS5oIgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImNhbGliLmgiCisjaW5jbHVkZSAicmVnZC5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgInBoeS5oIgogCi0jZGVmaW5lIEFSNTQxNkRFU0MoX2RzKSAgICAgICAgICgoc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCi0jZGVmaW5lIEFSNTQxNkRFU0NfQ09OU1QoX2RzKSAgICgoY29uc3Qgc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisjZGVmaW5lIEFUSEVST1NfVkVORE9SX0lECTB4MTY4YworI2RlZmluZSBBUjU0MTZfREVWSURfUENJCTB4MDAyMworI2RlZmluZSBBUjU0MTZfREVWSURfUENJRQkweDAwMjQKKyNkZWZpbmUgQVI5MTYwX0RFVklEX1BDSQkweDAwMjcKKyNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSQkweDAwMjkKKyNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSUUJMHgwMDJhCisjZGVmaW5lIEFSOTI4NV9ERVZJRF9QQ0lFCTB4MDAyYgorI2RlZmluZSBBUjU0MTZfQVI5MTAwX0RFVklECTB4MDAwYgorI2RlZmluZQlBUl9TVUJWRU5ET1JfSURfTk9HCTB4MGUxMQorI2RlZmluZSBBUl9TVUJWRU5ET1JfSURfTkVXX0EJMHg3MDY1CisjZGVmaW5lIEFSNTQxNl9NQUdJQwkJMHgxOTY0MTAxNAogCi0jZGVmaW5lIGRzX2N0bDIgICAgIHUudHguY3RsMgotI2RlZmluZSBkc19jdGwzICAgICB1LnR4LmN0bDMKLSNkZWZpbmUgZHNfY3RsNCAgICAgdS50eC5jdGw0Ci0jZGVmaW5lIGRzX2N0bDUgICAgIHUudHguY3RsNQotI2RlZmluZSBkc19jdGw2ICAgICB1LnR4LmN0bDYKLSNkZWZpbmUgZHNfY3RsNyAgICAgdS50eC5jdGw3Ci0jZGVmaW5lIGRzX2N0bDggICAgIHUudHguY3RsOAotI2RlZmluZSBkc19jdGw5ICAgICB1LnR4LmN0bDkKLSNkZWZpbmUgZHNfY3RsMTAgICAgdS50eC5jdGwxMAotI2RlZmluZSBkc19jdGwxMSAgICB1LnR4LmN0bDExCisvKiBSZWdpc3RlciByZWFkL3dyaXRlIHByaW1pdGl2ZXMgKi8KKyNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgYXRoOWtfaW93cml0ZTMyKChfYWgpLCAoX3JlZyksIChfdmFsKSkKKyNkZWZpbmUgUkVHX1JFQUQoX2FoLCBfcmVnKSBhdGg5a19pb3JlYWQzMigoX2FoKSwgKF9yZWcpKQogCi0jZGVmaW5lIGRzX3R4c3RhdHVzMCAgICB1LnR4LnN0YXR1czAKLSNkZWZpbmUgZHNfdHhzdGF0dXMxICAgIHUudHguc3RhdHVzMQotI2RlZmluZSBkc190eHN0YXR1czIgICAgdS50eC5zdGF0dXMyCi0jZGVmaW5lIGRzX3R4c3RhdHVzMyAgICB1LnR4LnN0YXR1czMKLSNkZWZpbmUgZHNfdHhzdGF0dXM0ICAgIHUudHguc3RhdHVzNAotI2RlZmluZSBkc190eHN0YXR1czUgICAgdS50eC5zdGF0dXM1Ci0jZGVmaW5lIGRzX3R4c3RhdHVzNiAgICB1LnR4LnN0YXR1czYKLSNkZWZpbmUgZHNfdHhzdGF0dXM3ICAgIHUudHguc3RhdHVzNwotI2RlZmluZSBkc190eHN0YXR1czggICAgdS50eC5zdGF0dXM4Ci0jZGVmaW5lIGRzX3R4c3RhdHVzOSAgICB1LnR4LnN0YXR1czkKLQotI2RlZmluZSBkc19yeHN0YXR1czAgICAgdS5yeC5zdGF0dXMwCi0jZGVmaW5lIGRzX3J4c3RhdHVzMSAgICB1LnJ4LnN0YXR1czEKLSNkZWZpbmUgZHNfcnhzdGF0dXMyICAgIHUucnguc3RhdHVzMgotI2RlZmluZSBkc19yeHN0YXR1czMgICAgdS5yeC5zdGF0dXMzCi0jZGVmaW5lIGRzX3J4c3RhdHVzNCAgICB1LnJ4LnN0YXR1czQKLSNkZWZpbmUgZHNfcnhzdGF0dXM1ICAgIHUucnguc3RhdHVzNQotI2RlZmluZSBkc19yeHN0YXR1czYgICAgdS5yeC5zdGF0dXM2Ci0jZGVmaW5lIGRzX3J4c3RhdHVzNyAgICB1LnJ4LnN0YXR1czcKLSNkZWZpbmUgZHNfcnhzdGF0dXM4ICAgIHUucnguc3RhdHVzOAotCi0jZGVmaW5lIEFSX0ZyYW1lTGVuICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9WaXJ0TW9yZUZyYWcgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkMDAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIEFSX1htaXRQb3dlciAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBBUl9YbWl0UG93ZXJfUyAgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0VuYWJsZSAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBBUl9WRU9MICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgQVJfQ2xyRGVzdE1hc2sgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDAxICAgICAgMHgxZTAwMDAwMAotI2RlZmluZSBBUl9UeEludHJSZXEgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgQVJfRGVzdElkeFZhbGlkICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEFSX0NUU0VuYWJsZSAgICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9UeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfRGVzdElkeCAgICAgICAgICAweDAwMGZlMDAwCi0jZGVmaW5lIEFSX0Rlc3RJZHhfUyAgICAgICAgMTMKLSNkZWZpbmUgQVJfRnJhbWVUeXBlICAgICAgICAweDAwZjAwMDAwCi0jZGVmaW5lIEFSX0ZyYW1lVHlwZV9TICAgICAgMjAKLSNkZWZpbmUgQVJfTm9BY2sgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEFSX0luc2VydFRTICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBBUl9Db3JydXB0RkNTICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgQVJfRXh0T25seSAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEFSX0V4dEFuZEN0bCAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBBUl9Nb3JlQWdnciAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgQVJfSXNBZ2dyICAgICAgICAgICAweDQwMDAwMDAwCi0KLSNkZWZpbmUgQVJfQnVyc3REdXIgICAgICAgICAweDAwMDA3ZmZmCi0jZGVmaW5lIEFSX0J1cnN0RHVyX1MgICAgICAgMAotI2RlZmluZSBBUl9EdXJVcGRhdGVFbmEgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczAgICAweDAwMGYwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwX1MgMTYKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczEgICAweDAwZjAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxX1MgMjAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczIgICAweDBmMDAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyX1MgMjQKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczMgICAweGYwMDAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzX1MgMjgKLQotI2RlZmluZSBBUl9YbWl0UmF0ZTAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfWG1pdFJhdGUwX1MgICAgICAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMSAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9YbWl0UmF0ZTFfUyAgICAgIDgKLSNkZWZpbmUgQVJfWG1pdFJhdGUyICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMl9TICAgICAgMTYKLSNkZWZpbmUgQVJfWG1pdFJhdGUzICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEFSX1htaXRSYXRlM19TICAgICAgMjQKLQotI2RlZmluZSBBUl9QYWNrZXREdXIwICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfUGFja2V0RHVyMF9TICAgICAwCi0jZGVmaW5lIEFSX1JUU0NUU1F1YWwwICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIxICAgICAgIDB4N2ZmZjAwMDAKLSNkZWZpbmUgQVJfUGFja2V0RHVyMV9TICAgICAxNgotI2RlZmluZSBBUl9SVFNDVFNRdWFsMSAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9QYWNrZXREdXIyICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfUGFja2V0RHVyMl9TICAgICAwCi0jZGVmaW5lIEFSX1JUU0NUU1F1YWwyICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIzICAgICAgIDB4N2ZmZjAwMDAKLSNkZWZpbmUgQVJfUGFja2V0RHVyM19TICAgICAxNgotI2RlZmluZSBBUl9SVFNDVFNRdWFsMyAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9BZ2dyTGVuICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgQVJfQWdnckxlbl9TICAgICAgICAwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDYwICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBBUl9QYWREZWxpbSAgICAgICAgIDB4MDNmYzAwMDAKLSNkZWZpbmUgQVJfUGFkRGVsaW1fUyAgICAgICAxOAotI2RlZmluZSBBUl9FbmNyVHlwZSAgICAgICAgIDB4MGMwMDAwMDAKLSNkZWZpbmUgQVJfRW5jclR5cGVfUyAgICAgICAyNgotI2RlZmluZSBBUl9UeEN0bFJzdmQ2MSAgICAgIDB4ZjAwMDAwMDAKLQotI2RlZmluZSBBUl8yMDQwXzAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfR0kwICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX0NoYWluU2VsMCAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBBUl9DaGFpblNlbDBfUyAgICAgIDIKLSNkZWZpbmUgQVJfMjA0MF8xICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEFSX0dJMSAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBBUl9DaGFpblNlbDEgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwxX1MgICAgICA3Ci0jZGVmaW5lIEFSXzIwNDBfMiAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBBUl9HSTIgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwyICAgICAgICAweDAwMDA3MDAwCi0jZGVmaW5lIEFSX0NoYWluU2VsMl9TICAgICAgMTIKLSNkZWZpbmUgQVJfMjA0MF8zICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX0dJMyAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBBUl9DaGFpblNlbDMgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwzX1MgICAgICAxNwotI2RlZmluZSBBUl9SVFNDVFNSYXRlICAgICAgIDB4MGZmMDAwMDAKLSNkZWZpbmUgQVJfUlRTQ1RTUmF0ZV9TICAgICAyMAotI2RlZmluZSBBUl9UeEN0bFJzdmQ3MCAgICAgIDB4ZjAwMDAwMDAKLQotI2RlZmluZSBBUl9UeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDBfUyAgICAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9UeFJTU0lBbnQwMV9TICAgIDgKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAyX1MgICAgMTYKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDAgICAweDNmMDAwMDAwCi0jZGVmaW5lIEFSX1R4QmFTdGF0dXMgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMSAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9Gcm1YbWl0T0sgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX0V4Y2Vzc2l2ZVJldHJpZXMgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfRklGT1VuZGVycnVuICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9GaWx0ZXJlZCAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1JUU0ZhaWxDbnQgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgQVJfUlRTRmFpbENudF9TICAgICAgICAgNAotI2RlZmluZSBBUl9EYXRhRmFpbENudCAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIEFSX0RhdGFGYWlsQ250X1MgICAgICAgIDgKLSNkZWZpbmUgQVJfVmlydFJldHJ5Q250ICAgICAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnRfUyAgICAgICAxMgotI2RlZmluZSBBUl9UeERlbGltVW5kZXJydW4gICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX1R4RGF0YVVuZGVycnVuICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQVJfRGVzY0NmZ0VyciAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBBUl9UeFRpbWVyRXhwaXJlZCAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDEwICAgICAgIDB4ZmZmMDAwMDAKLQotI2RlZmluZSBBUl9TZW5kVGltZXN0YW1wICAgIGRzX3R4c3RhdHVzMgotI2RlZmluZSBBUl9CYUJpdG1hcExvdyAgICAgIGRzX3R4c3RhdHVzMwotI2RlZmluZSBBUl9CYUJpdG1hcEhpZ2ggICAgIGRzX3R4c3RhdHVzNAotCi0jZGVmaW5lIEFSX1R4UlNTSUFudDEwICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9UeFJTU0lBbnQxMF9TICAgIDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTEgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDExX1MgICAgOAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMiAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTJfUyAgICAxNgotI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZCAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWRfUyAyNAotCi0jZGVmaW5lIEFSX1R4RVZNMCAgICAgICAgICAgZHNfdHhzdGF0dXM1Ci0jZGVmaW5lIEFSX1R4RVZNMSAgICAgICAgICAgZHNfdHhzdGF0dXM2Ci0jZGVmaW5lIEFSX1R4RVZNMiAgICAgICAgICAgZHNfdHhzdGF0dXM3Ci0KLSNkZWZpbmUgQVJfVHhEb25lICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1NlcU51bSAgICAgICAgICAgMHgwMDAwMWZmZQotI2RlZmluZSBBUl9TZXFOdW1fUyAgICAgICAgIDEKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODAgICAweDAwMDFlMDAwCi0jZGVmaW5lIEFSX1R4T3BFeGNlZWRlZCAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MSAgIDB4MDAxYzAwMDAKLSNkZWZpbmUgQVJfRmluYWxUeElkeCAgICAgICAweDAwNjAwMDAwCi0jZGVmaW5lIEFSX0ZpbmFsVHhJZHhfUyAgICAgMjEKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODIgICAweDAxODAwMDAwCi0jZGVmaW5lIEFSX1Bvd2VyTWdtdCAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MyAgIDB4ZmMwMDAwMDAKLQotI2RlZmluZSBBUl9SeENUTFJzdmQwMCAgMHhmZmZmZmZmZgotCi0jZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1J4Q3RsUnN2ZDAwICAweDAwMDAxMDAwCi0jZGVmaW5lIEFSX1J4SW50clJlcSAgICAweDAwMDAyMDAwCi0jZGVmaW5lIEFSX1J4Q3RsUnN2ZDAxICAweGZmZmZjMDAwCi0KLSNkZWZpbmUgQVJfUnhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAwX1MgICAgMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDFfUyAgICA4Ci0jZGVmaW5lIEFSX1J4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMl9TICAgIDE2Ci0jZGVmaW5lIEFSX1J4UmF0ZSAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9SeFJhdGVfUyAgICAgICAgIDI0Ci0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDAwICAgMHhmZjAwMDAwMAotCi0jZGVmaW5lIEFSX0RhdGFMZW4gICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9SeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfTnVtRGVsaW0gICAgICAgICAweDAwM2ZjMDAwCi0jZGVmaW5lIEFSX051bURlbGltX1MgICAgICAgMTQKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMTAgICAweGZmODAwMDAwCi0KLSNkZWZpbmUgQVJfUmN2VGltZXN0YW1wICAgICBkc19yeHN0YXR1czIKLQotI2RlZmluZSBBUl9HSSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfMjA0MCAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX1BhcmFsbGVsNDAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9QYXJhbGxlbDQwX1MgICAgIDIKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMzAgICAweDAwMDAwMGY4Ci0jZGVmaW5lIEFSX1J4QW50ZW5uYQkgICAgMHhmZmZmZmYwMAotI2RlZmluZSBBUl9SeEFudGVubmFfUwkgICAgOAotCi0jZGVmaW5lIEFSX1J4UlNTSUFudDEwICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9SeFJTU0lBbnQxMF9TICAgICAgICAgIDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTEgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDExX1MgICAgICAgICAgOAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMiAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTJfUyAgICAgICAgICAxNgotI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZCAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWRfUyAgICAgICAyNAotCi0jZGVmaW5lIEFSX1J4RVZNMCAgICAgICAgICAgZHNfcnhzdGF0dXM0Ci0jZGVmaW5lIEFSX1J4RVZNMSAgICAgICAgICAgZHNfcnhzdGF0dXM1Ci0jZGVmaW5lIEFSX1J4RVZNMiAgICAgICAgICAgZHNfcnhzdGF0dXM2Ci0KLSNkZWZpbmUgQVJfUnhEb25lICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1J4RnJhbWVPSyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9DUkNFcnIgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQVJfRGVjcnlwdENSQ0VyciAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1BIWUVyciAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBUl9NaWNoYWVsRXJyICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfUHJlRGVsaW1DUkNFcnIgICAweDAwMDAwMDQwCi0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcwICAgMHgwMDAwMDA4MAotI2RlZmluZSBBUl9SeEtleUlkeFZhbGlkICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgQVJfS2V5SWR4ICAgICAgICAgICAweDAwMDBmZTAwCi0jZGVmaW5lIEFSX0tleUlkeF9TICAgICAgICAgOQotI2RlZmluZSBBUl9QSFlFcnJDb2RlICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUEhZRXJyQ29kZV9TICAgICA4Ci0jZGVmaW5lIEFSX1J4TW9yZUFnZ3IgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBBUl9SeEFnZ3IgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQVJfUG9zdERlbGltQ1JDRXJyICAweDAwMDQwMDAwCi0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcxICAgMHgzZmY4MDAwMAotI2RlZmluZSBBUl9EZWNyeXB0QnVzeUVyciAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgQVJfS2V5TWlzcyAgICAgICAgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgQVI1NDE2X01BR0lDICAgICAgICAweDE5NjQxMDE0Ci0KLSNkZWZpbmUgUlhTVEFUVVNfUkFURShhaCwgYWRzKSAgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpID8JXAotCQkJCSBNUyhhZHMtPmRzX3J4c3RhdHVzMCwgQVJfUnhSYXRlKSA6CVwKLQkJCQkgKGFkcy0+ZHNfcnhzdGF0dXMzID4+IDIpICYgMHhGRikKLQotI2RlZmluZSBzZXQxMW5Ucmllcyhfc2VyaWVzLCBfaW5kZXgpIFwKLQkoU00oKF9zZXJpZXMpW19pbmRleF0uVHJpZXMsIEFSX1htaXREYXRhVHJpZXMjI19pbmRleCkpCi0KLSNkZWZpbmUgc2V0MTFuUmF0ZShfc2VyaWVzLCBfaW5kZXgpIFwKLQkoU00oKF9zZXJpZXMpW19pbmRleF0uUmF0ZSwgQVJfWG1pdFJhdGUjI19pbmRleCkpCi0KLSNkZWZpbmUgc2V0MTFuUGt0RHVyUlRTQ1RTKF9zZXJpZXMsIF9pbmRleCkJCQkJXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5Qa3REdXJhdGlvbiwgQVJfUGFja2V0RHVyIyNfaW5kZXgpIHwJXAotCSgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgICA/CVwKLQkJQVJfUlRTQ1RTUXVhbCMjX2luZGV4IDogMCkpCi0KLSNkZWZpbmUgc2V0MTFuUmF0ZUZsYWdzKF9zZXJpZXMsIF9pbmRleCkJCQkJXAotCSgoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU18yMDQwID8JCVwKLQkgIEFSXzIwNDBfIyNfaW5kZXggOiAwKQkJCQkJCVwKLQkgfCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSA/CVwKLQkgICBBUl9HSSMjX2luZGV4IDogMCkJCQkJCQlcCi0JIHxTTSgoX3NlcmllcylbX2luZGV4XS5DaFNlbCwgQVJfQ2hhaW5TZWwjI19pbmRleCkpCi0KLSNkZWZpbmUgQVJfU1JFVl85MTAwKGFoKSAoKGFoLT5haF9tYWNWZXJzaW9uKSA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkKLQotI2RlZmluZSBJTklUX0NPTkZJR19TVEFUVVMgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSU5JVF9SU1NJX1RIUiAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIElOSVRfQkNPTl9DTlRSTF9SRUcgMHgwMDAwMDAwMAotCi0jZGVmaW5lIE1JTl9UWF9GSUZPX1RIUkVTSE9MRCAgIDB4MQotI2RlZmluZSBNQVhfVFhfRklGT19USFJFU0hPTEQgICAoKDQwOTYgLyA2NCkgLSAxKQotI2RlZmluZSBJTklUX1RYX0ZJRk9fVEhSRVNIT0xEICBNSU5fVFhfRklGT19USFJFU0hPTEQKLQotc3RydWN0IGFyNTQxNkFuaVN0YXRlIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCBjOwotCXU4IG5vaXNlSW1tdW5pdHlMZXZlbDsKLQl1OCBzcHVySW1tdW5pdHlMZXZlbDsKLQl1OCBmaXJzdGVwTGV2ZWw7Ci0JdTggb2ZkbVdlYWtTaWdEZXRlY3RPZmY7Ci0JdTggY2NrV2Vha1NpZ1RocmVzaG9sZDsKLQl1MzIgbGlzdGVuVGltZTsKLQl1MzIgb2ZkbVRyaWdIaWdoOwotCXUzMiBvZmRtVHJpZ0xvdzsKLQlpbnQzMl90IGNja1RyaWdIaWdoOwotCWludDMyX3QgY2NrVHJpZ0xvdzsKLQlpbnQzMl90IHJzc2lUaHJMb3c7Ci0JaW50MzJfdCByc3NpVGhySGlnaDsKLQl1MzIgbm9pc2VGbG9vcjsKLQl1MzIgdHhGcmFtZUNvdW50OwotCXUzMiByeEZyYW1lQ291bnQ7Ci0JdTMyIGN5Y2xlQ291bnQ7Ci0JdTMyIG9mZG1QaHlFcnJDb3VudDsKLQl1MzIgY2NrUGh5RXJyQ291bnQ7Ci0JdTMyIG9mZG1QaHlFcnJCYXNlOwotCXUzMiBjY2tQaHlFcnJCYXNlOwotCWludDE2X3QgcGt0UnNzaVsyXTsKLQlpbnQxNl90IG9mZG1FcnJSc3NpWzJdOwotCWludDE2X3QgY2NrRXJyUnNzaVsyXTsKLX07Ci0KLSNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIERPX0FOSShhaCkgXAotCSgoQUg1NDE2KGFoKS0+YWhfcHJvY1BoeUVyciAmIEhBTF9QUk9DRVNTX0FOSSkpCi0KLXN0cnVjdCBhcjU0MTZTdGF0cyB7Ci0JdTMyIGFzdF9hbmlfbml1cDsKLQl1MzIgYXN0X2FuaV9uaWRvd247Ci0JdTMyIGFzdF9hbmlfc3B1cnVwOwotCXUzMiBhc3RfYW5pX3NwdXJkb3duOwotCXUzMiBhc3RfYW5pX29mZG1vbjsKLQl1MzIgYXN0X2FuaV9vZmRtb2ZmOwotCXUzMiBhc3RfYW5pX2Nja2hpZ2g7Ci0JdTMyIGFzdF9hbmlfY2NrbG93OwotCXUzMiBhc3RfYW5pX3N0ZXB1cDsKLQl1MzIgYXN0X2FuaV9zdGVwZG93bjsKLQl1MzIgYXN0X2FuaV9vZmRtZXJyczsKLQl1MzIgYXN0X2FuaV9jY2tlcnJzOwotCXUzMiBhc3RfYW5pX3Jlc2V0OwotCXUzMiBhc3RfYW5pX2x6ZXJvOwotCXUzMiBhc3RfYW5pX2xuZWc7Ci0Jc3RydWN0IGF0aDlrX21pYl9zdGF0cyBhc3RfbWlic3RhdHM7Ci0Jc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgYXN0X25vZGVzdGF0czsKLX07Ci0KLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4Ci0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKLQotI2RlZmluZSBFRVBfUkZTSUxFTlRfRU5BQkxFRCAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEX1MgICAgICAwCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9QT0xBUklUWSAgICAgICAweDAwMDIKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZX1MgICAgIDEKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX0dQSU9fU0VMICAgICAgIDB4MDAxYwotI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUxfUyAgICAgMgotCi0jZGVmaW5lIEFSNTQxNl9FRVBfTk9fQkFDS19WRVIgICAgICAgMHgxCi0jZGVmaW5lIEFSNTQxNl9FRVBfVkVSICAgICAgICAgICAgICAgMHhFCi0jZGVmaW5lIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0sgICAgMHgwRkZGCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIgICAgICAgMHgyCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMgICAgICAgMHgzCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcgICAgICAgMHg3Ci0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzkgICAgICAgMHg5Ci0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE2ICAgICAgMHgxMAotI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNyAgICAgIDB4MTEKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkgICAgICAweDEzCi0KLSNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMwotI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKLSNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0Ci0jZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKLSNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQotI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCi0jZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4Ci0jZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgotI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0Ci0jZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMwotI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01Ci0KLS8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KLSNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCi0jZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQotI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKLQotLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKLSNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCi0KLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgIDY0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTICAgICAgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTIDMKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUyAgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0NUTFMgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0sgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAgICAgICAgNQotI2RlZmluZSBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUyAgICAgICAgICAgIDEKLQotZW51bSBlZXByb21fcGFyYW0gewotCUVFUF9ORlRIUkVTSF81LAotCUVFUF9ORlRIUkVTSF8yLAotCUVFUF9NQUNfTVNXLAotCUVFUF9NQUNfTUlELAotCUVFUF9NQUNfTFNXLAotCUVFUF9SRUdfMCwKLQlFRVBfUkVHXzEsCi0JRUVQX09QX0NBUCwKLQlFRVBfT1BfTU9ERSwKLQlFRVBfUkZfU0lMRU5ULAotCUVFUF9PQl81LAotCUVFUF9EQl81LAotCUVFUF9PQl8yLAotCUVFUF9EQl8yLAotCUVFUF9NSU5PUl9SRVYsCi0JRUVQX1RYX01BU0ssCi0JRUVQX1JYX01BU0ssCi0JRUVQX1JYR0FJTl9UWVBFLAotCUVFUF9UWEdBSU5fVFlQRSwKLX07Ci0KLWVudW0gYXI1NDE2X3JhdGVzIHsKLQlyYXRlNm1iLCByYXRlOW1iLCByYXRlMTJtYiwgcmF0ZTE4bWIsCi0JcmF0ZTI0bWIsIHJhdGUzNm1iLCByYXRlNDhtYiwgcmF0ZTU0bWIsCi0JcmF0ZTFsLCByYXRlMmwsIHJhdGUycywgcmF0ZTVfNWwsCi0JcmF0ZTVfNXMsIHJhdGUxMWwsIHJhdGUxMXMsIHJhdGVYciwKLQlyYXRlSHQyMF8wLCByYXRlSHQyMF8xLCByYXRlSHQyMF8yLCByYXRlSHQyMF8zLAotCXJhdGVIdDIwXzQsIHJhdGVIdDIwXzUsIHJhdGVIdDIwXzYsIHJhdGVIdDIwXzcsCi0JcmF0ZUh0NDBfMCwgcmF0ZUh0NDBfMSwgcmF0ZUh0NDBfMiwgcmF0ZUh0NDBfMywKLQlyYXRlSHQ0MF80LCByYXRlSHQ0MF81LCByYXRlSHQ0MF82LCByYXRlSHQ0MF83LAotCXJhdGVEdXBDY2ssIHJhdGVEdXBPZmRtLCByYXRlRXh0Q2NrLCByYXRlRXh0T2ZkbSwKLQlBcjU0MTZSYXRlU2l6ZQotfTsKLQotZW51bSBhdGg5a19oYWxfZnJlcV9iYW5kIHsKLQlBVEg5S19IQUxfRlJFUV9CQU5EXzVHSFogPSAwLAotCUFUSDlLX0hBTF9GUkVRX0JBTkRfMkdIWiA9IDEKLX07Ci0KLXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgewotCXUxNiBsZW5ndGg7Ci0JdTE2IGNoZWNrc3VtOwotCXUxNiB2ZXJzaW9uOwotCXU4IG9wQ2FwRmxhZ3M7Ci0JdTggZWVwTWlzYzsKLQl1MTYgcmVnRG1uWzJdOwotCXU4IG1hY0FkZHJbNl07Ci0JdTggcnhNYXNrOwotCXU4IHR4TWFzazsKLQl1MTYgcmZTaWxlbnQ7Ci0JdTE2IGJsdWVUb290aE9wdGlvbnM7Ci0JdTE2IGRldmljZUNhcDsKLQl1MzIgYmluQnVpbGROdW1iZXI7Ci0JdTggZGV2aWNlVHlwZTsKLQl1OCBwd2RjbGtpbmQ7Ci0JdTggZnV0dXJlQmFzZV8xWzJdOwotCXU4IHJ4R2FpblR5cGU7Ci0JdTggZnV0dXJlQmFzZV8yWzNdOwotCXU4IHR4R2FpblR5cGU7Ci0JdTggZnV0dXJlQmFzZV8zWzI1XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgewotCXUxNiBsZW5ndGg7Ci0JdTE2IGNoZWNrc3VtOwotCXUxNiB2ZXJzaW9uOwotCXU4IG9wQ2FwRmxhZ3M7Ci0JdTggZWVwTWlzYzsKLQl1MTYgcmVnRG1uWzJdOwotCXU4IG1hY0FkZHJbNl07Ci0JdTggcnhNYXNrOwotCXU4IHR4TWFzazsKLQl1MTYgcmZTaWxlbnQ7Ci0JdTE2IGJsdWVUb290aE9wdGlvbnM7Ci0JdTE2IGRldmljZUNhcDsKLQl1MzIgYmluQnVpbGROdW1iZXI7Ci0JdTggZGV2aWNlVHlwZTsKLQl1OCBmdXR1cmVCYXNlWzFdOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3Qgc3B1cl9jaGFuIHsKLQl1MTYgc3B1ckNoYW47Ci0JdTggc3B1clJhbmdlTG93OwotCXU4IHNwdXJSYW5nZUhpZ2g7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7Ci0JdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTMyIGFudEN0cmxDb21tb247Ci0JdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggc3dpdGNoU2V0dGxpbmc7Ci0JdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggYWRjRGVzaXJlZFNpemU7Ci0JdTggcGdhRGVzaXJlZFNpemU7Ci0JdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggdHhFbmRUb1hwYU9mZjsKLQl1OCB0eEVuZFRvUnhPbjsKLQl1OCB0eEZyYW1lVG9YcGFPbjsKLQl1OCB0aHJlc2g2MjsKLQl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHhwZEdhaW47Ci0JdTggeHBkOwotCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggcGRHYWluT3ZlcmxhcDsKLQl1OCBvYjsKLQl1OCBkYjsKLQl1OCB4cGFCaWFzTHZsOwotCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOwotCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOwotCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKLQl1OCB0eEZyYW1lVG9QYU9uOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOwotCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHN3U2V0dGxlSHQ0MDsKLQl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IG9iX2NoMTsKLQl1OCBkYl9jaDE7Ci0JdTggdXNlQW50MToxLAotCSAgICBmb3JjZV94cGFvbjoxLAotCSAgICBsb2NhbF9iaWFzOjEsCi0JICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOwotCXU4IGZ1dHVyZU1vZGFsYXI5MjgwOwotCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKLQl1OCBmdXR1cmVNb2RhbFs2XTsKLQotCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgewotICAgIHUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1MzIgIGFudEN0cmxDb21tb247Ci0gICAgdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHN3aXRjaFNldHRsaW5nOwotICAgIHU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGFkY0Rlc2lyZWRTaXplOwotICAgIHU4ICAgcGdhRGVzaXJlZFNpemU7Ci0gICAgdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHR4RW5kVG9YcGFPZmY7Ci0gICAgdTggICB0eEVuZFRvUnhPbjsKLSAgICB1OCAgIHR4RnJhbWVUb1hwYU9uOwotICAgIHU4ICAgdGhyZXNoNjI7Ci0gICAgdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgeHBkR2FpbjsKLSAgICB1OCAgIHhwZDsKLSAgICB1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHBkR2Fpbk92ZXJsYXA7Ci0gICAgdTggICBvYl8wMTsKLSAgICB1OCAgIGRiMV8wMTsKLSAgICB1OCAgIHhwYUJpYXNMdmw7Ci0gICAgdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0gICAgdTggICB0eEZyYW1lVG9QYU9uOwotICAgIHU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0gICAgdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgc3dTZXR0bGVIdDQwOwotICAgIHU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgZGIyXzAxOwotICAgIHU4ICAgdmVyc2lvbjsKLSAgICB1MTYgIG9iXzIzNDsKLSAgICB1MTYgIGRiMV8yMzQ7Ci0gICAgdTE2ICBkYjJfMjM0OwotICAgIHU4ICAgZnV0dXJlTW9kYWxbNF07Ci0KLSAgICBzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKLX0gX19wYWNrZWQ7Ci0KLQotc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKLQl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLQl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7Ci0JdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Ci0JdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgewotCXU4IGJDaGFubmVsOwotCXU4IHRQb3cyeFs0XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCB0UG93MnhbOF07Ci19IF9fcGFja2VkOwotCi0KLSNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKLXN0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCBmbGFnOjIsIHRQb3dlcjo2OwotfSBfX3BhY2tlZDsKLSNlbHNlCi1zdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7Ci0JdTggYkNoYW5uZWw7Ci0JdTggdFBvd2VyOjYsIGZsYWc6MjsKLX0gX19wYWNrZWQ7Ci0jZW5kaWYKLQotc3RydWN0IGNhbF9jdGxfZGF0YSB7Ci0Jc3RydWN0IGNhbF9jdGxfZWRnZXMKLQljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgewotCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCi0JY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgewotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKLQl1OCBjdXN0RGF0YVs2NF07Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07Ci0JdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107Ci0JdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCi0JIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKLQkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKLQl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOwotCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOwotCXU4IHBhZGRpbmc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOwotCXU4IGN1c3REYXRhWzIwXTsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKLQl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKLQljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107Ci0JdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKLQlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKLQl1OCBwYWRkaW5nOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFyNTQxNkluaUFycmF5IHsKLQl1MzIgKmlhX2FycmF5OwotCXUzMiBpYV9yb3dzOwotCXUzMiBpYV9jb2x1bW5zOwotfTsKLQotI2RlZmluZSBJTklUX0lOSV9BUlJBWShpbmlhcnJheSwgYXJyYXksIHJvd3MsIGNvbHVtbnMpIGRvIHsJXAotCQkoaW5pYXJyYXkpLT5pYV9hcnJheSA9ICh1MzIgKikoYXJyYXkpOwkJXAotCQkoaW5pYXJyYXkpLT5pYV9yb3dzID0gKHJvd3MpOwkJCVwKLQkJKGluaWFycmF5KS0+aWFfY29sdW1ucyA9IChjb2x1bW5zKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIElOSV9SQShpbmlhcnJheSwgcm93LCBjb2x1bW4pIFwKLQkoKChpbmlhcnJheSktPmlhX2FycmF5KVsocm93KSAqCSgoaW5pYXJyYXkpLT5pYV9jb2x1bW5zKSArIChjb2x1bW4pXSkKLQotI2RlZmluZSBJTklUX0NBTChfcGVyQ2FsKSBkbyB7CQkJCVwKLQkJKF9wZXJDYWwpLT5jYWxTdGF0ZSA9IENBTF9XQUlUSU5HOwlcCi0JCShfcGVyQ2FsKS0+Y2FsTmV4dCA9IE5VTEw7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJTlNFUlRfQ0FMKF9haHAsIF9wZXJDYWwpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID09IE5VTEwpIHsJCQlcCi0JCQkoX2FocCktPmFoX2NhbF9saXN0ID0JCQkJXAotCQkJCShfYWhwKS0+YWhfY2FsX2xpc3RfbGFzdCA9IChfcGVyQ2FsKTsJXAotCQkJKChfYWhwKS0+YWhfY2FsX2xpc3RfbGFzdCktPmNhbE5leHQgPSAoX3BlckNhbCk7IFwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQkoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAotCQkJKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwkJXAotCQkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gKF9haHApLT5haF9jYWxfbGlzdDsJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotCi1lbnVtIGhhbF9jYWxfdHlwZXMgewotCUFEQ19EQ19JTklUX0NBTCA9IDB4MSwKLQlBRENfR0FJTl9DQUwgPSAweDIsCi0JQURDX0RDX0NBTCA9IDB4NCwKLQlJUV9NSVNNQVRDSF9DQUwgPSAweDgKLX07Ci0KLWVudW0gaGFsX2NhbF9zdGF0ZSB7Ci0JQ0FMX0lOQUNUSVZFLAotCUNBTF9XQUlUSU5HLAotCUNBTF9SVU5OSU5HLAotCUNBTF9ET05FCi19OwotCi0jZGVmaW5lIE1JTl9DQUxfU0FNUExFUyAgICAgMQotI2RlZmluZSBNQVhfQ0FMX1NBTVBMRVMgICAgNjQKLSNkZWZpbmUgSU5JVF9MT0dfQ09VTlQgICAgICA1Ci0jZGVmaW5lIFBFUl9NSU5fTE9HX0NPVU5UICAgMgotI2RlZmluZSBQRVJfTUFYX0xPR19DT1VOVCAgMTAKLQotc3RydWN0IGhhbF9wZXJjYWxfZGF0YSB7Ci0JZW51bSBoYWxfY2FsX3R5cGVzIGNhbFR5cGU7Ci0JdTMyIGNhbE51bVNhbXBsZXM7Ci0JdTMyIGNhbENvdW50TWF4OwotCXZvaWQgKCpjYWxDb2xsZWN0KSAoc3RydWN0IGF0aF9oYWwgKik7Ci0Jdm9pZCAoKmNhbFBvc3RQcm9jKSAoc3RydWN0IGF0aF9oYWwgKiwgdTgpOwotfTsKLQotc3RydWN0IGhhbF9jYWxfbGlzdCB7Ci0JY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKLQllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKLX07Ci0KLS8qCi0gKiBFbnVtIHRvIGluZGVudGlmeSB0aGUgZWVwcm9tIG1hcHBpbmdzCi0gKi8KLWVudW0gaGFsX2VlcF9tYXAgewotCUVFUF9NQVBfREVGQVVMVCA9IDB4MCwKLQlFRVBfTUFQXzRLQklUUywKLQlFRVBfTUFQX01BWAotfTsKLQotCi1zdHJ1Y3QgYXRoX2hhbF81NDE2IHsKLQlzdHJ1Y3QgYXRoX2hhbCBhaDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiBkZWY7Ci0JCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrIG1hcDRrOwotCX0gYWhfZWVwcm9tOwotCXN0cnVjdCBhcjU0MTZTdGF0cyBhaF9zdGF0czsKLQlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBhaF90eHFbQVRIOUtfTlVNX1RYX1FVRVVFU107Ci0Jdm9pZCBfX2lvbWVtICphaF9jYWxfbWVtOwotCi0JdTggYWhfbWFjYWRkcltFVEhfQUxFTl07Ci0JdTggYWhfYnNzaWRbRVRIX0FMRU5dOwotCXU4IGFoX2Jzc2lkbWFza1tFVEhfQUxFTl07Ci0JdTE2IGFoX2Fzc29jSWQ7Ci0KLQlpbnQxNl90IGFoX2N1cmNoYW5SYWRJbmRleDsKLQl1MzIgYWhfbWFza1JlZzsKLQl1MzIgYWhfdHhPa0ludGVycnVwdE1hc2s7Ci0JdTMyIGFoX3R4RXJySW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhEZXNjSW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhFb2xJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eFVybkludGVycnVwdE1hc2s7Ci0JYm9vbCBhaF9jaGlwRnVsbFNsZWVwOwotCXUzMiBhaF9hdGltV2luZG93OwotCXUxNiBhaF9hbnRlbm5hU3dpdGNoU3dhcDsKLQllbnVtIGF0aDlrX3Bvd2VyX21vZGUgYWhfcG93ZXJNb2RlOwotCWVudW0gYXRoOWtfYW50X3NldHRpbmcgYWhfZGl2ZXJzaXR5Q29udHJvbDsKLQotCS8qIENhbGlicmF0aW9uICovCi0JZW51bSBoYWxfY2FsX3R5cGVzIGFoX3N1cHBDYWxzOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfaXFDYWxEYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfYWRjR2FpbkNhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNEY0NhbEluaXREYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfYWRjRGNDYWxEYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmFoX2NhbF9saXN0OwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmFoX2NhbF9saXN0X2xhc3Q7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3RfY3VycjsKLSNkZWZpbmUgYWhfdG90YWxQb3dlck1lYXNJIGFoX01lYXMwLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbFBvd2VyTWVhc1EgYWhfTWVhczEudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsSXFDb3JyTWVhcyBhaF9NZWFzMi5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjSU9kZFBoYXNlICBhaF9NZWFzMC51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNJRXZlblBoYXNlIGFoX01lYXMxLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY1FPZGRQaGFzZSAgYWhfTWVhczIudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjUUV2ZW5QaGFzZSBhaF9NZWFzMy51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZSAgYWhfTWVhczAuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZSBhaF9NZWFzMS5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2UgIGFoX01lYXMyLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2UgYWhfTWVhczMuc2lnbgotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMDsKLQl1bmlvbiB7Ci0JCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCX0gYWhfTWVhczE7Ci0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMyOwotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMzsKLQl1MTYgYWhfQ2FsU2FtcGxlczsKLQotCXUzMiBhaF9zdGFJZDFEZWZhdWx0czsKLQl1MzIgYWhfbWlzY01vZGU7Ci0JZW51bSB7Ci0JCUFVVE9fMzJLSFosCi0JCVVTRV8zMktIWiwKLQkJRE9OVF9VU0VfMzJLSFosCi0JfSBhaF9lbmFibGUzMmtIekNsb2NrOwotCi0JLyogUkYgKi8KLQl1MzIgKmFoX2FuYWxvZ0JhbmswRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmsxRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmsyRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmszRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms2RGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms2VFBDRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms3RGF0YTsKLQl1MzIgKmFoX2FkZGFjNTQxNl8yMTsKLQl1MzIgKmFoX2Jhbms2VGVtcDsKLQotCWludDE2X3QgYWhfdHhQb3dlckluZGV4T2Zmc2V0OwotCXUzMiBhaF9iZWFjb25JbnRlcnZhbDsKLQl1MzIgYWhfc2xvdHRpbWU7Ci0JdTMyIGFoX2Fja3RpbWVvdXQ7Ci0JdTMyIGFoX2N0c3RpbWVvdXQ7Ci0JdTMyIGFoX2dsb2JhbHR4dGltZW91dDsKLQl1OCBhaF9nQmVhY29uUmF0ZTsKLQl1MzIgYWhfZ3Bpb1NlbGVjdDsKLQl1MzIgYWhfcG9sYXJpdHk7Ci0JdTMyIGFoX2dwaW9CaXQ7Ci0KLQkvKiBBTkkgKi8KLQl1MzIgYWhfcHJvY1BoeUVycjsKLQlib29sIGFoX2hhc0h3UGh5Q291bnRlcnM7Ci0JdTMyIGFoX2FuaVBlcmlvZDsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFoX2N1cmFuaTsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgYWhfYW5pWzI1NV07Ci0JaW50IGFoX3RvdGFsU2l6ZURlc2lyZWRbNV07Ci0JaW50IGFoX2NvYXJzZUhpZ2hbNV07Ci0JaW50IGFoX2NvYXJzZUxvd1s1XTsKLQlpbnQgYWhfZmlycHdyWzVdOwotCWVudW0gYXRoOWtfYW5pX2NtZCBhaF9hbmlfZnVuY3Rpb247Ci0KLQl1MzIgYWhfaW50clR4cXM7Ci0JYm9vbCBhaF9pbnRyTWl0aWdhdGlvbjsKLQllbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIGFoX2V4dHByb3RzcGFjaW5nOwotCXU4IGFoX3R4Y2hhaW5tYXNrOwotCXU4IGFoX3J4Y2hhaW5tYXNrOwotCi0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlDb21tb247Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmswOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCQl9SZkdhaW47Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmsxOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rMjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbms2OwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rNlRQQzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazc7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUFkZGFjOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlQY2llU2VyZGVzOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlNb2Rlc0FkZGl0aW9uYWw7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzUnhHYWluOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlNb2Rlc1R4R2FpbjsKLQkvKiBUbyBpbmRpY2F0ZSBFRVBST00gbWFwcGluZyB1c2VkICovCi0JZW51bSBoYWxfZWVwX21hcCBhaF9lZXBfbWFwOwotfTsKLSNkZWZpbmUgQUg1NDE2KF9haCkgKChzdHJ1Y3QgYXRoX2hhbF81NDE2ICopKF9haCkpCi0KLSNkZWZpbmUgRlJFUTJGQklOKHgsIHkpICgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCi0KLSNkZWZpbmUgYXI1NDE2UmZEZXRhY2goYWgpIGRvIHsJCQkJCVwKLQkJaWYgKEFINTQxNihhaCktPmFoX3JmSGFsLnJmRGV0YWNoICE9IE5VTEwpCVwKLQkJCUFINTQxNihhaCktPmFoX3JmSGFsLnJmRGV0YWNoKGFoKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgYXRoOWtfaHdfdXNlX2ZsYXNoKF9haCkJCQlcCi0JKCEoX2FoLT5haF9mbGFncyAmIEFIX1VTRV9FRVBST00pKQotCisjZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCisjZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCisjZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCisJUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKKyNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAorCVJFR19XUklURShfYSwgX3IsIFwKKwkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKKyNkZWZpbmUgUkVHX1NFVF9CSVQoX2EsIF9yLCBfZikgXAorCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgfCBfZikKKyNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAorCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+X2YpCiAKICNkZWZpbmUgRE9fREVMQVkoeCkgZG8gewkJCVwKIAkJaWYgKCgrKyh4KSAlIDY0KSA9PSAwKSAgICAgICAgICBcCkBAIC05NjQsMTE3ICs3MSw1NzcgQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfQVRURU5USU9OX0xFRCAxCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX1BPV0VSX0xFRCAgICAgMgorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUgICAgICAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19ORVRXT1JLX0xFRCAgICA1CisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfUE9XRVJfTEVEICAgICAgNgorCisjZGVmaW5lIEFSX0dQSU9EX01BU0sgICAgICAgICAgICAgICAweDAwMDAxRkZGCisjZGVmaW5lIEFSX0dQSU9fQklUKF9ncGlvKSAgICAgICAgICAoMSA8PCAoX2dwaW8pKQorCiAjZGVmaW5lIEJBU0VfQUNUSVZBVEVfREVMQVkgICAgICAgICAxMDAKICNkZWZpbmUgUlRDX1BMTF9TRVRUTEVfREVMQVkgICAgICAgIDEwMDAKICNkZWZpbmUgQ09FRl9TQ0FMRV9TICAgICAgICAgICAgICAgIDI0CiAjZGVmaW5lIEhUNDBfQ0hBTk5FTF9DRU5URVJfU0hJRlQgICAxMAogCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VUICAweDAKKyNkZWZpbmUgQVRIOUtfQU5URU5OQTBfQ0hBSU5NQVNLICAgIDB4MQorI2RlZmluZSBBVEg5S19BTlRFTk5BMV9DSEFJTk1BU0sgICAgMHgyCiAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9TICAgICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9PRkZTRVQgICAgICAgIDB4MjAwMAotI2RlZmluZSBBUjU0MTZfRUVQUk9NX1NUQVJUX0FERFIgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IDB4MWZmZjEwMDAgOiAweDUwM2YxMjAwCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFYICAgICAgICAgICAweGFlMAotI2RlZmluZSBhcjU0MTZfZ2V0X2VlcF92ZXIoX2FocCkgXAotCSgoKF9haHApLT5haF9lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwX3JldihfYWhwKSBcCi0JKCgoX2FocCktPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKQotI2RlZmluZSBhcjU0MTZfZ2V0X250eGNoYWlucyhfdHhjaGFpbm1hc2spIFwKLQkoKChfdHhjaGFpbm1hc2sgPj4gMikgJiAxKSArIFwKLQkJKChfdHhjaGFpbm1hc2sgPj4gMSkgJiAxKSArIChfdHhjaGFpbm1hc2sgJiAxKSkKKyNkZWZpbmUgQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTICAgIDgKKyNkZWZpbmUgQVRIOUtfTlVNX1FVRVVFUyAgICAgICAgICAgIDEwCiAKLS8qIEVFUFJPTSA0SyBiaXQgbWFwIGRlZmluYXRpb25zICovCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwNGtfdmVyKF9haHApICAgXAotICAgICgoKF9haHApLT5haF9lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4RikKLSNkZWZpbmUgYXI1NDE2X2dldF9lZXA0a19yZXYoX2FocCkgICBcCi0gICAgKCgoX2FocCktPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpCisjZGVmaW5lIE1BWF9SQVRFX1BPV0VSICAgICAgICAgICAgICA2MworI2RlZmluZSBBSF9XQUlUX1RJTUVPVVQgICAgICAgICAgICAgMTAwMDAwIC8qICh1cykgKi8KKyNkZWZpbmUgQUhfVElNRV9RVUFOVFVNICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFSX0tFWVRBQkxFX1NJWkUgICAgICAgICAgICAxMjgKKyNkZWZpbmUgUE9XRVJfVVBfVElNRSAgICAgICAgICAgICAgIDIwMDAwMAorI2RlZmluZSBTUFVSX1JTU0lfVEhSRVNIICAgICAgICAgICAgNDAKIAorI2RlZmluZSBDQUJfVElNRU9VVF9WQUwgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQkVBQ09OX1RJTUVPVVRfVkFMICAgICAgICAgIDEwCisjZGVmaW5lIE1JTl9CRUFDT05fVElNRU9VVF9WQUwgICAgICAxCisjZGVmaW5lIFNMRUVQX1NMT1AgICAgICAgICAgICAgICAgICAzCiAKLSNpZmRlZiBfX0JJR19FTkRJQU4KLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKLSNlbHNlCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUMgMHhhNTVhCisjZGVmaW5lIElOSVRfQ09ORklHX1NUQVRVUyAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElOSVRfUlNTSV9USFIgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIElOSVRfQkNPTl9DTlRSTF9SRUcgICAgICAgICAweDAwMDAwMDAwCisKKyNkZWZpbmUgVFVfVE9fVVNFQyhfdHUpICAgICAgICAgICAgICgoX3R1KSA8PCAxMCkKKworZW51bSB3aXJlbGVzc19tb2RlIHsKKwlBVEg5S19NT0RFXzExQSA9IDAsCisJQVRIOUtfTU9ERV8xMUIgPSAyLAorCUFUSDlLX01PREVfMTFHID0gMywKKwlBVEg5S19NT0RFXzExTkFfSFQyMCA9IDYsCisJQVRIOUtfTU9ERV8xMU5HX0hUMjAgPSA3LAorCUFUSDlLX01PREVfMTFOQV9IVDQwUExVUyA9IDgsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUyA9IDksCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTID0gMTAsCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUyA9IDExLAorCUFUSDlLX01PREVfTUFYCit9OworCitlbnVtIGF0aDlrX2h3X2NhcHMgeworCUFUSDlLX0hXX0NBUF9DSEFOX1NQUkVBRAkJPSBCSVQoMCksCisJQVRIOUtfSFdfQ0FQX01JQ19BRVNDQ00gICAgICAgICAgICAgICAgID0gQklUKDEpLAorCUFUSDlLX0hXX0NBUF9NSUNfQ0tJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgyKSwKKwlBVEg5S19IV19DQVBfTUlDX1RLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCisJQVRIOUtfSFdfQ0FQX0NJUEhFUl9BRVNDQ00gICAgICAgICAgICAgID0gQklUKDQpLAorCUFUSDlLX0hXX0NBUF9DSVBIRVJfQ0tJUCAgICAgICAgICAgICAgICA9IEJJVCg1KSwKKwlBVEg5S19IV19DQVBfQ0lQSEVSX1RLSVAgICAgICAgICAgICAgICAgPSBCSVQoNiksCisJQVRIOUtfSFdfQ0FQX1ZFT0wgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDcpLAorCUFUSDlLX0hXX0NBUF9CU1NJRE1BU0sgICAgICAgICAgICAgICAgICA9IEJJVCg4KSwKKwlBVEg5S19IV19DQVBfTUNBU1RfS0VZU0VBUkNIICAgICAgICAgICAgPSBCSVQoOSksCisJQVRIOUtfSFdfQ0FQX0NIQU5fSEFMRlJBVEUgICAgICAgICAgICAgID0gQklUKDEwKSwKKwlBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSAgICAgICAgICAgPSBCSVQoMTEpLAorCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMiksCisJQVRIOUtfSFdfQ0FQX0dUVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKKwlBVEg5S19IV19DQVBfRkFTVENDICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAorCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCisJQVRIOUtfSFdfQ0FQX1dPVyAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE2KSwKKwlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTcpLAorCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgxOCksCisJQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCAgICAgICAgICAgICAgICAgID0gQklUKDE5KSwKKwlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoMjApLAorCUFUSDlLX0hXX0NBUF9XT1dfTUFUQ0hQQVRURVJOX0VYQUNUICAgICA9IEJJVCgyMSksCisJQVRIOUtfSFdfQ0FQX0JUX0NPRVgJCQk9IEJJVCgyMikKK307CisKK2VudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHsKKwlBVEg5S19DQVBfQ0lQSEVSID0gMCwKKwlBVEg5S19DQVBfVEtJUF9NSUMsCisJQVRIOUtfQ0FQX1RLSVBfU1BMSVQsCisJQVRIOUtfQ0FQX0RJVkVSU0lUWSwKKwlBVEg5S19DQVBfVFhQT1csCisJQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsCisJQVRIOUtfQ0FQX0RTCit9OworCitzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIHsKKwl1MzIgaHdfY2FwczsgLyogQVRIOUtfSFdfQ0FQXyogZnJvbSBhdGg5a19od19jYXBzICovCisJREVDTEFSRV9CSVRNQVAod2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsgLyogQVRIOUtfTU9ERV8qICovCisJdTE2IHRvdGFsX3F1ZXVlczsKKwl1MTYga2V5Y2FjaGVfc2l6ZTsKKwl1MTYgbG93XzVnaHpfY2hhbiwgaGlnaF81Z2h6X2NoYW47CisJdTE2IGxvd18yZ2h6X2NoYW4sIGhpZ2hfMmdoel9jaGFuOworCXUxNiBudW1fbXJfcmV0cmllczsKKwl1MTYgcnRzX2FnZ3JfbGltaXQ7CisJdTggdHhfY2hhaW5tYXNrOworCXU4IHJ4X2NoYWlubWFzazsKKwl1MTYgdHhfdHJpZ2xldmVsX21heDsKKwl1MTYgcmVnX2NhcDsKKwl1OCBudW1fZ3Bpb19waW5zOworCXU4IG51bV9hbnRjZmdfMmdoejsKKwl1OCBudW1fYW50Y2ZnXzVnaHo7Cit9OworCitzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyB7CisJaW50IGRtYV9iZWFjb25fcmVzcG9uc2VfdGltZTsKKwlpbnQgc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWU7CisJaW50IGFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmOworCWludCBhY2tfNm1iOworCWludCBjd21faWdub3JlX2V4dGNjYTsKKwl1OCBwY2llX3Bvd2Vyc2F2ZV9lbmFibGU7CisJdTggcGNpZV9sMXNrcF9lbmFibGU7CisJdTggcGNpZV9jbG9ja19yZXE7CisJdTMyIHBjaWVfd2FlbjsKKwlpbnQgcGNpZV9wb3dlcl9yZXNldDsKKwl1OCBwY2llX3Jlc3RvcmU7CisJdTggYW5hbG9nX3NoaWZ0cmVnOworCXU4IGh0X2VuYWJsZTsKKwl1MzIgb2ZkbV90cmlnX2xvdzsKKwl1MzIgb2ZkbV90cmlnX2hpZ2g7CisJdTMyIGNja190cmlnX2hpZ2g7CisJdTMyIGNja190cmlnX2xvdzsKKwl1MzIgZW5hYmxlX2FuaTsKKwl1OCBub2lzZV9pbW11bml0eV9sZXZlbDsKKwl1MzIgb2ZkbV93ZWFrc2lnbmFsX2RldDsKKwl1MzIgY2NrX3dlYWtzaWduYWxfdGhyOworCXU4IHNwdXJfaW1tdW5pdHlfbGV2ZWw7CisJdTggZmlyc3RlcF9sZXZlbDsKKwlpbnQ4X3QgcnNzaV90aHJfaGlnaDsKKwlpbnQ4X3QgcnNzaV90aHJfbG93OworCXUxNiBkaXZlcnNpdHlfY29udHJvbDsKKwl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwlpbnQgc2VyaWFsaXplX3JlZ21vZGU7CisJaW50IGludHJfbWl0aWdhdGlvbjsKKyNkZWZpbmUgU1BVUl9ESVNBQkxFICAgICAgICAJMAorI2RlZmluZSBTUFVSX0VOQUJMRV9JT0NUTCAgIAkxCisjZGVmaW5lIFNQVVJfRU5BQkxFX0VFUFJPTSAgCTIKKyNkZWZpbmUgQVJfRUVQUk9NX01PREFMX1NQVVJTICAgNQorI2RlZmluZSBBUl9TUFVSXzU0MTNfMSAgICAgIAkxNjQwCisjZGVmaW5lIEFSX1NQVVJfNTQxM18yICAgICAgCTEyMDAKKyNkZWZpbmUgQVJfTk9fU1BVUiAgICAgIAkweDgwMDAKKyNkZWZpbmUgQVJfQkFTRV9GUkVRXzJHSFogICAJMjMwMAorI2RlZmluZSBBUl9CQVNFX0ZSRVFfNUdIWiAgIAk0OTAwCisjZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDQwIDE5CisjZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDIwIDEwCisJaW50IHNwdXJtb2RlOworCXUxNiBzcHVyY2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXVsyXTsKK307CisKK2VudW0gYXRoOWtfaW50IHsKKwlBVEg5S19JTlRfUlggPSAweDAwMDAwMDAxLAorCUFUSDlLX0lOVF9SWERFU0MgPSAweDAwMDAwMDAyLAorCUFUSDlLX0lOVF9SWE5PRlJNID0gMHgwMDAwMDAwOCwKKwlBVEg5S19JTlRfUlhFT0wgPSAweDAwMDAwMDEwLAorCUFUSDlLX0lOVF9SWE9STiA9IDB4MDAwMDAwMjAsCisJQVRIOUtfSU5UX1RYID0gMHgwMDAwMDA0MCwKKwlBVEg5S19JTlRfVFhERVNDID0gMHgwMDAwMDA4MCwKKwlBVEg5S19JTlRfVElNX1RJTUVSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAorCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAorCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCisJQVRIOUtfSU5UX1JYS0NNID0gMHgwMDAwODAwMCwKKwlBVEg5S19JTlRfU1dCQSA9IDB4MDAwMTAwMDAsCisJQVRIOUtfSU5UX0JNSVNTID0gMHgwMDA0MDAwMCwKKwlBVEg5S19JTlRfQk5SID0gMHgwMDEwMDAwMCwKKwlBVEg5S19JTlRfVElNID0gMHgwMDIwMDAwMCwKKwlBVEg5S19JTlRfRFRJTSA9IDB4MDA0MDAwMDAsCisJQVRIOUtfSU5UX0RUSU1TWU5DID0gMHgwMDgwMDAwMCwKKwlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCisJQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCisJQVRIOUtfSU5UX1RTRk9PUiA9IDB4MDQwMDAwMDAsCisJQVRIOUtfSU5UX0NTVCA9IDB4MTAwMDAwMDAsCisJQVRIOUtfSU5UX0dUVCA9IDB4MjAwMDAwMDAsCisJQVRIOUtfSU5UX0ZBVEFMID0gMHg0MDAwMDAwMCwKKwlBVEg5S19JTlRfR0xPQkFMID0gMHg4MDAwMDAwMCwKKwlBVEg5S19JTlRfQk1JU0MgPSBBVEg5S19JTlRfVElNIHwKKwkJQVRIOUtfSU5UX0RUSU0gfAorCQlBVEg5S19JTlRfRFRJTVNZTkMgfAorCQlBVEg5S19JTlRfVFNGT09SIHwKKwkJQVRIOUtfSU5UX0NBQkVORCwKKwlBVEg5S19JTlRfQ09NTU9OID0gQVRIOUtfSU5UX1JYTk9GUk0gfAorCQlBVEg5S19JTlRfUlhERVNDIHwKKwkJQVRIOUtfSU5UX1JYRU9MIHwKKwkJQVRIOUtfSU5UX1JYT1JOIHwKKwkJQVRIOUtfSU5UX1RYVVJOIHwKKwkJQVRIOUtfSU5UX1RYREVTQyB8CisJCUFUSDlLX0lOVF9NSUIgfAorCQlBVEg5S19JTlRfUlhQSFkgfAorCQlBVEg5S19JTlRfUlhLQ00gfAorCQlBVEg5S19JTlRfU1dCQSB8CisJCUFUSDlLX0lOVF9CTUlTUyB8CisJCUFUSDlLX0lOVF9HUElPLAorCUFUSDlLX0lOVF9OT0NBUkQgPSAweGZmZmZmZmZmCit9OworCisjZGVmaW5lIENIQU5ORUxfQ1dfSU5UICAgIDB4MDAwMDIKKyNkZWZpbmUgQ0hBTk5FTF9DQ0sgICAgICAgMHgwMDAyMAorI2RlZmluZSBDSEFOTkVMX09GRE0gICAgICAweDAwMDQwCisjZGVmaW5lIENIQU5ORUxfMkdIWiAgICAgIDB4MDAwODAKKyNkZWZpbmUgQ0hBTk5FTF81R0haICAgICAgMHgwMDEwMAorI2RlZmluZSBDSEFOTkVMX1BBU1NJVkUgICAweDAwMjAwCisjZGVmaW5lIENIQU5ORUxfRFlOICAgICAgIDB4MDA0MDAKKyNkZWZpbmUgQ0hBTk5FTF9IQUxGICAgICAgMHgwNDAwMAorI2RlZmluZSBDSEFOTkVMX1FVQVJURVIgICAweDA4MDAwCisjZGVmaW5lIENIQU5ORUxfSFQyMCAgICAgIDB4MTAwMDAKKyNkZWZpbmUgQ0hBTk5FTF9IVDQwUExVUyAgMHgyMDAwMAorI2RlZmluZSBDSEFOTkVMX0hUNDBNSU5VUyAweDQwMDAwCisKKyNkZWZpbmUgQ0hBTk5FTF9JTlRFUkZFUkVOQ0UgICAgMHgwMQorI2RlZmluZSBDSEFOTkVMX0RGUyAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENIQU5ORUxfNE1TX0xJTUlUICAgICAgIDB4MDQKKyNkZWZpbmUgQ0hBTk5FTF9ERlNfQ0xFQVIgICAgICAgMHgwOAorI2RlZmluZSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DICAweDEwCisjZGVmaW5lIENIQU5ORUxfUEVSXzExRF9BREhPQyAgIDB4MjAKKworI2RlZmluZSBDSEFOTkVMX0EgICAgICAgICAgIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9PRkRNKQorI2RlZmluZSBDSEFOTkVMX0IgICAgICAgICAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9DQ0spCisjZGVmaW5lIENIQU5ORUxfRyAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE0pCisjZGVmaW5lIENIQU5ORUxfR19IVDIwICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfQV9IVDIwICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfR19IVDQwUExVUyAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBQTFVTKQorI2RlZmluZSBDSEFOTkVMX0dfSFQ0ME1JTlVTIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCisjZGVmaW5lIENIQU5ORUxfQV9IVDQwUExVUyAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBQTFVTKQorI2RlZmluZSBDSEFOTkVMX0FfSFQ0ME1JTlVTIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCisjZGVmaW5lIENIQU5ORUxfQUxMCQkJCVwKKwkoQ0hBTk5FTF9PRkRNfAkJCQlcCisJIENIQU5ORUxfQ0NLfAkJCQlcCisJIENIQU5ORUxfMkdIWiB8CQkJCVwKKwkgQ0hBTk5FTF81R0haIHwJCQkJXAorCSBDSEFOTkVMX0hUMjAgfAkJCQlcCisJIENIQU5ORUxfSFQ0MFBMVVMgfAkJCVwKKwkgQ0hBTk5FTF9IVDQwTUlOVVMpCisKK3N0cnVjdCBhdGg5a19jaGFubmVsIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJdTE2IGNoYW5uZWw7CisJdTMyIGNoYW5uZWxGbGFnczsKKwl1MzIgY2hhbm1vZGU7CisJaW50MzJfdCBDYWxWYWxpZDsKKwlib29sIG9uZVRpbWVDYWxzRG9uZTsKKwlpbnQ4X3QgaUNvZmY7CisJaW50OF90IHFDb2ZmOworCWludDE2X3QgcmF3Tm9pc2VGbG9vcjsKK307CisKKyNkZWZpbmUgSVNfQ0hBTl9BKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0EpID09IENIQU5ORUxfQSkgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUMjApID09IENIQU5ORUxfQV9IVDIwKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0MFBMVVMpID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fRyhfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgKENIQU5ORUxfRykpID09IENIQU5ORUxfRykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUMjApID09IENIQU5ORUxfR19IVDIwKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0MFBMVVMpID09IENIQU5ORUxfR19IVDQwUExVUykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fT0ZETShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX09GRE0pICE9IDApCisjZGVmaW5lIElTX0NIQU5fNUdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApCisjZGVmaW5lIElTX0NIQU5fMkdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzJHSFopICE9IDApCisjZGVmaW5lIElTX0NIQU5fUEFTU0lWRShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpICE9IDApCisjZGVmaW5lIElTX0NIQU5fSEFMRl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfSEFMRikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9RVUFSVEVSKSAhPSAwKQorI2RlZmluZSBJU19DSEFOX0FfNU1IWl9TUEFDRUQoX2MpCQkJXAorCSgoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfNUdIWikgIT0gMCkgJiYJXAorCSAoKChfYyktPmNoYW5uZWwgJSAyMCkgIT0gMCkgJiYJCQlcCisJICgoKF9jKS0+Y2hhbm5lbCAlIDEwKSAhPSAwKSkKKworLyogVGhlc2UgbWFjcm9zIGNoZWNrIGNoYW5tb2RlIGFuZCBub3QgY2hhbm5lbEZsYWdzICovCisjZGVmaW5lIElTX0NIQU5fQihfYykgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQikKKyNkZWZpbmUgSVNfQ0hBTl9IVDIwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDIwKSB8fAlcCisJCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQyMCkpCisjZGVmaW5lIElTX0NIQU5fSFQ0MChfYykgKCgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fSFQoX2MpIChJU19DSEFOX0hUMjAoKF9jKSkgfHwgSVNfQ0hBTl9IVDQwKChfYykpKQorCitlbnVtIGF0aDlrX3Bvd2VyX21vZGUgeworCUFUSDlLX1BNX0FXQUtFID0gMCwKKwlBVEg5S19QTV9GVUxMX1NMRUVQLAorCUFUSDlLX1BNX05FVFdPUktfU0xFRVAsCisJQVRIOUtfUE1fVU5ERUZJTkVECit9OworCitlbnVtIGF0aDlrX2FudF9zZXR0aW5nIHsKKwlBVEg5S19BTlRfVkFSSUFCTEUgPSAwLAorCUFUSDlLX0FOVF9GSVhFRF9BLAorCUFUSDlLX0FOVF9GSVhFRF9CCit9OworCitlbnVtIGF0aDlrX3RwX3NjYWxlIHsKKwlBVEg5S19UUF9TQ0FMRV9NQVggPSAwLAorCUFUSDlLX1RQX1NDQUxFXzUwLAorCUFUSDlLX1RQX1NDQUxFXzI1LAorCUFUSDlLX1RQX1NDQUxFXzEyLAorCUFUSDlLX1RQX1NDQUxFX01JTgorfTsKKworZW51bSBzZXJfcmVnX21vZGUgeworCVNFUl9SRUdfTU9ERV9PRkYgPSAwLAorCVNFUl9SRUdfTU9ERV9PTiA9IDEsCisJU0VSX1JFR19NT0RFX0FVVE8gPSAyLAorfTsKKworc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSB7CisJdTMyIGJzX25leHR0YnR0OworCXUzMiBic19uZXh0ZHRpbTsKKwl1MzIgYnNfaW50dmFsOworI2RlZmluZSBBVEg5S19CRUFDT05fUEVSSU9EICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVRIOUtfQkVBQ09OX0VOQSAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBVEg5S19UU0ZPT1JfVEhSRVNIT0xEICAgIDB4MDAwMDQyNDAgLyogMTZrIHVzICovCisJdTMyIGJzX2R0aW1wZXJpb2Q7CisJdTE2IGJzX2NmcHBlcmlvZDsKKwl1MTYgYnNfY2ZwbWF4ZHVyYXRpb247CisJdTMyIGJzX2NmcG5leHQ7CisJdTE2IGJzX3RpbW9mZnNldDsKKwl1MTYgYnNfYm1pc3N0aHJlc2hvbGQ7CisJdTMyIGJzX3NsZWVwZHVyYXRpb247CisJdTMyIGJzX3RzZm9vcl90aHJlc2hvbGQ7Cit9OworCitzdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKKwl1MTYgc3ludGhfY2VudGVyOworCXUxNiBjdGxfY2VudGVyOworCXUxNiBleHRfY2VudGVyOworfTsKKworZW51bSB7CisJQVRIOUtfUkVTRVRfUE9XRVJfT04sCisJQVRIOUtfUkVTRVRfV0FSTSwKKwlBVEg5S19SRVNFVF9DT0xELAorfTsKKworc3RydWN0IGF0aDlrX2h3X3ZlcnNpb24geworCXUzMiBtYWdpYzsKKwl1MTYgZGV2aWQ7CisJdTE2IHN1YnZlbmRvcmlkOworCXUzMiBtYWNWZXJzaW9uOworCXUxNiBtYWNSZXY7CisJdTE2IHBoeVJldjsKKwl1MTYgYW5hbG9nNUdoelJldjsKKwl1MTYgYW5hbG9nMkdoelJldjsKK307CisKK3N0cnVjdCBhdGhfaHcgeworCXN0cnVjdCBhdGhfc29mdGMgKmFoX3NjOworCXN0cnVjdCBhdGg5a19od192ZXJzaW9uIGh3X3ZlcnNpb247CisJc3RydWN0IGF0aDlrX29wc19jb25maWcgY29uZmlnOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgY2FwczsKKwlzdHJ1Y3QgYXRoOWtfcmVndWxhdG9yeSByZWd1bGF0b3J5OworCXN0cnVjdCBhdGg5a19jaGFubmVsIGNoYW5uZWxzWzM4XTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY3VyY2hhbjsKKworCXVuaW9uIHsKKwkJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmIGRlZjsKKwkJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgbWFwNGs7CisJfSBlZXByb207CisJY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgKmVlcF9vcHM7CisJZW51bSBhdGg5a19lZXBfbWFwIGVlcF9tYXA7CisKKwlib29sIHN3X21nbXRfY3J5cHRvOworCWJvb2wgaXNfcGNpZXhwcmVzczsKKwl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKKwl1MTYgdHhfdHJpZ19sZXZlbDsKKwl1MTYgcmZzaWxlbnQ7CisJdTMyIHJma2lsbF9ncGlvOworCXUzMiByZmtpbGxfcG9sYXJpdHk7CisJdTMyIGJ0YWN0aXZlX2dwaW87CisJdTMyIHdsYW5hY3RpdmVfZ3BpbzsKKwl1MzIgYWhfZmxhZ3M7CisKKwllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKKwllbnVtIGF0aDlrX3Bvd2VyX21vZGUgcG93ZXJfbW9kZTsKKwllbnVtIGF0aDlrX3Bvd2VyX21vZGUgcmVzdG9yZV9tb2RlOworCisJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107CisJc3RydWN0IGFyNTQxNlN0YXRzIHN0YXRzOworCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKKworCWludDE2X3QgY3VyY2hhbl9yYWRfaW5kZXg7CisJdTMyIG1hc2tfcmVnOworCXUzMiB0eG9rX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGVycl9pbnRlcnJ1cHRfbWFzazsKKwl1MzIgdHhkZXNjX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGVvbF9pbnRlcnJ1cHRfbWFzazsKKwl1MzIgdHh1cm5faW50ZXJydXB0X21hc2s7CisJYm9vbCBjaGlwX2Z1bGxzbGVlcDsKKwl1MzIgYXRpbV93aW5kb3c7CisJdTE2IGFudGVubmFfc3dpdGNoX3N3YXA7CisJZW51bSBhdGg5a19hbnRfc2V0dGluZyBkaXZlcnNpdHlfY29udHJvbDsKKworCS8qIENhbGlicmF0aW9uICovCisJZW51bSBoYWxfY2FsX3R5cGVzIHN1cHBfY2FsczsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGlxX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCBhZGNnYWluX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCBhZGNkY19jYWxpbml0ZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2RjX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsX2xpc3Q7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsX2xpc3RfbGFzdDsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdF9jdXJyOworI2RlZmluZSB0b3RhbFBvd2VyTWVhc0kgbWVhczAudW5zaWduCisjZGVmaW5lIHRvdGFsUG93ZXJNZWFzUSBtZWFzMS51bnNpZ24KKyNkZWZpbmUgdG90YWxJcUNvcnJNZWFzIG1lYXMyLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNJT2RkUGhhc2UgIG1lYXMwLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY0lFdmVuUGhhc2UgbWVhczEudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjUU9kZFBoYXNlICBtZWFzMi51bnNpZ24KKyNkZWZpbmUgdG90YWxBZGNRRXZlblBoYXNlIG1lYXMzLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlICBtZWFzMC5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlIG1lYXMxLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZSAgbWVhczIuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZSBtZWFzMy5zaWduCisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMwOworCXVuaW9uIHsKKwkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJfSBtZWFzMTsKKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczI7CisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMzOworCXUxNiBjYWxfc2FtcGxlczsKKworCXUzMiBzdGFfaWQxX2RlZmF1bHRzOworCXUzMiBtaXNjX21vZGU7CisJZW51bSB7CisJCUFVVE9fMzJLSFosCisJCVVTRV8zMktIWiwKKwkJRE9OVF9VU0VfMzJLSFosCisJfSBlbmFibGVfMzJrSHpfY2xvY2s7CisKKwkvKiBSRiAqLworCXUzMiAqYW5hbG9nQmFuazBEYXRhOworCXUzMiAqYW5hbG9nQmFuazFEYXRhOworCXUzMiAqYW5hbG9nQmFuazJEYXRhOworCXUzMiAqYW5hbG9nQmFuazNEYXRhOworCXUzMiAqYW5hbG9nQmFuazZEYXRhOworCXUzMiAqYW5hbG9nQmFuazZUUENEYXRhOworCXUzMiAqYW5hbG9nQmFuazdEYXRhOworCXUzMiAqYWRkYWM1NDE2XzIxOworCXUzMiAqYmFuazZUZW1wOworCisJaW50MTZfdCB0eHBvd2VyX2luZGV4b2Zmc2V0OworCXUzMiBiZWFjb25faW50ZXJ2YWw7CisJdTMyIHNsb3R0aW1lOworCXUzMiBhY2t0aW1lb3V0OworCXUzMiBjdHN0aW1lb3V0OworCXUzMiBnbG9iYWx0eHRpbWVvdXQ7CisJdTggZ2JlYWNvbl9yYXRlOworCisJLyogQU5JICovCisJdTMyIHByb2NfcGh5ZXJyOworCWJvb2wgaGFzX2h3X3BoeWNvdW50ZXJzOworCXUzMiBhbmlwZXJpb2Q7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICpjdXJhbmk7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlIGFuaVsyNTVdOworCWludCB0b3RhbFNpemVEZXNpcmVkWzVdOworCWludCBjb2Fyc2VfaGlnaFs1XTsKKwlpbnQgY29hcnNlX2xvd1s1XTsKKwlpbnQgZmlycHdyWzVdOworCWVudW0gYXRoOWtfYW5pX2NtZCBhbmlfZnVuY3Rpb247CisKKwl1MzIgaW50cl90eHFzOworCWJvb2wgaW50cl9taXRpZ2F0aW9uOworCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmc7CisJdTggdHhjaGFpbm1hc2s7CisJdTggcnhjaGFpbm1hc2s7CisKKwl1MzIgb3JpZ2luYWxHYWluWzIyXTsKKwlpbnQgaW5pdFBEQURDOworCWludCBQREFEQ2RlbHRhOworCisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlDb21tb247CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmswOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCQl9SZkdhaW47CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmsxOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rMjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbms2OworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rNlRQQzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazc7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUFkZGFjOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlQY2llU2VyZGVzOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc0FkZGl0aW9uYWw7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzUnhHYWluOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc1R4R2FpbjsKK307CisKKy8qIEF0dGFjaCwgRGV0YWNoLCBSZXNldCAqLworY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpOwordm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpOwordm9pZCBhdGg5a19od19yZmRldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7CitpbnQgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkgICBib29sIGJDaGFubmVsQ2hhbmdlKTsKK2Jvb2wgYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCisJCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKK2Jvb2wgYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKKwkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyIHNldHRpbmcsIGludCAqc3RhdHVzKTsKKworLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KK2Jvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSk7Citib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKTsKK2Jvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksCisJCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19rZXl2YWwgKmssCisJCQkJIGNvbnN0IHU4ICptYWMpOworYm9vbCBhdGg5a19od19rZXlpc3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpOworCisvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KK3ZvaWQgYXRoOWtfaHdfY2ZnX2dwaW9faW5wdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvKTsKK3UzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8pOwordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKKwkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpOwordm9pZCBhdGg5a19od19zZXRfZ3BpbyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpOworI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCk7CiAjZW5kaWYKK3UzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGFudGVubmEpOworYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCisJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywgdTggKnJ4X2NoYWlubWFzaywKKwkJCSAgICAgICB1OCAqYW50ZW5uYV9jZmdkKTsKIAotI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKSAgICAgKCgoX3IpICYgMHgzZikgPDwgKF9zKSkKKy8qIEdlbmVyYWwgT3BlcmF0aW9uICovCitib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCk7Cit1MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKK2Jvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBmbGFncywgdTE2ICpsb3csIHUxNiAqaGlnaCk7Cit1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKKwkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwgYm9vbCBzaG9ydFByZWFtYmxlKTsKK3ZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgc3RydWN0IGNoYW5fY2VudGVycyAqY2VudGVycyk7Cit1MzIgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpOworYm9vbCBhdGg5a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpOwordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpOwordm9pZCBhdGg5a19od19zZXRvcG1vZGUoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit1NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCwgdTY0IHRzZjY0KTsKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHNldHRpbmcpOworYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19odF9tYWNtb2RlIG1vZGUpOwordm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbmV4dF9iZWFjb24sIHUzMiBiZWFjb25fcGVyaW9kKTsKK3ZvaWQgYXRoOWtfaHdfc2V0X3N0YV9iZWFjb25fdGltZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlICpicyk7Citib29sIGF0aDlrX2h3X3NldHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwordm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9odyAqYWgsIGludCByZXN0b3JlKTsKIAotI2RlZmluZSBBVEg5S19BTlRFTk5BMF9DSEFJTk1BU0sgICAgICAgIDB4MQotI2RlZmluZSBBVEg5S19BTlRFTk5BMV9DSEFJTk1BU0sgICAgICAgIDB4MgorLyogSW50ZXJydXB0IEhhbmRsaW5nICovCitib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZ2V0aXNyKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCAqbWFza2VkKTsKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X2ludHJnZXQoc3RydWN0IGF0aF9odyAqYWgpOworZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50IGludHMpOwogCi0jZGVmaW5lIEFUSDlLX05VTV9ETUFfREVCVUdfUkVHUyAgICAgICAgOAotI2RlZmluZSBBVEg5S19OVU1fUVVFVUVTICAgICAgICAgICAgICAgIDEwCi0KLSNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICA0Ci0jZGVmaW5lIEhBTF9TUFVSX0lNTVVORV9NQVggICAgICAgICAgICAgNwotI2RlZmluZSBIQUxfRklSU1RfU1RFUF9NQVggICAgICAgICAgICAgIDIKLQotI2RlZmluZSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0ggICAgICAgICAgNTAwCi0jZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XICAgICAgICAgICAyMDAKLSNkZWZpbmUgQVRIOUtfQU5JX0NDS19UUklHX0hJR0ggICAgICAgICAgIDIwMAotI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfTE9XICAgICAgICAgICAgMTAwCi0jZGVmaW5lIEFUSDlLX0FOSV9OT0lTRV9JTU1VTkVfTFZMICAgICAgICA0Ci0jZGVmaW5lIEFUSDlLX0FOSV9VU0VfT0ZETV9XRUFLX1NJRyAgICAgICB0cnVlCi0jZGVmaW5lIEFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSICAgICAgICBmYWxzZQotI2RlZmluZSBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMICAgICAgICAgNwotI2RlZmluZSBBVEg5S19BTklfRklSU1RFUF9MVkwgICAgICAgICAgICAgMAotI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfSElHSCAgICAgICAgICAgNDAKLSNkZWZpbmUgQVRIOUtfQU5JX1JTU0lfVEhSX0xPVyAgICAgICAgICAgIDcKLSNkZWZpbmUgQVRIOUtfQU5JX1BFUklPRCAgICAgICAgICAgICAgICAgIDEwMAotCi0jZGVmaW5lIEFSX0dQSU9EX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMUZGRgotI2RlZmluZSBBUl9HUElPX0JJVChfZ3BpbykgICAgICAgICAgICAgICgxIDw8IChfZ3BpbykpCi0KLSNkZWZpbmUgSEFMX0VQX1JORCh4LCBtdWwpIFwKLQkoKCgoeCklKG11bCkpID49ICgobXVsKS8yKSkgPyAoKHgpICsgKChtdWwpIC0gMSkpIC8gKG11bCkgOiAoeCkvKG11bCkpCi0jZGVmaW5lIEJFQUNPTl9SU1NJKGFocCkgXAotCUhBTF9FUF9STkQoYWhwLT5haF9zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpLCBcCi0JCUFUSDlLX1JTU0lfRVBfTVVMVElQTElFUikKLQotI2RlZmluZSBhaF9taWJTdGF0cyAgICAgYWhfc3RhdHMuYXN0X21pYnN0YXRzCi0KLSNkZWZpbmUgQUhfVElNRU9VVCAgICAgICAgIDEwMDAwMAotI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgIDEwCi0KLSNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAxMjgKLSNkZWZpbmUgUE9XRVJfVVBfVElNRSAgICAyMDAwMDAKLQotI2RlZmluZSBFWFRfQURESVRJVkUgKDB4ODAwMCkKLSNkZWZpbmUgQ1RMXzExQV9FWFQgKENUTF8xMUEgfCBFWFRfQURESVRJVkUpCi0jZGVmaW5lIENUTF8xMUdfRVhUIChDVExfMTFHIHwgRVhUX0FERElUSVZFKQotI2RlZmluZSBDVExfMTFCX0VYVCAoQ1RMXzExQiB8IEVYVF9BRERJVElWRSkKLQotI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MCAyCi0jZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwIDMKLSNkZWZpbmUgU1BVUl9SU1NJX1RIUkVTSCA0MAotCi0jZGVmaW5lIFRVX1RPX1VTRUMoX3R1KSAgICAgICAgICgoX3R1KSA8PCAxMCkKLQotI2RlZmluZSBDQUJfVElNRU9VVF9WQUwgICAgICAgICAxMAotI2RlZmluZSBCRUFDT05fVElNRU9VVF9WQUwgICAgICAxMAotI2RlZmluZSBNSU5fQkVBQ09OX1RJTUVPVVRfVkFMICAgMQotI2RlZmluZSBTTEVFUF9TTE9QICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIENDS19TSUZTX1RJTUUgICAgICAgIDEwCi0jZGVmaW5lIENDS19QUkVBTUJMRV9CSVRTICAgMTQ0Ci0jZGVmaW5lIENDS19QTENQX0JJVFMgICAgICAgIDQ4Ci0KLSNkZWZpbmUgT0ZETV9TSUZTX1RJTUUgICAgICAgIDE2Ci0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRSAgICAyMAotI2RlZmluZSBPRkRNX1BMQ1BfQklUUyAgICAgICAgMjIKLSNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRSAgICAgIDQKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRV9IQUxGICAgICAzMgotI2RlZmluZSBPRkRNX1BSRUFNQkxFX1RJTUVfSEFMRiA0MAotI2RlZmluZSBPRkRNX1BMQ1BfQklUU19IQUxGICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX0hBTEYgICA4Ci0KLSNkZWZpbmUgT0ZETV9TSUZTX1RJTUVfUVVBUlRFUiAgICAgIDY0Ci0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9RVUFSVEVSICA4MAotI2RlZmluZSBPRkRNX1BMQ1BfQklUU19RVUFSVEVSICAgICAgMjIKLSNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSICAgIDE2Ci0KLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmgKaW5kZXggZjNjZmExNi4uZTJmMGEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsOCArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0vKiBBUjU0MTYgdG8gRm93bCBhcjUxNDYuaW5pICovCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxMDBbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKQEAgLTc5LDcgKzc4LDcgQEAKICAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uXzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uW11bMl0gPSB7CiAgICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCiAgICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCkBAIC00NTcsMTIgKzQ1NiwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmswW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2Fpbl85MTAwW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtNTI5LDIxICs1MjgsMjEgQEAKICAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMSB9LAogICAgIHsgMHgwMDAwOThlYywgMHgwMDAwMDAwOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsyW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmszXzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNbXVszXSA9IHsKICAgICB7IDB4MDAwMDk4ZjAsIDB4MDE0MDAwMTgsIDB4MDFjMDAwMTggfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNltdWzNdID0gewogCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCkBAIC01ODAsNyArNTc5LDcgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNjE2LDEzICs2MTUsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rN1tdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkFkZGFjW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAzIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCkBAIC02NTksMTEgKzY1OCwxMCBAQAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5OGM0LCAgMHgwMDAwMDAwMCB9LAorICAgIHsweDAwMDA5OGNjLCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogYXI1NDE2IC0gaG93bCBhcjU0MTZfaG93bC5pbmkgKi8KLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTEwMFtdWzZdID0gewogICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LApAQCAtNzM3LDcgKzczNSw3IEBACiAgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25fOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAogICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LApAQCAtMTExMSwxMiArMTEwOSwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5fOTEwMFtdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtMTE4MywyMSArMTE4MSwyMSBAQAogICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMV85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDAyMTA4NDIxfSwKICAgICB7IDB4MDAwMDk4ZWMsIDB4MDAwMDAwMDh9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3fSwKICAgICB7IDB4MDAwMDk4ZTAsIDB4MDAwMDA0MjB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM185MTAwW11bM10gPSB7CiAgICAgeyAweDAwMDA5OGYwLCAweDAxNDAwMDE4LCAweDAxYzAwMDE4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2W11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKIAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtMTIzNSw3ICsxMjMzLDcgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ185MTAwW11bM10gPSB7CiAKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTEyNzIsMTMgKzEyNzAsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY1tdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCkBAIC0xMzEzLDcgKzEzMTEsNiBAQAogICAgIHsweDAwMDA5OGNjLCAweDAwMDAwMDAwIH0sCiB9OwogCi0vKiBBUjU0MTYgOTE2MCBTb3dsIGFyNTQxNl9zb3dsLmluaSAqLwogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZNb2Rlc185MTYwW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCkBAIC0yNTQ5LDYgKzI1NDYsOCBAQAogICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAogICAgIHsgMHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAogICAgIHsgMHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSB9LAogICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAogICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAogICAgIHsgMHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LApAQCAtMjU4Nyw3ICsyNTg2LDYgQEAKICAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKICAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyNTAsIDB4MDAxZmYwMDAsIDB4MDAxZmYwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKICAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKICAgICB7IDB4MDAwMGEzZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDc4OTQsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAgfSwKQEAgLTI3MTksNyArMjcxNyw2IEBACiAgICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCiAgICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCiAgICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwIH0sCiAgICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCkBAIC0yNzM1LDcgKzI3MzIsNiBAQAogICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAogICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCB9LAogICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LApAQCAtMjgxNyw3ICsyODEzLDcgQEAKICAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKICAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKICAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKLSAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKKyAgICB7IDB4MDAwMGM5NjgsIDB4MDAwMDAzY2UgfSwKICAgICB7IDB4MDAwMDk5NzAsIDB4MTkwZmI1MTUgfSwKICAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKQEAgLTI5MDksMTYgKzI5MDUsMTIgQEAKICAgICB7IDB4MDAwMDc4MGMsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4MTAsIDB4NmQ4MDEzMDAgfSwKICAgICB7IDB4MDAwMDc4MTgsIDB4MDdlNDEwMDAgfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4MDAzOTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4OTI1OTI0ODAgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDUwMTIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NmQ4MDEzMDAgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDdlNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4MDAzOTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4OTI1OTI0ODAgfSwKICAgICB7IDB4MDAwMDc4NDgsIDB4MDAxMDAwMDAgfSwKICAgICB7IDB4MDAwMDc4NGMsIDB4NzczZjA1NjcgfSwKICAgICB7IDB4MDAwMDc4NTAsIDB4NTQyMTQ1MTQgfSwKQEAgLTI5NTQsNyArMjk0Niw2IEBACiAgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxODIxLCAweDAzNzIxODIxIH0sCiAgICAgeyAweDAwMDA5OTE0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwIH0sCiAgICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGRmYmMxMjEwLCAweGRmYmMxMjEwIH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4ME1vZGVzX2JhY2tvZmZfMjNkYl9yeGdhaW5fOTI4MF8yW11bNl0gPSB7CkBAIC0zMzY2LDIxICszMzU3LDI2IEBACiAgICAgeyAweDAwMDBhMzE4LCAweDAwMDE1MDRhLCAweDAwMDE1MDRhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhIH0sCiAgICAgeyAweDAwMDBhMzFjLCAweDAwMDE5MDRjLCAweDAwMDE5MDRjLCAweDAwMDFiMjExLCAweDAwMDFiMjExLCAweDAwMDFiMjExIH0sCiAgICAgeyAweDAwMDBhMzIwLCAweDAwMDFjMDRlLCAweDAwMDFjMDRlLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDIwMDkyLCAweDAwMDIwMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDI0MTBhLCAweDAwMDI0MTBhLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDI3MTBjLCAweDAwMDI3MTBjLCAweDAwMDI5ODExLCAweDAwMDI5ODExLCAweDAwMDI5ODExIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDJiMThiLCAweDAwMDJiMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDJlMWNjLCAweDAwMDJlMWNjLCAweDAwMDMwYTE0LCAweDAwMDMwYTE0LCAweDAwMDMwYTE0IH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDNkZThhLCAweDAwMDNkZThhLCAweDAwMDNkZThhIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1IH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRmZjU0LCAweDAwMDRmZjU0LCAweDAwMDRmZjU0IH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDUzZmQ1LCAweDAwMDUzZmQ1LCAweDAwMDUzZmQ1IH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDIxMDkyLCAweDAwMDIxMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDI1MTBhLCAweDAwMDI1MTBhLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDI5MTBjLCAweDAwMDI5MTBjLCAweDAwMDI5ODExLCAweDAwMDI5ODExLCAweDAwMDI5ODExIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDJjMThiLCAweDAwMDJjMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDJmMWNjLCAweDAwMDJmMWNjLCAweDAwMDMwYTE0LCAweDAwMDMwYTE0LCAweDAwMDMwYTE0IH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWViLCAweDAwMDMyMWViLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDNkZThhLCAweDAwMDNkZThhLCAweDAwMDNkZThhIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1IH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDRmZjU0LCAweDAwMDRmZjU0LCAweDAwMDRmZjU0IH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1IH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmIH0sCiAgICAgeyAweDAwMDA3ODM4LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmIH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwIH0sCisgICAgeyAweDAwMDA3ODQwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTllNjUyLCAweDBhMTllNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMjdjLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlIH0sCiB9OwogCkBAIC0zNDA5LDYgKzM0MDUsMTEgQEAKICAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIgfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYgfSwKICAgICB7IDB4MDAwMDc4MzgsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYgfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKICAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKIH07CiAKQEAgLTQxMjAsNiArNDEyMSw3IEBACiAgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCiB9OwogCisvKiBBUjkyODUgdjFfMiBQQ0kgUmVnaXN0ZXIgV3JpdGVzLiAgQ3JlYXRlZDogMDMvMDQvMDkgKi8KIHN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfOTI4NV8xXzJbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKQEAgLTQxMzUsMTEgKzQxMzcsMTEgQEAKICAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKICAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKICAgICB7IDB4MDAwMDk4NDAsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjAwMjAsIDB4MDM3MjAwMjAsIDB4MDM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDAwNTcsIDB4MDAwMDAwNTcsIDB4MDAwMDEwNTkgfSwKKyAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MjAsIDB4MDM3MjE2MjAsIDB4MDM3MjE2YTAgfSwKKyAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTkgfSwKICAgICB7IDB4MDAwMDk4NTAsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIgfSwKICAgICB7IDB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzOTYwNWUgfSwKKyAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNzYwNWUsIDB4MzEzNzYwNWUsIDB4MzEzOTYwNWUgfSwKICAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNThkMTgsIDB4MDAwNThkMTgsIDB4MDAwNThkMjAsIDB4MDAwNThkMjAsIDB4MDAwNThkMTggfSwKICAgICB7IDB4MDAwMDk4NjQsIDB4MDAwMGZlMDAsIDB4MDAwMGZlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKICAgICB7IDB4MDAwMDk4NjgsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAgfSwKQEAgLTQxNTQsMjkxICs0MTU2LDI3MiBAQAogICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAogICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAogICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NyB9LAotICAgIHsgMHgwMDAwOTljOCwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSB9LAogICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCB9LAogICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCB9LAogICAgIHsgMHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4NCwgMHgwMDA2ODA4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4OCwgMHgwMDA2ODA4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4YywgMHgwMDA2ODA4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwMCwgMHgwMDA2ODEwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwNCwgMHgwMDA2ODEwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwOCwgMHgwMDA2ODEwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwYywgMHgwMDA2ODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExNCwgMHgwMDA2ODExNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4MCwgMHgwMDA2ODE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4NCwgMHgwMDA2ODE4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4OCwgMHgwMDA2ODE4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4YywgMHgwMDA2ODE4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5MCwgMHgwMDA2ODE5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5NCwgMHgwMDA2ODE5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhMCwgMHgwMDA2ODFhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIwYywgMHgwMDA2ODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhOCwgMHgwMDA2ODFhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI4NCwgMHgwMDA2ODI4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI4OCwgMHgwMDA2ODI4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIyMCwgMHgwMDA2ODIyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI5MCwgMHgwMDA2ODI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwMCwgMHgwMDA2ODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwNCwgMHgwMDA2ODMwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwOCwgMHgwMDA2ODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwYywgMHgwMDA2ODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODM4MCwgMHgwMDA2ODM4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODM4NCwgMHgwMDA2ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwNCwgMHgwMDA2OGIwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwOCwgMHgwMDA2OGIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwOCwgMHgwMDA2OGIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwYywgMHgwMDA2OGIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4MCwgMHgwMDA2OGI4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4NCwgMHgwMDA2OGI4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4OCwgMHgwMDA2OGI4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4YywgMHgwMDA2OGI4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGI5MCwgMHgwMDBiOGI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4MCwgMHgwMDBiOGY4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4OCwgMHgwMDBiOGY4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4YywgMHgwMDBiOGY4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY5MCwgMHgwMDBiOGY5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMwYywgMHgwMDBiYjMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMxMCwgMHgwMDBiYjMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4NCwgMHgwMDBiYjM4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4OCwgMHgwMDBiYjM4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMyNCwgMHgwMDBiYjMyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjcwNCwgMHgwMDBiYjcwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTZhNCwgMHgwMDBmOTZhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTZhOCwgMHgwMDBmOTZhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMCwgMHgwMDBmOTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNCwgMHgwMDBmOTcxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyMCwgMHgwMDBmOTcyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyNCwgMHgwMDBmOTcyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyOCwgMHgwMDBmOTcyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyYywgMHgwMDBmOTcyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTdhMCwgMHgwMDBmOTdhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTdhNCwgMHgwMDBmOTdhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOCwgMHgwMDBmYjdhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMCwgMHgwMDBmYjdiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNCwgMHgwMDBmYjdiNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOCwgMHgwMDBmYjdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNSwgMHgwMDBmYjdhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOSwgMHgwMDBmYjdhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhZCwgMHgwMDBmYjdhZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMSwgMHgwMDBmYjdiMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNSwgMHgwMDBmYjdiNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOSwgMHgwMDBmYjdiOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNSwgMHgwMDBmYjdjNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjOSwgMHgwMDBmYjdjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMSwgMHgwMDBmYjdkMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNSwgMHgwMDBmYjdkNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkOSwgMHgwMDBmYjdkOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNiwgMHgwMDBmYjdjNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYSwgMHgwMDBmYjdjYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZSwgMHgwMDBmYjdjZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMiwgMHgwMDBmYjdkMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNiwgMHgwMDBmYjdkNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMywgMHgwMDBmYjdjMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNywgMHgwMDBmYjdjNywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYiwgMHgwMDBmYjdjYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZiwgMHgwMDBmYjdjZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNywgMHgwMDBmYjdkNywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4MCwgMHgwMDA2ODA4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4NCwgMHgwMDA2ODA4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4OCwgMHgwMDA2ODA4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4YywgMHgwMDA2ODA4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwMCwgMHgwMDA2ODEwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwNCwgMHgwMDA2ODEwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwOCwgMHgwMDA2ODEwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwYywgMHgwMDA2ODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4MCwgMHgwMDA2ODE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4NCwgMHgwMDA2ODE4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4OCwgMHgwMDA2ODE4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4YywgMHgwMDA2ODE4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5MCwgMHgwMDA2ODE5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5NCwgMHgwMDA2ODE5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhMCwgMHgwMDA2ODFhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIwYywgMHgwMDA2ODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhOCwgMHgwMDA2ODFhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhYywgMHgwMDA2ODFhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIxYywgMHgwMDA2ODIxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIyNCwgMHgwMDA2ODIyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI5MCwgMHgwMDA2ODI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwMCwgMHgwMDA2ODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwOCwgMHgwMDA2ODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwYywgMHgwMDA2ODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMxMCwgMHgwMDA2ODMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4OCwgMHgwMDA2ODc4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4YywgMHgwMDA2ODc4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5MCwgMHgwMDA2ODc5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5NCwgMHgwMDA2ODc5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5OCwgMHgwMDA2ODc5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5YywgMHgwMDA2ODc5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4OSwgMHgwMDA2OGI4OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4ZCwgMHgwMDA2OGI4ZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5MSwgMHgwMDA2OGI5MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5NSwgMHgwMDA2OGI5NSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5OSwgMHgwMDA2OGI5OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhNSwgMHgwMDA2OGJhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhOSwgMHgwMDA2OGJhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhZCwgMHgwMDA2OGJhZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGIwYywgMHgwMDBiOGIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGYxMCwgMHgwMDBiOGYxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGYxNCwgMHgwMDBiOGYxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4OCwgMHgwMDBiOGY4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4MCwgMHgwMDBiYjM4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4NCwgMHgwMDBiYjM4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4OCwgMHgwMDBiYjM4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4YywgMHgwMDBiYjM4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM5NCwgMHgwMDBiYjM5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjc5OCwgMHgwMDBiYjc5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwYywgMHgwMDBmOTcwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMCwgMHgwMDBmOTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNCwgMHgwMDBmOTcxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxOCwgMHgwMDBmOTcxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwNSwgMHgwMDBmOTcwNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwOSwgMHgwMDBmOTcwOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwZCwgMHgwMDBmOTcwZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMSwgMHgwMDBmOTcxMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNSwgMHgwMDBmOTcxNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxOSwgMHgwMDBmOTcxOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNCwgMHgwMDBmYjdhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOCwgMHgwMDBmYjdhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhYywgMHgwMDBmYjdhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhYywgMHgwMDBmYjdhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMCwgMHgwMDBmYjdiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOCwgMHgwMDBmYjdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiYywgMHgwMDBmYjdiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhMSwgMHgwMDBmYjdhMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNSwgMHgwMDBmYjdhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOSwgMHgwMDBmYjdhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMSwgMHgwMDBmYjdiMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNSwgMHgwMDBmYjdiNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiZCwgMHgwMDBmYjdiZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjOSwgMHgwMDBmYjdjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZCwgMHgwMDBmYjdjZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMSwgMHgwMDBmYjdkMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkOSwgMHgwMDBmYjdkOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMiwgMHgwMDBmYjdjMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNiwgMHgwMDBmYjdjNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYSwgMHgwMDBmYjdjYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZSwgMHgwMDBmYjdjZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMiwgMHgwMDBmYjdkMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNiwgMHgwMDBmYjdkNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMywgMHgwMDBmYjdjMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYiwgMHgwMDBmYjdjYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAogICAgIHsgMHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAogICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTI1MCwgMHgwMDA0ZjAwMCwgMHgwMDA0ZjAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTgxYzY1MiwgMHgwYTgxYzY1MiwgMHgwYTgyMDY1MiwgMHgwYTgyMDY1MiwgMHgwYTgyYTY1MiB9LAotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNzIwMSwgMHgwMDAwNzIwMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDQwOCwgMHgwMDAxMDQwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODYwYSwgMHgwMDAxODYwYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDgxOCwgMHgwMDAyMDgxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNDg1OCwgMHgwMDAyNDg1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNjg1OSwgMHgwMDAyNjg1OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyOTg1YiwgMHgwMDAyOTg1YiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYjg5YSwgMHgwMDAyYjg5YSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZDg5YiwgMHgwMDAyZDg5YiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZjg5YywgMHgwMDAyZjg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMTg5ZCwgMHgwMDAzMTg5ZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMzg5ZSwgMHgwMDAzMzg5ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNjhkZSwgMHgwMDAzNjhkZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAogfTsKIApAQCAtNDU2OCw3ICs0NTUxLDcgQEAKICAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKICAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKICAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MTAgfSwKICAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKQEAgLTQ1ODQsNyArNDU2Nyw3IEBACiAgICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCiAgICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjEwIH0sCisgICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjBhIH0sCiAgICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCkBAIC00Njc5LDcgKzQ2NjIsNyBAQAogICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwOTlhOCwgMHgyMDFmZmYwMCB9LAotICAgIHsgMHgwMDAwOTlhYywgMHgyZGVmMTAwMCB9LAorICAgIHsgMHgwMDAwOTlhYywgMHgyZGVmMDQwMCB9LAogICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAogICAgIHsgMHgwMDAwOTliNCwgMHgwMDAwMDgyMCB9LAogICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LApAQCAtNDY4OCw3ICs0NjcxLDcgQEAKICAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKICAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKICAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY3ODggfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY4YzggfSwKICAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKICAgICB7IDB4MDAwMGEyMTQsIDB4MDAyMDZjMTAgfSwKICAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKQEAgLTQ3MDgsOCArNDY5MSw2IEBACiAgICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCiAgICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDMxOGM2MzE4IH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MGMwMzE4IH0sCiAgICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCiAgICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCiAgICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCkBAIC00NzI0LDggKzQ3MDUsNiBAQAogICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgzMThjNjMxOCB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDMxOCB9LAogICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwYTNhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTNhNCwgMHgwMDAwMDAwMCB9LApAQCAtNDc0MCw4ICs0NzE5LDYgQEAKICAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzE4YzYzMTggfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzMTggfSwKICAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKICAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKQEAgLTQ3NTIsMTMgKzQ3MjksMTEgQEAKICAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKICAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODcgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDEgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKICAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKICAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKQEAgLTQ3NzEsMTAgKzQ3NDYsODEgQEAKICAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKICAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQgfSwKICAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKIH07CiAKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY0NDAsIDB4MDAwMGY0NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQ2NDAsIDB4MDAwMTQ2NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2ODAsIDB4MDAwMTg2ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk4NDEsIDB4MDAwMTk4NDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWNhNDAsIDB4MDAwMWNhNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWZhODAsIDB4MDAwMWZhODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjNhYzAsIDB4MDAwMjNhYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTIgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCit9OworCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMltdWzJdID0gewogICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAogICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwppbmRleCBhZjMyZDA5Li5lMGE2ZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDQ1ICsxNCw0MCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF90eHFfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19JTlRFUlJVUFQsCiAJCSJ0eCBvayAweCV4IGVyciAweCV4IGRlc2MgMHgleCBlb2wgMHgleCB1cm4gMHgleFxuIiwKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVyckludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJYWgtPnR4b2tfaW50ZXJydXB0X21hc2ssIGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaywKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzaywgYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrLAorCQlhaC0+dHh1cm5faW50ZXJydXB0X21hc2spOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9JTVJfUzAsCi0JCSAgU00oYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgQVJfSU1SX1MwX1FDVV9UWE9LKQotCQkgIHwgU00oYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOworCQkgIFNNKGFoLT50eG9rX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYT0spCisJCSAgfCBTTShhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MxLAotCQkgIFNNKGFocC0+YWhfdHhFcnJJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzFfUUNVX1RYRVJSKQotCQkgIHwgU00oYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKKwkJICBTTShhaC0+dHhlcnJfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFUlIpCisJCSAgfCBTTShhaC0+dHhlb2xfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9JTVJfUzIsCi0JCSAgICAgIEFSX0lNUl9TMl9RQ1VfVFhVUk4sIGFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJICAgICAgQVJfSU1SX1MyX1FDVV9UWFVSTiwgYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrKTsKIH0KIAotdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewogCXJldHVybiBSRUdfUkVBRChhaCwgQVJfUVRYRFAocSkpOwogfQogCi1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKQorYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQogewogCVJFR19XUklURShhaCwgQVJfUVRYRFAocSksIHR4ZHApOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInF1ZXVlICV1XG4iLCBxKTsKIApAQCAtNjEsNyArNTYsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi11MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAl1MzIgbnBlbmQ7CiAKQEAgLTc1LDE2ICs3MCwxNSBAQAogCXJldHVybiBucGVuZDsKIH0KIAotYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKK2Jvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiB0eGNmZywgY3VyTGV2ZWwsIG5ld0xldmVsOwogCWVudW0gYXRoOWtfaW50IG9tYXNrOwogCi0JaWYgKGFoLT5haF90eFRyaWdMZXZlbCA+PSBNQVhfVFhfRklGT19USFJFU0hPTEQpCisJaWYgKGFoLT50eF90cmlnX2xldmVsID49IE1BWF9UWF9GSUZPX1RIUkVTSE9MRCkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jb21hc2sgPSBhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWhwLT5haF9tYXNrUmVnICYgfkFUSDlLX0lOVF9HTE9CQUwpOworCW9tYXNrID0gYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5tYXNrX3JlZyAmIH5BVEg5S19JTlRfR0xPQkFMKTsKIAogCXR4Y2ZnID0gUkVHX1JFQUQoYWgsIEFSX1RYQ0ZHKTsKIAljdXJMZXZlbCA9IE1TKHR4Y2ZnLCBBUl9GVFJJRyk7CkBAIC0xMDAsMjEgKzk0LDM4IEBACiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgb21hc2spOwogCi0JYWgtPmFoX3R4VHJpZ0xldmVsID0gbmV3TGV2ZWw7CisJYWgtPnR4X3RyaWdfbGV2ZWwgPSBuZXdMZXZlbDsKIAogCXJldHVybiBuZXdMZXZlbCAhPSBjdXJMZXZlbDsKIH0KIAotYm9vbCBhdGg5a19od19zdG9wdHhkbWEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKKyNkZWZpbmUgQVRIOUtfVFhfU1RPUF9ETUFfVElNRU9VVAk0MDAwICAgIC8qIHVzZWMgKi8KKyNkZWZpbmUgQVRIOUtfVElNRV9RVUFOVFVNCQkxMDAgICAgIC8qIHVzZWMgKi8KKworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CisJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiB0c2ZMb3csIGosIHdhaXQ7CisJdTMyIHdhaXRfdGltZSA9IEFUSDlLX1RYX1NUT1BfRE1BX1RJTUVPVVQgLyBBVEg5S19USU1FX1FVQU5UVU07CisKKwlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbnZhbGlkIHF1ZXVlIG51bSAldVxuIiwgcSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlxaSA9ICZhaC0+dHhxW3FdOworCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAxIDw8IHEpOwogCi0JZm9yICh3YWl0ID0gMTAwMDsgd2FpdCAhPSAwOyB3YWl0LS0pIHsKKwlmb3IgKHdhaXQgPSB3YWl0X3RpbWU7IHdhaXQgIT0gMDsgd2FpdC0tKSB7CiAJCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpID09IDApCiAJCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7CisJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCX0KIAogCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpKSB7CkBAIC0xNDQsOCArMTU1LDcgQEAKIAkJdWRlbGF5KDIwMCk7CiAJCVJFR19DTFJfQklUKGFoLCBBUl9USU1FUl9NT0RFLCBBUl9RVUlFVF9USU1FUl9FTik7CiAKLQkJd2FpdCA9IDEwMDA7Ci0KKwkJd2FpdCA9IHdhaXRfdGltZTsKIAkJd2hpbGUgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgcSkpIHsKIAkJCWlmICgoLS13YWl0KSA9PSAwKSB7CiAJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfWE1JVCwKQEAgLTE1MywxOCArMTYzLDIwIEBACiAJCQkJCSJtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl1ZGVsYXkoMTAwKTsKKwkJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCQl9CiAKIAkJUkVHX0NMUl9CSVQoYWgsIEFSX0RJQUdfU1csIEFSX0RJQUdfRk9SQ0VfQ0hfSURMRV9ISUdIKTsKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAwKTsKLQogCXJldHVybiB3YWl0ICE9IDA7CisKKyN1bmRlZiBBVEg5S19UWF9TVE9QX0RNQV9USU1FT1VUCisjdW5kZWYgQVRIOUtfVElNRV9RVUFOVFVNCiB9CiAKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKIAkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKQogewpAQCAtMTkyLDcgKzIwNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwogCkBAIC0yMDMsNyArMjE1LDcgQEAKIAlhZHMtPmRzX3R4c3RhdHVzOCA9IGFkcy0+ZHNfdHhzdGF0dXM5ID0gMDsKIH0KIAotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQoraW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKIApAQCAtMjczLDE5ICsyODUsMTggQEAKIAlkcy0+ZHNfdHhzdGF0LnRzX3Nob3J0cmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfUlRTRmFpbENudCk7CiAJZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfRGF0YUZhaWxDbnQpOwogCWRzLT5kc190eHN0YXQudHNfdmlydGNvbCA9IE1TKGFkcy0+ZHNfdHhzdGF0dXMxLCBBUl9WaXJ0UmV0cnlDbnQpOwotCWRzLT5kc190eHN0YXQudHNfYW50ZW5uYSA9IDE7CisJZHMtPmRzX3R4c3RhdC50c19hbnRlbm5hID0gMDsKIAogCXJldHVybiAwOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl90eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCiAJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQl0eFBvd2VyICs9IGFocC0+YWhfdHhQb3dlckluZGV4T2Zmc2V0OworCXR4UG93ZXIgKz0gYWgtPnR4cG93ZXJfaW5kZXhvZmZzZXQ7CiAJaWYgKHR4UG93ZXIgPiA2MykKIAkJdHhQb3dlciA9IDYzOwogCkBAIC0zMTQsNyArMzI1LDcgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKIAkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCiAJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCkBAIC0zMjUsOSArMzM2LDYgQEAKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmxhc3RfYWRzID0gQVI1NDE2REVTQyhsYXN0ZHMpOwogCXUzMiBkc19jdGwwOwogCi0JKHZvaWQpIG5zZXJpZXM7Ci0JKHZvaWQpIHJ0c2N0c0R1cmF0aW9uOwotCiAJaWYgKGZsYWdzICYgKEFUSDlLX1RYREVTQ19SVFNFTkEgfCBBVEg5S19UWERFU0NfQ1RTRU5BKSkgewogCQlkc19jdGwwID0gYWRzLT5kc19jdGwwOwogCkBAIC0zNzIsNyArMzgwLDcgQEAKIAlsYXN0X2Fkcy0+ZHNfY3RsMyA9IGFkcy0+ZHNfY3RsMzsKIH0KIAotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCXUzMiBhZ2dyTGVuKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zODIsNyArMzkwLDcgQEAKIAlhZHMtPmRzX2N0bDYgfD0gU00oYWdnckxlbiwgQVJfQWdnckxlbik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCSB1MzIgbnVtRGVsaW1zKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zOTYsNyArNDA0LDcgQEAKIAlhZHMtPmRzX2N0bDYgPSBjdGw2OwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKQEAgLTQwNSwxNCArNDEzLDE0IEBACiAJYWRzLT5kc19jdGw2ICY9IH5BUl9QYWREZWxpbTsKIH0KIAotdm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKIAlhZHMtPmRzX2N0bDEgJj0gKH5BUl9Jc0FnZ3IgJiB+QVJfTW9yZUFnZ3IpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKQEAgLTQyMSw3ICs0MjksNyBAQAogCWFkcy0+ZHNfY3RsMiB8PSBTTShidXJzdER1cmF0aW9uLCBBUl9CdXJzdER1cik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgICB1MzIgdm1mKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC00MzIsMjAgKzQ0MCwxNyBAQAogCQlhZHMtPmRzX2N0bDAgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKIH0KIAotdm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyICp0eHFzKQordm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnR4cXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCSp0eHFzICY9IGFocC0+YWhfaW50clR4cXM7Ci0JYWhwLT5haF9pbnRyVHhxcyAmPSB+KCp0eHFzKTsKKwkqdHhxcyAmPSBhaC0+aW50cl90eHFzOworCWFoLT5pbnRyX3R4cXMgJj0gfigqdHhxcyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CiAJdTMyIGN3OwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAogCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewpAQCAtNDUzLDcgKzQ1OCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTUwOSwxMSArNTE0LDEwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19nZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CkBAIC01MjEsNyArNTI1LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEyICs1NDksMTEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKK2ludCBhdGg5a19od19zZXR1cHR4cXVldWUoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKIAkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAlpbnQgcTsKIAogCXN3aXRjaCAodHlwZSkgewpAQCAtNTY4LDcgKzU3MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKIAkJZm9yIChxID0gMDsgcSA8IHBDYXAtPnRvdGFsX3F1ZXVlczsgcSsrKQotCQkJaWYgKGFocC0+YWhfdHhxW3FdLnRxaV90eXBlID09CisJCQlpZiAoYWgtPnR4cVtxXS50cWlfdHlwZSA9PQogCQkJICAgIEFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFKQogCQkJCWJyZWFrOwogCQlpZiAocSA9PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJxdWV1ZSAldVxuIiwgcSk7CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgIT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsCiAJCQkidHggcXVldWUgJXUgYWxyZWFkeSBhY3RpdmVcbiIsIHEpOwpAQCAtNjExLDE3ICs2MTQsMTYgQEAKIAlyZXR1cm4gcTsKIH0KIAotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1FVRVVFLCAiaW52YWxpZCBxdWV1ZSBudW0gJXVcbiIsIHEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlICV1XG4iLCBxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjMwLDIxICs2MzIsMjAgQEAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInJlbGVhc2UgcXVldWUgJXVcbiIsIHEpOwogCiAJcWktPnRxaV90eXBlID0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkU7Ci0JYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVyckludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVvbEludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CisJYWgtPnR4ZXJyX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhlb2xfaW50ZXJydXB0X21hc2sgJj0gfigxIDw8IHEpOworCWFoLT50eHVybl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKGFoLCBxaSk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19yZXNldHR4cXVldWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiBjd01pbiwgY2hhbkN3TWluLCB2YWx1ZTsKIApAQCAtNjUzLDcgKzY1NCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZSAldVxuIiwgcSk7CiAJCXJldHVybiB0cnVlOwpAQCAtNzQxLDkgKzc0Miw5IEBACiAJCQkgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKIAkJCSAgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMCk7CiAJCXZhbHVlID0gKHFpLT50cWlfcmVhZHlUaW1lIC0KLQkJCSAoYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSAtCi0JCQkgIGFoLT5haF9jb25maWcuZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lKSAtCi0JCQkgYWgtPmFoX2NvbmZpZy5hZGRpdGlvbmFsX3N3YmFfYmFja29mZikgKiAxMDI0OworCQkJIChhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lIC0KKwkJCSAgYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpIC0KKwkJCSBhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmKSAqIDEwMjQ7CiAJCVJFR19XUklURShhaCwgQVJfUVJEWVRJTUVDRkcocSksCiAJCQkgIHZhbHVlIHwgQVJfUV9SRFlUSU1FQ0ZHX0VOKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKQpAQCAtNzcxLDMxICs3NzIsMzEgQEAKIAl9CiAKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eG9rX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhPa0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFKQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RGVzY0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlhdGg5a19od19zZXRfdHhxX2ludGVycnVwdHMoYWgsIHFpKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1pbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitpbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjIGFkczsKQEAgLTg2MCwxMSArODYxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSAgdTMyIHNpemUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCWFkcy0+ZHNfY3RsMSA9IHNpemUgJiBBUl9CdWZMZW47CiAJaWYgKGZsYWdzICYgQVRIOUtfUlhERVNDX0lOVFJFUSkKQEAgLTg3Nyw3ICs4NzgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCkKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpCiB7CiAJdTMyIHJlZzsKIApAQCAtODg1LDcgKzg4Niw4IEBACiAJCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJICAgIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAotCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLCAwKSkgeworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLAorCQkJCSAgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJCSAgICAoQVJfRElBR19SWF9ESVMgfAogCQkJCSAgICAgQVJfRElBR19SWF9BQk9SVCkpOwpAQCAtOTA0LDE3ICs5MDYsMTcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKQordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWERQLCByeGRwKTsKIH0KIAotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCkBAIC05MjMsMjQgKzkyNSw0MSBAQAogCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdG9wcGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfRElBR19TVywgQVJfRElBR19SWF9ESVMpOwogCiAJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwogfQogCi1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CisjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCisjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCisKKwlpbnQgaTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX0NSLCBBUl9DUl9SWEUsIDApKSB7CisJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KKwlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgeworCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CisJfQorCisJaWYgKGkgPT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwKLQkJCSJkbWEgZmFpbGVkIHRvIHN0b3AgaW4gMTBtc1xuIgotCQkJIkFSX0NSPTB4JTA4eFxuQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQlSRUdfUkVBRChhaCwgQVJfQ1IpLCBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJImRtYSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCisJCQkiQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwogCX0KKworI3VuZGVmIEFIX1JYX1RJTUVfUVVBTlRVTQorI3VuZGVmIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NmJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNQUNfSAorI2RlZmluZSBNQUNfSAorCisjZGVmaW5lIFJYU1RBVFVTX1JBVEUoYWgsIGFkcykgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgPwkJXAorCQkJCU1TKGFkcy0+ZHNfcnhzdGF0dXMwLCBBUl9SeFJhdGUpIDoJXAorCQkJCShhZHMtPmRzX3J4c3RhdHVzMyA+PiAyKSAmIDB4RkYpCisKKyNkZWZpbmUgc2V0MTFuVHJpZXMoX3NlcmllcywgX2luZGV4KSBcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlRyaWVzLCBBUl9YbWl0RGF0YVRyaWVzIyNfaW5kZXgpKQorCisjZGVmaW5lIHNldDExblJhdGUoX3NlcmllcywgX2luZGV4KSBcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlJhdGUsIEFSX1htaXRSYXRlIyNfaW5kZXgpKQorCisjZGVmaW5lIHNldDExblBrdER1clJUU0NUUyhfc2VyaWVzLCBfaW5kZXgpCQkJCVwKKwkoU00oKF9zZXJpZXMpW19pbmRleF0uUGt0RHVyYXRpb24sIEFSX1BhY2tldER1ciMjX2luZGV4KSB8CVwKKwkgKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgID8JXAorCSAgQVJfUlRTQ1RTUXVhbCMjX2luZGV4IDogMCkpCisKKyNkZWZpbmUgc2V0MTFuUmF0ZUZsYWdzKF9zZXJpZXMsIF9pbmRleCkJCQkJXAorCSgoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU18yMDQwID8JCVwKKwkgIEFSXzIwNDBfIyNfaW5kZXggOiAwKQkJCQkJCVwKKwkgfCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSA/CVwKKwkgICBBUl9HSSMjX2luZGV4IDogMCkJCQkJCQlcCisJIHxTTSgoX3NlcmllcylbX2luZGV4XS5DaFNlbCwgQVJfQ2hhaW5TZWwjI19pbmRleCkpCisKKyNkZWZpbmUgQ0NLX1NJRlNfVElNRSAgICAgICAgMTAKKyNkZWZpbmUgQ0NLX1BSRUFNQkxFX0JJVFMgICAxNDQKKyNkZWZpbmUgQ0NLX1BMQ1BfQklUUyAgICAgICAgNDgKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRSAgICAgICAgMTYKKyNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FICAgIDIwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTICAgICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FICAgICAgNAorCisjZGVmaW5lIE9GRE1fU0lGU19USU1FX0hBTEYgICAgIDMyCisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9IQUxGIDQwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTX0hBTEYgICAgIDIyCisjZGVmaW5lIE9GRE1fU1lNQk9MX1RJTUVfSEFMRiAgIDgKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSICAgICAgNjQKKyNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIgIDgwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTX1FVQVJURVIgICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIgICAgMTYKKworI2RlZmluZSBJTklUX0FJRlMgICAgICAgMgorI2RlZmluZSBJTklUX0NXTUlOICAgICAgMTUKKyNkZWZpbmUgSU5JVF9DV01JTl8xMUIgIDMxCisjZGVmaW5lIElOSVRfQ1dNQVggICAgICAxMDIzCisjZGVmaW5lIElOSVRfU0hfUkVUUlkgICAxMAorI2RlZmluZSBJTklUX0xHX1JFVFJZICAgMTAKKyNkZWZpbmUgSU5JVF9TU0hfUkVUUlkgIDMyCisjZGVmaW5lIElOSVRfU0xHX1JFVFJZICAzMgorCisjZGVmaW5lIEFUSDlLX1NMT1RfVElNRV82IDYKKyNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzkgOQorI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfMjAgMjAKKworI2RlZmluZSBBVEg5S19UWEVSUl9YUkVUUlkgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1RYRVJSX0ZJTFQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfVFhFUlJfRklGTyAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKKworI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfVFhfREVTQ19DRkdfRVJSICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19UWF9EQVRBX1VOREVSUlVOICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1RYX0RFTElNX1VOREVSUlVOICAgIDB4MTAKKyNkZWZpbmUgQVRIOUtfVFhfU1dfQUJPUlRFRCAgICAgICAgMHg0MAorI2RlZmluZSBBVEg5S19UWF9TV19GSUxURVJFRCAgICAgICAweDgwCisKKyNkZWZpbmUgTUlOX1RYX0ZJRk9fVEhSRVNIT0xEICAgMHgxCisjZGVmaW5lIE1BWF9UWF9GSUZPX1RIUkVTSE9MRCAgICgoNDA5NiAvIDY0KSAtIDEpCisjZGVmaW5lIElOSVRfVFhfRklGT19USFJFU0hPTEQgIE1JTl9UWF9GSUZPX1RIUkVTSE9MRAorCitzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7CisJdTMyIHRzX3RzdGFtcDsKKwl1MTYgdHNfc2VxbnVtOworCXU4IHRzX3N0YXR1czsKKwl1OCB0c19yYXRlY29kZTsKKwl1OCB0c19yYXRlaW5kZXg7CisJaW50OF90IHRzX3Jzc2k7CisJdTggdHNfc2hvcnRyZXRyeTsKKwl1OCB0c19sb25ncmV0cnk7CisJdTggdHNfdmlydGNvbDsKKwl1OCB0c19hbnRlbm5hOworCXU4IHRzX2ZsYWdzOworCWludDhfdCB0c19yc3NpX2N0bDA7CisJaW50OF90IHRzX3Jzc2lfY3RsMTsKKwlpbnQ4X3QgdHNfcnNzaV9jdGwyOworCWludDhfdCB0c19yc3NpX2V4dDA7CisJaW50OF90IHRzX3Jzc2lfZXh0MTsKKwlpbnQ4X3QgdHNfcnNzaV9leHQyOworCXU4IHBhZFszXTsKKwl1MzIgYmFfbG93OworCXUzMiBiYV9oaWdoOworCXUzMiBldm0wOworCXUzMiBldm0xOworCXUzMiBldm0yOworfTsKKworc3RydWN0IGF0aF9yeF9zdGF0dXMgeworCXUzMiByc190c3RhbXA7CisJdTE2IHJzX2RhdGFsZW47CisJdTggcnNfc3RhdHVzOworCXU4IHJzX3BoeWVycjsKKwlpbnQ4X3QgcnNfcnNzaTsKKwl1OCByc19rZXlpeDsKKwl1OCByc19yYXRlOworCXU4IHJzX2FudGVubmE7CisJdTggcnNfbW9yZTsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwwOworCWludDhfdCByc19yc3NpX2N0bDE7CisJaW50OF90IHJzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgcnNfcnNzaV9leHQwOworCWludDhfdCByc19yc3NpX2V4dDE7CisJaW50OF90IHJzX3Jzc2lfZXh0MjsKKwl1OCByc19pc2FnZ3I7CisJdTggcnNfbW9yZWFnZ3I7CisJdTggcnNfbnVtX2RlbGltczsKKwl1OCByc19mbGFnczsKKwl1MzIgZXZtMDsKKwl1MzIgZXZtMTsKKwl1MzIgZXZtMjsKK307CisKKyNkZWZpbmUgQVRIOUtfUlhFUlJfQ1JDICAgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1JYRVJSX1BIWSAgICAgICAgICAgMHgwMgorI2RlZmluZSBBVEg5S19SWEVSUl9GSUZPICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfUlhFUlJfREVDUllQVCAgICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1JYRVJSX01JQyAgICAgICAgICAgMHgxMAorCisjZGVmaW5lIEFUSDlLX1JYX01PUkUgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19SWF9NT1JFX0FHR1IgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfUlhfR0kgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFUSDlLX1JYXzIwNDAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUFJFICAgIDB4MTAKKyNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BPU1QgICAweDIwCisjZGVmaW5lIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSAgICAgMHg0MAorCisjZGVmaW5lIEFUSDlLX1JYS0VZSVhfSU5WQUxJRAkoKHU4KS0xKQorI2RlZmluZSBBVEg5S19UWEtFWUlYX0lOVkFMSUQJKCh1MzIpLTEpCisKK3N0cnVjdCBhdGhfZGVzYyB7CisJdTMyIGRzX2xpbms7CisJdTMyIGRzX2RhdGE7CisJdTMyIGRzX2N0bDA7CisJdTMyIGRzX2N0bDE7CisJdTMyIGRzX2h3WzIwXTsKKwl1bmlvbiB7CisJCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OworCQlzdHJ1Y3QgYXRoX3J4X3N0YXR1cyByeDsKKwkJdm9pZCAqc3RhdHM7CisJfSBkc191czsKKwl2b2lkICpkc192ZGF0YTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJZHNfdHhzdGF0CWRzX3VzLnR4CisjZGVmaW5lCWRzX3J4c3RhdAlkc191cy5yeAorI2RlZmluZSBkc19zdGF0CQlkc191cy5zdGF0cworCisjZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCisjZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCisjZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAorI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKKy8qIEFUSDlLX1RYREVTQ19JTlRSRVEgZm9yY2VzIGEgdHggaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZCBmb3IKKyAqIHRoZSBkZXNjcmlwdG9yIGl0cyBtYXJrZWQgb24uICBXZSB0YWtlIGEgdHggaW50ZXJydXB0IHRvIHJlYXAKKyAqIGRlc2NyaXB0b3JzIHdoZW4gdGhlIGgvdyBoaXRzIGFuIEVPTCBjb25kaXRpb24gb3IKKyAqIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgc3BlY2lmaWNhbGx5IG1hcmtlZCB0byBnZW5lcmF0ZQorICogYW4gaW50ZXJydXB0IHdpdGggdGhpcyBmbGFnLiBEZXNjcmlwdG9ycyBzaG91bGQgYmUKKyAqIG1hcmtlZCBwZXJpb2RpY2FsbHkgdG8gaW5zdXJlIHRpbWVseSByZXBsZW5pc2hpbmcgb2YgdGhlCisgKiBzdXBwbHkgbmVlZGVkIGZvciBzZW5kaW5nIGZyYW1lcy4gRGVmZXJpbmcgaW50ZXJydXB0cworICogcmVkdWNlcyBzeXN0ZW0gbG9hZCBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIG1vcmUgY29uY3VycmVudAorICogd29yayB0byBiZSBkb25lIGJ1dCBpZiBkb25lIHRvIGFnZ3Jlc3NpdmVseSBjYW4gY2F1c2UKKyAqIHNlbmRlcnMgdG8gYmFja3VwLiBXaGVuIHRoZSBoYXJkd2FyZSBxdWV1ZSBpcyBsZWZ0IHRvbworICogbGFyZ2UgcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIG1heSBhbHNvIGJlIHRvbyBvdXQgb2YKKyAqIGRhdGUuIEFuIEFsdGVybmF0aXZlIGZvciB0aGlzIGlzIFRYIGludGVycnVwdCBtaXRpZ2F0aW9uCisgKiBidXQgdGhpcyBuZWVkcyBtb3JlIHRlc3RpbmcuICovCisjZGVmaW5lIEFUSDlLX1RYREVTQ19JTlRSRVEJCTB4MDAxMAorI2RlZmluZSBBVEg5S19UWERFU0NfVkVPTAkJMHgwMDIwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfT05MWQkJMHgwMDQwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfQU5EX0NUTAkweDAwODAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX1ZNRgkJMHgwMTAwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19GUkFHX0lTX09OIAkweDAyMDAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX0NBQgkJMHgwNDAwCisKKyNkZWZpbmUgQVRIOUtfUlhERVNDX0lOVFJFUQkJMHgwMDIwCisKK3N0cnVjdCBhcjU0MTZfZGVzYyB7CisJdTMyIGRzX2xpbms7CisJdTMyIGRzX2RhdGE7CisJdTMyIGRzX2N0bDA7CisJdTMyIGRzX2N0bDE7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIGN0bDI7CisJCQl1MzIgY3RsMzsKKwkJCXUzMiBjdGw0OworCQkJdTMyIGN0bDU7CisJCQl1MzIgY3RsNjsKKwkJCXUzMiBjdGw3OworCQkJdTMyIGN0bDg7CisJCQl1MzIgY3RsOTsKKwkJCXUzMiBjdGwxMDsKKwkJCXUzMiBjdGwxMTsKKwkJCXUzMiBzdGF0dXMwOworCQkJdTMyIHN0YXR1czE7CisJCQl1MzIgc3RhdHVzMjsKKwkJCXUzMiBzdGF0dXMzOworCQkJdTMyIHN0YXR1czQ7CisJCQl1MzIgc3RhdHVzNTsKKwkJCXUzMiBzdGF0dXM2OworCQkJdTMyIHN0YXR1czc7CisJCQl1MzIgc3RhdHVzODsKKwkJCXUzMiBzdGF0dXM5OworCQl9IHR4OworCQlzdHJ1Y3QgeworCQkJdTMyIHN0YXR1czA7CisJCQl1MzIgc3RhdHVzMTsKKwkJCXUzMiBzdGF0dXMyOworCQkJdTMyIHN0YXR1czM7CisJCQl1MzIgc3RhdHVzNDsKKwkJCXUzMiBzdGF0dXM1OworCQkJdTMyIHN0YXR1czY7CisJCQl1MzIgc3RhdHVzNzsKKwkJCXUzMiBzdGF0dXM4OworCQl9IHJ4OworCX0gdTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2REVTQyhfZHMpICAgICAgICAgKChzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKyNkZWZpbmUgQVI1NDE2REVTQ19DT05TVChfZHMpICAgKChjb25zdCBzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKworI2RlZmluZSBkc19jdGwyICAgICB1LnR4LmN0bDIKKyNkZWZpbmUgZHNfY3RsMyAgICAgdS50eC5jdGwzCisjZGVmaW5lIGRzX2N0bDQgICAgIHUudHguY3RsNAorI2RlZmluZSBkc19jdGw1ICAgICB1LnR4LmN0bDUKKyNkZWZpbmUgZHNfY3RsNiAgICAgdS50eC5jdGw2CisjZGVmaW5lIGRzX2N0bDcgICAgIHUudHguY3RsNworI2RlZmluZSBkc19jdGw4ICAgICB1LnR4LmN0bDgKKyNkZWZpbmUgZHNfY3RsOSAgICAgdS50eC5jdGw5CisjZGVmaW5lIGRzX2N0bDEwICAgIHUudHguY3RsMTAKKyNkZWZpbmUgZHNfY3RsMTEgICAgdS50eC5jdGwxMQorCisjZGVmaW5lIGRzX3R4c3RhdHVzMCAgICB1LnR4LnN0YXR1czAKKyNkZWZpbmUgZHNfdHhzdGF0dXMxICAgIHUudHguc3RhdHVzMQorI2RlZmluZSBkc190eHN0YXR1czIgICAgdS50eC5zdGF0dXMyCisjZGVmaW5lIGRzX3R4c3RhdHVzMyAgICB1LnR4LnN0YXR1czMKKyNkZWZpbmUgZHNfdHhzdGF0dXM0ICAgIHUudHguc3RhdHVzNAorI2RlZmluZSBkc190eHN0YXR1czUgICAgdS50eC5zdGF0dXM1CisjZGVmaW5lIGRzX3R4c3RhdHVzNiAgICB1LnR4LnN0YXR1czYKKyNkZWZpbmUgZHNfdHhzdGF0dXM3ICAgIHUudHguc3RhdHVzNworI2RlZmluZSBkc190eHN0YXR1czggICAgdS50eC5zdGF0dXM4CisjZGVmaW5lIGRzX3R4c3RhdHVzOSAgICB1LnR4LnN0YXR1czkKKworI2RlZmluZSBkc19yeHN0YXR1czAgICAgdS5yeC5zdGF0dXMwCisjZGVmaW5lIGRzX3J4c3RhdHVzMSAgICB1LnJ4LnN0YXR1czEKKyNkZWZpbmUgZHNfcnhzdGF0dXMyICAgIHUucnguc3RhdHVzMgorI2RlZmluZSBkc19yeHN0YXR1czMgICAgdS5yeC5zdGF0dXMzCisjZGVmaW5lIGRzX3J4c3RhdHVzNCAgICB1LnJ4LnN0YXR1czQKKyNkZWZpbmUgZHNfcnhzdGF0dXM1ICAgIHUucnguc3RhdHVzNQorI2RlZmluZSBkc19yeHN0YXR1czYgICAgdS5yeC5zdGF0dXM2CisjZGVmaW5lIGRzX3J4c3RhdHVzNyAgICB1LnJ4LnN0YXR1czcKKyNkZWZpbmUgZHNfcnhzdGF0dXM4ICAgIHUucnguc3RhdHVzOAorCisjZGVmaW5lIEFSX0ZyYW1lTGVuICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9WaXJ0TW9yZUZyYWcgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkMDAgICAgICAweDAwMDBlMDAwCisjZGVmaW5lIEFSX1htaXRQb3dlciAgICAgICAgMHgwMDNmMDAwMAorI2RlZmluZSBBUl9YbWl0UG93ZXJfUyAgICAgIDE2CisjZGVmaW5lIEFSX1JUU0VuYWJsZSAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBBUl9WRU9MICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQVJfQ2xyRGVzdE1hc2sgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDAxICAgICAgMHgxZTAwMDAwMAorI2RlZmluZSBBUl9UeEludHJSZXEgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfRGVzdElkeFZhbGlkICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEFSX0NUU0VuYWJsZSAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9UeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfRGVzdElkeCAgICAgICAgICAweDAwMGZlMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHhfUyAgICAgICAgMTMKKyNkZWZpbmUgQVJfRnJhbWVUeXBlICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEFSX0ZyYW1lVHlwZV9TICAgICAgMjAKKyNkZWZpbmUgQVJfTm9BY2sgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFSX0luc2VydFRTICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBUl9Db3JydXB0RkNTICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQVJfRXh0T25seSAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEFSX0V4dEFuZEN0bCAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBBUl9Nb3JlQWdnciAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfSXNBZ2dyICAgICAgICAgICAweDQwMDAwMDAwCisKKyNkZWZpbmUgQVJfQnVyc3REdXIgICAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX0J1cnN0RHVyX1MgICAgICAgMAorI2RlZmluZSBBUl9EdXJVcGRhdGVFbmEgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczAgICAweDAwMGYwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwX1MgMTYKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczEgICAweDAwZjAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxX1MgMjAKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczIgICAweDBmMDAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyX1MgMjQKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczMgICAweGYwMDAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzX1MgMjgKKworI2RlZmluZSBBUl9YbWl0UmF0ZTAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfWG1pdFJhdGUwX1MgICAgICAwCisjZGVmaW5lIEFSX1htaXRSYXRlMSAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTFfUyAgICAgIDgKKyNkZWZpbmUgQVJfWG1pdFJhdGUyICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1htaXRSYXRlMl9TICAgICAgMTYKKyNkZWZpbmUgQVJfWG1pdFJhdGUzICAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1htaXRSYXRlM19TICAgICAgMjQKKworI2RlZmluZSBBUl9QYWNrZXREdXIwICAgICAgIDB4MDAwMDdmZmYKKyNkZWZpbmUgQVJfUGFja2V0RHVyMF9TICAgICAwCisjZGVmaW5lIEFSX1JUU0NUU1F1YWwwICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9QYWNrZXREdXIxICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMV9TICAgICAxNgorI2RlZmluZSBBUl9SVFNDVFNRdWFsMSAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9QYWNrZXREdXIyICAgICAgIDB4MDAwMDdmZmYKKyNkZWZpbmUgQVJfUGFja2V0RHVyMl9TICAgICAwCisjZGVmaW5lIEFSX1JUU0NUU1F1YWwyICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9QYWNrZXREdXIzICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyM19TICAgICAxNgorI2RlZmluZSBBUl9SVFNDVFNRdWFsMyAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9BZ2dyTGVuICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVJfQWdnckxlbl9TICAgICAgICAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDYwICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBBUl9QYWREZWxpbSAgICAgICAgIDB4MDNmYzAwMDAKKyNkZWZpbmUgQVJfUGFkRGVsaW1fUyAgICAgICAxOAorI2RlZmluZSBBUl9FbmNyVHlwZSAgICAgICAgIDB4MGMwMDAwMDAKKyNkZWZpbmUgQVJfRW5jclR5cGVfUyAgICAgICAyNgorI2RlZmluZSBBUl9UeEN0bFJzdmQ2MSAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBBUl8yMDQwXzAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfR0kwICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX0NoYWluU2VsMCAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBBUl9DaGFpblNlbDBfUyAgICAgIDIKKyNkZWZpbmUgQVJfMjA0MF8xICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFSX0dJMSAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBUl9DaGFpblNlbDEgICAgICAgIDB4MDAwMDAzODAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwxX1MgICAgICA3CisjZGVmaW5lIEFSXzIwNDBfMiAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBUl9HSTIgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwyICAgICAgICAweDAwMDA3MDAwCisjZGVmaW5lIEFSX0NoYWluU2VsMl9TICAgICAgMTIKKyNkZWZpbmUgQVJfMjA0MF8zICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFSX0dJMyAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9DaGFpblNlbDMgICAgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwzX1MgICAgICAxNworI2RlZmluZSBBUl9SVFNDVFNSYXRlICAgICAgIDB4MGZmMDAwMDAKKyNkZWZpbmUgQVJfUlRTQ1RTUmF0ZV9TICAgICAyMAorI2RlZmluZSBBUl9UeEN0bFJzdmQ3MCAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBBUl9UeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDBfUyAgICAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMV9TICAgIDgKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDAyX1MgICAgMTYKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDAgICAweDNmMDAwMDAwCisjZGVmaW5lIEFSX1R4QmFTdGF0dXMgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMSAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9Gcm1YbWl0T0sgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX0V4Y2Vzc2l2ZVJldHJpZXMgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfRklGT1VuZGVycnVuICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9GaWx0ZXJlZCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFSX1JUU0ZhaWxDbnQgICAgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgQVJfUlRTRmFpbENudF9TICAgICAgICAgNAorI2RlZmluZSBBUl9EYXRhRmFpbENudCAgICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEFSX0RhdGFGYWlsQ250X1MgICAgICAgIDgKKyNkZWZpbmUgQVJfVmlydFJldHJ5Q250ICAgICAgICAgMHgwMDAwZjAwMAorI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnRfUyAgICAgICAxMgorI2RlZmluZSBBUl9UeERlbGltVW5kZXJydW4gICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFSX1R4RGF0YVVuZGVycnVuICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfRGVzY0NmZ0VyciAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9UeFRpbWVyRXhwaXJlZCAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDEwICAgICAgIDB4ZmZmMDAwMDAKKworI2RlZmluZSBBUl9TZW5kVGltZXN0YW1wICAgIGRzX3R4c3RhdHVzMgorI2RlZmluZSBBUl9CYUJpdG1hcExvdyAgICAgIGRzX3R4c3RhdHVzMworI2RlZmluZSBBUl9CYUJpdG1hcEhpZ2ggICAgIGRzX3R4c3RhdHVzNAorCisjZGVmaW5lIEFSX1R4UlNTSUFudDEwICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9UeFJTU0lBbnQxMF9TICAgIDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTEgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDExX1MgICAgOAorI2RlZmluZSBBUl9UeFJTU0lBbnQxMiAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTJfUyAgICAxNgorI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZCAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWRfUyAyNAorCisjZGVmaW5lIEFSX1R4RVZNMCAgICAgICAgICAgZHNfdHhzdGF0dXM1CisjZGVmaW5lIEFSX1R4RVZNMSAgICAgICAgICAgZHNfdHhzdGF0dXM2CisjZGVmaW5lIEFSX1R4RVZNMiAgICAgICAgICAgZHNfdHhzdGF0dXM3CisKKyNkZWZpbmUgQVJfVHhEb25lICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1NlcU51bSAgICAgICAgICAgMHgwMDAwMWZmZQorI2RlZmluZSBBUl9TZXFOdW1fUyAgICAgICAgIDEKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODAgICAweDAwMDFlMDAwCisjZGVmaW5lIEFSX1R4T3BFeGNlZWRlZCAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MSAgIDB4MDAxYzAwMDAKKyNkZWZpbmUgQVJfRmluYWxUeElkeCAgICAgICAweDAwNjAwMDAwCisjZGVmaW5lIEFSX0ZpbmFsVHhJZHhfUyAgICAgMjEKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODIgICAweDAxODAwMDAwCisjZGVmaW5lIEFSX1Bvd2VyTWdtdCAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MyAgIDB4ZmMwMDAwMDAKKworI2RlZmluZSBBUl9SeENUTFJzdmQwMCAgMHhmZmZmZmZmZgorCisjZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAweDAwMDAwZmZmCisjZGVmaW5lIEFSX1J4Q3RsUnN2ZDAwICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX1J4SW50clJlcSAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFSX1J4Q3RsUnN2ZDAxICAweGZmZmZjMDAwCisKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1J4UlNTSUFudDAwX1MgICAgMAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDFfUyAgICA4CisjZGVmaW5lIEFSX1J4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMl9TICAgIDE2CisjZGVmaW5lIEFSX1J4UmF0ZSAgICAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBBUl9SeFJhdGVfUyAgICAgICAgIDI0CisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDAwICAgMHhmZjAwMDAwMAorCisjZGVmaW5lIEFSX0RhdGFMZW4gICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9SeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfTnVtRGVsaW0gICAgICAgICAweDAwM2ZjMDAwCisjZGVmaW5lIEFSX051bURlbGltX1MgICAgICAgMTQKKyNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMTAgICAweGZmODAwMDAwCisKKyNkZWZpbmUgQVJfUmN2VGltZXN0YW1wICAgICBkc19yeHN0YXR1czIKKworI2RlZmluZSBBUl9HSSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfMjA0MCAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BhcmFsbGVsNDAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9QYXJhbGxlbDQwX1MgICAgIDIKKyNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMzAgICAweDAwMDAwMGY4CisjZGVmaW5lIEFSX1J4QW50ZW5uYQkgICAgMHhmZmZmZmYwMAorI2RlZmluZSBBUl9SeEFudGVubmFfUwkgICAgOAorCisjZGVmaW5lIEFSX1J4UlNTSUFudDEwICAgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9SeFJTU0lBbnQxMF9TICAgICAgICAgIDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTEgICAgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDExX1MgICAgICAgICAgOAorI2RlZmluZSBBUl9SeFJTU0lBbnQxMiAgICAgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTJfUyAgICAgICAgICAxNgorI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZCAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWRfUyAgICAgICAyNAorCisjZGVmaW5lIEFSX1J4RVZNMCAgICAgICAgICAgZHNfcnhzdGF0dXM0CisjZGVmaW5lIEFSX1J4RVZNMSAgICAgICAgICAgZHNfcnhzdGF0dXM1CisjZGVmaW5lIEFSX1J4RVZNMiAgICAgICAgICAgZHNfcnhzdGF0dXM2CisKKyNkZWZpbmUgQVJfUnhEb25lICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1J4RnJhbWVPSyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9DUkNFcnIgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfRGVjcnlwdENSQ0VyciAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFSX1BIWUVyciAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBUl9NaWNoYWVsRXJyICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVJfUHJlRGVsaW1DUkNFcnIgICAweDAwMDAwMDQwCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcwICAgMHgwMDAwMDA4MAorI2RlZmluZSBBUl9SeEtleUlkeFZhbGlkICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVJfS2V5SWR4ICAgICAgICAgICAweDAwMDBmZTAwCisjZGVmaW5lIEFSX0tleUlkeF9TICAgICAgICAgOQorI2RlZmluZSBBUl9QSFlFcnJDb2RlICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUEhZRXJyQ29kZV9TICAgICA4CisjZGVmaW5lIEFSX1J4TW9yZUFnZ3IgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9SeEFnZ3IgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfUG9zdERlbGltQ1JDRXJyICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcxICAgMHgzZmY4MDAwMAorI2RlZmluZSBBUl9EZWNyeXB0QnVzeUVyciAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVJfS2V5TWlzcyAgICAgICAgICAweDgwMDAwMDAwCisKK2VudW0gYXRoOWtfdHhfcXVldWUgeworCUFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFID0gMCwKKwlBVEg5S19UWF9RVUVVRV9EQVRBLAorCUFUSDlLX1RYX1FVRVVFX0JFQUNPTiwKKwlBVEg5S19UWF9RVUVVRV9DQUIsCisJQVRIOUtfVFhfUVVFVUVfVUFQU0QsCisJQVRIOUtfVFhfUVVFVUVfUFNQT0xMCit9OworCisjZGVmaW5lCUFUSDlLX05VTV9UWF9RVUVVRVMgMTAKKworZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHsKKwlBVEg5S19XTUVfQUNfQksgPSAwLAorCUFUSDlLX1dNRV9BQ19CRSwKKwlBVEg5S19XTUVfQUNfVkksCisJQVRIOUtfV01FX0FDX1ZPLAorCUFUSDlLX1dNRV9VUFNECit9OworCitlbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHsKKwlUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSA9IDB4MDAwMSwKKwlUWFFfRkxBR19UWEVSUklOVF9FTkFCTEUgPSAweDAwMDEsCisJVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSA9IDB4MDAwMiwKKwlUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUgPSAweDAwMDQsCisJVFhRX0ZMQUdfVFhVUk5JTlRfRU5BQkxFID0gMHgwMDA4LAorCVRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSA9IDB4MDAxMCwKKwlUWFFfRkxBR19DT01QUkVTU0lPTl9FTkFCTEUgPSAweDAwMjAsCisJVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSA9IDB4MDA0MCwKKwlUWFFfRkxBR19GUkFHX0JVUlNUX0JBQ0tPRkZfRU5BQkxFID0gMHgwMDgwLAorfTsKKworI2RlZmluZSBBVEg5S19UWFFfVVNFREVGQVVMVCAoKHUzMikgLTEpCisjZGVmaW5lIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFUSDlLX0RFQ09NUF9NQVNLX1NJWkUgICAgIDEyOAorI2RlZmluZSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EICA1MAorI2RlZmluZSBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EICA5NgorCitlbnVtIGF0aDlrX3BrdF90eXBlIHsKKwlBVEg5S19QS1RfVFlQRV9OT1JNQUwgPSAwLAorCUFUSDlLX1BLVF9UWVBFX0FUSU0sCisJQVRIOUtfUEtUX1RZUEVfUFNQT0xMLAorCUFUSDlLX1BLVF9UWVBFX0JFQUNPTiwKKwlBVEg5S19QS1RfVFlQRV9QUk9CRV9SRVNQLAorCUFUSDlLX1BLVF9UWVBFX0NISVJQLAorCUFUSDlLX1BLVF9UWVBFX0dSUF9QT0xMLAorfTsKKworc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8geworCXUzMiB0cWlfdmVyOworCWVudW0gYXRoOWtfdHhfcXVldWUgdHFpX3R5cGU7CisJZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHRxaV9zdWJ0eXBlOworCWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgdHFpX3FmbGFnczsKKwl1MzIgdHFpX3ByaW9yaXR5OworCXUzMiB0cWlfYWlmczsKKwl1MzIgdHFpX2N3bWluOworCXUzMiB0cWlfY3dtYXg7CisJdTE2IHRxaV9zaHJldHJ5OworCXUxNiB0cWlfbGdyZXRyeTsKKwl1MzIgdHFpX2NiclBlcmlvZDsKKwl1MzIgdHFpX2Nick92ZXJmbG93TGltaXQ7CisJdTMyIHRxaV9idXJzdFRpbWU7CisJdTMyIHRxaV9yZWFkeVRpbWU7CisJdTMyIHRxaV9waHlzQ29tcEJ1ZjsKKwl1MzIgdHFpX2ludEZsYWdzOworfTsKKworZW51bSBhdGg5a19yeF9maWx0ZXIgeworCUFUSDlLX1JYX0ZJTFRFUl9VQ0FTVCA9IDB4MDAwMDAwMDEsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUID0gMHgwMDAwMDAwMiwKKwlBVEg5S19SWF9GSUxURVJfQkNBU1QgPSAweDAwMDAwMDA0LAorCUFUSDlLX1JYX0ZJTFRFUl9DT05UUk9MID0gMHgwMDAwMDAwOCwKKwlBVEg5S19SWF9GSUxURVJfQkVBQ09OID0gMHgwMDAwMDAxMCwKKwlBVEg5S19SWF9GSUxURVJfUFJPTSA9IDB4MDAwMDAwMjAsCisJQVRIOUtfUlhfRklMVEVSX1BST0JFUkVRID0gMHgwMDAwMDA4MCwKKwlBVEg5S19SWF9GSUxURVJfUEhZRVJSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19SWF9GSUxURVJfTVlCRUFDT04gPSAweDAwMDAwMjAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwgPSAweDAwMDA0MDAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUiA9IDB4MDAwMDIwMDAsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTCA9IDB4MDAwMDgwMDAsCit9OworCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgMHgwMDAxCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCAgICAgMHgwMDAyCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJICAgMHgwMDA0CisKK3N0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgeworCXUzMiBUcmllczsKKwl1MzIgUmF0ZTsKKwl1MzIgUGt0RHVyYXRpb247CisJdTMyIENoU2VsOworCXUzMiBSYXRlRmxhZ3M7Cit9OworCitzdHJ1Y3QgYXRoOWtfa2V5dmFsIHsKKwl1OCBrdl90eXBlOworCXU4IGt2X3BhZDsKKwl1MTYga3ZfbGVuOworCXU4IGt2X3ZhbFsxNl07IC8qIFRLICovCisJdTgga3ZfbWljWzhdOyAvKiBNaWNoYWVsIE1JQyBrZXkgKi8KKwl1OCBrdl90eG1pY1s4XTsgLyogTWljaGFlbCBNSUMgVFgga2V5ICh1c2VkIG9ubHkgaWYgdGhlIGhhcmR3YXJlCisJCQkgKiBzdXBwb3J0cyBib3RoIE1JQyBrZXlzIGluIHRoZSBzYW1lIGtleSBjYWNoZSBlbnRyeTsKKwkJCSAqIGluIHRoYXQgY2FzZSwga3ZfbWljIGlzIHRoZSBSWCBrZXkpICovCit9OworCitlbnVtIGF0aDlrX2tleV90eXBlIHsKKwlBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwlBVEg5S19LRVlfVFlQRV9XRVAsCisJQVRIOUtfS0VZX1RZUEVfQUVTLAorCUFUSDlLX0tFWV9UWVBFX1RLSVAsCit9OworCitlbnVtIGF0aDlrX2NpcGhlciB7CisJQVRIOUtfQ0lQSEVSX1dFUCA9IDAsCisJQVRIOUtfQ0lQSEVSX0FFU19PQ0IgPSAxLAorCUFUSDlLX0NJUEhFUl9BRVNfQ0NNID0gMiwKKwlBVEg5S19DSVBIRVJfQ0tJUCA9IDMsCisJQVRIOUtfQ0lQSEVSX1RLSVAgPSA0LAorCUFUSDlLX0NJUEhFUl9DTFIgPSA1LAorCUFUSDlLX0NJUEhFUl9NSUMgPSAxMjcKK307CisKK2VudW0gYXRoOWtfaHRfbWFjbW9kZSB7CisJQVRIOUtfSFRfTUFDTU9ERV8yMCA9IDAsCisJQVRIOUtfSFRfTUFDTU9ERV8yMDQwID0gMSwKK307CisKK2VudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgeworCUFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwID0gMCwKKwlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSA9IDEsCit9OworCitzdHJ1Y3QgYXRoX2h3Oworc3RydWN0IGF0aDlrX2NoYW5uZWw7CitzdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CisKK3UzMiBhdGg5a19od19nZXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKK2Jvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOwordTMyIGF0aDlrX2h3X251bXR4cGVuZGluZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBiSW5jVHJpZ0xldmVsKTsKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Citib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKKwkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKTsKK3ZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOworaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCisJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKKwkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCisJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCisJCQkJICBzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1tdLAorCQkJCSAgdTMyIG5zZXJpZXMsIHUzMiBmbGFncyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCXUzMiBhZ2dyTGVuKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSB1MzIgbnVtRGVsaW1zKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Cit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pOwordm9pZCBhdGg5a19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgICAgdTMyIHZtZik7Cit2b2lkIGF0aDlrX2h3X2dldHR4aW50cnR4cXMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqdHhxcyk7Citib29sIGF0aDlrX2h3X3NldF90eHFfcHJvcHMoc3RydWN0IGF0aF9odyAqYWgsIGludCBxLAorCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Citib29sIGF0aDlrX2h3X2dldF90eHFfcHJvcHMoc3RydWN0IGF0aF9odyAqYWgsIGludCBxLAorCQkJICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7CitpbnQgYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX3R4X3F1ZXVlIHR5cGUsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Citib29sIGF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Citib29sIGF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworaW50IGF0aDlrX2h3X3J4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQl1MzIgcGEsIHN0cnVjdCBhdGhfZGVzYyAqbmRzLCB1NjQgdHNmKTsKK2Jvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOworYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCk7Cit2b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnhkcCk7Cit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7CisKKyNlbmRpZiAvKiBNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCmluZGV4IDNjMDQwNDQuLjEzZDRlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNSw5ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEFUSF9QQ0lfVkVSU0lPTiAiMC4xIgogCkBAIC0yOCw4NCArMjYsMTI5IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLwotCXsgMCB9CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uIik7CisKKy8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLworCisjZGVmaW5lIENIQU4yRyhfZnJlcSwgX2lkeCkgIHsgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworI2RlZmluZSBDSEFONUcoX2ZyZXEsIF9pZHgpIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworLyogU29tZSAyIEdIeiByYWRpb3MgYXJlIGFjdHVhbGx5IHR1bmFibGUgb24gMjMxMi0yNzMyCisgKiBvbiA1IE1IeiBzdGVwcywgd2Ugc3VwcG9ydCB0aGUgY2hhbm5lbHMgd2hpY2ggd2Uga25vdworICogd2UgaGF2ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBhbGwgY2FyZHMgdGhvdWdoIHRvIG1ha2UKKyAqIHRoaXMgc3RhdGljICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGF0aDlrXzJnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjJHKDI0MTIsIDApLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNywgMSksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyLCAyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcsIDMpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiwgNCksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3LCA1KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIsIDYpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NywgNyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyLCA4KSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcsIDkpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIsIDEwKSwgLyogQ2hhbm5lbCAxMSAqLworCUNIQU4yRygyNDY3LCAxMSksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiwgMTIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQsIDEzKSwgLyogQ2hhbm5lbCAxNCAqLwogfTsKIAotc3RhdGljIHZvaWQgYXRoX2RldGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisvKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKKyAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93CisgKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQorICogdGhpcyBzdGF0aWMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KKwlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCisJQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCisJQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KKwlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLworCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KKwlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCisJQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCisJQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCisJQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCisJQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLworCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLworfTsKIAotLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLwotCi1zdGF0aWMgdm9pZCBidXNfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQorc3RhdGljIHZvaWQgYXRoX2NhY2hlX2NvbmZfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7Ci0JdTggdTh0bXA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShzYy0+cGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgKHU4ICopJnU4dG1wKTsKLQkqY3N6ID0gKGludCl1OHRtcDsKLQotCS8qCi0JICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgotCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgotCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKLQkgKi8KLQotCWlmICgqY3N6ID09IDApCi0JCSpjc3ogPSBERUZBVUxUX0NBQ0hFTElORSA+PiAyOyAgIC8qIFVzZSB0aGUgZGVmYXVsdCBzaXplICovCi19Ci0KLXN0YXRpYyB2b2lkIGF0aF9zZXRjdXJtb2RlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIHdpcmVsZXNzX21vZGUgbW9kZSkKLXsKLQlzYy0+Y3VyX3JhdGVfdGFibGUgPSBzYy0+aHdfcmF0ZV90YWJsZVttb2RlXTsKLQkvKgotCSAqIEFsbCBwcm90ZWN0aW9uIGZyYW1lcyBhcmUgdHJhbnNtaXRlZCBhdCAyTWIvcyBmb3IKLQkgKiAxMWcsIG90aGVyd2lzZSBhdCAxTWIvcy4KLQkgKiBYWFggc2VsZWN0IHByb3RlY3Rpb24gcmF0ZSBpbmRleCBmcm9tIHJhdGUgdGFibGUuCi0JICovCi0Jc2MtPnNjX3Byb3RyaXggPSAobW9kZSA9PSBBVEg5S19NT0RFXzExRyA/IDEgOiAwKTsKLX0KLQotc3RhdGljIGVudW0gd2lyZWxlc3NfbW9kZSBhdGhfY2hhbjJtb2RlKHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0EpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQTsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0cpCi0JCXJldHVybiBBVEg5S19NT0RFXzExRzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0IpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQjsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQyMCkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOQV9IVDIwOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUMjA7Ci0JZWxzZSBpZiAoY2hhbi0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBQTFVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpCi0JCXJldHVybiBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOR19IVDQwUExVUzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzsKLQotCVdBUk5fT04oMSk7IC8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLQotCXJldHVybiBBVEg5S19NT0RFXzExQjsKKwlzd2l0Y2ggKGNvbmYtPmNoYW5uZWwtPmJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCWlmIChjb25mX2lzX2h0MjAoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkdfSFQyMF07CisJCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwUExVU107CisJCWVsc2UKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFHXTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQlpZiAoY29uZl9pc19odDIwKGNvbmYpKQorCQkJc2MtPmN1cl9yYXRlX3RhYmxlID0KKwkJCSAgc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMU5BX0hUMjBdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTXTsKKwkJZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVNdOworCQllbHNlCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhdGhfdXBkYXRlX3R4cG93KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgdHhwb3c7CiAKLQlpZiAoc2MtPnNjX2N1cnR4cG93ICE9IHNjLT5zY19jb25maWcudHhwb3dsaW1pdCkgewotCQlhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KGFoLCBzYy0+c2NfY29uZmlnLnR4cG93bGltaXQpOworCWlmIChzYy0+Y3VydHhwb3cgIT0gc2MtPmNvbmZpZy50eHBvd2xpbWl0KSB7CisJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIHNjLT5jb25maWcudHhwb3dsaW1pdCk7CiAJCS8qIHJlYWQgYmFjayBpbiBjYXNlIHZhbHVlIGlzIGNsYW1wZWQgKi8KIAkJYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RYUE9XLCAxLCAmdHhwb3cpOwotCQlzYy0+c2NfY3VydHhwb3cgPSB0eHBvdzsKKwkJc2MtPmN1cnR4cG93ID0gdHhwb3c7CiAJfQogfQogCkBAIC0xNzYsMTUwICsyMTksODcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4cmF0ZXM7IGkrKykgewogCQlyYXRlW2ldLmJpdHJhdGUgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVrYnBzIC8gMTAwOwogCQlyYXRlW2ldLmh3X3ZhbHVlID0gcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRlY29kZTsKKwkJaWYgKHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGUpIHsKKwkJCXJhdGVbaV0uaHdfdmFsdWVfc2hvcnQgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlIHwKKwkJCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNob3J0X3ByZWFtYmxlOworCQkJcmF0ZVtpXS5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFOworCQl9CiAJCXNiYW5kLT5uX2JpdHJhdGVzKys7CisKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJSYXRlOiAlMmRNYnBzLCByYXRlY29kZTogJTJkXG4iLAogCQkJcmF0ZVtpXS5iaXRyYXRlIC8gMTAsIHJhdGVbaV0uaHdfdmFsdWUpOwogCX0KIH0KIAotc3RhdGljIGludCBhdGhfc2V0dXBfY2hhbm5lbHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBuY2hhbiwgaSwgYSA9IDAsIGIgPSAwOwotCXU4IHJlZ2NsYXNzaWRzW0FUSF9SRUdDTEFTU0lEU19NQVhdOwotCXUzMiBucmVnY2xhc3MgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRfMmdoejsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kXzVnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzJnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzVnaHo7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7Ci0KLQkvKiBGaWxsIGluIGFoLT5haF9jaGFubmVscyAqLwotCWlmICghYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKGFoLCBBVEhfQ0hBTl9NQVgsICh1MzIgKikmbmNoYW4sCi0JCQkJICAgICAgcmVnY2xhc3NpZHMsIEFUSF9SRUdDTEFTU0lEU19NQVgsCi0JCQkJICAgICAgJm5yZWdjbGFzcywgQ1RSWV9ERUZBVUxULCBmYWxzZSwgMSkpIHsKLQkJdTMyIHJkID0gYWgtPmFoX2N1cnJlbnRSRDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gY29sbGVjdCBjaGFubmVsIGxpc3Q7ICIKLQkJCSJyZWdkb21haW4gbGlrZWx5ICV1IGNvdW50cnkgY29kZSAldVxuIiwKLQkJCXJkLCBDVFJZX0RFRkFVTFQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliYW5kXzJnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQliYW5kXzVnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQljaGFuXzJnaHogPSBzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JY2hhbl81Z2h6ID0gc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0JZm9yIChpID0gMDsgaSA8IG5jaGFuOyBpKyspIHsKLQkJYyA9ICZhaC0+YWhfY2hhbm5lbHNbaV07Ci0JCWlmIChJU19DSEFOXzJHSFooYykpIHsKLQkJCWNoYW5fMmdoelthXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJCWNoYW5fMmdoelthXS5jZW50ZXJfZnJlcSA9IGMtPmNoYW5uZWw7Ci0JCQljaGFuXzJnaHpbYV0ubWF4X3Bvd2VyID0gYy0+bWF4VHhQb3dlcjsKLQotCQkJaWYgKGMtPnByaXZGbGFncyAmIENIQU5ORUxfRElTQUxMT1dfQURIT0MpCi0JCQkJY2hhbl8yZ2h6W2FdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lCU1M7Ci0JCQlpZiAoYy0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKQotCQkJCWNoYW5fMmdoelthXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47Ci0KLQkJCWJhbmRfMmdoei0+bl9jaGFubmVscyA9ICsrYTsKLQotCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICIyTUh6IGNoYW5uZWw6ICVkLCAiCi0JCQkJImNoYW5uZWxGbGFnczogMHgleFxuIiwKLQkJCQljLT5jaGFubmVsLCBjLT5jaGFubmVsRmxhZ3MpOwotCQl9IGVsc2UgaWYgKElTX0NIQU5fNUdIWihjKSkgewotCQkJY2hhbl81Z2h6W2JdLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwotCQkJY2hhbl81Z2h6W2JdLmNlbnRlcl9mcmVxID0gYy0+Y2hhbm5lbDsKLQkJCWNoYW5fNWdoeltiXS5tYXhfcG93ZXIgPSBjLT5tYXhUeFBvd2VyOwotCi0JCQlpZiAoYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ESVNBTExPV19BREhPQykKLQkJCQljaGFuXzVnaHpbYl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQkJCWlmIChjLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpCi0JCQkJY2hhbl81Z2h6W2JdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQotCQkJYmFuZF81Z2h6LT5uX2NoYW5uZWxzID0gKytiOwotCi0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIjVNSHogY2hhbm5lbDogJWQsICIKLQkJCQkiY2hhbm5lbEZsYWdzOiAweCV4XG4iLAotCQkJCWMtPmNoYW5uZWwsIGMtPmNoYW5uZWxGbGFncyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuICBJZiB0aGUgY2hhbm5lbCBpcyByZWFsbHkgYmVpbmcgY2hhbmdlZCwgaXQncyBkb25lCiAgKiBieSByZXNldGluZyB0aGUgY2hpcC4gIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0IGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcKICAqIERNQSwgdGhlbiByZXN0YXJ0IHN0dWZmLgogKi8KLXN0YXRpYyBpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pCitpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpoY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBmYXN0Y2MgPSB0cnVlLCBzdG9wcGVkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWw7CisJaW50IHI7CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoaGNoYW4tPmNoYW5uZWwgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsIHx8Ci0JICAgIGhjaGFuLT5jaGFubmVsRmxhZ3MgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MgfHwKLQkgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0NIQUlOTUFTS19VUERBVEUpIHx8Ci0JICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkgewotCQlpbnQgc3RhdHVzOwotCQkvKgotCQkgKiBUaGlzIGlzIG9ubHkgcGVyZm9ybWVkIGlmIHRoZSBjaGFubmVsIHNldHRpbmdzIGhhdmUKLQkJICogYWN0dWFsbHkgY2hhbmdlZC4KLQkJICoKLQkJICogVG8gc3dpdGNoIGNoYW5uZWxzIGNsZWFyIGFueSBwZW5kaW5nIERNQSBvcGVyYXRpb25zOwotCQkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCi0JCSAqIGhhcmR3YXJlIGF0IHRoZSBuZXcgZnJlcXVlbmN5LCBhbmQgdGhlbiByZS1lbmFibGUKLQkJICogdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhlIGgvdy4KLQkJICovCi0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQkJYXRoX2RyYWludHhxKHNjLCBmYWxzZSk7Ci0JCXN0b3BwZWQgPSBhdGhfc3RvcHJlY3Yoc2MpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKLQkJLyogWFhYOiBkbyBub3QgZmx1c2ggcmVjZWl2ZSBxdWV1ZSBoZXJlLiBXZSBkb24ndCB3YW50Ci0JCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgotCQkgKiBjaGFuZ2luZyBjaGFubmVsLiAqLworCS8qCisJICogVGhpcyBpcyBvbmx5IHBlcmZvcm1lZCBpZiB0aGUgY2hhbm5lbCBzZXR0aW5ncyBoYXZlCisJICogYWN0dWFsbHkgY2hhbmdlZC4KKwkgKgorCSAqIFRvIHN3aXRjaCBjaGFubmVscyBjbGVhciBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uczsKKwkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCisJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQorCSAqIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBoL3cuCisJICovCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCWF0aF9kcmFpbl9hbGxfdHhxKHNjLCBmYWxzZSk7CisJc3RvcHBlZCA9IGF0aF9zdG9wcmVjdihzYyk7CiAKLQkJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKLQkJCWZhc3RjYyA9IGZhbHNlOworCS8qIFhYWDogZG8gbm90IGZsdXNoIHJlY2VpdmUgcXVldWUgaGVyZS4gV2UgZG9uJ3Qgd2FudAorCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgorCSAqIGNoYW5naW5nIGNoYW5uZWwuICovCiAKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkiKCV1IE1IeikgLT4gKCV1IE1IeiksIGNmbGFnczoleCwgY2hhbndpZHRoOiAlZFxuIiwKLQkJCXNjLT5zY19haC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWhjaGFuLT5jaGFubmVsLCBoY2hhbi0+Y2hhbm5lbEZsYWdzLCBzYy0+dHhfY2hhbl93aWR0aCk7CisJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKKwkJZmFzdGNjID0gZmFsc2U7CiAKLQkJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJaWYgKCFhdGg5a19od19yZXNldChhaCwgaGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIGZhc3RjYywgJnN0YXR1cykpIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIgotCQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsIGhjaGFuLT5jaGFubmVsLAotCQkJCQkJICBoY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCQloY2hhbi0+Y2hhbm5lbCwgaGNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCSIoJXUgTUh6KSAtPiAoJXUgTUh6KSwgY2hhbndpZHRoOiAlZFxuIiwKKwkJc2MtPnNjX2FoLT5jdXJjaGFuLT5jaGFubmVsLAorCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgc2MtPnR4X2NoYW5fd2lkdGgpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKworCXIgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGZhc3RjYyk7CisJaWYgKHIpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0ZVTExfUkVTRVQ7Ci0KLQkJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlhdGhfc2V0Y3VybW9kZShzYywgYXRoX2NoYW4ybW9kZShoY2hhbikpOwotCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7CisJCXJldHVybiByOwogCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0NIQUlOTUFTS19VUERBVEU7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9GVUxMX1JFU0VUOworCisJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzdGFydCByZWN2IGxvZ2ljXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKKwlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyLDEyMyArMzEyLDEyMiBAQAogICovCiBzdGF0aWMgdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgbG9uZ2NhbCA9IGZhbHNlOwogCWJvb2wgc2hvcnRjYWwgPSBmYWxzZTsKIAlib29sIGFuaWZsYWcgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdGltZXN0YW1wID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQl1MzIgY2FsX2ludGVydmFsOworCXUzMiBjYWxfaW50ZXJ2YWwsIHNob3J0X2NhbF9pbnRlcnZhbDsKIAotCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCWFoID0gc2MtPnNjX2FoOworCXNob3J0X2NhbF9pbnRlcnZhbCA9IChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSA/CisJCUFUSF9BUF9TSE9SVF9DQUxJTlRFUlZBTCA6IEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUw7CiAKIAkvKgogCSogZG9uJ3QgY2FsaWJyYXRlIHdoZW4gd2UncmUgc2Nhbm5pbmcuCiAJKiB3ZSBhcmUgbW9zdCBsaWtlbHkgbm90IG9uIG91ciBob21lIGNoYW5uZWwuCiAJKi8KLQlpZiAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCXJldHVybjsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCisJCWdvdG8gc2V0X3RpbWVyOwogCiAJLyogTG9uZyBjYWxpYnJhdGlvbiBydW5zIGluZGVwZW5kZW50bHkgb2Ygc2hvcnQgY2FsaWJyYXRpb24uICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2xvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmxvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CiAJCWxvbmdjYWwgPSB0cnVlOwogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOSSwgImxvbmdjYWwgQCVsdVxuIiwgamlmZmllcyk7Ci0JCXNjLT5zY19hbmkuc2NfbG9uZ2NhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5sb25nY2FsX3RpbWVyID0gdGltZXN0YW1wOwogCX0KIAotCS8qIFNob3J0IGNhbGlicmF0aW9uIGFwcGxpZXMgb25seSB3aGlsZSBzY19jYWxkb25lIGlzIGZhbHNlICovCi0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpIHsKLQkJaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX3Nob3J0Y2FsX3RpbWVyKSA+PQotCQkgICAgQVRIX1NIT1JUX0NBTElOVEVSVkFMKSB7CisJLyogU2hvcnQgY2FsaWJyYXRpb24gYXBwbGllcyBvbmx5IHdoaWxlIGNhbGRvbmUgaXMgZmFsc2UgKi8KKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkgeworCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuc2hvcnRjYWxfdGltZXIpID49IHNob3J0X2NhbF9pbnRlcnZhbCkgewogCQkJc2hvcnRjYWwgPSB0cnVlOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksICJzaG9ydGNhbCBAJWx1XG4iLCBqaWZmaWVzKTsKLQkJCXNjLT5zY19hbmkuc2Nfc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7Ci0JCQlzYy0+c2NfYW5pLnNjX3Jlc2V0Y2FsX3RpbWVyID0gdGltZXN0YW1wOworCQkJc2MtPmFuaS5zaG9ydGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkucmVzZXRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5zY19hbmkuc2NfcmVzZXRjYWxfdGltZXIpID49CisJCWlmICgodGltZXN0YW1wIC0gc2MtPmFuaS5yZXNldGNhbF90aW1lcikgPj0KIAkJICAgIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMKSB7Ci0JCQlhdGg5a19od19yZXNldF9jYWx2YWxpZChhaCwgYWgtPmFoX2N1cmNoYW4sCi0JCQkJCQkmc2MtPnNjX2FuaS5zY19jYWxkb25lKTsKLQkJCWlmIChzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCQkJc2MtPnNjX2FuaS5zY19yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkuY2FsZG9uZSA9IGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKGFoKTsKKwkJCWlmIChzYy0+YW5pLmNhbGRvbmUpCisJCQkJc2MtPmFuaS5yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKIAkJfQogCX0KIAogCS8qIFZlcmlmeSB3aGV0aGVyIHdlIG11c3QgY2hlY2sgQU5JICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2NoZWNrYW5pX3RpbWVyKSA+PQotCSAgIEFUSF9BTklfUE9MTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmNoZWNrYW5pX3RpbWVyKSA+PSBBVEhfQU5JX1BPTExJTlRFUlZBTCkgewogCQlhbmlmbGFnID0gdHJ1ZTsKLQkJc2MtPnNjX2FuaS5zY19jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKIAl9CiAKIAkvKiBTa2lwIGFsbCBwcm9jZXNzaW5nIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KIAlpZiAobG9uZ2NhbCB8fCBzaG9ydGNhbCB8fCBhbmlmbGFnKSB7CiAJCS8qIENhbGwgQU5JIHJvdXRpbmUgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChhbmlmbGFnKQotCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+c2NfaGFsc3RhdHMsCi0JCQkJCSAgICAgYWgtPmFoX2N1cmNoYW4pOworCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CiAKIAkJLyogUGVyZm9ybSBjYWxpYnJhdGlvbiBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGxvbmdjYWwgfHwgc2hvcnRjYWwpIHsKIAkJCWJvb2wgaXNjYWxkb25lID0gZmFsc2U7CiAKLQkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJCQkgICAgICAgc2MtPnNjX3J4X2NoYWlubWFzaywgbG9uZ2NhbCwKKwkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5jdXJjaGFuLAorCQkJCQkgICAgICAgc2MtPnJ4X2NoYWlubWFzaywgbG9uZ2NhbCwKIAkJCQkJICAgICAgICZpc2NhbGRvbmUpKSB7CiAJCQkJaWYgKGxvbmdjYWwpCi0JCQkJCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPQorCQkJCQlzYy0+YW5pLm5vaXNlX2Zsb29yID0KIAkJCQkJCWF0aDlrX2h3X2dldGNoYW5fbm9pc2UoYWgsCi0JCQkJCQkJICAgICAgIGFoLT5haF9jdXJjaGFuKTsKKwkJCQkJCQkgICAgICAgYWgtPmN1cmNoYW4pOwogCiAJCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksCiAJCQkJCSJjYWxpYnJhdGUgY2hhbiAldS8leCBuZjogJWRcbiIsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzLAotCQkJCQlzYy0+c2NfYW5pLnNjX25vaXNlX2Zsb29yKTsKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWwsCisJCQkJCWFoLT5jdXJjaGFuLT5jaGFubmVsRmxhZ3MsCisJCQkJCXNjLT5hbmkubm9pc2VfZmxvb3IpOwogCQkJfSBlbHNlIHsKIAkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOWSwKIAkJCQkJImNhbGlicmF0ZSBjaGFuICV1LyV4IGZhaWxlZFxuIiwKLQkJCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MpOworCQkJCQlhaC0+Y3VyY2hhbi0+Y2hhbm5lbCwKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWxGbGFncyk7CiAJCQl9Ci0JCQlzYy0+c2NfYW5pLnNjX2NhbGRvbmUgPSBpc2NhbGRvbmU7CisJCQlzYy0+YW5pLmNhbGRvbmUgPSBpc2NhbGRvbmU7CiAJCX0KIAl9CiAKK3NldF90aW1lcjoKIAkvKgogCSogU2V0IHRpbWVyIGludGVydmFsIGJhc2VkIG9uIHByZXZpb3VzIHJlc3VsdHMuCiAJKiBUaGUgaW50ZXJ2YWwgbXVzdCBiZSB0aGUgc2hvcnRlc3QgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgQU5JLAogCSogc2hvcnQgY2FsaWJyYXRpb24gYW5kIGxvbmcgY2FsaWJyYXRpb24uCiAJKi8KIAljYWxfaW50ZXJ2YWwgPSBBVEhfTE9OR19DQUxJTlRFUlZBTDsKLQlpZiAoc2MtPnNjX2FoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKKwlpZiAoc2MtPnNjX2FoLT5jb25maWcuZW5hYmxlX2FuaSkKIAkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilBVEhfQU5JX1BPTExJTlRFUlZBTCk7Ci0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCWNhbF9pbnRlcnZhbCA9IG1pbihjYWxfaW50ZXJ2YWwsICh1MzIpQVRIX1NIT1JUX0NBTElOVEVSVkFMKTsKKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkKKwkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilzaG9ydF9jYWxfaW50ZXJ2YWwpOwogCi0JbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhjYWxfaW50ZXJ2YWwpKTsKKwltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGNhbF9pbnRlcnZhbCkpOwogfQogCiAvKgogICogVXBkYXRlIHR4L3J4IGNoYWlubWFzay4gRm9yIGxlZ2FjeSBhc3NvY2lhdGlvbiwKICAqIGhhcmQgY29kZSBjaGFpbm1hc2sgdG8gMXgxLCBmb3IgMTFuIGFzc29jaWF0aW9uLCB1c2UKLSAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbi4KKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiwgZm9yIGJ0IGNvZXhpc3RlbmNlLCB1c2UKKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiBldmVuIGluIGxlZ2FjeSBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQogewogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCWlmIChpc19odCkgewotCQlzYy0+c2NfdHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQkJc2MtPnNjX3J4X2NoYWlubWFzayA9IHNjLT5zY19haC0+YWhfY2Fwcy5yeF9jaGFpbm1hc2s7CisJaWYgKGlzX2h0IHx8CisJICAgIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CVF9DT0VYKSkgeworCQlzYy0+dHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzazsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy5yeF9jaGFpbm1hc2s7CiAJfSBlbHNlIHsKLQkJc2MtPnNjX3R4X2NoYWlubWFzayA9IDE7Ci0JCXNjLT5zY19yeF9jaGFpbm1hc2sgPSAxOworCQlzYy0+dHhfY2hhaW5tYXNrID0gMTsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IDE7CiAJfQogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJ0eCBjaG1hc2s6ICVkLCByeCBjaG1hc2s6ICVkXG4iLAotCQlzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrKTsKKwkJc2MtPnR4X2NoYWlubWFzaywgc2MtPnJ4X2NoYWlubWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9ub2RlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKQEAgLTQ3Niw3ICs0NTUsNyBAQAogc3RhdGljIHZvaWQgYXRoOWtfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7Ci0JdTMyIHN0YXR1cyA9IHNjLT5zY19pbnRyc3RhdHVzOworCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTQ5NiwxMyArNDc1LDEzIEBACiAJfQogCiAJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldikKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZGV2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAllbnVtIGF0aDlrX2ludCBzdGF0dXM7CiAJYm9vbCBzY2hlZCA9IGZhbHNlOwogCkBAIC01MjcsNyArNTA2LDcgQEAKIAkJICovCiAJCWF0aDlrX2h3X2dldGlzcihhaCwgJnN0YXR1cyk7CS8qIE5COiBjbGVhcnMgSVNSIHRvbyAqLwogCi0JCXN0YXR1cyAmPSBzYy0+c2NfaW1hc2s7CS8qIGRpc2NhcmQgdW5hc2tlZC1mb3IgYml0cyAqLworCQlzdGF0dXMgJj0gc2MtPmltYXNrOwkvKiBkaXNjYXJkIHVuYXNrZWQtZm9yIGJpdHMgKi8KIAogCQkvKgogCQkgKiBJZiB0aGVyZSBhcmUgbm8gc3RhdHVzIGJpdHMgc2V0LCB0aGVuIHRoaXMgaW50ZXJydXB0IHdhcyBub3QKQEAgLTUzNiw3ICs1MTUsOCBAQAogCQlpZiAoIXN0YXR1cykKIAkJCXJldHVybiBJUlFfTk9ORTsKIAotCQlzYy0+c2NfaW50cnN0YXR1cyA9IHN0YXR1czsKKwkJc2MtPmludHJzdGF0dXMgPSBzdGF0dXM7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKIAkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9GQVRBTCkgewogCQkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTU4Myw0NSArNTYzLDM5IEBACiAJCQkJICogaXQgd2lsbCBjbGVhciB3aGF0ZXZlciBjb25kaXRpb24gY2F1c2VkCiAJCQkJICogdGhlIGludGVycnVwdC4KIAkJCQkgKi8KLQkJCQlhdGg5a19od19wcm9jbWliZXZlbnQoYWgsICZzYy0+c2NfaGFsc3RhdHMpOwotCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCQkJCWF0aDlrX2h3X3Byb2NtaWJldmVudChhaCwgJnNjLT5ub2Rlc3RhdHMpOworCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCQkJfQogCQkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9USU1fVElNRVIpIHsKLQkJCQlpZiAoIShhaC0+YWhfY2Fwcy5od19jYXBzICYKKwkJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCQkgICAgICBBVEg5S19IV19DQVBfQVVUT1NMRUVQKSkgewogCQkJCQkvKiBDbGVhciBSeEFib3J0IGJpdCBzbyB0aGF0IHdlIGNhbgogCQkJCQkgKiByZWNlaXZlIGZyYW1lcyAqLworCQkJCQlhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpOwogCQkJCQlhdGg5a19od19zZXRyeGFib3J0KGFoLCAwKTsKIAkJCQkJc2NoZWQgPSB0cnVlOworCQkJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQkVBQ09OOwogCQkJCX0KIAkJCX0KKwkJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFNGT09SKSB7CisJCQkJLyogRklYTUU6IEhhbmRsZSB0aGlzIGludGVycnVwdCBmb3IgcG93ZXIgc2F2ZSAqLworCQkJCXNjaGVkID0gdHJ1ZTsKKwkJCX0KIAkJfQorCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9IHdoaWxlICgwKTsKIAogCWF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzYywgc3RhdHVzKTsKIAogCWlmIChzY2hlZCkgewogCQkvKiB0dXJuIG9mZiBldmVyeSBpbnRlcnJ1cHQgZXhjZXB0IFNXQkEgKi8KLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIChzYy0+c2NfaW1hc2sgJiBBVEg5S19JTlRfU1dCQSkpOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9TV0JBKSk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5pbnRyX3RxKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2dldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNjLT5zY19haC0+YWhfbmNoYW47IGkrKykgewotCQlpZiAoc2MtPnNjX2FoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsID09IGNoYW4tPmNlbnRlcl9mcmVxKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgdTMyIGF0aF9nZXRfZXh0Y2hhbm1vZGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQpAQCAtNjY0LDIwICs2MzgsOSBAQAogCXJldHVybiBjaGFubW9kZTsKIH0KIAotc3RhdGljIGludCBhdGhfa2V5c2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsCi0JICAgICAgIHN0cnVjdCBhdGg5a19rZXl2YWwgKmhrLCBjb25zdCB1OCBtYWNbRVRIX0FMRU5dKQotewotCWJvb2wgc3RhdHVzOwotCi0Jc3RhdHVzID0gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwKLQkJa2V5aXgsIGhrLCBtYWMsIGZhbHNlKTsKLQotCXJldHVybiBzdGF0dXMgIT0gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoX3NldGtleV90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsIGNvbnN0IHU4ICprZXksCi0JCQkgICBzdHJ1Y3QgYXRoOWtfa2V5dmFsICpoaywKLQkJCSAgIGNvbnN0IHU4ICphZGRyKQorCQkJICAgc3RydWN0IGF0aDlrX2tleXZhbCAqaGssIGNvbnN0IHU4ICphZGRyLAorCQkJICAgYm9vbCBhdXRoZW50aWNhdG9yKQogewogCWNvbnN0IHU4ICprZXlfcnhtaWM7CiAJY29uc3QgdTggKmtleV90eG1pYzsKQEAgLTY4NiwyNiArNjQ5LDMzIEBACiAJa2V5X3J4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVk7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCS8qIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gKi8KLQkJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKLQkJcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4LCBoaywgYWRkcik7Ci0JfQotCWlmICghc2MtPnNjX3NwbGl0bWljKSB7CiAJCS8qCi0JCSAqIGRhdGEga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsCi0JCSAqIHRoZSBoYWwgaGFuZGxlcyB0aGUgTUlDIGtleXMgYXQgaW5kZXgrNjQuCisJCSAqIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gLSBvbmx5IHR3byBrZXkgY2FjaGUgZW50cmllcyBhcmUgdXNlZAorCQkgKiByZWdhcmRsZXNzIG9mIHNwbGl0bWljIGNhcGFiaWxpdHkgc2luY2UgZ3JvdXAga2V5IGlzIG9ubHkKKwkJICogdXNlZCBlaXRoZXIgZm9yIFRYIG9yIFJYLgogCQkgKi8KKwkJaWYgKGF1dGhlbnRpY2F0b3IpIHsKKwkJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQkJbWVtY3B5KGhrLT5rdl90eG1pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQl9CisJCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIGFkZHIpOworCX0KKwlpZiAoIXNjLT5zcGxpdG1pYykgeworCQkvKiBUWCBhbmQgUlgga2V5cyBzaGFyZSB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkuICovCiAJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfcnhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CiAJCW1lbWNweShoay0+a3ZfdHhtaWMsIGtleV90eG1pYywgc2l6ZW9mKGhrLT5rdl90eG1pYykpOwotCQlyZXR1cm4gYXRoX2tleXNldChzYywga2V5aXgsIGhrLCBhZGRyKTsKKwkJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgYWRkcik7CiAJfQotCS8qCi0JICogVFgga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsIFJYIGtleSBhdCArMzIuCi0JICogVGhlIGhhbCBoYW5kbGVzIHRoZSBNSUMga2V5cyBhdCBpbmRleCs2NC4KLQkgKi8KKworCS8qIFNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzIGZvciBUWCBhbmQgUlggKi8KKworCS8qIFRYIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LCBSWCBrZXkgYXQgKzMyLiAqLwogCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JaWYgKCFhdGhfa2V5c2V0KHNjLCBrZXlpeCwgaGssIE5VTEwpKSB7Ci0JCS8qIFR4bWljIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KKwlpZiAoIWF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgTlVMTCkpIHsKKwkJLyogVFggTUlDIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJTZXR0aW5nIFRYIE1JQyBLZXkgRmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC03MTMsMjAgKzY4MywyMCBAQAogCiAJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKIAkvKiBYWFggZGVsZXRlIHR4IGtleSBvbiBmYWlsdXJlPyAqLwotCXJldHVybiBhdGhfa2V5c2V0KHNjLCBrZXlpeCArIDMyLCBoaywgYWRkcik7CisJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4ICsgMzIsIGhrLCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCWludCBpOwogCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heCAvIDI7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgfHwKLQkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkpCisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heCAvIDI7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgc2MtPmtleW1hcCkgfHwKKwkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQljb250aW51ZTsgLyogQXQgbGVhc3Qgb25lIHBhcnQgb2YgVEtJUCBrZXkgYWxsb2NhdGVkICovCi0JCWlmIChzYy0+c2Nfc3BsaXRtaWMgJiYKLQkJICAgICh0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApIHx8Ci0JCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJaWYgKHNjLT5zcGxpdG1pYyAmJgorCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJY29udGludWU7IC8qIEF0IGxlYXN0IG9uZSBwYXJ0IG9mIFRLSVAga2V5IGFsbG9jYXRlZCAqLwogCiAJCS8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIFRLSVAga2V5ICovCkBAIC03NDAsNTUgKzcxMCw1NSBAQAogCWludCBpOwogCiAJLyogRmlyc3QsIHRyeSB0byBmaW5kIHNsb3RzIHRoYXQgd291bGQgbm90IGJlIGF2YWlsYWJsZSBmb3IgVEtJUC4gKi8KLQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyA0OyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICAodGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+c2Nfa2V5bWFwKSkpCisJaWYgKHNjLT5zcGxpdG1pYykgeworCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gNDsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpOwotCQkJaWYgKCF0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJCWlmICghdGVzdF9iaXQoaSArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyAzMjsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICh0ZXN0X2JpdChpICwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCkpKQorCQkJaWYgKCF0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyAzMiwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSkpCisJCQlpZiAoIXRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpICsgNjQgKyAzMjsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyAyOyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gMjsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSkKIAkJCQlyZXR1cm4gaTsKLQkJCWlmICh0ZXN0X2JpdChpLCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICF0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQkJaWYgKHRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgIXRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKIAkJfQogCX0KIAogCS8qIE5vIHBhcnRpYWxseSB1c2VkIFRLSVAgc2xvdHMsIHBpY2sgYW55IGF2YWlsYWJsZSBzbG90ICovCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heDsgaSsrKSB7CisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heDsgaSsrKSB7CiAJCS8qIERvIG5vdCBhbGxvdyBzbG90cyB0aGF0IGNvdWxkIGJlIG5lZWRlZCBmb3IgVEtJUCBncm91cCBrZXlzCiAJCSAqIHRvIGJlIHVzZWQuIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZSByZW1vdmVkIGlmIHdlIGtub3cgdGhhdAogCQkgKiBUS0lQIHdpbGwgbm90IGJlIHVzZWQuICovCiAJCWlmIChpID49IDY0ICYmIGkgPCA2NCArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7CisJCWlmIChzYy0+c3BsaXRtaWMpIHsKIAkJCWlmIChpID49IDMyICYmIGkgPCAzMiArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChpID49IDY0ICsgMzIgJiYgaSA8IDY0ICsgMzIgKyBJRUVFODAyMTFfV0VQX05LSUQpCiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXRlc3RfYml0KGksIHNjLT5zY19rZXltYXApKQorCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApKQogCQkJcmV0dXJuIGk7IC8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIGtleSAqLwogCX0KIApAQCAtNzk3LDcgKzc2Nyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoX2tleV9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIGNvbnN0IHU4ICphZGRyLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGF0aDlrX2tleXZhbCBoazsKQEAgLTgxOCw3ICs3ODksNyBAQAogCQloay5rdl90eXBlID0gQVRIOUtfQ0lQSEVSX0FFU19DQ007CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaGsua3ZfbGVuID0ga2V5LT5rZXlsZW47CkBAIC04MjksMTAgKzgwMCwxMCBAQAogCQkgKiBuZWVkIHRvIGNoYW5nZSB3aXRoIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KIAkJaWR4ID0ga2V5LT5rZXlpZHg7CiAJfSBlbHNlIGlmIChrZXktPmtleWlkeCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCQlpZiAoV0FSTl9PTighc3RhKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJbWFjID0gc3RhLT5hZGRyOwogCi0JCW1hYyA9IGFkZHI7Ci0JCXZpZiA9IHNjLT5zY192YXBzWzBdOwogCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCQkvKiBPbmx5IGtleWlkeCAwIHNob3VsZCBiZSB1c2VkIHdpdGggdW5pY2FzdCBrZXksIGJ1dAogCQkJICogYWxsb3cgdGhpcyBmb3IgY2xpZW50IG1vZGUgZm9yIG5vdy4gKi8KQEAgLTg0MCwyOSArODExLDMzIEBACiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU87CiAJfSBlbHNlIHsKLQkJbWFjID0gYWRkcjsKKwkJaWYgKFdBUk5fT04oIXN0YSkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCW1hYyA9IHN0YS0+YWRkcjsKKwogCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCiAJCQlpZHggPSBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHNjKTsKIAkJZWxzZQogCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3Qoc2MpOwogCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlPOyAvKiBubyBmcmVlIGtleSBjYWNoZSBlbnRyaWVzICovCisJCQlyZXR1cm4gLUVOT1NQQzsgLyogbm8gZnJlZSBrZXkgY2FjaGUgZW50cmllcyAqLwogCX0KIAogCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJcmV0ID0gYXRoX3NldGtleV90a2lwKHNjLCBpZHgsIGtleS0+a2V5LCAmaGssIG1hYyk7CisJCXJldCA9IGF0aF9zZXRrZXlfdGtpcChzYywgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMsCisJCQkJICAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKTsKIAllbHNlCi0JCXJldCA9IGF0aF9rZXlzZXQoc2MsIGlkeCwgJmhrLCBtYWMpOworCQlyZXQgPSBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBpZHgsICZoaywgbWFjKTsKIAogCWlmICghcmV0KQogCQlyZXR1cm4gLUVJTzsKIAotCXNldF9iaXQoaWR4LCBzYy0+c2Nfa2V5bWFwKTsKKwlzZXRfYml0KGlkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnID09IEFMR19US0lQKSB7Ci0JCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCk7CisJCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5rZXltYXApOworCQlpZiAoc2MtPnNwbGl0bWljKSB7CisJCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+a2V5bWFwKTsKKwkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJCX0KIAl9CiAKQEAgLTg3NSwxOCArODUwLDE5IEBACiAJaWYgKGtleS0+aHdfa2V5X2lkeCA8IElFRUU4MDIxMV9XRVBfTktJRCkKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPnNjX2tleW1hcCk7CisJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKQogCQlyZXR1cm47CiAKLQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCWlmIChzYy0+c2Nfc3BsaXRtaWMpIHsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApOworCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyA2NCwgc2MtPmtleW1hcCk7CisJaWYgKHNjLT5zcGxpdG1pYykgeworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgMzIsIHNjLT5rZXltYXApOworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvKQorc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKIHsKICNkZWZpbmUJQVRIOUtfSFRfQ0FQX01BWFJYQU1QRFVfNjU1MzYgMHgzCS8qIDIgXiAxNiAqLwogI2RlZmluZQlBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfOCAweDYJCS8qIDggdXNlYyAqLwpAQCAtODk5LDEwICs4NzUsMjMgQEAKIAogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IEFUSDlLX0hUX0NBUF9NQVhSWEFNUERVXzY1NTM2OwogCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfODsKKwogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7Ci0JaHRfaW5mby0+bWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKworCXN3aXRjaChzYy0+cnhfY2hhaW5tYXNrKSB7CisJY2FzZSAxOgorCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCWJyZWFrOworCWNhc2UgMzoKKwljYXNlIDU6CisJY2FzZSA3OgorCWRlZmF1bHQ6CisJCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMV0gPSAweGZmOworCQlicmVhazsKKwl9CisKIAlodF9pbmZvLT5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwogfQogCkBAIC05MTAsMzYgKzg5OSwzMyBAQAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gQVNTT0MgJWQsIGJzc2lkOiAlcE1cbiIsCi0JCQlic3NfY29uZi0+YWlkLCBzYy0+c2NfY3VyYnNzaWQpOworCQkJYnNzX2NvbmYtPmFpZCwgc2MtPmN1cmJzc2lkKTsKIAogCQkvKiBOZXcgYXNzb2NpYXRpb24sIHN0b3JlIGFpZCAqLwogCQlpZiAoYXZwLT5hdl9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJc2MtPnNjX2N1cmFpZCA9IGJzc19jb25mLT5haWQ7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgc2MtPnNjX2N1cmJzc2lkLAotCQkJCQkgICAgICAgc2MtPnNjX2N1cmFpZCk7CisJCQlzYy0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQl9CiAKIAkJLyogQ29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIDApOwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAKIAkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7Ci0JCXNjLT5zY19oYWxzdGF0cy5uc19hdmdyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyYXRlID0gQVRIX1JBVEVfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJCXNjLT5ub2Rlc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3R4cmF0ZSA9IEFUSF9SQVRFX0RVTU1ZX01BUktFUjsKIAogCQkvKiBTdGFydCBBTkkgKi8KLQkJbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLAotCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKLQorCQltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSF9BTklfUE9MTElOVEVSVkFMKSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNTT0NcbiIpOwotCQlzYy0+c2NfY3VyYWlkID0gMDsKKwkJc2MtPmN1cmFpZCA9IDA7CiAJfQogfQogCkBAIC05NDcsNiArOTMzLDM5IEBACiAvKgkgTEVEIGZ1bmN0aW9ucwkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgYXRoX2xlZF9ibGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgYXRoX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX0FTU09DSUFURUQpKQorCQlyZXR1cm47CisKKwlpZiAoKHNjLT5sZWRfb25fZHVyYXRpb24gPT0gQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFKSB8fAorCSAgICAoc2MtPmxlZF9vZmZfZHVyYXRpb24gPT0gQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSkpCisJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCWVsc2UKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCQkgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8gMSA6IDApOworCisJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywKKwkJCSAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8KKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vZmZfZHVyYXRpb24pIDoKKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vbl9kdXJhdGlvbikpOworCisJc2MtPmxlZF9vbl9kdXJhdGlvbiA9IHNjLT5sZWRfb25fY250ID8KKwkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSkgOgorCQkJQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb2ZmX2R1cmF0aW9uID0gc2MtPmxlZF9vZmZfY250ID8KKwkJCW1heCgoQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSAtIHNjLT5sZWRfb2ZmX2NudCksIDEwKSA6CisJCQlBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb25fY250ID0gc2MtPmxlZF9vZmZfY250ID0gMDsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKQorCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwllbHNlCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Cit9CisKIHN0YXRpYyB2b2lkIGF0aF9sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CkBAIC05NTYsMTYgKzk3NSwyNyBAQAogCXN3aXRjaCAoYnJpZ2h0bmVzcykgewogCWNhc2UgTEVEX09GRjoKIAkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQorCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCi0JCQkJKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgPyAxIDoKLQkJCQkhIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfQVNTT0NJQVRFRCkpOworCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb2ZmX2NudCsrOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTEVEX0ZVTEw6Ci0JCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpCisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJCSAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb25fY250Kys7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMDAxLDYgKzEwMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5hc3NvY19sZWQpOwogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKQEAgLTEwMjAsOSArMTA1MSwxMSBAQAogCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KIAlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOworCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cmFkaW9fbGVkLm5hbWUsIHNpemVvZihzYy0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cmFkaW9fbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKIAlpZiAocmV0KQpAQCAtMTAzMCw3ICsxMDYzLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKHNjLT5odyk7CiAJc25wcmludGYoc2MtPmFzc29jX2xlZC5uYW1lLCBzaXplb2Yoc2MtPmFzc29jX2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKIAlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPmFzc29jX2xlZCwgdHJpZ2dlcik7CiAJc2MtPmFzc29jX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfQVNTT0M7CiAJaWYgKHJldCkKQEAgLTEwMzgsNyArMTA3MSw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShzYy0+aHcpOwogCXNucHJpbnRmKHNjLT50eF9sZWQubmFtZSwgc2l6ZW9mKHNjLT50eF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnR4Iiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CiAJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIHRyaWdnZXIpOwogCXNjLT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOwogCWlmIChyZXQpCkBAIC0xMDQ2LDcgKzEwNzksNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cnhfbGVkLm5hbWUsIHNpemVvZihzYy0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKIAlpZiAocmV0KQpAQCAtMTA1OCwzMiArMTA5MSwyMiBAQAogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyoJUmZraWxsCSAgICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKKwlpbnQgcjsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLAotCQkJICAgIGZhbHNlLCAmc3RhdHVzKSkgeworCisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCisJaWYgKHIpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIKLQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQlhdGg5a19od19taHoyaWVlZShhaCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIsCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKQEAgLTEwOTUsMTAgKzExMTgsMTAgQEAKIAl9CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIEFUSF9JRl9JRF9BTlkpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCS8qIFJlLUVuYWJsZSAgaW50ZXJydXB0cyAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCiAJLyogRW5hYmxlIExFRCAqLwogCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIEFUSF9MRURfUElOLApAQCAtMTEwNiwxNCArMTEyOSwxNiBAQAogCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBBVEhfTEVEX1BJTiwgMCk7CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHNjLT5ody0+Y29uZi5jaGFubmVsOworCWludCByOwogCi0KKwlhdGg5a19wc193YWtldXAoc2MpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KQEAgLTExMjMsMzggKzExNDgsMzcgQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CiAKLQlhdGhfZHJhaW50eHEoc2MsIGZhbHNlKTsJLyogY2xlYXIgcGVuZGluZyB0eCBmcmFtZXMgKi8KKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCWF0aF9zdG9wcmVjdihzYyk7CQkvKiB0dXJuIG9mZiBmcmFtZSByZWN2ICovCiAJYXRoX2ZsdXNocmVjdihzYyk7CQkvKiBmbHVzaCByZWN2IHF1ZXVlICovCiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX3J4X2NoYWlubWFzaywKLQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsCi0JCQkgICAgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCWlmIChyKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgJXUgKCV1TWh6KSAiCi0JCQkiZmxhZ3MgMHgleCBoYWwgc3RhdHVzICV1XG4iLAotCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyksCi0JCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MsIHN0YXR1cyk7CisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKIAlhdGg5a19od19waHlfZGlzYWJsZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPmFoX3Jma2lsbF9wb2xhcml0eTsKKwlyZXR1cm4gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIGFoLT5yZmtpbGxfZ3BpbykgPT0KKwkJCQkgIGFoLT5yZmtpbGxfcG9sYXJpdHk7CiB9CiAKIC8qIGgvdyByZmtpbGwgcG9sbCBmdW5jdGlvbiAqLwpAQCAtMTIzOCw3ICsxMjYyLDcgQEAKIAl9CiAKIAlzbnByaW50ZihzYy0+cmZfa2lsbC5yZmtpbGxfbmFtZSwgc2l6ZW9mKHNjLT5yZl9raWxsLnJma2lsbF9uYW1lKSwKLQkJImF0aDlrLSVzOnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXNjLT5yZl9raWxsLnJma2lsbC0+bmFtZSA9IHNjLT5yZl9raWxsLnJma2lsbF9uYW1lOwogCXNjLT5yZl9raWxsLnJma2lsbC0+ZGF0YSA9IHNjOwogCXNjLT5yZl9raWxsLnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gYXRoX3N3X3RvZ2dsZV9yYWRpbzsKQEAgLTEyNTEsNyArMTI3NSw3IEBACiAvKiBEZWluaXRpYWxpemUgcmZraWxsICovCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X3Jma2lsbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9SRktJTExfUkVHSVNURVJFRCkgewpAQCAtMTI2Myw3ICsxMjg3LDcgQEAKIAogc3RhdGljIGludCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JaWYgKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKIAkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAogCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7CiAKQEAgLTEyNzQsMTMgKzEyOTgsNyBAQAogCQkJcmZraWxsX2ZyZWUoc2MtPnJmX2tpbGwucmZraWxsKTsKIAogCQkJLyogRGVpbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KLQkJCWF0aF9kZXRhY2goc2MpOwotCQkJaWYgKHNjLT5wZGV2LT5pcnEpCi0JCQkJZnJlZV9pcnEoc2MtPnBkZXYtPmlycSwgc2MpOwotCQkJcGNpX2lvdW5tYXAoc2MtPnBkZXYsIHNjLT5tZW0pOwotCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHNjLT5wZGV2LCAwKTsKLQkJCXBjaV9kaXNhYmxlX2RldmljZShzYy0+cGRldik7Ci0JCQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCQkJYXRoX2NsZWFudXAoc2MpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSB7CiAJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQ7CkBAIC0xMjkxLDE4ICsxMzA5LDM5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JGS0lMTCAqLwogCi1zdGF0aWMgdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlhdGhfZGV0YWNoKHNjKTsKKwlmcmVlX2lycShzYy0+aXJxLCBzYyk7CisJYXRoX2J1c19jbGVhbnVwKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworfQorCit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJaW50IGkgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEFUSCBod1xuIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCiAJYXRoX2RlaW5pdF9yZmtpbGwoc2MpOwogI2VuZGlmCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKKwljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKKwl9CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGhfdHhfY2xlYW51cChzYyk7CkBAIC0xMzIwLDExICsxMzU5LDEyIEBACiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGhfaW5pdCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IE5VTEw7CisJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwogCWludCBzdGF0dXM7CiAJaW50IGVycm9yID0gMCwgaTsKIAlpbnQgY3N6ID0gMDsKQEAgLTEzMzUsNTUgKzEzNzUsNTIgQEAKIAlpZiAoYXRoOWtfaW5pdF9kZWJ1ZyhzYykgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmNvbl90YXNrbGV0LCBhdGg5a19iZWFjb25fdGFza2xldCwKKwl0YXNrbGV0X2luaXQoJnNjLT5iY29uX3Rhc2tsZXQsIGF0aF9iZWFjb25fdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylzYyk7CiAKIAkvKgogCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKIAkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCiAJICovCi0JYnVzX3JlYWRfY2FjaGVzaXplKHNjLCAmY3N6KTsKKwlhdGhfcmVhZF9jYWNoZXNpemUoc2MsICZjc3opOwogCS8qIFhYWCBhc3NlcnQgY3N6IGlzIG5vbi16ZXJvICovCi0Jc2MtPnNjX2NhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCBzYy0+bWVtLCAmc3RhdHVzKTsKKwlhaCA9IGF0aDlrX2h3X2F0dGFjaChkZXZpZCwgc2MsICZzdGF0dXMpOwogCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiVW5hYmxlIHRvIGF0dGFjaCBoYXJkd2FyZTsgSEFMIHN0YXR1cyAldVxuIiwgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gYXR0YWNoIGhhcmR3YXJlOyBIQUwgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQllcnJvciA9IC1FTlhJTzsKIAkJZ290byBiYWQ7CiAJfQogCXNjLT5zY19haCA9IGFoOwogCiAJLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQlzYy0+c2Nfa2V5bWF4ID0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoc2MtPnNjX2tleW1heCA+IEFUSF9LRVlNQVgpIHsKKwlzYy0+a2V5bWF4ID0gYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoc2MtPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgc2MtPnNjX2tleW1heCk7Ci0JCXNjLT5zY19rZXltYXggPSBBVEhfS0VZTUFYOworCQkJQVRIX0tFWU1BWCwgc2MtPmtleW1heCk7CisJCXNjLT5rZXltYXggPSBBVEhfS0VZTUFYOwogCX0KIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAogCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzYy0+c2Nfa2V5bWF4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNjLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQoYWgsICh1MTYpIGkpOwogCi0JLyogQ29sbGVjdCB0aGUgY2hhbm5lbCBsaXN0IHVzaW5nIHRoZSBkZWZhdWx0IGNvdW50cnkgY29kZSAqLwotCi0JZXJyb3IgPSBhdGhfc2V0dXBfY2hhbm5lbHMoc2MpOwotCWlmIChlcnJvcikKKwlpZiAoYXRoOWtfcmVnZF9pbml0KHNjLT5zY19haCkpCiAJCWdvdG8gYmFkOwogCiAJLyogZGVmYXVsdCB0byBNT05JVE9SIG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0KKwlzYy0+c2NfYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAKIAkvKiBTZXR1cCByYXRlIHRhYmxlcyAqLwogCkBAIC0xNDEyLDcgKzE0NDksNyBAQAogCQlnb3RvIGJhZDI7CiAJfQogCi0Jc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIX0NBQlFfUkVBRFlfVElNRTsKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOwogCWF0aF9jYWJxX3VwZGF0ZShzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKQEAgLTE0NDksOCArMTQ4Niw4IEBACiAJLyogSW5pdGlhbGl6ZXMgdGhlIG5vaXNlIGZsb29yIHRvIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLgogCSAqIExhdGVyIG9uIHRoaXMgd2lsbCBiZSB1cGRhdGVkIGR1cmluZyBBTkkgcHJvY2Vzc2luZy4gKi8KIAotCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPSBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUjsKLQlzZXR1cF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKwlzYy0+YW5pLm5vaXNlX2Zsb29yID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CisJc2V0dXBfdGltZXIoJnNjLT5hbmkudGltZXIsIGF0aF9hbmlfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX0NJUEhFUiwKIAkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkpIHsKQEAgLTE0NzYsNjAgKzE1MTMsNjIgQEAKIAkJCQkgICAgICBBVEg5S19DSVBIRVJfTUlDLCBOVUxMKQogCSAgICAmJiBhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKIAkJCQkgICAgICAwLCBOVUxMKSkKLQkJc2MtPnNjX3NwbGl0bWljID0gMTsKKwkJc2MtPnNwbGl0bWljID0gMTsKIAogCS8qIHR1cm4gb24gbWNhc3Qga2V5IHNlYXJjaCBpZiBwb3NzaWJsZSAqLwogCWlmICghYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQogCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMSwKIAkJCQkJICAgICAxLCBOVUxMKTsKIAotCXNjLT5zY19jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKLQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXRfb3ZlcnJpZGUgPSAwOworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKIAogCS8qIDExbiBDYXBhYmlsaXRpZXMgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7CiAJfQogCi0Jc2MtPnNjX3R4X2NoYWlubWFzayA9IGFoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQlzYy0+c2NfcnhfY2hhaW5tYXNrID0gYWgtPmFoX2NhcHMucnhfY2hhaW5tYXNrOworCXNjLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7CisJc2MtPnJ4X2NoYWlubWFzayA9IGFoLT5jYXBzLnJ4X2NoYWlubWFzazsKIAogCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9ESVZFUlNJVFksIDEsIHRydWUsIE5VTEwpOwogCXNjLT5yeC5kZWZhbnQgPSBhdGg5a19od19nZXRkZWZhbnRlbm5hKGFoKTsKIAotCWF0aDlrX2h3X2dldG1hYyhhaCwgc2MtPnNjX215YWRkcik7Ci0JaWYgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKSB7Ci0JCWF0aDlrX2h3X2dldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCUFUSF9TRVRfVkFQX0JTU0lEX01BU0soc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JfQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJbWVtY3B5KHNjLT5ic3NpZG1hc2ssIGF0aF9iY2FzdF9tYWMsIEVUSF9BTEVOKTsKIAogCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBBVEg5S19TTE9UX1RJTUVfOTsJLyogZGVmYXVsdCB0byBzaG9ydCBzbG90IHRpbWUgKi8KIAogCS8qIGluaXRpYWxpemUgYmVhY29uIHNsb3RzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykKLQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IEFUSF9JRl9JRF9BTlk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9CiAKIAkvKiBzYXZlIE1JU0MgY29uZmlndXJhdGlvbnMgKi8KLQlzYy0+c2NfY29uZmlnLnN3QmVhY29uUHJvY2VzcyA9IDE7CisJc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MgPSAxOwogCiAJLyogc2V0dXAgY2hhbm5lbHMgYW5kIHJhdGVzICovCiAKLQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0KLQkJc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKIAlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0KIAkJc2MtPnJhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KKwkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CiAKLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHNjLT5zY19haC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5jaGFubmVscyA9Ci0JCQlzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKIAkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9CiAJCQlzYy0+cmF0ZXNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKKwkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCiAJcmV0dXJuIDA7CiBiYWQyOgogCS8qIGNsZWFudXAgdHggcXVldWVzICovCkBAIC0xNTQ0LDkgKzE1ODMsNDkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQorCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKKworCWh3LT53aXBoeS0+cmVnX25vdGlmaWVyID0gYXRoOWtfcmVnX25vdGlmaWVyOworCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmlmKTsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7CisKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworfQorCitpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCWludCBlcnJvciA9IDAsIGk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkF0dGFjaCBBVEggaHdcbiIpOwpAQCAtMTU1NywzNyArMTYzNiwxNiBAQAogCiAJLyogZ2V0IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgYW5kIHNldCBpbiBtYWM4MDIxMSAqLwogCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNjLT5zY19teWFkZHIpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPnF1ZXVlcyA9IDQ7Ci0JaHctPm1heF9yYXRlcyA9IDQ7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOwotCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmFwKTsKLQotCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7Ci0KLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKLQkJc2V0dXBfaHRfY2FwKCZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcCgmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5odF9jYXApOworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKIAl9CiAKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0JJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCiAJLyogaW5pdGlhbGl6ZSB0eC9yeCBlbmdpbmUgKi8KIAllcnJvciA9IGF0aF90eF9pbml0KHNjLCBBVEhfVFhCVUYpOwogCWlmIChlcnJvciAhPSAwKQpAQCAtMTU5OSw3ICsxNjU3LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKIAkvKiBJbml0aWFsemUgaC93IFJma2lsbCAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCiAJCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgYXRoX3Jma2lsbF9wb2xsKTsKIAogCS8qIEluaXRpYWxpemUgcy93IHJma2lsbCAqLwpAQCAtMTYwOCwxMSArMTY2NiwzOSBAQAogCQlnb3RvIGVycm9yX2F0dGFjaDsKICNlbmRpZgogCisJaWYgKGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgeworCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbikgZ2V0cworCQkgKiBzYXZlZCBvbiB0aGUgd2lwaHkgb3JpZ18qIHBhcmFtZXRlcnMgKi8KKwkJcmVnZCA9IGF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzYy0+c2NfYWgpOworCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCisJCSAqIGl0J3Mgb3VyIG93biBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4sIHNpbWlsYXIgdG8KKwkJICogY2ZnODAyMTEncyBidXQgd2UgZW5hYmxlIHBhc3NpdmUgc2Nhbm5pbmcgKi8KKwkJcmVnZCA9IGF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CisJfQorCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwgcmVnZCk7CisJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKGh3LT53aXBoeSk7CisJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUik7CisKKwlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAorCWlmICghYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwKKwkJCXNjLT5zY19haC0+cmVndWxhdG9yeS5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX2F0dGFjaDsKKwl9CisKIAkvKiBJbml0aWFsaXplIExFRCBjb250cm9sICovCiAJYXRoX2luaXRfbGVkcyhzYyk7CiAKKwogCXJldHVybiAwOwogCiBlcnJvcl9hdHRhY2g6CkBAIC0xNjI5LDI0ICsxNzE1LDIwIEBACiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlpbnQgcjsKIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQlhdGhfZHJhaW50eHEoc2MsIHJldHJ5X3R4KTsKKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CiAJYXRoX2ZsdXNocmVjdihzYyk7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIGZhbHNlKTsKKwlpZiAocikKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IGhhbCBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVJTzsKLQl9CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsIHIpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKQpAQCAtMTY1NywxNCArMTczOSwxNCBAQAogCSAqIHRoYXQgY2hhbmdlcyB0aGUgY2hhbm5lbCBzbyB1cGRhdGUgYW55IHN0YXRlIHRoYXQKIAkgKiBtaWdodCBjaGFuZ2UgYXMgYSByZXN1bHQuCiAJICovCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoc2MtPnNjX2FoLT5haF9jdXJjaGFuKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCWF0aF91cGRhdGVfdHhwb3coc2MpOwogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZKTsJLyogcmVzdGFydCBiZWFjb25zICovCisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsJLyogcmVzdGFydCBiZWFjb25zICovCiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKIAogCWlmIChyZXRyeV90eCkgewogCQlpbnQgaTsKQEAgLTE2NzcsNyArMTc1OSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHI7CiB9CiAKIC8qCkBAIC0xNzAxLDYgKzE3ODMsNyBAQAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BOiAldSBidWZmZXJzICV1IGRlc2MvYnVmXG4iLAogCQluYW1lLCBuYnVmLCBuZGVzYyk7CiAKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAkvKiBhdGhfZGVzYyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgRFdPUkRzICovCiAJaWYgKChzaXplb2Yoc3RydWN0IGF0aF9kZXNjKSAlIDQpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImF0aF9kZXNjIG5vdCBEV09SRCBhbGlnbmVkXG4iKTsKQEAgLTE3MTcsNyArMTgwMCw3IEBACiAJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCiAJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KIAkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJdTMyIG5kZXNjX3NraXBwZWQgPQogCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CiAJCXUzMiBkbWFfbGVuOwpAQCAtMTczMSw5ICsxODE0LDggQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBkZXNjcmlwdG9ycyAqLwotCWRkLT5kZF9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoc2MtPnBkZXYsCi0JCQkgICAgICBkZC0+ZGRfZGVzY19sZW4sCi0JCQkgICAgICAmZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRkLT5kZF9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwKKwkJCQkJICZkZC0+ZGRfZGVzY19wYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRkLT5kZF9kZXNjID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xNzQ1LDIwICsxODI3LDE4IEBACiAKIAkvKiBhbGxvY2F0ZSBidWZmZXJzICovCiAJYnNpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9idWYpICogbmJ1ZjsKLQliZiA9IGttYWxsb2MoYnNpemUsIEdGUF9LRVJORUwpOworCWJmID0ga3phbGxvYyhic2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KLQltZW1zZXQoYmYsIDAsIGJzaXplKTsKIAlkZC0+ZGRfYnVmcHRyID0gYmY7CiAKLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrLCBiZisrLCBkcyArPSBuZGVzYykgewogCQliZi0+YmZfZGVzYyA9IGRzOwogCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CiAKLQkJaWYgKCEoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJgorCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCiAJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJCS8qCiAJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKQEAgLTE3NzksOCArMTg1OSw4IEBACiAJfQogCXJldHVybiAwOwogZmFpbDI6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIGZhaWw6CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTc5Myw4ICsxODczLDggQEAKIAkJCSBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAogCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIAogCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCWtmcmVlKGRkLT5kZF9idWZwdHIpOwpAQCAtMTg1MSwzMyArMTkzMSw4MSBAQAogCXJldHVybiBxbnVtOwogfQogCisvKiBYWFg6IFJlbW92ZSBtZSBvbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBhdGg5a19jaGFubmVsIGZvciBhbGwKKyAqIHRoaXMgcmVkdW5kYW50IGRhdGEgKi8KK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBody0+Y29uZi5jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWljaGFuLT5jaGFubmVsID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJaWNoYW4tPmNoYW4gPSBjaGFuOworCisJaWYgKGNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpY2hhbi0+Y2hhbm1vZGUgPSBDSEFOTkVMX0c7CisJCWljaGFuLT5jaGFubmVsRmxhZ3MgPSBDSEFOTkVMXzJHSFogfCBDSEFOTkVMX09GRE07CisJfSBlbHNlIHsKKwkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9BOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF81R0haIHwgQ0hBTk5FTF9PRkRNOworCX0KKworCXNjLT50eF9jaGFuX3dpZHRoID0gQVRIOUtfSFRfTUFDTU9ERV8yMDsKKworCWlmIChjb25mX2lzX2h0KGNvbmYpKSB7CisJCWlmIChjb25mX2lzX2h0NDAoY29uZikpCisJCQlzYy0+dHhfY2hhbl93aWR0aCA9IEFUSDlLX0hUX01BQ01PREVfMjA0MDsKKworCQlpY2hhbi0+Y2hhbm1vZGUgPSBhdGhfZ2V0X2V4dGNoYW5tb2RlKHNjLCBjaGFuLAorCQkJCQkgICAgY29uZi0+Y2hhbm5lbF90eXBlKTsKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGg5a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmluaXRfY2hhbm5lbDsKLQlpbnQgZXJyb3IgPSAwLCBwb3MsIHN0YXR1czsKKwlpbnQgciwgcG9zOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTdGFydGluZyBkcml2ZXIgd2l0aCAiCiAJCSJpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKworCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgeworCQlpZiAoc2MtPmNoYW5faWR4ID09IGN1cmNoYW4tPmh3X3ZhbHVlKSB7CisJCQkvKgorCQkJICogQWxyZWFkeSBvbiB0aGUgb3BlcmF0aW9uYWwgY2hhbm5lbCwgdGhlIG5ldyB3aXBoeQorCQkJICogY2FuIGJlIG1hcmtlZCBhY3RpdmUuCisJCQkgKi8KKwkJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQW5vdGhlciB3aXBoeSBpcyBvbiBhbm90aGVyIGNoYW5uZWwsIHN0YXJ0IHRoZSBuZXcKKwkJCSAqIHdpcGh5IGluIHBhdXNlZCBzdGF0ZS4KKwkJCSAqLworCQkJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwkJfQorCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9BQ1RJVkU7CisKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAotCXBvcyA9IGF0aF9nZXRfY2hhbm5lbChzYywgY3VyY2hhbik7Ci0JaWYgKHBvcyA9PSAtMSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCXBvcyA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCi0Jc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCShjdXJjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8gQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOwotCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc107CisJc2MtPmNoYW5faWR4ID0gcG9zOworCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc107CisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgaW5pdF9jaGFubmVsKTsKIAogCS8qIFJlc2V0IFNFUkRFUyByZWdpc3RlcnMgKi8KIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAwKTsKQEAgLTE4OTAsMTcgKzIwMTgsMTQgQEAKIAkgKiBhbmQgdGhlbiBzZXR1cCBvZiB0aGUgaW50ZXJydXB0IG1hc2suCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KHNjLT5zY19haCwgaW5pdF9jaGFubmVsLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLCBmYWxzZSwgJnN0YXR1cykpIHsKKwlyID0gYXRoOWtfaHdfcmVzZXQoc2MtPnNjX2FoLCBpbml0X2NoYW5uZWwsIGZhbHNlKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldSAiCi0JCQkiKGZyZXEgJXUgZmxhZ3MgMHgleClcbiIsIHN0YXR1cywKLQkJCWluaXRfY2hhbm5lbC0+Y2hhbm5lbCwgaW5pdF9jaGFubmVsLT5jaGFubmVsRmxhZ3MpOwotCQllcnJvciA9IC1FSU87CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXUgIgorCQkJIihmcmVxICV1IE1IeilcbiIsIHIsCisJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBtdXRleF91bmxvY2s7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIApAQCAtMTkyMCw2NiArMjA0NSw1NiBAQAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJCXIgPSAtRUlPOworCQlnb3RvIG11dGV4X3VubG9jazsKIAl9CiAKIAkvKiBTZXR1cCBvdXIgaW50ciBtYXNrLiAqLwotCXNjLT5zY19pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAorCXNjLT5pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAogCQl8IEFUSDlLX0lOVF9SWEVPTCB8IEFUSDlLX0lOVF9SWE9STgogCQl8IEFUSDlLX0lOVF9GQVRBTCB8IEFUSDlLX0lOVF9HTE9CQUw7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQotCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKIAotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9DU1Q7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0NTVDsKIAotCS8qCi0JICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KLQkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KLQkgKi8KLQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgICAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9NSUI7Ci0JLyoKLQkgKiBTb21lIGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgVElNIElFIGFuZCBmaXJlcyBhbgotCSAqIGludGVycnVwdCB3aGVuIHRoZSBUSU0gYml0IGlzIHNldC4gIEZvciBoYXJkd2FyZQotCSAqIHRoYXQgZG9lcywgaWYgbm90IG92ZXJyaWRkZW4gYnkgY29uZmlndXJhdGlvbiwKLQkgKiBlbmFibGUgdGhlIFRJTSBpbnRlcnJ1cHQgd2hlbiBvcGVyYXRpbmcgYXMgc3RhdGlvbi4KLQkgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0pICYmCi0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgotCSAgICAhc2MtPnNjX2NvbmZpZy5zd0JlYWNvblByb2Nlc3MpCi0JCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfVElNOwotCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoaW5pdF9jaGFubmVsKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfSU5WQUxJRDsKIAogCS8qIERpc2FibGUgQk1JU1MgaW50ZXJydXB0IHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQgKi8KLQlzYy0+c2NfaW1hc2sgJj0gfihBVEg5S19JTlRfU1dCQSB8IEFUSDlLX0lOVF9CTUlTUyk7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+c2NfaW1hc2spOworCXNjLT5pbWFzayAmPSB+KEFUSDlLX0lOVF9TV0JBIHwgQVRIOUtfSU5UX0JNSVNTKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWVycm9yID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKwlyID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKICNlbmRpZgogCi1lcnJvcjoKLQlyZXR1cm4gZXJyb3I7CittdXRleF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgaGRybGVuLCBwYWRzaXplOwogCisJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogVFggaW4gdW5leHBlY3RlZCB3aXBoeSBzdGF0ZSAiCisJCSAgICAgICAiJWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOworCQlnb3RvIGV4aXQ7CisJfQorCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOwogCiAJLyoKQEAgLTIwMTMsNyArMjEyOCw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOwogCi0JaWYgKGF0aF90eF9zdGFydChzYywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjAyNiwzMCArMjE0MSwzOCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9JTkFDVElWRTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQ2xlYW5pbmcgdXBcbiIpOworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJaWYgKGF0aDlrX3dpcGh5X3N0YXJ0ZWQoc2MpKSB7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOyAvKiBhbm90aGVyIHdpcGh5IHN0aWxsIGluIHVzZSAqLworCX0KIAogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKIAogCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCWF0aF9kcmFpbnR4cShzYywgZmFsc2UpOworCQlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwogCQlhdGhfc3RvcHJlY3Yoc2MpOwogCQlhdGg5a19od19waHlfZGlzYWJsZShzYy0+c2NfYWgpOwogCX0gZWxzZQogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKICNlbmRpZgogCS8qIGRpc2FibGUgSEFMIGFuZCBwdXQgaC93IHRvIHNsZWVwICovCkBAIC0yMDU4LDEzNiArMjE4MSwyMjQgQEAKIAogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCWludCByZXQgPSAwOwogCi0JLyogU3VwcG9ydCBvbmx5IHZhcCBmb3Igbm93ICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAotCWlmIChzYy0+c2NfbnZhcHMpCi0JCXJldHVybiAtRU5PQlVGUzsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spICYmCisJICAgIHNjLT5udmlmcyA+IDApIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoY29uZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7Ci0JCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FQOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJaWYgKHNjLT5uYmNudmlmcyA+PSBBVEhfQkNCVUYpIHsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWNfb3Btb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJJbnRlcmZhY2UgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgY29uZi0+dHlwZSk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIGEgVkFQIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOwogCi0JLyogU2V0IHRoZSBWQVAgb3Btb2RlICovCisJLyogU2V0IHRoZSBWSUYgb3Btb2RlICovCiAJYXZwLT5hdl9vcG1vZGUgPSBpY19vcG1vZGU7CiAJYXZwLT5hdl9ic2xvdCA9IC0xOwogCi0JaWYgKGljX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzYy0+c2NfYWgsIDEpOworCXNjLT5udmlmcysrOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBjb25mLT52aWY7Ci0Jc2MtPnNjX252YXBzKys7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJYXRoOWtfc2V0X2Jzc2lkX21hc2soaHcpOworCisJaWYgKHNjLT5udmlmcyA+IDEpCisJCWdvdG8gb3V0OyAvKiBza2lwIGdsb2JhbCBzZXR0aW5ncyBmb3Igc2Vjb25kYXJ5IHZpZiAqLworCisJaWYgKGljX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KHNjLT5zY19haCwgMSk7CisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CisJfQogCiAJLyogU2V0IHRoZSBkZXZpY2Ugb3Btb2RlICovCi0Jc2MtPnNjX2FoLT5haF9vcG1vZGUgPSBpY19vcG1vZGU7CisJc2MtPnNjX2FoLT5vcG1vZGUgPSBpY19vcG1vZGU7CisKKwkvKgorCSAqIEVuYWJsZSBNSUIgaW50ZXJydXB0cyB3aGVuIHRoZXJlIGFyZSBoYXJkd2FyZSBwaHkgY291bnRlcnMuCisJICogTm90ZSB3ZSBvbmx5IGRvIHRoaXMgKGF0IHRoZSBtb21lbnQpIGZvciBzdGF0aW9uIG1vZGUuCisJICovCisJaWYgKChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSkKKwkJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfTUlCOworCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RTRk9PUjsKKwl9CisKKwkvKgorCSAqIFNvbWUgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBUSU0gSUUgYW5kIGZpcmVzIGFuCisJICogaW50ZXJydXB0IHdoZW4gdGhlIFRJTSBiaXQgaXMgc2V0LiAgRm9yIGhhcmR3YXJlCisJICogdGhhdCBkb2VzLCBpZiBub3Qgb3ZlcnJpZGRlbiBieSBjb25maWd1cmF0aW9uLAorCSAqIGVuYWJsZSB0aGUgVElNIGludGVycnVwdCB3aGVuIG9wZXJhdGluZyBhcyBzdGF0aW9uLgorCSAqLworCWlmICgoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRU5IQU5DRURQTSkgJiYKKwkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIXNjLT5jb25maWcuc3dCZWFjb25Qcm9jZXNzKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTTsKKworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAogCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIFRPRE86IGlzIHRoaXMgYSBzdWl0YWJsZSBwbGFjZSB0byBzdGFydCBBTkkgZm9yIEFQIG1vZGU/ICovCiAJCS8qIFN0YXJ0IEFOSSAqLwotCQltb2RfdGltZXIoJnNjLT5zY19hbmkudGltZXIsCisJCW1vZF90aW1lcigmc2MtPmFuaS50aW1lciwKIAkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKIAl9CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKKwlpbnQgaTsKIAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEludGVyZmFjZVxuIik7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogU3RvcCBBTkkgKi8KLQlkZWxfdGltZXJfc3luYygmc2MtPnNjX2FuaS50aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnNjLT5hbmkudGltZXIpOwogCiAJLyogUmVjbGFpbSBiZWFjb24gcmVzb3VyY2VzICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgIHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBOVUxMOwotCXNjLT5zY19udmFwcy0tOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKKwkJaWYgKHNjLT5iZWFjb24uYnNsb3RbaV0gPT0gY29uZi0+dmlmKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHZpZiBoYWQgYWxsb2NhdGVkIGJlYWNvbiAiCisJCQkgICAgICAgInNsb3RcbiIsIF9fZnVuY19fKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwkJfQorCX0KKworCXNjLT5udmlmcy0tOworCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMIHwKLQkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVCkpIHsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZiAoKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpID09IDApIHsKKwkJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fQVdBS0UpOworCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlpZiAoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgeworCQkJCXNjLT5pbWFzayAmPSB+QVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwotCQlpbnQgcG9zOworCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CisKKwkJYXBoeS0+Y2hhbl9pZHggPSBwb3M7CisJCWFwaHktPmNoYW5faXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCWlmIChhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTiB8fAorCQkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBEbyBub3QgY2hhbmdlIG9wZXJhdGlvbmFsIGNoYW5uZWwgYmFzZWQgb24gYSBwYXVzZWQKKwkJCSAqIHdpcGh5IGNoYW5nZXMuCisJCQkgKi8KKwkJCWdvdG8gc2tpcF9jaGFuX2NoYW5nZTsKKwkJfQogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAotCQlwb3MgPSBhdGhfZ2V0X2NoYW5uZWwoc2MsIGN1cmNoYW4pOwotCQlpZiAocG9zID09IC0xKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwKLQkJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KKwkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKLQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCQlzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10uY2hhbm1vZGUgPQotCQkJKGN1cmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCQkJQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOworCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgY29uZl9pc19odChjb25mKSk7CiAKLQkJaWYgKGNvbmYtPmh0LmVuYWJsZWQpIHsKLQkJCWlmIChjb25mLT5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTIHx8Ci0JCQkgICAgY29uZi0+aHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCi0JCQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwNDA7Ci0KLQkJCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCQkJYXRoX2dldF9leHRjaGFubW9kZShzYywgY3VyY2hhbiwKLQkJCQkJCSAgICBjb25mLT5odC5jaGFubmVsX3R5cGUpOwotCQl9Ci0KLQkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmYtPmh0LmVuYWJsZWQpOwotCi0JCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10pIDwgMCkgeworCQlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCitza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQotCQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKworCS8qCisJICogVGhlIEhXIFRTRiBoYXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgYmVhY29uIGludGVydmFsIGNoYW5nZXMuCisJICogV2Ugc2V0IHRoZSBmbGFnIGhlcmUsIGFuZCBhdGhfYmVhY29uX2NvbmZpZ19hcCgpIHdvdWxkIHRha2UgdGhpcworCSAqIGludG8gYWNjb3VudCB3aGVuIGl0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIHN1YnNlcXVlbnQKKwkgKiBjb25maWdfaW50ZXJmYWNlKCkgY2FsbCAtIHdpdGggSUZDQ19CRUFDT04gaW4gdGhlIGNoYW5nZWQgZmllbGQuCisJICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE5NSwxOSArMjQwNiwyNCBAQAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJdTMyIHJmaWx0ID0gMDsKIAlpbnQgZXJyb3IsIGk7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogVE9ETzogTmVlZCB0byBkZWNpZGUgd2hpY2ggaHcgb3Btb2RlIHRvIHVzZSBmb3IgbXVsdGktaW50ZXJmYWNlCiAJICogY2FzZXMgKi8KIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJICAgIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7Ci0JCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoYWgsIHNjLT5zY19teWFkZHIsIDApOworCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwkJc2MtPmN1cmFpZCA9IDA7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQkvKiBSZXF1ZXN0IGZ1bGwgcmVzZXQgdG8gZ2V0IGh3IG9wbW9kZSBjaGFuZ2VkIHByb3Blcmx5ICovCiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwogCX0KQEAgLTIyMTcsMTggKzI0MzMsMTkgQEAKIAkJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQkvKiBTZXQgQlNTSUQgKi8KLQkJCW1lbWNweShzYy0+c2NfY3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCQlzYy0+c2NfY3VyYWlkID0gMDsKLQkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoLCBzYy0+c2NfY3VyYnNzaWQsCi0JCQkJCSAgICAgICBzYy0+c2NfY3VyYWlkKTsKKwkJCW1lbWNweShzYy0+Y3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQltZW1jcHkoYXZwLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJCXNjLT5jdXJhaWQgPSAwOworCQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYyk7CiAKIAkJCS8qIFNldCBhZ2dyZWdhdGlvbiBwcm90ZWN0aW9uIG1vZGUgcGFyYW1ldGVycyAqLwotCQkJc2MtPnNjX2NvbmZpZy5hdGhfYWdncl9wcm90ID0gMDsKKwkJCXNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCA9IDA7CiAKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAogCQkJCSJSWCBmaWx0ZXIgMHgleCBic3NpZCAlcE0gYWlkIDB4JXhcbiIsCi0JCQkJcmZpbHQsIHNjLT5zY19jdXJic3NpZCwgc2MtPnNjX2N1cmFpZCk7CisJCQkJcmZpbHQsIHNjLT5jdXJic3NpZCwgc2MtPmN1cmFpZCk7CiAKIAkJCS8qIG5lZWQgdG8gcmVjb25maWd1cmUgdGhlIGJlYWNvbiAqLwogCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TIDsKQEAgLTIyMzksMjQgKzI0NTYsMzAgQEAKIAkJfQogCX0KIAotCWlmICgoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikgJiYKLQkgICAgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8Ci0JICAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSkpIHsKLQkJLyoKLQkJICogQWxsb2NhdGUgYW5kIHNldHVwIHRoZSBiZWFjb24gZnJhbWUuCi0JCSAqCi0JCSAqIFN0b3AgYW55IHByZXZpb3VzIGJlYWNvbiBETUEuICBUaGlzIG1heSBiZQotCQkgKiBuZWNlc3NhcnksIGZvciBleGFtcGxlLCB3aGVuIGFuIGlic3MgbWVyZ2UKLQkJICogY2F1c2VzIHJlY29uZmlndXJhdGlvbjsgd2UgbWF5IGJlIGNhbGxlZAotCQkgKiB3aXRoIGJlYWNvbiB0cmFuc21pc3Npb24gYWN0aXZlLgotCQkgKi8KLQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAoKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHx8CisJCSAgICAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEICYmCisJCSAgICAgY29uZi0+ZW5hYmxlX2JlYWNvbikpIHsKKwkJCS8qCisJCQkgKiBBbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGJlYWNvbiBmcmFtZS4KKwkJCSAqCisJCQkgKiBTdG9wIGFueSBwcmV2aW91cyBiZWFjb24gRE1BLiAgVGhpcyBtYXkgYmUKKwkJCSAqIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gaWJzcyBtZXJnZQorCQkJICogY2F1c2VzIHJlY29uZmlndXJhdGlvbjsgd2UgbWF5IGJlIGNhbGxlZAorCQkJICogd2l0aCBiZWFjb24gdHJhbnNtaXNzaW9uIGFjdGl2ZS4KKwkJCSAqLworCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAotCQllcnJvciA9IGF0aF9iZWFjb25fYWxsb2Moc2MsIDApOwotCQlpZiAoZXJyb3IgIT0gMCkKLQkJCXJldHVybiBlcnJvcjsKKwkJCWVycm9yID0gYXRoX2JlYWNvbl9hbGxvYyhhcGh5LCB2aWYpOworCQkJaWYgKGVycm9yICE9IDApIHsKKwkJCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQogCi0JCWF0aF9iZWFjb25fc3luYyhzYywgMCk7CisJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgdmlmKTsKKwkJfQogCX0KIAogCS8qIENoZWNrIGZvciBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/ICovCkBAIC0yMjY1LDEzICsyNDg4LDE1IEBACiAJCQlpZiAoYXRoOWtfaHdfa2V5aXN2YWxpZChzYy0+c2NfYWgsICh1MTYpaSkpCiAJCQkJYXRoOWtfaHdfa2V5c2V0bWFjKHNjLT5zY19haCwKIAkJCQkJCSAgICh1MTYpaSwKLQkJCQkJCSAgIHNjLT5zY19jdXJic3NpZCk7CisJCQkJCQkgICBzYy0+Y3VyYnNzaWQpOwogCX0KIAogCS8qIE9ubHkgbGVnYWN5IElCU1MgZm9yIG5vdyAqLwogCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCAwKTsKIAorCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMjkwLDcgKzI1MTUsOCBAQAogCQkJCSAgIGludCBtY19jb3VudCwKIAkJCQkgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXUzMiByZmlsdDsKIAogCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJTFRFUlM7CkBAIC0yMzAwLDExICsyNTI2LDYgQEAKIAlyZmlsdCA9IGF0aF9jYWxjcnhmaWx0ZXIoc2MpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKHNjLT5zY19haCwgcmZpbHQpOwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgYXRoX2JjYXN0X21hYywgMCk7Ci0JfQotCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCBzYy0+cngucnhmaWx0ZXIpOwogfQogCkBAIC0yMzEzLDcgKzI1MzQsOCBAQAogCQkJICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUQV9OT1RJRllfQUREOgpAQCAtMjMyNywxNyArMjU0OSwxOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJIHUxNiBxdWV1ZSwKK3N0YXRpYyBpbnQgYXRoOWtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcmV0ID0gMCwgcW51bTsKIAogCWlmIChxdWV1ZSA+PSBXTUVfTlVNX0FDKQogCQlyZXR1cm4gMDsKIAorCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisKIAlxaS50cWlfYWlmcyA9IHBhcmFtcy0+YWlmczsKIAlxaS50cWlfY3dtaW4gPSBwYXJhbXMtPmN3X21pbjsKIAlxaS50cWlfY3dtYXggPSBwYXJhbXMtPmN3X21heDsKQEAgLTIzNTQsMjkgKzI1NzgsMzkgQEAKIAlpZiAocmV0KQogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFhRIFVwZGF0ZSBmYWlsZWRcbiIpOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdGg5a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJIGNvbnN0IHU4ICpsb2NhbF9hZGRyLAotCQkJIGNvbnN0IHU4ICphZGRyLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCisJCXJldHVybiAtRU5PU1BDOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc193YWtldXAoc2MpOwogCURQUklOVEYoc2MsIEFUSF9EQkdfS0VZQ0FDSEUsICJTZXQgSFcgS2V5XG4iKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTRVRfS0VZOgotCQlyZXQgPSBhdGhfa2V5X2NvbmZpZyhzYywgYWRkciwga2V5KTsKKwkJcmV0ID0gYXRoX2tleV9jb25maWcoc2MsIHZpZiwgc3RhLCBrZXkpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCWtleS0+aHdfa2V5X2lkeCA9IHJldDsKIAkJCS8qIHB1c2ggSVYgYW5kIE1pY2hhZWwgTUlDIGdlbmVyYXRpb24gdG8gc3RhY2sgKi8KIAkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwogCQkJaWYgKGtleS0+YWxnID09IEFMR19US0lQKQogCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7CisJCQlpZiAoc2MtPnNjX2FoLT5zd19tZ210X2NyeXB0byAmJiBrZXktPmFsZyA9PSBBTEdfQ0NNUCkKKwkJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOwogCQkJcmV0ID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTIzODcsNiArMjYyMSw5IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM5NSw3ICsyNjMyLDEwIEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCQkJICAgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIFBSRUFNQkxFICVkXG4iLApAQCAtMjQyMSwzMyArMjY2MSw1MCBAQAogCQkJYnNzX2NvbmYtPmFzc29jKTsKIAkJYXRoOWtfYnNzX2Fzc29jX2luZm8oc2MsIHZpZiwgYnNzX2NvbmYpOwogCX0KKworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIAogc3RhdGljIHU2NCBhdGg5a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXU2NCB0c2Y7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKLQl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAogCXJldHVybiB0c2Y7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX2h3X3NldHRzZjY0KHNjLT5zY19haCwgdHNmKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIGF0aDlrX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAotCWF0aDlrX2h3X3Jlc2V0X3RzZihhaCk7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19od19yZXNldF90c2Yoc2MtPnNjX2FoKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQorCQkJICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewpAQCAtMjQ3Myw3ICsyNzMwLDcgQEAKIAogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKGh3LCBzdGEtPmFkZHIsIHRpZCk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1JFU1VNRToKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKIAkJYXRoX3R4X2FnZ3JfcmVzdW1lKHNjLCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNDgzLDcgKzI3NDAsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzID0geworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCisJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKKwkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfU0NBTjsKKwlhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHNjLCBhcGh5KTsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfU0NBTk5JTkc7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCitzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCiAJLnN0b3AgCQkgICAgPSBhdGg5a19zdG9wLApAQCAtMjQ5Nyw4ICsyNzg4LDExIEBACiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCisJLnNldF90c2YgCSAgICA9IGF0aDlrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgICAgICA9IGF0aDlrX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUgICA9IGF0aDlrX3N3X3NjYW5fY29tcGxldGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTI1MjcsNyArMjgyMSw3IEBACiAvKgogICogUmV0dXJuIHRoZSBNQUMvQkIgbmFtZS4gIj8/Pz8iIGlzIHJldHVybmVkIGlmIHRoZSBNQUMvQkIgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfbWFjX2JiX25hbWUodTMyIG1hY19iYl92ZXJzaW9uKQogewogCWludCBpOwpAQCAtMjU0NCw3ICsyODM4LDcgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIFJGIG5hbWUuICI/Pz8/IiBpcyByZXR1cm5lZCBpZiB0aGUgUkYgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbikKIHsKIAlpbnQgaTsKQEAgLTI1NTgsMjU0ICsyODUyLDYyIEBACiAJcmV0dXJuICI/Pz8/IjsKIH0KIAotc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JdTggY3N6OwotCXUzMiB2YWw7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9ICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7Ci0JfQotCi0JcmV0ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBjb25zaXN0ZW50ICIKLQkJCSJETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gYmFkOwotCX0KLQotCS8qCi0JICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cwotCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmY3N6KTsKLQlpZiAoY3N6ID09IDApIHsKLQkJLyoKLQkJICogTGludXggMi40LjE4IChhdCBsZWFzdCkgd3JpdGVzIHRoZSBjYWNoZSBsaW5lIHNpemUKLQkJICogcmVnaXN0ZXIgYXMgYSAxNi1iaXQgd2lkZSByZWdpc3RlciB3aGljaCBpcyB3cm9uZy4KLQkJICogV2UgbXVzdCBoYXZlIHRoaXMgc2V0dXAgcHJvcGVybHkgZm9yIHJ4IGJ1ZmZlcgotCQkgKiBETUEgdG8gd29yayBzbyBmb3JjZSBhIHJlYXNvbmFibGUgdmFsdWUgaGVyZSBpZiBpdAotCQkgKiBjb21lcyB1cCB6ZXJvLgotCQkgKi8KLQkJY3N6ID0gTDFfQ0FDSEVfQllURVMgLyBzaXplb2YodTMyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIGNzeik7Ci0JfQotCS8qCi0JICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiBsYXRlbmN5IHRpbWVyIHlpZWxkcyBwb29yIHJlc3VsdHMsCi0JICogc2V0IGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IG90aGVyIHN5c3RlbXMuIEl0IG1heSBiZSB3b3J0aAotCSAqIHR3ZWFraW5nIHRoaXMgc2V0dGluZyBtb3JlLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhhOCk7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCS8qCi0JICogRGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAotCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOwotCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiYXRoOWsiKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSBtZW1vcnkgcmVnaW9uIHJlc2VydmUgZXJyb3JcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0kgbWVtb3J5IG1hcCBlcnJvclxuIikgOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDE7Ci0JfQotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKLQkJZ290byBiYWQyOwotCX0KLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwotCi0Jc2MgPSBody0+cHJpdjsKLQlzYy0+aHcgPSBodzsKLQlzYy0+cGRldiA9IHBkZXY7Ci0Jc2MtPm1lbSA9IG1lbTsKLQotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkMzsKLQl9Ci0KLQkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCi0KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDQ7Ci0JfQotCi0JYWggPSBzYy0+c2NfYWg7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKLQkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmFoX21hY1ZlcnNpb24pLAotCSAgICAgICBhaC0+YWhfbWFjUmV2LAotCSAgICAgICBhdGhfcmZfbmFtZSgoYWgtPmFoX2FuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCi0JICAgICAgIGFoLT5haF9waHlSZXYsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKLQotCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGhfZGV0YWNoKHNjKTsKLQlpZiAocGRldi0+aXJxKQotCQlmcmVlX2lycShwZGV2LT5pcnEsIHNjKTsKLQlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IGF0aF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnJmX2tpbGwucmZraWxsX3BvbGwpOwotI2VuZGlmCi0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JdTMyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQkvKgotCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KLQkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCi0JICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZQotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCAmdmFsKTsKLQlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAotCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCS8qCi0JICogY2hlY2sgdGhlIGgvdyByZmtpbGwgc3RhdGUgb24gcmVzdW1lCi0JICogYW5kIHN0YXJ0IHRoZSByZmtpbGwgcG9sbCB0aW1lcgotCSAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGhfcGNpX2lkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aF9wY2lfZHJpdmVyID0gewotCS5uYW1lICAgICAgID0gImF0aDlrIiwKLQkuaWRfdGFibGUgICA9IGF0aF9wY2lfaWRfdGFibGUsCi0JLnByb2JlICAgICAgPSBhdGhfcGNpX3Byb2JlLAotCS5yZW1vdmUgICAgID0gYXRoX3BjaV9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgICAgPSBhdGhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSBhdGhfcGNpX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRoX3BjaSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXRoOWtfaW5pdCh2b2lkKQogewogCWludCBlcnJvcjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2X2luZm8sIEFUSF9QQ0lfVkVSU0lPTik7Ci0KIAkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCiAJZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKGVycm9yICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLAorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAogCQkJZXJyb3IpOwotCQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKSA8IDApIHsKKwllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkJImF0aF9wY2k6IE5vIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7Ci0JCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCQkiYXRoOWs6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyByb290OiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJZ290byBlcnJfcmF0ZV91bnJlZ2lzdGVyOworCX0KKworCWVycm9yID0gYXRoX3BjaV9pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogTm8gUENJIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVtb3ZlX3Jvb3Q7CisJfQorCisJZXJyb3IgPSBhdGhfYWhiX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX2V4aXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChpbml0X2F0aF9wY2kpOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hdGhfcGNpKHZvaWQpCi17CisgZXJyX3BjaV9leGl0OgorCWF0aF9wY2lfZXhpdCgpOworCisgZXJyX3JlbW92ZV9yb290OgorCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisgZXJyX3JhdGVfdW5yZWdpc3RlcjoKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKKyBlcnJfb3V0OgorCXJldHVybiBlcnJvcjsKK30KK21vZHVsZV9pbml0KGF0aDlrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQoreworCWF0aF9haGJfZXhpdCgpOworCWF0aF9wY2lfZXhpdCgpOworCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwogfQotbW9kdWxlX2V4aXQoZXhpdF9hdGhfcGNpKTsKK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGJjNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGhfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyMykgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyNCkgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyNykgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyOSkgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQSkgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQikgfSwgLyogUENJLUUgKi8KKwl7IDAgfQorfTsKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJdTggdTh0bXA7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZSh0b19wY2lfZGV2KHNjLT5kZXYpLCBQQ0lfQ0FDSEVfTElORV9TSVpFLAorCQkJICAgICAodTggKikmdTh0bXApOworCSpjc3ogPSAoaW50KXU4dG1wOworCisJLyoKKwkgKiBUaGlzIGNoZWNrIHdhcyBwdXQgaW4gdG8gYXZvaWQgInVucGxlc2FudCIgY29uc2VxdWVuY2VzIGlmCisJICogdGhlIGJvb3Ryb20gaGFzIG5vdCBmdWxseSBpbml0aWFsaXplZCBhbGwgUENJIGRldmljZXMuCisJICogU29tZXRpbWVzIHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgbm90IHNldAorCSAqLworCisJaWYgKCpjc3ogPT0gMCkKKwkJKmNzeiA9IERFRkFVTFRfQ0FDSEVMSU5FID4+IDI7ICAgLyogVXNlIHRoZSBkZWZhdWx0IHNpemUgKi8KK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihzYy0+ZGV2KTsKKworCXBjaV9pb3VubWFwKHBkZXYsIHNjLT5tZW0pOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGF0aF9wY2lfZWVwcm9tX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKK3sKKwkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCisJaWYgKCFhdGg5a19od193YWl0KGFoLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwLAorCQkJICAgQUhfV0FJVF9USU1FT1VUKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBNUyhSRUdfUkVBRChhaCwgQVJfRUVQUk9NX1NUQVRVU19EQVRBKSwKKwkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1ZBTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfcGNpX2J1c19vcHMgPSB7CisJLnJlYWRfY2FjaGVzaXplID0gYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZSwKKwkuY2xlYW51cCA9IGF0aF9wY2lfY2xlYW51cCwKKwkuZWVwcm9tX3JlYWQgPSBhdGhfcGNpX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwl1OCBjc3o7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGF0aF9odyAqYWg7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlnb3RvIGJhZDsKKwl9CisKKwlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIGNvbnNpc3RlbnQgIgorCQkJIkRNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBiYWQ7CisJfQorCisJLyoKKwkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCisJICogc3RydWN0dXJlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjc3opOworCWlmIChjc3ogPT0gMCkgeworCQkvKgorCQkgKiBMaW51eCAyLjQuMTggKGF0IGxlYXN0KSB3cml0ZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZQorCQkgKiByZWdpc3RlciBhcyBhIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIHdoaWNoIGlzIHdyb25nLgorCQkgKiBXZSBtdXN0IGhhdmUgdGhpcyBzZXR1cCBwcm9wZXJseSBmb3IgcnggYnVmZmVyCisJCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0CisJCSAqIGNvbWVzIHVwIHplcm8uCisJCSAqLworCQljc3ogPSBMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKKwl9CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIGxhdGVuY3kgdGltZXIgeWllbGRzIHBvb3IgcmVzdWx0cywKKwkgKiBzZXQgaXQgdG8gdGhlIHZhbHVlIHVzZWQgYnkgb3RoZXIgc3lzdGVtcy4gSXQgbWF5IGJlIHdvcnRoCisJICogdHdlYWtpbmcgdGhpcyBzZXR0aW5nIG1vcmUuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsICJhdGg5ayIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFkOworCX0KKworCW1lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1lbSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSSBtZW1vcnkgbWFwIGVycm9yXG4iKSA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkMTsKKwl9CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKworCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGhfcGNpOiBubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWdvdG8gYmFkMjsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIChhcGh5ICsgMSk7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5wcmlfd2lwaHkgPSBhcGh5OworCXNjLT5odyA9IGh3OworCXNjLT5kZXYgPSAmcGRldi0+ZGV2OworCXNjLT5tZW0gPSBtZW07CisJc2MtPmJ1c19vcHMgPSAmYXRoX3BjaV9idXNfb3BzOworCisJaWYgKGF0aF9hdHRhY2goaWQtPmRldmljZSwgc2MpICE9IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWQzOworCX0KKworCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aF9pc3IsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwKKwkJCXdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkNDsKKwl9CisKKwlzYy0+aXJxID0gcGRldi0+aXJxOworCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKKwkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAorCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiksCisJICAgICAgIGFoLT5od192ZXJzaW9uLm1hY1JldiwKKwkgICAgICAgYXRoX3JmX25hbWUoKGFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCisJICAgICAgIGFoLT5od192ZXJzaW9uLnBoeVJldiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbWVtLCBwZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CitiYWQ0OgorCWF0aF9kZXRhY2goc2MpOworYmFkMzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CitiYWQyOgorCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CitiYWQxOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKK2JhZDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfY2xlYW51cChzYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhdGhfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCk7CisjZW5kaWYKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlpbnQgZXJyOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qIEVuYWJsZSBMRUQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCisJLyoKKwkgKiBjaGVjayB0aGUgaC93IHJma2lsbCBzdGF0ZSBvbiByZXN1bWUKKwkgKiBhbmQgc3RhcnQgdGhlIHJma2lsbCBwb2xsIHRpbWVyCisJICovCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aF9wY2lfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRoX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiYXRoOWsiLAorCS5pZF90YWJsZSAgID0gYXRoX3BjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgICA9IGF0aF9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgPSBhdGhfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICA9IGF0aF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aF9wY2lfcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworfTsKKworaW50IGF0aF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CisKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCmluZGV4IDc2Njk4MmEuLjhiY2JhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMjIgKzE0LDE3IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiB2b2lkCi1hdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG1vZGVzSW5kZXgsIHUzMiBmcmVxSW5kZXgsCithdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbW9kZXNJbmRleCwgdTMyIGZyZXFJbmRleCwKIAkJICAgIGludCByZWdXcml0ZXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKKwlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKIH0KIAogYm9vbAotYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2F0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgY2hhbm5lbFNlbCA9IDA7CiAJdTMyIGJNb2RlU3ludGggPSAwOwpAQCAtOTUsMTUgKzkwLDE0IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWSgweDM3KSwgcmVnMzIpOwogCi0JYWgtPmFoX2N1cmNoYW4gPSBjaGFuOwotCi0JQUg1NDE2KGFoKS0+YWhfY3VyY2hhblJhZEluZGV4ID0gLTE7CisJYWgtPmN1cmNoYW4gPSBjaGFuOworCWFoLT5jdXJjaGFuX3JhZF9pbmRleCA9IC0xOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wKLWF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCithdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTE2IGJNb2RlLCBmcmFjTW9kZSwgYU1vZGVSZWZTZWwgPSAwOwpAQCAtMTM4LDIwICsxMzIsMjcgQEAKIAkJYk1vZGUgPSAwOwogCQlmcmFjTW9kZSA9IDA7CiAKLQkJaWYgKChmcmVxICUgMjApID09IDApIHsKLQkJCWFNb2RlUmVmU2VsID0gMzsKLQkJfSBlbHNlIGlmICgoZnJlcSAlIDEwKSA9PSAwKSB7Ci0JCQlhTW9kZVJlZlNlbCA9IDI7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0ZSQUNfTl81RykpIHsKKwkJY2FzZSAwOgorCQkJaWYgKChmcmVxICUgMjApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDM7CisJCQl9IGVsc2UgaWYgKChmcmVxICUgMTApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDI7CisJCQl9CisJCQlpZiAoYU1vZGVSZWZTZWwpCisJCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJZGVmYXVsdDoKIAkJCWFNb2RlUmVmU2VsID0gMDsKLQogCQkJZnJhY01vZGUgPSAxOwogCQkJcmVmRGl2QSA9IDE7CiAJCQljaGFubmVsU2VsID0gKGZyZXEgKiAweDgwMDApIC8gMTU7CiAKIAkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1NZTlRIOSwKIAkJCQkgICAgICBBUl9BTl9TWU5USDlfUkVGRElWQSwgcmVmRGl2QSk7CisKIAkJfQorCiAJCWlmICghZnJhY01vZGUpIHsKIAkJCW5kaXYgPSAoZnJlcSAqIChyZWZEaXZBID4+IGFNb2RlUmVmU2VsKSkgLyA2MDsKIAkJCWNoYW5uZWxTZWwgPSBuZGl2ICYgMHgxZmY7CkBAIC0xNjYsOSArMTY3LDggQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZX1NZTlRIX0NPTlRST0wsIHJlZzMyKTsKIAotCWFoLT5haF9jdXJjaGFuID0gY2hhbjsKLQotCUFINTQxNihhaCktPmFoX2N1cmNoYW5SYWRJbmRleCA9IC0xOworCWFoLT5jdXJjaGFuID0gY2hhbjsKKwlhaC0+Y3VyY2hhbl9yYWRfaW5kZXggPSAtMTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMjAxLDExICsyMDEsOSBAQAogfQogCiBib29sCi1hdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkgICAgIHUxNiBtb2Rlc0luZGV4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAl1MzIgZWVwTWlub3JSZXY7CiAJdTMyIG9iNUdIeiA9IDAsIGRiNUdIeiA9IDA7CiAJdTMyIG9iMkdIeiA9IDAsIGRiMkdIeiA9IDA7CkBAIC0yMTQsMTYxICsyMTIsMTU2IEBACiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCiAJCXJldHVybiB0cnVlOwogCi0JZWVwTWlub3JSZXYgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKTsKKwllZXBNaW5vclJldiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEsICZhaHAtPmFoX2luaUJhbmswLCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMERhdGEsICZhaC0+aW5pQmFuazAsIDEpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSwgJmFocC0+YWhfaW5pQmFuazEsIDEpOworCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhLCAmYWhwLT5haF9pbmlCYW5rMiwgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazJEYXRhLCAmYWgtPmluaUJhbmsyLCAxKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEsICZhaHAtPmFoX2luaUJhbmszLAorCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmszRGF0YSwgJmFoLT5pbmlCYW5rMywKIAkJICAgICAgbW9kZXNJbmRleCk7CiAJewogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQmFuazZUUEMuaWFfcm93czsgaSsrKSB7Ci0JCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YVtpXSA9Ci0JCQkgICAgSU5JX1JBKCZhaHAtPmFoX2luaUJhbms2VFBDLCBpLCBtb2Rlc0luZGV4KTsKKwkJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlCYW5rNlRQQy5pYV9yb3dzOyBpKyspIHsKKwkJCWFoLT5hbmFsb2dCYW5rNkRhdGFbaV0gPQorCQkJICAgIElOSV9SQSgmYWgtPmluaUJhbms2VFBDLCBpLCBtb2Rlc0luZGV4KTsKIAkJfQogCX0KIAogCWlmIChlZXBNaW5vclJldiA+PSAyKSB7CiAJCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCW9iMkdIeiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PQl8yKTsKLQkJCWRiMkdIeiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9EQl8yKTsKLQkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhLAorCQkJb2IyR0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PQl8yKTsKKwkJCWRiMkdIeiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfREJfMik7CisJCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaC0+YW5hbG9nQmFuazZEYXRhLAogCQkJCQkJICAgb2IyR0h6LCAzLCAxOTcsIDApOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaC0+YW5hbG9nQmFuazZEYXRhLAogCQkJCQkJICAgZGIyR0h6LCAzLCAxOTQsIDApOwogCQl9IGVsc2UgewotCQkJb2I1R0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX09CXzUpOwotCQkJZGI1R0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX0RCXzUpOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlvYjVHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09CXzUpOworCQkJZGI1R0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQl81KTsKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBvYjVHSHosIDMsIDIwMywgMCk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBkYjVHSHosIDMsIDIwMCwgMCk7CiAJCX0KIAl9CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazdEYXRhLCAmYWhwLT5haF9pbmlCYW5rNywgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazdEYXRhLCAmYWgtPmluaUJhbms3LCAxKTsKIAotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYWhwLT5haF9hbmFsb2dCYW5rMERhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazAsIGFoLT5hbmFsb2dCYW5rMERhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYWhwLT5haF9hbmFsb2dCYW5rMURhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFoLT5hbmFsb2dCYW5rMURhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMiwgYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFoLT5hbmFsb2dCYW5rMkRhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazMsIGFoLT5hbmFsb2dCYW5rM0RhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNlRQQywgYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazcsIGFoLT5hbmFsb2dCYW5rN0RhdGEsCiAJCQkgICByZWdXcml0ZXMpOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQKLWF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2F0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazBEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmswRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rMERhdGEpOworCQlhaC0+YW5hbG9nQmFuazBEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazFEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rMURhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rMURhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazFEYXRhKTsKKwkJYWgtPmFuYWxvZ0JhbmsxRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazJEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmsyRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rMkRhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazNEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmszRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rM0RhdGEpOworCQlhaC0+YW5hbG9nQmFuazNEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rNkRhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazZEYXRhKTsKKwkJYWgtPmFuYWxvZ0Jhbms2RGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazZUUENEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazZUUENEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazdEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0Jhbms3RGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rN0RhdGEpOworCQlhaC0+YW5hbG9nQmFuazdEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYWRkYWM1NDE2XzIxICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hZGRhYzU0MTZfMjEpOwotCQlhaHAtPmFoX2FkZGFjNTQxNl8yMSA9IE5VTEw7CisJaWYgKGFoLT5hZGRhYzU0MTZfMjEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YWRkYWM1NDE2XzIxKTsKKwkJYWgtPmFkZGFjNTQxNl8yMSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2Jhbms2VGVtcCAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYmFuazZUZW1wKTsKLQkJYWhwLT5haF9iYW5rNlRlbXAgPSBOVUxMOworCWlmIChhaC0+YmFuazZUZW1wICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmJhbms2VGVtcCk7CisJCWFoLT5iYW5rNlRlbXAgPSBOVUxMOwogCX0KIH0KIAotYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaGFsICphaCwgaW50ICpzdGF0dXMpCitib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9odyAqYWgsIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJYWgtPmFuYWxvZ0JhbmswRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMC5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rMURhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazEuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazJEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmsyLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0JhbmszRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMy5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rNkRhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazYuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazZUUENEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbms2VFBDLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0Jhbms3RGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rNy5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CiAKLQkJYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmswLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmsxLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmsyLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmszLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2VFBDLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms3LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPT0gTlVMTCkgeworCQlpZiAoYWgtPmFuYWxvZ0JhbmswRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazFEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rMkRhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0JhbmszRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazZEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0Jhbms3RGF0YSA9PSBOVUxMKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKIAkJCQkiQ2Fubm90IGFsbG9jYXRlIFJGIGJhbmtzXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYWhwLT5haF9hZGRhYzU0MTZfMjEgPQorCQlhaC0+YWRkYWM1NDE2XzIxID0KIAkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKLQkJCSAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9yb3dzICoKLQkJCSAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9jb2x1bW5zKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChhaHAtPmFoX2FkZGFjNTQxNl8yMSA9PSBOVUxMKSB7CisJCQkgICAgIGFoLT5pbmlBZGRhYy5pYV9yb3dzICoKKwkJCSAgICAgYWgtPmluaUFkZGFjLmlhX2NvbHVtbnMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFoLT5hZGRhYzU0MTZfMjEgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkNhbm5vdCBhbGxvY2F0ZSBhaF9hZGRhYzU0MTZfMjFcbiIpOworCQkJCSJDYW5ub3QgYWxsb2NhdGUgYWRkYWM1NDE2XzIxXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYWhwLT5haF9iYW5rNlRlbXAgPQorCQlhaC0+YmFuazZUZW1wID0KIAkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKLQkJCSAgICAgYWhwLT5haF9pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChhaHAtPmFoX2Jhbms2VGVtcCA9PSBOVUxMKSB7CisJCQkgICAgIGFoLT5pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChhaC0+YmFuazZUZW1wID09IE5VTEwpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJDYW5ub3QgYWxsb2NhdGUgYWhfYmFuazZUZW1wXG4iKTsKKwkJCQkiQ2Fubm90IGFsbG9jYXRlIGJhbms2VGVtcFxuIik7CiAJCQkqc3RhdHVzID0gLUVOT01FTTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMzc4LDI0ICszNzEsMjMgQEAKIH0KIAogdm9pZAotYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2F0aDlrX2h3X2RlY3JlYXNlX2NoYWluX3Bvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgaSwgcmVnV3JpdGVzID0gMDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBiYW5rNlNlbE1hc2s7Ci0JdTMyICpiYW5rNlRlbXAgPSBhaHAtPmFoX2Jhbms2VGVtcDsKKwl1MzIgKmJhbms2VGVtcCA9IGFoLT5iYW5rNlRlbXA7CiAKLQlzd2l0Y2ggKGFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCkgeworCXN3aXRjaCAoYWgtPmRpdmVyc2l0eV9jb250cm9sKSB7CiAJY2FzZSBBVEg5S19BTlRfRklYRURfQToKIAkJYmFuazZTZWxNYXNrID0KLQkJICAgIChhaHAtPgotCQkgICAgIGFoX2FudGVubmFTd2l0Y2hTd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMCA6CisJCSAgICAoYWgtPgorCQkgICAgIGFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8wIDoKIAkJICAgIFJFRFVDRV9DSEFJTl8xOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9COgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFocC0+Ci0JCSAgICAgYWhfYW50ZW5uYVN3aXRjaFN3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8xIDoKKwkJICAgIChhaC0+CisJCSAgICAgYW50ZW5uYV9zd2l0Y2hfc3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzEgOgogCQkgICAgUkVEVUNFX0NIQUlOXzA7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfQU5UX1ZBUklBQkxFOgpAQCAtNDA2LDggKzM5OCw4IEBACiAJCWJyZWFrOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3M7IGkrKykKLQkJYmFuazZUZW1wW2ldID0gYWhwLT5haF9hbmFsb2dCYW5rNkRhdGFbaV07CisJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlCYW5rNi5pYV9yb3dzOyBpKyspCisJCWJhbms2VGVtcFtpXSA9IGFoLT5hbmFsb2dCYW5rNkRhdGFbaV07CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9CQVNFICsgMHhEOCwgYmFuazZTZWxNYXNrKTsKIApAQCAtNDIxLDcgKzQxMyw3IEBACiAJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYmFuazZUZW1wLCAxLCAxLCAyNDYsIDApOwogCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGJhbms2VGVtcCwgMSwgMSwgMjQ3LCAwKTsKIAotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYmFuazZUZW1wLCByZWdXcml0ZXMpOworCVJFR19XUklURV9SRl9BUlJBWSgmYWgtPmluaUJhbms2LCBiYW5rNlRlbXAsIHJlZ1dyaXRlcyk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9CQVNFICsgMHhEOCwgMHgwMDAwMDA1Myk7CiAjaWZkZWYgQUxURVJfU1dJVENICmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCmluZGV4IDNhNDA2YTUuLjBmN2Y4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTcsMTkgKzE3LDE5IEBACiAjaWZuZGVmIFBIWV9ICiAjZGVmaW5lIFBIWV9ICiAKLWJvb2wgYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbAogCQkJCSAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXZvaWQgYXRoOWtfaHdfd3JpdGVfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBtb2Rlc0luZGV4LAordm9pZCBhdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbW9kZXNJbmRleCwKIAkJCSB1MzIgZnJlcUluZGV4LCBpbnQgcmVnV3JpdGVzKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgIHUxNiBtb2Rlc0luZGV4KTsKLXZvaWQgYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19kZWNyZWFzZV9jaGFpbl9wb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkgICAgICBpbnQgKnN0YXR1cyk7CiAKICNkZWZpbmUgQVJfUEhZX0JBU0UgICAgIDB4OTgwMApAQCAtMzg3LDYgKzM4Nyw4IEBACiAKICNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMICAgICAgIDB4QTIwNAogI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfSkFQQU4gMHgwMDAwMDAxMAorI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDSyAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0tfUyAgICAgICAyCiAKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEyMDgKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1RfV0VBS19TSUdfVEhSX0NDSyAgICAgICAgICAweDAwMDAwMDNGCkBAIC00NDQsNiArNDQ2LDMyIEBACiAjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zICAgIDB4MDAzMDAwMDAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzNfUyAgMjAKIAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEUgICAweDAwNDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRV9TIDIyCisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw0ICAgICAgIDB4YTI2NAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfVkFMSUQgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX1ZBTElEX1MgICAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVQgICAgICAgMHgwMDAwMDFGRQorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUX1MgICAgIDEKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDZfMCAgICAgMHhhMjcwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNl8xICAgICAweGIyNzAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFICAgICAweDAzMDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERV9TICAgMjQKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDcgICAgICAgMHhhMjc0CisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiAgICAgMHgwMUY4MDAwMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU5fUyAgIDE5CisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5ICAgICAgIDB4YTI3QworI2RlZmluZSBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0sgICAgICAgIDB4MDAwMDdDMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLX1MgICAgICAxMAorCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOX1RCTDEgICAgICAweGEzMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0dBSU4gICAgICAgICAgICAgICAgICAgICAweDAwMDdGMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOX1MgICAgICAgICAgICAgICAgICAgMTIKKwogI2RlZmluZSBBUl9QSFlfVklUX01BU0syX01fNDZfNjEgMHhhM2EwCiAjZGVmaW5lIEFSX1BIWV9NQVNLMl9NXzMxXzQ1ICAgICAweGEzYTQKICNkZWZpbmUgQVJfUEhZX01BU0syX01fMTZfMzAgICAgIDB4YTNhOApAQCAtNDg1LDYgKzUxMywxMSBAQAogI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCAgICAweDBGQzAwMDAwCiAjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80X1MgIDIyCiAKKy8qIENhcnJpZXIgbGVhayBjYWxpYnJhdGlvbiBjb250cm9sLCBkbyBpdCBhZnRlciBBR0MgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgQVJfUEhZX0NMX0NBTF9DVEwgICAgICAgMHhBMzU4CisjZGVmaW5lIEFSX1BIWV9DTF9DQUxfRU5BQkxFICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUEhZX1BBUkFMTEVMX0NBTF9FTkFCTEUgICAgMHgwMDAwMDAwMQorCiAjZGVmaW5lIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSAgIDB4QTM4QwogI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTYgICAweEEzOTAKIApAQCAtNTMwLDEwICs1NjMsOCBAQAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFUSDlLX0tFWV9YT1IgICAgICAgICAgICAgICAgIDB4YWEKLQogI2RlZmluZSBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkJCQkJCVwKLQkoQUg1NDE2KGFoKS0+YWhfc3RhSWQxRGVmYXVsdHMgJiBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRSkKKwkoKGFoKS0+c3RhX2lkMV9kZWZhdWx0cyAmIEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKQogCiAjZGVmaW5lIEFOVFNXQVBfQUIgMHgwMDAxCiAjZGVmaW5lIFJFRFVDRV9DSEFJTl8wIDB4MDAwMDAwNTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jCmluZGV4IDFiNzFiOTMuLjgyNGNjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVmlkZW81NCBUZWNobm9sb2dpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE1LDE2ICsxNSwxNSBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmFfcmF0ZXRhYmxlID0gewogCTQyLAotCXswfSwKIAl7CiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCiAJCQk1NDAwLCAweDBiLCAweDAwLCAxMiwKIAkJCTAsIDIsIDEsIDAsIDAsIDAsIDAsIDAgfSwKLQkJeyBWQUxJRCwJVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KKwkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsICAweDBmLCAweDAwLCAxOCwKIAkJCTAsIDMsIDEsIDEsIDEsIDEsIDEsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLwpAQCAtMTU4LDcgKzE1Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmdfcmF0ZXRhYmxlID0gewogCTQ2LAotCXswfSwKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzA2LDcgKzMwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYV9yYXRldGFibGUgPSB7CiAJOCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwgLyogNiBNYiAqLwogCQkJNTQwMCwgMHgwYiwgMHgwMCwgKDB4ODB8MTIpLApAQCAtMzQwLDcgKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExZ19yYXRldGFibGUgPSB7CiAJMTIsCi0JezB9LAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzg2LDcgKzM4Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7CiAJNCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCiAJCQk5MDAsIDB4MWIsICAweDAwLCAoMHg4MHwyKSwKQEAgLTYzNiw4ICs2MzEsNyBAQAogc3RhdGljIHU4IGF0aF9yY19yYXRlZmluZF9odChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIGludCBwcm9iZV9hbGxvd2VkLCBpbnQgKmlzX3Byb2JpbmcsCi0JCQkgICAgIGludCBpc19yZXRyeSkKKwkJCSAgICAgaW50ICppc19wcm9iaW5nKQogewogCXUzMiBkdCwgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7CkBAIC03MTksMTMgKzcxMyw2IEBACiAJfQogCiAJcmF0ZSA9IGJlc3RfcmF0ZTsKLQotCS8qIGlmIHdlIGFyZSByZXRyeWluZyBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIG51bWJlcgotCSAqIG9mIG1heCByZXRyaWVzLCB1c2UgdGhlIG1pbiByYXRlIGZvciB0aGUgbmV4dCByZXRyeQotCSAqLwotCWlmIChpc19yZXRyeSkKLQkJcmF0ZSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W21pbmluZGV4XTsKLQogCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKQEAgLTczMywxMyArNzIwLDEyIEBACiAJICogbm9uLW1vbm90aWNpdHkgb2YgMTFnJ3MgcmF0ZSB0YWJsZQogCSAqLwogCi0JaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSAmJiBwcm9iZV9hbGxvd2VkKSB7CisJaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSkgewogCQlyYXRlID0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeTsKIAogCQkvKiBQcm9iZSB0aGUgbmV4dCBhbGxvd2VkIHBoeSBzdGF0ZSAqLwotCQkvKiBGSVhNRTpYWFhYIENoZWNrIHRvIG1ha2Ugc3VyZSByYXRNYXggaXMgY2hlY2tlZCBwcm9wZXJseSAqLwogCQlpZiAoYXRoX3JjX2dldF9uZXh0dmFsaWRfdHhyYXRlKHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdiwgcmF0ZSwgJm5leHRfcmF0ZSkgJiYKKwkJCQkJYXRoX3JjX3ByaXYsIHJhdGUsICZuZXh0X3JhdGUpICYmCiAJCSAgICAobm93X21zZWMgLSBhdGhfcmNfcHJpdi0+cHJvYmVfdGltZSA+CiAJCSAgICAgcmF0ZV90YWJsZS0+cHJvYmVfaW50ZXJ2YWwpICYmCiAJCSAgICAoYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA+PSAxKSkgewpAQCAtNzYxLDE0ICs3NDcsMTcgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgLAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjLAogCQkJCSAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUpCiB7CiAJcmF0ZS0+Y291bnQgPSB0cmllczsKIAlyYXRlLT5pZHggPSByaXg7CiAKLQlpZiAocnRzY3RzZW5hYmxlKQorCWlmICh0eHJjLT5zaG9ydF9wcmVhbWJsZSkKKwkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTsKKwlpZiAodHhyYy0+cnRzIHx8IHJ0c2N0c2VuYWJsZSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwogCWlmIChXTEFOX1JDX1BIWV80MChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKQEAgLTc3OCw2ICs3NjcsNDMgQEAKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3J0c2N0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWludCBpID0gMCwgcml4ID0gMCwgY2l4LCBlbmFibGVfZ19wcm90ZWN0aW9uID0gMDsKKworCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7CisJCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCQlicmVhazsKKwkJfQorCX0KKwljaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uY3RybF9yYXRlOworCisJLyogQWxsIHByb3RlY3Rpb24gZnJhbWVzIGFyZSB0cmFuc21pdGVkIGF0IDJNYi9zIGZvciA4MDIuMTFnLAorCSAqIG90aGVyd2lzZSB3ZSB0cmFuc21pdCB0aGVtIGF0IDFNYi9zICovCisJaWYgKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgIWNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWVuYWJsZV9nX3Byb3RlY3Rpb24gPSAxOworCisJLyoKKwkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKKwkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KKwkgKi8KKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1BST1RFQ1RfRU5BQkxFKSAmJgorCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCisJICAgIChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5ID09IFdMQU5fUkNfUEhZX09GRE0gfHwKKwkgICAgIFdMQU5fUkNfUEhZX0hUKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKSkgeworCQlyYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOworCQljaXggPSByYXRlX3RhYmxlLT5pbmZvW2VuYWJsZV9nX3Byb3RlY3Rpb25dLmN0cmxfcmF0ZTsKKwl9CisKKwl0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPSBjaXg7Cit9CisKIHN0YXRpYyB1OCBhdGhfcmNfcmF0ZV9nZXRpZHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLApAQCAtODA5LDU0ICs4MzUsNTggQEAKIAogc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVmaW5kKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICBpbnQgbnVtX3RyaWVzLCBpbnQgbnVtX3JhdGVzLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywgaW50ICppc19wcm9iZSwKLQkJCSAgICBpbnQgaXNfcmV0cnkpCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKKwlpbnQgaXNfcHJvYmUgPSAwOwogCiAJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQlyaXggPSBhdGhfcmNfcmF0ZWZpbmRfaHQoc2MsIGF0aF9yY19wcml2LCByYXRlX3RhYmxlLCAxLAotCQkJCSBpc19wcm9iZSwgaXNfcmV0cnkpOworCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAotCWlmICgqaXNfcHJvYmUpIHsKKwlpZiAoaXNfcHJvYmUpIHsKIAkJLyogc2V0IG9uZSB0cnkgZm9yIHByb2JlIHJhdGVzLiBGb3IgdGhlCiAJCSAqIHByb2JlcyBkb24ndCBlbmFibGUgcnRzICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCAxLCBucml4LCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKG51bV90cmllcy9udW1fcmF0ZXMpOworCQl0cnlfcGVyX3JhdGUgPSAoQVRIXzExTl9UWE1BWFRSWS80KTsKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsCi0JCQlhdGhfcmNfcHJpdiwgcmF0ZV90YWJsZSwgbnJpeCwgMSwgMCk7Ci0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKKwkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgdHJ5X3Blcl9yYXRlLCBucml4LCAwKTsKKworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAl9IGVsc2UgewotCQl0cnlfcGVyX3JhdGUgPSAobnVtX3RyaWVzL251bV9yYXRlcyk7CisJCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAorCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIG90aGVyIHJhdGVzIGZvciBtdWx0aXJhdGUgcmV0cnkgKi8KLQlmb3IgKCA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCWZvciAoIDsgaSA8IDQ7IGkrKykgewogCQl1OCB0cnlfbnVtOwogCQl1OCBtaW5fcmF0ZTsKIAotCQl0cnlfbnVtID0gKChpICsgMSkgPT0gbnVtX3JhdGVzKSA/Ci0JCQludW1fdHJpZXMgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSBudW1fcmF0ZXMpICYmIDApOworCQl0cnlfbnVtID0gKChpICsgMSkgPT0gNCkgPworCQkJQVRIXzExTl9UWE1BWFRSWSAtICh0cnlfcGVyX3JhdGUgKiBpKSA6IHRyeV9wZXJfcmF0ZSA7CisJCW1pbl9yYXRlID0gKCgoaSArIDEpID09IDQpICYmIDApOwogCiAJCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsIGF0aF9yY19wcml2LAogCQkJCQkgIHJhdGVfdGFibGUsIG5yaXgsIDEsIG1pbl9yYXRlKTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwotCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsCi0JCQkJICAgICAgICZyYXRlc1tpXSwgdHJ5X251bSwgbnJpeCwgMSk7CisJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAorCQkJCSAgICAgICB0cnlfbnVtLCBucml4LCAxKTsKIAl9CiAKIAkvKgpAQCAtODc1LDcgKzkwNSw3IEBACiAJICogYWJvdmUgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopICYmCi0JICAgIChzYy0+aHctPmNvbmYuaHQuZW5hYmxlZCkpIHsKKwkgICAgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpKSB7CiAJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5kb3QxMXJhdGU7CiAJCXU4IHBoeSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5waHk7CiAJCWlmIChpID09IDQgJiYKQEAgLTg4NSw2ICs5MTUsMjQgQEAKIAkJCXJhdGVzWzNdLmZsYWdzID0gcmF0ZXNbMl0uZmxhZ3M7CiAJCX0KIAl9CisKKwkvKgorCSAqIEZvcmNlIGhhcmR3YXJlIHRvIHVzZSBjb21wdXRlZCBkdXJhdGlvbiBmb3IgbmV4dAorCSAqIGZyYWdtZW50IGJ5IGRpc2FibGluZyBtdWx0aS1yYXRlIHJldHJ5LCB3aGljaAorCSAqIHVwZGF0ZXMgZHVyYXRpb24gYmFzZWQgb24gdGhlIG11bHRpLXJhdGUgZHVyYXRpb24gdGFibGUuCisJICoKKwkgKiBGSVhNRTogRml4IGR1cmF0aW9uCisJICovCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKKwkgICAgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSB8fAorCSAgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpKSB7CisJCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7CisJCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7CisJCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOworCX0KKworCS8qIFNldHVwIFJUUy9DVFMgKi8KKwlhdGhfcmNfcmF0ZV9zZXRfcnRzY3RzKHNjLCByYXRlX3RhYmxlLCB0eF9pbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoX3JjX3VwZGF0ZV9wZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCkBAIC0xMjIxLDYgKzEyNjksOSBAQAogCQlhdGhfcmNfcHJpdi0+cGVyX2Rvd25fdGltZSA9IG5vd19tc2VjOwogCX0KIAorCWF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc2MsIHR4X3JhdGUsIHhyZXRyaWVzLCByZXRyaWVzLAorCQkJICAgICAgIGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIpOworCiAjdW5kZWYgQ0hLX1JTU0kKIH0KIApAQCAtMTMzOCwzNiArMTM4OSwxOCBAQAogc3RhdGljIHZvaWQgYXRoX3JjX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQogewotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IE5VTEw7CiAJc3RydWN0IGF0aF9yYXRlc2V0ICpyYXRlc2V0ID0gJmF0aF9yY19wcml2LT5uZWdfcmF0ZXM7CiAJdTggKmh0X21jcyA9ICh1OCAqKSZhdGhfcmNfcHJpdi0+bmVnX2h0X3JhdGVzOwogCXU4IGksIGosIGssIGhpID0gMCwgaHRoaSA9IDA7CiAKLQkvKiBGSVhNRTogQWRob2MgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQkJYm9vbCBpc19jd180MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKLQkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKLQkJCQkJCSAgIGlzX2N3XzQwKTsKLQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KLQkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQl9Ci0KIAlpZiAoIXJhdGVfdGFibGUpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlJhdGUgdGFibGUgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJYXRoX3JjX3ByaXYtPmh0X2NhcCA9IChXTEFOX1JDX0hUX0ZMQUcgfCBXTEFOX1JDX0RTX0ZMQUcpOwotCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCi0JCQlhdGhfcmNfcHJpdi0+aHRfY2FwIHw9IFdMQU5fUkNfNDBfRkxBRzsKLQl9Ci0KIAkvKiBJbml0aWFsIHJhdGUgdGFibGUgc2l6ZS4gV2lsbCBjaGFuZ2UgZGVwZW5kaW5nCiAJICogb24gdGhlIHdvcmtpbmcgcmF0ZSBzZXQgKi8KIAlhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplID0gUkFURV9UQUJMRV9TSVpFOwpAQCAtMTM4Nyw3ICsxNDIwLDcgQEAKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWlkeFtpXVtqXSA9IDA7CiAJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWNudFtpXSA9IDA7CiAJfQotCWF0aF9yY19wcml2LT5yY19waHlfbW9kZSA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKTsKKwlhdGhfcmNfcHJpdi0+cmNfcGh5X21vZGUgPSBhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHOwogCiAJLyogU2V0IHN0cmVhbSBjYXBhYmlsaXR5ICovCiAJYXRoX3JjX3ByaXYtPnNpbmdsZV9zdHJlYW0gPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykgPyAwIDogMTsKQEAgLTEzOTUsMTYgKzE0MjgsMTYgQEAKIAlpZiAoIXJhdGVzZXQtPnJzX25yYXRlcykgewogCQkvKiBObyB3b3JraW5nIHJhdGUsIGp1c3QgaW5pdGlhbGl6ZSB2YWxpZCByYXRlcyAqLwogCQloaSA9IGF0aF9yY19pbml0X3ZhbGlkcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgIGF0aF9yY19wcml2LT5odF9jYXApOwogCX0gZWxzZSB7CiAJCS8qIFVzZSBpbnRlcnNlY3Rpb24gb2Ygd29ya2luZyByYXRlcyBhbmQgdmFsaWQgcmF0ZXMgKi8KIAkJaGkgPSBhdGhfcmNfc2V0dmFsaWRfcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICByYXRlc2V0LCBhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgcmF0ZXNldCwgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCWlmIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19IVF9GTEFHKSB7CiAJCQlodGhpID0gYXRoX3JjX3NldHZhbGlkX2h0cmF0ZXMoYXRoX3JjX3ByaXYsCi0JCQkJCQkJICAgcmF0ZV90YWJsZSwKLQkJCQkJCQkgICBodF9tY3MsCi0JCQkJCQkJICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CisJCQkJCQkgICAgICAgcmF0ZV90YWJsZSwKKwkJCQkJCSAgICAgICBodF9tY3MsCisJCQkJCQkgICAgICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCX0KIAkJaGkgPSBBX01BWChoaSwgaHRoaSk7CiAJfQpAQCAtMTQzMiw5ICsxNDY1LDM2IEBACiAJYXRoX3JjX3NvcnRfdmFsaWRyYXRlcyhyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdik7CiAJYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2stNF07CiAJc2MtPmN1cl9yYXRlX3RhYmxlID0gcmF0ZV90YWJsZTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiUkMgSW5pdGlhbGl6ZWQgd2l0aCBjYXBhYmlsaXRpZXM6IDB4JXhcbiIsCisJCWF0aF9yY19wcml2LT5odF9jYXApOwogfQogCi0vKiBSYXRlIENvbnRyb2wgY2FsbGJhY2tzICovCitzdGF0aWMgdTggYXRoX3JjX2J1aWxkX2h0X2NhcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICAgYm9vbCBpc19jdzQwLCBib29sIGlzX3NnaTQwKQoreworCXU4IGNhcHMgPSAwOworCisJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQljYXBzID0gV0xBTl9SQ19IVF9GTEFHOworCQlpZiAoc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzayAhPSAxICYmCisJCSAgICBhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0RTLCAwLCBOVUxMKSkgeworCQkJaWYgKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdKQorCQkJCWNhcHMgfD0gV0xBTl9SQ19EU19GTEFHOworCQl9CisJCWlmIChpc19jdzQwKQorCQkJY2FwcyB8PSBXTEFOX1JDXzQwX0ZMQUc7CisJCWlmIChpc19zZ2k0MCkKKwkJCWNhcHMgfD0gV0xBTl9SQ19TR0lfRkxBRzsKKwl9CisKKwlyZXR1cm4gY2FwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFjODAyMTEgUmF0ZSBDb250cm9sIGNhbGxiYWNrcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhfc3RhdHVzKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjcsNyArMTUyNyw3IEBACiAJICovCiAJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfZmxhZ3MgJgogCSAgICAoQVRIOUtfVFhfREFUQV9VTkRFUlJVTiB8IEFUSDlLX1RYX0RFTElNX1VOREVSUlVOKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfdHhUcmlnTGV2ZWwpID49IGF0aF9yY19wcml2LT50eF90cmlnbGV2ZWxfbWF4KSkgeworCSAgICAoKHNjLT5zY19haC0+dHhfdHJpZ19sZXZlbCkgPj0gYXRoX3JjX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXgpKSB7CiAJCXR4X3N0YXR1cyA9IDE7CiAJCWlzX3VuZGVycnVuID0gMTsKIAl9CkBAIC0xNDgwLDYgKzE1NDAsMjMgQEAKIAkJCSAoaXNfdW5kZXJydW4pID8gQVRIXzExTl9UWE1BWFRSWSA6CiAJCQkgdHhfaW5mb19wcml2LT50eC50c19sb25ncmV0cnkpOwogCisJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYKKwkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMsIHRpZDsKKwkJCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwkJCWlmKGF0aF90eF9hZ2dyX2NoZWNrKHNjLCBhbiwgdGlkKSkKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzYy0+aHcsIGhkci0+YWRkcjEsIHRpZCk7CisJCX0KKwl9CisKKwlhdGhfZGVidWdfc3RhdF9yYyhzYywgc2tiKTsKIGV4aXQ6CiAJa2ZyZWUodHhfaW5mb19wcml2KTsKIH0KQEAgLTE0OTAsMTEgKzE1NjcsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGlzX3Byb2JlID0gMDsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCiAJLyogbG93ZXN0IHJhdGUgZm9yIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzICovCkBAIC0xNTA3LDIzICsxNTgyLDcgQEAKIAl9CiAKIAkvKiBGaW5kIHR4IHJhdGUgZm9yIHVuaWNhc3QgZnJhbWVzICovCi0JYXRoX3JjX3JhdGVmaW5kKHNjLCBhdGhfcmNfcHJpdiwgQVRIXzExTl9UWE1BWFRSWSwgNCwKLQkJCXR4X2luZm8sICZpc19wcm9iZSwgZmFsc2UpOwotCi0JLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCi0JaWYgKGh3LT5jb25mLmh0LmVuYWJsZWQpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCXU4ICpxYywgdGlkOwotCQkJc3RydWN0IGF0aF9ub2RlICphbjsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCQkJaWYoYXRoX3R4X2FnZ3JfY2hlY2soc2MsIGFuLCB0aWQpKQotCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKGh3LCBoZHItPmFkZHIxLCB0aWQpOwotCQl9Ci0JfQorCWF0aF9yY19yYXRlZmluZChzYywgYXRoX3JjX3ByaXYsIHR4cmMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLApAQCAtMTUzMSw2ICsxNTkwLDggQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaTQwOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xNTUyLDEyICsxNjEzLDcxIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEpOworCWlzX2N3NDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwlpc19zZ2k0MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8CisJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKKwkJcmF0ZV90YWJsZSA9IGF0aF9jaG9vc2VfcmF0ZV90YWJsZShzYywgc2JhbmQtPmJhbmQsCisJCQkJCQkgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQsCisJCQkJCQkgICBpc19jdzQwKTsKKwl9IGVsc2UgaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KKwkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKKwl9CisKKwlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwgaXNfY3c0MCwgaXNfc2dpNDApOworCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9yYXRlX3VwZGF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIG9wZXJfY3c0MCA9IGZhbHNlLCBvcGVyX3NnaTQwOworCWJvb2wgbG9jYWxfY3c0MCA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX3NnaTQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKworCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuOworCisJCWlmIChzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKKwkJICAgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQl0cnVlIDogZmFsc2U7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIG9wZXJfY3c0MCk7CisJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwKKwkJCQkJCSAgIG9wZXJfY3c0MCwgb3Blcl9zZ2k0MCk7CisJCQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEsIHJhdGVfdGFibGUpOworCisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCQkiT3BlcmF0aW5nIEhUIEJhbmR3aWR0aCBjaGFuZ2VkIHRvOiAlZFxuIiwKKwkJCQlzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgKmF0aF9yYXRlX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQogewotCXJldHVybiBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJcmV0dXJuIGFwaHktPnNjOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9mcmVlKHZvaWQgKnByaXYpCkBAIC0xNTc4LDcgKzE2OTgsNyBAQAogCX0KIAogCXJhdGVfcHJpdi0+cnNzaV9kb3duX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwotCXJhdGVfcHJpdi0+dHhfdHJpZ2xldmVsX21heCA9IHNjLT5zY19haC0+YWhfY2Fwcy50eF90cmlnbGV2ZWxfbWF4OworCXJhdGVfcHJpdi0+dHhfdHJpZ2xldmVsX21heCA9IHNjLT5zY19haC0+Y2Fwcy50eF90cmlnbGV2ZWxfbWF4OwogCiAJcmV0dXJuIHJhdGVfcHJpdjsKIH0KQEAgLTE1OTYsNDEgKzE3MTYsMTMgQEAKIAkudHhfc3RhdHVzID0gYXRoX3R4X3N0YXR1cywKIAkuZ2V0X3JhdGUgPSBhdGhfZ2V0X3JhdGUsCiAJLnJhdGVfaW5pdCA9IGF0aF9yYXRlX2luaXQsCisJLnJhdGVfdXBkYXRlID0gYXRoX3JhdGVfdXBkYXRlLAogCS5hbGxvYyA9IGF0aF9yYXRlX2FsbG9jLAogCS5mcmVlID0gYXRoX3JhdGVfZnJlZSwKIAkuYWxsb2Nfc3RhID0gYXRoX3JhdGVfYWxsb2Nfc3RhLAogCS5mcmVlX3N0YSA9IGF0aF9yYXRlX2ZyZWVfc3RhLAogfTsKIAotc3RhdGljIHZvaWQgYXRoX3NldHVwX3JhdGVfdGFibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2ldID0gKHU4KS0xOwotCi0JZm9yIChpID0gMDsgaSA8IHJhdGVfdGFibGUtPnJhdGVfY250OyBpKyspIHsKLQkJdTggY29kZSA9IHJhdGVfdGFibGUtPmluZm9baV0ucmF0ZWNvZGU7Ci0JCXU4IGNpeCA9IHJhdGVfdGFibGUtPmluZm9baV0uY3RybF9yYXRlOwotCQl1OCBzaCA9IHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGU7Ci0KLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdID0gaTsKLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2NvZGUgfCBzaF0gPSBpOwotCi0JCXJhdGVfdGFibGUtPmluZm9baV0ubHBBY2tEdXJhdGlvbiA9Ci0JCQlhdGg5a19od19jb21wdXRldHh0aW1lKHNjLT5zY19haCwgcmF0ZV90YWJsZSwKLQkJCQkJICAgICAgIFdMQU5fQ1RSTF9GUkFNRV9TSVpFLAotCQkJCQkgICAgICAgY2l4LAotCQkJCQkgICAgICAgZmFsc2UpOwotCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNwQWNrRHVyYXRpb24gPQotCQkJYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICBXTEFOX0NUUkxfRlJBTUVfU0laRSwKLQkJCQkJICAgICAgIGNpeCwKLQkJCQkJICAgICAgIHRydWUpOwotCX0KLX0KLQogdm9pZCBhdGhfcmF0ZV9hdHRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMUJdID0KQEAgLTE2NTEsMTIgKzE3NDMsNiBAQAogCQkmYXI1NDE2XzExbmdfcmF0ZXRhYmxlOwogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdID0KIAkJJmFyNTQxNl8xMW5nX3JhdGV0YWJsZTsKLQotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExYl9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExYV9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExZ19yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExbmFfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMW5nX3JhdGV0YWJsZSk7CiB9CiAKIGludCBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaAppbmRleCA5N2M2MGQxLi4xOTlhM2NlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FtIExlZmZsZXIsIEVycm5vIENvbnN1bHRpbmcKICAqIENvcHlyaWdodCAoYykgMjAwNCBWaWRlbzU0IFRlY2hub2xvZ2llcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xOSwxMyArMTksMTIgQEAKICNpZm5kZWYgUkNfSAogI2RlZmluZSBSQ19ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCiBzdHJ1Y3QgYXRoX3NvZnRjOwogCiAjZGVmaW5lIEFUSF9SQVRFX01BWCAgICAgMzAKICNkZWZpbmUgUkFURV9UQUJMRV9TSVpFICA2NAogI2RlZmluZSBNQVhfVFhfUkFURV9QSFkgIDQ4CisjZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQogCiAvKiBWQUxJRF9BTEwgLSB2YWxpZCBmb3IgMjAvNDAvTGVnYWN5LAogICogVkFMSUQgLSBMZWdhY3kgb25seSwKQEAgLTM5LDYgKzM4LDIwIEBACiAjZGVmaW5lIFZBTElEXzIwNDAgKFZBTElEXzIwfFZBTElEXzQwKQogI2RlZmluZSBWQUxJRF9BTEwgIChWQUxJRF8yMDQwfFZBTElEKQogCitlbnVtIHsKKwlXTEFOX1JDX1BIWV9PRkRNLAorCVdMQU5fUkNfUEhZX0NDSywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9EUywKKwlXTEFOX1JDX1BIWV9IVF80MF9TUywKKwlXTEFOX1JDX1BIWV9IVF80MF9EUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCisJV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKKwlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCisJV0xBTl9SQ19QSFlfTUFYCit9OworCiAjZGVmaW5lIFdMQU5fUkNfUEhZX0RTKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCkBAIC05MCw3ICsxMDMsNiBAQAogICovCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgewogCWludCByYXRlX2NudDsKLQl1OCByYXRlQ29kZVRvSW5kZXhbMjU2XTsKIAlzdHJ1Y3QgewogCQlpbnQgdmFsaWQ7CiAJCWludCB2YWxpZF9zaW5nbGVfc3RyZWFtOwpAQCAtMTA4LDggKzEyMCw2IEBACiAJCXU4IHNnaV9pbmRleDsKIAkJdTggaHRfaW5kZXg7CiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwotCQl1MTYgbHBBY2tEdXJhdGlvbjsKLQkJdTE2IHNwQWNrRHVyYXRpb247CiAJfSBpbmZvW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiByc3NpX3JlZHVjZV9pbnRlcnZhbDsKQEAgLTE4NCwxMSArMTk0LDE5IEBACiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CiB9OwogCitlbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgeworCUFUSDlLX05PVF9JTlRFUk5BTCwKKwlBVEg5S19JTlRfUEFVU0UsCisJQVRIOUtfSU5UX1VOUEFVU0UKK307CisKIHN0cnVjdCBhdGhfdHhfaW5mb19wcml2IHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwogCWludCBuX2ZyYW1lczsKIAlpbnQgbl9iYWRfZnJhbWVzOwogCWJvb2wgdXBkYXRlX3JjOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOwogfTsKIAogI2RlZmluZSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYwppbmRleCA0NjJlMDhjLi43MWNiMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVjdi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsNyArMTQsMjggQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9odyAqIGF0aF9nZXRfdmlydF9odyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPnByaV93aXBoeS0+aHc7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIGFwaHktPmh3LT53aXBoeS0+cGVybV9hZGRyKQorCQkgICAgPT0gMCkgeworCQkJaHcgPSBhcGh5LT5odzsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIGh3OworfQogCiAvKgogICogU2V0dXAgYW5kIGxpbmsgZGVzY3JpcHRvcnMuCkBAIC0yNiw3ICs0Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGF0aF9yeF9idWZfbGluayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTc5LDcgKzEwMCw3IEBACiAJcmV0dXJuICh0c2YgJiB+MHg3ZmZmKSB8IHJzdGFtcDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUzMiBsZW4pCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgb2ZmOwpAQCAtOTcsMTEgKzExOCwxMSBAQAogCSAqIFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB3ZSBtYXkgZ2V0IDggS0IgaGVyZSBmcm9tIHRoZQogCSAqIGtlcm5lbC4uLiBhbmQgdGhhdCBpcyBhY3R1YWxseSB3aGF0IGlzIG9ic2VydmVkIG9uIHNvbWUKIAkgKiBzeXN0ZW1zIDooICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBzYy0+c2NfY2FjaGVsc3ogLSAxKTsKKwlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgc2MtPmNhY2hlbHN6IC0gMSwgZ2ZwX21hc2spOwogCWlmIChza2IgIT0gTlVMTCkgewotCQlvZmYgPSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJSBzYy0+c2NfY2FjaGVsc3o7CisJCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIHNjLT5jYWNoZWxzejsKIAkJaWYgKG9mZiAhPSAwKQotCQkJc2tiX3Jlc2VydmUoc2tiLCBzYy0+c2NfY2FjaGVsc3ogLSBvZmYpOworCQkJc2tiX3Jlc2VydmUoc2tiLCBzYy0+Y2FjaGVsc3ogLSBvZmYpOwogCX0gZWxzZSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkic2tidWZmIGFsbG9jIG9mIHNpemUgJXUgZmFpbGVkXG4iLCBsZW4pOwpAQCAtMTIzLDEwICsxNDQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4IHJhdGVjb2RlOwogCV9fbGUxNiBmYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAltZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTsKKwlodyA9IGF0aF9nZXRfdmlydF9odyhzYywgaGRyKTsKIAogCWlmIChkcy0+ZHNfcnhzdGF0LnJzX21vcmUpIHsKIAkJLyoKQEAgLTEzNSw3ICsxNTgsNyBAQAogCQkgKiBkaXNjYXJkIHRoZSBmcmFtZS4gRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gc2VlCiAJCSAqIGVycm9yIGZyYW1lcyBpbiBNb25pdG9yIG1vZGUuCiAJCSAqLwotCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJaWYgKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQlnb3RvIHJ4X25leHQ7CiAJfSBlbHNlIGlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAhPSAwKSB7CiAJCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX0NSQykKQEAgLTE2MSw3ICsxODQsNyBAQAogCQkgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsCiAJCSAqIHdlIGFsc28gaWdub3JlIHRoZSBDUkMgZXJyb3IuCiAJCSAqLwotCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgeworCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewogCQkJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYKIAkJCSAgICB+KEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfAogCQkJICAgICAgQVRIOUtfUlhFUlJfQ1JDKSkKQEAgLTE4Niw3ICsyMDksNiBAQAogCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcmF0ZWNvZGUgJiAweDdmOwogCX0gZWxzZSB7CiAJCWludCBpID0gMCwgY3VyX2JhbmQsIG5fcmF0ZXM7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCiAJCWN1cl9iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAkJbl9yYXRlcyA9IHNjLT5zYmFuZHNbY3VyX2JhbmRdLm5fYml0cmF0ZXM7CkBAIC0yMDgsOSArMjMwLDkgQEAKIAl9CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBhdGhfZXh0ZW5kX3RzZihzYywgZHMtPmRzX3J4c3RhdC5yc190c3RhbXApOwotCXJ4X3N0YXR1cy0+YmFuZCA9IHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXJ4X3N0YXR1cy0+ZnJlcSA9ICBzYy0+aHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0Jcnhfc3RhdHVzLT5ub2lzZSA9IHNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3I7CisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlyeF9zdGF0dXMtPm5vaXNlID0gc2MtPmFuaS5ub2lzZV9mbG9vcjsKIAlyeF9zdGF0dXMtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+bm9pc2UgKyBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gZHMtPmRzX3J4c3RhdC5yc19hbnRlbm5hOwogCkBAIC0yMzMsNyArMjU1LDcgQEAKIAogc3RhdGljIHZvaWQgYXRoX29wbW9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgcmZpbHQsIG1maWx0WzJdOwogCiAJLyogY29uZmlndXJlIHJ4IGZpbHRlciAqLwpAQCAtMjQxLDE0ICsyNjMsMTQgQEAKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgcmZpbHQpOwogCiAJLyogY29uZmlndXJlIGJzc2lkIG1hc2sgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCi0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7CisJaWYgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKQorCQlhdGg5a19od19zZXRic3NpZG1hc2soc2MpOwogCiAJLyogY29uZmlndXJlIG9wZXJhdGlvbmFsIG1vZGUgKi8KIAlhdGg5a19od19zZXRvcG1vZGUoYWgpOwogCiAJLyogSGFuZGxlIGFueSBsaW5rLWxldmVsIGFkZHJlc3MgY2hhbmdlLiAqLwotCWF0aDlrX2h3X3NldG1hYyhhaCwgc2MtPnNjX215YWRkcik7CisJYXRoOWtfaHdfc2V0bWFjKGFoLCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCiAJLyogY2FsY3VsYXRlIGFuZCBpbnN0YWxsIG11bHRpY2FzdCBmaWx0ZXIgKi8KIAltZmlsdFswXSA9IG1maWx0WzFdID0gfjA7CkBAIC0yNjcsMTEgKzI4OSwxMSBAQAogCQlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4LnJ4YnVmbG9jayk7CiAKIAkJc2MtPnJ4LmJ1ZnNpemUgPSByb3VuZHVwKElFRUU4MDIxMV9NQVhfTVBEVV9MRU4sCi0JCQkJCSAgIG1pbihzYy0+c2NfY2FjaGVsc3osCisJCQkJCSAgIG1pbihzYy0+Y2FjaGVsc3osCiAJCQkJCSAgICAgICAodTE2KTY0KSk7CiAKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCi0JCQlzYy0+c2NfY2FjaGVsc3osIHNjLT5yeC5idWZzaXplKTsKKwkJCXNjLT5jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOwogCiAJCS8qIEluaXRpYWxpemUgcnggZGVzY3JpcHRvcnMgKi8KIApAQCAtMjg0LDIyICszMDYsMjIgQEAKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKLQkJCXNrYiA9IGF0aF9yeGJ1Zl9hbGxvYyhzYywgc2MtPnJ4LmJ1ZnNpemUpOworCQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQllcnJvciA9IC1FTk9NRU07CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWJmLT5iZl9tcGR1ID0gc2tiOwotCQkJYmYtPmJmX2J1Zl9hZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCWJmLT5iZl9idWZfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKIAkJCQkJCQkgc2MtPnJ4LmJ1ZnNpemUsCi0JCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LAorCQkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsCiAJCQkJICBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CisJCQkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFJYIGluaXRcbiIpOwogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTMyMiw4ICszNDQsMTMgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKIAkJc2tiID0gYmYtPmJmX21wZHU7Ci0JCWlmIChza2IpCisJCWlmIChza2IpIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwKKwkJCQkJIGJmLT5iZl9idWZfYWRkciwKKwkJCQkJIHNjLT5yeC5idWZzaXplLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQogCX0KIAogCWlmIChzYy0+cngucnhkbWEuZGRfZGVzY19sZW4gIT0gMCkKQEAgLTM2MCwyNiArMzg3LDM5IEBACiAJCXwgQVRIOUtfUlhfRklMVEVSX01DQVNUOwogCiAJLyogSWYgbm90IGEgU1RBLCBlbmFibGUgcHJvY2Vzc2luZyBvZiBQcm9iZSBSZXF1ZXN0cyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFJPQkVSRVE7CiAKLQkvKiBDYW4ndCBzZXQgSE9TVEFQIGludG8gcHJvbWlzY291cyBtb2RlICovCi0JaWYgKCgoc2MtPnNjX2FoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCisJLyoKKwkgKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSB3aGVuIEZJRl9QUk9NSVNDX0lOX0JTUyBpcyBlbmFibGVkIGZvciBzdGF0aW9uCisJICogbW9kZSBpbnRlcmZhY2Ugb3Igd2hlbiBpbiBtb25pdG9yIG1vZGUuIEFQIG1vZGUgZG9lcyBub3QgbmVlZCB0aGlzCisJICogc2luY2UgaXQgcmVjZWl2ZXMgYWxsIGluLUJTUyBmcmFtZXMgYW55d2F5LgorCSAqLworCWlmICgoKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSAmJgogCSAgICAgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9QUk9NSVNDX0lOX0JTUykpIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkgeworCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QUk9NOwotCQkvKiA/Pz8gVG8gcHJldmVudCBmcm9tIHNlbmRpbmcgQUNLICovCi0JCXJmaWx0ICY9IH5BVEg5S19SWF9GSUxURVJfVUNBU1Q7Ci0JfQogCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9DT05UUk9MKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQ09OVFJPTDsKKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIShzYy0+cngucnhmaWx0ZXIgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykpCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NWUJFQUNPTjsKKwllbHNlCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9CRUFDT047CiAKLQkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMKLQkgICAmIGJlYWNvbiBmcmFtZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJmaWx0IHw9IChBVEg5S19SWF9GSUxURVJfQkVBQ09OIHwgQVRIOUtfUlhfRklMVEVSX1BTUE9MTCk7CisJLyogSWYgaW4gSE9TVEFQIG1vZGUsIHdhbnQgdG8gZW5hYmxlIHJlY2VwdGlvbiBvZiBQU1BPTEwgZnJhbWVzICovCisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFNQT0xMOworCisJaWYgKHNjLT5zZWNfd2lwaHkpIHsKKwkJLyogVE9ETzogb25seSBuZWVkZWQgaWYgbW9yZSB0aGFuIG9uZSBCU1NJRCBpcyBpbiB1c2UgaW4KKwkJICogc3RhdGlvbi9hZGhvYyBtb2RlICovCisJCS8qIFRPRE86IGZvciBvbGRlciBjaGlwcywgbWF5IG5lZWQgdG8gYWRkIEFUSDlLX1JYX0ZJTFRFUl9QUk9NCisJCSAqLworCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMOworCX0KIAogCXJldHVybiByZmlsdDsKIApAQCAtMzg4LDcgKzQyOCw3IEBACiAKIGludCBhdGhfc3RhcnRyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmY7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5yeC5yeGJ1ZmxvY2spOwpAQCAtNDE4LDEzICs0NTgsMTIgQEAKIAogYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgc3RvcHBlZDsKIAogCWF0aDlrX2h3X3N0b3BwY3VyZWN2KGFoKTsKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgMCk7CiAJc3RvcHBlZCA9IGF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoKTsKLQltZGVsYXkoMyk7IC8qIDNtcyBpcyBsb25nIGVub3VnaCBmb3IgMSBmcmFtZSAqLwogCXNjLT5yeC5yeGxpbmsgPSBOVUxMOwogCiAJcmV0dXJuIHN0b3BwZWQ7CkBAIC00NDksNyArNDg4LDcgQEAKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMLCAqcmVxdWV1ZV9za2I7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWludCBoZHJsZW4sIHBhZHNpemUsIHJldHZhbDsKIAlib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTsKQEAgLTUyNCw5ICs1NjMsOSBAQAogCQkgKiAxLiBhY2Nlc3NpbmcgdGhlIGZyYW1lCiAJCSAqIDIuIHJlcXVldWVpbmcgdGhlIHNhbWUgYnVmZmVyIHRvIGgvdwogCQkgKi8KLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkciwKIAkJCQlzYy0+cnguYnVmc2l6ZSwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgYXNrZWQgdG8gZmx1c2ggcmVjZWl2ZSBxdWV1ZSwgZGlyZWN0bHkKQEAgLTU0Nyw3ICs1ODYsNyBAQAogCiAJCS8qIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBhbiBza2IgdG8gcmVxdWV1ZSBvbmNlIHdlIGFyZSBkb25lCiAJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc2tiICovCi0JCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSk7CisJCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0FUT01JQyk7CiAKIAkJLyogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IHdlIGlnbm9yZSB0aGUgY3VycmVudCBSWCdkIGZyYW1lLAogCQkgKiB0ZWxsIGhhcmR3YXJlIGl0IGNhbiBnaXZlIHVzIGEgbmV3IGZyYW1lIHVzaW5nIHRoZSBvbGQKQEAgLTU1Nyw5ICs1OTYsOSBAQAogCQkJZ290byByZXF1ZXVlOwogCiAJCS8qIFVubWFwIHRoZSBmcmFtZSAqLwotCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAogCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAogCQlza2JfcHV0KHNrYiwgZHMtPmRzX3J4c3RhdC5yc19kYXRhbGVuKTsKIAkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0NPTlRST0wpOwpAQCAtNTkwLDI0ICs2MjksNTIgQEAKIAkJCSAgICYmICFkZWNyeXB0X2Vycm9yICYmIHNrYi0+bGVuID49IGhkcmxlbiArIDQpIHsKIAkJCWtleWl4ID0gc2tiLT5kYXRhW2hkcmxlbiArIDNdID4+IDY7CiAKLQkJCWlmICh0ZXN0X2JpdChrZXlpeCwgc2MtPnNjX2tleW1hcCkpCisJCQlpZiAodGVzdF9iaXQoa2V5aXgsIHNjLT5rZXltYXApKQogCQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQl9CisJCWlmIChhaC0+c3dfbWdtdF9jcnlwdG8gJiYKKwkJICAgIChyeF9zdGF0dXMuZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCQkgICAgaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJLyogVXNlIHNvZnR3YXJlIGRlY3J5cHQgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLiAqLworCQkJcnhfc3RhdHVzLmZsYWcgJj0gflJYX0ZMQUdfREVDUllQVEVEOworCQl9CiAKIAkJLyogU2VuZCB0aGUgZnJhbWUgdG8gbWFjODAyMTEgKi8KLQkJX19pZWVlODAyMTFfcngoc2MtPmh3LCBza2IsICZyeF9zdGF0dXMpOworCQlpZiAoaGRyLT5hZGRyMVs1XSAmIDB4MDEpIHsKKwkJCWludCBpOworCQkJLyoKKwkJCSAqIERlbGl2ZXIgYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZXMgdG8gYWxsIHN1aXRhYmxlCisJCQkgKiB2aXJ0dWFsIHdpcGh5cy4KKwkJCSAqLworCQkJLyogVE9ETzogZmlsdGVyIGJhc2VkIG9uIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCQkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwkJCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKwkJCQluc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAobnNrYikKKwkJCQkJX19pZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IsCisJCQkJCQkgICAgICAgJnJ4X3N0YXR1cyk7CisJCQl9CisJCQlfX2llZWU4MDIxMV9yeChzYy0+aHcsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCX0gZWxzZSB7CisJCQkvKiBEZWxpdmVyIHVuaWNhc3QgZnJhbWVzIGJhc2VkIG9uIHJlY2VpdmVyIGFkZHJlc3MgKi8KKwkJCV9faWVlZTgwMjExX3J4KGF0aF9nZXRfdmlydF9odyhzYywgaGRyKSwgc2tiLAorCQkJCSAgICAgICAmcnhfc3RhdHVzKTsKKwkJfQogCiAJCS8qIFdlIHdpbGwgbm93IGdpdmUgaGFyZHdhcmUgb3VyIHNoaW55IG5ldyBhbGxvY2F0ZWQgc2tiICovCiAJCWJmLT5iZl9tcGR1ID0gcmVxdWV1ZV9za2I7Ci0JCWJmLT5iZl9idWZfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCByZXF1ZXVlX3NrYi0+ZGF0YSwKKwkJYmYtPmJmX2J1Zl9hZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgcmVxdWV1ZV9za2ItPmRhdGEsCiAJCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwKIAkJCSAgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KHJlcXVldWVfc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWFxuIik7CisJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlhcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJYmYtPmJmX2RtYWNvbnRleHQgPSBiZi0+YmZfYnVmX2FkZHI7CkBAIC02MjIsNiArNjg5LDEyIEBACiAJCX0gZWxzZSB7CiAJCQlzYy0+cngucnhvdGhlcmFudCA9IDA7CiAJCX0KKworCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCQkJKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0JFQUNPTikpIHsKKwkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfQogcmVxdWV1ZToKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnJ4LnJ4YnVmKTsKIAkJYXRoX3J4X2J1Zl9saW5rKHNjLCBiZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCmluZGV4IDlmZWRiNDkuLjUyNjA1MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtNjcsNyArNjcsNyBAQAogI2RlZmluZSBBUl9ETUFTSVpFXzUxMkIgICAgICAweDAwMDAwMDA3CiAKICNkZWZpbmUgQVJfVFhDRkcgICAgICAgICAgICAgMHgwMDMwCi0jZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaX01BU0sgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfTUFTSyAgMHgwMDAwMDAwNwogI2RlZmluZSBBUl9UWENGR19ETUFTWl80QiAgICAwCiAjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaXzhCICAgIDEKICNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfMTZCICAgMgpAQCAtMTU4LDEzICsxNTgsNiBAQAogI2RlZmluZSBBUl9DU1RfVElNRU9VVF9MSU1JVCAgICAgIDB4RkZGRjAwMDAKICNkZWZpbmUgQVJfQ1NUX1RJTUVPVVRfTElNSVRfUyAgICAxNgogCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwICAgICAgICAgICAgICAgICAgMHgwMTQKLQotI2RlZmluZSBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKF9haCkgXAotCShBUl9TUkVWXzkxMDAoKF9haCkpIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihfYWgpKQotI2RlZmluZSBBUl9TUkVWXzU0MTZfVjIyX09SX0xBVEVSKF9haCkgXAotCShBUl9TUkVWXzkxMDAoKF9haCkpIHx8IEFSX1NSRVZfNTQxNl8yMl9PUl9MQVRFUihfYWgpKQotCiAjZGVmaW5lIEFSX0lTUiAgICAgICAgICAgICAgIDB4MDA4MAogI2RlZmluZSBBUl9JU1JfUlhPSyAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEFSX0lTUl9SWERFU0MgICAgICAgIDB4MDAwMDAwMDIKQEAgLTczMyw2ICs3MjYsNyBAQAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMTAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTEwMCAgICAgICAgICAgICAgICAgIDB4MTQKICNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkxNjAgICAgICAgIAkgICAgICAweDQwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMCAgICAJICAgICAgMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTEgICAgCSAgICAgIDEKQEAgLTc0NSw0NSArNzM5LDYwIEBACiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSAgICAgICAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIgICAgICAgICAgICAgIDIKIAotI2RlZmluZSBBUl9TUkVWXzkxMDBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSkKKyNkZWZpbmUgQVJfU1JFVl81NDE2KF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8IFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkpCiAjZGVmaW5lIEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCkpCisJKCgoQVJfU1JFVl81NDE2KF9haCkpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjApKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTAwKSkKICNkZWZpbmUgQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8IFwKLQkJKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyKSkKLSNkZWZpbmUgQVJfU1JFVl85MTYwKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQotI2RlZmluZSBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpCi0jZGVmaW5lIEFSX1NSRVZfOTE2MF8xMShfYWgpIFwKLQkoQVJfU1JFVl85MTYwKF9haCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExKSkKLSNkZWZpbmUgQVJfU1JFVl85MjgwKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MF8yMChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODApIHx8IFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCi0JKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzIwKSkpCisJKCgoQVJfU1JFVl81NDE2KF9haCkpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjIpKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTAwKSkKIAotI2RlZmluZSBBUl9TUkVWXzkyODUoX2FoKSAoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKKyNkZWZpbmUgQVJfU1JFVl85MTAwKGFoKSBcCisJKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uKSA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkKKyNkZWZpbmUgQVJfU1JFVl85MTAwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCisKKyNkZWZpbmUgQVJfU1JFVl85MTYwKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpCisjZGVmaW5lIEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQorI2RlZmluZSBBUl9TUkVWXzkxNjBfMTEoX2FoKSBcCisJKEFSX1NSRVZfOTE2MChfYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTEpKQorI2RlZmluZSBBUl9TUkVWXzkyODAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCisjZGVmaW5lIEFSX1NSRVZfOTI4MF8yMChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApICYmIFwKKwkJKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKQorI2RlZmluZSBBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODApIHx8IFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApICYmIFwKKwkoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpKQorCisjZGVmaW5lIEFSX1NSRVZfOTI4NShfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODUpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzExKF9haCkgXAotCShBUl9TUkVWXzkyODAoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpCisJKEFSX1NSRVZfOTI4NShhaCkgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKLQkgKEFSX1NSRVZfOTI4NShhaCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkpCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKKwkgKEFSX1NSRVZfOTI4NShhaCkgJiYgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBcCisJCQkgICAgICAgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMihfYWgpIFwKLQkoQVJfU1JFVl85MjgwKGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQorCShBUl9TUkVWXzkyODUoYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCi0JIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMikpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCisJIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gXAorCQkJICAgICAgIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMikpKQogCiAjZGVmaW5lIEFSX1JBRElPX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgICAgMHhmMAogI2RlZmluZSBBUl9SQUQ1MTMzX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgIDB4YzAKQEAgLTg3NSwxMiArODg0LDE1IEBACiAKICNkZWZpbmUgQVJfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFSOTI4NV9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKIAogI2RlZmluZSBBUl9HUElPX0lOX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0OAogI2RlZmluZSBBUl9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkMwMDAKICNkZWZpbmUgQVJfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRkZDMDAKICNkZWZpbmUgQVI5MjhYX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUjkyODVfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkYwMDAKKyNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxMgogCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDRjCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSViAgICAgICAgICAgICAgICAgICAgICAgMHgzCkBAIC04OTQsMTQgKzkwNiwyNCBAQAogI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MX1ZBTF9TICAgICAgICAgICAgICAgICAgIDAKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTCAgICAgICAgICAgICAgICAgICAgIDB4NDA1NAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfUyAgICAgICAyCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfUyAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0RFRiAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9TICAgICAgICAgNAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9ERUYgICAgICAgIDB4MDAwMDAwODAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfREVGX1MgICAgICA3CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQiAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkJfUyAgICAgIDEyCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0JCICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQl9TICAgICAgIDE1CiAjZGVmaW5lIEFSX0dQSU9fUlRDX1JFU0VUX09WRVJSSURFX0VOQUJMRSAgICAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBBUl9HUElPX0pUQUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDEgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1OAorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRV9TICAgICAgICAgICAxNgogCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMiAgICAgICAgICAgICAgICAgICAgICAgMHg0MDVjCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMl9DTEsyNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgpAQCAtOTQwLDcgKzk2Miw3IEBACiAKICNkZWZpbmUgQVJfUlRDX0JBU0UgICAgICAgICAgICAgMHgwMDAyMDAwMAogI2RlZmluZSBBUl9SVENfUkMgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAwMCkgOiAweDcwMDAKKwkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDAwKSA6IDB4NzAwMCkKICNkZWZpbmUgQVJfUlRDX1JDX00JCTB4MDAwMDAwMDMKICNkZWZpbmUgQVJfUlRDX1JDX01BQ19XQVJNICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9SVENfUkNfTUFDX0NPTEQgICAgICAweDAwMDAwMDAyCkBAIC05NDgsNyArOTcwLDcgQEAKICNkZWZpbmUgQVJfUlRDX1JDX1dBUk1fUkVTRVQgICAgMHgwMDAwMDAwOAogCiAjZGVmaW5lIEFSX1JUQ19QTExfQ09OVFJPTCBcCi0JKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDE0KSA6IDB4NzAxNAorCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwMTQpIDogMHg3MDE0KQogCiAjZGVmaW5lIEFSX1JUQ19QTExfRElWICAgICAgICAgIDB4MDAwMDAwMWYKICNkZWZpbmUgQVJfUlRDX1BMTF9ESVZfUyAgICAgICAgMApAQCAtOTU3LDggKzk3OSw2IEBACiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMICAgICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgQVJfUlRDX1BMTF9DTEtTRUxfUyAgICAgOAogCi0KLQogI2RlZmluZSBBUl9SVENfUkVTRVQgXAogCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwNDApIDogMHg3MDQwKQogI2RlZmluZSBBUl9SVENfUkVTRVRfRU4JCSgweDAwMDAwMDAxKQpAQCAtOTk1LDYgKzEwMTUsMTIgQEAKICNkZWZpbmUgQVJfUlRDX0lOVFJfTUFTSyBcCiAJKChBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDA1OCkgOiAweDcwNTgpCiAKKy8qIFJUQ19ERVJJVkVEXyogLSBvbmx5IGZvciBBUjkxMDAgKi8KKworI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEsgICAgICAgICAgIChBUl9SVENfQkFTRSArIDB4MDAzOCkKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRCAgICAweDAwMDBmZmZlCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0RfUyAgMQorCiAjZGVmaW5lCUFSX1NFUV9NQVNLCTB4ODA2MAogCiAjZGVmaW5lIEFSX0FOX1JGMkcxX0NIMCAgICAgICAgIDB4NzgxMApAQCAtMTAyMSw2ICsxMDQ3LDEwIEBACiAjZGVmaW5lIEFSX0FOX1JGNUcxX0NIMV9EQjUgICAgIDB4MDAzODAwMDAKICNkZWZpbmUgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TICAgMTkKIAorI2RlZmluZSBBUl9BTl9UT1AxICAgICAgICAgICAgICAgICAgMHg3ODkwCisjZGVmaW5lIEFSX0FOX1RPUDFfREFDSVBNT0RFCSAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX0FOX1RPUDFfREFDSVBNT0RFX1MJICAgIDE4CisKICNkZWZpbmUgQVJfQU5fVE9QMiAgICAgICAgICAgICAgICAgIDB4Nzg5NAogI2RlZmluZSBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMICAgICAgMHhDMDAwMDAwMAogI2RlZmluZSBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MgICAgMzAKQEAgLTExODEsMTggKzEyMTEsNyBAQAogI2RlZmluZSBBUl9DRlBfVkFMICAgICAgICAgIDB4MDAwMEZGRkYKIAogI2RlZmluZSBBUl9SWF9GSUxURVIgICAgICAgIDB4ODAzQwotI2RlZmluZSBBUl9SWF9GSUxURVJfQUxMICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQVJfUlhfVUNBU1QgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1JYX01DQVNUICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9SWF9CQ0FTVCAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQVJfUlhfQ09OVFJPTCAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1JYX0JFQUNPTiAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBUl9SWF9QUk9NICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfUlhfUFJPQkVfUkVRICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIEFSX1JYX01ZX0JFQUNPTiAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBBUl9SWF9DT01QUl9CQVIgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgQVJfUlhfQ09NUFJfQkEgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEFSX1JYX1VOQ09NX0JBX0JBUiAgMHgwMDAwMTAwMAogCiAjZGVmaW5lIEFSX01DQVNUX0ZJTDAgICAgICAgMHg4MDQwCiAjZGVmaW5lIEFSX01DQVNUX0ZJTDEgICAgICAgMHg4MDQ0CkBAIC0xMjM2LDYgKzEyNTUsOCBAQAogCiAjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxICAgICAgIDB4ODA2MAogI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9TRVEgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQgMHhGRkZGMDAwMAorI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01UX1MgMTYKIAogI2RlZmluZSBBUl9HQVRFRF9DTEtTICAgICAgIDB4ODA2NAogI2RlZmluZSBBUl9HQVRFRF9DTEtTX1RYICAgIDB4MDAwMDAwMDIKQEAgLTEzNzAsOCArMTM5MSw4IEBACiAjZGVmaW5lIEFSX1BIWV9DT1VOVE1BWCAgICAgICAgKDMgPDwgMjIpCiAjZGVmaW5lIEFSX01JQkNOVF9JTlRSTUFTSyAgICAgKDMgPDwgMjIpCiAKLSNkZWZpbmUgQVJfVFNGX1RIUkVTSE9MRCAgICAgICAweDgxM2MKLSNkZWZpbmUgQVJfVFNGX1RIUkVTSE9MRF9WQUwgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX1RTRk9PUl9USFJFU0hPTEQgICAgICAgMHg4MTNjCisjZGVmaW5lIEFSX1RTRk9PUl9USFJFU0hPTERfVkFMICAgMHgwMDAwRkZGRgogCiAjZGVmaW5lIEFSX1BIWV9FUlJfRUlGU19NQVNLICAgODE0NAogCkBAIC0xNDYwLDYgKzE0ODEsMTAgQEAKICNkZWZpbmUgQVJfUENVX1RYQlVGX0NUUkxfVVNBQkxFX1NJWkUgICAweDcwMAogI2RlZmluZSBBUl85Mjg1X1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFICAgMHgzODAKIAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMiAgICAgICAgICAgICAgIDB4ODM0NAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEUgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1QgICAweDAwMDAwMDA0CisKICNkZWZpbmUgQVJfS0VZVEFCTEVfMCAgICAgICAgICAgMHg4ODAwCiAjZGVmaW5lIEFSX0tFWVRBQkxFKF9uKSAgICAgICAgIChBUl9LRVlUQUJMRV8wICsgKChfbikqMzIpKQogI2RlZmluZSBBUl9LRVlfQ0FDSEVfU0laRSAgICAgICAxMjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYwppbmRleCA2NDA0M2U5Li40Y2E2MjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTYsNjMgKzE2LDM1OSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZ2QuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgInJlZ2RfY29tbW9uLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfcmVnZF9jaGFuc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjYSA9IGE7Ci0JY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNiID0gYjsKKy8qCisgKiBUaGlzIGlzIGEgc2V0IG9mIGNvbW1vbiBydWxlcyB1c2VkIGJ5IG91ciB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCisgKiBXZSBoYXZlIDEyIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4gVG8gc2F2ZSBzcGFjZSB3ZSBjb25zb2xpZGF0ZQorICogdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiA1IHN0cnVjdHVyZXMgYnkgZnJlcXVlbmN5IGFuZCBjaGFuZ2UKKyAqIHRoZSBmbGFncyBvbiBvdXIgcmVnX25vdGlmaWVyKCkgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMuCisgKi8KIAotCXJldHVybiAoY2EtPmNoYW5uZWwgPT0gY2ItPmNoYW5uZWwpID8KLQkgICAgKGNhLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSAtCi0JICAgIChjYi0+Y2hhbm5lbEZsYWdzICYgQ0hBTl9GTEFHUykgOiBjYS0+Y2hhbm5lbCAtIGNiLT5jaGFubmVsOwotfQorLyogT25seSB0aGVzZSBjaGFubmVscyBhbGwgYWxsb3cgYWN0aXZlIHNjYW4gb24gYWxsIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucyAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMDFfMTEJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKQogCi1zdGF0aWMgdm9pZAotYXRoOWtfcmVnZF9zb3J0KHZvaWQgKmEsIHUzMiBuLCB1MzIgc2l6ZSwgYXRoX2hhbF9jbXBfdCAqY21wKQotewotCXU4ICphYSA9IGE7Ci0JdTggKmFpLCAqdDsKKy8qIFdlIGVuYWJsZSBhY3RpdmUgc2NhbiBvbiB0aGVzZSBhIGNhc2UgYnkgY2FzZSBiYXNpcyBieSByZWd1bGF0b3J5IGRvbWFpbiAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMTJfMTMJUkVHX1JVTEUoMjQ2Ny0xMCwgMjQ3MisxMCwgNDAsIDAsIDIwLFwKKwkJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKQorI2RlZmluZSBBVEg5S18yR0haX0NIMTQJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDQwLCAwLCAyMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fT0ZETSkKIAotCWZvciAoYWkgPSBhYSArIHNpemU7IC0tbiA+PSAxOyBhaSArPSBzaXplKQotCQlmb3IgKHQgPSBhaTsgdCA+IGFhOyB0IC09IHNpemUpIHsKLQkJCXU4ICp1ID0gdCAtIHNpemU7Ci0JCQlpZiAoY21wKHUsIHQpIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlzd2FwX2FycmF5KHUsIHQsIHNpemUpOwotCQl9Ci19CisvKiBXZSBhbGxvdyBJQlNTIG9uIHRoZXNlIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzIGJ5IHJlZ3VsYXRvcnkgZG9tYWluICovCisjZGVmaW5lIEFUSDlLXzVHSFpfNTE1MF81MzUwCVJFR19SVUxFKDUxNTAtMTAsIDUzNTArMTAsIDQwLCAwLCAzMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fSUJTUykKKyNkZWZpbmUgQVRIOUtfNUdIWl81NDcwXzU4NTAJUkVHX1JVTEUoNTQ3MC0xMCwgNTg1MCsxMCwgNDAsIDAsIDMwLFwKKwkJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKQorI2RlZmluZSBBVEg5S181R0haXzU3MjVfNTg1MAlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsXAorCQkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpCiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXJldHVybiBhaC0+YWhfY3VycmVudFJEICYgfldPUkxEV0lERV9ST0FNSU5HX0ZMQUc7Ci19CisjZGVmaW5lIEFUSDlLXzJHSFpfQUxMCQlBVEg5S18yR0haX0NIMDFfMTEsIFwKKwkJCQlBVEg5S18yR0haX0NIMTJfMTMsIFwKKwkJCQlBVEg5S18yR0haX0NIMTQKIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19jaGFuX2JtX3plcm8odTY0ICpiaXRtYXNrKQotewotCWludCBpOworI2RlZmluZSBBVEg5S181R0haX0FMTAkJQVRIOUtfNUdIWl81MTUwXzUzNTAsIFwKKwkJCQlBVEg5S181R0haXzU0NzBfNTg1MAorLyogVGhpcyBvbmUgc2tpcHMgd2hhdCB3ZSBjYWxsICJtaWQgYmFuZCIgKi8KKyNkZWZpbmUgQVRIOUtfNUdIWl9OT19NSURCQU5ECUFUSDlLXzVHSFpfNTE1MF81MzUwLCBcCisJCQkJQVRIOUtfNUdIWl81NzI1XzU4NTAKIAotCWZvciAoaSA9IDA7IGkgPCBCTUxFTjsgaSsrKSB7Ci0JCWlmIChiaXRtYXNrW2ldICE9IDApCi0JCQlyZXR1cm4gZmFsc2U7CisvKiBDYW4gYmUgdXNlZCBmb3I6CisgKiAweDYwLCAweDYxLCAweDYyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYwXzYxXzYyID0geworCS5uX3JlZ19ydWxlcyA9IDUsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQUxMLAorCQlBVEg5S181R0haX0FMTCwKIAl9Ci0JcmV0dXJuIHRydWU7Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDYzIGFuZCAweDY1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYzXzY1ID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX05PX01JREJBTkQsCisJfQorfTsKKworLyogQ2FuIGJlIHVzZWQgYnkgMHg2NCBvbmx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY0ID0geworCS5uX3JlZ19ydWxlcyA9IDMsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfNUdIWl9OT19NSURCQU5ELAorCX0KK307CisKKy8qIENhbiBiZSB1c2VkIGJ5IDB4NjYgYW5kIDB4NjkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBhdGg5a193b3JsZF9yZWdkb21fNjZfNjkgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJQVRIOUtfMkdIWl9DSDAxXzExLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDY3LCAweDZBIGFuZCAweDY4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY3XzY4XzZBID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfd3dyX3NrdSh1MTYgcmVnZCkKK3sKKwlyZXR1cm4gKChyZWdkICYgV09STERfU0tVX01BU0spID09IFdPUkxEX1NLVV9QUkVGSVgpIHx8CisJCShyZWdkID09IFdPUkxEKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9lZXByb21SRChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCAmIH5XT1JMRFdJREVfUk9BTUlOR19GTEFHOworfQorCitib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuIGlzX3d3cl9za3UoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpKTsKK30KKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKHZvaWQpCit7CisJLyogdGhpcyBpcyB0aGUgbW9zdCByZXN0cmljdGl2ZSAqLworCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworfQorCitjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjE6CisJY2FzZSAweDYyOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82MF82MV82MjsKKwljYXNlIDB4NjM6CisJY2FzZSAweDY1OgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82M182NTsKKwljYXNlIDB4NjQ6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworCWNhc2UgMHg2NjoKKwljYXNlIDB4Njk6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY2XzY5OworCWNhc2UgMHg2NzoKKwljYXNlIDB4Njg6CisJY2FzZSAweDZBOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82N182OF82QTsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4oKTsKKwl9Cit9CisKKy8qIEZyZXF1ZW5jeSBpcyBvbmUgd2hlcmUgcmFkYXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkICovCitzdGF0aWMgYm9vbCBhdGg5a19pc19yYWRhcl9mcmVxKHUxNiBjZW50ZXJfZnJlcSkKK3sKKwlyZXR1cm4gKGNlbnRlcl9mcmVxID49IDUyNjAgJiYgY2VudGVyX2ZyZXEgPD0gNTcwMCk7Cit9CisKKy8qCisgKiBOLkI6IFRoZXNlIGV4Y2VwdGlvbiBydWxlcyBkbyBub3QgYXBwbHkgcmFkYXIgZnJlcXMuCisgKgorICogLSBXZSBlbmFibGUgYWRob2MgKG9yIGJlYWNvbmluZykgaWYgYWxsb3dlZCBieSAxMWQKKyAqIC0gV2UgZW5hYmxlIGFjdGl2ZSBzY2FuIGlmIHRoZSBjaGFubmVsIGlzIGFsbG93ZWQgYnkgMTFkCisgKiAtIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhIHdlIGRldGVybWluZSB3ZSBoYXZlCisgKiAgIHJlY2VpdmVkIGEgYmVhY29uIG9uIGEgY2hhbm5lbCB3ZSBjYW4gZW5hYmxlIGFjdGl2ZSBzY2FuIGFuZAorICogICBhZGhvYyAob3IgYmVhY29uaW5nKS4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgYmFuZHdpZHRoID0gMDsKKwlpbnQgcjsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKGF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSB8fAorCQkJICAgIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpCisJCQkJY29udGludWU7CisKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAorCQkJCQkmYmFuZHdpZHRoLCAmcmVnX3J1bGUpOworCQkJCWlmIChyKQorCQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIElmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICogd2UgZW5hYmxlIGFkaG9jL2JlYWNvbmluZyBpZiBpdCBhbGxvd3MgdXMgdG8KKwkJCQkgKiB1c2UgaXQuIE5vdGUgdGhhdCB3ZSB3b3VsZCBoYXZlIGRpc2FibGVkIGl0CisJCQkJICogYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKiBkZWZhdWx0IGR1cmluZyBpbml0LCBwcmlvciB0byBjYWxsaW5nIG91cgorCQkJCSAqIHJlZ3VsYXRvcnlfaGludCgpLgorCQkJCSAqLworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmCisJCQkJICAgIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJgorCQkJCSAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2gtPmJlYWNvbl9mb3VuZCkKKwkJCQkJY2gtPmZsYWdzICY9IH4oSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8CisJCQkJCSAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKTsKKwkJCX0KKwkJfQorCX0KKworfQorCisvKiBBbGxvd3MgYWN0aXZlIHNjYW4gc2NhbiBvbiBDaCAxMiBhbmQgMTMgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV9hY3RpdmVfc2Nhbl9mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCXUzMiBiYW5kd2lkdGggPSAwOworCWludCByOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisKKwkvKgorCSAqIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQgYWx3YXlzIGVuYWJsZSBhY3RpdmUgc2NhbgorCSAqIG9uIHRoZXNlIGNoYW5uZWxzLiBUaGlzIGlzIG9ubHkgZG9uZSBmb3Igc3BlY2lmaWMgcmVndWxhdG9yeSBTS1VzCisJICovCisJaWYgKGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2lldmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCisJICogY2hhbm5lbCBmaXJzdCBiZWZvcmUgZW5hYmxpbmcgYWN0aXZlIHNjYW4uIFRoZSBwYXNzaXZlIHNjYW4KKwkgKiB3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKKwkgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4uCisJICovCisKKwljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEsICZiYW5kd2lkdGgsICZyZWdfcnVsZSk7CisJaWYgKCFyKSB7CisJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTikpCisJCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJCWNoLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KKworCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwgJmJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKKwlpZiAoIXIpIHsKKwkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJfQorfQorCisvKiBBbHdheXMgYXBwbHkgUmFkYXIvREZTIHJ1bGVzIG9uIGZyZXEgcmFuZ2UgNTI2MCBNSHogLSA1NzAwIE1IeiAqLwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoIWF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSkKKwkJCWNvbnRpbnVlOworCQkvKiBXZSBhbHdheXMgZW5hYmxlIHJhZGFyIGRldGVjdGlvbi9ERlMgb24gdGhpcworCQkgKiBmcmVxdWVuY3kgcmFuZ2UuIEFkZGl0aW9uYWxseSB3ZSBhbHNvIGFwcGx5IG9uCisJCSAqIHRoaXMgZnJlcXVlbmN5IHJhbmdlOgorCQkgKiAtIElmIFNUQSBtb2RlIGRvZXMgbm90IHlldCBoYXZlIERGUyBzdXBwb3J0cyBkaXNhYmxlCisJCSAqICAgYWN0aXZlIHNjYW5uaW5nCisJCSAqIC0gSWYgYWRob2MgbW9kZSBkb2VzIG5vdCBzdXBwb3J0IERGUyB5ZXQgdGhlbgorCQkgKiAgIGRpc2FibGUgYWRob2MgaW4gdGhlIGZyZXF1ZW5jeS4KKwkJICogLSBJZiBBUCBtb2RlIGRvZXMgbm90IHlldCBzdXBwb3J0IHJhZGFyIGRldGVjdGlvbi9ERlMKKwkJICogICBkbyBub3QgYWxsb3cgQVAgbW9kZQorCQkgKi8KKwkJaWYgKCEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKQorCQkJY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkJCQkgICAgIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KK30KKwordm9pZCBhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjM6CisJY2FzZSAweDY2OgorCWNhc2UgMHg2NzoKKwkJYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgaW5pdGlhdG9yKTsKKwkJYnJlYWs7CisJY2FzZSAweDY4OgorCQlhdGg5a19yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCQlhdGg5a19yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3Mod2lwaHksIGluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK2ludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwkvKiBXZSBhbHdheXMgYXBwbHkgdGhpcyAqLworCWF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CisKKwlzd2l0Y2ggKHJlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisJCWlmIChhdGg5a19pc193b3JsZF9yZWdkKHNjLT5zY19haCkpCisJCQlhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Mod2lwaHksIHJlcXVlc3QtPmluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitib29sIGF0aDlrX3JlZ2RfaXNfZWVwcm9tX3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUxNiByZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKIAlpbnQgaTsKIAogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgY291bnRyeSBjb2RlICovCiAJCXUxNiBjYyA9IHJkICYgfkNPVU5UUllfRVJEX0ZMQUc7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykKIAkJCWlmIChhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUgPT0gY2MpCiAJCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgcmVncGFpciB2YWx1ZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKIAkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJkKQogCQkJCXJldHVybiB0cnVlOwpAQCAtODIsMTEzICszNzgsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXUzMiByZWdjYXA7Ci0KLQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCi0JaWYgKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfY2NvZGVfdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHUxNiBjYykKLXsKLQl1MTYgcmQ7Ci0JaW50IGk7Ci0KLQlpZiAoY2MgPT0gQ1RSWV9ERUZBVUxUKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoY2MgPT0gQ1RSWV9ERUJVRykKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiRUVQUk9NIHJlZ2RvbWFpbiAweCV4XG4iLCByZCk7Ci0KLQlpZiAocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRUVQUk9NIHNldHRpbmcgaXMgY291bnRyeSBjb2RlICV1XG4iLAotCQkJcmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JCXJldHVybiBjYyA9PSAocmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7Ci0JCWlmIChjYyA9PSBhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUpIHsKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCQkJaWYgKChyZCAmIFdPUkxEX1NLVV9NQVNLKSA9PSBXT1JMRF9TS1VfUFJFRklYKQotCQkJCXJldHVybiB0cnVlOwotI2VuZGlmCi0JCQlpZiAoYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW0gPT0gcmQgfHwKLQkJCSAgICByZCA9PSBERUJVR19SRUdfRE1OIHx8IHJkID09IE5PX0VOVU1SRCkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgKmNvdW50cnksCi0JCQkgICBzdHJ1Y3QgcmVnRG9tYWluICpyZDVHSHosCi0JCQkgICB1bnNpZ25lZCBsb25nICptb2Rlc19hbGxvd2VkKQotewotCWJpdG1hcF9jb3B5KG1vZGVzX2FsbG93ZWQsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFnKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFHLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgIChhdGg5a19yZWdkX2lzX2NoYW5fYm1femVybyhyZDVHSHotPmNoYW4xMWEpKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFBLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkdfSFQyMCwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpCi0JICAgICYmICghY291bnRyeS0+YWxsb3cxMW5nMjApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykKLQkgICAgJiYgKCFjb3VudHJ5LT5hbGxvdzExbmEyMCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQyMCwgbW9kZXNfYWxsb3dlZCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmc0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFuZzQwKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDQwUExVUywgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgICghY291bnRyeS0+YWxsb3cxMW5hNDApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmE0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBtb2Rlc19hbGxvd2VkKTsKLX0KLQotYm9vbCBhdGg5a19yZWdkX2lzX3B1YmxpY19zYWZldHlfc2t1KHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQl1MTYgcmQ7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCXN3aXRjaCAocmQpIHsKLQljYXNlIEZDQzRfRkNDQToKLQljYXNlIChDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDkgfCBDT1VOVFJZX0VSRF9GTEFHKToKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBERUJVR19SRUdfRE1OOgotCWNhc2UgTk9fRU5VTVJEOgotCQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfVU5JVEVEX1NUQVRFU19GQ0M0OSkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCisvKiBFRVBST00gY291bnRyeSBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKIGF0aDlrX3JlZ2RfZmluZF9jb3VudHJ5KHUxNiBjb3VudHJ5Q29kZSkKIHsKQEAgLTIwMSwxMiArMzkxLDIyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCkKKy8qIEVFUFJPTSByZCBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLworc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKK2F0aDlrX3JlZ2RfZmluZF9jb3VudHJ5X2J5X3JkKGludCByZWdkbW4pCiB7Ci0JdTE2IHJkOwogCWludCBpOwogCi0JcmQgPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJCWlmIChhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bSA9PSByZWdkbW4pCisJCQlyZXR1cm4gJmFsbENvdW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybnMgdGhlIG1hcCBvZiB0aGUgRUVQUk9NIHNldCBSRCB0byBhIGNvdW50cnkgY29kZSAqLworc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9kZWZhdWx0X2NvdW50cnkodTE2IHJkKQorewogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKIAkJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKIAkJdTE2IGNjID0gcmQgJiB+Q09VTlRSWV9FUkRfRkxBRzsKQEAgLTIxNiw3OTggKzQxNiwxMDQgQEAKIAkJCXJldHVybiBjYzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKLQkJaWYgKHJlZ0RvbWFpblBhaXJzW2ldLnJlZ0RtbkVudW0gPT0gcmQpIHsKLQkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQyAhPSAwKQotCQkJCXJldHVybiByZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQzsKLQkJCWVsc2UKLQkJCQlpID0gQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7Ci0JCX0KIAlyZXR1cm4gQ1RSWV9ERUZBVUxUOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19yZWdkX2lzX3ZhbGlkX3JlZ19kb21haW4oaW50IHJlZ0RtbiwKLQkJCQkJICAgc3RydWN0IHJlZ0RvbWFpbiAqcmQpCitzdGF0aWMgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nKgorYXRoOWtfZ2V0X3JlZ3BhaXIoaW50IHJlZ2RtbikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ0RvbWFpbnMpOyBpKyspIHsKLQkJaWYgKHJlZ0RvbWFpbnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCWlmIChyZCAhPSBOVUxMKSB7Ci0JCQkJbWVtY3B5KHJkLCAmcmVnRG9tYWluc1tpXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZWdEb21haW4pKTsKLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluUGFpcihpbnQgcmVnRG1uUGFpcikKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdEbW5QYWlyID09IE5PX0VOVU1SRCkKLQkJcmV0dXJuIGZhbHNlOworCWlmIChyZWdkbW4gPT0gTk9fRU5VTVJEKQorCQlyZXR1cm4gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykgewotCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW5QYWlyKQotCQkJcmV0dXJuIHRydWU7CisJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJlZ2RtbikKKwkJCXJldHVybiAmcmVnRG9tYWluUGFpcnNbaV07CiAJfQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCByZWdEbW4sCi0JCQkgICAgICAgdTE2IGNoYW5uZWxGbGFnLCBzdHJ1Y3QgcmVnRG9tYWluICpyZCkKK2ludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaW50IGksIGZvdW5kOwotCXU2NCBmbGFncyA9IE5PX1JFUTsKLQlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ1BhaXIgPSBOVUxMOwotCWludCByZWdPcmc7Ci0KLQlyZWdPcmcgPSByZWdEbW47Ci0JaWYgKHJlZ0RtbiA9PSBDVFJZX0RFRkFVTFQpIHsKLQkJdTE2IHJkbnVtOwotCQlyZG51bSA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCQlpZiAoIShyZG51bSAmIENPVU5UUllfRVJEX0ZMQUcpKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluKHJkbnVtLCBOVUxMKSB8fAotCQkJICAgIGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpblBhaXIocmRudW0pKSB7Ci0JCQkJcmVnRG1uID0gcmRudW07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKHJlZ0RtbiAmIE1VTFRJX0RPTUFJTl9NQVNLKSA9PSAwKSB7Ci0JCWZvciAoaSA9IDAsIGZvdW5kID0gMDsKLQkJICAgICAoaSA8IEFSUkFZX1NJWkUocmVnRG9tYWluUGFpcnMpKSAmJiAoIWZvdW5kKTsgaSsrKSB7Ci0JCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCQlyZWdQYWlyID0gJnJlZ0RvbWFpblBhaXJzW2ldOwotCQkJCWZvdW5kID0gMTsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJGYWlsZWQgdG8gZmluZCByZWcgZG9tYWluIHBhaXIgJXVcbiIsIHJlZ0Rtbik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKCEoY2hhbm5lbEZsYWcgJiBDSEFOTkVMXzJHSFopKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW41R0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczVHSHo7Ci0JCX0KLQkJaWYgKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW4yR0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczJHSHo7Ci0JCX0KLQl9Ci0KLQlmb3VuZCA9IGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpbihyZWdEbW4sIHJkKTsKLQlpZiAoIWZvdW5kKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRmFpbGVkIHRvIGZpbmQgdW5pdGFyeSByZWcgZG9tYWluICV1XG4iLCByZWdEbW4pOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJcmQtPnBzY2FuICY9IHJlZ1BhaXItPnBzY2FuTWFzazsKLQkJaWYgKCgocmVnT3JnICYgTVVMVElfRE9NQUlOX01BU0spID09IDApICYmCi0JCSAgICAoZmxhZ3MgIT0gTk9fUkVRKSkgewotCQkJcmQtPmZsYWdzID0gZmxhZ3M7Ci0JCX0KLQotCQlyZC0+ZmxhZ3MgJj0gKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSA/Ci0JCSAgICBSRUdfRE9NQUlOXzJHSFpfTUFTSyA6IFJFR19ET01BSU5fNUdIWl9NQVNLOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfYml0X3NldChpbnQgYml0LCB1NjQgKmJpdG1hc2spCi17Ci0JaW50IGJ5dGVPZmZzZXQsIGJpdG51bTsKLQl1NjQgdmFsOwotCi0JYnl0ZU9mZnNldCA9IGJpdCAvIDY0OwotCWJpdG51bSA9IGJpdCAtIGJ5dGVPZmZzZXQgKiA2NDsKLQl2YWwgPSAoKHU2NCkgMSkgPDwgYml0bnVtOwotCWlmIChiaXRtYXNrW2J5dGVPZmZzZXRdICYgdmFsKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHU4ICpyZWdjbGFzc2lkcywgdTMyIG1heHJlZ2lkcywKLQkJCSAgIHUzMiAqbnJlZ2lkcywgdTggcmVnY2xhc3NpZCkKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdjbGFzc2lkID09IDApCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXhyZWdpZHM7IGkrKykgewotCQlpZiAocmVnY2xhc3NpZHNbaV0gPT0gcmVnY2xhc3NpZCkKLQkJCXJldHVybjsKLQkJaWYgKHJlZ2NsYXNzaWRzW2ldID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBtYXhyZWdpZHMpCi0JCXJldHVybjsKLQllbHNlIHsKLQkJcmVnY2xhc3NpZHNbaV0gPSByZWdjbGFzc2lkOwotCQkqbnJlZ2lkcyArPSAxOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGVudW0gcmVnX2V4dF9iaXRtYXAgYml0KQotewotCXJldHVybiAoYWgtPmFoX2N1cnJlbnRSREV4dCAmICgxIDw8IGJpdCkpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0KLXN0YXRpYyB2b2lkIGF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucywKLQkJCQkgICAgICBpbnQgbmNoYW5zKQotewotCWludCBpLCBqLCBuZXh0OwotCi0JZm9yIChuZXh0ID0gMDsgbmV4dCA8IG5jaGFuczsgbmV4dCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fTkZfUkVBRElOR1M7IGkrKykgewotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5jdXJySW5kZXggPSAwOwotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5wcml2TkYgPQotCQkJICAgIEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7Ci0JCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLmludmFsaWRORmNvdW50ID0KLQkJCSAgICBBUl9QSFlfQ0NBX0ZJTFRFUldJTkRPV19MRU5HVEg7Ci0JCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLm5mQ2FsQnVmZmVyW2pdID0KLQkJCQkgICAgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRTsKLQkJCX0KLQkJfQotCX0KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICB1MTYgYykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNTA7IGkrKykgewotCQlpZiAoIWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsKQotCQkJcmV0dXJuIC0xOwotCQllbHNlIGlmIChhaC0+YWhfY2hhbm5lbHNbaV0uY2hhbm5lbCA9PSBjKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgYm9vbAotYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICB1MTYgYywKLQkJICAgICAgIHUxNiBjX2xvLAotCQkgICAgICAgdTE2IGNfaGksCi0JCSAgICAgICB1MTYgbWF4Q2hhbiwKLQkJICAgICAgIHU4IGN0bCwKLQkJICAgICAgIGludCBwb3MsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwKLQkJICAgICAgIHN0cnVjdCBSZWdEbW5GcmVxQmFuZCAqZmJhbmQsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluICpyZCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBjbW9kZSAqY20sCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW5zLAotCQkgICAgICAgYm9vbCBlbmFibGVFeHRlbmRlZENoYW5uZWxzKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuOwotCWludCByZXQ7Ci0JdTMyIGNoYW5uZWxGbGFncyA9IDA7Ci0JdTggcHJpdkZsYWdzID0gMDsKLQotCWlmICghKGNfbG8gPD0gYyAmJiBjIDw9IGNfaGkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiYyAldSBvdXQgb2YgcmFuZ2UgWyV1Li4ldV1cbiIsCi0JCQljLCBjX2xvLCBjX2hpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9IQUxGX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9IQUxGUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBoYWxmIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9RVUFSVEVSX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBxdWFydGVyIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKChjICsgZmJhbmQtPmNoYW5uZWxTZXApIC8gMikgPiAobWF4Q2hhbiArIEhBTEZfTUFYQ0hBTkJXKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJImMgJXUgPiBtYXhDaGFuICV1XG4iLCBjLCBtYXhDaGFuKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICgoZmJhbmQtPnVzZVBhc3NTY2FuICYgSVNfRUNNX0NIQU4pICYmICFlbmFibGVFeHRlbmRlZENoYW5uZWxzKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgZWNtIGNoYW5uZWxcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKChyZC0+ZmxhZ3MgJiBOT19IT1NUQVApICYmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIlNraXBwaW5nIEhPU1RBUCBjaGFubmVsXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9GQ0NfREZTX0hUNDApKSAmJgotCSAgICAoZmJhbmQtPnVzZURmcykgJiYKLQkgICAgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCAhPSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9mY2NfZGZzX2h0NDAgPSAwKVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCSAgICAhKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoYWgsCi0JCQkJCQkgUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCkpICYmCi0JICAgICEoZmJhbmQtPnVzZURmcykgJiYgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCA9PSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9qYXBfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCkpICYmCi0JICAgIChmYmFuZC0+dXNlRGZzKSAmJgotCSAgICAocmQtPmNvbmZvcm1hbmNlVGVzdExpbWl0ID09IE1LSykpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyBIVDQwIGNoYW5uZWwgKGVuX2phcF9kZnNfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIENhbGN1bGF0ZSBjaGFubmVsIGZsYWdzICovCi0KLQljaGFubmVsRmxhZ3MgPSBjbS0+ZmxhZ3M7Ci0KLQlzd2l0Y2ggKGZiYW5kLT5jaGFubmVsQlcpIHsKLQljYXNlIENIQU5ORUxfSEFMRl9CVzoKLQkJY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSEFMRjsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX1FVQVJURVJfQlc6Ci0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1FVQVJURVI7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChmYmFuZC0+dXNlUGFzc1NjYW4gJiByZC0+cHNjYW4pCi0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1BBU1NJVkU7Ci0JZWxzZQotCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQlpZiAoZmJhbmQtPnVzZURmcyAmIHJkLT5kZnNNYXNrKQotCQlwcml2RmxhZ3MgPSBDSEFOTkVMX0RGUzsKLQllbHNlCi0JCXByaXZGbGFncyA9IDA7Ci0JaWYgKHJkLT5mbGFncyAmIExJTUlUX0ZSQU1FXzRNUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfNE1TX0xJTUlUOwotCWlmIChwcml2RmxhZ3MgJiBDSEFOTkVMX0RGUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JaWYgKHJkLT5mbGFncyAmIEFESE9DX1BFUl8xMUQpCi0JCXByaXZGbGFncyB8PSBDSEFOTkVMX1BFUl8xMURfQURIT0M7Ci0KLQlpZiAoY2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKSB7Ci0JCWlmICgoYyA8IDI0MTIpIHx8IChjID4gMjQ2MikpIHsKLQkJCWlmIChyZDVHSHoucmVnRG1uRW51bSA9PSBNS0sxIHx8Ci0JCQkgICAgcmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMikgewotCQkJCXUzMiByZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJCWlmICghKHJlZ2NhcCAmCi0JCQkJICAgICAgKEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQpKSAmJgotCQkJCSAgICBpc1VOSUkxT2RkQ2hhbihjKSkgewotCQkJCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcml2RmxhZ3MgfD0gQ0hBTk5FTF9ESVNBTExPV19BREhPQzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaXZGbGFncyB8PSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExQSkgfHwKLQkgICAgKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDIwKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUykpIHsKLQkJaWYgKHJkLT5mbGFncyAmIChBREhPQ19OT18xMUEgfCBESVNBTExPV19BREhPQ18xMUEpKQotCQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JfQotCi0JLyogRmlsbCBpbiBjaGFubmVsIGRldGFpbHMgKi8KLQotCXJldCA9IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KGFoLCBjKTsKLQlpZiAocmV0ID09IC0xKSB7Ci0JCWNoYW4gPSAmYWgtPmFoX2NoYW5uZWxzW3Bvc107Ci0JCWNoYW4tPmNoYW5uZWwgPSBjOwotCQljaGFuLT5tYXhSZWdUeFBvd2VyID0gZmJhbmQtPnBvd2VyRGZzOwotCQljaGFuLT5hbnRlbm5hTWF4ID0gZmJhbmQtPmFudGVubmFNYXg7Ci0JCWNoYW4tPnJlZ0RtbkZsYWdzID0gcmQtPmZsYWdzOwotCQljaGFuLT5tYXhUeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5taW5UeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgPSBjaGFubmVsRmxhZ3M7Ci0JCWNoYW4tPnByaXZGbGFncyA9IHByaXZGbGFnczsKLQl9IGVsc2UgewotCQljaGFuID0gJmFoLT5haF9jaGFubmVsc1tyZXRdOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgfD0gY2hhbm5lbEZsYWdzOwotCQljaGFuLT5wcml2RmxhZ3MgfD0gcHJpdkZsYWdzOwotCX0KLQotCS8qIFNldCBDVExzICovCi0KLQlpZiAoKGNtLT5mbGFncyAmIENIQU5ORUxfQUxMKSA9PSBDSEFOTkVMX0EpCi0JCWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzBdID0gY3RsOwotCWVsc2UgaWYgKChjbS0+ZmxhZ3MgJiBDSEFOTkVMX0FMTCkgPT0gQ0hBTk5FTF9CKQotCQljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXSA9IGN0bDsKLQllbHNlIGlmICgoY20tPmZsYWdzICYgQ0hBTk5FTF9BTEwpID09IENIQU5ORUxfRykKLQkJY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMl0gPSBjdGw7Ci0KLQlyZXR1cm4gKHJldCA9PSAtMSkgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfamFwYW5fY2hlY2soc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGludCBiLAotCQkJCSAgIHN0cnVjdCByZWdEb21haW4gKnJkNUdIeikKLXsKLQlib29sIHNraXBiYW5kID0gZmFsc2U7Ci0JaW50IGk7Ci0JdTMyIHJlZ2NhcDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGpfYmFuZGNoZWNrKTsgaSsrKSB7Ci0JCWlmIChqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCA9PSBiKSB7Ci0JCQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJaWYgKChqX2JhbmRjaGVja1tpXS5lZXByb21mbGFndG9jaGVjayAmIHJlZ2NhcCkgPT0gMCkgewotCQkJCXNraXBiYW5kID0gdHJ1ZTsKLQkJCX0gZWxzZSBpZiAoKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMikgfHwKLQkJCQkgIChyZWdjYXAgJiBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCkpIHsKLQkJCQlyZDVHSHotPmRmc01hc2sgfD0gREZTX01LSzQ7Ci0JCQkJcmQ1R0h6LT5wc2NhbiB8PSBQU0NBTl9NS0szOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkiU2tpcHBpbmcgJWQgZnJlcSBiYW5kXG4iLCBqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCk7Ci0KLQlyZXR1cm4gc2tpcGJhbmQ7Ci19Ci0KLWJvb2wKLWF0aDlrX3JlZ2RfaW5pdF9jaGFubmVscyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgdTMyIG1heGNoYW5zLAotCQkJIHUzMiAqbmNoYW5zLCB1OCAqcmVnY2xhc3NpZHMsCi0JCQkgdTMyIG1heHJlZ2lkcywgdTMyICpucmVnaWRzLCB1MTYgY2MsCi0JCQkgYm9vbCBlbmFibGVPdXRkb29yLAotCQkJIGJvb2wgZW5hYmxlRXh0ZW5kZWRDaGFubmVscykKLXsKLQl1MTYgbWF4Q2hhbiA9IDcwMDA7CiAJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwgcmQyR0h6OwotCWNvbnN0IHN0cnVjdCBjbW9kZSAqY207Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucyA9ICZhaC0+YWhfY2hhbm5lbHNbMF07Ci0JaW50IG5leHQgPSAwLCBiOwotCXU4IGN0bDsKLQlpbnQgcmVnZG1uOwotCXUxNiBjaGFuU2VwOwotCXVuc2lnbmVkIGxvbmcgKm1vZGVzX2F2YWlsOwotCURFQ0xBUkVfQklUTUFQKG1vZGVzX2FsbG93ZWQsIEFUSDlLX01PREVfTUFYKTsKLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJjYyAldSAlcyAlc1xuIiwgY2MsCi0JCSBlbmFibGVPdXRkb29yID8gIkVuYWJsZSBvdXRkb29yIiA6ICIiLAotCQkgZW5hYmxlRXh0ZW5kZWRDaGFubmVscyA/ICJFbmFibGUgZWNtIiA6ICIiKTsKLQotCWlmICghYXRoOWtfcmVnZF9pc19jY29kZV92YWxpZChhaCwgY2MpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiSW52YWxpZCBjb3VudHJ5IGNvZGUgJWRcbiIsIGNjKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwl1MTYgcmVnZG1uOwogCiAJaWYgKCFhdGg5a19yZWdkX2lzX2VlcHJvbV92YWxpZChhaCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCSJJbnZhbGlkIEVFUFJPTSBjb250ZW50c1xuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KGFoKTsKKwlyZWdkbW4gPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHJlZ2Rtbik7CiAKLQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfREVGQVVMVCkgewotCQlhaC0+YWhfY291bnRyeUNvZGUgPSBjYyAmIENPVU5UUllfQ09ERV9NQVNLOwotCQlpZiAoKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQpICYmCi0JCSAgICAoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpID09IENUUllfREVGQVVMVCkpIHsKLQkJCWFoLT5haF9jb3VudHJ5Q29kZSA9IENUUllfVU5JVEVEX1NUQVRFUzsKLQkJfQotCX0KKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCAmJgorCSAgICByZWdkbW4gPT0gQ1RSWV9ERUZBVUxUKQorCQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX1VOSVRFRF9TVEFURVM7CiAKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCWlmIChhaC0+YWhfY291bnRyeUNvZGUgPT0gQ1RSWV9ERUZBVUxUKSB7Ci0JCXJlZ2RtbiA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCkgewogCQljb3VudHJ5ID0gTlVMTDsKIAl9IGVsc2UgewotI2VuZGlmCi0JCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeShhaC0+YWhfY291bnRyeUNvZGUpOworCQljb3VudHJ5ID0gYXRoOWtfcmVnZF9maW5kX2NvdW50cnkoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKIAkJaWYgKGNvdW50cnkgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCQkiQ291bnRyeSBpcyBOVUxMISEhISwgY2M9ICVkXG4iLAotCQkJCWFoLT5haF9jb3VudHJ5Q29kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7CisJCQkJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKIAkJCXJlZ2RtbiA9IGNvdW50cnktPnJlZ0RtbkVudW07Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQkJCWlmICgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSAmCi0JCQkgICAgICBXT1JMRF9TS1VfTUFTSykgPT0gV09STERfU0tVX1BSRUZJWCkgJiYKLQkJCSAgICAoY2MgPT0gQ1RSWV9VTklURURfU1RBVEVTKSkgewotCQkJCWlmICghaXNXd3JTS1VfTm9NaWRiYW5kKGFoKQotCQkJCSAgICAmJiBhdGg5a19yZWdkX2lzX2ZjY19taWRiYW5kX3N1cHBvcnRlZChhaCkpCi0JCQkJCXJlZ2RtbiA9IEZDQzNfRkNDQTsKLQkJCQllbHNlCi0JCQkJCXJlZ2RtbiA9IEZDQzFfRkNDQTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQl9Ci0jZW5kaWYKLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIH5DSEFOTkVMXzJHSFosCi0JCQkJCSAgICAmcmQ1R0h6KSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIkNvdWxkbid0IGZpbmQgdW5pdGFyeSAiCi0JCQkiNUdIeiByZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJYWgtPmFoX2NvdW50cnlDb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIENIQU5ORUxfMkdIWiwKLQkJCQkJICAgICZyZDJHSHopKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiQ291bGRuJ3QgZmluZCB1bml0YXJ5IDJHSHogIgotCQkJInJlZyBkb21haW4gZm9yIGNvdW50cnkgJXVcbiIsCi0JCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKCFpc1d3clNLVShhaCkgJiYgKChyZDVHSHoucmVnRG1uRW51bSA9PSBGQ0MxKSB8fAotCQkJICAgICAgKHJkNUdIei5yZWdEbW5FbnVtID09IEZDQzIpKSkgewotCQlpZiAoYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoYWgpKSB7Ci0JCQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJCQkgICAgRkNDM19GQ0NBLAotCQkJCQkJCSAgICB+Q0hBTk5FTF8yR0haLAotCQkJCQkJCSAgICAmcmQ1R0h6KSkgewotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJCSJDb3VsZG4ndCBmaW5kIHVuaXRhcnkgNUdIeiAiCi0JCQkJCSJyZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQorCWFoLT5yZWd1bGF0b3J5LnJlZ3BhaXIgPSBhdGg5a19nZXRfcmVncGFpcihyZWdkbW4pOworCisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIk5vIHJlZ3VsYXRvcnkgZG9tYWluIHBhaXIgZm91bmQsIGNhbm5vdCBjb250aW51ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJbW9kZXNfYXZhaWwgPSBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlczsKKwlpZiAoIWNvdW50cnkpCisJCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeV9ieV9yZChyZWdkbW4pOworCisJaWYgKGNvdW50cnkpIHsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gY291bnRyeS0+aXNvTmFtZVswXTsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKIAl9IGVsc2UgewotCQlhdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhhaCwgY291bnRyeSwgJnJkNUdIeiwgbW9kZXNfYWxsb3dlZCk7Ci0JCW1vZGVzX2F2YWlsID0gbW9kZXNfYWxsb3dlZDsKLQotCQlpZiAoIWVuYWJsZU91dGRvb3IpCi0JCQltYXhDaGFuID0gY291bnRyeS0+b3V0ZG9vckNoYW5TdGFydDsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gJzAnOworCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMV0gPSAnMCc7CiAJfQogCi0JbmV4dCA9IDA7Ci0KLQlpZiAobWF4Y2hhbnMgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpCi0JCW1heGNoYW5zID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCi0JZm9yIChjbSA9IG1vZGVzOyBjbSA8ICZtb2Rlc1tBUlJBWV9TSVpFKG1vZGVzKV07IGNtKyspIHsKLQkJdTE2IGMsIGNfaGksIGNfbG87Ci0JCXU2NCAqY2hhbm5lbEJNID0gTlVMTDsKLQkJc3RydWN0IHJlZ0RvbWFpbiAqcmQgPSBOVUxMOwotCQlzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgKmZiYW5kID0gTlVMTCwgKmZyZXFzOwotCQlpbnQ4X3QgbG93X2FkaiA9IDAsIGhpX2FkaiA9IDA7Ci0KLQkJaWYgKCF0ZXN0X2JpdChjbS0+bW9kZSwgbW9kZXNfYXZhaWwpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSIhYXZhaWwgbW9kZSAlZCBmbGFncyAweCV4XG4iLAotCQkJCWNtLT5tb2RlLCBjbS0+ZmxhZ3MpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhhaCwgY20tPmZsYWdzLCAmY19sbywgJmNfaGkpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJjaGFubmVscyAweCV4IG5vdCBzdXBwb3J0ZWQgIgotCQkJCSJieSBoYXJkd2FyZVxuIiwgY20tPmZsYWdzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3dpdGNoIChjbS0+bW9kZSkgewotCQljYXNlIEFUSDlLX01PREVfMTFBOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDIwOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDQwUExVUzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOgotCQkJcmQgPSAmcmQ1R0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWE7Ci0JCQlmcmVxcyA9ICZyZWdEbW41R2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIEFUSDlLX01PREVfMTFCOgotCQkJcmQgPSAmcmQyR0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWI7Ci0JCQlmcmVxcyA9ICZyZWdEbW4yR2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCB8IENUTF8xMUI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEg5S19NT0RFXzExRzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQyMDoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVM6Ci0JCWNhc2UgQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzoKLQkJCXJkID0gJnJkMkdIejsKLQkJCWNoYW5uZWxCTSA9IHJkLT5jaGFuMTFnOwotCQkJZnJlcXMgPSAmcmVnRG1uMkdoejExZ0ZyZXFbMF07Ci0JCQljdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfMTFHOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJVbmtub3duIEhBTCBtb2RlIDB4JXhcbiIsIGNtLT5tb2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGF0aDlrX3JlZ2RfaXNfY2hhbl9ibV96ZXJvKGNoYW5uZWxCTSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUykgfHwKLQkJICAgIChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMpKSB7Ci0JCQloaV9hZGogPSAtMjA7Ci0JCX0KLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMpIHx8Ci0JCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUykpIHsKLQkJCWxvd19hZGogPSAyMDsKLQkJfQotCi0JCS8qIFhYWDogQWRkIGEgaGVscGVyIGhlcmUgaW5zdGVhZCAqLwotCQlmb3IgKGIgPSAwOyBiIDwgNjQgKiBCTUxFTjsgYisrKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc19iaXRfc2V0KGIsIGNoYW5uZWxCTSkpIHsKLQkJCQlmYmFuZCA9ICZmcmVxc1tiXTsKLQkJCQlpZiAocmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMQotCQkJCSAgICB8fCByZDVHSHoucmVnRG1uRW51bSA9PSBNS0syKSB7Ci0JCQkJCWlmIChhdGg5a19yZWdkX2phcGFuX2NoZWNrKGFoLAotCQkJCQkJCQkgICBiLAotCQkJCQkJCQkgICAmcmQ1R0h6KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHJlZ2NsYXNzaWRzLAotCQkJCQkJCSAgIG1heHJlZ2lkcywKLQkJCQkJCQkgICBucmVnaWRzLAotCQkJCQkJCSAgIGZiYW5kLT4KLQkJCQkJCQkgICByZWdDbGFzc0lkKTsKLQotCQkJCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmIChyZCA9PSAmcmQ1R0h6KSkgewotCQkJCQljaGFuU2VwID0gNDA7Ci0JCQkJCWlmIChmYmFuZC0+bG93Q2hhbm5lbCA9PSA1MjgwKQotCQkJCQkJbG93X2FkaiArPSAyMDsKLQotCQkJCQlpZiAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTE3MCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZQotCQkJCQljaGFuU2VwID0gZmJhbmQtPmNoYW5uZWxTZXA7Ci0KLQkJCQlmb3IgKGMgPSBmYmFuZC0+bG93Q2hhbm5lbCArIGxvd19hZGo7Ci0JCQkJICAgICAoKGMgPD0gKGZiYW5kLT5oaWdoQ2hhbm5lbCArIGhpX2FkaikpICYmCi0JCQkJICAgICAgKGMgPj0gKGZiYW5kLT5sb3dDaGFubmVsICsgbG93X2FkaikpKTsKLQkJCQkgICAgIGMgKz0gY2hhblNlcCkgewotCQkJCQlpZiAobmV4dCA+PSBtYXhjaGFucykgewotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCQkJCSJ0b28gbWFueSBjaGFubmVscyAiCi0JCQkJCQkJImZvciBjaGFubmVsIHRhYmxlXG4iKTsKLQkJCQkJCWdvdG8gZG9uZTsKLQkJCQkJfQotCQkJCQlpZiAoYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChhaCwKLQkJCQkJCSAgIGMsIGNfbG8sIGNfaGksCi0JCQkJCQkgICBtYXhDaGFuLCBjdGwsCi0JCQkJCQkgICBuZXh0LAotCQkJCQkJICAgcmQ1R0h6LAotCQkJCQkJICAgZmJhbmQsIHJkLCBjbSwKLQkJCQkJCSAgIGljaGFucywKLQkJCQkJCSAgIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpKQotCQkJCQkJbmV4dCsrOwotCQkJCX0KLQkJCQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCQkJCSAgICAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTI4MCkpIHsKLQkJCQkJbG93X2FkaiAtPSAyMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci1kb25lOgotCWlmIChuZXh0ICE9IDApIHsKLQkJaW50IGk7Ci0KLQkJaWYgKG5leHQgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJInRvbyBtYW55IGNoYW5uZWxzICV1OyB0cnVuY2F0aW5nIHRvICV1XG4iLAotCQkJCW5leHQsIChpbnQpIEFSUkFZX1NJWkUoYWgtPmFoX2NoYW5uZWxzKSk7Ci0JCQluZXh0ID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCQl9Ci0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0JCWF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoaWNoYW5zLCBuZXh0KTsKLSNlbmRpZgotCQlhdGg5a19yZWdkX3NvcnQoaWNoYW5zLCBuZXh0LAotCQkJCXNpemVvZihzdHJ1Y3QgYXRoOWtfY2hhbm5lbCksCi0JCQkJYXRoOWtfcmVnZF9jaGFuc29ydCk7Ci0KLQkJYWgtPmFoX25jaGFuID0gbmV4dDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiQ2hhbm5lbCBsaXN0OlxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXh0OyBpKyspIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJImNoYW46ICVkIGZsYWdzOiAweCV4XG4iLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsRmxhZ3MpOwotCQl9Ci0JfQotCSpuY2hhbnMgPSBuZXh0OwotCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCi0JYWgtPmFoX2N1cnJlbnRSREluVXNlID0gcmVnZG1uOwotCWFoLT5haF9jdXJyZW50UkQ1RyA9IHJkNUdIei5yZWdEbW5FbnVtOwotCWFoLT5haF9jdXJyZW50UkQyRyA9IHJkMkdIei5yZWdEbW5FbnVtOwotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJYWgtPmFoX2lzb1swXSA9IDA7Ci0JCWFoLT5haF9pc29bMV0gPSAwOwotCX0gZWxzZSB7Ci0JCWFoLT5haF9pc29bMF0gPSBjb3VudHJ5LT5pc29OYW1lWzBdOwotCQlhaC0+YWhfaXNvWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKLQl9Ci0KLQlyZXR1cm4gbmV4dCAhPSAwOwotfQotCi1zdHJ1Y3QgYXRoOWtfY2hhbm5lbCoKLWF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmJhc2UsICpjYzsKLQotCWludCBmbGFncyA9IGMtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1M7Ci0JaW50IG4sIGxpbTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCSJjaGFubmVsICV1LzB4JXggKDB4JXgpIHJlcXVlc3RlZFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzLCBmbGFncyk7CisJCSJDb3VudHJ5IGFscGhhMiBiZWluZyB1c2VkOiAlYyVjXG4iCisJCSJSZWd1bGF0b3J5LlJlZ3BhaXIgZGV0ZWN0ZWQ6IDB4JTB4XG4iLAorCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMF0sIGFoLT5yZWd1bGF0b3J5LmFscGhhMlsxXSwKKwkJYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSk7CiAKLQljYyA9IGFoLT5haF9jdXJjaGFuOwotCWlmIChjYyAhPSBOVUxMICYmIGNjLT5jaGFubmVsID09IGMtPmNoYW5uZWwgJiYKLQkgICAgKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQlpZiAoKGNjLT5wcml2RmxhZ3MgJiBDSEFOTkVMX0lOVEVSRkVSRU5DRSkgJiYKLQkJICAgIChjYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ERlMpKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWVsc2UKLQkJCXJldHVybiBjYzsKLQl9Ci0KLQliYXNlID0gYWgtPmFoX2NoYW5uZWxzOwotCW4gPSBhaC0+YWhfbmNoYW47Ci0KLQlmb3IgKGxpbSA9IG47IGxpbSAhPSAwOyBsaW0gPj49IDEpIHsKLQkJaW50IGQ7Ci0JCWNjID0gJmJhc2VbbGltID4+IDFdOwotCQlkID0gYy0+Y2hhbm5lbCAtIGNjLT5jaGFubmVsOwotCQlpZiAoZCA9PSAwKSB7Ci0JCQlpZiAoKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQkJCWlmICgoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfSU5URVJGRVJFTkNFKSAmJgotCQkJCSAgICAoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfREZTKSkKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gY2M7Ci0JCQl9Ci0JCQlkID0gZmxhZ3MgLSAoY2MtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1MpOwotCQl9Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiY2hhbm5lbCAldS8weCV4IGQgJWRcbiIsCi0JCQljYy0+Y2hhbm5lbCwgY2MtPmNoYW5uZWxGbGFncywgZCk7Ci0JCWlmIChkID4gMCkgewotCQkJYmFzZSA9IGNjICsgMTsKLQkJCWxpbS0tOwotCQl9Ci0JfQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJubyBtYXRjaCBmb3IgJXUvMHgleFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAotdTMyCi1hdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IE5VTEw7Ci0KLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKCFpY2hhbikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaWNoYW4tPmFudGVubmFNYXg7Ci19Ci0KLXUzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3UzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBjdGwgPSBOT19DVEw7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuOwogCi0JaWYgKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQgJiYgaXNXd3JTS1UoYWgpKSB7CisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyIHx8CisJICAgIChhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPT0gQ1RSWV9ERUZBVUxUICYmCisJICAgICBpc193d3Jfc2t1KGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSkpKSB7CiAJCWlmIChJU19DSEFOX0IoY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFCOwogCQllbHNlIGlmIChJU19DSEFOX0coY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFHOwogCQllbHNlCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFBOwotCX0gZWxzZSB7Ci0JCWljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKLQkJaWYgKGljaGFuICE9IE5VTEwpIHsKLQkJCS8qIEZJWE1FICovCi0JCQlpZiAoSVNfQ0hBTl9BKGljaGFuKSkKLQkJCQljdGwgPSBpY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMF07Ci0JCQllbHNlIGlmIChJU19DSEFOX0IoaWNoYW4pKQotCQkJCWN0bCA9IGljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXTsKLQkJCWVsc2UgaWYgKElTX0NIQU5fRyhpY2hhbikpCi0JCQkJY3RsID0gaWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzJdOwotCi0JCQlpZiAoSVNfQ0hBTl9HKGNoYW4pICYmIChjdGwgJiAweGYpID09IENUTF8xMUIpCi0JCQkJY3RsID0gKGN0bCAmIH4weGYpIHwgQ1RMXzExRzsKLQkJfQorCQlyZXR1cm4gY3RsOwogCX0KKworCWlmIChJU19DSEFOX0IoY2hhbikpCisJCWN0bCA9IGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ18yZ2h6X2N0bCB8IENUTF8xMUI7CisJZWxzZSBpZiAoSVNfQ0hBTl9HKGNoYW4pKQorCQljdGwgPSBhaC0+cmVndWxhdG9yeS5yZWdwYWlyLT5yZWdfMmdoel9jdGwgfCBDVExfMTFHOworCWVsc2UKKwkJY3RsID0gYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnXzVnaHpfY3RsIHwgQ1RMXzExQTsKKwogCXJldHVybiBjdGw7CiB9Ci0KLXZvaWQgYXRoOWtfcmVnZF9nZXRfY3VycmVudF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NvdW50cnlfZW50cnkgKmN0cnkpCi17Ci0JdTE2IHJkID0gYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpOwotCi0JY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGZhbHNlOwotCWlmIChyZCA9PSBDVFJZX0RFRkFVTFQpCi0JCWN0cnktPmlzTXVsdGlkb21haW4gPSB0cnVlOwotCWVsc2UgaWYgKCEocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSkKLQkJY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGlzV3dyU0tVKGFoKTsKLQotCWN0cnktPmNvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCWN0cnktPnJlZ0RtbkVudW0gPSBhaC0+YWhfY3VycmVudFJEOwotCWN0cnktPnJlZ0RtbjVHID0gYWgtPmFoX2N1cnJlbnRSRDVHOwotCWN0cnktPnJlZ0RtbjJHID0gYWgtPmFoX2N1cnJlbnRSRDJHOwotCWN0cnktPmlzb1swXSA9IGFoLT5haF9pc29bMF07Ci0JY3RyeS0+aXNvWzFdID0gYWgtPmFoX2lzb1sxXTsKLQljdHJ5LT5pc29bMl0gPSBhaC0+YWhfaXNvWzJdOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oCmluZGV4IDUxMmQ5OTAuLjlmNWZiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNywxMjcgKzE3LDggQEAKICNpZm5kZWYgUkVHRF9ICiAjZGVmaW5lIFJFR0RfSAogCi0jaW5jbHVkZSAiYXRoOWsuaCIKLQotI2RlZmluZSBCTUxFTiAyCi0jZGVmaW5lIEJNWkVSTyB7KHU2NCkgMCwgKHU2NCkgMH0KLQotI2RlZmluZSBCTShfZmEsIF9mYiwgX2ZjLCBfZmQsIF9mZSwgX2ZmLCBfZmcsIF9maCwgX2ZpLCBfZmosIF9maywgX2ZsKSBcCi0JeygoKChfZmEgPj0gMCkgJiYgKF9mYSA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZhKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYiA+PSAwKSAmJiAoX2ZiIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmIpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZjID49IDApICYmIChfZmMgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mYykgOiAodTY0KSAwKSB8IFwKLQkoKChfZmQgPj0gMCkgJiYgKF9mZCA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZkKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZSA+PSAwKSAmJiAoX2ZlIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmUpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZmID49IDApICYmIChfZmYgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mZikgOiAodTY0KSAwKSB8IFwKLQkoKChfZmcgPj0gMCkgJiYgKF9mZyA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZnKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maCA+PSAwKSAmJiAoX2ZoIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmgpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZpID49IDApICYmIChfZmkgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmogPj0gMCkgJiYgKF9maiA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZqKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mayA+PSAwKSAmJiAoX2ZrIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmspIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZsID49IDApICYmIChfZmwgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mbCkgOiAodTY0KSAwKSB8IFwKLQkJCSgoKChfZmEgPiA2MykgJiYgKF9mYSA8IDEyOCkpID8gXAotCQkJKCgodTY0KSAxKSA8PCAoX2ZhIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYiA+IDYzKSAmJiAoX2ZiIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mYiAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmMgPiA2MykgJiYgKF9mYyA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmMgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZkID4gNjMpICYmIChfZmQgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZkIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZSA+IDYzKSAmJiAoX2ZlIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mZSAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmYgPiA2MykgJiYgKF9mZiA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmYgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZnID4gNjMpICYmIChfZmcgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZnIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maCA+IDYzKSAmJiAoX2ZoIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9maCAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmkgPiA2MykgJiYgKF9maSA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmkgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZqID4gNjMpICYmIChfZmogPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZqIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mayA+IDYzKSAmJiAoX2ZrIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mayAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmwgPiA2MykgJiYgKF9mbCA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmwgLSA2NCkpIDogKHU2NCkgMCkpKX0KLQotI2RlZmluZSBERUZfUkVHRE1OICAgICAgRkNDMV9GQ0NBCi0jZGVmaW5lIERFRl9ETU5fNSAgICAgICBGQ0MxCi0jZGVmaW5lIERFRl9ETU5fMiAgICAgICBGQ0NBCiAjZGVmaW5lIENPVU5UUllfRVJEX0ZMQUcgICAgICAgIDB4ODAwMAogI2RlZmluZSBXT1JMRFdJREVfUk9BTUlOR19GTEFHICAweDQwMDAKLSNkZWZpbmUgU1VQRVJfRE9NQUlOX01BU0sgICAweDBmZmYKLSNkZWZpbmUgQ09VTlRSWV9DT0RFX01BU0sgICAweDNmZmYKLSNkZWZpbmUgQ0ZfSU5URVJGRVJFTkNFICAgICAoQ0hBTk5FTF9DV19JTlQgfCBDSEFOTkVMX1JBREFSX0lOVCkKLSNkZWZpbmUgQ0hBTk5FTF8xNCAgICAgICgyNDg0KQotI2RlZmluZSBJU18xMUdfQ0gxNChfY2gsX2NmKSBcCi0gICAgKCgoX2NoKSA9PSBDSEFOTkVMXzE0KSAmJiAoKF9jZikgPT0gQ0hBTk5FTF9HKSkKLQotI2RlZmluZSBOT19QU0NBTiAgICAweDBVTEwKLSNkZWZpbmUgUFNDQU5fRkNDICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMCi0jZGVmaW5lIFBTQ0FOX0ZDQ19UIDB4MDAwMDAwMDAwMDAwMDAwMlVMTAotI2RlZmluZSBQU0NBTl9FVFNJICAweDAwMDAwMDAwMDAwMDAwMDRVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMSAgMHgwMDAwMDAwMDAwMDAwMDA4VUxMCi0jZGVmaW5lIFBTQ0FOX01LSzIgIDB4MDAwMDAwMDAwMDAwMDAxMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBICAweDAwMDAwMDAwMDAwMDAwMjBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQV9HICAgIDB4MDAwMDAwMDAwMDAwMDA0MFVMTAotI2RlZmluZSBQU0NBTl9FVFNJQSAweDAwMDAwMDAwMDAwMDAwODBVTEwKLSNkZWZpbmUgUFNDQU5fRVRTSUIgMHgwMDAwMDAwMDAwMDAwMTAwVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0lDIDB4MDAwMDAwMDAwMDAwMDIwMFVMTAotI2RlZmluZSBQU0NBTl9XV1IgICAweDAwMDAwMDAwMDAwMDA0MDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTEgMHgwMDAwMDAwMDAwMDAwODAwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0ExX0cgICAweDAwMDAwMDAwMDAwMDEwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTIgMHgwMDAwMDAwMDAwMDAyMDAwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0EyX0cgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMyAgMHgwMDAwMDAwMDAwMDA4MDAwVUxMCi0jZGVmaW5lIFBTQ0FOX0RFRkVSIDB4N0ZGRkZGRkZGRkZGRkZGRlVMTAotI2RlZmluZSBJU19FQ01fQ0hBTiAweDgwMDAwMDAwMDAwMDAwMDBVTEwKLQotI2RlZmluZSBpc1d3clNLVShfYWgpIFwKLQkoKChhdGg5a19yZWdkX2dldF9lZXByb21SRCgoX2FoKSkgJiBXT1JMRF9TS1VfTUFTSykgPT0gXAotCQlXT1JMRF9TS1VfUFJFRklYKSB8fCBcCi0JCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUkxEKSkKLQotI2RlZmluZSBpc1d3clNLVV9Ob01pZGJhbmQoX2FoKSBcCi0JKChhdGg5a19yZWdkX2dldF9lZXByb21SRCgoX2FoKSkgPT0gV09SM19XT1JMRCkgfHwgXAotCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUjRfV09STEQpIHx8IFwKLQkoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoX2FoKSA9PSBXT1I1X0VUU0lDKSkKLQotI2RlZmluZSBpc1VOSUkxT2RkQ2hhbihjaCkgXAotCSgoY2ggPT0gNTE3MCkgfHwgKGNoID09IDUxOTApIHx8IChjaCA9PSA1MjEwKSB8fCAoY2ggPT0gNTIzMCkpCi0KLSNkZWZpbmUgSVNfSFQ0MF9NT0RFKF9tb2RlKQkJCQkJXAotCSgoKF9tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUyAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgICAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTICAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTKSA/IHRydWUgOiBmYWxzZSkpCi0KLSNkZWZpbmUgQ0hBTl9GTEFHUyAgICAgIChDSEFOTkVMX0FMTHxDSEFOTkVMX0hBTEZ8Q0hBTk5FTF9RVUFSVEVSKQotCi0jZGVmaW5lIHN3YXBfYXJyYXkoX2EsIF9iLCBfc2l6ZSkgeyAgICAgICAgICAgICAgICAgICBcCi0JdTggKnMgPSBfYjsgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpbnQgaSA9IF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXU4IHRtcCA9ICpfYTsgICAgICAgICAgICAgXAotCQkqX2ErKyA9ICpzOyAgICAgICAgICAgICAgICAgICAgIFwKLQkJKnMrKyA9IHRtcDsgICAgICAgICAgICAgICAgICAgICBcCi0JfSB3aGlsZSAoLS1pKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfYSAtPSBfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0KLSNkZWZpbmUgSEFMRl9NQVhDSEFOQlcgICAgICAgICAgMTAKIAogI2RlZmluZSBNVUxUSV9ET01BSU5fTUFTSyAweEZGMDAKIApAQCAtMTQ3LDgxICsyOCwyNyBAQAogI2RlZmluZSBDSEFOTkVMX0hBTEZfQlcgICAgICAgICAxMAogI2RlZmluZSBDSEFOTkVMX1FVQVJURVJfQlcgICAgICA1CiAKLXR5cGVkZWYgaW50IGF0aF9oYWxfY21wX3QoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCiBzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgewogCXUxNiByZWdEbW5FbnVtOwotCXUxNiByZWdEbW41R0h6OwotCXUxNiByZWdEbW4yR0h6OwotCXUzMiBmbGFnczVHSHo7Ci0JdTMyIGZsYWdzMkdIejsKLQl1NjQgcHNjYW5NYXNrOwotCXUxNiBzaW5nbGVDQzsKLX07Ci0KLXN0cnVjdCBjY21hcCB7Ci0JY2hhciBpc29OYW1lWzNdOwotCXUxNiBjb3VudHJ5Q29kZTsKKwl1MTYgcmVnXzVnaHpfY3RsOworCXUxNiByZWdfMmdoel9jdGw7CiB9OwogCiBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgewogCXUxNiBjb3VudHJ5Q29kZTsKIAl1MTYgcmVnRG1uRW51bTsKIAljb25zdCBjaGFyICppc29OYW1lOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JYm9vbCBhbGxvdzExZzsKLQlib29sIGFsbG93MTFhVHVyYm87Ci0JYm9vbCBhbGxvdzExZ1R1cmJvOwotCWJvb2wgYWxsb3cxMW5nMjA7Ci0JYm9vbCBhbGxvdzExbmc0MDsKLQlib29sIGFsbG93MTFuYTIwOwotCWJvb2wgYWxsb3cxMW5hNDA7Ci0JdTE2IG91dGRvb3JDaGFuU3RhcnQ7CiB9OwogCi1zdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgewotCXUxNiBsb3dDaGFubmVsOwotCXUxNiBoaWdoQ2hhbm5lbDsKLQl1OCBwb3dlckRmczsKLQl1OCBhbnRlbm5hTWF4OwotCXU4IGNoYW5uZWxCVzsKLQl1OCBjaGFubmVsU2VwOwotCXU2NCB1c2VEZnM7Ci0JdTY0IHVzZVBhc3NTY2FuOwotCXU4IHJlZ0NsYXNzSWQ7Ci19OwotCi1zdHJ1Y3QgcmVnRG9tYWluIHsKLQl1MTYgcmVnRG1uRW51bTsKLQl1OCBjb25mb3JtYW5jZVRlc3RMaW1pdDsKLQl1NjQgZGZzTWFzazsKLQl1NjQgcHNjYW47Ci0JdTMyIGZsYWdzOwotCXU2NCBjaGFuMTFhW0JNTEVOXTsKLQl1NjQgY2hhbjExYV90dXJib1tCTUxFTl07Ci0JdTY0IGNoYW4xMWFfZHluX3R1cmJvW0JNTEVOXTsKLQl1NjQgY2hhbjExYltCTUxFTl07Ci0JdTY0IGNoYW4xMWdbQk1MRU5dOwotCXU2NCBjaGFuMTFnX3R1cmJvW0JNTEVOXTsKLX07Ci0KLXN0cnVjdCBjbW9kZSB7Ci0JdTMyIG1vZGU7Ci0JdTMyIGZsYWdzOwotfTsKLQotI2RlZmluZSBZRVMgdHJ1ZQotI2RlZmluZSBOTyAgZmFsc2UKLQotc3RydWN0IGphcGFuX2JhbmRjaGVjayB7Ci0JdTE2IGZyZXFiYW5kYml0OwotCXUzMiBlZXByb21mbGFndG9jaGVjazsKLX07Ci0KLXN0cnVjdCBjb21tb25fbW9kZV9wb3dlciB7Ci0JdTE2IGxjaGFuOwotCXUxNiBoY2hhbjsKLQl1OCBwd3Jsdmw7CitzdHJ1Y3QgYXRoOWtfcmVndWxhdG9yeSB7CisJY2hhciBhbHBoYTJbMl07CisJdTE2IGNvdW50cnlfY29kZTsKKwl1MTYgbWF4X3Bvd2VyX2xldmVsOworCXUzMiB0cF9zY2FsZTsKKwl1MTYgY3VycmVudF9yZDsKKwl1MTYgY3VycmVudF9yZF9leHQ7CisJaW50MTZfdCBwb3dlcl9saW1pdDsKKwlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7CiB9OwogCiBlbnVtIENvdW50cnlDb2RlIHsKQEAgLTQwNiw3ICsyMzMsMTUgQEAKIAlDVFJZX0JFTEdJVU0yID0gNTAwMgogfTsKIAotdm9pZCBhdGg5a19yZWdkX2dldF9jdXJyZW50X2NvdW50cnkoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSAqY3RyeSk7Citib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpOworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2h3ICphaCk7Citjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4odm9pZCk7Cit2b2lkIGF0aDlrX3JlZ19hcHBseV93b3JsZF9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpOwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSk7CitpbnQgYXRoOWtfcmVnZF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpOwordTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworaW50IGF0aDlrX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZF9jb21tb24uaAppbmRleCA2ZGYxYjNiLi40ZDBlMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNTAsMTc2NiArMTUwLDMyNCBAQAogCU1LSzlfTUtLQyA9IDB4RkUsCiAJTUtLOV9NS0tBMiA9IDB4RkYsCiAKLQlBUEwxID0gMHgwMTUwLAotCUFQTDIgPSAweDAyNTAsCi0JQVBMMyA9IDB4MDM1MCwKLQlBUEw0ID0gMHgwNDUwLAotCUFQTDUgPSAweDA1NTAsCi0JQVBMNiA9IDB4MDY1MCwKLQlBUEw3ID0gMHgwNzUwLAotCUFQTDggPSAweDA4NTAsCi0JQVBMOSA9IDB4MDk1MCwKLQlBUEwxMCA9IDB4MTA1MCwKLQotCUVUU0kxID0gMHgwMTMwLAotCUVUU0kyID0gMHgwMjMwLAotCUVUU0kzID0gMHgwMzMwLAotCUVUU0k0ID0gMHgwNDMwLAotCUVUU0k1ID0gMHgwNTMwLAotCUVUU0k2ID0gMHgwNjMwLAotCUVUU0lBID0gMHgwQTMwLAotCUVUU0lCID0gMHgwQjMwLAotCUVUU0lDID0gMHgwQzMwLAotCi0JRkNDMSA9IDB4MDExMCwKLQlGQ0MyID0gMHgwMTIwLAotCUZDQzMgPSAweDAxNjAsCi0JRkNDNCA9IDB4MDE2NSwKLQlGQ0M1ID0gMHgwNTEwLAotCUZDQzYgPSAweDA2MTAsCi0JRkNDQSA9IDB4MEExMCwKLQotCUFQTEQgPSAweDBENTAsCi0KLQlNS0sxID0gMHgwMTQwLAotCU1LSzIgPSAweDAyNDAsCi0JTUtLMyA9IDB4MDM0MCwKLQlNS0s0ID0gMHgwNDQwLAotCU1LSzUgPSAweDA1NDAsCi0JTUtLNiA9IDB4MDY0MCwKLQlNS0s3ID0gMHgwNzQwLAotCU1LSzggPSAweDA4NDAsCi0JTUtLOSA9IDB4MDk0MCwKLQlNS0sxMCA9IDB4MEI0MCwKLQlNS0sxMSA9IDB4MTE0MCwKLQlNS0sxMiA9IDB4MTI0MCwKLQlNS0sxMyA9IDB4MEM0MCwKLQlNS0sxNCA9IDB4MTQ0MCwKLQlNS0sxNSA9IDB4MTU0MCwKLQlNS0tBID0gMHgwQTQwLAotCU1LS0MgPSAweDBBNTAsCi0KLQlOVUxMMSA9IDB4MDE5OCwKIAlXT1JMRCA9IDB4MDE5OSwKIAlERUJVR19SRUdfRE1OID0gMHgwMWZmLAogfTsKIAotZW51bSB7Ci0JRkNDID0gMHgxMCwKLQlNS0sgPSAweDQwLAotCUVUU0kgPSAweDMwLAorZW51bSBjdGxfZ3JvdXAgeworCUNUTF9GQ0MgPSAweDEwLAorCUNUTF9NS0sgPSAweDQwLAorCUNUTF9FVFNJID0gMHgzMCwKIH07CiAKLWVudW0gewotCU5PX1JFUSA9IDB4MDAwMDAwMDAsCi0JRElTQUxMT1dfQURIT0NfMTFBID0gMHgwMDAwMDAwMSwKLQlESVNBTExPV19BREhPQ18xMUFfVFVSQiA9IDB4MDAwMDAwMDIsCi0JTkVFRF9ORkMgPSAweDAwMDAwMDA0LAotCi0JQURIT0NfUEVSXzExRCA9IDB4MDAwMDAwMDgsCi0JQURIT0NfTk9fMTFBID0gMHgwMDAwMDAxMCwKLQotCVBVQkxJQ19TQUZFVFlfRE9NQUlOID0gMHgwMDAwMDAyMCwKLQlMSU1JVF9GUkFNRV80TVMgPSAweDAwMDAwMDQwLAotCi0JTk9fSE9TVEFQID0gMHgwMDAwMDA4MCwKLQotCVJFUV9NQVNLID0gMHgwMDAwMDBGRiwKLX07Ci0KLSNkZWZpbmUgUkVHX0RPTUFJTl8yR0haX01BU0sgICAgKFJFUV9NQVNLICYgXAotCSh+KEFESE9DX05PXzExQSB8IERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCKSkpCi0jZGVmaW5lIFJFR19ET01BSU5fNUdIWl9NQVNLICAgIFJFUV9NQVNLCi0KKy8qIFJlZ3BhaXIgdG8gQ1RMIGJhbmQgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyByZWdEb21haW5QYWlyc1tdID0gewotCXtOT19FTlVNUkQsIERFQlVHX1JFR19ETU4sIERFQlVHX1JFR19ETU4sIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX1dPUkxELCBOVUxMMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX0VUU0lCLCBOVUxMMSwgRVRTSUIsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX0VUU0lDLCBOVUxMMSwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJLyogcmVncGFpciwgNSBHSHogQ1RMLCAyIEdIeiBDVEwgKi8KKwl7Tk9fRU5VTVJELCBERUJVR19SRUdfRE1OLCBERUJVR19SRUdfRE1OfSwKKwl7TlVMTDFfV09STEQsIE5PX0NUTCwgQ1RMX0VUU0l9LAorCXtOVUxMMV9FVFNJQiwgTk9fQ1RMLCBDVExfRVRTSX0sCisJe05VTEwxX0VUU0lDLCBOT19DVEwsIENUTF9FVFNJfSwKIAotCXtGQ0MyX0ZDQ0EsIEZDQzIsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzJfV09STEQsIEZDQzIsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MyX0VUU0lDLCBGQ0MyLCBFVFNJQywgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDM19GQ0NBLCBGQ0MzLCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MzX1dPUkxELCBGQ0MzLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNF9GQ0NBLCBGQ0M0LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0ZDQzVfRkNDQSwgRkNDNSwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNl9GQ0NBLCBGQ0M2LCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0M2X1dPUkxELCBGQ0M2LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKKwl7RkNDMl9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDMl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MyX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzNfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzNfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7RkNDNF9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNV9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNl9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAogCi0Je0VUU0kxX1dPUkxELCBFVFNJMSwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTJfV09STEQsIEVUU0kyLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJM19XT1JMRCwgRVRTSTMsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0k0X1dPUkxELCBFVFNJNCwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTVfV09STEQsIEVUU0k1LCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJNl9XT1JMRCwgRVRTSTYsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCisJe0VUU0kxX1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJMl9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTNfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0k0X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJNV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTZfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKLQl7RVRTSTNfRVRTSUEsIEVUU0kzLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtGUkFOQ0VfUkVTLCBFVFNJMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJLyogWFhYOiBGb3IgRVRTSTNfRVRTSUEsIFdhcyBOT19DVEwgbWVhbnQgZm9yIHRoZSAyIEdIeiBiYW5kID8gKi8KKwl7RVRTSTNfRVRTSUEsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0ZSQU5DRV9SRVMsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKLQl7RkNDMV9XT1JMRCwgRkNDMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzFfRkNDQSwgRkNDMSwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMV9XT1JMRCwgQVBMMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDJfV09STEQsIEFQTDIsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwzX1dPUkxELCBBUEwzLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMNF9XT1JMRCwgQVBMNCwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDVfV09STEQsIEFQTDUsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw2X1dPUkxELCBBUEw2LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMOF9XT1JMRCwgQVBMOCwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDlfV09STEQsIEFQTDksIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCXtGQ0MxX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzFfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0FQTDFfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMMl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEwzX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDRfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMNV9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEw2X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtBUEw4X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtBUEw5X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0FQTDNfRkNDQSwgQVBMMywgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMV9FVFNJQywgQVBMMSwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDJfRVRTSUMsIEFQTDIsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX0FQTEQsIEFQTDIsIEFQTEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUix9LAorCXtBUEwzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEwxX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfRVRTSUMsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMMl9BUExELCBDVExfRkNDLCBOT19DVEx9LAogCi0Je01LSzFfTUtLQSwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBLCBDVFJZX0pBUEFOfSwKLQl7TUtLMV9NS0tCLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xfSwKLQl7TUtLMV9GQ0NBLCBNS0sxLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjJ9LAotCXtNS0sxX01LS0ExLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjR9LAotCXtNS0sxX01LS0EyLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjV9LAotCXtNS0sxX01LS0MsIE1LSzEsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxLCBDVFJZX0pBUEFONn0sCisJe01LSzFfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzFfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMV9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0syX01LS0EsIE1LSzIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfAotCSBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLCBQU0NBTl9NS0syIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjN9LAorCXtNS0syX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLM19NS0tBLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQSwgQ1RSWV9KQVBBTjI1fSwKLQl7TUtLM19NS0tCLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjd9LAotCXtNS0szX01LS0ExLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMjZ9LAotCXtNS0szX01LS0EyLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOOH0sCi0Je01LSzNfTUtLQywgTUtLMywgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOOX0sCi0Je01LSzNfRkNDQSwgTUtLMywgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMjd9LAorCXtNS0s0X01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLNF9NS0tBLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjM2fSwKLQl7TUtLNF9NS0tCLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xMH0sCi0Je01LSzRfTUtLQTEsIE1LSzQsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMjh9LAotCXtNS0s0X01LS0EyLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjExfSwKLQl7TUtLNF9NS0tDLCBNS0s0LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjEyfSwKLQl7TUtLNF9GQ0NBLCBNS0s0LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjI5fSwKKwl7TUtLNV9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzVfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLNV9NS0tCLCBNS0s1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xM30sCi0Je01LSzVfTUtLQTIsIE1LSzUsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOMTR9LAotCXtNS0s1X01LS0MsIE1LSzUsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMTV9LAorCXtNS0s2X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNl9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLNl9NS0tCLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csIENUUllfSkFQQU4xNn0sCi0Je01LSzZfTUtLQTEsIE1LSzYsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMzB9LAotCXtNS0s2X01LS0EyLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjE3fSwKLQl7TUtLNl9NS0tDLCBNS0s2LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjE4fSwKLQl7TUtLNl9GQ0NBLCBNS0s2LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zMX0sCisJe01LSzdfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s3X01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKIAotCXtNS0s3X01LS0IsIE1LSzcsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xOX0sCi0Je01LSzdfTUtLQTEsIE1LSzcsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMzJ9LAotCXtNS0s3X01LS0EyLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU4yMH0sCi0Je01LSzdfTUtLQywgTUtLNywgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMjF9LAotCXtNS0s3X0ZDQ0EsIE1LSzcsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjMzfSwKKwl7TUtLOF9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzhfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLOF9NS0tCLCBNS0s4LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMjJ9LAotCXtNS0s4X01LS0EyLCBNS0s4LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU4yM30sCi0Je01LSzhfTUtLQywgTUtLOCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMjR9LAorCXtNS0s5X01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s5X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0s5X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzlfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLOV9NS0tBLCBNS0s5LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMzR9LAotCXtNS0s5X0ZDQ0EsIE1LSzksIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjM3fSwKLQl7TUtLOV9NS0tBMSwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjM4fSwKLQl7TUtLOV9NS0tBMiwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQwfSwKLQl7TUtLOV9NS0tDLCBNS0s5LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zOX0sCisJe01LSzEwX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKKwl7TUtLMTBfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEwX01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzEwX01LS0EsIE1LSzEwLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU4zNX0sCi0Je01LSzEwX0ZDQ0EsIE1LSzEwLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU40MX0sCi0Je01LSzEwX01LS0ExLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjQyfSwKLQl7TUtLMTBfTUtLQTIsIE1LSzEwLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFONDR9LAotCXtNS0sxMF9NS0tDLCBNS0sxMCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDN9LAorCXtNS0sxMV9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzExX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMV9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMV9NS0tBLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU40NX0sCi0Je01LSzExX0ZDQ0EsIE1LSzExLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjQ2fSwKLQl7TUtLMTFfTUtLQTEsIE1LSzExLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjQ3fSwKLQl7TUtLMTFfTUtLQTIsIE1LSzExLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQ5fSwKLQl7TUtLMTFfTUtLQywgTUtLMTEsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFONDh9LAorCXtNS0sxMl9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzEyX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMl9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMl9NS0tBLCBNS0sxMiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTB9LAotCXtNS0sxMl9GQ0NBLCBNS0sxMiwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTF9LAotCXtNS0sxMl9NS0tBMSwgTUtLMTIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywKLQkgQ1RSWV9KQVBBTjUyfSwKLQl7TUtLMTJfTUtLQTIsIE1LSzEyLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU41NH0sCi0Je01LSzEyX01LS0MsIE1LSzEyLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU41M30sCisJe01LSzEzX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxNF9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzE1X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxM19NS0tCLCBNS0sxMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjU3fSwKLQotCXtNS0sxNF9NS0tBMSwgTUtLMTQsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONTh9LAotCXtNS0sxNV9NS0tBMSwgTUtLMTUsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONTl9LAotCi0Je1dPUjBfV09STEQsIFdPUjBfV09STEQsIFdPUjBfV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjFfV09STEQsIFdPUjFfV09STEQsIFdPUjFfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SMl9XT1JMRCwgV09SMl9XT1JMRCwgV09SMl9XT1JMRCwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtXT1IzX1dPUkxELCBXT1IzX1dPUkxELCBXT1IzX1dPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1I0X1dPUkxELCBXT1I0X1dPUkxELCBXT1I0X1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjVfRVRTSUMsIFdPUjVfRVRTSUMsIFdPUjVfRVRTSUMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SMDFfV09STEQsIFdPUjAxX1dPUkxELCBXT1IwMV9XT1JMRCwgTk9fUkVRLCBOT19SRVEsCi0JIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SMDJfV09STEQsIFdPUjAyX1dPUkxELCBXT1IwMl9XT1JMRCwgTk9fUkVRLCBOT19SRVEsCi0JIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RVUxX1dPUkxELCBFVTFfV09STEQsIEVVMV9XT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SOV9XT1JMRCwgV09SOV9XT1JMRCwgV09SOV9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1JBX1dPUkxELCBXT1JBX1dPUkxELCBXT1JBX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUkJfV09STEQsIFdPUkJfV09STEQsIFdPUkJfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKKwl7V09SMF9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1IxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SM19XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I0X1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjVfRVRTSUMsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMDFfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMDJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7RVUxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjlfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SQV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1JCX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCiB9OwogCi0jZGVmaW5lCU5PX0lOVEVSU0VDVF9SRVEJMHhGRkZGRkZGRgotI2RlZmluZQlOT19VTklPTl9SRVEJCTAKLQogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCBhbGxDb3VudHJpZXNbXSA9IHsKLQl7Q1RSWV9ERUJVRywgTk9fRU5VTVJELCAiREIiLCAiREVCVUciLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0RFRkFVTFQsIERFRl9SRUdETU4sICJOQSIsICJOT19DT1VOVFJZX1NFVCIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQUxCQU5JQSwgTlVMTDFfV09STEQsICJBTCIsICJBTEJBTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsIE5PLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0FMR0VSSUEsIE5VTEwxX1dPUkxELCAiRFoiLCAiQUxHRVJJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBOTywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BUkdFTlRJTkEsIEFQTDNfV09STEQsICJBUiIsICJBUkdFTlRJTkEiLCBZRVMsIE5PLCBOTywgWUVTLAotCSBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQVJNRU5JQSwgRVRTSTRfV09STEQsICJBTSIsICJBUk1FTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUkFMSUEsIEZDQzJfV09STEQsICJBVSIsICJBVVNUUkFMSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FVU1RSQUxJQTIsIEZDQzZfV09STEQsICJBVSIsICJBVVNUUkFMSUEyIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUklBLCBFVFNJMV9XT1JMRCwgIkFUIiwgIkFVU1RSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQVpFUkJBSUpBTiwgRVRTSTRfV09STEQsICJBWiIsICJBWkVSQkFJSkFOIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CQUhSQUlOLCBBUEw2X1dPUkxELCAiQkgiLCAiQkFIUkFJTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JFTEFSVVMsIEVUU0kxX1dPUkxELCAiQlkiLCAiQkVMQVJVUyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CRUxHSVVNLCBFVFNJMV9XT1JMRCwgIkJFIiwgIkJFTEdJVU0iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMR0lVTTIsIEVUU0k0X1dPUkxELCAiQkwiLCAiQkVMR0lVTSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CRUxJWkUsIEFQTDFfRVRTSUMsICJCWiIsICJCRUxJWkUiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JPTElWSUEsIEFQTDFfRVRTSUMsICJCTyIsICJCT0xWSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JPU05JQV9IRVJaLCBFVFNJMV9XT1JMRCwgIkJBIiwgIkJPU05JQV9IRVJaR09XSU5BIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQlJBWklMLCBGQ0MzX1dPUkxELCAiQlIiLCAiQlJBWklMIiwgWUVTLCBOTywgTk8sIFlFUywgTk8sCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JSVU5FSV9EQVJVU1NBTEFNLCBBUEwxX1dPUkxELCAiQk4iLCAiQlJVTkVJIERBUlVTU0FMQU0iLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JVTEdBUklBLCBFVFNJNl9XT1JMRCwgIkJHIiwgIkJVTEdBUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0NBTkFEQSwgRkNDMl9GQ0NBLCAiQ0EiLCAiQ0FOQURBIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DQU5BREEyLCBGQ0M2X0ZDQ0EsICJDQSIsICJDQU5BREEyIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DSElMRSwgQVBMNl9XT1JMRCwgIkNMIiwgIkNISUxFIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DSElOQSwgQVBMMV9XT1JMRCwgIkNOIiwgIkNISU5BIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DT0xPTUJJQSwgRkNDMV9GQ0NBLCAiQ08iLCAiQ09MT01CSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DT1NUQV9SSUNBLCBGQ0MxX1dPUkxELCAiQ1IiLCAiQ09TVEEgUklDQSIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0NST0FUSUEsIEVUU0kzX1dPUkxELCAiSFIiLCAiQ1JPQVRJQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0NZUFJVUywgRVRTSTFfV09STEQsICJDWSIsICJDWVBSVVMiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0NaRUNILCBFVFNJM19XT1JMRCwgIkNaIiwgIkNaRUNIIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0RFTk1BUkssIEVUU0kxX1dPUkxELCAiREsiLCAiREVOTUFSSyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsIEZDQzFfRkNDQSwgIkRPIiwgIkRPTUlOSUNBTiBSRVBVQkxJQyIsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRUNVQURPUiwgRkNDMV9XT1JMRCwgIkVDIiwgIkVDVUFET1IiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VHWVBULCBFVFNJM19XT1JMRCwgIkVHIiwgIkVHWVBUIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfRUxfU0FMVkFET1IsIEZDQzFfV09STEQsICJTViIsICJFTCBTQUxWQURPUiIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VTVE9OSUEsIEVUU0kxX1dPUkxELCAiRUUiLCAiRVNUT05JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9GSU5MQU5ELCBFVFNJMV9XT1JMRCwgIkZJIiwgIkZJTkxBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRlJBTkNFLCBFVFNJMV9XT1JMRCwgIkZSIiwgIkZSQU5DRSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HRU9SR0lBLCBFVFNJNF9XT1JMRCwgIkdFIiwgIkdFT1JHSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0dFUk1BTlksIEVUU0kxX1dPUkxELCAiREUiLCAiR0VSTUFOWSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HUkVFQ0UsIEVUU0kxX1dPUkxELCAiR1IiLCAiR1JFRUNFIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0dVQVRFTUFMQSwgRkNDMV9GQ0NBLCAiR1QiLCAiR1VBVEVNQUxBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9IT05EVVJBUywgTlVMTDFfV09STEQsICJITiIsICJIT05EVVJBUyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfSE9OR19LT05HLCBGQ0MyX1dPUkxELCAiSEsiLCAiSE9ORyBLT05HIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9IVU5HQVJZLCBFVFNJMV9XT1JMRCwgIkhVIiwgIkhVTkdBUlkiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSUNFTEFORCwgRVRTSTFfV09STEQsICJJUyIsICJJQ0VMQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lORElBLCBBUEw2X1dPUkxELCAiSU4iLCAiSU5ESUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9JTkRPTkVTSUEsIEFQTDFfV09STEQsICJJRCIsICJJTkRPTkVTSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9JUkFOLCBBUEwxX1dPUkxELCAiSVIiLCAiSVJBTiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfSVJFTEFORCwgRVRTSTFfV09STEQsICJJRSIsICJJUkVMQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lTUkFFTCwgTlVMTDFfV09STEQsICJJTCIsICJJU1JBRUwiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0lUQUxZLCBFVFNJMV9XT1JMRCwgIklUIiwgIklUQUxZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBTUFJQ0EsIEVUU0kxX1dPUkxELCAiSk0iLCAiSkFNQUlDQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKKwl7Q1RSWV9ERUJVRywgTk9fRU5VTVJELCAiREIifSwKKwl7Q1RSWV9ERUZBVUxULCBGQ0MxX0ZDQ0EsICJDTyJ9LAorCXtDVFJZX0FMQkFOSUEsIE5VTEwxX1dPUkxELCAiQUwifSwKKwl7Q1RSWV9BTEdFUklBLCBOVUxMMV9XT1JMRCwgIkRaIn0sCisJe0NUUllfQVJHRU5USU5BLCBBUEwzX1dPUkxELCAiQVIifSwKKwl7Q1RSWV9BUk1FTklBLCBFVFNJNF9XT1JMRCwgIkFNIn0sCisJe0NUUllfQVVTVFJBTElBLCBGQ0MyX1dPUkxELCAiQVUifSwKKwl7Q1RSWV9BVVNUUkFMSUEyLCBGQ0M2X1dPUkxELCAiQVUifSwKKwl7Q1RSWV9BVVNUUklBLCBFVFNJMV9XT1JMRCwgIkFUIn0sCisJe0NUUllfQVpFUkJBSUpBTiwgRVRTSTRfV09STEQsICJBWiJ9LAorCXtDVFJZX0JBSFJBSU4sIEFQTDZfV09STEQsICJCSCJ9LAorCXtDVFJZX0JFTEFSVVMsIEVUU0kxX1dPUkxELCAiQlkifSwKKwl7Q1RSWV9CRUxHSVVNLCBFVFNJMV9XT1JMRCwgIkJFIn0sCisJe0NUUllfQkVMR0lVTTIsIEVUU0k0X1dPUkxELCAiQkwifSwKKwl7Q1RSWV9CRUxJWkUsIEFQTDFfRVRTSUMsICJCWiJ9LAorCXtDVFJZX0JPTElWSUEsIEFQTDFfRVRTSUMsICJCTyJ9LAorCXtDVFJZX0JPU05JQV9IRVJaLCBFVFNJMV9XT1JMRCwgIkJBIn0sCisJe0NUUllfQlJBWklMLCBGQ0MzX1dPUkxELCAiQlIifSwKKwl7Q1RSWV9CUlVORUlfREFSVVNTQUxBTSwgQVBMMV9XT1JMRCwgIkJOIn0sCisJe0NUUllfQlVMR0FSSUEsIEVUU0k2X1dPUkxELCAiQkcifSwKKwl7Q1RSWV9DQU5BREEsIEZDQzJfRkNDQSwgIkNBIn0sCisJe0NUUllfQ0FOQURBMiwgRkNDNl9GQ0NBLCAiQ0EifSwKKwl7Q1RSWV9DSElMRSwgQVBMNl9XT1JMRCwgIkNMIn0sCisJe0NUUllfQ0hJTkEsIEFQTDFfV09STEQsICJDTiJ9LAorCXtDVFJZX0NPTE9NQklBLCBGQ0MxX0ZDQ0EsICJDTyJ9LAorCXtDVFJZX0NPU1RBX1JJQ0EsIEZDQzFfV09STEQsICJDUiJ9LAorCXtDVFJZX0NST0FUSUEsIEVUU0kzX1dPUkxELCAiSFIifSwKKwl7Q1RSWV9DWVBSVVMsIEVUU0kxX1dPUkxELCAiQ1kifSwKKwl7Q1RSWV9DWkVDSCwgRVRTSTNfV09STEQsICJDWiJ9LAorCXtDVFJZX0RFTk1BUkssIEVUU0kxX1dPUkxELCAiREsifSwKKwl7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsIEZDQzFfRkNDQSwgIkRPIn0sCisJe0NUUllfRUNVQURPUiwgRkNDMV9XT1JMRCwgIkVDIn0sCisJe0NUUllfRUdZUFQsIEVUU0kzX1dPUkxELCAiRUcifSwKKwl7Q1RSWV9FTF9TQUxWQURPUiwgRkNDMV9XT1JMRCwgIlNWIn0sCisJe0NUUllfRVNUT05JQSwgRVRTSTFfV09STEQsICJFRSJ9LAorCXtDVFJZX0ZJTkxBTkQsIEVUU0kxX1dPUkxELCAiRkkifSwKKwl7Q1RSWV9GUkFOQ0UsIEVUU0kxX1dPUkxELCAiRlIifSwKKwl7Q1RSWV9HRU9SR0lBLCBFVFNJNF9XT1JMRCwgIkdFIn0sCisJe0NUUllfR0VSTUFOWSwgRVRTSTFfV09STEQsICJERSJ9LAorCXtDVFJZX0dSRUVDRSwgRVRTSTFfV09STEQsICJHUiJ9LAorCXtDVFJZX0dVQVRFTUFMQSwgRkNDMV9GQ0NBLCAiR1QifSwKKwl7Q1RSWV9IT05EVVJBUywgTlVMTDFfV09STEQsICJITiJ9LAorCXtDVFJZX0hPTkdfS09ORywgRkNDMl9XT1JMRCwgIkhLIn0sCisJe0NUUllfSFVOR0FSWSwgRVRTSTFfV09STEQsICJIVSJ9LAorCXtDVFJZX0lDRUxBTkQsIEVUU0kxX1dPUkxELCAiSVMifSwKKwl7Q1RSWV9JTkRJQSwgQVBMNl9XT1JMRCwgIklOIn0sCisJe0NUUllfSU5ET05FU0lBLCBBUEwxX1dPUkxELCAiSUQifSwKKwl7Q1RSWV9JUkFOLCBBUEwxX1dPUkxELCAiSVIifSwKKwl7Q1RSWV9JUkVMQU5ELCBFVFNJMV9XT1JMRCwgIklFIn0sCisJe0NUUllfSVNSQUVMLCBOVUxMMV9XT1JMRCwgIklMIn0sCisJe0NUUllfSVRBTFksIEVUU0kxX1dPUkxELCAiSVQifSwKKwl7Q1RSWV9KQU1BSUNBLCBFVFNJMV9XT1JMRCwgIkpNIn0sCiAKLQl7Q1RSWV9KQVBBTiwgTUtLMV9NS0tBLCAiSlAiLCAiSkFQQU4iLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjEsIE1LSzFfTUtLQiwgIkpQIiwgIkpBUEFOMSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMiwgTUtLMV9GQ0NBLCAiSlAiLCAiSkFQQU4yIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zLCBNS0syX01LS0EsICJKUCIsICJKQVBBTjMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQsIE1LSzFfTUtLQTEsICJKUCIsICJKQVBBTjQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUsIE1LSzFfTUtLQTIsICJKUCIsICJKQVBBTjUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjYsIE1LSzFfTUtLQywgIkpQIiwgIkpBUEFONiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAorCXtDVFJZX0pBUEFOLCBNS0sxX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMSwgTUtLMV9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIsIE1LSzFfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zLCBNS0syX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONCwgTUtLMV9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU41LCBNS0sxX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjYsIE1LSzFfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU43LCBNS0szX01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOOCwgTUtLM19NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU45LCBNS0szX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTAsIE1LSzRfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4xMSwgTUtLNF9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4xMiwgTUtLNF9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEzLCBNS0s1X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTQsIE1LSzVfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTUsIE1LSzVfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4xNiwgTUtLNl9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE3LCBNS0s2X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE4LCBNS0s2X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTksIE1LSzdfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4yMCwgTUtLN19NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4yMSwgTUtLN19NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIyLCBNS0s4X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjMsIE1LSzhfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjQsIE1LSzhfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4yNSwgTUtLM19NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI2LCBNS0szX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI3LCBNS0szX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjgsIE1LSzRfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjksIE1LSzRfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMCwgTUtLNl9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMSwgTUtLNl9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjMyLCBNS0s3X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjMzLCBNS0s3X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzQsIE1LSzlfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNSwgTUtLMTBfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNiwgTUtLNF9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM3LCBNS0s5X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzgsIE1LSzlfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzksIE1LSzlfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU40MCwgTUtLOV9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU40MSwgTUtLMTBfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU40MiwgTUtLMTBfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONDMsIE1LSzEwX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDQsIE1LSzEwX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ1LCBNS0sxMV9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ2LCBNS0sxMV9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ3LCBNS0sxMV9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU40OCwgTUtLMTFfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU40OSwgTUtLMTFfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONTAsIE1LSzEyX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONTEsIE1LSzEyX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONTIsIE1LSzEyX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUzLCBNS0sxMl9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjU0LCBNS0sxMl9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU41NywgTUtLMTNfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU41OCwgTUtLMTRfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONTksIE1LSzE1X01LS0ExLCAiSlAifSwKIAotCXtDVFJZX0pBUEFONywgTUtLM19NS0tCLCAiSlAiLCAiSkFQQU43IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU44LCBNS0szX01LS0EyLCAiSlAiLCAiSkFQQU44IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU45LCBNS0szX01LS0MsICJKUCIsICJKQVBBTjkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTAsIE1LSzRfTUtLQiwgIkpQIiwgIkpBUEFOMTAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjExLCBNS0s0X01LS0EyLCAiSlAiLCAiSkFQQU4xMSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTIsIE1LSzRfTUtLQywgIkpQIiwgIkpBUEFOMTIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTMsIE1LSzVfTUtLQiwgIkpQIiwgIkpBUEFOMTMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE0LCBNS0s1X01LS0EyLCAiSlAiLCAiSkFQQU4xNCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTUsIE1LSzVfTUtLQywgIkpQIiwgIkpBUEFOMTUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTYsIE1LSzZfTUtLQiwgIkpQIiwgIkpBUEFOMTYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE3LCBNS0s2X01LS0EyLCAiSlAiLCAiSkFQQU4xNyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTgsIE1LSzZfTUtLQywgIkpQIiwgIkpBUEFOMTgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTksIE1LSzdfTUtLQiwgIkpQIiwgIkpBUEFOMTkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIwLCBNS0s3X01LS0EyLCAiSlAiLCAiSkFQQU4yMCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjEsIE1LSzdfTUtLQywgIkpQIiwgIkpBUEFOMjEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMjIsIE1LSzhfTUtLQiwgIkpQIiwgIkpBUEFOMjIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIzLCBNS0s4X01LS0EyLCAiSlAiLCAiSkFQQU4yMyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjQsIE1LSzhfTUtLQywgIkpQIiwgIkpBUEFOMjQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMjUsIE1LSzNfTUtLQSwgIkpQIiwgIkpBUEFOMjUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI2LCBNS0szX01LS0ExLCAiSlAiLCAiSkFQQU4yNiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjcsIE1LSzNfRkNDQSwgIkpQIiwgIkpBUEFOMjciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI4LCBNS0s0X01LS0ExLCAiSlAiLCAiSkFQQU4yOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjksIE1LSzRfRkNDQSwgIkpQIiwgIkpBUEFOMjkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMwLCBNS0s2X01LS0ExLCAiSlAiLCAiSkFQQU4zMCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzEsIE1LSzZfRkNDQSwgIkpQIiwgIkpBUEFOMzEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMyLCBNS0s3X01LS0ExLCAiSlAiLCAiSkFQQU4zMiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzMsIE1LSzdfRkNDQSwgIkpQIiwgIkpBUEFOMzMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM0LCBNS0s5X01LS0EsICJKUCIsICJKQVBBTjM0IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNSwgTUtLMTBfTUtLQSwgIkpQIiwgIkpBUEFOMzUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM2LCBNS0s0X01LS0EsICJKUCIsICJKQVBBTjM2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNywgTUtLOV9GQ0NBLCAiSlAiLCAiSkFQQU4zNyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzgsIE1LSzlfTUtLQTEsICJKUCIsICJKQVBBTjM4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zOSwgTUtLOV9NS0tDLCAiSlAiLCAiSkFQQU4zOSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDAsIE1LSzlfTUtLQTIsICJKUCIsICJKQVBBTjQwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MSwgTUtLMTBfRkNDQSwgIkpQIiwgIkpBUEFONDEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQyLCBNS0sxMF9NS0tBMSwgIkpQIiwgIkpBUEFONDIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQzLCBNS0sxMF9NS0tDLCAiSlAiLCAiSkFQQU40MyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDQsIE1LSzEwX01LS0EyLCAiSlAiLCAiSkFQQU40NCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDUsIE1LSzExX01LS0EsICJKUCIsICJKQVBBTjQ1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40NiwgTUtLMTFfRkNDQSwgIkpQIiwgIkpBUEFONDYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ3LCBNS0sxMV9NS0tBMSwgIkpQIiwgIkpBUEFONDciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ4LCBNS0sxMV9NS0tDLCAiSlAiLCAiSkFQQU40OCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDksIE1LSzExX01LS0EyLCAiSlAiLCAiSkFQQU40OSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTAsIE1LSzEyX01LS0EsICJKUCIsICJKQVBBTjUwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MSwgTUtLMTJfRkNDQSwgIkpQIiwgIkpBUEFONTEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUyLCBNS0sxMl9NS0tBMSwgIkpQIiwgIkpBUEFONTIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUzLCBNS0sxMl9NS0tDLCAiSlAiLCAiSkFQQU41MyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTQsIE1LSzEyX01LS0EyLCAiSlAiLCAiSkFQQU41NCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCi0Je0NUUllfSkFQQU41NywgTUtLMTNfTUtLQiwgIkpQIiwgIkpBUEFONTciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU4LCBNS0sxNF9NS0tBMSwgIkpQIiwgIkpBUEFONTgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU5LCBNS0sxNV9NS0tBMSwgIkpQIiwgIkpBUEFONTkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pPUkRBTiwgRVRTSTJfV09STEQsICJKTyIsICJKT1JEQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LQVpBS0hTVEFOLCBOVUxMMV9XT1JMRCwgIktaIiwgIktBWkFLSFNUQU4iLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAiS1AiLCAiTk9SVEggS09SRUEiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MsIEFQTDlfV09STEQsICJLUiIsICJLT1JFQSBSRVBVQkxJQyIsIFlFUywgTk8sIE5PLAotCSBZRVMsIE5PLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MyLCBBUEwyX1dPUkxELCAiSzIiLCAiS09SRUEgUkVQVUJMSUMyIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0tPUkVBX1JPQzMsIEFQTDlfV09STEQsICJLMyIsICJLT1JFQSBSRVBVQkxJQzMiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS1VXQUlULCBOVUxMMV9XT1JMRCwgIktXIiwgIktVV0FJVCIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfTEFUVklBLCBFVFNJMV9XT1JMRCwgIkxWIiwgIkxBVFZJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MRUJBTk9OLCBOVUxMMV9XT1JMRCwgIkxCIiwgIkxFQkFOT04iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0xJRUNIVEVOU1RFSU4sIEVUU0kxX1dPUkxELCAiTEkiLCAiTElFQ0hURU5TVEVJTiIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MSVRIVUFOSUEsIEVUU0kxX1dPUkxELCAiTFQiLCAiTElUSFVBTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0xVWEVNQk9VUkcsIEVUU0kxX1dPUkxELCAiTFUiLCAiTFVYRU1CT1VSRyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NQUNBVSwgRkNDMl9XT1JMRCwgIk1PIiwgIk1BQ0FVIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NQUNFRE9OSUEsIE5VTEwxX1dPUkxELCAiTUsiLCAiTUFDRURPTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9NQUxBWVNJQSwgQVBMOF9XT1JMRCwgIk1ZIiwgIk1BTEFZU0lBIiwgWUVTLCBOTywgTk8sIFlFUywgTk8sCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX01BTFRBLCBFVFNJMV9XT1JMRCwgIk1UIiwgIk1BTFRBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX01FWElDTywgRkNDMV9GQ0NBLCAiTVgiLCAiTUVYSUNPIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NT05BQ08sIEVUU0k0X1dPUkxELCAiTUMiLCAiTU9OQUNPIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NT1JPQ0NPLCBOVUxMMV9XT1JMRCwgIk1BIiwgIk1PUk9DQ08iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX05FUEFMLCBBUEwxX1dPUkxELCAiTlAiLCAiTkVQQUwiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVUSEVSTEFORFMsIEVUU0kxX1dPUkxELCAiTkwiLCAiTkVUSEVSTEFORFMiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVUSEVSTEFORFNfQU5USUxMRVMsIEVUU0kxX1dPUkxELCAiQU4iLAotCSAiTkVUSEVSTEFORFMtQU5USUxMRVMiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICJOWiIsICJORVcgWkVBTEFORCIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX05PUldBWSwgRVRTSTFfV09STEQsICJOTyIsICJOT1JXQVkiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfT01BTiwgQVBMNl9XT1JMRCwgIk9NIiwgIk9NQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIE5PLCA3MDAwfSwKLQl7Q1RSWV9QQUtJU1RBTiwgTlVMTDFfV09STEQsICJQSyIsICJQQUtJU1RBTiIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUEFOQU1BLCBGQ0MxX0ZDQ0EsICJQQSIsICJQQU5BTUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BBUFVBX05FV19HVUlORUEsIEZDQzFfV09STEQsICJQRyIsICJQQVBVQSBORVcgR1VJTkVBIiwgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QRVJVLCBBUEwxX1dPUkxELCAiUEUiLCAiUEVSVSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIDcwMDB9LAotCXtDVFJZX1BISUxJUFBJTkVTLCBBUEwxX1dPUkxELCAiUEgiLCAiUEhJTElQUElORVMiLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BPTEFORCwgRVRTSTFfV09STEQsICJQTCIsICJQT0xBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUE9SVFVHQUwsIEVUU0kxX1dPUkxELCAiUFQiLCAiUE9SVFVHQUwiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUFVFUlRPX1JJQ08sIEZDQzFfRkNDQSwgIlBSIiwgIlBVRVJUTyBSSUNPIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9RQVRBUiwgTlVMTDFfV09STEQsICJRQSIsICJRQVRBUiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUk9NQU5JQSwgTlVMTDFfV09STEQsICJSTyIsICJST01BTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9SVVNTSUEsIE5VTEwxX1dPUkxELCAiUlUiLCAiUlVTU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9TQVVESV9BUkFCSUEsIE5VTEwxX1dPUkxELCAiU0EiLCAiU0FVREkgQVJBQklBIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9TRVJCSUFfTU9OVEVORUdSTywgRVRTSTFfV09STEQsICJDUyIsICJTRVJCSUEgJiBNT05URU5FR1JPIiwKLQkgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NJTkdBUE9SRSwgQVBMNl9XT1JMRCwgIlNHIiwgIlNJTkdBUE9SRSIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU0xPVkFLSUEsIEVUU0kxX1dPUkxELCAiU0siLCAiU0xPVkFLIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NMT1ZFTklBLCBFVFNJMV9XT1JMRCwgIlNJIiwgIlNMT1ZFTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NPVVRIX0FGUklDQSwgRkNDM19XT1JMRCwgIlpBIiwgIlNPVVRIIEFGUklDQSIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1NQQUlOLCBFVFNJMV9XT1JMRCwgIkVTIiwgIlNQQUlOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NSSV9MQU5LQSwgRkNDM19XT1JMRCwgIkxLIiwgIlNSSSBMQU5LQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1NXRURFTiwgRVRTSTFfV09STEQsICJTRSIsICJTV0VERU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAiQ0giLCAiU1dJVFpFUkxBTkQiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kiLCAiU1lSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1RBSVdBTiwgQVBMM19GQ0NBLCAiVFciLCAiVEFJV0FOIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9USEFJTEFORCwgTlVMTDFfV09STEQsICJUSCIsICJUSEFJTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfVFJJTklEQURfWV9UT0JBR08sIEVUU0k0X1dPUkxELCAiVFQiLCAiVFJJTklEQUQgJiBUT0JBR08iLAotCSBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9UVU5JU0lBLCBFVFNJM19XT1JMRCwgIlROIiwgIlRVTklTSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9UVVJLRVksIEVUU0kzX1dPUkxELCAiVFIiLCAiVFVSS0VZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVUtSQUlORSwgTlVMTDFfV09STEQsICJVQSIsICJVS1JBSU5FIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9VQUUsIE5VTEwxX1dPUkxELCAiQUUiLCAiVU5JVEVEIEFSQUIgRU1JUkFURVMiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1VOSVRFRF9LSU5HRE9NLCBFVFNJMV9XT1JMRCwgIkdCIiwgIlVOSVRFRCBLSU5HRE9NIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgIlVTIiwgIlVOSVRFRCBTVEFURVMiLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDU4MjV9LAotCXtDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDksIEZDQzRfRkNDQSwgIlBTIiwKLQkgIlVOSVRFRCBTVEFURVMgKFBVQkxJQyBTQUZFVFkpIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCA3MDAwfSwKLQl7Q1RSWV9VUlVHVUFZLCBBUEwyX1dPUkxELCAiVVkiLCAiVVJVR1VBWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1VaQkVLSVNUQU4sIEZDQzNfRkNDQSwgIlVaIiwgIlVaQkVLSVNUQU4iLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1ZFTkVaVUVMQSwgQVBMMl9FVFNJQywgIlZFIiwgIlZFTkVaVUVMQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1ZJRVRfTkFNLCBOVUxMMV9XT1JMRCwgIlZOIiwgIlZJRVQgTkFNIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9ZRU1FTiwgTlVMTDFfV09STEQsICJZRSIsICJZRU1FTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfWklNQkFCV0UsIE5VTEwxX1dPUkxELCAiWlciLCAiWklNQkFCV0UiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9CisJe0NUUllfSk9SREFOLCBFVFNJMl9XT1JMRCwgIkpPIn0sCisJe0NUUllfS0FaQUtIU1RBTiwgTlVMTDFfV09STEQsICJLWiJ9LAorCXtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAiS1AifSwKKwl7Q1RSWV9LT1JFQV9ST0MsIEFQTDlfV09STEQsICJLUiJ9LAorCXtDVFJZX0tPUkVBX1JPQzIsIEFQTDJfV09STEQsICJLMiJ9LAorCXtDVFJZX0tPUkVBX1JPQzMsIEFQTDlfV09STEQsICJLMyJ9LAorCXtDVFJZX0tVV0FJVCwgTlVMTDFfV09STEQsICJLVyJ9LAorCXtDVFJZX0xBVFZJQSwgRVRTSTFfV09STEQsICJMViJ9LAorCXtDVFJZX0xFQkFOT04sIE5VTEwxX1dPUkxELCAiTEIifSwKKwl7Q1RSWV9MSUVDSFRFTlNURUlOLCBFVFNJMV9XT1JMRCwgIkxJIn0sCisJe0NUUllfTElUSFVBTklBLCBFVFNJMV9XT1JMRCwgIkxUIn0sCisJe0NUUllfTFVYRU1CT1VSRywgRVRTSTFfV09STEQsICJMVSJ9LAorCXtDVFJZX01BQ0FVLCBGQ0MyX1dPUkxELCAiTU8ifSwKKwl7Q1RSWV9NQUNFRE9OSUEsIE5VTEwxX1dPUkxELCAiTUsifSwKKwl7Q1RSWV9NQUxBWVNJQSwgQVBMOF9XT1JMRCwgIk1ZIn0sCisJe0NUUllfTUFMVEEsIEVUU0kxX1dPUkxELCAiTVQifSwKKwl7Q1RSWV9NRVhJQ08sIEZDQzFfRkNDQSwgIk1YIn0sCisJe0NUUllfTU9OQUNPLCBFVFNJNF9XT1JMRCwgIk1DIn0sCisJe0NUUllfTU9ST0NDTywgTlVMTDFfV09STEQsICJNQSJ9LAorCXtDVFJZX05FUEFMLCBBUEwxX1dPUkxELCAiTlAifSwKKwl7Q1RSWV9ORVRIRVJMQU5EUywgRVRTSTFfV09STEQsICJOTCJ9LAorCXtDVFJZX05FVEhFUkxBTkRTX0FOVElMTEVTLCBFVFNJMV9XT1JMRCwgIkFOIn0sCisJe0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICJOWiJ9LAorCXtDVFJZX05PUldBWSwgRVRTSTFfV09STEQsICJOTyJ9LAorCXtDVFJZX09NQU4sIEFQTDZfV09STEQsICJPTSJ9LAorCXtDVFJZX1BBS0lTVEFOLCBOVUxMMV9XT1JMRCwgIlBLIn0sCisJe0NUUllfUEFOQU1BLCBGQ0MxX0ZDQ0EsICJQQSJ9LAorCXtDVFJZX1BBUFVBX05FV19HVUlORUEsIEZDQzFfV09STEQsICJQRyJ9LAorCXtDVFJZX1BFUlUsIEFQTDFfV09STEQsICJQRSJ9LAorCXtDVFJZX1BISUxJUFBJTkVTLCBBUEwxX1dPUkxELCAiUEgifSwKKwl7Q1RSWV9QT0xBTkQsIEVUU0kxX1dPUkxELCAiUEwifSwKKwl7Q1RSWV9QT1JUVUdBTCwgRVRTSTFfV09STEQsICJQVCJ9LAorCXtDVFJZX1BVRVJUT19SSUNPLCBGQ0MxX0ZDQ0EsICJQUiJ9LAorCXtDVFJZX1FBVEFSLCBOVUxMMV9XT1JMRCwgIlFBIn0sCisJe0NUUllfUk9NQU5JQSwgTlVMTDFfV09STEQsICJSTyJ9LAorCXtDVFJZX1JVU1NJQSwgTlVMTDFfV09STEQsICJSVSJ9LAorCXtDVFJZX1NBVURJX0FSQUJJQSwgTlVMTDFfV09STEQsICJTQSJ9LAorCXtDVFJZX1NFUkJJQV9NT05URU5FR1JPLCBFVFNJMV9XT1JMRCwgIkNTIn0sCisJe0NUUllfU0lOR0FQT1JFLCBBUEw2X1dPUkxELCAiU0cifSwKKwl7Q1RSWV9TTE9WQUtJQSwgRVRTSTFfV09STEQsICJTSyJ9LAorCXtDVFJZX1NMT1ZFTklBLCBFVFNJMV9XT1JMRCwgIlNJIn0sCisJe0NUUllfU09VVEhfQUZSSUNBLCBGQ0MzX1dPUkxELCAiWkEifSwKKwl7Q1RSWV9TUEFJTiwgRVRTSTFfV09STEQsICJFUyJ9LAorCXtDVFJZX1NSSV9MQU5LQSwgRkNDM19XT1JMRCwgIkxLIn0sCisJe0NUUllfU1dFREVOLCBFVFNJMV9XT1JMRCwgIlNFIn0sCisJe0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAiQ0gifSwKKwl7Q1RSWV9TWVJJQSwgTlVMTDFfV09STEQsICJTWSJ9LAorCXtDVFJZX1RBSVdBTiwgQVBMM19GQ0NBLCAiVFcifSwKKwl7Q1RSWV9USEFJTEFORCwgTlVMTDFfV09STEQsICJUSCJ9LAorCXtDVFJZX1RSSU5JREFEX1lfVE9CQUdPLCBFVFNJNF9XT1JMRCwgIlRUIn0sCisJe0NUUllfVFVOSVNJQSwgRVRTSTNfV09STEQsICJUTiJ9LAorCXtDVFJZX1RVUktFWSwgRVRTSTNfV09STEQsICJUUiJ9LAorCXtDVFJZX1VLUkFJTkUsIE5VTEwxX1dPUkxELCAiVUEifSwKKwl7Q1RSWV9VQUUsIE5VTEwxX1dPUkxELCAiQUUifSwKKwl7Q1RSWV9VTklURURfS0lOR0RPTSwgRVRTSTFfV09STEQsICJHQiJ9LAorCXtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgIlVTIn0sCisJLyogVGhpcyAiUFMiIGlzIGZvciBVUyBwdWJsaWMgc2FmZXR5IGFjdHVhbGx5Li4uIHRvIHN1cHBvcnQgdGhpcyB3ZQorCSAqIHdvdWxkIG5lZWQgdG8gYXNzaWduIG5ldyBzcGVjaWFsIGFscGhhMiB0byBDUkRBIGRiIGFzIHdpdGggdGhlIHdvcmxkCisJICogcmVnZG9tYWluIGFuZCB1c2UgYW5vdGhlciBhbHBoYTIgKi8KKwl7Q1RSWV9VTklURURfU1RBVEVTX0ZDQzQ5LCBGQ0M0X0ZDQ0EsICJQUyJ9LAorCXtDVFJZX1VSVUdVQVksIEFQTDJfV09STEQsICJVWSJ9LAorCXtDVFJZX1VaQkVLSVNUQU4sIEZDQzNfRkNDQSwgIlVaIn0sCisJe0NUUllfVkVORVpVRUxBLCBBUEwyX0VUU0lDLCAiVkUifSwKKwl7Q1RSWV9WSUVUX05BTSwgTlVMTDFfV09STEQsICJWTiJ9LAorCXtDVFJZX1lFTUVOLCBOVUxMMV9XT1JMRCwgIllFIn0sCisJe0NUUllfWklNQkFCV0UsIE5VTEwxX1dPUkxELCAiWlcifSwKIH07CiAKLWVudW0gewotCU5PX0RGUyA9IDB4MDAwMDAwMDAwMDAwMDAwMFVMTCwKLQlERlNfRkNDMyA9IDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKLQlERlNfRVRTSSA9IDB4MDAwMDAwMDAwMDAwMDAwMlVMTCwKLQlERlNfTUtLNCA9IDB4MDAwMDAwMDAwMDAwMDAwNFVMTCwKLX07Ci0KLWVudW0gewotCUYxXzQ5MTVfNDkyNSwKLQlGMV80OTM1XzQ5NDUsCi0JRjFfNDkyMF80OTgwLAotCUYxXzQ5NDJfNDk4NywKLQlGMV80OTQ1XzQ5ODUsCi0JRjFfNDk1MF80OTgwLAotCUYxXzUwMzVfNTA0MCwKLQlGMV81MDQwXzUwODAsCi0JRjFfNTA1NV81MDU1LAotCi0JRjFfNTEyMF81MjQwLAotCi0JRjFfNTE3MF81MjMwLAotCUYyXzUxNzBfNTIzMCwKLQotCUYxXzUxODBfNTI0MCwKLQlGMl81MTgwXzUyNDAsCi0JRjNfNTE4MF81MjQwLAotCUY0XzUxODBfNTI0MCwKLQlGNV81MTgwXzUyNDAsCi0JRjZfNTE4MF81MjQwLAotCUY3XzUxODBfNTI0MCwKLQlGOF81MTgwXzUyNDAsCi0KLQlGMV81MTgwXzUzMjAsCi0KLQlGMV81MjQwXzUyODAsCi0KLQlGMV81MjYwXzUyODAsCi0KLQlGMV81MjYwXzUzMjAsCi0JRjJfNTI2MF81MzIwLAotCUYzXzUyNjBfNTMyMCwKLQlGNF81MjYwXzUzMjAsCi0JRjVfNTI2MF81MzIwLAotCUY2XzUyNjBfNTMyMCwKLQotCUYxXzUyNjBfNTcwMCwKLQotCUYxXzUyODBfNTMyMCwKLQotCUYxXzU1MDBfNTU4MCwKLQotCUYxXzU1MDBfNTYyMCwKLQotCUYxXzU1MDBfNTcwMCwKLQlGMl81NTAwXzU3MDAsCi0JRjNfNTUwMF81NzAwLAotCUY0XzU1MDBfNTcwMCwKLQlGNV81NTAwXzU3MDAsCi0KLQlGMV81NjYwXzU3MDAsCi0KLQlGMV81NzQ1XzU4MDUsCi0JRjJfNTc0NV81ODA1LAotCUYzXzU3NDVfNTgwNSwKLQotCUYxXzU3NDVfNTgyNSwKLQlGMl81NzQ1XzU4MjUsCi0JRjNfNTc0NV81ODI1LAotCUY0XzU3NDVfNTgyNSwKLQlGNV81NzQ1XzU4MjUsCi0JRjZfNTc0NV81ODI1LAotCi0JVzFfNDkyMF80OTgwLAotCVcxXzUwNDBfNTA4MCwKLQlXMV81MTcwXzUyMzAsCi0JVzFfNTE4MF81MjQwLAotCVcxXzUyNjBfNTMyMCwKLQlXMV81NzQ1XzU4MjUsCi0JVzFfNTUwMF81NzAwLAotCUFfREVNT19BTExfQ0hBTk5FTFMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgcmVnRG1uNUdoekZyZXFbXSA9IHsKLQl7NDkxNSwgNDkyNSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2fSwKLQl7NDkzNSwgNDk0NSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2fSwKLQl7NDkyMCwgNDk4MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0syLCA3fSwKLQl7NDk0MiwgNDk4NywgMjcsIDYsIDUsIDUsIE5PX0RGUywgUFNDQU5fRkNDLCAwfSwKLQl7NDk0NSwgNDk4NSwgMzAsIDYsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezQ5NTAsIDQ5ODAsIDMzLCA2LCAyMCwgNSwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs1MDM1LCA1MDQwLCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTJ9LAotCXs1MDQwLCA1MDgwLCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzIsIDJ9LAotCXs1MDU1LCA1MDU1LCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTJ9LAotCi0JezUxMjAsIDUyNDAsIDUsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTE3MCwgNTIzMCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMiwgMX0sCi0JezUxNzAsIDUyMzAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzIsIDF9LAotCi0JezUxODAsIDUyNDAsIDE1LCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezUxODAsIDUyNDAsIDE3LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDF9LAotCXs1MTgwLCA1MjQwLCAxOCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezUxODAsIDUyNDAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXs1MTgwLCA1MzIwLCAyMCwgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0VUU0ksIDB9LAotCi0JezUyNDAsIDUyODAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MjgwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MzIwLCAxOCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MzIwLCAyMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0kgfCBQU0NBTl9NS0szLCAwfSwKLQotCi0JezUyNjAsIDUzMjAsIDIwLCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDJ9LAotCXs1MjYwLCA1MzIwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDJ9LAotCXs1MjYwLCA1MzIwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDB9LAotCXs1MjYwLCA1MzIwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXs1MjYwLCA1NzAwLCA1LCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIE5PX1BTQ0FOLCAwfSwKLQotCXs1MjgwLCA1MzIwLCAxNywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDB9LAotCi0JezU1MDAsIDU1ODAsIDIzLCA2LCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIDB9LAotCi0JezU1MDAsIDU2MjAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1NTAwLCA1NzAwLCAyMCwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDR9LAotCXs1NTAwLCA1NzAwLCAyNywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTUwMCwgNTcwMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezU1MDAsIDU3MDAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0kgfCBERlNfTUtLNCwKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX0ZDQywgMH0sCi0JezU1MDAsIDU3MDAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1NjYwLCA1NzAwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDLCAwfSwKLQotCXs1NzQ1LCA1ODA1LCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgwNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MDUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRVRTSSwgMH0sCi0JezU3NDUsIDU4MjUsIDUsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDE3LCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDN9LAotCXs1NzQ1LCA1ODI1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCi0JezQ5MjAsIDQ5ODAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTA0MCwgNTA4MCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1MTcwLCA1MjMwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUxODAsIDUyNDAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1NTAwLCA1NzAwLCAzMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDB9LAotCXs0OTIwLCA2MTAwLCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLX07Ci0KLWVudW0gewotCVQxXzUxMzBfNTY1MCwKLQlUMV81MTUwXzU2NzAsCi0KLQlUMV81MjAwXzUyMDAsCi0JVDJfNTIwMF81MjAwLAotCVQzXzUyMDBfNTIwMCwKLQlUNF81MjAwXzUyMDAsCi0JVDVfNTIwMF81MjAwLAotCVQ2XzUyMDBfNTIwMCwKLQlUN181MjAwXzUyMDAsCi0JVDhfNTIwMF81MjAwLAotCi0JVDFfNTIwMF81MjgwLAotCVQyXzUyMDBfNTI4MCwKLQlUM181MjAwXzUyODAsCi0JVDRfNTIwMF81MjgwLAotCVQ1XzUyMDBfNTI4MCwKLQlUNl81MjAwXzUyODAsCi0KLQlUMV81MjAwXzUyNDAsCi0JVDFfNTIxMF81MjEwLAotCVQyXzUyMTBfNTIxMCwKLQlUM181MjEwXzUyMTAsCi0JVDRfNTIxMF81MjEwLAotCVQ1XzUyMTBfNTIxMCwKLQlUNl81MjEwXzUyMTAsCi0JVDdfNTIxMF81MjEwLAotCVQ4XzUyMTBfNTIxMCwKLQlUOV81MjEwXzUyMTAsCi0JVDEwXzUyMTBfNTIxMCwKLQlUMV81MjQwXzUyNDAsCi0KLQlUMV81MjEwXzUyNTAsCi0JVDFfNTIxMF81MjkwLAotCVQyXzUyMTBfNTI5MCwKLQlUM181MjEwXzUyOTAsCi0KLQlUMV81MjgwXzUyODAsCi0JVDJfNTI4MF81MjgwLAotCVQxXzUyOTBfNTI5MCwKLQlUMl81MjkwXzUyOTAsCi0JVDNfNTI5MF81MjkwLAotCVQxXzUyNTBfNTI5MCwKLQlUMl81MjUwXzUyOTAsCi0JVDNfNTI1MF81MjkwLAotCVQ0XzUyNTBfNTI5MCwKLQotCVQxXzU1NDBfNTY2MCwKLQlUMl81NTQwXzU2NjAsCi0JVDNfNTU0MF81NjYwLAotCVQxXzU3NjBfNTgwMCwKLQlUMl81NzYwXzU4MDAsCi0JVDNfNTc2MF81ODAwLAotCVQ0XzU3NjBfNTgwMCwKLQlUNV81NzYwXzU4MDAsCi0JVDZfNTc2MF81ODAwLAotCVQ3XzU3NjBfNTgwMCwKLQotCVQxXzU3NjVfNTgwNSwKLQlUMl81NzY1XzU4MDUsCi0JVDNfNTc2NV81ODA1LAotCVQ0XzU3NjVfNTgwNSwKLQlUNV81NzY1XzU4MDUsCi0JVDZfNTc2NV81ODA1LAotCVQ3XzU3NjVfNTgwNSwKLQlUOF81NzY1XzU4MDUsCi0JVDlfNTc2NV81ODA1LAotCi0JV1QxXzUyMTBfNTI1MCwKLQlXVDFfNTI5MF81MjkwLAotCVdUMV81NTQwXzU2NjAsCi0JV1QxXzU3NjBfNTgwMCwKLX07Ci0KLWVudW0gewotCUYxXzIzMTJfMjM3MiwKLQlGMl8yMzEyXzIzNzIsCi0KLQlGMV8yNDEyXzI0NzIsCi0JRjJfMjQxMl8yNDcyLAotCUYzXzI0MTJfMjQ3MiwKLQotCUYxXzI0MTJfMjQ2MiwKLQlGMl8yNDEyXzI0NjIsCi0KLQlGMV8yNDMyXzI0NDIsCi0KLQlGMV8yNDU3XzI0NzIsCi0KLQlGMV8yNDY3XzI0NzIsCi0KLQlGMV8yNDg0XzI0ODQsCi0JRjJfMjQ4NF8yNDg0LAotCi0JRjFfMjUxMl8yNzMyLAotCi0JVzFfMjMxMl8yMzcyLAotCVcxXzI0MTJfMjQxMiwKLQlXMV8yNDE3XzI0MzIsCi0JVzFfMjQzN18yNDQyLAotCVcxXzI0NDdfMjQ1NywKLQlXMV8yNDYyXzI0NjIsCi0JVzFfMjQ2N18yNDY3LAotCVcyXzI0NjdfMjQ2NywKLQlXMV8yNDcyXzI0NzIsCi0JVzJfMjQ3Ml8yNDcyLAotCVcxXzI0ODRfMjQ4NCwKLQlXMl8yNDg0XzI0ODQsCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjJHaHpGcmVxW10gPSB7Ci0JezIzMTIsIDIzNzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBLCAwfSwKLQl7MjQxMiwgMjQ3MiwgMzAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDYyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMH0sCi0KLQl7MjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0NjcsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EsIDB9LAotCi0JezI0ODQsIDI0ODQsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ4NCwgMjQ4NCwgMjAsIDAsIDIwLCA1LCBOT19ERlMsCi0JIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0EyLCAwfSwKLQotCXsyNTEyLCAyNzMyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQxMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxNywgMjQzMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQzNywgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ0NywgMjQ1NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2MiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwfSwKLX07Ci0KLWVudW0gewotCUcxXzIzMTJfMjM3MiwKLQlHMl8yMzEyXzIzNzIsCi0KLQlHMV8yNDEyXzI0NzIsCi0JRzJfMjQxMl8yNDcyLAotCUczXzI0MTJfMjQ3MiwKLQotCUcxXzI0MTJfMjQ2MiwKLQlHMl8yNDEyXzI0NjIsCi0KLQlHMV8yNDMyXzI0NDIsCi0KLQlHMV8yNDU3XzI0NzIsCi0KLQlHMV8yNTEyXzI3MzIsCi0KLQlHMV8yNDY3XzI0NzIsCi0KLQlXRzFfMjMxMl8yMzcyLAotCVdHMV8yNDEyXzI0NjIsCi0JV0cxXzI0NjdfMjQ3MiwKLQlXRzJfMjQ2N18yNDcyLAotCUdfREVNT19BTExfQ0hBTk5FTFMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgcmVnRG1uMkdoejExZ0ZyZXFbXSA9IHsKLQl7MjMxMiwgMjM3MiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0MTIsIDI0NzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMH0sCi0JezI0MTIsIDI0NzIsIDMwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ2MiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMH0sCi0KLQl7MjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI1MTIsIDI3MzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBLCAwfSwKLQotCXsyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi0JezIzMTIsIDI3MzIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlUMV8yMzEyXzIzNzIsCi0JVDFfMjQzN18yNDM3LAotCVQyXzI0MzdfMjQzNywKLQlUM18yNDM3XzI0MzcsCi0JVDFfMjUxMl8yNzMyCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ0RvbWFpbiByZWdEb21haW5zW10gPSB7Ci0KLQl7REVCVUdfUkVHX0RNTiwgRkNDLCBERlNfRkNDMywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oQV9ERU1PX0FMTF9DSEFOTkVMUywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTEzMF81NjUwLCBUMV81MTUwXzU2NzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIwMF81MjQwLCBUMV81MjgwXzUyODAsIFQxXzU1NDBfNTY2MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShGMV8yMzEyXzIzNzIsIEYxXzI0MTJfMjQ3MiwgRjFfMjQ4NF8yNDg0LCBGMV8yNTEyXzI3MzIsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEdfREVNT19BTExfQ0hBTk5FTFMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzIzMTJfMjM3MiwgVDFfMjQzN18yNDM3LCBUMV8yNTEyXzI3MzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtBUEwxLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjRfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMMiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYxXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDMsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMV81MjgwXzUzMjAsIEYyXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjkwXzUyOTAsIFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDQsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGNF81MTgwXzUyNDAsIEYzXzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjEwXzUyMTAsIFQzXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIFQzXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw1LCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjJfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ0XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0ZDQ19UIHwgUFNDQU5fRkNDLCBOT19SRVEsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGM181NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjEwXzUyMTAsIFQxXzUyNTBfNTI5MCwgVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjgwLCBUNV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNywgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksIE5PX1JFUSwKLQkgQk0oRjFfNTI4MF81MzIwLCBGNV81NTAwXzU3MDAsIEYzXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyOTBfNTI5MCwgVDVfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzU1NDBfNTY2MCwgVDZfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDgsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNl81MjYwXzUzMjAsIEY0XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl81MjkwXzUyOTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjgwXzUyODAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw5LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxODBfNTMyMCwgRjFfNTUwMF81NjIwLCBGM181NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjkwXzUyOTAsIFQ1XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NTQwXzU2NjAsIFQ2XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEwxMCwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUzMjAsIEY1XzU1MDBfNTcwMCwgRjNfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTI5MF81MjkwLCBUNV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTU0MF81NjYwLCBUNl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTEsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEYyXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIwMF81MjgwLCBUMl81NTQwXzU2NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTIsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjNfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTMsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0k0LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYzXzUxODBfNTI0MCwgRjFfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQyXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNSwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ0XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNV81MTgwXzUyNDAsIEYxXzUyNjBfNTI4MCwgRjNfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIxMF81MjUwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzEsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEY0XzUyNjBfNTMyMCwgRjVfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIxMF81MjEwLCBUMl81MjUwXzUyOTAsIFQ2XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI0MCwgVDJfNTI4MF81MjgwLCBUN181NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MyLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjZfNTE4MF81MjQwLCBGNV81MjYwXzUzMjAsIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMTBfNTIxMCwgVDNfNTI1MF81MjkwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjAwXzUyMDAsIFQxXzUyNDBfNTI0MCwgVDJfNTI4MF81MjgwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzMsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0ZDQ19ULCBOT19SRVEsCi0JIEJNKEYyXzUxODBfNTI0MCwgRjNfNTI2MF81MzIwLCBGMV81NTAwXzU3MDAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIxMF81MjEwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDRfNTIwMF81MjAwLCBUOF81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDNCwgRkNDLCBERlNfRkNDMywgUFNDQU5fRkNDIHwgUFNDQU5fRkNDX1QsIE5PX1JFUSwKLQkgQk0oRjFfNDk0Ml80OTg3LCBGMV80OTQ1XzQ5ODUsIEYxXzQ5NTBfNDk4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ4XzUyMTBfNTIxMCwgVDRfNTI1MF81MjkwLCBUN181NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyNDAsIFQxXzUyODBfNTI4MCwgVDlfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDNSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYyXzUxODBfNTI0MCwgRjZfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ4XzUyMDBfNTIwMCwgVDdfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzYsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgTk9fUkVRLAotCSBCTShGOF81MTgwXzUyNDAsIEY1XzUyNjBfNTMyMCwgRjFfNTUwMF81NTgwLCBGMV81NjYwXzU3MDAsCi0JICAgIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIFQzXzUyNTBfNTI5MCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIwMF81MjAwLCBUMV81MjQwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtNS0sxLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je01LSzIsIE1LSywgTk9fREZTLCBQU0NBTl9NS0syLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsCi0JICAgIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0szLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDlfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNCwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxMF81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s1LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0szLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjgwLCBUM181NTQwXzU2NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s2LCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYyXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQzXzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzcsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzgsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgVDNfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLOSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUOV81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMCwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLAotCSAgICBGNF81NTAwXzU3MDAsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMiwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwKLQkgICAgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzEzLCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjdfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTQsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNDBfNTA4MCwgRjFfNTA1NV81MDU1LCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxNSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA0MF81MDgwLCBGMV81MDU1XzUwNTUsIEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLAotCSAgICBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtBUExELCBOT19DVEwsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjMxMl8yMzcyLCBGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oRzJfMjMxMl8yMzcyLCBHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPfSwKLQotCXtFVFNJQSwgTk9fQ1RMLCBOT19ERlMsIFBTQ0FOX0VUU0lBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQ1N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDU3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7RVRTSUIsIEVUU0ksIE5PX0RGUywgUFNDQU5fRVRTSUIsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMV8yNDMyXzI0NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcxXzI0MzJfMjQ0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtFVFNJQywgRVRTSSwgTk9fREZTLCBQU0NBTl9FVFNJQywKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYzXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzNfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0ZDQ0EsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtNS0tBLCBNS0ssIE5PX0RGUywKLQkgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRyB8Ci0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYyXzI0MTJfMjQ2MiwgRjFfMjQ2N18yNDcyLCBGMl8yNDg0XzI0ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NjIsIEcxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je01LS0MsIE1LSywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JMRCwgRVRTSSwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjAxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwKLQkgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsCi0JIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0VVMV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcyXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcyXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cyXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIFcxXzI0ODRfMjQ4NCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjNfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cyXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjRfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsCi0JICAgIFcxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjVfRVRTSUMsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SOV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzU3NDVfNTgyNSwgVzFfNTUwMF81NzAwLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsCi0JICAgIFcxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUkFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUkJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7TlVMTDEsIE5PX0NUTCwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbW9kZSBtb2Rlc1tdID0gewotCXtBVEg5S19NT0RFXzExQSwgQ0hBTk5FTF9BfSwKLQl7QVRIOUtfTU9ERV8xMUIsIENIQU5ORUxfQn0sCi0Je0FUSDlLX01PREVfMTFHLCBDSEFOTkVMX0d9LAotCXtBVEg5S19NT0RFXzExTkdfSFQyMCwgQ0hBTk5FTF9HX0hUMjB9LAotCXtBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIENIQU5ORUxfR19IVDQwUExVU30sCi0Je0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIENIQU5ORUxfR19IVDQwTUlOVVN9LAotCXtBVEg5S19NT0RFXzExTkFfSFQyMCwgQ0hBTk5FTF9BX0hUMjB9LAotCXtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMsIENIQU5ORUxfQV9IVDQwUExVU30sCi0Je0FUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMsIENIQU5ORUxfQV9IVDQwTUlOVVN9LAotfTsKLQotc3RhdGljIHN0cnVjdCBqYXBhbl9iYW5kY2hlY2sgal9iYW5kY2hlY2tbXSA9IHsKLQl7RjFfNTE3MF81MjMwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REfSwKLQl7RjRfNTE4MF81MjQwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTn0sCi0Je0YyXzUyNjBfNTMyMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyfSwKLQl7RjRfNTUwMF81NzAwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORH0KLX07Ci0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNDI5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3ZpcnR1YWwuYwpAQCAtMCwwICsxLDY2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7CisJaW50IGNvdW50OworCXU4ICphZGRyOworfTsKKworc3RhdGljIHZvaWQgYXRoOWtfdmlmX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSAqaXRlcl9kYXRhID0gZGF0YTsKKwl1OCAqbmJ1ZjsKKworCW5idWYgPSBrcmVhbGxvYyhpdGVyX2RhdGEtPmFkZHIsIChpdGVyX2RhdGEtPmNvdW50ICsgMSkgKiBFVEhfQUxFTiwKKwkJCUdGUF9BVE9NSUMpOworCWlmIChuYnVmID09IE5VTEwpCisJCXJldHVybjsKKworCW1lbWNweShuYnVmICsgaXRlcl9kYXRhLT5jb3VudCAqIEVUSF9BTEVOLCBtYWMsIEVUSF9BTEVOKTsKKwlpdGVyX2RhdGEtPmFkZHIgPSBuYnVmOworCWl0ZXJfZGF0YS0+Y291bnQrKzsKK30KKwordm9pZCBhdGg5a19zZXRfYnNzaWRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSBpdGVyX2RhdGE7CisJaW50IGksIGo7CisJdTggbWFza1tFVEhfQUxFTl07CisKKwkvKgorCSAqIEFkZCBwcmltYXJ5IE1BQyBhZGRyZXNzIGV2ZW4gaWYgaXQgaXMgbm90IGluIGFjdGl2ZSB1c2Ugc2luY2UgaXQKKwkgKiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gdGhlIGhhcmR3YXJlIGFzIHRoZSBzdGFydGluZyBwb2ludCBhbmQgdGhlCisJICogQlNTSUQgbWFzayB3aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCBpZiBhbm90aGVyIGFkZHJlc3MgaXMgYWN0aXZlLgorCSAqLworCWl0ZXJfZGF0YS5hZGRyID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0FUT01JQyk7CisJaWYgKGl0ZXJfZGF0YS5hZGRyKSB7CisJCW1lbWNweShpdGVyX2RhdGEuYWRkciwgc2MtPnNjX2FoLT5tYWNhZGRyLCBFVEhfQUxFTik7CisJCWl0ZXJfZGF0YS5jb3VudCA9IDE7CisJfSBlbHNlCisJCWl0ZXJfZGF0YS5jb3VudCA9IDA7CisKKwkvKiBHZXQgbGlzdCBvZiBhbGwgYWN0aXZlIE1BQyBhZGRyZXNzZXMgKi8KKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoc2MtPmh3LCBhdGg5a192aWZfaXRlciwKKwkJCQkJCSAgICZpdGVyX2RhdGEpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJc2MtPnNlY193aXBoeVtpXS0+aHcsIGF0aDlrX3ZpZl9pdGVyLCAmaXRlcl9kYXRhKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCS8qIEdlbmVyYXRlIGFuIGFkZHJlc3MgbWFzayB0byBjb3ZlciBhbGwgYWN0aXZlIGFkZHJlc3NlcyAqLworCW1lbXNldChtYXNrLCAwLCBFVEhfQUxFTik7CisJZm9yIChpID0gMDsgaSA8IGl0ZXJfZGF0YS5jb3VudDsgaSsrKSB7CisJCXU4ICphMSA9IGl0ZXJfZGF0YS5hZGRyICsgaSAqIEVUSF9BTEVOOworCQlmb3IgKGogPSBpICsgMTsgaiA8IGl0ZXJfZGF0YS5jb3VudDsgaisrKSB7CisJCQl1OCAqYTIgPSBpdGVyX2RhdGEuYWRkciArIGogKiBFVEhfQUxFTjsKKwkJCW1hc2tbMF0gfD0gYTFbMF0gXiBhMlswXTsKKwkJCW1hc2tbMV0gfD0gYTFbMV0gXiBhMlsxXTsKKwkJCW1hc2tbMl0gfD0gYTFbMl0gXiBhMlsyXTsKKwkJCW1hc2tbM10gfD0gYTFbM10gXiBhMlszXTsKKwkJCW1hc2tbNF0gfD0gYTFbNF0gXiBhMls0XTsKKwkJCW1hc2tbNV0gfD0gYTFbNV0gXiBhMls1XTsKKwkJfQorCX0KKworCWtmcmVlKGl0ZXJfZGF0YS5hZGRyKTsKKworCS8qIEludmVydCB0aGUgbWFzayBhbmQgY29uZmlndXJlIGhhcmR3YXJlICovCisJc2MtPmJzc2lkbWFza1swXSA9IH5tYXNrWzBdOworCXNjLT5ic3NpZG1hc2tbMV0gPSB+bWFza1sxXTsKKwlzYy0+YnNzaWRtYXNrWzJdID0gfm1hc2tbMl07CisJc2MtPmJzc2lkbWFza1szXSA9IH5tYXNrWzNdOworCXNjLT5ic3NpZG1hc2tbNF0gPSB+bWFza1s0XTsKKwlzYy0+YnNzaWRtYXNrWzVdID0gfm1hc2tbNV07CisKKwlhdGg5a19od19zZXRic3NpZG1hc2soc2MpOworfQorCitpbnQgYXRoOWtfd2lwaHlfYWRkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpLCBlcnJvcjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpLCAmYXRoOWtfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gc2MtPm51bV9zZWNfd2lwaHkpIHsKKwkJLyogTm8gZW1wdHkgc2xvdCBhdmFpbGFibGU7IGluY3JlYXNlIGFycmF5IGxlbmd0aCAqLworCQlzdHJ1Y3QgYXRoX3dpcGh5ICoqbjsKKwkJbiA9IGtyZWFsbG9jKHNjLT5zZWNfd2lwaHksCisJCQkgICAgIChzYy0+bnVtX3NlY193aXBoeSArIDEpICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkgKiksCisJCQkgICAgIEdGUF9BVE9NSUMpOworCQlpZiAobiA9PSBOVUxMKSB7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbltpXSA9IE5VTEw7CisJCXNjLT5zZWNfd2lwaHkgPSBuOworCQlzYy0+bnVtX3NlY193aXBoeSsrOworCX0KKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCBzYy0+ZGV2KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnNlY193aXBoeVtpXSA9IGFwaHk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCW1lbWNweShhZGRyLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwlhZGRyWzBdIHw9IDB4MDI7IC8qIExvY2FsbHkgbWFuYWdlZCBhZGRyZXNzICovCisJLyoKKwkgKiBYT1IgdmlydHVhbCB3aXBoeSBpbmRleCBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIHRvIGdlbmVyYXRlCisJICogYSBkaWZmZXJlbnQgTUFDIGFkZHJlc3MgZm9yIGVhY2ggdmlydHVhbCB3aXBoeS4KKwkgKi8KKwlhZGRyWzVdIF49IGkgJiAweGZmOworCWFkZHJbNF0gXj0gKGkgJiAweGZmMDApID4+IDg7CisJYWRkclszXSBePSAoaSAmIDB4ZmYwMDAwKSA+PiAxNjsKKworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBhZGRyKTsKKworCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKKworCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCS8qIE1ha2Ugc3VyZSB3aXBoeSBzY2hlZHVsZXIgaXMgc3RhcnRlZCAoaWYgZW5hYmxlZCkgKi8KKwkJYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzYywgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworaW50IGF0aDlrX3dpcGh5X2RlbChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoYXBoeSA9PSBzYy0+c2VjX3dpcGh5W2ldKSB7CisJCQlzYy0+c2VjX3dpcGh5W2ldID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCQlpZWVlODAyMTFfZnJlZV9odyhhcGh5LT5odyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGF0aDlrX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGF0aF93aXBoeSAqYXBoeSwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgICAgaW50IHBzKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlfX2xlMTYgZmM7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCisJc2tiID0gZGV2X2FsbG9jX3NrYigyNCk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQoaGRyLCAwLCAyNCk7CisJZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisJaWYgKHBzKQorCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CisJaGRyLT5mcmFtZV9jb250cm9sID0gZmM7CisJbWVtY3B5KGhkci0+YWRkcjEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjIsIGFwaHktPmh3LT53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjMsIGJzc2lkLCBFVEhfQUxFTik7CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5mbGFncyA9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKKwlpbmZvLT5jb250cm9sLnZpZiA9IHZpZjsKKwlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IDA7CisJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCA9IDQ7CisJaW5mby0+Y29udHJvbC5yYXRlc1sxXS5pZHggPSAtMTsKKworCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wpKTsKKwl0eGN0bC50eHEgPSAmc2MtPnR4LnR4cVtzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dXTsKKwl0eGN0bC5mcmFtZV90eXBlID0gcHMgPyBBVEg5S19JTlRfUEFVU0UgOiBBVEg5S19JTlRfVU5QQVVTRTsKKworCWlmIChhdGhfdHhfc3RhcnQoYXBoeS0+aHcsIHNrYiwgJnR4Y3RsKSAhPSAwKQorCQlnb3RvIGV4aXQ7CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBib29sIF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpCisJCXJldHVybiB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfUEFVU0lORykKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX3dpcGh5X3BhdXNpbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJYm9vbCByZXQ7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0ID0gX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKQorCQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgPT0gQVRIX1dJUEhZX1NDQU4pCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGF0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWJvb2wgcmV0OworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc2MpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaWYgKGFwaHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChhcGh5LT5jaGFuX2lkeCAhPSBhcGh5LT5zYy0+Y2hhbl9pZHgpCisJCXJldHVybjsgLyogd2lwaHkgbm90IG9uIHRoZSBzZWxlY3RlZCBjaGFubmVsICovCisJX19hdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a193aXBoeV91bnBhdXNlX2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHNjLT5wcmlfd2lwaHkpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKQorCQlfX2F0aDlrX3dpcGh5X3VucGF1c2VfY2goc2MtPnNlY193aXBoeVtpXSk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKK30KKwordm9pZCBhdGg5a193aXBoeV9jaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsIGNoYW5fd29yayk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5uZXh0X3dpcGh5OworCisJaWYgKGFwaHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbGwgcGVuZGluZyBpbnRlcmZhY2VzIHBhdXNlZDsgcmVhZHkgdG8gY2hhbmdlCisJICogY2hhbm5lbHMuCisJICovCisKKwkvKiBDaGFuZ2UgY2hhbm5lbHMgKi8KKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCS8qIFhYWDogcmVtb3ZlIG1lIGV2ZW50dWFsbHkgKi8KKwlhdGg5a191cGRhdGVfaWNoYW5uZWwoc2MsIGFwaHktPmh3LAorCQkJICAgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSk7CisJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIHNjLT5jaGFuX2lzX2h0KTsKKwlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBhcGh5LT5odywKKwkJCSAgICAmc2MtPnNjX2FoLT5jaGFubmVsc1tzYy0+Y2hhbl9pZHhdKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBGYWlsZWQgdG8gc2V0IGNoYW5uZWwgZm9yIG5ldyAiCisJCSAgICAgICAidmlydHVhbCB3aXBoeVxuIik7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKKwlhdGg5a193aXBoeV91bnBhdXNlX2NoYW5uZWwoc2MpOworfQorCisvKgorICogYXRoOWsgdmVyc2lvbiBvZiBpZWVlODAyMTFfdHhfc3RhdHVzKCkgZm9yIFRYIGZyYW1lcyB0aGF0IGFyZSBnZW5lcmF0ZWQKKyAqIGludGVybmFsbHkgaW4gdGhlIGRyaXZlci4KKyAqLwordm9pZCBhdGg5a190eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisKKwlpZiAodHhfaW5mb19wcml2ICYmIHR4X2luZm9fcHJpdi0+ZnJhbWVfdHlwZSA9PSBBVEg5S19JTlRfUEFVU0UgJiYKKwkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpIHsKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6ICVzOiBubyBBQ0sgZm9yIHBhdXNlICIKKwkJCSAgICAgICAiZnJhbWVcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkvKgorCQkJICogVGhlIEFQIGRpZCBub3QgcmVwbHk7IGlnbm9yZSB0aGlzIHRvIGFsbG93IHVzIHRvCisJCQkgKiBjb250aW51ZS4KKwkJCSAqLworCQl9CisJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwkJaWYgKCFhdGg5a193aXBoeV9wYXVzaW5nKGFwaHktPnNjKSkgeworCQkJLyoKKwkJCSAqIERyb3AgZnJvbSB0YXNrbGV0IHRvIHdvcmsgdG8gYWxsb3cgbXV0ZXggZm9yIGNoYW5uZWwKKwkJCSAqIGNoYW5nZS4KKwkJCSAqLworCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJCX0KKwl9CisKKwlrZnJlZSh0eF9pbmZvX3ByaXYpOworCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOworCisJZGV2X2tmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19tYXJrX3BhdXNlZChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCWlmICghX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKSkKKwkJcXVldWVfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT5jaGFuX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19wYXVzZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGRhdGE7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopIHZpZi0+ZHJ2X3ByaXY7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKCF2aWYtPmJzc19jb25mLmFzc29jKSB7CisJCQlhdGg5a19tYXJrX3BhdXNlZChhcGh5KTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFRPRE86IGNvdWxkIGF2b2lkIHRoaXMgaWYgYWxyZWFkeSBpbiBQUyBtb2RlICovCisJCWlmIChhdGg5a19zZW5kX251bGxmdW5jKGFwaHksIHZpZiwgYXZwLT5ic3NpZCwgMSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNlbmQgUFMgbnVsbGZ1bmNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJYXRoOWtfbWFya19wYXVzZWQoYXBoeSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJLyogQmVhY29uIHRyYW5zbWlzc2lvbiBpcyBwYXVzZWQgYnkgYXBoeS0+c3RhdGUgY2hhbmdlICovCisJCWF0aDlrX21hcmtfcGF1c2VkKGFwaHkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGFwaHktPmh3KTsKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTSU5HOworCS8qCisJICogVE9ETzogaGFuZGxlIFBBVVNJTkctPlBBVVNFRCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlCisJICogYWN0aXZlIHZpZnMgKG5vdyB3ZSBkbyBpdCBvbiB0aGUgZmlyc3QgdmlmIGdldHRpbmcgcmVhZHk7IHNob3VsZCBiZQorCSAqIG9uIHRoZSBsYXN0KQorCSAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhcGh5LT5odywgYXRoOWtfcGF1c2VfaXRlciwKKwkJCQkJCSAgIGFwaHkpOworCXJldHVybiAwOworfQorCitpbnQgYXRoOWtfd2lwaHlfcGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlpbnQgcmV0OworCXNwaW5fbG9ja19iaCgmYXBoeS0+c2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfcGF1c2UoYXBoeSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdGg5a191bnBhdXNlX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZGF0YTsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKikgdmlmLT5kcnZfcHJpdjsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoIXZpZi0+YnNzX2NvbmYuYXNzb2MpCisJCQlicmVhazsKKwkJYXRoOWtfc2VuZF9udWxsZnVuYyhhcGh5LCB2aWYsIGF2cC0+YnNzaWQsIDApOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkvKiBCZWFjb24gdHJhbnNtaXNzaW9uIGlzIHJlLWVuYWJsZWQgYnkgYXBoeS0+c3RhdGUgY2hhbmdlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB3aXBoeV9sb2NrICovCitzdGF0aWMgaW50IF9fYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhcGh5LT5odywKKwkJCQkJCSAgIGF0aDlrX3VucGF1c2VfaXRlciwgYXBoeSk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhhcGh5LT5odyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaW50IHJldDsKKwlzcGluX2xvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2F0aDlrX3dpcGh5X21hcmtfYWxsX3BhdXNlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKQorCQlzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJCXNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV9wYXVzZV9hbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCV9fYXRoOWtfd2lwaHlfcGF1c2Uoc2MtPnByaV93aXBoeSk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCQlfX2F0aDlrX3dpcGh5X3BhdXNlKHNjLT5zZWNfd2lwaHlbaV0pOworCX0KK30KKworaW50IGF0aDlrX3dpcGh5X3NlbGVjdChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJYm9vbCBub3c7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoX19hdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJLyoKKwkJICogRm9yIG5vdywgd2UgYXJlIHVzaW5nIG1hYzgwMjExIHN3IHNjYW4gYW5kIGl0IGV4cGVjdHMgdG8KKwkJICogaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciBjaGFubmVsIGNoYW5nZXMsIHNvIGF2b2lkIHdpcGh5CisJCSAqIHNjaGVkdWxpbmcgZHVyaW5nIGEgc2Nhbi4gVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgaWYgdGhlCisJCSAqIHNjYW5uaW5nIGNvbnRyb2wgd2VyZSBtb3ZlZCBpbnRvIHRoZSBkcml2ZXIuCisJCSAqLworCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKSkgeworCQlpZiAoc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcyA9PSAwKQorCQkJc2MtPndpcGh5X3NlbGVjdF9maXJzdF9mYWlsID0gamlmZmllczsKKwkJc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcysrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzYy0+d2lwaHlfc2VsZWN0X2ZpcnN0X2ZhaWwgKyBIWiAvIDIpKQorCQl7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6IFByZXZpb3VzIHdpcGh5IHNlbGVjdCB0aW1lZCAiCisJCQkgICAgICAgIm91dDsgZGlzYWJsZS9lbmFibGUgaHcgdG8gcmVjb3ZlclxuIik7CisJCQlfX2F0aDlrX3dpcGh5X21hcmtfYWxsX3BhdXNlZChzYyk7CisJCQkvKgorCQkJICogVE9ETzogdGhpcyB3b3JrYXJvdW5kIHRvIGZpeCBoYXJkd2FyZSBpcyB1bmxpa2VseSB0bworCQkJICogYmUgc3BlY2lmaWMgdG8gdmlydHVhbCB3aXBoeSBjaGFuZ2VzLiBJdCBjYW4gaGFwcGVuCisJCQkgKiBvbiBub3JtYWwgY2hhbm5lbCBjaGFuZ2UsIHRvbywgYW5kIGFzIHN1Y2gsIHRoaXMKKwkJCSAqIHNob3VsZCByZWFsbHkgYmUgbWFkZSBtb3JlIGdlbmVyaWMuIEZvciBleGFtcGxlLAorCQkJICogdHJpY2tlciByYWRpbyBkaXNhYmxlL2VuYWJsZSBvbiBHVFQgaW50ZXJydXB0IGJ1cnN0CisJCQkgKiAoc2F5LCAxMCBHVFQgaW50ZXJydXB0cyByZWNlaXZlZCB3aXRob3V0IGFueSBUWAorCQkJICogZnJhbWUgYmVpbmcgY29tcGxldGVkKQorCQkJICovCisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJYXRoX3JhZGlvX2Rpc2FibGUoc2MpOworCQkJYXRoX3JhZGlvX2VuYWJsZShzYyk7CisJCQlxdWV1ZV93b3JrKGFwaHktPnNjLT5ody0+d29ya3F1ZXVlLAorCQkJCSAgICZhcGh5LT5zYy0+Y2hhbl93b3JrKTsKKwkJCXJldHVybiAtRUJVU1k7IC8qIHByZXZpb3VzIHNlbGVjdCBzdGlsbCBpbiBwcm9ncmVzcyAqLworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybiAtRUJVU1k7IC8qIHByZXZpb3VzIHNlbGVjdCBzdGlsbCBpbiBwcm9ncmVzcyAqLworCX0KKwlzYy0+d2lwaHlfc2VsZWN0X2ZhaWx1cmVzID0gMDsKKworCS8qIFN0b3JlIHRoZSBuZXcgY2hhbm5lbCAqLworCXNjLT5jaGFuX2lkeCA9IGFwaHktPmNoYW5faWR4OworCXNjLT5jaGFuX2lzX2h0ID0gYXBoeS0+Y2hhbl9pc19odDsKKwlzYy0+bmV4dF93aXBoeSA9IGFwaHk7CisKKwlfX2F0aDlrX3dpcGh5X3BhdXNlX2FsbChzYyk7CisJbm93ID0gIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhhcGh5LT5zYyk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChub3cpIHsKKwkJLyogUmVhZHkgdG8gcmVxdWVzdCBjaGFubmVsIGNoYW5nZSBpbW1lZGlhdGVseSAqLworCQlxdWV1ZV93b3JrKGFwaHktPnNjLT5ody0+d29ya3F1ZXVlLCAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJfQorCisJLyoKKwkgKiB3aXBoeXMgd2lsbCBiZSB1bnBhdXNlZCBpbiBhdGg5a190eF9zdGF0dXMoKSBvbmNlIGNoYW5uZWwgaGFzIGJlZW4KKwkgKiBjaGFuZ2VkIGlmIGFueSB3aXBoeSBuZWVkcyB0aW1lIHRvIGJlY29tZSBwYXVzZWQuCisJICovCisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBhdGg5a193aXBoeV9zdGFydGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LAorCQkJCSAgIHN0cnVjdCBhdGhfd2lwaHkgKnNlbGVjdGVkKQoreworCWlmIChzZWxlY3RlZC0+c3RhdGUgPT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJaWYgKGFwaHkgPT0gc2VsZWN0ZWQpCisJCQlyZXR1cm47CisJCS8qCisJCSAqIFBhdXNlIGFsbCBvdGhlciB3aXBoeXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NhbiBldmVuIGlmCisJCSAqIHRoZXkgYXJlIG9uIHRoZSBjdXJyZW50IGNoYW5uZWwgbm93LgorCQkgKi8KKwl9IGVsc2UgaWYgKGFwaHktPmNoYW5faWR4ID09IHNlbGVjdGVkLT5jaGFuX2lkeCkKKwkJcmV0dXJuOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoYXBoeS0+aHcpOworfQorCit2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCkKK3sKKwlpbnQgaTsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzYy0+cHJpX3dpcGh5LCBzZWxlY3RlZCk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCQlhdGg5a193aXBoeV9wYXVzZV9jaGFuKHNjLT5zZWNfd2lwaHlbaV0sIHNlbGVjdGVkKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKK30KKwordm9pZCBhdGg5a193aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgd2lwaHlfd29yay53b3JrKTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gTlVMTDsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCisJaWYgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID09IDApIHsKKwkJLyogd2lwaHkgc2NoZWR1bGVyIGlzIGRpc2FibGVkICovCisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybjsKKwl9CisKK3RyeV9hZ2FpbjoKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4Kys7CisJd2hpbGUgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggPD0gc2MtPm51bV9zZWNfd2lwaHkpIHsKKwkJYXBoeSA9IHNjLT5zZWNfd2lwaHlbc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCAtIDFdOworCQlpZiAoYXBoeSAmJiBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpCisJCQlicmVhazsKKworCQlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4Kys7CisJCWFwaHkgPSBOVUxMOworCX0KKwlpZiAoYXBoeSA9PSBOVUxMKSB7CisJCXNjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggPSAwOworCQlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCQlpZiAoZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJfQorCQkJLyogTm8gd2lwaHkgaXMgcmVhZHkgdG8gYmUgc2NoZWR1bGVkICovCisJCX0gZWxzZQorCQkJYXBoeSA9IHNjLT5wcmlfd2lwaHk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChhcGh5ICYmCisJICAgIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4gJiYKKwkgICAgYXRoOWtfd2lwaHlfc2VsZWN0KGFwaHkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNjaGVkdWxlIHZpcnR1YWwgd2lwaHkgIgorCQkgICAgICAgImNoYW5nZVxuIik7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPndpcGh5X3dvcmssCisJCQkgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdW5zaWduZWQgaW50IG1zZWNfaW50KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPndpcGh5X3dvcmspOworCXNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID0gbXNlY3NfdG9famlmZmllcyhtc2VjX2ludCk7CisJaWYgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+d2lwaHlfd29yaywKKwkJCQkgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMKaW5kZXggYzkyZjBjNi4uNjg5YmRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3htaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEJJVFNfUEVSX0JZVEUgICAgICAgICAgIDgKICNkZWZpbmUgT0ZETV9QTENQX0JJVFMgICAgICAgICAgMjIKQEAgLTU1LDk0ICs1NSwyMyBAQAogCiAjZGVmaW5lIElTX0hUX1JBVEUoX3JhdGUpICAgICAoKF9yYXRlKSAmIDB4ODApCiAKLS8qCi0gKiBJbnNlcnQgYSBjaGFpbiBvZiBhdGhfYnVmIChkZXNjcmlwdG9ycykgb24gYSB0eHEgYW5kCi0gKiBhc3N1bWUgdGhlIGRlc2NyaXB0b3JzIGFyZSBhbHJlYWR5IGNoYWluZWQgdG9nZXRoZXIgYnkgY2FsbGVyLgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpOwogc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmOworCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZik7CitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spOworc3RhdGljIHZvaWQgYXRoX3R4X3JjX3N0YXR1cyhzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgICAgIGludCBuYmFkLCBpbnQgdHhvaywgYm9vbCB1cGRhdGVfcmMpOwogCi0JLyoKLQkgKiBJbnNlcnQgdGhlIGZyYW1lIG9uIHRoZSBvdXRib3VuZCBsaXN0IGFuZAotCSAqIHBhc3MgaXQgb24gdG8gdGhlIGhhcmR3YXJlLgotCSAqLwotCi0JaWYgKGxpc3RfZW1wdHkoaGVhZCkpCi0JCXJldHVybjsKLQotCWJmID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0KLQlsaXN0X3NwbGljZV90YWlsX2luaXQoaGVhZCwgJnR4cS0+YXhxX3EpOwotCXR4cS0+YXhxX2RlcHRoKys7Ci0JdHhxLT5heHFfdG90YWxxdWV1ZWQrKzsKLQl0eHEtPmF4cV9saW5rYnVmID0gbGlzdF9lbnRyeSh0eHEtPmF4cV9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsCi0JCSJxbnVtOiAlZCwgdHhxIGRlcHRoOiAlZFxuIiwgdHhxLT5heHFfcW51bSwgdHhxLT5heHFfZGVwdGgpOwotCi0JaWYgKHR4cS0+YXhxX2xpbmsgPT0gTlVMTCkgewotCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSwgYmYtPmJmX2RhZGRyKTsKLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULAotCQkJIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAotCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOwotCX0gZWxzZSB7Ci0JCSp0eHEtPmF4cV9saW5rID0gYmYtPmJmX2RhZGRyOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJsaW5rWyV1XSAoJXApPSVsbHggKCVwKVxuIiwKLQkJCXR4cS0+YXhxX3FudW0sIHR4cS0+YXhxX2xpbmssCi0JCQlpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7Ci0JfQotCXR4cS0+YXhxX2xpbmsgPSAmKGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MtPmRzX2xpbmspOwotCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHR4cS0+YXhxX3FudW0pOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGF0aF94bWl0X3N0YXR1cyAqdHhfc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKLQlpbnQgaGRybGVuLCBwYWRzaXplOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7Ci0KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAotCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSB7Ci0JCWtmcmVlKHR4X2luZm9fcHJpdik7Ci0JCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOwotCX0KLQotCWlmICh0eF9zdGF0dXMtPmZsYWdzICYgQVRIX1RYX0JBUikgewotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOwotCQl0eF9zdGF0dXMtPmZsYWdzICY9IH5BVEhfVFhfQkFSOwotCX0KLQotCWlmICghKHR4X3N0YXR1cy0+ZmxhZ3MgJiAoQVRIX1RYX0VSUk9SIHwgQVRIX1RYX1hSRVRSWSkpKSB7Ci0JCS8qIEZyYW1lIHdhcyBBQ0tlZCAqLwotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JfQotCi0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdHhfc3RhdHVzLT5yZXRyaWVzICsgMTsKLQotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JcGFkc2l6ZSA9IGhkcmxlbiAmIDM7Ci0JaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bwotCQkgKiBtYWM4MDIxMS4KLQkJICovCi0JCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOwotCQlza2JfcHVsbChza2IsIHBhZHNpemUpOwotCX0KLQotCWllZWU4MDIxMV90eF9zdGF0dXMoaHcsIHNrYik7Ci19Ci0KLS8qIENoZWNrIGlmIGl0J3Mgb2theSB0byBzZW5kIG91dCBhZ2dyZWdhdGVzICovCisvKioqKioqKioqKioqKioqKioqKioqLworLyogQWdncmVnYXRpb24gbG9naWMgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgYXRoX2FnZ3JfcXVlcnkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKQogewpAQCAtMTU2LDIzMiArODUsMTkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9nZXRfYmVhY29uY29uZmlnKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQsCi0JCQkJIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQotCS8qIGZpbGwgaW4gYmVhY29uIGNvbmZpZyBkYXRhICovCi0KLQljb25mLT5iZWFjb25faW50ZXJ2YWwgPSBody0+Y29uZi5iZWFjb25faW50OwotCWNvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDEwMDsKLQljb25mLT5kdGltX2NvdW50ID0gMTsKLQljb25mLT5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLT5saXN0ZW5faW50ZXJ2YWw7Ci19Ci0KLS8qIENhbGN1bGF0ZSBBdGhlcm9zIHBhY2tldCB0eXBlIGZyb20gSUVFRTgwMjExIHBhY2tldCBoZWFkZXIgKi8KLQotc3RhdGljIGVudW0gYXRoOWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQllbnVtIGF0aDlrX3BrdF90eXBlIGh0eXBlOwotCV9fbGUxNiBmYzsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9CRUFDT047Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1A7Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0FUSU07Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFNQT0xMOwotCWVsc2UKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9OT1JNQUw7Ci0KLQlyZXR1cm4gaHR5cGU7Ci19Ci0KLXN0YXRpYyBib29sIGlzX3BhZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JX19sZTE2IGZjOwotCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgewotCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSB8fAotCQkgICAgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KLQkJICAgIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKLQkJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1dFUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9XRVA7Ci0JCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCi0JCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfVEtJUDsKLQkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfQ0NNUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9BRVM7Ci0JfQotCi0JcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0NMRUFSOwotfQotCi0vKiBDYWxsZWQgb25seSB3aGVuIHR4IGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQgYW5kIEhUIGlzIHN1cHBvcnRlZCAqLwotCi1zdGF0aWMgdm9pZCBhc3NpZ25fYWdncl90aWRfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwotCV9fbGUxNiBmYzsKLQl1OCAqcWM7Ci0KLQlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQotCQlyZXR1cm47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JLyogR2V0IHRpZG5vICovCi0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQliZi0+YmZfdGlkbm8gPSBxY1swXSAmIDB4ZjsKLQl9Ci0KLQkvKiBHZXQgc2Vxbm8gKi8KLQkvKiBGb3IgSFQgY2FwYWJsZSBzdGF0aW9ucywgd2Ugc2F2ZSB0aWRubyBmb3IgbGF0ZXIgdXNlLgotCSAqIFdlIGFsc28gb3ZlcnJpZGUgc2Vxbm8gc2V0IGJ5IHVwcGVyIGxheWVyIHdpdGggdGhlIG9uZQotCSAqIGluIHR4IGFnZ3JlZ2F0aW9uIHN0YXRlLgotCSAqCi0JICogSWYgZnJhZ21lbnRhdGlvbiBpcyBvbiwgdGhlIHNlcXVlbmNlIG51bWJlciBpcwotCSAqIG5vdCBvdmVycmlkZGVuLCBzaW5jZSBpdCBoYXMgYmVlbgotCSAqIGluY3JlbWVudGVkIGJ5IHRoZSBmcmFnbWVudGF0aW9uIHJvdXRpbmUuCi0JICoKLQkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGV4Y2VlZHMKLQkgKiBJRUVFODAyMTEgbWF4LgotCSAqLwotCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKLQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYodGlkLT5zZXFfbmV4dCA8PAotCQkJSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOwotCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7Ci0JSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWludCBmbGFncyA9IDA7Ci0KLQlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLwotCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7Ci0KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX05PQUNLOwotCWlmICh0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQotCQlmbGFncyB8PSBBVEg5S19UWERFU0NfUlRTRU5BOwotCi0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF90eF9nZXRfYnVmZmVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfYnVmICpiZiA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHgudHhidWYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQlsaXN0X2RlbCgmYmYtPmxpc3QpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JcmV0dXJuIGJmOwotfQotCi0vKiBUbyBjb21wbGV0ZSBhIGNoYWluIG9mIGJ1ZmZlcnMgYXNzb2NpYXRlZCBhIGZyYW1lICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCi0JCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKLQlzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzIHR4X3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBTZXQgcmV0cnkgaW5mb3JtYXRpb24uCi0JICogTkI6IERvbid0IHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRlc2NyaXB0b3IsIGJlY2F1c2UgdGhlIGZyYW1lCi0JICogY291bGQgYmUgc29mdHdhcmUgcmV0cmllZC4KLQkgKi8KLQl0eF9zdGF0dXMucmV0cmllcyA9IGJmLT5iZl9yZXRyaWVzOwotCXR4X3N0YXR1cy5mbGFncyA9IDA7Ci0KLQlpZiAoc2VuZGJhcikKLQkJdHhfc3RhdHVzLmZsYWdzID0gQVRIX1RYX0JBUjsKLQotCWlmICghdHhvaykgewotCQl0eF9zdGF0dXMuZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOwotCi0JCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKLQkJCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfWFJFVFJZOwotCX0KLQotCS8qIFVubWFwIHRoaXMgZnJhbWUgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LAotCQkJIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJIHNrYi0+bGVuLAotCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCS8qIGNvbXBsZXRlIHRoaXMgZnJhbWUgKi8KLQlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgJnR4X3N0YXR1cyk7Ci0KLQkvKgotCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKLQlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogcXVldWUgdXAgYSBkZXN0L2FjIHBhaXIgZm9yIHR4IHNjaGVkdWxpbmcKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfcXVldWVfdGlkKHN0cnVjdCBhdGhfdHhxICp0eHEsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfYXR4X2FjICphYyA9IHRpZC0+YWM7CiAKLQkvKgotCSAqIGlmIHRpZCBpcyBwYXVzZWQsIGhvbGQgb2ZmCi0JICovCiAJaWYgKHRpZC0+cGF1c2VkKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIGFkZCB0aWQgdG8gYWMgYXRtb3N0IG9uY2UKLQkgKi8KIAlpZiAodGlkLT5zY2hlZCkKIAkJcmV0dXJuOwogCiAJdGlkLT5zY2hlZCA9IHRydWU7CiAJbGlzdF9hZGRfdGFpbCgmdGlkLT5saXN0LCAmYWMtPnRpZF9xKTsKIAotCS8qCi0JICogYWRkIG5vZGUgYWMgdG8gdHhxIGF0bW9zdCBvbmNlCi0JICovCiAJaWYgKGFjLT5zY2hlZCkKIAkJcmV0dXJuOwogCkBAIC0zODksMjIgKzEwNSwxNiBAQAogCWxpc3RfYWRkX3RhaWwoJmFjLT5saXN0LCAmdHhxLT5heHFfYWNxKTsKIH0KIAotLyogcGF1c2UgYSB0aWQgKi8KLQogc3RhdGljIHZvaWQgYXRoX3R4X3BhdXNlX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3RpZC0+YWMtPnFudW1dOwogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQogCXRpZC0+cGF1c2VkKys7Ci0KIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKLS8qIHJlc3VtZSBhIHRpZCBhbmQgc2NoZWR1bGUgYWdncmVnYXRlICovCi0KLXZvaWQgYXRoX3R4X3Jlc3VtZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIHZvaWQgYXRoX3R4X3Jlc3VtZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0aWQtPmFjLT5xbnVtXTsKIApAQCAtNDE5LDI4MCArMTI5LDEyIEBACiAJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQlnb3RvIHVubG9jazsKIAotCS8qCi0JICogQWRkIHRoaXMgVElEIHRvIHNjaGVkdWxlciBhbmQgdHJ5IHRvIHNlbmQgb3V0IGFnZ3JlZ2F0ZXMKLQkgKi8KIAlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKIAlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJhZCBmcmFtZXMgKi8KLQotc3RhdGljIGludCBhdGhfdHhfbnVtX2JhZGZybXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgIGludCB0eG9rKQotewotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKLQl1MTYgc2VxX3N0ID0gMDsKLQl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOwotCWludCBiYV9pbmRleDsKLQlpbnQgbmJhZCA9IDA7Ci0JaW50IGlzYWdnciA9IDA7Ci0KLQlpZiAoZHMtPmRzX3R4c3RhdC50c19mbGFncyA9PSBBVEg5S19UWF9TV19BQk9SVEVEKQotCQlyZXR1cm4gMDsKLQotCWlzYWdnciA9IGJmX2lzYWdncihiZik7Ci0JaWYgKGlzYWdncikgewotCQlzZXFfc3QgPSBBVEhfRFNfQkFfU0VRKGRzKTsKLQkJbWVtY3B5KGJhLCBBVEhfRFNfQkFfQklUTUFQKGRzKSwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCX0KLQotCXdoaWxlIChiZikgewotCQliYV9pbmRleCA9IEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubyk7Ci0JCWlmICghdHhvayB8fCAoaXNhZ2dyICYmICFBVEhfQkFfSVNTRVQoYmEsIGJhX2luZGV4KSkpCi0JCQluYmFkKys7Ci0KLQkJYmYgPSBiZi0+YmZfbmV4dDsKLQl9Ci0KLQlyZXR1cm4gbmJhZDsKLX0KLQotc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQotCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKLQliZi0+YmZfcmV0cmllcysrOwotCi0Jc2tiID0gYmYtPmJmX21wZHU7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7Ci19Ci0KLS8qIFVwZGF0ZSBibG9jayBhY2sgd2luZG93ICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF91cGRhdGVfYmF3KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCSAgICAgIGludCBzZXFubykKLXsKLQlpbnQgaW5kZXgsIGNpbmRleDsKLQotCWluZGV4ICA9IEFUSF9CQV9JTkRFWCh0aWQtPnNlcV9zdGFydCwgc2Vxbm8pOwotCWNpbmRleCA9ICh0aWQtPmJhd19oZWFkICsgaW5kZXgpICYgKEFUSF9USURfTUFYX0JVRlMgLSAxKTsKLQotCXRpZC0+dHhfYnVmW2NpbmRleF0gPSBOVUxMOwotCi0Jd2hpbGUgKHRpZC0+YmF3X2hlYWQgIT0gdGlkLT5iYXdfdGFpbCAmJiAhdGlkLT50eF9idWZbdGlkLT5iYXdfaGVhZF0pIHsKLQkJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOwotCQlJTkNSKHRpZC0+YmF3X2hlYWQsIEFUSF9USURfTUFYX0JVRlMpOwotCX0KLX0KLQotLyoKLSAqIGF0aF9wa3RfZHVyIC0gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKE5COiBub3QgTkFWKQotICoKLSAqIHJpeCAtIHJhdGUgaW5kZXgKLSAqIHBrdGxlbiAtIHRvdGFsIGJ5dGVzIChkZWxpbXMgKyBkYXRhICsgZmNzICsgcGFkcyArIHBhZCBkZWxpbXMpCi0gKiB3aWR0aCAgLSAwIGZvciAyMCBNSHosIDEgZm9yIDQwIE1IegotICogaGFsZl9naSAtIHRvIHVzZSA0dXMgdi9zIDMuNiB1cyBmb3Igc3ltYm9sIHRpbWUKLSAqLwotc3RhdGljIHUzMiBhdGhfcGt0X2R1cmF0aW9uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1OCByaXgsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICBpbnQgd2lkdGgsIGludCBoYWxmX2dpLCBib29sIHNob3J0UHJlYW1ibGUpCi17Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXUzMiBuYml0cywgbnN5bWJpdHMsIGR1cmF0aW9uLCBuc3ltYm9sczsKLQl1OCByYzsKLQlpbnQgc3RyZWFtcywgcGt0bGVuOwotCi0JcGt0bGVuID0gYmZfaXNhZ2dyKGJmKSA/IGJmLT5iZl9hbCA6IGJmLT5iZl9mcm1sZW47Ci0JcmMgPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0ucmF0ZWNvZGU7Ci0KLQkvKiBmb3IgbGVnYWN5IHJhdGVzLCB1c2Ugb2xkIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcGFja2V0IGR1cmF0aW9uICovCi0JaWYgKCFJU19IVF9SQVRFKHJjKSkKLQkJcmV0dXJuIGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLCBwa3RsZW4sCi0JCQkJCSAgICAgIHJpeCwgc2hvcnRQcmVhbWJsZSk7Ci0KLQkvKiBmaW5kIG51bWJlciBvZiBzeW1ib2xzOiBQTENQICsgZGF0YSAqLwotCW5iaXRzID0gKHBrdGxlbiA8PCAzKSArIE9GRE1fUExDUF9CSVRTOwotCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOwotCW5zeW1ib2xzID0gKG5iaXRzICsgbnN5bWJpdHMgLSAxKSAvIG5zeW1iaXRzOwotCi0JaWYgKCFoYWxmX2dpKQotCQlkdXJhdGlvbiA9IFNZTUJPTF9USU1FKG5zeW1ib2xzKTsKLQllbHNlCi0JCWR1cmF0aW9uID0gU1lNQk9MX1RJTUVfSEFMRkdJKG5zeW1ib2xzKTsKLQotCS8qIGFkZHVwIGR1cmF0aW9uIGZvciBsZWdhY3kvaHQgdHJhaW5pbmcgYW5kIHNpZ25hbCBmaWVsZHMgKi8KLQlzdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKLQlkdXJhdGlvbiArPSBMX1NURiArIExfTFRGICsgTF9TSUcgKyBIVF9TSUcgKyBIVF9TVEYgKyBIVF9MVEYoc3RyZWFtcyk7Ci0KLQlyZXR1cm4gZHVyYXRpb247Ci19Ci0KLS8qIFJhdGUgbW9kdWxlIGZ1bmN0aW9uIHRvIHNldCByYXRlIHJlbGF0ZWQgZmllbGRzIGluIHR4IGRlc2NyaXB0b3IgKi8KLQotc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0OwotCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZi0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcyA9IGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2M7Ci0Jc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbNF07Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWludCBpLCBmbGFncywgcnRzY3RzZW5hID0gMDsKLQl1MzIgY3RzZHVyYXRpb24gPSAwOwotCXU4IHJpeCA9IDAsIGNpeCwgY3RzcmF0ZSA9IDA7Ci0JX19sZTE2IGZjOwotCi0JbWVtc2V0KHNlcmllcywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMpICogNCk7Ci0KLQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7Ci0KLQlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpIHx8Ci0JICAgIChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSB7Ci0JCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7Ci0JCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7Ci0JCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOwotCX0KLQotCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLwotCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7Ci0JCQlyaXggPSByYXRlc1tpXS5pZHg7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWZsYWdzID0gKGJmLT5iZl9mbGFncyAmIChBVEg5S19UWERFU0NfUlRTRU5BIHwgQVRIOUtfVFhERVNDX0NUU0VOQSkpOwotCWNpeCA9IHJ0LT5pbmZvW3JpeF0uY3RybF9yYXRlOwotCi0JLyoKLQkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKLQkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KLQkgKi8KLQlpZiAoc2MtPnNjX3Byb3Rtb2RlICE9IFBST1RfTV9OT05FICYmICEoYmYtPmJmX2ZsYWdzICYgQVRIOUtfVFhERVNDX05PQUNLKQotCSAgICAmJiAocnQtPmluZm9bcml4XS5waHkgPT0gV0xBTl9SQ19QSFlfT0ZETSB8fAotCQlXTEFOX1JDX1BIWV9IVChydC0+aW5mb1tyaXhdLnBoeSkpKSB7Ci0JCWlmIChzYy0+c2NfcHJvdG1vZGUgPT0gUFJPVF9NX1JUU0NUUykKLQkJCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQkJZWxzZSBpZiAoc2MtPnNjX3Byb3Rtb2RlID09IFBST1RfTV9DVFNPTkxZKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfQ1RTRU5BOwotCi0JCWNpeCA9IHJ0LT5pbmZvW3NjLT5zY19wcm90cml4XS5jdHJsX3JhdGU7Ci0JCXJ0c2N0c2VuYSA9IDE7Ci0JfQotCi0JLyogRm9yIDExbiwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZW5hYmxlIFJUUyBmb3IgaHcgcmV0cmllZCBmcmFtZXMuCi0JICogV2UgZW5hYmxlIHRoZSBnbG9iYWwgZmxhZyBoZXJlIGFuZCBsZXQgcmF0ZSBzZXJpZXMgZmxhZ3MgZGV0ZXJtaW5lCi0JICogd2hpY2ggcmF0ZXMgd2lsbCBhY3R1YWxseSB1c2UgUlRTLgotCSAqLwotCWlmICgoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgJiYgYmZfaXNkYXRhKGJmKSkgewotCQkvKiA4MDIuMTFnIHByb3RlY3Rpb24gbm90IG5lZWRlZCwgdXNlIG91ciBkZWZhdWx0IGJlaGF2aW9yICovCi0JCWlmICghcnRzY3RzZW5hKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCX0KLQotCS8qIFNldCBwcm90ZWN0aW9uIGlmIGFnZ3JlZ2F0ZSBwcm90ZWN0aW9uIG9uICovCi0JaWYgKHNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCAmJgotCSAgICAoIWJmX2lzYWdncihiZikgfHwgKGJmX2lzYWdncihiZikgJiYgYmYtPmJmX2FsIDwgODE5MikpKSB7Ci0JCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQkJY2l4ID0gcnQtPmluZm9bc2MtPnNjX3Byb3RyaXhdLmN0cmxfcmF0ZTsKLQkJcnRzY3RzZW5hID0gMTsKLQl9Ci0KLQkvKiBGb3IgQVI1NDE2IC0gUlRTIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGZyYW1lIGxhcmdlciB0aGFuIDhLICovCi0JaWYgKGJmX2lzYWdncihiZikgJiYgKGJmLT5iZl9hbCA+IGFoLT5haF9jYXBzLnJ0c19hZ2dyX2xpbWl0KSkKLQkJZmxhZ3MgJj0gfihBVEg5S19UWERFU0NfUlRTRU5BKTsKLQotCS8qCi0JICogQ1RTIHRyYW5zbWl0IHJhdGUgaXMgZGVyaXZlZCBmcm9tIHRoZSB0cmFuc21pdCByYXRlIGJ5IGxvb2tpbmcgaW4gdGhlCi0JICogaC93IHJhdGUgdGFibGUuICBXZSBtdXN0IGFsc28gZmFjdG9yIGluIHdoZXRoZXIgb3Igbm90IGEgc2hvcnQKLQkgKiBwcmVhbWJsZSBpcyB0byBiZSB1c2VkLiBOQjogY2l4IGlzIHNldCBhYm92ZSB3aGVyZSBSVFMvQ1RTIGlzIGVuYWJsZWQKLQkgKi8KLQljdHNyYXRlID0gcnQtPmluZm9bY2l4XS5yYXRlY29kZSB8Ci0JCShiZl9pc3NocHJlYW1ibGUoYmYpID8gcnQtPmluZm9bY2l4XS5zaG9ydF9wcmVhbWJsZSA6IDApOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoIXJhdGVzW2ldLmNvdW50IHx8IChyYXRlc1tpXS5pZHggPCAwKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJpeCA9IHJhdGVzW2ldLmlkeDsKLQotCQlzZXJpZXNbaV0uUmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZWNvZGUgfAotCQkJKGJmX2lzc2hwcmVhbWJsZShiZikgPyBydC0+aW5mb1tyaXhdLnNob3J0X3ByZWFtYmxlIDogMCk7Ci0KLQkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7Ci0KLQkJc2VyaWVzW2ldLlJhdGVGbGFncyA9ICgKLQkJCShyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgPwotCQkJCUFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDApIHwKLQkJCSgocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU18yMDQwIDogMCkgfAotCQkJKChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkgPwotCQkJCUFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJIDogMCk7Ci0KLQkJc2VyaWVzW2ldLlBrdER1cmF0aW9uID0gYXRoX3BrdF9kdXJhdGlvbihzYywgcml4LCBiZiwKLQkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAhPSAwLAotCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSksCi0JCQkgYmZfaXNzaHByZWFtYmxlKGJmKSk7Ci0KLQkJc2VyaWVzW2ldLkNoU2VsID0gc2MtPnNjX3R4X2NoYWlubWFzazsKLQotCQlpZiAocnRzY3RzZW5hKQotCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFM7Ci0JfQotCi0JLyogc2V0IGR1cl91cGRhdGVfZW4gZm9yIGwtc2lnIGNvbXB1dGF0aW9uIGV4Y2VwdCBmb3IgUFMtUG9sbCBmcmFtZXMgKi8KLQlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgbGFzdGRzLCAhYmZfaXNwc3BvbGwoYmYpLAotCQkJCSAgICAgY3RzcmF0ZSwgY3RzZHVyYXRpb24sCi0JCQkJICAgICBzZXJpZXMsIDQsIGZsYWdzKTsKLQotCWlmIChzYy0+c2NfY29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCi0JCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKGFoLCBkcywgODE5Mik7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbiB0byBzZW5kIGEgbm9ybWFsIEhUIChub24tQU1QRFUpIGZyYW1lCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KLXN0YXRpYyBpbnQgYXRoX3R4X3NlbmRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0KLQlCVUdfT04obGlzdF9lbXB0eShiZl9oZWFkKSk7Ci0KLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQU1QRFU7IC8qIHJlZ3VsYXIgSFQgZnJhbWUgKi8KLQotCS8qIHVwZGF0ZSBzdGFydGluZyBzZXF1ZW5jZSBudW1iZXIgZm9yIHN1YnNlcXVlbnQgQUREQkEgcmVxdWVzdCAqLwotCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKLQotCS8qIFF1ZXVlIHRvIGgvdyB3aXRob3V0IGFnZ3JlZ2F0aW9uICovCi0JYmYtPmJmX25mcmFtZXMgPSAxOwotCWJmLT5iZl9sYXN0YmYgPSBiZi0+YmZfbGFzdGZybTsgLyogb25lIHNpbmdsZSBmcmFtZSAqLwotCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsIGJmX2hlYWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZsdXNoIHRpZCdzIHNvZnR3YXJlIHF1ZXVlIGFuZCBzZW5kIGZyYW1lcyBhcyBub24tYW1wZHUncyAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfZmx1c2hfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CkBAIC03MTMsNDY4ICsxNTUsMzAgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKSB7CiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCQlBU1NFUlQoIWJmX2lzcmV0cmllZChiZikpOwotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0JCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCWF0aF90eF9zZW5kX2h0X25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKLS8qIENvbXBsZXRpb24gcm91dGluZSBvZiBhbiBhZ2dyZWdhdGUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3JfcmlmcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJCSAgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAotCQkJCSAgICAgIGludCB0eG9rKQorc3RhdGljIHZvaWQgYXRoX3R4X3VwZGF0ZV9iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJICAgICAgaW50IHNlcW5vKQogewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBOVUxMOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkID0gTlVMTDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdCA9IGJmLT5iZl9sYXN0YmY7Ci0Jc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmX2xhc3QtPmJmX2Rlc2M7Ci0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQsICpiZl9sYXN0cSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkLCBiZl9wZW5kaW5nOwotCXUxNiBzZXFfc3QgPSAwOwotCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07Ci0JaW50IGlzYWdnciwgdHhmYWlsLCB0eHBlbmRpbmcsIHNlbmRiYXIgPSAwLCBuZWVkcmVzZXQgPSAwOworCWludCBpbmRleCwgY2luZGV4OwogCi0Jc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbmRleCAgPSBBVEhfQkFfSU5ERVgodGlkLT5zZXFfc3RhcnQsIHNlcW5vKTsKKwljaW5kZXggPSAodGlkLT5iYXdfaGVhZCArIGluZGV4KSAmIChBVEhfVElEX01BWF9CVUZTIC0gMSk7CiAKLQlpZiAodHhfaW5mby0+Y29udHJvbC5zdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwotCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7Ci0JfQorCXRpZC0+dHhfYnVmW2NpbmRleF0gPSBOVUxMOwogCi0JaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKLQlpZiAoaXNhZ2dyKSB7Ci0JCWlmICh0eG9rKSB7Ci0JCQlpZiAoQVRIX0RTX1RYX0JBKGRzKSkgewotCQkJCS8qCi0JCQkJICogZXh0cmFjdCBzdGFydGluZyBzZXF1ZW5jZSBhbmQKLQkJCQkgKiBibG9jay1hY2sgYml0bWFwCi0JCQkJICovCi0JCQkJc2VxX3N0ID0gQVRIX0RTX0JBX1NFUShkcyk7Ci0JCQkJbWVtY3B5KGJhLAotCQkJCQlBVEhfRFNfQkFfQklUTUFQKGRzKSwKLQkJCQkJV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQotCQkJCS8qCi0JCQkJICogQVI1NDE2IGNhbiBiZWNvbWUgZGVhZi9tdXRlIHdoZW4gQkEKLQkJCQkgKiBpc3N1ZSBoYXBwZW5zLiBDaGlwIG5lZWRzIHRvIGJlIHJlc2V0LgotCQkJCSAqIEJ1dCBBUCBjb2RlIG1heSBoYXZlIHN5Y2hyb25pemF0aW9uIGlzc3VlcwotCQkJCSAqIHdoZW4gcGVyZm9ybSBpbnRlcm5hbCByZXNldCBpbiB0aGlzIHJvdXRpbmUuCi0JCQkJICogT25seSBlbmFibGUgcmVzZXQgaW4gU1RBIG1vZGUgZm9yIG5vdy4KLQkJCQkgKi8KLQkJCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0KLQkJCQkJICAgIE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJCW5lZWRyZXNldCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQkJfQotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZiZl9wZW5kaW5nKTsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQl3aGlsZSAoYmYpIHsKLQkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKLQkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OwotCi0JCWlmIChBVEhfQkFfSVNTRVQoYmEsIEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubykpKSB7Ci0JCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uLCBzdWJmcmFtZSBpcwotCQkJICogYWNrZWQgYnkgYmxvY2sgYWNrICovCi0JCX0gZWxzZSBpZiAoIWlzYWdnciAmJiB0eG9rKSB7Ci0JCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uICovCi0JCX0gZWxzZSB7Ci0KLQkJCWlmICghKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApICYmCi0JCQkgICAgZHMtPmRzX3R4c3RhdC50c19mbGFncyAhPSBBVEg5S19UWF9TV19BQk9SVEVEKSB7Ci0JCQkJaWYgKGJmLT5iZl9yZXRyaWVzIDwgQVRIX01BWF9TV19SRVRSSUVTKSB7Ci0JCQkJCWF0aF90eF9zZXRfcmV0cnkoc2MsIGJmKTsKLQkJCQkJdHhwZW5kaW5nID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwotCQkJCQl0eGZhaWwgPSAxOwotCQkJCQlzZW5kYmFyID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogY2xlYW51cCBpbiBwcm9ncmVzcywganVzdCBmYWlsCi0JCQkJICogdGhlIHVuLWFja2VkIHN1Yi1mcmFtZXMKLQkJCQkgKi8KLQkJCQl0eGZhaWwgPSAxOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIFJlbW92ZSBhdGhfYnVmJ3Mgb2YgdGhpcyBzdWItZnJhbWUgZnJvbSBhZ2dyZWdhdGUgcXVldWUuCi0JCSAqLwotCQlpZiAoYmZfbmV4dCA9PSBOVUxMKSB7ICAvKiBsYXN0IHN1YmZyYW1lIGluIHRoZSBhZ2dyZWdhdGUgKi8KLQkJCUFTU0VSVChiZi0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQotCQkJLyoKLQkJCSAqIFRoZSBsYXN0IGRlc2NyaXB0b3Igb2YgdGhlIGxhc3Qgc3ViIGZyYW1lIGNvdWxkIGJlCi0JCQkgKiBhIGhvbGRpbmcgZGVzY3JpcHRvciBmb3IgaC93LiBJZiB0aGF0J3MgdGhlIGNhc2UsCi0JCQkgKiBiZi0+YmZfbGFzdGZybSB3b24ndCBiZSBpbiB0aGUgYmZfcS4KLQkJCSAqIE1ha2Ugc3VyZSB3ZSBoYW5kbGUgYmZfcSBwcm9wZXJseSBoZXJlLgotCQkJICovCi0KLQkJCWlmICghbGlzdF9lbXB0eShiZl9xKSkgewotCQkJCWJmX2xhc3RxID0gbGlzdF9lbnRyeShiZl9xLT5wcmV2LAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJCWJmX3EsICZiZl9sYXN0cS0+bGlzdCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogWFhYOiBpZiB0aGUgbGFzdCBzdWJmcmFtZSBvbmx5IGhhcyBvbmUKLQkJCQkgKiBkZXNjcmlwdG9yIHdoaWNoIGlzIGFsc28gYmVpbmcgdXNlZCBhcwotCQkJCSAqIGEgaG9sZGluZyBkZXNjcmlwdG9yLiBUaGVuIHRoZSBhdGhfYnVmCi0JCQkJICogaXMgbm90IGluIHRoZSBiZl9xIGF0IGFsbC4KLQkJCQkgKi8KLQkJCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlBU1NFUlQoIWxpc3RfZW1wdHkoYmZfcSkpOwotCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJYmZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKLQkJfQotCi0JCWlmICghdHhwZW5kaW5nKSB7Ci0JCQkvKgotCQkJICogY29tcGxldGUgdGhlIGFja2VkLW9uZXMveHJldHJpZWQgb25lczsgdXBkYXRlCi0JCQkgKiBibG9jay1hY2sgd2luZG93Ci0JCQkgKi8KLQkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JCQkvKiBjb21wbGV0ZSB0aGlzIHN1Yi1mcmFtZSAqLwotCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAhdHhmYWlsLCBzZW5kYmFyKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiByZXRyeSB0aGUgdW4tYWNrZWQgb25lcwotCQkJICovCi0JCQkvKgotCQkJICogWFhYOiBpZiB0aGUgbGFzdCBkZXNjcmlwdG9yIGlzIGhvbGRpbmcgZGVzY3JpcHRvciwKLQkJCSAqIGluIG9yZGVyIHRvIHJlcXVldWUgdGhlIGZyYW1lIHRvIHNvZnR3YXJlIHF1ZXVlLCB3ZQotCQkJICogbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBkZXNjcmlwdG9yIGFuZAotCQkJICogY29weSB0aGUgY29udGVudCBvZiBob2xkaW5nIGRlc2NyaXB0b3IgdG8gaXQuCi0JCQkgKi8KLQkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmCi0JCQkgICAgYmZfbGFzdC0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgewotCQkJCXN0cnVjdCBhdGhfYnVmICp0YmY7Ci0KLQkJCQkvKiBhbGxvY2F0ZSBuZXcgZGVzY3JpcHRvciAqLwotCQkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCQkJQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOwotCQkJCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1ZiwKLQkJCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCQlsaXN0X2RlbCgmdGJmLT5saXN0KTsKLQkJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJCQlBVEhfVFhCVUZfUkVTRVQodGJmKTsKLQotCQkJCS8qIGNvcHkgZGVzY3JpcHRvciBjb250ZW50ICovCi0JCQkJdGJmLT5iZl9tcGR1ID0gYmZfbGFzdC0+YmZfbXBkdTsKLQkJCQl0YmYtPmJmX2J1Zl9hZGRyID0gYmZfbGFzdC0+YmZfYnVmX2FkZHI7Ci0JCQkJKih0YmYtPmJmX2Rlc2MpID0gKihiZl9sYXN0LT5iZl9kZXNjKTsKLQotCQkJCS8qIGxpbmsgaXQgdG8gdGhlIGZyYW1lICovCi0JCQkJaWYgKGJmX2xhc3RxKSB7Ci0JCQkJCWJmX2xhc3RxLT5iZl9kZXNjLT5kc19saW5rID0KLQkJCQkJCXRiZi0+YmZfZGFkZHI7Ci0JCQkJCWJmLT5iZl9sYXN0ZnJtID0gdGJmOwotCQkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsCi0JCQkJCQliZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdGJmLT5iZl9zdGF0ZSA9IGJmX2xhc3QtPmJmX3N0YXRlOwotCQkJCQl0YmYtPmJmX2xhc3Rmcm0gPSB0YmY7Ci0JCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwKLQkJCQkJCXRiZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0KLQkJCQkJLyogY29weSB0aGUgRE1BIGNvbnRleHQgKi8KLQkJCQkJdGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJCQkJCWJmX2xhc3QtPmJmX2RtYWNvbnRleHQ7Ci0JCQkJfQotCQkJCWxpc3RfYWRkX3RhaWwoJnRiZi0+bGlzdCwgJmJmX2hlYWQpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIENsZWFyIGRlc2NyaXB0b3Igc3RhdHVzIHdvcmRzIGZvcgotCQkJCSAqIHNvZnR3YXJlIHJldHJ5Ci0JCQkJICovCi0JCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLAotCQkJCQkJICAgICBiZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBQdXQgdGhpcyBidWZmZXIgdG8gdGhlIHRlbXBvcmFyeSBwZW5kaW5nCi0JCQkgKiBxdWV1ZSB0byByZXRhaW4gb3JkZXJpbmcKLQkJCSAqLwotCQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZl9oZWFkLCAmYmZfcGVuZGluZyk7Ci0JCX0KLQotCQliZiA9IGJmX25leHQ7Ci0JfQotCi0JaWYgKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIHsKLQkJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGRvbmUgd2l0aCBjbGVhbmluZyB0aGUgaC93IHF1ZXVlICovCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJaWYgKHRpZC0+YmF3X2hlYWQgPT0gdGlkLT5iYXdfdGFpbCkgewotCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQotCQkJLyogc2VuZCBidWZmZXJlZCBmcmFtZXMgYXMgc2luZ2xlcyAqLwotCQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdGlkKTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZQotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJLyogTm90ZTogd2UgX3ByZXBlbmRfLCB3ZSBfZG9fbm90XyBhdCB0bwotCQkgKiB0aGUgZW5kIG9mIHRoZSBxdWV1ZSAhICovCi0JCWxpc3Rfc3BsaWNlKCZiZl9wZW5kaW5nLCAmdGlkLT5idWZfcSk7Ci0JCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JfQotCi0JaWYgKG5lZWRyZXNldCkKLQkJYXRoX3Jlc2V0KHNjLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9yY19zdGF0dXMoc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLCBpbnQgbmJhZCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOwotCi0JdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSBmYWxzZTsKLQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKQotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKLQotCWlmICgoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKSA9PSAwICYmCi0JICAgIChiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spID09IDApIHsKLQkJaWYgKGJmX2lzZGF0YShiZikpIHsKLQkJCW1lbWNweSgmdHhfaW5mb19wcml2LT50eCwgJmRzLT5kc190eHN0YXQsCi0JCQkgICAgICAgc2l6ZW9mKHR4X2luZm9fcHJpdi0+dHgpKTsKLQkJCXR4X2luZm9fcHJpdi0+bl9mcmFtZXMgPSBiZi0+YmZfbmZyYW1lczsKLQkJCXR4X2luZm9fcHJpdi0+bl9iYWRfZnJhbWVzID0gbmJhZDsKLQkJCXR4X2luZm9fcHJpdi0+dXBkYXRlX3JjID0gdHJ1ZTsKLQkJfQorCXdoaWxlICh0aWQtPmJhd19oZWFkICE9IHRpZC0+YmF3X3RhaWwgJiYgIXRpZC0+dHhfYnVmW3RpZC0+YmF3X2hlYWRdKSB7CisJCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKKwkJSU5DUih0aWQtPmJhd19oZWFkLCBBVEhfVElEX01BWF9CVUZTKTsKIAl9CiB9CiAKLS8qIFByb2Nlc3MgY29tcGxldGVkIHhtaXQgZGVzY3JpcHRvcnMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXVlICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9wcm9jZXNzcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmLCAqYmZfaGVsZCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCXN0cnVjdCBhdGhfZGVzYyAqZHM7Ci0JaW50IHR4b2ssIG5iYWQgPSAwOwotCWludCBzdGF0dXM7Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1FVRVVFLCAidHggcXVldWUgJWQgKCV4KSwgbGluayAlcFxuIiwKLQkJdHhxLT5heHFfcW51bSwgYXRoOWtfaHdfZ2V0dHhidWYoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKSwKLQkJdHhxLT5heHFfbGluayk7Ci0KLQlmb3IgKDs7KSB7Ci0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZ0eHEtPmF4cV9xKSkgewotCQkJdHhxLT5heHFfbGluayA9IE5VTEw7Ci0JCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdHhxLT5heHFfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCi0JCS8qCi0JCSAqIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBhIEJIIGdldHMgc2NoZWR1bGVkCi0JCSAqIGFmdGVyIHN3IHdyaXRlcyBUeEUgYW5kIGJlZm9yZSBodyByZS1sb2FkIHRoZSBsYXN0Ci0JCSAqIGRlc2NyaXB0b3IgdG8gZ2V0IHRoZSBuZXdseSBjaGFpbmVkIG9uZS4KLQkJICogU29mdHdhcmUgbXVzdCBrZWVwIHRoZSBsYXN0IERPTkUgZGVzY3JpcHRvciBhcyBhCi0JCSAqIGhvbGRpbmcgZGVzY3JpcHRvciAtIHNvZnR3YXJlIGRvZXMgc28gYnkgbWFya2luZwotCQkgKiBpdCB3aXRoIHRoZSBTVEFMRSBmbGFnLgotCQkgKi8KLQkJYmZfaGVsZCA9IE5VTEw7Ci0JCWlmIChiZi0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgewotCQkJYmZfaGVsZCA9IGJmOwotCQkJaWYgKGxpc3RfaXNfbGFzdCgmYmZfaGVsZC0+bGlzdCwgJnR4cS0+YXhxX3EpKSB7Ci0JCQkJLyogRklYTUU6Ci0JCQkJICogVGhlIGhvbGRpbmcgZGVzY3JpcHRvciBpcyB0aGUgbGFzdAotCQkJCSAqIGRlc2NyaXB0b3IgaW4gcXVldWUuIEl0J3Mgc2FmZSB0byByZW1vdmUKLQkJCQkgKiB0aGUgbGFzdCBob2xkaW5nIGRlc2NyaXB0b3IgaW4gQkggY29udGV4dC4KLQkJCQkgKi8KLQkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCS8qIExldHMgd29yayB3aXRoIHRoZSBuZXh0IGJ1ZmZlciBub3cgKi8KLQkJCQliZiA9IGxpc3RfZW50cnkoYmZfaGVsZC0+bGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQl9Ci0JCX0KLQotCQlsYXN0YmYgPSBiZi0+YmZfbGFzdGJmOwotCQlkcyA9IGxhc3RiZi0+YmZfZGVzYzsgICAgLyogTkI6IGxhc3QgZGVjcmlwdG9yICovCi0KLQkJc3RhdHVzID0gYXRoOWtfaHdfdHhwcm9jZGVzYyhhaCwgZHMpOwotCQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGJmLT5iZl9kZXNjID09IHR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMpCi0JCQl0eHEtPmF4cV9sYXN0ZHNXaXRoQ1RTID0gTlVMTDsKLQkJaWYgKGRzID09IHR4cS0+YXhxX2dhdGluZ2RzKQotCQkJdHhxLT5heHFfZ2F0aW5nZHMgPSBOVUxMOwotCi0JCS8qCi0JCSAqIFJlbW92ZSBhdGhfYnVmJ3Mgb2YgdGhlIHNhbWUgdHJhbnNtaXQgdW5pdCBmcm9tIHR4cSwKLQkJICogaG93ZXZlciBsZWF2ZSB0aGUgbGFzdCBkZXNjcmlwdG9yIGJhY2sgYXMgdGhlIGhvbGRpbmcKLQkJICogZGVzY3JpcHRvciBmb3IgaHcuCi0JCSAqLwotCQlsYXN0YmYtPmJmX3N0YXR1cyB8PSBBVEhfQlVGU1RBVFVTX1NUQUxFOwotCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZsYXN0YmYtPmxpc3QpKQotCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJJnR4cS0+YXhxX3EsIGxhc3RiZi0+bGlzdC5wcmV2KTsKLQotCQl0eHEtPmF4cV9kZXB0aC0tOwotCi0JCWlmIChiZl9pc2FnZ3IoYmYpKQotCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOwotCi0JCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JCWlmIChiZl9oZWxkKSB7Ci0JCQlsaXN0X2RlbCgmYmZfaGVsZC0+bGlzdCk7Ci0JCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCX0KLQotCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KLQkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCi0JCQkgKi8KLQkJCWJmLT5iZl9yZXRyaWVzID0gZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnk7Ci0JCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCi0JCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKLQkJCW5iYWQgPSAwOwotCQl9IGVsc2UgewotCQkJbmJhZCA9IGF0aF90eF9udW1fYmFkZnJtcyhzYywgYmYsIHR4b2spOwotCQl9Ci0KLQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgZHMsIG5iYWQpOwotCi0JCS8qCi0JCSAqIENvbXBsZXRlIHRoaXMgdHJhbnNtaXQgdW5pdAotCQkgKi8KLQkJaWYgKGJmX2lzYW1wZHUoYmYpKQotCQkJYXRoX3R4X2NvbXBsZXRlX2FnZ3JfcmlmcyhzYywgdHhxLCBiZiwgJmJmX2hlYWQsIHR4b2spOwotCQllbHNlCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIHR4b2ssIDApOwotCi0JCS8qIFdha2UgdXAgbWFjODAyMTEgcXVldWUgKi8KLQotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAodHhxLT5zdG9wcGVkICYmIGF0aF90eHFfZGVwdGgoc2MsIHR4cS0+YXhxX3FudW0pIDw9Ci0JCQkJKEFUSF9UWEJVRiAtIDIwKSkgewotCQkJaW50IHFudW07Ci0JCQlxbnVtID0gYXRoX2dldF9tYWM4MDIxMV9xbnVtKHR4cS0+YXhxX3FudW0sIHNjKTsKLQkJCWlmIChxbnVtICE9IC0xKSB7Ci0JCQkJaWVlZTgwMjExX3dha2VfcXVldWUoc2MtPmh3LCBxbnVtKTsKLQkJCQl0eHEtPnN0b3BwZWQgPSAwOwotCQkJfQotCi0JCX0KLQotCQkvKgotCQkgKiBzY2hlZHVsZSBhbnkgcGVuZGluZyBwYWNrZXRzIGlmIGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQKLQkJICovCi0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpCi0JCQlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfc3RvcGRtYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0KLQkodm9pZCkgYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCB0eHEtPmF4cV9xbnVtKTsKLQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0eCBxdWV1ZSBbJXVdICV4LCBsaW5rICVwXG4iLAotCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSksCi0JCXR4cS0+YXhxX2xpbmspOwotfQotCi0vKiBEcmFpbiBvbmx5IHRoZSBkYXRhIHF1ZXVlcyAqLwotCi1zdGF0aWMgdm9pZCBhdGhfZHJhaW5fdHhkYXRhcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IGksIHN0YXR1cywgbnBlbmQgPSAwOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgewotCQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKSB7Ci0JCQkJYXRoX3R4X3N0b3BkbWEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQkJCQkvKiBUaGUgVHhETUEgbWF5IG5vdCByZWFsbHkgYmUgc3RvcHBlZC4KLQkJCQkgKiBEb3VibGUgY2hlY2sgdGhlIGhhbCB0eCBwZW5kaW5nIGNvdW50ICovCi0JCQkJbnBlbmQgKz0gYXRoOWtfaHdfbnVtdHhwZW5kaW5nKGFoLAotCQkJCQkJICAgICAgIHNjLT50eC50eHFbaV0uYXhxX3FudW0pOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKG5wZW5kKSB7Ci0JCS8qIFR4RE1BIG5vdCBzdG9wcGVkLCByZXNldCB0aGUgaGFsICovCi0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKLQotCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLAotCQkJCSAgICBzYy0+c2NfYWgtPmFoX2N1cmNoYW4sCi0JCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIHRydWUsICZzdGF0dXMpKSB7Ci0KLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldVxuIiwKLQkJCQlzdGF0dXMpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKLQkJCWF0aF90eF9kcmFpbnR4cShzYywgJnNjLT50eC50eHFbaV0sIHJldHJ5X3R4KTsKLQl9Ci19Ci0KLS8qIEFkZCBhIHN1Yi1mcmFtZSB0byBibG9jayBhY2sgd2luZG93ICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9hZGR0b19iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorc3RhdGljIHZvaWQgYXRoX3R4X2FkZHRvX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKIAlpbnQgaW5kZXgsIGNpbmRleDsKQEAgLTExOTYsNTggKzIwMCwyMzkgQEAKIH0KIAogLyoKLSAqIEZ1bmN0aW9uIHRvIHNlbmQgYW4gQS1NUERVCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCisgKiBUT0RPOiBGb3IgZnJhbWUocykgdGhhdCBhcmUgaW4gdGhlIHJldHJ5IHN0YXRlLCB3ZSB3aWxsIHJldXNlIHRoZQorICogc2VxdWVuY2UgbnVtYmVyKHMpIHdpdGhvdXQgc2V0dGluZyB0aGUgcmV0cnkgYml0LiBUaGUKKyAqIGFsdGVybmF0aXZlIGlzIHRvIGdpdmUgdXAgb24gdGhlc2UgYW5kIEJBUiB0aGUgcmVjZWl2ZXIncyB3aW5kb3cKKyAqIGZvcndhcmQuCiAgKi8KLXN0YXRpYyBpbnQgYXRoX3R4X3NlbmRfYW1wZHUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkLAotCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQorc3RhdGljIHZvaWQgYXRoX3RpZF9kcmFpbihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCisKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAotCUJVR19PTihsaXN0X2VtcHR5KGJmX2hlYWQpKTsKKwlmb3IgKDs7KSB7CisJCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKKwkJCWJyZWFrOwogCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQU1QRFU7CisJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKIAotCS8qCi0JICogRG8gbm90IHF1ZXVlIHRvIGgvdyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKLQkgKiAtIHRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcyBpbiBzb2Z0d2FyZSBxdWV1ZQotCSAqIC0gdGhlIFRJRCBpcyBjdXJyZW50bHkgcGF1c2VkIGZvciBBRERCQS9CQVIgcmVxdWVzdAotCSAqIC0gc2Vxbm8gaXMgbm90IHdpdGhpbiBibG9jay1hY2sgd2luZG93Ci0JICogLSBoL3cgcXVldWUgZGVwdGggZXhjZWVkcyBsb3cgd2F0ZXIgbWFyawotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgfHwgdGlkLT5wYXVzZWQgfHwKLQkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGJmLT5iZl9zZXFubykgfHwKLQkgICAgdHhjdGwtPnR4cS0+YXhxX2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKLQkJLyoKLQkJICogQWRkIHRoaXMgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUgZm9yIHNjaGVkdWxpbmcgbGF0ZXIKLQkJICogZm9yIGFnZ3JlZ2F0aW9uLgotCQkgKi8KLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KGJmX2hlYWQsICZ0aWQtPmJ1Zl9xKTsKLQkJYXRoX3R4X3F1ZXVlX3RpZCh0eGN0bC0+dHhxLCB0aWQpOwotCQlyZXR1cm4gMDsKKwkJaWYgKGJmX2lzcmV0cmllZChiZikpCisJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCisJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwkJc3Bpbl9sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKIAl9CiAKLQkvKiBBZGQgc3ViLWZyYW1lIHRvIEJBVyAqLwotCWF0aF90eF9hZGR0b19iYXcoc2MsIHRpZCwgYmYpOwotCi0JLyogUXVldWUgdG8gaC93IHdpdGhvdXQgYWdncmVnYXRpb24gKi8KLQliZi0+YmZfbmZyYW1lcyA9IDE7Ci0JYmYtPmJmX2xhc3RiZiA9IGJmLT5iZl9sYXN0ZnJtOyAvKiBvbmUgc2luZ2xlIGZyYW1lICovCi0JYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwotCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsIGJmX2hlYWQpOwotCi0JcmV0dXJuIDA7CisJdGlkLT5zZXFfbmV4dCA9IHRpZC0+c2VxX3N0YXJ0OworCXRpZC0+YmF3X3RhaWwgPSB0aWQtPmJhd19oZWFkOwogfQogCi0vKgotICogbG9va3MgdXAgdGhlIHJhdGUKLSAqIHJldHVybnMgYWdnciBsaW1pdCBiYXNlZCBvbiBsb3dlc3Qgb2YgdGhlIHJhdGVzCi0gKi8KLXN0YXRpYyB1MzIgYXRoX2xvb2t1cF9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGF0aF9idWYgKmJmLAorc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKworCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKKwliZi0+YmZfcmV0cmllcysrOworCisJc2tiID0gYmYtPmJmX21wZHU7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiogYXRoX2Nsb25lX3R4YnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IGF0aF9idWYgKnRiZjsKKworCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOworCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKworCUFUSF9UWEJVRl9SRVNFVCh0YmYpOworCisJdGJmLT5iZl9tcGR1ID0gYmYtPmJmX21wZHU7CisJdGJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9idWZfYWRkcjsKKwkqKHRiZi0+YmZfZGVzYykgPSAqKGJmLT5iZl9kZXNjKTsKKwl0YmYtPmJmX3N0YXRlID0gYmYtPmJmX3N0YXRlOworCXRiZi0+YmZfZG1hY29udGV4dCA9IGJmLT5iZl9kbWFjb250ZXh0OworCisJcmV0dXJuIHRiZjsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkJIHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQkgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQgPSBOVUxMOworCXN0cnVjdCBhdGhfYnVmICpiZl9uZXh0LCAqYmZfbGFzdCA9IGJmLT5iZl9sYXN0YmY7CisJc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmX2xhc3QtPmJmX2Rlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkLCBiZl9wZW5kaW5nOworCXUxNiBzZXFfc3QgPSAwLCBhY2tlZF9jbnQgPSAwLCB0eGZhaWxfY250ID0gMDsKKwl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOworCWludCBpc2FnZ3IsIHR4ZmFpbCwgdHhwZW5kaW5nLCBzZW5kYmFyID0gMCwgbmVlZHJlc2V0ID0gMCwgbmJhZCA9IDA7CisJYm9vbCByY191cGRhdGUgPSB0cnVlOworCisJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHNjLT5odywgaGRyLT5hZGRyMSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKworCWlzYWdnciA9IGJmX2lzYWdncihiZik7CisJbWVtc2V0KGJhLCAwLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisKKwlpZiAoaXNhZ2dyICYmIHR4b2spIHsKKwkJaWYgKEFUSF9EU19UWF9CQShkcykpIHsKKwkJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQkJbWVtY3B5KGJhLCBBVEhfRFNfQkFfQklUTUFQKGRzKSwKKwkJCSAgICAgICBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQVI1NDE2IGNhbiBiZWNvbWUgZGVhZi9tdXRlIHdoZW4gQkEKKwkJCSAqIGlzc3VlIGhhcHBlbnMuIENoaXAgbmVlZHMgdG8gYmUgcmVzZXQuCisJCQkgKiBCdXQgQVAgY29kZSBtYXkgaGF2ZSBzeWNocm9uaXphdGlvbiBpc3N1ZXMKKwkJCSAqIHdoZW4gcGVyZm9ybSBpbnRlcm5hbCByZXNldCBpbiB0aGlzIHJvdXRpbmUuCisJCQkgKiBPbmx5IGVuYWJsZSByZXNldCBpbiBTVEEgbW9kZSBmb3Igbm93LgorCQkJICovCisJCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQluZWVkcmVzZXQgPSAxOworCQl9CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJmX3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKworCW5iYWQgPSBhdGhfdHhfbnVtX2JhZGZybXMoc2MsIGJmLCB0eG9rKTsKKwl3aGlsZSAoYmYpIHsKKwkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKKwkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OworCisJCWlmIChBVEhfQkFfSVNTRVQoYmEsIEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubykpKSB7CisJCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uLCBzdWJmcmFtZSBpcworCQkJICogYWNrZWQgYnkgYmxvY2sgYWNrICovCisJCQlhY2tlZF9jbnQrKzsKKwkJfSBlbHNlIGlmICghaXNhZ2dyICYmIHR4b2spIHsKKwkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24gKi8KKwkJCWFja2VkX2NudCsrOworCQl9IGVsc2UgeworCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKKwkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKKwkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQl0eHBlbmRpbmcgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCXR4ZmFpbCA9IDE7CisJCQkJCXNlbmRiYXIgPSAxOworCQkJCQl0eGZhaWxfY250Kys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIGNsZWFudXAgaW4gcHJvZ3Jlc3MsIGp1c3QgZmFpbAorCQkJCSAqIHRoZSB1bi1hY2tlZCBzdWItZnJhbWVzCisJCQkJICovCisJCQkJdHhmYWlsID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChiZl9uZXh0ID09IE5VTEwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVCghbGlzdF9lbXB0eShiZl9xKSk7CisJCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJfQorCisJCWlmICghdHhwZW5kaW5nKSB7CisJCQkvKgorCQkJICogY29tcGxldGUgdGhlIGFja2VkLW9uZXMveHJldHJpZWQgb25lczsgdXBkYXRlCisJCQkgKiBibG9jay1hY2sgd2luZG93CisJCQkgKi8KKwkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJCQlpZiAocmNfdXBkYXRlICYmIChhY2tlZF9jbnQgPT0gMSB8fCB0eGZhaWxfY250ID09IDEpKSB7CisJCQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgZHMsIG5iYWQsIHR4b2ssIHRydWUpOworCQkJCXJjX3VwZGF0ZSA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCwgdHhvaywgZmFsc2UpOworCQkJfQorCisJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOworCQl9IGVsc2UgeworCQkJLyogcmV0cnkgdGhlIHVuLWFja2VkIG9uZXMgKi8KKwkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmCisJCQkgICAgYmZfbGFzdC0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgeworCQkJCXN0cnVjdCBhdGhfYnVmICp0YmY7CisKKwkJCQl0YmYgPSBhdGhfY2xvbmVfdHhidWYoc2MsIGJmX2xhc3QpOworCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwgdGJmLT5iZl9kZXNjKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZ0YmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBDbGVhciBkZXNjcmlwdG9yIHN0YXR1cyB3b3JkcyBmb3IKKwkJCQkgKiBzb2Z0d2FyZSByZXRyeQorCQkJCSAqLworCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MpOworCQkJfQorCisJCQkvKgorCQkJICogUHV0IHRoaXMgYnVmZmVyIHRvIHRoZSB0ZW1wb3JhcnkgcGVuZGluZworCQkJICogcXVldWUgdG8gcmV0YWluIG9yZGVyaW5nCisJCQkgKi8KKwkJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYmZfaGVhZCwgJmJmX3BlbmRpbmcpOworCQl9CisKKwkJYmYgPSBiZl9uZXh0OworCX0KKworCWlmICh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB7CisJCWlmICh0aWQtPmJhd19oZWFkID09IHRpZC0+YmF3X3RhaWwpIHsKKwkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOworCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOworCisJCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCisJCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0aWQpOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJLyogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZSAqLworCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJbGlzdF9zcGxpY2UoJmJmX3BlbmRpbmcsICZ0aWQtPmJ1Zl9xKTsKKwkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChuZWVkcmVzZXQpCisJCWF0aF9yZXNldChzYywgZmFsc2UpOworfQorCitzdGF0aWMgdTMyIGF0aF9sb29rdXBfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAogCQkJICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwpAQCAtMTI1NSwxNSArNDQwLDE0IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXM7CiAJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKLQl1MzIgbWF4XzRtc19mcmFtZWxlbiwgZnJhbWVfbGVuZ3RoOworCXUzMiBtYXhfNG1zX2ZyYW1lbGVuLCBmcm1sZW47CiAJdTE2IGFnZ3JfbGltaXQsIGxlZ2FjeSA9IDAsIG1heGFtcGR1OwogCWludCBpOwogCiAJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7Ci0JdHhfaW5mb19wcml2ID0KLQkJKHN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXTsKKwl0eF9pbmZvX3ByaXYgPSAoc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKil0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdOwogCiAJLyoKIAkgKiBGaW5kIHRoZSBsb3dlc3QgZnJhbWUgbGVuZ3RoIGFtb25nIHRoZSByYXRlIHNlcmllcyB0aGF0IHdpbGwgaGF2ZSBhCkBAIC0xMjc5LDkgKzQ2Myw4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWZyYW1lX2xlbmd0aCA9Ci0JCQkJcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tpXS5pZHhdLm1heF80bXNfZnJhbWVsZW47Ci0JCQltYXhfNG1zX2ZyYW1lbGVuID0gbWluKG1heF80bXNfZnJhbWVsZW4sIGZyYW1lX2xlbmd0aCk7CisJCQlmcm1sZW4gPSByYXRlX3RhYmxlLT5pbmZvW3JhdGVzW2ldLmlkeF0ubWF4XzRtc19mcmFtZWxlbjsKKwkJCW1heF80bXNfZnJhbWVsZW4gPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgZnJtbGVuKTsKIAkJfQogCX0KIApAQCAtMTI5Myw4ICs0NzYsNyBAQAogCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFIHx8IGxlZ2FjeSkKIAkJcmV0dXJuIDA7CiAKLQlhZ2dyX2xpbWl0ID0gbWluKG1heF80bXNfZnJhbWVsZW4sCi0JCSh1MzIpQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQpOworCWFnZ3JfbGltaXQgPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgKHUzMilBVEhfQU1QRFVfTElNSVRfREVGQVVMVCk7CiAKIAkvKgogCSAqIGgvdyBjYW4gYWNjZXB0IGFnZ3JlZ2F0ZXMgdXB0byAxNiBiaXQgbGVuZ3RocyAoNjU1MzUpLgpAQCAtMTMwOSwxNCArNDkxLDEyIEBACiB9CiAKIC8qCi0gKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVsaW1pdGVycyB0byBiZSBhZGRlZCB0bworICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlbGltaXRlcnMgdG8gYmUgYWRkZWQgdG8KICAqIG1lZXQgdGhlIG1pbmltdW0gcmVxdWlyZWQgbXBkdWRlbnNpdHkuCi0gKiBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByYXRlIGlzICBIVCByYXRlIC4KKyAqIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJhdGUgaXMgSFQgcmF0ZSAuCiAgKi8KLXN0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCSAgdTE2IGZybWxlbikKK3N0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHUxNiBmcm1sZW4pCiB7CiAJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpydCA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPmJmX21wZHU7CkBAIC0xMzcwLDkgKzU1MCw3IEBACiAJbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07CiAJbWlubGVuID0gKG5zeW1ib2xzICogbnN5bWJpdHMpIC8gQklUU19QRVJfQllURTsKIAotCS8qIElzIGZyYW1lIHNob3J0ZXIgdGhhbiByZXF1aXJlZCBtaW5pbXVtIGxlbmd0aD8gKi8KIAlpZiAoZnJtbGVuIDwgbWlubGVuKSB7Ci0JCS8qIEdldCB0aGUgbWluaW11bSBudW1iZXIgb2YgZGVsaW1pdGVycyByZXF1aXJlZC4gKi8KIAkJbWluZGVsaW0gPSAobWlubGVuIC0gZnJtbGVuKSAvIEFUSF9BR0dSX0RFTElNX1NaOwogCQluZGVsaW0gPSBtYXgobWluZGVsaW0sIG5kZWxpbSk7CiAJfQpAQCAtMTM4MCwzNyArNTU4LDIzIEBACiAJcmV0dXJuIG5kZWxpbTsKIH0KIAotLyoKLSAqIEZvciBhZ2dyZWdhdGlvbiBmcm9tIHNvZnR3YXJlIGJ1ZmZlciBxdWV1ZS4KLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwogc3RhdGljIGVudW0gQVRIX0FHR1JfU1RBVFVTIGF0aF90eF9mb3JtX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiAqKmJmX2xhc3QsCi0JCQkJCXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gKnBhcmFtLAotCQkJCQlpbnQgKnByZXZfZnJhbWVzKQorCQkJCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EpCiB7CiAjZGVmaW5lIFBBREJZVEVTKF9sZW4pICgoNCAtICgoX2xlbikgJSA0KSkgJSA0KQotCXN0cnVjdCBhdGhfYnVmICpiZiwgKnRiZiwgKmJmX2ZpcnN0LCAqYmZfcHJldiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCWludCBybCA9IDAsIG5mcmFtZXMgPSAwLCBuZGVsaW07CisJc3RydWN0IGF0aF9idWYgKmJmLCAqYmZfZmlyc3QsICpiZl9wcmV2ID0gTlVMTDsKKwlpbnQgcmwgPSAwLCBuZnJhbWVzID0gMCwgbmRlbGltLCBwcmV2X2FsID0gMDsKIAl1MTYgYWdncl9saW1pdCA9IDAsIGFsID0gMCwgYnBhZCA9IDAsCiAJCWFsX2RlbHRhLCBoX2JhdyA9IHRpZC0+YmF3X3NpemUgLyAyOwogCWVudW0gQVRIX0FHR1JfU1RBVFVTIHN0YXR1cyA9IEFUSF9BR0dSX0RPTkU7Ci0JaW50IHByZXZfYWwgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCUJVR19PTihsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSk7CiAKIAliZl9maXJzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAogCWRvIHsKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKLQkJLyoKLQkJICogZG8gbm90IHN0ZXAgb3ZlciBibG9jay1hY2sgd2luZG93Ci0JCSAqLworCQkvKiBkbyBub3Qgc3RlcCBvdmVyIGJsb2NrLWFjayB3aW5kb3cgKi8KIAkJaWYgKCFCQVdfV0lUSElOKHRpZC0+c2VxX3N0YXJ0LCB0aWQtPmJhd19zaXplLCBiZi0+YmZfc2Vxbm8pKSB7CiAJCQlzdGF0dXMgPSBBVEhfQUdHUl9CQVdfQ0xPU0VEOwogCQkJYnJlYWs7CkBAIC0xNDIxLDI5ICs1ODUsMjMgQEAKIAkJCXJsID0gMTsKIAkJfQogCi0JCS8qCi0JCSAqIGRvIG5vdCBleGNlZWQgYWdncmVnYXRpb24gbGltaXQKLQkJICovCisJCS8qIGRvIG5vdCBleGNlZWQgYWdncmVnYXRpb24gbGltaXQgKi8KIAkJYWxfZGVsdGEgPSBBVEhfQUdHUl9ERUxJTV9TWiArIGJmLT5iZl9mcm1sZW47CiAKLQkJaWYgKG5mcmFtZXMgJiYgKGFnZ3JfbGltaXQgPAotCQkJKGFsICsgYnBhZCArIGFsX2RlbHRhICsgcHJldl9hbCkpKSB7CisJCWlmIChuZnJhbWVzICYmCisJCSAgICAoYWdncl9saW1pdCA8IChhbCArIGJwYWQgKyBhbF9kZWx0YSArIHByZXZfYWwpKSkgewogCQkJc3RhdHVzID0gQVRIX0FHR1JfTElNSVRFRDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyoKLQkJICogZG8gbm90IGV4Y2VlZCBzdWJmcmFtZSBsaW1pdAotCQkgKi8KLQkJaWYgKChuZnJhbWVzICsgKnByZXZfZnJhbWVzKSA+PQotCQkgICAgbWluKChpbnQpaF9iYXcsIEFUSF9BTVBEVV9TVUJGUkFNRV9ERUZBVUxUKSkgeworCQkvKiBkbyBub3QgZXhjZWVkIHN1YmZyYW1lIGxpbWl0ICovCisJCWlmIChuZnJhbWVzID49IG1pbigoaW50KWhfYmF3LCBBVEhfQU1QRFVfU1VCRlJBTUVfREVGQVVMVCkpIHsKIAkJCXN0YXR1cyA9IEFUSF9BR0dSX0xJTUlURUQ7CiAJCQlicmVhazsKIAkJfQorCQluZnJhbWVzKys7CiAKLQkJLyoKLQkJICogYWRkIHBhZGRpbmcgZm9yIHByZXZpb3VzIGZyYW1lIHRvIGFnZ3JlZ2F0aW9uIGxlbmd0aAotCQkgKi8KKwkJLyogYWRkIHBhZGRpbmcgZm9yIHByZXZpb3VzIGZyYW1lIHRvIGFnZ3JlZ2F0aW9uIGxlbmd0aCAqLwogCQlhbCArPSBicGFkICsgYWxfZGVsdGE7CiAKIAkJLyoKQEAgLTE0NTEsNjkgKzYwOSwzNSBAQAogCQkgKiBkZW5zaXR5IGZvciB0aGlzIG5vZGUuCiAJCSAqLwogCQluZGVsaW0gPSBhdGhfY29tcHV0ZV9udW1fZGVsaW1zKHNjLCB0aWQsIGJmX2ZpcnN0LCBiZi0+YmZfZnJtbGVuKTsKLQogCQlicGFkID0gUEFEQllURVMoYWxfZGVsdGEpICsgKG5kZWxpbSA8PCAyKTsKIAogCQliZi0+YmZfbmV4dCA9IE5VTEw7Ci0JCWJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjLT5kc19saW5rID0gMDsKKwkJYmYtPmJmX2Rlc2MtPmRzX2xpbmsgPSAwOwogCi0JCS8qCi0JCSAqIHRoaXMgcGFja2V0IGlzIHBhcnQgb2YgYW4gYWdncmVnYXRlCi0JCSAqIC0gcmVtb3ZlIGFsbCBkZXNjcmlwdG9ycyBiZWxvbmdpbmcgdG8gdGhpcyBmcmFtZSBmcm9tCi0JCSAqICAgc29mdHdhcmUgcXVldWUKLQkJICogLSBhZGQgaXQgdG8gYmxvY2sgYWNrIHdpbmRvdwotCQkgKiAtIHNldCB1cCBkZXNjcmlwdG9ycyBmb3IgYWdncmVnYXRpb24KLQkJICovCi0JCWxpc3RfY3V0X3Bvc2l0aW9uKCZiZl9oZWFkLCAmdGlkLT5idWZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKKwkJLyogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZSAqLwogCQlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiZiwgJmJmX2hlYWQsIGxpc3QpIHsKLQkJCWF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzYy0+c2NfYWgsCi0JCQkJdGJmLT5iZl9kZXNjLCBuZGVsaW0pOwotCQl9Ci0KLQkJLyoKLQkJICogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZQotCQkgKi8KLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZl9oZWFkLCBiZl9xKTsKLQkJbmZyYW1lcysrOwotCisJCWF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBuZGVsaW0pOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsIGJmX3EpOwogCQlpZiAoYmZfcHJldikgewogCQkJYmZfcHJldi0+YmZfbmV4dCA9IGJmOwotCQkJYmZfcHJldi0+YmZfbGFzdGZybS0+YmZfZGVzYy0+ZHNfbGluayA9IGJmLT5iZl9kYWRkcjsKKwkJCWJmX3ByZXYtPmJmX2Rlc2MtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7CiAJCX0KIAkJYmZfcHJldiA9IGJmOwotCi0jaWZkZWYgQUdHUl9OT1NIT1JUCi0JCS8qCi0JCSAqIHRlcm1pbmF0ZSBhZ2dyZWdhdGlvbiBvbiBhIHNtYWxsIHBhY2tldCBib3VuZGFyeQotCQkgKi8KLQkJaWYgKGJmLT5iZl9mcm1sZW4gPCBBVEhfQUdHUl9NSU5QTEVOKSB7Ci0JCQlzdGF0dXMgPSBBVEhfQUdHUl9TSE9SVFBLVDsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QtPmJmX2FsID0gYWw7CiAJYmZfZmlyc3QtPmJmX25mcmFtZXMgPSBuZnJhbWVzOwotCSpiZl9sYXN0ID0gYmZfcHJldjsKKwogCXJldHVybiBzdGF0dXM7CiAjdW5kZWYgUEFEQllURVMKIH0KIAotLyoKLSAqIHByb2Nlc3MgcGVuZGluZyBmcmFtZXMgcG9zc2libHkgZG9pbmcgYS1tcGR1IGFnZ3JlZ2F0aW9uCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zY2hlZF9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCXN0cnVjdCBhdGhfdHhxICp0eHEsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIHZvaWQgYXRoX3R4X3NjaGVkX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmYsICpiZl9sYXN0LCAqYmZfbGFzdGFnZ3IgPSBOVUxMOworCXN0cnVjdCBhdGhfYnVmICpiZjsKIAllbnVtIEFUSF9BR0dSX1NUQVRVUyBzdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9xOwotCXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gcGFyYW0gPSB7MCwgMCwgMCwgMCwgTlVMTH07Ci0JaW50IHByZXZfZnJhbWVzID0gMDsKIAogCWRvIHsKIAkJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQpAQCAtMTUyMSwxMjAgKzY0NSwxNDkgQEAKIAogCQlJTklUX0xJU1RfSEVBRCgmYmZfcSk7CiAKLQkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSwgJmJmX2xhc3RhZ2dyLCAmcGFyYW0sCi0JCQkJCSAgJnByZXZfZnJhbWVzKTsKKwkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSk7CiAKIAkJLyoKLQkJICogbm8gZnJhbWVzIHBpY2tlZCB1cCB0byBiZSBhZ2dyZWdhdGVkOyBibG9jay1hY2sKLQkJICogd2luZG93IGlzIG5vdCBvcGVuCisJCSAqIG5vIGZyYW1lcyBwaWNrZWQgdXAgdG8gYmUgYWdncmVnYXRlZDsKKwkJICogYmxvY2stYWNrIHdpbmRvdyBpcyBub3Qgb3Blbi4KIAkJICovCiAJCWlmIChsaXN0X2VtcHR5KCZiZl9xKSkKIAkJCWJyZWFrOwogCiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmYmZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQliZl9sYXN0ID0gbGlzdF9lbnRyeShiZl9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJYmYtPmJmX2xhc3RiZiA9IGJmX2xhc3Q7CisJCWJmLT5iZl9sYXN0YmYgPSBsaXN0X2VudHJ5KGJmX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCi0JCS8qCi0JCSAqIGlmIG9ubHkgb25lIGZyYW1lLCBzZW5kIGFzIG5vbi1hZ2dyZWdhdGUKLQkJICovCisJCS8qIGlmIG9ubHkgb25lIGZyYW1lLCBzZW5kIGFzIG5vbi1hZ2dyZWdhdGUgKi8KIAkJaWYgKGJmLT5iZl9uZnJhbWVzID09IDEpIHsKLQkJCUFTU0VSVChiZi0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQogCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9BR0dSOwotCQkJLyoKLQkJCSAqIGNsZWFyIGFnZ3IgYml0cyBmb3IgZXZlcnkgZGVzY3JpcHRvcgotCQkJICogWFhYIFRPRE86IGlzIHRoZXJlIGEgd2F5IHRvIG9wdGltaXplIGl0PwotCQkJICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiZiwgJmJmX3EsIGxpc3QpIHsKLQkJCQlhdGg5a19od19jbHIxMW5fYWdncihzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0JCQl9Ci0KKwkJCWF0aDlrX2h3X2NscjExbl9hZ2dyKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MpOwogCQkJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwogCQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCAmYmZfcSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIHNldHVwIGZpcnN0IGRlc2Mgd2l0aCByYXRlIGFuZCBhZ2dyIGluZm8KLQkJICovCisJCS8qIHNldHVwIGZpcnN0IGRlc2Mgb2YgYWdncmVnYXRlICovCiAJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BR0dSOwogCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJCWF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIGJmLT5iZl9hbCk7CiAKLQkJLyoKLQkJICogYW5jaG9yIGxhc3QgZnJhbWUgb2YgYWdncmVnYXRlIGNvcnJlY3RseQotCQkgKi8KLQkJQVNTRVJUKGJmX2xhc3RhZ2dyKTsKLQkJQVNTRVJUKGJmX2xhc3RhZ2dyLT5iZl9sYXN0ZnJtID09IGJmX2xhc3QpOwotCQl0YmYgPSBiZl9sYXN0YWdncjsKLQkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0KLQkJLyogWFhYOiBXZSBkb24ndCBlbnRlciBpbnRvIHRoaXMgbG9vcCwgY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyAqLwotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmJmX3EpICYmICFsaXN0X2lzX2xhc3QoJnRiZi0+bGlzdCwgJmJmX3EpKSB7Ci0JCQl0YmYgPSBsaXN0X2VudHJ5KHRiZi0+bGlzdC5uZXh0LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQlhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHNjLT5zY19haCwgdGJmLT5iZl9kZXNjKTsKLQkJfQorCQkvKiBhbmNob3IgbGFzdCBkZXNjIG9mIGFnZ3JlZ2F0ZSAqLworCQlhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHNjLT5zY19haCwgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYyk7CiAKIAkJdHhxLT5heHFfYWdncl9kZXB0aCsrOwotCi0JCS8qCi0JCSAqIE5vcm1hbCBhZ2dyZWdhdGUsIHF1ZXVlIHRvIGhhcmR3YXJlCi0JCSAqLwogCQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsICZiZl9xKTsKIAogCX0gd2hpbGUgKHR4cS0+YXhxX2RlcHRoIDwgQVRIX0FHR1JfTUlOX1FERVBUSCAmJgogCQkgc3RhdHVzICE9IEFUSF9BR0dSX0JBV19DTE9TRUQpOwogfQogCi0vKiBDYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkICovCi0KLXN0YXRpYyB2b2lkIGF0aF90aWRfZHJhaW4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQotCitpbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogeworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKworCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CisJCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJYXRoX3R4X3BhdXNlX3RpZChzYywgdHh0aWQpOworCQkqc3NuID0gdHh0aWQtPnNlcV9zdGFydDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CisJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3R4dGlkLT5hYy0+cW51bV07CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKIAlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CiAKLQlmb3IgKDs7KSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKLQkJCWJyZWFrOwotCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwlpZiAodHh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKQorCQlyZXR1cm4gMDsKIAotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0KLQkJLyogdXBkYXRlIGJhdyBmb3Igc29mdHdhcmUgcmV0cmllZCBmcmFtZSAqLwotCQlpZiAoYmZfaXNyZXRyaWVkKGJmKSkKLQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7Ci0KLQkJLyoKLQkJICogZG8gbm90IGluZGljYXRlIHBhY2tldHMgd2hpbGUgaG9sZGluZyB0eHEgc3BpbmxvY2suCi0JCSAqIHVubG9jayBpcyBpbnRlbnRpb25hbCBoZXJlCi0JCSAqLwotCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7Ci0KLQkJLyogY29tcGxldGUgdGhpcyBzdWItZnJhbWUgKi8KLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKLQotCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOworCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7CisJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBUT0RPOiBGb3IgZnJhbWUocykgdGhhdCBhcmUgaW4gdGhlIHJldHJ5IHN0YXRlLCB3ZSB3aWxsIHJldXNlIHRoZQotCSAqIHNlcXVlbmNlIG51bWJlcihzKSB3aXRob3V0IHNldHRpbmcgdGhlIHJldHJ5IGJpdC4gVGhlCi0JICogYWx0ZXJuYXRpdmUgaXMgdG8gZ2l2ZSB1cCBvbiB0aGVzZSBhbmQgQkFSIHRoZSByZWNlaXZlcidzIHdpbmRvdwotCSAqIGZvcndhcmQuCi0JICovCi0JdGlkLT5zZXFfbmV4dCA9IHRpZC0+c2VxX3N0YXJ0OwotCXRpZC0+YmF3X3RhaWwgPSB0aWQtPmJhd19oZWFkOworCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKworCS8qIGRyb3AgYWxsIHNvZnR3YXJlIHJldHJpZWQgZnJhbWVzIGFuZCBtYXJrIHRoaXMgVElEICovCisJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4dGlkLT5idWZfcSkpIHsKKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwkJaWYgKCFiZl9pc3JldHJpZWQoYmYpKSB7CisJCQkvKgorCQkJICogTkI6IGl0J3MgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdAorCQkJICogc29mdHdhcmUgcmV0cmllZCBmcmFtZSB3aWxsIGFsd2F5cyBzdGF5CisJCQkgKiBhdCB0aGUgaGVhZCBvZiBzb2Z0d2FyZSBxdWV1ZS4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0eHRpZCwgYmYtPmJmX3NlcW5vKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJaWYgKHR4dGlkLT5iYXdfaGVhZCAhPSB0eHRpZC0+YmF3X3RhaWwpIHsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQ0xFQU5VUDsKKwl9IGVsc2UgeworCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdHh0aWQpOworCX0KKworCXJldHVybiAwOwogfQogCi0vKgotICogRHJhaW4gYWxsIHBlbmRpbmcgYnVmZmVycwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCit2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgeworCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKKwkJdHh0aWQtPmJhd19zaXplID0KKwkJCUlFRUU4MDIxMV9NSU5fQU1QRFVfQlVGIDw8IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfQ09NUExFVEU7CisJCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJYXRoX3R4X3Jlc3VtZV90aWQoc2MsIHR4dGlkKTsKKwl9Cit9CisKK2Jvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkbm8pOworCisJaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSkpIHsKKwkJaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9QUk9HUkVTUykgJiYKKwkJICAgICh0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA8IEFEREJBX0VYQ0hBTkdFX0FUVEVNUFRTKSkgeworCQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMrKzsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioqKioqKioqKioqKioqKioqKiovCisvKiBRdWV1ZSBNYW5hZ2VtZW50ICovCisvKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyB2b2lkIGF0aF90eHFfZHJhaW5fcGVuZGluZ19idWZmZXJzKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CkBAIC0xNjUyLDI1MSArODA1LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoX3R4X3NldHVwX2J1ZmZlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2OwotCWludCBoZHJsZW47Ci0JX19sZTE2IGZjOwotCi0JdHhfaW5mb19wcml2ID0ga3phbGxvYyhzaXplb2YoKnR4X2luZm9fcHJpdiksIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghdHhfaW5mb19wcml2KSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IHR4X2luZm9fcHJpdjsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JQVRIX1RYQlVGX1JFU0VUKGJmKTsKLQotCS8qIEZyYW1lIHR5cGUgKi8KLQotCWJmLT5iZl9mcm1sZW4gPSBza2ItPmxlbiArIEZDU19MRU4gLSAoaGRybGVuICYgMyk7Ci0KLQlpZWVlODAyMTFfaXNfZGF0YShmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0RBVEEpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfREFUQSk7Ci0JaWVlZTgwMjExX2lzX2JhY2tfcmVxKGZjKSA/Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQkFSKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0JBUik7Ci0JaWVlZTgwMjExX2lzX3BzcG9sbChmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1BTUE9MTCkgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9QU1BPTEwpOwotCShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1NIT1JUX1BSRUFNQkxFKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX1NIT1JUX1BSRUFNQkxFKTsKLQkoc2MtPmh3LT5jb25mLmh0LmVuYWJsZWQgJiYgIWlzX3BhZShza2IpICYmCi0JICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKSA/Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfSFQpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfSFQpOwotCi0JYmYtPmJmX2ZsYWdzID0gc2V0dXBfdHhfZmxhZ3Moc2MsIHNrYiwgdHhjdGwtPnR4cSk7Ci0KLQkvKiBDcnlwdG8gKi8KLQotCWJmLT5iZl9rZXl0eXBlID0gZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7Ci0KLQlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKLQkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKLQkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7Ci0JfSBlbHNlIHsKLQkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOwotCX0KLQotCS8qIEFzc2lnbiBzZXFubywgdGlkbm8gKi8KLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQotCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7Ci0KLQkvKiBETUEgc2V0dXAgKi8KLQliZi0+YmZfbXBkdSA9IHNrYjsKLQotCWJmLT5iZl9kbWFjb250ZXh0ID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0KSkpIHsKLQkJYmYtPmJmX21wZHUgPSBOVUxMOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKLQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBUWFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0OwotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogdHggcG93ZXIgKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zdGFydF9kbWEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkczsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IGZybV90eXBlOwotCi0JZnJtX3R5cGUgPSBnZXRfaHdfcGFja2V0X3R5cGUoc2tiKTsKLQotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvciAqLwotCi0JZHMgPSBiZi0+YmZfZGVzYzsKLQlkcy0+ZHNfbGluayA9IDA7Ci0JZHMtPmRzX2RhdGEgPSBiZi0+YmZfYnVmX2FkZHI7Ci0KLQkvKiBGb3JtdWxhdGUgZmlyc3QgdHggZGVzY3JpcHRvciB3aXRoIHR4IGNvbnRyb2xzICovCi0KLQlhdGg5a19od19zZXQxMW5fdHhkZXNjKGFoLCBkcywgYmYtPmJmX2ZybWxlbiwgZnJtX3R5cGUsIE1BWF9SQVRFX1BPV0VSLAotCQkJICAgICAgIGJmLT5iZl9rZXlpeCwgYmYtPmJmX2tleXR5cGUsIGJmLT5iZl9mbGFncyk7Ci0KLQlhdGg5a19od19maWxsdHhkZXNjKGFoLCBkcywKLQkJCSAgICBza2ItPmxlbiwJLyogc2VnbWVudCBsZW5ndGggKi8KLQkJCSAgICB0cnVlLAkvKiBmaXJzdCBzZWdtZW50ICovCi0JCQkgICAgdHJ1ZSwJLyogbGFzdCBzZWdtZW50ICovCi0JCQkgICAgZHMpOwkvKiBmaXJzdCBkZXNjcmlwdG9yICovCi0KLQliZi0+YmZfbGFzdGZybSA9IGJmOwotCi0Jc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Ci0KLQlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKLQkgICAgdHhfaW5mby0+Y29udHJvbC5zdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwotCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7Ci0KLQkJaWYgKGF0aF9hZ2dyX3F1ZXJ5KHNjLCBhbiwgYmYtPmJmX3RpZG5vKSkgewotCQkJLyoKLQkJCSAqIFRyeSBhZ2dyZWdhdGlvbiBpZiBpdCdzIGEgdW5pY2FzdCBkYXRhIGZyYW1lCi0JCQkgKiBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIEhUIGNhcGFibGUuCi0JCQkgKi8KLQkJCWF0aF90eF9zZW5kX2FtcGR1KHNjLCB0aWQsICZiZl9oZWFkLCB0eGN0bCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogU2VuZCB0aGlzIGZyYW1lIGFzIHJlZ3VsYXIgd2hlbiBBRERCQQotCQkJICogZXhjaGFuZ2UgaXMgbmVpdGhlciBjb21wbGV0ZSBub3IgcGVuZGluZy4KLQkJCSAqLwotCQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLAotCQkJCQkgICB0aWQsICZiZl9oZWFkKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWJmLT5iZl9sYXN0YmYgPSBiZjsKLQkJYmYtPmJmX25mcmFtZXMgPSAxOwotCi0JCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOwotCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Ci19Ci0KLS8qIFVwb24gZmFpbHVyZSBjYWxsZXIgc2hvdWxkIGZyZWUgc2tiICovCi1pbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0JaW50IHI7Ci0KLQkvKiBDaGVjayBpZiBhIHR4IGJ1ZmZlciBpcyBhdmFpbGFibGUgKi8KLQotCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOwotCWlmICghYmYpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggYnVmZmVycyBhcmUgZnVsbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihzYywgYmYsIHNrYiwgdHhjdGwpOwotCWlmICh1bmxpa2VseShyKSkgewotCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKLQotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOwotCi0JCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCi0JCSAqIGd1YXJhbnRlZSB0aGlzIHdpbGwgaGFwcGVuIGJ5IGtub3dpbmcgYmVmb3JlaGFuZCB0aGF0Ci0JCSAqIHdlIHdpbGwgYXQgbGVhc3QgaGF2ZSB0byBydW4gVFggY29tcGxldGlvbm9uIG9uZSBidWZmZXIKLQkJICogb24gdGhlIHF1ZXVlICovCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmIChhdGhfdHhxX2RlcHRoKHNjLCB0eHEtPmF4cV9xbnVtKSA+IDEpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKLQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCQl0eHEtPnN0b3BwZWQgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQotCQlyZXR1cm4gcjsKLQl9Ci0KLQlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEluaXRpYWxpemUgVFggcXVldWUgYW5kIGgvdyAqLwotCi1pbnQgYXRoX3R4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcykKLXsKLQlpbnQgZXJyb3IgPSAwOwotCi0JZG8gewotCQlzcGluX2xvY2tfaW5pdCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJLyogU2V0dXAgdHggZGVzY3JpcHRvcnMgKi8KLQkJZXJyb3IgPSBhdGhfZGVzY2RtYV9zZXR1cChzYywgJnNjLT50eC50eGRtYSwgJnNjLT50eC50eGJ1ZiwKLQkJCSJ0eCIsIG5idWZzLCAxKTsKLQkJaWYgKGVycm9yICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB0eCBkZXNjcmlwdG9yczogJWRcbiIsCi0JCQkJZXJyb3IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBYWFggYWxsb2NhdGUgYmVhY29uIHN0YXRlIHRvZ2V0aGVyIHdpdGggdmFwICovCi0JCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYsCi0JCQkJCSAgImJlYWNvbiIsIEFUSF9CQ0JVRiwgMSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwKLQkJCQllcnJvcik7Ci0JCQlicmVhazsKLQkJfQotCi0JfSB3aGlsZSAoMCk7Ci0KLQlpZiAoZXJyb3IgIT0gMCkKLQkJYXRoX3R4X2NsZWFudXAoc2MpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBSZWNsYWltIGFsbCB0eCBxdWV1ZSByZXNvdXJjZXMgKi8KLQotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCS8qIGNsZWFudXAgYmVhY29uIGRlc2NyaXB0b3JzICovCi0JaWYgKHNjLT5iZWFjb24uYmRtYS5kZF9kZXNjX2xlbiAhPSAwKQotCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmKTsKLQotCS8qIGNsZWFudXAgdHggZGVzY3JpcHRvcnMgKi8KLQlpZiAoc2MtPnR4LnR4ZG1hLmRkX2Rlc2NfbGVuICE9IDApCi0JCWF0aF9kZXNjZG1hX2NsZWFudXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldHVwIGEgaC93IHRyYW5zbWl0IHF1ZXVlICovCi0KIHN0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcW51bTsKIApAQCAtMTk1OSw0MyArODcwLDcgQEAKIAlyZXR1cm4gJnNjLT50eC50eHFbcW51bV07CiB9CiAKLS8qIFJlY2xhaW0gcmVzb3VyY2VzIGZvciBhIHNldHVwIHF1ZXVlICovCi0KLXZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCWF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHNjLT5zY19haCwgdHhxLT5heHFfcW51bSk7Ci0Jc2MtPnR4LnR4cXNldHVwICY9IH4oMTw8dHhxLT5heHFfcW51bSk7Ci19Ci0KLS8qCi0gKiBTZXR1cCBhIGhhcmR3YXJlIGRhdGEgdHJhbnNtaXQgcXVldWUgZm9yIHRoZSBzcGVjaWZpZWQKLSAqIGFjY2VzcyBjb250cm9sLiAgVGhlIGhhbCBtYXkgbm90IHN1cHBvcnQgYWxsIHJlcXVlc3RlZAotICogcXVldWVzIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8gYQotICogcHJldmlvdXNseSBzZXR1cCBxdWV1ZS4gIFdlIHJlY29yZCB0aGUgbWFwcGluZyBmcm9tIGFjJ3MKLSAqIHRvIGgvdyBxdWV1ZXMgZm9yIHVzZSBieSBhdGhfdHhfc3RhcnQgYW5kIGFsc28gdHJhY2sKLSAqIHRoZSBzZXQgb2YgaC93IHF1ZXVlcyBiZWluZyB1c2VkIHRvIG9wdGltaXplIHdvcmsgaW4gdGhlCi0gKiB0cmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgcmVsYXRlZCByb3V0aW5lcy4KLSAqLwotCi1pbnQgYXRoX3R4X3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaGFsdHlwZSkKLXsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxOwotCi0JaWYgKGhhbHR5cGUgPj0gQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJIQUwgQUMgJXUgb3V0IG9mIHJhbmdlLCBtYXggJXp1IVxuIiwKLQkJCSBoYWx0eXBlLCBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSk7Ci0JCXJldHVybiAwOwotCX0KLQl0eHEgPSBhdGhfdHhxX3NldHVwKHNjLCBBVEg5S19UWF9RVUVVRV9EQVRBLCBoYWx0eXBlKTsKLQlpZiAodHhxICE9IE5VTEwpIHsKLQkJc2MtPnR4Lmh3cV9tYXBbaGFsdHlwZV0gPSB0eHEtPmF4cV9xbnVtOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpCitzdGF0aWMgaW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSkKIHsKIAlpbnQgcW51bTsKIApAQCAtMjAyMSw4ICs4OTYsNiBAQAogCXJldHVybiBxbnVtOwogfQogCi0vKiBHZXQgYSB0cmFuc21pdCBxdWV1ZSwgaWYgYXZhaWxhYmxlICovCi0KIHN0cnVjdCBhdGhfdHhxICphdGhfdGVzdF9nZXRfdHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSBOVUxMOwpAQCAtMjAzMyw5ICs5MDYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAotCS8qIFRyeSB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBkZXNjcmlwdG9ycyAqLwogCWlmICh0eHEtPmF4cV9kZXB0aCA+PSAoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwKIAkJCSJUWCBxdWV1ZTogJWQgaXMgZnVsbCwgZGVwdGg6ICVkXG4iLAogCQkJcW51bSwgdHhxLT5heHFfZGVwdGgpOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKQEAgLTIwNDksMTIgKzkyMSwxMCBAQAogCXJldHVybiB0eHE7CiB9CiAKLS8qIFVwZGF0ZSBwYXJhbWV0ZXJzIGZvciBhIHRyYW5zbWl0IHF1ZXVlICovCi0KIGludCBhdGhfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0sCiAJCSAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIApAQCAtMjA4Miw3ICs5NTIsNyBAQAogCQkJIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxbnVtKTsKIAkJZXJyb3IgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7CiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtMjA5Miw1NSArOTYyLDM2IEBACiB7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAJaW50IHFudW0gPSBzYy0+YmVhY29uLmNhYnEtPmF4cV9xbnVtOwotCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyBjb25mOwogCiAJYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzYy0+c2NfYWgsIHFudW0sICZxaSk7CiAJLyoKIAkgKiBFbnN1cmUgdGhlIHJlYWR5dGltZSAlIGlzIHdpdGhpbiB0aGUgYm91bmRzLgogCSAqLwotCWlmIChzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPCBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EKQotCQlzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EOwotCWVsc2UgaWYgKHNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSA+IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQpCi0JCXNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQ7CisJaWYgKHNjLT5jb25maWcuY2FicVJlYWR5dGltZSA8IEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQpCisJCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQ7CisJZWxzZSBpZiAoc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lID4gQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCkKKwkJc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORDsKIAotCWF0aF9nZXRfYmVhY29uY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZLCAmY29uZik7Ci0JcWkudHFpX3JlYWR5VGltZSA9Ci0JCShjb25mLmJlYWNvbl9pbnRlcnZhbCAqIHNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSkgLyAxMDA7CisJcWkudHFpX3JlYWR5VGltZSA9IChzYy0+aHctPmNvbmYuYmVhY29uX2ludCAqCisJCQkgICAgc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lKSAvIDEwMDsKIAlhdGhfdHhxX3VwZGF0ZShzYywgcW51bSwgJnFpKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9mIHRyYW5zbWl0IGludGVycnVwdCAqLwotCi12b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWludCBpOwotCXUzMiBxY3VtYXNrID0gKCgxIDw8IEFUSDlLX05VTV9UWF9RVUVVRVMpIC0gMSk7Ci0KLQlhdGg5a19od19nZXR0eGludHJ0eHFzKHNjLT5zY19haCwgJnFjdW1hc2spOwotCi0JLyoKLQkgKiBQcm9jZXNzIGVhY2ggYWN0aXZlIHF1ZXVlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKLQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpICYmIChxY3VtYXNrICYgKDEgPDwgaSkpKQotCQkJYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4LnR4cVtpXSk7Ci0JfQotfQotCi12b2lkIGF0aF90eF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBib29sIHJldHJ5X3R4KQorLyoKKyAqIERyYWluIGEgZ2l2ZW4gVFggcXVldWUgKGNvdWxkIGJlIEJlYWNvbiBvciBEYXRhKQorICoKKyAqIFRoaXMgYXNzdW1lcyBvdXRwdXQgaGFzIGJlZW4gc3RvcHBlZCBhbmQKKyAqIHdlIGRvIG5vdCBuZWVkIHRvIGJsb2NrIGF0aF90eF90YXNrbGV0LgorICovCit2b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCkKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICpsYXN0YmY7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JLyoKLQkgKiBOQjogdGhpcyBhc3N1bWVzIG91dHB1dCBoYXMgYmVlbiBzdG9wcGVkIGFuZAotCSAqICAgICB3ZSBkbyBub3QgbmVlZCB0byBibG9jayBhdGhfdHhfdGFza2xldAotCSAqLwogCWZvciAoOzspIHsKIAkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIApAQCAtMjE3NSw3ICsxMDI2LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCWlmIChiZl9pc2FtcGR1KGJmKSkKLQkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyX3JpZnMoc2MsIHR4cSwgYmYsICZiZl9oZWFkLCAwKTsKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CiAJCWVsc2UKIAkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQpAQCAtMjE5MCwxODEgKzEwNDEsNjYgQEAKIAl9CiB9CiAKLS8qIERyYWluIHRoZSB0cmFuc21pdCBxdWV1ZXMgYW5kIHJlY2xhaW0gcmVzb3VyY2VzICovCi0KLXZvaWQgYXRoX2RyYWludHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KQordm9pZCBhdGhfZHJhaW5fYWxsX3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKIHsKLQkvKiBzdG9wIGJlYWNvbiBxdWV1ZS4gVGhlIGJlYWNvbiB3aWxsIGJlIGZyZWVkIHdoZW4KLQkgKiB3ZSBnbyB0byBJTklUIHN0YXRlICovCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKLQkJKHZvaWQpIGF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImJlYWNvbiBxdWV1ZSAleFxuIiwKLQkJCWF0aDlrX2h3X2dldHR4YnVmKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKSk7Ci0JfQorCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGksIG5wZW5kID0gMDsKIAotCWF0aF9kcmFpbl90eGRhdGFxKHNjLCByZXRyeV90eCk7Ci19CisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpCisJCXJldHVybjsKIAotdTMyIGF0aF90eHFfZGVwdGgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtKQotewotCXJldHVybiBzYy0+dHgudHhxW3FudW1dLmF4cV9kZXB0aDsKLX0KKwkvKiBTdG9wIGJlYWNvbiBxdWV1ZSAqLworCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CiAKLXUzMiBhdGhfdHhxX2FnZ3JfZGVwdGgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtKQotewotCXJldHVybiBzYy0+dHgudHhxW3FudW1dLmF4cV9hZ2dyX2RlcHRoOwotfQotCi1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKLQotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCi0JCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKLQkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkvKiBTdG9wIGRhdGEgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKKwkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCB0eHEtPmF4cV9xbnVtKTsKKwkJCW5wZW5kICs9IGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgdHhxLT5heHFfcW51bSk7CiAJCX0KIAl9CiAKLQlyZXR1cm4gZmFsc2U7CisJaWYgKG5wZW5kKSB7CisJCWludCByOworCisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKKworCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOworCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgdHJ1ZSk7CisJCWlmIChyKQorCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsCisJCQkJcik7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF9kcmFpbnR4cShzYywgJnNjLT50eC50eHFbaV0sIHJldHJ5X3R4KTsKKwl9CiB9CiAKLS8qIFN0YXJ0IFRYIGFnZ3JlZ2F0aW9uICovCi0KLWludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCit2b2lkIGF0aF90eF9jbGVhbnVwcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwotCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgewotCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlhdGg5a19od19yZWxlYXNldHhxdWV1ZShzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pOworCXNjLT50eC50eHFzZXR1cCAmPSB+KDE8PHR4cS0+YXhxX3FudW0pOwogfQogCi0vKiBTdG9wIHR4IGFnZ3JlZ2F0aW9uICovCi0KLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQotewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWF0aF90eF9hZ2dyX3RlYXJkb3duKHNjLCBhbiwgdGlkKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogUmVzdW1lIHR4IGFnZ3JlZ2F0aW9uICovCi0KLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQotewotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7Ci0Jc3RydWN0IGF0aF9ub2RlICphbjsKLQotCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Ci0KLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7Ci0JCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOwotCQl0eHRpZC0+YmF3X3NpemUgPQotCQkJSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgPDwgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOwotCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9DT01QTEVURTsKLQkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcmVzdW1lX3RpZChzYywgdHh0aWQpOwotCX0KLX0KLQotLyoKLSAqIFBlcmZvcm1zIHRyYW5zbWl0IHNpZGUgY2xlYW51cCB3aGVuIFRJRCBjaGFuZ2VzIGZyb20gYWdncmVnYXRlZCB0bwotICogdW5hZ2dyZWdhdGVkLgotICogLSBQYXVzZSB0aGUgVElEIGFuZCBtYXJrIGNsZWFudXAgaW4gcHJvZ3Jlc3MKLSAqIC0gRGlzY2FyZCBhbGwgcmV0cnkgZnJhbWVzIGZyb20gdGhlIHMvdyBxdWV1ZS4KLSAqLwotCi12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWQpCi17Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdHh0aWQtPmFjLT5xbnVtXTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCWlmICh0eHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIC8qIGNsZWFudXAgaXMgaW4gcHJvZ3Jlc3MgKi8KLQkJcmV0dXJuOwotCi0JaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSkpIHsKLQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVElEIG11c3QgYmUgcGF1c2VkIGZpcnN0ICovCi0JYXRoX3R4X3BhdXNlX3RpZChzYywgdHh0aWQpOwotCi0JLyogZHJvcCBhbGwgc29mdHdhcmUgcmV0cmllZCBmcmFtZXMgYW5kIG1hcmsgdGhpcyBUSUQgKi8KLQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCXdoaWxlICghbGlzdF9lbXB0eSgmdHh0aWQtPmJ1Zl9xKSkgewotCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnR4dGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQlpZiAoIWJmX2lzcmV0cmllZChiZikpIHsKLQkJCS8qCi0JCQkgKiBOQjogaXQncyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0JCQkgKiBzb2Z0d2FyZSByZXRyaWVkIGZyYW1lIHdpbGwgYWx3YXlzIHN0YXkKLQkJCSAqIGF0IHRoZSBoZWFkIG9mIHNvZnR3YXJlIHF1ZXVlLgotCQkJICovCi0JCQlicmVhazsKLQkJfQotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCSZ0eHRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0JCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0eHRpZCwgYmYtPmJmX3NlcW5vKTsKLQotCQkvKiBjb21wbGV0ZSB0aGlzIHN1Yi1mcmFtZSAqLwotCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOwotCX0KLQotCWlmICh0eHRpZC0+YmF3X2hlYWQgIT0gdHh0aWQtPmJhd190YWlsKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQ0xFQU5VUDsKLQl9IGVsc2UgewotCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0eHRpZCk7Ci0JfQotfQotCi0vKgotICogVHggc2NoZWR1bGluZyBsb2dpYwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KIHZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CiAKLQkvKiBub3RoaW5nIHRvIHNjaGVkdWxlICovCiAJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX2FjcSkpCiAJCXJldHVybjsKLQkvKgotCSAqIGdldCB0aGUgZmlyc3Qgbm9kZS9hYyBwYWlyIG9uIHRoZSBxdWV1ZQotCSAqLworCiAJYWMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9hY3EsIHN0cnVjdCBhdGhfYXR4X2FjLCBsaXN0KTsKIAlsaXN0X2RlbCgmYWMtPmxpc3QpOwogCWFjLT5zY2hlZCA9IGZhbHNlOwogCi0JLyoKLQkgKiBwcm9jZXNzIGEgc2luZ2xlIHRpZCBwZXIgZGVzdGluYXRpb24KLQkgKi8KIAlkbyB7Ci0JCS8qIG5vdGhpbmcgdG8gc2NoZWR1bGUgKi8KIAkJaWYgKGxpc3RfZW1wdHkoJmFjLT50aWRfcSkpCiAJCQlyZXR1cm47CiAKQEAgLTIzNzIsNyArMTEwOCw3IEBACiAJCWxpc3RfZGVsKCZ0aWQtPmxpc3QpOwogCQl0aWQtPnNjaGVkID0gZmFsc2U7CiAKLQkJaWYgKHRpZC0+cGF1c2VkKSAgICAvKiBjaGVjayBuZXh0IHRpZCB0byBrZWVwIGgvdyBidXN5ICovCisJCWlmICh0aWQtPnBhdXNlZCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgodHhxLT5heHFfZGVwdGggJSAyKSA9PSAwKQpAQCAtMjM4NSwxNyArMTEyMSwxMCBAQAogCQlpZiAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CiAKLQkJLyogb25seSBzY2hlZHVsZSBvbmUgVElEIGF0IGEgdGltZSAqLwogCQlicmVhazsKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmYWMtPnRpZF9xKSk7CiAKLQkvKgotCSAqIHNjaGVkdWxlIEFDIGlmIG1vcmUgVElEcyBuZWVkIHByb2Nlc3NpbmcKLQkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmFjLT50aWRfcSkpIHsKLQkJLyoKLQkJICogYWRkIGRlc3QgYWMgdG8gdHhxIGlmIG5vdCBhbHJlYWR5IGFkZGVkCi0JCSAqLwogCQlpZiAoIWFjLT5zY2hlZCkgewogCQkJYWMtPnNjaGVkID0gdHJ1ZTsKIAkJCWxpc3RfYWRkX3RhaWwoJmFjLT5saXN0LCAmdHhxLT5heHFfYWNxKTsKQEAgLTI0MDMsMTA5ICsxMTMyLDU3MyBAQAogCX0KIH0KIAotLyogSW5pdGlhbGl6ZSBwZXItbm9kZSB0cmFuc21pdCBzdGF0ZSAqLwotCi12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCitpbnQgYXRoX3R4X3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaGFsdHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7Ci0JaW50IHRpZG5vLCBhY25vOwotCi0JLyoKLQkgKiBJbml0IHBlciB0aWQgdHggc3RhdGUKLQkgKi8KLQlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOwotCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsKLQkgICAgIHRpZG5vKyssIHRpZCsrKSB7Ci0JCXRpZC0+YW4gICAgICAgID0gYW47Ci0JCXRpZC0+dGlkbm8gICAgID0gdGlkbm87Ci0JCXRpZC0+c2VxX3N0YXJ0ID0gdGlkLT5zZXFfbmV4dCA9IDA7Ci0JCXRpZC0+YmF3X3NpemUgID0gV01FX01BWF9CQTsKLQkJdGlkLT5iYXdfaGVhZCAgPSB0aWQtPmJhd190YWlsID0gMDsKLQkJdGlkLT5zY2hlZCAgICAgPSBmYWxzZTsKLQkJdGlkLT5wYXVzZWQgPSBmYWxzZTsKLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwotCQlJTklUX0xJU1RfSEVBRCgmdGlkLT5idWZfcSk7Ci0KLQkJYWNubyA9IFRJRF9UT19XTUVfQUModGlkbm8pOwotCQl0aWQtPmFjID0gJmFuLT5hY1thY25vXTsKLQotCQkvKiBBRERCQSBzdGF0ZSAqLwotCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX1BST0dSRVNTOwotCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCX0KLQotCS8qCi0JICogSW5pdCBwZXIgYWMgdHggc3RhdGUKLQkgKi8KLQlmb3IgKGFjbm8gPSAwLCBhYyA9ICZhbi0+YWNbYWNub107Ci0JICAgICBhY25vIDwgV01FX05VTV9BQzsgYWNubysrLCBhYysrKSB7Ci0JCWFjLT5zY2hlZCAgICA9IGZhbHNlOwotCQlJTklUX0xJU1RfSEVBRCgmYWMtPnRpZF9xKTsKLQotCQlzd2l0Y2ggKGFjbm8pIHsKLQkJY2FzZSBXTUVfQUNfQkU6Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01FX0FDX0JLOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JLKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9BQ19WSToKLQkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAotCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19WSSk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUVfQUNfVk86Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVk8pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLS8qIENsZWFudXB0aGUgcGVuZGluZyBidWZmZXJzIGZvciB0aGUgbm9kZS4gKi8KLQotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQotewotCWludCBpOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYywgKmFjX3RtcDsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwgKnRpZF90bXA7CiAJc3RydWN0IGF0aF90eHEgKnR4cTsKLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgewotCQkJdHhxID0gJnNjLT50eC50eHFbaV07CiAKLQkJCXNwaW5fbG9jaygmdHhxLT5heHFfbG9jayk7Ci0KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhYywKLQkJCQkJYWNfdG1wLCAmdHhxLT5heHFfYWNxLCBsaXN0KSB7Ci0JCQkJdGlkID0gbGlzdF9maXJzdF9lbnRyeSgmYWMtPnRpZF9xLAotCQkJCQkJc3RydWN0IGF0aF9hdHhfdGlkLCBsaXN0KTsKLQkJCQlpZiAodGlkICYmIHRpZC0+YW4gIT0gYW4pCi0JCQkJCWNvbnRpbnVlOwotCQkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7Ci0JCQkJYWMtPnNjaGVkID0gZmFsc2U7Ci0KLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGlkLAotCQkJCQkJdGlkX3RtcCwgJmFjLT50aWRfcSwgbGlzdCkgewotCQkJCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKLQkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwotCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKLQkJfQorCWlmIChoYWx0eXBlID49IEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKSB7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiSEFMIEFDICV1IG91dCBvZiByYW5nZSwgbWF4ICV6dSFcbiIsCisJCQkgaGFsdHlwZSwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpOworCQlyZXR1cm4gMDsKIAl9CisJdHhxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgaGFsdHlwZSk7CisJaWYgKHR4cSAhPSBOVUxMKSB7CisJCXNjLT50eC5od3FfbWFwW2hhbHR5cGVdID0gdHhxLT5heHFfcW51bTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOwogfQogCi12b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorLyoqKioqKioqKioqLworLyogVFgsIERNQSAqLworLyoqKioqKioqKioqLworCisvKgorICogSW5zZXJ0IGEgY2hhaW4gb2YgYXRoX2J1ZiAoZGVzY3JpcHRvcnMpIG9uIGEgdHhxIGFuZAorICogYXNzdW1lIHRoZSBkZXNjcmlwdG9ycyBhcmUgYWxyZWFkeSBjaGFpbmVkIHRvZ2V0aGVyIGJ5IGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwkvKgorCSAqIEluc2VydCB0aGUgZnJhbWUgb24gdGhlIG91dGJvdW5kIGxpc3QgYW5kCisJICogcGFzcyBpdCBvbiB0byB0aGUgaGFyZHdhcmUuCisJICovCisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJcmV0dXJuOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChoZWFkLCAmdHhxLT5heHFfcSk7CisJdHhxLT5heHFfZGVwdGgrKzsKKwl0eHEtPmF4cV90b3RhbHF1ZXVlZCsrOworCXR4cS0+YXhxX2xpbmtidWYgPSBsaXN0X2VudHJ5KHR4cS0+YXhxX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCisJRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwKKwkJInFudW06ICVkLCB0eHEgZGVwdGg6ICVkXG4iLCB0eHEtPmF4cV9xbnVtLCB0eHEtPmF4cV9kZXB0aCk7CisKKwlpZiAodHhxLT5heHFfbGluayA9PSBOVUxMKSB7CisJCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtLCBiZi0+YmZfZGFkZHIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCisJCQkiVFhEUFsldV0gPSAlbGx4ICglcClcbiIsCisJCQl0eHEtPmF4cV9xbnVtLCBpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7CisJfSBlbHNlIHsKKwkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImxpbmtbJXVdICglcCk9JWxseCAoJXApXG4iLAorCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKKwkJCWl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKKwl9CisJdHhxLT5heHFfbGluayA9ICYoYmYtPmJmX2xhc3RiZi0+YmZfZGVzYy0+ZHNfbGluayk7CisJYXRoOWtfaHdfdHhzdGFydChhaCwgdHhxLT5heHFfcW51bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX3R4X2dldF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idWYgKmJmID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmc2MtPnR4LnR4YnVmKSkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWxpc3RfZGVsKCZiZi0+bGlzdCk7CisKKwlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwlyZXR1cm4gYmY7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2FtcGR1KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQsCisJCQkgICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfYnVmICpiZjsKKworCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0FNUERVOworCisJLyoKKwkgKiBEbyBub3QgcXVldWUgdG8gaC93IHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorCSAqIC0gdGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzIGluIHNvZnR3YXJlIHF1ZXVlCisJICogLSB0aGUgVElEIGlzIGN1cnJlbnRseSBwYXVzZWQgZm9yIEFEREJBL0JBUiByZXF1ZXN0CisJICogLSBzZXFubyBpcyBub3Qgd2l0aGluIGJsb2NrLWFjayB3aW5kb3cKKwkgKiAtIGgvdyBxdWV1ZSBkZXB0aCBleGNlZWRzIGxvdyB3YXRlciBtYXJrCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSB8fCB0aWQtPnBhdXNlZCB8fAorCSAgICAhQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSB8fAorCSAgICB0eGN0bC0+dHhxLT5heHFfZGVwdGggPj0gQVRIX0FHR1JfTUlOX1FERVBUSCkgeworCQkvKgorCQkgKiBBZGQgdGhpcyBmcmFtZSB0byBzb2Z0d2FyZSBxdWV1ZSBmb3Igc2NoZWR1bGluZyBsYXRlcgorCQkgKiBmb3IgYWdncmVnYXRpb24uCisJCSAqLworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZ0aWQtPmJ1Zl9xKTsKKwkJYXRoX3R4X3F1ZXVlX3RpZCh0eGN0bC0+dHhxLCB0aWQpOworCQlyZXR1cm47CisJfQorCisJLyogQWRkIHN1Yi1mcmFtZSB0byBCQVcgKi8KKwlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKKworCS8qIFF1ZXVlIHRvIGgvdyB3aXRob3V0IGFnZ3JlZ2F0aW9uICovCisJYmYtPmJmX25mcmFtZXMgPSAxOworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgYmZfaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQU1QRFU7CisKKwkvKiB1cGRhdGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyIGZvciBzdWJzZXF1ZW50IEFEREJBIHJlcXVlc3QgKi8KKwlJTkNSKHRpZC0+c2VxX3N0YXJ0LCBJRUVFODAyMTFfU0VRX01BWCk7CisKKwliZi0+YmZfbmZyYW1lcyA9IDE7CisJYmYtPmJmX2xhc3RiZiA9IGJmOworCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKKwlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsIGJmX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCisJYmYtPmJmX2xhc3RiZiA9IGJmOworCWJmLT5iZl9uZnJhbWVzID0gMTsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKK30KKworc3RhdGljIGVudW0gYXRoOWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwllbnVtIGF0aDlrX3BrdF90eXBlIGh0eXBlOworCV9fbGUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9CRUFDT047CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1A7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0FUSU07CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFNQT0xMOworCWVsc2UKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9OT1JNQUw7CisKKwlyZXR1cm4gaHR5cGU7Cit9CisKK3N0YXRpYyBib29sIGlzX3BhZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJX19sZTE2IGZjOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgeworCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSB8fAorCQkgICAgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KKwkJICAgIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKKwkJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1dFUCkKKwkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9XRVA7CisJCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfVEtJUDsKKwkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfQ0NNUCkKKwkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9BRVM7CisJfQorCisJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0NMRUFSOworfQorCitzdGF0aWMgdm9pZCBhc3NpZ25fYWdncl90aWRfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCV9fbGUxNiBmYzsKKwl1OCAqcWM7CisKKwlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQorCQlyZXR1cm47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwkJYmYtPmJmX3RpZG5vID0gcWNbMF0gJiAweGY7CisJfQorCisJLyoKKwkgKiBGb3IgSFQgY2FwYWJsZSBzdGF0aW9ucywgd2Ugc2F2ZSB0aWRubyBmb3IgbGF0ZXIgdXNlLgorCSAqIFdlIGFsc28gb3ZlcnJpZGUgc2Vxbm8gc2V0IGJ5IHVwcGVyIGxheWVyIHdpdGggdGhlIG9uZQorCSAqIGluIHR4IGFnZ3JlZ2F0aW9uIHN0YXRlLgorCSAqCisJICogSWYgZnJhZ21lbnRhdGlvbiBpcyBvbiwgdGhlIHNlcXVlbmNlIG51bWJlciBpcworCSAqIG5vdCBvdmVycmlkZGVuLCBzaW5jZSBpdCBoYXMgYmVlbgorCSAqIGluY3JlbWVudGVkIGJ5IHRoZSBmcmFnbWVudGF0aW9uIHJvdXRpbmUuCisJICoKKwkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGV4Y2VlZHMKKwkgKiBJRUVFODAyMTEgbWF4LgorCSAqLworCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKwloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYodGlkLT5zZXFfbmV4dCA8PAorCQkJSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOworCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7CisJSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWludCBmbGFncyA9IDA7CisKKwlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLworCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKKwkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX05PQUNLOworCisJcmV0dXJuIGZsYWdzOworfQorCisvKgorICogcml4IC0gcmF0ZSBpbmRleAorICogcGt0bGVuIC0gdG90YWwgYnl0ZXMgKGRlbGltcyArIGRhdGEgKyBmY3MgKyBwYWRzICsgcGFkIGRlbGltcykKKyAqIHdpZHRoICAtIDAgZm9yIDIwIE1IeiwgMSBmb3IgNDAgTUh6CisgKiBoYWxmX2dpIC0gdG8gdXNlIDR1cyB2L3MgMy42IHVzIGZvciBzeW1ib2wgdGltZQorICovCitzdGF0aWMgdTMyIGF0aF9wa3RfZHVyYXRpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IHJpeCwgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgIGludCB3aWR0aCwgaW50IGhhbGZfZ2ksIGJvb2wgc2hvcnRQcmVhbWJsZSkKK3sKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CisJdTMyIG5iaXRzLCBuc3ltYml0cywgZHVyYXRpb24sIG5zeW1ib2xzOworCXU4IHJjOworCWludCBzdHJlYW1zLCBwa3RsZW47CisKKwlwa3RsZW4gPSBiZl9pc2FnZ3IoYmYpID8gYmYtPmJmX2FsIDogYmYtPmJmX2ZybWxlbjsKKwlyYyA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5yYXRlY29kZTsKKworCS8qIGZvciBsZWdhY3kgcmF0ZXMsIHVzZSBvbGQgZnVuY3Rpb24gdG8gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKi8KKwlpZiAoIUlTX0hUX1JBVEUocmMpKQorCQlyZXR1cm4gYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsIHBrdGxlbiwKKwkJCQkJICAgICAgcml4LCBzaG9ydFByZWFtYmxlKTsKKworCS8qIGZpbmQgbnVtYmVyIG9mIHN5bWJvbHM6IFBMQ1AgKyBkYXRhICovCisJbmJpdHMgPSAocGt0bGVuIDw8IDMpICsgT0ZETV9QTENQX0JJVFM7CisJbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07CisJbnN5bWJvbHMgPSAobmJpdHMgKyBuc3ltYml0cyAtIDEpIC8gbnN5bWJpdHM7CisKKwlpZiAoIWhhbGZfZ2kpCisJCWR1cmF0aW9uID0gU1lNQk9MX1RJTUUobnN5bWJvbHMpOworCWVsc2UKKwkJZHVyYXRpb24gPSBTWU1CT0xfVElNRV9IQUxGR0kobnN5bWJvbHMpOworCisJLyogYWRkdXAgZHVyYXRpb24gZm9yIGxlZ2FjeS9odCB0cmFpbmluZyBhbmQgc2lnbmFsIGZpZWxkcyAqLworCXN0cmVhbXMgPSBIVF9SQ18yX1NUUkVBTVMocmMpOworCWR1cmF0aW9uICs9IExfU1RGICsgTF9MVEYgKyBMX1NJRyArIEhUX1NJRyArIEhUX1NURiArIEhUX0xURihzdHJlYW1zKTsKKworCXJldHVybiBkdXJhdGlvbjsKK30KKworc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CisJc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbNF07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBpLCBmbGFncyA9IDA7CisJdTggcml4ID0gMCwgY3RzcmF0ZSA9IDA7CisJYm9vbCBpc19wc3BvbGw7CisKKwltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKKworCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OworCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpc19wc3BvbGwgPSBpZWVlODAyMTFfaXNfcHNwb2xsKGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwkvKgorCSAqIFdlIGNoZWNrIGlmIFNob3J0IFByZWFtYmxlIGlzIG5lZWRlZCBmb3IgdGhlIENUUyByYXRlIGJ5CisJICogY2hlY2tpbmcgdGhlIEJTUydzIGdsb2JhbCBmbGFnLgorCSAqIEJ1dCBmb3IgdGhlIHJhdGUgc2VyaWVzLCBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFIGlzIHVzZWQuCisJICovCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1BSRUFNQkxFX1NIT1JUKQorCQljdHNyYXRlID0gcnQtPmluZm9bdHhfaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XS5yYXRlY29kZSB8CisJCQlydC0+aW5mb1t0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHhdLnNob3J0X3ByZWFtYmxlOworCWVsc2UKKwkJY3RzcmF0ZSA9IHJ0LT5pbmZvW3R4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeF0ucmF0ZWNvZGU7CisKKwkvKgorCSAqIEFUSDlLX1RYREVTQ19SVFNFTkEgYW5kIEFUSDlLX1RYREVTQ19DVFNFTkEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKwkgKiBDaGVjayB0aGUgZmlyc3QgcmF0ZSBpbiB0aGUgc2VyaWVzIHRvIGRlY2lkZSB3aGV0aGVyIFJUUy9DVFMKKwkgKiBvciBDVFMtdG8tc2VsZiBoYXMgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQorCQlmbGFncyA9IEFUSDlLX1RYREVTQ19DVFNFTkE7CisJZWxzZSBpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKKworCS8qIEZJWE1FOiBIYW5kbGUgYWdncmVnYXRpb24gcHJvdGVjdGlvbiAqLworCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYKKwkgICAgKCFiZl9pc2FnZ3IoYmYpIHx8IChiZl9pc2FnZ3IoYmYpICYmIGJmLT5iZl9hbCA8IDgxOTIpKSkgeworCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7CisJfQorCisJLyogRm9yIEFSNTQxNiAtIFJUUyBjYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBmcmFtZSBsYXJnZXIgdGhhbiA4SyAqLworCWlmIChiZl9pc2FnZ3IoYmYpICYmIChiZi0+YmZfYWwgPiBzYy0+c2NfYWgtPmNhcHMucnRzX2FnZ3JfbGltaXQpKQorCQlmbGFncyAmPSB+KEFUSDlLX1RYREVTQ19SVFNFTkEpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoIXJhdGVzW2ldLmNvdW50IHx8IChyYXRlc1tpXS5pZHggPCAwKSkKKwkJCWNvbnRpbnVlOworCisJCXJpeCA9IHJhdGVzW2ldLmlkeDsKKwkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7CisJCXNlcmllc1tpXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CisKKwkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKKwkJCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZSB8CisJCQkJcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJZWxzZQorCQkJc2VyaWVzW2ldLlJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTOworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQorCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTXzIwNDA7CisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19IQUxGR0k7CisKKwkJc2VyaWVzW2ldLlBrdER1cmF0aW9uID0gYXRoX3BrdF9kdXJhdGlvbihzYywgcml4LCBiZiwKKwkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAhPSAwLAorCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSksCisJCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkpOworCX0KKworCS8qIHNldCBkdXJfdXBkYXRlX2VuIGZvciBsLXNpZyBjb21wdXRhdGlvbiBleGNlcHQgZm9yIFBTLVBvbGwgZnJhbWVzICovCisJYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLAorCQkJCSAgICAgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYywKKwkJCQkgICAgICFpc19wc3BvbGwsIGN0c3JhdGUsCisJCQkJICAgICAwLCBzZXJpZXMsIDQsIGZsYWdzKTsKKworCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCisJCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIDgxOTIpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKKwlpbnQgaGRybGVuOworCV9fbGUxNiBmYzsKKworCXR4X2luZm9fcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCp0eF9pbmZvX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXR4X2luZm9fcHJpdikpCisJCXJldHVybiAtRU5PTUVNOworCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSB0eF9pbmZvX3ByaXY7CisJdHhfaW5mb19wcml2LT5hcGh5ID0gYXBoeTsKKwl0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPSB0eGN0bC0+ZnJhbWVfdHlwZTsKKwloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJQVRIX1RYQlVGX1JFU0VUKGJmKTsKKworCWJmLT5iZl9mcm1sZW4gPSBza2ItPmxlbiArIEZDU19MRU4gLSAoaGRybGVuICYgMyk7CisKKwlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSAmJiAhaXNfcGFlKHNrYikpCisJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9IVDsKKworCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOworCisJYmYtPmJmX2tleXR5cGUgPSBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKKwlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKKwkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKwkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CisJfSBlbHNlIHsKKwkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOworCX0KKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQorCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7CisKKwliZi0+YmZfbXBkdSA9IHNrYjsKKworCWJmLT5iZl9kbWFjb250ZXh0ID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0KSkpIHsKKwkJYmYtPmJmX21wZHUgPSBOVUxMOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFRYXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiB0eCBwb3dlciAqLworc3RhdGljIHZvaWQgYXRoX3R4X3N0YXJ0X2RtYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSAgSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCXN0cnVjdCBhdGhfZGVzYyAqZHM7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJaW50IGZybV90eXBlOworCV9fbGUxNiBmYzsKKworCWZybV90eXBlID0gZ2V0X2h3X3BhY2tldF90eXBlKHNrYik7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKworCWRzID0gYmYtPmJmX2Rlc2M7CisJZHMtPmRzX2xpbmsgPSAwOworCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOworCisJYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhhaCwgZHMsIGJmLT5iZl9mcm1sZW4sIGZybV90eXBlLCBNQVhfUkFURV9QT1dFUiwKKwkJCSAgICAgICBiZi0+YmZfa2V5aXgsIGJmLT5iZl9rZXl0eXBlLCBiZi0+YmZfZmxhZ3MpOworCisJYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCisJCQkgICAgc2tiLT5sZW4sCS8qIHNlZ21lbnQgbGVuZ3RoICovCisJCQkgICAgdHJ1ZSwJLyogZmlyc3Qgc2VnbWVudCAqLworCQkJICAgIHRydWUsCS8qIGxhc3Qgc2VnbWVudCAqLworCQkJICAgIGRzKTsJLyogZmlyc3QgZGVzY3JpcHRvciAqLworCisJc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7CisKKwlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKKwkgICAgdHhfaW5mby0+Y29udHJvbC5zdGEpIHsKKwkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7CisKKwkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKKwkJCWdvdG8gdHhfZG9uZTsKKwkJfQorCisJCWlmIChhdGhfYWdncl9xdWVyeShzYywgYW4sIGJmLT5iZl90aWRubykpIHsKKwkJCS8qCisJCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQorCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgorCQkJICovCisJCQlhdGhfdHhfc2VuZF9hbXBkdShzYywgdGlkLCAmYmZfaGVhZCwgdHhjdGwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFNlbmQgdGhpcyBmcmFtZSBhcyByZWd1bGFyIHdoZW4gQUREQkEKKwkJCSAqIGV4Y2hhbmdlIGlzIG5laXRoZXIgY29tcGxldGUgbm9yIHBlbmRpbmcuCisJCQkgKi8KKwkJCWF0aF90eF9zZW5kX2h0X25vcm1hbChzYywgdHhjdGwtPnR4cSwKKwkJCQkJICAgICAgdGlkLCAmYmZfaGVhZCk7CisJCX0KKwl9IGVsc2UgeworCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKKwl9CisKK3R4X2RvbmU6CisJc3Bpbl91bmxvY2tfYmgoJnR4Y3RsLT50eHEtPmF4cV9sb2NrKTsKK30KKworLyogVXBvbiBmYWlsdXJlIGNhbGxlciBzaG91bGQgZnJlZSBza2IgKi8KK2ludCBhdGhfdHhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlpbnQgcjsKKworCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOworCWlmICghYmYpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggYnVmZmVycyBhcmUgZnVsbFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihodywgYmYsIHNrYiwgdHhjdGwpOworCWlmICh1bmxpa2VseShyKSkgeworCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKKworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOworCisJCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCisJCSAqIGd1YXJhbnRlZSB0aGlzIHdpbGwgaGFwcGVuIGJ5IGtub3dpbmcgYmVmb3JlaGFuZCB0aGF0CisJCSAqIHdlIHdpbGwgYXQgbGVhc3QgaGF2ZSB0byBydW4gVFggY29tcGxldGlvbm9uIG9uZSBidWZmZXIKKwkJICogb24gdGhlIHF1ZXVlICovCisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWlmIChzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA+IDEpIHsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKKwkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisJCQl0eHEtPnN0b3BwZWQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKworCQlyZXR1cm4gcjsKKwl9CisKKwlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IGhkcmxlbiwgcGFkc2l6ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOwpAQCAtMjU0Miw3ICsxNzM1LDcgQEAKIAogCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgInRyYW5zbWl0dGluZyBDQUJRIHBhY2tldCwgc2tiOiAlcFxuIiwgc2tiKTsKIAotCWlmIChhdGhfdHhfc3RhcnQoc2MsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiQ0FCUSBUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjU1MSwzICsxNzQ0LDQzNSBAQAogZXhpdDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQorCisvKioqKioqKioqKioqKioqKiovCisvKiBUWCBDb21wbGV0aW9uICovCisvKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBpbnQgdHhfZmxhZ3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWludCBoZHJsZW4sIHBhZHNpemU7CisJaW50IGZyYW1lX3R5cGUgPSBBVEg5S19OT1RfSU5URVJOQUw7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBjb21wbGV0ZTogc2tiOiAlcFxuIiwgc2tiKTsKKworCWlmICh0eF9pbmZvX3ByaXYpIHsKKwkJaHcgPSB0eF9pbmZvX3ByaXYtPmFwaHktPmh3OworCQlmcmFtZV90eXBlID0gdHhfaW5mb19wcml2LT5mcmFtZV90eXBlOworCX0KKworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLIHx8CisJICAgIHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQpIHsKKwkJa2ZyZWUodHhfaW5mb19wcml2KTsKKwkJdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IE5VTEw7CisJfQorCisJaWYgKHR4X2ZsYWdzICYgQVRIX1RYX0JBUikKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFVfTk9fQkFDSzsKKworCWlmICghKHR4X2ZsYWdzICYgKEFUSF9UWF9FUlJPUiB8IEFUSF9UWF9YUkVUUlkpKSkgeworCQkvKiBGcmFtZSB3YXMgQUNLZWQgKi8KKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCX0KKworCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJcGFkc2l6ZSA9IGhkcmxlbiAmIDM7CisJaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7CisJCS8qCisJCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bworCQkgKiBtYWM4MDIxMS4KKwkJICovCisJCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHBhZHNpemUpOworCX0KKworCWlmIChmcmFtZV90eXBlID09IEFUSDlLX05PVF9JTlRFUk5BTCkKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwllbHNlCisJCWF0aDlrX3R4X3N0YXR1cyhodywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCisJCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0eF9mbGFncyA9IDA7CisKKworCWlmIChzZW5kYmFyKQorCQl0eF9mbGFncyA9IEFUSF9UWF9CQVI7CisKKwlpZiAoIXR4b2spIHsKKwkJdHhfZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOworCisJCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKKwkJCXR4X2ZsYWdzIHw9IEFUSF9UWF9YUkVUUlk7CisJfQorCisJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWF0aF90eF9jb21wbGV0ZShzYywgc2tiLCB0eF9mbGFncyk7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOworCXUxNiBzZXFfc3QgPSAwOworCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07CisJaW50IGJhX2luZGV4OworCWludCBuYmFkID0gMDsKKwlpbnQgaXNhZ2dyID0gMDsKKworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCisJCXJldHVybiAwOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwlpZiAoaXNhZ2dyKSB7CisJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJfQorCisJd2hpbGUgKGJmKSB7CisJCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKKwkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKKwkJCW5iYWQrKzsKKworCQliZiA9IGJmLT5iZl9uZXh0OworCX0KKworCXJldHVybiBuYmFkOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcmNfc3RhdHVzKHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCSAgICAgaW50IG5iYWQsIGludCB0eG9rLCBib29sIHVwZGF0ZV9yYykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB0eF9pbmZvX3ByaXYtPmFwaHktPmh3OworCXU4IGksIHR4X3JhdGVpbmRleDsKKworCWlmICh0eG9rKQorCQl0eF9pbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IGRzLT5kc190eHN0YXQudHNfcnNzaTsKKworCXR4X3JhdGVpbmRleCA9IGRzLT5kc190eHN0YXQudHNfcmF0ZWluZGV4OworCVdBUk5fT04odHhfcmF0ZWluZGV4ID49IGh3LT5tYXhfcmF0ZXMpOworCisJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSB1cGRhdGVfcmM7CisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7CisKKwlpZiAoKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkgPT0gMCAmJgorCSAgICAoYmYtPmJmX2ZsYWdzICYgQVRIOUtfVFhERVNDX05PQUNLKSA9PSAwICYmIHVwZGF0ZV9yYykgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJbWVtY3B5KCZ0eF9pbmZvX3ByaXYtPnR4LCAmZHMtPmRzX3R4c3RhdCwKKwkJCSAgICAgICBzaXplb2YodHhfaW5mb19wcml2LT50eCkpOworCQkJdHhfaW5mb19wcml2LT5uX2ZyYW1lcyA9IGJmLT5iZl9uZnJhbWVzOworCQkJdHhfaW5mb19wcml2LT5uX2JhZF9mcmFtZXMgPSBuYmFkOworCQl9CisJfQorCisJZm9yIChpID0gdHhfcmF0ZWluZGV4ICsgMTsgaSA8IGh3LT5tYXhfcmF0ZXM7IGkrKykKKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldLmNvdW50ID0gMDsKKworCXR4X2luZm8tPnN0YXR1cy5yYXRlc1t0eF9yYXRlaW5kZXhdLmNvdW50ID0gYmYtPmJmX3JldHJpZXMgKyAxOworfQorCitzdGF0aWMgdm9pZCBhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKK3sKKwlpbnQgcW51bTsKKworCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJaWYgKHR4cS0+c3RvcHBlZCAmJgorCSAgICBzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA8PSAoQVRIX1RYQlVGIC0gMjApKSB7CisJCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfcW51bSwgc2MpOworCQlpZiAocW51bSAhPSAtMSkgeworCQkJaWVlZTgwMjExX3dha2VfcXVldWUoc2MtPmh3LCBxbnVtKTsKKwkJCXR4cS0+c3RvcHBlZCA9IDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcHJvY2Vzc3Eoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmLCAqYmZfaGVsZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCXN0cnVjdCBhdGhfZGVzYyAqZHM7CisJaW50IHR4b2s7CisJaW50IHN0YXR1czsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsICJ0eCBxdWV1ZSAlZCAoJXgpLCBsaW5rICVwXG4iLAorCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pLAorCQl0eHEtPmF4cV9saW5rKTsKKworCWZvciAoOzspIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX3EpKSB7CisJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKKwkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJYnJlYWs7CisJCX0KKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGEgQkggZ2V0cyBzY2hlZHVsZWQKKwkJICogYWZ0ZXIgc3cgd3JpdGVzIFR4RSBhbmQgYmVmb3JlIGh3IHJlLWxvYWQgdGhlIGxhc3QKKwkJICogZGVzY3JpcHRvciB0byBnZXQgdGhlIG5ld2x5IGNoYWluZWQgb25lLgorCQkgKiBTb2Z0d2FyZSBtdXN0IGtlZXAgdGhlIGxhc3QgRE9ORSBkZXNjcmlwdG9yIGFzIGEKKwkJICogaG9sZGluZyBkZXNjcmlwdG9yIC0gc29mdHdhcmUgZG9lcyBzbyBieSBtYXJraW5nCisJCSAqIGl0IHdpdGggdGhlIFNUQUxFIGZsYWcuCisJCSAqLworCQliZl9oZWxkID0gTlVMTDsKKwkJaWYgKGJmLT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7CisJCQliZl9oZWxkID0gYmY7CisJCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKKwkJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKKwkJCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKKwkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBob2xkaW5nIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3QKKwkJCQkgKiBkZXNjcmlwdG9yIGluIHF1ZXVlLiBJdCdzIHNhZmUgdG8gcmVtb3ZlCisJCQkJICogdGhlIGxhc3QgaG9sZGluZyBkZXNjcmlwdG9yIGluIEJIIGNvbnRleHQuCisJCQkJICovCisJCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCisJCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCQl9CisJCX0KKworCQlsYXN0YmYgPSBiZi0+YmZfbGFzdGJmOworCQlkcyA9IGxhc3RiZi0+YmZfZGVzYzsKKworCQlzdGF0dXMgPSBhdGg5a19od190eHByb2NkZXNjKGFoLCBkcyk7CisJCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmYtPmJmX2Rlc2MgPT0gdHhxLT5heHFfbGFzdGRzV2l0aENUUykKKwkJCXR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMgPSBOVUxMOworCQlpZiAoZHMgPT0gdHhxLT5heHFfZ2F0aW5nZHMpCisJCQl0eHEtPmF4cV9nYXRpbmdkcyA9IE5VTEw7CisKKwkJLyoKKwkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGUgc2FtZSB0cmFuc21pdCB1bml0IGZyb20gdHhxLAorCQkgKiBob3dldmVyIGxlYXZlIHRoZSBsYXN0IGRlc2NyaXB0b3IgYmFjayBhcyB0aGUgaG9sZGluZworCQkgKiBkZXNjcmlwdG9yIGZvciBody4KKwkJICovCisJCWxhc3RiZi0+YmZfc3RhdHVzIHw9IEFUSF9CVUZTVEFUVVNfU1RBTEU7CisJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZsYXN0YmYtPmxpc3QpKQorCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCisJCQkJJnR4cS0+YXhxX3EsIGxhc3RiZi0+bGlzdC5wcmV2KTsKKworCQl0eHEtPmF4cV9kZXB0aC0tOworCQlpZiAoYmZfaXNhZ2dyKGJmKSkKKwkJCXR4cS0+YXhxX2FnZ3JfZGVwdGgtLTsKKworCQl0eG9rID0gKGRzLT5kc190eHN0YXQudHNfc3RhdHVzID09IDApOworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJaWYgKGJmX2hlbGQpIHsKKwkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJCX0KKworCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7CisJCQkvKgorCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KKwkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCisJCQkgKi8KKwkJCWJmLT5iZl9yZXRyaWVzID0gZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnk7CisJCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCisJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKKwkJCWF0aF90eF9yY19zdGF0dXMoYmYsIGRzLCAwLCB0eG9rLCB0cnVlKTsKKwkJfQorCisJCWlmIChiZl9pc2FtcGR1KGJmKSkKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgdHhvayk7CisJCWVsc2UKKwkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgdHhvaywgMCk7CisKKwkJYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc2MsIHR4cSk7CisKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikKKwkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9Cit9CisKKwordm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwl1MzIgcWN1bWFzayA9ICgoMSA8PCBBVEg5S19OVU1fVFhfUVVFVUVTKSAtIDEpOworCisJYXRoOWtfaHdfZ2V0dHhpbnRydHhxcyhzYy0+c2NfYWgsICZxY3VtYXNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpICYmIChxY3VtYXNrICYgKDEgPDwgaSkpKQorCQkJYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKiovCisvKiBJbml0LCBDbGVhbnVwICovCisvKioqKioqKioqKioqKioqKiovCisKK2ludCBhdGhfdHhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKQoreworCWludCBlcnJvciA9IDA7CisKKwlkbyB7CisJCXNwaW5fbG9ja19pbml0KCZzYy0+dHgudHhidWZsb2NrKTsKKworCQllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmLAorCQkJInR4IiwgbmJ1ZnMsIDEpOworCQlpZiAoZXJyb3IgIT0gMCkgeworCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2NyaXB0b3JzOiAlZFxuIiwKKwkJCQllcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYsCisJCQkJCSAgImJlYWNvbiIsIEFUSF9CQ0JVRiwgMSk7CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwKKwkJCQllcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJfSB3aGlsZSAoMCk7CisKKwlpZiAoZXJyb3IgIT0gMCkKKwkJYXRoX3R4X2NsZWFudXAoc2MpOworCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgYXRoX3R4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaWYgKHNjLT5iZWFjb24uYmRtYS5kZF9kZXNjX2xlbiAhPSAwKQorCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmKTsKKworCWlmIChzYy0+dHgudHhkbWEuZGRfZGVzY19sZW4gIT0gMCkKKwkJYXRoX2Rlc2NkbWFfY2xlYW51cChzYywgJnNjLT50eC50eGRtYSwgJnNjLT50eC50eGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGhfdHhfbm9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKKwlpbnQgdGlkbm8sIGFjbm87CisKKwlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOworCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsKKwkgICAgIHRpZG5vKyssIHRpZCsrKSB7CisJCXRpZC0+YW4gICAgICAgID0gYW47CisJCXRpZC0+dGlkbm8gICAgID0gdGlkbm87CisJCXRpZC0+c2VxX3N0YXJ0ID0gdGlkLT5zZXFfbmV4dCA9IDA7CisJCXRpZC0+YmF3X3NpemUgID0gV01FX01BWF9CQTsKKwkJdGlkLT5iYXdfaGVhZCAgPSB0aWQtPmJhd190YWlsID0gMDsKKwkJdGlkLT5zY2hlZCAgICAgPSBmYWxzZTsKKwkJdGlkLT5wYXVzZWQgICAgPSBmYWxzZTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOworCQlJTklUX0xJU1RfSEVBRCgmdGlkLT5idWZfcSk7CisJCWFjbm8gPSBUSURfVE9fV01FX0FDKHRpZG5vKTsKKwkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7CisJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJfQorCisJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOworCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgeworCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFjLT50aWRfcSk7CisKKwkJc3dpdGNoIChhY25vKSB7CisJCWNhc2UgV01FX0FDX0JFOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKKwkJCWJyZWFrOworCQljYXNlIFdNRV9BQ19CSzoKKwkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAorCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CSyk7CisJCQlicmVhazsKKwkJY2FzZSBXTUVfQUNfVkk6CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVkkpOworCQkJYnJlYWs7CisJCWNhc2UgV01FX0FDX1ZPOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX1ZPKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIGF0aF90eF9ub2RlX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJaW50IGk7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjLCAqYWNfdG1wOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLCAqdGlkX3RtcDsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKKwkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCisJCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWMsCisJCQkJCWFjX3RtcCwgJnR4cS0+YXhxX2FjcSwgbGlzdCkgeworCQkJCXRpZCA9IGxpc3RfZmlyc3RfZW50cnkoJmFjLT50aWRfcSwKKwkJCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCwgbGlzdCk7CisJCQkJaWYgKHRpZCAmJiB0aWQtPmFuICE9IGFuKQorCQkJCQljb250aW51ZTsKKwkJCQlsaXN0X2RlbCgmYWMtPmxpc3QpOworCQkJCWFjLT5zY2hlZCA9IGZhbHNlOworCisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpZCwKKwkJCQkJCXRpZF90bXAsICZhYy0+dGlkX3EsIGxpc3QpIHsKKwkJCQkJbGlzdF9kZWwoJnRpZC0+bGlzdCk7CisJCQkJCXRpZC0+c2NoZWQgPSBmYWxzZTsKKwkJCQkJYXRoX3RpZF9kcmFpbihzYywgdHhxLCB0aWQpOworCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQkJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOworCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7CisJCQkJfQorCQkJfQorCisJCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCA0MjIzNjcyLi44NTdkODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTIsOCArMiw4IEBACiAKICAgICAgRHJpdmVyIGZvciBBdG1lbCBhdDc2YzUwMiBhdDc2YzUwNCBhbmQgYXQ3NmM1MDYgd2lyZWxlc3MgY2FyZHMuCiAKLSAgICAgICAgQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KLSAgICAgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBTaW1vbiBLZWxsZXkuCisJQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KKwlDb3B5cmlnaHQgMjAwMy0yMDA0IFNpbW9uIEtlbGxleS4KIAogICAgIFRoaXMgY29kZSB3YXMgZGV2ZWxvcGVkIGZyb20gdmVyc2lvbiAyLjEuMSBvZiB0aGUgQXRtZWwgZHJpdmVycywKICAgICByZWxlYXNlZCBieSBBdG1lbCBjb3JwLiB1bmRlciB0aGUgR1BMIGluIERlY2VtYmVyIDIwMDIuIEl0IGFsc28KQEAgLTg5LDE1ICs4OSwxNSBAQAogCWNvbnN0IGNoYXIgKmZ3X2ZpbGU7CiAJY29uc3QgY2hhciAqZndfZmlsZV9leHQ7CiB9IGZ3X3RhYmxlW10gPSB7Ci0JeyBBVE1FTF9GV19UWVBFXzUwMiwgICAgICAiYXRtZWxfYXQ3NmM1MDIiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMkQsICAgICAiYXRtZWxfYXQ3NmM1MDJkIiwgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMkUsICAgICAiYXRtZWxfYXQ3NmM1MDJlIiwgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiYXRtZWxfYXQ3NmM1MDJfM2NvbSIsICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNCwgICAgICAiYXRtZWxfYXQ3NmM1MDQiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNF8yOTU4LCAiYXRtZWxfYXQ3NmM1MDRfMjk1OCIsICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwiYXRtZWxfYXQ3NmM1MDRhXzI5NTgiLCJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNiwgICAgICAiYXRtZWxfYXQ3NmM1MDYiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFX05PTkUsICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICBOVUxMIH0KKwl7IEFUTUVMX0ZXX1RZUEVfNTAyLAkJImF0bWVsX2F0NzZjNTAyIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTAyRCwJCSJhdG1lbF9hdDc2YzUwMmQiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDJFLAkJImF0bWVsX2F0NzZjNTAyZSIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLAkiYXRtZWxfYXQ3NmM1MDJfM2NvbSIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNCwJCSJhdG1lbF9hdDc2YzUwNCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNF8yOTU4LAkiYXRtZWxfYXQ3NmM1MDRfMjk1OCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwJImF0bWVsX2F0NzZjNTA0YV8yOTU4IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA2LAkJImF0bWVsX2F0NzZjNTA2IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfTk9ORSwJCU5VTEwsCQkJTlVMTCB9CiB9OwogCiAjZGVmaW5lIE1BWF9TU0lEX0xFTkdUSCAzMgpAQCAtMTA2LDYwICsxMDYsNjAgQEAKICNkZWZpbmUgTUFYX0JTU19FTlRSSUVTCTY0CiAKIC8qIHJlZ2lzdGVycyAqLwotI2RlZmluZSBHQ1IgIDB4MDAgICAgLy8gICAgICAoU0lSMCkgIEdlbmVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotI2RlZmluZSBCU1IgIDB4MDIgICAgLy8gICAgICAoU0lSMSkgIEJhbmsgU3dpdGNoaW5nIFNlbGVjdCBSZWdpc3RlcgorI2RlZmluZSBHQ1IgIDB4MDAgICAgLyogKFNJUjApICBHZW5lcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQlNSICAweDAyICAgIC8qIChTSVIxKSAgQmFuayBTd2l0Y2hpbmcgU2VsZWN0IFJlZ2lzdGVyICovCiAjZGVmaW5lIEFSICAgMHgwNAogI2RlZmluZSBEUiAgIDB4MDgKLSNkZWZpbmUgTVIxICAweDEyICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDEKLSNkZWZpbmUgTVIyICAweDE0ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDIKLSNkZWZpbmUgTVIzICAweDE2ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDMKLSNkZWZpbmUgTVI0ICAweDE4ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDQKKyNkZWZpbmUgTVIxICAweDEyICAgIC8qIE1pcnJvciBSZWdpc3RlciAxICovCisjZGVmaW5lIE1SMiAgMHgxNCAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBNUjMgIDB4MTYgICAgLyogTWlycm9yIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgTVI0ICAweDE4ICAgIC8qIE1pcnJvciBSZWdpc3RlciA0ICovCiAKICNkZWZpbmUgR1BSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjCiAjZGVmaW5lIEdQUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZQogI2RlZmluZSBHUFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKLS8vCi0vLyBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCi0vLwotI2RlZmluZSBHQ1JfUkVNQVAgICAgIDB4MDQwMCAgICAgICAgICAvLyBSZW1hcCBpbnRlcm5hbCBTUkFNIHRvIDAKLSNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLy8gQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KQotI2RlZmluZSBHQ1JfQ09SRVMgICAgIDB4MDA2MCAgICAgICAgICAvLyBDb3JlIFJlc2V0IChBUk0gYW5kIFBBSSBhcmUgcmVzZXQpCi0jZGVmaW5lIEdDUl9FTklOVCAgICAgMHgwMDAyICAgICAgICAgIC8vIEVuYWJsZSBJbnRlcnJ1cHRzCi0jZGVmaW5lIEdDUl9BQ0tJTlQgICAgMHgwMDA4ICAgICAgICAgIC8vIEFja25vd2xlZGdlIEludGVycnVwdHMKKy8qCisgKiBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgR0NSX1JFTUFQICAgICAweDA0MDAgICAgICAgICAgLyogUmVtYXAgaW50ZXJuYWwgU1JBTSB0byAwICovCisjZGVmaW5lIEdDUl9TV1JFUyAgICAgMHgwMDgwICAgICAgICAgIC8qIEJJVSByZXNldCAoQVJNIGFuZCBQQUkgYXJlIE5PVCByZXNldCkgKi8KKyNkZWZpbmUgR0NSX0NPUkVTICAgICAweDAwNjAgICAgICAgICAgLyogQ29yZSBSZXNldCAoQVJNIGFuZCBQQUkgYXJlIHJlc2V0KSAqLworI2RlZmluZSBHQ1JfRU5JTlQgICAgIDB4MDAwMiAgICAgICAgICAvKiBFbmFibGUgSW50ZXJydXB0cyAqLworI2RlZmluZSBHQ1JfQUNLSU5UICAgIDB4MDAwOCAgICAgICAgICAvKiBBY2tub3dsZWRnZSBJbnRlcnJ1cHRzICovCiAKLSNkZWZpbmUgQlNTX1NSQU0gICAgICAweDAyMDAgICAgICAgICAgLy8gQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBTUkFNCi0jZGVmaW5lIEJTU19JUkFNICAgICAgMHgwMTAwICAgICAgICAgIC8vIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gSVJBTQotLy8KLS8vIENvbnN0YW50cyBmb3IgdGhlIE1SIHJlZ2lzdGVycy4KLS8vCi0jZGVmaW5lIE1BQ19JTklUX0NPTVBMRVRFICAgICAgIDB4MDAwMSAgICAgICAgLy8gTUFDIGluaXQgaGFzIGJlZW4gY29tcGxldGVkCi0jZGVmaW5lIE1BQ19CT09UX0NPTVBMRVRFICAgICAgIDB4MDAxMCAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCi0jZGVmaW5lIE1BQ19JTklUX09LICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCisjZGVmaW5lIEJTU19TUkFNICAgICAgMHgwMjAwICAgICAgICAgIC8qIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gU1JBTSAqLworI2RlZmluZSBCU1NfSVJBTSAgICAgIDB4MDEwMCAgICAgICAgICAvKiBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IElSQU0gKi8KKy8qCisgKkNvbnN0YW50cyBmb3IgdGhlIE1SIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNQUNfSU5JVF9DT01QTEVURSAgICAgICAweDAwMDEgICAgICAgIC8qIE1BQyBpbml0IGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSBNQUNfQk9PVF9DT01QTEVURSAgICAgICAweDAwMTAgICAgICAgIC8qIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSBNQUNfSU5JVF9PSyAgICAgICAgICAgICAweDAwMDIgICAgICAgIC8qIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZCAqLwogCiAjZGVmaW5lIE1JQl9NQVhfREFUQV9CWVRFUyAgICAyMTIKICNkZWZpbmUgTUlCX0hFQURFUl9TSVpFICAgICAgIDQgICAgLyogZmlyc3QgZm91ciBmaWVsZHMgKi8KIAogc3RydWN0IGdldF9zZXRfbWliIHsKLSAgICAgICAgdTggdHlwZTsKLSAgICAgICAgdTggc2l6ZTsKLSAgICAgICAgdTggaW5kZXg7Ci0gICAgICAgIHU4IHJlc2VydmVkOwotICAgICAgICB1OCBkYXRhW01JQl9NQVhfREFUQV9CWVRFU107CisJdTggdHlwZTsKKwl1OCBzaXplOworCXU4IGluZGV4OworCXU4IHJlc2VydmVkOworCXU4IGRhdGFbTUlCX01BWF9EQVRBX0JZVEVTXTsKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKLSAgICAgICAgdTMyICAgICAgICAgIE5leHQ7Ci0gICAgICAgIHUxNiAgICAgICAgICBNc2R1UG9zOwotICAgICAgICB1MTYgICAgICAgICAgTXNkdVNpemU7CisJdTMyICAgICAgICAgIE5leHQ7CisJdTE2ICAgICAgICAgIE1zZHVQb3M7CisJdTE2ICAgICAgICAgIE1zZHVTaXplOwogCi0gICAgICAgIHU4ICAgICAgICAgICBTdGF0ZTsKLSAgICAgICAgdTggICAgICAgICAgIFN0YXR1czsKLSAgICAgICAgdTggICAgICAgICAgIFJhdGU7Ci0gICAgICAgIHU4ICAgICAgICAgICBSc3NpOwotICAgICAgICB1OCAgICAgICAgICAgTGlua1F1YWxpdHk7Ci0gICAgICAgIHU4ICAgICAgICAgICBQcmVhbWJsZVR5cGU7Ci0gICAgICAgIHUxNiAgICAgICAgICBEdXJhdGlvbjsKLSAgICAgICAgdTMyICAgICAgICAgIFJ4VGltZTsKKwl1OCAgICAgICAgICAgU3RhdGU7CisJdTggICAgICAgICAgIFN0YXR1czsKKwl1OCAgICAgICAgICAgUmF0ZTsKKwl1OCAgICAgICAgICAgUnNzaTsKKwl1OCAgICAgICAgICAgTGlua1F1YWxpdHk7CisJdTggICAgICAgICAgIFByZWFtYmxlVHlwZTsKKwl1MTYgICAgICAgICAgRHVyYXRpb247CisJdTMyICAgICAgICAgIFJ4VGltZTsKIH07CiAKICNkZWZpbmUgUlhfREVTQ19GTEFHX1ZBTElEICAgICAgIDB4ODAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXU4ICAgICAgICBLZXlJbmRleDsKIAl1OCAgICAgICAgQ2hpcGVyVHlwZTsKIAl1OCAgICAgICAgQ2hpcHJlTGVuZ3RoOwotICAgICAgICB1OCAgICAgICAgUmVzZXJ2ZWQxOworCXU4ICAgICAgICBSZXNlcnZlZDE7CiAKIAl1OCAgICAgICAgUmVzZXJ2ZWQ7CiAJdTggICAgICAgIFBhY2tldFR5cGU7CkBAIC0yMTIsOSArMjEyLDkgQEAKICNkZWZpbmUgVFhfREVTQ19QQUNLRVRfVFlQRV9PRkZTRVQgICAxNwogI2RlZmluZSBUWF9ERVNDX0hPU1RfTEVOR1RIX09GRlNFVCAgIDE4CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEhvc3QtTUFDIGludGVyZmFjZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoKKyAqIEhvc3QtTUFDIGludGVyZmFjZQorICovCiAKICNkZWZpbmUgVFhfU1RBVFVTX1NVQ0NFU1MgICAgICAgMHgwMAogCkBAIC0yMjYsMTQgKzIyNiwxNCBAQAogI2RlZmluZSBUWF9QQUNLRVRfVFlQRV9EQVRBICAgICAweDAxCiAjZGVmaW5lIFRYX1BBQ0tFVF9UWVBFX01HTVQgICAgIDB4MDIKIAotI2RlZmluZSBJU1JfRU1QVFkgICAgICAgICAgICAgICAweDAwICAgICAgICAvLyBubyBiaXRzIHNldCBpbiBJU1IKLSNkZWZpbmUgSVNSX1R4Q09NUExFVEUgICAgICAgICAgMHgwMSAgICAgICAgLy8gcGFja2V0IHRyYW5zbWl0dGVkCi0jZGVmaW5lIElTUl9SeENPTVBMRVRFICAgICAgICAgIDB4MDIgICAgICAgIC8vIHBhY2tldCByZWNlaXZlZAotI2RlZmluZSBJU1JfUnhGUkFNRUxPU1QgICAgICAgICAweDA0ICAgICAgICAvLyBSeCBGcmFtZSBsb3N0Ci0jZGVmaW5lIElTUl9GQVRBTF9FUlJPUiAgICAgICAgIDB4MDggICAgICAgIC8vIEZhdGFsIGVycm9yCi0jZGVmaW5lIElTUl9DT01NQU5EX0NPTVBMRVRFICAgIDB4MTAgICAgICAgIC8vIGNvbW1hbmQgY29tcGxldGVkCi0jZGVmaW5lIElTUl9PVVRfT0ZfUkFOR0UgICAgICAgIDB4MjAgICAgICAgIC8vIGNvbW1hbmQgY29tcGxldGVkCi0jZGVmaW5lIElTUl9JQlNTX01FUkdFICAgICAgICAgIDB4NDAgICAgICAgIC8vICg0LjEuMi4zMCk6IElCU1MgbWVyZ2UKKyNkZWZpbmUgSVNSX0VNUFRZICAgICAgICAgICAgICAgMHgwMCAgICAgICAgLyogbm8gYml0cyBzZXQgaW4gSVNSICovCisjZGVmaW5lIElTUl9UeENPTVBMRVRFICAgICAgICAgIDB4MDEgICAgICAgIC8qIHBhY2tldCB0cmFuc21pdHRlZCAqLworI2RlZmluZSBJU1JfUnhDT01QTEVURSAgICAgICAgICAweDAyICAgICAgICAvKiBwYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSVNSX1J4RlJBTUVMT1NUICAgICAgICAgMHgwNCAgICAgICAgLyogUnggRnJhbWUgbG9zdCAqLworI2RlZmluZSBJU1JfRkFUQUxfRVJST1IgICAgICAgICAweDA4ICAgICAgICAvKiBGYXRhbCBlcnJvciAqLworI2RlZmluZSBJU1JfQ09NTUFORF9DT01QTEVURSAgICAweDEwICAgICAgICAvKiBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZSBJU1JfT1VUX09GX1JBTkdFICAgICAgICAweDIwICAgICAgICAvKiBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZSBJU1JfSUJTU19NRVJHRSAgICAgICAgICAweDQwICAgICAgICAvKiAoNC4xLjIuMzApOiBJQlNTIG1lcmdlICovCiAjZGVmaW5lIElTUl9HRU5FUklDX0lSUSAgICAgICAgIDB4ODAKIAogI2RlZmluZSBMb2NhbF9NaWJfVHlwZSAgICAgICAgICAweDAxCkBAIC0zMTEsMjIgKzMxMSwyMiBAQAogI2RlZmluZSBNQVhfRU5DUllQVElPTl9LRVlTIDQKICNkZWZpbmUgTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUgNDAKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyA4MDIuMTEgcmVsYXRlZCBkZWZpbml0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICogODAyLjExIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqLwogCi0vLwotLy8gUmVndWxhdG9yeSBEb21haW5zCi0vLworLyoKKyAqIFJlZ3VsYXRvcnkgRG9tYWlucworICovCiAKLSNkZWZpbmUgUkVHX0RPTUFJTl9GQ0MJCTB4MTAJLy9DaGFubmVscwkxLTExCVVTQQotI2RlZmluZSBSRUdfRE9NQUlOX0RPQwkJMHgyMAkvL0NoYW5uZWwJMS0xMQlDYW5hZGEKLSNkZWZpbmUgUkVHX0RPTUFJTl9FVFNJCQkweDMwCS8vQ2hhbm5lbAkxLTEzCUV1cm9wZSAoZXggU3BhaW4vRnJhbmNlKQotI2RlZmluZSBSRUdfRE9NQUlOX1NQQUlOCTB4MzEJLy9DaGFubmVsCTEwLTExCVNwYWluCi0jZGVmaW5lIFJFR19ET01BSU5fRlJBTkNFCTB4MzIJLy9DaGFubmVsCTEwLTEzCUZyYW5jZQotI2RlZmluZSBSRUdfRE9NQUlOX01LSwkJMHg0MAkvL0NoYW5uZWwJMTQJSmFwYW4KLSNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8vQ2hhbm5lbAkxLTE0CUphcGFuKE1LSzEpCi0jZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLy9DaGFubmVsCTMtOQlJU1JBRUwKKyNkZWZpbmUgUkVHX0RPTUFJTl9GQ0MJCTB4MTAJLyogQ2hhbm5lbHMJMS0xMQlVU0EJCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9ET0MJCTB4MjAJLyogQ2hhbm5lbAkxLTExCUNhbmFkYQkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0VUU0kJCTB4MzAJLyogQ2hhbm5lbAkxLTEzCUV1cm9wZSAoZXggU3BhaW4vRnJhbmNlKQkqLworI2RlZmluZSBSRUdfRE9NQUlOX1NQQUlOCTB4MzEJLyogQ2hhbm5lbAkxMC0xMQlTcGFpbgkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0ZSQU5DRQkweDMyCS8qIENoYW5uZWwJMTAtMTMJRnJhbmNlCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fTUtLCQkweDQwCS8qIENoYW5uZWwJMTQJSmFwYW4JCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8qIENoYW5uZWwJMS0xNAlKYXBhbihNS0sxKQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLyogQ2hhbm5lbAkzLTkJSVNSQUVMCQkJCSovCiAKICNkZWZpbmUgQlNTX1RZUEVfQURfSE9DCQkxCiAjZGVmaW5lIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFIDIKQEAgLTM2NCwxMyArMzY0LDEzIEBACiAjZGVmaW5lIENJUEhFUl9TVUlURV9DQ1ggICAgICA0CiAjZGVmaW5lIENJUEhFUl9TVUlURV9XRVBfMTI4ICA1CiAKLS8vCi0vLyBJRkFDRSBNQUNST1MgJiBkZWZpbml0aW9ucwotLy8KLS8vCisvKgorICogSUZBQ0UgTUFDUk9TICYgZGVmaW5pdGlvbnMKKyAqLwogCi0vLyBGdW5jQ3RybCBmaWVsZDoKLS8vCisvKgorICogRnVuY0N0cmwgZmllbGQ6CisgKi8KICNkZWZpbmUgRlVOQ19DVFJMX1R4RU5BQkxFCQkweDEwCiAjZGVmaW5lIEZVTkNfQ1RSTF9SeEVOQUJMRQkJMHgyMAogI2RlZmluZSBGVU5DX0NUUkxfSU5JVF9DT01QTEVURQkJMHgwMQpAQCAtMzc4LDQ4ICszNzgsNDggQEAKIC8qIEEgc3R1YiBmaXJtd2FyZSBpbWFnZSB3aGljaCByZWFkcyB0aGUgTUFDIGFkZHJlc3MgZnJvbSBOVlJBTSBvbiB0aGUgY2FyZC4KICAgIEZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24gYW5kIHNvdXJjZSBzZWUgdGhlIGVuZCBvZiB0aGlzIGZpbGUuICovCiBzdGF0aWMgdTggbWFjX3JlYWRlcltdID0gewotCTB4MDYsMHgwMCwweDAwLDB4ZWEsMHgwNCwweDAwLDB4MDAsMHhlYSwweDAzLDB4MDAsMHgwMCwweGVhLDB4MDIsMHgwMCwweDAwLDB4ZWEsCi0JMHgwMSwweDAwLDB4MDAsMHhlYSwweDAwLDB4MDAsMHgwMCwweGVhLDB4ZmYsMHhmZiwweGZmLDB4ZWEsMHhmZSwweGZmLDB4ZmYsMHhlYSwKLQkweGQzLDB4MDAsMHhhMCwweGUzLDB4MDAsMHhmMCwweDIxLDB4ZTEsMHgwZSwweDA0LDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLAotCTB4ODEsMHgxMSwweGEwLDB4ZTEsMHgwMCwweDEwLDB4ODEsMHhlMywweDAwLDB4MTAsMHg4MCwweGU1LDB4MWMsMHgxMCwweDkwLDB4ZTUsCi0JMHgxMCwweDEwLDB4YzEsMHhlMywweDFjLDB4MTAsMHg4MCwweGU1LDB4MDEsMHgxMCwweGEwLDB4ZTMsMHgwOCwweDEwLDB4ODAsMHhlNSwKLQkweDAyLDB4MDMsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsMHhiMCwweDEwLDB4YzAsMHhlMSwweGI0LDB4MTAsMHhjMCwweGUxLAotCTB4YjgsMHgxMCwweGMwLDB4ZTEsMHhiYywweDEwLDB4YzAsMHhlMSwweDU2LDB4ZGMsMHhhMCwweGUzLDB4MjEsMHgwMCwweDAwLDB4ZWIsCi0JMHgwYSwweDAwLDB4YTAsMHhlMywweDFhLDB4MDAsMHgwMCwweGViLDB4MTAsMHgwMCwweDAwLDB4ZWIsMHgwNywweDAwLDB4MDAsMHhlYiwKLQkweDAyLDB4MDMsMHhhMCwweGUzLDB4MDIsMHgxNCwweGEwLDB4ZTMsMHhiNCwweDEwLDB4YzAsMHhlMSwweDRjLDB4MTAsMHg5ZiwweGU1LAotCTB4YmMsMHgxMCwweGMwLDB4ZTEsMHgxMCwweDEwLDB4YTAsMHhlMywweGI4LDB4MTAsMHhjMCwweGUxLDB4ZmUsMHhmZiwweGZmLDB4ZWEsCi0JMHgwMCwweDQwLDB4MmQsMHhlOSwweDAwLDB4MjAsMHhhMCwweGUzLDB4MDIsMHgzYywweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywKLQkweDI4LDB4MDAsMHg5ZiwweGU1LDB4MzcsMHgwMCwweDAwLDB4ZWIsMHgwMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLAotCTB4MDAsMHg0MCwweDJkLDB4ZTksMHgxMiwweDJlLDB4YTAsMHhlMywweDA2LDB4MzAsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsCi0JMHgwMiwweDA0LDB4YTAsMHhlMywweDJmLDB4MDAsMHgwMCwweGViLDB4MDAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwKLQkweDAwLDB4MDIsMHgwMCwweDAyLDB4ODAsMHgwMSwweDkwLDB4ZTAsMHgwMSwweDAwLDB4MDAsMHgwYSwweDAxLDB4MDAsMHg1MCwweGUyLAotCTB4ZmMsMHhmZiwweGZmLDB4ZWEsMHgxZSwweGZmLDB4MmYsMHhlMSwweDgwLDB4MTAsMHhhMCwweGUzLDB4ZjMsMHgwNiwweGEwLDB4ZTMsCi0JMHgwMCwweDEwLDB4ODAsMHhlNSwweDAwLDB4MTAsMHhhMCwweGUzLDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwMSwweDEwLDB4YTAsMHhlMywKLQkweDA0LDB4MTAsMHg4MCwweGU1LDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwZSwweDM0LDB4YTAsMHhlMywweDFjLDB4MTAsMHg5MywweGU1LAotCTB4MDIsMHgxYSwweDgxLDB4ZTMsMHgxYywweDEwLDB4ODMsMHhlNSwweDU4LDB4MTEsMHg5ZiwweGU1LDB4MzAsMHgxMCwweDgwLDB4ZTUsCi0JMHg1NCwweDExLDB4OWYsMHhlNSwweDM0LDB4MTAsMHg4MCwweGU1LDB4MzgsMHgxMCwweDgwLDB4ZTUsMHgzYywweDEwLDB4ODAsMHhlNSwKLQkweDEwLDB4MTAsMHg5MCwweGU1LDB4MDgsMHgwMCwweDkwLDB4ZTUsMHgxZSwweGZmLDB4MmYsMHhlMSwweGYzLDB4MTYsMHhhMCwweGUzLAotCTB4MDgsMHgwMCwweDkxLDB4ZTUsMHgwNSwweDAwLDB4YTAsMHhlMywweDBjLDB4MDAsMHg4MSwweGU1LDB4MTAsMHgwMCwweDkxLDB4ZTUsCi0JMHgwMiwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4ZmYsMHgwMCwweGEwLDB4ZTMsMHgwYywweDAwLDB4ODEsMHhlNSwKLQkweDEwLDB4MDAsMHg5MSwweGU1LDB4MDIsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4MDAsMHg5MSwweGU1LAotCTB4MTAsMHgwMCwweDkxLDB4ZTUsMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHgwMCwweDkxLDB4ZTUsCi0JMHhmZiwweDAwLDB4MDAsMHhlMiwweDFlLDB4ZmYsMHgyZiwweGUxLDB4MzAsMHg0MCwweDJkLDB4ZTksMHgwMCwweDUwLDB4YTAsMHhlMSwKLQkweDAzLDB4NDAsMHhhMCwweGUxLDB4YTIsMHgwMiwweGEwLDB4ZTEsMHgwOCwweDAwLDB4MDAsMHhlMiwweDAzLDB4MDAsMHg4MCwweGUyLAotCTB4ZDgsMHgxMCwweDlmLDB4ZTUsMHgwMCwweDAwLDB4YzEsMHhlNSwweDAxLDB4MjAsMHhjMSwweGU1LDB4ZTIsMHhmZiwweGZmLDB4ZWIsCi0JMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDFhLDB4MTQsMHgwMCwweGEwLDB4ZTMsMHhjNCwweGZmLDB4ZmYsMHhlYiwKLQkweDA0LDB4MjAsMHhhMCwweGUxLDB4MDUsMHgxMCwweGEwLDB4ZTEsMHgwMiwweDAwLDB4YTAsMHhlMywweDAxLDB4MDAsMHgwMCwweGViLAotCTB4MzAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwweDcwLDB4NDAsMHgyZCwweGU5LDB4ZjMsMHg0NiwweGEwLDB4ZTMsCi0JMHgwMCwweDMwLDB4YTAsMHhlMywweDAwLDB4MDAsMHg1MCwweGUzLDB4MDgsMHgwMCwweDAwLDB4OWEsMHg4YywweDUwLDB4OWYsMHhlNSwKLQkweDAzLDB4NjAsMHhkNSwweGU3LDB4MGMsMHg2MCwweDg0LDB4ZTUsMHgxMCwweDYwLDB4OTQsMHhlNSwweDAyLDB4MDAsMHgxNiwweGUzLAotCTB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwMSwweDMwLDB4ODMsMHhlMiwweDAwLDB4MDAsMHg1MywweGUxLDB4ZjcsMHhmZiwweGZmLDB4M2EsCi0JMHhmZiwweDMwLDB4YTAsMHhlMywweDBjLDB4MzAsMHg4NCwweGU1LDB4MDgsMHgwMCwweDk0LDB4ZTUsMHgxMCwweDAwLDB4OTQsMHhlNSwKLQkweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDAwLDB4OTQsMHhlNSwweDAwLDB4MDAsMHhhMCwweGUzLAotCTB4MDAsMHgwMCwweDUyLDB4ZTMsMHgwYiwweDAwLDB4MDAsMHg5YSwweDEwLDB4NTAsMHg5NCwweGU1LDB4MDIsMHgwMCwweDE1LDB4ZTMsCi0JMHhmYywweGZmLDB4ZmYsMHgwYSwweDBjLDB4MzAsMHg4NCwweGU1LDB4MTAsMHg1MCwweDk0LDB4ZTUsMHgwMSwweDAwLDB4MTUsMHhlMywKLQkweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHg1MCwweDk0LDB4ZTUsMHgwMSwweDUwLDB4YzEsMHhlNCwweDAxLDB4MDAsMHg4MCwweGUyLAotCTB4MDIsMHgwMCwweDUwLDB4ZTEsMHhmMywweGZmLDB4ZmYsMHgzYSwweGM4LDB4MDAsMHhhMCwweGUzLDB4OTgsMHhmZiwweGZmLDB4ZWIsCi0JMHg3MCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLDB4MDEsMHgwYywweDAwLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMiwKLQkweDAwLDB4MDEsMHgwMCwweDAyCisJMHgwNiwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlYSwKKwkweDAxLCAweDAwLCAweDAwLCAweGVhLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorCTB4ZDMsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MGUsIDB4MDQsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHg4MSwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MSwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxYywgMHgxMCwgMHg5MCwgMHhlNSwKKwkweDEwLCAweDEwLCAweGMxLCAweGUzLCAweDFjLCAweDEwLCAweDgwLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDA4LCAweDEwLCAweDgwLCAweGU1LAorCTB4MDIsIDB4MDMsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4YjAsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4YjQsIDB4MTAsIDB4YzAsIDB4ZTEsCisJMHhiOCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhiYywgMHgxMCwgMHhjMCwgMHhlMSwgMHg1NiwgMHhkYywgMHhhMCwgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweDBhLCAweDAwLCAweGEwLCAweGUzLCAweDFhLCAweDAwLCAweDAwLCAweGViLCAweDEwLCAweDAwLCAweDAwLCAweGViLCAweDA3LCAweDAwLCAweDAwLCAweGViLAorCTB4MDIsIDB4MDMsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4MTQsIDB4YTAsIDB4ZTMsIDB4YjQsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4NGMsIDB4MTAsIDB4OWYsIDB4ZTUsCisJMHhiYywgMHgxMCwgMHhjMCwgMHhlMSwgMHgxMCwgMHgxMCwgMHhhMCwgMHhlMywgMHhiOCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKKwkweDAwLCAweDQwLCAweDJkLCAweGU5LCAweDAwLCAweDIwLCAweGEwLCAweGUzLCAweDAyLCAweDNjLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorCTB4MjgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MzcsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisJMHgwMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgxMiwgMHgyZSwgMHhhMCwgMHhlMywgMHgwNiwgMHgzMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDAyLCAweDA0LCAweGEwLCAweGUzLCAweDJmLCAweDAwLCAweDAwLCAweGViLCAweDAwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDEsIDB4OTAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ZTIsCisJMHhmYywgMHhmZiwgMHhmZiwgMHhlYSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHgxMCwgMHhhMCwgMHhlMywgMHhmMywgMHgwNiwgMHhhMCwgMHhlMywKKwkweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAorCTB4MDQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MGUsIDB4MzQsIDB4YTAsIDB4ZTMsIDB4MWMsIDB4MTAsIDB4OTMsIDB4ZTUsCisJMHgwMiwgMHgxYSwgMHg4MSwgMHhlMywgMHgxYywgMHgxMCwgMHg4MywgMHhlNSwgMHg1OCwgMHgxMSwgMHg5ZiwgMHhlNSwgMHgzMCwgMHgxMCwgMHg4MCwgMHhlNSwKKwkweDU0LCAweDExLCAweDlmLCAweGU1LCAweDM0LCAweDEwLCAweDgwLCAweGU1LCAweDM4LCAweDEwLCAweDgwLCAweGU1LCAweDNjLCAweDEwLCAweDgwLCAweGU1LAorCTB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDgsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZjMsIDB4MTYsIDB4YTAsIDB4ZTMsCisJMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwNSwgMHgwMCwgMHhhMCwgMHhlMywgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwgMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweDAyLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweGZmLCAweDAwLCAweGEwLCAweGUzLCAweDBjLCAweDAwLCAweDgxLCAweGU1LAorCTB4MTAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTEsIDB4ZTUsCisJMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweGZmLCAweDAwLCAweDAwLCAweGUyLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDQwLCAweDJkLCAweGU5LCAweDAwLCAweDUwLCAweGEwLCAweGUxLAorCTB4MDMsIDB4NDAsIDB4YTAsIDB4ZTEsIDB4YTIsIDB4MDIsIDB4YTAsIDB4ZTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4ODAsIDB4ZTIsCisJMHhkOCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHhjMSwgMHhlNSwgMHgwMSwgMHgyMCwgMHhjMSwgMHhlNSwgMHhlMiwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDAxLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDFhLCAweDE0LCAweDAwLCAweGEwLCAweGUzLCAweGM0LCAweGZmLCAweGZmLCAweGViLAorCTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTEsIDB4MDUsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHgzMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg3MCwgMHg0MCwgMHgyZCwgMHhlOSwgMHhmMywgMHg0NiwgMHhhMCwgMHhlMywKKwkweDAwLCAweDMwLCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDUwLCAweGUzLCAweDA4LCAweDAwLCAweDAwLCAweDlhLCAweDhjLCAweDUwLCAweDlmLCAweGU1LAorCTB4MDMsIDB4NjAsIDB4ZDUsIDB4ZTcsIDB4MGMsIDB4NjAsIDB4ODQsIDB4ZTUsIDB4MTAsIDB4NjAsIDB4OTQsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTYsIDB4ZTMsCisJMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwMSwgMHgzMCwgMHg4MywgMHhlMiwgMHgwMCwgMHgwMCwgMHg1MywgMHhlMSwgMHhmNywgMHhmZiwgMHhmZiwgMHgzYSwKKwkweGZmLCAweDMwLCAweGEwLCAweGUzLCAweDBjLCAweDMwLCAweDg0LCAweGU1LCAweDA4LCAweDAwLCAweDk0LCAweGU1LCAweDEwLCAweDAwLCAweDk0LCAweGU1LAorCTB4MDEsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHhlMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg5YSwgMHgxMCwgMHg1MCwgMHg5NCwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNSwgMHhlMywKKwkweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDBjLCAweDMwLCAweDg0LCAweGU1LCAweDEwLCAweDUwLCAweDk0LCAweGU1LCAweDAxLCAweDAwLCAweDE1LCAweGUzLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4NTAsIDB4OTQsIDB4ZTUsIDB4MDEsIDB4NTAsIDB4YzEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsCisJMHgwMiwgMHgwMCwgMHg1MCwgMHhlMSwgMHhmMywgMHhmZiwgMHhmZiwgMHgzYSwgMHhjOCwgMHgwMCwgMHhhMCwgMHhlMywgMHg5OCwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDcwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDBjLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDAwLCAweDAyLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDIKIH07CiAKIHN0cnVjdCBhdG1lbF9wcml2YXRlIHsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldmljZSAqc3lzX2RldjsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7Ci0Jc3BpbmxvY2tfdCBpcnFsb2NrLCB0aW1lcmxvY2s7CS8vIHNwaW5sb2NrcworCXNwaW5sb2NrX3QgaXJxbG9jaywgdGltZXJsb2NrOwkvKiBzcGlubG9ja3MgKi8KIAllbnVtIHsgQlVTX1RZUEVfUENDQVJELCBCVVNfVFlQRV9QQ0kgfSBidXNfdHlwZTsKIAllbnVtIHsKIAkJQ0FSRF9UWVBFX1BBUkFMTEVMX0ZMQVNILApAQCAtNTQxLDcgKzU0MSw3IEBACiAJdTggcnhfYnVmW01BWF9XSVJFTEVTU19CT0RZXTsKIH07CiAKLXN0YXRpYyB1OCBhdG1lbF9iYXNpY19yYXRlc1s0XSA9IHsweDgyLDB4ODQsMHgwYiwweDE2fTsKK3N0YXRpYyB1OCBhdG1lbF9iYXNpY19yYXRlc1s0XSA9IHsweDgyLCAweDg0LCAweDBiLCAweDE2fTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CkBAIC0xMjgzLDE3ICsxMjgzLDE3IEBACiAKIHN0YXRpYyBpbnQgYXRtZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLSAgICAgICAgaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMjMxMikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIGRldi0+bXR1ID0gbmV3X210dTsKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMjMxMikpCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdG1lbF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCi0gICAgICAgIG1lbWNweSAoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5IChkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAlyZXR1cm4gYXRtZWxfb3BlbihkZXYpOwogfQogCkBAIC0xNDIwLDEwICsxNDIwLDE3IEBACiAJCQkJICAgICBwcml2LT5maXJtd2FyZV9pZCk7CiAKIAkJc3dpdGNoIChwcml2LT5jYXJkX3R5cGUpIHsKLQkJY2FzZSBDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0g6IGMgPSAiUGFyYWxsZWwgZmxhc2giOyBicmVhazsKLQkJY2FzZSBDQVJEX1RZUEVfU1BJX0ZMQVNIOiBjID0gIlNQSSBmbGFzaFxuIjsgYnJlYWs7Ci0JCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTTogYyA9ICJFRVBST00iOyBicmVhazsKLQkJZGVmYXVsdDogYyA9ICI8dW5rbm93bj4iOworCQljYXNlIENBUkRfVFlQRV9QQVJBTExFTF9GTEFTSDoKKwkJCWMgPSAiUGFyYWxsZWwgZmxhc2giOworCQkJYnJlYWs7CisJCWNhc2UgQ0FSRF9UWVBFX1NQSV9GTEFTSDoKKwkJCWMgPSAiU1BJIGZsYXNoXG4iOworCQkJYnJlYWs7CisJCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTToKKwkJCWMgPSAiRUVQUk9NIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYyA9ICI8dW5rbm93bj4iOwogCQl9CiAKIAkJciA9ICI8dW5rbm93bj4iOwpAQCAtMTQzOSwxNiArMTQ0NiwzMyBAQAogCQkJICAgICBwcml2LT51c2Vfd3BhID8gIlllcyIgOiAiTm8iKTsKIAl9CiAKLQlzd2l0Y2gocHJpdi0+c3RhdGlvbl9zdGF0ZSkgewotCWNhc2UgU1RBVElPTl9TVEFURV9TQ0FOTklORzogcyA9ICJTY2FubmluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9KT0lOTklORzogcyA9ICJKb2luaW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOiBzID0gIkF1dGhlbnRpY2F0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HOiBzID0gIkFzc29jaWF0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1JFQURZOiBzID0gIlJlYWR5IjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6IHMgPSAiUmVhc3NvY2lhdGluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SOiBzID0gIk1hbmFnZW1lbnQgZXJyb3IiOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfRE9XTjogcyA9ICJEb3duIjsgYnJlYWs7Ci0JZGVmYXVsdDogcyA9ICI8dW5rbm93bj4iOworCXN3aXRjaCAocHJpdi0+c3RhdGlvbl9zdGF0ZSkgeworCWNhc2UgU1RBVElPTl9TVEFURV9TQ0FOTklORzoKKwkJcyA9ICJTY2FubmluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9KT0lOTklORzoKKwkJcyA9ICJKb2luaW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOgorCQlzID0gIkF1dGhlbnRpY2F0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HOgorCQlzID0gIkFzc29jaWF0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1JFQURZOgorCQlzID0gIlJlYWR5IjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6CisJCXMgPSAiUmVhc3NvY2lhdGluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SOgorCQlzID0gIk1hbmFnZW1lbnQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfRE9XTjoKKwkJcyA9ICJEb3duIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICI8dW5rbm93bj4iOwogCX0KIAogCXAgKz0gc3ByaW50ZihwLCAiQ3VycmVudCBzdGF0ZTpcdFx0JXNcbiIsIHMpOwpAQCAtMTQ1OCwxNiArMTQ4MiwzMCBAQAogc3RhdGljIGludCBhdG1lbF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotICAgICAgICBzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBkYXRhOwogCWludCBsZW4gPSBhdG1lbF9wcm9jX291dHB1dCAocGFnZSwgcHJpdik7Ci0gICAgICAgIGlmIChsZW4gPD0gb2ZmK2NvdW50KSAqZW9mID0gMTsKLSAgICAgICAgKnN0YXJ0ID0gcGFnZSArIG9mZjsKLSAgICAgICAgbGVuIC09IG9mZjsKLSAgICAgICAgaWYgKGxlbj5jb3VudCkgbGVuID0gY291bnQ7Ci0gICAgICAgIGlmIChsZW48MCkgbGVuID0gMDsKLSAgICAgICAgcmV0dXJuIGxlbjsKKwlpZiAobGVuIDw9IG9mZitjb3VudCkKKwkJKmVvZiA9IDE7CisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKwlsZW4gLT0gb2ZmOworCWlmIChsZW4gPiBjb3VudCkKKwkJbGVuID0gY291bnQ7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IDA7CisJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdG1lbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYXRtZWxfb3BlbiwKKwkubmRvX3N0b3AJCT0gYXRtZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF0bWVsX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gYXRtZWxfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBzdGFydF90eCwKKwkubmRvX2RvX2lvY3RsIAkJPSBhdG1lbF9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKHVuc2lnbmVkIHNob3J0IGlycSwgdW5zaWduZWQgbG9uZyBwb3J0LAogCQkJCSAgIGNvbnN0IEF0bWVsRldUeXBlIGZ3X3R5cGUsCiAJCQkJICAgc3RydWN0IGRldmljZSAqc3lzX2RldiwKQEAgLTE0NzksMTEgKzE1MTcsMTEgQEAKIAlpbnQgcmM7CiAKIAkvKiBDcmVhdGUgdGhlIG5ldHdvcmsgZGV2aWNlIG9iamVjdC4gKi8KLSAgICAgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpwcml2KSk7Ci0gICAgICAgIGlmICghZGV2KSB7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpwcml2KSk7CisJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbDogQ291bGRuJ3QgYWxsb2NfZXRoZXJkZXZcbiIpOwogCQlyZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCX0KIAlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsOiBDb3VsZG4ndCBnZXQgbmFtZSFcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKQEAgLTE1NTIsMTMgKzE1OTAsOCBAQAogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZnVuY3Rpb24gPSBhdG1lbF9tYW5hZ2VtZW50X3RpbWVyOwogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAKLQlkZXYtPm9wZW4gPSBhdG1lbF9vcGVuOwotCWRldi0+c3RvcCA9IGF0bWVsX2Nsb3NlOwotCWRldi0+Y2hhbmdlX210dSA9IGF0bWVsX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBhdG1lbF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGFydF90eDsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZhdG1lbF9oYW5kbGVyX2RlZjsKLQlkZXYtPmRvX2lvY3RsID0gYXRtZWxfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF0bWVsX25ldGRldl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhdG1lbF9oYW5kbGVyX2RlZjsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTE1NzcsNyArMTYxMCw3IEBACiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKQogCQlnb3RvIGVycl9vdXRfcmVzOwogCi0JaWYgKCFwcm9iZV9hdG1lbF9jYXJkKGRldikpeworCWlmICghcHJvYmVfYXRtZWxfY2FyZChkZXYpKSB7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQpAQCAtMTU5NCw3ICsxNjI3LDcgQEAKIAlyZXR1cm4gZGV2OwogCiBlcnJfb3V0X3JlczoKLQlyZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDMyKTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIpOwogZXJyX291dF9pcnE6CiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiBlcnJfb3V0X2ZyZWU6CkBAIC0xNjMyLDcgKzE2NjUsNyBAQAogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIENoZWNrIGlmIHdlIGFza2VkIGZvciBgYW55JyAqLwotCWlmKGR3cnEtPmZsYWdzID09IDApIHsKKwlpZiAoZHdycS0+ZmxhZ3MgPT0gMCkgewogCQlwcml2LT5jb25uZWN0X3RvX2FueV9CU1MgPSAxOwogCX0gZWxzZSB7CiAJCWludCBpbmRleCA9IChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwpAQCAtMTc2OCw3ICsxODAxLDcgQEAKIAl9CiAJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwotCWlmKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCisJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAwOwogCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KQEAgLTE3OTcsNyArMTgzMCw3IEBACiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwogCWR3cnEtPmxlbmd0aCA9IHByaXYtPndlcF9rZXlfbGVuW2luZGV4XTsKIAlpZiAoZHdycS0+bGVuZ3RoID4gMTYpIHsKLQkJZHdycS0+bGVuZ3RoPTA7CisJCWR3cnEtPmxlbmd0aCA9IDA7CiAJfSBlbHNlIHsKIAkJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCW1lbWNweShleHRyYSwgcHJpdi0+d2VwX2tleXNbaW5kZXhdLCBkd3JxLT5sZW5ndGgpOwpAQCAtMjAxMywxMSArMjA0NiwyMCBAQAogCQl9IGVsc2UgewogCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSB2YWx1ZSAqLwogCQkJc3dpdGNoICh2d3JxLT52YWx1ZSkgewotCQkJY2FzZSAgMTAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDA7IGJyZWFrOwotCQkJY2FzZSAgMjAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDE7IGJyZWFrOwotCQkJY2FzZSAgNTUwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDI7IGJyZWFrOwotCQkJY2FzZSAxMTAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDM7IGJyZWFrOwotCQkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CisJCQljYXNlICAxMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAgMjAwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgIDU1MDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDExMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCX0KQEAgLTIwNjIsMTEgKzIxMDQsMTkgQEAKIAkJdndycS0+dmFsdWUgPSAxMTAwMDAwMDsKIAl9IGVsc2UgewogCQl2d3JxLT5maXhlZCA9IDE7Ci0JCXN3aXRjaChwcml2LT50eF9yYXRlKSB7Ci0JCWNhc2UgMDogdndycS0+dmFsdWUgPSAgMTAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMTogdndycS0+dmFsdWUgPSAgMjAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMjogdndycS0+dmFsdWUgPSAgNTUwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMzogdndycS0+dmFsdWUgPSAxMTAwMDAwMDsgYnJlYWs7CisJCXN3aXRjaCAocHJpdi0+dHhfcmF0ZSkgeworCQljYXNlIDA6CisJCQl2d3JxLT52YWx1ZSA9ICAxMDAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXZ3cnEtPnZhbHVlID0gIDIwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdndycS0+dmFsdWUgPSAgNTUwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2d3JxLT52YWx1ZSA9IDExMDAwMDAwOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0yMjA0LDkgKzIyNTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogc3RhdGljIGludCBhdG1lbF9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICBzdHJ1Y3QgaXdfZnJlcSAqZndycSwKQEAgLTIyMTYsMTYgKzIyNjMsMTIgQEAKIAlpbnQgcmMgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBJZiBzZXR0aW5nIGJ5IGZyZXF1ZW5jeSwgY29udmVydCB0byBhIGNoYW5uZWwgKi8KLQlpZiAoKGZ3cnEtPmUgPT0gMSkgJiYKLQkgICAgKGZ3cnEtPm0gPj0gKGludCkgMjQxMjAwMDAwKSAmJgotCSAgICAoZndycS0+bSA8PSAoaW50KSAyNDg3MDAwMDApKSB7CisJaWYgKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUgKChjIDwgMTQpICYmIChmICE9IGZyZXF1ZW5jeV9saXN0W2NdKSkKLQkJCWMrKzsKKwogCQkvKiBIYWNrIHRvIGZhbGwgdGhyb3VnaC4uLiAqLwogCQlmd3JxLT5lID0gMDsKLQkJZndycS0+bSA9IGMgKyAxOworCQlmd3JxLT5tID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGYpOwogCX0KIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCiAJaWYgKChmd3JxLT5tID4gMTAwMCkgfHwgKGZ3cnEtPmUgPiAwKSkKQEAgLTIzODQsOCArMjQyNywxMSBAQAogCWlmIChyYW5nZS0+bnVtX2NoYW5uZWxzICE9IDApIHsKIAkJZm9yIChrID0gMCwgaSA9IGNoYW5uZWxfdGFibGVbal0ubWluOyBpIDw9IGNoYW5uZWxfdGFibGVbal0ubWF4OyBpKyspIHsKIAkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpOyAvKiBMaXN0IGluZGV4ICovCi0JCQlyYW5nZS0+ZnJlcVtrXS5tID0gZnJlcXVlbmN5X2xpc3RbaSAtIDFdICogMTAwMDAwOwotCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCisJCQkvKiBWYWx1ZXMgaW4gTUh6IC0+ICogMTBeNSAqIDEwICovCisJCQlyYW5nZS0+ZnJlcVtrXS5tID0gKGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpKSAqCisJCQkJCSAgICAxMDAwMDApOworCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsKIAkJfQogCQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAJfQpAQCAtMjU4MCw4ICsyNjI2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBhdG1lbF9oYW5kbGVyX2RlZiA9Ci17CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0bWVsX2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGF0bWVsX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZQk9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9hcmdzKSwKQEAgLTI4MzgsNyArMjg4Myw3IEBACiAKIAlpZiAocHJpdi0+d2VwX2lzX29uICYmIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gIT0gMSkKIAkJLyogbm8gV0VQIGZvciBhdXRoZW50aWNhdGlvbiBmcmFtZXMgd2l0aCBUclNlcU5vIDEgKi8KLSAgICAgICAgICAgICAgICBoZWFkZXIuZnJhbWVfY29udHJvbCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkJaGVhZGVyLmZyYW1lX2NvbnRyb2wgfD0gIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7CiAKQEAgLTI5NzMsNyArMzAxOCw3IEBACiAJCWlmIChtZW1jbXAoYnNzLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KSA9PSAwKQogCQkJaW5kZXggPSBpOwogCi0gICAgICAgIC8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKKwkvKiBJZiB3ZSBwcm9jZXNzIGEgcHJvYmUgYW5kIGFuIGVudHJ5IGZyb20gdGhpcyBCU1MgZXhpc3RzCiAJICAgd2Ugd2lsbCB1cGRhdGUgdGhlIEJTUyBlbnRyeSB3aXRoIHRoZSBpbmZvIGZyb20gdGhpcyBCU1MuCiAJICAgSWYgd2UgcHJvY2VzcyBhIGJlYWNvbiB3ZSB3aWxsIG9ubHkgdXBkYXRlIFJTU0kgKi8KIApAQCAtMjk5OSw3ICszMDQ0LDcgQEAKIAlpZiAoY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQogCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9BREhPQzsKIAllbHNlIGlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9SVdfTU9ERV9JTkZSQTsKKwkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9IElXX01PREVfSU5GUkE7CiAKIAlwcml2LT5CU1NpbmZvW2luZGV4XS5wcmVhbWJsZSA9IGNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUgPwogCQlTSE9SVF9QUkVBTUJMRSA6IExPTkdfUFJFQU1CTEU7CkBAIC0zMDQ2LDcgKzMwOTEsNyBAQAogCQl9CiAKIAkJaWYgKHNob3VsZF9hc3NvY2lhdGUpIHsKLQkJCWlmKHByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQpIHsKKwkJCWlmIChwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkKSB7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HKTsKIAkJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMSk7CiAJCQkJcmV0dXJuOwpAQCAtMzA2Nyw4ICszMTEyLDggQEAKIAkJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwogCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIFdMQU5fQVVUSF9TSEFSRURfS0VZLCBOVUxMLCAwKTsKIAkJCXJldHVybjsKLQkJfSBlbHNlIGlmICggICBzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKLQkJICAgICAgICAgICAmJiBwcml2LT53ZXBfaXNfb24pIHsKKwkJfSBlbHNlIGlmIChzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKKwkJCSAgICYmIHByaXYtPndlcF9pc19vbikgewogCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAxOwogCQkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgV0xBTl9BVVRIX09QRU4sIE5VTEwsIDApOwpAQCAtMzI1NiwxMSArMzMwMSwxMSBAQAogCXU4IG1heF9yc3NpID0gNDI7IC8qIDUwMi1ybWZkLXJldmQgbWF4IGJ5IGV4cGVyaW1lbnQsIGRlZmF1bHQgZm9yIG5vdyAqLwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgQVRNRUxfRldfVFlQRV81MDJFOgotCQkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIEFUTUVMX0ZXX1RZUEVfNTAyRToKKwkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlyc3NpID0gcnNzaSAqIDEwMCAvIG1heF9yc3NpOwpAQCAtMzQ3Nyw4ICszNTIyLDcgQEAKIAkgICAgc3RhdHVzID09IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoY29tbWFuZCl7Ci0KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKIAljYXNlIENNRF9TdGFydDoKIAkJaWYgKHN0YXR1cyA9PSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CiAJCQlwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkID0gcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkOwpAQCAtMzcxMyw3ICszNzU3LDcgQEAKIAogCWlmIChyYykgewogCQlpZiAoZGV2LT5kZXZfYWRkclswXSA9PSAweEZGKSB7Ci0JCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsMHgwNCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsIDB4MDQsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDB9OwogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAqKiogSW52YWxpZCBNQUMgYWRkcmVzcy4gVVBHUkFERSBGaXJtd2FyZSAqKioqXG4iLCBkZXYtPm5hbWUpOwogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRlZmF1bHRfbWFjLCA2KTsKIAkJfQpAQCAtMzgwNyw3ICszODUxLDcgQEAKIAkJCQl9IGVsc2UgewogCQkJCQltaWIuZ3JvdXBfa2V5ID0gaTsKIAkJCQkJcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlID0gcHJpdi0+cGFpcndpc2VfY2lwaGVyX3N1aXRlOwotCQkJCSAgICAgICAgbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0xXSA9IDE7CisJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMV0gPSAxOwogCQkJCQltaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTJdID0gcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlOwogCQkJCX0KIAkJCX0KQEAgLTM5MTcsNyArMzk2MSw3IEBACiAJCQlsZW4gPSBmd19lbnRyeS0+c2l6ZTsKIAkJfQogCi0JICAgICAgICBpZiAobGVuIDw9IDB4NjAwMCkgeworCQlpZiAobGVuIDw9IDB4NjAwMCkgewogCQkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEJTUiwgQlNTX0lSQU0pOwogCQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgMCwgZncsIGxlbik7CiAJCQlhdG1lbF9zZXRfZ2NyKHByaXYtPmRldiwgR0NSX1JFTUFQKTsKQEAgLTM5NDYsNyArMzk5MCw3IEBACiAJcHJpdi0+dXNlX3dwYSA9IChwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiA9PSA0KTsKIAlwcml2LT5yYWRpb19vbl9icm9rZW4gPSAocHJpdi0+aG9zdF9pbmZvLm1ham9yX3ZlcnNpb24gPT0gNSk7CiAKLSAgICAgICAgLyogdW5tYXNrIGFsbCBpcnEgc291cmNlcyAqLworCS8qIHVubWFzayBhbGwgaXJxIHNvdXJjZXMgKi8KIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9JTlRfTUFTS19PRkZTRVQpLCAweGZmKTsKIAogCS8qIGludCBUeCBzeXN0ZW0gYW5kIGVuYWJsZSBUeCAqLwpAQCAtMzk3OSw3ICs0MDIzLDcgQEAKIAkJICAgIENNRF9TVEFUVVNfUkVKRUNURURfUkFESU9fT0ZGKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogY2Fubm90IHR1cm4gdGhlIHJhZGlvIG9uLlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIApAQCAtNDAwMyw4ICs0MDQ3LDcgQEAKIAllbHNlCiAJCWJ1aWxkX3dlcF9taWIocHJpdik7CiAKLQlpZiAob2xkX3N0YXRlID09IFNUQVRJT05fU1RBVEVfUkVBRFkpCi0JeworCWlmIChvbGRfc3RhdGUgPT0gU1RBVElPTl9TVEFURV9SRUFEWSkgewogCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CkBAIC00MjgxLDI0ICs0MzI0LDI0IEBACiAJLnNldCBOVlJBTV9MRU5HVEgsIDB4MDIwMAogCS5zZXQgTUFDX0FERFJFU1NfTUlCLCBTUkFNX0JBU0UKIAkuc2V0IE1BQ19BRERSRVNTX0xFTkdUSCwgNgotICAgICAgICAuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKKwkuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKIAkuc2V0IE1SMSwgMAogCS5zZXQgTVIyLCA0CiAJLnNldCBNUjMsIDgKIAkuc2V0IE1SNCwgMHhDCiBSRVNFVF9WRUNUT1I6Ci0gICAgICAgIGIgUkVTRVRfSEFORExFUgorCWIgUkVTRVRfSEFORExFUgogVU5ERUZfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogU1dJX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIElBQk9SVF9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBEQUJPUlRfVkVDVE9SOgogUkVTRVJWRURfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogSVJRX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIEZJUV9WRUNUT1I6CiAJYiBIQUxUMQogSEFMVDE6CWIgSEFMVDEKQEAgLTQzMTAsNyArNDM1Myw3IEBACiAJbGRyCXIwLCA9U1BJX0NHRU5fQkFTRQogCW1vdglyMSwgIzAKIAltb3YJcjEsIHIxLCBsc2wgIzMKLQlvcnIJcjEscjEsICMwCisJb3JyCXIxLCByMSwgIzAKIAlzdHIJcjEsIFtyMF0KIAlsZHIJcjEsIFtyMCwgIzI4XQogCWJpYwlyMSwgcjEsICMxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwppbmRleCAxZjgxZDM2Li5hYWI3MWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwpAQCAtMTEwLDEwICsxMTAsMTggQEAKIAlib29sICJCcm9hZGNvbSA0M3h4IGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIEI0MwogCS0tLWhlbHAtLS0KLQkgIEJyb2FkY29tIDQzeHggZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgQnJvYWRjb20gNDN4eCBkZWJ1Z2dpbmcuCiAKLQkgIFNheSBZLCBpZiB5b3Ugd2FudCB0byBmaW5kIG91dCB3aHkgdGhlIGRyaXZlciBkb2VzIG5vdAotCSAgd29yayBmb3IgeW91LgorCSAgVGhpcyBhZGRzIGFkZGl0aW9uYWwgcnVudGltZSBzYW5pdHkgY2hlY2tzIGFuZCBzdGF0aXN0aWNzIHRvIHRoZSBkcml2ZXIuCisJICBUaGVzZSBjaGVja3MgYW5kIHN0YXRpc3RpY3MgbWlnaHQgbWUgZXhwZW5zaXZlIGFuZCBodXJ0IHJ1bnRpbWUgcGVyZm9ybWFuY2UKKwkgIG9mIHlvdXIgc3lzdGVtLgorCSAgVGhpcyBhbHNvIGFkZHMgdGhlIGI0MyBkZWJ1Z2ZzIGludGVyZmFjZS4KKworCSAgRG8gbm90IGVuYWJsZSB0aGlzLCB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4KKworCSAgU2F5IE4sIGlmIHlvdSBhcmUgYSBkaXN0cmlidXRvciBvciB1c2VyIGJ1aWxkaW5nIGEgcmVsZWFzZSBrZXJuZWwKKwkgIGZvciBwcm9kdWN0aW9uIHVzZS4KKwkgIE9ubHkgc2F5IFksIGlmIHlvdSBhcmUgZGVidWdnaW5nIGEgcHJvYmxlbSBpbiB0aGUgYjQzIGRyaXZlciBzb3VyY2Vjb2RlLgogCiBjb25maWcgQjQzX0ZPUkNFX1BJTwogCWJvb2wgIkZvcmNlIHVzYWdlIG9mIFBJTyBpbnN0ZWFkIG9mIERNQSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQppbmRleCAxNGEwMmIzLi4yODFlZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogYjQzLXkJCQkJKz0gcGh5X2EubwogYjQzLSQoQ09ORklHX0I0M19OUEhZKQkJKz0gcGh5X24ubwogYjQzLSQoQ09ORklHX0I0M19QSFlfTFApCSs9IHBoeV9scC5vCitiNDMtJChDT05GSUdfQjQzX1BIWV9MUCkJKz0gdGFibGVzX2xwcGh5Lm8KIGI0My15CQkJCSs9IHN5c2ZzLm8KIGI0My15CQkJCSs9IHhtaXQubwogYjQzLXkJCQkJKz0gbG8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGE1M2MzNzguLmJlYWYxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTEyMCw2ICsxMjAsOSBAQAogI2RlZmluZSBCNDNfTU1JT19JRlNDVEwJCQkweDY4OCAvKiBJbnRlcmZyYW1lIHNwYWNlIGNvbnRyb2wgKi8KICNkZWZpbmUgIEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRgkweDAwMDQKICNkZWZpbmUgQjQzX01NSU9fUE9XRVJVUF9ERUxBWQkJMHg2QTgKKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX0NUTAkJMHg2QjQgLyogQmx1ZXRvb3RoIENvZXhpc3RlbmNlIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX1NUQVQJCTB4NkI2IC8qIEJsdWV0b290aCBDb2V4aXN0ZW5jZSBTdGF0dXMgKi8KKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX1RYQ1RMCQkweDZCOCAvKiBCbHVldG9vdGggQ29leGlzdGVuY2UgVHJhbnNtaXQgQ29udHJvbCAqLwogCiAvKiBTUFJPTSBib2FyZGZsYWdzX2xvIHZhbHVlcyAqLwogI2RlZmluZSBCNDNfQkZMX0JUQ09FWElTVAkJMHgwMDAxCS8qIGltcGxlbWVudHMgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlICovCkBAIC01NDcsOSArNTUwLDYgQEAKIAogc3RydWN0IGI0M19zdGF0cyB7CiAJdTggbGlua19ub2lzZTsKLQkvKiBTdG9yZSB0aGUgbGFzdCBUWC9SWCB0aW1lcyBoZXJlIGZvciB1cGRhdGluZyB0aGUgbGVkcy4gKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfdHg7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3J4OwogfTsKIAogc3RydWN0IGI0M19rZXkgewpAQCAtNjU1LDEwICs2NTUsMzkgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl9hZGp1c3Rfd29yazsKIH07CiAKKy8qIFRoZSB0eXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlLiAqLworZW51bSBiNDNfZmlybXdhcmVfZmlsZV90eXBlIHsKKwlCNDNfRldUWVBFX1BST1BSSUVUQVJZLAorCUI0M19GV1RZUEVfT1BFTlNPVVJDRSwKKwlCNDNfTlJfRldUWVBFUywKK307CisKKy8qIENvbnRleHQgZGF0YSBmb3IgZmV0Y2hpbmcgZmlybXdhcmUuICovCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCB7CisJLyogVGhlIGRldmljZSB3ZSBhcmUgcmVxdWVzdGluZyB0aGUgZncgZm9yLiAqLworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKwkvKiBUaGUgdHlwZSBvZiBmaXJtd2FyZSB0byByZXF1ZXN0LiAqLworCWVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSByZXFfdHlwZTsKKwkvKiBFcnJvciBtZXNzYWdlcyBmb3IgZWFjaCBmaXJtd2FyZSB0eXBlLiAqLworCWNoYXIgZXJyb3JzW0I0M19OUl9GV1RZUEVTXVsxMjhdOworCS8qIFRlbXBvcmFyeSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIGZpcm13YXJlIG5hbWUuICovCisJY2hhciBmd25hbWVbNjRdOworCS8qIEEgZmF0YWwgZXJyb3Igb2NjdXJlZCB3aGlsZSByZXF1ZXN0aW5nLiBGaXJtd2FyZSByZXFlc3QKKwkgKiBjYW4gbm90IGNvbnRpbnVlLCBhcyBhbnkgb3RoZXIgcmVxZXN0IHdpbGwgYWxzbyBmYWlsLiAqLworCWludCBmYXRhbF9mYWlsdXJlOworfTsKKwogLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIGEgY2FjaGVkIG1pY3JvY29kZSBmaWxlLiAqLwogc3RydWN0IGI0M19maXJtd2FyZV9maWxlIHsKIAljb25zdCBjaGFyICpmaWxlbmFtZTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRhdGE7CisJLyogVHlwZSBvZiB0aGUgZmlybXdhcmUgZmlsZSBuYW1lLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG9ubHkgaW5kaWNhdGUKKwkgKiB0aGUgdHlwZSBieSB0aGUgZmlybXdhcmUgbmFtZS4gTk9UIHRoZSBmaWxlIGNvbnRlbnRzLgorCSAqIElmIHlvdSB3YW50IHRvIGNoZWNrIGZvciBwcm9wcmlldGFyeSB2cyBvcGVuc291cmNlLCB1c2UgKHN0cnVjdCBiNDNfZmlybXdhcmUpLT5vcGVuc291cmNlCisJICogaW5zdGVhZCEgVGhlIChzdHJ1Y3QgYjQzX2Zpcm13YXJlKS0+b3BlbnNvdXJjZSBmbGFnIGlzIGRlcml2ZWQgZnJvbSB0aGUgYWN0dWFsIGZpcm13YXJlCisJICogYmluYXJ5IGNvZGUsIG5vdCBqdXN0IHRoZSBmaWxlbmFtZS4KKwkgKi8KKwllbnVtIGI0M19maXJtd2FyZV9maWxlX3R5cGUgdHlwZTsKIH07CiAKIC8qIFBvaW50ZXJzIHRvIHRoZSBmaXJtd2FyZSBkYXRhIGFuZCBtZXRhIGluZm9ybWF0aW9uIGFib3V0IGl0LiAqLwpAQCAtNjc3LDcgKzcwNiw4IEBACiAJLyogRmlybXdhcmUgcGF0Y2hsZXZlbCAqLwogCXUxNiBwYXRjaDsKIAotCS8qIFNldCB0byB0cnVlLCBpZiB3ZSBhcmUgdXNpbmcgYW4gb3BlbnNvdXJjZSBmaXJtd2FyZS4gKi8KKwkvKiBTZXQgdG8gdHJ1ZSwgaWYgd2UgYXJlIHVzaW5nIGFuIG9wZW5zb3VyY2UgZmlybXdhcmUuCisJICogVXNlIHRoaXMgdG8gY2hlY2sgZm9yIHByb3ByaWV0YXJ5IHZzIG9wZW5zb3VyY2UuICovCiAJYm9vbCBvcGVuc291cmNlOwogCS8qIFNldCB0byB0cnVlLCBpZiB0aGUgY29yZSBuZWVkcyBhIFBDTSBmaXJtd2FyZSwgYnV0CiAJICogd2UgZmFpbGVkIHRvIGxvYWQgb25lLiBUaGlzIGlzIGFsd2F5cyBmYWxzZSBmb3IKQEAgLTg0OCwxMiArODc4LDkgQEAKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKIHZvaWQgYjQzd2FybihzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7Ci0jaWYgQjQzX0RFQlVHCiB2b2lkIGI0M2RiZyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7Ci0jZWxzZSAvKiBERUJVRyAqLwotIyBkZWZpbmUgYjQzZGJnKHdsLCBmbXQuLi4pIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQotI2VuZGlmIC8qIERFQlVHICovCisKIAogLyogQSBXQVJOX09OIHZhcmlhbnQgdGhhdCB2YW5pc2hlcyB3aGVuIGI0MyBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCiAgKiBUaGlzIF9hbHNvXyBldmFsdWF0ZXMgdGhlIGFyZyB3aXRoIGRlYnVnZ2luZyBkaXNhYmxlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCmluZGV4IGUwNGZjOTEuLjQ1ZTNkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwpAQCAtNTEsOCArNTEsOCBAQAogfTsKIAogc3RhdGljIGlubGluZQotc3RydWN0IGI0M19kZnNfZmlsZSAqIGZvcHNfdG9fZGZzX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyAqZGZvcHMpCitzdHJ1Y3QgYjQzX2Rmc19maWxlICpmb3BzX3RvX2Rmc19maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyAqZGZvcHMpCiB7CiAJdm9pZCAqcDsKIApAQCAtMzY3LDM0ICszNjcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiB3bC0+aXJxX2xvY2sgaXMgbG9ja2VkICovCi1zdGF0aWMgc3NpemVfdCB0c2ZfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKLXsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQl1NjQgdHNmOwotCi0JYjQzX3RzZl9yZWFkKGRldiwgJnRzZik7Ci0JZmFwcGVuZCgiMHglMDh4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludCkoKHRzZiAmIDB4RkZGRkZGRkYwMDAwMDAwMFVMTCkgPj4gMzIpLAotCQkodW5zaWduZWQgaW50KSh0c2YgJiAweEZGRkZGRkZGVUxMKSk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIHdsLT5pcnFfbG9jayBpcyBsb2NrZWQgKi8KLXN0YXRpYyBpbnQgdHNmX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1NjQgdHNmOwotCi0JaWYgKHNzY2FuZihidWYsICIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgmdHNmKSkgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYjQzX3RzZl93cml0ZShkZXYsIHRzZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3QgdHhzdGF0X3JlYWRfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkJY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKIHsKQEAgLTY5MSwxNSArNjYzLDIzIEBACiBCNDNfREVCVUdGU19GT1BTKG1taW8xNndyaXRlLCBOVUxMLCBtbWlvMTZ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKG1taW8zMnJlYWQsIG1taW8zMnJlYWRfX3JlYWRfZmlsZSwgbW1pbzMycmVhZF9fd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKG1taW8zMndyaXRlLCBOVUxMLCBtbWlvMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKHRzZiwgdHNmX3JlYWRfZmlsZSwgdHNmX3dyaXRlX2ZpbGUsIDEpOwogQjQzX0RFQlVHRlNfRk9QUyh0eHN0YXQsIHR4c3RhdF9yZWFkX2ZpbGUsIE5VTEwsIDApOwogQjQzX0RFQlVHRlNfRk9QUyhyZXN0YXJ0LCBOVUxMLCByZXN0YXJ0X3dyaXRlX2ZpbGUsIDEpOwogQjQzX0RFQlVHRlNfRk9QUyhsb2N0bHMsIGxvY3Rsc19yZWFkX2ZpbGUsIE5VTEwsIDApOwogCiAKLWludCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKK2Jvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCiB7Ci0JcmV0dXJuICEhKGRldi0+ZGZzZW50cnkgJiYgZGV2LT5kZnNlbnRyeS0+ZHluX2RlYnVnW2ZlYXR1cmVdKTsKKwlib29sIGVuYWJsZWQ7CisKKwllbmFibGVkID0gKGRldi0+ZGZzZW50cnkgJiYgZGV2LT5kZnNlbnRyeS0+ZHluX2RlYnVnW2ZlYXR1cmVdKTsKKwlpZiAodW5saWtlbHkoZW5hYmxlZCkpIHsKKwkJLyogRm9yY2UgZnVsbCBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGlmIHRoZSB1c2VyIGVuYWJsZWQKKwkJICogc29tZSBkeW5hbWljIGRlYnVnZ2luZyBmZWF0dXJlLiAqLworCQliNDNfbW9kcGFyYW1fdmVyYm9zZSA9IEI0M19WRVJCT1NJVFlfTUFYOworCX0KKworCXJldHVybiBlbmFibGVkOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfcmVtb3ZlX2R5bmFtaWNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtODA1LDcgKzc4NSw2IEBACiAJQUREX0ZJTEUobW1pbzE2d3JpdGUsIDAyMDApOwogCUFERF9GSUxFKG1taW8zMnJlYWQsIDA2MDApOwogCUFERF9GSUxFKG1taW8zMndyaXRlLCAwMjAwKTsKLQlBRERfRklMRSh0c2YsIDA2MDApOwogCUFERF9GSUxFKHR4c3RhdCwgMDQwMCk7CiAJQUREX0ZJTEUocmVzdGFydCwgMDIwMCk7CiAJQUREX0ZJTEUobG9jdGxzLCAwNDAwKTsKQEAgLTgzNCw3ICs4MTMsNiBAQAogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzE2d3JpdGUuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8zMnJlYWQuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8zMndyaXRlLmRlbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZmlsZV90c2YuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3R4c3RhdC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfcmVzdGFydC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbG9jdGxzLmRlbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAppbmRleCA3ODg2Y2JlLi5iOWQ0ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzE2d3JpdGU7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMnJlYWQ7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMndyaXRlOwotCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90c2Y7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3R4c3RhdDsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfdHhwb3dlcl9nOwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV9yZXN0YXJ0OwpAQCAtNzIsNyArNzEsNyBAQAogCXN0cnVjdCBkZW50cnkgKmR5bl9kZWJ1Z19kZW50cmllc1tfX0I0M19OUl9EWU5EQkddOwogfTsKIAotaW50IGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKTsKK2Jvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpOwogCiB2b2lkIGI0M19kZWJ1Z2ZzX2luaXQodm9pZCk7CiB2b2lkIGI0M19kZWJ1Z2ZzX2V4aXQodm9pZCk7CkBAIC04Myw3ICs4Miw3IEBACiAKICNlbHNlIC8qIENPTkZJR19CNDNfREVCVUcgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCitzdGF0aWMgaW5saW5lIGJvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggNmQ2NWEwMi4uMGNjODA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogCisvKiBSZXF1aXJlZCBudW1iZXIgb2YgVFggRE1BIHNsb3RzIHBlciBUWCBmcmFtZS4KKyAqIFRoaXMgY3VycmVudGx5IGlzIDIsIGJlY2F1c2Ugd2UgcHV0IHRoZSBoZWFkZXIgYW5kIHRoZSBpZWVlODAyMTEgZnJhbWUKKyAqIGludG8gc2VwYXJhdGUgc2xvdHMuICovCisjZGVmaW5lIFRYX1NMT1RTX1BFUl9GUkFNRQkyCisKKwogLyogMzJiaXQgRE1BIG9wcy4gKi8KIHN0YXRpYwogc3RydWN0IGI0M19kbWFkZXNjX2dlbmVyaWMgKm9wMzJfaWR4MmRlc2Moc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLApAQCAtNzQsOCArODAsNyBAQAogCWFkZHJleHQgPSAodTMyKSAoZG1hYWRkciAmIFNTQl9ETUFfVFJBTlNMQVRJT05fTUFTSykKIAkgICAgPj4gU1NCX0RNQV9UUkFOU0xBVElPTl9TSElGVDsKIAlhZGRyIHw9IHNzYl9kbWFfdHJhbnNsYXRpb24ocmluZy0+ZGV2LT5kZXYpOwotCWN0bCA9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JICAgICYgQjQzX0RNQTMyX0RDVExfQllURUNOVDsKKwljdGwgPSBidWZzaXplICYgQjQzX0RNQTMyX0RDVExfQllURUNOVDsKIAlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCiAJCWN0bCB8PSBCNDNfRE1BMzJfRENUTF9EVEFCTEVFTkQ7CiAJaWYgKHN0YXJ0KQpAQCAtMTc3LDggKzE4Miw3IEBACiAJCWN0bDAgfD0gQjQzX0RNQTY0X0RDVEwwX0ZSQU1FRU5EOwogCWlmIChpcnEpCiAJCWN0bDAgfD0gQjQzX0RNQTY0X0RDVEwwX0lSUTsKLQljdGwxIHw9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JICAgICYgQjQzX0RNQTY0X0RDVEwxX0JZVEVDTlQ7CisJY3RsMSB8PSBidWZzaXplICYgQjQzX0RNQTY0X0RDVEwxX0JZVEVDTlQ7CiAJY3RsMSB8PSAoYWRkcmV4dCA8PCBCNDNfRE1BNjRfRENUTDFfQUREUkVYVF9TSElGVCkKIAkgICAgJiBCNDNfRE1BNjRfRENUTDFfQUREUkVYVF9NQVNLOwogCkBAIC01NzYsMTIgKzU4MCwxMSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsCiAJCQkJCSByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKLQl9Ci0KLQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7Ci0JCWI0M2VycihyaW5nLT5kZXYtPndsLCAiUlggRE1BIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAtRUlPOworCQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7CisJCQliNDNlcnIocmluZy0+ZGV2LT53bCwgIlJYIERNQSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfQogCiAJbWV0YS0+c2tiID0gc2tiOwpAQCAtODMwLDkgKzgzMyw2IEBACiAJCWlmIChyaW5nLT5pbmRleCA9PSAwKSB7CiAJCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQjQzX0RNQTBfUlhfQlVGRkVSU0laRTsKIAkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQjQzX0RNQTBfUlhfRlJBTUVPRkZTRVQ7Ci0JCX0gZWxzZSBpZiAocmluZy0+aW5kZXggPT0gMykgewotCQkJcmluZy0+cnhfYnVmZmVyc2l6ZSA9IEI0M19ETUEzX1JYX0JVRkZFUlNJWkU7Ci0JCQlyaW5nLT5mcmFtZW9mZnNldCA9IEI0M19ETUEzX1JYX0ZSQU1FT0ZGU0VUOwogCQl9IGVsc2UKIAkJCUI0M19XQVJOX09OKDEpOwogCX0KQEAgLTg0Miw3ICs4NDIsMTAgQEAKICNlbmRpZgogCiAJaWYgKGZvcl90eCkgewotCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMsCisJCS8qIEFzc3VtcHRpb246IEI0M19UWFJJTkdfU0xPVFMgY2FuIGJlIGRpdmlkZWQgYnkgVFhfU0xPVFNfUEVSX0ZSQU1FICovCisJCUJVSUxEX0JVR19PTihCNDNfVFhSSU5HX1NMT1RTICUgVFhfU0xPVFNfUEVSX0ZSQU1FICE9IDApOworCisJCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhyaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRSwKIAkJCQkJICAgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKQEAgLTg1OCw3ICs4NjEsNyBAQAogCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksIDEpKSB7CiAJCQkvKiB1Z2ggcmVhbGxvYyAqLwogCQkJa2ZyZWUocmluZy0+dHhoZHJfY2FjaGUpOwotCQkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzLAorCQkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FLAogCQkJCQkJICAgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCQkgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCQkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKQEAgLTExNDksNyArMTE1MiwxMCBAQAogCXUxNiBjb29raWU7CiAJc2l6ZV90IGhkcnNpemUgPSBiNDNfdHhoZHJfc2l6ZShyaW5nLT5kZXYpOwogCi0jZGVmaW5lIFNMT1RTX1BFUl9QQUNLRVQgIDIKKwkvKiBJbXBvcnRhbnQgbm90ZTogSWYgdGhlIG51bWJlciBvZiB1c2VkIERNQSBzbG90cyBwZXIgVFggZnJhbWUKKwkgKiBpcyBjaGFuZ2VkIGhlcmUsIHRoZSBUWF9TTE9UU19QRVJfRlJBTUUgZGVmaW5pdGlvbiBhdCB0aGUgdG9wIG9mCisJICogdGhlIGZpbGUgaGFzIHRvIGJlIHVwZGF0ZWQsIHRvbyEKKwkgKi8KIAogCW9sZF90b3Bfc2xvdCA9IHJpbmctPmN1cnJlbnRfc2xvdDsKIAlvbGRfdXNlZF9zbG90cyA9IHJpbmctPnVzZWRfc2xvdHM7CkBAIC0xMTU5LDcgKzExNjUsNyBAQAogCWRlc2MgPSBvcHMtPmlkeDJkZXNjKHJpbmcsIHNsb3QsICZtZXRhX2hkcik7CiAJbWVtc2V0KG1ldGFfaGRyLCAwLCBzaXplb2YoKm1ldGFfaGRyKSk7CiAKLQloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlW3Nsb3QgKiBoZHJzaXplXSk7CisJaGVhZGVyID0gJihyaW5nLT50eGhkcl9jYWNoZVsoc2xvdCAvIFRYX1NMT1RTX1BFUl9GUkFNRSkgKiBoZHJzaXplXSk7CiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKIAkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgaW5mbywgY29va2llKTsKQEAgLTEyNTQsOCArMTI2MCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgRE1BIHJpbmdzLiAqLwotc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqIHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICB1OCBxdWV1ZV9wcmlvKQorc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgdTggcXVldWVfcHJpbykKIHsKIAlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmc7CiAKQEAgLTEzMDYsMTcgKzEzMTIsMTkgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCiAJQjQzX1dBUk5fT04oIXJpbmctPnR4KTsKLQlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpKSB7Ci0JCWI0M3dhcm4oZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7Ci0JCWVyciA9IC1FTk9TUEM7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiAJLyogQ2hlY2sgaWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGluIG1hYzgwMjExLAogCSAqIGJ1dCB3ZSBnb3QgY2FsbGVkIG5ldmVydGhlbGVzcy4KIAkgKiBUaGF0IHdvdWxkIGJlIGEgbWFjODAyMTEgYnVnLiAqLwogCUI0M19XQVJOX09OKHJpbmctPnN0b3BwZWQpOwogCisJaWYgKHVubGlrZWx5KGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpKSB7CisJCWI0M3dhcm4oZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7CisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCiAJICogc28gVFggc3RhdHVzIGhhbmRsaW5nIGNhbiB1c2UgaXQuIFRoZSBxdWV1ZSB0byByaW5nIG1hcHBpbmcgaXMKIAkgKiBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgaXQgcGVyIGZyYW1lLiAqLwpAQCAtMTMzNSw3ICsxMzQzLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAlyaW5nLT5ucl90eF9wYWNrZXRzKys7Ci0JaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkgfHwKKwlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpIHx8CiAJICAgIHNob3VsZF9pbmplY3Rfb3ZlcmZsb3cocmluZykpIHsKIAkJLyogVGhpcyBUWCByaW5nIGlzIGZ1bGwuICovCiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldi0+d2wtPmh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CkBAIC0xNDE3LDkgKzE0MjUsOCBAQAogCQkJYnJlYWs7CiAJCXNsb3QgPSBuZXh0X3Nsb3QocmluZywgc2xvdCk7CiAJfQotCWRldi0+c3RhdHMubGFzdF90eCA9IGppZmZpZXM7CiAJaWYgKHJpbmctPnN0b3BwZWQpIHsKLQkJQjQzX1dBUk5fT04oZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpOworCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKTsKIAkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LT53bC0+aHcsIHJpbmctPnF1ZXVlX3ByaW8pOwogCQlyaW5nLT5zdG9wcGVkID0gMDsKIAkJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfRE1BVkVSQk9TRSkpIHsKQEAgLTE0NDIsOCArMTQ0OSw4IEBACiAJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKKwkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKKwkJc3RhdHNbaV0ubGltaXQgPSByaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKIAkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGQxZWI1YzAuLjA1ZGRlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTEsMTQgKzEsMTIgQEAKICNpZm5kZWYgQjQzX0RNQV9IXwogI2RlZmluZSBCNDNfRE1BX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjaW5jbHVkZSAiYjQzLmgiCiAKKwogLyogRE1BLUludGVycnVwdCByZWFzb25zLiAqLwogI2RlZmluZSBCNDNfRE1BSVJRX0ZBVEFMTUFTSwkoKDEgPDwgMTApIHwgKDEgPDwgMTEpIHwgKDEgPDwgMTIpIFwKIAkJCQkJIHwgKDEgPDwgMTQpIHwgKDEgPDwgMTUpKQpAQCAtMTYxLDE0ICsxNTksMTMgQEAKIAogLyogTWlzYyBETUEgY29uc3RhbnRzICovCiAjZGVmaW5lIEI0M19ETUFfUklOR01FTVNJWkUJCVBBR0VfU0laRQotI2RlZmluZSBCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVAkzMAotI2RlZmluZSBCNDNfRE1BM19SWF9GUkFNRU9GRlNFVAkwCisjZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCQkzMAogCiAvKiBETUEgZW5naW5lIHR1bmluZyBrbm9icyAqLwotI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkxMjgKKyNkZWZpbmUgQjQzX1RYUklOR19TTE9UUwkJMjU2CiAjZGVmaW5lIEI0M19SWFJJTkdfU0xPVFMJCTY0Ci0jZGVmaW5lIEI0M19ETUEwX1JYX0JVRkZFUlNJWkUJKDIzMDQgKyAxMDApCi0jZGVmaW5lIEI0M19ETUEzX1JYX0JVRkZFUlNJWkUJMTYKKyNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkJSUVFRTgwMjExX01BWF9GUkFNRV9MRU4KKwogCiBzdHJ1Y3Qgc2tfYnVmZjsKIHN0cnVjdCBiNDNfcHJpdmF0ZTsKQEAgLTIxNSw3ICsyMTIsNyBAQAogCXZvaWQgKmRlc2NiYXNlOwogCS8qIE1ldGEgZGF0YSBhYm91dCBhbGwgZGVzY3JpcHRvcnMuICovCiAJc3RydWN0IGI0M19kbWFkZXNjX21ldGEgKm1ldGE7Ci0JLyogQ2FjaGUgb2YgVFggaGVhZGVycyBmb3IgZWFjaCBzbG90LgorCS8qIENhY2hlIG9mIFRYIGhlYWRlcnMgZm9yIGVhY2ggVFggZnJhbWUuCiAJICogVGhpcyBpcyB0byBhdm9pZCBhbiBhbGxvY2F0aW9uIG9uIGVhY2ggVFguCiAJICogVGhpcyBpcyBOVUxMIGZvciBhbiBSWCByaW5nLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYwppbmRleCA2YTE4YTE0Li4yMmQwZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYwpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIAotc3RhdGljIHN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfZmluZF9sb19jYWxpYihzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8sCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKK3N0YXRpYyBzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfZmluZF9sb19jYWxpYihzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8sCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19sb19jYWxpYiAqYzsKQEAgLTEzOCw3ICsxMzgsNyBAQAogICogInBhZF9taXhfZ2FpbiIgaXMgdGhlIFBBRCBNaXhlciBHYWluLgogICovCiBzdGF0aWMgdTE2IGxvX3R4Y3RsX3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICB1MTYgKiB2YWx1ZSwgdTE2ICogcGFkX21peF9nYWluKQorCQkJCSAgIHUxNiAqdmFsdWUsIHUxNiAqcGFkX21peF9nYWluKQogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJdTE2IHJlZywgdiwgcGFkbWl4OwpAQCAtMjI1LDE0ICsyMjUsMTIgQEAKIAkJCQlyYWRpb19wY3RsX3JlZyA9IHRtcDsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkgICAgICAmIDB4RkZGMCkgfCByYWRpb19wY3RsX3JlZyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIHJhZGlvX3BjdGxfcmVnKTsKIAliNDNfZ3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oZGV2LCAyKTsKIAogCXJlZyA9IGxvX3R4Y3RsX3JlZ2lzdGVyX3RhYmxlKGRldiwgJm1hc2ssIE5VTEwpOwogCW1hc2sgPSB+bWFzazsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHJlZywgYjQzX3JhZGlvX3JlYWQxNihkZXYsIHJlZykKLQkJCSAgJiBtYXNrKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIHJlZywgbWFzayk7CiAKIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQlpbnQgaSwgajsKQEAgLTI0MiwxNCArMjQwLDEwIEBACiAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHhfbWFnbl92YWx1ZXMpOyBpKyspIHsKIAkJCXR4X21hZ24gPSB0eF9tYWduX3ZhbHVlc1tpXTsKLQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwKLQkJCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCSAgICYgMHhGRjBGKSB8IHR4X21hZ24pOworCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGMEYsIHR4X21hZ24pOwogCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUodHhfYmlhc192YWx1ZXMpOyBqKyspIHsKIAkJCQl0eF9iaWFzID0gdHhfYmlhc192YWx1ZXNbal07Ci0JCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCQkgICAmIDB4RkZGMCkgfCB0eF9iaWFzKTsKKwkJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkZGMCwgdHhfYmlhcyk7CiAJCQkJZmVlZHRocm91Z2ggPQogCQkJCSAgICBsb19tZWFzdXJlX2ZlZWR0aHJvdWdoKGRldiwgMCwgcGdhLAogCQkJCQkJCSAgIHRyc3dfcngpOwpAQCAtMjY5LDggKzI2Myw3IEBACiAJfSBlbHNlIHsKIAkJbG8tPnR4X21hZ24gPSAwOwogCQlsby0+dHhfYmlhcyA9IDA7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJICAmIDB4RkZGMCk7CS8qIFRYIGJpYXMgPT0gMCAqLworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4NTIsIDB4RkZGMCk7CS8qIFRYIGJpYXMgPT0gMCAqLwogCX0KIAlsby0+dHhjdGxfbWVhc3VyZWRfdGltZSA9IGppZmZpZXM7CiB9CkBAIC00MDYsMTggKzM5OSwxMCBAQAogCQlzYXYtPnBoeV9jY2tfMTQgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSk7CiAJCXNhdi0+cGh5X2hwd3JfdHNzaWN0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0hQV1JfVFNTSUNUTCkKLQkJCSAgICAgIHwgMHgxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpKQotCQkJICAgICAgfCAweDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfREFDQ1RMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9EQUNDVEwpCi0JCQkgICAgICB8IDB4NDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgxNCksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSkKLQkJCSAgICAgIHwgMHgyMDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMLCAweDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLCAweDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHg0MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgxNCksIDB4MjAwKTsKIAl9CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CICYmCiAJICAgIHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA8IDYpIHsKQEAgLTQzNCwxNyArNDE5LDEwIEBACiAJCXNhdi0+cGh5X2Nja18zRSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4M0UpKTsKIAkJc2F2LT5waHlfY3JzMCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ1JTMCwgMHg3RkZGKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsIDB4MDAwMyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwgMHhGRkZDKTsKIAkJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSB7CiAJCQlpZiAoKHBoeS0+cmV2ID49IDcpICYmCiAJCQkgICAgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9FWFRMTkEpKSB7CkBAIC01NTgsOCArNTM2LDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIHNhdi0+cmFkaW9fN0EpOwogCWlmICghaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQl0bXAgPSBzYXYtPnJhZGlvXzUyOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGMEYpIHwgdG1wKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGMEYsIHRtcCk7CiAJfQogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIHNhdi0+cmVnXzNFMik7CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CICYmCkBAIC03NTQsOSArNzMxLDkgQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX2xvX2NhbGliICogYjQzX2NhbGlicmF0ZV9sb19zZXR0aW5nKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCitzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAlzdHJ1Y3QgYjQzX3BoeV9nICpncGh5ID0gcGh5LT5nOwpAQCAtNzc4LDEyICs3NTUsOCBAQAogCiAJdHhjdGxfcmVnID0gbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoZGV2LCAmdHhjdGxfdmFsdWUsICZwYWRfbWl4X2dhaW4pOwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpICYgMHhGRkYwKQotCQkJICB8IHJmYXR0LT5hdHQpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgdHhjdGxfcmVnLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIHR4Y3RsX3JlZykgJiB+dHhjdGxfdmFsdWUpCi0JCQkgIHwgKHJmYXR0LT53aXRoX3BhZG1peCkgPyB0eGN0bF92YWx1ZSA6IDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCByZmF0dC0+YXR0KTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIHR4Y3RsX3JlZywgfnR4Y3RsX3ZhbHVlLCAocmZhdHQtPndpdGhfcGFkbWl4ID8gdHhjdGxfdmFsdWUgOjApKTsKIAogCW1heF9yeF9nYWluID0gcmZhdHQtPmF0dCAqIDI7CiAJbWF4X3J4X2dhaW4gKz0gYmJhdHQtPmF0dCAvIDI7CkBAIC04MjQsOSArNzk3LDkgQEAKIC8qIEdldCBhIGNhbGlicmF0ZWQgTE8gc2V0dGluZyBmb3IgdGhlIGdpdmVuIGF0dGVudWF0aW9uIHZhbHVlcy4KICAqIE1pZ2h0IHJldHVybiBhIE5VTEwgcG9pbnRlciB1bmRlciBPT00hICovCiBzdGF0aWMKLXN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCWNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCQkJY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCitzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M190eHBvd2VyX2xvX2NvbnRyb2wgKmxvID0gZGV2LT5waHkuZy0+bG9fY29udHJvbDsKIAlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggYzc4OGJhZC4uNDg5NmUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC00LDcgKzQsNyBAQAogCiAgIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4KICAgQ29weXJpZ2h0IChjKSAyMDA1IFN0ZWZhbm8gQnJpdmlvIDxzdGVmYW5vLmJyaXZpb0Bwb2xpbWkuaXQ+Ci0gIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogICBDb3B5cmlnaHQgKGMpIDIwMDUgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+CiAgIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KIApAQCAtODgsNiArODgsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChidGNvZXgsIG1vZHBhcmFtX2J0Y29leCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnRjb2V4LCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0YW5jZSAoZGVmYXVsdCBvbikiKTsKIAoraW50IGI0M19tb2RwYXJhbV92ZXJib3NlID0gQjQzX1ZFUkJPU0lUWV9ERUZBVUxUOworbW9kdWxlX3BhcmFtX25hbWVkKHZlcmJvc2UsIGI0M19tb2RwYXJhbV92ZXJib3NlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2ZXJib3NlLCAiTG9nIG1lc3NhZ2UgdmVyYm9zaXR5OiAwPWVycm9yLCAxPXdhcm4sIDI9aW5mbyhkZWZhdWx0KSwgMz1kZWJ1ZyIpOworCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NiX2RldmljZV9pZCBiNDNfc3NiX3RibFtdID0gewogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgNSksCkBAIC05Nyw2ICsxMDEsOCBAQAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTApLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTEpLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTMpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTUpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTYpLAogCVNTQl9ERVZUQUJMRV9FTkQKIH07CiAKQEAgLTI5OCw2ICszMDQsOCBAQAogewogCXZhX2xpc3QgYXJnczsKIAorCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfSU5GTykKKwkJcmV0dXJuOwogCWlmICghYjQzX3JhdGVsaW1pdCh3bCkpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwpAQCAtMzExLDYgKzMxOSw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9FUlJPUikKKwkJcmV0dXJuOwogCWlmICghYjQzX3JhdGVsaW1pdCh3bCkpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwpAQCAtMzI0LDYgKzMzNCw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9XQVJOKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMzMsMTggKzM0NSwxOCBAQAogCXZhX2VuZChhcmdzKTsKIH0KIAotI2lmIEI0M19ERUJVRwogdm9pZCBiNDNkYmcoc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKIAorCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfREVCVUcpCisJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCXByaW50ayhLRVJOX0RFQlVHICJiNDMtJXMgZGVidWc6ICIsCiAJICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIik7CiAJdnByaW50ayhmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIH0KLSNlbmRpZiAvKiBERUJVRyAqLwogCiBzdGF0aWMgdm9pZCBiNDNfcmFtX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgdTMyIHZhbCkKIHsKQEAgLTUwMCw3ICs1MTIsNyBAQAogfQogCiAvKiBSZWFkIEhvc3RGbGFncyAqLwotdTY0IGI0M19oZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKiBkZXYpCit1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXU2NCByZXQ7CiAKQEAgLTUyNiw1MiArNTM4LDIwIEBACiAJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfSE9TVEZISSwgaGkpOwogfQogCi12b2lkIGI0M190c2ZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCAqIHRzZikKK3ZvaWQgYjQzX3RzZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0ICp0c2YpCiB7Ci0JLyogV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBBcyB3ZSByZWFkIHRoZSBUU0YgZnJvbSBtdWx0aXBsZQotCSAqIHJlZ2lzdGVycywgd2Ugc2hvdWxkIHRha2UgY2FyZSBvZiByZWdpc3RlciBvdmVyZmxvd3MuCi0JICogSW4gdGhlb3J5LCB0aGUgd2hvbGUgdHNmIHJlYWQgcHJvY2VzcyBzaG91bGQgYmUgYXRvbWljLgotCSAqIFdlIHRyeSB0byBiZSBhdG9taWMgaGVyZSwgYnkgcmVzdGFyaW5nIHRoZSByZWFkIHByb2Nlc3MsCi0JICogaWYgYW55IG9mIHRoZSBoaWdoIHJlZ2lzdGVycyBjaGFuZ2VkIChvdmVyZmxldykuCi0JICovCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7Ci0JCXUzMiBsb3csIGhpZ2gsIGhpZ2gyOworCXUzMiBsb3csIGhpZ2g7CiAKLQkJZG8gewotCQkJaGlnaCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCQlsb3cgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVyk7Ci0JCQloaWdoMiA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCX0gd2hpbGUgKHVubGlrZWx5KGhpZ2ggIT0gaGlnaDIpKTsKKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCAzKTsKIAotCQkqdHNmID0gaGlnaDsKLQkJKnRzZiA8PD0gMzI7Ci0JCSp0c2YgfD0gbG93OwotCX0gZWxzZSB7Ci0JCXU2NCB0bXA7Ci0JCXUxNiB2MCwgdjEsIHYyLCB2MzsKLQkJdTE2IHRlc3QxLCB0ZXN0MiwgdGVzdDM7CisJLyogVGhlIGhhcmR3YXJlIGd1YXJhbnRlZXMgdXMgYW4gYXRvbWljIHJlYWQsIGlmIHdlCisJICogcmVhZCB0aGUgbG93IHJlZ2lzdGVyIGZpcnN0LiAqLworCWxvdyA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XKTsKKwloaWdoID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKIAotCQlkbyB7Ci0JCQl2MyA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMyk7Ci0JCQl2MiA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMik7Ci0JCQl2MSA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMSk7Ci0JCQl2MCA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMCk7Ci0KLQkJCXRlc3QzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8zKTsKLQkJCXRlc3QyID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8yKTsKLQkJCXRlc3QxID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8xKTsKLQkJfSB3aGlsZSAodjMgIT0gdGVzdDMgfHwgdjIgIT0gdGVzdDIgfHwgdjEgIT0gdGVzdDEpOwotCi0JCSp0c2YgPSB2MzsKLQkJKnRzZiA8PD0gNDg7Ci0JCXRtcCA9IHYyOwotCQl0bXAgPDw9IDMyOwotCQkqdHNmIHw9IHRtcDsKLQkJdG1wID0gdjE7Ci0JCXRtcCA8PD0gMTY7Ci0JCSp0c2YgfD0gdG1wOwotCQkqdHNmIHw9IHYwOwotCX0KKwkqdHNmID0gaGlnaDsKKwkqdHNmIDw8PSAzMjsKKwkqdHNmIHw9IGxvdzsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3RpbWVfbG9jayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01OTgsMzUgKzU3OCwxOCBAQAogCiBzdGF0aWMgdm9pZCBiNDNfdHNmX3dyaXRlX2xvY2tlZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB0c2YpCiB7Ci0JLyogQmUgY2FyZWZ1bCB3aXRoIHRoZSBpbi1wcm9ncmVzcyB0aW1lci4KLQkgKiBGaXJzdCB6ZXJvIG91dCB0aGUgbG93IHJlZ2lzdGVyLCBzbyB3ZSBoYXZlIGEgZnVsbAotCSAqIHJlZ2lzdGVyLW92ZXJmbG93IGR1cmF0aW9uIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCi0JICovCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7Ci0JCXUzMiBsbyA9ICh0c2YgJiAweDAwMDAwMDAwRkZGRkZGRkZVTEwpOwotCQl1MzIgaGkgPSAodHNmICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKKwl1MzIgbG93LCBoaWdoOwogCi0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgMCk7Ci0JCW1taW93YigpOwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdILCBoaSk7Ci0JCW1taW93YigpOwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1csIGxvKTsKLQl9IGVsc2UgewotCQl1MTYgdjAgPSAodHNmICYgMHgwMDAwMDAwMDAwMDBGRkZGVUxMKTsKLQkJdTE2IHYxID0gKHRzZiAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTCkgPj4gMTY7Ci0JCXUxNiB2MiA9ICh0c2YgJiAweDAwMDBGRkZGMDAwMDAwMDBVTEwpID4+IDMyOwotCQl1MTYgdjMgPSAodHNmICYgMHhGRkZGMDAwMDAwMDAwMDAwVUxMKSA+PiA0ODsKKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCAzKTsKIAotCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1RTRl8wLCAwKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzMsIHYzKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzIsIHYyKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzEsIHYxKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzAsIHYwKTsKLQl9CisJbG93ID0gdHNmOworCWhpZ2ggPSAodHNmID4+IDMyKTsKKwkvKiBUaGUgaGFyZHdhcmUgZ3VhcmFudGVlcyB1cyBhbiBhdG9taWMgd3JpdGUsIGlmIHdlCisJICogd3JpdGUgdGhlIGxvdyByZWdpc3RlciBmaXJzdC4gKi8KKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1csIGxvdyk7CisJbW1pb3diKCk7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCwgaGlnaCk7CisJbW1pb3diKCk7CiB9CiAKIHZvaWQgYjQzX3RzZl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB0c2YpCkBAIC02MzcsNyArNjAwLDcgQEAKIH0KIAogc3RhdGljCi12b2lkIGI0M19tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgY29uc3QgdTggKiBtYWMpCit2b2lkIGI0M19tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgY29uc3QgdTggKm1hYykKIHsKIAlzdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXSA9IHsgMCB9OwogCXUxNiBkYXRhOwpAQCAtODI3LDcgKzc5MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGtleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCSAgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sIGNvbnN0IHU4ICoga2V5KQorCQkgICAgICB1OCBpbmRleCwgdTggYWxnb3JpdGhtLCBjb25zdCB1OCAqa2V5KQogewogCXVuc2lnbmVkIGludCBpOwogCXUzMiBvZmZzZXQ7CkBAIC04NDksNyArODEyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGtleW1hY193cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGluZGV4LCBjb25zdCB1OCAqIGFkZHIpCitzdGF0aWMgdm9pZCBrZXltYWNfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgY29uc3QgdTggKmFkZHIpCiB7CiAJdTMyIGFkZHJ0bXBbMl0gPSB7IDAsIDAsIH07CiAJdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKQEAgLTg5OSw3ICs4NjIsNyBAQAogCiBzdGF0aWMgdm9pZCBkb19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgY29uc3QgdTggKiBrZXksIHNpemVfdCBrZXlfbGVuLCBjb25zdCB1OCAqIG1hY19hZGRyKQorCQkJIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLCBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJdTggYnVmW0I0M19TRUNfS0VZU0laRV0gPSB7IDAsIH07CiAJdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKQEAgLTkyMyw4ICs4ODYsOCBAQAogCiBzdGF0aWMgaW50IGI0M19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIGludCBpbmRleCwgdTggYWxnb3JpdGhtLAotCQkJIGNvbnN0IHU4ICoga2V5LCBzaXplX3Qga2V5X2xlbiwKLQkJCSBjb25zdCB1OCAqIG1hY19hZGRyLAorCQkJIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAorCQkJIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mKQogewogCWludCBpOwpAQCAtOTM3LDggKzkwMCw3IEBACiAJCUI0M19XQVJOX09OKGRldi0+a2V5W2ldLmtleWNvbmYgPT0ga2V5Y29uZik7CiAJfQogCWlmIChpbmRleCA8IDApIHsKLQkJLyogRWl0aGVyIHBhaXJ3aXNlIGtleSBvciBhZGRyZXNzIGlzIDAwOjAwOjAwOjAwOjAwOjAwCi0JCSAqIGZvciB0cmFuc21pdC1vbmx5IGtleXMuIFNlYXJjaCB0aGUgaW5kZXguICovCisJCS8qIFBhaXJ3aXNlIGtleS4gR2V0IGFuIGVtcHR5IHNsb3QgZm9yIHRoZSBrZXkuICovCiAJCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpCiAJCQlzdGFfa2V5c19zdGFydCA9IDQ7CiAJCWVsc2UKQEAgLTk1MSw3ICs5MTMsNyBAQAogCQkJfQogCQl9CiAJCWlmIChpbmRleCA8IDApIHsKLQkJCWI0M2VycihkZXYtPndsLCAiT3V0IG9mIGhhcmR3YXJlIGtleSBtZW1vcnlcbiIpOworCQkJYjQzd2FybihkZXYtPndsLCAiT3V0IG9mIGhhcmR3YXJlIGtleSBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAl9IGVsc2UKQEAgLTEzMjQsNyArMTI4Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGI0M193cml0ZV90ZW1wbGF0ZV9jb21tb24oc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgIGNvbnN0IHU4ICogZGF0YSwgdTE2IHNpemUsCisJCQkJICAgICAgY29uc3QgdTggKmRhdGEsIHUxNiBzaXplLAogCQkJCSAgICAgIHUxNiByYW1fb2Zmc2V0LAogCQkJCSAgICAgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsIHU4IHJhdGUpCiB7CkBAIC0xNTE0LDkgKzE0NzYsOSBAQAogICogMikgUGF0Y2hpbmcgZHVyYXRpb24gZmllbGQKICAqIDMpIFN0cmlwcGluZyBUSU0KICAqLwotc3RhdGljIGNvbnN0IHU4ICogYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgIHUxNiAqZGVzdF9zaXplLAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKK3N0YXRpYyBjb25zdCB1OCAqYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgdTE2ICpkZXN0X3NpemUsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7CiAJY29uc3QgdTggKnNyY19kYXRhOwogCXU4ICpkZXN0X2RhdGE7CkBAIC0xOTgyLDcgKzE5NDQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKIHsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3LT5kYXRhKTsKIAlmdy0+ZGF0YSA9IE5VTEw7CkBAIC0xOTkxLDMxICsxOTUzLDMwIEBACiAKIHN0YXRpYyB2b2lkIGI0M19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnVjb2RlKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnBjbSk7Ci0JZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFscyk7Ci0JZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFsc19iYW5kKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy51Y29kZSk7CisJYjQzX2RvX3JlbGVhc2VfZncoJmRldi0+ZncucGNtKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFscyk7CisJYjQzX2RvX3JlbGVhc2VfZncoJmRldi0+ZncuaW5pdHZhbHNfYmFuZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19wcmludF9md19oZWxwdGV4dChzdHJ1Y3QgYjQzX3dsICp3bCwgYm9vbCBlcnJvcikKIHsKLQljb25zdCBjaGFyICp0ZXh0OworCWNvbnN0IGNoYXIgdGV4dFtdID0KKwkJIllvdSBtdXN0IGdvIHRvICIgXAorCQkiaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9iNDMjZGV2aWNlZmlybXdhcmUgIiBcCisJCSJhbmQgZG93bmxvYWQgdGhlIGNvcnJlY3QgZmlybXdhcmUgZm9yIHRoaXMgZHJpdmVyIHZlcnNpb24uICIgXAorCQkiUGxlYXNlIGNhcmVmdWxseSByZWFkIGFsbCBpbnN0cnVjdGlvbnMgb24gdGhpcyB3ZWJzaXRlLlxuIjsKIAotCXRleHQgPSAiWW91IG11c3QgZ28gdG8gIgotCSAgICAgICAiaHR0cDovL2xpbnV4d2lyZWxlc3Mub3JnL2VuL3VzZXJzL0RyaXZlcnMvYjQzI2RldmljZWZpcm13YXJlICIKLQkgICAgICAgImFuZCBkb3dubG9hZCB0aGUgbGF0ZXN0IGZpcm13YXJlICh2ZXJzaW9uIDQpLlxuIjsKIAlpZiAoZXJyb3IpCiAJCWI0M2Vycih3bCwgdGV4dCk7CiAJZWxzZQogCQliNDN3YXJuKHdsLCB0ZXh0KTsKIH0KIAotc3RhdGljIGludCBkb19yZXF1ZXN0X2Z3KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSBjb25zdCBjaGFyICpuYW1lLAotCQkJIHN0cnVjdCBiNDNfZmlybXdhcmVfZmlsZSAqZncsCi0JCQkgYm9vbCBzaWxlbnQpCitpbnQgYjQzX2RvX3JlcXVlc3RfZncoc3RydWN0IGI0M19yZXF1ZXN0X2Z3X2NvbnRleHQgKmN0eCwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKIHsKLQljaGFyIHBhdGhbc2l6ZW9mKG1vZHBhcmFtX2Z3cG9zdGZpeCkgKyAzMl07CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpibG9iOwogCXN0cnVjdCBiNDNfZndfaGVhZGVyICpoZHI7CiAJdTMyIHNpemU7CkBAIC0yMDIzLDI5ICsxOTg0LDQ5IEBACiAKIAlpZiAoIW5hbWUpIHsKIAkJLyogRG9uJ3QgZmV0Y2ggYW55dGhpbmcuIEZyZWUgcG9zc2libHkgY2FjaGVkIGZpcm13YXJlLiAqLwotCQlkb19yZWxlYXNlX2Z3KGZ3KTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBrZWVwIGl0IGFueXdheSwgdG8gc2F2ZSBzb21lIGhlYWRhY2hlCisJCSAqIG9uIHN1c3BlbmQvcmVzdW1lIHdpdGggbXVsdGliYW5kIGRldmljZXMuICovCisJCWI0M19kb19yZWxlYXNlX2Z3KGZ3KTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChmdy0+ZmlsZW5hbWUpIHsKLQkJaWYgKHN0cmNtcChmdy0+ZmlsZW5hbWUsIG5hbWUpID09IDApCisJCWlmICgoZnctPnR5cGUgPT0gY3R4LT5yZXFfdHlwZSkgJiYKKwkJICAgIChzdHJjbXAoZnctPmZpbGVuYW1lLCBuYW1lKSA9PSAwKSkKIAkJCXJldHVybiAwOyAvKiBBbHJlYWR5IGhhdmUgdGhpcyBmdy4gKi8KIAkJLyogRnJlZSB0aGUgY2FjaGVkIGZpcm13YXJlIGZpcnN0LiAqLwotCQlkb19yZWxlYXNlX2Z3KGZ3KTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlzIGxhdGVyIGFmdGVyIHdlIHN1Y2Nlc3NmdWxseQorCQkgKiBnb3QgdGhlIG5ldyBmdy4gVGhpcyBjb3VsZCByZWR1Y2UgaGVhZGFjaGUgd2l0aCBtdWx0aWJhbmQgZGV2aWNlcy4KKwkJICogV2UgY291bGQgYWxzbyByZWRlc2lnbiB0aGlzIHRvIGNhY2hlIHRoZSBmaXJtd2FyZSBmb3IgYWxsIHBvc3NpYmxlCisJCSAqIGJhbmRzIGFsbCB0aGUgdGltZS4gKi8KKwkJYjQzX2RvX3JlbGVhc2VfZncoZncpOwogCX0KIAotCXNucHJpbnRmKHBhdGgsIEFSUkFZX1NJWkUocGF0aCksCi0JCSAiYjQzJXMvJXMuZnciLAotCQkgbW9kcGFyYW1fZndwb3N0Zml4LCBuYW1lKTsKLQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZibG9iLCBwYXRoLCBkZXYtPmRldi0+ZGV2KTsKKwlzd2l0Y2ggKGN0eC0+cmVxX3R5cGUpIHsKKwljYXNlIEI0M19GV1RZUEVfUFJPUFJJRVRBUlk6CisJCXNucHJpbnRmKGN0eC0+ZnduYW1lLCBzaXplb2YoY3R4LT5md25hbWUpLAorCQkJICJiNDMlcy8lcy5mdyIsCisJCQkgbW9kcGFyYW1fZndwb3N0Zml4LCBuYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRldUWVBFX09QRU5TT1VSQ0U6CisJCXNucHJpbnRmKGN0eC0+ZnduYW1lLCBzaXplb2YoY3R4LT5md25hbWUpLAorCQkJICJiNDMtb3BlbiVzLyVzLmZ3IiwKKwkJCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmJsb2IsIGN0eC0+ZnduYW1lLCBjdHgtPmRldi0+ZGV2LT5kZXYpOwogCWlmIChlcnIgPT0gLUVOT0VOVCkgewotCQlpZiAoIXNpbGVudCkgewotCQkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBub3QgZm91bmRcbiIsCi0JCQkgICAgICAgcGF0aCk7Ci0JCX0KKwkJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJCSAiRmlybXdhcmUgZmlsZSBcIiVzXCIgbm90IGZvdW5kXG4iLCBjdHgtPmZ3bmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfSBlbHNlIGlmIChlcnIpIHsKLQkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiByZXF1ZXN0IGZhaWxlZCAoZXJyPSVkKVxuIiwKLQkJICAgICAgIHBhdGgsIGVycik7CisJCXNucHJpbnRmKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdLAorCQkJIHNpemVvZihjdHgtPmVycm9yc1tjdHgtPnJlcV90eXBlXSksCisJCQkgIkZpcm13YXJlIGZpbGUgXCIlc1wiIHJlcXVlc3QgZmFpbGVkIChlcnI9JWQpXG4iLAorCQkJIGN0eC0+ZnduYW1lLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoYmxvYi0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgYjQzX2Z3X2hlYWRlcikpCkBAIC0yMDY4LDIwICsyMDQ5LDI0IEBACiAKIAlmdy0+ZGF0YSA9IGJsb2I7CiAJZnctPmZpbGVuYW1lID0gbmFtZTsKKwlmdy0+dHlwZSA9IGN0eC0+cmVxX3R5cGU7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2Zvcm1hdDoKLQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIGZvcm1hdCBlcnJvci5cbiIsIHBhdGgpOworCXNucHJpbnRmKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdLAorCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBmb3JtYXQgZXJyb3IuXG4iLCBjdHgtPmZ3bmFtZSk7CiAJcmVsZWFzZV9maXJtd2FyZShibG9iKTsKIAogCXJldHVybiAtRVBST1RPOwogfQogCi1zdGF0aWMgaW50IGI0M19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3N0YXRpYyBpbnQgYjQzX3RyeV9yZXF1ZXN0X2Z3KHN0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0ICpjdHgpCiB7Ci0Jc3RydWN0IGI0M19maXJtd2FyZSAqZncgPSAmZGV2LT5mdzsKLQljb25zdCB1OCByZXYgPSBkZXYtPmRldi0+aWQucmV2aXNpb247CisJc3RydWN0IGI0M193bGRldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGI0M19maXJtd2FyZSAqZncgPSAmY3R4LT5kZXYtPmZ3OworCWNvbnN0IHU4IHJldiA9IGN0eC0+ZGV2LT5kZXYtPmlkLnJldmlzaW9uOwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwogCXUzMiB0bXNoaWdoOwogCWludCBlcnI7CkBAIC0yMDk2LDcgKzIwODEsNyBAQAogCQlmaWxlbmFtZSA9ICJ1Y29kZTEzIjsKIAllbHNlCiAJCWdvdG8gZXJyX25vX3Vjb2RlOwotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT51Y29kZSwgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT51Y29kZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIApAQCAtMjEwOCw3ICsyMDkzLDcgQEAKIAllbHNlCiAJCWdvdG8gZXJyX25vX3BjbTsKIAlmdy0+cGNtX3JlcXVlc3RfZmFpbGVkID0gMDsKLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+cGNtLCAxKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPnBjbSk7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7CiAJCS8qIFdlIGRpZCBub3QgZmluZCBhIFBDTSBmaWxlPyBOb3QgZmF0YWwsIGJ1dAogCQkgKiBjb3JlIHJldiA8PSAxMCBtdXN0IGRvIHdpdGhvdXQgaHdjcnlwdG8gdGhlbi4gKi8KQEAgLTIxNDQsNyArMjEyOSw3IEBACiAJZGVmYXVsdDoKIAkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJfQotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscywgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIApAQCAtMjE3OCwzMCArMjE2MywzNCBAQAogCWRlZmF1bHQ6CiAJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCX0KLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+aW5pdHZhbHNfYmFuZCwgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFsc19iYW5kKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCiAJcmV0dXJuIDA7CiAKLWVycl9sb2FkOgotCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAxKTsKLQlnb3RvIGVycm9yOwotCiBlcnJfbm9fdWNvZGU6Ci0JZXJyID0gLUVOT0RFVjsKLQliNDNlcnIoZGV2LT53bCwgIk5vIG1pY3JvY29kZSBhdmFpbGFibGUgZm9yIGNvcmUgcmV2ICV1XG4iLCByZXYpOworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZSA9IC1FT1BOT1RTVVBQOworCWI0M2VycihkZXYtPndsLCAiVGhlIGRyaXZlciBkb2VzIG5vdCBrbm93IHdoaWNoIGZpcm13YXJlICh1Y29kZSkgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CiAJZ290byBlcnJvcjsKIAogZXJyX25vX3BjbToKLQllcnIgPSAtRU5PREVWOwotCWI0M2VycihkZXYtPndsLCAiTm8gUENNIGF2YWlsYWJsZSBmb3IgY29yZSByZXYgJXVcbiIsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKFBDTSkgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CiAJZ290byBlcnJvcjsKIAogZXJyX25vX2luaXR2YWxzOgotCWVyciA9IC1FTk9ERVY7Ci0JYjQzZXJyKGRldi0+d2wsICJObyBJbml0aWFsIFZhbHVlcyBmaXJtd2FyZSBmaWxlIGZvciBQSFkgJXUsICIKLQkgICAgICAgImNvcmUgcmV2ICV1XG4iLCBkZXYtPnBoeS50eXBlLCByZXYpOworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZSA9IC1FT1BOT1RTVVBQOworCWI0M2VycihkZXYtPndsLCAiVGhlIGRyaXZlciBkb2VzIG5vdCBrbm93IHdoaWNoIGZpcm13YXJlIChpbml0dmFscykgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CisJZ290byBlcnJvcjsKKworZXJyX2xvYWQ6CisJLyogV2UgZmFpbGVkIHRvIGxvYWQgdGhpcyBmaXJtd2FyZSBpbWFnZS4gVGhlIGVycm9yIG1lc3NhZ2UKKwkgKiBhbHJlYWR5IGlzIGluIGN0eC0+ZXJyb3JzLiBSZXR1cm4gYW5kIGxldCBvdXIgY2FsbGVyIGRlY2lkZQorCSAqIHdoYXQgdG8gZG8uICovCiAJZ290byBlcnJvcjsKIAogZXJyb3I6CkBAIC0yMjA5LDYgKzIxOTgsNDggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGI0M19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKwljdHgtPmRldiA9IGRldjsKKworCWN0eC0+cmVxX3R5cGUgPSBCNDNfRldUWVBFX1BST1BSSUVUQVJZOworCWVyciA9IGI0M190cnlfcmVxdWVzdF9mdyhjdHgpOworCWlmICghZXJyKQorCQlnb3RvIG91dDsgLyogU3VjY2Vzc2Z1bGx5IGxvYWRlZCBpdC4gKi8KKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmU7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwljdHgtPnJlcV90eXBlID0gQjQzX0ZXVFlQRV9PUEVOU09VUkNFOworCWVyciA9IGI0M190cnlfcmVxdWVzdF9mdyhjdHgpOworCWlmICghZXJyKQorCQlnb3RvIG91dDsgLyogU3VjY2Vzc2Z1bGx5IGxvYWRlZCBpdC4gKi8KKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmU7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZS4gUHJpbnQgdGhlIGVycm9ycy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQjQzX05SX0ZXVFlQRVM7IGkrKykgeworCQllcnJtc2cgPSBjdHgtPmVycm9yc1tpXTsKKwkJaWYgKHN0cmxlbihlcnJtc2cpKQorCQkJYjQzZXJyKGRldi0+d2wsIGVycm1zZyk7CisJfQorCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAxKTsKKwllcnIgPSAtRU5PRU5UOworCitvdXQ6CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGI0M191cGxvYWRfbWljcm9jb2RlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAljb25zdCBzaXplX3QgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYjQzX2Z3X2hlYWRlcik7CkBAIC0yMzE5LDggKzIzNTAsMTEgQEAKIAl9CiAKIAlpZiAoYjQzX2lzX29sZF90eGhkcl9mb3JtYXQoZGV2KSkgeworCQkvKiBXZSdyZSBvdmVyIHRoZSBkZWFkbGluZSwgYnV0IHdlIGtlZXAgc3VwcG9ydCBmb3Igb2xkIGZ3CisJCSAqIHVudGlsIGl0IHR1cm5zIG91dCB0byBiZSBpbiBtYWpvciBjb25mbGljdCB3aXRoIHNvbWV0aGluZyBuZXcuICovCiAJCWI0M3dhcm4oZGV2LT53bCwgIllvdSBhcmUgdXNpbmcgYW4gb2xkIGZpcm13YXJlIGltYWdlLiAiCi0JCQkiU3VwcG9ydCBmb3Igb2xkIGZpcm13YXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiBKdWx5IDIwMDguXG4iKTsKKwkJCSJTdXBwb3J0IGZvciBvbGQgZmlybXdhcmUgd2lsbCBiZSByZW1vdmVkIHNvb24gIgorCQkJIihvZmZpY2lhbCBkZWFkbGluZSB3YXMgSnVseSAyMDA4KS5cbiIpOwogCQliNDNfcHJpbnRfZndfaGVscHRleHQoZGV2LT53bCwgMCk7CiAJfQogCkBAIC0yOTQ2LDcgKzI5ODAsNyBAQAogCWI0M19jbGVhcl9rZXlzKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKiBkYXRhKQorc3RhdGljIGludCBiNDNfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IChzdHJ1Y3QgYjQzX3dsICopcm5nLT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMjIxLDYgKzMyNTUsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBiNDNfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKKwkJYjQzX3RzZl9yZWFkKGRldiwgJnRzZik7CisJZWxzZQorCQl0c2YgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiB0c2Y7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19vcF9zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKKwkJYjQzX3RzZl93cml0ZShkZXYsIHRzZik7CisKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCiBzdGF0aWMgdm9pZCBiNDNfcHV0X3BoeV9pbnRvX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc3NiX2RldmljZSAqc2RldiA9IGRldi0+ZGV2OwpAQCAtMzI0MCw3ICszMzExLDcgQEAKIAltc2xlZXAoMSk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogYmFuZF90b19zdHJpbmcoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIGNvbnN0IGNoYXIgKmJhbmRfdG9fc3RyaW5nKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzd2l0Y2ggKGJhbmQpIHsKIAljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CkBAIC0zNDQyLDcgKzM1MTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M191cGRhdGVfYmFzaWNfcmF0ZXMoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgYnJhdGVzKQorc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBicmF0ZXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPQogCQlkZXYtPndsLT5ody0+d2lwaHktPmJhbmRzW2I0M19jdXJyZW50X2JhbmQoZGV2LT53bCldOwpAQCAtMzUyMCwyMSArMzU5MSwyOSBAQAogfQogCiBzdGF0aWMgaW50IGI0M19vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyLCBjb25zdCB1OCAqYWRkciwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBhbGdvcml0aG07CiAJdTggaW5kZXg7CiAJaW50IGVycjsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKIAogCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCXJldHVybiAtRU5PU1BDOyAvKiBVc2VyIGRpc2FibGVkIEhXLWNyeXB0byAqLwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZ3bC0+dHhfbG9jayk7CisJLyogV2h5IGRvIHdlIG5lZWQgYWxsIHRoaXMgbG9ja2luZyBoZXJlPworCSAqIG11dGV4ICAgICAtPiBFdmVyeSBjb25maWcgb3BlcmF0aW9uIG11c3QgdGFrZSBpdC4KKwkgKiBpcnFfbG9jayAgLT4gV2UgbW9kaWZ5IHRoZSBkZXYtPmtleSBhcnJheSwgd2hpY2ggaXMgYWNjZXNzZWQKKwkgKiAgICAgICAgICAgICAgaW4gdGhlIElSUSBoYW5kbGVycy4KKwkgKiB0eF9sb2NrICAgLT4gV2UgbW9kaWZ5IHRoZSBkZXYtPmtleSBhcnJheSwgd2hpY2ggaXMgYWNjZXNzZWQKKwkgKiAgICAgICAgICAgICAgaW4gdGhlIFRYIGhhbmRsZXIuCisJICovCiAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJZXJyID0gLUVOT0RFVjsKQEAgLTM1NTEsNyArMzYzMCw3IEBACiAJZXJyID0gLUVJTlZBTDsKIAlzd2l0Y2ggKGtleS0+YWxnKSB7CiAJY2FzZSBBTEdfV0VQOgotCQlpZiAoa2V5LT5rZXlsZW4gPT0gNSkKKwkJaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVA0MCkKIAkJCWFsZ29yaXRobSA9IEI0M19TRUNfQUxHT19XRVA0MDsKIAkJZWxzZQogCQkJYWxnb3JpdGhtID0gQjQzX1NFQ19BTEdPX1dFUDEwNDsKQEAgLTM1NzgsMTcgKzM2NTcsMTkgQEAKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCi0JCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkgewotCQkJLyogYWRkciBpcyBGRjpGRjpGRjpGRjpGRjpGRiBmb3IgZGVmYXVsdCBrZXlzICovCisJCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7CisJCQlpZiAoV0FSTl9PTighc3RhKSkgeworCQkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCS8qIFBhaXJ3aXNlIGtleSB3aXRoIGFuIGFzc2lnbmVkIE1BQyBhZGRyZXNzLiAqLworCQkJZXJyID0gYjQzX2tleV93cml0ZShkZXYsIC0xLCBhbGdvcml0aG0sCisJCQkJCSAgICBrZXktPmtleSwga2V5LT5rZXlsZW4sCisJCQkJCSAgICBzdGEtPmFkZHIsIGtleSk7CisJCX0gZWxzZSB7CisJCQkvKiBHcm91cCBrZXkgKi8KIAkJCWVyciA9IGI0M19rZXlfd3JpdGUoZGV2LCBpbmRleCwgYWxnb3JpdGhtLAogCQkJCQkgICAga2V5LT5rZXksIGtleS0+a2V5bGVuLCBOVUxMLCBrZXkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIGVpdGhlciBwYWlyd2lzZSBrZXkgb3IgYWRkcmVzcyBpcyAwMDowMDowMDowMDowMDowMAotCQkJICogZm9yIHRyYW5zbWl0LW9ubHkga2V5cwotCQkJICovCi0JCQllcnIgPSBiNDNfa2V5X3dyaXRlKGRldiwgLTEsIGFsZ29yaXRobSwKLQkJCQkJICAgIGtleS0+a2V5LCBrZXktPmtleWxlbiwgYWRkciwga2V5KTsKIAkJfQogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrOwpAQCAtMzYxNywxMCArMzY5OCwxMSBAQAogCQliNDNkYmcod2wsICIlcyBoYXJkd2FyZSBiYXNlZCBlbmNyeXB0aW9uIGZvciBrZXlpZHg6ICVkLCAiCiAJCSAgICAgICAibWFjOiAlcE1cbiIsCiAJCSAgICAgICBjbWQgPT0gU0VUX0tFWSA/ICJVc2luZyIgOiAiRGlzYWJsaW5nIiwga2V5LT5rZXlpZHgsCi0JCSAgICAgICBhZGRyKTsKKwkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIpOwogCQliNDNfZHVtcF9rZXltZW1vcnkoZGV2KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisJd3JpdGVfdW5sb2NrKCZ3bC0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC0zNzk2LDYgKzM4NzgsMTIgQEAKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0I0M19OUEhZCiAJY2FzZSBCNDNfUEhZVFlQRV9OOgorCQlpZiAocGh5X3JldiA+IDQpCisJCQl1bnN1cHBvcnRlZCA9IDE7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M19QSFlfTFAKKwljYXNlIEI0M19QSFlUWVBFX0xQOgogCQlpZiAocGh5X3JldiA+IDEpCiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwpAQCAtMzg0OSw3ICszOTM3LDExIEBACiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTjoKLQkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNTUpCisJCWlmIChyYWRpb192ZXIgIT0gMHgyMDU1ICYmIHJhZGlvX3ZlciAhPSAweDIwNTYpCisJCQl1bnN1cHBvcnRlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgQjQzX1BIWVRZUEVfTFA6CisJCWlmIChyYWRpb192ZXIgIT0gMHgyMDYyKQogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzkwMSw2ICszOTkzLDggQEAKIAlkZXYtPmlycV9yZWFzb24gPSAwOwogCW1lbXNldChkZXYtPmRtYV9yZWFzb24sIDAsIHNpemVvZihkZXYtPmRtYV9yZWFzb24pKTsKIAlkZXYtPmlycV9zYXZlZHN0YXRlID0gQjQzX0lSUV9NQVNLVEVNUExBVEU7CisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9ERUJVRykKKwkJZGV2LT5pcnFfc2F2ZWRzdGF0ZSAmPSB+QjQzX0lSUV9QSFlfVFhFUlI7CiAKIAlkZXYtPm1hY19zdXNwZW5kZWQgPSAxOwogCkBAIC00MDc4LDExICs0MTcyLDIxIEBACiAJCQloZiB8PSBCNDNfSEZfR0RDVzsKIAkJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpCiAJCQloZiB8PSBCNDNfSEZfT0ZETVBBQk9PU1Q7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQloZiB8PSBCNDNfSEZfU1lNVzsKLQkJaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQkJaGYgJj0gfkI0M19IRl9HRENXOwogCX0KKwlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7CisJCWlmIChwaHktPnJhZGlvX3JldiA9PSA2KQorCQkJaGYgfD0gQjQzX0hGXzQzMThUU1NJOworCQlpZiAocGh5LT5yYWRpb19yZXYgPCA2KQorCQkJaGYgfD0gQjQzX0hGX1ZDT1JFQ0FMQzsKKwl9CisJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9YVEFMX05PU0xPVykKKwkJaGYgfD0gQjQzX0hGX0RTQ1JROyAvKiBEaXNhYmxlIHNsb3djbG9jayByZXF1ZXN0cyBmcm9tIHVjb2RlLiAqLworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlpZiAoKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpICYmCisJICAgIChidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpCisJCWhmIHw9IEI0M19IRl9QQ0lTQ1c7IC8qIFBDSSBzbG93IGNsb2NrIHdvcmthcm91bmQuICovCisjZW5kaWYKKwloZiAmPSB+QjQzX0hGX1NLQ0ZQVVA7CiAJYjQzX2hmX3dyaXRlKGRldiwgaGYpOwogCiAJYjQzX3NldF9yZXRyeV9saW1pdHMoZGV2LCBCNDNfREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTQxMjEsNyArNDIyNSw3IEBACiAJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKLQlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLworCXNzYl9idXNfcG93ZXJ1cChidXMsICEoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1hUQUxfTk9TTE9XKSk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKIAliNDNfc2VjdXJpdHlfaW5pdChkZXYpOwogCWlmICghZGV2LT5zdXNwZW5kX2luX3Byb2dyZXNzKQpAQCAtNDMwNSw2ICs0NDA5LDM0IEBACiAJQjQzX1dBUk5fT04oIXZpZiB8fCB3bC0+dmlmICE9IHZpZik7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKSB7CisJCS8qIERpc2FibGUgQ0ZQIHVwZGF0ZSBkdXJpbmcgc2NhbiBvbiBvdGhlciBjaGFubmVscy4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9TS0NGUFVQKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkgeworCQkvKiBSZS1lbmFibGUgQ0ZQIHVwZGF0ZS4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfU0tDRlBVUCk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGI0M19od19vcHMgPSB7CiAJLnR4CQkJPSBiNDNfb3BfdHgsCiAJLmNvbmZfdHgJCT0gYjQzX29wX2NvbmZfdHgsCkBAIC00MzE3LDEwICs0NDQ5LDE0IEBACiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKKwkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZgkJPSBiNDNfb3Bfc2V0X3RzZiwKIAkuc3RhcnQJCQk9IGI0M19vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzX29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzX29wX2JlYWNvbl9zZXRfdGltLAogCS5zdGFfbm90aWZ5CQk9IGI0M19vcF9zdGFfbm90aWZ5LAorCS5zd19zY2FuX3N0YXJ0CQk9IGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyLAorCS5zd19zY2FuX2NvbXBsZXRlCT0gYjQzX29wX3N3X3NjYW5fY29tcGxldGVfbm90aWZpZXIsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtNDQ0Niw2ICs0NTgyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NjU3LDkgKzQ3OTQsMTAgQEAKIAlJTklUX1dPUksoJndsLT50eHBvd2VyX2FkanVzdF93b3JrLCBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmspOwogCiAJc3NiX3NldF9kZXZ0eXBlZGF0YShkZXYsIHdsKTsKLQliNDNpbmZvKHdsLCAiQnJvYWRjb20gJTA0WCBXTEFOIGZvdW5kXG4iLCBkZXYtPmJ1cy0+Y2hpcF9pZCk7CisJYjQzaW5mbyh3bCwgIkJyb2FkY29tICUwNFggV0xBTiBmb3VuZCAoY29yZSByZXZpc2lvbiAldSlcbiIsCisJCWRldi0+YnVzLT5jaGlwX2lkLCBkZXYtPmlkLnJldmlzaW9uKTsKIAllcnIgPSAwOwotICAgICAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCmluZGV4IGY4NzFhMjUuLjQwYWJjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaApAQCAtNDAsNiArNDAsMjQgQEAKIAogCiBleHRlcm4gaW50IGI0M19tb2RwYXJhbV9xb3M7CitleHRlcm4gaW50IGI0M19tb2RwYXJhbV92ZXJib3NlOworCisvKiBMb2dtZXNzYWdlIHZlcmJvc2l0eSBsZXZlbHMuIFVwZGF0ZSB0aGUgYjQzX21vZHBhcmFtX3ZlcmJvc2UgaGVscHRleHQsIGlmCisgKiB5b3UgYWRkIG9yIHJlbW92ZSBsZXZlbHMuICovCitlbnVtIGI0M192ZXJib3NpdHkgeworCUI0M19WRVJCT1NJVFlfRVJST1IsCisJQjQzX1ZFUkJPU0lUWV9XQVJOLAorCUI0M19WRVJCT1NJVFlfSU5GTywKKwlCNDNfVkVSQk9TSVRZX0RFQlVHLAorCV9fQjQzX1ZFUkJPU0lUWV9BRlRFUkxBU1QsIC8qIGtlZXAgbGFzdCAqLworCisJQjQzX1ZFUkJPU0lUWV9NQVggPSBfX0I0M19WRVJCT1NJVFlfQUZURVJMQVNUIC0gMSwKKyNpZiBCNDNfREVCVUcKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0RFQlVHLAorI2Vsc2UKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0lORk8sCisjZW5kaWYKK307CiAKIAogLyogTGlnaHR3ZWlnaHQgZnVuY3Rpb24gdG8gY29udmVydCBhIGZyZXF1ZW5jeSAoaW4gTWh6KSB0byBhIGNoYW5uZWwgbnVtYmVyLiAqLwpAQCAtMTIxLDQgKzEzOSwxMSBAQAogdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAorCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dDsKK2ludCBiNDNfZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4LAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KTsKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdyk7CisKICNlbmRpZiAvKiBCNDNfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwppbmRleCA3ZmU5ZDE3Li5jODM2YzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwpAQCAtMTIxLDI3ICsxMjEsMTggQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNywgKHI4IDw8IDQpIHwgcjgpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDIwLCAocjggPDwgNCkgfCByOCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjEsIChyOCA8PCA0KSB8IHI4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyMiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMjIpCi0JCQkJCSYgMHgwMDBGKSB8IChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjIsIDB4MDAwRiwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQSwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQiwgKHI4IDw8IDQpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwOCwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDgpCi0JCQkJCSYgMHgwMEYwKSB8IChyOCA8PCA0KSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjksIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDI5KQotCQkJCQkmIDB4RkYwRikgfCAweDAwQjApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA4LCAweDAwRjAsIChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjksIDB4RkYwRiwgMHgwMEIwKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwgMHgwMEFBKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNiwgMHgwMDg1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzQSwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwM0EpCi0JCQkJCSYgMHhGRjIwKSB8Ci0JCQkgIGZyZXFfcjNBX3ZhbHVlKGZyZXEpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzRCwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzRCkgJiAweDAwRkYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkKLQkJCQkJJiAweEZGN0YpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkgJiAweEZGRUYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM1LCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkKLQkJCQkJJiAweEZGRUYpIHwgMHgwMDEwKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzQSwgMHhGRjIwLCBmcmVxX3IzQV92YWx1ZShmcmVxKSk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwM0QsIDB4MDBGRik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIDB4RkY3RiwgMHgwMDgwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAzNSwgMHhGRkVGKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkVGLCAweDAwMTApOwogCWI0M19yYWRpb19zZXRfdHhfaXEoZGV2KTsKIAkvL1RPRE86IFRTU0kyZGJtIHdvcmthcm91bmQKIC8vRklYTUUJYjQzX3BoeV94bWl0cG93ZXIoZGV2KTsKQEAgLTE2MCwyMyArMTUxLDIwIEBACiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODIsIDB4MDA4MCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODAsIDB4MDAwMCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwM0YsIDB4MDBEQSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDUpICYgfjB4MDAwOCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAxMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDUsIH4weDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDgxLCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA4MSwgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwMjApOwogCW1zbGVlcCgxKTsJCS8qIGRlbGF5IDQwMHVzZWMgKi8KIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDIwKSB8IDB4MDAxMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIH4weDAwMjAsIDB4MDAxMCk7CiAJbXNsZWVwKDEpOwkJLyogZGVsYXkgNDAwdXNlYyAqLwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA1KSAmIH4weDAwMDgpIHwgMHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4NSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4NSkgJiB+MHgwMDEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNSkgJiB+MHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDQwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDA0MCkgfCAweDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA1LCB+MHgwMDA4LCAweDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDg1LCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAwNSwgfjB4MDAwOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDgxLCB+MHgwMDQwLCAweDAwNDApOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA1LAogCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDA4KSB8IDB4MDAwOCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MywgMHhEREM2KTsKQEAgLTIyNCwyMiArMjEyLDE2IEBACiAJdTE2IGIsIGN1cnJfcywgYmVzdF9zID0gMHhGRkZGOwogCWludCBpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH5CNDNfUEhZX0NSUzBfRU4pOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksCi0JCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgfCAweDEwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MikpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDksCi0JCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDkpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAxMiwKLQkJKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMTIpICYgMHhGRkZDKSB8IDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCB+QjQzX1BIWV9DUlMwX0VOKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgMHgxMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksIDB4RjBGRiwgMHgwMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDA5LCAweDAwODApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDEyLCAweEZGRkMsIDB4MDAwMik7CiAJYjQzX3dhX2luaXRnYWlucyhkZXYpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCQSksIDB4M0VENSk7CiAJYiA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUFdSRE9XTik7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUFdSRE9XTiwgKGIgJiAweEZGRjgpIHwgMHgwMDA1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwKLQkJYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNCkgfCAweDAwMDQpOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwMDQsIDB4MDAwNCk7CiAJZm9yIChpID0gMHgxMDsgaSA8PSAweDIwOyBpKyspIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGkpOwogCQljdXJyX3MgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09UQUJMRVEpICYgMHgwMEZGOwpAQCAtMjUyLDggKzIzNCw3IEBACiAJCQliZXN0X3MgPSBjdXJyX3M7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BXUkRPV04sIGIpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA0KSAmIDB4RkZGQik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDQsIDB4RkZGQik7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGJlc3Rfcyk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzFfUjEsIDAsIDB4RkZFQyk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI3KSwgMHgxRTgwKTsKQEAgLTI2MSwxNCArMjQyLDEwIEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI1KSwgMHgwRUMwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QjIpLCAweDAwQzApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCOSksIDB4MUZGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEJCKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEJCKSkgJiAweEYwMDApIHwgMHgwMDUzKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNNjEsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSkgJiAweEZFMUYpIHwgMHgwMTIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpKSAmIDB4MEZGRikgfCAweDMwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCkpICYgMHgwRkZGKSB8IDB4MzAwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpLCAweEYwMDAsIDB4MDA1Myk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNNjEsIDB4RkUxRiwgMHgwMTIwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMyksIDB4MEZGRiwgMHgzMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksIDB4MEZGRiwgMHgzMDAwKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgNiwgMHgwMDE3KTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgaSwgMHgwMDBGKTsKQEAgLTI3Niw4ICsyNTMsNyBAQAogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBFLCAweDAwMTEpOwogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBGLCAweDAwMTMpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgzMyksIDB4NTAzMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSB8IEI0M19QSFlfQ1JTMF9FTik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NSUzAsIEI0M19QSFlfQ1JTMF9FTik7CiB9CiAKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX3BjdGxfaW5pdF9hcGh5KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTMwMCwyNiArMjc2LDIxIEBACiAKIAlpZiAocGh5LT5yZXYgPj0gNikgewogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0EpCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgxMDAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgfjB4MTAwMCk7CiAJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgJiBCNDNfUEhZX0VOQ09SRV9FTikKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VOQ09SRSwKLQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgfCAweDAwMTApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VOQ09SRSwgMHgwMDEwKTsKIAkJZWxzZQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRU5DT1JFLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSAmIH4weDEwMTApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9FTkNPUkUsIH4weDEwMTApOwogCX0KIAogCWI0M193YV9hbGwoZGV2KTsKIAogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgewogCQlpZiAocGh5LT5nbW9kZSAmJiAocGh5LT5yZXYgPCAzKSkKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzQsCi0JCQkJYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM0KSB8IDB4MDAwMSk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNCwgMHgwMDAxKTsKIAkJYjQzX3BoeV9yc3NpYWdjKGRldiwgMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkgfCBCNDNfUEhZX0NSUzBfRU4pOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ1JTMCwgQjQzX1BIWV9DUlMwX0VOKTsKIAogCQliNDNfcmFkaW9faW5pdDIwNjAoZGV2KTsKIApAQCAtMzM5LDkgKzMxMCw3IEBACiAKIAlpZiAoKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSAmJgogCSAgICAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4NkUpLAotCQkJCSAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSkKLQkJCQkgICAmIDB4RTAwMCkgfCAweDNDRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSwgMHhFMDAwLCAweDNDRik7CiAJfQogfQogCkBAIC01MjAsMTQgKzQ4OSwxNCBAQAogCQkJcmV0dXJuOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwgMHgwMEMwKTsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTAsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMCkgJiAweEZGRjcpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTEpICYgMHhGRkY3KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDEwLCAweEZGRjcpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwMTEsIDB4RkZGNyk7CiAJCWI0M19yYWRpb19pbml0MjA2MChkZXYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LCAweDAwRkYpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgMHgwMEZCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDEwKSB8IDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMSkgfCAweDAwMDgpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxMCwgMHgwMDA4KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMTEsIDB4MDAwOCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCmluZGV4IGNhYWM0YTQ1Li5lN2I5OGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwpAQCAtMjA0LDEzICsyMDQsOSBAQAogCQkJCQkJICYgMHhGRkYwKSB8CiAJCQkgICAgYmFzZWJhbmRfYXR0ZW51YXRpb24pOwogCX0gZWxzZSBpZiAocGh5LT5hbmFsb2cgPiAxKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkZDMykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRkMzLCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkY4NykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRjg3LCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOwogCX0KIH0KIApAQCAtMjUyLDE3ICsyNDgsMTMgQEAKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAogCQkJCSAgKHJmICYgMHgwMDBGKSB8ICh0eF9jb250cm9sICYgMHgwMDcwKSk7CiAJfSBlbHNlIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8IChyZiAmIDB4MDAwRikpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiB+MHgwMDcwKSB8ICh0eF9jb250cm9sICYKLQkJCQkJCQkgICAgMHgwMDcwKSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCAocmYgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCB+MHgwMDcwLCAodHhfY29udHJvbCAmIDB4MDA3MCkpOwogCX0KIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIHR4X21hZ24gfCB0eF9iaWFzKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGRjApIHwgKHR4X2JpYXMgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsICh0eF9iaWFzICYgMHgwMDBGKSk7CiAJfQogCWI0M19sb19nX2FkanVzdChkZXYpOwogfQpAQCAtMzM3LDEyICszMjksOSBAQAogCiAJaWYgKHRoaXJkICE9IC0xKSB7CiAJCXRtcCA9ICgodTE2KSB0aGlyZCA8PCAxNCkgfCAoKHUxNikgdGhpcmQgPDwgNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCB0bXApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEJGQkYpIHwgdG1wKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhCRkJGKSB8IHRtcCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMCwgMHhCRkJGLCB0bXApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgdG1wKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIHRtcCk7CiAJfQogCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2KTsKIH0KQEAgLTM3MywxMiArMzYyLDkgQEAKIAlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgdGFibGUsIGksIGkgLSBzdGFydCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpICYgMHhCRkJGKSB8IDB4NDA0MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikgJiAweEJGQkYpIHwgMHg0MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QkZCRiwgMHg0MDAwKTsKIAliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldik7CiB9CiAKQEAgLTQ1NCwxMyArNDQwLDExIEBACiAJYmFja3VwWzEwXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwogCWJhY2t1cFsxMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDQzKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MjksIGI0M19waHlfcmVhZChkZXYsIDB4MDQyOSkgJiAweDdGRkYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDEpICYgMHgzRkZGKSB8IDB4NDAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgJiAweEZGRjMpIHwgMHgwMDA0KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgfigweDEgfCAweDIpKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MjksIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDAxLCAweDNGRkYsIDB4NDAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAwQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGRjMsIDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCB+KDB4MSB8IDB4MikpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWJhY2t1cFsxMl0gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMkUpOwogCQliYWNrdXBbMTNdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJGKTsKQEAgLTQ3NSwxMyArNDU5LDEzIEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODBGLCAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMCwgMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3OCkgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpIHwgMHgwMDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDYwKSB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkgfCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwMTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDYwLCAweDAwNDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxNCwgMHgwMjAwKTsKIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDcwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwODApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMzApOwogCiAJdjQ3RiA9IChzMTYpICgoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7CkBAIC01MDEsNDAgKzQ4NSwzMSBAQAogCQlpZiAoc2F2ZWQgPT0gMHhGRkZGKQogCQkJc2F2ZWQgPSA0OwogCX0gZWxzZSB7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwN0YpOworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3QSwgMHgwMDdGKTsKIAkJaWYgKHBoeS0+cmV2ICE9IDEpIHsJLyogTm90IGluIHNwZWNzLCBidXQgbmVlZGVkIHRvIHByZXZlbnQgUFBDIG1hY2hpbmUgY2hlY2sgKi8KLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE0KSB8IDB4MDAwMSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODE1LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxNSkgJiAweEZGRkUpOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTQsIDB4MDAwMSk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTUsIDB4RkZGRSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgfCAweDAwMEMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpIHwgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSB8IDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODExLCAweDAwMEMpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDgxMiwgMHgwMDBDKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODEyLCAweDAwMzApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVBLCAweDA0ODApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU5LCAweDA4MTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCAweDAwMEQpOwogCQlpZiAocGh5LT5yZXYgPT0gMCkgewogCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgMHgwMTIyKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAwQSkKLQkJCQkgICAgICB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAwQSwgMHgyMDAwKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxNCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTQpIHwgMHgwMDA0KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTUsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE1KSAmIDB4RkZGQik7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDgxNCwgMHgwMDA0KTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDgxNSwgMHhGRkZCKTsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAzLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAzKSAmIDB4RkY5RikKLQkJCSAgICAgIHwgMHgwMDQwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOworCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCQliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNDMpCi0JCQkJCQkmIDB4MDBGMCkgfCAweDAwMEYpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA0MywgMHgwMEYwLCAweDAwMEYpOwogCQl1ZGVsYXkoMzApOwogCQl2NDdGID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAkJaWYgKHY0N0YgPj0gMHgyMCkKQEAgLTU3Niw3ICs1NTEsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDQzLCBiYWNrdXBbMTFdKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYmFja3VwWzEwXSk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSB8IDB4MSB8IDB4Mik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyOSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDI5KSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0MjksIDB4ODAwMCk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNl0pOwpAQCAtNjA0LDkgKzU3OSw4IEBACiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpCiAJCWI0M19jYWxjX25yc3NpX29mZnNldChkZXYpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpICYgMHg3RkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDdGRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMiwgMHhGRkZDKTsKIAliYWNrdXBbN10gPSBiNDNfcmVhZDE2KGRldiwgMHgwM0UyKTsKIAliNDNfd3JpdGUxNihkZXYsIDB4MDNFMiwgYjQzX3JlYWQxNihkZXYsIDB4MDNFMikgfCAweDgwMDApOwogCWJhY2t1cFswXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwpAQCAtNjMzLDY2ICs2MDcsNDQgQEAKIAkJY2FzZSA0OgogCQljYXNlIDY6CiAJCWNhc2UgNzoKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KQotCQkJCSAgICAgIHwgMHgwMTAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAxKQotCQkJCSAgICAgIHwgMHgwMDQwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDc4LCAweDAxMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQljYXNlIDU6Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMSkKLQkJCQkgICAgICAmIDB4RkZCRik7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MDEsIDB4RkZCRik7CiAJCQlicmVhazsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNjApCi0JCQkgICAgICB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkKLQkJCSAgICAgIHwgMHgwMjAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNjAsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDE0LCAweDAyMDApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwNzApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAwLCA4LCAwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwRjcpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDdBLCAweDAwRjcpOwogCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSAmIDB4RkZDRikgfAotCQkJICAgICAgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDMwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGQ0YsIDB4MDAxMCk7CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDA4MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMjApOwogCiAJbnJzc2kwID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAlpZiAobnJzc2kwID49IDB4MDAyMCkKIAkJbnJzc2kwIC09IDB4MDA0MDsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSAmIDB4MDA3Rik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwN0EsIDB4MDA3Rik7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMykKLQkJCQkJICAgICYgMHhGRjlGKSB8IDB4MDA0MCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOwogCX0KIAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQsCiAJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQpCiAJCSAgICB8IDB4MjAwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDBGKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTUsIDB4RjMzMCk7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMjApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgJiAweEZGQ0YpIHwKLQkJCSAgICAgIDB4MDAyMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDgxMiwgMHhGRkNGLCAweDAwMjApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDIwKTsKIAl9CiAKIAliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwpAQCAtNzI2LDEwICs2NzgsOCBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0xPX0NPTlRST0wsIGJhY2t1cFsxM10pOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODEyLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSAmIDB4RkZDRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpICYgMHhGRkNGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODEyLCAweEZGQ0YpOworCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTEsIDB4RkZDRik7CiAJfQogCiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGJhY2t1cFswXSk7CkBAIC03NDMsMTEgKzY5Myw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OSwgYmFja3VwWzVdKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCBiYWNrdXBbNl0pOwogCWI0M19zeW50aF9wdV93b3JrYXJvdW5kKGRldiwgcGh5LT5jaGFubmVsKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpIHwgKDB4MDAwMSB8IDB4MDAwMikpOworCWI0M19waHlfc2V0KGRldiwgMHgwODAyLCAoMHgwMDAxIHwgMHgwMDAyKSk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWlmIChwaHktPnJldiA+PSAzKSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNF0pOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiYWNrdXBbMTVdKTsKQEAgLTc3NCwxMyArNzIyLDkgQEAKIAkJaWYgKHRtcDE2ID49IDB4MjApCiAJCQl0bXAxNiAtPSAweDQwOwogCQlpZiAodG1wMTYgPCAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgICYgMHhGMDAwKSB8IDB4MDlFQik7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEEsIDB4RjAwMCwgMHgwOUVCKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICAgJiAweEYwMDApIHwgMHgwQUVEKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHhGMDAwLCAweDBBRUQpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGdwaHktPmludGVyZm1vZGUgPT0gQjQzX0lOVEVSRk1PREVfTk9OV0xBTikgewpAQCAtODIzLDcgKzc2Nyw3IEBACiAgKiBpbnRlcmZlcmVuY2UgbWl0aWdhdGlvbiBjb2RlLgogICogSXQgaXMgc2F2ZSB0byByZXN0b3JlIHZhbHVlcyBpbiByYW5kb20gb3JkZXIuCiAgKi8KLXN0YXRpYyB2b2lkIF9zdGFja19zYXZlKHUzMiAqIF9zdGFja3B0ciwgc2l6ZV90ICogc3RhY2tpZHgsCitzdGF0aWMgdm9pZCBfc3RhY2tfc2F2ZSh1MzIgKl9zdGFja3B0ciwgc2l6ZV90ICpzdGFja2lkeCwKIAkJCXU4IGlkLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCiB7CiAJdTMyICpzdGFja3B0ciA9ICYoX3N0YWNrcHRyWypzdGFja2lkeF0pOwpAQCAtODM3LDcgKzc4MSw3IEBACiAJQjQzX1dBUk5fT04oKnN0YWNraWR4ID49IEI0M19JTlRFUkZTVEFDS19TSVpFKTsKIH0KIAotc3RhdGljIHUxNiBfc3RhY2tfcmVzdG9yZSh1MzIgKiBzdGFja3B0ciwgdTggaWQsIHUxNiBvZmZzZXQpCitzdGF0aWMgdTE2IF9zdGFja19yZXN0b3JlKHUzMiAqc3RhY2twdHIsIHU4IGlkLCB1MTYgb2Zmc2V0KQogewogCXNpemVfdCBpOwogCkBAIC05MDEsMTEgKzg0NSw4IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBCNDNfSU5URVJGTU9ERV9OT05XTEFOOgogCQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSAmIH4weDQwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCB+MHg0MDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJhZGlvX3N0YWNrc2F2ZSgweDAwNzgpOwpAQCAtOTI0LDI2ICs4NjUsMTkgQEAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0MDYpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDA2LCAweDdFMjgpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfUkFESU9fQklURklFTEQpIHwgMHgxMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgMHgxMDAwKTsKIAogCQlwaHlfc3RhY2tzYXZlKDB4MDRBMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QzBDMCkgfCAweDAwMDgpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QzBDMCwgMHgwMDA4KTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEMwQzAsIDB4MDYwNSk7CiAJCXBoeV9zdGFja3NhdmUoMHgwNEEyKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhDMEMwKSB8IDB4MDIwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhDMEMwLCAweDAyMDQpOwogCQlwaHlfc3RhY2tzYXZlKDB4MDRBOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTgsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KSAmIDB4QzBDMCkgfCAweDA4MDMpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTgsIDB4QzBDMCwgMHgwODAzKTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QUIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEMwQzAsIDB4MDYwNSk7CiAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTcpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE3LCAweDAwMDIpOwpAQCAtOTk5LDEyICs5MzMsOCBAQAogCQlwaHlfc3RhY2tzYXZlKDB4MDQyQik7CiAJCXBoeV9zdGFja3NhdmUoMHgwNDhDKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQpCi0JCQkgICAgICAmIH4weDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKQotCQkJICAgICAgICYgMHhGRkZDKSB8IDB4MDAwMik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsIH4weDEwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweEZGRkMsIDB4MDAwMik7CiAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzMywgMHgwODAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMywgMHgyMDI3KTsKQEAgLTEwMTMsOCArOTQzLDcgQEAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQSwgMHgxQ0E4KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQywgMHgyODdBKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEZGQzApIHwgMHgwMDFBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEZGQzAsIDB4MDAxQSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTcsIDB4MDAwRCk7CiAKIAkJaWYgKHBoeS0+cmV2IDwgMikgewpAQCAtMTAyNyw2NSArOTU2LDQxIEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEMxLCAweDAwNTkpOwogCQl9CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkKLQkJCQkJICAgICYgMHhDMEZGKSB8IDB4MTgwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweENGRkYpIHwgMHgxMDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGMEZGKSB8IDB4MEEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4Q0ZGRikgfCAweDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFCKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwODAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikKLQkJCQkJICAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4RkZGMCkgfCAweDAwMDUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweEZGQ0YpIHwgMHgwMDEwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwNTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwQik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhDMEZGLCAweDE4MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4RkZDMCwgMHgwMDE1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweENGRkYsIDB4MTAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGMEZGLCAweDBBMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4Q0ZGRiwgMHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEYwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBQiwgMHhGRkNGLCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4RkZGMCwgMHgwMDA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweEZGQ0YsIDB4MDAxMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGRkYwLCAweDAwMDYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4RjBGRiwgMHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEYwRkYsIDB4MDUwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhGRkYwLCAweDAwMEIpOwogCiAJCWlmIChwaHktPnJldiA+PSAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgJiB+MHg4MDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTUpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTYsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTYpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTcsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTcpCi0JCQkJCQkgICAgJiAweEZFMDApIHwgMHgwMTZEKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDQ4QSwgKHUxNil+MHg4MDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQxNSwgMHg4MDAwLCAweDM2RDgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDE2LCAweDgwMDAsIDB4MzZEOCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0MTcsIDB4RkUwMCwgMHgwMTZEKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICB8IDB4MTAwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhBKQotCQkJCQkJICAgICYgMHg5RkZGKSB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDQ4QSwgMHgxMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHg5RkZGLCAweDIwMDApOwogCQkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9BQ0lXKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgPj0gMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKQotCQkJCSAgICAgIHwgMHgwODAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDA4MDApOwogCQl9Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEMsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEMpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDAyMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEMsIDB4RjBGRiwgMHgwMjAwKTsKIAkJaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUUpCi0JCQkJCQkgICAgJiAweEZGMDApIHwgMHgwMDdGKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUQsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUQpCi0JCQkJCQkgICAgJiAweDAwRkYpIHwgMHgxMzAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBRSwgMHhGRjAwLCAweDAwN0YpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFELCAweDAwRkYsIDB4MTMwMCk7CiAJCX0gZWxzZSBpZiAocGh5LT5yZXYgPj0gNikgewogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgzLCAweDAwN0YpOwogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgyLCAweDAwN0YpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBRCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFEKQotCQkJCSAgICAgICYgMHgwMEZGKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDRBRCwgMHgwMEZGKTsKIAkJfQogCQliNDNfY2FsY19ucnNzaV9zbG9wZShkZXYpOwogCQlicmVhazsKQEAgLTExMDQsMjQgKzEwMDksMTggQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEI0M19JTlRFUkZNT0RFX05PTldMQU46CiAJCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA0MkIsIH4weDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDQwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJcmFkaW9fc3RhY2tyZXN0b3JlKDB4MDA3OCk7CiAJCWI0M19jYWxjX25yc3NpX3RocmVzaG9sZChkZXYpOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDQwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDJCLCB+MHgwODAwKTsKIAkJaWYgKCFkZXYtPmJhZF9mcmFtZXNfcHJlZW1wdCkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCkKLQkJCQkgICAgICAmIH4oMSA8PCAxMSkpOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgfigxIDw8IDExKSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg0MDAwKTsKIAkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTApOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMSk7CiAJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEEyKTsKQEAgLTEzODksMTcgKzEyODgsMTAgQEAKIAkJc2F2LnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAkJc2F2LnBoeV9jbGFzc2N0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4N0ZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CiAJCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKSB7CiAJCQlzYXYucGh5X2xvX21hc2sgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX01BU0spOwogCQkJc2F2LnBoeV9sb19jdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0NUTCk7CkBAIC0xNDIwLDggKzEzMTIsNyBAQAogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIGI0M19yZWFkMTYoZGV2LCAweDNFMikgfCAweDgwMDApOwogCiAJc2F2LnBoeV9zeW5jY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9TWU5DQ1RMKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9TWU5DQ1RMLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1NZTkNDVEwpCi0JCSAgICAgICYgMHhGRjdGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1NZTkNDVEwsIDB4RkY3Rik7CiAJc2F2LnJlZ18zRTYgPSBiNDNfcmVhZDE2KGRldiwgMHgzRTYpOwogCXNhdi5yZWdfM0Y0ID0gYjQzX3JlYWQxNihkZXYsIDB4M0Y0KTsKIApAQCAtMTQyOSw5ICsxMzIwLDcgQEAKIAkJYjQzX3dyaXRlMTYoZGV2LCAweDAzRTYsIDB4MDEyMik7CiAJfSBlbHNlIHsKIAkJaWYgKHBoeS0+YW5hbG9nID49IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDAzKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwMykpCi0JCQkJICAgICAgICYgMHhGRkJGKSB8IDB4NDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgwMyksIDB4RkZCRiwgMHg0MCk7CiAJCX0KIAkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19DSEFOTkVMX0VYVCwKIAkJCSAgICAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX0NIQU5ORUxfRVhUKSB8IDB4MjAwMCkpOwpAQCAtMTQ1NCwxNCArMTM0MywxMiBAQAogCQkJCQkJICAgTFBEKDAsIDAsIDEpKSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhCRkEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKQotCQkJICB8IDB4MDAwNCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4NTEsIDB4MDAwNCk7CiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDFGKTsKIAl9IGVsc2UgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIDApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkJICAgICAgJiAweEZGRjApIHwgMHgwMDA5KTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIDB4MDAwOSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMCk7CiAKQEAgLTE2MTAsOCArMTQ5Nyw3IEBACiAJdTggb2xkX2NoYW5uZWw7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkgIHwgMHgwMDUwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDUwKTsKIAl9CiAJaWYgKChidXMtPmJvYXJkaW5mby52ZW5kb3IgIT0gU1NCX0JPQVJEVkVORE9SX0JDTSkgJiYKIAkgICAgKGJ1cy0+Ym9hcmRpbmZvLnR5cGUgIT0gU1NCX0JPQVJEX0JVNDMwNikpIHsKQEAgLTE2MjEsMzkgKzE1MDcsMjkgQEAKIAkJCXZhbHVlICs9IDB4MjAyOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzUpICYgMHhGMEZGKQotCQkgICAgICB8IDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDM1LCAweEYwRkYsIDB4MDcwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY3KTsKIAogCWlmIChwaHktPmdtb2RlIHx8IHBoeS0+cmV2ID49IDIpIHsKIAkJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkJICB8IDB4MDAyMCk7Ci0JCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MSwKLQkJCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKQotCQkJCQkgIHwgMHgwMDA0KTsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDAyMCk7CisJCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDUxLCAweDAwMDQpOwogCQl9CiAJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX1JBRElPLCAweDAwMDApOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMUMsIDB4MTg2QSk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTMpICYgMHgwMEZGKSB8IDB4MTkwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM1KSAmIDB4RkZDMCkgfCAweDAwNjQpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDA1RCkgJiAweEZGODApIHwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDEzLCAweDAwRkYsIDB4MTkwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkMwLCAweDAwNjQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNUQsIDB4RkY4MCwgMHgwMDBBKTsKIAl9CiAKIAlpZiAoZGV2LT5iYWRfZnJhbWVzX3ByZWVtcHQpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX1JBRElPX0JJVEZJRUxEKSB8ICgxIDw8IDExKSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgKDEgPDwgMTEpKTsKIAl9CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewpAQCAtMTY5NSw3ICsxNTcxLDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QiwgMHgwMDdCKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QywgMHgwMEIwKTsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xNzcxLDEyICsxNjQ3LDEwIEBACiAJCXZhbCArPSAweDAyMDI7CiAJfQogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDIwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTEsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKSB8IDB4MDAwNCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDIwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA1MSwgMHgwMDA0KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1QiwgMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDVDLCAwKTsKIAl9CkBAIC0xODAxLDggKzE2NzUsNyBAQAogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUIsIDB4N0IpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUMsIDB4QjApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpICYgMHgwMEY4KSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwN0EsIDB4MDBGOCwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xODE0LDE5ICsxNjg3LDE2IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY4KTsKIAliNDNfc2V0X3R4cG93ZXJfZyhkZXYsICZncGh5LT5iYmF0dCwgJmdwaHktPnJmYXR0LCBncGh5LT50eF9jb250cm9sKTsKIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1RCwgKGI0M19waHlfcmVhZChkZXYsIDB4NUQpCi0JCQkJCSAgJiAweEZGODApIHwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHg1RCwgMHhGRjgwLCAweDAwMDMpOwogCX0KIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gMikKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUQsIDB4MDAwRCk7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gNCkgewogCQliNDNfd3JpdGUxNihkZXYsIDB4M0U0LCA5KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4NjEsIGI0M19waHlfcmVhZChkZXYsIDB4NjEpCi0JCQkgICAgICAmIDB4MEZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIDB4NjEsIDB4MEZGRik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMikgJiAweEZGQzApCi0JCQkgICAgICB8IDB4MDAwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMiwgMHhGRkMwLCAweDAwMDQpOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IpCiAJCUI0M19XQVJOX09OKDEpOwpAQCAtMTg2OCw2MyArMTczOCwzOSBAQAogCWJhY2t1cF9yYWRpb1sxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKTsKIAliYWNrdXBfcmFkaW9bMl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApICYgMHgzRkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRywKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRykgfCAweDgwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDAyKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSAmIDB4RkZGRCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMDEpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhGRkZFKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4M0ZGRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDS0JCQU5EQ0ZHLCAweDgwMDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZGRCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDAxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGRkZFKTsKIAlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSKSB8IDB4MDAwMSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX0FOQUxPR09WRVJWQUwpICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikgfCAweDAwMDIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwKLQkJCQkJICAgQjQzX1BIWV9BTkFMT0dPVkVSVkFMKSAmIDB4RkZGRCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDEpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDIpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRCk7CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDBDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMzApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkgICAgICAgJiAweEZGQ0YpIHwgMHgxMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDBDKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweDAwMEMpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAzMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZDRiwgMHgxMCk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHg1QSksIDB4MDc4MCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4NTkpLCAweEM4MTApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMHgwMDBEKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDBBKSwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwQSkpIHwgMHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MEEpLCAweDIwMDApOwogCWlmIChwaHktPnJldiAhPSAxKSB7CS8qIE5vdCBpbiBzcGVjcywgYnV0IG5lZWRlZCB0byBwcmV2ZW50IFBQQyBtYWNoaW5lIGNoZWNrICovCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpIHwgMHgwMDA0KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkgJiAweEZGRkIpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDA0KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkIpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgwMyksCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDAzKSkKLQkJICAgICAgICYgMHhGRjlGKSB8IDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MDMpLCAweEZGOUYsIDB4NDApOwogCiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDAwMEYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCQkgICAgICAmIDB4RkZGMCkgfCAweDkpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgMHg5KTsKIAl9CiAJYjQzX2dwaHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGRldiwgMTEpOwogCkBAIC0xOTM0LDQ1ICsxNzgwLDI4IEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0xPX01BU0ssIDB4ODAyMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTE9fQ1RMLCAwKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDJCKSwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpKQotCQkgICAgICAgJiAweEZGQzApIHwgMHgwMSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkIpLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgyQikpCi0JCSAgICAgICAmIDB4QzBGRikgfCAweDgwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4RkZDMCwgMHgwMSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4QzBGRiwgMHg4MDApOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAxMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhDRkZGKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweENGRkYpOwogCiAJaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgewogCQlpZiAocGh5LT5yZXYgPj0gNykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSKQotCQkJCSAgICAgIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICB8IDB4ODAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHg4MDAwKTsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDdBKQotCQkJICAmIDB4MDBGNyk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDdBLCAweDAwRjcpOwogCiAJaiA9IDA7CiAJbG9vcF9pX21heCA9IChwaHktPnJhZGlvX3JldiA9PSA4KSA/IDE1IDogOTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcF9pX21heDsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CiAJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIGkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICAgJiAweEYwRkYpIHwgKGogPDwgOCkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICAgJiAweDBGRkYpIHwgMHhBMDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICB8IDB4RjAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGMEZGLCAoaiA8PCA4KSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHgwRkZGLCAweEEwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhGMDAwKTsKIAkJCXVkZWxheSgyMCk7CiAJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19MRUFLQUdFKSA+PSAweERGQykKIAkJCQlnb3RvIGV4aXRfbG9vcDE7CkBAIC0xOTgyLDIwICsxODExLDEyIEBACiAJbG9vcDFfb3V0ZXJfZG9uZSA9IGk7CiAJbG9vcDFfaW5uZXJfZG9uZSA9IGo7CiAJaWYgKGogPj0gOCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCSAgICAgIHwgMHgzMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4MzApOwogCQl0cnN3X3J4ID0gMHgxQjsKIAkJZm9yIChqID0gaiAtIDg7IGogPCAxNjsgaisrKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkJCSAgICAgICAmIDB4RjBGRikgfCAoaiA8PCA4KSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgICAmIDB4MEZGRikgfCAweEEwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgIHwgMHhGMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweEYwRkYsIChqIDw8IDgpKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweDBGRkYsIDB4QTAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweEYwMDApOwogCQkJdWRlbGF5KDIwKTsKIAkJCXRyc3dfcnggLT0gMzsKIAkJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0xFQUtBR0UpID49IDB4REZDKQpAQCAtMjA0NiwzNCArMTg2NywyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDM2LCAweEZFRkYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDB4MDIwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdDKSB8IDB4MDAwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKSB8IDB4RjAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0MsIDB4MDAwMik7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0EsIDB4RjAwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0N0EsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0EpCi0JCQkJCSAgICAmIDB4RkYwRikgfCAweDAwMTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICB8IDB4ODAwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwNEUpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0N0EsIDB4RkYwRiwgMHgwMDEwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNUQsIDB4ODAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzYpCi0JCQkgICAgICB8IDB4MDQwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDA0MDApOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzYsIGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikKLQkJCSAgICAgIHwgMHgwMjAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KQotCQkJICAgICAgfCAweDA0MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEYsIGI0M19waHlfcmVhZChkZXYsIDB4MDA0RikKLQkJCSAgICAgICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA0RSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDA0RSkKLQkJCQkJICAgICYgMHhGRkMwKSB8IDB4MDAxMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNiwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDVELCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwNEYsIDB4RkZGRSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDdBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKQotCQkJCQkgICAgJiAweEZGMEYpIHwgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDdBLCAweEZGMEYsIDB4MDAxMCk7CiAJfQogfQogCkBAIC0yMDg5LDIyICsxOTAwLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkZDMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KSAmIDB4RkYwMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMzYsIDB4RkZDMCwgKGdwaHktPnRndF9pZGxlX3Rzc2kgLSBncGh5LT5jdXJfaWRsZV90c3NpKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDc4LCAweEZGMDAsIChncGh5LT50Z3RfaWRsZV90c3NpIC0gZ3BoeS0+Y3VyX2lkbGVfdHNzaSkpOwogCWI0M19ncGh5X3Rzc2lfcG93ZXJfbHRfaW5pdChkZXYpOwogCWI0M19ncGh5X2dhaW5fbHRfaW5pdChkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNjAsIGI0M19waHlfcmVhZChkZXYsIDB4MDA2MCkgJiAweEZGQkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDA2MCwgMHhGRkJGKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE0LCAweDAwMDApOwogCiAJQjQzX1dBUk5fT04ocGh5LT5yZXYgPCA2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgIHwgMHgwODAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgICYgMHhGRUZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpCi0JCSAgICAgICYgMHhGRkJGKTsKKwliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwODAwKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0NzgsIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAxLCAweEZGQkYpOwogCiAJYjQzX2dwaHlfZGNfbHRfaW5pdChkZXYsIDEpOwogCkBAIC0yMTM5LDkgKzE5NDUsNyBAQAogCWI0M19oYXJkd2FyZV9wY3RsX2Vhcmx5X2luaXQoZGV2KTsKIAlpZiAoZ3BoeS0+Y3VyX2lkbGVfdHNzaSA9PSAwKSB7CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNzYpCi0JCQkJCSAgICYgMHgwMEY3KSB8IDB4MDA4NCk7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA3NiwgMHgwMEY3LCAweDAwODQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGI0M19yZmF0dCByZmF0dDsKIAkJCXN0cnVjdCBiNDNfYmJhdHQgYmJhdHQ7CkBAIC0yMTc0LDkgKzE5NzgsNyBAQAogCQkJfQogCQl9CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3NikKLQkJCQkJICAmIDB4RkY3Qik7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3NiwgMHhGRjdCKTsKIAkJfSBlbHNlIHsKIAkJCWI0M19zZXRfdHhwb3dlcl9nKGRldiwgJm9sZF9iYmF0dCwKIAkJCQkJICAmb2xkX3JmYXR0LCBvbGRfdHhfY29udHJvbCk7CkBAIC0yMjIwLDIwICsyMDIyLDE0IEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLCAweDgwMDYpOwogCQl9CiAJCWlmICh0bXAgPT0gNSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweENDKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpKQotCQkJCSAgICAgICAmIDB4MDBGRikgfCAweDFGMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpLCAweDAwRkYsIDB4MUYwMCk7CiAJCX0KIAl9CiAJaWYgKChwaHktPnJldiA8PSAyICYmIHBoeS0+Z21vZGUpIHx8IHBoeS0+cmV2ID49IDIpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg3RSksIDB4NzgpOwogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4ODApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpKQotCQkJICAgICAgfCAweDQpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfRVhURygweDAxKSwgMHg4MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLCAweDQpOwogCX0KIAlpZiAoaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkKIAkJYjQzX2NhbGNfbG9vcGJhY2tfZ2FpbihkZXYpOwpAQCAtMjI1MSwxNSArMjA0NywxMCBAQAogCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzIHwgZ3BoeS0+CiAJCQkJICBsb19jb250cm9sLT50eF9tYWduKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpICYgMHhGRkYwKQotCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsIGdwaHktPmxvX2NvbnRyb2wtPnR4X2JpYXMpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgzNiksCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzNikpCi0JCQkgICAgICAgJiAweDBGRkYpIHwgKGdwaHktPmxvX2NvbnRyb2wtPgotCQkJCQkgICAgdHhfYmlhcyA8PCAxMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDSygweDM2KSwgMHgwRkZGLCAoZ3BoeS0+bG9fY29udHJvbC0+dHhfYmlhcyA8PCAxMikpOwogCX0KIAlpZiAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRSksIDB4ODA3NSk7CkBAIC0yMjk4LDExICsyMDg5LDggQEAKIAkgICBidXQgT0ZETSBpcyBsZWdhbCBldmVyeXdoZXJlICovCiAJaWYgKChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDMwNgogCSAgICAgJiYgZGV2LT5kZXYtPmJ1cy0+Y2hpcF9wYWNrYWdlID09IDIpIHx8IDApIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKQotCQkJICAgICAgJiAweEJGRkYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpKQotCQkJICAgICAgJiAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4QkZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEMzKSwgMHg3RkZGKTsKIAl9CiB9CiAKQEAgLTI1MDQsOSArMjI5Miw4IEBACiAKIAliNDNfcGh5X2xvY2soZGV2KTsKIAliNDNfcmFkaW9fbG9jayhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgJiAweEZGRkMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSAmIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCAweEZGRkMpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfR19DUlMsIDB4N0ZGRik7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAzLCA4LCAxKTsKIAogCXN0YXJ0ID0gKGNoYW5uZWwgLSA1ID4gMCkgPyBjaGFubmVsIC0gNSA6IDE7CkBAIC0yNTE3LDExICsyMzA0LDkgQEAKIAkJCXJldFtpIC0gMV0gPSBiNDNfZ3BoeV9hY2lfZGV0ZWN0KGRldiwgaSk7CiAJfQogCWI0M19zd2l0Y2hfY2hhbm5lbChkZXYsIGNoYW5uZWwpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKSB8IDB4MDAwMyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQwMywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDAzKSAmIDB4RkZGOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpIHwgMHg4MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MDIsIDB4RkZGQywgMHgwMDAzKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MDMsIDB4RkZGOCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoZGV2KTsKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgewogCQlpZiAoIXJldFtpXSkKQEAgLTI1NjUsOCArMjM1MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICogYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHMxNiBwYWIwLCBzMTYgcGFiMSwgczE2IHBhYjIpCit1OCAqYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgczE2IHBhYjAsIHMxNiBwYWIxLCBzMTYgcGFiMikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCAqdGFiOwpAQCAtMzE5MSw2ICsyOTc2LDcgQEAKIAkgKiBCYXNlYmFuZCBhdHRlbm51YXRpb24uIFN1YnRyYWN0IGl0LiAqLwogCWJiYXR0X2RlbHRhIC09IDQgKiByZmF0dF9kZWx0YTsKIAorI2lmIEI0M19ERUJVRwogCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX1hNSVRQT1dFUikpIHsKIAkJaW50IGRibSA9IHB3cl9hZGp1c3QgPCAwID8gLXB3cl9hZGp1c3QgOiBwd3JfYWRqdXN0OwogCQliNDNkYmcoZGV2LT53bCwKQEAgLTMxOTksNiArMjk4NSw4IEBACiAJCSAgICAgICAocHdyX2FkanVzdCA8IDAgPyAiLSIgOiAiIiksIFE1Ml9BUkcoZGJtKSwKIAkJICAgICAgIGJiYXR0X2RlbHRhLCByZmF0dF9kZWx0YSk7CiAJfQorI2VuZGlmIC8qIERFQlVHICovCisKIAkvKiBTbyBkbyB3ZSBmaW5hbGx5IG5lZWQgdG8gYWRqdXN0IHNvbWV0aGluZyBpbiBoYXJkd2FyZT8gKi8KIAlpZiAoKHJmYXR0X2RlbHRhID09IDApICYmIChiYmF0dF9kZWx0YSA9PSAwKSkKIAkJZ290byBub19hZGp1c3RtZW50X25lZWRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYwppbmRleCBjNWQ5ZGMzLi41OGUzMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCkBAIC0zLDcgKzMsNyBAQAogICBCcm9hZGNvbSBCNDMgd2lyZWxlc3MgZHJpdmVyCiAgIElFRUUgODAyLjExZyBMUC1QSFkgZHJpdmVyCiAKLSAgQ29weXJpZ2h0IChjKSAyMDA4IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDggKzIzLDEwIEBACiAqLwogCiAjaW5jbHVkZSAiYjQzLmgiCisjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInBoeV9scC5oIgogI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJ0YWJsZXNfbHBwaHkuaCIKIAogCiBzdGF0aWMgaW50IGI0M19scHBoeV9vcF9hbGxvY2F0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01Nyw5ICs1OSwzOTQgQEAKIAlkZXYtPnBoeS5scCA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgbHBwaHlfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjBfMV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlCNDNfV0FSTl9PTigxKTsvL1RPRE8gcmV2IDwgMiBub3Qgc3VwcG9ydGVkLCB5ZXQuCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjJwbHVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHg1MCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfQ1RMLCAweDg4MDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlJWQUwsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjkpLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTCwgMHgxMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMCwgMHhGRjAwLCAweDc4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRENPRkZTRVRUUkFOU0lFTlQsIDB4RjhGRiwgMHgyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVCwgMHhGRjAwLCAweDdGKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENILCAweEZGMEYsIDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QUkVBTUJMRUNPTkZJUk1UTywgMHhGRjAwLCAweDIpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgfjB4NDAwMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4MSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhERiksIDB4RkYwMCwgMHhGNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4REYpLCAweDAwRkYsIDB4RjEwMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9DTElQVEhSRVNILCAweDQ4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSElHQUlOREIsIDB4RkYwMCwgMHg0Nik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RTQpLCAweEZGMDAsIDB4MTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QV1JfVEhSRVNIMSwgMHhGRkYwLCAweDkpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIH4weEYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweDAwRkYsIDB4NTUwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4RjgxRiwgMHhBMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0dBSU5ESVJFQ1RNSVNNQVRDSCwgMHhFMEZGLCAweDMwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0hJR0FJTkRCLCAweDAwRkYsIDB4MkEwMCk7CisJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA9PSAwKSkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTE9XR0FJTkRCLCAweDAwRkYsIDB4MjEwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweEZGMDAsIDB4QSk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xPV0dBSU5EQiwgMHgwMEZGLCAweDFFMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVkVSWUxPV0dBSU5EQiwgMHhGRjAwLCAweEQpOworCX0KKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkZFMCwgMHgxRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RkYpLCAweEZGRTAsIDB4Qyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTAwKSwgMHhGRjAwLCAweDE5KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRiksIDB4MDNGRiwgMHgzQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkMxRiwgMHgzRTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEZGKSwgMHhGRkUwLCAweEMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwMCksIDB4MDBGRiwgMHgxOTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHg4M0ZGLCAweDU4MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZGRTAsIDB4MTIpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlOTUlTTUFUQ0gsIDB4MEZGRiwgMHg5MDAwKTsKKworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjE2KDB4MDgsIDB4MTQpLCAwKTsKKwliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDEyKSwgMHg0MCk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEYwRkYsIDB4QjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1NZTkNQRUFLQ05ULCAweEZGRjgsIDB4Nik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHg5RDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX01JTlBXUl9MRVZFTCwgMHhGRjAwLCAweEExKTsKKwl9IGVsc2UgLyogNUdIeiAqLworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIH4weDQwKTsKKworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweEZGMDAsIDB4QjMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweDAwRkYsIDB4QUQwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0lOUFVUX1BXUkRCLCAweEZGMDAsIGxwcGh5LT5yeF9wd3Jfb2Zmc2V0KTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRVNFVF9DVEwsIDB4NDQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkVTRVRfQ1RMLCAweDgwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8wLCAweEE5NTQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzEsCisJCSAgICAgIDB4MjAwMCB8ICgodTE2KWxwcGh5LT5yc3NpX2dzIDw8IDEwKSB8CisJCSAgICAgICgodTE2KWxwcGh5LT5yc3NpX3ZjIDw8IDQpIHwgbHBwaHktPnJzc2lfdmYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9iYXNlYmFuZF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlscHBoeV90YWJsZV9pbml0KGRldik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKQorCQlscHBoeV9iYXNlYmFuZF9yZXYycGx1c19pbml0KGRldik7CisJZWxzZQorCQlscHBoeV9iYXNlYmFuZF9yZXYwXzFfaW5pdChkZXYpOworfQorCitzdHJ1Y3QgYjIwNjJfZnJlcWRhdGEgeworCXUxNiBmcmVxOworCXU4IGRhdGFbNl07Cit9OworCisvKiBJbml0aWFsaXplIHRoZSAyMDYyIHJhZGlvLiAqLworc3RhdGljIHZvaWQgbHBwaHlfMjA2Ml9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbGZyZXEsIHBkaXYsIHRtcCwgcmVmOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSAqZmQgPSBOVUxMOworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSBmcmVxZGF0YV90YWJbXSA9IHsKKwkJeyAuZnJlcSA9IDEyMDAwLCAuZGF0YVswXSA9ICA2LCAuZGF0YVsxXSA9ICA2LCAuZGF0YVsyXSA9ICA2LAorCQkJCSAuZGF0YVszXSA9ICA2LCAuZGF0YVs0XSA9IDEwLCAuZGF0YVs1XSA9ICA2LCB9LAorCQl7IC5mcmVxID0gMTMwMDAsIC5kYXRhWzBdID0gIDQsIC5kYXRhWzFdID0gIDQsIC5kYXRhWzJdID0gIDQsCisJCQkJIC5kYXRhWzNdID0gIDQsIC5kYXRhWzRdID0gMTEsIC5kYXRhWzVdID0gIDcsIH0sCisJCXsgLmZyZXEgPSAxNDQwMCwgLmRhdGFbMF0gPSAgMywgLmRhdGFbMV0gPSAgMywgLmRhdGFbMl0gPSAgMywKKwkJCQkgLmRhdGFbM10gPSAgMywgLmRhdGFbNF0gPSAxMiwgLmRhdGFbNV0gPSAgNywgfSwKKwkJeyAuZnJlcSA9IDE2MjAwLCAuZGF0YVswXSA9ICAzLCAuZGF0YVsxXSA9ICAzLCAuZGF0YVsyXSA9ICAzLAorCQkJCSAuZGF0YVszXSA9ICAzLCAuZGF0YVs0XSA9IDEzLCAuZGF0YVs1XSA9ICA4LCB9LAorCQl7IC5mcmVxID0gMTgwMDAsIC5kYXRhWzBdID0gIDIsIC5kYXRhWzFdID0gIDIsIC5kYXRhWzJdID0gIDIsCisJCQkJIC5kYXRhWzNdID0gIDIsIC5kYXRhWzRdID0gMTQsIC5kYXRhWzVdID0gIDgsIH0sCisJCXsgLmZyZXEgPSAxOTIwMCwgLmRhdGFbMF0gPSAgMSwgLmRhdGFbMV0gPSAgMSwgLmRhdGFbMl0gPSAgMSwKKwkJCQkgLmRhdGFbM10gPSAgMSwgLmRhdGFbNF0gPSAxNCwgLmRhdGFbNV0gPSAgOSwgfSwKKwl9OworCisJYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoZGV2KTsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fVFhfQ1RMMywgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEw0LCAwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX0NUTDUsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDB4NDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDB4MTApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDApOworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA2Ml9OX1RTU0lfQ1RMMCwgMHgxKTsKKwllbHNlCisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfTl9UU1NJX0NUTDAsIH4weDEpOworCisJLyogR2V0IHRoZSBjcnlzdGFsIGZyZXEsIGluIEh6LiAqLworCWNyeXN0YWxmcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKworCUI0M19XQVJOX09OKCEoYnVzLT5jaGlwY28uY2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKSk7CisJQjQzX1dBUk5fT04oY3J5c3RhbGZyZXEgPT0gMCk7CisKKwlpZiAoY3J5c3RhbGZyZXEgPj0gMzAwMDAwMDApIHsKKwkJcGRpdiA9IDE7CisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweEZGRkIpOworCX0gZWxzZSB7CisJCXBkaXYgPSAyOworCQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweDQpOworCX0KKworCXRtcCA9ICg4MDAwMDAwMDAgKiBwZGl2ICsgY3J5c3RhbGZyZXEpIC8gKDMyMDAwMDAwICogcGRpdik7CisJdG1wID0gKHRtcCAtIDEpICYgMHhGRjsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE4LCB0bXApOworCisJdG1wID0gKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBwZGl2KSAvICgyMDAwMDAwICogcGRpdik7CisJdG1wID0gKCh0bXAgJiAweEZGKSAtIDEpICYgMHhGRkZGOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTksIHRtcCk7CisKKwlyZWYgPSAoMTAwMCAqIHBkaXYgKyAyICogY3J5c3RhbGZyZXEpIC8gKDIwMDAgKiBwZGl2KTsKKwlyZWYgJj0gMHhGRkZGOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYik7IGkrKykgeworCQlpZiAocmVmIDwgZnJlcWRhdGFfdGFiW2ldLmZyZXEpIHsKKwkJCWZkID0gJmZyZXFkYXRhX3RhYltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZmQpCisJCWZkID0gJmZyZXFkYXRhX3RhYltBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYikgLSAxXTsKKwliNDNkYmcoZGV2LT53bCwgImIyMDYyOiBVc2luZyBjcnlzdGFsIHRhYiBlbnRyeSAldSBrSHouXG4iLAorCSAgICAgICBmZC0+ZnJlcSk7IC8qIEZJWE1FOiBLZWVwIHRoaXMgcHJpbnRrIHVudGlsIHRoZSBjb2RlIGlzIGZ1bGx5IGRlYnVnZ2VkLiAqLworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEw4LAorCQkJKCh1MTYpKGZkLT5kYXRhWzFdKSA8PCA0KSB8IGZkLT5kYXRhWzBdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDksCisJCQkoKHUxNikoZmQtPmRhdGFbM10pIDw8IDQpIHwgZmQtPmRhdGFbMl0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTAsIGZkLT5kYXRhWzRdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDExLCBmZC0+ZGF0YVs1XSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIDIwNjMgcmFkaW8uICovCitzdGF0aWMgdm9pZCBscHBoeV8yMDYzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8vVE9ETworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zeW5jX3N0eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JhZGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFRoZSByYWRpbyBpcyBhdHRhY2hlZCB0aHJvdWdoIHRoZSA0d2lyZSBidXMuICovCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweDIpOworCXVkZWxheSgxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweEZGRkQpOworCXVkZWxheSgxKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCWxwcGh5XzIwNjJfaW5pdChkZXYpOworCX0gZWxzZSB7CisJCWxwcGh5XzIwNjNfaW5pdChkZXYpOworCQlscHBoeV9zeW5jX3N0eChkZXYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjApLCAweDVGODApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjEpLCAwKTsKKwkJLy9UT0RPIERvIHNvbWV0aGluZyBvbiB0aGUgYmFja3BsYW5lCisJfQorfQorCisvKiBSZWFkIHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgZnJvbSBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIGxwcGh5X3JlYWRfdHhfcGN0bF9tb2RlX2Zyb21faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwljdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTUQpOworCXN3aXRjaCAoY3RsICYgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREUpIHsKKwljYXNlIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjoKKwkJbHBwaHktPnR4cGN0bF9tb2RlID0gQjQzX0xQUEhZX1RYUENUTF9PRkY7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1c6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfU1c7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFc6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfSFc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfVU5LTk9XTjsKKwkJQjQzX1dBUk5fT04oMSk7CisJCWJyZWFrOworCX0KK30KKworLyogU2V0IHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgaW4gaGFyZHdhcmUuICovCitzdGF0aWMgdm9pZCBscHBoeV93cml0ZV90eF9wY3RsX21vZGVfdG9faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwlzd2l0Y2ggKGxwcGh5LT50eHBjdGxfbW9kZSkgeworCWNhc2UgQjQzX0xQUEhZX1RYUENUTF9PRkY6CisJCWN0bCA9IEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX0hXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9IVzsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX1NXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9TVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsID0gMDsKKwkJQjQzX1dBUk5fT04oMSk7CisJfQorCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIGVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIG1vZGUpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgb2xkbW9kZTsKKworCW9sZG1vZGUgPSBscHBoeS0+dHhwY3RsX21vZGU7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCWlmIChscHBoeS0+dHhwY3RsX21vZGUgPT0gbW9kZSkKKwkJcmV0dXJuOworCWxwcGh5LT50eHBjdGxfbW9kZSA9IG1vZGU7CisKKwlpZiAob2xkbW9kZSA9PSBCNDNfTFBQSFlfVFhQQ1RMX0hXKSB7CisJCS8vVE9ETyBVcGRhdGUgVFggUG93ZXIgTlBUCisJCS8vVE9ETyBDbGVhciBhbGwgVFggUG93ZXIgb2Zmc2V0cworCX0gZWxzZSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpIHsKKwkJCS8vVE9ETyBSZWNhbGN1bGF0ZSB0YXJnZXQgVFggcG93ZXIKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCQkJMHhGRjgwLCBscHBoeS0+dHNzaV9pZHgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTSwKKwkJCQkJMHg4RkZGLCAoKHUxNilscHBoeS0+dHNzaV9ucHQgPDwgMTYpKTsKKwkJCS8vVE9ETyBTZXQgIlRTU0kgVHJhbnNtaXQgQ291bnQiIHZhcmlhYmxlIHRvIHRvdGFsIHRyYW5zbWl0dGVkIGZyYW1lIGNvdW50CisJCQkvL1RPRE8gRGlzYWJsZSBUWCBnYWluIG92ZXJyaWRlCisJCQlscHBoeS0+dHhfcHdyX2lkeF9vdmVyID0gLTE7CisJCX0KKwl9CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpCisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhEMCksIDB4RkQsIDB4Mik7CisJCWVsc2UKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHhGRCwgMCk7CisJfQorCWxwcGh5X3dyaXRlX3R4X3BjdGxfbW9kZV90b19oYXJkd2FyZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKworCWxwcGh5LT50eF9wd3JfaWR4X292ZXIgPSBpbmRleDsKKwlpZiAobHBwaHktPnR4cGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKQorCQlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfU1cpOworCisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2J0Y29leF9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19CVENPRVhfQ1RMLCAweDMpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQlRDT0VYX1RYQ1RMLCAweEZGKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MzIgKnNhdmVkX3RhYjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2F2ZWRfdGFiX3NpemUgPSAyNTY7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgdHhwY3RsX21vZGU7CisJczggdHhfcHdyX2lkeF9vdmVyOworCXUxNiB0c3NpX25wdCwgdHNzaV9pZHg7CisKKwlzYXZlZF90YWIgPSBrY2FsbG9jKHNhdmVkX3RhYl9zaXplLCBzaXplb2Yoc2F2ZWRfdGFiWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlZF90YWIpIHsKKwkJYjQzZXJyKGRldi0+d2wsICJQUjQxNTczIGZhaWxlZC4gT3V0IG9mIG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXR4cGN0bF9tb2RlID0gbHBwaHktPnR4cGN0bF9tb2RlOworCXR4X3B3cl9pZHhfb3ZlciA9IGxwcGh5LT50eF9wd3JfaWR4X292ZXI7CisJdHNzaV9ucHQgPSBscHBoeS0+dHNzaV9ucHQ7CisJdHNzaV9pZHggPSBscHBoeS0+dHNzaV9pZHg7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfbHB0YWJfcmVhZF9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTAsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfSBlbHNlIHsKKwkJYjQzX2xwdGFiX3JlYWRfYnVsayhkZXYsIEI0M19MUFRBQjMyKDcsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfQorCS8vVE9ETworCisJa2ZyZWUoc2F2ZWRfdGFiKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfY2FsaWJyYXRpb24oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCWVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHNhdmVkX3BjdGxfbW9kZTsKKworCWI0M19tYWNfc3VzcGVuZChkZXYpOworCisJbHBwaHlfYnRjb2V4X292ZXJyaWRlKGRldik7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXNhdmVkX3BjdGxfbW9kZSA9IGxwcGh5LT50eHBjdGxfbW9kZTsKKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfT0ZGKTsKKwkvL1RPRE8gUGVyZm9ybSB0cmFuc21pdCBwb3dlciB0YWJsZSBJL1EgTE8gY2FsaWJyYXRpb24KKwlpZiAoKGRldi0+cGh5LnJldiA9PSAwKSAmJiAoc2F2ZWRfcGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKSkKKwkJbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKGRldik7CisJLy9UT0RPIElmIGEgZnVsbCBjYWxpYnJhdGlvbiBoYXMgbm90IGJlZW4gcGVyZm9ybWVkIG9uIHRoaXMgY2hhbm5lbCB5ZXQsIHBlcmZvcm0gUEFQRCBUWC1wb3dlciBjYWxpYnJhdGlvbgorCWxwcGh5X3NldF90eF9wb3dlcl9jb250cm9sKGRldiwgc2F2ZWRfcGN0bF9tb2RlKTsKKwkvL1RPRE8gUGVyZm9ybSBJL1EgY2FsaWJyYXRpb24gd2l0aCBhIHNpbmdsZSBjb250cm9sIHZhbHVlIHNldAorCisJYjQzX21hY19lbmFibGUoZGV2KTsKK30KKworLyogSW5pdGlhbGl6ZSBUWCBwb3dlciBjb250cm9sICovCitzdGF0aWMgdm9pZCBscHBoeV90eF9wY3RsX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWlmICgwLypGSVhNRSBIV1BDVEwgY2FwYWJsZSAqLykgeworCQkvL1RPRE8KKwl9IGVsc2UgeyAvKiBUaGlzIGRldmljZSBpcyBvbmx5IHNvZnR3YXJlIFRYIHBvd2VyIGNvbnRyb2wgY2FwYWJsZS4gKi8KKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJLy9UT0RPCisJCX0gZWxzZSB7CisJCQkvL1RPRE8KKwkJfQorCQkvL1RPRE8gc2V0IEJCIG11bHRpcGxpZXIgdG8gMHgwMDk2CisJfQorfQorCitzdGF0aWMgaW50IGI0M19scHBoeV9vcF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwkvKiBUT0RPOiBiYW5kIFNQUk9NICovCisJbHBwaHlfYmFzZWJhbmRfaW5pdChkZXYpOworCWxwcGh5X3JhZGlvX2luaXQoZGV2KTsKKwkvL1RPRE8gY2FsaWJyYXRlIFJDCisJLy9UT0RPIHNldCBjaGFubmVsCisJbHBwaHlfdHhfcGN0bF9pbml0KGRldik7CisJLy9UT0RPIGZ1bGwgY2FsaWIKIAogCXJldHVybiAwOwogfQpAQCAtMTE1LDcgKzUwMiw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjQzX2xwcGh5X29wX2dldF9kZWZhdWx0X2NoYW4oc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCXJldHVybiAxOyAvKiBEZWZhdWx0IHRvIGNoYW5uZWwgMSAqLworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiAxOworCXJldHVybiAzNjsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2xwcGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmgKaW5kZXggYjBiNTM1Ny4uMTgzNzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuaApAQCAtNCw4ICs0LDI4NSBAQAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBMUC1QSFkgKi8KIAogCisvKiBUaGUgQ0NLIFBIWSByZWdpc3RlciByYW5nZS4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfVkVSU0lPTgkJCUI0M19QSFlfQ0NLKDB4MDApIC8qIEIgUEhZIHZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfQkJDT05GSUcJCQlCNDNfUEhZX0NDSygweDAxKSAvKiBCIFBIWSBCQkNvbmZpZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9SWF9TVEFUMAkJCUI0M19QSFlfQ0NLKDB4MDQpIC8qIEIgUEhZIFJYIFN0YXR1czAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDEJCQlCNDNfUEhZX0NDSygweDA1KSAvKiBCIFBIWSBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NSU19USFJFU0gJCQlCNDNfUEhZX0NDSygweDA2KSAvKiBCIFBIWSBDUlMgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RYRVJST1IJCQlCNDNfUEhZX0NDSygweDA3KSAvKiBCIFBIWSBUeEVycm9yICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NIQU5ORUwJCQlCNDNfUEhZX0NDSygweDA4KSAvKiBCIFBIWSBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1dPUktBUk9VTkQJCQlCNDNfUEhZX0NDSygweDA5KSAvKiBCIFBIWSB3b3JrYXJvdW5kICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RFU1QJCQlCNDNfUEhZX0NDSygweDBBKSAvKiBCIFBIWSBUZXN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0ZPVVJXSVJFX0FERFIJCUI0M19QSFlfQ0NLKDB4MEIpIC8qIEIgUEhZIEZvdXJ3aXJlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfRk9VUldJUkVfREFUQV9ISQkJQjQzX1BIWV9DQ0soMHgwQykgLyogQiBQSFkgRm91cndpcmUgRGF0YSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9GT1VSV0lSRV9EQVRBX0xPCQlCNDNfUEhZX0NDSygweDBEKSAvKiBCIFBIWSBGb3Vyd2lyZSBEYXRhIExvICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0JJU1RfU1RBVAkJCUI0M19QSFlfQ0NLKDB4MEUpIC8qIEIgUEhZIEJpc3QgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9QQV9SQU1QX1RYX1RPCQkJQjQzX1BIWV9DQ0soMHgxMCkgLyogUEEgUmFtcCBUWCBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9TWU5USF9EQ19USU1FUgkJQjQzX1BIWV9DQ0soMHgxMSkgLyogUkYgU3ludGggREMgVGltZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BBX1JBTVBfVFhfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMikgLyogUEEgcmFtcCBUWCBUaW1lIGluICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9GSUxURVJfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMykgLyogUlggRmlsdGVyIFRpbWUgaW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BMTF9DT0VGRl9TCQkJQjQzX1BIWV9DQ0soMHgxOCkgLyogUExMIENvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9QTExfT1VUCQkJQjQzX1BIWV9DQ0soMHgxOSkgLyogUExMIE91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlNTSV9USFJFUwkJCUI0M19QSFlfQ0NLKDB4MjApIC8qIFJTU0kgVGhyZXNob2xkICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19ISAkJCUI0M19QSFlfQ0NLKDB4MjEpIC8qIElRIFRocmVzaG9sZCBISCAqLworI2RlZmluZSBCNDNfTFBQSFlfSVFfVEhSRVNfSAkJCUI0M19QSFlfQ0NLKDB4MjIpIC8qIElRIFRocmVzaG9sZCBIICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19MCQkJQjQzX1BIWV9DQ0soMHgyMykgLyogSVEgVGhyZXNob2xkIEwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1RIUkVTX0xMCQkJQjQzX1BIWV9DQ0soMHgyNCkgLyogSVEgVGhyZXNob2xkIExMICovCisjZGVmaW5lIEI0M19MUFBIWV9BR0NfR0FJTgkJCUI0M19QSFlfQ0NLKDB4MjUpIC8qIEFHQyBHYWluICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFfR0FJTl9SQU5HRQkJQjQzX1BIWV9DQ0soMHgyNikgLyogTE5BIEdhaW4gUmFuZ2UgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0pTU0kJCQkJQjQzX1BIWV9DQ0soMHgyNykgLyogSlNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFNTSV9DVEwJCQlCNDNfUEhZX0NDSygweDI4KSAvKiBUU1NJIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RTU0kJCQkJQjQzX1BIWV9DQ0soMHgyOSkgLyogVFNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9TUwkJCUI0M19QSFlfQ0NLKDB4MkEpIC8qIFRSIExvc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPX0xFQUtBR0UJCQlCNDNfUEhZX0NDSygweDJCKSAvKiBMTyBMZWFrYWdlICovCisjZGVmaW5lIEI0M19MUFBIWV9MT19SU1NJQUNDCQkJQjQzX1BIWV9DQ0soMHgyQykgLyogTE8gUlNTSUFjYyAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9fSVFfTUFHX0FDQwkJCUI0M19QSFlfQ0NLKDB4MkQpIC8qIExPIElRIE1hZyBBY2MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX0RDT0ZGU0VUMQkJCUI0M19QSFlfQ0NLKDB4MkUpIC8qIFRYIERDT2Zmc2V0MSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfRENPRkZTRVQyCQkJQjQzX1BIWV9DQ0soMHgyRikgLyogVFggRENPZmZzZXQyICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DUEVBS0NOVAkJCUI0M19QSFlfQ0NLKDB4MzApIC8qIFN5bmNQZWFrQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRlJFUQkJCUI0M19QSFlfQ0NLKDB4MzEpIC8qIFN5bmNGcmVxICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRElWRVJTSVRZQ1RMCQlCNDNfUEhZX0NDSygweDMyKSAvKiBTeW5jRGl2ZXJzaXR5Q29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUwJCQlCNDNfUEhZX0NDSygweDMzKSAvKiBQZWFrRW5lcmd5TCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUgJCQlCNDNfUEhZX0NDSygweDM0KSAvKiBQZWFrRW5lcmd5SCAqLworI2RlZmluZSBCNDNfTFBQSFlfU1lOQ0NUTAkJCUI0M19QSFlfQ0NLKDB4MzUpIC8qIFN5bmNDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTU1RFUAkJCUI0M19QSFlfQ0NLKDB4MzgpIC8qIERzc3NTdGVwICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTV0FSTVVQCQkJQjQzX1BIWV9DQ0soMHgzOSkgLyogRHNzc1dhcm11cCAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1NJR1BPVwkJCUI0M19QSFlfQ0NLKDB4M0QpIC8qIERzc3NTaWdQb3cgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NGRERFVEVDVEJMT0NLVElNRQkJQjQzX1BIWV9DQ0soMHg0MCkgLyogU2ZkRGV0ZWN0QmxvY2tUSW1lICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRUTwkJCQlCNDNfUEhZX0NDSygweDQxKSAvKiBTRkRUaW1lT3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRDVEwJCQlCNDNfUEhZX0NDSygweDQyKSAvKiBTRkRDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SWERCRwkJCQlCNDNfUEhZX0NDSygweDQzKSAvKiByeERlYnVnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9ERUxBWUNPTVAJCQlCNDNfUEhZX0NDSygweDQ0KSAvKiBSWCBEZWxheUNvbXAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0RST1BPVVRUTwkJCUI0M19QSFlfQ0NLKDB4NDUpIC8qIENSU0Ryb3BvdXRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QU0VVRE9TSE9SVFRPCQkJQjQzX1BIWV9DQ0soMHg0NikgLyogUHNldWRvU2hvcnRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUjM5MzEJCQlCNDNfUEhZX0NDSygweDQ3KSAvKiBQUjM5MzEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NDT0VGRjEJCQlCNDNfUEhZX0NDSygweDQ4KSAvKiBEU1NTQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTQ09FRkYyCQkJQjQzX1BIWV9DQ0soMHg0OSkgLyogRFNTU0NvZWZmMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLQ09FRkYxCQkJQjQzX1BIWV9DQ0soMHg0QSkgLyogQ0NLQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9DQ0tDT0VGRjIJCQlCNDNfUEhZX0NDSygweDRCKSAvKiBDQ0tDb2VmZjIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSQ09SUgkJCUI0M19QSFlfQ0NLKDB4NEMpIC8qIFRSQ29yciAqLworI2RlZmluZSBCNDNfTFBQSFlfQU5HTEVTQ0FMRQkJCUI0M19QSFlfQ0NLKDB4NEQpIC8qIEFuZ2xlU2NhbGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09QVElPTkFMTU9ERVMyCQlCNDNfUEhZX0NDSygweDRGKSAvKiBPcHRpb25hbE1vZGVzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLTE1TU1RFUFNJWkUJCUI0M19QSFlfQ0NLKDB4NTApIC8qIENDS0xNU1N0ZXBTaXplICovCisjZGVmaW5lIEI0M19MUFBIWV9ERkVCWVBBU1MJCQlCNDNfUEhZX0NDSygweDUxKSAvKiBERkVCeXBhc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS1NUQVJUREVMQVlMT05HCQlCNDNfUEhZX0NDSygweDUyKSAvKiBDQ0tTdGFydERlbGF5TG9uZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLU1RBUlRERUxBWVNIT1JUCQlCNDNfUEhZX0NDSygweDUzKSAvKiBDQ0tTdGFydERlbGF5U2hvcnQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BQUk9DQ0hERUxBWQkJCUI0M19QSFlfQ0NLKDB4NTQpIC8qIFBwcm9jQ2hEZWxheSAqLworI2RlZmluZSBCNDNfTFBQSFlfUFBST0NPTk9GRgkJCUI0M19QSFlfQ0NLKDB4NTUpIC8qIFBQcm9jT25PZmYgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQxMAkJQjQzX1BIWV9DQ0soMHg1QikgLyogTE5BR2FpblR3b0JpdDEwICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFHQUlOVFdPQklUMzIJCUI0M19QSFlfQ0NLKDB4NUMpIC8qIExOQUdhaW5Ud29CaXQzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfT1BUSU9OQUxNT0RFUwkJCUI0M19QSFlfQ0NLKDB4NUQpIC8qIE9wdGlvbmFsTW9kZXMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDIJCQlCNDNfUEhZX0NDSygweDVFKSAvKiBCIFBIWSBSWCBTdGF0dXMyICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1JYX1NUQVQzCQkJQjQzX1BIWV9DQ0soMHg1RikgLyogQiBQSFkgUlggU3RhdHVzMyAqLworI2RlZmluZSBCNDNfTFBQSFlfUFdETkRBQ0RFTEFZCQkJQjQzX1BIWV9DQ0soMHg2MykgLyogcHdkbkRhY0RlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRElHSUdBSU5fQ1RMCQlCNDNfUEhZX0NDSygweDY3KSAvKiBGaW5lRGlnaUdhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcyR0FJTlRCTExOQTgJCUI0M19QSFlfQ0NLKDB4NjgpIC8qIExnMkdhaW5UYmxMTkE4ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BMjgJCUI0M19QSFlfQ0NLKDB4NjkpIC8qIExnMkdhaW5UYmxMTkEyOCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTlRCTExOQVRSU1cJCUI0M19QSFlfQ0NLKDB4NkEpIC8qIEdhaW5UYmxMTkFUclN3ICovCisjZGVmaW5lIEI0M19MUFBIWV9QRUFLRU5FUkdZCQkJQjQzX1BIWV9DQ0soMHg2QikgLyogUGVha0VuZXJneSAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcySU5JVEdBSU4JCQlCNDNfUEhZX0NDSygweDZDKSAvKiBsZzJJbml0R2FpbiAqLworI2RlZmluZSBCNDNfTFBQSFlfQkxBTktDT1VOVExOQVBHQQkJQjQzX1BIWV9DQ0soMHg2RCkgLyogQmxhbmtDb3VudExuYVBnYSAqLworI2RlZmluZSBCNDNfTFBQSFlfTE5BR0FJTlRXT0JJVDU0CQlCNDNfUEhZX0NDSygweDZFKSAvKiBMTkFHYWluVHdvQml0NTQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQ3NgkJQjQzX1BIWV9DQ0soMHg2RikgLyogTE5BR2FpblR3b0JpdDc2ICovCisjZGVmaW5lIEI0M19MUFBIWV9KU1NJQ1RMCQkJQjQzX1BIWV9DQ0soMHg3MCkgLyogSlNTSUNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xHMkdBSU5UQkxMTkE0NAkJQjQzX1BIWV9DQ0soMHg3MSkgLyogTGcyR2FpblRibExOQTQ0ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BNjIJCUI0M19QSFlfQ0NLKDB4NzIpIC8qIExnMkdhaW5UYmxMTkE2MiAqLworCisvKiBUaGUgT0ZETSBQSFkgcmVnaXN0ZXIgcmFuZ2UuICovCisjZGVmaW5lIEI0M19MUFBIWV9WRVJTSU9OCQkJQjQzX1BIWV9PRkRNKDB4MDApIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JCQ09ORklHCQkJQjQzX1BIWV9PRkRNKDB4MDEpIC8qIEJCQ29uZmlnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMAkJCUI0M19QSFlfT0ZETSgweDA0KSAvKiBSWCBTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMQkJCUI0M19QSFlfT0ZETSgweDA1KSAvKiBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9FUlJPUgkJCUI0M19QSFlfT0ZETSgweDA3KSAvKiBUWCBFcnJvciAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0hBTk5FTAkJCUI0M19QSFlfT0ZETSgweDA4KSAvKiBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9XT1JLQVJPVU5ECQkJQjQzX1BIWV9PRkRNKDB4MDkpIC8qIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0ZPVVJXSVJFX0FERFIJCQlCNDNfUEhZX09GRE0oMHgwQikgLyogRm91cndpcmUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBSEkJCUI0M19QSFlfT0ZETSgweDBDKSAvKiBGb3Vyd2lyZURhdGFIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBTE8JCUI0M19QSFlfT0ZETSgweDBEKSAvKiBGb3Vyd2lyZURhdGFMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfQklTVFNUQVQwCQkJQjQzX1BIWV9PRkRNKDB4MEUpIC8qIEJpc3RTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9CSVNUU1RBVDEJCQlCNDNfUEhZX09GRE0oMHgwRikgLyogQmlzdFN0YXR1czEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MTApIC8qIGNyc2dhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVBXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxMSkgLyogb2ZkbVBvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1QV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTIpIC8qIG9mZG1Qb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNUFdSX1RIUkVTSDIJCUI0M19QSFlfT0ZETSgweDEzKSAvKiBvZmRtUG93ZXIgVGhyZXNoMiAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1BXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxNCkgLyogZHNzc1Bvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NQV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTUpIC8qIGRzc3NQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwJCQlCNDNfUEhZX09GRE0oMHgxNikgLyogTWluUG93ZXIgTGV2ZWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMAkJQjQzX1BIWV9PRkRNKDB4MTcpIC8qIG9mZG1TeW5jVGhyZXNoMCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gxCQlCNDNfUEhZX09GRE0oMHgxOCkgLyogb2ZkbVN5bmNUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRlJFUUVTVAkJCUI0M19QSFlfT0ZETSgweDE5KSAvKiBGaW5lRnJlcUVzdCAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRUFGVEVSUEtUUlhUTwkJQjQzX1BIWV9PRkRNKDB4MUEpIC8qIElETEVhZnRlclBrdFJYVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfTFRSTl9DVEwJCQlCNDNfUEhZX09GRE0oMHgxQikgLyogTFRSTiBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVAkJQjQzX1BIWV9PRkRNKDB4MUMpIC8qIERDT2Zmc2V0VHJhbnNpZW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUkVBTUJMRUlOVE8JCQlCNDNfUEhZX09GRE0oMHgxRCkgLyogUHJlYW1ibGVJblRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BSRUFNQkxFQ09ORklSTVRPCQlCNDNfUEhZX09GRE0oMHgxRSkgLyogUHJlYW1ibGVDb25maXJtVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xJUFRIUkVTSAkJCUI0M19QSFlfT0ZETSgweDFGKSAvKiBDbGlwVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MjApIC8qIENsaXBDdHJUaHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVElNRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHgyMSkgLyogb2ZkbVN5bmNUaW1lciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9XQUlURk9SUEhZU0VMVE8JCUI0M19QSFlfT0ZETSgweDIyKSAvKiBXYWl0Zm9yUEhZU2VsVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfSElHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyMykgLyogSGlHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPV0dBSU5EQgkJCUI0M19QSFlfT0ZETSgweDI0KSAvKiBMb3dHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyNSkgLyogVmVyeUxvd0dhaW5EQiAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTk1JU01BVENICQkJQjQzX1BIWV9PRkRNKDB4MjYpIC8qIGdhaW5NaXNtYXRjaCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENICQlCNDNfUEhZX09GRE0oMHgyNykgLyogZ2FpbmRpcmVjdE1pc21hdGNoICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMAkJCUI0M19QSFlfT0ZETSgweDI4KSAvKiBQb3dlciBUaHJlc2gwICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMQkJCUI0M19QSFlfT0ZETSgweDI5KSAvKiBQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9ERVRFQ1RPUl9ERUxBWV9BREpVU1QJCUI0M19QSFlfT0ZETSgweDJBKSAvKiBEZXRlY3RvciBEZWxheSBBZGp1c3QgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JFRFVDRURfREVURUNUT1JfREVMQVkJQjQzX1BIWV9PRkRNKDB4MkIpIC8qIFJlZHVjZWQgRGV0ZWN0b3IgRGVsYXkgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RBVEFfVE8JCQlCNDNfUEhZX09GRE0oMHgyQykgLyogZGF0YSBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DT1JSRUxBVE9SX0RJU19ERUxBWQkJQjQzX1BIWV9PRkRNKDB4MkQpIC8qIGNvcnJlbGF0b3IgRGlzIERlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9ESVZFUlNJVFlfR0FJTkJBQ0sJCUI0M19QSFlfT0ZETSgweDJFKSAvKiBEaXZlcnNpdHkgR2FpbkJhY2sgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NfQ09ORklSTV9DTlQJCUI0M19QSFlfT0ZETSgweDJGKSAvKiBEU1NTIENvbmZpcm0gQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ19CTEFOS19JTlQJCQlCNDNfUEhZX09GRE0oMHgzMCkgLyogREMgQmxhbmsgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dBSU5fTUlTTUFUQ0hfTElNSVQJCUI0M19QSFlfT0ZETSgweDMxKSAvKiBnYWluIE1pc21hdGNoIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DUlNfRURfVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MzIpIC8qIGNycyBlZCB0aHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BIQVNFX1NISUZUX0NUTAkJQjQzX1BIWV9PRkRNKDB4MzMpIC8qIHBoYXNlIHNoaWZ0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lOUFVUX1BXUkRCCQkJQjQzX1BIWV9PRkRNKDB4MzQpIC8qIElucHV0IFBvd2VyREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1fU1lOQ19DVEwJCQlCNDNfUEhZX09GRE0oMHgzNSkgLyogb2ZkbSBzeW5jIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzAJCQlCNDNfUEhZX09GRE0oMHgzNikgLyogQWZlIEFEQyBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzEJCQlCNDNfUEhZX09GRE0oMHgzNykgLyogQWZlIEFEQyBDb250cm9sIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzIJCQlCNDNfUEhZX09GRE0oMHgzOCkgLyogQWZlIEFEQyBDb250cm9sIDIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EQUNfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MzkpIC8qIEFmZSBEQUMgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTAkJCUI0M19QSFlfT0ZETSgweDNBKSAvKiBBZmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTF9PVlIJCQlCNDNfUEhZX09GRE0oMHgzQikgLyogQWZlIENvbnRyb2wgT3ZyICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfQ1RMX09WUlZBTAkJQjQzX1BIWV9PRkRNKDB4M0MpIC8qIEFmZSBDb250cm9sIE92clZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzAJCUI0M19QSFlfT0ZETSgweDNEKSAvKiBBZmUgUlNTSSBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xCQlCNDNfUEhZX09GRE0oMHgzRSkgLyogQWZlIFJTU0kgQ29udHJvbCAxICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfUlNTSV9TRUwJCQlCNDNfUEhZX09GRE0oMHgzRikgLyogQWZlIFJTU0kgU2VsICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9USFJFU0gJCQlCNDNfUEhZX09GRE0oMHg0MCkgLyogUmFkYXIgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9CTEFOS19JTlQJCUI0M19QSFlfT0ZETSgweDQxKSAvKiBSYWRhciBibGFuayBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfTUlOX0ZNX0lOVAkJQjQzX1BIWV9PRkRNKDB4NDIpIC8qIFJhZGFyIG1pbiBmbSBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfR0FJTl9UTwkJCUI0M19QSFlfT0ZETSgweDQzKSAvKiBSYWRhciBnYWluIHRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1BVTFNFX1RPCQlCNDNfUEhZX09GRE0oMHg0NCkgLyogUmFkYXIgcHVsc2UgdGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfREVURUNUX0ZNX0NUTAkJQjQzX1BIWV9PRkRNKDB4NDUpIC8qIFJhZGFyIGRldGVjdCBGTSBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9ERVRFQ1RfRU4JCUI0M19QSFlfT0ZETSgweDQ2KSAvKiBSYWRhciBkZXRlY3QgRW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1JEX0RBVEFfUkVHCQlCNDNfUEhZX09GRE0oMHg0NykgLyogUmFkYXIgUmQgRGF0YSBSZWcgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xQX1BIWV9DVEwJCQlCNDNfUEhZX09GRE0oMHg0OCkgLyogTFAgUEhZIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NMQVNTSUZJRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHg0OSkgLyogY2xhc3NpZmllciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SRVNFVF9DVEwJCQlCNDNfUEhZX09GRE0oMHg0QSkgLyogcmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xLRU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NEIpIC8qIENsa0VuIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAJCQlCNDNfUEhZX09GRE0oMHg0QykgLyogUkYgT3ZlcnJpZGUgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAJCUI0M19QSFlfT0ZETSgweDREKSAvKiBSRiBPdmVycmlkZSBWYWwgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzEJCQlCNDNfUEhZX09GRE0oMHg0RSkgLyogVFIgTG9va3VwIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF8yCQkJQjQzX1BIWV9PRkRNKDB4NEYpIC8qIFRSIExvb2t1cCAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJU0VMTE9PS1VQMQkJQjQzX1BIWV9PRkRNKDB4NTApIC8qIFJzc2lTZWxMb29rdXAxICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTUQJCQlCNDNfUEhZX09GRE0oMHg1MSkgLyogaXFsbyBDYWwgQ21kICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTURfTl9OVU0JCUI0M19QSFlfT0ZETSgweDUyKSAvKiBpcWxvIENhbCBDbWQgTiBudW0gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRTE9fQ0FMX0NNRF9HX0NUTAkJQjQzX1BIWV9PRkRNKDB4NTMpIC8qIGlxbG8gQ2FsIENtZCBHIGNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BQ0lOVF9EQkdfUkVHSVNURVIJCUI0M19QSFlfT0ZETSgweDU0KSAvKiBtYWNpbnQgRGVidWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFX0FERFIJCQlCNDNfUEhZX09GRE0oMHg1NSkgLyogVGFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEFCTEVEQVRBTE8JCQlCNDNfUEhZX09GRE0oMHg1NikgLyogVGFibGVkYXRhTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFREFUQUhJCQkJQjQzX1BIWV9PRkRNKDB4NTcpIC8qIFRhYmxlZGF0YUhpICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX0VOQUJMRV9BRERSCQlCNDNfUEhZX09GRE0oMHg1OCkgLyogcGh5IENSUyBFbmFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NTkpIC8qIElkbGV0aW1lIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX0NSU19PTl9MTwkJQjQzX1BIWV9PRkRNKDB4NUEpIC8qIElkbGV0aW1lIENSUyBPbiBMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1JTX09OX0hJCQlCNDNfUEhZX09GRE0oMHg1QikgLyogSWRsZXRpbWUgQ1JTIE9uIEhpICovCisjZGVmaW5lIEI0M19MUFBIWV9JRExFVElNRV9NRUFTX1RJTUVfTE8JCUI0M19QSFlfT0ZETSgweDVDKSAvKiBJZGxldGltZSBNZWFzIFRpbWUgTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX01FQVNfVElNRV9ISQkJQjQzX1BIWV9PRkRNKDB4NUQpIC8qIElkbGV0aW1lIE1lYXMgVGltZSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fVFhfQUREUglCNDNfUEhZX09GRE0oMHg1RSkgLyogUmVzZXQgbGVuIE9mZG0gVFggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fUlhfQUREUglCNDNfUEhZX09GRE0oMHg1RikgLyogUmVzZXQgbGVuIE9mZG0gUlggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVHX0NSU19FTkFCTEUJCUI0M19QSFlfT0ZETSgweDYwKSAvKiByZWcgY3JzIGVuYWJsZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUExDUF9UTVRfU1RSMF9DVFJfTUlOCQlCNDNfUEhZX09GRE0oMHg2MSkgLyogUExDUCBUbXQgU3RyMCBDdHIgTWluICovCisjZGVmaW5lIEI0M19MUFBIWV9QS1RfRlNNX1JFU0VUX0xFTl9WQUwJCUI0M19QSFlfT0ZETSgweDYyKSAvKiBQa3QgZnNtIFJlc2V0IExlbiBWYWx1ZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVBRFNZTTJSRVNFVF9DVEwJCUI0M19QSFlfT0ZETSgweDYzKSAvKiByZWFkc3ltMnJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RDX0ZJTFRFUl9ERUxBWTEJCUI0M19QSFlfT0ZETSgweDY0KSAvKiBEYyBmaWx0ZXIgZGVsYXkxICovCisjZGVmaW5lIEI0M19MUFBIWV9QQUNLRVRfUlhfQUNUSVZFX1RPCQlCNDNfUEhZX09GRE0oMHg2NSkgLyogcGFja2V0IHJ4IEFjdGl2ZSB0aW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9UT1ZBTAkJCUI0M19QSFlfT0ZETSgweDY2KSAvKiBlZCB0aW1lb3V0VmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0hPTERfQ1JTX09OX1ZBTAkJQjQzX1BIWV9PRkRNKDB4NjcpIC8qIGhvbGQgQ1JTIE9uIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNX1RYX1BIWV9DUlNfREVMQVlfVkFMCUI0M19QSFlfT0ZETSgweDY5KSAvKiBvZmRtIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS19UWF9QSFlfQ1JTX0RFTEFZX1ZBTAlCNDNfUEhZX09GRE0oMHg2QSkgLyogY2NrIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0VEX09OX0NPTkZJUk1fVElNRVJfVkFMCUI0M19QSFlfT0ZETSgweDZCKSAvKiBFZCBvbiBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9PRkZTRVRfQ09ORklSTV9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkMpIC8qIEVkIG9mZnNldCBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX09GRlNFVF9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkQpIC8qIHBoeSBDUlMgb2Zmc2V0IFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTAkJQjQzX1BIWV9PRkRNKDB4NzApIC8qIEFEQyBDb21wZW5zYXRpb24gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9HMl9SQlBTS19BRERSCQlCNDNfUEhZX09GRE0oMHg3MSkgLyogbG9nMiBSQlBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1JRUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDcyKSAvKiBsb2cyIFJRUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPRzJfUjE2UUFNX0FERFIJCUI0M19QSFlfT0ZETSgweDczKSAvKiBsb2cyIFIxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1I2NFFBTV9BRERSCQlCNDNfUEhZX09GRE0oMHg3NCkgLyogbG9nMiBSNjRRQU0gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZGU0VUX0JQU0tfQUREUgkJQjQzX1BIWV9PRkRNKDB4NzUpIC8qIG9mZnNldCBCUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRlNFVF9RUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDc2KSAvKiBvZmZzZXQgUVBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfMTZRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzcpIC8qIG9mZnNldCAxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfNjRRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzgpIC8qIG9mZnNldCA2NFFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTEJCQlCNDNfUEhZX09GRE0oMHg3OSkgLyogQWxwaGExICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTIJCQlCNDNfUEhZX09GRE0oMHg3QSkgLyogQWxwaGEyICovCisjZGVmaW5lIEI0M19MUFBIWV9CRVRBMQkJCQlCNDNfUEhZX09GRE0oMHg3QikgLyogQmV0YTEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JFVEEyCQkJCUI0M19QSFlfT0ZETSgweDdDKSAvKiBCZXRhMiAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9PUF9OVU1fQUREUgkJCUI0M19QSFlfT0ZETSgweDdEKSAvKiBMb29wIE51bSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9TVFJfQ09MTE1BWF9TTVBMX0FERFIJCUI0M19QSFlfT0ZETSgweDdFKSAvKiBTdHIgQ29sbG1heCBTYW1wbGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTUFYX1NNUExfQ09BUlNFX0ZJTkVfQUREUglCNDNfUEhZX09GRE0oMHg3RikgLyogTWF4IFNhbXBsZSBDb2Fyc2UvRmluZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9NQVhfU01QTF9DT0FSU0VfU1RSMENUUl9BRERSCUI0M19QSFlfT0ZETSgweDgwKSAvKiBNYXggU2FtcGxlIENvYXJzZS9TdHIwQ3RyIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0VOQUJMRV9XQUlUX1RJTUVfQUREUglCNDNfUEhZX09GRE0oMHg4MSkgLyogSVEgRW5hYmxlIFdhaXQgVGltZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9OVU1fU01QTFNfQUREUgkJQjQzX1BIWV9PRkRNKDB4ODIpIC8qIElRIE51bSBTYW1wbGVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4MykgLyogSVEgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NCkgLyogSVEgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NSkgLyogSVEgSSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NikgLyogSVEgSSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NykgLyogSVEgUSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4OCkgLyogSVEgUSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BWE5VTVNURVBTCQkJQjQzX1BIWV9PRkRNKDB4ODkpIC8qIE1heE51bXN0ZXBzICovCisjZGVmaW5lIEI0M19MUFBIWV9ST1RPUlBIQVNFX0FERFIJCUI0M19QSFlfT0ZETSgweDhBKSAvKiBSb3RvclBoYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FEVkFOQ0VEUkVUQVJEUk9UT1JfQUREUglCNDNfUEhZX09GRE0oMHg4QikgLyogQWR2YW5jZWRSZXRhcmRSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJQURDREVMQVlfQ1RMX0FERFIJCUI0M19QSFlfT0ZETSgweDhEKSAvKiByc3NpQWRjZGVsYXkgQ29udHJvbCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UU1NJU1RBVF9BRERSCQkJQjQzX1BIWV9PRkRNKDB4OEUpIC8qIHRzc2lTdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEVNUFNFTlNFU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg4RikgLyogdGVtcHNlbnNlU3RhdHVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RFTVBTRU5TRV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTApIC8qIHRlbXBzZW5zZSBDb250cm9sIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1dSU1NJU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5MSkgLyogd3Jzc2lzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTVVGQUNUT1JBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTIpIC8qIG11ZmFjdG9yYWRkciAqLworI2RlZmluZSBCNDNfTFBQSFlfU0NSQU1TVEFURV9BRERSCQlCNDNfUEhZX09GRE0oMHg5MykgLyogc2NyYW1zdGF0ZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UWEhPTERPRkZBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTQpIC8qIHR4aG9sZG9mZmFkZHIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BLVEdBSU5WQUxfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTUpIC8qIHBrdGdhaW52YWwgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ09BUlNFRVNUSU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTYpIC8qIENvYXJzZWVzdGltIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NUQVRFX1RSQU5TSVRJT05fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTcpIC8qIHN0YXRlIFRyYW5zaXRpb24gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJOX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5OCkgLyogVFJOIG9mZnNldCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9OVU1fUk9UT1JfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTkpIC8qIE51bSBSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9WSVRFUkJJX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5QSkgLyogVml0ZXJiaSBPZmZzZXQgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfU01QTF9DT0xMRUNUX1dBSVRfQUREUglCNDNfUEhZX09GRE0oMHg5QikgLyogU2FtcGxlIGNvbGxlY3Qgd2FpdCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BX1BIWV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OUMpIC8qIEEgUEhZIENvbnRyb2wgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTlVNX1BBU1NfVEhST1VHSF9BRERSCQlCNDNfUEhZX09GRE0oMHg5RCkgLyogTnVtIFBhc3MgVGhyb3VnaCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9DT01QX0NPRUZGX1MJCUI0M19QSFlfT0ZETSgweDlFKSAvKiBSWCBDb21wIGNvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9DUEFST1RBVEVWQUwJCQlCNDNfUEhZX09GRE0oMHg5RikgLyogY3BhUm90YXRlVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NNUExfUExBWV9DT1VOVAkJQjQzX1BIWV9PRkRNKDB4QTApIC8qIFNhbXBsZSBwbGF5IGNvdW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9TTVBMX1BMQVlfQlVGRkVSX0NUTAkJQjQzX1BIWV9PRkRNKDB4QTEpIC8qIFNhbXBsZSBwbGF5IEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9GT1VSV0lSRV9DVEwJCQlCNDNfUEhZX09GRE0oMHhBMikgLyogZm91cndpcmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ1BBX1RBSUxDT1VOVF9WQUwJCUI0M19QSFlfT0ZETSgweEEzKSAvKiBDUEEgVGFpbENvdW50IFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRAkJQjQzX1BIWV9PRkRNKDB4QTQpIC8qIFRYIFBvd2VyIENvbnRyb2wgQ21kICovCisjZGVmaW5lICBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERQkJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgbW9kZSBtYXNrICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGCTB4MDAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworI2RlZmluZSAgIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX1NXCTB4ODAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIFNPRlRXQVJFICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFcJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgSEFSRFdBUkUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTQkJQjQzX1BIWV9PRkRNKDB4QTUpIC8qIFRYIFBvd2VyIENvbnRyb2wgTm51bSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9JRExFVFNTSQkJQjQzX1BIWV9PRkRNKDB4QTYpIC8qIFRYIFBvd2VyIENvbnRyb2wgSWRsZVRzc2kgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfVEFSR0VUUFdSCQlCNDNfUEhZX09GRE0oMHhBNykgLyogVFggUG93ZXIgQ29udHJvbCBUYXJnZXRQb3dlciAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVAlCNDNfUEhZX09GRE0oMHhBOCkgLyogVFggUG93ZXIgQ29udHJvbCBEZWx0YVBvd2VyIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0JBU0VJTkRFWAkJQjQzX1BIWV9PRkRNKDB4QTkpIC8qIFRYIFBvd2VyIENvbnRyb2wgQmFzZUluZGV4ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX1BXUl9JTkRFWAkJQjQzX1BIWV9PRkRNKDB4QUEpIC8qIFRYIFBvd2VyIENvbnRyb2wgUG93ZXIgSW5kZXggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfU1RBVAkJQjQzX1BIWV9PRkRNKDB4QUIpIC8qIFRYIFBvd2VyIENvbnRyb2wgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9MUF9SRl9TSUdOQUxfTFVUCQlCNDNfUEhZX09GRE0oMHhBQykgLyogTFAgUkYgc2lnbmFsIExVVCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlhfUkFESU9fQ1RMX0ZJTFRFUl9TVEFURQlCNDNfUEhZX09GRE0oMHhBRCkgLyogUlggUmFkaW8gQ29udHJvbCBGaWx0ZXIgU3RhdGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX1JBRElPX0NUTAkJCUI0M19QSFlfT0ZETSgweEFFKSAvKiBSWCBSYWRpbyBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9OUlNTSV9TVEFUX0FERFIJCUI0M19QSFlfT0ZETSgweEFGKSAvKiBOUlNTSSBzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMgkJCUI0M19QSFlfT0ZETSgweEIwKSAvKiBSRiBvdmVycmlkZSAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTAkJQjQzX1BIWV9PRkRNKDB4QjEpIC8qIFJGIG92ZXJyaWRlIDIgdmFsICovCisjZGVmaW5lIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMAkJQjQzX1BIWV9PRkRNKDB4QjIpIC8qIFBTIENvbnRyb2wgb3ZlcnJpZGUgdmFsMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUFNfQ1RMX09WRVJSSURFX1ZBTDEJCUI0M19QSFlfT0ZETSgweEIzKSAvKiBQUyBDb250cm9sIG92ZXJyaWRlIHZhbDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BTX0NUTF9PVkVSUklERV9WQUwyCQlCNDNfUEhZX09GRE0oMHhCNCkgLyogUFMgQ29udHJvbCBvdmVycmlkZSB2YWwyICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9HQUlOX0NUTF9PVkVSUklERV9WQUwJQjQzX1BIWV9PRkRNKDB4QjUpIC8qIFRYIGdhaW4gQ29udHJvbCBvdmVycmlkZSB2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTAlCNDNfUEhZX09GRE0oMHhCNikgLyogUlggZ2FpbiBDb250cm9sIG92ZXJyaWRlIHZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlMJCQlCNDNfUEhZX09GRE0oMHhCNykgLyogQUZFIERERlMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EREZTX1BPSU5URVJfSU5JVAkJQjQzX1BIWV9PRkRNKDB4QjgpIC8qIEFGRSBEREZTIHBvaW50ZXIgaW5pdCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlNfSU5DUl9JTklUCQlCNDNfUEhZX09GRE0oMHhCOSkgLyogQUZFIERERlMgaW5jciBpbml0ICovCisjZGVmaW5lIEI0M19MUFBIWV9NUkNOT0lTRVJFRFVDVElPTgkJQjQzX1BIWV9PRkRNKDB4QkEpIC8qIG1yY05vaXNlUmVkdWN0aW9uICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDMJCQlCNDNfUEhZX09GRE0oMHhCQikgLyogVFJMb29rdXAzICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDQJCQlCNDNfUEhZX09GRE0oMHhCQykgLyogVFJMb29rdXA0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9GSUZPX1NUQVQJCUI0M19QSFlfT0ZETSgweEJEKSAvKiBSYWRhciBGSUZPIFN0YXR1cyAqLworI2RlZmluZSBCNDNfTFBQSFlfR1BJT19PVVRFTgkJCUI0M19QSFlfT0ZETSgweEJFKSAvKiBHUElPIE91dCBlbmFibGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dQSU9fU0VMRUNUCQkJQjQzX1BIWV9PRkRNKDB4QkYpIC8qIEdQSU8gU2VsZWN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9HUElPX09VVAkJCUI0M19QSFlfT0ZETSgweEMwKSAvKiBHUElPIE91dCAqLwogCiAKKworLyogUmFkaW8gcmVnaXN0ZXIgYWNjZXNzIGRlY29yYXRvcnMuICovCiAjZGVmaW5lIEI0M19MUF9SQURJTyhyYWRpb19yZWcpCQkJKHJhZGlvX3JlZykKICNkZWZpbmUgQjQzX0xQX05PUlRIKHJhZGlvX3JlZykJCQlCNDNfTFBfUkFESU8ocmFkaW9fcmVnKQogI2RlZmluZSBCNDNfTFBfU09VVEgocmFkaW9fcmVnKQkJCUI0M19MUF9SQURJTygocmFkaW9fcmVnKSB8IDB4NDAwMCkKQEAgLTUyOSw4ICs4MDYsNTggQEAKIAogCiAKK2VudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHsKKwlCNDNfTFBQSFlfVFhQQ1RMX1VOS05PV04gPSAwLAorCUI0M19MUFBIWV9UWFBDVExfT0ZGLAkvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworCUI0M19MUFBIWV9UWFBDVExfU1csCS8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgc2V0IHRvIFNvZnR3YXJlICovCisJQjQzX0xQUEhZX1RYUENUTF9IVywJLyogVFggcG93ZXIgY29udHJvbCBpcyBzZXQgdG8gSGFyZHdhcmUgKi8KK307CisKIHN0cnVjdCBiNDNfcGh5X2xwIHsKLQkvL1RPRE8KKwkvKiBDdXJyZW50IFRYIHBvd2VyIGNvbnRyb2wgbW9kZS4gKi8KKwllbnVtIGI0M19scHBoeV90eHBjdGxfbW9kZSB0eHBjdGxfbW9kZTsKKworCS8qIFRyYW5zbWl0IGlzb2xhdGlvbiBtZWRpdW0gYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9tZWRfYmFuZDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBUcmFuc21pdCBpc29sYXRpb24gbG93IGJhbmQgKi8KKwl1OCB0eF9pc29sYXRpb25fbG93X2JhbmQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVHJhbnNtaXQgaXNvbGF0aW9uIGhpZ2ggYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogUmVjZWl2ZSBwb3dlciBvZmZzZXQgKi8KKwl1OCByeF9wd3Jfb2Zmc2V0OyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVFNTSSB0cmFuc21pdCBjb3VudCAqLworCXUxNiB0c3NpX3R4X2NvdW50OworCS8qIFRTU0kgaW5kZXggKi8KKwl1MTYgdHNzaV9pZHg7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVFNTSSBucHQgKi8KKwl1MTYgdHNzaV9ucHQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBUYXJnZXQgVFggZnJlcXVlbmN5ICovCisJdTE2IHRndF90eF9mcmVxOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVHJhbnNtaXQgcG93ZXIgaW5kZXggb3ZlcnJpZGUgKi8KKwlzOCB0eF9wd3JfaWR4X292ZXI7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBSU1NJIHZmICovCisJdTggcnNzaV92ZjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIHZjICovCisJdTggcnNzaV92YzsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIGdzICovCisJdTggcnNzaV9nczsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFJDIGNhcCAqLworCXU4IHJjX2NhcDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBCWCBhcmNoICovCisJdTggYnhfYXJjaDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIEZ1bGwgY2FsaWJyYXRpb24gY2hhbm5lbCAqLworCXU4IGZ1bGxfY2FsaWJfY2hhbjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFRyYW5zbWl0IGlxbG9jYWwgYmVzdCBjb2VmZnMgKi8KKwlib29sIHR4X2lxbG9jX2Jlc3RfY29lZmZzX3ZhbGlkOworCXU4IHR4X2lxbG9jX2Jlc3RfY29lZmZzWzExXTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IDEwMzZiZWYuLjhjZDk3NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTU1LDggKzU1LDggQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICB1MTYgY29va2llLAorc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgIHUxNiBjb29raWUsCiAJCQkJICAgICAgc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKipwYWNrKQogewogCXN0cnVjdCBiNDNfcGlvICpwaW8gPSAmZGV2LT5waW87CkBAIC0xMzQsOCArMTM0LDggQEAKIAlyZXR1cm4gODsKIH0KIAotc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBiNDNfc2V0dXBfcGlvcXVldWVfdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKmI0M19zZXR1cF9waW9xdWV1ZV90eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxOwogCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwOwpAQCAtMTcxLDggKzE3MSw4IEBACiAJcmV0dXJuIHE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICogYjQzX3NldHVwX3Bpb3F1ZXVlX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpiNDNfc2V0dXBfcGlvcXVldWVfcngoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcTsKIApAQCAtMzA4LDggKzMwOCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgUElPIHF1ZXVlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCQkgdTggcXVldWVfcHJpbykKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJCXU4IHF1ZXVlX3ByaW8pCiB7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCmluZGV4IDcxMzc1MzcuLmFmYWQ0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWNoYXIgKiBiNDNfcmZraWxsX2xlZF9uYW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK2NoYXIgKmI0M19yZmtpbGxfbGVkX25hbWUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfcmZraWxsICpyZmsgPSAmKGRldi0+d2wtPnJma2lsbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE3MzRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5jCkBAIC0wLDAgKzEsMzk0IEBACisvKgorCisgIEJyb2FkY29tIEI0MyB3aXJlbGVzcyBkcml2ZXIKKyAgSUVFRSA4MDIuMTFnIExQLVBIWSBhbmQgcmFkaW8gZGV2aWNlIGRhdGEgdGFibGVzCisKKyAgQ29weXJpZ2h0IChjKSAyMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKworI2luY2x1ZGUgImI0My5oIgorI2luY2x1ZGUgInRhYmxlc19scHBoeS5oIgorI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJwaHlfbHAuaCIKKworCisvKiBFbnRyeSBvZiB0aGUgMjA2MiByYWRpbyBpbml0IHRhYmxlICovCitzdHJ1Y3QgYjIwNjJfaW5pdF90YWJfZW50cnkgeworCXUxNiBvZmZzZXQ7CisJdTE2IHZhbHVlX2E7CisJdTE2IHZhbHVlX2c7CisJdTggZmxhZ3M7Cit9OworI2RlZmluZSBCMjA2Ml9GTEFHX0EJMHgwMSAvKiBGbGFnOiBJbml0IGluIEEgbW9kZSAqLworI2RlZmluZSBCMjA2Ml9GTEFHX0cJMHgwMiAvKiBGbGFnOiBJbml0IGluIEcgbW9kZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5IGIyMDYyX2luaXRfdGFiW10gPSB7CisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IDB4MDAwMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0zLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU03LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BETl9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMiwgLnZhbHVlX2EgPSAweDAwMTgsIC52YWx1ZV9nID0gMHgwMDE4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fR0VOX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0lRX0NBTElCLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9MUEYsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0JJQVMwLCAudmFsdWVfYSA9IDB4MDA0MSwgLnZhbHVlX2cgPSAweDAwNDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR05FQV9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUyLCAudmFsdWVfYSA9IDB4MDBERCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwQjUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMUYsIC52YWx1ZV9nID0gMHgwMDFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDksIC52YWx1ZV9nID0gMHgwMDA5LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDIsIC52YWx1ZV9hID0gMHgwMDE4LCAudmFsdWVfZyA9IDB4MDAxOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwzLCAudmFsdWVfYSA9IDB4MDAyNywgLnZhbHVlX2cgPSAweDAwMjcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMjgsIC52YWx1ZV9nID0gMHgwMDI4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDUsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEw2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwwLCAudmFsdWVfYSA9IDB4MDA4MiwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4wLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4xLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMCwgLnZhbHVlX2EgPSAweDAwNDMsIC52YWx1ZV9nID0gMHgwMDQzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DQUxJQjAsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ0FMSUIxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NBTElCMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMkEsIC52YWx1ZV9nID0gMHgwMDJBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMiwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMywgLnZhbHVlX2EgPSAweDAwMjEsIC52YWx1ZV9nID0gMHgwMDIxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNCwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNSwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMiwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMiwgLnZhbHVlX2EgPSAweDAwODQsIC52YWx1ZV9nID0gMHgwMDg0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMiwgLnZhbHVlX2cgPSAweDAwMDIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDcsIC52YWx1ZV9hID0gMHgwMDU4LCAudmFsdWVfZyA9IDB4MDA1OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDgsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTF9BLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzJHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzVHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9UVU5FLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwMUIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BBRCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfUEdBLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9QQURBVVgsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BHQUFVWCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFNTSV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UU1NJX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RTU0lfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ0FMSUJfVFMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDEsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAxNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDBGLCAudmFsdWVfZyA9IDB4MDAwRiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BTRU5TRV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QU0VOU0VfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUFNFTlNFX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RFU1RfQlVGMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JBRElPX0lEX0NPREUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU02LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU05LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTE1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMCwgLnZhbHVlX2EgPSAweDAwRkYsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUERTX0NUTDIsIC52YWx1ZV9hID0gMHgwMDhFLCAudmFsdWVfZyA9IDB4MDA4RSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwwLCAudmFsdWVfYSA9IDB4MDAwNiwgLnZhbHVlX2cgPSAweDAwMDYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwyLCAudmFsdWVfYSA9IDB4MDAxMSwgLnZhbHVlX2cgPSAweDAwMTEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwwLCAudmFsdWVfYSA9IDB4MDBGOCwgLnZhbHVlX2cgPSAweDAwRDgsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEsIC52YWx1ZV9hID0gMHgwMDNDLCAudmFsdWVfZyA9IDB4MDAyNCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMywgLnZhbHVlX2EgPSAweDAwNDEsIC52YWx1ZV9nID0gMHgwMDQxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMOCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEw5LCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMiwgLnZhbHVlX2EgPSAweDAwQUYsIC52YWx1ZV9nID0gMHgwMEFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDEyLCAudmFsdWVfZyA9IDB4MDAxMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw0LCAudmFsdWVfYSA9IDB4MDAwQiwgLnZhbHVlX2cgPSAweDAwMEIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMNSwgLnZhbHVlX2EgPSAweDAwNUYsIC52YWx1ZV9nID0gMHgwMDVGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDA0MCwgLnZhbHVlX2cgPSAweDAwNDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMOCwgLnZhbHVlX2EgPSAweDAwNTIsIC52YWx1ZV9nID0gMHgwMDUyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDksIC52YWx1ZV9hID0gMHgwMDI2LCAudmFsdWVfZyA9IDB4MDAyNiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDExLCAudmFsdWVfYSA9IDB4MDAzNiwgLnZhbHVlX2cgPSAweDAwMzYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTIsIC52YWx1ZV9hID0gMHgwMDU3LCAudmFsdWVfZyA9IDB4MDA1NywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDE0LCAudmFsdWVfYSA9IDB4MDA3NSwgLnZhbHVlX2cgPSAweDAwNzUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTUsIC52YWx1ZV9hID0gMHgwMEI0LCAudmFsdWVfZyA9IDB4MDBCNCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwOTgsIC52YWx1ZV9nID0gMHgwMDk4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDUsIC52YWx1ZV9hID0gMHgwMDQzLCAudmFsdWVfZyA9IDB4MDA0MywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNiwgLnZhbHVlX2EgPSAweDAwNDcsIC52YWx1ZV9nID0gMHgwMDQ3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDAwQywgLnZhbHVlX2cgPSAweDAwMEMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDgsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMEUsIC52YWx1ZV9nID0gMHgwMDBFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMiwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMEEsIC52YWx1ZV9nID0gMHgwMDBBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDE3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOCwgLnZhbHVlX2EgPSAweDAwM0UsIC52YWx1ZV9nID0gMHgwMDNFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOSwgLnZhbHVlX2EgPSAweDAwMTMsIC52YWx1ZV9nID0gMHgwMDEzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjEsIC52YWx1ZV9hID0gMHgwMDYyLCAudmFsdWVfZyA9IDB4MDA2MiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjIsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjMsIC52YWx1ZV9hID0gMHgwMDE2LCAudmFsdWVfZyA9IDB4MDAxNiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjQsIC52YWx1ZV9hID0gMHgwMDVDLCAudmFsdWVfZyA9IDB4MDA1QywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjUsIC52YWx1ZV9hID0gMHgwMDk1LCAudmFsdWVfZyA9IDB4MDA5NSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMwLCAudmFsdWVfYSA9IDB4MDBBMCwgLnZhbHVlX2cgPSAweDAwQTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMxLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMywgLnZhbHVlX2EgPSAweDAwQ0MsIC52YWx1ZV9nID0gMHgwMENDLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzNCwgLnZhbHVlX2EgPSAweDAwMDcsIC52YWx1ZV9nID0gMHgwMDA3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMCwgLnZhbHVlX2EgPSAweDAwMTAsIC52YWx1ZV9nID0gMHgwMDEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ1LCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UNiwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDcsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ4LCAudmFsdWVfYSA9IDB4MDAwRiwgLnZhbHVlX2cgPSAweDAwMEYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTAsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEyLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTMsIC52YWx1ZV9hID0gMHgwMDQ0LCAudmFsdWVfZyA9IDB4MDA0NCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDE1LCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworfTsKKwordm9pZCBiMjA2Ml91cGxvYWRfaW5pdF90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYjIwNjJfaW5pdF90YWIpOyBpKyspIHsKKwkJZSA9ICZiMjA2Ml9pbml0X3RhYltpXTsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA2Ml9GTEFHX0cpKQorCQkJCWNvbnRpbnVlOworCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgZS0+b2Zmc2V0LCBlLT52YWx1ZV9nKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGUtPmZsYWdzICYgQjIwNjJfRkxBR19BKSkKKwkJCQljb250aW51ZTsKKwkJCWI0M19yYWRpb193cml0ZShkZXYsIGUtPm9mZnNldCwgZS0+dmFsdWVfYSk7CisJCX0KKwl9Cit9CisKK3UzMiBiNDNfbHB0YWJfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19MUFRBQl9UWVBFTUFTSzsKKwlCNDNfV0FSTl9PTihvZmZzZXQgPiAweEZGRkYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCNDNfTFBUQUJfOEJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTykgJiAweEZGOworCQlicmVhazsKKwljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTyk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzMyQklUOgorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUhJKTsKKwkJdmFsdWUgPDw9IDE2OworCQl2YWx1ZSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKl9kYXRhKQoreworCXUzMiB0eXBlLCB2YWx1ZTsKKwl1OCAqZGF0YSA9IF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZWxlbWVudHM7IGkrKykgeworCQl2YWx1ZSA9IGI0M19scHRhYl9yZWFkKGRldiwgb2Zmc2V0KTsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgQjQzX0xQVEFCXzhCSVQ6CisJCQkqZGF0YSA9IHZhbHVlOworCQkJZGF0YSsrOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQkJKigodTE2ICopZGF0YSkgPSB2YWx1ZTsKKwkJCWRhdGEgKz0gMjsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8zMkJJVDoKKwkJCSooKHUzMiAqKWRhdGEpID0gdmFsdWU7CisJCQlkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQl9CisJCW9mZnNldCsrOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJdTMyIHR5cGU7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCW9mZnNldCAmPSB+QjQzX0xQVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEI0M19MUFRBQl84QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGRkYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8sIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSwgdmFsdWUgPj4gMTYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqX2RhdGEpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCWNvbnN0IHU4ICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19MUFRBQl84QklUOgorCQkJdmFsdWUgPSAqZGF0YTsKKwkJCWRhdGErKzsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJCXZhbHVlID0gKigodTE2ICopZGF0YSk7CisJCQlkYXRhICs9IDI7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOworCQkJZGF0YSArPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJCXZhbHVlID0gMDsKKwkJfQorCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbHVlKTsKKwkJb2Zmc2V0Kys7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGQwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBCNDNfVEFCTEVTX0xQUEhZX0hfCisjZGVmaW5lIEI0M19UQUJMRVNfTFBQSFlfSF8KKworCisjZGVmaW5lIEI0M19MUFRBQl9UWVBFTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfOEJJVAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQjQzX0xQVEFCXzE2QklUCQkJMHgyMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfMzJCSVQJCQkweDMwMDAwMDAwCisjZGVmaW5lIEI0M19MUFRBQjgodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzhCSVQpCisjZGVmaW5lIEI0M19MUFRBQjE2KHRhYmxlLCBvZmZzZXQpCSgoKHRhYmxlKSA8PCAxMCkgfCAob2Zmc2V0KSB8IEI0M19MUFRBQl8xNkJJVCkKKyNkZWZpbmUgQjQzX0xQVEFCMzIodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzMyQklUKQorCisvKiBUYWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjJQTFVTCQlCNDNfTFBUQUIzMigweDA3LCAwKSAvKiBUWCBwb3dlciBsb29rdXAgdGFibGUgKHJldiA+PSAyKSAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjBfMQkJQjQzX0xQVEFCMzIoMHhBMCwgMCkgLyogVFggcG93ZXIgbG9va3VwIHRhYmxlIChyZXYgPCAyKSAqLworCit1MzIgYjQzX2xwdGFiX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0KTsKK3ZvaWQgYjQzX2xwdGFiX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKKworLyogQnVsayB0YWJsZSBhY2Nlc3MuIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBidWxrIGRhdGEgaW4KKyAqIGhvc3QgZW5kaWFubmVzcyEgVGhlIHJldHVybmVkIGRhdGEgaXMgX25vdF8gYSBieXRlYXJyYXksIGJ1dCBhbiBhcnJheQorICogY29uc2lzdGluZyBvZiBucl9lbGVtZW50cyBvZiB0aGUgZGF0YSB0eXBlLiAqLwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKmRhdGEpOwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqZGF0YSk7CisKK3ZvaWQgYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKKworCisjZW5kaWYgLyogQjQzX1RBQkxFU19MUFBIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwppbmRleCAwYzBmYjE1Li5lMWUyMGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwpAQCAtNjIsOCArNjIsNyBAQAogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MTkFIUEZDVEwsIDB4MUZGOSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIDB4RkYwRik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCAweEZGMEYpOwogCWlmIChwaHktPnJldiA8PSAyKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTFBGR0FJTiwgMCwgMHgxRkJGKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwMiwgMHgxRkJGKTsKQEAgLTczLDExICs3Miw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxRCwgMHgwRjQwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDFGLCAweDFDMDApOwogCWlmIChwaHktPnJldiA8PSAzKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MDQwMCk7CiAJZWxzZSBpZiAocGh5LT5yZXYgPT0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgxQTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MUEwMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwQ0MsIDB4MjEyMSk7CiAJfQogCWlmIChwaHktPnJldiA+PSAzKQpAQCAtODYsNyArODMsNyBAQAogCiBzdGF0aWMgdm9pZCBiNDNfd2FfZGl2aWRlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJCKSAmIH4weDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIDB4MDAyQiwgfjB4MDEwMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA4RSwgMHg1OEMxKTsKIH0KIApAQCAtMjcyLDggKzI2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGI0M193YV9sbXMoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNTUsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCAweDAwNTUpICYgMHhGRkMwKSB8IDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDU1LCAweEZGQzAsIDB4MDAwNCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9taXhlZHNpZ25hbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC0zMTgsMjMgKzMxNCwxOCBAQAogCX0gZWxzZSBpZiAocGh5LT5yZXYgPT0gMikgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzEsIDB4MTg2MSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSU1RIUkVTMiwgMHgwMjcxKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsCi0JCQkJICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKQotCQkJCSAgfCAweDA4MDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5URFdFTEwsIDB4MDgwMCk7CiAJfSBlbHNlIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTVEhSRVMxLCAweDAwOTgpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzIsIDB4MDA3MCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhDOSksIDB4MDA4MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVERXRUxMLAotCQkJCSAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCkKLQkJCQkgIHwgMHgwODAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOVERXRUxMLCAweDA4MDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX3dhX2Nyc190aHIoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH4weDAzQzApIHwgMHhEMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NSUzAsIH4weDAzQzAsIDB4RDAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9jcnNfYmxhbmsoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzkxLDcyICszODIsNDUgQEAKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzEsIDMsIDI1KTsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSkgJiB+MHhGRjAwKSB8IDB4NTcwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgwMDdGKSB8IDB4MDAwRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgzRjgwKSB8IDB4MkI4MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDdBLAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSkgfCAweDAwMDgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwMDBGKSB8IDB4MDAwOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUDFQMkdBSU4sCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTjFOMkdBSU4pICYgfjB4MEYwMCkgfCAweDA3MDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwRjAwKSB8IDB4MDEwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsICh1MTYpfjB4RkYwMCwgMHg1NzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQSksIH4weDAwN0YsIDB4MDAwRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpLCB+MHgzRjgwLCAweDJCODApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQU5UV1JTRVRULCAweEYwRkYsIDB4MDMwMCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4N0EsIDB4MDAwOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MDAwRiwgMHgwMDA4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOLCB+MHgwRjAwLCAweDA2MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTjFOMkdBSU4sIH4weDBGMDAsIDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MEYwMCwgMHgwMTAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJCQkgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX04xTjJHQUlOKQotCQkJCSAgICYgfjB4MDAwRikgfCAweDAwMDcpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04xTjJHQUlOLCB+MHgwMDBGLCAweDAwMDcpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDAwRkYpIHwgMHgwMDIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpKSAmIH4weDAwRkYpIHwgMHgwMDJFKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weEZGMDApIHwgMHgxQTAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weDAwRkYpIHwgMHgwMDI4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weEZGMDApIHwgMHgyQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksIH4weDAwRkYsIDB4MDAxQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgfjB4MDBGRiwgMHgwMDFDKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksIH4weDAwRkYsIDB4MDAyMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgyKSwgfjB4MDBGRiwgMHgwMDJFKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg5NiksICh1MTYpfjB4RkYwMCwgMHgxQTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksIH4weDAwRkYsIDB4MDAyOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLCAodTE2KX4weEZGMDAsIDB4MkMwMCk7CiAJaWYgKHBoeS0+cmV2ID09IDEpIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEVBS19DT1VOVCwgMHgwOTJCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQikpICYgfjB4MDAxRSkgfCAweDAwMDIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksIH4weDAwMUUsIDB4MDAwMik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLCB+MHgwMDFFKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFGKSwgMHgyODdBKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwpICYgfjB4MDAwRikgfCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwsIH4weDAwMEYsIDB4MDAwNCk7CiAJCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjIpLCAweDI4N0EpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIH4weEYwMDApIHwgMHgzMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwgKHUxNil+MHhGMDAwLCAweDMwMDApOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgpICYgMHg4MDgwKSB8IDB4Nzg3NCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZTUkNISURYLCAweDgwODAsIDB4Nzg3NCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhFKSwgMHgxQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwgfjB4MEYwMCwgMHgwNjAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhCKSwgMHgwMDVFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKSAmIH4weDAwRkYpIHwgMHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIH4weDAwRkYsIDB4MDAxRSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4RCksIDB4MDAwMik7CiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MzX1IxLCAwLCAwKTsKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzNfUjEsIDEsIDcpOwpAQCAtNDY5LDEwICs0MzMsOCBAQAogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMywgMywgMjgpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDAwMDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDEwMDApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDAwMDMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDEwMDApOwogCX0KIAliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1ZFUlNJT05fT0ZETSk7IC8qIER1bW15IHJlYWQgKi8KIH0KQEAgLTUzOCw4ICs1MDAsNyBAQAogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAyLCAweDAwMDEpOwogCQkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgJiYKIAkJCSAgICAocGh5LT5yZXYgPj0gNykpIHsKLQkJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MTEpLAotCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSkpICYgMHhGN0ZGKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSksIDB4RjdGRik7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjAsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjEsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjIsIDB4MDAwMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCBlYWU5YjgwLi5hNjNkODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTUwLDcgKzUwLDcgQEAKIH0KIAogLyogRXh0cmFjdCB0aGUgYml0cmF0ZSBpbmRleCBvdXQgb2YgYW4gT0ZETSBQTENQIGhlYWRlci4gKi8KLXN0YXRpYyB1OCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCwgYm9vbCBhcGh5KQorc3RhdGljIGludCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCwgYm9vbCBhcGh5KQogewogCWludCBiYXNlID0gYXBoeSA/IDAgOiA0OwogCkBAIC01MzgsOCArNTM4LDE0IEBACiAJY2hhbnN0YXQgPSBsZTE2X3RvX2NwdShyeGhkci0+Y2hhbm5lbCk7CiAJcGh5dHlwZSA9IGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fUEhZVFlQRTsKIAotCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19GQ1NFUlIpCisJaWYgKHVubGlrZWx5KG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikpIHsKIAkJZGV2LT53bC0+aWVlZV9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQrKzsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwl9CisJaWYgKHVubGlrZWx5KHBoeXN0YXQwICYgKEI0M19SWF9QSFlTVDBfUExDUEhDRiB8IEI0M19SWF9QSFlTVDBfUExDUEZWKSkpCisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDOworCWlmIChwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfU0hPUlRQUk1CTCkKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAlpZiAobWFjc3RhdCAmIEI0M19SWF9NQUNfREVDRVJSKSB7CiAJCS8qIERlY3J5cHRpb24gd2l0aCB0aGUgZ2l2ZW4ga2V5IGZhaWxlZC4KIAkJICogRHJvcCB0aGUgcGFja2V0LiBXZSBhbHNvIHdvbid0IGJlIGFibGUgdG8gZGVjcnlwdCBpdCB3aXRoCkBAIC02MDYsOCArNjEyLDEyIEBACiAJCQkJCQlwaHl0eXBlID09IEI0M19QSFlUWVBFX0EpOwogCWVsc2UKIAkJc3RhdHVzLnJhdGVfaWR4ID0gYjQzX3BsY3BfZ2V0X2JpdHJhdGVfaWR4X2NjayhwbGNwKTsKLQlpZiAodW5saWtlbHkoc3RhdHVzLnJhdGVfaWR4ID09IC0xKSkKLQkJZ290byBkcm9wOworCWlmICh1bmxpa2VseShzdGF0dXMucmF0ZV9pZHggPT0gLTEpKSB7CisJCS8qIFBMQ1Agc2VlbXMgdG8gYmUgY29ycnVwdGVkLgorCQkgKiBEcm9wIHRoZSBmcmFtZSwgaWYgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGNvcnJ1cHRlZCBmcmFtZXMuICovCisJCWlmICghKGRldi0+d2wtPmZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpCisJCQlnb3RvIGRyb3A7CisJfQogCXN0YXR1cy5hbnRlbm5hID0gISEocGh5c3RhdDAgJiBCNDNfUlhfUEhZU1QwX0FOVCk7CiAKIAkvKgpAQCAtNjYxLDcgKzY3MSw2IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlkZXYtPnN0YXRzLmxhc3RfcnggPSBqaWZmaWVzOwogCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldi0+d2wtPmh3LCBza2IsICZzdGF0dXMpOwogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmMKaW5kZXggY2FjYjc4Ni4uM2VhNTViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9UUkFOU0ZFUjoKIAljYXNlIEI0M2xlZ2FjeV9MRURfQVBUUkFOU0ZFUjoKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OnR4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF90eCwgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF9yeCwgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9SQURJT19COgogCWNhc2UgQjQzbGVnYWN5X0xFRF9NT0RFX0JHOgogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczpyYWRpbyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3JhZGlvLCBuYW1lLAogCQkJCSBiNDNsZWdhY3lfcmZraWxsX2xlZF9uYW1lKGRldiksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9XRUlSRDoKIAljYXNlIEI0M2xlZ2FjeV9MRURfQVNTT0M6CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiYjQzbGVnYWN5LSVzOmFzc29jIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCSAiYjQzbGVnYWN5LSVzOjphc3NvYyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAJCWI0M2xlZ2FjeV9yZWdpc3Rlcl9sZWQoZGV2LCAmZGV2LT5sZWRfYXNzb2MsIG5hbWUsCiAJCQkJIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoaHcpLAogCQkJCSBsZWRfaW5kZXgsIGFjdGl2ZWxvdyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCBmYjk5NmMyLi44NzllZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTI2NTAsNyArMjY1MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzbGVnYWN5X3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsIHU2NCBicmF0ZXMpCitzdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwgdTMyIGJyYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiAJCWRldi0+d2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKaW5kZXggMjQ1M2RlYS4uY2U4NzIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaApAQCAtMzEsNyArMzEsNyBAQAogdm9pZCBob3N0YXBfZHVtcF90eF9oZWFkZXIoY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lICp0eCk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaG9zdGFwXzgwMjExX29wczsKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpOworaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKF9fbGUxNiBmYyk7CiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaG9zdGFwX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBsb2NhbF9pbmZvX3QgKmxvY2FsLAogCQkgICAgICBpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKaW5kZXggM2E5NDc0ZC4uMmU5ZmIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgSE9TVEFQXzgwMjExX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiBzdHJ1Y3QgaG9zdGFwX2llZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYwppbmRleCAxOWIxYmYwLi4zODE2ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKICNpbmNsdWRlICJob3N0YXBfODAyMTEuaCIKICNpbmNsdWRlICJob3N0YXAuaCIKQEAgLTE3LDEwICsxOCwxMCBAQAogdm9pZCBob3N0YXBfZHVtcF9yeF84MDIxMShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggc2lnbmFsPSVkIG5vaXNlPSVkIHJhdGU9JWQgbGVuPSVkICIKIAkgICAgICAgImppZmZpZXM9JWxkXG4iLApAQCAtMzAsOSArMzEsMTAgQEAKIAlpZiAoc2tiLT5sZW4gPCAyKQogCQlyZXR1cm47CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCklcyVzIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMgPyAiIFtGcm9tRFNdIiA6ICIiKTsKIApAQCAtNDIsNyArNDQsNyBAQAogCX0KIAogCXByaW50aygiIGR1cj0weCUwNHggc2VxPTB4JTA0eFxuIiwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCksCi0JICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCkpOworCSAgICAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgQTE9JXBNIiwgaGRyLT5hZGRyMSk7CiAJcHJpbnRrKCIgQTI9JXBNIiwgaGRyLT5hZGRyMik7CkBAIC02Myw3ICs2NSw3IEBACiAJaW50IGhkcmxlbiwgcGhkcmxlbiwgaGVhZF9uZWVkLCB0YWlsX25lZWQ7CiAJdTE2IGZjOwogCWludCBwcmlzbV9oZWFkZXIsIHJldDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqZmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTg0LDggKzg2LDggQEAKIAkJcGhkcmxlbiA9IDA7CiAJfQogCi0JZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShmaGRyLT5mcmFtZV9jdGwpOworCWZoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoZmhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAodHlwZSA9PSBQUklTTTJfUlhfTUdNVCAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9WRVJTKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgbWFuYWdlbWVudCBmcmFtZSB3aXRoIGhlYWRlciAiCkBAIC05NCw3ICs5Niw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciBleHRyYSBkYXRhOyBpZiBub3QsIGV4cGFuZCBza2IKIAkgKiBidWZmZXIgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgY2hhbmdlcyAqLwpAQCAtMTkzLDcgKzE5NSw3IEBACiAJaWYgKHByaXNtX2hlYWRlcikKIAkJc2tiX3B1bGwoc2tiLCBwaGRybGVuKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAluZXRpZl9yeChza2IpOwogCkBAIC0yMDUsMTMgKzIwNywxMSBAQAogc3RhdGljIHZvaWQgbW9uaXRvcl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlpbnQgbGVuOwogCiAJbGVuID0gcHJpc20yX3J4XzgwMjExKGRldiwgc2tiLCByeF9zdGF0cywgUFJJU00yX1JYX01PTklUT1IpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIH0KIAogCkBAIC0yNDcsMjEgKzI0NywyMSBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1wcmlzbTJfZnJhZ19jYWNoZV9nZXQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKK3ByaXNtMl9mcmFnX2NhY2hlX2dldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXUxNiBzYzsKIAl1bnNpZ25lZCBpbnQgZnJhZywgc2VxOwogCXN0cnVjdCBwcmlzbTJfZnJhZ19lbnRyeSAqZW50cnk7CiAKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7Ci0JZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKLQlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKSA+PiA0OworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJZnJhZyA9IHNjICYgSUVFRTgwMjExX1NDVExfRlJBRzsKKwlzZXEgPSAoc2MgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CiAKIAlpZiAoZnJhZyA9PSAwKSB7CiAJCS8qIFJlc2VydmUgZW5vdWdoIHNwYWNlIHRvIGZpdCBtYXhpbXVtIGZyYW1lIGxlbmd0aCAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5kZXYtPm10dSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkcikgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpICsKIAkJCQkgICAgOCAvKiBMTEMgKi8gKwogCQkJCSAgICAyIC8qIGFsaWdubWVudCAqLyArCiAJCQkJICAgIDggLyogV0VQICovICsgRVRIX0FMRU4gLyogV0RTICovKTsKQEAgLTI5OSwxNCArMjk5LDE0IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogc3RhdGljIGludCBwcmlzbTJfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBzZXE7CiAJc3RydWN0IHByaXNtMl9mcmFnX2VudHJ5ICplbnRyeTsKIAotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKSA+PiA0OworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJc2VxID0gKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwogCiAJZW50cnkgPSBwcmlzbTJfZnJhZ19jYWNoZV9maW5kKGxvY2FsLCBzZXEsIC0xLCBoZHItPmFkZHIyLCBoZHItPmFkZHIxKTsKIApAQCAtNDcyLDEwICs0NzIsOCBAQAogCQkgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywgdTE2IHR5cGUsCiAJCSAgICAgdTE2IHN0eXBlKQogewotCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikgewotCQlob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbCwgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopCi0JCQkJICAgICBza2ItPmRhdGEpOwotCX0KKwlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIpCisJCWhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhKTsKIAogCWlmIChsb2NhbC0+aG9zdGFwZCAmJiB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSB7CiAJCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OICYmCkBAIC01NTIsOCArNTUwLDggQEAKIAogCiBzdGF0aWMgaW50Ci1ob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCi0JCSAgICB1MTYgZmMsIHN0cnVjdCBuZXRfZGV2aWNlICoqd2RzKQoraG9zdGFwX3J4X2ZyYW1lX3dkcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MTYgZmMsCisJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKndkcykKIHsKIAkvKiBGSVg6IGlzIHRoaXMgcmVhbGx5IHN1cHBvc2VkIHRvIGFjY2VwdCBXRFMgZnJhbWVzIG9ubHkgaW4gTWFzdGVyCiAJICogbW9kZT8gV2hhdCBhYm91dCBSZXBlYXRlciBvciBNYW5hZ2VkIHdpdGggV0RTIGZyYW1lcz8gKi8KQEAgLTYxMSwxNCArNjA5LDE0IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJdTE2IGZjLCBldGhlcnR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4ICpwb3M7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY2hlY2sgdGhhdCB0aGUgZnJhbWUgaXMgdW5pY2FzdCBmcmFtZSB0byB1cyAqLwogCWlmICgoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpID09CkBAIC02NTEsMTQgKzY0OSwxNCBAQAogaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IHJlcywgaGRybGVuOwogCiAJaWYgKGNyeXB0ID09IE5VTEwgfHwgY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmIChsb2NhbC0+dGtpcF9jb3VudGVybWVhc3VyZXMgJiYKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewpAQCAtNjg5LDE0ICs2ODcsMTQgQEAKIGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0X21zZHUobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgaW50IGtleWlkeCwgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJYXRvbWljX2luYygmY3J5cHQtPnJlZmNudCk7CiAJcmVzID0gY3J5cHQtPm9wcy0+ZGVjcnlwdF9tc2R1KHNrYiwga2V5aWR4LCBoZHJsZW4sIGNyeXB0LT5wcml2KTsKQEAgLTcyMCwxMSArNzE4LDEwIEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXNpemVfdCBoZHJsZW47CiAJdTE2IGZjLCB0eXBlLCBzdHlwZSwgc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKndkcyA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBmcmFnOwogCXU4ICpwYXlsb2FkOwogCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKQEAgLTc0NywxOCArNzQ0LDE3IEBACiAJZGV2ID0gbG9jYWwtPmRkZXY7CiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJaWYgKHNrYi0+bGVuIDwgMTApCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKLQlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7Ci0JZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFOworCXN0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKKwlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOworCWZyYWcgPSBzYyAmIElFRUU4MDIxMV9TQ1RMX0ZSQUc7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIFB1dCB0aGlzIGNvZGUgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGR1cGxpY2F0aW5nIGl0IGluIGFsbAogCSAqIFJ4IHBhdGhzLiAtIEplYW4gSUkgKi8KQEAgLTg2NiwxMCArODYyLDggQEAKIAogCWlmIChob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsLCBoZHIsIGZjLCAmd2RzKSkKIAkJZ290byByeF9kcm9wcGVkOwotCWlmICh3ZHMpIHsKKwlpZiAod2RzKQogCQlza2ItPmRldiA9IGRldiA9IHdkczsKLQkJc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7Ci0JfQogCiAJaWYgKGxvY2FsLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSICYmICF3ZHMgJiYKIAkgICAgKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA9PQpAQCAtODc4LDcgKzg3Miw2IEBACiAJICAgIG1lbWNtcChoZHItPmFkZHIyLCBsb2NhbC0+YXNzb2NfYXBfYWRkciwgRVRIX0FMRU4pID09IDApIHsKIAkJLyogRnJhbWUgZnJvbSBCU1NJRCBvZiB0aGUgQVAgZm9yIHdoaWNoIHdlIGFyZSBhIGNsaWVudCAqLwogCQlza2ItPmRldiA9IGRldiA9IGxvY2FsLT5zdGFkZXY7Ci0JCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCQlmcm9tX2Fzc29jX2FwID0gMTsKIAl9CiAKQEAgLTkxOCw3ICs5MTEsNyBAQAogCWlmIChsb2NhbC0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYKIAkgICAgKGtleWlkeCA9IGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0KGxvY2FsLCBza2IsIGNyeXB0KSkgPCAwKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJLyogc2tiOiBoZHIgKyAocG9zc2libHkgZnJhZ21lbnRlZCkgcGxhaW50ZXh0IHBheWxvYWQgKi8KIApAQCAtOTMxLDcgKzkyNCw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJ4IGNhbm5vdCBnZXQgc2tiIGZyb20gIgogCQkJICAgICAgICJmcmFnbWVudCBjYWNoZSAobW9yZWZyYWc9JWQgc2VxPSV1IGZyYWc9JXUpXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgKGZjICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSAhPSAwLAotCQkJICAgICAgIFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQsIGZyYWcpOworCQkJICAgICAgIChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCwgZnJhZyk7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJCX0KIApAQCAtOTcyLDcgKzk2NSw3IEBACiAJCS8qIHRoaXMgd2FzIHRoZSBsYXN0IGZyYWdtZW50IGFuZCB0aGUgZnJhbWUgd2lsbCBiZQogCQkgKiBkZWxpdmVyZWQsIHNvIHJlbW92ZSBza2IgZnJvbSBmcmFnbWVudCBjYWNoZSAqLwogCQlza2IgPSBmcmFnX3NrYjsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJcHJpc20yX2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShsb2NhbCwgaGRyKTsKIAl9CiAKQEAgLTk4Myw3ICs5NzYsNyBAQAogCSAgICBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KGxvY2FsLCBza2IsIGtleWlkeCwgY3J5cHQpKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJaWYgKGNyeXB0ICYmICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmICFsb2NhbC0+b3Blbl93ZXApIHsKIAkJaWYgKGxvY2FsLT5pZWVlXzgwMl8xeCAmJgogCQkgICAgaG9zdGFwX2lzX2VhcG9sX2ZyYW1lKGxvY2FsLCBza2IpKSB7CkBAIC0xMDY5LDggKzEwNjIsOCBAQAogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gRVRIX0FMRU4pOwogCX0KIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIgJiYgIXdkcyAmJgogCSAgICBsb2NhbC0+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC0xMDk0LDcgKzEwODcsNyBAQAogCWlmIChza2IyICE9IE5VTEwpIHsKIAkJLyogc2VuZCB0byB3aXJlbGVzcyBtZWRpYSAqLwogCQlza2IyLT5kZXYgPSBkZXY7Ci0JCXNrYjItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyk7CisJCXNrYjItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOwogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IyKTsKIAkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOwogCQkvKiBza2IyLT5uZXR3b3JrX2hlYWRlciArPSBFVEhfSExFTjsgKi8KQEAgLTExMTUsNyArMTEwOCw3IEBACiAgcnhfZHJvcHBlZDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWdvdG8gcnhfZXhpdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IDA3OGEwMTAuLjY2OTM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTE1LDEwICsxNSwxMCBAQAogCiB2b2lkIGhvc3RhcF9kdW1wX3R4XzgwMjExKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogVFggbGVuPSVkIGppZmZpZXM9JWxkXG4iLAogCSAgICAgICBuYW1lLCBza2ItPmxlbiwgamlmZmllcyk7CkBAIC0yNiw5ICsyNiwxMCBAQAogCWlmIChza2ItPmxlbiA8IDIpCiAJCXJldHVybjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgRkM9MHglMDR4ICh0eXBlPSVkOiVkKSVzJXMiLAotCSAgICAgICBmYywgV0xBTl9GQ19HRVRfVFlQRShmYykgPj4gMiwgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID4+IDQsCisJICAgICAgIGZjLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMiwKKwkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUyA/ICIgW1RvRFNdIiA6ICIiLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgW0Zyb21EU10iIDogIiIpOwogCkBAIC0zOCw3ICszOSw3IEBACiAJfQogCiAJcHJpbnRrKCIgZHVyPTB4JTA0eCBzZXE9MHglMDR4XG4iLCBsZTE2X3RvX2NwdShoZHItPmR1cmF0aW9uX2lkKSwKLQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgICBBMT0lcE0iLCBoZHItPmFkZHIxKTsKIAlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKQEAgLTU3LDcgKzU4LDcgQEAKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAlpbnQgbmVlZF9oZWFkcm9vbSwgbmVlZF90YWlscm9vbSA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkcjsKIAl1MTYgZmMsIGV0aGVydHlwZSA9IDA7CiAJZW51bSB7CiAJCVdEU19OTyA9IDAsIFdEU19PV05fRlJBTUUsIFdEU19DT01QTElBTlRfRlJBTUUKQEAgLTIwMSw3ICsyMDIsNyBAQAogCQltZW1jcHkoJmhkci5hZGRyMywgbG9jYWwtPmJzc2lkLCBFVEhfQUxFTik7CiAJfQogCi0JaGRyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwloZHIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAogCXNrYl9wdWxsKHNrYiwgc2tpcF9oZWFkZXJfYnl0ZXMpOwogCW5lZWRfaGVhZHJvb20gPSBsb2NhbC0+ZnVuYy0+bmVlZF90eF9oZWFkcm9vbSArIGhkcl9sZW4gKyBlbmNhcHNfbGVuOwpAQCAtMjY1LDcgKzI2Niw3IEBACiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjg3LDEwICsyODgsMTAgQEAKIAltZXRhLT5pZmFjZSA9IGlmYWNlOwogCiAJaWYgKHNrYi0+bGVuID49IElFRUU4MDIxMV9EQVRBX0hEUjNfTEVOICsgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSArIDIpIHsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgotCQkgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID09IElFRUU4MDIxMV9TVFlQRV9EQVRBKSB7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfREFUQSkgewogCQkJdTggKnBvcyA9ICZza2ItPmRhdGFbSUVFRTgwMjExX0RBVEFfSERSM19MRU4gKwogCQkJCQkgICAgIHNpemVvZihyZmMxMDQyX2hlYWRlcildOwogCQkJbWV0YS0+ZXRoZXJ0eXBlID0gKHBvc1swXSA8PCA4KSB8IHBvc1sxXTsKQEAgLTMxMCw4ICszMTEsNyBAQAogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IHByZWZpeF9sZW4sIHBvc3RmaXhfbGVuLCBoZHJfbGVuLCByZXM7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KHNrYi0+ZGV2KTsKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAJaWYgKGxvY2FsLT50a2lwX2NvdW50ZXJtZWFzdXJlcyAmJgogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7Ci0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgogCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLApAQCAtMzQ5LDkgKzM0OSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0gCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWhkcl9sZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJfbGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIEhvc3QtYmFzZWQgSUVFRSA4MDIuMTEgZnJhZ21lbnRhdGlvbiBmb3IgVFggaXMgbm90IHlldCBzdXBwb3J0ZWQsIHNvCiAJICogY2FsbCBib3RoIE1TRFUgYW5kIE1QRFUgZW5jcnlwdGlvbiBmdW5jdGlvbnMgZnJvbSBoZXJlLiAqLwpAQCAtMzg0LDcgKzM4Myw3IEBACiAJYXBfdHhfcmV0IHR4X3JldDsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCWludCBub19lbmNyeXB0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAJbG9jYWwgPSBpZmFjZS0+bG9jYWw7CkBAIC00MjcsMTQgKzQyNiwxNCBAQAogCXR4X3JldCA9IGhvc3RhcF9oYW5kbGVfc3RhX3R4KGxvY2FsLCAmdHgpOwogCXNrYiA9IHR4LnNrYjsKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlzd2l0Y2ggKHR4X3JldCkgewogCWNhc2UgQVBfVFhfQ09OVElOVUU6CiAJCWJyZWFrOwogCWNhc2UgQVBfVFhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQ6CiAJCWlmIChsb2NhbC0+aWVlZV84MDJfMXggJiYKLQkJICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCisJCSAgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgICBtZXRhLT5ldGhlcnR5cGUgIT0gRVRIX1BfUEFFICYmCiAJCSAgICAhKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX1dEUykpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBmcmFtZSB0byB1bmF1dGhvcml6ZWQgIgpAQCAtNDY5LDEwICs0NjgsMTAgQEAKIAogCQkvKiByZW1vdmUgc3BlY2lhbCB2ZXJzaW9uIGZyb20gdGhlIGZyYW1lIGhlYWRlciAqLwogCQlmYyAmPSB+SUVFRTgwMjExX0ZDVExfVkVSUzsKLQkJaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAl9CiAKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJbm9fZW5jcnlwdCA9IDE7CiAJCXR4LmNyeXB0ID0gTlVMTDsKIAl9CkBAIC00OTMsOSArNDkyLDkgQEAKIAkJLyogQWRkIElTV0VQIGZsYWcgYm90aCBmb3IgZmlybXdhcmUgYW5kIGhvc3QgYmFzZWQgZW5jcnlwdGlvbgogCQkgKi8KIAkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwotCQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCX0gZWxzZSBpZiAobG9jYWwtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKLQkJICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKKwkJICAgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQkgICBtZXRhLT5ldGhlcnR5cGUgIT0gRVRIX1BfUEFFKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCB1bmVuY3J5cHRlZCBUWCBkYXRhICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCAwOTAzZGI3Li5hMmEyMDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgpAQCAtNTg4LDI4ICs1ODksMjQgQEAKIHN0YXRpYyB2b2lkIGhvc3RhcF9hcF90eF9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKLQl1MTYgZmM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWYgKCFhcC0+bG9jYWwtPmhvc3RhcGQgfHwgIWFwLT5sb2NhbC0+YXBkZXYpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQogCS8qIFBhc3MgdGhlIFRYIGNhbGxiYWNrIGZyYW1lIHRvIHRoZSBob3N0YXBkOyB1c2UgODAyLjExIGhlYWRlciB2ZXJzaW9uCiAJICogMSB0byBpbmRpY2F0ZSBmYWlsdXJlIChubyBBQ0spIGFuZCAyIHN1Y2Nlc3MgKGZyYW1lIEFDS2VkKSAqLwogCi0JZmMgJj0gfklFRUU4MDIxMV9GQ1RMX1ZFUlM7Ci0JZmMgfD0gb2sgPyBCSVQoMSkgOiBCSVQoMCk7Ci0JaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHItPmZyYW1lX2NvbnRyb2wgJj0gY3B1X3RvX2xlMTYofklFRUU4MDIxMV9GQ1RMX1ZFUlMpOworCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihvayA/IEJJVCgxKSA6IEJJVCgwKSk7CiAKIAlza2ItPmRldiA9IGFwLT5sb2NhbC0+YXBkZXY7Ci0Jc2tiX3B1bGwoc2tiLCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYykpOworCXNrYl9wdWxsKHNrYiwgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKSk7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzIpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMik7CiAJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTYyMSw4ICs2MTgsOCBAQAogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFwLT5sb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTE2IGZjLCBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWNoYXIgKnR4dCA9IE5VTEw7CkBAIC02MzIsMTAgKzYyOSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSAhPSBJRUVFODAyMTFfRlRZUEVfTUdNVCB8fAotCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX0FVVEggfHwKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWlmICghaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBza2ItPmxlbiA8IElFRUU4MDIxMV9NR01UX0hEUl9MRU4gKyA2KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdGFwX2FwX3R4X2NiX2F1dGggcmVjZWl2ZWQgaW52YWxpZCAiCiAJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CkBAIC02OTEsNyArNjg2LDcgQEAKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcC0+bG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjLCBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwpAQCAtNzAyLDExICs2OTcsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UIHx8Ci0JICAgIChXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgJiYKLQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQKSB8fAorCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCWlmICgoIWllZWU4MDIxMV9pc19hc3NvY19yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgICFpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHx8CiAJICAgIHNrYi0+bGVuIDwgSUVFRTgwMjExX01HTVRfSERSX0xFTiArIDQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfYXBfdHhfY2JfYXNzb2MgcmVjZWl2ZWQgaW52YWxpZCAiCiAJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CkBAIC03NTcsMTIgKzc1MSwxMiBAQAogc3RhdGljIHZvaWQgaG9zdGFwX2FwX3R4X2NiX3BvbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9rLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJaWYgKHNrYi0+bGVuIDwgMjQpCiAJCWdvdG8gZmFpbDsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJaWYgKG9rKSB7CiAJCXNwaW5fbG9jaygmYXAtPnN0YV90YWJsZV9sb2NrKTsKIAkJc3RhID0gYXBfZ2V0X3N0YShhcCwgaGRyLT5hZGRyMSk7CkBAIC05MTcsNyArOTExLDcgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKQEAgLTk0Miw4ICs5MzYsOCBAQAogCX0KIAogCWZjID0gdHlwZV9zdWJ0eXBlOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiX3B1dChza2IsIGhkcmxlbik7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oY3B1X3RvX2xlMTYodHlwZV9zdWJ0eXBlKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCBoZHJsZW4pOwogCWlmIChib2R5KQogCQltZW1jcHkoc2tiX3B1dChza2IsIGJvZHlfbGVuKSwgYm9keSwgYm9keV9sZW4pOwogCkBAIC05NTQsMTEgKzk0OCwxMSBAQAogCiAKIAltZW1jcHkoaGRyLT5hZGRyMSwgYWRkciwgRVRIX0FMRU4pOyAvKiBEQSAvIFJBICovCi0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7CisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJZmMgfD0gSUVFRTgwMjExX0ZDVExfRlJPTURTOwogCQltZW1jcHkoaGRyLT5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBCU1NJRCAqLwogCQltZW1jcHkoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBTQSAqLwotCX0gZWxzZSBpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkgeworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCS8qIGNvbnRyb2w6QUNLIGRvZXMgbm90IGhhdmUgYWRkcjIgb3IgYWRkcjMgKi8KIAkJbWVtc2V0KGhkci0+YWRkcjIsIDAsIEVUSF9BTEVOKTsKIAkJbWVtc2V0KGhkci0+YWRkcjMsIDAsIEVUSF9BTEVOKTsKQEAgLTk2Nyw3ICs5NjEsNyBAQAogCQltZW1jcHkoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBCU1NJRCAqLwogCX0KIAotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCW1lbXNldChtZXRhLCAwLCBzaXplb2YoKm1ldGEpKTsKQEAgLTEyODQsMjIgKzEyNzgsMjEgQEAKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCXNpemVfdCBoZHJsZW47CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gbG9jYWwtPmFwOwogCWNoYXIgYm9keVs4ICsgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU5dLCAqY2hhbGxlbmdlID0gTlVMTDsKIAlpbnQgbGVuLCBvbGVuOwogCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CiAJX19sZTE2ICpwb3M7Ci0JdTE2IHJlc3AgPSBXTEFOX1NUQVRVU19TVUNDRVNTLCBmYzsKKwl1MTYgcmVzcCA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAljaGFyICp0eHQgPSAiIjsKIAogCWxlbiA9IHNrYi0+bGVuIC0gSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKGxlbiA8IDYpIHsKIAkJUERFQlVHKERFQlVHX0FQLCAiJXM6IGhhbmRsZV9hdXRoZW4gLSB0b28gc2hvcnQgcGF5bG9hZCAiCkBAIC0xNDM1LDcgKzE0MjgsNyBAQAogCQkJICAgIGNoYWxsZW5nZSA9PSBOVUxMIHx8CiAJCQkgICAgbWVtY21wKHN0YS0+dS5zdGEuY2hhbGxlbmdlLCBjaGFsbGVuZ2UsCiAJCQkJICAgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pICE9IDAgfHwKLQkJCSAgICAhKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkgeworCQkJICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQkJdHh0ID0gImNoYWxsZW5nZSByZXNwb25zZSBpbmNvcnJlY3QiOwogCQkJCXJlc3AgPSBXTEFOX1NUQVRVU19DSEFMTEVOR0VfRkFJTDsKIAkJCQlnb3RvIGZhaWw7CkBAIC0xNDg4LDcgKzE0ODEsNyBAQAogCQkgICAgICAgInRyYW5zIz0lZCBzdGF0PSVkIGxlbj0lZCBmYz0lMDR4KSA9PT4gJWQgKCVzKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZSwgbGVuLAotCQkgICAgICAgZmMsIHJlc3AsIHR4dCk7CisJCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpLCByZXNwLCB0eHQpOwogCX0KIH0KIApAQCAtMTQ5OCw3ICsxNDkxLDcgQEAKIAkJCSBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMsIGludCByZWFzc29jKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgYm9keVsxMl0sICpwLCAqbHBvczsKIAlpbnQgbGVuLCBsZWZ0OwogCV9fbGUxNiAqcG9zOwpAQCAtMTcwNyw3ICsxNzAwLDcgQEAKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSAoY2hhciAqKSAoc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTik7CiAJaW50IGxlbjsKIAl1MTYgcmVhc29uX2NvZGU7CkBAIC0xNzQ5LDcgKzE3NDIsNyBAQAogCQkJICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAlpbnQgbGVuOwogCXUxNiByZWFzb25fY29kZTsKQEAgLTE3ODgsNyArMTc4MSw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgc2NoZWR1bGVkIHRhc2sgZm9yIHBlbmRpbmcgQVAgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgYXBfaGFuZGxlX2RhdGFfbnVsbGZ1bmMobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIApAQCAtMTgwNSw3ICsxNzk4LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBhcF9oYW5kbGVfZHJvcHBlZF9kYXRhKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMTg2Myw3ICsxODU2LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBoYW5kbGVfcHNwb2xsKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKQEAgLTE4NzIsOCArMTg2NSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCVBERUJVRyhERUJVR19QUzIsICJoYW5kbGVfcHNwb2xsOiBCU1NJRD0lcE0sIFRBPSVwTSBQV1JNR1Q9JWRcbiIsCi0JICAgICAgIGhkci0+YWRkcjEsIGhkci0+YWRkcjIsCi0JICAgICAgICEhKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX1BNKSk7CisJICAgICAgIGhkci0+YWRkcjEsIGhkci0+YWRkcjIsICEhaWVlZTgwMjExX2hhc19wbShoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAogCWlmIChtZW1jbXAoaGRyLT5hZGRyMSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7CiAJCVBERUJVRyhERUJVR19BUCwKQEAgLTE5ODQsNyArMTk3Niw3IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfYmVhY29uKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAlpbnQgbGVuLCBsZWZ0OwogCXUxNiBiZWFjb25faW50LCBjYXBhYmlsaXR5OwpAQCAtMjE0MywxNCArMjEzNSwxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogI2VuZGlmIC8qIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQgKi8KIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCS8qIEZJWDogc2hvdWxkIGdpdmUgc2tiLT5sZW4gdG8gaGFuZGxlciBmdW5jdGlvbnMgYW5kIGNoZWNrIHRoYXQgdGhlCiAJICogYnVmZmVyIGlzIGxvbmcgZW5vdWdoICovCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7Ci0Jc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CisJc3R5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOwogCiAjaWZuZGVmIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQKIAlpZiAoIWxvY2FsLT5ob3N0YXBkICYmIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKQEAgLTIyNjIsOCArMjI1NCw3IEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0JdTE2IGZjOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTIyNzEsMTcgKzIyNjIsMTUgQEAKIAlpZiAoc2tiLT5sZW4gPCAxNikKIAkJZ290byBkcm9wOwogCi0JbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCWlmIChsb2NhbC0+YXAtPmFwX3BvbGljeSA9PSBBUF9PVEhFUl9BUF9TS0lQX0FMTCAmJgotCSAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgotCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKKwkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlnb3RvIGRyb3A7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IT1NUQVApOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9IT1NUQVApOwogCWhhbmRsZV9hcF9pdGVtKGxvY2FsLCBza2IsIHJ4X3N0YXRzKTsKIAlyZXR1cm47CiAKQEAgLTIyOTQsNyArMjI4Myw3IEBACiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9wYWNrZXRfc2VuZChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyByeF9zdGF0czsKIAogCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+dHhfYnVmKSkKQEAgLTIzMDcsMTAgKzIyOTYsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2JfcHV0KHNrYiwgMTYpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMTYpOwogCiAJLyogR2VuZXJhdGUgYSBmYWtlIHBzcG9sbCBmcmFtZSB0byBzdGFydCBwYWNrZXQgZGVsaXZlcnkgKi8KLQloZHItPmZyYW1lX2N0bCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoCiAJCUlFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKIAltZW1jcHkoaGRyLT5hZGRyMSwgbG9jYWwtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoaGRyLT5hZGRyMiwgc3RhLT5hZGRyLCBFVEhfQUxFTik7CkBAIC0yNjg5LDcgKzI2NzgsNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKIAlpbnQgc2V0X3RpbSwgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CkBAIC0yNjk4LDcgKzI2ODcsNyBAQAogCSAgICBtZXRhLT5pZmFjZS0+dHlwZSA9PSBIT1NUQVBfSU5URVJGQUNFX1NUQSkKIAkJZ290byBvdXQ7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlpZiAoaGRyLT5hZGRyMVswXSAmIDB4MDEpIHsKIAkJLyogYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZSAtIG5vIEFQIHJlbGF0ZWQgcHJvY2Vzc2luZyAqLwpAQCAtMjc1Myw4ICsyNzQyLDggQEAKIAogCWlmIChtZXRhLT5mbGFncyAmIEhPU1RBUF9UWF9GTEFHU19BRERfTU9SRURBVEEpIHsKIAkJLyogaW5kaWNhdGUgdG8gU1RBIHRoYXQgbW9yZSBmcmFtZXMgZm9sbG93ICovCi0JCWhkci0+ZnJhbWVfY3RsIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sIHw9CisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CiAJfQogCiAJaWYgKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX0JVRkZFUkVEX0ZSQU1FKSB7CkBAIC0yODI4LDEwICsyODE3LDEwIEBACiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3R4X2V4Yyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCiAJc3Bpbl9sb2NrKCZsb2NhbC0+YXAtPnN0YV90YWJsZV9sb2NrKTsKQEAgLTI4OTgsOCArMjg4Nyw4IEBACiAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiBDYWxsZWQgZm9yIGVhY2ggUlggZnJhbWUgdG8gdXBkYXRlCi0gKiBTVEEgcG93ZXIgc2F2aW5nIHN0YXRlLiBwd3JtZ3QgaXMgYSBmbGFnIGZyb20gODAyLjExIGZyYW1lX2N0bCBmaWVsZC4gKi8KLWludCBob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorICogU1RBIHBvd2VyIHNhdmluZyBzdGF0ZS4gcHdybWd0IGlzIGEgZmxhZyBmcm9tIDgwMi4xMSBmcmFtZV9jb250cm9sIGZpZWxkLiAqLworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IGZjOwpAQCAtMjkxMyw5ICsyOTAyLDEwIEBACiAJaWYgKCFzdGEpCiAJCXJldHVybiAtMTsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlob3N0YXBfdXBkYXRlX3N0YV9wczIobG9jYWwsIHN0YSwgZmMgJiBJRUVFODAyMTFfRkNUTF9QTSwKLQkJCSAgICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykpOworCQkJICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSwKKwkJCSAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpOwogCiAJYXRvbWljX2RlYygmc3RhLT51c2Vycyk7CiAJcmV0dXJuIDA7CkBAIC0yOTMyLDE2ICsyOTIyLDE2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmIChsb2NhbC0+YXAgPT0gTlVMTCkKIAkJcmV0dXJuIEFQX1JYX0NPTlRJTlVFOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKKwlzdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAKIAlzcGluX2xvY2soJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwogCXN0YSA9IGFwX2dldF9zdGEobG9jYWwtPmFwLCBoZHItPmFkZHIyKTsKQEAgLTMwNjQsNyArMzA1NCw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0LAogCQkJICAgICB2b2lkICoqc3RhX3B0cikKIHsKQEAgLTMxNjYsNyArMzE1Niw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKaW5kZXggZDM2ZTRiMS4uNjU1Y2VlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaApAQCAtMjM1LDcgKzIzNSw3IEBACiBhcF90eF9yZXQgaG9zdGFwX2hhbmRsZV9zdGFfdHgobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGhvc3RhcF90eF9kYXRhICp0eCk7CiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3JlbGVhc2Uodm9pZCAqcHRyKTsKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfdHhfZXhjKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpOworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogdHlwZWRlZiBlbnVtIHsKIAlBUF9SWF9DT05USU5VRSwgQVBfUlhfRFJPUCwgQVBfUlhfRVhJVCwgQVBfUlhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQKIH0gYXBfcnhfcmV0OwpAQCAtMjQzLDEzICsyNDMsMTMgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywKIAkJCSAgICAgICBpbnQgd2RzKTsKLWludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKK2ludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgICAgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKipjcnlwdCwKIAkJCSAgICAgdm9pZCAqKnN0YV9wdHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXNzb2Moc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXV0aG9yaXplZChzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7CiBpbnQgaG9zdGFwX2FkZF9zdGEoc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwotaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAoraW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKTsKIHZvaWQgaG9zdGFwX3VwZGF0ZV9yYXRlcyhsb2NhbF9pbmZvX3QgKmxvY2FsKTsKIHZvaWQgaG9zdGFwX2FkZF93ZHNfbGlua3MobG9jYWxfaW5mb190ICpsb2NhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggMGYyNzA1OS4uM2RhZDFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xNjgzLDcgKzE2ODIsNyBAQAogCiAJUERFQlVHKERFQlVHX0VYVFJBMiwgInByaXNtMl9nZXRfdHhmaWRfaWR4OiBubyByb29tIGluIHR4ZmlkIGJ1ZjogIgogCSAgICAgICAicGFja2V0IGRyb3BwZWRcbiIpOwotCWxvY2FsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJbG9jYWwtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtMTc4OCwxMSArMTc4Nyw5IEBACiAJCXByaXNtMl90cmFuc21pdF9jYiwgKGxvbmcpIGlkeCk7CiAKIAlpZiAocmVzKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcmlzbTJfdHJhbnNtaXQ6IENNRENPREVfVFJBTlNNSVQgIgogCQkgICAgICAgImZhaWxlZCAocmVzPSVkKVxuIiwgZGV2LT5uYW1lLCByZXMpOwotCQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE4NDAsOCArMTgzNyw4IEBACiAJaGRyX2xlbiA9IDI0OwogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAmdHhkZXNjLmZyYW1lX2NvbnRyb2wsIGhkcl9sZW4pOwogIAlmYyA9IGxlMTZfdG9fY3B1KHR4ZGVzYy5mcmFtZV9jb250cm9sKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSAmJgorCWlmIChpZWVlODAyMTFfaXNfZGF0YSh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKKwkgICAgaWVlZTgwMjExX2hhc19hNCh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKIAkgICAgc2tiLT5sZW4gPj0gMzApIHsKIAkJLyogQWRkcjQgKi8KIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBoZHJfbGVuLCB0eGRlc2MuYWRkcjQsCkBAIC0xOTQwLDEyICsxOTM3LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJaW50IHJlcywgcnhfcGVuZGluZyA9IDA7CiAJdTE2IGxlbiwgaGRyX2xlbiwgcnhmaWQsIHN0YXR1cywgbWFjcG9ydDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJc3RydWN0IGhmYTM4NHhfcnhfZnJhbWUgcnhkZXNjOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCiAJcHJpc20yX2NhbGxiYWNrKGxvY2FsLCBQUklTTTJfQ0FMTEJBQ0tfUlhfU1RBUlQpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCiAJcnhmaWQgPSBwcmlzbTJfcmVhZF9maWRfcmVnKGRldiwgSEZBMzg0WF9SWEZJRF9PRkYpOwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCkBAIC0yMDMyLDcgKzIwMjcsNyBAQAogCXJldHVybjsKIAogIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJZ290byByeF9leGl0OwpAQCAtMjA4Miw3ICsyMDc3LDcgQEAKIAlzdGF0cy5yYXRlID0gcnhkZXNjLT5yYXRlOwogCiAJLyogQ29udmVydCBQcmlzbTIgUlggc3RydWN0dXJlIGludG8gSUVFRSA4MDIuMTEgaGVhZGVyICovCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUocnhkZXNjLT5mcmFtZV9jb250cm9sKSk7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4ocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoaGRybGVuID4gcnhfaGRybGVuKQogCQloZHJsZW4gPSByeF9oZHJsZW47CiAKQEAgLTIyMDQsNyArMjE5OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWxlbiA9IGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZGF0YV9sZW4pOwogCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgbGVuKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKQEAgLTIzMTUsOCArMjMxMCw3IEBACiAJCWlmIChza2ItPmxlbiA+PSBzaXplb2YoKnR4ZGVzYykpIHsKIAkJCS8qIENvbnZlcnQgUHJpc20yIFJYIHN0cnVjdHVyZSBpbnRvIElFRUUgODAyLjExIGhlYWRlcgogCQkJICovCi0JCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwotCQkJaW50IGhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwkJCWludCBoZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCQkJbWVtbW92ZShza2JfcHVsbChza2IsIHNpemVvZigqdHhkZXNjKSAtIGhkcmxlbiksCiAJCQkJJnR4ZGVzYy0+ZnJhbWVfY29udHJvbCwgaGRybGVuKTsKIApAQCAtMjMzNyw3ICsyMzMxLDcgQEAKIAlzdHJ1Y3QgaGZhMzg0eF90eF9mcmFtZSB0eGRlc2M7CiAKIAlzaG93X2R1bXAgPSBsb2NhbC0+ZnJhbWVfZHVtcCAmIFBSSVNNMl9EVU1QX1RYRVhDX0hEUjsKLQlsb2NhbC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCXJlcyA9IGhvc3RhcF90eF9jb21wbF9yZWFkKGxvY2FsLCAxLCAmdHhkZXNjLCAmcGF5bG9hZCk7CiAJSEZBMzg0WF9PVVRXKEhGQTM4NFhfRVZfVFhFWEMsIEhGQTM4NFhfRVZBQ0tfT0ZGKTsKQEAgLTIzOTQsMTIgKzIzODgsMTIgQEAKIAlQREVCVUcoREVCVUdfRVhUUkEsICIgICByZXRyeV9jb3VudD0lZCB0eF9yYXRlPSVkIGZjPTB4JTA0eCAiCiAJICAgICAgICIoJXMlcyVzOjolZCVzJXMpXG4iLAogCSAgICAgICB0eGRlc2MucmV0cnlfY291bnQsIHR4ZGVzYy50eF9yYXRlLCBmYywKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgPyAiTWdtdCIgOiAiIiwKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCA/ICJDdHJsIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSA/ICJEYXRhIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKLQkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBUb0RTIiA6ICIiLAotCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgRnJvbURTIiA6ICIiKTsKKwkgICAgICAgaWVlZTgwMjExX2lzX21nbXQodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIk1nbXQiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19jdGwodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIkN0cmwiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19kYXRhKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICJEYXRhIiA6ICIiLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKKwkgICAgICAgaWVlZTgwMjExX2hhc190b2RzKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICIgVG9EUyIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2hhc19mcm9tZHModHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIiBGcm9tRFMiIDogIiIpOwogCVBERUJVRyhERUJVR19FWFRSQSwgIiAgIEExPSVwTSBBMj0lcE0gQTM9JXBNIEE0PSVwTVxuIiwKIAkgICAgICAgdHhkZXNjLmFkZHIxLCB0eGRlc2MuYWRkcjIsCiAJICAgICAgIHR4ZGVzYy5hZGRyMywgdHhkZXNjLmFkZHI0KTsKQEAgLTMyMjgsNyArMzIyMiw2IEBACiAKIAlob3N0YXBfc2V0dXBfZGV2KGRldiwgbG9jYWwsIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSKTsKIAotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaG9zdGFwX21hc3Rlcl9zdGFydF94bWl0OwogCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKaW5kZXggOTliNGNmNC4uNmZhMTRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKQEAgLTEsNSArMSw2IEBACiAvKiBIb3N0IEFQIGRyaXZlciBJbmZvIEZyYW1lIHByb2Nlc3NpbmcgKHBhcnQgb2YgaG9zdGFwLm8gbW9kdWxlKSAqLwogCisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCBjNDBmZGY0Li4zZjJiZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0yLDYgKzIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgpAQCAtMTYzOCw3ICsxNjM5LDcgQEAKIAltZW1zZXQoJnNjYW5fcmVxLCAwLCBzaXplb2Yoc2Nhbl9yZXEpKTsKIAlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBjcHVfdG9fbGUxNihsb2NhbC0+Y2hhbm5lbF9tYXNrICYKIAkJCQkJICAgIGxvY2FsLT5zY2FuX2NoYW5uZWxfbWFzayk7Ci0Jc2Nhbl9yZXEudHhyYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKKwlzY2FuX3JlcS50eHJhdGUgPSBjcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKIAlpZiAoc3NpZCkgewogCQlpZiAoc3NpZF9sZW4gPiAzMikKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY2OCw3ICsxNjY5LDcgQEAKIAltZW1zZXQoJnNjYW5fcmVxLCAwLCBzaXplb2Yoc2Nhbl9yZXEpKTsKIAlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBjcHVfdG9fbGUxNihsb2NhbC0+Y2hhbm5lbF9tYXNrICYKIAkJCQkJICAgIGxvY2FsLT5zY2FuX2NoYW5uZWxfbWFzayk7Ci0Jc2Nhbl9yZXEudHhyYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKKwlzY2FuX3JlcS50eHJhdGUgPSBjcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKIAogCS8qIEZJWDoKIAkgKiBJdCBzZWVtcyB0byBiZSBlbm91Z2ggdG8gc2V0IHJvYW1pbmcgbW9kZSBmb3IgYSBzaG9ydCBtb21lbnQgdG8KQEAgLTI1MTQsNyArMjUxNSw3IEBACiAJCXUxNiByYXRlOwogCiAJCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwotCQlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4M2ZmZik7CisJCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KDB4M2ZmZik7CiAJCXN3aXRjaCAodmFsdWUpIHsKIAkJY2FzZSAxOiByYXRlID0gSEZBMzg0WF9SQVRFU18xTUJQUzsgYnJlYWs7CiAJCWNhc2UgMjogcmF0ZSA9IEhGQTM4NFhfUkFURVNfMk1CUFM7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwppbmRleCAwMmEzMTJjLi42ZmUxMjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC01NDMsNyArNTQyLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUocngtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdShyeC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHJ4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUocngtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01NzAsNyArNTcwLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUodHgtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdSh0eC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHR4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUodHgtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01OTMsMzcgKzU5NCwxNiBAQAogfQogCiAKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKQogewotCWludCBoZHJsZW4gPSAyNDsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmIGllZWU4MDIxMV9oYXNfYTQgKGZjKSkKKwkJcmV0dXJuIDMwOyAvKiBBZGRyNCAqLworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19jdHMoZmMpIHx8IGllZWU4MDIxMV9pc19hY2soZmMpKQorCQlyZXR1cm4gMTA7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChmYykpCisJCXJldHVybiAxNjsKIAotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IDMwOyAvKiBBZGRyNCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWhkcmxlbiA9IDE2OwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGhkcmxlbjsKLX0KLQotCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKLQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZpZmFjZS0+c3RhdHM7CisJcmV0dXJuIDI0OwogfQogCiAKQEAgLTgzNSw2ICs4MTUsNDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9vcHMpOwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tZ210X25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiB2b2lkIGhvc3RhcF9zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbG9jYWxfaW5mb190ICpsb2NhbCwKIAkJICAgICAgaW50IHR5cGUpCiB7CkBAIC04NDQsMzcgKzg2NCwzMSBAQAogCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKiBrZXJuZWwgY2FsbGJhY2tzICovCi0JZGV2LT5nZXRfc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzOwogCWlmIChpZmFjZSkgewogCQkvKiBDdXJyZW50bHksIHdlIHBvaW50IHRvIHRoZSBwcm9wZXIgc3B5X2RhdGEgb25seSBvbgogCQkgKiB0aGUgbWFpbl9kZXYuIFRoaXMgY291bGQgYmUgZml4ZWQuIEplYW4gSUkgKi8KIAkJaWZhY2UtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmaWZhY2UtPnNweV9kYXRhOwogCQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmaWZhY2UtPndpcmVsZXNzX2RhdGE7CiAJfQotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCQkoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZob3N0YXBfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5kb19pb2N0bCA9IGhvc3RhcF9pb2N0bDsKLQlkZXYtPm9wZW4gPSBwcmlzbTJfb3BlbjsKLQlkZXYtPnN0b3AgPSBwcmlzbTJfY2xvc2U7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBwcmlzbTJfc2V0X21hY19hZGRyZXNzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBwcmlzbTJfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBwcmlzbTJfdHhfdGltZW91dDsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmhvc3RhcF9pd19oYW5kbGVyX2RlZjsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAotCWlmICh0eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfQVApIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfbWdtdF9zdGFydF94bWl0OworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBIT1NUQVBfSU5URVJGQUNFX0FQOgorCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21nbXRfbmV0ZGV2X29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7Ci0JfSBlbHNlIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfZGF0YV9zdGFydF94bWl0OworCQlicmVhazsKKwljYXNlIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSOgorCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CS8qIHVzZSBtYWluIHJhZGlvIGRldmljZSBxdWV1ZSAqLworCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21hc3Rlcl9vcHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbmV0ZGV2X29wczsKIAl9CiAKIAlkZXYtPm10dSA9IGxvY2FsLT5tdHU7Ci0JaWYgKHR5cGUgIT0gSE9TVEFQX0lOVEVSRkFDRV9NQVNURVIpIHsKLQkJLyogdXNlIG1haW4gcmFkaW8gZGV2aWNlIHF1ZXVlICovCi0JCWRldi0+dHhfcXVldWVfbGVuID0gMDsKLQl9CisKIAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZwcmlzbTJfZXRodG9vbF9vcHMpOwogCkBAIC0xMTI0LDcgKzExMzgsNiBAQAogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF9yeF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF90eF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfODAyMTFfZ2V0X2hkcmxlbik7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF9nZXRfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0dXBfZGV2KTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9zZXRfaG9zdGFwZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCmluZGV4IDRkOGQ1MWEzLi4zZDIzODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaApAQCAtNjg0LDcgKzY4NCw2IEBACiAJdTE2IGNoYW5uZWxfbWFzazsgLyogbWFzayBvZiBhbGxvd2VkIGNoYW5uZWxzICovCiAJdTE2IHNjYW5fY2hhbm5lbF9tYXNrOyAvKiBtYXNrIG9mIGNoYW5uZWxzIHRvIGJlIHNjYW5uZWQgKi8KIAlzdHJ1Y3QgY29tbV90YWxsaWVzX3N1bXMgY29tbV90YWxsaWVzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAlpbnQgaXdfbW9kZTsgLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KIAlpbnQgcHNldWRvX2FkaG9jOyAvKiAwOiBJV19NT0RFX0FESE9DIGlzIHJlYWwgODAyLjExIGNvbXBsaWFudCBJQlNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKaW5kZXggM2Q1Y2M0NC4uODVjYzc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZwpAQCAtMTUwLDYgKzE1MCw3IEBACiAKIGNvbmZpZyBMSUJJUFcKIAl0cmlzdGF0ZQorCWRlcGVuZHMgb24gUENJICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fQVJDNApAQCAtMTg1LDcgKzE4Niw3IEBACiAJICAlIGVjaG8gMHgwMDAwMEZGTyA+IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKIAogCSAgRm9yIGEgbGlzdCBvZiB2YWx1ZXMgeW91IGNhbiBhc3NpZ24gdG8gZGVidWdfbGV2ZWwsIHlvdQotCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiA8bmV0L2llZWU4MDIxMS5oPgorCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiBpZWVlODAyMTEuaAogCiAJICBJZiB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gZGVidWcgb3IgZGV2ZWxvcCB0aGUgbGliaXB3CiAJICBjb21wb25lbnQsIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHNheSBOIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDc1NWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApAQCAtMCwwICsxLDEwODcgQEAKKy8qCisgKiBNZXJnZWQgd2l0aCBtYWlubGluZSBpZWVlODAyMTEuaCBpbiBBdWcgMjAwNC4gIE9yaWdpbmFsIGllZWU4MDJfMTEKKyAqIHJlbWFpbnMgY29weXJpZ2h0IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzCisgKgorICogUG9ydGlvbnMgb2YgdGhlIG1lcmdlZCBjb2RlIGFyZSBiYXNlZCBvbiBIb3N0IEFQIChzb2Z0d2FyZSB3aXJlbGVzcworICogTEFOIGFjY2VzcyBwb2ludCkgZHJpdmVyIGZvciBJbnRlcnNpbCBQcmlzbTIvMi41LzMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsIFNTSCBDb21tdW5pY2F0aW9ucyBTZWN1cml0eSBDb3JwIGFuZCBKb3VuaSBNYWxpbmVuCisgKiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIEFkYXB0aW9uIHRvIGEgZ2VuZXJpYyBJRUVFIDgwMi4xMSBzdGFjayBieSBKYW1lcyBLZXRyZW5vcworICogPGprZXRyZW5vQGxpbnV4LmludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIFNlZSBSRUFETUUgYW5kIENPUFlJTkcgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogQVBJIFZlcnNpb24gSGlzdG9yeQorICogMS4wLnggLS0gSW5pdGlhbCB2ZXJzaW9uCisgKiAxLjEueCAtLSBBZGRlZCByYWRpb3RhcCwgUW9TLCBUSU0sIGllZWU4MDIxMV9nZW8gQVBJcywKKyAqICAgICAgICAgIHZhcmlvdXMgc3RydWN0dXJlIGNoYW5nZXMsIGFuZCBjcnlwdG8gQVBJIGluaXQgbWV0aG9kCisgKi8KKyNpZm5kZWYgSUVFRTgwMjExX0gKKyNkZWZpbmUgSUVFRTgwMjExX0gKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgkvKiBFVEhfQUxFTiAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBBUlJBWV9TSVpFICovCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKworI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgorCisjZGVmaW5lIElFRUU4MDIxMV9WRVJTSU9OICJnaXQtMS4xLjEzIgorCisjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTgkJMjMwNAorLyogTWF4aW11bSBzaXplIGZvciB0aGUgTUEtVU5JVERBVEEgcHJpbWl0aXZlLCA4MDIuMTEgc3RhbmRhcmQgc2VjdGlvbgorICAgNi4yLjEuMS4yLgorCisgICBUaGUgZmlndXJlIGluIHNlY3Rpb24gNy4xLjIgc3VnZ2VzdHMgYSBib2R5IHNpemUgb2YgdXAgdG8gMjMxMgorICAgYnl0ZXMgaXMgYWxsb3dlZCwgd2hpY2ggaXMgYSBiaXQgY29uZnVzaW5nLCBJIHN1c3BlY3QgdGhpcworICAgcmVwcmVzZW50cyB0aGUgMjMwNCBieXRlcyBvZiByZWFsIGRhdGEsIHBsdXMgYSBwb3NzaWJsZSA4IGJ5dGVzIG9mCisgICBXRVAgSVYgYW5kIElDVi4gKHRoaXMgaW50ZXJwcmV0YXRpb24gc3VnZ2VzdGVkIGJ5IFJhbWlybyBCYXJyZWlybykgKi8KKworI2RlZmluZSBJRUVFODAyMTFfMUFERFJfTEVOIDEwCisjZGVmaW5lIElFRUU4MDIxMV8yQUREUl9MRU4gMTYKKyNkZWZpbmUgSUVFRTgwMjExXzNBRERSX0xFTiAyNAorI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOIDMwCisjZGVmaW5lIElFRUU4MDIxMV9GQ1NfTEVOICAgIDQKKyNkZWZpbmUgSUVFRTgwMjExX0hMRU4JCQkoSUVFRTgwMjExXzRBRERSX0xFTikKKyNkZWZpbmUgSUVFRTgwMjExX0ZSQU1FX0xFTgkJKElFRUU4MDIxMV9EQVRBX0xFTiArIElFRUU4MDIxMV9ITEVOKQorCisjZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQorI2RlZmluZQlNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCisKKy8qIFFPUyBjb250cm9sICovCisjZGVmaW5lIElFRUU4MDIxMV9RQ1RMX1RJRAkJMHgwMDBGCisKKy8qIGRlYnVnIG1hY3JvcyAqLworCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRworZXh0ZXJuIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWw7CisjZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCitkbyB7IGlmIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCisgIHByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTE6ICVjICVzICIgZm10LCBcCisgICAgICAgICBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKK3sKKwlyZXR1cm4gKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIGxldmVsKSAmJiBuZXRfcmF0ZWxpbWl0KCk7Cit9CisjZWxzZQorI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JhdGVsaW1pdF9kZWJ1Zyh1MzIgbGV2ZWwpCit7CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KKworLyoKKyAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOgorICoKKyAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKKyAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKKyAqCisgKiAjZGVmaW5lIElFRUU4MDIxMV9ETF94eHh4IFZBTFVFCisgKgorICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCisgKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCisgKgorICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSUVFRTgwMjExX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCisgKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAorICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KKyAqCisgKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCisgKgorICogJSBjYXQgL3Byb2MvbmV0L2llZWU4MDIxMS9kZWJ1Z19sZXZlbAorICoKKyAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaWVlZTgwMjExX2RlYnVnX2xldmVsIGFycmF5LgorICoKKyAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pZWVlODAyMTEgdGhlbiB5b3UgZG8gbm90IGhhdmUKKyAqIENPTkZJR19MSUJJUFdfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCisgKgorICovCisKKyNkZWZpbmUgSUVFRTgwMjExX0RMX0lORk8gICAgICAgICAgKDE8PDApCisjZGVmaW5lIElFRUU4MDIxMV9ETF9XWCAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBJRUVFODAyMTFfRExfU0NBTiAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSUVFRTgwMjExX0RMX1NUQVRFICAgICAgICAgKDE8PDMpCisjZGVmaW5lIElFRUU4MDIxMV9ETF9NR01UICAgICAgICAgICgxPDw0KQorI2RlZmluZSBJRUVFODAyMTFfRExfRlJBRyAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgSUVFRTgwMjExX0RMX0RST1AgICAgICAgICAgKDE8PDcpCisKKyNkZWZpbmUgSUVFRTgwMjExX0RMX1RYICAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIElFRUU4MDIxMV9ETF9SWCAgICAgICAgICAgICgxPDw5KQorI2RlZmluZSBJRUVFODAyMTFfRExfUU9TICAgICAgICAgICAoMTw8MzEpCisKKyNkZWZpbmUgSUVFRTgwMjExX0VSUk9SKGYsIGEuLi4pIHByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExOiAiIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9XQVJOSU5HKGYsIGEuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgImllZWU4MDIxMTogIiBmLCAjIyBhKQorI2RlZmluZSBJRUVFODAyMTFfREVCVUdfSU5GTyhmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfSU5GTywgZiwgIyMgYSkKKworI2RlZmluZSBJRUVFODAyMTFfREVCVUdfV1goZiwgYS4uLikgICAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfV1gsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9TQ0FOLCBmLCAjIyBhKQorI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU1RBVEUoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU1RBVEUsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19NR01UKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX01HTVQsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19GUkFHKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0ZSQUcsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19EUk9QKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0RST1AsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19UWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UWCwgZiwgIyMgYSkKKyNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1JYKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JYLCBmLCAjIyBhKQorI2RlZmluZSBJRUVFODAyMTFfREVCVUdfUU9TKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1FPUywgZiwgIyMgYSkKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEX0VUSEVSICovCisKKyNpZm5kZWYgV0lSRUxFU1NfU1BZCisjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogZW5hYmxlIGl3c3B5IHN1cHBvcnQgKi8KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CS8qIG5ldyBkcml2ZXIgQVBJICovCisKKyNkZWZpbmUgRVRIX1BfUFJFQVVUSCAweDg4QzcJLyogSUVFRSA4MDIuMTFpIHByZS1hdXRoZW50aWNhdGlvbiAqLworCisjaWZuZGVmIEVUSF9QXzgwMjExX1JBVworI2RlZmluZSBFVEhfUF84MDIxMV9SQVcgKEVUSF9QX0VDT05FVCArIDEpCisjZW5kaWYKKworLyogSUVFRSA4MDIuMTEgZGVmaW5lcyAqLworCisjZGVmaW5lIFA4MDIxMV9PVUlfTEVOIDMKKworc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkciB7CisKKwl1OCBkc2FwOwkJLyogYWx3YXlzIDB4QUEgKi8KKwl1OCBzc2FwOwkJLyogYWx3YXlzIDB4QUEgKi8KKwl1OCBjdHJsOwkJLyogYWx3YXlzIDB4MDMgKi8KKwl1OCBvdWlbUDgwMjExX09VSV9MRU5dOwkvKiBvcmdhbml6YXRpb25hbCB1bml2ZXJzYWwgaWQgKi8KKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgU05BUF9TSVpFIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyKQorCisjZGVmaW5lIFdMQU5fRkNfR0VUX1ZFUlMoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfVkVSUykKKyNkZWZpbmUgV0xBTl9GQ19HRVRfVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkKKyNkZWZpbmUgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpCisKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSQUcoc2VxKSAoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9GUkFHKQorI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRKHNlcSkgICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCisKKyNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCAoMTw8MCkKKyNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1JTU0kgKDE8PDEpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSAoMTw8MikKKyNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1JBVEUgKDE8PDMpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19XRU1BU0sgMHg3CisKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OICAgICgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OICAgKDE8PDEpCisKKyNkZWZpbmUgSUVFRTgwMjExXzI0R0haX0JBTkQgICAgICgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfQkFORCAgICAgKDE8PDEpCisKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzFNQgkJICAgICAgICAweDAyCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8yTUIJCSAgICAgICAgMHgwNAorI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CCQkgICAgICAgIDB4MEIKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzExTUIJCSAgICAgICAgMHgxNgorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQgkJICAgICAgICAweDBDCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CCQkgICAgICAgIDB4MTIKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CCQkweDE4CisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQgkJMHgyNAorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIJCTB4MzAKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CCQkweDQ4CisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQgkJMHg2MAorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUIJCTB4NkMKKyNkZWZpbmUgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSwkJMHg4MAorCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSwkJKDE8PDApCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSwkJKDE8PDEpCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSwkJKDE8PDIpCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CX01BU0sJCSgxPDwzKQorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLCQkoMTw8NCkKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSwkJKDE8PDUpCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLCQkoMTw8NikKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0sJCSgxPDw3KQorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSwkJKDE8PDgpCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLCQkoMTw8OSkKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0sJCSgxPDwxMCkKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0sJCSgxPDwxMSkKKworI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVTX01BU0sJICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfQkFTSUNfUkFURVNfTUFTSwkoSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSykKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19ERUZBVUxUX1JBVEVTX01BU0sJKElFRUU4MDIxMV9DQ0tfQkFTSUNfUkFURVNfTUFTSyB8IFwKKyAgICAgICAgSUVFRTgwMjExX0NDS19SQVRFXzVNQl9NQVNLIHwgXAorICAgICAgICBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLKQorCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVTX01BU0sJCTB4MDAwMDBGRjAKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyB8IFwKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyB8IFwKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSykKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLCShJRUVFODAyMTFfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sgIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLKQorI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLIChJRUVFODAyMTFfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLKQorCisjZGVmaW5lIElFRUU4MDIxMV9OVU1fT0ZETV9SQVRFUwkgICAgOAorI2RlZmluZSBJRUVFODAyMTFfTlVNX0NDS19SQVRFUwkgICAgICAgICAgICA0CisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1NISUZUX01BU0tfQSAgICAgICAgIDQKKworLyogTk9URTogVGhpcyBkYXRhIGlzIGZvciBzdGF0aXN0aWNhbCBwdXJwb3Nlczsgbm90IGFsbCBoYXJkd2FyZSBwcm92aWRlcyB0aGlzCisgKiAgICAgICBpbmZvcm1hdGlvbiBmb3IgZnJhbWVzIHJlY2VpdmVkLgorICogICAgICAgRm9yIGllZWU4MDIxMV9yeF9tZ3QsIHlvdSBuZWVkIHRvIHNldCBhdCBsZWFzdCB0aGUgJ2xlbicgcGFyYW1ldGVyLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHsKKwl1MzIgbWFjX3RpbWU7CisJczggcnNzaTsKKwl1OCBzaWduYWw7CisJdTggbm9pc2U7CisJdTE2IHJhdGU7CQkvKiBpbiAxMDAga2JwcyAqLworCXU4IHJlY2VpdmVkX2NoYW5uZWw7CisJdTggY29udHJvbDsKKwl1OCBtYXNrOworCXU4IGZyZXE7CisJdTE2IGxlbjsKKwl1NjQgdHNmOworCXUzMiBiZWFjb25fdGltZTsKK307CisKKy8qIElFRUUgODAyLjExIHJlcXVpcmVzIHRoYXQgU1RBIHN1cHBvcnRzIGNvbmN1cnJlbnQgcmVjZXB0aW9uIG9mIGF0IGxlYXN0CisgKiB0aHJlZSBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBkZWZpbmUgY2FuIGJlIGluY3JlYXNlZCB0byBzdXBwb3J0IG1vcmUKKyAqIGNvbmN1cnJlbnQgZnJhbWVzLCBidXQgaXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgZWFjaCBlbnRyeSBjYW4gY29uc3VtZSBhYm91dAorICogMiBrQiBvZiBSQU0gYW5kIGluY3JlYXNpbmcgY2FjaGUgc2l6ZSB3aWxsIHNsb3cgZG93biBmcmFtZSByZWFzc2VtYmx5LiAqLworI2RlZmluZSBJRUVFODAyMTFfRlJBR19DQUNIRV9MRU4gNAorCitzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgZmlyc3RfZnJhZ190aW1lOworCXVuc2lnbmVkIGludCBzZXE7CisJdW5zaWduZWQgaW50IGxhc3RfZnJhZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IHNyY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBkc3RfYWRkcltFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9mcmFtZXM7CisJdW5zaWduZWQgaW50IHR4X211bHRpY2FzdF9mcmFtZXM7CisJdW5zaWduZWQgaW50IHR4X2ZyYWdtZW50czsKKwl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9vY3RldHM7CisJdW5zaWduZWQgaW50IHR4X211bHRpY2FzdF9vY3RldHM7CisJdW5zaWduZWQgaW50IHR4X2RlZmVycmVkX3RyYW5zbWlzc2lvbnM7CisJdW5zaWduZWQgaW50IHR4X3NpbmdsZV9yZXRyeV9mcmFtZXM7CisJdW5zaWduZWQgaW50IHR4X211bHRpcGxlX3JldHJ5X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfcmV0cnlfbGltaXRfZXhjZWVkZWQ7CisJdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzOworCXVuc2lnbmVkIGludCByeF91bmljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgcnhfbXVsdGljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgcnhfZnJhZ21lbnRzOworCXVuc2lnbmVkIGludCByeF91bmljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgcnhfbXVsdGljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgcnhfZmNzX2Vycm9yczsKKwl1bnNpZ25lZCBpbnQgcnhfZGlzY2FyZHNfbm9fYnVmZmVyOworCXVuc2lnbmVkIGludCB0eF9kaXNjYXJkc193cm9uZ19zYTsKKwl1bnNpZ25lZCBpbnQgcnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZTsKKwl1bnNpZ25lZCBpbnQgcnhfbWVzc2FnZV9pbl9tc2dfZnJhZ21lbnRzOworCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX2JhZF9tc2dfZnJhZ21lbnRzOworfTsKKworc3RydWN0IGllZWU4MDIxMV9kZXZpY2U7CisKKyNkZWZpbmUgU0VDX0tFWV8xCQkoMTw8MCkKKyNkZWZpbmUgU0VDX0tFWV8yCQkoMTw8MSkKKyNkZWZpbmUgU0VDX0tFWV8zCQkoMTw8MikKKyNkZWZpbmUgU0VDX0tFWV80CQkoMTw8MykKKyNkZWZpbmUgU0VDX0FDVElWRV9LRVkJCSgxPDw0KQorI2RlZmluZSBTRUNfQVVUSF9NT0RFCQkoMTw8NSkKKyNkZWZpbmUgU0VDX1VOSUNBU1RfR1JPVVAJKDE8PDYpCisjZGVmaW5lIFNFQ19MRVZFTAkJKDE8PDcpCisjZGVmaW5lIFNFQ19FTkFCTEVECQkoMTw8OCkKKyNkZWZpbmUgU0VDX0VOQ1JZUFQJCSgxPDw5KQorCisjZGVmaW5lIFNFQ19MRVZFTF8wCQkwCS8qIE5vbmUgKi8KKyNkZWZpbmUgU0VDX0xFVkVMXzEJCTEJLyogV0VQIDQwIGFuZCAxMDQgYml0ICovCisjZGVmaW5lIFNFQ19MRVZFTF8yCQkyCS8qIExldmVsIDEgKyBUS0lQICovCisjZGVmaW5lIFNFQ19MRVZFTF8yX0NLSVAJMwkvKiBMZXZlbCAxICsgQ0tJUCAqLworI2RlZmluZSBTRUNfTEVWRUxfMwkJNAkvKiBMZXZlbCAyICsgQ0NNUCAqLworCisjZGVmaW5lIFNFQ19BTEdfTk9ORQkJMAorI2RlZmluZSBTRUNfQUxHX1dFUAkJMQorI2RlZmluZSBTRUNfQUxHX1RLSVAJCTIKKyNkZWZpbmUgU0VDX0FMR19DQ01QCQkzCisKKyNkZWZpbmUgV0VQX0tFWVMJCTQKKyNkZWZpbmUgV0VQX0tFWV9MRU4JCTEzCisjZGVmaW5lIFNDTV9LRVlfTEVOCQkzMgorI2RlZmluZSBTQ01fVEVNUE9SQUxfS0VZX0xFTkdUSAkxNgorCitzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHsKKwl1MTYgYWN0aXZlX2tleToyLCBlbmFibGVkOjEsIHVuaWNhc3RfdXNlc19ncm91cDoxLCBlbmNyeXB0OjE7CisJdTggYXV0aF9tb2RlOworCXU4IGVuY29kZV9hbGdbV0VQX0tFWVNdOworCXU4IGtleV9zaXplc1tXRVBfS0VZU107CisJdTgga2V5c1tXRVBfS0VZU11bU0NNX0tFWV9MRU5dOworCXU4IGxldmVsOworCXUxNiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorCisgODAyLjExIGRhdGEgZnJhbWUgZnJvbSBBUAorCisgICAgICAsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK0J5dGVzIHwgIDIgICB8ICAyICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgMiAgIHwgMC4uMjMxMiB8ICAgNCAgfAorICAgICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18CitEZXNjLiB8IGN0cmwgfCBkdXJhIHwgIERBL1JBICB8ICAgVEEgICAgfCAgICBTQSAgIHwgU2VxdSB8ICBmcmFtZSAgfCAgZmNzIHwKKyAgICAgIHwgICAgICB8IHRpb24gfCAoQlNTSUQpIHwgICAgICAgICB8ICAgICAgICAgfCBlbmNlIHwgIGRhdGEgICB8ICAgICAgfAorICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisKK1RvdGFsOiAyOC0yMzQwIGJ5dGVzCisKKyovCisKKyNkZWZpbmUgQkVBQ09OX1BST0JFX1NTSURfSURfUE9TSVRJT04gMTIKKworc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IGFkZHI0W0VUSF9BTEVOXTsKKwl1OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBwYXlsb2FkWzBdOworCV9fbGUxNiBxb3NfY3RsOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IHsKKwl1OCBpZDsKKwl1OCBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogVGhlc2UgYXJlIHRoZSBkYXRhIHR5cGVzIHRoYXQgY2FuIG1ha2UgdXAgbWFuYWdlbWVudCBwYWNrZXRzCisgKgorCXUxNiBhdXRoX2FsZ29yaXRobTsKKwl1MTYgYXV0aF9zZXF1ZW5jZTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBjYXBhYmlsaXR5OworCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJc3RydWN0IHsKKwkJdTE2IGFzc29jaWF0aW9uX2lkOjE0LCByZXNlcnZlZDoyOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXUzMiB0aW1lX3N0YW1wWzJdOworCXUxNiByZWFzb247CisJdTE2IHN0YXR1czsKKyovCisKK3N0cnVjdCBpZWVlODAyMTFfYXV0aCB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBhbGdvcml0aG07CisJX19sZTE2IHRyYW5zYWN0aW9uOworCV9fbGUxNiBzdGF0dXM7CisJLyogY2hhbGxlbmdlICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBtb2RlOworCXU4IGNoYW5uZWw7CisJdTggY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9hY3Rpb24geworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwl1OCBjYXRlZ29yeTsKKwl1OCBhY3Rpb247CisJdW5pb24geworCQlzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbl9leGNoYW5nZSB7CisJCQl1OCB0b2tlbjsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKKwkJfSBleGNoYW5nZTsKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCBjaGFubmVsX3N3aXRjaDsKKworCX0gZm9ybWF0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgcmVhc29uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEFsaWFzIGRlYXV0aCBmb3IgZGlzYXNzb2MgKi8KKyNkZWZpbmUgaWVlZTgwMjExX2RlYXV0aCBpZWVlODAyMTFfZGlzYXNzb2MKKworc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMzIgdGltZV9zdGFtcFsyXTsKKwlfX2xlMTYgYmVhY29uX2ludGVydmFsOworCV9fbGUxNiBjYXBhYmlsaXR5OworCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgRkggcGFyYW1zLCBEUyBwYXJhbXMsCisJICogQ0YgcGFyYW1zLCBJQlNTIHBhcmFtcywgVElNIChpZiBiZWFjb24pLCBSU04gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQWxpYXMgYmVhY29uIGZvciBwcm9iZV9yZXNwb25zZSAqLworI2RlZmluZSBpZWVlODAyMTFfYmVhY29uIGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQorCitzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgUlNOICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBjYXBhYmlsaXR5OworCV9fbGUxNiBzdGF0dXM7CisJX19sZTE2IGFpZDsKKwkvKiBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV90eGIgeworCXU4IG5yX2ZyYWdzOworCXU4IGVuY3J5cHRlZDsKKwl1OCBydHNfaW5jbHVkZWQ7CisJdTggcmVzZXJ2ZWQ7CisJdTE2IGZyYWdfc2l6ZTsKKwl1MTYgcGF5bG9hZF9zaXplOworCXN0cnVjdCBza19idWZmICpmcmFnbWVudHNbMF07Cit9OworCisvKiBTV0VFUCBUQUJMRSBFTlRSSUVTIE5VTUJFUiAqLworI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVMJCSAgNDIKKyNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTX1BFUl9QQUNLRVQgIDcKKy8qIE1BWF9SQVRFU19MRU5HVEggbmVlZHMgdG8gYmUgMTIuICBUaGUgc3BlYyBzYXlzIDgsIGFuZCBtYW55IEFQcworICogb25seSB1c2UgOCwgYW5kIHRoZW4gdXNlIGV4dGVuZGVkIHJhdGVzIGZvciB0aGUgcmVtYWluaW5nIHN1cHBvcnRlZAorICogcmF0ZXMuICBPdGhlciBBUHMsIGhvd2V2ZXIsIHN0aWNrIGFsbCBvZiB0aGVpciBzdXBwb3J0ZWQgcmF0ZXMgb24gdGhlCisgKiBtYWluIHJhdGVzIGluZm9ybWF0aW9uIGVsZW1lbnQuLi4gKi8KKyNkZWZpbmUgTUFYX1JBVEVTX0xFTkdUSCAgICAgICAgICAgICAgICAgICgodTgpMTIpCisjZGVmaW5lIE1BWF9SQVRFU19FWF9MRU5HVEggICAgICAgICAgICAgICAoKHU4KTE2KQorI2RlZmluZSBNQVhfTkVUV09SS19DT1VOVCAgICAgICAgICAgICAgICAgIDEyOAorCisjZGVmaW5lIENSQ19MRU5HVEggICAgICAgICAgICAgICAgIDRVCisKKyNkZWZpbmUgTUFYX1dQQV9JRV9MRU4gNjQKKworI2RlZmluZSBORVRXT1JLX0hBU19PRkRNICAgICAgICgxPDwxKQorI2RlZmluZSBORVRXT1JLX0hBU19DQ0sgICAgICAgICgxPDwyKQorCisvKiBRb1Mgc3RydWN0dXJlICovCisjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTICAgICAgKDE8PDMpCisjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTiAgICAgKDE8PDQpCisjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19NQVNLICAgICAgICAgICAgKE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTIHwgXAorCQkJCQkgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OKQorCisvKiA4MDIuMTFoICovCisjZGVmaW5lIE5FVFdPUktfSEFTX1BPV0VSX0NPTlNUUkFJTlQgICAgKDE8PDUpCisjZGVmaW5lIE5FVFdPUktfSEFTX0NTQSAgICAgICAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIE5FVFdPUktfSEFTX1FVSUVUICAgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIE5FVFdPUktfSEFTX0lCU1NfREZTICAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIE5FVFdPUktfSEFTX1RQQ19SRVBPUlQgICAgICAgICAgKDE8PDkpCisKKyNkZWZpbmUgTkVUV09SS19IQVNfRVJQX1ZBTFVFICAgICAgICAgICAoMTw8MTApCisKKyNkZWZpbmUgUU9TX1FVRVVFX05VTSAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFFPU19PVUlfTEVOICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBRT1NfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUU9TX0VMRU1FTlRfSUQgICAgICAgICAgICAgICAgICAyMjEKKyNkZWZpbmUgUU9TX09VSV9JTkZPX1NVQl9UWVBFICAgICAgICAgICAwCisjZGVmaW5lIFFPU19PVUlfUEFSQU1fU1VCX1RZUEUgICAgICAgICAgMQorI2RlZmluZSBRT1NfVkVSU0lPTl8xICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUU9TX0FJRlNOX01JTl9WQUxVRSAgICAgICAgICAgICAyCisKK3N0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgeworCXU4IGVsZW1lbnRJRDsKKwl1OCBsZW5ndGg7CisJdTggcXVpW1FPU19PVUlfTEVOXTsKKwl1OCBxdWlfdHlwZTsKKwl1OCBxdWlfc3VidHlwZTsKKwl1OCB2ZXJzaW9uOworCXU4IGFjX2luZm87Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIHsKKwl1OCBhY2lfYWlmc247CisJdTggZWN3X21pbl9tYXg7CisJX19sZTE2IHR4X29wX2xpbWl0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcl9pbmZvIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IGluZm9fZWxlbWVudDsKKwl1OCByZXNlcnZlZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgYWNfcGFyYW1zX3JlY29yZFtRT1NfUVVFVUVfTlVNXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHsKKwlfX2xlMTYgY3dfbWluW1FPU19RVUVVRV9OVU1dOworCV9fbGUxNiBjd19tYXhbUU9TX1FVRVVFX05VTV07CisJdTggYWlmc1tRT1NfUVVFVUVfTlVNXTsKKwl1OCBmbGFnW1FPU19RVUVVRV9OVU1dOworCV9fbGUxNiB0eF9vcF9saW1pdFtRT1NfUVVFVUVfTlVNXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisJaW50IGFjdGl2ZTsKKwlpbnQgc3VwcG9ydGVkOworCXU4IHBhcmFtX2NvdW50OworCXU4IG9sZF9wYXJhbV9jb3VudDsKK307CisKK3N0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgeworCXU4IHRpbV9jb3VudDsKKwl1OCB0aW1fcGVyaW9kOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHsJCQkJLyogaWVlZTgwMjExX2Jhc2ljX3JlcG9ydC5tYXAgKi8KKwlJRUVFODAyMTFfQkFTSUNfTUFQX0JTUyA9ICgxIDw8IDApLAorCUlFRUU4MDIxMV9CQVNJQ19NQVBfT0ZETSA9ICgxIDw8IDEpLAorCUlFRUU4MDIxMV9CQVNJQ19NQVBfVU5JREVOVElGSUVEID0gKDEgPDwgMiksCisJSUVFRTgwMjExX0JBU0lDX01BUF9SQURBUiA9ICgxIDw8IDMpLAorCUlFRUU4MDIxMV9CQVNJQ19NQVBfVU5NRUFTVVJFRCA9ICgxIDw8IDQpLAorCS8qIEJpdHMgNS03IGFyZSByZXNlcnZlZCAqLworCit9Oworc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgeworCXU4IGNoYW5uZWw7CisJX19sZTY0IHN0YXJ0X3RpbWU7CisJX19sZTE2IGR1cmF0aW9uOworCXU4IG1hcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsJCQkJLyogaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QubW9kZSAqLworCS8qIEJpdCAwIGlzIHJlc2VydmVkICovCisJSUVFRTgwMjExX01FQVNVUkVNRU5UX0VOQUJMRSA9ICgxIDw8IDEpLAorCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVFVRVNUID0gKDEgPDwgMiksCisJSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUE9SVCA9ICgxIDw8IDMpLAorCS8qIEJpdHMgNC03IGFyZSByZXNlcnZlZCAqLworfTsKKworZW51bSB7CisJSUVFRTgwMjExX1JFUE9SVF9CQVNJQyA9IDAsCS8qIHJlcXVpcmVkICovCisJSUVFRTgwMjExX1JFUE9SVF9DQ0EgPSAxLAkvKiBvcHRpb25hbCAqLworCUlFRUU4MDIxMV9SRVBPUlRfUlBJID0gMiwJLyogb3B0aW9uYWwgKi8KKwkvKiAzLTI1NSByZXNlcnZlZCAqLworfTsKKworc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgeworCXU4IGNoYW5uZWw7CisJX19sZTY0IHN0YXJ0X3RpbWU7CisJX19sZTE2IGR1cmF0aW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdCB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CisJdTggdG9rZW47CisJdTggbW9kZTsKKwl1OCB0eXBlOworCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtc1swXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcG9ydCB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CisJdTggdG9rZW47CisJdTggbW9kZTsKKwl1OCB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgYmFzaWNbMF07CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfdHBjX3JlcG9ydCB7CisJdTggdHJhbnNtaXRfcG93ZXI7CisJdTggbGlua19tYXJnaW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX21hcCB7CisJdTggY2hhbm5lbDsKKwl1OCBtYXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9pYnNzX2RmcyB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CisJdTggb3duZXJbRVRIX0FMRU5dOworCXU4IHJlY292ZXJ5X2ludGVydmFsOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9tYXAgY2hhbm5lbF9tYXBbMF07Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX2NzYSB7CisJdTggbW9kZTsKKwl1OCBjaGFubmVsOworCXU4IGNvdW50OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcXVpZXQgeworCXU4IGNvdW50OworCXU4IHBlcmlvZDsKKwl1OCBkdXJhdGlvbjsKKwl1OCBvZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIHsKKwkvKiBUaGVzZSBlbnRyaWVzIGFyZSB1c2VkIHRvIGlkZW50aWZ5IGEgdW5pcXVlIG5ldHdvcmsgKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggY2hhbm5lbDsKKwkvKiBFbnN1cmUgbnVsbC10ZXJtaW5hdGVkIGZvciBhbnkgZGVidWcgbXNncyAqLworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKwl1OCBzc2lkX2xlbjsKKworCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgcW9zX2RhdGE7CisKKwkvKiBUaGVzZSBhcmUgbmV0d29yayBzdGF0aXN0aWNzICovCisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyBzdGF0czsKKwl1MTYgY2FwYWJpbGl0eTsKKwl1OCByYXRlc1tNQVhfUkFURVNfTEVOR1RIXTsKKwl1OCByYXRlc19sZW47CisJdTggcmF0ZXNfZXhbTUFYX1JBVEVTX0VYX0xFTkdUSF07CisJdTggcmF0ZXNfZXhfbGVuOworCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOworCXU4IG1vZGU7CisJdTMyIGZsYWdzOworCXUzMiBsYXN0X2Fzc29jaWF0ZTsKKwl1MzIgdGltZV9zdGFtcFsyXTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTE2IGF0aW1fd2luZG93OworCXU4IGVycF92YWx1ZTsKKwl1OCB3cGFfaWVbTUFYX1dQQV9JRV9MRU5dOworCXNpemVfdCB3cGFfaWVfbGVuOworCXU4IHJzbl9pZVtNQVhfV1BBX0lFX0xFTl07CisJc2l6ZV90IHJzbl9pZV9sZW47CisJc3RydWN0IGllZWU4MDIxMV90aW1fcGFyYW1ldGVycyB0aW07CisKKwkvKiA4MDIuMTFoIGluZm8gKi8KKworCS8qIFBvd2VyIENvbnN0cmFpbnQgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KKwl1OCBwb3dlcl9jb25zdHJhaW50OworCisJLyogVFBDIFJlcG9ydCAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXN0cnVjdCBpZWVlODAyMTFfdHBjX3JlcG9ydCB0cGNfcmVwb3J0OworCisJLyogSUJTUyBERlMgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgYW5kIElCU1MKKwkgKiBOT1RFOiBUaGlzIGlzIHZhcmlhYmxlIGxlbmd0aCBhbmQgc28gbXVzdCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2lic3NfZGZzICppYnNzX2RmczsKKworCS8qIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCAtIG9wdGlvbmFsIGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJc3RydWN0IGllZWU4MDIxMV9jc2EgY3NhOworCisJLyogUXVpZXQgLSBvcHRpb25hbCBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXN0cnVjdCBpZWVlODAyMTFfcXVpZXQgcXVpZXQ7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitlbnVtIGllZWU4MDIxMV9zdGF0ZSB7CisJSUVFRTgwMjExX1VOSU5JVElBTElaRUQgPSAwLAorCUlFRUU4MDIxMV9JTklUSUFMSVpFRCwKKwlJRUVFODAyMTFfQVNTT0NJQVRJTkcsCisJSUVFRTgwMjExX0FTU09DSUFURUQsCisJSUVFRTgwMjExX0FVVEhFTlRJQ0FUSU5HLAorCUlFRUU4MDIxMV9BVVRIRU5USUNBVEVELAorCUlFRUU4MDIxMV9TSFVURE9XTgorfTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TQ0FOX0FHRSAoMTUgKiBIWikKKyNkZWZpbmUgREVGQVVMVF9GVFMgMjM0NgorCisjZGVmaW5lIENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MgKDE8PDApCisjZGVmaW5lIENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgKDE8PDEpCisjZGVmaW5lIENGR19JRUVFODAyMTFfUlRTICgxPDwyKQorCisjZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCAxCisjZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAxNAorI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCArIDEpCisKKyNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMIDM0CisjZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAxNjUKKyNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTIChJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgLSBcCisJCQkJICBJRUVFODAyMTFfNTJHSFpfTUlOX0NIQU5ORUwgKyAxKQorCitlbnVtIHsKKwlJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID0gKDEgPDwgMCksCisJSUVFRTgwMjExX0NIXzgwMjExSF9SVUxFUyA9ICgxIDw8IDEpLAorCUlFRUU4MDIxMV9DSF9CX09OTFkgPSAoMSA8PCAyKSwKKwlJRUVFODAyMTFfQ0hfTk9fSUJTUyA9ICgxIDw8IDMpLAorCUlFRUU4MDIxMV9DSF9VTklGT1JNX1NQUkVBRElORyA9ICgxIDw8IDQpLAorCUlFRUU4MDIxMV9DSF9SQURBUl9ERVRFQ1QgPSAoMSA8PCA1KSwKKwlJRUVFODAyMTFfQ0hfSU5WQUxJRCA9ICgxIDw8IDYpLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHsKKwl1MzIgZnJlcTsJLyogaW4gTUh6ICovCisJdTggY2hhbm5lbDsKKwl1OCBmbGFnczsKKwl1OCBtYXhfcG93ZXI7CS8qIGluIGRCbSAqLworfTsKKworc3RydWN0IGllZWU4MDIxMV9nZW8geworCXU4IG5hbWVbNF07CisJdTggYmdfY2hhbm5lbHM7CisJdTggYV9jaGFubmVsczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYmdbSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYVtJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFNdOworfTsKKworc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7CisKKwkvKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmVzICovCisJc3RydWN0IGllZWU4MDIxMV9zdGF0cyBpZWVlX3N0YXRzOworCisJc3RydWN0IGllZWU4MDIxMV9nZW8gZ2VvOworCisJLyogUHJvYmUgLyBCZWFjb24gbWFuYWdlbWVudCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19mcmVlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2xpc3Q7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrczsKKwlpbnQgc2NhbnM7CisJaW50IHNjYW5fYWdlOworCisJaW50IGl3X21vZGU7CQkvKiBvcGVyYXRpbmcgbW9kZSAoSVdfTU9ERV8qKSAqLworCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsJLyogaXdzcHkgc3VwcG9ydCAqLworCisJc3BpbmxvY2tfdCBsb2NrOworCisJaW50IHR4X2hlYWRyb29tOwkvKiBTZXQgdG8gc2l6ZSBvZiBhbnkgYWRkaXRpb25hbCByb29tIG5lZWRlZCBhdCBmcm9udAorCQkJCSAqIG9mIGFsbG9jYXRlZCBUeCBTS0JzICovCisJdTMyIGNvbmZpZzsKKworCS8qIFdFUCBhbmQgb3RoZXIgZW5jcnlwdGlvbiByZWxhdGVkIHNldHRpbmdzIGF0IHRoZSBkZXZpY2UgbGV2ZWwgKi8KKwlpbnQgb3Blbl93ZXA7CQkvKiBTZXQgdG8gMSB0byBhbGxvdyB1bmVuY3J5cHRlZCBmcmFtZXMgKi8KKworCWludCByZXNldF9vbl9rZXljaGFuZ2U7CS8qIFNldCB0byAxIGlmIHRoZSBIVyBuZWVkcyB0byBiZSByZXNldCBvbgorCQkJCSAqIFdFUCBrZXkgY2hhbmdlcyAqLworCisJLyogSWYgdGhlIGhvc3QgcGVyZm9ybXMge2VuLGRlfWNyeXB0aW9uLCB0aGVuIHNldCB0byAxICovCisJaW50IGhvc3RfZW5jcnlwdDsKKwlpbnQgaG9zdF9lbmNyeXB0X21zZHU7CisJaW50IGhvc3RfZGVjcnlwdDsKKwkvKiBob3N0IHBlcmZvcm1zIG11bHRpY2FzdCBkZWNyeXB0aW9uICovCisJaW50IGhvc3RfbWNfZGVjcnlwdDsKKworCS8qIGhvc3Qgc2hvdWxkIHN0cmlwIElWIGFuZCBJQ1YgZnJvbSBwcm90ZWN0ZWQgZnJhbWVzICovCisJLyogbWVhbmluZ2Z1bCBvbmx5IHdoZW4gaGFyZHdhcmUgZGVjcnlwdGlvbiBpcyBiZWluZyB1c2VkICovCisJaW50IGhvc3Rfc3RyaXBfaXZfaWN2OworCisJaW50IGhvc3Rfb3Blbl9mcmFnOworCWludCBob3N0X2J1aWxkX2l2OworCWludCBpZWVlODAyXzF4OwkJLyogaXMgSUVFRSA4MDIuMVggdXNlZCAqLworCisJLyogV1BBIGRhdGEgKi8KKwlpbnQgd3BhX2VuYWJsZWQ7CisJaW50IGRyb3BfdW5lbmNyeXB0ZWQ7CisJaW50IHByaXZhY3lfaW52b2tlZDsKKwlzaXplX3Qgd3BhX2llX2xlbjsKKwl1OCAqd3BhX2llOworCisJc3RydWN0IGxpYjgwMjExX2NyeXB0X2luZm8gY3J5cHRfaW5mbzsKKworCWludCBiY3J4X3N0YV9rZXk7CS8qIHVzZSBpbmRpdmlkdWFsIGtleXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBrZXlzIGV2ZW4KKwkJCQkgKiB3aXRoIFJYIG9mIGJyb2FkL211bHRpY2FzdCBmcmFtZXMgKi8KKworCS8qIEZyYWdtZW50YXRpb24gc3RydWN0dXJlcyAqLworCXN0cnVjdCBpZWVlODAyMTFfZnJhZ19lbnRyeSBmcmFnX2NhY2hlW0lFRUU4MDIxMV9GUkFHX0NBQ0hFX0xFTl07CisJdW5zaWduZWQgaW50IGZyYWdfbmV4dF9pZHg7CisJdTE2IGZ0czsJCS8qIEZyYWdtZW50YXRpb24gVGhyZXNob2xkICovCisJdTE2IHJ0czsJCS8qIFJUUyB0aHJlc2hvbGQgKi8KKworCS8qIEFzc29jaWF0aW9uIGluZm8gKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CisKKwllbnVtIGllZWU4MDIxMV9zdGF0ZSBzdGF0ZTsKKworCWludCBtb2RlOwkJLyogQSwgQiwgRyAqLworCWludCBtb2R1bGF0aW9uOwkJLyogQ0NLLCBPRkRNICovCisJaW50IGZyZXFfYmFuZDsJCS8qIDIuNEdoeiwgNS4yR2h6LCBNaXhlZCAqLworCWludCBhYmdfdHJ1ZTsJCS8qIEFCRyBmbGFnICAgICAgICAgICAgICAqLworCisJaW50IHBlcmZlY3RfcnNzaTsKKwlpbnQgd29yc3RfcnNzaTsKKworCXUxNiBwcmV2X3NlcV9jdGw7CS8qIHVzZWQgdG8gZHJvcCBkdXBsaWNhdGUgZnJhbWVzICovCisKKwkvKiBDYWxsYmFjayBmdW5jdGlvbnMgKi8KKwl2b2lkICgqc2V0X3NlY3VyaXR5KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICogc2VjKTsKKwlpbnQgKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqIHR4YiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IHByaSk7CisJaW50ICgqcmVzZXRfcG9ydCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKKwlpbnQgKCppc19xdWV1ZV9mdWxsKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOworCisJaW50ICgqaGFuZGxlX21hbmFnZW1lbnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmssIHUxNiB0eXBlKTsKKwlpbnQgKCppc19xb3NfYWN0aXZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiBUeXBpY2FsIFNUQSBtZXRob2RzICovCisJaW50ICgqaGFuZGxlX2F1dGgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKiBhdXRoKTsKKwlpbnQgKCpoYW5kbGVfZGVhdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqIGF1dGgpOworCWludCAoKmhhbmRsZV9hY3Rpb24pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYWN0aW9uICogYWN0aW9uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqIHN0YXRzKTsKKwlpbnQgKCpoYW5kbGVfZGlzYXNzb2MpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICogYXNzb2MpOworCWludCAoKmhhbmRsZV9iZWFjb24pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICogYmVhY29uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CisJaW50ICgqaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqIHJlc3AsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CisJaW50ICgqaGFuZGxlX3Byb2JlX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqIHJlcSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKiBzdGF0cyk7CisJaW50ICgqaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqIHJlc3AsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CisKKwkvKiBUeXBpY2FsIEFQIG1ldGhvZHMgKi8KKwlpbnQgKCpoYW5kbGVfYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKKwlpbnQgKCpoYW5kbGVfcmVhc3NvY19yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICogcmVxKTsKKworCS8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBkYXRhCisJICogYWxsb2NhdGVkIGJleW9uZCB0aGlzIHN0cnVjdHVyZSBieSBhbGxvY19pZWVlODAyMTEgKi8KKwl1OCBwcml2WzBdOworfTsKKworI2RlZmluZSBJRUVFX0EgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgSUVFRV9CICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIElFRUVfRyAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBJRUVFX01PREVfTUFTSyAgICAoSUVFRV9BfElFRUVfQnxJRUVFX0cpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaWVlZTgwMjExX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKW5ldGRldl9wcml2KGRldikpLT5wcml2OworfQorCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkJICBpbnQgbW9kZSkKK3sKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIGZvciBib3RoIGFjY2VzcyBwb2ludHMgYW5kIG91ciBkZXZpY2UgdG8gc3VwcG9ydAorCSAqIGNvbWJpbmF0aW9ucyBvZiBtb2Rlcywgc28gYXMgbG9uZyBhcyB0aGVyZSBpcyBvbmUgdmFsaWQgY29tYmluYXRpb24KKwkgKiBvZiBhcC9kZXZpY2Ugc3VwcG9ydGVkIG1vZGVzLCB0aGVuIHJldHVybiBzdWNjZXNzCisJICoKKwkgKi8KKwlpZiAoKG1vZGUgJiBJRUVFX0EpICYmCisJICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgJiYKKwkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKG1vZGUgJiBJRUVFX0cpICYmCisJICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgJiYKKwkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKG1vZGUgJiBJRUVFX0IpICYmCisJICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OKSAmJgorCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCit7CisJaW50IGhkcmxlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CisJdTE2IHN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCisJc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSkgeworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CisJCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpKQorCQkJaGRybGVuID0gSUVFRTgwMjExXzRBRERSX0xFTjsKKwkJaWYgKHN0eXBlICYgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKQorCQkJaGRybGVuICs9IDI7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKKwkJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShmYykpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6CisJCQloZHJsZW4gPSBJRUVFODAyMTFfMUFERFJfTEVOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloZHJsZW4gPSBJRUVFODAyMTFfMkFERFJfTEVOOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGhkcmxlbjsKK30KKworc3RhdGljIGlubGluZSB1OCAqaWVlZTgwMjExX2dldF9wYXlsb2FkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJc3dpdGNoIChpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCWNhc2UgSUVFRTgwMjExXzFBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgKiloZHIpLT5wYXlsb2FkOworCWNhc2UgSUVFRTgwMjExXzJBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKiloZHIpLT5wYXlsb2FkOworCWNhc2UgSUVFRTgwMjExXzNBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKiloZHIpLT5wYXlsb2FkOworCWNhc2UgSUVFRTgwMjExXzRBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKiloZHIpLT5wYXlsb2FkOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX29mZG1fcmF0ZSh1OCByYXRlKQoreworCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjoKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1COgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19jY2tfcmF0ZSh1OCByYXRlKQoreworCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COgorCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUI6CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBpZWVlODAyMTEuYyAqLworZXh0ZXJuIHZvaWQgZnJlZV9pZWVlODAyMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpOworZXh0ZXJuIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19hZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CisKK2V4dGVybiBpbnQgaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKKworLyogaWVlZTgwMjExX3R4LmMgKi8KK2V4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7CisKKy8qIGllZWU4MDIxMV9yeC5jICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfYW55KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOworLyogbWFrZSBzdXJlIHRvIHNldCBzdGF0cy0+bGVuICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya19yZXNldChzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspOworCisvKiBpZWVlODAyMTFfZ2VvLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqaWVlZTgwMjExX2dldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UKKwkJCQkJCSAgICAgKmllZWUpOworZXh0ZXJuIGludCBpZWVlODAyMTFfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyk7CisKK2V4dGVybiBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgICAgdTggY2hhbm5lbCk7CitleHRlcm4gaW50IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworZXh0ZXJuIHU4IGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHUzMiBmcmVxKTsKK2V4dGVybiB1OCBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgICAgdTggY2hhbm5lbCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICppZWVlODAyMTFfZ2V0X2NoYW5uZWwoc3RydWN0CisJCQkJCQkJICAgICBpZWVlODAyMTFfZGV2aWNlCisJCQkJCQkJICAgICAqaWVlZSwgdTggY2hhbm5lbCk7CitleHRlcm4gdTMyIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworCisvKiBpZWVlODAyMTFfd3guYyAqLworZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7CitleHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOworZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfaW5jcmVtZW50X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCWllZWUtPnNjYW5zKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9nZXRfc2NhbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit7CisJcmV0dXJuIGllZWUtPnNjYW5zOworfQorCisjZW5kaWYJCQkJLyogSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggODIzYzJiZi4uMTE1YjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTE2OTIsNyArMTY5MiwxMyBAQAogCXUzMiBsb2NrOwogCXUzMiBvcmRfbGVuID0gc2l6ZW9mKGxvY2spOwogCi0JLyogUXVpdGUgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCisJLyogUXVpZXQgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSB7CiAJCUlQV19ERUJVR19JTkZPKCIlczogUmFkaW8gaXMgZGlzYWJsZWQgYnkgTWFudWFsIERpc2FibGUgIgogCQkJICAgICAgICJzd2l0Y2hcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOwpAQCAtMTkxMCw3ICsxOTE2LDggQEAKIHsKIAogI2RlZmluZSBNQUNfQVNTT0NJQVRJT05fUkVBRF9ERUxBWSAoSFopCi0JaW50IHJldCwgbGVuLCBlc3NpZF9sZW47CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBlc3NpZF9sZW47CiAJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CiAJdTMyIHR4cmF0ZTsKIAl1MzIgY2hhbjsKQEAgLTIzODQsMTMgKzIzOTEsMTQgQEAKICNlbmRpZgogCiAJcHJpdi0+ZmF0YWxfZXJyb3IgPSBJUFcyMTAwX0VSUl9DM19DT1JSVVBUSU9OOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCXByaXYtPm5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpc3Jfcngoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGksCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqc3RhdHVzID0gJnByaXYtPnN0YXR1c19xdWV1ZS5kcnZbaV07CiAJc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0ICpwYWNrZXQgPSAmcHJpdi0+cnhfYnVmZmVyc1tpXTsKIApAQCAtMjM5OSwxNCArMjQwNywxNCBAQAogCWlmICh1bmxpa2VseShzdGF0dXMtPmZyYW1lX3NpemUgPiBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLCBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgeworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC0yNDM2LDEwICsyNDQ0LDEwIEBACiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKLQkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCSAgICAgICBkZXYtPm5hbWUpOwogCQlwcmludGtfYnVmKElQV19ETF9EUk9QLCBwYWNrZXRfZGF0YSwgc3RhdHVzLT5mcmFtZV9zaXplKTsKICNlbmRpZgotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCQkvKiBpZWVlODAyMTFfcnggZmFpbGVkLCBzbyBpdCBkaWRuJ3QgZnJlZSB0aGUgU0tCICovCiAJCWRldl9rZnJlZV9za2JfYW55KHBhY2tldC0+c2tiKTsKQEAgLTI0NTAsNyArMjQ1OCw3IEBACiAJaWYgKHVubGlrZWx5KGlwdzIxMDBfYWxsb2Nfc2tiKHByaXYsIHBhY2tldCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIgogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgU0tCIG9udG8gUkJEIHJpbmcgLSBkaXNhYmxpbmcgIgotCQkgICAgICAgImFkYXB0ZXIuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgICJhZGFwdGVyLlxuIiwgZGV2LT5uYW1lKTsKIAkJLyogVE9ETzogc2NoZWR1bGUgYWRhcHRlciBzaHV0ZG93biAqLwogCQlJUFdfREVCVUdfSU5GTygiVE9ETzogU2h1dGRvd24gYWRhcHRlci4uLlxuIik7CiAJfQpAQCAtMjQ2NCw2ICsyNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGlzcl9yeF9tb25pdG9yKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAogCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwogCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0ID0gJnByaXYtPnJ4X2J1ZmZlcnNbaV07CiAKQEAgLTI0ODEsMTUgKzI0OTAsMTUgQEAKIAkJCQlzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLAogCQkJICAgICAgIHNrYl90YWlscm9vbShwYWNrZXQtPnNrYikpOwotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKSB7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IHVwLlxuIik7CiAJCXJldHVybjsKQEAgLTI0OTgsNyArMjUwNyw3IEBACiAJaWYgKHVubGlrZWx5KHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0sgJiYKIAkJICAgICBzdGF0dXMtPmZsYWdzICYgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUikpIHsKIAkJSVBXX0RFQlVHX1JYKCJDUkMgZXJyb3IgaW4gcGFja2V0LiAgRHJvcHBpbmcuXG4iKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI1MjAsNyArMjUyOSw3IEBACiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CiAKIAlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkocGFja2V0LT5za2IpOwpAQCAtMjUzMSw3ICsyNTQwLDcgQEAKIAlpZiAodW5saWtlbHkoaXB3MjEwMF9hbGxvY19za2IocHJpdiwgcGFja2V0KSkpIHsKIAkJSVBXX0RFQlVHX1dBUk5JTkcoCiAJCQkiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBTS0Igb250byBSQkQgcmluZyAtIGRpc2FibGluZyAiCi0JCQkiYWRhcHRlci5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJImFkYXB0ZXIuXG4iLCBkZXYtPm5hbWUpOwogCQkvKiBUT0RPOiBzY2hlZHVsZSBhZGFwdGVyIHNodXRkb3duICovCiAJCUlQV19ERUJVR19JTkZPKCJUT0RPOiBTaHV0ZG93biBhZGFwdGVyLi4uXG4iKTsKIAl9CkBAIC0zMzMzLDcgKzMzNDIsNyBAQAogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCUlQV19ERUJVR19JTkZPKCJDYW4gbm90IHRyYW5zbWl0IHdoZW4gbm90IGNvbm5lY3RlZC5cbiIpOwotCQlwcml2LT5pZWVlLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlwcml2LT5uZXRfZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQpAQCAtNDA1OCw3ICs0MDY3LDcgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTMyIGNoYW4gPSAwOwogCWNoYXIgKm91dCA9IGJ1ZjsKLQlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJaW50IHJldDsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQpAQCAtNTgyOSw3ICs1ODM4LDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCXByaXYtPmllZWUtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQpAQCAtNTk5OSw2ICs2MDA4LDE3IEBACiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfaXJxX3Rhc2tsZXQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3MjEwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpcHcyMTAwX29wZW4sCisJLm5kb19zdG9wCQk9IGlwdzIxMDBfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX2luaXQJCT0gaXB3MjEwMF9uZXRfaW5pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaXB3MjEwMF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXB3MjEwMF9zZXRfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIExvb2sgaW50byB1c2luZyBuZXRkZXYgZGVzdHJ1Y3RvciB0byBzaHV0ZG93biBpZWVlODAyMTE/ICovCiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXB3MjEwMF9hbGxvY19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCkBAIC02MDIzLDE1ICs2MDQzLDExIEBACiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKLQlkZXYtPm9wZW4gPSBpcHcyMTAwX29wZW47Ci0JZGV2LT5zdG9wID0gaXB3MjEwMF9jbG9zZTsKLQlkZXYtPmluaXQgPSBpcHcyMTAwX25ldF9pbml0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpcHcyMTAwX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZpcHcyMTAwX2V0aHRvb2xfb3BzOwotCWRldi0+dHhfdGltZW91dCA9IGlwdzIxMDBfdHhfdGltZW91dDsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmlwdzIxMDBfd3hfaGFuZGxlcl9kZWY7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5pZWVlODAyMTEgPSBwcml2LT5pZWVlOwogCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gaXB3MjEwMF9zZXRfYWRkcmVzczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMyAqIEhaOwogCWRldi0+aXJxID0gMDsKIApAQCAtNjQxNCw2ICs2NDMwLDggQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOwogCisJcHJpdi0+c3VzcGVuZF9hdCA9IGdldF9zZWNvbmRzKCk7CisKIAltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTY0NTcsNiArNjQ3NSw4IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAorCXByaXYtPnN1c3BlbmRfdGltZSA9IGdldF9zZWNvbmRzKCkgLSBwcml2LT5zdXNwZW5kX2F0OworCiAJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpKQogCQlpcHcyMTAwX3VwKHByaXYsIDApOwpAQCAtNzEyMiw3ICs3MTQyLDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgdmFsOwotCWludCBsZW4gPSBzaXplb2YodmFsKTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2l6ZW9mKHZhbCk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfRU5BQkxFRCkgfHwKQEAgLTgyOTcsNyArODMxNyw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXB3MjEwMF9wcml2LCB3eF9ldmVudF93b3JrLndvcmspOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgbGVuID0gRVRIX0FMRU47CisJdW5zaWduZWQgaW50IGxlbiA9IEVUSF9BTEVOOwogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TVE9QUElORykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAppbmRleCBiYmYxZGRjLi5mMTgzZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaApAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLy8gbmV3IGRyaXZlciBBUEkKIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KLQogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjZW5kaWYKQEAgLTQ4LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CiBzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQ7CkBAIC01OTEsNiArNTkxLDEwIEBACiAKIAlpbnQgdXNlcl9yZXF1ZXN0ZWRfc2NhbjsKIAorCS8qIFRyYWNrIHRpbWUgaW4gc3VzcGVuZCAqLworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGltZTsKKwogCXUzMiBpbnRlcnJ1cHRzOwogCWludCB0eF9pbnRlcnJ1cHRzOwogCWludCByeF9pbnRlcnJ1cHRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCA2MjVmMmNmLi5iMzQ0OTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtMzAxLDg4ICszMDEsMTAyIEBACiB9CiAKIC8qIDgtYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSB3cml0ZWIoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgaXB3LT5od19iYXNlICsgb2ZzKTsKK30KIAogLyogOC1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfd3JpdGU4KGlwdywgb2ZzLCB2YWwpIGRvIHsgXAotIElQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKLSB9IHdoaWxlICgwKQorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIHdyaXRldygodmFsKSwgKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaXB3X3dyaXRlMTYoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIGlwdy0+aHdfYmFzZSArIG9mcyk7Cit9CiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGZvciBsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIFwKLSBJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3QxNigweCUwOFgsIDB4JTA4WClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikob2ZzKSwgKHUzMikodmFsKSk7IFwKLSBfaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkKKyNkZWZpbmUgaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkgZG8geyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MTYoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpOyBcCit9IHdoaWxlICgwKQogCiAvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChsb3cgNEspICovCi0jZGVmaW5lIF9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSB3cml0ZWwoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTMyKHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcywKKwkJdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBpcHctPmh3X2Jhc2UgKyBvZnMpOworfQogCiAvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSBcCi0gSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MzIoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpCisjZGVmaW5lIGlwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDMyKDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIFwKKwkJCV9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAorCV9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKTsgXAorfSB3aGlsZSAoMCkKIAogLyogOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkOChpcHcsIG9mcykgcmVhZGIoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKLQotLyogOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotc3RhdGljIGlubGluZSB1OCBfX2lwd19yZWFkOChjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCitzdGF0aWMgaW5saW5lIHU4IF9pcHdfcmVhZDgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7Ci0JcmV0dXJuIF9pcHdfcmVhZDgoaXB3LCBvZnMpOworCXJldHVybiByZWFkYihpcHctPmh3X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBhbGlhcyB0byA4LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDgoaXB3LCBvZnMpIF9faXB3X3JlYWQ4KF9fRklMRV9fLCBfX0xJTkVfXywgaXB3LCBvZnMpCisjZGVmaW5lIGlwd19yZWFkOChpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSh1MzIpKG9mcykpOyBcCisJX2lwd19yZWFkOChpcHcsIG9mcyk7IFwKK30pCiAKIC8qIDE2LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3JlYWQxNihpcHcsIG9mcykgcmVhZHcoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKLQotLyogMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLXN0YXRpYyBpbmxpbmUgdTE2IF9faXB3X3JlYWQxNihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCitzdGF0aWMgaW5saW5lIHUxNiBfaXB3X3JlYWQxNihzdHJ1Y3QgaXB3X3ByaXYgKmlwdywgdW5zaWduZWQgbG9uZyBvZnMpCiB7Ci0JSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7Ci0JcmV0dXJuIF9pcHdfcmVhZDE2KGlwdywgb2ZzKTsKKwlyZXR1cm4gcmVhZHcoaXB3LT5od19iYXNlICsgb2ZzKTsKIH0KIAogLyogYWxpYXMgdG8gMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd19yZWFkMTYoaXB3LCBvZnMpIF9faXB3X3JlYWQxNihfX0ZJTEVfXywgX19MSU5FX18sIGlwdywgb2ZzKQorI2RlZmluZSBpcHdfcmVhZDE2KGlwdywgb2ZzKSAoeyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSh1MzIpKG9mcykpOyBcCisJX2lwd19yZWFkMTYoaXB3LCBvZnMpOyBcCit9KQogCiAvKiAzMi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkMzIoaXB3LCBvZnMpIHJlYWRsKChpcHcpLT5od19iYXNlICsgKG9mcykpCi0KLS8qIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi1zdGF0aWMgaW5saW5lIHUzMiBfX2lwd19yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MzIgX2lwd19yZWFkMzIoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgZiwgbCwgKHUzMikgKG9mcykpOwotCXJldHVybiBfaXB3X3JlYWQzMihpcHcsIG9mcyk7CisJcmV0dXJuIHJlYWRsKGlwdy0+aHdfYmFzZSArIG9mcyk7CiB9CiAKIC8qIGFsaWFzIHRvIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDMyKGlwdywgb2ZzKSBfX2lwd19yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBpcHcsIG9mcykKKyNkZWZpbmUgaXB3X3JlYWQzMihpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCQkodTMyKShvZnMpKTsgXAorCV9pcHdfcmVhZDMyKGlwdywgb2ZzKTsgXAorfSkKIAotLyogbXVsdGktYnl0ZSByZWFkIChhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogc3RhdGljIHZvaWQgX2lwd19yZWFkX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqLCB1MzIsIHU4ICosIGludCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19pcHdfcmVhZF9pbmRpcmVjdChjb25zdCBjaGFyICpmLCBpbnQgbCwKLQkJCQkgICAgICAgc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTggKiBjLCBpbnQgZCkKLXsKLQlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2luZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIGYsIGwsICh1MzIpIChiKSwKLQkJICAgICBkKTsKLQlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7Ci19Ci0KIC8qIGFsaWFzIHRvIG11bHRpLWJ5dGUgcmVhZCAoU1JBTS9yZWdzIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpIF9faXB3X3JlYWRfaW5kaXJlY3QoX19GSUxFX18sIF9fTElORV9fLCBhLCBiLCBjLCBkKQorI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSAoeyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9pbmRpcmVjdCgweCUwOFgpICV1IGJ5dGVzXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKGIpLCAodTMyKShkKSk7IFwKKwlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7IFwKK30pCiAKIC8qIGFsaWFzIHRvIG11bHRpLWJ5dGUgcmVhZCAoU1JBTS9yZWdzIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHU4ICogZGF0YSwKIAkJCQlpbnQgbnVtKTsKLSNkZWZpbmUgaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpIFwKLQlJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9pbmRpcmVjdCgweCUwOFgpICVkIGJ5dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKGIpLCBkKTsgXAotCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkKKyNkZWZpbmUgaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2luZGlyZWN0KDB4JTA4WCkgJXUgYnl0ZXNcbiIsIF9fRklMRV9fLCBcCisJCQlfX0xJTkVfXywgKHUzMikoYiksICh1MzIpKGQpKTsgXAorCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDMyLWJpdCBpbmRpcmVjdCB3cml0ZSAoYWJvdmUgNEspICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX3JlZzMyKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQpAQCAtNzcxNywyMiArNzczMSwyMyBAQAogCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZQogCSAqIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC03NzU0LDcgKzc3NjksNyBAQAogCQlpcHdfcmVidWlsZF9kZWNyeXB0ZWRfc2tiKHByaXYsIHJ4Yi0+c2tiKTsKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCi0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWVsc2UgewkJCS8qIGllZWU4MDIxMV9yeCBzdWNjZWVkZWQsIHNvIGl0IG5vdyBvd25zIHRoZSBTS0IgKi8KIAkJcnhiLT5za2IgPSBOVUxMOwogCQlfX2lwd19sZWRfYWN0aXZpdHlfb24ocHJpdik7CkBAIC03NzY2LDYgKzc3ODEsNyBAQAogCQkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpcHdfcnhfZnJhbWUgKmZyYW1lID0gJnBrdC0+dS5mcmFtZTsKIApAQCAtNzc4MywxOCArNzc5OSwxOCBAQAogCXNob3J0IGxlbiA9IGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZQogCSAqIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC03ODA0LDcgKzc4MjAsNyBAQAogCSAqIHRoYXQgbm93ICovCiAJaWYgKGxlbiA+IElQV19SWF9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpIHsKIAkJLyogRklYTUU6IFNob3VsZCBhbGxvYyBiaWdnZXIgc2tiIGluc3RlYWQgKi8KLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgdG9vIGxhcmdlIHBhY2tldCBpbiBtb25pdG9yXG4iKTsKIAkJcmV0dXJuOwpAQCAtNzkxMCw3ICs3OTI2LDcgQEAKIAlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHJ4Yi0+c2tiLT5sZW4pOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJZWxzZSB7CQkJLyogaWVlZTgwMjExX3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCS8qIG5vIExFRCBkdXJpbmcgY2FwdHVyZSAqLwpAQCAtNzk0Miw2ICs3OTU4LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+cHJvbV9uZXRfZGV2OwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXB3X3J4X2ZyYW1lICpmcmFtZSA9ICZwa3QtPnUuZnJhbWU7CiAJc3RydWN0IGlwd19ydF9oZHIgKmlwd19ydDsKQEAgLTc5NjQsMTcgKzc5ODEsMTcgQEAKIAkJcmV0dXJuOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5wcm9tX25ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWlmICh1bmxpa2VseSgobGVuICsgSVBXX1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNzk4Myw3ICs4MDAwLDcgQEAKIAkgKiB0aGF0IG5vdyAqLwogCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CiAJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCi0JCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHRvbyBsYXJnZSBwYWNrZXQgaW4gbW9uaXRvclxuIik7CiAJCXJldHVybjsKIAl9CkBAIC04MTE1LDcgKzgxMzIsNyBAQAogCUlQV19ERUJVR19SWCgiUnggcGFja2V0IG9mICVkIGJ5dGVzLlxuIiwgc2tiLT5sZW4pOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+cHJvbV9wcml2LT5pZWVlLCBza2IsIHN0YXRzKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KIH0KQEAgLTgyNzIsNyArODI4OSw3IEBACiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAKIAkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjExX1NUQVRTKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjExX1NUQVRTKTsKIAkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihyeGItPnNrYi0+Y2IpKTsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcnhiLT5za2IgPSBOVUxMOwpAQCAtODM5OSw3ICs4NDE2LDcgQEAKIAkJCQkJSVBXX0RFQlVHX0RST1AKIAkJCQkJICAgICgiUmVjZWl2ZWQgcGFja2V0IGlzIHRvbyBzbWFsbC4gIgogCQkJCQkgICAgICJEcm9wcGluZy5cbiIpOwotCQkJCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJcHJpdi0+bmV0X2Rldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMTA0NzAsMTUgKzEwNDg3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwd19uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQotCXByaXYtPmllZWUtPnN0YXRzLnR4X3BhY2tldHMgPSBwcml2LT50eF9wYWNrZXRzOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X3BhY2tldHMgPSBwcml2LT5yeF9wYWNrZXRzOwotCXJldHVybiAmcHJpdi0+aWVlZS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIGlwd19uZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAKQEAgLTExMjI0LDYgKzExMjMyLDEyIEBACiB7CiAJaW50IHJjLCBpLCBqOwogCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMTUxNSwxMSArMTE1MjksMTQgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXB3X3Byb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuICZwcm9tX3ByaXYtPmllZWUtPnN0YXRzOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcHdfcHJvbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaXB3X3Byb21fb3BlbiwKKwkubmRvX3N0b3AJCT0gaXB3X3Byb21fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaXB3X3Byb21faGFyZF9zdGFydF94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKQEAgLTExNTQwLDEwICsxMTU1Nyw3IEBACiAJbWVtY3B5KHByaXYtPnByb21fbmV0X2Rldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKIAlwcml2LT5wcm9tX25ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCXByaXYtPnByb21fbmV0X2Rldi0+b3BlbiA9IGlwd19wcm9tX29wZW47Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5zdG9wID0gaXB3X3Byb21fc3RvcDsKLQlwcml2LT5wcm9tX25ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19wcm9tX2dldF9zdGF0czsKLQlwcml2LT5wcm9tX25ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdDsKKwlwcml2LT5wcm9tX25ldF9kZXYtPm5ldGRldl9vcHMgPSAmaXB3X3Byb21fbmV0ZGV2X29wczsKIAogCXByaXYtPnByb21fcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfTU9OSVRPUjsKIAlTRVRfTkVUREVWX0RFVihwcml2LT5wcm9tX25ldF9kZXYsICZwcml2LT5wY2lfZGV2LT5kZXYpOwpAQCAtMTE1NzEsNiArMTE1ODUsMTcgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGlwd19uZXRfaW5pdCwKKwkubmRvX29wZW4JCT0gaXB3X25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBpcHdfbmV0X3N0b3AsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgaXB3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMTE2NzIsMTIgKzExNjk3LDcgQEAKIAlwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgPSAtMjA7CiAJcHJpdi0+aWVlZS0+d29yc3RfcnNzaSA9IC04NTsKIAotCW5ldF9kZXYtPm9wZW4gPSBpcHdfbmV0X29wZW47Ci0JbmV0X2Rldi0+c3RvcCA9IGlwd19uZXRfc3RvcDsKLQluZXRfZGV2LT5pbml0ID0gaXB3X25ldF9pbml0OwotCW5ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19uZXRfZ2V0X3N0YXRzOwotCW5ldF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlwd19uZXRfc2V0X211bHRpY2FzdF9saXN0OwotCW5ldF9kZXYtPnNldF9tYWNfYWRkcmVzcyA9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzOworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaXB3X25ldGRldl9vcHM7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5pZWVlLT5zcHlfZGF0YTsKIAluZXRfZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaXB3X3d4X2hhbmRsZXJfZGVmOwpAQCAtMTE4MjQsNiArMTE4NDQsOCBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIAorCXByaXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODU5LDYgKzExODgxLDggQEAKIAkgKiB0aGUgcXVldWUgb2YgbmVlZGVkICovCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCisJcHJpdi0+c3VzcGVuZF90aW1lID0gZ2V0X3NlY29uZHMoKSAtIHByaXYtPnN1c3BlbmRfYXQ7CisKIAkvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgKi8KIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAppbmRleCAyNzdiMjc0Li4wNWU4Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaApAQCAtNDksMTMgKzQ5LDE0IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJpcHcyMjAwIgogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKwogLyogQXV0aGVudGljYXRpb24gIGFuZCBBc3NvY2lhdGlvbiBTdGF0ZXMgKi8KIGVudW0gY29ubmVjdGlvbl9tYW5hZ2VyX2Fzc29jX3N0YXRlcyB7CiAJQ01BU19JTklUID0gMCwKQEAgLTEzNDYsNiArMTM0NywxMCBAQAogCiAJczggdHhfcG93ZXI7CiAKKwkvKiBUcmFjayB0aW1lIGluIHN1c3BlbmQgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX3RpbWU7CisKICNpZmRlZiBDT05GSUdfUE0KIAl1MzIgcG1fc3RhdGVbMTZdOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCmluZGV4IDk2MGFkMTMuLjlkZmJiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCmluZGV4IGEyZjU2MTYuLjkyYTI2OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OICI4MDIuMTEgZGF0YS9tYW5hZ2VtZW50L2NvbnRyb2wgc3RhY2siCiAjZGVmaW5lIERSVl9OQU1FICAgICAgICAiaWVlZTgwMjExIgpAQCAtMTA1LDYgKzEwNSwyMSBAQAogCWllZWUtPm5ldHdvcmtzID0gTlVMTDsKIH0KIAordm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWdlX2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKGFnZV9zZWNzICogTVNFQ19QRVJfU0VDKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXR3b3JrLCAmaWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCW5ldHdvcmstPmxhc3Rfc2Nhbm5lZCAtPSBhZ2VfamlmZmllczsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV0d29ya3NfYWdlKTsKKwogc3RhdGljIHZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJaW50IGk7CkBAIC0xMTYsMjAgKzEzMSwxNCBAQAogCQkJICAgICAgJmllZWUtPm5ldHdvcmtfZnJlZV9saXN0KTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK2ludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBJRUVFODAyMTFfREFUQV9MRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWVlZTgwMjExX2dlbmVyaWNfZ2V0X3N0YXRzKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmaWVlZS0+c3RhdHM7Ci19CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jaGFuZ2VfbXR1KTsKIAogc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpCiB7CkBAIC0xNDUsMTIgKzE1NCwxMCBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3htaXQ7CiAJZGV2LT5jaGFuZ2VfbXR1ID0gaWVlZTgwMjExX2NoYW5nZV9tdHU7Ci0KLQkvKiBEcml2ZXJzIGFyZSBmcmVlIHRvIG92ZXJyaWRlIHRoaXMgaWYgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24KLQkgKiBkb2VzIG5vdCBtZWV0IHRoZWlyIG5lZWRzLiAqLwotCWRldi0+Z2V0X3N0YXRzID0gaWVlZTgwMjExX2dlbmVyaWNfZ2V0X3N0YXRzOworI2VuZGlmCiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKQEAgLTIwNiw3ICsyMTMsNyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWwgPSAwOwpAQCAtMjM3LDExICsyNDQsMTEgQEAKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgbGVuKTsKIH0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCiAJaWVlZTgwMjExX2RlYnVnX2xldmVsID0gZGVidWc7CkBAIC0yNjEsNyArMjY4LDcgQEAKIAllLT5yZWFkX3Byb2MgPSBzaG93X2RlYnVnX2xldmVsOwogCWUtPndyaXRlX3Byb2MgPSBzdG9yZV9kZWJ1Z19sZXZlbDsKIAllLT5kYXRhID0gTlVMTDsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9ERVNDUklQVElPTiAiLCAiIERSVl9WRVJTSU9OICJcbiIpOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfQ09QWVJJR0hUICJcbiIpOwpAQCAtMjcxLDIwICsyNzgsMjAgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAlpZiAoaWVlZTgwMjExX3Byb2MpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgaWVlZTgwMjExX3Byb2MpOwogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwogCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CiAJfQotI2VuZGlmCQkJCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiBtb2R1bGVfZXhpdChpZWVlODAyMTFfZXhpdCk7CiBtb2R1bGVfaW5pdChpZWVlODAyMTFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwppbmRleCA5YzY3ZGZhLi5kYWU0YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKQEAgLTMzLDcgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMzM0LDcgKzMzNSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlzaXplX3QgaGRybGVuOwogCXUxNiBmYywgdHlwZSwgc3R5cGUsIHNjOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAl1bnNpZ25lZCBpbnQgZnJhZzsKIAl1OCAqcGF5bG9hZDsKIAl1MTYgZXRoZXJ0eXBlOwpAQCAtMzUzLDggKzM1Myw2IEBACiAJaW50IGNhbl9iZV9kZWNyeXB0ZWQgPSAwOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopc2tiLT5kYXRhOwotCXN0YXRzID0gJmllZWUtPnN0YXRzOwotCiAJaWYgKHNrYi0+bGVuIDwgMTApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNLQiBsZW5ndGggPCAxMFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtNDExLDggKzQwOSw4IEBACiAjZW5kaWYKIAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQlzdGF0cy0+cnhfcGFja2V0cysrOwotCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlpZWVlODAyMTFfbW9uaXRvcl9yeChpZWVlLCBza2IsIHJ4X3N0YXRzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNzY4LDggKzc2Niw4IEBACiAJfQogI2VuZGlmCiAKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAjaWZkZWYgTk9UX1lFVAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSICYmICF3ZHMgJiYgaWVlZS0+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC04MTEsNyArODA5LDcgQEAKIAkJCSAqIGluIG91ciBzdGF0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QCiAJCQkgICAgKCJSWDogbmV0aWZfcnggZHJvcHBlZCB0aGUgcGFja2V0XG4iKTsKLQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtODIzLDcgKzgyMSw3IEBACiAJcmV0dXJuIDE7CiAKICAgICAgIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAogCS8qIFJldHVybmluZyAwIGluZGljYXRlcyB0byBjYWxsZXIgdGhhdCB3ZSBoYXZlIG5vdCBoYW5kbGVkIHRoZSBTS0ItLQogCSAqIHNvIGl0IGlzIHN0aWxsIGFsbG9jYXRlZCBhbmQgY2FuIGJlIHVzZWQgYWdhaW4gYnkgdW5kZXJseWluZwpAQCAtOTE4LDcgKzkxNiw3IEBACiAKIGRyb3BfZnJlZToKIAlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCWllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwlpZWVlLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlyZXR1cm47CiB9CiAKQEAgLTEwNzksMzcgKzEwNzcsMzcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0jZGVmaW5lIE1GSUVfU1RSSU5HKHgpIGNhc2UgTUZJRV9UWVBFXyAjI3g6IHJldHVybiAjeAorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKKyNkZWZpbmUgTUZJRV9TVFJJTkcoeCkgY2FzZSBXTEFOX0VJRF8gIyN4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pbmZvX2VsZW1lbnRfc3RyaW5nKHUxNiBpZCkKIHsKIAlzd2l0Y2ggKGlkKSB7CiAJCU1GSUVfU1RSSU5HKFNTSUQpOwotCQlNRklFX1NUUklORyhSQVRFUyk7Ci0JCU1GSUVfU1RSSU5HKEZIX1NFVCk7Ci0JCU1GSUVfU1RSSU5HKERTX1NFVCk7Ci0JCU1GSUVfU1RSSU5HKENGX1NFVCk7CisJCU1GSUVfU1RSSU5HKFNVUFBfUkFURVMpOworCQlNRklFX1NUUklORyhGSF9QQVJBTVMpOworCQlNRklFX1NUUklORyhEU19QQVJBTVMpOworCQlNRklFX1NUUklORyhDRl9QQVJBTVMpOwogCQlNRklFX1NUUklORyhUSU0pOwotCQlNRklFX1NUUklORyhJQlNTX1NFVCk7CisJCU1GSUVfU1RSSU5HKElCU1NfUEFSQU1TKTsKIAkJTUZJRV9TVFJJTkcoQ09VTlRSWSk7Ci0JCU1GSUVfU1RSSU5HKEhPUF9QQVJBTVMpOwotCQlNRklFX1NUUklORyhIT1BfVEFCTEUpOworCQlNRklFX1NUUklORyhIUF9QQVJBTVMpOworCQlNRklFX1NUUklORyhIUF9UQUJMRSk7CiAJCU1GSUVfU1RSSU5HKFJFUVVFU1QpOwogCQlNRklFX1NUUklORyhDSEFMTEVOR0UpOwotCQlNRklFX1NUUklORyhQT1dFUl9DT05TVFJBSU5UKTsKLQkJTUZJRV9TVFJJTkcoUE9XRVJfQ0FQQUJJTElUWSk7CisJCU1GSUVfU1RSSU5HKFBXUl9DT05TVFJBSU5UKTsKKwkJTUZJRV9TVFJJTkcoUFdSX0NBUEFCSUxJVFkpOwogCQlNRklFX1NUUklORyhUUENfUkVRVUVTVCk7CiAJCU1GSUVfU1RSSU5HKFRQQ19SRVBPUlQpOwotCQlNRklFX1NUUklORyhTVVBQX0NIQU5ORUxTKTsKLQkJTUZJRV9TVFJJTkcoQ1NBKTsKKwkJTUZJRV9TVFJJTkcoU1VQUE9SVEVEX0NIQU5ORUxTKTsKKwkJTUZJRV9TVFJJTkcoQ0hBTk5FTF9TV0lUQ0gpOwogCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUVVFU1QpOwogCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUE9SVCk7CiAJCU1GSUVfU1RSSU5HKFFVSUVUKTsKIAkJTUZJRV9TVFJJTkcoSUJTU19ERlMpOwogCQlNRklFX1NUUklORyhFUlBfSU5GTyk7CiAJCU1GSUVfU1RSSU5HKFJTTik7Ci0JCU1GSUVfU1RSSU5HKFJBVEVTX0VYKTsKKwkJTUZJRV9TVFJJTkcoRVhUX1NVUFBfUkFURVMpOwogCQlNRklFX1NUUklORyhHRU5FUklDKTsKIAkJTUZJRV9TVFJJTkcoUU9TX1BBUkFNRVRFUik7CiAJZGVmYXVsdDoKQEAgLTExMjQsNyArMTEyMiw3IEBACiB7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAl1OCBpOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJY2hhciByYXRlc19zdHJbNjRdOwogCWNoYXIgKnA7CiAjZW5kaWYKQEAgLTExNDQsNyArMTE0Miw3IEBACiAJCX0KIAogCQlzd2l0Y2ggKGluZm9fZWxlbWVudC0+aWQpIHsKLQkJY2FzZSBNRklFX1RZUEVfU1NJRDoKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgogCQkJbmV0d29yay0+c3NpZF9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4sCiAJCQkJCQkodTgpIElXX0VTU0lEX01BWF9TSVpFKTsKIAkJCW1lbWNweShuZXR3b3JrLT5zc2lkLCBpbmZvX2VsZW1lbnQtPmRhdGEsCkBAIC0xMTUzLDIxICsxMTUxLDIxIEBACiAJCQkJbWVtc2V0KG5ldHdvcmstPnNzaWQgKyBuZXR3b3JrLT5zc2lkX2xlbiwgMCwKIAkJCQkgICAgICAgSVdfRVNTSURfTUFYX1NJWkUgLSBuZXR3b3JrLT5zc2lkX2xlbik7CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfU1NJRDogJyVzJyBsZW49JWQuXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1JBVEVTOgotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKwkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCXAgPSByYXRlc19zdHI7CiAjZW5kaWYKIAkJCW5ldHdvcmstPnJhdGVzX2xlbiA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiwKIAkJCQkJCSBNQVhfUkFURVNfTEVOR1RIKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBuZXR3b3JrLT5yYXRlc19sZW47IGkrKykgewogCQkJCW5ldHdvcmstPnJhdGVzW2ldID0gaW5mb19lbGVtZW50LT5kYXRhW2ldOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQkJcCArPSBzbnByaW50ZihwLCBzaXplb2YocmF0ZXNfc3RyKSAtCiAJCQkJCSAgICAgIChwIC0gcmF0ZXNfc3RyKSwgIiUwMlggIiwKIAkJCQkJICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtMTE4MiwxOSArMTE4MCwxOSBAQAogCQkJCX0KIAkJCX0KIAotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9SQVRFU19FWDoKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCQkJcCA9IHJhdGVzX3N0cjsKICNlbmRpZgogCQkJbmV0d29yay0+cmF0ZXNfZXhfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuLAogCQkJCQkJICAgIE1BWF9SQVRFU19FWF9MRU5HVEgpOwogCQkJZm9yIChpID0gMDsgaSA8IG5ldHdvcmstPnJhdGVzX2V4X2xlbjsgaSsrKSB7CiAJCQkJbmV0d29yay0+cmF0ZXNfZXhbaV0gPSBpbmZvX2VsZW1lbnQtPmRhdGFbaV07Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCQlwICs9IHNucHJpbnRmKHAsIHNpemVvZihyYXRlc19zdHIpIC0KIAkJCQkJICAgICAgKHAgLSByYXRlc19zdHIpLCAiJTAyWCAiLAogCQkJCQkgICAgICBuZXR3b3JrLT5yYXRlc1tpXSk7CkBAIC0xMjA5LDQ5ICsxMjA3LDQ5IEBACiAJCQkJfQogCQkJfQogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1JBVEVTX0VYOiAnJXMnICglZClcbiIsCisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2V4X2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9EU19TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0RTX1NFVDogJWRcbiIsCisJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0RTX1BBUkFNUzogJWRcbiIsCiAJCQkJCSAgICAgaW5mb19lbGVtZW50LT5kYXRhWzBdKTsKIAkJCW5ldHdvcmstPmNoYW5uZWwgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9GSF9TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0ZIX1NFVDogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfRkhfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0ZIX1BBUkFNUzogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DRl9TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0NGX1NFVDogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfQ0ZfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NGX1BBUkFNUzogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9USU06CisJCWNhc2UgV0xBTl9FSURfVElNOgogCQkJbmV0d29yay0+dGltLnRpbV9jb3VudCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPnRpbS50aW1fcGVyaW9kID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9USU06IHBhcnRpYWxseSBpZ25vcmVkXG4iKTsKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9USU06IHBhcnRpYWxseSBpZ25vcmVkXG4iKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0VSUF9JTkZPOgorCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgogCQkJbmV0d29yay0+ZXJwX3ZhbHVlID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfRVJQX1ZBTFVFOwogCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9FUlBfU0VUOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5lcnBfdmFsdWUpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfSUJTU19TRVQ6CisJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CiAJCQluZXR3b3JrLT5hdGltX3dpbmRvdyA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfSUJTU19TRVQ6ICVkXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0lCU1NfUEFSQU1TOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5hdGltX3dpbmRvdyk7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DSEFMTEVOR0U6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9HRU5FUklDOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9HRU5FUklDOiAlZCBieXRlc1xuIiwKKwkJY2FzZSBXTEFOX0VJRF9HRU5FUklDOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0dFTkVSSUM6ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCWlmICghaWVlZTgwMjExX3BhcnNlX3Fvc19pbmZvX3BhcmFtX0lFKGluZm9fZWxlbWVudCwKIAkJCQkJCQkgICAgICAgbmV0d29yaykpCkBAIC0xMjY5LDggKzEyNjcsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUlNOOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SU046ICVkIGJ5dGVzXG4iLAorCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9SU046ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCW5ldHdvcmstPnJzbl9pZV9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4gKyAyLAogCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CkBAIC0xMjc4LDIyICsxMjc2LDIyIEBACiAJCQkgICAgICAgbmV0d29yay0+cnNuX2llX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9RT1NfUEFSQU1FVEVSOgorCQljYXNlIFdMQU5fRUlEX1FPU19QQVJBTUVURVI6CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiUW9TIEVycm9yIG5lZWQgdG8gcGFyc2UgUU9TX1BBUkFNRVRFUiBJRVxuIik7CiAJCQlicmVhazsKIAkJCS8qIDgwMi4xMWggKi8KLQkJY2FzZSBNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVDoKKwkJY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDoKIAkJCW5ldHdvcmstPnBvd2VyX2NvbnN0cmFpbnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ1NBOgorCQljYXNlIFdMQU5fRUlEX0NIQU5ORUxfU1dJVENIOgogCQkJbmV0d29yay0+cG93ZXJfY29uc3RyYWludCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX0NTQTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1FVSUVUOgorCQljYXNlIFdMQU5fRUlEX1FVSUVUOgogCQkJbmV0d29yay0+cXVpZXQuY291bnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5xdWlldC5wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CiAJCQluZXR3b3JrLT5xdWlldC5kdXJhdGlvbiA9IGluZm9fZWxlbWVudC0+ZGF0YVsyXTsKQEAgLTEzMDEsNyArMTI5OSw3IEBACiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19RVUlFVDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0lCU1NfREZTOgorCQljYXNlIFdMQU5fRUlEX0lCU1NfREZTOgogCQkJaWYgKG5ldHdvcmstPmlic3NfZGZzKQogCQkJCWJyZWFrOwogCQkJbmV0d29yay0+aWJzc19kZnMgPSBrbWVtZHVwKGluZm9fZWxlbWVudC0+ZGF0YSwKQEAgLTEzMTIsNyArMTMxMCw3IEBACiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19JQlNTX0RGUzsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1RQQ19SRVBPUlQ6CisJCWNhc2UgV0xBTl9FSURfVFBDX1JFUE9SVDoKIAkJCW5ldHdvcmstPnRwY19yZXBvcnQudHJhbnNtaXRfcG93ZXIgPQogCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPnRwY19yZXBvcnQubGlua19tYXJnaW4gPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CkBAIC0xNTYxLDcgKzE1NTksNyBAQAogCX07CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICp0YXJnZXQ7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpvbGRlc3QgPSBOVUxMOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmluZm9fZWxlbWVudCA9IGJlYWNvbi0+aW5mb19lbGVtZW50OwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2MTUsNyArMTYxMyw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoKG9sZGVzdCA9PSBOVUxMKSB8fAotCQkgICAgKHRhcmdldC0+bGFzdF9zY2FubmVkIDwgb2xkZXN0LT5sYXN0X3NjYW5uZWQpKQorCQkgICAgdGltZV9iZWZvcmUodGFyZ2V0LT5sYXN0X3NjYW5uZWQsIG9sZGVzdC0+bGFzdF9zY2FubmVkKSkKIAkJCW9sZGVzdCA9IHRhcmdldDsKIAl9CiAKQEAgLTE2MzksNyArMTYzNyw3IEBACiAJCQlsaXN0X2RlbChpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0KTsKIAkJfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmsuc3NpZCwKIAkJCQkJCSBuZXR3b3JrLnNzaWRfbGVuKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCmluZGV4IGY3OGY1N2UuLjY1YTgxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKIAogLyoKIApAQCAtMjYwLDcgKzI2MCw2IEBACiAJaW50IGksIGJ5dGVzX3Blcl9mcmFnLCBucl9mcmFncywgYnl0ZXNfbGFzdF9mcmFnLCBmcmFnX3NpemUsCiAJICAgIHJ0c19yZXF1aXJlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZpZWVlLT5zdGF0czsKIAlpbnQgZW5jcnlwdCwgaG9zdF9lbmNyeXB0LCBob3N0X2VuY3J5cHRfbXNkdSwgaG9zdF9idWlsZF9pdjsKIAlfX2JlMTYgZXRoZXJfdHlwZTsKIAlpbnQgYnl0ZXMsIGZjLCBoZHJfbGVuOwpAQCAtMzA2LDcgKzMwNSw3IEBACiAKIAlpZiAoIWVuY3J5cHQgJiYgaWVlZS0+aWVlZTgwMl8xeCAmJgogCSAgICBpZWVlLT5kcm9wX3VuZW5jcnlwdGVkICYmIGV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfUEFFKSkgewotCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBzdWNjZXNzOwogCX0KIApAQCAtNTI2LDggKzUyNSw4IEBACiAJaWYgKHR4YikgewogCQlpbnQgcmV0ID0gKCppZWVlLT5oYXJkX3N0YXJ0X3htaXQpICh0eGIsIGRldiwgcHJpb3JpdHkpOwogCQlpZiAocmV0ID09IDApIHsKLQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCQlzdGF0cy0+dHhfYnl0ZXMgKz0gdHhiLT5wYXlsb2FkX3NpemU7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gdHhiLT5wYXlsb2FkX3NpemU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC01MzksOCArNTM4LDkgQEAKICAgICAgIGZhaWxlZDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfeG1pdCk7CiAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4Yl9mcmVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCmluZGV4IDMxZWEzYWIuLjNjMDgxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwpAQCAtMzUsMTMgKzM1LDI0IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKwogc3RhdGljIGNvbnN0IGNoYXIgKmllZWU4MDIxMV9tb2Rlc1tdID0gewogCSI/IiwgImEiLCAiYiIsICJhYiIsICJnIiwgImFnIiwgImJnIiwgImFiZyIKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVsYXBzZWRfamlmZmllc19tc2Vjcyh1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllczsKKworCWlmIChlbmQgPj0gc3RhcnQpCisJCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCAtIHN0YXJ0KTsKKworCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCArIChNQVhfSklGRllfT0ZGU0VUIC0gc3RhcnQpICsgMSk7Cit9CisKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJICAgICAgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsCkBAIC0yMTUsOCArMjI2LDggQEAKIAlpd2UuY21kID0gSVdFVkNVU1RPTTsKIAlwID0gY3VzdG9tOwogCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksCi0JCSAgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJICAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSk7CisJCSAgICAgICIgTGFzdCBiZWFjb246ICV1bXMgYWdvIiwKKwkJICAgICAgZWxhcHNlZF9qaWZmaWVzX21zZWNzKG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkpOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCiAJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7CkBAIC0yNzYsMTUgKzI4NywxNSBAQAogCQkgICAgdGltZV9hZnRlcihuZXR3b3JrLT5sYXN0X3NjYW5uZWQgKyBpZWVlLT5zY2FuX2FnZSwgamlmZmllcykpCiAJCQlldiA9IGllZWU4MDIxMV90cmFuc2xhdGVfc2NhbihpZWVlLCBldiwgc3RvcCwgbmV0d29yaywKIAkJCQkJCSAgICAgIGluZm8pOwotCQllbHNlCisJCWVsc2UgewogCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCVkbXMpLlxuIiwKKwkJCQkJICAgICAiJXBNKScgZHVlIHRvIGFnZSAoJXVtcykuXG4iLAogCQkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgbmV0d29yay0+c3NpZCwKIAkJCQkJCQkgbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPmJzc2lkLAotCQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCi0JCQkJCQkJICAgICAgbmV0d29yay0+Ci0JCQkJCQkJICAgICAgbGFzdF9zY2FubmVkKSk7CisJCQkJCSAgICAgZWxhcHNlZF9qaWZmaWVzX21zZWNzKAorCQkJCQkgICAgICAgICAgICAgICBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKKwkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCA0N2JlZTBlLi44MzA0ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC0xLDI2ICsxLDI5IEBACiBjb25maWcgSVdMV0lGSQotCXRyaXN0YXRlCi0KLWNvbmZpZyBJV0xDT1JFCi0JdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpZmkgQ29yZSIKKwl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lmaSIKIAlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBJV0xXSUZJCisJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIElXTFdJRklfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTIGlmIElXTFdJRklfTEVEUwogCXNlbGVjdCBSRktJTEwgaWYgSVdMV0lGSV9SRktJTEwKIAogY29uZmlnIElXTFdJRklfTEVEUwotCWJvb2wKLQlkZWZhdWx0IG4KKwlib29sICJFbmFibGUgTEVEIHN1cHBvcnQgaW4gaXdsYWduIGFuZCBpd2wzOTQ1IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBJV0xXSUZJCiAKIGNvbmZpZyBJV0xXSUZJX1JGS0lMTAotCWJvb2xlYW4gIkl3bHdpZmkgUkYga2lsbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVdMQ09SRQorCWJvb2wgIkVuYWJsZSBSRiBraWxsIHN1cHBvcnQgaW4gaXdsYWduIGFuZCBpd2wzOTQ1IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBJV0xXSUZJCisKK2NvbmZpZyBJV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCisJYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bGFnbiBkcml2ZXIiCisJZGVwZW5kcyBvbiBJV0xXSUZJCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2xhZ24gZHJpdmVyLgogCiBjb25maWcgSVdMV0lGSV9ERUJVRwotCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTENPUkUKKwlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bGFnbiBhbmQgaXdsMzk0NSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzCiAKQEAgLTQ0LDE2ICs0NywxNCBAQAogCSAgYW55IHByb2JsZW1zIHlvdSBtYXkgZW5jb3VudGVyLgogCiBjb25maWcgSVdMV0lGSV9ERUJVR0ZTCi0gICAgICAgIGJvb2wgIkl3bHdpZmkgZGVidWdmcyBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIElXTENPUkUgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCisgICAgICAgIGJvb2wgIml3bGFnbiBkZWJ1Z2ZzIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gSVdMV0lGSSAmJiBJV0xXSUZJX0RFQlVHICYmIE1BQzgwMjExX0RFQlVHRlMKICAgICAgICAgLS0taGVscC0tLQogCSAgRW5hYmxlIGNyZWF0aW9uIG9mIGRlYnVnZnMgZmlsZXMgZm9yIHRoZSBpd2x3aWZpIGRyaXZlcnMuCiAKIGNvbmZpZyBJV0xBR04KLQl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04iCi0JZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IElXTENPUkUKKwl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04gKGl3bGFnbikiCisJZGVwZW5kcyBvbiBJV0xXSUZJCiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRvIGJ1aWxkIHRoZSBkcml2ZXIgc3VwcG9ydGluZyB0aGU6CiAKQEAgLTc2LDE5ICs3Nyw2IEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bGFnbi5rby4KIAotY29uZmlnIElXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2xhZ24gZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMQUdOCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2xhZ24gZHJpdmVyLgotCi1jb25maWcgSVdMQUdOX0xFRFMKLQlib29sICJFbmFibGUgTEVEUyBmZWF0dXJlcyBpbiBpd2xhZ24gZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMQUdOCi0Jc2VsZWN0IElXTFdJRklfTEVEUwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgTEVEUyBmb3IgdGhlIGl3bGFnbiBkcml2ZXJzCi0KIAogY29uZmlnIElXTDQ5NjUKIAlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDQ5NjVBR04iCkBAIC05NywyMCArODUsMTQgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDQ5NjVBR04KIAogY29uZmlnIElXTDUwMDAKLQlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDUwMDBBR04iCisJYm9vbCAiSW50ZWwgV2lyZWxlc3MgV2lGaSA1MDAwQUdOOyBJbnRlbCBXaUZpIExpbmsgMTAwMCwgNjAwMCwgYW5kIDYwNTAgU2VyaWVzIgogCWRlcGVuZHMgb24gSVdMQUdOCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNTAwMEFHTiBGYW1pbHkKIAogY29uZmlnIElXTDM5NDUKLQl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBJV0xXSUZJCi0Jc2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgSVdMMzk0NV9MRURTCi0Jc2VsZWN0IExFRFNfQ0xBU1MgaWYgSVdMMzk0NV9MRURTCi0Jc2VsZWN0IFJGS0lMTCBpZiBJV0wzOTQ1X1JGS0lMTAorCXRyaXN0YXRlICJJbnRlbCBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24gKGl3bDM5NDUpIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOgogCkBAIC0xMzMsNDUgKzExNSw4IEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bDM5NDUua28uCiAKLWNvbmZpZyBJV0wzOTQ1X1JGS0lMTAotCWJvb2wgIkVuYWJsZSBSRiBraWxsIHN1cHBvcnQgaW4gaXdsMzk0NSBkcml2ZXJzIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCiBjb25maWcgSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlcnMiCisJYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bDM5NDUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMMzk0NQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGZvciB0aGUgaXdsMzk0NSBkcml2ZXIuCi0KLWNvbmZpZyBJV0wzOTQ1X0xFRFMKLQlib29sICJFbmFibGUgTEVEUyBmZWF0dXJlcyBpbiBpd2wzOTQ1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRFMgZm9yIHRoZSBpd2wzOTQ1IGRyaXZlci4KLQotY29uZmlnIElXTDM5NDVfREVCVUcKLQlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bDM5NDUgZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgaXdsMzk0NQotCSAgZHJpdmVyLgotCi0JICBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBrZXJuZWwgbW9kdWxlIGJlaW5nIH4xMDBrIGxhcmdlci4gIFlvdSBjYW4KLQkgIGNvbnRyb2wgd2hpY2ggZGVidWcgb3V0cHV0IGlzIHNlbnQgdG8gdGhlIGtlcm5lbCBsb2cgYnkgc2V0dGluZyB0aGUKLQkgIHZhbHVlIGluCi0KLQkgICAgICAgICAgL3N5cy9idXMvcGNpL2RyaXZlcnMvJHtEUklWRVJ9L2RlYnVnX2xldmVsCi0KLQkgIFRoaXMgZW50cnkgd2lsbCBvbmx5IGV4aXN0IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuCi0KLQkgIFRvIHNldCBhIHZhbHVlLCBzaW1wbHkgZWNobyBhbiA4LWJ5dGUgaGV4IHZhbHVlIHRvIHRoZSBzYW1lIGZpbGU6Ci0KLQkJICAlIGVjaG8gMHg0M2ZmZiA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzLyR7RFJJVkVSfS9kZWJ1Z19sZXZlbAotCi0JICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgZGVidWcgbWFzayB2YWx1ZXMgaW46Ci0JCSAgZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCi0KLQkgIElmIHRoaXMgaXMgeW91ciBmaXJzdCB0aW1lIHVzaW5nIHRoaXMgZHJpdmVyLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUKLQkgIGFzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYXNzaXN0IG90aGVycyBpbiBoZWxwaW5nIHlvdSByZXNvbHZlCi0JICBhbnkgcHJvYmxlbXMgeW91IG1heSBlbmNvdW50ZXIuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCmluZGV4IDBiZTllNmIuLmQ3OWQ5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQpAQCAtMSwyMCArMSwyMSBAQAotb2JqLSQoQ09ORklHX0lXTENPUkUpCSs9IGl3bGNvcmUubworb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bGNvcmUubwogaXdsY29yZS1vYmpzIAkJOj0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubyBpd2wtcG93ZXIubwogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vIGl3bC1jYWxpYi5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWRlYnVnZnMubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0xFRFMpICs9IGl3bC1sZWQubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX1JGS0lMTCkgKz0gaXdsLXJma2lsbC5vCi1pd2xjb3JlLSQoQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KK2l3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KIAogb2JqLSQoQ09ORklHX0lXTEFHTikJKz0gaXdsYWduLm8KLWl3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vIGl3bC1hZ24taGNtZC1jaGVjay5vCitpd2xhZ24tb2JqcwkJOj0gaXdsLWFnbi5vIGl3bC1hZ24tcnMubwogCiBpd2xhZ24tJChDT05GSUdfSVdMNDk2NSkgKz0gaXdsLTQ5NjUubwogaXdsYWduLSQoQ09ORklHX0lXTDUwMDApICs9IGl3bC01MDAwLm8KK2l3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtNjAwMC5vCitpd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTEwMDAubwogCiBvYmotJChDT05GSUdfSVdMMzk0NSkJKz0gaXdsMzk0NS5vCi1pd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubwotaXdsMzk0NS0kKENPTkZJR19JV0wzOTQ1X0xFRFMpICs9IGl3bC0zOTQ1LWxlZC5vCitpd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubyBpd2wtMzk0NS1sZWQubwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE1MmYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKyNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgorCisvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NQVggMgorCisvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCisjZGVmaW5lIElXTDEwMDBfVUNPREVfQVBJX01JTiAxCisKKyNkZWZpbmUgSVdMMTAwMF9GV19QUkUgIml3bHdpZmktMTAwMC0iCisjZGVmaW5lIF9JV0wxMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiMTAwMCBTZXJpZXMgQkdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0wxMDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDEwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDUwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAorCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmY0ZWI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29tbWFuZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCi0gKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCi0gKgotICogR1BMIExJQ0VOU0UgU1VNTUFSWQotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotICogVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqIEJTRCBMSUNFTlNFCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogUGxlYXNlIHVzZSB0aGlzIGZpbGUgKGl3bC0zOTQ1LWNvbW1hbmRzLmgpIG9ubHkgZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KLSAqIFBsZWFzZSB1c2UgaXdsLTM5NDUtaHcuaCBmb3IgaGFyZHdhcmUtcmVsYXRlZCBkZWZpbml0aW9ucy4KLSAqIFBsZWFzZSB1c2UgaXdsLTM5NDUuaCBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgotICovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9jb21tYW5kc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9jb21tYW5kc19oX18KLQotLyogdUNvZGUgdmVyc2lvbiBjb250YWlucyA0IHZhbHVlczogTWFqb3IvTWlub3IvQVBJL1NlcmlhbCAqLwotI2RlZmluZSBJV0xfVUNPREVfTUFKT1IodmVyKQkoKCh2ZXIpICYgMHhGRjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIElXTF9VQ09ERV9NSU5PUih2ZXIpCSgoKHZlcikgJiAweDAwRkYwMDAwKSA+PiAxNikKLSNkZWZpbmUgSVdMX1VDT0RFX0FQSSh2ZXIpCSgoKHZlcikgJiAweDAwMDBGRjAwKSA+PiA4KQotI2RlZmluZSBJV0xfVUNPREVfU0VSSUFMKHZlcikJKCh2ZXIpICYgMHgwMDAwMDBGRikKLQotZW51bSB7Ci0JUkVQTFlfQUxJVkUgPSAweDEsCi0JUkVQTFlfRVJST1IgPSAweDIsCi0KLQkvKiBSWE9OIGFuZCBRT1MgY29tbWFuZHMgKi8KLQlSRVBMWV9SWE9OID0gMHgxMCwKLQlSRVBMWV9SWE9OX0FTU09DID0gMHgxMSwKLQlSRVBMWV9RT1NfUEFSQU0gPSAweDEzLAotCVJFUExZX1JYT05fVElNSU5HID0gMHgxNCwKLQotCS8qIE11bHRpLVN0YXRpb24gc3VwcG9ydCAqLwotCVJFUExZX0FERF9TVEEgPSAweDE4LAotCVJFUExZX1JFTU9WRV9TVEEgPSAweDE5LAkvKiBub3QgdXNlZCAqLwotCVJFUExZX1JFTU9WRV9BTExfU1RBID0gMHgxYSwJLyogbm90IHVzZWQgKi8KLQotCS8qIFJYLCBUWCwgTEVEcyAqLwotCVJFUExZXzM5NDVfUlggPSAweDFiLAkJLyogMzk0NSBvbmx5ICovCi0JUkVQTFlfVFggPSAweDFjLAotCVJFUExZX1JBVEVfU0NBTEUgPSAweDQ3LAkvKiAzOTQ1IG9ubHkgKi8KLQlSRVBMWV9MRURTX0NNRCA9IDB4NDgsCi0JUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCA9IDB4NGUsIC8qIDQ5NjUgb25seSAqLwotCi0JLyogODAyLjExaCByZWxhdGVkICovCi0JUkFEQVJfTk9USUZJQ0FUSU9OID0gMHg3MCwJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9RVUlFVF9DTUQgPSAweDcxLAkJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9DSEFOTkVMX1NXSVRDSCA9IDB4NzIsCi0JQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OID0gMHg3MywKLQlSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQgPSAweDc0LAotCVNQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OID0gMHg3NSwKLQotCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KLQlQT1dFUl9UQUJMRV9DTUQgPSAweDc3LAotCVBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EsCi0JUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMgPSAweDdCLAotCi0JLyogU2NhbiBjb21tYW5kcyBhbmQgbm90aWZpY2F0aW9ucyAqLwotCVJFUExZX1NDQU5fQ01EID0gMHg4MCwKLQlSRVBMWV9TQ0FOX0FCT1JUX0NNRCA9IDB4ODEsCi0JU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gPSAweDgyLAotCVNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gPSAweDgzLAotCVNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCwKLQotCS8qIElCU1MvQVAgY29tbWFuZHMgKi8KLQlCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCwKLQlSRVBMWV9UWF9CRUFDT04gPSAweDkxLAotCVdIT19JU19BV0FLRV9OT1RJRklDQVRJT04gPSAweDk0LAkvKiBub3QgdXNlZCAqLwotCi0JLyogTWlzY2VsbGFuZW91cyBjb21tYW5kcyAqLwotCVFVSUVUX05PVElGSUNBVElPTiA9IDB4OTYsCQkvKiBub3QgdXNlZCAqLwotCVJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3LAotCU1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OID0gMHg5OSwJLyogbm90IHVzZWQgKi8KLQotCS8qIEJsdWV0b290aCBkZXZpY2UgY29leGlzdGVuY2UgY29uZmlnIGNvbW1hbmQgKi8KLQlSRVBMWV9CVF9DT05GSUcgPSAweDliLAotCi0JLyogU3RhdGlzdGljcyAqLwotCVJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLQlTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQsCi0KLQkvKiBSRi1LSUxMIGNvbW1hbmRzIGFuZCBub3RpZmljYXRpb25zICovCi0JUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwLAotCUNBUkRfU1RBVEVfTk9USUZJQ0FUSU9OID0gMHhhMSwKLQotCS8qIE1pc3NlZCBiZWFjb25zIG5vdGlmaWNhdGlvbiAqLwotCU1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTiA9IDB4YTIsCi0KLQlSRVBMWV9NQVggPSAweGZmCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMCkKLSAqIENvbW1vbmx5IHVzZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnM6Ci0gKiBDb21tYW5kIGhlYWRlciwgdHhwb3dlcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogaXdsMzk0NV9jbWRfaGVhZGVyIGZsYWdzIHZhbHVlICovCi0jZGVmaW5lIElXTF9DTURfRkFJTEVEX01TSyAweDQwCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfY21kX2hlYWRlcgotICoKLSAqIFRoaXMgaGVhZGVyIGZvcm1hdCBhcHBlYXJzIGluIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjb21tYW5kIHNlbnQgZnJvbSB0aGUKLSAqIGRyaXZlciwgYW5kIGVhY2ggcmVzcG9uc2Uvbm90aWZpY2F0aW9uIHJlY2VpdmVkIGZyb20gdUNvZGUuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgewotCXU4IGNtZDsJCS8qIENvbW1hbmQgSUQ6ICBSRVBMWV9SWE9OLCBldGMuICovCi0JdTggZmxhZ3M7CS8qIElXTF9DTURfKiAqLwotCS8qCi0JICogVGhlIGRyaXZlciBzZXRzIHVwIHRoZSBzZXF1ZW5jZSBudW1iZXIgdG8gdmFsdWVzIG9mIGl0cyBjaG9vc2luZy4KLQkgKiB1Q29kZSBkb2VzIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYnV0IHBhc3NlcyBpdCBiYWNrIHRvIHRoZSBkcml2ZXIKLQkgKiB3aGVuIHNlbmRpbmcgdGhlIHJlc3BvbnNlIHRvIGVhY2ggZHJpdmVyLW9yaWdpbmF0ZWQgY29tbWFuZCwgc28KLQkgKiB0aGUgZHJpdmVyIGNhbiBtYXRjaCB0aGUgcmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQuICBTaW5jZSB0aGUgdmFsdWVzCi0JICogZG9uJ3QgZ2V0IHVzZWQgYnkgdUNvZGUsIHRoZSBkcml2ZXIgbWF5IHNldCB1cCBhbiBhcmJpdHJhcnkgZm9ybWF0LgotCSAqCi0JICogVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogIHVDb2RlIHNldHMgYml0IDE1IHdoZW4gaXQgb3JpZ2luYXRlcwotCSAqIHRoZSByZXNwb25zZS9ub3RpZmljYXRpb24sIGkuZS4gd2hlbiB0aGUgcmVzcG9uc2Uvbm90aWZpY2F0aW9uCi0JICogaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGEgY29tbWFuZCBzZW50IGJ5IHRoZSBkcml2ZXIuICBGb3IKLQkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfMzk0NV9SWCB3aGVuIGl0IHNlbmRzIGEgcmVjZWl2ZWQgZnJhbWUKLQkgKiB0byB0aGUgZHJpdmVyOyBpdCBpcyBub3QgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYW55IGRyaXZlciBjb21tYW5kLgotCSAqCi0JICogVGhlIExpbnV4IGRyaXZlciB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotCSAqCi0JICogIDA6NyAgICBpbmRleC9wb3NpdGlvbiB3aXRoaW4gVHggcXVldWUKLQkgKiAgODoxMyAgIFR4IHF1ZXVlIHNlbGVjdGlvbgotCSAqIDE0OjE0ICAgZHJpdmVyIHNldHMgdGhpcyB0byBpbmRpY2F0ZSBjb21tYW5kIGlzIGluIHRoZSAnaHVnZScKLQkgKiAgICAgICAgIHN0b3JhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBidWZmZXJzLCBpLmUuIHNjYW4gY21kCi0JICogMTU6MTUgICB1Q29kZSBzZXRzIHRoaXMgaW4gdUNvZGUtb3JpZ2luYXRlZCByZXNwb25zZS9ub3RpZmljYXRpb24KLQkgKi8KLQlfX2xlMTYgc2VxdWVuY2U7Ci0KLQkvKiBjb21tYW5kIG9yIHJlc3BvbnNlL25vdGlmaWNhdGlvbiBkYXRhIGZvbGxvd3MgaW1tZWRpYXRlbHkgKi8KLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICoKLSAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKLSAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAotICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAotICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCi0gKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCi0gKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgotICoKLSAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7Ci0JdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLwotCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKLQl1OCByYXRlOwkJLyogcGxjcCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMGEpCi0gKiBBbGl2ZSBhbmQgRXJyb3IgQ29tbWFuZHMgJiBSZXNwb25zZXM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFVDT0RFX1ZBTElEX09LCWNwdV90b19sZTMyKDB4MSkKLSNkZWZpbmUgSU5JVElBTElaRV9TVUJUWVBFICAgICg5KQotCi0vKgotICogKCJJbml0aWFsaXplIikgUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiBvbmNlIHRoZSBpbml0aWFsaXphdGlvbgotICogdUNvZGUgaW1hZ2UgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgYW5kIGlzIHJlYWR5IHRvIGxvYWQgdGhlIHJ1bnRpbWUgaW1hZ2UuCi0gKiBUaGlzIGlzIHRoZSAqZmlyc3QqICJhbGl2ZSIgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciB3aWxsIHJlY2VpdmUgYWZ0ZXIKLSAqIHJlYm9vdGluZyB1Q29kZTsgdGhlICJpbml0aWFsaXplIiBhbGl2ZSBpcyBpbmRpY2F0ZWQgYnkgc3VidHlwZSBmaWVsZCA9PSA5LgotICoKLSAqIFNlZSBjb21tZW50cyBkb2N1bWVudGluZyAiQlNNIiAoYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUpLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3AgewotCXU4IHVjb2RlX21pbm9yOwotCXU4IHVjb2RlX21ham9yOwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JdTggc3dfcmV2WzhdOwotCXU4IHZlcl90eXBlOwotCXU4IHZlcl9zdWJ0eXBlOwkJCS8qICI5IiBmb3IgaW5pdGlhbGl6ZSBhbGl2ZSAqLwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JX19sZTMyIGxvZ19ldmVudF90YWJsZV9wdHI7Ci0JX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsKLQlfX2xlMzIgdGltZXN0YW1wOwotCV9fbGUzMiBpc192YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qKgotICogUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImFsaXZlIiBub3RpZmljYXRpb24gb25jZSB0aGUgcnVudGltZSBpbWFnZSBpcyByZWFkeQotICogdG8gcmVjZWl2ZSBjb21tYW5kcyBmcm9tIHRoZSBkcml2ZXIuICBUaGlzIGlzIHRoZSAqc2Vjb25kKiAiYWxpdmUiCi0gKiBub3RpZmljYXRpb24gdGhhdCB0aGUgZHJpdmVyIHdpbGwgcmVjZWl2ZSBhZnRlciByZWJvb3RpbmcgdUNvZGU7Ci0gKiB0aGlzICJhbGl2ZSIgaXMgaW5kaWNhdGVkIGJ5IHN1YnR5cGUgZmllbGQgIT0gOS4KLSAqCi0gKiBTZWUgY29tbWVudHMgZG9jdW1lbnRpbmcgIkJTTSIgKGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lKS4KLSAqCi0gKiBUaGlzIHJlc3BvbnNlIGluY2x1ZGVzIHR3byBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgZGV2aWNlJ3MKLSAqIGRhdGEgU1JBTSAoYWNjZXNzIHZpYSBIQlVTX1RBUkdfTUVNXyogcmVncykgdGhhdCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmc6Ci0gKgotICogMSkgIGxvZ19ldmVudF90YWJsZV9wdHIgaW5kaWNhdGVzIGJhc2Ugb2YgdGhlIGV2ZW50IGxvZy4gIFRoaXMgdHJhY2VzCi0gKiAgICAgYSAyNTYtZW50cnkgaGlzdG9yeSBvZiB1Q29kZSBleGVjdXRpb24gd2l0aGluIGEgY2lyY3VsYXIgYnVmZmVyLgotICoKLSAqIDIpICBlcnJvcl9ldmVudF90YWJsZV9wdHIgaW5kaWNhdGVzIGJhc2Ugb2YgdGhlIGVycm9yIGxvZy4gIFRoaXMgY29udGFpbnMKLSAqICAgICBpbmZvcm1hdGlvbiBhYm91dCBhbnkgdUNvZGUgZXJyb3IgdGhhdCBvY2N1cnMuCi0gKgotICogVGhlIExpbnV4IGRyaXZlciBjYW4gcHJpbnQgYm90aCBsb2dzIHRvIHRoZSBzeXN0ZW0gbG9nIHdoZW4gYSB1Q29kZSBlcnJvcgotICogb2NjdXJzLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwIHsKLQl1OCB1Y29kZV9taW5vcjsKLQl1OCB1Y29kZV9tYWpvcjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN3X3Jldls4XTsKLQl1OCB2ZXJfdHlwZTsKLQl1OCB2ZXJfc3VidHlwZTsJCQkvKiBub3QgIjkiIGZvciBydW50aW1lIGFsaXZlICovCi0JX19sZTE2IHJlc2VydmVkMjsKLQlfX2xlMzIgbG9nX2V2ZW50X3RhYmxlX3B0cjsJLyogU1JBTSBhZGRyZXNzIGZvciBldmVudCBsb2cgKi8KLQlfX2xlMzIgZXJyb3JfZXZlbnRfdGFibGVfcHRyOwkvKiBTUkFNIGFkZHJlc3MgZm9yIGVycm9yIGxvZyAqLwotCV9fbGUzMiB0aW1lc3RhbXA7Ci0JX19sZTMyIGlzX3ZhbGlkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXVuaW9uIHRzZiB7Ci0JdTggYnl0ZVs4XTsKLQlfX2xlMTYgd29yZFs0XTsKLQlfX2xlMzIgZHdbMl07Ci19OwotCi0vKgotICogUkVQTFlfRVJST1IgPSAweDIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2Vycm9yX3Jlc3AgewotCV9fbGUzMiBlcnJvcl90eXBlOwotCXU4IGNtZF9pZDsKLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IGJhZF9jbWRfc2VxX251bTsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotCV9fbGUzMiBlcnJvcl9pbmZvOwotCXVuaW9uIHRzZiB0aW1lc3RhbXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEpCi0gKiBSWE9OIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJ4IGNvbmZpZyBkZWZpbmVzICYgc3RydWN0dXJlCi0gKi8KLS8qIHJ4X2NvbmZpZyBkZXZpY2UgdHlwZXMgICovCi1lbnVtIHsKLQlSWE9OX0RFVl9UWVBFX0FQID0gMSwKLQlSWE9OX0RFVl9UWVBFX0VTUyA9IDMsCi0JUlhPTl9ERVZfVFlQRV9JQlNTID0gNCwKLQlSWE9OX0RFVl9UWVBFX1NOSUZGRVIgPSA2LAotfTsKLQotLyogcnhfY29uZmlnIGZsYWdzICovCi0vKiBiYW5kICYgbW9kdWxhdGlvbiBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgUlhPTl9GTEdfQkFORF8yNEdfTVNLICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDApCi0jZGVmaW5lIFJYT05fRkxHX0NDS19NU0sgICAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAxKQotLyogYXV0byBkZXRlY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAyKQotLyogVEdnIHByb3RlY3Rpb24gd2hlbiB0eCAqLwotI2RlZmluZSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0sgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMykKLS8qIGNjayBzaG9ydCBzbG90ICYgcHJlYW1ibGUgKi8KLSNkZWZpbmUgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0sgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA0KQotI2RlZmluZSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0sgICAgIGNwdV90b19sZTMyKDEgPDwgNSkKLS8qIGFudGVubmEgc2VsZWN0aW9uICovCi0jZGVmaW5lIFJYT05fRkxHX0RJU19ESVZfTVNLICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA3KQotI2RlZmluZSBSWE9OX0ZMR19BTlRfU0VMX01TSyAgICAgICAgICAgIGNwdV90b19sZTMyKDB4MGYwMCkKLSNkZWZpbmUgUlhPTl9GTEdfQU5UX0FfTVNLICAgICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDgpCi0jZGVmaW5lIFJYT05fRkxHX0FOVF9CX01TSyAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA5KQotLyogcmFkYXIgZGV0ZWN0aW9uIGVuYWJsZSAqLwotI2RlZmluZSBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLICAgICAgIGNwdV90b19sZTMyKDEgPDwgMTIpCi0jZGVmaW5lIFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0sgICAgY3B1X3RvX2xlMzIoMSA8PCAxMykKLS8qIHJ4IHJlc3BvbnNlIHRvIGhvc3Qgd2l0aCA4LWJ5dGUgVFNGCi0qIChhY2NvcmRpbmcgdG8gT05fQUlSIGRlYXNzZXJ0aW9uKSAqLwotI2RlZmluZSBSWE9OX0ZMR19UU0YySE9TVF9NU0sgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMTUpCi0KLS8qIHJ4X2NvbmZpZyBmaWx0ZXIgZmxhZ3MgKi8KLS8qIGFjY2VwdCBhbGwgZGF0YSBmcmFtZXMgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDApCi0vKiBwYXNzIGNvbnRyb2wgJiBtYW5hZ2VtZW50IHRvIGhvc3QgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDEpCi0vKiBhY2NlcHQgbXVsdGktY2FzdCAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSyAgICAgIGNwdV90b19sZTMyKDEgPDwgMikKLS8qIGRvbid0IGRlY3J5cHQgdW5pLWNhc3QgZnJhbWVzICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSyAgICAgY3B1X3RvX2xlMzIoMSA8PCAzKQotLyogZG9uJ3QgZGVjcnlwdCBtdWx0aS1jYXN0IGZyYW1lcyAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9ESVNfR1JQX0RFQ1JZUFRfTVNLIGNwdV90b19sZTMyKDEgPDwgNCkKLS8qIFNUQSBpcyBhc3NvY2lhdGVkICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0FTU09DX01TSyAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA1KQotLyogdHJhbnNmZXIgdG8gaG9zdCBub24gYnNzaWQgYmVhY29ucyBpbiBhc3NvY2lhdGVkIHN0YXRlICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLICAgICAgY3B1X3RvX2xlMzIoMSA8PCA2KQotCi0vKioKLSAqIFJFUExZX1JYT04gPSAweDEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogUlhPTiB0dW5lcyB0aGUgcmFkaW8gdHVuZXIgdG8gYSBzZXJ2aWNlIGNoYW5uZWwsIGFuZCBzZXRzIHVwIGEgbnVtYmVyCi0gKiBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBSeCwgYnV0IGFsc28gZm9yIFR4IG9wZXJhdGlvbnMuCi0gKgotICogTk9URTogIFdoZW4gdHVuaW5nIHRvIGEgbmV3IGNoYW5uZWwsIGRyaXZlciBtdXN0IHNldCB0aGUKLSAqICAgICAgICBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgdG8gMC4gIFRoaXMgd2lsbCBjbGVhciBzdGF0aW9uLWRlcGVuZGVudAotICogICAgICAgIGluZm8gd2l0aGluIHRoZSBkZXZpY2UsIGluY2x1ZGluZyB0aGUgc3RhdGlvbiB0YWJsZXMsIHR4IHJldHJ5Ci0gKiAgICAgICAgcmF0ZSB0YWJsZXMsIGFuZCB0eHBvd2VyIHRhYmxlcy4gIERyaXZlciBtdXN0IGJ1aWxkIGEgbmV3IHN0YXRpb24KLSAqICAgICAgICB0YWJsZSBhbmQgdHhwb3dlciB0YWJsZSBiZWZvcmUgdHJhbnNtaXR0aW5nIGFueXRoaW5nIG9uIHRoZSBSWE9OCi0gKiAgICAgICAgY2hhbm5lbC4KLSAqCi0gKiBOT1RFOiAgQWxsIFJYT05zIHdpcGUgY2xlYW4gdGhlIGludGVybmFsIHR4cG93ZXIgdGFibGUuICBEcml2ZXIgbXVzdAotICogICAgICAgIGlzc3VlIGEgbmV3IFJFUExZX1RYX1BXUl9UQUJMRV9DTUQgYWZ0ZXIgZWFjaCBSRVBMWV9SWE9OICgweDEwKSwKLSAqICAgICAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgUlhPTl9GSUxURVJfQVNTT0NfTVNLIGlzIHNldC4KLSAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgewotCXU4IG5vZGVfYWRkcls2XTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IGJzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMjsKLQl1OCB3bGFwX2Jzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMzsKLQl1OCBkZXZfdHlwZTsKLQl1OCBhaXJfcHJvcGFnYXRpb247Ci0JX19sZTE2IHJlc2VydmVkNDsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHJlc2VydmVkNTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfUlhPTl9BU1NPQyA9IDB4MTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgewotCV9fbGUzMiBmbGFnczsKLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwotCXU4IG9mZG1fYmFzaWNfcmF0ZXM7Ci0JdTggY2NrX2Jhc2ljX3JhdGVzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfUlhPTl9USU1JTkcgPSAweDE0IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgewotCXVuaW9uIHRzZiB0aW1lc3RhbXA7Ci0JX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKLQlfX2xlMTYgYXRpbV93aW5kb3c7Ci0JX19sZTMyIGJlYWNvbl9pbml0X3ZhbDsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7Ci0JdTggYmFuZDsKLQl1OCBleHBlY3RfYmVhY29uOwotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUzMiByeG9uX2ZsYWdzOwotCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKLQlfX2xlMzIgc3dpdGNoX3RpbWU7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTiA9IDB4NzMgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIHsKLQlfX2xlMTYgYmFuZDsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMCAtIE9LLCAxIC0gZmFpbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgyKQotICogUXVhbGl0eS1vZi1TZXJ2aWNlIChRT1MpIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaXdsX2FjX3FvcyAtLSBRT1MgdGltaW5nIHBhcmFtcyBmb3IgUkVQTFlfUU9TX1BBUkFNCi0gKiBPbmUgZm9yIGVhY2ggb2YgNCBFRENBIGFjY2VzcyBjYXRlZ29yaWVzIGluIHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kCi0gKgotICogQGN3X21pbjogQ29udGVudGlvbiB3aW5kb3csIHN0YXJ0IHZhbHVlIGluIG51bWJlcnMgb2Ygc2xvdHMuCi0gKiAgICAgICAgICBTaG91bGQgYmUgYSBwb3dlci1vZi0yLCBtaW51cyAxLiAgRGV2aWNlJ3MgZGVmYXVsdCBpcyAweDBmLgotICogQGN3X21heDogQ29udGVudGlvbiB3aW5kb3csIG1heCB2YWx1ZSBpbiBudW1iZXJzIG9mIHNsb3RzLgotICogICAgICAgICAgU2hvdWxkIGJlIGEgcG93ZXItb2YtMiwgbWludXMgMS4gIERldmljZSdzIGRlZmF1bHQgaXMgMHgzZi4KLSAqIEBhaWZzbjogIE51bWJlciBvZiBzbG90cyBpbiBBcmJpdHJhdGlvbiBJbnRlcmZyYW1lIFNwYWNlIChiZWZvcmUKLSAqICAgICAgICAgIHBlcmZvcm1pbmcgcmFuZG9tIGJhY2tvZmYgdGltaW5nIHByaW9yIHRvIFR4KS4gIERldmljZSBkZWZhdWx0IDEuCi0gKiBAZWRjYV90eG9wOiAgTGVuZ3RoIG9mIFR4IG9wcG9ydHVuaXR5LCBpbiB1U2Vjcy4gIERldmljZSBkZWZhdWx0IGlzIDAuCi0gKgotICogRGV2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNyZWFzZSBjb250ZW50aW9uIHdpbmRvdyBieSAoMipDVykgKyAxIGZvciBlYWNoCi0gKiB0cmFuc21pc3Npb24gcmV0cnkuICBEZXZpY2UgdXNlcyBjd19tYXggYXMgYSBiaXQgbWFzaywgQU5EZWQgd2l0aCBuZXcgQ1cKLSAqIHZhbHVlLCB0byBjYXAgdGhlIENXIHZhbHVlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9hY19xb3MgewotCV9fbGUxNiBjd19taW47Ci0JX19sZTE2IGN3X21heDsKLQl1OCBhaWZzbjsKLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IGVkY2FfdHhvcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBRb1MgZmxhZ3MgZGVmaW5lcyAqLwotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSwljcHVfdG9fbGUzMigweDAxKQotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1RHTl9NU0sJCWNwdV90b19sZTMyKDB4MDIpCi0jZGVmaW5lIFFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSwljcHVfdG9fbGUzMigweDEwKQotCi0vKiBOdW1iZXIgb2YgQWNjZXNzIENhdGVnb3JpZXMgKEFDKSAoRURDQSksIHF1ZXVlcyAwLi4zICovCi0jZGVmaW5lIEFDX05VTSAgICAgICAgICAgICAgICA0Ci0KLS8qCi0gKiBSRVBMWV9RT1NfUEFSQU0gPSAweDEzIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogVGhpcyBjb21tYW5kIHNldHMgdXAgdGltaW5ncyBmb3IgZWFjaCBvZiB0aGUgNCBwcmlvcml0aXplZCBFRENBIFR4IEZJRk9zCi0gKiAwOiBCYWNrZ3JvdW5kLCAxOiBCZXN0IEVmZm9ydCwgMjogVmlkZW8sIDM6IFZvaWNlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgewotCV9fbGUzMiBxb3NfZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfYWNfcW9zIGFjW0FDX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDMpCi0gKiBBZGQvTW9kaWZ5IFN0YXRpb25zIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBNdWx0aSBzdGF0aW9uIHN1cHBvcnQKLSAqLwotCi0vKiBTcGVjaWFsLCBkZWRpY2F0ZWQgbG9jYXRpb25zIHdpdGhpbiBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCi0jZGVmaW5lCUlXTF9BUF9JRAkJMAotI2RlZmluZSBJV0xfTVVMVElDQVNUX0lECTEKLSNkZWZpbmUJSVdMX1NUQV9JRAkJMgotI2RlZmluZQlJV0wzOTQ1X0JST0FEQ0FTVF9JRAkyNAotI2RlZmluZSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQJMjUKLQotI2RlZmluZQlJV0xfU1RBVElPTl9DT1VOVAkzMiAJLyogTUFYKDM5NDUsNDk2NSkqLwotI2RlZmluZQlJV0xfSU5WQUxJRF9TVEFUSU9OIAkyNTUKLQotI2RlZmluZSBTVEFfRkxHX1RYX1JBVEVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDIpOwotI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKLQotLyogVXNlIGluIG1vZGUgZmllbGQuICAxOiBtb2RpZnkgZXhpc3RpbmcgZW50cnksIDA6IGFkZCBuZXcgc3RhdGlvbiBlbnRyeSAqLwotI2RlZmluZSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLCQkweDAxCi0KLS8qIGtleSBmbGFncyBfX2xlMTYqLwotI2RlZmluZSBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSwljcHVfdG9fbGUxNigweDAwMDcpCi0jZGVmaW5lIFNUQV9LRVlfRkxHX05PX0VOQwljcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1dFUAkJY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBTVEFfS0VZX0ZMR19DQ01QCWNwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgU1RBX0tFWV9GTEdfVEtJUAljcHVfdG9fbGUxNigweDAwMDMpCi0KLSNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZSURfUE9TCTgKLSNkZWZpbmUgU1RBX0tFWV9GTEdfSU5WQUxJRCAJY3B1X3RvX2xlMTYoMHgwODAwKQotLyogd2VwIGtleSBpcyBlaXRoZXIgZnJvbSBnbG9iYWwga2V5ICgwKSBvciBmcm9tIHN0YXRpb24gaW5mbyBhcnJheSAoMSkgKi8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfV0VQX0tFWV9NQVBfTVNLICBjcHVfdG9fbGUxNigweDAwMDgpCi0KLS8qIHdlcCBrZXkgaW4gU1RBOiA1LWJ5dGVzICgwKSBvciAxMy1ieXRlcyAoMSkgKi8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZX1NJWkVfTVNLICAgICBjcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFNUQV9LRVlfTVVMVElDQVNUX01TSyAgICAgICAgY3B1X3RvX2xlMTYoMHg0MDAwKQotCi0vKiBGbGFncyBpbmRpY2F0ZSB3aGV0aGVyIHRvIG1vZGlmeSB2cy4gZG9uJ3QgY2hhbmdlIHZhcmlvdXMgc3RhdGlvbiBwYXJhbXMgKi8KLSNkZWZpbmUJU1RBX01PRElGWV9LRVlfTUFTSwkJMHgwMQotI2RlZmluZQlTVEFfTU9ESUZZX1RJRF9ESVNBQkxFX1RYCTB4MDIKLSNkZWZpbmUJU1RBX01PRElGWV9UWF9SQVRFX01TSwkJMHgwNAotCi0vKgotICogQW50ZW5uYSBtYXNrczoKLSAqIGJpdDE0OjE1IDAxIEIgaW5hY3RpdmUsIEEgYWN0aXZlCi0gKiAgICAgICAgICAxMCBCIGFjdGl2ZSwgQSBpbmFjdGl2ZQotICogICAgICAgICAgMTEgQm90aCBhY3RpdmUKLSAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfQV9QT1MJMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfUE9TCTE1Ci0jZGVmaW5lIFJBVEVfTUNTX0FOVF9BX01TSwkweDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLCTB4ODAwMAotI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCTB4YzAwMAotCi1zdHJ1Y3QgaXdsMzk0NV9rZXlpbmZvIHsKLQlfX2xlMTYga2V5X2ZsYWdzOwotCXU4IHRraXBfcnhfdHNjX2J5dGUyOwkvKiBUU0NbMl0gZm9yIGtleSBtaXggcGgxIGRldGVjdGlvbiAqLwotCXU4IHJlc2VydmVkMTsKLQlfX2xlMTYgdGtpcF9yeF90dGFrWzVdOwkvKiAxMC1ieXRlIHVuaWNhc3QgVEtJUCBUVEFLICovCi0JdTgga2V5X29mZnNldDsKLQl1OCByZXNlcnZlZDI7Ci0JdTgga2V5WzE2XTsJCS8qIDE2LWJ5dGUgdW5pY2FzdCBkZWNyeXB0aW9uIGtleSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IHN0YV9pZF9tb2RpZnkKLSAqIEBhZGRyW0VUSF9BTEVOXTogc3RhdGlvbidzIE1BQyBhZGRyZXNzCi0gKiBAc3RhX2lkOiBpbmRleCBvZiBzdGF0aW9uIGluIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZQotICogQG1vZGlmeV9tYXNrOiBTVEFfTU9ESUZZXyosIDE6IG1vZGlmeSwgMDogZG9uJ3QgY2hhbmdlCi0gKgotICogRHJpdmVyIHNlbGVjdHMgdW51c2VkIHRhYmxlIGluZGV4IHdoZW4gYWRkaW5nIG5ldyBzdGF0aW9uLAotICogb3IgdGhlIGluZGV4IHRvIGEgcHJlLWV4aXN0aW5nIHN0YXRpb24gZW50cnkgd2hlbiBtb2RpZnlpbmcgdGhhdCBzdGF0aW9uLgotICogU29tZSBpbmRleGVzIGhhdmUgc3BlY2lhbCBwdXJwb3NlcyAoSVdMX0FQX0lELCBpbmRleCAwLCBpcyBmb3IgQVApLgotICoKLSAqIG1vZGlmeV9tYXNrIGZsYWdzIHNlbGVjdCB3aGljaCBwYXJhbWV0ZXJzIHRvIG1vZGlmeSB2cy4gbGVhdmUgYWxvbmUuCi0gKi8KLXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHsKLQl1OCBhZGRyW0VUSF9BTEVOXTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN0YV9pZDsKLQl1OCBtb2RpZnlfbWFzazsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9BRERfU1RBID0gMHgxOCAoY29tbWFuZCkKLSAqCi0gKiBUaGUgZGV2aWNlIGNvbnRhaW5zIGFuIGludGVybmFsIHRhYmxlIG9mIHBlci1zdGF0aW9uIGluZm9ybWF0aW9uLAotICogd2l0aCBpbmZvIG9uIHNlY3VyaXR5IGtleXMsIGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMsIGFuZCBUeCByYXRlcyBmb3IKLSAqIGluaXRpYWwgVHggYXR0ZW1wdCBhbmQgYW55IHJldHJpZXMgKDQ5NjUgdXNlcyBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAotICogMzk0NSB1c2VzIFJFUExZX1JBVEVfU0NBTEUgdG8gc2V0IHVwIHJhdGUgdGFibGVzKS4KLSAqCi0gKiBSRVBMWV9BRERfU1RBIHNldHMgdXAgdGhlIHRhYmxlIGVudHJ5IGZvciBvbmUgc3RhdGlvbiwgZWl0aGVyIGNyZWF0aW5nCi0gKiBhIG5ldyBlbnRyeSwgb3IgbW9kaWZ5aW5nIGEgcHJlLWV4aXN0aW5nIG9uZS4KLSAqCi0gKiBOT1RFOiAgUlhPTiBjb21tYW5kICh3aXRob3V0ICJhc3NvY2lhdGVkIiBiaXQgc2V0KSB3aXBlcyB0aGUgc3RhdGlvbiB0YWJsZQotICogICAgICAgIGNsZWFuLiAgTW92aW5nIGludG8gUkZfS0lMTCBzdGF0ZSBkb2VzIHRoaXMgYWxzby4gIERyaXZlciBtdXN0IHNldCB1cAotICogICAgICAgIG5ldyBzdGF0aW9uIHRhYmxlIGJlZm9yZSB0cmFuc21pdHRpbmcgYW55dGhpbmcgb24gdGhlIFJYT04gY2hhbm5lbAotICogICAgICAgIChleGNlcHQgYWN0aXZlIHNjYW5zIG9yIGFjdGl2ZSBtZWFzdXJlbWVudHM7IHRob3NlIGNvbW1hbmRzIGNhcnJ5Ci0gKiAgICAgICAgdGhlaXIgb3duIHR4cG93ZXIvcmF0ZSBzZXR1cCBkYXRhKS4KLSAqCi0gKiAgICAgICAgV2hlbiBnZXR0aW5nIHN0YXJ0ZWQgb24gYSBuZXcgY2hhbm5lbCwgZHJpdmVyIG11c3Qgc2V0IHVwIHRoZQotICogICAgICAgIElXTF9CUk9BRENBU1RfSUQgZW50cnkgKGxhc3QgZW50cnkgaW4gdGhlIHRhYmxlKS4gIEZvciBhIGNsaWVudAotICogICAgICAgIHN0YXRpb24gaW4gYSBCU1MsIG9uY2UgYW4gQVAgaXMgc2VsZWN0ZWQsIGRyaXZlciBzZXRzIHVwIHRoZSBBUCBTVEEKLSAqICAgICAgICBpbiB0aGUgSVdMX0FQX0lEIGVudHJ5ICgxc3QgZW50cnkgaW4gdGhlIHRhYmxlKS4gIEJST0FEQ0FTVCBhbmQgQVAKLSAqICAgICAgICBhcmUgYWxsIHRoYXQgYXJlIG5lZWRlZCBmb3IgYSBCU1MgY2xpZW50IHN0YXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCi0gKiAgICAgICAgdXNlZCBhcyBBUCwgb3IgaW4gYW4gSUJTUyBuZXR3b3JrLCBkcml2ZXIgbXVzdCBzZXQgdXAgc3RhdGlvbiB0YWJsZQotICogICAgICAgIGVudHJpZXMgZm9yIGFsbCBTVEFzIGluIG5ldHdvcmssIHN0YXJ0aW5nIHdpdGggaW5kZXggSVdMX1NUQV9JRC4KLSAqLwotc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2wzOTQ1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgQUREX1NUQV9TVUNDRVNTX01TSwkJMHgxCi0jZGVmaW5lIEFERF9TVEFfTk9fUk9PTV9JTl9UQUJMRQkweDIKLSNkZWZpbmUgQUREX1NUQV9OT19CTE9DS19BQ0tfUkVTT1VSQ0UJMHg0Ci0vKgotICogUkVQTFlfQUREX1NUQSA9IDB4MTggKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9hZGRfc3RhX3Jlc3AgewotCXU4IHN0YXR1czsJLyogQUREX1NUQV8qICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNCkKLSAqIFJ4IFJlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHsKLQl1OCBwaHlfY291bnQ7Ci0JdTggaWQ7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JX19sZTE2IHNpZ19hdmc7Ci0JX19sZTE2IG5vaXNlX2RpZmY7Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgewotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUxNiBwaHlfZmxhZ3M7Ci0JdTggcmVzZXJ2ZWQxOwotCXU4IHJhdGU7Ci0JX19sZTE2IGxlbjsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUgljcHVfdG9fbGUzMigxIDw8IDApCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XCWNwdV90b19sZTMyKDEgPDwgMSkKLQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLCWNwdV90b19sZTE2KDEgPDwgMCkKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJY3B1X3RvX2xlMTYoMSA8PCAxKQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKLQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSwkoMHg3IDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTk9ORQkoMHgwIDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQCSgweDEgPDwgOCkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QCSgweDIgPDwgOCkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQCSgweDMgPDwgOCkKLQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0sJKDB4MyA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT1RfREVDUllQVAkoMHgwIDw8IDExKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0sJKDB4MyA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQwkoMHgxIDw8IDExKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0JBRF9LRVlfVFRBSwkoMHgyIDw8IDExKQotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCi0gKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCi0gKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCi0gKiBzdGF0cy5waHlfY291bnQKLSAqLwotc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgewotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNSkKLSAqIFR4IENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqIERyaXZlciBtdXN0IHBsYWNlIGVhY2ggUkVQTFlfVFggY29tbWFuZCBpbnRvIG9uZSBvZiB0aGUgcHJpb3JpdGl6ZWQgVHgKLSAqIHF1ZXVlcyBpbiBob3N0IERSQU0sIHNoYXJlZCBiZXR3ZWVuIGRyaXZlciBhbmQgZGV2aWNlLiAgV2hlbiB0aGUgZGV2aWNlJ3MKLSAqIFR4IHNjaGVkdWxlciBhbmQgdUNvZGUgYXJlIHByZXBhcmluZyB0byB0cmFuc21pdCwgdGhlIGRldmljZSBwdWxscyB0aGUKLSAqIFR4IGNvbW1hbmQgb3ZlciB0aGUgUENJIGJ1cyB2aWEgb25lIG9mIHRoZSBkZXZpY2UncyBUeCBETUEgY2hhbm5lbHMsCi0gKiB0byBmaWxsIGFuIGludGVybmFsIEZJRk8gZnJvbSB3aGljaCBkYXRhIHdpbGwgYmUgdHJhbnNtaXR0ZWQuCi0gKgotICogdUNvZGUgaGFuZGxlcyBhbGwgdGltaW5nIGFuZCBwcm90b2NvbCByZWxhdGVkIHRvIGNvbnRyb2wgZnJhbWVzCi0gKiAoUlRTL0NUUy9BQ0spLCBiYXNlZCBvbiBmbGFncyBpbiB0aGUgVHggY29tbWFuZC4KLSAqCi0gKiB1Q29kZSBoYW5kbGVzIHJldHJ5aW5nIFR4IHdoZW4gYW4gQUNLIGlzIGV4cGVjdGVkIGJ1dCBub3QgcmVjZWl2ZWQuCi0gKiBUaGlzIGluY2x1ZGVzIHRyeWluZyBsb3dlciBkYXRhIHJhdGVzIHRoYW4gdGhlIG9uZSByZXF1ZXN0ZWQgaW4gdGhlIFR4Ci0gKiBjb21tYW5kLCBhcyBzZXQgdXAgYnkgdGhlIFJFUExZX1JBVEVfU0NBTEUgKGZvciAzOTQ1KSBvcgotICogUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCAoNDk2NSkuCi0gKgotICogRHJpdmVyIHNldHMgdXAgdHJhbnNtaXQgcG93ZXIgZm9yIHZhcmlvdXMgcmF0ZXMgdmlhIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQuCi0gKiBUaGlzIGNvbW1hbmQgbXVzdCBiZSBleGVjdXRlZCBhZnRlciBldmVyeSBSWE9OIGNvbW1hbmQsIGJlZm9yZSBUeCBjYW4gb2NjdXIuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJFUExZX1RYIFR4IGZsYWdzIGZpZWxkICovCi0KLS8qIDE6IFVzZSBSZXF1ZXN0LVRvLVNlbmQgcHJvdG9jb2wgYmVmb3JlIHRoaXMgZnJhbWUuCi0gKiBNdXR1YWxseSBleGNsdXNpdmUgdnMuIFRYX0NNRF9GTEdfQ1RTX01TSy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19SVFNfTVNLIGNwdV90b19sZTMyKDEgPDwgMSkKLQotLyogMTogVHJhbnNtaXQgQ2xlYXItVG8tU2VuZCB0byBzZWxmIGJlZm9yZSB0aGlzIGZyYW1lLgotICogRHJpdmVyIHNob3VsZCBzZXQgdGhpcyBmb3IgQVVUSC9ERUFVVEgvQVNTT0MtUkVRL1JFQVNTT0MgbWdtbnQgZnJhbWVzLgotICogTXV0dWFsbHkgZXhjbHVzaXZlIHZzLiBUWF9DTURfRkxHX1JUU19NU0suICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQ1RTX01TSyBjcHVfdG9fbGUzMigxIDw8IDIpCi0KLS8qIDE6IEV4cGVjdCBBQ0sgZnJvbSByZWNlaXZpbmcgc3RhdGlvbgotICogMDogRG9uJ3QgZXhwZWN0IEFDSyAoTUFDIGhlYWRlcidzIGR1cmF0aW9uIGZpZWxkIHMvYiAwKQotICogU2V0IHRoaXMgZm9yIHVuaWNhc3QgZnJhbWVzLCBidXQgbm90IGJyb2FkY2FzdC9tdWx0aWNhc3QuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQUNLX01TSyBjcHVfdG9fbGUzMigxIDw8IDMpCi0KLS8qIDE6IFVzZSByYXRlIHNjYWxlIHRhYmxlIChzZWUgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCkuCi0gKiAgICBUeCBjb21tYW5kJ3MgaW5pdGlhbF9yYXRlX2luZGV4IGluZGljYXRlcyBmaXJzdCByYXRlIHRvIHRyeTsKLSAqICAgIHVDb2RlIHdhbGtzIHRocm91Z2ggdGFibGUgZm9yIGFkZGl0aW9uYWwgVHggYXR0ZW1wdHMuCi0gKiAwOiBVc2UgVHggcmF0ZS9NQ1MgZnJvbSBUeCBjb21tYW5kJ3MgcmF0ZV9uX2ZsYWdzIGZpZWxkLgotICogICAgVGhpcyByYXRlIHdpbGwgYmUgdXNlZCBmb3IgYWxsIFR4IGF0dGVtcHRzOyBpdCB3aWxsIG5vdCBiZSBzY2FsZWQuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfU1RBX1JBVEVfTVNLIGNwdV90b19sZTMyKDEgPDwgNCkKLQotLyogMTogRXhwZWN0IGltbWVkaWF0ZSBibG9jay1hY2suCi0gKiBTZXQgd2hlbiBUeGluZyBhIGJsb2NrLWFjayByZXF1ZXN0IGZyYW1lLiAgQWxzbyBzZXQgVFhfQ01EX0ZMR19BQ0tfTVNLLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0lNTV9CQV9SU1BfTUFTSyAgY3B1X3RvX2xlMzIoMSA8PCA2KQotCi0vKiAxOiBGcmFtZSByZXF1aXJlcyBmdWxsIFR4LU9wIHByb3RlY3Rpb24uCi0gKiBTZXQgdGhpcyBpZiBlaXRoZXIgUlRTIG9yIENUUyBUeCBGbGFnIGdldHMgc2V0LiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0ZVTExfVFhPUF9QUk9UX01TSyBjcHVfdG9fbGUzMigxIDw8IDcpCi0KLS8qIFR4IGFudGVubmEgc2VsZWN0aW9uIGZpZWxkOyB1c2VkIG9ubHkgZm9yIDM5NDUsIHJlc2VydmVkICgwKSBmb3IgNDk2NS4KLSAqIFNldCBmaWVsZCB0byAiMCIgdG8gYWxsb3cgMzk0NSB1Q29kZSB0byBzZWxlY3QgYW50ZW5uYSAobm9ybWFsIHVzYWdlKS4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfU0VMX01TSyBjcHVfdG9fbGUzMigweGYwMCkKLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfQV9NU0sgY3B1X3RvX2xlMzIoMSA8PCA4KQotI2RlZmluZSBUWF9DTURfRkxHX0FOVF9CX01TSyBjcHVfdG9fbGUzMigxIDw8IDkpCi0KLS8qIDE6IElnbm9yZSBCbHVldG9vdGggcHJpb3JpdHkgZm9yIHRoaXMgZnJhbWUuCi0gKiAwOiBEZWxheSBUeCB1bnRpbCBCbHVldG9vdGggZGV2aWNlIGlzIGRvbmUgKG5vcm1hbCB1c2FnZSkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQlRfRElTX01TSyBjcHVfdG9fbGUzMigxIDw8IDEyKQotCi0vKiAxOiB1Q29kZSBvdmVycmlkZXMgc2VxdWVuY2UgY29udHJvbCBmaWVsZCBpbiBNQUMgaGVhZGVyLgotICogMDogRHJpdmVyIHByb3ZpZGVzIHNlcXVlbmNlIGNvbnRyb2wgZmllbGQgaW4gTUFDIGhlYWRlci4KLSAqIFNldCB0aGlzIGZvciBtYW5hZ2VtZW50IGZyYW1lcywgbm9uLVFPUyBkYXRhIGZyYW1lcywgbm9uLXVuaWNhc3QgZnJhbWVzLAotICogYW5kIGFsc28gaW4gVHggY29tbWFuZCBlbWJlZGRlZCBpbiBSRVBMWV9TQ0FOX0NNRCBmb3IgYWN0aXZlIHNjYW5zLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX1NFUV9DVExfTVNLIGNwdV90b19sZTMyKDEgPDwgMTMpCi0KLS8qIDE6IFRoaXMgZnJhbWUgaXMgbm9uLWxhc3QgTVBEVTsgbW9yZSBmcmFnbWVudHMgYXJlIGNvbWluZy4KLSAqIDA6IExhc3QgZnJhZ21lbnQsIG9yIG5vdCB1c2luZyBmcmFnbWVudGF0aW9uLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX01PUkVfRlJBR19NU0sgY3B1X3RvX2xlMzIoMSA8PCAxNCkKLQotLyogMTogdUNvZGUgY2FsY3VsYXRlcyBhbmQgaW5zZXJ0cyBUaW1lc3RhbXAgRnVuY3Rpb24gKFRTRikgaW4gb3V0Z29pbmcgZnJhbWUuCi0gKiAwOiBObyBUU0YgcmVxdWlyZWQgaW4gb3V0Z29pbmcgZnJhbWUuCi0gKiBTZXQgdGhpcyBmb3IgdHJhbnNtaXR0aW5nIGJlYWNvbnMgYW5kIHByb2JlIHJlc3BvbnNlcy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19UU0ZfTVNLIGNwdV90b19sZTMyKDEgPDwgMTYpCi0KLS8qIDE6IERyaXZlciBpbnNlcnRlZCAyIGJ5dGVzIHBhZCBhZnRlciB0aGUgTUFDIGhlYWRlciwgZm9yIChyZXF1aXJlZCkgZHdvcmQKLSAqICAgIGFsaWdubWVudCBvZiBmcmFtZSdzIHBheWxvYWQgZGF0YSBmaWVsZC4KLSAqIDA6IE5vIHBhZAotICogU2V0IHRoaXMgZm9yIE1BQyBoZWFkZXJzIHdpdGggMjYgb3IgMzAgYnl0ZXMsIGkuZS4gdGhvc2Ugd2l0aCBRT1Mgb3IgQUREUjQKLSAqIGZpZWxkIChidXQgbm90IGJvdGgpLiAgRHJpdmVyIG11c3QgYWxpZ24gZnJhbWUgZGF0YSAoaS5lLiBkYXRhIGZvbGxvd2luZwotICogTUFDIGhlYWRlcikgdG8gRFdPUkQgYm91bmRhcnkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfTUhfUEFEX01TSyBjcHVfdG9fbGUzMigxIDw8IDIwKQotCi0vKiBIQ0NBLUFQIC0gZGlzYWJsZSBkdXJhdGlvbiBvdmVyd3JpdGluZy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19EVVJfTVNLIGNwdV90b19sZTMyKDEgPDwgMjUpCi0KLS8qCi0gKiBUWCBjb21tYW5kIHNlY3VyaXR5IGNvbnRyb2wKLSAqLwotI2RlZmluZSBUWF9DTURfU0VDX1dFUCAgCTB4MDEKLSNkZWZpbmUgVFhfQ01EX1NFQ19DQ00gIAkweDAyCi0jZGVmaW5lIFRYX0NNRF9TRUNfVEtJUAkJMHgwMwotI2RlZmluZSBUWF9DTURfU0VDX01TSwkJMHgwMwotI2RlZmluZSBUWF9DTURfU0VDX1NISUZUCTYKLSNkZWZpbmUgVFhfQ01EX1NFQ19LRVkxMjgJMHgwOAotCi0vKgotICogUkVQTFlfVFggPSAweDFjIChjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9jbWQgewotCS8qCi0JICogTVBEVSBieXRlIGNvdW50OgotCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAotCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKLQkgKiArIERhdGEgcGF5bG9hZAotCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCi0JICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAotCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCi0JICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCi0JICovCi0JX19sZTE2IGxlbjsKLQotCS8qCi0JICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCi0JICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgotCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgotCSAqLwotCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKLQotCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCi0KLQl1OCByYXRlOwotCi0JLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCi0JdTggc3RhX2lkOwotCXU4IHRpZF90c3BlYzsKLQl1OCBzZWNfY3RsOwotCXU4IGtleVsxNl07Ci0JdW5pb24gewotCQl1OCBieXRlWzhdOwotCQlfX2xlMTYgd29yZFs0XTsKLQkJX19sZTMyIGR3WzJdOwotCX0gdGtpcF9taWM7Ci0JX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBsaWZlX3RpbWU7Ci0JCV9fbGUzMiBhdHRlbXB0OwotCX0gc3RvcF90aW1lOwotCXU4IHN1cHBfcmF0ZXNbMl07Ci0JdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KLQl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KLQl1bmlvbiB7Ci0JCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OwotCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKLQl9IHRpbWVvdXQ7Ci0KLQkvKgotCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCi0JICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCi0JICovCi0JX19sZTE2IGRyaXZlcl90eG9wOwotCi0JLyoKLQkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKLQkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQotCSAqLwotCXU4IHBheWxvYWRbMF07Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRYIGNvbW1hbmQgcmVzcG9uc2UgaXMgc2VudCBhZnRlciAqYWxsKiB0cmFuc21pc3Npb24gYXR0ZW1wdHMuCi0gKgotICogTk9URVM6Ci0gKgotICogVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHCi0gKgotICogSWYgdGhlIGZyYWdtZW50IGZsYWcgaW4gdGhlIE1BQyBoZWFkZXIgZm9yIHRoZSBmcmFtZSBiZWluZyB0cmFuc21pdHRlZAotICogaXMgc2V0IGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgdGltZSB0byB0cmFuc21pdCB0aGUgbmV4dCBmcmFtZSwgdGhlCi0gKiBUWCBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZCB3aXRoICdUWF9TVEFUVVNfRkFJTF9ORVhUX0ZSQUcnLgotICoKLSAqIFRYX1NUQVRVU19GSUZPX1VOREVSUlVOCi0gKgotICogSW5kaWNhdGVzIHRoZSBob3N0IGRpZCBub3QgcHJvdmlkZSBieXRlcyB0byB0aGUgRklGTyBmYXN0IGVub3VnaCB3aGlsZQotICogYSBUWCB3YXMgaW4gcHJvZ3Jlc3MuCi0gKgotICogVFhfU1RBVFVTX0ZBSUxfTUdNTlRfQUJPUlQKLSAqCi0gKiBUaGlzIHN0YXR1cyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBBQk9SVCBPTiBNR01UIFJYIHBhcmFtZXRlciB3YXMKLSAqIHNldCB0byB0cnVlIHdpdGggdGhlIFRYIGNvbW1hbmQuCi0gKgotICogSWYgdGhlIE1TQiBvZiB0aGUgc3RhdHVzIHBhcmFtZXRlciBpcyBzZXQgdGhlbiBhbiBhYm9ydCBzZXF1ZW5jZSBpcwotICogcmVxdWlyZWQuICBUaGlzIHNlcXVlbmNlIGNvbnNpc3RzIG9mIHRoZSBob3N0IGFjdGl2YXRpbmcgdGhlIFRYIEFib3J0Ci0gKiBjb250cm9sIGxpbmUsIGFuZCB0aGVuIHdhaXRpbmcgZm9yIHRoZSBUWCBBYm9ydCBjb21tYW5kIHJlc3BvbnNlLiAgVGhpcwotICogaW5kaWNhdGVzIHRoYXQgYSB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBpbiBhIHRyYW5zbWl0IHN0YXRlLCBhbmQgdGhhdCB0aGUKLSAqIGNvbW1hbmQgRklGTyBoYXMgYmVlbiBjbGVhcmVkLiAgVGhlIGhvc3QgbXVzdCB0aGVuIGRlYWN0aXZhdGUgdGhlIFRYIEFib3J0Ci0gKiBjb250cm9sIGxpbmUuICBSZWNlaXZpbmcgaXMgc3RpbGwgYWxsb3dlZCBpbiB0aGlzIGNhc2UuCi0gKi8KLWVudW0gewotCVRYX1NUQVRVU19TVUNDRVNTID0gMHgwMSwKLQlUWF9TVEFUVVNfRElSRUNUX0RPTkUgPSAweDAyLAotCVRYX1NUQVRVU19GQUlMX1NIT1JUX0xJTUlUID0gMHg4MiwKLQlUWF9TVEFUVVNfRkFJTF9MT05HX0xJTUlUID0gMHg4MywKLQlUWF9TVEFUVVNfRkFJTF9GSUZPX1VOREVSUlVOID0gMHg4NCwKLQlUWF9TVEFUVVNfRkFJTF9NR01OVF9BQk9SVCA9IDB4ODUsCi0JVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHID0gMHg4NiwKLQlUWF9TVEFUVVNfRkFJTF9MSUZFX0VYUElSRSA9IDB4ODcsCi0JVFhfU1RBVFVTX0ZBSUxfREVTVF9QUyA9IDB4ODgsCi0JVFhfU1RBVFVTX0ZBSUxfQUJPUlRFRCA9IDB4ODksCi0JVFhfU1RBVFVTX0ZBSUxfQlRfUkVUUlkgPSAweDhhLAotCVRYX1NUQVRVU19GQUlMX1NUQV9JTlZBTElEID0gMHg4YiwKLQlUWF9TVEFUVVNfRkFJTF9GUkFHX0RST1BQRUQgPSAweDhjLAotCVRYX1NUQVRVU19GQUlMX1RJRF9ESVNBQkxFID0gMHg4ZCwKLQlUWF9TVEFUVVNfRkFJTF9GUkFNRV9GTFVTSEVEID0gMHg4ZSwKLQlUWF9TVEFUVVNfRkFJTF9JTlNVRkZJQ0lFTlRfQ0ZfUE9MTCA9IDB4OGYsCi0JVFhfU1RBVFVTX0ZBSUxfVFhfTE9DS0VEID0gMHg5MCwKLQlUWF9TVEFUVVNfRkFJTF9OT19CRUFDT05fT05fUkFEQVIgPSAweDkxLAotfTsKLQotI2RlZmluZQlUWF9QQUNLRVRfTU9ERV9SRUdVTEFSCQkweDAwMDAKLSNkZWZpbmUJVFhfUEFDS0VUX01PREVfQlVSU1RfU0VRCTB4MDEwMAotI2RlZmluZQlUWF9QQUNLRVRfTU9ERV9CVVJTVF9GSVJTVAkweDAyMDAKLQotZW51bSB7Ci0JVFhfUE9XRVJfUEFfTk9UX0FDVElWRSA9IDB4MCwKLX07Ci0KLWVudW0gewotCVRYX1NUQVRVU19NU0sgPSAweDAwMDAwMGZmLAkvKiBiaXRzIDA6NyAqLwotCVRYX1NUQVRVU19ERUxBWV9NU0sgPSAweDAwMDAwMDQwLAotCVRYX1NUQVRVU19BQk9SVF9NU0sgPSAweDAwMDAwMDgwLAotCVRYX1BBQ0tFVF9NT0RFX01TSyA9IDB4MDAwMGZmMDAsCS8qIGJpdHMgODoxNSAqLwotCVRYX0ZJRk9fTlVNQkVSX01TSyA9IDB4MDAwNzAwMDAsCS8qIGJpdHMgMTY6MTggKi8KLQlUWF9SRVNFUlZFRCA9IDB4MDA3ODAwMDAsCS8qIGJpdHMgMTk6MjIgKi8KLQlUWF9QT1dFUl9QQV9ERVRFQ1RfTVNLID0gMHg3ZjgwMDAwMCwJLyogYml0cyAyMzozMCAqLwotCVRYX0FCT1JUX1JFUVVJUkVEX01TSyA9IDB4ODAwMDAwMDAsCS8qIGJpdHMgMzE6MzEgKi8KLX07Ci0KLS8qCi0gKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKLQl1OCBmYWlsdXJlX3J0czsKLQl1OCBmYWlsdXJlX2ZyYW1lOwotCXU4IGJ0X2tpbGxfY291bnQ7Ci0JdTggcmF0ZTsKLQlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKLQlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQgewotCXU4IGJhbmQ7CQkvKiAwOiA1IEdIeiwgMTogMi40IEdIeiAqLwotCXU4IHJlc2VydmVkOwotCV9fbGUxNiBjaGFubmVsOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHBvd2VyW0lXTF9NQVhfUkFURVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19pbmZvIHsKLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCXU4IHRyeV9jbnQ7Ci0JdTggbmV4dF9yYXRlX2luZGV4OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKLSAqCi0gKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKLSAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCi0gKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKLSAqIG1hc2tzLCBldGMuCi0gKgotICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAotICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKLSAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgotICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKLQl1OCB0YWJsZV9pZDsKLQl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQlRfQ09ORklHID0gMHg5YiAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIDM5NDUgYW5kIDQ5NjUgc3VwcG9ydCBoYXJkd2FyZSBoYW5kc2hha2Ugd2l0aCBCbHVldG9vdGggZGV2aWNlIG9uCi0gKiBzYW1lIHBsYXRmb3JtLiAgQmx1ZXRvb3RoIGRldmljZSBhbGVydHMgd2lyZWxlc3MgZGV2aWNlIHdoZW4gaXQgd2lsbCBUeDsKLSAqIHdpcmVsZXNzIGRldmljZSBjYW4gZGVsYXkgb3Iga2lsbCBpdHMgb3duIFR4IHRvIGFjY29tbW9kYXRlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9idF9jbWQgewotCXU4IGZsYWdzOwotCXU4IGxlYWRfdGltZTsKLQl1OCBtYXhfa2lsbDsKLQl1OCByZXNlcnZlZDsKLQlfX2xlMzIga2lsbF9hY2tfbWFzazsKLQlfX2xlMzIga2lsbF9jdHNfbWFzazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNikKLSAqIFNwZWN0cnVtIE1hbmFnZW1lbnQgKDgwMi4xMWgpIENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU3BlY3RydW0gTWFuYWdlbWVudAotICovCi0jZGVmaW5lIE1FQVNVUkVNRU5UX0ZJTFRFUl9GTEFHIChSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyAgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSyAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0sgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9ESVNfR1JQX0RFQ1JZUFRfTVNLIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgICAgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSykKLQotc3RydWN0IGl3bDM5NDVfbWVhc3VyZV9jaGFubmVsIHsKLQlfX2xlMzIgZHVyYXRpb247CS8qIG1lYXN1cmVtZW50IGR1cmF0aW9uIGluIGV4dGVuZGVkIGJlYWNvbgotCQkJCSAqIGZvcm1hdCAqLwotCXU4IGNoYW5uZWw7CQkvKiBjaGFubmVsIHRvIG1lYXN1cmUgKi8KLQl1OCB0eXBlOwkJLyogc2VlIGVudW0gaXdsMzk0NV9tZWFzdXJlX3R5cGUgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCA9IDB4NzQgKGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX2NtZCB7Ci0JX19sZTE2IGxlbjsJCS8qIG51bWJlciBvZiBieXRlcyBzdGFydGluZyBmcm9tIHRva2VuICovCi0JdTggdG9rZW47CQkvKiB0b2tlbiBpZCAqLwotCXU4IGlkOwkJCS8qIG1lYXN1cmVtZW50IGlkIC0tIDAgb3IgMSAqLwotCXU4IG9yaWdpbjsJCS8qIDAgPSBUR2gsIDEgPSBvdGhlciwgMiA9IFRHayAqLwotCXU4IHBlcmlvZGljOwkJLyogMSA9IHBlcmlvZGljICovCi0JX19sZTE2IHBhdGhfbG9zc190aW1lb3V0OwotCV9fbGUzMiBzdGFydF90aW1lOwkvKiBzdGFydCB0aW1lIGluIGV4dGVuZGVkIGJlYWNvbiBmb3JtYXQgKi8KLQlfX2xlMzIgcmVzZXJ2ZWQyOwotCV9fbGUzMiBmbGFnczsJCS8qIHJ4b24gZmxhZ3MgKi8KLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwkvKiByeG9uIGZpbHRlciBmbGFncyAqLwotCV9fbGUxNiBjaGFubmVsX2NvdW50OwkvKiBtaW5pbXVtIDEsIG1heGltdW0gMTAgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQzOwotCXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVfY2hhbm5lbCBjaGFubmVsc1sxMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCA9IDB4NzQgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9yZXNwIHsKLQl1OCB0b2tlbjsKLQl1OCBpZDsJCQkvKiBpZCBvZiB0aGUgcHJpb3IgY29tbWFuZCByZXBsYWNlZCwgb3IgMHhmZiAqLwotCV9fbGUxNiBzdGF0dXM7CQkvKiAwIC0gY29tbWFuZCB3aWxsIGJlIGhhbmRsZWQKLQkJCQkgKiAxIC0gY2Fubm90IGhhbmRsZSAoY29uZmxpY3RzIHdpdGggYW5vdGhlcgotCQkJCSAqICAgICBtZWFzdXJlbWVudCkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGl3bDM5NDVfbWVhc3VyZW1lbnRfc3RhdGUgewotCUlXTF9NRUFTVVJFTUVOVF9TVEFSVCA9IDAsCi0JSVdMX01FQVNVUkVNRU5UX1NUT1AgPSAxLAotfTsKLQotZW51bSBpd2wzOTQ1X21lYXN1cmVtZW50X3N0YXR1cyB7Ci0JSVdMX01FQVNVUkVNRU5UX09LID0gMCwKLQlJV0xfTUVBU1VSRU1FTlRfQ09OQ1VSUkVOVCA9IDEsCi0JSVdMX01FQVNVUkVNRU5UX0NTQV9DT05GTElDVCA9IDIsCi0JSVdMX01FQVNVUkVNRU5UX1RHSF9DT05GTElDVCA9IDMsCi0JLyogNC01IHJlc2VydmVkICovCi0JSVdMX01FQVNVUkVNRU5UX1NUT1BQRUQgPSA2LAotCUlXTF9NRUFTVVJFTUVOVF9USU1FT1VUID0gNywKLQlJV0xfTUVBU1VSRU1FTlRfUEVSSU9ESUNfRkFJTEVEID0gOCwKLX07Ci0KLSNkZWZpbmUgTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTSA4Ci0KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2hpc3RvZ3JhbSB7Ci0JX19sZTMyIG9mZG1bTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTV07CS8qIGluIDAuOHVzZWMgY291bnRzICovCi0JX19sZTMyIGNja1tOVU1fRUxFTUVOVFNfSU5fSElTVE9HUkFNXTsJLyogaW4gMXVzZWMgY291bnRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogY2xlYXIgY2hhbm5lbCBhdmFpbGFiaWxpdHkgY291bnRlcnMgKi8KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2NjYV9jb3VudGVycyB7Ci0JX19sZTMyIG9mZG07Ci0JX19sZTMyIGNjazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGl3bDM5NDVfbWVhc3VyZV90eXBlIHsKLQlJV0xfTUVBU1VSRV9CQVNJQyA9ICgxIDw8IDApLAotCUlXTF9NRUFTVVJFX0NIQU5ORUxfTE9BRCA9ICgxIDw8IDEpLAotCUlXTF9NRUFTVVJFX0hJU1RPR1JBTV9SUEkgPSAoMSA8PCAyKSwKLQlJV0xfTUVBU1VSRV9ISVNUT0dSQU1fTk9JU0UgPSAoMSA8PCAzKSwKLQlJV0xfTUVBU1VSRV9GUkFNRSA9ICgxIDw8IDQpLAotCS8qIGJpdHMgNTo2IGFyZSByZXNlcnZlZCAqLwotCUlXTF9NRUFTVVJFX0lETEUgPSAoMSA8PCA3KSwKLX07Ci0KLS8qCi0gKiBTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTiA9IDB4NzUgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9ub3RpZmljYXRpb24gewotCXU4IGlkOwkJCS8qIG1lYXN1cmVtZW50IGlkIC0tIDAgb3IgMSAqLwotCXU4IHRva2VuOwotCXU4IGNoYW5uZWxfaW5kZXg7CS8qIGluZGV4IGluIG1lYXN1cmVtZW50IGNoYW5uZWwgbGlzdCAqLwotCXU4IHN0YXRlOwkJLyogMCAtIHN0YXJ0LCAxIC0gc3RvcCAqLwotCV9fbGUzMiBzdGFydF90aW1lOwkvKiBsb3dlciAzMi1iaXRzIG9mIFRTRiAqLwotCXU4IGJhbmQ7CQkvKiAwIC0gNS4yR0h6LCAxIC0gMi40R0h6ICovCi0JdTggY2hhbm5lbDsKLQl1OCB0eXBlOwkJLyogc2VlIGVudW0gaXdsMzk0NV9tZWFzdXJlbWVudF90eXBlICovCi0JdTggcmVzZXJ2ZWQxOwotCS8qIE5PVEU6ICBjY2Ffb2ZkbSwgY2NhX2NjaywgYmFzaWNfdHlwZSwgYW5kIGhpc3RvZ3JhbSBhcmUgb25seSBvbmx5Ci0JICogdmFsaWQgaWYgYXBwbGljYWJsZSBmb3IgbWVhc3VyZW1lbnQgdHlwZSByZXF1ZXN0ZWQuICovCi0JX19sZTMyIGNjYV9vZmRtOwkvKiBjY2EgZnJhY3Rpb24gdGltZSBpbiA0ME1oeiBjbG9jayBwZXJpb2RzICovCi0JX19sZTMyIGNjYV9jY2s7CQkvKiBjY2EgZnJhY3Rpb24gdGltZSBpbiA0NE1oeiBjbG9jayBwZXJpb2RzICovCi0JX19sZTMyIGNjYV90aW1lOwkvKiBjaGFubmVsIGxvYWQgdGltZSBpbiB1c2VjcyAqLwotCXU4IGJhc2ljX3R5cGU7CQkvKiAwIC0gYnNzLCAxIC0gb2ZkbSBwcmVhbWJsZSwgMiAtCi0JCQkJICogdW5pZGVudGlmaWVkICovCi0JdTggcmVzZXJ2ZWQyWzNdOwotCXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2hpc3RvZ3JhbSBoaXN0b2dyYW07Ci0JX19sZTMyIHN0b3BfdGltZTsJLyogbG93ZXIgMzItYml0cyBvZiBUU0YgKi8KLQlfX2xlMzIgc3RhdHVzOwkJLyogc2VlIGl3bDM5NDVfbWVhc3VyZW1lbnRfc3RhdHVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDcpCi0gKiBQb3dlciBNYW5hZ2VtZW50IENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIC0gUG93ZXIgVGFibGUgQ29tbWFuZAotICogQGZsYWdzOiBTZWUgYmVsb3c6Ci0gKgotICogUE9XRVJfVEFCTEVfQ01EID0gMHg3NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIFBNIGFsbG93OgotICogICBiaXQgMCAtICcwJyBEcml2ZXIgbm90IGFsbG93IHBvd2VyIG1hbmFnZW1lbnQKLSAqICAgICAgICAgICAnMScgRHJpdmVyIGFsbG93IFBNICh1c2UgcmVzdCBvZiBwYXJhbWV0ZXJzKQotICogdUNvZGUgc2VuZCBzbGVlcCBub3RpZmljYXRpb25zOgotICogICBiaXQgMSAtICcwJyBEb24ndCBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbgotICogICAgICAgICAgICcxJyBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbiAoU0VORF9QTV9OT1RJRklDQVRJT04pCi0gKiBTbGVlcCBvdmVyIERUSU0KLSAqICAgYml0IDIgLSAnMCcgUE0gaGF2ZSB0byB3YWxrIHVwIGV2ZXJ5IERUSU0KLSAqICAgICAgICAgICAnMScgUE0gY291bGQgc2xlZXAgb3ZlciBEVElNIHRpbGwgbGlzdGVuIEludGVydmFsLgotICogUENJIHBvd2VyIG1hbmFnZWQKLSAqICAgYml0IDMgLSAnMCcgKFBDSV9MSU5LX0NUUkwgJiAweDEpCi0gKiAgICAgICAgICAgJzEnICEoUENJX0xJTktfQ1RSTCAmIDB4MSkKLSAqIEZvcmNlIHNsZWVwIE1vZGVzCi0gKiAgIGJpdCAzMS8zMC0gJzAwJyB1c2UgYm90aCBtYWMveHRhbCBzbGVlcHMKLSAqICAgICAgICAgICAgICAnMDEnIGZvcmNlIE1hYyBzbGVlcAotICogICAgICAgICAgICAgICcxMCcgZm9yY2UgeHRhbCBzbGVlcAotICogICAgICAgICAgICAgICcxMScgSWxsZWdhbCBzZXQKLSAqCi0gKiBOT1RFOiBpZiBzbGVlcF9pbnRlcnZhbFtTTEVFUF9JTlRSVkxfVEFCTEVfU0laRS0xXSA+IERUSU0gcGVyaW9kIHRoZW4KLSAqIHVjb2RlIGFzc3VtZSBzbGVlcCBvdmVyIERUSU0gaXMgYWxsb3dlZCBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3YWtldXAKLSAqIGZvciBldmVyeSBEVElNLgotICovCi0jZGVmaW5lIElXTF9QT1dFUl9WRUNfU0laRSA1Ci0KLSNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyKQotI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTMyKDEgPDwgMykKLXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyoKLSAqIFBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICogMzk0NSBhbmQgNDk2NSBpZGVudGljYWwuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiB7Ci0JdTggcG1fc2xlZXBfbW9kZTsKLQl1OCBwbV93YWtldXBfc3JjOwotCV9fbGUxNiByZXNlcnZlZDsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgYmNvbl90aW1lcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBTbGVlcCBzdGF0ZXMuICAzOTQ1IGFuZCA0OTY1IGlkZW50aWNhbC4gKi8KLWVudW0gewotCUlXTF9QTV9OT19TTEVFUCA9IDAsCi0JSVdMX1BNX1NMUF9NQUMgPSAxLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfVU5BU1NPQ0lBVEUgPSAyLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfQ0FSRF9TVEFURSA9IDMsCi0JSVdMX1BNX1NMUF9QSFkgPSA0LAotCUlXTF9QTV9TTFBfUkVQRU5UID0gNSwKLQlJV0xfUE1fV0FLRVVQX0JZX1RJTUVSID0gNiwKLQlJV0xfUE1fV0FLRVVQX0JZX0RSSVZFUiA9IDcsCi0JSVdMX1BNX1dBS0VVUF9CWV9SRktJTEwgPSA4LAotCS8qIDMgcmVzZXJ2ZWQgKi8KLQlJV0xfUE1fTlVNX09GX01PREVTID0gMTIsCi19OwotCi0vKgotICogUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfRElTQUJMRSAweDAwCS8qIFB1dCBjYXJkIHRvIHNsZWVwICovCi0jZGVmaW5lIENBUkRfU1RBVEVfQ01EX0VOQUJMRSAgMHgwMQkvKiBXYWtlIHVwIGNhcmQgKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfSEFMVCAgICAweDAyCS8qIFBvd2VyIGRvd24gcGVybWFuZW50bHkgKi8KLXN0cnVjdCBpd2wzOTQ1X2NhcmRfc3RhdGVfY21kIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogQ0FSRF9TVEFURV9DTURfKiByZXF1ZXN0IG5ldyBwb3dlciBzdGF0ZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBDQVJEX1NUQVRFX05PVElGSUNBVElPTiA9IDB4YTEgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jYXJkX3N0YXRlX25vdGlmIHsKLQlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBIV19DQVJEX0RJU0FCTEVEICAgMHgwMQotI2RlZmluZSBTV19DQVJEX0RJU0FCTEVEICAgMHgwMgotI2RlZmluZSBSRl9DQVJEX0RJU0FCTEVEICAgMHgwNAotI2RlZmluZSBSWE9OX0NBUkRfRElTQUJMRUQgMHgxMAotCi1zdHJ1Y3QgaXdsMzk0NV9jdF9raWxsX2NvbmZpZyB7Ci0JX19sZTMyICAgcmVzZXJ2ZWQ7Ci0JX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfTTsKLQlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9SOwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOCkKLSAqIFNjYW4gQ29tbWFuZHMsIFJlc3BvbnNlcywgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIC0gZW50cnkgaW4gUkVQTFlfU0NBTl9DTUQgY2hhbm5lbCB0YWJsZQotICoKLSAqIE9uZSBmb3IgZWFjaCBjaGFubmVsIGluIHRoZSBzY2FuIGxpc3QuCi0gKiBFYWNoIGNoYW5uZWwgY2FuIGluZGVwZW5kZW50bHkgc2VsZWN0OgotICogMSkgIFNTSUQgZm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucwotICogMikgIFR4cG93ZXIgc2V0dGluZyAoZm9yIHJhdGUgc3BlY2lmaWVkIHdpdGhpbiBUeCBjb21tYW5kKQotICogMykgIEhvdyBsb25nIHRvIHN0YXkgb24tY2hhbm5lbCAoYmVoYXZpb3IgbWF5IGJlIG1vZGlmaWVkIGJ5IHF1aWV0X3RpbWUsCi0gKiAgICAgcXVpZXRfcGxjcF90aCwgZ29vZF9DUkNfdGgpCi0gKgotICogVG8gYXZvaWQgdUNvZGUgZXJyb3JzLCBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSAoc2VlIGNvbW1lbnRzCi0gKiB1bmRlciBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCBhYm91dCBtYXhfb3V0X3RpbWUgYW5kIHF1aWV0X3RpbWUpOgotICogMSkgIElmIHVzaW5nIHBhc3NpdmVfZHdlbGwgKGkuZS4gcGFzc2l2ZV9kd2VsbCAhPSAwKToKLSAqICAgICBhY3RpdmVfZHdlbGwgPD0gcGFzc2l2ZV9kd2VsbCAoPCBtYXhfb3V0X3RpbWUgaWYgbWF4X291dF90aW1lICE9IDApCi0gKiAyKSAgcXVpZXRfdGltZSA8PSBhY3RpdmVfZHdlbGwKLSAqIDMpICBJZiByZXN0cmljdGluZyBvZmYtY2hhbm5lbCB0aW1lIChpLmUuIG1heF9vdXRfdGltZSAhPTApOgotICogICAgIHBhc3NpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqICAgICBhY3RpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIHsKLQkvKgotCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKLQkgKiAwOjAgMSA9IGFjdGl2ZSwgMCA9IHBhc3NpdmUKLQkgKiAxOjQgU1NJRCBkaXJlY3QgYml0IG1hcDsgaWYgYSBiaXQgaXMgc2V0LCB0aGVuIGNvcnJlc3BvbmRpbmcKLQkgKiAgICAgU1NJRCBJRSBpcyB0cmFuc21pdHRlZCBpbiBwcm9iZSByZXF1ZXN0LgotCSAqIDU6NyByZXNlcnZlZAotCSAqLwotCXU4IHR5cGU7Ci0JdTggY2hhbm5lbDsJLyogYmFuZCBpcyBzZWxlY3RlZCBieSBpd2wzOTQ1X3NjYW5fY21kICJmbGFncyIgZmllbGQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7Ci0JX19sZTE2IGFjdGl2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDUtNTAgKi8KLQlfX2xlMTYgcGFzc2l2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDIwLTUwMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc3NpZF9pZSAtIGRpcmVjdGVkIHNjYW4gbmV0d29yayBpbmZvcm1hdGlvbiBlbGVtZW50Ci0gKgotICogVXAgdG8gNCBvZiB0aGVzZSBtYXkgYXBwZWFyIGluIFJFUExZX1NDQU5fQ01ELCBzZWxlY3RlZCBieSAidHlwZSIgZmllbGQKLSAqIGluIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbDsgZWFjaCBjaGFubmVsIG1heSBzZWxlY3QgZGlmZmVyZW50IHNzaWRzIGZyb20KLSAqIGFtb25nIHRoZSA0IGVudHJpZXMuICBTU0lEIElFcyBnZXQgdHJhbnNtaXR0ZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBlbnRyeS4KLSAqLwotc3RydWN0IGl3bDM5NDVfc3NpZF9pZSB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IHNzaWRbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUFJPQkVfT1BUSU9OX01BWCAgICAgICAgMHg0Ci0jZGVmaW5lIFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEUJY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikKLSNkZWZpbmUgSVdMX0dPT0RfQ1JDX1RICQljcHVfdG9fbGUxNigxKQotI2RlZmluZSBJV0xfTUFYX1NDQU5fU0laRSAxMDI0Ci0KLS8qCi0gKiBSRVBMWV9TQ0FOX0NNRCA9IDB4ODAgKGNvbW1hbmQpCi0gKgotICogVGhlIGhhcmR3YXJlIHNjYW4gY29tbWFuZCBpcyB2ZXJ5IHBvd2VyZnVsOyB0aGUgZHJpdmVyIGNhbiBzZXQgaXQgdXAgdG8KLSAqIG1haW50YWluIChyZWxhdGl2ZWx5KSBub3JtYWwgbmV0d29yayB0cmFmZmljIHdoaWxlIGRvaW5nIGEgc2NhbiBpbiB0aGUKLSAqIGJhY2tncm91bmQuICBUaGUgbWF4X291dF90aW1lIGFuZCBzdXNwZW5kX3RpbWUgY29udHJvbCB0aGUgcmF0aW8gb2YgaG93Ci0gKiBsb25nIHRoZSBkZXZpY2Ugc3RheXMgb24gYW4gYXNzb2NpYXRlZCBuZXR3b3JrIGNoYW5uZWwgKCJzZXJ2aWNlIGNoYW5uZWwiKQotICogdnMuIGhvdyBsb25nIGl0J3MgYXdheSBmcm9tIHRoZSBzZXJ2aWNlIGNoYW5uZWwsIHR1bmVkIHRvIG90aGVyIGNoYW5uZWxzCi0gKiBmb3Igc2Nhbm5pbmcuCi0gKgotICogbWF4X291dF90aW1lIGlzIHRoZSBtYXggdGltZSBvZmYtY2hhbm5lbCAoaW4gdXNlYyksIGFuZCBzdXNwZW5kX3RpbWUKLSAqIGlzIGhvdyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uIiBmb3JtYXQpIHRoYXQgdGhlIHNjYW4gaXMgInN1c3BlbmRlZCIKLSAqIGFmdGVyIHJldHVybmluZyB0byB0aGUgc2VydmljZSBjaGFubmVsLiAgVGhhdCBpcywgc3VzcGVuZF90aW1lIGlzIHRoZQotICogdGltZSB0aGF0IHdlIHN0YXkgb24gdGhlIHNlcnZpY2UgY2hhbm5lbCwgZG9pbmcgbm9ybWFsIHdvcmssIGJldHdlZW4KLSAqIHNjYW4gc2VnbWVudHMuICBUaGUgZHJpdmVyIG1heSBzZXQgdGhlc2UgcGFyYW1ldGVycyBkaWZmZXJlbnRseSB0byBzdXBwb3J0Ci0gKiBzY2FubmluZyB3aGVuIGFzc29jaWF0ZWQgdnMuIG5vdCBhc3NvY2lhdGVkLCBhbmQgbGlnaHQgdnMuIGhlYXZ5IHRyYWZmaWMKLSAqIGxvYWRzIHdoZW4gYXNzb2NpYXRlZC4KLSAqCi0gKiBBZnRlciByZWNlaXZpbmcgdGhpcyBjb21tYW5kLCB0aGUgZGV2aWNlJ3Mgc2NhbiBlbmdpbmUgZG9lcyB0aGUgZm9sbG93aW5nOwotICoKLSAqIDEpICBTZW5kcyBTQ0FOX1NUQVJUIG5vdGlmaWNhdGlvbiB0byBkcml2ZXIKLSAqIDIpICBDaGVja3MgdG8gc2VlIGlmIGl0IGhhcyB0aW1lIHRvIGRvIHNjYW4gZm9yIG9uZSBjaGFubmVsCi0gKiAzKSAgU2VuZHMgTlVMTCBwYWNrZXQsIHdpdGggcG93ZXItc2F2ZSAoUFMpIGJpdCBzZXQgdG8gMSwKLSAqICAgICB0byB0ZWxsIEFQIHRoYXQgd2UncmUgZ29pbmcgb2ZmLWNoYW5uZWwKLSAqIDQpICBUdW5lcyB0byBmaXJzdCBjaGFubmVsIGluIHNjYW4gbGlzdCwgZG9lcyBhY3RpdmUgb3IgcGFzc2l2ZSBzY2FuCi0gKiA1KSAgU2VuZHMgU0NBTl9SRVNVTFQgbm90aWZpY2F0aW9uIHRvIGRyaXZlcgotICogNikgIENoZWNrcyB0byBzZWUgaWYgaXQgaGFzIHRpbWUgdG8gZG8gc2NhbiBvbiAqbmV4dCogY2hhbm5lbCBpbiBsaXN0Ci0gKiA3KSAgUmVwZWF0cyA0LTYgdW50aWwgaXQgbm8gbG9uZ2VyIGhhcyB0aW1lIHRvIHNjYW4gdGhlIG5leHQgY2hhbm5lbAotICogICAgIGJlZm9yZSBtYXhfb3V0X3RpbWUgZXhwaXJlcwotICogOCkgIFJldHVybnMgdG8gc2VydmljZSBjaGFubmVsCi0gKiA5KSAgU2VuZHMgTlVMTCBwYWNrZXQgd2l0aCBQUz0wIHRvIHRlbGwgQVAgdGhhdCB3ZSdyZSBiYWNrCi0gKiAxMCkgU3RheXMgb24gc2VydmljZSBjaGFubmVsIHVudGlsIHN1c3BlbmRfdGltZSBleHBpcmVzCi0gKiAxMSkgUmVwZWF0cyBlbnRpcmUgcHJvY2VzcyAyLTEwIHVudGlsIGxpc3QgaXMgY29tcGxldGUKLSAqIDEyKSBTZW5kcyBTQ0FOX0NPTVBMRVRFIG5vdGlmaWNhdGlvbgotICoKLSAqIEZvciBmYXN0LCBlZmZpY2llbnQgc2NhbnMsIHRoZSBzY2FuIGNvbW1hbmQgYWxzbyBoYXMgc3VwcG9ydCBmb3Igc3RheWluZyBvbgotICogYSBjaGFubmVsIGZvciBqdXN0IGEgc2hvcnQgdGltZSwgaWYgZG9pbmcgYWN0aXZlIHNjYW5uaW5nIGFuZCBnZXR0aW5nIG5vCi0gKiByZXNwb25zZXMgdG8gdGhlIHRyYW5zbWl0dGVkIHByb2JlIHJlcXVlc3QuICBUaGlzIHRpbWUgaXMgY29udHJvbGxlZCBieQotICogcXVpZXRfdGltZSwgYW5kIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBiZWxvdyB3aGljaCBhIGNoYW5uZWwgaXMKLSAqIGNvbnNpZGVyZWQgInF1aWV0IiBpcyBjb250cm9sbGVkIGJ5IHF1aWV0X3BsY3BfdGhyZXNob2xkLgotICoKLSAqIEZvciBhY3RpdmUgc2Nhbm5pbmcgb24gY2hhbm5lbHMgdGhhdCBoYXZlIHJlZ3VsYXRvcnkgcmVzdHJpY3Rpb25zIGFnYWluc3QKLSAqIGJsaW5kbHkgdHJhbnNtaXR0aW5nLCB0aGUgc2NhbiBjYW4gbGlzdGVuIGJlZm9yZSB0cmFuc21pdHRpbmcsIHRvIG1ha2Ugc3VyZQotICogdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGxlZ2l0aW1hdGUgYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwuICBJZiBlbm91Z2gKLSAqIHBhY2tldHMgYXJlIGNsZWFubHkgcmVjZWl2ZWQgb24gdGhlIGNoYW5uZWwgKGNvbnRyb2xsZWQgYnkgZ29vZF9DUkNfdGgsCi0gKiB0eXBpY2FsIHZhbHVlIDEpLCB0aGUgc2NhbiBlbmdpbmUgc3RhcnRzIHRyYW5zbWl0dGluZyBwcm9iZSByZXF1ZXN0cy4KLSAqCi0gKiBEcml2ZXIgbXVzdCB1c2Ugc2VwYXJhdGUgc2NhbiBjb21tYW5kcyBmb3IgMi40IHZzLiA1IEdIeiBiYW5kcy4KLSAqCi0gKiBUbyBhdm9pZCB1Q29kZSBlcnJvcnMsIHNlZSB0aW1pbmcgcmVzdHJpY3Rpb25zIGRlc2NyaWJlZCB1bmRlcgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7Ci0JX19sZTE2IGxlbjsKLQl1OCByZXNlcnZlZDA7Ci0JdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KLQlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKLQkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCi0JX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLwotCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCi0JCQkJICogY2hhbm5lbCAqLwotCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCi0JCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgotCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCi0JCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KLQkJCQkgKi8KLQlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCi0JX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLwotCi0JLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCi0JICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOwotCi0JLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCi0Jc3RydWN0IGl3bDM5NDVfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXTsKLQotCS8qCi0JICogUHJvYmUgcmVxdWVzdCBmcmFtZSwgZm9sbG93ZWQgYnkgY2hhbm5lbCBsaXN0LgotCSAqCi0JICogU2l6ZSBvZiBwcm9iZSByZXF1ZXN0IGZyYW1lIGlzIHNwZWNpZmllZCBieSBieXRlIGNvdW50IGluIHR4X2NtZC4KLQkgKiBDaGFubmVsIGxpc3QgZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciBwcm9iZSByZXF1ZXN0IGZyYW1lLgotCSAqIE51bWJlciBvZiBjaGFubmVscyBpbiBsaXN0IGlzIHNwZWNpZmllZCBieSBjaGFubmVsX2NvdW50LgotCSAqIEVhY2ggY2hhbm5lbCBpbiBsaXN0IGlzIG9mIHR5cGU6Ci0JICoKLQkgKiBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWwgY2hhbm5lbHNbMF07Ci0JICoKLQkgKiBOT1RFOiAgT25seSBvbmUgYmFuZCBvZiBjaGFubmVscyBjYW4gYmUgc2Nhbm5lZCBwZXIgcGFzcy4gIFlvdQotCSAqIG11c3Qgbm90IG1peCAyLjRHSHogY2hhbm5lbHMgYW5kIDUuMkdIeiBjaGFubmVscywgYW5kIHlvdSBtdXN0IHdhaXQKLQkgKiBmb3Igb25lIHNjYW4gdG8gY29tcGxldGUgKGkuZS4gcmVjZWl2ZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTikKLQkgKiBiZWZvcmUgcmVxdWVzdGluZyBhbm90aGVyIHNjYW4uCi0JICovCi0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBDYW4gYWJvcnQgd2lsbCBub3RpZnkgYnkgY29tcGxldGUgbm90aWZpY2F0aW9uIHdpdGggYWJvcnQgc3RhdHVzLiAqLwotI2RlZmluZSBDQU5fQUJPUlRfU1RBVFVTCWNwdV90b19sZTMyKDB4MSkKLS8qIGNvbXBsZXRlIG5vdGlmaWNhdGlvbiBzdGF0dXNlcyAqLwotI2RlZmluZSBBQk9SVF9TVEFUVVMgICAgICAgICAgICAweDIKLQotLyoKLSAqIFJFUExZX1NDQU5fQ01EID0gMHg4MCAocmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMTogb2theSwgMjogY2Fubm90IGZ1bGZpbGwgcmVxdWVzdCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTQ0FOX1NUQVJUX05PVElGSUNBVElPTiA9IDB4ODIgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci0JX19sZTMyIGJlYWNvbl90aW1lcjsKLQl1OCBjaGFubmVsOwotCXU4IGJhbmQ7Ci0JdTggcmVzZXJ2ZWRbMl07Ci0JX19sZTMyIHN0YXR1czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lICBTQ0FOX09XTkVSX1NUQVRVUyAweDE7Ci0jZGVmaW5lICBNRUFTVVJFX09XTkVSX1NUQVRVUyAweDI7Ci0KLSNkZWZpbmUgTlVNQkVSX09GX1NUQVRJU1RJQ1MgMQkvKiBmaXJzdCBfX2xlMzIgaXMgZ29vZCBDUkMgKi8KLS8qCi0gKiBTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OID0gMHg4MyAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiB7Ci0JdTggY2hhbm5lbDsKLQl1OCBiYW5kOwotCXU4IHJlc2VydmVkWzJdOwotCV9fbGUzMiB0c2ZfbG93OwotCV9fbGUzMiB0c2ZfaGlnaDsKLQlfX2xlMzIgc3RhdGlzdGljc1tOVU1CRVJfT0ZfU1RBVElTVElDU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gewotCXU4IHNjYW5uZWRfY2hhbm5lbHM7Ci0JdTggc3RhdHVzOwotCXU4IHJlc2VydmVkOwotCXU4IGxhc3RfY2hhbm5lbDsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOSkKLSAqIElCU1MvQVAgQ29tbWFuZHMgYW5kIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogQkVBQ09OX05PVElGSUNBVElPTiA9IDB4OTAgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4OwotCV9fbGUxNiB0aW1faWR4OwotCXU4IHRpbV9zaXplOwotCXU4IHJlc2VydmVkMTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBmcmFtZVswXTsJLyogYmVhY29uIGZyYW1lICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEwKQotICogU3RhdGlzdGljcyBDb21tYW5kcyBhbmQgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSVdMX1RFTVBfQ09OVkVSVCAyNjAKLQotI2RlZmluZSBTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMUyAgOAotI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAotI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKLQotLyogVXNlZCBmb3IgcGFzc2luZyB0byBkcml2ZXIgbnVtYmVyIG9mIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgcGVyIHJhdGUgKi8KLXN0cnVjdCByYXRlX2hpc3RvZ3JhbSB7Ci0JdW5pb24gewotCQlfX2xlMzIgYVtTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMU107Ci0JCV9fbGUzMiBiW1NVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGdbU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFNdOwotCX0gc3VjY2VzczsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBhW1NVUF9SQVRFXzExQV9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGJbU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFNdOwotCQlfX2xlMzIgZ1tTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMU107Ci0JfSBmYWlsZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogc3RhdGlzdGljcyBjb21tYW5kIHJlc3BvbnNlICovCi0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7Ci0JX19sZTMyIGluYV9jbnQ7Ci0JX19sZTMyIGZpbmFfY250OwotCV9fbGUzMiBwbGNwX2VycjsKLQlfX2xlMzIgY3JjMzJfZXJyOwotCV9fbGUzMiBvdmVycnVuX2VycjsKLQlfX2xlMzIgZWFybHlfb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGNyYzMyX2dvb2Q7Ci0JX19sZTMyIGZhbHNlX2FsYXJtX2NudDsKLQlfX2xlMzIgZmluYV9zeW5jX2Vycl9jbnQ7Ci0JX19sZTMyIHNmZF90aW1lb3V0OwotCV9fbGUzMiBmaW5hX3RpbWVvdXQ7Ci0JX19sZTMyIHVucmVzcG9uZGVkX3J0czsKLQlfX2xlMzIgcnhlX2ZyYW1lX2xpbWl0X292ZXJydW47Ci0JX19sZTMyIHNlbnRfYWNrX2NudDsKLQlfX2xlMzIgc2VudF9jdHNfY250OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4IHsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgb2ZkbTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgY2NrOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc190eCB7Ci0JX19sZTMyIHByZWFtYmxlX2NudDsKLQlfX2xlMzIgcnhfZGV0ZWN0ZWRfY250OwotCV9fbGUzMiBidF9wcmlvX2RlZmVyX2NudDsKLQlfX2xlMzIgYnRfcHJpb19raWxsX2NudDsKLQlfX2xlMzIgZmV3X2J5dGVzX2NudDsKLQlfX2xlMzIgY3RzX3RpbWVvdXQ7Ci0JX19sZTMyIGFja190aW1lb3V0OwotCV9fbGUzMiBleHBlY3RlZF9hY2tfY250OwotCV9fbGUzMiBhY3R1YWxfYWNrX2NudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewotCV9fbGUzMiBidXJzdF9jaGVjazsKLQlfX2xlMzIgYnVyc3RfY291bnQ7Ci0JX19sZTMyIHJlc2VydmVkWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX2RpdiB7Ci0JX19sZTMyIHR4X29uX2E7Ci0JX19sZTMyIHR4X29uX2I7Ci0JX19sZTMyIGV4ZWNfdGltZTsKLQlfX2xlMzIgcHJvYmVfdGltZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnIGRiZzsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgc2xvdHNfb3V0OwotCV9fbGUzMiBzbG90c19pZGxlOwotCV9fbGUzMiB0dGxfdGltZXN0YW1wOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLSAqIDM5NDUgYW5kIDQ5NjUgaWRlbnRpY2FsLgotICoKLSAqIFRoaXMgY29tbWFuZCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgcmVzcG9uc2UgY29udGFpbmluZyB1Q29kZSBzdGF0aXN0aWNzLgotICogVGhlIHJlc3BvbnNlIGlzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBTVEFUSVNUSUNTX05PVElGSUNBVElPTiAweDlkLCBiZWxvdy4KLSAqCi0gKiBJZiB0aGUgQ0xFQVJfU1RBVFMgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBjbGVhciBpdHMKLSAqIGludGVybmFsIGNvcHkgb2YgdGhlIHN0YXRpc3RpY3MgKGNvdW50ZXJzKSBhZnRlciBpc3N1aW5nIHRoZSByZXNwb25zZS4KLSAqIFRoaXMgZmxhZyBkb2VzIG5vdCBhZmZlY3QgU1RBVElTVElDU19OT1RJRklDQVRJT05zIGFmdGVyIGJlYWNvbnMgKHNlZSBiZWxvdykuCi0gKgotICogSWYgdGhlIERJU0FCTEVfTk9USUYgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBub3QgaXNzdWUKLSAqIFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OcyBhZnRlciByZWNlaXZlZCBiZWFjb25zIChzZWUgYmVsb3cpLiAgVGhpcyBmbGFnCi0gKiBkb2VzIG5vdCBhZmZlY3QgdGhlIHJlc3BvbnNlIHRvIHRoZSBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljIGl0c2VsZi4KLSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9DTEVBUl9TVEFUUyBjcHVfdG9fbGUzMigweDEpCS8qIHNlZSBhYm92ZSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9ESVNBQkxFX05PVElGIGNwdV90b19sZTMyKDB4MikvKiBzZWUgYWJvdmUgKi8KLXN0cnVjdCBpd2wzOTQ1X3N0YXRpc3RpY3NfY21kIHsKLQlfX2xlMzIgY29uZmlndXJhdGlvbl9mbGFnczsJLyogSVdMX1NUQVRTX0NPTkZfKiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIEJ5IGRlZmF1bHQsIHVDb2RlIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBiZWFjb24KLSAqIHdoaWxlIGFzc29jaWF0ZWQuICBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCBESVNBQkxFX05PVElGIGZsYWcgaW4gdGhlCi0gKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljLCBhYm92ZS4KLSAqCi0gKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbnRpbnVlIHRvIGluY3JlbWVudCBiZWFjb24gYWZ0ZXIgYmVhY29uLCBidXQgYXJlCi0gKiBjbGVhcmVkIHdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgb3Igd2hlbiBkcml2ZXIgaXNzdWVzIFJFUExZX1NUQVRJU1RJQ1NfQ01ECi0gKiAweDljIHdpdGggQ0xFQVJfU1RBVFMgYml0IHNldCAoc2VlIGFib3ZlKS4KLSAqCi0gKiB1Q29kZSBhbHNvIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBkdXJpbmcgc2NhbnMuICB1Q29kZSBjbGVhcnMgc3RhdGlzdGljcwotICogYXBwcm9wcmlhdGVseSBzbyB0aGF0IGVhY2ggbm90aWZpY2F0aW9uIGNvbnRhaW5zIHN0YXRpc3RpY3MgZm9yIG9ubHkgdGhlCi0gKiBvbmUgY2hhbm5lbCB0aGF0IGhhcyBqdXN0IGJlZW4gc2Nhbm5lZC4KLSAqLwotI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDIpCi0jZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4OCkKLXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgewotCV9fbGUzMiBmbGFnOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4IHJ4OwotCXN0cnVjdCBzdGF0aXN0aWNzX3R4IHR4OwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qCi0gKiBNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04gPSAweGEyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotLyogaWYgdWNvZGUgbWlzc2VkIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCBiZWFjb25zIGluIGEgcm93LAotICogdGhlbiB0aGlzIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQuICovCi0jZGVmaW5lIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCAyMAotCi1zdHJ1Y3QgaXdsMzk0NV9taXNzZWRfYmVhY29uX25vdGlmIHsKLQlfX2xlMzIgY29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnM7Ci0JX19sZTMyIHRvdGFsX21pc3NlZF9iZWNvbnM7Ci0JX19sZTMyIG51bV9leHBlY3RlZF9iZWFjb25zOwotCV9fbGUzMiBudW1fcmVjdmRfYmVhY29uczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMTEpCi0gKiBSeCBDYWxpYnJhdGlvbiBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgUEhZX0NBTElCUkFURV9ESUZGX0dBSU5fQ01EICg3KQotI2RlZmluZSBIRF9UQUJMRV9TSVpFICAoMTEpCi0KLXN0cnVjdCBpd2wzOTQ1X3NlbnNpdGl2aXR5X2NtZCB7Ci0JX19sZTE2IGNvbnRyb2w7Ci0JX19sZTE2IHRhYmxlW0hEX1RBQkxFX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X2NhbGlicmF0aW9uX2NtZCB7Ci0JdTggb3BDb2RlOwotCXU4IGZsYWdzOwotCV9fbGUxNiByZXNlcnZlZDsKLQlzOCBkaWZmX2dhaW5fYTsKLQlzOCBkaWZmX2dhaW5fYjsKLQlzOCBkaWZmX2dhaW5fYzsKLQl1OCByZXNlcnZlZDE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEyKQotICogTWlzY2VsbGFuZW91cyBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBMRURzIENvbW1hbmQgJiBSZXNwb25zZQotICogUkVQTFlfTEVEU19DTUQgPSAweDQ4IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogRm9yIGVhY2ggb2YgMyBwb3NzaWJsZSBMRURzIChBY3Rpdml0eS9MaW5rL1RlY2gsIHNlbGVjdGVkIGJ5ICJpZCIgZmllbGQpLAotICogdGhpcyBjb21tYW5kIHR1cm5zIGl0IG9uIG9yIG9mZiwgb3Igc2V0cyB1cCBhIHBlcmlvZGljIGJsaW5raW5nIGN5Y2xlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIHsKLQlfX2xlMzIgaW50ZXJ2YWw7CS8qICJpbnRlcnZhbCIgaW4gdVNlYyAqLwotCXU4IGlkOwkJCS8qIDE6IEFjdGl2aXR5LCAyOiBMaW5rLCAzOiBUZWNoICovCi0JdTggb2ZmOwkJCS8qICMgaW50ZXJ2YWxzIG9mZiB3aGlsZSBibGlua2luZzsKLQkJCQkgKiAiMCIsIHdpdGggPjAgIm9uIiB2YWx1ZSwgdHVybnMgTEVEIG9uICovCi0JdTggb247CQkJLyogIyBpbnRlcnZhbHMgb24gd2hpbGUgYmxpbmtpbmc7Ci0JCQkJICogIjAiLCByZWdhcmRsZXNzIG9mICJvZmYiLCB0dXJucyBMRUQgb2ZmICovCi0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEzKQotICogVW5pb24gb2YgYWxsIGV4cGVjdGVkIG5vdGlmaWNhdGlvbnMvcmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0IHsKLQlfX2xlMzIgbGVuOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKLQkJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgcnhfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgdHhfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIHNwZWN0cnVtX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIGNzYV9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfZXJyb3JfcmVzcCBlcnJfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfY2FyZF9zdGF0ZV9ub3RpZiBjYXJkX3N0YXRlX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgYmVhY29uX3N0YXR1czsKLQkJc3RydWN0IGl3bDM5NDVfYWRkX3N0YV9yZXNwIGFkZF9zdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiBzbGVlcF9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fcmVzcCBzcGVjdHJ1bTsKLQkJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0czsKLQkJX19sZTMyIHN0YXR1czsKLQkJdTggcmF3WzBdOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIElXTF9SWF9GUkFNRV9TSVpFICAgICAgICAoNCArIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSkpCi0KLSNlbmRpZgkJCQkvKiBfX2l3bDM5NDVfMzk0NV9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDYzNTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCi0gKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCi0gKgotICogR1BMIExJQ0VOU0UgU1VNTUFSWQotICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCi0gKiBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKgotICogQlNEIExJQ0VOU0UKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9faXdsXzM5NDVfZGV2X2hfXwotI2RlZmluZSBfX2l3bF8zOTQ1X2Rldl9oX18KLQotI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCi0JLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsICAuZGV2aWNlID0gKGRldiksIFwKLQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IChzdWJkZXYpLCBcCi0JLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQotCi0jZGVmaW5lIElXTF9TS1VfRyAgICAgICAweDEKLSNkZWZpbmUgSVdMX1NLVV9BICAgICAgIDB4MgotCi0vKioKLSAqIHN0cnVjdCBpd2xfMzk0NV9jZmcKLSAqIEBmd19uYW1lX3ByZTogRmlybXdhcmUgZmlsZW5hbWUgcHJlZml4LiBUaGUgYXBpIHZlcnNpb24gYW5kIGV4dGVuc2lvbgotICogCSgudWNvZGUpIHdpbGwgYmUgYWRkZWQgdG8gZmlsZW5hbWUgYmVmb3JlIGxvYWRpbmcgZnJvbSBkaXNrLiBUaGUKLSAqIAlmaWxlbmFtZSBpcyBjb25zdHJ1Y3RlZCBhcyBmd19uYW1lX3ByZTxhcGk+LnVjb2RlLgotICogQHVjb2RlX2FwaV9tYXg6IEhpZ2hlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqIEB1Y29kZV9hcGlfbWluOiBMb3dlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqCi0gKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCi0gKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCi0gKiBoaWdoZXN0IGFuZCBAdWNvZGVfYXBpX21pbiB0aGUgbG93ZXN0KS4gRmlybXdhcmUgd2lsbCBvbmx5IGJlIGxvYWRlZCBpZgotICogaXQgaGFzIGEgc3VwcG9ydGVkIEFQSSB2ZXJzaW9uLiBUaGUgZmlybXdhcmUncyBBUEkgdmVyc2lvbiB3aWxsIGJlCi0gKiBzdG9yZWQgaW4gQGl3bF9wcml2LCBlbmFibGluZyB0aGUgZHJpdmVyIHRvIG1ha2UgcnVudGltZSBjaGFuZ2VzIGJhc2VkCi0gKiBvbiBmaXJtd2FyZSB2ZXJzaW9uIHVzZWQuCi0gKgotICogRm9yIGV4YW1wbGUsCi0gKiBpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKLSAqIAlEcml2ZXIgaW50ZXJhY3RzIHdpdGggRmlybXdhcmUgQVBJIHZlcnNpb24gPj0gMi4KLSAqIH0gZWxzZSB7Ci0gKiAJRHJpdmVyIGludGVyYWN0cyB3aXRoIEZpcm13YXJlIEFQSSB2ZXJzaW9uIDEuCi0gKiB9Ci0gKi8KLXN0cnVjdCBpd2xfMzk0NV9jZmcgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3QgY2hhciAqZndfbmFtZV9wcmU7Ci0JY29uc3QgdW5zaWduZWQgaW50IHVjb2RlX2FwaV9tYXg7Ci0JY29uc3QgdW5zaWduZWQgaW50IHVjb2RlX2FwaV9taW47Ci0JdW5zaWduZWQgaW50IHNrdTsKLX07Ci0KLSNlbmRpZiAvKiBfX2l3bF9kZXZfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWI3NzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2wzOTQ1X2RlYnVnX2hfXwotI2RlZmluZSBfX2l3bDM5NDVfZGVidWdfaF9fCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotZXh0ZXJuIHUzMiBpd2wzOTQ1X2RlYnVnX2xldmVsOwotI2RlZmluZSBJV0xfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSI6ICVjICVzICIgZm10LCBcCi0JIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci0JaWYgKCEoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIGxldmVsKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIml3bCBkYXRhOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAotCQkJcCwgbGVuLCAxKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHX0xJTUlUKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci19Ci0jZW5kaWYJLyogQ09ORklHX0lXTDM5NDVfREVCVUcgKi8KLQotCi0KLS8qCi0gKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbTsKLSAqCi0gKiBJZiB5b3UgYXJlIGRlZmluaW5nIGEgbmV3IGRlYnVnIGNsYXNzaWZpY2F0aW9uLCBzaW1wbHkgYWRkIGl0IHRvIHRoZSAjZGVmaW5lCi0gKiBsaXN0IGhlcmUgaW4gdGhlIGZvcm0gb2Y6Ci0gKgotICogI2RlZmluZSBJV0xfRExfeHh4eCBWQUxVRQotICoKLSAqIHNoaWZ0aW5nIHZhbHVlIHRvIHRoZSBsZWZ0IG9uZSBiaXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkuICB4eHh4IHNob3VsZCBiZQotICogdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIChmb3IgZXhhbXBsZSwgV0VQKQotICoKLSAqIFlvdSB0aGVuIG5lZWQgdG8gZWl0aGVyIGFkZCBhIElXTF94eHh4X0RFQlVHKCkgbWFjcm8gZGVmaW5pdGlvbiBmb3IgeW91cgotICogY2xhc3NpZmljYXRpb24sIG9yIHVzZSBJV0xfREVCVUcoSVdMX0RMX3h4eHgsIC4uLikgd2hlbmV2ZXIgeW91IHdhbnQKLSAqIHRvIHNlbmQgb3V0cHV0IHRvIHRoYXQgY2xhc3NpZmljYXRpb24uCi0gKgotICogVG8gYWRkIHlvdXIgZGVidWcgbGV2ZWwgdG8gdGhlIGxpc3Qgb2YgbGV2ZWxzIHNlZW4gd2hlbiB5b3UgcGVyZm9ybQotICoKLSAqICUgY2F0IC9wcm9jL25ldC9pd2wvZGVidWdfbGV2ZWwKLSAqCi0gKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGl3bDM5NDVfZGVidWdfbGV2ZWxzIGFycmF5LgotICoKLSAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pd2wgdGhlbiB5b3UgZG8gbm90IGhhdmUKLSAqIENPTkZJR19JV0wzOTQ1X0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElXTF9ETF9JTkZPICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIElXTF9ETF9NQUM4MDIxMSAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElXTF9ETF9IT1NUX0NPTU1BTkQgICgxIDw8IDIpCi0jZGVmaW5lIElXTF9ETF9TVEFURSAgICAgICAgICgxIDw8IDMpCi0KLSNkZWZpbmUgSVdMX0RMX1JBRElPICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSVdMX0RMX1BPV0VSICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSVdMX0RMX1RFTVAgICAgICAgICAgKDEgPDwgOSkKLQotI2RlZmluZSBJV0xfRExfTk9USUYgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSVdMX0RMX1NDQU4gICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElXTF9ETF9BU1NPQyAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJV0xfRExfRFJPUCAgICAgICAgICAoMSA8PCAxMykKLQotI2RlZmluZSBJV0xfRExfVFhQT1dFUiAgICAgICAoMSA8PCAxNCkKLQotI2RlZmluZSBJV0xfRExfQVAgICAgICAgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBJV0xfRExfRlcgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSVdMX0RMX1JGX0tJTEwgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElXTF9ETF9GV19FUlJPUlMgICAgICgxIDw8IDE4KQotCi0jZGVmaW5lIElXTF9ETF9MRUQgICAgICAgICAgICgxIDw8IDE5KQotCi0jZGVmaW5lIElXTF9ETF9SQVRFICAgICAgICAgICgxIDw8IDIwKQotCi0jZGVmaW5lIElXTF9ETF9DQUxJQiAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJV0xfRExfV0VQICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSVdMX0RMX1RYICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElXTF9ETF9SWCAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJV0xfRExfSVNSICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSVdMX0RMX0hUICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJV0xfRExfMTFIICAgICAgICAgICAoMSA8PCAyOCkKLQotI2RlZmluZSBJV0xfRExfU1RBVFMgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSVdMX0RMX1RYX1JFUExZICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElXTF9ETF9RT1MgICAgICAgICAgICgxIDw8IDMxKQotCi0jZGVmaW5lIElXTF9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lORk8oZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RFTVAoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1RFTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUlgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9UWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lTUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0xFRChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5ELCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0ZXKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfRlcsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0RST1AoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0lPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFURShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1JBVEUsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX05PVElGKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTk9USUYsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChmLCBhLi4uKSBcCi0JSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSFQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IVCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TVEFUU19MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1FPUyhmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfUU9TLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFESU8oZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUkFESU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19QT1dFUihmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9QT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHXzExSChmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF8xMUgsIGYsICMjIGEpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2UyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX2l3bF8zOTQ1X2ZoX2hfXworI2RlZmluZSBfX2l3bF8zOTQ1X2ZoX2hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogaXdsMzk0NSBGbG93IEhhbmRsZXIgRGVmaW5pdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBJL08gYXJlYSBpcyBkaXJlY3RseSByZWFkL3dyaXRhYmxlIGJ5IGRyaXZlciAoZS5nLiBMaW51eCB1c2VzIHdyaXRlbCgpKQorICogQWRkcmVzc2VzIGFyZSBvZmZzZXRzIGZyb20gZGV2aWNlJ3MgUENJIGhhcmR3YXJlIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBGSDM5X01FTV9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAoMHgwODAwKQorI2RlZmluZSBGSDM5X01FTV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorCisjZGVmaW5lIEZIMzlfQ0JDQ19UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHgxNDApCisjZGVmaW5lIEZIMzlfVEZEQl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHgxODApCisjZGVmaW5lIEZIMzlfUkNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg0MDApCisjZGVmaW5lIEZIMzlfUlNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg0YzApCisjZGVmaW5lIEZIMzlfVENTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg1MDApCisjZGVmaW5lIEZIMzlfVFNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg2ODApCisKKy8qIFRGREIgKFRyYW5zbWl0IEZyYW1lIEJ1ZmZlciBEZXNjcmlwdG9yKSAqLworI2RlZmluZSBGSDM5X1RGREIoX2NoLCBidWYpCQkJKEZIMzlfVEZEQl9UQUJMRSArIFwKKwkJCQkJCSAoKF9jaCkgKiAyICsgKGJ1ZikpICogMHgyOCkKKyNkZWZpbmUgRkgzOV9URkRCX0NITkxfQlVGX0NUUkxfUkVHKF9jaCkJKEZIMzlfVEZEQl9UQUJMRSArIDB4NTAgKiAoX2NoKSkKKworLyogQ0JDQyBjaGFubmVsIGlzIFswLDJdICovCisjZGVmaW5lIEZIMzlfQ0JDQyhfY2gpCQkoRkgzOV9DQkNDX1RBQkxFICsgKF9jaCkgKiAweDgpCisjZGVmaW5lIEZIMzlfQ0JDQ19DVFJMKF9jaCkJKEZIMzlfQ0JDQyhfY2gpICsgMHgwMCkKKyNkZWZpbmUgRkgzOV9DQkNDX0JBU0UoX2NoKQkoRkgzOV9DQkNDKF9jaCkgKyAweDA0KQorCisvKiBSQ1NSIGNoYW5uZWwgaXMgWzAsMl0gKi8KKyNkZWZpbmUgRkgzOV9SQ1NSKF9jaCkJCQkoRkgzOV9SQ1NSX1RBQkxFICsgKF9jaCkgKiAweDQwKQorI2RlZmluZSBGSDM5X1JDU1JfQ09ORklHKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MDApCisjZGVmaW5lIEZIMzlfUkNTUl9SQkRfQkFTRShfY2gpCQkoRkgzOV9SQ1NSKF9jaCkgKyAweDA0KQorI2RlZmluZSBGSDM5X1JDU1JfV1BUUihfY2gpCQkoRkgzOV9SQ1NSKF9jaCkgKyAweDIwKQorI2RlZmluZSBGSDM5X1JDU1JfUlBUUl9BRERSKF9jaCkJKEZIMzlfUkNTUihfY2gpICsgMHgyNCkKKworI2RlZmluZSBGSDM5X1JTQ1NSX0NITkwwX1dQVFIJCShGSDM5X1JDU1JfV1BUUigwKSkKKworLyogUlNTUiAqLworI2RlZmluZSBGSDM5X1JTU1JfQ1RSTAkJCShGSDM5X1JTU1JfVEFCTEUgKyAweDAwMCkKKyNkZWZpbmUgRkgzOV9SU1NSX1NUQVRVUwkJKEZIMzlfUlNTUl9UQUJMRSArIDB4MDA0KQorCisvKiBUQ1NSICovCisjZGVmaW5lIEZIMzlfVENTUihfY2gpCQkJKEZIMzlfVENTUl9UQUJMRSArIChfY2gpICogMHgyMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX0NPTkZJRyhfY2gpCQkoRkgzOV9UQ1NSKF9jaCkgKyAweDAwKQorI2RlZmluZSBGSDM5X1RDU1JfQ1JFRElUKF9jaCkJCShGSDM5X1RDU1IoX2NoKSArIDB4MDQpCisjZGVmaW5lIEZIMzlfVENTUl9CVUZGX1NUVFMoX2NoKQkoRkgzOV9UQ1NSKF9jaCkgKyAweDA4KQorCisvKiBUU1NSICovCisjZGVmaW5lIEZIMzlfVFNTUl9DQkJfQkFTRSAgICAgICAgKEZIMzlfVFNTUl9UQUJMRSArIDB4MDAwKQorI2RlZmluZSBGSDM5X1RTU1JfTVNHX0NPTkZJRyAgICAgIChGSDM5X1RTU1JfVEFCTEUgKyAweDAwOCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVUyAgICAgICAoRkgzOV9UU1NSX1RBQkxFICsgMHgwMTApCisKKworLyogREJNICovCisKKyNkZWZpbmUgRkgzOV9TUlZDX0NITkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX1JCRENfU0laRSAgICAgKDIwKQorI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEggICAgICAoNCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19CSVRfV1JfU1RUU19FTiAgICAoMHgwODAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFICAgICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkRSQkRfRU5fRU5BQkxFICAgICAgICAgICAoMHgyMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjgJCSgweDAxMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9JUlFfREVTVF9JTlRfSE9TVAkJKDB4MDAwMDEwMDApCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0ZICQkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX1RYRgkJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9EUklWRVIJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMCSgweDAwMDAwMDAwKQorI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMCSgweDAwMDAwMDA4KQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQJCSgweDAwMjAwMDAwKQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX1JUQ19OT0lOVAkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX1BBVVNFCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX0VOQUJMRQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQJCSgweDAwMDA0MDAwKQorCisjZGVmaW5lIEZIMzlfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX0JJVF9URkRCX1dQVFIJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTgkoMHhGRjAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OCSgweDAwRkYwMDAwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCCSgweDAwMDAwNDAwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVEZEX09OCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9DQkJfT04JCSgweDAwMDAwMDgwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEgJKDB4MDAwMDAwMjApCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfUlNQX1dBSVRfVEgJCSgweDAwMDAwMDA1KQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaCkJKEJJVChfY2gpIDw8IDI0KQorI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoKQkoQklUKF9jaCkgPDwgMTYpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShfY2gpIFwKKwkoRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoKSB8IFwKKwkgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaCkpCisKKyNkZWZpbmUgRkgzOV9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJCQkoMHgwMTAwMDAwMCkKKworc3RydWN0IGl3bDM5NDVfdGZkX3RiIHsKKwlfX2xlMzIgYWRkcjsKKwlfX2xlMzIgbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpd2wzOTQ1X3RmZCB7CisJX19sZTMyIGNvbnRyb2xfZmxhZ3M7CisJc3RydWN0IGl3bDM5NDVfdGZkX3RiIHRic1s0XTsKKwl1OCBfX3BhZFsyOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZW5kaWYgLyogX19pd2xfMzk0NV9maF9oX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDk0ZWEwZTYuLjczZjkzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3NyArNjksMjYgQEAKICNpZm5kZWYgX19pd2xfMzk0NV9od19fCiAjZGVmaW5lIF9faXdsXzM5NDVfaHdfXwogCisjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgorCiAvKgogICogdUNvZGUgcXVldWUgbWFuYWdlbWVudCBkZWZpbml0aW9ucyAuLi4KICAqIFF1ZXVlICM0IGlzIHRoZSBjb21tYW5kIHF1ZXVlIGZvciAzOTQ1IGFuZCA0OTY1LgogICovCi0jZGVmaW5lIElXTF9DTURfUVVFVUVfTlVNICAgICAgIDQKLQotLyogVHggcmF0ZXMgKi8KLSNkZWZpbmUgSVdMX0NDS19SQVRFUyA0Ci0jZGVmaW5lIElXTF9PRkRNX1JBVEVTIDgKLSNkZWZpbmUgSVdMX0hUX1JBVEVTIDAKLSNkZWZpbmUgSVdMX01BWF9SQVRFUyAgKElXTF9DQ0tfUkFURVMrSVdMX09GRE1fUkFURVMrSVdMX0hUX1JBVEVTKQorI2RlZmluZSBJV0xfQ01EX1FVRVVFX05VTQk0CiAKIC8qIFRpbWUgY29uc3RhbnRzICovCiAjZGVmaW5lIFNIT1JUX1NMT1RfVElNRSA5CiAjZGVmaW5lIExPTkdfU0xPVF9USU1FIDIwCiAKIC8qIFJTU0kgdG8gZEJtICovCi0jZGVmaW5lIElXTF9SU1NJX09GRlNFVAk5NQorI2RlZmluZSBJV0wzOV9SU1NJX09GRlNFVAk5NQogCiAvKgogICogRUVQUk9NIHJlbGF0ZWQgY29uc3RhbnRzLCBlbnVtcywgYW5kIHN0cnVjdHVyZXMuCiAgKi8KLQotLyoKLSAqIEVFUFJPTSBhY2Nlc3MgdGltZSB2YWx1ZXM6Ci0gKgotICogRHJpdmVyIGluaXRpYXRlcyBFRVBST00gcmVhZCBieSB3cml0aW5nIGJ5dGUgYWRkcmVzcyA8PCAxIHRvIENTUl9FRVBST01fUkVHLAotICogICB0aGVuIGNsZWFyaW5nICh3aXRoIHN1YnNlcXVlbnQgcmVhZC9tb2RpZnkvd3JpdGUpIENTUl9FRVBST01fUkVHIGJpdAotICogICBDU1JfRUVQUk9NX1JFR19CSVRfQ01EICgweDIpLgotICogRHJpdmVyIHRoZW4gcG9sbHMgQ1NSX0VFUFJPTV9SRUcgZm9yIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLICgweDEpLgotICogV2hlbiBwb2xsaW5nLCB3YWl0IDEwIHVTZWMgYmV0d2VlbiBwb2xsaW5nIGxvb3BzLCB1cCB0byBhIG1heGltdW0gNTAwMCB1U2VjLgotICogRHJpdmVyIHJlYWRzIDE2LWJpdCB2YWx1ZSBmcm9tIGJpdHMgMzEtMTYgb2YgQ1NSX0VFUFJPTV9SRUcuCi0gKi8KLSNkZWZpbmUgSVdMX0VFUFJPTV9BQ0NFU1NfVElNRU9VVAk1MDAwIC8qIHVTZWMgKi8KLQotLyoKLSAqIFJlZ3VsYXRvcnkgY2hhbm5lbCB1c2FnZSBmbGFncyBpbiBFRVBST00gc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbC5mbGFncy4KLSAqCi0gKiBJQlNTIGFuZC9vciBBUCBvcGVyYXRpb24gaXMgYWxsb3dlZCAqb25seSogb24gdGhvc2UgY2hhbm5lbHMgd2l0aAotICogKFZBTElEICYmIElCU1MgJiYgQUNUSVZFICYmICFSQURBUikuICBUaGlzIHJlc3RyaWN0aW9uIGlzIGluIHBsYWNlIGJlY2F1c2UKLSAqIFJBREFSIGRldGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAzOTQ1IGRyaXZlciwgYnV0IGlzIGEKLSAqIHJlcXVpcmVtZW50IGZvciBlc3RhYmxpc2hpbmcgYSBuZXcgbmV0d29yayBmb3IgbGVnYWwgb3BlcmF0aW9uIG9uIGNoYW5uZWxzCi0gKiByZXF1aXJpbmcgUkFEQVIgZGV0ZWN0aW9uIG9yIHJlc3RyaWN0aW5nIEFDVElWRSBzY2FubmluZy4KLSAqCi0gKiBOT1RFOiAgIldJREUiIGZsYWcgaW5kaWNhdGVzIHRoYXQgMjAgTUh6IGNoYW5uZWwgaXMgc3VwcG9ydGVkOwotICogICAgICAgIDM5NDUgZG9lcyBub3Qgc3VwcG9ydCBGQVQgNDAgTUh6LXdpZGUgY2hhbm5lbHMuCi0gKgotICogTk9URTogIFVzaW5nIGEgY2hhbm5lbCBpbmFwcHJvcHJpYXRlbHkgd2lsbCByZXN1bHQgaW4gYSB1Q29kZSBlcnJvciEKLSAqLwotZW51bSB7Ci0JRUVQUk9NX0NIQU5ORUxfVkFMSUQgPSAoMSA8PCAwKSwJLyogdXNhYmxlIGZvciB0aGlzIFNLVS9nZW8gKi8KLQlFRVBST01fQ0hBTk5FTF9JQlNTID0gKDEgPDwgMSksCQkvKiB1c2FibGUgYXMgYW4gSUJTUyBjaGFubmVsICovCi0JLyogQml0IDIgUmVzZXJ2ZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9BQ1RJVkUgPSAoMSA8PCAzKSwJLyogYWN0aXZlIHNjYW5uaW5nIGFsbG93ZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9SQURBUiA9ICgxIDw8IDQpLAkvKiByYWRhciBkZXRlY3Rpb24gcmVxdWlyZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9XSURFID0gKDEgPDwgNSksCQkvKiAyMCBNSHogY2hhbm5lbCBva2F5ICovCi0JLyogQml0IDYgUmVzZXJ2ZWQgKHdhcyBOYXJyb3cgQ2hhbm5lbCkgKi8KLQlFRVBST01fQ0hBTk5FTF9ERlMgPSAoMSA8PCA3KSwJLyogZHluYW1pYyBmcmVxIHNlbGVjdGlvbiBjYW5kaWRhdGUgKi8KLX07Ci0KLS8qIFNLVSBDYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfT1BfTU9ERV9NUkMgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKIAotLyogKnJlZ3VsYXRvcnkqIGNoYW5uZWwgZGF0YSBmcm9tIGVlcHJvbSwgb25lIGZvciBlYWNoIGNoYW5uZWwgKi8KLXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIHsKLQl1OCBmbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwotCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogLyoKICAqIE1hcHBpbmcgb2YgYSBUeCBwb3dlciBsZXZlbCwgYXQgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSwKICAqICAgdG8gYSByYWRpby9EU1AgZ2FpbiB0YWJsZSBpbmRleC4KQEAgLTIzMyw3ICsxODIsNyBAQAogICogMi40IEdIeiBjaGFubmVscyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKICAqLwogCXUxNiBiYW5kXzFfY291bnQ7CS8qIGFicy5vZnM6IDE5NiAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07ICAvKiBhYnMub2ZzOiAxOTYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07ICAvKiBhYnMub2ZzOiAxOTggKi8KIAogLyoKICAqIDQuOSBHSHogY2hhbm5lbHMgMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsCkBAIC0yNDEsMjggKzE5MCwyOCBAQAogICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCiAgKi8KIAl1MTYgYmFuZF8yX2NvdW50OwkvKiBhYnMub2ZzOiAyMjYgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCiAKIC8qCiAgKiA1LjIgR0h6IGNoYW5uZWxzIDM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKICAqICg1MTcwLTUzMjBNSHopCiAgKi8KIAl1MTYgYmFuZF8zX2NvdW50OwkvKiBhYnMub2ZzOiAyNTQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCiAKIC8qCiAgKiA1LjUgR0h6IGNoYW5uZWxzIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCiAgKiAoNTUwMC01NzAwTUh6KQogICovCiAJdTE2IGJhbmRfNF9jb3VudDsJLyogYWJzLm9mczogMjgwICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLwogCiAvKgogICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CiAgKiAoNTcyNS01ODI1TUh6KQogICovCiAJdTE2IGJhbmRfNV9jb3VudDsJLyogYWJzLm9mczogMzA0ICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF81X2NoYW5uZWxzWzZdOyAgLyogYWJzLm9mczogMzA2ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzVfY2hhbm5lbHNbNl07ICAvKiBhYnMub2ZzOiAzMDYgKi8KIAogCXU4IHJlc2VydmVkOVsxOTRdOwogCkBAIC0yNzYsMTI1ICsyMjUsMTUgQEAKIAl1OCByZXNlcnZlZDE2WzE3Ml07CS8qIGZpbGwgb3V0IHRvIGZ1bGwgMTAyNCBieXRlIGJsb2NrICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJV0xfRUVQUk9NX0lNQUdFX1NJWkUgMTAyNAorI2RlZmluZSBJV0wzOTQ1X0VFUFJPTV9JTUdfU0laRSAxMDI0CiAKIC8qIEVuZCBvZiBFRVBST00gKi8KIAotCi0jaW5jbHVkZSAiaXdsLTM5NDUtY29tbWFuZHMuaCIKLQotI2RlZmluZSBQQ0lfTElOS19DVFJMICAgICAgMHgwRjAKLSNkZWZpbmUgUENJX1BPV0VSX1NPVVJDRSAgIDB4MEM4Ci0jZGVmaW5lIFBDSV9SRUdfV1VNOCAgICAgICAweDBFOAotI2RlZmluZSBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCAgICAgICAgICgweDgwMDAwMDAwKQotCi0vKj09PSBGSCAoZGF0YSBGbG93IEhhbmRsZXIpID09PSovCi0jZGVmaW5lIEZIX0JBU0UgICAgICgweDgwMCkKLQotI2RlZmluZSBGSF9DQkNDX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDE0MCkKLSNkZWZpbmUgRkhfVEZEQl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHgxODApCi0jZGVmaW5lIEZIX1JDU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NDAwKQotI2RlZmluZSBGSF9SU1NSX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDRjMCkKLSNkZWZpbmUgRkhfVENTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg1MDApCi0jZGVmaW5lIEZIX1RTU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NjgwKQotCi0vKiBURkRCIChUcmFuc21pdCBGcmFtZSBCdWZmZXIgRGVzY3JpcHRvcikgKi8KLSNkZWZpbmUgRkhfVEZEQihfY2hhbm5lbCwgYnVmKSBcCi0JKEZIX1RGREJfVEFCTEUrKChfY2hhbm5lbCkqMisoYnVmKSkqMHgyOCkKLSNkZWZpbmUgQUxNX0ZIX1RGREJfQ0hOTF9CVUZfQ1RSTF9SRUcoX2NoYW5uZWwpIFwKLQkoRkhfVEZEQl9UQUJMRSArIDB4NTAgKiBfY2hhbm5lbCkKLS8qIENCQ0MgX2NoYW5uZWwgaXMgWzAsMl0gKi8KLSNkZWZpbmUgRkhfQ0JDQyhfY2hhbm5lbCkgICAgICAgICAgIChGSF9DQkNDX1RBQkxFKyhfY2hhbm5lbCkqMHg4KQotI2RlZmluZSBGSF9DQkNDX0NUUkwoX2NoYW5uZWwpICAgICAgKEZIX0NCQ0MoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX0NCQ0NfQkFTRShfY2hhbm5lbCkgICAgICAoRkhfQ0JDQyhfY2hhbm5lbCkrMHgwNCkKLQotLyogUkNTUiBfY2hhbm5lbCBpcyBbMCwyXSAqLwotI2RlZmluZSBGSF9SQ1NSKF9jaGFubmVsKSAgICAgICAgICAgKEZIX1JDU1JfVEFCTEUrKF9jaGFubmVsKSoweDQwKQotI2RlZmluZSBGSF9SQ1NSX0NPTkZJRyhfY2hhbm5lbCkgICAgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX1JDU1JfUkJEX0JBU0UoX2NoYW5uZWwpICAoRkhfUkNTUihfY2hhbm5lbCkrMHgwNCkKLSNkZWZpbmUgRkhfUkNTUl9XUFRSKF9jaGFubmVsKSAgICAgIChGSF9SQ1NSKF9jaGFubmVsKSsweDIwKQotI2RlZmluZSBGSF9SQ1NSX1JQVFJfQUREUihfY2hhbm5lbCkgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MjQpCi0KLSNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfV1BUUiAgICAgICAgKEZIX1JDU1JfV1BUUigwKSkKLQotLyogUlNTUiAqLwotI2RlZmluZSBGSF9SU1NSX0NUUkwgICAgICAgICAgICAoRkhfUlNTUl9UQUJMRSsweDAwMCkKLSNkZWZpbmUgRkhfUlNTUl9TVEFUVVMgICAgICAgICAgKEZIX1JTU1JfVEFCTEUrMHgwMDQpCi0jZGVmaW5lIEZIX1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRQkoMHgwMTAwMDAwMCkKLS8qIFRDU1IgKi8KLSNkZWZpbmUgRkhfVENTUihfY2hhbm5lbCkgICAgICAgICAgIChGSF9UQ1NSX1RBQkxFKyhfY2hhbm5lbCkqMHgyMCkKLSNkZWZpbmUgRkhfVENTUl9DT05GSUcoX2NoYW5uZWwpICAgIChGSF9UQ1NSKF9jaGFubmVsKSsweDAwKQotI2RlZmluZSBGSF9UQ1NSX0NSRURJVChfY2hhbm5lbCkgICAgKEZIX1RDU1IoX2NoYW5uZWwpKzB4MDQpCi0jZGVmaW5lIEZIX1RDU1JfQlVGRl9TVFRTKF9jaGFubmVsKSAoRkhfVENTUihfY2hhbm5lbCkrMHgwOCkKLS8qIFRTU1IgKi8KLSNkZWZpbmUgRkhfVFNTUl9DQkJfQkFTRSAgICAgICAgKEZIX1RTU1JfVEFCTEUrMHgwMDApCi0jZGVmaW5lIEZIX1RTU1JfTVNHX0NPTkZJRyAgICAgIChGSF9UU1NSX1RBQkxFKzB4MDA4KQotI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVUyAgICAgICAoRkhfVFNTUl9UQUJMRSsweDAxMCkKLQotCi0vKiBEQk0gKi8KLQotI2RlZmluZSBBTE1fRkhfU1JWQ19DSE5MICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX1JCRENfU0laRSAgICAgKDIwKQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19JUlFfUkJUSCAgICAgICg0KQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfQklUX1dSX1NUVFNfRU4gICAgKDB4MDgwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgICAgICAgICAgICgweDIwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4ICAgICAgICAgKDB4MDEwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfSVJRX0RFU1RfSU5UX0hPU1QgICAgICAgICAoMHgwMDAwMTAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX1RYRiAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0RSSVZFUiAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9ESVNBQkxFX1ZBTCAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMICAgICAoMHgwMDAwMDAwOCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQgICAgICAgICAgICgweDAwMjAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFICAgICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX1ZBTF9URkRCX1ZBTElEICAgICAgICAgICgweDAwMDA0MDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfQklUX1RGREJfV1BUUiAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1NOT09QX1JEX1RYUERfT04gICAgICAoMHhGRjAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX1RYUERfT04gICAgICAoMHgwMEZGMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCICAgICgweDAwMDAwNDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9DQkJfT04gICAgICAgKDB4MDAwMDAwODApCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIICAgICAoMHgwMDAwMDAyMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIICAgICAgICAgICAoMHgwMDAwMDAwNSkKLQotI2RlZmluZSBBTE1fVEJfTUFYX0JZVEVTX0NPVU5UICAgICAgKDB4RkZGMCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaGFubmVsKSBcCi0JKCgxTFUgPDwgX2NoYW5uZWwpIDw8IDI0KQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2hhbm5lbCkgXAotCSgoMUxVIDw8IF9jaGFubmVsKSA8PCAxNikKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUoX2NoYW5uZWwpIFwKLQkoQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hhbm5lbCkgfCBcCi0JIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaGFubmVsKSkKICNkZWZpbmUgUENJX0NGR19SRVZfSURfQklUX0JBU0lDX1NLVSAgICAgICAgICAgICAgICAoMHg0MCkJLyogYml0IDYgICAgKi8KICNkZWZpbmUgUENJX0NGR19SRVZfSURfQklUX1JUUCAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkJLyogYml0IDcgICAgKi8KIAogI2RlZmluZSBURkRfUVVFVUVfTUlOICAgICAgICAgICAwCi0jZGVmaW5lIFRGRF9RVUVVRV9NQVggICAgICAgICAgIDYKLSNkZWZpbmUgVEZEX1FVRVVFX1NJWkVfTUFYICAgICAgKDI1NikKKyNkZWZpbmUgVEZEX1FVRVVFX01BWCAgICAgICAgICAgNQkvKiA0IERBVEEgKyAxIENNRCAqLwogCiAjZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQogCkBAIC00MTYsMTIgKzI1NSw2IEBACiAjZGVmaW5lIFRGRF9DVExfUEFEX1NFVChuKSAgICAgICAgIChuIDw8IDI4KQogI2RlZmluZSBURkRfQ1RMX1BBRF9HRVQoY3RsKSAgICAgICAoY3RsID4+IDI4KQogCi0jZGVmaW5lIFRGRF9UWF9DTURfU0xPVFMgMjU2Ci0jZGVmaW5lIFRGRF9DTURfU0xPVFMgMzIKLQotI2RlZmluZSBURkRfTUFYX1BBWUxPQURfU0laRSAoc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX21ldGEpKQotCiAvKgogICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKICAqLwpAQCAtNDMwLDQ1ICsyNjMsMzUgQEAKIAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogMzk0NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwotI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKLSNkZWZpbmUgQUxNX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCiAKLSNkZWZpbmUgUlRDX0RBVEFfTE9XRVJfQk9VTkQJCQkoMHg4MDAwMDApCi0jZGVmaW5lIEFMTV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQogCi0jZGVmaW5lIEFMTV9SVENfSU5TVF9TSVpFIChBTE1fUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgQUxNX1JUQ19EQVRBX1NJWkUgKEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0wzOV9SVENfSU5TVF9TSVpFIChJV0wzOV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0wzOV9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMMzlfUlRDX0RBVEFfU0laRSAoSVdMMzlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMMzlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgQUxNX1JUQ19JTlNUX1NJWkUKLSNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgQUxNX1JUQ19EQVRBX1NJWkUKKyNkZWZpbmUgSVdMMzlfTUFYX0lOU1RfU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9EQVRBX1NJWkUgSVdMMzlfUlRDX0RBVEFfU0laRQogCiAvKiBTaXplIG9mIHVDb2RlIGluc3RydWN0aW9uIG1lbW9yeSBpbiBib290c3RyYXAgc3RhdGUgbWFjaGluZSAqLwotI2RlZmluZSBJV0xfTUFYX0JTTV9TSVpFIEFMTV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9CU01fU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCiAKICNkZWZpbmUgSVdMMzlfTUFYX05VTV9RVUVVRVMJOAogCiBzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyID49IFJUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgotCSAgICAgICAoYWRkciA8IEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCk7CisJcmV0dXJuIChhZGRyID49IElXTDM5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgorCSAgICAgICAoYWRkciA8IElXTDM5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIAogLyogQmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGl3bDM5NDVfc2hhcmVkIGlzIHByb3ZpZGVkIHRvIEZIX1RTU1JfQ0JCX0JBU0UKICAqIGFuZCAmaXdsMzk0NV9zaGFyZWQucnhfcmVhZF9wdHJbMF0gaXMgcHJvdmlkZWQgdG8gRkhfUkNTUl9SUFRSX0FERFIoMCkgKi8KIHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCB7CiAJX19sZTMyIHR4X2Jhc2VfcHRyWzhdOwotCV9fbGUzMiByeF9yZWFkX3B0clszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWVfZGF0YSB7Ci0JX19sZTMyIGFkZHI7Ci0JX19sZTMyIGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgewotCV9fbGUzMiBjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZV9kYXRhIHBhWzRdOwotCXU4IHJlc2VydmVkWzI4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdGF0aWMgaW5saW5lIHU4IGl3bDM5NDVfaHdfZ2V0X3JhdGUoX19sZTE2IHJhdGVfbl9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0MGZkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDM5NDVfaW9faF9fCi0jZGVmaW5lIF9faXdsMzk0NV9pb19oX18KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJpd2wtMzk0NS1kZWJ1Zy5oIgotCi0vKgotICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCi0gKgotICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKLSAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKLSAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBpcyBwcmludGVkIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQotICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBfX0xJTkVfXyB0byB0aGUgZG91YmxlIHByZWZpeCB2ZXJzaW9uLgotICoKLSAqIElmIHlvdSB3aXNoIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgYW55IGRlYnVnIG9yIHN0YXRlIGNoZWNraW5nLAotICogeW91IHNob3VsZCB1c2UgdGhlIHNpbmdsZSBfIHByZWZpeCB2ZXJzaW9uIChhcyBpcyB1c2VkIGJ5IGRlcGVuZGVudCBJTwotICogcm91dGluZXMsIGZvciBleGFtcGxlIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCi0gKiBfaXdsMzk0NV9yZWFkMzIuKQotICoKLSAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgKmV4dHJlbWVseSogdXNlZnVsIGluIHF1aWNrbHkgaXNvbGF0aW5nIGNvZGUgZGVsdGFzCi0gKiB3aGljaCByZXN1bHQgaW4gbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUgSS9PLiAgSW4gY29tYmluYXRpb24gd2l0aAotICogZ2l0LWJpc2VjdCBhbmQgdGhlIElPIGRlYnVnIGxldmVsIHlvdSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljCi0gKiBjb21taXQgd2hpY2ggYnJlYWtzIHRoZSBJTyBzZXF1ZW5jZSB0byB0aGUgaGFyZHdhcmUuCi0gKgotICovCi0KLSNkZWZpbmUgX2l3bDM5NDVfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgaW93cml0ZTMyKCh2YWwpLCAocHJpdiktPmh3X2Jhc2UgKyAob2ZzKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV93cml0ZTMyKGNvbnN0IGNoYXIgKmYsIHUzMiBsLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQotewotCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOwotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwotfQotI2RlZmluZSBpd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGUzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIG9mcywgdmFsKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKQotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcykgaW9yZWFkMzIoKHByaXYpLT5od19iYXNlICsgKG9mcykpCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBvZnMpCi17Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCBmLCBsKTsKLQlyZXR1cm4gX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVhZDMyKHByaXYsIG9mcylfX2l3bDM5NDVfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgb2ZzKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9yZWFkMzIocCwgbykgX2l3bDM5NDVfcmVhZDMyKHAsIG8pCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlkbyB7Ci0JCWlmICgoX2l3bDM5NDVfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKLQkJCXJldHVybiBpOwotCQl1ZGVsYXkoMTApOwotCQlpICs9IDEwOwotCX0gd2hpbGUgKGkgPCB0aW1lb3V0KTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bDM5NDVfcG9sbF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAotCQkgICAgICBhZGRyLCBiaXRzLCBtYXNrLAotCQkgICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcG9sbF9iaXQocHJpdiwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2wzOTQ1X3NldF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfc2V0X2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JdTMyIHZhbCA9IF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzazsKLQlJV0xfREVCVUdfSU8oInNldF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfc2V0X2JpdChwLCByLCBtKSBfX2l3bDM5NDVfc2V0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXQocCwgciwgbSkgX2l3bDM5NDVfc2V0X2JpdChwLCByLCBtKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9jbGVhcl9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpICYgfm1hc2spOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKLQlfaXdsMzk0NV93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkgX19pd2wzOTQ1X2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X2NsZWFyX2JpdChwLCByLCBtKSBfaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBfaXdsMzk0NV9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCS8qIHRoaXMgYml0IHdha2VzIHVwIHRoZSBOSUMgKi8KLQlfaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQlyZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICBDU1JfR1BfQ05UUkxfUkVHX1ZBTF9NQUNfQUNDRVNTX0VOLAotCQkJICAgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgfAotCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCksIDUwKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIk1BQyBpcyBpbiBkZWVwIHNsZWVwIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JYXRvbWljX2luYygmcHJpdi0+cmVzdHJpY3RfcmVmY250KTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0RFQlVHX0lORk8oIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgYXQgIgotCQkJICAgICAgICJsaW5lICVkLlxuIiwgbCk7Ci0KLQlJV0xfREVCVUdfSU8oImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoX19GSUxFX18sIF9fTElORV9fLCBwcml2KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotI2VuZGlmCi0JCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlZC5cbiIsIGwpOwotCi0JSVdMX0RFQlVHX0lPKCJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfX2l3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdikKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHUzMiBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHUzMiBfX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZykKLXsKLQl1MzIgdmFsdWUgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIHJlZyk7Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgJWRcbiIsIGYsIGwpOwotCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCU0WCkgPSAweCUwOHggLSAlcyAlZCBcbiIsIHJlZywgdmFsdWUsCi0JCSAgICAgZiwgbCk7Ci0JcmV0dXJuIHZhbHVlOwotfQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKSBcCi0JX19pd2wzOTQ1X3JlYWRfZGlyZWN0MzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCByZWcpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIgX2l3bDM5NDVfcmVhZF9kaXJlY3QzMgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV93cml0ZV9kaXJlY3QzMih1MzIgbGluZSwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsdWUpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSkgXAotCV9faXdsMzk0NV93cml0ZV9kaXJlY3QzMihfX0xJTkVfXywgcHJpdiwgcmVnLCB2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIgX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV93cml0ZV9yZWdfYnVmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgICB1MzIgcmVnLCB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQl1MzIgY291bnQgPSBzaXplb2YodTMyKTsKLQotCWlmICgocHJpdiAhPSBOVUxMKSAmJiAodmFsdWVzICE9IE5VTEwpKSB7Ci0JCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gY291bnQsIHJlZyArPSBjb3VudCwgdmFsdWVzKyspCi0JCQlfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgIHUzMiBhZGRyLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3BvbGxfYml0KHByaXYsIGFkZHIsIG1hc2ssIG1hc2ssIHRpbWVvdXQpOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgICAgdTMyIGFkZHIsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmV0ICA9IF9pd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKLQotCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKLQkJCSAgICAgInRpbWVkb3V0IC0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPKCJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYICIKLQkJCSAgICAgIi0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIHJldCwgZiwgbCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bDM5NDVfcmVhZF9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkFERFIsIHJlZyB8ICgzIDw8IDI0KSk7Ci0Jcm1iKCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkRBVCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkX3BycGgodTMyIGxpbmUsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgXAotCV9faXdsMzk0NV9yZWFkX3BycGgoX19MSU5FX18sIHByaXYsIHJlZykKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoIF9pd2wzOTQ1X3JlYWRfcHJwaAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfV0FERFIsCi0JCQkgICAgICAoKGFkZHIgJiAweDAwMDBGRkZGKSB8ICgzIDw8IDI0KSkpOwotCXdtYigpOwotCV9pd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dEQVQsIHZhbCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfd3JpdGVfcHJwaCh1MzIgbGluZSwgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGVfcHJwaChfX0xJTkVfXywgcHJpdiwgYWRkciwgdmFsKTsKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaCBfaXdsMzk0NV93cml0ZV9wcnBoCi0jZW5kaWYKLQotI2RlZmluZSBfaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgfCBtYXNrKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9zZXRfYml0c19wcnBoKHUzMiBsaW5lLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQl1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSBsaW5lICVkXG4iLCBsaW5lKTsKLQotCV9pd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9faXdsMzk0NV9zZXRfYml0c19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX3BycGggX2l3bDM5NDVfc2V0X2JpdHNfcHJwaAotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoKF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCh1MzIgbGluZSwKLQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIGJpdHMsIHUzMiBtYXNrKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCV9pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spOwotfQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spIFwKLQlfX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIGJpdHMsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCBfaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgoc3RydWN0IGl3bDM5NDVfcHJpdgotCQkJCQkJICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZyk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCi17Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBhZGRyKTsKLQlybWIoKTsKLQlyZXR1cm4gaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9XQUREUiwgYWRkcik7Ci0Jd21iKCk7Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtX2J1ZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQkJICB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCXdtYigpOwotCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gc2l6ZW9mKHUzMiksIHZhbHVlcysrKQotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0RBVCwgKnZhbHVlcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCmluZGV4IDRjNjM4OTAuLmFjMjJmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCw2ICsyNCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zOCw4ICszOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCisjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKLSNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewpAQCAtNjcsOCArNzAsOCBAQAogI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KICNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKIAotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDE7CkBAIC04MCwyNyArODMsMjcgQEAKIH0KIAogLyogU2VuZCBsZWQgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfbGVkX2NtZCAqbGVkX2NtZCkKK3N0YXRpYyBpbnQgaXdsX3NlbmRfbGVkX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKQogewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfTEVEU19DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbGVkX2NtZCksCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9sZWRfY21kKSwKIAkJLmRhdGEgPSBsZWRfY21kLAogCQkubWV0YS5mbGFncyA9IENNRF9BU1lOQywKIAkJLm1ldGEudS5jYWxsYmFjayA9IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjaywKIAl9OwogCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogCiAKIC8qIFNldCBsZWQgb24gY29tbWFuZCAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9wYXR0ZXJuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBpZHgpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAogCX07CkBAIC0xMTQsMTEgKzExNywxMCBAQAogfQogCiAKLSNpZiAxCiAvKiBTZXQgbGVkIG9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKKwlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkX2NtZCA9IHsKIAkJLmlkID0gbGVkX2lkLAogCQkub24gPSBJV0xfTEVEX1NPTElELAogCQkub2ZmID0gMCwKQEAgLTEyOCwyNCArMTMwLDIyIEBACiB9CiAKIC8qIFNldCBsZWQgb2ZmIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb2ZmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5vbiA9IDAsCiAJCS5vZmYgPSAwLAogCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKIAl9OwotCUlXTF9ERUJVR19MRUQoImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9mZiAlZFxuIiwgbGVkX2lkKTsKIAlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7CiB9Ci0jZW5kaWYKLQogCiAvKgogICogYnJpZ2h0bmVzcyBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yIFR4L1J4IExFRAogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgICF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKQpAQCAtMTY0LDkgKzE2NCw5IEBACiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9sZWQsIGxlZF9kZXYpOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CisJc3RydWN0IGl3bF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd2xfbGVkLCBsZWRfZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWNhc2UgTEVEX0ZVTEw6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMTsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyAgYXNzb2NpYXRlZFxuIik7CisJCQlJV0xfREVCVUdfTEVEKHByaXYsICJNQUMgaXMgIGFzc29jaWF0ZWRcbiIpOwogCQl9CiAJCWlmIChsZWQtPmxlZF9vbikKIAkJCWxlZC0+bGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAljYXNlIExFRF9PRkY6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMDsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKKwkJCUlXTF9ERUJVR19MRUQocHJpdiwgIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKIAkJfQogCQlpZiAobGVkLT5sZWRfb2ZmKQogCQkJbGVkLT5sZWRfb2ZmKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0yMDIsOCArMjAyLDggQEAKIC8qCiAgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bDM5NDVfbGVkICpsZWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bF9sZWQgKmxlZCwKIAkJCQkgICBlbnVtIGxlZF90eXBlIHR5cGUsIHU4IHNldF9sZWQsCiAJCQkJICAgY2hhciAqdHJpZ2dlcikKIHsKQEAgLTIxOSw3ICsyMTksNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjM0LDcgKzIzNCw3IEBACiAvKgogICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcwogICovCi1zdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaW5kZXg7CiAJdTY0IGN1cnJlbnRfdHB0ID0gcHJpdi0+cnh0eHBhY2tldHM7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKIAkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgKiBoYXBwZW4gdmVyeSBmcmVxdWVudCB3ZSBwb3N0cG9uZSBsZWQgY29tbWFuZCB0byBiZSBjYWxsZWQgZnJvbQogICogUkVQTFkgaGFuZGxlciBzbyB3ZSBrbm93IHVjb2RlIGlzIHVwCiAgKi8KLXZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCBibGlua19pZHg7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCiAKIC8qIFJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlciAqLwotaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWNoYXIgKnRyaWdnZXI7CiAJaW50IHJldDsKQEAgLTMxNyw3ICszMTcsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOnJhZGlvIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9vbjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHByaXYsCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczpSWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczo6UlgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6VFgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6OlRYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKQEAgLTM4OSw3ICszODksNyBAQAogCiAKIC8qIHVucmVnaXN0ZXIgbGVkIGNsYXNzICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsMzk0NV9sZWQgKmxlZCwgdTggc2V0X2xlZCkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfbGVkICpsZWQsIHU4IHNldF9sZWQpCiB7CiAJaWYgKCFsZWQtPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQAogfQogCiAvKiBVbnJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlcnMgKi8KLXZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOwpAQCAtNDEwLDMgKzQxMCw0IEBACiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sIDEpOwogfQogCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCmluZGV4IDc0OWFjMDMuLjNiNjU2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw0OCArMjcsMjAgQEAKICNpZm5kZWYgSVdMMzk0NV9MRURTX0gKICNkZWZpbmUgSVdMMzk0NV9MRURTX0gKIAotc3RydWN0IGl3bDM5NDVfcHJpdjsKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKLSNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQotI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCi0jZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCi0jZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCi0jZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCisjaW5jbHVkZSAiaXdsLWxlZC5oIgogCi1lbnVtIGxlZF90eXBlIHsKLQlJV0xfTEVEX1RSR19UWCwKLQlJV0xfTEVEX1RSR19SWCwKLQlJV0xfTEVEX1RSR19BU1NPQywKLQlJV0xfTEVEX1RSR19SQURJTywKLQlJV0xfTEVEX1RSR19NQVgsCi19OwotCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotCi1zdHJ1Y3QgaXdsMzk0NV9sZWQgewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwotCWNoYXIgbmFtZVszMl07Ci0KLQlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKLQlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7Ci0JaW50ICgqbGVkX3BhdHRlcm4pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwotCi0JZW51bSBsZWRfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwotfTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfTEVEUyAqLworc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CiAKKyNlbmRpZiAvKiBJV0xXSUZJX0xFRFMqLwogI2VuZGlmIC8qIElXTDM5NDVfTEVEU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKaW5kZXggMjFjODQxOC4uYWY2YjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTM5NDUtcnMiCkBAIC01MSw2ICs1Miw3IEBACiAKIHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSB7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzMzIgKmV4cGVjdGVkX3RwdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcGFydGlhbF9mbHVzaDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfZmx1c2g7CkBAIC02Miw3ICs2NCw3IEBACiAJdTggc3RhcnRfcmF0ZTsKIAl1OCBpYnNzX3N0YV9hZGRlZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByYXRlX3NjYWxlX2ZsdXNoOwotCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRdOworCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZTsKICNlbmRpZgpAQCAtNzEsMTkgKzczLDE5IEBACiAJaW50IGxhc3RfdHhyYXRlX2lkeDsKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfZ1tJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJNywgMTMsIDM1LCA1OCwgMCwgMCwgNzYsIDEwNCwgMTMwLCAxNjgsIDE5MSwgMjAyCiB9OwogCi1zdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCA4MCwgOTMsIDExMywgMTIzLCAxMjUKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYVtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2FbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJMCwgMCwgMCwgMCwgNDAsIDU3LCA3MiwgOTgsIDEyMSwgMTU0LCAxNzcsIDE4NgogfTsKIAotc3RhdGljIHMzMiBpd2wzOTQ1X2V4cGVjdGVkX3RwdF9iW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYltJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OwogCkBAIC0xMTksMTIgKzEyMSwxMyBAQAogI2RlZmluZSBJV0xfUkFURV9NQVhfV0lORE9XICAgICAgICAgIDYyCiAjZGVmaW5lIElXTF9SQVRFX0ZMVVNIICAgICAgIAkgKDMqSFopCiAjZGVmaW5lIElXTF9SQVRFX1dJTl9GTFVTSCAgICAgICAoSFovMikKLSNkZWZpbmUgSVdMX1JBVEVfSElHSF9USCAgICAgICAgICAxMTUyMAorI2RlZmluZSBJV0wzOV9SQVRFX0hJR0hfVEggICAgICAgICAgMTE1MjAKICNkZWZpbmUgSVdMX1NVQ0NFU1NfVVBfVEgJICAgODk2MAogI2RlZmluZSBJV0xfU1VDQ0VTU19ET1dOX1RICSAgMTA4ODAKLSNkZWZpbmUgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEggICAgICAgOAorI2RlZmluZSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCAgICAgICA2CiAjZGVmaW5lIElXTF9SQVRFX01JTl9TVUNDRVNTX1RIICAgICAgIDgKICNkZWZpbmUgSVdMX1JBVEVfREVDUkVBU0VfVEggICAgICAgMTkyMAorI2RlZmluZSBJV0xfUkFURV9SRVRSWV9USAkgICAgIDE1CiAKIHN0YXRpYyB1OCBpd2wzOTQ1X2dldF9yYXRlX2luZGV4X2J5X3Jzc2koczMyIHJzc2ksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTE2NSw3ICsxNjgsNyBAQAogCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gMDsKIAl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSAtMTsKIAl3aW5kb3ctPmNvdW50ZXIgPSAwOwotCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKKwl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJd2luZG93LT5zdGFtcCA9IDA7CiB9CiAKQEAgLTE4MSwyMCArMTg0LDIxIEBACiAJaW50IHVuZmx1c2hlZCA9IDA7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAkvKgogCSAqIEZvciBlYWNoIHJhdGUsIGlmIHdlIGhhdmUgY29sbGVjdGVkIGRhdGEgb24gdGhhdCByYXRlCiAJICogYW5kIGl0IGhhcyBiZWVuIG1vcmUgdGhhbiBJV0xfUkFURV9XSU5fRkxVU0gKIAkgKiBzaW5jZSB3ZSBmbHVzaGVkLCBjbGVhciBvdXQgdGhlIGdhdGhlcmVkIHN0YXRpc3RpY3MKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OyBpKyspIHsKIAkJaWYgKCFyc19zdGEtPndpbltpXS5jb3VudGVyKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCByc19zdGEtPndpbltpXS5zdGFtcCArCiAJCQkgICAgICAgSVdMX1JBVEVfV0lOX0ZMVVNIKSkgewotCQkJSVdMX0RFQlVHX1JBVEUoImZsdXNoaW5nICVkIHNhbXBsZXMgb2YgcmF0ZSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiZmx1c2hpbmcgJWQgc2FtcGxlcyBvZiByYXRlICIKIAkJCQkgICAgICAgImluZGV4ICVkXG4iLAogCQkJCSAgICAgICByc19zdGEtPndpbltpXS5jb3VudGVyLCBpKTsKIAkJCWl3bDM5NDVfY2xlYXJfd2luZG93KCZyc19zdGEtPndpbltpXSk7CkBAIC0yMTMsMTEgKzIxNywxMiBAQAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yYXRlX3NjYWxlX2ZsdXNoKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAJaW50IHVuZmx1c2hlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcGFja2V0X2NvdW50LCBkdXJhdGlvbiwgcHBzOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJdW5mbHVzaGVkID0gaXdsMzk0NV9yYXRlX3NjYWxlX2ZsdXNoX3dpbmRvd3MocnNfc3RhKTsKIApAQCAtMjMyLDcgKzIzNyw3IEBACiAJCWR1cmF0aW9uID0KIAkJICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHJzX3N0YS0+bGFzdF9wYXJ0aWFsX2ZsdXNoKTsKIAotCQlJV0xfREVCVUdfUkFURSgiVHgnZCAlZCBwYWNrZXRzIGluICVkbXNcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJUeCdkICVkIHBhY2tldHMgaW4gJWRtc1xuIiwKIAkJCSAgICAgICBwYWNrZXRfY291bnQsIGR1cmF0aW9uKTsKIAogCQkvKiBEZXRlcm1pbmUgcGFja2V0cyBwZXIgc2Vjb25kICovCkBAIC0yNTIsNyArMjU3LDcgQEAKIAogCQlyc19zdGEtPmZsdXNoX3RpbWUgPSBtc2Vjc190b19qaWZmaWVzKGR1cmF0aW9uKTsKIAotCQlJV0xfREVCVUdfUkFURSgibmV3IGZsdXNoIHBlcmlvZDogJWQgbXNlYyBhdmUgJWRcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJuZXcgZmx1c2ggcGVyaW9kOiAlZCBtc2VjIGF2ZSAlZFxuIiwKIAkJCSAgICAgICBkdXJhdGlvbiwgcGFja2V0X2NvdW50KTsKIAogCQltb2RfdGltZXIoJnJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaCwgamlmZmllcyArCkBAIC0yNzAsNyArMjc1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAvKioKQEAgLTI4Niw1MCArMjkxLDcwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzMzIgZmFpbF9jb3VudDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAlpZiAoIXJldHJpZXMpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByZXRyaWVzID09IDAgLS0gc2hvdWxkIGJlIGF0IGxlYXN0IDFcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IHJldHJpZXMgPT0gMCAtLSBzaG91bGQgYmUgYXQgbGVhc3QgMVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKHJldHJpZXMtLSkgewogCi0JCS8qIElmIHdlIGhhdmUgZmlsbGVkIHVwIHRoZSB3aW5kb3cgdGhlbiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUKLQkJICogc3VjY2VzcyBjb3VudGVyIGlmIHRoZSBoaWdoLWJpdCBpcyBjb3VudGluZyB0b3dhcmQKLQkJICogc3VjY2VzcyAqLwotCQlpZiAod2luZG93LT5jb3VudGVyID09IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKLQkJCWlmICh3aW5kb3ctPmRhdGEgJiAoMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKSkKKwkvKgorCSAqIEtlZXAgdHJhY2sgb2Ygb25seSB0aGUgbGF0ZXN0IDYyIHR4IGZyYW1lIGF0dGVtcHRzIGluIHRoaXMgcmF0ZSdzCisJICogaGlzdG9yeSB3aW5kb3c7IGFueXRoaW5nIG9sZGVyIGlzbid0IHJlYWxseSByZWxldmFudCBhbnkgbW9yZS4KKwkgKiBJZiB3ZSBoYXZlIGZpbGxlZCB1cCB0aGUgc2xpZGluZyB3aW5kb3csIGRyb3AgdGhlIG9sZGVzdCBhdHRlbXB0OworCSAqIGlmIHRoZSBvbGRlc3QgYXR0ZW1wdCAoaGlnaGVzdCBiaXQgaW4gYml0bWFwKSBzaG93cyAic3VjY2VzcyIsCisJICogc3VidHJhY3QgIjEiIGZyb20gdGhlIHN1Y2Nlc3MgY291bnRlciAodGhpcyBpcyB0aGUgbWFpbiByZWFzb24KKwkgKiB3ZSBrZWVwIHRoZXNlIGJpdG1hcHMhKS4KKwkgKiAqLworCXdoaWxlIChyZXRyaWVzID4gMCkgeworCQlpZiAod2luZG93LT5jb3VudGVyID49IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKKworCQkJLyogcmVtb3ZlIGVhcmxpZXN0ICovCisJCQl3aW5kb3ctPmNvdW50ZXIgPSBJV0xfUkFURV9NQVhfV0lORE9XIC0gMTsKKworCQkJaWYgKHdpbmRvdy0+ZGF0YSAmICgxVUxMIDw8IChJV0xfUkFURV9NQVhfV0lORE9XIC0gMSkpKSB7CisJCQkJd2luZG93LT5kYXRhICY9IH4oMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKTsKIAkJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlci0tOwotCQl9IGVsc2UKLQkJCXdpbmRvdy0+Y291bnRlcisrOwotCi0JCS8qIFNsaWRlIHRoZSB3aW5kb3cgdG8gdGhlIGxlZnQgb25lIGJpdCAqLwotCQl3aW5kb3ctPmRhdGEgPSAod2luZG93LT5kYXRhIDw8IDEpOwotCi0JCS8qIElmIHRoaXMgcGFja2V0IHdhcyBhIHN1Y2Nlc3MgdGhlbiBzZXQgdGhlIGxvdyBiaXQgaGlnaCAqLwotCQlpZiAoc3VjY2VzcykgewotCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIrKzsKLQkJCXdpbmRvdy0+ZGF0YSB8PSAxOworCQkJfQogCQl9CiAKLQkJLyogd2luZG93LT5jb3VudGVyIGNhbid0IGJlIDAgLS0gaXQgaXMgZWl0aGVyID4wIG9yCi0JCSAqIElXTF9SQVRFX01BWF9XSU5ET1cgKi8KLQkJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gMTI4MDAgKiB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciAvCi0JCSAgICB3aW5kb3ctPmNvdW50ZXI7CisJCS8qIEluY3JlbWVudCBmcmFtZXMtYXR0ZW1wdGVkIGNvdW50ZXIgKi8KKwkJd2luZG93LT5jb3VudGVyKys7CiAKLQkJLyogVGFnIHRoaXMgd2luZG93IGFzIGhhdmluZyBiZWVuIHVwZGF0ZWQgKi8KLQkJd2luZG93LT5zdGFtcCA9IGppZmZpZXM7CisJCS8qIFNoaWZ0IGJpdG1hcCBieSBvbmUgZnJhbWUgKHRocm93IGF3YXkgb2xkZXN0IGhpc3RvcnkpLAorCQkgKiBPUiBpbiAiMSIsIGFuZCBpbmNyZW1lbnQgInN1Y2Nlc3MiIGlmIHRoaXMKKwkJICogZnJhbWUgd2FzIHN1Y2Nlc3NmdWwuICovCisJCXdpbmRvdy0+ZGF0YSA8PD0gMTsKKwkJaWYgKHN1Y2Nlc3MgPiAwKSB7CisJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcisrOworCQkJd2luZG93LT5kYXRhIHw9IDB4MTsKKwkJCXN1Y2Nlc3MtLTsKKwkJfQogCisJCXJldHJpZXMtLTsKIAl9CiAKKwkvKiBDYWxjdWxhdGUgY3VycmVudCBzdWNjZXNzIHJhdGlvLCBhdm9pZCBkaXZpZGUtYnktMCEgKi8KKwlpZiAod2luZG93LT5jb3VudGVyID4gMCkKKwkJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gMTI4ICogKDEwMCAqIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyKQorCQkJCQkvIHdpbmRvdy0+Y291bnRlcjsKKwllbHNlCisJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IElXTF9JTlZBTElEX1ZBTFVFOworCiAJZmFpbF9jb3VudCA9IHdpbmRvdy0+Y291bnRlciAtIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyOworCisJLyogQ2FsY3VsYXRlIGF2ZXJhZ2UgdGhyb3VnaHB1dCwgaWYgd2UgaGF2ZSBlbm91Z2ggaGlzdG9yeS4gKi8KIAlpZiAoKGZhaWxfY291bnQgPj0gSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpIHx8CiAJICAgICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA+PSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpCiAJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyAqCiAJCQkJcnNfc3RhLT5leHBlY3RlZF90cHRbaW5kZXhdICsgNjQpIC8gMTI4KTsKIAllbHNlCi0JCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKKwkJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOworCisJLyogVGFnIHRoaXMgd2luZG93IGFzIGhhdmluZyBiZWVuIHVwZGF0ZWQgKi8KKwl3aW5kb3ctPnN0YW1wID0gamlmZmllczsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCkBAIC0zMzksMTAgKzM2NCwxMCBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhKQogewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7CiAJaW50IGk7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiBUT0RPOiB3aGF0IGlzIGEgZ29vZCBzdGFydGluZyByYXRlIGZvciBTVEE/IEFib3V0IG1pZGRsZT8gTWF5YmUgbm90CiAJICogdGhlIGxvd2VzdCBvciB0aGUgaGlnaGVzdCByYXRlLi4gQ291bGQgY29uc2lkZXIgdXNpbmcgUlNTSSBmcm9tCkBAIC0zNjUsNyArMzkwLDcgQEAKIAl9CiAKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgKnJzX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQpAQCAtMzc5LDEwICs0MDQsMTEgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkICpyc19hbGxvY19zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIHZvaWQgKnJzX2FsbG9jX3N0YSh2b2lkICppd2xfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhOwogCXN0cnVjdCBpd2wzOTQ1X3N0YV9wcml2ICpwc3RhID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBpd2xfcHJpdjsKIAlpbnQgaTsKIAogCS8qCkBAIC0zOTAsMTEgKzQxNiwxMSBAQAogCSAqCWFzIHdlbGwganVzdCBwdXQgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGVyZS4KIAkgKi8KIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJzX3N0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSksIGdmcCk7CiAJaWYgKCFyc19zdGEpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBFTk9NRU1cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IEVOT01FTVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDAyLDYgKzQyOCw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcnNfc3RhLT5sb2NrKTsKIAorCXJzX3N0YS0+cHJpdiA9IHByaXY7CisKIAlyc19zdGEtPnN0YXJ0X3JhdGUgPSBJV0xfUkFURV9JTlZBTElEOwogCiAJLyogZGVmYXVsdCB0byBqdXN0IDgwMi4xMWIgKi8KQEAgLTQxNywzMyArNDQ1LDM0IEBACiAJcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoLmRhdGEgPSAodW5zaWduZWQgbG9uZylyc19zdGE7CiAJcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoLmZ1bmN0aW9uID0gJml3bDM5NDVfYmdfcmF0ZV9zY2FsZV9mbHVzaDsKIAotCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OyBpKyspCiAJCWl3bDM5NDVfY2xlYXJfd2luZG93KCZyc19zdGEtPndpbltpXSk7CiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gcnNfc3RhOwogfQogCi1zdGF0aWMgdm9pZCByc19mcmVlX3N0YSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorc3RhdGljIHZvaWQgcnNfZnJlZV9zdGEodm9pZCAqaXdsX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQl2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YSA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSBwcml2X3N0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAlwc3RhLT5yc19zdGEgPSBOVUxMOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCWRlbF90aW1lcl9zeW5jKCZyc19zdGEtPnJhdGVfc2NhbGVfZmx1c2gpOwogCWtmcmVlKHJzX3N0YSk7Ci0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAKIC8qKgogICogcnNfdHhfc3RhdHVzIC0gVXBkYXRlIHJhdGUgY29udHJvbCB2YWx1ZXMgYmFzZWQgb24gVHggcmVzdWx0cwogICoKLSAqIE5PVEU6IFVzZXMgaXdsMzk0NV9wcml2LT5yZXRyeV9yYXRlIGZvciB0aGUgIyBvZiByZXRyaWVzIGF0dGVtcHRlZCBieQorICogTk9URTogVXNlcyBpd2xfcHJpdi0+cmV0cnlfcmF0ZSBmb3IgdGhlICMgb2YgcmV0cmllcyBhdHRlbXB0ZWQgYnkKICAqIHRoZSBoYXJkd2FyZSBmb3IgZWFjaCByYXRlLgogICovCiBzdGF0aWMgdm9pZCByc190eF9zdGF0dXModm9pZCAqcHJpdl9yYXRlLCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKQEAgLTQ1MywyMiArNDgyLDI1IEBACiAJczggcmV0cmllcyA9IDAsIGN1cnJlbnRfY291bnQ7CiAJaW50IHNjYWxlX3JhdGVfaW5kZXgsIGZpcnN0X2luZGV4LCBsYXN0X2luZGV4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yYXRlOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3JhdGU7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50OworCS8qIFNhbml0eSBDaGVjayBmb3IgcmV0cmllcyAqLworCWlmIChyZXRyaWVzID4gSVdMX1JBVEVfUkVUUllfVEgpCisJCXJldHJpZXMgPSBJV0xfUkFURV9SRVRSWV9USDsKIAogCWZpcnN0X2luZGV4ID0gc2JhbmQtPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmh3X3ZhbHVlOwotCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlQpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlZFxuIiwgZmlyc3RfaW5kZXgpOworCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlRfMzk0NSkpIHsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBSYXRlIG91dCBvZiBib3VuZHM6ICVkXG4iLCBmaXJzdF9pbmRleCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIXByaXZfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDIsNyArNTM0LDcgQEAKIAkJaXdsMzk0NV9jb2xsZWN0X3R4X2RhdGEocnNfc3RhLAogCQkJCSAgICAmcnNfc3RhLT53aW5bc2NhbGVfcmF0ZV9pbmRleF0sCiAJCQkJICAgIDAsIGN1cnJlbnRfY291bnQsIHNjYWxlX3JhdGVfaW5kZXgpOwotCQlJV0xfREVCVUdfUkFURSgiVXBkYXRlIHJhdGUgJWQgZm9yICVkIHJldHJpZXMuXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiVXBkYXRlIHJhdGUgJWQgZm9yICVkIHJldHJpZXMuXG4iLAogCQkJICAgICAgIHNjYWxlX3JhdGVfaW5kZXgsIGN1cnJlbnRfY291bnQpOwogCiAJCXJldHJpZXMgLT0gY3VycmVudF9jb3VudDsKQEAgLTUxMiw3ICs1NDQsNyBAQAogCiAKIAkvKiBVcGRhdGUgdGhlIGxhc3QgaW5kZXggd2luZG93IHdpdGggc3VjY2Vzcy9mYWlsdXJlIGJhc2VkIG9uIEFDSyAqLwotCUlXTF9ERUJVR19SQVRFKCJVcGRhdGUgcmF0ZSAlZCB3aXRoICVzLlxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiVXBkYXRlIHJhdGUgJWQgd2l0aCAlcy5cbiIsCiAJCSAgICAgICBsYXN0X2luZGV4LAogCQkgICAgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSA/CiAJCSAgICAgICAic3VjY2VzcyIgOiAiZmFpbHVyZSIpOwpAQCAtNTM3LDcgKzU2OSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTU0Nyw2ICs1NzksNyBAQAogewogCXU4IGhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOwogCXU4IGxvdyA9IElXTF9SQVRFX0lOVkFMSUQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJLyogODAyLjExQSB3YWxrcyB0byB0aGUgbmV4dCBsaXRlcmFsIGFkamFjZW50IHJhdGUgaW4KIAkgKiB0aGUgcmF0ZSB0YWJsZSAqLwpAQCAtNTY1LDcgKzU5OCw4IEBACiAKIAkJLyogRmluZCB0aGUgbmV4dCByYXRlIHRoYXQgaXMgaW4gdGhlIHJhdGUgbWFzayAqLwogCQlpID0gaW5kZXggKyAxOwotCQlmb3IgKG1hc2sgPSAoMSA8PCBpKTsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyssIG1hc2sgPDw9IDEpIHsKKwkJZm9yIChtYXNrID0gKDEgPDwgaSk7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OworCQkgICAgIGkrKywgbWFzayA8PD0gMSkgewogCQkJaWYgKHJhdGVfbWFzayAmIG1hc2spIHsKIAkJCQloaWdoID0gaTsKIAkJCQlicmVhazsKQEAgLTU4NSw3ICs2MTksNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBsb3cpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtNTk4LDcgKzYzMiw3IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTYzMSwxOSArNjY1LDIwIEBACiAJaW50IGluZGV4OwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cgPSBOVUxMOwotCWludCBjdXJyZW50X3RwdCA9IElXTF9JTlZfVFBUOwotCWludCBsb3dfdHB0ID0gSVdMX0lOVl9UUFQ7Ci0JaW50IGhpZ2hfdHB0ID0gSVdMX0lOVl9UUFQ7CisJaW50IGN1cnJlbnRfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJaW50IGxvd190cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwlpbnQgaGlnaF90cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKIAl1MzIgZmFpbF9jb3VudDsKIAlzOCBzY2FsZV9hY3Rpb24gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAl1MTYgZmM7CiAJdTE2IHJhdGVfbWFzayA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yOworCXM4IG1heF9yYXRlX2lkeCA9IC0xOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKHN0YSkKIAkJcmF0ZV9tYXNrID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKQEAgLTY1NCw3ICs2ODksNyBAQAogCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKIAkgICAgIXN0YSB8fCAhcHJpdl9zdGEpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7CiAJCWlmICghcmF0ZV9tYXNrKQogCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPQogCQkJCQlyYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgTlVMTCk7CkBAIC02NjQsNyArNjk5LDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlpbmRleCA9IG1pbihyc19zdGEtPmxhc3RfdHhyYXRlX2lkeCAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKKwkvKiBnZXQgdXNlciBtYXggcmF0ZSBpZiBzZXQgKi8KKwltYXhfcmF0ZV9pZHggPSB0eHJjLT5tYXhfcmF0ZV9pZHg7CisJaWYgKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJiAobWF4X3JhdGVfaWR4ICE9IC0xKSkKKwkJbWF4X3JhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJaWYgKChtYXhfcmF0ZV9pZHggPCAwKSB8fCAobWF4X3JhdGVfaWR4ID49IElXTF9SQVRFX0NPVU5UKSkKKwkJbWF4X3JhdGVfaWR4ID0gLTE7CisKKwlpbmRleCA9IG1pbihyc19zdGEtPmxhc3RfdHhyYXRlX2lkeCAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlRfMzk0NSAtIDEpOwogCiAJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJhdGVfbWFzayA9IHJhdGVfbWFzayA8PCBJV0xfRklSU1RfT0ZETV9SQVRFOwpAQCAtNjc0LDcgKzcxNiw3IEBACiAJCXU4IHN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlcG1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwbVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsCiAJCQkJICAgIGhkci0+YWRkcjEsIDAsIENNRF9BU1lOQyk7CkBAIC02OTUsMjEgKzczNywzMCBAQAogCQlyc19zdGEtPnN0YXJ0X3JhdGUgPSBJV0xfUkFURV9JTlZBTElEOwogCX0KIAorCS8qIGZvcmNlIHVzZXIgbWF4IHJhdGUgaWYgc2V0IGJ5IHVzZXIgKi8KKwlpZiAoKG1heF9yYXRlX2lkeCAhPSAtMSkgJiYgKG1heF9yYXRlX2lkeCA8IGluZGV4KSkgeworCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbWF4X3JhdGVfaWR4KSkKKwkJCWluZGV4ID0gbWF4X3JhdGVfaWR4OworCX0KKwogCXdpbmRvdyA9ICYocnNfc3RhLT53aW5baW5kZXhdKTsKIAogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKIAotCWlmICgoKGZhaWxfY291bnQgPD0gSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCisJaWYgKCgoZmFpbF9jb3VudCA8IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgogCSAgICAgKHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyIDwgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCQlJV0xfREVCVUdfUkFURSgiSW52YWxpZCBhdmVyYWdlX3RwdCBvbiByYXRlICVkOiAiCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJJbnZhbGlkIGF2ZXJhZ2VfdHB0IG9uIHJhdGUgJWQ6ICIKIAkJCSAgICAgICAiY291bnRlcjogJWQsIHN1Y2Nlc3NfY291bnRlcjogJWQsICIKIAkJCSAgICAgICAiZXhwZWN0ZWRfdHB0IGlzICVzTlVMTFxuIiwKIAkJCSAgICAgICBpbmRleCwKIAkJCSAgICAgICB3aW5kb3ctPmNvdW50ZXIsCiAJCQkgICAgICAgd2luZG93LT5zdWNjZXNzX2NvdW50ZXIsCiAJCQkgICAgICAgcnNfc3RhLT5leHBlY3RlZF90cHQgPyAibm90ICIgOiAiIik7CisKKwkgICAvKiBDYW4ndCBjYWxjdWxhdGUgdGhpcyB5ZXQ7IG5vdCBlbm91Z2ggaGlzdG9yeSAqLworCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJCWdvdG8gb3V0OwogCiAJfQpAQCAtNzIxLDYgKzc3MiwxMSBAQAogCWxvdyA9IGhpZ2hfbG93ICYgMHhmZjsKIAloaWdoID0gKGhpZ2hfbG93ID4+IDgpICYgMHhmZjsKIAorCS8qIElmIHVzZXIgc2V0IG1heCByYXRlLCBkb250IGFsbG93IGhpZ2hlciB0aGFuIHVzZXIgY29uc3RyYWluICovCisJaWYgKChtYXhfcmF0ZV9pZHggIT0gLTEpICYmIChtYXhfcmF0ZV9pZHggPCBoaWdoKSkKKwkJaGlnaCA9IElXTF9SQVRFX0lOVkFMSUQ7CisKKwkvKiBDb2xsZWN0IE1lYXN1cmVkIHRocm91Z2hwdXRzIG9mIGFkamFjZW50IHJhdGVzICovCiAJaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQogCQlsb3dfdHB0ID0gcnNfc3RhLT53aW5bbG93XS5hdmVyYWdlX3RwdDsKIApAQCAtNzI5LDU2ICs3ODUsNzggQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0Jc2NhbGVfYWN0aW9uID0gMTsKKwlzY2FsZV9hY3Rpb24gPSAwOwogCisJLyogTG93IHN1Y2Nlc3MgcmF0aW8gLCBuZWVkIHRvIGRyb3AgdGhlIHJhdGUgKi8KIAlpZiAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA8IElXTF9SQVRFX0RFQ1JFQVNFX1RIKSB8fCAhY3VycmVudF90cHQpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOwogCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQl9IGVsc2UgaWYgKChsb3dfdHB0ID09IElXTF9JTlZfVFBUKSAmJiAoaGlnaF90cHQgPT0gSVdMX0lOVl9UUFQpKQotCQlzY2FsZV9hY3Rpb24gPSAxOwotCWVsc2UgaWYgKChsb3dfdHB0ICE9IElXTF9JTlZfVFBUKSAmJiAoaGlnaF90cHQgIT0gSVdMX0lOVl9UUFQpICYmCisJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzLAorCSAqIHRyeSBpbmNyZWFzZSAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpIHsKKworCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+PSBJV0xfUkFURV9JTkNSRUFTRV9USCkKKwkJCXNjYWxlX2FjdGlvbiA9IDE7CisJCWVsc2UgaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQorCQkJc2NhbGVfYWN0aW9uID0gMDsKKworCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzCisJICogYmV0dGVyIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZQorCSAqIGl0ISAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAoaGlnaF90cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAobG93X3RwdCA8IGN1cnJlbnRfdHB0KSAmJiAoaGlnaF90cHQgPCBjdXJyZW50X3RwdCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIk5vIGFjdGlvbiAtLSBsb3cgWyVkXSAmIGhpZ2ggWyVkXSA8ICIKKworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CisKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhdGVzIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCX0gZWxzZSB7Ci0JCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgewotCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCisJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgeworCisJCQkvKiBIaWdoIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0LCBJbmNyZWFzZQorCQkJICogcmF0ZSAqLworCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQgJiYKKwkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCWVsc2UgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKLQkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwkJCQlJV0xfREVCVUdfUkFURShwcml2LAorCQkJCSAgICAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKKwkJCQlzY2FsZV9hY3Rpb24gPSAwOwogCQkJfQotCQl9IGVsc2UgaWYgKGxvd190cHQgIT0gSVdMX0lOVl9UUFQpIHsKKwkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CiAJCQlpZiAobG93X3RwdCA+IGN1cnJlbnRfdHB0KSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIGlmICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKKwkJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIKKwkJCQkgKiB0aHJvdWdocHV0LGRlY3JlYXNlIHJhdGUgKi8KIAkJCQlzY2FsZV9hY3Rpb24gPSAxOworCQkJfQogCQl9CiAJfQogCi0JaWYgKHNjYWxlX2FjdGlvbiA9PSAtMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvID4gSVdMX1NVQ0NFU1NfRE9XTl9USCkKLQkJCXNjYWxlX2FjdGlvbiA9IDA7Ci0JfSBlbHNlIGlmIChzY2FsZV9hY3Rpb24gPT0gMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvIDwgSVdMX1NVQ0NFU1NfVVBfVEgpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJObyBhY3Rpb24gLS0gc3VjY2Vzc19yYXRpbyBbJWRdIDwgIgotCQkJICAgICAgICJTVUNDRVNTIFVQXG4iLCB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8pOwotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQkJfQotCX0KKwkvKiBTYW5pdHkgY2hlY2s7IGFza2VkIGZvciBkZWNyZWFzZSwgYnV0IHN1Y2Nlc3MgcmF0ZSBvciB0aHJvdWdocHV0CisJICogaGFzIGJlZW4gZ29vZCBhdCBvbGQgcmF0ZS4gIERvbid0IGNoYW5nZSBpdC4gKi8KKwlpZiAoKHNjYWxlX2FjdGlvbiA9PSAtMSkgJiYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKSAmJgorCQkgICAgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPiBJV0xfUkFURV9ISUdIX1RIKSB8fAorCQkgICAgIChjdXJyZW50X3RwdCA+ICgxMDAgKiByc19zdGEtPmV4cGVjdGVkX3RwdFtsb3ddKSkpKQorCQlzY2FsZV9hY3Rpb24gPSAwOwogCiAJc3dpdGNoIChzY2FsZV9hY3Rpb24pIHsKIAljYXNlIC0xOgorCisJCS8qIERlY3Jlc2UgcmF0ZSAqLwogCQlpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCiAJCQlpbmRleCA9IGxvdzsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CisJCS8qIEluY3JlYXNlIHJhdGUgKi8KIAkJaWYgKGhpZ2ggIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWluZGV4ID0gaGlnaDsKIApAQCAtNzg2LDEwICs4NjQsMTEgQEAKIAogCWNhc2UgMDoKIAlkZWZhdWx0OgorCQkvKiBObyBjaGFuZ2UgKi8KIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCiAJCSAgICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gpOwogCiAgb3V0OgpAQCAtODAxLDcgKzg4MCw3IEBACiAJZWxzZQogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJzX3N0YS0+bGFzdF90eHJhdGVfaWR4OwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogJWRcbiIsIGluZGV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCkBAIC04MTUsMjQgKzg5NCwzMSBAQAogCQkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgajsKKwlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZXNjICs9IHNwcmludGYoYnVmZiArIGRlc2MsICJ0eCBwYWNrZXRzPSVkIGxhc3QgcmF0ZSBpbmRleD0lZFxuIgogCQkJInJhdGU9MHglWCBmbHVzaCB0aW1lICVkXG4iLAogCQkJbHFfc3RhLT50eF9wYWNrZXRzLAogCQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHgsCiAJCQlscV9zdGEtPnN0YXJ0X3JhdGUsIGppZmZpZXNfdG9fbXNlY3MobHFfc3RhLT5mbHVzaF90aW1lKSk7Ci0JZm9yIChqID0gMDsgaiA8IElXTF9SQVRFX0NPVU5UOyBqKyspIHsKKwlmb3IgKGogPSAwOyBqIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaisrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsCiAJCQkJImNvdW50ZXI9JWQgc3VjY2Vzcz0lZCAlJT0lZFxuIiwKIAkJCQlscV9zdGEtPndpbltqXS5jb3VudGVyLAogCQkJCWxxX3N0YS0+d2luW2pdLnN1Y2Nlc3NfY291bnRlciwKIAkJCQlscV9zdGEtPndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpAQCAtODc3LDE4ICs5NjMsMTggQEAKIAogdm9pZCBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJczMyIHJzc2kgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MjQsMTEgKzEwMTAsMTEgQEAKIAlpZiAocnNzaSA9PSAwKQogCQlyc3NpID0gSVdMX01JTl9SU1NJX1ZBTDsKIAotCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SQVRFLCAiTmV0d29yayBSU1NJOiAlZFxuIiwgcnNzaSk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIk5ldHdvcmsgUlNTSTogJWRcbiIsIHJzc2kpOwogCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHJzc2ksIHByaXYtPmJhbmQpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCiAJCSAgICAgICAiJWQgKHBsY3AgMHgleClcbiIsIHJzc2ksIHJzX3N0YS0+c3RhcnRfcmF0ZSwKIAkJICAgICAgIGl3bDM5NDVfcmF0ZXNbcnNfc3RhLT5zdGFydF9yYXRlXS5wbGNwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjYxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9yc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9yc19oX18KLQotc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKLQl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwotCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLwotCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KLQl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLwotCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0JdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwotCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLwotCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KLX07Ci0KLS8qCi0gKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLSAqLwotZW51bSB7Ci0JSVdMX1JBVEVfMU1fSU5ERVggPSAwLAotCUlXTF9SQVRFXzJNX0lOREVYLAotCUlXTF9SQVRFXzVNX0lOREVYLAotCUlXTF9SQVRFXzExTV9JTkRFWCwKLQlJV0xfUkFURV82TV9JTkRFWCwKLQlJV0xfUkFURV85TV9JTkRFWCwKLQlJV0xfUkFURV8xMk1fSU5ERVgsCi0JSVdMX1JBVEVfMThNX0lOREVYLAotCUlXTF9SQVRFXzI0TV9JTkRFWCwKLQlJV0xfUkFURV8zNk1fSU5ERVgsCi0JSVdMX1JBVEVfNDhNX0lOREVYLAotCUlXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfUkFURV9DT1VOVCwKLQlJV0xfUkFURV9JTlZNX0lOREVYLAotCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9JTlZNX0lOREVYCi19OwotCi1lbnVtIHsKLQlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCi0JSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYLAotfTsKLQotZW51bSB7Ci0JSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAotCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKLQlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKLX07Ci0KLS8qICNkZWZpbmUgdnMuIGVudW0gdG8ga2VlcCBmcm9tIGRlZmF1bHRpbmcgdG8gJ2xhcmdlIGludGVnZXInICovCi0jZGVmaW5lCUlXTF9SQVRFXzZNX01BU0sgICAoMSA8PCBJV0xfUkFURV82TV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfOU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzlNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTJNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xOE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMThNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8yNE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMjRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8zNk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMzZNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV80OE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNDhNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV81NE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNTRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xTV9NQVNLICAgKDEgPDwgSVdMX1JBVEVfMU1fSU5ERVgpCi0jZGVmaW5lCUlXTF9SQVRFXzJNX01BU0sgICAoMSA8PCBJV0xfUkFURV8yTV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfNU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzVNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMU1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTFNX0lOREVYKQotCi0vKiAzOTQ1IHVDb2RlIEFQSSB2YWx1ZXMgZm9yIChsZWdhY3kpIGJpdCByYXRlcywgYm90aCBPRkRNIGFuZCBDQ0sgKi8KLWVudW0gewotCUlXTF9SQVRFXzZNX1BMQ1AgPSAxMywKLQlJV0xfUkFURV85TV9QTENQID0gMTUsCi0JSVdMX1JBVEVfMTJNX1BMQ1AgPSA1LAotCUlXTF9SQVRFXzE4TV9QTENQID0gNywKLQlJV0xfUkFURV8yNE1fUExDUCA9IDksCi0JSVdMX1JBVEVfMzZNX1BMQ1AgPSAxMSwKLQlJV0xfUkFURV80OE1fUExDUCA9IDEsCi0JSVdMX1JBVEVfNTRNX1BMQ1AgPSAzLAotCUlXTF9SQVRFXzFNX1BMQ1AgPSAxMCwKLQlJV0xfUkFURV8yTV9QTENQID0gMjAsCi0JSVdMX1JBVEVfNU1fUExDUCA9IDU1LAotCUlXTF9SQVRFXzExTV9QTENQID0gMTEwLAotfTsKLQotLyogTUFDIGhlYWRlciB2YWx1ZXMgZm9yIGJpdCByYXRlcyAqLwotZW51bSB7Ci0JSVdMX1JBVEVfNk1fSUVFRSA9IDEyLAotCUlXTF9SQVRFXzlNX0lFRUUgPSAxOCwKLQlJV0xfUkFURV8xMk1fSUVFRSA9IDI0LAotCUlXTF9SQVRFXzE4TV9JRUVFID0gMzYsCi0JSVdMX1JBVEVfMjRNX0lFRUUgPSA0OCwKLQlJV0xfUkFURV8zNk1fSUVFRSA9IDcyLAotCUlXTF9SQVRFXzQ4TV9JRUVFID0gOTYsCi0JSVdMX1JBVEVfNTRNX0lFRUUgPSAxMDgsCi0JSVdMX1JBVEVfMU1fSUVFRSA9IDIsCi0JSVdMX1JBVEVfMk1fSUVFRSA9IDQsCi0JSVdMX1JBVEVfNU1fSUVFRSA9IDExLAotCUlXTF9SQVRFXzExTV9JRUVFID0gMjIsCi19OwotCi0jZGVmaW5lIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSyAgICBcCi0gICAgICAgKElXTF9SQVRFXzFNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMk1fTUFTSykKLQotI2RlZmluZSBJV0xfQ0NLX1JBVEVTX01BU0sgICAgICAgICAgXAotICAgICAgIChJV0xfQkFTSUNfUkFURVNfTUFTSyAgICAgIHwgXAotCUlXTF9SQVRFXzVNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMTFNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyAgIFwKLQkoSVdMX1JBVEVfNk1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzEyTV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMjRNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fUkFURVNfTUFTSyAgICAgICAgIFwKLSAgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJV0xfUkFURV85TV9NQVNLICAgICAgICAgIHwgXAotCUlXTF9SQVRFXzE4TV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMzZNX01BU0sgICAgICAgICB8IFwKLQlJV0xfUkFURV80OE1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzU0TV9NQVNLKQotCi0jZGVmaW5lIElXTF9CQVNJQ19SQVRFU19NQVNLICAgICAgICAgXAotCShJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAotCSBJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSVdMX1JBVEVTX01BU0sgKCgxIDw8IElXTF9SQVRFX0NPVU5UKSAtIDEpCi0KLSNkZWZpbmUgSVdMX0lOVl9UUFQgICAgLTEKLQotI2RlZmluZSBJV0xfTUlOX1JTU0lfVkFMICAgICAgICAgICAgICAgICAtMTAwCi0jZGVmaW5lIElXTF9NQVhfUlNTSV9WQUwgICAgICAgICAgICAgICAgICAgIDAKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLQotc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQotewotCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKLQotCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCi0JCXJhdGUgPSByYXRlX2luZGV4OwotCXJldHVybiByYXRlOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCi0gKgotICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCi0gKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCi0gKgotICogU2luY2UgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gaXMgaGFyZHdhcmUgc3BlY2lmaWMsIHRoZXJlIGlzIG5vIG5lZWQKLSAqIG9yIHJlYXNvbiB0byBwbGFjZSBpdCBhcyBhIHN0YW5kIGFsb25lIG1vZHVsZS4gIFRoZSBkcml2ZXIgY2FuIGNhbGwKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKiB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICBUaGlzIHNob3VsZCBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gY2FsbGluZwotICogaWVlZTgwMjExX3JlZ2lzdGVyX2h3Ci0gKgotICovCi1leHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcsIGJ1dCBiZWZvcmUKLSAqIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCi0gKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDQ1Y2ZhMWNmLi4yMzk5MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM4LDEwICszOCwxNSBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIml3bC0zOTQ1LWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1maC5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtMzk0NS5oIgorI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtYWduLXJzLmgiCiAKICNkZWZpbmUgSVdMX0RFQ0xBUkVfUkFURV9JTkZPKHIsIGlwLCBpbiwgcnAsIHJuLCBwcCwgbnApICAgIFwKIAlbSVdMX1JBVEVfIyNyIyNNX0lOREVYXSA9IHsgSVdMX1JBVEVfIyNyIyNNX1BMQ1AsICAgXApAQCAtNjMsNyArNjgsNyBAQAogICogbWFwcyB0byBJV0xfUkFURV9JTlZBTElECiAgKgogICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF0gPSB7Citjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAlJV0xfREVDTEFSRV9SQVRFX0lORk8oMSwgSU5WLCAyLCBJTlYsIDIsIElOViwgMiksICAgIC8qICAxbWJwcyAqLwogCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygyLCAxLCA1LCAxLCA1LCAxLCA1KSwgICAgICAgICAgLyogIDJtYnBzICovCiAJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDUsIDIsIDYsIDIsIDExLCAyLCAxMSksICAgICAgICAvKjUuNW1icHMgKi8KQEAgLTkxLDcgKzk2LDcgQEAKICAqIFVzZSBmb3Igb25seSBzcGVjaWFsIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyIGFzLWlzLAogICogICB5b3UnbGwgbmVlZCB0byBwcm92aWRlIHRoZSBzcGVjaWFsIGJpdHMhIC4uLgogICogICAuLi4gYW5kIHNldCBJV0xfRVZUX0RJU0FCTEUgdG8gMS4gKi8KLXZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMTUwLDM0ICsxNTUsMzQgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZGlzYWJsZV9wdHIgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICg0ICogc2l6ZW9mKHUzMikpKTsKLQlhcnJheV9zaXplID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoNSAqIHNpemVvZih1MzIpKSk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJZGlzYWJsZV9wdHIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkpOworCWFycmF5X3NpemUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDUgKiBzaXplb2YodTMyKSkpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoSVdMX0VWVF9ESVNBQkxFICYmIChhcnJheV9zaXplID09IElXTF9FVlRfRElTQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIHNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgYXQgMHgleFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBzZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIGF0IDB4JXhcbiIsCiAJCQkgICAgICAgZGlzYWJsZV9wdHIpOwotCQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAkJZm9yIChpID0gMDsgaSA8IElXTF9FVlRfRElTQUJMRV9TSVpFOyBpKyspCi0JCQlpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHByaXYsCisJCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwKIAkJCQkJICAgZGlzYWJsZV9wdHIgKyAoaSAqIHNpemVvZih1MzIpKSwKIAkJCQkJICAgZXZ0X2Rpc2FibGVbaV0pOwogCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIG1heSBiZSBkaXNhYmxlZFxuIik7Ci0JCUlXTF9ERUJVR19JTkZPKCIgIGJ5IHdyaXRpbmcgXCIxXCJzIGludG8gZGlzYWJsZSBiaXRtYXBcbiIpOwotCQlJV0xfREVCVUdfSU5GTygiICBpbiBTUkFNIGF0IDB4JXgsIHNpemUgJWQgdTMyc1xuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgbWF5IGJlIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiAgYnkgd3JpdGluZyBcIjFcInMgaW50byBkaXNhYmxlIGJpdG1hcFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIgIGluIFNSQU0gYXQgMHgleCwgc2l6ZSAlZCB1MzJzXG4iLAogCQkJICAgICAgIGRpc2FibGVfcHRyLCBhcnJheV9zaXplKTsKIAl9CiAKQEAgLTE5Myw0MCArMTk4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qKgotICogaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyAtIEdldCBhbnRlbm5hIGZsYWdzIGZvciBSWE9OIGNvbW1hbmQKLSAqIEBwcml2OiBlZXByb20gYW5kIGFudGVubmEgZmllbGRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBhbnRlbm5hIGZsYWdzCi0gKgotICogcHJpdi0+ZWVwcm9tICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAotICogcHJpdi0+YW50ZW5uYSBzcGVjaWZpZXMgdGhlIGFudGVubmEgZGl2ZXJzaXR5IG1vZGU6Ci0gKgotICogSVdMX0FOVEVOTkFfRElWRVJTSVRZIC0gTklDIHNlbGVjdHMgYmVzdCBhbnRlbm5hIGJ5IGl0c2VsZgotICogSVdMX0FOVEVOTkFfTUFJTiAgICAgIC0gRm9yY2UgTUFJTiBhbnRlbm5hCi0gKiBJV0xfQU5URU5OQV9BVVggICAgICAgLSBGb3JjZSBBVVggYW50ZW5uYQotICovCi1fX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN3aXRjaCAocHJpdi0+YW50ZW5uYSkgewotCWNhc2UgSVdMX0FOVEVOTkFfRElWRVJTSVRZOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgSVdMX0FOVEVOTkFfTUFJTjoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7Ci0KLQljYXNlIElXTF9BTlRFTk5BX0FVWDoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7Ci0JfQotCi0JLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KLQlJV0xfRVJST1IoIkJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICgweCV4KVxuIiwgcHJpdi0+YW50ZW5uYSk7Ci0JcmV0dXJuIDA7CQkvKiAiZGl2ZXJzaXR5IiBpcyBkZWZhdWx0IGlmIGVycm9yICovCi19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKml3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCkBAIC0yNjYsNyArMjM4LDcgQEAKICAqIGZvciBBIGFuZCBCIG1vZGUgd2UgbmVlZCB0byBvdmVycmlnaHQgcHJldgogICogdmFsdWUKICAqLwotaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCByYXRlKQoraW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpCiB7CiAJaW50IG5leHRfcmF0ZSA9IGl3bDM5NDVfZ2V0X3ByZXZfaWVlZV9yYXRlKHJhdGUpOwogCkBAIC0yNzksNyArMjUxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCQlpZiAocmF0ZSA9PSBJV0xfUkFURV8xMU1fSU5ERVgpCiAJCQkJbmV4dF9yYXRlID0gSVdMX1JBVEVfNU1fSU5ERVg7CiAJCX0KQEAgLTMwMCwxMiArMjcyLDEyIEBACiAgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuIElmIHRoZXJlIGlzCiAgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKKwlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4X2luZm87CiAKIAlCVUdfT04odHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKTsKIApAQCAtMzE1LDM0ICsyODcsMzQgQEAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYlswXSk7CiAJCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7Ci0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCX0KIAotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiAodHhxX2lkID49IDApICYmCiAJCQkodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSAmJgogCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiB9CiAKIC8qKgogICogaXdsMzk0NV9yeF9yZXBseV90eCAtIEhhbmRsZSBUeCByZXNwb25zZQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKIAlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKIAlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKIAl1MzIgIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cyk7CiAJaW50IHJhdGVfaWR4OwogCWludCBmYWlsOwogCi0JaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWRcbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHR4cS0+cS5uX2JkLCB0eHEtPnEud3JpdGVfcHRyLAogCQkJICB0eHEtPnEucmVhZF9wdHIpOwpAQCAtMzY2LDE1ICszMzgsMTUgQEAKIAlpbmZvLT5mbGFncyB8PSAoKHN0YXR1cyAmIFRYX1NUQVRVU19NU0spID09IFRYX1NUQVRVU19TVUNDRVNTKSA/CiAJCQkJSUVFRTgwMjExX1RYX1NUQVRfQUNLIDogMDsKIAotCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAorCUlXTF9ERUJVR19UWChwcml2LCAiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAogCQkJdHhxX2lkLCBpd2wzOTQ1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCiAJCQl0eF9yZXNwLT5yYXRlLCB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOwogCWl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiAKQEAgLTM4NywxNCArMzU5LDE0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCit2b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUlgoIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAorCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyksCiAJCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKIAotCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3NfMzksIHBrdC0+dS5yYXcsIHNpemVvZihwcml2LT5zdGF0aXN0aWNzXzM5KSk7CiAKIAlpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHByaXYpOwogCkBAIC00MDYsNyArMzc4LDcgQEAKICAqIE1pc2MuIGludGVybmFsIHN0YXRlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAKIC8qKgogICogaXdsMzk0NV9yZXBvcnRfZnJhbWUgLSBkdW1wIGZyYW1lIHRvIHN5c2xvZyBkdXJpbmcgZGVidWcgc2Vzc2lvbnMKQEAgLTQxNSw4ICszODcsOCBAQAogICogaW5jbHVkaW5nIHNlbGVjdGl2ZSBmcmFtZSBkdW1wcy4KICAqIGdyb3VwMTAwIHBhcmFtZXRlciBzZWxlY3RzIHdoZXRoZXIgdG8gc2hvdyAxIG91dCBvZiAxMDAgZ29vZCBmcmFtZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCwKK3N0YXRpYyB2b2lkIF9pd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCiB7CiAJdTMyIHRvX3VzOwpAQCAtNTI0LDEzICs0OTYsMTMgQEAKIAkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAogCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KIAkJaWYgKGRhdGFmcmFtZSkKLQkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JWQsIFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCiAJCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIHJhdGUpOwogCQllbHNlIHsKIAkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KLQkJCUlXTF9ERUJVR19SWCgiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCiAJCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCiAJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCkBAIC01NDAsMTggKzUxMiwyNyBAQAogCQl9CiAJfQogCWlmIChwcmludF9kdW1wKQotCQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKKwkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKIH0KKworc3RhdGljIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwgaW50IGdyb3VwMTAwKQoreworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkKKwkJX2l3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgZ3JvdXAxMDApOworfQorCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCiB7CiB9CiAjZW5kaWYKIAogLyogVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBmb3IgYSBudW1iZXIgb2Ygc3RhdGlzdGljcywgc2VlIHRoZSBjYWxsZXIuICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCiB7CiAJLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldGVkIHRvd2FyZApAQCAtNTY4LDEyICs1NDksMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CiAjZW5kaWYKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKQEAgLTU4MSwxNSArNTYyLDE1IEBACiAJc2hvcnQgbGVuID0gbGUxNl90b19jcHUocnhfaGRyLT5sZW4pOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlpZiAodW5saWtlbHkoKGxlbiArIElXTF9SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkIVxuIik7CisJaWYgKHVubGlrZWx5KChsZW4gKyBJV0wzOV9SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJDb3JydXB0aW9uIGRldGVjdGVkIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwogCWlmICh1bmxpa2VseSghcHJpdi0+aXNfb3BlbikpIHsKLQkJSVdMX0RFQlVHX0RST1BfTElNSVQKLQkJICAgICgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOworCQlJV0xfREVCVUdfRFJPUF9MSU1JVChwcml2LAorCQkJIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTk3LDExICs1NzgsMTIgQEAKIAkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIHNrYiB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgKi8KIAlza2JfcHV0KHJ4Yi0+c2tiLCBsZTE2X3RvX2NwdShyeF9oZHItPmxlbikpOwogCi0JaWYgKGl3bDM5NDVfcGFyYW1faHdjcnlwdG8pCi0JCWl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHByaXYsIHJ4Yi0+c2tiLAorCWlmICghaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0bykKKwkJaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LAorCQkJCSAgICAgICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeGItPnNrYi0+ZGF0YSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUocnhfZW5kLT5zdGF0dXMpLCBzdGF0cyk7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZW47CiAjZW5kaWYKQEAgLTYxMSwxMiArNTkzLDEyIEBACiAKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQyAoSFoqNikKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfcngoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXI7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyAqcnhfc3RhdHMgPSBJV0xfUlhfU1RBVFMocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgKnJ4X2VuZCA9IElXTF9SWF9FTkQocGt0KTsKQEAgLTY0NCwyMiArNjI2LDIxIEBACiAJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAKIAlpZiAoKHVubGlrZWx5KHJ4X3N0YXRzLT5waHlfY291bnQgPiAyMCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QCi0JCSAgICAoImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICIKLQkJICAgICAiJWQvbiIsIHJ4X3N0YXRzLT5waHlfY291bnQpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCisJCQkJcnhfc3RhdHMtPnBoeV9jb3VudCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIShyeF9lbmQtPnN0YXR1cyAmIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IpCiAJICAgIHx8ICEocnhfZW5kLT5zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKLQkJSVdMX0RFQlVHX1JYKCJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsIHJ4X2VuZC0+c3RhdHVzKTsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsIHJ4X2VuZC0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAogCiAKIAkvKiBDb252ZXJ0IDM5NDUncyByc3NpIGluZGljYXRvciB0byBkQm0gKi8KLQlyeF9zdGF0dXMuc2lnbmFsID0gcnhfc3RhdHMtPnJzc2kgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcnhfc3RhdHVzLnNpZ25hbCA9IHJ4X3N0YXRzLT5yc3NpIC0gSVdMMzlfUlNTSV9PRkZTRVQ7CiAKIAkvKiBTZXQgZGVmYXVsdCBub2lzZSB2YWx1ZSB0byAtMTI3ICovCiAJaWYgKHByaXYtPmxhc3Rfcnhfbm9pc2UgPT0gMCkKQEAgLTY5MSw3ICs2NzIsNyBAQAogCX0KIAogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpICVkIG5vaXNlICVkIHF1YWwgJWQgc2lnX2F2ZyAlZCBub2lzZV9kaWZmICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSAlZCBub2lzZSAlZCBxdWFsICVkIHNpZ19hdmcgJWQgbm9pc2VfZGlmZiAlZFxuIiwKIAkJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnF1YWwsCiAJCQlyeF9zdGF0c19zaWdfYXZnLCByeF9zdGF0c19ub2lzZV9kaWZmKTsKIApAQCAtNjk5LDE3ICs2ODAsMTQgQEAKIAogCW5ldHdvcmtfcGFja2V0ID0gaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChwcml2LCBoZWFkZXIpOwogCi0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJbJWNdICVkIFJTU0k6JWQgU2lnbmFsOiV1LCBOb2lzZToldSwgUmF0ZToldVxuIiwKKwlJV0xfREVCVUdfU1RBVFNfTElNSVQocHJpdiwgIlslY10gJWQgUlNTSTolZCBTaWduYWw6JXUsIE5vaXNlOiV1LCBSYXRlOiV1XG4iLAogCQkJICAgICAgbmV0d29ya19wYWNrZXQgPyAnKicgOiAnICcsCiAJCQkgICAgICBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpLAogCQkJICAgICAgcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLnNpZ25hbCwKIAkJCSAgICAgIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnJhdGVfaWR4KTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX1JYKSkKLQkJLyogU2V0ICIxIiB0byByZXBvcnQgZ29vZCBkYXRhIGZyYW1lcyBpbiBncm91cHMgb2YgMTAwICovCi0JCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7Ci0jZW5kaWYKKwkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KKwlpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIDEpOwogCiAJaWYgKG5ldHdvcmtfcGFja2V0KSB7CiAJCXByaXYtPmxhc3RfYmVhY29uX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9lbmQtPmJlYWNvbl90aW1lc3RhbXApOwpAQCAtNzIxLDI0ICs2OTksMzEgQEAKIAlpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIHJ4YiwgJnJ4X3N0YXR1cyk7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB2b2lkICpwdHIsCi0JCQkJIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKK2ludCBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJICAgICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpCiB7CiAJaW50IGNvdW50OwotCXUzMiBwYWQ7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQgPSAoc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICopcHRyOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bDM5NDVfdGZkICp0ZmQsICp0ZmRfdG1wOworCisJcSA9ICZ0eHEtPnE7CisJdGZkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmQgKil0eHEtPnRmZHM7CisJdGZkID0gJnRmZF90bXBbcS0+d3JpdGVfcHRyXTsKKworCWlmIChyZXNldCkKKwkJbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKIAogCWNvdW50ID0gVEZEX0NUTF9DT1VOVF9HRVQobGUzMl90b19jcHUodGZkLT5jb250cm9sX2ZsYWdzKSk7Ci0JcGFkID0gVEZEX0NUTF9QQURfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCiAJaWYgKChjb3VudCA+PSBOVU1fVEZEX0NIVU5LUykgfHwgKGNvdW50IDwgMCkpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCiAJCQkgIE5VTV9URkRfQ0hVTktTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdGZkLT5wYVtjb3VudF0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwotCXRmZC0+cGFbY291bnRdLmxlbiA9IGNwdV90b19sZTMyKGxlbik7CisJdGZkLT50YnNbY291bnRdLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwl0ZmQtPnRic1tjb3VudF0ubGVuID0gY3B1X3RvX2xlMzIobGVuKTsKIAogCWNvdW50Kys7CiAKQEAgLTc1MywzMiArNzM4LDM1IEBACiAgKgogICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgaW5kZXhlcwogICovCi1pbnQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKK3ZvaWQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZF90bXAgPSAoc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICopJnR4cS0+YmRbMF07Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZCA9ICZiZF90bXBbdHhxLT5xLnJlYWRfcHRyXTsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZF90bXAgPSAoc3RydWN0IGl3bDM5NDVfdGZkICopdHhxLT50ZmRzOworCWludCBpbmRleCA9IHR4cS0+cS5yZWFkX3B0cjsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZCA9ICZ0ZmRfdG1wW2luZGV4XTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKIAlpbnQgaTsKIAlpbnQgY291bnRlcjsKIAotCS8qIGNsYXNzaWZ5IGJkICovCi0JaWYgKHR4cS0+cS5pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJLyogbm90aGluZyB0byBjbGVhbnVwIGFmdGVyIGZvciBob3N0IGNvbW1hbmRzICovCi0JCXJldHVybiAwOwotCiAJLyogc2FuaXR5IGNoZWNrICovCi0JY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KGJkLT5jb250cm9sX2ZsYWdzKSk7CisJY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCWlmIChjb3VudGVyID4gTlVNX1RGRF9DSFVOS1MpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBjb3VudGVyKTsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgY291bnRlcik7CiAJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAorCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChjb3VudGVyKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKIAkvKiB1bm1hcCBjaHVua3MgaWYgYW55ICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgY291bnRlcjsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdShiZC0+cGFbaV0uYWRkciksCi0JCQkJIGxlMzJfdG9fY3B1KGJkLT5wYVtpXS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmFkZHIpLAorCQkJIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXTsKIAkJCWlmICh0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSkgewpAQCAtNzg4LDEwICs3NzYsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gOwogfQogCi11OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3U4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGksIHN0YXJ0ID0gSVdMX0FQX0lEOwogCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtODAyLDE4ICs3OTAsMTggQEAKIAkJc3RhcnQgPSBJV0xfU1RBX0lEOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQlpZiAoKHByaXYtPnN0YXRpb25zW2ldLnVzZWQpICYmCisJZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCisJCWlmICgocHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCkgJiYKIAkJICAgICghY29tcGFyZV9ldGhlcl9hZGRyCi0JCSAgICAgKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CisJCSAgICAgKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CiAJCQlyZXQgPSBpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19JTkZPKCJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAogCQkgICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTgyNCwxMiArODEyLDEwIEBACiAgKiBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlIC0gQWRkIHJhdGUgcG9ydGlvbiB0byBUWF9DTUQ6CiAgKgogKi8KLXZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGh3X3ZhbHVlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAJdTE2IHJhdGVfaW5kZXggPSBtaW4oaHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CiAJdTE2IHJhdGVfbWFzazsKQEAgLTgzOCwyNSArODI0LDE1IEBACiAJdTggZGF0YV9yZXRyeV9saW1pdDsKIAlfX2xlMzIgdHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAogCXJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnBsY3A7Ci0JdHhfZmxhZ3MgPSBjbWQtPmNtZC50eC50eF9mbGFnczsKKwl0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAogCS8qIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzdGEtPnN1cHBfcmF0ZXMgd2hpbGUKIAkgKiBpbiB0aGlzIHJ1bm5pbmcgY29udGV4dCAqLwogCXJhdGVfbWFzayA9IElXTF9SQVRFU19NQVNLOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSByYXRlOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgotCSAgICAoc3RhX2lkICE9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkKSAmJgotCQkoc3RhX2lkICE9IElXTF9NVUxUSUNBU1RfSUQpKQotCQlwcml2LT5zdGF0aW9uc1tJV0xfU1RBX0lEXS5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzID0gcmF0ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAodHhfaWQgPj0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCXJ0c19yZXRyeV9saW1pdCA9IDM7CiAJZWxzZQpAQCAtODg4LDI1ICs4NjQsMjUgQEAKIAkJfQogCX0KIAotCWNtZC0+Y21kLnR4LnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5yYXRlID0gcmF0ZTsKLQljbWQtPmNtZC50eC50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4LT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7CisJdHgtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OworCXR4LT5yYXRlID0gcmF0ZTsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKIAogCS8qIE9GRE0gKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzBdID0KKwl0eC0+c3VwcF9yYXRlc1swXSA9CiAJICAgKChyYXRlX21hc2sgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CiAKIAkvKiBDQ0sgKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzFdID0gKHJhdGVfbWFzayAmIDB4Rik7CisJdHgtPnN1cHBfcmF0ZXNbMV0gPSAocmF0ZV9tYXNrICYgMHhGKTsKIAotCUlXTF9ERUJVR19SQVRFKCJUeCBzdGEgaWQ6ICVkLCByYXRlOiAlZCAocGxjcCksIGZsYWdzOiAweCU0WCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlR4IHN0YSBpZDogJWQsIHJhdGU6ICVkIChwbGNwKSwgZmxhZ3M6IDB4JTRYICIKIAkJICAgICAgICJjY2svb2ZkbSBtYXNrOiAweCV4LzB4JXhcbiIsIHN0YV9pZCwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnJhdGUsIGxlMzJfdG9fY3B1KGNtZC0+Y21kLnR4LnR4X2ZsYWdzKSwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMV0sIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMF0pOworCQkgICAgICAgdHgtPnJhdGUsIGxlMzJfdG9fY3B1KHR4LT50eF9mbGFncyksCisJCSAgICAgICB0eC0+c3VwcF9yYXRlc1sxXSwgdHgtPnN1cHBfcmF0ZXNbMF0pOwogfQogCi11OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHUxNiB0eF9yYXRlLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgKnN0YXRpb247CkBAIC05MTUsMTM4ICs4OTEsMTMzIEBACiAJCXJldHVybiBJV0xfSU5WQUxJRF9TVEFUSU9OOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CisJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdOwogCiAJc3RhdGlvbi0+c3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfVFhfUkFURV9NU0s7CiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHR4X3JhdGUpOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSB0eF9yYXRlOwogCXN0YXRpb24tPnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAotCWl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmc3RhdGlvbi0+c3RhLCBmbGFncyk7Ci0JSVdMX0RFQlVHX1JBVEUoIlNDQUxFIHN5bmMgc3RhdGlvbiAlZCB0byByYXRlICVkXG4iLAorCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTQ0FMRSBzeW5jIHN0YXRpb24gJWQgdG8gcmF0ZSAlZFxuIiwKIAkJCXN0YV9pZCwgdHhfcmF0ZSk7CiAJcmV0dXJuIHN0YV9pZDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaXdsX3B3cl9zcmMgc3JjKQogewotCWludCByYzsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghcHdyX21heCkgewotCQl1MzIgdmFsOwotCi0JCXJjID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsCi0JCQkJUENJX1BPV0VSX1NPVVJDRSwgJnZhbCk7Ci0JCWlmICh2YWwgJiBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCkgewotCQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKKwkJaWYgKHBjaV9wbWVfY2FwYWJsZShwcml2LT5wY2lfZGV2LCBQQ0lfRDNjb2xkKSkgeworCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJfkFQTUdfUFNfQ1RSTF9NU0tfUFdSX1NSQyk7Ci0JCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKLQkJCWl3bDM5NDVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCisJCQlpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCiAJCQkJICAgICBDU1JfR1BJT19JTl9WQUxfVkFVWF9QV1JfU1JDLAogCQkJCSAgICAgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiwgNTAwMCk7Ci0JCX0gZWxzZQotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCX0gZWxzZSB7CisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQl9CiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WTUFJTiwKIAkJCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKIAotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCiAJCQkgICAgIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIsIDUwMDApOwkvKiB1UyAqLwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3J4X2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyBpbnQgaXdsMzk0NV9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmRtYV9hZGRyKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfUlBUUl9BRERSKDApLAotCQkJICAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzICsKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkLCByeF9yZWFkX3B0clswXSkpOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUkNTUl9XUFRSKDApLCAwKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggfAotCQkoUlhfUVVFVUVfU0laRV9MT0cgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFKSB8Ci0JCUFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKLQkJKDEgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEgpIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUkJEX0JBU0UoMCksIHJ4cS0+ZG1hX2FkZHIpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUlBUUl9BRERSKDApLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1dQVFIoMCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfQ09ORklHKDApLAorCQlGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4IHwKKwkJKFJYX1FVRVVFX1NJWkVfTE9HIDw8IEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19SQkRDX1NJWkUpIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKKwkJKDEgPDwgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIKSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCk7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYgSS9PICovCi0JaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEZIX1JTU1JfQ1RSTCk7CisJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgRkgzOV9SU1NSX0NUUkwpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogYnlwYXNzIG1vZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMHgyKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX01PREVfUkVHLCAweDIpOwogCiAJLyogUkEgMCBpcyBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CiAKIAkvKiBhbGwgNiBmaWZvIGFyZSBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEZBQ1RfUkVHLCAweDNmKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRkFDVF9SRUcsIDB4M2YpOwogCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHLCAweDAxMDAwMCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfVFhGNE1GX1JFRywgMHgwMDAwMDQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRjVNRl9SRUcsIDB4MDAwMDA1KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1NCWVBfTU9ERV8xX1JFRywgMHgwMTAwMDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY0TUZfUkVHLCAweDAwMDAwNCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY1TUZfUkVHLCAweDAwMDAwNSk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UsCi0JCQkgICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RTU1JfQ0JCX0JBU0UsCisJCQkgICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVFNTUl9NU0dfQ09ORklHLAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4QiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfQ0JCX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UU1NSX01TR19DT05GSUcsCisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCIHwKKwkJRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDU3LDcgKzEwMjgsNyBAQAogICoKICAqIERlc3Ryb3lzIGFsbCBETUEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtIGFnYWluCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhxX2N0eF9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCWludCB0eHFfaWQsIHNsb3RzX251bTsKQEAgLTEwNzAsMTMgKzEwNDEsMTMgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIFR4IHF1ZXVlKHMpICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBURkRfUVVFVUVfTUFYOyB0eHFfaWQrKykgeworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKIAkJc2xvdHNfbnVtID0gKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkgPwogCQkJCVRGRF9DTURfU0xPVFMgOiBURkRfVFhfQ01EX1NMT1RTOwotCQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKLQkJCQl0eHFfaWQpOworCQlyYyA9IGl3bF90eF9xdWV1ZV9pbml0KHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgc2xvdHNfbnVtLAorCQkJCSAgICAgICB0eHFfaWQpOwogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7CisJCQlJV0xfRVJSKHByaXYsICJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CkBAIC0xMDg4LDExMSArMTA1OSwxNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfYXBtX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJaXdsX3Bvd2VyX2luaXRpYWxpemUocHJpdik7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJCSAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9ESVNfTDBTX0VYSVRfVElNRVIpOworCisJLyogZGlzYWJsZSBMMHMgd2l0aG91dCBhZmZlY3RpbmcgTDEgOmRvbid0IHdhaXQgZm9yIElDSCBMMHMgYnVnIFcvQSkgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJCSAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9MMUFfTk9fTDBTX1JYKTsKKworCS8qIHNldCAiaW5pdGlhbGl6YXRpb24gY29tcGxldGUiIGJpdCB0byBtb3ZlIGFkYXB0ZXIKKwkqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBlbmFibGUgRE1BICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8CisJCQkJCQlBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOworCisJdWRlbGF5KDIwKTsKKworCS8qIGRpc2FibGUgTDEtQWN0aXZlICovCisJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKKwkJCSAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXdsMzk0NV9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCByZXZfaWQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfUlRQKQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUlRQIHR5cGUgXG4iKTsKKwllbHNlIGlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfQkFTSUNfU0tVKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1IFJBRElPLU1CIHR5cGVcbiIpOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKKwl9IGVsc2UgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NTSk7CisJfQorCisJaWYgKEVFUFJPTV9TS1VfQ0FQX09QX01PREVfTVJDID09IGVlcHJvbS0+c2t1X2NhcCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfU0tVX01SQyk7CisJfSBlbHNlCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTS1UgT1AgbW9kZSBpcyBiYXNpY1xuIik7CisKKwlpZiAoKGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCisJCQkgICAgICAgZWVwcm9tLT5ib2FyZF9yZXZpc2lvbik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCisJCQkgICAgICAgZWVwcm9tLT5ib2FyZF9yZXZpc2lvbik7CisJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKKwl9CisKKwlpZiAoZWVwcm9tLT5hbG1nb3JfbV92ZXJzaW9uIDw9IDEpIHsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbik7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhcmQgTSB0eXBlIEIgdmVyc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlZXByb20tPnNrdV9jYXAgJiBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSkKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlNXIFJGIEtJTEwgc3VwcG9ydGVkIGluIEVFUFJPTS5cbiIpOworCisJaWYgKGVlcHJvbS0+c2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQorCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7Cit9CisKK2ludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCByZXZfaWQ7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7Ci0KLQlpd2wzOTQ1X3Bvd2VyX2luaXRfaGFuZGxlKHByaXYpOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjM5X0FOQV9QTExfQ0ZHX1ZBTCk7Ci0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAotCQkgICAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9MMUFfTk9fTDBTX1JYKTsKLQotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwotCXJjID0gaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwotCWlmIChyYyA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCi0JCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8Ci0JCQkJIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7Ci0JdWRlbGF5KDIwKTsKLQlpd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKLQkJCQkgICAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLmluaXQocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogRGV0ZXJtaW5lIEhXIHR5cGUgKi8KIAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldl9pZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JSVdMX0RFQlVHX0lORk8oIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCByZXZfaWQpOwogCi0JaXdsMzk0NV9uaWNfc2V0X3B3cl9zcmMocHJpdiwgMSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyYyA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc2V0X3B3cl9zcmMocHJpdiwgSVdMX1BXUl9TUkNfVk1BSU4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFApCi0JCUlXTF9ERUJVR19JTkZPKCJSVFAgdHlwZSBcbiIpOwotCWVsc2UgaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UpIHsKLQkJSVdMX0RFQlVHX0lORk8oIjM5NDUgUkFESU8tTUIgdHlwZVxuIik7Ci0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOwotCX0KLQotCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBwcml2LT5lZXByb20uc2t1X2NhcCkgewotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOwotCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOwotCi0JaWYgKChwcml2LT5lZXByb20uYm9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOwotCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKLQl9Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24gPD0gMSkgewotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAotCQkJICAgICAgIHByaXYtPmVlcHJvbS5hbG1nb3JfbV92ZXJzaW9uKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBNIHR5cGUgQiB2ZXJzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24pOwotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9CKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHByaXYtPmVlcHJvbS5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCi0JCUlXTF9ERUJVR19SRl9LSUxMKCJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKLQotCWlmIChwcml2LT5lZXByb20uc2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQotCQlJV0xfREVCVUdfUkZfS0lMTCgiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5jb25maWcocHJpdik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUlggcXVldWUsIG9yIHJlc2V0IGlmIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkICovCiAJaWYgKCFyeHEtPmJkKSB7Ci0JCXJjID0gaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhwcml2KTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfYWxsb2MocHJpdik7CiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQotCQlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9yZXNldChwcml2LCByeHEpOwogCiAJaXdsMzk0NV9yeF9yZXBsZW5pc2gocHJpdik7CiAKQEAgLTEyMDIsMTYgKzEyMDIsMTYgQEAKIAogCS8qIExvb2sgYXQgdXNpbmcgdGhpcyBpbnN0ZWFkOgogCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwotCWl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJKi8KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1dQVFIoMCksIHJ4cS0+d3JpdGUgJiB+Nyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9XUFRSKDApLCByeHEtPndyaXRlICYgfjcpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjksMTE2ICsxMjI5LDEyNSBAQAogICoKICAqIERlc3Ryb3kgYWxsIFRYIERNQSBxdWV1ZXMgYW5kIHN0cnVjdHVyZXMKICAqLwotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgVEZEX1FVRVVFX01BWDsgdHhxX2lkKyspCi0JCWl3bDM5NDVfdHhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0pOworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspCisJCWlmICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCisJCQlpd2xfY21kX3F1ZXVlX2ZyZWUocHJpdik7CisJCWVsc2UKKwkJCWl3bF90eF9xdWV1ZV9mcmVlKHByaXYsIHR4cV9pZCk7CisKIH0KIAotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHF1ZXVlOworCWludCB0eHFfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJaWYgKGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHN0b3AgU0NEICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOwogCiAJLyogcmVzZXQgVEZEIHF1ZXVlcyAqLwotCWZvciAocXVldWUgPSBURkRfUVVFVUVfTUlOOyBxdWV1ZSA8IFRGRF9RVUVVRV9NQVg7IHF1ZXVlKyspIHsKLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9UQ1NSX0NPTkZJRyhxdWV1ZSksIDB4MCk7Ci0JCWl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX1RTU1JfVFhfU1RBVFVTLAotCQkJCUFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShxdWV1ZSksCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPD0gcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtOyB0eHFfaWQrKykgeworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UQ1NSX0NPTkZJRyh0eHFfaWQpLCAweDApOworCQlpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIMzlfVFNTUl9UWF9TVEFUVVMsCisJCQkJRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRSh0eHFfaWQpLAogCQkJCTEwMDApOwogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsMzk0NV9od190eHFfY3R4X2ZyZWUocHJpdik7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19zdG9wX21hc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2FwbV9zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjID0gMDsKLQl1MzIgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHNldCBzdG9wIG1hc3RlciBiaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1RPUF9NQVNURVIpOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NUT1BfTUFTVEVSKTsKIAotCXJlZ192YWwgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpOworCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX1JFU0VULAorCQkJICAgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CiAKLQlpZiAoQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19QT1dFUl9TQVZFID09Ci0JICAgIChyZWdfdmFsICYgQ1NSX0dQX0NOVFJMX1JFR19NU0tfUE9XRVJfU0FWRV9UWVBFKSkKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgaW4gcG93ZXIgc2F2ZSwgbWFzdGVyIGlzIGFscmVhZHkgIgotCQkJICAgICAgICJzdG9wcGVkXG4iKTsKLQllbHNlIHsKLQkJcmMgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfUkVTRVQsCi0JCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInN0b3AgbWFzdGVyXG4iKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCi1pbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYXBtX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpd2wzOTQ1X2FwbV9zdG9wX21hc3Rlcihwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisKKwl1ZGVsYXkoMTApOworCS8qIGNsZWFyICJpbml0IGNvbXBsZXRlIiAgbW92ZSBhZGFwdGVyIEQwQSogLS0+IEQwVSBzdGF0ZSAqLworCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaXdsMzk0NV9od19uaWNfc3RvcF9tYXN0ZXIocHJpdik7CisJaXdsMzk0NV9hcG1fc3RvcF9tYXN0ZXIocHJpdik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisJdWRlbGF5KDEwKTsKIAotCWl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQkgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKCFyYykgewotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKIAotCQl1ZGVsYXkoMTApOwotCi0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7Ci0KLQkJaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9NU0tfUkVHLCAweDApOwotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX1NUVF9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9NU0tfUkVHLCAweDApOworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX1JUQ19JTlRfU1RUX1JFRywKIAkJCQkJMHhGRkZGRkZGRik7CiAKIAkJLyogZW5hYmxlIERNQSAqLwotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAorCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCiAJCQkJCSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAogCQkJCQkgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKIAkJdWRlbGF5KDEwKTsKIAotCQlpd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKIAkJCQlBUE1HX1BTX0NUUkxfVkFMX1JFU0VUX1JFUSk7CiAJCXVkZWxheSg1KTsKLQkJaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCiAJLyogQ2xlYXIgdGhlICdob3N0IGNvbW1hbmQgYWN0aXZlJyBiaXQuLi4gKi8KQEAgLTEzNjcsMzMgKzEzNzYsMzQgQEAKIAlyZXR1cm4gKCh0ZW1wZXJhdHVyZSA8IC0yNjApIHx8ICh0ZW1wZXJhdHVyZSA+IDI1KSkgPyAxIDogMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXJldHVybiBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMik7CisJcmV0dXJuIGl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDIpOwogfQogCiAvKioKICAqIGl3bDM5NDVfaHdfcmVnX3R4cG93ZXJfZ2V0X3RlbXBlcmF0dXJlCiAgKiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYnkgcmVhZGluZyBmcm9tIE5JQwogKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogeworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKIAlpbnQgdGVtcGVyYXR1cmU7CiAKIAl0ZW1wZXJhdHVyZSA9IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHByaXYpOwogCiAJLyogZHJpdmVyJ3Mgb2theSByYW5nZSBpcyAtMjYwIHRvICsyNS4KIAkgKiAgIGh1bWFuIHJlYWRhYmxlIG9rYXkgcmFuZ2UgaXMgMCB0byArMjg1ICovCi0JSVdMX0RFQlVHX0lORk8oIlRlbXBlcmF0dXJlOiAlZFxuIiwgdGVtcGVyYXR1cmUgKyBJV0xfVEVNUF9DT05WRVJUKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiVGVtcGVyYXR1cmU6ICVkXG4iLCB0ZW1wZXJhdHVyZSArIElXTF9URU1QX0NPTlZFUlQpOwogCiAJLyogaGFuZGxlIGluc2FuZSB0ZW1wIHJlYWRpbmcgKi8KIAlpZiAoaXdsMzk0NV9od19yZWdfdGVtcF9vdXRfb2ZfcmFuZ2UodGVtcGVyYXR1cmUpKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYmFkIHRlbXBlcmF0dXJlIHZhbHVlICAlZFxuIiwgdGVtcGVyYXR1cmUpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBiYWQgdGVtcGVyYXR1cmUgdmFsdWUgICVkXG4iLCB0ZW1wZXJhdHVyZSk7CiAKIAkJLyogaWYgcmVhbGx5IHJlYWxseSBob3QoPyksCiAJCSAqICAgc3Vic3RpdHV0ZSB0aGUgM3JkIGJhbmQvZ3JvdXAncyB0ZW1wIG1lYXN1cmVkIGF0IGZhY3RvcnkgKi8KIAkJaWYgKHByaXYtPmxhc3RfdGVtcGVyYXR1cmUgPiAxMDApCi0JCQl0ZW1wZXJhdHVyZSA9IHByaXYtPmVlcHJvbS5ncm91cHNbMl0udGVtcGVyYXR1cmU7CisJCQl0ZW1wZXJhdHVyZSA9IGVlcHJvbS0+Z3JvdXBzWzJdLnRlbXBlcmF0dXJlOwogCQllbHNlIC8qIGVsc2UgdXNlIG1vc3QgcmVjZW50ICJzYW5lIiB2YWx1ZSBmcm9tIGRyaXZlciAqLwogCQkJdGVtcGVyYXR1cmUgPSBwcml2LT5sYXN0X3RlbXBlcmF0dXJlOwogCX0KQEAgLTE0MTIsNyArMTQyMiw3IEBACiAgKiByZWNvcmRzIG5ldyB0ZW1wZXJhdHVyZSBpbiB0eF9tZ3ItPnRlbXBlcmF0dXJlLgogICogcmVwbGFjZXMgdHhfbWdyLT5sYXN0X3RlbXBlcmF0dXJlICpvbmx5KiBpZiBjYWxpYiBuZWVkZWQKICAqICAgIChhc3N1bWVzIGNhbGxlciB3aWxsIGFjdHVhbGx5IGRvIHRoZSBjYWxpYnJhdGlvbiEpLiAqLwotc3RhdGljIGludCBpc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHRlbXBfZGlmZjsKIApAQCAtMTQyMSwyMCArMTQzMSwyMCBAQAogCiAJLyogZ2V0IGFic29sdXRlIHZhbHVlICovCiAJaWYgKHRlbXBfZGlmZiA8IDApIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CiAJCXRlbXBfZGlmZiA9IC10ZW1wX2RpZmY7CiAJfSBlbHNlIGlmICh0ZW1wX2RpZmYgPT0gMCkKLQkJSVdMX0RFQlVHX1BPV0VSKCJTYW1lIHRlbXAsXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTYW1lIHRlbXAsXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19QT1dFUigiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLFxuIiwgdGVtcF9kaWZmKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJHZXR0aW5nIHdhcm1lciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOwogCiAJLyogaWYgd2UgZG9uJ3QgbmVlZCBjYWxpYnJhdGlvbiwgKmRvbid0KiB1cGRhdGUgbGFzdF90ZW1wZXJhdHVyZSAqLwogCWlmICh0ZW1wX2RpZmYgPCBJV0xfVEVNUEVSQVRVUkVfTElNSVRfVElNRVIpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJUaW1lZCB0aGVybWFsIGNhbGliIG5vdCBuZWVkZWRcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlRpbWVkIHRoZXJtYWwgY2FsaWIgbm90IG5lZWRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiVGltZWQgdGhlcm1hbCBjYWxpYiBuZWVkZWRcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGltZWQgdGhlcm1hbCBjYWxpYiBuZWVkZWRcbiIpOwogCiAJLyogYXNzdW1lIHRoYXQgY2FsbGVyIHdpbGwgYWN0dWFsbHkgZG8gY2FsaWIgLi4uCiAJICogICB1cGRhdGUgdGhlICJsYXN0IHRlbXBlcmF0dXJlIiB2YWx1ZSAqLwpAQCAtMTYyNyw5ICsxNjM3LDkgQEAKICAqIFNldCAoaW4gb3VyIGNoYW5uZWwgaW5mbyBkYXRhYmFzZSkgdGhlIGRpcmVjdCBzY2FuIFR4IHBvd2VyIGZvciAxIE1iaXQgKENDSykKICAqIG9yIDYgTWJpdCAoT0ZETSkgcmF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaHdfcmVnX3NldF9zY2FuX3Bvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBzY2FuX3RibF9pbmRleCwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaHdfcmVnX3NldF9zY2FuX3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHNjYW5fdGJsX2luZGV4LAogCQkJICAgICAgIHMzMiByYXRlX2luZGV4LCBjb25zdCBzOCAqY2xpcF9wd3JzLAotCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbywKIAkJCSAgICAgICBpbnQgYmFuZF9pbmRleCkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gKnNjYW5fcG93ZXJfaW5mbzsKQEAgLTE2NDYsNyArMTY1Niw3IEBACiAJLyogZnVydGhlciBsaW1pdCB0byB1c2VyJ3MgbWF4IHBvd2VyIHByZWZlcmVuY2UuCiAJICogRklYTUU6ICBPdGhlciBzcGVjdHJ1bSBtYW5hZ2VtZW50IHBvd2VyIGxpbWl0YXRpb25zIGRvIG5vdAogCSAqICAgc2VlbSB0byBhcHBseT8/ICovCi0JcG93ZXIgPSBtaW4ocG93ZXIsIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCk7CisJcG93ZXIgPSBtaW4ocG93ZXIsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIAlzY2FuX3Bvd2VyX2luZm8tPnJlcXVlc3RlZF9wb3dlciA9IHBvd2VyOwogCiAJLyogZmluZCBkaWZmZXJlbmNlIGJldHdlZW4gbmV3IHNjYW4gKnBvd2VyKiBhbmQgY3VycmVudCAibm9ybWFsIgpAQCAtMTY3OCwzMiArMTY4OCwzMiBAQAogfQogCiAvKioKLSAqIGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlciAtIGZpbGwgaW4gVHggUG93ZXIgY29tbWFuZCB3aXRoIGdhaW4gc2V0dGluZ3MKKyAqIGl3bDM5NDVfc2VuZF90eF9wb3dlciAtIGZpbGwgaW4gVHggUG93ZXIgY29tbWFuZCB3aXRoIGdhaW4gc2V0dGluZ3MKICAqCiAgKiBDb25maWd1cmVzIHBvd2VyIHNldHRpbmdzIGZvciBhbGwgcmF0ZXMgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwsCiAgKiB1c2luZyB2YWx1ZXMgZnJvbSBjaGFubmVsIGluZm8gc3RydWN0LCBhbmQgc2VuZCB0byBOSUMKICAqLwotaW50IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYXRlX2lkeCwgaTsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kIHR4cG93ZXIgPSB7CiAJCS5jaGFubmVsID0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCwKIAl9OwogCiAJdHhwb3dlci5iYW5kID0gKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPyAwIDogMTsKLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCisJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCiAJCQkJICAgICAgIHByaXYtPmJhbmQsCiAJCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKIAlpZiAoIWNoX2luZm8pIHsKLQkJSVdMX0VSUk9SCi0JCSAgICAoIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBpbmZvIGZvciBjaGFubmVsICVkIFslZF1cbiIsCi0JCSAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksIHByaXYtPmJhbmQpOworCQlJV0xfRVJSKHByaXYsCisJCQkiRmFpbGVkIHRvIGdldCBjaGFubmVsIGluZm8gZm9yIGNoYW5uZWwgJWQgWyVkXVxuIiwKKwkJCWxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpLCBwcml2LT5iYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19QT1dFUigiTm90IGNhbGxpbmcgVFhfUFdSX1RBQkxFX0NNRCBvbiAiCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiTm90IGNhbGxpbmcgVFhfUFdSX1RBQkxFX0NNRCBvbiAiCiAJCQkJIm5vbi1UeCBjaGFubmVsLlxuIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTE3MTEsMTIgKzE3MjEsMTIgQEAKIAkvKiBmaWxsIGNtZCB3aXRoIHBvd2VyIHNldHRpbmdzIGZvciBhbGwgcmF0ZXMgZm9yIGN1cnJlbnQgY2hhbm5lbCAqLwogCS8qIEZpbGwgT0ZETSByYXRlICovCiAJZm9yIChyYXRlX2lkeCA9IElXTF9GSVJTVF9PRkRNX1JBVEUsIGkgPSAwOwotCSAgICAgcmF0ZV9pZHggPD0gSVdMX0xBU1RfT0ZETV9SQVRFOyByYXRlX2lkeCsrLCBpKyspIHsKKwkgICAgIHJhdGVfaWR4IDw9IElXTDM5X0xBU1RfT0ZETV9SQVRFOyByYXRlX2lkeCsrLCBpKyspIHsKIAogCQl0eHBvd2VyLnBvd2VyW2ldLnRwYyA9IGNoX2luZm8tPnBvd2VyX2luZm9baV0udHBjOwogCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaWR4XS5wbGNwOwogCi0JCUlXTF9ERUJVR19QT1dFUigiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKIAkJCQlsZTE2X3RvX2NwdSh0eHBvd2VyLmNoYW5uZWwpLAogCQkJCXR4cG93ZXIuYmFuZCwKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnRwYy50eF9nYWluLApAQCAtMTcyOSw3ICsxNzM5LDcgQEAKIAkJdHhwb3dlci5wb3dlcltpXS50cGMgPSBjaF9pbmZvLT5wb3dlcl9pbmZvW2ldLnRwYzsKIAkJdHhwb3dlci5wb3dlcltpXS5yYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKIAotCQlJV0xfREVCVUdfUE9XRVIoImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJjaCAlZDolZCByZiAlZCBkc3AgJTNkIHJhdGUgY29kZSAweCUwMnhcbiIsCiAJCQkJbGUxNl90b19jcHUodHhwb3dlci5jaGFubmVsKSwKIAkJCQl0eHBvd2VyLmJhbmQsCiAJCQkJdHhwb3dlci5wb3dlcltpXS50cGMudHhfZ2FpbiwKQEAgLTE3MzcsOCArMTc0Nyw5IEBACiAJCQkJdHhwb3dlci5wb3dlcltpXS5yYXRlKTsKIAl9CiAKLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kKSwgJnR4cG93ZXIpOworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsCisJCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQpLAorCQkJCSZ0eHBvd2VyKTsKIAogfQogCkBAIC0xNzU4LDggKzE3NjksOCBAQAogICoJIHByb3Blcmx5IGZpbGwgb3V0IHRoZSBzY2FuIHBvd2VycywgYW5kIGFjdHVhbCBoL3cgZ2FpbiBzZXR0aW5ncywKICAqCSBhbmQgc2VuZCBjaGFuZ2VzIHRvIE5JQwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX3NldF9uZXdfcG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19zZXRfbmV3X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7CiAJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvICpwb3dlcl9pbmZvOwogCWludCBwb3dlcl9jaGFuZ2VkID0gMDsKQEAgLTE3NjgsNyArMTc3OSw3IEBACiAJaW50IHBvd2VyOwogCiAJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtdG8tbWF4L2NsaXAtcG93ZXJzIHRhYmxlICovCi0JY2xpcF9wd3JzID0gcHJpdi0+Y2xpcF9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOworCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJLyogR2V0IHRoaXMgY2hhbm5lbCdzIHJhdGUtdG8tY3VycmVudC1wb3dlciBzZXR0aW5ncyB0YWJsZSAqLwogCXBvd2VyX2luZm8gPSBjaF9pbmZvLT5wb3dlcl9pbmZvOwpAQCAtMTgyMSw3ICsxODMyLDcgQEAKICAqCSBiYXNlZCBzdHJpY3RseSBvbiByZWd1bGF0b3J5IChlZXByb20gYW5kIHNwZWN0cnVtIG1ndCkgbGltaXRhdGlvbnMKICAqCSAobm8gY29uc2lkZXJhdGlvbiBmb3IgaC93IGNsaXBwaW5nIGxpbWl0YXRpb25zKS4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfdHhwb3dlcl9saW1pdChzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9jaF90eHBvd2VyX2xpbWl0KHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewogCXM4IG1heF9wb3dlcjsKIApAQCAtMTg0OSw5ICsxODYwLDEwIEBACiAgKgogICogSWYgUnhPbiBpcyAiYXNzb2NpYXRlZCIsIHRoaXMgc2VuZHMgdGhlIG5ldyBUeHBvd2VyIHRvIE5JQyEKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19jb21wX3R4cG93ZXJfdGVtcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19jb21wX3R4cG93ZXJfdGVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWludCBkZWx0YV9pbmRleDsKIAljb25zdCBzOCAqY2xpcF9wd3JzOyAvKiBhcnJheSBvZiBoL3cgbWF4IHBvd2VyIGxldmVscyBmb3IgZWFjaCByYXRlICovCiAJdTggYV9iYW5kOwpAQCAtMTg2Nyw3ICsxODc5LDcgQEAKIAkJYV9iYW5kID0gaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbyk7CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIGZhY3RvcnkgY2FsaWJyYXRpb24gdGVtcGVyYXR1cmUgKi8KLQkJcmVmX3RlbXAgPSAoczE2KXByaXYtPmVlcHJvbS5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgorCQlyZWZfdGVtcCA9IChzMTYpZWVwcm9tLT5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgogCQkgICAgdGVtcGVyYXR1cmU7CiAKIAkJLyogZ2V0IHBvd2VyIGluZGV4IGFkanVzdG1lbnQgYmFzZWQgb24gY3VycmVudCBhbmQgZmFjdG9yeQpAQCAtMTg5Myw3ICsxOTA1LDcgQEAKIAkJfQogCiAJCS8qIEdldCB0aGlzIGNobmxncnAncyByYXRlLXRvLW1heC9jbGlwLXBvd2VycyB0YWJsZSAqLwotCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJCS8qIHNldCBzY2FuIHR4IHBvd2VyLCAxTWJpdCBmb3IgQ0NLLCA2TWJpdCBmb3IgT0ZETSAqLwogCQlmb3IgKHNjYW5fdGJsX2luZGV4ID0gMDsKQEAgLTE5MDcsMjQgKzE5MTksMjQgQEAKIAl9CiAKIAkvKiBzZW5kIFR4cG93ZXIgY29tbWFuZCBmb3IgY3VycmVudCBjaGFubmVsIHRvIHVjb2RlICovCi0JcmV0dXJuIGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKKwlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcihwcml2KTsKIH0KIAotaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHM4IHBvd2VyKQoraW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCXM4IG1heF9wb3dlcjsKIAl1OCBhX2JhbmQ7CiAJdTggaTsKIAotCWlmIChwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPT0gcG93ZXIpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJSZXF1ZXN0ZWQgVHggcG93ZXIgc2FtZSBhcyBjdXJyZW50ICIKKwlpZiAocHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPT0gcG93ZXIpIHsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSZXF1ZXN0ZWQgVHggcG93ZXIgc2FtZSBhcyBjdXJyZW50ICIKIAkJCQkibGltaXQ6ICVkZEJtLlxuIiwgcG93ZXIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfUE9XRVIoIlNldHRpbmcgdXBwZXIgbGltaXQgY2xhbXAgdG8gJWRkQm0uXG4iLCBwb3dlcik7Ci0JcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0ID0gcG93ZXI7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTZXR0aW5nIHVwcGVyIGxpbWl0IGNsYW1wIHRvICVkZEJtLlxuIiwgcG93ZXIpOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gcG93ZXI7CiAKIAkvKiBzZXQgdXAgbmV3IFR4IHBvd2VycyBmb3IgZWFjaCBhbmQgZXZlcnkgY2hhbm5lbCwgMi40IGFuZCA1LnggKi8KIApAQCAtMTk1Myw3ICsxOTY1LDcgQEAKIH0KIAogLyogd2lsbCBhZGQgMzk0NSBjaGFubmVsIHN3aXRjaCBjbWQgaGFuZGxpbmcgbGF0ZXIgKi8KLWludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQoraW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgY2hhbm5lbCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NjgsNyArMTk4MCw3IEBACiAgKiAgICAgLS0gc2VuZCBuZXcgc2V0IG9mIGdhaW4gc2V0dGluZ3MgdG8gTklDCiAgKiBOT1RFOiAgVGhpcyBzaG91bGQgY29udGludWUgd29ya2luZywgZXZlbiB3aGVuIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLAogICogICBzbyB3ZSBjYW4ga2VlcCBvdXIgaW50ZXJuYWwgdGFibGUgb2Ygc2NhbiBwb3dlcnMgY3VycmVudC4gKi8KLXZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBUaGlzIHdpbGwga2ljayBpbiB0aGUgImJydXRlIGZvcmNlIgogCSAqIGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKCkgYmVsb3cgKi8KQEAgLTE5ODcsNyArMTk5OSw3IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LAogCQkJCQkgICAgIHRoZXJtYWxfcGVyaW9kaWMud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCkBAIC0yMDA5LDEwICsyMDIxLDExIEBACiAgKgkgb24gQS1iYW5kLCBFRVBST00ncyAiZ3JvdXAgZnJlcXVlbmN5IiBlbnRyaWVzIHJlcHJlc2VudCB0aGUgdG9wCiAgKgkgY2hhbm5lbCBpbiBlYWNoIGdyb3VwIDEtNC4gIEdyb3VwIDUgQWxsIEIvRyBjaGFubmVscyBhcmUgaW4gZ3JvdXAgMC4KICAqLwotc3RhdGljIHUxNiBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKK3N0YXRpYyB1MTYgaXdsMzk0NV9od19yZWdfZ2V0X2NoX2dycF9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpjaF9ncnAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1swXTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNoX2dycCA9ICZlZXByb20tPmdyb3Vwc1swXTsKIAl1OCBncm91cDsKIAl1MTYgZ3JvdXBfaW5kZXggPSAwOwkvKiBiYXNlZCBvbiBmYWN0b3J5IGNhbGliIGZyZXF1ZW5jaWVzICovCiAJdTggZ3JwX2NoYW5uZWw7CkBAIC0yMDMyLDcgKzIwNDUsNyBAQAogCX0gZWxzZQogCQlncm91cF9pbmRleCA9IDA7CS8qIDIuNCBHSHosIGdyb3VwIDAgKi8KIAotCUlXTF9ERUJVR19QT1dFUigiQ2hubCAlZCBtYXBwZWQgdG8gZ3JwICVkXG4iLCBjaF9pbmZvLT5jaGFubmVsLAorCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2hubCAlZCBtYXBwZWQgdG8gZ3JwICVkXG4iLCBjaF9pbmZvLT5jaGFubmVsLAogCQkJZ3JvdXBfaW5kZXgpOwogCXJldHVybiBncm91cF9pbmRleDsKIH0KQEAgLTIwNDMsMTEgKzIwNTYsMTIgQEAKICAqIEludGVycG9sYXRlIHRvIGdldCBub21pbmFsIChpLmUuIGF0IGZhY3RvcnkgY2FsaWJyYXRpb24gdGVtcGVyYXR1cmUpIGluZGV4CiAgKiAgIGludG8gcmFkaW8vRFNQIGdhaW4gc2V0dGluZ3MgdGFibGUgZm9yIHJlcXVlc3RlZCBwb3dlci4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfbWF0Y2hlZF9wb3dlcl9pbmRleChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfbWF0Y2hlZF9wb3dlcl9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHM4IHJlcXVlc3RlZF9wb3dlciwKIAkJCQkgICAgICAgczMyIHNldHRpbmdfaW5kZXgsIHMzMiAqbmV3X2luZGV4KQogewogCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpjaG5sX2dycCA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCXMzMiBpbmRleDAsIGluZGV4MTsKIAlzMzIgcG93ZXIgPSAyICogcmVxdWVzdGVkX3Bvd2VyOwogCXMzMiBpOwpAQCAtMjA1Niw3ICsyMDcwLDcgQEAKIAlzMzIgcmVzOwogCXMzMiBkZW5vbWluYXRvcjsKIAotCWNobmxfZ3JwID0gJnByaXYtPmVlcHJvbS5ncm91cHNbc2V0dGluZ19pbmRleF07CisJY2hubF9ncnAgPSAmZWVwcm9tLT5ncm91cHNbc2V0dGluZ19pbmRleF07CiAJc2FtcGxlcyA9IGNobmxfZ3JwLT5zYW1wbGVzOwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJaWYgKHBvd2VyID09IHNhbXBsZXNbaV0ucG93ZXIpIHsKQEAgLTIwOTEsMjIgKzIxMDUsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfaW5pdF9jaGFubmVsX2dyb3VwcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfaW5pdF9jaGFubmVsX2dyb3VwcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTMyIGk7CiAJczMyIHJhdGVfaW5kZXg7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpncm91cDsKIAotCUlXTF9ERUJVR19QT1dFUigiSW5pdGlhbGl6aW5nIGZhY3RvcnkgY2FsaWIgaW5mbyBmcm9tIEVFUFJPTVxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJJbml0aWFsaXppbmcgZmFjdG9yeSBjYWxpYiBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJV0xfTlVNX1RYX0NBTElCX0dST1VQUzsgaSsrKSB7CiAJCXM4ICpjbGlwX3B3cnM7CS8qIHRhYmxlIG9mIHBvd2VyIGxldmVscyBmb3IgZWFjaCByYXRlICovCiAJCXM4IHNhdHVyX3B3cjsJLyogc2F0dXJhdGlvbiBwb3dlciBmb3IgZWFjaCBjaG5sIGdyb3VwICovCi0JCWdyb3VwID0gJnByaXYtPmVlcHJvbS5ncm91cHNbaV07CisJCWdyb3VwID0gJmVlcHJvbS0+Z3JvdXBzW2ldOwogCiAJCS8qIHNhbml0eSBjaGVjayBvbiBmYWN0b3J5IHNhdHVyYXRpb24gcG93ZXIgdmFsdWUgKi8KIAkJaWYgKGdyb3VwLT5zYXR1cmF0aW9uX3Bvd2VyIDwgNDApIHsKLQkJCUlXTF9XQVJOSU5HKCJFcnJvcjogc2F0dXJhdGlvbiBwb3dlciBpcyAlZCwgIgorCQkJSVdMX1dBUk4ocHJpdiwgIkVycm9yOiBzYXR1cmF0aW9uIHBvd2VyIGlzICVkLCAiCiAJCQkJICAgICJsZXNzIHRoYW4gbWluaW11bSBleHBlY3RlZCA0MFxuIiwKIAkJCQkgICAgZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIpOwogCQkJcmV0dXJuOwpAQCAtMjEyMSw3ICsyMTM2LDcgQEAKIAkJICogICBwb3dlciBwZWFrcywgd2l0aG91dCB0b28gbXVjaCBkaXN0b3J0aW9uIChjbGlwcGluZykuCiAJCSAqLwogCQkvKiB3ZSdsbCBmaWxsIGluIHRoaXMgYXJyYXkgd2l0aCBoL3cgbWF4IHBvd2VyIGxldmVscyAqLwotCQljbGlwX3B3cnMgPSAoczggKikgcHJpdi0+Y2xpcF9ncm91cHNbaV0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IChzOCAqKSBwcml2LT5jbGlwMzlfZ3JvdXBzW2ldLmNsaXBfcG93ZXJzOwogCiAJCS8qIGRpdmlkZSBmYWN0b3J5IHNhdHVyYXRpb24gcG93ZXIgYnkgMiB0byBmaW5kIC0zZEIgbGV2ZWwgKi8KIAkJc2F0dXJfcHdyID0gKHM4KSAoZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIgPj4gMSk7CkBAIC0yMTcxLDEwICsyMTg2LDExIEBACiAgKgogICogVGhpcyBkb2VzICpub3QqIHdyaXRlIHZhbHVlcyB0byBOSUMsIGp1c3Qgc2V0cyB1cCBvdXIgaW50ZXJuYWwgdGFibGUuCiAgKi8KLWludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CiAJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvICpwd3JfaW5mbzsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJaW50IGRlbHRhX2luZGV4OwogCXU4IHJhdGVfaW5kZXg7CiAJdTggc2Nhbl90YmxfaW5kZXg7CkBAIC0yMjA0LDE1ICsyMjIwLDE1IEBACiAJCQlpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHByaXYsIGNoX2luZm8pOwogCiAJCS8qIEdldCB0aGlzIGNobmxncnAncyByYXRlLT5tYXgvY2xpcC1wb3dlcnMgdGFibGUgKi8KLQkJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcF9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOworCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwMzlfZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS5jbGlwX3Bvd2VyczsKIAogCQkvKiBjYWxjdWxhdGUgcG93ZXIgaW5kZXggKmFkanVzdG1lbnQqIHZhbHVlIGFjY29yZGluZyB0bwogCQkgKiAgZGlmZiBiZXR3ZWVuIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIGZhY3RvcnkgdGVtcGVyYXR1cmUgKi8KIAkJZGVsdGFfaW5kZXggPSBpd2wzOTQ1X2h3X3JlZ19hZGp1c3RfcG93ZXJfYnlfdGVtcCh0ZW1wZXJhdHVyZSwKLQkJCQlwcml2LT5lZXByb20uZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS4KKwkJCQllZXByb20tPmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCiAJCQkJdGVtcGVyYXR1cmUpOwogCi0JCUlXTF9ERUJVR19QT1dFUigiRGVsdGEgaW5kZXggZm9yIGNoYW5uZWwgJWQ6ICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiRGVsdGEgaW5kZXggZm9yIGNoYW5uZWwgJWQ6ICVkIFslZF1cbiIsCiAJCQkJY2hfaW5mby0+Y2hhbm5lbCwgZGVsdGFfaW5kZXgsIHRlbXBlcmF0dXJlICsKIAkJCQlJV0xfVEVNUF9DT05WRVJUKTsKIApAQCAtMjIzNSw3ICsyMjUxLDcgQEAKIAkJCQkJCQkgY2hfaW5mby0+Z3JvdXBfaW5kZXgsCiAJCQkJCQkJICZwb3dlcl9pZHgpOwogCQkJaWYgKHJjKSB7Ci0JCQkJSVdMX0VSUk9SKCJJbnZhbGlkIHBvd2VyIGluZGV4XG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIHBvd2VyIGluZGV4XG4iKTsKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCQlwd3JfaW5mby0+YmFzZV9wb3dlcl9pbmRleCA9ICh1OCkgcG93ZXJfaWR4OwpAQCAtMjI5NSw3NSArMjMxMSw5MCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX0NPTkZJRygwKSwgMCk7Ci0JcmMgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSF9SU1NSX1NUQVRVUywKLQkJCUZIX1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRSwgMTAwMCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9DT05GSUcoMCksIDApOworCXJjID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSDM5X1JTU1JfU1RBVFVTLAorCQkJRkgzOV9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUsIDEwMDApOwogCWlmIChyYyA8IDApCi0JCUlXTF9FUlJPUigiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKK2ludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKIAotCXN0cnVjdCBpd2wzOTQ1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0OworCXN0cnVjdCBpd2wzOTQ1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5zaGFyZWRfdmlydDsKIAogCXNoYXJlZF9kYXRhLT50eF9iYXNlX3B0clt0eHFfaWRdID0gY3B1X3RvX2xlMzIoKHUzMil0eHEtPnEuZG1hX2FkZHIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfQ0JDQ19DVFJMKHR4cV9pZCksIDApOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfQ0JDQ19CQVNFKHR4cV9pZCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X0NCQ0NfQ1RSTCh0eHFfaWQpLCAwKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9DQkNDX0JBU0UodHhxX2lkKSwgMCk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RDU1JfQ09ORklHKHR4cV9pZCksCi0JCUFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9IT1NUX0lGVEZEIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UQ1NSX0NPTkZJRyh0eHFfaWQpLAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGIHwKKwkJRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogZmFrZSByZWFkIHRvIGZsdXNoIGFsbCBwcmV2LiB3cml0ZXMgKi8KLQlpd2wzOTQ1X3JlYWQzMihwcml2LCBGSF9UU1NSX0NCQl9CQVNFKTsKKwlpd2xfcmVhZDMyKHByaXYsIEZIMzlfVFNTUl9DQkJfQkFTRSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCisvKgorICogSENNRCB1dGlscworICovCitzdGF0aWMgdTE2IGl3bDM5NDVfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCiB7Ci0Jc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQ7CisJc3dpdGNoIChjbWRfaWQpIHsKKwljYXNlIFJFUExZX1JYT046CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpOworCWNhc2UgUE9XRVJfVEFCTEVfQ01EOgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbGVuOworCX0KK30KIAotCXJldHVybiBsZTMyX3RvX2NwdShzaGFyZWRfZGF0YS0+cnhfcmVhZF9wdHJbMF0pOworc3RhdGljIHUxNiBpd2wzOTQ1X2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLCB1OCAqZGF0YSkKK3sKKwl1MTYgc2l6ZSA9ICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQpOworCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOworCXJldHVybiBzaXplOwogfQogCiAvKioKICAqIGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlIC0gSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgcmF0ZSBmYWxsYmFjayB0YWJsZQogICovCi1pbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjLCBpLCBpbmRleCwgcHJldl9pbmRleDsKIAlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHJhdGVfY21kID0gewpAQCAtMjM4NCw3ICsyNDE1LDcgQEAKIAogCXN3aXRjaCAocHJpdi0+YmFuZCkgewogCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJSVdMX0RFQlVHX1JBVEUoIlNlbGVjdCBBIG1vZGUgcmF0ZSBzY2FsZVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZWxlY3QgQSBtb2RlIHJhdGUgc2NhbGVcbiIpOwogCQkvKiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBDQ0sgcmF0ZXMgaXMgdXNlZCwKIAkJICogaGF2ZSBpdCBmYWxsIGJhY2sgdG8gdGhlIDZNIE9GRE0gcmF0ZSAqLwogCQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWF9UQUJMRTsKQEAgLTI0MDIsMTIgKzI0MzMsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCUlXTF9ERUJVR19SQVRFKCJTZWxlY3QgQi9HIG1vZGUgcmF0ZSBzY2FsZVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZWxlY3QgQi9HIG1vZGUgcmF0ZSBzY2FsZVxuIik7CiAJCS8qIElmIGFuIE9GRE0gcmF0ZSBpcyB1c2VkLCBoYXZlIGl0IGZhbGwgYmFjayB0byB0aGUKIAkJICogMU0gQ0NLIHJhdGVzICovCiAKIAkJaWYgKCEocHJpdi0+c3RhX3N1cHBfcmF0ZXMgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSAmJgotCQkgICAgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCSAgICBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCiAJCQlpbmRleCA9IElXTF9GSVJTVF9DQ0tfUkFURTsKIAkJCWZvciAoaSA9IElXTF9SQVRFXzZNX0lOREVYX1RBQkxFOwpAQCAtMjQyOCw0NyArMjQ1OSw1MSBAQAogCiAJLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGNvbnRyb2wgZnJhbWUgVHggKi8KIAlyYXRlX2NtZC50YWJsZV9pZCA9IDA7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAogCQkJICAgICAgJnJhdGVfY21kKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAogCS8qIFVwZGF0ZSB0aGUgcmF0ZSBzY2FsaW5nIGZvciBkYXRhIGZyYW1lIFR4ICovCiAJcmF0ZV9jbWQudGFibGVfaWQgPSAxOwotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAorCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCiAJCQkJJnJhdGVfY21kKTsKIH0KIAogLyogQ2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nIGRyaXZlciAqLwotaW50IGl3bDM5NDVfaHdfc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCW1lbXNldCgodm9pZCAqKSZwcml2LT5od19zZXR0aW5nLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8pKTsKKwltZW1zZXQoKHZvaWQgKikmcHJpdi0+aHdfcGFyYW1zLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9od19wYXJhbXMpKTsKIAotCXByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQgPQorCXByaXYtPnNoYXJlZF92aXJ0ID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKIAkJCQkgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCksCi0JCQkJICZwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzKTsKKwkJCQkgJnByaXYtPnNoYXJlZF9waHlzKTsKIAotCWlmICghcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCkgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKKwlpZiAoIXByaXYtPnNoYXJlZF92aXJ0KSB7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXByaXYtPmh3X3NldHRpbmcucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkU7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcGt0X3NpemUgPSAyMzQyOwotCXByaXYtPmh3X3NldHRpbmcudHhfY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9jbWQpOwotCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKLQlwcml2LT5od19zZXR0aW5nLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnMgPSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQ7Ci0JcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQgPSBJV0wzOTQ1X0JST0FEQ0FTVF9JRDsKKwkvKiBBc3NpZ24gbnVtYmVyIG9mIFVzYWJsZSBUWCBxdWV1ZXMgKi8KKwlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBURkRfUVVFVUVfTUFYOwogCi0JcHJpdi0+aHdfc2V0dGluZy50eF9hbnRfbnVtID0gMjsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdGZkKTsKKwlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkVfM0s7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9wa3Rfc2l6ZSA9IDIzNDI7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfc2l6ZSA9IFJYX1FVRVVFX1NJWkU7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9ucyA9IElXTDM5NDVfU1RBVElPTl9DT1VOVDsKKwlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMMzk0NV9CUk9BRENBU1RfSUQ7CisKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSDM5X1JTQ1NSX0NITkwwX1dQVFI7CisKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3Vuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lLCB1OCByYXRlKQogewogCXN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQ7CkBAIC0yNDc3LDcgKzI1MTIsNyBAQAogCXR4X2JlYWNvbl9jbWQgPSAoc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCAqKSZmcmFtZS0+dTsKIAltZW1zZXQodHhfYmVhY29uX2NtZCwgMCwgc2l6ZW9mKCp0eF9iZWFjb25fY21kKSk7CiAKLQl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXR4X2JlYWNvbl9jbWQtPnR4LnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUocHJpdiwKQEAgLTI1MDEsMzcgKzI1MzYsMjYyIEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kKSArIGZyYW1lX3NpemU7CiB9CiAKLXZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfVFhdID0gaXdsMzk0NV9yeF9yZXBseV90eDsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV8zOTQ1X1JYXSA9IGl3bDM5NDVfcnhfcmVwbHlfcng7CiB9CiAKLXZvaWQgaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnRoZXJtYWxfcGVyaW9kaWMsCiAJCQkgIGl3bDM5NDVfYmdfcmVnX3R4cG93ZXJfcGVyaW9kaWMpOwogfQogCi12b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3ZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+dGhlcm1hbF9wZXJpb2RpYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYmdfY2ZnID0geworLyogY2hlY2sgY29udGVudHMgb2Ygc3BlY2lhbCBib290c3RyYXAgdUNvZGUgU1JBTSAqLworc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9ic20oc3RydWN0IGl3bF9wcml2ICpwcml2KQorIHsKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCXUzMiByZWc7CisJdTMyIHZhbDsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKworCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLworCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKKwlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOworCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKKwkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKKwkJCUlXTF9FUlIocHJpdiwgIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKKwkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKKwkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAorCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKKwkJCQkgIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKKworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFRVBST00gcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ2xlYXIgdGhlIE9XTkVSX01TSywgdG8gZXN0YWJsaXNoIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSBydW5uaW5nIG9uCisgKiBlbWJlZGRlZCBjb250cm9sbGVyKSBhcyBFRVBST00gcmVhZGVyOyBlYWNoIHJlYWQgaXMgYSBzZXJpZXMgb2YgcHVsc2VzCisgKiB0by9mcm9tIHRoZSBFRVBST00gY2hpcCwgbm90IGEgc2luZ2xlIGV2ZW50LCBzbyBldmVuIHJlYWRzIGNvdWxkIGNvbmZsaWN0CisgKiBpZiB0aGV5IHdlcmVuJ3QgYXJiaXRyYXRlZCBieSBzb21lIG93bmVyc2hpcCBtZWNoYW5pc20uICBIZXJlLCB0aGUgZHJpdmVyCisgKiBzaW1wbHkgY2xhaW1zIG93bmVyc2hpcCwgd2hpY2ggc2hvdWxkIGJlIHNhZmUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogKGkuZS4gYmVmb3JlIGxvYWRpbmcgdUNvZGUhKS4KKyAqLworc3RhdGljIGludCBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9HUCwgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0spOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm47Cit9CisKKyAvKioKKyAgKiBpd2wzOTQ1X2xvYWRfYnNtIC0gTG9hZCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zCisgICoKKyAgKiBCU00gb3BlcmF0aW9uOgorICAqCisgICogVGhlIEJvb3RzdHJhcCBTdGF0ZSBNYWNoaW5lIChCU00pIHN0b3JlcyBhIHNob3J0IGJvb3RzdHJhcCB1Q29kZSBwcm9ncmFtCisgICogaW4gc3BlY2lhbCBTUkFNIHRoYXQgZG9lcyBub3QgcG93ZXIgZG93biBkdXJpbmcgUkZLSUxMLiAgV2hlbiBwb3dlcmluZyBiYWNrCisgICogdXAgYWZ0ZXIgcG93ZXItc2F2aW5nIHNsZWVwcyAob3IgZHVyaW5nIGluaXRpYWwgdUNvZGUgbG9hZCksIHRoZSBCU00gbG9hZHMKKyAgKiB0aGUgYm9vdHN0cmFwIHByb2dyYW0gaW50byB0aGUgb24tYm9hcmQgcHJvY2Vzc29yLCBhbmQgc3RhcnRzIGl0LgorICAqCisgICogVGhlIGJvb3RzdHJhcCBwcm9ncmFtIGxvYWRzICh2aWEgRE1BKSBpbnN0cnVjdGlvbnMgYW5kIGRhdGEgZm9yIGEgbmV3CisgICogcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMgaW5kaWNhdGVkIGJ5IHRoZSBob3N0IGRyaXZlciBpbiB0aGUKKyAgKiBCU01fRFJBTV8qIHJlZ2lzdGVycy4gIE9uY2UgdGhlIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCwgaXQgc3RhcnRzCisgICogYXV0b21hdGljYWxseS4KKyAgKgorICAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBwb2ludHMgdGhlIEJTTSB0byB0aGUKKyAgKiAiaW5pdGlhbGl6ZSIgdUNvZGUgaW1hZ2UuICBUaGlzIHVDb2RlIHNldHMgdXAgc29tZSBpbnRlcm5hbCBkYXRhLCB0aGVuCisgICogbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIHRoYXQgaXQgaXMgY29tcGxldGUuCisgICoKKyAgKiBUaGUgaG9zdCB0aGVuIHJlcGxhY2VzIHRoZSBCU01fRFJBTV8qIHBvaW50ZXIgdmFsdWVzIHRvIHBvaW50IHRvIHRoZQorICAqIG5vcm1hbCBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgYSBiYWNrdXAgdUNvZGUgZGF0YSBjYWNoZSBidWZmZXIKKyAgKiAoZmlsbGVkIGluaXRpYWxseSB3aXRoIHN0YXJ0aW5nIGRhdGEgdmFsdWVzIGZvciB0aGUgb24tYm9hcmQgcHJvY2Vzc29yKSwKKyAgKiB0aGVuIHRyaWdnZXJzIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gbG9hZCBhbmQgbGF1bmNoIHRoZSBydW50aW1lIHVDb2RlLAorICAqIHdoaWNoIGJlZ2lucyBub3JtYWwgb3BlcmF0aW9uLgorICAqCisgICogV2hlbiBkb2luZyBhIHBvd2VyLXNhdmUgc2h1dGRvd24sIHJ1bnRpbWUgdUNvZGUgc2F2ZXMgZGF0YSBTUkFNIGludG8KKyAgKiB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW4gRFJBTSBiZWZvcmUgU1JBTSBpcyBwb3dlcmVkIGRvd24uCisgICoKKyAgKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAsIHRoZSBCU00gbG9hZHMgdGhlIGJvb3RzdHJhcCBwcm9ncmFtLiAgVGhpcyByZWxvYWRzCisgICogdGhlIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW50byBTUkFNLAorICAqIGFuZCByZS1sYXVuY2hlcyB0aGUgcnVudGltZSB1Q29kZSBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLgorICAqLworc3RhdGljIGludCBpd2wzOTQ1X2xvYWRfYnNtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCWRtYV9hZGRyX3QgcGluc3Q7CisJZG1hX2FkZHJfdCBwZGF0YTsKKwl1MzIgaW5zdF9sZW47CisJdTMyIGRhdGFfbGVuOworCWludCByYzsKKwlpbnQgaTsKKwl1MzIgZG9uZTsKKwl1MzIgcmVnX29mZnNldDsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCZWdpbiBsb2FkIGJzbVxuIik7CisKKwkvKiBtYWtlIHN1cmUgYm9vdHN0cmFwIHByb2dyYW0gaXMgbm8gbGFyZ2VyIHRoYW4gQlNNJ3MgU1JBTSBzaXplICovCisJaWYgKGxlbiA+IElXTDM5X01BWF9CU01fU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIHRoZSAiSW5pdGlhbGl6ZSIgdUNvZGUKKwkqICAgaW4gaG9zdCBEUkFNIC4uLiBob3N0IERSQU0gcGh5c2ljYWwgYWRkcmVzcyBiaXRzIDMxOjAgZm9yIDM5NDUuCisJKiBOT1RFOiAgaXdsMzk0NV9pbml0aWFsaXplX2FsaXZlX3N0YXJ0KCkgd2lsbCByZXBsYWNlIHRoZXNlIHZhbHVlcywKKwkqICAgICAgICBhZnRlciB0aGUgImluaXRpYWxpemUiIHVDb2RlIGhhcyBydW4sIHRvIHBvaW50IHRvCisJKiAgICAgICAgcnVudGltZS9wcm90b2NvbCBpbnN0cnVjdGlvbnMgYW5kIGJhY2t1cCBkYXRhIGNhY2hlLiAqLworCXBpbnN0ID0gcHJpdi0+dWNvZGVfaW5pdC5wX2FkZHI7CisJcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyOworCWluc3RfbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CisJZGF0YV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOworCisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHLCBkYXRhX2xlbik7CisKKwkvKiBGaWxsIEJTTSBtZW1vcnkgd2l0aCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zICovCisJZm9yIChyZWdfb2Zmc2V0ID0gQlNNX1NSQU1fTE9XRVJfQk9VTkQ7CisJICAgICByZWdfb2Zmc2V0IDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWdfb2Zmc2V0ICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKQorCQlfaXdsX3dyaXRlX3BycGgocHJpdiwgcmVnX29mZnNldCwKKwkJCQkJICBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKKworCXJjID0gaXdsMzk0NV92ZXJpZnlfYnNtKHByaXYpOworCWlmIChyYykgeworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fU1JDX1JFRywgMHgwKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX0RTVF9SRUcsCisJCQkJIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKKworCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKKwkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCisJCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpOworCisJLyogV2FpdCBmb3IgbG9hZCBvZiBib290c3RyYXAgdUNvZGUgdG8gZmluaXNoICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWRvbmUgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRyk7CisJCWlmICghKGRvbmUgJiBCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoaSA8IDEwMCkKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJTTSB3cml0ZSBjb21wbGV0ZSwgcG9sbCAlZCBpdGVyYXRpb25zXG4iLCBpKTsKKwllbHNlIHsKKwkJSVdMX0VSUihwcml2LCAiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRW5hYmxlIGZ1dHVyZSBib290IGxvYWRzIHdoZW5ldmVyIHBvd2VyIG1hbmFnZW1lbnQgdW5pdCB0cmlnZ2VycyBpdAorCSAqICAgKGUuZy4gd2hlbiBwb3dlcmluZyBiYWNrIHVwIGFmdGVyIHBvd2VyLXNhdmUgc2h1dGRvd24pICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAorCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUX0VOKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wzOTQ1X2xpYiA9IHsKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQsCisJLnR4cV9mcmVlX3RmZCA9IGl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdCwKKwkubG9hZF91Y29kZSA9IGl3bDM5NDVfbG9hZF9ic20sCisJLmFwbV9vcHMgPSB7CisJCS5pbml0ID0gaXdsMzk0NV9hcG1faW5pdCwKKwkJLnJlc2V0ID0gaXdsMzk0NV9hcG1fcmVzZXQsCisJCS5zdG9wID0gaXdsMzk0NV9hcG1fc3RvcCwKKwkJLmNvbmZpZyA9IGl3bDM5NDVfbmljX2NvbmZpZywKKwkJLnNldF9wd3Jfc3JjID0gaXdsMzk0NV9zZXRfcHdyX3NyYywKKwl9LAorCS5lZXByb21fb3BzID0geworCQkucmVndWxhdG9yeV9iYW5kcyA9IHsKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMV9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfM19DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNF9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFULAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQsCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2wzOTQ1X2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLnF1ZXJ5X2FkZHIgPSBpd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyLAorCX0sCisJLnNlbmRfdHhfcG93ZXIJPSBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIsCisJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2wzOTQ1X2hjbWRfdXRpbHMgPSB7CisJLmdldF9oY21kX3NpemUgPSBpd2wzOTQ1X2dldF9oY21kX3NpemUsCisJLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsMzk0NV9idWlsZF9hZGRzdGFfaGNtZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2wzOTQ1X29wcyA9IHsKKwkubGliID0gJml3bDM5NDVfbGliLAorCS51dGlscyA9ICZpd2wzOTQ1X2hjbWRfdXRpbHMsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9jZmcgaXdsMzk0NV9iZ19jZmcgPSB7CiAJLm5hbWUgPSAiMzk0NUJHIiwKIAkuZndfbmFtZV9wcmUgPSBJV0wzOTQ1X0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDM5NDVfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDM5NDVfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9HLAorCS5lZXByb21fc2l6ZSA9IElXTDM5NDVfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCisJLm9wcyA9ICZpd2wzOTQ1X29wcywKKwkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYWJnX2NmZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CiAJLm5hbWUgPSAiMzk0NUFCRyIsCiAJLmZ3X25hbWVfcHJlID0gSVdMMzk0NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0wzOTQ1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0wzOTQ1X1VDT0RFX0FQSV9NSU4sCiAJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLmVlcHJvbV9zaXplID0gSVdMMzk0NV9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTiwKKwkub3BzID0gJml3bDM5NDVfb3BzLAorCS5tb2RfcGFyYW1zID0gJml3bDM5NDVfbW9kX3BhcmFtcwogfTsKIAogc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCmluZGV4IDJjMGRkYzUuLmFiN2FhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDMsMTEgKzQzLDEzIEBACiAvKiBIYXJkd2FyZSBzcGVjaWZpYyBmaWxlIGRlZmluZXMgdGhlIFBDSSBJRHMgdGFibGUgZm9yIHRoYXQgaGFyZHdhcmUgbW9kdWxlICovCiBleHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdOwogCi0jZGVmaW5lIERSVl9OQU1FCSJpd2wzOTQ1IgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1maC5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWh3LmgiCi0jaW5jbHVkZSAiaXdsLTM5NDUtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtcG93ZXIuaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCkBAIC03NCw4ICs3Niw3IEBACiAjZGVmaW5lIElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEUgKC0xMjcpCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzIGFjY2Vzc2libGUgZnJvbSBpd2wtKi5jICovCi1leHRlcm4gaW50IGl3bDM5NDVfcGFyYW1faHdjcnlwdG87Ci1leHRlcm4gaW50IGl3bDM5NDVfcGFyYW1fcXVldWVzX251bTsKK2V4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsMzk0NV9tb2RfcGFyYW1zOwogCiBzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiB7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CkBAIC05NSw3ICs5Niw2IEBACiAgKiBlbHNlIFJUUyBmb3IgZGF0YS9tYW5hZ2VtZW50IGZyYW1lcyB3aGVyZSBNUERVIGlzIGxhcmdlcgogICogICB0aGFuIFJUUyB2YWx1ZS4KICAqLwotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkUgICAgICAgICAgIDMwMDBVCiAjZGVmaW5lIERFRkFVTFRfUlRTX1RIUkVTSE9MRCAgICAgMjM0N1UKICNkZWZpbmUgTUlOX1JUU19USFJFU0hPTEQgICAgICAgICAwVQogI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRCAgICAgICAgIDIzNDdVCkBAIC0xMDUsMTM2ICsxMDUsNyBAQAogI2RlZmluZQlERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUIDdVCiAjZGVmaW5lCURFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCAgNFUKIAotc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciB7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLS8qCi0gKiBHZW5lcmljIHF1ZXVlIHN0cnVjdHVyZQotICoKLSAqIENvbnRhaW5zIGNvbW1vbiBkYXRhIGZvciBSeCBhbmQgVHggcXVldWVzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3F1ZXVlIHsKLQlpbnQgbl9iZDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBCRHMgaW4gdGhpcyBxdWV1ZSAqLwotCWludCB3cml0ZV9wdHI7ICAgICAgIC8qIDEtc3QgZW1wdHkgZW50cnkgKGluZGV4KSBob3N0X3cqLwotCWludCByZWFkX3B0cjsgICAgICAgICAvKiBsYXN0IHVzZWQgZW50cnkgKGluZGV4KSBob3N0X3IqLwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7ICAgLyogcGh5c2ljYWwgYWRkciBmb3IgQkQncyAqLwotCWludCBuX3dpbmRvdzsJICAgICAgIC8qIHNhZmUgcXVldWUgd2luZG93ICovCi0JdTMyIGlkOwotCWludCBsb3dfbWFyazsJICAgICAgIC8qIGxvdyB3YXRlcm1hcmssIHJlc3VtZSBxdWV1ZSBpZiBmcmVlCi0JCQkJKiBzcGFjZSBtb3JlIHRoYW4gdGhpcyAqLwotCWludCBoaWdoX21hcms7ICAgICAgICAgLyogaGlnaCB3YXRlcm1hcmssIHN0b3AgcXVldWUgaWYgZnJlZQotCQkJCSogc3BhY2UgbGVzcyB0aGFuIHRoaXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1pbnQgaXdsMzk0NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSk7Ci1pbnQgaXdsMzk0NV94Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSk7Ci0KLSNkZWZpbmUgTUFYX05VTV9PRl9UQlMgICAgICAgICAgKDIwKQotCi0vKiBPbmUgZm9yIGVhY2ggVEZEICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9pbmZvIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiW01BWF9OVU1fT0ZfVEJTXTsKLX07Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgLSBUeCBRdWV1ZSBmb3IgRE1BCi0gKiBAcTogZ2VuZXJpYyBSeC9UeCBxdWV1ZSBkZXNjcmlwdG9yCi0gKiBAYmQ6IGJhc2Ugb2YgY2lyY3VsYXIgYnVmZmVyIG9mIFRGRHMKLSAqIEBjbWQ6IGFycmF5IG9mIGNvbW1hbmQvVHggYnVmZmVycwotICogQGRtYV9hZGRyX2NtZDogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQvdHggYnVmZmVyIGFycmF5Ci0gKiBAdHhiOiBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhCi0gKiBAbmVlZF91cGRhdGU6IGluZGljYXRlcyBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4Ci0gKgotICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKLSAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSB7Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgcTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kOwotCWRtYV9hZGRyX3QgZG1hX2FkZHJfY21kOwotCXN0cnVjdCBpd2wzOTQ1X3R4X2luZm8gKnR4YjsKLQlpbnQgbmVlZF91cGRhdGU7Ci0JaW50IGFjdGl2ZTsKLX07Ci0KLSNkZWZpbmUgSVdMX05VTV9TQ0FOX1JBVEVTICAgICAgICAgKDIpCi0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdkX2luZm8gewotCXU4IHR5cGU7Ci0JczggbWF4X3Bvd2VyOwotfTsKLQotc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2hfaW5mbyB7Ci0JczY0IGxhc3RfcmFkYXJfdGltZTsKLX07Ci0KLS8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgotICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKLSAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCi0gKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50Ci0gKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCi0gKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCi0JczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCi0JczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLwotfTsKLQotLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKLSAqIGNoYW5uZWwuICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KLX07Ci0KLS8qCi0gKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQotICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudAotICogICAgIHdpdGggb25lIGFub3RoZXIhCi0gKi8KLSNkZWZpbmUgSVdMNDk2NV9NQVhfUkFURSAoMzMpCi0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2RfaW5mbyB0Z2Q7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2hfaW5mbyB0Z2g7Ci0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGZhdF9lZXByb207CS8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0IGZvcgotCQkJCQkJICogRkFUIGNoYW5uZWwgKi8KLQotCXU4IGNoYW5uZWw7CSAgLyogY2hhbm5lbCBudW1iZXIgKi8KLQl1OCBmbGFnczsJICAvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KLQlzOCBtYXhfcG93ZXJfYXZnOyAvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBub3JtYWwgVHgsIGFueSByYXRlICovCi0JczggY3Vycl90eHBvdzsJICAvKiAoZEJtKSByZWd1bGF0b3J5L3NwZWN0cnVtL3VzZXIgKG5vdCBoL3cpICovCi0JczggbWluX3Bvd2VyOwkgIC8qIGFsd2F5cyAwICovCi0Jczggc2Nhbl9wb3dlcjsJICAvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBkaXJlY3Qgc2NhbnMsIGFueSByYXRlICovCi0KLQl1OCBncm91cF9pbmRleDsJICAvKiAwLTQsIG1hcHMgY2hhbm5lbCB0byBncm91cDEvMi8zLzQvNSAqLwotCXU4IGJhbmRfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gYmFuZDEvMi8zLzQvNSAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KLQkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKLQkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKLQotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoIHNjYW4gcmF0ZSwgZm9yIGRpcmVjdGVkIHNjYW5zLiAqLwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyBzY2FuX3B3cl9pbmZvW0lXTF9OVU1fU0NBTl9SQVRFU107Ci19OwotCi1zdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIHsKLQkvKiBtYXhpbXVtIHBvd2VyIGxldmVsIHRvIHByZXZlbnQgY2xpcHBpbmcgZm9yIGVhY2ggcmF0ZSwgZGVyaXZlZCBieQotCSAqICAgdXMgZnJvbSB0aGlzIGJhbmQncyBzYXR1cmF0aW9uIHBvd2VyIGluIEVFUFJPTSAqLwotCWNvbnN0IHM4IGNsaXBfcG93ZXJzW0lXTF9NQVhfUkFURVNdOwotfTsKLQotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWFnbi1ycy5oIgogCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMAkwCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMQkxCkBAIC0yNDcsMzMgKzExOCw2IEBACiAvKiBNaW5pbXVtIG51bWJlciBvZiBxdWV1ZXMuIE1BWF9OVU0gaXMgZGVmaW5lZCBpbiBodyBzcGVjaWZpYyBmaWxlcyAqLwogI2RlZmluZSBJV0xfTUlOX05VTV9RVUVVRVMJNAogCi0vKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHN0cnVjdHVyZXMgKi8KLQotc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0JdTggbm9fZHRpbTsKLX07Ci0jZGVmaW5lIElXTF9QT1dFUl9SQU5HRV8wICAoMCkKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzEgICgxKQotCi0jZGVmaW5lIElXTF9QT1dFUl9NT0RFX0NBTQkweDAwCS8qIENvbnRpbnVvdXNseSBBd2FyZSBNb2RlLCBhbHdheXMgb24gKi8KLSNkZWZpbmUgSVdMX1BPV0VSX0lOREVYXzMJMHgwMwotI2RlZmluZSBJV0xfUE9XRVJfSU5ERVhfNQkweDA1Ci0jZGVmaW5lIElXTF9QT1dFUl9BQwkJMHgwNgotI2RlZmluZSBJV0xfUE9XRVJfQkFUVEVSWQkweDA3Ci0jZGVmaW5lIElXTF9QT1dFUl9MSU1JVAkJMHgwNwotI2RlZmluZSBJV0xfUE9XRVJfTUFTSwkJMHgwRgotI2RlZmluZSBJV0xfUE9XRVJfRU5BQkxFRAkweDEwCi0jZGVmaW5lIElXTF9QT1dFUl9MRVZFTCh4KQkoKHgpICYgSVdMX1BPV0VSX01BU0spCi0KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX21nciB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMFtJV0xfUE9XRVJfQUNdOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMVtJV0xfUE9XRVJfQUNdOwotCXU4IGFjdGl2ZV9pbmRleDsKLQl1MzIgZHRpbV92YWw7Ci19OwotCiAjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTiAgICAgICAgICAgICAgMjMwNAogI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOICAgICAgICAgICAgIDMwCiAjZGVmaW5lIElFRUU4MDIxMV9ITEVOICAgICAgICAgICAgICAgICAgKElFRUU4MDIxMV80QUREUl9MRU4pCkBAIC0yODksODEgKzEzMywxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLSNkZWZpbmUgU0VRX1RPX1FVRVVFKHgpICAoKHggPj4gOCkgJiAweGJmKQotI2RlZmluZSBRVUVVRV9UT19TRVEoeCkgICgoeCAmIDB4YmYpIDw8IDgpCi0jZGVmaW5lIFNFUV9UT19JTkRFWCh4KSAoKHU4KSh4ICYgMHhmZikpCi0jZGVmaW5lIElOREVYX1RPX1NFUSh4KSAoKHU4KSh4ICYgMHhmZikpCi0jZGVmaW5lIFNFUV9IVUdFX0ZSQU1FICAoMHg0MDAwKQotI2RlZmluZSBTRVFfUlhfRlJBTUUgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCiAjZGVmaW5lIFNFUV9UT19TTihzZXEpICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCiAjZGVmaW5lIFNOX1RPX1NFUShzc24pICgoKHNzbikgPDwgNCkgJiBJRUVFODAyMTFfU0NUTF9TRVEpCiAjZGVmaW5lIE1BWF9TTiAoKElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKIAotZW51bSB7Ci0JLyogQ01EX1NJWkVfTk9STUFMID0gMCwgKi8KLQlDTURfU0laRV9IVUdFID0gKDEgPDwgMCksCi0JLyogQ01EX1NZTkMgPSAwLCAqLwotCUNNRF9BU1lOQyA9ICgxIDw8IDEpLAotCS8qIENNRF9OT19TS0IgPSAwLCAqLwotCUNNRF9XQU5UX1NLQiA9ICgxIDw8IDIpLAotfTsKLQotc3RydWN0IGl3bDM5NDVfY21kOwotc3RydWN0IGl3bDM5NDVfcHJpdjsKLQotc3RydWN0IGl3bDM5NDVfY21kX21ldGEgewotCXN0cnVjdCBpd2wzOTQ1X2NtZF9tZXRhICpzb3VyY2U7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdTsKLQotCS8qIFRoZSBDTURfU0laRV9IVUdFIGZsYWcgYml0IGluZGljYXRlcyB0aGF0IHRoZSBjb21tYW5kCi0JICogc3RydWN0dXJlIGlzIHN0b3JlZCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFyZWQgcXVldWUgbWVtb3J5LiAqLwotCXUzMiBmbGFnczsKLQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfY21kCi0gKgotICogRm9yIGFsbG9jYXRpb24gb2YgdGhlIGNvbW1hbmQgYW5kIHR4IHF1ZXVlcywgdGhpcyBlc3RhYmxpc2hlcyB0aGUgb3ZlcmFsbAotICogc2l6ZSBvZiB0aGUgbGFyZ2VzdCBjb21tYW5kIHdlIHNlbmQgdG8gdUNvZGUsIGV4Y2VwdCBmb3IgYSBzY2FuIGNvbW1hbmQKLSAqICh3aGljaCBpcyByZWxhdGl2ZWx5IGh1Z2U7IHNwYWNlIGlzIGFsbG9jYXRlZCBzZXBhcmF0ZWx5KS4KLSAqLwotc3RydWN0IGl3bDM5NDVfY21kIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSBtZXRhOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBhZGRzdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkOwotCQl1MzIgZmxhZ3M7Ci0JCXU4IHZhbDg7Ci0JCXUxNiB2YWwxNjsKLQkJdTMyIHZhbDMyOwotCQlzdHJ1Y3QgaXdsMzk0NV9idF9jbWQgYnQ7Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgcnhvbl90aW1lOwotCQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBwb3dlcnRhYmxlOwotCQlzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgcW9zcGFyYW07Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCB0eDsKLQkJc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB0eF9iZWFjb247Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHJ4b25fYXNzb2M7Ci0JCXU4ICppbmRpcmVjdDsKLQkJdTggcGF5bG9hZFszNjBdOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNtZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCB7Ci0JdTggaWQ7Ci0JdTE2IGxlbjsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSBtZXRhOwotCWNvbnN0IHZvaWQgKmRhdGE7Ci19OwotCi0jZGVmaW5lIFRGRF9NQVhfUEFZTE9BRF9TSVpFIChzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAtIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSkpCi0KIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwogICovCkBAIC0zNzQsMzMgKzE0Nyw2IEBACiAjZGVmaW5lIFNVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTICA0CiAjZGVmaW5lIFNVUF9SQVRFXzExR19NQVhfTlVNX0NIQU5ORUxTICAxMgogCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIC0gUnggcXVldWUKLSAqIEBwcm9jZXNzZWQ6IEludGVybmFsIGluZGV4IHRvIGxhc3QgaGFuZGxlZCBSeCBwYWNrZXQKLSAqIEByZWFkOiBTaGFyZWQgaW5kZXggdG8gbmV3ZXN0IGF2YWlsYWJsZSBSeCBidWZmZXIKLSAqIEB3cml0ZTogU2hhcmVkIGluZGV4IHRvIG9sZGVzdCB3cml0dGVuIFJ4IHBhY2tldAotICogQGZyZWVfY291bnQ6IE51bWJlciBvZiBwcmUtYWxsb2NhdGVkIGJ1ZmZlcnMgaW4gcnhfZnJlZQotICogQHJ4X2ZyZWU6IGxpc3Qgb2YgZnJlZSBTS0JzIGZvciB1c2UKLSAqIEByeF91c2VkOiBMaXN0IG9mIFJ4IGJ1ZmZlcnMgd2l0aCBubyBTS0IKLSAqIEBuZWVkX3VwZGF0ZTogZmxhZyB0byBpbmRpY2F0ZSB3ZSBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4Ci0gKgotICogTk9URTogIHJ4X2ZyZWUgYW5kIHJ4X3VzZWQgYXJlIHVzZWQgYXMgYSBGSUZPIGZvciBpd2wzOTQ1X3J4X21lbV9idWZmZXJzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIHsKLQlfX2xlMzIgKmJkOwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciBwb29sW1JYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlNdOwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnF1ZXVlW1JYX1FVRVVFX1NJWkVdOwotCXUzMiBwcm9jZXNzZWQ7Ci0JdTMyIHJlYWQ7Ci0JdTMyIHdyaXRlOwotCXUzMiBmcmVlX2NvdW50OwotCXN0cnVjdCBsaXN0X2hlYWQgcnhfZnJlZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3VzZWQ7Ci0JaW50IG5lZWRfdXBkYXRlOwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KICNkZWZpbmUgSVdMX1NVUFBPUlRFRF9SQVRFU19JRV9MRU4gICAgICAgICA4CiAKICNkZWZpbmUgU0NBTl9JTlRFUlZBTCAxMDAKQEAgLTQzMCw4NyArMTc2LDkgQEAKICNkZWZpbmUgSVdMX0lOVkFMSURfUkFURSAgICAgMHhGRgogI2RlZmluZSBJV0xfSU5WQUxJRF9WQUxVRSAgICAtMQogCi1zdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB7Ci0JdTE2IHNlcV9udW1iZXI7Ci19OwotCi1zdHJ1Y3QgaXdsMzk0NV9od19rZXkgewotCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwotCWludCBrZXlsZW47Ci0JdTgga2V5WzMyXTsKLX07Ci0KLXVuaW9uIGl3bDM5NDVfaHRfcmF0ZV9zdXBwIHsKLQl1MTYgcmF0ZXM7Ci0Jc3RydWN0IHsKLQkJdTggc2lzb19yYXRlOwotCQl1OCBtaW1vX3JhdGU7Ci0JfTsKLX07Ci0KLXVuaW9uIGl3bDM5NDVfcW9zX2NhcGFiaXR5IHsKLQlzdHJ1Y3QgewotCQl1OCBlZGNhX2NvdW50OjQ7CS8qIGJpdCAwLTMgKi8KLQkJdTggcV9hY2s6MTsJCS8qIGJpdCA0ICovCi0JCXU4IHF1ZXVlX3JlcXVlc3Q6MTsJLyogYml0IDUgKi8KLQkJdTggdHhvcF9yZXF1ZXN0OjE7CS8qIGJpdCA2ICovCi0JCXU4IHJlc2VydmVkOjE7CQkvKiBiaXQgNyAqLwotCX0gcV9BUDsKLQlzdHJ1Y3QgewotCQl1OCBhY3ZvX0FQU0Q6MTsJCS8qIGJpdCAwICovCi0JCXU4IGFjdmlfQVBTRDoxOwkJLyogYml0IDEgKi8KLQkJdTggYWNfYmtfQVBTRDoxOwkvKiBiaXQgMiAqLwotCQl1OCBhY19iZV9BUFNEOjE7CS8qIGJpdCAzICovCi0JCXU4IHFfYWNrOjE7CQkvKiBiaXQgNCAqLwotCQl1OCBtYXhfbGVuOjI7CQkvKiBiaXQgNS02ICovCi0JCXU4IG1vcmVfZGF0YV9hY2s6MTsJLyogYml0IDcgKi8KLQl9IHFfU1RBOwotCXU4IHZhbDsKLX07Ci0KLS8qIFFvUyBzdHJ1Y3R1cmVzICovCi1zdHJ1Y3QgaXdsMzk0NV9xb3NfaW5mbyB7Ci0JaW50IHFvc19hY3RpdmU7Ci0JdW5pb24gaXdsMzk0NV9xb3NfY2FwYWJpdHkgcW9zX2NhcDsKLQlzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgZGVmX3Fvc19wYXJtOwotfTsKLQogI2RlZmluZSBTVEFfUFNfU1RBVFVTX1dBS0UgICAgICAgICAgICAgMAogI2RlZmluZSBTVEFfUFNfU1RBVFVTX1NMRUVQICAgICAgICAgICAgMQogCi1zdHJ1Y3QgaXdsMzk0NV9zdGF0aW9uX2VudHJ5IHsKLQlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kIHN0YTsKLQlzdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTggcmF0ZTsKLQkJCXU4IGZsYWdzOwotCQl9IHM7Ci0JCXUxNiByYXRlX25fZmxhZ3M7Ci0JfSBjdXJyZW50X3JhdGU7Ci0JdTggdXNlZDsKLQl1OCBwc19zdGF0dXM7Ci0Jc3RydWN0IGl3bDM5NDVfaHdfa2V5IGtleWluZm87Ci19OwotCi0vKiBvbmUgZm9yIGVhY2ggdUNvZGUgaW1hZ2UgKGluc3QvZGF0YSwgYm9vdC9pbml0L3J1bnRpbWUpICovCi1zdHJ1Y3QgZndfZGVzYyB7Ci0Jdm9pZCAqdl9hZGRyOwkJLyogYWNjZXNzIGJ5IGRyaXZlciAqLwotCWRtYV9hZGRyX3QgcF9hZGRyOwkvKiBhY2Nlc3MgYnkgY2FyZCdzIGJ1c21hc3RlciBETUEgKi8KLQl1MzIgbGVuOwkJLyogYnl0ZXMgKi8KLX07Ci0KLS8qIHVDb2RlIGZpbGUgbGF5b3V0ICovCi1zdHJ1Y3QgaXdsMzk0NV91Y29kZSB7Ci0JX19sZTMyIHZlcjsJCS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KLQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLwotCV9fbGUzMiBpbml0X3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCV9fbGUzMiBib290X3NpemU7CS8qIGJ5dGVzIG9mIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBkYXRhWzBdOwkJLyogZGF0YSBpbiBzYW1lIG9yZGVyIGFzICJzaXplIiBlbGVtZW50cyAqLwotfTsKLQogc3RydWN0IGl3bDM5NDVfaWJzc19zZXEgewogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTE2IHNlcV9udW07CkBAIC01MTksMzQgKzE4Nyw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbwotICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCi0gKiBAdHhfY21kX2xlbjogU2l6ZSBvZiBUeCBjb21tYW5kIChidXQgbm90IGluY2x1ZGluZyBmcmFtZSBpdHNlbGYpCi0gKiBAdHhfYW50X251bTogTnVtYmVyIG9mIFRYIGFudGVubmFzCi0gKiBAbWF4X3J4cV9zaXplOiBNYXggIyBSeCBmcmFtZXMgaW4gUnggcXVldWUgKG11c3QgYmUgcG93ZXItb2YtMikKLSAqIEByeF9idWZfc2l6ZToKLSAqIEBtYXhfcGt0X3NpemU6Ci0gKiBAbWF4X3J4cV9sb2c6IExvZy1iYXNlLTIgb2YgbWF4X3J4cV9zaXplCi0gKiBAbWF4X3N0YXRpb25zOgotICogQGJjYXN0X3N0YV9pZDoKLSAqIEBzaGFyZWRfdmlydDogUG9pbnRlciB0byBkcml2ZXIvdUNvZGUgc2hhcmVkIFR4IEJ5dGUgQ291bnRzIGFuZCBSeCBzdGF0dXMKLSAqIEBzaGFyZWRfcGh5czogUGh5c2ljYWwgUG9pbnRlciB0byBUeCBCeXRlIENvdW50cyBhbmQgUnggc3RhdHVzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2RyaXZlcl9od19pbmZvIHsKLQl1MTYgbWF4X3R4cV9udW07Ci0JdTE2IHR4X2NtZF9sZW47Ci0JdTE2IHR4X2FudF9udW07Ci0JdTE2IG1heF9yeHFfc2l6ZTsKLQl1MzIgcnhfYnVmX3NpemU7Ci0JdTMyIG1heF9wa3Rfc2l6ZTsKLQl1MTYgbWF4X3J4cV9sb2c7Ci0JdTggIG1heF9zdGF0aW9uczsKLQl1OCAgYmNhc3Rfc3RhX2lkOwotCXZvaWQgKnNoYXJlZF92aXJ0OwotCWRtYV9hZGRyX3Qgc2hhcmVkX3BoeXM7Ci19OwotCiAjZGVmaW5lIElXTF9SWF9IRFIoeCkgKChzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKikoXAogCQkgICAgICAgeC0+dS5yeF9mcmFtZS5zdGF0cy5wYXlsb2FkICsgXAogCQkgICAgICAgeC0+dS5yeF9mcmFtZS5zdGF0cy5waHlfY291bnQpKQpAQCAtNTY0LDQwICsyMDQsMzAgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kOwotZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKTsKLWV4dGVybiB1OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCwKK2V4dGVybiB1OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkLAogCQkJICBpbnQgaXNfYXAsIHU4IGZsYWdzKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2VlcHJvbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bDM5NDVfY2FsY19kYl9mcm9tX3JhdGlvKGludCBzaWdfcmF0aW8pOwogZXh0ZXJuIGludCBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwoaW50IHJzc2lfZGJtLCBpbnQgbm9pc2VfZGJtKTsKLWV4dGVybiBpbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEsIGludCBjb3VudCwgdTMyIGlkKTsKK2V4dGVybiBpbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLCBpbnQgY291bnQsIHUzMiBpZCk7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggaWQsIHUxNiBsZW4sCitleHRlcm4gdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGlkLCB1MTYgbGVuLAogCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixpbnQgbGVmdCk7Ci1leHRlcm4gaW50IGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICB1MzIgZGVjcnlwdF9yZXMsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKTsKLWV4dGVybiBjb25zdCB1OCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyW0VUSF9BTEVOXTsKIAogLyoKICAqIEN1cnJlbnRseSB1c2VkIGJ5IGl3bC0zOTQ1LXJzLi4uIGxvb2sgYXQgcmVzdHJ1Y3R1cmluZyBzbyB0aGF0IGl0IGRvZXNuJ3QKICAqIGNhbGwgdGhpcy4uLiB0b2RvLi4uIGZpeCB0aGF0LgogKi8KLWV4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgc3RhX2lkLAorZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKIAkJCSAgIHUxNiB0eF9yYXRlLCB1OCBmbGFncyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYxNiwzNiArMjQ2LDM3IEBACiAgKiBpd2wzOTQ1X21hY18gICAgIDwtLSBtYWM4MDIxMSBjYWxsYmFjawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfc3RvcF9tYXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdm9pZCAqdGZkLAotCQkJCQlkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3J4cV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCQkgICAgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLAorCQkJCQkgICAgdTggcmVzZXQsIHU4IHBhZCk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3J4X3JlYWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKK3ZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgICAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3JlZ19zZXRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzOCBwb3dlcik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfZGlzYWJsZV9ldmVudHMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3JlZ19zZW5kX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCBwb3dlcik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKgogICogaXdsMzk0NV9od19maW5kX3N0YXRpb24gLSBGaW5kIHN0YXRpb24gaWQgZm9yIGEgZ2l2ZW4gQlNTSUQKQEAgLTY1NSwzMDIgKzI4NiwyNiBAQAogICogbm90IHlldCBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGNvbW1vbiBsYXllciBmb3IgbWFuYWdpbmcgdGhlCiAgKiBzdGF0aW9uIHRhYmxlcy4KICAqLwotZXh0ZXJuIHU4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCk7CitleHRlcm4gdTggaXdsMzk0NV9od19maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwogCi1leHRlcm4gaW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOwogCiAvKgogICogRm9yd2FyZCBkZWNsYXJlIGl3bC0zOTQ1LmMgZnVuY3Rpb25zIGZvciBpd2wtYmFzZS5jCiAgKi8KLWV4dGVybiBfX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKK2V4dGVybiBfX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdTggaXdsMzk0NV9zeW5jX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCSB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbygKKwljb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKK2V4dGVybiBpbnQgaXdsMzk0NV9yc19uZXh0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgcmF0ZSk7CiAKLWVudW0gewotCU1FQVNVUkVNRU5UX1JFQURZID0gKDEgPDwgMCksCi0JTUVBU1VSRU1FTlRfQUNUSVZFID0gKDEgPDwgMSksCi19OwotCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAotc3RydWN0IGl3bDM5NDVfcHJpdjsKLQotdm9pZCBpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci12b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1pbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMgSVdMMzlfTUFYX05VTV9RVUVVRVMKLQotc3RydWN0IGl3bDM5NDVfcHJpdiB7Ci0KLQkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWVfY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICppZWVlX3JhdGVzOwotCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZzsgLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLQotCS8qIHRlbXBvcmFyeSBmcmFtZSBzdG9yYWdlIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZnJhbWVzOwotCWludCBmcmFtZXNfY291bnQ7Ci0KLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JaW50IGFsbG9jX3J4Yl9za2I7Ci0KLQl2b2lkICgqcnhfaGFuZGxlcnNbUkVQTFlfTUFYXSkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLQotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCS8qIHNwZWN0cnVtIG1lYXN1cmVtZW50IHJlcG9ydCBjYWNoaW5nICovCi0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwotCXU4IG1lYXN1cmVtZW50X3N0YXR1czsKLSNlbmRpZgotCS8qIHVjb2RlIGJlYWNvbiB0aW1lICovCi0JdTMyIHVjb2RlX2JlYWNvbl90aW1lOwotCi0JLyogd2UgYWxsb2NhdGUgYXJyYXkgb2YgaXdsMzk0NV9jaGFubmVsX2luZm8gZm9yIE5JQydzIHZhbGlkIGNoYW5uZWxzLgotCSAqICAgIEFjY2VzcyB2aWEgY2hhbm5lbCAjIHVzaW5nIGluZGlyZWN0IGluZGV4IGFycmF5ICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaGFubmVsX2luZm87CS8qIGNoYW5uZWwgaW5mbyBhcnJheSAqLwotCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgb2YgY2hhbm5lbHMgKi8KLQotCS8qIGVhY2ggY2FsaWJyYXRpb24gY2hhbm5lbCBncm91cCBpbiB0aGUgRUVQUk9NIGhhcyBhIGRlcml2ZWQKLQkgKiBjbGlwIHNldHRpbmcgZm9yIGVhY2ggcmF0ZS4gKi8KLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIGNsaXBfZ3JvdXBzWzVdOwotCi0JLyogdGhlcm1hbCBjYWxpYnJhdGlvbiAqLwotCXMzMiB0ZW1wZXJhdHVyZTsJLyogZGVncmVlcyBLZWx2aW4gKi8KLQlzMzIgbGFzdF90ZW1wZXJhdHVyZTsKLQotCS8qIFNjYW4gcmVsYXRlZCB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9qaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9zY2FuX2ppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9wYXNzX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydF90c2Y7Ci0JaW50IHNjYW5fYmFuZHM7Ci0JaW50IG9uZV9kaXJlY3Rfc2NhbjsKLQl1OCBkaXJlY3Rfc3NpZF9sZW47Ci0JdTggZGlyZWN0X3NzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kICpzY2FuOwotCi0JLyogc3BpbmxvY2sgKi8KLQlzcGlubG9ja190IGxvY2s7CS8qIHByb3RlY3QgZ2VuZXJhbCBzaGFyZWQgZGF0YSAqLwotCXNwaW5sb2NrX3QgaGNtZF9sb2NrOwkvKiBwcm90ZWN0IGhjbWQgKi8KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0KLQkvKiBiYXNpYyBwY2ktbmV0d29yayBkcml2ZXIgc3R1ZmYgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQotCS8qIHBjaSBoYXJkd2FyZSBhZGRyZXNzIHN1cHBvcnQgKi8KLQl2b2lkIF9faW9tZW0gKmh3X2Jhc2U7Ci0KLQkvKiB1Q29kZSBpbWFnZXMsIHNhdmUgdG8gcmVsb2FkIGluIGNhc2Ugb2YgZmFpbHVyZSAqLwotCXUzMiB1Y29kZV92ZXI7CQkJLyogdWNvZGUgdmVyc2lvbiwgY29weSBvZgotCQkJCQkgICBpd2wzOTQ1X3Vjb2RlLnZlciAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2NvZGU7CS8qIHJ1bnRpbWUgaW5zdCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2RhdGE7CS8qIHJ1bnRpbWUgZGF0YSBvcmlnaW5hbCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2RhdGFfYmFja3VwOwkvKiBydW50aW1lIGRhdGEgc2F2ZS9yZXN0b3JlICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfaW5pdDsJLyogaW5pdGlhbGl6YXRpb24gaW5zdCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2luaXRfZGF0YTsJLyogaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2Jvb3Q7CS8qIGJvb3RzdHJhcCBpbnN0ICovCi0KLQotCXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgcnhvbl90aW1pbmc7Ci0KLQkvKiBXZSBkZWNsYXJlIHRoaXMgY29uc3Qgc28gaXQgY2FuIG9ubHkgYmUKLQkgKiBjaGFuZ2VkIHZpYSBleHBsaWNpdCBjYXN0IHdpdGhpbiB0aGUKLQkgKiByb3V0aW5lcyB0aGF0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgcGh5c2ljYWwKLQkgKiBoYXJkd2FyZSAqLwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIGFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHN0YWdpbmdfcnhvbjsKLQotCWludCBlcnJvcl9yZWNvdmVyaW5nOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHJlY292ZXJ5X3J4b247Ci0KLQkvKiAxc3QgcmVzcG9uc2VzIGZyb20gaW5pdGlhbGl6ZSBhbmQgcnVudGltZSB1Q29kZSBpbWFnZXMuCi0JICogNDk2NSdzIGluaXRpYWxpemUgYWxpdmUgcmVzcG9uc2UgY29udGFpbnMgc29tZSBjYWxpYnJhdGlvbiBkYXRhLiAqLwotCXN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7Ci0Jc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOwotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUkZLSUxMCi0Jc3RydWN0IHJma2lsbCAqcmZraWxsOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCi0Jc3RydWN0IGl3bDM5NDVfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwotCXU4IGxhc3RfYmxpbmtfcmF0ZTsKLQl1OCBhbGxvd19ibGlua2luZzsKLQl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7Ci0JdTY0IGxlZF90cHQ7Ci0jZW5kaWYKLQotCi0JdTE2IGFjdGl2ZV9yYXRlOwotCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKLQotCXUzMiBzdGFfc3VwcF9yYXRlczsKLQotCXU4IGNhbGxfcG9zdF9hc3NvY19mcm9tX2JlYWNvbjsKLQkvKiBSYXRlIHNjYWxpbmcgZGF0YSAqLwotCXM4IGRhdGFfcmV0cnlfbGltaXQ7Ci0JdTggcmV0cnlfcmF0ZTsKLQotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfY29tbWFuZF9xdWV1ZTsKLQotCWludCBhY3Rpdml0eV90aW1lcl9hY3RpdmU7Ci0KLQkvKiBSeCBhbmQgVHggRE1BIHByb2Nlc3NpbmcgcXVldWVzICovCi0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgcnhxOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlIHR4cVtJV0xfTUFYX05VTV9RVUVVRVNdOwotCi0JdW5zaWduZWQgbG9uZyBzdGF0dXM7Ci0KLQlpbnQgbGFzdF9yeF9yc3NpOwkvKiBGcm9tIFJ4IHBhY2tldCBzdGF0aXNpdGljcyAqLwotCWludCBsYXN0X3J4X25vaXNlOwkvKiBGcm9tIGJlYWNvbiBzdGF0aXN0aWNzICovCi0KLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgcG93ZXJfZGF0YTsKLQotCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfc3RhdGlzdGljc190aW1lOwotCi0JLyogY29udGV4dCBpbmZvcm1hdGlvbiAqLwotCXUxNiByYXRlc19tYXNrOwotCi0JdTMyIHBvd2VyX21vZGU7Ci0JdTMyIGFudGVubmE7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXUxNiBydHNfdGhyZXNob2xkOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQotCS8qc3RhdGlvbiB0YWJsZSB2YXJpYWJsZXMgKi8KLQlzcGlubG9ja190IHN0YV9sb2NrOwotCWludCBudW1fc3RhdGlvbnM7Ci0Jc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc1tJV0xfU1RBVElPTl9DT1VOVF07Ci0KLQkvKiBJbmRpY2F0aW9uIGlmIGllZWU4MDIxMV9vcHMtPm9wZW4gaGFzIGJlZW4gY2FsbGVkICovCi0JdTggaXNfb3BlbjsKLQotCXU4IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Ci0KLQkvKiBSeCdkIHBhY2tldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KLQl1MzIgbGFzdF9iZWFjb25fdGltZTsKLQl1NjQgbGFzdF90c2Y7Ci0KLQkvKiBlZXByb20gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gZWVwcm9tOwotCi0JZW51bSBubDgwMjExX2lmdHlwZSBpd19tb2RlOwotCi0Jc3RydWN0IHNrX2J1ZmYgKmlic3NfYmVhY29uOwotCi0JLyogTGFzdCBSeCdkIGJlYWNvbiB0aW1lc3RhbXAgKi8KLQl1MzIgdGltZXN0YW1wMDsKLQl1MzIgdGltZXN0YW1wMTsKLQl1MTYgYmVhY29uX2ludDsKLQlzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbyBod19zZXR0aW5nOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0KLQkvKiBDdXJyZW50IGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25maWd1cmUgdGhlCi0JICogaGFyZHdhcmUgKi8KLQl1MTYgYXNzb2NfaWQ7Ci0JdTE2IGFzc29jX2NhcGFiaWxpdHk7Ci0JdTggcHNfbW9kZTsKLQotCXN0cnVjdCBpd2wzOTQ1X3Fvc19pbmZvIHFvc19kYXRhOwotCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2FsaWJyYXRlZF93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2NvbXBsZXRlZDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfcmVwbGVuaXNoOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZl9raWxsOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhYm9ydF9zY2FuOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cGRhdGVfbGlua19sZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGF1dGhfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVwb3J0X3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3Rfc2NhbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZTsKLQotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKLQotCXN0cnVjdCBkZWxheWVkX3dvcmsgaW5pdF9hbGl2ZV9zdGFydDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGFsaXZlX3N0YXJ0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYWN0aXZpdHlfdGltZXI7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB0aGVybWFsX3BlcmlvZGljOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgZ2F0aGVyX3N0YXRzOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl9jaGVjazsKLQotI2RlZmluZSBJV0xfREVGQVVMVF9UWF9QT1dFUiAweDBGCi0JczggdXNlcl90eHBvd2VyX2xpbWl0OwotCXM4IG1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQ7Ci0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JLyogZGVidWdnaW5nIGluZm8gKi8KLQl1MzIgZnJhbWVjbnRfdG9fdXM7Ci0JYXRvbWljX3QgcmVzdHJpY3RfcmVmY250OwotI2VuZGlmCi19OwkJCQkvKml3bDM5NDVfcHJpdiAqLwotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF92YWxpZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JaWYgKGNoX2luZm8gPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIChjaF9pbmZvLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1ZBTElEKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3JhZGFyKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gKGNoX2luZm8tPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9hX2JhbmQoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQotewotCXJldHVybiBjaF9pbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9iZ19iYW5kKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gY2hfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3Bhc3NpdmUoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaCkKLXsKLQlyZXR1cm4gKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9pYnNzKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2gpCi17Ci0JcmV0dXJuICgoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpID8gMSA6IDA7Ci19Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbygKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X3JzX25leHRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcmF0ZSk7Ci0KLS8qIFJlcXVpcmVzIGZ1bGwgZGVjbGFyYXRpb24gb2YgaXdsMzk0NV9wcml2IGJlZm9yZSBpbmNsdWRpbmcgKi8KLSNpbmNsdWRlICJpd2wtMzk0NS1pby5oIgorLyogUmVxdWlyZXMgZnVsbCBkZWNsYXJhdGlvbiBvZiBpd2xfcHJpdiBiZWZvcmUgaW5jbHVkaW5nICovCisjaW5jbHVkZSAiaXdsLWlvLmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCmluZGV4IDY2NDlmN2IuLmE3MWE0ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2NCArODksNDMgQEAKICNkZWZpbmUgTE9OR19TTE9UX1RJTUUgMjAKIAogLyogUlNTSSB0byBkQm0gKi8KLSNkZWZpbmUgSVdMX1JTU0lfT0ZGU0VUCTQ0Ci0KKyNkZWZpbmUgSVdMNDlfUlNTSV9PRkZTRVQJNDQKIAogCiAvKiBQQ0kgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSV9DRkdfUkVUUllfVElNRU9VVAkweDA0MQotI2RlZmluZSBQQ0lfQ0ZHX1BPV0VSX1NPVVJDRQkweDBDOAotI2RlZmluZSBQQ0lfUkVHX1dVTTgJCTB4MEU4Ci0jZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMCTB4MEYwCiAKIC8qIFBDSSByZWdpc3RlciB2YWx1ZXMgKi8KICNkZWZpbmUgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTgkweDAxCiAjZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTgkweDAyCi0jZGVmaW5lIFBDSV9DRkdfQ01EX1JFR19JTlRfRElTX01TSwkweDA0Ci0jZGVmaW5lIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUICAgICAgICAgKDB4ODAwMDAwMDApCi0KIAogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9SRVRSWSAgMTUKIAotI2RlZmluZSBSWF9RVUVVRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgotI2RlZmluZSBSWF9RVUVVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDI1NQotI2RlZmluZSBSWF9RVUVVRV9TSVpFX0xPRyAgICAgICAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBURkRfVFhfQ01EX1NMT1RTIDI1NgotI2RlZmluZSBURkRfQ01EX1NMT1RTIDMyCi0KLS8qCi0gKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAotI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKLQotLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLwotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfNEsgKDQgKiAxMDI0KQotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfOEsgKDggKiAxMDI0KQogCiAvKiBTaXplcyBhbmQgYWRkcmVzc2VzIGZvciBpbnN0cnVjdGlvbiBhbmQgZGF0YSBtZW1vcnkgKFNSQU0pIGluCiAgKiA0OTY1J3MgZW1iZWRkZWQgcHJvY2Vzc29yLiAgRHJpdmVyIGFjY2VzcyBpcyB2aWEgSEJVU19UQVJHX01FTV8qIHJlZ3MuICovCi0jZGVmaW5lIFJUQ19JTlNUX0xPV0VSX0JPVU5ECQkJKDB4MDAwMDAwKQorI2RlZmluZSBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORAkJKDB4MDAwMDAwKQogI2RlZmluZSBJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORAkJKDB4MDE4MDAwKQogCi0jZGVmaW5lIFJUQ19EQVRBX0xPV0VSX0JPVU5ECQkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQogI2RlZmluZSBJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODBBMDAwKQogCi0jZGVmaW5lIElXTDQ5X1JUQ19JTlNUX1NJWkUgIChJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFJUQ19JTlNUX0xPV0VSX0JPVU5EKQotI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFICAoSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBSVENfREFUQV9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfU0laRSAgKElXTDQ5X1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFICAoSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNDlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQotI2RlZmluZSBJV0xfTUFYX0RBVEFfU0laRSBJV0w0OV9SVENfREFUQV9TSVpFCisjZGVmaW5lIElXTDQ5X01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQorI2RlZmluZSBJV0w0OV9NQVhfREFUQV9TSVpFIElXTDQ5X1JUQ19EQVRBX1NJWkUKIAogLyogU2l6ZSBvZiB1Q29kZSBpbnN0cnVjdGlvbiBtZW1vcnkgaW4gYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUgKi8KLSNkZWZpbmUgSVdMX01BWF9CU01fU0laRSBCU01fU1JBTV9TSVpFCisjZGVmaW5lIElXTDQ5X01BWF9CU01fU0laRSBCU01fU1JBTV9TSVpFCiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKLQlyZXR1cm4gKGFkZHIgPj0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCisJcmV0dXJuIChhZGRyID49IElXTDQ5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgogCSAgICAgICAoYWRkciA8IElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDVhNzJiYzAuLjg0N2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNzYsNyArNzYsNyBAQAogCXUzMiByZWc7CiAJdTMyIHZhbDsKIAotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CiAKIAkvKiB2ZXJpZnkgQlNNIFNSQU0gY29udGVudHMgKi8KIAl2YWwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7CkBAIC04NSw3ICs4NSw3IEBACiAJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKIAkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgogCQkJCSAgImFkZHIgMHglMDhYKyV1IChvZiAldSksIGlzIDB4JXgsIHMvYiAweCV4XG4iLAogCQkJCSAgQlNNX1NSQU1fTE9XRVJfQk9VTkQsCiAJCQkJICByZWcgLSBCU01fU1JBTV9MT1dFUl9CT1VORCwgbGVuLApAQCAtOTQsNyArOTQsNyBAQAogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkJTTSBib290c3RyYXAgdUNvZGUgaW1hZ2UgT0tcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ0LDEyICsxNDQsMTIgQEAKIAl1MzIgcmVnX29mZnNldDsKIAlpbnQgcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIGxvYWQgYnNtXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gbG9hZCBic21cbiIpOwogCiAJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1JUOwogCiAJLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLwotCWlmIChsZW4gPiBJV0xfTUFYX0JTTV9TSVpFKQorCWlmIChsZW4gPiBJV0w0OV9NQVhfQlNNX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCkBAIC0xODYsNyArMTg2LDcgQEAKIAogCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KIAlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLCBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORCk7CiAJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7CiAKIAkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCkBAIC0yMDEsOSArMjAxLDkgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAJaWYgKGkgPCAxMDApCi0JCUlXTF9ERUJVR19JTkZPKCJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CiAJZWxzZSB7Ci0JCUlXTF9FUlJPUigiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNTcsNyArMjU3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIHBvaW50ZXJzIGFyZSBzZXQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc5LDcgKzI3OSw3IEBACiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKGl3bF92ZXJpZnlfdWNvZGUocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7CiAJCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC0yOTksMTEgKzI5OSwxMSBAQAogCS8qIFNlbmQgcG9pbnRlcnMgdG8gcHJvdG9jb2wvcnVudGltZSB1Q29kZSBpbWFnZSAuLi4gaW5pdCBjb2RlIHdpbGwKIAkgKiBsb2FkIGFuZCBsYXVuY2ggcnVudGltZSB1Q29kZSwgd2hpY2ggd2lsbCBzZW5kIHVzIGFub3RoZXIgIkFsaXZlIgogCSAqIG5vdGlmaWNhdGlvbi4gKi8KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAlpZiAoaXdsNDk2NV9zZXRfdWNvZGVfcHRycyhwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd29uJ3QgaGFwcGVuOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvdWxkbid0IHNldCB1cCB1Q29kZSBwb2ludGVycy5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXJldHVybjsKQEAgLTM1NCw3ICszNTQsNyBAQAogCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzgxLDI3ICszODEsMjAgQEAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgdmFsOwogCXUxNiByYWRpb19jZmc7Ci0JdTE2IGxpbms7CisJdTE2IGxjdGw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKChwcml2LT5yZXZfaWQgJiAweDgwKSA9PSAweDgwICYmIChwcml2LT5yZXZfaWQgJiAweDdmKSA8IDgpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9SRUdfV1VNOCwgJnZhbCk7Ci0JCS8qIEVuYWJsZSBObyBTbm9vcCBmaWVsZCAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9SRUdfV1VNOCwKLQkJCQkgICAgICAgdmFsICYgfigxIDw8IDExKSk7Ci0JfQorCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DRkdfTElOS19DVFJMLCAmbGluayk7Ci0KLQkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KLQlpZiAoKGxpbmsgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKLQkJLyogZGlzYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkvKiBIVyBidWcgVy9BIC0gbmVnbGlnaWJsZSBwb3dlciBjb25zdW1wdGlvbiAqLworCS8qIEwxLUFTUE0gaXMgZW5hYmxlZCBieSBCSU9TICovCisJaWYgKChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pCisJCS8qIEwxLUFTUE0gZW5hYmxlZDogZGlzYWJsZSBMMFMgICovCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HSU9fUkVHLCBDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOwogCWVsc2UKLQkJLyogTDBTIGVuYWJsZWQgTDFBIGRpc2FibGVkICovCisJCS8qIEwxLUFTUE0gZGlzYWJsZWQ6IGVuYWJsZSBMMFMgKi8KIAkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAogCXJhZGlvX2NmZyA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fUkFESU9fQ09ORklHKTsKQEAgLTQzNyw3ICs0MzAsNyBAQAogCQkJQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfSU5GTygic3RvcCBtYXN0ZXJcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJzdG9wIG1hc3RlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMyw5ICs1MTYsMTAgQEAKIAkJY21kLmRpZmZfZ2Fpbl9jID0gMDsKIAkJaWYgKGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKIAkJCQkgc2l6ZW9mKGNtZCksICZjbWQpKQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7Ci0JCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CiAJfQogfQogCkBAIC01NTcsNyArNTUxLDcgQEAKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9IDA7CiAJCX0KIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJkZWx0YV9nYWluX2NvZGVzOiBhICVkIGIgJWQgYyAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImRlbHRhX2dhaW5fY29kZXM6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVswXSwKIAkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV0sCiAJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKQEAgLTU3NSw3ICs1NjksNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCiAJCQkJICAgICAgc2l6ZW9mKGNtZCksICZjbWQpOwogCQlpZiAocmV0KQotCQkJSVdMX0RFQlVHX0NBTElCKCJmYWlsIHNlbmRpbmcgY21kICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiZmFpbCBzZW5kaW5nIGNtZCAiCiAJCQkJICAgICAiUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCBcbiIpOwogCiAJCS8qIFRPRE8gd2UgbWlnaHQgd2FudCByZWNhbGN1bGF0ZQpAQCAtNjY4LDcgKzY2Miw3IEBACiAKIAl0eHEtPnNjaGVkX3JldHJ5ID0gc2NkX3JldHJ5OwogCi0JSVdMX0RFQlVHX0lORk8oIiVzICVzIFF1ZXVlICVkIG9uIEFDICVkXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKIAkJICAgICAgIGFjdGl2ZSA/ICJBY3RpdmF0ZSIgOiAiRGVhY3RpdmF0ZSIsCiAJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKIH0KQEAgLTgwNCw4ICs3OTgsOSBAQAogCiAJaWYgKChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPiBJV0w0OV9OVU1fUVVFVUVTKSB8fAogCSAgICAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewotCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTDQ5X05VTV9RVUVVRVMpOworCQlJV0xfRVJSKHByaXYsCisJCQkiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCQlJV0xfTUlOX05VTV9RVUVVRVMsIElXTDQ5X05VTV9RVUVVRVMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTgxMyw2ICs4MDgsNyBAQAogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDQ5X1RDU1JfQ0hOTF9OVU07CiAJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQogCQkJSVdMNDlfTlVNX1FVRVVFUyAqIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w0OTY1X1NUQVRJT05fQ09VTlQ7CiAJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDQ5NjVfQlJPQURDQVNUX0lEOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNDlfUlRDX0RBVEFfU0laRTsKQEAgLTgyMCw2ICs4MTYsOCBAQAogCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSBCU01fU1JBTV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5mYXRfY2hhbm5lbCA9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAorCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKIAlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IDI7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwogCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQSB8IEFOVF9COwpAQCAtOTAyLDcgKzkwMCw2IEBACiAJICAgIGNoYW5uZWwgPD0gQ0FMSUJfSVdMX1RYX0FUVEVOX0dSNF9MQ0gpCiAJCXJldHVybiBDQUxJQl9DSF9HUk9VUF80OwogCi0JSVdMX0VSUk9SKCJDYW4ndCBmaW5kIHR4YXR0ZW4gZ3JvdXAgZm9yIGNoYW5uZWwgJWQuXG4iLCBjaGFubmVsKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTk1Niw3ICs5NTMsNyBAQAogCiAJcyA9IGl3bDQ5NjVfZ2V0X3N1Yl9iYW5kKHByaXYsIGNoYW5uZWwpOwogCWlmIChzID49IEVFUFJPTV9UWF9QT1dFUl9CQU5EUykgewotCQlJV0xfRVJST1IoIlR4IFBvd2VyIGNhbiBub3QgZmluZCBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKKwkJSVdMX0VSUihwcml2LCAiVHggUG93ZXIgY2FuIG5vdCBmaW5kIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC05NjQsNyArOTYxLDcgQEAKIAljaF9pMiA9IHByaXYtPmNhbGliX2luZm8tPmJhbmRfaW5mb1tzXS5jaDIuY2hfbnVtOwogCWNoYW5faW5mby0+Y2hfbnVtID0gKHU4KSBjaGFubmVsOwogCi0JSVdMX0RFQlVHX1RYUE9XRVIoImNoYW5uZWwgJWQgc3ViYmFuZCAlZCBmYWN0b3J5IGNhbCBjaCAlZCAmICVkXG4iLAorCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFubmVsICVkIHN1YmJhbmQgJWQgZmFjdG9yeSBjYWwgY2ggJWQgJiAlZFxuIiwKIAkJCSAgY2hhbm5lbCwgcywgY2hfaTEsIGNoX2kyKTsKIAogCWZvciAoYyA9IDA7IGMgPCBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TOyBjKyspIHsKQEAgLTk5NCwxOSArOTkxLDE5IEBACiAJCQkJCQkJICAgbTEtPnBhX2RldCwgY2hfaTIsCiAJCQkJCQkJICAgbTItPnBhX2RldCk7CiAKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkIEFQMT0lZCBBUDI9JWQgQVA9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT5hY3R1YWxfcG93LCBtMi0+YWN0dWFsX3Bvdywgb21lYXMtPmFjdHVhbF9wb3cpOwotCQkJSVdMX0RFQlVHX1RYUE9XRVIKLQkJCSAgICAoImNoYWluICVkIG1lYXMgJWQgTkkxPSVkIE5JMj0lZCBOST0lZFxuIiwgYywgbSwKLQkJCSAgICAgbTEtPmdhaW5faWR4LCBtMi0+Z2Fpbl9pZHgsIG9tZWFzLT5nYWluX2lkeCk7Ci0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCBQQTE9JWQgUEEyPSVkIFBBPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+cGFfZGV0LCBtMi0+cGFfZGV0LCBvbWVhcy0+cGFfZGV0KTsKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkICBUMT0lZCAgVDI9JWQgIFQ9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT50ZW1wZXJhdHVyZSwgbTItPnRlbXBlcmF0dXJlLAotCQkJICAgICBvbWVhcy0+dGVtcGVyYXR1cmUpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBBUDE9JWQgQVAyPSVkIEFQPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5hY3R1YWxfcG93LCBtMi0+YWN0dWFsX3Bvdywgb21lYXMtPmFjdHVhbF9wb3cpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBOSTE9JWQgTkkyPSVkIE5JPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5nYWluX2lkeCwgbTItPmdhaW5faWR4LCBvbWVhcy0+Z2Fpbl9pZHgpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBQQTE9JWQgUEEyPSVkIFBBPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5wYV9kZXQsIG0yLT5wYV9kZXQsIG9tZWFzLT5wYV9kZXQpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCAgVDE9JWQgIFQyPSVkICBUPSVkXG4iLCBjLCBtLAorCQkJCW0xLT50ZW1wZXJhdHVyZSwgbTItPnRlbXBlcmF0dXJlLAorCQkJCW9tZWFzLT50ZW1wZXJhdHVyZSk7CiAJCX0KIAl9CiAKQEAgLTEzMDMsMTIgKzEzMDAsMTIgQEAKIAlzMzIgZmFjdG9yeV9hY3R1YWxfcHdyWzJdOwogCXMzMiBwb3dlcl9pbmRleDsKIAotCS8qIHVzZXJfdHhwb3dlcl9saW1pdCBpcyBpbiBkQm0sIGNvbnZlcnQgdG8gaGFsZi1kQm0gKGhhbGYtZEIgdW5pdHMKKwkvKiB0eF9wb3dlcl91c2VyX2xtdCBpcyBpbiBkQm0sIGNvbnZlcnQgdG8gaGFsZi1kQm0gKGhhbGYtZEIgdW5pdHMKIAkgKiAgIGFyZSB1c2VkIGZvciBpbmRleGluZyBpbnRvIHR4cG93ZXIgdGFibGUpICovCiAJdXNlcl90YXJnZXRfcG93ZXIgPSAyICogcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQ7CiAKIAkvKiBHZXQgY3VycmVudCAoUlhPTikgY2hhbm5lbCwgYmFuZCwgd2lkdGggKi8KLQlJV0xfREVCVUdfVFhQT1dFUigiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKIAkJCSAgaXNfZmF0KTsKIAogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKQEAgLTEzMTksMTAgKzEzMTYsMTMgQEAKIAkvKiBnZXQgdHhhdHRlbiBncm91cCwgdXNlZCB0byBzZWxlY3QgMSkgdGhlcm1hbCB0eHBvd2VyIGFkanVzdG1lbnQKIAkgKiAgIGFuZCAyKSBtaW1vIHR4cG93ZXIgYmFsYW5jZSBiZXR3ZWVuIFR4IGNoYWlucy4gKi8KIAl0eGF0dGVuX2dycCA9IGl3bDQ5NjVfZ2V0X3R4X2F0dGVuX2dycChjaGFubmVsKTsKLQlpZiAodHhhdHRlbl9ncnAgPCAwKQorCWlmICh0eGF0dGVuX2dycCA8IDApIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuJ3QgZmluZCB0eGF0dGVuIGdyb3VwIGZvciBjaGFubmVsICVkLlxuIiwKKwkJCSAgY2hhbm5lbCk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFubmVsICVkIGJlbG9uZ3MgdG8gdHhhdHRlbiBncm91cCAlZFxuIiwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHR4YXR0ZW5fZ3JwKTsKIAogCWlmIChpc19mYXQpIHsKQEAgLTEzNzIsNyArMTM3Miw3IEBACiAJdm9sdGFnZV9jb21wZW5zYXRpb24gPQogCSAgICBpd2w0OTY1X2dldF92b2x0YWdlX2NvbXBlbnNhdGlvbih2b2x0YWdlLCBpbml0X3ZvbHRhZ2UpOwogCi0JSVdMX0RFQlVHX1RYUE9XRVIoImN1cnIgdm9sdCAlZCBlZXByb20gdm9sdCAlZCB2b2x0IGNvbXAgJWRcbiIsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImN1cnIgdm9sdCAlZCBlZXByb20gdm9sdCAlZCB2b2x0IGNvbXAgJWRcbiIsCiAJCQkgIGluaXRfdm9sdGFnZSwKIAkJCSAgdm9sdGFnZSwgdm9sdGFnZV9jb21wZW5zYXRpb24pOwogCkBAIC0xNDAzLDEzICsxNDAzLDEzIEBACiAJCWZhY3RvcnlfZ2Fpbl9pbmRleFtjXSA9IG1lYXN1cmVtZW50LT5nYWluX2lkeDsKIAkJZmFjdG9yeV9hY3R1YWxfcHdyW2NdID0gbWVhc3VyZW1lbnQtPmFjdHVhbF9wb3c7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImNoYWluID0gJWRcbiIsIGMpOwotCQlJV0xfREVCVUdfVFhQT1dFUigiZmN0cnkgdG1wICVkLCAiCisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFpbiA9ICVkXG4iLCBjKTsKKwkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImZjdHJ5IHRtcCAlZCwgIgogCQkJCSAgImN1cnIgdG1wICVkLCBjb21wICVkIHN0ZXBzXG4iLAogCQkJCSAgZmFjdG9yeV90ZW1wLCBjdXJyZW50X3RlbXAsCiAJCQkJICB0ZW1wZXJhdHVyZV9jb21wW2NdKTsKIAotCQlJV0xfREVCVUdfVFhQT1dFUigiZmN0cnkgaWR4ICVkLCBmY3RyeSBwd3IgJWRcbiIsCisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJmY3RyeSBpZHggJWQsIGZjdHJ5IHB3ciAlZFxuIiwKIAkJCQkgIGZhY3RvcnlfZ2Fpbl9pbmRleFtjXSwKIAkJCQkgIGZhY3RvcnlfYWN0dWFsX3B3cltjXSk7CiAJfQpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAKIAkJaWYgKHRhcmdldF9wb3dlciA+IHBvd2VyX2xpbWl0KQogCQkJdGFyZ2V0X3Bvd2VyID0gcG93ZXJfbGltaXQ7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoInJhdGUgJWQgc2F0ICVkIHJlZyAlZCB1c3IgJWQgdGd0ICVkXG4iLAorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAicmF0ZSAlZCBzYXQgJWQgcmVnICVkIHVzciAlZCB0Z3QgJWRcbiIsCiAJCQkJICBpLCBzYXR1cmF0aW9uX3Bvd2VyIC0gYmFja19vZmZfdGFibGVbaV0sCiAJCQkJICBjdXJyZW50X3JlZ3VsYXRvcnksIHVzZXJfdGFyZ2V0X3Bvd2VyLAogCQkJCSAgdGFyZ2V0X3Bvd2VyKTsKQEAgLTE0NjYsNyArMTQ2Niw3IEBACiAJCQkJCSAgICB2b2x0YWdlX2NvbXBlbnNhdGlvbiArCiAJCQkJCSAgICBhdHRlbl92YWx1ZSk7CiAKLS8qCQkJSVdMX0RFQlVHX1RYUE9XRVIoImNhbGN1bGF0ZWQgdHhwb3dlciBpbmRleCAlZFxuIiwKKy8qCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNhbGN1bGF0ZWQgdHhwb3dlciBpbmRleCAlZFxuIiwKIAkJCQkJCXBvd2VyX2luZGV4KTsgKi8KIAogCQkJaWYgKHBvd2VyX2luZGV4IDwgZ2V0X21pbl9wb3dlcl9pbmRleChpLCBiYW5kKSkKQEAgLTE0ODMsMTIgKzE0ODMsMTIgQEAKIAogCQkJLyogc3RheSB3aXRoaW4gdGhlIHRhYmxlISAqLwogCQkJaWYgKHBvd2VyX2luZGV4ID4gMTA3KSB7Ci0JCQkJSVdMX1dBUk5JTkcoInR4cG93ZXIgaW5kZXggJWQgPiAxMDdcbiIsCisJCQkJSVdMX1dBUk4ocHJpdiwgInR4cG93ZXIgaW5kZXggJWQgPiAxMDdcbiIsCiAJCQkJCSAgICBwb3dlcl9pbmRleCk7CiAJCQkJcG93ZXJfaW5kZXggPSAxMDc7CiAJCQl9CiAJCQlpZiAocG93ZXJfaW5kZXggPCAwKSB7Ci0JCQkJSVdMX1dBUk5JTkcoInR4cG93ZXIgaW5kZXggJWQgPCAwXG4iLAorCQkJCUlXTF9XQVJOKHByaXYsICJ0eHBvd2VyIGluZGV4ICVkIDwgMFxuIiwKIAkJCQkJICAgIHBvd2VyX2luZGV4KTsKIAkJCQlwb3dlcl9pbmRleCA9IDA7CiAJCQl9CkBAIC0xNDk5LDcgKzE0OTksNyBAQAogCQkJdHhfcG93ZXIucy5kc3BfcHJlZGlzX2F0dGVuW2NdID0KIAkJCQlnYWluX3RhYmxlW2JhbmRdW3Bvd2VyX2luZGV4XS5kc3A7CiAKLQkJCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFpbiAlZCBtaW1vICVkIGluZGV4ICVkICIKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFpbiAlZCBtaW1vICVkIGluZGV4ICVkICIKIAkJCQkJICAiZ2FpbiAweCUwMnggZHNwICVkXG4iLAogCQkJCQkgIGMsIGF0dGVuX3ZhbHVlLCBwb3dlcl9pbmRleCwKIAkJCQkJdHhfcG93ZXIucy5yYWRpb190eF9nYWluW2NdLApAQCAtMTUzMSw3ICsxNTMxLDcgQEAKIAkJLyogSWYgdGhpcyBnZXRzIGhpdCBhIGxvdCwgc3dpdGNoIGl0IHRvIGEgQlVHKCkgYW5kIGNhdGNoCiAJCSAqIHRoZSBzdGFjayB0cmFjZSB0byBmaW5kIG91dCB3aG8gaXMgY2FsbGluZyB0aGlzIGR1cmluZwogCQkgKiBhIHNjYW4uICovCi0JCUlXTF9XQVJOSU5HKCJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlRYIFBvd2VyIHJlcXVlc3RlZCB3aGlsZSBzY2FubmluZyFcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAJICAgICByeG9uMi0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKIAkgICAgKHJ4b24xLT5yeF9jaGFpbiA9PSByeG9uMi0+cnhfY2hhaW4pICYmCiAJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjMxLDcgKzE2MzEsNyBAQAogCXJjID0gaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHByaXYsIGJhbmQsIGNoYW5uZWwsIGlzX2ZhdCwKIAkJCQkgICAgICBjdHJsX2NoYW5faGlnaCwgJmNtZC50eF9wb3dlcik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9ERUJVR18xMUgoImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CisJCUlXTF9ERUJVR18xMUgocHJpdiwgImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpICYmCiAJCShwcml2LT5zdGF0aXN0aWNzLmZsYWcgJiBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0spKSB7Ci0JCUlXTF9ERUJVR19URU1QKCJSdW5uaW5nIEZBVCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIEZBVCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMV0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzFdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1sxXSk7CiAJCVI0ID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3I0WzFdKTsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfVEVNUCgiUnVubmluZyB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIHRlbXBlcmF0dXJlIGNhbGlicmF0aW9uXG4iKTsKIAkJUjEgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMVswXSk7CiAJCVIyID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjJbMF0pOwogCQlSMyA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IzWzBdKTsKQEAgLTE3MjIsMTAgKzE3MjIsMTAgQEAKIAkJdnQgPSBzaWduX2V4dGVuZCgKIAkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSksIDIzKTsKIAotCUlXTF9ERUJVR19URU1QKCJDYWxpYiB2YWx1ZXMgUlsxLTNdOiAlZCAlZCAlZCBSNDogJWRcbiIsIFIxLCBSMiwgUjMsIHZ0KTsKKwlJV0xfREVCVUdfVEVNUChwcml2LCAiQ2FsaWIgdmFsdWVzIFJbMS0zXTogJWQgJWQgJWQgUjQ6ICVkXG4iLCBSMSwgUjIsIFIzLCB2dCk7CiAKIAlpZiAoUjMgPT0gUjEpIHsKLQkJSVdMX0VSUk9SKCJDYWxpYnJhdGlvbiBjb25mbGljdCBSMSA9PSBSM1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNhbGlicmF0aW9uIGNvbmZsaWN0IFIxID09IFIzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTczNSw3ICsxNzM1LDcgQEAKIAl0ZW1wZXJhdHVyZSAvPSAoUjMgLSBSMSk7CiAJdGVtcGVyYXR1cmUgPSAodGVtcGVyYXR1cmUgKiA5NykgLyAxMDAgKyBURU1QRVJBVFVSRV9DQUxJQl9LRUxWSU5fT0ZGU0VUOwogCi0JSVdMX0RFQlVHX1RFTVAoIkNhbGlicmF0ZWQgdGVtcGVyYXR1cmU6ICVkSywgJWRDXG4iLAorCUlXTF9ERUJVR19URU1QKHByaXYsICJDYWxpYnJhdGVkIHRlbXBlcmF0dXJlOiAlZEssICVkQ1xuIiwKIAkJCXRlbXBlcmF0dXJlLCBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wZXJhdHVyZSkpOwogCiAJcmV0dXJuIHRlbXBlcmF0dXJlOwpAQCAtMTc1OCw3ICsxNzU4LDcgQEAKIAlpbnQgdGVtcF9kaWZmOwogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlIG5vdCB1cGRhdGVkIC0tIG5vIHN0YXRpc3RpY3MuXG4iKTsKKwkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlRlbXBlcmF0dXJlIG5vdCB1cGRhdGVkIC0tIG5vIHN0YXRpc3RpY3MuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzY2LDE5ICsxNzY2LDE5IEBACiAKIAkvKiBnZXQgYWJzb2x1dGUgdmFsdWUgKi8KIAlpZiAodGVtcF9kaWZmIDwgMCkgewotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOwogCQl0ZW1wX2RpZmYgPSAtdGVtcF9kaWZmOwogCX0gZWxzZSBpZiAodGVtcF9kaWZmID09IDApCi0JCUlXTF9ERUJVR19QT1dFUigiU2FtZSB0ZW1wLCBcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNhbWUgdGVtcCwgXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19QT1dFUigiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLCBcbiIsIHRlbXBfZGlmZik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLCBcbiIsIHRlbXBfZGlmZik7CiAKIAlpZiAodGVtcF9kaWZmIDwgSVdMX1RFTVBFUkFUVVJFX1RIUkVTSE9MRCkgewotCQlJV0xfREVCVUdfUE9XRVIoIlRoZXJtYWwgdHhwb3dlciBjYWxpYiBub3QgbmVlZGVkXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbm90IG5lZWRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5lZWRlZFxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbmVlZGVkXG4iKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTc5MywxMiArMTc5MywxMiBAQAogCiAJaWYgKHByaXYtPnRlbXBlcmF0dXJlICE9IHRlbXApIHsKIAkJaWYgKHByaXYtPnRlbXBlcmF0dXJlKQotCQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlIGNoYW5nZWQgIgorCQkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlRlbXBlcmF0dXJlIGNoYW5nZWQgIgogCQkJCSAgICAgICAiZnJvbSAlZEMgdG8gJWRDXG4iLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyhwcml2LT50ZW1wZXJhdHVyZSksCiAJCQkJICAgICAgIEtFTFZJTl9UT19DRUxTSVVTKHRlbXApKTsKIAkJZWxzZQotCQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlICIKKwkJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSAiCiAJCQkJICAgICAgICJpbml0aWFsaXplZCB0byAlZENcbiIsCiAJCQkJICAgICAgIEtFTFZJTl9UT19DRUxTSVVTKHRlbXApKTsKIAl9CkBAIC0xODM3LDcgKzE4MzcsOCBAQAogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTA4LDcgKzE5MDksOCBAQAogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTg2LDggKzE5ODgsOCBAQAogCWFkZHN0YS0+YWRkX2ltbWVkaWF0ZV9iYV90aWQgPSBjbWQtPmFkZF9pbW1lZGlhdGVfYmFfdGlkOwogCWFkZHN0YS0+cmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQgPSBjbWQtPnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkOwogCWFkZHN0YS0+YWRkX2ltbWVkaWF0ZV9iYV9zc24gPSBjbWQtPmFkZF9pbW1lZGlhdGVfYmFfc3NuOwotCWFkZHN0YS0+cmVzZXJ2ZWQxID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKLQlhZGRzdGEtPnJlc2VydmVkMiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7CisJYWRkc3RhLT5yZXNlcnZlZDEgPSBjcHVfdG9fbGUxNigwKTsKKwlhZGRzdGEtPnJlc2VydmVkMiA9IGNwdV90b19sZTMyKDApOwogCiAJcmV0dXJuICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQpOwogfQpAQCAtMjAxMyw3ICsyMDE1LDcgQEAKIAlpbnQgaSwgc2gsIGlkeDsKIAl1MTYgc2VxOwogCWlmIChhZ2ctPndhaXRfZm9yX2JhKQotCQlJV0xfREVCVUdfVFhfUkVQTFkoImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJnb3QgdHggcmVzcG9uc2Ugdy9vIGJsb2NrLWFja1xuIik7CiAKIAlhZ2ctPmZyYW1lX2NvdW50ID0gdHhfcmVzcC0+ZnJhbWVfY291bnQ7CiAJYWdnLT5zdGFydF9pZHggPSBzdGFydF9pZHg7CkBAIC0yMDI3LDcgKzIwMjksNyBAQAogCQlpZHggPSBzdGFydF9pZHg7CiAKIAkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiAqLwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCiAJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsIGlkeCk7CiAKIAkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKTsKQEAgLTIwMzgsOSArMjA0MCw5IEBACiAJCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCByYXRlX25fZmxhZ3MsIGluZm8pOwogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0yMDYwLDIxICsyMDYyLDIxIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAotCQkJCQkgIGlkeCwgU0VRX1RPX1NOKHNjKSwKLQkJCQkJICBoZHItPnNlcV9jdHJsKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCisJCQkJCSIgaWR4PSVkLCBzZXFfaWR4PSVkLCBzZXE9JWRcbiIsCisJCQkJCWlkeCwgU0VRX1RPX1NOKHNjKSwgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0yMDkyLDEzICsyMDk0LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0yMTI5LDcgKzIxMzEsNyBAQAogCXU4ICpxYyA9IE5VTEw7CiAKIAlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQoJnR4cS0+cSwgaW5kZXgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWRcbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHR4cS0+cS5uX2JkLCB0eHEtPnEud3JpdGVfcHRyLAogCQkJICB0eHEtPnEucmVhZF9wdHIpOwpAQCAtMjE0Nyw3ICsyMTQ5LDcgQEAKIAogCXN0YV9pZCA9IGl3bF9nZXRfcmFfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHR4cS0+c2NoZWRfcmV0cnkgJiYgdW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKSB7Ci0JCUlXTF9FUlJPUigiU3RhdGlvbiBub3Qga25vd25cbiIpOworCQlJV0xfRVJSKHByaXYsICJTdGF0aW9uIG5vdCBrbm93blxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNjcsNyArMjE2OSw3IEBACiAKIAkJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoc2NkX3NzbiAmIDB4ZmYpKSB7CiAJCQlpbmRleCA9IGl3bF9xdWV1ZV9kZWNfd3JhcChzY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gc2NkX3NzbiAiCiAJCQkJCSAgICIlZCBpbmRleCAlZFxuIiwgc2NkX3NzbiAsIGluZGV4KTsKIAkJCWZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CkBAIC0yMTc2LDEwICsyMTc4LDkgQEAKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgogCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpIHsKIAkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKLQkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJCQkJZWxzZQotCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywKLQkJCQkJCQkgICAgIHR4cS0+c3dxX2lkKTsKKwkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTIxOTAsNyArMjE5MSw3IEBACiAJCQkJCWxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCiAJCQkJCWluZm8pOwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSAiCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSAiCiAJCQkJICAgInJhdGVfbl9mbGFncyAweCV4IHJldHJpZXMgJWRcbiIsCiAJCQkJICAgdHhxX2lkLAogCQkJCSAgIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oc3RhdHVzKSwgc3RhdHVzLApAQCAtMjIwMywxNCArMjIwNCwxNCBAQAogCiAJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSkKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOworCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxX2lkKTsKIAl9CiAKIAlpZiAocWMgJiYgbGlrZWx5KHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bDQ5NjVfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyMzgsMTMgKzIyMzksMTMgQEAKIAkJaWYgKHZhbGlkX2FudGVubmFlICYgKDEgPDwgaSkpCiAJCQltYXhfcnNzaSA9IG1heChuY3BoeS0+cnNzaV9pbmZvW2kgPDwgMV0sIG1heF9yc3NpKTsKIAotCUlXTF9ERUJVR19TVEFUUygiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAogCQluY3BoeS0+cnNzaV9pbmZvWzBdLCBuY3BoeS0+cnNzaV9pbmZvWzJdLCBuY3BoeS0+cnNzaV9pbmZvWzRdLAogCQltYXhfcnNzaSwgYWdjKTsKIAogCS8qIGRCbSA9IG1heF9yc3NpIGRCIC0gYWdjIGRCIC0gY29uc3RhbnQuCiAJICogSGlnaGVyIEFHQyAoaGlnaGVyIHJhZGlvIGdhaW4pIG1lYW5zIGxvd2VyIHNpZ25hbC4gKi8KLQlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKIApAQCAtMjI4Nyw2ICsyMjg4LDkgQEAKIAkudHhxX3NldF9zY2hlZCA9IGl3bDQ5NjVfdHhxX3NldF9zY2hlZCwKIAkudHhxX2FnZ19lbmFibGUgPSBpd2w0OTY1X3R4cV9hZ2dfZW5hYmxlLAogCS50eHFfYWdnX2Rpc2FibGUgPSBpd2w0OTY1X3R4cV9hZ2dfZGlzYWJsZSwKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKKwkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bDQ5NjVfcnhfaGFuZGxlcl9zZXR1cCwKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bDQ5NjVfc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuY2FuY2VsX2RlZmVycmVkX3dvcmsgPSBpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCmluZGV4IDgyYzM4NTkuLjE1Y2FjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OCwxMCArNjgsMTYgQEAKICNpZm5kZWYgX19pd2xfNTAwMF9od19oX18KICNkZWZpbmUgX19pd2xfNTAwMF9od19oX18KIAorI2RlZmluZSBJV0w1MF9SVENfSU5TVF9MT1dFUl9CT1VORAkJKDB4MDAwMDAwKQogI2RlZmluZSBJV0w1MF9SVENfSU5TVF9VUFBFUl9CT1VORAkJKDB4MDIwMDAwKQorCisjZGVmaW5lIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5ECQkoMHg4MDAwMDApCiAjZGVmaW5lIElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5ECQkoMHg4MEMwMDApCi0jZGVmaW5lIElXTDUwX1JUQ19JTlNUX1NJWkUgKElXTDUwX1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gUlRDX0lOU1RfTE9XRVJfQk9VTkQpCi0jZGVmaW5lIElXTDUwX1JUQ19EQVRBX1NJWkUgKElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpCisKKyNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfU0laRSAoSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNTBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDUwX1JUQ19EQVRBX1NJWkUgKElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKQogCiAvKiBFRVBST00gKi8KICNkZWZpbmUgSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFCQkJMjA0OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDY2ZDA1M2QuLmU1Y2EyNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQzLDEwICs0MywxMSBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC01MDAwLWh3LmgiCisjaW5jbHVkZSAiaXdsLTYwMDAtaHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgSVdMNTAwMF9VQ09ERV9BUElfTUFYIDEKLSNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDEKKyNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDIKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NSU4gMQpAQCAtODQsNyArODUsNyBAQAogCQkJCSAgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfSU5GTygic3RvcCBtYXN0ZXJcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJzdG9wIG1hc3RlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOCw3ICsxMDksOCBAQAogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0hBUF9XQUtFX0wxQSk7CiAKLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CisJaWYgKHByaXYtPmNmZy0+bmVlZF9wbGxfY2ZnKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CiAKIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCiAJICogRDBVKiAtLT4gRDBBKiBzdGF0ZSAqLwpAQCAtMTE4LDcgKzEyMCw3IEBACiAJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE3Niw3ICsxNzgsOCBAQAogCiAJLyogRklYTUU6IHB1dCBoZXJlIEwxQSAtTDBTIHcvYSAqLwogCi0JaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOworCWlmIChwcml2LT5jZmctPm5lZWRfcGxsX2NmZykKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOwogCiAJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlcgogCSAqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KQEAgLTE4Niw3ICsxODksNyBAQAogCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjE2LDE4ICsyMTksMTkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiByYWRpb19jZmc7Ci0JdTE2IGxpbms7CisJdTE2IGxjdGw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZsaW5rKTsKKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CiAKLQkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KLQlpZiAoKGxpbmsgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKLQkJLyogZGlzYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkvKiBIVyBidWcgVy9BICovCisJLyogTDEtQVNQTSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KKwlpZiAoKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKKwkJLyogTDEtQVBTTSBlbmFibGVkOiBkaXNhYmxlIEwwUyAgKi8KIAkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAJZWxzZQotCQkvKiBMMFMgZW5hYmxlZCBMMUEgZGlzYWJsZWQgKi8KKwkJLyogTDEtQVNQTSBkaXNhYmxlZDogZW5hYmxlIEwwUyAqLwogCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HSU9fUkVHLCBDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOwogCiAJcmFkaW9fY2ZnID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9SQURJT19DT05GSUcpOwpAQCAtMjg5LDcgKzI5Myw3IEBACiAJCW9mZnNldCA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNTAwMF9MSU5LX09USEVSUyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiaWxsZWdhbCBpbmRpcmVjdCB0eXBlOiAweCVYXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbGxlZ2FsIGluZGlyZWN0IHR5cGU6IDB4JVhcbiIsCiAJCWFkZHJlc3MgJiBJTkRJUkVDVF9UWVBFX01TSyk7CiAJCWJyZWFrOwogCX0KQEAgLTMzOCw3ICszNDIsNyBAQAogCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldIHw9ICgxIDw8IDIpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiRGVsdGEgZ2FpbnM6IEFOVF9CID0gJWQgIEFOVF9DID0gJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJEZWx0YSBnYWluczogQU5UX0IgPSAlZCAgQU5UX0MgPSAlZFxuIiwKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVsxXSwgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKIAogCWlmICghZGF0YS0+cmFkaW9fd3JpdGUpIHsKQEAgLTM4NCwxMyArMzg4LDE0IEBACiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKIAkJCQkJc2l6ZW9mKGNtZCksICZjbWQpOwogCQlpZiAocmV0KQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7Ci0JCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCit2b2lkIGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCV9fbGUzMiAqdHhfZmxhZ3MpCiB7CiAJaWYgKChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB8fApAQCAtNTA3LDcgKzUxMiw3IEBACiAJCWluZGV4ID0gSVdMX0NBTElCX0JBU0VfQkFORDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbmtub3duIGNhbGlicmF0aW9uIG5vdGlmaWNhdGlvbiAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiVW5rbm93biBjYWxpYnJhdGlvbiBub3RpZmljYXRpb24gJWRcbiIsCiAJCQkgIGhkci0+b3BfY29kZSk7CiAJCXJldHVybjsKIAl9CkBAIC01MTcsNyArNTIyLDcgQEAKIHN0YXRpYyB2b2lkIGl3bDUwMDBfcnhfY2FsaWJfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCUlXTF9ERUJVR19JTkZPKCJJbml0LiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQsIHJlc3RhcnRpbmcgZncuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdC4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkLCByZXN0YXJ0aW5nIGZ3LlxuIik7CiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKIH0KIApAQCAtNTgwLDQwICs1ODUsNDEgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHByaXYsIGluc3RfaW1hZ2UsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlyZXQgPSBpd2w1MDAwX2xvYWRfc2VjdGlvbihwcml2LCBpbnN0X2ltYWdlLAorCQkJCSAgIElXTDUwX1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIklOU1QgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJTlNUIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCiAJCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwogCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCiAJCQkidG8gaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvblxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAogCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlID0gMDsKIAogCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKAotCQlwcml2LCBkYXRhX2ltYWdlLCBSVENfREFUQV9MT1dFUl9CT1VORCk7CisJCXByaXYsIGRhdGFfaW1hZ2UsIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJEQVRBIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKIAkJCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSwgNSAqIEhaKTsKIAlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgogCQkJInRvIGludGVycnVwdFxuIik7CiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmICghcmV0KSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBEQVRBIHVDb2RlIHNlY3Rpb25cbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9IGVsc2UKIAkJcmV0ID0gMDsKQEAgLTYyOSwyMCArNjM1LDIwIEBACiAKIAkvKiBjaGVjayB3aGV0aGVyIGluaXQgdWNvZGUgc2hvdWxkIGJlIGxvYWRlZCwgb3IgcmF0aGVyIHJ1bnRpbWUgdWNvZGUgKi8KIAlpZiAocHJpdi0+dWNvZGVfaW5pdC5sZW4gJiYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfTk9ORSkpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgZm91bmQuIExvYWRpbmcgaW5pdCB1Y29kZS4uLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGZvdW5kLiBMb2FkaW5nIGluaXQgdWNvZGUuLi5cbiIpOwogCQlyZXQgPSBpd2w1MDAwX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKIAkJCSZwcml2LT51Y29kZV9pbml0LCAmcHJpdi0+dWNvZGVfaW5pdF9kYXRhKTsKIAkJaWYgKCFyZXQpIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKIAkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9JTklUOwogCQl9CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgbm90IGZvdW5kLCBvciBhbHJlYWR5IGxvYWRlZC4gIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCiAJCQkiTG9hZGluZyBydW50aW1lIHVjb2RlLi4uXG4iKTsKIAkJcmV0ID0gaXdsNTAwMF9sb2FkX2dpdmVuX3Vjb2RlKHByaXYsCiAJCQkmcHJpdi0+dWNvZGVfY29kZSwgJnByaXYtPnVjb2RlX2RhdGEpOwogCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwogCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1JUOwogCQl9CiAJfQpAQCAtNjU4LDcgKzY2NCw3IEBACiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNjY4LDE0ICs2NzQsMTUgQEAKIAlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbjogJWRcbiIsIHJldCk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTcxMCw3ICs3MTcsNyBAQAogCiAJdHhxLT5zY2hlZF9yZXRyeSA9IHNjZF9yZXRyeTsKIAotCUlXTF9ERUJVR19JTkZPKCIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJXMgJXMgUXVldWUgJWQgb24gQUMgJWRcbiIsCiAJCSAgICAgICBhY3RpdmUgPyAiQWN0aXZhdGUiIDogIkRlYWN0aXZhdGUiLAogCQkgICAgICAgc2NkX3JldHJ5ID8gIkJBIiA6ICJBQyIsIHR4cV9pZCwgdHhfZmlmb19pZCk7CiB9CkBAIC04MjQsOCArODMxLDkgQEAKIHsKIAlpZiAoKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+IElXTDUwX05VTV9RVUVVRVMpIHx8CiAJICAgIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7Ci0JCUlXTF9FUlJPUigiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCi0JCQkgIElXTF9NSU5fTlVNX1FVRVVFUywgSVdMNTBfTlVNX1FVRVVFUyk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMNTBfTlVNX1FVRVVFUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODMzLDYzICs4NDEsNDcgQEAKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg1MF9UQ1NSX0NITkxfTlVNOwogCXByaXYtPmh3X3BhcmFtcy5zY2RfYmNfdGJsc19zaXplID0KIAkJCUlXTDUwX05VTV9RVUVVRVMgKiBzaXplb2Yoc3RydWN0IGl3bDUwMDBfc2NkX2JjX3RibCk7CisJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKIAlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNTAwMF9TVEFUSU9OX0NPVU5UOwogCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w1MDAwX0JST0FEQ0FTVF9JRDsKLQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDUwX1JUQ19EQVRBX1NJWkU7Ci0JcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w1MF9SVENfSU5TVF9TSVpFOworCisJc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7CisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNngwMDoKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDUwOgorCQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDYwX1JUQ19EQVRBX1NJWkU7CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNjBfUlRDX0lOU1RfU0laRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w1MF9SVENfREFUQV9TSVpFOworCQlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDUwX1JUQ19JTlNUX1NJWkU7CisJfQorCiAJcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSA9IDA7CiAJcHJpdi0+aHdfcGFyYW1zLmZhdF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOworCiAJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNTAwMF9zZW5zaXRpdml0eTsKIAotCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6Ci0JCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0I7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUI7Ci0JCWJyZWFrOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxNTA6Ci0JCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0E7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUI7Ci0JCWJyZWFrOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAzOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDM7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQUJDOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gQU5UX0FCQzsKLQkJYnJlYWs7Ci0JfQorCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7CisJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKKwlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQ7CisJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfcnhfYW50OwogCiAJc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6Ci0JCS8qIDVYMDAgYW5kIDUzNTAgd2FudHMgaW4gQ2Vsc2l1cyAqLwotCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKLQkJYnJlYWs7CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTE1MDoKIAkJLyogNTE1MCB3YW50cyBpbiBLZWx2aW4gKi8KIAkJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0KIAkJCQlpd2w1MTUwX2dldF9jdF90aHJlc2hvbGQocHJpdik7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGFsbCBvdGhlcnMgd2FudCBDZWxzaXVzICovCisJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOworCQlicmVhazsKIAl9CiAKIAkvKiBTZXQgaW5pdGlhbCBjYWxpYnJhdGlvbiBzZXQgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLmNhbGliX2luaXRfY2ZnID0KLQkJCUJJVChJV0xfQ0FMSUJfWFRBTCkJCXwKLQkJCUJJVChJV0xfQ0FMSUJfTE8pCQl8Ci0JCQlCSVQoSVdMX0NBTElCX1RYX0lRKSAJCXwKLQkJCUJJVChJV0xfQ0FMSUJfVFhfSVFfUEVSRCkJfAotCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOwotCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9EQykJCXwKQEAgLTg5OCw2ICs4OTAsMTQgQEAKIAkJCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKIAogCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAorCQkJQklUKElXTF9DQUxJQl9MTykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8CisJCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisJCWJyZWFrOwogCX0KIAogCkBAIC0xMDExLDcgKzEwMTEsOCBAQAogCiAJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDUwX05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDc2LDcgKzEwNzcsOCBAQAogCiAJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX0VSUihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDQsNyArMTEwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCit1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCiB7CiAJdTE2IHNpemUgPSAodTE2KXNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpOwogCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOwpAQCAtMTE0Miw3ICsxMTQ0LDcgQEAKIAl1MTYgc2VxOwogCiAJaWYgKGFnZy0+d2FpdF9mb3JfYmEpCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKIAogCWFnZy0+ZnJhbWVfY291bnQgPSB0eF9yZXNwLT5mcmFtZV9jb3VudDsKIAlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeDsKQEAgLTExNTYsNyArMTE1OCw3IEBACiAJCWlkeCA9IHN0YXJ0X2lkeDsKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uICovCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOwpAQCAtMTE2OCw5ICsxMTcwLDkgQEAKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0xMTkwLDIxICsxMTkyLDIyIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKKwkJCQkJIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKIAkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCiAJCQkJCSAgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0xMjIyLDEzICsxMjI1LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0xMjU0LDcgKzEyNTcsNyBAQAogCWludCBmcmVlZDsKIAogCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0xMjgxLDcgKzEyODQsNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gIgorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSAiCiAJCQkJCSJzY2Rfc3NuPSVkIGlkeD0lZCB0eHE9JWQgc3dxPSVkXG4iLAogCQkJCQlzY2Rfc3NuICwgaW5kZXgsIHR4cV9pZCwgdHhxLT5zd3FfaWQpOwogCkBAIC0xMjkyLDEwICsxMjk1LDkgQEAKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgogCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpIHsKIAkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKLQkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJCQkJZWxzZQotCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywKLQkJCQkJCQkgICAgIHR4cS0+c3dxX2lkKTsKKwkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTEzMDgsNyArMTMxMCw3IEBACiAJCQkJCWxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCiAJCQkJCWluZm8pOwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSByYXRlX25fZmxhZ3MgIgorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRYUSAlZCBzdGF0dXMgJXMgKDB4JTA4eCkgcmF0ZV9uX2ZsYWdzICIKIAkJCQkgICAiMHgleCByZXRyaWVzICVkXG4iLAogCQkJCSAgIHR4cV9pZCwKIAkJCQkgICBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKHN0YXR1cyksIHN0YXR1cywKQEAgLTEzMjEsMTggKzEzMjMsMTggQEAKIAogCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgdHhxX2lkKTsKKwkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJfQogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3Fvcyh0eF9yZXNwLT5mcmFtZV9jdHJsKSkKIAkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiAvKiBDdXJyZW50bHkgNTAwMCBpcyB0aGUgc3VwZXJzZXQgb2YgZXZlcnl0aGluZyAqLwotc3RhdGljIHUxNiBpd2w1MDAwX2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQordTE2IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCiB7CiAJcmV0dXJuIGxlbjsKIH0KQEAgLTEzNTYsNyArMTM1OCw3IEBACiAKIHN0YXRpYyBpbnQgaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQogewotCXJldHVybiAoYWRkciA+PSBSVENfREFUQV9MT1dFUl9CT1VORCkgJiYKKwlyZXR1cm4gKGFkZHIgPj0gSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCiAJCShhZGRyIDwgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQpOwogfQogCkBAIC0xMzc5LDcgKzEzODEsNyBAQAogCSAgICAocnhvbjEtPmFjcXVpc2l0aW9uX2RhdGEgPT0gcnhvbjItPmFjcXVpc2l0aW9uX2RhdGEpICYmCiAJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQwOSwxMiArMTQxMSwxOSBAQAogc3RhdGljIGludCAgaXdsNTAwMF9zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsNTAwMF90eF9wb3dlcl9kYm1fY21kIHR4X3Bvd2VyX2NtZDsKKwl1OCB0eF9hbnRfY2ZnX2NtZDsKIAogCS8qIGhhbGYgZEJtIG5lZWQgdG8gbXVsdGlwbHkgKi8KIAl0eF9wb3dlcl9jbWQuZ2xvYmFsX2xtdCA9IChzOCkoMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIAl0eF9wb3dlcl9jbWQuZmxhZ3MgPSBJV0w1MF9UWF9QT1dFUl9OT19DTE9TRUQ7CiAJdHhfcG93ZXJfY21kLnNydl9jaGFuX2xtdCA9IElXTDUwX1RYX1BPV0VSX0FVVE87Ci0JcmV0dXJuICBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1RYX1BPV0VSX0RCTV9DTUQsCisKKwlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID09IDEpCisJCXR4X2FudF9jZmdfY21kID0gUkVQTFlfVFhfUE9XRVJfREJNX0NNRF9WMTsKKwllbHNlCisJCXR4X2FudF9jZmdfY21kID0gUkVQTFlfVFhfUE9XRVJfREJNX0NNRDsKKworCXJldHVybiAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCB0eF9hbnRfY2ZnX2NtZCwKIAkJCQkgICAgICAgc2l6ZW9mKHR4X3Bvd2VyX2NtZCksICZ0eF9wb3dlcl9jbWQsCiAJCQkJICAgICAgIE5VTEwpOwogfQpAQCAtMTQyNiw3ICsxNDM1LDcgQEAKIH0KIAogLyogQ2FsYyBtYXggc2lnbmFsIGxldmVsIChkQm0pIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzICovCi1zdGF0aWMgaW50IGl3bDUwMDBfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK2ludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCkKIHsKIAkvKiBkYXRhIGZyb20gUEhZL0RTUCByZWdhcmRpbmcgc2lnbmFsIHN0cmVuZ3RoLCBldGMuLApAQCAtMTQ1NSwxOSArMTQ2NCwxOSBAQAogCW1heF9yc3NpID0gbWF4X3QodTMyLCByc3NpX2EsIHJzc2lfYik7CiAJbWF4X3Jzc2kgPSBtYXhfdCh1MzIsIG1heF9yc3NpLCByc3NpX2MpOwogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCiAJCXJzc2lfYSwgcnNzaV9iLCByc3NpX2MsIG1heF9yc3NpLCBhZ2MpOwogCiAJLyogZEJtID0gbWF4X3Jzc2kgZEIgLSBhZ2MgZEIgLSBjb25zdGFudC4KIAkgKiBIaWdoZXIgQUdDIChoaWdoZXIgcmFkaW8gZ2FpbikgbWVhbnMgbG93ZXIgc2lnbmFsLiAqLwotCXJldHVybiBtYXhfcnNzaSAtIGFnYyAtIElXTF9SU1NJX09GRlNFVDsKKwlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0w0OV9SU1NJX09GRlNFVDsKIH0KIAotc3RhdGljIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsNTAwMF9oY21kID0geworc3RydWN0IGl3bF9oY21kX29wcyBpd2w1MDAwX2hjbWQgPSB7CiAJLnJ4b25fYXNzb2MgPSBpd2w1MDAwX3NlbmRfcnhvbl9hc3NvYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlscyA9IHsKK3N0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNTAwMF9oY21kX3V0aWxzID0gewogCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCiAJLmdhaW5fY29tcHV0YXRpb24gPSBpd2w1MDAwX2dhaW5fY29tcHV0YXRpb24sCkBAIC0xNDc2LDEzICsxNDg1LDE2IEBACiAJLmNhbGNfcnNzaSA9IGl3bDUwMDBfY2FsY19yc3NpLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKK3N0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAogCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAogCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCiAJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLApAQCAtMTUxNywxMyArMTUyOSwxMyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CitzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wcyA9IHsKIAkubGliID0gJml3bDUwMDBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKIAkudXRpbHMgPSAmaXdsNTAwMF9oY21kX3V0aWxzLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zID0geworc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDUwX21vZF9wYXJhbXMgPSB7CiAJLm51bV9vZl9xdWV1ZXMgPSBJV0w1MF9OVU1fUVVFVUVTLAogCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMNTBfTlVNX0FNUERVX1FVRVVFUywKIAkuYW1zZHVfc2l6ZV84SyA9IDEsCkBAIC0xNTQzLDYgKzE1NTUsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2JnX2NmZyA9IHsKQEAgLTE1NTYsNiArMTU3MSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZyA9IHsKQEAgLTE1NjksNiArMTU4Nyw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWduX2NmZyA9IHsKQEAgLTE1ODIsNiArMTYwMyw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZyA9IHsKQEAgLTE1OTUsNiArMTYxOSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZyA9IHsKQEAgLTE2MDgsNiArMTYzNSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0EsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0w1MDAwX01PRFVMRV9GSVJNV0FSRShJV0w1MDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE4NTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFBsZWFzZSB1c2UgdGhpcyBmaWxlIChpd2wtNjAwMC1ody5oKSBvbmx5IGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgorICogVXNlIGl3bC01MDAwLWNvbW1hbmRzLmggZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KKyAqLworCisjaWZuZGVmIF9faXdsXzYwMDBfaHdfaF9fCisjZGVmaW5lIF9faXdsXzYwMDBfaHdfaF9fCisKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfTE9XRVJfQk9VTkQJCSgweDAwMDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfVVBQRVJfQk9VTkQJCSgweDA0MDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgxNDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfU0laRSBcCisJKElXTDYwX1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gSVdMNjBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX1NJWkUgXAorCShJV0w2MF9SVENfREFUQV9VUFBFUl9CT1VORCAtIElXTDYwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKQorCisjZW5kaWYgLyogX19pd2xfNjAwMF9od19oX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmE1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKyNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgorCisvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggMgorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggMgorCisvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCisjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01JTiAxCisjZGVmaW5lIElXTDYwNTBfVUNPREVfQVBJX01JTiAxCisKKyNkZWZpbmUgSVdMNjAwMF9GV19QUkUgIml3bHdpZmktNjAwMC0iCisjZGVmaW5lIF9JV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorCisjZGVmaW5lIElXTDYwNTBfRldfUFJFICJpd2x3aWZpLTYwNTAtIgorI2RlZmluZSBfSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCisjZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNjAwMF9oY21kX3V0aWxzID0geworCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAorCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCisJLnJ0c190eF9jbWRfZmxhZyA9IGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnLAorCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2w2MDAwX29wcyA9IHsKKwkubGliID0gJml3bDUwMDBfbGliLAorCS5oY21kID0gJml3bDUwMDBfaGNtZCwKKwkudXRpbHMgPSAmaXdsNjAwMF9oY21kX3V0aWxzLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnID0geworCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBRyIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDUwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAzeDMgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzNhZ25fY2ZnID0geworCS5uYW1lID0gIjYwNTAgU2VyaWVzIDN4MyBBR04iLAorCS5md19uYW1lX3ByZSA9IElXTDYwNTBfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAorCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDYwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUJDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUJDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX1VDT0RFX0FQSV9NQVgpKTsKK01PRFVMRV9GSVJNV0FSRShJV0w2MDUwX01PRFVMRV9GSVJNV0FSRShJV0w2MDUwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLWNoZWNrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODEzN2VlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLWNoZWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotICogVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaXdsLWRldi5oIgotI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgotI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgotCi0KLS8qKgotICogaXdsX2NoZWNrX3J4b25fY21kIC0gdmFsaWRhdGUgUlhPTiBzdHJ1Y3R1cmUgaXMgdmFsaWQKLSAqCi0gKiBOT1RFOiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZHVyaW5nIGRldmVsb3BtZW50IGFuZCBjYW4gZXZlbnR1YWxseQotICogYmUgI2lmZGVmJ2Qgb3V0IG9uY2UgdGhlIGRyaXZlciBpcyBzdGFibGUgYW5kIGZvbGtzIGFyZW4ndCBhY3RpdmVseQotICogbWFraW5nIGNoYW5nZXMKLSAqLwotaW50IGl3bF9hZ25fY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjb3VudGVyID0gMTsKLQotCWlmIChyeG9uLT5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgewotCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmCi0JCQkJKFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0sgfAotCQkJCSBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLKSk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayAyNEcgZmllbGRzICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCX0gZWxzZSB7Ci0JCWVycm9yIHw9IChyeG9uLT5mbGFncyAmIFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSA/Ci0JCQkJMCA6IGxlMzJfdG9fY3B1KFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDUyIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDUyIENDSyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9Ci0JZXJyb3IgfD0gKHJ4b24tPm5vZGVfYWRkclswXSB8IHJ4b24tPmJzc2lkX2FkZHJbMF0pICYgMHgxOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIG1hYyBhZGRyICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JLyogbWFrZSBzdXJlIGJhc2ljIHJhdGVzIDZNYnBzIGFuZCAxTWJwcyBhcmUgc3VwcG9ydGVkICovCi0JZXJyb3IgfD0gKCgocnhvbi0+b2ZkbV9iYXNpY19yYXRlcyAmIElXTF9SQVRFXzZNX01BU0spID09IDApICYmCi0JCSAgKChyeG9uLT5jY2tfYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV8xTV9NQVNLKSA9PSAwKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYmFzaWMgcmF0ZSAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9IChsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkgPiAyMDA3KTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBhc3NvYyBpZCAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSkKLQkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgYW5kIHNob3J0IHNsb3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSykpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIENDSyAmIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8Ci0JCQlSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spKSA9PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIFRHRyBhbmQgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoIlR1bmluZyB0byBjaGFubmVsICVkXG4iLAotCQkJICAgIGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpKTsKLQotCWlmIChlcnJvcikgewotCQlJV0xfRVJST1IoIk5vdCBhIHZhbGlkIGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgZmllbGQgdmFsdWVzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCAyN2Y1MDQ3Li5jYWI3ODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00OSw2ICs0OSw4IEBACiAjZGVmaW5lIElXTF9SQVRFX01JTl9GQUlMVVJFX1RICQk2CS8qIG1pbiBmYWlsdXJlcyB0byBjYWxjIHRwdCAqLwogI2RlZmluZSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USAkJOAkvKiBtaW4gc3VjY2Vzc2VzIHRvIGNhbGMgdHB0ICovCiAKKy8qIG1heCBhbGxvd2VkIHJhdGUgbWlzcyBiZWZvcmUgc3luYyBMUSBjbWQgKi8KKyNkZWZpbmUgSVdMX01JU1NFRF9SQVRFX01BWAkJMTUKIC8qIG1heCB0aW1lIHRvIGFjY3VtIGhpc3RvcnkgMiBzZWNvbmRzICovCiAjZGVmaW5lIElXTF9SQVRFX1NDQUxFX0ZMVVNIX0lOVFZMICAgKDIqSFopCiAKQEAgLTE0OCw2ICsxNTAsOCBAQAogCXUxNiBhY3RpdmVfbWltbzJfcmF0ZTsKIAl1MTYgYWN0aXZlX21pbW8zX3JhdGU7CiAJdTE2IGFjdGl2ZV9yYXRlX2Jhc2ljOworCXM4IG1heF9yYXRlX2lkeDsgICAgIC8qIE1heCByYXRlIHNldCBieSB1c2VyICovCisJdTggbWlzc2VkX3JhdGVfY291bnRlcjsKIAogCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCBscTsKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvIGxxX2luZm9bTFFfU0laRV07IC8qICJhY3RpdmUiLCAic2VhcmNoIiAqLwpAQCAtMzU2LDcgKzM2MCw3IEBACiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlpZiAocnNfdGxfZ2V0X2xvYWQobHFfZGF0YSwgdGlkKSA+IElXTF9BR0dfTE9BRF9USFJFU0hPTEQpIHsKLQkJSVdMX0RFQlVHX0hUKCJTdGFydGluZyBUeCBhZ2c6IFNUQTogJXBNIHRpZDogJWRcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAogCQkJCXN0YS0+YWRkciwgdGlkKTsKIAkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24ocHJpdi0+aHcsIHN0YS0+YWRkciwgdGlkKTsKIAl9CkBAIC00NjMsOCArNDY3LDkgQEAKICAqIEZpbGwgdUNvZGUgQVBJIHJhdGVfbl9mbGFncyBmaWVsZCwgYmFzZWQgb24gInNlYXJjaCIgb3IgImFjdGl2ZSIgdGFibGUuCiAgKi8KIC8qIEZJWE1FOlJTOnJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZCBwdXQgdGhlIGZsYWdzIHN0YXRpY2FsbHkgaW4gdGhlIHRhYmxlICovCi1zdGF0aWMgdTMyIHJhdGVfbl9mbGFnc19mcm9tX3RibChzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwsCi0JCQkJICAgICAgIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQorc3RhdGljIHUzMiByYXRlX25fZmxhZ3NfZnJvbV90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwsCisJCQkJIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQogewogCXUzMiByYXRlX25fZmxhZ3MgPSAwOwogCkBAIC00NzUsNyArNDgwLDcgQEAKIAogCX0gZWxzZSBpZiAoaXNfSHQodGJsLT5scV90eXBlKSkgewogCQlpZiAoaW5kZXggPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHsKLQkJCUlXTF9FUlJPUigiaW52YWxpZCBIVCByYXRlIGluZGV4ICVkXG4iLCBpbmRleCk7CisJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIEhUIHJhdGUgaW5kZXggJWRcbiIsIGluZGV4KTsKIAkJCWluZGV4ID0gSVdMX0xBU1RfT0ZETV9SQVRFOwogCQl9CiAJCXJhdGVfbl9mbGFncyA9IFJBVEVfTUNTX0hUX01TSzsKQEAgLTQ4Nyw3ICs0OTIsNyBAQAogCQllbHNlCiAJCQlyYXRlX25fZmxhZ3MgfD0JaXdsX3JhdGVzW2luZGV4XS5wbGNwX21pbW8zOwogCX0gZWxzZSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCB0YmwtPmxxX3R5cGUgJWRcbiIsIHRibC0+bHFfdHlwZSk7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgdGJsLT5scV90eXBlICVkXG4iLCB0YmwtPmxxX3R5cGUpOwogCX0KIAogCXJhdGVfbl9mbGFncyB8PSAoKHRibC0+YW50X3R5cGUgPDwgUkFURV9NQ1NfQU5UX1BPUykgJgpAQCAtNTA3LDcgKzUxMiw3IEBACiAJCQlyYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfR0ZfTVNLOwogCQkJaWYgKGlzX3Npc28odGJsLT5scV90eXBlKSAmJiB0YmwtPmlzX1NHSSkgewogCQkJCXJhdGVfbl9mbGFncyAmPSB+UkFURV9NQ1NfU0dJX01TSzsKLQkJCQlJV0xfRVJST1IoIkdGIHdhcyBzZXQgd2l0aCBTR0k6U0lTT1xuIik7CisJCQkJSVdMX0VSUihwcml2LCAiR0Ygd2FzIHNldCB3aXRoIFNHSTpTSVNPXG4iKTsKIAkJCX0KIAkJfQogCX0KQEAgLTY4OCw3ICs2OTMsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBsb3cpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtNjk4LDcgKzcwMyw3IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTc1OCw3ICs3NjMsNyBAQAogCQlsb3cgPSBzY2FsZV9pbmRleDsKIAogb3V0OgotCXJldHVybiByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBsb3csIGlzX2dyZWVuKTsKKwlyZXR1cm4gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKGxxX3N0YS0+ZHJ2LCB0YmwsIGxvdywgaXNfZ3JlZW4pOwogfQogCiAvKgpAQCAtNzg1LDcgKzc5MCw3IEBACiAJdTggYWN0aXZlX2luZGV4ID0gMDsKIAlzMzIgdHB0ID0gMDsKIAotCUlXTF9ERUJVR19SQVRFX0xJTUlUKCJnZXQgZnJhbWUgYWNrIHJlc3BvbnNlLCB1cGRhdGUgcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOworCUlXTF9ERUJVR19SQVRFX0xJTUlUKHByaXYsICJnZXQgZnJhbWUgYWNrIHJlc3BvbnNlLCB1cGRhdGUgcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOwogCiAJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQpAQCAtNzk2LDcgKzgwMSwxMCBAQAogCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpKQogCQlyZXR1cm47CiAKLQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKKwkJcmV0cmllcyA9IDA7CisJZWxzZQorCQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKIAogCWlmIChyZXRyaWVzID4gMTUpCiAJCXJldHJpZXMgPSAxNTsKQEAgLTgzNSwxNCArODQzLDE5IEBACiAJICAgICghISh0eF9yYXRlICYgUkFURV9NQ1NfR0ZfTVNLKSAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpKSB8fAogCSAgICAoaHctPndpcGh5LT5iYW5kc1twcml2LT5iYW5kXS0+Yml0cmF0ZXNbcnNfaW5kZXhdLmJpdHJhdGUgIT0KIAkgICAgIGh3LT53aXBoeS0+YmFuZHNbaW5mby0+YmFuZF0tPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmJpdHJhdGUpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CiAJCS8qIHRoZSBsYXN0IExRIGNvbW1hbmQgY291bGQgZmFpbGVkIHNvIHRoZSBMUSBpbiB1Y29kZSBub3QKIAkJICogdGhlIHNhbWUgaW4gZHJpdmVyIHN5bmMgdXAKIAkJICovCi0JCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwkJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyKys7CisJCWlmIChscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPiBJV0xfTUlTU0VEX1JBVEVfTUFYKSB7CisJCQlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSAwOworCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIAorCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA9IDA7CiAJLyogVXBkYXRlIGZyYW1lIGhpc3Rvcnkgd2luZG93IHdpdGggImZhaWx1cmUiIGZvciBlYWNoIFR4IHJldHJ5LiAqLwogCXdoaWxlIChyZXRyaWVzKSB7CiAJCS8qIExvb2sgdXAgdGhlIHJhdGUgYW5kIG90aGVyIGluZm8gdXNlZCBmb3IgZWFjaCB0eCBhdHRlbXB0LgpAQCAtOTAzLDcgKzkxNiw3IEBACiAJCQl0cHQgPSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbcnNfaW5kZXhdOwogCQllbHNlCiAJCQl0cHQgPSAwOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKIAkJCXJzX2NvbGxlY3RfdHhfZGF0YShzZWFyY2hfd2luLCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTE5LDcgKzkzMiw3IEBACiAJCQl0cHQgPSBjdXJyX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTMxLDcgKzk0NCw3IEBACiAJLyogSWYgbm90IHNlYXJjaGluZyBmb3IgbmV3IG1vZGUsIGluY3JlbWVudCBzdWNjZXNzL2ZhaWxlZCBjb3VudGVyCiAJICogLi4uIHRoZXNlIGhlbHAgZGV0ZXJtaW5lIHdoZW4gdG8gc3RhcnQgc2VhcmNoaW5nIGFnYWluICovCiAJaWYgKGxxX3N0YS0+c3RheV9pbl90YmwpIHsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkgewogCQkJbHFfc3RhLT50b3RhbF9zdWNjZXNzICs9IGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwOwogCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQgKz0KIAkJCSAgICAgKGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuIC0gaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTYxLDcgKzk3NCw3IEBACiBzdGF0aWMgdm9pZCByc19zZXRfc3RheV9pbl90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGlzX2xlZ2FjeSwKIAkJCQkgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSkKIHsKLQlJV0xfREVCVUdfUkFURSgid2UgYXJlIHN0YXlpbmcgaW4gdGhlIHNhbWUgdGFibGVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJ3ZSBhcmUgc3RheWluZyBpbiB0aGUgc2FtZSB0YWJsZVxuIik7CiAJbHFfc3RhLT5zdGF5X2luX3RibCA9IDE7CS8qIG9ubHkgcGxhY2UgdGhpcyBnZXRzIHNldCAqLwogCWlmIChpc19sZWdhY3kpIHsKIAkJbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCA9IElXTF9MRUdBQ1lfVEFCTEVfQ09VTlQ7CkBAIC0xMTI5LDcgKzExNDIsNyBAQAogCXMzMiByYXRlOwogCXM4IGlzX2dyZWVuID0gbHFfc3RhLT5pc19ncmVlbjsKIAotCWlmICghY29uZi0+aHQuZW5hYmxlZCB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCWlmICghY29uZl9pc19odChjb25mKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PiAyKQpAQCAtMTE0MCw3ICsxMTUzLDcgQEAKIAlpZiAocHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPCAyKQogCQlyZXR1cm4gLTE7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6IHRyeSB0byBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogdHJ5IHRvIHN3aXRjaCB0byBNSU1PMlxuIik7CiAKIAl0YmwtPmxxX3R5cGUgPSBMUV9NSU1PMjsKIAl0YmwtPmlzX2R1cCA9IGxxX3N0YS0+aXNfZHVwOwpAQCAtMTE2OSwxNiArMTE4MiwxNiBAQAogCiAJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8yIGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOwogCiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJDYW4ndCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJDYW4ndCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCiAJCQkJCQlyYXRlLCByYXRlX21hc2spOwogCQlyZXR1cm4gLTE7CiAJfQotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZSwgaXNfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgcmF0ZSwgaXNfZ3JlZW4pOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAogCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLCBpc19ncmVlbik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTk2LDEwICsxMjA5LDEwIEBACiAJdTggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCXMzMiByYXRlOwogCi0JaWYgKCFjb25mLT5odC5lbmFibGVkIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJaWYgKCFjb25mX2lzX2h0KGNvbmYpIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogdHJ5IHRvIHN3aXRjaCB0byBTSVNPXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHRyeSB0byBzd2l0Y2ggdG8gU0lTT1xuIik7CiAKIAl0YmwtPmlzX2R1cCA9IGxxX3N0YS0+aXNfZHVwOwogCXRibC0+bHFfdHlwZSA9IExRX1NJU087CkBAIC0xMjMwLDE0ICsxMjQzLDE0IEBACiAJcnNfc2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHRibCk7CiAJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJjYW4gbm90IHN3aXRjaCB3aXRoIGluZGV4ICVkIHJhdGUgbWFzayAleFxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNhbiBub3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAogCQkJICAgICByYXRlLCByYXRlX21hc2spOwogCQlyZXR1cm4gLTE7CiAJfQotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZSwgaXNfZ3JlZW4pOwotCUlXTF9ERUJVR19SQVRFKCJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCisJdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCByYXRlLCBpc19ncmVlbik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKIAkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZSwgaXNfZ3JlZW4pOwogCXJldHVybiAwOwogfQpAQCAtMTI2Niw3ICsxMjc5LDcgQEAKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX0FOVEVOTkExOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOwogCiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAKQEAgLTEyOTAsNyArMTMwMyw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9TSVNPOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIFNJU09cbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBMZWdhY3kgc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJCQkvKiBTZXQgdXAgc2VhcmNoIHRhYmxlIHRvIHRyeSBTSVNPICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xMzA2LDcgKzEzMTksNyBAQAogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0FCOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0FDOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0JDOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHN3aXRjaCB0byBNSU1PMlxuIik7CiAKIAkJCS8qIFNldCB1cCBzZWFyY2ggdGFibGUgdG8gdHJ5IE1JTU8gKi8KIAkJCW1lbWNweShzZWFyY2hfdGJsLCB0YmwsIHN6KTsKQEAgLTEzNzUsNyArMTM4OCw3IEBACiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfQU5URU5OQTE6CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTSVNPIHRvZ2dsZSBBbnRlbm5hXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU0lTTyB0b2dnbGUgQW50ZW5uYVxuIik7CiAKIAkJCWlmICgodGJsLT5hY3Rpb24gPT0gSVdMX1NJU09fU1dJVENIX0FOVEVOTkExICYmCiAJCQkJCQkJdHhfY2hhaW5zX251bSA8PSAxKSB8fApAQCAtMTM5NCw3ICsxNDA3LDcgQEAKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfTUlNTzJfQUI6CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU8yX0FDOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9NSU1PMl9CQzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHN3aXRjaCB0byBNSU1PMlxuIik7CiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAwOwogCkBAIC0xNDIzLDE0ICsxNDM2LDE1IEBACiAJCQkJCQlIVF9TSE9SVF9HSV80ME1IWikpCiAJCQkJYnJlYWs7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyB0b2dnbGUgU0dJL05HSVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNJU08gdG9nZ2xlIFNHSS9OR0lcbiIpOwogCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlpZiAoaXNfZ3JlZW4pIHsKIAkJCQlpZiAoIXRibC0+aXNfU0dJKQogCQkJCQlicmVhazsKIAkJCQllbHNlCi0JCQkJCUlXTF9FUlJPUigiU0dJIHdhcyBzZXQgaW4gR0YrU0lTT1xuIik7CisJCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJCSJTR0kgd2FzIHNldCBpbiBHRitTSVNPXG4iKTsKIAkJCX0KIAkJCXNlYXJjaF90YmwtPmlzX1NHSSA9ICF0YmwtPmlzX1NHSTsKIAkJCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCBzZWFyY2hfdGJsKTsKQEAgLTE0MzksOCArMTQ1Myw5IEBACiAJCQkJaWYgKHRwdCA+PSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbaW5kZXhdKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCgKLQkJCQkJCXNlYXJjaF90YmwsIGluZGV4LCBpc19ncmVlbik7CisJCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPQorCQkJCXJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCBzZWFyY2hfdGJsLAorCQkJCQkJICAgICAgaW5kZXgsIGlzX2dyZWVuKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXRibC0+YWN0aW9uKys7CkBAIC0xNDg2LDcgKzE1MDEsNyBAQAogCQlzd2l0Y2ggKHRibC0+YWN0aW9uKSB7CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9BTlRFTk5BMToKIAkJY2FzZSBJV0xfTUlNTzJfU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PIHRvZ2dsZSBBbnRlbm5hc1xuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8gdG9nZ2xlIEFudGVubmFzXG4iKTsKIAogCQkJaWYgKHR4X2NoYWluc19udW0gPD0gMikKIAkJCQlicmVhazsKQEAgLTE1MDIsNyArMTUxNyw3IEBACiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0E6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0I6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0M6Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IE1JTU8yIHN3aXRjaCB0byBTSVNPXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTzIgc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJCQkvKiBTZXQgdXAgbmV3IHNlYXJjaCB0YWJsZSBmb3IgU0lTTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTUzNCw3ICsxNTQ5LDcgQEAKIAkJCQkJCUhUX1NIT1JUX0dJXzQwTUhaKSkKIAkJCQlicmVhazsKIAotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PIHRvZ2dsZSBTR0kvTkdJXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTyB0b2dnbGUgU0dJL05HSVxuIik7CiAKIAkJCS8qIFNldCB1cCBuZXcgc2VhcmNoIHRhYmxlIGZvciBNSU1PICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xNTUxLDggKzE1NjYsOSBAQAogCQkJCWlmICh0cHQgPj0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W2luZGV4XSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwoCi0JCQkJCQlzZWFyY2hfdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0KKwkJCQlyYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgc2VhcmNoX3RibCwKKwkJCQkJCSAgICAgIGluZGV4LCBpc19ncmVlbik7CiAJCQlnb3RvIG91dDsKIAogCQl9CkBAIC0xNjE2LDcgKzE2MzIsNyBAQAogCQkgICAgKGxxX3N0YS0+dG90YWxfc3VjY2VzcyA+IGxxX3N0YS0+bWF4X3N1Y2Nlc3NfbGltaXQpIHx8CiAJCSAgICAoKCFscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsKSAmJiAobHFfc3RhLT5mbHVzaF90aW1lcikKIAkJICAgICAmJiAoZmx1c2hfaW50ZXJ2YWxfcGFzc2VkKSkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogc3RheSBpcyBleHBpcmVkICVkICVkICVkXG46IiwKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RheSBpcyBleHBpcmVkICVkICVkICVkXG46IiwKIAkJCQkgICAgIGxxX3N0YS0+dG90YWxfZmFpbGVkLAogCQkJCSAgICAgbHFfc3RhLT50b3RhbF9zdWNjZXNzLAogCQkJCSAgICAgZmx1c2hfaW50ZXJ2YWxfcGFzc2VkKTsKQEAgLTE2MzksNyArMTY1NSw3IEBACiAJCQkgICAgbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCkgewogCQkJCWxxX3N0YS0+dGFibGVfY291bnQgPSAwOwogCi0JCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CiAJCQkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KAogCQkJCQkJJih0YmwtPndpbltpXSkpOwpAQCAtMTY4Nyw4ICsxNzAzLDkgQEAKIAl1MTYgaGlnaF9sb3c7CiAJczMyIHNyOwogCXU4IHRpZCA9IE1BWF9USURfQ09VTlQ7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGE7CiAKLQlJV0xfREVCVUdfUkFURSgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nCiAJICogbG93ZXN0IHJhdGUuICovCkBAIC0xNzIwLDEzICsxNzM3LDEzIEBACiAJLyogY3VycmVudCB0eCByYXRlICovCiAJaW5kZXggPSBscV9zdGEtPmxhc3RfdHhyYXRlX2lkeDsKIAotCUlXTF9ERUJVR19SQVRFKCJSYXRlIHNjYWxlIGluZGV4ICVkIGZvciB0eXBlICVkXG4iLCBpbmRleCwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiUmF0ZSBzY2FsZSBpbmRleCAlZCBmb3IgdHlwZSAlZFxuIiwgaW5kZXgsCiAJCSAgICAgICB0YmwtPmxxX3R5cGUpOwogCiAJLyogcmF0ZXMgYXZhaWxhYmxlIGZvciB0aGlzIGFzc29jaWF0aW9uLCBhbmQgZm9yIG1vZHVsYXRpb24gbW9kZSAqLwogCXJhdGVfbWFzayA9IHJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBoZHIsIHRibC0+bHFfdHlwZSk7CiAKLQlJV0xfREVCVUdfUkFURSgibWFzayAweCUwNFggXG4iLCByYXRlX21hc2spOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJtYXNrIDB4JTA0WCBcbiIsIHJhdGVfbWFzayk7CiAKIAkvKiBtYXNrIHdpdGggc3RhdGlvbiByYXRlIHJlc3RyaWN0aW9uICovCiAJaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7CkBAIC0xNzQ1LDE2ICsxNzYyLDI1IEBACiAJCXJhdGVfc2NhbGVfaW5kZXhfbXNrID0gcmF0ZV9tYXNrOwogCiAJaWYgKCEoKDEgPDwgaW5kZXgpICYgcmF0ZV9zY2FsZV9pbmRleF9tc2spKSB7Ci0JCUlXTF9FUlJPUigiQ3VycmVudCBSYXRlIGlzIG5vdCB2YWxpZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkN1cnJlbnQgUmF0ZSBpcyBub3QgdmFsaWRcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogR2V0IGV4cGVjdGVkIHRocm91Z2hwdXQgdGFibGUgYW5kIGhpc3Rvcnkgd2luZG93IGZvciBjdXJyZW50IHJhdGUgKi8KIAlpZiAoIXRibC0+ZXhwZWN0ZWRfdHB0KSB7Ci0JCUlXTF9FUlJPUigidGJsLT5leHBlY3RlZF90cHQgaXMgTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInRibC0+ZXhwZWN0ZWRfdHB0IGlzIE5VTExcbiIpOwogCQlyZXR1cm47CiAJfQogCisJLyogZm9yY2UgdXNlciBtYXggcmF0ZSBpZiBzZXQgYnkgdXNlciAqLworCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpICYmCisJICAgIChscV9zdGEtPm1heF9yYXRlX2lkeCA8IGluZGV4KSkgeworCQlpbmRleCA9IGxxX3N0YS0+bWF4X3JhdGVfaWR4OworCQl1cGRhdGVfbHEgPSAxOworCQl3aW5kb3cgPSAmKHRibC0+d2luW2luZGV4XSk7CisJCWdvdG8gbHFfdXBkYXRlOworCX0KKwogCXdpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKIAogCS8qCkBAIC0xNzY3LDcgKzE3OTMsNyBAQAogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKIAlpZiAoKGZhaWxfY291bnQgPCBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKIAkJCSh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkgewotCQlJV0xfREVCVUdfUkFURSgiTFE6IHN0aWxsIGJlbG93IFRILiBzdWNjPSVkIHRvdGFsPSVkICIKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBzdGlsbCBiZWxvdyBUSC4gc3VjYz0lZCB0b3RhbD0lZCAiCiAJCQkgICAgICAgImZvciBpbmRleCAlZFxuIiwKIAkJCSAgICAgICB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciwgd2luZG93LT5jb3VudGVyLCBpbmRleCk7CiAKQEAgLTE3OTUsNyArMTgyMSw3IEBACiAJCSAqIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSBzZXR1cCB0aGF0IHdlJ3ZlIGJlZW4gdHJ5aW5nLiAqLwogCQlpZiAod2luZG93LT5hdmVyYWdlX3RwdCA+IGxxX3N0YS0+bGFzdF90cHQpIHsKIAotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTV0lUQ0hJTkcgVE8gTkVXIFRBQkxFICIKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU1dJVENISU5HIFRPIE5FVyBUQUJMRSAiCiAJCQkJCSJzdWM9JWQgY3VyLXRwdD0lZCBvbGQtdHB0PSVkXG4iLAogCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCiAJCQkJCXdpbmRvdy0+YXZlcmFnZV90cHQsCkBAIC0xODExLDcgKzE4MzcsNyBAQAogCQkvKiBFbHNlIHBvb3Igc3VjY2VzczsgZ28gYmFjayB0byBtb2RlIGluICJhY3RpdmUiIHRhYmxlICovCiAJCX0gZWxzZSB7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogR09JTkcgQkFDSyBUTyBUSEUgT0xEIFRBQkxFICIKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogR09JTkcgQkFDSyBUTyBUSEUgT0xEIFRBQkxFICIKIAkJCQkJInN1Yz0lZCBjdXItdHB0PSVkIG9sZC10cHQ9JWRcbiIsCiAJCQkJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbywKIAkJCQkJd2luZG93LT5hdmVyYWdlX3RwdCwKQEAgLTE4NDYsNiArMTg3MiwxMSBAQAogCWxvdyA9IGhpZ2hfbG93ICYgMHhmZjsKIAloaWdoID0gKGhpZ2hfbG93ID4+IDgpICYgMHhmZjsKIAorCS8qIElmIHVzZXIgc2V0IG1heCByYXRlLCBkb250IGFsbG93IGhpZ2hlciB0aGFuIHVzZXIgY29uc3RyYWluICovCisJaWYgKChscV9zdGEtPm1heF9yYXRlX2lkeCAhPSAtMSkgJiYKKwkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4IDwgaGlnaCkpCisJCWhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOworCiAJc3IgPSB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW87CiAKIAkvKiBDb2xsZWN0IG1lYXN1cmVkIHRocm91Z2hwdXRzIGZvciBjdXJyZW50IGFuZCBhZGphY2VudCByYXRlcyAqLwpAQCAtMTg1OSw3ICsxODkwLDcgQEAKIAogCS8qIFRvbyBtYW55IGZhaWx1cmVzLCBkZWNyZWFzZSByYXRlICovCiAJaWYgKChzciA8PSBJV0xfUkFURV9ERUNSRUFTRV9USCkgfHwgKGN1cnJlbnRfdHB0ID09IDApKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKIAkJc2NhbGVfYWN0aW9uID0gLTE7CiAKIAkvKiBObyB0aHJvdWdocHV0IG1lYXN1cmVkIHlldCBmb3IgYWRqYWNlbnQgcmF0ZXM7IHRyeSBpbmNyZWFzZS4gKi8KQEAgLTE4NjksNyArMTkwMCw3IEBACiAJCWlmIChoaWdoICE9IElXTF9SQVRFX0lOVkFMSUQgJiYgc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQllbHNlIGlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKLQkJCXNjYWxlX2FjdGlvbiA9IC0xOworCQkJc2NhbGVfYWN0aW9uID0gMDsKIAl9CiAKIAkvKiBCb3RoIGFkamFjZW50IHRocm91Z2hwdXRzIGFyZSBtZWFzdXJlZCwgYnV0IG5laXRoZXIgb25lIGhhcyBiZXR0ZXIKQEAgLTE4OTAsMTcgKzE5MjEsMTUgQEAKIAkJCQkJc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQkJfSBlbHNlIHsKLQkJCQlJV0xfREVCVUdfUkFURQotCQkJCSAgICAoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBoaWdoIHRwdFxuIik7Ci0JCQkJc2NhbGVfYWN0aW9uID0gLTE7CisJCQkJc2NhbGVfYWN0aW9uID0gMDsKIAkJCX0KIAogCQkvKiBMb3dlciBhZGphY2VudCByYXRlJ3MgdGhyb3VnaHB1dCBpcyBtZWFzdXJlZCAqLwogCQl9IGVsc2UgaWYgKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpIHsKIAkJCS8qIExvd2VyIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0ICovCiAJCQlpZiAobG93X3RwdCA+IGN1cnJlbnRfdHB0KSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAkJCX0gZWxzZSBpZiAoc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwpAQCAtMTkzNywxNCArMTk2NiwxNCBAQAogCQlicmVhazsKIAl9CiAKLQlJV0xfREVCVUdfUkFURSgiY2hvb3NlIHJhdGUgc2NhbGUgaW5kZXggJWQgYWN0aW9uICVkIGxvdyAlZCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNob29zZSByYXRlIHNjYWxlIGluZGV4ICVkIGFjdGlvbiAlZCBsb3cgJWQgIgogCQkgICAgImhpZ2ggJWQgdHlwZSAlZFxuIiwKIAkJICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gsIHRibC0+bHFfdHlwZSk7CiAKIGxxX3VwZGF0ZToKIAkvKiBSZXBsYWNlIHVDb2RlJ3MgcmF0ZSB0YWJsZSBmb3IgdGhlIGRlc3RpbmF0aW9uIHN0YXRpb24uICovCiAJaWYgKHVwZGF0ZV9scSkgewotCQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIGluZGV4LCBpc19ncmVlbik7CiAJCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCByYXRlKTsKIAkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogCX0KQEAgLTE5ODEsNyArMjAxMCw3IEBACiAJCQkvKiBVc2UgbmV3ICJzZWFyY2giIHN0YXJ0IHJhdGUgKi8KIAkJCWluZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh0YmwtPmN1cnJlbnRfcmF0ZSk7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJTd2l0Y2ggY3VycmVudCAgbWNzOiAlWCBpbmRleDogJWRcbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiU3dpdGNoIGN1cnJlbnQgIG1jczogJVggaW5kZXg6ICVkXG4iLAogCQkJCSAgICAgdGJsLT5jdXJyZW50X3JhdGUsIGluZGV4KTsKIAkJCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCB0YmwtPmN1cnJlbnRfcmF0ZSk7CiAJCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CkBAIC0xOTkzLDEwICsyMDIyLDEwIEBACiAJCSAqIHN0YXkgd2l0aCBiZXN0IGFudGVubmEgbGVnYWN5IG1vZHVsYXRpb24gZm9yIGEgd2hpbGUKIAkJICogYmVmb3JlIG5leHQgcm91bmQgb2YgbW9kZSBjb21wYXJpc29ucy4gKi8KIAkJdGJsMSA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOwotCQlpZiAoaXNfbGVnYWN5KHRibDEtPmxxX3R5cGUpICYmICFjb25mLT5odC5lbmFibGVkICYmCisJCWlmIChpc19sZWdhY3kodGJsMS0+bHFfdHlwZSkgJiYgIWNvbmZfaXNfaHQoY29uZikgJiYKIAkJICAgIGxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPj0gMSkgewogCQkJbHFfc3RhLT5hY3Rpb25fY291bnRlciA9IDA7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNUQVkgaW4gbGVnYWN5IHRhYmxlXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU1RBWSBpbiBsZWdhY3kgdGFibGVcbiIpOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMSwgbHFfc3RhKTsKIAkJfQogCkBAIC0yMDA4LDggKzIwMzcsMTUgQEAKIAkJCWlmICgobHFfc3RhLT5sYXN0X3RwdCA+IElXTF9BR0dfVFBUX1RIUkVIT0xEKSAmJgogCQkJICAgIChscV9zdGEtPnR4X2FnZ190aWRfZW4gJiAoMSA8PCB0aWQpKSAmJgogCQkJICAgICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkpIHsKLQkJCQlJV0xfREVCVUdfUkFURSgidHJ5IHRvIGFnZ3JlZ2F0ZSB0aWQgJWRcbiIsIHRpZCk7Ci0JCQkJcnNfdGxfdHVybl9vbl9hZ2cocHJpdiwgdGlkLCBscV9zdGEsIHN0YSk7CisJCQkJdGlkX2RhdGEgPQorCQkJCSAgICZwcml2LT5zdGF0aW9uc1tscV9zdGEtPmxxLnN0YV9pZF0udGlkW3RpZF07CisJCQkJaWYgKHRpZF9kYXRhLT5hZ2cuc3RhdGUgPT0gSVdMX0FHR19PRkYpIHsKKwkJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkJCSAgICAgICAidHJ5IHRvIGFnZ3JlZ2F0ZSB0aWQgJWRcbiIsCisJCQkJCQkgICAgICAgdGlkKTsKKwkJCQkJcnNfdGxfdHVybl9vbl9hZ2cocHJpdiwgdGlkLAorCQkJCQkJCSAgbHFfc3RhLCBzdGEpOworCQkJCX0KIAkJCX0KIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMCwgbHFfc3RhKTsKQEAgLTIwMjgsNyArMjA2NCw3IEBACiAJfQogCiBvdXQ6Ci0JdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKIAlpID0gaW5kZXg7CiAJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSBpOwogCkBAIC0yMDgxLDcgKzIxMTcsNyBAQAogCWlmICghcnNfaXNfdmFsaWRfYW50KHZhbGlkX3R4X2FudCwgdGJsLT5hbnRfdHlwZSkpCiAJICAgIHJzX3RvZ2dsZV9hbnRlbm5hKHZhbGlkX3R4X2FudCwgJnJhdGUsIHRibCk7CiAKLQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZV9pZHgsIHVzZV9ncmVlbik7CisJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOwogCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZTsKIAlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKIAlyc19maWxsX2xpbmtfY21kKE5VTEwsIGxxX3N0YSwgcmF0ZSk7CkBAIC0yMTA0LDcgKzIxNDAsMTggQEAKIAlpbnQgcmF0ZV9pZHg7CiAJdTY0IG1hc2tfYml0ID0gMDsKIAotCUlXTF9ERUJVR19SQVRFX0xJTUlUKCJyYXRlIHNjYWxlIGNhbGN1bGF0ZSBuZXcgcmF0ZSBmb3Igc2tiXG4iKTsKKwlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisKKwkvKiBHZXQgbWF4IHJhdGUgaWYgdXNlciBzZXQgbWF4IHJhdGUgKi8KKwlpZiAobHFfc3RhKSB7CisJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gdHhyYy0+bWF4X3JhdGVfaWR4OworCQlpZiAoKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopICYmCisJCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpKQorCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJaWYgKChscV9zdGEtPm1heF9yYXRlX2lkeCA8IDApIHx8CisJCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggPj0gSVdMX1JBVEVfQ09VTlQpKQorCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKKwl9CiAKIAlpZiAoc3RhKQogCQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC0yMTI5LDcgKzIxNzYsNyBAQAogCQl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgaGRyLT5hZGRyMSwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwpAQCAtMjE1OCw3ICsyMjA1LDcgQEAKIAlpbnQgaSwgajsKIAogCXByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwotCUlXTF9ERUJVR19SQVRFKCJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNyZWF0ZSBzdGF0aW9uIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKIAogCWxxX3N0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfbHFfc3RhKSwgZ2ZwKTsKIApAQCAtMjE4Miw2ICsyMjI5LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmcHJpdi0+aHctPmNvbmY7CiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOwogCXUxNiBtYXNrX2JpdCA9IDA7CisJaW50IGNvdW50OworCWludCBzdGFydF9yYXRlID0gMDsKIAogCWxxX3N0YS0+Zmx1c2hfdGltZXIgPSAwOwogCWxxX3N0YS0+c3VwcF9yYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC0yMTg5LDcgKzIyMzgsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykKIAkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KCZscV9zdGEtPmxxX2luZm9bal0ud2luW2ldKTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogKioqIHJhdGUgc2NhbGUgc3RhdGlvbiBnbG9iYWwgaW5pdCAqKipcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogKioqIHJhdGUgc2NhbGUgc3RhdGlvbiBnbG9iYWwgaW5pdCAqKipcbiIpOwogCS8qIFRPRE86IHdoYXQgaXMgYSBnb29kIHN0YXJ0aW5nIHJhdGUgZm9yIFNUQT8gQWJvdXQgbWlkZGxlPyBNYXliZSBub3QKIAkgKiB0aGUgbG93ZXN0IG9yIHRoZSBoaWdoZXN0IHJhdGUuLiBDb3VsZCBjb25zaWRlciB1c2luZyBSU1NJIGZyb20KIAkgKiBwcmV2aW91cyBwYWNrZXRzPyBOZWVkIHRvIGhhdmUgSUVFRSA4MDIuMVggYXV0aCBzdWNjZWVkIGltbWVkaWF0ZWx5CkBAIC0yMjAwLDEwICsyMjQ5LDEwIEBACiAJCXU4IHN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyKTsKIAogCQkvKiBmb3IgSUJTUyB0aGUgY2FsbCBhcmUgZnJvbSB0YXNrbGV0ICovCi0JCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgc3RhLT5hZGRyLAogCQkJCQkJCTAsIENNRF9BU1lOQywgTlVMTCk7CiAJCX0KQEAgLTIyMTYsNiArMjI2NSw4IEBACiAJfQogCiAJbHFfc3RhLT5pc19kdXAgPSAwOworCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gLTE7CisJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID0gSVdMX01JU1NFRF9SQVRFX01BWDsKIAlscV9zdGEtPmlzX2dyZWVuID0gcnNfdXNlX2dyZWVuKHByaXYsIGNvbmYpOwogCWxxX3N0YS0+YWN0aXZlX2xlZ2FjeV9yYXRlID0gcHJpdi0+YWN0aXZlX3JhdGUgJiB+KDB4MTAwMCk7CiAJbHFfc3RhLT5hY3RpdmVfcmF0ZV9iYXNpYyA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljOwpAQCAtMjI0MCw3ICsyMjkxLDcgQEAKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICY9IH4oKHUxNikweDIpOwogCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKLQlJV0xfREVCVUdfUkFURSgiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlKTsKQEAgLTIyNTQsMTYgKzIzMDUsMjAgQEAKIAlscV9zdGEtPmRydiA9IHByaXY7CiAKIAkvKiBGaW5kIGhpZ2hlc3QgdHggcmF0ZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF0gJiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKLQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IDM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspCisJbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOworCWNvdW50ID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJY291bnQgKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJc3RhcnRfcmF0ZSA9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCW1hc2tfYml0IDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOworCX0KKworCW1hc2tfYml0ID0gbWFza19iaXQgJiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKKwlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IDQ7CisJZm9yIChpID0gc3RhcnRfcmF0ZTsgaSA8IGNvdW50OyBpKyspCiAJCWlmIChtYXNrX2JpdCAmIEJJVChpKSkKIAkJCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gaTsKIAotCS8qIEZvciBNT0RFX0lFRUU4MDIxMUEsIHNraXAgb3ZlciBjY2sgcmF0ZXMgaW4gZ2xvYmFsIHJhdGUgdGFibGUgKi8KLQlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQogCXJzX2luaXRpYWxpemVfbHEocHJpdiwgY29uZiwgc3RhLCBscV9zdGEpOwogfQogCkBAIC0yNDAyLDkgKzI0NTcsOSBAQAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBwcml2X3I7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAJa2ZyZWUobHFfc3RhKTsKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIApAQCAtMjQxOCwyMCArMjQ3MywyNyBAQAogCQkJICAgICB1MzIgKnJhdGVfbl9mbGFncywgaW50IGluZGV4KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwl1OCB2YWxpZF90eF9hbnQ7CisJdTggYW50X3NlbF90eDsKIAogCXByaXYgPSBscV9zdGEtPmRydjsKKwl2YWxpZF90eF9hbnQgPSBwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50OwogCWlmIChscV9zdGEtPmRiZ19maXhlZF9yYXRlKSB7Ci0JCWlmIChpbmRleCA8IDEyKSB7CisJCWFudF9zZWxfdHggPQorCQkgICgobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSAmIFJBVEVfTUNTX0FOVF9BQkNfTVNLKQorCQkgID4+IFJBVEVfTUNTX0FOVF9QT1MpOworCQlpZiAoKHZhbGlkX3R4X2FudCAmIGFudF9zZWxfdHgpID09IGFudF9zZWxfdHgpIHsKIAkJCSpyYXRlX25fZmxhZ3MgPSBscV9zdGEtPmRiZ19maXhlZF9yYXRlOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkZpeGVkIHJhdGUgT05cbiIpOwogCQl9IGVsc2UgewotCQkJaWYgKGxxX3N0YS0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJCSpyYXRlX25fZmxhZ3MgPSAweDgwMEQ7Ci0JCQllbHNlCi0JCQkJKnJhdGVfbl9mbGFncyA9IDB4ODIwQTsKKwkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUgPSAwOworCQkJSVdMX0VSUihwcml2LAorCQkJICAgICJJbnZhbGlkIGFudGVubmEgc2VsZWN0aW9uIDB4JVgsIFZhbGlkIGlzIDB4JVhcbiIsCisJCQkgICAgYW50X3NlbF90eCwgdmFsaWRfdHhfYW50KTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9GRlxuIik7CiAJCX0KLQkJSVdMX0RFQlVHX1JBVEUoIkZpeGVkIHJhdGUgT05cbiIpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9GRlxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9GRlxuIik7CiAJfQogfQogCkBAIC0yNDYwLDcgKzI1MjIsNyBAQAogCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwogCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwogCi0JSVdMX0RFQlVHX1JBVEUoInN0YV9pZCAlZCByYXRlIDB4JVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInN0YV9pZCAlZCByYXRlIDB4JVhcbiIsCiAJCWxxX3N0YS0+bHEuc3RhX2lkLCBscV9zdGEtPmRiZ19maXhlZF9yYXRlKTsKIAogCWlmIChscV9zdGEtPmRiZ19maXhlZF9yYXRlKSB7CkBAIC0yNDc0LDExICsyNTM2LDE5IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpID0gMDsKKwlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OworCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKnRibCA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOworCisJcHJpdiA9IGxxX3N0YS0+ZHJ2OworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAic3RhX2lkICVkXG4iLCBscV9zdGEtPmxxLnN0YV9pZCk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZhaWxlZD0lZCBzdWNjZXNzPSVkIHJhdGU9MCVYXG4iLApAQCAtMjQ4Niw2ICsyNTU2LDIwIEBACiAJCQlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZpeGVkIHJhdGUgMHglWFxuIiwKIAkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJ2YWxpZF90eF9hbnQgJXMlcyVzXG4iLAorCSAgICAocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCAmIEFOVF9BKSA/ICJBTlRfQSwiIDogIiIsCisJICAgIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQU5UX0IpID8gIkFOVF9CLCIgOiAiIiwKKwkgICAgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBBTlRfQykgPyAiQU5UX0MiIDogIiIpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJscSB0eXBlICVzXG4iLAorCSAgIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgPyAibGVnYWN5IiA6ICJIVCIpOworCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7CisJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXMiLAorCQkgICAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSA/ICJTSVNPIiA6CisJCSAgICgoaXNfbWltbzIodGJsLT5scV90eXBlKSkgPyAiTUlNTzIiIDogIk1JTU8zIikpOworCQkgICBkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKKwkJICAgKHRibC0+aXNfZmF0KSA/ICI0ME1IeiIgOiAiMjBNSHoiKTsKKwkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiAlc1xuIiwgKHRibC0+aXNfU0dJKSA/ICJTR0kiIDogIiIpOworCX0KIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiZ2VuZXJhbDoiCiAJCSJmbGFncz0weCVYIG1pbW8tZD0lZCBzLWFudDB4JXggZC1hbnQ9MHgleFxuIiwKIAkJbHFfc3RhLT5scS5nZW5lcmFsX3BhcmFtcy5mbGFncywKQEAgLTI1MTEsNyArMjU5NSw5IEBACiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgcmF0ZVslZF0gMHglWFxuIiwKIAkJCWksIGxlMzJfdG9fY3B1KGxxX3N0YS0+bHEucnNfdGFibGVbaV0ucmF0ZV9uX2ZsYWdzKSk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zY2FsZV90YWJsZV9vcHMgPSB7CkBAIC0yNTIyLDExICsyNjA4LDE3IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpLCBqOworCXNzaXplX3QgcmV0OwogCiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgTFFfU0laRTsgaSsrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIlcyB0eXBlPSVkIFNHST0lZCBGQVQ9JWQgRFVQPSVkXG4iCiAJCQkJInJhdGU9MHglWFxuIiwKQEAgLTI1NDQsNyArMjYzNiw5IEBACiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAkJfQogCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zdGF0c190YWJsZV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IDc4ZWU4M2EuLmFiNTlhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgX19pd2xfYWduX3JzX2hfXwogI2RlZmluZSBfX2l3bF9hZ25fcnNfaF9fCiAKLSNpbmNsdWRlICJpd2wtZGV2LmgiCi0KIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIHsKIAl1OCBwbGNwOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV82TV9QTENQLCBldGMuICovCiAJdTggcGxjcF9zaXNvOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV9TSVNPXzZNX1BMQ1AsIGV0Yy4gKi8KQEAgLTQzLDYgKzQxLDE5IEBACiAJdTggbmV4dF9yc190Z2c7ICAvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwogfTsKIAorc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKKwl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLworCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLworCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KKwl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KKwl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KKwl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLworCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCisJdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLworCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLworCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KK307CisKIC8qCiAgKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KICAqIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF07CkBAIC02MiwxMiArNzMsMzAgQEAKIAlJV0xfUkFURV81NE1fSU5ERVgsCiAJSVdMX1JBVEVfNjBNX0lOREVYLAogCUlXTF9SQVRFX0NPVU5ULCAvKkZJWE1FOlJTOmNoYW5nZSB0byBJV0xfUkFURV9JTkRFWF9DT1VOVCwqLworCUlXTF9SQVRFX0NPVU5UXzM5NDUgPSBJV0xfUkFURV9DT1VOVCAtIDEsCiAJSVdMX1JBVEVfSU5WTV9JTkRFWCA9IElXTF9SQVRFX0NPVU5ULAogCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9DT1VOVCwKIH07CiAKIGVudW0geworCUlXTF9SQVRFXzZNX0lOREVYX1RBQkxFID0gMCwKKwlJV0xfUkFURV85TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xMk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMThNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzI0TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8zNk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfNDhNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzU0TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xTV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8yTV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV81TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xMU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfSU5WTV9JTkRFWF9UQUJMRSA9IElXTF9SQVRFX0lOVk1fSU5ERVggLSAxLAorfTsKKworZW51bSB7CiAJSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAorCUlXTDM5X0xBU1RfT0ZETV9SQVRFID0gSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKIAlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKQEAgLTIwMiw3ICsyMzEsNyBAQAogI2RlZmluZSBJV0xfUlNfR09PRF9SQVRJTwkJMTI4MDAJLyogMTAwJSAqLwogI2RlZmluZSBJV0xfUkFURV9TQ0FMRV9TV0lUQ0gJCTEwODgwCS8qICA4NSUgKi8KICNkZWZpbmUgSVdMX1JBVEVfSElHSF9USAkJMTA4ODAJLyogIDg1JSAqLwotI2RlZmluZSBJV0xfUkFURV9JTkNSRUFTRV9USCAgICAgICAgICAgIDg5NjAJLyogIDcwJSAqLworI2RlZmluZSBJV0xfUkFURV9JTkNSRUFTRV9USAkJNjQwMAkvKiAgNTAlICovCiAjZGVmaW5lIElXTF9SQVRFX0RFQ1JFQVNFX1RICQkxOTIwCS8qICAxNSUgKi8KIAogLyogcG9zc2libGUgYWN0aW9ucyB3aGVuIGluIGxlZ2FjeSBtb2RlICovCkBAIC0yNDgsNiArMjc3LDcgQEAKICNkZWZpbmUgVElNRV9XUkFQX0FST1VORCh4LCB5KSAoKCh5KSA+ICh4KSkgPyAoeSkgLSAoeCkgOiAoMC0oeCkpICsgKHkpKQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9yYXRlX2luZm8gaXdsX3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XTsKIAogZW51bSBpd2xfdGFibGVfdHlwZSB7CiAJTFFfTk9ORSwKQEAgLTMwMyw2ICszMzMsMjMgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAorc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQoreworCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKKworCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCisJCXJhdGUgPSByYXRlX2luZGV4OworCXJldHVybiByYXRlOworfQorCisvKioKKyAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCisgKgorICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCisgKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KKyAqLworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOworCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBjYWxsYmFja3MKICAqCkBAIC0zMTQsNiArMzYxLDcgQEAKICAqCiAgKi8KIGV4dGVybiBpbnQgaXdsYWduX3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7CiAKIC8qKgogICogaXdsX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGNhbGxiYWNrcwpAQCAtMzIyLDUgKzM3MCw2IEBACiAgKiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkLgogICovCiBleHRlcm4gdm9pZCBpd2xhZ25fcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYgLyogX19pd2xfYWduX19yc19fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDEyOWUyZDMuLjY2M2RjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00NCw2ICs0NCw4IEBACiAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAorI2RlZmluZSBEUlZfTkFNRSAgICAgICAgIml3bGFnbiIKKwogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKQEAgLTYxLDkgKzYzLDcgQEAKIAogLyoKICAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KLSAqIE5PVEU6IERSVl9OQU1FIGlzIGRlZmluZWQgaW4gaXdsd2lmaS5oIGZvciB1c2UgYnkgaXdsLWRlYnVnLmggYW5kIHByaW50awogICovCi0KICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBXaXJlbGVzcyBXaUZpIExpbmsgQUdOIGRyaXZlciBmb3IgTGludXgiCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwpAQCAtNzIsNyArNzIsNyBAQAogI2RlZmluZSBWRAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWZkZWYgQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKICNkZWZpbmUgVlMgInMiCiAjZWxzZQogI2RlZmluZSBWUwpAQCAtOTQsNjYgKzk0LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KLQotc3RhdGljIHZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpCi17Ci0Jc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0KLQlpZiAoaHdfZGVjcnlwdCkKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0JZWxzZQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCi19Ci0KLS8qKgotICogaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCAtIGNoZWNrIGlmIGZ1bGwgUlhPTiAodnMgUlhPTl9BU1NPQykgY21kIGlzIG5lZWRlZAotICogQHByaXY6IHN0YWdpbmdfcnhvbiBpcyBjb21wYXJlZCB0byBhY3RpdmVfcnhvbgotICoKLSAqIElmIHRoZSBSWE9OIHN0cnVjdHVyZSBpcyBjaGFuZ2luZyBlbm91Z2ggdG8gcmVxdWlyZSBhIG5ldyB0dW5lLAotICogb3IgaXMgY2xlYXJpbmcgdGhlIFJYT05fRklMVEVSX0FTU09DX01TSywgdGhlbiByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0Ci0gKiBhIG5ldyB0dW5lIChmdWxsIFJYT04gY29tbWFuZCwgcmF0aGVyIHRoYW4gUlhPTl9BU1NPQyBjbWQpIGlzIHJlcXVpcmVkLgotICovCi1zdGF0aWMgaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCi0JLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KLQlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KLQkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KLQkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgotCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCi0JICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCi0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQotCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQotCQlyZXR1cm4gMTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQotCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgpAQCAtMTc5LDkgKzExOSw5IEBACiAJICogNTAwMCwgYnV0IHdpbGwgbm90IGRhbWFnZSA0OTY1ICovCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NFTEZfQ1RTX0VOOwogCi0JcmV0ID0gaXdsX2Fnbl9jaGVja19yeG9uX2NtZCgmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlyZXQgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5MSw3ICsxMzEsNyBAQAogCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewogCQlyZXQgPSBpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKQEAgLTIwNyw3ICsxNDcsNyBAQAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KIAlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKQEAgLTIxOCwxMiArMTU4LDEyIEBACiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwogCQlpZiAocmV0KSB7CiAJCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJCUlXTF9FUlJPUigiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfSU5GTygiU2VuZGluZyBSWE9OXG4iCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbmRpbmcgUlhPTlxuIgogCQkgICAgICAgIiogd2l0aCVzIFJYT05fRklMVEVSX0FTU09DX01TS1xuIgogCQkgICAgICAgIiogY2hhbm5lbCA9ICVkXG4iCiAJCSAgICAgICAiKiBic3NpZCA9ICVwTVxuIiwKQEAgLTI0Miw3ICsxODIsNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZwcml2LT5zdGFnaW5nX3J4b24pOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CkBAIC0yNTYsNyArMTk2LDcgQEAKIAkvKiBBZGQgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNvIHdlIGNhbiBzZW5kIGJyb2FkY2FzdCBmcmFtZXMgKi8KIAlpZiAoaXdsX3J4b25fYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDApID09CiAJCQkJCQlJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjY3LDEzICsyMDcsMTUgQEAKIAkJCXJldCA9IGl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsCiAJCQkJCSAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsIDEpOwogCQkJaWYgKHJldCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgVFguXG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgVFguXG4iKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJCXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgPSAxOwogCQkJaWYgKHByaXYtPmRlZmF1bHRfd2VwX2tleSAmJgogCQkJICAgIGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApKQotCQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHNlbmQgV0VQIHN0YXRpYyBrZXkuXG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJDb3VsZCBub3Qgc2VuZCBXRVAgc3RhdGljIGtleS5cbiIpOwogCQl9CiAKIAkJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uCkBAIC0yODIsNyArMjI0LDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwpAQCAtMjk0LDcgKzIzNiw3IEBACiAJICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzICovCiAJcmV0ID0gaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBUWCBwb3dlciAoJWQpXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzA4LDI1ICsyNTAsMTEgQEAKIAlpd2xfY29tbWl0X3J4b24ocHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2J0X2NtZCBidF9jbWQgPSB7Ci0JCS5mbGFncyA9IDMsCi0JCS5sZWFkX3RpbWUgPSAweEFBLAotCQkubWF4X2tpbGwgPSAxLAotCQkua2lsbF9hY2tfbWFzayA9IDAsCi0JCS5raWxsX2N0c19tYXNrID0gMCwKLQl9OwotCi0JcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2J0X2NtZCksICZidF9jbWQpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAogCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CkBAIC0zMzcsNyArMjY1LDcgQEAKIAl9CiAKIAlpZiAocHJpdi0+ZnJhbWVzX2NvdW50KSB7Ci0JCUlXTF9XQVJOSU5HKCIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKKwkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAogCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAJCXByaXYtPmZyYW1lc19jb3VudCA9IDA7CiAJfQpAQCAtMzUwLDcgKzI3OCw3IEBACiAJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewogCQlmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKCpmcmFtZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWZyYW1lKSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOworCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0zODYsMzEgKzMxNCw2IEBACiAJcmV0dXJuIHByaXYtPmlic3NfYmVhY29uLT5sZW47CiB9CiAKLXN0YXRpYyB1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCBpOwotCWludCByYXRlX21hc2s7Ci0KLQkvKiBTZXQgcmF0ZSBtYXNrKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfUkFURVNfTUFTSzsKLQllbHNlCi0JCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX09GRE1fUkFURVNfTUFTSzsKLQotCS8qIEZpbmQgbG93ZXN0IHZhbGlkIHJhdGUgKi8KLQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWDsgaSAhPSBJV0xfUkFURV9JTlZBTElEOwotCQkJCQlpID0gaXdsX3JhdGVzW2ldLm5leHRfaWVlZSkgewotCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgaSkpCi0JCQlyZXR1cm4gaXdsX3JhdGVzW2ldLnBsY3A7Ci0JfQotCi0JLyogTm8gdmFsaWQgcmF0ZSB3YXMgZm91bmQuIEFzc2lnbiB0aGUgbG93ZXN0IG9uZSAqLwotCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCi0JCXJldHVybiBJV0xfUkFURV8xTV9QTENQOwotCWVsc2UKLQkJcmV0dXJuIElXTF9SQVRFXzZNX1BMQ1A7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXdsX2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpCiB7CkBAIC00NTIsNyArMzU1LDcgQEAKIAlmcmFtZSA9IGl3bF9nZXRfZnJlZV9mcmFtZShwcml2KTsKIAogCWlmICghZnJhbWUpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgogCQkJICAiY29tbWFuZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC00NjksNiArMzcyLDE1OSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQoreworCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOworCisJZG1hX2FkZHJfdCBhZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZ0Yi0+bG8pOworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkKKwkJYWRkciB8PQorCQkoKGRtYV9hZGRyX3QpKGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgJiAweEYpIDw8IDE2KSA8PCAxNjsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBpd2xfdGZkX3RiX2dldF9sZW4oc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQoreworCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgPj4gNDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGl3bF90ZmRfc2V0X3RiKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCwKKwkJCQkgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKwl1MTYgaGlfbl9sZW4gPSBsZW4gPDwgNDsKKworCXB1dF91bmFsaWduZWRfbGUzMihhZGRyLCAmdGItPmxvKTsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCisJCWhpX25fbGVuIHw9ICgoYWRkciA+PiAxNikgPj4gMTYpICYgMHhGOworCisJdGItPmhpX25fbGVuID0gY3B1X3RvX2xlMTYoaGlfbl9sZW4pOworCisJdGZkLT5udW1fdGJzID0gaWR4ICsgMTsKK30KKworc3RhdGljIGlubGluZSB1OCBpd2xfdGZkX2dldF9udW1fdGJzKHN0cnVjdCBpd2xfdGZkICp0ZmQpCit7CisJcmV0dXJuIHRmZC0+bnVtX3RicyAmIDB4MWY7Cit9CisKKy8qKgorICogaXdsX2h3X3R4cV9mcmVlX3RmZCAtIEZyZWUgYWxsIGNodW5rcyByZWZlcmVuY2VkIGJ5IFRGRCBbdHhxLT5xLnJlYWRfcHRyXQorICogQHByaXYgLSBkcml2ZXIgcHJpdmF0ZSBkYXRhCisgKiBAdHhxIC0gdHggcXVldWUKKyAqCisgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcworICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKKyAqLwordm9pZCBpd2xfaHdfdHhxX2ZyZWVfdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCXN0cnVjdCBpd2xfdGZkICp0ZmRfdG1wID0gKHN0cnVjdCBpd2xfdGZkICopdHhxLT50ZmRzOworCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisJaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOworCWludCBpOworCWludCBudW1fdGJzOworCisJdGZkID0gJnRmZF90bXBbaW5kZXhdOworCisJLyogU2FuaXR5IGNoZWNrIG9uIG51bWJlciBvZiBjaHVua3MgKi8KKwludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOworCisJaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgbnVtX3Ricyk7CisJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLworCQlyZXR1cm47CisJfQorCisJLyogVW5tYXAgdHhfY21kICovCisJaWYgKG51bV90YnMpCisJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAorCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAorCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKKwkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCisJZm9yIChpID0gMTsgaSA8IG51bV90YnM7IGkrKykgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwgaXdsX3RmZF90Yl9nZXRfYWRkcih0ZmQsIGkpLAorCQkJCWl3bF90ZmRfdGJfZ2V0X2xlbih0ZmQsIGkpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlpZiAodHhxLT50eGIpIHsKKwkJCWRldl9rZnJlZV9za2IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaSAtIDFdKTsKKwkJCXR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK2ludCBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCSBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sCisJCQkJIHU4IHJlc2V0LCB1OCBwYWQpCit7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkLCAqdGZkX3RtcDsKKwl1MzIgbnVtX3RiczsKKworCXEgPSAmdHhxLT5xOworCXRmZF90bXAgPSAoc3RydWN0IGl3bF90ZmQgKil0eHEtPnRmZHM7CisJdGZkID0gJnRmZF90bXBbcS0+d3JpdGVfcHRyXTsKKworCWlmIChyZXNldCkKKwkJbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKKworCW51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7CisKKwkvKiBFYWNoIFRGRCBjYW4gcG9pbnQgdG8gYSBtYXhpbXVtIDIwIFR4IGJ1ZmZlcnMgKi8KKwlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJCSAgSVdMX05VTV9PRl9UQlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlCVUdfT04oYWRkciAmIH5ETUFfQklUX01BU0soMzYpKTsKKwlpZiAodW5saWtlbHkoYWRkciAmIH5JV0xfVFhfRE1BX01BU0spKQorCQlJV0xfRVJSKHByaXYsICJVbmFsaWduZWQgYWRkcmVzcyA9ICVsbHhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7CisKKwlpd2xfdGZkX3NldF90Yih0ZmQsIG51bV90YnMsIGFkZHIsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgorICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCisgKgorICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCisgKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCisgKi8KK2ludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIENpcmN1bGFyIGJ1ZmZlciAoVEZEIHF1ZXVlIGluIERSQU0pIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAorCQkJICAgICB0eHEtPnEuZG1hX2FkZHIgPj4gOCk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBNaXNjLiBpbnRlcm5hbCBzdGF0ZSBhbmQgaGVscGVyIGZ1bmN0aW9ucwpAQCAtNDgyLDcgKzUzOCw3IEBACiAJc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiBcbiIpOwogCiAJaWYgKCFpd2xfY29uZi0+aXNfaHQpCiAJCXJldHVybjsKQEAgLTUyMCw5ICs1NzYsOSBAQAogCSAqLwogCiAJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX05PTkU7Ci0JaWYgKHByaXYtPmh3LT5jb25mLmh0LmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCWlmIChjb25mX2lzX2h0NDBfbWludXMoJnByaXYtPmh3LT5jb25mKSkKIAkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOwotCWVsc2UgaWYocHJpdi0+aHctPmNvbmYuaHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKKwllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cygmcHJpdi0+aHctPmNvbmYpKQogCQlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU7CiAKIAkvKiBJZiBubyBhYm92ZSBvciBiZWxvdyBjaGFubmVsIHN1cHBsaWVkIGRpc2FibGUgRkFUIGNoYW5uZWwgKi8KQEAgLTU0MiwzOSArNTk4LDcgQEAKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci19Ci0KLS8qCi0gKiBRb1MgIHN1cHBvcnQKLSovCi1zdGF0aWMgdm9pZCBpd2xfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpCi17Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAucXVldWVfcmVxdWVzdCAmJgotCSAgICAhcHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnR4b3BfcmVxdWVzdCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19UWE9QX1RZUEVfTVNLOwotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSzsKLQotCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PSBRT1NfUEFSQU1fRkxHX1RHTl9NU0s7Ci0KLQlpZiAoZm9yY2UgfHwgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAotCQkJCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUsCi0JCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7Ci0KLQkJaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZCksCi0JCQkJICAgICAgICZwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0sIE5VTEwpOwotCX0KKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQwOTYKQEAgLTU4OCw2ICs2MTIsOSBAQAogCQkJCQkvIE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CiAJbmV3X3ZhbCA9IGJlYWNvbl92YWwgLyBiZWFjb25fZmFjdG9yOwogCisJaWYgKCFuZXdfdmFsKQorCQluZXdfdmFsID0gTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTDsKKwogCXJldHVybiBuZXdfdmFsOwogfQogCkBAIC02MjQsMTE3ICs2NTEsMTYgQEAKIAlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwgPSBjcHVfdG9fbGUzMihpbnRlcnZhbF90bSAtIHJlbSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0FTU09DKCJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpLAogCQkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQotCQkgICAgfihSWE9OX0ZMR19CQU5EXzI0R19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sKLQkJICAgICAgfCBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCX0gZWxzZSB7Ci0JCS8qIENvcGllZCBmcm9tIGl3bF9wb3N0X2Fzc29jaWF0ZSgpICovCi0JCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQkJZWxzZQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0FVVE9fREVURUNUX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19DQ0tfTVNLOwotCX0KLX0KLQotLyoKLSAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQotICovCi1zdGF0aWMgdm9pZCBpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQotewotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfQVA7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0VTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfSUJTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0sgfAotCQkJCQkJICBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfU05JRkZFUjsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLIHwKLQkJICAgIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyB8IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0jaWYgMAotCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCi0JICogdGhhdCAqLwotCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotI2VuZGlmCi0KLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKLQkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwotCi0JaWYgKCFjaF9pbmZvKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCS8qCi0JICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUwotCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAotCSAqLwotCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKLQkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7Ci0JcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7Ci0KLQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOwotCi0JcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAotCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOwotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKLQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsX3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7CisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwogCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwpAQCAtNzQ1LDggKzY3MSw4IEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQlJV0xfV0FSTklORygiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtNzU1LDU0ICs2ODEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfc2V0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmh3ID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGk7Ci0KLQlodyA9IGl3bF9nZXRfaHdfbW9kZShwcml2LCBwcml2LT5iYW5kKTsKLQlpZiAoIWh3KSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7Ci0JCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQotCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOwotCX0KLQotCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAotCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKLQotCS8qCi0JICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKLQkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKLQkgKiBPRkRNCi0JICovCi0JaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgotCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLX0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogR2VuZXJpYyBSWCBoYW5kbGVyIGltcGxlbWVudGF0aW9ucwpAQCAtODE3LDE5ICs2OTUsMTkgQEAKIAogCXBhbGl2ZSA9ICZwa3QtPnUuYWxpdmVfZnJhbWU7CiAKLQlJV0xfREVCVUdfSU5GTygiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgogCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCiAJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAogCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CiAKIAlpZiAocGFsaXZlLT52ZXJfc3VidHlwZSA9PSBJTklUSUFMSVpFX1NVQlRZUEUpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmVfaW5pdCwKIAkJICAgICAgICZwa3QtPnUuYWxpdmVfZnJhbWUsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3ApKTsKIAkJcHdvcmsgPSAmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydDsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmUsICZwa3QtPnUuYWxpdmVfZnJhbWUsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwpAQCAtODQxLDU1ICs3MTksNyBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCBwd29yaywKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUpKTsKIAllbHNlCi0JCUlXTF9XQVJOSU5HKCJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfRVJST1IoIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCi0JCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKLQkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCi0JCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCi0JCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOwotfQotCi0jZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKLQotc3RhdGljIHZvaWQgaXdsX3J4X2NzYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0Jc3RydWN0IGl3bF9jc2Ffbm90aWZpY2F0aW9uICpjc2EgPSAmKHBrdC0+dS5jc2Ffbm90aWYpOwotCUlXTF9ERUJVR18xMUgoIkNTQSBub3RpZjogY2hhbm5lbCAlZCwgc3RhdHVzICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpLCBsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykpOwotCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9wbV9zbGVlcF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWCgic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworCQlJV0xfV0FSTihwcml2LCAidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTkwMiw3ICs3MzIsNyBAQAogCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKLQkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTUwLDcgKzc4MCw3IEBACiAJCShzdHJ1Y3QgaXdsNDk2NV9iZWFjb25fbm90aWYgKilwa3QtPnUucmF3OwogCXU4IHJhdGUgPSBpd2xfaHdfZ2V0X3JhdGUoYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5yYXRlX25fZmxhZ3MpOwogCi0JSVdMX0RFQlVHX1JYKCJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKKwlJV0xfREVCVUdfUlgocHJpdiwgImJlYWNvbiBzdGF0dXMgJXggcmV0cmllcyAlZCBpc3MgJWQgIgogCQkidHNmICVkICVkIHJhdGUgJWRcbiIsCiAJCWxlMzJfdG9fY3B1KGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIudS5zdGF0dXMpICYgVFhfU1RBVFVTX01TSywKIAkJYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5mYWlsdXJlX2ZyYW1lLApAQCAtOTczLDcgKzgwMyw3IEBACiAJdTMyIGZsYWdzID0gbGUzMl90b19jcHUocGt0LT51LmNhcmRfc3RhdGVfbm90aWYuZmxhZ3MpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcHJpdi0+c3RhdHVzOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAorCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKIAkJCSAgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAogCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIpOwogCkBAIC0xMDQ2LDExICs4NzYsNyBAQAogCQlnb3RvIGVycjsKIAogCWlmIChzcmMgPT0gSVdMX1BXUl9TUkNfVkFVWCkgewotCQl1MzIgdmFsOwotCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19QT1dFUl9TT1VSQ0UsCi0JCQkJCSAgICAmdmFsKTsKLQotCQlpZiAodmFsICYgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQpCisJCWlmIChwY2lfcG1lX2NhcGFibGUocHJpdi0+cGNpX2RldiwgUENJX0QzY29sZCkpCiAJCQlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCiAJCQkJCSAgICAgICBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJICAgICAgIH5BUE1HX1BTX0NUUkxfTVNLX1BXUl9TUkMpOwpAQCAtMTEzNSw3ICs5NjEsNyBAQAogCiAJLyogUnggaW50ZXJydXB0LCBidXQgbm90aGluZyBzZW50IGZyb20gdUNvZGUgKi8KIAlpZiAoaSA9PSByKQotCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOworCQlJV0xfREVCVUdfUlgocHJpdiwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKIAogCWlmIChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCiAJCWZpbGxfcnggPSAxOwpAQCAtMTE3NSwxMiArMTAwMSwxMiBAQAogCQkgKiAgIGhhbmRsZSB0aG9zZSB0aGF0IG5lZWQgaGFuZGxpbmcgdmlhIGZ1bmN0aW9uIGluCiAJCSAqICAgcnhfaGFuZGxlcnMgdGFibGUuICBTZWUgaXdsX3NldHVwX3J4X2hhbmRsZXJzKCkgKi8KIAkJaWYgKHByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0pIHsKLQkJCUlXTF9ERUJVRyhJV0xfRExfUlgsICJyID0gJWQsIGkgPSAlZCwgJXMsIDB4JTAyeFxuIiwgciwKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsCiAJCQkJaSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfUlgsCisJCQlJV0xfREVCVUdfUlgocHJpdiwKIAkJCQkiciAlZCBpICVkIE5vIGhhbmRsZXIgbmVlZGVkIGZvciAlcywgMHglMDJ4XG4iLAogCQkJCXIsIGksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksCiAJCQkJcGt0LT5oZHIuY21kKTsKQEAgLTExOTMsNyArMTAxOSw3IEBACiAJCQlpZiAocnhiICYmIHJ4Yi0+c2tiKQogCQkJCWl3bF90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKIAkJCWVsc2UKLQkJCQlJV0xfV0FSTklORygiQ2xhaW0gbnVsbCByeGI/XG4iKTsKKwkJCQlJV0xfV0FSTihwcml2LCAiQ2xhaW0gbnVsbCByeGI/XG4iKTsKIAkJfQogCiAJCS8qIEZvciBub3cgd2UganVzdCBkb24ndCByZS11c2UgYW55dGhpbmcuICBXZSBjYW4gdHdlYWsgdGhpcwpAQCAtMTIyOSwyNyArMTA1NSw2IEBACiAJaXdsX3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCi0JSVdMX0RFQlVHX1JBRElPKCJSWCBDT05GSUc6XG4iKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCi0JCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCi0JCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwotfQotI2VuZGlmCi0KIC8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTEyNTgsNDUgKzEwNjMsNiBAQAogCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwogfQogCi0vKioKLSAqIGl3bF9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCi0gKi8KLXN0YXRpYyB2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2xfZG93biAqLwotCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCi0JY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9GV19FUlJPUlMpIHsKLQkJaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKLQkJaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdik7Ci0JfQotI2VuZGlmCi0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7Ci0KLQkvKiBLZWVwIHRoZSByZXN0YXJ0IHByb2Nlc3MgZnJvbSB0cnlpbmcgdG8gc2VuZCBob3N0Ci0JICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIElOSVQgc3RhdHVzIGJpdCAqLwotCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwotCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0ZXX0VSUk9SUywKLQkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKLQotCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJCW1lbWNweSgmcHJpdi0+cmVjb3ZlcnlfcnhvbiwgJnByaXYtPmFjdGl2ZV9yeG9uLAotCQkJICAgICAgIHNpemVvZihwcml2LT5yZWNvdmVyeV9yeG9uKSk7Ci0JCQlwcml2LT5lcnJvcl9yZWNvdmVyaW5nID0gMTsKLQkJfQotCQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5yZXN0YXJ0X2Z3KQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNDEsNyArMTEwNyw3IEBACiAJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwogCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCUlXTF9ERUJVR19JU1IoImludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAorCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKIAkJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CiAJfQogI2VuZGlmCkBAIC0xMzU3LDcgKzExMjMsNyBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKQEAgLTEzNzUsMTIgKzExNDEsMTIgQEAKIAlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkKLQkJCUlXTF9ERUJVR19JU1IoIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCisJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgogCQkJCSAgICAgICJ0aGUgZnJhbWUvZnJhbWVzLlxuIik7CiAKIAkJLyogQWxpdmUgbm90aWZpY2F0aW9uIHZpYSBSeCBpbnRlcnJ1cHQgd2lsbCBkbyB0aGUgcmVhbCB3b3JrICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfQUxJVkUpCi0JCQlJV0xfREVCVUdfSVNSKCJBbGl2ZSBpbnRlcnJ1cHRcbiIpOworCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiQWxpdmUgaW50ZXJydXB0XG4iKTsKIAl9CiAjZW5kaWYKIAkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwpAQCAtMTM5MywxNyArMTE1OSwyMCBAQAogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKSkKIAkJCWh3X3JmX2tpbGwgPSAxOwogCi0JCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQkvKiBkcml2ZXIgb25seSBsb2FkcyB1Y29kZSBvbmNlIHNldHRpbmcgdGhlIGludGVyZmFjZSB1cC4KLQkJICogdGhlIGRyaXZlciBhcyB3ZWxsIHdvbid0IGFsbG93IGxvYWRpbmcgaWYgUkZLSUxMIGlzIHNldAotCQkgKiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXN0YXJ0IHRoZSBkcml2ZXIgZnJvbSB0aGlzIGhhbmRsZXIKKwkJICogdGhlIGRyaXZlciBhbGxvd3MgbG9hZGluZyB0aGUgdWNvZGUgZXZlbiBpZiB0aGUgcmFkaW8KKwkJICogaXMga2lsbGVkLiBIZW5jZSB1cGRhdGUgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgaGVyZS4gVGhlCisJCSAqIHJma2lsbCBoYW5kbGVyIHdpbGwgY2FyZSBhYm91dCByZXN0YXJ0aW5nIGlmIG5lZWRlZC4KIAkJICovCi0JCWlmICghaHdfcmZfa2lsbCAmJiAhdGVzdF9iaXQoU1RBVFVTX0FMSVZFLCAmcHJpdi0+c3RhdHVzKSkgewotCQkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQkJCWlmIChwcml2LT5pc19vcGVuICYmICFpd2xfaXNfcmZraWxsKHByaXYpKQotCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+dXApOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKKwkJCWlmIChod19yZl9raWxsKQorCQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCQkJZWxzZQorCQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwpOwogCQl9CiAKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9SRl9LSUxMOwpAQCAtMTQxMSwyMSArMTE4MCwyMSBAQAogCiAJLyogQ2hpcCBnb3QgdG9vIGhvdCBhbmQgc3RvcHBlZCBpdHNlbGYgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0NUX0tJTEwpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgQ1Qga2lsbCBlcnJvciBkZXRlY3RlZC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgQ1Qga2lsbCBlcnJvciBkZXRlY3RlZC5cbiIpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0NUX0tJTEw7CiAJfQogCiAJLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcgMHglWC5cbiIsCi0JCQkgIGludGEpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKKwkJCSIgUmVzdGFydGluZyAweCVYLlxuIiwgaW50YSk7CiAJCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1NXX0VSUjsKIAl9CiAKIAkvKiB1Q29kZSB3YWtlcyB1cCBhZnRlciBwb3dlci1kb3duIHNsZWVwICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9XQUtFVVApIHsKLQkJSVdMX0RFQlVHX0lTUigiV2FrZXVwIGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOwogCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKIAkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMF0pOwogCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsxXSk7CkBAIC0xNDQ2LDcgKzEyMTUsNyBAQAogCX0KIAogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJSVdMX0RFQlVHX0lTUigiVHggaW50ZXJydXB0XG4iKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiVHggaW50ZXJydXB0XG4iKTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9GSF9UWDsKIAkJLyogRkggZmluaXNoZWQgdG8gd3JpdGUsIHNlbmQgZXZlbnQgKi8KIAkJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAxOwpAQCAtMTQ1NCwxMiArMTIyMywxMiBAQAogCX0KIAogCWlmIChpbnRhICYgfmhhbmRsZWQpCi0JCUlXTF9FUlJPUigiVW5oYW5kbGVkIElOVEEgYml0cyAweCUwOHhcbiIsIGludGEgJiB+aGFuZGxlZCk7CisJCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwogCiAJaWYgKGludGEgJiB+Q1NSX0lOSV9TRVRfTUFTSykgewotCQlJV0xfV0FSTklORygiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCisJCUlXTF9XQVJOKHByaXYsICJEaXNhYmxlZCBJTlRBIGJpdHMgMHglMDh4IHdlcmUgcGVuZGluZ1xuIiwKIAkJCSBpbnRhICYgfkNTUl9JTklfU0VUX01BU0spOwotCQlJV0xfV0FSTklORygiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOworCQlJV0xfV0FSTihwcml2LCAiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOwogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwpAQCAtMTQ3Miw3MSArMTI0MSwxMyBAQAogCQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JCUlXTF9ERUJVR19JU1IoIkVuZCBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eCwgIgorCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKLQl1MzIgaW50YSwgaW50YV9tYXNrOwotCXUzMiBpbnRhX2ZoOwotCWlmICghcHJpdikKLQkJcmV0dXJuIElSUV9OT05FOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAotCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KLQkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgotCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLwotCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCi0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCi0JaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCi0JLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCi0JICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKLQkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLwotCWlmICghaW50YSAmJiAhaW50YV9maCkgewotCQlJV0xfREVCVUdfSVNSKCJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7Ci0JCWdvdG8gbm9uZTsKLQl9Ci0KLQlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKLQkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKLQkJICogYW4gaW50ZXJydXB0ICovCi0JCUlXTF9XQVJOSU5HKCJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOwotCQlnb3RvIHVucGx1Z2dlZDsKLQl9Ci0KLQlJV0xfREVCVUdfSVNSKCJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCi0JCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7Ci0KLQlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7Ci0KLQkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KLQlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLQotIHVucGx1Z2dlZDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gbm9uZToKLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiBJUlFfTk9ORTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwpAQCAtMTU4NCw3ICsxMjk1LDcgQEAKIAkJc3ByaW50ZihidWYsICIlcyVkJXMiLCBuYW1lX3ByZSwgaW5kZXgsICIudWNvZGUiKTsKIAkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmdWNvZGVfcmF3LCBidWYsICZwcml2LT5wY2lfZGV2LT5kZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6IFJlYXNvbiAlZFxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIiVzIGZpcm13YXJlIGZpbGUgcmVxIGZhaWxlZDogJWRcbiIsCiAJCQkJICBidWYsIHJldCk7CiAJCQlpZiAocmV0ID09IC1FTk9FTlQpCiAJCQkJY29udGludWU7CkBAIC0xNTkyLDkgKzEzMDMsMTIgQEAKIAkJCQlnb3RvIGVycm9yOwogCQl9IGVsc2UgewogCQkJaWYgKGluZGV4IDwgYXBpX21heCkKLQkJCQlJV0xfRVJST1IoIkxvYWRlZCBmaXJtd2FyZSAlcywgd2hpY2ggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAorCQkJCUlXTF9FUlIocHJpdiwgIkxvYWRlZCBmaXJtd2FyZSAlcywgIgorCQkJCQkid2hpY2ggaXMgZGVwcmVjYXRlZC4gIgorCQkJCQkiUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAogCQkJCQkgIGJ1ZiwgYXBpX21heCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCisKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKIAkJCQkgICAgICAgYnVmLCB1Y29kZV9yYXctPnNpemUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE2MDUsNyArMTMxOSw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KIAlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKLQkJSVdMX0VSUk9SKCJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOworCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTE2MjYsNyArMTM0MCw3IEBACiAJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLwogCiAJaWYgKGFwaV92ZXIgPCBhcGlfbWluIHx8IGFwaV92ZXIgPiBhcGlfbWF4KSB7Ci0JCUlXTF9FUlJPUigiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCisJCUlXTF9FUlIocHJpdiwgIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgogCQkJICAiRHJpdmVyIHN1cHBvcnRzIHYldSwgZmlybXdhcmUgaXMgdiV1LlxuIiwKIAkJCSAgYXBpX21heCwgYXBpX3Zlcik7CiAJCXByaXYtPnVjb2RlX3ZlciA9IDA7CkBAIC0xNjM0LDI4ICsxMzQ4LDI4IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChhcGlfdmVyICE9IGFwaV9tYXgpCi0JCUlXTF9FUlJPUigiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgdiV1LCAiCisJCUlXTF9FUlIocHJpdiwgIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkIHYldSwgIgogCQkJICAiZ290IHYldS4gTmV3IGZpcm13YXJlIGNhbiBiZSBvYnRhaW5lZCAiCiAJCQkgICJmcm9tIGh0dHA6Ly93d3cuaW50ZWxsaW51eHdpcmVsZXNzLm9yZy5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAotCQkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfTUlOT1IocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CisJSVdMX0lORk8ocHJpdiwgImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAorCSAgICAgICBJV0xfVUNPREVfTUFKT1IocHJpdi0+dWNvZGVfdmVyKSwKKwkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKKwkgICAgICAgSVdMX1VDT0RFX1NFUklBTChwcml2LT51Y29kZV92ZXIpKTsKIAotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAogCQkgICAgICAgcHJpdi0+dWNvZGVfdmVyKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5zdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgZGF0YSBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5pdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgZGF0YSBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5pdF9kYXRhX3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgYm9vdCBpbnN0IHNpemUgPSAldVxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCiAJCSAgICAgICBib290X3NpemUpOwogCiAJLyogVmVyaWZ5IHNpemUgb2YgZmlsZSB2cy4gaW1hZ2Ugc2l6ZSBpbmZvIGluIGZpbGUncyBoZWFkZXIgKi8KQEAgLTE2NjMsNyArMTM3Nyw3IEBACiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAogCQkJICAgICAgIChpbnQpdWNvZGVfcmF3LT5zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKQEAgLTE2NzEsMzYgKzEzODUsMzMgQEAKIAogCS8qIFZlcmlmeSB0aGF0IHVDb2RlIGltYWdlcyB3aWxsIGZpdCBpbiBjYXJkJ3MgU1JBTSAqLwogCWlmIChpbnN0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBpbnN0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAogCWlmIChkYXRhX3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkJZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJaWYgKGluaXRfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCSAgICAgIGluaXRfc2l6ZSk7CisJCUlXTF9JTkZPKHByaXYsICJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQkJaW5pdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJaWYgKGluaXRfZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkgICAgICBpbml0X2RhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChib290X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGJvb3QgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCSAgICAgIGJvb3Rfc2l6ZSk7CisJCUlXTF9JTkZPKHByaXYsICJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQkJYm9vdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC0xNzQ5LDE2ICsxNDYwLDE2IEBACiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbMF07CiAJbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBpbnN0ciBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgc3JjLCBsZW4pOwotCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCiAJCXByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCAodTMyKXByaXYtPnVjb2RlX2NvZGUucF9hZGRyKTsKIAogCS8qIFJ1bnRpbWUgZGF0YSAoMm5kIGJsb2NrKQogCSAqIE5PVEU6ICBDb3B5IGludG8gYmFja3VwIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW4gaXdsX3VwKCkgICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZV07CiAJbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyLCBzcmMsIGxlbik7CiAKQEAgLTE3NjYsNyArMTQ3Nyw3IEBACiAJaWYgKGluaXRfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47Ci0JCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICVaZFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAogCQkJCWxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOwogCX0KQEAgLTE3NzUsNyArMTQ4Niw3IEBACiAJaWYgKGluaXRfZGF0YV9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlWmRcbiIsCiAJCQkgICAgICAgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAl9CkBAIC0xNzgzLDcgKzE0OTQsNyBAQAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKIAkvKiBXZSBoYXZlIG91ciBjb3BpZXMgbm93LCBhbGxvdyBPUyByZWxlYXNlIGl0cyBjb3BpZXMgKi8KQEAgLTE3OTEsNyArMTUwMiw3IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfcGNpX2FsbG9jOgotCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAlyZXQgPSAtRU5PTUVNOwogCWl3bF9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIApAQCAtMTgxNSwxMiArMTUyNiwxMiBAQAogewogCWludCByZXQgPSAwOwogCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCiAJaWYgKHByaXYtPmNhcmRfYWxpdmUuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMTgzMCwxNSArMTU0MSwxNSBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwKLQkJCSAgICByZXQpOworCQlJV0xfV0FSTihwcml2LAorCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwgcmV0KTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMTg1NiwxMyArMTU2NywxMyBAQAogCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmVfcnhvbiA9CiAJCQkJKHN0cnVjdCBpd2xfcnhvbl9jbWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0KLQkJbWVtY3B5KCZwcml2LT5zdGFnaW5nX3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJICAgICAgIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKKwkJLyogYXBwbHkgYW55IGNoYW5nZXMgaW4gc3RhZ2luZyAqLworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCX0gZWxzZSB7CiAJCS8qIEluaXRpYWxpemUgb3VyIHJ4X2NvbmZpZyBkYXRhICovCiAJCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIHByaXYtPml3X21vZGUpOworCQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CiAJCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCX0KIApAQCAtMTg3OSw3ICsxNTkwLDcgQEAKIAogCWl3bF9sZWRzX3JlZ2lzdGVyKHByaXYpOwogCi0JSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOwogCXNldF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTE5MTMsNyArMTYyNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKLQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKIAlpZiAoIWV4aXRfcGVuZGluZykKIAkJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTIwMjQsMTIgKzE3MzUsMTIgQEAKIAlpbnQgcmV0OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOworCQlJV0xfV0FSTihwcml2LCAiRXhpdCBwZW5kaW5nOyB3aWxsIG5vdCBicmluZyB0aGUgTklDIHVwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKCFwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIgfHwgIXByaXYtPnVjb2RlX2RhdGEudl9hZGRyKSB7Ci0JCUlXTF9FUlJPUigidWNvZGUgbm90IGF2YWlsYWJsZSBmb3IgZGV2aWNlIGJyaW5ndXBcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjA0MSw3ICsxNzUyLDcgQEAKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQkJSVdMX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5ICVzIFJGIEtpbGwgc3dpdGNoXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgJXMgUkYgS2lsbCBzd2l0Y2hcbiIsCiAJCSAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPyAiSFciIDogIlNXIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTIwNTAsNyArMTc2MSw3IEBACiAKIAlyZXQgPSBpd2xfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMDgzLDcgKzE3OTQsOCBAQAogCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLAorCQkJCXJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMDkzLDcgKzE4MDUsNyBAQAogCQkvKiBzdGFydCBjYXJkOyAiaW5pdGlhbGl6ZSIgd2lsbCBsb2FkIHJ1bnRpbWUgdWNvZGUgKi8KIAkJaXdsX25pY19zdGFydChwcml2KTsKIAotCQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMTA0LDcgKzE4MTYsNyBAQAogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMjE0MSw0MCArMTg1Myw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCByZl9raWxsKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKCFpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwKLQkJCSAgIkhXIGFuZC9vciBTVyBSRiBLaWxsIG5vIGxvbmdlciBhY3RpdmUsIHJlc3RhcnRpbmcgIgotCQkJICAiZGV2aWNlXG4iKTsKLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfSBlbHNlIHsKLQkJLyogbWFrZSBzdXJlIG1hYzgwMjExIHN0b3Agc2VuZGluZyBUeCBmcmFtZSAqLwotCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpCi0JCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCi0JCQkJCSAgImRpc2FibGVkIGJ5IFNXIHN3aXRjaFxuIik7Ci0JCWVsc2UKLQkJCUlXTF9XQVJOSU5HKCJSYWRpbyBGcmVxdWVuY3kgS2lsbCBTd2l0Y2ggaXMgT246XG4iCi0JCQkJICAgICJLaWxsIHN3aXRjaCBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yICIKLQkJCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX2JnX3J1bl90aW1lX2NhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCkBAIC0yMjQ0LDExICsxOTIyLDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCUlXTF9FUlJPUigiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOworCQlJV0xfRVJSKHByaXYsICIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfREVCVUdfQVNTT0MoIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKTsKIAogCkBAIC0yMjcxLDcgKzE5NDksNyBAQAogCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCiAJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCWlmIChyZXQpCi0JCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwpAQCAtMjI4MSw3ICsxOTU5LDcgQEAKIAlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CiAJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gY3B1X3RvX2xlMTYocHJpdi0+YXNzb2NfaWQpOwogCi0JSVdMX0RFQlVHX0FTU09DKCJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YmVhY29uX2ludCk7CiAKIAlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTIzMTcsNyArMTk5NSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAorCQlJV0xfRVJSKHByaXYsICIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAogCQkJICBfX2Z1bmNfXywgcHJpdi0+aXdfbW9kZSk7CiAJCWJyZWFrOwogCX0KQEAgLTIzNTMsMzAgKzIwMzEsOCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7Ci0JdTE2IHBjaV9jbWQ7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwcml2LT5wY2lfZGV2KSkgewotCQlJV0xfRVJST1IoIkZhaWwgdG8gcGNpX2VuYWJsZV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyBpZiBuZWVkZWQ6IGh3IGJ1ZyB3L2EgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwotCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKSB7Ci0JCXBjaV9jbWQgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKLQl9Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3IsIElSUUZfU0hBUkVELAotCQkJICBEUlZfTkFNRSwgcHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOwotCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMjM4OCw5ICsyMDQ0LDkgQEAKIAlpZiAoIXByaXYtPnVjb2RlX2NvZGUubGVuKSB7CiAJCXJldCA9IGl3bF9yZWFkX3Vjb2RlKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgcmVhZCBtaWNyb2NvZGU6ICVkXG4iLCByZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTI0MDEsMTIgKzIwNTcsMTIgQEAKIAlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAogCWlmIChyZXQpCi0JCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCiAJCWdvdG8gb3V0OwogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0IFVQIHdvcmsgZG9uZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydCBVUCB3b3JrIGRvbmUuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwpAQCAtMjQxOCwzNiArMjA3NCwyNiBAQAogCQkJVUNPREVfUkVBRFlfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCisJCQlJV0xfRVJSKHByaXYsICJTVEFSVF9BTElWRSB0aW1lb3V0IGFmdGVyICVkbXMuXG4iLAogCQkJCWppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAl9CiAKIG91dDoKIAlwcml2LT5pc19vcGVuID0gMTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKLQotb3V0X3JlbGVhc2VfaXJxOgotCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7Ci1vdXRfZGlzYWJsZV9tc2k6Ci0JcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwcml2LT5wY2lfZGV2KTsKLQlwcml2LT5pc19vcGVuID0gMDsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gZmFpbGVkXG4iKTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghcHJpdi0+aXNfb3BlbikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2tpcFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBza2lwXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQ2NSwyNyArMjExMSwyNyBAQAogCWl3bF9kb3duKHByaXYpOwogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX3NhdmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJLyogZW5hYmxlIGludGVycnVwdHMgYWdhaW4gaW4gb3JkZXIgdG8gcmVjZWl2ZSByZmtpbGwgY2hhbmdlcyAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bF9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDRFVNUCgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJlbnRlclxuIik7CiAKLQlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAorCUlXTF9ERUJVR19UWChwcml2LCAiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCiAJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAogCWlmIChpd2xfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQlJV0xfREVCVUdfTUFDRFVNUCgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMjQ5NSwxMCArMjE0MSwxMCBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKIAogCWlmIChwcml2LT52aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIApAQCAtMjUxMSw3ICsyMTU3LDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJTZXQgJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiU2V0ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwogCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCkBAIC0yNTIxLDcgKzIxNjcsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUzNywxMTcgKzIxODMsMTIyIEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IHJldCA9IDA7Ci0JdTE2IGNoYW5uZWw7CisJdTE2IGNoOworCWludCBzY2FuX2FjdGl2ZSA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7Ci0KLQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCA9IGNvbmYtPmh0LmVuYWJsZWQ7Ci0KLQlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJiBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGLUtJTEwgLSB3YWl0aW5nIGZvciB1Q29kZVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkKLQkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKLQotCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkIGNoYW5nZWQgMHglWFxuIiwKKwkJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNoYW5nZWQpOwogCiAJaWYgKHVubGlrZWx5KCFwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGVfaHdfc2NhbiAmJgotCQkgICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBzY2FubmluZ1xuIik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gMDsKKwkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7CisJCXNjYW5fYWN0aXZlID0gMTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAl9CiAKLQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY2hhbm5lbCk7Ci0JaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKworCS8qIGR1cmluZyBzY2FubmluZyBtYWM4MDIxMSB3aWxsIGRlbGF5IGNoYW5uZWwgc2V0dGluZyB1bnRpbAorCSAqIHNjYW4gZmluaXNoIHdpdGggY2hhbmdlZCA9IDAKKwkgKi8KKwlpZiAoIWNoYW5nZWQgfHwgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpIHsKKwkJaWYgKHNjYW5fYWN0aXZlKQorCQkJZ290byBzZXRfY2hfb3V0OworCisJCWNoID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsIGNoKTsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHNldF9jaF9vdXQ7CisJCX0KKworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCQkJIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgeworCQkJSVdMX0VSUihwcml2LCAiY2hhbm5lbCAlZCBpbiBiYW5kICVkIG5vdCAiCisJCQkJIklCU1MgY2hhbm5lbFxuIiwKKwkJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBzZXRfY2hfb3V0OworCQl9CisKKwkJcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKworCQkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCisJCSAqIGZyb20gYW55IGh0IHJlbGF0ZWQgaW5mbyBzaW5jZSAyLjQgZG9lcyBub3QKKwkJICogc3VwcG9ydCBodCAqLworCQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSAhPSBjaCkpCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOworCisJCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOworCisJCWl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKyBzZXRfY2hfb3V0OgorCQkvKiBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHJhdGUgbWFzayBjYW4gYmUgZGlmZmVyZW50CisJCSAqIGZvciBlYWNoIGJhbmQ7IHNpbmNlIHRoZSBiYW5kIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0CisJCSAqIHRoZSByYXRlIG1hc2sgdG8gd2hhdCBtYWM4MDIxMSBsaXN0cyAqLworCQlpd2xfc2V0X3JhdGUocHJpdik7CiAJfQogCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgewotCQlJV0xfRVJST1IoImNoYW5uZWwgJWQgaW4gYmFuZCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAotCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9JTkRFWF8zKTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX01PREVfQ0FNKTsKKwkJaWYgKHJldCkKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiVFggUG93ZXIgb2xkPSVkIG5ldz0lZFxuIiwKKwkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCBjb25mLT5wb3dlcl9sZXZlbCk7CiAKLQotCS8qIGlmIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBodCB0byAyLjQgY2xlYXIgZmxhZ3MKLQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90Ci0JICogc3VwcG9ydCBodCAqLwotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpICE9IGNoYW5uZWwpCi0jaWZkZWYgSUVFRTgwMjExX0NPTkZfQ0hBTk5FTF9TV0lUQ0gKLQkgICAgJiYgIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5ORUxfU1dJVENIKQotI2VuZGlmCi0JKQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOwotCi0JaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbCk7Ci0KLQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCi0JLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAotCSAqIGZvciBlYWNoIGJhbmQ7IHNpbmNlIHRoZSBiYW5kIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0Ci0JICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCi0JaXdsX3NldF9yYXRlKHByaXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgSUVFRTgwMjExX0NPTkZfQ0hBTk5FTF9TV0lUQ0gKLQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOTkVMX1NXSVRDSCkgewotCQlpd2xfaHdfY2hhbm5lbF9zd2l0Y2gocHJpdiwgY29uZi0+Y2hhbm5lbCk7Ci0JCWdvdG8gb3V0OworCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7CiAJfQotI2VuZGlmCisKKwkvKiBjYWxsIHRvIGVuc3VyZSB0aGF0IDQ5NjUgcnhfY2hhaW4gaXMgc2V0IHByb3Blcmx5IGluIG1vbml0b3IgbW9kZSAqLworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKKwkJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYKKwkJCWl3bF9yYWRpb19raWxsX3N3X2VuYWJsZV9yYWRpbyhwcml2KSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSAiCisJCQkJCQkid2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpCisJCQlpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHByaXYpOworCX0KIAogCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7Ci0JCXJldCA9IC1FSU87CisJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQotCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfSU5ERVhfMyk7Ci0JZWxzZQotCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTU9ERV9DQU0pOwotCWlmIChyZXQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIlRYIFBvd2VyIG9sZD0lZCBuZXc9JWRcbiIsCi0JCQkgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgY29uZi0+cG93ZXJfbGV2ZWwpOwotCi0JaXdsX3NldF90eF9wb3dlcihwcml2LCBjb25mLT5wb3dlcl9sZXZlbCwgZmFsc2UpOwotCi0JaXdsX3NldF9yYXRlKHByaXYpOworCWlmIChzY2FuX2FjdGl2ZSkKKwkJZ290byBvdXQ7CiAKIAlpZiAobWVtY21wKCZwcml2LT5hY3RpdmVfcnhvbiwKIAkJICAgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpKQogCQlpd2xfY29tbWl0X3J4b24ocHJpdik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiAKIG91dDoKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjY3Miw3ICsyMzIzLDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCQlzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCQlpZiAocmV0KQotCQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkJCSJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAkJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwpAQCAtMjcyNiw3ICsyMzc3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAocHJpdi0+dmlmICE9IHZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNzQ4LDcgKzIzOTksNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChjb25mLT5ic3NpZCkKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQ6ICVwTVxuIiwgY29uZi0+YnNzaWQpOwogCiAvKgogICogdmVyeSBkdWJpb3VzIGNvZGUgd2FzIGhlcmU7IHRoZSBwcm9iZSBmaWx0ZXJpbmcgZmxhZyBpcyBuZXZlciBzZXQ6CkBAIC0yNzYxLDcgKzI0MTIsNyBAQAogCQlpZiAoIWNvbmYtPmJzc2lkKSB7CiAJCQljb25mLT5ic3NpZCA9IHByaXYtPm1hY19hZGRyOwogCQkJbWVtY3B5KHByaXYtPmJzc2lkLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZCB3YXMgc2V0IHRvOiAlcE1cbiIsCisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKIAkJCQkJICAgY29uZi0+YnNzaWQpOwogCQl9CiAJCWlmIChwcml2LT5pYnNzX2JlYWNvbikKQEAgLTI3NzgsOSArMjQyOSw5IEBACiAJCS8qIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIEhXIHNjYW4gZ29pbmcgb24gaW4gdGhlIGJhY2tncm91bmQKIAkJICogdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBpdCBlbHNlIHRoZSBSWE9OIGJlbG93IHdpbGwgZmFpbC4gKi8KIAkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgIgorCQkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCiAJCQkJICAgICJhZnRlciAxMDBtc1xuIik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KQEAgLTI4MDgsNjQgKzI0NTksMTggQEAKIAl9CiAKICBkb25lOgotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlfX2xlMzIgKmZpbHRlcl9mbGFncyA9ICZwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJFbnRlcjogY2hhbmdlZDogMHgleCwgdG90YWw6IDB4JXhcbiIsCi0JCQljaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9NSVNDX0lOX0JTUykpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX1BST01JU0NfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSzsKLQl9Ci0KLQkvKiBXZSBhdm9pZCBpd2xfY29tbWl0X3J4b24gaGVyZSB0byBjb21taXQgdGhlIG5ldyBmaWx0ZXIgZmxhZ3MKLQkgKiBzaW5jZSBtYWM4MDIxMSB3aWxsIGNhbGwgaWVlZTgwMjExX2h3X2NvbmZpZyBpbW1lZGlhdGVseS4KLQkgKiAobWNfbGlzdCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSkuIE90aGVyd2lzZSwgd2UgbmVlZCB0bwotCSAqIHF1ZXVlIGEgYmFja2dyb3VuZCBpd2xfY29tbWl0X3J4b24gd29yay4KLQkgKi8KLQotCSp0b3RhbF9mbGFncyAmPSBGSUZfT1RIRVJfQlNTIHwgRklGX0FMTE1VTFRJIHwgRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0NPTlRST0w7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTI4ODAsNyArMjQ4NSw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIH0KIApAQCAtMjg5MiwxMCArMjQ5NywxMCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9QUkVBTUJMRSAlZFxuIiwKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfUFJFQU1CTEUgJWRcbiIsCiAJCQkJICAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKQEAgLTI5MDQsNyArMjUwOSw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKIAkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QgJiYgKHByaXYtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwogCQllbHNlCkBAIC0yOTE3LDcgKzI1MjIsNyBAQAogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKIAkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkCiAJCSAqIG5ldmVyIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLwogCQlpZiAoV0FSTl9PTl9PTkNFKGluX2ludGVycnVwdCgpKSkKQEAgLTI5MzksMTA4ICsyNTQ0LDQ5IEBACiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPmFzc29jX2lkID0gMDsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQl9CiAJfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX2lkKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CiAJCQlpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCX0KIAogfQogCi1zdGF0aWMgaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJcmV0ID0gLUVJTzsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogV2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kLgotCSAqIEF2b2lkIHNjYW5uaW5nIGR1cmluZyBwb3NzaWJsZSBFQVBPTCBleGNoYW5nZSwgcmV0dXJuCi0JICogc3VjY2VzcyBpbW1lZGlhdGVseS4KLQkgKi8KLQlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKLQkgICAgdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBuZXh0IHNjYW4gcGVyaW9kXG4iKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLwotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JaWYgKHNzaWRfbGVuKSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICBtaW5fdCh1OCwgc3NpZF9sZW4sIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwotCX0gZWxzZSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDA7Ci0JfQotCi0JcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGNvbnN0IHU4ICphZGRyLAogCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KQogewogCiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpd2xfdXBkYXRlX3RraXBfa2V5KHByaXYsIGtleWNvbmYsIGFkZHIsIGl2MzIsIHBoYXNlMWtleSk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2xfbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTggc3RhX2lkID0gSVdMX0lOVkFMSURfU1RBVElPTjsKLQl1OCBpc19kZWZhdWx0X3dlcF9rZXkgPSAwOworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQ7CisJdTggc3RhX2lkOworCWJvb2wgaXNfZGVmYXVsdF93ZXBfa2V5ID0gZmFsc2U7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmIChwcml2LT5od19wYXJhbXMuc3dfY3J5cHRvKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0KLQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpKQotCQkvKiBvbmx5IHN1cHBvcnQgcGFpcndpc2Uga2V5cyAqLwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogaXdsX2JjYXN0X2FkZHI7CiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCiAJCQkJICAgYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMDcwLDcgKzI2MTYsNyBAQAogCQllbHNlCiAJCQlyZXQgPSBpd2xfc2V0X2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOgogCQlpZiAoaXNfZGVmYXVsdF93ZXBfa2V5KQpAQCAtMzA3OCwxMyArMjYyNCwxMyBAQAogCQllbHNlCiAJCQlyZXQgPSBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA5NiwxNSArMjY0MiwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHE7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHF1ZXVlID49IEFDX05VTSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcXVldWUgPj0gQUNfTlVNICVkXG4iLCBxdWV1ZSk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMTI4LDcgKzI2NzQsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMzcsOCArMjY4Myw5IEBACiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CiAKLQlJV0xfREVCVUdfSFQoIkEtTVBEVSBhY3Rpb24gb24gYWRkciAlcE0gdGlkICVkXG4iLAorCUlXTF9ERUJVR19IVChwcml2LCAiQS1NUERVIGFjdGlvbiBvbiBhZGRyICVwTSB0aWQgJWRcbiIsCiAJCSAgICAgc3RhLT5hZGRyLCB0aWQpOwogCiAJaWYgKCEocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pKQpAQCAtMzE0NiwxOSArMjY5MywyNyBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKLQkJSVdMX0RFQlVHX0hUKCJzdGFydCBSeFxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAic3RhcnQgUnhcbiIpOwogCQlyZXR1cm4gaXdsX3N0YV9yeF9hZ2dfc3RhcnQocHJpdiwgc3RhLT5hZGRyLCB0aWQsICpzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBSeFxuIik7Ci0JCXJldHVybiBpd2xfc3RhX3J4X2FnZ19zdG9wKHByaXYsIHN0YS0+YWRkciwgdGlkKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdG9wIFJ4XG4iKTsKKwkJcmV0ID0gaXdsX3N0YV9yeF9hZ2dfc3RvcChwcml2LCBzdGEtPmFkZHIsIHRpZCk7CisJCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gcmV0OwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFR4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0YXJ0KHByaXYsIHN0YS0+YWRkciwgdGlkLCBzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBUeFxuIik7Ci0JCXJldHVybiBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOworCQlJV0xfREVCVUdfSFQocHJpdiwgInN0b3AgVHhcbiIpOworCQlyZXQgPSBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOworCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIHJldDsKIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSFQoInVua25vd25cbiIpOworCQlJV0xfREVCVUdfSFQocHJpdiwgInVua25vd25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQpAQCAtMzE3NCwxMCArMjcyOSwxMCBAQAogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMxOTUsNyArMjc1MCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjA2LDggKzI3NjEsOCBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCiAJcHJpdiA9IGh3LT5wcml2OwotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjE4LDcgKzI3NzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCW1lbXNldCgmcHJpdi0+Y3VycmVudF9odF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2h0X2luZm8pKTsKQEAgLTMyNDUsNyArMjgwMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KQEAgLTMyNzQsNyArMjgyOSw3IEBACiAJCQkJCQkgICAgIElFRUU4MDIxMV9DSEFOX1JBREFSKSkKIAkJCQlpd2xfcG93ZXJfZGlzYWJsZV9tYW5hZ2VtZW50KHByaXYsIDMwMDApOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMzI4Myw3ICsyODM4LDcgQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzI5MiwxNSArMjg0NywxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTY0IHRpbWVzdGFtcDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IElCU1NcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMzMTUsNyArMjg3MCw3IEBACiAJdGltZXN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CiAJcHJpdi0+dGltZXN0YW1wID0gbGU2NF90b19jcHUodGltZXN0YW1wKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWl3bF9yZXNldF9xb3MocHJpdik7CkBAIC0zMzU5LDggKzI5MTQsNyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9FUlIocHJpdiwgIiVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwogCkBAIC0zNDM5LDggKzI5OTMsNyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7CiAKQEAgLTM0NzMsOSArMzAyNiw5IEBACiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncykgIT0gZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0IHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsIGZsYWdzKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXQgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwgZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCQkJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogCQl9CkBAIC0zNTEyLDkgKzMwNjUsOSBAQAogCWlmIChsZTMyX3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzKSAhPSBmaWx0ZXJfZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgogCQkJCSAgICAgICAiMHglMDRYXG4iLCBmaWx0ZXJfZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9CiAJCQkJY3B1X3RvX2xlMzIoZmlsdGVyX2ZsYWdzKTsKQEAgLTM1MjksMzEgKzMwODIsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGZpbHRlcl9mbGFncywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmlsdGVyX2ZsYWdzLAogCQkgICBzdG9yZV9maWx0ZXJfZmxhZ3MpOwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9yZXRyeV9yYXRlKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWxvbmcgdmFsOwotCWludCByZXQgID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHJldDsKLQotCXByaXYtPnJldHJ5X3JhdGUgPSAodmFsID4gMCkgPyB2YWwgOiAxOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHByaXYtPnJldHJ5X3JhdGUpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmV0cnlfcmF0ZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcmV0cnlfcmF0ZSwKLQkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7Ci0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTM1NjUsMTggKzMwOTMsMTMgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtb2RlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY291bnQ7CkBAIC0zNjU2LDE2ICszMTc5LDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHN0YXRpc3RpY3MsIFNfSVJVR08sIHNob3dfc3RhdGlzdGljcywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzY3NSw3ICszMTg4LDcgQEAKIAogc3RhdGljIHZvaWQgaXdsX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOworCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTM3MTksOSArMzIzMiw3IEBACiAJJmRldl9hdHRyX2ZsYWdzLmF0dHIsCiAJJmRldl9hdHRyX2ZpbHRlcl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9wb3dlcl9sZXZlbC5hdHRyLAotCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKLQkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3RlbXBlcmF0dXJlLmF0dHIsCiAJJmRldl9hdHRyX3R4X3Bvd2VyLmF0dHIsCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTM3NjQsNiArMzI3NSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBwY2lfY21kOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDEuIEFsbG9jYXRpbmcgSFcgZGF0YQpAQCAtMzc4OCw3ICszMzAwLDcgQEAKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CiAJcHJpdi0+Y2ZnID0gY2ZnOwogCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogCkBAIC0zODE2LDggKzMzMjgsNyBAQAogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQkvKiBib3RoIGF0dGVtcHRzIGZhaWxlZDogKi8KIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAotCQkJCURSVl9OQU1FKTsKKwkJCUlXTF9XQVJOKHByaXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJCX0KIAl9CkBAIC0zODM4LDEzICszMzQ5LDEyIEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOwogCiAJaXdsX2h3X2RldGVjdChwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlcyBSRVY9MHglWFxuIiwKKwlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzIFJFVj0weCVYXG4iLAogCQlwcml2LT5jZmctPm5hbWUsIHByaXYtPmh3X3Jldik7CiAKIAkvKiBXZSBkaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0zODU0LDcgKzMzNjQsNyBAQAogCS8qIGFtcCBpbml0ICovCiAJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCBBUE1HXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCS8qKioqKioqKioqKioqKioqKgpAQCAtMzg2Myw3ICszMzczLDcgQEAKIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KIAllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCWVyciA9IGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihwcml2KTsKQEAgLTM4NzIsMTQgKzMzODIsMTQgQEAKIAogCS8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi8KIAlpd2xfZWVwcm9tX2dldF9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cwogCSAqKioqKioqKioqKioqKioqKioqKioqKiovCiAJaWYgKGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKIAkJZ290byBvdXRfZnJlZV9lZXByb207CiAJfQogCkBAIC0zODk5LDcgKzM0MDksNyBAQAogCS8qIERpc2FibGUgcmFkaW8gKFNXIFJGIEtJTEwpIHZpYSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIGRyaXZlciAqLwogCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGUpIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCUlXTF9ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioKQEAgLTM5MDksMzggKzM0MTksNTcgQEAKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAorCXBjaV9lbmFibGVfbXNpKHByaXYtPnBjaV9kZXYpOworCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2xfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJWX05BTUUsIHByaXYpOworCWlmIChlcnIpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CisJCWdvdG8gb3V0X2Rpc2FibGVfbXNpOworCX0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF91bmluaXRfZHJ2OworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCi0KIAlpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQkvKioqKioqKioqKioqKioqKioqKioKLQkgKiA5LiBDb25jbHVkZQotCSAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqIDEwLiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKKwkgKiA5LiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKKwkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOworCX0KKworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwogCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwogCiAJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisKKwkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLworCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJiBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKKwkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwllbHNlCisJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCiAJZXJyID0gaXdsX3Jma2lsbF9pbml0KHByaXYpOwogCWlmIChlcnIpCi0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzk0OCw3ICszNDc3LDEwIEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2xfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfdW5pbml0X2RydjoKKyBvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKKyBvdXRfZGlzYWJsZV9tc2k6CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwogIG91dF9mcmVlX2VlcHJvbToKIAlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CkBAIC0zOTczLDcgKzM1MDUsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CkBAIC00MDE5LDYgKzM1NTEsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDA0NCwxOSArMzU3OCw4IEBACiAJCXByaXYtPmlzX29wZW4gPSAxOwogCX0KIAotCS8qIHBjaSBkcml2ZXIgYXNzdW1lcyBzdGF0ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogcGNpIHN0YXRlIGlzIHNhdmVkIGFuZCBkZXZpY2UgZGlzYWJsZWQgd2hlbiBpbnRlcmZhY2UgaXMKLQkgKiBzdG9wcGVkLCBzbyBhdCB0aGlzIHRpbWUgcGNpIGRldmljZSB3aWxsIGFsd2F5cyBiZSBkaXNhYmxlZCAtCi0JICogd2hldGhlciBpbnRlcmZhY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90LiBzYXZpbmcgcGNpIHN0YXRlIG5vdyB3aWxsCi0JICogY2F1c2Ugc2F2ZWQgc3RhdGUgYmUgdGhhdCBvZiBhIGRpc2FibGVkIGRldmljZSwgd2hpY2ggd2lsbCBjYXVzZQotCSAqIHByb2JsZW1zIGR1cmluZyByZXN1bWUgaW4gdGhhdCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgZGlzYWJsZWQgZGV2aWNlLgotCSAqCi0JICogaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBzYXZlZCBzdGF0ZSAoZnJvbSB3aGVuIGludGVyZmFjZSB3YXMKLQkgKiBzdG9wcGVkKSBpcyB2YWxpZC4gaWYgaW50ZXJmYWNlIHdhcyBuZXZlciB1cCBhdCB0aW1lIG9mIHN1c3BlbmQKLQkgKiB0aGVuIHRoZSBzYXZlZCBzdGF0ZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGl0IHdhcyBzYXZlZCBkdXJpbmcKLQkgKiAucHJvYmUuICovCi0JcGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwotCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwpAQCAtNDA2NSw4ICszNTg4LDE0IEBACiBzdGF0aWMgaW50IGl3bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bF9tYWNfc3RhcnQocHJpdi0+aHcpOwpAQCAtNDEwNyw2ICszNjM2LDIxIEBACiAvKiA1MTUwIFdpZmkvV2lNYXggKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNDLCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNELCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKKy8qIDYwMDAvNjA1MCBTZXJpZXMgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDExMDIsIGl3bDYwMDBfMmFnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTExMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTIyLCBpd2w2MDAwXzJhZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJCLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOCwgUENJX0FOWV9JRCwgaXdsNjAwMF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NiwgUENJX0FOWV9JRCwgaXdsNjA1MF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODcsIFBDSV9BTllfSUQsIGl3bDYwNTBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg4LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4OSwgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAorLyogMTAwMCBTZXJpZXMgV2lGaSAqLworCXtJV0xfUENJX0RFVklDRSgweDAwODMsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODQsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAogI2VuZGlmIC8qIENPTkZJR19JV0w1MDAwICovCiAKIAl7MH0KQEAgLTQxMzMsMTMgKzM2NzcsMTQgQEAKIAogCXJldCA9IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggZjgzNmVjYy4uNzM1ZjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCXJldHVybiAwOwogZXJyOgotCUlXTF9FUlJPUigiRXJyb3IgJWQgaXRlcmF0aW9uICVkXG4iLCByZXQsIGkpOworCUlXTF9FUlIocHJpdiwgIkVycm9yICVkIGl0ZXJhdGlvbiAlZFxuIiwgcmV0LCBpKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQl2YWwgPSBkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldOwogCQlzaWxlbmNlX3JlZiA9IG1heChzaWxlbmNlX3JlZiwgdmFsKTsKIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCiAJCQlzaWxlbmNlX3Jzc2lfYSwgc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jLAogCQkJc2lsZW5jZV9yZWYpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKIAltYXhfbnJnX2NjayArPSA2OwogCi0JSVdMX0RFQlVHX0NBTElCKCJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCiAJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKIAkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKIApAQCAtMjM2LDE1ICsyMzYsMTUgQEAKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSsrOwogCWVsc2UKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSA9IDA7Ci0JSVdMX0RFQlVHX0NBTElCKCJjb25zZWN1dGl2ZSBiY25zIHdpdGggZmV3IGZhbHNlIGFsYXJtcyA9ICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY29uc2VjdXRpdmUgYmNucyB3aXRoIGZldyBmYWxzZSBhbGFybXMgPSAldVxuIiwKIAkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOwogCiAJLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLwogCWlmICgoZmFsc2VfYWxhcm1zID4gbWF4X2ZhbHNlX2FsYXJtcykgJiYKIAkJKGRhdGEtPmF1dG9fY29ycl9jY2sgPiBBVVRPX0NPUlJfTUFYX1RIX0NDSykpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXVcbiIsCiAJCSAgICAgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKLQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gcmVkdWNpbmcgc2Vuc2l0aXZpdHlcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiByZWR1Y2luZyBzZW5zaXRpdml0eVxuIik7CiAJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOwogCQkvKiBTdG9yZSBmb3IgImZld2VyIHRoYW4gZGVzaXJlZCIgb24gbGF0ZXIgYmVhY29uICovCiAJCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gKHMzMilkYXRhLT5ucmdfc2lsZW5jZV9yZWYgLQogCQkJCQkJICAgKHMzMilzaWxlbmNlX3JlZjsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXUsIHNpbGVuY2UgZGlmZiAlZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1IDwgbWluIEZBICV1LCBzaWxlbmNlIGRpZmYgJWRcbiIsCiAJCQkgZmFsc2VfYWxhcm1zLCBtaW5fZmFsc2VfYWxhcm1zLAogCQkJIGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmKTsKIApAQCAtMjgwLDE3ICsyODAsMTcgQEAKIAkJCSgoZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPiBOUkdfRElGRikgfHwKIAkJCShkYXRhLT5udW1faW5fY2NrX25vX2ZhID4gTUFYX05VTUJFUl9DQ0tfTk9fRkEpKSkgewogCi0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBpbmNyZWFzaW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGluY3JlYXNpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQkJLyogSW5jcmVhc2UgbnJnIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCiAJCQl2YWwgPSBkYXRhLT5ucmdfdGhfY2NrICsgTlJHX1NURVBfQ0NLOwogCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1pbigodTMyKXJhbmdlcy0+bWluX25yZ19jY2ssIHZhbCk7CiAJCX0gZWxzZSB7Ci0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBidXQgbm90IGNoYW5naW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGJ1dCBub3QgY2hhbmdpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQl9CiAKIAkvKiBFbHNlIHdlIGdvdCBhIGhlYWx0aHkgbnVtYmVyIG9mIGZhbHNlIGFsYXJtcywga2VlcCBzdGF0dXMgcXVvICovCiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCIgRkEgaW4gc2FmZSB6b25lXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgRkEgaW4gc2FmZSB6b25lXG4iKTsKIAkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfR09PRF9SQU5HRTsKIAogCQkvKiBTdG9yZSBmb3IgdXNlIGluICJmZXdlciB0aGFuIGRlc2lyZWQiIHdpdGggbGF0ZXIgYmVhY29uICovCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJICogICBnaXZlIGl0IHNvbWUgZXh0cmEgbWFyZ2luIGJ5IHJlZHVjaW5nIHNlbnNpdGl2aXR5IGFnYWluCiAJCSAqICAgKGJ1dCBkb24ndCBnbyBiZWxvdyBtZWFzdXJlZCBlbmVyZ3kgb2YgZGVzaXJlZCBSeCkgKi8KIAkJaWYgKElXTF9GQV9UT09fTUFOWSA9PSBkYXRhLT5ucmdfcHJldl9zdGF0ZSkgewotCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOwogCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAobWF4X25yZ19jY2sgKyBOUkdfTUFSR0lOKSkKIAkJCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47CiAJCQllbHNlCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkgKiBMb3dlciB2YWx1ZSBpcyBoaWdoZXIgZW5lcmd5LCBzbyB3ZSB1c2UgbWF4KCkhCiAJICovCiAJZGF0YS0+bnJnX3RoX2NjayA9IG1heChtYXhfbnJnX2NjaywgZGF0YS0+bnJnX3RoX2Njayk7Ci0JSVdMX0RFQlVHX0NBTElCKCJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CiAKIAlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IGRhdGEtPm5yZ19jdXJyX3N0YXRlOwogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCiAJaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAogCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwogCiAJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KIAllbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7CiAKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1IDwgbWluIEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXVcbiIsCiAJCQkgICAgIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcyk7CiAKIAkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG0gLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9CiAJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEsIHZhbCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJtaW4gRkEgJXUgPCBub3JtIEZBICV1IDwgbWF4IEZBICV1IE9LXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCiAJCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTIsMTggKzQ1MiwxOCBAQAogCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX29mZG0pOwogCiAJY21kLnRhYmxlW0hEX0JBUktFUl9DT1JSX1RIX0FERF9NSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDE5MCk7CisJCQkJY3B1X3RvX2xlMTYoMTkwKTsKIAljbWQudGFibGVbSERfQkFSS0VSX0NPUlJfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDM5MCk7CisJCQkJY3B1X3RvX2xlMTYoMzkwKTsKIAljbWQudGFibGVbSERfT0ZETV9FTkVSR1lfVEhfSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDYyKTsKKwkJCQljcHVfdG9fbGUxNig2Mik7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm9mZG06IGFjICV1IG1yYyAldSB4MSAldSBtcmNfeDEgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAib2ZkbTogYWMgJXUgbXJjICV1IHgxICV1IG1yY194MSAldSB0aHJlc2ggJXVcbiIsCiAJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjLAogCQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEsIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSwKIAkJCWRhdGEtPm5yZ190aF9vZmRtKTsKIAotCUlXTF9ERUJVR19DQUxJQigiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAogCQkJZGF0YS0+YXV0b19jb3JyX2NjaywgZGF0YS0+YXV0b19jb3JyX2Nja19tcmMsCiAJCQlkYXRhLT5ucmdfdGhfY2NrKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAJLyogRG9uJ3Qgc2VuZCBjb21tYW5kIHRvIHVDb2RlIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgKi8KIAlpZiAoIW1lbWNtcCgmY21kLnRhYmxlWzBdLCAmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksCiAJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCiAJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKIAlpZiAocmV0KQotCQlJV0xfRVJST1IoIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTRU5TSVRJVklUWV9DTUQgZmFpbGVkXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00OTgsNyArNDk4LDcgQEAKIAlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0NBTElCKCJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CiAKIAkvKiBDbGVhciBkcml2ZXIncyBzZW5zaXRpdml0eSBhbGdvIGRhdGEgKi8KIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWRhdGEtPmxhc3RfZmFfY250X2NjayA9IDA7CiAKIAlyZXQgfD0gaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHByaXYpOwotCUlXTF9ERUJVR19DQUxJQigiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8cmV0dXJuIDB4JVhcbiIsIHJldCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X3NlbnNpdGl2aXR5KTsKIApAQCAtNTYyLDEzICs1NjIsMTMgQEAKIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiPDwgaW52YWxpZCBkYXRhLlxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgaW52YWxpZCBkYXRhLlxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU5NSwxMCArNTk1LDEwIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKIAogCWlmICghcnhfZW5hYmxlX3RpbWUpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCBSWCBFbmFibGUgVGltZSA9PSAwISBcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IFJYIEVuYWJsZSBUaW1lID09IDAhIFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYzNyw3ICs2MzcsNyBAQAogCW5vcm1fZmFfb2ZkbSA9IGZhX29mZG0gKyBiYWRfcGxjcF9vZmRtOwogCW5vcm1fZmFfY2NrID0gZmFfY2NrICsgYmFkX3BsY3BfY2NrOwogCi0JSVdMX0RFQlVHX0NBTElCKCJjY2s6IGZhICV1IGJhZHAgJXUgIG9mZG06IGZhICV1IGJhZHAgJXVcbiIsIGZhX2NjaywKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNjazogZmEgJXUgYmFkcCAldSAgb2ZkbTogZmEgJXUgYmFkcCAldVxuIiwgZmFfY2NrLAogCQkJYmFkX3BsY3BfY2NrLCBmYV9vZmRtLCBiYWRfcGxjcF9vZmRtKTsKIAogCWl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOwpAQCAtNjkwLDEzICs2OTAsMTMgQEAKIAkgKiAgIHRoZW4gd2UncmUgZG9uZSBmb3JldmVyLiAqLwogCWlmIChkYXRhLT5zdGF0ZSAhPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURSkgewogCQlpZiAoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKQotCQkJSVdMX0RFQlVHX0NBTElCKCJXYWl0IGZvciBub2lzZSBjYWxpYiByZXNldFxuIik7CisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIldhaXQgZm9yIG5vaXNlIGNhbGliIHJlc2V0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiIDw8IEludGVyZmVyZW5jZSBkYXRhIHVuYXZhaWxhYmxlXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC03MDksNyArNzA5LDcgQEAKIAkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKIAkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KIAlpZiAoKHJ4b25fY2hudW0gIT0gc3RhdF9jaG51bSkgfHwgKHJ4b25fYmFuZDI0ICE9IHN0YXRfYmFuZDI0KSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQyND0lZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGF0cyBub3QgZnJvbSBjaGFuPSVkLCBiYW5kMjQ9JWRcbiIsCiAJCQkJcnhvbl9jaG51bSwgcnhvbl9iYW5kMjQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTczOSwxMSArNzM5LDExIEBACiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAoY2hhaW5fc2lnX2IgKyBkYXRhLT5jaGFpbl9zaWduYWxfYik7CiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2MgPSAoY2hhaW5fc2lnX2MgKyBkYXRhLT5jaGFpbl9zaWduYWxfYyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoImNoYW49JWQsIGJhbmQyND0lZCwgYmVhY29uPSVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhbj0lZCwgYmFuZDI0PSVkLCBiZWFjb249JWRcbiIsCiAJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCwgZGF0YS0+YmVhY29uX2NvdW50KTsKLQlJV0xfREVCVUdfQ0FMSUIoImNoYWluX3NpZzogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkJY2hhaW5fc2lnX2EsIGNoYWluX3NpZ19iLCBjaGFpbl9zaWdfYyk7Ci0JSVdMX0RFQlVHX0NBTElCKCJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQljaGFpbl9ub2lzZV9hLCBjaGFpbl9ub2lzZV9iLCBjaGFpbl9ub2lzZV9jKTsKIAogCS8qIElmIHRoaXMgaXMgdGhlIDIwdGggYmVhY29uLCBkZXRlcm1pbmU6CkBAIC03NzMsOSArNzczLDkgQEAKIAkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGF2ZXJhZ2Vfc2lnWzBdLCBhdmVyYWdlX3NpZ1sxXSwgYXZlcmFnZV9zaWdbMl0pOwotCUlXTF9ERUJVR19DQUxJQigibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtYXhfYXZlcmFnZV9zaWcgPSAlZCwgYW50ZW5uYSAlZFxuIiwKIAkJICAgICBtYXhfYXZlcmFnZV9zaWcsIG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCiAJLyogQ29tcGFyZSBzaWduYWwgc3RyZW5ndGhzIGZvciBhbGwgMyByZWNlaXZlcnMuICovCkBAIC03ODksNyArNzg5LDcgQEAKIAkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMTsKIAkJCWVsc2UKIAkJCQlhY3RpdmVfY2hhaW5zIHw9ICgxIDw8IGkpOwotCQkJSVdMX0RFQlVHX0NBTElCKCJpID0gJWQgIHJzc2lEZWx0YSA9ICVkICAiCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKIAkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKIAkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7CiAJCX0KQEAgLTgxMyw3ICs4MTMsNyBAQAogCQkJICogZGlzY29ubmVjdGVkIGNvbm5lY3QgaXQgYW55d2F5ICovCiAJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMDsKIAkJCWFjdGl2ZV9jaGFpbnMgfD0gYW50X21zazsKLQkJCUlXTF9ERUJVR19DQUxJQigiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKIAkJCQkiZGVjbGFyZSAlZCBhcyBjb25uZWN0ZWRcbiIsIGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgyMSw3ICs4MjEsNyBAQAogCiAJLyogU2F2ZSBmb3IgdXNlIHdpdGhpbiBSWE9OLCBUWCwgU0NBTiBjb21tYW5kcywgZXRjLiAqLwogCXByaXYtPmNoYWluX25vaXNlX2RhdGEuYWN0aXZlX2NoYWlucyA9IGFjdGl2ZV9jaGFpbnM7Ci0JSVdMX0RFQlVHX0NBTElCKCJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCiAJCQlhY3RpdmVfY2hhaW5zKTsKIAogCS8qIEFuYWx5emUgbm9pc2UgZm9yIHJ4IGJhbGFuY2UgKi8KQEAgLTgzOSwxNSArODM5LDE2IEBACiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQlhdmVyYWdlX25vaXNlWzBdLCBhdmVyYWdlX25vaXNlWzFdLAogCQkJYXZlcmFnZV9ub2lzZVsyXSk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm1pbl9hdmVyYWdlX25vaXNlID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtaW5fYXZlcmFnZV9ub2lzZSA9ICVkLCBhbnRlbm5hICVkXG4iLAogCQkJbWluX2F2ZXJhZ2Vfbm9pc2UsIG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSk7CiAKLQlwcml2LT5jZmctPm9wcy0+dXRpbHMtPmdhaW5fY29tcHV0YXRpb24ocHJpdiwgYXZlcmFnZV9ub2lzZSwKLQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pLCBtaW5fYXZlcmFnZV9ub2lzZSk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nYWluX2NvbXB1dGF0aW9uKHByaXYsIGF2ZXJhZ2Vfbm9pc2UsCisJCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksIG1pbl9hdmVyYWdlX25vaXNlKTsKIAogCS8qIFNvbWUgcG93ZXIgY2hhbmdlcyBtYXkgaGF2ZSBiZWVuIG1hZGUgZHVyaW5nIHRoZSBjYWxpYnJhdGlvbi4KIAkgKiBVcGRhdGUgYW5kIGNvbW1pdCB0aGUgUlhPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKaW5kZXggMWFiZTg0Yi4uYjZjZWY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBiYTk5NzIwLi4yOWQ0MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSwxMiArNjksMjAgQEAKICNpZm5kZWYgX19pd2xfY29tbWFuZHNfaF9fCiAjZGVmaW5lIF9faXdsX2NvbW1hbmRzX2hfXwogCitzdHJ1Y3QgaXdsX3ByaXY7CisKIC8qIHVDb2RlIHZlcnNpb24gY29udGFpbnMgNCB2YWx1ZXM6IE1ham9yL01pbm9yL0FQSS9TZXJpYWwgKi8KICNkZWZpbmUgSVdMX1VDT0RFX01BSk9SKHZlcikJKCgodmVyKSAmIDB4RkYwMDAwMDApID4+IDI0KQogI2RlZmluZSBJV0xfVUNPREVfTUlOT1IodmVyKQkoKCh2ZXIpICYgMHgwMEZGMDAwMCkgPj4gMTYpCiAjZGVmaW5lIElXTF9VQ09ERV9BUEkodmVyKQkoKCh2ZXIpICYgMHgwMDAwRkYwMCkgPj4gOCkKICNkZWZpbmUgSVdMX1VDT0RFX1NFUklBTCh2ZXIpCSgodmVyKSAmIDB4MDAwMDAwRkYpCiAKKworLyogVHggcmF0ZXMgKi8KKyNkZWZpbmUgSVdMX0NDS19SQVRFUwk0CisjZGVmaW5lIElXTF9PRkRNX1JBVEVTCTgKKyNkZWZpbmUgSVdMX01BWF9SQVRFUwkoSVdMX0NDS19SQVRFUyArIElXTF9PRkRNX1JBVEVTKQorCiBlbnVtIHsKIAlSRVBMWV9BTElWRSA9IDB4MSwKIAlSRVBMWV9FUlJPUiA9IDB4MiwKQEAgLTEzNiw5ICsxNDQsMTEgQEAKIAlXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OID0gMHg5NCwJLyogbm90IHVzZWQgKi8KIAogCS8qIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMgKi8KKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5NSwKIAlRVUlFVF9OT1RJRklDQVRJT04gPSAweDk2LAkJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NywKLQlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OCwKKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EX1YxID0gMHg5OCwJLyogb2xkIHZlcnNpb24gb2YgQVBJICovCisJVFhfQU5UX0NPTkZJR1VSQVRJT05fQ01EID0gMHg5OCwJLyogbm90IHVzZWQgKi8KIAlNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTiA9IDB4OTksCS8qIG5vdCB1c2VkICovCiAKIAkvKiBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIGNvbmZpZyBjb21tYW5kICovCkBAIC0yMTksNiArMjI5LDM3IEBACiAJdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAorICoKKyAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKKyAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAorICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAorICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCisgKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCisgKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgorICoKKyAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7CisJdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLworCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICisgKi8KK3N0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKKwl1OCByYXRlOwkJLyogcGxjcCAqLworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGl3bGFnbiByYXRlX25fZmxhZ3MgYml0IGZpZWxkcwogICoKQEAgLTMwMCwxMSArMzQxLDEyIEBACiAgKiA1MzUwIGhhcyAzIHRyYW5zbWl0dGVycwogICogYml0MTQ6MTYKICAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfUE9TICAgICAgMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLICAgIDB4MDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLICAgIDB4MDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0NfTVNLICAgIDB4MTAwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCQ19NU0sgIDB4MUMwMDAKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX1BPUwkxNAorI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sJMHgwNDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sJMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQ19NU0sJMHgxMDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCShSQVRFX01DU19BTlRfQV9NU0sgfCBSQVRFX01DU19BTlRfQl9NU0spCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9BQkNfTVNLCShSQVRFX01DU19BTlRfQUJfTVNLIHwgUkFURV9NQ1NfQU5UX0NfTVNLKQogI2RlZmluZSBSQVRFX0FOVF9OVU0gMwogCiAjZGVmaW5lIFBPV0VSX1RBQkxFX05VTV9FTlRSSUVTCQkJMzMKQEAgLTQ5Miw4ICs1MzQsNiBAQAogCV9fbGUzMiBpc192YWxpZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KLQogLyoKICAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQogICovCkBAIC01MjUsNiArNTY1LDcgQEAKIAogCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSwkJY3B1X3RvX2xlMTYoMHgxIDw8IDApCisjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUwkJKDApCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfTVNLCQkJY3B1X3RvX2xlMTYoMHg3IDw8IDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TCQkJKDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRk9SQ0VfU0VMX01TSwkJY3B1X3RvX2xlMTYoMHg3IDw8IDQpCkBAIC02MTEsNiArNjUyLDI2IEBACiAgKiAgICAgICAgaXNzdWUgYSBuZXcgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCBhZnRlciBlYWNoIFJFUExZX1JYT04gKDB4MTApLAogICogICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgaXMgc2V0LgogICovCisKK3N0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHsKKwl1OCBub2RlX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMTsKKwl1OCBic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDI7CisJdTggd2xhcF9ic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDM7CisJdTggZGV2X3R5cGU7CisJdTggYWlyX3Byb3BhZ2F0aW9uOworCV9fbGUxNiByZXNlcnZlZDQ7CisJdTggb2ZkbV9iYXNpY19yYXRlczsKKwl1OCBjY2tfYmFzaWNfcmF0ZXM7CisJX19sZTE2IGFzc29jX2lkOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUxNiByZXNlcnZlZDU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgewogCXU4IG5vZGVfYWRkcls2XTsKIAlfX2xlMTYgcmVzZXJ2ZWQxOwpAQCAtNjU2LDYgKzcxNywyOCBAQAogCV9fbGUxNiByZXNlcnZlZDY7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCisgKi8KK3N0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIGZpbHRlcl9mbGFnczsKKwl1OCBvZmRtX2Jhc2ljX3JhdGVzOworCXU4IGNja19iYXNpY19yYXRlczsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCXU4IG9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOworCV9fbGUxNiByeF9jaGFpbl9zZWxlY3RfZmxhZ3M7CisJX19sZTE2IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKIAlfX2xlMzIgZmxhZ3M7CiAJX19sZTMyIGZpbHRlcl9mbGFnczsKQEAgLTY3MSwyMCArNzU0LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qCi0gKiBSRVBMWV9SWE9OX0FTU09DID0gMHgxMSAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JdTggb2ZkbV9iYXNpY19yYXRlczsKLQl1OCBjY2tfYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JX19sZTE2IHJ4X2NoYWluX3NlbGVjdF9mbGFnczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCiAKIC8qCkBAIC03MDIsNiArNzcxLDE2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7CisJdTggYmFuZDsKKwl1OCBleHBlY3RfYmVhY29uOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUzMiByeG9uX2ZsYWdzOworCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKKwlfX2xlMzIgc3dpdGNoX3RpbWU7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9jaGFubmVsX3N3aXRjaF9jbWQgewogCXU4IGJhbmQ7CiAJdTggZXhwZWN0X2JlYWNvbjsKQEAgLTc4Myw2ICs4NjIsOCBAQAogI2RlZmluZQlJV0xfQVBfSUQJCTAKICNkZWZpbmUgSVdMX01VTFRJQ0FTVF9JRAkxCiAjZGVmaW5lCUlXTF9TVEFfSUQJCTIKKyNkZWZpbmUJSVdMMzk0NV9CUk9BRENBU1RfSUQJMjQKKyNkZWZpbmUgSVdMMzk0NV9TVEFUSU9OX0NPVU5UCTI1CiAjZGVmaW5lIElXTDQ5NjVfQlJPQURDQVNUX0lECTMxCiAjZGVmaW5lCUlXTDQ5NjVfU1RBVElPTl9DT1VOVAkzMgogI2RlZmluZSBJV0w1MDAwX0JST0FEQ0FTVF9JRAkxNQpAQCAtNzkxLDYgKzg3Miw4IEBACiAjZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCisjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CisjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwogI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKQEAgLTkwMSw2ICs5ODQsMzUgQEAKICAqICAgICAgICB1c2VkIGFzIEFQLCBvciBpbiBhbiBJQlNTIG5ldHdvcmssIGRyaXZlciBtdXN0IHNldCB1cCBzdGF0aW9uIHRhYmxlCiAgKiAgICAgICAgZW50cmllcyBmb3IgYWxsIFNUQXMgaW4gbmV0d29yaywgc3RhcnRpbmcgd2l0aCBpbmRleCBJV0xfU1RBX0lELgogICovCisKK3N0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgeworCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKKwlzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvIGtleTsKKwlfX2xlMzIgc3RhdGlvbl9mbGFnczsJCS8qIFNUQV9GTEdfKiAqLworCV9fbGUzMiBzdGF0aW9uX2ZsYWdzX21zazsJLyogU1RBX0ZMR18qICovCisKKwkvKiBiaXQgZmllbGQgdG8gZGlzYWJsZSAoMSkgb3IgZW5hYmxlICgwKSBUeCBmb3IgVHJhZmZpYyBJRCAoVElEKQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYml0IChlLmcuIGJpdCA1IGNvbnRyb2xzIFRJRCA1KS4KKwkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfVElEX0RJU0FCTEVfVFggdG8gdXNlIHRoaXMgZmllbGQuICovCisJX19sZTE2IHRpZF9kaXNhYmxlX3R4OworCisJX19sZTE2IHJhdGVfbl9mbGFnczsKKworCS8qIFRJRCBmb3Igd2hpY2ggdG8gYWRkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCXU4IGFkZF9pbW1lZGlhdGVfYmFfdGlkOworCisJLyogVElEIGZvciB3aGljaCB0byByZW1vdmUgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJdTggcmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQ7CisKKwkvKiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZm9yIGFkZGVkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCV9fbGUxNiBhZGRfaW1tZWRpYXRlX2JhX3NzbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kIHsKIAl1OCBtb2RlOwkJLyogMTogbW9kaWZ5IGV4aXN0aW5nLCAwOiBhZGQgbmV3IHN0YXRpb24gKi8KIAl1OCByZXNlcnZlZFszXTsKQEAgLTEwNTQsNiArMTE2Niw0OCBAQAogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSwkoMSA8PCA3KQogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLCSgweDgwMCkKIAorCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyB7CisJdTggcGh5X2NvdW50OworCXU4IGlkOworCXU4IHJzc2k7CisJdTggYWdjOworCV9fbGUxNiBzaWdfYXZnOworCV9fbGUxNiBub2lzZV9kaWZmOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKKwlfX2xlMTYgY2hhbm5lbDsKKwlfX2xlMTYgcGh5X2ZsYWdzOworCXU4IHJlc2VydmVkMTsKKwl1OCByYXRlOworCV9fbGUxNiBsZW47CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgeworCV9fbGUzMiBzdGF0dXM7CisJX19sZTY0IHRpbWVzdGFtcDsKKwlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCisgKgorICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCisgKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCisgKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCisgKiBzdGF0cy5waHlfY291bnQKKyAqLworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgeworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7CisJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIElXTDM5X1JYX0ZSQU1FX1NJWkUJKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQorCiAvKiBGaXhlZCAobm9uLWNvbmZpZ3VyYWJsZSkgcnggZGF0YSBmcm9tIHBoeSAqLwogCiAjZGVmaW5lIElXTDQ5X1JYX1JFU19QSFlfQ05UIDE0CkBAIC0xMjM0LDYgKzEzODgsODQgQEAKICNkZWZpbmUgVEtJUF9JQ1ZfTEVOIDQKIAogLyoKKyAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKKyAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgeworCS8qCisJICogTVBEVSBieXRlIGNvdW50OgorCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAorCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKKwkgKiArIERhdGEgcGF5bG9hZAorCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCisJICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAorCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCisJICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCisJICovCisJX19sZTE2IGxlbjsKKworCS8qCisJICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCisJICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgorCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgorCSAqLworCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKKworCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCisKKwl1OCByYXRlOworCisJLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCisJdTggc3RhX2lkOworCXU4IHRpZF90c3BlYzsKKwl1OCBzZWNfY3RsOworCXU4IGtleVsxNl07CisJdW5pb24geworCQl1OCBieXRlWzhdOworCQlfX2xlMTYgd29yZFs0XTsKKwkJX19sZTMyIGR3WzJdOworCX0gdGtpcF9taWM7CisJX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKKwl1bmlvbiB7CisJCV9fbGUzMiBsaWZlX3RpbWU7CisJCV9fbGUzMiBhdHRlbXB0OworCX0gc3RvcF90aW1lOworCXU4IHN1cHBfcmF0ZXNbMl07CisJdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KKwl1bmlvbiB7CisJCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OworCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKKwl9IHRpbWVvdXQ7CisKKwkvKgorCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCisJICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCisJICovCisJX19sZTE2IGRyaXZlcl90eG9wOworCisJLyoKKwkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKKwkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQorCSAqLworCXU4IHBheWxvYWRbMF07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKKwl1OCBmYWlsdXJlX3J0czsKKwl1OCBmYWlsdXJlX2ZyYW1lOworCXU4IGJ0X2tpbGxfY291bnQ7CisJdTggcmF0ZTsKKwlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKKwlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KICAqIERyaXZlciBzaG91bGQgc2V0IHRoZXNlIGZpZWxkcyB0byAwLgpAQCAtMTI0NCw5ICsxNDc2LDYgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyoKLSAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKLSAqLwogc3RydWN0IGl3bF90eF9jbWQgewogCS8qCiAJICogTVBEVSBieXRlIGNvdW50OgpAQCAtMTU4NCw2ICsxODEzLDE0IEBACiAgKgogICogU2VlIGRldGFpbHMgdW5kZXIgIlRYUE9XRVIiIGluIGl3bC00OTY1LWh3LmguCiAgKi8KKworc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCB7CisJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IGNoYW5uZWw7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCB7CiAJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCiAJdTggcmVzZXJ2ZWQ7CkBAIC0xNTkxLDYgKzE4MjgsMzUgQEAKIAlzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB0eF9wb3dlcjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKKyAqCisgKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQorICoKKyAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKKyAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCisgKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKKyAqIG1hc2tzLCBldGMuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAorICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKKyAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgorICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQorICovCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB7CisJX19sZTE2IHJhdGVfbl9mbGFnczsKKwl1OCB0cnlfY250OworCXU4IG5leHRfcmF0ZV9pbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKKwl1OCB0YWJsZV9pZDsKKwl1OCByZXNlcnZlZFszXTsKKwlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIC8qUlNfTkVXX0FQSTogb25seSBUTENfUlRTIHJlbWFpbnMgYW5kIG1vdmVkIHRvIGJpdCAwICovCiAjZGVmaW5lICBMSU5LX1FVQUxfRkxBR1NfU0VUX1NUQV9UTENfUlRTX01TSwkoMSA8PCAwKQogCkBAIC0yMDQ0LDE1ICsyMzEwLDIzIEBACiAgKi8KICNkZWZpbmUgSVdMX1BPV0VSX1ZFQ19TSVpFIDUKIAotI2RlZmluZSBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSwljcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lIElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLCQljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIElXTF9QT1dFUl9QQ0lfUE1fTVNLCQkJY3B1X3RvX2xlMTYoMSA8PCAzKQotI2RlZmluZSBJV0xfUE9XRVJfRkFTVF9QRAkJCWNwdV90b19sZTE2KDEgPDwgNCkKKyNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMTYoQklUKDApKQorI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMTYoQklUKDIpKQorI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTE2KEJJVCgzKSkKKyNkZWZpbmUgSVdMX1BPV0VSX0ZBU1RfUEQJCQljcHVfdG9fbGUxNihCSVQoNCkpCisKK3N0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKKwlfX2xlMTYgZmxhZ3M7CisJdTggcmVzZXJ2ZWRbMl07CisJX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKKwlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgewogCV9fbGUxNiBmbGFnczsKLQl1OCBrZWVwX2FsaXZlX3NlY29uZHM7Ci0JdTggZGVidWdfZmxhZ3M7CisJdTgga2VlcF9hbGl2ZV9zZWNvbmRzOwkJLyogMzk0NSByZXNlcnZlZCAqLworCXU4IGRlYnVnX2ZsYWdzOwkJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KIAlfX2xlMzIgcnhfZGF0YV90aW1lb3V0OwogCV9fbGUzMiB0eF9kYXRhX3RpbWVvdXQ7CiAJX19sZTMyIHNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRV07CkBAIC0yMTQzLDYgKzI0MTcsMjYgQEAKICAqICAgICBwYXNzaXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKiAgICAgYWN0aXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKi8KKworLyogRklYTUU6IHJlbmFtZSB0byBBUDEsIHJlbW92ZSB0cGMgKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCB7CisJLyoKKwkgKiB0eXBlIGlzIGRlZmluZWQgYXM6CisJICogMDowIDEgPSBhY3RpdmUsIDAgPSBwYXNzaXZlCisJICogMTo0IFNTSUQgZGlyZWN0IGJpdCBtYXA7IGlmIGEgYml0IGlzIHNldCwgdGhlbiBjb3JyZXNwb25kaW5nCisJICogICAgIFNTSUQgSUUgaXMgdHJhbnNtaXR0ZWQgaW4gcHJvYmUgcmVxdWVzdC4KKwkgKiA1OjcgcmVzZXJ2ZWQKKwkgKi8KKwl1OCB0eXBlOworCXU4IGNoYW5uZWw7CS8qIGJhbmQgaXMgc2VsZWN0ZWQgYnkgaXdsMzk0NV9zY2FuX2NtZCAiZmxhZ3MiIGZpZWxkICovCisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOworCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCisJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLworI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCisKIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTIxNTksNiArMjQ1Myw5IEBACiAJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgX19sZTMyIHR5cGUgKi8KKyNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3NzaWRfaWUgLSBkaXJlY3RlZCBzY2FuIG5ldHdvcmsgaW5mb3JtYXRpb24gZWxlbWVudAogICoKQEAgLTIxNzIsNiArMjQ2OSw3IEBACiAJdTggc3NpZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYX0FQSTEJCTB4NAogI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYICAgICAgICAJMHgxNAogI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCWNwdV90b19sZTMyKDB4RkZGRkZGRkYpCiAjZGVmaW5lIElXTF9HT09EX0NSQ19USAkJCWNwdV90b19sZTE2KDEpCkBAIC0yMjI5LDYgKzI1MjcsNTEgQEAKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgc2VlIHRpbWluZyByZXN0cmljdGlvbnMgZGVzY3JpYmVkIHVuZGVyCiAgKiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbC4KICAqLworCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7CisJX19sZTE2IGxlbjsKKwl1OCByZXNlcnZlZDA7CisJdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KKwlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKKwkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCisJX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLworCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCisJCQkJICogY2hhbm5lbCAqLworCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCisJCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgorCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCisJCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KKwkJCQkgKi8KKwlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCisJX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLworCisJLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCisJICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOworCisJLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCisJc3RydWN0IGl3bF9zc2lkX2llIGRpcmVjdF9zY2FuW1BST0JFX09QVElPTl9NQVhfQVBJMV07CisKKwkvKgorCSAqIFByb2JlIHJlcXVlc3QgZnJhbWUsIGZvbGxvd2VkIGJ5IGNoYW5uZWwgbGlzdC4KKwkgKgorCSAqIFNpemUgb2YgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBjb3VudCBpbiB0eF9jbWQuCisJICogQ2hhbm5lbCBsaXN0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvYmUgcmVxdWVzdCBmcmFtZS4KKwkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gbGlzdCBpcyBzcGVjaWZpZWQgYnkgY2hhbm5lbF9jb3VudC4KKwkgKiBFYWNoIGNoYW5uZWwgaW4gbGlzdCBpcyBvZiB0eXBlOgorCSAqCisJICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIGNoYW5uZWxzWzBdOworCSAqCisJICogTk9URTogIE9ubHkgb25lIGJhbmQgb2YgY2hhbm5lbHMgY2FuIGJlIHNjYW5uZWQgcGVyIHBhc3MuICBZb3UKKwkgKiBtdXN0IG5vdCBtaXggMi40R0h6IGNoYW5uZWxzIGFuZCA1LjJHSHogY2hhbm5lbHMsIGFuZCB5b3UgbXVzdCB3YWl0CisJICogZm9yIG9uZSBzY2FuIHRvIGNvbXBsZXRlIChpLmUuIHJlY2VpdmUgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pCisJICogYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBzY2FuLgorCSAqLworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9zY2FuX2NtZCB7CiAJX19sZTE2IGxlbjsKIAl1OCByZXNlcnZlZDA7CkBAIC0yMzM2LDYgKzI2NzksMTQgQEAKIC8qCiAgKiBCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKi8KKworc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOworCV9fbGUzMiBsb3dfdHNmOworCV9fbGUzMiBoaWdoX3RzZjsKKwlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w0OTY1X2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCBiZWFjb25fbm90aWZ5X2hkcjsKIAlfX2xlMzIgbG93X3RzZjsKQEAgLTIzNDYsNiArMjY5NywxNSBAQAogLyoKICAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7CisJX19sZTE2IHRpbV9pZHg7CisJdTggdGltX3NpemU7CisJdTggcmVzZXJ2ZWQxOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGZyYW1lWzBdOwkvKiBiZWFjb24gZnJhbWUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMjM4Miw2ICsyNzQyLDc2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgeworCV9fbGUzMiBpbmFfY250OworCV9fbGUzMiBmaW5hX2NudDsKKwlfX2xlMzIgcGxjcF9lcnI7CisJX19sZTMyIGNyYzMyX2VycjsKKwlfX2xlMzIgb3ZlcnJ1bl9lcnI7CisJX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOworCV9fbGUzMiBjcmMzMl9nb29kOworCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7CisJX19sZTMyIGZpbmFfc3luY19lcnJfY250OworCV9fbGUzMiBzZmRfdGltZW91dDsKKwlfX2xlMzIgZmluYV90aW1lb3V0OworCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7CisJX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOworCV9fbGUzMiBzZW50X2Fja19jbnQ7CisJX19sZTMyIHNlbnRfY3RzX2NudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IHsKKwlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLworCV9fbGUzMiBib2d1c19hY2s7CS8qIEFDSyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQUNLICovCisJX19sZTMyIG5vbl9ic3NpZF9mcmFtZXM7CS8qIG51bWJlciBvZiBmcmFtZXMgd2l0aCBCU1NJRCB0aGF0CisJCQkJCSAqIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBTVEEgQlNTSUQgKi8KKwlfX2xlMzIgZmlsdGVyZWRfZnJhbWVzOwkvKiBjb3VudCBmcmFtZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbiB0aGUKKwkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLworCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCisJCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCB7CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IGNjazsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggeworCV9fbGUzMiBwcmVhbWJsZV9jbnQ7CisJX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKKwlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7CisJX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7CisJX19sZTMyIGZld19ieXRlc19jbnQ7CisJX19sZTMyIGN0c190aW1lb3V0OworCV9fbGUzMiBhY2tfdGltZW91dDsKKwlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKKwlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHN0YXRpc3RpY3NfZGJnIHsKKwlfX2xlMzIgYnVyc3RfY2hlY2s7CisJX19sZTMyIGJ1cnN0X2NvdW50OworCV9fbGUzMiByZXNlcnZlZFs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgeworCV9fbGUzMiB0eF9vbl9hOworCV9fbGUzMiB0eF9vbl9iOworCV9fbGUzMiBleGVjX3RpbWU7CisJX19sZTMyIHByb2JlX3RpbWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCB7CisJX19sZTMyIHRlbXBlcmF0dXJlOworCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CisJX19sZTMyIHNsZWVwX3RpbWU7CisJX19sZTMyIHNsb3RzX291dDsKKwlfX2xlMzIgc2xvdHNfaWRsZTsKKwlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgZGl2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7CiAJX19sZTMyIGluYV9jbnQ7CiAJX19sZTMyIGZpbmFfY250OwpAQCAtMjQxOCw3ICsyODQ4LDcgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMigxKQorI2RlZmluZSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUgICAgICBjcHVfdG9fbGUzMigxKQogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IHsKIAlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLwpAQCAtMjQ5MywxMSArMjkyMyw2IEBACiAJc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBzdGF0aXN0aWNzX2RiZyB7Ci0JX19sZTMyIGJ1cnN0X2NoZWNrOwotCV9fbGUzMiBidXJzdF9jb3VudDsKLQlfX2xlMzIgcmVzZXJ2ZWRbNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHN0YXRpc3RpY3NfZGl2IHsKIAlfX2xlMzIgdHhfb25fYTsKQEAgLTI1NjEsNiArMjk4NiwxNCBAQAogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKICNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorCitzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgZmxhZzsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCByeDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc190eCB0eDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTMwMTIsNiArMzQ0NSwxMCBAQAogCV9fbGUzMiBsZW47CiAJc3RydWN0IGl3bF9jbWRfaGVhZGVyIGhkcjsKIAl1bmlvbiB7CisJCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHJ4X2ZyYW1lOworCQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHR4X3Jlc3A7CisJCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiBiZWFjb25fc3RhdHVzOworCiAJCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKIAkJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gc3BlY3RydW1fbm90aWY7CiAJCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7CkBAIC0zMDI5LDYgKzM0NjYsNiBAQAogCX0gdTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1pbnQgaXdsX2Fnbl9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uKTsKK2ludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKICNlbmRpZgkJCQkvKiBfX2l3bF9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA3M2Q3OTczLi5jNTRmYjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCkBAIC0xNzAsNyArMTcxLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9CiAJCWllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bF9wcml2KSwgaHdfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAorCQkgICAgICAgY2ZnLT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTAsNyArMjEyLDcgQEAKIAlpZiAoIXJ4cS0+YmQpIHsKIAkJcmV0ID0gaXdsX3J4X3F1ZXVlX2FsbG9jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlCkBAIC0yMzgsNiArMjQwLDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9od19uaWNfaW5pdCk7CiAKKy8qCisgKiBRb1MgIHN1cHBvcnQKKyovCit2b2lkIGl3bF9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmb3JjZSkKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOworCisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCisJICAgICFwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAudHhvcF9yZXF1ZXN0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9CisJCQlRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0s7CisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KKwkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOworCisJaWYgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9IFFPU19QQVJBTV9GTEdfVEdOX01TSzsKKworCWlmIChmb3JjZSB8fCBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCQlJV0xfREVCVUdfUU9TKHByaXYsICJzZW5kIFFvUyBjbWQgd2l0aCBRb3MgYWN0aXZlPSVkIEZMQUdTPTB4JVhcbiIsCisJCQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSwKKwkJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzKTsKKworCQlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1FPU19QQVJBTSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kKSwKKwkJCQkgICAgICAgJnByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybSwgTlVMTCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfYWN0aXZhdGVfcW9zKTsKKwogdm9pZCBpd2xfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MTYgY3dfbWluID0gMTU7CkBAIC0zMjEsNyArMzU2LDcgQEAKIAkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwogCQl9CiAJfQotCUlXTF9ERUJVR19RT1MoInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOworCUlXTF9ERUJVR19RT1MocHJpdiwgInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtNDAyLDEwICs0MzcsMTEgQEAKIAl9CiB9CiAKKwogLyoqCiAgKiBpd2xjb3JlX2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCiAgKi8KLXN0YXRpYyBpbnQgaXdsY29yZV9pbml0X2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2g7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CkBAIC00MTYsNyArNDUyLDcgQEAKIAogCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CiAJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwogCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQ1Nyw4ICs0OTMsNiBAQAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKIAlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CiAKLQlpd2xjb3JlX2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCiAJZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwogCkBAIC01MDAsNyArNTM0LDcgQEAKIAkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwogCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MHglWFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgJWQgRnJlcT0lZFslc0dIel0gJXMgZmxhZz0weCVYXG4iLAogCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAogCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAogCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/CkBAIC01MTAsMzMgKzU0NCwzMyBAQAogCiAJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCiAJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJSVdMX0lORk8ocHJpdiwgIkluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAiCisJCQkiUGxlYXNlIHNlbmQgeW91ciBQQ0kgSUQgMHglMDRYOjB4JTA0WCB0byBtYWludGFpbmVyLlxuIiwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPmRldmljZSwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpOwotCisJSVdMX0lORk8ocHJpdiwgIlR1bmFibGUgY2hhbm5lbHM6ICVkIDgwMi4xMWJnLCAlZCA4MDIuMTFhIGNoYW5uZWxzXG4iLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKIAogCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xjb3JlX2luaXRfZ2Vvcyk7CiAKIC8qCiAgKiBpd2xjb3JlX2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsY29yZV9pbml0X2dlb3MKICAqLwotc3RhdGljIHZvaWQgaXdsY29yZV9mcmVlX2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2xjb3JlX2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJa2ZyZWUocHJpdi0+aWVlZV9jaGFubmVscyk7CiAJa2ZyZWUocHJpdi0+aWVlZV9yYXRlcyk7CiAJY2xlYXJfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bGNvcmVfZnJlZV9nZW9zKTsKIAogc3RhdGljIGJvb2wgaXNfc2luZ2xlX3J4X3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC01ODcsNiArNjIxLDE2NyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfaXNfZmF0X3R4X2FsbG93ZWQpOwogCit2b2lkIGl3bF9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKGh3X2RlY3J5cHQpCisJCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOworCWVsc2UKKwkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKKworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25faHdjcnlwdG8pOworCisvKioKKyAqIGl3bF9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCisgKgorICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKKyAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKKyAqIG1ha2luZyBjaGFuZ2VzCisgKi8KK2ludCBpd2xfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBlcnJvciA9IDA7CisJaW50IGNvdW50ZXIgPSAxOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CisJCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYKKwkJCQkoUlhPTl9GTEdfVEdKX05BUlJPV19CQU5EX01TSyB8CisJCQkJIFJYT05fRkxHX1JBREFSX0RFVEVDVF9NU0spKTsKKwkJaWYgKGVycm9yKQorCQkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIDI0RyBmaWVsZHMgJWQgfCAlZFxuIiwKKwkJCQkgICAgY291bnRlcisrLCBlcnJvcik7CisJfSBlbHNlIHsKKwkJZXJyb3IgfD0gKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID8KKwkJCQkwIDogbGUzMl90b19jcHUoUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgZmllbGRzICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmIFJYT05fRkxHX0NDS19NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgQ0NLICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCX0KKwllcnJvciB8PSAocnhvbi0+bm9kZV9hZGRyWzBdIHwgcnhvbi0+YnNzaWRfYWRkclswXSkgJiAweDE7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgbWFjIGFkZHIgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7CisKKwkvKiBtYWtlIHN1cmUgYmFzaWMgcmF0ZXMgNk1icHMgYW5kIDFNYnBzIGFyZSBzdXBwb3J0ZWQgKi8KKwllcnJvciB8PSAoKChyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfNk1fTUFTSykgPT0gMCkgJiYKKwkJICAoKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApKTsKKwlpZiAoZXJyb3IpCisJCUlXTF9XQVJOKHByaXYsICJjaGVjayBiYXNpYyByYXRlICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIGFzc29jIGlkICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQorCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIENDSyBhbmQgc2hvcnQgc2xvdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSkKKwkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgQ0NLICYgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKKwkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKKworCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwKKwkJCVJYT05fRkxHX1RHR19QUk9URUNUX01TSykpID09IFJYT05fRkxHX1RHR19QUk9URUNUX01TSyk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgVEdHIGFuZCBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCisJaWYgKGVycm9yKSB7CisJCUlXTF9FUlIocHJpdiwgIk5vdCBhIHZhbGlkIGl3bF9yeG9uX2Fzc29jX2NtZCBmaWVsZCB2YWx1ZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfY2hlY2tfcnhvbl9jbWQpOworCisvKioKKyAqIGl3bF9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKKyAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KKyAqCisgKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKKyAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAorICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KKyAqLworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KKwlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCisJCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9CisJICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgorCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCisJICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCisKKwkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLworCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQorCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQorCQlyZXR1cm4gMTsKKworCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCisJaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQorCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCk7CisKK3U4IGl3bF9yYXRlX2dldF9sb3dlc3RfcGxjcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJhdGVfbWFzazsKKworCS8qIFNldCByYXRlIG1hc2sqLworCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCisJCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19SQVRFU19NQVNLOworCWVsc2UKKwkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9SQVRFU19NQVNLOworCisJLyogRmluZCBsb3dlc3QgdmFsaWQgcmF0ZSAqLworCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYOyBpICE9IElXTF9SQVRFX0lOVkFMSUQ7CisJCQkJCWkgPSBpd2xfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7CisJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJldHVybiBpd2xfcmF0ZXNbaV0ucGxjcDsKKwl9CisKKwkvKiBObyB2YWxpZCByYXRlIHdhcyBmb3VuZC4gQXNzaWduIHRoZSBsb3dlc3Qgb25lICovCisJaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKKwkJcmV0dXJuIElXTF9SQVRFXzFNX1BMQ1A7CisJZWxzZQorCQlyZXR1cm4gSVdMX1JBVEVfNk1fUExDUDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKTsKKwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CkBAIC02MjgsNyArODIzLDcgQEAKIAogCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAotCUlXTF9ERUJVR19BU1NPQygic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgogCQkJInJ4b24gZmxhZ3MgMHglWCBvcGVyYXRpb24gbW9kZSA6MHglWCAiCiAJCQkiZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IDB4JXhcbiIsCiAJCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSwKQEAgLTY3OSw3ICs4NzQsNyBAQAogCQlicmVhazsKIAljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0lOVkFMSUQ6CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIG1pbW8gcHMgbW9kZSAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBtaW1vIHBzIG1vZGUgJWRcbiIsCiAJCQkgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbV9wcyk7CiAJCVdBUk5fT04oMSk7CiAJCWlkbGVfY250ID0gLTE7CkBAIC03MDAsNiArODk1LDE4IEBACiB9CiAKIC8qKgorICogaXdsX2lzX21vbml0b3JfbW9kZSAtIERldGVybWluZSBpZiBpbnRlcmZhY2UgaW4gbW9uaXRvciBtb2RlCisgKgorICogcHJpdi0+aXdfbW9kZSBpcyBzZXQgaW4gYWRkX2ludGVyZmFjZSwgYnV0IGFkZF9pbnRlcmZhY2UgaXMKKyAqIG5ldmVyIGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlLiBUaGUgb25seSB3YXkgbWFjODAyMTEgaW5mb3JtcyB1cyBhYm91dAorICogbW9uaXRvciBtb2RlIGlzIHRocm91Z2ggY29uZmlndXJpbmcgZmlsdGVycyAoY2FsbCB0byBjb25maWd1cmVfZmlsdGVyKS4KKyAqLworc3RhdGljIGJvb2wgaXdsX2lzX21vbml0b3JfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuICEhKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyk7Cit9CisKKy8qKgogICogaXdsX3NldF9yeG9uX2NoYWluIC0gU2V0IHVwIFJ4IGNoYWluIHVzYWdlIGluICJzdGFnaW5nIiBSWE9OIGltYWdlCiAgKgogICogU2VsZWN0cyBob3cgbWFueSBhbmQgd2hpY2ggUnggcmVjZWl2ZXJzL2FudGVubmFzL2NoYWlucyB0byB1c2UuCkBAIC03NDIsNiArOTQ5LDE5IEBACiAJcnhfY2hhaW4gfD0gYWN0aXZlX3J4X2NudCA8PCBSWE9OX1JYX0NIQUlOX01JTU9fQ05UX1BPUzsKIAlyeF9jaGFpbiB8PSBpZGxlX3J4X2NudCAgPDwgUlhPTl9SWF9DSEFJTl9DTlRfUE9TOwogCisJLyogY29waWVkIGZyb20gJ2l3bF9iZ19yZXF1ZXN0X3NjYW4oKScgKi8KKwkvKiBGb3JjZSB1c2Ugb2YgY2hhaW5zIEIgYW5kIEMgKDB4NikgZm9yIFJ4IGZvciA0OTY1CisJICogQXZvaWQgQSAoMHgxKSBiZWNhdXNlIG9mIGl0cyBvZmYtY2hhbm5lbCByZWNlcHRpb24gb24gQS1iYW5kLgorCSAqIE1JTU8gaXMgbm90IHVzZWQgaGVyZSwgYnV0IHZhbHVlIGlzIHJlcXVpcmVkICovCisJaWYgKGl3bF9pc19tb25pdG9yX21vZGUocHJpdikgJiYKKwkgICAgIShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICYmCisJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpKSB7CisJCXJ4X2NoYWluID0gMHgwNyA8PCBSWE9OX1JYX0NIQUlOX1ZBTElEX1BPUzsKKwkJcnhfY2hhaW4gfD0gMHgwNiA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDcgPDwgUlhPTl9SWF9DSEFJTl9GT1JDRV9NSU1PX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDEgPDwgUlhPTl9SWF9DSEFJTl9EUklWRVJfRk9SQ0VfUE9TOworCX0KKwogCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiA9IGNwdV90b19sZTE2KHJ4X2NoYWluKTsKIAogCWlmICghaXNfc2luZ2xlICYmIChhY3RpdmVfcnhfY250ID49IElXTF9OVU1fUlhfQ0hBSU5TX1NJTkdMRSkgJiYgaXNfY2FtKQpAQCAtNzQ5LDcgKzk2OSw3IEBACiAJZWxzZQogCQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gJj0gflJYT05fUlhfQ0hBSU5fTUlNT19GT1JDRV9NU0s7CiAKLQlJV0xfREVCVUdfQVNTT0MoInJ4X2NoYWluPTB4JVggYWN0aXZlPSVkIGlkbGU9JWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJyeF9jaGFpbj0weCVYIGFjdGl2ZT0lZCBpZGxlPSVkXG4iLAogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluLAogCQkJYWN0aXZlX3J4X2NudCwgaWRsZV9yeF9jbnQpOwogCkBAIC03NzQsNyArOTk0LDcgQEAKIAl1MTYgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaC0+Y2VudGVyX2ZyZXEpOwogCiAJaWYgKCFpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZCBub3Qgc2V0IGNoYW5uZWwgdG8gJWQgWyVkXVxuIiwKIAkJCSAgICAgICBjaGFubmVsLCBiYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzkxLDEyICsxMDExLDI4MyBAQAogCiAJcHJpdi0+YmFuZCA9IGJhbmQ7CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25fY2hhbm5lbCk7CiAKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CisJCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSworCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CisJfSBlbHNlIHsKKwkJLyogQ29waWVkIGZyb20gaXdsX3Bvc3RfYXNzb2NpYXRlKCkgKi8KKwkJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCQllbHNlCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCisJCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKKworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKKworLyoKKyAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQorICovCit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCit7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisKKwltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9BUDsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyB8CisJCQkJCQkgIFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQlicmVhazsKKworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9TTklGRkVSOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgfAorCQkgICAgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLIHwgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKKwkJYnJlYWs7CisJfQorCisjaWYgMAorCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCisJICogdGhhdCAqLworCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworI2VuZGlmCisKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKKwkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOworCisJaWYgKCFjaF9pbmZvKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCS8qCisJICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUworCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAorCSAqLworCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKKwkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7CisJcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7CisKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOworCisJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQorCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9CisJICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAorCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcpOworCit2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaHcgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlpbnQgaTsKKworCWh3ID0gaXdsX2dldF9od19tb2RlKHByaXYsIHByaXYtPmJhbmQpOworCWlmICghaHcpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+YWN0aXZlX3JhdGUgPSAwOworCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7CisJCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOworCX0KKworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAorCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKKworCS8qCisJICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKKwkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKKwkgKiBPRkRNCisJICovCisJaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCisJCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgorCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9CisJCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9yYXRlKTsKKwordm9pZCBpd2xfcnhfY3NhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsX2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7CisJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCisJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7CisJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X2NzYSk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJSWCBDT05GSUc6XG4iKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCisJCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCisJCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOworfQorI2VuZGlmCisKKy8qKgorICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKKyAqLwordm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsX2Rvd24gKi8KKwlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7CisKKwkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLworCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7CisJCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CisJCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdik7CisJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOworCX0KKyNlbmRpZgorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCisJLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAorCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KKwljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKKworCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCisJCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7CisKKwkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOworCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7CisJCX0KKwkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfaXJxX2hhbmRsZV9lcnJvcik7CisKK3ZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKKwkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQorCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7CisJfQorCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQllbHNlCisJCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKKwl9CisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOworCX0KKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7CisJCWVsc2UKKwkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOworCX0KKworCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncworCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgorCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCisJICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgorCSAqLworCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2NvbmZpZ3VyZV9maWx0ZXIpOworCiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKQEAgLTgwNiwxOCArMTI5NywxOCBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOworCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKLQlody0+d2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAKIAkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KIAlody0+cXVldWVzID0gNDsKLQkvKiBxdWV1ZXMgdG8gc3VwcG9ydCAxMW4gYWdncmVnYXRpb24gKi8KLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pCi0JCWh3LT5hbXBkdV9xdWV1ZXMgPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9hbXBkdV9xdWV1ZXM7CiAKIAlody0+Y29uZi5iZWFjb25faW50ID0gMTAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gSVdMX0NPTk5fTUFYX0xJU1RFTl9JTlRFUlZBTDsKQEAgLTgzMSw3ICsxMzIyLDcgQEAKIAogCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBodyAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CkBAIC04NjMsNyArMTM1NCw2IEBACiB7CiAJaW50IHJldDsKIAotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKQEAgLTg5NywyMSArMTM4NywyMiBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCi0JcHJpdi0+cG93ZXJfbW9kZSA9IElXTF9QT1dFUl9BQzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CisJaXdsY29yZV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTkyNiwxNCArMTQxNywxNiBAQAogewogCWludCByZXQgPSAwOwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh0eF9wb3dlciA+IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIHVwcGVyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTQyLDYgKzE0MzUsMTAgQEAKIAogCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gdHhfcG93ZXI7CiAKKwkvKiBpZiBuaWMgaXMgbm90IHVwIGRvbid0IHNlbmQgY29tbWFuZCAqLworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCiAJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7CiAKQEAgLTk3MCwxOCArMTQ2Nyw5MiBAQAogCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhmZmZmZmZmZik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCUlXTF9ERUJVR19JU1IoIkRpc2FibGVkIGludGVycnVwdHNcbiIpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkRpc2FibGVkIGludGVycnVwdHNcbiIpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKTsKIAogdm9pZCBpd2xfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCUlXTF9ERUJVR19JU1IoIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwogCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIENTUl9JTklfU0VUX01BU0spOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZW5hYmxlX2ludGVycnVwdHMpOwogCitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKKwl1MzIgaW50YSwgaW50YV9tYXNrOworCXUzMiBpbnRhX2ZoOworCWlmICghcHJpdikKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAorCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KKwkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgorCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLworCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCisJLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCisJICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKKwkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLworCWlmICghaW50YSAmJiAhaW50YV9maCkgeworCQlJV0xfREVCVUdfSVNSKHByaXYsICJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7CisJCWdvdG8gbm9uZTsKKwl9CisKKwlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKKwkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKKwkJICogYW4gaW50ZXJydXB0ICovCisJCUlXTF9XQVJOKHByaXYsICJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOworCQlnb3RvIHVucGx1Z2dlZDsKKwl9CisKKwlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCisJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CisKKwlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7CisKKwkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KKwlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKKworIHVucGx1Z2dlZDoKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworCisgbm9uZToKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KKwkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQorCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiBJUlFfTk9ORTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2lzcik7CisKK2ludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfYnRfY21kIGJ0X2NtZCA9IHsKKwkJLmZsYWdzID0gMywKKwkJLmxlYWRfdGltZSA9IDB4QUEsCisJCS5tYXhfa2lsbCA9IDEsCisJCS5raWxsX2Fja19tYXNrID0gMCwKKwkJLmtpbGxfY3RzX21hc2sgPSAwLAorCX07CisKKwlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT05GSUcsCisJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfY21kKSwgJmJ0X2NtZCk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2J0X2NvbmZpZyk7CisKIGludCBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmbGFncykKIHsKIAl1MzIgc3RhdF9mbGFncyA9IDA7CkBAIC0xMDA3LDcgKzE1NzgsNyBAQAogCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KQpAQCAtMTAxOCw3ICsxNTg5LDcgQEAKIAkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCiAJCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KIAkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCi0JCQlpICsgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCQkJaSArIElXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewogCQkJcmV0ID0gLUVJTzsKQEAgLTEwNDUsMTMgKzE2MTYsMTQgQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgZXJyY250OwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKKwkJCSAgIElXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAogCWVycmNudCA9IDA7CiAJZm9yICg7IGxlbiA+IDA7IGxlbiAtPSBzaXplb2YodTMyKSwgaW1hZ2UrKykgewpAQCAtMTA2MCw3ICsxNjMyLDcgQEAKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKIAkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCiAJCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKIAkJCXJldCA9IC1FSU87CkBAIC0xMDczLDggKzE2NDUsOCBAQAogCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkgICAgInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDk0LDcgKzE2NjYsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTAzLDcgKzE2NzUsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExMTIsMTEgKzE2ODQsMTEgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKIAlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKIAlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0VSUk9SKCJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOworCUlXTF9FUlIocHJpdiwgIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CiAKIAkvKiBTaW5jZSBub3RoaW5nIHNlZW1zIHRvIG1hdGNoLCBzaG93IGZpcnN0IHNldmVyYWwgZGF0YSBlbnRyaWVzIGluCiAJICogaW5zdHJ1Y3Rpb24gU1JBTSwgc28gbWF5YmUgdmlzdWFsIGluc3BlY3Rpb24gd2lsbCBnaXZlIGEgY2x1ZS4KQEAgLTExODgsMjEgKzE3NjAsMjIgQEAKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAogCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAorCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7CiAJfQogCiAJZGVzYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxICogc2l6ZW9mKHUzMikpOwpAQCAtMTIxNSwxMiArMTc4OCwxMiBAQAogCWxpbmUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKIAl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDExICogc2l6ZW9mKHUzMikpOwogCi0JSVdMX0VSUk9SKCJEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUgICAgICAgIgorCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCiAJCSJkYXRhMSAgICAgIGRhdGEyICAgICAgbGluZVxuIik7Ci0JSVdMX0VSUk9SKCIlLTI4cyAoIyUwMmQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCisJSVdMX0VSUihwcml2LCAiJS0yOHMgKCMlMDJkKSAlMDEwdSAweCUwOFggMHglMDhYICV1XG4iLAogCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgZGF0YTEsIGRhdGEyLCBsaW5lKTsKLQlJV0xfRVJST1IoImJsaW5rMSAgYmxpbmsyICBpbGluazEgIGlsaW5rMlxuIik7Ci0JSVdMX0VSUk9SKCIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAorCUlXTF9FUlIocHJpdiwgImJsaW5rMSAgYmxpbmsyICBpbGluazEgIGlsaW5rMlxuIik7CisJSVdMX0VSUihwcml2LCAiMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYXG4iLCBibGluazEsIGJsaW5rMiwKIAkJaWxpbmsxLCBpbGluazIpOwogCiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKQEAgLTEyNjYsMTEgKzE4MzksMTEgQEAKIAkJcHRyICs9IHNpemVvZih1MzIpOwogCQlpZiAobW9kZSA9PSAwKSB7CiAJCQkvKiBkYXRhLCBldiAqLwotCQkJSVdMX0VSUk9SKCJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CiAJCX0gZWxzZSB7CiAJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiRVZUX0xPR1Q6JTAxMHU6MHglMDh4OiUwNHVcbiIsCisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKIAkJCQkJdGltZSwgZGF0YSwgZXYpOwogCQl9CiAJfQpAQCAtMTI5MiwxMyArMTg2NSwxMyBAQAogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTMxMiwxMiArMTg4NSwxMiBAQAogCiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwogCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCQlyZXR1cm47CiAJfQogCi0JSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAorCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCiAJCQlzaXplLCBudW1fd3JhcHMpOwogCiAJLyogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLCBzdGFydCBhdCB0aGUgb2xkZXN0IGVudHJ5LApAQCAtMTM0OSw5ICsxOTIyLDkgQEAKIAlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKIAkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7CiAJaWYgKHJldCkKLQkJSVdMX0VSUk9SKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgogCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAogCQkJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IpOwogfQpAQCAtMTM2OCw3ICsxOTQxLDcgQEAKICAqIFdoZW4gaW4gdGhlICdoYWx0JyBzdGF0ZSwgdGhlIGNhcmQgaXMgc2h1dCBkb3duIGFuZCBtdXN0IGJlIGZ1bGx5CiAgKiByZXN0YXJ0ZWQgdG8gY29tZSBiYWNrIG9uLgogICovCi1zdGF0aWMgaW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsIHU4IG1ldGFfZmxhZykKK2ludCBpd2xfc2VuZF9jYXJkX3N0YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGZsYWdzLCB1OCBtZXRhX2ZsYWcpCiB7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX0NBUkRfU1RBVEVfQ01ELApAQCAtMTM3OSw2ICsxOTUyLDcgQEAKIAogCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NhcmRfc3RhdGUpOwogCiB2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtMTM4Nyw3ICsxOTYxLDcgQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPRkZcbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9GRlxuIik7CiAKIAlpd2xfc2Nhbl9jYW5jZWwocHJpdik7CiAJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwpAQCAtMTQxNiw3ICsxOTkwLDcgQEAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPTlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gT05cbiIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKQEAgLTE0NDEsNyArMjAxNSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKIAkJCQkgICJkaXNhYmxlZCBieSBIVyBzd2l0Y2hcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDYzLDMgKzIwMzcsNzggQEAKIAlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKTsKKwordm9pZCBpd2xfYmdfcmZfa2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgcmZfa2lsbCk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LAorCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCisJCQkgICJkZXZpY2VcbiIpOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCisJCSAgICB0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKQorCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwl9IGVsc2UgeworCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCisJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKKworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKKwkJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKKwkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKKwkJZWxzZQorCQkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKKwkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgorCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOworfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfcmZfa2lsbCk7CisKK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAorCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3BtX3NsZWVwX25vdGlmKTsKKwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgorCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAorCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZik7CisKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKworCUlXTF9FUlIocHJpdiwgIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCisJCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCisJCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKKwkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCisJCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCisJCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAorCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcmVwbHlfZXJyb3IpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggN2MzYTIwYS4uYThlYWM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzEsNyArNzEsNyBAQAogCiAKICNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICIxLjMuMjdrIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA4IEludGVsIENvcnBvcmF0aW9uIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA5IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBEUlZfQVVUSE9SICAgICAiPGlsd0BsaW51eC5pbnRlbC5jb20+IgogCiAjZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKQEAgLTExMCw2ICsxMTAsMTQgQEAKIAl2b2lkICgqdHhxX2ludmFsX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCXZvaWQgKCp0eHFfc2V0X3NjaGVkKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtYXNrKTsKKwlpbnQgKCp0eHFfYXR0YWNoX2J1Zl90b190ZmQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgICAgIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpOworCXZvaWQgKCp0eHFfZnJlZV90ZmQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKKwlpbnQgKCp0eHFfaW5pdCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIAkvKiBhZ2dyZWdhdGlvbnMgKi8KIAlpbnQgKCp0eHFfYWdnX2VuYWJsZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgdHhfZmlmbywKIAkJCSAgICAgIGludCBzdGFfaWQsIGludCB0aWQsIHUxNiBzc25faWR4KTsKQEAgLTIwMyw2ICsyMTEsOSBAQAogCXUxNiAgZWVwcm9tX2NhbGliX3ZlcjsKIAljb25zdCBzdHJ1Y3QgaXdsX29wcyAqb3BzOwogCWNvbnN0IHN0cnVjdCBpd2xfbW9kX3BhcmFtcyAqbW9kX3BhcmFtczsKKwl1OCAgIHZhbGlkX3R4X2FudDsKKwl1OCAgIHZhbGlkX3J4X2FudDsKKwlib29sIG5lZWRfcGxsX2NmZzsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIxMywxMSArMjI0LDI2IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfb3BzICpod19vcHMpOwogdm9pZCBpd2xfaHdfZGV0ZWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZXNldF9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKTsKK3ZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpOworaW50IGl3bF9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoKTsKIHZvaWQgaXdsX3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKTsKIHU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpzdGFfaHRfaW5mKTsKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Cit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpOworaW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCSAgIHUzMiBkZWNyeXB0X3JlcywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7Cit2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CiBpbnQgaXdsX2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0yMjUsOSArMjUxLDIwIEBACiB2b2lkIGl3bF91bmluaXRfZHJ2KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlggaGFuZGxlcnMuCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFJYCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9yeF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKK3ZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0yNDUsNiArMjgyLDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiB2b2lkIGl3bF9yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X2NzYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIAogLyogVFggaGVscGVycyAqLwogCkBAIC0yNTIsOSArMjkwLDE4IEBACiAqIFRYCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgaXdsX3R4cV9jdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLCB1OCByZXNldCwgdTggcGFkKTsKIGludCBpd2xfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGl3bF9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIGludCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKTsKK3ZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKTsKIGludCBpd2xfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKnJhLCB1MTYgdGlkLCB1MTYgKnNzbik7CiBpbnQgaXdsX3R4X2FnZ19zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiAsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCk7CiBpbnQgaXdsX3R4cV9jaGVja19lbXB0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHU4IHRpZCwgaW50IHR4cV9pZCk7CkBAIC0yNjcsNyArMzE0LDcgQEAKICAqIFJGIC1LaWxsIC0gaGVyZSBhbmQgbm90IGluIGl3bC1yZmtpbGwuaCB0byBiZSBhdmFpbGFibGUgd2hlbgogICogUkYta2lsbCBzdWJzeXN0ZW0gaXMgbm90IGNvbXBpbGVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGl3bF9yZl9raWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIApAQCAtMjc5LDYgKzMyNiwxMCBAQAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKTsKIGludCBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHUzMiByYXRlX25fZmxhZ3MpOwogCit1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwordm9pZCBpd2xfc2V0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwogdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnRfaWR4KTsKIAogc3RhdGljIGlubGluZSB1MzIgaXdsX2FudF9pZHhfdG9fZmxhZ3ModTggYW50X2lkeCkKQEAgLTMwNiw4ICszNTcsMzAgQEAKIGludCBpd2xfc2Nhbl9jYW5jZWwoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgbXMpOwogaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwordTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsIGludCBsZWZ0KTsKIHZvaWQgaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3UxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgIHU4IG5fcHJvYmVzKTsKK3UxNiBpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK3ZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKK3ZvaWQgaXdsX2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKKy8qIEZvciBmYXN0ZXIgYWN0aXZlIHNjYW5uaW5nLCBzY2FuIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBjaGFubmVsIGlmIGZld2VyIHRoYW4KKyAqIFBMQ1BfUVVJRVRfVEhSRVNIIHBhY2tldHMgYXJlIGhlYXJkIG9uIHRoaXMgY2hhbm5lbCB3aXRoaW4KKyAqIEFDVElWRV9RVUlFVF9USU1FIGFmdGVyIHNlbmRpbmcgcHJvYmUgcmVxdWVzdC4gIFRoaXMgc2hvcnRlbnMgdGhlIGR3ZWxsCisgKiB0aW1lIGlmIGl0J3MgYSBxdWlldCBjaGFubmVsIChub3RoaW5nIHJlc3BvbmRlZCB0byBvdXIgcHJvYmUsIGFuZCB0aGVyZSdzCisgKiBubyBvdGhlciB0cmFmZmljKS4KKyAqIERpc2FibGUgInF1aWV0IiBmZWF0dXJlIGJ5IHNldHRpbmcgUExDUF9RVUlFVF9USFJFU0ggdG8gMC4gKi8KKyNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIGNwdV90b19sZTE2KDEwKSAgLyogbXNlYyAqLworI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgY3B1X3RvX2xlMTYoMSkgIC8qIHBhY2tldHMgKi8KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ2FsaWJyYXRpb25zIC0gaW1wbGVtZW50ZWQgaW4gaXdsLWNhbGliLmMKQEAgLTMxOSw3ICszOTIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNwZWN0cnVtIE1lYXN1cmVlbXRucyBpbiAgaXdsLXNwZWN0cnVtLmMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCiB2b2lkIGl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7fQpAQCAtMzQyLDExICs0MTUsMjMgQEAKIAogaW50IGl3bF9lbnF1ZXVlX2hjbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOwogCitpbnQgaXdsX3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywKKwkJCXU4IG1ldGFfZmxhZyk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUENJCQkJCQkJICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIGlubGluZSB1MTYgaXdsX3BjaWVfbGlua19jdGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBwb3M7CisJdTE2IHBjaV9sbmtfY3RsOworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocHJpdi0+cGNpX2RldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmcGNpX2xua19jdGwpOworCXJldHVybiBwY2lfbG5rX2N0bDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFcnJvciBIYW5kbGluZyBEZWJ1Z2dpbmcKQEAgLTM1NCw2ICs0MzksMTEgQEAKIHZvaWQgaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgR0VPUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bGNvcmVfZnJlZV9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKiogRFJJVkVSIFNUQVRVUyBGVU5DVElPTlMgICAqKioqKi8KIApAQCAtNDIyLDYgKzUxMiw3IEBACiB9CiAKIGV4dGVybiB2b2lkIGl3bF9yZl9raWxsX2N0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MpOwogZXh0ZXJuIGludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bF9zZW5kX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCmluZGV4IGYzNGVkZTQuLjJmMTI0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjExLDYgKzIxMSw5IEBACiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MzUwICAgICAgICAgICAoMHgwMDAwMDMwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTEwMCAgICAgICAgICAgKDB4MDAwMDA1MCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxNTAgICAgICAgICAgICgweDAwMDAwNDApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV8xMDAwICAgICAgICAgICAoMHgwMDAwMDYwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNngwMCAgICAgICAgICAgKDB4MDAwMDA3MCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4NTAgICAgICAgICAgICgweDAwMDAwODApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV9OT05FICAgICAgICAgICAoMHgwMDAwMEYwKQogCiAvKiBFRVBST00gUkVHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCA1NmMxM2I0Li42NWQxYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtMjksMTYgKzI5LDI5IEBACiAjaWZuZGVmIF9faXdsX2RlYnVnX2hfXwogI2RlZmluZSBfX2l3bF9kZWJ1Z19oX18KIAotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJihwcml2LT5ody0+d2lwaHktPmRldiksICIlYyAlcyAiIGZtdCwgXAotCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoKHByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIGRldl9wcmludGsoS0VSTl9FUlIsICYocHJpdi0+aHctPndpcGh5LT5kZXYpLCAiJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIElXTF9FUlIocCwgZiwgYS4uLikgZGV2X2VycigmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX1dBUk4ocCwgZiwgYS4uLikgZGV2X3dhcm4oJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisjZGVmaW5lIElXTF9JTkZPKHAsIGYsIGEuLi4pIGRldl9pbmZvKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfQ1JJVChwLCBmLCBhLi4uKSBkZXZfY3JpdCgmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisjZGVmaW5lIElXTF9ERUJVRyhfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKQkJCQlcCisJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCisJCQkgIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAorCQkJX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKChfX3ByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKF9fcHJpdi0+aHctPndpcGh5LT5kZXYpLAkJXAorCQkJIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAorCQkJIF9fZnVuY19fICwgIyMgYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIGxldmVsLCBwLCBsZW4pIAkJCVwKIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKQEAgLTYxLDYgKzc0LDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOwogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9jaGFubmVsczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0dXM7CiAJfSBkYmdmc19kYXRhX2ZpbGVzOwogCXN0cnVjdCBkaXJfcmZfZmlsZXMgewogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHk7CkBAIC03Niw4ICs5MCw4IEBACiAjZW5kaWYKIAogI2Vsc2UKLSNkZWZpbmUgSVdMX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pCi0jZGVmaW5lIElXTF9ERUJVR19MSU1JVChsZXZlbCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQogc3RhdGljIGlubGluZSB2b2lkIGl3bF9wcmludF9oZXhfZHVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZXZlbCwKIAkJCQkgICAgICB2b2lkICpwLCB1MzIgbGVuKQoge30KQEAgLTExNyw4NCArMTMxLDg1IEBACiAgKiB3aGVuIENPTkZJR19JV0xXSUZJX0RFQlVHPXkuCiAgKi8KIAorLyogMHgwMDAwMDAwRiAtIDB4MDAwMDAwMDEgKi8KICNkZWZpbmUgSVdMX0RMX0lORk8JCSgxIDw8IDApCiAjZGVmaW5lIElXTF9ETF9NQUM4MDIxMQkJKDEgPDwgMSkKICNkZWZpbmUgSVdMX0RMX0hDTUQJCSgxIDw8IDIpCiAjZGVmaW5lIElXTF9ETF9TVEFURQkJKDEgPDwgMykKKy8qIDB4MDAwMDAwRjAgLSAweDAwMDAwMDEwICovCiAjZGVmaW5lIElXTF9ETF9NQUNEVU1QCQkoMSA8PCA0KQogI2RlZmluZSBJV0xfRExfSENNRF9EVU1QCSgxIDw8IDUpCi0jZGVmaW5lIElXTF9ETF9SQURJTyAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElXTF9ETF9QT1dFUiAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElXTF9ETF9URU1QICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElXTF9ETF9SQURJTwkJKDEgPDwgNykKKy8qIDB4MDAwMDBGMDAgLSAweDAwMDAwMTAwICovCisjZGVmaW5lIElXTF9ETF9QT1dFUgkJKDEgPDwgOCkKKyNkZWZpbmUgSVdMX0RMX1RFTVAJCSgxIDw8IDkpCisjZGVmaW5lIElXTF9ETF9OT1RJRgkJKDEgPDwgMTApCisjZGVmaW5lIElXTF9ETF9TQ0FOCQkoMSA8PCAxMSkKKy8qIDB4MDAwMEYwMDAgLSAweDAwMDAxMDAwICovCisjZGVmaW5lIElXTF9ETF9BU1NPQwkJKDEgPDwgMTIpCisjZGVmaW5lIElXTF9ETF9EUk9QCQkoMSA8PCAxMykKKyNkZWZpbmUgSVdMX0RMX1RYUE9XRVIJCSgxIDw8IDE0KQorI2RlZmluZSBJV0xfRExfQVAJCSgxIDw8IDE1KQorLyogMHgwMDBGMDAwMCAtIDB4MDAwMTAwMDAgKi8KKyNkZWZpbmUgSVdMX0RMX0ZXCQkoMSA8PCAxNikKKyNkZWZpbmUgSVdMX0RMX1JGX0tJTEwJCSgxIDw8IDE3KQorI2RlZmluZSBJV0xfRExfRldfRVJST1JTCSgxIDw8IDE4KQorI2RlZmluZSBJV0xfRExfTEVECQkoMSA8PCAxOSkKKy8qIDB4MDBGMDAwMDAgLSAweDAwMTAwMDAwICovCisjZGVmaW5lIElXTF9ETF9SQVRFCQkoMSA8PCAyMCkKKyNkZWZpbmUgSVdMX0RMX0NBTElCCQkoMSA8PCAyMSkKKyNkZWZpbmUgSVdMX0RMX1dFUAkJKDEgPDwgMjIpCisjZGVmaW5lIElXTF9ETF9UWAkJKDEgPDwgMjMpCisvKiAweDBGMDAwMDAwIC0gMHgwMTAwMDAwMCAqLworI2RlZmluZSBJV0xfRExfUlgJCSgxIDw8IDI0KQorI2RlZmluZSBJV0xfRExfSVNSCQkoMSA8PCAyNSkKKyNkZWZpbmUgSVdMX0RMX0hUCQkoMSA8PCAyNikKKyNkZWZpbmUgSVdMX0RMX0lPCQkoMSA8PCAyNykKKy8qIDB4RjAwMDAwMDAgLSAweDEwMDAwMDAwICovCisjZGVmaW5lIElXTF9ETF8xMUgJCSgxIDw8IDI4KQorI2RlZmluZSBJV0xfRExfU1RBVFMJCSgxIDw8IDI5KQorI2RlZmluZSBJV0xfRExfVFhfUkVQTFkJCSgxIDw8IDMwKQorI2RlZmluZSBJV0xfRExfUU9TCQkoMSA8PCAzMSkKIAotI2RlZmluZSBJV0xfRExfTk9USUYgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSVdMX0RMX1NDQU4gICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElXTF9ETF9BU1NPQyAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJV0xfRExfRFJPUCAgICAgICAgICAoMSA8PCAxMykKLQotI2RlZmluZSBJV0xfRExfVFhQT1dFUiAgICAgICAoMSA8PCAxNCkKLQotI2RlZmluZSBJV0xfRExfQVAgICAgICAgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBJV0xfRExfRlcgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSVdMX0RMX1JGX0tJTEwgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElXTF9ETF9GV19FUlJPUlMgICAgICgxIDw8IDE4KQotCi0jZGVmaW5lIElXTF9ETF9MRUQgICAgICAgICAgICgxIDw8IDE5KQotCi0jZGVmaW5lIElXTF9ETF9SQVRFICAgICAgICAgICgxIDw8IDIwKQotCi0jZGVmaW5lIElXTF9ETF9DQUxJQiAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJV0xfRExfV0VQICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSVdMX0RMX1RYICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElXTF9ETF9SWCAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJV0xfRExfSVNSICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSVdMX0RMX0hUICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJV0xfRExfMTFIICAgICAgICAgICAoMSA8PCAyOCkKLQotI2RlZmluZSBJV0xfRExfU1RBVFMgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSVdMX0RMX1RYX1JFUExZICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElXTF9ETF9RT1MgICAgICAgICAgICgxIDw8IDMxKQotCi0jZGVmaW5lIElXTF9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lORk8oZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX01BQ0RVTVAoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfTUFDRFVNUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RFTVAoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1RFTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUlgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9UWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lTUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0xFRChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSENNRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDX0RVTVAoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IQ01EX0RVTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19DQUxJQihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0NBTElCLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRlcoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9GVywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19EUk9QX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FQKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lPKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9SQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTk9USUYoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IVChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hULCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU1RBVFMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFlfTElNSVQoZiwgYS4uLikgXAotCUlXTF9ERUJVR19MSU1JVChJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19RT1MoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1FPUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1JBRElPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUE9XRVIoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR18xMUgoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfMTFILCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSU5GTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX01BQzgwMjExLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTUFDRFVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX01BQ0RVTVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19URU1QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVEVNUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1NDQU4ocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9TQ0FOLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUlgocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9SWCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFgsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JU1IocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9JU1IsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19MRUQocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9MRUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19XRVAocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9XRVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hDTUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQ19EVU1QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSENNRF9EVU1QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0ZXKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfRlcsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0RST1AocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9EUk9QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChwLCBmLCBhLi4uKQlcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0FQKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfQVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0lPKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSU8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQVRFKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkFURSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19OT1RJRihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX05PVElGLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0MocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUcocCwgSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChwLCBmLCBhLi4uKQlcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0hUKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSFQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TVEFUUyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU1RBVFNfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZX0xJTUlUKHAsIGYsIGEuLi4pIFwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1FPUyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1FPUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkFESU8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19QT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfMTFIKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfMTFILCBmLCAjIyBhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwppbmRleCBkNTI1M2ExLi42NGViNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTYzLDYgKzYzLDE0IEBACiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKKwlkZWJ1Z2ZzX2NyZWF0ZV94MzIoI25hbWUsIDA0NDQsIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgICBcCisJaWYgKElTX0VSUihkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJCVwKKwkJCXx8ICFkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJXAorCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgREVCVUdGU19SRU1PVkUobmFtZSkgIGRvIHsgICAgICAgICAgICAgIFwKIAlkZWJ1Z2ZzX3JlbW92ZShuYW1lKTsgICAgICAgICAgICAgICAgICAgXAogCW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNjQsOSArMTcyLDYgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIm9mZnNldCBpczogMHgleFx0bGVuIGlzOiAweCV4XG4iLAotCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCwgcHJpdi0+ZGJnZnMtPnNyYW1fbGVuKTsKLQogCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJZm9yIChpID0gcHJpdi0+ZGJnZnMtPnNyYW1fbGVuOyBpID4gMDsgaSAtPSA0KSB7CiAJCXZhbCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCArIFwKQEAgLTMwMSwxNCArMzA2LDE0IEBACiAJYnVmX3NpemUgPSA0ICogZWVwcm9tX2xlbiArIDI1NjsKIAogCWlmIChlZXByb21fbGVuICUgMTYpIHsKLQkJSVdMX0VSUk9SKCJFRVBST00gc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMTYuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRUVQUk9NIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDE2LlxuIik7CiAJCXJldHVybiAtRU5PREFUQTsKIAl9CiAKIAkvKiA0IGNoYXJhY3RlcnMgZm9yIGJ5dGUgMHhZWSAqLwogCWJ1ZiA9IGt6YWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7Ci0JCUlXTF9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzY1LDcgKzM3MCw3IEBACiAKIAlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyMCw2ICs0MjUsNTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCWludCBwb3MgPSAwOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0hDTURfQUNUSVZFOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSENNRF9TWU5DX0FDVElWRTogJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0lOVF9FTkFCTEVEOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9IVzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9TVzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSU5JVDpcdFx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19BTElWRTpcdFx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkVBRFk6XHRcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1RFTVBFUkFUVVJFOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfR0VPX0NPTkZJR1VSRUQ6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19FWElUX1BFTkRJTkc6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSU5fU1VTUEVORDpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfU1RBVElTVElDUzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfU0NBTk5JTkc6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19TQ0FOX0FCT1JUSU5HOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19TQ0FOX0hXOlx0XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1BPV0VSX1BNSTpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19GV19FUlJPUjpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX01PREVfUEVORElORzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX01PREVfUEVORElORywgJnByaXYtPnN0YXR1cykpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KIAogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNyYW0pOwogREVCVUdGU19XUklURV9GSUxFX09QUyhsb2dfZXZlbnQpOwpAQCAtNDI4LDYgKzQ4Miw3IEBACiBERUJVR0ZTX1JFQURfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhbm5lbHMpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXR1cyk7CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGRlYnVnZnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCkBAIC00NjIsNiArNTE3LDcgQEAKIAlERUJVR0ZTX0FERF9GSUxFKHJ4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUodHhfc3RhdGlzdGljcywgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShjaGFubmVscywgZGF0YSk7CisJREVCVUdGU19BRERfRklMRShzdGF0dXMsIGRhdGEpOwogCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgcmYsICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIHJmLAogCQkJICZwcml2LT5kaXNhYmxlX2NoYWluX25vaXNlX2NhbCk7CkBAIC00NjksNyArNTI1LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCUlXTF9FUlJPUigiQ2FuJ3Qgb3BlbiB0aGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCUlXTF9FUlIocHJpdiwgIkNhbid0IG9wZW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDkxLDYgKzU0Nyw3IEBACiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sb2dfZXZlbnQpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdGlvbnMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY2hhbm5lbHMpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdHVzKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2RhdGEpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHkpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfY2hhaW5fbm9pc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAwNDY4ZmNjLi5lYzlhMTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiwxMyArMzYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAKLSNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpd2xhZ24iCi0jaW5jbHVkZSAiaXdsLXJma2lsbC5oIgogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKLSNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1maC5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgorI2luY2x1ZGUgIml3bC1yZmtpbGwuaCIKKyNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWh3LmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAjaW5jbHVkZSAiaXdsLWxlZC5oIgogI2luY2x1ZGUgIml3bC1wb3dlci5oIgogI2luY2x1ZGUgIml3bC1hZ24tcnMuaCIKQEAgLTU1LDYgKzU3LDI4IEBACiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzJhZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8zYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmc7CisKKy8qIHNoYXJlZCBzdHJ1Y3R1cmVzIGZyb20gaXdsLTUwMDAuYyAqLworZXh0ZXJuIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zOworZXh0ZXJuIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzOworZXh0ZXJuIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYjsKK2V4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZDsKK2V4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlsczsKKworLyogc2hhcmVkIGZ1bmN0aW9ucyBmcm9tIGl3bC01MDAwLmMgKi8KK2V4dGVybiB1MTYgaXdsNTAwMF9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbik7CitleHRlcm4gdTE2IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsCisJCQkJICAgICB1OCAqZGF0YSk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICAgIF9fbGUzMiAqdHhfZmxhZ3MpOworZXh0ZXJuIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCk7CiAKIC8qIENULUtJTEwgY29uc3RhbnRzICovCiAjZGVmaW5lIENUX0tJTExfVEhSRVNIT0xECTExMCAvKiBpbiBDZWxzaXVzICovCkBAIC0xMzIsOSArMTU2LDEyIEBACiAgKiBBIFR4IHF1ZXVlIGNvbnNpc3RzIG9mIGNpcmN1bGFyIGJ1ZmZlciBvZiBCRHMgKGEuay5hLiBURkRzLCB0cmFuc21pdCBmcmFtZQogICogZGVzY3JpcHRvcnMpIGFuZCByZXF1aXJlZCBsb2NraW5nIHN0cnVjdHVyZXMuCiAgKi8KKyNkZWZpbmUgVEZEX1RYX0NNRF9TTE9UUyAyNTYKKyNkZWZpbmUgVEZEX0NNRF9TTE9UUyAzMgorCiBzdHJ1Y3QgaXdsX3R4X3F1ZXVlIHsKIAlzdHJ1Y3QgaXdsX3F1ZXVlIHE7Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZHM7CisJdm9pZCAqdGZkczsKIAlzdHJ1Y3QgaXdsX2NtZCAqY21kW1RGRF9UWF9DTURfU0xPVFNdOwogCXN0cnVjdCBpd2xfdHhfaW5mbyAqdHhiOwogCXU4IG5lZWRfdXBkYXRlOwpAQCAtMTU0LDYgKzE4MSwzNiBAQAogCXM2NCBsYXN0X3JhZGFyX3RpbWU7CiB9OwogCisjZGVmaW5lIElXTDQ5NjVfTUFYX1JBVEUgKDMzKQorCitzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIHsKKwkvKiBtYXhpbXVtIHBvd2VyIGxldmVsIHRvIHByZXZlbnQgY2xpcHBpbmcgZm9yIGVhY2ggcmF0ZSwgZGVyaXZlZCBieQorCSAqICAgdXMgZnJvbSB0aGlzIGJhbmQncyBzYXR1cmF0aW9uIHBvd2VyIGluIEVFUFJPTSAqLworCWNvbnN0IHM4IGNsaXBfcG93ZXJzW0lXTF9NQVhfUkFURVNdOworfTsKKworLyogY3VycmVudCBUeCBwb3dlciB2YWx1ZXMgdG8gdXNlLCBvbmUgZm9yIGVhY2ggcmF0ZSBmb3IgZWFjaCBjaGFubmVsLgorICogcmVxdWVzdGVkIHBvd2VyIGlzIGxpbWl0ZWQgYnk6CisgKiAtLSByZWd1bGF0b3J5IEVFUFJPTSBsaW1pdHMgZm9yIHRoaXMgY2hhbm5lbAorICogLS0gaGFyZHdhcmUgY2FwYWJpbGl0aWVzIChjbGlwLXBvd2VycykKKyAqIC0tIHNwZWN0cnVtIG1hbmFnZW1lbnQKKyAqIC0tIHVzZXIgcHJlZmVyZW5jZSAoZS5nLiBpd2NvbmZpZykKKyAqIHdoZW4gcmVxdWVzdGVkIHBvd2VyIGlzIHNldCwgYmFzZSBwb3dlciBpbmRleCBtdXN0IGFsc28gYmUgc2V0LiAqLworc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7CS8qIGFjdHVhbCByYWRpbyBhbmQgRFNQIGdhaW4gc2V0dGluZ3MgKi8KKwlzOCBwb3dlcl90YWJsZV9pbmRleDsJLyogYWN0dWFsIChjb21wZW5zdCdkKSBpbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KKwlzOCBiYXNlX3Bvd2VyX2luZGV4OwkvKiBnYWluIGluZGV4IGZvciBwb3dlciBhdCBmYWN0b3J5IHRlbXAuICovCisJczggcmVxdWVzdGVkX3Bvd2VyOwkvKiBwb3dlciAoZEJtKSByZXF1ZXN0ZWQgZm9yIHRoaXMgY2hubC9yYXRlICovCit9OworCisvKiBjdXJyZW50IHNjYW4gVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHNjYW4gcmF0ZSBmb3IgZWFjaAorICogY2hhbm5lbC4gKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyB7CisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCisJczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCisJczggcmVxdWVzdGVkX3Bvd2VyOwkvKiBzY2FuIHB3ciAoZEJtKSByZXF1ZXN0ZWQgZm9yIGNobmwvcmF0ZSAqLworfTsKKwogLyoKICAqIE9uZSBmb3IgZWFjaCBjaGFubmVsLCBob2xkcyBhbGwgY2hhbm5lbCBzZXR1cCBkYXRhCiAgKiBTb21lIG9mIHRoZSBmaWVsZHMgKGUuZy4gZWVwcm9tIGFuZCBmbGFncy9tYXhfcG93ZXJfYXZnKSBhcmUgcmVkdW5kYW50CkBAIC0xODQsOCArMjQxLDE1IEBACiAJczggZmF0X3NjYW5fcG93ZXI7CS8qIChkQm0pIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwogCXU4IGZhdF9mbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwogCXU4IGZhdF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLwotfTsKIAorCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KKwkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKKwkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKKworCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoIHNjYW4gcmF0ZSwgZm9yIGRpcmVjdGVkIHNjYW5zLiAqLworCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyBzY2FuX3B3cl9pbmZvW0lXTF9OVU1fU0NBTl9SQVRFU107Cit9OwogCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMAkwCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMQkxCkBAIC0zNzAsNyArNDM0LDcgQEAKIAl1OCBrZXlbMzJdOwogfTsKIAotdW5pb24gaXdsNDk2NV9odF9yYXRlX3N1cHAgewordW5pb24gaXdsX2h0X3JhdGVfc3VwcCB7CiAJdTE2IHJhdGVzOwogCXN0cnVjdCB7CiAJCXU4IHNpc29fcmF0ZTsKQEAgLTQzMCw2ICs0OTQsMjQgQEAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKIAorc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgeworCXUxNiBzZXFfbnVtYmVyOworfTsKKworc3RydWN0IGl3bDM5NDVfaHdfa2V5IHsKKwllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKKwlpbnQga2V5bGVuOworCXU4IGtleVszMl07Cit9OworCitzdHJ1Y3QgaXdsMzk0NV9zdGF0aW9uX2VudHJ5IHsKKwlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kIHN0YTsKKwlzdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07CisJdTggdXNlZDsKKwl1OCBwc19zdGF0dXM7CisJc3RydWN0IGl3bDM5NDVfaHdfa2V5IGtleWluZm87Cit9OworCiBzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgewogCXN0cnVjdCBpd2xfYWRkc3RhX2NtZCBzdGE7CiAJc3RydWN0IGl3bF90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07CkBAIC00OTcsMTEgKzU3OSwxMyBAQAogICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCiAgKiBAZG1hX2NobmxfbnVtOiBOdW1iZXIgb2YgVHggRE1BL0ZJRk8gY2hhbm5lbHMKICAqIEBzY2RfYmNfdGJsc19zaXplOiBzaXplIG9mIHNjaGVkdWxlciBieXRlIGNvdW50IHRhYmxlcworICogQHRmZF9zaXplOiBURkQgc2l6ZQogICogQHR4L3J4X2NoYWluc19udW06IE51bWJlciBvZiBUWC9SWCBjaGFpbnMKICAqIEB2YWxpZF90eC9yeF9hbnQ6IHVzYWJsZSBhbnRlbm5hcwogICogQG1heF9yeHFfc2l6ZTogTWF4ICMgUnggZnJhbWVzIGluIFJ4IHF1ZXVlIChtdXN0IGJlIHBvd2VyLW9mLTIpCiAgKiBAbWF4X3J4cV9sb2c6IExvZy1iYXNlLTIgb2YgbWF4X3J4cV9zaXplCiAgKiBAcnhfYnVmX3NpemU6IFJ4IGJ1ZmZlciBzaXplCisgKiBAcnhfd3J0X3B0cl9yZWc6IEZIezM5fV9SU0NTUl9DSE5MMF9XUFRSCiAgKiBAbWF4X3N0YXRpb25zOgogICogQGJjYXN0X3N0YV9pZDoKICAqIEBmYXRfY2hhbm5lbDogaXMgNDBNSHogd2lkdGggcG9zc2libGUgaW4gYmFuZCAyLjQKQEAgLTUxNiw2ICs2MDAsNyBAQAogCXU4IG1heF90eHFfbnVtOwogCXU4IGRtYV9jaG5sX251bTsKIAl1MTYgc2NkX2JjX3RibHNfc2l6ZTsKKwl1MzIgdGZkX3NpemU7CiAJdTggIHR4X2NoYWluc19udW07CiAJdTggIHJ4X2NoYWluc19udW07CiAJdTggIHZhbGlkX3R4X2FudDsKQEAgLTUyMyw2ICs2MDgsNyBAQAogCXUxNiBtYXhfcnhxX3NpemU7CiAJdTE2IG1heF9yeHFfbG9nOwogCXUzMiByeF9idWZfc2l6ZTsKKwl1MzIgcnhfd3J0X3B0cl9yZWc7CiAJdTMyIG1heF9wa3Rfc2l6ZTsKIAl1OCAgbWF4X3N0YXRpb25zOwogCXU4ICBiY2FzdF9zdGFfaWQ7CkBAIC03NTUsNyArODQxLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgfHwgZGVmaW5lZChDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkKIAkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwogCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwogCXU4IG1lYXN1cmVtZW50X3N0YXR1czsKQEAgLTc2OCw2ICs4NTQsMTAgQEAKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hhbm5lbF9pbmZvOwkvKiBjaGFubmVsIGluZm8gYXJyYXkgKi8KIAl1OCBjaGFubmVsX2NvdW50OwkvKiAjIG9mIGNoYW5uZWxzICovCiAKKwkvKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlIEVFUFJPTSBoYXMgYSBkZXJpdmVkCisJICogY2xpcCBzZXR0aW5nIGZvciBlYWNoIHJhdGUuIDM5NDUgb25seS4qLworCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NsaXBfZ3JvdXAgY2xpcDM5X2dyb3Vwc1s1XTsKKwogCS8qIHRoZXJtYWwgY2FsaWJyYXRpb24gKi8KIAlzMzIgdGVtcGVyYXR1cmU7CS8qIGRlZ3JlZXMgS2VsdmluICovCiAJczMyIGxhc3RfdGVtcGVyYXR1cmU7CkBAIC03ODEsNyArODcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3Bhc3Nfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0X3RzZjsKLQlzdHJ1Y3QgaXdsX3NjYW5fY21kICpzY2FuOworCXZvaWQgKnNjYW47CiAJaW50IHNjYW5fYmFuZHM7CiAJaW50IG9uZV9kaXJlY3Rfc2NhbjsKIAl1OCBkaXJlY3Rfc3NpZF9sZW47CkBAIC04MzIsMTggKzkyMiwxOCBAQAogCSAqIDQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KIAlzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7CiAJc3RydWN0IGl3bF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmU7Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfUkZLSUxMCisjaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9SRktJTEwpCiAJc3RydWN0IHJma2lsbCAqcmZraWxsOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCi0Jc3RydWN0IGl3bF9sZWQgbGVkW0lXTF9MRURfVFJHX01BWF07CiAJdW5zaWduZWQgbG9uZyBsYXN0X2JsaW5rX3RpbWU7CiAJdTggbGFzdF9ibGlua19yYXRlOwogCXU4IGFsbG93X2JsaW5raW5nOwogCXU2NCBsZWRfdHB0OworCXN0cnVjdCBpd2xfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOworCXVuc2lnbmVkIGludCByeHR4cGFja2V0czsKICNlbmRpZgotCiAJdTE2IGFjdGl2ZV9yYXRlOwogCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKIApAQCAtODkzLDcgKzk4Myw2IEBACiAJdTE2IHJhdGVzX21hc2s7CiAKIAl1MzIgcG93ZXJfbW9kZTsKLQl1MzIgYW50ZW5uYTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTE2IHJ0c190aHJlc2hvbGQ7CiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwpAQCAtOTA3LDYgKzk5NiwxMiBAQAogCXU4IGtleV9tYXBwaW5nX2tleTsKIAl1bnNpZ25lZCBsb25nIHVjb2RlX2tleV90YWJsZTsKIAorCS8qIHF1ZXVlIHJlZmNvdW50cyAqLworI2RlZmluZSBJV0xfTUFYX0hXX1FVRVVFUwkzMgorCXVuc2lnbmVkIGxvbmcgcXVldWVfc3RvcHBlZFtCSVRTX1RPX0xPTkdTKElXTF9NQVhfSFdfUVVFVUVTKV07CisJLyogZm9yIGVhY2ggQUMgKi8KKwlhdG9taWNfdCBxdWV1ZV9zdG9wX2NvdW50WzRdOworCiAJLyogSW5kaWNhdGlvbiBpZiBpZWVlODAyMTFfb3BzLT5vcGVuIGhhcyBiZWVuIGNhbGxlZCAqLwogCXU4IGlzX29wZW47CiAKQEAgLTkyOSw2ICsxMDI0LDEwIEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAorCS8qQWRkZWQgZm9yIDM5NDUgKi8KKwl2b2lkICpzaGFyZWRfdmlydDsKKwlkbWFfYWRkcl90IHNoYXJlZF9waHlzOworCS8qRW5kKi8KIAlzdHJ1Y3QgaXdsX2h3X3BhcmFtcyBod19wYXJhbXM7CiAKIApAQCAtOTYwLDYgKzEwNTksMTEgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7CisKKwkvKkZvciAzOTQ1IG9ubHkqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKIAlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKQEAgLTk4Miw2ICsxMDg2LDE1IEBACiAJdTMyIGRpc2FibGVfdHhfcG93ZXJfY2FsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CisKKwkvKkZvciAzOTQ1Ki8KKyNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgorCisJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzXzM5OworCisJc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc18zOVtJV0xfU1RBVElPTl9DT1VOVF07CisKKwl1MzIgc3RhX3N1cHBfcmF0ZXM7CiB9OyAvKml3bF9wcml2ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IGNlMmY0NzMuLjc1NTE3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKIAkJCQlFRVBST01fU0VNX1RJTUVPVVQpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCUlXTF9ERUJVR19JTygiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKKwkJCUlXTF9ERUJVR19JTyhwcml2LCAiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKIAkJCQljb3VudCsxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAogCQkJCQkgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOworCQkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLAorCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSBWRVI9MHgleCA8IDB4JXggQ0FMSUI9MHgleCA8IDB4JXhcbiIsCiAJCSAgZWVwcm9tX3ZlciwgcHJpdi0+Y2ZnLT5lZXByb21fdmVyLAogCQkgIGNhbGliX3ZlciwgIHByaXYtPmNmZy0+ZWVwcm9tX2NhbGliX3Zlcik7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19JTkZPKCJGQVQgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC00MzIsMTEgKzQzMiwxMSBAQAogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCiAJaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCXByaXYtPmNoYW5uZWxfY291bnQgPQogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKSArCkBAIC00NDUsMTIgKzQ0NSwxMiBAQAogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF80KSArCiAJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzUpOwogCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwogCiAJcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9jaGFubmVsX2luZm8pICoKIAkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwogCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJIElFRUU4MDIxMV9DSEFOX05PX0ZBVF9CRUxPVyk7CiAKIAkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgorCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKIAkJCQkJICAgICAgICJObyB0cmFmZmljXG4iLAogCQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGNoX2luZm8tPmZsYWdzLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CiAJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwogCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKIAkJCQkgICAgICAgIiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCiAJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB1c2VyX3R4cG93ZXJfbGltaXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCS8qIFNldCB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKIAkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwogCQkJaWYgKGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnID4KIAkJCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQpAQCAtNTMxLDYgKzUzMSwxMyBAQAogCQl9CiAJfQogCisJLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09CisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMucmVndWxhdG9yeV9iYW5kc1s2XSA9PQorCSAgICBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCkKKwkJcmV0dXJuIDA7CisKIAkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCiAJZm9yIChiYW5kID0gNjsgYmFuZCA8PSA3OyBiYW5kKyspIHsKIAkJZW51bSBpZWVlODAyMTFfYmFuZCBpZWVlYmFuZDsKQEAgLTU4Miw2ICs1ODksNyBAQAogCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7CiAJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NoYW5uZWxfbWFwKTsKIAogLyoqCiAgKiBpd2xfZ2V0X2NoYW5uZWxfaW5mbyAtIEZpbmQgZHJpdmVyJ3MgcHJpdmF0ZSBjaGFubmVsIGluZm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggNjAzYzg0Yi4uMzQ3OTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExOCw2ICsxMTgsOSBAQAogCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogMzk0NSBTcGVjaWZpYyAqLworI2RlZmluZSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTgkoMHgyZikKKwogLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLwogI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCiAKQEAgLTM2Nyw2ICszNzAsOCBAQAogICovCiAjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMgKDIqMHhBOCkJLyogMjIgYnl0ZXMgKi8KIAorI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVAkJCSgwKQorCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwogCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggZDdkYTE5OC4uNjVmYThhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5OSw2ICszOTksMjEgQEAKICAqLwogI2RlZmluZSBGSF9UWF9DSElDS0VOX0JJVFNfU0NEX0FVVE9fUkVUUllfRU4JKDB4MDAwMDAwMDIpCiAKKyNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4CisKKy8qCisgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAorI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKKworLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLworI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfM0sgKDMgKiAxMDAwKSAvKiAzOTQ1IG9ubHkgKi8KKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3JiX3N0YXR1cyAtIHJlc2V2ZSBidWZmZXIgc3RhdHVzCiAgKiAJaG9zdCBtZW1vcnkgbWFwcGVkIEZIIHJlZ2lzdGVycwpAQCAtNDE0LDYgKzQyOSw3IEBACiAJX19sZTE2IGNsb3NlZF9mcl9udW07CiAJX19sZTE2IGZpbmlzaGVkX3JiX251bTsKIAlfX2xlMTYgZmluaXNoZWRfZnJfbmFtOworCV9fbGUzMiBfX3VudXNlZDsgLyogMzk0NSBvbmx5ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00NzcsNyArNDkzLDYgQEAKIAlfX2xlMzIgX19wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCiAvKiBLZWVwIFdhcm0gU2l6ZSAqLwogI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyogNGsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDRiMzViMzAuLjE3ZDYxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTA5LDE0ICsxMDksMTQgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXJldHVybiAxOwogCX0KIAogCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlzd2l0Y2ggKGNtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJCQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiYmFjayBmcm9tICVzICgweCUwOFgpXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAl9CiAjZW5kaWYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJcmV0ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzQsOCArMTc0LDkgQEAKIAlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODgsNyArMTg5LDcgQEAKIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nICVzOiBlbnF1ZXVlX2hjbWQgZmFpbGVkOiAlZFxuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5OCw5ICsxOTksMTAgQEAKIAkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CiAKIAkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKQEAgLTIwOSwxOSArMjExLDE5IEBACiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUNBTkNFTEVEOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGNhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCBjYTRmNjM4Li5hMTMyOGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC05Myw0ICs5Myw1NiBAQAogCXJldHVybiAoZGVzYy0+dl9hZGRyICE9IE5VTEwpID8gMCA6IC1FTk9NRU07CiB9CiAKKy8qCisgKiB3ZSBoYXZlIDggYml0cyB1c2VkIGxpa2UgdGhpczoKKyAqCisgKiA3IDYgNSA0IDMgMiAxIDAKKyAqIHwgfCB8IHwgfCB8IHwgfAorICogfCB8IHwgfCB8IHwgKy0rLS0tLS0tLS0gQUMgcXVldWUgKDAtMykKKyAqIHwgfCB8IHwgfCB8CisgKiB8ICstKy0rLSstKy0tLS0tLS0tLS0tLSBIVyBBLU1QRFUgcXVldWUKKyAqIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluZGljYXRlcyBhZ2cgcXVldWUKKyAqLworc3RhdGljIGlubGluZSB1OCBpd2xfdmlydHVhbF9hZ2dfcXVldWVfbnVtKHU4IGFjLCB1OCBod3EpCit7CisJQlVHX09OKGFjID4gMyk7ICAgLyogb25seSBoYXZlIDIgYml0cyAqLworCUJVR19PTihod3EgPiAzMSk7IC8qIG9ubHkgaGF2ZSA1IGJpdHMgKi8KKworCXJldHVybiAweDgwIHwgKGh3cSA8PCAyKSB8IGFjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dha2VfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3sKKwl1OCBhYyA9IHF1ZXVlOworCXU4IGh3cSA9IHF1ZXVlOworCisJaWYgKHF1ZXVlICYgMHg4MCkgeworCQlhYyA9IHF1ZXVlICYgMzsKKwkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKKwl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGh3cSwgcHJpdi0+cXVldWVfc3RvcHBlZCkpCisJCWlmIChhdG9taWNfZGVjX3JldHVybigmcHJpdi0+cXVldWVfc3RvcF9jb3VudFthY10pIDw9IDApCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgYWMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N0b3BfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3sKKwl1OCBhYyA9IHF1ZXVlOworCXU4IGh3cSA9IHF1ZXVlOworCisJaWYgKHF1ZXVlICYgMHg4MCkgeworCQlhYyA9IHF1ZXVlICYgMzsKKwkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaHdxLCBwcml2LT5xdWV1ZV9zdG9wcGVkKSkKKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2FjXSkgPiAwKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGFjKTsKK30KKworI2RlZmluZSBpZWVlODAyMTFfc3RvcF9xdWV1ZSBET19OT1RfVVNFX2llZWU4MDIxMV9zdG9wX3F1ZXVlCisjZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3dha2VfcXVldWUKKwogI2VuZGlmCQkJCS8qIF9faXdsX2hlbHBlcnNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwYTkyZTc0Li4wODNlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgdTMyIG9mcywgdTMyIHZhbCkKIHsKLQlJV0xfREVCVUdfSU8oIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwogfQogI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXApAQCAtNzksNyArNzksNyBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiBzdGF0aWMgaW5saW5lIHUzMiBfX2l3bF9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcykKIHsKLQlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglMDhYKSAtICVzICVkXG4iLCBvZnMsIGYsIGwpOworCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7CiAJcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7CiB9CiAjZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJCQkgdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKIHsKIAlpbnQgcmV0ID0gX2l3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCiAJCSAgICAgYWRkciwgYml0cywgbWFzaywKIAkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwogCXJldHVybiByZXQ7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAl1MzIgdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2s7Ci0JSVdMX0RFQlVHX0lPKCJzZXRfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOworCUlXTF9ERUJVR19JTyhwcml2LCAic2V0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfc2V0X2JpdChwLCByLCBtKSBfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiB7CiAJdTMyIHZhbCA9IF9pd2xfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfY2xlYXJfYml0KHAsIHIsIG0pIF9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCkBAIC0xNTYsNiArMTU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OworCXUzMiB2YWw7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCiAJCXJldHVybiAwOwpAQCAtMTY1LDkgKzE2NiwxMCBAQAogCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKIAkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCA1MCk7CisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgMTUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiTUFDIGlzIGluIGRlZXAgc2xlZXAhXG4iKTsKKwkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE4Miw5ICsxODQsOSBAQAogCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkICVzICVkLlxuIiwgZiwgbCk7CisJCUlXTF9FUlIocHJpdiwgIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CiAJcmV0dXJuIF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogfQogI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKQEAgLTIwNyw5ICsyMDksOSBAQAogCQkJCQkgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlcyAlZC5cbiIsIGYsIGwpOworCQlJV0xfRVJSKHByaXYsICJSZWxlYXNlIHVuaGVsZCBuaWMgYWNjZXNzIGF0IGxpbmUgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CisJSVdMX0RFQlVHX0lPKHByaXYsICJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKIAlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KICNkZWZpbmUgaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCkBAIC0yMjksOCArMjMxLDggQEAKIHsKIAl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyAlZFxuIiwgZiwgbCk7Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTRYKSA9IDB4JTA4eCAtICVzICVkIFxuIiwgcmVnLCB2YWx1ZSwKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWQgXG4iLCByZWcsIHZhbHVlLAogCQkgICAgIGYsIGwpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTI1MCw3ICsyNTIsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsIHZhbHVlKTsKIH0KICNkZWZpbmUgaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpIFwKQEAgLTI4NCwxMCArMjg2LDEwIEBACiAJaW50IHJldCAgPSBfaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKKwkJSVdMX0RFQlVHX0lPKHByaXYsICJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpIC0gIgogCQkJICAgICAidGltZWRvdXQgLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgZiwgbCk7CiAJZWxzZQotCQlJV0xfREVCVUdfSU8oInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgorCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgogCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA4LDcgKzMxMCw3IEBACiAJCQkJICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlyZXR1cm4gX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIH0KIApAQCAtMzMxLDcgKzMzMyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlfaXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKIH0KIApAQCAtMzQ5LDcgKzM1MSw3IEBACiAJCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAKIAlfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKIH0KQEAgLTM2Nyw3ICszNjksNyBAQAogCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKIHsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOwogCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7CiB9CiAjZGVmaW5lIGl3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDExZWNjZDcuLjE5NjgwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTEyMyw3ICsxMjMsNyBAQAogLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb25fcmVnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb24gJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9uICVkXG4iLCBsZWRfaWQpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCQkub2ZmID0gMCwKIAkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCiAJfTsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb2ZmICVkXG4iLCBsZWRfaWQpOworCUlXTF9ERUJVR19MRUQocHJpdiwgImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CiAJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOwogfQogI2VuZGlmCkBAIC0xNTksNyArMTU5LDcgQEAKIC8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCUlXTF9ERUJVR19MRUQoIkxFRCBSZWcgb2ZmXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgUmVnIG9mZlxuIik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIENTUl9MRURfUkVHX1RSVU5fT0ZGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQAogICovCiBzdGF0aWMgaW50IGl3bF9sZWRfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJBc3NvY2lhdGVkXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJBc3NvY2lhdGVkXG4iKTsKIAlwcml2LT5hbGxvd19ibGlua2luZyA9IDE7CiAJcmV0dXJuIGl3bDQ5NjVfbGVkX29uX3JlZyhwcml2LCBsZWRfaWQpOwogfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJldHVybjsKIAogCi0JSVdMX0RFQlVHX0xFRCgiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCiAJCQlsZWRfdHlwZV9zdHJbbGVkLT50eXBlXSwgYnJpZ2h0bmVzcyk7CiAJc3dpdGNoIChicmlnaHRuZXNzKSB7CiAJY2FzZSBMRURfRlVMTDoKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAJaWYgKHRwdCA8IDApIC8qIHdyYXBhcm91bmQgKi8KIAkJdHB0ID0gLXRwdDsKIAotCUlXTF9ERUJVR19MRUQoInRwdCAlbGxkIGN1cnJlbnRfdHB0ICVsbHVcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAidHB0ICVsbGQgY3VycmVudF90cHQgJWxsdVxuIiwKIAkJKGxvbmcgbG9uZyl0cHQsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudF90cHQpOwogCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQkJaWYgKHRwdCAgPiAoYmxpbmtfdGJsW2ldLnRwdCAqIElXTF8xTUJfUkFURSkpCiAJCQkJYnJlYWs7CiAKLQlJV0xfREVCVUdfTEVEKCJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKIAlyZXR1cm4gaTsKIH0KIApAQCAtMzUyLDcgKzM1Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6cmFkaW8iLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6OnJhZGlvIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDQ5NjVfbGVkX29uX3JlZzsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLApAQCAtMzgyLDcgKzM4Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6UlgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6OlJYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2xfbGVkc19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczpUWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczo6VFgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKaW5kZXggMDIxZTAwYi4uZWY5YjE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIElXTF9MRURfU09MSUQgMTEKICNkZWZpbmUgSVdMX0xFRF9OQU1FX0xFTiAzMQotI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgX19jb25zdGFudF9jcHVfdG9fbGUzMigxMDAwKQorI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgY3B1X3RvX2xlMzIoMTAwMCkKIAogI2RlZmluZSBJV0xfTEVEX0FDVElWSVRZICAgICAgICgwPDwxKQogI2RlZmluZSBJV0xfTEVEX0xJTksgICAgICAgICAgICgxPDwxKQpAQCAtNDcsNyArNDcsOSBAQAogCUlXTF9MRURfVFJHX1JBRElPLAogCUlXTF9MRURfVFJHX01BWCwKIH07CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAogc3RydWN0IGl3bF9sZWQgewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IDc1Y2E2YTUuLjQ3Yzg5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNjAsMTQgKzYwLDYgQEAKICNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzFfTUFYICAoMTApCiAKIAotI2RlZmluZSBOT1NMUCBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLCAwLCAwCi0jZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSywgMCwgMAotI2RlZmluZSBTTFBfVE9VVChUKSBfX2NvbnN0YW50X2NwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKLSNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKFgwKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMSksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDIpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgzKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYNCl9CiAKICNkZWZpbmUgSVdMX1BPV0VSX09OX0JBVFRFUlkJCUlXTF9QT1dFUl9JTkRFWF81CiAjZGVmaW5lIElXTF9QT1dFUl9PTl9BQ19ESVNBU1NPQwlJV0xfUE9XRVJfTU9ERV9DQU0KQEAgLTExMCw2ICsxMDIsNyBAQAogCXt7U0xQLCBTTFBfVE9VVCgyNSksIFNMUF9UT1VUKDI1KSwgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDB4RkYpfSwgMH0KIH07CiAKKwogLyogc2V0IGNhcmQgcG93ZXIgY29tbWFuZCAqLwogc3RhdGljIGludCBpd2xfc2V0X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqY21kKQogewpAQCAtMTM0LDEzICsxMjcsNiBAQAogCQllbHNlCiAJCQltb2RlID0gSVdMX1BPV0VSX09OX0FDX0RJU0FTU09DOwogCQlicmVhazsKLQkvKiBGSVhNRTogcmVtb3ZlIGJhdHRlcnkgYW5kIGFjIGZyb20gaGVyZSAqLwotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKIAkJYnJlYWs7CkBAIC0xNDksMTcgKzEzNSwxNyBAQAogfQogCiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnBvd19kYXRhOwogCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5KSAqIElXTF9QT1dFUl9NQVg7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kOwogCWludCBpOwotCXUxNiBwY2lfcG07CisJdTE2IGxjdGw7CiAKLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKIAotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKwlwb3dfZGF0YSA9ICZwcml2LT5wb3dlcl9kYXRhOwogCiAJbWVtc2V0KHBvd19kYXRhLCAwLCBzaXplb2YoKnBvd19kYXRhKSk7CiAKQEAgLTE2NywzOCArMTUzLDM3IEBACiAJbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKIAltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMlswXSwgJnJhbmdlXzJbMF0sIHNpemUpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZwY2lfcG0pOworCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9NQVg7IGkrKykgewogCQljbWQgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wW2ldLmNtZDsKIAotCQlpZiAocGNpX3BtICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTikKKwkJaWYgKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKQogCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJCWVsc2UKIAkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJfQotCXJldHVybiAwOwogfQogCiAvKiBhZGp1c3QgcG93ZXIgY29tbWFuZCBhY2NvcmRpbmcgdG8gRFRJTSBwZXJpb2QgYW5kIHBvd2VyIGxldmVsKi8KLXN0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jb21tYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLAotCQkJCSAgICB1MTYgbW9kZSkKK3N0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTE2IG1vZGUpCiB7Ci0JaW50IHJldCA9IDAsIGk7Ci0JdTggc2tpcDsKLQl1MzIgbWF4X3NsZWVwID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSAqcmFuZ2U7Ci0JdTggcGVyaW9kID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7CisJaW50IGk7CisJdTMyIG1heF9zbGVlcCA9IDA7CisJdTggcGVyaW9kOworCWJvb2wgc2tpcDsKIAogCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC0xOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOworCisJcG93X2RhdGEgPSAmcHJpdi0+cG93ZXJfZGF0YTsKIAogCWlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzBfTUFYKQogCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07CkBAIC0yMTIsMTQgKzE5NywxMiBAQAogCiAJaWYgKHBlcmlvZCA9PSAwKSB7CiAJCXBlcmlvZCA9IDE7Ci0JCXNraXAgPSAwOwotCX0gZWxzZQotCQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKLQotCWlmIChza2lwID09IDApIHsKLQkJbWF4X3NsZWVwID0gcGVyaW9kOwotCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwkJc2tpcCA9IGZhbHNlOwogCX0gZWxzZSB7CisJCXNraXAgPSAhIXJhbmdlW21vZGVdLm5vX2R0aW07CisJfQorCisJaWYgKHNraXApIHsKIAkJX19sZTMyIHNscF9pdHJ2bCA9IGNtZC0+c2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFIC0gMV07CiAJCW1heF9zbGVlcCA9IGxlMzJfdG9fY3B1KHNscF9pdHJ2bCk7CiAJCWlmIChtYXhfc2xlZXAgPT0gMHhGRikKQEAgLTIyNywyNCArMjEwLDI2IEBACiAJCWVsc2UgaWYgKG1heF9zbGVlcCA+ICBwZXJpb2QpCiAJCQltYXhfc2xlZXAgPSAobGUzMl90b19jcHUoc2xwX2l0cnZsKSAvIHBlcmlvZCkgKiBwZXJpb2Q7CiAJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7CisJfSBlbHNlIHsKKwkJbWF4X3NsZWVwID0gcGVyaW9kOworCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspCiAJCWlmIChsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW2ldKSA+IG1heF9zbGVlcCkKIAkJCWNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0gPSBjcHVfdG9fbGUzMihtYXhfc2xlZXApOwotCX0KIAotCUlXTF9ERUJVR19QT1dFUigiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwotCUlXTF9ERUJVR19QT1dFUigiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiU2xlZXAgaW50ZXJ2YWwgdmVjdG9yID0geyAlZCAsICVkICwgJWQgLCAlZCAsICVkIH1cbiIsCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yODgsMTQgKzI3MywxNCBAQAogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAKLQlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikgJiYgIXNldHRpbmctPnBvd2VyX2Rpc2FibGVkICYmCisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSAmJiAhc2V0dGluZy0+cG93ZXJfZGlzYWJsZWQgJiYKIAkgICAgKChzZXR0aW5nLT5wb3dlcl9tb2RlICE9IGZpbmFsX21vZGUpIHx8IGZvcmNlKSkgewogCQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKIAogCQlpZiAoZmluYWxfbW9kZSAhPSBJV0xfUE9XRVJfTU9ERV9DQU0pCiAJCQlzZXRfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwogCi0JCWl3bF91cGRhdGVfcG93ZXJfY29tbWFuZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKKwkJaXdsX3VwZGF0ZV9wb3dlcl9jbWQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7CiAJCWNtZC5rZWVwX2FsaXZlX2JlYWNvbnMgPSAwOwogCiAJCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9JTkRFWF81KQpAQCAtMzExLDcgKzI5Niw3IEBACiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MgJiYgdXBkYXRlX2NoYWlucykKIAkJCXByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyhwcml2KTsKIAkJZWxzZQotCQkJSVdMX0RFQlVHX1BPV0VSKCJDYW5ub3QgdXBkYXRlIHRoZSBwb3dlciwgY2hhaW4gbm9pc2UgIgorCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJDYW5ub3QgdXBkYXRlIHRoZSBwb3dlciwgY2hhaW4gbm9pc2UgIgogCQkJCQkiY2FsaWJyYXRpb24gcnVubmluZzogJWRcbiIsCiAJCQkJCXByaXYtPmNoYWluX25vaXNlX2RhdGEuc3RhdGUpOwogCQlpZiAoIXJldCkKQEAgLTM2Niw3ICszNTEsNyBAQAogLyogc2V0IHVzZXJfcG93ZXJfc2V0dGluZyAqLwogaW50IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IG1vZGUpCiB7Ci0JaWYgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpCisJaWYgKG1vZGUgPiBJV0xfUE9XRVJfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gbW9kZTsKQEAgLTM4MCwxMSArMzY1LDEwIEBACiAgKi8KIGludCBpd2xfcG93ZXJfc2V0X3N5c3RlbV9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IG1vZGUpCiB7Ci0JaWYgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpCisJaWYgKG1vZGUgPCBJV0xfUE9XRVJfU1lTX01BWCkKKwkJcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZyA9IG1vZGU7CisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmcgPSBtb2RlOwotCiAJcmV0dXJuIGl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX3NldF9zeXN0ZW1fbW9kZSk7CkBAIC0zOTIsMTMgKzM3NiwxMSBAQAogLyogaW5pdGlhbGl6ZSB0byBkZWZhdWx0ICovCiB2b2lkIGl3bF9wb3dlcl9pbml0aWFsaXplKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQogCWl3bF9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKIAlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IElXTF9QT1dFUl9BVVRPOwotCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfZGlzYWJsZWQgPSAwOwogCXByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmcgPSBJV0xfUE9XRVJfU1lTX0FVVE87Ci0JcHJpdi0+cG93ZXJfZGF0YS5pc19iYXR0ZXJ5X2FjdGl2ZSA9IDA7CiAJcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9kaXNhYmxlZCA9IDA7CisJcHJpdi0+cG93ZXJfZGF0YS5pc19iYXR0ZXJ5X2FjdGl2ZSA9IDA7CiAJcHJpdi0+cG93ZXJfZGF0YS5jcml0aWNhbF9wb3dlcl9zZXR0aW5nID0gMDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX2luaXRpYWxpemUpOwpAQCAtNDA3LDggKzM4OSw4IEBACiBpbnQgaXdsX3Bvd2VyX3RlbXBlcmF0dXJlX2NoYW5nZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTE2IG5ld19jcml0aWNhbCA9IHByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZzsKIAlzMzIgdGVtcGVyYXR1cmUgPSBLRUxWSU5fVE9fQ0VMU0lVUyhwcml2LT5sYXN0X3RlbXBlcmF0dXJlKTsKKwl1MTYgbmV3X2NyaXRpY2FsID0gcHJpdi0+cG93ZXJfZGF0YS5jcml0aWNhbF9wb3dlcl9zZXR0aW5nOwogCiAJaWYgKHRlbXBlcmF0dXJlID4gSVdMX0NUX0tJTExfVEVNUEVSQVRVUkUpCiAJCXJldHVybiAwOwpAQCAtNDM0LDcgKzQxNiw3IEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJc3RydWN0IGl3bF9wcml2LCBzZXRfcG93ZXJfc2F2ZS53b3JrKTsKLQlJV0xfREVCVUcoSVdMX0RMX1NUQVRFLCAidXBkYXRlIHBvd2VyXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgInVwZGF0ZSBwb3dlclxuIik7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCmluZGV4IGZhMDk4ZDguLjE4OTYzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDIsMjIgKzQyLDI2IEBACiAJSVdMX1BPV0VSX0lOREVYXzUsCiAJSVdMX1BPV0VSX0FVVE8sCiAJSVdMX1BPV0VSX01BWCA9IElXTF9QT1dFUl9BVVRPLAotCUlXTF9QT1dFUl9BQywKLQlJV0xfUE9XRVJfQkFUVEVSWSwKIH07CiAKIGVudW0gewogCUlXTF9QT1dFUl9TWVNfQVVUTywKIAlJV0xfUE9XRVJfU1lTX0FDLAogCUlXTF9QT1dFUl9TWVNfQkFUVEVSWSwKKwlJV0xfUE9XRVJfU1lTX01BWCwKIH07CiAKLSNkZWZpbmUgSVdMX1BPV0VSX0xJTUlUCQkweDA4Ci0jZGVmaW5lIElXTF9QT1dFUl9NQVNLCQkweDBGCi0jZGVmaW5lIElXTF9QT1dFUl9FTkFCTEVECTB4MTAKIAogLyogUG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSBzdHJ1Y3R1cmVzICovCiAKKyNkZWZpbmUgTk9TTFAgY3B1X3RvX2xlMTYoMCksIDAsIDAKKyNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLLCAwLCAwCisjZGVmaW5lIFNMUF9UT1VUKFQpIGNwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKKyNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtjcHVfdG9fbGUzMihYMCksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFgxKSwgXAorCQkJCSAgICAgY3B1X3RvX2xlMzIoWDIpLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYMyksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFg0KX0KIHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5IHsKIAlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKIAl1OCBub19kdGltOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IGI3YTVmMjMuLjNiOWNhYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCmluZGV4IDRiNjlkYTMuLjJhZDlmYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00Nyw3ICs0Nyw3IEBACiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJ3ZSByZWNlaXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAid2UgcmVjZWl2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJc3dpdGNoIChzdGF0ZSkgewpAQCAtNjIsNyArNjIsOCBAQAogCQlpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHByaXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfV0FSTklORygid2UgcmVjZWl2ZWQgdW5leHBlY3RlZCBSRktJTEwgc3RhdGUgJWRcbiIsIHN0YXRlKTsKKwkJSVdMX1dBUk4ocHJpdiwgIndlIHJlY2VpdmVkIHVuZXhwZWN0ZWQgUkZLSUxMIHN0YXRlICVkXG4iLAorCQkJc3RhdGUpOwogCQlicmVhazsKIAl9CiBvdXRfdW5sb2NrOgpAQCAtNzgsMTAgKzc5LDEwIEBACiAKIAlCVUdfT04oZGV2aWNlID09IE5VTEwpOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiSW5pdGlhbGl6aW5nIFJGS0lMTC5cbiIpOwogCXByaXYtPnJma2lsbCA9IHJma2lsbF9hbGxvY2F0ZShkZXZpY2UsIFJGS0lMTF9UWVBFX1dMQU4pOwogCWlmICghcHJpdi0+cmZraWxsKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIFJGS0lMTCBkZXZpY2UuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIFJGS0lMTCBkZXZpY2UuXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC05NywxMSArOTgsMTEgQEAKIAogCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGwpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgUkZLSUxMOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJGS0lMTDogJWRcbiIsIHJldCk7CiAJCWdvdG8gZnJlZV9yZmtpbGw7CiAJfQogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKIAlyZXR1cm4gcmV0OwogCiBmcmVlX3Jma2lsbDoKQEAgLTExMCw3ICsxMTEsNyBAQAogCXByaXYtPnJma2lsbCA9IE5VTEw7CiAKIGVycm9yOgotCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3Jma2lsbF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKaW5kZXggODZkYzA1NS4uNjMzZGFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCmluZGV4IGM1ZjFhYTAuLjhmNjU5MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtMTI1LDkgKzEyNSwxMCBAQAogICovCiBpbnQgaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpxKQogewotCXUzMiByZWcgPSAwOwotCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJ4X3dydF9wdHJfcmVnID0gcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnOworCXUzMiByZWc7CisJaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwogCkBAIC0xNDksMTUgKzE1MCwxNCBAQAogCQkJZ290byBleGl0X3VubG9jazsKIAogCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsCi0JCQkJICAgICBxLT53cml0ZSAmIH4weDcpOworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgcnhfd3J0X3B0cl9yZWcsIHEtPndyaXRlICYgfjB4Nyk7CiAJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCi0JfSBlbHNlCisJfSBlbHNlIHsKIAkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bF93cml0ZTMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsIHEtPndyaXRlICYgfjB4Nyk7Ci0KKwkJaXdsX3dyaXRlMzIocHJpdiwgcnhfd3J0X3B0cl9yZWcsIHEtPndyaXRlICYgfjB4Nyk7CisJfQogCiAJcS0+bmVlZF91cGRhdGUgPSAwOwogCkBAIC0yNjIsOCArMjYyLDcgQEAKIAkJcnhiLT5za2IgPSBhbGxvY19za2IocHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplICsgMjU2LAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghcnhiLT5za2IpIHsKLQkJCXByaW50ayhLRVJOX0NSSVQgRFJWX05BTUUKLQkJCQkgICAiQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CisJCQlJV0xfQ1JJVChwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CiAJCQkvKiBXZSBkb24ndCByZXNjaGVkdWxlIHJlcGxlbmlzaCB3b3JrIGhlcmUgLS0gd2Ugd2lsbAogCQkJICogY2FsbCB0aGUgcmVzdG9jayBtZXRob2QgYW5kIGlmIGl0IHN0aWxsIG5lZWRzCiAJCQkgKiBtb3JlIGJ1ZmZlcnMgaXQgd2lsbCBzY2hlZHVsZSByZXBsZW5pc2ggKi8KQEAgLTQ5NSw3ICs0OTQsNyBAQAogCiAJbWlzc2VkX2JlYWNvbiA9ICZwa3QtPnUubWlzc2VkX2JlYWNvbjsKIAlpZiAobGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+Y29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnMpID4gNSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIm1pc3NlZCBiY24gY25zcSAlZCB0b3RsICVkIHJjZCAlZCBleHBjdGQgJWRcbiIsCisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPnRvdGFsX21pc3NlZF9iZWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX3JlY3ZkX2JlYWNvbnMpLApAQCAtNTQyLDcgKzU0MSw3IEBACiAJZWxzZQogCQlwcml2LT5sYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKIAotCUlXTF9ERUJVR19DQUxJQigiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAogCQkJYmNuX3NpbGVuY2VfYSwgYmNuX3NpbGVuY2VfYiwgYmNuX3NpbGVuY2VfYywKIAkJCXByaXYtPmxhc3Rfcnhfbm9pc2UpOwogfQpAQCAtNTU1LDcgKzU1NCw3IEBACiAJaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAKLQlJV0xfREVCVUdfUlgoIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAorCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2YocHJpdi0+c3RhdGlzdGljcyksIHBrdC0+bGVuKTsKIAogCWNoYW5nZSA9ICgocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlICE9CkBAIC03NDIsMTMgKzc0MSwxMyBAQAogCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCiAJCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwogCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgogCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0ldSwgXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKIAkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgYml0cmF0ZSk7CiAJCWVsc2UgewogCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLwotCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCBzcmM9MHglMDJ4LCAiCisJCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiAweCUwNHgsIGRzdD0weCUwMngsIHNyYz0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIHRpbT0lbHUgdXNlYywgIgogCQkJCSAgICAgInBoeT0weCUwMngsIGNobmw9JWRcbiIsCiAJCQkJICAgICB0aXRsZSwgbGUxNl90b19jcHUoZmMpLCBoZWFkZXItPmFkZHIxWzVdLApAQCAtNzczLDEwICs3NzIsMTAgQEAKIC8qCiAgKiByZXR1cm5zIG5vbi16ZXJvIGlmIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZAogICovCi1zdGF0aWMgaW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJICAgICAgdTMyIGRlY3J5cHRfcmVzLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKK2ludCBpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCQkgICB1MzIgZGVjcnlwdF9yZXMsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCiB7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIApAQCAtNzg2LDcgKzc4NSw3IEBACiAJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOworCUlXTF9ERUJVR19SWChwcml2LCAiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOwogCXN3aXRjaCAoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgewogCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQOgogCQkvKiBUaGUgdUNvZGUgaGFzIGdvdCBhIGJhZCBwaGFzZSAxIEtleSwgcHVzaGVzIHRoZSBwYWNrZXQuCkBAIC04MDAsMTMgKzc5OSwxMyBAQAogCQkgICAgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQykgewogCQkJLyogYmFkIElDViwgdGhlIHBhY2tldCBpcyBkZXN0cm95ZWQgc2luY2UgdGhlCiAJCQkgKiBkZWNyeXB0aW9uIGlzIGlucGxhY2UsIGRyb3AgaXQgKi8KLQkJCUlXTF9ERUJVR19SWCgiUGFja2V0IGRlc3Ryb3llZFxuIik7CisJCQlJV0xfREVCVUdfUlgocHJpdiwgIlBhY2tldCBkZXN0cm95ZWRcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX0NDTVA6CiAJCWlmICgoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0spID09CiAJCSAgICBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0spIHsKLQkJCUlXTF9ERUJVR19SWCgiaHcgZGVjcnlwdCBzdWNjZXNzZnVsbHkhISFcbiIpOworCQkJSVdMX0RFQlVHX1JYKHByaXYsICJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7CiAJCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKIAkJfQogCQlicmVhazsKQEAgLTgxNiw2ICs4MTUsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyk7CiAKIHN0YXRpYyB1MzIgaXdsX3RyYW5zbGF0ZV9yeF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZGVjcnlwdF9pbikKIHsKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQlicmVhazsKIAl9OwogCi0JSVdMX0RFQlVHX1JYKCJkZWNyeXB0X2luOjB4JXggIGRlY3J5cHRfb3V0ID0gMHgleFxuIiwKKwlJV0xfREVCVUdfUlgocHJpdiwgImRlY3J5cHRfaW46MHgleCAgZGVjcnlwdF9vdXQgPSAweCV4XG4iLAogCQkJCQlkZWNyeXB0X2luLCBkZWNyeXB0X291dCk7CiAKIAlyZXR1cm4gZGVjcnlwdF9vdXQ7CkBAIC04OTUsNyArODk1LDcgQEAKIAkJcnhfc3RhcnQgPSAoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKIAogCWlmICghcnhfc3RhcnQpIHsKLQkJSVdMX0VSUk9SKCJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoaW5jbHVkZV9waHkpIHsKQEAgLTkzNCw4ICs5MzQsOCBAQAogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUgaW50ZXJmYWNlIGlzIG9wZW4gKi8KIAlpZiAodW5saWtlbHkoIXByaXYtPmlzX29wZW4pKSB7Ci0JCUlXTF9ERUJVR19EUk9QX0xJTUlUCi0JCSAgICAoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKKwkJSVdMX0RFQlVHX0RST1BfTElNSVQocHJpdiwKKwkJICAgICJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJLypyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ki8KIAogCWlmICgodW5saWtlbHkocnhfc3RhcnQtPmNmZ19waHlfY250ID4gMjApKSkgewotCQlJV0xfREVCVUdfRFJPUCgiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAlZC9uIiwKIAkJCQlyeF9zdGFydC0+Y2ZnX3BoeV9jbnQpOwogCQlyZXR1cm47CiAJfQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAl9CiAKIAlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlJPUigiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOworCQlJV0xfRVJSKHByaXYsICJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAKIAlpZiAoISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUikgfHwKIAkgICAgISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19SWEVfT1ZFUkZMT1cpKSB7Ci0JCUlXTF9ERUJVR19SWCgiQmFkIENSQyBvciBGSUZPOiAweCUwOFguXG4iLAorCQlJV0xfREVCVUdfUlgocHJpdiwgIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwKIAkJCQlsZTMyX3RvX2NwdSgqcnhfZW5kKSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCWlmICh1bmxpa2VseShwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkpCiAJCWl3bF9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHJ4X3N0YXJ0LCBsZW4sIGhlYWRlciwgMSk7CiAjZW5kaWYKLQlJV0xfREVCVUdfU1RBVFNfTElNSVQoIlJzc2kgJWQsIG5vaXNlICVkLCBxdWFsICVkLCBUU0YgJWxsdVxuIiwKKwlJV0xfREVCVUdfU1RBVFNfTElNSVQocHJpdiwgIlJzc2kgJWQsIG5vaXNlICVkLCBxdWFsICVkLCBUU0YgJWxsdVxuIiwKIAkJcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMuc2lnbmFsLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXJ4X3N0YXR1cy5tYWN0aW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IDNjODAzZjYuLjIzNjQ0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDYsMTUgKzQ2LDYgQEAKICNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKDMpCiAjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICgyKQogCi0vKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCi0gKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCi0gKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAotICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncwotICogbm8gb3RoZXIgdHJhZmZpYykuCi0gKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCi0jZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpICAvKiBwYWNrZXRzICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEwKSAgLyogbXNlYyAqLwotCiAvKiBGb3IgcGFzc2l2ZSBzY2FuLCBsaXN0ZW4gUEFTU0lWRV9EV0VMTF9USU1FIChtc2VjKSBvbiBlYWNoIGNoYW5uZWwuCiAgKiBNdXN0IGJlIHNldCBsb25nZXIgdGhhbiBhY3RpdmUgZHdlbGwgdGltZS4KICAqIEZvciB0aGUgbW9zdCByZWxpYWJsZSBzY2FuLCBzZXQgPiBBUCBiZWFjb24gaW50ZXJ2YWwgKHR5cGljYWxseSAxMDBtc2VjKS4gKi8KQEAgLTYzLDcgKzU0LDYgQEAKICNkZWZpbmUgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSAgICAgICgxMDApCiAjZGVmaW5lIElXTF9DSEFOTkVMX1RVTkVfVElNRSAgICAgICA1CiAKLSNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKIAogCiAvKioKQEAgLTgwLDEyICs3MCwxMiBAQAogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJRdWV1aW5nIHNjYW4gYWJvcnQuXG4iKTsKKwkJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJRdWV1aW5nIHNjYW4gYWJvcnQuXG4iKTsKIAkJCXNldF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwogCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hYm9ydF9zY2FuKTsKIAogCQl9IGVsc2UKLQkJCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFib3J0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGFib3J0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKIAogCQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAl9CkBAIC0xMTksNyArMTA5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQpOwogCi1zdGF0aWMgaW50IGl3bF9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bF9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXM7CkBAIC0xNTAsNyArMTQwLDcgQEAKIAkJICogY2FuIG9jY3VyIGlmIHdlIHNlbmQgdGhlIHNjYW4gYWJvcnQgYmVmb3JlIHdlCiAJCSAqIHRoZSBtaWNyb2NvZGUgaGFzIG5vdGlmaWVkIHVzIHRoYXQgYSBzY2FuIGlzCiAJCSAqIGNvbXBsZXRlZC4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIlNDQU5fQUJPUlQgcmV0dXJuZWQgJWQuXG4iLCByZXMtPnUuc3RhdHVzKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNDQU5fQUJPUlQgcmV0dXJuZWQgJWQuXG4iLCByZXMtPnUuc3RhdHVzKTsKIAkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAl9CkBAIC0xNjAsNyArMTUwLDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfc2Nhbl9hYm9ydCk7CiAKIC8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCiBzdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xNzEsNyArMTYxLDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICpub3RpZiA9CiAJICAgIChzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKIAotCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOworCUlXTF9ERUJVR19SWChwcml2LCAiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwogI2VuZGlmCiB9CiAKQEAgLTE4Myw3ICsxNzMsNyBAQAogCXN0cnVjdCBpd2xfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bF9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKIAlwcml2LT5zY2FuX3N0YXJ0X3RzZiA9IGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KTsKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBzdGFydDogIgorCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHN0YXJ0OiAiCiAJCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCiAJCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgKGJlYWNvbiB0aW1lciAldSlcbiIsCiAJCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKQEAgLTIwMiw3ICsxOTIsNyBAQAogCXN0cnVjdCBpd2xfc2NhbnJlc3VsdHNfbm90aWZpY2F0aW9uICpub3RpZiA9CiAJICAgIChzdHJ1Y3QgaXdsX3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CiAKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjaC5yZXM6ICIKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjaC5yZXM6ICIKIAkJICAgICAgICIlZCBbODAyLjExJXNdICIKIAkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCiAJCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKQEAgLTIyOCw3ICsyMTgsNyBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsX3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gKnNjYW5fbm90aWYgPSAodm9pZCAqKXBrdC0+dS5yYXc7CiAKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKIAkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCiAJCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAogCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7CkBAIC0yNDAsNyArMjMwLDcgQEAKIAkvKiBUaGUgc2NhbiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBjYW1lIGluLCBzbyBraWxsIHRoYXQgdGltZXIuLi4gKi8KIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHBhc3Mgb24gJXNHSHogdG9vayAlZG1zXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FuIHBhc3Mgb24gJXNHSHogdG9vayAlZG1zXG4iLAogCQkgICAgICAgKHByaXYtPnNjYW5fYmFuZHMgJiBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikpID8KIAkJCQkJCSIyLjQiIDogIjUuMiIsCiAJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwpAQCAtMjU4LDcgKzI0OCw3IEBACiAJICogdGhlbiB3ZSByZXNldCB0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lIGFuZCB0ZXJtaW5hdGUsCiAJICogcmUtcXVldWluZyBhbm90aGVyIHNjYW4gaWYgb25lIGhhcyBiZWVuIHJlcXVlc3RlZCAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkFib3J0ZWQgc2NhbiBjb21wbGV0ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFib3J0ZWQgc2NhbiBjb21wbGV0ZWQuXG4iKTsKIAkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAl9IGVsc2UgewogCQkvKiBJZiB0aGVyZSBhcmUgbW9yZSBiYW5kcyBvbiB0aGlzIHNjYW4gcGFzcyByZXNjaGVkdWxlICovCkBAIC0yNjgsMTEgKzI1OCwxMSBAQAogCiAJcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOwogCiAJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CiAKLQlJV0xfREVCVUdfSU5GTygiU2NhbiB0b29rICVkbXNcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW4gdG9vayAlZG1zXG4iLAogCQlqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcyhwcml2LT5zY2FuX3N0YXJ0LCBqaWZmaWVzKSkpOwogCiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CkBAIC0yOTYsOSArMjg2LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMpOwogCi1zdGF0aWMgaW5saW5lIHUxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkJICAgIHU4IG5fcHJvYmVzKQoraW5saW5lIHUxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgICAgIHU4IG5fcHJvYmVzKQogewogCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgKwpAQCAtMzA3LDkgKzI5NywxMCBAQAogCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzI0ICsKIAkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICogKG5fcHJvYmVzICsgMSk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUpOwogCi1zdGF0aWMgdTE2IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit1MTYgaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAl1MTYgcGFzc2l2ZSA9IChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8KIAkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgOgpAQCAtMzI3LDYgKzMxOCw3IEBACiAKIAlyZXR1cm4gcGFzc2l2ZTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUpOwogCiBzdGF0aWMgaW50IGl3bF9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLApAQCAtMzYzLDcgKzM1NSw3IEBACiAKIAkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIGNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAogCQkJCQljaGFubmVsKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zOTIsNyArMzg0LDcgQEAKIAkJZWxzZQogCQkJc2Nhbl9jaC0+dHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICg1IDw8IDMpKTsKIAotCQlJV0xfREVCVUdfU0NBTigiU2Nhbm5pbmcgY2g9JWQgcHJvYj0weCVYIFslcyAlZF1cbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FubmluZyBjaD0lZCBwcm9iPTB4JVggWyVzICVkXVxuIiwKIAkJCSAgICAgICBjaGFubmVsLCBsZTMyX3RvX2NwdShzY2FuX2NoLT50eXBlKSwKIAkJCSAgICAgICAoc2Nhbl9jaC0+dHlwZSAmIFNDQU5fQ0hBTk5FTF9UWVBFX0FDVElWRSkgPwogCQkJCSJBQ1RJVkUiIDogIlBBU1NJVkUiLApAQCAtNDAzLDcgKzM5NSw3IEBACiAJCWFkZGVkKys7CiAJfQogCi0JSVdMX0RFQlVHX1NDQU4oInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CiAJcmV0dXJuIGFkZGVkOwogfQogCkBAIC00MTksMjEgKzQxMSwyMSBAQAogaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydGluZyBzY2FuLi4uXG4iKTsKIAlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0cpCiAJCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkKQEAgLTQ0OCw5ICs0NDAsNzcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5faW5pdGlhdGUpOwogCisjZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU4gKEhaKjIpCisKK2ludCBpd2xfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldDsKKwl1OCAqc3NpZCA9IE5VTEw7CisJc2l6ZV90IHNzaWRfbGVuID0gMDsKKworCWlmIChyZXEtPm5fc3NpZHMpIHsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJc3NpZF9sZW4gPSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuOworCX0KKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBXZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QuCisJICogQXZvaWQgc2Nhbm5pbmcgZHVyaW5nIHBvc3NpYmxlIEVBUE9MIGV4Y2hhbmdlLCByZXR1cm4KKwkgKiBzdWNjZXNzIGltbWVkaWF0ZWx5LgorCSAqLworCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgorCSAgICB0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAic2NhbiByZWplY3RlZDogd2l0aGluIG5leHQgc2NhbiBwZXJpb2RcbiIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5ICovCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCisJICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLCBqaWZmaWVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAic2NhbiByZWplY3RlZDogd2l0aGluIHByZXZpb3VzIHNjYW4gcGVyaW9kXG4iKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoc3NpZF9sZW4pIHsKKwkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKKwkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gIHNzaWRfbGVuOworCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CisJfSBlbHNlIHsKKwkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKKwl9CisKKwlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2KTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9tYWNfaHdfc2Nhbik7CisKICNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKIAotc3RhdGljIHZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQordm9pZCBpd2xfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KIAkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgc2Nhbl9jaGVjay53b3JrKTsKQEAgLTQ2MSw3ICs1MjEsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nICIKIAkJCSJhZGFwdGVyICglZG1zKVxuIiwKIAkJCWppZmZpZXNfdG9fbXNlY3MoSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cpKTsKIApAQCAtNDcwLDYgKzUzMCw4IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfc2Nhbl9jaGVjayk7CisKIC8qKgogICogaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llIC0gZmlsbCBpbiB0aGUgc3VwcG9ydGVkIHJhdGUgaW4gSUUgZmllbGQKICAqCkBAIC01MjcsMTAgKzU4OSwxMCBAQAogICogaXdsX2ZpbGxfcHJvYmVfcmVxIC0gZmlsbCBpbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFuZCBJRSBmb3IgcHJvYmUgcmVxdWVzdAogICovCiAKLXN0YXRpYyB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCi0JCQkJICBpbnQgbGVmdCkKK3UxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKKwkJICAgICAgIGludCBsZWZ0KQogewogCWludCBsZW4gPSAwOwogCXU4ICpwb3MgPSBOVUxMOwpAQCAtNjI0LDYgKzY4Niw3IEBACiAKIAlyZXR1cm4gKHUxNilsZW47CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9maWxsX3Byb2JlX3JlcSk7CiAKIHN0YXRpYyB2b2lkIGl3bF9iZ19yZXF1ZXN0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewpAQCAtNjUwLDcgKzcxMyw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKLQkJSVdMX1dBUk5JTkcoInJlcXVlc3Qgc2NhbiBjYWxsZWQgd2hlbiBkcml2ZXIgbm90IHJlYWR5LlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02NjIsMzQgKzcyNSwzNCBAQAogCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvciBzY2hlZHVsZWQgaWYgdGhlcmUgaXMgY3VycmVudGx5CiAJICogYSBzY2FuIGFjdGl2ZSBpbiB0aGUgaGFyZHdhcmUuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKIAkJCSAgICAgICAiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gZGV2aWNlIHNodXRkb3duXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICBRdWV1aW5nLlxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICBRdWV1aW5nLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiAgUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCFwcml2LT5zY2FuX2JhbmRzKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBubyByZXF1ZXN0ZWQgYmFuZHNcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC03MTQsNyArNzc3LDcgQEAKIAkJdTMyIHNjYW5fc3VzcGVuZF90aW1lID0gMTAwOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWludGVydmFsID0gcHJpdi0+YmVhY29uX2ludDsKQEAgLTcyOSwxMyArNzkyLDEzIEBACiAJCXNjYW5fc3VzcGVuZF90aW1lID0gKGV4dHJhIHwKIAkJICAgICgoc3VzcGVuZF90aW1lICUgaW50ZXJ2YWwpICogMTAyNCkpOwogCQlzY2FuLT5zdXNwZW5kX3RpbWUgPSBjcHVfdG9fbGUzMihzY2FuX3N1c3BlbmRfdGltZSk7Ci0JCUlXTF9ERUJVR19TQ0FOKCJzdXNwZW5kX3RpbWUgMHglWCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJzdXNwZW5kX3RpbWUgMHglWCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQkgICAgICAgc2Nhbl9zdXNwZW5kX3RpbWUsIGludGVydmFsKTsKIAl9CiAKIAkvKiBXZSBzaG91bGQgYWRkIHRoZSBhYmlsaXR5IGZvciB1c2VyIHRvIGxvY2sgdG8gUEFTU0lWRSBPTkxZICovCiAJaWYgKHByaXYtPm9uZV9kaXJlY3Rfc2NhbikgewotCQlJV0xfREVCVUdfU0NBTigiU3RhcnQgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdGFydCBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKIAkJCQlwcmludF9zc2lkKHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkLAogCQkJCQkgICBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pKTsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uaWQgPSBXTEFOX0VJRF9TU0lEOwpAQCAtNzQ0LDcgKzgwNyw3IEBACiAJCSAgICAgICBwcml2LT5kaXJlY3Rfc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKIAkJbl9wcm9iZXMrKzsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfU0NBTigiU3RhcnQgaW5kaXJlY3Qgc2Nhbi5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU3RhcnQgaW5kaXJlY3Qgc2Nhbi5cbiIpOwogCX0KIAogCXNjYW4tPnR4X2NtZC50eF9mbGFncyA9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CkBAIC03NzMsNyArODM2LDcgQEAKIAkJaWYgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfNDk2NSkKIAkJCXJ4X2NoYWluID0gMHg2OwogCX0gZWxzZSB7Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTgwNiw3ICs4NjksNyBAQAogCQkJKHZvaWQgKikmc2Nhbi0+ZGF0YVtsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKV0pOwogCiAJaWYgKHNjYW4tPmNoYW5uZWxfY291bnQgPT0gMCkgewotCQlJV0xfREVCVUdfU0NBTigiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJjaGFubmVsIGNvdW50ICVkXG4iLCBzY2FuLT5jaGFubmVsX2NvdW50KTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtODM5LDcgKzkwMiw3IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgaXdsX2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGFib3J0X3NjYW4pOwogCkBAIC04NTMsMTggKzkxNiwxOSBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9iZ19hYm9ydF9zY2FuKTsKIAotc3RhdGljIHZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBzY2FuX2NvbXBsZXRlZCk7CiAKLQlJV0xfREVCVUdfU0NBTigiU0NBTiBjb21wbGV0ZSBzY2FuXG4iKTsKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU0NBTiBjb21wbGV0ZSBzY2FuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3KTsKKwlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcsIGZhbHNlKTsKIAogCS8qIFNpbmNlIHNldHRpbmcgdGhlIFRYUE9XRVIgbWF5IGhhdmUgYmVlbiBkZWZlcnJlZCB3aGlsZQogCSAqIHBlcmZvcm1pbmcgdGhlIHNjYW4sIGZpcmUgb25lIG9mZiAqLwpAQCAtODcyLDcgKzkzNiw3IEBACiAJaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaXdsX2JnX3NjYW5fY29tcGxldGVkKTsKIAogdm9pZCBpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCmluZGV4IDgzNmMzYzguLjAyMmJjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWF9PTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwogCX0KIApAQCAtMTU0LDkgKzE1NCw5IEBACiAJc3dpdGNoIChzcGVjdHJ1bV9yZXNwX3N0YXR1cykgewogCWNhc2UgMDoJCS8qIENvbW1hbmQgd2lsbCBiZSBoYW5kbGVkICovCiAJCWlmIChyZXMtPnUuc3BlY3RydW0uaWQgIT0gMHhmZikgewotCQkJSVdMX0RFQlVHX0lORk8KLQkJCSAgICAoIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKLQkJCSAgICAgcmVzLT51LnNwZWN0cnVtLmlkKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKKwkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwogCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKIAkJfQogCQlwcml2LT5tZWFzdXJlbWVudF9zdGF0dXMgfD0gTUVBU1VSRU1FTlRfQUNUSVZFOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gKnJlcG9ydCA9ICYocGt0LT51LnNwZWN0cnVtX25vdGlmKTsKIAogCWlmICghcmVwb3J0LT5zdGF0ZSkgewotCQlJV0xfREVCVUcoSVdMX0RMXzExSCwKKwkJSVdMX0RFQlVHXzExSChwcml2LAogCQkJIlNwZWN0cnVtIE1lYXN1cmUgTm90aWZpY2F0aW9uOiBTdGFydFxuIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaAppbmRleCBiN2Q3OTQzLi5hNzdjMWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IDcwYThiMjEuLjU3OThmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC02MCw3ICs2MCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JSVdMX0RFQlVHX0FTU09DX0xJTUlUKCJjYW4gbm90IGZpbmQgU1RBICVwTSB0b3RhbCAlZFxuIiwKKwlJV0xfREVCVUdfQVNTT0NfTElNSVQocHJpdiwgImNhbiBub3QgZmluZCBTVEEgJXBNIHRvdGFsICVkXG4iLAogCQkJICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKIAogIG91dDoKQEAgLTg2LDExICs4NiwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKQotCQlJV0xfRVJST1IoIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwgc3RhX2lkKTsKKwlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpICYmCisJICAgICEocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkKKwkJSVdMX0VSUihwcml2LCAiQUNUSVZBVEUgYSBub24gRFJJVkVSIGFjdGl2ZSBzdGF0aW9uICVkXG4iLAorCQkJc3RhX2lkKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCB8PSBJV0xfU1RBX1VDT0RFX0FDVElWRTsKLQlJV0xfREVCVUdfQVNTT0MoIkFkZGVkIFNUQSB0byBVY29kZTogJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQWRkZWQgU1RBIHRvIFVjb2RlOiAlcE1cbiIsCiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEuYWRkcik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwpAQCAtMTA1LDEzICsxMDcsMTMgQEAKIAl1OCBzdGFfaWQgPSBhZGRzdGEtPnN0YS5zdGFfaWQ7CiAKIAlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfQUREX1NUQS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTEyMSw3ICsxMjMsNyBAQAogCQlpd2xfc3RhX3Vjb2RlX2FjdGl2YXRlKHByaXYsIHN0YV9pZCk7CiAJCSAvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSEMoIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6KDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTooMHglMDhYKVxuIiwKIAkJCSAgICAgcmVzLT51LmFkZF9zdGEuc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTMwLDcgKzEzMiw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCSAgICAgc3RydWN0IGl3bF9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0ID0gLUVJTzsKIAl9CkBAIC0xNjQsMTEgKzE2NiwxMSBAQAogCQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewogCQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6CiAJCQlpd2xfc3RhX3Vjb2RlX2FjdGl2YXRlKHByaXYsIHN0YS0+c3RhLnN0YV9pZCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVJTzsKLQkJCUlXTF9XQVJOSU5HKCJSRVBMWV9BRERfU1RBIGZhaWxlZFxuIik7CisJCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xNzgsNiArMTgwLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2FkZF9zdGEpOwogCiBzdGF0aWMgdm9pZCBpd2xfc2V0X2h0X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggaW5kZXgsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpzdGFfaHRfaW5mKQpAQCAtMjA0LDcgKzIwNyw3IEBACiAJY2FzZSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIkludmFsaWQgTUlNTyBQUyBtb2RlICVkXG4iLCBtaW1vX3BzX21vZGUpOworCQlJV0xfV0FSTihwcml2LCAiSW52YWxpZCBNSU1PIFBTIG1vZGUgJWRcbiIsIG1pbW9fcHNfbW9kZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjY5LDcgKzI3Miw3IEBACiAKIAlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CiAJc3RhdGlvbi0+dXNlZCA9IElXTF9TVEFfRFJJVkVSX0FDVElWRTsKLQlJV0xfREVCVUdfQVNTT0MoIkFkZCBTVEEgdG8gZHJpdmVyIElEICVkOiAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBZGQgU1RBIHRvIGRyaXZlciBJRCAlZDogJXBNXG4iLAogCQkJc3RhX2lkLCBhZGRyKTsKIAlwcml2LT5udW1fc3RhdGlvbnMrKzsKIApAQCAtMzAxLDEzICszMDQsMTMgQEAKIAogCUJVR19PTihzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTik7CiAKLQlJV0xfREVCVUdfQVNTT0MoIlJlbW92ZWQgU1RBIGZyb20gVWNvZGU6ICVwTVxuIiwgYWRkcik7CisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSZW1vdmVkIFNUQSBmcm9tIFVjb2RlOiAlcE1cbiIsIGFkZHIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAkvKiBVY29kZSBtdXN0IGJlIGFjdGl2ZSBhbmQgZHJpdmVyIG11c3QgYmUgbm9uIGFjdGl2ZSAqLwogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgIT0gSVdMX1NUQV9VQ09ERV9BQ1RJVkUpCi0JCUlXTF9FUlJPUigicmVtb3ZlZCBub24gYWN0aXZlIFNUQSAlZFxuIiwgc3RhX2lkKTsKKwkJSVdMX0VSUihwcml2LCAicmVtb3ZlZCBub24gYWN0aXZlIFNUQSAlZFxuIiwgc3RhX2lkKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmPSB+SVdMX1NUQV9VQ09ERV9BQ1RJVkU7CiAKQEAgLTMyNCwxMyArMzI3LDEzIEBACiAJY29uc3QgY2hhciAqYWRkciA9IHJtX3N0YS0+YWRkcjsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9SRU1PVkVfU1RBLlxuIik7CiAJCXJldHVybiAxOwogCX0KIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCXJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMzQwLDcgKzM0Myw3IEBACiAJCWl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShwcml2LCBhZGRyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNzgsNyArMzgxLDcgQEAKIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLAorCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwogCQlyZXQgPSAtRUlPOwogCX0KQEAgLTM4NywxMSArMzkwLDExIEBACiAJCXN3aXRjaCAocmVzLT51LnJlbV9zdGEuc3RhdHVzKSB7CiAJCWNhc2UgUkVNX1NUQV9TVUNDRVNTX01TSzoKIAkJCWl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShwcml2LCBhZGRyKTsKLQkJCUlXTF9ERUJVR19BU1NPQygiUkVQTFlfUkVNT1ZFX1NUQSBQQVNTRURcbiIpOworCQkJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSRVBMWV9SRU1PVkVfU1RBIFBBU1NFRFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU87Ci0JCQlJV0xfRVJST1IoIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNDI5LDE3ICs0MzIsMTcgQEAKIAlpZiAodW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKQogCQlnb3RvIG91dDsKIAotCUlXTF9ERUJVR19BU1NPQygiUmVtb3ZpbmcgU1RBIGZyb20gZHJpdmVyOiVkICAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSZW1vdmluZyBTVEEgZnJvbSBkcml2ZXI6JWQgICVwTVxuIiwKIAkJc3RhX2lkLCBhZGRyKTsKIAogCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpIHsKLQkJSVdMX0VSUk9SKCJSZW1vdmluZyAlcE0gYnV0IG5vbiBEUklWRVIgYWN0aXZlXG4iLAorCQlJV0xfRVJSKHByaXYsICJSZW1vdmluZyAlcE0gYnV0IG5vbiBEUklWRVIgYWN0aXZlXG4iLAogCQkJCWFkZHIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX1VDT0RFX0FDVElWRSkpIHsKLQkJSVdMX0VSUk9SKCJSZW1vdmluZyAlcE0gYnV0IG5vbiBVQ09ERSBhY3RpdmVcbiIsCisJCUlXTF9FUlIocHJpdiwgIlJlbW92aW5nICVwTSBidXQgbm9uIFVDT0RFIGFjdGl2ZVxuIiwKIAkJCQlhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDY5LDEzICs0NzIsMTQgQEAKIHZvaWQgaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoaXdsX2lzX2FsaXZlKHByaXYpICYmCiAJICAgIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCiAJICAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9SRU1PVkVfQUxMX1NUQSwgMCwgTlVMTCwgTlVMTCkpCi0JCUlXTF9FUlJPUigiQ291bGRuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGVcbiIpOworCQlJV0xfRVJSKHByaXYsICJDb3VsZG4ndCBjbGVhciB0aGUgc3RhdGlvbiB0YWJsZVxuIik7CiAKIAlwcml2LT5udW1fc3RhdGlvbnMgPSAwOwogCW1lbXNldChwcml2LT5zdGF0aW9ucywgMCwgc2l6ZW9mKHByaXYtPnN0YXRpb25zKSk7CkBAIC00ODMsMTEgKzQ4NywxNyBAQAogCS8qIGNsZWFuIHVjb2RlIGtleSB0YWJsZSBiaXQgbWFwICovCiAJcHJpdi0+dWNvZGVfa2V5X3RhYmxlID0gMDsKIAorCS8qIGtlZXAgdHJhY2sgb2Ygc3RhdGljIGtleXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVNfTUFYIDsgaSsrKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c1tpXS5rZXlfc2l6ZSkKKwkJCXRlc3RfYW5kX3NldF9iaXQoaSwgJnByaXYtPnVjb2RlX2tleV90YWJsZSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKTsKIAotc3RhdGljIGludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaTsKIApAQCAtNDk3LDYgKzUwNyw3IEBACiAKIAlyZXR1cm4gV0VQX0lOVkFMSURfT0ZGU0VUOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KTsKIAogaW50IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc2VuZF9pZl9lbXB0eSkKIHsKQEAgLTU1MSwxMyArNTYyLDEzIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChrZXljb25mLT5rZXlpZHgsICZwcml2LT51Y29kZV9rZXlfdGFibGUpKQotCQlJV0xfRVJST1IoImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCisJCUlXTF9FUlIocHJpdiwgImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCiAJCQkgIGtleWNvbmYtPmtleWlkeCk7CiAKIAlwcml2LT5kZWZhdWx0X3dlcF9rZXktLTsKIAltZW1zZXQoJnByaXYtPndlcF9rZXlzW2tleWNvbmYtPmtleWlkeF0sIDAsIHNpemVvZihwcml2LT53ZXBfa2V5c1swXSkpOwogCXJldCA9IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDEpOwotCUlXTF9ERUJVR19XRVAoIlJlbW92ZSBkZWZhdWx0IFdFUCBrZXk6IGlkeD0lZCByZXQ9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiUmVtb3ZlIGRlZmF1bHQgV0VQIGtleTogaWR4PSVkIHJldD0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+a2V5aWR4LCByZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKQEAgLTU3Myw3ICs1ODQsNyBAQAogCiAJaWYgKGtleWNvbmYtPmtleWxlbiAhPSBXRVBfS0VZX0xFTl8xMjggJiYKIAkgICAga2V5Y29uZi0+a2V5bGVuICE9IFdFUF9LRVlfTEVOXzY0KSB7Ci0JCUlXTF9ERUJVR19XRVAoIkJhZCBXRVAga2V5IGxlbmd0aCAlZFxuIiwga2V5Y29uZi0+a2V5bGVuKTsKKwkJSVdMX0RFQlVHX1dFUChwcml2LCAiQmFkIFdFUCBrZXkgbGVuZ3RoICVkXG4iLCBrZXljb25mLT5rZXlsZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU4NSw3ICs1OTYsNyBAQAogCXByaXYtPmRlZmF1bHRfd2VwX2tleSsrOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoa2V5Y29uZi0+a2V5aWR4LCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKLQkJSVdMX0VSUk9SKCJpbmRleCAlZCBhbHJlYWR5IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW5kZXggJWQgYWxyZWFkeSB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCiAJCQlrZXljb25mLT5rZXlpZHgpOwogCiAJcHJpdi0+d2VwX2tleXNba2V5Y29uZi0+a2V5aWR4XS5rZXlfc2l6ZSA9IGtleWNvbmYtPmtleWxlbjsKQEAgLTU5Myw3ICs2MDQsNyBAQAogCQkJCQkJCWtleWNvbmYtPmtleWxlbik7CiAKIAlyZXQgPSBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAwKTsKLQlJV0xfREVCVUdfV0VQKCJTZXQgZGVmYXVsdCBXRVAga2V5OiBsZW49JWQgaWR4PSVkIHJldD0lZFxuIiwKKwlJV0xfREVCVUdfV0VQKHByaXYsICJTZXQgZGVmYXVsdCBXRVAga2V5OiBsZW49JWQgaWR4PSVkIHJldD0lZFxuIiwKIAkJa2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsIHJldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIApAQCAtNjQxLDcgKzY1Miw3IEBACiAJICogaW4gdUNvZGUuICovCiAKIAlXQVJOKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCwKLQkJIm5vIHNwYWNlIGZvciBuZXcga2V3Iik7CisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CkBAIC02ODksNyArNzAwLDcgQEAKIAkgKiBpbiB1Q29kZS4gKi8KIAogCVdBUk4ocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAotCQkibm8gc3BhY2UgZm9yIG5ldyBrZXciKTsKKwkJIm5vIHNwYWNlIGZvciBhIG5ldyBrZXkiKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKQEAgLTcyNSw3ICs3MzYsNyBAQAogCSAqIGluIHVDb2RlLiAqLwogCiAJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCi0JCSJubyBzcGFjZSBmb3IgbmV3IGtldyIpOworCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOwogCiAJLyogVGhpcyBjb3B5IGlzIGFjdXRhbGx5IG5vdCBuZWVkZWQ6IHdlIGdldCB0aGUga2V5IHdpdGggZWFjaCBUWCAqLwogCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8ua2V5LCBrZXljb25mLT5rZXksIDE2KTsKQEAgLTc0OSw3ICs3NjAsNyBAQAogCiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCiAJCQkJICAgYWRkcik7CiAJCXJldHVybjsKIAl9CkBAIC04MDEsNyArODEyLDcgQEAKIAlrZXlfZmxhZ3MgPSBsZTE2X3RvX2NwdShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzKTsKIAlrZXlpZHggPSAoa2V5X2ZsYWdzID4+IFNUQV9LRVlfRkxHX0tFWUlEX1BPUykgJiAweDM7CiAKLQlJV0xfREVCVUdfV0VQKCJSZW1vdmUgZHluYW1pYyBrZXk6IGlkeD0lZCBzdGE9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiUmVtb3ZlIGR5bmFtaWMga2V5OiBpZHg9JWQgc3RhPSVkXG4iLAogCQkgICAgICBrZXljb25mLT5rZXlpZHgsIHN0YV9pZCk7CiAKIAlpZiAoa2V5Y29uZi0+a2V5aWR4ICE9IGtleWlkeCkgewpAQCAtODE1LDcgKzgyNiw3IEBACiAJfQogCiAJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCkgewotCQlJV0xfV0FSTklORygiUmVtb3Zpbmcgd3Jvbmcga2V5ICVkIDB4JXhcbiIsCisJCUlXTF9XQVJOKHByaXYsICJSZW1vdmluZyB3cm9uZyBrZXkgJWQgMHgleFxuIiwKIAkJCSAgICBrZXljb25mLT5rZXlpZHgsIGtleV9mbGFncyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwpAQCAtODIzLDcgKzgzNCw3IEBACiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCwKIAkJJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCi0JCUlXTF9FUlJPUigiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKIAkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0KTsKIAltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfaHdfa2V5KSk7CkBAIC04NjAsMTEgKzg3MSwxMiBAQAogCQlyZXQgPSBpd2xfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiVW5rbm93biBhbGc6ICVzIGFsZyA9ICVkXG4iLCBfX2Z1bmNfXywga2V5Y29uZi0+YWxnKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleWNvbmYtPmFsZyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX1dFUCgiU2V0IGR5bmFtaWMga2V5OiBhbGc9ICVkIGxlbj0lZCBpZHg9JWQgc3RhPSVkIHJldD0lZFxuIiwKKwlJV0xfREVCVUdfV0VQKHByaXYsICJTZXQgZHluYW1pYyBrZXk6IGFsZz0gJWQgbGVuPSVkIGlkeD0lZCBzdGE9JWQgcmV0PSVkXG4iLAogCQkgICAgICBrZXljb25mLT5hbGcsIGtleWNvbmYtPmtleWxlbiwga2V5Y29uZi0+a2V5aWR4LAogCQkgICAgICBzdGFfaWQsIHJldCk7CiAKQEAgLTg3NywxMyArODg5LDEzIEBACiAJCQkgICBzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgKmxxKQogewogCWludCBpOwotCUlXTF9ERUJVR19SQVRFKCJscSBzdGF0aW9uIGlkIDB4JXhcbiIsIGxxLT5zdGFfaWQpOwotCUlXTF9ERUJVR19SQVRFKCJscSBhbnQgMHglWCAweCVYXG4iLAorCUlXTF9ERUJVR19SQVRFKHByaXYsICJscSBzdGF0aW9uIGlkIDB4JXhcbiIsIGxxLT5zdGFfaWQpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJscSBhbnQgMHglWCAweCVYXG4iLAogCQkgICAgICAgbHEtPmdlbmVyYWxfcGFyYW1zLnNpbmdsZV9zdHJlYW1fYW50X21zaywKIAkJICAgICAgIGxxLT5nZW5lcmFsX3BhcmFtcy5kdWFsX3N0cmVhbV9hbnRfbXNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBMSU5LX1FVQUxfTUFYX1JFVFJZX05VTTsgaSsrKQotCQlJV0xfREVCVUdfUkFURSgibHEgaW5kZXggJWQgMHglWFxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxxIGluZGV4ICVkIDB4JVhcbiIsCiAJCQkgICAgICAgaSwgbHEtPnJzX3RhYmxlW2ldLnJhdGVfbl9mbGFncyk7CiB9CiAjZWxzZQpAQCAtMTA2MCw3ICsxMDcyLDcgQEAKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJcmV0dXJuIHN0YV9pZDsKIAotCQlJV0xfREVCVUdfRFJPUCgiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJTdGF0aW9uICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuICIKIAkJCSAgICAgICAiRGVmYXVsdGluZyB0byBicm9hZGNhc3QuLi5cbiIsCiAJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKQEAgLTEwNzIsNyArMTA4NCw4IEBACiAJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLCBwcml2LT5pd19tb2RlKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLAorCQkJcHJpdi0+aXdfbW9kZSk7CiAJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCX0KIH0KQEAgLTExMjUsOCArMTEzOCwxMCBAQAogCWludCBzdGFfaWQ7CiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBzdGF0aW9uIGZvciBBR0cgdGlkICVkXG4iLCB0aWQpOwogCQlyZXR1cm4gLUVOWElPOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3NfbXNrID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKaW5kZXggOWJiN2NlZi4uNTlhNTg2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTU0LDggKzU0LDExIEBACiBpbnQgaXdsX3J4b25fYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKTsKIGludCBpd2xfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKTsKIHZvaWQgaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9nZXRfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CiBpbnQgaXdsX2dldF9yYV9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKTsKK2ludCBpd2xfc2VuZF9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpOwogdTggaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQlpbnQgaXNfYXAsIHU4IGZsYWdzLAogCQkJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCmluZGV4IGFiMTNmZjIuLjFmMTE3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNzYsMTE2ICs3Niw2IEBACiAJbWVtc2V0KHB0ciwgMCwgc2l6ZW9mKCpwdHIpKTsKIH0KIAotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQotewotCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOwotCi0JZG1hX2FkZHJfdCBhZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZ0Yi0+bG8pOwotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkKLQkJYWRkciB8PQotCQkoKGRtYV9hZGRyX3QpKGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgJiAweEYpIDw8IDE2KSA8PCAxNjsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBpd2xfdGZkX3RiX2dldF9sZW4oc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQotewotCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOwotCi0JcmV0dXJuIGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgPj4gNDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF90ZmRfc2V0X3RiKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCwKLQkJCQkgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKLXsKLQlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKLQl1MTYgaGlfbl9sZW4gPSBsZW4gPDwgNDsKLQotCXB1dF91bmFsaWduZWRfbGUzMihhZGRyLCAmdGItPmxvKTsKLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCi0JCWhpX25fbGVuIHw9ICgoYWRkciA+PiAxNikgPj4gMTYpICYgMHhGOwotCi0JdGItPmhpX25fbGVuID0gY3B1X3RvX2xlMTYoaGlfbl9sZW4pOwotCi0JdGZkLT5udW1fdGJzID0gaWR4ICsgMTsKLX0KLQotc3RhdGljIGlubGluZSB1OCBpd2xfdGZkX2dldF9udW1fdGJzKHN0cnVjdCBpd2xfdGZkICp0ZmQpCi17Ci0JcmV0dXJuIHRmZC0+bnVtX3RicyAmIDB4MWY7Ci19Ci0KLS8qKgotICogaXdsX2h3X3R4cV9mcmVlX3RmZCAtIEZyZWUgYWxsIGNodW5rcyByZWZlcmVuY2VkIGJ5IFRGRCBbdHhxLT5xLnJlYWRfcHRyXQotICogQHByaXYgLSBkcml2ZXIgcHJpdmF0ZSBkYXRhCi0gKiBAdHhxIC0gdHggcXVldWUKLSAqCi0gKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcwotICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKLSAqLwotc3RhdGljIHZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKLXsKLQlzdHJ1Y3QgaXdsX3RmZCAqdGZkX3RtcCA9IChzdHJ1Y3QgaXdsX3RmZCAqKSZ0eHEtPnRmZHNbMF07Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZDsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgaW5kZXggPSB0eHEtPnEucmVhZF9wdHI7Ci0JaW50IGk7Ci0JaW50IG51bV90YnM7Ci0KLQl0ZmQgPSAmdGZkX3RtcFtpbmRleF07Ci0KLQkvKiBTYW5pdHkgY2hlY2sgb24gbnVtYmVyIG9mIGNodW5rcyAqLwotCW51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7Ci0KLQlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgewotCQlJV0xfRVJST1IoIlRvbyBtYW55IGNodW5rczogJWlcbiIsIG51bV90YnMpOwotCQkvKiBAdG9kbyBpc3N1ZSBmYXRhbCBlcnJvciwgaXQgaXMgcXVpdGUgc2VyaW91cyBzaXR1YXRpb24gKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIFVubWFwIHR4X2NtZCAqLwotCWlmIChudW1fdGJzKQotCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKLQkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKLQkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCi0JCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQotCS8qIFVubWFwIGNodW5rcywgaWYgYW55LiAqLwotCWZvciAoaSA9IDE7IGkgPCBudW1fdGJzOyBpKyspIHsKLQkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGl3bF90ZmRfdGJfZ2V0X2FkZHIodGZkLCBpKSwKLQkJCQlpd2xfdGZkX3RiX2dldF9sZW4odGZkLCBpKSwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJaWYgKHR4cS0+dHhiKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSk7Ci0JCQl0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0gPSBOVUxMOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX3RmZCAqdGZkLAotCQkJCQlkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCi17Ci0KLQl1MzIgbnVtX3RicyA9IGl3bF90ZmRfZ2V0X251bV90YnModGZkKTsKLQotCS8qIEVhY2ggVEZEIGNhbiBwb2ludCB0byBhIG1heGltdW0gMjAgVHggYnVmZmVycyAqLwotCWlmIChudW1fdGJzID49IElXTF9OVU1fT0ZfVEJTKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCi0JCQkgIElXTF9OVU1fT0ZfVEJTKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JQlVHX09OKGFkZHIgJiB+RE1BX0JJVF9NQVNLKDM2KSk7Ci0JaWYgKHVubGlrZWx5KGFkZHIgJiB+SVdMX1RYX0RNQV9NQVNLKSkKLQkJSVdMX0VSUk9SKCJVbmFsaWduZWQgYWRkcmVzcyA9ICVsbHhcbiIsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7Ci0KLQlpd2xfdGZkX3NldF90Yih0ZmQsIG51bV90YnMsIGFkZHIsIGxlbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIgLSBTZW5kIG5ldyB3cml0ZSBpbmRleCB0byBoYXJkd2FyZQogICovCkBAIC0yMDYsNyArOTYsNyBAQAogCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKIAogCQlpZiAocmVnICYgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX01BQ19TTEVFUCkgewotCQkJSVdMX0RFQlVHX0lORk8oIlJlcXVlc3Rpbmcgd2FrZXVwLCBHUDEgPSAweCV4XG4iLCByZWcpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJlcXVlc3Rpbmcgd2FrZXVwLCBHUDEgPSAweCV4XG4iLCByZWcpOwogCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwogCQkJcmV0dXJuIHJldDsKQEAgLTI0MSw3ICsxMzEsNyBAQAogICogRnJlZSBhbGwgYnVmZmVycy4KICAqIDAtZmlsbCwgYnV0IGRvIG5vdCBmcmVlICJ0eHEiIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCBpd2xfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCit2b2lkIGl3bF90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CiAJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CkBAIC0yNTQsNyArMTQ0LDcgQEAKIAkvKiBmaXJzdCwgZW1wdHkgYWxsIEJEJ3MgKi8KIAlmb3IgKDsgcS0+d3JpdGVfcHRyICE9IHEtPnJlYWRfcHRyOwogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQotCQlpd2xfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSAqIHEtPm5fd2luZG93OwogCkBAIC0yNjQsNyArMTU0LDcgQEAKIAogCS8qIERlLWFsbG9jIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzICovCiAJaWYgKHR4cS0+cS5uX2JkKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKSAqCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBwcml2LT5od19wYXJhbXMudGZkX3NpemUgKgogCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOwogCiAJLyogRGUtYWxsb2MgYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YSAqLwpAQCAtMjc0LDcgKzE2NCw3IEBACiAJLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCiAJbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKIH0KLQorRVhQT1JUX1NZTUJPTChpd2xfdHhfcXVldWVfZnJlZSk7CiAKIC8qKgogICogaXdsX2NtZF9xdWV1ZV9mcmVlIC0gRGVhbGxvY2F0ZSBETUEgcXVldWUuCkBAIC0yODQsNyArMTc0LDcgQEAKICAqIEZyZWUgYWxsIGJ1ZmZlcnMuCiAgKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKQEAgLTMwMywxMiArMTkzLDE0IEBACiAKIAkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwogCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3RmZCkgKgorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICoKIAkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+dGZkcywgdHhxLT5xLmRtYV9hZGRyKTsKIAogCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9jbWRfcXVldWVfZnJlZSk7CisKIC8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgogICogRE1BIHNlcnZpY2VzCiAgKgpAQCAtMzg4LDYgKzI4MCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzaXplX3QgdGZkX3N6ID0gcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogVEZEX1FVRVVFX1NJWkVfTUFYOwogCiAJLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCiAJICogbm90IHNoYXJlZCB3aXRoIGRldmljZS4gKi8KQEAgLTM5NSwyMiArMjg4LDIwIEBACiAJCXR4cS0+dHhiID0ga21hbGxvYyhzaXplb2YodHhxLT50eGJbMF0pICoKIAkJCQkgICBURkRfUVVFVUVfU0laRV9NQVgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+dHhiKSB7Ci0JCQlJV0xfRVJST1IoImttYWxsb2MgZm9yIGF1eGlsaWFyeSBCRCAiCisJCQlJV0xfRVJSKHByaXYsICJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgogCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQl9IGVsc2UKKwl9IGVsc2UgewogCQl0eHEtPnR4YiA9IE5VTEw7CisJfQogCiAJLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKIAkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPnRmZHMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsCi0JCQlzaXplb2YodHhxLT50ZmRzWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCwKLQkJCSZ0eHEtPnEuZG1hX2FkZHIpOworCXR4cS0+dGZkcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgdGZkX3N6LCAmdHhxLT5xLmRtYV9hZGRyKTsKIAogCWlmICghdHhxLT50ZmRzKSB7Ci0JCUlXTF9FUlJPUigicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsCi0JCQkgIHNpemVvZih0eHEtPnRmZHNbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKKwkJSVdMX0VSUihwcml2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsIHRmZF9zeik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXR4cS0+cS5pZCA9IGlkOwpAQCAtNDI0LDQyICszMTUsMTEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotLyoKLSAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgotICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCi0gKgotICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCi0gKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBDaXJjdWxhciBidWZmZXIgKFRGRCBxdWV1ZSBpbiBEUkFNKSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX0NCQkNfUVVFVUUodHhxX2lkKSwKLQkJCSAgICAgdHhxLT5xLmRtYV9hZGRyID4+IDgpOwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfdHhfcXVldWVfaW5pdCAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSB0eC9jbWQgcXVldWUKICAqLwotc3RhdGljIGludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKLQkJCSAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKK2ludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJICAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKIHsKIAlpbnQgaSwgbGVuOwogCWludCByZXQ7CkBAIC01MDEsNyArMzYxLDcgQEAKIAlpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKIAogCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUgKi8KLQlpd2xfaHdfdHhfcXVldWVfaW5pdChwcml2LCB0eHEpOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbml0KHByaXYsIHR4cSk7CiAKIAlyZXR1cm4gMDsKIGVycjoKQEAgLTUxNiw2ICszNzYsOCBAQAogCX0KIAlyZXR1cm4gLUVOT01FTTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3F1ZXVlX2luaXQpOworCiAvKioKICAqIGl3bF9od190eHFfY3R4X2ZyZWUgLSBGcmVlIFRYUSBDb250ZXh0CiAgKgpAQCAtNTU3LDEzICs0MTksMTMgQEAKIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+c2NkX2JjX3RibHMsCiAJCQkJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2JjX3RibHM7CiAJfQogCS8qIEFsbG9jIGtlZXAtd2FybSBidWZmZXIgKi8KIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+a3csIElXTF9LV19TSVpFKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9rdzsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTU4OSw3ICs0NTEsNyBAQAogCQlyZXQgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKIAkJCQkgICAgICAgdHhxX2lkKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKKwkJCUlXTF9FUlIocHJpdiwgIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTc3OCwxNCArNjQwLDE0IEBACiAJCW1lbWNweSh0eF9jbWQtPmtleSwga2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0FHR19DQ01QX01TSzsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKIAkJdHhfY21kLT5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwogCQlpZWVlODAyMTFfZ2V0X3RraXBfa2V5KGtleWNvbmYsIHNrYl9mcmFnLAogCQkJSUVFRTgwMjExX1RLSVBfUDJfS0VZLCB0eF9jbWQtPmtleSk7Ci0JCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfV0VQOgpAQCAtNzk3LDEyICs2NTksMTIgQEAKIAogCQltZW1jcHkoJnR4X2NtZC0+a2V5WzNdLCBrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CiAKLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKIAkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXljb25mLT5rZXlpZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXljb25mLT5hbGcpOworCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWNvbmYtPmFsZyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTgyMiw3ICs2ODQsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CkBAIC04NDQsMTMgKzcwNSwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJaWYgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZSAmIDB4RkYpID09CiAJICAgICBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODU4LDExICs3MTksMTEgQEAKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCkBAIC04NzIsNyArNzMzLDcgQEAKIAkgICAgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fAogCSAgICAgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmICFwcml2LT5hc3NvY19pZCkgfHwKIAkgICAgICFwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkKSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODgzLDEyICs3NDQsMTIgQEAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwogCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJZ290byBkcm9wOwogCX0KIAotCUlXTF9ERUJVR19UWCgic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKKwlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CiAKIAlzd3FfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eHFfaWQgPSBzd3FfaWQ7CkBAIC04OTgsMTIgKzc1OSwxNCBAQAogCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyOwogCQlzZXFfbnVtYmVyICY9IElFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJaGRyLT5zZXFfY3RybCA9IGhkci0+c2VxX2N0cmwgJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CisJCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CiAJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2VxX251bWJlcik7CiAJCXNlcV9udW1iZXIgKz0gMHgxMDsKIAkJLyogYWdncmVnYXRpb24gaXMgb24gZm9yIHRoaXMgPHN0YSx0aWQ+ICovCi0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKIAkJCXR4cV9pZCA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnR4cV9pZDsKKwkJCXN3cV9pZCA9IGl3bF92aXJ0dWFsX2FnZ19xdWV1ZV9udW0oc3dxX2lkLCB0eHFfaWQpOworCQl9CiAJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSsrOwogCX0KIApAQCAtOTEzLDEwICs3NzYsNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBURkQgd2l0aGluIHRoaXMgcXVldWUncyBjaXJjdWxhciBURkQgYnVmZmVyICovCi0JdGZkID0gJnR4cS0+dGZkc1txLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KIAkvKiBTZXQgdXAgZHJpdmVyIGRhdGEgZm9yIHRoaXMgVEZEICovCiAJbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2luZm8pKTsKIAl0eHEtPnR4YltxLT53cml0ZV9wdHJdLnNrYlswXSA9IHNrYjsKQEAgLTk3MCw3ICs4MjksOCBAQAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAl0eGNtZF9waHlzICs9IG9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwotCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICB0eGNtZF9waHlzLCBsZW4sIDEsIDApOwogCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQlpd2xfdHhfY21kX2J1aWxkX2h3Y3J5cHRvKHByaXYsIGluZm8sIHR4X2NtZCwgc2tiLCBzdGFfaWQpOwpAQCAtOTgxLDcgKzg0MSw5IEBACiAJaWYgKGxlbikgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAogCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIDAsIDApOwogCX0KIAogCS8qIFRlbGwgTklDIGFib3V0IGFueSAyLWJ5dGUgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCkBAIC0xMDM1LDcgKzg5Nyw3IEBACiAJCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmh3LCB0eHEtPnN3cV9pZCk7CisJCQlpd2xfc3RvcF9xdWV1ZShwcml2LCB0eHEtPnN3cV9pZCk7CiAJCX0KIAl9CiAKQEAgLTEwNjMsNyArOTI1LDYgQEAKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsX3RmZCAqdGZkOwogCXN0cnVjdCBpd2xfY21kICpvdXRfY21kOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDgxLDIxICs5NDIsMTcgQEAKIAkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOworCQlJV0xfRVJSKHByaXYsICJObyBzcGFjZSBmb3IgVHhcbiIpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiAKLQl0ZmQgPSAmdHhxLT50ZmRzW3EtPndyaXRlX3B0cl07Ci0JbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKLQotCiAJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwogCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOwogCkBAIC0xMTIwLDEzICs5NzcsMTUgQEAKIAlwY2lfdW5tYXBfbGVuX3NldCgmb3V0X2NtZC0+bWV0YSwgbGVuLCBsZW4pOwogCXBoeXNfYWRkciArPSBvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKIAotCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGZpeF9zaXplKTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJICAgcGh5c19hZGRyLCBmaXhfc2l6ZSwgMSwKKwkJCQkJCSAgIFUzMl9QQUQoY21kLT5sZW4pKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJc3dpdGNoIChvdXRfY21kLT5oZHIuY21kKSB7CiAJY2FzZSBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01EOgogCWNhc2UgU0VOU0lUSVZJVFlfQ01EOgotCQlJV0xfREVCVUdfSENfRFVNUCgiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgorCQlJV0xfREVCVUdfSENfRFVNUChwcml2LCAiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgogCQkJCSIlZCBieXRlcyBhdCAlZFslZF06JWRcbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcob3V0X2NtZC0+aGRyLmNtZCksCiAJCQkJb3V0X2NtZC0+aGRyLmNtZCwKQEAgLTExMzQsNyArOTkzLDcgQEAKIAkJCQlxLT53cml0ZV9wdHIsIGlkeCwgSVdMX0NNRF9RVUVVRV9OVU0pOwogCQkJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IQygiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgorCQlJV0xfREVCVUdfSEMocHJpdiwgIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKIAkJCQkiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAogCQkJCW91dF9jbWQtPmhkci5jbWQsCkBAIC0xMTQ0LDggKzEwMDMsOSBAQAogI2VuZGlmCiAJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAKLQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLwotCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgMCk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKQorCQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwogCiAJLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwpAQCAtMTE2Myw3ICsxMDIzLDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHEgaWQgKCVkKSwgaW5kZXggJWQsICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm4gMDsKQEAgLTExODAsNyArMTA0MCw3IEBACiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ludmFsX2J5dGVfY250X3RibChwcml2LCB0eHEpOwogCi0JCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAJCW5mcmVlZCsrOwogCX0KIAlyZXR1cm4gbmZyZWVkOwpAQCAtMTIwMyw3ICsxMDYzLDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaWR4ID49IHEtPm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZChxLCBpZHgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAogCQkJICBpZHgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm47CkBAIC0xMjE4LDcgKzEwNzgsNyBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJaWYgKG5mcmVlZCsrID4gMCkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGlkeCwKKwkJCUlXTF9FUlIocHJpdiwgIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaWR4LAogCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKIAkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiAJCX0KQEAgLTEzMDYsNyArMTE2Niw3IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCUlXTF9XQVJOSU5HKCIlcyBvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwKKwlJV0xfV0FSTihwcml2LCAiJXMgb24gcmEgPSAlcE0gdGlkID0gJWRcbiIsCiAJCQlfX2Z1bmNfXywgcmEsIHRpZCk7CiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHJhKTsKQEAgLTEzMTQsNyArMTE3NCw3IEBACiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PRkYpIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgSVdMX0FHR19PRkYgIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IEFHRyB3aGVuIHN0YXRlIGlzIG5vdCBJV0xfQUdHX09GRiAhXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKQEAgLTEzMzQsMTEgKzExOTQsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSFcgcXVldWUgaXMgZW1wdHlcbiIpOworCQlJV0xfRVJSKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOwogCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgcmEsIHRpZCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBOT1QgZW1wdHk6ICVkIHBhY2tldHMgaW4gSFcgcXVldWVcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgaXMgTk9UIGVtcHR5OiAlZCBwYWNrZXRzIGluIEhXIHF1ZXVlXG4iLAogCQkJICAgICB0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSk7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE7CiAJfQpAQCAtMTM1NCw3ICsxMjE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFyYSkgewotCQlJV0xfRVJST1IoInJhID0gTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInJhID0gTlVMTFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTM2NSwxMSArMTIyNSwxMyBAQAogCiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCByYSk7CiAKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pCisJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgc3RhdGlvbiBmb3IgQUdHIHRpZCAlZFxuIiwgdGlkKTsKIAkJcmV0dXJuIC1FTlhJTzsKKwl9CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PTikKLQkJSVdMX1dBUk5JTkcoIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJTdG9wcGluZyBBR0cgd2hpbGUgc3RhdGUgbm90IElXTF9BR0dfT05cbiIpOwogCiAJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAlzc24gPSAodGlkX2RhdGEtPnNlcV9udW1iZXIgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CkBAIC0xMzc5LDEzICsxMjQxLDEzIEBACiAKIAkvKiBUaGUgcXVldWUgaXMgbm90IGVtcHR5ICovCiAJaWYgKHdyaXRlX3B0ciAhPSByZWFkX3B0cikgewotCQlJV0xfREVCVUdfSFQoIlN0b3BwaW5nIGEgbm9uIGVtcHR5IEFHRyBIVyBRVUVVRVxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKIAkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPQogCQkJCUlXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CisJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xNDE2LDcgKzEyNzgsNyBAQAogCQkgICAgKHEtPnJlYWRfcHRyID09IHEtPndyaXRlX3B0cikpIHsKIAkJCXUxNiBzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOwogCQkJaW50IHR4X2ZpZm8gPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07Ci0JCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBERUxCQSBmbG93XG4iKTsKKwkJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIERFTEJBIGZsb3dcbiIpOwogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2FnZ19kaXNhYmxlKHByaXYsIHR4cV9pZCwKIAkJCQkJCQkgICAgIHNzbiwgdHhfZmlmbyk7CiAJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PRkY7CkBAIC0xNDI2LDcgKzEyODgsNyBAQAogCWNhc2UgSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0FEREJBOgogCQkvKiBXZSBhcmUgcmVjbGFpbWluZyB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlIHF1ZXVlICovCiAJCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7Ci0JCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBBRERCQSBmbG93XG4iKTsKKwkJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIEFEREJBIGZsb3dcbiIpOwogCQkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT047CiAJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgYWRkciwgdGlkKTsKIAkJfQpAQCAtMTQ1NSwxMyArMTMxNywxMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAogCWlmICh1bmxpa2VseSghYWdnLT53YWl0X2Zvcl9iYSkpICB7Ci0JCUlXTF9FUlJPUigiUmVjZWl2ZWQgQkEgd2hlbiBub3QgZXhwZWN0ZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJSZWNlaXZlZCBCQSB3aGVuIG5vdCBleHBlY3RlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIE1hcmsgdGhhdCB0aGUgZXhwZWN0ZWQgYmxvY2stYWNrIHJlc3BvbnNlIGFycml2ZWQgKi8KIAlhZ2ctPndhaXRfZm9yX2JhID0gMDsKLQlJV0xfREVCVUdfVFhfUkVQTFkoIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJCQSAlZCAlZFxuIiwgYWdnLT5zdGFydF9pZHgsIGJhX3Jlc3AtPnNlcV9jdGwpOwogCiAJLyogQ2FsY3VsYXRlIHNoaWZ0IHRvIGFsaWduIGJsb2NrLWFjayBiaXRzIHdpdGggb3VyIFR4IHdpbmRvdyBiaXRzICovCiAJc2ggPSBhZ2ctPnN0YXJ0X2lkeCAtIFNFUV9UT19JTkRFWChzZXFfY3RsID4+IDQpOwpAQCAtMTQ3Miw3ICsxMzM0LDcgQEAKIAliaXRtYXAgPSBsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApID4+IHNoOwogCiAJaWYgKGFnZy0+ZnJhbWVfY291bnQgPiAoNjQgLSBzaCkpIHsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7CisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAibW9yZSBmcmFtZXMgdGhhbiBiaXRtYXAgc2l6ZSIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNDg1LDcgKzEzNDcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmZyYW1lX2NvdW50IDsgaSsrKSB7CiAJCWFjayA9IGJpdG1hcCAmICgxVUxMIDw8IGkpOwogCQlzdWNjZXNzZXMgKz0gISFhY2s7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIiVzIE9OIGk9JWQgaWR4PSVkIHJhdz0lZFxuIiwKIAkJCWFjayA/ICJBQ0siIDogIk5BQ0siLCBpLCAoYWdnLT5zdGFydF9pZHggKyBpKSAmIDB4ZmYsCiAJCQlhZ2ctPnN0YXJ0X2lkeCArIGkpOwogCX0KQEAgLTE0OTgsNyArMTM2MCw3IEBACiAJaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBhZ2ctPmZyYW1lX2NvdW50OwogCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCBhZ2ctPnJhdGVfbl9mbGFncywgaW5mbyk7CiAKLQlJV0xfREVCVUdfVFhfUkVQTFkoIkJpdG1hcCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJCaXRtYXAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTI4LDcgKzEzOTAsOCBAQAogCXUxNiBiYV9yZXNwX3NjZF9zc24gPSBsZTE2X3RvX2NwdShiYV9yZXNwLT5zY2Rfc3NuKTsKIAogCWlmIChzY2RfZmxvdyA+PSBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0pIHsKLQkJSVdMX0VSUk9SKCJCVUdfT04gc2NkX2Zsb3cgaXMgYmlnZ2VyIHRoYW4gbnVtYmVyIG9mIHF1ZXVlc1xuIik7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJCVUdfT04gc2NkX2Zsb3cgaXMgYmlnZ2VyIHRoYW4gbnVtYmVyIG9mIHF1ZXVlc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE1NDIsMTkgKzE0MDUsMTkgQEAKIAogCS8qIFRPRE86IE5lZWQgdG8gZ2V0IHRoaXMgY29weSBtb3JlIHNhZmVseSAtIG5vdyBnb29kIGZvciBkZWJ1ZyAqLwogCi0JSVdMX0RFQlVHX1RYX1JFUExZKCJSRVBMWV9DT01QUkVTU0VEX0JBIFslZF0gUmVjZWl2ZWQgZnJvbSAlcE0sICIKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXSBSZWNlaXZlZCBmcm9tICVwTSwgIgogCQkJICAgInN0YV9pZCA9ICVkXG4iLAogCQkJICAgYWdnLT53YWl0X2Zvcl9iYSwKIAkJCSAgICh1OCAqKSAmYmFfcmVzcC0+c3RhX2FkZHJfbG8zMiwKIAkJCSAgIGJhX3Jlc3AtPnN0YV9pZCk7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJUSUQgPSAlZCwgU2VxQ3RsID0gJWQsIGJpdG1hcCA9IDB4JWxseCwgc2NkX2Zsb3cgPSAiCisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUSUQgPSAlZCwgU2VxQ3RsID0gJWQsIGJpdG1hcCA9IDB4JWxseCwgc2NkX2Zsb3cgPSAiCiAJCQkgICAiJWQsIHNjZF9zc24gPSAlZFxuIiwKIAkJCSAgIGJhX3Jlc3AtPnRpZCwKIAkJCSAgIGJhX3Jlc3AtPnNlcV9jdGwsCiAJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCksCiAJCQkgICBiYV9yZXNwLT5zY2RfZmxvdywKIAkJCSAgIGJhX3Jlc3AtPnNjZF9zc24pOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiREFUIHN0YXJ0X2lkeCA9ICVkLCBiaXRtYXAgPSAweCVsbHggXG4iLAorCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiREFUIHN0YXJ0X2lkeCA9ICVkLCBiaXRtYXAgPSAweCVsbHggXG4iLAogCQkJICAgYWdnLT5zdGFydF9pZHgsCiAJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKIApAQCAtMTU3Miw3ICsxNDM1LDcgQEAKIAkJaWYgKChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspICYmCiAJCSAgICBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCSAgICAoYWdnLT5zdGF0ZSAhPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEpKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cS0+c3dxX2lkKTsKKwkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cS0+c3dxX2lkKTsKIAogCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCBzY2RfZmxvdyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggNTdkZDM0ZS4uYTcxYjA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00Niw0MCArNDYsMjUgQEAKIAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi0jaW5jbHVkZSAiaXdsLTM5NDUtY29yZS5oIgorI2RlZmluZSBEUlZfTkFNRQkiaXdsMzk0NSIKKworI2luY2x1ZGUgIml3bC1maC5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWZoLmgiCisjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi11MzIgaXdsMzk0NV9kZWJ1Z19sZXZlbDsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBtb2R1bGUgYm9pbGVyIHBsYXRlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9kaXNhYmxlX2h3X3NjYW47IC8qIGRlZjogMCA9IHVzZSAzOTQ1J3MgaC93IHNjYW4gKi8KLXN0YXRpYyB1MzIgaXdsMzk0NV9wYXJhbV9kZWJ1ZzsgICAgLyogZGVmOiAwID0gbWluaW1hbCBkZWJ1ZyBsb2cgbWVzc2FnZXMgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9kaXNhYmxlOyAgLyogZGVmOiAwID0gZW5hYmxlIHJhZGlvICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcGFyYW1fYW50ZW5uYTsgIC8qIGRlZjogMCA9IGJvdGggYW50ZW5uYXMgKHVzZSBkaXZlcnNpdHkpICovCi1pbnQgaXdsMzk0NV9wYXJhbV9od2NyeXB0bzsgICAgICAgIC8qIGRlZjogMCA9IHVzZSBzb2Z0d2FyZSBlbmNyeXB0aW9uICovCi1pbnQgaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtID0gSVdMMzlfTUFYX05VTV9RVUVVRVM7IC8qIGRlZjogOCBUeCBxdWV1ZXMgKi8KKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKIAogLyoKICAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KLSAqIE5PVEU6IERSVl9OQU1FIGlzIGRlZmluZWQgaW4gaXdsd2lmaS5oIGZvciB1c2UgYnkgaXdsLWRlYnVnLmggYW5kIHByaW50awogICovCiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCVwKICJJbnRlbChSKSBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24gZHJpdmVyIGZvciBMaW51eCIKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKICNkZWZpbmUgVkQgImQiCiAjZWxzZQogI2RlZmluZSBWRApAQCAtOTEsMTAgKzc2LDEwIEBACiAjZGVmaW5lIFZTCiAjZW5kaWYKIAotI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gIjEuMi4yNmsiIFZEIFZTCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDggSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIElXTDM5X1ZFUlNJT04gIjEuMi4yNmsiIFZEIFZTCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDkgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIERSVl9BVVRIT1IgICAgICI8aWx3QGxpbnV4LmludGVsLmNvbT4iCi0jZGVmaW5lIERSVl9WRVJTSU9OICAgICBJV0xXSUZJX1ZFUlNJT04KKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTDM5X1ZFUlNJT04KIAogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKQEAgLTEwMiwyMzUgKzg3LDEzIEBACiBNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQgIiAiIERSVl9BVVRIT1IpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaXdsMzk0NV9nZXRfYmFuZCgKLQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCXJldHVybiBwcml2LT5ody0+d2lwaHktPmJhbmRzW2JhbmRdOwotfQotCi0vKioqKioqKioqKioqKioqIERNQS1RVUVVRS1HRU5FUkFMLUZVTkNUSU9OUyAgKioqKioKLSAqIERNQSBzZXJ2aWNlcwotICoKLSAqIFRoZW9yeSBvZiBvcGVyYXRpb24KLSAqCi0gKiBBIFR4IG9yIFJ4IHF1ZXVlIHJlc2lkZXMgaW4gaG9zdCBEUkFNLCBhbmQgaXMgY29tcHJpc2VkIG9mIGEgY2lyY3VsYXIgYnVmZmVyCi0gKiBvZiBidWZmZXIgZGVzY3JpcHRvcnMsIGVhY2ggb2Ygd2hpY2ggcG9pbnRzIHRvIG9uZSBvciBtb3JlIGRhdGEgYnVmZmVycyBmb3IKLSAqIHRoZSBkZXZpY2UgdG8gcmVhZCBmcm9tIG9yIGZpbGwuICBEcml2ZXIgYW5kIGRldmljZSBleGNoYW5nZSBzdGF0dXMgb2YgZWFjaAotICogcXVldWUgdmlhICJyZWFkIiBhbmQgIndyaXRlIiBwb2ludGVycy4gIERyaXZlciBrZWVwcyBtaW5pbXVtIG9mIDIgZW1wdHkKLSAqIGVudHJpZXMgaW4gZWFjaCBjaXJjdWxhciBidWZmZXIsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25mdXNpbmcgZW1wdHkgYW5kIGZ1bGwKLSAqIHF1ZXVlIHN0YXRlcy4KLSAqCi0gKiBUaGUgZGV2aWNlIHJlYWRzIG9yIHdyaXRlcyB0aGUgZGF0YSBpbiB0aGUgcXVldWVzIHZpYSB0aGUgZGV2aWNlJ3Mgc2V2ZXJhbAotICogRE1BL0ZJRk8gY2hhbm5lbHMuICBFYWNoIHF1ZXVlIGlzIG1hcHBlZCB0byBhIHNpbmdsZSBETUEgY2hhbm5lbC4KLSAqCi0gKiBGb3IgVHggcXVldWUsIHRoZXJlIGFyZSBsb3cgbWFyayBhbmQgaGlnaCBtYXJrIGxpbWl0cy4gSWYsIGFmdGVyIHF1ZXVpbmcKLSAqIHRoZSBwYWNrZXQgZm9yIFR4LCBmcmVlIHNwYWNlIGJlY29tZSA8IGxvdyBtYXJrLCBUeCBxdWV1ZSBzdG9wcGVkLiBXaGVuCi0gKiByZWNsYWltaW5nIHBhY2tldHMgKG9uICd0eCBkb25lIElSUSksIGlmIGZyZWUgc3BhY2UgYmVjb21lID4gaGlnaCBtYXJrLAotICogVHggcXVldWUgcmVzdW1lZC4KLSAqCi0gKiBUaGUgMzk0NSBvcGVyYXRlcyB3aXRoIHNpeCBxdWV1ZXM6ICBPbmUgcmVjZWl2ZSBxdWV1ZSwgb25lIHRyYW5zbWl0IHF1ZXVlCi0gKiAoIzQpIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgZmlybXdhcmUsIGFuZCBmb3VyIHRyYW5zbWl0IHF1ZXVlcwotICogKCMwLTMpIGZvciBkYXRhIHR4IHZpYSBFRENBLiAgQW4gYWRkaXRpb25hbCAyIEhDQ0EgcXVldWVzIGFyZSB1bnVzZWQuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbnQgaXdsMzk0NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSkKLXsKLQlpbnQgcyA9IHEtPnJlYWRfcHRyIC0gcS0+d3JpdGVfcHRyOwotCi0JaWYgKHEtPnJlYWRfcHRyID4gcS0+d3JpdGVfcHRyKQotCQlzIC09IHEtPm5fYmQ7Ci0KLQlpZiAocyA8PSAwKQotCQlzICs9IHEtPm5fd2luZG93OwotCS8qIGtlZXAgc29tZSByZXNlcnZlIHRvIG5vdCBjb25mdXNlIGVtcHR5IGFuZCBmdWxsIHNpdHVhdGlvbnMgKi8KLQlzIC09IDI7Ci0JaWYgKHMgPCAwKQotCQlzID0gMDsKLQlyZXR1cm4gczsKLX0KLQotaW50IGl3bDM5NDVfeDJfcXVldWVfdXNlZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwgaW50IGkpCi17Ci0JcmV0dXJuIHEtPndyaXRlX3B0ciA+IHEtPnJlYWRfcHRyID8KLQkJKGkgPj0gcS0+cmVhZF9wdHIgJiYgaSA8IHEtPndyaXRlX3B0cikgOgotCQkhKGkgPCBxLT5yZWFkX3B0ciAmJiBpID49IHEtPndyaXRlX3B0cik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1OCBnZXRfY21kX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCB1MzIgaW5kZXgsIGludCBpc19odWdlKQotewotCS8qIFRoaXMgaXMgZm9yIHNjYW4gY29tbWFuZCwgdGhlIGJpZyBidWZmZXIgYXQgZW5kIG9mIGNvbW1hbmQgYXJyYXkgKi8KLQlpZiAoaXNfaHVnZSkKLQkJcmV0dXJuIHEtPm5fd2luZG93OwkvKiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KLQotCS8qIE90aGVyd2lzZSwgdXNlIG5vcm1hbCBzaXplIGJ1ZmZlcnMgKi8KLQlyZXR1cm4gaW5kZXggJiAocS0+bl93aW5kb3cgLSAxKTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3F1ZXVlX2luaXQgLSBJbml0aWFsaXplIHF1ZXVlJ3MgaGlnaC9sb3ctd2F0ZXIgYW5kIHJlYWQvd3JpdGUgaW5kZXhlcwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwKLQkJCSAgaW50IGNvdW50LCBpbnQgc2xvdHNfbnVtLCB1MzIgaWQpCi17Ci0JcS0+bl9iZCA9IGNvdW50OwotCXEtPm5fd2luZG93ID0gc2xvdHNfbnVtOwotCXEtPmlkID0gaWQ7Ci0KLQkvKiBjb3VudCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UgaXdsX3F1ZXVlX2luY193cmFwCi0JICogYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwotCUJVR19PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpOwotCi0JLyogc2xvdHNfbnVtIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGdldF9jbWRfaW5kZXggaXMgYnJva2VuLiAqLwotCUJVR19PTighaXNfcG93ZXJfb2ZfMihzbG90c19udW0pKTsKLQotCXEtPmxvd19tYXJrID0gcS0+bl93aW5kb3cgLyA0OwotCWlmIChxLT5sb3dfbWFyayA8IDQpCi0JCXEtPmxvd19tYXJrID0gNDsKLQotCXEtPmhpZ2hfbWFyayA9IHEtPm5fd2luZG93IC8gODsKLQlpZiAocS0+aGlnaF9tYXJrIDwgMikKLQkJcS0+aGlnaF9tYXJrID0gMjsKLQotCXEtPndyaXRlX3B0ciA9IHEtPnJlYWRfcHRyID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfYWxsb2MgLSBBbGxvYyBkcml2ZXIgZGF0YSBhbmQgVEZEIENCIGZvciBvbmUgVHgvY21kIHF1ZXVlCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSwgdTMyIGlkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCi0JLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCi0JICogbm90IHNoYXJlZCB3aXRoIGRldmljZS4gKi8KLQlpZiAoaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pIHsKLQkJdHhxLT50eGIgPSBrbWFsbG9jKHNpemVvZih0eHEtPnR4YlswXSkgKgotCQkJCSAgIFRGRF9RVUVVRV9TSVpFX01BWCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdHhxLT50eGIpIHsKLQkJCUlXTF9FUlJPUigia21hbGxvYyBmb3IgYXV4aWxpYXJ5IEJEICIKLQkJCQkgICJzdHJ1Y3R1cmVzIGZhaWxlZFxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlCi0JCXR4cS0+dHhiID0gTlVMTDsKLQotCS8qIENpcmN1bGFyIGJ1ZmZlciBvZiB0cmFuc21pdCBmcmFtZSBkZXNjcmlwdG9ycyAoVEZEcyksCi0JICogc2hhcmVkIHdpdGggZGV2aWNlICovCi0JdHhxLT5iZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwKLQkJCXNpemVvZih0eHEtPmJkWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCwKLQkJCSZ0eHEtPnEuZG1hX2FkZHIpOwotCi0JaWYgKCF0eHEtPmJkKSB7Ci0JCUlXTF9FUlJPUigicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsCi0JCQkgIHNpemVvZih0eHEtPmJkWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXR4cS0+cS5pZCA9IGlkOwotCi0JcmV0dXJuIDA7Ci0KLSBlcnJvcjoKLQlrZnJlZSh0eHEtPnR4Yik7Ci0JdHhxLT50eGIgPSBOVUxMOwotCi0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV9pbml0IC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIHR4L2NtZCBxdWV1ZQotICovCi1pbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEsIGludCBzbG90c19udW0sIHUzMiB0eHFfaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGxlbjsKLQlpbnQgcmMgPSAwOwotCi0JLyoKLQkgKiBBbGxvYyBidWZmZXIgYXJyYXkgZm9yIGNvbW1hbmRzIChUeCBvciBvdGhlciB0eXBlcyBvZiBjb21tYW5kcykuCi0JICogRm9yIHRoZSBjb21tYW5kIHF1ZXVlICgjNCksIGFsbG9jYXRlIGNvbW1hbmQgc3BhY2UgKyBvbmUgYmlnCi0JICogY29tbWFuZCBmb3Igc2Nhbiwgc2luY2Ugc2NhbiBjb21tYW5kIGlzIHZlcnkgaHVnZTsgdGhlIHN5c3RlbSB3aWxsCi0JICogbm90IGhhdmUgdHdvIHNjYW5zIGF0IHRoZSBzYW1lIHRpbWUsIHNvIG9ubHkgb25lIGlzIG5lZWRlZC4KLQkgKiBGb3IgZGF0YSBUeCBxdWV1ZXMgKGFsbCBvdGhlciBxdWV1ZXMpLCBubyBzdXBlci1zaXplIGNvbW1hbmQKLQkgKiBzcGFjZSBpcyBuZWVkZWQuCi0JICovCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBzbG90c19udW07Ci0JaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJbGVuICs9ICBJV0xfTUFYX1NDQU5fU0laRTsKLQl0eHEtPmNtZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgbGVuLCAmdHhxLT5kbWFfYWRkcl9jbWQpOwotCWlmICghdHhxLT5jbWQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogQWxsb2MgZHJpdmVyIGRhdGEgYXJyYXkgYW5kIFRGRCBjaXJjdWxhciBidWZmZXIgKi8KLQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfYWxsb2MocHJpdiwgdHhxLCB0eHFfaWQpOwotCWlmIChyYykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgbGVuLCB0eHEtPmNtZCwgdHhxLT5kbWFfYWRkcl9jbWQpOwotCi0JCXJldHVybiAtRU5PTUVNOwotCX0KLQl0eHEtPm5lZWRfdXBkYXRlID0gMDsKLQotCS8qIFRGRF9RVUVVRV9TSVpFX01BWCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKLQkgKiBpd2xfcXVldWVfaW5jX3dyYXAgYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwotCUJVSUxEX0JVR19PTihURkRfUVVFVUVfU0laRV9NQVggJiAoVEZEX1FVRVVFX1NJWkVfTUFYIC0gMSkpOwotCi0JLyogSW5pdGlhbGl6ZSBxdWV1ZSBoaWdoL2xvdy13YXRlciwgaGVhZC90YWlsIGluZGV4ZXMgKi8KLQlpd2wzOTQ1X3F1ZXVlX2luaXQocHJpdiwgJnR4cS0+cSwgVEZEX1FVRVVFX1NJWkVfTUFYLCBzbG90c19udW0sIHR4cV9pZCk7Ci0KLQkvKiBUZWxsIGRldmljZSB3aGVyZSB0byBmaW5kIHF1ZXVlLCBlbmFibGUgRE1BIGNoYW5uZWwuICovCi0JaXdsMzk0NV9od190eF9xdWV1ZV9pbml0KHByaXYsIHR4cSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUgLSBEZWFsbG9jYXRlIERNQSBxdWV1ZS4KLSAqIEB0eHE6IFRyYW5zbWl0IHF1ZXVlIHRvIGRlYWxsb2NhdGUuCi0gKgotICogRW1wdHkgcXVldWUgYnkgcmVtb3ZpbmcgYW5kIGRlc3Ryb3lpbmcgYWxsIEJEJ3MuCi0gKiBGcmVlIGFsbCBidWZmZXJzLgotICogMC1maWxsLCBidXQgZG8gbm90IGZyZWUgInR4cSIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQgaXdsMzk0NV90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgKnEgPSAmdHhxLT5xOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBsZW47Ci0KLQlpZiAocS0+bl9iZCA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBmaXJzdCwgZW1wdHkgYWxsIEJEJ3MgKi8KLQlmb3IgKDsgcS0+d3JpdGVfcHRyICE9IHEtPnJlYWRfcHRyOwotCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQotCQlpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOwotCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBxLT5uX3dpbmRvdzsKLQlpZiAocS0+aWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCi0JCWxlbiArPSBJV0xfTUFYX1NDQU5fU0laRTsKLQotCS8qIERlLWFsbG9jIGFycmF5IG9mIGNvbW1hbmQvdHggYnVmZmVycyAqLwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwotCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUpICoKLQkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+YmQsIHR4cS0+cS5kbWFfYWRkcik7Ci0KLQkvKiBEZS1hbGxvYyBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhICovCi0Ja2ZyZWUodHhxLT50eGIpOwotCXR4cS0+dHhiID0gTlVMTDsKLQotCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwotCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7Ci19Ci0KLWNvbnN0IHU4IGl3bDM5NDVfYnJvYWRjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CisgLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2wzOTQ1X21vZF9wYXJhbXMgPSB7CisJLm51bV9vZl9xdWV1ZXMgPSBJV0wzOV9NQVhfTlVNX1FVRVVFUywKKwkuc3dfY3J5cHRvID0gMSwKKwkucmVzdGFydF9mdyA9IDEsCisJLyogdGhlIHJlc3QgYXJlIDAgYnkgZGVmYXVsdCAqLworfTsKIAogLyoqKioqKioqKioqKioqKiBTVEFUSU9OIFRBQkxFIE1BTkFHRU1FTlQgKioqKgogICogbWFjODAyMTEgc2hvdWxkIGJlIGV4YW1pbmVkIHRvIGRldGVybWluZSBpZiBzdGFfaW5mbyBpcyBkdXBsaWNhdGluZwpAQCAtMzQ0LDcgKzEwNyw3IEBACiAgKgogICogTk9URTogIFRoaXMgZG9lcyBub3QgcmVtb3ZlIHN0YXRpb24gZnJvbSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlLgogICovCi1zdGF0aWMgdTggaXdsMzk0NV9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQorc3RhdGljIHU4IGl3bDM5NDVfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQogewogCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047CiAJaW50IGk7CkBAIC0zNTUsMTEgKzExOCwxMSBAQAogCWlmIChpc19hcCkKIAkJaW5kZXggPSBJV0xfQVBfSUQ7CiAJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCWluZGV4ID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWluZGV4ID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAllbHNlCi0JCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQkJaWYgKHByaXYtPnN0YXRpb25zW2ldLnVzZWQgJiYKLQkJCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwKKwkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykKKwkJCWlmIChwcml2LT5zdGF0aW9uc18zOVtpXS51c2VkICYmCisJCQkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc18zOVtpXS5zdGEuc3RhLmFkZHIsCiAJCQkJCQlhZGRyKSkgewogCQkJCWluZGV4ID0gaTsKIAkJCQlicmVhazsKQEAgLTM2OCw4ICsxMzEsOCBAQAogCWlmICh1bmxpa2VseShpbmRleCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAocHJpdi0+c3RhdGlvbnNbaW5kZXhdLnVzZWQpIHsKLQkJcHJpdi0+c3RhdGlvbnNbaW5kZXhdLnVzZWQgPSAwOworCWlmIChwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCkgeworCQlwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCA9IDA7CiAJCXByaXYtPm51bV9zdGF0aW9ucy0tOwogCX0KIApAQCAtMzg2LDE0ICsxNDksMTQgQEAKICAqCiAgKiBOT1RFOiAgVGhpcyBkb2VzIG5vdCBjbGVhciBvciBvdGhlcndpc2UgYWx0ZXIgdGhlIGRldmljZSdzIHN0YXRpb24gdGFibGUuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7Ci0JbWVtc2V0KHByaXYtPnN0YXRpb25zLCAwLCBzaXplb2YocHJpdi0+c3RhdGlvbnMpKTsKKwltZW1zZXQocHJpdi0+c3RhdGlvbnNfMzksIDAsIHNpemVvZihwcml2LT5zdGF0aW9uc18zOSkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTQwMSw3ICsxNjQsNyBAQAogLyoqCiAgKiBpd2wzOTQ1X2FkZF9zdGF0aW9uIC0gQWRkIHN0YXRpb24gdG8gc3RhdGlvbiB0YWJsZXMgaW4gZHJpdmVyIGFuZCBkZXZpY2UKICAqLwotdTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwLCB1OCBmbGFncykKIHsKIAlpbnQgaTsKIAlpbnQgaW5kZXggPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtNDEzLDE2ICsxNzYsMTYgQEAKIAlpZiAoaXNfYXApCiAJCWluZGV4ID0gSVdMX0FQX0lEOwogCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlpbmRleCA9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlpbmRleCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJZWxzZQotCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnM7IGkrKykgewotCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLAorCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsgaSsrKSB7CisJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc18zOVtpXS5zdGEuc3RhLmFkZHIsCiAJCQkJCQlhZGRyKSkgewogCQkJCWluZGV4ID0gaTsKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCFwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCisJCQlpZiAoIXByaXYtPnN0YXRpb25zXzM5W2ldLnVzZWQgJiYKIAkJCSAgICBpbmRleCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJCWluZGV4ID0gaTsKIAkJfQpAQCAtNDM0LDE0ICsxOTcsMTQgQEAKIAkJcmV0dXJuIGluZGV4OwogCX0KIAotCWlmIChwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCAmJgotCSAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaW5kZXhdLnN0YS5zdGEuYWRkciwgYWRkcikpIHsKKwlpZiAocHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdLnVzZWQgJiYKKwkgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2luZGV4XS5zdGEuc3RhLmFkZHIsIGFkZHIpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAkJcmV0dXJuIGluZGV4OwogCX0KIAotCUlXTF9ERUJVR19BU1NPQygiQWRkIFNUQSBJRCAlZDogJXBNXG4iLCBpbmRleCwgYWRkcik7Ci0Jc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc1tpbmRleF07CisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBZGQgU1RBIElEICVkOiAlcE1cbiIsIGluZGV4LCBhZGRyKTsKKwlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zXzM5W2luZGV4XTsKIAlzdGF0aW9uLT51c2VkID0gMTsKIAlwcml2LT5udW1fc3RhdGlvbnMrKzsKIApAQCAtNDYwLDUzMSArMjIzLDM1IEBACiAJLyogVHVybiBvbiBib3RoIGFudGVubmFzIGZvciB0aGUgc3RhdGlvbi4uLiAqLwogCXN0YXRpb24tPnN0YS5yYXRlX25fZmxhZ3MgPQogCQkJaXdsMzk0NV9od19zZXRfcmF0ZV9uX2ZsYWdzKHJhdGUsIFJBVEVfTUNTX0FOVF9BQl9NU0spOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPQotCQkJbGUxNl90b19jcHUoc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CiAKIAkvKiBBZGQgc3RhdGlvbiB0byBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCi0JaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZzdGF0aW9uLT5zdGEsIGZsYWdzKTsKKwlpd2xfc2VuZF9hZGRfc3RhKHByaXYsCisJCQkgKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZzdGF0aW9uLT5zdGEsIGZsYWdzKTsKIAlyZXR1cm4gaW5kZXg7CiAKIH0KIAotLyoqKioqKioqKioqKioqKiBEUklWRVIgU1RBVFVTIEZVTkNUSU9OUyAgICoqKioqLwotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3JlYWR5KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JLyogVGhlIGFkYXB0ZXIgaXMgJ3JlYWR5JyBpZiBSRUFEWSBhbmQgR0VPX0NPTkZJR1VSRUQgYml0cyBhcmUKLQkgKiBzZXQgYnV0IEVYSVRfUEVORElORyBpcyBub3QgKi8KLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSAmJgotCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpICYmCi0JICAgICAgICF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19hbGl2ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX0lOSVQsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3Jma2lsbF9zdyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmZraWxsX2h3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZmtpbGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gaXdsMzk0NV9pc19yZmtpbGxfaHcocHJpdikgfHwKLQkJaXdsMzk0NV9pc19yZmtpbGxfc3cocHJpdik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmVhZHlfcmYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaXdsMzk0NV9pc19yZWFkeShwcml2KTsKLX0KLQotLyoqKioqKioqKioqKioqKiBIT1NUIENPTU1BTkQgUVVFVUUgRlVOQ1RJT05TICAgKioqKiovCi0KLSNkZWZpbmUgSVdMX0NNRCh4KSBjYXNlIHg6IHJldHVybiAjeAotCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NtZF9zdHJpbmcodTggY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JCUlXTF9DTUQoUkVQTFlfQUxJVkUpOwotCQlJV0xfQ01EKFJFUExZX0VSUk9SKTsKLQkJSVdMX0NNRChSRVBMWV9SWE9OKTsKLQkJSVdMX0NNRChSRVBMWV9SWE9OX0FTU09DKTsKLQkJSVdMX0NNRChSRVBMWV9RT1NfUEFSQU0pOwotCQlJV0xfQ01EKFJFUExZX1JYT05fVElNSU5HKTsKLQkJSVdMX0NNRChSRVBMWV9BRERfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV9SRU1PVkVfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV9SRU1PVkVfQUxMX1NUQSk7Ci0JCUlXTF9DTUQoUkVQTFlfMzk0NV9SWCk7Ci0JCUlXTF9DTUQoUkVQTFlfVFgpOwotCQlJV0xfQ01EKFJFUExZX1JBVEVfU0NBTEUpOwotCQlJV0xfQ01EKFJFUExZX0xFRFNfQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01EKTsKLQkJSVdMX0NNRChSQURBUl9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX1FVSUVUX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfQ0hBTk5FTF9TV0lUQ0gpOwotCQlJV0xfQ01EKENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01EKTsKLQkJSVdMX0NNRChTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUE9XRVJfVEFCTEVfQ01EKTsKLQkJSVdMX0NNRChQTV9TTEVFUF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFBNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDKTsKLQkJSVdMX0NNRChSRVBMWV9TQ0FOX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfU0NBTl9BQk9SVF9DTUQpOwotCQlJV0xfQ01EKFNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoQkVBQ09OX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfVFhfQkVBQ09OKTsKLQkJSVdMX0NNRChXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChRVUlFVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX1RYX1BXUl9UQUJMRV9DTUQpOwotCQlJV0xfQ01EKE1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9CVF9DT05GSUcpOwotCQlJV0xfQ01EKFJFUExZX1NUQVRJU1RJQ1NfQ01EKTsKLQkJSVdMX0NNRChTVEFUSVNUSUNTX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfQ0FSRF9TVEFURV9DTUQpOwotCQlJV0xfQ01EKENBUkRfU1RBVEVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiVU5LTk9XTiI7Ci0KLQl9Ci19Ci0KLSNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUIChIWiAvIDIpCi0KLS8qKgotICogaXdsMzk0NV9lbnF1ZXVlX2hjbWQgLSBlbnF1ZXVlIGEgdUNvZGUgY29tbWFuZAotICogQHByaXY6IGRldmljZSBwcml2YXRlIGRhdGEgcG9pbnQKLSAqIEBjbWQ6IGEgcG9pbnQgdG8gdGhlIHVjb2RlIGNvbW1hbmQgc3RydWN0dXJlCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgPCAwIHZhbHVlcyB0byBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGlzCi0gKiBmYWlsZWQuIE9uIHN1Y2Nlc3MsIGl0IHR1cm5zIHRoZSBpbmRleCAoPiAwKSBvZiBjb21tYW5kIGluIHRoZQotICogY29tbWFuZCBxdWV1ZS4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQ7Ci0JdTMyICpjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqb3V0X2NtZDsKLQl1MzIgaWR4OwotCXUxNiBmaXhfc2l6ZSA9ICh1MTYpKGNtZC0+bGVuICsgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCWludCBwYWQ7Ci0JdTE2IGNvdW50OwotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIElmIGFueSBvZiB0aGUgY29tbWFuZCBzdHJ1Y3R1cmVzIGVuZCB1cCBiZWluZyBsYXJnZXIgdGhhbgotCSAqIHRoZSBURkRfTUFYX1BBWUxPQURfU0laRSwgYW5kIGl0IHNlbnQgYXMgYSAnc21hbGwnIGNvbW1hbmQgdGhlbgotCSAqIHdlIHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgVEZEIGVudHJpZXMgKi8KLQlCVUdfT04oKGZpeF9zaXplID4gVEZEX01BWF9QQVlMT0FEX1NJWkUpICYmCi0JICAgICAgICEoY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOwotCi0KLQlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpIDwgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7Ci0JCUlXTF9FUlJPUigiTm8gc3BhY2UgZm9yIFR4XG4iKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCi0JdGZkID0gJnR4cS0+YmRbcS0+d3JpdGVfcHRyXTsKLQltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOwotCi0JY29udHJvbF9mbGFncyA9ICh1MzIgKikgdGZkOwotCi0JaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwotCW91dF9jbWQgPSAmdHhxLT5jbWRbaWR4XTsKLQotCW91dF9jbWQtPmhkci5jbWQgPSBjbWQtPmlkOwotCW1lbWNweSgmb3V0X2NtZC0+bWV0YSwgJmNtZC0+bWV0YSwgc2l6ZW9mKGNtZC0+bWV0YSkpOwotCW1lbWNweSgmb3V0X2NtZC0+Y21kLnBheWxvYWQsIGNtZC0+ZGF0YSwgY21kLT5sZW4pOwotCi0JLyogQXQgdGhpcyBwb2ludCwgdGhlIG91dF9jbWQgbm93IGhhcyBhbGwgb2YgdGhlIGluY29taW5nIGNtZAotCSAqIGluZm9ybWF0aW9uICovCi0KLQlvdXRfY21kLT5oZHIuZmxhZ3MgPSAwOwotCW91dF9jbWQtPmhkci5zZXF1ZW5jZSA9IGNwdV90b19sZTE2KFFVRVVFX1RPX1NFUShJV0xfQ01EX1FVRVVFX05VTSkgfAotCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpOwotCWlmIChvdXRfY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKLQkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IGNwdV90b19sZTE2KFNFUV9IVUdFX0ZSQU1FKTsKLQotCXBoeXNfYWRkciA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHR4cS0+Y21kWzBdKSAqIGlkeCArCi0JCQlvZmZzZXRvZihzdHJ1Y3QgaXdsMzk0NV9jbWQsIGhkcik7Ci0JaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGZpeF9zaXplKTsKLQotCXBhZCA9IFUzMl9QQUQoY21kLT5sZW4pOwotCWNvdW50ID0gVEZEX0NUTF9DT1VOVF9HRVQoKmNvbnRyb2xfZmxhZ3MpOwotCSpjb250cm9sX2ZsYWdzID0gVEZEX0NUTF9DT1VOVF9TRVQoY291bnQpIHwgVEZEX0NUTF9QQURfU0VUKHBhZCk7Ci0KLQlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKLQkJICAgICAiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAotCQkgICAgIGdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAotCQkgICAgIG91dF9jbWQtPmhkci5jbWQsIGxlMTZfdG9fY3B1KG91dF9jbWQtPmhkci5zZXF1ZW5jZSksCi0JCSAgICAgZml4X3NpemUsIHEtPndyaXRlX3B0ciwgaWR4LCBJV0xfQ01EX1FVRVVFX05VTSk7Ci0KLQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQotCS8qIEluY3JlbWVudCBhbmQgdXBkYXRlIHF1ZXVlJ3Mgd3JpdGUgaW5kZXggKi8KLQlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyZXQgPSBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQgPyByZXQgOiBpZHg7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCWludCByZXQ7Ci0KLQlCVUdfT04oIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpKTsKLQotCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgZXhwZWN0IGFuIFNLQiB0byBiZSBzZXQuICovCi0JQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQik7Ci0KLQkvKiBBbiBhc3luY2hyb25vdXMgY29tbWFuZCBNVVNUIGhhdmUgYSBjYWxsYmFjay4gKi8KLQlCVUdfT04oIWNtZC0+bWV0YS51LmNhbGxiYWNrKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJldCA9IGl3bDM5NDVfZW5xdWV1ZV9oY21kKHByaXYsIGNtZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBpd2wzOTQ1X2VucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0JaW50IGNtZF9pZHg7Ci0JaW50IHJldDsKLQotCUJVR19PTihjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpOwotCi0JIC8qIEEgc3luY2hyb25vdXMgY29tbWFuZCBjYW4gbm90IGhhdmUgYSBjYWxsYmFjayBzZXQuICovCi0JQlVHX09OKGNtZC0+bWV0YS51LmNhbGxiYWNrICE9IE5VTEwpOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogQWxyZWFkeSBzZW5kaW5nIGEgaG9zdCBjb21tYW5kXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCi0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikKLQkJY21kLT5tZXRhLnNvdXJjZSA9ICZjbWQtPm1ldGE7Ci0KLQljbWRfaWR4ID0gaXdsMzk0NV9lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKLQlpZiAoY21kX2lkeCA8IDApIHsKLQkJcmV0ID0gY21kX2lkeDsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBpd2wzOTQ1X2VucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAotCQkJIXRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyksCi0JCQlIT1NUX0NPTVBMRVRFX1RJTUVPVVQpOwotCWlmICghcmV0KSB7Ci0JCWlmICh0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAotCQkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKEhPU1RfQ09NUExFVEVfVElNRU9VVCkpOwotCi0JCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIGNhbmNlbDsKLQkJfQotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCi0JCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUNBTkNFTEVEOwotCQlnb3RvIGZhaWw7Ci0JfQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCi0JCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGZhaWw7Ci0JfQotCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKLQkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGNhbmNlbDsKLQl9Ci0KLQlyZXQgPSAwOwotCWdvdG8gb3V0OwotCi1jYW5jZWw6Ci0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikgewotCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKnFjbWQ7Ci0KLQkJLyogQ2FuY2VsIHRoZSBDTURfV0FOVF9TS0IgZmxhZyBmb3IgdGhlIGNtZCBpbiB0aGUKLQkJICogVFggY21kIHF1ZXVlLiBPdGhlcndpc2UgaW4gY2FzZSB0aGUgY21kIGNvbWVzCi0JCSAqIGluIGxhdGVyLCBpdCB3aWxsIHBvc3NpYmx5IHNldCBhbiBpbnZhbGlkCi0JCSAqIGFkZHJlc3MgKGNtZC0+bWV0YS5zb3VyY2UpLiAqLwotCQlxY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pZHhdOwotCQlxY21kLT5tZXRhLmZsYWdzICY9IH5DTURfV0FOVF9TS0I7Ci0JfQotZmFpbDoKLQlpZiAoY21kLT5tZXRhLnUuc2tiKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KGNtZC0+bWV0YS51LnNrYik7Ci0JCWNtZC0+bWV0YS51LnNrYiA9IE5VTEw7Ci0JfQotb3V0OgotCWNsZWFyX2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCkKLXsKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKQotCQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9hc3luYyhwcml2LCBjbWQpOwotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCBjbWQpOwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggaWQsIHUxNiBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBpZCwKLQkJLmxlbiA9IGxlbiwKLQkJLmRhdGEgPSBkYXRhLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotfQotCi1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBpd2wzOTQ1X3NlbmRfY21kX3UzMihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBpZCwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IGlkLAotCQkubGVuID0gc2l6ZW9mKHZhbCksCi0JCS5kYXRhID0gJnZhbCwKLQl9OwotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF91MzIocHJpdiwgUkVQTFlfU1RBVElTVElDU19DTUQsIDApOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbCAtIFNldCB0aGUgcGh5bW9kZSBhbmQgY2hhbm5lbCB2YWx1ZXMgaW4gc3RhZ2luZyBSWE9OCi0gKiBAYmFuZDogMi40IG9yIDUgR0h6IGJhbmQKLSAqIEBjaGFubmVsOiBBbnkgY2hhbm5lbCB2YWxpZCBmb3IgdGhlIHJlcXVlc3RlZCBiYW5kCi0KLSAqIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHN0YWdpbmcgUlhPTiwgcHJpdi0+YmFuZCBpcyBhbHNvIHNldC4KLSAqCi0gKiBOT1RFOiAgRG9lcyBub3QgY29tbWl0IHRvIHRoZSBoYXJkd2FyZTsgaXQgc2V0cyBhcHByb3ByaWF0ZSBiaXQgZmllbGRzCi0gKiBpbiB0aGUgc3RhZ2luZyBSWE9OIGZsYWcgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBiYW5kCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkgICAgdTE2IGNoYW5uZWwpCi17Ci0JaWYgKCFpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCkpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvdWxkIG5vdCBzZXQgY2hhbm5lbCB0byAlZCBbJWRdXG4iLAotCQkJICAgICAgIGNoYW5uZWwsIGJhbmQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSA9PSBjaGFubmVsKSAmJgotCSAgICAocHJpdi0+YmFuZCA9PSBiYW5kKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOwotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQotCXByaXYtPmJhbmQgPSBiYW5kOwotCi0JSVdMX0RFQlVHX0lORk8oIlN0YWdpbmcgY2hhbm5lbCBzZXQgdG8gJWQgWyVkXVxuIiwgY2hhbm5lbCwgYmFuZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2NoZWNrX3J4b25fY21kIC0gdmFsaWRhdGUgUlhPTiBzdHJ1Y3R1cmUgaXMgdmFsaWQKLSAqCi0gKiBOT1RFOiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZHVyaW5nIGRldmVsb3BtZW50IGFuZCBjYW4gZXZlbnR1YWxseQotICogYmUgI2lmZGVmJ2Qgb3V0IG9uY2UgdGhlIGRyaXZlciBpcyBzdGFibGUgYW5kIGZvbGtzIGFyZW4ndCBhY3RpdmVseQotICogbWFraW5nIGNoYW5nZXMKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uKQotewotCWludCBlcnJvciA9IDA7Ci0JaW50IGNvdW50ZXIgPSAxOwotCi0JaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYKLQkJCQkoUlhPTl9GTEdfVEdKX05BUlJPV19CQU5EX01TSyB8Ci0JCQkJIFJYT05fRkxHX1JBREFSX0RFVEVDVF9NU0spKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDI0RyBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgfD0gKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID8KLQkJCQkwIDogbGUzMl90b19jcHUoUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgNTIgZmllbGRzICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmIFJYT05fRkxHX0NDS19NU0spOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgNTIgQ0NLICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCX0KLQllcnJvciB8PSAocnhvbi0+bm9kZV9hZGRyWzBdIHwgcnhvbi0+YnNzaWRfYWRkclswXSkgJiAweDE7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgbWFjIGFkZHIgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQkvKiBtYWtlIHN1cmUgYmFzaWMgcmF0ZXMgNk1icHMgYW5kIDFNYnBzIGFyZSBzdXBwb3J0ZWQgKi8KLQllcnJvciB8PSAoKChyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfNk1fTUFTSykgPT0gMCkgJiYKLQkJICAoKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBiYXNpYyByYXRlICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGFzc29jIGlkICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIENDSyBhbmQgc2hvcnQgc2xvdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSkKLQkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLICYgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwKLQkJCVJYT05fRkxHX1RHR19QUk9URUNUX01TSykpID09IFJYT05fRkxHX1RHR19QUk9URUNUX01TSyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgVEdHIGFuZCBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JaWYgKChyeG9uLT5mbGFncyAmIFJYT05fRkxHX0RJU19ESVZfTVNLKSkKLQkJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BTlRfQl9NU0sgfAotCQkJCVJYT05fRkxHX0FOVF9BX01TSykpID09IDApOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGFudGVubmEgJWQgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCi0JaWYgKGVycm9yKSB7Ci0JCUlXTF9FUlJPUigiTm90IGEgdmFsaWQgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCBmaWVsZCB2YWx1ZXNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfZnVsbF9yeG9uX3JlcXVpcmVkIC0gY2hlY2sgaWYgZnVsbCBSWE9OICh2cyBSWE9OX0FTU09DKSBjbWQgaXMgbmVlZGVkCi0gKiBAcHJpdjogc3RhZ2luZ19yeG9uIGlzIGNvbXBhcmVkIHRvIGFjdGl2ZV9yeG9uCi0gKgotICogSWYgdGhlIFJYT04gc3RydWN0dXJlIGlzIGNoYW5naW5nIGVub3VnaCB0byByZXF1aXJlIGEgbmV3IHR1bmUsCi0gKiBvciBpcyBjbGVhcmluZyB0aGUgUlhPTl9GSUxURVJfQVNTT0NfTVNLLCB0aGVuIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQKLSAqIGEgbmV3IHR1bmUgKGZ1bGwgUlhPTiBjb21tYW5kLCByYXRoZXIgdGhhbiBSWE9OX0FTU09DIGNtZCkgaXMgcmVxdWlyZWQuCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQotCS8qIFRoZXNlIGl0ZW1zIGFyZSBvbmx5IHNldHRhYmxlIGZyb20gdGhlIGZ1bGwgUlhPTiBjb21tYW5kICovCi0JaWYgKCEoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLmJzc2lkX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkcikgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ubm9kZV9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLndsYXBfYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi53bGFwX2Jzc2lkX2FkZHIpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgIT0gcHJpdi0+YWN0aXZlX3J4b24uZGV2X3R5cGUpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCAhPSBwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFpcl9wcm9wYWdhdGlvbiAhPQotCSAgICAgcHJpdi0+YWN0aXZlX3J4b24uYWlyX3Byb3BhZ2F0aW9uKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgotCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCi0JICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCi0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQotCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQotCQlyZXR1cm4gMTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQotCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CiAJc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgcnhvbl9hc3NvYzsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1JYT05fQVNTT0MsCiAJCS5sZW4gPSBzaXplb2Yocnhvbl9hc3NvYyksCiAJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAogCQkuZGF0YSA9ICZyeG9uX2Fzc29jLAogCX07Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnJ4b24xID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbjIgPSAmcHJpdi0+YWN0aXZlX3J4b247CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24yID0gJnByaXYtPmFjdGl2ZV9yeG9uOwogCiAJaWYgKChyeG9uMS0+ZmxhZ3MgPT0gcnhvbjItPmZsYWdzKSAmJgogCSAgICAocnhvbjEtPmZpbHRlcl9mbGFncyA9PSByeG9uMi0+ZmlsdGVyX2ZsYWdzKSAmJgogCSAgICAocnhvbjEtPmNja19iYXNpY19yYXRlcyA9PSByeG9uMi0+Y2NrX2Jhc2ljX3JhdGVzKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTk0LDEzICsyNjEsMTMgQEAKIAlyeG9uX2Fzc29jLmNja19iYXNpY19yYXRlcyA9IHByaXYtPnN0YWdpbmdfcnhvbi5jY2tfYmFzaWNfcmF0ZXM7CiAJcnhvbl9hc3NvYy5yZXNlcnZlZCA9IDA7CiAKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOworCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWE9OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhPTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwogCX0KIApAQCAtMTAxMSw2ICsyNzgsNDMgQEAKIH0KIAogLyoqCisgKiBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzIC0gR2V0IGFudGVubmEgZmxhZ3MgZm9yIFJYT04gY29tbWFuZAorICogQHByaXY6IGVlcHJvbSBhbmQgYW50ZW5uYSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGFudGVubmEgZmxhZ3MKKyAqCisgKiBwcml2LT5lZXByb20zOSAgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYW50ZW5uYSBBVVgvTUFJTiBhcmUgcmV2ZXJzZWQKKyAqIGl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hIHNwZWNpZmllcyB0aGUgYW50ZW5uYSBkaXZlcnNpdHkgbW9kZToKKyAqCisgKiBJV0xfQU5URU5OQV9ESVZFUlNJVFkgLSBOSUMgc2VsZWN0cyBiZXN0IGFudGVubmEgYnkgaXRzZWxmCisgKiBJV0xfQU5URU5OQV9NQUlOICAgICAgLSBGb3JjZSBNQUlOIGFudGVubmEKKyAqIElXTF9BTlRFTk5BX0FVWCAgICAgICAtIEZvcmNlIEFVWCBhbnRlbm5hCisgKi8KK19fbGUzMiBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisKKwlzd2l0Y2ggKGl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKSB7CisJY2FzZSBJV0xfQU5URU5OQV9ESVZFUlNJVFk6CisJCXJldHVybiAwOworCisJY2FzZSBJV0xfQU5URU5OQV9NQUlOOgorCQlpZiAoZWVwcm9tLT5hbnRlbm5hX3N3aXRjaF90eXBlKQorCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOworCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7CisKKwljYXNlIElXTF9BTlRFTk5BX0FVWDoKKwkJaWYgKGVlcHJvbS0+YW50ZW5uYV9zd2l0Y2hfdHlwZSkKKwkJCXJldHVybiBSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9BX01TSzsKKwkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOworCX0KKworCS8qIGJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICovCisJSVdMX0VSUihwcml2LCAiQmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKDB4JXgpXG4iLAorCQlpd2wzOTQ1X21vZF9wYXJhbXMuYW50ZW5uYSk7CisKKwlyZXR1cm4gMDsJCS8qICJkaXZlcnNpdHkiIGlzIGRlZmF1bHQgaWYgZXJyb3IgKi8KK30KKworLyoqCiAgKiBpd2wzOTQ1X2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQogICoKICAqIFRoZSBSWE9OIGNvbW1hbmQgaW4gc3RhZ2luZ19yeG9uIGlzIGNvbW1pdHRlZCB0byB0aGUgaGFyZHdhcmUgYW5kCkBAIC0xMDE4LDQxICszMjIsNDQgQEAKICAqIGZ1bmN0aW9uIGNvcnJlY3RseSB0cmFuc2l0aW9ucyBvdXQgb2YgdGhlIFJYT05fQVNTT0NfTVNLIHN0YXRlIGlmCiAgKiBhIEhXIHR1bmUgaXMgcmVxdWlyZWQgYmFzZWQgb24gdGhlIFJYT04gc3RydWN0dXJlIGNoYW5nZXMuCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9jb21taXRfcnhvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBjYXN0IGF3YXkgdGhlIGNvbnN0IGZvciBhY3RpdmVfcnhvbiBpbiB0aGlzIGZ1bmN0aW9uICovCiAJc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKmFjdGl2ZV9yeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247CisJc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnN0YWdpbmdfcnhvbiA9ICh2b2lkICopJnByaXYtPnN0YWdpbmdfcnhvbjsKIAlpbnQgcmMgPSAwOworCWJvb2wgbmV3X2Fzc29jID0KKwkJISEocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSyk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtMTsKIAogCS8qIGFsd2F5cyBnZXQgdGltZXN0YW1wIHdpdGggUnggZnJhbWUgKi8KLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfVFNGMkhPU1RfTVNLOworCXN0YWdpbmdfcnhvbi0+ZmxhZ3MgfD0gUlhPTl9GTEdfVFNGMkhPU1RfTVNLOwogCiAJLyogc2VsZWN0IGFudGVubmEgKi8KLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KKwlzdGFnaW5nX3J4b24tPmZsYWdzICY9CiAJICAgIH4oUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfU0VMX01TSyk7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CisJc3RhZ2luZ19yeG9uLT5mbGFncyB8PSBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzKHByaXYpOwogCi0JcmMgPSBpd2wzOTQ1X2NoZWNrX3J4b25fY21kKCZwcml2LT5zdGFnaW5nX3J4b24pOworCXJjID0gaXdsX2NoZWNrX3J4b25fY21kKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBJZiB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgYSBmdWxsIFJYT04sIHdlIGNhbiB1c2UKIAkgKiBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHdoaWNoIGlzIHVzZWQgdG8gcmVjb25maWd1cmUgZmlsdGVyCiAJICogYW5kIG90aGVyIGZsYWdzIGZvciB0aGUgY3VycmVudCByYWRpbyBjb25maWd1cmF0aW9uLiAqLwotCWlmICghaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQocHJpdikpIHsKKwlpZiAoIWl3bF9mdWxsX3J4b25fcmVxdWlyZWQocHJpdikpIHsKIAkJcmMgPSBpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKIAkJaWYgKHJjKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAiCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgIgogCQkJCSAgImNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCi0JCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOworCQltZW1jcHkoYWN0aXZlX3J4b24sIHN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTEwNjEsMTIgKzM2OCwxNyBAQAogCSAqIGFuIFJYT05fQVNTT0MgYW5kIHRoZSBuZXcgY29uZmlnIHdhbnRzIHRoZSBhc3NvY2lhdGVkIG1hc2sgZW5hYmxlZCwKIAkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAJICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJgotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlRvZ2dsaW5nIGFzc29jaWF0ZWQgYml0IG9uIGN1cnJlbnQgUlhPTlxuIik7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIG5ld19hc3NvYykgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCi0JCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKKwkJLyoKKwkJICogcmVzZXJ2ZWQ0IGFuZCA1IGNvdWxkIGhhdmUgYmVlbiBmaWxsZWQgYnkgdGhlIGl3bGNvcmUgY29kZS4KKwkJICogTGV0J3MgY2xlYXIgdGhlbSBiZWZvcmUgcHVzaGluZyB0byB0aGUgMzk0NS4KKwkJICovCisJCWFjdGl2ZV9yeG9uLT5yZXNlcnZlZDQgPSAwOworCQlhY3RpdmVfcnhvbi0+cmVzZXJ2ZWQ1ID0gMDsKKwkJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kKSwKIAkJCQkgICAgICAmcHJpdi0+YWN0aXZlX3J4b24pOwogCkBAIC0xMDc0LDI5MCArMzg2LDIxMyBAQAogCQkgKiBhY3RpdmVfcnhvbiBiYWNrIHRvIHdoYXQgaXQgd2FzIHByZXZpb3VzbHkgKi8KIAkJaWYgKHJjKSB7CiAJCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJCUlXTF9FUlJPUigiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLIG9uIGN1cnJlbnQgIgorCQkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLIG9uIGN1cnJlbnQgIgogCQkJCSAgImNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJTZW5kaW5nIFJYT05cbiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2VuZGluZyBSWE9OXG4iCiAJCSAgICAgICAiKiB3aXRoJXMgUlhPTl9GSUxURVJfQVNTT0NfTVNLXG4iCiAJCSAgICAgICAiKiBjaGFubmVsID0gJWRcbiIKIAkJICAgICAgICIqIGJzc2lkID0gJXBNXG4iLAotCQkgICAgICAgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYKLQkJCSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gIiIgOiAib3V0IiksCi0JCSAgICAgICBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCksCi0JCSAgICAgICBwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkcik7CisJCSAgICAgICAobmV3X2Fzc29jID8gIiIgOiAib3V0IiksCisJCSAgICAgICBsZTE2X3RvX2NwdShzdGFnaW5nX3J4b24tPmNoYW5uZWwpLAorCQkgICAgICAgc3RhZ2luZ19yeG9uLT5ic3NpZF9hZGRyKTsKKworCS8qCisJICogcmVzZXJ2ZWQ0IGFuZCA1IGNvdWxkIGhhdmUgYmVlbiBmaWxsZWQgYnkgdGhlIGl3bGNvcmUgY29kZS4KKwkgKiBMZXQncyBjbGVhciB0aGVtIGJlZm9yZSBwdXNoaW5nIHRvIHRoZSAzOTQ1LgorCSAqLworCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ0ID0gMDsKKwlzdGFnaW5nX3J4b24tPnJlc2VydmVkNSA9IDA7CisKKwlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pOwogCiAJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kKSwgJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLAorCQkJICAgICAgc3RhZ2luZ19yeG9uKTsKIAlpZiAocmMpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBjb25maWd1cmF0aW9uICglZCkuXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAotCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOworCW1lbWNweShhY3RpdmVfcnhvbiwgc3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAKIAlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCiAJLyogSWYgd2UgaXNzdWUgYSBuZXcgUlhPTiBjb21tYW5kIHdoaWNoIHJlcXVpcmVkIGEgdHVuZSB0aGVuIHdlIG11c3QKIAkgKiBzZW5kIGEgbmV3IFRYUE9XRVIgY29tbWFuZCBvciB3ZSB3b24ndCBiZSBhYmxlIHRvIFR4IGFueSBmcmFtZXMgKi8KLQlyYyA9IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKKwlyYyA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBUeCBwb3dlciAoJWQpLlxuIiwgcmMpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFR4IHBvd2VyICglZCkuXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBBZGQgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNvIHdlIGNhbiBzZW5kIGJyb2FkY2FzdCBmcmFtZXMgKi8KLQlpZiAoaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyLCAwLCAwKSA9PQorCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwLCAwKSA9PQogCSAgICBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIElmIHdlIGhhdmUgc2V0IHRoZSBBU1NPQ19NU0sgYW5kIHdlIGFyZSBpbiBCU1MgbW9kZSB0aGVuCiAJICogYWRkIHRoZSBJV0xfQVBfSUQgdG8gdGhlIHN0YXRpb24gcmF0ZSB0YWJsZSAqLwotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgJiYKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYKIAkgICAgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCi0JCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsIDEsIDApCisJCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsCisJCQkJCTEsIDApCiAJCSAgICA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIGFkZGluZyBBUCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIHRyYW5zbWl0XG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkvKiBJbml0IHRoZSBoYXJkd2FyZSdzIHJhdGUgZmFsbGJhY2sgb3JkZXIgYmFzZWQgb24gdGhlIGJhbmQgKi8KIAlyYyA9IGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgSFcgcmF0ZSB0YWJsZTogJTAyWFxuIiwgcmMpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIEhXIHJhdGUgdGFibGU6ICUwMlhcbiIsIHJjKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X2J0X2NtZCBidF9jbWQgPSB7Ci0JCS5mbGFncyA9IDMsCi0JCS5sZWFkX3RpbWUgPSAweEFBLAotCQkubWF4X2tpbGwgPSAxLAotCQkua2lsbF9hY2tfbWFzayA9IDAsCi0JCS5raWxsX2N0c19tYXNrID0gMCwKLQl9OwotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKLQkJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfYnRfY21kKSwgJmJ0X2NtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfU0NBTl9BQk9SVF9DTUQsCi0JCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAotCX07Ci0KLQkvKiBJZiB0aGVyZSBpc24ndCBhIHNjYW4gYWN0aXZlbHkgZ29pbmcgb24gaW4gdGhlIGhhcmR3YXJlCi0JICogdGhlbiB3ZSBhcmUgaW4gYmV0d2VlbiBzY2FuIGJhbmRzIGFuZCBub3QgYWN0dWFsbHkKLQkgKiBhY3RpdmVseSBzY2FubmluZywgc28gZG9uJ3Qgc2VuZCB0aGUgYWJvcnQgY29tbWFuZCAqLwotCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotCWlmIChyYykgewotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPnUuc3RhdHVzICE9IENBTl9BQk9SVF9TVEFUVVMpIHsKLQkJLyogVGhlIHNjYW4gYWJvcnQgd2lsbCByZXR1cm4gMSBmb3Igc3VjY2VzcyBvcgotCQkgKiAyIGZvciAiZmFpbHVyZSIuICBBIGZhaWx1cmUgY29uZGl0aW9uIGNhbiBiZQotCQkgKiBkdWUgdG8gc2ltcGx5IG5vdCBiZWluZyBpbiBhbiBhY3RpdmUgc2NhbiB3aGljaAotCQkgKiBjYW4gb2NjdXIgaWYgd2Ugc2VuZCB0aGUgc2NhbiBhYm9ydCBiZWZvcmUgd2UKLQkJICogdGhlIG1pY3JvY29kZSBoYXMgbm90aWZpZWQgdXMgdGhhdCBhIHNjYW4gaXMKLQkJICogY29tcGxldGVkLiAqLwotCQlJV0xfREVCVUdfSU5GTygiU0NBTl9BQk9SVCByZXR1cm5lZCAlZC5cbiIsIHJlcy0+dS5zdGF0dXMpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpOwotCX0KLQotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2NhcmRfc3RhdGVfc3luY19jYWxsYmFjayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIENBUkRfU1RBVEVfQ01ECi0gKgotICogVXNlOiBTZXRzIHRoZSBkZXZpY2UncyBpbnRlcm5hbCBjYXJkIHN0YXRlIHRvIGVuYWJsZSwgZGlzYWJsZSwgb3IgaGFsdAotICoKLSAqIFdoZW4gaW4gdGhlICdlbmFibGUnIHN0YXRlIHRoZSBjYXJkIG9wZXJhdGVzIGFzIG5vcm1hbC4KLSAqIFdoZW4gaW4gdGhlICdkaXNhYmxlJyBzdGF0ZSwgdGhlIGNhcmQgZW50ZXJzIGludG8gYSBsb3cgcG93ZXIgbW9kZS4KLSAqIFdoZW4gaW4gdGhlICdoYWx0JyBzdGF0ZSwgdGhlIGNhcmQgaXMgc2h1dCBkb3duIGFuZCBtdXN0IGJlIGZ1bGx5Ci0gKiByZXN0YXJ0ZWQgdG8gY29tZSBiYWNrIG9uLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9jYXJkX3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQotewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCi0JCS5sZW4gPSBzaXplb2YodTMyKSwKLQkJLmRhdGEgPSAmZmxhZ3MsCi0JCS5tZXRhLmZsYWdzID0gbWV0YV9mbGFnLAotCX07Ci0KLQlpZiAobWV0YV9mbGFnICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsMzk0NV9jYXJkX3N0YXRlX3N5bmNfY2FsbGJhY2s7Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZChwcml2LCAmY21kKTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2FkZF9zdGFfc3luY19jYWxsYmFjayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCi0JaWYgKCFza2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9BRERfU1RBLlxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJlcyA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilza2ItPmRhdGE7Ci0JaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCi0JCQkgIHJlcy0+aGRyLmZsYWdzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCS8qIFdlIGRpZG4ndCBjYWNoZSB0aGUgU0tCOyBsZXQgdGhlIGNhbGxlciBmcmVlIGl0ICovCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSBzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzID0gTlVMTDsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfQUREX1NUQSwKLQkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBmbGFncywKLQkJLmRhdGEgPSBzdGEsCi0JfTsKLQotCWlmIChmbGFncyAmIENNRF9BU1lOQykKLQkJY21kLm1ldGEudS5jYWxsYmFjayA9IGl3bDM5NDVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrOwotCWVsc2UKLQkJY21kLm1ldGEuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOwotCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kKHByaXYsICZjbWQpOwotCi0JaWYgKHJjIHx8IChmbGFncyAmIENNRF9BU1lOQykpCi0JCXJldHVybiByYzsKLQotCXJlcyA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKLQlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcmVzLT5oZHIuZmxhZ3MpOwotCQlyYyA9IC1FSU87Ci0JfQotCi0JaWYgKHJjID09IDApIHsKLQkJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQkJY2FzZSBBRERfU1RBX1NVQ0NFU1NfTVNLOgotCQkJSVdMX0RFQlVHX0lORk8oIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmMgPSAtRUlPOwotCQkJSVdMX1dBUk5JTkcoIlJFUExZX0FERF9TVEEgZmFpbGVkXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3VwZGF0ZV9zdGFfa2V5X2luZm8oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfY2NtcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAogCQkJCSAgIHU4IHN0YV9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCV9fbGUxNiBrZXlfZmxhZ3MgPSAwOworCWludCByZXQ7CiAKLQlzd2l0Y2ggKGtleWNvbmYtPmFsZykgewotCWNhc2UgQUxHX0NDTVA6Ci0JCWtleV9mbGFncyB8PSBTVEFfS0VZX0ZMR19DQ01QOwotCQlrZXlfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoCi0JCQkJa2V5Y29uZi0+a2V5aWR4IDw8IFNUQV9LRVlfRkxHX0tFWUlEX1BPUyk7Ci0JCWtleV9mbGFncyAmPSB+U1RBX0tFWV9GTEdfSU5WQUxJRDsKLQkJYnJlYWs7Ci0JY2FzZSBBTEdfVEtJUDoKLQljYXNlIEFMR19XRVA6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWtleV9mbGFncyB8PSAoU1RBX0tFWV9GTEdfQ0NNUCB8IFNUQV9LRVlfRkxHX01BUF9LRVlfTVNLKTsKKwlrZXlfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoa2V5Y29uZi0+a2V5aWR4IDw8IFNUQV9LRVlfRkxHX0tFWUlEX1BPUyk7CisKKwlpZiAoc3RhX2lkID09IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQpCisJCWtleV9mbGFncyB8PSBTVEFfS0VZX01VTFRJQ0FTVF9NU0s7CisKKwlrZXljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKwlrZXlfZmxhZ3MgJj0gflNUQV9LRVlfRkxHX0lOVkFMSUQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXlsZW4gPSBrZXljb25mLT5rZXlsZW47Ci0JbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXksIGtleWNvbmYtPmtleSwKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5rZXlsZW4gPSBrZXljb25mLT5rZXlsZW47CisJbWVtY3B5KHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5rZXksIGtleWNvbmYtPmtleSwKIAkgICAgICAga2V5Y29uZi0+a2V5bGVuKTsKIAotCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5LCBrZXljb25mLT5rZXksCisJbWVtY3B5KHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXksIGtleWNvbmYtPmtleSwKIAkgICAgICAga2V5Y29uZi0+a2V5bGVuKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisKKwlpZiAoKHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgJiBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSykKKwkJCT09IFNUQV9LRVlfRkxHX05PX0VOQykKKwkJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCQkJCSBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHByaXYpOworCS8qIGVsc2UsIHdlIGFyZSBvdmVycmlkaW5nIGFuIGV4aXN0aW5nIGtleSA9PiBubyBuZWVkIHRvIGFsbG9jYXRlZCByb29tCisJKiBpbiB1Q29kZS4gKi8KKworCVdBUk4ocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAorCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOworCisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImh3Y3J5cHRvOiBtb2RpZnkgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7CisKKwlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsCisJCShzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKikmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBtb2RpZnkgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7Ci0JaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBzdGFfaWQpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3RraXBfZHluYW1pY19rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgdTggc3RhX2lkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldF93ZXBfZHluYW1pY19rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgdTggc3RhX2lkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9od19rZXkpKTsKLQltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2tleWluZm8pKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisJbWVtc2V0KCZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9od19rZXkpKTsKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleSwgMCwKKwkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2tleWluZm8pKTsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJod2NyeXB0bzogY2xlYXIgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7Ci0JaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKKwlpd2xfc2VuZF9hZGRfc3RhKHByaXYsCisJCShzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKikmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEsIDApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X2R5bmFtaWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIHU4IHN0YV9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWtleWNvbmYtPmh3X2tleV9pZHggPSBIV19LRVlfRFlOQU1JQzsKKworCXN3aXRjaCAoa2V5Y29uZi0+YWxnKSB7CisJY2FzZSBBTEdfQ0NNUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfY2NtcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1RLSVA6CisJCXJldCA9IGl3bDM5NDVfc2V0X3RraXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXljb25mLCBzdGFfaWQpOworCQlicmVhazsKKwljYXNlIEFMR19XRVA6CisJCXJldCA9IGl3bDM5NDVfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleWNvbmYtPmFsZyk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJSVdMX0RFQlVHX1dFUChwcml2LCAiU2V0IGR5bmFtaWMga2V5OiBhbGc9ICVkIGxlbj0lZCBpZHg9JWQgc3RhPSVkIHJldD0lZFxuIiwKKwkJICAgICAga2V5Y29uZi0+YWxnLCBrZXljb25mLT5rZXlsZW4sIGtleWNvbmYtPmtleWlkeCwKKwkJICAgICAgc3RhX2lkLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3JlbW92ZV9zdGF0aWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3N0YXRpY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKK3sKKwlpZiAoa2V5LT5hbGcgPT0gQUxHX1dFUCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJSVdMX0VSUihwcml2LCAiU3RhdGljIGtleSBpbnZhbGlkOiBhbGcgJWRcbiIsIGtleS0+YWxnKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9mcmVlX2ZyYW1lcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAotCUlXTF9ERUJVR19JTkZPKCIlZCBmcmFtZXMgb24gcHJlLWFsbG9jYXRlZCBoZWFwIG9uIGNsZWFyLlxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCiAJCSAgICAgICBwcml2LT5mcmFtZXNfY291bnQpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKQEAgLTEzNjgsMjAgKzYwMywyMCBAQAogCX0KIAogCWlmIChwcml2LT5mcmFtZXNfY291bnQpIHsKLQkJSVdMX1dBUk5JTkcoIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAorCQlJV0xfV0FSTihwcml2LCAiJWQgZnJhbWVzIHN0aWxsIGluIHVzZS4gIERpZCB3ZSBsb3NlIG9uZT9cbiIsCiAJCQkgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAkJcHJpdi0+ZnJhbWVzX2NvdW50ID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqaXdsMzk0NV9nZXRfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICppd2wzOTQ1X2dldF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWU7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAlpZiAobGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CiAJCWZyYW1lID0ga3phbGxvYyhzaXplb2YoKmZyYW1lKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZnJhbWUpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZnJhbWUhXG4iKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTEzOTQsMTggKzYyOSwxOCBAQAogCXJldHVybiBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lLCBsaXN0KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSkKIHsKIAltZW1zZXQoZnJhbWUsIDAsIHNpemVvZigqZnJhbWUpKTsKIAlsaXN0X2FkZCgmZnJhbWUtPmxpc3QsICZwcml2LT5mcmVlX2ZyYW1lcyk7CiB9CiAKLXVuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCit1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQlpbnQgbGVmdCkKIHsKIAotCWlmICghaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8ICFwcml2LT5pYnNzX2JlYWNvbiB8fAorCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwgIXByaXYtPmlic3NfYmVhY29uIHx8CiAJICAgICgocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKIAkgICAgIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSkpCiAJCXJldHVybiAwOwpAQCAtMTQxOCwzMSArNjUzLDcgQEAKIAlyZXR1cm4gcHJpdi0+aWJzc19iZWFjb24tPmxlbjsKIH0KIAotc3RhdGljIHU4IGl3bDM5NDVfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQl1OCBpOwotCWludCByYXRlX21hc2s7Ci0KLQkvKiBTZXQgcmF0ZSBtYXNrKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfUkFURVNfTUFTSzsKLQllbHNlCi0JCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX09GRE1fUkFURVNfTUFTSzsKLQotCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYOyBpICE9IElXTF9SQVRFX0lOVkFMSUQ7Ci0JICAgICBpID0gaXdsMzk0NV9yYXRlc1tpXS5uZXh0X2llZWUpIHsKLQkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGkpKQotCQkJcmV0dXJuIGl3bDM5NDVfcmF0ZXNbaV0ucGxjcDsKLQl9Ci0KLQkvKiBObyB2YWxpZCByYXRlIHdhcyBmb3VuZC4gQXNzaWduIHRoZSBsb3dlc3Qgb25lICovCi0JaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKLQkJcmV0dXJuIElXTF9SQVRFXzFNX1BMQ1A7Ci0JZWxzZQotCQlyZXR1cm4gSVdMX1JBVEVfNk1fUExDUDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lOwogCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwpAQCAtMTQ1MiwxNiArNjYzLDE2IEBACiAJZnJhbWUgPSBpd2wzOTQ1X2dldF9mcmVlX2ZyYW1lKHByaXYpOwogCiAJaWYgKCFmcmFtZSkgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBvYnRhaW4gZnJlZSBmcmFtZSBidWZmZXIgZm9yIGJlYWNvbiAiCisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBvYnRhaW4gZnJlZSBmcmFtZSBidWZmZXIgZm9yIGJlYWNvbiAiCiAJCQkgICJjb21tYW5kLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJhdGUgPSBpd2wzOTQ1X3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHByaXYpOworCXJhdGUgPSBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3AocHJpdik7CiAKIAlmcmFtZV9zaXplID0gaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChwcml2LCBmcmFtZSwgcmF0ZSk7CiAKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX0JFQUNPTiwgZnJhbWVfc2l6ZSwKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfQkVBQ09OLCBmcmFtZV9zaXplLAogCQkJICAgICAgJmZyYW1lLT51LmNtZFswXSk7CiAKIAlpd2wzOTQ1X2ZyZWVfZnJhbWUocHJpdiwgZnJhbWUpOwpAQCAtMTQ2OSw1NjYgKzY4MCwxNyBAQAogCXJldHVybiByYzsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEVFUFJPTSByZWxhdGVkIGZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGdldF9lZXByb21fbWFjKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4ICptYWMpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Vuc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JbWVtY3B5KG1hYywgcHJpdi0+ZWVwcm9tLm1hY19hZGRyZXNzLCA2KTsKLX0KLQotLyoKLSAqIENsZWFyIHRoZSBPV05FUl9NU0ssIHRvIGVzdGFibGlzaCBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUgcnVubmluZyBvbgotICogZW1iZWRkZWQgY29udHJvbGxlcikgYXMgRUVQUk9NIHJlYWRlcjsgZWFjaCByZWFkIGlzIGEgc2VyaWVzIG9mIHB1bHNlcwotICogdG8vZnJvbSB0aGUgRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdAotICogaWYgdGhleSB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgc29tZSBvd25lcnNoaXAgbWVjaGFuaXNtLiAgSGVyZSwgdGhlIGRyaXZlcgotICogc2ltcGx5IGNsYWltcyBvd25lcnNoaXAsIHdoaWNoIHNob3VsZCBiZSBzYWZlIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKLSAqIChpLmUuIGJlZm9yZSBsb2FkaW5nIHVDb2RlISkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JX2l3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9FRVBST01fR1AsIENTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2VlcHJvbV9pbml0IC0gcmVhZCBFRVBST00gY29udGVudHMKLSAqCi0gKiBMb2FkIHRoZSBFRVBST00gY29udGVudHMgZnJvbSBhZGFwdGVyIGludG8gcHJpdi0+ZWVwcm9tCi0gKgotICogTk9URTogIFRoaXMgcm91dGluZSB1c2VzIHRoZSBub24tZGVidWcgSU8gYWNjZXNzIGZ1bmN0aW9ucy4KLSAqLwotaW50IGl3bDM5NDVfZWVwcm9tX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQl1MTYgKmUgPSAodTE2ICopJnByaXYtPmVlcHJvbTsKLQl1MzIgZ3AgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX0dQKTsKLQlpbnQgc3ogPSBzaXplb2YocHJpdi0+ZWVwcm9tKTsKLQlpbnQgcmV0OwotCXUxNiBhZGRyOwotCi0JLyogVGhlIEVFUFJPTSBzdHJ1Y3R1cmUgaGFzIHNldmVyYWwgcGFkZGluZyBidWZmZXJzIHdpdGhpbiBpdAotCSAqIGFuZCB3aGVuIGFkZGluZyBuZXcgRUVQUk9NIG1hcHMgaXMgc3ViamVjdCB0byBwcm9ncmFtbWVyIGVycm9ycwotCSAqIHdoaWNoIG1heSBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBpZGVudGlmeSB3aXRob3V0IGV4cGxpY2l0bHkKLQkgKiBjaGVja2luZyB0aGUgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGVlcHJvbSBtYXAuICovCi0JQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5lZXByb20pICE9IElXTF9FRVBST01fSU1BR0VfU0laRSk7Ci0KLQlpZiAoKGdwICYgQ1NSX0VFUFJPTV9HUF9WQUxJRF9NU0spID09IENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRSkgewotCQlJV0xfRVJST1IoIkVFUFJPTSBub3QgZm91bmQsIEVFUFJPTV9HUD0weCUwOHhcbiIsIGdwKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogTWFrZSBzdXJlIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSkgaXMgYWxsb3dlZCB0byByZWFkIEVFUFJPTSAqLwotCXJldCA9IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHByaXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQkvKiBlZXByb20gaXMgYW4gYXJyYXkgb2YgMTZiaXQgdmFsdWVzICovCi0JZm9yIChhZGRyID0gMDsgYWRkciA8IHN6OyBhZGRyICs9IHNpemVvZih1MTYpKSB7Ci0JCXUzMiByOwotCi0JCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0VFUFJPTV9SRUcsCi0JCQkJIENTUl9FRVBST01fUkVHX01TS19BRERSICYgKGFkZHIgPDwgMSkpOwotCQlfaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9SRUcsIENTUl9FRVBST01fUkVHX0JJVF9DTUQpOwotCQlyZXQgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkJICAgICAgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCi0JCQkJCSAgICAgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXIgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKLQkJZVthZGRyIC8gMl0gPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpKHIgPj4gMTYpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQpCisJaWYgKHByaXYtPnNoYXJlZF92aXJ0KQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQpLAotCQkJCSAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0LAotCQkJCSAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzKTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llIC0gZmlsbCBpbiB0aGUgc3VwcG9ydGVkIHJhdGUgaW4gSUUgZmllbGQKLSAqCi0gKiByZXR1cm4gOiBzZXQgdGhlIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmF0ZSBpbnNlcnQgaW4gaWUKLSAqLwotc3RhdGljIHUxNiBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHU4ICppZSwgdTE2IHN1cHBvcnRlZF9yYXRlLAotCQkJCSAgICB1MTYgYmFzaWNfcmF0ZSwgaW50ICpsZWZ0KQotewotCXUxNiByZXRfcmF0ZXMgPSAwLCBiaXQ7Ci0JaW50IGk7Ci0JdTggKmNudCA9IGllOwotCXU4ICpyYXRlcyA9IGllICsgMTsKLQotCWZvciAoYml0ID0gMSwgaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrLCBiaXQgPDw9IDEpIHsKLQkJaWYgKGJpdCAmIHN1cHBvcnRlZF9yYXRlKSB7Ci0JCQlyZXRfcmF0ZXMgfD0gYml0OwotCQkJcmF0ZXNbKmNudF0gPSBpd2wzOTQ1X3JhdGVzW2ldLmllZWUgfAotCQkJCSgoYml0ICYgYmFzaWNfcmF0ZSkgPyAweDgwIDogMHgwMCk7Ci0JCQkoKmNudCkrKzsKLQkJCSgqbGVmdCktLTsKLQkJCWlmICgoKmxlZnQgPD0gMCkgfHwKLQkJCSAgICAoKmNudCA+PSBJV0xfU1VQUE9SVEVEX1JBVEVTX0lFX0xFTikpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0X3JhdGVzOwotfQotCi0vKioKLSAqIGl3bDM5NDVfZmlsbF9wcm9iZV9yZXEgLSBmaWxsIGluIGFsbCByZXF1aXJlZCBmaWVsZHMgYW5kIElFIGZvciBwcm9iZSByZXF1ZXN0Ci0gKi8KLXN0YXRpYyB1MTYgaXdsMzk0NV9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKLQkJCSAgICAgIGludCBsZWZ0KQotewotCWludCBsZW4gPSAwOwotCXU4ICpwb3MgPSBOVUxMOwotCXUxNiBhY3RpdmVfcmF0ZXMsIHJldF9yYXRlcywgY2NrX3JhdGVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIHByb2JlIHJlcXVlc3QsCi0JICogdHdvIG1hbmRhdG9yeSBJRXMgYW5kIHRoZSBkYXRhICovCi0JbGVmdCAtPSAyNDsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCWxlbiArPSAyNDsKLQotCWZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KGZyYW1lLT5kYSwgaXdsMzk0NV9icm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShmcmFtZS0+c2EsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGZyYW1lLT5ic3NpZCwgaXdsMzk0NV9icm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwotCWZyYW1lLT5zZXFfY3RybCA9IDA7Ci0KLQkvKiBmaWxsIGluIG91ciBpbmRpcmVjdCBTU0lEIElFICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0JbGVuICs9IDI7Ci0JcG9zID0gJihmcmFtZS0+dS5wcm9iZV9yZXEudmFyaWFibGVbMF0pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gMDsKLQotCS8qIGZpbGwgaW4gc3VwcG9ydGVkIHJhdGUgKi8KLQkvKiAuLi5uZXh0IElFLi4uICovCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiAuLi4gZmlsbCBpdCBpbi4uLiAqLwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcyA9IDA7Ci0KLQlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7Ci0JYWN0aXZlX3JhdGVzID0gcHJpdi0+YWN0aXZlX3JhdGU7Ci0JcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7Ci0KLQljY2tfcmF0ZXMgPSBJV0xfQ0NLX1JBVEVTX01BU0sgJiBhY3RpdmVfcmF0ZXM7Ci0JcmV0X3JhdGVzID0gaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGNja19yYXRlcywKLQkJCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7Ci0JYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7Ci0KLQlyZXRfcmF0ZXMgPSBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAotCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwotCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOwotCi0JbGVuICs9IDIgKyAqcG9zOwotCXBvcyArPSAoKnBvcykgKyAxOwotCWlmIChhY3RpdmVfcmF0ZXMgPT0gMCkKLQkJZ290byBmaWxsX2VuZDsKLQotCS8qIGZpbGwgaW4gc3VwcG9ydGVkIGV4dGVuZGVkIHJhdGUgKi8KLQkvKiAuLi5uZXh0IElFLi4uICovCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0JLyogLi4uIGZpbGwgaXQgaW4uLi4gKi8KLQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkqcG9zID0gMDsKLQlpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAotCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwotCWlmICgqcG9zID4gMCkKLQkJbGVuICs9IDIgKyAqcG9zOwotCi0gZmlsbF9lbmQ6Ci0JcmV0dXJuICh1MTYpbGVuOwotfQotCi0vKgotICogUW9TICBzdXBwb3J0Ci0qLwotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X3Fvc3BhcmFtX2NtZCAqcW9zKQotewotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1FPU19QQVJBTSwKLQkJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kKSwgcW9zKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yZXNldF9xb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQl1MTYgY3dfbWluID0gMTU7Ci0JdTE2IGN3X21heCA9IDEwMjM7Ci0JdTggYWlmcyA9IDI7Ci0JdTggaXNfbGVnYWN5ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKLQotCS8qIFFvUyBhbHdheXMgYWN0aXZlIGluIEFQIGFuZCBBREhPQyBtb2RlCi0JICogSW4gU1RBIG1vZGUgd2FpdCBmb3IgYXNzb2NpYXRpb24KLQkgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMTsKLQllbHNlCi0JCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwotCi0KLQkvKiBjaGVjayBmb3IgbGVnYWN5IG1vZGUgKi8KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIChwcml2LT5hY3RpdmVfcmF0ZSAmIElXTF9PRkRNX1JBVEVTX01BU0spID09IDApIHx8Ci0JICAgIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPT0gMCkpIHsKLQkJY3dfbWluID0gMzE7Ci0JCWlzX2xlZ2FjeSA9IDE7Ci0JfQotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCi0JCWFpZnMgPSAzOwotCi0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmN3X21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmN3X21heCA9IGNwdV90b19sZTE2KGN3X21heCk7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmFpZnNuID0gYWlmczsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uZWRjYV90eG9wID0gMDsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0ucmVzZXJ2ZWQxID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKSB7Ci0JCWkgPSAxOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0gY3B1X3RvX2xlMTYoY3dfbWluKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9IGNwdV90b19sZTE2KGN3X21heCk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDc7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPSAwOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQotCQlpID0gMjsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9Ci0JCQljcHVfdG9fbGUxNigoY3dfbWluICsgMSkgLyAyIC0gMSk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPQotCQkJY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gMjsKLQkJaWYgKGlzX2xlZ2FjeSkKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDYwMTYpOwotCQllbHNlCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNigzMDA4KTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0KLQkJaSA9IDM7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQotCQkJY3B1X3RvX2xlMTYoKGN3X21pbiArIDEpIC8gNCAtIDEpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KLQkJCWNwdV90b19sZTE2KChjd19tYXggKyAxKSAvIDIgLSAxKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gMjsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0JCWlmIChpc19sZWdhY3kpCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNigzMjY0KTsKLQkJZWxzZQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoMTUwNCk7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgewotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9Ci0JCQkJY3B1X3RvX2xlMTYoY3dfbWluKTsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPQotCQkJCWNwdV90b19sZTE2KGN3X21heCk7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSBhaWZzOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9IDA7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQkJfQotCX0KLQlJV0xfREVCVUdfUU9TKCJzZXQgUW9TIHRvIGRlZmF1bHQgXG4iKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggZm9yY2UpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAucXVldWVfcmVxdWVzdCAmJgotCSAgICAhcHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnR4b3BfcmVxdWVzdCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19UWE9QX1RZUEVfTVNLOwotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGZvcmNlIHx8IGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQlJV0xfREVCVUdfUU9TKCJzZW5kIFFvUyBjbWQgd2l0aCBRb1MgYWN0aXZlICVkIFxuIiwKLQkJCSAgICAgIHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpOwotCi0JCWl3bDM5NDVfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQocHJpdiwKLQkJCQkmKHByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybSkpOwotCX0KLX0KLQotLyoKLSAqIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlciEpIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIE1TRUNfVE9fVVNFQyAxMDI0Ci0KLSNkZWZpbmUgTk9TTFAgX19jb25zdGFudF9jcHVfdG9fbGUzMigwKQotI2RlZmluZSBTTFAgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sKLSNkZWZpbmUgU0xQX1RJTUVPVVQoVCkgX19jb25zdGFudF9jcHVfdG9fbGUzMigoVCkgKiBNU0VDX1RPX1VTRUMpCi0jZGVmaW5lIFNMUF9WRUMoWDAsIFgxLCBYMiwgWDMsIFg0KSB7X19jb25zdGFudF9jcHVfdG9fbGUzMihYMCksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDEpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgyKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMyksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDQpfQotCi0KLS8qIGRlZmF1bHQgcG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSB0YWJsZSB2YWx1ZXMgKi8KLS8qIGZvciBUSU0gIDAtMTAgKi8KLXN0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcmFuZ2VfMFtJV0xfUE9XRVJfQUNdID0gewotCXt7Tk9TTFAsIFNMUF9USU1FT1VUKDApLCBTTFBfVElNRU9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDQpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDMwMCksIFNMUF9WRUMoMiwgNCwgNiwgNywgNyl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgxMDApLCBTTFBfVkVDKDIsIDYsIDksIDksIDEwKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCg1MCksIFNMUF9USU1FT1VUKDI1KSwgU0xQX1ZFQygyLCA3LCA5LCA5LCAxMCl9LCAxfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoNCwgNywgMTAsIDEwLCAxMCl9LCAxfQotfTsKLQotLyogZm9yIFRJTSA+IDEwICovCi1zdGF0aWMgc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHJhbmdlXzFbSVdMX1BPV0VSX0FDXSA9IHsKLQl7e05PU0xQLCBTTFBfVElNRU9VVCgwKSwgU0xQX1RJTUVPVVQoMCksIFNMUF9WRUMoMCwgMCwgMCwgMCwgMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoNTAwKSwKLQkJIFNMUF9WRUMoMSwgMiwgMywgNCwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoMzAwKSwKLQkJIFNMUF9WRUMoMiwgNCwgNiwgNywgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgxMDApLAotCQkgU0xQX1ZFQygyLCA2LCA5LCA5LCAweEZGKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCg1MCksIFNMUF9USU1FT1VUKDI1KSwgU0xQX1ZFQygyLCA3LCA5LCA5LCAweEZGKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyNSksIFNMUF9USU1FT1VUKDI1KSwKLQkJIFNMUF9WRUMoNCwgNywgMTAsIDEwLCAweEZGKX0sIDB9Ci19OwotCi1pbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCByYyA9IDAsIGk7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfbWdyICpwb3dfZGF0YTsKLQlpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX0FDOwotCXUxNiBwY2lfcG07Ci0KLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKLQotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKLQotCW1lbXNldChwb3dfZGF0YSwgMCwgc2l6ZW9mKCpwb3dfZGF0YSkpOwotCi0JcG93X2RhdGEtPmFjdGl2ZV9pbmRleCA9IElXTF9QT1dFUl9SQU5HRV8wOwotCXBvd19kYXRhLT5kdGltX3ZhbCA9IDB4ZmZmZjsKLQotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdLCAmcmFuZ2VfMFswXSwgc2l6ZSk7Ci0JbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKLQotCXJjID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0xJTktfQ1RSTCwgJnBjaV9wbSk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiAwOwotCWVsc2UgewotCQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCAqY21kOwotCi0JCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfQUM7IGkrKykgewotCQkJY21kID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFtpXS5jbWQ7Ci0KLQkJCWlmIChwY2lfcG0gJiAweDEpCi0JCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7Ci0JCQllbHNlCi0JCQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfUENJX1BNX01TSzsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV91cGRhdGVfcG93ZXJfY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTMyIG1vZGUpCi17Ci0JaW50IHJjID0gMCwgaTsKLQl1OCBza2lwOwotCXUzMiBtYXhfc2xlZXAgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSAqcmFuZ2U7Ci0JdTggcGVyaW9kID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgKnBvd19kYXRhOwotCi0JaWYgKG1vZGUgPiBJV0xfUE9XRVJfSU5ERVhfNSkgewotCQlJV0xfREVCVUdfUE9XRVIoIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKLQotCWlmIChwb3dfZGF0YS0+YWN0aXZlX2luZGV4ID09IElXTF9QT1dFUl9SQU5HRV8wKQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07Ci0JZWxzZQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMV07Ci0KLQltZW1jcHkoY21kLCAmcmFuZ2VbbW9kZV0uY21kLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQpKTsKLQotI2lmZGVmIElXTF9NQUM4MDIxMV9ESVNBQkxFCi0JaWYgKHByaXYtPmFzc29jX25ldHdvcmsgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCXBlcmlvZCA9IHByaXYtPmFzc29jX25ldHdvcmstPnRpbS50aW1fcGVyaW9kOwotCX0KLSNlbmRpZgkvKklXTF9NQUM4MDIxMV9ESVNBQkxFICovCi0Jc2tpcCA9IHJhbmdlW21vZGVdLm5vX2R0aW07Ci0KLQlpZiAocGVyaW9kID09IDApIHsKLQkJcGVyaW9kID0gMTsKLQkJc2tpcCA9IDA7Ci0JfQotCi0JaWYgKHNraXAgPT0gMCkgewotCQltYXhfc2xlZXAgPSBwZXJpb2Q7Ci0JCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLOwotCX0gZWxzZSB7Ci0JCV9fbGUzMiBzbHBfaXRydmwgPSBjbWQtPnNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRSAtIDFdOwotCQltYXhfc2xlZXAgPSAobGUzMl90b19jcHUoc2xwX2l0cnZsKSAvIHBlcmlvZCkgKiBwZXJpb2Q7Ci0JCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9WRUNfU0laRTsgaSsrKSB7Ci0JCWlmIChsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW2ldKSA+IG1heF9zbGVlcCkKLQkJCWNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0gPSBjcHVfdG9fbGUzMihtYXhfc2xlZXApOwotCX0KLQotCUlXTF9ERUJVR19QT1dFUigiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwotCUlXTF9ERUJVR19QT1dFUigiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiU2xlZXAgaW50ZXJ2YWwgdmVjdG9yID0geyAlZCAsICVkICwgJWQgLCAlZCAsICVkIH1cbiIsCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzBdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMV0pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsyXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzNdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbNF0pKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgbW9kZSkKLXsKLQl1MzIgdW5pbml0aWFsaXplZF92YXIoZmluYWxfbW9kZSk7Ci0JaW50IHJjOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIGNtZDsKLQotCS8qIElmIG9uIGJhdHRlcnksIHNldCB0byAzLAotCSAqIGlmIHBsdWdnZWQgaW50byBBQyBwb3dlciwgc2V0IHRvIENBTSAoImNvbnRpbnVvdXNseSBhd2FyZSBtb2RlIiksCi0JICogZWxzZSB1c2VyIGxldmVsICovCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKLQkJZmluYWxfbW9kZSA9IElXTF9QT1dFUl9JTkRFWF8zOwotCQlicmVhazsKLQljYXNlIElXTF9QT1dFUl9BQzoKLQkJZmluYWxfbW9kZSA9IElXTF9QT1dFUl9NT0RFX0NBTTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZmluYWxfbW9kZSA9IG1vZGU7Ci0JCWJyZWFrOwotCX0KLQotCWl3bDM5NDVfdXBkYXRlX3Bvd2VyX2NtZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKLQotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUE9XRVJfVEFCTEVfQ01ELCBzaXplb2YoY21kKSwgJmNtZCk7Ci0KLQlpZiAoZmluYWxfbW9kZSA9PSBJV0xfUE9XRVJfTU9ERV9DQU0pCi0JCWNsZWFyX2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQllbHNlCi0JCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zY2FuX2NhbmNlbCAtIENhbmNlbCBhbnkgY3VycmVudGx5IGV4ZWN1dGluZyBIVyBzY2FuCi0gKgotICogTk9URTogcHJpdi0+bXV0ZXggaXMgbm90IHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NjYW5fY2FuY2VsKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiUXVldWluZyBzY2FuIGFib3J0LlxuIik7Ci0JCQlzZXRfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7Ci0KLQkJfSBlbHNlCi0JCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7Ci0KLQkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0IC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KLSAqIEBtczogYW1vdW50IG9mIHRpbWUgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igc2NhbiB0byBhYm9ydAotICoKLSAqIE5PVEU6IHByaXYtPm11dGV4IG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgbXMpCi17Ci0JdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSBpd2wzOTQ1X3NjYW5fY2FuY2VsKHByaXYpOwotCWlmIChyZXQgJiYgbXMpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JCXdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBub3cgKyBtc2Vjc190b19qaWZmaWVzKG1zKSkgJiYKLQkJCQl0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQkJbXNsZWVwKDEpOwotCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwkJCQkgICAgcHJpdi0+c2hhcmVkX3ZpcnQsCisJCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIH0KIAogI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEwMjQKLSNkZWZpbmUgSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweEEpCisjZGVmaW5lIElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMCWNwdV90b19sZTE2KDB4QSkKIAogc3RhdGljIF9fbGUxNiBpd2wzOTQ1X2FkanVzdF9iZWFjb25faW50ZXJ2YWwodTE2IGJlYWNvbl92YWwpCiB7CkBAIC0yMDQzLDcgKzcwNSw3IEBACiAJcmV0dXJuIGNwdV90b19sZTE2KG5ld192YWwpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1NjQgaW50ZXJ2YWxfdG1fdW5pdDsKIAl1NjQgdHNmLCByZXN1bHQ7CkBAIC0yMDU0LDEzICs3MTYsMTAgQEAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wLmR3WzFdID0gY3B1X3RvX2xlMzIocHJpdi0+dGltZXN0YW1wMSk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wLmR3WzBdID0gY3B1X3RvX2xlMzIocHJpdi0+dGltZXN0YW1wMCk7Ci0KKwlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NChwcml2LT50aW1lc3RhbXApOwogCXByaXYtPnJ4b25fdGltaW5nLmxpc3Rlbl9pbnRlcnZhbCA9IElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMOwogCi0JdHNmID0gcHJpdi0+dGltZXN0YW1wMTsKLQl0c2YgPSAoKHRzZiA8PCAzMikgfCBwcml2LT50aW1lc3RhbXAwKTsKKwl0c2YgPSBwcml2LT50aW1lc3RhbXA7CiAKIAliZWFjb25faW50ID0gcHJpdi0+YmVhY29uX2ludDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0yMDkyLDE4MyArNzUxLDQxIEBACiAJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsID0KIAkgICAgY3B1X3RvX2xlMzIoKHUzMikgKCh1NjQpIGludGVydmFsX3RtX3VuaXQgLSByZXN1bHQpKTsKIAotCUlXTF9ERUJVR19BU1NPQwotCSAgICAoImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwKKwkJImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKIAkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSwKIAkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKIAkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vdCByZWFkeS5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgIgotCQkJICAgICAgICJRdWV1aW5nLlxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJTdGFydGluZyBzY2FuLi4uXG4iKTsKLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0cpCi0JCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7Ci0Jc2V0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCXByaXYtPnNjYW5fc3RhcnQgPSBqaWZmaWVzOwotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IHByaXYtPnNjYW5fc3RhcnQ7Ci0KLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQotewotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKLQotCWlmIChod19kZWNyeXB0KQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKLQllbHNlCi0JCXJ4b24tPmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KLQkJICAgIH4oUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLCi0JCSAgICAgIHwgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQl9IGVsc2UgewotCQkvKiBDb3BpZWQgZnJvbSBpd2wzOTQ1X2JnX3Bvc3RfYXNzb2NpYXRlKCkgKi8KLQkJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCQllbHNlCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7Ci0JfQotfQotCi0vKgotICogaW5pdGlhbGl6ZSByeG9uIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgdmFsdWVzIGZyb20gZWVwcm9tCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgICAgICBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87Ci0KLQltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9BUDsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyB8Ci0JCQkJCQkgIFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9TTklGRkVSOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgfAotCQkgICAgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLIHwgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiVW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGUgJWRcbiIsIG1vZGUpOwotCQlicmVhazsKLQl9Ci0KLSNpZiAwCi0JLyogVE9ETzogIEZpZ3VyZSBvdXQgd2hlbiBzaG9ydF9wcmVhbWJsZSB3b3VsZCBiZSBzZXQgYW5kIGNhY2hlIGZyb20KLQkgKiB0aGF0ICovCi0JaWYgKCFod190b19sb2NhbChwcml2LT5odyktPnNob3J0X3ByZWFtYmxlKQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQllbHNlCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0jZW5kaWYKLQotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKLQkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwotCi0JaWYgKCFjaF9pbmZvKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCS8qCi0JICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUwotCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAotCSAqLwotCWlmICgobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7Ci0JaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pKQotCQlwcml2LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKLQllbHNlCi0JCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCi0JaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgcHJpdi0+YmFuZCk7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfT0ZETV9SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkgICAgKElXTF9DQ0tfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfQ0NLX1JBVEUpICYgMHhGOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2V0X21vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IG1vZGUpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSkKIHsKIAlpZiAobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCi0JCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCiAJCQlwcml2LT5iYW5kLAogCQkJbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKTsKIAogCQlpZiAoIWNoX2luZm8gfHwgIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgewotCQkJSVdMX0VSUk9SKCJjaGFubmVsICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCisJCQlJV0xfRVJSKHByaXYsICJjaGFubmVsICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCiAJCQkJICBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpd2wzOTQ1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7Ci0JbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7CiAKIAlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCiAJLyogZG9uJ3QgY29tbWl0IHJ4b24gaWYgcmYta2lsbCBpcyBvbiovCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKQorCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQlJV0xfV0FSTklORygiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgeworCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0yMjc3LDQ5ICs3OTQsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCisJCQkJICAgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCi0JCQkJICAgICAgaW50IGxhc3RfZnJhZykKKwkJCQkgICAgICBpbnQgc3RhX2lkKQogeworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAlzdHJ1Y3QgaXdsMzk0NV9od19rZXkgKmtleWluZm8gPQotCSAgICAmcHJpdi0+c3RhdGlvbnNbaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHhdLmtleWluZm87CisJICAgICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm87CiAKIAlzd2l0Y2ggKGtleWluZm8tPmFsZykgewogCWNhc2UgQUxHX0NDTVA6Ci0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX0NDTTsKLQkJbWVtY3B5KGNtZC0+Y21kLnR4LmtleSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOwotCQlJV0xfREVCVUdfVFgoInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CisJCXR4LT5zZWNfY3RsID0gVFhfQ01EX1NFQ19DQ007CisJCW1lbWNweSh0eC0+a2V5LCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggQUVTIGh3Y3J5cHRvXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFMR19US0lQOgotI2lmIDAKLQkJY21kLT5jbWQudHguc2VjX2N0bCA9IFRYX0NNRF9TRUNfVEtJUDsKLQotCQlpZiAobGFzdF9mcmFnKQotCQkJbWVtY3B5KGNtZC0+Y21kLnR4LnRraXBfbWljLmJ5dGUsIHNrYl9mcmFnLT50YWlsIC0gOCwKLQkJCSAgICAgICA4KTsKLQkJZWxzZQotCQkJbWVtc2V0KGNtZC0+Y21kLnR4LnRraXBfbWljLmJ5dGUsIDAsIDgpOwotI2VuZGlmCiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfV0VQOgotCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19XRVAgfAorCQl0eC0+c2VjX2N0bCA9IFRYX0NNRF9TRUNfV0VQIHwKIAkJICAgIChpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeCAmIFRYX0NNRF9TRUNfTVNLKSA8PCBUWF9DTURfU0VDX1NISUZUOwogCiAJCWlmIChrZXlpbmZvLT5rZXlsZW4gPT0gMTMpCi0JCQljbWQtPmNtZC50eC5zZWNfY3RsIHw9IFRYX0NNRF9TRUNfS0VZMTI4OworCQkJdHgtPnNlY19jdGwgfD0gVFhfQ01EX1NFQ19LRVkxMjg7CiAKLQkJbWVtY3B5KCZjbWQtPmNtZC50eC5rZXlbM10sIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKKwkJbWVtY3B5KCZ0eC0+a2V5WzNdLCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CiAKLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKIAkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWluZm8tPmFsZyk7CisJCUlXTF9FUlIocHJpdiwgIlVua25vd24gZW5jb2RlIGFsZyAlZFxuIiwga2V5aW5mby0+YWxnKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjMyNywxNyArODM2LDE3IEBACiAvKgogICogaGFuZGxlIGJ1aWxkIFJFUExZX1RYIGNvbW1hbmQgbm90aWZpY2F0aW9uLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKLQkJCQkgIGludCBpc191bmljYXN0LCB1OCBzdGRfaWQpCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCBzdGRfaWQpCiB7CisJc3RydWN0IGl3bDM5NDVfdHhfY21kICp0eCA9IChzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKiljbWQtPmNtZC5wYXlsb2FkOworCV9fbGUzMiB0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JX19sZTMyIHR4X2ZsYWdzID0gY21kLT5jbWQudHgudHhfZmxhZ3M7CiAJdTggcmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOwogCi0JY21kLT5jbWQudHguc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CisJdHgtPnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwogCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLX01TSzsKIAkJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKQEAgLTIzNTAsMTMgKzg1OSwxMyBAQAogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwogCX0KIAotCWNtZC0+Y21kLnR4LnN0YV9pZCA9IHN0ZF9pZDsKKwl0eC0+c3RhX2lkID0gc3RkX2lkOwogCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykpCiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfTU9SRV9GUkFHX01TSzsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCXU4ICpxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQljbWQtPmNtZC50eC50aWRfdHNwZWMgPSBxY1swXSAmIDB4ZjsKKwkJdHgtPnRpZF90c3BlYyA9IHFjWzBdICYgMHhmOwogCQl0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKIAl9IGVsc2UgewogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwpAQCAtMjM3NiwyNSArODg1LDI1IEBACiAJdHhfZmxhZ3MgJj0gfihUWF9DTURfRkxHX0FOVF9TRUxfTVNLKTsKIAlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7CiAJCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSB8fCBpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQotCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMyk7CisJCQl0eC0+dGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMyk7CiAJCWVsc2UKLQkJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOworCQkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOwogCX0gZWxzZSB7Ci0JCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCQl0eC0+dGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gMDsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlMTZfdG9fY3B1KGNtZC0+Y21kLnR4Lmxlbik7CiAjZW5kaWYKIAl9CiAKLQljbWQtPmNtZC50eC5kcml2ZXJfdHhvcCA9IDA7Ci0JY21kLT5jbWQudHgudHhfZmxhZ3MgPSB0eF9mbGFnczsKLQljbWQtPmNtZC50eC5uZXh0X2ZyYW1lX2xlbiA9IDA7CisJdHgtPmRyaXZlcl90eG9wID0gMDsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKKwl0eC0+bmV4dF9mcmFtZV9sZW4gPSAwOwogfQogCiAvKioKICAqIGl3bDM5NDVfZ2V0X3N0YV9pZCAtIEZpbmQgc3RhdGlvbidzIGluZGV4IHdpdGhpbiBzdGF0aW9uIHRhYmxlCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9nZXRfc3RhX2lkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCitzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJaW50IHN0YV9pZDsKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwpAQCAtMjQwMiw3ICs5MTEsNyBAQAogCS8qIElmIHRoaXMgZnJhbWUgaXMgYnJvYWRjYXN0IG9yIG1hbmFnZW1lbnQsIHVzZSBicm9hZGNhc3Qgc3RhdGlvbiBpZCAqLwogCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB8fAogCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCXN3aXRjaCAocHJpdi0+aXdfbW9kZSkgewogCkBAIC0yNDE2LDcgKzkyNSw3IEBACiAJCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQlyZXR1cm4gc3RhX2lkOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJLyogSWYgdGhpcyBmcmFtZSBpcyBnb2luZyBvdXQgdG8gYW4gSUJTUyBuZXR3b3JrLCBmaW5kIHRoZSBzdGF0aW9uLAogCSAqIG9yIGNyZWF0ZSBhIG5ldyBzdGF0aW9uIHRhYmxlIGVudHJ5ICovCkBAIC0yNDMxLDM4ICs5NDAsMzggQEAKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJcmV0dXJuIHN0YV9pZDsKIAotCQlJV0xfREVCVUdfRFJPUCgiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJTdGF0aW9uICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuICIKIAkJCSAgICAgICAiRGVmYXVsdGluZyB0byBicm9hZGNhc3QuLi5cbiIsCiAJCQkgICAgICAgaGRyLT5hZGRyMSk7Ci0JCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9EUk9QLCAodTggKikgaGRyLCBzaXplb2YoKmhkcikpOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl9CiAJLyogSWYgd2UgYXJlIGluIG1vbml0b3IgbW9kZSwgdXNlIEJDQVNULiBUaGlzIGlzIHJlcXVpcmVkIGZvcgogCSAqIHBhY2tldCBpbmplY3Rpb24uICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLCBwcml2LT5pd19tb2RlKTsKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlJV0xfV0FSTihwcml2LCAiVW5rbm93biBtb2RlIG9mIG9wZXJhdGlvbjogJWRcbiIsCisJCQlwcml2LT5pd19tb2RlKTsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJfQogfQogCiAvKgogICogc3RhcnQgUkVQTFlfVFggY29tbWFuZCBwcm9jZXNzCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9za2Ioc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgaXdsMzk0NV90eF9za2Ioc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZSAqdGZkOwotCXUzMiAqY29udHJvbF9mbGFnczsKLQlpbnQgdHhxX2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9IE5VTEw7Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgKnEgPSBOVUxMOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHg7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZCA9IE5VTEw7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJZG1hX2FkZHJfdCB0eGNtZF9waHlzOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqb3V0X2NtZCA9IE5VTEw7CisJaW50IHR4cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXUxNiBsZW4sIGlkeCwgbGVuX29yZywgaGRyX2xlbjsKIAl1OCBpZDsKIAl1OCB1bmljYXN0OwpAQCAtMjQ3NiwxMyArOTg1LDEzIEBACiAJaW50IHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJaWYgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZSAmIDB4RkYpID09IElXTF9JTlZBTElEX1JBVEUpIHsKLQkJSVdMX0VSUk9SKCJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCkBAIC0yNDkxLDIxICsxMDAwLDIxIEBACiAKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBVVRIIGZyYW1lXG4iKTsKIAllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKIAllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKICNlbmRpZgogCiAJLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmCiAJICAgIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpICYmIC8qIHBhY2tldCBpbmplY3Rpb24gKi8KLQkgICAgKCFpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKKwkgICAgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fAogCSAgICAgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmICFwcml2LT5hc3NvY19pZCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFpd2wzOTQ1X2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtMjUxNiwyMSArMTAyNSwyMSBAQAogCS8qIEZpbmQgKG9yIGNyZWF0ZSkgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCiAJc3RhX2lkID0gaXdsMzk0NV9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJZ290byBkcm9wOwogCX0KIAotCUlXTF9ERUJVR19SQVRFKCJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOwogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKLQkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCisJCXNlcV9udW1iZXIgPSBwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgJgogCQkJCUlFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpIHwKIAkJCShoZHItPnNlcV9jdHJsICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpKTsKKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSk7CiAJCXNlcV9udW1iZXIgKz0gMHgxMDsKIAl9CiAKQEAgLTI1NDAsMjAgKzEwNDksMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQkvKiBTZXQgdXAgZmlyc3QgZW1wdHkgVEZEIHdpdGhpbiB0aGlzIHF1ZXVlJ3MgY2lyY3VsYXIgVEZEIGJ1ZmZlciAqLwotCXRmZCA9ICZ0eHEtPmJkW3EtPndyaXRlX3B0cl07Ci0JbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7CiAJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIDApOwogCiAJLyogU2V0IHVwIGRyaXZlciBkYXRhIGZvciB0aGlzIFRGRCAqLwotCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhfaW5mbykpOworCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bF90eF9pbmZvKSk7CiAJdHhxLT50eGJbcS0+d3JpdGVfcHRyXS5za2JbMF0gPSBza2I7CiAKIAkvKiBJbml0IGZpcnN0IGVtcHR5IGVudHJ5IGluIHF1ZXVlJ3MgYXJyYXkgb2YgVHgvY21kIGJ1ZmZlcnMgKi8KLQlvdXRfY21kID0gJnR4cS0+Y21kW2lkeF07CisJb3V0X2NtZCA9IHR4cS0+Y21kW2lkeF07CisJdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopb3V0X2NtZC0+Y21kLnBheWxvYWQ7CiAJbWVtc2V0KCZvdXRfY21kLT5oZHIsIDAsIHNpemVvZihvdXRfY21kLT5oZHIpKTsKLQltZW1zZXQoJm91dF9jbWQtPmNtZC50eCwgMCwgc2l6ZW9mKG91dF9jbWQtPmNtZC50eCkpOworCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwogCiAJLyoKIAkgKiBTZXQgdXAgdGhlIFR4LWNvbW1hbmQgKG5vdCBNQUMhKSBoZWFkZXIuCkBAIC0yNTY2LDcgKzEwNzIsNyBAQAogCQkJCUlOREVYX1RPX1NFUShxLT53cml0ZV9wdHIpKSk7CiAKIAkvKiBDb3B5IE1BQyBoZWFkZXIgZnJvbSBza2IgaW50byBjb21tYW5kIGJ1ZmZlciAqLwotCW1lbWNweShvdXRfY21kLT5jbWQudHguaGRyLCBoZHIsIGhkcl9sZW4pOworCW1lbWNweSh0eC0+aGRyLCBoZHIsIGhkcl9sZW4pOwogCiAJLyoKIAkgKiBVc2UgdGhlIGZpcnN0IGVtcHR5IGVudHJ5IGluIHRoaXMgcXVldWUncyBjb21tYW5kIGJ1ZmZlciBhcnJheQpAQCAtMjU3Nyw4ICsxMDgzLDggQEAKIAkgKiBvZiB0aGUgTUFDIGhlYWRlciAoZGV2aWNlIHJlYWRzIG9uIGR3b3JkIGJvdW5kYXJpZXMpLgogCSAqIFdlJ2xsIHRlbGwgZGV2aWNlIGFib3V0IHRoaXMgcGFkZGluZyBsYXRlci4KIAkgKi8KLQlsZW4gPSBwcml2LT5od19zZXR0aW5nLnR4X2NtZF9sZW4gKwotCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX2hlYWRlcikgKyBoZHJfbGVuOworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9jbWQpICsKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKIAogCWxlbl9vcmcgPSBsZW47CiAJbGVuID0gKGxlbiArIDMpICYgfjM7CkBAIC0yNTkwLDE1ICsxMDk2LDIyIEBACiAKIAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgVHggY29tbWFuZCdzIGhlYWRlciAobm90IE1BQyBoZWFkZXIhKSwKIAkgKiB3aXRoaW4gY29tbWFuZCBidWZmZXIgYXJyYXkuICovCi0JdHhjbWRfcGh5cyA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBpZHggKwotCQkgICAgIG9mZnNldG9mKHN0cnVjdCBpd2wzOTQ1X2NtZCwgaGRyKTsKKwl0eGNtZF9waHlzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKKwkJCQkgICAgb3V0X2NtZCwgc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSwKKwkJCQkgICAgUENJX0RNQV9UT0RFVklDRSk7CisJcGNpX3VubWFwX2FkZHJfc2V0KCZvdXRfY21kLT5tZXRhLCBtYXBwaW5nLCB0eGNtZF9waHlzKTsKKwlwY2lfdW5tYXBfbGVuX3NldCgmb3V0X2NtZC0+bWV0YSwgbGVuLCBzaXplb2Yoc3RydWN0IGl3bF9jbWQpKTsKKwkvKiBBZGQgYnVmZmVyIGNvbnRhaW5pbmcgVHggY29tbWFuZCBhbmQgTUFDKCEpIGhlYWRlciB0byBURkQncworCSAqIGZpcnN0IGVudHJ5ICovCisJdHhjbWRfcGh5cyArPSBvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKIAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KLQlpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHR4Y21kX3BoeXMsIGxlbik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCSAgIHR4Y21kX3BoeXMsIGxlbiwgMSwgMCk7CiAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCi0JCWl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHByaXYsIGluZm8sIG91dF9jbWQsIHNrYiwgMCk7CisJCWl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHByaXYsIGluZm8sIG91dF9jbWQsIHNrYiwgc3RhX2lkKTsKIAogCS8qIFNldCB1cCBURkQncyAybmQgZW50cnkgdG8gcG9pbnQgZGlyZWN0bHkgdG8gcmVtYWluZGVyIG9mIHNrYiwKIAkgKiBpZiBhbnkgKDgwMi4xMSBudWxsIGZyYW1lcyBoYXZlIG5vIHBheWxvYWQpLiAqLwpAQCAtMjYwNiw2NCArMTExOSw1NiBAQAogCWlmIChsZW4pIHsKIAkJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2Rldiwgc2tiLT5kYXRhICsgaGRyX2xlbiwKIAkJCQkJICAgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGxlbik7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkJICAgcGh5c19hZGRyLCBsZW4sCisJCQkJCQkJICAgMCwgVTMyX1BBRChsZW4pKTsKIAl9CiAKLQlpZiAoIWxlbikKLQkJLyogSWYgdGhlcmUgaXMgbm8gcGF5bG9hZCwgdGhlbiB3ZSB1c2Ugb25seSBvbmUgVHggYnVmZmVyICovCi0JCSpjb250cm9sX2ZsYWdzID0gVEZEX0NUTF9DT1VOVF9TRVQoMSk7Ci0JZWxzZQotCQkvKiBFbHNlIHVzZSAyIGJ1ZmZlcnMuCi0JCSAqIFRlbGwgMzk0NSBhYm91dCBhbnkgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCi0JCSpjb250cm9sX2ZsYWdzID0gVEZEX0NUTF9DT1VOVF9TRVQoMikgfAotCQkJVEZEX0NUTF9QQURfU0VUKFUzMl9QQUQobGVuKSk7Ci0KIAkvKiBUb3RhbCAjIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovCiAJbGVuID0gKHUxNilza2ItPmxlbjsKLQlvdXRfY21kLT5jbWQudHgubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwl0eC0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKIAogCS8qIFRPRE8gbmVlZCB0aGlzIGZvciBidXJzdCBtb2RlIGxhdGVyIG9uICovCi0JaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMocHJpdiwgb3V0X2NtZCwgaW5mbywgaGRyLCB1bmljYXN0LCBzdGFfaWQpOworCWl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgc3RhX2lkKTsKIAogCS8qIHNldCBpc19oY2NhIHRvIDA7IGl0IHByb2JhYmx5IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQgKi8KIAlpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgc3RhX2lkLCAwKTsKIAotCW91dF9jbWQtPmNtZC50eC50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQV9NU0s7Ci0Jb3V0X2NtZC0+Y21kLnR4LnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9CX01TSzsKKwl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0FfTVNLOworCXR4LT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQl9NU0s7CiAKIAlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCWlmIChxYykKLQkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CisJCQlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOwogCX0gZWxzZSB7CiAJCXdhaXRfd3JpdGVfcHRyID0gMTsKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDA7CiAJfQogCi0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsIG91dF9jbWQtPmNtZC5wYXlsb2FkLAotCQkJICAgc2l6ZW9mKG91dF9jbWQtPmNtZC50eCkpOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfVFgsIHR4LCBzaXplb2YoKnR4KSk7CiAKLQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9UWCwgKHU4ICopb3V0X2NtZC0+Y21kLnR4LmhkciwKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1RYLCAodTggKil0eC0+aGRyLAogCQkJICAgaWVlZTgwMjExX2hkcmxlbihmYykpOwogCiAJLyogVGVsbCBkZXZpY2UgdGhlIHdyaXRlIGluZGV4ICpqdXN0IHBhc3QqIHRoaXMgbGF0ZXN0IGZpbGxlZCBURkQgKi8KIAlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCXJjID0gaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoKGl3bDM5NDVfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCisJaWYgKChpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCiAJICAgICYmIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKIAkJaWYgKHdhaXRfd3JpdGVfcHRyKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7Ci0JCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwkJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQl9CiAKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwkJaXdsX3N0b3BfcXVldWUocHJpdiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjY3NCwxNDIgKzExNzksNiBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGk7Ci0KLQlzYmFuZCA9IGl3bDM5NDVfZ2V0X2JhbmQocHJpdiwgcHJpdi0+YmFuZCk7Ci0JaWYgKCFzYmFuZCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBzZXQgcmF0ZTogdW5hYmxlIHRvIGdldCBodyBtb2RlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPmFjdGl2ZV9yYXRlID0gMDsKLQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IDA7Ci0KLQlJV0xfREVCVUdfUkFURSgiU2V0dGluZyByYXRlcyBmb3IgJXMgR0h6XG4iLAotCQkgICAgICAgc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiA/ICIyLjQiIDogIjUiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpZiAoKHJhdGUtPmh3X3ZhbHVlIDwgSVdMX1JBVEVfQ09VTlQpICYmCi0JCSAgICAhKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiQWRkaW5nIHJhdGUgaW5kZXggJWQgKHBsY3AgJWQpXG4iLAotCQkJCSAgICAgICByYXRlLT5od192YWx1ZSwgaXdsMzk0NV9yYXRlc1tyYXRlLT5od192YWx1ZV0ucGxjcCk7Ci0JCQlwcml2LT5hY3RpdmVfcmF0ZSB8PSAoMSA8PCByYXRlLT5od192YWx1ZSk7Ci0JCX0KLQl9Ci0KLQlJV0xfREVCVUdfUkFURSgiU2V0IGFjdGl2ZV9yYXRlID0gJTB4LCBhY3RpdmVfcmF0ZV9iYXNpYyA9ICUweFxuIiwKLQkJICAgICAgIHByaXYtPmFjdGl2ZV9yYXRlLCBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyk7Ci0KLQkvKgotCSAqIElmIGEgYmFzaWMgcmF0ZSBpcyBjb25maWd1cmVkLCB0aGVuIHVzZSBpdCAoYWRkaW5nIElXTF9SQVRFXzFNX01BU0spCi0JICogb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZGVmYXVsdCBvZiBhbGwgQ0NLIHJhdGVzIGFuZCA2LCAxMiwgMjQgZm9yCi0JICogT0ZETQotCSAqLwotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSykKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgSVdMX0NDS19SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfQ0NLX1JBVEUpICYgMHhGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgKElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBJV0xfUkFURV82TV9NQVNLKSkgPj4KLQkJICAgICAgSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCQkgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcmFkaW9fa2lsbF9zdyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgZGlzYWJsZV9yYWRpbykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEhZGlzYWJsZV9yYWRpbyA9PSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPICVzXG4iLAotCQkJICBkaXNhYmxlX3JhZGlvID8gIk9GRiIgOiAiT04iKTsKLQotCWlmIChkaXNhYmxlX3JhZGlvKSB7Ci0JCWl3bDM5NDVfc2Nhbl9jYW5jZWwocHJpdik7Ci0JCS8qIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgQVAgKi8KLQkJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAotCQkJCSAgICBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlpd2wzOTQ1X3NlbmRfY2FyZF9zdGF0ZShwcml2LCBDQVJEX1NUQVRFX0NNRF9ESVNBQkxFLCAwKTsKLQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQotCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JLyogd2FrZSB1cCB1Y29kZSAqLwotCW1zbGVlcCgxMCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKLQlpZiAoIWl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKQotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKLQkJCQkgICJkaXNhYmxlZCBieSBIVyBzd2l0Y2hcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHByaXYtPmlzX29wZW4pCi0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JcmV0dXJuOwotfQotCi12b2lkIGl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgdTMyIGRlY3J5cHRfcmVzLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCi17Ci0JdTE2IGZjID0KLQkgICAgbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSktPmZyYW1lX2NvbnRyb2wpOwotCi0JaWYgKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSykKLQkJcmV0dXJuOwotCi0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKQotCQlyZXR1cm47Ci0KLQlJV0xfREVCVUdfUlgoImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKLQlzd2l0Y2ggKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMpCi0JCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7Ci0JY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1dFUDoKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUDoKLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfREVDUllQVF9PSykgewotCQkJSVdMX0RFQlVHX1JYKCJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7Ci0JCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCiAKICNpbmNsdWRlICJpd2wtc3BlY3RydW0uaCIKQEAgLTI4NjMsMTMgKzEyMzIsMTMgQEAKIAlyZXR1cm4gY3B1X3RvX2xlMzIocmVzKTsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgKnBhcmFtcywKIAkJCSAgICAgICB1OCB0eXBlKQogewotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX2NtZCBzcGVjdHJ1bTsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlczsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9zcGVjdHJ1bV9jbWQgc3BlY3RydW07CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01ELAogCQkuZGF0YSA9ICh2b2lkICopJnNwZWN0cnVtLAogCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKQEAgLTI4NzksNyArMTI0OCw3IEBACiAJaW50IHNwZWN0cnVtX3Jlc3Bfc3RhdHVzOwogCWludCBkdXJhdGlvbiA9IGxlMTZfdG9fY3B1KHBhcmFtcy0+ZHVyYXRpb24pOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCWFkZF90aW1lID0KIAkJICAgIGl3bDM5NDVfdXNlY3NfdG9fYmVhY29ucygKIAkJCWxlNjRfdG9fY3B1KHBhcmFtcy0+c3RhcnRfdGltZSkgLSBwcml2LT5sYXN0X3RzZiwKQEAgLTI4OTQsNyArMTI2Myw3IEBACiAJY21kLmxlbiA9IHNpemVvZihzcGVjdHJ1bSk7CiAJc3BlY3RydW0ubGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbiAtIHNpemVvZihzcGVjdHJ1bS5sZW4pKTsKIAotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQogCQlzcGVjdHJ1bS5zdGFydF90aW1lID0KIAkJICAgIGl3bDM5NDVfYWRkX2JlYWNvbl90aW1lKHByaXYtPmxhc3RfYmVhY29uX3RpbWUsCiAJCQkJYWRkX3RpbWUsCkBAIC0yOTA5LDEzICsxMjc4LDEzIEBACiAJCXNwZWN0cnVtLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSyB8CiAJCSAgICBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfCBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOworCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWF9PTl9BU1NPQyBjb21tYW5kXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOwogCQlyYyA9IC1FSU87CiAJfQogCkBAIC0yOTIzLDcgKzEyOTIsNyBAQAogCXN3aXRjaCAoc3BlY3RydW1fcmVzcF9zdGF0dXMpIHsKIAljYXNlIDA6CQkvKiBDb21tYW5kIHdpbGwgYmUgaGFuZGxlZCAqLwogCQlpZiAocmVzLT51LnNwZWN0cnVtLmlkICE9IDB4ZmYpIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmVwbGFjZWQgZXhpc3RpbmcgbWVhc3VyZW1lbnQ6ICVkXG4iLAogCQkJCQkJcmVzLT51LnNwZWN0cnVtLmlkKTsKIAkJCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyAmPSB+TUVBU1VSRU1FTlRfUkVBRFk7CiAJCX0KQEAgLTI5NDIsMzAgKzEzMTEsMjkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hbGl2ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3AgKnBhbGl2ZTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgKnBhbGl2ZTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpwd29yazsKIAogCXBhbGl2ZSA9ICZwa3QtPnUuYWxpdmVfZnJhbWU7CiAKLQlJV0xfREVCVUdfSU5GTygiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgogCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCiAJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAogCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CiAKIAlpZiAocGFsaXZlLT52ZXJfc3VidHlwZSA9PSBJTklUSUFMSVpFX1NVQlRZUEUpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7Ci0JCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZV9pbml0LAotCQkgICAgICAgJnBrdC0+dS5hbGl2ZV9mcmFtZSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3ApKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZV9pbml0LCAmcGt0LT51LmFsaXZlX2ZyYW1lLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfYWxpdmVfcmVzcCkpOwogCQlwd29yayA9ICZwcml2LT5pbml0X2FsaXZlX3N0YXJ0OwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZSwgJnBrdC0+dS5hbGl2ZV9mcmFtZSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwKSk7CisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwogCQlpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHByaXYpOwogCX0KQEAgLTI5NzYsOTUgKzEzNDQsMzEgQEAKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgcHdvcmssCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyg1KSk7CiAJZWxzZQotCQlJV0xfV0FSTklORygidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworI2VuZGlmCiAKLQlJV0xfREVCVUdfUlgoIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6IDB4JTAyWFxuIiwgcGt0LT51LnN0YXR1cyk7CisJSVdMX0RFQlVHX1JYKHByaXYsICJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOiAweCUwMlhcbiIsIHBrdC0+dS5zdGF0dXMpOwogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9lcnJvcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfRVJST1IoIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCi0JCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKLQkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCi0JCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCi0JCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOwotfQotCi0jZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9jc2Eoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2wzOTQ1X2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7Ci0JSVdMX0RFQlVHXzExSCgiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCi0JCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7Ci0Jcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOwotCi0JaWYgKCFyZXBvcnQtPnN0YXRlKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfMTFIIHwgSVdMX0RMX0lORk8sCi0JCQkgICJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KCZwcml2LT5tZWFzdXJlX3JlcG9ydCwgcmVwb3J0LCBzaXplb2YoKnJlcG9ydCkpOwotCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9SRUFEWTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKLQlJV0xfREVCVUdfUlgoInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAotCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUkFESU8oIkR1bXBpbmcgJWQgYnl0ZXMgb2YgdW5oYW5kbGVkICIKLQkJCSJub3RpZmljYXRpb24gZm9yICVzOlxuIiwKLQkJCWxlMzJfdG9fY3B1KHBrdC0+bGVuKSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSk7Ci0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYmVhY29uX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBiZWFjb25fdXBkYXRlKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBiZWFjb25fdXBkYXRlKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOwogCiAJLyogUHVsbCB1cGRhdGVkIEFQIGJlYWNvbiBmcm9tIG1hYzgwMjExLiB3aWxsIGZhaWwgaWYgbm90IGluIEFQIG1vZGUgKi8KIAliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LT5odywgcHJpdi0+dmlmKTsKIAogCWlmICghYmVhY29uKSB7Ci0JCUlXTF9FUlJPUigidXBkYXRlIGJlYWNvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMwNzksMTUgKzEzODMsMTUgQEAKIAlpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9iZWFjb25fbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgKmJlYWNvbiA9ICYocGt0LT51LmJlYWNvbl9zdGF0dXMpOwogCXU4IHJhdGUgPSBiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnJhdGU7CiAKLQlJV0xfREVCVUdfUlgoImJlYWNvbiBzdGF0dXMgJXggcmV0cmllcyAlZCBpc3MgJWQgIgorCUlXTF9ERUJVR19SWChwcml2LCAiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCiAJCSJ0c2YgJWQgJWQgcmF0ZSAlZFxuIiwKIAkJbGUzMl90b19jcHUoYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5zdGF0dXMpICYgVFhfU1RBVFVTX01TSywKIAkJYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5mYWlsdXJlX2ZyYW1lLApAQCAtMzEwMSwxMzcgKzE0MDUsMjAgQEAKIAkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5iZWFjb25fdXBkYXRlKTsKIH0KIAotLyogU2VydmljZSByZXNwb25zZSB0byBSRVBMWV9TQ0FOX0NNRCAoMHg4MCkgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2FucmVxX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfUlgoIlNjYW4gcmVxdWVzdCBzdGF0dXMgPSAweCV4XG4iLCBub3RpZi0+c3RhdHVzKTsKLSNlbmRpZgotfQotCi0vKiBTZXJ2aWNlIFNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OICgweDgyKSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9zY2FuX3N0YXJ0X25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqbm90aWYgPQotCSAgICAoc3RydWN0IGl3bDM5NDVfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0JcHJpdi0+c2Nhbl9zdGFydF90c2YgPSBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyk7Ci0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gc3RhcnQ6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAoYmVhY29uIHRpbWVyICV1KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbm90aWYtPnRzZl9oaWdoLAotCQkgICAgICAgbm90aWYtPnRzZl9sb3csIG5vdGlmLT5zdGF0dXMsIG5vdGlmLT5iZWFjb25fdGltZXIpOwotfQotCi0vKiBTZXJ2aWNlIFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gKDB4ODMpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnJlc3VsdHNfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwotCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY2gucmVzOiAiCi0JCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCi0JCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgIgotCQkgICAgICAgImVsYXBzZWQ9JWx1IHVzZWMgKCVkbXMgc2luY2UgbGFzdClcbiIsCi0JCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKLQkJICAgICAgIG5vdGlmLT5iYW5kID8gImJnIiA6ICJhIiwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfaGlnaCksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+c3RhdGlzdGljc1swXSksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdykgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZiwKLQkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzCi0JCQkJCShwcml2LT5sYXN0X3NjYW5famlmZmllcywgamlmZmllcykpKTsKLQotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci19Ci0KLS8qIFNlcnZpY2UgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gKDB4ODQpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fY29tcGxldGVfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuY29tcGxldGVfbm90aWZpY2F0aW9uICpzY2FuX25vdGlmID0gKHZvaWQgKilwa3QtPnUucmF3OwotCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY29tcGxldGU6ICVkIGNoYW5uZWxzIChUU0YgMHglMDhYOiUwOFgpIC0gJWRcbiIsCi0JCSAgICAgICBzY2FuX25vdGlmLT5zY2FubmVkX2NoYW5uZWxzLAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2xvdywKLQkJICAgICAgIHNjYW5fbm90aWYtPnRzZl9oaWdoLCBzY2FuX25vdGlmLT5zdGF0dXMpOwotCi0JLyogVGhlIEhXIGlzIG5vIGxvbmdlciBzY2FubmluZyAqLwotCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgc2NhbiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBjYW1lIGluLCBzbyBraWxsIHRoYXQgdGltZXIuLi4gKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKLQotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHBhc3Mgb24gJXNHSHogdG9vayAlZG1zXG4iLAotCQkgICAgICAgKHByaXYtPnNjYW5fYmFuZHMgJiBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikpID8KLQkJCQkJCQkiMi40IiA6ICI1LjIiLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPnNjYW5fcGFzc19zdGFydCwgamlmZmllcykpKTsKLQotCS8qIFJlbW92ZSB0aGlzIHNjYW5uZWQgYmFuZCBmcm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcKLQkgKiBiYW5kcyB0byBzY2FuLCBiYW5kIEcgcHJlY2VkZXMgQSBpbiBvcmRlciBvZiBzY2FubmluZwotCSAqIGFzIHNlZW4gaW4gaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4gKi8KLQlpZiAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkKLQkJcHJpdi0+c2Nhbl9iYW5kcyAmPSB+QklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWVsc2UgaWYgKHByaXYtPnNjYW5fYmFuZHMgJiAgQklUKElFRUU4MDIxMV9CQU5EXzVHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7Ci0KLQkvKiBJZiBhIHJlcXVlc3QgdG8gYWJvcnQgd2FzIGdpdmVuLCBvciB0aGUgc2NhbiBkaWQgbm90IHN1Y2NlZWQKLQkgKiB0aGVuIHdlIHJlc2V0IHRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgYW5kIHRlcm1pbmF0ZSwKLQkgKiByZS1xdWV1aW5nIGFub3RoZXIgc2NhbiBpZiBvbmUgaGFzIGJlZW4gcmVxdWVzdGVkICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQWJvcnRlZCBzY2FuIGNvbXBsZXRlZC5cbiIpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZXJlIGFyZSBtb3JlIGJhbmRzIG9uIHRoaXMgc2NhbiBwYXNzIHJlc2NoZWR1bGUgKi8KLQkJaWYgKHByaXYtPnNjYW5fYmFuZHMgPiAwKQotCQkJZ290byByZXNjaGVkdWxlOwotCX0KLQotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci0JSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOwotCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0KLQlJV0xfREVCVUdfSU5GTygiU2NhbiB0b29rICVkbXNcbiIsCi0JCWppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzKHByaXYtPnNjYW5fc3RhcnQsIGppZmZpZXMpKSk7Ci0KLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKLQotCXJldHVybjsKLQotcmVzY2hlZHVsZToKLQlwcml2LT5zY2FuX3Bhc3Nfc3RhcnQgPSBqaWZmaWVzOwotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLX0KLQogLyogSGFuZGxlIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlIHRoYXQgY2FyZCdzIHBvd2VyIHN0YXRlIGlzIGNoYW5naW5nCiAgKiBkdWUgdG8gc29mdHdhcmUsIGhhcmR3YXJlLCBvciBjcml0aWNhbCB0ZW1wZXJhdHVyZSBSRktJTEwgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2NhcmRfc3RhdGVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJdTMyIGZsYWdzID0gbGUzMl90b19jcHUocGt0LT51LmNhcmRfc3RhdGVfbm90aWYuZmxhZ3MpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcHJpdi0+c3RhdHVzOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAorCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKIAkJCSAgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAogCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIpOwogCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCiAJCSAgICBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQpOwogCiAJaWYgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkKQEAgLTMyNDUsNyArMTQzMiw3IEBACiAJZWxzZQogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwogCi0JaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKKwlpd2xfc2Nhbl9jYW5jZWwocHJpdik7CiAKIAlpZiAoKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmc3RhdHVzKSAhPQogCSAgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKSB8fApAQCAtMzI2NSwxNyArMTQ1MiwxNSBAQAogICogVGhpcyBmdW5jdGlvbiBjaGFpbnMgaW50byB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgZmlsZXMgZm9yIHRoZW0gdG8gc2V0dXAKICAqIGFueSBoYXJkd2FyZSBzcGVjaWZpYyBoYW5kbGVycyBhcyB3ZWxsLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9BTElWRV0gPSBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FERF9TVEFdID0gaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhOwotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bDM5NDVfcnhfcmVwbHlfZXJyb3I7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfcnhfY3NhOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXSA9Ci0JICAgIGl3bDM5NDVfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9wbV9zbGVlcF9ub3RpZjsKKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9FUlJPUl0gPSBpd2xfcnhfcmVwbHlfZXJyb3I7CisJcHJpdi0+cnhfaGFuZGxlcnNbQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9jc2E7CisJcHJpdi0+cnhfaGFuZGxlcnNbUE1fU0xFRVBfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9wbV9zbGVlcF9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tQTV9ERUJVR19TVEFUSVNUSUNfTk9USUZJQ10gPQotCSAgICBpd2wzOTQ1X3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWY7CisJICAgIGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW0JFQUNPTl9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9iZWFjb25fbm90aWY7CiAKIAkvKgpAQCAtMzI4Niw5MCArMTQ3MSwxNCBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NUQVRJU1RJQ1NfQ01EXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAlwcml2LT5yeF9oYW5kbGVyc1tTVEFUSVNUSUNTX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3M7CiAKLQlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9TQ0FOX0NNRF0gPSBpd2wzOTQ1X3J4X3JlcGx5X3NjYW47Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9TVEFSVF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9zY2FuX3N0YXJ0X25vdGlmOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NDQU5fUkVTVUxUU19OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zY2FuX3Jlc3VsdHNfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zY2FuX2NvbXBsZXRlX25vdGlmOworCWl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhwcml2KTsKKwlpd2xfc2V0dXBfcnhfc2Nhbl9oYW5kbGVycyhwcml2KTsKIAlwcml2LT5yeF9oYW5kbGVyc1tDQVJEX1NUQVRFX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2NhcmRfc3RhdGVfbm90aWY7CiAKIAkvKiBTZXQgdXAgaGFyZHdhcmUgc3BlY2lmaWMgUnggaGFuZGxlcnMgKi8KIAlpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAocHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbSAtIFJlY2xhaW0gQ01EIHF1ZXVlIGVudHJpZXMKLSAqIFdoZW4gRlcgYWR2YW5jZXMgJ1InIGluZGV4LCBhbGwgZW50cmllcyBiZXR3ZWVuIG9sZCBhbmQgbmV3ICdSJyBpbmRleAotICogbmVlZCB0byBiZSByZWNsYWltZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfY21kX3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBpbnQgdHhxX2lkLCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0JaW50IG5mcmVlZCA9IDA7Ci0KLQlpZiAoKGluZGV4ID49IHEtPm5fYmQpIHx8IChpd2wzOTQ1X3gyX3F1ZXVlX3VzZWQocSwgaW5kZXgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgotCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKLQkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChpbmRleCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpbmRleCwgcS0+bl9iZCk7IHEtPnJlYWRfcHRyICE9IGluZGV4OwotCQlxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKLQkJaWYgKG5mcmVlZCA+IDEpIHsKLQkJCUlXTF9FUlJPUigiSENNRCBza2lwcGVkOiBpbmRleCAoJWQpICVkICVkXG4iLCBpbmRleCwKLQkJCQkJcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmZyZWVkKys7Ci0JfQotfQotCi0KLS8qKgotICogaXdsMzk0NV90eF9jbWRfY29tcGxldGUgLSBQdWxsIHVudXNlZCBidWZmZXJzIG9mZiB0aGUgcXVldWUgYW5kIHJlY2xhaW0gdGhlbQotICogQHJ4YjogUnggYnVmZmVyIHRvIHJlY2xhaW0KLSAqCi0gKiBJZiBhbiBSeCBidWZmZXIgaGFzIGFuIGFzeW5jIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGUgY2FsbGJhY2sKLSAqIHdpbGwgYmUgZXhlY3V0ZWQuICBUaGUgYXR0YWNoZWQgc2tiIChpZiBwcmVzZW50KSB3aWxsIG9ubHkgYmUgZnJlZWQKLSAqIGlmIHRoZSBjYWxsYmFjayByZXR1cm5zIDEKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV90eF9jbWRfY29tcGxldGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0JdTE2IHNlcXVlbmNlID0gbGUxNl90b19jcHUocGt0LT5oZHIuc2VxdWVuY2UpOwotCWludCB0eHFfaWQgPSBTRVFfVE9fUVVFVUUoc2VxdWVuY2UpOwotCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7Ci0JaW50IGh1Z2UgPSBzZXF1ZW5jZSAmIFNFUV9IVUdFX0ZSQU1FOwotCWludCBjbWRfaW5kZXg7Ci0Jc3RydWN0IGl3bDM5NDVfY21kICpjbWQ7Ci0KLQlCVUdfT04odHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKTsKLQotCWNtZF9pbmRleCA9IGdldF9jbWRfaW5kZXgoJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0ucSwgaW5kZXgsIGh1Z2UpOwotCWNtZCA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dLmNtZFtjbWRfaW5kZXhdOwotCi0JLyogSW5wdXQgZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSB3aGVuIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBxdWV1ZS4gKi8KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCWNtZC0+bWV0YS5zb3VyY2UtPnUuc2tiID0gcnhiLT5za2I7Ci0JCXJ4Yi0+c2tiID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNtZC0+bWV0YS51LmNhbGxiYWNrICYmCi0JCSAgICFjbWQtPm1ldGEudS5jYWxsYmFjayhwcml2LCBjbWQsIHJ4Yi0+c2tiKSkKLQkJcnhiLT5za2IgPSBOVUxMOwotCi0JaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKLQotCWlmICghKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQl9Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBSWC1GVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBSeCB0aGVvcnkgb2Ygb3BlcmF0aW9uCkBAIC0zNDE3LDcgKzE1MjYsNiBAQAogICoKICAqIERyaXZlciBzZXF1ZW5jZToKICAqCi0gKiBpd2wzOTQ1X3J4X3F1ZXVlX2FsbG9jKCkgICBBbGxvY2F0ZXMgcnhfZnJlZQogICogaXdsMzk0NV9yeF9yZXBsZW5pc2goKSAgICAgUmVwbGVuaXNoZXMgcnhfZnJlZSBsaXN0IGZyb20gcnhfdXNlZCwgYW5kIGNhbGxzCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2sKICAqIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jaygpIE1vdmVzIGF2YWlsYWJsZSBidWZmZXJzIGZyb20gcnhfZnJlZSBpbnRvIFJ4CkBAIC0zNDI2LDcgKzE1MzQsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGF2YWlsYWJsZSwgc2NoZWR1bGVzIGl3bDM5NDVfcnhfcmVwbGVuaXNoCiAgKgogICogLS0gZW5hYmxlIGludGVycnVwdHMgLS0KLSAqIElTUiAtIGl3bDM5NDVfcngoKSAgICAgICAgIERldGFjaCBpd2wzOTQ1X3J4X21lbV9idWZmZXJzIGZyb20gcG9vbCB1cCB0byB0aGUKKyAqIElTUiAtIGl3bDM5NDVfcngoKSAgICAgICAgIERldGFjaCBpd2xfcnhfbWVtX2J1ZmZlcnMgZnJvbSBwb29sIHVwIHRvIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRCBJTkRFWCwgZGV0YWNoaW5nIHRoZSBTS0IgZnJvbSB0aGUgcG9vbC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVzIHRoZSBwYWNrZXQgYnVmZmVyIGZyb20gcXVldWUgdG8gcnhfdXNlZC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxzIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayB0byByZWZpbGwgYW55IGVtcHR5CkBAIC0zNDM2LDcwICsxNTQ0LDkgQEAKICAqLwogCiAvKioKLSAqIGl3bDM5NDVfcnhfcXVldWVfc3BhY2UgLSBSZXR1cm4gbnVtYmVyIG9mIGZyZWUgc2xvdHMgYXZhaWxhYmxlIGluIHF1ZXVlLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpCi17Ci0JaW50IHMgPSBxLT5yZWFkIC0gcS0+d3JpdGU7Ci0JaWYgKHMgPD0gMCkKLQkJcyArPSBSWF9RVUVVRV9TSVpFOwotCS8qIGtlZXAgc29tZSBidWZmZXIgdG8gbm90IGNvbmZ1c2UgZnVsbCBhbmQgZW1wdHkgcXVldWUgKi8KLQlzIC09IDI7Ci0JaWYgKHMgPCAwKQotCQlzID0gMDsKLQlyZXR1cm4gczsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIgLSBVcGRhdGUgdGhlIHdyaXRlIHBvaW50ZXIgZm9yIHRoZSBSWCBxdWV1ZQotICovCi1pbnQgaXdsMzk0NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpxKQotewotCXUzMiByZWcgPSAwOwotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocS0+bmVlZF91cGRhdGUgPT0gMCkKLQkJZ290byBleGl0X3VubG9jazsKLQotCS8qIElmIHBvd2VyLXNhdmluZyBpcyBpbiB1c2UsIG1ha2Ugc3VyZSBkZXZpY2UgaXMgYXdha2UgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpIHsKLQkJcmVnID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCi0JCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwotCQkJZ290byBleGl0X3VubG9jazsKLQkJfQotCi0JCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXhpdF91bmxvY2s7Ci0KLQkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwKLQkJCQkgICAgIHEtPndyaXRlICYgfjB4Nyk7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0JLyogRWxzZSBkZXZpY2UgaXMgYXNzdW1lZCB0byBiZSBhd2FrZSAqLwotCX0gZWxzZQotCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsMzk0NV93cml0ZTMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsIHEtPndyaXRlICYgfjB4Nyk7Ci0KLQotCXEtPm5lZWRfdXBkYXRlID0gMDsKLQotIGV4aXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgogICogaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyIC0gY29udmVydCBhIERNQSBhZGRyZXNzIHRvIGEgdUNvZGUgcmVhZCBidWZmZXIgcHRyCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19sZTMyIGl3bDM5NDVfZG1hX2FkZHIycmJkX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGlubGluZSBfX2xlMzIgaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJICBkbWFfYWRkcl90IGRtYV9hZGRyKQogewogCXJldHVybiBjcHVfdG9fbGUzMigodTMyKWRtYV9hZGRyKTsKQEAgLTM1MTYsMjQgKzE1NjMsMjQgQEAKICAqIGFsc28gdXBkYXRlcyB0aGUgbWVtb3J5IGFkZHJlc3MgaW4gdGhlIGZpcm13YXJlIHRvIHJlZmVyZW5jZSB0aGUgbmV3CiAgKiB0YXJnZXQgYnVmZmVyLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGI7CisJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgd3JpdGUsIHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCXdyaXRlID0gcnhxLT53cml0ZSAmIH4weDc7Ci0Jd2hpbGUgKChpd2wzOTQ1X3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAwKSAmJiAocnhxLT5mcmVlX2NvdW50KSkgeworCXdoaWxlICgoaXdsX3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAwKSAmJiAocnhxLT5mcmVlX2NvdW50KSkgewogCQkvKiBHZXQgbmV4dCBmcmVlIFJ4IGJ1ZmZlciwgcmVtb3ZlIGZyb20gZnJlZSBsaXN0ICovCiAJCWVsZW1lbnQgPSByeHEtPnJ4X2ZyZWUubmV4dDsKLQkJcnhiID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyLCBsaXN0KTsKKwkJcnhiID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbChlbGVtZW50KTsKIAogCQkvKiBQb2ludCB0byBSeCBidWZmZXIgdmlhIG5leHQgUkJEIGluIGNpcmN1bGFyIGJ1ZmZlciAqLwotCQlyeHEtPmJkW3J4cS0+d3JpdGVdID0gaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHByaXYsIHJ4Yi0+ZG1hX2FkZHIpOworCQlyeHEtPmJkW3J4cS0+d3JpdGVdID0gaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHByaXYsIHJ4Yi0+cmVhbF9kbWFfYWRkcik7CiAJCXJ4cS0+cXVldWVbcnhxLT53cml0ZV0gPSByeGI7CiAJCXJ4cS0+d3JpdGUgPSAocnhxLT53cml0ZSArIDEpICYgUlhfUVVFVUVfTUFTSzsKIAkJcnhxLT5mcmVlX2NvdW50LS07CkBAIC0zNTUyLDcgKzE1OTksNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKLQkJcmMgPSBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgcnhxKTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfQpAQCAtMzU2OCwyNCArMTYxNSwyNCBAQAogICogQWxzbyByZXN0b2NrIHRoZSBSeCBxdWV1ZSB2aWEgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrLgogICogVGhpcyBpcyBjYWxsZWQgYXMgYSBzY2hlZHVsZWQgd29yayBpdGVtIChleGNlcHQgZm9yIGR1cmluZyBpbml0aWFsaXphdGlvbikKICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9hbGxvY2F0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9hbGxvY2F0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4cS0+cnhfdXNlZCkpIHsKIAkJZWxlbWVudCA9IHJ4cS0+cnhfdXNlZC5uZXh0OwotCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIsIGxpc3QpOworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAKIAkJLyogQWxsb2MgYSBuZXcgcmVjZWl2ZSBidWZmZXIgKi8KIAkJcnhiLT5za2IgPQotCQkgICAgYWxsb2Nfc2tiKElXTF9SWF9CVUZfU0laRSwgX19HRlBfTk9XQVJOIHwgR0ZQX0FUT01JQyk7CisJCSAgICBhbGxvY19za2IocHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCV9fR0ZQX05PV0FSTiB8IEdGUF9BVE9NSUMpOwogCQlpZiAoIXJ4Yi0+c2tiKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0NSSVQgRFJWX05BTUUKLQkJCQkgICAgICAgIjogQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CisJCQkJSVdMX0NSSVQocHJpdiwgIjogQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CiAJCQkvKiBXZSBkb24ndCByZXNjaGVkdWxlIHJlcGxlbmlzaCB3b3JrIGhlcmUgLS0gd2Ugd2lsbAogCQkJICogY2FsbCB0aGUgcmVzdG9jayBtZXRob2QgYW5kIGlmIGl0IHN0aWxsIG5lZWRzCiAJCQkgKiBtb3JlIGJ1ZmZlcnMgaXQgd2lsbCBzY2hlZHVsZSByZXBsZW5pc2ggKi8KQEAgLTM2MDQsOSArMTY1MSwxMCBAQAogCQlsaXN0X2RlbChlbGVtZW50KTsKIAogCQkvKiBHZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBSQi9TS0IgKi8KLQkJcnhiLT5kbWFfYWRkciA9Ci0JCSAgICBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeGItPnNrYi0+ZGF0YSwKLQkJCQkgICBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJ4Yi0+cmVhbF9kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJCQlyeGItPnNrYi0+ZGF0YSwKKwkJCQkJCXByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWxpc3RfYWRkX3RhaWwoJnJ4Yi0+bGlzdCwgJnJ4cS0+cnhfZnJlZSk7CiAJCXJ4cS0+ZnJlZV9jb3VudCsrOwogCX0KQEAgLTM2MTgsNyArMTY2Niw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCiAJaXdsMzk0NV9yeF9hbGxvY2F0ZShwcml2KTsKIAlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CkBAIC0zNjI3LDcgKzE2NzUsNyBAQAogCiB2b2lkIGl3bDM5NDVfcnhfcmVwbGVuaXNoKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaXdsMzk0NV9yeF9hbGxvY2F0ZShwcml2KTsKQEAgLTM2MzcsODQgKzE2ODUsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAotLyogQXNzdW1lcyB0aGF0IHRoZSBza2IgZmllbGQgb2YgdGhlIGJ1ZmZlcnMgaW4gJ3Bvb2wnIGlzIGtlcHQgYWNjdXJhdGUuCi0gKiBJZiBhbiBTS0IgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBQT09MIG5lZWRzIHRvIGhhdmUgaXRzIFNLQiBzZXQgdG8gTlVMTAotICogVGhpcyBmcmVlIHJvdXRpbmUgd2Fsa3MgdGhlIGxpc3Qgb2YgUE9PTCBlbnRyaWVzIGFuZCBpZiBTS0IgaXMgc2V0IHRvCi0gKiBub24gTlVMTCBpdCBpcyB1bm1hcHBlZCBhbmQgZnJlZWQKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlM7IGkrKykgewotCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQl9Ci0JfQotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgICByeHEtPmRtYV9hZGRyKTsKLQlyeHEtPmJkID0gTlVMTDsKLX0KLQotaW50IGl3bDM5NDVfcnhfcXVldWVfYWxsb2Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pbml0KCZyeHEtPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwotCi0JLyogQWxsb2MgdGhlIGNpcmN1bGFyIGJ1ZmZlciBvZiBSZWFkIEJ1ZmZlciBEZXNjcmlwdG9ycyAoUkJEcykgKi8KLQlyeHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIpOwotCWlmICghcnhxLT5iZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBGaWxsIHRoZSByeF91c2VkIHF1ZXVlIHdpdGggX2FsbF8gb2YgdGhlIFJ4IGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUlhfRlJFRV9CVUZGRVJTICsgUlhfUVVFVUVfU0laRTsgaSsrKQotCQlsaXN0X2FkZF90YWlsKCZyeHEtPnBvb2xbaV0ubGlzdCwgJnJ4cS0+cnhfdXNlZCk7Ci0KLQkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKLQkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KLQlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKLQlyeHEtPmZyZWVfY291bnQgPSAwOwotCXJ4cS0+bmVlZF91cGRhdGUgPSAwOwotCXJldHVybiAwOwotfQotCi12b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKLQlJTklUX0xJU1RfSEVBRCgmcnhxLT5yeF9mcmVlKTsKLQlJTklUX0xJU1RfSEVBRCgmcnhxLT5yeF91c2VkKTsKLQkvKiBGaWxsIHRoZSByeF91c2VkIHF1ZXVlIHdpdGggX2FsbF8gb2YgdGhlIFJ4IGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUlhfRlJFRV9CVUZGRVJTICsgUlhfUVVFVUVfU0laRTsgaSsrKSB7Ci0JCS8qIEluIHRoZSByZXNldCBmdW5jdGlvbiwgdGhlc2UgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZAotCQkgKiB0byBhbiBTS0IsIHNvIHdlIG5lZWQgdG8gdW5tYXAgYW5kIGZyZWUgcG90ZW50aWFsIHN0b3JhZ2UgKi8KLQkJaWYgKHJ4cS0+cG9vbFtpXS5za2IgIT0gTlVMTCkgewotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAotCQkJCQkgcnhxLT5wb29sW2ldLmRtYV9hZGRyLAotCQkJCQkgSVdMX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCQkJZGV2X2tmcmVlX3NrYihyeHEtPnBvb2xbaV0uc2tiKTsKLQkJCXJ4cS0+cG9vbFtpXS5za2IgPSBOVUxMOwotCQl9Ci0JCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKLQl9Ci0KLQkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKLQkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KLQlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKLQlyeHEtPmZyZWVfY291bnQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotfQotCiAvKiBDb252ZXJ0IGxpbmVhciBzaWduYWwtdG8tbm9pc2UgcmF0aW8gaW50byBkQiAqLwogc3RhdGljIHU4IHJhdGlvMmRCWzEwMF0gPSB7CiAvKgkgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAqLwpAQCAtMzgwMCwxMSArMTc3MCwxMSBAQAogICogdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzLCBpbmNsdWRpbmcgY29tbWFuZCByZXNwb25zZXMsCiAgKiBmcmFtZS1yZWNlaXZlZCBub3RpZmljYXRpb25zLCBhbmQgb3RoZXIgbm90aWZpY2F0aW9ucy4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9oYW5kbGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3Q7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdDsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXUzMiByLCBpOwogCWludCByZWNsYWltOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zODEzLDE0ICsxNzgzLDE0IEBACiAKIAkvKiB1Q29kZSdzIHJlYWQgaW5kZXggKHN0b3JlZCBpbiBzaGFyZWQgRFJBTSkgaW5kaWNhdGVzIHRoZSBsYXN0IFJ4CiAJICogYnVmZmVyIHRoYXQgdGhlIGRyaXZlciBtYXkgcHJvY2VzcyAobGFzdCBidWZmZXIgZmlsbGVkIGJ5IHVjb2RlKS4gKi8KLQlyID0gaXdsMzk0NV9od19nZXRfcnhfcmVhZChwcml2KTsKKwlyID0gbGUxNl90b19jcHUocnhxLT5yYl9zdHRzLT5jbG9zZWRfcmJfbnVtKSAmICAweDBGRkY7CiAJaSA9IHJ4cS0+cmVhZDsKIAotCWlmIChpd2wzOTQ1X3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAoUlhfUVVFVUVfU0laRSAvIDIpKQorCWlmIChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCiAJCWZpbGxfcnggPSAxOwogCS8qIFJ4IGludGVycnVwdCwgYnV0IG5vdGhpbmcgc2VudCBmcm9tIHVDb2RlICovCiAJaWYgKGkgPT0gcikKLQkJSVdMX0RFQlVHKElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CisJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfUlggfCBJV0xfRExfSVNSLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOwogCiAJd2hpbGUgKGkgIT0gcikgewogCQlyeGIgPSByeHEtPnF1ZXVlW2ldOwpAQCAtMzgzMiwxMCArMTgwMiwxMCBAQAogCiAJCXJ4cS0+cXVldWVbaV0gPSBOVUxMOwogCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPmRtYV9hZGRyLAotCQkJCQkgICAgSVdMX1JYX0JVRl9TSVpFLAorCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocHJpdi0+cGNpX2RldiwgcnhiLT5yZWFsX2RtYV9hZGRyLAorCQkJCQkgICAgcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAogCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJcGt0ID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCQlwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCQkvKiBSZWNsYWltIGEgY29tbWFuZCBidWZmZXIgb25seSBpZiB0aGlzIHBhY2tldCBpcyBhIHJlc3BvbnNlCiAJCSAqICAgdG8gYSAoZHJpdmVyLW9yaWdpbmF0ZWQpIGNvbW1hbmQuCkBAIC0zODUxLDEzICsxODIxLDEzIEBACiAJCSAqICAgaGFuZGxlIHRob3NlIHRoYXQgbmVlZCBoYW5kbGluZyB2aWEgZnVuY3Rpb24gaW4KIAkJICogICByeF9oYW5kbGVycyB0YWJsZS4gIFNlZSBpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKCkgKi8KIAkJaWYgKHByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0pIHsKLQkJCUlXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKKwkJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfSENNRCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCiAJCQkJInIgPSAlZCwgaSA9ICVkLCAlcywgMHglMDJ4XG4iLCByLCBpLAogCQkJCWdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksIHBrdC0+aGRyLmNtZCk7CiAJCQlwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdIChwcml2LCByeGIpOwogCQl9IGVsc2UgewogCQkJLyogTm8gaGFuZGxpbmcgbmVlZGVkICovCi0JCQlJV0xfREVCVUcoSVdMX0RMX0hPU1RfQ09NTUFORCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCisJCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0hDTUQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAogCQkJCSJyICVkIGkgJWQgTm8gaGFuZGxlciBuZWVkZWQgZm9yICVzLCAweCUwMnhcbiIsCiAJCQkJciwgaSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwKIAkJCQlwa3QtPmhkci5jbWQpOwpAQCAtMzg2NSwxMiArMTgzNSwxMiBAQAogCiAJCWlmIChyZWNsYWltKSB7CiAJCQkvKiBJbnZva2UgYW55IGNhbGxiYWNrcywgdHJhbnNmZXIgdGhlIHNrYiB0byBjYWxsZXIsIGFuZAotCQkJICogZmlyZSBvZmYgdGhlIChwb3NzaWJseSkgYmxvY2tpbmcgaXdsMzk0NV9zZW5kX2NtZCgpCisJCQkgKiBmaXJlIG9mZiB0aGUgKHBvc3NpYmx5KSBibG9ja2luZyBpd2xfc2VuZF9jbWQoKQogCQkJICogYXMgd2UgcmVjbGFpbSB0aGUgZHJpdmVyIGNvbW1hbmQgcXVldWUgKi8KIAkJCWlmIChyeGIgJiYgcnhiLT5za2IpCi0JCQkJaXdsMzk0NV90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKKwkJCQlpd2xfdHhfY21kX2NvbXBsZXRlKHByaXYsIHJ4Yik7CiAJCQllbHNlCi0JCQkJSVdMX1dBUk5JTkcoIkNsYWltIG51bGwgcnhiP1xuIik7CisJCQkJSVdMX1dBUk4ocHJpdiwgIkNsYWltIG51bGwgcnhiP1xuIik7CiAJCX0KIAogCQkvKiBGb3Igbm93IHdlIGp1c3QgZG9uJ3QgcmUtdXNlIGFueXRoaW5nLiAgV2UgY2FuIHR3ZWFrIHRoaXMKQEAgLTM4ODIsOCArMTg1Miw5IEBACiAJCQlyeGItPnNrYiA9IE5VTEw7CiAJCX0KIAotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+ZG1hX2FkZHIsCi0JCQkJIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeGItPnJlYWxfZG1hX2FkZHIsCisJCQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcHJpdi0+cnhxLnJ4X3VzZWQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKQEAgLTM5MDUsMTAyICsxODc2LDE0IEBACiAJaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwogfQogCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFNlbmQgbmV3IHdyaXRlIGluZGV4IHRvIGhhcmR3YXJlCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKQotewotCXUzMiByZWcgPSAwOwotCWludCByYyA9IDA7Ci0JaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQotCWlmICh0eHEtPm5lZWRfdXBkYXRlID09IDApCi0JCXJldHVybiByYzsKLQotCS8qIGlmIHdlJ3JlIHRyeWluZyB0byBzYXZlIHBvd2VyICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpKSB7Ci0JCS8qIHdha2UgdXAgbmljIGlmIGl0J3MgcG93ZXJlZCBkb3duIC4uLgotCQkgKiB1Q29kZSB3aWxsIHdha2UgdXAsIGFuZCBpbnRlcnJ1cHQgdXMgYWdhaW4sIHNvIG5leHQKLQkJICogdGltZSB3ZSdsbCBza2lwIHRoaXMgcGFydC4gKi8KLQkJcmVnID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCi0JCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiUmVxdWVzdGluZyB3YWtldXAsIEdQMSA9IDB4JXhcbiIsIHJlZyk7Ci0JCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJLyogcmVzdG9yZSB0aGlzIHF1ZXVlJ3MgcGFyYW1ldGVycyBpbiBuaWMgaGFyZHdhcmUuICovCi0JCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkJICAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0JLyogZWxzZSBub3QgaW4gcG93ZXItc2F2ZSBtb2RlLCB1Q29kZSB3aWxsIG5ldmVyIHNsZWVwIHdoZW4gd2UncmUKLQkgKiB0cnlpbmcgdG8gdHggKGR1cmluZyBSRktJTEwsIHdlJ3JlIG5vdCB0cnlpbmcgdG8gdHgpLiAqLwotCX0gZWxzZQotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAotCQkJICAgIHR4cS0+cS53cml0ZV9wdHIgfCAodHhxX2lkIDw8IDgpKTsKLQotCXR4cS0+bmVlZF91cGRhdGUgPSAwOwotCi0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfcnhfY29uZmlnX2NtZChzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbikKLXsKLQlJV0xfREVCVUdfUkFESU8oIlJYIENPTkZJRzpcbiIpOwotCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCi0JCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCi0JCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlJV0xfREVCVUdfSVNSKCJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXRfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOSV9TRVRfTUFTSyk7Ci19Ci0KLQogLyogY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGZsdXNoIGFueSBzY2hlZHVsZWQgdGFza2xldCAqLwotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zeW5jaHJvbml6ZV9pcnEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiB3YWl0IHRvIG1ha2Ugc3VyZSB3ZSBmbHVzaCBwZW5kaW5nIHRhc2tsZXQqLwogCXN5bmNocm9uaXplX2lycShwcml2LT5wY2lfZGV2LT5pcnEpOwogCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWNsZWFyX2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOwotCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gdUNvZGUvTklDIHRvIGhvc3QgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIGFja25vd2xlZGdlL2NsZWFyL3Jlc2V0IGFueSBpbnRlcnJ1cHRzIHN0aWxsIHBlbmRpbmcKLQkgKiBmcm9tIHVDb2RlIG9yIGZsb3cgaGFuZGxlciAoUngvVHggRE1BKSAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweGZmZmZmZmZmKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCUlXTF9ERUJVR19JU1IoIkRpc2FibGVkIGludGVycnVwdHNcbiIpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqZGVzY19sb29rdXAoaW50IGkpCiB7CiAJc3dpdGNoIChpKSB7CkBAIC00MDI0LDcgKzE5MDcsNyBAQAogI2RlZmluZSBFUlJPUl9TVEFSVF9PRkZTRVQgICgxICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEVSUk9SX0VMRU1fU0laRSAgICAgKDcgKiBzaXplb2YodTMyKSkKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgaTsKIAl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwpAQCAtNDAzNCw0OSArMTkxNyw1MCBAQAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmVycm9yX2V2ZW50X3RhYmxlX3B0cik7CiAKIAlpZiAoIWl3bDM5NDVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKLQljb3VudCA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAorCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7CiAJfQogCi0JSVdMX0VSUk9SKCJEZXNjICAgICAgIFRpbWUgICAgICAgYXNydFBDICBibGluazIgIgorCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgVGltZSAgICAgICBhc3J0UEMgIGJsaW5rMiAiCiAJCSAgImlsaW5rMSAgbm1pUEMgICBMaW5lXG4iKTsKIAlmb3IgKGkgPSBFUlJPUl9TVEFSVF9PRkZTRVQ7CiAJICAgICBpIDwgKGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSArIEVSUk9SX1NUQVJUX09GRlNFVDsKIAkgICAgIGkgKz0gRVJST1JfRUxFTV9TSVpFKSB7Ci0JCWRlc2MgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkpOworCQlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkpOwogCQl0aW1lID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDEgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDEgKiBzaXplb2YodTMyKSk7CiAJCWJsaW5rMSA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAyICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAyICogc2l6ZW9mKHUzMikpOwogCQlibGluazIgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMyAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMyAqIHNpemVvZih1MzIpKTsKIAkJaWxpbmsxID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDQgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDQgKiBzaXplb2YodTMyKSk7CiAJCWlsaW5rMiA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA1ICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA1ICogc2l6ZW9mKHUzMikpOwogCQlkYXRhMSA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA2ICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA2ICogc2l6ZW9mKHUzMikpOwogCi0JCUlXTF9FUlJPUgotCQkgICAgKCIlLTEzcyAoIyVkKSAlMDEwdSAweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVggJXVcblxuIiwKLQkJICAgICBkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgYmxpbmsxLCBibGluazIsCi0JCSAgICAgaWxpbmsxLCBpbGluazIsIGRhdGExKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIiUtMTNzICgjJWQpICUwMTB1IDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WCAldVxuXG4iLAorCQkJZGVzY19sb29rdXAoZGVzYyksIGRlc2MsIHRpbWUsIGJsaW5rMSwgYmxpbmsyLAorCQkJaWxpbmsxLCBpbGluazIsIGRhdGExKTsKIAl9CiAKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiB9CiAKQEAgLTQwODUsOSArMTk2OSw5IEBACiAvKioKICAqIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCiAgKgotICogTk9URTogTXVzdCBiZSBjYWxsZWQgd2l0aCBpd2wzOTQ1X2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCisgKiBOT1RFOiBNdXN0IGJlIGNhbGxlZCB3aXRoIGl3bF9ncmFiX25pY19hY2Nlc3MoKSBhbHJlYWR5IG9idGFpbmVkIQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgc3RhcnRfaWR4LAorc3RhdGljIHZvaWQgaXdsMzk0NV9wcmludF9ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgc3RhcnRfaWR4LAogCQkJCXUzMiBudW1fZXZlbnRzLCB1MzIgbW9kZSkKIHsKIAl1MzIgaTsKQEAgLTQxMTEsMjEgKzE5OTUsMjIgQEAKIAkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCiAJICogcGxhY2UgZXZlbnQgaWQgIyBhdCBmYXIgcmlnaHQgZm9yIGVhc2llciB2aXN1YWwgcGFyc2luZy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7Ci0JCWV2ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CisJCWV2ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJcHRyICs9IHNpemVvZih1MzIpOwotCQl0aW1lID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CisJCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCWlmIChtb2RlID09IDApCi0JCQlJV0xfRVJST1IoIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOyAvKiBkYXRhLCBldiAqLwotCQllbHNlIHsKLQkJCWRhdGEgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJaWYgKG1vZGUgPT0gMCkgeworCQkJLyogZGF0YSwgZXYgKi8KKwkJCUlXTF9FUlIocHJpdiwgIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOworCQl9IGVsc2UgeworCQkJZGF0YSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCQlJV0xfRVJST1IoIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGRhdGEsIGV2KTsKKwkJCUlXTF9FUlIocHJpdiwgIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGRhdGEsIGV2KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmM7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTQxMzcsMzIgKzIwMjIsMzIgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogZXZlbnQgbG9nIGhlYWRlciAqLwotCWNhcGFjaXR5ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwotCW1vZGUgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKLQludW1fd3JhcHMgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgyICogc2l6ZW9mKHUzMikpKTsKLQluZXh0X2VudHJ5ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CisJY2FwYWNpdHkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwltb2RlID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKKwludW1fd3JhcHMgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOworCW5leHRfZW50cnkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDMgKiBzaXplb2YodTMyKSkpOwogCiAJc2l6ZSA9IG51bV93cmFwcyA/IGNhcGFjaXR5IDogbmV4dF9lbnRyeTsKIAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCisJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKIAkJICBzaXplLCBudW1fd3JhcHMpOwogCiAJLyogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLCBzdGFydCBhdCB0aGUgb2xkZXN0IGVudHJ5LApAQCAtNDE3NCw0OCArMjA1OSwxMCBAQAogCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KIAlpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LCBtb2RlKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCS8qIFNldCB0aGUgRlcgZXJyb3IgZmxhZyAtLSBjbGVhcmVkIG9uIGl3bDM5NDVfZG93biAqLwotCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCi0JY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgSVdMX0RMX0ZXX0VSUk9SUykgewotCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKLQkJaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2cocHJpdik7Ci0JCWl3bDM5NDVfcHJpbnRfcnhfY29uZmlnX2NtZCgmcHJpdi0+c3RhZ2luZ19yeG9uKTsKLQl9Ci0jZW5kaWYKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKLQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0ICovCi0JY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9GV19FUlJPUlMsCi0JCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7Ci0KLQkJaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQkJbWVtY3B5KCZwcml2LT5yZWNvdmVyeV9yeG9uLCAmcHJpdi0+YWN0aXZlX3J4b24sCi0JCQkgICAgICAgc2l6ZW9mKHByaXYtPnJlY292ZXJ5X3J4b24pKTsKLQkJCXByaXYtPmVycm9yX3JlY292ZXJpbmcgPSAxOwotCQl9Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00MjMyLDEyICsyMDc5LDEyIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2lycV90YXNrbGV0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2lycV90YXNrbGV0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgaW50YSwgaGFuZGxlZCA9IDA7CiAJdTMyIGludGFfZmg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJdTMyIGludGFfbWFzazsKICNlbmRpZgogCkBAIC00MjQ2LDIwICsyMDkzLDIwIEBACiAJLyogQWNrL2NsZWFyL3Jlc2V0IHBlbmRpbmcgdUNvZGUgaW50ZXJydXB0cy4KIAkgKiBOb3RlOiAgU29tZSBiaXRzIGluIENTUl9JTlQgYXJlICJPUiIgb2YgYml0cyBpbiBDU1JfRkhfSU5UX1NUQVRVUywKIAkgKiAgYW5kIHdpbGwgY2xlYXIgb25seSB3aGVuIENTUl9GSF9JTlRfU1RBVFVTIGdldHMgY2xlYXJlZC4gKi8KLQlpbnRhID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIGludGEpOworCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIGludGEpOwogCiAJLyogQWNrL2NsZWFyL3Jlc2V0IHBlbmRpbmcgZmxvdy1oYW5kbGVyIChETUEpIGludGVycnVwdHMuCiAJICogQW55IG5ldyBpbnRlcnJ1cHRzIHRoYXQgaGFwcGVuIGFmdGVyIHRoaXMsIGVpdGhlciB3aGlsZSB3ZSdyZQogCSAqIGluIHRoaXMgdGFza2xldCwgb3IgbGF0ZXIsIHdpbGwgc2hvdyB1cCBpbiBuZXh0IElTUi90YXNrbGV0LiAqLwotCWludGFfZmggPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCBpbnRhX2ZoKTsKKwlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKIAkJLyoganVzdCBmb3IgZGVidWcgKi8KLQkJaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJSVdMX0RFQlVHX0lTUigiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCisJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCiAJCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwogCX0KICNlbmRpZgpAQCAtNDI3NSwxMiArMjEyMiwxMiBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KLQkJaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQkJaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOworCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0hXX0VSUjsKIApAQCAtNDI4OSwxNiArMjEzNiwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CiAJCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KIAkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpCi0JCQlJV0xfREVCVUdfSVNSKCJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgorCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKIAkJCQkgICAgICAidGhlIGZyYW1lL2ZyYW1lcy5cbiIpOwogCiAJCS8qIEFsaXZlIG5vdGlmaWNhdGlvbiB2aWEgUnggaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlYWwgd29yayAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0FMSVZFKQotCQkJSVdMX0RFQlVHX0lTUigiQWxpdmUgaW50ZXJydXB0XG4iKTsKKwkJCUlXTF9ERUJVR19JU1IocHJpdiwgIkFsaXZlIGludGVycnVwdFxuIik7CiAJfQogI2VuZGlmCiAJLyogU2FmZWx5IGlnbm9yZSB0aGVzZSBiaXRzIGZvciBkZWJ1ZyBjaGVja3MgYmVsb3cgKi8KQEAgLTQzMDYsMjIgKzIxNTMsMjIgQEAKIAogCS8qIEVycm9yIGRldGVjdGVkIGJ5IHVDb2RlICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nIDB4JVguXG4iLAotCQkJICBpbnRhKTsKLQkJaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKKwkJCSJSZXN0YXJ0aW5nIDB4JVguXG4iLCBpbnRhKTsKKwkJaXdsX2lycV9oYW5kbGVfZXJyb3IocHJpdik7CiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfU1dfRVJSOwogCX0KIAogCS8qIHVDb2RlIHdha2VzIHVwIGFmdGVyIHBvd2VyLWRvd24gc2xlZXAgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1dBS0VVUCkgewotCQlJV0xfREVCVUdfSVNSKCJXYWtldXAgaW50ZXJydXB0XG4iKTsKLQkJaXdsMzk0NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT5yeHEpOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVswXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzFdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMl0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVszXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzRdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNV0pOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJXYWtldXAgaW50ZXJydXB0XG4iKTsKKwkJaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsyXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzNdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNF0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs1XSk7CiAKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9XQUtFVVA7CiAJfQpAQCAtNDMzNSw0MzIgKzIxODIsNjMgQEAKIAl9CiAKIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0ZIX1RYKSB7Ci0JCUlXTF9ERUJVR19JU1IoIlR4IGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIlR4IGludGVycnVwdFxuIik7CiAKLQkJaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAoMSA8PCA2KSk7Ci0JCWlmICghaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKLQkJCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwKLQkJCQkJICAgICBGSF9UQ1NSX0NSRURJVAotCQkJCQkgICAgIChBTE1fRkhfU1JWQ19DSE5MKSwgMHgwKTsKLQkJCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgKDEgPDwgNikpOworCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RDU1JfQ1JFRElUCisJCQkJCSAgICAgKEZIMzlfU1JWQ19DSE5MKSwgMHgwKTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCX0KIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9GSF9UWDsKIAl9CiAKIAlpZiAoaW50YSAmIH5oYW5kbGVkKQotCQlJV0xfRVJST1IoIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOworCQlJV0xfRVJSKHByaXYsICJVbmhhbmRsZWQgSU5UQSBiaXRzIDB4JTA4eFxuIiwgaW50YSAmIH5oYW5kbGVkKTsKIAogCWlmIChpbnRhICYgfkNTUl9JTklfU0VUX01BU0spIHsKLQkJSVdMX1dBUk5JTkcoIkRpc2FibGVkIElOVEEgYml0cyAweCUwOHggd2VyZSBwZW5kaW5nXG4iLAorCQlJV0xfV0FSTihwcml2LCAiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCiAJCQkgaW50YSAmIH5DU1JfSU5JX1NFVF9NQVNLKTsKLQkJSVdMX1dBUk5JTkcoIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKKwkJSVdMX1dBUk4ocHJpdiwgIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KIAkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgewotCQlpbnRhID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JCWludGFfbWFzayA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCWludGFfZmggPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JCUlXTF9ERUJVR19JU1IoIkVuZCBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eCwgIgorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisJCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOworCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7CisJCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCiAJCQkiZmxhZ3MgMHglMDhseFxuIiwgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoLCBmbGFncyk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXdsMzk0NV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKLQl1MzIgaW50YSwgaW50YV9tYXNrOwotCXUzMiBpbnRhX2ZoOwotCWlmICghcHJpdikKLQkJcmV0dXJuIElSUV9OT05FOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAotCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KLQkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgotCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLwotCWludGFfbWFzayA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOwotCi0JLyogRGlzY292ZXIgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlL3BlbmRpbmcgKi8KLQlpbnRhID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQotCS8qIElnbm9yZSBpbnRlcnJ1cHQgaWYgdGhlcmUncyBub3RoaW5nIGluIE5JQyB0byBzZXJ2aWNlLgotCSAqIFRoaXMgbWF5IGJlIGR1ZSB0byBJUlEgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UsCi0JICogb3IgZHVlIHRvIHNwb3JhZGljIGludGVycnVwdHMgdGhyb3duIGZyb20gb3VyIE5JQy4gKi8KLQlpZiAoIWludGEgJiYgIWludGFfZmgpIHsKLQkJSVdMX0RFQlVHX0lTUigiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOwotCQlnb3RvIG5vbmU7Ci0JfQotCi0JaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7Ci0JCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkICovCi0JCUlXTF9XQVJOSU5HKCJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOwotCQlnb3RvIHVucGx1Z2dlZDsKLQl9Ci0KLQlJV0xfREVCVUdfSVNSKCJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCi0JCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7Ci0KLQlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7Ci0KLQkvKiBpd2wzOTQ1X2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCi0JaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci11bnBsdWdnZWQ6Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gbm9uZToKLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9OT05FOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiogRUVQUk9NIEJBTkRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGUgaXdsMzk0NV9lZXByb21fYmFuZCBkZWZpbml0aW9ucyBiZWxvdyBwcm92aWRlIHRoZSBtYXBwaW5nIGZyb20gdGhlCi0gKiBFRVBST00gY29udGVudHMgdG8gdGhlIHNwZWNpZmljIGNoYW5uZWwgbnVtYmVyIHN1cHBvcnRlZCBmb3IgZWFjaAotICogYmFuZC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgaXdsMzk0NV9wcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzWzRdIGZyb20gdGhlIGJhbmRfMwotICogZGVmaW5pdGlvbiBiZWxvdyBtYXBzIHRvIHBoeXNpY2FsIGNoYW5uZWwgNDIgaW4gdGhlIDUuMkdIeiBzcGVjdHJ1bS4KLSAqIFRoZSBzcGVjaWZpYyBnZW9ncmFwaHkgYW5kIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGF0IGNoYW5uZWwKLSAqIGlzIGNvbnRhaW5lZCBpbiB0aGUgZWVwcm9tIG1hcCBpdHNlbGYuCi0gKgotICogRHVyaW5nIGluaXQsIHdlIGNvcHkgdGhlIGVlcHJvbSBpbmZvcm1hdGlvbiBhbmQgY2hhbm5lbCBtYXAKLSAqIGluZm9ybWF0aW9uIGludG8gcHJpdi0+Y2hhbm5lbF9pbmZvXzI0LzUyIGFuZCBwcml2LT5jaGFubmVsX21hcF8yNC81MgotICoKLSAqIGNoYW5uZWxfbWFwXzI0LzUyIHByb3ZpZGVzIHRoZSBpbmRleCBpbiB0aGUgY2hhbm5lbF9pbmZvIGFycmF5IGZvciBhCi0gKiBnaXZlbiBjaGFubmVsLiAgV2UgaGF2ZSB0byBoYXZlIHR3byBzZXBhcmF0ZSBtYXBzIGFzIHRoZXJlIGlzIGNoYW5uZWwKLSAqIG92ZXJsYXAgd2l0aCB0aGUgMi40R0h6IGFuZCA1LjJHSHogc3BlY3RydW0gYXMgc2VlbiBpbiBiYW5kXzEgYW5kCi0gKiBiYW5kXzIKLSAqCi0gKiBBIHZhbHVlIG9mIDB4ZmYgc3RvcmVkIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbAotICogaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgYXQgYWxsLgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZSBpbiB0aGUgY2hhbm5lbF9tYXAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90Ci0gKiB2YWxpZCBmb3IgVHggd2l0aCB0aGUgY3VycmVudCBoYXJkd2FyZS4gIFRoaXMgbWVhbnMgdGhhdAotICogd2hpbGUgdGhlIHN5c3RlbSBjYW4gdHVuZSBhbmQgcmVjZWl2ZSBvbiBhIGdpdmVuIGNoYW5uZWwsIGl0IG1heSBub3QKLSAqIGJlIGFibGUgdG8gYXNzb2NpYXRlIG9yIHRyYW5zbWl0IGFueSBmcmFtZXMgb24gdGhhdAotICogY2hhbm5lbC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBpbmZvcm1hdGlvbiBmb3IgdGhhdAotICogZW50cnkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogMi40IEdIeiAqLwotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfMVsxNF0gPSB7Ci0JMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0Ci19OwotCi0vKiA1LjIgR0h6IGJhbmRzICovCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8yW10gPSB7CS8qIDQ5MTUtNTA4ME1IeiAqLwotCTE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2LCA3LCA4LCAxMSwgMTIsIDE2Ci19OwotCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8zW10gPSB7CS8qIDUxNzAtNTMyME1IeiAqLwotCTM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzRbXSA9IHsJLyogNTUwMC01NzAwTUh6ICovCi0JMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzVbXSA9IHsJLyogNTcyNS01ODI1TUh6ICovCi0JMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQotfTsKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2JhbmRfcmVmZXJlbmNlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBiYW5kLAotCQkJCSAgICBpbnQgKmVlcHJvbV9jaF9jb3VudCwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwKLQkJCQkgICAgKiplZXByb21fY2hfaW5mbywKLQkJCQkgICAgY29uc3QgdTggKiplZXByb21fY2hfaW5kZXgpCi17Ci0Jc3dpdGNoIChiYW5kKSB7Ci0JY2FzZSAxOgkJLyogMi40R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF8xKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfMV9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfMTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJLyogNC45R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF8yKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfMl9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfMjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgkJLyogNS4yR0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF8zKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfM19jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfMzsKLQkJYnJlYWs7Ci0JY2FzZSA0OgkJLyogNS41R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF80KTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfNF9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfNDsKLQkJYnJlYWs7Ci0JY2FzZSA1OgkJLyogNS43R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF81KTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfNV9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfNTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLS8qKgotICogaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvIC0gRmluZCBkcml2ZXIncyBwcml2YXRlIGNoYW5uZWwgaW5mbwotICoKLSAqIEJhc2VkIG9uIGJhbmQgYW5kIGNoYW5uZWwgbnVtYmVyLgotICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpCi17Ci0JaW50IGk7Ci0KLQlzd2l0Y2ggKGJhbmQpIHsKLQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6Ci0JCWZvciAoaSA9IDE0OyBpIDwgcHJpdi0+Y2hhbm5lbF9jb3VudDsgaSsrKSB7Ci0JCQlpZiAocHJpdi0+Y2hhbm5lbF9pbmZvW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKLQkJCQlyZXR1cm4gJnByaXYtPmNoYW5uZWxfaW5mb1tpXTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKLQkJaWYgKGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KQotCQkJcmV0dXJuICZwcml2LT5jaGFubmVsX2luZm9bY2hhbm5lbCAtIDFdOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9OVU1fQkFORFM6Ci0JCVdBUk5fT04oMSk7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNkZWZpbmUgQ0hFQ0tfQU5EX1BSSU5UKHgpICgoZWVwcm9tX2NoX2luZm9bY2hdLmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfIyN4KSBcCi0JCQkgICAgPyAjIHggIiAiIDogIiIpCi0KLS8qKgotICogaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwIC0gU2V0IHVwIGRyaXZlcidzIGluZm8gZm9yIGFsbCBwb3NzaWJsZSBjaGFubmVscwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCBlZXByb21fY2hfY291bnQgPSAwOwotCWNvbnN0IHU4ICplZXByb21fY2hfaW5kZXggPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsICplZXByb21fY2hfaW5mbyA9IE5VTEw7Ci0JaW50IGJhbmQsIGNoOwotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCWlmIChwcml2LT5jaGFubmVsX2NvdW50KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsIG1hcCBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwcml2LT5lZXByb20udmVyc2lvbiA8IDB4MmYpIHsKLQkJSVdMX1dBUk5JTkcoIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCi0JCQkgICAgcHJpdi0+ZWVwcm9tLnZlcnNpb24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgaW5mbyBmcm9tIEVFUFJPTVxuIik7Ci0KLQlwcml2LT5jaGFubmVsX2NvdW50ID0KLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzIpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzMpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzQpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzUpOwotCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKLQotCXByaXYtPmNoYW5uZWxfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbykgKgotCQkJCSAgICAgcHJpdi0+Y2hhbm5lbF9jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5jaGFubmVsX2luZm8pIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbF9pbmZvXG4iKTsKLQkJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNoX2luZm8gPSBwcml2LT5jaGFubmVsX2luZm87Ci0KLQkvKiBMb29wIHRocm91Z2ggdGhlIDUgRUVQUk9NIGJhbmRzIGFkZGluZyB0aGVtIGluIG9yZGVyIHRvIHRoZQotCSAqIGNoYW5uZWwgbWFwIHdlIG1haW50YWluICh0aGF0IGNvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhbgotCSAqIHdoYXQganVzdCBpbiB0aGUgRUVQUk9NKSAqLwotCWZvciAoYmFuZCA9IDE7IGJhbmQgPD0gNTsgYmFuZCsrKSB7Ci0KLQkJaXdsMzk0NV9pbml0X2JhbmRfcmVmZXJlbmNlKHByaXYsIGJhbmQsICZlZXByb21fY2hfY291bnQsCi0JCQkJCSZlZXByb21fY2hfaW5mbywgJmVlcHJvbV9jaF9pbmRleCk7Ci0KLQkJLyogTG9vcCB0aHJvdWdoIGVhY2ggYmFuZCBhZGRpbmcgZWFjaCBvZiB0aGUgY2hhbm5lbHMgKi8KLQkJZm9yIChjaCA9IDA7IGNoIDwgZWVwcm9tX2NoX2NvdW50OyBjaCsrKSB7Ci0JCQljaF9pbmZvLT5jaGFubmVsID0gZWVwcm9tX2NoX2luZGV4W2NoXTsKLQkJCWNoX2luZm8tPmJhbmQgPSAoYmFuZCA9PSAxKSA/IElFRUU4MDIxMV9CQU5EXzJHSFogOgotCQkJICAgIElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0KLQkJCS8qIHBlcm1hbmVudGx5IHN0b3JlIEVFUFJPTSdzIGNoYW5uZWwgcmVndWxhdG9yeSBmbGFncwotCQkJICogICBhbmQgbWF4IHBvd2VyIGluIGNoYW5uZWwgaW5mbyBkYXRhYmFzZS4gKi8KLQkJCWNoX2luZm8tPmVlcHJvbSA9IGVlcHJvbV9jaF9pbmZvW2NoXTsKLQotCQkJLyogQ29weSB0aGUgcnVuLXRpbWUgZmxhZ3Mgc28gdGhleSBhcmUgdGhlcmUgZXZlbiBvbgotCQkJICogaW52YWxpZCBjaGFubmVscyAqLwotCQkJY2hfaW5mby0+ZmxhZ3MgPSBlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3M7Ci0KLQkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgotCQkJCQkgICAgICAgIk5vIHRyYWZmaWNcbiIsCi0JCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAotCQkJCQkgICAgICAgY2hfaW5mby0+ZmxhZ3MsCi0JCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkJCSAgICAgICAiNS4yIiA6ICIyLjQiKTsKLQkJCQljaF9pbmZvKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIEluaXRpYWxpemUgcmVndWxhdG9yeS1iYXNlZCBydW4tdGltZSBkYXRhICovCi0JCQljaF9pbmZvLT5tYXhfcG93ZXJfYXZnID0gY2hfaW5mby0+Y3Vycl90eHBvdyA9Ci0JCQkgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7Ci0JCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7Ci0JCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwotCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCIKLQkJCQkgICAgICAgIiAlZGRCbSk6IEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKLQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKLQkJCQkgICAgICAgaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbykgPwotCQkJCSAgICAgICAiNS4yIiA6ICIyLjQiLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoVkFMSUQpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoSUJTUyksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChBQ1RJVkUpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoUkFEQVIpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoV0lERSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChERlMpLAotCQkJCSAgICAgICBlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MsCi0JCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnLAotCQkJCSAgICAgICAoKGVlcHJvbV9jaF9pbmZvW2NoXS4KLQkJCQkJIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykKLQkJCQkJJiYgIShlZXByb21fY2hfaW5mb1tjaF0uCi0JCQkJCSAgICAgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpCi0JCQkJICAgICAgID8gIiIgOiAibm90ICIpOwotCi0JCQkvKiBTZXQgdGhlIHVzZXJfdHhwb3dlcl9saW1pdCB0byB0aGUgaGlnaGVzdCBwb3dlcgotCQkJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVsICovCi0JCQlpZiAoZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcgPgotCQkJICAgIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPQotCQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQotCQkJY2hfaW5mbysrOwotCQl9Ci0JfQotCi0JLyogU2V0IHVwIHR4cG93ZXIgc2V0dGluZ3MgaW4gZHJpdmVyIGZvciBhbGwgY2hhbm5lbHMgKi8KLQlpZiAoaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShwcml2KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGl3bDM5NDVfZnJlZV9jaGFubmVsX21hcCAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9jaGFubmVsX21hcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7Ci0JcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7Ci19Ci0KLS8qIEZvciBhY3RpdmUgc2NhbiwgbGlzdGVuIEFDVElWRV9EV0VMTF9USU1FIChtc2VjKSBvbiBlYWNoIGNoYW5uZWwgYWZ0ZXIKLSAqIHNlbmRpbmcgcHJvYmUgcmVxLiAgVGhpcyBzaG91bGQgYmUgc2V0IGxvbmcgZW5vdWdoIHRvIGhlYXIgcHJvYmUgcmVzcG9uc2VzCi0gKiBmcm9tIG1vcmUgdGhhbiBvbmUgQVAuICAqLwotI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQgICAgKDMwKQkvKiBhbGwgdGltZXMgaW4gbXNlYyAqLwotI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgICAgKDIwKQotCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICgzKQotI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl81MkdIWiAoMikKLQotLyogRm9yIGZhc3RlciBhY3RpdmUgc2Nhbm5pbmcsIHNjYW4gd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYW5uZWwgaWYgZmV3ZXIgdGhhbgotICogUExDUF9RVUlFVF9USFJFU0ggcGFja2V0cyBhcmUgaGVhcmQgb24gdGhpcyBjaGFubmVsIHdpdGhpbgotICogQUNUSVZFX1FVSUVUX1RJTUUgYWZ0ZXIgc2VuZGluZyBwcm9iZSByZXF1ZXN0LiAgVGhpcyBzaG9ydGVucyB0aGUgZHdlbGwKLSAqIHRpbWUgaWYgaXQncyBhIHF1aWV0IGNoYW5uZWwgKG5vdGhpbmcgcmVzcG9uZGVkIHRvIG91ciBwcm9iZSwgYW5kIHRoZXJlJ3MKLSAqIG5vIG90aGVyIHRyYWZmaWMpLgotICogRGlzYWJsZSAicXVpZXQiIGZlYXR1cmUgYnkgc2V0dGluZyBQTENQX1FVSUVUX1RIUkVTSCB0byAwLiAqLwotI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxKQkvKiBwYWNrZXRzICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEwKQkvKiBtc2VjICovCi0KLS8qIEZvciBwYXNzaXZlIHNjYW4sIGxpc3RlbiBQQVNTSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbC4KLSAqIE11c3QgYmUgc2V0IGxvbmdlciB0aGFuIGFjdGl2ZSBkd2VsbCB0aW1lLgotICogRm9yIHRoZSBtb3N0IHJlbGlhYmxlIHNjYW4sIHNldCA+IEFQIGJlYWNvbiBpbnRlcnZhbCAodHlwaWNhbGx5IDEwMG1zZWMpLiAqLwotI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0ICAgKDIwKQkvKiBhbGwgdGltZXMgaW4gbXNlYyAqLwotI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzUyICAgKDEwKQotI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICAgICAgKDEwMCkKLSNkZWZpbmUgSVdMX0NIQU5ORUxfVFVORV9USU1FICAgICAgIDUKLQotI2RlZmluZSBJV0xfU0NBTl9QUk9CRV9NQVNLKG4pCSAoQklUKG4pIHwgKEJJVChuKSAtIEJJVCgxKSkpCi0KLXN0YXRpYyBpbmxpbmUgdTE2IGl3bDM5NDVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJCQl1OCBuX3Byb2JlcykKLXsKLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzUyICsKLQkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICogKG5fcHJvYmVzICsgMSk7Ci0JZWxzZQotCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzI0ICsKLQkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICogKG5fcHJvYmVzICsgMSk7Ci19Ci0KLXN0YXRpYyB1MTYgaXdsMzk0NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCXUxNiBwYXNzaXZlID0gKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCSAgICBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICsgSVdMX1BBU1NJVkVfRFdFTExfVElNRV8yNCA6Ci0JICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzUyOwotCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQkvKiBJZiB3ZSdyZSBhc3NvY2lhdGVkLCB3ZSBjbGFtcCB0aGUgbWF4aW11bSBwYXNzaXZlCi0JCSAqIGR3ZWxsIHRpbWUgdG8gYmUgOTglIG9mIHRoZSBiZWFjb24gaW50ZXJ2YWwgKG1pbnVzCi0JCSAqIDIgKiBjaGFubmVsIHR1bmUgdGltZSkgKi8KLQkJcGFzc2l2ZSA9IHByaXYtPmJlYWNvbl9pbnQ7Ci0JCWlmICgocGFzc2l2ZSA+IElXTF9QQVNTSVZFX0RXRUxMX0JBU0UpIHx8ICFwYXNzaXZlKQotCQkJcGFzc2l2ZSA9IElXTF9QQVNTSVZFX0RXRUxMX0JBU0U7Ci0JCXBhc3NpdmUgPSAocGFzc2l2ZSAqIDk4KSAvIDEwMCAtIElXTF9DSEFOTkVMX1RVTkVfVElNRSAqIDI7Ci0JfQotCi0JcmV0dXJuIHBhc3NpdmU7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAogCQkJCSAgICAgdTggaXNfYWN0aXZlLCB1OCBuX3Byb2JlcywKIAkJCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwogCXUxNiBhY3RpdmVfZHdlbGwgPSAwOwogCWludCBhZGRlZCwgaTsKIAotCXNiYW5kID0gaXdsMzk0NV9nZXRfYmFuZChwcml2LCBiYW5kKTsKKwlzYmFuZCA9IGl3bF9nZXRfaHdfbW9kZShwcml2LCBiYW5kKTsKIAlpZiAoIXNiYW5kKQogCQlyZXR1cm4gMDsKIAogCWNoYW5uZWxzID0gc2JhbmQtPmNoYW5uZWxzOwogCi0JYWN0aXZlX2R3ZWxsID0gaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCwgbl9wcm9iZXMpOwotCXBhc3NpdmVfZHdlbGwgPSBpd2wzOTQ1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CisJYWN0aXZlX2R3ZWxsID0gaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7CisJcGFzc2l2ZV9kd2VsbCA9IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwogCiAJaWYgKHBhc3NpdmVfZHdlbGwgPD0gYWN0aXZlX2R3ZWxsKQogCQlwYXNzaXZlX2R3ZWxsID0gYWN0aXZlX2R3ZWxsICsgMTsKQEAgLTQ3NzEsOSArMjI0OSw5IEBACiAKIAkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNoYW5uZWxzW2ldLmh3X3ZhbHVlOwogCi0JCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgc2Nhbl9jaC0+Y2hhbm5lbCk7CisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBzY2FuX2NoLT5jaGFubmVsKTsKIAkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAorCQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKIAkJCQkgICAgICAgc2Nhbl9jaC0+Y2hhbm5lbCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDc5OCwxMiArMjI3NiwxMiBAQAogCQkgKiBoZWFyaW5nIGNsZWFyIFJ4IHBhY2tldCkuKi8KIAkJaWYgKElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSA+PSAyKSB7CiAJCQlpZiAobl9wcm9iZXMpCi0JCQkJc2Nhbl9jaC0+dHlwZSB8PSBJV0xfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKKwkJCQlzY2FuX2NoLT50eXBlIHw9IElXTDM5X1NDQU5fUFJPQkVfTUFTSyhuX3Byb2Jlcyk7CiAJCX0gZWxzZSB7CiAJCQkvKiB1Q29kZSB2MSBkb2VzIG5vdCBhbGxvdyBzZXR0aW5nIGRpcmVjdCBwcm9iZSBiaXRzIG9uCiAJCQkgKiBwYXNzaXZlIGNoYW5uZWwuICovCiAJCQlpZiAoKHNjYW5fY2gtPnR5cGUgJiAxKSAmJiBuX3Byb2JlcykKLQkJCQlzY2FuX2NoLT50eXBlIHw9IElXTF9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOworCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMMzlfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKIAkJfQogCiAJCS8qIFNldCB0eHBvd2VyIGxldmVscyB0byBkZWZhdWx0cyAqLwpAQCAtNDgyMSw3ICsyMjk5LDcgQEAKIAkJCSAqLwogCQl9CiAKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW5uaW5nICVkIFslcyAlZF1cbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FubmluZyAlZCBbJXMgJWRdXG4iLAogCQkJICAgICAgIHNjYW5fY2gtPmNoYW5uZWwsCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiAxKSA/ICJBQ1RJVkUiIDogIlBBU1NJVkUiLAogCQkJICAgICAgIChzY2FuX2NoLT50eXBlICYgMSkgPwpAQCAtNDgzMSwxMSArMjMwOSwxMSBAQAogCQlhZGRlZCsrOwogCX0KIAotCUlXTF9ERUJVR19TQ0FOKCJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOworCUlXTF9ERUJVR19TQ0FOKHByaXYsICJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOwogCXJldHVybiBhZGRlZDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2h3X3JhdGVzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfaHdfcmF0ZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlcykKIHsKIAlpbnQgaTsKQEAgLTQ4NDUsNyArMjMyMyw3IEBACiAJCXJhdGVzW2ldLmh3X3ZhbHVlID0gaTsgLyogUmF0ZSBzY2FsaW5nIHdpbGwgd29yayBvbiBpbmRleGVzICovCiAJCXJhdGVzW2ldLmh3X3ZhbHVlX3Nob3J0ID0gaTsKIAkJcmF0ZXNbaV0uZmxhZ3MgPSAwOwotCQlpZiAoKGkgPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHx8IChpIDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpIHsKKwkJaWYgKChpID4gSVdMMzlfTEFTVF9PRkRNX1JBVEUpIHx8IChpIDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpIHsKIAkJCS8qCiAJCQkgKiBJZiBDQ0sgIT0gMU0gdGhlbiBzZXQgc2hvcnQgcHJlYW1ibGUgcmF0ZSBmbGFnLgogCQkJICovCkBAIC00ODU1LDE0NSArMjMzMywxMyBAQAogCX0KIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2dlb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyB8fAotCSAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2JpdHJhdGVzKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwotCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSAqCi0JCQkgICBwcml2LT5jaGFubmVsX2NvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoYW5uZWxzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJhdGVzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSkgKiAoSVdMX1JBVEVfQ09VTlQgKyAxKSksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXJhdGVzKSB7Ci0JCWtmcmVlKGNoYW5uZWxzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogNS4yR0h6IGNoYW5uZWxzIHN0YXJ0IGFmdGVyIHRoZSAyLjRHSHogY2hhbm5lbHMgKi8KLQlzYmFuZCA9ICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQlzYmFuZC0+Y2hhbm5lbHMgPSAmY2hhbm5lbHNbQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpXTsKLQkvKiBqdXN0IE9GRE0gKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSAmcmF0ZXNbSVdMX0ZJUlNUX09GRE1fUkFURV07Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVCAtIElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0KLQlzYmFuZCA9ICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQlzYmFuZC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLQkvKiBPRkRNICYgQ0NLICovCi0Jc2JhbmQtPmJpdHJhdGVzID0gcmF0ZXM7Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVDsKLQotCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKLQlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7Ci0KLQlpd2wzOTQ1X2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCi0JZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKLQkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwotCi0JCS8qIEZJWE1FOiBtaWdodCBiZSByZW1vdmVkIGlmIHNjYW4gaXMgT0sqLwotCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2gpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoKSkKLQkJCXNiYW5kID0gICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQkJZWxzZQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCi0JCWdlb19jaCA9ICZzYmFuZC0+Y2hhbm5lbHNbc2JhbmQtPm5fY2hhbm5lbHMrK107Ci0KLQkJZ2VvX2NoLT5jZW50ZXJfZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaC0+Y2hhbm5lbCk7Ci0JCWdlb19jaC0+bWF4X3Bvd2VyID0gY2gtPm1heF9wb3dlcl9hdmc7Ci0JCWdlb19jaC0+bWF4X2FudGVubmFfZ2FpbiA9IDB4ZmY7Ci0JCWdlb19jaC0+aHdfdmFsdWUgPSBjaC0+Y2hhbm5lbDsKLQotCQlpZiAoaXNfY2hhbm5lbF92YWxpZChjaCkpIHsKLQkJCWlmICghKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQotCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkKLQkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQotCQkJaWYgKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUkFEQVI7Ci0KLQkJCWlmIChjaC0+bWF4X3Bvd2VyX2F2ZyA+IHByaXYtPm1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQpCi0JCQkJcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCA9Ci0JCQkJICAgIGNoLT5tYXhfcG93ZXJfYXZnOwotCQl9IGVsc2UgewotCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKLQkJfQotCi0JCS8qIFNhdmUgZmxhZ3MgZm9yIHJlZyBkb21haW4gdXNhZ2UgKi8KLQkJZ2VvX2NoLT5vcmlnX2ZsYWdzID0gZ2VvX2NoLT5mbGFnczsKLQotCQlJV0xfREVCVUdfSU5GTygiQ2hhbm5lbCAlZCBGcmVxPSVkWyVzR0h6XSAlcyBmbGFnPTAlWFxuIiwKLQkJCQljaC0+Y2hhbm5lbCwgZ2VvX2NoLT5jZW50ZXJfZnJlcSwKLQkJCQlpc19jaGFubmVsX2FfYmFuZChjaCkgPyAgIjUuMiIgOiAiMi40IiwKLQkJCQlnZW9fY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgPwotCQkJCSJyZXN0cmljdGVkIiA6ICJ2YWxpZCIsCi0JCQkJIGdlb19jaC0+ZmxhZ3MpOwotCX0KLQotCWlmICgocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9PSAwKSAmJgotCSAgICAgcHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogSW5jb3JyZWN0bHkgZGV0ZWN0ZWQgQkcgY2FyZCBhcyBBQkcuICBQbGVhc2Ugc2VuZCAiCi0JCSAgICAgICAieW91ciBQQ0kgSUQgMHglMDRYOjB4JTA0WCB0byBtYWludGFpbmVyLlxuIiwKLQkJICAgICAgIHByaXYtPnBjaV9kZXYtPmRldmljZSwgcHJpdi0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSk7Ci0JCSBwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpOwotCi0JaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMpCi0JCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQotCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKQotCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQotCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaXdsMzk0NV9mcmVlX2dlb3MgLSB1bmRvIGFsbG9jYXRpb25zIGluIGl3bDM5NDVfaW5pdF9nZW9zCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9nZW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+aWVlZV9jaGFubmVscyk7Ci0Ja2ZyZWUocHJpdi0+aWVlZV9yYXRlcyk7Ci0JY2xlYXJfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB1Q29kZSBkb3dubG9hZCBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9jb2RlKTsKIAlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9kYXRhKTsKQEAgLTUwMDcsMjkgKzIzNTMsMzAgQEAKICAqIGl3bDM5NDVfdmVyaWZ5X2luc3RfZnVsbCAtIHZlcmlmeSBydW50aW1lIHVDb2RlIGltYWdlIGluIGNhcmQgdnMuIGhvc3QsCiAgKiAgICAgbG9va2luZyBhdCBhbGwgZGF0YS4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X2Z1bGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfaW5zdF9mdWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKIHsKIAl1MzIgdmFsOwogCXUzMiBzYXZlX2xlbiA9IGxlbjsKIAlpbnQgcmMgPSAwOwogCXUzMiBlcnJjbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJICAgICAgIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAogCWVycmNudCA9IDA7CiAJZm9yICg7IGxlbiA+IDA7IGxlbiAtPSBzaXplb2YodTMyKSwgaW1hZ2UrKykgewogCQkvKiByZWFkIGRhdGEgY29tZXMgdGhyb3VnaCBzaW5nbGUgcG9ydCwgYXV0by1pbmNyIGFkZHIgKi8KIAkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCiAJCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KLQkJdmFsID0gX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKIAkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCiAJCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKIAkJCXJjID0gLUVJTzsKQEAgLTUwMzksMTAgKzIzODYsMTEgQEAKIAkJfQogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8oInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJ1Y29kZSBpbWFnZSBpbiBJTlNUUlVDVElPTiBtZW1vcnkgaXMgZ29vZFxuIik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDUzLDE2ICsyNDAxLDE2IEBACiAgKiAgIHVzaW5nIHNhbXBsZSBkYXRhIDEwMCBieXRlcyBhcGFydC4gIElmIHRoZXNlIHNhbXBsZSBwb2ludHMgYXJlIGdvb2QsCiAgKiAgIGl0J3MgYSBwcmV0dHkgZ29vZCBiZXQgdGhhdCBldmVyeXRoaW5nIGJldHdlZW4gdGhlbSBpcyBnb29kLCB0b28uCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQogewogCXUzMiB2YWw7CiAJaW50IHJjID0gMDsKIAl1MzIgZXJyY250ID0gMDsKIAl1MzIgaTsKIAotCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC01MDcwLDEyICsyNDE4LDEyIEBACiAJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCi0JCQlpICsgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCQl2YWwgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJaSArIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewogI2lmIDAgLyogRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gc2VlIGRldGFpbHMgKi8KLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIGksIHZhbCwgKmltYWdlKTsKICNlbmRpZgpAQCAtNTA4Niw3ICsyNDM0LDcgQEAKIAkJfQogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDk2LDcgKzI0NDQsNyBAQAogICogaXdsMzk0NV92ZXJpZnlfdWNvZGUgLSBkZXRlcm1pbmUgd2hpY2ggaW5zdHJ1Y3Rpb24gaW1hZ2UgaXMgaW4gU1JBTSwKICAqICAgIGFuZCB2ZXJpZnkgaXRzIGNvbnRlbnRzCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCV9fbGUzMiAqaW1hZ2U7CiAJdTMyIGxlbjsKQEAgLTUxMDcsNyArMjQ1NSw3IEBACiAJbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CiAJcmMgPSBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKIAlpZiAocmMgPT0gMCkgewotCQlJV0xfREVCVUdfSU5GTygiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJvb3RzdHJhcCB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTExNiw3ICsyNDY0LDcgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUxMjUsMTEgKzI0NzMsMTEgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfRVJST1IoIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CisJSVdMX0VSUihwcml2LCAiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKIAogCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KIAkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgpAQCAtNTE0MSwxNjAgKzI0ODksMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotLyogY2hlY2sgY29udGVudHMgb2Ygc3BlY2lhbCBib290c3RyYXAgdUNvZGUgU1JBTSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9ic20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCXUzMiByZWc7Ci0JdTMyIHZhbDsKLQotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKLQotCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLwotCXZhbCA9IGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7Ci0JZm9yIChyZWcgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKLQkgICAgIHJlZyA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7Ci0JCXZhbCA9IGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZyk7Ci0JCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewotCQkJSVdMX0VSUk9SKCJCU00gdUNvZGUgdmVyaWZpY2F0aW9uIGZhaWxlZCBhdCAiCi0JCQkJICAiYWRkciAweCUwOFgrJXUgKG9mICV1KSwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCi0JCQkJICBCU01fU1JBTV9MT1dFUl9CT1VORCwKLQkJCQkgIHJlZyAtIEJTTV9TUkFNX0xPV0VSX0JPVU5ELCBsZW4sCi0JCQkJICB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQlJV0xfREVCVUdfSU5GTygiQlNNIGJvb3RzdHJhcCB1Q29kZSBpbWFnZSBPS1xuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2xvYWRfYnNtIC0gTG9hZCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zCi0gKgotICogQlNNIG9wZXJhdGlvbjoKLSAqCi0gKiBUaGUgQm9vdHN0cmFwIFN0YXRlIE1hY2hpbmUgKEJTTSkgc3RvcmVzIGEgc2hvcnQgYm9vdHN0cmFwIHVDb2RlIHByb2dyYW0KLSAqIGluIHNwZWNpYWwgU1JBTSB0aGF0IGRvZXMgbm90IHBvd2VyIGRvd24gZHVyaW5nIFJGS0lMTC4gIFdoZW4gcG93ZXJpbmcgYmFjawotICogdXAgYWZ0ZXIgcG93ZXItc2F2aW5nIHNsZWVwcyAob3IgZHVyaW5nIGluaXRpYWwgdUNvZGUgbG9hZCksIHRoZSBCU00gbG9hZHMKLSAqIHRoZSBib290c3RyYXAgcHJvZ3JhbSBpbnRvIHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IsIGFuZCBzdGFydHMgaXQuCi0gKgotICogVGhlIGJvb3RzdHJhcCBwcm9ncmFtIGxvYWRzICh2aWEgRE1BKSBpbnN0cnVjdGlvbnMgYW5kIGRhdGEgZm9yIGEgbmV3Ci0gKiBwcm9ncmFtIGZyb20gaG9zdCBEUkFNIGxvY2F0aW9ucyBpbmRpY2F0ZWQgYnkgdGhlIGhvc3QgZHJpdmVyIGluIHRoZQotICogQlNNX0RSQU1fKiByZWdpc3RlcnMuICBPbmNlIHRoZSBuZXcgcHJvZ3JhbSBpcyBsb2FkZWQsIGl0IHN0YXJ0cwotICogYXV0b21hdGljYWxseS4KLSAqCi0gKiBXaGVuIGluaXRpYWxpemluZyB0aGUgTklDLCB0aGUgaG9zdCBkcml2ZXIgcG9pbnRzIHRoZSBCU00gdG8gdGhlCi0gKiAiaW5pdGlhbGl6ZSIgdUNvZGUgaW1hZ2UuICBUaGlzIHVDb2RlIHNldHMgdXAgc29tZSBpbnRlcm5hbCBkYXRhLCB0aGVuCi0gKiBub3RpZmllcyBob3N0IHZpYSAiaW5pdGlhbGl6ZSBhbGl2ZSIgdGhhdCBpdCBpcyBjb21wbGV0ZS4KLSAqCi0gKiBUaGUgaG9zdCB0aGVuIHJlcGxhY2VzIHRoZSBCU01fRFJBTV8qIHBvaW50ZXIgdmFsdWVzIHRvIHBvaW50IHRvIHRoZQotICogbm9ybWFsIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCBhIGJhY2t1cCB1Q29kZSBkYXRhIGNhY2hlIGJ1ZmZlcgotICogKGZpbGxlZCBpbml0aWFsbHkgd2l0aCBzdGFydGluZyBkYXRhIHZhbHVlcyBmb3IgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciksCi0gKiB0aGVuIHRyaWdnZXJzIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gbG9hZCBhbmQgbGF1bmNoIHRoZSBydW50aW1lIHVDb2RlLAotICogd2hpY2ggYmVnaW5zIG5vcm1hbCBvcGVyYXRpb24uCi0gKgotICogV2hlbiBkb2luZyBhIHBvd2VyLXNhdmUgc2h1dGRvd24sIHJ1bnRpbWUgdUNvZGUgc2F2ZXMgZGF0YSBTUkFNIGludG8KLSAqIHRoZSBiYWNrdXAgZGF0YSBjYWNoZSBpbiBEUkFNIGJlZm9yZSBTUkFNIGlzIHBvd2VyZWQgZG93bi4KLSAqCi0gKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAsIHRoZSBCU00gbG9hZHMgdGhlIGJvb3RzdHJhcCBwcm9ncmFtLiAgVGhpcyByZWxvYWRzCi0gKiB0aGUgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBiYWNrdXAgZGF0YSBjYWNoZSBpbnRvIFNSQU0sCi0gKiBhbmQgcmUtbGF1bmNoZXMgdGhlIHJ1bnRpbWUgdUNvZGUgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xvYWRfYnNtKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOwotCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlkbWFfYWRkcl90IHBpbnN0OwotCWRtYV9hZGRyX3QgcGRhdGE7Ci0JdTMyIGluc3RfbGVuOwotCXUzMiBkYXRhX2xlbjsKLQlpbnQgcmM7Ci0JaW50IGk7Ci0JdTMyIGRvbmU7Ci0JdTMyIHJlZ19vZmZzZXQ7Ci0KLQlJV0xfREVCVUdfSU5GTygiQmVnaW4gbG9hZCBic21cbiIpOwotCi0JLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLwotCWlmIChsZW4gPiBJV0xfTUFYX0JTTV9TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgdGhlICJJbml0aWFsaXplIiB1Q29kZQotCSAqICAgaW4gaG9zdCBEUkFNIC4uLiBob3N0IERSQU0gcGh5c2ljYWwgYWRkcmVzcyBiaXRzIDMxOjAgZm9yIDM5NDUuCi0JICogTk9URTogIGl3bDM5NDVfaW5pdGlhbGl6ZV9hbGl2ZV9zdGFydCgpIHdpbGwgcmVwbGFjZSB0aGVzZSB2YWx1ZXMsCi0JICogICAgICAgIGFmdGVyIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgaGFzIHJ1biwgdG8gcG9pbnQgdG8KLQkgKiAgICAgICAgcnVudGltZS9wcm90b2NvbCBpbnN0cnVjdGlvbnMgYW5kIGJhY2t1cCBkYXRhIGNhY2hlLiAqLwotCXBpbnN0ID0gcHJpdi0+dWNvZGVfaW5pdC5wX2FkZHI7Ci0JcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyOwotCWluc3RfbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47Ci0JZGF0YV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywgaW5zdF9sZW4pOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsIGRhdGFfbGVuKTsKLQotCS8qIEZpbGwgQlNNIG1lbW9yeSB3aXRoIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQlmb3IgKHJlZ19vZmZzZXQgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKLQkgICAgIHJlZ19vZmZzZXQgPCBCU01fU1JBTV9MT1dFUl9CT1VORCArIGxlbjsKLQkgICAgIHJlZ19vZmZzZXQgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspCi0JCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnX29mZnNldCwKLQkJCQkJICBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKLQotCXJjID0gaXdsMzk0NV92ZXJpZnlfYnNtKHByaXYpOwotCWlmIChyYykgewotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9TUkNfUkVHLCAweDApOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX0RTVF9SRUcsCi0JCQkJIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7Ci0KLQkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCi0JICogICB0byBwcmVwYXJlIHRvIGxvYWQgImluaXRpYWxpemUiIHVDb2RlICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRywKLQkJQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVCk7Ci0KLQkvKiBXYWl0IGZvciBsb2FkIG9mIGJvb3RzdHJhcCB1Q29kZSB0byBmaW5pc2ggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJZG9uZSA9IGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRyk7Ci0JCWlmICghKGRvbmUgJiBCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTApOwotCX0KLQlpZiAoaSA8IDEwMCkKLQkJSVdMX0RFQlVHX0lORk8oIkJTTSB3cml0ZSBjb21wbGV0ZSwgcG9sbCAlZCBpdGVyYXRpb25zXG4iLCBpKTsKLQllbHNlIHsKLQkJSVdMX0VSUk9SKCJCU00gd3JpdGUgZGlkIG5vdCBjb21wbGV0ZSFcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBFbmFibGUgZnV0dXJlIGJvb3QgbG9hZHMgd2hlbmV2ZXIgcG93ZXIgbWFuYWdlbWVudCB1bml0IHRyaWdnZXJzIGl0Ci0JICogICAoZS5nLiB3aGVuIHBvd2VyaW5nIGJhY2sgdXAgYWZ0ZXIgcG93ZXItc2F2ZSBzaHV0ZG93bikgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAotCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUX0VOKTsKLQotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfbmljX3N0YXJ0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X25pY19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogUmVtb3ZlIGFsbCByZXNldHMgdG8gYWxsb3cgTklDIHRvIG9wZXJhdGUgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCAwKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOwogfQogCiAvKioKQEAgLTUzMDIsOSArMjUwMCw5IEBACiAgKgogICogQ29weSBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQgdG8gZmV0Y2ggdmlhIGJ1cy1tYXN0ZXJpbmcKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9yZWFkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV91Y29kZSAqdWNvZGU7CisJc3RydWN0IGl3bF91Y29kZSAqdWNvZGU7CiAJaW50IHJldCA9IC1FSU5WQUwsIGluZGV4OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3OwogCS8qIGZpcm13YXJlIGZpbGUgbmFtZSBjb250YWlucyB1Q29kZS9kcml2ZXIgY29tcGF0aWJpbGl0eSB2ZXJzaW9uICovCkBAIC01MzIyLDcgKzI1MjAsNyBAQAogCQlzcHJpbnRmKGJ1ZiwgIiVzJXUlcyIsIG5hbWVfcHJlLCBpbmRleCwgIi51Y29kZSIpOwogCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZ1Y29kZV9yYXcsIGJ1ZiwgJnByaXYtPnBjaV9kZXYtPmRldik7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlJV0xfRVJST1IoIiVzIGZpcm13YXJlIGZpbGUgcmVxIGZhaWxlZDogUmVhc29uICVkXG4iLAorCQkJSVdMX0VSUihwcml2LCAiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiAlZFxuIiwKIAkJCQkgIGJ1ZiwgcmV0KTsKIAkJCWlmIChyZXQgPT0gLUVOT0VOVCkKIAkJCQljb250aW51ZTsKQEAgLTUzMzAsOSArMjUyOCwxMiBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCX0gZWxzZSB7CiAJCQlpZiAoaW5kZXggPCBhcGlfbWF4KQotCQkJCUlXTF9FUlJPUigiTG9hZGVkIGZpcm13YXJlICVzLCB3aGljaCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIEFQSSB2JXUgaW5zdGVhZC5cbiIsCisJCQkJSVdMX0VSUihwcml2LCAiTG9hZGVkIGZpcm13YXJlICVzLCAiCisJCQkJCSJ3aGljaCBpcyBkZXByZWNhdGVkLiAiCisJCQkJCSIgUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAogCQkJCQkgIGJ1ZiwgYXBpX21heCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiR290IGZpcm13YXJlICclcycgZmlsZSAiCisJCQkJICAgICAgICIoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCiAJCQkJICAgICAgIGJ1ZiwgdWNvZGVfcmF3LT5zaXplKTsKIAkJCWJyZWFrOwogCQl9CkBAIC01MzQzLDcgKzI1NDQsNyBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgZ290IGF0IGxlYXN0IG91ciBoZWFkZXIhICovCiAJaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IHNpemVvZigqdWNvZGUpKSB7Ci0JCUlXTF9FUlJPUigiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC01MzY0LDcgKzI1NjUsNyBAQAogCSAqIG9uIHRoZSBBUEkgdmVyc2lvbiByZWFkIGZyb20gZmlyd2FyZSBoZWFkZXIgZnJvbSBoZXJlIG9uIGZvcndhcmQgKi8KIAogCWlmIChhcGlfdmVyIDwgYXBpX21pbiB8fCBhcGlfdmVyID4gYXBpX21heCkgewotCQlJV0xfRVJST1IoIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgorCQlJV0xfRVJSKHByaXYsICJEcml2ZXIgdW5hYmxlIHRvIHN1cHBvcnQgeW91ciBmaXJtd2FyZSBBUEkuICIKIAkJCSAgIkRyaXZlciBzdXBwb3J0cyB2JXUsIGZpcm13YXJlIGlzIHYldS5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCQlwcml2LT51Y29kZV92ZXIgPSAwOwpAQCAtNTM3MiwyMyArMjU3MywyOSBAQAogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAlpZiAoYXBpX3ZlciAhPSBhcGlfbWF4KQotCQlJV0xfRVJST1IoIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkICV1LCAiCisJCUlXTF9FUlIocHJpdiwgIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkICV1LCAiCiAJCQkgICJnb3QgJXUuIE5ldyBmaXJtd2FyZSBjYW4gYmUgb2J0YWluZWQgIgogCQkJICAiZnJvbSBodHRwOi8vd3d3LmludGVsbGludXh3aXJlbGVzcy5vcmcuXG4iLAogCQkJICBhcGlfbWF4LCBhcGlfdmVyKTsKIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiBsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKLQkJICAgICAgIElXTF9VQ09ERV9NQUpPUihwcml2LT51Y29kZV92ZXIpLAotCQkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfU0VSSUFMKHByaXYtPnVjb2RlX3ZlcikpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAorCUlXTF9JTkZPKHByaXYsICJsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKKwkJSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9NSU5PUihwcml2LT51Y29kZV92ZXIpLAorCQlJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHVjb2RlIHZlcnNpb24gcmF3ID0gMHgleFxuIiwKIAkJICAgICAgIHByaXYtPnVjb2RlX3Zlcik7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLCBpbnN0X3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBkYXRhIHNpemUgPSAldVxuIiwgZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsIGluaXRfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLCBpbml0X2RhdGFfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBib290IGluc3Qgc2l6ZSA9ICV1XG4iLCBib290X3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluc3Rfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgZGF0YV9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsCisJCSAgICAgICBpbml0X3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBkYXRhIHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluaXRfZGF0YV9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCisJCSAgICAgICBib290X3NpemUpOwogCiAKIAkvKiBWZXJpZnkgc2l6ZSBvZiBmaWxlIHZzLiBpbWFnZSBzaXplIGluZm8gaW4gZmlsZSdzIGhlYWRlciAqLwpAQCAtNTM5Niw0MCArMjYwMyw0MyBAQAogCQlpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemUgKwogCQlpbml0X2RhdGFfc2l6ZSArIGJvb3Rfc2l6ZSkgewogCi0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAotCQkJICAgICAgIChpbnQpdWNvZGVfcmF3LT5zaXplKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGZpbGUgc2l6ZSAlemQgdG9vIHNtYWxsXG4iLAorCQkJICAgICAgIHVjb2RlX3Jhdy0+c2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCiAJLyogVmVyaWZ5IHRoYXQgdUNvZGUgaW1hZ2VzIHdpbGwgZml0IGluIGNhcmQncyBTUkFNICovCi0JaWYgKGluc3Rfc2l6ZSA+IElXTF9NQVhfSU5TVF9TSVpFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoaW5zdF9zaXplID4gSVdMMzlfTUFYX0lOU1RfU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgaW5zdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKLQlpZiAoZGF0YV9zaXplID4gSVdMX01BWF9EQVRBX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGRhdGFfc2l6ZSA+IElXTDM5X01BWF9EQVRBX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGluaXRfc2l6ZSA+IElXTF9NQVhfSU5TVF9TSVpFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbml0X3NpemUgPiBJV0wzOV9NQVhfSU5TVF9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkJaW5pdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGluaXRfZGF0YV9zaXplID4gSVdMX01BWF9EQVRBX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoaW5pdF9kYXRhX3NpemUgPiBJV0wzOV9NQVhfREFUQV9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlpbml0X2RhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQotCWlmIChib290X3NpemUgPiBJV0xfTUFYX0JTTV9TSVpFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChib290X3NpemUgPiBJV0wzOV9NQVhfQlNNX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgYm9vdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlib290X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwpAQCAtNTQ3OSwxNiArMjY4OSwxOCBAQAogCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb25zIChmaXJzdCBibG9jayBvZiBkYXRhIGluIGZpbGUpICovCiAJc3JjID0gJnVjb2RlLT5kYXRhWzBdOwogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfY29kZS52X2FkZHIsIHNyYywgbGVuKTsKLQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGluc3RyIGJ1ZiB2YWRkciA9IDB4JXAsIHBhZGRyID0gMHglMDh4XG4iLAogCQlwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgKHUzMilwcml2LT51Y29kZV9jb2RlLnBfYWRkcik7CiAKIAkvKiBSdW50aW1lIGRhdGEgKDJuZCBibG9jaykKIAkgKiBOT1RFOiAgQ29weSBpbnRvIGJhY2t1cCBidWZmZXIgd2lsbCBiZSBkb25lIGluIGl3bDM5NDVfdXAoKSAgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplXTsKIAlsZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKLQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJXpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIsIHNyYywgbGVuKTsKIApAQCAtNTQ5Niw4ICsyNzA4LDggQEAKIAlpZiAoaW5pdF9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQkJSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAotCQkJICAgICAgIGxlbik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOwogCX0KIApAQCAtNTUwNSwxNiArMjcxNywxNiBAQAogCWlmIChpbml0X2RhdGFfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKLQkJSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlZFxuIiwKLQkJCSAgICAgICAoaW50KWxlbik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICV6ZFxuIiwgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAl9CiAKIAkvKiBCb290c3RyYXAgaW5zdHJ1Y3Rpb25zICg1dGggYmxvY2spICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArIGluaXRfZGF0YV9zaXplXTsKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlZFxuIiwKLQkJICAgICAgIChpbnQpbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKIAkvKiBXZSBoYXZlIG91ciBjb3BpZXMgbm93LCBhbGxvdyBPUyByZWxlYXNlIGl0cyBjb3BpZXMgKi8KQEAgLTU1MjIsNyArMjczNCw3IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfcGNpX2FsbG9jOgotCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAlyZXQgPSAtRU5PTUVNOwogCWl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKQEAgLTU1NDMsNyArMjc1NSw3IEBACiAgKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhlbSB0byBsb2FkIHJ1bnRpbWUgdUNvZGUgaW5zdCBhbmQgZGF0YSwKICAqIGFuZCB0byBzYXZlIHJ1bnRpbWUgZGF0YSB3aGVuIHBvd2VyaW5nIGRvd24uCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfdWNvZGVfcHRycyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NldF91Y29kZV9wdHJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlkbWFfYWRkcl90IHBpbnN0OwogCWRtYV9hZGRyX3QgcGRhdGE7CkBAIC01NTU1LDI4ICsyNzY3LDI4IEBACiAJcGRhdGEgPSBwcml2LT51Y29kZV9kYXRhX2JhY2t1cC5wX2FkZHI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIGltYWdlIHRvIGxvYWQgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfUFRSX1JFRywgcGRhdGEpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHLAogCQkJCSBwcml2LT51Y29kZV9kYXRhLmxlbik7CiAKIAkvKiBJbnN0IGJ5dGUgY291bnQgbXVzdCBiZSBsYXN0IHRvIHNldCB1cCwgYml0IDMxIHNpZ25hbHMgdUNvZGUKIAkgKiAgIHRoYXQgYWxsIG5ldyBwdHIvc2l6ZSBpbmZvIGlzIGluIHBsYWNlICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX0JZVEVDT1VOVF9SRUcsCiAJCQkJIHByaXYtPnVjb2RlX2NvZGUubGVuIHwgQlNNX0RSQU1fSU5TVF9MT0FEKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgcG9pbnRlcnMgYXJlIHNldC5cbiIpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtNTU4OCwxMyArMjgwMCwxMyBAQAogICoKICAqIFRlbGwgImluaXRpYWxpemUiIHVDb2RlIHRvIGdvIGFoZWFkIGFuZCBsb2FkIHRoZSBydW50aW1lIHVDb2RlLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfYWxpdmVfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogQ2hlY2sgYWxpdmUgcmVzcG9uc2UgZm9yICJ2YWxpZCIgc2lnbiBmcm9tIHVDb2RlICovCiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNTYwNCwxOCArMjgxNiwxOCBAQAogCWlmIChpd2wzOTQ1X3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAkvKiBTZW5kIHBvaW50ZXJzIHRvIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgaW1hZ2UgLi4uIGluaXQgY29kZSB3aWxsCiAJICogbG9hZCBhbmQgbGF1bmNoIHJ1bnRpbWUgdUNvZGUsIHdoaWNoIHdpbGwgc2VuZCB1cyBhbm90aGVyICJBbGl2ZSIKIAkgKiBub3RpZmljYXRpb24uICovCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJaWYgKGl3bDM5NDVfc2V0X3Vjb2RlX3B0cnMocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdvbid0IGhhcHBlbjsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQ291bGRuJ3Qgc2V0IHVwIHVDb2RlIHBvaW50ZXJzLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAlyZXR1cm47CkBAIC01NjM0LDE4ICsyODQ2LDE4IEBACiAgKiAgICAgICAgICAgICAgICAgICBmcm9tIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgKGluaXRpYWxpemF0aW9uIHVDb2RlJ3MKICAqICAgICAgICAgICAgICAgICAgIEFsaXZlIGdldHMgaGFuZGxlZCBieSBpd2wzOTQ1X2luaXRfYWxpdmVfc3RhcnQoKSkuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYWxpdmVfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CiAJaW50IHRoZXJtYWxfc3BpbiA9IDA7CiAJdTMyIHJma2lsbDsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAogCWlmIChwcml2LT5jYXJkX2FsaXZlLmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTU2NTUsMjEgKzI4NjcsMjEgQEAKIAlpZiAoaXdsMzk0NV92ZXJpZnlfdWNvZGUocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7CiAJCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkJhZCBydW50aW1lIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBydW50aW1lIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBSRktJTEwgc3RhdHVzIGZyb20gYWRhcHRlclxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgUkZLSUxMIHN0YXR1cyBmcm9tIGFkYXB0ZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JcmZraWxsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQVBNR19SRktJTExfUkVHKTsKLQlJV0xfREVCVUdfSU5GTygiUkZLSUxMIHN0YXR1czogMHgleFxuIiwgcmZraWxsKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlyZmtpbGwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEFQTUdfUkZLSUxMX1JFRyk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJGS0lMTCBzdGF0dXM6IDB4JXhcbiIsIHJma2lsbCk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmIChyZmtpbGwgJiAweDEpIHsKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTU2ODEsNyArMjg5Myw3IEBACiAJCX0KIAogCQlpZiAodGhlcm1hbF9zcGluKQotCQkJSVdMX0RFQlVHX0lORk8oIlRoZXJtYWwgY2FsaWJyYXRpb24gdG9vayAlZHVzXG4iLAorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlRoZXJtYWwgY2FsaWJyYXRpb24gdG9vayAlZHVzXG4iLAogCQkJCSAgICAgICB0aGVybWFsX3NwaW4gKiAxMCk7CiAJfSBlbHNlCiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtNTY5Miw3ICsyOTA0LDcgQEAKIAkvKiBDbGVhciBvdXQgdGhlIHVDb2RlIGVycm9yIGJpdCBpZiBpdCBpcyBzZXQgKi8KIAljbGVhcl9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJcmV0dXJuOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKQEAgLTU3MDAsOSArMjkxMiw5IEBACiAJcHJpdi0+YWN0aXZlX3JhdGUgPSBwcml2LT5yYXRlc19tYXNrOwogCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+cmF0ZXNfbWFzayAmIElXTF9CQVNJQ19SQVRFU19NQVNLOwogCi0JaXdsMzk0NV9zZW5kX3Bvd2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpKTsKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgZmFsc2UpOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPQogCQkJCShzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqKSgmcHJpdi0+YWN0aXZlX3J4b24pOwogCkBAIC01NzExLDEyICsyOTIzLDExIEBACiAJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAl9IGVsc2UgewogCQkvKiBJbml0aWFsaXplIG91ciByeF9jb25maWcgZGF0YSAqLwotCQlpd2wzOTQ1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgcHJpdi0+aXdfbW9kZSk7Ci0JCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBwcml2LT5pd19tb2RlKTsKIAl9CiAKIAkvKiBDb25maWd1cmUgQmx1ZXRvb3RoIGRldmljZSBjb2V4aXN0ZW5jZSBzdXBwb3J0ICovCi0JaXdsMzk0NV9zZW5kX2J0X2NvbmZpZyhwcml2KTsKKwlpd2xfc2VuZF9idF9jb25maWcocHJpdik7CiAKIAkvKiBDb25maWd1cmUgdGhlIGFkYXB0ZXIgZm9yIHVuYXNzb2NpYXRlZCBvcGVyYXRpb24gKi8KIAlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwpAQCAtNTcyNSw3ICsyOTM2LDcgQEAKIAogCWl3bDM5NDVfbGVkX3JlZ2lzdGVyKHByaXYpOwogCi0JSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOwogCXNldF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTU3NDYsMTUgKzI5NTcsMTUgQEAKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworc3RhdGljIHZvaWQgaXdsMzk0NV9jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCi1zdGF0aWMgdm9pZCBfX2l3bDM5NDVfZG93bihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgX19pd2wzOTQ1X2Rvd24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGV4aXRfcGVuZGluZyA9IHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAKLQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIApAQCAtNTc3MywxMSArMjk4NCwxMSBAQAogCQljbGVhcl9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKIAkvKiBzdG9wIGFuZCByZXNldCB0aGUgb24tYm9hcmQgcHJvY2Vzc29yICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOwogCiAJLyogdGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCkBAIC01Nzg2LDcgKzI5OTcsNyBAQAogCiAJLyogSWYgd2UgaGF2ZSBub3QgcHJldmlvdXNseSBjYWxsZWQgaXdsMzk0NV9pbml0KCkgdGhlbgogCSAqIGNsZWFyIGFsbCBiaXRzIGJ1dCB0aGUgUkYgS2lsbCBhbmQgU1VTUEVORCBiaXRzIGFuZCByZXR1cm4gKi8KLQlpZiAoIWl3bDM5NDVfaXNfaW5pdChwcml2KSkgeworCWlmICghaXdsX2lzX2luaXQocHJpdikpIHsKIAkJcHJpdi0+c3RhdHVzID0gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJCVNUQVRVU19SRl9LSUxMX0hXIHwKIAkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykgPDwKQEAgLTU4MTUsMjkgKzMwMjYsMzEgQEAKIAkJCXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX0VYSVRfUEVORElORzsKIAorCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMucmVzZXQocHJpdik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CisJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsMzk0NV9od190eHFfY3R4X3N0b3AocHJpdik7CiAJaXdsMzk0NV9od19yeHFfc3RvcChwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRElTX1JFRywKKwlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRElTX1JFRywKIAkJCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAl1ZGVsYXkoNSk7CiAKLQlpd2wzOTQ1X2h3X25pY19zdG9wX21hc3Rlcihwcml2KTsKLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOwotCWl3bDM5NDVfaHdfbmljX3Jlc2V0KHByaXYpOworCWlmIChleGl0X3BlbmRpbmcgfHwgdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnN0b3AocHJpdik7CisJZWxzZQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnJlc2V0KHByaXYpOwogCiAgZXhpdDoKLQltZW1zZXQoJnByaXYtPmNhcmRfYWxpdmUsIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwKSk7CisJbWVtc2V0KCZwcml2LT5jYXJkX2FsaXZlLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwpAQCAtNTg0Nyw3ICszMDYwLDcgQEAKIAlpd2wzOTQ1X2NsZWFyX2ZyZWVfZnJhbWVzKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2Rvd24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCV9faXdsMzk0NV9kb3duKHByaXYpOwpAQCAtNTg1OCw1OCArMzA3MSw1OCBAQAogCiAjZGVmaW5lIE1BWF9IV19SRVNUQVJUUyA1CiAKLXN0YXRpYyBpbnQgX19pd2wzOTQ1X3VwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IF9faXdsMzk0NV91cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjLCBpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOworCQlJV0xfV0FSTihwcml2LCAiRXhpdCBwZW5kaW5nOyB3aWxsIG5vdCBicmluZyB0aGUgTklDIHVwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgU1cgUkYga2lsbCAobW9kdWxlICIKKwkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIGRpc2FibGVkIGJ5IFNXIFJGIGtpbGwgKG1vZHVsZSAiCiAJCQkgICAgInBhcmFtZXRlcilcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoIXByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciB8fCAhcHJpdi0+dWNvZGVfZGF0YS52X2FkZHIpIHsKLQkJSVdMX0VSUk9SKCJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmcgdXBcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmcgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLwotCWlmIChpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKKwlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKIAkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAllbHNlIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CiAJCWlmICghdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIGRpc2FibGVkIGJ5IEhXIFJGIEtpbGwgc3dpdGNoXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOwogCiAJcmMgPSBpd2wzOTQ1X2h3X25pY19pbml0KHByaXYpOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbnQgbmljXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGludCBuaWNcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAorCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAKIAkvKiBjbGVhciAoYWdhaW4pLCB0aGVuIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7Ci0JaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKKwlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAkvKiByZWFsbHkgbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CiAKIAkvKiBDb3B5IG9yaWdpbmFsIHVjb2RlIGRhdGEgaW1hZ2UgZnJvbSBkaXNrIGludG8gYmFja3VwIGNhY2hlLgogCSAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG9uLWJvYXJkIHByb2Nlc3NvcidzCkBAIC01OTI4LDE3ICszMTQxLDE4IEBACiAJCS8qIGxvYWQgYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUsCiAJCSAqIGxvYWQgYm9vdHN0cmFwIHByb2dyYW0gaW50byBwcm9jZXNzb3IncyBtZW1vcnksCiAJCSAqIHByZXBhcmUgdG8gbG9hZCB0aGUgImluaXRpYWxpemUiIHVDb2RlICovCi0JCXJjID0gaXdsMzk0NV9sb2FkX2JzbShwcml2KTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+bG9hZF91Y29kZShwcml2KTsKIAogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByYyk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIlVuYWJsZSB0byBzZXQgdXAgYm9vdHN0cmFwIHVDb2RlOiAlZFxuIiwgcmMpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBzdGFydCBjYXJkOyAiaW5pdGlhbGl6ZSIgd2lsbCBsb2FkIHJ1bnRpbWUgdWNvZGUgKi8KIAkJaXdsMzk0NV9uaWNfc3RhcnQocHJpdik7CiAKLQkJSVdMX0RFQlVHX0lORk8oRFJWX05BTUUgIiBpcyBjb21pbmcgdXBcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCBEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTk0OSw3ICszMTYzLDcgQEAKIAogCS8qIHRyaWVkIHRvIHJlc3RhcnQgYW5kIGNvbmZpZyB0aGUgZGV2aWNlIGZvciBhcyBsb25nIGFzIG91cgogCSAqIHBhdGllbmNlIGNvdWxkIHdpdGhzdGFuZCAqLwotCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlIGFmdGVyICVkIGF0dGVtcHRzLlxuIiwgaSk7CisJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlIGFmdGVyICVkIGF0dGVtcHRzLlxuIiwgaSk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTU5NjIsOCArMzE3Niw4IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIGluaXRfYWxpdmVfc3RhcnQud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTU5NzUsOCArMzE4OSw4IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYWxpdmVfc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgYWxpdmVfc3RhcnQud29yayk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgYWxpdmVfc3RhcnQud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTU5ODYsNjYgKzMyMDAsMzEgQEAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcmZraWxsX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwgcmZfa2lsbCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmZraWxsX3BvbGwud29yayk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisJaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQorCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCWVsc2UKKwkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CiAKLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZzdGF0dXMpICE9IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZl9raWxsKTsKIAotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZraWxsX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDIgKiBIWikpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfUkZfS0lMTCwKLQkJCSAgIkhXIGFuZC9vciBTVyBSRiBLaWxsIG5vIGxvbmdlciBhY3RpdmUsIHJlc3RhcnRpbmcgIgotCQkJICAiZGV2aWNlXG4iKTsKLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKLQkJCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKLQkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKLQkJZWxzZQotCQkJSVdMX1dBUk5JTkcoIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKLQkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgotCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogfQogCiAjZGVmaW5lIElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HICg3ICogSFopCi0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBzY2FuX2NoZWNrLndvcmspOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKLQkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9TQ0FOLAotCQkJICAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyBhZGFwdGVyICglZG1zKVxuIiwKLQkJCSAgamlmZmllc190b19tc2VjcyhJV0xfU0NBTl9DSEVDS19XQVRDSERPRykpOwotCi0JCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCQlpd2wzOTQ1X3NlbmRfc2Nhbl9hYm9ydChwcml2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHJlcXVlc3Rfc2Nhbik7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0geworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlcXVlc3Rfc2Nhbik7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NDQU5fQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kKSwKIAkJLm1ldGEuZmxhZ3MgPSBDTURfU0laRV9IVUdFLApAQCAtNjA2MSw4ICszMjQwLDggQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkgewotCQlJV0xfV0FSTklORygicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlJV0xfV0FSTihwcml2LCAicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjA3NCwzNCArMzI1MywzNiBAQAogCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvciBzY2hlZHVsZWQgaWYgdGhlcmUgaXMgY3VycmVudGx5CiAJICogYSBzY2FuIGFjdGl2ZSBpbiB0aGUgaGFyZHdhcmUuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCi0JCQkgICAgICAgIklnbm9yaW5nIHNlY29uZCByZXF1ZXN0LlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgICIKKwkJCQkiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gZGV2aWNlIHNodXRkb3duXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsCisJCQkiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuICBRdWV1aW5nLlxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LAorCQkJIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiBRdWV1aW5nLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXByaXYtPnNjYW5fYmFuZHMpIHsKLQkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBubyByZXF1ZXN0ZWQgYmFuZHNcbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTYxMTksMTQgKzMzMDAsMTQgQEAKIAlzY2FuLT5xdWlldF9wbGNwX3RoID0gSVdMX1BMQ1BfUVVJRVRfVEhSRVNIOwogCXNjYW4tPnF1aWV0X3RpbWUgPSBJV0xfQUNUSVZFX1FVSUVUX1RJTUU7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXUxNiBpbnRlcnZhbCA9IDA7CiAJCXUzMiBleHRyYTsKIAkJdTMyIHN1c3BlbmRfdGltZSA9IDEwMDsKIAkJdTMyIHNjYW5fc3VzcGVuZF90aW1lID0gMTAwOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWludGVydmFsID0gcHJpdi0+YmVhY29uX2ludDsKQEAgLTYxNDgsMTUgKzMzMjksMTQgQEAKIAkJICAgIChleHRyYSB8ICgoc3VzcGVuZF90aW1lICUgaW50ZXJ2YWwpICogMTAyNCkpOwogCiAJCXNjYW4tPnN1c3BlbmRfdGltZSA9IGNwdV90b19sZTMyKHNjYW5fc3VzcGVuZF90aW1lKTsKLQkJSVdMX0RFQlVHX1NDQU4oInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKIAkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOwogCX0KIAogCS8qIFdlIHNob3VsZCBhZGQgdGhlIGFiaWxpdHkgZm9yIHVzZXIgdG8gbG9jayB0byBQQVNTSVZFIE9OTFkgKi8KIAlpZiAocHJpdi0+b25lX2RpcmVjdF9zY2FuKSB7Ci0JCUlXTF9ERUJVR19TQ0FOCi0JCSAgICAoIktpY2tpbmcgb2ZmIG9uZSBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKLQkJICAgICBwcmludF9zc2lkKHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiS2lja2luZyBvZmYgb25lIGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAorCQkJCXByaW50X3NzaWQoc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWQsCiAJCQkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKSk7CiAJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmlkID0gV0xBTl9FSURfU1NJRDsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0ubGVuID0gcHJpdi0+ZGlyZWN0X3NzaWRfbGVuOwpAQCAtNjE2NCwxNSArMzM0NCwxMiBAQAogCQkgICAgICAgcHJpdi0+ZGlyZWN0X3NzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CiAJCW5fcHJvYmVzKys7CiAJfSBlbHNlCi0JCUlXTF9ERUJVR19TQ0FOKCJLaWNraW5nIG9mZiBvbmUgaW5kaXJlY3Qgc2Nhbi5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiS2lja2luZyBvZmYgb25lIGluZGlyZWN0IHNjYW4uXG4iKTsKIAogCS8qIFdlIGRvbid0IGJ1aWxkIGEgZGlyZWN0IHNjYW4gcHJvYmUgcmVxdWVzdDsgdGhlIHVDb2RlIHdpbGwgZG8KIAkgKiB0aGF0IGJhc2VkIG9uIHRoZSBkaXJlY3RfbWFzayBhZGRlZCB0byBlYWNoIGNoYW5uZWwgZW50cnkgKi8KLQlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCi0JCWl3bDM5NDVfZmlsbF9wcm9iZV9yZXEocHJpdiwgKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNjYW4tPmRhdGEsCi0JCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpKTsKIAlzY2FuLT50eF9jbWQudHhfZmxhZ3MgPSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwotCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwlzY2FuLT50eF9jbWQuc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAlzY2FuLT50eF9jbWQuc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CiAKIAkvKiBmbGFncyArIHJhdGUgc2VsZWN0aW9uICovCkBAIC02MTg3LDEwICszMzY0LDE1IEBACiAJCXNjYW4tPmdvb2RfQ1JDX3RoID0gSVdMX0dPT0RfQ1JDX1RIOwogCQliYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAl9IGVsc2UgewotCQlJV0xfV0FSTklORygiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOworCQlJV0xfV0FSTihwcml2LCAiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCisJc2Nhbi0+dHhfY21kLmxlbiA9IGNwdV90b19sZTE2KAorCQlpd2xfZmlsbF9wcm9iZV9yZXEocHJpdiwgYmFuZCwKKwkJCQkgICAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKKwkJCQkgICBJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpKTsKKwogCS8qIHNlbGVjdCBSeCBhbnRlbm5hcyAqLwogCXNjYW4tPmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CiAKQEAgLTYyMDMsNyArMzM4NSw3IEBACiAJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7CiAKIAlpZiAoc2Nhbi0+Y2hhbm5lbF9jb3VudCA9PSAwKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJjaGFubmVsIGNvdW50ICVkXG4iLCBzY2FuLT5jaGFubmVsX2NvdW50KTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02MjEzLDcgKzMzOTUsNyBAQAogCXNjYW4tPmxlbiA9IGNwdV90b19sZTE2KGNtZC5sZW4pOwogCiAJc2V0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CisJcmMgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKIAlpZiAocmMpCiAJCWdvdG8gZG9uZTsKIApAQCAtNjIzOSw3ICszNDIxLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ191cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCB1cCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgdXApOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02MjQ3LDEyICszNDI5LDEyIEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCV9faXdsMzk0NV91cChwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByZXN0YXJ0KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZXN0YXJ0KTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNjI2Myw4ICszNDQ1LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yeF9yZXBsZW5pc2goc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgcnhfcmVwbGVuaXNoKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByeF9yZXBsZW5pc2gpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02Mjc2LDE4ICszNDU4LDE4IEBACiAKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTiAoSFoqMikKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOwogCiAJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAogCi0JSVdMX0RFQlVHX0FTU09DKCJBc3NvY2lhdGVkIGFzICVkIHRvOiAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBc3NvY2lhdGVkIGFzICVkIHRvOiAlcE1cbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkcik7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCkBAIC02Mjk2LDI2ICszNDc4LDI2IEBACiAJaWYgKCFwcml2LT52aWYgfHwgIXByaXYtPmlzX29wZW4pCiAJCXJldHVybjsKIAotCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAyMDApOworCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CiAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCi0JbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQpKTsKKwltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX3RpbWVfY21kKSk7CiAJaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCSAgICAgIHNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CiAJaWYgKHJjKQotCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgorCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgogCQkJICAgICJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5hc3NvY19pZCA9IGNwdV90b19sZTE2KHByaXYtPmFzc29jX2lkKTsKIAotCUlXTF9ERUJVR19BU1NPQygiYXNzb2MgaWQgJWQgYmVhY29uIGludGVydmFsICVkXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiYXNzb2MgaWQgJWQgYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJcHJpdi0+YXNzb2NfaWQsIHByaXYtPmJlYWNvbl9pbnQpOwogCiAJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpCkBAIC02MzU1LDU2ICszNTM3LDE5IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJIElXTF9FUlJPUigiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKKwkJIElXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCiAJCQkgICBfX2Z1bmNfXywgcHJpdi0+aXdfbW9kZSk7CiAJCWJyZWFrOwogCX0KIAotCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDApOworCWl3bF9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CiAKIAkvKiB3ZSBoYXZlIGp1c3QgYXNzb2NpYXRlZCwgZG9uJ3Qgc3RhcnQgc2NhbiB0b28gZWFybHkgKi8KIAlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IGppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwgYWJvcnRfc2Nhbik7Ci0KLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHkocHJpdikpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCXNldF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCWl3bDM5NDVfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwgc2Nhbl9jb21wbGV0ZWQpOwotCi0JSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sICJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0NPTkZfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCWl3bDM5NDVfbWFjX2NvbmZpZyhwcml2LT5odywgMCk7Ci0KLQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcpOwotCi0JLyogU2luY2Ugc2V0dGluZyB0aGUgVFhQT1dFUiBtYXkgaGF2ZSBiZWVuIGRlZmVycmVkIHdoaWxlCi0JICogcGVyZm9ybWluZyB0aGUgc2NhbiwgZmlyZSBvbmUgb2ZmICovCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogbWFjODAyMTEgZW50cnkgcG9pbnQgZnVuY3Rpb25zCkBAIC02NDE1LDM2ICszNTYwLDIyIEBACiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwcml2LT5wY2lfZGV2KSkgewotCQlJV0xfRVJST1IoIkZhaWwgdG8gcGNpX2VuYWJsZV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bDM5NDVfaXNyLCBJUlFGX1NIQVJFRCwKLQkJCSAgRFJWX05BTUUsIHByaXYpOwotCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcHJpdi0+cGNpX2Rldi0+aXJxKTsKLQkJZ290byBvdXRfZGlzYWJsZV9tc2k7Ci0JfQorCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJLyogd2Ugc2hvdWxkIGJlIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIG9wZW5lZCAqLwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpKTsKKwltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOwogCS8qIGZldGNoIHVjb2RlIGZpbGUgZnJvbSBkaXNrLCBhbGxvYyBhbmQgY29weSB0byBidXMtbWFzdGVyIGJ1ZmZlcnMgLi4uCiAJICogdWNvZGUgZmlsZW5hbWUgYW5kIG1heCBzaXplcyBhcmUgY2FyZC1zcGVjaWZpYy4gKi8KIAogCWlmICghcHJpdi0+dWNvZGVfY29kZS5sZW4pIHsKIAkJcmV0ID0gaXdsMzk0NV9yZWFkX3Vjb2RlKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgcmVhZCBtaWNyb2NvZGU6ICVkXG4iLCByZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAkJfQpAQCAtNjQ1NCwxMiArMzU4NSwxMiBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAotCUlXTF9ERUJVR19JTkZPKCJTdGFydCBVUCB3b3JrLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0IFVQIHdvcmsuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwpAQCAtNjQ3MSw4NiArMzYwMiw4NyBAQAogCQkJVUNPREVfUkVBRFlfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIldhaXQgZm9yIFNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKFVDT0RFX1JFQURZX1RJTUVPVVQpKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiV2FpdCBmb3IgU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKKwkJCQlqaWZmaWVzX3RvX21zZWNzKFVDT0RFX1JFQURZX1RJTUVPVVQpKTsKIAkJCXJldCA9IC1FVElNRURPVVQ7CiAJCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAkJfQogCX0KIAorCS8qIHVjb2RlIGlzIHJ1bm5pbmcgYW5kIHdpbGwgc2VuZCByZmtpbGwgbm90aWZpY2F0aW9ucywKKwkgKiBubyBuZWVkIHRvIHBvbGwgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgYW55bW9yZSAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJma2lsbF9wb2xsKTsKKwogCXByaXYtPmlzX29wZW4gPSAxOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwogCiBvdXRfcmVsZWFzZV9pcnE6Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLW91dF9kaXNhYmxlX21zaToKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCXByaXYtPmlzX29wZW4gPSAwOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBmYWlsZWRcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBmYWlsZWRcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpZiAoIXByaXYtPmlzX29wZW4pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHNraXBcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gc2tpcFxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlwcml2LT5pc19vcGVuID0gMDsKIAotCWlmIChpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQkvKiBzdG9wIG1hYywgY2FuY2VsIGFueSBzY2FuIHJlcXVlc3QgYW5kIGNsZWFyCiAJCSAqIFJYT05fRklMVEVSX0FTU09DX01TSyBCSVQKIAkJICovCiAJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KIAogCWl3bDM5NDVfZG93bihwcml2KTsKIAogCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwotCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7Ci0JcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwotCXBjaV9zYXZlX3N0YXRlKHByaXYtPnBjaV9kZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwcml2LT5wY2lfZGV2KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCS8qIHN0YXJ0IHBvbGxpbmcgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgYWdhaW4gKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZraWxsX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDIgKiBIWikpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAorCUlXTF9ERUJVR19UWChwcml2LCAiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCiAJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAogCWlmIChpd2wzOTQ1X3R4X3NrYihwcml2LCBza2IpKQogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOwogCiAJaWYgKHByaXYtPnZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC02NTYzLDE2ICszNjk1LDE2IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGNvbmYtPm1hY19hZGRyKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiU2V0OiAlcE1cbiIsIGNvbmYtPm1hY19hZGRyKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJTZXQ6ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwogCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHkocHJpdikpCisJaWYgKGl3bF9pc19yZWFkeShwcml2KSkKIAkJaXdsMzk0NV9zZXRfbW9kZShwcml2LCBjb25mLT50eXBlKTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1ODUsMjQgKzM3MTcsMjUgQEAKICAqLwogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkXG4iLAorCQkJCWNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KCFpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbiAmJgorCWlmICh1bmxpa2VseSghaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiAmJgogCQkgICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBzY2FubmluZ1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBzY2FubmluZ1xuIik7CiAJCXNldF9iaXQoU1RBVFVTX0NPTkZfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKQEAgLTY2MTAsMjUgKzM3NDMsMjYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsCi0JCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKKwkJCQkgICAgICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewotCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBbJWRdIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCi0JCQkgICAgICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwKKwkJCQkiQ2hhbm5lbCAlZCBbJWRdIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpd2wzOTQ1X3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOworCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOwogCi0JaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKIAogCS8qIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcyBhbmQgcmF0ZSBtYXNrIGNhbiBiZSBkaWZmZXJlbnQKIAkgKiBmb3IgZWFjaCBwaHltb2RlOyBzaW5jZSB0aGUgcGh5bW9kZSBtYXkgaGF2ZSBjaGFuZ2VkLCByZXNldAogCSAqIHRoZSByYXRlIG1hc2sgdG8gd2hhdCBtYWM4MDIxMSBsaXN0cyAqLwotCWl3bDM5NDVfc2V0X3JhdGUocHJpdik7CisJaXdsX3NldF9yYXRlKHByaXYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC02NjM5LDI4ICszNzczLDM2IEBACiAJfQogI2VuZGlmCiAKLQlpd2wzOTQ1X3JhZGlvX2tpbGxfc3cocHJpdiwgIWNvbmYtPnJhZGlvX2VuYWJsZWQpOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKKwkJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYKKwkJICAgIGl3bF9yYWRpb19raWxsX3N3X2VuYWJsZV9yYWRpbyhwcml2KSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSAiCisJCQkJCQkgIndhaXRpbmcgZm9yIHVDb2RlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHJhZGlvIGRpc2FibGVkXG4iKTsKLQkJZ290byBvdXQ7CisJCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgeworCQkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIGtpbGxcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpd2wzOTQ1X3NldF9yYXRlKHByaXYpOworCWl3bF9zZXRfcmF0ZShwcml2KTsKIAogCWlmIChtZW1jbXAoJnByaXYtPmFjdGl2ZV9yeG9uLAogCQkgICAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSkpCiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm90IHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb25cbiIpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIG91dDoKIAljbGVhcl9iaXQoU1RBVFVTX0NPTkZfUEVORElORywgJnByaXYtPnN0YXR1cyk7CkBAIC02NjY4LDcgKzM4MTAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY29uZmlnX2FwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NvbmZpZ19hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIApAQCAtNjY3NiwxOSArMzgxOCwyMCBAQAogCQlyZXR1cm47CiAKIAkvKiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSBkb25lIG9ubHkgYXQgQVAgYnJpbmcgdXAgKi8KLQlpZiAoIShpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpKSB7CisJaWYgKCEoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpKSB7CiAKIAkJLyogUlhPTiAtIHVuYXNzb2MgKHRvIHNldCB0aW1pbmcgY29tbWFuZCkgKi8KIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCiAJCS8qIFJYT04gVGltaW5nICovCi0JCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kKSk7CisJCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKIAkJaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKLQkJCQlzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOworCQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCisJCQkJICAgICAgc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwKKwkJCQkgICAgICAmcHJpdi0+cnhvbl90aW1pbmcpOwogCQlpZiAocmMpCi0JCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgorCQkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCQkJIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCQkvKiBGSVhNRTogd2hhdCBzaG91bGQgYmUgdGhlIGFzc29jX2lkIGZvciBBUD8gKi8KQEAgLTY3MTYsNyArMzg1OSw3IEBACiAJCS8qIHJlc3RvcmUgUlhPTiBhc3NvYyAqLwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKLQkJaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyLCAwLCAwKTsKKwkJaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgMCwgMCk7CiAJfQogCWl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHByaXYpOwogCkBAIC02NzI3LDE2ICszODcwLDE2IEBACiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByYzsKIAogCWlmIChjb25mID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKHByaXYtPnZpZiAhPSB2aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjc1MywxMyArMzg5NiwxMyBAQAogCQkJcmV0dXJuIHJjOwogCX0KIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+YnNzaWQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiYnNzaWQ6ICVwTVxuIiwgY29uZi0+YnNzaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImJzc2lkOiAlcE1cbiIsIGNvbmYtPmJzc2lkKTsKIAogLyoKICAqIHZlcnkgZHViaW91cyBjb2RlIHdhcyBoZXJlOyB0aGUgcHJvYmUgZmlsdGVyaW5nIGZsYWcgaXMgbmV2ZXIgc2V0OgpAQCAtNjc3Miw3ICszOTE1LDcgQEAKIAkJaWYgKCFjb25mLT5ic3NpZCkgewogCQkJY29uZi0+YnNzaWQgPSBwcml2LT5tYWNfYWRkcjsKIAkJCW1lbWNweShwcml2LT5ic3NpZCwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiYnNzaWQgd2FzIHNldCB0bzogJXBNXG4iLAorCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJic3NpZCB3YXMgc2V0IHRvOiAlcE1cbiIsCiAJCQkJCSAgIGNvbmYtPmJzc2lkKTsKIAkJfQogCQlpZiAocHJpdi0+aWJzc19iZWFjb24pCkBAIC02NzgxLDE3ICszOTI0LDE3IEBACiAJCXByaXYtPmlic3NfYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAoY29uZi0+YnNzaWQgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihjb25mLT5ic3NpZCkgJiYKIAkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKSkgewogCQkvKiBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBIVyBzY2FuIGdvaW5nIG9uIGluIHRoZSBiYWNrZ3JvdW5kCiAJCSAqIHRoZW4gd2UgbmVlZCB0byBjYW5jZWwgaXQgZWxzZSB0aGUgUlhPTiBiZWxvdyB3aWxsIGZhaWwuICovCi0JCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCisJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7CisJCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzICIKIAkJCQkgICAgImFmdGVyIDEwMG1zXG4iKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmc6c2NhbiBhYm9ydCBmYWlsZWRcbiIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQpAQCAtNjgxMyw3NSArMzk1NiwyOSBAQAogCQl9CiAKIAl9IGVsc2UgewotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCX0KIAogIGRvbmU6Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JX19sZTMyICpmaWx0ZXJfZmxhZ3MgPSAmcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFnczsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiRW50ZXI6IGNoYW5nZWQ6IDB4JXgsIHRvdGFsOiAweCV4XG4iLAotCQkJY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzKTsKLQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9NSVNDX0lOX0JTUykpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX1BST01JU0NfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7Ci0JfQotCi0JLyogV2UgYXZvaWQgaXdsX2NvbW1pdF9yeG9uIGhlcmUgdG8gY29tbWl0IHRoZSBuZXcgZmlsdGVyIGZsYWdzCi0JICogc2luY2UgbWFjODAyMTEgd2lsbCBjYWxsIGllZWU4MDIxMV9od19jb25maWcgaW1tZWRpYXRlbHkuCi0JICogKG1jX2xpc3QgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpLiBPdGhlcndpc2UsIHdlIG5lZWQgdG8KLQkgKiBxdWV1ZSBhIGJhY2tncm91bmQgaXdsX2NvbW1pdF9yeG9uIHdvcmsuCi0JICovCi0KLQkqdG90YWxfZmxhZ3MgJj0gRklGX09USEVSX0JTUyB8IEZJRl9BTExNVUxUSSB8IEZJRl9QUk9NSVNDX0lOX0JTUyB8Ci0JCQlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyB8IEZJRl9DT05UUk9MOwotfQotCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpZiAoaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAl9CkBAIC02ODkxLDcgKzM5ODgsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiAjZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU5fQUZURVJfQVNTT0MgKEhaKjYpCkBAIC02OTAxLDIxICszOTk4LDIzIEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQkgICAgIHUzMiBjaGFuZ2VzKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiY2hhbmdlcyA9IDB4JVhcbiIsIGNoYW5nZXMpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiY2hhbmdlcyA9IDB4JVhcbiIsIGNoYW5nZXMpOwogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfUFJFQU1CTEUgJWRcbiIsCisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRVJQX1BSRUFNQkxFICVkXG4iLAogCQkJCSAgIGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAJCWVsc2UKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CisJCQkJflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAl9CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9DVFMgJWRcbiIsCisJCQkJICAgYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCk7CiAJCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90ICYmIChwcml2LT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAkJZWxzZQpAQCAtNjkyMyw3ICs0MDIyLDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CiAJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBhcyB0aGlzIGZ1bmN0aW9uIHNob3VsZAogCQkgKiBuZXZlciBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gKi8KIAkJaWYgKFdBUk5fT05fT05DRShpbl9pbnRlcnJ1cHQoKSkpCkBAIC02OTMxLDEwICs0MDMwLDkgQEAKIAkJaWYgKGJzc19jb25mLT5hc3NvYykgewogCQkJcHJpdi0+YXNzb2NfaWQgPSBic3NfY29uZi0+YWlkOwogCQkJcHJpdi0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OwotCQkJcHJpdi0+dGltZXN0YW1wMCA9IGJzc19jb25mLT50aW1lc3RhbXAgJiAweEZGRkZGRkZGOwotCQkJcHJpdi0+dGltZXN0YW1wMSA9IChic3NfY29uZi0+dGltZXN0YW1wID4+IDMyKSAmCi0JCQkJCSAgICAgMHhGRkZGRkZGRjsKKwkJCXByaXYtPnRpbWVzdGFtcCA9IGJzc19jb25mLT50aW1lc3RhbXA7CiAJCQlwcml2LT5hc3NvY19jYXBhYmlsaXR5ID0gYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHk7CisJCQlwcml2LT5wb3dlcl9kYXRhLmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOwogCQkJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzICsKIAkJCQkJSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQzsKIAkJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTY5NDIsMTQzICs0MDQwLDkxIEBACiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPmFzc29jX2lkID0gMDsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwKKwkJCQkJIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQl9Ci0JfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5hc3NvY19pZCkgewotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJBc3NvY2lhdGVkIENoYW5nZXMgJWRcbiIsIGNoYW5nZXMpOworCX0gZWxzZSBpZiAoY2hhbmdlcyAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5hc3NvY19pZCkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsCisJCQkJCSJBc3NvY2lhdGVkIENoYW5nZXMgJWRcbiIsIGNoYW5nZXMpOwogCQkJaXdsMzk0NV9zZW5kX3J4b25fYXNzb2MocHJpdik7CiAJfQogCiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnNzaWQsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlERUNMQVJFX1NTSURfQlVGKHNzaWRfYnVmKTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJcmMgPSAtRUlPOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiB3ZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QgKi8KLQlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKLQkJCXRpbWVfYWZ0ZXIocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMsIGppZmZpZXMpKSB7Ci0JCXJjID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSBmb3IgYSBicm9hZGNhc3Qgc2NhbiAqLwotCWlmICgobGVuID09IDApICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCi0JICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLAotCQkgICAgICAgamlmZmllcykpIHsKLQkJcmMgPSAtRUFHQUlOOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCWlmIChsZW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4oImRpcmVjdCBzY2FuIGZvciAlcyBbJWRdXG4gIiwKLQkJCSAgICAgICBwcmludF9zc2lkKHNzaWRfYnVmLCBzc2lkLCBsZW4pLCAoaW50KWxlbik7Ci0KLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKLQkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gKHU4KQotCQkgICAgbWluKCh1OCkgbGVuLCAodTgpIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwotCX0gZWxzZQotCQlwcml2LT5vbmVfZGlyZWN0X3NjYW4gPSAwOwotCi0JcmMgPSBpd2wzOTQ1X3NjYW5faW5pdGlhdGUocHJpdik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgICBjb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJjID0gMDsKLQl1OCBzdGFfaWQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3QgdTggKmFkZHI7CisJaW50IHJldCA9IDA7CisJdTggc3RhX2lkID0gSVdMX0lOVkFMSURfU1RBVElPTjsKKwl1OCBzdGF0aWNfa2V5OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfcGFyYW1faHdjcnlwdG8pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKKwlpZiAoaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0bykgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGRyKSkKLQkJLyogb25seSBzdXBwb3J0IHBhaXJ3aXNlIGtleXMgKi8KLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBpd2xfYmNhc3RfYWRkcjsKKwlzdGF0aWNfa2V5ID0gIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpOwogCi0Jc3RhX2lkID0gaXdsMzk0NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7Ci0JaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKLQkJCQkgICBhZGRyKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzdGF0aWNfa2V5KSB7CisJCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOworCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSAlcE1ub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQkJCQkgICAgYWRkcik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgIFNFVF9LRVk6Ci0JCXJjID0gaXdsMzk0NV91cGRhdGVfc3RhX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKLQkJaWYgKCFyYykgewotCQkJaXdsMzk0NV9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAxKTsKLQkJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7Ci0JCQlrZXktPmh3X2tleV9pZHggPSBzdGFfaWQ7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoInNldF9rZXkgc3VjY2VzcywgdXNpbmcgaHdjcnlwdG9cbiIpOwotCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCX0KKwljYXNlIFNFVF9LRVk6CisJCWlmIChzdGF0aWNfa2V5KQorCQkJcmV0ID0gaXdsMzk0NV9zZXRfc3RhdGljX2tleShwcml2LCBrZXkpOworCQllbHNlCisJCQlyZXQgPSBpd2wzOTQ1X3NldF9keW5hbWljX2tleShwcml2LCBrZXksIHN0YV9pZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6Ci0JCXJjID0gaXdsMzk0NV9jbGVhcl9zdGFfa2V5X2luZm8ocHJpdiwgc3RhX2lkKTsKLQkJaWYgKCFyYykgewotCQkJaXdsMzk0NV9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAwKTsKLQkJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKLQkJfQorCQlpZiAoc3RhdGljX2tleSkKKwkJCXJldCA9IGl3bDM5NDVfcmVtb3ZlX3N0YXRpY19rZXkocHJpdik7CisJCWVsc2UKKwkJCXJldCA9IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHByaXYsIHN0YV9pZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZGlzYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyYyA9IC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBxOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChxdWV1ZSA+PSBBQ19OVU0pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHF1ZXVlID49IEFDX05VTSAlZFxuIiwgcXVldWUpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcXVldWUgPj0gQUNfTlVNICVkXG4iLCBxdWV1ZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzA5OSwyOSArNDE0NSwyOSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlpd2wzOTQ1X2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKLQllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpCi0JCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDApOworCQlpd2xfYWN0aXZhdGVfcW9zKHByaXYsIDEpOworCWVsc2UgaWYgKHByaXYtPmFzc29jX2lkICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQorCQlpd2xfYWN0aXZhdGVfcW9zKHByaXYsIDApOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCBpLCBhdmFpbDsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03MTMwLDcgKzQxNzYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBQ19OVU07IGkrKykgewogCQl0eHEgPSAmcHJpdi0+dHhxW2ldOwogCQlxID0gJnR4cS0+cTsKLQkJYXZhaWwgPSBpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpOworCQlhdmFpbCA9IGl3bF9xdWV1ZV9zcGFjZShxKTsKIAogCQlzdGF0c1tpXS5sZW4gPSBxLT5uX3dpbmRvdyAtIGF2YWlsOwogCQlzdGF0c1tpXS5saW1pdCA9IHEtPm5fd2luZG93IC0gcS0+aGlnaF9tYXJrOwpAQCAtNzEzOSwzNCArNDE4NSwyNCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfbWFjX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQotewotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWl3bDM5NDVfcmVzZXRfcW9zKHByaXYpOworCWl3bF9yZXNldF9xb3MocHJpdik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmFzc29jX2lkID0gMDsKIAlwcml2LT5hc3NvY19jYXBhYmlsaXR5ID0gMDsKLQlwcml2LT5jYWxsX3Bvc3RfYXNzb2NfZnJvbV9iZWFjb24gPSAwOwogCiAJLyogbmV3IGFzc29jaWF0aW9uIGdldCByaWQgb2YgaWJzcyBiZWFjb24gc2tiICovCiAJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtNzE3NSwxNSArNDIxMSwxNCBAQAogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXByaXYtPmJlYWNvbl9pbnQgPSBwcml2LT5ody0+Y29uZi5iZWFjb25faW50OwotCXByaXYtPnRpbWVzdGFtcDEgPSAwOwotCXByaXYtPnRpbWVzdGFtcDAgPSAwOworCXByaXYtPnRpbWVzdGFtcCA9IDA7CiAJaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlwcml2LT5iZWFjb25faW50ID0gMDsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CkBAIC03MTkyLDcgKzQyMjcsNyBAQAogCSAqIGNsZWFyIFJYT05fRklMVEVSX0FTU09DX01TSyBiaXQKIAkqLwogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJfQpAQCAtNzIwMCwzMyArNDIzNSwzNCBAQAogCS8qIFBlciBtYWM4MDIxMS5oOiBUaGlzIGlzIG9ubHkgdXNlZCBpbiBJQlNTIG1vZGUuLi4gKi8KIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlfX2xlNjQgdGltZXN0YW1wOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgSUJTU1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzIzOCwxMSArNDI3NCwxMyBAQAogCXByaXYtPmlic3NfYmVhY29uID0gc2tiOwogCiAJcHJpdi0+YXNzb2NfaWQgPSAwOworCXRpbWVzdGFtcCA9ICgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wOworCXByaXYtPnRpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KHRpbWVzdGFtcCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKKwlpd2xfcmVzZXRfcW9zKHByaXYpOwogCiAJaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShwcml2KTsKIApAQCAtNzI1Niw3ICs0Mjk0LDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGFkZHMgYSBuZXcgYXR0cmlidXRlIHRvIHRoZSBzeXNmcyByZXByZXNlbnRhdGlvbgpAQCAtNzI2NSwzOCArNDMwMyw0MSBAQAogICoKICAqIFNlZSB0aGUgbGV2ZWwgZGVmaW5pdGlvbnMgaW4gaXdsIGZvciBkZXRhaWxzLgogICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXdsMzk0NV9kZWJ1Z19sZXZlbCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOFhcbiIsIHByaXYtPmRlYnVnX2xldmVsKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLAorc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JY2hhciAqcCA9IChjaGFyICopYnVmOwotCXUzMiB2YWw7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZC0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKIAotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKTsKLQlpZiAocCA9PSBidWYpCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJICAgICAgICI6ICVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOworCWlmIChyZXQpCisJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQotCQlpd2wzOTQ1X2RlYnVnX2xldmVsID0gdmFsOworCQlwcml2LT5kZWJ1Z19sZXZlbCA9IHZhbDsKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICBzaG93X2RlYnVnX2xldmVsLCBzdG9yZV9kZWJ1Z19sZXZlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19kZWJ1Z19sZXZlbCwgc3RvcmVfZGVidWdfbGV2ZWwpOwogCi0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfREVCVUcgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVRyAqLwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBlcmF0dXJlKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHByaXYpKTsKQEAgLTczMDcsMjIgKzQzNDgsMjEgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdHhfcG93ZXIoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfdHhfcG93ZXIoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAl1MzIgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDEwKTsKIAlpZiAocCA9PSBidWYpCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJICAgICAgICI6ICVzIGlzIG5vdCBpbiBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOworCQlJV0xfSU5GTyhwcml2LCAiOiAlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCWl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHByaXYsIHZhbCk7CiAKQEAgLTczMzQsNyArNDM3NCw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDRYXG4iLCBwcml2LT5hY3RpdmVfcnhvbi5mbGFncyk7CiB9CkBAIC03MzQzLDE2ICs0MzgzLDE2IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAl1MzIgZmxhZ3MgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChsZTMyX3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MpICE9IGZsYWdzKSB7CiAJCS8qIENhbmNlbCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2NhbnMuLi4gKi8KLQkJaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZsYWdzID0gMHglMDRYXG4iLAorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdHRpbmcgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwKIAkJCQkgICAgICAgZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCQkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKQEAgLTczNjgsNyArNDQwOCw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2ZpbHRlcl9mbGFncyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WFxuIiwKIAkJbGUzMl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzKSk7CkBAIC03Mzc4LDE2ICs0NDE4LDE2IEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAl1MzIgZmlsdGVyX2ZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncykgIT0gZmlsdGVyX2ZsYWdzKSB7CiAJCS8qIENhbmNlbCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2NhbnMuLi4gKi8KLQkJaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgogCQkJCSAgICAgICAiMHglMDRYXG4iLCBmaWx0ZXJfZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9CiAJCQkJY3B1X3RvX2xlMzIoZmlsdGVyX2ZsYWdzKTsKQEAgLTc0MDcsOCArNDQ0Nyw4IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X21lYXN1cmVtZW50KHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gbWVhc3VyZV9yZXBvcnQ7CiAJdTMyIHNpemUgPSBzaXplb2YobWVhc3VyZV9yZXBvcnQpLCBsZW4gPSAwLCBvZnMgPSAwOwogCXU4ICpkYXRhID0gKHU4ICopJm1lYXN1cmVfcmVwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NDQwLDcgKzQ0ODAsNyBAQAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zID0gewogCQkuY2hhbm5lbCA9IGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpLAogCQkuc3RhcnRfdGltZSA9IGNwdV90b19sZTY0KHByaXYtPmxhc3RfdHNmKSwKQEAgLTc0NjQsNyArNDUwNCw3IEBACiAJCQl0eXBlID0gc2ltcGxlX3N0cnRvdWwocCArIDEsIE5VTEwsIDApOwogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJJbnZva2luZyBtZWFzdXJlbWVudCBvZiB0eXBlICVkIG9uICIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW52b2tpbmcgbWVhc3VyZW1lbnQgb2YgdHlwZSAlZCBvbiAiCiAJCSAgICAgICAiY2hhbm5lbCAlZCAoZm9yICclcycpXG4iLCB0eXBlLCBwYXJhbXMuY2hhbm5lbCwgYnVmKTsKIAlpd2wzOTQ1X2dldF9tZWFzdXJlbWVudChwcml2LCAmcGFyYW1zLCB0eXBlKTsKIApAQCAtNzQ3OSw3ICs0NTE5LDcgQEAKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAogCXByaXYtPnJldHJ5X3JhdGUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCWlmIChwcml2LT5yZXRyeV9yYXRlIDw9IDApCkBAIC03NDkxLDUwICs0NTMxLDcyIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cmV0cnlfcmF0ZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihyZXRyeV9yYXRlLCBTX0lXVVNSIHwgU19JUlVTUiwgc2hvd19yZXRyeV9yYXRlLAogCQkgICBzdG9yZV9yZXRyeV9yYXRlKTsKIAorCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9wb3dlcl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgcmM7Ci0JaW50IG1vZGU7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBtb2RlOwogCi0JbW9kZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHkocHJpdikpIHsKLQkJcmMgPSAtRUFHQUlOOworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtb2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOworCWlmIChyZXQpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQotCWlmICgobW9kZSA8IDEpIHx8IChtb2RlID4gSVdMX1BPV0VSX0xJTUlUKSB8fCAobW9kZSA9PSBJV0xfUE9XRVJfQUMpKQotCQltb2RlID0gSVdMX1BPV0VSX0FDOwotCWVsc2UKLQkJbW9kZSB8PSBJV0xfUE9XRVJfRU5BQkxFRDsKLQotCWlmIChtb2RlICE9IHByaXYtPnBvd2VyX21vZGUpIHsKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTEVWRUwobW9kZSkpOwotCQlpZiAocmMpIHsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcHJpdi0+cG93ZXJfbW9kZSA9IG1vZGU7Ci0JfQotCi0JcmMgPSBjb3VudDsKKwlyZXQgPSBjb3VudDsKIAogIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19wb3dlcl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCWludCBtb2RlID0gcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmc7CisJaW50IHN5c3RlbSA9IHByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmc7CisJaW50IGxldmVsID0gcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9tb2RlOworCWNoYXIgKnAgPSBidWY7CisKKwlzd2l0Y2ggKHN5c3RlbSkgeworCWNhc2UgSVdMX1BPV0VSX1NZU19BVVRPOgorCQlwICs9IHNwcmludGYocCwgIlNZU1RFTTphdXRvIik7CisJCWJyZWFrOworCWNhc2UgSVdMX1BPV0VSX1NZU19BQzoKKwkJcCArPSBzcHJpbnRmKHAsICJTWVNURU06YWMiKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0JBVFRFUlk6CisJCXAgKz0gc3ByaW50ZihwLCAiU1lTVEVNOmJhdHRlcnkiKTsKKwkJYnJlYWs7CisJfQorCisJcCArPSBzcHJpbnRmKHAsICJcdE1PREU6JXMiLCAobW9kZSA8IElXTF9QT1dFUl9BVVRPKSA/CisJCQkiZml4ZWQiIDogImF1dG8iKTsKKwlwICs9IHNwcmludGYocCwgIlx0SU5ERVg6JWQiLCBsZXZlbCk7CisJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCXJldHVybiBwIC0gYnVmICsgMTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX2xldmVsLCBTX0lXVVNSIHwgU19JUlVTUiwKKwkJICAgc2hvd19wb3dlcl9sZXZlbCwgc3RvcmVfcG93ZXJfbGV2ZWwpOworCiAjZGVmaW5lIE1BWF9XWF9TVFJJTkcgODAKIAogLyogVmFsdWVzIGFyZSBpbiBtaWNyb3NlY29uZCAqLwpAQCAtNzU1Myw0MSArNDYxNSw2IEBACiAJMTAwMDAwMAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19wb3dlcl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGV2ZWwgPSBJV0xfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSk7Ci0JY2hhciAqcCA9IGJ1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiJWQgIiwgbGV2ZWwpOwotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIElXTF9QT1dFUl9NT0RFX0NBTToKLQljYXNlIElXTF9QT1dFUl9BQzoKLQkJcCArPSBzcHJpbnRmKHAsICIoQUMpIik7Ci0JCWJyZWFrOwotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCXAgKz0gc3ByaW50ZihwLCAiKEJBVFRFUlkpIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXAgKz0gc3ByaW50ZihwLAotCQkJICAgICAiKFRpbWVvdXQgJWRtcywgUGVyaW9kICVkbXMpIiwKLQkJCSAgICAgdGltZW91dF9kdXJhdGlvbltsZXZlbCAtIDFdIC8gMTAwMCwKLQkJCSAgICAgcGVyaW9kX2R1cmF0aW9uW2xldmVsIC0gMV0gLyAxMDAwKTsKLQl9Ci0KLQlpZiAoIShwcml2LT5wb3dlcl9tb2RlICYgSVdMX1BPV0VSX0VOQUJMRUQpKQotCQlwICs9IHNwcmludGYocCwgIiBPRkZcbiIpOwotCWVsc2UKLQkJcCArPSBzcHJpbnRmKHAsICIgXG4iKTsKLQotCXJldHVybiBwIC0gYnVmICsgMTsKLQotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVVNSLCBzaG93X3Bvd2VyX2xldmVsLAotCQkgICBzdG9yZV9wb3dlcl9sZXZlbCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTc2MDAsMTcgKzQ2MjcsMTcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdGlzdGljcyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyk7CiAJdTMyIGxlbiA9IDAsIG9mcyA9IDA7Ci0JdTggKmRhdGEgPSAodTggKikmcHJpdi0+c3RhdGlzdGljczsKKwl1OCAqZGF0YSA9ICh1OCAqKSZwcml2LT5zdGF0aXN0aWNzXzM5OwogCWludCByYyA9IDA7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXJjID0gaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2KTsKKwlyYyA9IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCAwKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChyYykgewpAQCAtNzYzOCwzNCArNDY2NSwzNCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19hbnRlbm5hKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+YW50ZW5uYSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfYW50ZW5uYShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWludCBhbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKIAogCWlmIChzc2NhbmYoYnVmLCAiJTFpIiwgJmFudCkgIT0gMSkgewotCQlJV0xfREVCVUdfSU5GTygibm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIm5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIik7CiAJCXJldHVybiBjb3VudDsKIAl9CiAKIAlpZiAoKGFudCA+PSAwKSAmJiAoYW50IDw9IDIpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZXR0aW5nIGFudGVubmEgc2VsZWN0IHRvICVkLlxuIiwgYW50KTsKLQkJcHJpdi0+YW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlhbnQ7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIGFudGVubmEgc2VsZWN0IHRvICVkLlxuIiwgYW50KTsKKwkJaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEgPSAoZW51bSBpd2wzOTQ1X2FudGVubmEpYW50OwogCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiQmFkIGFudGVubmEgc2VsZWN0IHZhbHVlICVkLlxuIiwgYW50KTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBhbnRlbm5hIHNlbGVjdCB2YWx1ZSAlZC5cbiIsIGFudCk7CiAKIAogCXJldHVybiBjb3VudDsKQEAgLTc2NzYsOCArNDcwMyw4IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIChpbnQpcHJpdi0+c3RhdHVzKTsKIH0KQEAgLTc2OTEsNyArNDcxOCw3IEBACiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCiAJaWYgKHBbMF0gPT0gJzEnKQotCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZygoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKKwkJaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQpAQCAtNzcwNSw3ICs0NzMyLDcgQEAKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAKIAlpZiAocFswXSA9PSAnMScpCi0JCWl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOworCQlpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC03NzE4LDIzICs0NzQ1LDI0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CisJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoRFJWX05BTUUpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAogCUlOSVRfV09SSygmcHJpdi0+dXAsIGl3bDM5NDVfYmdfdXApOwogCUlOSVRfV09SSygmcHJpdi0+cmVzdGFydCwgaXdsMzk0NV9iZ19yZXN0YXJ0KTsKIAlJTklUX1dPUksoJnByaXYtPnJ4X3JlcGxlbmlzaCwgaXdsMzk0NV9iZ19yeF9yZXBsZW5pc2gpOwotCUlOSVRfV09SSygmcHJpdi0+c2Nhbl9jb21wbGV0ZWQsIGl3bDM5NDVfYmdfc2Nhbl9jb21wbGV0ZWQpOwotCUlOSVRfV09SSygmcHJpdi0+cmVxdWVzdF9zY2FuLCBpd2wzOTQ1X2JnX3JlcXVlc3Rfc2Nhbik7Ci0JSU5JVF9XT1JLKCZwcml2LT5hYm9ydF9zY2FuLCBpd2wzOTQ1X2JnX2Fib3J0X3NjYW4pOwotCUlOSVRfV09SSygmcHJpdi0+cmZfa2lsbCwgaXdsMzk0NV9iZ19yZl9raWxsKTsKKwlJTklUX1dPUksoJnByaXYtPnJmX2tpbGwsIGl3bF9iZ19yZl9raWxsKTsKIAlJTklUX1dPUksoJnByaXYtPmJlYWNvbl91cGRhdGUsIGl3bDM5NDVfYmdfYmVhY29uX3VwZGF0ZSk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmluaXRfYWxpdmVfc3RhcnQsIGl3bDM5NDVfYmdfaW5pdF9hbGl2ZV9zdGFydCk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmFsaXZlX3N0YXJ0LCBpd2wzOTQ1X2JnX2FsaXZlX3N0YXJ0KTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXdsMzk0NV9iZ19zY2FuX2NoZWNrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cmZraWxsX3BvbGwsIGl3bDM5NDVfcmZraWxsX3BvbGwpOworCUlOSVRfV09SSygmcHJpdi0+c2Nhbl9jb21wbGV0ZWQsIGl3bF9iZ19zY2FuX2NvbXBsZXRlZCk7CisJSU5JVF9XT1JLKCZwcml2LT5yZXF1ZXN0X3NjYW4sIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKTsKKwlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bF9iZ19hYm9ydF9zY2FuKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXdsX2JnX3NjYW5fY2hlY2spOwogCiAJaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOwogCkBAIC03NzQyLDcgKzQ3NzAsNyBAQAogCQkgICAgIGl3bDM5NDVfaXJxX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2wzOTQ1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOwogCkBAIC03NzY4LDcgKzQ3OTYsOSBAQAogCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKIAkmZGV2X2F0dHJfdGVtcGVyYXR1cmUuYXR0ciwKIAkmZGV2X2F0dHJfdHhfcG93ZXIuYXR0ciwKLQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJJmRldl9hdHRyX2RlYnVnX2xldmVsLmF0dHIsCisjZW5kaWYKIAlOVUxMCiB9OwogCkBAIC03Nzg1LDgzICs0ODE1LDE3OSBAQAogCS5yZW1vdmVfaW50ZXJmYWNlID0gaXdsMzk0NV9tYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnID0gaXdsMzk0NV9tYWNfY29uZmlnLAogCS5jb25maWdfaW50ZXJmYWNlID0gaXdsMzk0NV9tYWNfY29uZmlnX2ludGVyZmFjZSwKLQkuY29uZmlndXJlX2ZpbHRlciA9IGl3bDM5NDVfY29uZmlndXJlX2ZpbHRlciwKKwkuY29uZmlndXJlX2ZpbHRlciA9IGl3bF9jb25maWd1cmVfZmlsdGVyLAogCS5zZXRfa2V5ID0gaXdsMzk0NV9tYWNfc2V0X2tleSwKLQkuZ2V0X3N0YXRzID0gaXdsMzk0NV9tYWNfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMgPSBpd2wzOTQ1X21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2wzOTQ1X21hY19jb25mX3R4LAogCS5yZXNldF90c2YgPSBpd2wzOTQ1X21hY19yZXNldF90c2YsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBpd2wzOTQ1X2Jzc19pbmZvX2NoYW5nZWQsCi0JLmh3X3NjYW4gPSBpd2wzOTQ1X21hY19od19zY2FuCisJLmh3X3NjYW4gPSBpd2xfbWFjX2h3X3NjYW4KIH07CiAKK3N0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2RydihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisKKwlwcml2LT5yZXRyeV9yYXRlID0gMTsKKwlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CisKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisKKwkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLworCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisKKwlwcml2LT5kYXRhX3JldHJ5X2xpbWl0ID0gLTE7CisJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CisJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CisJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCWl3bF9yZXNldF9xb3MocHJpdik7CisKKwlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKKwlwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnZhbCA9IDA7CisKKwlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7CisJLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQ0FNIG1vZGUgKi8KKwlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CisKKwlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKKwkJSVdMX1dBUk4ocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCisJCQkgZWVwcm9tLT52ZXJzaW9uKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJLyogU2V0IHVwIHR4cG93ZXIgc2V0dGluZ3MgaW4gZHJpdmVyIGZvciBhbGwgY2hhbm5lbHMgKi8KKwlpZiAoaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9mcmVlX2NoYW5uZWxfbWFwOworCX0KKworCXJldCA9IGl3bGNvcmVfaW5pdF9nZW9zKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKKwl9CisJaXdsMzk0NV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2NoYW5uZWxfbWFwOgorCWl3bF9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXR1cF9tYWMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gIml3bC0zOTQ1LXJzIjsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdik7CisKKwkvKiBUZWxsIG1hYzgwMjExIG91ciBjaGFyYWN0ZXJpc3RpY3MgKi8KKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNIHwKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisKKwkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KKwlody0+cXVldWVzID0gNDsKKworCWh3LT5jb25mLmJlYWNvbl9pbnQgPSAxMDA7CisKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscykKKwkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9CisJCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykKKwkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3IChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaXdsMzk0NV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGVyciA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGl3bF8zOTQ1X2NmZyAqY2ZnID0gKHN0cnVjdCBpd2xfMzk0NV9jZmcgKikoZW50LT5kcml2ZXJfZGF0YSk7CisJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogMS4gQWxsb2NhdGluZyBIVyBkYXRhCiAJICogKioqKioqKioqKioqKioqKioqKiovCiAKLQkvKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwotCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLiAqLwotCWlmIChpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbikgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIGh3X3NjYW5cbiIpOwotCQlpd2wzOTQ1X2h3X29wcy5od19zY2FuID0gTlVMTDsKLQl9Ci0KLQlpZiAoKGl3bDM5NDVfcGFyYW1fcXVldWVzX251bSA+IElXTDM5X01BWF9OVU1fUVVFVUVTKSB8fAotCSAgICAoaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewotCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTDM5X01BWF9OVU1fUVVFVUVTKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogbWFjODAyMTEgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UgaW5zdGFuY2UsIGluY2x1ZGluZwogCSAqICAgc3BhY2UgZm9yIHRoaXMgZHJpdmVyJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bDM5NDVfcHJpdiksICZpd2wzOTQ1X2h3X29wcyk7CisJaHcgPSBpd2xfYWxsb2NfYWxsKGNmZywgJml3bDM5NDVfaHdfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0KKwlwcml2ID0gaHctPnByaXY7CiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOwogCi0JcHJpdiA9IGh3LT5wcml2OwotCXByaXYtPmh3ID0gaHc7Ci0JcHJpdi0+cGNpX2RldiA9IHBkZXY7CisJaWYgKChpd2wzOTQ1X21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcyA+IElXTDM5X01BWF9OVU1fUVVFVUVTKSB8fAorCSAgICAgKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCQlJV0xfTUlOX05VTV9RVUVVRVMsIElXTDM5X01BWF9OVU1fUVVFVUVTKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaWVlZTgwMjExX2ZyZWVfaHc7CisJfQorCisJLyoKKwkgKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucworCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLgorCSAqLworCWlmIChpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJEaXNhYmxpbmcgaHdfc2NhblxuIik7CisJCWl3bDM5NDVfaHdfb3BzLmh3X3NjYW4gPSBOVUxMOworCX0KKworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBMT0FEIERSSVZFUiAqKipcbiIpOwogCXByaXYtPmNmZyA9IGNmZzsKKwlwcml2LT5wY2lfZGV2ID0gcGRldjsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKLQlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtMzk0NS1ycyI7Ci0JaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYpOwotCi0JLyogU2VsZWN0IGFudGVubmEgKG1heSBiZSBoZWxwZnVsIGlmIG9ubHkgb25lIGFudGVubmEgaXMgY29ubmVjdGVkKSAqLwotCXByaXYtPmFudGVubmEgPSAoZW51bSBpd2wzOTQ1X2FudGVubmEpaXdsMzk0NV9wYXJhbV9hbnRlbm5hOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaXdsMzk0NV9kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfcGFyYW1fZGVidWc7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlwcml2LT5kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZzsKIAlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOwogI2VuZGlmCiAKLQkvKiBUZWxsIG1hYzgwMjExIG91ciBjaGFyYWN0ZXJpc3RpY3MgKi8KLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPndpcGh5LT5md19oYW5kbGVzX3JlZ3VsYXRvcnkgPSB0cnVlOwotCi0JLyogNCBFRENBIFFPUyBwcmlvcml0aWVzICovCi0JaHctPnF1ZXVlcyA9IDQ7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICogMi4gSW5pdGlhbGl6aW5nIFBDSSBidXMKIAkgKiAqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzg3Niw3ICs1MDAyLDcgQEAKIAlpZiAoIWVycikKIAkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJfQogCkBAIC03ODk0LDk4ICs1MDIwLDU4IEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfYmFzZSA9ICVwXG4iLCBwcml2LT5od19iYXNlKTsKIAogCS8qIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKIAkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDB4MDApOwogCi0JLyogbmljIGluaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCi0JCQlDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUik7Ci0KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQllcnIgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCS8qIGFtcCBpbml0ICovCisJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogNC4gUmVhZCBFRVBST00KIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KKwogCS8qIFJlYWQgdGhlIEVFUFJPTSAqLwotCWVyciA9IGl3bDM5NDVfZWVwcm9tX2luaXQocHJpdik7CisJZXJyID0gaXdsX2VlcHJvbV9pbml0KHByaXYpOwogCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAkvKiBNQUMgQWRkcmVzcyBsb2NhdGlvbiBpbiBFRVBST00gc2FtZSBmb3IgMzk0NS80OTY1ICovCi0JZ2V0X2VlcHJvbV9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKwltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGVlcHJvbS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiTUFDIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA1LiBTZXR1cCBIVyBDb25zdGFudHMKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KIAkvKiBEZXZpY2Utc3BlY2lmaWMgc2V0dXAgKi8KLQlpZiAoaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhwcml2KSkgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBzZXQgaHcgc2V0dGluZ3NcbiIpOwotCQlnb3RvIG91dF9pb3VubWFwOworCWlmIChpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMocHJpdikpIHsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBzZXR0aW5nc1xuIik7CisJCWdvdG8gb3V0X2VlcHJvbV9mcmVlOwogCX0KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDYuIFNldHVwIHByaXYKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KLQlwcml2LT5yZXRyeV9yYXRlID0gMTsKLQlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwotCi0JLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KLQlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwotCi0JcHJpdi0+ZGF0YV9yZXRyeV9saW1pdCA9IC0xOwotCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOwotCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOwotCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCi0JcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047Ci0KLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKLQotCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwotCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKLQotCi0JcHJpdi0+cmF0ZXNfbWFzayA9IElXTF9SQVRFU19NQVNLOwotCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFDIG1vZGUgKi8KLQlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0FDOwotCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1BPV0VSOwotCi0JZXJyID0gaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWVyciA9IGl3bDM5NDVfaW5pdF9kcnYocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCWdvdG8gb3V0X3Vuc2V0X2h3X3NldHRpbmc7CisJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyBkcml2ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfdW5zZXRfaHdfcGFyYW1zOwogCX0KIAotCWVyciA9IGl3bDM5NDVfaW5pdF9nZW9zKHByaXYpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgZ2VvcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOwotCQlnb3RvIG91dF9mcmVlX2NoYW5uZWxfbWFwOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJIjogRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzXG4iLCBwcml2LT5jZmctPm5hbWUpOworCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXNcbiIsCisJCXByaXYtPmNmZy0+bmFtZSk7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA3LiBJbml0aWFsaXplIE1vZHVsZSBQYXJhbWV0ZXJzCkBAIC03OTkzLDkgKzUwNzksOSBAQAogCiAJLyogSW5pdGlhbGl6ZSBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlcyBoZXJlICovCiAJLyogRGlzYWJsZSByYWRpbyAoU1cgUkYgS0lMTCkgdmlhIHBhcmFtZXRlciB3aGVuIGxvYWRpbmcgZHJpdmVyICovCi0JaWYgKGl3bDM5NDVfcGFyYW1fZGlzYWJsZSkgeworCWlmIChpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZSkgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQkJSVdMX0RFQlVHX0lORk8oIlJhZGlvIGRpc2FibGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSYWRpbyBkaXNhYmxlZC5cbiIpOwogCX0KIAogCkBAIC04MDA0LDQzICs1MDkwLDQ5IEBACiAJICogKioqKioqKioqKioqKioqKioqKiovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCisJcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CisKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3IsIElSUUZfU0hBUkVELAorCQkJICBEUlZfTkFNRSwgcHJpdik7CisJaWYgKGVycikgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcHJpdi0+cGNpX2Rldi0+aXJxKTsKKwkJZ290byBvdXRfZGlzYWJsZV9tc2k7CisJfQorCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7Ci0JCWdvdG8gb3V0X2ZyZWVfZ2VvczsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBJRUVFODAyMTFfQkFORF8yR0haLCA2KTsKKwlpd2xfc2V0X3J4b25fY2hhbm5lbChwcml2LAorCQkJICAgICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHNbNV0pOwogCWl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOwogCi0JLyoqKioqKioqKioqKioqKioqKioqKioqCi0JICogOS4gQ29uY2x1ZGUKLQkgKiAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JICogMTAuIFNldHVwIGFuZCBSZWdpc3RlciBtYWM4MDIxMQorCSAqIDkuIFNldHVwIGFuZCBSZWdpc3RlciBtYWM4MDIxMQogCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKGVycm9yICVkKVxuIiwgZXJyKTsKLQkJZ290byAgb3V0X3JlbW92ZV9zeXNmczsKLQl9CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCi0JcHJpdi0+aHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMTsKLQotCi0JZXJyID0gaXdsMzk0NV9yZmtpbGxfaW5pdChwcml2KTsKKwllcnIgPSBpd2wzOTQ1X3NldHVwX21hYyhwcml2KTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJGS0lMTCBzeXN0ZW0uICIKKwkJZ290byAgb3V0X3JlbW92ZV9zeXNmczsKKworCWVyciA9IGl3bF9yZmtpbGxfaW5pdChwcml2KTsKKwlpZiAoZXJyKQorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKKwkvKiBTdGFydCBtb25pdG9yaW5nIHRoZSBraWxsc3dpdGNoICovCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJma2lsbF9wb2xsLAorCQkJICAgMiAqIEhaKTsKIAogCXJldHVybiAwOwogCkBAIC04MDQ4LDEyICs1MTQwLDE2IEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2wzOTQ1X2F0dHJpYnV0ZV9ncm91cCk7Ci0gb3V0X2ZyZWVfZ2VvczoKLQlpd2wzOTQ1X2ZyZWVfZ2Vvcyhwcml2KTsKLSBvdXRfZnJlZV9jaGFubmVsX21hcDoKLQlpd2wzOTQ1X2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Ci0gb3V0X3Vuc2V0X2h3X3NldHRpbmc6Ci0JaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHByaXYpOworIG91dF9yZWxlYXNlX2lycToKKwlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOworIG91dF9kaXNhYmxlX21zaToKKwlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CisJaXdsY29yZV9mcmVlX2dlb3MocHJpdik7CisJaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Cisgb3V0X3Vuc2V0X2h3X3BhcmFtczoKKwlpd2wzOTQ1X3Vuc2V0X2h3X3BhcmFtcyhwcml2KTsKKyBvdXRfZWVwcm9tX2ZyZWU6CisJaXdsX2VlcHJvbV9mcmVlKHByaXYpOwogIG91dF9pb3VubWFwOgogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogIG91dF9wY2lfcmVsZWFzZV9yZWdpb25zOgpAQCAtODA2OSw0MiArNTE2NSw0NiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXdsMzk0NV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOwogCiAJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCWl3bDM5NDVfZG93bihwcml2KTsKKwlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgeworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAwOworCX0gZWxzZSB7CisJCWl3bDM5NDVfZG93bihwcml2KTsKKwl9CiAKIAkvKiBtYWtlIHN1cmUgd2UgZmx1c2ggYW55IHBlbmRpbmcgaXJxIG9yCiAJICogdGFza2xldCBmb3IgdGhlIGRyaXZlcgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKIAotCWl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIocHJpdik7CisJaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHByaXYpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJma2lsbF9wb2xsKTsKKwogCWl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKIAlpZiAocHJpdi0+cnhxLmJkKQotCQlpd2wzOTQ1X3J4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9mcmVlKHByaXYsICZwcml2LT5yeHEpOwogCWl3bDM5NDVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwogCi0JaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHByaXYpOworCWl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOwogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCiAJLypuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAKQEAgLTgxMTQsMTMgKzUyMTQsMTYgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCXByaXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAKKwlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOworCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWl3bDM5NDVfZnJlZV9jaGFubmVsX21hcChwcml2KTsKLQlpd2wzOTQ1X2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKKwlpd2xjb3JlX2ZyZWVfZ2Vvcyhwcml2KTsKIAlrZnJlZShwcml2LT5zY2FuKTsKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwpAQCAtODEzMiwyNyArNTIzNSwxNSBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChwcml2LT5pc19vcGVuKSB7CiAJCXNldF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpOwogCQlpd2wzOTQ1X21hY19zdG9wKHByaXYtPmh3KTsKIAkJcHJpdi0+aXNfb3BlbiA9IDE7CiAJfQotCi0JLyogcGNpIGRyaXZlciBhc3N1bWVzIHN0YXRlIHdpbGwgYmUgc2F2ZWQgaW4gdGhpcyBmdW5jdGlvbi4KLQkgKiBwY2kgc3RhdGUgaXMgc2F2ZWQgYW5kIGRldmljZSBkaXNhYmxlZCB3aGVuIGludGVyZmFjZSBpcwotCSAqIHN0b3BwZWQsIHNvIGF0IHRoaXMgdGltZSBwY2kgZGV2aWNlIHdpbGwgYWx3YXlzIGJlIGRpc2FibGVkIC0KLQkgKiB3aGV0aGVyIGludGVyZmFjZSB3YXMgc3RhcnRlZCBvciBub3QuIHNhdmluZyBwY2kgc3RhdGUgbm93IHdpbGwKLQkgKiBjYXVzZSBzYXZlZCBzdGF0ZSBiZSB0aGF0IG9mIGEgZGlzYWJsZWQgZGV2aWNlLCB3aGljaCB3aWxsIGNhdXNlCi0JICogcHJvYmxlbXMgZHVyaW5nIHJlc3VtZSBpbiB0aGF0IHdlIHdpbGwgZW5kIHVwIHdpdGggYSBkaXNhYmxlZCBkZXZpY2UuCi0JICoKLQkgKiBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHNhdmVkIHN0YXRlIChmcm9tIHdoZW4gaW50ZXJmYWNlIHdhcwotCSAqIHN0b3BwZWQpIGlzIHZhbGlkLiBpZiBpbnRlcmZhY2Ugd2FzIG5ldmVyIHVwIGF0IHRpbWUgb2Ygc3VzcGVuZAotCSAqIHRoZW4gdGhlIHNhdmVkIHN0YXRlIHdpbGwgc3RpbGwgYmUgdmFsaWQgYXMgaXQgd2FzIHNhdmVkIGR1cmluZwotCSAqIC5wcm9iZS4gKi8KLQlwZGV2LT5zdGF0ZV9zYXZlZCA9IHRydWU7Ci0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCiAJcmV0dXJuIDA7CkBAIC04MTYwLDkgKzUyNTEsMTQgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bDM5NDVfbWFjX3N0YXJ0KHByaXYtPmh3KTsKQEAgLTgxNzMsMTE0ICs1MjY5LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi0vKioqKioqKioqKioqKioqIFJGS0lMTCBGVU5DVElPTlMgKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9SRktJTEwKLS8qIHNvZnR3YXJlIHJmLWtpbGwgZnJvbSB1c2VyICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcmZraWxsX3NvZnRfcmZfa2lsbCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcHJpdi0+cmZraWxsKQotCXJldHVybiAwOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm4gMDsKLQotCUlXTF9ERUJVR19SRl9LSUxMKCJ3ZSByZWNlaXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOgotCQlpZiAoaXdsMzk0NV9pc19yZmtpbGxfaHcocHJpdikpIHsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQlpd2wzOTQ1X3JhZGlvX2tpbGxfc3cocHJpdiwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDoKLQkJaXdsMzk0NV9yYWRpb19raWxsX3N3KHByaXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfV0FSTklORygid2UgcmVjZWl2ZWQgdW5leHBlY3RlZCBSRktJTEwgc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQkJYnJlYWs7Ci0JfQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBpd2wzOTQ1X3Jma2lsbF9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSk7Ci0JaW50IHJldCA9IDA7Ci0KLQlCVUdfT04oZGV2aWNlID09IE5VTEwpOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKLQlwcml2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKLQlpZiAoIXByaXYtPnJma2lsbCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZmtpbGwgZGV2aWNlLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJpdi0+cmZraWxsLT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOwotCXByaXYtPnJma2lsbC0+ZGF0YSA9IHByaXY7Ci0JcHJpdi0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0JcHJpdi0+cmZraWxsLT50b2dnbGVfcmFkaW8gPSBpd2wzOTQ1X3Jma2lsbF9zb2Z0X3JmX2tpbGw7Ci0JcHJpdi0+cmZraWxsLT51c2VyX2NsYWltX3Vuc3VwcG9ydGVkID0gMTsKLQotCXByaXYtPnJma2lsbC0+ZGV2LmNsYXNzLT5zdXNwZW5kID0gTlVMTDsKLQlwcml2LT5yZmtpbGwtPmRldi5jbGFzcy0+cmVzdW1lID0gTlVMTDsKLQotCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGwpOwotCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgcmZraWxsOiAlZFxuIiwgcmV0KTsKLQkJZ290byBmcmVlZF9yZmtpbGw7Ci0JfQotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwotCXJldHVybiByZXQ7Ci0KLWZyZWVkX3Jma2lsbDoKLQlpZiAocHJpdi0+cmZraWxsICE9IE5VTEwpCi0JCXJma2lsbF9mcmVlKHByaXYtPnJma2lsbCk7Ci0JcHJpdi0+cmZraWxsID0gTlVMTDsKLQotZXJyb3I6Ci0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChwcml2LT5yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKHByaXYtPnJma2lsbCk7Ci0KLQlwcml2LT5yZmtpbGwgPSBOVUxMOwotfQotCi0vKiBzZXQgcmYta2lsbCB0byB0aGUgcmlnaHQgc3RhdGUuICovCi12b2lkIGl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JaWYgKCFwcml2LT5yZmtpbGwpCi0JCXJldHVybjsKLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSkgewotCQlyZmtpbGxfZm9yY2Vfc3RhdGUocHJpdi0+cmZraWxsLCBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghaXdsMzk0NV9pc19yZmtpbGxfc3cocHJpdikpCi0JCXJma2lsbF9mb3JjZV9zdGF0ZShwcml2LT5yZmtpbGwsIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpOwotCWVsc2UKLQkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCk7Ci19Ci0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogZHJpdmVyIGFuZCBtb2R1bGUgZW50cnkgcG9pbnQKQEAgLTgzMDcsMjkgKzUyOTUsMTkgQEAKIAogCXJldCA9IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtOiAlZFxuIiwgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAJfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpd2wzOTQ1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgZHJpdmVyIHN5c2ZzIGZpbGVcbiIpOwotCQlnb3RvIGVycm9yX2RlYnVnOwotCX0KLSNlbmRpZgogCiAJcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1lcnJvcl9kZWJ1ZzoKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKLSNlbmRpZgogZXJyb3JfcmVnaXN0ZXI6CiAJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogCXJldHVybiByZXQ7CkBAIC04MzM3LDI5ICs1MzE1LDI5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpd2wzOTQ1X2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmaXdsMzk0NV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOwotI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpd2wzOTQ1X2RyaXZlcik7CiAJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogfQogCiBNT0RVTEVfRklSTVdBUkUoSVdMMzk0NV9NT0RVTEVfRklSTVdBUkUoSVdMMzk0NV9VQ09ERV9BUElfTUFYKSk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChhbnRlbm5hLCBpd2wzOTQ1X3BhcmFtX2FudGVubmEsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYW50ZW5uYSwgaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFudGVubmEsICJzZWxlY3QgYW50ZW5uYSAoMT1NYWluLCAyPUF1eCwgZGVmYXVsdCAwIFtib3RoXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlLCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZSwgaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsICJtYW51YWxseSBkaXNhYmxlIHRoZSByYWRpbyAoZGVmYXVsdCAwIFtyYWRpbyBvbl0pIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoaHdjcnlwdG8sIGl3bDM5NDVfcGFyYW1faHdjcnlwdG8sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGh3Y3J5cHRvLAotCQkgInVzaW5nIGhhcmR3YXJlIGNyeXB0byBlbmdpbmUgKGRlZmF1bHQgMCBbc29mdHdhcmVdKVxuIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDM5NDVfcGFyYW1fZGVidWcsIHVpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2wzOTQ1X21vZF9wYXJhbXMuc3dfY3J5cHRvLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bywKKwkJICJ1c2luZyBzb2Z0d2FyZSBjcnlwdG8gKGRlZmF1bHQgMSBbc29mdHdhcmVdKVxuIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2h3X3NjYW4sIGl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfaHdfc2NhbiwgaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9od19zY2FuLCAiZGlzYWJsZSBoYXJkd2FyZSBzY2FubmluZyAoZGVmYXVsdCAwKSIpOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bSwgaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhxdWV1ZXNfbnVtLCAibnVtYmVyIG9mIGh3IHF1ZXVlcy4iKTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQzOTQ1LCBpd2wzOTQ1X21vZF9wYXJhbXMucmVzdGFydF9mdywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZndfcmVzdGFydDM5NDUsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKKwogbW9kdWxlX2V4aXQoaXdsMzk0NV9leGl0KTsKIG1vZHVsZV9pbml0KGl3bDM5NDVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IDAyMDgwYTMuLjBiNjkxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC00LDggKzQsMTAgQEAKIHVzYjh4eHgtb2JqcyArPSBpZl91c2IubwogbGliZXJ0YXNfY3Mtb2JqcyArPSBpZl9jcy5vCiBsaWJlcnRhc19zZGlvLW9ianMgKz0gaWZfc2Rpby5vCitsaWJlcnRhc19zcGktb2JqcyArPSBpZl9zcGkubwogCiBvYmotJChDT05GSUdfTElCRVJUQVMpICAgICArPSBsaWJlcnRhcy5vCiBvYmotJChDT05GSUdfTElCRVJUQVNfVVNCKSArPSB1c2I4eHh4Lm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19DUykgICs9IGxpYmVydGFzX2NzLm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19TRElPKSArPSBsaWJlcnRhc19zZGlvLm8KK29iai0kKENPTkZJR19MSUJFUlRBU19TUEkpICs9IGxpYmVydGFzX3NwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggZWM0ZWZkNy4uNTBlMjhhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtNjI5LDcgKzYyOSw3IEBACiAJCXJlcyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcHJpdi0+cmZfb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoKGNoYXIgKilidWYsIE5VTEwsIDE2KTsKKwlwcml2LT5yZl9vZmZzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlyZXMgPSBjb3VudDsKIG91dF91bmxvY2s6CiAJZnJlZV9wYWdlKGFkZHIpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAKIH0KIAogc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHBlcm07CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKIAl7ICJpbmZvIiwgMDQ0NCwgRk9QUyhsYnNfZGV2X2luZm8sIHdyaXRlX2ZpbGVfZHVtbXkpLCB9LAogCXsgImdldHNjYW50YWJsZSIsIDA0NDQsIEZPUFMobGJzX2dldHNjYW50YWJsZSwKIAkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJCQlsYnNfc2xlZXBwYXJhbXNfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0gewogCXsibG93X3Jzc2kiLCAwNjQ0LCBGT1BTKGxic19sb3dyc3NpX3JlYWQsCiAJCQkJbGJzX2xvd3Jzc2lfd3JpdGUpLCB9LAogCXsibG93X3NuciIsIDA2NDQsIEZPUFMobGJzX2xvd3Nucl9yZWFkLApAQCAtNzA4LDcgKzcwOCw3IEBACiAJCQkJbGJzX2hpZ2hzbnJfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX3JlZ3NfZmlsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CiAJeyJyZG1hYyIsIDA2NDQsIEZPUFMobGJzX3JkbWFjX3JlYWQsIGxic19yZG1hY193cml0ZSksIH0sCiAJeyJ3cm1hYyIsIDA2MDAsIEZPUFMoTlVMTCwgbGJzX3dybWFjX3dyaXRlKSwgfSwKIAl7InJkYmJwIiwgMDY0NCwgRk9QUyhsYnNfcmRiYnBfcmVhZCwgbGJzX3JkYmJwX3dyaXRlKSwgfSwKQEAgLTczNSw3ICs3MzUsNyBAQAogdm9pZCBsYnNfZGVidWdmc19pbml0X29uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzICpmaWxlczsKKwljb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgKmZpbGVzOwogCWlmICghbGJzX2RpcikKIAkJZ290byBleGl0OwogCkBAIC05MzgsNyArOTM4LDcgQEAKIAlyZXR1cm4gKHNzaXplX3QpY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsYnNfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxic19kZWJ1Z19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCiAJLndyaXRlID0gbGJzX2RlYnVnZnNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggYzM2NGU0YzAuLmU4ZGZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgTEJTX0RFQl9IRVgJMHgwMDIwMDAwMAogI2RlZmluZSBMQlNfREVCX1NESU8JMHgwMDQwMDAwMAogI2RlZmluZSBMQlNfREVCX1NZU0ZTCTB4MDA4MDAwMDAKKyNkZWZpbmUgTEJTX0RFQl9TUEkJMHgwMTAwMDAwMAogCiBleHRlcm4gdW5zaWduZWQgaW50IGxic19kZWJ1ZzsKIApAQCAtODQsNiArODUsNyBAQAogI2RlZmluZSBsYnNfZGViX3RocmVhZChmbXQsIGFyZ3MuLi4pICAgIExCU19ERUJfTEwoTEJTX0RFQl9USFJFQUQsICIgdGhyZWFkIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfc2RpbyhmbXQsIGFyZ3MuLi4pICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NESU8sICIgc2RpbyIsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBsYnNfZGViX3N5c2ZzKGZtdCwgYXJncy4uLikgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TWVNGUywgIiBzeXNmcyIsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBsYnNfZGViX3NwaShmbXQsIGFyZ3MuLi4pICAgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TUEksICIgc3BpIiwgZm10LCAjI2FyZ3MpCiAKICNkZWZpbmUgbGJzX3ByX2luZm8oZm9ybWF0LCBhcmdzLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQpAQCAtMjYzLDYgKzI2NSw3IEBACiAKICNkZWZpbmUJQ01EX0ZfSE9TVENNRAkJKDEgPDwgMCkKICNkZWZpbmUgRldfQ0FQSU5GT19XUEEgIAkoMSA8PCAwKQorI2RlZmluZSBGV19DQVBJTkZPX1BTICAJCSgxIDw8IDEpCiAjZGVmaW5lIEZXX0NBUElORk9fRklSTVdBUkVfVVBHUkFERQkoMSA8PCAxMykKICNkZWZpbmUgRldfQ0FQSU5GT19CT09UMl9VUEdSQURFCSgxPDwxNCkKICNkZWZpbmUgRldfQ0FQSU5GT19QRVJTSVNURU5UX0NPTkZJRwkoMTw8MTUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGRkNjgyYzQuLjI3ZTgxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xMDksNyArMTA5LDYgQEAKIAl2b2lkICpjYXJkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9kZXY7IC8qIFZpcnR1YWwgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnJ0YXBfbmV0X2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCmluZGV4IDI3N2ZmMTkuLmQ0NDU3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgQ01EXzgwMl8xMV9MRURfR1BJT19DVFJMCQkweDAwNGUKICNkZWZpbmUgQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTCQkweDAwNTkKICNkZWZpbmUgQ01EXzgwMl8xMV9CQU5EX0NPTkZJRwkJCTB4MDA1OAorI2RlZmluZSBDTURfR1NQSV9CVVNfQ09ORklHCQkJMHgwMDVhCiAjZGVmaW5lIENNRF84MDJfMTFEX0RPTUFJTl9JTkZPCQkJMHgwMDViCiAjZGVmaW5lIENNRF84MDJfMTFfS0VZX01BVEVSSUFMCQkJMHgwMDVlCiAjZGVmaW5lIENNRF84MDJfMTFfU0xFRVBfUEFSQU1TCQkJMHgwMDY2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKaW5kZXggZjZhNzlhNi4uYTg5OWFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaApAQCAtMjIxLDYgKzIyMSwxNCBAQAogCXU4IG1hY2xpc3RbRVRIX0FMRU4gKiBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBjbWRfZHNfZ3NwaV9idXNfY29uZmlnIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgYnVzX2RlbGF5X21vZGU7CisJX19sZTE2IGhvc3RfdGltZV9kZWxheV90b19yZWFkX3BvcnQ7CisJX19sZTE2IGhvc3RfdGltZV9kZWxheV90b19yZWFkX3JlZ2lzdGVyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSB7CiAJdTggbWFjYWRkcltFVEhfQUxFTl07CiAJdTggYXV0aHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCA4NDJhMDhkLi5jZWRlYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewogCQl1OCB2YWwgPSBpZl9jc19yZWFkOChjYXJkLCBhZGRyKTsKIAkJaWYgKHZhbCA9PSByZWcpCi0JCQlyZXR1cm4gaTsKKwkJCXJldHVybiAwOwogCQl1ZGVsYXkoNSk7CiAJfQogCXJldHVybiAtRVRJTUU7CkBAIC00MjEsNyArNDIxLDcgQEAKIAlsZW4gPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfUkVBRF9MRU4pOwogCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgewogCQlsYnNfcHJfZXJyKCJjYXJkIGRhdGEgYnVmZmVyIGhhcyBpbnZhbGlkICMgb2YgYnl0ZXMgKCVkKVxuIiwgbGVuKTsKLQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJZ290byBkYXRfZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCmluZGV4IDQ1MTlkNzMuLjc2ZjRjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTk1LDYgKzk1LDggQEAKIAogCXNwaW5sb2NrX3QJCWxvY2s7CiAJc3RydWN0IGlmX3NkaW9fcGFja2V0CSpwYWNrZXRzOworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtxdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcGFja2V0X3dvcmtlcjsKIH07CiAKQEAgLTIwOSw2ICsyMTEsOSBAQAogCQlldmVudCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSUZfU0RJT19FVkVOVCwgJnJldCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKKworCQkvKiByaWdodCBzaGlmdCAzIGJpdHMgdG8gZ2V0IHRoZSBldmVudCBpZCAqLworCQlldmVudCA+Pj0gMzsKIAl9IGVsc2UgewogCQlpZiAoc2l6ZSA8IDQpIHsKIAkJCWxic19kZWJfc2RpbygiZXZlbnQgcGFja2V0IHRvbyBzbWFsbCAoJWQgYnl0ZXMpXG4iLApAQCAtNzQzLDcgKzc0OCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKLQlzY2hlZHVsZV93b3JrKCZjYXJkLT5wYWNrZXRfd29ya2VyKTsKKwlxdWV1ZV93b3JrKGNhcmQtPndvcmtxdWV1ZSwgJmNhcmQtPnBhY2tldF93b3JrZXIpOwogCiAJcmV0ID0gMDsKIApAQCAtODMzLDYgKzgzOCw3IEBACiAJY2FyZC0+ZnVuYyA9IGZ1bmM7CiAJY2FyZC0+bW9kZWwgPSBtb2RlbDsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgibGliZXJ0YXNfc2RpbyIpOwogCUlOSVRfV09SSygmY2FyZC0+cGFja2V0X3dvcmtlciwgaWZfc2Rpb19ob3N0X3RvX2NhcmRfd29ya2VyKTsKIAogCWZvciAoaSA9IDA7aSA8IEFSUkFZX1NJWkUoaWZfc2Rpb19tb2RlbHMpO2krKykgewpAQCAtOTIxLDE1ICs5MjcsMTcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9hY3RpdmF0ZV9jYXJkOwogCisJaWYgKHByaXYtPmZ3Y2FwaW5mbyAmIEZXX0NBUElORk9fUFMpCisJCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CisKIG91dDoKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CiAKIGVycl9hY3RpdmF0ZV9jYXJkOgotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKLQlrZnJlZShwcml2KTsKKwlmbHVzaF93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7CiByZWNsYWltOgogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIHJlbGVhc2VfaW50OgpAQCAtOTM5LDYgKzk0Nyw3IEBACiByZWxlYXNlOgogCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwogZnJlZToKKwlkZXN0cm95X3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOwogCXdoaWxlIChjYXJkLT5wYWNrZXRzKSB7CiAJCXBhY2tldCA9IGNhcmQtPnBhY2tldHM7CiAJCWNhcmQtPnBhY2tldHMgPSBjYXJkLT5wYWNrZXRzLT5uZXh0OwpAQCAtOTY1LDcgKzk3NCw4IEBACiAJbGJzX3N0b3BfY2FyZChjYXJkLT5wcml2KTsKIAlsYnNfcmVtb3ZlX2NhcmQoY2FyZC0+cHJpdik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CiAJc2Rpb19yZWxlYXNlX2lycShmdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczMTFlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0wLDAgKzEsMTIxOCBAQAorLyoKKyAqCWxpbnV4L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisgKgorICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFNQSSBXTEFOIGNhcmRzLgorICoKKyAqCUNvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKglBdXRob3JzOgorICoJQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+CisgKglDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPgorICoKKyAqCUluc3BpcmVkIGJ5IGlmX3NkaW8uYywgQ29weXJpZ2h0IDIwMDctMjAwOCBQaWVycmUgT3NzbWFuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbGliZXJ0YXNfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSAiaG9zdC5oIgorI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZGV2LmgiCisjaW5jbHVkZSAiaWZfc3BpLmgiCisKK3N0cnVjdCBpZl9zcGlfcGFja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXUxNgkJCQlibGVuOworCXU4CQkJCWJ1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7Cit9OworCitzdHJ1Y3QgaWZfc3BpX2NhcmQgeworCXN0cnVjdCBzcGlfZGV2aWNlCQkqc3BpOworCXN0cnVjdCBsYnNfcHJpdmF0ZQkJKnByaXY7CisJc3RydWN0IGxpYmVydGFzX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWNoYXIJCQkJaGVscGVyX2Z3X25hbWVbRklSTVdBUkVfTkFNRV9NQVhdOworCWNoYXIJCQkJbWFpbl9md19uYW1lW0ZJUk1XQVJFX05BTUVfTUFYXTsKKworCS8qIFRoZSBjYXJkIElEIGFuZCBjYXJkIHJldmlzaW9uLCBhcyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCisJdTE2CQkJCWNhcmRfaWQ7CisJdTgJCQkJY2FyZF9yZXY7CisKKwkvKiBQaW4gbnVtYmVyIGZvciBvdXIgR1BJTyBjaGlwLXNlbGVjdC4gKi8KKwkvKiBUT0RPOiBPbmNlIHRoZSBnZW5lcmljIFNQSSBsYXllciBoYXMgc29tZSBhZGRpdGlvbmFsIGZlYXR1cmVzLCB3ZQorCSAqIHNob3VsZCB0YWtlIHRoaXMgb3V0IGFuZCB1c2UgdGhlIG5vcm1hbCBjaGlwIHNlbGVjdCBoZXJlLgorCSAqIFdlIG5lZWQgc3VwcG9ydCBmb3IgY2hpcCBzZWxlY3QgZGVsYXlzLCBhbmQgbm90IGRyb3BwaW5nIGNoaXBzZWxlY3QKKwkgKiBhZnRlciBlYWNoIHdvcmQuICovCisJaW50CQkJCWdwaW9fY3M7CisKKwkvKiBUaGUgbGFzdCB0aW1lIHRoYXQgd2UgaW5pdGlhdGVkIGFuIFNQVSBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCQkJcHJldl94ZmVyX3RpbWU7CisKKwlpbnQJCQkJdXNlX2R1bW15X3dyaXRlczsKKwl1bnNpZ25lZCBsb25nCQkJc3B1X3BvcnRfZGVsYXk7CisJdW5zaWduZWQgbG9uZwkJCXNwdV9yZWdfZGVsYXk7CisKKwkvKiBIYW5kbGVzIGFsbCBTUEkgY29tbXVuaWNhdGlvbiAoZXhjZXB0IGZvciBGVyBsb2FkKSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnNwaV90aHJlYWQ7CisJaW50CQkJCXJ1bl90aHJlYWQ7CisKKwkvKiBVc2VkIHRvIHdha2UgdXAgdGhlIHNwaV90aHJlYWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCQlzcGlfcmVhZHk7CisJc3RydWN0IHNlbWFwaG9yZQkJc3BpX3RocmVhZF90ZXJtaW5hdGVkOworCisJdTgJCQkJY21kX2J1ZmZlcltJRl9TUElfQ01EX0JVRl9TSVpFXTsKKworCS8qIEEgYnVmZmVyIG9mIGluY29taW5nIHBhY2tldHMgZnJvbSBsaWJlcnRhcyBjb3JlLgorCSAqIFNpbmNlIHdlIGNhbid0IHNsZWVwIGluIGh3X2hvc3RfdG9fY2FyZCwgd2UgaGF2ZSB0byBidWZmZXIKKwkgKiB0aGVtLiAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWNtZF9wYWNrZXRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkYXRhX3BhY2tldF9saXN0OworCisJLyogUHJvdGVjdHMgY21kX3BhY2tldF9saXN0IGFuZCBkYXRhX3BhY2tldF9saXN0ICovCisJc3BpbmxvY2tfdAkJCWJ1ZmZlcl9sb2NrOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9pZl9zcGlfY2FyZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqY3Vyc29yLCAqbmV4dDsKKwlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCisJQlVHX09OKGNhcmQtPnJ1bl90aHJlYWQpOworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJzb3IsIG5leHQsICZjYXJkLT5jbWRfcGFja2V0X2xpc3QpIHsKKwkJcGFja2V0ID0gY29udGFpbmVyX29mKGN1cnNvciwgc3RydWN0IGlmX3NwaV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUocGFja2V0KTsKKwl9CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnNvciwgbmV4dCwgJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpIHsKKwkJcGFja2V0ID0gY29udGFpbmVyX29mKGN1cnNvciwgc3RydWN0IGlmX3NwaV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUocGFja2V0KTsKKwl9CisJc3BpX3NldF9kcnZkYXRhKGNhcmQtPnNwaSwgTlVMTCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpcF9pZGVudCBjaGlwX2lkX3RvX2RldmljZV9uYW1lW10gPSB7CisJeyAuY2hpcF9pZCA9IDB4MDQsIC5uYW1lID0gODM4NSB9LAorCXsgLmNoaXBfaWQgPSAweDBiLCAubmFtZSA9IDg2ODYgfSwKK307CisKKy8qCisgKiBTUEkgSW50ZXJmYWNlIFVuaXQgUm91dGluZXMKKyAqCisgKiBUaGUgU1BVIHNpdHMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFdMQU4gbW9kdWxlLgorICogQWxsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUgaXMgdGhyb3VnaCBTUFUgdHJhbnNhY3Rpb25zLgorICoKKyAqIEZpcnN0IHdlIGhhdmUgdG8gcHV0IGEgU1BVIHJlZ2lzdGVyIG5hbWUgb24gdGhlIGJ1cy4gVGhlbiB3ZSBjYW4KKyAqIGVpdGhlciByZWFkIGZyb20gb3Igd3JpdGUgdG8gdGhhdCByZWdpc3Rlci4KKyAqCisgKiBGb3IgMTYtYml0IHRyYW5zYWN0aW9ucywgYnl0ZSBvcmRlciBvbiB0aGUgYnVzIGlzIGJpZy1lbmRpYW4uCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgaGVyZSwgdGhvdWdoLgorICogVGhlIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlIGluIHRoZSBTUEkgcm91dGluZXMuCisgKi8KKworc3RhdGljIHZvaWQgc3B1X3RyYW5zYWN0aW9uX2luaXQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWlmICghdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5wcmV2X3hmZXJfdGltZSArIDEpKSB7CisJCS8qIFVuZm9ydHVuYXRlbHksIHRoZSBTUFUgcmVxdWlyZXMgYSBkZWxheSBiZXR3ZWVuIHN1Y2Nlc3NpdmUKKwkJICogdHJhbnNhY3Rpb25zLiBJZiBvdXIgbGFzdCB0cmFuc2FjdGlvbiB3YXMgbW9yZSB0aGFuIGEgamlmZnkKKwkJICogYWdvLCB3ZSBoYXZlIG9idmlvdXNseSBhbHJlYWR5IGRlbGF5ZWQgZW5vdWdoLgorCQkgKiBJZiBub3QsIHdlIGhhdmUgdG8gYnVzeS13YWl0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuICovCisJCW5kZWxheSg0MDApOworCX0KKwlncGlvX3NldF92YWx1ZShjYXJkLT5ncGlvX2NzLCAwKTsgLyogYXNzZXJ0IENTICovCit9CisKK3N0YXRpYyB2b2lkIHNwdV90cmFuc2FjdGlvbl9maW5pc2goc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWdwaW9fc2V0X3ZhbHVlKGNhcmQtPmdwaW9fY3MsIDEpOyAvKiBkcm9wIENTICovCisJY2FyZC0+cHJldl94ZmVyX3RpbWUgPSBqaWZmaWVzOworfQorCisvKiBXcml0ZSBvdXQgYSBieXRlIGJ1ZmZlciB0byBhbiBTUEkgcmVnaXN0ZXIsCisgKiB1c2luZyBhIHNlcmllcyBvZiAxNi1iaXQgdHJhbnNmZXJzLiAqLworc3RhdGljIGludCBzcHVfd3JpdGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCBlcnIgPSAwOworCXUxNiByZWdfb3V0ID0gcmVnIHwgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLOworCisJLyogWW91IG11c3QgZ2l2ZSBhbiBldmVuIG51bWJlciBvZiBieXRlcyB0byB0aGUgU1BVLCBldmVuIGlmIGl0CisJICogZG9lc24ndCBjYXJlIGFib3V0IHRoZSBsYXN0IG9uZS4gICovCisJQlVHX09OKGxlbiAmIDB4MSk7CisKKwlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKKworCS8qIHdyaXRlIFNQVSByZWdpc3RlciBpbmRleCAqLworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZyZWdfb3V0LCBzaXplb2YodTE2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCBidWYsIGxlbik7CisKK291dDoKKwlzcHVfdHJhbnNhY3Rpb25fZmluaXNoKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmdmFsLCBzaXplb2YodTE2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCS8qIFRoZSBsb3dlciAxNiBiaXRzIGFyZSB3cml0dGVuIGZpcnN0LiAqLworCXUxNiBvdXRbMl07CisJb3V0WzBdID0gdmFsICYgMHhmZmZmOworCW91dFsxXSA9ICh2YWwgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwlyZXR1cm4gc3B1X3dyaXRlKGNhcmQsIHJlZywgKHU4ICopJm91dCwgc2l6ZW9mKHUzMikpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcHVfcmVnX2lzX3BvcnRfcmVnKHUxNiByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIElGX1NQSV9JT19SRFdSUE9SVF9SRUc6CisJY2FzZSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzoKKwljYXNlIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRzoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHNwdV9yZWFkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZGVsYXk7CisJaW50IGVyciA9IDA7CisJdTE2IHplcm8gPSAwOworCXUxNiByZWdfb3V0ID0gcmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0s7CisKKwkvKiBZb3UgbXVzdCB0YWtlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIFNQVSwgZXZlbiBpZiB5b3UKKwkgKiBkb24ndCBjYXJlIGFib3V0IHRoZSBsYXN0IG9uZS4gICovCisJQlVHX09OKGxlbiAmIDB4MSk7CisKKwlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKKworCS8qIHdyaXRlIFNQVSByZWdpc3RlciBpbmRleCAqLworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZyZWdfb3V0LCBzaXplb2YodTE2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkZWxheSA9IHNwdV9yZWdfaXNfcG9ydF9yZWcocmVnKSA/IGNhcmQtPnNwdV9wb3J0X2RlbGF5IDoKKwkJCQkJCWNhcmQtPnNwdV9yZWdfZGVsYXk7CisJaWYgKGNhcmQtPnVzZV9kdW1teV93cml0ZXMpIHsKKwkJLyogQ2xvY2sgaW4gZHVtbXkgY3ljbGVzIHdoaWxlIHRoZSBTUFUgZmlsbHMgdGhlIEZJRk8gKi8KKwkJZm9yIChpID0gMDsgaSA8IGRlbGF5IC8gMTY7ICsraSkgeworCQkJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnplcm8sIHNpemVvZih1MTYpKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEJ1c3ktd2FpdCB3aGlsZSB0aGUgU1BVIGZpbGxzIHRoZSBGSUZPICovCisJCW5kZWxheSgxMDAgKyAoZGVsYXkgKiAxMCkpOworCX0KKworCS8qIHJlYWQgaW4gZGF0YSAqLworCWVyciA9IHNwaV9yZWFkKGNhcmQtPnNwaSwgYnVmLCBsZW4pOworCitvdXQ6CisJc3B1X3RyYW5zYWN0aW9uX2ZpbmlzaChjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNwdV9yZWFkX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUxNiAqdmFsKQoreworCXJldHVybiBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKXZhbCwgc2l6ZW9mKHUxNikpOworfQorCisvKiBSZWFkIDMyIGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIuCisgKiBUaGUgbG93IDE2IGJpdHMgYXJlIHJlYWQgZmlyc3QuICovCitzdGF0aWMgaW50IHNwdV9yZWFkX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiAqdmFsKQoreworCXUxNiBidWZbMl07CisJaW50IGVycjsKKwllcnIgPSBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKWJ1Ziwgc2l6ZW9mKHUzMikpOworCWlmICghZXJyKQorCQkqdmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCAxNik7CisJcmV0dXJuIGVycjsKK30KKworLyogS2VlcCByZWFkaW5nIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IGdldCB0aGUgY29ycmVjdCByZXN1bHQuCisgKgorICogSWYgbWFzayA9IDAsIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyBhbnkgbm9uLXplcm8gbnVtYmVyLgorICogSWYgbWFzayAhPSAwLCB0aGUgY29ycmVjdCByZXN1bHQgaXMgYW55IG51bWJlciB3aGVyZQorICogbnVtYmVyICYgdGFyZ2V0X21hc2sgPT0gdGFyZ2V0CisgKgorICogUmV0dXJucyAtRVRJTUVET1VUIGlmIGEgc2Vjb25kIHBhc3NlcyB3aXRob3V0IHRoZSBjb3JyZWN0IHJlc3VsdC4gKi8KK3N0YXRpYyBpbnQgc3B1X3dhaXRfZm9yX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsCisJCQl1MTYgdGFyZ2V0X21hc2ssIHUxNiB0YXJnZXQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgNSpIWjsKKwl3aGlsZSAoMSkgeworCQl1MTYgdmFsOworCQllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgcmVnLCAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmICh0YXJnZXRfbWFzaykgeworCQkJaWYgKCh2YWwgJiB0YXJnZXRfbWFzaykgPT0gdGFyZ2V0KQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKHZhbCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWxic19wcl9lcnIoIiVzOiB0aW1lb3V0IHdpdGggdmFsPSUwMngsICIKKwkJCSAgICAgICAidGFyZ2V0X21hc2s9JTAyeCwgdGFyZ2V0PSUwMnhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHZhbCwgdGFyZ2V0X21hc2ssIHRhcmdldCk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KK30KKworLyogUmVhZCAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSByZWNlaXZlIGEgc3BlY2lmaWMgdmFsdWUuCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSA0IHRyaWVzIHBhc3Mgd2l0aG91dCBzdWNjZXNzLiAqLworc3RhdGljIGludCBzcHVfd2FpdF9mb3JfdTMyKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTMyIHJlZywgdTMyIHRhcmdldCkKK3sKKwlpbnQgZXJyLCB0cnk7CisJZm9yICh0cnkgPSAwOyB0cnkgPCA0OyArK3RyeSkgeworCQl1MzIgdmFsID0gMDsKKwkJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIHJlZywgJnZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAodmFsID09IHRhcmdldCkKKwkJCXJldHVybiAwOworCQltZGVsYXkoMTAwKTsKKwl9CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkgICBpbnQgc3VwcHJlc3NfaG9zdF9pbnQsCisJCQkgICBpbnQgYXV0b19pbnQpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBXZSBjYW4gc3VwcHJlc3MgYSBob3N0IGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUKKwkgKiBiaXQgaW4gdGhlICJob3N0IGludGVycnVwdCBzdGF0dXMgbWFzayIgcmVnaXN0ZXIgKi8KKwlpZiAoc3VwcHJlc3NfaG9zdF9pbnQpIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLAorCQkJICAgICAgSUZfU1BJX0hJU01fVFhfRE9XTkxPQURfUkRZIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX1JYX1VQTE9BRF9SRFkgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWSB8CisJCQkgICAgICBJRl9TUElfSElTTV9DQVJERVZFTlQgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ01EX1VQTE9BRF9SRFkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBJZiBhdXRvLWludGVycnVwdHMgYXJlIG9uLCB0aGUgY29tcGxldGlvbiBvZiBjZXJ0YWluIHRyYW5zYWN0aW9ucworCSAqIHdpbGwgdHJpZ2dlciBhbiBpbnRlcnJ1cHQgYXV0b21hdGljYWxseS4gSWYgYXV0by1pbnRlcnJ1cHRzCisJICogYXJlIG9mZiwgd2UgbmVlZCB0byBzZXQgdGhlICJDYXJkIEludGVycnVwdCBDYXVzZSIgcmVnaXN0ZXIgdG8KKwkgKiB0cmlnZ2VyIGEgY2FyZCBpbnRlcnJ1cHQuICovCisJaWYgKGF1dG9faW50KSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHLAorCQkJCUlGX1NQSV9ISUNUX1RYX0RPV05MT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfUlhfVVBMT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfQ01EX1VQTE9BRF9PVkVSX0FVVE8pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzcHVfZ2V0X2NoaXBfcmV2aXNpb24oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJCSAgdTE2ICpjYXJkX2lkLCB1OCAqY2FyZF9yZXYpCit7CisJaW50IGVyciA9IDA7CisJdTMyIGRldl9jdHJsOworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUcsICZkZXZfY3RybCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkqY2FyZF9pZCA9IElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX0lEKGRldl9jdHJsKTsKKwkqY2FyZF9yZXYgPSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9SRVYoZGV2X2N0cmwpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3B1X3NldF9idXNfbW9kZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiBtb2RlKQoreworCWludCBlcnIgPSAwOworCXUxNiBydmFsOworCS8qIHNldCBidXMgbW9kZSAqLworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsIG1vZGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJLyogQ2hlY2sgdGhhdCB3ZSB3ZXJlIGFibGUgdG8gcmVhZCBiYWNrIHdoYXQgd2UganVzdCB3cm90ZS4gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsICZydmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChydmFsICE9IG1vZGUpIHsKKwkJbGJzX3ByX2VycigiQ2FuJ3QgcmVhZCBidXMgbW9kZSByZWdpc3Rlci5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3B1X2luaXQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCBpbnQgdXNlX2R1bW15X3dyaXRlcykKK3sKKwlpbnQgZXJyID0gMDsKKwl1MzIgZGVsYXk7CisKKwkvKiBXZSBoYXZlIHRvIHN0YXJ0IHVwIGluIHRpbWVkIGRlbGF5IG1vZGUgc28gdGhhdCB3ZSBjYW4gc2FmZWx5CisJICogcmVhZCB0aGUgRGVsYXkgUmVhZCBSZWdpc3Rlci4gKi8KKwljYXJkLT51c2VfZHVtbXlfd3JpdGVzID0gMDsKKwllcnIgPSBzcHVfc2V0X2J1c19tb2RlKGNhcmQsCisJCQkJSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfVElNRUQgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18xNl9CSVRfREFUQSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljYXJkLT5zcHVfcG9ydF9kZWxheSA9IDEwMDA7CisJY2FyZC0+c3B1X3JlZ19kZWxheSA9IDEwMDA7CisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9ERUxBWV9SRUFEX1JFRywgJmRlbGF5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhcmQtPnNwdV9wb3J0X2RlbGF5ID0gZGVsYXkgJiAweDAwMDBmZmZmOworCWNhcmQtPnNwdV9yZWdfZGVsYXkgPSAoZGVsYXkgJiAweGZmZmYwMDAwKSA+PiAxNjsKKworCS8qIElmIGR1bW15IGNsb2NrIGRlbGF5IG1vZGUgaGFzIGJlZW4gcmVxdWVzdGVkLCBzd2l0Y2ggdG8gaXQgbm93ICovCisJaWYgKHVzZV9kdW1teV93cml0ZXMpIHsKKwkJY2FyZC0+dXNlX2R1bW15X3dyaXRlcyA9IDE7CisJCWVyciA9IHNwdV9zZXRfYnVzX21vZGUoY2FyZCwKKwkJCQlJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyB8CisJCQkJSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9EVU1NWV9DTE9DSyB8CisJCQkJSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJbGJzX2RlYl9zcGkoIkluaXRpYWxpemVkIFNQVSB1bml0LiAiCisJCSAgICAic3B1X3BvcnRfZGVsYXk9MHglMDRseCwgc3B1X3JlZ19kZWxheT0weCUwNGx4XG4iLAorCQkgICAgY2FyZC0+c3B1X3BvcnRfZGVsYXksIGNhcmQtPnNwdV9yZWdfZGVsYXkpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBGaXJtd2FyZSBMb2FkaW5nCisgKi8KKworc3RhdGljIGludCBpZl9zcGlfcHJvZ19oZWxwZXJfZmlybXdhcmUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWludCBlcnIgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOworCWludCBieXRlc19yZW1haW5pbmc7CisJY29uc3QgdTggKmZ3OworCXU4IHRlbXBbSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1pdOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjYXJkLT5zcGk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJLyogR2V0IGhlbHBlciBmaXJtd2FyZSBpbWFnZSAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBjYXJkLT5oZWxwZXJfZndfbmFtZSwgJnNwaS0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoInJlcXVlc3RfZmlybXdhcmUgZmFpbGVkIHdpdGggZXJyID0gJWRcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKwlieXRlc19yZW1haW5pbmcgPSBmaXJtd2FyZS0+c2l6ZTsKKwlmdyA9IGZpcm13YXJlLT5kYXRhOworCisJLyogTG9hZCBoZWxwZXIgZmlybXdhcmUgaW1hZ2UgKi8KKwl3aGlsZSAoYnl0ZXNfcmVtYWluaW5nID4gMCkgeworCQkvKiBTY3JhdGNoIHBhZCAxIHNob3VsZCBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UKKwkJICogd2FudCB0byBkb3dubG9hZCB0byB0aGUgZmlybXdhcmUgKi8KKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywKKwkJCQkJSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCisJCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFksCisJCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCS8qIEZlZWQgdGhlIGRhdGEgaW50byB0aGUgY29tbWFuZCByZWFkL3dyaXRlIHBvcnQgcmVnCisJCSAqIGluIGNodW5rcyBvZiA2NCBieXRlcyAqLworCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsKKwkJbWVtY3B5KHRlbXAsIGZ3LAorCQkgICAgICAgbWluKGJ5dGVzX3JlbWFpbmluZywgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opKTsKKwkJbWRlbGF5KDEwKTsKKwkJZXJyID0gc3B1X3dyaXRlKGNhcmQsIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHLAorCQkJCQl0ZW1wLCBIRUxQRVJfRldfTE9BRF9DSFVOS19TWik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJLyogSW50ZXJydXB0IHRoZSBib290IGNvZGUgKi8KKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRywKKwkJCQkgICAgICAgSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWJ5dGVzX3JlbWFpbmluZyAtPSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWjsKKwkJZncgKz0gSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1o7CisJfQorCisJLyogT25jZSB0aGUgaGVscGVyIC8gc2luZ2xlIHN0YWdlIGZpcm13YXJlIGRvd25sb2FkIGlzIGNvbXBsZXRlLAorCSAqIHdyaXRlIDAgdG8gc2NyYXRjaCBwYWQgMSBhbmQgaW50ZXJydXB0IHRoZQorCSAqIGJvb3Rsb2FkZXIuIFRoaXMgY29tcGxldGVzIHRoZSBoZWxwZXIgZG93bmxvYWQuICovCisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgRklSTVdBUkVfRE5MRF9PSyk7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcsCisJCQkJSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCWxic19kZWJfc3BpKCJ3YWl0aW5nIGZvciBoZWxwZXIgdG8gYm9vdC4uLlxuIik7CisKK3JlbGVhc2VfZmlybXdhcmU6CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlIChlcnI9JWQpXG4iLCBlcnIpOworCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IHBhY2tldCB0aGUgZmlybXdhcmUgZXhwZWN0cyB1cyB0byBzZW5kCisgKiBTZXRzIGNyY19lcnIgaWYgdGhlIHByZXZpb3VzIHRyYW5zZmVyIGhhZCBhIENSQyBlcnJvci4gKi8KK3N0YXRpYyBpbnQgaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZV9jaGVja19sZW4oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJCQkJaW50ICpjcmNfZXJyKQoreworCXUxNiBsZW47CisJaW50IGVyciA9IDA7CisKKwkvKiB3YWl0IHVudGlsIHRoZSBob3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgaW5kaWNhdGVzCisJICogdGhhdCB3ZSBhcmUgcmVhZHkgdG8gZG93bmxvYWQgKi8KKwllcnIgPSBzcHVfd2FpdF9mb3JfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLAorCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFksCisJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgaG9zdF9pbnRfc3RhdHVzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBBc2sgdGhlIGRldmljZSBob3cgbWFueSBieXRlcyBvZiBmaXJtd2FyZSBpdCB3YW50cy4gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobGVuID4gSUZfU1BJX0NNRF9CVUZfU0laRSkgeworCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIGRldmljZSByZXF1ZXN0ZWQgYSBsYXJnZXIgIgorCQkJICAgInRyYW5mZXIgdGhhbiB3ZSBhcmUgcHJlcGFyZWQgdG8gIgorCQkJICAgImhhbmRsZS4gKGxlbiA9ICVkKVxuIiwgbGVuKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChsZW4gJiAweDEpIHsKKwkJbGJzX2RlYl9zcGkoIiVzOiBjcmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKwkJbGVuICY9IH4weDE7CisJCSpjcmNfZXJyID0gMTsKKwl9IGVsc2UKKwkJKmNyY19lcnIgPSAwOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpbnQgbGVuLCBwcmV2X2xlbjsKKwlpbnQgYnl0ZXMsIGNyY19lcnIgPSAwLCBlcnIgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOworCWNvbnN0IHU4ICpmdzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY2FyZC0+c3BpOworCXUxNiBudW1fY3JjX2VycnM7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBHZXQgZmlybXdhcmUgaW1hZ2UgKi8KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgY2FyZC0+bWFpbl9md19uYW1lLCAmc3BpLT5kZXYpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiJXM6IGNhbid0IGdldCBmaXJtd2FyZSAnJXMnIGZyb20ga2VybmVsLiAiCisJCQkiZXJyID0gJWRcbiIsIF9fZnVuY19fLCBjYXJkLT5tYWluX2Z3X25hbWUsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsIDAsIDApOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFsICIKKwkJCSAgICJzY3JhdGNoIHJlZyA9IDBcbiIsIF9fZnVuY19fKTsKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCX0KKworCW51bV9jcmNfZXJycyA9IDA7CisJcHJldl9sZW4gPSAwOworCWJ5dGVzID0gZmlybXdhcmUtPnNpemU7CisJZncgPSBmaXJtd2FyZS0+ZGF0YTsKKwl3aGlsZSAoKGxlbiA9IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmVfY2hlY2tfbGVuKGNhcmQsICZjcmNfZXJyKSkpIHsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWVyciA9IGxlbjsKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJfQorCQlpZiAoYnl0ZXMgPCAwKSB7CisJCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBsZWZ0LCB3ZSB3b3VsZCBub3JtYWxseQorCQkJICogZXhwZWN0IHRvIGhhdmUgdGVybWluYXRlZCB3aXRoIGxlbiA9IDAgKi8KKwkJCWxic19wcl9lcnIoIkZpcm13YXJlIGxvYWQgd2FudHMgbW9yZSBieXRlcyAiCisJCQkJICAgInRoYW4gd2UgaGF2ZSB0byBvZmZlci5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNyY19lcnIpIHsKKwkJCS8qIFByZXZpb3VzIHRyYW5zZmVyIGZhaWxlZC4gKi8KKwkJCWlmICgrK251bV9jcmNfZXJycyA+IE1BWF9NQUlOX0ZXX0xPQURfQ1JDX0VSUikgeworCQkJCWxic19wcl9lcnIoIlRvbyBtYW55IENSQyBlcnJvcnMgZW5jb3VudGVyZWQgIgorCQkJCQkgICAiaW4gZmlybXdhcmUgbG9hZC5cbiIpOworCQkJCWVyciA9IC1FSU87CisJCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogUHJldmlvdXMgdHJhbnNmZXIgc3VjY2VlZGVkLiBBZHZhbmNlIGNvdW50ZXJzLiAqLworCQkJYnl0ZXMgLT0gcHJldl9sZW47CisJCQlmdyArPSBwcmV2X2xlbjsKKwkJfQorCQlpZiAoYnl0ZXMgPCBsZW4pIHsKKwkJCW1lbXNldChjYXJkLT5jbWRfYnVmZmVyLCAwLCBsZW4pOworCQkJbWVtY3B5KGNhcmQtPmNtZF9idWZmZXIsIGZ3LCBieXRlcyk7CisJCX0gZWxzZQorCQkJbWVtY3B5KGNhcmQtPmNtZF9idWZmZXIsIGZ3LCBsZW4pOworCisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQllcnIgPSBzcHVfd3JpdGUoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJY2FyZC0+Y21kX2J1ZmZlciwgbGVuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHICwKKwkJCQkJSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCXByZXZfbGVuID0gbGVuOworCX0KKwlpZiAoYnl0ZXMgPiBwcmV2X2xlbikgeworCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIHdhbnRzIGZld2VyIGJ5dGVzIHRoYW4gIgorCQkJICAgIndlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKKwl9CisKKwkvKiBDb25maXJtIGZpcm13YXJlIGRvd25sb2FkICovCisJZXJyID0gc3B1X3dhaXRfZm9yX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF80X1JFRywKKwkJCQkJU1VDQ0VTU0ZVTF9GV19ET1dOTE9BRF9NQUdJQyk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gY29uZmlybSB0aGUgZmlybXdhcmUgZG93bmxvYWRcbiIpOworCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJfQorCityZWxlYXNlX2Zpcm13YXJlOgorCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU1BJIFRyYW5zZmVyIFRocmVhZAorICoKKyAqIFRoZSBTUEkgdGhyZWFkIGhhbmRsZXMgYWxsIFNQSSB0cmFuc2ZlcnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgbG9jay4KKyAqLworCisvKiBNb3ZlIGEgY29tbWFuZCBmcm9tIHRoZSBjYXJkIHRvIHRoZSBob3N0ICovCitzdGF0aWMgaW50IGlmX3NwaV9jMmhfY21kKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisJdTE2IGxlbjsKKwl1OCBpOworCisJLyogV2UgbmVlZCBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhhbmRsZSB3aGF0ZXZlciBwZW9wbGUgc2VuZCB0bworCSAqIGh3X2hvc3RfdG9fY2FyZCAqLworCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFIDwgTEJTX0NNRF9CVUZGRVJfU0laRSk7CisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgPCBMQlNfVVBMRF9TSVpFKTsKKworCS8qIEl0J3MganVzdCBhbm5veWluZyBpZiB0aGUgYnVmZmVyIHNpemUgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCBiZWNhdXNlCisJICogdGhlbiB3ZSBtaWdodCBoYXZlIGxlbiA8ICBJRl9TUElfQ01EX0JVRl9TSVpFIGJ1dAorCSAqIEFMSUdOKGxlbiwgNCkgPiBJRl9TUElfQ01EX0JVRl9TSVpFICovCisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgJSA0ICE9IDApOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgdGhlcmUgdG8gcmVhZD8gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMl9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghbGVuKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogcmVzcG9uc2UgcGFja2V0IHRvbyBsYXJnZTogIgorCQkJICAgIiVkIGJ5dGVzLCBidXQgbWF4aW11bSBpcyAlZFxuIiwKKwkJCSAgIF9fZnVuY19fLCBsZW4sIElGX1NQSV9DTURfQlVGX1NJWkUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlIGludG8gb3VyIGNvbW1hbmQgYnVmZmVyICovCisJZXJyID0gc3B1X3JlYWQoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJY2FyZC0+Y21kX2J1ZmZlciwgQUxJR04obGVuLCA0KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwlpID0gKHByaXYtPnJlc3BfaWR4ID09IDApID8gMSA6IDA7CisJQlVHX09OKHByaXYtPnJlc3BfbGVuW2ldKTsKKwlwcml2LT5yZXNwX2xlbltpXSA9IGxlbjsKKwltZW1jcHkocHJpdi0+cmVzcF9idWZbaV0sIGNhcmQtPmNtZF9idWZmZXIsIGxlbik7CisJbGJzX25vdGlmeV9jb21tYW5kX3Jlc3BvbnNlKHByaXYsIGkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBNb3ZlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgaG9zdCAqLworc3RhdGljIGludCBpZl9zcGlfYzJoX2RhdGEoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqZGF0YTsKKwl1MTYgbGVuOworCWludCBlcnIgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgdGhlcmUgdG8gcmVhZD8gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghbGVuKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgeworCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzICVkIGJ5dGVzIG9mIGRhdGEsIGJ1dCAiCisJCQkgICAib3VyIG1heGltdW0gc2tiIHNpemUgaXMgJXVcbiIsCisJCQkgICBfX2Z1bmNfXywgbGVuLCBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRPRE86IHNob3VsZCB3ZSBhbGxvY2F0ZSBhIHNtYWxsZXIgc2tiIGlmIHdlIGhhdmUgbGVzcyBkYXRhPyAqLworCXNrYiA9IGRldl9hbGxvY19za2IoTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpOworCWlmICghc2tiKSB7CisJCWVyciA9IC1FTk9CVUZTOworCQlnb3RvIG91dDsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBJUEZJRUxEX0FMSUdOX09GRlNFVCk7CisJZGF0YSA9IHNrYl9wdXQoc2tiLCBsZW4pOworCisJLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZSBpbnRvIG91ciBza2IuLi4gKi8KKwllcnIgPSBzcHVfcmVhZChjYXJkLCBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUcsIGRhdGEsIEFMSUdOKGxlbiwgNCkpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9za2I7CisKKwkvKiBwYXNzIHRoZSBTS0IgdG8gbGliZXJ0YXMgKi8KKwllcnIgPSBsYnNfcHJvY2Vzc19yeGVkX3BhY2tldChjYXJkLT5wcml2LCBza2IpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9za2I7CisKKwkvKiBzdWNjZXNzICovCisJZ290byBvdXQ7CisKK2ZyZWVfc2tiOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBNb3ZlIGRhdGEgb3IgYSBjb21tYW5kIGZyb20gdGhlIGhvc3QgdG8gdGhlIGNhcmQuICovCitzdGF0aWMgdm9pZCBpZl9zcGlfaDJjKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQsIGludCB0eXBlKQoreworCWludCBlcnIgPSAwOworCXUxNiBpbnRfdHlwZSwgcG9ydF9yZWc7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1WTVNfREFUOgorCQlpbnRfdHlwZSA9IElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUjsKKwkJcG9ydF9yZWcgPSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUc7CisJCWJyZWFrOworCWNhc2UgTVZNU19DTUQ6CisJCWludF90eXBlID0gSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUjsKKwkJcG9ydF9yZWcgPSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWRcbiIsIHR5cGUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgY2FyZCAqLworCWVyciA9IHNwdV93cml0ZShjYXJkLCBwb3J0X3JlZywgcGFja2V0LT5idWZmZXIsIHBhY2tldC0+Ymxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKK291dDoKKwlrZnJlZShwYWNrZXQpOworCisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKK30KKworLyogSW5mb3JtIHRoZSBob3N0IGFib3V0IGEgY2FyZCBldmVudCAqLworc3RhdGljIHZvaWQgaWZfc3BpX2UyaChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY2F1c2U7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF8zX1JFRywgJmNhdXNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCWxic19xdWV1ZV9ldmVudChwcml2LCBjYXVzZSAmIDB4ZmYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworfQorCitzdGF0aWMgaW50IGxic19zcGlfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBkYXRhOworCXUxNiBoaVN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisKKwl3aGlsZSAoMSkgeworCQkvKiBXYWl0IHRvIGJlIHdva2VuIHVwIGJ5IG9uZSBvZiB0d28gdGhpbmdzLiAgRmlyc3QsIG91ciBJU1IKKwkJICogY291bGQgdGVsbCB1cyB0aGF0IHNvbWV0aGluZyBoYXBwZW5lZCBvbiB0aGUgV0xBTi4KKwkJICogU2Vjb25kbHksIGxpYmVydGFzIGNvdWxkIGNhbGwgaHdfaG9zdF90b19jYXJkIHdpdGggbW9yZQorCQkgKiBkYXRhLCB3aGljaCB3ZSBtaWdodCBiZSBhYmxlIHRvIHNlbmQuCisJCSAqLworCQlkbyB7CisJCQllcnIgPSBkb3duX2ludGVycnVwdGlibGUoJmNhcmQtPnNwaV9yZWFkeSk7CisJCQlpZiAoIWNhcmQtPnJ1bl90aHJlYWQpIHsKKwkJCQl1cCgmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKKwkJCQlkb19leGl0KDApOworCQkJfQorCQl9IHdoaWxlIChlcnIgPT0gRUlOVFIpOworCisJCS8qIFJlYWQgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBzZWUgd2hhdCB3ZQorCQkgKiBjYW4gZG8uICovCisJCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKKwkJCQkJJmhpU3RhdHVzKTsKKwkJaWYgKGVycikgeworCQkJbGJzX3ByX2VycigiSS9PIGVycm9yXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ01EX1VQTE9BRF9SRFkpCisJCQllcnIgPSBpZl9zcGlfYzJoX2NtZChjYXJkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX1JYX1VQTE9BRF9SRFkpCisJCQllcnIgPSBpZl9zcGlfYzJoX2RhdGEoY2FyZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyOworCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKSB7CisJCQkvKiBUaGlzIG1lYW5zIHR3byB0aGluZ3MuIEZpcnN0IG9mIGFsbCwKKwkJCSAqIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGNvbW1hbmQgc2VudCwgdGhlIGNhcmQgaGFzCisJCQkgKiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgaXQuCisJCQkgKiBTZWNvbmRseSwgaXQgaXMgbm93IHJlYWR5IHRvIGRvd25sb2FkIGFub3RoZXIKKwkJCSAqIGNvbW1hbmQuCisJCQkgKi8KKwkJCWxic19ob3N0X3RvX2NhcmRfZG9uZShjYXJkLT5wcml2KTsKKworCQkJLyogRG8gd2UgaGF2ZSBhbnkgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8KKwkJCSAqIHNlbmQ/ICovCisJCQlwYWNrZXQgPSBOVUxMOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCkpIHsKKwkJCQlwYWNrZXQgPSAoc3RydWN0IGlmX3NwaV9wYWNrZXQgKikoY2FyZC0+CisJCQkJCQljbWRfcGFja2V0X2xpc3QubmV4dCk7CisJCQkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocGFja2V0KQorCQkJCWlmX3NwaV9oMmMoY2FyZCwgcGFja2V0LCBNVk1TX0NNRCk7CisJCX0KKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfVFhfRE9XTkxPQURfUkRZKSB7CisJCQkvKiBEbyB3ZSBoYXZlIGFueSBkYXRhIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bworCQkJICogc2VuZD8gKi8KKwkJCXBhY2tldCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCkpIHsKKwkJCQlwYWNrZXQgPSAoc3RydWN0IGlmX3NwaV9wYWNrZXQgKikoY2FyZC0+CisJCQkJCQlkYXRhX3BhY2tldF9saXN0Lm5leHQpOworCQkJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHBhY2tldCkKKwkJCQlpZl9zcGlfaDJjKGNhcmQsIHBhY2tldCwgTVZNU19EQVQpOworCQl9CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX0NBUkRfRVZFTlQpCisJCQlpZl9zcGlfZTJoKGNhcmQpOworCitlcnI6CisJCWlmIChlcnIpCisJCQlsYnNfcHJfZXJyKCIlczogZ290IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwl9Cit9CisKKy8qIEJsb2NrIHVudGlsIGxic19zcGlfdGhyZWFkIHRocmVhZCBoYXMgdGVybWluYXRlZCAqLworc3RhdGljIHZvaWQgaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwkvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBrdGhyZWFkX3N0b3AgaGVyZSwgYnV0IHRoYXQgZnVuY3Rpb24KKwkgKiBjYW4ndCB3YWtlIHRocmVhZHMgd2FpdGluZyBmb3IgYSBzZW1hcGhvcmUuICovCisJY2FyZC0+cnVuX3RocmVhZCA9IDA7CisJdXAoJmNhcmQtPnNwaV9yZWFkeSk7CisJZG93bigmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKK30KKworLyoKKyAqIEhvc3QgdG8gQ2FyZAorICoKKyAqIENhbGxlZCBmcm9tIExpYmVydGFzIHRvIHRyYW5zZmVyIHNvbWUgZGF0YSB0byB0aGUgV0xBTiBkZXZpY2UKKyAqIFdlIGNhbid0IHNsZWVwIGhlcmUuICovCitzdGF0aWMgaW50IGlmX3NwaV9ob3N0X3RvX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCXU4IHR5cGUsIHU4ICpidWYsIHUxNiBuYikKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldDsKKwl1MTYgYmxlbjsKKworCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX1NQSSwgInR5cGUgJWQsIGJ5dGVzICVkIiwgdHlwZSwgbmIpOworCisJaWYgKG5iID09IDApIHsKKwkJbGJzX3ByX2VycigiJXM6IGludmFsaWQgc2l6ZSByZXF1ZXN0ZWQ6ICVkXG4iLCBfX2Z1bmNfXywgbmIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJYmxlbiA9IEFMSUdOKG5iLCA0KTsKKwlwYWNrZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWZfc3BpX3BhY2tldCkgKyBibGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXBhY2tldCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcGFja2V0LT5ibGVuID0gYmxlbjsKKwltZW1jcHkocGFja2V0LT5idWZmZXIsIGJ1ZiwgbmIpOworCW1lbXNldChwYWNrZXQtPmJ1ZmZlciArIG5iLCAwLCBibGVuIC0gbmIpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNVk1TX0NNRDoKKwkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9DTURfU0VOVDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdCwgJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgTVZNU19EQVQ6CisJCXByaXYtPmRubGRfc2VudCA9IEROTERfREFUQV9TRU5UOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19wcl9lcnIoImNhbid0IHRyYW5zZmVyIGJ1ZmZlciBvZiB0eXBlICVkIiwgdHlwZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCS8qIFdha2UgdXAgdGhlIHNwaSB0aHJlYWQgKi8KKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnI9JWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBIb3N0IEludGVycnVwdHMKKyAqCisgKiBTZXJ2aWNlIGluY29taW5nIGludGVycnVwdHMgZnJvbSB0aGUgV0xBTiBkZXZpY2UuIFdlIGNhbid0IHNsZWVwIGhlcmUsIHNvCisgKiBkb24ndCB0cnkgdG8gdGFsayBvbiB0aGUgU1BJIGJ1cywganVzdCB3YWtlIHVwIHRoZSBTUEkgdGhyZWFkLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaWZfc3BpX2hvc3RfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBkZXZfaWQ7CisKKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBTUEkgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBpZl9zcGlfY2FsY3VsYXRlX2Z3X25hbWVzKHUxNiBjYXJkX2lkLAorCQkJICAgICAgY2hhciAqaGVscGVyX2Z3LCBjaGFyICptYWluX2Z3KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoaXBfaWRfdG9fZGV2aWNlX25hbWUpOyArK2kpIHsKKwkJaWYgKGNhcmRfaWQgPT0gY2hpcF9pZF90b19kZXZpY2VfbmFtZVtpXS5jaGlwX2lkKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoY2hpcF9pZF90b19kZXZpY2VfbmFtZSkpIHsKKwkJbGJzX3ByX2VycigiVW5zdXBwb3J0ZWQgY2hpcF9pZDogMHglMDJ4XG4iLCBjYXJkX2lkKTsKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJfQorCXNucHJpbnRmKGhlbHBlcl9mdywgRklSTVdBUkVfTkFNRV9NQVgsICJsaWJlcnRhcy9nc3BpJWRfaGxwLmJpbiIsCisJCSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLm5hbWUpOworCXNucHJpbnRmKG1haW5fZncsIEZJUk1XQVJFX05BTUVfTUFYLCAibGliZXJ0YXMvZ3NwaSVkLmJpbiIsCisJCSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpZl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQ7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgZXJyID0gMDsKKwl1MzIgc2NyYXRjaDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJaWYgKCFwZGF0YSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEtPnNldHVwKSB7CisJCWVyciA9IHBkYXRhLT5zZXR1cChzcGkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoaXMgc3BlY2lmaWMgZGV2aWNlICovCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl9zcGlfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc3BpX3NldF9kcnZkYXRhKHNwaSwgY2FyZCk7CisJY2FyZC0+cGRhdGEgPSBwZGF0YTsKKwljYXJkLT5zcGkgPSBzcGk7CisJY2FyZC0+Z3Bpb19jcyA9IHBkYXRhLT5ncGlvX2NzOworCWNhcmQtPnByZXZfeGZlcl90aW1lID0gamlmZmllczsKKworCXNlbWFfaW5pdCgmY2FyZC0+c3BpX3JlYWR5LCAwKTsKKwlzZW1hX2luaXQoJmNhcmQtPnNwaV90aHJlYWRfdGVybWluYXRlZCwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5idWZmZXJfbG9jayk7CisKKwkvKiBzZXQgdXAgR1BJTyBDUyBsaW5lLiBUT0RPOiB1c2UgIHJlZ3VsYXIgQ1MgbGluZSAqLworCWVyciA9IGdwaW9fcmVxdWVzdChjYXJkLT5ncGlvX2NzLCAiaWZfc3BpX2dwaW9fY2hpcF9zZWxlY3QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfY2FyZDsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY2FyZC0+Z3Bpb19jcywgMSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBJbml0aWFsaXplIHRoZSBTUEkgSW50ZXJmYWNlIFVuaXQgKi8KKwllcnIgPSBzcHVfaW5pdChjYXJkLCBwZGF0YS0+dXNlX2R1bW15X3dyaXRlcyk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisJZXJyID0gc3B1X2dldF9jaGlwX3JldmlzaW9uKGNhcmQsICZjYXJkLT5jYXJkX2lkLCAmY2FyZC0+Y2FyZF9yZXYpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogRmlybXdhcmUgbG9hZCAqLworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF80X1JFRywgJnNjcmF0Y2gpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCWlmIChzY3JhdGNoID09IFNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMpCisJCWxic19kZWJfc3BpKCJGaXJtd2FyZSBpcyBhbHJlYWR5IGxvYWRlZCBmb3IgIgorCQkJICAgICJNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIpOworCWVsc2UgeworCQllcnIgPSBpZl9zcGlfY2FsY3VsYXRlX2Z3X25hbWVzKGNhcmQtPmNhcmRfaWQsCisJCQkJY2FyZC0+aGVscGVyX2Z3X25hbWUsIGNhcmQtPm1haW5fZndfbmFtZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKworCQlsYnNfZGViX3NwaSgiSW5pdGlhbGl6aW5nIEZXIGZvciBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXIgIgorCQkJCSIoY2hpcF9pZCA9IDB4JTA0eCwgY2hpcF9yZXYgPSAweCUwMngpICIKKwkJCQkiYXR0YWNoZWQgdG8gU1BJIGJ1c19udW0gJWQsIGNoaXBfc2VsZWN0ICVkLiAiCisJCQkJInNwaS0+bWF4X3NwZWVkX2h6PSVkXG4iLAorCQkJCWNhcmQtPmNhcmRfaWQsIGNhcmQtPmNhcmRfcmV2LAorCQkJCXNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0LAorCQkJCXNwaS0+bWF4X3NwZWVkX2h6KTsKKwkJZXJyID0gaWZfc3BpX3Byb2dfaGVscGVyX2Zpcm13YXJlKGNhcmQpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX2dwaW87CisJCWVyciA9IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmUoY2FyZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKwkJbGJzX2RlYl9zcGkoImxvYWRlZCBGVyBmb3IgTWFydmVsbCBXTEFOIDgwMi4xMSBhZGFwdGVyXG4iKTsKKwl9CisKKwllcnIgPSBzcHVfc2V0X2ludGVycnVwdF9tb2RlKGNhcmQsIDAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogUmVnaXN0ZXIgb3VyIGNhcmQgd2l0aCBsaWJlcnRhcy4KKwkgKiBUaGlzIHdpbGwgY2FsbCBhbGxvY19ldGhlcmRldiAqLworCXByaXYgPSBsYnNfYWRkX2NhcmQoY2FyZCwgJnNwaS0+ZGV2KTsKKwlpZiAoIXByaXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2dwaW87CisJfQorCWNhcmQtPnByaXYgPSBwcml2OworCXByaXYtPmNhcmQgPSBjYXJkOworCXByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX3NwaV9ob3N0X3RvX2NhcmQ7CisJcHJpdi0+ZndfcmVhZHkgPSAxOworCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CisKKwkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4gKi8KKwljYXJkLT5ydW5fdGhyZWFkID0gMTsKKwljYXJkLT5zcGlfdGhyZWFkID0ga3RocmVhZF9ydW4obGJzX3NwaV90aHJlYWQsIGNhcmQsICJsYnNfc3BpX3RocmVhZCIpOworCWlmIChJU19FUlIoY2FyZC0+c3BpX3RocmVhZCkpIHsKKwkJY2FyZC0+cnVuX3RocmVhZCA9IDA7CisJCWVyciA9IFBUUl9FUlIoY2FyZC0+c3BpX3RocmVhZCk7CisJCWxic19wcl9lcnIoImVycm9yIGNyZWF0aW5nIFNQSSB0aHJlYWQ6IGVycj0lZFxuIiwgZXJyKTsKKwkJZ290byByZW1vdmVfY2FyZDsKKwl9CisJZXJyID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIGlmX3NwaV9ob3N0X2ludGVycnVwdCwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAibGliZXJ0YXNfc3BpIiwgY2FyZCk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJjYW4ndCBnZXQgaG9zdCBpcnEgbGluZS0tIHJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CisJCWdvdG8gdGVybWluYXRlX3RocmVhZDsKKwl9CisKKwkvKiBTdGFydCB0aGUgY2FyZC4KKwkgKiBUaGlzIHdpbGwgY2FsbCByZWdpc3Rlcl9uZXRkZXYsIGFuZCB3ZSdsbCBzdGFydAorCSAqIGdldHRpbmcgaW50ZXJydXB0cy4uLiAqLworCWVyciA9IGxic19zdGFydF9jYXJkKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9pcnE7CisKKwlsYnNfZGViX3NwaSgiRmluaXNoZWQgaW5pdGlhbGl6aW5nIFdMQU4gbW9kdWxlLlxuIik7CisKKwkvKiBzdWNjZXNzZnVsIGV4aXQgKi8KKwlnb3RvIG91dDsKKworcmVsZWFzZV9pcnE6CisJZnJlZV9pcnEoc3BpLT5pcnEsIGNhcmQpOwordGVybWluYXRlX3RocmVhZDoKKwlpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoY2FyZCk7CityZW1vdmVfY2FyZDoKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7IC8qIHdpbGwgY2FsbCBmcmVlX25ldGRldiAqLworZnJlZV9ncGlvOgorCWdwaW9fZnJlZShjYXJkLT5ncGlvX2NzKTsKK2ZyZWVfY2FyZDoKKwlmcmVlX2lmX3NwaV9jYXJkKGNhcmQpOworb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaWJlcnRhc19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKworCWxic19kZWJfc3BpKCJsaWJlcnRhc19zcGlfcmVtb3ZlXG4iKTsKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKwlwcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOworCisJbGJzX3N0b3BfY2FyZChwcml2KTsKKwlmcmVlX2lycShzcGktPmlycSwgY2FyZCk7CisJaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKGNhcmQpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCisJZ3Bpb19mcmVlKGNhcmQtPmdwaW9fY3MpOworCWlmIChjYXJkLT5wZGF0YS0+dGVhcmRvd24pCisJCWNhcmQtPnBkYXRhLT50ZWFyZG93bihzcGkpOworCWZyZWVfaWZfc3BpX2NhcmQoY2FyZCk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsaWJlcnRhc19zcGlfZHJpdmVyID0geworCS5wcm9iZQk9IGlmX3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobGliZXJ0YXNfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibGliZXJ0YXNfc3BpIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKgorICogTW9kdWxlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgX19pbml0IGlmX3NwaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQgPSAwOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXByaW50ayhLRVJOX0lORk8gImxpYmVydGFzX3NwaTogTGliZXJ0YXMgU1BJIGRyaXZlclxuIik7CisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbGliZXJ0YXNfc3BpX2RyaXZlcik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlmX3NwaV9leGl0X21vZHVsZSh2b2lkKQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbGliZXJ0YXNfc3BpX2RyaXZlcik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7Cit9CisKK21vZHVsZV9pbml0KGlmX3NwaV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChpZl9zcGlfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxpYmVydGFzIFNQSSBXTEFOIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+LCAiCisJICAgICAgIkNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDM4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqCWxpbnV4L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisgKgorICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFNQSSBXTEFOIGNhcmRzLgorICoKKyAqCUNvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKglBdXRob3JzOgorICoJQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+CisgKglDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTEJTX0lGX1NQSV9IXworI2RlZmluZSBfTEJTX0lGX1NQSV9IXworCisjZGVmaW5lIElQRklFTERfQUxJR05fT0ZGU0VUIDIKKyNkZWZpbmUgSUZfU1BJX0NNRF9CVUZfU0laRSAyNDAwCisKKy8qKioqKioqKioqKioqKioqKiBGaXJtd2FyZSAqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBjaGlwX2lkZW50IHsKKwl1MTYgY2hpcF9pZDsKKwl1MTYgbmFtZTsKK307CisKKyNkZWZpbmUgTUFYX01BSU5fRldfTE9BRF9DUkNfRVJSIDEwCisKKy8qIENodW5rIHNpemUgd2hlbiBsb2FkaW5nIHRoZSBoZWxwZXIgZmlybXdhcmUgKi8KKyNkZWZpbmUgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1ogNjQKKworLyogVmFsdWUgdG8gd3JpdGUgdG8gaW5kaWNhdGUgZW5kIG9mIGhlbHBlciBmaXJtd2FyZSBkbmxkICovCisjZGVmaW5lIEZJUk1XQVJFX0ROTERfT0sgMHgwMDAwCisKKy8qIFZhbHVlIHRvIGNoZWNrIG9uY2UgdGhlIG1haW4gZmlybXdhcmUgaXMgZG93bmxvYWRlZCAqLworI2RlZmluZSBTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDIDB4ODg4ODg4ODgKKworLyoqKioqKioqKioqKioqKioqIFNQSSBJbnRlcmZhY2UgVW5pdCAqKioqKioqKioqKioqKioqKi8KKy8qIE1hc2tzIHVzZWQgaW4gU1BJIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSyAweDAKKyNkZWZpbmUgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLIDB4ODAwMAorCisvKiBTUEkgcmVnaXN0ZXIgb2Zmc2V0cy4gNC1ieXRlIGFsaWduZWQuICovCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRyAweDAwCS8qIERldmljZUlEIGNvbnRyb2xsZXIgcmVnICovCisjZGVmaW5lIElGX1NQSV9JT19SRUFEQkFTRV9SRUcgMHgwNCAJLyogUmVhZCBJL08gYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1dSSVRFQkFTRV9SRUcgMHgwOAkvKiBXcml0ZSBJL08gYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1JEV1JQT1JUX1JFRyAweDBDCS8qIFJlYWQvV3JpdGUgSS9PIHBvcnQgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0NNRF9SRUFEQkFTRV9SRUcgMHgxMAkvKiBSZWFkIGNvbW1hbmQgYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0NNRF9XUklURUJBU0VfUkVHIDB4MTQJLyogV3JpdGUgY29tbWFuZCBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRyAweDE4CS8qIFJlYWQvV3JpdGUgY29tbWFuZCBwb3J0IHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9EQVRBX1JFQURCQVNFX1JFRyAweDFDCS8qIFJlYWQgZGF0YSBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfREFUQV9XUklURUJBU0VfUkVHIDB4MjAJLyogV3JpdGUgZGF0YSBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUcgMHgyNAkvKiBSZWFkL1dyaXRlIGRhdGEgcG9ydCByZWcgKi8KKworI2RlZmluZSBJRl9TUElfU0NSQVRDSF8xX1JFRyAweDI4CS8qIFNjcmF0Y2ggcmVnIDEgKi8KKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfMl9SRUcgMHgyQwkvKiBTY3JhdGNoIHJlZyAyICovCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzNfUkVHIDB4MzAJLyogU2NyYXRjaCByZWcgMyAqLworI2RlZmluZSBJRl9TUElfU0NSQVRDSF80X1JFRyAweDM0CS8qIFNjcmF0Y2ggcmVnIDQgKi8KKworI2RlZmluZSBJRl9TUElfVFhfRlJBTUVfU0VRX05VTV9SRUcgMHgzOCAvKiBUeCBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgcmVnICovCisjZGVmaW5lIElGX1NQSV9UWF9GUkFNRV9TVEFUVVNfUkVHIDB4M0MJLyogVHggZnJhbWUgc3RhdHVzIHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAweDQwCS8qIEhvc3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAweDQ0CS8qIENhcmQgaW50ZXJydXB0IGNhdXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfRVZFTlRfTUFTS19SRUcgMHg0QyAvKiBDYXJkIGludGVycnVwdCBldmVudCBtYXNrICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfTUFTS19SRUcJMHg1MCAvKiBDYXJkIGludGVycnVwdCBzdGF0dXMgbWFzayAqLworCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9SRVNFVF9TRUxFQ1RfUkVHIDB4NTQgLyogQ2FyZCBpbnRlcnJ1cHQgcmVzZXQgc2VsZWN0ICovCisKKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0NBVVNFX1JFRyAweDU4CS8qIEhvc3QgaW50ZXJydXB0IGNhdXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRyAweDVDCS8qIEhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0VWRU5UX01BU0tfUkVHIDB4NjAgLyogSG9zdCBpbnRlcnJ1cHQgZXZlbnQgbWFzayAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHCTB4NjQgLyogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX1JFU0VUX1NFTEVDVF9SRUcgMHg2OCAvKiBIb3N0IGludGVycnVwdCByZXNldCBzZWxlY3QgKi8KKworI2RlZmluZSBJRl9TUElfREVMQVlfUkVBRF9SRUcgMHg2QwkvKiBEZWxheSByZWFkIHJlZyAqLworI2RlZmluZSBJRl9TUElfU1BVX0JVU19NT0RFX1JFRyAweDcwCS8qIFNQVSBCVVMgbW9kZSByZWcgKi8KKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfSUQoZGMpICgoZGMgJiAweGZmZmYwMDAwKT4+MTYpCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX1JFVihkYykgKGRjICYgMHgwMDAwMDBmZikKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdha2UgdXAgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfV0FLRV9VUAkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdMQU4gcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfV0xBTl9SRUFEWQkJCQkoMTw8MSkKKy8qI2RlZmluZSBJRl9TUElfSElDVF9GSUZPX0ZJUlNUX0hBTEZfRU1QVFkJCSgxPDwyKSAqLworLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fU0VDT05EX0hBTEZfRU1QVFkJCSgxPDwzKSAqLworLyojZGVmaW5lIElGX1NQSV9ISUNUX0lSUVNSQ19XTEFOCQkJKDE8PDQpICovCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBUeCBhdXRvIGRvd25sb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1RYX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBSeCBhdXRvIHVwbG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9SWF9VUExPQURfT1ZFUl9BVVRPCQkJKDE8PDYpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gZG93bmxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gdXBsb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX0NNRF9VUExPQURfT1ZFUl9BVVRPCQkoMTw8OCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcgKioqKioqKioqKioqKioqKiovCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBUeCBkb3dubG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUgkJCSgxPDwwKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUnggdXBsb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19SWF9VUExPQURfT1ZFUgkJCSgxPDwxKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCBkb3dubG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVIJCQkoMTw8MikKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IEhvc3QgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19IT1NUX0VWRU5UCQkJCSgxPDwzKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCB1cGxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX0NNRF9VUExPQURfT1ZFUgkJCSgxPDw0KQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUG93ZXIgZG93biAqLworI2RlZmluZSBJRl9TUElfQ0lDX1BPV0VSX0RPV04JCQkJKDE8PDUpCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0NJU19UWF9ET1dOTE9BRF9PVkVSCQkJKDE8PDApCisjZGVmaW5lIElGX1NQSV9DSVNfUlhfVVBMT0FEX09WRVIJCQkoMTw8MSkKKyNkZWZpbmUgSUZfU1BJX0NJU19DTURfRE9XTkxPQURfT1ZFUgkJCSgxPDwyKQorI2RlZmluZSBJRl9TUElfQ0lTX0hPU1RfRVZFTlQJCQkJKDE8PDMpCisjZGVmaW5lIElGX1NQSV9DSVNfQ01EX1VQTE9BRF9PVkVSCQkJKDE8PDQpCisjZGVmaW5lIElGX1NQSV9DSVNfUE9XRVJfRE9XTgkJCQkoMTw8NSkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9DQVVTRV9SRUcgKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElGX1NQSV9ISUNVX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorI2RlZmluZSBJRl9TUElfSElDVV9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ0FSRF9FVkVOVAkJCQkoMTw8MykKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorI2RlZmluZSBJRl9TUElfSElDVV9JT19SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDYpCisjZGVmaW5lIElGX1NQSV9ISUNVX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisjZGVmaW5lIElGX1NQSV9ISUNVX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcgKioqKioqKioqKioqKioqKiovCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ2FyZCBldmVudCAqLworI2RlZmluZSBJRl9TUElfSElTVF9DQVJEX0VWRU5UCQkJCSgxPDwzKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0lPX1JEX0ZJRk9fVU5EUkZMT1cJCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IERhdGEgcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENhcmQgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ0FSREVWRU5UCQkJCSgxPDwzKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0lPX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9TUFVfQlVTX01PREVfUkVHICoqKioqKioqKioqKioqKioqLworLyogU0NLIGVkZ2Ugb24gd2hpY2ggdGhlIFdMQU4gbW9kdWxlIG91dHB1dHMgZGF0YSBvbiBNSVNPICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfRkFMTElORyAweDgKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgMHgwCisKKy8qIEluIGEgU1BVIHJlYWQgb3BlcmF0aW9uLCB0aGVyZSBpcyBhIGRlbGF5IGJldHdlZW4gd3JpdGluZyB0aGUgU1BVCisgKiByZWdpc3RlciBuYW1lIGFuZCBnZXR0aW5nIGJhY2sgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZS4KKyAqIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBuYW5vc2Vjb25kcyBvciBpbiB0ZXJtcyBvZiBkdW1teQorICogY2xvY2sgY3ljbGVzIHdoaWNoIHRoZSBtYXN0ZXIgbXVzdCBvdXRwdXQgYmVmb3JlIHJlY2VpdmluZyBhIHJlc3BvbnNlLiAqLworI2RlZmluZSBJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX0RVTU1ZX0NMT0NLIDB4NAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX1RJTUVEIDB4MAorCisvKiBTb21lIGRpZmZlcmVudCBtb2RlcyBvZiBTUEkgb3BlcmF0aW9uICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV84X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBIDB4MDAKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzhfQklUX0FERFJFU1NfMzJfQklUX0RBVEEgMHgwMQorI2RlZmluZSBJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMTZfQklUX0RBVEEgMHgwMgorI2RlZmluZSBJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMzJfQklUX0RBVEEgMHgwMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwppbmRleCBmNzY2MjNlLi44YWU5MzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCkBAIC01ODIsMjAgKzU4Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfaG9zdF90b19jYXJkX2RvbmUpOwogCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXR3b3JrIHN0YXRpc3RpY3MKLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZV9zdGF0cyBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYnNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX05FVCk7Ci0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQogc3RhdGljIGludCBsYnNfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMDA2LDkgKzk5Miw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfcmVzdW1lKTsKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGZpcm13YXJlIGltYWdlLCBnZXRzCi0gKiAgSFcgc3BlYyBmcm9tIGZpcm13YXJlIGFuZCBzZXQgYmFzaWMgcGFyYW1ldGVycyB0bwotICogIGZpcm13YXJlLgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgSFcgc3BlYyBmcm9tIHRoZSBmaXJtd2FyZSBhbmQgc2V0cworICogICAgICAgIHNvbWUgYmFzaWMgcGFyYW1ldGVycy4KICAqCiAgKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqICBAcmV0dXJuIAkgICAwIG9yIC0xCkBAIC0xMTYzLDYgKzExNDgsMTcgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGJzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBsYnNfZGV2X29wZW4sCisJLm5kb19zdG9wCQk9IGxic19ldGhfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb190eF90aW1lb3V0IAk9IGxic190eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhcmQuIGl0IHdpbGwgcHJvYmUgdGhlCiAgKiBjYXJkLCBhbGxvY2F0ZSB0aGUgbGJzX3ByaXYgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZS4KQEAgLTExOTcsMTkgKzExOTMsMTMgQEAKIAlwcml2LT5pbmZyYV9vcGVuID0gMDsKIAogCS8qIFNldHVwIHRoZSBPUyBJbnRlcmZhY2UgdG8gb3VyIGZ1bmN0aW9ucyAqLwotCWRldi0+b3BlbiA9IGxic19kZXZfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gbGJzX2V0aF9zdG9wOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbGJzX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPnR4X3RpbWVvdXQgPSBsYnNfdHhfdGltZW91dDsKLQlkZXYtPmdldF9zdGF0cyA9IGxic19nZXRfc3RhdHM7CisgCWRldi0+bmV0ZGV2X29wcyA9ICZsYnNfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwogI2lmZGVmCVdJUkVMRVNTX0VYVAotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJmxic19oYW5kbGVyX2RlZjsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmxic19oYW5kbGVyX2RlZjsKICNlbmRpZgogCWRldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0OwogCiAJU0VUX05FVERFVl9ERVYoZGV2LCBkbWRldik7CiAKQEAgLTE0MTksNiArMTQwOSwxNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3N0b3BfY2FyZCk7CiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtZXNoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxic19kZXZfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGxic19tZXNoX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGxic19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBsYnNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKIC8qKgogICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyBtc2hYIGludGVyZmFjZQogICoKQEAgLTE0NDEsMTEgKzE0MzksNyBAQAogCW1lc2hfZGV2LT5tbF9wcml2ID0gcHJpdjsKIAlwcml2LT5tZXNoX2RldiA9IG1lc2hfZGV2OwogCi0JbWVzaF9kZXYtPm9wZW4gPSBsYnNfZGV2X29wZW47Ci0JbWVzaF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19oYXJkX3N0YXJ0X3htaXQ7Ci0JbWVzaF9kZXYtPnN0b3AgPSBsYnNfbWVzaF9zdG9wOwotCW1lc2hfZGV2LT5nZXRfc3RhdHMgPSBsYnNfZ2V0X3N0YXRzOwotCW1lc2hfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYnNfc2V0X21hY19hZGRyZXNzOworCW1lc2hfZGV2LT5uZXRkZXZfb3BzID0gJm1lc2hfbmV0ZGV2X29wczsKIAltZXNoX2Rldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwogCW1lbWNweShtZXNoX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmRldi0+ZGV2X2FkZHIsCiAJCQlzaXplb2YocHJpdi0+ZGV2LT5kZXZfYWRkcikpOwpAQCAtMTQ1Niw3ICsxNDUwLDYgQEAKIAltZXNoX2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm1lc2hfaGFuZGxlcl9kZWY7CiAjZW5kaWYKIAltZXNoX2Rldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JbWVzaF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJLyogUmVnaXN0ZXIgdmlydHVhbCBtZXNoIGludGVyZmFjZSAqLwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihtZXNoX2Rldik7CiAJaWYgKHJldCkgewpAQCAtMTY0OSwxNCArMTY0Miw2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxic19ydGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi0KIHN0YXRpYyB2b2lkIGxic19yZW1vdmVfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwpAQCAtMTY2OSw2ICsxNjU0LDEyIEBACiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0YXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBsYnNfcnRhcF9vcGVuLAorCS5uZG9fc3RvcCA9IGxic19ydGFwX3N0b3AsCisJLm5kb19zdGFydF94bWl0ID0gbGJzX3J0YXBfaGFyZF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIGludCBsYnNfYWRkX3J0YXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCWludCByZXQgPSAwOwpAQCAtMTY4OCwxMCArMTY3OSw3IEBACiAKIAltZW1jcHkocnRhcF9kZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyZW50X2FkZHIsIEVUSF9BTEVOKTsKIAlydGFwX2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7Ci0JcnRhcF9kZXYtPm9wZW4gPSBsYnNfcnRhcF9vcGVuOwotCXJ0YXBfZGV2LT5zdG9wID0gbGJzX3J0YXBfc3RvcDsKLQlydGFwX2Rldi0+Z2V0X3N0YXRzID0gbGJzX3J0YXBfZ2V0X3N0YXRzOwotCXJ0YXBfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQ7CisJcnRhcF9kZXYtPm5ldGRldl9vcHMgPSAmcnRhcF9uZXRkZXZfb3BzOwogCXJ0YXBfZGV2LT5tbF9wcml2ID0gcHJpdjsKIAlTRVRfTkVUREVWX0RFVihydGFwX2RldiwgcHJpdi0+ZGV2LT5kZXYucGFyZW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3JhZGlvdGFwLmgKaW5kZXggZjhlYjkwOTcuLmQxNmIyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3JhZGlvdGFwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaApAQCAtMzMsMjIgKzMzLDEyIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgaGRyOwogCXU4IGZsYWdzOwogCXU4IHJhdGU7Ci0JdTE2IGNoYW5fZnJlcTsKLQl1MTYgY2hhbl9mbGFnczsKLQl1OCBhbnRlbm5hOwogCXU4IGFudHNpZ25hbDsKLQl1MTYgcnhfZmxhZ3M7Ci0jaWYgMAotCXU4IHBhZFtJRUVFODAyMTFfUkFESU9UQVBfSERSTEVOIC0gMThdOwotI2VuZGlmCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBSWF9SQURJT1RBUF9QUkVTRU5UICgJCQlcCiAJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CVwKIAkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgfAlcCi0JKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwpIHwJXAotCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BKSB8CVwKIAkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMKSB8XAotCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUykgfAlcCiAJMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKaW5kZXggMDc5ZTZhYS4uNjNkN2UxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IChFVEhfSExFTiArIDggKyBzaXplb2Yoc3RydWN0IHJ4cGQpKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIGxlbmd0aFxuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNzksNyArMTc5LDcgQEAKIAlpZiAoIShwX3J4X3BkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIHN0YXR1c1xuIik7CiAJCWxic19wcl9hbGVydCgicnhwZCBub3Qgb2tcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTI0Myw4ICsyNDMsOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcF9yeF9wZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKGluX2ludGVycnVwdCgpKQpAQCAtMzExLDcgKzMxMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0ID0gMDsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CiAJc3RydWN0IHJ4ODAyMTFwYWNrZXRoZHIgKnBfcnhfcGt0OwogCXN0cnVjdCByeHBkICpwcnhwZDsKIAlzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyIHJhZGlvdGFwX2hkcjsKQEAgLTMyNiw3ICszMjYsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKEVUSF9ITEVOICsgOCArIHNpemVvZihzdHJ1Y3QgcnhwZCkpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgbGVuZ3RoXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZG9uZTsKQEAgLTMzNyw3ICszMzcsNyBAQAogCSAqLwogCWlmICghKHByeHBkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQkvL2xic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgc3RhdHVzXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2tiLT5sZW4tc2l6ZW9mKFJ4UGQpID0gJWQtJXpkID0gJXpkXG4iLApAQCAtMzUxLDE5ICszNTEsMTEgQEAKIAlyYWRpb3RhcF9oZHIuaGRyLml0X3BhZCA9IDA7CiAJcmFkaW90YXBfaGRyLmhkci5pdF9sZW4gPSBjcHVfdG9fbGUxNiAoc2l6ZW9mKHN0cnVjdCByeF9yYWRpb3RhcF9oZHIpKTsKIAlyYWRpb3RhcF9oZHIuaGRyLml0X3ByZXNlbnQgPSBjcHVfdG9fbGUzMiAoUlhfUkFESU9UQVBfUFJFU0VOVCk7Ci0JLyogdW5rbm93biB2YWx1ZXMgKi8KLQlyYWRpb3RhcF9oZHIuZmxhZ3MgPSAwOwotCXJhZGlvdGFwX2hkci5jaGFuX2ZyZXEgPSAwOwotCXJhZGlvdGFwX2hkci5jaGFuX2ZsYWdzID0gMDsKLQlyYWRpb3RhcF9oZHIuYW50ZW5uYSA9IDA7Ci0JLyoga25vd24gdmFsdWVzICovCisJaWYgKCEocHJ4cGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKQorCQlyYWRpb3RhcF9oZHIuZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfQkFERkNTOwogCXJhZGlvdGFwX2hkci5yYXRlID0gY29udmVydF9tdl9yYXRlX3RvX3JhZGlvdGFwKHByeHBkLT5yeF9yYXRlKTsKIAkvKiBYWFggbXVzdCBjaGVjayBubyBjYXJyeW91dCAqLwogCXJhZGlvdGFwX2hkci5hbnRzaWduYWwgPSBwcnhwZC0+c25yICsgcHJ4cGQtPm5mOwotCXJhZGlvdGFwX2hkci5yeF9mbGFncyA9IDA7Ci0JaWYgKCEocHJ4cGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKQotCQlyYWRpb3RhcF9oZHIucnhfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFERkNTOwotCS8vbWVtc2V0KHJhZGlvdGFwX2hkci5wYWQsIDB4MTEsIElFRUU4MDIxMV9SQURJT1RBUF9IRFJMRU4gLSAxOCk7CiAKIAkvKiBjaG9wIHRoZSByeHBkICovCiAJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHJ4cGQpKTsKQEAgLTM4OSw4ICszODEsOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcHJ4cGQpOwogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2l6ZSBvZiBhY3R1YWwgcGFja2V0ICVkXG4iLCBza2ItPmxlbik7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5ydGFwX25ldF9kZXYpOwogCW5ldGlmX3J4KHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKaW5kZXggOTAxNDk1MC4uODEyNGRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJCQkJCSAgICBic3MtPndwYV9pZV9sZW4pOwogCQkJfSBlbHNlIGlmIChwb3NbMV0gPj0gTUFSVkVMTF9NRVNIX0lFX0xFTkdUSCAmJgogCQkJCSAgIHBvc1syXSA9PSAweDAwICYmIHBvc1szXSA9PSAweDUwICYmCi0JCQkJICAgcG9zWzRdID09IDB4NDMgJiYgcG9zWzRdID09IDB4MDQpIHsKKwkJCQkgICBwb3NbNF0gPT0gMHg0MyAmJiBwb3NbNV0gPT0gMHgwNCkgewogCQkJCWxic19kZWJfc2NhbigiZ290IG1lc2ggSUVcbiIpOwogCQkJCWJzcy0+bWVzaCA9IDE7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggNjhiZWMzMS4uZjEwYWEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCSAgICAgICBza2ItPmxlbiwgTVJWRFJWX0VUSF9UWF9QQUNLRVRfQlVGRkVSX1NJWkUpOwogCQkvKiBXZSdsbCBuZXZlciBtYW5hZ2UgdG8gc2VuZCB0aGlzIG9uZTsgZHJvcCBpdCBhbmQgcmV0dXJuICdPSycgKi8KIAotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJZ290byBmcmVlOwogCX0KIApAQCAtMTQ2LDggKzE0Niw4IEBACiAKIAlsYnNfZGViX3R4KCIlcyBsaW5lZCB1cCBwYWNrZXRcbiIsIF9fZnVuY19fKTsKIAotCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCBmMTZkMTM2Li44YmMxOTA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwpAQCAtODMwLDcgKzgzMCw3IEBACiAJcXVhbGl0eSA9IHJzc2lfcXVhbDsKIAogCS8qIFF1YWxpdHkgYnkgVFggZXJyb3JzICovCi0JcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IHByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwlwcml2LT53c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAKIAltZW1zZXQoJmxvZywgMCwgc2l6ZW9mKGxvZykpOwogCWxvZy5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihsb2cpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKaW5kZXggM2QzOTE0Yy4uMjg3OTBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCWxidGZfY21kX2FzeW5jKHByaXYsIENNRF84MDJfMTFfU0VUX01PREUsICZjbWQuaGRyLCBzaXplb2YoY21kKSk7CiB9CiAKLXZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgdTggKmJzc2lkKQordm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IGNtZF9kc19zZXRfYnNzaWQgY21kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaAppbmRleCA4OTk1Y2Q3Li40Y2M0MmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKQEAgLTQ2Myw3ICs0NjMsNyBAQAogaW50IGxidGZfdXBkYXRlX2h3X3NwZWMoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdik7CiBpbnQgbGJ0Zl9jbWRfc2V0X21hY19tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2KTsKIHZvaWQgbGJ0Zl9zZXRfbW9kZShzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBlbnVtIGxidGZfbW9kZSBtb2RlKTsKLXZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgdTggKmJzc2lkKTsKK3ZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgY29uc3QgdTggKmJzc2lkKTsKIGludCBsYnRmX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCB1aW50OF90ICptYWNfYWRkcik7CiAKIGludCBsYnRmX3NldF9jaGFubmVsKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggZjgzZDY5ZS4uZDRmZGM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC0xMCw3ICsxMCw2IEBACiAvKgogICogVE9ETzoKICAqIC0gSUJTUyBtb2RlIHNpbXVsYXRpb24gKEJlYWNvbiB0cmFuc21pc3Npb24gd2l0aCBjb21wZXRpdGlvbiBmb3IgImFpciB0aW1lIikKLSAqIC0gSUVFRSA4MDIuMTFhIGFuZCA4MDIuMTFuIG1vZGVzCiAgKiAtIFJYIGZpbHRlcmluZyBiYXNlZCBvbiBmaWx0ZXIgY29uZmlndXJhdGlvbiAoZGF0YS0+cnhfZmlsdGVyKQogICovCiAKQEAgLTMxLDYgKzMwLDExMiBAQAogbW9kdWxlX3BhcmFtKHJhZGlvcywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9zLCAiTnVtYmVyIG9mIHNpbXVsYXRlZCByYWRpb3MiKTsKIAorLyoqCisgKiBlbnVtIGh3c2ltX3JlZ3Rlc3QgLSB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IHRlc3RzIHdlIG9mZmVyCisgKgorICogVGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgdmFsdWVzIHlvdSBjYW4gdXNlIGZvciB0aGUgcmVndGVzdAorICogbW9kdWxlIHBhcmFtZXRlci4gVGhpcyBpcyB1c2VmdWwgdG8gaGVscCB0ZXN0IHdvcmxkIHJvYW1pbmcKKyAqIGFuZCB0aGUgZHJpdmVyIHJlZ3VsYXRvcnlfaGludCgpIGNhbGwgYW5kIGNvbWJpbmF0aW9ucyBvZiB0aGVzZS4KKyAqIElmIHlvdSB3YW50IHRvIGRvIHNwZWNpZmljIGFscGhhMiByZWd1bGF0b3J5IGRvbWFpbiB0ZXN0cyBzaW1wbHkKKyAqIHVzZSB0aGUgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgcmVxdWVzdCBhcyB0aGF0IHdpbGwgYmUgcmVzcGVjdGVkIGFzCisgKiB3ZWxsIHdpdGhvdXQgdGhlIG5lZWQgb2YgdGhpcyBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGlzIGRlc2lnbmVkCisgKiBvbmx5IGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0LCB3b3JsZCByb2FtaW5nCisgKiBhbmQgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucy4KKyAqCisgKiBASFdTSU1fUkVHVEVTVF9ESVNBQkxFRDogTm8gcmVndWxhdG9yeSB0ZXN0cyBhcmUgcGVyZm9ybWVkLAorICogCXRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCisgKiBASFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqCWhpbnQsIG9ubHkgb25lIGRyaXZlciByZWd1bGF0b3J5IGhpbnQgd2lsbCBiZSBzZW50IGFzIHN1Y2ggdGhlCisgKiAJc2Vjb25kYXJ5IHJhZGlvcyBhcmUgZXhwZWN0ZWQgdG8gZm9sbG93LgorICogQEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEw6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5CisgKiAJcmVxdWVzdCB3aXRoIGFsbCByYWRpb3MgcmVwb3J0aW5nIHRoZSBzYW1lIHJlZ3VsYXRvcnkgZG9tYWluLgorICogQEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXJzIGNhbGxpbmcKKyAqIAlkaWZmZXJlbnQgcmVndWxhdG9yeSBkb21haW5zIHJlcXVlc3RzLiBFeHBlY3RlZCBiZWhhdmlvdXIgaXMgZm9yCisgKiAJYW4gaW50ZXJzZWN0aW9uIHRvIG9jY3VyIGJ1dCBlYWNoIGRldmljZSB3aWxsIHN0aWxsIHVzZSB0aGVpcgorICogCXJlc3BlY3RpdmUgcmVndWxhdG9yeSByZXF1ZXN0ZWQgZG9tYWlucy4gU3Vic2VxdWVudCByYWRpb3Mgd2lsbAorICogCXVzZSB0aGUgcmVzdWx0aW5nIGludGVyc2VjdGlvbi4KKyAqIEBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06IFVzZWQgZm9yIHRlc3RpbmcgdGhlIHdvcmxkIHJvYW1pbmcuIFdlIGFjb21wbGlzaAorICoJdGhpcyBieSB1c2luZyBhIGN1c3RvbSBiZWFjb24tY2FwYWJsZSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgdGhlIGZpcnN0CisgKglyYWRpby4gQWxsIG90aGVyIGRldmljZSB3b3JsZCByb2FtLgorICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbiByZXF1ZXN0cy4gQWxsIHJhZGlvcyB3aWxsIGFkaGVyZSB0byB0aGlzIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6IFVzZWQgZm9yIHRlc3RpbmcgMiBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbiByZXF1ZXN0cy4gVGhlIGZpcnN0IHJhZGlvIHdpbGwgYWRoZXJlIHRvIHRoZSBmaXJzdCBjdXN0b20gd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbiwgdGhlIHNlY29uZCBvbmUgdG8gdGhlIHNlY29uZCBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbi4gQWxsIG90aGVyIGRldmljZXMgd2lsbCB3b3JsZCByb2FtLgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPV186IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncywgb25seSB0aGUgZmlyc3QgcmFkaW8gd2lsbCBzZW5kIGEgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICoJYW5kIHVzZSBzdHJpY3Qgc2V0dGluZ3MuIFRoZSByZXN0IG9mIHRoZSByYWRpb3MgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdy4KKyAqIEBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncy4gQWxsIHJhZGlvcyB3aWxsIGFkaGVyZSB0byB0aGlzLgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHOiBVc2VkIGZvciB0ZXN0aW5nIHN0cmljdCByZWd1bGF0b3J5CisgKglkb21haW4gc2V0dGluZ3MsIGNvbWJpbmVkIHdpdGggc2Vjb25kYXJ5IGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgorICoJc2V0dGluZ3MuIFRoZSBmaXJzdCByYWRpbyB3aWxsIGdldCBhIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5nCisgKgl1c2luZyB0aGUgZmlyc3QgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdCBhbmQgdGhlIHNlY29uZCByYWRpbyB3aWxsIHVzZQorICoJbm9uLXN0cmljdCBzZXR0aW5ncyB1c2luZyB0aGUgc2Vjb25kIGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QuIEFsbAorICoJb3RoZXIgZGV2aWNlcyBzaG91bGQgZm9sbG93IHRoZSBpbnRlcnNlY3Rpb24gY3JlYXRlZCBiZXR3ZWVuIHRoZQorICoJZmlyc3QgdHdvLgorICogQEhXU0lNX1JFR1RFU1RfQUxMOiBVc2VkIGZvciB0ZXN0aW5nIGV2ZXJ5IHBvc3NpYmxlIG1peC4gWW91IHdpbGwgbmVlZAorICogCWF0IGxlYXN0IDYgcmFkaW9zIGZvciBhIGNvbXBsZXRlIHRlc3QuIFdlIHdpbGwgdGVzdCBpbiB0aGlzIG9yZGVyOgorICogCTEgLSBkcml2ZXIgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJMiAtIHNlY29uZCBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAkzIC0gZmlyc3QgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqIAk0IC0gc2Vjb25kIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKiAJNSAtIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB1c2luZyB0aGUgdGhpcmQgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqIAkgICAgZG9tYWluIHJlcXVlc3QKKyAqIAk2IGFuZCBvbiAtIHNob3VsZCBmb2xsb3cgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgM3JkLCA0cnRoIGFuZCA1dGggcmFkaW8KKyAqIAkgICAgICAgICAgIHJlZ3VsYXRvcnkgcmVxdWVzdHMuCisgKi8KK2VudW0gaHdzaW1fcmVndGVzdCB7CisJSFdTSU1fUkVHVEVTVF9ESVNBQkxFRCA9IDAsCisJSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVyA9IDEsCisJSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTCA9IDIsCisJSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlkgPSAzLAorCUhXU0lNX1JFR1RFU1RfV09STERfUk9BTSA9IDQsCisJSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQgPSA1LAorCUhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzIgPSA2LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVyA9IDcsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMID0gOCwKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRyA9IDksCisJSFdTSU1fUkVHVEVTVF9BTEwgPSAxMCwKK307CisKKy8qIFNldCB0byBvbmUgb2YgdGhlIEhXU0lNX1JFR1RFU1RfKiB2YWx1ZXMgYWJvdmUgKi8KK3N0YXRpYyBpbnQgcmVndGVzdCA9IEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ7Cittb2R1bGVfcGFyYW0ocmVndGVzdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVndGVzdCwgIlRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgdGVzdCB3ZSB3YW50IHRvIHJ1biIpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHdzaW1fYWxwaGEyc1tdID0geworCSJGSSIsCisJIkFMIiwKKwkiVVMiLAorCSJERSIsCisJIkpQIiwKKwkiQUwiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEgPSB7CisJLm5fcmVnX3J1bGVzID0gNCwKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoMjQ4NC0xMCwgMjQ4NCsxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoNTE1MC0xMCwgNTI0MCsxMCwgNDAsIDAsIDMwLCAwKSwKKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDAsIDMwLCAwKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMiA9IHsKKwkubl9yZWdfcnVsZXMgPSAyLAorCS5hbHBoYTIgPSAgIjk5IiwKKwkucmVnX3J1bGVzID0geworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKSwKKwl9Cit9OworCiBzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYgewogCXUzMiBtYWdpYzsKIAl1OCBic3NpZFtFVEhfQUxFTl07CkBAIC04NiwyMiArMTkxLDY1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaHdzaW1fbW9uOyAvKiBnbG9iYWwgbW9uaXRvciBuZXRkZXYgKi8KIAorI2RlZmluZSBDSEFOMkcoX2ZyZXEpICB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9mcmVxKSwgXAorCS5tYXhfcG93ZXIgPSAyMCwgXAorfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzW10gPSB7Ci0JeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCisjZGVmaW5lIENIQU41RyhfZnJlcSkgeyBcCisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCBcCisJLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAorCS5od192YWx1ZSA9IChfZnJlcSksIFwKKwkubWF4X3Bvd2VyID0gMjAsIFwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBod3NpbV9jaGFubmVsc18yZ2h6W10gPSB7CisJQ0hBTjJHKDI0MTIpLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNyksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyKSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIpLCAvKiBDaGFubmVsIDExICovCisJQ0hBTjJHKDI0NjcpLCAvKiBDaGFubmVsIDEyICovCisJQ0hBTjJHKDI0NzIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQpLCAvKiBDaGFubmVsIDE0ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzXzVnaHpbXSA9IHsKKwlDSEFONUcoNTE4MCksIC8qIENoYW5uZWwgMzYgKi8KKwlDSEFONUcoNTIwMCksIC8qIENoYW5uZWwgNDAgKi8KKwlDSEFONUcoNTIyMCksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCksIC8qIENoYW5uZWwgNDggKi8KKworCUNIQU41Ryg1MjYwKSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwKSwgLyogQ2hhbm5lbCA1NiAqLworCUNIQU41Ryg1MzAwKSwgLyogQ2hhbm5lbCA2MCAqLworCUNIQU41Ryg1MzIwKSwgLyogQ2hhbm5lbCA2NCAqLworCisJQ0hBTjVHKDU1MDApLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwKSwgLyogQ2hhbm5lbCAxMDQgKi8KKwlDSEFONUcoNTU0MCksIC8qIENoYW5uZWwgMTA4ICovCisJQ0hBTjVHKDU1NjApLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwKSwgLyogQ2hhbm5lbCAxMTYgKi8KKwlDSEFONUcoNTYwMCksIC8qIENoYW5uZWwgMTIwICovCisJQ0hBTjVHKDU2MjApLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwKSwgLyogQ2hhbm5lbCAxMjggKi8KKwlDSEFONUcoNTY2MCksIC8qIENoYW5uZWwgMTMyICovCisJQ0hBTjVHKDU2ODApLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwKSwgLyogQ2hhbm5lbCAxNDAgKi8KKworCUNIQU41Ryg1NzQ1KSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSksIC8qIENoYW5uZWwgMTUzICovCisJQ0hBTjVHKDU3ODUpLCAvKiBDaGFubmVsIDE1NyAqLworCUNIQU41Ryg1ODA1KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSksIC8qIENoYW5uZWwgMTY1ICovCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGh3c2ltX3JhdGVzW10gPSB7CkBAIC0xMjYsOCArMjc0LDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbQVJSQVlfU0laRShod3NpbV9jaGFubmVscyldOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbMl07CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzJnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc18yZ2h6KV07CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzVnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc181Z2h6KV07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0FSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpXTsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKQEAgLTU5MCwxMCArNzM5LDE2IEBACiAJLm5hbWUgPSAibWFjODAyMTFfaHdzaW0iCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGh3c2ltX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGh3c2ltX21vbl94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgdm9pZCBod3NpbV9tb25fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGh3c2ltX21vbl94bWl0OworCWRldi0+bmV0ZGV2X29wcyA9ICZod3NpbV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCWV0aGVyX3NldHVwKGRldik7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwpAQCAtNzI4LDYgKzg4Myw3IEBACiAJdTggYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCiAJaWYgKHJhZGlvcyA8IDEgfHwgcmFkaW9zID4gMTAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc3NywzMiArOTMzLDExNiBAQAogCQkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKIAkJCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAogCQkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwotCQlody0+YW1wZHVfcXVldWVzID0gMTsKKworCQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CiAKIAkJLyogYXNrIG1hYzgwMjExIHRvIHJlc2VydmUgc3BhY2UgZm9yIG1hZ2ljICovCiAJCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV92aWZfcHJpdik7CiAJCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV9zdGFfcHJpdik7CiAKLQkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzLCBod3NpbV9jaGFubmVscywgc2l6ZW9mKGh3c2ltX2NoYW5uZWxzKSk7CisJCW1lbWNweShkYXRhLT5jaGFubmVsc18yZ2h6LCBod3NpbV9jaGFubmVsc18yZ2h6LAorCQkJc2l6ZW9mKGh3c2ltX2NoYW5uZWxzXzJnaHopKTsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzXzVnaHosIGh3c2ltX2NoYW5uZWxzXzVnaHosCisJCQlzaXplb2YoaHdzaW1fY2hhbm5lbHNfNWdoeikpOwogCQltZW1jcHkoZGF0YS0+cmF0ZXMsIGh3c2ltX3JhdGVzLCBzaXplb2YoaHdzaW1fcmF0ZXMpKTsKLQkJZGF0YS0+YmFuZC5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzOwotCQlkYXRhLT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKTsKLQkJZGF0YS0+YmFuZC5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOwotCQlkYXRhLT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7Ci0JCW1lbXNldCgmZGF0YS0+YmFuZC5odF9jYXAubWNzLCAwLAotCQkgICAgICAgc2l6ZW9mKGRhdGEtPmJhbmQuaHRfY2FwLm1jcykpOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZkYXRhLT5iYW5kOwogCisJCWZvciAoYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gJmRhdGEtPmJhbmRzW2JhbmRdOworCQkJc3dpdGNoIChiYW5kKSB7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfMmdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfMmdoeik7CisJCQkJYnJlYWs7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfNWdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfNWdoeik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCisJCQlzYmFuZC0+Yml0cmF0ZXMgPSBkYXRhLT5yYXRlczsKKwkJCXNiYW5kLT5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShod3NpbV9yYXRlcyk7CisKKwkJCXNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJCXNiYW5kLT5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOworCQkJc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7CisJCQlzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7CisJCQltZW1zZXQoJnNiYW5kLT5odF9jYXAubWNzLCAwLAorCQkJICAgICAgIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCQkJc2JhbmQtPmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKworCQkJaHctPndpcGh5LT5iYW5kc1tiYW5kXSA9IHNiYW5kOworCQl9CisKKwkJLyogV29yayB0byBiZSBkb25lIHByaW9yIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpICovCisJCXN3aXRjaCAocmVndGVzdCkgeworCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisJCQkgKiBoaW50cyBwcmlvciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKQorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMOgorCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1c6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6CisJCQlpZiAoaSA9PSAwKQorCQkJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9BTEw6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfSBlbHNlIGlmIChpID09IDQpCisJCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZ2l2ZSB0aGUgcmVndWxhdG9yeSB3b3JrcXVldWUgYSBjaGFuY2UgdG8gcnVuICovCisJCWlmIChyZWd0ZXN0KQorCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOwogCQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hYzgwMjExX2h3c2ltOiAiCkBAIC04MTAsNiArMTA1MCw1MiBAQAogCQkJZ290byBmYWlsZWRfaHc7CiAJCX0KIAorCQkvKiBXb3JrIHRvIGJlIGRvbmUgYWZ0ZXIgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkgKi8KKwkJc3dpdGNoIChyZWd0ZXN0KSB7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOgorCQkJaWYgKCFpKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6CisJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzBdKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOgorCQkJaWYgKGkgPCBBUlJBWV9TSVpFKGh3c2ltX2FscGhhMnMpKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQ6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjoKKwkJCS8qCisJCQkgKiBOb3RoaW5nIHRvIGJlIGRvbmUgZm9yIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisJCQkgKiBkb21haW5zIGFmdGVyIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odworCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1c6CisJCQlpZiAoaSA9PSAwKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6CisJCQlpZiAoaSA9PSAwKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJZWxzZSBpZiAoaSA9PSAxKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMV0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9BTEw6CisJCQlpZiAoaSA9PSAyKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJZWxzZSBpZiAoaSA9PSAzKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMV0pOworCQkJZWxzZSBpZiAoaSA9PSA0KQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMl0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHdhZGRyICVwTSByZWdpc3RlcmVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAogCQkgICAgICAgaHctPndpcGh5LT5wZXJtX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMDI2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKQEAgLTAsMCArMSwzNzg5IEBACisvKgorICogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBkcml2ZXIgZm9yIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSBXaXJlbGVzcyBjYXJkcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNkZWZpbmUgTVdMOEtfREVTQwkiTWFydmVsbCBUT1BET0coUikgODAyLjExIFdpcmVsZXNzIE5ldHdvcmsgRHJpdmVyIgorI2RlZmluZSBNV0w4S19OQU1FCUtCVUlMRF9NT0ROQU1FCisjZGVmaW5lIE1XTDhLX1ZFUlNJT04JIjAuOS4xIgorCitNT0RVTEVfREVTQ1JJUFRJT04oTVdMOEtfREVTQyk7CitNT0RVTEVfVkVSU0lPTihNV0w4S19WRVJTSU9OKTsKK01PRFVMRV9BVVRIT1IoIkxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobXdsOGtfdGFibGUpID0geworCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTJiKSwgLmRyaXZlcl9kYXRhID0gODY4NywgfSwKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmEzMCksIC5kcml2ZXJfZGF0YSA9IDg2ODcsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG13bDhrX3RhYmxlKTsKKworI2RlZmluZSBJRUVFODAyMTFfQUREUl9MRU4JCQlFVEhfQUxFTgorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfR0VOX1BUUgkJCTB4MDAwMDBjMTAKKyNkZWZpbmUgIE1XTDhLX01PREVfU1RBCQkJCTB4MDAwMDAwNWEKKyNkZWZpbmUgIE1XTDhLX01PREVfQVAJCQkJMHgwMDAwMDBhNQorI2RlZmluZSBNV0w4S19ISVVfSU5UX0NPREUJCQkweDAwMDAwYzE0CisjZGVmaW5lICBNV0w4S19GV1NUQV9SRUFEWQkJCTB4ZjBmMWYyZjQKKyNkZWZpbmUgIE1XTDhLX0ZXQVBfUkVBRFkJCQkweGYxZjJmNGE1CisjZGVmaW5lICBNV0w4S19JTlRfQ09ERV9DTURfRklOSVNIRUQJCTB4MDAwMDAwMDUKKyNkZWZpbmUgTVdMOEtfSElVX1NDUkFUQ0gJCQkweDAwMDAwYzQwCisKKy8qIEhvc3QtPmRldmljZSBjb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMJCTB4MDAwMDBjMTgKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfU1RBVFVTCQkweDAwMDAwYzFjCisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX01BU0sJCTB4MDAwMDBjMjAKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfQ0xFQVJfU0VMCTB4MDAwMDBjMjQKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfU1RBVFVTX01BU0sJMHgwMDAwMGMyOAorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9EVU1NWQkJCSgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9SRVNFVAkJCSgxIDw8IDE1KQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUwkJCSgxIDw8IDIpCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX0RPT1JCRUxMCQkJKDEgPDwgMSkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUFBBX1JFQURZCQkoMSA8PCAwKQorCisvKiBEZXZpY2UtPmhvc3QgY29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfRVZFTlRTCQkweDAwMDAwYzJjCisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUwkJMHgwMDAwMGMzMAorI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLCQkweDAwMDAwYzM0CisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTAkweDAwMDAwYzM4CisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLCTB4MDAwMDBjM2MKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfRFVNTVkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfQ0hOTF9TV0lUQ0hFRAkJKDEgPDwgMTEpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZCQkoMSA8PCAxMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUCQkoMSA8PCA3KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURJT19PTgkJCSgxIDw8IDYpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBRElPX09GRgkJKDEgPDwgNSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfTUFDX0VWRU5UCQkoMSA8PCAzKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9PUENfRE9ORQkJCSgxIDw8IDIpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JYX1JFQURZCQkJKDEgPDwgMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfVFhfRE9ORQkJCSgxIDw8IDApCisKKyNkZWZpbmUgTVdMOEtfQTJIX0VWRU5UUwkoTVdMOEtfQTJIX0lOVF9EVU1NWSB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVEIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBREFSX0RFVEVDVCB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9SQURJT19PTiB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9SQURJT19PRkYgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfTUFDX0VWRU5UIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX09QQ19ET05FIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JYX1JFQURZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1RYX0RPTkUpCisKKy8qIFdNRSBzdHJlYW0gY2xhc3NlcyAqLworI2RlZmluZSBXTUVfQUNfQkUJMAkJLyogYmVzdCBlZmZvcnQgKi8KKyNkZWZpbmUgV01FX0FDX0JLCTEJCS8qIGJhY2tncm91bmQgKi8KKyNkZWZpbmUgV01FX0FDX1ZJCTIJCS8qIHZpZGVvICovCisjZGVmaW5lIFdNRV9BQ19WTwkzCQkvKiB2b2ljZSAqLworCisjZGVmaW5lIE1XTDhLX1JYX1FVRVVFUwkJMQorI2RlZmluZSBNV0w4S19UWF9RVUVVRVMJCTQKKworc3RydWN0IG13bDhrX3J4X3F1ZXVlIHsKKwlpbnQgcnhfZGVzY19jb3VudDsKKworCS8qIGh3IHJlY2VpdmVzIGhlcmUgKi8KKwlpbnQgcnhfaGVhZDsKKworCS8qIHJlZmlsbCBkZXNjcyBoZXJlICovCisJaW50IHJ4X3RhaWw7CisKKwlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzY19hcmVhOworCWRtYV9hZGRyX3QgcnhfZGVzY19kbWE7CisJc3RydWN0IHNrX2J1ZmYgKipyeF9za2I7Cit9OworCitzdHJ1Y3QgbXdsOGtfc2tiIHsKKwkvKgorCSAqIFRoZSBETUEgZW5naW5lIHJlcXVpcmVzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBwYXlsb2FkLgorCSAqIElmIHRoZSBza2J1ZmYgaXMgc2hhcmVkL2Nsb25lZCwgaXQgbmVlZHMgdG8gYmUgdW5zaGFyZWQuCisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdGhlIHN0YWNrIGFsd2F5cyBnZXRzIGJhY2sKKwkgKiB0aGUgc2tidWZmIGl0IHNlbnQgZm9yIHRyYW5zbWlzc2lvbi4KKwkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKK307CisKK3N0cnVjdCBtd2w4a190eF9xdWV1ZSB7CisJLyogaHcgdHJhbnNtaXRzIGhlcmUgKi8KKwlpbnQgdHhfaGVhZDsKKworCS8qIHN3IGFwcGVuZHMgaGVyZSAqLworCWludCB0eF90YWlsOworCisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKKwlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzY19hcmVhOworCWRtYV9hZGRyX3QgdHhfZGVzY19kbWE7CisJc3RydWN0IG13bDhrX3NrYiAqdHhfc2tiOworfTsKKworLyogUG9pbnRlcnMgdG8gdGhlIGZpcm13YXJlIGRhdGEgYW5kIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgaXQuICAqLworc3RydWN0IG13bDhrX2Zpcm13YXJlIHsKKwkvKiBNaWNyb2NvZGUgKi8KKwlzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlOworCisJLyogQm9vdCBoZWxwZXIgY29kZSAqLworCXN0cnVjdCBmaXJtd2FyZSAqaGVscGVyOworfTsKKworc3RydWN0IG13bDhrX3ByaXYgeworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXU4IG5hbWVbMTZdOworCS8qIGZpcm13YXJlIGFjY2VzcyBsb2NrICovCisJc3BpbmxvY2tfdCBmd19sb2NrOworCisJLyogZmlybXdhcmUgZmlsZXMgYW5kIG1ldGEgZGF0YSAqLworCXN0cnVjdCBtd2w4a19maXJtd2FyZSBmdzsKKwl1MzIgcGFydF9udW07CisKKwkvKiBsb2NrIGhlbGQgb3ZlciBUWCBhbmQgVFggcmVhcCAqLworCXNwaW5sb2NrX3QgdHhfbG9jazsKKwl1MzIgaW50X21hc2s7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXN0cnVjdCBsaXN0X2hlYWQgdmlmX2xpc3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cnJlbnRfY2hhbm5lbDsKKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgc3RhdHVzIGNvb2tpZSBmcm9tIGZpcm13YXJlICovCisJdTMyICpjb29raWU7CisJZG1hX2FkZHJfdCBjb29raWVfZG1hOworCisJdTE2IG51bV9tY2FkZHJzOworCXUxNiByZWdpb25fY29kZTsKKwl1OCBod19yZXY7CisJX19sZTMyIGZ3X3JldjsKKwl1MzIgd2VwX2VuYWJsZWQ7CisKKwkvKgorCSAqIFJ1bm5pbmcgY291bnQgb2YgVFggcGFja2V0cyBpbiBmbGlnaHQsIHRvIGF2b2lkCisJICogaXRlcmF0aW5nIG92ZXIgdGhlIHRyYW5zbWl0IHJpbmdzIGVhY2ggdGltZS4KKwkgKi8KKwlpbnQgcGVuZGluZ190eF9wa3RzOworCisJc3RydWN0IG13bDhrX3J4X3F1ZXVlIHJ4cVtNV0w4S19SWF9RVUVVRVNdOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSB0eHFbTVdMOEtfVFhfUVVFVUVTXTsKKworCS8qIFBIWSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1sxNF07CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzWzEyXTsKKworCS8qIFJGIHByZWFtYmxlOiBTaG9ydCwgTG9uZyBvciBBdXRvICovCisJdTgJcmFkaW9fcHJlYW1ibGU7CisJdTgJcmFkaW9fc3RhdGU7CisKKwkvKiBXTU0gTU9ERSAxIGZvciBlbmFibGVkOyAwIGZvciBkaXNhYmxlZCAqLworCWJvb2wgd21tX21vZGU7CisKKwkvKiBTZXQgaWYgUEhZIGNvbmZpZyBpcyBpbiBwcm9ncmVzcyAqLworCWJvb2wgaW5jb25maWc7CisKKwkvKiBYWFggbmVlZCB0byBjb252ZXJ0IHRoaXMgdG8gaGFuZGxlIG11bHRpcGxlIGludGVyZmFjZXMgKi8KKwlib29sIGNhcHR1cmVfYmVhY29uOworCXU4IGNhcHR1cmVfYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uX3NrYjsKKworCS8qCisJICogVGhpcyBGSiB3b3JrZXIgaGFzIHRvIGJlIGdsb2JhbCBhcyBpdCBpcyBzY2hlZHVsZWQgZnJvbSB0aGUKKwkgKiBSWCBoYW5kbGVyLiAgQXQgdGhpcyBwb2ludCB3ZSBkb24ndCBrbm93IHdoaWNoIGludGVyZmFjZSBpdAorCSAqIGJlbG9uZ3MgdG8gdW50aWwgdGhlIGxpc3Qgb2YgYnNzaWRzIHdhaXRpbmcgdG8gY29tcGxldGUgam9pbgorCSAqIGlzIGNoZWNrZWQuCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGZpbmFsaXplX2pvaW5fd29ya2VyOworCisJLyogVGFza2xldCB0byByZWNsYWltIFRYIGRlc2NyaXB0b3JzIGFuZCBidWZmZXJzIGFmdGVyIHR4ICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4X3JlY2xhaW1fdGFzazsKKworCS8qIFdvcmsgdGhyZWFkIHRvIHNlcmlhbGl6ZSBjb25maWd1cmF0aW9uIHJlcXVlc3RzICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNvbmZpZ193cTsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqaG9zdGNtZF93YWl0OworCXN0cnVjdCBjb21wbGV0aW9uICp0eF93YWl0OworfTsKKworLyogUGVyIGludGVyZmFjZSBzcGVjaWZpYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBtd2w4a192aWYgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworCS8qIGJhY2twb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKworCS8qIEJTUyBjb25maWcgb2YgQVAgb3IgSUJTUyBmcm9tIG1hYzgwMjExKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGJzc19pbmZvOworCisJLyogQlNTSUQgb2YgQVAgb3IgSUJTUyAqLworCXU4CWJzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07CisJdTgJbWFjX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKworCS8qCisJICogU3Vic2V0IG9mIHN1cHBvcnRlZCBsZWdhY3kgcmF0ZXMuCisJICogSW50ZXJzZWN0aW9uIG9mIEFQIGFuZCBTVEEgc3VwcG9ydGVkIHJhdGVzLgorCSAqLworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSBsZWdhY3lfcmF0ZXNbMTJdOworCisJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBsZWdhY3kgcmF0ZXMgKi8KKwl1OAlsZWdhY3lfbnJhdGVzOworCisJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBNQ1MgcmF0ZXMuIFdvcmsgaW4gcHJvZ3Jlc3MgKi8KKwl1OAltY3NfbnJhdGVzOworCisJIC8qIEluZGV4IGludG8gc3RhdGlvbiBkYXRhYmFzZS5SZXR1cm5lZCBieSB1cGRhdGVfc3RhX2RiIGNhbGwgKi8KKwl1OAlwZWVyX2lkOworCisJLyogTm9uIEFNUERVIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCBieSBkcml2ZXIgKi8KKwl1MTYJc2Vxbm87CisKKwkvKiBOb3RlOlRoZXJlIGlzIG5vIGNoYW5uZWwgaW5mbywKKwkgKiByZWZlciB0byB0aGUgbWFzdGVyIGNoYW5uZWwgaW5mbyBpbiBwcml2CisJICovCit9OworCisjZGVmaW5lIE1XTDhLX1ZJRihfdmlmKSAoc3RydWN0IG13bDhrX3ZpZiAqKSgmKChfdmlmKS0+ZHJ2X3ByaXYpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIG13bDhrX2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQxNywgLmh3X3ZhbHVlID0gMiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzMiwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzcsIC5od192YWx1ZSA9IDYsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0NywgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDksIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2w4a19yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMiwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAxMSwgfSwKKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDEyLCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMTgsIH0sCisJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMjIsIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMjQsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gOTYsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LAorfTsKKworLyogUmFkaW8gc2V0dGluZ3MgKi8KKyNkZWZpbmUgTVdMOEtfUkFESU9fRk9SQ0UJCTB4MgorI2RlZmluZSBNV0w4S19SQURJT19FTkFCTEUJCTB4MQorI2RlZmluZSBNV0w4S19SQURJT19ESVNBQkxFCQkweDAKKyNkZWZpbmUgTVdMOEtfUkFESU9fQVVUT19QUkVBTUJMRQkweDAwMDUKKyNkZWZpbmUgTVdMOEtfUkFESU9fU0hPUlRfUFJFQU1CTEUJMHgwMDAzCisjZGVmaW5lIE1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUJMHgwMDAxCisKKy8qIFdNTSAqLworI2RlZmluZSBNV0w4S19XTU1fRU5BQkxFCQkxCisjZGVmaW5lIE1XTDhLX1dNTV9ESVNBQkxFCQkwCisKKyNkZWZpbmUgTVdMOEtfUkFESU9fREVGQVVMVF9QUkVBTUJMRQlNV0w4S19SQURJT19MT05HX1BSRUFNQkxFCisKKy8qIFNsb3QgdGltZSAqLworCisvKiBTaG9ydCBTbG90OiA5dXMgc2xvdCB0aW1lICovCisjZGVmaW5lIE1XTDhLX1NIT1JUX1NMT1RUSU1FCQkxCisKKy8qIExvbmcgc2xvdDogMjB1cyBzbG90IHRpbWUgKi8KKyNkZWZpbmUgTVdMOEtfTE9OR19TTE9UVElNRQkJMAorCisvKiBTZXQgb3IgZ2V0IGluZm8gZnJvbSBGaXJtd2FyZSAqLworI2RlZmluZSBNV0w4S19DTURfU0VUCQkJMHgwMDAxCisjZGVmaW5lIE1XTDhLX0NNRF9HRVQJCQkweDAwMDAKKworLyogRmlybXdhcmUgY29tbWFuZCBjb2RlcyAqLworI2RlZmluZSBNV0w4S19DTURfQ09ERV9ETkxECQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfQ01EX0dFVF9IV19TUEVDCQkweDAwMDMKKyNkZWZpbmUgTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSCTB4MDAxMAorI2RlZmluZSBNV0w4S19DTURfR0VUX1NUQVQJCTB4MDAxNAorI2RlZmluZSBNV0w4S19DTURfUkFESU9fQ09OVFJPTAkJMHgwMDFDCisjZGVmaW5lIE1XTDhLX0NNRF9SRl9UWF9QT1dFUgkJMHgwMDFFCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUFJFX1NDQU4JCTB4MDEwNworI2RlZmluZSBNV0w4S19DTURfU0VUX1BPU1RfU0NBTgkJMHgwMTA4CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkZfQ0hBTk5FTAkweDAxMEEKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9TTE9UCQkweDAxMTQKKyNkZWZpbmUgTVdMOEtfQ01EX01JTU9fQ09ORklHCQkweDAxMjUKKyNkZWZpbmUgTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSCTB4MDE1MAorI2RlZmluZSBNV0w4S19DTURfU0VUX1dNTV9NT0RFCQkweDAxMjMKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUwkweDAxMTUKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOCTB4MDExMQorI2RlZmluZSBNV0w4S19DTURfVVBEQVRFX1NUQURCCQkweDExMjMKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERQkweDAyMDMKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9MSU5LQURBUFRfTU9ERQkweDAxMjkKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9BSUQJCTB4MDEwZAorI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEUJCTB4MDExMAorI2RlZmluZSBNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUJMHgwMTI2CisjZGVmaW5lIE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xECQkweDAxMTMKKyNkZWZpbmUgTVdMOEtfQ01EX0VOQ1JZUFRJT04JCTB4MTEyMgorCitzdGF0aWMgY29uc3QgY2hhciAqbXdsOGtfY21kX25hbWUodTE2IGNtZCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKyNkZWZpbmUgTVdMOEtfQ01ETkFNRSh4KQljYXNlIE1XTDhLX0NNRF8jI3g6IGRvIHtcCisJCQkJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIiVzIiwgI3gpO1wKKwkJCQkJcmV0dXJuIGJ1ZjtcCisJCQkJCX0gd2hpbGUgKDApCisJc3dpdGNoIChjbWQgJiAofjB4ODAwMCkpIHsKKwkJTVdMOEtfQ01ETkFNRShDT0RFX0ROTEQpOworCQlNV0w4S19DTUROQU1FKEdFVF9IV19TUEVDKTsKKwkJTVdMOEtfQ01ETkFNRShNQUNfTVVMVElDQVNUX0FEUik7CisJCU1XTDhLX0NNRE5BTUUoR0VUX1NUQVQpOworCQlNV0w4S19DTUROQU1FKFJBRElPX0NPTlRST0wpOworCQlNV0w4S19DTUROQU1FKFJGX1RYX1BPV0VSKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUFJFX1NDQU4pOworCQlNV0w4S19DTUROQU1FKFNFVF9QT1NUX1NDQU4pOworCQlNV0w4S19DTUROQU1FKFNFVF9SRl9DSEFOTkVMKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfU0xPVCk7CisJCU1XTDhLX0NNRE5BTUUoTUlNT19DT05GSUcpOworCQlNV0w4S19DTUROQU1FKEVOQUJMRV9TTklGRkVSKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfV01NX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9FRENBX1BBUkFNUyk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0ZJTkFMSVpFX0pPSU4pOworCQlNV0w4S19DTUROQU1FKFVQREFURV9TVEFEQik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEVBREFQVF9NT0RFKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfTElOS0FEQVBUX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9BSUQpOworCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFKTsKKwkJTVdMOEtfQ01ETkFNRShVU0VfRklYRURfUkFURSk7CisJCU1XTDhLX0NNRE5BTUUoUlRTX1RIUkVTSE9MRCk7CisJCU1XTDhLX0NNRE5BTUUoRU5DUllQVElPTik7CisJZGVmYXVsdDoKKwkJc25wcmludGYoYnVmLCBidWZzaXplLCAiMHgleCIsIGNtZCk7CisJfQorI3VuZGVmIE1XTDhLX0NNRE5BTUUKKworCXJldHVybiBidWY7Cit9CisKKy8qIEhhcmR3YXJlIGFuZCBmaXJtd2FyZSByZXNldCAqLworc3RhdGljIHZvaWQgbXdsOGtfaHdfcmVzZXQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUkVTRVQsCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX1JFU0VULAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwltc2xlZXAoMjApOworfQorCisvKiBSZWxlYXNlIGZ3IGltYWdlICovCitzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Z3KHN0cnVjdCBmaXJtd2FyZSAqKmZ3KQoreworCWlmICgqZncgPT0gTlVMTCkKKwkJcmV0dXJuOworCXJlbGVhc2VfZmlybXdhcmUoKmZ3KTsKKwkqZncgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LnVjb2RlKTsKKwltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy5oZWxwZXIpOworfQorCisvKiBSZXF1ZXN0IGZ3IGltYWdlICovCitzdGF0aWMgaW50IG13bDhrX3JlcXVlc3RfZncoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJY29uc3QgY2hhciAqZm5hbWUsIHN0cnVjdCBmaXJtd2FyZSAqKmZ3KQoreworCS8qIHJlbGVhc2UgY3VycmVudCBpbWFnZSAqLworCWlmICgqZncgIT0gTlVMTCkKKwkJbXdsOGtfcmVsZWFzZV9mdyhmdyk7CisKKwlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZSgoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqKWZ3LAorCQkJCQkJZm5hbWUsICZwcml2LT5wZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW50IG13bDhrX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHUzMiBwYXJ0X251bSkKK3sKKwl1OCBmaWxlbmFtZVs2NF07CisJaW50IHJjOworCisJcHJpdi0+cGFydF9udW0gPSBwYXJ0X251bTsKKworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLAorCQkgIm13bDhrL2hlbHBlcl8ldS5mdyIsIHByaXYtPnBhcnRfbnVtKTsKKworCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBmaWxlbmFtZSwgJnByaXYtPmZ3LmhlbHBlcik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzIEVycm9yIHJlcXVlc3RpbmcgaGVscGVyIGZpcm13YXJlIGZpbGUgJXNcbiIsCisJCQlwY2lfbmFtZShwcml2LT5wZGV2KSwgZmlsZW5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAibXdsOGsvZm1pbWFnZV8ldS5mdyIsIHByaXYtPnBhcnRfbnVtKTsKKworCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBmaWxlbmFtZSwgJnByaXYtPmZ3LnVjb2RlKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyBFcnJvciByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCisJCQkJCXBjaV9uYW1lKHByaXYtPnBkZXYpLCBmaWxlbmFtZSk7CisJCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LmhlbHBlcik7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG13bDhrX2NtZF9wa3QgeworCV9fbGUxNgljb2RlOworCV9fbGUxNglsZW5ndGg7CisJX19sZTE2CXNlcV9udW07CisJX19sZTE2CXJlc3VsdDsKKwljaGFyCXBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogRmlybXdhcmUgbG9hZGluZy4KKyAqLworc3RhdGljIGludAorbXdsOGtfc2VuZF9md19sb2FkX2NtZChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IHJjOworCWludCBsb29wczsKKworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgZGF0YSwgbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYV9hZGRyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpb3dyaXRlMzIoZG1hX2FkZHIsIHJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJaW93cml0ZTMyKDAsIHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RPT1JCRUxMLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisKKwlyYyA9IC1FVElNRURPVVQ7CisJbG9vcHMgPSAxMDAwOworCWRvIHsKKwkJdTMyIGludF9jb2RlOworCisJCWludF9jb2RlID0gaW9yZWFkMzIocmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7CisJCWlmIChpbnRfY29kZSA9PSBNV0w4S19JTlRfQ09ERV9DTURfRklOSVNIRUQpIHsKKwkJCWlvd3JpdGUzMigwLCByZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcHMpOworCisJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwgbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCS8qCisJICogQ2xlYXIgJ2NvbW1hbmQgZG9uZScgaW50ZXJydXB0IGJpdC4KKwkgKi8KKwlsb29wcyA9IDEwMDA7CisJZG8geworCQl1MzIgc3RhdHVzOworCisJCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKworCQkJCU1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7CisJCQlpb3dyaXRlMzIofk1XTDhLX0EySF9JTlRfT1BDX0RPTkUsCisJCQkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJCQlpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcHMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2xvYWRfZndfaW1hZ2Uoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgKmNtZDsKKwlpbnQgZG9uZTsKKwlpbnQgcmMgPSAwOworCisJY21kID0ga21hbGxvYyhzaXplb2YoKmNtZCkgKyAyNTYsIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfQ09ERV9ETkxEKTsKKwljbWQtPnNlcV9udW0gPSAwOworCWNtZC0+cmVzdWx0ID0gMDsKKworCWRvbmUgPSAwOworCXdoaWxlIChsZW5ndGgpIHsKKwkJaW50IGJsb2NrX3NpemUgPSBsZW5ndGggPiAyNTYgPyAyNTYgOiBsZW5ndGg7CisKKwkJbWVtY3B5KGNtZC0+cGF5bG9hZCwgZGF0YSArIGRvbmUsIGJsb2NrX3NpemUpOworCQljbWQtPmxlbmd0aCA9IGNwdV90b19sZTE2KGJsb2NrX3NpemUpOworCisJCXJjID0gbXdsOGtfc2VuZF9md19sb2FkX2NtZChwcml2LCBjbWQsCisJCQkJCQlzaXplb2YoKmNtZCkgKyBibG9ja19zaXplKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisKKwkJZG9uZSArPSBibG9ja19zaXplOworCQlsZW5ndGggLT0gYmxvY2tfc2l6ZTsKKwl9CisKKwlpZiAoIXJjKSB7CisJCWNtZC0+bGVuZ3RoID0gMDsKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwl9CisKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2ZlZWRfZndfaW1hZ2Uoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBtYXlfY29udGludWUsIHJjID0gMDsKKwl1MzIgZG9uZSwgcHJldl9ibG9ja19zaXplOworCisJYnVmZmVyID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG9uZSA9IDA7CisJcHJldl9ibG9ja19zaXplID0gMDsKKwltYXlfY29udGludWUgPSAxMDAwOworCXdoaWxlIChtYXlfY29udGludWUgPiAwKSB7CisJCXUzMiBibG9ja19zaXplOworCisJCWJsb2NrX3NpemUgPSBpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX1NDUkFUQ0gpOworCQlpZiAoYmxvY2tfc2l6ZSAmIDEpIHsKKwkJCWJsb2NrX3NpemUgJj0gfjE7CisJCQltYXlfY29udGludWUtLTsKKwkJfSBlbHNlIHsKKwkJCWRvbmUgKz0gcHJldl9ibG9ja19zaXplOworCQkJbGVuZ3RoIC09IHByZXZfYmxvY2tfc2l6ZTsKKwkJfQorCisJCWlmIChibG9ja19zaXplID4gMTAyNCB8fCBibG9ja19zaXplID4gbGVuZ3RoKSB7CisJCQlyYyA9IC1FT1ZFUkZMT1c7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsZW5ndGggPT0gMCkgeworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYmxvY2tfc2l6ZSA9PSAwKSB7CisJCQlyYyA9IC1FUFJPVE87CisJCQltYXlfY29udGludWUtLTsKKwkJCXVkZWxheSgxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJldl9ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKKwkJbWVtY3B5KGJ1ZmZlciwgZGF0YSArIGRvbmUsIGJsb2NrX3NpemUpOworCisJCXJjID0gbXdsOGtfc2VuZF9md19sb2FkX2NtZChwcml2LCBidWZmZXIsIGJsb2NrX3NpemUpOworCQlpZiAocmMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJjICYmIGxlbmd0aCAhPSAwKQorCQlyYyA9IC1FUkVNT1RFSU87CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2xvYWRfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW50IGxvb3BzLCByYzsKKworCWNvbnN0IHU4ICp1Y29kZSA9IHByaXYtPmZ3LnVjb2RlLT5kYXRhOworCXNpemVfdCB1Y29kZV9sZW4gPSBwcml2LT5mdy51Y29kZS0+c2l6ZTsKKwljb25zdCB1OCAqaGVscGVyID0gcHJpdi0+ZncuaGVscGVyLT5kYXRhOworCXNpemVfdCBoZWxwZXJfbGVuID0gcHJpdi0+ZncuaGVscGVyLT5zaXplOworCisJaWYgKCFtZW1jbXAodWNvZGUsICJceDAxXHgwMFx4MDBceDAwIiwgNCkpIHsKKwkJcmMgPSBtd2w4a19sb2FkX2Z3X2ltYWdlKHByaXYsIGhlbHBlciwgaGVscGVyX2xlbik7CisJCWlmIChyYykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgIgorCQkJCSJoZWxwZXIgaW1hZ2VcbiIsIHBjaV9uYW1lKHByaXYtPnBkZXYpKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQltc2xlZXAoMSk7CisKKwkJcmMgPSBtd2w4a19mZWVkX2Z3X2ltYWdlKHByaXYsIHVjb2RlLCB1Y29kZV9sZW4pOworCX0gZWxzZSB7CisJCXJjID0gbXdsOGtfbG9hZF9md19pbWFnZShwcml2LCB1Y29kZSwgdWNvZGVfbGVuKTsKKwl9CisKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgZGF0YVxuIiwKKwkJCXBjaV9uYW1lKHByaXYtPnBkZXYpKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlvd3JpdGUzMihNV0w4S19NT0RFX1NUQSwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwltc2xlZXAoMSk7CisKKwlsb29wcyA9IDIwMDAwMDsKKwlkbyB7CisJCWlmIChpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKQorCQkJCQkJPT0gTVdMOEtfRldTVEFfUkVBRFkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcHMpOworCisJcmV0dXJuIGxvb3BzID8gMCA6IC1FVElNRURPVVQ7Cit9CisKKworLyoKKyAqIERlZmluZXMgc2hhcmVkIGJldHdlZW4gdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uCisgKi8KKy8qIEhUIGNvbnRyb2wgZmllbGRzIGZvciBmaXJtd2FyZSAqLworc3RydWN0IGV3Y19odF9pbmZvIHsKKwlfX2xlMTYJY29udHJvbDE7CisJX19sZTE2CWNvbnRyb2wyOworCV9fbGUxNgljb250cm9sMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEZpcm13YXJlIFN0YXRpb24gZGF0YWJhc2Ugb3BlcmF0aW9ucyAqLworI2RlZmluZSBNV0w4S19TVEFfREJfQUREX0VOVFJZCQkwCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkJMQorI2RlZmluZSBNV0w4S19TVEFfREJfREVMX0VOVFJZCQkyCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9GTFVTSAkJMworCisvKiBQZWVyIEVudHJ5IGZsYWdzIC0gdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdGhlIHBlZXIgbm9kZSAqLworI2RlZmluZSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQJMgorI2RlZmluZSBNV0w4S19QRUVSX1RZUEVfQURIT0NfU1RBVElPTgk0CisKKyNkZWZpbmUgTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFUwkxMgorI2RlZmluZSBNV0w4S19NQ1NfQklUTUFQX1NJWkUJCTE2CisjZGVmaW5lIHBhZF9zaXplCQkJMTYKKworc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvIHsKKwkvKiBQZWVyIHR5cGUgLSBBUCB2cy4gU1RBLiAgKi8KKwlfX3U4CXBlZXJfdHlwZTsKKworCS8qIEJhc2ljIDgwMi4xMSBjYXBhYmlsaXRpZXMgZnJvbSBhc3NvYyByZXNwLiAgKi8KKwlfX2xlMTYJYmFzaWNfY2FwczsKKworCS8qIFNldCBpZiBwZWVyIHN1cHBvcnRzIDgwMi4xMW4gaGlnaCB0aHJvdWdocHV0IChIVCkuICAqLworCV9fdTgJaHRfc3VwcG9ydDsKKworCS8qIFZhbGlkIGlmIEhUIGlzIHN1cHBvcnRlZC4gICovCisJX19sZTE2CWh0X2NhcHM7CisJX191OAlleHRlbmRlZF9odF9jYXBzOworCXN0cnVjdCBld2NfaHRfaW5mbwlld2NfaW5mbzsKKworCS8qIExlZ2FjeSByYXRlIHRhYmxlLiBJbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCBwZWVyIHJhdGVzLiAgKi8KKwlfX3U4CWxlZ2FjeV9yYXRlc1tNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTXTsKKworCS8qIEhUIHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJaHRfcmF0ZXNbTVdMOEtfTUNTX0JJVE1BUF9TSVpFXTsKKwlfX3U4CXBhZFtwYWRfc2l6ZV07CisKKwkvKiBJZiBzZXQsIGludGVyb3BlcmFiaWxpdHkgbW9kZSwgbm8gcHJvcHJpZXRhcnkgZXh0ZW5zaW9ucy4gICovCisJX191OAlpbnRlcm9wOworCV9fdTgJcGFkMjsKKwlfX3U4CXN0YXRpb25faWQ7CisJX19sZTE2CWFtc2R1X2VuYWJsZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBJbmxpbmUgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgUW9TIGZpZWxkIGluIGRhdGEgZGVzY3JpcHRvci4gICovCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X3RpZCh1MTYgcW9zLCB1OCB0aWQpCit7CisJdTE2IHZhbF9tYXNrID0gMHgwMDBmOworCXUxNiBxb3NfbWFzayA9IH52YWxfbWFzazsKKworCS8qIFRJRCBiaXRzIDAtMyAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKHRpZCAmIHZhbF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9lb3NwKHUxNiBxb3MpCit7CisJdTE2IHZhbF9tYXNrID0gMSA8PCA0OworCisJLyogRW5kIG9mIFNlcnZpY2UgUGVyaW9kIEJpdCA0ICovCisJcmV0dXJuIHFvcyB8IHZhbF9tYXNrOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Fjayh1MTYgcW9zLCB1OCBhY2tfcG9saWN5KQoreworCXUxNiB2YWxfbWFzayA9IDB4MzsKKwl1OAlzaGlmdCA9IDU7CisJdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7CisKKwkvKiBBY2sgUG9saWN5IEJpdCA1LTYgKi8KKwlyZXR1cm4gKHFvcyAmIHFvc19tYXNrKSB8ICgoYWNrX3BvbGljeSAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUodTE2IHFvcykKK3sKKwl1MTYgdmFsX21hc2sgPSAxIDw8IDc7CisKKwkvKiBBTVNEVSBwcmVzZW50IEJpdCA3ICovCisJcmV0dXJuIHFvcyB8IHZhbF9tYXNrOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X3FsZW4odTE2IHFvcywgdTggbGVuKQoreworCXUxNiB2YWxfbWFzayA9IDB4ZmY7CisJdTgJc2hpZnQgPSA4OworCXUxNiBxb3NfbWFzayA9IH4odmFsX21hc2sgPDwgc2hpZnQpOworCisJLyogUXVldWUgTGVuZ3RoIEJpdHMgOC0xNSAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChsZW4gJiB2YWxfbWFzaykgPDwgc2hpZnQpOworfQorCisvKiBETUEgaGVhZGVyIHVzZWQgYnkgZmlybXdhcmUgYW5kIGhhcmR3YXJlLiAgKi8KK3N0cnVjdCBtd2w4a19kbWFfZGF0YSB7CisJX19sZTE2IGZ3bGVuOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIHdoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogUm91dGluZXMgdG8gYWRkL3JlbW92ZSBETUEgaGVhZGVyIGZyb20gc2tiLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKikoc2tiLT5kYXRhKTsKKwl2b2lkICpkc3QsICpzcmMgPSAmdHItPndoOworCV9fbGUxNiBmYyA9IHRyLT53aC5mcmFtZV9jb250cm9sOworCWludCBoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKKwl1MTYgc3BhY2UgPSBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIGhkcmxlbjsKKworCWRzdCA9ICh2b2lkICopdHIgKyBzcGFjZTsKKwlpZiAoZHN0ICE9IHNyYykgeworCQltZW1tb3ZlKGRzdCwgc3JjLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHNwYWNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXdsOGtfYWRkX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CisJdTMyIGhkcmxlbiwgcGt0bGVuOworCXN0cnVjdCBtd2w4a19kbWFfZGF0YSAqdHI7CisKKwl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKHdoLT5mcmFtZV9jb250cm9sKTsKKwlwa3RsZW4gPSBza2ItPmxlbjsKKworCS8qCisJICogQ29weSB1cC9kb3duIHRoZSA4MDIuMTEgaGVhZGVyOyB0aGUgZmlybXdhcmUgcmVxdWlyZXMKKwkgKiB3ZSBwcmVzZW50IGEgMi1ieXRlIHBheWxvYWQgbGVuZ3RoIGZvbGxvd2VkIGJ5IGEKKwkgKiA0LWFkZHJlc3MgaGVhZGVyICh3L28gUW9TKSwgZm9sbG93ZWQgKG9wdGlvbmFsbHkpIGJ5CisJICogYW55IFdFUC9FeHRJViBoZWFkZXIgKGJ1dCBvbmx5IGZpbGxlZCBpbiBmb3IgQ0NNUCkuCisJICovCisJaWYgKGhkcmxlbiAhPSBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSkKKwkJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIGhkcmxlbik7CisKKwl0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKilza2ItPmRhdGE7CisJaWYgKHdoICE9ICZ0ci0+d2gpCisJCW1lbW1vdmUoJnRyLT53aCwgd2gsIGhkcmxlbik7CisKKwkvKiBDbGVhciBhZGRyNCAqLworCW1lbXNldCh0ci0+d2guYWRkcjQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwkvKgorCSAqIEZpcm13YXJlIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmdWxseSBmb3JtZWQgIjgwMi4xMQorCSAqIHBheWxvYWQiLiAgVGhhdCBpcywgZXZlcnl0aGluZyBleGNlcHQgZm9yIHRoZSA4MDIuMTEgaGVhZGVyLgorCSAqIFRoaXMgaW5jbHVkZXMgYWxsIGNyeXB0byBtYXRlcmlhbCBpbmNsdWRpbmcgdGhlIE1JQy4KKwkgKi8KKwl0ci0+ZndsZW4gPSBjcHVfdG9fbGUxNihwa3RsZW4gLSBoZHJsZW4pOworCisJcmV0dXJuIHNrYjsKK30KKworCisvKgorICogUGFja2V0IHJlY2VwdGlvbi4KKyAqLworI2RlZmluZSBNV0w4S19SWF9DVFJMX0tFWV9JTkRFWF9NQVNLCTB4MzAKKyNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUCTB4MDIKKyNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9BTVBEVQkJMHgwMQorCitzdHJ1Y3QgbXdsOGtfcnhfZGVzYyB7CisJX19sZTE2IHBrdF9sZW47CisJX191OCBsaW5rX3F1YWxpdHk7CisJX191OCBub2lzZV9sZXZlbDsKKwlfX2xlMzIgcGt0X3BoeXNfYWRkcjsKKwlfX2xlMzIgbmV4dF9yeF9kZXNjX3BoeXNfYWRkcjsKKwlfX2xlMTYgcW9zX2NvbnRyb2w7CisJX19sZTE2IHJhdGVfaW5mbzsKKwlfX2xlMzIgcGFkMFs0XTsKKwlfX3U4IHJzc2k7CisJX191OCBjaGFubmVsOworCV9fbGUxNiBwYWQxOworCV9fdTggcnhfY3RybDsKKwlfX3U4IHJ4X3N0YXR1czsKKwlfX3U4IHBhZDJbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1JYX0RFU0NTCQkyNTYKKyNkZWZpbmUgTVdMOEtfUlhfTUFYU1oJCTM4MDAKKworc3RhdGljIGludCBtd2w4a19yeHFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCXJ4cS0+cnhfZGVzY19jb3VudCA9IDA7CisJcnhxLT5yeF9oZWFkID0gMDsKKwlyeHEtPnJ4X3RhaWwgPSAwOworCisJc2l6ZSA9IE1XTDhLX1JYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a19yeF9kZXNjKTsKKworCXJ4cS0+cnhfZGVzY19hcmVhID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwgJnJ4cS0+cnhfZGVzY19kbWEpOworCWlmIChyeHEtPnJ4X2Rlc2NfYXJlYSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBSWCBkZXNjcmlwdG9yc1xuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHJ4cS0+cnhfZGVzY19hcmVhLCAwLCBzaXplKTsKKworCXJ4cS0+cnhfc2tiID0ga21hbGxvYyhNV0w4S19SWF9ERVNDUyAqCisJCQkJc2l6ZW9mKCpyeHEtPnJ4X3NrYiksIEdGUF9LRVJORUwpOworCWlmIChyeHEtPnJ4X3NrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBSWCBza2J1ZmYgbGlzdFxuIiwKKwkJCXByaXYtPm5hbWUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsCisJCQkJICAgIHJ4cS0+cnhfZGVzY19hcmVhLCByeHEtPnJ4X2Rlc2NfZG1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChyeHEtPnJ4X3NrYiwgMCwgTVdMOEtfUlhfREVTQ1MgKiBzaXplb2YoKnJ4cS0+cnhfc2tiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfUlhfREVTQ1M7IGkrKykgeworCQlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzYzsKKwkJaW50IG5leHRpOworCisJCXJ4X2Rlc2MgPSByeHEtPnJ4X2Rlc2NfYXJlYSArIGk7CisJCW5leHRpID0gKGkgKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCisJCXJ4X2Rlc2MtPm5leHRfcnhfZGVzY19waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocnhxLT5yeF9kZXNjX2RtYQorCQkJCQkJKyBuZXh0aSAqIHNpemVvZigqcnhfZGVzYykpOworCQlyeF9kZXNjLT5yeF9jdHJsID0KKwkJCWNwdV90b19sZTMyKE1XTDhLX1JYX0NUUkxfT1dORURfQllfSE9TVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnhxX3JlZmlsbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgbGltaXQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCByZWZpbGxlZDsKKworCXJlZmlsbGVkID0gMDsKKwl3aGlsZSAocnhxLT5yeF9kZXNjX2NvdW50IDwgTVdMOEtfUlhfREVTQ1MgJiYgbGltaXQtLSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlpbnQgcng7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihNV0w4S19SWF9NQVhTWik7CisJCWlmIChza2IgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXJ4cS0+cnhfZGVzY19jb3VudCsrOworCisJCXJ4ID0gcnhxLT5yeF90YWlsOworCQlyeHEtPnJ4X3RhaWwgPSAocnggKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5wa3RfcGh5c19hZGRyID0KKwkJCWNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkJTVdMOEtfUlhfTUFYU1osIERNQV9GUk9NX0RFVklDRSkpOworCisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5wa3RfbGVuID0gY3B1X3RvX2xlMTYoTVdMOEtfUlhfTUFYU1opOworCQlyeHEtPnJ4X3NrYltyeF0gPSBza2I7CisJCXdtYigpOworCQlyeHEtPnJ4X2Rlc2NfYXJlYVtyeF0ucnhfY3RybCA9IDA7CisKKwkJcmVmaWxsZWQrKzsKKwl9CisKKwlyZXR1cm4gcmVmaWxsZWQ7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUgY2FyZCdzIHJlY2VwdGlvbiBpcyBjb21wbGV0ZWx5IGhhbHRlZCAqLworc3RhdGljIHZvaWQgbXdsOGtfcnhxX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CisJCWlmIChyeHEtPnJ4X3NrYltpXSAhPSBOVUxMKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwkJCWFkZHIgPSBsZTMyX3RvX2NwdShyeHEtPnJ4X2Rlc2NfYXJlYVtpXS5wa3RfcGh5c19hZGRyKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwgTVdMOEtfUlhfTUFYU1osCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJa2ZyZWVfc2tiKHJ4cS0+cnhfc2tiW2ldKTsKKwkJCXJ4cS0+cnhfc2tiW2ldID0gTlVMTDsKKwkJfQorCX0KKworCWtmcmVlKHJ4cS0+cnhfc2tiKTsKKwlyeHEtPnJ4X3NrYiA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsCisJCQkgICAgTVdMOEtfUlhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3J4X2Rlc2MpLAorCQkJICAgIHJ4cS0+cnhfZGVzY19hcmVhLCByeHEtPnJ4X2Rlc2NfZG1hKTsKKwlyeHEtPnJ4X2Rlc2NfYXJlYSA9IE5VTEw7Cit9CisKKworLyoKKyAqIFNjYW4gYSBsaXN0IG9mIEJTU0lEcyB0byBwcm9jZXNzIGZvciBmaW5hbGl6ZSBqb2luLgorICogQWxsb3dzIGZvciBleHRlbnNpb24gdG8gcHJvY2VzcyBtdWx0aXBsZSBCU1NJRHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cittd2w4a19jYXB0dXJlX2Jzc2lkKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2gpCit7CisJcmV0dXJuIHByaXYtPmNhcHR1cmVfYmVhY29uICYmCisJCWllZWU4MDIxMV9pc19iZWFjb24od2gtPmZyYW1lX2NvbnRyb2wpICYmCisJCSFjb21wYXJlX2V0aGVyX2FkZHIod2gtPmFkZHIzLCBwcml2LT5jYXB0dXJlX2Jzc2lkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG13bDhrX3NhdmVfYmVhY29uKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKKwltZW1zZXQocHJpdi0+Y2FwdHVyZV9ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCS8qCisJICogVXNlIEdGUF9BVE9NSUMgYXMgcnhxX3Byb2Nlc3MgaXMgY2FsbGVkIGZyb20KKwkgKiB0aGUgcHJpbWFyeSBpbnRlcnJ1cHQgaGFuZGxlciwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbAorCSAqIG11c3Qgbm90IHNsZWVwLgorCSAqLworCXByaXYtPmJlYWNvbl9za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCWlmIChwcml2LT5iZWFjb25fc2tiICE9IE5VTEwpCisJCXF1ZXVlX3dvcmsocHJpdi0+Y29uZmlnX3dxLAorCQkJCSZwcml2LT5maW5hbGl6ZV9qb2luX3dvcmtlcik7Cit9CisKK3N0YXRpYyBpbnQgcnhxX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGxpbWl0KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgcHJvY2Vzc2VkOworCisJcHJvY2Vzc2VkID0gMDsKKwl3aGlsZSAocnhxLT5yeF9kZXNjX2NvdW50ICYmIGxpbWl0LS0pIHsKKwkJc3RydWN0IG13bDhrX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CisKKwkJcnhfZGVzYyA9IHJ4cS0+cnhfZGVzY19hcmVhICsgcnhxLT5yeF9oZWFkOworCQlpZiAoIShyeF9kZXNjLT5yeF9jdHJsICYgTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKSkKKwkJCWJyZWFrOworCQlybWIoKTsKKworCQlza2IgPSByeHEtPnJ4X3NrYltyeHEtPnJ4X2hlYWRdOworCQlyeHEtPnJ4X3NrYltyeHEtPnJ4X2hlYWRdID0gTlVMTDsKKworCQlyeHEtPnJ4X2hlYWQgPSAocnhxLT5yeF9oZWFkICsgMSkgJSBNV0w4S19SWF9ERVNDUzsKKwkJcnhxLT5yeF9kZXNjX2NvdW50LS07CisKKwkJYWRkciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPnBrdF9waHlzX2FkZHIpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsCisJCQkJCU1XTDhLX1JYX01BWFNaLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdShyeF9kZXNjLT5wa3RfbGVuKSk7CisJCWlmIChtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJCS8qCisJCSAqIENoZWNrIGZvciBwZW5kaW5nIGpvaW4gb3BlcmF0aW9uLiBzYXZlIGEgY29weSBvZgorCQkgKiB0aGUgYmVhY29uIGFuZCBzY2hlZHVsZSBhIHRhc2tsZXQgdG8gc2VuZCBmaW5hbGl6ZQorCQkgKiBqb2luIGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlLgorCQkgKi8KKwkJaWYgKG13bDhrX2NhcHR1cmVfYnNzaWQocHJpdiwgd2gpKQorCQkJbXdsOGtfc2F2ZV9iZWFjb24ocHJpdiwgc2tiKTsKKworCQltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOworCQlzdGF0dXMubWFjdGltZSA9IDA7CisJCXN0YXR1cy5zaWduYWwgPSAtcnhfZGVzYy0+cnNzaTsKKwkJc3RhdHVzLm5vaXNlID0gLXJ4X2Rlc2MtPm5vaXNlX2xldmVsOworCQlzdGF0dXMucXVhbCA9IHJ4X2Rlc2MtPmxpbmtfcXVhbGl0eTsKKwkJc3RhdHVzLmFudGVubmEgPSAxOworCQlzdGF0dXMucmF0ZV9pZHggPSAxOworCQlzdGF0dXMuZmxhZyA9IDA7CisJCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJc3RhdHVzLmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3kocnhfZGVzYy0+Y2hhbm5lbCk7CisJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGh3LCBza2IsICZzdGF0dXMpOworCisJCXByb2Nlc3NlZCsrOworCX0KKworCXJldHVybiBwcm9jZXNzZWQ7Cit9CisKKworLyoKKyAqIFBhY2tldCB0cmFuc21pc3Npb24uCisgKi8KKworLyogVHJhbnNtaXQgcXVldWUgYXNzaWdubWVudC4gICovCitlbnVtIHsKKwlNV0w4S19XTUVfQUNfQksJPSAwLAkJLyogYmFja2dyb3VuZCBhY2Nlc3MgKi8KKwlNV0w4S19XTUVfQUNfQkUJPSAxLAkJLyogYmVzdCBlZmZvcnQgYWNjZXNzICovCisJTVdMOEtfV01FX0FDX1ZJCT0gMiwJCS8qIHZpZGVvIGFjY2VzcyAqLworCU1XTDhLX1dNRV9BQ19WTwk9IDMsCQkvKiB2b2ljZSBhY2Nlc3MgKi8KK307CisKKy8qIFRyYW5zbWl0IHBhY2tldCBBQ0sgcG9saWN5ICovCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTAkJMAorI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9OT05FCQkxCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PX0VYUExJQ0lUCTIKKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0sJCTMKKworI2RlZmluZSBHRVRfVFhRKF9hYykgKFwKKwkJKChfYWMpID09IFdNRV9BQ19WTykgPyBNV0w4S19XTUVfQUNfVk8gOiBcCisJCSgoX2FjKSA9PSBXTUVfQUNfVkkpID8gTVdMOEtfV01FX0FDX1ZJIDogXAorCQkoKF9hYykgPT0gV01FX0FDX0JLKSA/IE1XTDhLX1dNRV9BQ19CSyA6IFwKKwkJTVdMOEtfV01FX0FDX0JFKQorCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfSURMRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19VU0VECQkJMHgwMDAwMDAwMQorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LX1JFVFJZCQkweDAwMDAwMDAyCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWQkJMHgwMDAwMDAwNAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX01VTFRJQ0FTVF9UWAkJMHgwMDAwMDAwOAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0JST0FEQ0FTVF9UWAkJMHgwMDAwMDAxMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9MSU5LX0VSUk9SCTB4MDAwMDAwMjAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfRVhDRUVEX0xJTUlUCTB4MDAwMDAwNDAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfQUdJTkcJCTB4MDAwMDAwODAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19IT1NUX0NNRAkJMHg0MDAwMDAwMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVECQkweDgwMDAwMDAwCisjZGVmaW5lICBNV0w4S19UWERfU09GVFNUQUxFCQkJCTB4ODAKKyNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEVfTUdNVF9SRVRSWQkJCTB4MDEKKworc3RydWN0IG13bDhrX3R4X2Rlc2MgeworCV9fbGUzMiBzdGF0dXM7CisJX191OCBkYXRhX3JhdGU7CisJX191OCB0eF9wcmlvcml0eTsKKwlfX2xlMTYgcW9zX2NvbnRyb2w7CisJX19sZTMyIHBrdF9waHlzX2FkZHI7CisJX19sZTE2IHBrdF9sZW47CisJX191OCBkZXN0X01BQ19hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX19sZTMyIG5leHRfdHhfZGVzY19waHlzX2FkZHI7CisJX19sZTMyIHJlc2VydmVkOworCV9fbGUxNiByYXRlX2luZm87CisJX191OCBwZWVyX2lkOworCV9fdTggdHhfZnJhZ19jbnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1RYX0RFU0NTCQkxMjgKKworc3RhdGljIGludCBtd2w4a190eHFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCW1lbXNldCgmdHhxLT50eF9zdGF0cywgMCwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMpKTsKKwl0eHEtPnR4X3N0YXRzLmxpbWl0ID0gTVdMOEtfVFhfREVTQ1M7CisJdHhxLT50eF9oZWFkID0gMDsKKwl0eHEtPnR4X3RhaWwgPSAwOworCisJc2l6ZSA9IE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a190eF9kZXNjKTsKKworCXR4cS0+dHhfZGVzY19hcmVhID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwgJnR4cS0+dHhfZGVzY19kbWEpOworCWlmICh0eHEtPnR4X2Rlc2NfYXJlYSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBUWCBkZXNjcmlwdG9yc1xuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHR4cS0+dHhfZGVzY19hcmVhLCAwLCBzaXplKTsKKworCXR4cS0+dHhfc2tiID0ga21hbGxvYyhNV0w4S19UWF9ERVNDUyAqIHNpemVvZigqdHhxLT50eF9za2IpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAodHhxLT50eF9za2IgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgVFggc2tidWZmIGxpc3RcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLAorCQkJCSAgICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHhxLT50eF9za2IsIDAsIE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKCp0eHEtPnR4X3NrYikpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX0RFU0NTOyBpKyspIHsKKwkJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2M7CisJCWludCBuZXh0aTsKKworCQl0eF9kZXNjID0gdHhxLT50eF9kZXNjX2FyZWEgKyBpOworCQluZXh0aSA9IChpICsgMSkgJSBNV0w4S19UWF9ERVNDUzsKKworCQl0eF9kZXNjLT5zdGF0dXMgPSAwOworCQl0eF9kZXNjLT5uZXh0X3R4X2Rlc2NfcGh5c19hZGRyID0KKwkJCWNwdV90b19sZTMyKHR4cS0+dHhfZGVzY19kbWEgKworCQkJCQkJbmV4dGkgKiBzaXplb2YoKnR4X2Rlc2MpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG13bDhrX3R4X3N0YXJ0KHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX1BQQV9SRUFEWSwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRFVNTVksCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtd2w4a190eHFfYnVzeShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+cGVuZGluZ190eF9wa3RzOworfQorCitzdHJ1Y3QgbXdsOGtfdHhxX2luZm8geworCXUzMiBmd19vd25lZDsKKwl1MzIgZHJ2X293bmVkOworCXUzMiB1bnVzZWQ7CisJdTMyIGxlbjsKKwl1MzIgaGVhZDsKKwl1MzIgdGFpbDsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfc2Nhbl90eF9yaW5nKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCXN0cnVjdCBtd2w4a190eHFfaW5mbyB0eGluZm9bXSwKKwkJCQl1MzIgbnVtX3F1ZXVlcykKK3sKKwlpbnQgY291bnQsIGRlc2MsIHN0YXR1czsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwlpbnQgbmRlc2NzID0gMDsKKworCW1lbXNldCh0eGluZm8sIDAsIG51bV9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4cV9pbmZvKSk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBudW1fcXVldWVzOyBjb3VudCsrKSB7CisJCXR4cSA9IHByaXYtPnR4cSArIGNvdW50OworCQl0eGluZm9bY291bnRdLmxlbiA9IHR4cS0+dHhfc3RhdHMubGVuOworCQl0eGluZm9bY291bnRdLmhlYWQgPSB0eHEtPnR4X2hlYWQ7CisJCXR4aW5mb1tjb3VudF0udGFpbCA9IHR4cS0+dHhfdGFpbDsKKwkJZm9yIChkZXNjID0gMDsgZGVzYyA8IE1XTDhLX1RYX0RFU0NTOyBkZXNjKyspIHsKKwkJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIGRlc2M7CisJCQlzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5zdGF0dXMpOworCisJCQlpZiAoc3RhdHVzICYgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCkKKwkJCQl0eGluZm9bY291bnRdLmZ3X293bmVkKys7CisJCQllbHNlCisJCQkJdHhpbmZvW2NvdW50XS5kcnZfb3duZWQrKzsKKworCQkJaWYgKHR4X2Rlc2MtPnBrdF9sZW4gPT0gMCkKKwkJCQl0eGluZm9bY291bnRdLnVudXNlZCsrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXJldHVybiBuZGVzY3M7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfdHhfd2FpdF9lbXB0eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGRlbGF5X21zKQoreworCXUzMiBjb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNtZF93YWl0KTsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgUHJldmlvdXMgVFhXYWl0RW1wdHkgaW5zdGFuY2VcbiIpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwljb3VudCA9IG13bDhrX3R4cV9idXN5KHByaXYpOworCWlmIChjb3VudCkgeworCQlwcml2LT50eF93YWl0ID0gJmNtZF93YWl0OworCQlpZiAocHJpdi0+cmFkaW9fc3RhdGUpCisJCQltd2w4a190eF9zdGFydChwcml2KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJaWYgKGNvdW50KSB7CisJCXN0cnVjdCBtd2w4a190eHFfaW5mbyB0eGluZm9bNF07CisJCWludCBpbmRleDsKKwkJaW50IG5ld2NvdW50OworCisJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7CisJCWlmICh0aW1lb3V0KQorCQkJcmV0dXJuIDA7CisKKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJCW5ld2NvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzKCV1KSBUSU1FRE9VVDoldW1zIFBlbmQ6JXUtLT4ldVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgZGVsYXlfbXMsIGNvdW50LCBuZXdjb3VudCk7CisKKwkJbXdsOGtfc2Nhbl90eF9yaW5nKHByaXYsIHR4aW5mbywgNCk7CisJCWZvciAoaW5kZXggPSAwIDsgaW5kZXggPCA0OyBpbmRleCsrKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIlRYUToldSBMOiV1IEg6JXUgVDoldSBGVzoldSBEUlY6JXUgVToldVxuIiwKKwkJCQkJaW5kZXgsCisJCQkJCXR4aW5mb1tpbmRleF0ubGVuLAorCQkJCQl0eGluZm9baW5kZXhdLmhlYWQsCisJCQkJCXR4aW5mb1tpbmRleF0udGFpbCwKKwkJCQkJdHhpbmZvW2luZGV4XS5md19vd25lZCwKKwkJCQkJdHhpbmZvW2luZGV4XS5kcnZfb3duZWQsCisJCQkJCXR4aW5mb1tpbmRleF0udW51c2VkKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTVdMOEtfVFhEX09LCShNV0w4S19UWERfU1RBVFVTX09LIHwgXAorCQkJIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkgfCBcCisJCQkgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZKQorI2RlZmluZSBNV0w4S19UWERfU1VDQ0VTUyhzdGF0KQkJKChzdGF0KSAmIE1XTDhLX1RYRF9PSykKKyNkZWZpbmUgTVdMOEtfVFhEX0ZBSUxfUkVUUlkoc3RhdCkJXAorCSgoc3RhdCkgJiAoTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfRVhDRUVEX0xJTUlUKSkKKworc3RhdGljIHZvaWQgbXdsOGtfdHhxX3JlY2xhaW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGZvcmNlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwlpbnQgd2FrZSA9IDA7CisKKwl3aGlsZSAodHhxLT50eF9zdGF0cy5sZW4gPiAwKSB7CisJCWludCB0eDsKKwkJaW50IHJjOworCQlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCQl1MzIgc3RhdHVzOworCisJCXJjID0gMDsKKwkJdHggPSB0eHEtPnR4X2hlYWQ7CisJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIHR4OworCisJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnN0YXR1cyk7CisKKwkJaWYgKHN0YXR1cyAmIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQpIHsKKwkJCWlmICghZm9yY2UpCisJCQkJYnJlYWs7CisJCQl0eF9kZXNjLT5zdGF0dXMgJj0KKwkJCQl+Y3B1X3RvX2xlMzIoTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCk7CisJCX0KKworCQl0eHEtPnR4X2hlYWQgPSAodHggKyAxKSAlIE1XTDhLX1RYX0RFU0NTOworCQlCVUdfT04odHhxLT50eF9zdGF0cy5sZW4gPT0gMCk7CisJCXR4cS0+dHhfc3RhdHMubGVuLS07CisJCXByaXYtPnBlbmRpbmdfdHhfcGt0cy0tOworCisJCWFkZHIgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5wa3RfcGh5c19hZGRyKTsKKwkJc2l6ZSA9ICh1MzIpKGxlMTZfdG9fY3B1KHR4X2Rlc2MtPnBrdF9sZW4pKTsKKwkJc2tiID0gdHhxLT50eF9za2JbdHhdLnNrYjsKKwkJdHhxLT50eF9za2JbdHhdLnNrYiA9IE5VTEw7CisKKwkJQlVHX09OKHNrYiA9PSBOVUxMKTsKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBhZGRyLCBzaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlyYyA9IG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYik7CisKKwkJLyogTWFyayBkZXNjcmlwdG9yIGFzIHVudXNlZCAqLworCQl0eF9kZXNjLT5wa3RfcGh5c19hZGRyID0gMDsKKwkJdHhfZGVzYy0+cGt0X2xlbiA9IDA7CisKKwkJaWYgKHR4cS0+dHhfc2tiW3R4XS5jbG9uZSkgeworCQkJLyogUmVwbGFjZSB3aXRoIG9yaWdpbmFsIHNrYgorCQkJICogYmVmb3JlIHJldHVybmluZyB0byBzdGFjaworCQkJICogYXMgYnVmZmVyIGhhcyBiZWVuIGNsb25lZAorCQkJICovCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlza2IgPSB0eHEtPnR4X3NrYlt0eF0uY2xvbmU7CisJCQl0eHEtPnR4X3NrYlt0eF0uY2xvbmUgPSBOVUxMOworCQl9CisKKwkJaWYgKHJjKSB7CisJCQkvKiBTb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcgaGVyZS4KKwkJCSAqIEZhaWxlZCB0byByZW1vdmUgRE1BIGhlYWRlci4KKwkJCSAqIFByaW50IGVycm9yIG1lc3NhZ2UgYW5kIGRyb3AgcGFja2V0LgorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZW1vdmluZyBETUEgaGVhZGVyIGZyb20gIgorCQkJCQkidHggc2tiIDB4JXAuXG4iLCBwcml2LT5uYW1lLCBza2IpOworCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKKworCQkvKiBDb252ZXJ0IGZpcm13YXJlIHN0YXR1cyBzdHVmZiBpbnRvIHR4X3N0YXR1cyAqLworCQlpZiAoTVdMOEtfVFhEX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJLyogVHJhbnNtaXQgT0sgKi8KKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJfQorCisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKKworCQl3YWtlID0gIXByaXYtPmluY29uZmlnICYmIHByaXYtPnJhZGlvX3N0YXRlOworCX0KKworCWlmICh3YWtlKQorCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaW5kZXgpOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGNhcmQncyB0cmFuc21pdCBpcyBjb21wbGV0ZWx5IGhhbHRlZCAqLworc3RhdGljIHZvaWQgbXdsOGtfdHhxX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKworCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpbmRleCwgMSk7CisKKwlrZnJlZSh0eHEtPnR4X3NrYik7CisJdHhxLT50eF9za2IgPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LAorCQkJICAgIE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a190eF9kZXNjKSwKKwkJCSAgICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJdHhxLT50eF9kZXNjX2FyZWEgPSBOVUxMOworfQorCitzdGF0aWMgaW50Cittd2w4a190eHFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHg7CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0cjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisJc3RydWN0IHNrX2J1ZmYgKm9yZ19za2IgPSBza2I7CisJZG1hX2FkZHJfdCBkbWE7CisJdTE2IHFvcyA9IDA7CisJYm9vbCBxb3NmcmFtZSA9IGZhbHNlLCBhbXBkdWZyYW1lID0gZmFsc2U7CisJYm9vbCBtY2ZyYW1lID0gZmFsc2UsIGVhcG9sZnJhbWUgPSBmYWxzZTsKKwlib29sIGFtc2R1ZnJhbWUgPSBmYWxzZTsKKwlfX2xlMTYgZmM7CisKKwl0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwl0eCA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHhxLT50eF90YWlsOworCisJQlVHX09OKHR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uc2tiICE9IE5VTEwpOworCisJLyoKKwkgKiBBcHBlbmQgSFcgRE1BIGhlYWRlciB0byBzdGFydCBvZiBwYWNrZXQuICBEcm9wIHBhY2tldCBpZgorCSAqIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb3IgYSBmYWlsdXJlIHRvIHVuc2hhcmUvdW5jbG9uZQorCSAqIHRoZSBza2IuCisJICovCisJc2tiID0gbXdsOGtfYWRkX2RtYV9oZWFkZXIoc2tiKTsKKworCWlmIChza2IgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBwcmVwZW5kIEhXIERNQSAiCisJCQkiaGVhZGVyLCBkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJbXdsOGtfdmlmID0gTVdMOEtfVklGKHR4X2luZm8tPmNvbnRyb2wudmlmKTsKKwl0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKilza2ItPmRhdGE7CisJd2ggPSAmdHItPndoOworCWZjID0gd2gtPmZyYW1lX2NvbnRyb2w7CisJcW9zZnJhbWUgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpOworCW1jZnJhbWUgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjEpOworCWFtcGR1ZnJhbWUgPSAhISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpOworCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7CisJCXUxNiBzZXFubyA9IG13bDhrX3ZpZi0+c2Vxbm87CisJCXdoLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJd2gtPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcW5vIDw8IDQpOworCQltd2w4a192aWYtPnNlcW5vID0gc2Vxbm8rKyAlIDQwOTY7CisJfQorCisJaWYgKHFvc2ZyYW1lKQorCQlxb3MgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilpZWVlODAyMTFfZ2V0X3Fvc19jdGwod2gpKSk7CisKKwlkbWEgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCisJCQkJc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWEpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGRtYSBtYXAgc2tiLCAiCisJCQkiZHJvcHBpbmcgVFggZnJhbWUuXG4iLCBwcml2LT5uYW1lKTsKKworCQlpZiAob3JnX3NrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYihvcmdfc2tiKTsKKwkJaWYgKHNrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCS8qIFNldCBkZXNjIGhlYWRlciwgY3B1IGJpdCBvcmRlci4gICovCisJdHgtPnN0YXR1cyA9IDA7CisJdHgtPmRhdGFfcmF0ZSA9IDA7CisJdHgtPnR4X3ByaW9yaXR5ID0gaW5kZXg7CisJdHgtPnFvc19jb250cm9sID0gMDsKKwl0eC0+cmF0ZV9pbmZvID0gMDsKKwl0eC0+cGVlcl9pZCA9IG13bDhrX3ZpZi0+cGVlcl9pZDsKKworCWFtc2R1ZnJhbWUgPSAhIShxb3MgJiBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQpOworCisJLyogU2V0dXAgZmlybXdhcmUgY29udHJvbCBiaXQgZmllbGRzIGZvciBlYWNoIGZyYW1lIHR5cGUuICAqLworCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykgfHwgaWVlZTgwMjExX2lzX2N0bChmYykpIHsKKwkJdHgtPmRhdGFfcmF0ZSA9IDA7CisJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfZW9zcChxb3MpOworCQkvKiBTZXQgUXVldWUgc2l6ZSB0byB1bnNwZWNpZmllZCAqLworCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X3FsZW4ocW9zLCAweGZmKTsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgeworCQl0eC0+ZGF0YV9yYXRlID0gMTsKKwkJaWYgKG1jZnJhbWUpCisJCQl0eC0+c3RhdHVzIHw9IE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYOworCisJCS8qCisJCSAqIFRlbGwgZmlybXdhcmUgdG8gbm90IHNlbmQgRUFQT0wgcGt0cyBpbiBhbgorCQkgKiBhZ2dyZWdhdGUuICBWZXJpZnkgYWdhaW5zdCBtYWM4MDIxMSB0eCBwYXRoLiAgSWYKKwkJICogc3RhY2sgdHVybnMgb2ZmIEFNUERVIGZvciBhbiBFQVBPTCBmcmFtZSB0aGlzCisJCSAqIGNoZWNrIHdpbGwgYmUgcmVtb3ZlZC4KKwkJICovCisJCWlmIChlYXBvbGZyYW1lKSB7CisJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFNlbmQgcGt0IGluIGFuIGFnZ3JlZ2F0ZSBpZiBBTVBEVSBmcmFtZS4gICovCisJCQlpZiAoYW1wZHVmcmFtZSkKKwkJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX0JMT0NLQUNLKTsKKwkJCWVsc2UKKwkJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTCk7CisKKwkJCWlmIChhbXNkdWZyYW1lKQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUocW9zKTsKKwkJfQorCX0KKworCS8qIENvbnZlcnQgdG8gbGl0dGxlIGVuZGlhbiAqLworCXR4LT5xb3NfY29udHJvbCA9IGNwdV90b19sZTE2KHFvcyk7CisJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKHR4LT5zdGF0dXMpOworCXR4LT5wa3RfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIoZG1hKTsKKwl0eC0+cGt0X2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKworCXR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uc2tiID0gc2tiOworCXR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uY2xvbmUgPQorCQlza2IgPT0gb3JnX3NrYiA/IE5VTEwgOiBvcmdfc2tiOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXR4LT5zdGF0dXMgPSBjcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX09LIHwKKwkJCQkJTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCk7CisJd21iKCk7CisJdHhxLT50eF9zdGF0cy5sZW4rKzsKKwlwcml2LT5wZW5kaW5nX3R4X3BrdHMrKzsKKwl0eHEtPnR4X3N0YXRzLmNvdW50Kys7CisJdHhxLT50eF90YWlsKys7CisKKwlpZiAodHhxLT50eF90YWlsID09IE1XTDhLX1RYX0RFU0NTKQorCQl0eHEtPnR4X3RhaWwgPSAwOworCWlmICh0eHEtPnR4X2hlYWQgPT0gdHhxLT50eF90YWlsKQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaW5kZXgpOworCisJaWYgKHByaXYtPmluY29uZmlnKSB7CisJCS8qCisJCSAqIFNpbGVudGx5IHF1ZXVlIHBhY2tldCB3aGVuIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCisJCSAqIGEgY29uZmlnIGN5Y2xlLiAgTm90aWZ5IGZpcm13YXJlIG9ubHkgaWYgd2UgYXJlCisJCSAqIHdhaXRpbmcgZm9yIFRYUXMgdG8gZW1wdHkuICBJZiBhIHBhY2tldCBpcyBzZW50CisJCSAqIGJlZm9yZSAuY29uZmlnKCkgaXMgY29tcGxldGUsIHBlcmhhcHMgaXQgaXMgYmV0dGVyCisJCSAqIHRvIGRyb3AgdGhlIHBhY2tldCwgYXMgdGhlIGNoYW5uZWwgaXMgYmVpbmcgY2hhbmdlZAorCQkgKiBhbmQgdGhlIHBhY2tldCB3aWxsIGVuZCB1cCBvbiB0aGUgd3JvbmcgY2hhbm5lbC4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogV0FSTklORyBUWCBhY3Rpdml0eSB3aGlsZSAiCisJCQkiaW4gY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisKKwkJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkKKwkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0gZWxzZQorCQltd2w4a190eF9zdGFydChwcml2KTsKKworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKworLyoKKyAqIENvbW1hbmQgcHJvY2Vzc2luZy4KKyAqLworCisvKiBUaW1lb3V0IGZpcm13YXJlIGNvbW1hbmRzIGFmdGVyIDIwMDBtcyAqLworI2RlZmluZSBNV0w4S19DTURfVElNRU9VVF9NUwkyMDAwCisKK3N0YXRpYyBpbnQgbXdsOGtfcG9zdF9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBtd2w4a19jbWRfcGt0ICpjbWQpCit7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi0+cmVnczsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKKwlpbnQgcmM7CisJdTE2IF9faW9tZW0gKnJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCXU4IGJ1ZlszMl07CisKKwljbWQtPnJlc3VsdCA9IDB4RkZGRjsKKwlkbWFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNtZC0+bGVuZ3RoKTsKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGNtZCwgZG1hX3NpemUsCisJCQkJICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hX2FkZHIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzc1xuIik7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwlwcml2LT5ob3N0Y21kX3dhaXQgPSAmY21kX3dhaXQ7CisJaW93cml0ZTMyKGRtYV9hZGRyLCByZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RPT1JCRUxMLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoTVdMOEtfQ01EX1RJTUVPVVRfTVMpKTsKKworCXJlc3VsdCA9ICZjbWQtPnJlc3VsdDsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CisJCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgdGltZW91dCBhZnRlciAldSBtc1xuIiwKKwkJICAgICAgIHByaXYtPm5hbWUsCisJCSAgICAgICBtd2w4a19jbWRfbmFtZShjbWQtPmNvZGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAorCQkgICAgICAgTVdMOEtfQ01EX1RJTUVPVVRfTVMpOworCQlyYyA9IC1FVElNRURPVVQ7CisJfSBlbHNlIHsKKwkJcmMgPSAqcmVzdWx0ID8gLUVJTlZBTCA6IDA7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgZXJyb3IgMHgleFxuIiwKKwkJCSAgICAgICBwcml2LT5uYW1lLAorCQkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCQkgICAgICAgKnJlc3VsdCk7CisJfQorCisJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwgZG1hX3NpemUsCisJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogR0VUX0hXX1NQRUMuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfZ2V0X2h3X3NwZWMgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX3U4IGh3X3JldjsKKwlfX3U4IGhvc3RfaW50ZXJmYWNlOworCV9fbGUxNiBudW1fbWNhZGRyczsKKwlfX3U4IHBlcm1fYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCV9fbGUxNiByZWdpb25fY29kZTsKKwlfX2xlMzIgZndfcmV2OworCV9fbGUzMiBwc19jb29raWU7CisJX19sZTMyIGNhcHM7CisJX191OCBtY3NfYml0bWFwWzE2XTsKKwlfX2xlMzIgcnhfcXVldWVfcHRyOworCV9fbGUzMiBudW1fdHhfcXVldWVzOworCV9fbGUzMiB0eF9xdWV1ZV9wdHJzW01XTDhLX1RYX1FVRVVFU107CisJX19sZTMyIGNhcHMyOworCV9fbGUzMiBudW1fdHhfZGVzY19wZXJfcXVldWU7CisJX19sZTMyIHRvdGFsX3J4X2Rlc2M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9nZXRfaHdfc3BlYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfZ2V0X2h3X3NwZWMgKmNtZDsKKwlpbnQgcmM7CisJaW50IGk7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfR0VUX0hXX1NQRUMpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwltZW1zZXQoY21kLT5wZXJtX2FkZHIsIDB4ZmYsIHNpemVvZihjbWQtPnBlcm1fYWRkcikpOworCWNtZC0+cHNfY29va2llID0gY3B1X3RvX2xlMzIocHJpdi0+Y29va2llX2RtYSk7CisJY21kLT5yeF9xdWV1ZV9wdHIgPSBjcHVfdG9fbGUzMihwcml2LT5yeHFbMF0ucnhfZGVzY19kbWEpOworCWNtZC0+bnVtX3R4X3F1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCWNtZC0+dHhfcXVldWVfcHRyc1tpXSA9IGNwdV90b19sZTMyKHByaXYtPnR4cVtpXS50eF9kZXNjX2RtYSk7CisJY21kLT5udW1fdHhfZGVzY19wZXJfcXVldWUgPSBNV0w4S19UWF9ERVNDUzsKKwljbWQtPnRvdGFsX3J4X2Rlc2MgPSBNV0w4S19SWF9ERVNDUzsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisKKwlpZiAoIXJjKSB7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBjbWQtPnBlcm1fYWRkcik7CisJCXByaXYtPm51bV9tY2FkZHJzID0gbGUxNl90b19jcHUoY21kLT5udW1fbWNhZGRycyk7CisJCXByaXYtPmZ3X3JldiA9IGNtZC0+ZndfcmV2OworCQlwcml2LT5od19yZXYgPSBjbWQtPmh3X3JldjsKKwkJcHJpdi0+cmVnaW9uX2NvZGUgPSBsZTE2X3RvX2NwdShjbWQtPnJlZ2lvbl9jb2RlKTsKKwl9CisKKwlrZnJlZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9NQUNfTVVMVElDQVNUX0FEUi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG51bWFkZHI7CisJX191OCBhZGRyWzFdW0lFRUU4MDIxMV9BRERSX0xFTl07Cit9OworCisjZGVmaW5lIE1XTDhLX0VOQUJMRV9SWF9NVUxUSUNBU1QgMHgwMDBGCitzdGF0aWMgaW50IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJaW50IG1jX2NvdW50LAorCQkJCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCXN0cnVjdCBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIgKmNtZDsKKwlpbnQgaW5kZXggPSAwOworCWludCByYzsKKwlpbnQgc2l6ZSA9IHNpemVvZigqY21kKSArICgobWNfY291bnQgLSAxKSAqIElFRUU4MDIxMV9BRERSX0xFTik7CisJY21kID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9NQUNfTVVMVElDQVNUX0FEUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19FTkFCTEVfUlhfTVVMVElDQVNUKTsKKwljbWQtPm51bWFkZHIgPSBjcHVfdG9fbGUxNihtY19jb3VudCk7CisJd2hpbGUgKChpbmRleCA8IG1jX2NvdW50KSAmJiBtY2xpc3QpIHsKKwkJaWYgKG1jbGlzdC0+ZGFfYWRkcmxlbiAhPSBJRUVFODAyMTFfQUREUl9MRU4pIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ7CisJCX0KKwkJbWVtY3B5KGNtZC0+YWRkcltpbmRleF0sIG1jbGlzdC0+ZGFfYWRkciwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwkJaW5kZXgrKzsKKwkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OworCX0KKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisKK213bDhrX2NtZF9tYWNfbXVsdGljYXN0X2Fkcl9leGl0OgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EXzgwMl8xMV9HRVRfU1RBVC4KKyAqLworc3RydWN0IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUzMiBzdGF0c1s2NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1NUQVRfQUNLX0ZBSUxVUkUJOQorI2RlZmluZSBNV0w4S19TVEFUX1JUU19GQUlMVVJFCTEyCisjZGVmaW5lIE1XTDhLX1NUQVRfRkNTX0VSUk9SCTI0CisjZGVmaW5lIE1XTDhLX1NUQVRfUlRTX1NVQ0NFU1MJMTEKKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVRfU1RBVCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVQpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlpZiAoIXJjKSB7CisJCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudCA9CisJCQlsZTMyX3RvX2NwdShjbWQtPnN0YXRzW01XTDhLX1NUQVRfQUNLX0ZBSUxVUkVdKTsKKwkJc3RhdHMtPmRvdDExUlRTRmFpbHVyZUNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9SVFNfRkFJTFVSRV0pOworCQlzdGF0cy0+ZG90MTFGQ1NFcnJvckNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9GQ1NfRVJST1JdKTsKKwkJc3RhdHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9SVFNfU1VDQ0VTU10pOworCX0KKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EXzgwMl8xMV9SQURJT19DT05UUk9MLgorICovCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgY29udHJvbDsKKwlfX2xlMTYgcmFkaW9fb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgKmNtZDsKKwlpbnQgcmM7CisKKwlpZiAoKChlbmFibGUgJiBNV0w4S19SQURJT19FTkFCTEUpID09IHByaXYtPnJhZGlvX3N0YXRlKSAmJgorCSAgICAhKGVuYWJsZSAmIE1XTDhLX1JBRElPX0ZPUkNFKSkKKwkJcmV0dXJuIDA7CisKKwllbmFibGUgJj0gTVdMOEtfUkFESU9fRU5BQkxFOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JBRElPX0NPTlRST0wpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihwcml2LT5yYWRpb19wcmVhbWJsZSk7CisJY21kLT5yYWRpb19vbiA9IGNwdV90b19sZTE2KGVuYWJsZSA/IDB4MDAwMSA6IDB4MDAwMCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlpZiAoIXJjKQorCQlwcml2LT5yYWRpb19zdGF0ZSA9IGVuYWJsZTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorbXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHNob3J0X3ByZWFtYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCisJaWYgKGh3ID09IE5VTEwgfHwgaHctPnByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJpdiA9IGh3LT5wcml2OworCisJcHJpdi0+cmFkaW9fcHJlYW1ibGUgPSAoc2hvcnRfcHJlYW1ibGUgPworCQlNV0w4S19SQURJT19TSE9SVF9QUkVBTUJMRSA6CisJCU1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUpOworCisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywKKwkJCU1XTDhLX1JBRElPX0VOQUJMRSB8IE1XTDhLX1JBRElPX0ZPUkNFKTsKK30KKworLyoKKyAqIENNRF84MDJfMTFfUkZfVFhfUE9XRVIuCisgKi8KKyNkZWZpbmUgTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUwJOAorCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHN1cHBvcnRfbGV2ZWw7CisJX19sZTE2IGN1cnJlbnRfbGV2ZWw7CisJX19sZTE2IHJlc2VydmVkOworCV9fbGUxNiBwb3dlcl9sZXZlbF9saXN0W01XTDhLX1RYX1BPV0VSX0xFVkVMX1RPVEFMXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGRCbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SRl9UWF9QT1dFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+c3VwcG9ydF9sZXZlbCA9IGNwdV90b19sZTE2KGRCbSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1BSRV9TQ0FOLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9wcmVfc2NhbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9QUkVfU0NBTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUE9TVF9TQ0FOLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9wb3N0X3NjYW4geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgaXNpYnNzOworCV9fdTggYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQKK213bDhrX2NtZF9zZXRfcG9zdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IG1hY1tJRUVFODAyMTFfQUREUl9MRU5dKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+aXNpYnNzID0gMDsKKwltZW1jcHkoY21kLT5ic3NpZCwgbWFjLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SRl9DSEFOTkVMLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX3U4IGN1cnJlbnRfY2hhbm5lbDsKKwlfX2xlMzIgY2hhbm5lbF9mbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkZfQ0hBTk5FTCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+Y3VycmVudF9jaGFubmVsID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJY21kLT5jaGFubmVsX2ZsYWdzID0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MSk7CisJZWxzZQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfU0xPVC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfc2xvdCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX191OCBzaG9ydF9zbG90OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3Nsb3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBzbG90X3RpbWUpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfc2xvdCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfU0xPVCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+c2hvcnRfc2xvdCA9IHNsb3RfdGltZSA9PSBNV0w4S19TSE9SVF9TTE9UVElNRSA/IDEgOiAwOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX01JTU9fQ09ORklHLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKKwlfX3U4IHJ4X2FudGVubmFfbWFwOworCV9fdTggdHhfYW50ZW5uYV9tYXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9taW1vX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCByeCwgX191OCB0eCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01JTU9fQ09ORklHKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKTsKKwljbWQtPnJ4X2FudGVubmFfbWFwID0gcng7CisJY21kLT50eF9hbnRlbm5hX21hcCA9IHR4OworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0VOQUJMRV9TTklGRkVSLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfZW5hYmxlX3NuaWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBlbmFibGUgPyBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpIDogMDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURV9BREFQVF9NT0RFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBtb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191MTYgbW9kZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1dNTV9NT0RFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF93bW0geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19zZXRfd21tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfV01NX01PREUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBlbmFibGUgPyBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKSA6IDA7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlpZiAoIXJjKQorCQlwcml2LT53bW1fbW9kZSA9IGVuYWJsZTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUlRTX1RIUkVTSE9MRC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgdGhyZXNob2xkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHUxNiBhY3Rpb24sIHUxNiAqdGhyZXNob2xkKQoreworCXN0cnVjdCBtd2w4a19jbWRfcnRzX3RocmVzaG9sZCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xEKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKKwljbWQtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KCp0aHJlc2hvbGQpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9FRENBX1BBUkFNUy4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKworCS8qIFNlZSBNV0w4S19TRVRfRURDQV9YWFggYmVsb3cgKi8KKwlfX2xlMTYgYWN0aW9uOworCisJLyogVFggb3Bwb3J0dW5pdHkgaW4gdW5pdHMgb2YgMzIgdXMgKi8KKwlfX2xlMTYgdHhvcDsKKworCS8qIExvZyBleHBvbmVudCBvZiBtYXggY29udGVudGlvbiBwZXJpb2Q6IDAuLi4xNSovCisJX191OCBsb2dfY3dfbWF4OworCisJLyogTG9nIGV4cG9uZW50IG9mIG1pbiBjb250ZW50aW9uIHBlcmlvZDogMC4uLjE1ICovCisJX191OCBsb2dfY3dfbWluOworCisJLyogQWRhcHRpdmUgaW50ZXJmcmFtZSBzcGFjaW5nIGluIHVuaXRzIG9mIDMydXMgKi8KKwlfX3U4IGFpZnM7CisKKwkvKiBUWCBxdWV1ZSB0byBjb25maWd1cmUgKi8KKwlfX3U4IHR4cTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfR0VUX0VEQ0FfQUxMCTAKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfQ1cJMHgwMQorI2RlZmluZSBNV0w4S19TRVRfRURDQV9UWE9QCTB4MDIKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfQUlGUwkweDA0CisKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfQUxMCShNV0w4S19TRVRfRURDQV9DVyB8IFwKKwkJCQkgTVdMOEtfU0VUX0VEQ0FfVFhPUCB8IFwKKwkJCQkgTVdMOEtfU0VUX0VEQ0FfQUlGUykKKworc3RhdGljIGludAorbXdsOGtfc2V0X2VkY2FfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHFudW0sCisJCV9fdTE2IGN3X21pbiwgX191MTYgY3dfbWF4LAorCQlfX3U4IGFpZnMsIF9fdTE2IHR4b3ApCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgKmNtZDsKKwl1MzIgbG9nX2N3X21pbiwgbG9nX2N3X21heDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxvZ19jd19taW4gPSBpbG9nMihjd19taW4rMSk7CisJbG9nX2N3X21heCA9IGlsb2cyKGN3X21heCsxKTsKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUyk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfU0VUX0VEQ0FfQUxMKTsKKwljbWQtPnR4b3AgPSBjcHVfdG9fbGUxNih0eG9wKTsKKwljbWQtPmxvZ19jd19tYXggPSAodTgpbG9nX2N3X21heDsKKwljbWQtPmxvZ19jd19taW4gPSAodTgpbG9nX2N3X21pbjsKKwljbWQtPmFpZnMgPSBhaWZzOworCWNtZC0+dHhxID0gcW51bTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9GSU5BTElaRV9KT0lOLgorICovCisKKy8qIEZKIGJlYWNvbiBidWZmZXIgc2l6ZSBpcyBjb21waWxlZCBpbnRvIHRoZSBmaXJtd2FyZS4gICovCisjZGVmaW5lIE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4JMTI4CisKK3N0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbDsJLyogTnVtYmVyIG9mIGJlYWNvbiBwZXJpb2RzIHRvIHNsZWVwICovCisJX191OCBiZWFjb25fZGF0YVtNV0w4S19GSl9CRUFDT05fTUFYTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfZmluYWxpemVfam9pbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZnJhbWUsCisJCQkJX191MTYgZnJhbWVsZW4sIF9fdTE2IGR0aW0pCit7CisJc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpwYXlsb2FkID0gZnJhbWU7CisJdTE2IGhkcmxlbjsKKwl1MzIgcGF5bG9hZF9sZW47CisJaW50IHJjOworCisJaWYgKGZyYW1lID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJaWYgKGR0aW0pCisJCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihkdGltKTsKKwllbHNlCisJCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMigxKTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4ocGF5bG9hZC0+ZnJhbWVfY29udHJvbCk7CisKKwlwYXlsb2FkX2xlbiA9IGZyYW1lbGVuID4gaGRybGVuID8gZnJhbWVsZW4gLSBoZHJsZW4gOiAwOworCisJLyogWFhYIFRCRCBNaWdodCBqdXN0IGhhdmUgdG8gYWJvcnQgYW5kIHJldHVybiBhbiBlcnJvciAqLworCWlmIChwYXlsb2FkX2xlbiA+IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4pCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogV0FSTklORzogSW5jb21wbGV0ZSBiZWFjb24gIgorCQkJInNlbnQgdG8gZmlybXdhcmUuIFN6PSV1IE1BWD0ldVxuIiwgX19mdW5jX18sCisJCQlwYXlsb2FkX2xlbiwgTVdMOEtfRkpfQkVBQ09OX01BWExFTik7CisKKwlwYXlsb2FkX2xlbiA9IHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTiA/CisJCQkJTVdMOEtfRkpfQkVBQ09OX01BWExFTiA6IHBheWxvYWRfbGVuOworCisJaWYgKHBheWxvYWQgJiYgcGF5bG9hZF9sZW4pCisJCW1lbWNweShjbWQtPmJlYWNvbl9kYXRhLCAmcGF5bG9hZC0+dS5iZWFjb24sIHBheWxvYWRfbGVuKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfVVBEQVRFX1NUQURCLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKworCS8qIFNlZSBTVEFEQl9BQ1RJT05fVFlQRSAqLworCV9fbGUzMglhY3Rpb247CisKKwkvKiBQZWVyIE1BQyBhZGRyZXNzICovCisJX191OAlwZWVyX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKworCV9fbGUzMglyZXNlcnZlZDsKKworCS8qIFBlZXIgaW5mbyAtIHZhbGlkIGR1cmluZyBhZGQvdXBkYXRlLiAgKi8KKwlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8JcGVlcl9pbmZvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgX191MzIgYWN0aW9uKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgKmNtZDsKKwlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gKnBlZXJfaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IHJjOworCV9fdTggY291bnQsICpyYXRlczsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9VUERBVEVfU1RBREIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7CisJcGVlcl9pbmZvID0gJmNtZC0+cGVlcl9pbmZvOworCW1lbWNweShjbWQtPnBlZXJfYWRkciwgbXZfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNV0w4S19TVEFfREJfQUREX0VOVFJZOgorCWNhc2UgTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWToKKwkJLyogQnVpbGQgcGVlcl9pbmZvIGJsb2NrICovCisJCXBlZXJfaW5mby0+cGVlcl90eXBlID0gTVdMOEtfUEVFUl9UWVBFX0FDQ0VTU1BPSU5UOworCQlwZWVyX2luZm8tPmJhc2ljX2NhcHMgPSBjcHVfdG9fbGUxNihpbmZvLT5hc3NvY19jYXBhYmlsaXR5KTsKKwkJcGVlcl9pbmZvLT5pbnRlcm9wID0gMTsKKwkJcGVlcl9pbmZvLT5hbXNkdV9lbmFibGVkID0gMDsKKworCQlyYXRlcyA9IHBlZXJfaW5mby0+bGVnYWN5X3JhdGVzOworCQlmb3IgKGNvdW50ID0gMCA7IGNvdW50IDwgbXZfdmlmLT5sZWdhY3lfbnJhdGVzOyBjb3VudCsrKQorCQkJcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOworCisJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJCWlmIChyYyA9PSAwKQorCQkJbXZfdmlmLT5wZWVyX2lkID0gcGVlcl9pbmZvLT5zdGF0aW9uX2lkOworCisJCWJyZWFrOworCisJY2FzZSBNV0w4S19TVEFfREJfREVMX0VOVFJZOgorCWNhc2UgTVdMOEtfU1RBX0RCX0ZMVVNIOgorCWRlZmF1bHQ6CisJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJCWlmIChyYyA9PSAwKQorCQkJbXZfdmlmLT5wZWVyX2lkID0gMDsKKwkJYnJlYWs7CisJfQorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX0FJRC4KKyAqLworI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX0RJU0FCTEVECQkJMHgwMAorI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX05PTl9NRU1CRVJfUFJPVF9NT0RFCQkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfT05FXzIwTUhaX1NUQV9QUk9UX01PREUJMHgwMgorI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX0hUTUlYRURfUFJPVF9NT0RFCQkweDAzCisKKyNkZWZpbmUgTVdMOEtfUkFURV9JTkRFWF9NQVhfQVJSQVkJCQkxNAorCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQJCQkweDAwCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFHCQkJCTB4MDcKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWQkJMHgwMgorI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEwJCQkweDA2CisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfTUFTSwkJCQkweDA3CisKK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYJYWlkOworCisJIC8qIEFQJ3MgTUFDIGFkZHJlc3MgKEJTU0lEKSAqLworCV9fdTgJYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX2xlMTYJcHJvdGVjdGlvbl9tb2RlOworCV9fdTgJc3VwcF9yYXRlc1tNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfYWlkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlcyA9IG12X3ZpZi0+bGVnYWN5X3JhdGVzOworCWludCBjb3VudDsKKwl1MTYgcHJvdF9tb2RlOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfQUlEKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWlkID0gY3B1X3RvX2xlMTYoaW5mby0+YWlkKTsKKworCW1lbWNweShjbWQtPmJzc2lkLCBtdl92aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRDsKKworCWlmIChpbmZvLT51c2VfY3RzX3Byb3QpIHsKKwkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMUc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChpbmZvLT5odC5vcGVyYXRpb25fbW9kZSAmCisJCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OKSB7CisJCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl8yME1IWjoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkhUX01JWEVEOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwljbWQtPnByb3RlY3Rpb25fbW9kZSA9IGNwdV90b19sZTE2KHByb3RfbW9kZSk7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCWNtZC0+c3VwcF9yYXRlc1tjb3VudF0gPSBiaXRyYXRlc1tjb3VudF0uaHdfdmFsdWU7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JBVEUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX3U4CWxlZ2FjeV9yYXRlc1tNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWV07CisKKwkvKiBCaXRtYXAgZm9yIHN1cHBvcnRlZCBNQ1MgY29kZXMuICAqLworCV9fdTgJbWNzX3NldFtNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTXTsKKwlfX3U4CXJlc2VydmVkW01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a191cGRhdGVfcmF0ZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9yYXRlc2V0ICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlcyA9IG12X3ZpZi0+bGVnYWN5X3JhdGVzOworCWludCBjb3VudDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCWNtZC0+bGVnYWN5X3JhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9VU0VfRklYRURfUkFURS4KKyAqLworI2RlZmluZSBNV0w4S19SQVRFX1RBQkxFX1NJWkUJOAorI2RlZmluZSBNV0w4S19VQ0FTVF9SQVRFCTAKKyNkZWZpbmUgTVdMOEtfTUNBU1RfUkFURQkxCisjZGVmaW5lIE1XTDhLX0JDQVNUX1JBVEUJMgorCisjZGVmaW5lIE1XTDhLX1VTRV9GSVhFRF9SQVRFCTB4MDAwMQorI2RlZmluZSBNV0w4S19VU0VfQVVUT19SQVRFCTB4MDAwMgorCitzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSB7CisJLyogU2V0IHRvIDEgaWYgSFQgcmF0ZSwgMCBpZiBsZWdhY3kuICAqLworCV9fbGUzMglpc19odF9yYXRlOworCisJLyogU2V0IHRvIDEgdG8gdXNlIHJldHJ5X2NvdW50IGZpZWxkLiAgKi8KKwlfX2xlMzIJZW5hYmxlX3JldHJ5OworCisJLyogU3BlY2lmaWVkIGxlZ2FjeSByYXRlIG9yIE1DUy4gICovCisJX19sZTMyCXJhdGU7CisKKwkvKiBOdW1iZXIgb2YgYWxsb3dlZCByZXRyaWVzLiAgKi8KKwlfX2xlMzIJcmV0cnlfY291bnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSB7CisJLyogMSB0byBhbGxvdyBzcGVjaWZpZWQgcmF0ZSBhbmQgYmVsb3cgKi8KKwlfX2xlMzIJYWxsb3dfcmF0ZV9kcm9wOworCV9fbGUzMgludW1fcmF0ZXM7CisJc3RydWN0IG13bDhrX3JhdGVfZW50cnkgcmF0ZV9lbnRyeVtNV0w4S19SQVRFX1RBQkxFX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMglhY3Rpb247CisJc3RydWN0IG13bDhrX3JhdGVfdGFibGUgcmF0ZV90YWJsZTsKKworCS8qIFVuaWNhc3QsIEJyb2FkY2FzdCBvciBNdWx0aWNhc3QgKi8KKwlfX2xlMzIJcmF0ZV90eXBlOworCV9fbGUzMglyZXNlcnZlZDE7CisJX19sZTMyCXJlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCXUzMiBhY3Rpb24sIHUzMiByYXRlX3R5cGUsIHN0cnVjdCBtd2w4a19yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQoreworCXN0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUgKmNtZDsKKwlpbnQgY291bnQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihhY3Rpb24pOworCWNtZC0+cmF0ZV90eXBlID0gY3B1X3RvX2xlMzIocmF0ZV90eXBlKTsKKworCWlmIChyYXRlX3RhYmxlICE9IE5VTEwpIHsKKwkJLyogQ29weSBvdmVyIGVhY2ggZmllbGQgbWFudWFsbHkgc28KKwkJKiB0aGF0IGJpdGZsaXBwaW5nIGNhbiBiZSBkb25lCisJCSovCisJCWNtZC0+cmF0ZV90YWJsZS5hbGxvd19yYXRlX2Ryb3AgPQorCQkJCWNwdV90b19sZTMyKHJhdGVfdGFibGUtPmFsbG93X3JhdGVfZHJvcCk7CisJCWNtZC0+cmF0ZV90YWJsZS5udW1fcmF0ZXMgPQorCQkJCWNwdV90b19sZTMyKHJhdGVfdGFibGUtPm51bV9yYXRlcyk7CisKKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgcmF0ZV90YWJsZS0+bnVtX3JhdGVzOyBjb3VudCsrKSB7CisJCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqZHN0ID0KKwkJCQkmY21kLT5yYXRlX3RhYmxlLnJhdGVfZW50cnlbY291bnRdOworCQkJc3RydWN0IG13bDhrX3JhdGVfZW50cnkgKnNyYyA9CisJCQkJJnJhdGVfdGFibGUtPnJhdGVfZW50cnlbY291bnRdOworCisJCQlkc3QtPmlzX2h0X3JhdGUgPSBjcHVfdG9fbGUzMihzcmMtPmlzX2h0X3JhdGUpOworCQkJZHN0LT5lbmFibGVfcmV0cnkgPSBjcHVfdG9fbGUzMihzcmMtPmVuYWJsZV9yZXRyeSk7CisJCQlkc3QtPnJhdGUgPSBjcHVfdG9fbGUzMihzcmMtPnJhdGUpOworCQkJZHN0LT5yZXRyeV9jb3VudCA9IGNwdV90b19sZTMyKHNyYy0+cmV0cnlfY291bnQpOworCQl9CisJfQorCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtd2w4a19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZGV2X2lkOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCWlvd3JpdGUzMih+c3RhdHVzLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKworCXN0YXR1cyAmPSBwcml2LT5pbnRfbWFzazsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1JYX1JFQURZKSB7CisJCXdoaWxlIChyeHFfcHJvY2VzcyhodywgMCwgMSkpCisJCQlyeHFfcmVmaWxsKGh3LCAwLCAxKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9PUENfRE9ORSkgeworCQlpZiAocHJpdi0+aG9zdGNtZF93YWl0ICE9IE5VTEwpIHsKKwkJCWNvbXBsZXRlKHByaXYtPmhvc3RjbWRfd2FpdCk7CisJCQlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkpIHsKKwkJaWYgKCFwcml2LT5pbmNvbmZpZyAmJgorCQkJcHJpdi0+cmFkaW9fc3RhdGUgJiYKKwkJCW13bDhrX3R4cV9idXN5KHByaXYpKQorCQkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKgorICogQ29yZSBkcml2ZXIgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIGludCBtd2w4a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBpbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCWludCByYzsKKworCWlmIChwcml2LT5jdXJyZW50X2NoYW5uZWwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgVFggZnJhbWUgc2luY2UgcmFkaW8gIgorCQkgICAgICAgImRpc2FibGVkXG4iLCBwcml2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCXJjID0gbXdsOGtfdHhxX3htaXQoaHcsIGluZGV4LCBza2IpOworCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgeworCS8qIEluaXRpYWxpemVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJc3RydWN0IHdvcmtfc3RydWN0IHd0OworCisJLyogUmVxdWlyZWQgZmllbGQgcGFzc2VkIGluIHRvIG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisKKwkvKiBSZXF1aXJlZCBmaWVsZCBwYXNzZWQgaW4gdG8gbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlpbnQgKCp3ZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3KTsKKworCS8qIEluaXRpYWxpemVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJc3RydWN0IGNvbXBsZXRpb24gKmNtZF93YWl0OworCisJLyogUmVzdWx0IGNvZGUuICAqLworCWludCByYzsKKworCS8qCisJICogT3B0aW9uYWwgZmllbGQuIFJlZmVyIHRvIGV4cGxhbmF0aW9uIG9mIE1XTDhLX1dRX1hYWF9YWFgKKwkgKiBmbGFncyBmb3IgZXhwbGFuYXRpb24uICBEZWZhdWx0cyB0byBNV0w4S19XUV9ERUZBVUxUX09QVElPTlMuCisJICovCisJdTMyIG9wdGlvbnM7CisKKwkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX0NPTkZJR19USU1FT1VUX01TLiAgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXM7CisKKwkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUy4gICovCisJdTMyIHR4d2FpdF9hdHRlbXB0czsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfVFhXQUlUX01TLiAgKi8KKwl1MzIgdHhfdGltZW91dF9tczsKKwl1MzIgc3RlcDsKK307CisKKy8qIEZsYWdzIGNvbnRyb2xsaW5nIGJlaGF2aW9yIG9mIGNvbmZpZyBxdWV1ZSByZXF1ZXN0cyAqLworCisvKiBDYWxsZXIgc3BpbnMgd2hpbGUgd2FpdGluZyBmb3IgY29tcGxldGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX1NQSU4JCQkweDAwMDAwMDAxCisKKy8qIFdhaXQgZm9yIFRYIHF1ZXVlcyB0byBlbXB0eSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24uICAqLworI2RlZmluZSBNV0w4S19XUV9UWF9XQUlUX0VNUFRZCQkweDAwMDAwMDAyCisKKy8qIFF1ZXVlIHJlcXVlc3QgYW5kIHJldHVybiBpbW1lZGlhdGVseS4gICovCisjZGVmaW5lIE1XTDhLX1dRX1BPU1RfUkVRVUVTVAkJMHgwMDAwMDAwNAorCisvKgorICogQ2FsbGVyIHNsZWVwcyBhbmQgd2FpdHMgZm9yIHRhc2sgY29tcGxldGUgbm90aWZpY2F0aW9uLgorICogRG8gbm90IHVzZSBpbiBhdG9taWMgY29udGV4dC4KKyAqLworI2RlZmluZSBNV0w4S19XUV9TTEVFUAkJCTB4MDAwMDAwMDgKKworLyogRnJlZSB3b3JrIHN0cnVjdCB3aGVuIHRhc2sgaXMgZG9uZS4gICovCisjZGVmaW5lIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVAkweDAwMDAwMDEwCisKKy8qCisgKiBDb25maWcgcmVxdWVzdCBpcyBxdWV1ZWQgYW5kIHJldHVybnMgdG8gY2FsbGVyIGltZWRpYXRlbHkuICBVc2UKKyAqIHRoaXMgaW4gYXRvbWljIGNvbnRleHQuIFdvcmsgc3RydWN0IGlzIGZyZWVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKQorICogd2hlbiB0aGlzIGZsYWcgaXMgc2V0LgorICovCisjZGVmaW5lIE1XTDhLX1dRX1FVRVVFX09OTFkJKE1XTDhLX1dRX1BPU1RfUkVRVUVTVCB8IFwKKwkJCQkgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUKQorCisvKiBEZWZhdWx0IHdvcmsgcXVldWUgYmVoYXZpb3IgaXMgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHR4IGNvbXBsZXRpb24uICAqLworI2RlZmluZSBNV0w4S19XUV9ERUZBVUxUX09QVElPTlMgKE1XTDhLX1dRX1NMRUVQIHwgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWSkKKworLyoKKyAqIERlZmF1bHQgY29uZmlnIHJlcXVlc3QgdGltZW91dC4gIEFkZCBhZGp1c3RtZW50cyB0byBtYWtlIHN1cmUgdGhlCisgKiBjb25maWcgdGhyZWFkIHdhaXRzIGxvbmcgZW5vdWdoIGZvciBib3RoIHR4IHdhaXQgYW5kIGNtZCB3YWl0IGJlZm9yZQorICogdGltaW5nIG91dC4KKyAqLworCisvKiBUaW1lIHRvIHdhaXQgZm9yIGFsbCBUWFFzIHRvIGRyYWluLiAgVFggRG9vcmJlbGwgaXMgcHJlc3NlZCBlYWNoIHRpbWUuICAqLworI2RlZmluZSBNV0w4S19UWFdBSVRfVElNRU9VVF9NUwkJMTAwMAorCisvKiBEZWZhdWx0IG51bWJlciBvZiBUWCB3YWl0IGF0dGVtcHRzLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTCTQKKworLyogVG90YWwgdGltZSB0byB3YWl0IGZvciBUWFEgdG8gZHJhaW4uICAqLworI2RlZmluZSBNV0w4S19UWFdBSVRfTVMJCQkoTVdMOEtfVFhXQUlUX1RJTUVPVVRfTVMgKiBcCisJCQkJCQlNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMpCisKKy8qIFNjaGVkdWxpbmcgc2xvcC4gICovCisjZGVmaW5lIE1XTDhLX09TX1NDSEVEVUxFX09WRVJIRUFEX01TCTIwMAorCisjZGVmaW5lIE1XTDhLX0NPTkZJR19USU1FT1VUX01TCShNV0w4S19DTURfVElNRU9VVF9NUyArIFwKKwkJCQkgTVdMOEtfVFhXQUlUX01TICsgXAorCQkJCSBNV0w4S19PU19TQ0hFRFVMRV9PVkVSSEVBRF9NUykKKworc3RhdGljIHZvaWQgbXdsOGtfY29uZmlnX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqd29ya2VyID0gKHN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5odzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlwcml2LT5pbmNvbmZpZyA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwkvKgorCSAqIFdhaXQgZm9yIGhvc3QgcXVldWVzIHRvIGRyYWluIGJlZm9yZSBkb2luZyBQSFkKKwkgKiByZWNvbmZpZ3VyYXRpb24uIFRoaXMgYXZvaWRzIGludGVycnVwdGluZyBhbnkgaW4tZmxpZ2h0CisJICogRE1BIHRyYW5zZmVycyB0byB0aGUgaGFyZHdhcmUuCisJICovCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkpIHsKKwkJdTMyIHRpbWVvdXQ7CisJCXUzMiB0aW1lX3JlbWFpbmluZzsKKwkJdTMyIGl0ZXI7CisJCXUzMiB0eF93YWl0X2F0dGVtcHRzID0gd29ya2VyLT50eHdhaXRfYXR0ZW1wdHM7CisKKwkJdGltZV9yZW1haW5pbmcgPSB3b3JrZXItPnR4X3RpbWVvdXRfbXM7CisJCWlmICghdHhfd2FpdF9hdHRlbXB0cykKKwkJCXR4X3dhaXRfYXR0ZW1wdHMgPSAxOworCisJCXRpbWVvdXQgPSB3b3JrZXItPnR4X3RpbWVvdXRfbXMvdHhfd2FpdF9hdHRlbXB0czsKKwkJaWYgKCF0aW1lb3V0KQorCQkJdGltZW91dCA9IDE7CisKKwkJaXRlciA9IHR4X3dhaXRfYXR0ZW1wdHM7CisJCWRvIHsKKwkJCWludCB3YWl0X3RpbWU7CisKKwkJCWlmICh0aW1lX3JlbWFpbmluZyA+IHRpbWVvdXQpIHsKKwkJCQl0aW1lX3JlbWFpbmluZyAtPSB0aW1lb3V0OworCQkJCXdhaXRfdGltZSA9IHRpbWVvdXQ7CisJCQl9IGVsc2UKKwkJCQl3YWl0X3RpbWUgPSB0aW1lX3JlbWFpbmluZzsKKworCQkJaWYgKCF3YWl0X3RpbWUpCisJCQkJd2FpdF90aW1lID0gMTsKKworCQkJcmMgPSBtd2w4a190eF93YWl0X2VtcHR5KGh3LCB3YWl0X3RpbWUpOworCQkJaWYgKHJjKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0eHdhaXQgdGltZW91dD0ldW1zICIKKwkJCQkJIlJldHJ5OiV1LyV1XG4iLCBfX2Z1bmNfXywgdGltZW91dCwKKwkJCQkJdHhfd2FpdF9hdHRlbXB0cyAtIGl0ZXIgKyAxLAorCQkJCQl0eF93YWl0X2F0dGVtcHRzKTsKKworCQl9IHdoaWxlIChyYyAmJiAtLWl0ZXIpOworCisJCXJjID0gaXRlciA/IDAgOiAtRVRJTUVET1VUOworCX0KKwlpZiAoIXJjKQorCQlyYyA9IHdvcmtlci0+d2Z1bmMod3QpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJcHJpdi0+aW5jb25maWcgPSBmYWxzZTsKKwlpZiAocHJpdi0+cGVuZGluZ190eF9wa3RzICYmIHByaXYtPnJhZGlvX3N0YXRlKQorCQltd2w4a190eF9zdGFydChwcml2KTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisKKwl3b3JrZXItPnJjID0gcmM7CisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NMRUVQKQorCQljb21wbGV0ZSh3b3JrZXItPmNtZF93YWl0KTsKKworCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QpCisJCWtmcmVlKHd0KTsKK30KKworc3RhdGljIGludCBtd2w4a19xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqd29ya2VyLAorCQkJCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cXVldWUsCisJCQkJaW50ICgqd2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwlpbnQgcmMgPSAwOworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCisJaWYgKCF3b3JrZXItPnRpbWVvdXRfbXMpCisJCXdvcmtlci0+dGltZW91dF9tcyA9IE1XTDhLX0NPTkZJR19USU1FT1VUX01TOworCisJaWYgKCF3b3JrZXItPm9wdGlvbnMpCisJCXdvcmtlci0+b3B0aW9ucyA9IE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUzsKKworCWlmICghd29ya2VyLT50eHdhaXRfYXR0ZW1wdHMpCisJCXdvcmtlci0+dHh3YWl0X2F0dGVtcHRzID0gTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTOworCisJaWYgKCF3b3JrZXItPnR4X3RpbWVvdXRfbXMpCisJCXdvcmtlci0+dHhfdGltZW91dF9tcyA9IE1XTDhLX1RYV0FJVF9NUzsKKworCXdvcmtlci0+aHcgPSBodzsKKwl3b3JrZXItPmNtZF93YWl0ID0gJmNtZF93YWl0OworCXdvcmtlci0+cmMgPSAxOworCXdvcmtlci0+d2Z1bmMgPSB3ZnVuYzsKKworCUlOSVRfV09SSygmd29ya2VyLT53dCwgbXdsOGtfY29uZmlnX3RocmVhZCk7CisJcXVldWVfd29yayh3cXVldWUsICZ3b3JrZXItPnd0KTsKKworCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9QT1NUX1JFUVVFU1QpIHsKKwkJcmMgPSAwOworCX0gZWxzZSB7CisJCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TUElOKSB7CisJCQl0aW1lb3V0ID0gd29ya2VyLT50aW1lb3V0X21zOworCQkJd2hpbGUgKHRpbWVvdXQgJiYgKHdvcmtlci0+cmMgPiAwKSkgeworCQkJCW1kZWxheSgxKTsKKwkJCQl0aW1lb3V0LS07CisJCQl9CisJCX0gZWxzZSBpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU0xFRVApCisJCQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbWRfd2FpdCwKKwkJCQltc2Vjc190b19qaWZmaWVzKHdvcmtlci0+dGltZW91dF9tcykpOworCisJCWlmICh0aW1lb3V0KQorCQkJcmMgPSB3b3JrZXItPnJjOworCQllbHNlIHsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJndvcmtlci0+d3QpOworCQkJcmMgPSAtRVRJTUVET1VUOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworfTsKKworc3RhdGljIGludCBtd2w4a19zdGFydF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlpZiAocHJpdi0+dmlmICE9IE5VTEwpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogVHVybiBvbiByYWRpbyAqLworCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogUHVyZ2UgVFgvUlggSFcgcXVldWVzICovCisJaWYgKG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIEVuYWJsZSBmaXJtd2FyZSByYXRlIGFkYXB0YXRpb24gKi8KKwlpZiAobXdsOGtfY21kX3NldHJhdGVhZGFwdG1vZGUoaHcsIDApKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIERpc2FibGUgV01NLiBXTU0gZ2V0cyBlbmFibGVkIHdoZW4gc3RhY2sgc2VuZHMgV01NIHBhcm1zICovCisJaWYgKG13bDhrX3NldF93bW0oaHcsIE1XTDhLX1dNTV9ESVNBQkxFKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBEaXNhYmxlIHNuaWZmZXIgbW9kZSAqLworCWlmIChtd2w4a19lbmFibGVfc25pZmZlcihodywgMCkpCisJCXJjID0gLUVJTzsKKworbXdsOGtfc3RhcnRfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjOworCisJLyogRW5hYmxlIHR4IHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfZW5hYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZtd2w4a19pbnRlcnJ1cHQsCisJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9kaXNhYmxlX3Rhc2tsZXQ7CisJfQorCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlpb3dyaXRlMzIocHJpdi0+aW50X21hc2ssIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG13bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOworCX0KKworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19zdGFydF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAoIXJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCisJcmMgPSAtRUlPOworCittd2w4a19zdGFydF9kaXNhYmxlX2lycToKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKK213bDhrX3N0YXJ0X2Rpc2FibGVfdGFza2xldDoKKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19zdG9wX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfc3RvcF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqd29ya2VyID0gKHN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJaW50IHJjOworCisJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0RJU0FCTEUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBpOworCisJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX3N0b3Bfd3QpOworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworCS8qIFN0b3AgZmluYWxpemUgam9pbiB3b3JrZXIgKi8KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5maW5hbGl6ZV9qb2luX3dvcmtlcik7CisJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKKwkJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKKworCS8qIFN0b3AgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogU3RvcCBjb25maWcgdGhyZWFkICovCisJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAxKTsKK30KKworc3RhdGljIGludCBtd2w4a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2ZSBpbnRlcmZhY2UgYXQgYSB0aW1lLgorCSAqLworCWlmIChwcml2LT52aWYgIT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG1hbmFnZWQgaW50ZXJmYWNlcyBmb3Igbm93LgorCSAqLworCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENsZWFuIG91dCBkcml2ZXIgcHJpdmF0ZSBhcmVhICovCisJbXdsOGtfdmlmID0gTVdMOEtfVklGKGNvbmYtPnZpZik7CisJbWVtc2V0KG13bDhrX3ZpZiwgMCwgc2l6ZW9mKCptd2w4a192aWYpKTsKKworCS8qIFNhdmUgdGhlIG1hYyBhZGRyZXNzICovCisJbWVtY3B5KG13bDhrX3ZpZi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJLyogQmFjayBwb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KKwltd2w4a192aWYtPnByaXYgPSBwcml2OworCisJLyogU2V0dXAgaW5pdGlhbCBQSFkgcGFyYW1ldGVycyAqLworCW1lbWNweShtd2w4a192aWYtPmxlZ2FjeV9yYXRlcyAsCisJCXByaXYtPnJhdGVzLCBzaXplb2YobXdsOGtfdmlmLT5sZWdhY3lfcmF0ZXMpKTsKKwltd2w4a192aWYtPmxlZ2FjeV9ucmF0ZXMgPSBBUlJBWV9TSVpFKHByaXYtPnJhdGVzKTsKKworCS8qIFNldCBJbml0aWFsIHNlcXVlbmNlIG51bWJlciB0byB6ZXJvICovCisJbXdsOGtfdmlmLT5zZXFubyA9IDA7CisKKwlwcml2LT52aWYgPSBjb25mLT52aWY7CisJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAocHJpdi0+dmlmID09IE5VTEwpCisJCXJldHVybjsKKworCXByaXYtPnZpZiA9IE5VTEw7Cit9CisKK3N0cnVjdCBtd2w4a19jb25maWdfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXUzMiBjaGFuZ2VkOworfTsKKworc3RhdGljIGludCBtd2w4a19jb25maWdfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7CisJCW13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IE5VTEw7CisJCXJjID0gMDsKKwkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwl9CisKKwlpZiAobXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19FTkFCTEUpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwl9CisKKwlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCisJaWYgKG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChodywgY29uZi0+Y2hhbm5lbCkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChjb25mLT5wb3dlcl9sZXZlbCA+IDE4KQorCQljb25mLT5wb3dlcl9sZXZlbCA9IDE4OworCWlmIChtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfbWltb19jb25maWcoaHcsIDB4NywgMHg3KSkKKwkJcmMgPSAtRUlOVkFMOworCittd2w4a19jb25maWdfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd29ya2VyLT5jaGFuZ2VkID0gY2hhbmdlZDsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfY29uZmlnX3d0KTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0LlxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJa2ZyZWUod29ya2VyKTsKKworCS8qCisJICogbWFjODAyMTEgd2lsbCBjcmFzaCBvbiBhbnl0aGluZyBvdGhlciB0aGFuIC1FSU5WQUwgb24KKwkgKiBlcnJvci4gTG9va3MgbGlrZSB3aXJlbGVzcyBleHRlbnNpb25zIHdoaWNoIGNhbGxzIG1hYzgwMjExCisJICogbWF5IGJlIHRoZSBhY3R1YWwgY3VscHJpdC4uLgorCSAqLworCXJldHVybiByYyA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXUzMiBjaGFuZ2VkID0gY29uZi0+Y2hhbmdlZDsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQlNTSUQpCisJCW1lbWNweShtdl92aWYtPmJzc2lkLCBjb25mLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvOworCXUzMiBjaGFuZ2VkOworfTsKKworc3RhdGljIGludCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd29ya2VyLT52aWY7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9IHdvcmtlci0+aW5mbzsKKwl1MzIgY2hhbmdlZDsKKwlpbnQgcmM7CisKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCisJY2hhbmdlZCA9IHdvcmtlci0+Y2hhbmdlZDsKKwlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCisJaWYgKGluZm8tPmFzc29jKSB7CisJCW1lbWNweSgmbXdsOGtfdmlmLT5ic3NfaW5mbywgaW5mbywKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7CisKKwkJLyogSW5zdGFsbCByYXRlcyAqLworCQlpZiAobXdsOGtfdXBkYXRlX3JhdGVzZXQoaHcsIHZpZikpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBUdXJuIG9uIHJhdGUgYWRhcHRhdGlvbiAqLworCQlpZiAobXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKGh3LCBNV0w4S19VU0VfQVVUT19SQVRFLAorCQkJTVdMOEtfVUNBU1RfUkFURSwgTlVMTCkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBTZXQgcmFkaW8gcHJlYW1ibGUgKi8KKwkJaWYgKG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShodywKKwkJCQlpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogU2V0IHNsb3QgdGltZSAqLworCQlpZiAobXdsOGtfY21kX3NldF9zbG90KGh3LCBpbmZvLT51c2Vfc2hvcnRfc2xvdCA/CisJCQkJTVdMOEtfU0hPUlRfU0xPVFRJTUUgOiBNV0w4S19MT05HX1NMT1RUSU1FKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFVwZGF0ZSBwZWVyIHJhdGUgaW5mbyAqLworCQlpZiAobXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwKKwkJCQlNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFNldCBBSUQgKi8KKwkJaWYgKG13bDhrX2NtZF9zZXRfYWlkKGh3LCB2aWYpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyoKKwkJICogRmluYWxpemUgdGhlIGpvaW4uICBUZWxsIHJ4IGhhbmRsZXIgdG8gcHJvY2VzcworCQkgKiBuZXh0IGJlYWNvbiBmcm9tIG91ciBCU1NJRC4KKwkJICovCisJCW1lbWNweShwcml2LT5jYXB0dXJlX2Jzc2lkLAorCQkJCW13bDhrX3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisJCXByaXYtPmNhcHR1cmVfYmVhY29uID0gdHJ1ZTsKKwl9IGVsc2UgeworCQltd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLCBNV0w4S19TVEFfREJfREVMX0VOVFJZKTsKKwkJbWVtc2V0KCZtd2w4a192aWYtPmJzc19pbmZvLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKwkJbWVtc2V0KG13bDhrX3ZpZi0+YnNzaWQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisJfQorCittd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ6CisJcmMgPSAwOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCQkJICAgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmM7CisKKwlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgPT0gMCkKKwkJcmV0dXJuOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJd29ya2VyLT52aWYgPSB2aWY7CisJd29ya2VyLT5pbmZvID0gaW5mbzsKKwl3b3JrZXItPmNoYW5nZWQgPSBjaGFuZ2VkOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLAorCQkJICAgICAgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworfQorCitzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3M7CisJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFnczsKKwlpbnQgbWNfY291bnQ7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdDsKK307CisKKyNkZWZpbmUgTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDCisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqKXd0OworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncyA9IHdvcmtlci0+Y2hhbmdlZF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzID0gd29ya2VyLT50b3RhbF9mbGFnczsKKwlpbnQgbWNfY291bnQgPSB3b3JrZXItPm1jX2NvdW50OworCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QgPSB3b3JrZXItPm1jbGlzdDsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmOworCWludCByYyA9IDA7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wcmVfc2Nhbihodyk7CisJCWVsc2UgeworCQkJbXZfdmlmID0gTVdMOEtfVklGKHByaXYtPnZpZik7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCBtdl92aWYtPmJzc2lkKTsKKwkJfQorCX0KKworCWlmIChyYykKKwkJZ290byBtd2w4a19jb25maWd1cmVfZmlsdGVyX2V4aXQ7CisJaWYgKG1jX2NvdW50KSB7CisJCW1jX2NvdW50ID0gbWNfY291bnQgPCBwcml2LT5udW1fbWNhZGRycyA/CisJCQkJbWNfY291bnQgOiBwcml2LT5udW1fbWNhZGRyczsKKwkJcmMgPSBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIoaHcsIG1jX2NvdW50LCBtY2xpc3QpOworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcygpRXJyb3Igc2V0dGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzXG4iLAorCQkJX19mdW5jX18pOworCX0KKworbXdsOGtfY29uZmlndXJlX2ZpbHRlcl9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgIGludCBtY19jb3VudCwKKwkJCQkgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCisJc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCS8qIENsZWFyIHVuc3VwcG9ydGVkIGZlYXR1cmUgZmxhZ3MgKi8KKwkqdG90YWxfZmxhZ3MgJj0gTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTOworCisJaWYgKCEoY2hhbmdlZF9mbGFncyAmIE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUykgJiYgIW1jX2NvdW50KQorCQlyZXR1cm47CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3b3JrZXItPmhlYWRlci5vcHRpb25zID0gTVdMOEtfV1FfUVVFVUVfT05MWSB8IE1XTDhLX1dRX1RYX1dBSVRfRU1QVFk7CisJd29ya2VyLT5jaGFuZ2VkX2ZsYWdzID0gY2hhbmdlZF9mbGFnczsKKwl3b3JrZXItPnRvdGFsX2ZsYWdzID0gdG90YWxfZmxhZ3M7CisJd29ya2VyLT5tY19jb3VudCA9IG1jX2NvdW50OworCXdvcmtlci0+bWNsaXN0ID0gbWNsaXN0OworCisJbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLCBwcml2LT5jb25maWdfd3EsCisJCQkgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93dCk7Cit9CisKK3N0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTMyIHZhbHVlOworfTsKKworc3RhdGljIGludCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXUxNiB0aHJlc2hvbGQgPSAodTE2KSh3b3JrZXItPnZhbHVlKTsKKwlpbnQgcmM7CisKKwlyYyA9IG13bDhrX3J0c190aHJlc2hvbGQoaHcsIE1XTDhLX0NNRF9TRVQsICZ0aHJlc2hvbGQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPnZhbHVlID0gdmFsdWU7CisKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwKKwkJCSAgICAgIG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTE2IHF1ZXVlOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXM7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2NvbmZfdHhfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgKndvcmtlciA9CisJKHN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqKXd0OworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwl1MTYgcXVldWUgPSB3b3JrZXItPnF1ZXVlOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMgPSB3b3JrZXItPnBhcmFtczsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCWlmIChwcml2LT53bW1fbW9kZSA9PSBNV0w4S19XTU1fRElTQUJMRSkKKwkJaWYgKG13bDhrX3NldF93bW0oaHcsIE1XTDhLX1dNTV9FTkFCTEUpKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG13bDhrX2NvbmZfdHhfZXhpdDsKKwl9CisKKwlpZiAobXdsOGtfc2V0X2VkY2FfcGFyYW1zKGh3LCBHRVRfVFhRKHF1ZXVlKSwgcGFyYW1zLT5jd19taW4sCisJCXBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCkpCisJCQlyYyA9IC1FSU5WQUw7Cittd2w4a19jb25mX3R4X2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPnF1ZXVlID0gcXVldWU7CisJd29ya2VyLT5wYXJhbXMgPSBwYXJhbXM7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2NvbmZfdHhfd3QpOworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCWludCBpbmRleDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTVdMOEtfVFhfUVVFVUVTOyBpbmRleCsrKSB7CisJCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCQltZW1jcHkoJnN0YXRzW2luZGV4XSwgJnR4cS0+dHhfc3RhdHMsCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0czsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfZ2V0X3N0YXRzX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqKXd0OworCisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQod29ya2VyLT5oZWFkZXIuaHcsIHdvcmtlci0+c3RhdHMpOworfQorCitzdGF0aWMgaW50IG13bDhrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPnN0YXRzID0gc3RhdHM7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2dldF9zdGF0c193dCk7CisKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bDhrX29wcyA9IHsKKwkudHgJCQk9IG13bDhrX3R4LAorCS5zdGFydAkJCT0gbXdsOGtfc3RhcnQsCisJLnN0b3AJCQk9IG13bDhrX3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gbXdsOGtfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZQk9IG13bDhrX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZwkJCT0gbXdsOGtfY29uZmlnLAorCS5jb25maWdfaW50ZXJmYWNlCT0gbXdsOGtfY29uZmlnX2ludGVyZmFjZSwKKwkuYnNzX2luZm9fY2hhbmdlZAk9IG13bDhrX2Jzc19pbmZvX2NoYW5nZWQsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBtd2w4a19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfcnRzX3RocmVzaG9sZAk9IG13bDhrX3NldF9ydHNfdGhyZXNob2xkLAorCS5jb25mX3R4CQk9IG13bDhrX2NvbmZfdHgsCisJLmdldF90eF9zdGF0cwkJPSBtd2w4a19nZXRfdHhfc3RhdHMsCisJLmdldF9zdGF0cwkJPSBtd2w4a19nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBtd2w4a190eF9yZWNsYWltX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKikgZGF0YTsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAwKTsKKworCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpIHsKKwkJaW50IGNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJCWlmIChjb3VudCA9PSAwKSB7CisJCQljb21wbGV0ZShwcml2LT50eF93YWl0KTsKKwkJCXByaXYtPnR4X3dhaXQgPSBOVUxMOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfZmluYWxpemVfam9pbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2w4a19wcml2LCBmaW5hbGl6ZV9qb2luX3dvcmtlcik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPmJlYWNvbl9za2I7CisJdTggZHRpbSA9IChNV0w4S19WSUYocHJpdi0+dmlmKSktPmJzc19pbmZvLmR0aW1fcGVyaW9kOworCisJbXdsOGtfZmluYWxpemVfam9pbihwcml2LT5odywgc2tiLT5kYXRhLCBza2ItPmxlbiwgZHRpbSk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcHJpdi0+YmVhY29uX3NrYiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG13bDhrX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IHJjOworCWludCBpOworCXU4ICpmdzsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCisJCSAgICAgICBNV0w4S19OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBNV0w4S19OQU1FKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLAorCQkgICAgICAgTVdMOEtfTkFNRSk7CisJCXJldHVybiByYzsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZtd2w4a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsIE1XTDhLX05BTUUpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcmVnOworCX0KKworCXByaXYgPSBody0+cHJpdjsKKwlwcml2LT5odyA9IGh3OworCXByaXYtPnBkZXYgPSBwZGV2OworCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJcHJpdi0+aW5jb25maWcgPSBmYWxzZTsKKwlwcml2LT53ZXBfZW5hYmxlZCA9IDA7CisJcHJpdi0+d21tX21vZGUgPSBmYWxzZTsKKwlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOworCXN0cm5jcHkocHJpdi0+bmFtZSwgTVdMOEtfTkFNRSwgc2l6ZW9mKHByaXYtPm5hbWUpKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5md19sb2NrKTsKKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJcHJpdi0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAxLCAweDEwMDAwKTsKKwlpZiAocHJpdi0+cmVncyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBtd2w4a19jaGFubmVscywgc2l6ZW9mKG13bDhrX2NoYW5uZWxzKSk7CisJcHJpdi0+YmFuZC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7CisJcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShtd2w4a19jaGFubmVscyk7CisJcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOworCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUobXdsOGtfcmF0ZXMpOworCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXMpICE9IHNpemVvZihtd2w4a19yYXRlcykpOworCW1lbWNweShwcml2LT5yYXRlcywgbXdsOGtfcmF0ZXMsIHNpemVvZihtd2w4a19yYXRlcykpOworCisJLyoKKwkgKiBFeHRyYSBoZWFkcm9vbSBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWlyZWQgRE1BIGhlYWRlcgorCSAqIG1pbnVzIHRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCA4MDIuMTEgZnJhbWUgKENUUyBmcmFtZSkuCisJICovCisJaHctPmV4dHJhX3R4X2hlYWRyb29tID0KKwkJc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jdHMpOworCisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDsKKworCWh3LT5xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9NT05JVE9SKTsKKworCS8qIFNldCByc3NpIGFuZCBub2lzZSB2YWx1ZXMgdG8gZEJtICovCisJaHctPmZsYWdzIHw9IChJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8IElFRUU4MDIxMV9IV19OT0lTRV9EQk0pOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2w4a192aWYpOworCXByaXYtPnZpZiA9IE5VTEw7CisKKwkvKiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSBhbmQgcHJlYW1ibGUgKi8KKwlwcml2LT5yYWRpb19wcmVhbWJsZSA9IE1XTDhLX1JBRElPX0RFRkFVTFRfUFJFQU1CTEU7CisJcHJpdi0+cmFkaW9fc3RhdGUgPSBNV0w4S19SQURJT19ESVNBQkxFOworCisJLyogRmluYWxpemUgam9pbiB3b3JrZXIgKi8KKwlJTklUX1dPUksoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyLCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcik7CisKKwkvKiBUWCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2luaXQoJnByaXYtPnR4X3JlY2xhaW1fdGFzaywKKwkJCW13bDhrX3R4X3JlY2xhaW1faGFuZGxlciwgKHVuc2lnbmVkIGxvbmcpaHcpOworCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCS8qIENvbmZpZyB3b3JrdGhyZWFkICovCisJcHJpdi0+Y29uZmlnX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm13bDhrX2NvbmZpZyIpOworCWlmIChwcml2LT5jb25maWdfd3EgPT0gTlVMTCkKKwkJZ290byBlcnJfaW91bm1hcDsKKworCS8qIFBvd2VyIG1hbmFnZW1lbnQgY29va2llICovCisJcHJpdi0+Y29va2llID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwgJnByaXYtPmNvb2tpZV9kbWEpOworCWlmIChwcml2LT5jb29raWUgPT0gTlVMTCkKKwkJZ290byBlcnJfaW91bm1hcDsKKworCXJjID0gbXdsOGtfcnhxX2luaXQoaHcsIDApOworCWlmIChyYykKKwkJZ290byBlcnJfaW91bm1hcDsKKwlyeHFfcmVmaWxsKGh3LCAwLCBJTlRfTUFYKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykgeworCQlyYyA9IG13bDhrX3R4cV9pbml0KGh3LCBpKTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CisJfQorCisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCXByaXYtPmludF9tYXNrID0gMDsKKwlpb3dyaXRlMzIocHJpdi0+aW50X21hc2ssIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCk7CisJaW93cml0ZTMyKDB4ZmZmZmZmZmYsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7CisKKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJm13bDhrX2ludGVycnVwdCwKKwkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CisJfQorCisJLyogUmVzZXQgZmlybXdhcmUgYW5kIGhhcmR3YXJlICovCisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisKKwkvKiBBc2sgdXNlcmxhbmQgaG90cGx1ZyBkYWVtb24gZm9yIHRoZSBkZXZpY2UgZmlybXdhcmUgKi8KKwlyYyA9IG13bDhrX3JlcXVlc3RfZmlybXdhcmUocHJpdiwgKHUzMilpZC0+ZHJpdmVyX2RhdGEpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBmaWxlcyBub3QgZm91bmRcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwkvKiBMb2FkIGZpcm13YXJlIGludG8gaGFyZHdhcmUgKi8KKwlyYyA9IG13bDhrX2xvYWRfZmlybXdhcmUocHJpdik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBzdGFydCBmaXJtd2FyZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogUmVjbGFpbSBtZW1vcnkgb25jZSBmaXJtd2FyZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkICovCisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgZW5hYmxlIGludGVycnVwdHMuICBJbml0aWFsIGZpcm13YXJlIGhvc3QKKwkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWRzIHBvbGxpbmcuICBEaXNhYmxlCisJICogaW50ZXJydXB0cyB3aGVuIGRvbmUuCisJICovCisJcHJpdi0+aW50X21hc2sgfD0gTVdMOEtfQTJIX0VWRU5UUzsKKworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCisJLyogR2V0IGNvbmZpZyBkYXRhLCBtYWMgYWRkcnMgZXRjICovCisJcmMgPSBtd2w4a19jbWRfZ2V0X2h3X3NwZWMoaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgaW5pdGlhbGlzZSBmaXJtd2FyZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogVHVybiByYWRpbyBvZmYgKi8KKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBkaXNhYmxlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKKwlyYyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCWZ3ID0gKHU4ICopJnByaXYtPmZ3X3JldjsKKwlwcmludGsoS0VSTl9JTkZPICIlczogODhXJXUgJXNcbiIsIHByaXYtPm5hbWUsIHByaXYtPnBhcnRfbnVtLAorCQlNV0w4S19ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogRHJpdmVyIFZlcjolcyAgRmlybXdhcmUgVmVyOiV1LiV1LiV1LiV1XG4iLAorCQlwcml2LT5uYW1lLCBNV0w4S19WRVJTSU9OLCBmd1szXSwgZndbMl0sIGZ3WzFdLCBmd1swXSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBBZGRyZXNzOiAlc1xuIiwgcHJpdi0+bmFtZSwKKwkgICAgICAgcHJpbnRfbWFjKG1hYywgaHctPndpcGh5LT5wZXJtX2FkZHIpKTsKKworCXJldHVybiAwOworCitlcnJfc3RvcF9maXJtd2FyZToKKwltd2w4a19od19yZXNldChwcml2KTsKKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCitlcnJfZnJlZV9pcnE6CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCitlcnJfZnJlZV9xdWV1ZXM6CisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKKwltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKKworZXJyX2lvdW5tYXA6CisJaWYgKHByaXYtPmNvb2tpZSAhPSBOVUxMKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsCisJCQkJcHJpdi0+Y29va2llLCBwcml2LT5jb29raWVfZG1hKTsKKworCWlmIChwcml2LT5yZWdzICE9IE5VTEwpCisJCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOworCisJaWYgKHByaXYtPmNvbmZpZ193cSAhPSBOVUxMKQorCQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5jb25maWdfd3EpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKworZXJyX2ZyZWVfcmVnOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXdsOGtfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXByaW50ayhLRVJOX0VSUiAiPT09PiVzKCV1KVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG13bDhrX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCWludCBpOworCisJaWYgKGh3ID09IE5VTEwpCisJCXJldHVybjsKKwlwcml2ID0gaHctPnByaXY7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJLyogUmVtb3ZlIHR4IHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCS8qIFN0b3AgY29uZmlnIHRocmVhZCAqLworCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwkvKiBTdG9wIGhhcmR3YXJlICovCisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisKKwkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAxKTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CisKKwltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKKwkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOworCisJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG13bDhrX2RyaXZlciA9IHsKKwkubmFtZQkJPSBNV0w4S19OQU1FLAorCS5pZF90YWJsZQk9IG13bDhrX3RhYmxlLAorCS5wcm9iZQkJPSBtd2w4a19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG13bDhrX3JlbW92ZSksCisJLnNodXRkb3duCT0gX19kZXZleGl0X3AobXdsOGtfc2h1dGRvd24pLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXdsOGtfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtd2w4a19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXdsOGtfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXdsOGtfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXdsOGtfaW5pdCk7Cittb2R1bGVfZXhpdChtd2w4a19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwppbmRleCAyNGNhZWM2Li5kNjNjODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCkBAIC0yMTAsMTAgKzIxMCw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0d2F2ZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIG5ldHdhdmVfd2F0Y2hkb2coc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLS8qIFN0YXRpc3RpY3MgKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0d2F2ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KIC8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyogbmV0d2F2ZV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTI3NSwxNCArMjcxLDkgQEAKICAgICBpbnQgICAgICAgIGxhc3RFeGVjOwogICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgd2F0Y2hkb2c7CS8qIFRvIGF2b2lkIGJsb2NraW5nIHN0YXRlICovCiAgICAgc3RydWN0IHNpdGVfc3VydmV5ICAgICBuc3M7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgc3RydWN0IGl3X3N0YXRpc3RpY3MgICBpd19zdGF0czsgICAgLyogV2lyZWxlc3Mgc3RhdHMgKi8KIH0gbmV0d2F2ZV9wcml2YXRlOwogCi0jaWZkZWYgTkVUV0FWRV9TVEFUUwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR3YXZlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgotCiAvKgogICogVGhlIE5ldHdhdmUgY2FyZCBpcyBsaXR0bGUtZW5kaWFuLCBzbyB3b24ndCB3b3JrIGZvciBiaWcgZW5kaWFuCiAgKiBzeXN0ZW1zLgpAQCAtMzY0LDYgKzM1NSwxNyBAQAogICAgIHJldHVybiAmcHJpdi0+aXdfc3RhdHM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0d2F2ZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkgCT0gbmV0d2F2ZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXR3YXZlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXR3YXZlX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG5ldHdhdmVfd2F0Y2hkb2csCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBuZXR3YXZlX2F0dGFjaCAodm9pZCkKICAqCkBAIC00MTIsMTcgKzQxNCwxMiBAQAogICAgIHNwaW5fbG9ja19pbml0KCZwcml2LT5zcGlubG9jayk7CiAKICAgICAvKiBOZXR3YXZlIHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZuZXR3YXZlX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5nZXRfc3RhdHMgID0gJm5ldHdhdmVfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbmV0d2F2ZV9uZXRkZXZfb3BzOwogICAgIC8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KLSAgICBkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZuZXR3YXZlX2hhbmRsZXJfZGVmOworICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmbmV0d2F2ZV9oYW5kbGVyX2RlZjsKIAotICAgIGRldi0+dHhfdGltZW91dCA9ICZuZXR3YXZlX3dhdGNoZG9nOwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCi0gICAgZGV2LT5vcGVuID0gJm5ldHdhdmVfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmbmV0d2F2ZV9jbG9zZTsKICAgICBsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKICAgICByZXR1cm4gbmV0d2F2ZV9wY21jaWFfY29uZmlnKCBsaW5rKTsKQEAgLTk4OCw3ICs5ODUsNyBAQAogCXJldHVybiAxOwogICAgIH0KIAotICAgIHByaXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKKyAgICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKIAogICAgIERFQlVHKDMsICJUcmFuc21pdHRpbmcgd2l0aCBTUENRICV4IFNQVSAleCBMSUYgJXggSVNQTFEgJXhcbiIsCiAJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQQ1EpLApAQCAtMTEwNywxMSArMTEwNCwxMSBAQAogCSAgICByc2VyID0gcmVhZGIocmFtQmFzZSArIE5FVFdBVkVfRVJFR19SU0VSKTsJCQkKIAkgICAgCiAJICAgIGlmIChyc2VyICYgMHgwNCkgewotCQkrK3ByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7IAotCQkrK3ByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy5yeF9kcm9wcGVkOworCQkrK2Rldi0+c3RhdHMucnhfY3JjX2Vycm9yczsKIAkgICAgfQogCSAgICBpZiAocnNlciAmIDB4MDIpCi0JCSsrcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzOworCQkrK2Rldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzOwogCQkJCiAJICAgIC8qIENsZWFyIHRoZSBSeEVyciBiaXQgaW4gUlNFUi4gUlNFUis0IGlzIHRoZQogCSAgICAgKiB3cml0ZSBwYXJ0LiBBbHNvIGNsZWFyIHRoZSBSeENSQyAoMHgwNCkgYW5kIApAQCAtMTEyNSw4ICsxMTIyLDggQEAKIAkgICAgd2FpdF9XT0MoaW9iYXNlKTsKIAkgICAgd3JpdGViKDB4NDAsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfQVNDQyk7CiAKLQkgICAgLyogUmVtZW1iZXIgdG8gY291bnQgdXAgcHJpdi0+c3RhdHMgb24gZXJyb3IgcGFja2V0cyAqLwotCSAgICArK3ByaXYtPnN0YXRzLnJ4X2Vycm9yczsKKwkgICAgLyogUmVtZW1iZXIgdG8gY291bnQgdXAgZGV2LT5zdGF0cyBvbiBlcnJvciBwYWNrZXRzICovCisJICAgICsrZGV2LT5zdGF0cy5yeF9lcnJvcnM7CiAJfQogCS8qIFR4RE4gKi8KIAlpZiAoc3RhdHVzICYgMHgyMCkgewpAQCAtMTE0MCwxNyArMTEzNywxNyBAQAogCQkvKiBUcmFuc21pdHRpbmcgd2FzIG9rYXksIGNsZWFyIGJpdHMgKi8KIAkJd2FpdF9XT0MoaW9iYXNlKTsKIAkJd3JpdGViKDB4MmYsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfVFNFUiArIDQpOwotCQkrK3ByaXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCSAgICB9CiAJCQkKIAkgICAgaWYgKHR4U3RhdHVzICYgMHhkMCkgewogCQlpZiAodHhTdGF0dXMgJiAweDgwKSB7Ci0JCSAgICArK3ByaXYtPnN0YXRzLmNvbGxpc2lvbnM7IC8qIEJlY2F1c2Ugb2YgL3Byb2MvbmV0L2RldiovCi0JCSAgICAvKiArK3ByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzOyAqLworCQkgICAgKytkZXYtPnN0YXRzLmNvbGxpc2lvbnM7IC8qIEJlY2F1c2Ugb2YgL3Byb2MvbmV0L2RldiovCisJCSAgICAvKiArK2Rldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnM7ICovCiAJCSAgICAvKiBwcmludGsoIkNvbGxpc2lvbi4gJWxkXG4iLCBqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydCk7ICovCiAJCX0KIAkJaWYgKHR4U3RhdHVzICYgMHg0MCkgCi0JCSAgICArK3ByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzOworCQkgICAgKytkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzOwogCQkvKiAweDgwIFR4R1UgVHJhbnNtaXQgZ2l2ZXVwIC0gbmluZSB0aW1lcyBhbmQgbm8gbHVjawogCQkgKiAweDQwIFR4Tk9BUCBObyBhY2Nlc3MgcG9pbnQuIERpc2NhcmRlZCBwYWNrZXQuCiAJCSAqIDB4MTAgVHhFcnIgVHJhbnNtaXQgZXJyb3IuIEFsd2F5cyBzZXQgd2hlbiAKQEAgLTExNjMsNyArMTE2MCw3IEBACiAJCS8qIENsZWFyIG91dCBUeEdVLCBUeE5PQVAsIFR4RXJyIGFuZCBUeFRyeXMgKi8KIAkJd2FpdF9XT0MoaW9iYXNlKTsKIAkJd3JpdGViKDB4ZGYgJiB0eFN0YXR1cywgcmFtQmFzZStORVRXQVZFX0VSRUdfVFNFUis0KTsKLQkJKytwcml2LT5zdGF0cy50eF9lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAJICAgIH0KIAkgICAgREVCVUcoMywgIk5ldyBzdGF0dXMgaXMgVFNFUiAleCBBU1IgJXhcbiIsCiAJCSAgcmVhZGIocmFtQmFzZSArIE5FVFdBVkVfRVJFR19UU0VSKSwKQEAgLTExOTcsNDAgKzExOTQsNiBAQAogICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0gLyogbmV0d2F2ZV93YXRjaGRvZyAqLwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHdhdmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0gICAgdXBkYXRlX3N0YXRzKGRldik7Ci0KLSAgICBERUJVRygyLCAibmV0d2F2ZTogU1BDUSAleCBTUFUgJXggTElGICV4IElTUExRICV4IE1IUyAleCByeHR4ICV4IgotCSAgIiAleCB0eCAleCAleCAleCAleFxuIiwgCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQQ1EpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19TUFUpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19MSUYpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19JU1BMUSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX01IUyksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHhlKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweGYpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MTgpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MTkpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MWEpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MWIpKTsKLQotICAgIHJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgLy91bnNpZ25lZCBsb25nIGZsYWdzOwotLyogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7ICovCi0KLSAgICAvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOwotCi0vKiAgICBwcml2LT5zdGF0cy5yeF9wYWNrZXRzID0gcmVhZGIocHJpdi0+cmFtQmFzZSArIDB4MThlKTsgCi0gICAgcHJpdi0+c3RhdHMudHhfcGFja2V0cyA9IHJlYWRiKHByaXYtPnJhbUJhc2UgKyAweDE4Zik7ICovCi0KLSAgICAvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgbmV0d2F2ZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjc0LDcgKzEyMzcsNyBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCSAgICBERUJVRygxLCAibmV0d2F2ZV9yeDogQ291bGQgbm90IGFsbG9jYXRlIGFuIHNrX2J1ZmYgb2YgIgogCQkgICJsZW5ndGggJWRcbiIsIHJjdkxlbik7Ci0JICAgICsrcHJpdi0+c3RhdHMucnhfZHJvcHBlZDsgCisJICAgICsrZGV2LT5zdGF0cy5yeF9kcm9wcGVkOwogCSAgICAvKiBUZWxsIHRoZSBhZGFwdGVyIHRvIHNraXAgdGhlIHBhY2tldCAqLwogCSAgICB3YWl0X1dPQyhpb2Jhc2UpOwogCSAgICB3cml0ZWIoTkVUV0FWRV9DTURfU1JQLCByYW1CYXNlICsgTkVUV0FWRV9FUkVHX0NCICsgMCk7CkBAIC0xMzA3LDggKzEyNzAsOCBAQAogCS8qIFF1ZXVlIHBhY2tldCBmb3IgbmV0d29yayBsYXllciAqLwogCW5ldGlmX3J4KHNrYik7CiAKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcmN2TGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcmN2TGVuOwogCiAJLyogR290IHRoZSBwYWNrZXQsIHRlbGwgdGhlIGFkYXB0ZXIgdG8gc2tpcCBpdCAqLwogCXdhaXRfV09DKGlvYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0MTFlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZwpAQCAtMCwwICsxLDEyMCBAQAorY29uZmlnIEhFUk1FUworCXRyaXN0YXRlICJIZXJtZXMgY2hpcHNldCA4MDIuMTFiIHN1cHBvcnQgKE9yaW5vY28vUHJpc20yL1N5bWJvbCkiCisJZGVwZW5kcyBvbiAoUFBDX1BNQUMgfHwgUENJIHx8IFBDTUNJQSkgJiYgV0xBTl84MDIxMQorCXNlbGVjdCBXSVJFTEVTU19FWFQKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fTUlDSEFFTF9NSUMKKwktLS1oZWxwLS0tCisJICBBIGRyaXZlciBmb3IgODAyLjExYiB3aXJlbGVzcyBjYXJkcyBiYXNlZCBvbiB0aGUgIkhlcm1lcyIgb3IKKwkgIEludGVyc2lsIEhGQTM4NHggKFByaXNtIDIpIE1BQyBjb250cm9sbGVyLiAgVGhpcyBpbmNsdWRlcyB0aGUgdmFzdAorCSAgbWFqb3JpdHkgb2YgdGhlIFBDTUNJQSA4MDIuMTFiIGNhcmRzICh3aGljaCBhcmUgbmVhcmx5IGFsbCByZWJhZGdlcykKKwkgIC0gZXhjZXB0IGZvciB0aGUgQ2lzY28vQWlyb25ldCBjYXJkcy4gIENhcmRzIHN1cHBvcnRlZCBpbmNsdWRlIHRoZQorCSAgQXBwbGUgQWlycG9ydCAobm90IGEgUENNQ0lBIGNhcmQpLCBXYXZlbGFuSUVFRS9Pcmlub2NvLAorCSAgQ2FibGV0cm9uL0VudGVyYVN5cyBSb2FtYWJvdXQsIEVMU0EgQWlyTGFuY2VyLCBNRUxDTyBCdWZmYWxvLCBBdmF5YSwKKwkgIElCTSBIaWdoIFJhdGUgV2lyZWxlc3MsIEZhcnJhbG9uIFN5eWxpbmUsIFNhbXN1bmcgTWFnaWNMQU4sIE5ldGdlYXIKKwkgIE1BNDAxLCBMaW5rU3lzIFdQQy0xMSwgRC1MaW5rIERXTC02NTAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwKKwkgIElQVzIwMTEsIGFuZCBTeW1ib2wgU3BlY3RydW0yNCBIaWdoIFJhdGUgYW1vbmdzdCBvdGhlcnMuCisKKwkgIFRoaXMgb3B0aW9uIGluY2x1ZGVzIHRoZSBndXRzIG9mIHRoZSBkcml2ZXIsIGJ1dCBpbiBvcmRlciB0bworCSAgYWN0dWFsbHkgdXNlIGEgY2FyZCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQQorCSAgSGVybWVzIGNhcmRzLCBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9ycyBvciB0aGUgQXBwbGUgQWlycG9ydCBiZWxvdy4KKworCSAgWW91IHdpbGwgYWxzbyB2ZXJ5IGxpa2VseSBhbHNvIG5lZWQgdGhlIFdpcmVsZXNzIFRvb2xzIGluIG9yZGVyIHRvCisJICBjb25maWd1cmUgeW91ciBjYXJkIGFuZCB0aGF0IC9ldGMvcGNtY2lhL3dpcmVsZXNzLm9wdHMgd29ya3MgOgorCSAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4KKworY29uZmlnIEhFUk1FU19DQUNIRV9GV19PTl9JTklUCisJYm9vbCAiQ2FjaGUgSGVybWVzIGZpcm13YXJlIG9uIGRyaXZlciBpbml0aWFsaXNhdGlvbiIKKwlkZXBlbmRzIG9uIEhFUk1FUworCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIHRvIGNhY2hlIGFueSBmaXJtd2FyZSByZXF1aXJlZCBieSB0aGUgSGVybWVzIGRyaXZlcnMKKwkgIG9uIHN0YXJ0dXAuICBUaGUgZmlybXdhcmUgd2lsbCByZW1haW4gY2FjaGVkIHVudGlsIHRoZQorCSAgZHJpdmVyIGlzIHVubG9hZGVkLiAgVGhlIGNhY2hlIHVzZXMgNjRLIG9mIFJBTS4KKworCSAgT3RoZXJ3aXNlIGxvYWQgdGhlIGZpcm13YXJlIGZyb20gdXNlcnNwYWNlIGFzIHJlcXVpcmVkLiAgSW4KKwkgIHRoaXMgY2FzZSB0aGUgZHJpdmVyIHNob3VsZCBiZSB1bmxvYWRlZCBhbmQgcmVzdGFydGVkCisJICB3aGVuZXZlciB0aGUgZmlybXdhcmUgaXMgY2hhbmdlZC4KKworCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBBUFBMRV9BSVJQT1JUCisJdHJpc3RhdGUgIkFwcGxlIEFpcnBvcnQgc3VwcG9ydCAoYnVpbHQtaW4pIgorCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgSEVSTUVTCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBaXJwb3J0IDgwMi4xMWIgd2lyZWxlc3MgRXRoZXJuZXQgaGFyZHdhcmUKKwkgIGJ1aWx0IGludG8gdGhlIE1hY2ludG9zaCBpQm9vayBhbmQgb3RoZXIgcmVjZW50IFBvd2VyUEMtYmFzZWQKKwkgIE1hY2ludG9zaCBtYWNoaW5lcy4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIEx1Y2VudCBPcmlub2NvIGNhcmQgd2l0aAorCSAgYSBub24tc3RhbmRhcmQgaW50ZXJmYWNlLgorCisJICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBaXJwb3J0IEV4dHJlbWUgKDgwMi4xMWIvZykuIFVzZQorCSAgdGhlIEJDTTQzeHggZHJpdmVyIGZvciBBaXJwb3J0IEV4dHJlbWUgY2FyZHMuCisKK2NvbmZpZyBQTFhfSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQgKE5ldGdlYXIgTUEzMDEgZXRjLikiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKKwkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQorCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAorCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0CisJICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLiAgVGhlIE5ldGdlYXIKKwkgIE1BMzAxIGlzIHN1Y2ggYW4gYWRhcHRvci4KKworY29uZmlnIFRNRF9IRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQorCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCisJICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCisJICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKKwkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuCisKK2NvbmZpZyBOT1JURUxfSEVSTUVTCisJdHJpc3RhdGUgIk5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQorCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9ycy4gIFRoZXNlCisJICBhZGFwdG9ycyBhcmUgbm90IGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXJzLCBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCisJICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuCisKK2NvbmZpZyBQQ0lfSEVSTUVTCisJdHJpc3RhdGUgIlByaXNtIDIuNSBQQ0kgODAyLjExYiBhZGFwdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDSSBhbmQgbWluaS1QQ0kgODAyLjExYiB3aXJlbGVzcyBOSUNzIGJhc2VkIG9uCisJICB0aGUgUHJpc20gMi41IGNoaXBzZXQuICBUaGVzZSBhcmUgdHJ1ZSBQQ0kgY2FyZHMsIG5vdCB0aGUgODAyLjExYgorCSAgUENNQ0lBIGNhcmRzIGJ1bmRsZWQgd2l0aCBQQ0k8LT5QQ01DSUEgYWRhcHRvcnMgd2hpY2ggYXJlIGFsc28KKwkgIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1aWx0LWluIHdpcmVsZXNzIGFkYXB0b3JzIGluIGxhcHRvcHMgYXJlIG9mCisJICB0aGlzIHZhcmlldHkuCisKK2NvbmZpZyBQQ01DSUFfSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBQQ01DSUEgY2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcyBhZGFwdG9ycywgc3VjaAorCSAgYXMgdGhlIEx1Y2VudCBXYXZlbGFuSUVFRS9Pcmlub2NvIGNhcmRzIGFuZCB0aGVpciBPRU0gKENhYmxldHJvbi8KKwkgIEVudGVyYVN5cyBSb2FtQWJvdXQgODAyLjExLCBFTFNBIEFpcmxhbmNlciwgTWVsY28gQnVmZmFsbyBhbmQKKwkgIG90aGVycykuICBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcworCSAgc3VjaCBhcyB0aGUgTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiAgSXQgc2hvdWxkIGFsc28KKwkgIHdvcmsgb24gU3ltYm9sIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KKworCSAgWW91IHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KKwkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrczoKKwkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgorCitjb25maWcgUENNQ0lBX1NQRUNUUlVNCisJdHJpc3RhdGUgIlN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgUENNQ0lBIGNhcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKKwktLS1oZWxwLS0tCisKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbAorCSAgZmlybXdhcmUsIHN1Y2ggYXMgU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaAorCSAgY2FyZHMgYnkgU29ja2V0IENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCisKKwkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGRvd25sb2FkIG9uIHN0YXJ0dXAuICBVdGlsaXRpZXMKKwkgIGZvciBkb3dubG9hZGluZyBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAorCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQppbmRleCA3OTEzNjZlLi4xZmM3NDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKQEAgLTEsOCArMSw5IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgb3Jpbm9jbyB3aXJlbGVzcyBkZXZpY2UgZHJpdmVycy4KICMKK29yaW5vY28tb2JqcyA6PSBtYWluLm8gZncubyBody5vIG1pYy5vIHNjYW4ubyB3ZXh0Lm8gaGVybWVzX2RsZC5vIGhlcm1lcy5vCiAKLW9iai0kKENPTkZJR19IRVJNRVMpCQkrPSBvcmlub2NvLm8gaGVybWVzLm8gaGVybWVzX2RsZC5vCitvYmotJChDT05GSUdfSEVSTUVTKQkJKz0gb3Jpbm9jby5vCiBvYmotJChDT05GSUdfUENNQ0lBX0hFUk1FUykJKz0gb3Jpbm9jb19jcy5vCiBvYmotJChDT05GSUdfQVBQTEVfQUlSUE9SVCkJKz0gYWlycG9ydC5vCiBvYmotJChDT05GSUdfUExYX0hFUk1FUykJKz0gb3Jpbm9jb19wbHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYwppbmRleCAyOGYxY2FlLi44YzQwNjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYwpAQCAtMywxMCArMywxMCBAQAogICogQSBkcml2ZXIgZm9yICJIZXJtZXMiIGNoaXBzZXQgYmFzZWQgQXBwbGUgQWlycG9ydCB3aXJlbGVzcwogICogY2FyZC4KICAqCi0gKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG9yaW5vY28uYwotICogCisgKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG1haW4uYworICoKICAqIE5vdGUgc3BlY2lmaWMgdG8gYWlycG9ydCBzdHViOgotICogCisgKgogICogIDAuMDUgOiBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBuZXcgc3BsaXQgZHJpdmVyCiAgKiAgMC4wNiA6IGZpeCBwb3NzaWJsZSBoYW5nIG9uIHBvd2VydXAsIGFkZCBzbGVlcCBzdXBwb3J0CiAgKi8KQEAgLTYwLDcgKzYwLDggQEAKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzUsNyArNzYsOCBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBaXJwb3J0IHdha2luZyB1cFxuIiwgZGV2LT5uYW1lKTsKIAotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKIAltc2xlZXAoMjAwKTsKIAogCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwpAQCAtOTMsNyArOTUsNyBAQAogCiAJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKIAotCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CiAJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIFBCT09LX1dBS0VcbiIsCkBAIC0xMjcsNyArMTI5LDggQEAKIAogCW1hY2lvX3JlbGVhc2VfcmVzb3VyY2UobWRldiwgMCk7CiAKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CiAJc3NsZWVwKDEpOwogCiAJbWFjaW9fc2V0X2RydmRhdGEobWRldiwgTlVMTCk7CkBAIC0xNTMsOSArMTU2LDExIEBACiAJICogb2ZmLiAqLwogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKIAotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMCk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAwKTsKIAlzc2xlZXAoMSk7Ci0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAxKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDEpOwogCXNzbGVlcCgxKTsKIAogCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwpAQCAtMTgyLDcgKzE4Nyw3IEBACiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZtZGV2LT5vZmRldi5kZXYsCiAJCQkgICAgICAgYWlycG9ydF9oYXJkX3Jlc2V0LCBOVUxMKTsKLQlpZiAoISBkZXYpIHsKKwlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMTQsOSArMjE5LDEwIEBACiAJfQogCiAJaGVybWVzX3N0cnVjdF9pbml0KGh3LCBjYXJkLT52YWRkciwgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwotCQkKKwogCS8qIFBvd2VyIHVwIGNhcmQgKi8KLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CiAJc3NsZWVwKDEpOwogCiAJLyogUmVzZXQgaXQgYmVmb3JlIHdlIGdldCB0aGUgaW50ZXJydXB0ICovCkBAIC0yNDgsNyArMjU0LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgQXBwbGUgQWlycG9ydCB3aXJlbGVzcyBjYXJkLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhaXJwb3J0X21hdGNoW10gPSAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFpcnBvcnRfbWF0Y2hbXSA9CiB7CiAJewogCS5uYW1lIAkJPSAicmFkaW8iLApAQCAtMjU2LDEwICsyNjIsOSBAQAogCXt9LAogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAob2YsIGFpcnBvcnRfbWF0Y2gpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWlycG9ydF9tYXRjaCk7CiAKLXN0YXRpYyBzdHJ1Y3QgbWFjaW9fZHJpdmVyIGFpcnBvcnRfZHJpdmVyID0gCi17CitzdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBhaXJwb3J0X2RyaXZlciA9IHsKIAkubmFtZSAJCT0gRFJJVkVSX05BTUUsCiAJLm1hdGNoX3RhYmxlCT0gYWlycG9ydF9tYXRjaCwKIAkucHJvYmUJCT0gYWlycG9ydF9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NGI0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwpAQCAtMCwwICsxLDM5MCBAQAorLyogRmlybXdhcmUgZmlsZSByZWFkaW5nIGFuZCBkb3dubG9hZCBoZWxwZXJzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAiaGVybWVzX2RsZC5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgImZ3LmgiCisKKy8qIEVuZCBtYXJrZXJzIChmb3IgU3ltYm9sIGZpcm13YXJlIG9ubHkpICovCisjZGVmaW5lIFRFWFRfRU5ECTB4MUEJCS8qIEVuZCBvZiB0ZXh0IGhlYWRlciAqLworCitzdHJ1Y3QgZndfaW5mbyB7CisJY2hhciAqcHJpX2Z3OworCWNoYXIgKnN0YV9mdzsKKwljaGFyICphcF9mdzsKKwl1MzIgcGRhX2FkZHI7CisJdTE2IHBkYV9zaXplOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmd19pbmZvIG9yaW5vY29fZndbXSA9IHsKKwl7IE5VTEwsICJhZ2VyZV9zdGFfZncuYmluIiwgImFnZXJlX2FwX2Z3LmJpbiIsIDB4MDAzOTAwMDAsIDEwMDAgfSwKKwl7IE5VTEwsICJwcmlzbV9zdGFfZncuYmluIiwgInByaXNtX2FwX2Z3LmJpbiIsIDAsIDEwMjQgfSwKKwl7ICJzeW1ib2xfc3AyNHRfcHJpbV9mdyIsICJzeW1ib2xfc3AyNHRfc2VjX2Z3IiwgTlVMTCwgMHgwMDAwMzEwMCwgNTEyIH0KK307CisKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGFjY2VzcyBmaWVsZHMgaW4gRlcKKyAqIE1ha2Ugc3VyZSBMRSBkZWNvZGluZyBtYWNyb3MgYXJlIHVzZWQKKyAqLworc3RydWN0IG9yaW5vY29fZndfaGVhZGVyIHsKKwljaGFyIGhkcl92ZXJzWzZdOyAgICAgICAvKiBBU0NJSSBzdHJpbmcgZm9yIGhlYWRlciB2ZXJzaW9uICovCisJX19sZTE2IGhlYWRlcnNpemU7ICAgICAgLyogVG90YWwgbGVuZ3RoIG9mIGhlYWRlciAqLworCV9fbGUzMiBlbnRyeV9wb2ludDsgICAgIC8qIE5JQyBlbnRyeSBwb2ludCAqLworCV9fbGUzMiBibG9ja3M7ICAgICAgICAgIC8qIE51bWJlciBvZiBibG9ja3MgdG8gcHJvZ3JhbSAqLworCV9fbGUzMiBibG9ja19vZmZzZXQ7ICAgIC8qIE9mZnNldCBvZiBibG9jayBkYXRhIGZyb20gZW9mIGhlYWRlciAqLworCV9fbGUzMiBwZHJfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBQRFIgZGF0YSBmcm9tIGVvZiBoZWFkZXIgKi8KKwlfX2xlMzIgcHJpX29mZnNldDsgICAgICAvKiBPZmZzZXQgdG8gcHJpbWFyeSBwbHVnIGRhdGEgKi8KKwlfX2xlMzIgY29tcGF0X29mZnNldDsgICAvKiBPZmZzZXQgdG8gY29tcGF0aWJpbGl0eSBkYXRhKi8KKwljaGFyIHNpZ25hdHVyZVswXTsgICAgICAvKiBGVyBzaWduYXR1cmUgbGVuZ3RoIGhlYWRlcnNpemUtMjAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBDaGVjayB0aGUgcmFuZ2Ugb2YgdmFyaW91cyBoZWFkZXIgZW50cmllcy4gUmV0dXJuIGEgcG9pbnRlciB0byBhCisgKiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbSwgb3IgTlVMTCBpZiBldmVyeXRoaW5nIGNoZWNrcyBvdXQuICovCitzdGF0aWMgY29uc3QgY2hhciAqdmFsaWRhdGVfZncoY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHIsIHNpemVfdCBsZW4pCit7CisJdTE2IGhkcnNpemU7CisKKwlpZiAobGVuIDwgc2l6ZW9mKCpoZHIpKQorCQlyZXR1cm4gImltYWdlIHRvbyBzbWFsbCI7CisJaWYgKG1lbWNtcChoZHItPmhkcl92ZXJzLCAiSEZXIiwgMykgIT0gMCkKKwkJcmV0dXJuICJmb3JtYXQgbm90IHJlY29nbmlzZWQiOworCisJaGRyc2l6ZSA9IGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSk7CisJaWYgKGhkcnNpemUgPiBsZW4pCisJCXJldHVybiAiYmFkIGhlYWRlcnNpemUiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+YmxvY2tfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIGJsb2NrIG9mZnNldCI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5wZHJfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIFBEUiBvZmZzZXQiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+cHJpX29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBQUkkgb2Zmc2V0IjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPmNvbXBhdF9vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgY29tcGF0IG9mZnNldCI7CisKKwkvKiBUT0RPOiBjb25zaWRlciBhZGRpbmcgYSBjaGVja3N1bSBvciBDUkMgdG8gdGhlIGZpcm13YXJlIGZvcm1hdCAqLworCXJldHVybiBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKgorb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGJvb2wgcHJpbWFyeSkKK3sKKwlpZiAocHJpbWFyeSkKKwkJcmV0dXJuIHByaXYtPmNhY2hlZF9wcmlfZnc7CisJZWxzZQorCQlyZXR1cm4gcHJpdi0+Y2FjaGVkX2Z3OworfQorI2Vsc2UKKyNkZWZpbmUgb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHByaW1hcnkpIChOVUxMKQorI2VuZGlmCisKKy8qIERvd25sb2FkIGVpdGhlciBTVEEgb3IgQVAgZmlybXdhcmUgaW50byB0aGUgY2FyZC4gKi8KK3N0YXRpYyBpbnQKK29yaW5vY29fZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJICAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKKwkJICAgIGludCBhcCkKK3sKKwkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLworCV9fbGUxNiAqcGRhOworCisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7CisJY29uc3Qgdm9pZCAqZW5kOworCWNvbnN0IGNoYXIgKmZpcm13YXJlOworCWNvbnN0IGNoYXIgKmZ3X2VycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlpbnQgZXJyID0gMDsKKworCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYXApCisJCWZpcm13YXJlID0gZnctPmFwX2Z3OworCWVsc2UKKwkJZmlybXdhcmUgPSBmdy0+c3RhX2Z3OworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBdHRlbXB0aW5nIHRvIGRvd25sb2FkIGZpcm13YXJlICVzXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKKworCS8qIFJlYWQgY3VycmVudCBwbHVnIGRhdGEgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDApOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVhZCBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWU7CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKKwkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZpcm13YXJlLCBwcml2LT5kZXYpOworCisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gZnJlZTsKKwkJfQorCX0gZWxzZQorCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSk7CisKKwloZHIgPSAoY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICopIGZ3X2VudHJ5LT5kYXRhOworCisJZndfZXJyID0gdmFsaWRhdGVfZncoaGRyLCBmd19lbnRyeS0+c2l6ZSk7CisJaWYgKGZ3X2VycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBmaXJtd2FyZSBpbWFnZSBkZXRlY3RlZCAoJXMpLiAiCisJCSAgICAgICAiQWJvcnRpbmcgZG93bmxvYWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGZ3X2Vycik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJLyogRW5hYmxlIGF1eCBwb3J0IHRvIGFsbG93IHByb2dyYW1taW5nICovCisJZXJyID0gaGVybWVzaV9wcm9ncmFtX2luaXQoaHcsIGxlMzJfdG9fY3B1KGhkci0+ZW50cnlfcG9pbnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gaW5pdCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBhYm9ydDsKKworCS8qIFByb2dyYW0gZGF0YSAqLworCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKworCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKTsKKwllbmQgPSBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplOworCisJZXJyID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBhYm9ydDsKKworCS8qIFVwZGF0ZSBwcm9kdWN0aW9uIGRhdGEgKi8KKwlmaXJzdF9ibG9jayA9IChmd19lbnRyeS0+ZGF0YSArCisJCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpICsKKwkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+cGRyX29mZnNldCkpOworCisJZXJyID0gaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGh3LCBmaXJzdF9ibG9jaywgZW5kLCBwZGEsCisJCQkJCSAgICAgJnBkYVtmdy0+cGRhX3NpemUgLyBzaXplb2YoKnBkYSldKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIpCisJCWdvdG8gYWJvcnQ7CisKKwkvKiBUZWxsIGNhcmQgd2UndmUgZmluaXNoZWQgKi8KKwllcnIgPSBoZXJtZXNpX3Byb2dyYW1fZW5kKGh3KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gZW5kIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIGFib3J0OworCisJLyogQ2hlY2sgaWYgd2UncmUgcnVubmluZyAqLworCXByaW50ayhLRVJOX0RFQlVHICIlczogaGVybWVzX3ByZXNlbnQgcmV0dXJuZWQgJWRcbiIsCisJICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3ByZXNlbnQoaHcpKTsKKworYWJvcnQ6CisJLyogSWYgd2UgcmVxdWVzdGVkIHRoZSBmaXJtd2FyZSwgcmVsZWFzZSBpdC4gKi8KKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpCisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCitmcmVlOgorCWtmcmVlKHBkYSk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFByb2Nlc3MgYSBmaXJtd2FyZSBpbWFnZSAtIHN0b3AgdGhlIGNhcmQsIGxvYWQgdGhlIGZpcm13YXJlLCByZXNldAorICogdGhlIGNhcmQgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcy4gIEZvciB0aGUgc2Vjb25kYXJ5IGZpcm13YXJlIHRha2UKKyAqIGNhcmUgb2YgdGhlIFBEQSAtIHJlYWQgaXQgYW5kIHRoZW4gd3JpdGUgaXQgb24gdG9wIG9mIHRoZSBmaXJtd2FyZS4KKyAqLworc3RhdGljIGludAorc3ltYm9sX2RsX2ltYWdlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW1hZ2UsIGNvbnN0IHZvaWQgKmVuZCwKKwkJaW50IHNlY29uZGFyeSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IHJldCA9IDA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpcnN0X2Jsb2NrOworCisJLyogUGx1ZyBEYXRhIEFyZWEgKFBEQSkgKi8KKwlfX2xlMTYgKnBkYSA9IE5VTEw7CisKKwkvKiBCaW5hcnkgYmxvY2sgYmVnaW5zIGFmdGVyIHRoZSAweDFBIG1hcmtlciAqLworCXB0ciA9IGltYWdlOworCXdoaWxlICgqcHRyKysgIT0gVEVYVF9FTkQpOworCWZpcnN0X2Jsb2NrID0gcHRyOworCisJLyogUmVhZCB0aGUgUERBIGZyb20gRUVQUk9NICovCisJaWYgKHNlY29uZGFyeSkgeworCQlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGRhKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwkvKiBTdG9wIHRoZSBmaXJtd2FyZSwgc28gdGhhdCBpdCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbiAqLworCWlmIChwcml2LT5zdG9wX2Z3KSB7CisJCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWU7CisJfQorCisJLyogUHJvZ3JhbSB0aGUgYWRhcHRlciB3aXRoIG5ldyBmaXJtd2FyZSAqLworCXJldCA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwkvKiBXcml0ZSB0aGUgUERBIHRvIHRoZSBhZGFwdGVyICovCisJaWYgKHNlY29uZGFyeSkgeworCQlzaXplX3QgbGVuID0gaGVybWVzX2Jsb2Nrc19sZW5ndGgoZmlyc3RfYmxvY2ssIGVuZCk7CisJCXB0ciA9IGZpcnN0X2Jsb2NrICsgbGVuOworCQlyZXQgPSBoZXJtZXNfYXBwbHlfcGRhKGh3LCBwdHIsIGVuZCwgcGRhLAorCQkJCSAgICAgICAmcGRhW2Z3LT5wZGFfc2l6ZSAvIHNpemVvZigqcGRhKV0pOworCQlrZnJlZShwZGEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSdW4gdGhlIGZpcm13YXJlICovCisJaWYgKHByaXYtPnN0b3BfZncpIHsKKwkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVzZXQgaGVybWVzIGNoaXAgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcyAqLworCXJldCA9IGhlcm1lc19pbml0KGh3KTsKKworCS8qIGhlcm1lc19yZXNldCgpIHNob3VsZCByZXR1cm4gMCB3aXRoIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgKi8KKwlpZiAoc2Vjb25kYXJ5ICYmIHJldCAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEFuZCB0aGlzIHNob3VsZCB3b3JrIHdpdGggYW55IGZpcm13YXJlICovCisJaWYgKCFoZXJtZXNfcHJlc2VudChodykpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7CisKK2ZyZWU6CisJa2ZyZWUocGRhKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBEb3dubG9hZCB0aGUgZmlybXdhcmUgaW50byB0aGUgY2FyZCwgdGhpcyBhbHNvIGRvZXMgYSBQQ01DSUEgc29mdAorICogcmVzZXQgb24gdGhlIGNhcmQsIHRvIG1ha2Ugc3VyZSBpdCdzIGluIGEgc2FuZSBzdGF0ZS4KKyAqLworc3RhdGljIGludAorc3ltYm9sX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCSAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKSkgeworCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5wcmlfZncsIHByaXYtPmRldikgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnByaV9mdyk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCX0gZWxzZQorCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKTsKKworCS8qIExvYWQgcHJpbWFyeSBmaXJtd2FyZSAqLworCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCisJCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAwKTsKKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+c3RhX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5zdGFfZncpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwl9IGVsc2UKKwkJZndfZW50cnkgPSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpOworCisJLyogTG9hZCBzZWNvbmRhcnkgZmlybXdhcmUgKi8KKwlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAorCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMSk7CisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFNlY29uZGFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBvcmlub2NvX2Rvd25sb2FkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaW50IGVyciA9IDA7CisJLyogUmVsb2FkIGZpcm13YXJlICovCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBjYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6ICovCisJCWVyciA9IG9yaW5vY29fZGxfZmlybXdhcmUocHJpdiwKKwkJCQkJICAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJZXJyID0gc3ltYm9sX2RsX2Zpcm13YXJlKHByaXYsCisJCQkJCSAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSk7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJYnJlYWs7CisJfQorCS8qIFRPRE86IGlmIHdlIGZhaWwgd2UgcHJvYmFibHkgbmVlZCB0byByZWluaXRpYWxpc2UKKwkgKiB0aGUgZHJpdmVyICovCisKKwlyZXR1cm4gZXJyOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQordm9pZCBvcmlub2NvX2NhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBhcCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKKwljb25zdCBjaGFyICpwcmlfZnc7CisJY29uc3QgY2hhciAqZnc7CisKKwlwcmlfZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnByaV9mdzsKKwlpZiAoYXApCisJCWZ3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5hcF9mdzsKKwllbHNlCisJCWZ3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5zdGFfZnc7CisKKwlpZiAocHJpX2Z3KSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgcHJpX2Z3LCBwcml2LT5kZXYpID09IDApCisJCQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gZndfZW50cnk7CisJfQorCisJaWYgKGZ3KSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZncsIHByaXYtPmRldikgPT0gMCkKKwkJCXByaXYtPmNhY2hlZF9mdyA9IGZ3X2VudHJ5OworCX0KK30KKwordm9pZCBvcmlub2NvX3VuY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+Y2FjaGVkX3ByaV9mdykKKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfcHJpX2Z3KTsKKwlpZiAocHJpdi0+Y2FjaGVkX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9mdyk7CisKKwlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKKwlwcml2LT5jYWNoZWRfZncgPSBOVUxMOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmYzI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaApAQCAtMCwwICsxLDIxIEBACisvKiBGaXJtd2FyZSBmaWxlIHJlYWRpbmcgYW5kIGRvd25sb2FkIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19GV19IXworI2RlZmluZSBfT1JJTk9DT19GV19IXworCisvKiBGb3J3YXJkIGRlY2xhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CisKK2ludCBvcmlub2NvX2Rvd25sb2FkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQordm9pZCBvcmlub2NvX2NhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBhcCk7Cit2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKKyNlbHNlCisjZGVmaW5lIG9yaW5vY29fY2FjaGVfZncocHJpdiwgYXApIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBvcmlub2NvX3VuY2FjaGVfZncocHJpdikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfT1JJTk9DT19GV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKaW5kZXggYmZhMzc1My4uZjJjOTE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwLCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCiAgKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnAuIDIwMDEtMjAwMy4KLSAqIAorICoKICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKICAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KICAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCkBAIC00NSwxMSArNDUsNiBAQAogCiAjaW5jbHVkZSAiaGVybWVzLmgiCiAKLU1PRFVMRV9ERVNDUklQVElPTigiTG93LWxldmVsIGRyaXZlciBoZWxwZXIgZm9yIEx1Y2VudCBIZXJtZXMgY2hpcHNldCBhbmQgUHJpc20gSUkgSEZBMzg0eCB3aXJlbGVzcyBNQUMgY29udHJvbGxlciIpOwotTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4iCi0JIiAmIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKLQogLyogVGhlc2UgYXJlIG1heGltdW0gdGltZW91dHMuIE1vc3Qgb2Z0ZW4sIGNhcmQgd2lsIHJlYWN0IG11Y2ggZmFzdGVyICovCiAjZGVmaW5lIENNRF9CVVNZX1RJTUVPVVQgKDEwMCkgLyogSW4gaXRlcmF0aW9ucyBvZiB+MXVzICovCiAjZGVmaW5lIENNRF9JTklUX1RJTUVPVVQgKDUwMDAwKSAvKiBpbiBpdGVyYXRpb25zIG9mIH4xMHVzICovCkBAIC02MSwxMyArNTYsMTMgQEAKICAqLwogCiAjZGVmaW5lIERNU0coc3R1ZmYuLi4pIGRvIHtwcmludGsoS0VSTl9ERUJVRyAiaGVybWVzIEAgJXA6ICIgLCBody0+aW9iYXNlKTsgXAotCQkJcHJpbnRrKHN0dWZmKTt9IHdoaWxlICgwKQorCQkJcHJpbnRrKHN0dWZmKTsgfSB3aGlsZSAoMCkKIAogI3VuZGVmIEhFUk1FU19ERUJVRwogI2lmZGVmIEhFUk1FU19ERUJVRwogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi0jZGVmaW5lIERFQlVHKGx2bCwgc3R1ZmYuLi4pIGlmICggKGx2bCkgPD0gSEVSTUVTX0RFQlVHKSBETVNHKHN0dWZmKQorI2RlZmluZSBERUJVRyhsdmwsIHN0dWZmLi4uKSBpZiAoKGx2bCkgPD0gSEVSTUVTX0RFQlVHKSBETVNHKHN0dWZmKQogCiAjZWxzZSAvKiAhIEhFUk1FU19ERUJVRyAqLwogCkBAIC05NSwyMCArOTAsMTkgQEAKIAogCS8qIEZpcnN0IHdhaXQgZm9yIHRoZSBjb21tYW5kIHJlZ2lzdGVyIHRvIHVuYnVzeSAqLwogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7Ci0Jd2hpbGUgKCAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSAmJiBrICkgeworCXdoaWxlICgocmVnICYgSEVSTUVTX0NNRF9CVVNZKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEpOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwogCX0KLQlpZiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSB7CisJaWYgKHJlZyAmIEhFUk1FU19DTURfQlVTWSkKIAkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAloZXJtZXNfd3JpdGVfcmVnbihodywgUEFSQU0yLCBwYXJhbTIpOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBQQVJBTTEsIHBhcmFtMSk7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFBBUkFNMCwgcGFyYW0wKTsKIAloZXJtZXNfd3JpdGVfcmVnbihodywgQ01ELCBjbWQpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MSwyMyArMTg1LDIzIEBACiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOwogCiAJLyogTm9ybWFsbHkgaXQncyBhICJjYW4ndCBoYXBwZW4iIGZvciB0aGUgY29tbWFuZCByZWdpc3RlciB0bwotICAgICAgICAgICBiZSBidXN5IHdoZW4gd2UgZ28gdG8gaXNzdWUgYSBjb21tYW5kIGJlY2F1c2Ugd2UgYXJlCi0gICAgICAgICAgIHNlcmlhbGl6aW5nIGFsbCBjb21tYW5kcy4gIEhvd2V2ZXIgd2Ugd2FudCB0byBoYXZlIHNvbWUKLSAgICAgICAgICAgY2hhbmNlIG9mIHJlc2V0dGluZyB0aGUgY2FyZCBldmVuIGlmIGl0IGdldHMgaW50byBhIHN0dXBpZAotICAgICAgICAgICBzdGF0ZSwgc28gd2UgYWN0dWFsbHkgd2FpdCB0byBzZWUgaWYgdGhlIGNvbW1hbmQgcmVnaXN0ZXIKLSAgICAgICAgICAgd2lsbCB1bmJ1c3kgaXRzZWxmIGhlcmUuICovCisJICAgYmUgYnVzeSB3aGVuIHdlIGdvIHRvIGlzc3VlIGEgY29tbWFuZCBiZWNhdXNlIHdlIGFyZQorCSAgIHNlcmlhbGl6aW5nIGFsbCBjb21tYW5kcy4gIEhvd2V2ZXIgd2Ugd2FudCB0byBoYXZlIHNvbWUKKwkgICBjaGFuY2Ugb2YgcmVzZXR0aW5nIHRoZSBjYXJkIGV2ZW4gaWYgaXQgZ2V0cyBpbnRvIGEgc3R1cGlkCisJICAgc3RhdGUsIHNvIHdlIGFjdHVhbGx5IHdhaXQgdG8gc2VlIGlmIHRoZSBjb21tYW5kIHJlZ2lzdGVyCisJICAgd2lsbCB1bmJ1c3kgaXRzZWxmIGhlcmUuICovCiAJayA9IENNRF9CVVNZX1RJTUVPVVQ7CiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl3aGlsZSAoayAmJiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSkgewotCQlpZiAocmVnID09IDB4ZmZmZikgLyogU3BlY2lhbCBjYXNlIC0gdGhlIGNhcmQgaGFzIHByb2JhYmx5IGJlZW4gcmVtb3ZlZCwKLQkJCQkgICAgICBzbyBkb24ndCB3YWl0IGZvciB0aGUgdGltZW91dCAqLworCQlpZiAocmVnID09IDB4ZmZmZikgLyogU3BlY2lhbCBjYXNlIC0gdGhlIGNhcmQgaGFzIHByb2JhYmx5IGJlZW4KKwkJCQkgICAgICByZW1vdmVkLCBzbyBkb24ndCB3YWl0IGZvciB0aGUgdGltZW91dCAqLwogCQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkJay0tOwogCQl1ZGVsYXkoMSk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJfQotCQorCiAJLyogTm8gbmVlZCB0byBleHBsaWNpdGx5IGhhbmRsZSB0aGUgdGltZW91dCAtIGlmIHdlJ3ZlIHRpbWVkCiAJICAgb3V0IGhlcm1lc19pc3N1ZV9jbWQoKSB3aWxsIHByb2JhYmx5IHJldHVybiAtRUJVU1kgYmVsb3cgKi8KIApAQCAtMjI4LDcgKzIyMiwxMCBAQAogLyogSXNzdWUgYSBjb21tYW5kIHRvIHRoZSBjaGlwLCBhbmQgKGJ1c3khKSB3YWl0IGZvciBpdCB0bwogICogY29tcGxldGUuCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGVycm9yLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUKKyAqIFJldHVybnM6CisgKiAgICAgPCAwIG9uIGludGVybmFsIGVycm9yCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IgcmV0dXJuZWQgYnkgdGhlIGZpcm13YXJlCiAgKgogICogQ2FsbGFibGUgZnJvbSBhbnkgY29udGV4dCwgYnV0IGxvY2tpbmcgaXMgeW91ciBwcm9ibGVtLiAqLwogaW50IGhlcm1lc19kb2NtZF93YWl0KGhlcm1lc190ICpodywgdTE2IGNtZCwgdTE2IHBhcm0wLApAQCAtMjQxLDEzICsyMzgsMTMgQEAKIAogCWVyciA9IGhlcm1lc19pc3N1ZV9jbWQoaHcsIGNtZCwgcGFybTAsIDAsIDApOwogCWlmIChlcnIpIHsKLQkJaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7CisJCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlcm1lcyBAICVwOiAiCiAJCQkJICAgICAgICJDYXJkIHJlbW92ZWQgd2hpbGUgaXNzdWluZyBjb21tYW5kICIKIAkJCQkgICAgICAgIjB4JTA0eC5cbiIsIGh3LT5pb2Jhc2UsIGNtZCk7CiAJCQllcnIgPSAtRU5PREVWOwotCQl9IGVsc2UgCisJCX0gZWxzZQogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgImhlcm1lcyBAICVwOiAiCiAJCQkJICAgICAgICJFcnJvciAlZCBpc3N1aW5nIGNvbW1hbmQgMHglMDR4LlxuIiwKQEAgLTI1NywyMSArMjU0LDIxIEBACiAKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwogCWsgPSBDTURfQ09NUExfVElNRU9VVDsKLQl3aGlsZSAoICghIChyZWcgJiBIRVJNRVNfRVZfQ01EKSkgJiYgaykgeworCXdoaWxlICgoIShyZWcgJiBIRVJNRVNfRVZfQ01EKSkgJiYgaykgewogCQlrLS07CiAJCXVkZWxheSgxMCk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJfQogCi0JaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7CisJaWYgKCFoZXJtZXNfcHJlc2VudChodykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVybWVzIEAgJXA6IENhcmQgcmVtb3ZlZCAiCiAJCSAgICAgICAid2hpbGUgd2FpdGluZyBmb3IgY29tbWFuZCAweCUwNHggY29tcGxldGlvbi5cbiIsCiAJCSAgICAgICBody0+aW9iYXNlLCBjbWQpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JCQotCWlmICghIChyZWcgJiBIRVJNRVNfRVZfQ01EKSkgeworCisJaWYgKCEocmVnICYgSEVSTUVTX0VWX0NNRCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZXJtZXMgQCAlcDogVGltZW91dCB3YWl0aW5nIGZvciAiCiAJCSAgICAgICAiY29tbWFuZCAweCUwNHggY29tcGxldGlvbi5cbiIsIGh3LT5pb2Jhc2UsIGNtZCk7CiAJCWVyciA9IC1FVElNRURPVVQ7CkBAIC0zMDEsMzEgKzI5OCwzMCBAQAogCWludCBlcnIgPSAwOwogCWludCBrOwogCXUxNiByZWc7Ci0JCi0JaWYgKCAoc2l6ZSA8IEhFUk1FU19BTExPQ19MRU5fTUlOKSB8fCAoc2l6ZSA+IEhFUk1FU19BTExPQ19MRU5fTUFYKSApCisKKwlpZiAoKHNpemUgPCBIRVJNRVNfQUxMT0NfTEVOX01JTikgfHwgKHNpemUgPiBIRVJNRVNfQUxMT0NfTEVOX01BWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfQUxMT0MsIHNpemUsIE5VTEwpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCX0KIAogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJayA9IEFMTE9DX0NPTVBMX1RJTUVPVVQ7Ci0Jd2hpbGUgKCAoISAocmVnICYgSEVSTUVTX0VWX0FMTE9DKSkgJiYgaykgeworCXdoaWxlICgoIShyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEwKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAl9Ci0JCi0JaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7CisKKwlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZXJtZXMgQCAlcDogIgogCQkgICAgICAgIkNhcmQgcmVtb3ZlZCB3YWl0aW5nIGZvciBmcmFtZSBhbGxvY2F0aW9uLlxuIiwKIAkJICAgICAgIGh3LT5pb2Jhc2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JCQotCWlmICghIChyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSB7CisKKwlpZiAoIShyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGVybWVzIEAgJXA6ICIKIAkJICAgICAgICJUaW1lb3V0IHdhaXRpbmcgZm9yIGZyYW1lIGFsbG9jYXRpb25cbiIsCiAJCSAgICAgICBody0+aW9iYXNlKTsKQEAgLTMzNCwxNCArMzMwLDE3IEBACiAKIAkqZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgSEVSTUVTX0VWX0FMTE9DKTsKLQkKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfYWxsb2NhdGUpOwogCiAvKiBTZXQgdXAgYSBCQVAgdG8gcmVhZCBhIHBhcnRpY3VsYXIgY2h1bmsgb2YgZGF0YSBmcm9tIGNhcmQncyBpbnRlcm5hbCBidWZmZXIuCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+MCBvbiBlcnJvcgorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IKICAqIGZyb20gZmlybXdhcmUKICAqCiAgKiBDYWxsYWJsZSBmcm9tIGFueSBjb250ZXh0ICovCkBAIC0zNTMsNyArMzUyLDcgQEAKIAl1MTYgcmVnOwogCiAJLyogUGFyYW5vaWEuLiAqLwotCWlmICggKG9mZnNldCA+IEhFUk1FU19CQVBfT0ZGU0VUX01BWCkgfHwgKG9mZnNldCAlIDIpICkKKwlpZiAoKG9mZnNldCA+IEhFUk1FU19CQVBfT0ZGU0VUX01BWCkgfHwgKG9mZnNldCAlIDIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWsgPSBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVDsKQEAgLTM3NCw3ICszNzMsNyBAQAogCS8qIFdhaXQgZm9yIHRoZSBCQVAgdG8gYmUgcmVhZHkgKi8KIAlrID0gSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQ7CiAJcmVnID0gaGVybWVzX3JlYWRfcmVnKGh3LCBvcmVnKTsKLQl3aGlsZSAoIChyZWcgJiAoSEVSTUVTX09GRlNFVF9CVVNZIHwgSEVSTUVTX09GRlNFVF9FUlIpKSAmJiBrKSB7CisJd2hpbGUgKChyZWcgJiAoSEVSTUVTX09GRlNFVF9CVVNZIHwgSEVSTUVTX09GRlNFVF9FUlIpKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEpOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWcoaHcsIG9yZWcpOwpAQCAtMzg2LDkgKzM4NSw4IEBACiAJCSAgICAgICAocmVnICYgSEVSTUVTX09GRlNFVF9CVVNZKSA/ICJ0aW1lb3V0IiA6ICJlcnJvciIsCiAJCSAgICAgICByZWcsIGlkLCBvZmZzZXQpOwogCi0JCWlmIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpIHsKKwkJaWYgKHJlZyAmIEhFUk1FU19PRkZTRVRfQlVTWSkKIAkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9CiAKIAkJcmV0dXJuIC1FSU87CQkvKiBlcnJvciBvciB3cm9uZyBvZmZzZXQgKi8KIAl9CkBAIC00MDAsNyArMzk4LDEwIEBACiAgKiBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZSBjYWxsZXIncyBwcm9ibGVtLiAgbGVuCiAgKiBtdXN0IGJlIGV2ZW4uCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQogICovCiBpbnQgaGVybWVzX2JhcF9wcmVhZChoZXJtZXNfdCAqaHcsIGludCBiYXAsIHZvaWQgKmJ1ZiwgaW50IGxlbiwKIAkJICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpCkBAIC00MDgsNyArNDA5LDcgQEAKIAlpbnQgZHJlZyA9IGJhcCA/IEhFUk1FU19EQVRBMSA6IEhFUk1FU19EQVRBMDsKIAlpbnQgZXJyID0gMDsKIAotCWlmICggKGxlbiA8IDApIHx8IChsZW4gJSAyKSApCisJaWYgKChsZW4gPCAwKSB8fCAobGVuICUgMikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2JhcF9zZWVrKGh3LCBiYXAsIGlkLCBvZmZzZXQpOwpAQCAtNDI2LDcgKzQyNywxMCBAQAogLyogV3JpdGUgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBjaGlwJ3MgYnVmZmVyLCB2aWEgdGhlCiAgKiBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZSBjYWxsZXIncyBwcm9ibGVtLgogICoKLSAqIFJldHVybnM6IDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubyksIDAgb24gc3VjY2VzcywgPiAwIG9uIGVycm9yIGZyb20gZmlybXdhcmUKKyAqIFJldHVybnM6CisgKiAgICAgPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKQorICogICAgICAgMCBvbiBzdWNjZXNzCisgKiAgICAgPiAwIG9uIGVycm9yIGZyb20gZmlybXdhcmUKICAqLwogaW50IGhlcm1lc19iYXBfcHdyaXRlKGhlcm1lc190ICpodywgaW50IGJhcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuLAogCQkgICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpCkBAIC00NDAsMTEgKzQ0NCwxMSBAQAogCWVyciA9IGhlcm1lc19iYXBfc2VlayhodywgYmFwLCBpZCwgb2Zmc2V0KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQkKKwogCS8qIEFjdHVhbGx5IGRvIHRoZSB0cmFuc2ZlciAqLwogCWhlcm1lc193cml0ZV9ieXRlcyhodywgZHJlZywgYnVmLCBsZW4pOwogCi0gb3V0OgkKKyBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX2JhcF9wd3JpdGUpOwpAQCAtNDY1LDcgKzQ2OSw3IEBACiAJdTE2IHJsZW5ndGgsIHJ0eXBlOwogCXVuc2lnbmVkIG53b3JkczsKIAotCWlmICggKGJ1ZnNpemUgPCAwKSB8fCAoYnVmc2l6ZSAlIDIpICkKKwlpZiAoKGJ1ZnNpemUgPCAwKSB8fCAoYnVmc2l6ZSAlIDIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0FDQ0VTUywgcmlkLCBOVUxMKTsKQEAgLTQ3OCw3ICs0ODIsNyBAQAogCiAJcmxlbmd0aCA9IGhlcm1lc19yZWFkX3JlZyhodywgZHJlZyk7CiAKLQlpZiAoISBybGVuZ3RoKQorCWlmICghcmxlbmd0aCkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCiAJcnR5cGUgPSBoZXJtZXNfcmVhZF9yZWcoaHcsIGRyZWcpOwpAQCAtNTAzLDcgKzUwNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19yZWFkX2x0dik7CiAKLWludCBoZXJtZXNfd3JpdGVfbHR2KGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwgCitpbnQgaGVybWVzX3dyaXRlX2x0dihoZXJtZXNfdCAqaHcsIGludCBiYXAsIHUxNiByaWQsCiAJCSAgICAgdTE2IGxlbmd0aCwgY29uc3Qgdm9pZCAqdmFsdWUpCiB7CiAJaW50IGRyZWcgPSBiYXAgPyBIRVJNRVNfREFUQTEgOiBIRVJNRVNfREFUQTA7CkBAIC01MzAsMTUgKzUzNCwzIEBACiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX3dyaXRlX2x0dik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaGVybWVzKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2hlcm1lcyh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChpbml0X2hlcm1lcyk7Ci1tb2R1bGVfZXhpdChleGl0X2hlcm1lcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaAppbmRleCA4YjEzYzhmLi5jNzhjNDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKQEAgLTE1LDcgKzE1LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCwgRGF2aWQgR2lic29uLCBMaW51eGNhcmUgQXVzdHJhbGlhLgogICogKEMpIENvcHlyaWdodCBEYXZpZCBHaWJzb24sIElCTSBDb3JwLiAyMDAxLTIwMDMuCiAgKgotICogUG9ydGlvbnMgdGFrZW4gZnJvbSBoZmEzODR4LmgsIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFBvcnRpb25zIHRha2VuIGZyb20gaGZhMzg0eC5oLgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgZmlsZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMLCB2ZXJzaW9uIDIuCiAgKi8KQEAgLTMxLDcgKzMyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qCiAgKiBMaW1pdHMgYW5kIGNvbnN0YW50cwpAQCAtMjAzLDcgKzIwNCw3IEBACiAJX19sZTMyIHN3X3N1cHBvcnQ7CiAJdTggcmV0cnlfY291bnQ7CiAJdTggdHhfcmF0ZTsKLQlfX2xlMTYgdHhfY29udHJvbDsJCisJX19sZTE2IHR4X2NvbnRyb2w7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIRVJNRVNfVFhTVEFUX1JFVFJZRVJSCQkoMHgwMDAxKQpAQCAtMjk4LDcgKzI5OSw3IEBACiAJLyogYml0czogMC1lc3MsIDEtaWJzcywgNC1wcml2YWN5IFt3ZXBdICovCiAJX19sZTE2IGVzc2lkX2xlbjsJLyogRVNTSUQgbGVuZ3RoICovCiAJdTggZXNzaWRbMzJdOwkJLyogRVNTSUQgb2YgdGhlIG5ldHdvcmsgKi8KLSAgICAJX19sZTE2IHJhdGVzWzVdOwkvKiBCaXQgcmF0ZSBzdXBwb3J0ZWQgKi8KKwlfX2xlMTYgcmF0ZXNbNV07CS8qIEJpdCByYXRlIHN1cHBvcnRlZCAqLwogCV9fbGUxNiBiYXNpY19yYXRlczsJLyogQmFzaWMgcmF0ZXMgYml0bWFzayAqLwogCXU4IHVua25vd24yWzZdOwkJLyogQWx3YXlzIEZGOkZGOkZGOkZGOjAwOjAwICovCiAJdTggdW5rbm93bjNbOF07CQkvKiBBbHdheXMgMCwgYXBwZWFyZWQgaW4gZi93IDMuOTEtNjggKi8KQEAgLTM0NCwxNCArMzQ1LDE0IEBACiAJdTgJZGF0YVszMTZdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRCAgICgweDAwMDApICAKKyNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRCAgICgweDAwMDApCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCAgICAgICAoMHgwMDAxKQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19ESVNDT05ORUNURUQgICAgKDB4MDAwMikKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFICAgICAgICgweDAwMDMpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRSAoMHgwMDA0KQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRSAgICAgKDB4MDAwNSkKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVNTT0NfRkFJTEVEICAgICgweDAwMDYpCi0gIAorCiBzdHJ1Y3QgaGVybWVzX2xpbmtzdGF0dXMgewogCV9fbGUxNiBsaW5rc3RhdHVzOyAgICAgICAgIC8qIExpbmsgc3RhdHVzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTM4NCwxMSArMzg1LDEyIEBACiAKIC8qIFJlZ2lzdGVyIGFjY2VzcyBjb252ZW5pZW5jZSBtYWNyb3MgKi8KICNkZWZpbmUgaGVybWVzX3JlYWRfcmVnKGh3LCBvZmYpIFwKLQkoaW9yZWFkMTYoKGh3KS0+aW9iYXNlICsgKCAob2ZmKSA8PCAoaHcpLT5yZWdfc3BhY2luZyApKSkKKwkoaW9yZWFkMTYoKGh3KS0+aW9iYXNlICsgKChvZmYpIDw8IChodyktPnJlZ19zcGFjaW5nKSkpCiAjZGVmaW5lIGhlcm1lc193cml0ZV9yZWcoaHcsIG9mZiwgdmFsKSBcCiAJKGlvd3JpdGUxNigodmFsKSwgKGh3KS0+aW9iYXNlICsgKChvZmYpIDw8IChodyktPnJlZ19zcGFjaW5nKSkpCiAjZGVmaW5lIGhlcm1lc19yZWFkX3JlZ24oaHcsIG5hbWUpIGhlcm1lc19yZWFkX3JlZygoaHcpLCBIRVJNRVNfIyNuYW1lKQotI2RlZmluZSBoZXJtZXNfd3JpdGVfcmVnbihodywgbmFtZSwgdmFsKSBoZXJtZXNfd3JpdGVfcmVnKChodyksIEhFUk1FU18jI25hbWUsICh2YWwpKQorI2RlZmluZSBoZXJtZXNfd3JpdGVfcmVnbihodywgbmFtZSwgdmFsKSBcCisJaGVybWVzX3dyaXRlX3JlZygoaHcpLCBIRVJNRVNfIyNuYW1lLCAodmFsKSkKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogdm9pZCBoZXJtZXNfc3RydWN0X2luaXQoaGVybWVzX3QgKmh3LCB2b2lkIF9faW9tZW0gKmFkZHJlc3MsIGludCByZWdfc3BhY2luZyk7CkBAIC00MzAsNyArNDMyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaGVybWVzX2Rpc2FibGVfcG9ydChoZXJtZXNfdCAqaHcsIGludCBwb3J0KQogewotCXJldHVybiBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9ESVNBQkxFIHwgKHBvcnQgPDwgOCksIAorCXJldHVybiBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9ESVNBQkxFIHwgKHBvcnQgPDwgOCksCiAJCQkJIDAsIE5VTEwpOwogfQogCkBAIC00NDEsMTEgKzQ0MywxMiBAQAogCXJldHVybiBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9JTlFVSVJFLCByaWQsIE5VTEwpOwogfQogCi0jZGVmaW5lIEhFUk1FU19CWVRFU19UT19SRUNMRU4obikgKCAoKChuKSsxKS8yKSArIDEgKQotI2RlZmluZSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKG4pICggKChuKS0xKSAqIDIgKQorI2RlZmluZSBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG4pICgoKChuKSsxKS8yKSArIDEpCisjZGVmaW5lIEhFUk1FU19SRUNMRU5fVE9fQllURVMobikgKCgobiktMSkgKiAyKQogCiAvKiBOb3RlIHRoYXQgZm9yIHRoZSBuZXh0IHR3bywgdGhlIGNvdW50IGlzIGluIDE2LWJpdCB3b3Jkcywgbm90IGJ5dGVzICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX3JlYWRfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX3JlYWRfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsCisJCQkJICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGNvdW50KQogewogCW9mZiA9IG9mZiA8PCBody0+cmVnX3NwYWNpbmc7CiAJaW9yZWFkMTZfcmVwKGh3LT5pb2Jhc2UgKyBvZmYsIGJ1ZiwgY291bnQpOwpAQCAtNDYwLDcgKzQ2Myw4IEBACiAJCWlvd3JpdGU4KGJ1Zltjb3VudCAtIDFdLCBody0+aW9iYXNlICsgb2ZmKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19jbGVhcl93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwgdW5zaWduZWQgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX2NsZWFyX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLAorCQkJCSAgICAgIHVuc2lnbmVkIGNvdW50KQogewogCXVuc2lnbmVkIGk7CiAKQEAgLTQ3MSw5ICs0NzUsMTAgQEAKIH0KIAogI2RlZmluZSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIGJhcCwgcmlkLCBidWYpIFwKLQkoaGVybWVzX3JlYWRfbHR2KChodyksKGJhcCksKHJpZCksIHNpemVvZigqYnVmKSwgTlVMTCwgKGJ1ZikpKQorCShoZXJtZXNfcmVhZF9sdHYoKGh3KSwgKGJhcCksIChyaWQpLCBzaXplb2YoKmJ1ZiksIE5VTEwsIChidWYpKSkKICNkZWZpbmUgSEVSTUVTX1dSSVRFX1JFQ09SRChodywgYmFwLCByaWQsIGJ1ZikgXAotCShoZXJtZXNfd3JpdGVfbHR2KChodyksKGJhcCksKHJpZCksSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzaXplb2YoKmJ1ZikpLChidWYpKSkKKwkoaGVybWVzX3dyaXRlX2x0digoaHcpLCAoYmFwKSwgKHJpZCksIFwKKwkJCSAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzaXplb2YoKmJ1ZikpLCAoYnVmKSkpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGhlcm1lc19yZWFkX3dvcmRyZWMoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLCB1MTYgKndvcmQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jCmluZGV4IGQ4YzYyNmUuLmE5YmExOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jCkBAIC0xLDEzICsxLDcgQEAKIC8qCi0gKiBIZXJtZXMgZG93bmxvYWQgaGVscGVyIGRyaXZlci4KKyAqIEhlcm1lcyBkb3dubG9hZCBoZWxwZXIuCiAgKgotICogVGhpcyBjb3VsZCBiZSBlbnRpcmVseSBtZXJnZWQgaW50byBoZXJtZXMuYy4KLSAqCi0gKiBJJ20ga2VlcGluZyBpdCBzZXBhcmF0ZSB0byBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIG1lcmdpbmcgYmV0d2VlbgotICoga2VybmVsIHVwZ3JhZGVzLiBJdCBhbHNvIG1lYW5zIHRoZSBtZW1vcnkgb3ZlcmhlYWQgZm9yIGRyaXZlcnMgdGhhdAotICogZG9uJ3QgbmVlZCBmaXJtd2FyZSBkb3dubG9hZCBsb3cuCi0gKgotICogVGhpcyBkcml2ZXI6CisgKiBUaGlzIGhlbHBlcjoKICAqICAtIGlzIGNhcGFibGUgb2Ygd3JpdGluZyB0byB0aGUgdm9sYXRpbGUgYXJlYSBvZiB0aGUgaGVybWVzIGRldmljZQogICogIC0gaXMgY3VycmVudGx5IG5vdCBjYXBhYmxlIG9mIHdyaXRpbmcgdG8gbm9uLXZvbGF0aWxlIGFyZWFzCiAgKiAgLSBwcm92aWRlIGhlbHBlcnMgdG8gaWRlbnRpZnkgYW5kIHVwZGF0ZSBwbHVnaW4gZGF0YQpAQCAtNTAsMTAgKzQ0LDYgQEAKICNpbmNsdWRlICJoZXJtZXMuaCIKICNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCiAKLU1PRFVMRV9ERVNDUklQVElPTigiRG93bmxvYWQgaGVscGVyIGZvciBMdWNlbnQgSGVybWVzIGNoaXBzZXQiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIEtpbHJveSA8a2lscm95ZEBnbWFpbC5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7Ci0KICNkZWZpbmUgUEZYICJoZXJtZXNfZGxkOiAiCiAKIC8qCkBAIC04MSwxOCArNzEsNiBAQAogI2RlZmluZSBCTE9DS19FTkQJMHhGRkZGRkZGRgkvKiBMYXN0IGltYWdlIGJsb2NrICovCiAjZGVmaW5lIFRFWFRfRU5ECTB4MUEJCS8qIEVuZCBvZiB0ZXh0IGhlYWRlciAqLwogCi0vKgotICogUERBID09IFByb2R1Y3Rpb24gRGF0YSBBcmVhCi0gKgotICogSW4gcHJpbmNpcGxlLCB0aGUgbWF4LiBzaXplIG9mIHRoZSBQREEgaXMgaXMgNDA5NiB3b3Jkcy4gQ3VycmVudGx5LAotICogaG93ZXZlciwgb25seSBhYm91dCA1MDAgYnl0ZXMgb2YgdGhpcyBhcmVhIGFyZSB1c2VkLgotICoKLSAqIFNvbWUgVVNCIGltcGxlbWVudGF0aW9ucyBjYW4ndCBoYW5kbGUgc2l6ZXMgaW4gZXhjZXNzIG9mIDEwMTYuIE5vdGUKLSAqIHRoYXQgUERBIGlzIG5vdCBhY3R1YWxseSB1c2VkIGluIHRob3NlIFVTQiBlbnZpcm9ubWVudHMsIGJ1dCBtYXkgYmUKLSAqIHJldHJpZXZlZCBieSBjb21tb24gY29kZS4KLSAqLwotI2RlZmluZSBNQVhfUERBX1NJWkUJMTAwMAotCiAvKiBMaW1pdCB0aGUgYW1vdXQgd2UgdHJ5IHRvIGRvd25sb2FkIGluIGEgc2luZ2xlIHNob3QuCiAgKiBTaXplIGlzIGluIGJ5dGVzLgogICovCkBAIC0yMjgsMTMgKzIwNiwxNCBAQAogICogU2NhbiBQRFIgZm9yIHRoZSByZWNvcmQgd2l0aCB0aGUgc3BlY2lmaWVkIFJFQ09SRF9JRC4KICAqIElmIGl0J3Mgbm90IGZvdW5kLCByZXR1cm4gTlVMTC4KICAqLwotc3RhdGljIHN0cnVjdCBwZHIgKgotaGVybWVzX2ZpbmRfcGRyKHN0cnVjdCBwZHIgKmZpcnN0X3BkciwgdTMyIHJlY29yZF9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGRyICoKK2hlcm1lc19maW5kX3Bkcihjb25zdCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsIHUzMiByZWNvcmRfaWQsIGNvbnN0IHZvaWQgKmVuZCkKIHsKLQlzdHJ1Y3QgcGRyICpwZHIgPSBmaXJzdF9wZHI7Ci0Jdm9pZCAqZW5kID0gKHZvaWQgKilmaXJzdF9wZHIgKyBNQVhfUERBX1NJWkU7CisJY29uc3Qgc3RydWN0IHBkciAqcGRyID0gZmlyc3RfcGRyOwogCi0Jd2hpbGUgKCgodm9pZCAqKXBkciA8IGVuZCkgJiYKKwllbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZHIpOworCisJd2hpbGUgKCgodm9pZCAqKSBwZHIgPD0gZW5kKSAmJgogCSAgICAgICAocGRyX2lkKHBkcikgIT0gUERJX0VORCkpIHsKIAkJLyoKIAkJICogUERSIGFyZWEgaXMgY3VycmVudGx5IG5vdCB0ZXJtaW5hdGVkIGJ5IFBESV9FTkQuCkBAIC0yNTQsMTIgKzIzMywxNSBAQAogfQogCiAvKiBTY2FuIHByb2R1Y3Rpb24gZGF0YSBpdGVtcyBmb3IgYSBwYXJ0aWN1bGFyIGVudHJ5ICovCi1zdGF0aWMgc3RydWN0IHBkaSAqCi1oZXJtZXNfZmluZF9wZGkoc3RydWN0IHBkaSAqZmlyc3RfcGRpLCB1MzIgcmVjb3JkX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZGkgKgoraGVybWVzX2ZpbmRfcGRpKGNvbnN0IHN0cnVjdCBwZGkgKmZpcnN0X3BkaSwgdTMyIHJlY29yZF9pZCwgY29uc3Qgdm9pZCAqZW5kKQogewotCXN0cnVjdCBwZGkgKnBkaSA9IGZpcnN0X3BkaTsKKwljb25zdCBzdHJ1Y3QgcGRpICpwZGkgPSBmaXJzdF9wZGk7CiAKLQl3aGlsZSAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkgeworCWVuZCAtPSBzaXplb2Yoc3RydWN0IHBkaSk7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkaSA8PSBlbmQpICYmCisJICAgICAgIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSkgewogCiAJCS8qIElmIHRoZSByZWNvcmQgSUQgbWF0Y2hlcywgd2UgYXJlIGRvbmUgKi8KIAkJaWYgKHBkaV9pZChwZGkpID09IHJlY29yZF9pZCkKQEAgLTI3MiwxMiArMjU0LDEzIEBACiAKIC8qIFByb2Nlc3Mgb25lIFBsdWcgRGF0YSBJdGVtIC0gZmluZCBjb3JyZXNwb25kaW5nIFBEUiBhbmQgcGx1ZyBpdCAqLwogc3RhdGljIGludAotaGVybWVzX3BsdWdfcGRpKGhlcm1lc190ICpodywgc3RydWN0IHBkciAqZmlyc3RfcGRyLCBjb25zdCBzdHJ1Y3QgcGRpICpwZGkpCitoZXJtZXNfcGx1Z19wZGkoaGVybWVzX3QgKmh3LCBjb25zdCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsCisJCWNvbnN0IHN0cnVjdCBwZGkgKnBkaSwgY29uc3Qgdm9pZCAqcGRyX2VuZCkKIHsKLQlzdHJ1Y3QgcGRyICpwZHI7CisJY29uc3Qgc3RydWN0IHBkciAqcGRyOwogCiAJLyogRmluZCB0aGUgUERSIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQREkgKi8KLQlwZHIgPSBoZXJtZXNfZmluZF9wZHIoZmlyc3RfcGRyLCBwZGlfaWQocGRpKSk7CisJcGRyID0gaGVybWVzX2ZpbmRfcGRyKGZpcnN0X3BkciwgcGRpX2lkKHBkaSksIHBkcl9lbmQpOwogCiAJLyogTm8gbWF0Y2ggaXMgZm91bmQsIHNhZmUgdG8gaWdub3JlICovCiAJaWYgKCFwZHIpCkBAIC0zNDcsNyArMzMwLDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfcmVhZF9wZGEpOwogCiAvKiBQYXJzZSBQREEgYW5kIHdyaXRlIHRoZSByZWNvcmRzIGludG8gdGhlIGFkYXB0ZXIKICAqCkBAIC0zNTYsMTggKzMzOCwyMiBAQAogICovCiBpbnQgaGVybWVzX2FwcGx5X3BkYShoZXJtZXNfdCAqaHcsCiAJCSAgICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhKQorCQkgICAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCSAgICAgY29uc3QgX19sZTE2ICpwZGEsCisJCSAgICAgY29uc3Qgdm9pZCAqcGRhX2VuZCkKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBwZGkgKnBkaTsKLQlzdHJ1Y3QgcGRyICpwZHI7CisJY29uc3Qgc3RydWN0IHBkciAqcGRyOwogCi0JcGRyID0gKHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOworCXBkciA9IChjb25zdCBzdHJ1Y3QgcGRyICopIGZpcnN0X3BkcjsKKwlwZGFfZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRpKTsKIAogCS8qIEdvIHRocm91Z2ggZXZlcnkgUERJIGFuZCBwbHVnIHRoZW0gaW50byB0aGUgYWRhcHRlciAqLwogCXBkaSA9IChjb25zdCBzdHJ1Y3QgcGRpICopIChwZGEgKyAyKTsKLQl3aGlsZSAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkgewotCQlyZXQgPSBoZXJtZXNfcGx1Z19wZGkoaHcsIHBkciwgcGRpKTsKKwl3aGlsZSAoKCh2b2lkICopIHBkaSA8PSBwZGFfZW5kKSAmJgorCSAgICAgICAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkpIHsKKwkJcmV0ID0gaGVybWVzX3BsdWdfcGRpKGh3LCBwZHIsIHBkaSwgcGRyX2VuZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0zNzYsMjEgKzM2MiwyMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX2FwcGx5X3BkYSk7CiAKIC8qIElkZW50aWZ5IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gYWxsIGJsb2NrcwogICogaW5jbHVkaW5nIHRoZSBoZWFkZXIgZGF0YS4KICAqLwogc2l6ZV90Ci1oZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jaykKK2hlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpCiB7CiAJY29uc3Qgc3RydWN0IGRibG9jayAqYmxrID0gKGNvbnN0IHN0cnVjdCBkYmxvY2sgKikgZmlyc3RfYmxvY2s7CiAJaW50IHRvdGFsX2xlbiA9IDA7CiAJaW50IGxlbjsKIAorCWVuZCAtPSBzaXplb2YoKmJsayk7CisKIAkvKiBTa2lwIGFsbCBibG9ja3MgdG8gbG9jYXRlIFBsdWcgRGF0YSBSZWZlcmVuY2VzCiAJICogKFNwZWN0cnVtIENTKSAqLwotCXdoaWxlIChkYmxvY2tfYWRkcihibGspICE9IEJMT0NLX0VORCkgeworCXdoaWxlICgoKHZvaWQgKikgYmxrIDw9IGVuZCkgJiYKKwkgICAgICAgKGRibG9ja19hZGRyKGJsaykgIT0gQkxPQ0tfRU5EKSkgewogCQlsZW4gPSBkYmxvY2tfbGVuKGJsayk7CiAJCXRvdGFsX2xlbiArPSBzaXplb2YoKmJsaykgKyBsZW47CiAJCWJsayA9IChzdHJ1Y3QgZGJsb2NrICopICZibGstPmRhdGFbbGVuXTsKQEAgLTM5OCw3ICszODYsNiBAQAogCiAJcmV0dXJuIHRvdGFsX2xlbjsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX2Jsb2Nrc19sZW5ndGgpOwogCiAvKioqIEhlcm1lcyBwcm9ncmFtbWluZyAqKiovCiAKQEAgLTQ1Miw3ICs0MzksNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzaV9wcm9ncmFtX2luaXQpOwogCiAvKiBEb25lIHByb2dyYW1taW5nIGRhdGEgKEhlcm1lcyBJKQogICoKQEAgLTQ4OCwxMCArNDc0LDkgQEAKIAogCXJldHVybiByYyA/IHJjIDogZXJyOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNpX3Byb2dyYW1fZW5kKTsKIAogLyogUHJvZ3JhbSB0aGUgZGF0YSBibG9ja3MgKi8KLWludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCBjaGFyICplbmQpCitpbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKQogewogCWNvbnN0IHN0cnVjdCBkYmxvY2sgKmJsazsKIAl1MzIgYmxrYWRkcjsKQEAgLTUwMywxNCArNDg4LDE0IEBACiAKIAlibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSBmaXJzdF9ibG9jazsKIAotCWlmICgoY29uc3QgY2hhciAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKKwlpZiAoKHZvaWQgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCiAJCXJldHVybiAtRUlPOwogCiAJYmxrYWRkciA9IGRibG9ja19hZGRyKGJsayk7CiAJYmxrbGVuID0gZGJsb2NrX2xlbihibGspOwogCiAJd2hpbGUgKChibGthZGRyICE9IEJMT0NLX0VORCkgJiYKLQkgICAgICAgKCgoY29uc3QgY2hhciAqKSBibGsgKyBibGtsZW4pIDw9IGVuZCkpIHsKKwkgICAgICAgKCgodm9pZCAqKSBibGsgKyBibGtsZW4pIDw9IGVuZCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCiAJCSAgICAgICAiUHJvZ3JhbW1pbmcgYmxvY2sgb2YgbGVuZ3RoICVkIHRvIGFkZHJlc3MgMHglMDh4XG4iLAogCQkgICAgICAgYmxrbGVuLCBibGthZGRyKTsKQEAgLTU0Miw3ICs1MjcsNyBAQAogI2VuZGlmCiAJCWJsayA9IChjb25zdCBzdHJ1Y3QgZGJsb2NrICopICZibGstPmRhdGFbYmxrbGVuXTsKIAotCQlpZiAoKGNvbnN0IGNoYXIgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCisJCWlmICgodm9pZCAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCWJsa2FkZHIgPSBkYmxvY2tfYWRkcihibGspOwpAQCAtNTUwLDE5ICs1MzUsNiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX3Byb2dyYW0pOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2hlcm1lc19kbGQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaGVybWVzX2RsZCh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChpbml0X2hlcm1lc19kbGQpOwotbW9kdWxlX2V4aXQoZXhpdF9oZXJtZXNfZGxkKTsKIAogLyoqKiBEZWZhdWx0IHBsdWdnaW5nIGRhdGEgZm9yIEhlcm1lcyBJICoqKi8KIC8qIFZhbHVlcyBmcm9tIHdsX2xrbV83MTgvaGNmL2RoZi5jICovCkBAIC01NzMsOSArNTQ1LDkgQEAKIAlfX2xlMTYgaWQ7CQkJCQkJCVwKIAl1OCB2YWxbbGVuZ3RoXTsJCQkJCQkJXAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCA9IHsJCQlcCi0JX19jb25zdGFudF9jcHVfdG9fbGUxNigoc2l6ZW9mKGRlZmF1bHRfcGRyX2RhdGFfIyNwaWQpLwkJXAorCWNwdV90b19sZTE2KChzaXplb2YoZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCkvCQkJXAogCQkJCXNpemVvZihfX2xlMTYpKSAtIDEpLAkJCVwKLQlfX2NvbnN0YW50X2NwdV90b19sZTE2KHBpZCksCQkJCQlcCisJY3B1X3RvX2xlMTYocGlkKSwJCQkJCQlcCiAJZGF0YQkJCQkJCQkJXAogfQogCkBAIC02NDQsMTcgKzYxNiwyMCBAQAogICovCiBpbnQgaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGhlcm1lc190ICpodywKIAkJCQkgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCQkJICAgY29uc3QgX19sZTE2ICpwZGEpCisJCQkJICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJCQkgICBjb25zdCB2b2lkICpwZGFfZW5kKQogewogCWNvbnN0IHN0cnVjdCBwZHIgKnBkciA9IChjb25zdCBzdHJ1Y3QgcGRyICopIGZpcnN0X3BkcjsKLQlzdHJ1Y3QgcGRpICpmaXJzdF9wZGkgPSAoc3RydWN0IHBkaSAqKSAmcGRhWzJdOwotCXN0cnVjdCBwZGkgKnBkaTsKLQlzdHJ1Y3QgcGRpICpkZWZhdWx0X3BkaSA9IE5VTEw7Ci0Jc3RydWN0IHBkaSAqb3V0ZG9vcl9wZGk7Ci0Jdm9pZCAqZW5kID0gKHZvaWQgKilmaXJzdF9wZHIgKyBNQVhfUERBX1NJWkU7CisJY29uc3Qgc3RydWN0IHBkaSAqZmlyc3RfcGRpID0gKGNvbnN0IHN0cnVjdCBwZGkgKikgJnBkYVsyXTsKKwljb25zdCBzdHJ1Y3QgcGRpICpwZGk7CisJY29uc3Qgc3RydWN0IHBkaSAqZGVmYXVsdF9wZGkgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBwZGkgKm91dGRvb3JfcGRpOwogCWludCByZWNvcmRfaWQ7CiAKLQl3aGlsZSAoKCh2b2lkICopcGRyIDwgZW5kKSAmJgorCXBkcl9lbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZHIpOworCisJd2hpbGUgKCgodm9pZCAqKSBwZHIgPD0gcGRyX2VuZCkgJiYKIAkgICAgICAgKHBkcl9pZChwZHIpICE9IFBESV9FTkQpKSB7CiAJCS8qCiAJCSAqIEZvciBzcGVjdHJ1bV9jcyBmaXJtd2FyZXMsCkBAIC02NjYsNyArNjQxLDcgQEAKIAkJCWJyZWFrOwogCQlyZWNvcmRfaWQgPSBwZHJfaWQocGRyKTsKIAotCQlwZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQpOworCQlwZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQsIHBkYV9lbmQpOwogCQlpZiAocGRpKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGb3VuZCByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAogCQkJICAgICAgIHJlY29yZF9pZCwgcGRpKTsKQEAgLTY3NCw3ICs2NDksOCBAQAogCQlzd2l0Y2ggKHJlY29yZF9pZCkgewogCQljYXNlIDB4MTEwOiAvKiBNb2RlbSBSRUZEQUMgdmFsdWVzICovCiAJCWNhc2UgMHgxMjA6IC8qIE1vZGVtIFZHREFDIHZhbHVlcyAqLwotCQkJb3V0ZG9vcl9wZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQgKyAxKTsKKwkJCW91dGRvb3JfcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkICsgMSwKKwkJCQkJCSAgICAgIHBkYV9lbmQpOwogCQkJZGVmYXVsdF9wZGkgPSBOVUxMOwogCQkJaWYgKG91dGRvb3JfcGRpKSB7CiAJCQkJcGRpID0gb3V0ZG9vcl9wZGk7CkBAIC03MTUsNyArNjkxLDggQEAKIAogCQlpZiAocGRpKSB7CiAJCQkvKiBMZW5ndGhzIG9mIHRoZSBkYXRhIGluIFBESSBhbmQgUERSIG11c3QgbWF0Y2ggKi8KLQkJCWlmIChwZGlfbGVuKHBkaSkgPT0gcGRyX2xlbihwZHIpKSB7CisJCQlpZiAoKHBkaV9sZW4ocGRpKSA9PSBwZHJfbGVuKHBkcikpICYmCisJCQkgICAgKCh2b2lkICopIHBkaS0+ZGF0YSArIHBkaV9sZW4ocGRpKSA8IHBkYV9lbmQpKSB7CiAJCQkJLyogZG8gdGhlIGFjdHVhbCBwbHVnZ2luZyAqLwogCQkJCWhlcm1lc19hdXhfc2V0YWRkcihodywgcGRyX2FkZHIocGRyKSk7CiAJCQkJaGVybWVzX3dyaXRlX2J5dGVzKGh3LCBIRVJNRVNfQVVYREFUQSwKQEAgLTcyNyw0ICs3MDQsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmgKaW5kZXggNmZjYjI2Mi4uNTgzYTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogaW50IGhlcm1lc2lfcHJvZ3JhbV9pbml0KGhlcm1lc190ICpodywgdTMyIG9mZnNldCk7CiBpbnQgaGVybWVzaV9wcm9ncmFtX2VuZChoZXJtZXNfdCAqaHcpOwotaW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IGNoYXIgKmVuZCk7CitpbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKTsKIAogaW50IGhlcm1lc19yZWFkX3BkYShoZXJtZXNfdCAqaHcsCiAJCSAgICBfX2xlMTYgKnBkYSwKQEAgLTM4LDExICszOCwxNSBAQAogCQkgICAgaW50IHVzZV9lZXByb20pOwogaW50IGhlcm1lc19hcHBseV9wZGEoaGVybWVzX3QgKmh3LAogCQkgICAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJICAgICBjb25zdCBfX2xlMTYgKnBkYSk7CisJCSAgICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJICAgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJICAgICBjb25zdCB2b2lkICpwZGFfZW5kKTsKIGludCBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaGVybWVzX3QgKmh3LAogCQkJCSAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSk7CisJCQkJICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJCQkgICBjb25zdCB2b2lkICpwZGFfZW5kKTsKIAotc2l6ZV90IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrKTsKK3NpemVfdCBoZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKTsKIAogI2VuZGlmIC8qIF9IRVJNRVNfRExEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE0MjhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCkBAIC0wLDAgKzEsNTg2IEBACisvKiBFbmNhcHN1bGF0ZSBiYXNpYyBzZXR0aW5nIGNoYW5nZXMgYW5kIHJldHJpZXZhbCBvbiBIZXJtZXMgaGFyZHdhcmUKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiaHcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGF0YSB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIHRhYmxlcyBnaXZlcyB0aGUgYWN0dWFsIG1lYW5pbmdzIG9mIHRoZSBiaXRyYXRlIElEcyByZXR1cm5lZAorICogYnkgdGhlIGZpcm13YXJlLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IGJpdHJhdGU7IC8qIGluIDEwMHMgb2Yga2lsb2JpdHMgKi8KKwlpbnQgYXV0b21hdGljOworCXUxNiBhZ2VyZV90eHJhdGVjdHJsOworCXUxNiBpbnRlcnNpbF90eHJhdGVjdHJsOworfSBiaXRyYXRlX3RhYmxlW10gPSB7CisJezExMCwgMSwgIDMsIDE1fSwgLyogRW50cnkgMCBpcyB0aGUgZGVmYXVsdCAqLworCXsxMCwgIDAsICAxLCAgMX0sCisJezEwLCAgMSwgIDEsICAxfSwKKwl7MjAsICAwLCAgMiwgIDJ9LAorCXsyMCwgIDEsICA2LCAgM30sCisJezU1LCAgMCwgIDQsICA0fSwKKwl7NTUsICAxLCAgNywgIDd9LAorCXsxMTAsIDAsICA1LCAgOH0sCit9OworI2RlZmluZSBCSVRSQVRFX1RBQkxFX1NJWkUgQVJSQVlfU0laRShiaXRyYXRlX3RhYmxlKQorCitpbnQgb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoaW50IGJpdHJhdGUsIGludCBhdXRvbWF0aWMpCit7CisJaW50IHJhdGVtb2RlID0gLTE7CisJaW50IGk7CisKKwlpZiAoKGJpdHJhdGUgIT0gMTApICYmIChiaXRyYXRlICE9IDIwKSAmJgorCSAgICAoYml0cmF0ZSAhPSA1NSkgJiYgKGJpdHJhdGUgIT0gMTEwKSkKKwkJcmV0dXJuIHJhdGVtb2RlOworCisJZm9yIChpID0gMDsgaSA8IEJJVFJBVEVfVEFCTEVfU0laRTsgaSsrKSB7CisJCWlmICgoYml0cmF0ZV90YWJsZVtpXS5iaXRyYXRlID09IGJpdHJhdGUpICYmCisJCSAgICAoYml0cmF0ZV90YWJsZVtpXS5hdXRvbWF0aWMgPT0gYXV0b21hdGljKSkgeworCQkJcmF0ZW1vZGUgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJhdGVtb2RlOworfQorCit2b2lkIG9yaW5vY29fZ2V0X3JhdGVtb2RlX2NmZyhpbnQgcmF0ZW1vZGUsIGludCAqYml0cmF0ZSwgaW50ICphdXRvbWF0aWMpCit7CisJQlVHX09OKChyYXRlbW9kZSA8IDApIHx8IChyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpKTsKKworCSpiaXRyYXRlID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYml0cmF0ZSAqIDEwMDAwMDsKKwkqYXV0b21hdGljID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYXV0b21hdGljOworfQorCisvKiBHZXQgdHNjIGZyb20gdGhlIGZpcm13YXJlICovCitpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LCB1OCAqdHNjKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1OCB0c2NfYXJyWzRdW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCisJaWYgKChrZXkgPCAwKSB8fCAoa2V5ID4gNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX1RLSVBfSVYsCisJCQkgICAgICBzaXplb2YodHNjX2FyciksIE5VTEwsICZ0c2NfYXJyKTsKKwlpZiAoIWVycikKKwkJbWVtY3B5KHRzYywgJnRzY19hcnJba2V5XVswXSwgc2l6ZW9mKHRzY19hcnJbMF0pKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IHJhdGVtb2RlID0gcHJpdi0+Yml0cmF0ZW1vZGU7CisJaW50IGVyciA9IDA7CisKKwlpZiAocmF0ZW1vZGUgPj0gQklUUkFURV9UQUJMRV9TSVpFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJVRzogSW52YWxpZCBiaXRyYXRlIG1vZGUgJWRcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCByYXRlbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCUhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKKwkJCQliaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hZ2VyZV90eHJhdGVjdHJsKTsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQlIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wsCisJCQkJYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uaW50ZXJzaWxfdHhyYXRlY3RybCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9hY3RfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmJpdHJhdGUpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBpOworCWludCBlcnIgPSAwOworCXUxNiB2YWw7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogTHVjZW50IHN0eWxlIHJhdGUgKi8KKwkJLyogTm90ZSA6IGluIEx1Y2VudCBmaXJtd2FyZSwgdGhlIHJldHVybiB2YWx1ZSBvZgorCQkgKiBIRVJNRVNfUklEX0NVUlJFTlRUWFJBVEUgaXMgdGhlIGJpdHJhdGUgaW4gTWIvcywKKwkJICogYW5kIHRoZXJlZm9yZSBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZQorCQkgKiBlbmNvZGluZyBvZiBIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wuCisJCSAqIERvbid0IGZvcmdldCB0aGF0IDZNYi9zIGlzIHJlYWxseSA1LjVNYi9zICovCisJCWlmICh2YWwgPT0gNikKKwkJCSpiaXRyYXRlID0gNTUwMDAwMDsKKwkJZWxzZQorCQkJKmJpdHJhdGUgPSB2YWwgKiAxMDAwMDAwOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIHJhdGUgKi8KKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOiAvKiBTeW1ib2wgc3R5bGUgcmF0ZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspCisJCQlpZiAoYml0cmF0ZV90YWJsZVtpXS5pbnRlcnNpbF90eHJhdGVjdHJsID09IHZhbCkKKwkJCQlicmVhazsKKworCQlpZiAoaSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IGJpdHJhdGUgKDB4JTA0aHgpXG4iLAorCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHZhbCk7CisKKwkJKmJpdHJhdGUgPSBiaXRyYXRlX3RhYmxlW2ldLmJpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qIFNldCBmaXhlZCBBUCBhZGRyZXNzICovCitpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgcm9hbWluZ19mbGFnOworCWludCBlcnIgPSAwOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJLyogbm90IHN1cHBvcnRlZCAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCWlmIChwcml2LT5ic3NpZF9maXhlZCkKKwkJCXJvYW1pbmdfZmxhZyA9IDI7CisJCWVsc2UKKwkJCXJvYW1pbmdfZmxhZyA9IDE7CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkgICByb2FtaW5nX2ZsYWcpOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1BTkRBVE9SWUJTU0lEX1NZTUJPTCwKKwkJCQkJICAmcHJpdi0+ZGVzaXJlZF9ic3NpZCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKiBDaGFuZ2UgdGhlIFdFUCBrZXlzIGFuZC9vciB0aGUgY3VycmVudCBrZXlzLiAgQ2FuIGJlIGNhbGxlZAorICogZWl0aGVyIGZyb20gX19vcmlub2NvX2h3X3NldHVwX2VuYygpIG9yIGRpcmVjdGx5IGZyb20KKyAqIG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoKS4gIEluIHRoZSBsYXRlciBjYXNlIHRoZSBhc3NvY2lhdGlvbgorICogd2l0aCB0aGUgQVAgaXMgbm90IGJyb2tlbiAoaWYgdGhlIGZpcm13YXJlIGNhbiBoYW5kbGUgaXQpLAorICogd2hpY2ggaXMgbmVlZGVkIGZvciA4MDIuMXggaW1wbGVtZW50YXRpb25zLiAqLworaW50IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORldFUEtFWVNfQUdFUkUsCisJCQkJCSAgJnByaXYtPmtleXMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlRYS0VZX0FHRVJFLAorCQkJCQkgICBwcml2LT50eF9rZXkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCXsKKwkJCWludCBrZXlsZW47CisJCQlpbnQgaTsKKworCQkJLyogRm9yY2UgdW5pZm9ybSBrZXkgbGVuZ3RoIHRvIHdvcmsgYXJvdW5kCisJCQkgKiBmaXJtd2FyZSBidWdzICovCisJCQlrZXlsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ubGVuKTsKKworCQkJaWYgKGtleWxlbiA+IExBUkdFX0tFWV9TSVpFKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBLZXkgJWQgaGFzIG92ZXJzaXplIGxlbmd0aCAlZC5cbiIsCisJCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPnR4X2tleSwga2V5bGVuKTsKKwkJCQlyZXR1cm4gLUUyQklHOworCQkJfQorCisJCQkvKiBXcml0ZSBhbGwgNCBrZXlzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfS0VZUzsgaSsrKSB7CisJCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORkRFRkFVTFRLRVkwICsgaSwKKwkJCQkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oa2V5bGVuKSwKKwkJCQkJCXByaXYtPmtleXNbaV0uZGF0YSk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKworCQkJLyogV3JpdGUgdGhlIGluZGV4IG9mIHRoZSBrZXkgdXNlZCBpbiB0cmFuc21pc3Npb24gKi8KKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GV0VQREVGQVVMVEtFWUlELAorCQkJCQkJcHJpdi0+dHhfa2V5KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9fb3Jpbm9jb19od19zZXR1cF9lbmMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJaW50IG1hc3Rlcl93ZXBfZmxhZzsKKwlpbnQgYXV0aF9mbGFnOworCWludCBlbmNfZmxhZzsKKworCS8qIFNldHVwIFdFUCBrZXlzIGZvciBXRVAgYW5kIFdQQSAqLworCWlmIChwcml2LT5lbmNvZGVfYWxnKQorCQlfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKKworCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCisJCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX1NIQVJFRF9LRVk7CisJZWxzZQorCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9PUEVOOworCisJaWYgKHByaXYtPndwYV9lbmFibGVkKQorCQllbmNfZmxhZyA9IDI7CisJZWxzZSBpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkKKwkJZW5jX2ZsYWcgPSAxOworCWVsc2UKKwkJZW5jX2ZsYWcgPSAwOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBBZ2VyZSBzdHlsZSBXRVAgKi8KKwkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKKwkJCS8qIEVuYWJsZSB0aGUgc2hhcmVkLWtleSBhdXRoZW50aWNhdGlvbi4gKi8KKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTl9BR0VSRSwKKwkJCQkJYXV0aF9mbGFnKTsKKwkJfQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRU5BQkxFRF9BR0VSRSwKKwkJCQkJICAgZW5jX2ZsYWcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAocHJpdi0+aGFzX3dwYSkgeworCQkJLyogU2V0IFdQQSBrZXkgbWFuYWdlbWVudCAqLworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZTRVRXUEFBVVRITUdNVFNVSVRFX0FHRVJFLAorCQkJCSAgcHJpdi0+a2V5X21nbXQpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIFdFUCAqLworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSBXRVAgKi8KKwkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKKwkJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QgfHwKKwkJCSAgICAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkpCisJCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQgfAorCQkJCQkJICBIRVJNRVNfV0VQX0VYQ0xfVU5FTkNSWVBURUQ7CisJCQllbHNlCisJCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQ7CisKKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCSAgIEhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT04sCisJCQkJCQkgICBhdXRoX2ZsYWcpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UKKwkJCW1hc3Rlcl93ZXBfZmxhZyA9IDA7CisKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQorCQkJbWFzdGVyX3dlcF9mbGFnIHw9IEhFUk1FU19XRVBfSE9TVF9ERUNSWVBUOworCisJCS8qIE1hc3RlciBXRVAgc2V0dGluZyA6IG9uL29mZiAqLworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRkxBR1NfSU5URVJTSUwsCisJCQkJCSAgIG1hc3Rlcl93ZXBfZmxhZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBrZXkgbXVzdCBiZSAzMiBieXRlcywgaW5jbHVkaW5nIHRoZSB0eCBhbmQgcnggTUlDIGtleXMuCisgKiByc2MgbXVzdCBiZSA4IGJ5dGVzCisgKiB0c2MgbXVzdCBiZSA4IGJ5dGVzIG9yIE5VTEwKKyAqLworaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaGVybWVzX3QgKmh3LCBpbnQga2V5X2lkeCwgaW50IHNldF90eCwKKwkJCSAgICAgIHU4ICprZXksIHU4ICpyc2MsIHU4ICp0c2MpCit7CisJc3RydWN0IHsKKwkJX19sZTE2IGlkeDsKKwkJdTggcnNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCQl1OCBrZXlbVEtJUF9LRVlMRU5dOworCQl1OCB0eF9taWNbTUlDX0tFWUxFTl07CisJCXU4IHJ4X21pY1tNSUNfS0VZTEVOXTsKKwkJdTggdHNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKKwlpbnQgcmV0OworCWludCBlcnI7CisJaW50IGs7CisJdTE2IHhtaXR0aW5nOworCisJa2V5X2lkeCAmPSAweDM7CisKKwlpZiAoc2V0X3R4KQorCQlrZXlfaWR4IHw9IDB4ODAwMDsKKworCWJ1Zi5pZHggPSBjcHVfdG9fbGUxNihrZXlfaWR4KTsKKwltZW1jcHkoYnVmLmtleSwga2V5LAorCSAgICAgICBzaXplb2YoYnVmLmtleSkgKyBzaXplb2YoYnVmLnR4X21pYykgKyBzaXplb2YoYnVmLnJ4X21pYykpOworCisJaWYgKHJzYyA9PSBOVUxMKQorCQltZW1zZXQoYnVmLnJzYywgMCwgc2l6ZW9mKGJ1Zi5yc2MpKTsKKwllbHNlCisJCW1lbWNweShidWYucnNjLCByc2MsIHNpemVvZihidWYucnNjKSk7CisKKwlpZiAodHNjID09IE5VTEwpIHsKKwkJbWVtc2V0KGJ1Zi50c2MsIDAsIHNpemVvZihidWYudHNjKSk7CisJCWJ1Zi50c2NbNF0gPSAweDEwOworCX0gZWxzZSB7CisJCW1lbWNweShidWYudHNjLCB0c2MsIHNpemVvZihidWYudHNjKSk7CisJfQorCisJLyogV2FpdCB1cHRvIDEwMG1zIGZvciB0eCBxdWV1ZSB0byBlbXB0eSAqLworCWsgPSAxMDA7CisJZG8geworCQlrLS07CisJCXVkZWxheSgxMDAwKTsKKwkJcmV0ID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfVFhRVUVVRUVNUFRZLAorCQkJCQkgICZ4bWl0dGluZyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9IHdoaWxlICgoayA+IDApICYmIHhtaXR0aW5nKTsKKworCWlmIChrID09IDApCisJCXJldCA9IC1FVElNRURPVVQ7CisKKwllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GQUREREVGQVVMVFRLSVBLRVlfQUdFUkUsCisJCQkJICAmYnVmKTsKKworCXJldHVybiByZXQgPyByZXQgOiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJbWVtc2V0KCZwcml2LT50a2lwX2tleVtrZXlfaWR4XSwgMCwgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2tleV9pZHhdKSk7CisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgIEhFUk1FU19SSURfQ05GUkVNREVGQVVMVFRLSVBLRVlfQUdFUkUsCisJCQkJICAga2V5X2lkeCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGNsZWFyaW5nIFRLSVAga2V5ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyLCBrZXlfaWR4KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCwKKwkJCQkgICAgaW50IG1jX2NvdW50LCBpbnQgcHJvbWlzYykKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisKKwlpZiAocHJvbWlzYyAhPSBwcml2LT5wcm9taXNjdW91cykgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUFJPTUlTQ1VPVVNNT0RFLAorCQkJCQkgICBwcm9taXNjKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBQUk9NSVNDVU9VU01PREUgdG8gMS5cbiIsCisJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyKTsKKwkJfSBlbHNlCisJCQlwcml2LT5wcm9taXNjdW91cyA9IHByb21pc2M7CisJfQorCisJLyogSWYgd2UncmUgbm90IGluIHByb21pc2N1b3VzIG1vZGUsIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhlCisJICogZ3JvdXAgYWRkcmVzcyBpZiBlaXRoZXIgd2Ugd2FudCB0byBtdWx0aWNhc3QsIG9yIGlmIHdlIHdlcmUKKwkgKiBtdWx0aWNhc3RpbmcgYW5kIHdhbnQgdG8gc3RvcCAqLworCWlmICghcHJvbWlzYyAmJiAobWNfY291bnQgfHwgcHJpdi0+bWNfY291bnQpKSB7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqcCA9IG1jX2xpc3Q7CisJCXN0cnVjdCBoZXJtZXNfbXVsdGljYXN0IG1jbGlzdDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKKwkJCS8qIHBhcmFub2lhOiBpcyBsaXN0IHNob3J0ZXIgdGhhbiBtY19jb3VudD8gKi8KKwkJCUJVR19PTighcCk7CisJCQkvKiBwYXJhbm9pYTogYmFkIGFkZHJlc3Mgc2l6ZSBpbiBsaXN0PyAqLworCQkJQlVHX09OKHAtPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKTsKKworCQkJbWVtY3B5KG1jbGlzdC5hZGRyW2ldLCBwLT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQkJcCA9IHAtPm5leHQ7CisJCX0KKworCQlpZiAocCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNdWx0aWNhc3QgbGlzdCBpcyAiCisJCQkgICAgICAgImxvbmdlciB0aGFuIG1jX2NvdW50XG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKKworCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkgICBIRVJNRVNfUklEX0NORkdST1VQQUREUkVTU0VTLAorCQkJCSAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obWNfY291bnQgKiBFVEhfQUxFTiksCisJCQkJICAgJm1jbGlzdCk7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG11bHRpY2FzdCBsaXN0LlxuIiwKKwkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIpOworCQllbHNlCisJCQlwcml2LT5tY19jb3VudCA9IG1jX2NvdW50OworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKiBSZXR1cm4gOiA8IDAgLT4gZXJyb3IgY29kZSA7ID49IDAgLT4gbGVuZ3RoICovCitpbnQgb3Jpbm9jb19od19nZXRfZXNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICphY3RpdmUsCisJCQkgY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMV0pCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgZXNzaWRidWY7CisJY2hhciAqcCA9IChjaGFyICopKCZlc3NpZGJ1Zi52YWwpOworCWludCBsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA+IDApIHsKKwkJLyogV2UgcmVhZCB0aGUgZGVzaXJlZCBTU0lEIGZyb20gdGhlIGhhcmR3YXJlIHJhdGhlcgorCQkgICB0aGFuIGZyb20gcHJpdi0+ZGVzaXJlZF9lc3NpZCwganVzdCBpbiBjYXNlIHRoZQorCQkgICBmaXJtd2FyZSBpcyBhbGxvd2VkIHRvIGNoYW5nZSBpdCBvbiB1cy4gSSdtIG5vdAorCQkgICBzdXJlIGFib3V0IHRoaXMgKi8KKwkJLyogTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgT1dOU1NJRCBzaG91bGQgYWx3YXlzIGJlIHdoYXRldmVyCisJCSAqIHdlIHNldCB0byB0aGUgY2FyZCwgd2hlcmVhcyBDVVJSRU5UX1NTSUQgaXMgdGhlIG9uZSB0aGF0CisJCSAqIG1heSBjaGFuZ2UuLi4gLSBKZWFuIElJICovCisJCXUxNiByaWQ7CisKKwkJKmFjdGl2ZSA9IDE7CisKKwkJcmlkID0gKHByaXYtPnBvcnRfdHlwZSA9PSAzKSA/IEhFUk1FU19SSURfQ05GT1dOU1NJRCA6CisJCQlIRVJNRVNfUklEX0NORkRFU0lSRURTU0lEOworCisJCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgc2l6ZW9mKGVzc2lkYnVmKSwKKwkJCQkgICAgICBOVUxMLCAmZXNzaWRidWYpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsX3VubG9jazsKKwl9IGVsc2UgeworCQkqYWN0aXZlID0gMDsKKworCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRTU0lELAorCQkJCSAgICAgIHNpemVvZihlc3NpZGJ1ZiksIE5VTEwsICZlc3NpZGJ1Zik7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxfdW5sb2NrOworCX0KKworCWxlbiA9IGxlMTZfdG9fY3B1KGVzc2lkYnVmLmxlbik7CisJQlVHX09OKGxlbiA+IElXX0VTU0lEX01BWF9TSVpFKTsKKworCW1lbXNldChidWYsIDAsIElXX0VTU0lEX01BWF9TSVpFKTsKKwltZW1jcHkoYnVmLCBwLCBsZW4pOworCWVyciA9IGxlbjsKKworIGZhaWxfdW5sb2NrOgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgb3Jpbm9jb19od19nZXRfZnJlcShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgY2hhbm5lbDsKKwlpbnQgZnJlcSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVENIQU5ORUwsCisJCQkJICAmY2hhbm5lbCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBJbnRlcnNpbCBmaXJtd2FyZSAxLjMuNSByZXR1cm5zIDAgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KKwlpZiAoY2hhbm5lbCA9PSAwKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiBOVU1fQ0hBTk5FTFMpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDaGFubmVsIG91dCBvZiByYW5nZSAoJWQpIVxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGNoYW5uZWwpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCisJfQorCWZyZXEgPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbm5lbCk7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWlmIChlcnIgPiAwKQorCQllcnIgPSAtRUJVU1k7CisJcmV0dXJuIGVyciA/IGVyciA6IGZyZXE7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJICAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbGlzdDsKKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbGlzdC52YWw7CisJaW50IGVyciA9IDA7CisJaW50IG51bTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NVUFBPUlRFRERBVEFSQVRFUywKKwkJCSAgICAgIHNpemVvZihsaXN0KSwgTlVMTCwgJmxpc3QpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbnVtID0gbGUxNl90b19jcHUobGlzdC5sZW4pOworCSpudW1yYXRlcyA9IG51bTsKKwludW0gPSBtaW4obnVtLCBtYXgpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlyYXRlc1tpXSA9IChwW2ldICYgMHg3ZikgKiA1MDAwMDA7IC8qIGNvbnZlcnQgdG8gYnBzICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzNmMjNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qIEVuY2Fwc3VsYXRlIGJhc2ljIHNldHRpbmcgY2hhbmdlcyBvbiBIZXJtZXMgaGFyZHdhcmUKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19IV19IXworI2RlZmluZSBfT1JJTk9DT19IV19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorCisvKiBIYXJkd2FyZSBCQVBzICovCisjZGVmaW5lIFVTRVJfQkFQIDAKKyNkZWZpbmUgSVJRX0JBUCAgMQorCisvKiBXRVAga2V5IHNpemVzICovCisjZGVmaW5lIFNNQUxMX0tFWV9TSVpFIDUKKyNkZWZpbmUgTEFSR0VfS0VZX1NJWkUgMTMKKworLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBjaGFubmVscyAqLworI2RlZmluZSBOVU1fQ0hBTk5FTFMgMTQKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CitzdHJ1Y3QgZGV2X2FkZHJfbGlzdDsKKworaW50IG9yaW5vY29fZ2V0X2JpdHJhdGVtb2RlKGludCBiaXRyYXRlLCBpbnQgYXV0b21hdGljKTsKK3ZvaWQgb3Jpbm9jb19nZXRfcmF0ZW1vZGVfY2ZnKGludCByYXRlbW9kZSwgaW50ICpiaXRyYXRlLCBpbnQgKmF1dG9tYXRpYyk7CisKK2ludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksIHU4ICp0c2MpOworaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBvcmlub2NvX2h3X2dldF9hY3RfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmJpdHJhdGUpOworaW50IF9fb3Jpbm9jb19od19zZXRfd2FwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19od19zZXR1cF9lbmMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShoZXJtZXNfdCAqaHcsIGludCBrZXlfaWR4LCBpbnQgc2V0X3R4LAorCQkJICAgICAgdTggKmtleSwgdTggKnJzYywgdTggKnRzYyk7CitpbnQgb3Jpbm9jb19jbGVhcl90a2lwX2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5X2lkeCk7CitpbnQgX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCwKKwkJCQkgICAgaW50IG1jX2NvdW50LCBpbnQgcHJvbWlzYyk7CitpbnQgb3Jpbm9jb19od19nZXRfZXNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICphY3RpdmUsCisJCQkgY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMV0pOworaW50IG9yaW5vY29faHdfZ2V0X2ZyZXEoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBpbnQgKm51bXJhdGVzLCBzMzIgKnJhdGVzLCBpbnQgbWF4KTsKKworI2VuZGlmIC8qIF9PUklOT0NPX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTU5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYwpAQCAtMCwwICsxLDI2NjcgQEAKKy8qIG1haW4uYyAtIChmb3JtZXJseSBrbm93biBhcyBkbGR3ZF9jcy5jLCBvcmlub2NvX2NzLmMgYW5kIG9yaW5vY28uYykKKyAqCisgKiBBIGRyaXZlciBmb3IgSGVybWVzIG9yIFByaXNtIDIgY2hpcHNldCBiYXNlZCBQQ01DSUEgd2lyZWxlc3MKKyAqIGFkYXB0b3JzLCB3aXRoIEx1Y2VudC9BZ2VyZSwgSW50ZXJzaWwgb3IgU3ltYm9sIGZpcm13YXJlLgorICoKKyAqIEN1cnJlbnQgbWFpbnRhaW5lcnMgKGFzIG9mIDI5IFNlcHRlbWJlciAyMDAzKSBhcmU6CisgKiAJUGF2ZWwgUm9za2luIDxwcm9za2kgQVQgZ251Lm9yZz4KKyAqIGFuZAlEYXZpZCBHaWJzb24gPGhlcm1lcyBBVCBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CisgKgorICogKEMpIENvcHlyaWdodCBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbiAyMDAxLTIwMDMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgR2lic29uLCBMaW51eGNhcmUgQXVzdHJhbGlhLgorICoJV2l0aCBzb21lIGhlbHAgZnJvbSA6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgSmVhbiBUb3VycmlsaGVzLCBIUCBMYWJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQmVuamFtaW4gSGVycmVuc2NobWlkdAorICoKKyAqIEJhc2VkIG9uIGR1bW15X2NzLmMgMS4yNyAyMDAwLzA2LzEyIDIxOjI3OjI1CisgKgorICogUG9ydGlvbnMgYmFzZWQgb24gd3ZsYW5fY3MuYyAxLjAuNiwgQ29weXJpZ2h0IEFuZHJlYXMgTmV1aGF1cyA8YW5keQorICogQVQgZmFzdGEuZmgtZG9ydG11bmQuZGU+CisgKiAgICAgIGh0dHA6Ly93d3cuc3R1ZC5maC1kb3J0bXVuZC5kZS9+YW5keS93dmxhbi8KKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQorICogYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQorICogdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgKiA8ZGFoaW5kcyBBVCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZAorICogQS4gSGluZHMgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMKKyAqIFJlc2VydmVkLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbgorICogd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisgKiBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICogb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUKKyAqIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICogdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4gICovCisKKy8qCisgKiBUT0RPCisgKglvIEhhbmRsZSBkZS1lbmNhcHN1bGF0aW9uIHdpdGhpbiBuZXR3b3JrIGxheWVyLCBwcm92aWRlIDgwMi4xMQorICoJICBoZWFkZXJzIChwYXRjaCBmcm9tIFRob21hcyAnRGVudCcgTWlybGFjaGVyKQorICoJbyBGaXggcG9zc2libGUgcmFjZXMgaW4gU1BZIGhhbmRsaW5nLgorICoJbyBEaXNjb25uZWN0IHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJvbSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uLgorICoJbyAobWF5YmUpIFNvZnR3YXJlIFdFUCBzdXBwb3J0IChwYXRjaCBmcm9tIFN0YW5vIE1lZHVuYSkuCisgKglvIChtYXliZSkgVXNlIG11bHRpcGxlIFR4IGJ1ZmZlcnMgLSBkcml2ZXIgaGFuZGxpbmcgcXVldWUKKyAqCSAgcmF0aGVyIHRoYW4gZmlybXdhcmUuCisgKi8KKworLyogTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uOgorICoKKyAqIFRoZSBiYXNpYyBwcmluY2lwbGUgaXMgdGhhdCBldmVyeXRoaW5nIGlzIHNlcmlhbGl6ZWQgdGhyb3VnaCBhCisgKiBzaW5nbGUgc3BpbmxvY2ssIHByaXYtPmxvY2suICBUaGUgbG9jayBpcyB1c2VkIGluIHVzZXIsIGJoIGFuZCBpcnEKKyAqIGNvbnRleHQsIHNvIHdoZW4gdGFrZW4gb3V0c2lkZSBoYXJkaXJxIGNvbnRleHQgaXQgc2hvdWxkIGFsd2F5cyBiZQorICogdGFrZW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgVGhlIGxvY2sgcHJvdGVjdHMgYm90aCB0aGUKKyAqIGhhcmR3YXJlIGFuZCB0aGUgc3RydWN0IG9yaW5vY29fcHJpdmF0ZS4KKyAqCisgKiBBbm90aGVyIGZsYWcsIHByaXYtPmh3X3VuYXZhaWxhYmxlIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBpcworICogdW5hdmFpbGFibGUgZm9yIGFuIGV4dGVuZGVkIHBlcmlvZCBvZiB0aW1lIChlLmcuIHN1c3BlbmRlZCwgb3IgaW4KKyAqIHRoZSBtaWRkbGUgb2YgYSBoYXJkIHJlc2V0KS4gIFRoaXMgZmxhZyBpcyBwcm90ZWN0ZWQgYnkgdGhlCisgKiBzcGlubG9jay4gIEFsbCBjb2RlIHdoaWNoIHRvdWNoZXMgdGhlIGhhcmR3YXJlIHNob3VsZCBjaGVjayB0aGUKKyAqIGZsYWcgYWZ0ZXIgdGFraW5nIHRoZSBsb2NrLCBhbmQgaWYgaXQgaXMgc2V0LCBnaXZlIHVwIG9uIHdoYXRldmVyCisgKiB0aGV5IGFyZSBkb2luZyBhbmQgZHJvcCB0aGUgbG9jayBhZ2Fpbi4gIFRoZSBvcmlub2NvX2xvY2soKQorICogZnVuY3Rpb24gaGFuZGxlcyB0aGlzIChpdCB1bmxvY2tzIGFuZCByZXR1cm5zIC1FQlVTWSBpZgorICogaHdfdW5hdmFpbGFibGUgaXMgbm9uLXplcm8pLgorICovCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY28iCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgorI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJtaWMuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIndleHQuaCIKKyNpbmNsdWRlICJtYWluLmgiCisKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4gJiAiCisJICAgICAgIkRhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBMdWNlbnQgT3Jpbm9jbywgUHJpc20gSUkgYmFzZWQgIgorCQkgICAiYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKKworLyogTGV2ZWwgb2YgZGVidWdnaW5nLiBVc2VkIGluIHRoZSBtYWNyb3MgaW4gb3Jpbm9jby5oICovCisjaWZkZWYgT1JJTk9DT19ERUJVRworaW50IG9yaW5vY29fZGVidWcgPSBPUklOT0NPX0RFQlVHOworRVhQT1JUX1NZTUJPTChvcmlub2NvX2RlYnVnKTsKK21vZHVsZV9wYXJhbShvcmlub2NvX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhvcmlub2NvX2RlYnVnLCAiRGVidWcgbGV2ZWwiKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHN1cHByZXNzX2xpbmtzdGF0dXM7IC8qID0gMCAqLworbW9kdWxlX3BhcmFtKHN1cHByZXNzX2xpbmtzdGF0dXMsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhzdXBwcmVzc19saW5rc3RhdHVzLCAiRG9uJ3QgbG9nIGxpbmsgc3RhdHVzIGNoYW5nZXMiKTsKKworc3RhdGljIGludCBpZ25vcmVfZGlzY29ubmVjdDsgLyogPSAwICovCittb2R1bGVfcGFyYW0oaWdub3JlX2Rpc2Nvbm5lY3QsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9kaXNjb25uZWN0LAorCQkgIkRvbid0IHJlcG9ydCBsb3N0IGxpbmsgdG8gdGhlIG5ldHdvcmsgbGF5ZXIiKTsKKworaW50IGZvcmNlX21vbml0b3I7IC8qID0gMCAqLworbW9kdWxlX3BhcmFtKGZvcmNlX21vbml0b3IsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX21vbml0b3IsICJBbGxvdyBtb25pdG9yIG1vZGUgZm9yIGFsbCBmaXJtd2FyZSB2ZXJzaW9ucyIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcm5hbCBjb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIDgwMi4yIExMQy9TTkFQIGhlYWRlciB1c2VkIGZvciBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIG92ZXIgODAyLjExICovCitzdGF0aWMgY29uc3QgdTggZW5jYXBzX2hkcltdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OworI2RlZmluZSBFTkNBUFNfT1ZFUkhFQUQJCShzaXplb2YoZW5jYXBzX2hkcikgKyAyKQorCisjZGVmaW5lIE9SSU5PQ09fTUlOX01UVQkJMjU2CisjZGVmaW5lIE9SSU5PQ09fTUFYX01UVQkJKElFRUU4MDIxMV9NQVhfREFUQV9MRU4gLSBFTkNBUFNfT1ZFUkhFQUQpCisKKyNkZWZpbmUgU1lNQk9MX01BWF9WRVJfTEVOCSgxNCkKKyNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9JUlEJMTAKKyNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9KSUZGWQkoMjAwMDAvSFopIC8qIEJhc2VkIG9uIGEgZ3Vlc3RpbWF0ZSBvZgorCQkJCQkgICAgKiBob3cgbWFueSBldmVudHMgdGhlCisJCQkJCSAgICAqIGRldmljZSBjb3VsZAorCQkJCQkgICAgKiBsZWdpdGltYXRlbHkgZ2VuZXJhdGUgKi8KKyNkZWZpbmUgVFhfTklDQlVGX1NJWkVfQlVHCTE1ODUJCS8qIEJ1ZyBpbiBTeW1ib2wgZmlybXdhcmUgKi8KKworI2RlZmluZSBEVU1NWV9GSUQJCTB4RkZGRgorCisvKiNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFID8gXAorICBIRVJNRVNfTUFYX01VTFRJQ0FTVCA6IDApKi8KKyNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkoSEVSTUVTX01BWF9NVUxUSUNBU1QpCisKKyNkZWZpbmUgT1JJTk9DT19JTlRFTgkgCShIRVJNRVNfRVZfUlggfCBIRVJNRVNfRVZfQUxMT0MgXAorCQkJCSB8IEhFUk1FU19FVl9UWCB8IEhFUk1FU19FVl9UWEVYQyBcCisJCQkJIHwgSEVSTUVTX0VWX1dURVJSIHwgSEVSTUVTX0VWX0lORk8gXAorCQkJCSB8IEhFUk1FU19FVl9JTkZEUk9QKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQmVnaW5uaW5nIG9mIHRoZSBUeCBkZXNjcmlwdG9yLCB1c2VkIGluIFR4RXhjIGhhbmRsaW5nICovCitzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgeworCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBSeCBmcmFtZSBoZWFkZXIgZXhjZXB0IGNvbXBhdGliaWxpdHkgODAyLjMgaGVhZGVyICovCitzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgeworCS8qIENvbnRyb2wgKi8KKwlfX2xlMTYgc3RhdHVzOworCV9fbGUzMiB0aW1lOworCXU4IHNpbGVuY2U7CisJdTggc2lnbmFsOworCXU4IHJhdGU7CisJdTggcnhmbG93OworCV9fbGUzMiByZXNlcnZlZDsKKworCS8qIDgwMi4xMSBoZWFkZXIgKi8KKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBhZGRyNFtFVEhfQUxFTl07CisKKwkvKiBEYXRhIGxlbmd0aCAqLworCV9fbGUxNiBkYXRhX2xlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhIHsKKwlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3dpdGNoIChwcml2LT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQlwcml2LT5wb3J0X3R5cGUgPSAxOworCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQlpZiAocHJpdi0+cHJlZmVyX3BvcnQzKSB7CisJCQlwcml2LT5wb3J0X3R5cGUgPSAzOworCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7CisJCX0gZWxzZSB7CisJCQlwcml2LT5wb3J0X3R5cGUgPSBwcml2LT5pYnNzX3BvcnQ7CisJCQlwcml2LT5jcmVhdGVpYnNzID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIElXX01PREVfTU9OSVRPUjoKKwkJcHJpdi0+cG9ydF90eXBlID0gMzsKKwkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgcHJpdi0+aXdfbW9kZSBpbiBzZXRfcG9ydF90eXBlKClcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERldmljZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBvcmlub2NvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCisJaWYgKCFlcnIpCisJCXByaXYtPm9wZW4gPSAxOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisKKwkvKiBXZSBtdXN0bid0IHVzZSBvcmlub2NvX2xvY2soKSBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUKKwkgICBhYmxlIHRvIGNsb3NlIHRoZSBpbnRlcmZhY2UgZXZlbiBpZiBod191bmF2YWlsYWJsZSBpcyBzZXQKKwkgICAoZS5nLiBhcyB3ZSdyZSByZWxlYXNlZCBhZnRlciBhIFBDIENhcmQgcmVtb3ZhbCkgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXByaXYtPm9wZW4gPSAwOworCisJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm9yaW5vY29fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gJnByaXYtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KCkgIgorCQkgICAgICAgImNhbGxlZCB3aGVuIGh3X3VuYXZhaWxhYmxlXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKChuZXdfbXR1IDwgT1JJTk9DT19NSU5fTVRVKSB8fCAobmV3X210dSA+IE9SSU5PQ09fTUFYX01UVSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTVRVICsgZW5jYXBzdWxhdGlvbiArIGhlYWRlciBsZW5ndGggKi8KKwlpZiAoKG5ld19tdHUgKyBFTkNBUFNfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKSA+CisJICAgICAocHJpdi0+bmljYnVmX3NpemUgLSBFVEhfSExFTikpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5tdHUgPSBuZXdfbXR1OworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFR4IHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBvcmlub2NvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiB0eGZpZCA9IHByaXYtPnR4ZmlkOworCXN0cnVjdCBldGhoZHIgKmVoOworCWludCB0eF9jb250cm9sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUeCBvbiBzdG9wcGVkIGRldmljZSFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHdoaWxlIHRyYW5zbWl0dGVyIGJ1c3khXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29feG1pdCgpIGNhbGxlZCB3aGlsZSBod191bmF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSB8fCAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpKSB7CisJCS8qIE9vcHMsIHRoZSBmaXJtd2FyZSBoYXNuJ3QgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uLAorCQkgICBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQgKHRoaXMgc2VlbXMgdG8gYmUgdGhlCisJCSAgIHNhZmVzdCBhcHByb2FjaCkuICovCisJCWdvdG8gZHJvcDsKKwl9CisKKwkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCisJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCisJCWdvdG8gZHJvcDsKKworCXR4X2NvbnRyb2wgPSBIRVJNRVNfVFhDVFJMX1RYX09LIHwgSEVSTUVTX1RYQ1RSTF9UWF9FWDsKKworCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkKKwkJdHhfY29udHJvbCB8PSAocHJpdi0+dHhfa2V5IDw8IEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKSB8CisJCQlIRVJNRVNfVFhDVFJMX01JQzsKKworCWlmIChwcml2LT5oYXNfYWx0X3R4Y250bCkgeworCQkvKiBXUEEgZW5hYmxlZCBmaXJtd2FyZXMgaGF2ZSB0eF9jbnRsIGF0IHRoZSBlbmQgb2YKKwkJICogdGhlIDgwMi4xMSBoZWFkZXIuICBTbyB3cml0ZSB6ZXJvZWQgZGVzY3JpcHRvciBhbmQKKwkJICogODAyLjExIGhlYWRlciBhdCB0aGUgc2FtZSB0aW1lCisJCSAqLworCQljaGFyIGRlc2NbSEVSTUVTXzgwMl8zX09GRlNFVF07CisJCV9fbGUxNiAqdHhjbnRsID0gKF9fbGUxNiAqKSAmZGVzY1tIRVJNRVNfVFhDTlRMMl9PRkZTRVRdOworCisJCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKworCQkqdHhjbnRsID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7CisJCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKKwkJCQkJdHhmaWQsIDApOworCQlpZiAoZXJyKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgorCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gYnVzeTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOworCisJCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKworCQlkZXNjLnR4X2NvbnRyb2wgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAorCQkJCQl0eGZpZCwgMCk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCisJCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBidXN5OworCQl9CisKKwkJLyogQ2xlYXIgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgbGVuZ3RoIGZpZWxkcyAtIHNvbWUKKwkJICogZmlybXdhcmVzIChlLmcuIEx1Y2VudC9BZ2VyZSA4Lnh4KSBhcHBlYXIgdG8gZ2V0IGNvbmZ1c2VkCisJCSAqIGlmIHRoaXMgaXNuJ3QgZG9uZS4gKi8KKwkJaGVybWVzX2NsZWFyX3dvcmRzKGh3LCBIRVJNRVNfREFUQTAsCisJCQkJICAgSEVSTUVTXzgwMl8zX09GRlNFVCAtIEhFUk1FU184MDJfMTFfT0ZGU0VUKTsKKwl9CisKKwllaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOworCisJLyogRW5jYXBzdWxhdGUgRXRoZXJuZXQtSUkgZnJhbWVzICovCisJaWYgKG50b2hzKGVoLT5oX3Byb3RvKSA+IEVUSF9EQVRBX0xFTikgeyAvKiBFdGhlcm5ldC1JSSBmcmFtZSAqLworCQlzdHJ1Y3QgaGVhZGVyX3N0cnVjdCB7CisJCQlzdHJ1Y3QgZXRoaGRyIGV0aDsJLyogODAyLjMgaGVhZGVyICovCisJCQl1OCBlbmNhcFs2XTsJCS8qIDgwMi4yIGhlYWRlciAqLworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZHI7CisKKwkJLyogU3RyaXAgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBmcm9tIHRoZSBkYXRhICovCisJCXNrYl9wdWxsKHNrYiwgMiAqIEVUSF9BTEVOKTsKKworCQkvKiBBbmQgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUgaGVhZGVyICovCisJCW1lbWNweSgmaGRyLmV0aCwgZWgsIDIgKiBFVEhfQUxFTik7CisJCWhkci5ldGguaF9wcm90byA9IGh0b25zKHNpemVvZihlbmNhcHNfaGRyKSArIHNrYi0+bGVuKTsKKwkJbWVtY3B5KGhkci5lbmNhcCwgZW5jYXBzX2hkciwgc2l6ZW9mKGVuY2Fwc19oZHIpKTsKKworCQkvKiBJbnNlcnQgdGhlIFNOQVAgaGVhZGVyICovCisJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZihoZHIpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IE5vdCBlbm91Z2ggaGVhZHJvb20gZm9yIDgwMi4yIGhlYWRlcnMgJWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBza2JfaGVhZHJvb20oc2tiKSk7CisJCQlnb3RvIGRyb3A7CisJCX0KKwkJZWggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVzaChza2IsIHNpemVvZihoZHIpKTsKKwkJbWVtY3B5KGVoLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJfQorCisJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgcGFja2V0IHRvIEJBUFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBidXN5OworCX0KKworCS8qIENhbGN1bGF0ZSBNaWNoYWVsIE1JQyAqLworCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgeworCQl1OCBtaWNfYnVmW01JQ0hBRUxfTUlDX0xFTiArIDFdOworCQl1OCAqbWljOworCQlzaXplX3Qgb2Zmc2V0OworCQlzaXplX3QgbGVuOworCisJCWlmIChza2ItPmxlbiAlIDIpIHsKKwkJCS8qIE1JQyBzdGFydCBpcyBvbiBhbiBvZGQgYm91bmRhcnkgKi8KKwkJCW1pY19idWZbMF0gPSBza2ItPmRhdGFbc2tiLT5sZW4gLSAxXTsKKwkJCW1pYyA9ICZtaWNfYnVmWzFdOworCQkJb2Zmc2V0ID0gc2tiLT5sZW4gLSAxOworCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOICsgMTsKKwkJfSBlbHNlIHsKKwkJCW1pYyA9ICZtaWNfYnVmWzBdOworCQkJb2Zmc2V0ID0gc2tiLT5sZW47CisJCQlsZW4gPSBNSUNIQUVMX01JQ19MRU47CisJCX0KKworCQlvcmlub2NvX21pYyhwcml2LT50eF90Zm1fbWljLAorCQkJICAgIHByaXYtPnRraXBfa2V5W3ByaXYtPnR4X2tleV0udHhfbWljLAorCQkJICAgIGVoLT5oX2Rlc3QsIGVoLT5oX3NvdXJjZSwgMCAvKiBwcmlvcml0eSAqLywKKwkJCSAgICBza2ItPmRhdGEgKyBFVEhfSExFTiwgc2tiLT5sZW4gLSBFVEhfSExFTiwgbWljKTsKKworCQkvKiBXcml0ZSB0aGUgTUlDICovCisJCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJm1pY19idWZbMF0sIGxlbiwKKwkJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQgKyBvZmZzZXQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIE1JQyB0byBCQVBcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBidXN5OworCQl9CisJfQorCisJLyogRmluYWxseSwgd2UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHNlbmQgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9UWCB8IEhFUk1FU19DTURfUkVDTCwKKwkJCQl0eGZpZCwgTlVMTCk7CisJaWYgKGVycikgeworCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKKwkJCQlkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gYnVzeTsKKwl9CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gSEVSTUVTXzgwMl8zX09GRlNFVCArIHNrYi0+bGVuOworCWdvdG8gb2s7CisKKyBkcm9wOgorCXN0YXRzLT50eF9lcnJvcnMrKzsKKwlzdGF0cy0+dHhfZHJvcHBlZCsrOworCisgb2s6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworIGJ1c3k6CisJaWYgKGVyciA9PSAtRUlPKQorCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBORVRERVZfVFhfQlVTWTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOworCisJaWYgKGZpZCAhPSBwcml2LT50eGZpZCkgeworCQlpZiAoZmlkICE9IERVTU1ZX0ZJRCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBbGxvY2F0ZSBldmVudCBvbiB1bmV4cGVjdGVkIGZpZCAoJTA0WClcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmaWQpOworCQlyZXR1cm47CisJfQorCisJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEFMTE9DRklELCBEVU1NWV9GSUQpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKworCXN0YXRzLT50eF9wYWNrZXRzKys7CisKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CisKKwloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4ZXhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOworCXUxNiBzdGF0dXM7CisJc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIGhkcjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChmaWQgPT0gRFVNTVlfRklEKQorCQlyZXR1cm47IC8qIE5vdGhpbmcncyByZWFsbHkgaGFwcGVuZWQgKi8KKworCS8qIFJlYWQgcGFydCBvZiB0aGUgZnJhbWUgaGVhZGVyIC0gd2UgbmVlZCBzdGF0dXMgYW5kIGFkZHIxICovCisJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmhkciwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhlcm1lc190eGV4Y19kYXRhKSwKKwkJCSAgICAgICBmaWQsIDApOworCisJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7CisJc3RhdHMtPnR4X2Vycm9ycysrOworCisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlYWQgZGVzY3JpcHRvciBvbiBUeCBlcnJvciAiCisJCSAgICAgICAiKEZJRD0lMDRYIGVycm9yICVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZmlkLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJREVCVUcoMSwgIiVzOiBUeCBlcnJvciwgZXJyICVkIChGSUQ9JTA0WClcbiIsIGRldi0+bmFtZSwKKwkgICAgICBlcnIsIGZpZCk7CisKKwkvKiBXZSBwcm9kdWNlIGEgVFhEUk9QIGV2ZW50IG9ubHkgZm9yIHJldHJ5IG9yIGxpZmV0aW1lCisJICogZXhjZWVkZWQsIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHN0YXR1cyB0aGF0IHJlYWxseSBtZWFuCisJICogdGhhdCB0aGlzIHBhcnRpY3VsYXIgbm9kZSB3ZW50IGF3YXkuCisJICogT3RoZXIgZXJyb3JzIG1lYW5zIHRoYXQgKndlKiBzY3Jld2VkIHVwLiAtIEplYW4gSUkgKi8KKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShoZHIuZGVzYy5zdGF0dXMpOworCWlmIChzdGF0dXMgJiAoSEVSTUVTX1RYU1RBVF9SRVRSWUVSUiB8IEhFUk1FU19UWFNUQVRfQUdFREVSUikpIHsKKwkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCisJCS8qIENvcHkgODAyLjExIGRlc3QgYWRkcmVzcy4KKwkJICogV2UgdXNlIHRoZSA4MDIuMTEgaGVhZGVyIGJlY2F1c2UgdGhlIGZyYW1lIG1heQorCQkgKiBub3QgYmUgODAyLjMgb3IgbWF5IGJlIG1hbmdsZWQuLi4KKwkJICogSW4gQWQtSG9jIG1vZGUsIGl0IHdpbGwgYmUgdGhlIG5vZGUgYWRkcmVzcy4KKwkJICogSW4gbWFuYWdlZCBtb2RlLCBpdCB3aWxsIGJlIG1vc3QgbGlrZWx5IHRoZSBBUCBhZGRyCisJCSAqIFVzZXIgc3BhY2Ugd2lsbCBmaWd1cmUgb3V0IGhvdyB0byBjb252ZXJ0IGl0IHRvCisJCSAqIHdoYXRldmVyIGl0IG5lZWRzIChJUCBhZGRyZXNzIG9yIGVsc2UpLgorCQkgKiAtIEplYW4gSUkgKi8KKwkJbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBoZHIuYWRkcjEsIEVUSF9BTEVOKTsKKwkJd3JxdS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZUWERST1AsICZ3cnF1LCBOVUxMKTsKKwl9CisKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUeCB0aW1lb3V0ISAiCisJICAgICAgICJBTExPQ0ZJRD0lMDR4LCBUWENPTVBMRklEPSUwNHgsIEVWU1RBVD0lMDR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKSwKKwkgICAgICAgaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCksIGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCkpOworCisJc3RhdHMtPnR4X2Vycm9ycysrOworCisJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJ4IHBhdGggKGRhdGEgZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRG9lcyB0aGUgZnJhbWUgaGF2ZSBhIFNOQVAgaGVhZGVyIGluZGljYXRpbmcgaXQgc2hvdWxkIGJlCisgKiBkZS1lbmNhcHN1bGF0ZWQgdG8gRXRoZXJuZXQtSUk/ICovCitzdGF0aWMgaW5saW5lIGludCBpc19ldGhlcnNuYXAodm9pZCAqX2hkcikKK3sKKwl1OCAqaGRyID0gX2hkcjsKKworCS8qIFdlIGRlLWVuY2Fwc3VsYXRlIGFsbCBwYWNrZXRzIHdoaWNoLCBhKSBoYXZlIFNOQVAgaGVhZGVycworCSAqIChpLmUuIFNTQVA9RFNBUD0weGFhIGFuZCBDVFJMPTB4MyBpbiB0aGUgODAyLjIgTExDIGhlYWRlcgorCSAqIGFuZCB3aGVyZSBiKSB0aGUgT1VJIG9mIHRoZSBTTkFQIGhlYWRlciBpcyAwMDowMDowMCBvcgorCSAqIDAwOjAwOmY4IC0gd2UgbmVlZCBib3RoIGJlY2F1c2UgZGlmZmVyZW50IEFQcyBhcHBlYXIgdG8gdXNlCisJICogZGlmZmVyZW50IE9VSXMgZm9yIHNvbWUgcmVhc29uICovCisJcmV0dXJuIChtZW1jbXAoaGRyLCAmZW5jYXBzX2hkciwgNSkgPT0gMCkKKwkJJiYgKChoZHJbNV0gPT0gMHgwMCkgfHwgKGhkcls1XSA9PSAweGY4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcmlub2NvX3NweV9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyICptYWMsCisJCQkJICAgICAgaW50IGxldmVsLCBpbnQgbm9pc2UpCit7CisJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOworCXdzdGF0cy5sZXZlbCA9IGxldmVsIC0gMHg5NTsKKwl3c3RhdHMubm9pc2UgPSBub2lzZSAtIDB4OTU7CisJd3N0YXRzLnF1YWwgPSAobGV2ZWwgPiBub2lzZSkgPyAobGV2ZWwgLSBub2lzZSkgOiAwOworCXdzdGF0cy51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOworCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLworCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBtYWMsICZ3c3RhdHMpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3N0YXRfZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBVc2luZyBzcHkgc3VwcG9ydCB3aXRoIGxvdHMgb2YgUnggcGFja2V0cywgbGlrZSBpbiBhbgorCSAqIGluZnJhc3RydWN0dXJlIChBUCksIHdpbGwgcmVhbGx5IHNsb3cgZG93biBldmVyeXRoaW5nLCBiZWNhdXNlCisJICogdGhlIE1BQyBhZGRyZXNzIG11c3QgYmUgY29tcGFyZWQgdG8gZWFjaCBlbnRyeSBvZiB0aGUgc3B5IGxpc3QuCisJICogSWYgdGhlIHVzZXIgcmVhbGx5IGFza3MgZm9yIGl0IChzZXQgc29tZSBhZGRyZXNzIGluIHRoZQorCSAqIHNweSBsaXN0KSwgd2UgZG8gaXQsIGJ1dCBoZSB3aWxsIHBheSB0aGUgcHJpY2UuCisJICogTm90ZSB0aGF0IHRvIGdldCBoZXJlLCB5b3UgbmVlZCBib3RoIFdJUkVMRVNTX1NQWQorCSAqIGNvbXBpbGVkIGluIEFORCBzb21lIGFkZHJlc3NlcyBpbiB0aGUgbGlzdCAhISEKKwkgKi8KKwkvKiBOb3RlIDogZ2NjIHdpbGwgb3B0aW1pc2UgdGhlIHdob2xlIHNlY3Rpb24gYXdheSBpZgorCSAqIFdJUkVMRVNTX1NQWSBpcyBub3QgZGVmaW5lZC4uLiAtIEplYW4gSUkgKi8KKwlpZiAoU1BZX05VTUJFUihwcml2KSkgeworCQlvcmlub2NvX3NweV9nYXRoZXIoZGV2LCBza2JfbWFjX2hlYWRlcihza2IpICsgRVRIX0FMRU4sCisJCQkJICAgZGVzYy0+c2lnbmFsLCBkZXNjLT5zaWxlbmNlKTsKKwl9Cit9CisKKy8qCisgKiBvcmlub2NvX3J4X21vbml0b3IgLSBoYW5kbGUgcmVjZWl2ZWQgbW9uaXRvciBmcmFtZXMuCisgKgorICogQXJndW1lbnRzOgorICoJZGV2CQluZXR3b3JrIGRldmljZQorICoJcnhmaWQJCXJlY2VpdmVkIEZJRAorICoJZGVzYwkJcnggZGVzY3JpcHRvciBvZiB0aGUgZnJhbWUKKyAqCisgKiBDYWxsIGNvbnRleHQ6IGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBvcmlub2NvX3J4X21vbml0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJ4ZmlkLAorCQkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKK3sKKwl1MzIgaGRybGVuID0gMzA7CS8qIHJldHVybiBmdWxsIGhlYWRlciBieSBkZWZhdWx0ICovCisJdTMyIGRhdGFsZW4gPSAwOworCXUxNiBmYzsKKwlpbnQgZXJyOworCWludCBsZW47CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCisJbGVuID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOworCisJLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgYW5kIHRoZSBkYXRhICovCisJZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOworCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CisJCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKQorCQkgICAgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkKKwkJCWhkcmxlbiA9IDMwOworCQllbHNlCisJCQloZHJsZW4gPSAyNDsKKwkJZGF0YWxlbiA9IGxlbjsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKwkJaGRybGVuID0gMjQ7CisJCWRhdGFsZW4gPSBsZW47CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKKwkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUlRTOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVORDoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0s6CisJCQloZHJsZW4gPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DVFM6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDSzoKKwkJCWhkcmxlbiA9IDEwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5rbm93biBmcmFtZSB0eXBlICovCisJCWJyZWFrOworCX0KKworCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCisJaWYgKGRhdGFsZW4gPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOICsgMTIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvdmVyc2l6ZWQgbW9uaXRvciBmcmFtZSwgIgorCQkgICAgICAgImRhdGEgbGVuZ3RoID0gJWRcbiIsIGRldi0+bmFtZSwgZGF0YWxlbik7CisJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgZGF0YWxlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbm5vdCBhbGxvY2F0ZSBza2IgZm9yIG1vbml0b3IgZnJhbWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKi8KKwltZW1jcHkoc2tiX3B1dChza2IsIGhkcmxlbiksICYoZGVzYy0+ZnJhbWVfY3RsKSwgaGRybGVuKTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisJLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLworCWlmIChkYXRhbGVuID4gMCkgeworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgZGF0YWxlbiksCisJCQkJICAgICAgIEFMSUdOKGRhdGFsZW4sIDIpLCByeGZpZCwKKwkJCQkgICAgICAgSEVSTUVTXzgwMl8yX09GRlNFVCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgbW9uaXRvciBmcmFtZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisKKwlza2ItPmRldiA9IGRldjsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKKworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJbmV0aWZfcngoc2tiKTsKKwlyZXR1cm47CisKKyBkcm9wOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisgdXBkYXRlX3N0YXRzOgorCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwlzdGF0cy0+cnhfZHJvcHBlZCsrOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl1MTYgcnhmaWQsIHN0YXR1czsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhOworCWludCBlcnI7CisKKwlkZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgUlggZGVzY3JpcHRvclxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCXJ4ZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgUlhGSUQpOworCisJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgZGVzYywgc2l6ZW9mKCpkZXNjKSwKKwkJCSAgICAgICByeGZpZCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIFJ4IGRlc2NyaXB0b3IuICIKKwkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOworCisJaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfQkFEQ1JDKSB7CisJCURFQlVHKDEsICIlczogQmFkIENSQyBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCisJCSAgICAgIGRldi0+bmFtZSk7CisJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIEhhbmRsZSBmcmFtZXMgaW4gbW9uaXRvciBtb2RlICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCW9yaW5vY29fcnhfbW9uaXRvcihkZXYsIHJ4ZmlkLCBkZXNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfVU5ERUNSWVBUQUJMRSkgeworCQlERUJVRygxLCAiJXM6IFVuZGVjcnlwdGFibGUgZnJhbWUgb24gUnguIEZyYW1lIGRyb3BwZWQuXG4iLAorCQkgICAgICBkZXYtPm5hbWUpOworCQl3c3RhdHMtPmRpc2NhcmQuY29kZSsrOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7CisKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJaWYgKGxlbmd0aCA8IDMpIHsgLyogTm8gZm9yIGV2ZW4gYW4gODAyLjIgTExDIGhlYWRlciAqLworCQkvKiBBdCBsZWFzdCBvbiBTeW1ib2wgZmlybXdhcmUgd2l0aCBQQ0Ygd2UgZ2V0IHF1aXRlIGEKKwkJICAgbG90IG9mIHRoZXNlIGxlZ2l0aW1hdGVseSAtIFBvbGwgZnJhbWVzIHdpdGggbm8KKwkJICAgZGF0YS4gKi8KKwkJZ290byBvdXQ7CisJfQorCWlmIChsZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgZnJhbWUgcmVjZWl2ZWQgKCVkIGJ5dGVzKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbGVuZ3RoKTsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogUGF5bG9hZCBzaXplIGRvZXMgbm90IGluY2x1ZGUgTWljaGFlbCBNSUMuIEluY3JlYXNlIHBheWxvYWQKKwkgKiBzaXplIHRvIHJlYWQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgZGF0YS4gKi8KKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpCisJCWxlbmd0aCArPSBNSUNIQUVMX01JQ19MRU47CisKKwkvKiBXZSBuZWVkIHNwYWNlIGZvciB0aGUgcGFja2V0IGRhdGEgaXRzZWxmLCBwbHVzIGFuIGV0aGVybmV0CisJICAgaGVhZGVyLCBwbHVzIDIgYnl0ZXMgc28gd2UgY2FuIGFsaWduIHRoZSBJUCBoZWFkZXIgb24gYQorCSAgIDMyYml0IGJvdW5kYXJ5LCBwbHVzIDEgYnl0ZSBzbyB3ZSBjYW4gcmVhZCBpbiBvZGQgbGVuZ3RoCisJICAgcGFja2V0cyBmcm9tIHRoZSBjYXJkLCB3aGljaCBoYXMgYW4gSU8gZ3JhbnVsYXJpdHkgb2YgMTYKKwkgICBiaXRzICovCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgrRVRIX0hMRU4rMisxKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgc2tiIGZvciBSeFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIFdlJ2xsIHByZXBlbmQgdGhlIGhlYWRlciwgc28gcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuICBUaGUgd29yc3QKKwkgICBjYXNlIGlzIG5vIGRlY2Fwc3VsYXRpb24sIHdoZW4gODAyLjMgaGVhZGVyIGlzIHByZXBlbmRlZCBhbmQKKwkgICBub3RoaW5nIGlzIHJlbW92ZWQuICAyIGlzIGZvciBhbGlnbmluZyB0aGUgSVAgaGVhZGVyLiAgKi8KKwlza2JfcmVzZXJ2ZShza2IsIEVUSF9ITEVOICsgMik7CisKKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgbGVuZ3RoKSwKKwkJCSAgICAgICBBTElHTihsZW5ndGgsIDIpLCByeGZpZCwKKwkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgZnJhbWUuICIKKwkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGRyb3A7CisJfQorCisJLyogQWRkIGRlc2MgYW5kIHNrYiB0byByeCBxdWV1ZSAqLworCXJ4X2RhdGEgPSBremFsbG9jKHNpemVvZigqcnhfZGF0YSksIEdGUF9BVE9NSUMpOworCWlmICghcnhfZGF0YSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgUlggcGFja2V0XG4iLAorCQkJZGV2LT5uYW1lKTsKKwkJZ290byBkcm9wOworCX0KKwlyeF9kYXRhLT5kZXNjID0gZGVzYzsKKwlyeF9kYXRhLT5za2IgPSBza2I7CisJbGlzdF9hZGRfdGFpbCgmcnhfZGF0YS0+bGlzdCwgJnByaXYtPnJ4X2xpc3QpOworCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOworCisJcmV0dXJuOworCitkcm9wOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Cit1cGRhdGVfc3RhdHM6CisJc3RhdHMtPnJ4X2Vycm9ycysrOworCXN0YXRzLT5yeF9kcm9wcGVkKys7CitvdXQ6CisJa2ZyZWUoZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXUxNiBzdGF0dXMsIGZjOworCWludCBsZW5ndGg7CisJc3RydWN0IGV0aGhkciAqaGRyOworCisJc3RhdHVzID0gbGUxNl90b19jcHUoZGVzYy0+c3RhdHVzKTsKKwlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7CisJZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOworCisJLyogQ2FsY3VsYXRlIGFuZCBjaGVjayBNSUMgKi8KKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpIHsKKwkJaW50IGtleV9pZCA9ICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUNfS0VZX0lEKSA+PgorCQkJICAgICAgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpOworCQl1OCBtaWNbTUlDSEFFTF9NSUNfTEVOXTsKKwkJdTggKnJ4bWljOworCQl1OCAqc3JjID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSA/CisJCQlkZXNjLT5hZGRyMyA6IGRlc2MtPmFkZHIyOworCisJCS8qIEV4dHJhY3QgTWljaGFlbCBNSUMgZnJvbSBwYXlsb2FkICovCisJCXJ4bWljID0gc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU47CisKKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTik7CisJCWxlbmd0aCAtPSBNSUNIQUVMX01JQ19MRU47CisKKwkJb3Jpbm9jb19taWMocHJpdi0+cnhfdGZtX21pYywKKwkJCSAgICBwcml2LT50a2lwX2tleVtrZXlfaWRdLnJ4X21pYywKKwkJCSAgICBkZXNjLT5hZGRyMSwKKwkJCSAgICBzcmMsCisJCQkgICAgMCwgLyogcHJpb3JpdHkgb3IgUW9TPyAqLworCQkJICAgIHNrYi0+ZGF0YSwKKwkJCSAgICBza2ItPmxlbiwKKwkJCSAgICAmbWljWzBdKTsKKworCQlpZiAobWVtY21wKG1pYywgcnhtaWMsCisJCQkgICBNSUNIQUVMX01JQ19MRU4pKSB7CisJCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJCQlzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUgd3htaWM7CisKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCisJCQkgICAgICAgIkludmFsaWQgTWljaGFlbCBNSUMgaW4gZGF0YSBmcmFtZSBmcm9tICVwTSwgIgorCQkJICAgICAgICJ1c2luZyBrZXkgJWlcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBzcmMsIGtleV9pZCk7CisKKwkJCS8qIFRPRE86IHVwZGF0ZSBzdGF0cyAqLworCisJCQkvKiBOb3RpZnkgdXNlcnNwYWNlICovCisJCQltZW1zZXQoJnd4bWljLCAwLCBzaXplb2Yod3htaWMpKTsKKwkJCXd4bWljLmZsYWdzID0ga2V5X2lkICYgSVdfTUlDRkFJTFVSRV9LRVlfSUQ7CisJCQl3eG1pYy5mbGFncyB8PSAoZGVzYy0+YWRkcjFbMF0gJiAxKSA/CisJCQkJSVdfTUlDRkFJTFVSRV9HUk9VUCA6IElXX01JQ0ZBSUxVUkVfUEFJUldJU0U7CisJCQl3eG1pYy5zcmNfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQltZW1jcHkod3htaWMuc3JjX2FkZHIuc2FfZGF0YSwgc3JjLCBFVEhfQUxFTik7CisKKwkJCSh2b2lkKSBvcmlub2NvX2h3X2dldF90a2lwX2l2KHByaXYsIGtleV9pZCwKKwkJCQkJCSAgICAgICZ3eG1pYy50c2NbMF0pOworCisJCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHd4bWljKTsKKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUsICZ3cnF1LAorCQkJCQkgICAgKGNoYXIgKikgJnd4bWljKTsKKworCQkJZ290byBkcm9wOworCQl9CisJfQorCisJLyogSGFuZGxlIGRlY2Fwc3VsYXRpb24KKwkgKiBJbiBtb3N0IGNhc2VzLCB0aGUgZmlybXdhcmUgdGVsbCB1cyBhYm91dCBTTkFQIGZyYW1lcy4KKwkgKiBGb3Igc29tZSByZWFzb24sIHRoZSBTTkFQIGZyYW1lcyBzZW50IGJ5IExpbmtTeXMgQVBzCisJICogYXJlIG5vdCBwcm9wZXJseSByZWNvZ25pc2VkIGJ5IG1vc3QgZmlybXdhcmVzLgorCSAqIFNvLCBjaGVjayBvdXJzZWx2ZXMgKi8KKwlpZiAobGVuZ3RoID49IEVOQ0FQU19PVkVSSEVBRCAmJgorCSAgICAoKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfMTA0MikgfHwKKwkgICAgICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NU0dUWVBFKSA9PSBIRVJNRVNfUlhTVEFUX1RVTk5FTCkgfHwKKwkgICAgIGlzX2V0aGVyc25hcChza2ItPmRhdGEpKSkgeworCQkvKiBUaGVzZSBpbmRpY2F0ZSBhIFNOQVAgd2l0aGluIDgwMi4yIExMQyB3aXRoaW4KKwkJICAgODAyLjExIGZyYW1lIHdoaWNoIHdlJ2xsIG5lZWQgdG8gZGUtZW5jYXBzdWxhdGUgdG8KKwkJICAgdGhlIG9yaWdpbmFsIEV0aGVybmV0SUkgZnJhbWUuICovCisJCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLAorCQkJCQkJRVRIX0hMRU4gLSBFTkNBUFNfT1ZFUkhFQUQpOworCX0gZWxzZSB7CisJCS8qIDgwMi4zIGZyYW1lIC0gcHJlcGVuZCA4MDIuMyBoZWFkZXIgYXMgaXMgKi8KKwkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKwkJaGRyLT5oX3Byb3RvID0gaHRvbnMobGVuZ3RoKTsKKwl9CisJbWVtY3B5KGhkci0+aF9kZXN0LCBkZXNjLT5hZGRyMSwgRVRIX0FMRU4pOworCWlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykKKwkJbWVtY3B5KGhkci0+aF9zb3VyY2UsIGRlc2MtPmFkZHIzLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjIsIEVUSF9BTEVOKTsKKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCWlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCisJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCisJLyogUHJvY2VzcyB0aGUgd2lyZWxlc3Mgc3RhdHMgaWYgbmVlZGVkICovCisJb3Jpbm9jb19zdGF0X2dhdGhlcihkZXYsIHNrYiwgZGVzYyk7CisKKwkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgKi8KKwluZXRpZl9yeChza2IpOworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKKworCXJldHVybjsKKworIGRyb3A6CisJZGV2X2tmcmVlX3NrYihza2IpOworCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwlzdGF0cy0+cnhfZHJvcHBlZCsrOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3J4X2lzcl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7CisJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIG9yaW5vY29fcnggcmVxdWlyZXMgdGhlIGRyaXZlciBsb2NrLCBhbmQgd2UgYWxzbyBuZWVkIHRvCisJICogcHJvdGVjdCBwcml2LT5yeF9saXN0LCBzbyBqdXN0IGhvbGQgdGhlIGxvY2sgb3ZlciB0aGUKKwkgKiBsb3QuCisJICoKKwkgKiBJZiBvcmlub2NvX2xvY2sgZmFpbHMsIHdlJ3ZlIHVucGx1Z2dlZCB0aGUgY2FyZC4gSW4gdGhpcworCSAqIGNhc2UganVzdCBhYm9ydC4gKi8KKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuOworCisJLyogZXh0cmFjdCBkZXNjIGFuZCBza2IgZnJvbSBxdWV1ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgeworCQlkZXNjID0gcnhfZGF0YS0+ZGVzYzsKKwkJc2tiID0gcnhfZGF0YS0+c2tiOworCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7CisJCWtmcmVlKHJ4X2RhdGEpOworCisJCW9yaW5vY29fcngoZGV2LCBkZXNjLCBza2IpOworCisJCWtmcmVlKGRlc2MpOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJ4IHBhdGggKGluZm8gZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcHJpbnRfbGlua3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgc3RhdHVzKQoreworCWNoYXIgKnM7CisKKwlpZiAoc3VwcHJlc3NfbGlua3N0YXR1cykKKwkJcmV0dXJuOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQ6CisJCXMgPSAiTm90IENvbm5lY3RlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEOgorCQlzID0gIkNvbm5lY3RlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfRElTQ09OTkVDVEVEOgorCQlzID0gIkRpc2Nvbm5lY3RlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFOgorCQlzID0gIkFQIENoYW5nZWQiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRToKKwkJcyA9ICJBUCBPdXQgb2YgUmFuZ2UiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFOgorCQlzID0gIkFQIEluIFJhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BU1NPQ19GQUlMRUQ6CisJCXMgPSAiQXNzb2NpYXRpb24gRmFpbGVkIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICJVTktOT1dOIjsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5ldyBsaW5rIHN0YXR1czogJXMgKCUwNHgpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHMsIHN0YXR1cyk7Cit9CisKKy8qIFNlYXJjaCBzY2FuIHJlc3VsdHMgZm9yIHJlcXVlc3RlZCBCU1NJRCwgam9pbiBpdCBpZiBmb3VuZCAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19qb2luX2FwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIGpvaW5fd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBqb2luX3JlcSB7CisJCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwkJX19sZTE2IGNoYW5uZWw7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcmVxOworCWNvbnN0IGludCBhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOworCXN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKmF0b20gPSBOVUxMOworCWludCBvZmZzZXQgPSA0OworCWludCBmb3VuZCA9IDA7CisJdTggKmJ1ZjsKKwl1MTYgbGVuOworCisJLyogQWxsb2NhdGUgYnVmZmVyIGZvciBzY2FuIHJlc3VsdHMgKi8KKwlidWYgPSBrbWFsbG9jKE1BWF9TQ0FOX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlnb3RvIGZhaWxfbG9jazsKKworCS8qIFNhbml0eSBjaGVja3MgaW4gY2FzZSB1c2VyIGNoYW5nZWQgc29tZXRoaW5nIGluIHRoZSBtZWFudGltZSAqLworCWlmICghcHJpdi0+YnNzaWRfZml4ZWQpCisJCWdvdG8gb3V0OworCisJaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKQorCQlnb3RvIG91dDsKKworCS8qIFJlYWQgc2NhbiByZXN1bHRzIGZyb20gdGhlIGZpcm13YXJlICovCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCSAgICAgIEhFUk1FU19SSURfU0NBTlJFU1VMVFNUQUJMRSwKKwkJCSAgICAgIE1BWF9TQ0FOX0xFTiwgJmxlbiwgYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIHNjYW4gcmVzdWx0c1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuKTsKKworCS8qIEdvIHRocm91Z2ggdGhlIHNjYW4gcmVzdWx0cyBsb29raW5nIGZvciB0aGUgY2hhbm5lbCBvZiB0aGUgQVAKKwkgKiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBqb2luICovCisJZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7CisJCWF0b20gPSAoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKKwkJaWYgKG1lbWNtcCgmYXRvbS0+YnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJREVCVUcoMSwgIiVzOiBSZXF1ZXN0ZWQgQVAgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xuIiwKKwkJICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHJlcS5ic3NpZCwgcHJpdi0+ZGVzaXJlZF9ic3NpZCwgRVRIX0FMRU4pOworCXJlcS5jaGFubmVsID0gYXRvbS0+Y2hhbm5lbDsJLyogYm90aCBhcmUgbGl0dGxlLWVuZGlhbiAqLworCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkpPSU5SRVFVRVNULAorCQkJCSAgJnJlcSk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaXNzdWluZyBqb2luIHJlcXVlc3RcbiIsIGRldi0+bmFtZSk7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworIGZhaWxfbG9jazoKKwlrZnJlZShidWYpOworfQorCisvKiBTZW5kIG5ldyBCU1NJRCB0byB1c2Vyc3BhY2UgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9ic3NpZF93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IGVycjsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIHdycXUuYXBfYWRkci5zYV9kYXRhKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybjsKKworCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisKKwkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9hc3NvY3JlcWllX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwlpbnQgZXJyOworCXU4IGJ1Zls4OF07CisJdTggKmllOworCisJaWYgKCFwcml2LT5oYXNfd3BhKQorCQlyZXR1cm47CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVRX0lORk8sCisJCQkgICAgICBzaXplb2YoYnVmKSwgTlVMTCwgJmJ1Zik7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm47CisKKwlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShidWYsIHNpemVvZihidWYpKTsKKwlpZiAoaWUpIHsKKwkJaW50IHJlbSA9IHNpemVvZihidWYpIC0gKGllIC0gJmJ1ZlswXSk7CisJCXdycXUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWlmICh3cnF1LmRhdGEubGVuZ3RoID4gcmVtKQorCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlbTsKKworCQlpZiAod3JxdS5kYXRhLmxlbmd0aCkKKwkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFUUlFLCAmd3JxdSwgaWUpOworCX0KK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwlpbnQgZXJyOworCXU4IGJ1Zls4OF07IC8qIFRPRE86IHZlcmlmeSBtYXggc2l6ZSBvciBJV19HRU5FUklDX0lFX01BWCAqLworCXU4ICppZTsKKworCWlmICghcHJpdi0+aGFzX3dwYSkKKwkJcmV0dXJuOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX0FTU09DX1JFU1BfSU5GTywKKwkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybjsKKworCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChpZSkgeworCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOworCisJCWlmICh3cnF1LmRhdGEubGVuZ3RoKQorCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVTUElFLCAmd3JxdSwgaWUpOworCX0KK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX3dldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgd2V2ZW50X3dvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuOworCisJb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHByaXYpOworCW9yaW5vY29fc2VuZF9hc3NvY3Jlc3BpZV93ZXZlbnQocHJpdik7CisJb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChwcml2KTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgaW5mb2ZpZDsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgbGVuOworCQlfX2xlMTYgdHlwZTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpbmZvOworCWludCBsZW4sIHR5cGU7CisJaW50IGVycjsKKworCS8qIFRoaXMgaXMgYW4gYW5zd2VyIHRvIGFuIElOUVVJUkUgY29tbWFuZCB0aGF0IHdlIGRpZCBlYXJsaWVyLAorCSAqIG9yIGFuIGluZm9ybWF0aW9uICJldmVudCIgZ2VuZXJhdGVkIGJ5IHRoZSBjYXJkCisJICogVGhlIGNvbnRyb2xsZXIgcmV0dXJuIHRvIHVzIGEgcHNldWRvIGZyYW1lIGNvbnRhaW5pbmcKKwkgKiB0aGUgaW5mb3JtYXRpb24gaW4gcXVlc3Rpb24gLSBKZWFuIElJICovCisJaW5mb2ZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIElORk9GSUQpOworCisJLyogUmVhZCB0aGUgaW5mbyBmcmFtZSBoZWFkZXIgLSBkb24ndCB0cnkgdG9vIGhhcmQgKi8KKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmaW5mbywgc2l6ZW9mKGluZm8pLAorCQkJICAgICAgIGluZm9maWQsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBpbmZvIGZyYW1lLiAiCisJCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuOworCX0KKworCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGUxNl90b19jcHUoaW5mby5sZW4pKTsKKwl0eXBlID0gbGUxNl90b19jcHUoaW5mby50eXBlKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSEVSTUVTX0lOUV9UQUxMSUVTOiB7CisJCXN0cnVjdCBoZXJtZXNfdGFsbGllc19mcmFtZSB0YWxsaWVzOworCQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKKworCQlpZiAobGVuID4gc2l6ZW9mKHRhbGxpZXMpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGFsbGllcyBmcmFtZSB0b28gbG9uZyAoJWQgYnl0ZXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJCWxlbiA9IHNpemVvZih0YWxsaWVzKTsKKwkJfQorCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZ0YWxsaWVzLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQkvKiBJbmNyZW1lbnQgb3VyIHZhcmlvdXMgY291bnRlcnMgKi8KKwkJLyogd3N0YXRzLT5kaXNjYXJkLm53aWQgLSBubyB3cm9uZyBCU1NJRCBzdHVmZiAqLworCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5SeFdFUFVuZGVjcnlwdGFibGUpOworCQlpZiAobGVuID09IHNpemVvZih0YWxsaWVzKSkKKwkJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9CisJCQkJbGUxNl90b19jcHUodGFsbGllcy5SeERpc2NhcmRzX1dFUElDVkVycm9yKSArCisJCQkJbGUxNl90b19jcHUodGFsbGllcy5SeERpc2NhcmRzX1dFUEV4Y2x1ZGVkKTsKKwkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhEaXNjYXJkc1dyb25nU0EpOworCQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhNc2dJbkJhZE1zZ0ZyYWdtZW50cyk7CisJCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzICs9CisJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlR4UmV0cnlMaW1pdEV4Y2VlZGVkKTsKKwkJLyogd3N0YXRzLT5taXNzLmJlYWNvbiAtIG5vIG1hdGNoICovCisJfQorCWJyZWFrOworCWNhc2UgSEVSTUVTX0lOUV9MSU5LU1RBVFVTOiB7CisJCXN0cnVjdCBoZXJtZXNfbGlua3N0YXR1cyBsaW5rc3RhdHVzOworCQl1MTYgbmV3c3RhdHVzOworCQlpbnQgY29ubmVjdGVkOworCisJCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKKwkJCWJyZWFrOworCisJCWlmIChsZW4gIT0gc2l6ZW9mKGxpbmtzdGF0dXMpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5leHBlY3RlZCBzaXplIGZvciBsaW5rc3RhdHVzIGZyYW1lICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmbGlua3N0YXR1cywgbGVuLAorCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCW5ld3N0YXR1cyA9IGxlMTZfdG9fY3B1KGxpbmtzdGF0dXMubGlua3N0YXR1cyk7CisKKwkJLyogU3ltYm9sIGZpcm13YXJlIHVzZXMgIm91dCBvZiByYW5nZSIgdG8gc2lnbmFsIHRoYXQKKwkJICogdGhlIGhvc3RzY2FuIGZyYW1lIGNhbiBiZSByZXF1ZXN0ZWQuICAqLworCQlpZiAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRSAmJgorCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCAmJgorCQkgICAgcHJpdi0+aGFzX2hvc3RzY2FuICYmIHByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY29ubmVjdGVkID0gKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQpCisJCQl8fCAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRSkKKwkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0UpOworCisJCWlmIChjb25uZWN0ZWQpCisJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCWVsc2UgaWYgKCFpZ25vcmVfZGlzY29ubmVjdCkKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwkJaWYgKG5ld3N0YXR1cyAhPSBwcml2LT5sYXN0X2xpbmtzdGF0dXMpIHsKKwkJCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IG5ld3N0YXR1czsKKwkJCXByaW50X2xpbmtzdGF0dXMoZGV2LCBuZXdzdGF0dXMpOworCQkJLyogVGhlIGluZm8gZnJhbWUgY29udGFpbnMgb25seSBvbmUgd29yZCB3aGljaCBpcyB0aGUKKwkJCSAqIHN0YXR1cyAoc2VlIGhlcm1lcy5oKS4gVGhlIHN0YXR1cyBpcyBwcmV0dHkgYm9yaW5nCisJCQkgKiBpbiBpdHNlbGYsIHRoYXQncyB3aHkgd2UgZXhwb3J0IHRoZSBuZXcgQlNTSUQuLi4KKwkJCSAqIEplYW4gSUkgKi8KKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndldmVudF93b3JrKTsKKwkJfQorCX0KKwlicmVhazsKKwljYXNlIEhFUk1FU19JTlFfU0NBTjoKKwkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MgJiYgcHJpdi0+YnNzaWRfZml4ZWQgJiYKKwkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9JTlRFUlNJTCkgeworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+am9pbl93b3JrKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTjoKKwljYXNlIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MOiB7CisJCS8qIFJlc3VsdCBvZiBhIHNjYW5uaW5nLiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAorCQkgKiBjZWxscyBpbiB0aGUgdmljaW5pdHkgLSBKZWFuIElJICovCisJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKKwkJdW5zaWduZWQgY2hhciAqYnVmOworCisJCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCisJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmIChsZW4gPiA0MDk2KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQWxsb2NhdGUgYnVmZmVyIGZvciByZXN1bHRzICovCisJCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJLyogTm8gbWVtb3J5LCBzbyBjYW4ndCBwcmludGsoKS4uLiAqLworCQkJYnJlYWs7CisKKwkJLyogUmVhZCBzY2FuIGRhdGEgKi8KKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnVmLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgT1JJTk9DT19ERUJVRworCQl7CisJCQlpbnQJaTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJTY2FuIHJlc3VsdCBbJTAyWCIsIGJ1ZlswXSk7CisJCQlmb3IgKGkgPSAxOyBpIDwgKGxlbiAqIDIpOyBpKyspCisJCQkJcHJpbnRrKCI6JTAyWCIsIGJ1ZltpXSk7CisJCQlwcmludGsoIl1cbiIpOworCQl9CisjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLworCisJCWlmIChvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHByaXYsIGJ1ZiwgbGVuKSA9PSAwKSB7CisJCQkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCisJCQkgKiBXZSBkb24ndCBzZW5kIHRoZSByZWNlaXZlZCBkYXRhIG9uIHRoZSBldmVudCBiZWNhdXNlCisJCQkgKiBpdCB3b3VsZCByZXF1aXJlIHVzIHRvIGRvIGNvbXBsZXggdHJhbnNjb2RpbmcsIGFuZAorCQkJICogd2Ugd2FudCB0byBtaW5pbWlzZSB0aGUgd29yayBkb25lIGluIHRoZSBpcnEgaGFuZGxlcgorCQkJICogVXNlIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBkYXRhIC0gSmVhbiBJSSAqLworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJCX0KKwkJa2ZyZWUoYnVmKTsKKwl9CisJYnJlYWs7CisJY2FzZSBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPOgorCXsKKwkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzczsKKworCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBHb3QgY2hhbmluZm8gd2l0aG91dCBzY2FuLCAiCisJCQkgICAgICAgImxlbj0lZFxuIiwgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBBbiBlbXB0eSByZXN1bHQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgY29tcGxldGUgKi8KKwkJaWYgKGxlbiA9PSAwKSB7CisJCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CisKKwkJCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCisJCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOworCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWVsc2UgaWYgKGxlbiA+IHNpemVvZigqYnNzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKS4gIgorCQkJICAgICAgICJUcnVuY2F0aW5nIHJlc3VsdHMgdG8gJXpkIGJ5dGVzLlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgc2l6ZW9mKCpic3MpKTsKKwkJCWxlbiA9IHNpemVvZigqYnNzKTsKKwkJfSBlbHNlIGlmIChsZW4gPCAob2Zmc2V0b2Yoc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8sCisJCQkJCSAgIGRhdGEpICsgMikpIHsKKwkJCS8qIERyb3AgdGhpcyByZXN1bHQgbm93IHNvIHdlIGRvbid0IGhhdmUgdG8KKwkJCSAqIGtlZXAgY2hlY2tpbmcgbGF0ZXIgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIHNob3J0ICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQlic3MgPSBrbWFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7CisJCWlmIChic3MgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8qIFJlYWQgc2NhbiBkYXRhICovCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJzcywgbGVuLAorCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOworCQlpZiAoZXJyKSB7CisJCQlrZnJlZShic3MpOworCQkJYnJlYWs7CisJCX0KKworCQlvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQocHJpdiwgYnNzKTsKKworCQlrZnJlZShic3MpOworCQlicmVhazsKKwl9CisJY2FzZSBIRVJNRVNfSU5RX1NFQ19TVEFUX0FHRVJFOgorCQkvKiBTZWN1cml0eSBzdGF0dXMgKEFnZXJlIHNwZWNpZmljKSAqLworCQkvKiBJZ25vcmUgdGhpcyBmcmFtZSBmb3Igbm93ICovCisJCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVbmtub3duIGluZm9ybWF0aW9uIGZyYW1lIHJlY2VpdmVkOiAiCisJCSAgICAgICAidHlwZSAweCUwNHgsIGxlbmd0aCAlZFxuIiwgZGV2LT5uYW1lLCB0eXBlLCBsZW4pOworCQkvKiBXZSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBhYm91dCBpdCAqLworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZkcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluZm9ybWF0aW9uIGZyYW1lIGxvc3QuXG4iLCBkZXYtPm5hbWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcm5hbCBoYXJkd2FyZSBjb250cm9sIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KKworCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGNvbmZpZ3VyaW5nIGNhcmRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogRmlyZSB0aGluZ3MgdXAgYWdhaW4gKi8KKwloZXJtZXNfc2V0X2lycW1hc2soaHcsIE9SSU5PQ09fSU5URU4pOworCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBlbmFibGluZyBNQUMgcG9ydFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb191cCk7CisKK2ludCBfX29yaW5vY29fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlpZiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CisJCWlmICghcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7CisJCQllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKKwkJCWlmIChlcnIpIHsKKwkJCQkvKiBTb21lIGZpcm13YXJlcyAoZS5nLiBJbnRlcnNpbCAxLjMueCkgc2VlbQorCQkJCSAqIHRvIGhhdmUgcHJvYmxlbXMgZGlzYWJsaW5nIHRoZSBwb3J0LCBvaAorCQkJCSAqIHdlbGwsIHRvbyBiYWQuICovCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRpc2FibGluZyBNQUMgcG9ydFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7CisJCQl9CisJCX0KKwkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwkJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOworCX0KKworCS8qIGZpcm13YXJlIHdpbGwgaGF2ZSB0byByZWFzc29jaWF0ZSAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb19kb3duKTsKKworc3RhdGljIGludCBvcmlub2NvX2FsbG9jYXRlX2ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOworCWlmIChlcnIgPT0gLUVJTyAmJiBwcml2LT5uaWNidWZfc2l6ZSA+IFRYX05JQ0JVRl9TSVpFX0JVRykgeworCQkvKiBUcnkgd29ya2Fyb3VuZCBmb3Igb2xkIFN5bWJvbCBmaXJtd2FyZSBidWcgKi8KKwkJcHJpdi0+bmljYnVmX3NpemUgPSBUWF9OSUNCVUZfU0laRV9CVUc7CisJCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZpcm13YXJlIEFMTE9DIGJ1ZyBkZXRlY3RlZCAiCisJCSAgICAgICAiKG9sZCBTeW1ib2wgZmlybXdhcmU/KS4gV29yayBhcm91bmQgJXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVyciA/ICJmYWlsZWQhIiA6ICJvay4iKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX2luaXQoaHcpOworCWlmIChwcml2LT5kb19md19kb3dubG9hZCAmJiAhZXJyKSB7CisJCWVyciA9IG9yaW5vY29fZG93bmxvYWQocHJpdik7CisJCWlmIChlcnIpCisJCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7CisJfQorCWlmICghZXJyKQorCQllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19yZWluaXRfZmlybXdhcmUpOworCitpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7CisKKwkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzICovCisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKKwkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKEVUSF9BTEVOKSwgZGV2LT5kZXZfYWRkcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE1BQyBhZGRyZXNzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB1cCB0aGUgbGluayBtb2RlICovCisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBPUlRUWVBFLAorCQkJCSAgIHByaXYtPnBvcnRfdHlwZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHBvcnQgdHlwZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogU2V0IHRoZSBjaGFubmVsL2ZyZXF1ZW5jeSAqLworCWlmIChwcml2LT5jaGFubmVsICE9IDAgJiYgcHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZPV05DSEFOTkVMLAorCQkJCQkgICBwcml2LT5jaGFubmVsKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBjaGFubmVsICVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyLCBwcml2LT5jaGFubmVsKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aGFzX2lic3MpIHsKKwkJdTE2IGNyZWF0ZWlic3M7CisKKwkJaWYgKChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgJiYgKHByaXYtPmNyZWF0ZWlic3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhpcyBmaXJtd2FyZSByZXF1aXJlcyBhbiAiCisJCQkgICAgICAgIkVTU0lEIGluIElCU1MtQWQtSG9jIG1vZGUuXG4iLCBkZXYtPm5hbWUpOworCQkJLyogV2l0aCB3dmxhbl9jcywgaW4gdGhpcyBjYXNlLCB3ZSB3b3VsZCBjcmFzaC4KKwkJCSAqIGhvcGVmdWxseSwgdGhpcyBkcml2ZXIgd2lsbCBiZWhhdmUgYmV0dGVyLi4uCisJCQkgKiBKZWFuIElJICovCisJCQljcmVhdGVpYnNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNyZWF0ZWlic3MgPSBwcml2LT5jcmVhdGVpYnNzOworCQl9CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORkNSRUFURUlCU1MsCisJCQkJCSAgIGNyZWF0ZWlic3MpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIENSRUFURUlCU1NcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCB0aGUgZGVzaXJlZCBCU1NJRCAqLworCWVyciA9IF9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBBUCBhZGRyZXNzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiBTZXQgdGhlIGRlc2lyZWQgRVNTSUQgKi8KKwlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOworCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBzaXplb2YoaWRidWYudmFsKSk7CisJLyogV2luWFAgd2FudHMgcGFydG5lciB0byBjb25maWd1cmUgT1dOU1NJRCBldmVuIGluIElCU1MgbW9kZS4gKGppbWMpICovCisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOU1NJRCwKKwkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAorCQkJJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgT1dOU1NJRFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQsCisJCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKKwkJCSZpZGJ1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIERFU0lSRURTU0lEXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB0aGUgc3RhdGlvbiBuYW1lICovCisJaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPm5pY2spKTsKKwltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+bmljaywgc2l6ZW9mKGlkYnVmLnZhbCkpOworCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCisJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+bmljaykrMiksCisJCQkgICAgICAgJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbmlja25hbWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IEFQIGRlbnNpdHkgKi8KKwlpZiAocHJpdi0+aGFzX3NlbnNpdGl2aXR5KSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKKwkJCQkJICAgcHJpdi0+YXBfZGVuc2l0eSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFNZU1RFTVNDQUxFLiAiCisJCQkgICAgICAgIkRpc2FibGluZyBzZW5zaXRpdml0eSBjb250cm9sXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKworCQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKKwkJfQorCX0KKworCS8qIFNldCBSVFMgdGhyZXNob2xkICovCisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKKwkJCQkgICBwcml2LT5ydHNfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUlRTIHRocmVzaG9sZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb3IgTVdPIHJvYnVzdG5lc3MgKi8KKwlpZiAocHJpdi0+aGFzX213bykKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAgcHJpdi0+bXdvX3JvYnVzdCk7CisJZWxzZQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAgcHJpdi0+ZnJhZ190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBmcmFnbWVudGF0aW9uXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBiaXRyYXRlICovCisJZXJyID0gX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBiaXRyYXRlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50ICovCisJaWYgKHByaXYtPmhhc19wbSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELAorCQkJCQkgICBwcml2LT5wbV9vbik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLAorCQkJCQkgICBwcml2LT5wbV9tY2FzdCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKKwkJCQkJICAgcHJpdi0+cG1fcGVyaW9kKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCisJCQkJCSAgIHByaXYtPnBtX3RpbWVvdXQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiBTZXQgcHJlYW1ibGUgLSBvbmx5IGZvciBTeW1ib2wgc28gZmFyLi4uICovCisJaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAorCQkJCQkgICBwcml2LT5wcmVhbWJsZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcHJlYW1ibGVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCB1cCBlbmNyeXB0aW9uICovCisJaWYgKHByaXYtPmhhc193ZXAgfHwgcHJpdi0+aGFzX3dwYSkgeworCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfZW5jKHByaXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBhY3RpdmF0aW5nIGVuY3J5cHRpb25cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCisJCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfTU9OSVRPUiwgMCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX1NUT1AsIDAsIE5VTEwpOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KKwlwcml2LT5wcm9taXNjdW91cyA9IDA7CisJcHJpdi0+bWNfY291bnQgPSAwOworCisJLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLworCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiBGSVhNRTogcmV0dXJuIGludD8gKi8KK3N0YXRpYyB2b2lkCitfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisJaW50IHByb21pc2MsIG1jX2NvdW50OworCisJLyogVGhlIEhlcm1lcyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbiBhbGxtdWx0aSBtb2RlLCBzbyB3ZSBnbworCSAqIGludG8gcHJvbWlzY3VvdXMgbW9kZSBhbmQgbGV0IHRoZSB1cHBlciBsZXZlbHMgZGVhbC4gKi8KKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJICAgIChkZXYtPm1jX2NvdW50ID4gTUFYX01VTFRJQ0FTVChwcml2KSkpIHsKKwkJcHJvbWlzYyA9IDE7CisJCW1jX2NvdW50ID0gMDsKKwl9IGVsc2UgeworCQlwcm9taXNjID0gMDsKKwkJbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCX0KKworCWVyciA9IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3QocHJpdiwgZGV2LT5tY19saXN0LCBtY19jb3VudCwKKwkJCQkJICAgICAgcHJvbWlzYyk7Cit9CisKKy8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQsIHdpdGhvdXQgbG9ja3MgaGVsZCAtIHVzZQorICogc2NoZWR1bGVfd29yaygpICovCit2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgcmVzZXRfd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCS8qIFdoZW4gdGhlIGhhcmR3YXJlIGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLCB3aGF0ZXZlcgorCQkgKiBkZXRlY3RzIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHJlLWluaXRpYWxpemluZworCQkgKiBpdC4gU28gbm8gbmVlZCBmb3IgYW55dGhpbmcgZnVydGhlciAqLworCQlyZXR1cm47CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwkvKiBTaHV0IG9mZiBpbnRlcnJ1cHRzLiAgRGVwZW5kaW5nIG9uIHdoYXQgc3RhdGUgdGhlIGhhcmR3YXJlCisJICogaXMgaW4sIHRoaXMgbWlnaHQgbm90IHdvcmssIGJ1dCB3ZSdsbCB0cnkgYW55d2F5ICovCisJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7CisKKwlwcml2LT5od191bmF2YWlsYWJsZSsrOworCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsgLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwkvKiBTY2FubmluZyBzdXBwb3J0OiBDbGVhbnVwIG9mIGRyaXZlciBzdHJ1Y3QgKi8KKwlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCAwKTsKKwlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOworCisJaWYgKHByaXYtPmhhcmRfcmVzZXQpIHsKKwkJZXJyID0gKCpwcml2LT5oYXJkX3Jlc2V0KShwcml2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgIgorCQkJICAgICAgICJwZXJmb3JtaW5nIGhhcmQgcmVzZXRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gZGlzYWJsZTsKKwkJfQorCX0KKworCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZGlzYWJsZTsKKwl9CisKKwkvKiBUaGlzIGhhcyB0byBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CisKKwkvKiBwcml2LT5vcGVuIG9yIHByaXYtPmh3X3VuYXZhaWxhYmxlIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aGlsZQorCSAqIHdlIGRyb3BwZWQgdGhlIGxvY2sgKi8KKwlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmVlbmFibGluZyBjYXJkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJfSBlbHNlCisJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcmV0dXJuOworIGRpc2FibGU6CisJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJcHJpbnRrKEtFUk5fRVJSICIlczogRGV2aWNlIGhhcyBiZWVuIGRpc2FibGVkIVxuIiwgZGV2LT5uYW1lKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdGljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUSUNLXG4iLCBkZXYtPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfd3RlcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCS8qIFRoaXMgc2VlbXMgdG8gaGFwcGVuIGEgZmFpciBiaXQgdW5kZXIgbG9hZCwgYnV0IGlnbm9yaW5nIGl0CisJICAgc2VlbXMgdG8gd29yayBmaW5lLi4uKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBjb250cm9sbGVyIGVycm9yIChXVEVSUikuIElnbm9yaW5nLlxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKK30KKworaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBjb3VudCA9IE1BWF9JUlFMT09QU19QRVJfSVJROworCXUxNiBldnN0YXQsIGV2ZW50czsKKwkvKiBUaGVzZSBhcmUgdXNlZCB0byBkZXRlY3QgYSBydW5hd2F5IGludGVycnVwdCBzaXR1YXRpb24uCisJICoKKwkgKiBJZiB3ZSBnZXQgbW9yZSB0aGFuIE1BWF9JUlFMT09QU19QRVJfSklGRlkgaXRlcmF0aW9ucyBpbiBhIGppZmZ5LAorCSAqIHdlIHBhbmljIGFuZCBzaHV0IGRvd24gdGhlIGhhcmR3YXJlCisJICovCisJLyogamlmZmllcyB2YWx1ZSB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgY2FsbGVkICovCisJc3RhdGljIGludCBsYXN0X2lycV9qaWZmeTsgLyogPSAwICovCisJc3RhdGljIGludCBsb29wc190aGlzX2ppZmZ5OyAvKiA9IDAgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJLyogSWYgaHcgaXMgdW5hdmFpbGFibGUgLSB3ZSBkb24ndCBrbm93IGlmIHRoZSBpcnEgd2FzCisJCSAqIGZvciB1cyBvciBub3QgKi8KKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CisJZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOworCWlmICghZXZlbnRzKSB7CisJCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoamlmZmllcyAhPSBsYXN0X2lycV9qaWZmeSkKKwkJbG9vcHNfdGhpc19qaWZmeSA9IDA7CisJbGFzdF9pcnFfamlmZnkgPSBqaWZmaWVzOworCisJd2hpbGUgKGV2ZW50cyAmJiBjb3VudC0tKSB7CisJCWlmICgrK2xvb3BzX3RoaXNfamlmZnkgPiBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSVJRIGhhbmRsZXIgaXMgbG9vcGluZyB0b28gIgorCQkJICAgICAgICJtdWNoISBSZXNldHRpbmcuXG4iLCBkZXYtPm5hbWUpOworCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBub3cgKi8KKwkJCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7CisJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQ2hlY2sgdGhlIGNhcmQgaGFzbid0IGJlZW4gcmVtb3ZlZCAqLworCQlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgeworCQkJREVCVUcoMCwgIm9yaW5vY29faW50ZXJydXB0KCk6IGNhcmQgcmVtb3ZlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVElDSykKKwkJCV9fb3Jpbm9jb19ldl90aWNrKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1dURVJSKQorCQkJX19vcmlub2NvX2V2X3d0ZXJyKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORkRST1ApCisJCQlfX29yaW5vY29fZXZfaW5mZHJvcChkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9JTkZPKQorCQkJX19vcmlub2NvX2V2X2luZm8oZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfUlgpCisJCQlfX29yaW5vY29fZXZfcngoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFhFWEMpCisJCQlfX29yaW5vY29fZXZfdHhleGMoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFgpCisJCQlfX29yaW5vY29fZXZfdHgoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfQUxMT0MpCisJCQlfX29yaW5vY29fZXZfYWxsb2MoZGV2LCBodyk7CisKKwkJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCBldnN0YXQpOworCisJCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CisJCWV2ZW50cyA9IGV2c3RhdCAmIGh3LT5pbnRlbjsKKwl9OworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29faW50ZXJydXB0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUG93ZXIgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiAhZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpCitzdGF0aWMgaW50IG9yaW5vY29fcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBtX2V2ZW50LAorCQkJICAgICAgIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5vdGlmaWVyLAorCQkJCQkJICAgIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsCisJCQkJCQkgICAgcG1fbm90aWZpZXIpOworCisJLyogQWxsIHdlIG5lZWQgdG8gZG8gaXMgY2FjaGUgdGhlIGZpcm13YXJlIGJlZm9yZSBzdXNwZW5kLCBhbmQKKwkgKiByZWxlYXNlIGl0IHdoZW4gd2UgY29tZSBvdXQuCisJICoKKwkgKiBPbmx5IG5lZWQgdG8gZG8gdGhpcyBpZiB3ZSdyZSBkb3dubG9hZGluZyBmaXJtd2FyZS4gKi8KKwlpZiAoIXByaXYtPmRvX2Z3X2Rvd25sb2FkKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlzd2l0Y2ggKHBtX2V2ZW50KSB7CisJY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgorCWNhc2UgUE1fU1VTUEVORF9QUkVQQVJFOgorCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOworCQlicmVhazsKKworCWNhc2UgUE1fUE9TVF9SRVNUT1JFOgorCQkvKiBSZXN0b3JlIGZyb20gaGliZXJuYXRpb24gZmFpbGVkLiBXZSBuZWVkIHRvIGNsZWFuCisJCSAqIHVwIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBzbyBmYWxsIHRocm91Z2guICovCisJY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgorCWNhc2UgUE1fUE9TVF9TVVNQRU5EOgorCQlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBQTV9SRVNUT1JFX1BSRVBBUkU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJcHJpdi0+cG1fbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IG9yaW5vY29fcG1fbm90aWZpZXI7CisJcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOworfQorI2Vsc2UgLyogIVBNX1NMRUVQIHx8IEhFUk1FU19DQUNIRV9GV19PTl9JTklUICovCisjZGVmaW5lIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdikgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjb21wX2lkIHsKKwl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGZ3dHlwZV90IGRldGVybWluZV9maXJtd2FyZV90eXBlKHN0cnVjdCBjb21wX2lkICpuaWNfaWQpCit7CisJaWYgKG5pY19pZC0+aWQgPCAweDgwMDApCisJCXJldHVybiBGSVJNV0FSRV9UWVBFX0FHRVJFOworCWVsc2UgaWYgKG5pY19pZC0+aWQgPT0gMHg4MDAwICYmIG5pY19pZC0+bWFqb3IgPT0gMCkKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfU1lNQk9MOworCWVsc2UKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw7Cit9CisKKy8qIFNldCBwcml2LT5maXJtd2FyZSB0eXBlLCBkZXRlcm1pbmUgZmlybXdhcmUgcHJvcGVydGllcyAqLworc3RhdGljIGludCBkZXRlcm1pbmVfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwlzdHJ1Y3QgY29tcF9pZCBuaWNfaWQsIHN0YV9pZDsKKwl1bnNpZ25lZCBpbnQgZmlybXZlcjsKKwljaGFyIHRtcFtTWU1CT0xfTUFYX1ZFUl9MRU4rMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKSkpOworCisJLyogR2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uICovCisJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9OSUNJRCwgJm5pY19pZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBoYXJkd2FyZSBpZGVudGl0eTogZXJyb3IgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbGUxNl90b19jcHVzKCZuaWNfaWQuaWQpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLnZhcmlhbnQpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLm1ham9yKTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIYXJkd2FyZSBpZGVudGl0eSAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIG5pY19pZC5pZCwgbmljX2lkLnZhcmlhbnQsCisJICAgICAgIG5pY19pZC5tYWpvciwgbmljX2lkLm1pbm9yKTsKKworCXByaXYtPmZpcm13YXJlX3R5cGUgPSBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZSgmbmljX2lkKTsKKworCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLworCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1RBSUQsICZzdGFfaWQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc3RhdGlvbiBpZGVudGl0eTogZXJyb3IgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbGUxNl90b19jcHVzKCZzdGFfaWQuaWQpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLnZhcmlhbnQpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1ham9yKTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIGlkZW50aXR5ICAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHN0YV9pZC5pZCwgc3RhX2lkLnZhcmlhbnQsCisJICAgICAgIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKKworCXN3aXRjaCAoc3RhX2lkLmlkKSB7CisJY2FzZSAweDE1OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCWNhc2UgMHgxNGI6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRlcnRpYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCWNhc2UgMHgxZjoJLyogSW50ZXJzaWwsIEFnZXJlLCBTeW1ib2wgU3BlY3RydW0yNCAqLworCWNhc2UgMHgyMToJLyogU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbmtub3duIHN0YXRpb24gSUQsIHBsZWFzZSByZXBvcnRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlicmVhazsKKwl9CisKKwkvKiBEZWZhdWx0IGNhcGFiaWxpdGllcyAqLworCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDE7CisJcHJpdi0+aGFzX213byA9IDA7CisJcHJpdi0+aGFzX3ByZWFtYmxlID0gMDsKKwlwcml2LT5oYXNfcG9ydDMgPSAxOworCXByaXYtPmhhc19pYnNzID0gMTsKKwlwcml2LT5oYXNfd2VwID0gMDsKKwlwcml2LT5oYXNfYmlnX3dlcCA9IDA7CisJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAwOworCXByaXYtPmhhc19leHRfc2NhbiA9IDA7CisJcHJpdi0+aGFzX3dwYSA9IDA7CisJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOworCisJLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBMdWNlbnQgV2F2ZWxhbiBJRUVFLCBMdWNlbnQgT3Jpbm9jbywgQ2FibGV0cm9uIFJvYW1BYm91dCwKKwkJICAgRUxTQSwgTWVsY28sIEhQLCBJQk0sIERlbGwgMTE1MCwgQ29tcGFxIDExMC8yMTAgKi8KKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiTHVjZW50L0FnZXJlICVkLiUwMmQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7CisKKwkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwgc3RhX2lkLm1pbm9yOworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHg2MDAwNik7CisJCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDQwMDIwKTsKKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSAxOyAvKiBGSVhNRTogdGhpcyBpcyB3cm9uZyAtIGhvdyBkbyB3ZSB0ZWxsCisJCQkJCSAgR29sZCBjYXJkcyBmcm9tIHRoZSBvdGhlcnM/ICovCisJCXByaXYtPmhhc19td28gPSAoZmlybXZlciA+PSAweDYwMDAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7IC8qIERvbid0IHdvcmsgaW4gNy41MiA/ICovCisJCXByaXYtPmlic3NfcG9ydCA9IDE7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4ODAwMGEpOworCQlwcml2LT5kb19md19kb3dubG9hZCA9IDE7CisJCXByaXYtPmJyb2tlbl9tb25pdG9yID0gKGZpcm12ZXIgPj0gMHg4MDAwMCk7CisJCXByaXYtPmhhc19hbHRfdHhjbnRsID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLworCQlwcml2LT5oYXNfZXh0X3NjYW4gPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCisJCXByaXYtPmhhc193cGEgPSAoZmlybXZlciA+PSAweDkwMDJhKTsKKwkJLyogVGVzdGVkIHdpdGggQWdlcmUgZmlybXdhcmUgOgorCQkgKgkxLjE2IDsgNC4wOCA7IDQuNTIgOyA2LjA0IDsgNi4xNiA7IDcuMjggPT4gSmVhbiBJSQorCQkgKiBUZXN0ZWQgQ2FibGVUcm9uIGZpcm13YXJlIDogNC4zMiA9PiBBbnRvbiAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkvKiBTeW1ib2wgLCAzQ29tIEFpckNvbm5lY3QsIEludGVsLCBFcmljc3NvbiBXTEFOICovCisJCS8qIEludGVsIE1BQyA6IDAwOjAyOkIzOiogKi8KKwkJLyogM0NvbSBNQUMgOiAwMDo1MDpEQToqICovCisJCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKKwkJLyogR2V0IHRoZSBTeW1ib2wgZmlybXdhcmUgdmVyc2lvbiAqLworCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCSAgICAgIEhFUk1FU19SSURfU0VDT05EQVJZVkVSU0lPTl9TWU1CT0wsCisJCQkJICAgICAgU1lNQk9MX01BWF9WRVJfTEVOLCBOVUxMLCAmdG1wKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogRXJyb3IgJWQgcmVhZGluZyBTeW1ib2wgZmlybXdhcmUgaW5mby4gIgorCQkJICAgICAgICJXaWxkbHkgZ3Vlc3NpbmcgY2FwYWJpbGl0aWVzLi4uXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCWZpcm12ZXIgPSAwOworCQkJdG1wWzBdID0gJ1wwJzsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmaXJtd2FyZSByZXZpc2lvbiBpcyBhIHN0cmluZywgdGhlIGZvcm1hdCBpcworCQkJICogc29tZXRoaW5nIGxpa2UgOiAiVjIuMjAtMDEiLgorCQkJICogUXVpY2sgYW5kIGRpcnR5IHBhcnNpbmcuLi4gLSBKZWFuIElJCisJCQkgKi8KKwkJCWZpcm12ZXIgPSAoKHRtcFsxXSAtICcwJykgPDwgMTYpCisJCQkJfCAoKHRtcFszXSAtICcwJykgPDwgMTIpCisJCQkJfCAoKHRtcFs0XSAtICcwJykgPDwgOCkKKwkJCQl8ICgodG1wWzZdIC0gJzAnKSA8PCA0KQorCQkJCXwgKHRtcFs3XSAtICcwJyk7CisKKwkJCXRtcFtTWU1CT0xfTUFYX1ZFUl9MRU5dID0gJ1wwJzsKKwkJfQorCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIlN5bWJvbCAlcyIsIHRtcCk7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MTUwMTIpOworCQlwcml2LT5oYXNfYmlnX3dlcCA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDIwMDAwICYmIGZpcm12ZXIgPCAweDIyMDAwKSB8fAorCQkJICAgICAgIChmaXJtdmVyID49IDB4MjkwMDAgJiYgZmlybXZlciA8IDB4MzAwMDApIHx8CisJCQkgICAgICAgZmlybXZlciA+PSAweDMxMDAwOworCQlwcml2LT5oYXNfcHJlYW1ibGUgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aWJzc19wb3J0ID0gNDsKKworCQkvKiBTeW1ib2wgZmlybXdhcmUgaXMgZm91bmQgb24gdmFyaW91cyBjYXJkcywgYnV0CisJCSAqIHRoZXJlIGhhcyBiZWVuIG5vIGF0dGVtcHQgdG8gY2hlY2sgZmlybXdhcmUKKwkJICogZG93bmxvYWQgb24gbm9uLXNwZWN0cnVtX2NzIGJhc2VkIGNhcmRzLgorCQkgKgorCQkgKiBHaXZlbiB0aGF0IHRoZSBBZ2VyZSBmaXJtd2FyZSBkb3dubG9hZCB3b3JrcworCQkgKiBkaWZmZXJlbnRseSwgd2Ugc2hvdWxkIGF2b2lkIGRvaW5nIGEgZmlybXdhcmUKKwkJICogZG93bmxvYWQgd2l0aCB0aGUgU3ltYm9sIGFsZ29yaXRobSBvbiBub24tc3BlY3RydW0KKwkJICogY2FyZHMuCisJCSAqCisJCSAqIEZvciBub3cgd2UgY2FuIGlkZW50aWZ5IGEgc3BlY3RydW1fY3MgYmFzZWQgY2FyZAorCQkgKiBiZWNhdXNlIGl0IGhhcyBhIGZpcm13YXJlIHJlc2V0IGZ1bmN0aW9uLgorCQkgKi8KKwkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAocHJpdi0+c3RvcF9mdyAhPSBOVUxMKTsKKworCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAoZmlybXZlciA9PSAweDI1MDEzKSB8fAorCQkJCShmaXJtdmVyID49IDB4MzAwMDAgJiYgZmlybXZlciA8PSAweDMxMDAwKTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgzMTAwMSkgfHwKKwkJCQkgICAgIChmaXJtdmVyID49IDB4MjkwNTcgJiYgZmlybXZlciA8IDB4MzAwMDApOworCQkvKiBUZXN0ZWQgd2l0aCBJbnRlbCBmaXJtd2FyZSA6IDB4MjAwMTUgPT4gSmVhbiBJSSAqLworCQkvKiBUZXN0ZWQgd2l0aCAzQ29tIGZpcm13YXJlIDogMHgxNTAxMiAmIDB4MjIwMDEgPT4gSmVhbiBJSSAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCS8qIEQtTGluaywgTGlua3N5cywgQWR0cm9uLCBab29tQWlyLCBhbmQgbWFueSBvdGhlcnMuLi4KKwkJICogU2Ftc3VuZywgQ29tcGFxIDEwMC8yMDAgYW5kIFByb3hpbSBhcmUgc2xpZ2h0bHkKKwkJICogZGlmZmVyZW50IGFuZCBsZXNzIHdlbGwgdGVzdGVkICovCisJCS8qIEQtTGluayBNQUMgOiAwMDo0MDowNToqICovCisJCS8qIEFkZHRyb24gTUFDIDogMDA6OTA6RDE6KiAqLworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJJbnRlcnNpbCAlZC4lZC4lZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yLAorCQkJIHN0YV9pZC52YXJpYW50KTsKKworCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfAorCQkJKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5taW5vciA8PCA4KSB8IHN0YV9pZC52YXJpYW50OworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOyAvKiBGSVhNRSAqLworCQlwcml2LT5oYXNfYmlnX3dlcCA9IHByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDAwMDgwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgwMTAzMDEpOworCisJCWlmIChmaXJtdmVyID49IDB4MDAwODAwKQorCQkJcHJpdi0+aWJzc19wb3J0ID0gMDsKKwkJZWxzZSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnRlcnNpbCBmaXJtd2FyZSBlYXJsaWVyICIKKwkJCSAgICAgICAidGhhbiB2MC44LnggLSBzZXZlcmFsIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXByaXYtPmlic3NfcG9ydCA9IDE7CisJCX0KKwkJYnJlYWs7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICIlczogRmlybXdhcmUgZGV0ZXJtaW5lZCBhcyAlc1xuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwcml2LT5md19uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIG5pY2tidWY7CisJdTE2IHJlY2xlbjsKKwlpbnQgbGVuOworCisJLyogTm8gbmVlZCB0byBsb2NrLCB0aGUgaHdfdW5hdmFpbGFibGUgZmxhZyBpcyBhbHJlYWR5IHNldCBpbgorCSAqIGFsbG9jX29yaW5vY29kZXYoKSAqLworCXByaXYtPm5pY2J1Zl9zaXplID0gSUVFRTgwMjExX01BWF9GUkFNRV9MRU4gKyBFVEhfSExFTjsKKworCS8qIEluaXRpYWxpemUgdGhlIGZpcm13YXJlICovCisJZXJyID0gaGVybWVzX2luaXQoaHcpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKKwlpZiAoZXJyICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5kb19md19kb3dubG9hZCkgeworI2lmZGVmIENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVAorCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOworI2VuZGlmCisKKwkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKKworCQkvKiBDaGVjayBmaXJtd2FyZSB2ZXJzaW9uIGFnYWluICovCisJCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOworCQlpZiAoZXJyICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHByaXYtPmhhc19wb3J0MykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZC1ob2MgZGVtbyBtb2RlIHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJaWYgKHByaXYtPmhhc19pYnNzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElFRUUgc3RhbmRhcmQgSUJTUyBhZC1ob2MgbW9kZSBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCWlmIChwcml2LT5oYXNfd2VwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogV0VQIHN1cHBvcnRlZCwgJXMtYml0IGtleVxuIiwgZGV2LT5uYW1lLAorCQkgICAgICAgcHJpdi0+aGFzX2JpZ193ZXAgPyAiMTA0IiA6ICI0MCIpOworCX0KKwlpZiAocHJpdi0+aGFzX3dwYSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdQQS1QU0sgc3VwcG9ydGVkXG4iLCBkZXYtPm5hbWUpOworCQlpZiAob3Jpbm9jb19taWNfaW5pdChwcml2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHNldHVwIE1JQyBjcnlwdG8gIgorCQkJICAgICAgICJhbGdvcml0aG0uIERpc2FibGluZyBXUEEgc3VwcG9ydFxuIiwgZGV2LT5uYW1lKTsKKwkJCXByaXYtPmhhc193cGEgPSAwOworCQl9CisJfQorCisJLyogTm93IHdlIGhhdmUgdGhlIGZpcm13YXJlIGNhcGFiaWxpdGllcywgYWxsb2NhdGUgYXBwcm9waWF0ZQorCSAqIHNpemVkIHNjYW4gYnVmZmVycyAqLworCWlmIChvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHByaXYpKQorCQlnb3RvIG91dDsKKwlvcmlub2NvX2Jzc19kYXRhX2luaXQocHJpdik7CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGRldi0+ZGV2X2FkZHIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGFkZHJlc3MgJXBNXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOworCisJLyogR2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCisJCQkgICAgICBzaXplb2Yobmlja2J1ZiksICZyZWNsZW4sICZuaWNrYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHN0YXRpb24gbmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobmlja2J1Zi5sZW4pCisJCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgKGludClsZTE2X3RvX2NwdShuaWNrYnVmLmxlbikpOworCWVsc2UKKwkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAyICogcmVjbGVuKTsKKwltZW1jcHkocHJpdi0+bmljaywgJm5pY2tidWYudmFsLCBsZW4pOworCXByaXYtPm5pY2tbbGVuXSA9ICdcMCc7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gbmFtZSBcIiVzXCJcbiIsIGRldi0+bmFtZSwgcHJpdi0+bmljayk7CisKKwllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGFsbG93ZWQgY2hhbm5lbHMgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DSEFOTkVMTElTVCwKKwkJCQkgICZwcml2LT5jaGFubmVsX21hc2spOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgY2hhbm5lbCBsaXN0IVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCBpbml0aWFsIEFQIGRlbnNpdHkgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKKwkJCQkgICZwcml2LT5hcF9kZW5zaXR5KTsKKwlpZiAoZXJyIHx8IHByaXYtPmFwX2RlbnNpdHkgPCAxIHx8IHByaXYtPmFwX2RlbnNpdHkgPiAzKQorCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOworCisJLyogR2V0IGluaXRpYWwgUlRTIHRocmVzaG9sZCAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKKwkJCQkgICZwcml2LT5ydHNfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIFJUUyB0aHJlc2hvbGQhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGluaXRpYWwgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyAqLworCWlmIChwcml2LT5oYXNfbXdvKQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAmcHJpdi0+bXdvX3JvYnVzdCk7CisJZWxzZQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCisJCQkJCSAgJnByaXYtPmZyYWdfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGZyYWdtZW50YXRpb24gc2V0dGluZ3MhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUG93ZXIgbWFuYWdlbWVudCBzZXR1cCAqLworCWlmIChwcml2LT5oYXNfcG0pIHsKKwkJcHJpdi0+cG1fb24gPSAwOworCQlwcml2LT5wbV9tY2FzdCA9IDE7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKKwkJCQkJICAmcHJpdi0+cG1fcGVyaW9kKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QhXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKKwkJCQkJICAmcHJpdi0+cG1fdGltZW91dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgdGltZW91dCFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogUHJlYW1ibGUgc2V0dXAgKi8KKwlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAorCQkJCQkgICZwcml2LT5wcmVhbWJsZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLworCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOworCS8qIEJ5IGRlZmF1bHQgdXNlIElFRUUvSUJTUyBhZC1ob2MgbW9kZSBpZiB3ZSBoYXZlIGl0ICovCisJcHJpdi0+cHJlZmVyX3BvcnQzID0gcHJpdi0+aGFzX3BvcnQzICYmICghcHJpdi0+aGFzX2lic3MpOworCXNldF9wb3J0X3R5cGUocHJpdik7CisJcHJpdi0+Y2hhbm5lbCA9IDA7IC8qIHVzZSBmaXJtd2FyZSBkZWZhdWx0ICovCisKKwlwcml2LT5wcm9taXNjdW91cyA9IDA7CisJcHJpdi0+ZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwlwcml2LT50eF9rZXkgPSAwOworCXByaXYtPndwYV9lbmFibGVkID0gMDsKKwlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7CisJcHJpdi0+a2V5X21nbXQgPSAwOworCXByaXYtPndwYV9pZV9sZW4gPSAwOworCXByaXYtPndwYV9pZSA9IE5VTEw7CisKKwkvKiBNYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUsIGFzIGxvbmcgYXMgaXQgaGFzbid0IGJlZW4KKwkgKiByZW1vdmVkIGVsc2V3aGVyZSAoZS5nLiBieSBQQ01DSUEgaG90IHVucGx1ZykgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlwcml2LT5od191bmF2YWlsYWJsZS0tOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOworCisgb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb3Jpbm9jb19uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBvcmlub2NvX2luaXQsCisJLm5kb19vcGVuCQk9IG9yaW5vY29fb3BlbiwKKwkubmRvX3N0b3AJCT0gb3Jpbm9jb19zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBvcmlub2NvX3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gb3Jpbm9jb19jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBvcmlub2NvX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gb3Jpbm9jb19nZXRfc3RhdHMsCit9OworCitzdHJ1Y3QgbmV0X2RldmljZQorKmFsbG9jX29yaW5vY29kZXYoaW50IHNpemVvZl9jYXJkLAorCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJICBpbnQgKCpoYXJkX3Jlc2V0KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICopLAorCQkgIGludCAoKnN0b3BfZncpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiwgaW50KSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CisKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkgKyBzaXplb2ZfY2FyZCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXByaXYtPm5kZXYgPSBkZXY7CisJaWYgKHNpemVvZl9jYXJkKQorCQlwcml2LT5jYXJkID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcHJpdgorCQkJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpKTsKKwllbHNlCisJCXByaXYtPmNhcmQgPSBOVUxMOworCXByaXYtPmRldiA9IGRldmljZTsKKworCS8qIFNldHVwIC8gb3ZlcnJpZGUgbmV0X2RldmljZSBmaWVsZHMgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmb3Jpbm9jb19uZXRkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsgLyogMSBzZWNvbmQgdGltZW91dCAqLworCWRldi0+ZXRodG9vbF9vcHMgPSAmb3Jpbm9jb19ldGh0b29sX29wczsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJm9yaW5vY29faGFuZGxlcl9kZWY7CisjaWZkZWYgV0lSRUxFU1NfU1BZCisJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5zcHlfZGF0YTsKKwlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKKyNlbmRpZgorCS8qIHdlIHVzZSB0aGUgZGVmYXVsdCBldGhfbWFjX2FkZHIgZm9yIHNldHRpbmcgdGhlIE1BQyBhZGRyICovCisKKwkvKiBSZXNlcnZlIHNwYWNlIGluIHNrYiBmb3IgdGhlIFNOQVAgaGVhZGVyICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gRU5DQVBTX09WRVJIRUFEOworCisJLyogU2V0IHVwIGRlZmF1bHQgY2FsbGJhY2tzICovCisJcHJpdi0+aGFyZF9yZXNldCA9IGhhcmRfcmVzZXQ7CisJcHJpdi0+c3RvcF9mdyA9IHN0b3BfZnc7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+b3BlbiA9IDA7CisJcHJpdi0+aHdfdW5hdmFpbGFibGUgPSAxOyAvKiBvcmlub2NvX2luaXQoKSBtdXN0IGNsZWFyIHRoaXMKKwkJCQkgICAqIGJlZm9yZSBhbnl0aGluZyBlbHNlIHRvdWNoZXMgdGhlCisJCQkJICAgKiBoYXJkd2FyZSAqLworCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd29yaywgb3Jpbm9jb19yZXNldCk7CisJSU5JVF9XT1JLKCZwcml2LT5qb2luX3dvcmssIG9yaW5vY29fam9pbl9hcCk7CisJSU5JVF9XT1JLKCZwcml2LT53ZXZlbnRfd29yaywgb3Jpbm9jb19zZW5kX3dldmVudHMpOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnJ4X2xpc3QpOworCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgb3Jpbm9jb19yeF9pc3JfdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOworCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQorCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOworCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7CisjZW5kaWYKKworCS8qIFJlZ2lzdGVyIFBNIG5vdGlmaWVycyAqLworCW9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7CisKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTChhbGxvY19vcmlub2NvZGV2KTsKKwordm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKKworCS8qIElmIHRoZSB0YXNrbGV0IGlzIHNjaGVkdWxlZCB3aGVuIHdlIGNhbGwgdGFza2xldF9raWxsIGl0CisJICogd2lsbCBydW4gb25lIGZpbmFsIHRpbWUuIEhvd2V2ZXIgdGhlIHRhc2tsZXQgd2lsbCBvbmx5CisJICogZHJhaW4gcHJpdi0+cnhfbGlzdCBpZiB0aGUgaHcgaXMgc3RpbGwgYXZhaWxhYmxlLiAqLworCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7CisKKwkvKiBFeHBsaWNpdGx5IGRyYWluIHByaXYtPnJ4X2xpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfZGF0YSwgdGVtcCwgJnByaXYtPnJ4X2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnJ4X2RhdGEtPmxpc3QpOworCisJCWRldl9rZnJlZV9za2IocnhfZGF0YS0+c2tiKTsKKwkJa2ZyZWUocnhfZGF0YS0+ZGVzYyk7CisJCWtmcmVlKHJ4X2RhdGEpOworCX0KKworCW9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKKwlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7CisKKwlwcml2LT53cGFfaWVfbGVuID0gMDsKKwlrZnJlZShwcml2LT53cGFfaWUpOworCW9yaW5vY29fbWljX2ZyZWUocHJpdik7CisJb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHByaXYpOworCWZyZWVfbmV0ZGV2KGRldik7Cit9CitFWFBPUlRfU1lNQk9MKGZyZWVfb3Jpbm9jb2Rldik7CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3RybmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSAtIDEpOworCXN0cm5jcHkoaW5mby0+ZndfdmVyc2lvbiwgcHJpdi0+ZndfbmFtZSwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pIC0gMSk7CisJaWYgKGRldi0+ZGV2LnBhcmVudCkKKwkJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKKwkJCXNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxKTsKKwllbHNlCisJCXNucHJpbnRmKGluZm8tPmJ1c19pbmZvLCBzaXplb2YoaW5mby0+YnVzX2luZm8pIC0gMSwKKwkJCSAiUENNQ0lBICVwIiwgcHJpdi0+aHcuaW9iYXNlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IG9yaW5vY29fZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1vZHVsZSBpbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2FuJ3QgYmUgZGVjbGFyZWQgImNvbnN0IiBvciB0aGUgd2hvbGUgX19pbml0ZGF0YSBzZWN0aW9uIHdpbGwKKyAqIGJlY29tZSBjb25zdCAqLworc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KKwkiIChEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+LCAiCisJIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LCBldCBhbCkiOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X29yaW5vY28odm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9vcmlub2NvKHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KGluaXRfb3Jpbm9jbyk7Cittb2R1bGVfZXhpdChleGl0X29yaW5vY28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjJiYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmgKQEAgLTAsMCArMSw2MyBAQAorLyogRXhwb3J0cyBmcm9tIG1haW4gdG8gaGVscGVyIG1vZHVsZXMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19NQUlOX0hfCisjZGVmaW5lIF9PUklOT0NPX01BSU5fSF8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29tcGlsZSB0aW1lIGNvbmZpZ3VyYXRpb24gYW5kIGNvbXBhdGliaWxpdHkgc3R1ZmYgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBXZSBkbyB0aGlzIHRoaXMgd2F5IHRvIGF2b2lkIGlmZGVmcyBpbiB0aGUgYWN0dWFsIGNvZGUgKi8KKyNpZmRlZiBXSVJFTEVTU19TUFkKKyNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkocHJpdi0+c3B5X2RhdGEuc3B5X251bWJlcikKKyNlbHNlCisjZGVmaW5lIFNQWV9OVU1CRVIocHJpdikJMAorI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEV4cG9ydCBtb2R1bGUgcGFyYW1ldGVyICovCitleHRlcm4gaW50IGZvcmNlX21vbml0b3I7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3QgbmV0X2RldmljZTsKK3N0cnVjdCB3b3JrX3N0cnVjdDsKKwordm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworCisvKiBJbmZvcm1hdGlvbiBlbGVtZW50IGhlbHBlcnMgLSBmaW5kIGEgaG9tZSBmb3IgdGhlc2UuLi4gKi8KK3N0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X2llKHU4ICpkYXRhLCBzaXplX3QgbGVuLAorCQkJCSBlbnVtIGllZWU4MDIxMV9laWQgZWlkKQoreworCXU4ICpwID0gZGF0YTsKKwl3aGlsZSAoKHAgKyAyKSA8IChkYXRhICsgbGVuKSkgeworCQlpZiAocFswXSA9PSBlaWQpCisJCQlyZXR1cm4gcDsKKwkJcCArPSBwWzFdICsgMjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgV1BBX09VSV9UWVBFCSJceDAwXHg1MFx4RjJceDAxIgorI2RlZmluZSBXUEFfU0VMRUNUT1JfTEVOIDQKK3N0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X3dwYV9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwl1OCAqcCA9IGRhdGE7CisJd2hpbGUgKChwICsgMiArIFdQQV9TRUxFQ1RPUl9MRU4pIDwgKGRhdGEgKyBsZW4pKSB7CisJCWlmICgocFswXSA9PSBXTEFOX0VJRF9HRU5FUklDKSAmJgorCQkgICAgKG1lbWNtcCgmcFsyXSwgV1BBX09VSV9UWVBFLCBXUEFfU0VMRUNUT1JfTEVOKSA9PSAwKSkKKwkJCXJldHVybiBwOworCQlwICs9IHBbMV0gKyAyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIF9PUklOT0NPX01BSU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2U3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIE9yaW5vY28gTUlDIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworI2luY2x1ZGUgIm9yaW5vY28uaCIKKyNpbmNsdWRlICJtaWMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTWljaGFlbCBNSUMgY3J5cHRvIHNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IG9yaW5vY29fbWljX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlwcml2LT50eF90Zm1fbWljID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwgMCk7CisJaWYgKElTX0VSUihwcml2LT50eF90Zm1fbWljKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAib3Jpbm9jb19taWNfaW5pdDogY291bGQgbm90IGFsbG9jYXRlICIKKwkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKKwkJcHJpdi0+dHhfdGZtX21pYyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYtPnJ4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKHByaXYtPnJ4X3RmbV9taWMpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgorCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOworCQlwcml2LT5yeF90Zm1fbWljID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3Jpbm9jb19taWNfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT50eF90Zm1fbWljKQorCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnR4X3RmbV9taWMpOworCWlmIChwcml2LT5yeF90Zm1fbWljKQorCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnJ4X3RmbV9taWMpOworfQorCitpbnQgb3Jpbm9jb19taWMoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fbWljaGFlbCwgdTggKmtleSwKKwkJdTggKmRhLCB1OCAqc2EsIHU4IHByaW9yaXR5LAorCQl1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CisJdTggaGRyW0VUSF9ITEVOICsgMl07IC8qIHNpemUgb2YgaGVhZGVyICsgcGFkZGluZyAqLworCisJaWYgKHRmbV9taWNoYWVsID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAib3Jpbm9jb19taWM6IHRmbV9taWNoYWVsID09IE5VTExcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ29weSBoZWFkZXIgaW50byBidWZmZXIuIFdlIG5lZWQgdGhlIHBhZGRpbmcgb24gdGhlIGVuZCB6ZXJvZWQgKi8KKwltZW1jcHkoJmhkclswXSwgZGEsIEVUSF9BTEVOKTsKKwltZW1jcHkoJmhkcltFVEhfQUxFTl0sIHNhLCBFVEhfQUxFTik7CisJaGRyW0VUSF9BTEVOKjJdID0gcHJpb3JpdHk7CisJaGRyW0VUSF9BTEVOKjIrMV0gPSAwOworCWhkcltFVEhfQUxFTioyKzJdID0gMDsKKwloZHJbRVRIX0FMRU4qMiszXSA9IDA7CisKKwkvKiBVc2Ugc2NhdHRlciBnYXRoZXIgdG8gTUlDIGhlYWRlciBhbmQgZGF0YSBpbiBvbmUgZ28gKi8KKwlzZ19pbml0X3RhYmxlKHNnLCAyKTsKKwlzZ19zZXRfYnVmKCZzZ1swXSwgaGRyLCBzaXplb2YoaGRyKSk7CisJc2dfc2V0X2J1Zigmc2dbMV0sIGRhdGEsIGRhdGFfbGVuKTsKKworCWlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtX21pY2hhZWwsIGtleSwgTUlDX0tFWUxFTikpCisJCXJldHVybiAtMTsKKworCWRlc2MudGZtID0gdGZtX21pY2hhZWw7CisJZGVzYy5mbGFncyA9IDA7CisJcmV0dXJuIGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIGRhdGFfbGVuICsgc2l6ZW9mKGhkciksCisJCQkJICBtaWMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkMDViYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmgKQEAgLTAsMCArMSwyMiBAQAorLyogT3Jpbm9jbyBNSUMgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX01JQ19IXworI2RlZmluZSBfT1JJTk9DT19NSUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUlDSEFFTF9NSUNfTEVOIDgKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CitzdHJ1Y3QgY3J5cHRvX2hhc2g7CisKK2ludCBvcmlub2NvX21pY19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwordm9pZCBvcmlub2NvX21pY19mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IG9yaW5vY29fbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICprZXksCisJCXU4ICpkYSwgdTggKnNhLCB1OCBwcmlvcml0eSwKKwkJdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYyk7CisKKyNlbmRpZiAvKiBPUklOT0NPX01JQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjdkMWE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5jCisrKyAvZGV2L251bGwKQEAgLTEsNjE1OSArMCwwIEBACi0vKiBvcmlub2NvLmMgLSAoZm9ybWVybHkga25vd24gYXMgZGxkd2RfY3MuYyBhbmQgb3Jpbm9jb19jcy5jKQotICoKLSAqIEEgZHJpdmVyIGZvciBIZXJtZXMgb3IgUHJpc20gMiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcwotICogYWRhcHRvcnMsIHdpdGggTHVjZW50L0FnZXJlLCBJbnRlcnNpbCBvciBTeW1ib2wgZmlybXdhcmUuCi0gKgotICogQ3VycmVudCBtYWludGFpbmVycyAoYXMgb2YgMjkgU2VwdGVtYmVyIDIwMDMpIGFyZToKLSAqIAlQYXZlbCBSb3NraW4gPHByb3NraSBBVCBnbnUub3JnPgotICogYW5kCURhdmlkIEdpYnNvbiA8aGVybWVzIEFUIGdpYnNvbi5kcm9wYmVhci5pZC5hdT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uIDIwMDEtMjAwMy4KLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCi0gKglXaXRoIHNvbWUgaGVscCBmcm9tIDoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBKZWFuIFRvdXJyaWxoZXMsIEhQIExhYnMKLSAqIENvcHlyaWdodCAoQykgMjAwMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0Ci0gKgotICogQmFzZWQgb24gZHVtbXlfY3MuYyAxLjI3IDIwMDAvMDYvMTIgMjE6Mjc6MjUKLSAqCi0gKiBQb3J0aW9ucyBiYXNlZCBvbiB3dmxhbl9jcy5jIDEuMC42LCBDb3B5cmlnaHQgQW5kcmVhcyBOZXVoYXVzIDxhbmR5Ci0gKiBBVCBmYXN0YS5maC1kb3J0bXVuZC5kZT4KLSAqICAgICAgaHR0cDovL3d3dy5zdHVkLmZoLWRvcnRtdW5kLmRlL35hbmR5L3d2bGFuLwotICoKLSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KLSAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCi0gKiBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCi0gKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCi0gKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKLSAqIDxkYWhpbmRzIEFUIHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkCi0gKiBBLiBIaW5kcyBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cwotICogUmVzZXJ2ZWQuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluCi0gKiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKLSAqIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0gKiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5Ci0gKiBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKLSAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQotICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0gKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLiAgKi8KLQotLyoKLSAqIFRPRE8KLSAqCW8gSGFuZGxlIGRlLWVuY2Fwc3VsYXRpb24gd2l0aGluIG5ldHdvcmsgbGF5ZXIsIHByb3ZpZGUgODAyLjExCi0gKgkgIGhlYWRlcnMgKHBhdGNoIGZyb20gVGhvbWFzICdEZW50JyBNaXJsYWNoZXIpCi0gKglvIEZpeCBwb3NzaWJsZSByYWNlcyBpbiBTUFkgaGFuZGxpbmcuCi0gKglvIERpc2Nvbm5lY3Qgd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcm9tIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24uCi0gKglvIChtYXliZSkgU29mdHdhcmUgV0VQIHN1cHBvcnQgKHBhdGNoIGZyb20gU3Rhbm8gTWVkdW5hKS4KLSAqCW8gKG1heWJlKSBVc2UgbXVsdGlwbGUgVHggYnVmZmVycyAtIGRyaXZlciBoYW5kbGluZyBxdWV1ZQotICoJICByYXRoZXIgdGhhbiBmaXJtd2FyZS4KLSAqLwotCi0vKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb246Ci0gKgotICogVGhlIGJhc2ljIHByaW5jaXBsZSBpcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgc2VyaWFsaXplZCB0aHJvdWdoIGEKLSAqIHNpbmdsZSBzcGlubG9jaywgcHJpdi0+bG9jay4gIFRoZSBsb2NrIGlzIHVzZWQgaW4gdXNlciwgYmggYW5kIGlycQotICogY29udGV4dCwgc28gd2hlbiB0YWtlbiBvdXRzaWRlIGhhcmRpcnEgY29udGV4dCBpdCBzaG91bGQgYWx3YXlzIGJlCi0gKiB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICBUaGUgbG9jayBwcm90ZWN0cyBib3RoIHRoZQotICogaGFyZHdhcmUgYW5kIHRoZSBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLgotICoKLSAqIEFub3RoZXIgZmxhZywgcHJpdi0+aHdfdW5hdmFpbGFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIGlzCi0gKiB1bmF2YWlsYWJsZSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUgKGUuZy4gc3VzcGVuZGVkLCBvciBpbgotICogdGhlIG1pZGRsZSBvZiBhIGhhcmQgcmVzZXQpLiAgVGhpcyBmbGFnIGlzIHByb3RlY3RlZCBieSB0aGUKLSAqIHNwaW5sb2NrLiAgQWxsIGNvZGUgd2hpY2ggdG91Y2hlcyB0aGUgaGFyZHdhcmUgc2hvdWxkIGNoZWNrIHRoZQotICogZmxhZyBhZnRlciB0YWtpbmcgdGhlIGxvY2ssIGFuZCBpZiBpdCBpcyBzZXQsIGdpdmUgdXAgb24gd2hhdGV2ZXIKLSAqIHRoZXkgYXJlIGRvaW5nIGFuZCBkcm9wIHRoZSBsb2NrIGFnYWluLiAgVGhlIG9yaW5vY29fbG9jaygpCi0gKiBmdW5jdGlvbiBoYW5kbGVzIHRoaXMgKGl0IHVubG9ja3MgYW5kIHJldHVybnMgLUVCVVNZIGlmCi0gKiBod191bmF2YWlsYWJsZSBpcyBub24temVybykuCi0gKi8KLQotI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jbyIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0KLSNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCi0jaW5jbHVkZSAiaGVybWVzX2RsZC5oIgotI2luY2x1ZGUgIm9yaW5vY28uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTW9kdWxlIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1NT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBMdWNlbnQgT3Jpbm9jbywgUHJpc20gSUkgYmFzZWQgYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKLQotLyogTGV2ZWwgb2YgZGVidWdnaW5nLiBVc2VkIGluIHRoZSBtYWNyb3MgaW4gb3Jpbm9jby5oICovCi0jaWZkZWYgT1JJTk9DT19ERUJVRwotaW50IG9yaW5vY29fZGVidWcgPSBPUklOT0NPX0RFQlVHOwotbW9kdWxlX3BhcmFtKG9yaW5vY29fZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9yaW5vY29fZGVidWcsICJEZWJ1ZyBsZXZlbCIpOwotRVhQT1JUX1NZTUJPTChvcmlub2NvX2RlYnVnKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IHN1cHByZXNzX2xpbmtzdGF0dXM7IC8qID0gMCAqLwotbW9kdWxlX3BhcmFtKHN1cHByZXNzX2xpbmtzdGF0dXMsIGJvb2wsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzdXBwcmVzc19saW5rc3RhdHVzLCAiRG9uJ3QgbG9nIGxpbmsgc3RhdHVzIGNoYW5nZXMiKTsKLXN0YXRpYyBpbnQgaWdub3JlX2Rpc2Nvbm5lY3Q7IC8qID0gMCAqLwotbW9kdWxlX3BhcmFtKGlnbm9yZV9kaXNjb25uZWN0LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfZGlzY29ubmVjdCwgIkRvbid0IHJlcG9ydCBsb3N0IGxpbmsgdG8gdGhlIG5ldHdvcmsgbGF5ZXIiKTsKLQotc3RhdGljIGludCBmb3JjZV9tb25pdG9yOyAvKiA9IDAgKi8KLW1vZHVsZV9wYXJhbShmb3JjZV9tb25pdG9yLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tb25pdG9yLCAiQWxsb3cgbW9uaXRvciBtb2RlIGZvciBhbGwgZmlybXdhcmUgdmVyc2lvbnMiKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29tcGlsZSB0aW1lIGNvbmZpZ3VyYXRpb24gYW5kIGNvbXBhdGliaWxpdHkgc3R1ZmYgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBXZSBkbyB0aGlzIHRoaXMgd2F5IHRvIGF2b2lkIGlmZGVmcyBpbiB0aGUgYWN0dWFsIGNvZGUgKi8KLSNpZmRlZiBXSVJFTEVTU19TUFkKLSNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkocHJpdi0+c3B5X2RhdGEuc3B5X251bWJlcikKLSNlbHNlCi0jZGVmaW5lIFNQWV9OVU1CRVIocHJpdikJMAotI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcm5hbCBjb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIDgwMi4yIExMQy9TTkFQIGhlYWRlciB1c2VkIGZvciBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIG92ZXIgODAyLjExICovCi1zdGF0aWMgY29uc3QgdTggZW5jYXBzX2hkcltdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OwotI2RlZmluZSBFTkNBUFNfT1ZFUkhFQUQJCShzaXplb2YoZW5jYXBzX2hkcikgKyAyKQotCi0jZGVmaW5lIE9SSU5PQ09fTUlOX01UVQkJMjU2Ci0jZGVmaW5lIE9SSU5PQ09fTUFYX01UVQkJKElFRUU4MDIxMV9NQVhfREFUQV9MRU4gLSBFTkNBUFNfT1ZFUkhFQUQpCi0KLSNkZWZpbmUgU1lNQk9MX01BWF9WRVJfTEVOCSgxNCkKLSNkZWZpbmUgVVNFUl9CQVAJCTAKLSNkZWZpbmUgSVJRX0JBUAkJCTEKLSNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9JUlEJMTAKLSNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9KSUZGWQkoMjAwMDAvSFopIC8qIEJhc2VkIG9uIGEgZ3Vlc3RpbWF0ZSBvZgotCQkJCQkgICAgKiBob3cgbWFueSBldmVudHMgdGhlCi0JCQkJCSAgICAqIGRldmljZSBjb3VsZAotCQkJCQkgICAgKiBsZWdpdGltYXRlbHkgZ2VuZXJhdGUgKi8KLSNkZWZpbmUgU01BTExfS0VZX1NJWkUJCTUKLSNkZWZpbmUgTEFSR0VfS0VZX1NJWkUJCTEzCi0jZGVmaW5lIFRYX05JQ0JVRl9TSVpFX0JVRwkxNTg1CQkvKiBCdWcgaW4gU3ltYm9sIGZpcm13YXJlICovCi0KLSNkZWZpbmUgRFVNTVlfRklECQkweEZGRkYKLQotLyojZGVmaW5lIE1BWF9NVUxUSUNBU1QocHJpdikJKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSA/IFwKLSAgSEVSTUVTX01BWF9NVUxUSUNBU1QgOiAwKSovCi0jZGVmaW5lIE1BWF9NVUxUSUNBU1QocHJpdikJKEhFUk1FU19NQVhfTVVMVElDQVNUKQotCi0jZGVmaW5lIE9SSU5PQ09fSU5URU4JIAkoSEVSTUVTX0VWX1JYIHwgSEVSTUVTX0VWX0FMTE9DIFwKLQkJCQkgfCBIRVJNRVNfRVZfVFggfCBIRVJNRVNfRVZfVFhFWEMgXAotCQkJCSB8IEhFUk1FU19FVl9XVEVSUiB8IEhFUk1FU19FVl9JTkZPIFwKLQkJCQkgfCBIRVJNRVNfRVZfSU5GRFJPUCApCi0KLSNkZWZpbmUgTUFYX1JJRF9MRU4gMTAyNAotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWY7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHM7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEgdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlIGZyZXF1ZW5jeSBvZiBlYWNoIGNoYW5uZWwgaW4gTUh6ICovCi1zdGF0aWMgY29uc3QgbG9uZyBjaGFubmVsX2ZyZXF1ZW5jeVtdID0gewotCTI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCi0JMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NAotfTsKLSNkZWZpbmUgTlVNX0NIQU5ORUxTIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxdWVuY3kpCi0KLS8qIFRoaXMgdGFibGVzIGdpdmVzIHRoZSBhY3R1YWwgbWVhbmluZ3Mgb2YgdGhlIGJpdHJhdGUgSURzIHJldHVybmVkCi0gKiBieSB0aGUgZmlybXdhcmUuICovCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgYml0cmF0ZTsgLyogaW4gMTAwcyBvZiBraWxvYml0cyAqLwotCWludCBhdXRvbWF0aWM7Ci0JdTE2IGFnZXJlX3R4cmF0ZWN0cmw7Ci0JdTE2IGludGVyc2lsX3R4cmF0ZWN0cmw7Ci19IGJpdHJhdGVfdGFibGVbXSA9IHsKLQl7MTEwLCAxLCAgMywgMTV9LCAvKiBFbnRyeSAwIGlzIHRoZSBkZWZhdWx0ICovCi0JezEwLCAgMCwgIDEsICAxfSwKLQl7MTAsICAxLCAgMSwgIDF9LAotCXsyMCwgIDAsICAyLCAgMn0sCi0JezIwLCAgMSwgIDYsICAzfSwKLQl7NTUsICAwLCAgNCwgIDR9LAotCXs1NSwgIDEsICA3LCAgN30sCi0JezExMCwgMCwgIDUsICA4fSwKLX07Ci0jZGVmaW5lIEJJVFJBVEVfVEFCTEVfU0laRSBBUlJBWV9TSVpFKGJpdHJhdGVfdGFibGUpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQmVnaW5uaW5nIG9mIHRoZSBUeCBkZXNjcmlwdG9yLCB1c2VkIGluIFR4RXhjIGhhbmRsaW5nICovCi1zdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgewotCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOwotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBSeCBmcmFtZSBoZWFkZXIgZXhjZXB0IGNvbXBhdGliaWxpdHkgODAyLjMgaGVhZGVyICovCi1zdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgewotCS8qIENvbnRyb2wgKi8KLQlfX2xlMTYgc3RhdHVzOwotCV9fbGUzMiB0aW1lOwotCXU4IHNpbGVuY2U7Ci0JdTggc2lnbmFsOwotCXU4IHJhdGU7Ci0JdTggcnhmbG93OwotCV9fbGUzMiByZXNlcnZlZDsKLQotCS8qIDgwMi4xMSBoZWFkZXIgKi8KLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBhZGRyNFtFVEhfQUxFTl07Ci0KLQkvKiBEYXRhIGxlbmd0aCAqLwotCV9fbGUxNiBkYXRhX2xlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1pY2hhZWwgTUlDIGNyeXB0byBzZXR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgTUlDSEFFTF9NSUNfTEVOIDgKLXN0YXRpYyBpbnQgb3Jpbm9jb19taWNfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXByaXYtPnR4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKLQlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9taWMpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOwotCQlwcml2LT50eF90Zm1fbWljID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJpdi0+cnhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOwotCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX21pYykpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7Ci0JCXByaXYtPnJ4X3RmbV9taWMgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19taWNfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT50eF90Zm1fbWljKQotCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnR4X3RmbV9taWMpOwotCWlmIChwcml2LT5yeF90Zm1fbWljKQotCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnJ4X3RmbV9taWMpOwotfQotCi1zdGF0aWMgaW50IG1pY2hhZWxfbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICprZXksCi0JCSAgICAgICB1OCAqZGEsIHU4ICpzYSwgdTggcHJpb3JpdHksCi0JCSAgICAgICB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQotewotCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07Ci0JdTggaGRyW0VUSF9ITEVOICsgMl07IC8qIHNpemUgb2YgaGVhZGVyICsgcGFkZGluZyAqLwotCi0JaWYgKHRmbV9taWNoYWVsID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWljaGFlbF9taWM6IHRmbV9taWNoYWVsID09IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogQ29weSBoZWFkZXIgaW50byBidWZmZXIuIFdlIG5lZWQgdGhlIHBhZGRpbmcgb24gdGhlIGVuZCB6ZXJvZWQgKi8KLQltZW1jcHkoJmhkclswXSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkoJmhkcltFVEhfQUxFTl0sIHNhLCBFVEhfQUxFTik7Ci0JaGRyW0VUSF9BTEVOKjJdID0gcHJpb3JpdHk7Ci0JaGRyW0VUSF9BTEVOKjIrMV0gPSAwOwotCWhkcltFVEhfQUxFTioyKzJdID0gMDsKLQloZHJbRVRIX0FMRU4qMiszXSA9IDA7Ci0KLQkvKiBVc2Ugc2NhdHRlciBnYXRoZXIgdG8gTUlDIGhlYWRlciBhbmQgZGF0YSBpbiBvbmUgZ28gKi8KLQlzZ19pbml0X3RhYmxlKHNnLCAyKTsKLQlzZ19zZXRfYnVmKCZzZ1swXSwgaGRyLCBzaXplb2YoaGRyKSk7Ci0Jc2dfc2V0X2J1Zigmc2dbMV0sIGRhdGEsIGRhdGFfbGVuKTsKLQotCWlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtX21pY2hhZWwsIGtleSwgTUlDX0tFWUxFTikpCi0JCXJldHVybiAtMTsKLQotCWRlc2MudGZtID0gdGZtX21pY2hhZWw7Ci0JZGVzYy5mbGFncyA9IDA7Ci0JcmV0dXJuIGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIGRhdGFfbGVuICsgc2l6ZW9mKGhkciksCi0JCQkJICBtaWMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3dpdGNoIChwcml2LT5pd19tb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCQlwcml2LT5wb3J0X3R5cGUgPSAxOwotCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgotCQlpZiAocHJpdi0+cHJlZmVyX3BvcnQzKSB7Ci0JCQlwcml2LT5wb3J0X3R5cGUgPSAzOwotCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5wb3J0X3R5cGUgPSBwcml2LT5pYnNzX3BvcnQ7Ci0JCQlwcml2LT5jcmVhdGVpYnNzID0gMTsKLQkJfQotCQlicmVhazsKLQljYXNlIElXX01PREVfTU9OSVRPUjoKLQkJcHJpdi0+cG9ydF90eXBlID0gMzsKLQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgcHJpdi0+aXdfbW9kZSBpbiBzZXRfcG9ydF90eXBlKClcbiIsCi0JCSAgICAgICBwcml2LT5uZGV2LT5uYW1lKTsKLQl9Ci19Ci0KLSNkZWZpbmUgT1JJTk9DT19NQVhfQlNTX0NPVU5UCTY0Ci1zdGF0aWMgaW50IG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAocHJpdi0+YnNzX3hic3NfZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQotCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHhic3NfZWxlbWVudCksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWVsc2UKLQkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBic3NfZWxlbWVudCksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCi0JaWYgKCFwcml2LT5ic3NfeGJzc19kYXRhKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+YnNzX3hic3NfZGF0YSk7Ci0JcHJpdi0+YnNzX3hic3NfZGF0YSA9IE5VTEw7Ci19Ci0KLSNkZWZpbmUgUFJJVl9CU1MJKChzdHJ1Y3QgYnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQotI2RlZmluZSBQUklWX1hCU1MJKChzdHJ1Y3QgeGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKLXN0YXRpYyB2b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWludCBpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfbGlzdCk7Ci0JaWYgKHByaXYtPmhhc19leHRfc2NhbikKLQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQotCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfWEJTU1tpXS5saXN0KSwKLQkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JZWxzZQotCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCi0JCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9CU1NbaV0ubGlzdCksCi0JCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X2llKHU4ICpkYXRhLCBzaXplX3QgbGVuLAotCQkJCSBlbnVtIGllZWU4MDIxMV9laWQgZWlkKQotewotCXU4ICpwID0gZGF0YTsKLQl3aGlsZSAoKHAgKyAyKSA8IChkYXRhICsgbGVuKSkgewotCQlpZiAocFswXSA9PSBlaWQpCi0JCQlyZXR1cm4gcDsKLQkJcCArPSBwWzFdICsgMjsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNkZWZpbmUgV1BBX09VSV9UWVBFCSJceDAwXHg1MFx4RjJceDAxIgotI2RlZmluZSBXUEFfU0VMRUNUT1JfTEVOIDQKLXN0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X3dwYV9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQl1OCAqcCA9IGRhdGE7Ci0Jd2hpbGUgKChwICsgMiArIFdQQV9TRUxFQ1RPUl9MRU4pIDwgKGRhdGEgKyBsZW4pKSB7Ci0JCWlmICgocFswXSA9PSBXTEFOX0VJRF9HRU5FUklDKSAmJgotCQkgICAgKG1lbWNtcCgmcFsyXSwgV1BBX09VSV9UWVBFLCBXUEFfU0VMRUNUT1JfTEVOKSA9PSAwKSkKLQkJCXJldHVybiBwOwotCQlwICs9IHBbMV0gKyAyOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEb3dubG9hZCBmdW5jdGlvbmFsaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBmd19pbmZvIHsKLQljaGFyICpwcmlfZnc7Ci0JY2hhciAqc3RhX2Z3OwotCWNoYXIgKmFwX2Z3OwotCXUzMiBwZGFfYWRkcjsKLQl1MTYgcGRhX3NpemU7Ci19OwotCi1jb25zdCBzdGF0aWMgc3RydWN0IGZ3X2luZm8gb3Jpbm9jb19md1tdID0gewotCXsgTlVMTCwgImFnZXJlX3N0YV9mdy5iaW4iLCAiYWdlcmVfYXBfZncuYmluIiwgMHgwMDM5MDAwMCwgMTAwMCB9LAotCXsgTlVMTCwgInByaXNtX3N0YV9mdy5iaW4iLCAicHJpc21fYXBfZncuYmluIiwgMCwgMTAyNCB9LAotCXsgInN5bWJvbF9zcDI0dF9wcmltX2Z3IiwgInN5bWJvbF9zcDI0dF9zZWNfZnciLCBOVUxMLCAweDAwMDAzMTAwLCA1MTIgfQotfTsKLQotLyogU3RydWN0dXJlIHVzZWQgdG8gYWNjZXNzIGZpZWxkcyBpbiBGVwotICogTWFrZSBzdXJlIExFIGRlY29kaW5nIG1hY3JvcyBhcmUgdXNlZAotICovCi1zdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgewotCWNoYXIgaGRyX3ZlcnNbNl07ICAgICAgIC8qIEFTQ0lJIHN0cmluZyBmb3IgaGVhZGVyIHZlcnNpb24gKi8KLQlfX2xlMTYgaGVhZGVyc2l6ZTsgICAgICAvKiBUb3RhbCBsZW5ndGggb2YgaGVhZGVyICovCi0JX19sZTMyIGVudHJ5X3BvaW50OyAgICAgLyogTklDIGVudHJ5IHBvaW50ICovCi0JX19sZTMyIGJsb2NrczsgICAgICAgICAgLyogTnVtYmVyIG9mIGJsb2NrcyB0byBwcm9ncmFtICovCi0JX19sZTMyIGJsb2NrX29mZnNldDsgICAgLyogT2Zmc2V0IG9mIGJsb2NrIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCi0JX19sZTMyIHBkcl9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIFBEUiBkYXRhIGZyb20gZW9mIGhlYWRlciAqLwotCV9fbGUzMiBwcmlfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBwcmltYXJ5IHBsdWcgZGF0YSAqLwotCV9fbGUzMiBjb21wYXRfb2Zmc2V0OyAgIC8qIE9mZnNldCB0byBjb21wYXRpYmlsaXR5IGRhdGEqLwotCWNoYXIgc2lnbmF0dXJlWzBdOyAgICAgIC8qIEZXIHNpZ25hdHVyZSBsZW5ndGggaGVhZGVyc2l6ZS0yMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIERvd25sb2FkIGVpdGhlciBTVEEgb3IgQVAgZmlybXdhcmUgaW50byB0aGUgY2FyZC4gKi8KLXN0YXRpYyBpbnQKLW9yaW5vY29fZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJICAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKLQkJICAgIGludCBhcCkKLXsKLQkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLwotCV9fbGUxNiAqcGRhOwotCi0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7Ci0JY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZW5kOwotCWNvbnN0IGNoYXIgKmZpcm13YXJlOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCWludCBlcnIgPSAwOwotCi0JcGRhID0ga3phbGxvYyhmdy0+cGRhX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghcGRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChhcCkKLQkJZmlybXdhcmUgPSBmdy0+YXBfZnc7Ci0JZWxzZQotCQlmaXJtd2FyZSA9IGZ3LT5zdGFfZnc7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZmlybXdhcmUgJXNcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOwotCi0JLyogUmVhZCBjdXJyZW50IHBsdWcgZGF0YSAqLwotCWVyciA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWFkIFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZTsKLQotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KSB7Ci0JCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmaXJtd2FyZSwgcHJpdi0+ZGV2KTsKLQotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZSAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKLQkJCWVyciA9IC1FTk9FTlQ7Ci0JCQlnb3RvIGZyZWU7Ci0JCX0KLQl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfZnc7Ci0KLQloZHIgPSAoY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICopIGZ3X2VudHJ5LT5kYXRhOwotCi0JLyogRW5hYmxlIGF1eCBwb3J0IHRvIGFsbG93IHByb2dyYW1taW5nICovCi0JZXJyID0gaGVybWVzaV9wcm9ncmFtX2luaXQoaHcsIGxlMzJfdG9fY3B1KGhkci0+ZW50cnlfcG9pbnQpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gaW5pdCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIgIT0gMCkKLQkJZ290byBhYm9ydDsKLQotCS8qIFByb2dyYW0gZGF0YSAqLwotCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKLQkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKwotCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKTsKLQllbmQgPSBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplOwotCi0JZXJyID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIgIT0gMCkKLQkJZ290byBhYm9ydDsKLQotCS8qIFVwZGF0ZSBwcm9kdWN0aW9uIGRhdGEgKi8KLQlmaXJzdF9ibG9jayA9IChmd19lbnRyeS0+ZGF0YSArCi0JCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpICsKLQkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+cGRyX29mZnNldCkpOwotCi0JZXJyID0gaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGh3LCBmaXJzdF9ibG9jaywgcGRhKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIpCi0JCWdvdG8gYWJvcnQ7Ci0KLQkvKiBUZWxsIGNhcmQgd2UndmUgZmluaXNoZWQgKi8KLQllcnIgPSBoZXJtZXNpX3Byb2dyYW1fZW5kKGh3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gZW5kIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIGFib3J0OwotCi0JLyogQ2hlY2sgaWYgd2UncmUgcnVubmluZyAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaGVybWVzX3ByZXNlbnQgcmV0dXJuZWQgJWRcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3ByZXNlbnQoaHcpKTsKLQotYWJvcnQ6Ci0JLyogSWYgd2UgcmVxdWVzdGVkIHRoZSBmaXJtd2FyZSwgcmVsZWFzZSBpdC4gKi8KLQlpZiAoIXByaXYtPmNhY2hlZF9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0KLWZyZWU6Ci0Ja2ZyZWUocGRhKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBFbmQgbWFya2VycyAqLwotI2RlZmluZSBURVhUX0VORAkweDFBCQkvKiBFbmQgb2YgdGV4dCBoZWFkZXIgKi8KLQotLyoKLSAqIFByb2Nlc3MgYSBmaXJtd2FyZSBpbWFnZSAtIHN0b3AgdGhlIGNhcmQsIGxvYWQgdGhlIGZpcm13YXJlLCByZXNldAotICogdGhlIGNhcmQgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcy4gIEZvciB0aGUgc2Vjb25kYXJ5IGZpcm13YXJlIHRha2UKLSAqIGNhcmUgb2YgdGhlIFBEQSAtIHJlYWQgaXQgYW5kIHRoZW4gd3JpdGUgaXQgb24gdG9wIG9mIHRoZSBmaXJtd2FyZS4KLSAqLwotc3RhdGljIGludAotc3ltYm9sX2RsX2ltYWdlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW1hZ2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKLQkJaW50IHNlY29uZGFyeSkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IHJldCA9IDA7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqcHRyOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpcnN0X2Jsb2NrOwotCi0JLyogUGx1ZyBEYXRhIEFyZWEgKFBEQSkgKi8KLQlfX2xlMTYgKnBkYSA9IE5VTEw7Ci0KLQkvKiBCaW5hcnkgYmxvY2sgYmVnaW5zIGFmdGVyIHRoZSAweDFBIG1hcmtlciAqLwotCXB0ciA9IGltYWdlOwotCXdoaWxlICgqcHRyKysgIT0gVEVYVF9FTkQpOwotCWZpcnN0X2Jsb2NrID0gcHRyOwotCi0JLyogUmVhZCB0aGUgUERBIGZyb20gRUVQUk9NICovCi0JaWYgKHNlY29uZGFyeSkgewotCQlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGRhKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJcmV0ID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTsKLQl9Ci0KLQkvKiBTdG9wIHRoZSBmaXJtd2FyZSwgc28gdGhhdCBpdCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbiAqLwotCWlmIChwcml2LT5zdG9wX2Z3KSB7Ci0JCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZyZWU7Ci0JfQotCi0JLyogUHJvZ3JhbSB0aGUgYWRhcHRlciB3aXRoIG5ldyBmaXJtd2FyZSAqLwotCXJldCA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWU7Ci0KLQkvKiBXcml0ZSB0aGUgUERBIHRvIHRoZSBhZGFwdGVyICovCi0JaWYgKHNlY29uZGFyeSkgewotCQlzaXplX3QgbGVuID0gaGVybWVzX2Jsb2Nrc19sZW5ndGgoZmlyc3RfYmxvY2spOwotCQlwdHIgPSBmaXJzdF9ibG9jayArIGxlbjsKLQkJcmV0ID0gaGVybWVzX2FwcGx5X3BkYShodywgcHRyLCBwZGEpOwotCQlrZnJlZShwZGEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBSdW4gdGhlIGZpcm13YXJlICovCi0JaWYgKHByaXYtPnN0b3BfZncpIHsKLQkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAwKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUmVzZXQgaGVybWVzIGNoaXAgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcyAqLwotCXJldCA9IGhlcm1lc19pbml0KGh3KTsKLQotCS8qIGhlcm1lc19yZXNldCgpIHNob3VsZCByZXR1cm4gMCB3aXRoIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgKi8KLQlpZiAoc2Vjb25kYXJ5ICYmIHJldCAhPSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEFuZCB0aGlzIHNob3VsZCB3b3JrIHdpdGggYW55IGZpcm13YXJlICovCi0JaWYgKCFoZXJtZXNfcHJlc2VudChodykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIDA7Ci0KLWZyZWU6Ci0Ja2ZyZWUocGRhKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qCi0gKiBEb3dubG9hZCB0aGUgZmlybXdhcmUgaW50byB0aGUgY2FyZCwgdGhpcyBhbHNvIGRvZXMgYSBQQ01DSUEgc29mdAotICogcmVzZXQgb24gdGhlIGNhcmQsIHRvIG1ha2Ugc3VyZSBpdCdzIGluIGEgc2FuZSBzdGF0ZS4KLSAqLwotc3RhdGljIGludAotc3ltYm9sX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCSAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlpbnQgcmV0OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9wcmlfZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+cHJpX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5wcmlfZncpOwotCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCX0KLQl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfcHJpX2Z3OwotCi0JLyogTG9hZCBwcmltYXJ5IGZpcm13YXJlICovCi0JcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKLQkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDApOwotCi0JaWYgKCFwcml2LT5jYWNoZWRfcHJpX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9mdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5zdGFfZncsIHByaXYtPmRldikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnN0YV9mdyk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9mdzsKLQotCS8qIExvYWQgc2Vjb25kYXJ5IGZpcm13YXJlICovCi0JcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKLQkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDEpOwotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFNlY29uZGFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19kb3dubG9hZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWludCBlcnIgPSAwOwotCS8qIFJlbG9hZCBmaXJtd2FyZSAqLwotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJLyogY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAqLwotCQllcnIgPSBvcmlub2NvX2RsX2Zpcm13YXJlKHByaXYsCi0JCQkJCSAgJm9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0sIDApOwotCQlicmVhazsKLQotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCWVyciA9IHN5bWJvbF9kbF9maXJtd2FyZShwcml2LAotCQkJCQkgJm9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0pOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCWJyZWFrOwotCX0KLQkvKiBUT0RPOiBpZiB3ZSBmYWlsIHdlIHByb2JhYmx5IG5lZWQgdG8gcmVpbml0aWFsaXNlCi0JICogdGhlIGRyaXZlciAqLwotCi0JcmV0dXJuIGVycjsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKLXN0YXRpYyB2b2lkIG9yaW5vY29fY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGFwKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOwotCWNvbnN0IGNoYXIgKnByaV9mdzsKLQljb25zdCBjaGFyICpmdzsKLQotCXByaV9mdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0ucHJpX2Z3OwotCWlmIChhcCkKLQkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLmFwX2Z3OwotCWVsc2UKLQkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnN0YV9mdzsKLQotCWlmIChwcmlfZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBwcmlfZncsIHByaXYtPmRldikgPT0gMCkKLQkJCXByaXYtPmNhY2hlZF9wcmlfZncgPSBmd19lbnRyeTsKLQl9Ci0KLQlpZiAoZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdywgcHJpdi0+ZGV2KSA9PSAwKQotCQkJcHJpdi0+Y2FjaGVkX2Z3ID0gZndfZW50cnk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3VuY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAocHJpdi0+Y2FjaGVkX3ByaV9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfcHJpX2Z3KTsKLQlpZiAocHJpdi0+Y2FjaGVkX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9mdyk7Ci0KLQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKLQlwcml2LT5jYWNoZWRfZncgPSBOVUxMOwotfQotI2Vsc2UKLSNkZWZpbmUgb3Jpbm9jb19jYWNoZV9mdyhwcml2LCBhcCkKLSNkZWZpbmUgb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGV2aWNlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IG9yaW5vY29fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0KLQlpZiAoISBlcnIpCi0JCXByaXYtPm9wZW4gPSAxOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBXZSBtdXN0bid0IHVzZSBvcmlub2NvX2xvY2soKSBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUKLQkgICBhYmxlIHRvIGNsb3NlIHRoZSBpbnRlcmZhY2UgZXZlbiBpZiBod191bmF2YWlsYWJsZSBpcyBzZXQKLQkgICAoZS5nLiBhcyB3ZSdyZSByZWxlYXNlZCBhZnRlciBhIFBDIENhcmQgcmVtb3ZhbCkgKi8KLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXByaXYtPm9wZW4gPSAwOwotCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm9yaW5vY29fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCi0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBnZXRfd2lyZWxlc3Nfc3RhdHMoKSBjYWxsZWQgd2hpbGUgZGV2aWNlIG5vdCBwcmVzZW50XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5VTEw7IC8qIEZJWE1FOiBDYW4gd2UgZG8gYmV0dGVyIHRoYW4gdGhpcz8gKi8KLQl9Ci0KLQkvKiBJZiBidXN5LCByZXR1cm4gdGhlIG9sZCBzdGF0cy4gIFJldHVybmluZyBOVUxMIG1heSBjYXVzZQotCSAqIHRoZSBpbnRlcmZhY2UgdG8gZGlzYXBwZWFyIGZyb20gL3Byb2MvbmV0L3dpcmVsZXNzICovCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiB3c3RhdHM7Ci0KLQkvKiBXZSBjYW4ndCByZWFsbHkgd2FpdCBmb3IgdGhlIHRhbGxpZXMgaW5xdWlyeSBjb21tYW5kIHRvCi0JICogY29tcGxldGUsIHNvIHdlIGp1c3QgdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGFuZCB0cmlnZ2VyCi0JICogYSBuZXcgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgZm9yIG5leHQgdGltZSAtIEplYW4gSUkgKi8KLQkvKiBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCB3YWl0IGZvciB0aGUgaW5xdWlyeSB0byBjb21lIGJhY2sgLQotCSAqIGFzIGl0IGlzIHRoZSBzdGF0cyB3ZSBnaXZlIGRvbid0IG1ha2UgYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuCi0JICogVW5mb3J0dW5hdGVseSwgaXQncyBub3QgY2xlYXIgaG93IHRvIGRvIHRoYXQgd2l0aGluIHRoZQotCSAqIHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJhbWV3b3JrOiBJIHRoaW5rIHdlJ3JlIGluIHVzZXIKLQkgKiBjb250ZXh0LCBidXQgYSBsb2NrIHNlZW1zIHRvIGJlIGhlbGQgYnkgdGhlIHRpbWUgd2UgZ2V0IGluCi0JICogaGVyZSBzbyB3ZSdyZSBub3Qgc2FmZSB0byBzbGVlcCBoZXJlLiAqLwotCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1RBTExJRVMpOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewotCQltZW1zZXQoJndzdGF0cy0+cXVhbCwgMCwgc2l6ZW9mKHdzdGF0cy0+cXVhbCkpOwotCQkvKiBJZiBhIHNweSBhZGRyZXNzIGlzIGRlZmluZWQsIHdlIHJlcG9ydCBzdGF0cyBvZiB0aGUKLQkJICogZmlyc3Qgc3B5IGFkZHJlc3MgLSBKZWFuIElJICovCi0JCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7Ci0JCQl3c3RhdHMtPnF1YWwucXVhbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7Ci0JCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKLQkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlLCB1bnVzZWQ7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNxOwotCi0JCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSBIRVJNRVNfUklEX0NPTU1TUVVBTElUWSwgJmNxKTsKLQotCQlpZiAoIWVycikgewotCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnF1YWwpOwotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gKGludClsZTE2X3RvX2NwdShjcS5zaWduYWwpIC0gMHg5NTsKLQkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IChpbnQpbGUxNl90b19jcHUoY3Eubm9pc2UpIC0gMHg5NTsKLQkJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCQl9Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KCkgIgotCQkgICAgICAgImNhbGxlZCB3aGVuIGh3X3VuYXZhaWxhYmxlXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCAobmV3X210dSA8IE9SSU5PQ09fTUlOX01UVSkgfHwgKG5ld19tdHUgPiBPUklOT0NPX01BWF9NVFUpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBNVFUgKyBlbmNhcHN1bGF0aW9uICsgaGVhZGVyIGxlbmd0aCAqLwotCWlmICggKG5ld19tdHUgKyBFTkNBUFNfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKSA+Ci0JICAgICAocHJpdi0+bmljYnVmX3NpemUgLSBFVEhfSExFTikgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRldi0+bXR1ID0gbmV3X210dTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUeCBwYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgb3Jpbm9jb194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1MTYgdHhmaWQgPSBwcml2LT50eGZpZDsKLQlzdHJ1Y3QgZXRoaGRyICplaDsKLQlpbnQgdHhfY29udHJvbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEgbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IG9uIHN0b3BwZWQgZGV2aWNlIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0JCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHdoaWxlIHRyYW5zbWl0dGVyIGJ1c3khXG4iLCAKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0JCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb194bWl0KCkgY2FsbGVkIHdoaWxlIGh3X3VuYXZhaWxhYmxlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQotCWlmICghIG5ldGlmX2NhcnJpZXJfb2soZGV2KSB8fCAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpKSB7Ci0JCS8qIE9vcHMsIHRoZSBmaXJtd2FyZSBoYXNuJ3QgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCAodGhpcyBzZWVtcyB0byBiZSB0aGUKLSAgICAgICAgICAgICAgICAgICBzYWZlc3QgYXBwcm9hY2gpLiAqLwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwotCWlmIChza2ItPmxlbiA8IEVUSF9ITEVOKQotCQlnb3RvIGRyb3A7Ci0KLQl0eF9jb250cm9sID0gSEVSTUVTX1RYQ1RSTF9UWF9PSyB8IEhFUk1FU19UWENUUkxfVFhfRVg7Ci0KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApCi0JCXR4X2NvbnRyb2wgfD0gKHByaXYtPnR4X2tleSA8PCBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCkgfAotCQkJSEVSTUVTX1RYQ1RSTF9NSUM7Ci0KLQlpZiAocHJpdi0+aGFzX2FsdF90eGNudGwpIHsKLQkJLyogV1BBIGVuYWJsZWQgZmlybXdhcmVzIGhhdmUgdHhfY250bCBhdCB0aGUgZW5kIG9mCi0JCSAqIHRoZSA4MDIuMTEgaGVhZGVyLiAgU28gd3JpdGUgemVyb2VkIGRlc2NyaXB0b3IgYW5kCi0JCSAqIDgwMi4xMSBoZWFkZXIgYXQgdGhlIHNhbWUgdGltZQotCQkgKi8KLQkJY2hhciBkZXNjW0hFUk1FU184MDJfM19PRkZTRVRdOwotCQlfX2xlMTYgKnR4Y250bCA9IChfX2xlMTYgKikgJmRlc2NbSEVSTUVTX1RYQ05UTDJfT0ZGU0VUXTsKLQotCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Ci0KLQkJKnR4Y250bCA9IGNwdV90b19sZTE2KHR4X2NvbnRyb2wpOwotCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZkZXNjLCBzaXplb2YoZGVzYyksCi0JCQkJCXR4ZmlkLCAwKTsKLQkJaWYgKGVycikgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIFR4ICIKLQkJCQkgICAgICAgImRlc2NyaXB0b3IgdG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGJ1c3k7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3IgZGVzYzsKLQotCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Ci0KLQkJZGVzYy50eF9jb250cm9sID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7Ci0JCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKLQkJCQkJdHhmaWQsIDApOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgotCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gYnVzeTsKLQkJfQotCi0JCS8qIENsZWFyIHRoZSA4MDIuMTEgaGVhZGVyIGFuZCBkYXRhIGxlbmd0aCBmaWVsZHMgLSBzb21lCi0JCSAqIGZpcm13YXJlcyAoZS5nLiBMdWNlbnQvQWdlcmUgOC54eCkgYXBwZWFyIHRvIGdldCBjb25mdXNlZAotCQkgKiBpZiB0aGlzIGlzbid0IGRvbmUuICovCi0JCWhlcm1lc19jbGVhcl93b3JkcyhodywgSEVSTUVTX0RBVEEwLAotCQkJCSAgIEhFUk1FU184MDJfM19PRkZTRVQgLSBIRVJNRVNfODAyXzExX09GRlNFVCk7Ci0JfQotCi0JZWggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKLQotCS8qIEVuY2Fwc3VsYXRlIEV0aGVybmV0LUlJIGZyYW1lcyAqLwotCWlmIChudG9ocyhlaC0+aF9wcm90bykgPiBFVEhfREFUQV9MRU4pIHsgLyogRXRoZXJuZXQtSUkgZnJhbWUgKi8KLQkJc3RydWN0IGhlYWRlcl9zdHJ1Y3QgewotCQkJc3RydWN0IGV0aGhkciBldGg7CS8qIDgwMi4zIGhlYWRlciAqLwotCQkJdTggZW5jYXBbNl07CQkvKiA4MDIuMiBoZWFkZXIgKi8KLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGRyOwotCi0JCS8qIFN0cmlwIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgZnJvbSB0aGUgZGF0YSAqLwotCQlza2JfcHVsbChza2IsIDIgKiBFVEhfQUxFTik7Ci0KLQkJLyogQW5kIG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGhlYWRlciAqLwotCQltZW1jcHkoJmhkci5ldGgsIGVoLCAyICogRVRIX0FMRU4pOwotCQloZHIuZXRoLmhfcHJvdG8gPSBodG9ucyhzaXplb2YoZW5jYXBzX2hkcikgKyBza2ItPmxlbik7Ci0JCW1lbWNweShoZHIuZW5jYXAsIGVuY2Fwc19oZHIsIHNpemVvZihlbmNhcHNfaGRyKSk7Ci0KLQkJLyogSW5zZXJ0IHRoZSBTTkFQIGhlYWRlciAqLwotCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBzaXplb2YoaGRyKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBOb3QgZW5vdWdoIGhlYWRyb29tIGZvciA4MDIuMiBoZWFkZXJzICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgc2tiX2hlYWRyb29tKHNrYikpOwotCQkJZ290byBkcm9wOwotCQl9Ci0JCWVoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoaGRyKSk7Ci0JCW1lbWNweShlaCwgJmhkciwgc2l6ZW9mKGhkcikpOwotCX0KLQotCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCQl0eGZpZCwgSEVSTUVTXzgwMl8zX09GRlNFVCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIHBhY2tldCB0byBCQVBcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gYnVzeTsKLQl9Ci0KLQkvKiBDYWxjdWxhdGUgTWljaGFlbCBNSUMgKi8KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHsKLQkJdTggbWljX2J1ZltNSUNIQUVMX01JQ19MRU4gKyAxXTsKLQkJdTggKm1pYzsKLQkJc2l6ZV90IG9mZnNldDsKLQkJc2l6ZV90IGxlbjsKLQotCQlpZiAoc2tiLT5sZW4gJSAyKSB7Ci0JCQkvKiBNSUMgc3RhcnQgaXMgb24gYW4gb2RkIGJvdW5kYXJ5ICovCi0JCQltaWNfYnVmWzBdID0gc2tiLT5kYXRhW3NrYi0+bGVuIC0gMV07Ci0JCQltaWMgPSAmbWljX2J1ZlsxXTsKLQkJCW9mZnNldCA9IHNrYi0+bGVuIC0gMTsKLQkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTiArIDE7Ci0JCX0gZWxzZSB7Ci0JCQltaWMgPSAmbWljX2J1ZlswXTsKLQkJCW9mZnNldCA9IHNrYi0+bGVuOwotCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOOwotCQl9Ci0KLQkJbWljaGFlbF9taWMocHJpdi0+dHhfdGZtX21pYywKLQkJCSAgICBwcml2LT50a2lwX2tleVtwcml2LT50eF9rZXldLnR4X21pYywKLQkJCSAgICBlaC0+aF9kZXN0LCBlaC0+aF9zb3VyY2UsIDAgLyogcHJpb3JpdHkgKi8sCi0JCQkgICAgc2tiLT5kYXRhICsgRVRIX0hMRU4sIHNrYi0+bGVuIC0gRVRIX0hMRU4sIG1pYyk7Ci0KLQkJLyogV3JpdGUgdGhlIE1JQyAqLwotCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZtaWNfYnVmWzBdLCBsZW4sCi0JCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUICsgb2Zmc2V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBNSUMgdG8gQkFQXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gYnVzeTsKLQkJfQotCX0KLQotCS8qIEZpbmFsbHksIHdlIGFjdHVhbGx5IGluaXRpYXRlIHRoZSBzZW5kICovCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVFggfCBIRVJNRVNfQ01EX1JFQ0wsCi0JCQkJdHhmaWQsIE5VTEwpOwotCWlmIChlcnIpIHsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHRyYW5zbWl0dGluZyBwYWNrZXRcbiIsCi0JCQkJZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGJ1c3k7Ci0JfQotCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IEhFUk1FU184MDJfM19PRkZTRVQgKyBza2ItPmxlbjsKLQlnb3RvIG9rOwotCi0gZHJvcDoKLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0Jc3RhdHMtPnR4X2Ryb3BwZWQrKzsKLQotIG9rOgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiBORVRERVZfVFhfT0s7Ci0KLSBidXN5OgotCWlmIChlcnIgPT0gLUVJTykKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKTsKLQotCWlmIChmaWQgIT0gcHJpdi0+dHhmaWQpIHsKLQkJaWYgKGZpZCAhPSBEVU1NWV9GSUQpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQWxsb2NhdGUgZXZlbnQgb24gdW5leHBlY3RlZCBmaWQgKCUwNFgpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZmlkKTsKLQkJcmV0dXJuOwotCX0KLQotCWhlcm1lc193cml0ZV9yZWduKGh3LCBBTExPQ0ZJRCwgRFVNTVlfRklEKTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0KLQlzdGF0cy0+dHhfcGFja2V0cysrOwotCi0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCi0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eGV4YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKTsKLQl1MTYgc3RhdHVzOwotCXN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSBoZHI7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoZmlkID09IERVTU1ZX0ZJRCkKLQkJcmV0dXJuOyAvKiBOb3RoaW5nJ3MgcmVhbGx5IGhhcHBlbmVkICovCi0KLQkvKiBSZWFkIHBhcnQgb2YgdGhlIGZyYW1lIGhlYWRlciAtIHdlIG5lZWQgc3RhdHVzIGFuZCBhZGRyMSAqLwotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZoZHIsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSksCi0JCQkgICAgICAgZmlkLCAwKTsKLQotCWhlcm1lc193cml0ZV9yZWduKGh3LCBUWENPTVBMRklELCBEVU1NWV9GSUQpOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWFkIGRlc2NyaXB0b3Igb24gVHggZXJyb3IgIgotCQkgICAgICAgIihGSUQ9JTA0WCBlcnJvciAlZClcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGZpZCwgZXJyKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlERUJVRygxLCAiJXM6IFR4IGVycm9yLCBlcnIgJWQgKEZJRD0lMDRYKVxuIiwgZGV2LT5uYW1lLAotCSAgICAgIGVyciwgZmlkKTsKLSAgICAKLQkvKiBXZSBwcm9kdWNlIGEgVFhEUk9QIGV2ZW50IG9ubHkgZm9yIHJldHJ5IG9yIGxpZmV0aW1lCi0JICogZXhjZWVkZWQsIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHN0YXR1cyB0aGF0IHJlYWxseSBtZWFuCi0JICogdGhhdCB0aGlzIHBhcnRpY3VsYXIgbm9kZSB3ZW50IGF3YXkuCi0JICogT3RoZXIgZXJyb3JzIG1lYW5zIHRoYXQgKndlKiBzY3Jld2VkIHVwLiAtIEplYW4gSUkgKi8KLQlzdGF0dXMgPSBsZTE2X3RvX2NwdShoZHIuZGVzYy5zdGF0dXMpOwotCWlmIChzdGF0dXMgJiAoSEVSTUVTX1RYU1RBVF9SRVRSWUVSUiB8IEhFUk1FU19UWFNUQVRfQUdFREVSUikpIHsKLQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCi0JCS8qIENvcHkgODAyLjExIGRlc3QgYWRkcmVzcy4KLQkJICogV2UgdXNlIHRoZSA4MDIuMTEgaGVhZGVyIGJlY2F1c2UgdGhlIGZyYW1lIG1heQotCQkgKiBub3QgYmUgODAyLjMgb3IgbWF5IGJlIG1hbmdsZWQuLi4KLQkJICogSW4gQWQtSG9jIG1vZGUsIGl0IHdpbGwgYmUgdGhlIG5vZGUgYWRkcmVzcy4KLQkJICogSW4gbWFuYWdlZCBtb2RlLCBpdCB3aWxsIGJlIG1vc3QgbGlrZWx5IHRoZSBBUCBhZGRyCi0JCSAqIFVzZXIgc3BhY2Ugd2lsbCBmaWd1cmUgb3V0IGhvdyB0byBjb252ZXJ0IGl0IHRvCi0JCSAqIHdoYXRldmVyIGl0IG5lZWRzIChJUCBhZGRyZXNzIG9yIGVsc2UpLgotCQkgKiAtIEplYW4gSUkgKi8KLQkJbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBoZHIuYWRkcjEsIEVUSF9BTEVOKTsKLQkJd3JxdS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQotCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZUWERST1AsICZ3cnF1LCBOVUxMKTsKLQl9Ci0KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUeCB0aW1lb3V0ISAiCi0JICAgICAgICJBTExPQ0ZJRD0lMDR4LCBUWENPTVBMRklEPSUwNHgsIEVWU1RBVD0lMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKSwKLQkgICAgICAgaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCksIGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCkpOwotCi0Jc3RhdHMtPnR4X2Vycm9ycysrOwotCi0Jc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJ4IHBhdGggKGRhdGEgZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRG9lcyB0aGUgZnJhbWUgaGF2ZSBhIFNOQVAgaGVhZGVyIGluZGljYXRpbmcgaXQgc2hvdWxkIGJlCi0gKiBkZS1lbmNhcHN1bGF0ZWQgdG8gRXRoZXJuZXQtSUk/ICovCi1zdGF0aWMgaW5saW5lIGludCBpc19ldGhlcnNuYXAodm9pZCAqX2hkcikKLXsKLQl1OCAqaGRyID0gX2hkcjsKLQotCS8qIFdlIGRlLWVuY2Fwc3VsYXRlIGFsbCBwYWNrZXRzIHdoaWNoLCBhKSBoYXZlIFNOQVAgaGVhZGVycwotCSAqIChpLmUuIFNTQVA9RFNBUD0weGFhIGFuZCBDVFJMPTB4MyBpbiB0aGUgODAyLjIgTExDIGhlYWRlcgotCSAqIGFuZCB3aGVyZSBiKSB0aGUgT1VJIG9mIHRoZSBTTkFQIGhlYWRlciBpcyAwMDowMDowMCBvcgotCSAqIDAwOjAwOmY4IC0gd2UgbmVlZCBib3RoIGJlY2F1c2UgZGlmZmVyZW50IEFQcyBhcHBlYXIgdG8gdXNlCi0JICogZGlmZmVyZW50IE9VSXMgZm9yIHNvbWUgcmVhc29uICovCi0JcmV0dXJuIChtZW1jbXAoaGRyLCAmZW5jYXBzX2hkciwgNSkgPT0gMCkKLQkJJiYgKCAoaGRyWzVdID09IDB4MDApIHx8IChoZHJbNV0gPT0gMHhmOCkgKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgKm1hYywKLQkJCQkgICAgICBpbnQgbGV2ZWwsIGludCBub2lzZSkKLXsKLQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7Ci0Jd3N0YXRzLmxldmVsID0gbGV2ZWwgLSAweDk1OwotCXdzdGF0cy5ub2lzZSA9IG5vaXNlIC0gMHg5NTsKLQl3c3RhdHMucXVhbCA9IChsZXZlbCA+IG5vaXNlKSA/IChsZXZlbCAtIG5vaXNlKSA6IDA7Ci0Jd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07Ci0JLyogVXBkYXRlIHNweSByZWNvcmRzICovCi0Jd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIG1hYywgJndzdGF0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc3RhdF9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIFVzaW5nIHNweSBzdXBwb3J0IHdpdGggbG90cyBvZiBSeCBwYWNrZXRzLCBsaWtlIGluIGFuCi0JICogaW5mcmFzdHJ1Y3R1cmUgKEFQKSwgd2lsbCByZWFsbHkgc2xvdyBkb3duIGV2ZXJ5dGhpbmcsIGJlY2F1c2UKLQkgKiB0aGUgTUFDIGFkZHJlc3MgbXVzdCBiZSBjb21wYXJlZCB0byBlYWNoIGVudHJ5IG9mIHRoZSBzcHkgbGlzdC4KLQkgKiBJZiB0aGUgdXNlciByZWFsbHkgYXNrcyBmb3IgaXQgKHNldCBzb21lIGFkZHJlc3MgaW4gdGhlCi0JICogc3B5IGxpc3QpLCB3ZSBkbyBpdCwgYnV0IGhlIHdpbGwgcGF5IHRoZSBwcmljZS4KLQkgKiBOb3RlIHRoYXQgdG8gZ2V0IGhlcmUsIHlvdSBuZWVkIGJvdGggV0lSRUxFU1NfU1BZCi0JICogY29tcGlsZWQgaW4gQU5EIHNvbWUgYWRkcmVzc2VzIGluIHRoZSBsaXN0ICEhIQotCSAqLwotCS8qIE5vdGUgOiBnY2Mgd2lsbCBvcHRpbWlzZSB0aGUgd2hvbGUgc2VjdGlvbiBhd2F5IGlmCi0JICogV0lSRUxFU1NfU1BZIGlzIG5vdCBkZWZpbmVkLi4uIC0gSmVhbiBJSSAqLwotCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7Ci0JCW9yaW5vY29fc3B5X2dhdGhlcihkZXYsIHNrYl9tYWNfaGVhZGVyKHNrYikgKyBFVEhfQUxFTiwKLQkJCQkgICBkZXNjLT5zaWduYWwsIGRlc2MtPnNpbGVuY2UpOwotCX0KLX0KLQotLyoKLSAqIG9yaW5vY29fcnhfbW9uaXRvciAtIGhhbmRsZSByZWNlaXZlZCBtb25pdG9yIGZyYW1lcy4KLSAqCi0gKiBBcmd1bWVudHM6Ci0gKglkZXYJCW5ldHdvcmsgZGV2aWNlCi0gKglyeGZpZAkJcmVjZWl2ZWQgRklECi0gKglkZXNjCQlyeCBkZXNjcmlwdG9yIG9mIHRoZSBmcmFtZQotICoKLSAqIENhbGwgY29udGV4dDogaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fcnhfbW9uaXRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcnhmaWQsCi0JCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQotewotCXUzMiBoZHJsZW4gPSAzMDsJLyogcmV0dXJuIGZ1bGwgaGVhZGVyIGJ5IGRlZmF1bHQgKi8KLQl1MzIgZGF0YWxlbiA9IDA7Ci0JdTE2IGZjOwotCWludCBlcnI7Ci0JaW50IGxlbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0KLQlsZW4gPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7Ci0KLQkvKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGRhdGEgKi8KLQlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7Ci0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCi0JCSAgICAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQotCQkJaGRybGVuID0gMzA7Ci0JCWVsc2UKLQkJCWhkcmxlbiA9IDI0OwotCQlkYXRhbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgotCQloZHJsZW4gPSAyNDsKLQkJZGF0YWxlbiA9IGxlbjsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SVFM6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSzoKLQkJCWhkcmxlbiA9IDE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gMTA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBVbmtub3duIGZyYW1lIHR5cGUgKi8KLQkJYnJlYWs7Ci0JfQotCi0JLyogc2FuaXR5IGNoZWNrIHRoZSBsZW5ndGggKi8KLQlpZiAoZGF0YWxlbiA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKyAxMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG92ZXJzaXplZCBtb25pdG9yIGZyYW1lLCAiCi0JCSAgICAgICAiZGF0YSBsZW5ndGggPSAlZFxuIiwgZGV2LT5uYW1lLCBkYXRhbGVuKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihoZHJsZW4gKyBkYXRhbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBmb3IgbW9uaXRvciBmcmFtZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIENvcHkgdGhlIDgwMi4xMSBoZWFkZXIgdG8gdGhlIHNrYiAqLwotCW1lbWNweShza2JfcHV0KHNrYiwgaGRybGVuKSwgJihkZXNjLT5mcmFtZV9jdGwpLCBoZHJsZW4pOwotCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0KLQkvKiBJZiBhbnksIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgc2tiICovCi0JaWYgKGRhdGFsZW4gPiAwKSB7Ci0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBkYXRhbGVuKSwKLQkJCQkgICAgICAgQUxJR04oZGF0YWxlbiwgMiksIHJ4ZmlkLAotCQkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBtb25pdG9yIGZyYW1lXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gZHJvcDsKLQkJfQotCX0KLQotCXNrYi0+ZGV2ID0gZGV2OwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7Ci0JCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQluZXRpZl9yeChza2IpOwotCXJldHVybjsKLQotIGRyb3A6Ci0JZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSB1cGRhdGVfc3RhdHM6Ci0Jc3RhdHMtPnJ4X2Vycm9ycysrOwotCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci19Ci0KLS8qIEdldCB0c2MgZnJvbSB0aGUgZmlybXdhcmUgKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LAotCQkJCSAgdTggKnRzYykKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTggdHNjX2Fycls0XVtJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKLQotCWlmICgoa2V5IDwgMCkgfHwgKGtleSA+IDQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9US0lQX0lWLAotCQkJICAgICAgc2l6ZW9mKHRzY19hcnIpLCBOVUxMLCAmdHNjX2Fycik7Ci0JaWYgKCFlcnIpCi0JCW1lbWNweSh0c2MsICZ0c2NfYXJyW2tleV1bMF0sIHNpemVvZih0c2NfYXJyWzBdKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQl1MTYgcnhmaWQsIHN0YXR1czsKLQlpbnQgbGVuZ3RoOwotCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhOwotCWludCBlcnI7Ci0KLQlkZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWRlc2MpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgUlggZGVzY3JpcHRvclxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCXJ4ZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgUlhGSUQpOwotCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgZGVzYywgc2l6ZW9mKCpkZXNjKSwKLQkJCSAgICAgICByeGZpZCwgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIFJ4IGRlc2NyaXB0b3IuICIKLQkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOwotCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfQkFEQ1JDKSB7Ci0JCURFQlVHKDEsICIlczogQmFkIENSQyBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCi0JCSAgICAgIGRldi0+bmFtZSk7Ci0JCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIEhhbmRsZSBmcmFtZXMgaW4gbW9uaXRvciBtb2RlICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCW9yaW5vY29fcnhfbW9uaXRvcihkZXYsIHJ4ZmlkLCBkZXNjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfVU5ERUNSWVBUQUJMRSkgewotCQlERUJVRygxLCAiJXM6IFVuZGVjcnlwdGFibGUgZnJhbWUgb24gUnguIEZyYW1lIGRyb3BwZWQuXG4iLAotCQkgICAgICBkZXYtPm5hbWUpOwotCQl3c3RhdHMtPmRpc2NhcmQuY29kZSsrOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7Ci0KLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKGxlbmd0aCA8IDMpIHsgLyogTm8gZm9yIGV2ZW4gYW4gODAyLjIgTExDIGhlYWRlciAqLwotCQkvKiBBdCBsZWFzdCBvbiBTeW1ib2wgZmlybXdhcmUgd2l0aCBQQ0Ygd2UgZ2V0IHF1aXRlIGEKLSAgICAgICAgICAgICAgICAgICBsb3Qgb2YgdGhlc2UgbGVnaXRpbWF0ZWx5IC0gUG9sbCBmcmFtZXMgd2l0aCBubwotICAgICAgICAgICAgICAgICAgIGRhdGEuICovCi0JCWdvdG8gb3V0OwotCX0KLQlpZiAobGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIGZyYW1lIHJlY2VpdmVkICglZCBieXRlcylcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGxlbmd0aCk7Ci0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIFBheWxvYWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIE1pY2hhZWwgTUlDLiBJbmNyZWFzZSBwYXlsb2FkCi0JICogc2l6ZSB0byByZWFkIGl0IHRvZ2V0aGVyIHdpdGggdGhlIGRhdGEuICovCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDKQotCQlsZW5ndGggKz0gTUlDSEFFTF9NSUNfTEVOOwotCi0JLyogV2UgbmVlZCBzcGFjZSBmb3IgdGhlIHBhY2tldCBkYXRhIGl0c2VsZiwgcGx1cyBhbiBldGhlcm5ldAotCSAgIGhlYWRlciwgcGx1cyAyIGJ5dGVzIHNvIHdlIGNhbiBhbGlnbiB0aGUgSVAgaGVhZGVyIG9uIGEKLQkgICAzMmJpdCBib3VuZGFyeSwgcGx1cyAxIGJ5dGUgc28gd2UgY2FuIHJlYWQgaW4gb2RkIGxlbmd0aAotCSAgIHBhY2tldHMgZnJvbSB0aGUgY2FyZCwgd2hpY2ggaGFzIGFuIElPIGdyYW51bGFyaXR5IG9mIDE2Ci0JICAgYml0cyAqLyAgCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgrRVRIX0hMRU4rMisxKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgc2tiIGZvciBSeFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIFdlJ2xsIHByZXBlbmQgdGhlIGhlYWRlciwgc28gcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuICBUaGUgd29yc3QKLQkgICBjYXNlIGlzIG5vIGRlY2Fwc3VsYXRpb24sIHdoZW4gODAyLjMgaGVhZGVyIGlzIHByZXBlbmRlZCBhbmQKLQkgICBub3RoaW5nIGlzIHJlbW92ZWQuICAyIGlzIGZvciBhbGlnbmluZyB0aGUgSVAgaGVhZGVyLiAgKi8KLQlza2JfcmVzZXJ2ZShza2IsIEVUSF9ITEVOICsgMik7Ci0KLQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgbGVuZ3RoKSwKLQkJCSAgICAgICBBTElHTihsZW5ndGgsIDIpLCByeGZpZCwKLQkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgZnJhbWUuICIKLQkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JLyogQWRkIGRlc2MgYW5kIHNrYiB0byByeCBxdWV1ZSAqLwotCXJ4X2RhdGEgPSBremFsbG9jKHNpemVvZigqcnhfZGF0YSksIEdGUF9BVE9NSUMpOwotCWlmICghcnhfZGF0YSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgUlggcGFja2V0XG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJZ290byBkcm9wOwotCX0KLQlyeF9kYXRhLT5kZXNjID0gZGVzYzsKLQlyeF9kYXRhLT5za2IgPSBza2I7Ci0JbGlzdF9hZGRfdGFpbCgmcnhfZGF0YS0+bGlzdCwgJnByaXYtPnJ4X2xpc3QpOwotCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCi0JcmV0dXJuOwotCi1kcm9wOgotCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci11cGRhdGVfc3RhdHM6Ci0Jc3RhdHMtPnJ4X2Vycm9ycysrOwotCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci1vdXQ6Ci0Ja2ZyZWUoZGVzYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYywKLQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXUxNiBzdGF0dXMsIGZjOwotCWludCBsZW5ndGg7Ci0Jc3RydWN0IGV0aGhkciAqaGRyOwotCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoZGVzYy0+c3RhdHVzKTsKLQlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7Ci0JZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOwotCi0JLyogQ2FsY3VsYXRlIGFuZCBjaGVjayBNSUMgKi8KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpIHsKLQkJaW50IGtleV9pZCA9ICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUNfS0VZX0lEKSA+PgotCQkJICAgICAgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpOwotCQl1OCBtaWNbTUlDSEFFTF9NSUNfTEVOXTsKLQkJdTggKnJ4bWljOwotCQl1OCAqc3JjID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSA/Ci0JCQlkZXNjLT5hZGRyMyA6IGRlc2MtPmFkZHIyOwotCi0JCS8qIEV4dHJhY3QgTWljaGFlbCBNSUMgZnJvbSBwYXlsb2FkICovCi0JCXJ4bWljID0gc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU47Ci0KLQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTik7Ci0JCWxlbmd0aCAtPSBNSUNIQUVMX01JQ19MRU47Ci0KLQkJbWljaGFlbF9taWMocHJpdi0+cnhfdGZtX21pYywKLQkJCSAgICBwcml2LT50a2lwX2tleVtrZXlfaWRdLnJ4X21pYywKLQkJCSAgICBkZXNjLT5hZGRyMSwKLQkJCSAgICBzcmMsCi0JCQkgICAgMCwgLyogcHJpb3JpdHkgb3IgUW9TPyAqLwotCQkJICAgIHNrYi0+ZGF0YSwKLQkJCSAgICBza2ItPmxlbiwKLQkJCSAgICAmbWljWzBdKTsKLQotCQlpZiAobWVtY21wKG1pYywgcnhtaWMsCi0JCQkgICBNSUNIQUVMX01JQ19MRU4pKSB7Ci0JCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JCQlzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUgd3htaWM7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCi0JCQkgICAgICAgIkludmFsaWQgTWljaGFlbCBNSUMgaW4gZGF0YSBmcmFtZSBmcm9tICVwTSwgIgotCQkJICAgICAgICJ1c2luZyBrZXkgJWlcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBzcmMsIGtleV9pZCk7Ci0KLQkJCS8qIFRPRE86IHVwZGF0ZSBzdGF0cyAqLwotCi0JCQkvKiBOb3RpZnkgdXNlcnNwYWNlICovCi0JCQltZW1zZXQoJnd4bWljLCAwLCBzaXplb2Yod3htaWMpKTsKLQkJCXd4bWljLmZsYWdzID0ga2V5X2lkICYgSVdfTUlDRkFJTFVSRV9LRVlfSUQ7Ci0JCQl3eG1pYy5mbGFncyB8PSAoZGVzYy0+YWRkcjFbMF0gJiAxKSA/Ci0JCQkJSVdfTUlDRkFJTFVSRV9HUk9VUCA6IElXX01JQ0ZBSUxVUkVfUEFJUldJU0U7Ci0JCQl3eG1pYy5zcmNfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQltZW1jcHkod3htaWMuc3JjX2FkZHIuc2FfZGF0YSwgc3JjLCBFVEhfQUxFTik7Ci0KLQkJCSh2b2lkKSBvcmlub2NvX2h3X2dldF90a2lwX2l2KHByaXYsIGtleV9pZCwKLQkJCQkJCSAgICAgICZ3eG1pYy50c2NbMF0pOwotCi0JCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JCQl3cnF1LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHd4bWljKTsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUsICZ3cnF1LAotCQkJCQkgICAgKGNoYXIgKikgJnd4bWljKTsKLQotCQkJZ290byBkcm9wOwotCQl9Ci0JfQotCi0JLyogSGFuZGxlIGRlY2Fwc3VsYXRpb24KLQkgKiBJbiBtb3N0IGNhc2VzLCB0aGUgZmlybXdhcmUgdGVsbCB1cyBhYm91dCBTTkFQIGZyYW1lcy4KLQkgKiBGb3Igc29tZSByZWFzb24sIHRoZSBTTkFQIGZyYW1lcyBzZW50IGJ5IExpbmtTeXMgQVBzCi0JICogYXJlIG5vdCBwcm9wZXJseSByZWNvZ25pc2VkIGJ5IG1vc3QgZmlybXdhcmVzLgotCSAqIFNvLCBjaGVjayBvdXJzZWx2ZXMgKi8KLQlpZiAobGVuZ3RoID49IEVOQ0FQU19PVkVSSEVBRCAmJgotCSAgICAoKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfMTA0MikgfHwKLQkgICAgICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NU0dUWVBFKSA9PSBIRVJNRVNfUlhTVEFUX1RVTk5FTCkgfHwKLQkgICAgIGlzX2V0aGVyc25hcChza2ItPmRhdGEpKSkgewotCQkvKiBUaGVzZSBpbmRpY2F0ZSBhIFNOQVAgd2l0aGluIDgwMi4yIExMQyB3aXRoaW4KLQkJICAgODAyLjExIGZyYW1lIHdoaWNoIHdlJ2xsIG5lZWQgdG8gZGUtZW5jYXBzdWxhdGUgdG8KLQkJICAgdGhlIG9yaWdpbmFsIEV0aGVybmV0SUkgZnJhbWUuICovCi0JCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBFVEhfSExFTiAtIEVOQ0FQU19PVkVSSEVBRCk7Ci0JfSBlbHNlIHsKLQkJLyogODAyLjMgZnJhbWUgLSBwcmVwZW5kIDgwMi4zIGhlYWRlciBhcyBpcyAqLwotCQloZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwotCQloZHItPmhfcHJvdG8gPSBodG9ucyhsZW5ndGgpOwotCX0KLQltZW1jcHkoaGRyLT5oX2Rlc3QsIGRlc2MtPmFkZHIxLCBFVEhfQUxFTik7Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKQotCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjMsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMiwgRVRIX0FMRU4pOwotCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKLQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCi0JLyogUHJvY2VzcyB0aGUgd2lyZWxlc3Mgc3RhdHMgaWYgbmVlZGVkICovCi0Jb3Jpbm9jb19zdGF0X2dhdGhlcihkZXYsIHNrYiwgZGVzYyk7Ci0KLQkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgKi8KLQluZXRpZl9yeChza2IpOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKLQotCXJldHVybjsKLQotIGRyb3A6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3J4X2lzcl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7Ci0Jc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIG9yaW5vY29fcnggcmVxdWlyZXMgdGhlIGRyaXZlciBsb2NrLCBhbmQgd2UgYWxzbyBuZWVkIHRvCi0JICogcHJvdGVjdCBwcml2LT5yeF9saXN0LCBzbyBqdXN0IGhvbGQgdGhlIGxvY2sgb3ZlciB0aGUKLQkgKiBsb3QuCi0JICoKLQkgKiBJZiBvcmlub2NvX2xvY2sgZmFpbHMsIHdlJ3ZlIHVucGx1Z2dlZCB0aGUgY2FyZC4gSW4gdGhpcwotCSAqIGNhc2UganVzdCBhYm9ydC4gKi8KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuOwotCi0JLyogZXh0cmFjdCBkZXNjIGFuZCBza2IgZnJvbSBxdWV1ZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgewotCQlkZXNjID0gcnhfZGF0YS0+ZGVzYzsKLQkJc2tiID0gcnhfZGF0YS0+c2tiOwotCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7Ci0JCWtmcmVlKHJ4X2RhdGEpOwotCi0JCW9yaW5vY29fcngoZGV2LCBkZXNjLCBza2IpOwotCi0JCWtmcmVlKGRlc2MpOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJ4IHBhdGggKGluZm8gZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgcHJpbnRfbGlua3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgc3RhdHVzKQotewotCWNoYXIgKiBzOwotCi0JaWYgKHN1cHByZXNzX2xpbmtzdGF0dXMpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEOgotCQlzID0gIk5vdCBDb25uZWN0ZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRDoKLQkJcyA9ICJDb25uZWN0ZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0RJU0NPTk5FQ1RFRDoKLQkJcyA9ICJEaXNjb25uZWN0ZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRToKLQkJcyA9ICJBUCBDaGFuZ2VkIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0U6Ci0JCXMgPSAiQVAgT3V0IG9mIFJhbmdlIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRToKLQkJcyA9ICJBUCBJbiBSYW5nZSI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVNTT0NfRkFJTEVEOgotCQlzID0gIkFzc29jaWF0aW9uIEZhaWxlZCI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXMgPSAiVU5LTk9XTiI7Ci0JfQotCQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTmV3IGxpbmsgc3RhdHVzOiAlcyAoJTA0eClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcywgc3RhdHVzKTsKLX0KLQotLyogU2VhcmNoIHNjYW4gcmVzdWx0cyBmb3IgcmVxdWVzdGVkIEJTU0lELCBqb2luIGl0IGlmIGZvdW5kICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX2pvaW5fYXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgam9pbl93b3JrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGpvaW5fcmVxIHsKLQkJdTggYnNzaWRbRVRIX0FMRU5dOwotCQlfX2xlMTYgY2hhbm5lbDsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSByZXE7Ci0JY29uc3QgaW50IGF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7Ci0Jc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqYXRvbSA9IE5VTEw7Ci0JaW50IG9mZnNldCA9IDQ7Ci0JaW50IGZvdW5kID0gMDsKLQl1OCAqYnVmOwotCXUxNiBsZW47Ci0KLQkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHNjYW4gcmVzdWx0cyAqLwotCWJ1ZiA9IGttYWxsb2MoTUFYX1NDQU5fTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoISBidWYpCi0JCXJldHVybjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlnb3RvIGZhaWxfbG9jazsKLQotCS8qIFNhbml0eSBjaGVja3MgaW4gY2FzZSB1c2VyIGNoYW5nZWQgc29tZXRoaW5nIGluIHRoZSBtZWFudGltZSAqLwotCWlmICghIHByaXYtPmJzc2lkX2ZpeGVkKQotCQlnb3RvIG91dDsKLQotCWlmIChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBSZWFkIHNjYW4gcmVzdWx0cyBmcm9tIHRoZSBmaXJtd2FyZSAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCi0JCQkgICAgICBIRVJNRVNfUklEX1NDQU5SRVNVTFRTVEFCTEUsCi0JCQkgICAgICBNQVhfU0NBTl9MRU4sICZsZW4sIGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzY2FuIHJlc3VsdHNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlsZW4gPSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlbik7Ci0KLQkvKiBHbyB0aHJvdWdoIHRoZSBzY2FuIHJlc3VsdHMgbG9va2luZyBmb3IgdGhlIGNoYW5uZWwgb2YgdGhlIEFQCi0JICogd2Ugd2VyZSByZXF1ZXN0ZWQgdG8gam9pbiAqLwotCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgewotCQlhdG9tID0gKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKikgKGJ1ZiArIG9mZnNldCk7Ci0JCWlmIChtZW1jbXAoJmF0b20tPmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTikgPT0gMCkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoISBmb3VuZCkgewotCQlERUJVRygxLCAiJXM6IFJlcXVlc3RlZCBBUCBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXG4iLAotCQkgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkocmVxLmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTik7Ci0JcmVxLmNoYW5uZWwgPSBhdG9tLT5jaGFubmVsOwkvKiBib3RoIGFyZSBsaXR0bGUtZW5kaWFuICovCi0JZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GSk9JTlJFUVVFU1QsCi0JCQkJICAmcmVxKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpc3N1aW5nIGpvaW4gcmVxdWVzdFxuIiwgZGV2LT5uYW1lKTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0gZmFpbF9sb2NrOgotCWtmcmVlKGJ1Zik7Ci19Ci0KLS8qIFNlbmQgbmV3IEJTU0lEIHRvIHVzZXJzcGFjZSAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgd3JxdS5hcF9hZGRyLnNhX2RhdGEpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuOwotCi0Jd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQotCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBlcnI7Ci0JdTggYnVmWzg4XTsKLQl1OCAqaWU7Ci0KLQlpZiAoIXByaXYtPmhhc193cGEpCi0JCXJldHVybjsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVFfSU5GTywKLQkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVybjsKLQotCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChpZSkgewotCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKLQkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOwotCi0JCWlmICh3cnF1LmRhdGEubGVuZ3RoKQotCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVRSUUsICZ3cnF1LCBpZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBlcnI7Ci0JdTggYnVmWzg4XTsgLyogVE9ETzogdmVyaWZ5IG1heCBzaXplIG9yIElXX0dFTkVSSUNfSUVfTUFYICovCi0JdTggKmllOwotCi0JaWYgKCFwcml2LT5oYXNfd3BhKQotCQlyZXR1cm47Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVTUF9JTkZPLAotCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuOwotCi0JaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGllKSB7Ci0JCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKLQkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07Ci0KLQkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCi0JCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVNQSUUsICZ3cnF1LCBpZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfd2V2ZW50cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCB3ZXZlbnRfd29yayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm47Ci0KLQlvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQocHJpdik7Ci0Jb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChwcml2KTsKLQlvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHByaXYpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2Nhbl9hZ2UpCi17Ci0JaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKnRtcF9ic3M7Ci0KLQkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoIXNjYW5fYWdlIHx8Ci0JCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgewotCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCi0JCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLwotCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOwotCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOwotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKnRtcF9ic3M7Ci0KLQkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoIXNjYW5fYWdlIHx8Ci0JCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgewotCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCi0JCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLwotCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOwotCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKQotewotCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7Ci0JaW50IGZvdW5kID0gMDsKLQotCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmJzc2lkLCBhdG9tLT5ic3NpZCkpCi0JCQljb250aW51ZTsKLQkJLyogRVNTSUQgbGVuZ3RocyAqLwotCQlpZiAoYnNzLT5ic3MuZGF0YVsxXSAhPSBhdG9tLT5kYXRhWzFdKQotCQkJY29udGludWU7Ci0JCWlmIChtZW1jbXAoJmJzcy0+YnNzLmRhdGFbMl0sICZhdG9tLT5kYXRhWzJdLAotCQkJICAgYXRvbS0+ZGF0YVsxXSkpCi0JCQljb250aW51ZTsKLQkJZm91bmQgPSAxOwotCQlicmVhazsKLQl9Ci0KLQkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCi0JaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKLQkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCi0JCQkJIHN0cnVjdCB4YnNzX2VsZW1lbnQsIGxpc3QpOwotCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOwotCi0JCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKLQl9Ci0KLQlpZiAoYnNzKSB7Ci0JCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCi0JCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOwotCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7Ci0JfQotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCQlpbnQgbGVuKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludAkJCW9mZnNldDsJCS8qIEluIHRoZSBzY2FuIGRhdGEgKi8KLQl1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICphdG9tOwotCWludAkJCWF0b21fbGVuOwotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQlhdG9tX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdlcmVfc2Nhbl9hcGluZm8pOwotCQlvZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkvKiBMYWNrIG9mIGRvY3VtZW50YXRpb24gbmVjZXNzaXRhdGVzIHRoaXMgaGFjay4KLQkJICogRGlmZmVyZW50IGZpcm13YXJlcyBoYXZlIDY4IG9yIDc2IGJ5dGUgbG9uZyBhdG9tcy4KLQkJICogV2UgdHJ5IG1vZHVsbyBmaXJzdC4gIElmIHRoZSBsZW5ndGggZGl2aWRlcyBieSBib3RoLAotCQkgKiB3ZSBjaGVjayB3aGF0IHdvdWxkIGJlIHRoZSBjaGFubmVsIGluIHRoZSBzZWNvbmQKLQkJICogZnJhbWUgZm9yIGEgNjgtYnl0ZSBhdG9tLiAgNzYtYnl0ZSBhdG9tcyBoYXZlIDAgdGhlcmUuCi0JCSAqIFZhbGlkIGNoYW5uZWwgY2Fubm90IGJlIDAuICAqLwotCQlpZiAobGVuICUgNzYpCi0JCQlhdG9tX2xlbiA9IDY4OwotCQllbHNlIGlmIChsZW4gJSA2OCkKLQkJCWF0b21fbGVuID0gNzY7Ci0JCWVsc2UgaWYgKGxlbiA+PSAxMjkyICYmIGJ1Zls2OF0gPT0gMCkKLQkJCWF0b21fbGVuID0gNzY7Ci0JCWVsc2UKLQkJCWF0b21fbGVuID0gNjg7Ci0JCW9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJb2Zmc2V0ID0gNDsKLQkJaWYgKHByaXYtPmhhc19ob3N0c2NhbikgewotCQkJYXRvbV9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWJ1Zik7Ci0JCQkvKiBTYW5pdHkgY2hlY2sgZm9yIGF0b21fbGVuICovCi0JCQlpZiAoYXRvbV9sZW4gPCBzaXplb2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbykpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGF0b21fbGVuIGluIHNjYW4gIgotCQkJCSAgICAgICAiZGF0YTogJWRcbiIsIGRldi0+bmFtZSwgYXRvbV9sZW4pOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQl9IGVsc2UKLQkJCWF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQkvKiBDaGVjayB0aGF0IHdlIGdvdCBhbiB3aG9sZSBudW1iZXIgb2YgYXRvbXMgKi8KLQlpZiAoKGxlbiAtIG9mZnNldCkgJSBhdG9tX2xlbikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIHNjYW4gZGF0YSBsZW5ndGggJWQsICIKLQkJICAgICAgICJhdG9tX2xlbiAlZCwgb2Zmc2V0ICVkXG4iLCBkZXYtPm5hbWUsIGxlbiwKLQkJICAgICAgIGF0b21fbGVuLCBvZmZzZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCBtc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7Ci0KLQkvKiBSZWFkIHRoZSBlbnRyaWVzIG9uZSBieSBvbmUgKi8KLQlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKLQkJaW50IGZvdW5kID0gMDsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3MgPSBOVUxMOwotCi0JCS8qIEdldCBuZXh0IGF0b20gKi8KLQkJYXRvbSA9ICh1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICopIChidWYgKyBvZmZzZXQpOwotCi0JCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYS5ic3NpZCwgYXRvbS0+YS5ic3NpZCkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAobGUxNl90b19jcHUoYnNzLT5ic3MuYS5lc3NpZF9sZW4pICE9Ci0JCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpCi0JCQkJY29udGludWU7Ci0JCQlpZiAobWVtY21wKGJzcy0+YnNzLmEuZXNzaWQsIGF0b20tPmEuZXNzaWQsCi0JCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpKQotCQkJCWNvbnRpbnVlOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCi0JCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7Ci0JCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKLQkJCQkJIHN0cnVjdCBic3NfZWxlbWVudCwgbGlzdCk7Ci0JCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOwotCi0JCQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7Ci0JCX0KLQotCQlpZiAoYnNzKSB7Ci0JCQkvKiBBbHdheXMgdXBkYXRlIHRoZSBCU1MgdG8gZ2V0IGxhdGVzdCBiZWFjb24gaW5mbyAqLwotCQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiBpbmZvZmlkOwotCXN0cnVjdCB7Ci0JCV9fbGUxNiBsZW47Ci0JCV9fbGUxNiB0eXBlOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluZm87Ci0JaW50IGxlbiwgdHlwZTsKLQlpbnQgZXJyOwotCi0JLyogVGhpcyBpcyBhbiBhbnN3ZXIgdG8gYW4gSU5RVUlSRSBjb21tYW5kIHRoYXQgd2UgZGlkIGVhcmxpZXIsCi0JICogb3IgYW4gaW5mb3JtYXRpb24gImV2ZW50IiBnZW5lcmF0ZWQgYnkgdGhlIGNhcmQKLQkgKiBUaGUgY29udHJvbGxlciByZXR1cm4gdG8gdXMgYSBwc2V1ZG8gZnJhbWUgY29udGFpbmluZwotCSAqIHRoZSBpbmZvcm1hdGlvbiBpbiBxdWVzdGlvbiAtIEplYW4gSUkgKi8KLQlpbmZvZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgSU5GT0ZJRCk7Ci0KLQkvKiBSZWFkIHRoZSBpbmZvIGZyYW1lIGhlYWRlciAtIGRvbid0IHRyeSB0b28gaGFyZCAqLwotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZpbmZvLCBzaXplb2YoaW5mbyksCi0JCQkgICAgICAgaW5mb2ZpZCwgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIGluZm8gZnJhbWUuICIKLQkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm47Ci0JfQotCQotCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGUxNl90b19jcHUoaW5mby5sZW4pKTsKLQl0eXBlID0gbGUxNl90b19jcHUoaW5mby50eXBlKTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSEVSTUVTX0lOUV9UQUxMSUVTOiB7Ci0JCXN0cnVjdCBoZXJtZXNfdGFsbGllc19mcmFtZSB0YWxsaWVzOwotCQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKLQkJCi0JCWlmIChsZW4gPiBzaXplb2YodGFsbGllcykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUYWxsaWVzIGZyYW1lIHRvbyBsb25nICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJbGVuID0gc2l6ZW9mKHRhbGxpZXMpOwotCQl9Ci0JCQotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmdGFsbGllcywgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JCQotCQkvKiBJbmNyZW1lbnQgb3VyIHZhcmlvdXMgY291bnRlcnMgKi8KLQkJLyogd3N0YXRzLT5kaXNjYXJkLm53aWQgLSBubyB3cm9uZyBCU1NJRCBzdHVmZiAqLwotCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5SeFdFUFVuZGVjcnlwdGFibGUpOwotCQlpZiAobGVuID09IHNpemVvZih0YWxsaWVzKSkgIAotCQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0KLQkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQSUNWRXJyb3IpICsKLQkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQRXhjbHVkZWQpOwotCQl3c3RhdHMtPmRpc2NhcmQubWlzYyArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5UeERpc2NhcmRzV3JvbmdTQSk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5SeE1zZ0luQmFkTXNnRnJhZ21lbnRzKTsKLQkJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgKz0KLQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhSZXRyeUxpbWl0RXhjZWVkZWQpOwotCQkvKiB3c3RhdHMtPm1pc3MuYmVhY29uIC0gbm8gbWF0Y2ggKi8KLQl9Ci0JYnJlYWs7Ci0JY2FzZSBIRVJNRVNfSU5RX0xJTktTVEFUVVM6IHsKLQkJc3RydWN0IGhlcm1lc19saW5rc3RhdHVzIGxpbmtzdGF0dXM7Ci0JCXUxNiBuZXdzdGF0dXM7Ci0JCWludCBjb25uZWN0ZWQ7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGxlbiAhPSBzaXplb2YobGlua3N0YXR1cykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmV4cGVjdGVkIHNpemUgZm9yIGxpbmtzdGF0dXMgZnJhbWUgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZsaW5rc3RhdHVzLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJbmV3c3RhdHVzID0gbGUxNl90b19jcHUobGlua3N0YXR1cy5saW5rc3RhdHVzKTsKLQotCQkvKiBTeW1ib2wgZmlybXdhcmUgdXNlcyAib3V0IG9mIHJhbmdlIiB0byBzaWduYWwgdGhhdAotCQkgKiB0aGUgaG9zdHNjYW4gZnJhbWUgY2FuIGJlIHJlcXVlc3RlZC4gICovCi0JCWlmIChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICYmCi0JCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MICYmCi0JCSAgICBwcml2LT5oYXNfaG9zdHNjYW4gJiYgcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCQloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0wpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljb25uZWN0ZWQgPSAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCkKLQkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFKQotCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRSk7Ci0KLQkJaWYgKGNvbm5lY3RlZCkKLQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJZWxzZSBpZiAoIWlnbm9yZV9kaXNjb25uZWN0KQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCQlpZiAobmV3c3RhdHVzICE9IHByaXYtPmxhc3RfbGlua3N0YXR1cykgewotCQkJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gbmV3c3RhdHVzOwotCQkJcHJpbnRfbGlua3N0YXR1cyhkZXYsIG5ld3N0YXR1cyk7Ci0JCQkvKiBUaGUgaW5mbyBmcmFtZSBjb250YWlucyBvbmx5IG9uZSB3b3JkIHdoaWNoIGlzIHRoZQotCQkJICogc3RhdHVzIChzZWUgaGVybWVzLmgpLiBUaGUgc3RhdHVzIGlzIHByZXR0eSBib3JpbmcKLQkJCSAqIGluIGl0c2VsZiwgdGhhdCdzIHdoeSB3ZSBleHBvcnQgdGhlIG5ldyBCU1NJRC4uLgotCQkJICogSmVhbiBJSSAqLwotCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+d2V2ZW50X3dvcmspOwotCQl9Ci0JfQotCWJyZWFrOwotCWNhc2UgSEVSTUVTX0lOUV9TQ0FOOgotCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcyAmJiBwcml2LT5ic3NpZF9maXhlZCAmJgotCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMKSB7Ci0JCQlzY2hlZHVsZV93b3JrKCZwcml2LT5qb2luX3dvcmspOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOOgotCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0w6IHsKLQkJLyogUmVzdWx0IG9mIGEgc2Nhbm5pbmcuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci0JCSAqIGNlbGxzIGluIHRoZSB2aWNpbml0eSAtIEplYW4gSUkgKi8KLQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCQl1bnNpZ25lZCBjaGFyICpidWY7Ci0KLQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KLQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKGxlbiA+IDQwOTYpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHJlc3VsdHMgKi8KLQkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQkvKiBObyBtZW1vcnksIHNvIGNhbid0IHByaW50aygpLi4uICovCi0JCQlicmVhazsKLQotCQkvKiBSZWFkIHNjYW4gZGF0YSAqLwotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBidWYsIGxlbiwKLQkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKLQkJaWYgKGVycikgewotCQkJa2ZyZWUoYnVmKTsKLQkJCWJyZWFrOwotCQl9Ci0KLSNpZmRlZiBPUklOT0NPX0RFQlVHCi0JCXsKLQkJCWludAlpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNjYW4gcmVzdWx0IFslMDJYIiwgYnVmWzBdKTsKLQkJCWZvcihpID0gMTsgaSA8IChsZW4gKiAyKTsgaSsrKQotCQkJCXByaW50aygiOiUwMlgiLCBidWZbaV0pOwotCQkJcHJpbnRrKCJdXG4iKTsKLQkJfQotI2VuZGlmCS8qIE9SSU5PQ09fREVCVUcgKi8KLQotCQlpZiAob3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhkZXYsIGJ1ZiwgbGVuKSA9PSAwKSB7Ci0JCQkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCi0JCQkgKiBXZSBkb24ndCBzZW5kIHRoZSByZWNlaXZlZCBkYXRhIG9uIHRoZSBldmVudCBiZWNhdXNlCi0JCQkgKiBpdCB3b3VsZCByZXF1aXJlIHVzIHRvIGRvIGNvbXBsZXggdHJhbnNjb2RpbmcsIGFuZAotCQkJICogd2Ugd2FudCB0byBtaW5pbWlzZSB0aGUgd29yayBkb25lIGluIHRoZSBpcnEgaGFuZGxlcgotCQkJICogVXNlIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBkYXRhIC0gSmVhbiBJSSAqLwotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7Ci0JCX0KLQkJa2ZyZWUoYnVmKTsKLQl9Ci0JYnJlYWs7Ci0JY2FzZSBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPOgotCXsKLQkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzczsKLQotCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBHb3QgY2hhbmluZm8gd2l0aG91dCBzY2FuLCAiCi0JCQkgICAgICAgImxlbj0lZFxuIiwgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBBbiBlbXB0eSByZXN1bHQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgY29tcGxldGUgKi8KLQkJaWYgKGxlbiA9PSAwKSB7Ci0JCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0KLQkJCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCi0JCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKLQkJCXdycXUuZGF0YS5mbGFncyA9IDA7Ci0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2FuaXR5IGNoZWNrICovCi0JCWVsc2UgaWYgKGxlbiA+IHNpemVvZigqYnNzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKS4gIgotCQkJICAgICAgICJUcnVuY2F0aW5nIHJlc3VsdHMgdG8gJXpkIGJ5dGVzLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgc2l6ZW9mKCpic3MpKTsKLQkJCWxlbiA9IHNpemVvZigqYnNzKTsKLQkJfSBlbHNlIGlmIChsZW4gPCAob2Zmc2V0b2Yoc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8sCi0JCQkJCSAgIGRhdGEpICsgMikpIHsKLQkJCS8qIERyb3AgdGhpcyByZXN1bHQgbm93IHNvIHdlIGRvbid0IGhhdmUgdG8KLQkJCSAqIGtlZXAgY2hlY2tpbmcgbGF0ZXIgKi8KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIHNob3J0ICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlic3MgPSBrbWFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChic3MgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCS8qIFJlYWQgc2NhbiBkYXRhICovCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJzcywgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZShic3MpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQocHJpdiwgYnNzKTsKLQotCQlrZnJlZShic3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBIRVJNRVNfSU5RX1NFQ19TVEFUX0FHRVJFOgotCQkvKiBTZWN1cml0eSBzdGF0dXMgKEFnZXJlIHNwZWNpZmljKSAqLwotCQkvKiBJZ25vcmUgdGhpcyBmcmFtZSBmb3Igbm93ICovCi0JCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCi0JCQlicmVhazsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVbmtub3duIGluZm9ybWF0aW9uIGZyYW1lIHJlY2VpdmVkOiAiCi0JCSAgICAgICAidHlwZSAweCUwNHgsIGxlbmd0aCAlZFxuIiwgZGV2LT5uYW1lLCB0eXBlLCBsZW4pOwotCQkvKiBXZSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBhYm91dCBpdCAqLwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZkcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluZm9ybWF0aW9uIGZyYW1lIGxvc3QuXG4iLCBkZXYtPm5hbWUpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcm5hbCBoYXJkd2FyZSBjb250cm9sIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KLQotCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGNvbmZpZ3VyaW5nIGNhcmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogRmlyZSB0aGluZ3MgdXAgYWdhaW4gKi8KLQloZXJtZXNfc2V0X2lycW1hc2soaHcsIE9SSU5PQ09fSU5URU4pOwotCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBlbmFibGluZyBNQUMgcG9ydFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX29yaW5vY29fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlpZiAoISBwcml2LT5od191bmF2YWlsYWJsZSkgewotCQlpZiAoISBwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKLQkJCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOwotCQkJaWYgKGVycikgewotCQkJCS8qIFNvbWUgZmlybXdhcmVzIChlLmcuIEludGVyc2lsIDEuMy54KSBzZWVtCi0JCQkJICogdG8gaGF2ZSBwcm9ibGVtcyBkaXNhYmxpbmcgdGhlIHBvcnQsIG9oCi0JCQkJICogd2VsbCwgdG9vIGJhZC4gKi8KLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZGlzYWJsaW5nIE1BQyBwb3J0XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKLQkJCX0KLQkJfQotCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7Ci0JfQotCQotCS8qIGZpcm13YXJlIHdpbGwgaGF2ZSB0byByZWFzc29jaWF0ZSAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19hbGxvY2F0ZV9maWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKLQlpZiAoZXJyID09IC1FSU8gJiYgcHJpdi0+bmljYnVmX3NpemUgPiBUWF9OSUNCVUZfU0laRV9CVUcpIHsKLQkJLyogVHJ5IHdvcmthcm91bmQgZm9yIG9sZCBTeW1ib2wgZmlybXdhcmUgYnVnICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaXJtd2FyZSBBTExPQyBidWcgZGV0ZWN0ZWQgIgotCQkgICAgICAgIihvbGQgU3ltYm9sIGZpcm13YXJlPykuIFRyeWluZyB0byB3b3JrIGFyb3VuZC4uLiAiLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCi0JCXByaXYtPm5pY2J1Zl9zaXplID0gVFhfTklDQlVGX1NJWkVfQlVHOwotCQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKCJmYWlsZWQhXG4iKTsKLQkJZWxzZQotCQkJcHJpbnRrKCJvay5cbiIpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfaW5pdChodyk7Ci0JaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkICYmICFlcnIpIHsKLQkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKLQkJaWYgKGVycikKLQkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKLQl9Ci0JaWYgKCFlcnIpCi0JCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChwcml2LT5iaXRyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBJbnZhbGlkIGJpdHJhdGUgbW9kZSAlZFxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPmJpdHJhdGVtb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKLQkJCQkJICAgYml0cmF0ZV90YWJsZVtwcml2LT5iaXRyYXRlbW9kZV0uYWdlcmVfdHhyYXRlY3RybCk7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKLQkJCQkJICAgYml0cmF0ZV90YWJsZVtwcml2LT5iaXRyYXRlbW9kZV0uaW50ZXJzaWxfdHhyYXRlY3RybCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFNldCBmaXhlZCBBUCBhZGRyZXNzICovCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfd2FwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaW50IHJvYW1pbmdfZmxhZzsKLQlpbnQgZXJyID0gMDsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCS8qIG5vdCBzdXBwb3J0ZWQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQlpZiAocHJpdi0+YnNzaWRfZml4ZWQpCi0JCQlyb2FtaW5nX2ZsYWcgPSAyOwotCQllbHNlCi0JCQlyb2FtaW5nX2ZsYWcgPSAxOwotCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZST0FNSU5HTU9ERSwKLQkJCQkJICAgcm9hbWluZ19mbGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNQU5EQVRPUllCU1NJRF9TWU1CT0wsCi0JCQkJCSAgJnByaXYtPmRlc2lyZWRfYnNzaWQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogQ2hhbmdlIHRoZSBXRVAga2V5cyBhbmQvb3IgdGhlIGN1cnJlbnQga2V5cy4gIENhbiBiZSBjYWxsZWQKLSAqIGVpdGhlciBmcm9tIF9fb3Jpbm9jb19od19zZXR1cF9lbmMoKSBvciBkaXJlY3RseSBmcm9tCi0gKiBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKCkuICBJbiB0aGUgbGF0ZXIgY2FzZSB0aGUgYXNzb2NpYXRpb24KLSAqIHdpdGggdGhlIEFQIGlzIG5vdCBicm9rZW4gKGlmIHRoZSBmaXJtd2FyZSBjYW4gaGFuZGxlIGl0KSwKLSAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgODAyLjF4IGltcGxlbWVudGF0aW9ucy4gKi8KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GV0VQS0VZU19BR0VSRSwKLQkJCQkJICAmcHJpdi0+a2V5cyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GVFhLRVlfQUdFUkUsCi0JCQkJCSAgIHByaXYtPnR4X2tleSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJewotCQkJaW50IGtleWxlbjsKLQkJCWludCBpOwotCi0JCQkvKiBGb3JjZSB1bmlmb3JtIGtleSBsZW5ndGggdG8gd29yayBhcm91bmQgZmlybXdhcmUgYnVncyAqLwotCQkJa2V5bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1twcml2LT50eF9rZXldLmxlbik7Ci0JCQkKLQkJCWlmIChrZXlsZW4gPiBMQVJHRV9LRVlfU0laRSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJVRzogS2V5ICVkIGhhcyBvdmVyc2l6ZSBsZW5ndGggJWQuXG4iLAotCQkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBwcml2LT50eF9rZXksIGtleWxlbik7Ci0JCQkJcmV0dXJuIC1FMkJJRzsKLQkJCX0KLQotCQkJLyogV3JpdGUgYWxsIDQga2V5cyAqLwotCQkJZm9yKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfS0VZUzsgaSsrKSB7Ci0JCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCi0JCQkJCQkgICAgICAgSEVSTUVTX1JJRF9DTkZERUZBVUxUS0VZMCArIGksCi0JCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihrZXlsZW4pLAotCQkJCQkJICAgICAgIHByaXYtPmtleXNbaV0uZGF0YSk7Ci0JCQkJaWYgKGVycikKLQkJCQkJcmV0dXJuIGVycjsKLQkJCX0KLQotCQkJLyogV3JpdGUgdGhlIGluZGV4IG9mIHRoZSBrZXkgdXNlZCBpbiB0cmFuc21pc3Npb24gKi8KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQREVGQVVMVEtFWUlELAotCQkJCQkJICAgcHJpdi0+dHhfa2V5KTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0dXBfZW5jKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCWludCBtYXN0ZXJfd2VwX2ZsYWc7Ci0JaW50IGF1dGhfZmxhZzsKLQlpbnQgZW5jX2ZsYWc7Ci0KLQkvKiBTZXR1cCBXRVAga2V5cyBmb3IgV0VQIGFuZCBXUEEgKi8KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZykKLQkJX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMocHJpdik7Ci0KLQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQotCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9TSEFSRURfS0VZOwotCWVsc2UKLQkJYXV0aF9mbGFnID0gSEVSTUVTX0FVVEhfT1BFTjsKLQotCWlmIChwcml2LT53cGFfZW5hYmxlZCkKLQkJZW5jX2ZsYWcgPSAyOwotCWVsc2UgaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApCi0JCWVuY19mbGFnID0gMTsKLQllbHNlCi0JCWVuY19mbGFnID0gMDsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogQWdlcmUgc3R5bGUgV0VQICovCi0JCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKSB7Ci0JCQkvKiBFbmFibGUgdGhlIHNoYXJlZC1rZXkgYXV0aGVudGljYXRpb24uICovCi0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0FHRVJFLAotCQkJCQkJICAgYXV0aF9mbGFnKTsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRU5BQkxFRF9BR0VSRSwKLQkJCQkJICAgZW5jX2ZsYWcpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAocHJpdi0+aGFzX3dwYSkgewotCQkJLyogU2V0IFdQQSBrZXkgbWFuYWdlbWVudCAqLwotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZTRVRXUEFBVVRITUdNVFNVSVRFX0FHRVJFLAotCQkJCSAgcHJpdi0+a2V5X21nbXQpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIFdFUCAqLwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSBXRVAgKi8KLQkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKLQkJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QgfHwKLQkJCSAgICAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkpCi0JCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQgfAotCQkJCQkJICBIRVJNRVNfV0VQX0VYQ0xfVU5FTkNSWVBURUQ7Ci0JCQllbHNlCi0JCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQ7Ci0KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT04sCi0JCQkJCQkgICBhdXRoX2ZsYWcpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UKLQkJCW1hc3Rlcl93ZXBfZmxhZyA9IDA7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotCQkJbWFzdGVyX3dlcF9mbGFnIHw9IEhFUk1FU19XRVBfSE9TVF9ERUNSWVBUOwotCi0JCS8qIE1hc3RlciBXRVAgc2V0dGluZyA6IG9uL29mZiAqLwotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRkxBR1NfSU5URVJTSUwsCi0JCQkJCSAgIG1hc3Rlcl93ZXBfZmxhZyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwkKLQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoga2V5IG11c3QgYmUgMzIgYnl0ZXMsIGluY2x1ZGluZyB0aGUgdHggYW5kIHJ4IE1JQyBrZXlzLgotICogcnNjIG11c3QgYmUgOCBieXRlcwotICogdHNjIG11c3QgYmUgOCBieXRlcyBvciBOVUxMCi0gKi8KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShoZXJtZXNfdCAqaHcsIGludCBrZXlfaWR4LCBpbnQgc2V0X3R4LAotCQkJCSAgICAgdTggKmtleSwgdTggKnJzYywgdTggKnRzYykKLXsKLQlzdHJ1Y3QgewotCQlfX2xlMTYgaWR4OwotCQl1OCByc2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0JCXU4IGtleVtUS0lQX0tFWUxFTl07Ci0JCXU4IHR4X21pY1tNSUNfS0VZTEVOXTsKLQkJdTggcnhfbWljW01JQ19LRVlMRU5dOwotCQl1OCB0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOwotCWludCByZXQ7Ci0JaW50IGVycjsKLQlpbnQgazsKLQl1MTYgeG1pdHRpbmc7Ci0KLQlrZXlfaWR4ICY9IDB4MzsKLQotCWlmIChzZXRfdHgpCi0JCWtleV9pZHggfD0gMHg4MDAwOwotCi0JYnVmLmlkeCA9IGNwdV90b19sZTE2KGtleV9pZHgpOwotCW1lbWNweShidWYua2V5LCBrZXksCi0JICAgICAgIHNpemVvZihidWYua2V5KSArIHNpemVvZihidWYudHhfbWljKSArIHNpemVvZihidWYucnhfbWljKSk7Ci0KLQlpZiAocnNjID09IE5VTEwpCi0JCW1lbXNldChidWYucnNjLCAwLCBzaXplb2YoYnVmLnJzYykpOwotCWVsc2UKLQkJbWVtY3B5KGJ1Zi5yc2MsIHJzYywgc2l6ZW9mKGJ1Zi5yc2MpKTsKLQotCWlmICh0c2MgPT0gTlVMTCkgewotCQltZW1zZXQoYnVmLnRzYywgMCwgc2l6ZW9mKGJ1Zi50c2MpKTsKLQkJYnVmLnRzY1s0XSA9IDB4MTA7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGJ1Zi50c2MsIHRzYywgc2l6ZW9mKGJ1Zi50c2MpKTsKLQl9Ci0KLQkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCi0JayA9IDEwMDsKLQlkbyB7Ci0JCWstLTsKLQkJdWRlbGF5KDEwMDApOwotCQlyZXQgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9UWFFVRVVFRU1QVFksCi0JCQkJCSAgJnhtaXR0aW5nKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKChrID4gMCkgJiYgeG1pdHRpbmcpOwotCi0JaWYgKGsgPT0gMCkKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQotCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZBRERERUZBVUxUVEtJUEtFWV9BR0VSRSwKLQkJCQkgICZidWYpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJICBpbnQga2V5X2lkeCkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlba2V5X2lkeF0sIDAsIHNpemVvZihwcml2LT50a2lwX2tleVtrZXlfaWR4XSkpOwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgICBIRVJNRVNfUklEX0NORlJFTURFRkFVTFRUS0lQS0VZX0FHRVJFLAotCQkJCSAgIGtleV9pZHgpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBjbGVhcmluZyBUS0lQIGtleSAlZFxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGVyciwga2V5X2lkeCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKLQotCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oRVRIX0FMRU4pLCBkZXYtPmRldl9hZGRyKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgTUFDIGFkZHJlc3NcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IHVwIHRoZSBsaW5rIG1vZGUgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE9SVFRZUEUsCi0JCQkJICAgcHJpdi0+cG9ydF90eXBlKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcG9ydCB0eXBlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBTZXQgdGhlIGNoYW5uZWwvZnJlcXVlbmN5ICovCi0JaWYgKHByaXYtPmNoYW5uZWwgIT0gMCAmJiBwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk9XTkNIQU5ORUwsCi0JCQkJCSAgIHByaXYtPmNoYW5uZWwpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIHByaXYtPmNoYW5uZWwpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5oYXNfaWJzcykgewotCQl1MTYgY3JlYXRlaWJzczsKLQotCQlpZiAoKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSAmJiAocHJpdi0+Y3JlYXRlaWJzcykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUaGlzIGZpcm13YXJlIHJlcXVpcmVzIGFuICIKLQkJCSAgICAgICAiRVNTSUQgaW4gSUJTUy1BZC1Ib2MgbW9kZS5cbiIsIGRldi0+bmFtZSk7Ci0JCQkvKiBXaXRoIHd2bGFuX2NzLCBpbiB0aGlzIGNhc2UsIHdlIHdvdWxkIGNyYXNoLgotCQkJICogaG9wZWZ1bGx5LCB0aGlzIGRyaXZlciB3aWxsIGJlaGF2ZSBiZXR0ZXIuLi4KLQkJCSAqIEplYW4gSUkgKi8KLQkJCWNyZWF0ZWlic3MgPSAwOwotCQl9IGVsc2UgewotCQkJY3JlYXRlaWJzcyA9IHByaXYtPmNyZWF0ZWlic3M7Ci0JCX0KLQkJCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZDUkVBVEVJQlNTLAotCQkJCQkgICBjcmVhdGVpYnNzKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBDUkVBVEVJQlNTXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdGhlIGRlc2lyZWQgQlNTSUQgKi8KLQllcnIgPSBfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQVAgYWRkcmVzc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogU2V0IHRoZSBkZXNpcmVkIEVTU0lEICovCi0JaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKLQltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgc2l6ZW9mKGlkYnVmLnZhbCkpOwotCS8qIFdpblhQIHdhbnRzIHBhcnRuZXIgdG8gY29uZmlndXJlIE9XTlNTSUQgZXZlbiBpbiBJQlNTIG1vZGUuIChqaW1jKSAqLwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTlNTSUQsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCi0JCQkgICAgICAgJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgT1dOU1NJRFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCi0JCQkgICAgICAgJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgREVTSVJFRFNTSURcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KLQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+bmljaykpOwotCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5uaWNrLCBzaXplb2YoaWRidWYudmFsKSk7Ci0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5uaWNrKSsyKSwKLQkJCSAgICAgICAmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBuaWNrbmFtZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgQVAgZGVuc2l0eSAqLwotCWlmIChwcml2LT5oYXNfc2Vuc2l0aXZpdHkpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAotCQkJCQkgICBwcml2LT5hcF9kZW5zaXR5KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIHNldHRpbmcgU1lTVEVNU0NBTEUuICAiCi0JCQkgICAgICAgIkRpc2FibGluZyBzZW5zaXRpdml0eSBjb250cm9sXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQotCQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKLQkJfQotCX0KLQotCS8qIFNldCBSVFMgdGhyZXNob2xkICovCi0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKLQkJCQkgICBwcml2LT5ydHNfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUlRTIHRocmVzaG9sZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb3IgTVdPIHJvYnVzdG5lc3MgKi8KLQlpZiAocHJpdi0+aGFzX213bykKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAgcHJpdi0+bXdvX3JvYnVzdCk7Ci0JZWxzZQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAgcHJpdi0+ZnJhZ190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBmcmFnbWVudGF0aW9uXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBiaXRyYXRlICovCi0JZXJyID0gX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHByaXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBiaXRyYXRlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50ICovCi0JaWYgKHByaXYtPmhhc19wbSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELAotCQkJCQkgICBwcml2LT5wbV9vbik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLAotCQkJCQkgICBwcml2LT5wbV9tY2FzdCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKLQkJCQkJICAgcHJpdi0+cG1fcGVyaW9kKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCi0JCQkJCSAgIHByaXYtPnBtX3RpbWVvdXQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgcHJlYW1ibGUgLSBvbmx5IGZvciBTeW1ib2wgc28gZmFyLi4uICovCi0JaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAotCQkJCQkgICBwcml2LT5wcmVhbWJsZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcHJlYW1ibGVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCB1cCBlbmNyeXB0aW9uICovCi0JaWYgKHByaXYtPmhhc193ZXAgfHwgcHJpdi0+aGFzX3dwYSkgewotCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfZW5jKHByaXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBhY3RpdmF0aW5nIGVuY3J5cHRpb25cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCi0JCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfCAKLQkJCQkJICAgIEhFUk1FU19URVNUX01PTklUT1IsIDAsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgbW9uaXRvciBtb2RlICovCi0JCWRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8Ci0JCQkJCSAgICBIRVJNRVNfVEVTVF9TVE9QLCAwLCBOVUxMKTsKLQl9Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIFNldCBwcm9taXNjdWl0eSAvIG11bHRpY2FzdCovCi0JcHJpdi0+cHJvbWlzY3VvdXMgPSAwOwotCXByaXYtPm1jX2NvdW50ID0gMDsKLQotCS8qIEZJWE1FOiB3aGF0IGFib3V0IG5ldGlmX3R4X2xvY2sgKi8KLQlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRklYTUU6IHJldHVybiBpbnQ/ICovCi1zdGF0aWMgdm9pZAotX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlpbnQgcHJvbWlzYywgbWNfY291bnQ7Ci0KLQkvKiBUaGUgSGVybWVzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGFsbG11bHRpIG1vZGUsIHNvIHdlIGdvCi0JICogaW50byBwcm9taXNjdW91cyBtb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxldmVscyBkZWFsLiAqLwotCWlmICggKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgICAoZGV2LT5tY19jb3VudCA+IE1BWF9NVUxUSUNBU1QocHJpdikpICkgewotCQlwcm9taXNjID0gMTsKLQkJbWNfY291bnQgPSAwOwotCX0gZWxzZSB7Ci0JCXByb21pc2MgPSAwOwotCQltY19jb3VudCA9IGRldi0+bWNfY291bnQ7Ci0JfQotCi0JaWYgKHByb21pc2MgIT0gcHJpdi0+cHJvbWlzY3VvdXMpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBST01JU0NVT1VTTU9ERSwKLQkJCQkJICAgcHJvbWlzYyk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUFJPTUlTQ1VPVVNNT0RFIHRvIDEuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJfSBlbHNlIAotCQkJcHJpdi0+cHJvbWlzY3VvdXMgPSBwcm9taXNjOwotCX0KLQotCS8qIElmIHdlJ3JlIG5vdCBpbiBwcm9taXNjdW91cyBtb2RlLCB0aGVuIHdlIG5lZWQgdG8gc2V0IHRoZQotCSAqIGdyb3VwIGFkZHJlc3MgaWYgZWl0aGVyIHdlIHdhbnQgdG8gbXVsdGljYXN0LCBvciBpZiB3ZSB3ZXJlCi0JICogbXVsdGljYXN0aW5nIGFuZCB3YW50IHRvIHN0b3AgKi8KLQlpZiAoISBwcm9taXNjICYmIChtY19jb3VudCB8fCBwcml2LT5tY19jb3VudCkgKSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqcCA9IGRldi0+bWNfbGlzdDsKLQkJc3RydWN0IGhlcm1lc19tdWx0aWNhc3QgbWNsaXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJLyogcGFyYW5vaWE6IGlzIGxpc3Qgc2hvcnRlciB0aGFuIG1jX2NvdW50PyAqLwotCQkJQlVHX09OKCEgcCk7Ci0JCQkvKiBwYXJhbm9pYTogYmFkIGFkZHJlc3Mgc2l6ZSBpbiBsaXN0PyAqLwotCQkJQlVHX09OKHAtPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKTsKLQkJCQotCQkJbWVtY3B5KG1jbGlzdC5hZGRyW2ldLCBwLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotCQkJcCA9IHAtPm5leHQ7Ci0JCX0KLQkJCi0JCWlmIChwKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE11bHRpY2FzdCBsaXN0IGlzICIKLQkJCSAgICAgICAibG9uZ2VyIHRoYW4gbWNfY291bnRcbiIsIGRldi0+bmFtZSk7Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCi0JCQkJICAgSEVSTUVTX1JJRF9DTkZHUk9VUEFERFJFU1NFUywKLQkJCQkgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG1jX2NvdW50ICogRVRIX0FMRU4pLAotCQkJCSAgICZtY2xpc3QpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBtdWx0aWNhc3QgbGlzdC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQllbHNlCi0JCQlwcml2LT5tY19jb3VudCA9IG1jX2NvdW50OwotCX0KLX0KLQotLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgd2l0aG91dCBsb2NrcyBoZWxkIC0gdXNlCi0gKiBzY2hlZHVsZV93b3JrKCkgKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgcmVzZXRfd29yayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCS8qIFdoZW4gdGhlIGhhcmR3YXJlIGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLCB3aGF0ZXZlcgotCQkgKiBkZXRlY3RzIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHJlLWluaXRpYWxpemluZwotCQkgKiBpdC4gU28gbm8gbmVlZCBmb3IgYW55dGhpbmcgZnVydGhlciAqLwotCQlyZXR1cm47Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQkvKiBTaHV0IG9mZiBpbnRlcnJ1cHRzLiAgRGVwZW5kaW5nIG9uIHdoYXQgc3RhdGUgdGhlIGhhcmR3YXJlCi0JICogaXMgaW4sIHRoaXMgbWlnaHQgbm90IHdvcmssIGJ1dCB3ZSdsbCB0cnkgYW55d2F5ICovCi0JaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsgLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLSAJLyogU2Nhbm5pbmcgc3VwcG9ydDogQ2xlYW51cCBvZiBkcml2ZXIgc3RydWN0ICovCi0Jb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgMCk7Ci0JcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQotCWlmIChwcml2LT5oYXJkX3Jlc2V0KSB7Ci0JCWVyciA9ICgqcHJpdi0+aGFyZF9yZXNldCkocHJpdik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkICIKLQkJCSAgICAgICAicGVyZm9ybWluZyBoYXJkIHJlc2V0XG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGRpc2FibGU7Ci0JCX0KLQl9Ci0KLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGRpc2FibGU7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7IC8qIFRoaXMgaGFzIHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCAqLwotCi0JcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQotCS8qIHByaXYtPm9wZW4gb3IgcHJpdi0+aHdfdW5hdmFpbGFibGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdoaWxlCi0JICogd2UgZHJvcHBlZCB0aGUgbG9jayAqLwotCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewotCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmVlbmFibGluZyBjYXJkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJfSBlbHNlCi0JCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JcmV0dXJuOwotIGRpc2FibGU6Ci0JaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogRGV2aWNlIGhhcyBiZWVuIGRpc2FibGVkIVxuIiwgZGV2LT5uYW1lKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdGljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUSUNLXG4iLCBkZXYtPm5hbWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfd3RlcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCS8qIFRoaXMgc2VlbXMgdG8gaGFwcGVuIGEgZmFpciBiaXQgdW5kZXIgbG9hZCwgYnV0IGlnbm9yaW5nIGl0Ci0JICAgc2VlbXMgdG8gd29yayBmaW5lLi4uKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBjb250cm9sbGVyIGVycm9yIChXVEVSUikuIElnbm9yaW5nLlxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLX0KLQotaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBjb3VudCA9IE1BWF9JUlFMT09QU19QRVJfSVJROwotCXUxNiBldnN0YXQsIGV2ZW50czsKLQkvKiBUaGVzZSBhcmUgdXNlZCB0byBkZXRlY3QgYSBydW5hd2F5IGludGVycnVwdCBzaXR1YXRpb24gKi8KLQkvKiBJZiB3ZSBnZXQgbW9yZSB0aGFuIE1BWF9JUlFMT09QU19QRVJfSklGRlkgaXRlcmF0aW9ucyBpbiBhIGppZmZ5LAotCSAqIHdlIHBhbmljIGFuZCBzaHV0IGRvd24gdGhlIGhhcmR3YXJlICovCi0Jc3RhdGljIGludCBsYXN0X2lycV9qaWZmeSA9IDA7IC8qIGppZmZpZXMgdmFsdWUgdGhlIGxhc3QgdGltZQotCQkJCQkqIHdlIHdlcmUgY2FsbGVkICovCi0Jc3RhdGljIGludCBsb29wc190aGlzX2ppZmZ5ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJLyogSWYgaHcgaXMgdW5hdmFpbGFibGUgLSB3ZSBkb24ndCBrbm93IGlmIHRoZSBpcnEgd2FzCi0JCSAqIGZvciB1cyBvciBub3QgKi8KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7Ci0JZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOwotCWlmICghIGV2ZW50cykgewotCQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCQotCWlmIChqaWZmaWVzICE9IGxhc3RfaXJxX2ppZmZ5KQotCQlsb29wc190aGlzX2ppZmZ5ID0gMDsKLQlsYXN0X2lycV9qaWZmeSA9IGppZmZpZXM7Ci0KLQl3aGlsZSAoZXZlbnRzICYmIGNvdW50LS0pIHsKLQkJaWYgKCsrbG9vcHNfdGhpc19qaWZmeSA+IE1BWF9JUlFMT09QU19QRVJfSklGRlkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJUlEgaGFuZGxlciBpcyBsb29waW5nIHRvbyAiCi0JCQkgICAgICAgIm11Y2ghIFJlc2V0dGluZy5cbiIsIGRldi0+bmFtZSk7Ci0JCQkvKiBEaXNhYmxlIGludGVycnVwdHMgZm9yIG5vdyAqLwotCQkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBDaGVjayB0aGUgY2FyZCBoYXNuJ3QgYmVlbiByZW1vdmVkICovCi0JCWlmICghIGhlcm1lc19wcmVzZW50KGh3KSkgewotCQkJREVCVUcoMCwgIm9yaW5vY29faW50ZXJydXB0KCk6IGNhcmQgcmVtb3ZlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVElDSykKLQkJCV9fb3Jpbm9jb19ldl90aWNrKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1dURVJSKQotCQkJX19vcmlub2NvX2V2X3d0ZXJyKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORkRST1ApCi0JCQlfX29yaW5vY29fZXZfaW5mZHJvcChkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9JTkZPKQotCQkJX19vcmlub2NvX2V2X2luZm8oZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfUlgpCi0JCQlfX29yaW5vY29fZXZfcngoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFhFWEMpCi0JCQlfX29yaW5vY29fZXZfdHhleGMoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFgpCi0JCQlfX29yaW5vY29fZXZfdHgoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfQUxMT0MpCi0JCQlfX29yaW5vY29fZXZfYWxsb2MoZGV2LCBodyk7Ci0JCQotCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIGV2c3RhdCk7Ci0KLQkJZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKLQkJZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOwotCX07Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUG93ZXIgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiAhZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpCi1zdGF0aWMgaW50IG9yaW5vY29fcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBtX2V2ZW50LAotCQkJICAgICAgIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5vdGlmaWVyLAotCQkJCQkJICAgIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsCi0JCQkJCQkgICAgcG1fbm90aWZpZXIpOwotCi0JLyogQWxsIHdlIG5lZWQgdG8gZG8gaXMgY2FjaGUgdGhlIGZpcm13YXJlIGJlZm9yZSBzdXNwZW5kLCBhbmQKLQkgKiByZWxlYXNlIGl0IHdoZW4gd2UgY29tZSBvdXQuCi0JICoKLQkgKiBPbmx5IG5lZWQgdG8gZG8gdGhpcyBpZiB3ZSdyZSBkb3dubG9hZGluZyBmaXJtd2FyZS4gKi8KLQlpZiAoIXByaXYtPmRvX2Z3X2Rvd25sb2FkKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQlzd2l0Y2ggKHBtX2V2ZW50KSB7Ci0JY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgotCWNhc2UgUE1fU1VTUEVORF9QUkVQQVJFOgotCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOwotCQlicmVhazsKLQotCWNhc2UgUE1fUE9TVF9SRVNUT1JFOgotCQkvKiBSZXN0b3JlIGZyb20gaGliZXJuYXRpb24gZmFpbGVkLiBXZSBuZWVkIHRvIGNsZWFuCi0JCSAqIHVwIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBzbyBmYWxsIHRocm91Z2guICovCi0JY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgotCWNhc2UgUE1fUE9TVF9TVVNQRU5EOgotCQlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7Ci0JCWJyZWFrOwotCi0JY2FzZSBQTV9SRVNUT1JFX1BSRVBBUkU6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JcHJpdi0+cG1fbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IG9yaW5vY29fcG1fbm90aWZpZXI7Ci0JcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOwotfQotI2Vsc2UgLyogIVBNX1NMRUVQIHx8IEhFUk1FU19DQUNIRV9GV19PTl9JTklUICovCi0jZGVmaW5lIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdikgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBjb21wX2lkIHsKLQl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdGF0aWMgaW5saW5lIGZ3dHlwZV90IGRldGVybWluZV9maXJtd2FyZV90eXBlKHN0cnVjdCBjb21wX2lkICpuaWNfaWQpCi17Ci0JaWYgKG5pY19pZC0+aWQgPCAweDgwMDApCi0JCXJldHVybiBGSVJNV0FSRV9UWVBFX0FHRVJFOwotCWVsc2UgaWYgKG5pY19pZC0+aWQgPT0gMHg4MDAwICYmIG5pY19pZC0+bWFqb3IgPT0gMCkKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfU1lNQk9MOwotCWVsc2UKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw7Ci19Ci0KLS8qIFNldCBwcml2LT5maXJtd2FyZSB0eXBlLCBkZXRlcm1pbmUgZmlybXdhcmUgcHJvcGVydGllcyAqLwotc3RhdGljIGludCBkZXRlcm1pbmVfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY29tcF9pZCBuaWNfaWQsIHN0YV9pZDsKLQl1bnNpZ25lZCBpbnQgZmlybXZlcjsKLQljaGFyIHRtcFtTWU1CT0xfTUFYX1ZFUl9MRU4rMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKSkpOwotCi0JLyogR2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uICovCi0JZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9OSUNJRCwgJm5pY19pZCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBoYXJkd2FyZSBpZGVudGl0eTogZXJyb3IgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGUxNl90b19jcHVzKCZuaWNfaWQuaWQpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLnZhcmlhbnQpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLm1ham9yKTsKLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5taW5vcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIYXJkd2FyZSBpZGVudGl0eSAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIG5pY19pZC5pZCwgbmljX2lkLnZhcmlhbnQsCi0JICAgICAgIG5pY19pZC5tYWpvciwgbmljX2lkLm1pbm9yKTsKLQotCXByaXYtPmZpcm13YXJlX3R5cGUgPSBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZSgmbmljX2lkKTsKLQotCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLwotCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1RBSUQsICZzdGFfaWQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc3RhdGlvbiBpZGVudGl0eTogZXJyb3IgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGUxNl90b19jcHVzKCZzdGFfaWQuaWQpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLnZhcmlhbnQpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1ham9yKTsKLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5taW5vcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIGlkZW50aXR5ICAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHN0YV9pZC5pZCwgc3RhX2lkLnZhcmlhbnQsCi0JICAgICAgIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKLQotCXN3aXRjaCAoc3RhX2lkLmlkKSB7Ci0JY2FzZSAweDE1OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCWNhc2UgMHgxNGI6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRlcnRpYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCWNhc2UgMHgxZjoJLyogSW50ZXJzaWwsIEFnZXJlLCBTeW1ib2wgU3BlY3RydW0yNCAqLwotCWNhc2UgMHgyMToJLyogU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbmtub3duIHN0YXRpb24gSUQsIHBsZWFzZSByZXBvcnRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEZWZhdWx0IGNhcGFiaWxpdGllcyAqLwotCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDE7Ci0JcHJpdi0+aGFzX213byA9IDA7Ci0JcHJpdi0+aGFzX3ByZWFtYmxlID0gMDsKLQlwcml2LT5oYXNfcG9ydDMgPSAxOwotCXByaXYtPmhhc19pYnNzID0gMTsKLQlwcml2LT5oYXNfd2VwID0gMDsKLQlwcml2LT5oYXNfYmlnX3dlcCA9IDA7Ci0JcHJpdi0+aGFzX2FsdF90eGNudGwgPSAwOwotCXByaXYtPmhhc19leHRfc2NhbiA9IDA7Ci0JcHJpdi0+aGFzX3dwYSA9IDA7Ci0JcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwotCi0JLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkvKiBMdWNlbnQgV2F2ZWxhbiBJRUVFLCBMdWNlbnQgT3Jpbm9jbywgQ2FibGV0cm9uIFJvYW1BYm91dCwKLQkJICAgRUxTQSwgTWVsY28sIEhQLCBJQk0sIERlbGwgMTE1MCwgQ29tcGFxIDExMC8yMTAgKi8KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiTHVjZW50L0FnZXJlICVkLiUwMmQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7Ci0KLQkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwgc3RhX2lkLm1pbm9yOwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHg2MDAwNik7Ci0JCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDQwMDIwKTsKLQkJcHJpdi0+aGFzX2JpZ193ZXAgPSAxOyAvKiBGSVhNRTogdGhpcyBpcyB3cm9uZyAtIGhvdyBkbyB3ZSB0ZWxsCi0JCQkJCSAgR29sZCBjYXJkcyBmcm9tIHRoZSBvdGhlcnM/ICovCi0JCXByaXYtPmhhc19td28gPSAoZmlybXZlciA+PSAweDYwMDAwKTsKLQkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7IC8qIERvbid0IHdvcmsgaW4gNy41MiA/ICovCi0JCXByaXYtPmlic3NfcG9ydCA9IDE7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4ODAwMGEpOwotCQlwcml2LT5kb19md19kb3dubG9hZCA9IDE7Ci0JCXByaXYtPmJyb2tlbl9tb25pdG9yID0gKGZpcm12ZXIgPj0gMHg4MDAwMCk7Ci0JCXByaXYtPmhhc19hbHRfdHhjbnRsID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLwotCQlwcml2LT5oYXNfZXh0X3NjYW4gPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCi0JCXByaXYtPmhhc193cGEgPSAoZmlybXZlciA+PSAweDkwMDJhKTsKLQkJLyogVGVzdGVkIHdpdGggQWdlcmUgZmlybXdhcmUgOgotCQkgKgkxLjE2IDsgNC4wOCA7IDQuNTIgOyA2LjA0IDsgNi4xNiA7IDcuMjggPT4gSmVhbiBJSQotCQkgKiBUZXN0ZWQgQ2FibGVUcm9uIGZpcm13YXJlIDogNC4zMiA9PiBBbnRvbiAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkvKiBTeW1ib2wgLCAzQ29tIEFpckNvbm5lY3QsIEludGVsLCBFcmljc3NvbiBXTEFOICovCi0JCS8qIEludGVsIE1BQyA6IDAwOjAyOkIzOiogKi8KLQkJLyogM0NvbSBNQUMgOiAwMDo1MDpEQToqICovCi0JCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKLQkJLyogR2V0IHRoZSBTeW1ib2wgZmlybXdhcmUgdmVyc2lvbiAqLwotCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCSAgICAgIEhFUk1FU19SSURfU0VDT05EQVJZVkVSU0lPTl9TWU1CT0wsCi0JCQkJICAgICAgU1lNQk9MX01BWF9WRVJfTEVOLCBOVUxMLCAmdG1wKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXJyb3IgJWQgcmVhZGluZyBTeW1ib2wgZmlybXdhcmUgaW5mby4gV2lsZGx5IGd1ZXNzaW5nIGNhcGFiaWxpdGllcy4uLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlmaXJtdmVyID0gMDsKLQkJCXRtcFswXSA9ICdcMCc7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBUaGUgZmlybXdhcmUgcmV2aXNpb24gaXMgYSBzdHJpbmcsIHRoZSBmb3JtYXQgaXMKLQkJCSAqIHNvbWV0aGluZyBsaWtlIDogIlYyLjIwLTAxIi4KLQkJCSAqIFF1aWNrIGFuZCBkaXJ0eSBwYXJzaW5nLi4uIC0gSmVhbiBJSQotCQkJICovCi0JCQlmaXJtdmVyID0gKCh0bXBbMV0gLSAnMCcpIDw8IDE2KSB8ICgodG1wWzNdIC0gJzAnKSA8PCAxMikKLQkJCQl8ICgodG1wWzRdIC0gJzAnKSA8PCA4KSB8ICgodG1wWzZdIC0gJzAnKSA8PCA0KQotCQkJCXwgKHRtcFs3XSAtICcwJyk7Ci0KLQkJCXRtcFtTWU1CT0xfTUFYX1ZFUl9MRU5dID0gJ1wwJzsKLQkJfQotCi0JCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCi0JCQkgIlN5bWJvbCAlcyIsIHRtcCk7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MTUwMTIpOwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDIwMDAwICYmIGZpcm12ZXIgPCAweDIyMDAwKSB8fCAKLQkJCSAgICAgICAoZmlybXZlciA+PSAweDI5MDAwICYmIGZpcm12ZXIgPCAweDMwMDAwKSB8fAotCQkJICAgICAgIGZpcm12ZXIgPj0gMHgzMTAwMDsKLQkJcHJpdi0+aGFzX3ByZWFtYmxlID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7Ci0JCXByaXYtPmlic3NfcG9ydCA9IDQ7Ci0KLQkJLyogU3ltYm9sIGZpcm13YXJlIGlzIGZvdW5kIG9uIHZhcmlvdXMgY2FyZHMsIGJ1dAotCQkgKiB0aGVyZSBoYXMgYmVlbiBubyBhdHRlbXB0IHRvIGNoZWNrIGZpcm13YXJlCi0JCSAqIGRvd25sb2FkIG9uIG5vbi1zcGVjdHJ1bV9jcyBiYXNlZCBjYXJkcy4KLQkJICoKLQkJICogR2l2ZW4gdGhhdCB0aGUgQWdlcmUgZmlybXdhcmUgZG93bmxvYWQgd29ya3MKLQkJICogZGlmZmVyZW50bHksIHdlIHNob3VsZCBhdm9pZCBkb2luZyBhIGZpcm13YXJlCi0JCSAqIGRvd25sb2FkIHdpdGggdGhlIFN5bWJvbCBhbGdvcml0aG0gb24gbm9uLXNwZWN0cnVtCi0JCSAqIGNhcmRzLgotCQkgKgotCQkgKiBGb3Igbm93IHdlIGNhbiBpZGVudGlmeSBhIHNwZWN0cnVtX2NzIGJhc2VkIGNhcmQKLQkJICogYmVjYXVzZSBpdCBoYXMgYSBmaXJtd2FyZSByZXNldCBmdW5jdGlvbi4KLQkJICovCi0JCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gKHByaXYtPnN0b3BfZncgIT0gTlVMTCk7Ci0KLSAJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IChmaXJtdmVyID09IDB4MjUwMTMpIHx8Ci0gCQkJCQkgICAoZmlybXZlciA+PSAweDMwMDAwICYmIGZpcm12ZXIgPD0gMHgzMTAwMCk7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MzEwMDEpIHx8Ci0JCQkJICAgICAoZmlybXZlciA+PSAweDI5MDU3ICYmIGZpcm12ZXIgPCAweDMwMDAwKTsKLQkJLyogVGVzdGVkIHdpdGggSW50ZWwgZmlybXdhcmUgOiAweDIwMDE1ID0+IEplYW4gSUkgKi8KLQkJLyogVGVzdGVkIHdpdGggM0NvbSBmaXJtd2FyZSA6IDB4MTUwMTIgJiAweDIyMDAxID0+IEplYW4gSUkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQkvKiBELUxpbmssIExpbmtzeXMsIEFkdHJvbiwgWm9vbUFpciwgYW5kIG1hbnkgb3RoZXJzLi4uCi0JCSAqIFNhbXN1bmcsIENvbXBhcSAxMDAvMjAwIGFuZCBQcm94aW0gYXJlIHNsaWdodGx5Ci0JCSAqIGRpZmZlcmVudCBhbmQgbGVzcyB3ZWxsIHRlc3RlZCAqLwotCQkvKiBELUxpbmsgTUFDIDogMDA6NDA6MDU6KiAqLwotCQkvKiBBZGR0cm9uIE1BQyA6IDAwOjkwOkQxOiogKi8KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiSW50ZXJzaWwgJWQuJWQuJWQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vciwKLQkJCSBzdGFfaWQudmFyaWFudCk7Ci0KLQkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwKLQkJCSgodW5zaWduZWQgbG9uZylzdGFfaWQubWlub3IgPDwgOCkgfCBzdGFfaWQudmFyaWFudDsKLQotCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsgLyogRklYTUUgKi8KLQkJcHJpdi0+aGFzX2JpZ193ZXAgPSBwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgwMDA4MDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDAwMDcwMCk7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MDEwMzAxKTsKLQotCQlpZiAoZmlybXZlciA+PSAweDAwMDgwMCkKLQkJCXByaXYtPmlic3NfcG9ydCA9IDA7Ci0JCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogSW50ZXJzaWwgZmlybXdhcmUgZWFybGllciAiCi0JCQkgICAgICAgInRoYW4gdjAuOC54IC0gc2V2ZXJhbCBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5pYnNzX3BvcnQgPSAxOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZpcm13YXJlIGRldGVybWluZWQgYXMgJXNcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgcHJpdi0+ZndfbmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBuaWNrYnVmOwotCXUxNiByZWNsZW47Ci0JaW50IGxlbjsKLQotCS8qIE5vIG5lZWQgdG8gbG9jaywgdGhlIGh3X3VuYXZhaWxhYmxlIGZsYWcgaXMgYWxyZWFkeSBzZXQgaW4KLQkgKiBhbGxvY19vcmlub2NvZGV2KCkgKi8KLQlwcml2LT5uaWNidWZfc2l6ZSA9IElFRUU4MDIxMV9NQVhfRlJBTUVfTEVOICsgRVRIX0hMRU47Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBmaXJtd2FyZSAqLwotCWVyciA9IGhlcm1lc19pbml0KGh3KTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZmlybXdhcmUgKGVyciA9ICVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocHJpdi0+ZG9fZndfZG93bmxvYWQpIHsKLSNpZmRlZiBDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKLQkJb3Jpbm9jb19jYWNoZV9mdyhwcml2LCAwKTsKLSNlbmRpZgotCi0JCWVyciA9IG9yaW5vY29fZG93bmxvYWQocHJpdik7Ci0JCWlmIChlcnIpCi0JCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7Ci0KLQkJLyogQ2hlY2sgZmlybXdhcmUgdmVyc2lvbiBhZ2FpbiAqLwotCQllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKLQkJaWYgKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChwcml2LT5oYXNfcG9ydDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQWQtaG9jIGRlbW8gbW9kZSBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7Ci0JaWYgKHByaXYtPmhhc19pYnNzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElFRUUgc3RhbmRhcmQgSUJTUyBhZC1ob2MgbW9kZSBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCWlmIChwcml2LT5oYXNfd2VwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV0VQIHN1cHBvcnRlZCwgIiwgZGV2LT5uYW1lKTsKLQkJaWYgKHByaXYtPmhhc19iaWdfd2VwKQotCQkJcHJpbnRrKCIxMDQtYml0IGtleVxuIik7Ci0JCWVsc2UKLQkJCXByaW50aygiNDAtYml0IGtleVxuIik7Ci0JfQotCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV1BBLVBTSyBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCWlmIChvcmlub2NvX21pY19pbml0KHByaXYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gc2V0dXAgTUlDIGNyeXB0byAiCi0JCQkgICAgICAgImFsZ29yaXRobS4gRGlzYWJsaW5nIFdQQSBzdXBwb3J0XG4iLCBkZXYtPm5hbWUpOwotCQkJcHJpdi0+aGFzX3dwYSA9IDA7Ci0JCX0KLQl9Ci0KLQkvKiBOb3cgd2UgaGF2ZSB0aGUgZmlybXdhcmUgY2FwYWJpbGl0aWVzLCBhbGxvY2F0ZSBhcHByb3BpYXRlCi0JICogc2l6ZWQgc2NhbiBidWZmZXJzICovCi0JaWYgKG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUocHJpdikpCi0JCWdvdG8gb3V0OwotCW9yaW5vY29fYnNzX2RhdGFfaW5pdChwcml2KTsKLQotCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgZGV2LT5kZXZfYWRkcik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3MhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgYWRkcmVzcyAlcE1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7Ci0KLQkvKiBHZXQgdGhlIHN0YXRpb24gbmFtZSAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKLQkJCSAgICAgIHNpemVvZihuaWNrYnVmKSwgJnJlY2xlbiwgJm5pY2tidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgc3RhdGlvbiBuYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChuaWNrYnVmLmxlbikKLQkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAoaW50KWxlMTZfdG9fY3B1KG5pY2tidWYubGVuKSk7Ci0JZWxzZQotCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIDIgKiByZWNsZW4pOwotCW1lbWNweShwcml2LT5uaWNrLCAmbmlja2J1Zi52YWwsIGxlbik7Ci0JcHJpdi0+bmlja1tsZW5dID0gJ1wwJzsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBuYW1lIFwiJXNcIlxuIiwgZGV2LT5uYW1lLCBwcml2LT5uaWNrKTsKLQotCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgTklDIGJ1ZmZlciFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgYWxsb3dlZCBjaGFubmVscyAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NIQU5ORUxMSVNULAotCQkJCSAgJnByaXYtPmNoYW5uZWxfbWFzayk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBjaGFubmVsIGxpc3QhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGluaXRpYWwgQVAgZGVuc2l0eSAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAotCQkJCSAgJnByaXYtPmFwX2RlbnNpdHkpOwotCWlmIChlcnIgfHwgcHJpdi0+YXBfZGVuc2l0eSA8IDEgfHwgcHJpdi0+YXBfZGVuc2l0eSA+IDMpIHsKLQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBSVFMgdGhyZXNob2xkICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAotCQkJCSAgJnByaXYtPnJ0c190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgUlRTIHRocmVzaG9sZCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBmcmFnbWVudGF0aW9uIHNldHRpbmdzICovCi0JaWYgKHByaXYtPmhhc19td28pCi0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICZwcml2LT5td29fcm9idXN0KTsKLQllbHNlCi0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgJnByaXYtPmZyYWdfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGZyYWdtZW50YXRpb24gc2V0dGluZ3MhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogUG93ZXIgbWFuYWdlbWVudCBzZXR1cCAqLwotCWlmIChwcml2LT5oYXNfcG0pIHsKLQkJcHJpdi0+cG1fb24gPSAwOwotCQlwcml2LT5wbV9tY2FzdCA9IDE7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKLQkJCQkJICAmcHJpdi0+cG1fcGVyaW9kKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QhXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKLQkJCQkJICAmcHJpdi0+cG1fdGltZW91dCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgdGltZW91dCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JLyogUHJlYW1ibGUgc2V0dXAgKi8KLQlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAotCQkJCQkgICZwcml2LT5wcmVhbWJsZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0JCQotCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7Ci0JLyogQnkgZGVmYXVsdCB1c2UgSUVFRS9JQlNTIGFkLWhvYyBtb2RlIGlmIHdlIGhhdmUgaXQgKi8KLQlwcml2LT5wcmVmZXJfcG9ydDMgPSBwcml2LT5oYXNfcG9ydDMgJiYgKCEgcHJpdi0+aGFzX2lic3MpOwotCXNldF9wb3J0X3R5cGUocHJpdik7Ci0JcHJpdi0+Y2hhbm5lbCA9IDA7IC8qIHVzZSBmaXJtd2FyZSBkZWZhdWx0ICovCi0KLQlwcml2LT5wcm9taXNjdW91cyA9IDA7Ci0JcHJpdi0+ZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQlwcml2LT50eF9rZXkgPSAwOwotCXByaXYtPndwYV9lbmFibGVkID0gMDsKLQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7Ci0JcHJpdi0+a2V5X21nbXQgPSAwOwotCXByaXYtPndwYV9pZV9sZW4gPSAwOwotCXByaXYtPndwYV9pZSA9IE5VTEw7Ci0KLQkvKiBNYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUsIGFzIGxvbmcgYXMgaXQgaGFzbid0IGJlZW4KLQkgKiByZW1vdmVkIGVsc2V3aGVyZSAoZS5nLiBieSBQQ01DSUEgaG90IHVucGx1ZykgKi8KLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwotCi0gb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0cnVjdCBuZXRfZGV2aWNlCi0qYWxsb2Nfb3Jpbm9jb2RldihpbnQgc2l6ZW9mX2NhcmQsCi0JCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkgIGludCAoKmhhcmRfcmVzZXQpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiksCi0JCSAgaW50ICgqc3RvcF9mdykoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLCBpbnQpKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKLQotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSArIHNpemVvZl9jYXJkKTsKLQlpZiAoISBkZXYpCi0JCXJldHVybiBOVUxMOwotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPm5kZXYgPSBkZXY7Ci0JaWYgKHNpemVvZl9jYXJkKQotCQlwcml2LT5jYXJkID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcHJpdgotCQkJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpKTsKLQllbHNlCi0JCXByaXYtPmNhcmQgPSBOVUxMOwotCXByaXYtPmRldiA9IGRldmljZTsKLQotCS8qIFNldHVwIC8gb3ZlcnJpZGUgbmV0X2RldmljZSBmaWVsZHMgKi8KLQlkZXYtPmluaXQgPSBvcmlub2NvX2luaXQ7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBvcmlub2NvX3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gb3Jpbm9jb190eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsgLyogMSBzZWNvbmQgdGltZW91dCAqLwotCWRldi0+Z2V0X3N0YXRzID0gb3Jpbm9jb19nZXRfc3RhdHM7Ci0JZGV2LT5ldGh0b29sX29wcyA9ICZvcmlub2NvX2V0aHRvb2xfb3BzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm9yaW5vY29faGFuZGxlcl9kZWY7Ci0jaWZkZWYgV0lSRUxFU1NfU1BZCi0JcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5zcHlfZGF0YTsKLQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKLSNlbmRpZgotCWRldi0+Y2hhbmdlX210dSA9IG9yaW5vY29fY2hhbmdlX210dTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0OwotCS8qIHdlIHVzZSB0aGUgZGVmYXVsdCBldGhfbWFjX2FkZHIgZm9yIHNldHRpbmcgdGhlIE1BQyBhZGRyICovCi0KLQkvKiBSZXNlcnZlIHNwYWNlIGluIHNrYiBmb3IgdGhlIFNOQVAgaGVhZGVyICovCi0JZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gRU5DQVBTX09WRVJIRUFEOwotCi0JLyogU2V0IHVwIGRlZmF1bHQgY2FsbGJhY2tzICovCi0JZGV2LT5vcGVuID0gb3Jpbm9jb19vcGVuOwotCWRldi0+c3RvcCA9IG9yaW5vY29fc3RvcDsKLQlwcml2LT5oYXJkX3Jlc2V0ID0gaGFyZF9yZXNldDsKLQlwcml2LT5zdG9wX2Z3ID0gc3RvcF9mdzsKLQotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlwcml2LT5vcGVuID0gMDsKLQlwcml2LT5od191bmF2YWlsYWJsZSA9IDE7IC8qIG9yaW5vY29faW5pdCgpIG11c3QgY2xlYXIgdGhpcwotCQkJCSAgICogYmVmb3JlIGFueXRoaW5nIGVsc2UgdG91Y2hlcyB0aGUKLQkJCQkgICAqIGhhcmR3YXJlICovCi0JSU5JVF9XT1JLKCZwcml2LT5yZXNldF93b3JrLCBvcmlub2NvX3Jlc2V0KTsKLQlJTklUX1dPUksoJnByaXYtPmpvaW5fd29yaywgb3Jpbm9jb19qb2luX2FwKTsKLQlJTklUX1dPUksoJnByaXYtPndldmVudF93b3JrLCBvcmlub2NvX3NlbmRfd2V2ZW50cyk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfbGlzdCk7Ci0JdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBvcmlub2NvX3J4X2lzcl90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOwotCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7Ci0KLQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKLQlwcml2LT5jYWNoZWRfZncgPSBOVUxMOwotCi0JLyogUmVnaXN0ZXIgUE0gbm90aWZpZXJzICovCi0Jb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKLQotCXJldHVybiBkZXY7Ci19Ci0KLXZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7Ci0KLQkvKiBJZiB0aGUgdGFza2xldCBpcyBzY2hlZHVsZWQgd2hlbiB3ZSBjYWxsIHRhc2tsZXRfa2lsbCBpdAotCSAqIHdpbGwgcnVuIG9uZSBmaW5hbCB0aW1lLiBIb3dldmVyIHRoZSB0YXNrbGV0IHdpbGwgb25seQotCSAqIGRyYWluIHByaXYtPnJ4X2xpc3QgaWYgdGhlIGh3IGlzIHN0aWxsIGF2YWlsYWJsZS4gKi8KLQl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCi0JLyogRXhwbGljaXRseSBkcmFpbiBwcml2LT5yeF9saXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKLQotCQlkZXZfa2ZyZWVfc2tiKHJ4X2RhdGEtPnNrYik7Ci0JCWtmcmVlKHJ4X2RhdGEtPmRlc2MpOwotCQlrZnJlZShyeF9kYXRhKTsKLQl9Ci0KLQlvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7Ci0Jb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpOwotCi0JcHJpdi0+d3BhX2llX2xlbiA9IDA7Ci0Ja2ZyZWUocHJpdi0+d3BhX2llKTsKLQlvcmlub2NvX21pY19mcmVlKHByaXYpOwotCW9yaW5vY29fYnNzX2RhdGFfZnJlZShwcml2KTsKLQlmcmVlX25ldGRldihkZXYpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBXaXJlbGVzcyBleHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJldHVybiA6IDwgMCAtPiBlcnJvciBjb2RlIDsgPj0gMCAtPiBsZW5ndGggKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19od19nZXRfZXNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICphY3RpdmUsCi0JCQkJY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMV0pCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgZXNzaWRidWY7Ci0JY2hhciAqcCA9IChjaGFyICopKCZlc3NpZGJ1Zi52YWwpOwotCWludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA+IDApIHsKLQkJLyogV2UgcmVhZCB0aGUgZGVzaXJlZCBTU0lEIGZyb20gdGhlIGhhcmR3YXJlIHJhdGhlcgotCQkgICB0aGFuIGZyb20gcHJpdi0+ZGVzaXJlZF9lc3NpZCwganVzdCBpbiBjYXNlIHRoZQotCQkgICBmaXJtd2FyZSBpcyBhbGxvd2VkIHRvIGNoYW5nZSBpdCBvbiB1cy4gSSdtIG5vdAotCQkgICBzdXJlIGFib3V0IHRoaXMgKi8KLQkJLyogTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgT1dOU1NJRCBzaG91bGQgYWx3YXlzIGJlIHdoYXRldmVyCi0JCSAqIHdlIHNldCB0byB0aGUgY2FyZCwgd2hlcmVhcyBDVVJSRU5UX1NTSUQgaXMgdGhlIG9uZSB0aGF0Ci0JCSAqIG1heSBjaGFuZ2UuLi4gLSBKZWFuIElJICovCi0JCXUxNiByaWQ7Ci0KLQkJKmFjdGl2ZSA9IDE7Ci0KLQkJcmlkID0gKHByaXYtPnBvcnRfdHlwZSA9PSAzKSA/IEhFUk1FU19SSURfQ05GT1dOU1NJRCA6Ci0JCQlIRVJNRVNfUklEX0NORkRFU0lSRURTU0lEOwotCQkKLQkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBzaXplb2YoZXNzaWRidWYpLAotCQkJCSAgICAgIE5VTEwsICZlc3NpZGJ1Zik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZhaWxfdW5sb2NrOwotCX0gZWxzZSB7Ci0JCSphY3RpdmUgPSAwOwotCi0JCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVFNTSUQsCi0JCQkJICAgICAgc2l6ZW9mKGVzc2lkYnVmKSwgTlVMTCwgJmVzc2lkYnVmKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbF91bmxvY2s7Ci0JfQotCi0JbGVuID0gbGUxNl90b19jcHUoZXNzaWRidWYubGVuKTsKLQlCVUdfT04obGVuID4gSVdfRVNTSURfTUFYX1NJWkUpOwotCi0JbWVtc2V0KGJ1ZiwgMCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCW1lbWNweShidWYsIHAsIGxlbik7Ci0JZXJyID0gbGVuOwotCi0gZmFpbF91bmxvY2s6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7ICAgICAgIAotfQotCi1zdGF0aWMgbG9uZyBvcmlub2NvX2h3X2dldF9mcmVxKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JCi0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiBjaGFubmVsOwotCWxvbmcgZnJlcSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRDSEFOTkVMLCAmY2hhbm5lbCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQkvKiBJbnRlcnNpbCBmaXJtd2FyZSAxLjMuNSByZXR1cm5zIDAgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoY2hhbm5lbCA9PSAwKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCAoY2hhbm5lbCA8IDEpIHx8IChjaGFubmVsID4gTlVNX0NIQU5ORUxTKSApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENoYW5uZWwgb3V0IG9mIHJhbmdlICglZCkhXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgY2hhbm5lbCk7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0KLQl9Ci0JZnJlcSA9IGNoYW5uZWxfZnJlcXVlbmN5W2NoYW5uZWwtMV0gKiAxMDAwMDA7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCWlmIChlcnIgPiAwKQotCQllcnIgPSAtRUJVU1k7Ci0JcmV0dXJuIGVyciA/IGVyciA6IGZyZXE7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICBpbnQgKm51bXJhdGVzLCBzMzIgKnJhdGVzLCBpbnQgbWF4KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGxpc3Q7Ci0JdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopJmxpc3QudmFsOwotCWludCBlcnIgPSAwOwotCWludCBudW07Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVVBQT1JURUREQVRBUkFURVMsCi0JCQkgICAgICBzaXplb2YobGlzdCksIE5VTEwsICZsaXN0KTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQkKLQludW0gPSBsZTE2X3RvX2NwdShsaXN0Lmxlbik7Ci0JKm51bXJhdGVzID0gbnVtOwotCW51bSA9IG1pbihudW0sIG1heCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJcmF0ZXNbaV0gPSAocFtpXSAmIDB4N2YpICogNTAwMDAwOyAvKiBjb252ZXJ0IHRvIGJwcyAqLwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBjaGFyICpuYW1lLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbnVtcmF0ZXM7Ci0JaW50IGVycjsKLQotCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywgTlVMTCwgMCk7Ci0KLQlpZiAoIWVyciAmJiAobnVtcmF0ZXMgPiAyKSkKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKLQllbHNlCi0JCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBjb25zdCB1OCBvZmZfYWRkcltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IHU4IGFueV9hZGRyW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogRW5hYmxlIGF1dG9tYXRpYyByb2FtaW5nIC0gbm8gc2FuaXR5IGNoZWNrcyBhcmUgbmVlZGVkICovCi0JaWYgKG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgb2ZmX2FkZHIsIEVUSF9BTEVOKSA9PSAwIHx8Ci0JICAgIG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgYW55X2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCXByaXYtPmJzc2lkX2ZpeGVkID0gMDsKLQkJbWVtc2V0KHByaXYtPmRlc2lyZWRfYnNzaWQsIDAsIEVUSF9BTEVOKTsKLQotCQkvKiAib2ZmIiBtZWFucyBrZWVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gKi8KLQkJaWYgKGFwX2FkZHItPnNhX2RhdGFbMF0gPT0gMCkgewotCQkJX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7Ci0JCQllcnIgPSAwOwotCQl9Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEx1Y2VudC9BZ2VyZSBmaXJtd2FyZSBkb2Vzbid0ICIKLQkJICAgICAgICJzdXBwb3J0IG1hbnVhbCByb2FtaW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1hbnVhbCByb2FtaW5nIHN1cHBvcnRlZCBvbmx5IGluICIKLQkJICAgICAgICJtYW5hZ2VkIG1vZGVcbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBJbnRlcnNpbCBmaXJtd2FyZSBoYW5ncyB3aXRob3V0IERlc2lyZWQgRVNTSUQgKi8KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMICYmCi0JICAgIHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEZXNpcmVkIEVTU0lEIG11c3QgYmUgc2V0IGZvciAiCi0JCSAgICAgICAibWFudWFsIHJvYW1pbmdcbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBGaW5hbGx5LCBlbmFibGUgbWFudWFsIHJvYW1pbmcgKi8KLQlwcml2LT5ic3NpZF9maXhlZCA9IDE7Ci0JbWVtY3B5KHByaXYtPmRlc2lyZWRfYnNzaWQsICZhcF9hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAotCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGFwX2FkZHItPnNhX2RhdGEpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHUzMiAqbW9kZSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gKm1vZGUpCi0JCXJldHVybiAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKCptb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgotCQlpZiAoIXByaXYtPmhhc19pYnNzICYmICFwcml2LT5oYXNfcG9ydDMpCi0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19NT0RFX01PTklUT1I6Ci0JCWlmIChwcml2LT5icm9rZW5fbW9uaXRvciAmJiAhZm9yY2VfbW9uaXRvcikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1vbml0b3IgbW9kZSBzdXBwb3J0IGlzICIKLQkJCSAgICAgICAiYnVnZ3kgaW4gdGhpcyBmaXJtd2FyZSwgbm90IGVuYWJsaW5nXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgewotCQlwcml2LT5pd19tb2RlID0gKm1vZGU7Ci0JCXNldF9wb3J0X3R5cGUocHJpdik7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHUzMiAqbW9kZSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkqbW9kZSA9IHByaXYtPml3X21vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBpd19wb2ludCAqcnJxLAotCQkJCSAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKLQlpbnQgbnVtcmF0ZXM7Ci0JaW50IGksIGs7Ci0KLQlycnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjI7Ci0KLQkvKiBTZXQgYXZhaWxhYmxlIGNoYW5uZWxzL2ZyZXF1ZW5jaWVzICovCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKLQlrID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKLQkJaWYgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IGkpKSB7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5pID0gaSArIDE7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbaV0gKiAxMDAwMDA7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5lID0gMTsKLQkJCWsrKzsKLQkJfQotCQkKLQkJaWYgKGsgPj0gSVdfTUFYX0ZSRVFVRU5DSUVTKQotCQkJYnJlYWs7Ci0JfQotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKLQlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOwotCi0JaWYgKHByaXYtPmhhc193ZXApIHsKLQkJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBPUklOT0NPX01BWF9LRVlTOwotCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IFNNQUxMX0tFWV9TSVpFOwotCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMTsKLQotCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApIHsKLQkJCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gTEFSR0VfS0VZX1NJWkU7Ci0JCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5oYXNfd3BhKQotCQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUDsKLQotCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAoIVNQWV9OVU1CRVIocHJpdikpKXsKLQkJLyogUXVhbGl0eSBzdGF0cyBtZWFuaW5nbGVzcyBpbiBhZC1ob2MgbW9kZSAqLwotCX0gZWxzZSB7Ci0JCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMHg4YiAtIDB4MmY7Ci0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDB4MmYgLSAweDk1IC0gMTsKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMHgyZiAtIDB4OTUgLSAxOwotCQkvKiBOZWVkIHRvIGdldCBiZXR0ZXIgdmFsdWVzICovCi0JCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMHgyNDsKLQkJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMHhDMjsKLQkJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMHg5RTsKLQl9Ci0KLQllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsCi0JCQkJCSByYW5nZS0+Yml0cmF0ZSwgSVdfTUFYX0JJVFJBVEVTKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBudW1yYXRlczsKLQotCS8qIFNldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBtYXggVENQIHRocm91Z2hwdXQgaW4gYml0L3MgdGhhdCB3ZSBjYW4KLQkgKiBleHBlY3QgdXNpbmcgdGhpcyBpbnRlcmZhY2UuIE1heSBiZSB1c2UgZm9yIFFvUyBzdHVmZi4uLgotCSAqIEplYW4gSUkgKi8KLQlpZiAobnVtcmF0ZXMgPiAyKQotCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsJLyogfjUgTWIvcyAqLwotCWVsc2UKLQkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjUgKiAxMDAwICogMTAwMDsJLyogfjEuNSBNYi9zICovCi0KLQlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0JcmFuZ2UtPm1pbl9wbXAgPSAwOwotCXJhbmdlLT5tYXhfcG1wID0gNjU1MzUwMDA7Ci0JcmFuZ2UtPm1pbl9wbXQgPSAwOwotCXJhbmdlLT5tYXhfcG10ID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KLQlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOwotCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwotCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8IElXX1BPV0VSX1VOSUNBU1RfUjsKLQotCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MSUZFVElNRTsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cl90aW1lX2ZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7Ci0JcmFuZ2UtPm1pbl9yZXRyeSA9IDA7Ci0JcmFuZ2UtPm1heF9yZXRyeSA9IDY1NTM1OwkvKiA/Pz8gKi8KLQlyYW5nZS0+bWluX3JfdGltZSA9IDA7Ci0JcmFuZ2UtPm1heF9yX3RpbWUgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLwotCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKLQkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9FU1NJRDsKLQllbHNlCi0JCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfTk9ORTsKLQotCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGtlcm5lbCkgKi8KLQlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOwotCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGRyaXZlcikgKi8KLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1RIUlNQWSk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdBUCk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdTQ0FOKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgSVdFVlRYRFJPUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCi0JCQkJICAgICBjaGFyICprZXlidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQlpbnQgc2V0aW5kZXggPSBwcml2LT50eF9rZXk7Ci0JaW50IGVuY29kZV9hbGcgPSBwcml2LT5lbmNvZGVfYWxnOwotCWludCByZXN0cmljdGVkID0gcHJpdi0+d2VwX3Jlc3RyaWN0OwotCXUxNiB4bGVuID0gMDsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBwcml2LT5oYXNfd2VwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoZXJxLT5wb2ludGVyKSB7Ci0JCS8qIFdlIGFjdHVhbGx5IGhhdmUgYSBrZXkgdG8gc2V0IC0gY2hlY2sgaXRzIGxlbmd0aCAqLwotCQlpZiAoZXJxLT5sZW5ndGggPiBMQVJHRV9LRVlfU0laRSkKLQkJCXJldHVybiAtRTJCSUc7Ci0KLQkJaWYgKCAoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkgJiYgIXByaXYtPmhhc19iaWdfd2VwICkKLQkJCXJldHVybiAtRTJCSUc7Ci0JfQotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBDbGVhciBhbnkgVEtJUCBrZXkgd2UgaGF2ZSAqLwotCWlmICgocHJpdi0+aGFzX3dwYSkgJiYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSkKLQkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgc2V0aW5kZXgpOwotCi0JaWYgKGVycS0+bGVuZ3RoID4gMCkgewotCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQotCQkJaW5kZXggPSBwcml2LT50eF9rZXk7Ci0KLQkJLyogQWRqdXN0IGtleSBsZW5ndGggdG8gYSBzdXBwb3J0ZWQgdmFsdWUgKi8KLQkJaWYgKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpIHsKLQkJCXhsZW4gPSBMQVJHRV9LRVlfU0laRTsKLQkJfSBlbHNlIGlmIChlcnEtPmxlbmd0aCA+IDApIHsKLQkJCXhsZW4gPSBTTUFMTF9LRVlfU0laRTsKLQkJfSBlbHNlCi0JCQl4bGVuID0gMDsKLQotCQkvKiBTd2l0Y2ggb24gV0VQIGlmIG9mZiAqLwotCQlpZiAoKGVuY29kZV9hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApICYmICh4bGVuID4gMCkpIHsKLQkJCXNldGluZGV4ID0gaW5kZXg7Ci0JCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19XRVA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJbXBvcnRhbnQgbm90ZSA6IGlmIHRoZSB1c2VyIGRvICJpd2NvbmZpZyBldGgwIGVuYyBvZmYiLAotCQkgKiB3ZSB3aWxsIGFycml2ZSB0aGVyZSB3aXRoIGFuIGluZGV4IG9mIC0xLiBUaGlzIGlzIHZhbGlkCi0JCSAqIGJ1dCBuZWVkIHRvIGJlIHRha2VuIGNhcmUgb2ZmLi4uIEplYW4gSUkgKi8KLQkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkgewotCQkJaWYoKGluZGV4ICE9IC0xKSB8fCAoZXJxLT5mbGFncyA9PSAwKSkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXQgdGhlIGluZGV4IDogQ2hlY2sgdGhhdCB0aGUga2V5IGlzIHZhbGlkICovCi0JCQlpZihwcml2LT5rZXlzW2luZGV4XS5sZW4gPT0gMCkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlzZXRpbmRleCA9IGluZGV4OwotCQl9Ci0JfQotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7Ci0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKLQkJcmVzdHJpY3RlZCA9IDA7Ci0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKLQkJcmVzdHJpY3RlZCA9IDE7Ci0KLQlpZiAoZXJxLT5wb2ludGVyICYmIGVycS0+bGVuZ3RoID4gMCkgewotCQlwcml2LT5rZXlzW2luZGV4XS5sZW4gPSBjcHVfdG9fbGUxNih4bGVuKTsKLQkJbWVtc2V0KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIDAsCi0JCSAgICAgICBzaXplb2YocHJpdi0+a2V5c1tpbmRleF0uZGF0YSkpOwotCQltZW1jcHkocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwga2V5YnVmLCBlcnEtPmxlbmd0aCk7Ci0JfQotCXByaXYtPnR4X2tleSA9IHNldGluZGV4OwotCi0JLyogVHJ5IGZhc3Qga2V5IGNoYW5nZSBpZiBjb25uZWN0ZWQgYW5kIG9ubHkga2V5cyBhcmUgY2hhbmdlZCAqLwotCWlmICgocHJpdi0+ZW5jb2RlX2FsZyA9PSBlbmNvZGVfYWxnKSAmJgotCSAgICAocHJpdi0+d2VwX3Jlc3RyaWN0ID09IHJlc3RyaWN0ZWQpICYmCi0JICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKLQkJLyogTm8gbmVlZCB0byBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwcml2LT5lbmNvZGVfYWxnID0gZW5jb2RlX2FsZzsKLQlwcml2LT53ZXBfcmVzdHJpY3QgPSByZXN0cmljdGVkOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgICAgIGNoYXIgKmtleWJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCXUxNiB4bGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEgcHJpdi0+aGFzX3dlcCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQotCQlpbmRleCA9IHByaXYtPnR4X2tleTsKLQotCWVycS0+ZmxhZ3MgPSAwOwotCWlmICghcHJpdi0+ZW5jb2RlX2FsZykKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JZXJxLT5mbGFncyB8PSBpbmRleCArIDE7Ci0KLQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOwotCWVsc2UKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKLQotCXhsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2luZGV4XS5sZW4pOwotCi0JZXJxLT5sZW5ndGggPSB4bGVuOwotCi0JbWVtY3B5KGtleWJ1ZiwgcHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCi0JCQkJICBjaGFyICplc3NpZGJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTm90ZSA6IEVTU0lEIGlzIGlnbm9yZWQgaW4gQWQtSG9jIGRlbW8gbW9kZSwgYnV0IHdlIGNhbiBzZXQgaXQKLQkgKiBhbnl3YXkuLi4gLSBKZWFuIElJICovCi0KLQkvKiBIdW0uLi4gU2hvdWxkIG5vdCB1c2UgV2lyZWxlc3MgRXh0ZW5zaW9uIGNvbnN0YW50IChtYXkgY2hhbmdlKSwKLQkgKiBzaG91bGQgdXNlIG91ciBvd24uLi4gLSBKZWFuIElJICovCi0JaWYgKGVycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCi0JCXJldHVybiAtRTJCSUc7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIE5VTEwgdGhlIHN0cmluZyAoZm9yIE5VTEwgdGVybWluYXRpb24gJiBFU1NJRCA9IEFOWSkgLSBKZWFuIElJICovCi0JbWVtc2V0KHByaXYtPmRlc2lyZWRfZXNzaWQsIDAsIHNpemVvZihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7Ci0KLQkvKiBJZiBub3QgQU5ZLCBnZXQgdGhlIG5ldyBFU1NJRCAqLwotCWlmIChlcnEtPmZsYWdzKSB7Ci0JCW1lbWNweShwcml2LT5kZXNpcmVkX2Vzc2lkLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgIGNoYXIgKmVzc2lkYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBhY3RpdmU7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZXJyID0gb3Jpbm9jb19od19nZXRfZXNzaWQocHJpdiwgJmFjdGl2ZSwgZXNzaWRidWYpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWVycS0+bGVuZ3RoID0gZXJyOwotCX0gZWxzZSB7Ci0JCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJbWVtY3B5KGVzc2lkYnVmLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0JCWVycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpOwotCQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCX0KLQotCWVycS0+ZmxhZ3MgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAotCQkJCSBjaGFyICpuaWNrYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobnJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKLQkJcmV0dXJuIC1FMkJJRzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbWVtc2V0KHByaXYtPm5pY2ssIDAsIHNpemVvZihwcml2LT5uaWNrKSk7Ci0JbWVtY3B5KHByaXYtPm5pY2ssIG5pY2tidWYsIG5ycS0+bGVuZ3RoKTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKLQkJCQkgY2hhciAqbmlja2J1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZW1jcHkobmlja2J1ZiwgcHJpdi0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlucnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgY2hhbiA9IC0xOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQotCS8qIEluIGluZnJhc3RydWN0dXJlIG1vZGUgdGhlIEFQIHNldHMgdGhlIGNoYW5uZWwgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKCAoZnJxLT5lID09IDApICYmIChmcnEtPm0gPD0gMTAwMCkgKSB7Ci0JCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KLQkJY2hhbiA9IGZycS0+bTsKLQl9IGVsc2UgewotCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAtIHNlYXJjaCB0aGUgdGFibGUgKi8KLQkJaW50IG11bHQgPSAxOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgKDYgLSBmcnEtPmUpOyBpKyspCi0JCQltdWx0ICo9IDEwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykKLQkJCWlmIChmcnEtPm0gPT0gKGNoYW5uZWxfZnJlcXVlbmN5W2ldICogbXVsdCkpCi0JCQkJY2hhbiA9IGkrMTsKLQl9Ci0KLQlpZiAoIChjaGFuIDwgMSkgfHwgKGNoYW4gPiBOVU1fQ0hBTk5FTFMpIHx8Ci0JICAgICAhIChwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCAoY2hhbi0xKSkgKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlwcml2LT5jaGFubmVsID0gY2hhbjsKLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJLyogRmFzdCBjaGFubmVsIGNoYW5nZSAtIG5vIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCi0JCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8Ci0JCQkJCSAgICBIRVJNRVNfVEVTVF9TRVRfQ0hBTk5FTCwKLQkJCQkJY2hhbiwgTlVMTCk7Ci0JfQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdG1wOwotCi0JLyogTG9ja2luZyBkb25lIGluIHRoZXJlICovCi0JdG1wID0gb3Jpbm9jb19od19nZXRfZnJlcShwcml2KTsKLQlpZiAodG1wIDwgMCkgewotCQlyZXR1cm4gdG1wOwotCX0KLQotCWZycS0+bSA9IHRtcDsKLQlmcnEtPmUgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JdTE2IHZhbDsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXByaXYtPmhhc19zZW5zaXRpdml0eSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLCAmdmFsKTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXNycS0+dmFsdWUgPSB2YWw7Ci0Jc3JxLT5maXhlZCA9IDA7IC8qIGF1dG8gKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9IHNycS0+dmFsdWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoKHZhbCA8IDEpIHx8ICh2YWwgPiAzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JcHJpdi0+YXBfZGVuc2l0eSA9IHZhbDsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9IHJycS0+dmFsdWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChycnEtPmRpc2FibGVkKQotCQl2YWwgPSAyMzQ3OwotCi0JaWYgKCAodmFsIDwgMCkgfHwgKHZhbCA+IDIzNDcpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXByaXYtPnJ0c190aHJlc2ggPSB2YWw7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcnJxLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2g7Ci0JcnJxLT5kaXNhYmxlZCA9IChycnEtPnZhbHVlID09IDIzNDcpOwotCXJycS0+Zml4ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwcml2LT5oYXNfbXdvKSB7Ci0JCWlmIChmcnEtPmRpc2FibGVkKQotCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDA7Ci0JCWVsc2UgewotCQkJaWYgKGZycS0+Zml4ZWQpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZpeGVkIGZyYWdtZW50YXRpb24gaXMgIgotCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBvbiB0aGlzIGZpcm13YXJlLiAiCi0JCQkJICAgICAgICJVc2luZyBNV08gcm9idXN0IGluc3RlYWQuXG4iLCBkZXYtPm5hbWUpOwotCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoZnJxLT5kaXNhYmxlZCkKLQkJCXByaXYtPmZyYWdfdGhyZXNoID0gMjM0NjsKLQkJZWxzZSB7Ci0JCQlpZiAoIChmcnEtPnZhbHVlIDwgMjU2KSB8fCAoZnJxLT52YWx1ZSA+IDIzNDYpICkKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJZWxzZQotCQkJCXByaXYtPmZyYWdfdGhyZXNoID0gZnJxLT52YWx1ZSAmIH4weDE7IC8qIG11c3QgYmUgZXZlbiAqLwotCQl9Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQl1MTYgdmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQlpZiAocHJpdi0+aGFzX213bykgewotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAmdmFsKTsKLQkJaWYgKGVycikKLQkJCXZhbCA9IDA7Ci0KLQkJZnJxLT52YWx1ZSA9IHZhbCA/IDIzNDcgOiAwOwotCQlmcnEtPmRpc2FibGVkID0gISB2YWw7Ci0JCWZycS0+Zml4ZWQgPSAwOwotCX0gZWxzZSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgJnZhbCk7Ci0JCWlmIChlcnIpCi0JCQl2YWwgPSAwOwotCi0JCWZycS0+dmFsdWUgPSB2YWw7Ci0JCWZycS0+ZGlzYWJsZWQgPSAodmFsID49IDIzNDYpOwotCQlmcnEtPmZpeGVkID0gMTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmF0ZW1vZGUgPSAtMTsKLQlpbnQgYml0cmF0ZTsgLyogMTAwcyBvZiBraWxvYml0cyAqLwotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JLyogQXMgdGhlIHVzZXIgc3BhY2UgZG9lc24ndCBrbm93IG91ciBoaWdoZXN0IHJhdGUsIGl0IHVzZXMgLTEKLQkgKiB0byBhc2sgdXMgdG8gc2V0IHRoZSBoaWdoZXN0IHJhdGUuICBUZXN0IGl0IHVzaW5nICJpd2NvbmZpZwotCSAqIGV0aFggcmF0ZSBhdXRvIiAtIEplYW4gSUkgKi8KLQlpZiAocnJxLT52YWx1ZSA9PSAtMSkKLQkJYml0cmF0ZSA9IDExMDsKLQllbHNlIHsKLQkJaWYgKHJycS0+dmFsdWUgJSAxMDAwMDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYml0cmF0ZSA9IHJycS0+dmFsdWUgLyAxMDAwMDA7Ci0JfQotCi0JaWYgKCAoYml0cmF0ZSAhPSAxMCkgJiYgKGJpdHJhdGUgIT0gMjApICYmCi0JICAgICAoYml0cmF0ZSAhPSA1NSkgJiYgKGJpdHJhdGUgIT0gMTEwKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IEJJVFJBVEVfVEFCTEVfU0laRTsgaSsrKQotCQlpZiAoIChiaXRyYXRlX3RhYmxlW2ldLmJpdHJhdGUgPT0gYml0cmF0ZSkgJiYKLQkJICAgICAoYml0cmF0ZV90YWJsZVtpXS5hdXRvbWF0aWMgPT0gISBycnEtPmZpeGVkKSApIHsKLQkJCXJhdGVtb2RlID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCi0JaWYgKHJhdGVtb2RlID09IC0xKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCXByaXYtPmJpdHJhdGVtb2RlID0gcmF0ZW1vZGU7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHJhdGVtb2RlOwotCWludCBpOwotCXUxNiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmF0ZW1vZGUgPSBwcml2LT5iaXRyYXRlbW9kZTsKLQotCUJVR19PTigocmF0ZW1vZGUgPCAwKSB8fCAocmF0ZW1vZGUgPj0gQklUUkFURV9UQUJMRV9TSVpFKSk7Ci0KLQlycnEtPnZhbHVlID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYml0cmF0ZSAqIDEwMDAwMDsKLQlycnEtPmZpeGVkID0gISBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hdXRvbWF0aWM7Ci0JcnJxLT5kaXNhYmxlZCA9IDA7Ci0KLQkvKiBJZiB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcgd2UgdHJ5IHRvIGZpbmQgbW9yZSBhYm91dCB0aGUKLQkgICBjdXJyZW50IG1vZGUgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSwgJnZhbCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQkJCi0JCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEx1Y2VudCBzdHlsZSByYXRlICovCi0JCQkvKiBOb3RlIDogaW4gTHVjZW50IGZpcm13YXJlLCB0aGUgcmV0dXJuIHZhbHVlIG9mCi0JCQkgKiBIRVJNRVNfUklEX0NVUlJFTlRUWFJBVEUgaXMgdGhlIGJpdHJhdGUgaW4gTWIvcywKLQkJCSAqIGFuZCB0aGVyZWZvcmUgaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUKLQkJCSAqIGVuY29kaW5nIG9mIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTC4KLQkJCSAqIERvbid0IGZvcmdldCB0aGF0IDZNYi9zIGlzIHJlYWxseSA1LjVNYi9zICovCi0JCQlpZiAodmFsID09IDYpCi0JCQkJcnJxLT52YWx1ZSA9IDU1MDAwMDA7Ci0JCQllbHNlCi0JCQkJcnJxLT52YWx1ZSA9IHZhbCAqIDEwMDAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAvKiBJbnRlcnNpbCBzdHlsZSByYXRlICovCi0JCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSByYXRlICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspCi0JCQkJaWYgKGJpdHJhdGVfdGFibGVbaV0uaW50ZXJzaWxfdHhyYXRlY3RybCA9PSB2YWwpIHsKLQkJCQkJcmF0ZW1vZGUgPSBpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQlpZiAoaSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuYWJsZSB0byBkZXRlcm1pbmUgY3VycmVudCBiaXRyYXRlICgweCUwNGh4KVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCB2YWwpOwotCi0JCQlycnEtPnZhbHVlID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYml0cmF0ZSAqIDEwMDAwMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLQl9Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocHJxLT5kaXNhYmxlZCkgewotCQlwcml2LT5wbV9vbiA9IDA7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgewotCQljYXNlIElXX1BPV0VSX1VOSUNBU1RfUjoKLQkJCXByaXYtPnBtX21jYXN0ID0gMDsKLQkJCXByaXYtPnBtX29uID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIElXX1BPV0VSX0FMTF9SOgotCQkJcHJpdi0+cG1fbWNhc3QgPSAxOwotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfUE9XRVJfT046Ci0JCQkvKiBObyBmbGFncyA6IGJ1dCB3ZSBtYXkgaGF2ZSBhIHZhbHVlIC0gSmVhbiBJSSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJCi0JCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkgewotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJcHJpdi0+cG1fdGltZW91dCA9IHBycS0+dmFsdWUgLyAxMDAwOwotCQl9Ci0JCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKSB7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlwcml2LT5wbV9wZXJpb2QgPSBwcnEtPnZhbHVlIC8gMTAwMDsKLQkJfQotCQkvKiBJdCdzIHZhbGlkIHRvIG5vdCBoYXZlIGEgdmFsdWUgaWYgd2UgYXJlIGp1c3QgdG9nZ2xpbmcKLQkJICogdGhlIGZsYWdzLi4uIEplYW4gSUkgKi8KLQkJaWYoIXByaXYtPnBtX29uKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0JCQkKLQl9Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiBlbmFibGUsIHBlcmlvZCwgdGltZW91dCwgbWNhc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBNRU5BQkxFRCwgJmVuYWJsZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwgJnBlcmlvZCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sICZ0aW1lb3V0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsICZtY2FzdCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlwcnEtPmRpc2FibGVkID0gIWVuYWJsZTsKLQkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcGVyaW9kICovCi0JaWYgKChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVFlQRSkgPT0gSVdfUE9XRVJfVElNRU9VVCkgewotCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKLQkJcHJxLT52YWx1ZSA9IHRpbWVvdXQgKiAxMDAwOwotCX0gZWxzZSB7Ci0JCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7Ci0JCXBycS0+dmFsdWUgPSBwZXJpb2QgKiAxMDAwOwotCX0KLQlpZiAobWNhc3QpCi0JCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfQUxMX1I7Ci0JZWxzZQotCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX1VOSUNBU1RfUjsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCQkgICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLQlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JaW50IGlkeCwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JdTE2IGtleV9sZW47Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIERldGVybWluZSBhbmQgdmFsaWRhdGUgdGhlIGtleSBpbmRleCAqLwotCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4KSB7Ci0JCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQotCQkJZ290byBvdXQ7Ci0JCWlkeC0tOwotCX0gZWxzZQotCQlpZHggPSBwcml2LT50eF9rZXk7Ci0KLQlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQotCSAgICBhbGcgPSBJV19FTkNPREVfQUxHX05PTkU7Ci0KLQlpZiAocHJpdi0+aGFzX3dwYSAmJiAoYWxnICE9IElXX0VOQ09ERV9BTEdfVEtJUCkpIHsKLQkJLyogQ2xlYXIgYW55IFRLSVAgVFgga2V5IHdlIGhhZCAqLwotCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBwcml2LT50eF9rZXkpOwotCX0KLQotCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewotCQlwcml2LT50eF9rZXkgPSBpZHg7Ci0JCXNldF9rZXkgPSAoKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHx8Ci0JCQkgICAoZXh0LT5rZXlfbGVuID4gMCkpID8gMSA6IDA7Ci0JfQotCi0JaWYgKHNldF9rZXkpIHsKLQkJLyogU2V0IHRoZSByZXF1ZXN0ZWQga2V5IGZpcnN0ICovCi0JCXN3aXRjaCAoYWxnKSB7Ci0JCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgotCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKLQkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKLQkJCWlmIChleHQtPmtleV9sZW4gPiBTTUFMTF9LRVlfU0laRSkKLQkJCQlrZXlfbGVuID0gTEFSR0VfS0VZX1NJWkU7Ci0JCQllbHNlIGlmIChleHQtPmtleV9sZW4gPiAwKQotCQkJCWtleV9sZW4gPSBTTUFMTF9LRVlfU0laRTsKLQkJCWVsc2UKLQkJCQlnb3RvIG91dDsKLQotCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKLQkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSBjcHVfdG9fbGUxNihrZXlfbGVuKTsKLQotCQkJa2V5X2xlbiA9IG1pbihleHQtPmtleV9sZW4sIGtleV9sZW4pOwotCi0JCQltZW1zZXQocHJpdi0+a2V5c1tpZHhdLmRhdGEsIDAsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKLQkJCW1lbWNweShwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXksIGtleV9sZW4pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6Ci0JCXsKLQkJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQkJCXU4ICp0a2lwX2l2ID0gTlVMTDsKLQotCQkJaWYgKCFwcml2LT5oYXNfd3BhIHx8Ci0JCQkgICAgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihwcml2LT50a2lwX2tleVswXSkpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJbWVtc2V0KCZwcml2LT50a2lwX2tleVtpZHhdLCAwLAotCQkJICAgICAgIHNpemVvZihwcml2LT50a2lwX2tleVtpZHhdKSk7Ci0JCQltZW1jcHkoJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotCi0JCQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCkKLQkJCQl0a2lwX2l2ID0gJmV4dC0+cnhfc2VxWzBdOwotCi0JCQllcnIgPSBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGh3LCBpZHgsCi0JCQkJIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZLAotCQkJCSAodTggKikgJnByaXYtPnRraXBfa2V5W2lkeF0sCi0JCQkJIHRraXBfaXYsIE5VTEwpOwotCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFRLSVAga2V5IgotCQkJCSAgICAgICAiXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0KLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQllcnIgPSAtRUlOUFJPR1JFU1M7Ci0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IC1FSU5WQUw7Ci0JbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOwotCWlmIChtYXhfa2V5X2xlbiA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCWlmIChpZHgpIHsKLQkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCi0JCQlnb3RvIG91dDsKLQkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IHByaXYtPnR4X2tleTsKLQotCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7Ci0JbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKLQotCWV4dC0+YWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKLQlzd2l0Y2ggKHByaXYtPmVuY29kZV9hbGcpIHsKLQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKLQkJZXh0LT5rZXlfbGVuID0gMDsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKLQkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2lkeF0ubGVuKSwKLQkJCQkgICAgIG1heF9rZXlfbGVuKTsKLQkJbWVtY3B5KGV4dC0+a2V5LCBwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXlfbGVuKTsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKLQkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBzaXplb2Yoc3RydWN0IG9yaW5vY29fdGtpcF9rZXkpLAotCQkJCSAgICAgbWF4X2tleV9sZW4pOwotCQltZW1jcHkoZXh0LT5rZXksICZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleV9sZW4pOwotCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JCWJyZWFrOwotCX0KLQotCWVyciA9IDA7Ci0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUlOUFJPR1JFU1M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCS8qCi0JCSAqIG9yaW5vY28gZG9lcyBub3QgdXNlIHRoZXNlIHBhcmFtZXRlcnMKLQkJICovCi0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQkvKiB3bF9sa20gaW1wbGllcyB2YWx1ZSAyID09IFBTSyBmb3IgSGVybWVzIEkKLQkJICogd2hpY2ggdGllcyBpbiB3aXRoIFdFWFQKLQkJICogbm8gb3RoZXIgaGludHMgdGhvIDooCi0JCSAqLwotCQlwcml2LT5rZXlfbWdtdCA9IHBhcmFtLT52YWx1ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0JCS8qIFdoZW4gY291bnRlcm1lYXN1cmVzIGFyZSBlbmFibGVkLCBzaHV0IGRvd24gdGhlCi0JCSAqIGNhcmQ7IHdoZW4gZGlzYWJsZWQsIHJlLWVuYWJsZSB0aGUgY2FyZC4gVGhpcyBtdXN0Ci0JCSAqIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LgotCQkgKgotCQkgKiBUT0RPOiBNYWtlIHN1cmUgdGhhdCB0aGUgRUFQT0wgbWVzc2FnZSBpcyBnZXR0aW5nCi0JCSAqICAgICAgIG91dCBiZWZvcmUgY2FyZCBkaXNhYmxlZAotCQkgKi8KLQkJaWYgKHBhcmFtLT52YWx1ZSkgewotCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAxOwotCQkJcmV0ID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKLQkJCXJldCA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJCXByaXYtPndlcF9yZXN0cmljdCA9IDE7Ci0JCWVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQotCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMDsKLQkJZWxzZQotCQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCQlwcml2LT53cGFfZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSA/IDEgOiAwOwotCQl9IGVsc2UgewotCQkJaWYgKHBhcmFtLT52YWx1ZSkKLQkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCS8qIGVsc2Ugc2lsZW50bHkgYWNjZXB0IGRpc2FibGUgb2YgV1BBICovCi0JCQlwcml2LT53cGFfZW5hYmxlZCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQlwYXJhbS0+dmFsdWUgPSBwcml2LT5rZXlfbWdtdDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0JCXBhcmFtLT52YWx1ZSA9IHByaXYtPnRraXBfY21fYWN0aXZlOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKLQkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX1NIQVJFRF9LRVk7Ci0JCWVsc2UKLQkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJcGFyYW0tPnZhbHVlID0gcHJpdi0+d3BhX2VuYWJsZWQ7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCAqYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBjdXQgb2ZmIGF0IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKi8KLQlpZiAoKHdycXUtPmRhdGEubGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgfHwKLQkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIChleHRyYSA9PSBOVUxMKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7Ci0JCWJ1ZiA9IGttYWxsb2Mod3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQltZW1jcHkoYnVmLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOwotCX0gZWxzZQotCQlidWYgPSBOVUxMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlrZnJlZShwcml2LT53cGFfaWUpOwotCXByaXYtPndwYV9pZSA9IGJ1ZjsKLQlwcml2LT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0KLQlpZiAocHJpdi0+d3BhX2llKSB7Ci0JCS8qIExvb2tzIGxpa2Ugd2xfbGttIHdhbnRzIHRvIGNoZWNrIHRoZSBhdXRoIGFsZywgYW5kCi0JCSAqIHNvbWVob3cgcGFzcyBpdCB0byB0aGUgZmlybXdhcmUuCi0JCSAqIEluc3RlYWQgaXQganVzdCBjYWxscyB0aGUga2V5IG1nbXQgcmlkCi0JCSAqICAgLSB3ZSBkbyB0aGlzIGluIHNldCBhdXRoLgotCQkgKi8KLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoKHByaXYtPndwYV9pZV9sZW4gPT0gMCkgfHwgKHByaXYtPndwYV9pZSA9PSBOVUxMKSkgewotCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHByaXYtPndwYV9pZV9sZW4pIHsKLQkJZXJyID0gLUUyQklHOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3cnF1LT5kYXRhLmxlbmd0aCA9IHByaXYtPndwYV9pZV9sZW47Ci0JbWVtY3B5KGV4dHJhLCBwcml2LT53cGFfaWUsIHByaXYtPndwYV9pZV9sZW4pOwotCi1vdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKG1sbWUtPmNtZCkgewotCWNhc2UgSVdfTUxNRV9ERUFVVEg6Ci0JCS8qIHNpbGVudGx5IGlnbm9yZSAqLwotCQlicmVhazsKLQotCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKLQl7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBhZGRyW0VUSF9BTEVOXTsKLQkJCV9fbGUxNiByZWFzb25fY29kZTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOwotCi0JCW1lbWNweShidWYuYWRkciwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7Ci0JCWJ1Zi5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KG1sbWUtPnJlYXNvbl9jb2RlKTsKLQkJcmV0ID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZESVNBU1NPQ0lBVEUsCi0JCQkJCSAgJmJ1Zik7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiBzaG9ydF9saW1pdCwgbG9uZ19saW1pdCwgbGlmZXRpbWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NIT1JUUkVUUllMSU1JVCwKLQkJCQkgICZzaG9ydF9saW1pdCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9MT05HUkVUUllMSU1JVCwKLQkJCQkgICZsb25nX2xpbWl0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX01BWFRSQU5TTUlUTElGRVRJTUUsCi0JCQkJICAmbGlmZXRpbWUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JcnJxLT5kaXNhYmxlZCA9IDA7CQkvKiBDYW4ndCBiZSBkaXNhYmxlZCAqLwotCi0JLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHJldHJ5IG51bWJlciAqLwotCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7Ci0JCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKLQkJcnJxLT52YWx1ZSA9IGxpZmV0aW1lICogMTAwMDsJLyogPz8/ICovCi0JfSBlbHNlIHsKLQkJLyogQnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgbWluIG51bWJlciAqLwotCQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSkgewotCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKLQkJCXJycS0+dmFsdWUgPSBsb25nX2xpbWl0OwotCQl9IGVsc2UgewotCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCQkJcnJxLT52YWx1ZSA9IHNob3J0X2xpbWl0OwotCQkJaWYoc2hvcnRfbGltaXQgIT0gbG9uZ19saW1pdCkKLQkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOwotCQl9Ci0JfQotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHZvaWQgKndycXUsCi0JCQkgICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoISBjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKGluZm8tPmNtZCA9PSAoU0lPQ0lXRklSU1RQUklWICsgMHgxKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvcmNpbmcgcmVzZXQhXG4iLCBkZXYtPm5hbWUpOwotCi0JCS8qIEZpcm13YXJlIHJlc2V0ICovCi0JCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2Ugc2NoZWR1bGluZyByZXNldCFcbiIsIGRldi0+bmFtZSk7Ci0KLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHZvaWQgKndycXUsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWwgPSAqKCAoaW50ICopIGV4dHJhICk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcHJpdi0+aWJzc19wb3J0ID0gdmFsIDsKLQotCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KLQlzZXRfcG9ydF90eXBlKHByaXYpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwotCi0JKnZhbCA9IHByaXYtPmlic3NfcG9ydDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdm9pZCAqd3JxdSwKLQkJCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWwgPSAqKCAoaW50ICopIGV4dHJhICk7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIDA6IC8qIFRyeSB0byBkbyBJRUVFIGFkLWhvYyBtb2RlICovCi0JCWlmICghIHByaXYtPmhhc19pYnNzKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJpdi0+cHJlZmVyX3BvcnQzID0gMDsKLQkJCQotCQlicmVhazsKLQotCWNhc2UgMTogLyogVHJ5IHRvIGRvIEx1Y2VudCBwcm9wcmlldGFyeSBhZC1ob2MgbW9kZSAqLwotCQlpZiAoISBwcml2LT5oYXNfcG9ydDMpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAxOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0JaWYgKCEgZXJyKSB7Ci0JCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KLQkJc2V0X3BvcnRfdHlwZShwcml2KTsKLQkJZXJyID0gLUVJTlBST0dSRVNTOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cG9ydDMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB2b2lkICp3cnF1LAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwotCi0JKnZhbCA9IHByaXYtPnByZWZlcl9wb3J0MzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZhbDsKLQotCWlmICghIHByaXYtPmhhc19wcmVhbWJsZSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogODAyLjExYiBoYXMgcmVjZW50bHkgZGVmaW5lZCBzb21lIHNob3J0IHByZWFtYmxlLgotCSAqIEJhc2ljYWxseSwgdGhlIFBoeSBoZWFkZXIgaGFzIGJlZW4gcmVkdWNlZCBpbiBzaXplLgotCSAqIFRoaXMgaW5jcmVhc2UgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgYXQgaGlnaCByYXRlcwotCSAqICh0aGUgcHJlYW1ibGUgaXMgdHJhbnNtaXR0ZWQgYXQgMU1iL3MpLCB1bmZvcnR1bmF0ZWx5Ci0JICogdGhpcyBnaXZlIGNvbXBhdGliaWxpdHkgdHJvdWJsZXMuLi4gLSBKZWFuIElJICovCi0JdmFsID0gKiggKGludCAqKSBleHRyYSApOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAodmFsKQotCQlwcml2LT5wcmVhbWJsZSA9IDE7Ci0JZWxzZQotCQlwcml2LT5wcmVhbWJsZSA9IDA7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKLQotCWlmICghIHByaXYtPmhhc19wcmVhbWJsZSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JKnZhbCA9IHByaXYtPnByZWFtYmxlOwotCXJldHVybiAwOwotfQotCi0vKiBpb2N0bCBpbnRlcmZhY2UgdG8gaGVybWVzX3JlYWRfbHR2KCkKLSAqIFRvIHVzZSB3aXRoIGl3cHJpdiwgcGFzcyB0aGUgUklEIGFzIHRoZSB0b2tlbiBhcmd1bWVudCwgZS5nLgotICogaXdwcml2IGdldF9yaWQgWzB4ZmMwMF0KLSAqIEF0IGxlYXN0IFdpcmVsZXNzIFRvb2xzIDI1IGlzIHJlcXVpcmVkIHRvIHVzZSBpd3ByaXYuCi0gKiBGb3IgV2lyZWxlc3MgVG9vbHMgMjUgYW5kIDI2IGFwcGVuZCAiZHVtbXkiIGFyZSB0aGUgZW5kLiAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgcmlkID0gZGF0YS0+ZmxhZ3M7Ci0JdTE2IGxlbmd0aDsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBJdCdzIGEgImdldCIgZnVuY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50IHVzZXJzIHRvIGFjY2VzcyB0aGUKLQkgKiBXRVAga2V5IGFuZCBvdGhlciByYXcgZmlybXdhcmUgZGF0YSAqLwotCWlmICghIGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAocmlkIDwgMHhmYzAwIHx8IHJpZCA+IDB4ZmZmZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgTUFYX1JJRF9MRU4sICZsZW5ndGgsCi0JCQkgICAgICBleHRyYSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlkYXRhLT5sZW5ndGggPSBtaW5fdCh1MTYsIEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuZ3RoKSwKLQkJCSAgICAgTUFYX1JJRF9MRU4pOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogVHJpZ2dlciBhIHNjYW4gKGxvb2sgZm9yIG90aGVyIGNlbGxzIGluIHRoZSB2aWNpbml0eSkgKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X3NjYW5fcmVxICpzaSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKikgZXh0cmE7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIE5vdGUgOiB5b3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdCwgYXMgdGhpcyBpcyBhIFNFVCBvcGVyYXRpb24sCi0JICogdGhpcyBpcyBwcml2aWxlZ2VkIGFuZCB0aGVyZWZvcmUgYSBub3JtYWwgdXNlciBjYW4ndAotCSAqIHBlcmZvcm0gc2Nhbm5pbmcuCi0JICogVGhpcyBpcyBub3QgYW4gZXJyb3IsIHdoaWxlIHRoZSBkZXZpY2UgcGVyZm9ybSBzY2FubmluZywKLQkgKiB0cmFmZmljIGRvZXNuJ3QgZmxvdywgc28gaXQncyBhIHBlcmZlY3QgRG9TLi4uCi0JICogSmVhbiBJSSAqLwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBTY2FubmluZyB3aXRoIHBvcnQgMCBkaXNhYmxlZCB3b3VsZCBmYWlsICovCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZXJyID0gLUVORVRET1dOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBJbiBtb25pdG9yIG1vZGUsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIGFsd2F5cyBlbXB0eS4KLQkgKiBQcm9iZSByZXNwb25zZXMgYXJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGFzIHJlY2VpdmVkCi0JICogZnJhbWVzIGFuZCBjb3VsZCBiZSBwcm9jZXNzZWQgaW4gc29mdHdhcmUuICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBOb3RlIDogYmVjYXVzZSB3ZSBkb24ndCBsb2NrIG91dCB0aGUgaXJxIGhhbmRsZXIsIHRoZSB3YXkKLQkgKiB3ZSBhY2Nlc3Mgc2NhbiB2YXJpYWJsZXMgaW4gcHJpdiBpcyBjcml0aWNhbC4KLQkgKglvIHNjYW5faW5wcm9ncmVzcyA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCi0JICoJbyBzY2FuX21vZGUgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgotCSAqIEJlZm9yZSBtb2RpZnlpbmcgYW55dGhpbmcgb24gdGhvc2UgdmFyaWFibGVzLCBwbGVhc2UgdGhpbmsgaGFyZCAhCi0JICogSmVhbiBJSSAqLwotCi0JLyogU2F2ZSBmbGFncyAqLwotCXByaXYtPnNjYW5fbW9kZSA9IHNycS0+ZmxhZ3M7Ci0KLQkvKiBBbHdheXMgdHJpZ2dlciBzY2FubmluZywgZXZlbiBpZiBpdCdzIGluIHByb2dyZXNzLgotCSAqIFRoaXMgd2F5LCBpZiB0aGUgaW5mbyBmcmFtZSBnZXQgbG9zdCwgd2Ugd2lsbCByZWNvdmVyIHNvbWV3aGF0Ci0JICogZ3JhY2VmdWxseSAgLSBKZWFuIElJICovCi0KLQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7Ci0JCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTl9TWU1CT0wsCi0JCQkJCQkgICBIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX09OQ0UgfAotCQkJCQkJICAgSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9CQ0FTVCk7Ci0JCQlicmVhazsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiB7Ci0JCQlfX2xlMTYgcmVxWzNdOwotCi0JCQlyZXFbMF0gPSBjcHVfdG9fbGUxNigweDNmZmYpOwkvKiBBbGwgY2hhbm5lbHMgKi8KLQkJCXJlcVsxXSA9IGNwdV90b19sZTE2KDB4MDAwMSk7CS8qIHJhdGUgMSBNYnBzICovCi0JCQlyZXFbMl0gPSAwOwkJCS8qIEFueSBFU1NJRCAqLwotCQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCQkgIEhFUk1FU19SSURfQ05GSE9TVFNDQU4sICZyZXEpOwotCQl9Ci0JCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCQlpZiAocHJpdi0+c2Nhbl9tb2RlICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCQkJc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKLQkJCQlzaXplX3QgbGVuID0gbWluKHNpemVvZihpZGJ1Zi52YWwpLAotCQkJCQkJIChzaXplX3QpIHNpLT5lc3NpZF9sZW4pOwotCQkJCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KGxlbik7Ci0JCQkJbWVtY3B5KGlkYnVmLnZhbCwgc2ktPmVzc2lkLCBsZW4pOwotCi0JCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCi0JCQkJCSAgICAgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAotCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihsZW4gKyAyKSwKLQkJCQkJICAgICAgICZpZGJ1Zik7Ci0JCQl9IGVsc2UKLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAotCQkJCQkJICAgMCk7CS8qIEFueSBFU1NJRCAqLwotCQkJaWYgKGVycikKLQkJCQlicmVhazsKLQotCQkJaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQkJCS8qIENsZWFyIHNjYW4gcmVzdWx0cyBhdCB0aGUgc3RhcnQgb2YKLQkJCQkgKiBhbiBleHRlbmRlZCBzY2FuICovCi0JCQkJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwKLQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKLQotCQkJCS8qIFRPRE86IElzIHRoaXMgYXZhaWxhYmxlIG9uIG9sZGVyIGZpcm13YXJlPwotCQkJCSAqICAgQ2FuIHdlIHVzZSBpdCB0byBzY2FuIHNwZWNpZmljIGNoYW5uZWxzCi0JCQkJICogICBmb3IgSVdfU0NBTl9USElTX0ZSRVE/ICovCi0JCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJSEVSTUVTX1JJRF9DTkZTQ0FOQ0hBTk5FTFMyR0haLAotCQkJCQkJMHg3RkZGKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIG91dDsKLQotCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LAotCQkJCQkJICAgICBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPKTsKLQkJCX0gZWxzZQotCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UKLQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7Ci0KLQkvKiBPbmUgbW9yZSBjbGllbnQgKi8KLQlpZiAoISBlcnIpCi0JCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDE7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0jZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0Ci0KLS8qIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRhbnQKLSAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJICovCi1zdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgY2hhciAqY3VycmVudF9ldiwKLQkJCQkJICAgY2hhciAqZW5kX2J1ZiwKLQkJCQkJICAgdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYnNzLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYJCQljYXBhYmlsaXRpZXM7Ci0JdTE2CQkJY2hhbm5lbDsKLQlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLQljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5hLmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCi0KLQkvKiBBZGQgdGhlIEVTU0lEICovCi0JaXdlLnUuZGF0YS5sZW5ndGggPSBsZTE2X3RvX2NwdShic3MtPmEuZXNzaWRfbGVuKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIGJzcy0+YS5lc3NpZCk7Ci0KLQkvKiBBZGQgbW9kZSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmEuY2FwYWJpbGl0aWVzKTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKLQkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCWNoYW5uZWwgPSBic3MtPnMuY2hhbm5lbDsKLQlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgewotCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCi0JCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKLQkJaXdlLnUuZnJlcS5lID0gMDsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeVtjaGFubmVsLTFdICogMTAwMDAwOwotCQlpd2UudS5mcmVxLmUgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCX0KLQotCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCi0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubGV2ZWwpIC0gMHg5NTsKLQlpd2UudS5xdWFsLm5vaXNlID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5ub2lzZSkgLSAweDk1OwotCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKLQkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLwotCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKLQkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7Ci0JZWxzZQotCQlpd2UudS5xdWFsLnF1YWwgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKLQotCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIE5VTEwpOwotCi0JLyogQml0IHJhdGUgaXMgbm90IGF2YWlsYWJsZSBpbiBMdWNlbnQvQWdlcmUgZmlybXdhcmVzICovCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgIT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgewotCQljaGFyICpjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7Ci0JCWludCBpOwotCQlpbnQgc3RlcDsKLQotCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkKLQkJCXN0ZXAgPSAyOwotCQllbHNlCi0JCQlzdGVwID0gMTsKLQotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JCS8qIE1heCAxMCB2YWx1ZXMgKi8KLQkJZm9yIChpID0gMDsgaSA8IDEwOyBpICs9IHN0ZXApIHsKLQkJCS8qIE5VTEwgdGVybWluYXRlZCAqLwotCQkJaWYgKGJzcy0+cC5yYXRlc1tpXSA9PSAweDApCi0JCQkJYnJlYWs7Ci0JCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9Ci0JCQkJKChic3MtPnAucmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7Ci0JCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgY3VycmVudF92YWwsCi0JCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOwotCQl9Ci0JCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpCi0JCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7Ci0JfQotCi0JLyogQmVhY29uIGludGVydmFsICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImJjbl9pbnQ9JWQiLAotCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5hLmJlYWNvbl9pbnRlcnYpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQ2FwYWJpbGl0ZXMgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiY2FwYWI9MHglMDR4IiwKLQkJCQkgICAgIGNhcGFiaWxpdGllcyk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQotCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgICAgIGNoYXIgKmN1cnJlbnRfZXYsCi0JCQkJCSAgICAgICBjaGFyICplbmRfYnVmLAotCQkJCQkgICAgICAgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzcywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQotewotCXUxNgkJCWNhcGFiaWxpdGllczsKLQl1MTYJCQljaGFubmVsOwotCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKLQl1OCAqaWU7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKLQotCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwotCi0JLyogQWRkIHRoZSBFU1NJRCAqLwotCWllID0gYnNzLT5kYXRhOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKSB7Ci0JCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLQkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCAmaWVbMl0pOwotCX0KLQotCS8qIEFkZCBtb2RlICovCi0JY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5jYXBhYmlsaXRpZXMpOwotCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgewotCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX0RTX1BBUkFNUyk7Ci0JY2hhbm5lbCA9IGllID8gaWVbMl0gOiAwOwotCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7Ci0JCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KLQkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOwotCQlpd2UudS5mcmVxLmUgPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCi0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWxfZnJlcXVlbmN5W2NoYW5uZWwtMV0gKiAxMDAwMDA7Ci0JCWl3ZS51LmZyZXEuZSA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0JfQotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KLQlpd2UuY21kID0gSVdFVlFVQUw7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5sZXZlbCAtIDB4OTU7Ci0JaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2UgLSAweDk1OwotCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKLQkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLwotCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKLQkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7Ci0JZWxzZQotCQlpd2UudS5xdWFsLnF1YWwgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKLQotCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIE5VTEwpOwotCi0JLyogV1BBIElFICovCi0JaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSk7Ci0JaWYgKGllKSB7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgaWUpOwotCX0KLQotCS8qIFJTTiBJRSAqLwotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfUlNOKTsKLQlpZiAoaWUpIHsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBpZSk7Ci0JfQotCi0JaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9TVVBQX1JBVEVTKTsKLQlpZiAoaWUpIHsKLQkJY2hhciAqcCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7Ci0JCWludCBpOwotCi0JCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLQkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCi0JCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQotCQlmb3IgKGkgPSAyOyBpIDwgKGllWzFdICsgMik7IGkrKykgewotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoaWVbaV0gJiAweDdGKSAqIDUwMDAwMCk7Ci0JCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwgZW5kX2J1ZiwKLQkJCQkJCSAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwotCQl9Ci0JCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCQlpZiAocCA+IChjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKSkKLQkJCWN1cnJlbnRfZXYgPSBwOwotCX0KLQotCS8qIFRpbWVzdGFtcCAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0KLQkJc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwgInRzZj0lMDE2bGx4IiwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShic3MtPnRpbWVzdGFtcCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiYmNuX2ludD0lZCIsCi0JCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmJlYWNvbl9pbnRlcnZhbCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBDYXBhYmlsaXRlcyAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJjYXBhYj0weCUwNHgiLAotCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0JICogZm9yIGdpdmVuIG5ldHdvcmsuICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCXJldHVybiBjdXJyZW50X2V2OwotfQotCi0vKiBSZXR1cm4gcmVzdWx0cyBvZiBhIHNjYW4gKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHByaXYtPnNjYW5faW5wcm9ncmVzcykgewotCQkvKiBJbXBvcnRhbnQgbm90ZSA6IHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGNhbGxlcgotCQkgKiB1bnRpbCByZXN1bHRzIGFyZSByZWFkeSBmb3IgdmFyaW91cyByZWFzb25zLgotCQkgKiBGaXJzdCwgbWFuYWdpbmcgd2FpdCBxdWV1ZXMgaXMgY29tcGxleCBhbmQgcmFjeS4KLQkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbW1pbmcKLQkJICogaGVyZSAoaW4gZGV2X2lvY3RsKCkpLgotCQkgKiBUaGlyZCwgd2UgZ2VuZXJhdGUgYW4gV2lyZWxlc3MgRXZlbnQsIHNvIHRoZQotCQkgKiBjYWxsZXIgY2FuIHdhaXQgaXRzZWxmIG9uIHRoYXQgLSBKZWFuIElJICovCi0JCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLwotCQkJY3VycmVudF9ldiA9Ci0JCQkJb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oZGV2LCBpbmZvLAotCQkJCQkJCSAgIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKLQkJCQkJCQkgICAmYnNzLT5ic3MsCi0JCQkJCQkJICAgYnNzLT5sYXN0X3NjYW5uZWQpOwotCi0JCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KLQkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCi0JCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCi0JCQkJICogYmlnZ2VyIGJ1ZmZlciAqLwotCQkJCWVyciA9IC1FMkJJRzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCi0JfSBlbHNlIHsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCi0JCQljdXJyZW50X2V2ID0gb3Jpbm9jb190cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sCi0JCQkJCQkJICAgIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCi0JCQkJCQkJICAgICZic3MtPmJzcywKLQkJCQkJCQkgICAgYnNzLT5sYXN0X3NjYW5uZWQpOwotCi0JCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KLQkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCi0JCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCi0JCQkJICogYmlnZ2VyIGJ1ZmZlciAqLwotCQkJCWVyciA9IC1FMkJJRzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCX0KLQotCXNycS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7Ci0Jc3JxLT5mbGFncyA9IChfX3UxNikgcHJpdi0+c2Nhbl9tb2RlOwotCi1vdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBDb21taXQgaGFuZGxlciwgY2FsbGVkIGFmdGVyIHNldCBvcGVyYXRpb25zICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQl2b2lkICp3cnF1LAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoIXByaXYtPm9wZW4pCi0JCXJldHVybiAwOwotCi0JaWYgKHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgewotCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZGlzYWJsZSBwb3J0ICIKLQkJICAgICAgICJ3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsIGRldi0+bmFtZSk7Ci0JCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVjb25maWd1cmUgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBwb3J0IHdoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotIG91dDoKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXNldHRpbmcgaW5zdGVhZC4uLlxuIiwgZGV2LT5uYW1lKTsKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JCWVyciA9IDA7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBvcmlub2NvX3ByaXZ0YWJbXSA9IHsKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MCwgMCwgMCwgImZvcmNlX3Jlc2V0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgxLCAwLCAwLCAiY2FyZF9yZXNldCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAwLCAic2V0X3BvcnQzIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgzLCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgICJnZXRfcG9ydDMiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDQsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgMCwgInNldF9wcmVhbWJsZSIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NSwgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAiZ2V0X3ByZWFtYmxlIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg2LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgIDAsICJzZXRfaWJzc3BvcnQiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDcsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgImdldF9pYnNzcG9ydCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4OSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBNQVhfUklEX0xFTiwKLQkgICJnZXRfcmlkIiB9LAotfTsKLQotCi0vKgotICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCi0gKi8KLQotI2RlZmluZSBTVERfSVdfSEFORExFUihpZCwgZnVuYykgXAotCVtJV19JT0NUTF9JRFgoaWQpXSA9IChpd19oYW5kbGVyKSBmdW5jCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX2hhbmRsZXJbXSA9IHsKLQlTVERfSVdfSEFORExFUihTSU9DU0lXQ09NTUlULAlvcmlub2NvX2lvY3RsX2NvbW1pdCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCW9yaW5vY29faW9jdGxfZ2V0bmFtZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsCW9yaW5vY29faW9jdGxfc2V0ZnJlcSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsCW9yaW5vY29faW9jdGxfZ2V0ZnJlcSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCW9yaW5vY29faW9jdGxfc2V0bW9kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCW9yaW5vY29faW9jdGxfZ2V0bW9kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NFTlMsCW9yaW5vY29faW9jdGxfc2V0c2VucyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NFTlMsCW9yaW5vY29faW9jdGxfZ2V0c2VucyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLAlvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2UpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTUFksCWl3X2hhbmRsZXJfc2V0X3NweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NQWSwJaXdfaGFuZGxlcl9nZXRfc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXVEhSU1BZLAlpd19oYW5kbGVyX3NldF90aHJzcHkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdUSFJTUFksCWl3X2hhbmRsZXJfZ2V0X3RocnNweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FQLAlvcmlub2NvX2lvY3RsX3NldHdhcCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FQLAlvcmlub2NvX2lvY3RsX2dldHdhcCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCW9yaW5vY29faW9jdGxfc2V0c2NhbiksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCW9yaW5vY29faW9jdGxfZ2V0c2NhbiksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VTU0lELAlvcmlub2NvX2lvY3RsX3NldGVzc2lkKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRVNTSUQsCW9yaW5vY29faW9jdGxfZ2V0ZXNzaWQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9zZXRuaWNrKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTklDS04sCW9yaW5vY29faW9jdGxfZ2V0bmljayksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JBVEUsCW9yaW5vY29faW9jdGxfc2V0cmF0ZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBVEUsCW9yaW5vY29faW9jdGxfZ2V0cmF0ZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JUUywJb3Jpbm9jb19pb2N0bF9zZXRydHMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSVFMsCW9yaW5vY29faW9jdGxfZ2V0cnRzKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRlJBRywJb3Jpbm9jb19pb2N0bF9zZXRmcmFnKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRlJBRywJb3Jpbm9jb19pb2N0bF9nZXRmcmFnKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUkVUUlksCW9yaW5vY29faW9jdGxfZ2V0cmV0cnkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREUsCW9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREUsCW9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9zZXRwb3dlciksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLAlvcmlub2NvX2lvY3RsX2dldHBvd2VyKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXR0VOSUUsCW9yaW5vY29faW9jdGxfc2V0X2dlbmllKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXR0VOSUUsCW9yaW5vY29faW9jdGxfZ2V0X2dlbmllKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXTUxNRSwJb3Jpbm9jb19pb2N0bF9zZXRfbWxtZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsCW9yaW5vY29faW9jdGxfc2V0X2F1dGgpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBVVRILAlvcmlub2NvX2lvY3RsX2dldF9hdXRoKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dCksCi19OwotCi0KLS8qCi0gIEFkZGVkIHR5cGVjYXN0aW5nIHNpbmNlIHdlIG5vIGxvbmdlciB1c2UgaXdyZXFfZGF0YSAtLSBNb3VzdGFmYQotICovCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX3ByaXZhdGVfaGFuZGxlcltdID0gewotCVswXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAotCVsxXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAotCVsyXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHBvcnQzLAotCVszXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHBvcnQzLAotCVs0XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlLAotCVs1XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlLAotCVs2XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0LAotCVs3XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0LAotCVs5XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHJpZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgb3Jpbm9jb19oYW5kbGVyX2RlZiA9IHsKLQkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShvcmlub2NvX2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUob3Jpbm9jb19wcml2YXRlX2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZ0YWIpLAotCS5zdGFuZGFyZCA9IG9yaW5vY29faGFuZGxlciwKLQkucHJpdmF0ZSA9IG9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyLAotCS5wcml2YXRlX2FyZ3MgPSBvcmlub2NvX3ByaXZ0YWIsCi0JLmdldF93aXJlbGVzc19zdGF0cyA9IG9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKLQotc3RhdGljIHZvaWQgb3Jpbm9jb19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlzdHJuY3B5KGluZm8tPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpIC0gMSk7Ci0Jc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7Ci0Jc3RybmNweShpbmZvLT5md192ZXJzaW9uLCBwcml2LT5md19uYW1lLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikgLSAxKTsKLQlpZiAoZGV2LT5kZXYucGFyZW50KQotCQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAotCQkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEpOwotCWVsc2UKLQkJc25wcmludGYoaW5mby0+YnVzX2luZm8sIHNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxLAotCQkJICJQQ01DSUEgJXAiLCBwcml2LT5ody5pb2Jhc2UpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvID0gb3Jpbm9jb19nZXRfZHJ2aW5mbywKLQkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1FWFBPUlRfU1lNQk9MKGFsbG9jX29yaW5vY29kZXYpOwotRVhQT1JUX1NZTUJPTChmcmVlX29yaW5vY29kZXYpOwotCi1FWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb191cCk7Ci1FWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb19kb3duKTsKLUVYUE9SVF9TWU1CT0wob3Jpbm9jb19yZWluaXRfZmlybXdhcmUpOwotCi1FWFBPUlRfU1lNQk9MKG9yaW5vY29faW50ZXJydXB0KTsKLQotLyogQ2FuJ3QgYmUgZGVjbGFyZWQgImNvbnN0IiBvciB0aGUgd2hvbGUgX19pbml0ZGF0YSBzZWN0aW9uIHdpbGwKLSAqIGJlY29tZSBjb25zdCAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KLQkiIChEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+LCAiCi0JIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LCBldCBhbCkiOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X29yaW5vY28odm9pZCkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHZlcnNpb24pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9vcmlub2NvKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfb3Jpbm9jbyk7Ci1tb2R1bGVfZXhpdChleGl0X29yaW5vY28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaAppbmRleCAwMDc1MGM4Li44ZTVhNzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaApAQCAtMSw1ICsxLDUgQEAKIC8qIG9yaW5vY28uaAotICogCisgKgogICogQ29tbW9uIGRlZmluaXRpb25zIHRvIGFsbCBwaWVjZXMgb2YgdGhlIHZhcmlvdXMgb3Jpbm9jbwogICogZHJpdmVycwogICovCkBAIC0xOCw5ICsxOCw5IEBACiAjaW5jbHVkZSAiaGVybWVzLmgiCiAKIC8qIFRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyAqLwotLy8jZGVmaW5lIE9SSU5PQ09fREVCVUcJCTMKKy8qI2RlZmluZSBPUklOT0NPX0RFQlVHCQkzKi8KIAotI2RlZmluZSBXSVJFTEVTU19TUFkJCS8vIGVuYWJsZSBpd3NweSBzdXBwb3J0CisjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogZW5hYmxlIGl3c3B5IHN1cHBvcnQgKi8KIAogI2RlZmluZSBNQVhfU0NBTl9MRU4JCTQwOTYKIApAQCAtNTksMTQgKzU5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi1zdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3I7Ci0KLXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgewotCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KIHN0cnVjdCBmaXJtd2FyZTsKIAogc3RydWN0IG9yaW5vY29fcHJpdmF0ZSB7CkBAIC04Myw3ICs3NSw2IEBACiAJLyogSW50ZXJydXB0IHRhc2tsZXRzICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCByeF9saXN0OwotCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGE7CiAKIAkvKiBkcml2ZXIgc3RhdGUgKi8KIAlpbnQgb3BlbjsKQEAgLTEzMCw3ICsxMjEsNyBAQAogCXUxNiBlbmNvZGVfYWxnLCB3ZXBfcmVzdHJpY3QsIHR4X2tleTsKIAlzdHJ1Y3Qgb3Jpbm9jb19rZXkga2V5c1tPUklOT0NPX01BWF9LRVlTXTsKIAlpbnQgYml0cmF0ZW1vZGU7Ci0gCWNoYXIgbmlja1tJV19FU1NJRF9NQVhfU0laRSsxXTsKKwljaGFyIG5pY2tbSVdfRVNTSURfTUFYX1NJWkUrMV07CiAJY2hhciBkZXNpcmVkX2Vzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOwogCWNoYXIgZGVzaXJlZF9ic3NpZFtFVEhfQUxFTl07CiAJaW50IGJzc2lkX2ZpeGVkOwpAQCAtMTQwLDcgKzEzMSw3IEBACiAJdTE2IHBtX29uLCBwbV9tY2FzdCwgcG1fcGVyaW9kLCBwbV90aW1lb3V0OwogCXUxNiBwcmVhbWJsZTsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAJc3RydWN0IGl3X3NweV9kYXRhIHNweV9kYXRhOyAvKiBpd3NweSBzdXBwb3J0ICovCisJc3RydWN0IGl3X3NweV9kYXRhIHNweV9kYXRhOyAvKiBpd3NweSBzdXBwb3J0ICovCiAJc3RydWN0IGl3X3B1YmxpY19kYXRhCXdpcmVsZXNzX2RhdGE7CiAjZW5kaWYKIApAQCAtMTY4LDE2ICsxNTksMjEgQEAKIAl1bnNpZ25lZCBpbnQgdGtpcF9jbV9hY3RpdmU6MTsKIAl1bnNpZ25lZCBpbnQga2V5X21nbXQ6MzsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIAkvKiBDYWNoZWQgaW4gbWVtb3J5IGZpcm13YXJlIHRvIHVzZSBkdXJpbmcgLT5yZXN1bWUuICovCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpjYWNoZWRfcHJpX2Z3OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY2FjaGVkX2Z3OworI2VuZGlmCiAKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZpZXI7CiB9OwogCiAjaWZkZWYgT1JJTk9DT19ERUJVRwogZXh0ZXJuIGludCBvcmlub2NvX2RlYnVnOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IGlmIChvcmlub2NvX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyBcCisJaWYgKG9yaW5vY29fZGVidWcgPiAobikpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKK30gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwpAQCAtMTk0LDcgKzE5MCw3IEBACiBleHRlcm4gaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBkZXZfaWQpOworZXh0ZXJuIGlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKaW5kZXggMGIzMjIxNS4uYjM4MWFlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKQEAgLTYsOCArNiw4IEBACiAgKiBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcyBzdWNoIGFzIHRoZQogICogTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiBJdCBzaG91bGQgYWxzbyB3b3JrIG9uIFN5bWJvbAogICogY2FyZHMgc3VjaCBhcyB0aGUgM0NvbSBBaXJDb25uZWN0IGFuZCBFcmljc3NvbiBXTEFOLgotICogCi0gKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG9yaW5vY28uYworICoKKyAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgbWFpbi5jCiAgKi8KIAogI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jb19jcyIKQEAgLTMwLDcgKzMwLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBDTUNJQSBMdWNlbnQgT3Jpbm9jbywgUHJpc20gSUkgYmFzZWQgYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBQQ01DSUEgTHVjZW50IE9yaW5vY28sIgorCQkgICAiIFByaXNtIElJIGJhc2VkIGFuZCBzaW1pbGFyIHdpcmVsZXNzIGNhcmRzIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC01Myw4ICs1NCw4IEBACiAKIAkvKiBVc2VkIHRvIGhhbmRsZSBoYXJkIHJlc2V0ICovCiAJLyogeXVjaywgd2UgbmVlZCB0aGlzIGhhY2sgdG8gd29yayBhcm91bmQgdGhlIGluc2FuaXR5IG9mIHRoZQotICAgICAgICAgKiBQQ01DSUEgbGF5ZXIgKi8KLQl1bnNpZ25lZCBsb25nIGhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3M7IAorCSAqIFBDTUNJQSBsYXllciAqLworCXVuc2lnbmVkIGxvbmcgaGFyZF9yZXNldF9pbl9wcm9ncmVzczsKIH07CiAKIApAQCAtOTgsNyArOTksNyBAQAogICogVGhpcyBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZyBsb2NhbCBkYXRhCiAgKiBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggQ2FyZAogICogU2VydmljZXMuCi0gKiAKKyAqCiAgKiBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKICAqIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhIGNhcmQKICAqIGluc2VydGlvbiBldmVudC4gICovCkBAIC0xMTEsNyArMTEyLDcgQEAKIAogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCiAJCQkgICAgICAgb3Jpbm9jb19jc19oYXJkX3Jlc2V0LCBOVUxMKTsKLQlpZiAoISBkZXYpCisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwpAQCAtMTI0LDcgKzEyNSw3IEBACiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gb3Jpbm9jb19pbnRlcnJ1cHQ7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gZGV2OyAKKwlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMTYyLDggKzE2MywxMCBAQAogICovCiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgZG8geyBcCi0JCWxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyBcCi0JfSB3aGlsZSAoMCkKKwlsYXN0X2ZuID0gKGZuKTsgXAorCWlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgXAorCQlnb3RvIGNzX2ZhaWxlZDsgXAorfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBvcmlub2NvX2NzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLApAQCAtMzA3LDggKzMxMCw4IEBACiAJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCiAJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CiAJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCisJCQkJICAgICAgICogdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorCQkJCSAgICAgICAqIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzLCBpcnEgJWQsIGlvICIKQEAgLTM1OSw3ICszNjIsNyBAQAogCS8qIFRoaXMgaXMgcHJvYmFibHkgcmFjeSwgYnV0IEkgY2FuJ3QgdGhpbmsgb2YKIAkgICBhIGJldHRlciB3YXksIHNob3J0IG9mIHJld3JpdGluZyB0aGUgUENNQ0lBCiAJICAgbGF5ZXIgdG8gbm90IHN1Y2sgOi0oICovCi0JaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CisJaWYgKCF0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwpAQCAtMzg0LDcgKzM4Nyw3IEBACiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgeworCWlmICghdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CiAJCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKQEAgLTM5Nyw3ICs0MDAsNyBAQAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CiAKLQkJaWYgKHByaXYtPm9wZW4gJiYgISBwcml2LT5od191bmF2YWlsYWJsZSkgeworCQlpZiAocHJpdi0+b3BlbiAmJiAhcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKIAkJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwogCQkJaWYgKGVycikKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKaW5kZXggMmZjODY1OS4uYjAxNzI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYwpAQCAtOSwxMiArOSwxMiBAQAogICoKICAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gb3Jpbm9jb19wbHguYwogICoJQ29weXJpZ2h0IChDKSAyMDAxIERhbmllbCBCYXJsb3cKLSAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gb3Jpbm9jb19wY2kuYyAKKyAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gb3Jpbm9jb19wY2kuYwogICogIENvcHlyaWdodCAoQykgMjAwMSBKZWFuIFRvdXJyaWxoZXMKICAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzICJpbnNwaXJlZCIgYnkgbGludXgtd2xhbi1uZy0wLjEuMTAsIGJ1dCBub3RoaW5nCiAgKiBoYXMgYmVlbiBjb3BpZWQgZnJvbSBpdC4gbGludXgtd2xhbi1uZy0wLjEuMTAgaXMgb3JpZ2luYWxseSA6CiAgKglDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogCisgKgogICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQogICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgogICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKQEAgLTEwMyw5ICsxMDMsOCBAQAogCWlvd3JpdGUxNigweDgsIGNhcmQtPmJyaWRnZV9pbyArIDIpOwogCWZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7CiAJCW1kZWxheSgzMCk7Ci0JCWlmIChpb3JlYWQxNihjYXJkLT5icmlkZ2VfaW8pICYgMHgxMCkgeworCQlpZiAoaW9yZWFkMTYoY2FyZC0+YnJpZGdlX2lvKSAmIDB4MTApCiAJCQlicmVhazsKLQkJfQogCX0KIAlpZiAoaSA9PSAzMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJicmcxIHRpbWVkIG91dFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKaW5kZXggNGViZDYzOC4uNzhjYWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIG9yaW5vY29fcGNpLmMKLSAqIAorICoKICAqIERyaXZlciBmb3IgUHJpc20gMi41LzMgZGV2aWNlcyB0aGF0IGhhdmUgYSBkaXJlY3QgUENJIGludGVyZmFjZQogICogKGkuZS4gdGhlc2UgYXJlIG5vdCBQQ01DSUEgY2FyZHMgaW4gYSBQQ01DSUEtdG8tUENJIGJyaWRnZSkuCiAgKiBUaGUgY2FyZCBjb250YWlucyBvbmx5IG9uZSBQQ0kgcmVnaW9uLCB3aGljaCBjb250YWlucyBhbGwgdGhlIHVzdWFsCkBAIC0yMzcsNyArMjM3LDggQEAKIAkiIChQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiwiCiAJIiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+ICYiCiAJIiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+KSI7Ci1NT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYiCisJICAgICAgIiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3Igd2lyZWxlc3MgTEFOIGNhcmRzIHVzaW5nIGRpcmVjdCBQQ0kgaW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaAppbmRleCBmNGU1ZTA2Li5jNjU1YjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCkBAIC0xLDEwICsxLDEwIEBACiAvKiBvcmlub2NvX3BjaS5oCi0gKiAKKyAqCiAgKiBDb21tb24gY29kZSBmb3IgYWxsIE9yaW5vY28gZHJpdmVycyBmb3IgUENJIGRldmljZXMsIGluY2x1ZGluZwogICogYm90aCBuYXRpdmUgUENJIGFuZCBQQ01DSUEtdG8tUENJIGJyaWRnZXMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCBQYXZlbCBSb3NraW4uCi0gKiBTZWUgb3Jpbm9jby5jIGZvciBsaWNlbnNlLgorICogU2VlIG1haW4uYyBmb3IgbGljZW5zZS4KICAqLwogCiAjaWZuZGVmIF9PUklOT0NPX1BDSV9ICkBAIC0zNywxMSArMzcsMTEgQEAKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXJyb3IgJWQgYnJpbmdpbmcgaW50ZXJmYWNlIGRvd24gIgogCQkgICAgICAgImZvciBzdXNwZW5kXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCisKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCQorCiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKQEAgLTkwLDEzICs5MCwxMyBAQAogCiAJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKIAotCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CiAJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIHJlc3VtZVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJfQotCQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKaW5kZXggZWY3NjE4NS4uYTJhNDQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwpAQCAtMTQ2LDkgKzE0Niw4IEBACiAJfTsKIAogCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQ0lTOiAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQlwcmludGsoIiUwMlg6IiwgaW9yZWFkOChjYXJkLT5hdHRyX2lvICsgKGkgPDwgMSkpKTsKLQl9CiAJcHJpbnRrKCJcbiIpOwogCiAJLyogVmVyaWZ5IHdoZXRoZXIgYSBzdXBwb3J0ZWQgUEMgY2FyZCBpcyBwcmVzZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKaW5kZXggZWRlMjRlYy4uY2RhMGU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIG9yaW5vY29fdG1kLmMKICAqCiAgKiBEcml2ZXIgZm9yIFByaXNtIElJIGRldmljZXMgd2hpY2ggd291bGQgdXN1YWxseSBiZSBkcml2ZW4gYnkgb3Jpbm9jb19jcywKLSAqIGJ1dCBhcmUgY29ubmVjdGVkIHRvIHRoZSBQQ0kgYnVzIGJ5IGEgVE1ENzE2MC4gCisgKiBidXQgYXJlIGNvbm5lY3RlZCB0byB0aGUgUENJIGJ1cyBieSBhIFRNRDcxNjAuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIEpvZXJnIERvcmNoYWluIDxqb2VyZyBBVCBkb3JjaGFpbi5uZXQ+CiAgKiBiYXNlZCBoZWF2aWx5IHVwb24gb3Jpbm9jb19wbHguYyBDb3B5cmlnaHQgKEMpIDIwMDEgRGFuaWVsIEJhcmxvdwpAQCAtMjcsNyArMjcsNyBAQAogICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCiAgKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgogICoKLSAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG9yaW5vY28uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCisgKiBUaGUgYWN0dWFsIGRyaXZpbmcgaXMgZG9uZSBieSBtYWluLmMsIHRoaXMgaXMganVzdCByZXNvdXJjZQogICogYWxsb2NhdGlvbiBzdHVmZi4KICAqCiAgKiBUaGlzIGRyaXZlciBpcyBtb2RlbGVkIGFmdGVyIHRoZSBvcmlub2NvX3BseCBkcml2ZXIuIFRoZSBtYWluCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDY5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYwpAQCAtMCwwICsxLDIzMyBAQAorLyogSGVscGVycyBmb3IgbWFuYWdpbmcgc2NhbiBxdWV1ZXMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgImhlcm1lcy5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgInNjYW4uaCIKKworI2RlZmluZSBPUklOT0NPX01BWF9CU1NfQ09VTlQJNjQKKworI2RlZmluZSBQUklWX0JTUwkoKHN0cnVjdCBic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCisjZGVmaW5lIFBSSVZfWEJTUwkoKHN0cnVjdCB4YnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQorCitpbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT5ic3NfeGJzc19kYXRhKQorCQlyZXR1cm4gMDsKKworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCisJCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgeGJzc19lbGVtZW50KSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGJzc19lbGVtZW50KSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPmJzc194YnNzX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG9yaW5vY29fYnNzX2RhdGFfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWtmcmVlKHByaXYtPmJzc194YnNzX2RhdGEpOworCXByaXYtPmJzc194YnNzX2RhdGEgPSBOVUxMOworfQorCit2b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWludCBpOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfbGlzdCk7CisJaWYgKHByaXYtPmhhc19leHRfc2NhbikKKwkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQorCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfWEJTU1tpXS5saXN0KSwKKwkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCisJCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9CU1NbaV0ubGlzdCksCisJCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCit9CisKK3ZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQl1bnNpZ25lZCBsb25nIHNjYW5fYWdlKQoreworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKKwkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOworCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICp0bXBfYnNzOworCisJCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJaWYgKCFzY2FuX2FnZSB8fAorCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAorCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KKwkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKKwkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKKwkJc3RydWN0IGJzc19lbGVtZW50ICp0bXBfYnNzOworCisJCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJaWYgKCFzY2FuX2FnZSB8fAorCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAorCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KKwkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKKwkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKQoreworCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7CisJaW50IGZvdW5kID0gMDsKKworCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmJzc2lkLCBhdG9tLT5ic3NpZCkpCisJCQljb250aW51ZTsKKwkJLyogRVNTSUQgbGVuZ3RocyAqLworCQlpZiAoYnNzLT5ic3MuZGF0YVsxXSAhPSBhdG9tLT5kYXRhWzFdKQorCQkJY29udGludWU7CisJCWlmIChtZW1jbXAoJmJzcy0+YnNzLmRhdGFbMl0sICZhdG9tLT5kYXRhWzJdLAorCQkJICAgYXRvbS0+ZGF0YVsxXSkpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSAxOworCQlicmVhazsKKwl9CisKKwkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCisJaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKKwkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCisJCQkJIHN0cnVjdCB4YnNzX2VsZW1lbnQsIGxpc3QpOworCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOworCisJCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKKwl9CisKKwlpZiAoYnNzKSB7CisJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCisJCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOworCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7CisJfQorfQorCitpbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJIGludCBsZW4pCit7CisJaW50CQkJb2Zmc2V0OwkJLyogSW4gdGhlIHNjYW4gZGF0YSAqLworCXVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmF0b207CisJaW50CQkJYXRvbV9sZW47CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCWF0b21fbGVuID0gc2l6ZW9mKHN0cnVjdCBhZ2VyZV9zY2FuX2FwaW5mbyk7CisJCW9mZnNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCS8qIExhY2sgb2YgZG9jdW1lbnRhdGlvbiBuZWNlc3NpdGF0ZXMgdGhpcyBoYWNrLgorCQkgKiBEaWZmZXJlbnQgZmlybXdhcmVzIGhhdmUgNjggb3IgNzYgYnl0ZSBsb25nIGF0b21zLgorCQkgKiBXZSB0cnkgbW9kdWxvIGZpcnN0LiAgSWYgdGhlIGxlbmd0aCBkaXZpZGVzIGJ5IGJvdGgsCisJCSAqIHdlIGNoZWNrIHdoYXQgd291bGQgYmUgdGhlIGNoYW5uZWwgaW4gdGhlIHNlY29uZAorCQkgKiBmcmFtZSBmb3IgYSA2OC1ieXRlIGF0b20uICA3Ni1ieXRlIGF0b21zIGhhdmUgMCB0aGVyZS4KKwkJICogVmFsaWQgY2hhbm5lbCBjYW5ub3QgYmUgMC4gICovCisJCWlmIChsZW4gJSA3NikKKwkJCWF0b21fbGVuID0gNjg7CisJCWVsc2UgaWYgKGxlbiAlIDY4KQorCQkJYXRvbV9sZW4gPSA3NjsKKwkJZWxzZSBpZiAobGVuID49IDEyOTIgJiYgYnVmWzY4XSA9PSAwKQorCQkJYXRvbV9sZW4gPSA3NjsKKwkJZWxzZQorCQkJYXRvbV9sZW4gPSA2ODsKKwkJb2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQlvZmZzZXQgPSA0OworCQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7CisJCQlhdG9tX2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopYnVmKTsKKwkJCS8qIFNhbml0eSBjaGVjayBmb3IgYXRvbV9sZW4gKi8KKwkJCWlmIChhdG9tX2xlbiA8IHNpemVvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYXRvbV9sZW4gaW4gc2NhbiAiCisJCQkJICAgICAgICJkYXRhOiAlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSwKKwkJCQkgICAgICAgYXRvbV9sZW4pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9IGVsc2UKKwkJCWF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlIGdvdCBhbiB3aG9sZSBudW1iZXIgb2YgYXRvbXMgKi8KKwlpZiAoKGxlbiAtIG9mZnNldCkgJSBhdG9tX2xlbikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIHNjYW4gZGF0YSBsZW5ndGggJWQsICIKKwkJICAgICAgICJhdG9tX2xlbiAlZCwgb2Zmc2V0ICVkXG4iLCBwcml2LT5uZGV2LT5uYW1lLCBsZW4sCisJCSAgICAgICBhdG9tX2xlbiwgb2Zmc2V0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgbXNlY3NfdG9famlmZmllcygxNTAwMCkpOworCisJLyogUmVhZCB0aGUgZW50cmllcyBvbmUgYnkgb25lICovCisJZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7CisJCWludCBmb3VuZCA9IDA7CisJCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKKworCQkvKiBHZXQgbmV4dCBhdG9tICovCisJCWF0b20gPSAodW5pb24gaGVybWVzX3NjYW5faW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKKworCQkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmEuYnNzaWQsIGF0b20tPmEuYnNzaWQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGxlMTZfdG9fY3B1KGJzcy0+YnNzLmEuZXNzaWRfbGVuKSAhPQorCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1lbWNtcChic3MtPmJzcy5hLmVzc2lkLCBhdG9tLT5hLmVzc2lkLAorCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKSkKKwkJCQljb250aW51ZTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLworCQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgeworCQkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCisJCQkJCSBzdHJ1Y3QgYnNzX2VsZW1lbnQsIGxpc3QpOworCQkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKKworCQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOworCQl9CisKKwkJaWYgKGJzcykgeworCQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KKwkJCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOworCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSBqaWZmaWVzOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTlmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uaApAQCAtMCwwICsxLDI5IEBACisvKiBIZWxwZXJzIGZvciBtYW5hZ2luZyBzY2FuIHF1ZXVlcworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX1NDQU5fSF8KKyNkZWZpbmUgX09SSU5PQ09fU0NBTl9IXworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKK3N0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvOworCisvKiBTZXR1cCBhbmQgZnJlZSBtZW1vcnkgZm9yIHNjYW4gcmVzdWx0cyAqLworaW50IG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG9yaW5vY29fYnNzX2RhdGFfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworCisvKiBBZGQgc2NhbiByZXN1bHRzICovCit2b2lkIG9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYXRvbSk7CitpbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpkZXYsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbik7CisKKy8qIENsZWFyIHNjYW4gcmVzdWx0cyAqLwordm9pZCBvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCXVuc2lnbmVkIGxvbmcgc2Nhbl9hZ2UpOworCisKKyNlbmRpZiAvKiBfT1JJTk9DT19TQ0FOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKaW5kZXggYjJjYTJlMy4uMzhlNTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCiAgKgogICogVGhlIGRyaXZlciBpbXBsZW1lbnRzIFN5bWJvbCBmaXJtd2FyZSBkb3dubG9hZC4gIFRoZSByZXN0IGlzIGhhbmRsZWQKLSAqIGluIGhlcm1lcy5jIGFuZCBvcmlub2NvLmMuCisgKiBpbiBoZXJtZXMuYyBhbmQgbWFpbi5jLgogICoKICAqIFV0aWxpdGllcyBmb3IgZG93bmxvYWRpbmcgdGhlIFN5bWJvbCBmaXJtd2FyZSBhcmUgYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL29yaW5vY28vCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBQb3J0aW9ucyBiYXNlZCBvbiBTcGVjdHJ1bTI0dERubGQuYyBmcm9tIG9yaWdpbmFsIHNwZWN0cnVtMjQgZHJpdmVyOgogICogCUNvcHlyaWdodCAoQykgU3ltYm9sIFRlY2hub2xvZ2llcy4KICAqCi0gKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBmaWxlIG9yaW5vY28uYy4KKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGZpbGUgbWFpbi5jLgogICovCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgInNwZWN0cnVtX2NzIgpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdWRlbGF5KDEwMDApOwogCXJldHVybiAwOwogCi0gICAgICBjc19mYWlsZWQ6Citjc19mYWlsZWQ6CiAJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCXJldHVybiAtRU5PREVWOwogfQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgKiBUaGlzIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nIGxvY2FsIGRhdGEKICAqIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCBDYXJkCiAgKiBTZXJ2aWNlcy4KLSAqIAorICoKICAqIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogICogY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEgY2FyZAogICogaW5zZXJ0aW9uIGV2ZW50LiAgKi8KQEAgLTE4NSw3ICsxODUsNyBAQAogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCiAJCQkgICAgICAgc3BlY3RydW1fY3NfaGFyZF9yZXNldCwKIAkJCSAgICAgICBzcGVjdHJ1bV9jc19zdG9wX2Zpcm13YXJlKTsKLQlpZiAoISBkZXYpCisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gb3Jpbm9jb19pbnRlcnJ1cHQ7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gZGV2OyAKKwlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMzY3LDkgKzM2Nyw4IEBACiAJY2FyZC0+bm9kZS5tYWpvciA9IGNhcmQtPm5vZGUubWlub3IgPSAwOwogCiAJLyogUmVzZXQgY2FyZCAqLwotCWlmIChzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0KHByaXYpICE9IDApIHsKKwlpZiAoc3BlY3RydW1fY3NfaGFyZF9yZXNldChwcml2KSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAkvKiBUZWxsIHRoZSBzdGFjayB3ZSBleGlzdCAqLwpAQCAtMzgyLDggKzM4MSw4IEBACiAJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCiAJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CiAJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCisJCQkJICAgICAgICogdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorCQkJCSAgICAgICAqIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzLCBpcnEgJWQsIGlvICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwODE0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCkBAIC0wLDAgKzEsMjMyNSBAQAorLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyBzdXBwb3J0LgorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAibWljLmgiCisjaW5jbHVkZSAic2Nhbi5oIgorI2luY2x1ZGUgIm1haW4uaCIKKworI2luY2x1ZGUgIndleHQuaCIKKworI2RlZmluZSBNQVhfUklEX0xFTiAxMDI0CisKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBnZXRfd2lyZWxlc3Nfc3RhdHMoKSBjYWxsZWQgd2hpbGUgZGV2aWNlIG5vdCBwcmVzZW50XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5VTEw7IC8qIEZJWE1FOiBDYW4gd2UgZG8gYmV0dGVyIHRoYW4gdGhpcz8gKi8KKwl9CisKKwkvKiBJZiBidXN5LCByZXR1cm4gdGhlIG9sZCBzdGF0cy4gIFJldHVybmluZyBOVUxMIG1heSBjYXVzZQorCSAqIHRoZSBpbnRlcmZhY2UgdG8gZGlzYXBwZWFyIGZyb20gL3Byb2MvbmV0L3dpcmVsZXNzICovCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiB3c3RhdHM7CisKKwkvKiBXZSBjYW4ndCByZWFsbHkgd2FpdCBmb3IgdGhlIHRhbGxpZXMgaW5xdWlyeSBjb21tYW5kIHRvCisJICogY29tcGxldGUsIHNvIHdlIGp1c3QgdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGFuZCB0cmlnZ2VyCisJICogYSBuZXcgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgZm9yIG5leHQgdGltZSAtIEplYW4gSUkgKi8KKwkvKiBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCB3YWl0IGZvciB0aGUgaW5xdWlyeSB0byBjb21lIGJhY2sgLQorCSAqIGFzIGl0IGlzIHRoZSBzdGF0cyB3ZSBnaXZlIGRvbid0IG1ha2UgYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuCisJICogVW5mb3J0dW5hdGVseSwgaXQncyBub3QgY2xlYXIgaG93IHRvIGRvIHRoYXQgd2l0aGluIHRoZQorCSAqIHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJhbWV3b3JrOiBJIHRoaW5rIHdlJ3JlIGluIHVzZXIKKwkgKiBjb250ZXh0LCBidXQgYSBsb2NrIHNlZW1zIHRvIGJlIGhlbGQgYnkgdGhlIHRpbWUgd2UgZ2V0IGluCisJICogaGVyZSBzbyB3ZSdyZSBub3Qgc2FmZSB0byBzbGVlcCBoZXJlLiAqLworCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1RBTExJRVMpOworCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQltZW1zZXQoJndzdGF0cy0+cXVhbCwgMCwgc2l6ZW9mKHdzdGF0cy0+cXVhbCkpOworCQkvKiBJZiBhIHNweSBhZGRyZXNzIGlzIGRlZmluZWQsIHdlIHJlcG9ydCBzdGF0cyBvZiB0aGUKKwkJICogZmlyc3Qgc3B5IGFkZHJlc3MgLSBKZWFuIElJICovCisJCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKKwkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPQorCQkJCXByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgeworCQkJX19sZTE2IHF1YWwsIHNpZ25hbCwgbm9pc2UsIHVudXNlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3E7CisKKwkJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJIEhFUk1FU19SSURfQ09NTVNRVUFMSVRZLCAmY3EpOworCisJCWlmICghZXJyKSB7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IChpbnQpbGUxNl90b19jcHUoY3EucXVhbCk7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnNpZ25hbCkgLSAweDk1OworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gKGludClsZTE2X3RvX2NwdShjcS5ub2lzZSkgLSAweDk1OworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPQorCQkJCUlXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKKwkJfQorCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIHdzdGF0czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBjaGFyICpuYW1lLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbnVtcmF0ZXM7CisJaW50IGVycjsKKworCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywgTlVMTCwgMCk7CisKKwlpZiAoIWVyciAmJiAobnVtcmF0ZXMgPiAyKSkKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKKwllbHNlCisJCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyBjb25zdCB1OCBvZmZfYWRkcltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisJc3RhdGljIGNvbnN0IHU4IGFueV9hZGRyW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogRW5hYmxlIGF1dG9tYXRpYyByb2FtaW5nIC0gbm8gc2FuaXR5IGNoZWNrcyBhcmUgbmVlZGVkICovCisJaWYgKG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgb2ZmX2FkZHIsIEVUSF9BTEVOKSA9PSAwIHx8CisJICAgIG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgYW55X2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCXByaXYtPmJzc2lkX2ZpeGVkID0gMDsKKwkJbWVtc2V0KHByaXYtPmRlc2lyZWRfYnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCQkvKiAib2ZmIiBtZWFucyBrZWVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gKi8KKwkJaWYgKGFwX2FkZHItPnNhX2RhdGFbMF0gPT0gMCkgeworCQkJX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7CisJCQllcnIgPSAwOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEx1Y2VudC9BZ2VyZSBmaXJtd2FyZSBkb2Vzbid0ICIKKwkJICAgICAgICJzdXBwb3J0IG1hbnVhbCByb2FtaW5nXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1hbnVhbCByb2FtaW5nIHN1cHBvcnRlZCBvbmx5IGluICIKKwkJICAgICAgICJtYW5hZ2VkIG1vZGVcbiIsIGRldi0+bmFtZSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbnRlcnNpbCBmaXJtd2FyZSBoYW5ncyB3aXRob3V0IERlc2lyZWQgRVNTSUQgKi8KKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMICYmCisJICAgIHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEZXNpcmVkIEVTU0lEIG11c3QgYmUgc2V0IGZvciAiCisJCSAgICAgICAibWFudWFsIHJvYW1pbmdcbiIsIGRldi0+bmFtZSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGaW5hbGx5LCBlbmFibGUgbWFudWFsIHJvYW1pbmcgKi8KKwlwcml2LT5ic3NpZF9maXhlZCA9IDE7CisJbWVtY3B5KHByaXYtPmRlc2lyZWRfYnNzaWQsICZhcF9hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGFwX2FkZHItPnNhX2RhdGEpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHUzMiAqbW9kZSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHByaXYtPml3X21vZGUgPT0gKm1vZGUpCisJCXJldHVybiAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKCptb2RlKSB7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQlpZiAoIXByaXYtPmhhc19pYnNzICYmICFwcml2LT5oYXNfcG9ydDMpCisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisKKwljYXNlIElXX01PREVfSU5GUkE6CisJCWJyZWFrOworCisJY2FzZSBJV19NT0RFX01PTklUT1I6CisJCWlmIChwcml2LT5icm9rZW5fbW9uaXRvciAmJiAhZm9yY2VfbW9uaXRvcikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1vbml0b3IgbW9kZSBzdXBwb3J0IGlzICIKKwkJCSAgICAgICAiYnVnZ3kgaW4gdGhpcyBmaXJtd2FyZSwgbm90IGVuYWJsaW5nXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgeworCQlwcml2LT5pd19tb2RlID0gKm1vZGU7CisJCXNldF9wb3J0X3R5cGUocHJpdik7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHUzMiAqbW9kZSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkqbW9kZSA9IHByaXYtPml3X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wb2ludCAqcnJxLAorCQkJCSAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlpbnQgbnVtcmF0ZXM7CisJaW50IGksIGs7CisKKwlycnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjI7CisKKwkvKiBTZXQgYXZhaWxhYmxlIGNoYW5uZWxzL2ZyZXF1ZW5jaWVzICovCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKKwlrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IGkpKSB7CisJCQlyYW5nZS0+ZnJlcVtrXS5pID0gaSArIDE7CisJCQlyYW5nZS0+ZnJlcVtrXS5tID0gKGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpICsgMSkgKgorCQkJCQkgICAgMTAwMDAwKTsKKwkJCXJhbmdlLT5mcmVxW2tdLmUgPSAxOworCQkJaysrOworCQl9CisKKwkJaWYgKGsgPj0gSVdfTUFYX0ZSRVFVRU5DSUVTKQorCQkJYnJlYWs7CisJfQorCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKKwlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOworCisJaWYgKHByaXYtPmhhc193ZXApIHsKKwkJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBPUklOT0NPX01BWF9LRVlTOworCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IFNNQUxMX0tFWV9TSVpFOworCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMTsKKworCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApIHsKKwkJCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gTEFSR0VfS0VZX1NJWkU7CisJCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKKwkJfQorCX0KKworCWlmIChwcml2LT5oYXNfd3BhKQorCQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUDsKKworCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAoIVNQWV9OVU1CRVIocHJpdikpKSB7CisJCS8qIFF1YWxpdHkgc3RhdHMgbWVhbmluZ2xlc3MgaW4gYWQtaG9jIG1vZGUgKi8KKwl9IGVsc2UgeworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDB4OGIgLSAweDJmOworCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAweDJmIC0gMHg5NSAtIDE7CisJCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDB4MmYgLSAweDk1IC0gMTsKKwkJLyogTmVlZCB0byBnZXQgYmV0dGVyIHZhbHVlcyAqLworCQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDB4MjQ7CisJCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDB4QzI7CisJCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDB4OUU7CisJfQorCisJZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLAorCQkJCQkgcmFuZ2UtPmJpdHJhdGUsIElXX01BWF9CSVRSQVRFUyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gbnVtcmF0ZXM7CisKKwkvKiBTZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbWF4IFRDUCB0aHJvdWdocHV0IGluIGJpdC9zIHRoYXQgd2UgY2FuCisJICogZXhwZWN0IHVzaW5nIHRoaXMgaW50ZXJmYWNlLiBNYXkgYmUgdXNlIGZvciBRb1Mgc3R1ZmYuLi4KKwkgKiBKZWFuIElJICovCisJaWYgKG51bXJhdGVzID4gMikKKwkJcmFuZ2UtPnRocm91Z2hwdXQgPSA1ICogMTAwMCAqIDEwMDA7CS8qIH41IE1iL3MgKi8KKwllbHNlCisJCXJhbmdlLT50aHJvdWdocHV0ID0gMS41ICogMTAwMCAqIDEwMDA7CS8qIH4xLjUgTWIvcyAqLworCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5taW5fcG1wID0gMDsKKwlyYW5nZS0+bWF4X3BtcCA9IDY1NTM1MDAwOworCXJhbmdlLT5taW5fcG10ID0gMDsKKwlyYW5nZS0+bWF4X3BtdCA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCisJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwlyYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKKwlyYW5nZS0+cG1fY2FwYSA9IChJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9USU1FT1VUIHwKKwkJCSAgSVdfUE9XRVJfVU5JQ0FTVF9SKTsKKworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MSUZFVElNRTsKKwlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cl90aW1lX2ZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDY1NTM1OwkvKiA/Pz8gKi8KKwlyYW5nZS0+bWluX3JfdGltZSA9IDA7CisJcmFuZ2UtPm1heF9yX3RpbWUgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLworCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKKwkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKwllbHNlCisJCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfTk9ORTsKKworCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGtlcm5lbCkgKi8KKwlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOworCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGRyaXZlcikgKi8KKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1RIUlNQWSk7CisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdBUCk7CisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdTQ0FOKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgSVdFVlRYRFJPUCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCisJCQkJICAgICBjaGFyICprZXlidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwlpbnQgc2V0aW5kZXggPSBwcml2LT50eF9rZXk7CisJaW50IGVuY29kZV9hbGcgPSBwcml2LT5lbmNvZGVfYWxnOworCWludCByZXN0cmljdGVkID0gcHJpdi0+d2VwX3Jlc3RyaWN0OworCXUxNiB4bGVuID0gMDsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc193ZXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChlcnEtPnBvaW50ZXIpIHsKKwkJLyogV2UgYWN0dWFsbHkgaGF2ZSBhIGtleSB0byBzZXQgLSBjaGVjayBpdHMgbGVuZ3RoICovCisJCWlmIChlcnEtPmxlbmd0aCA+IExBUkdFX0tFWV9TSVpFKQorCQkJcmV0dXJuIC1FMkJJRzsKKworCQlpZiAoKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpICYmICFwcml2LT5oYXNfYmlnX3dlcCkKKwkJCXJldHVybiAtRTJCSUc7CisJfQorCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBDbGVhciBhbnkgVEtJUCBrZXkgd2UgaGF2ZSAqLworCWlmICgocHJpdi0+aGFzX3dwYSkgJiYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSkKKwkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgc2V0aW5kZXgpOworCisJaWYgKGVycS0+bGVuZ3RoID4gMCkgeworCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQorCQkJaW5kZXggPSBwcml2LT50eF9rZXk7CisKKwkJLyogQWRqdXN0IGtleSBsZW5ndGggdG8gYSBzdXBwb3J0ZWQgdmFsdWUgKi8KKwkJaWYgKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpCisJCQl4bGVuID0gTEFSR0VfS0VZX1NJWkU7CisJCWVsc2UgaWYgKGVycS0+bGVuZ3RoID4gMCkKKwkJCXhsZW4gPSBTTUFMTF9LRVlfU0laRTsKKwkJZWxzZQorCQkJeGxlbiA9IDA7CisKKwkJLyogU3dpdGNoIG9uIFdFUCBpZiBvZmYgKi8KKwkJaWYgKChlbmNvZGVfYWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKSAmJiAoeGxlbiA+IDApKSB7CisJCQlzZXRpbmRleCA9IGluZGV4OworCQkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfV0VQOworCQl9CisJfSBlbHNlIHsKKwkJLyogSW1wb3J0YW50IG5vdGUgOiBpZiB0aGUgdXNlciBkbyAiaXdjb25maWcgZXRoMCBlbmMgb2ZmIiwKKwkJICogd2Ugd2lsbCBhcnJpdmUgdGhlcmUgd2l0aCBhbiBpbmRleCBvZiAtMS4gVGhpcyBpcyB2YWxpZAorCQkgKiBidXQgbmVlZCB0byBiZSB0YWtlbiBjYXJlIG9mZi4uLiBKZWFuIElJICovCisJCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpIHsKKwkJCWlmICgoaW5kZXggIT0gLTEpIHx8IChlcnEtPmZsYWdzID09IDApKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFNldCB0aGUgaW5kZXggOiBDaGVjayB0aGF0IHRoZSBrZXkgaXMgdmFsaWQgKi8KKwkJCWlmIChwcml2LT5rZXlzW2luZGV4XS5sZW4gPT0gMCkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlzZXRpbmRleCA9IGluZGV4OworCQl9CisJfQorCisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCisJCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKwkJcmVzdHJpY3RlZCA9IDA7CisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKKwkJcmVzdHJpY3RlZCA9IDE7CisKKwlpZiAoZXJxLT5wb2ludGVyICYmIGVycS0+bGVuZ3RoID4gMCkgeworCQlwcml2LT5rZXlzW2luZGV4XS5sZW4gPSBjcHVfdG9fbGUxNih4bGVuKTsKKwkJbWVtc2V0KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIDAsCisJCSAgICAgICBzaXplb2YocHJpdi0+a2V5c1tpbmRleF0uZGF0YSkpOworCQltZW1jcHkocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwga2V5YnVmLCBlcnEtPmxlbmd0aCk7CisJfQorCXByaXYtPnR4X2tleSA9IHNldGluZGV4OworCisJLyogVHJ5IGZhc3Qga2V5IGNoYW5nZSBpZiBjb25uZWN0ZWQgYW5kIG9ubHkga2V5cyBhcmUgY2hhbmdlZCAqLworCWlmICgocHJpdi0+ZW5jb2RlX2FsZyA9PSBlbmNvZGVfYWxnKSAmJgorCSAgICAocHJpdi0+d2VwX3Jlc3RyaWN0ID09IHJlc3RyaWN0ZWQpICYmCisJICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKKwkJLyogTm8gbmVlZCB0byBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2LT5lbmNvZGVfYWxnID0gZW5jb2RlX2FsZzsKKwlwcml2LT53ZXBfcmVzdHJpY3QgPSByZXN0cmljdGVkOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgICAgIGNoYXIgKmtleWJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCXUxNiB4bGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5oYXNfd2VwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCisJCWluZGV4ID0gcHJpdi0+dHhfa2V5OworCisJZXJxLT5mbGFncyA9IDA7CisJaWYgKCFwcml2LT5lbmNvZGVfYWxnKQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwllcnEtPmZsYWdzIHw9IGluZGV4ICsgMTsKKworCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CisJZWxzZQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOworCisJeGxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaW5kZXhdLmxlbik7CisKKwllcnEtPmxlbmd0aCA9IHhsZW47CisKKwltZW1jcHkoa2V5YnVmLCBwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBPUklOT0NPX01BWF9LRVlfU0laRSk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgIGNoYXIgKmVzc2lkYnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBOb3RlIDogRVNTSUQgaXMgaWdub3JlZCBpbiBBZC1Ib2MgZGVtbyBtb2RlLCBidXQgd2UgY2FuIHNldCBpdAorCSAqIGFueXdheS4uLiAtIEplYW4gSUkgKi8KKworCS8qIEh1bS4uLiBTaG91bGQgbm90IHVzZSBXaXJlbGVzcyBFeHRlbnNpb24gY29uc3RhbnQgKG1heSBjaGFuZ2UpLAorCSAqIHNob3VsZCB1c2Ugb3VyIG93bi4uLiAtIEplYW4gSUkgKi8KKwlpZiAoZXJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJcmV0dXJuIC1FMkJJRzsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogTlVMTCB0aGUgc3RyaW5nIChmb3IgTlVMTCB0ZXJtaW5hdGlvbiAmIEVTU0lEID0gQU5ZKSAtIEplYW4gSUkgKi8KKwltZW1zZXQocHJpdi0+ZGVzaXJlZF9lc3NpZCwgMCwgc2l6ZW9mKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKKworCS8qIElmIG5vdCBBTlksIGdldCB0aGUgbmV3IEVTU0lEICovCisJaWYgKGVycS0+ZmxhZ3MpCisJCW1lbWNweShwcml2LT5kZXNpcmVkX2Vzc2lkLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgY2hhciAqZXNzaWRidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGFjdGl2ZTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSBvcmlub2NvX2h3X2dldF9lc3NpZChwcml2LCAmYWN0aXZlLCBlc3NpZGJ1Zik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJxLT5sZW5ndGggPSBlcnI7CisJfSBlbHNlIHsKKwkJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCQlyZXR1cm4gLUVCVVNZOworCQltZW1jcHkoZXNzaWRidWYsIHByaXYtPmRlc2lyZWRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwkJZXJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCk7CisJCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJfQorCisJZXJxLT5mbGFncyA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCisJCQkJIGNoYXIgKm5pY2tidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChucnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQorCQlyZXR1cm4gLUUyQklHOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKKwltZW1jcHkocHJpdi0+bmljaywgbmlja2J1ZiwgbnJxLT5sZW5ndGgpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAorCQkJCSBjaGFyICpuaWNrYnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbWNweShuaWNrYnVmLCBwcml2LT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSk7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCW5ycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBjaGFuID0gLTE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCisJLyogSW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSB0aGUgQVAgc2V0cyB0aGUgY2hhbm5lbCAqLworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfSU5GUkEpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoKGZycS0+ZSA9PSAwKSAmJiAoZnJxLT5tIDw9IDEwMDApKSB7CisJCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KKwkJY2hhbiA9IGZycS0+bTsKKwl9IGVsc2UgeworCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAqLworCQlpbnQgZGVub20gPSAxOworCQlpbnQgaTsKKworCQkvKiBDYWxjdWxhdGUgZGVub21pbmF0b3IgdG8gcmVzY2FsZSB0byBNSHogKi8KKwkJZm9yIChpID0gMDsgaSA8ICg2IC0gZnJxLT5lKTsgaSsrKQorCQkJZGVub20gKj0gMTA7CisKKwkJY2hhbiA9IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcnEtPm0gLyBkZW5vbSk7CisJfQorCisJaWYgKChjaGFuIDwgMSkgfHwgKGNoYW4gPiBOVU1fQ0hBTk5FTFMpIHx8CisJICAgICAhKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IChjaGFuLTEpKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5jaGFubmVsID0gY2hhbjsKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJLyogRmFzdCBjaGFubmVsIGNoYW5nZSAtIG5vIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCisJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9TRVRfQ0hBTk5FTCwKKwkJCQkJY2hhbiwgTlVMTCk7CisJfQorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdG1wOworCisJLyogTG9ja2luZyBkb25lIGluIHRoZXJlICovCisJdG1wID0gb3Jpbm9jb19od19nZXRfZnJlcShwcml2KTsKKwlpZiAodG1wIDwgMCkKKwkJcmV0dXJuIHRtcDsKKworCWZycS0+bSA9IHRtcCAqIDEwMDAwMDsKKwlmcnEtPmUgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJdTE2IHZhbDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc19zZW5zaXRpdml0eSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLCAmdmFsKTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNycS0+dmFsdWUgPSB2YWw7CisJc3JxLT5maXhlZCA9IDA7IC8qIGF1dG8gKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbCA9IHNycS0+dmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoKHZhbCA8IDEpIHx8ICh2YWwgPiAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlwcml2LT5hcF9kZW5zaXR5ID0gdmFsOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gcnJxLT52YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHJycS0+ZGlzYWJsZWQpCisJCXZhbCA9IDIzNDc7CisKKwlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyMzQ3KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPnJ0c190aHJlc2ggPSB2YWw7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcnJxLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2g7CisJcnJxLT5kaXNhYmxlZCA9IChycnEtPnZhbHVlID09IDIzNDcpOworCXJycS0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcml2LT5oYXNfbXdvKSB7CisJCWlmIChmcnEtPmRpc2FibGVkKQorCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDA7CisJCWVsc2UgeworCQkJaWYgKGZycS0+Zml4ZWQpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZpeGVkIGZyYWdtZW50YXRpb24gIgorCQkJCSAgICAgICAiaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGZpcm13YXJlLiAiCisJCQkJICAgICAgICJVc2luZyBNV08gcm9idXN0IGluc3RlYWQuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZnJxLT5kaXNhYmxlZCkKKwkJCXByaXYtPmZyYWdfdGhyZXNoID0gMjM0NjsKKwkJZWxzZSB7CisJCQlpZiAoKGZycS0+dmFsdWUgPCAyNTYpIHx8IChmcnEtPnZhbHVlID4gMjM0NikpCisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQkvKiBtdXN0IGJlIGV2ZW4gKi8KKwkJCQlwcml2LT5mcmFnX3RocmVzaCA9IGZycS0+dmFsdWUgJiB+MHgxOworCQl9CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwl1MTYgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcml2LT5oYXNfbXdvKSB7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICZ2YWwpOworCQlpZiAoZXJyKQorCQkJdmFsID0gMDsKKworCQlmcnEtPnZhbHVlID0gdmFsID8gMjM0NyA6IDA7CisJCWZycS0+ZGlzYWJsZWQgPSAhdmFsOworCQlmcnEtPmZpeGVkID0gMDsKKwl9IGVsc2UgeworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCisJCQkJCSAgJnZhbCk7CisJCWlmIChlcnIpCisJCQl2YWwgPSAwOworCisJCWZycS0+dmFsdWUgPSB2YWw7CisJCWZycS0+ZGlzYWJsZWQgPSAodmFsID49IDIzNDYpOworCQlmcnEtPmZpeGVkID0gMTsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYXRlbW9kZTsKKwlpbnQgYml0cmF0ZTsgLyogMTAwcyBvZiBraWxvYml0cyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBBcyB0aGUgdXNlciBzcGFjZSBkb2Vzbid0IGtub3cgb3VyIGhpZ2hlc3QgcmF0ZSwgaXQgdXNlcyAtMQorCSAqIHRvIGFzayB1cyB0byBzZXQgdGhlIGhpZ2hlc3QgcmF0ZS4gIFRlc3QgaXQgdXNpbmcgIml3Y29uZmlnCisJICogZXRoWCByYXRlIGF1dG8iIC0gSmVhbiBJSSAqLworCWlmIChycnEtPnZhbHVlID09IC0xKQorCQliaXRyYXRlID0gMTEwOworCWVsc2UgeworCQlpZiAocnJxLT52YWx1ZSAlIDEwMDAwMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQliaXRyYXRlID0gcnJxLT52YWx1ZSAvIDEwMDAwMDsKKwl9CisKKwlyYXRlbW9kZSA9IG9yaW5vY29fZ2V0X2JpdHJhdGVtb2RlKGJpdHJhdGUsICFycnEtPmZpeGVkKTsKKworCWlmIChyYXRlbW9kZSA9PSAtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlwcml2LT5iaXRyYXRlbW9kZSA9IHJhdGVtb2RlOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisJaW50IGJpdHJhdGUsIGF1dG9tYXRpYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlvcmlub2NvX2dldF9yYXRlbW9kZV9jZmcocHJpdi0+Yml0cmF0ZW1vZGUsICZiaXRyYXRlLCAmYXV0b21hdGljKTsKKworCS8qIElmIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZyB3ZSB0cnkgdG8gZmluZCBtb3JlIGFib3V0IHRoZQorCSAgIGN1cnJlbnQgbW9kZSAqLworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWVyciA9IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHByaXYsICZiaXRyYXRlKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlycnEtPnZhbHVlID0gYml0cmF0ZTsKKwlycnEtPmZpeGVkID0gIWF1dG9tYXRpYzsKKwlycnEtPmRpc2FibGVkID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJxLT5kaXNhYmxlZCkgeworCQlwcml2LT5wbV9vbiA9IDA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgeworCQljYXNlIElXX1BPV0VSX1VOSUNBU1RfUjoKKwkJCXByaXYtPnBtX21jYXN0ID0gMDsKKwkJCXByaXYtPnBtX29uID0gMTsKKwkJCWJyZWFrOworCQljYXNlIElXX1BPV0VSX0FMTF9SOgorCQkJcHJpdi0+cG1fbWNhc3QgPSAxOworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgSVdfUE9XRVJfT046CisJCQkvKiBObyBmbGFncyA6IGJ1dCB3ZSBtYXkgaGF2ZSBhIHZhbHVlIC0gSmVhbiBJSSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpIHsKKwkJCXByaXYtPnBtX29uID0gMTsKKwkJCXByaXYtPnBtX3RpbWVvdXQgPSBwcnEtPnZhbHVlIC8gMTAwMDsKKwkJfQorCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1BFUklPRCkgeworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJcHJpdi0+cG1fcGVyaW9kID0gcHJxLT52YWx1ZSAvIDEwMDA7CisJCX0KKwkJLyogSXQncyB2YWxpZCB0byBub3QgaGF2ZSBhIHZhbHVlIGlmIHdlIGFyZSBqdXN0IHRvZ2dsaW5nCisJCSAqIHRoZSBmbGFncy4uLiBKZWFuIElJICovCisJCWlmICghcHJpdi0+cG1fb24pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTE2IGVuYWJsZSwgcGVyaW9kLCB0aW1lb3V0LCBtY2FzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELCAmZW5hYmxlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCAmcGVyaW9kKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sICZ0aW1lb3V0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLCAmbWNhc3QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJcHJxLT5kaXNhYmxlZCA9ICFlbmFibGU7CisJLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHBlcmlvZCAqLworCWlmICgocHJxLT5mbGFncyAmIElXX1BPV0VSX1RZUEUpID09IElXX1BPV0VSX1RJTUVPVVQpIHsKKwkJcHJxLT5mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CisJCXBycS0+dmFsdWUgPSB0aW1lb3V0ICogMTAwMDsKKwl9IGVsc2UgeworCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOworCQlwcnEtPnZhbHVlID0gcGVyaW9kICogMTAwMDsKKwl9CisJaWYgKG1jYXN0KQorCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX0FMTF9SOworCWVsc2UKKwkJcHJxLT5mbGFncyB8PSBJV19QT1dFUl9VTklDQVNUX1I7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkJICAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCWludCBpZHgsIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRUlOVkFMOworCXUxNiBrZXlfbGVuOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KKwlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisJaWYgKGlkeCkgeworCQlpZiAoKGlkeCA8IDEpIHx8IChpZHggPiA0KSkKKwkJCWdvdG8gb3V0OworCQlpZHgtLTsKKwl9IGVsc2UKKwkJaWR4ID0gcHJpdi0+dHhfa2V5OworCisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwkJYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCisJaWYgKHByaXYtPmhhc193cGEgJiYgKGFsZyAhPSBJV19FTkNPREVfQUxHX1RLSVApKSB7CisJCS8qIENsZWFyIGFueSBUS0lQIFRYIGtleSB3ZSBoYWQgKi8KKwkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgcHJpdi0+dHhfa2V5KTsKKwl9CisKKwlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKKwkJcHJpdi0+dHhfa2V5ID0gaWR4OworCQlzZXRfa2V5ID0gKChhbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB8fAorCQkJICAgKGV4dC0+a2V5X2xlbiA+IDApKSA/IDEgOiAwOworCX0KKworCWlmIChzZXRfa2V5KSB7CisJCS8qIFNldCB0aGUgcmVxdWVzdGVkIGtleSBmaXJzdCAqLworCQlzd2l0Y2ggKGFsZykgeworCQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKKwkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7CisJCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CisJCQlpZiAoZXh0LT5rZXlfbGVuID4gU01BTExfS0VZX1NJWkUpCisJCQkJa2V5X2xlbiA9IExBUkdFX0tFWV9TSVpFOworCQkJZWxzZSBpZiAoZXh0LT5rZXlfbGVuID4gMCkKKwkJCQlrZXlfbGVuID0gU01BTExfS0VZX1NJWkU7CisJCQllbHNlCisJCQkJZ290byBvdXQ7CisKKwkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7CisJCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gY3B1X3RvX2xlMTYoa2V5X2xlbik7CisKKwkJCWtleV9sZW4gPSBtaW4oZXh0LT5rZXlfbGVuLCBrZXlfbGVuKTsKKworCQkJbWVtc2V0KHByaXYtPmtleXNbaWR4XS5kYXRhLCAwLCBPUklOT0NPX01BWF9LRVlfU0laRSk7CisJCQltZW1jcHkocHJpdi0+a2V5c1tpZHhdLmRhdGEsIGV4dC0+a2V5LCBrZXlfbGVuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgorCQl7CisJCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJCQl1OCAqdGtpcF9pdiA9IE5VTEw7CisKKwkJCWlmICghcHJpdi0+aGFzX3dwYSB8fAorCQkJICAgIChleHQtPmtleV9sZW4gPiBzaXplb2YocHJpdi0+dGtpcF9rZXlbMF0pKSkKKwkJCQlnb3RvIG91dDsKKworCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKKwkJCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgMCwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+dGtpcF9rZXlbaWR4XSkpOworCQkJbWVtY3B5KCZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKworCQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCisJCQkJdGtpcF9pdiA9ICZleHQtPnJ4X3NlcVswXTsKKworCQkJZXJyID0gX19vcmlub2NvX2h3X3NldF90a2lwX2tleShodywgaWR4LAorCQkJCSBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSwKKwkJCQkgKHU4ICopICZwcml2LT50a2lwX2tleVtpZHhdLAorCQkJCSB0a2lwX2l2LCBOVUxMKTsKKwkJCWlmIChlcnIpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBUS0lQIGtleSIKKwkJCQkgICAgICAgIlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCisJCQlnb3RvIG91dDsKKwkJfQorCQlkZWZhdWx0OgorCQkJZ290byBvdXQ7CisJCX0KKwl9CisJZXJyID0gLUVJTlBST0dSRVNTOworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCQkgICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgbWF4X2tleV9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSAtRUlOVkFMOworCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKKwlpZiAobWF4X2tleV9sZW4gPCAwKQorCQlnb3RvIG91dDsKKworCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpZiAoaWR4KSB7CisJCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQorCQkJZ290byBvdXQ7CisJCWlkeC0tOworCX0gZWxzZQorCQlpZHggPSBwcml2LT50eF9rZXk7CisKKwllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOworCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7CisKKwlleHQtPmFsZyA9IHByaXYtPmVuY29kZV9hbGc7CisJc3dpdGNoIChwcml2LT5lbmNvZGVfYWxnKSB7CisJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisJCWV4dC0+a2V5X2xlbiA9IDA7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CisJCWV4dC0+a2V5X2xlbiA9IG1pbl90KHUxNiwgbGUxNl90b19jcHUocHJpdi0+a2V5c1tpZHhdLmxlbiksCisJCQkJICAgICBtYXhfa2V5X2xlbik7CisJCW1lbWNweShleHQtPmtleSwgcHJpdi0+a2V5c1tpZHhdLmRhdGEsIGV4dC0+a2V5X2xlbik7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CisJCWV4dC0+a2V5X2xlbiA9IG1pbl90KHUxNiwgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3RraXBfa2V5KSwKKwkJCQkgICAgIG1heF9rZXlfbGVuKTsKKwkJbWVtY3B5KGV4dC0+a2V5LCAmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXlfbGVuKTsKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOworCQlicmVhazsKKwl9CisKKwllcnIgPSAwOworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlBST0dSRVNTOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorCQkvKgorCQkgKiBvcmlub2NvIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCisJCSAqLworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJLyogd2xfbGttIGltcGxpZXMgdmFsdWUgMiA9PSBQU0sgZm9yIEhlcm1lcyBJCisJCSAqIHdoaWNoIHRpZXMgaW4gd2l0aCBXRVhUCisJCSAqIG5vIG90aGVyIGhpbnRzIHRobyA6KAorCQkgKi8KKwkJcHJpdi0+a2V5X21nbXQgPSBwYXJhbS0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQkvKiBXaGVuIGNvdW50ZXJtZWFzdXJlcyBhcmUgZW5hYmxlZCwgc2h1dCBkb3duIHRoZQorCQkgKiBjYXJkOyB3aGVuIGRpc2FibGVkLCByZS1lbmFibGUgdGhlIGNhcmQuIFRoaXMgbXVzdAorCQkgKiB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseS4KKwkJICoKKwkJICogVE9ETzogTWFrZSBzdXJlIHRoYXQgdGhlIEVBUE9MIG1lc3NhZ2UgaXMgZ2V0dGluZworCQkgKiAgICAgICBvdXQgYmVmb3JlIGNhcmQgZGlzYWJsZWQKKwkJICovCisJCWlmIChwYXJhbS0+dmFsdWUpIHsKKwkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMTsKKwkJCXJldCA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJCX0gZWxzZSB7CisJCQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7CisJCQlyZXQgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCQlwcml2LT53ZXBfcmVzdHJpY3QgPSAxOworCQllbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKKwkJCXByaXYtPndlcF9yZXN0cmljdCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlpZiAocHJpdi0+aGFzX3dwYSkgeworCQkJcHJpdi0+d3BhX2VuYWJsZWQgPSBwYXJhbS0+dmFsdWUgPyAxIDogMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYXJhbS0+dmFsdWUpCisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkvKiBlbHNlIHNpbGVudGx5IGFjY2VwdCBkaXNhYmxlIG9mIFdQQSAqLworCQkJcHJpdi0+d3BhX2VuYWJsZWQgPSAwOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJcGFyYW0tPnZhbHVlID0gcHJpdi0+a2V5X21nbXQ7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQlwYXJhbS0+dmFsdWUgPSBwcml2LT50a2lwX2NtX2FjdGl2ZTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19TSEFSRURfS0VZOworCQllbHNlCisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXBhcmFtLT52YWx1ZSA9IHByaXYtPndwYV9lbmFibGVkOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTggKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogY3V0IG9mZiBhdCBJRUVFODAyMTFfTUFYX0RBVEFfTEVOICovCisJaWYgKCh3cnF1LT5kYXRhLmxlbmd0aCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4pIHx8CisJICAgICh3cnF1LT5kYXRhLmxlbmd0aCAmJiAoZXh0cmEgPT0gTlVMTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkgeworCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtY3B5KGJ1ZiwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKKwl9IGVsc2UKKwkJYnVmID0gTlVMTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJa2ZyZWUocHJpdi0+d3BhX2llKTsKKwlwcml2LT53cGFfaWUgPSBidWY7CisJcHJpdi0+d3BhX2llX2xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOworCisJaWYgKHByaXYtPndwYV9pZSkgeworCQkvKiBMb29rcyBsaWtlIHdsX2xrbSB3YW50cyB0byBjaGVjayB0aGUgYXV0aCBhbGcsIGFuZAorCQkgKiBzb21laG93IHBhc3MgaXQgdG8gdGhlIGZpcm13YXJlLgorCQkgKiBJbnN0ZWFkIGl0IGp1c3QgY2FsbHMgdGhlIGtleSBtZ210IHJpZAorCQkgKiAgIC0gd2UgZG8gdGhpcyBpbiBzZXQgYXV0aC4KKwkJICovCisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKChwcml2LT53cGFfaWVfbGVuID09IDApIHx8IChwcml2LT53cGFfaWUgPT0gTlVMTCkpIHsKKwkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBwcml2LT53cGFfaWVfbGVuKSB7CisJCWVyciA9IC1FMkJJRzsKKwkJZ290byBvdXQ7CisJfQorCisJd3JxdS0+ZGF0YS5sZW5ndGggPSBwcml2LT53cGFfaWVfbGVuOworCW1lbWNweShleHRyYSwgcHJpdi0+d3BhX2llLCBwcml2LT53cGFfaWVfbGVuKTsKKworb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopZXh0cmE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoIChtbG1lLT5jbWQpIHsKKwljYXNlIElXX01MTUVfREVBVVRIOgorCQkvKiBzaWxlbnRseSBpZ25vcmUgKi8KKwkJYnJlYWs7CisKKwljYXNlIElXX01MTUVfRElTQVNTT0M6CisJeworCQlzdHJ1Y3QgeworCQkJdTggYWRkcltFVEhfQUxFTl07CisJCQlfX2xlMTYgcmVhc29uX2NvZGU7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKKworCQltZW1jcHkoYnVmLmFkZHIsIG1sbWUtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOworCQlidWYucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7CisJCXJldCA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRElTQVNTT0NJQVRFLAorCQkJCQkgICZidWYpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgc2hvcnRfbGltaXQsIGxvbmdfbGltaXQsIGxpZmV0aW1lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NIT1JUUkVUUllMSU1JVCwKKwkJCQkgICZzaG9ydF9saW1pdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9MT05HUkVUUllMSU1JVCwKKwkJCQkgICZsb25nX2xpbWl0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX01BWFRSQU5TTUlUTElGRVRJTUUsCisJCQkJICAmbGlmZXRpbWUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJcnJxLT5kaXNhYmxlZCA9IDA7CQkvKiBDYW4ndCBiZSBkaXNhYmxlZCAqLworCisJLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHJldHJ5IG51bWJlciAqLworCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7CisJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKKwkJcnJxLT52YWx1ZSA9IGxpZmV0aW1lICogMTAwMDsJLyogPz8/ICovCisJfSBlbHNlIHsKKwkJLyogQnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgbWluIG51bWJlciAqLworCQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSkgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKKwkJCXJycS0+dmFsdWUgPSBsb25nX2xpbWl0OworCQl9IGVsc2UgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCQkJcnJxLT52YWx1ZSA9IHNob3J0X2xpbWl0OworCQkJaWYgKHNob3J0X2xpbWl0ICE9IGxvbmdfbGltaXQpCisJCQkJcnJxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKKwkJfQorCX0KKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB2b2lkICp3cnF1LAorCQkJICAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGluZm8tPmNtZCA9PSAoU0lPQ0lXRklSU1RQUklWICsgMHgxKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvcmNpbmcgcmVzZXQhXG4iLCBkZXYtPm5hbWUpOworCisJCS8qIEZpcm13YXJlIHJlc2V0ICovCisJCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2Ugc2NoZWR1bGluZyByZXNldCFcbiIsIGRldi0+bmFtZSk7CisKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKKworeworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSAqKChpbnQgKikgZXh0cmEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmlic3NfcG9ydCA9IHZhbCA7CisKKwkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCisJc2V0X3BvcnRfdHlwZShwcml2KTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgdm9pZCAqd3JxdSwKKwkJCQkgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKKworCSp2YWwgPSBwcml2LT5pYnNzX3BvcnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHZvaWQgKndycXUsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gKigoaW50ICopIGV4dHJhKTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDogLyogVHJ5IHRvIGRvIElFRUUgYWQtaG9jIG1vZGUgKi8KKwkJaWYgKCFwcml2LT5oYXNfaWJzcykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXByaXYtPnByZWZlcl9wb3J0MyA9IDA7CisKKwkJYnJlYWs7CisKKwljYXNlIDE6IC8qIFRyeSB0byBkbyBMdWNlbnQgcHJvcHJpZXRhcnkgYWQtaG9jIG1vZGUgKi8KKwkJaWYgKCFwcml2LT5oYXNfcG9ydDMpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFlcnIpIHsKKwkJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLworCQlzZXRfcG9ydF90eXBlKHByaXYpOworCQllcnIgPSAtRUlOUFJPR1JFU1M7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHZvaWQgKndycXUsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7CisKKwkqdmFsID0gcHJpdi0+cHJlZmVyX3BvcnQzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdmFsOworCisJaWYgKCFwcml2LT5oYXNfcHJlYW1ibGUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIDgwMi4xMWIgaGFzIHJlY2VudGx5IGRlZmluZWQgc29tZSBzaG9ydCBwcmVhbWJsZS4KKwkgKiBCYXNpY2FsbHksIHRoZSBQaHkgaGVhZGVyIGhhcyBiZWVuIHJlZHVjZWQgaW4gc2l6ZS4KKwkgKiBUaGlzIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGF0IGhpZ2ggcmF0ZXMKKwkgKiAodGhlIHByZWFtYmxlIGlzIHRyYW5zbWl0dGVkIGF0IDFNYi9zKSwgdW5mb3J0dW5hdGVseQorCSAqIHRoaXMgZ2l2ZSBjb21wYXRpYmlsaXR5IHRyb3VibGVzLi4uIC0gSmVhbiBJSSAqLworCXZhbCA9ICooKGludCAqKSBleHRyYSk7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICh2YWwpCisJCXByaXYtPnByZWFtYmxlID0gMTsKKwllbHNlCisJCXByaXYtPnByZWFtYmxlID0gMDsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOworCisJaWYgKCFwcml2LT5oYXNfcHJlYW1ibGUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCSp2YWwgPSBwcml2LT5wcmVhbWJsZTsKKwlyZXR1cm4gMDsKK30KKworLyogaW9jdGwgaW50ZXJmYWNlIHRvIGhlcm1lc19yZWFkX2x0digpCisgKiBUbyB1c2Ugd2l0aCBpd3ByaXYsIHBhc3MgdGhlIFJJRCBhcyB0aGUgdG9rZW4gYXJndW1lbnQsIGUuZy4KKyAqIGl3cHJpdiBnZXRfcmlkIFsweGZjMDBdCisgKiBBdCBsZWFzdCBXaXJlbGVzcyBUb29scyAyNSBpcyByZXF1aXJlZCB0byB1c2UgaXdwcml2LgorICogRm9yIFdpcmVsZXNzIFRvb2xzIDI1IGFuZCAyNiBhcHBlbmQgImR1bW15IiBhcmUgdGhlIGVuZC4gKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IHJpZCA9IGRhdGEtPmZsYWdzOworCXUxNiBsZW5ndGg7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSXQncyBhICJnZXQiIGZ1bmN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudCB1c2VycyB0byBhY2Nlc3MgdGhlCisJICogV0VQIGtleSBhbmQgb3RoZXIgcmF3IGZpcm13YXJlIGRhdGEgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAocmlkIDwgMHhmYzAwIHx8IHJpZCA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgTUFYX1JJRF9MRU4sICZsZW5ndGgsCisJCQkgICAgICBleHRyYSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkYXRhLT5sZW5ndGggPSBtaW5fdCh1MTYsIEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuZ3RoKSwKKwkJCSAgICAgTUFYX1JJRF9MRU4pOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworLyogVHJpZ2dlciBhIHNjYW4gKGxvb2sgZm9yIG90aGVyIGNlbGxzIGluIHRoZSB2aWNpbml0eSkgKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X3NjYW5fcmVxICpzaSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKikgZXh0cmE7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE5vdGUgOiB5b3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdCwgYXMgdGhpcyBpcyBhIFNFVCBvcGVyYXRpb24sCisJICogdGhpcyBpcyBwcml2aWxlZ2VkIGFuZCB0aGVyZWZvcmUgYSBub3JtYWwgdXNlciBjYW4ndAorCSAqIHBlcmZvcm0gc2Nhbm5pbmcuCisJICogVGhpcyBpcyBub3QgYW4gZXJyb3IsIHdoaWxlIHRoZSBkZXZpY2UgcGVyZm9ybSBzY2FubmluZywKKwkgKiB0cmFmZmljIGRvZXNuJ3QgZmxvdywgc28gaXQncyBhIHBlcmZlY3QgRG9TLi4uCisJICogSmVhbiBJSSAqLworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBTY2FubmluZyB3aXRoIHBvcnQgMCBkaXNhYmxlZCB3b3VsZCBmYWlsICovCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbiBtb25pdG9yIG1vZGUsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIGFsd2F5cyBlbXB0eS4KKwkgKiBQcm9iZSByZXNwb25zZXMgYXJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGFzIHJlY2VpdmVkCisJICogZnJhbWVzIGFuZCBjb3VsZCBiZSBwcm9jZXNzZWQgaW4gc29mdHdhcmUuICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBOb3RlIDogYmVjYXVzZSB3ZSBkb24ndCBsb2NrIG91dCB0aGUgaXJxIGhhbmRsZXIsIHRoZSB3YXkKKwkgKiB3ZSBhY2Nlc3Mgc2NhbiB2YXJpYWJsZXMgaW4gcHJpdiBpcyBjcml0aWNhbC4KKwkgKglvIHNjYW5faW5wcm9ncmVzcyA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCisJICoJbyBzY2FuX21vZGUgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgorCSAqIEJlZm9yZSBtb2RpZnlpbmcgYW55dGhpbmcgb24gdGhvc2UgdmFyaWFibGVzLCBwbGVhc2UgdGhpbmsgaGFyZCAhCisJICogSmVhbiBJSSAqLworCisJLyogU2F2ZSBmbGFncyAqLworCXByaXYtPnNjYW5fbW9kZSA9IHNycS0+ZmxhZ3M7CisKKwkvKiBBbHdheXMgdHJpZ2dlciBzY2FubmluZywgZXZlbiBpZiBpdCdzIGluIHByb2dyZXNzLgorCSAqIFRoaXMgd2F5LCBpZiB0aGUgaW5mbyBmcmFtZSBnZXQgbG9zdCwgd2Ugd2lsbCByZWNvdmVyIHNvbWV3aGF0CisJICogZ3JhY2VmdWxseSAgLSBKZWFuIElJICovCisKKwlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7CisJCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZIT1NUU0NBTl9TWU1CT0wsCisJCQkJCQlIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX09OQ0UgfAorCQkJCQkJSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9CQ0FTVCk7CisJCQlicmVhazsKKwkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiB7CisJCQlfX2xlMTYgcmVxWzNdOworCisJCQlyZXFbMF0gPSBjcHVfdG9fbGUxNigweDNmZmYpOwkvKiBBbGwgY2hhbm5lbHMgKi8KKwkJCXJlcVsxXSA9IGNwdV90b19sZTE2KDB4MDAwMSk7CS8qIHJhdGUgMSBNYnBzICovCisJCQlyZXFbMl0gPSAwOwkJCS8qIEFueSBFU1NJRCAqLworCQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCQkgIEhFUk1FU19SSURfQ05GSE9TVFNDQU4sICZyZXEpOworCQl9CisJCWJyZWFrOworCQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCQlpZiAocHJpdi0+c2Nhbl9tb2RlICYgSVdfU0NBTl9USElTX0VTU0lEKSB7CisJCQkJc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKKwkJCQlzaXplX3QgbGVuID0gbWluKHNpemVvZihpZGJ1Zi52YWwpLAorCQkJCQkJIChzaXplX3QpIHNpLT5lc3NpZF9sZW4pOworCQkJCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJCQkJbWVtY3B5KGlkYnVmLnZhbCwgc2ktPmVzc2lkLCBsZW4pOworCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCisJCQkJCSAgICAgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAorCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihsZW4gKyAyKSwKKwkJCQkJICAgICAgICZpZGJ1Zik7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQkgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAorCQkJCQkJICAgMCk7CS8qIEFueSBFU1NJRCAqLworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQkJCS8qIENsZWFyIHNjYW4gcmVzdWx0cyBhdCB0aGUgc3RhcnQgb2YKKwkJCQkgKiBhbiBleHRlbmRlZCBzY2FuICovCisJCQkJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKKworCQkJCS8qIFRPRE86IElzIHRoaXMgYXZhaWxhYmxlIG9uIG9sZGVyIGZpcm13YXJlPworCQkJCSAqICAgQ2FuIHdlIHVzZSBpdCB0byBzY2FuIHNwZWNpZmljIGNoYW5uZWxzCisJCQkJICogICBmb3IgSVdfU0NBTl9USElTX0ZSRVE/ICovCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZTQ0FOQ0hBTk5FTFMyR0haLAorCQkJCQkJMHg3RkZGKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIG91dDsKKworCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LAorCQkJCQkJICAgICBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPKTsKKwkJCX0gZWxzZQorCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7CisKKwkvKiBPbmUgbW9yZSBjbGllbnQgKi8KKwlpZiAoIWVycikKKwkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKKworLyogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGFudAorICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCQkgICBjaGFyICpjdXJyZW50X2V2LAorCQkJCQkgICBjaGFyICplbmRfYnVmLAorCQkJCQkgICB1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICpic3MsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNgkJCWNhcGFiaWxpdGllczsKKwl1MTYJCQljaGFubmVsOworCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisKKwkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCisJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmEuYnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KKworCS8qIEFkZCB0aGUgRVNTSUQgKi8KKwlpd2UudS5kYXRhLmxlbmd0aCA9IGxlMTZfdG9fY3B1KGJzcy0+YS5lc3NpZF9sZW4pOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQorCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOworCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgYnNzLT5hLmVzc2lkKTsKKworCS8qIEFkZCBtb2RlICovCisJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+YS5jYXBhYmlsaXRpZXMpOworCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgeworCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJY2hhbm5lbCA9IGJzcy0+cy5jaGFubmVsOworCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7CisJCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOworCQlpd2UudS5mcmVxLmUgPSAwOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisJCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKSAqIDEwMDAwMDsKKwkJaXdlLnUuZnJlcS5lID0gMTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwl9CisKKwkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOworCWl3ZS51LnF1YWwubGV2ZWwgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLmxldmVsKSAtIDB4OTU7CisJaXdlLnUucXVhbC5ub2lzZSA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubm9pc2UpIC0gMHg5NTsKKwkvKiBXaXJlbGVzcyB0b29scyBwcmlvciB0byAyNy5wcmUyMiB3aWxsIHNob3cgbGluayBxdWFsaXR5CisJICogYW55d2F5LCBzbyB3ZSBwcm92aWRlIGEgcmVhc29uYWJsZSB2YWx1ZS4gKi8KKwlpZiAoaXdlLnUucXVhbC5sZXZlbCA+IGl3ZS51LnF1YWwubm9pc2UpCisJCWl3ZS51LnF1YWwucXVhbCA9IGl3ZS51LnF1YWwubGV2ZWwgLSBpd2UudS5xdWFsLm5vaXNlOworCWVsc2UKKwkJaXdlLnUucXVhbC5xdWFsID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisKKwkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCisJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJZWxzZQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBOVUxMKTsKKworCS8qIEJpdCByYXRlIGlzIG5vdCBhdmFpbGFibGUgaW4gTHVjZW50L0FnZXJlIGZpcm13YXJlcyAqLworCWlmIChwcml2LT5maXJtd2FyZV90eXBlICE9IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKKwkJY2hhciAqY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOworCQlpbnQgaTsKKwkJaW50IHN0ZXA7CisKKwkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wpCisJCQlzdGVwID0gMjsKKwkJZWxzZQorCQkJc3RlcCA9IDE7CisKKwkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCQkvKiBNYXggMTAgdmFsdWVzICovCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSArPSBzdGVwKSB7CisJCQkvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KKwkJCWlmIChic3MtPnAucmF0ZXNbaV0gPT0gMHgwKQorCQkJCWJyZWFrOworCQkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKwkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPQorCQkJCSgoYnNzLT5wLnJhdGVzW2ldICYgMHg3ZikgKiA1MDAwMDApOworCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgIGN1cnJlbnRfdmFsLAorCQkJCQkJCSAgIGVuZF9idWYsICZpd2UsCisJCQkJCQkJICAgSVdfRVZfUEFSQU1fTEVOKTsKKwkJfQorCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KKwkJaWYgKChjdXJyZW50X3ZhbCAtIGN1cnJlbnRfZXYpID4gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKQorCQkJY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOworCX0KKworCS8qIEJlYWNvbiBpbnRlcnZhbCAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJiY25faW50PSVkIiwKKwkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YS5iZWFjb25faW50ZXJ2KSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIENhcGFiaWxpdGVzICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCisJCQkJICAgICBjYXBhYmlsaXRpZXMpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKwkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCisJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJCSAgICAgICBjaGFyICpjdXJyZW50X2V2LAorCQkJCQkgICAgICAgY2hhciAqZW5kX2J1ZiwKKwkJCQkJICAgICAgIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3MsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKK3sKKwl1MTYJCQljYXBhYmlsaXRpZXM7CisJdTE2CQkJY2hhbm5lbDsKKwlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KKwljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07CisJdTggKmllOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKworCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KKworCS8qIEFkZCB0aGUgRVNTSUQgKi8KKwlpZSA9IGJzcy0+ZGF0YTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkgeworCQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7CisJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgJmllWzJdKTsKKwl9CisKKwkvKiBBZGQgbW9kZSAqLworCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+Y2FwYWJpbGl0aWVzKTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKKwkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9EU19QQVJBTVMpOworCWNoYW5uZWwgPSBpZSA/IGllWzJdIDogMDsKKwlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgeworCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCisJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKKwkJaXdlLnUuZnJlcS5lID0gMDsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKworCQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbm5lbCkgKiAxMDAwMDA7CisJCWl3ZS51LmZyZXEuZSA9IDE7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJfQorCisJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KKwlpd2UuY21kID0gSVdFVlFVQUw7CisJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5sZXZlbCAtIDB4OTU7CisJaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2UgLSAweDk1OworCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKKwkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLworCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKKwkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7CisJZWxzZQorCQlpd2UudS5xdWFsLnF1YWwgPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKworCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIE5VTEwpOworCisJLyogV1BBIElFICovCisJaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSk7CisJaWYgKGllKSB7CisJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgaWUpOworCX0KKworCS8qIFJTTiBJRSAqLworCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfUlNOKTsKKwlpZiAoaWUpIHsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBpZSk7CisJfQorCisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9TVVBQX1JBVEVTKTsKKwlpZiAoaWUpIHsKKwkJY2hhciAqcCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CisJCWludCBpOworCisJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKworCQlmb3IgKGkgPSAyOyBpIDwgKGllWzFdICsgMik7IGkrKykgeworCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoaWVbaV0gJiAweDdGKSAqIDUwMDAwMCk7CisJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwgZW5kX2J1ZiwKKwkJCQkJCSAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCQl9CisJCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLworCQlpZiAocCA+IChjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKSkKKwkJCWN1cnJlbnRfZXYgPSBwOworCX0KKworCS8qIFRpbWVzdGFtcCAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0KKwkJc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwgInRzZj0lMDE2bGx4IiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShic3MtPnRpbWVzdGFtcCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiYmNuX2ludD0lZCIsCisJCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmJlYWNvbl9pbnRlcnZhbCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBDYXBhYmlsaXRlcyAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJjYXBhYj0weCUwNHgiLAorCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCisJICogZm9yIGdpdmVuIG5ldHdvcmsuICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAorCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCXJldHVybiBjdXJyZW50X2V2OworfQorCisvKiBSZXR1cm4gcmVzdWx0cyBvZiBhIHNjYW4gKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkvKiBJbXBvcnRhbnQgbm90ZSA6IHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGNhbGxlcgorCQkgKiB1bnRpbCByZXN1bHRzIGFyZSByZWFkeSBmb3IgdmFyaW91cyByZWFzb25zLgorCQkgKiBGaXJzdCwgbWFuYWdpbmcgd2FpdCBxdWV1ZXMgaXMgY29tcGxleCBhbmQgcmFjeS4KKwkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbW1pbmcKKwkJICogaGVyZSAoaW4gZGV2X2lvY3RsKCkpLgorCQkgKiBUaGlyZCwgd2UgZ2VuZXJhdGUgYW4gV2lyZWxlc3MgRXZlbnQsIHNvIHRoZQorCQkgKiBjYWxsZXIgY2FuIHdhaXQgaXRzZWxmIG9uIHRoYXQgLSBKZWFuIElJICovCisJCWVyciA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKKwkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLworCQkJY3VycmVudF9ldiA9CisJCQkJb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oZGV2LCBpbmZvLAorCQkJCQkJCSAgIGN1cnJlbnRfZXYsCisJCQkJCQkJICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKKwkJCQkJCQkgICAmYnNzLT5ic3MsCisJCQkJCQkJICAgYnNzLT5sYXN0X3NjYW5uZWQpOworCisJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KKwkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCisJCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCisJCQkJICogYmlnZ2VyIGJ1ZmZlciAqLworCQkJCWVyciA9IC1FMkJJRzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJfSBlbHNlIHsKKwkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCisJCQljdXJyZW50X2V2ID0gb3Jpbm9jb190cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sCisJCQkJCQkJICAgIGN1cnJlbnRfZXYsCisJCQkJCQkJICAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCisJCQkJCQkJICAgICZic3MtPmJzcywKKwkJCQkJCQkgICAgYnNzLT5sYXN0X3NjYW5uZWQpOworCisJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KKwkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCisJCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCisJCQkJICogYmlnZ2VyIGJ1ZmZlciAqLworCQkJCWVyciA9IC1FMkJJRzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KKworCXNycS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7CisJc3JxLT5mbGFncyA9IChfX3UxNikgcHJpdi0+c2Nhbl9tb2RlOworCitvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBDb21taXQgaGFuZGxlciwgY2FsbGVkIGFmdGVyIHNldCBvcGVyYXRpb25zICovCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl2b2lkICp3cnF1LAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXByaXYtPm9wZW4pCisJCXJldHVybiAwOworCisJaWYgKHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgeworCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZGlzYWJsZSBwb3J0ICIKKwkJICAgICAgICJ3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsIGRldi0+bmFtZSk7CisJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVjb25maWd1cmUgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBwb3J0IHdoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworIG91dDoKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXNldHRpbmcgaW5zdGVhZC4uLlxuIiwgZGV2LT5uYW1lKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJCWVyciA9IDA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBvcmlub2NvX3ByaXZ0YWJbXSA9IHsKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MCwgMCwgMCwgImZvcmNlX3Jlc2V0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgxLCAwLCAwLCAiY2FyZF9yZXNldCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAwLCAic2V0X3BvcnQzIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgzLCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICJnZXRfcG9ydDMiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDQsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgMCwgInNldF9wcmVhbWJsZSIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NSwgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAiZ2V0X3ByZWFtYmxlIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg2LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIDAsICJzZXRfaWJzc3BvcnQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDcsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgImdldF9pYnNzcG9ydCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4OSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBNQVhfUklEX0xFTiwKKwkgICJnZXRfcmlkIiB9LAorfTsKKworCisvKgorICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCisgKi8KKworI2RlZmluZSBTVERfSVdfSEFORExFUihpZCwgZnVuYykgXAorCVtJV19JT0NUTF9JRFgoaWQpXSA9IChpd19oYW5kbGVyKSBmdW5jCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX2hhbmRsZXJbXSA9IHsKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQ09NTUlULAlvcmlub2NvX2lvY3RsX2NvbW1pdCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCW9yaW5vY29faW9jdGxfZ2V0bmFtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsCW9yaW5vY29faW9jdGxfc2V0ZnJlcSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsCW9yaW5vY29faW9jdGxfZ2V0ZnJlcSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCW9yaW5vY29faW9jdGxfc2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCW9yaW5vY29faW9jdGxfZ2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NFTlMsCW9yaW5vY29faW9jdGxfc2V0c2VucyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NFTlMsCW9yaW5vY29faW9jdGxfZ2V0c2VucyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLAlvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2UpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTUFksCWl3X2hhbmRsZXJfc2V0X3NweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NQWSwJaXdfaGFuZGxlcl9nZXRfc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXVEhSU1BZLAlpd19oYW5kbGVyX3NldF90aHJzcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdUSFJTUFksCWl3X2hhbmRsZXJfZ2V0X3RocnNweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FQLAlvcmlub2NvX2lvY3RsX3NldHdhcCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FQLAlvcmlub2NvX2lvY3RsX2dldHdhcCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCW9yaW5vY29faW9jdGxfc2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCW9yaW5vY29faW9jdGxfZ2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VTU0lELAlvcmlub2NvX2lvY3RsX3NldGVzc2lkKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRVNTSUQsCW9yaW5vY29faW9jdGxfZ2V0ZXNzaWQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9zZXRuaWNrKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTklDS04sCW9yaW5vY29faW9jdGxfZ2V0bmljayksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JBVEUsCW9yaW5vY29faW9jdGxfc2V0cmF0ZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBVEUsCW9yaW5vY29faW9jdGxfZ2V0cmF0ZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JUUywJb3Jpbm9jb19pb2N0bF9zZXRydHMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSVFMsCW9yaW5vY29faW9jdGxfZ2V0cnRzKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRlJBRywJb3Jpbm9jb19pb2N0bF9zZXRmcmFnKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRlJBRywJb3Jpbm9jb19pb2N0bF9nZXRmcmFnKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkVUUlksCW9yaW5vY29faW9jdGxfZ2V0cmV0cnkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREUsCW9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREUsCW9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9zZXRwb3dlciksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLAlvcmlub2NvX2lvY3RsX2dldHBvd2VyKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXR0VOSUUsCW9yaW5vY29faW9jdGxfc2V0X2dlbmllKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXR0VOSUUsCW9yaW5vY29faW9jdGxfZ2V0X2dlbmllKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXTUxNRSwJb3Jpbm9jb19pb2N0bF9zZXRfbWxtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsCW9yaW5vY29faW9jdGxfc2V0X2F1dGgpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBVVRILAlvcmlub2NvX2lvY3RsX2dldF9hdXRoKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dCksCit9OworCisKKy8qCisgIEFkZGVkIHR5cGVjYXN0aW5nIHNpbmNlIHdlIG5vIGxvbmdlciB1c2UgaXdyZXFfZGF0YSAtLSBNb3VzdGFmYQorICovCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX3ByaXZhdGVfaGFuZGxlcltdID0geworCVswXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAorCVsxXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAorCVsyXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHBvcnQzLAorCVszXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHBvcnQzLAorCVs0XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlLAorCVs1XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlLAorCVs2XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0LAorCVs3XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0LAorCVs5XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHJpZCwKK307CisKK2NvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKG9yaW5vY29faGFuZGxlciksCisJLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZhdGVfaGFuZGxlciksCisJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdnRhYiksCisJLnN0YW5kYXJkID0gb3Jpbm9jb19oYW5kbGVyLAorCS5wcml2YXRlID0gb3Jpbm9jb19wcml2YXRlX2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyA9IG9yaW5vY29fcHJpdnRhYiwKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDc5ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmgKQEAgLTAsMCArMSwxMyBAQAorLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyBzdXBwb3J0LgorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX1dFWFRfSF8KKyNkZWZpbmUgX09SSU5PQ09fV0VYVF9IXworCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworLyogU3RydWN0dXJlIGRlZmluaW5nIGFsbCBvdXIgV0VYVCBoYW5kbGVycyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmOworCisjZW5kaWYgLyogX09SSU5PQ09fV0VYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwppbmRleCBkMzQ2OWQwLi5iNDVkNmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwpAQCAtMSw5ICsxLDEwIEBACiBjb25maWcgUDU0X0NPTU1PTgogCXRyaXN0YXRlICJTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRldfTE9BREVSICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eCBiYXNlZCBjYXJkcy4KLQkgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSSBmcm9udGVuZHMKKwkgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHgvc3RsYzQ1eHggYmFzZWQgbW9kdWxlcy4KKwkgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kcwogCSAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy4KIAogCSAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0CkBAIC0xNywzMSArMTgsNiBAQAogCXNlbGVjdCBDUkMzMgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy4KLQkgIFRoZXNlIGFyZSBVU0IgYmFzZWQgYWRhcHRlcnMgZm91bmQgaW4gZGV2aWNlcyBzdWNoIGFzOgotCi0JICAzQ09NIDNDUldFMjU0RzcyCi0JICBTTUMgMjg2MlctRwotCSAgQWNjdG9uIDgwMi4xMWcgV040NTAxIFVTQgotCSAgU2llbWVucyBHaWdhc2V0IFVTQgotCSAgTmV0Z2VhciBXRzEyMQotCSAgTmV0Z2VhciBXRzExMQotCSAgTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUKLQkgIFNodXR0bGUgUE4xNSwgQWlydmFzdCBXTTE2OGcsIElPR2VhciBHV1U1MTMKLQkgIExpbmtzeXMgV1VTQjU0RwotCSAgTGlua3N5cyBXVVNCNTRHIFBvcnRhYmxlCi0JICBETGluayBEV0wtRzEyMCBTcGlubmFrZXIKLQkgIERMaW5rIERXTC1HMTIyCi0JICBCZWxraW4gRjVENzA1MCB2ZXIgMTAwMAotCSAgQ29oaWJhIFByb3RvIGJvYXJkCi0JICBTTUMgMjg2MlctRyB2ZXJzaW9uIDIKLQkgIFUuUy4gUm9ib3RpY3MgVTUgODAyLjExZyBBZGFwdGVyCi0JICBGVUpJVFNVIEUtNTQwMCBVU0IgRDE3MDAKLQkgIFNhZ2VtIFhHNzAzQQotCSAgRExpbmsgRFdMLUcxMjAgQ29oaWJhCi0JICBTcGlubmFrZXIgUHJvdG8gYm9hcmQKLQkgIExpbmtzeXMgV1VTQjU0QUcKLQkgIEludmVudGVsIFVSMDU0RwotCSAgU3Bpbm5ha2VyIERVVAogCiAJICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKIAkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KQEAgLTYxLDMgKzM3LDE4IEBACiAJICBodHRwOi8vcHJpc201NC5vcmcvCiAKIAkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRwY2kuCisKK2NvbmZpZyBQNTRfU1BJCisJdHJpc3RhdGUgIlByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFA1NF9DT01NT04gJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0hBUkRJUlFTCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzLgorCSAgVGhpcyBkcml2ZXIgaXMgZXhwZXJpbWVudGFsLCB1bnRlc3RlZCBhbmQgd2lsbCBwcm9iYWJseSBvbmx5IHdvcmsgb24KKwkgIE5va2lhJ3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS4KKworY29uZmlnIFA1NF9MRURTCisJYm9vbAorCWRlcGVuZHMgb24gUDU0X0NPTU1PTiAmJiBNQUM4MDIxMV9MRURTICYmIChMRURTX0NMQVNTID0geSB8fCBMRURTX0NMQVNTID0gUDU0X0NPTU1PTikKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQppbmRleCA0ZmE5Y2U3Li5jMjA1MGRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19QNTRfQ09NTU9OKQkrPSBwNTRjb21tb24ubwogb2JqLSQoQ09ORklHX1A1NF9VU0IpCQkrPSBwNTR1c2Iubwogb2JqLSQoQ09ORklHX1A1NF9QQ0kpCQkrPSBwNTRwY2kubworb2JqLSQoQ09ORklHX1A1NF9TUEkpCQkrPSBwNTRzcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCmluZGV4IGFiNzllMzIuLjJkZGE1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKQEAgLTE0LDYgKzE0LDEwIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyB7CiAJUDU0X0NPTlRST0xfVFlQRV9TRVRVUCA9IDAsCiAJUDU0X0NPTlRST0xfVFlQRV9TQ0FOLApAQCAtNDQsNiArNDgsMTggQEAKIAlQNTRfQ09OVFJPTF9UWVBFX0JUX09QVElPTlMgPSAzNQogfTsKIAorLyogcHJvdmlkZSAxNiBieXRlcyBmb3IgdGhlIHRyYW5zcG9ydCBiYWNrLWVuZCAqLworI2RlZmluZSBQNTRfVFhfSU5GT19EQVRBX1NJWkUJCTE2CisKKy8qIHN0b3JlZCBpbiBpZWVlODAyMTFfdHhfaW5mbydzIHJhdGVfZHJpdmVyX2RhdGEgKi8KK3N0cnVjdCBwNTRfdHhfaW5mbyB7CisJdTMyIHN0YXJ0X2FkZHI7CisJdTMyIGVuZF9hZGRyOworCXZvaWQgKmRhdGFbUDU0X1RYX0lORk9fREFUQV9TSVpFIC8gc2l6ZW9mKHZvaWQgKildOworfTsKKworI2RlZmluZSBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOCQkweDEwMDAKKwogI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTAkJQklUKDE1KQogI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVAkoQklUKDE1KSArIEJJVCgwKSkKIApAQCAtNzUsNiArOTEsMTQgQEAKIAlzMTYgbG9uZ2Jvd191bmsyOwogfTsKIAorc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgeworCXNpemVfdCBlbnRyaWVzOworCXNpemVfdCBlbnRyeV9zaXplOworCXNpemVfdCBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKwl1OCBkYXRhWzBdOworfTsKKwogI2RlZmluZSBFRVBST01fUkVBREJBQ0tfTEVOIDB4M2ZjCiAKICNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCkBAIC04NCw2ICsxMDgsMjkgQEAKICNkZWZpbmUgRldfTE04NyAweDRjNGQzODM3CiAjZGVmaW5lIEZXX0xNMjAgMHg0YzRkMzIzMAogCitlbnVtIGZ3X3N0YXRlIHsKKwlGV19TVEFURV9PRkYsCisJRldfU1RBVEVfQk9PVElORywKKwlGV19TVEFURV9SRUFEWSwKKwlGV19TVEFURV9SRVNFVCwKKwlGV19TVEFURV9SRVNFVFRJTkcsCit9OworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKworI2RlZmluZSBQNTRfTEVEX01BWF9OQU1FX0xFTiAzMQorCitzdHJ1Y3QgcDU0X2xlZF9kZXYgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3X2RldjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9kZXY7CisJY2hhciBuYW1lW1A1NF9MRURfTUFYX05BTUVfTEVOICsgMV07CisKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7Cit9OworCisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogc3RydWN0IHA1NF9jb21tb24gewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXUzMiByeF9zdGFydDsKQEAgLTk5LDExICsxNDYsMTIgQEAKIAlzdHJ1Y3QgbXV0ZXggY29uZl9tdXRleDsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IHJ4X2RpdmVyc2l0eV9tYXNrOworCXU4IHR4X2RpdmVyc2l0eV9tYXNrOwogCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKIAl1bnNpZ25lZCBpbnQgaXFfYXV0b2NhbF9sZW47Ci0Jc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqb3V0cHV0X2xpbWl0OwotCXVuc2lnbmVkIGludCBvdXRwdXRfbGltaXRfbGVuOwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YTsKKwlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqb3V0cHV0X2xpbWl0OworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpjdXJ2ZV9kYXRhOwogCXN0cnVjdCBwNTRfcnNzaV9saW5lYXJfYXBwcm94aW1hdGlvbiByc3NpY2FsX2RiW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7CiAJYm9vbCB1c2Vfc2hvcnRfc2xvdDsKQEAgLTExNSw3ICsxNjMsNyBAQAogCXVuc2lnbmVkIGludCBvdXRwdXRfcG93ZXI7CiAJdTMyIHRzZl9sb3czMjsKIAl1MzIgdHNmX2hpZ2gzMjsKLQl1NjQgYmFzaWNfcmF0ZV9tYXNrOworCXUzMiBiYXNpY19yYXRlX21hc2s7CiAJdTE2IHdha2V1cF90aW1lcjsKIAl1MTYgYWlkOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbOF07CkBAIC0xMjgsMTMgKzE3NiwyMSBAQAogCXN0cnVjdCBjb21wbGV0aW9uIGVlcHJvbV9jb21wOwogCXU4IHByaXZhY3lfY2FwczsKIAl1OCByeF9rZXljYWNoZV9zaXplOworCS8qIExFRCBtYW5hZ2VtZW50ICovCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJc3RydWN0IHA1NF9sZWRfZGV2IGFzc29jX2xlZDsKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgdHhfbGVkOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCXUxNiBzb2Z0bGVkX3N0YXRlOwkJLyogYml0IGZpZWxkIG9mIGdsb3dpbmcgTEVEcyAqLwogfTsKIAogaW50IHA1NF9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKK2ludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKTsKIGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbik7CitpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwogdm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIAogI2VuZGlmIC8qIFA1NF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKaW5kZXggZjE3MDEwNi4uMGMxYjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwpAQCAtMjEsNiArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpZmRlZiBDT05GSUdfUDU0X0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCiAKICNpbmNsdWRlICJwNTQuaCIKICNpbmNsdWRlICJwNTRjb21tb24uaCIKQEAgLTIzOSwxMSArMjQyLDExIEBACiAKIAlpZiAocHJpdi0+ZndfdmFyID49IDB4MzAwKSB7CiAJCS8qIEZpcm13YXJlIHN1cHBvcnRzIFFvUywgdXNlIGl0ISAqLwotCQlwcml2LT50eF9zdGF0c1s0XS5saW1pdCA9IDM7CQkvKiBBQ19WTyAqLwotCQlwcml2LT50eF9zdGF0c1s1XS5saW1pdCA9IDQ7CQkvKiBBQ19WSSAqLwotCQlwcml2LT50eF9zdGF0c1s2XS5saW1pdCA9IDM7CQkvKiBBQ19CRSAqLwotCQlwcml2LT50eF9zdGF0c1s3XS5saW1pdCA9IDI7CQkvKiBBQ19CSyAqLwotCQlkZXYtPnF1ZXVlcyA9IDQ7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WT10ubGltaXQgPSAzOworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVkldLmxpbWl0ID0gNDsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JFXS5saW1pdCA9IDM7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19CS10ubGltaXQgPSAyOworCQlkZXYtPnF1ZXVlcyA9IFA1NF9RVUVVRV9BQ19OVU07CiAJfQogCiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpCkBAIC0yNzIsMTMgKzI3NSwxOSBAQAogCXVuc2lnbmVkIGludCBpLCBqOwogCXZvaWQgKnNvdXJjZSwgKnRhcmdldDsKIAotCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKGNkX2xlbiwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSArIGNkX2xlbiwKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMgPSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplID0gc2l6ZW9mKF9fbGUxNikgKworCQlzaXplb2YoKmRzdCkgKiBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7CisJcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhLCBkYXRhKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5sZW4gPSBjZF9sZW47CisJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEtPmRhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOwogCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7Ci0JdGFyZ2V0ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKwl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgewogCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7CiAJCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKQEAgLTMxOCwxMyArMzI3LDE5IEBACiAJdW5zaWduZWQgaW50IGksIGo7CiAJdm9pZCAqc291cmNlLCAqdGFyZ2V0OwogCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2MoY2RfbGVuLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga3phbGxvYyhjZF9sZW4gKyBzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpLAorCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCisJCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOworCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKKwltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CiAJc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CiAJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKIAkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwpAQCAtMzc2LDcgKzM5MSwxMDIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHBkYV9jb3VudHJ5ICpjb3VudHJ5OworCisJaWYgKGxlbiAhPSBzaXplb2YoKmNvdW50cnkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIHBvc3NpYmxlIGludmFsaWQgZGVmYXVsdCBjb3VudHJ5ICIKKwkJCQkiZWVwcm9tIGVudHJ5LiAoZW50cnkgc2l6ZTogJWQpXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVuKTsKKworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiY291bnRyeToiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgZGF0YSwgbGVuKTsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXJldHVybjsKKwl9CisKKwljb3VudHJ5ID0gKHN0cnVjdCBwZGFfY291bnRyeSAqKSBkYXRhOworCWlmIChjb3VudHJ5LT5mbGFncyA9PSBQRFJfQ09VTlRSWV9DRVJUX0NPREVfUFNFVURPKQorCQlyZWd1bGF0b3J5X2hpbnQoZGV2LT53aXBoeSwgY291bnRyeS0+YWxwaGEyKTsKKwllbHNlIHsKKwkJLyogVE9ETzoKKwkJICogd3JpdGUgYSBzaGFyZWQvY29tbW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMKKwkJICogIlJlZ3VsYXRvcnkgZG9tYWluIGNvZGVzIiAoODAyLjExLTIwMDcgMTQuOC4yLjIpCisJCSAqIGludG8gSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGZvciByZWd1bGF0b3J5X2hpbnQuCisJCSAqLworCX0KK30KKworc3RhdGljIGludCBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHU4ICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKGxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0gIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIG91dHB1dCBwb3dlciBkYiByZXZpc2lvbjoleFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGRhdGFbMF0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoMiArIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgPiBsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhkYXRhWzFdICoKKwkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpICsKKwkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdi0+b3V0cHV0X2xpbWl0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0ID0gMDsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgPSBkYXRhWzFdOworCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KTsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmxlbiA9IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqCisJCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgKworCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQ7CisKKwltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhLCAmZGF0YVsyXSwKKwkgICAgICAgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpwNTRfY29udmVydF9kYihzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpzcmMsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpkc3Q7CisJc2l6ZV90IHBheWxvYWRfbGVuLCBlbnRyaWVzLCBlbnRyeV9zaXplLCBvZmZzZXQ7CisKKwlwYXlsb2FkX2xlbiA9IGxlMTZfdG9fY3B1KHNyYy0+bGVuKTsKKwllbnRyaWVzID0gbGUxNl90b19jcHUoc3JjLT5lbnRyaWVzKTsKKwllbnRyeV9zaXplID0gbGUxNl90b19jcHUoc3JjLT5lbnRyeV9zaXplKTsKKwlvZmZzZXQgPSBsZTE2X3RvX2NwdShzcmMtPm9mZnNldCk7CisJaWYgKCgoZW50cmllcyAqIGVudHJ5X3NpemUgKyBvZmZzZXQpICE9IHBheWxvYWRfbGVuKSB8fAorCSAgICAgKHBheWxvYWRfbGVuICsgc2l6ZW9mKCpzcmMpICE9IHRvdGFsX2xlbikpCisJCXJldHVybiBOVUxMOworCisJZHN0ID0ga21hbGxvYyhzaXplb2YoKmRzdCkgKyBwYXlsb2FkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc3QpCisJCXJldHVybiBOVUxMOworCisJZHN0LT5lbnRyaWVzID0gZW50cmllczsKKwlkc3QtPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOworCWRzdC0+b2Zmc2V0ID0gb2Zmc2V0OworCWRzdC0+bGVuID0gcGF5bG9hZF9sZW47CisKKwltZW1jcHkoZHN0LT5kYXRhLCBzcmMtPmRhdGEsIHBheWxvYWRfbGVuKTsKKwlyZXR1cm4gZHN0OworfQorCitpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwID0gTlVMTDsKQEAgLTQwMSwzMCArNTExLDE3IEBACiAKIAkJc3dpdGNoIChsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpIHsKIAkJY2FzZSBQRFJfTUFDX0FERFJFU1M6CisJCQlpZiAoZGF0YV9sZW4gIT0gRVRIX0FMRU4pCisJCQkJYnJlYWs7CiAJCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIGVudHJ5LT5kYXRhKTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUzoKLQkJCWlmIChkYXRhX2xlbiA8IDIpIHsKLQkJCQllcnIgPSAtRUlOVkFMOworCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCkKKwkJCQlicmVhazsKKwkJCWVyciA9IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoZGV2LCBlbnRyeS0+ZGF0YSwKKwkJCQkJCQlkYXRhX2xlbik7CisJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlpZiAoMiArIGVudHJ5LT5kYXRhWzFdKnNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSA+IGRhdGFfbGVuKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhlbnRyeS0+ZGF0YVsxXSAqCi0JCQkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LCAmZW50cnktPmRhdGFbMl0sCi0JCQkgICAgICAgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpKTsKLQkJCXByaXYtPm91dHB1dF9saW1pdF9sZW4gPSBlbnRyeS0+ZGF0YVsxXTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQTogewogCQkJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID0KQEAgLTQ2Myw2ICs1NjAsOSBAQAogCQkJbWVtY3B5KHByaXYtPmlxX2F1dG9jYWwsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CiAJCQlwcml2LT5pcV9hdXRvY2FsX2xlbiA9IGRhdGFfbGVuIC8gc2l6ZW9mKHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSk7CiAJCQlicmVhazsKKwkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgorCQkJcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CisJCQlicmVhazsKIAkJY2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6CiAJCQl0bXAgPSBlbnRyeS0+ZGF0YTsKIAkJCXdoaWxlICgodTggKil0bXAgPCBlbnRyeS0+ZGF0YSArIGRhdGFfbGVuKSB7CkBAIC00NzMsNiArNTczLDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQ6CisJCQlpZiAoZGF0YV9sZW4gPCAyKQorCQkJCWJyZWFrOwogCQkJcHJpdi0+dmVyc2lvbiA9ICoodTggKikoZW50cnktPmRhdGEgKyAxKTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OOgpAQCAtNDgxLDYgKzU4MywzNCBAQAogCQkJcDU0X3BhcnNlX3Jzc2ljYWwoZGV2LCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4sCiAJCQkJCSAgbGUxNl90b19jcHUoZW50cnktPmNvZGUpKTsKIAkJCWJyZWFrOworCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTTogeworCQkJX19sZTE2ICpzcmMgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCXMxNiAqZHN0ID0gKHZvaWQgKikgJnByaXYtPnJzc2ljYWxfZGI7CisJCQlpbnQgaTsKKworCQkJaWYgKGRhdGFfbGVuICE9IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpIC8KKwkJCQkJc2l6ZW9mKCpzcmMpOyBpKyspCisJCQkJKihkc3QrKykgPSAoczE2KSBsZTE2X3RvX2NwdSgqKHNyYysrKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NOiB7CisJCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCWlmIChwcml2LT5vdXRwdXRfbGltaXQgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCisJCQkJYnJlYWs7CisJCQlwcml2LT5vdXRwdXRfbGltaXQgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT006IHsKKwkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJaWYgKHByaXYtPmN1cnZlX2RhdGEgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCisJCQkJYnJlYWs7CisJCQlwcml2LT5jdXJ2ZV9kYXRhID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBQRFJfRU5EOgogCQkJLyogbWFrZSBpdCBvdmVycnVuICovCiAJCQllbnRyeV9sZW4gPSBsZW47CkBAIC00OTcsNyArNjI3LDYgQEAKIAkJY2FzZSBQRFJfVVRGOF9PRU1fTkFNRToKIAkJY2FzZSBQRFJfVVRGOF9QUk9EVUNUX05BTUU6CiAJCWNhc2UgUERSX0NPVU5UUllfTElTVDoKLQkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgogCQljYXNlIFBEUl9BTlRFTk5BX0dBSU46CiAJCWNhc2UgUERSX1BSSVNNX0lORElHT19QQV9DQUxJQlJBVElPTl9EQVRBOgogCQljYXNlIFBEUl9SRUdVTEFUT1JZX1BPV0VSX0xJTUlUUzoKQEAgLTUyNSwxMiArNjU0LDE2IEBACiAJfQogCiAJcHJpdi0+cnhodyA9IHN5bnRoICYgUERSX1NZTlRIX0ZST05URU5EX01BU0s7Ci0JaWYgKHByaXYtPnJ4aHcgPT0gNCkKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVykKIAkJcDU0X2luaXRfeGJvd19zeW50aChkZXYpOwogCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKIAlpZiAoIShzeW50aCAmIFBEUl9TWU5USF81X0dIWl9ESVNBQkxFRCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmJhbmRfNUdIejsKKwlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1JYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfUlhfRElWX1NVUFBPUlRFRCkKKwkJcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2sgPSAzOworCWlmICgoc3ludGggJiBQRFJfU1lOVEhfVFhfRElWX01BU0spID09IFBEUl9TWU5USF9UWF9ESVZfU1VQUE9SVEVEKQorCQlwcml2LT50eF9kaXZlcnNpdHlfbWFzayA9IDM7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT53aXBoeS0+cGVybV9hZGRyKSkgewogCQl1OCBwZXJtX2FkZHJbRVRIX0FMRU5dOwpAQCAtNTY4LDEzICs3MDEsMjEgQEAKIAkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwogCiBzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CiAKLQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCWlmIChwcml2LT5yeGh3ICE9IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7CisJZWxzZQorCQkvKgorCQkgKiBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IGZvcm11bGEKKwkJICovCisJCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCiAJCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKIH0KIApAQCAtNTk3LDEwICs3MzgsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRCkpKSB7Ci0JCWlmIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKLQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7Ci0JCWVsc2UKLQkJCXJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9PSykKQEAgLTY1NSw3ICs3OTMsOCBAQAogCQlyZXR1cm4gOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVzOyBpKyspCi0JCWlmIChwcml2LT50eF9zdGF0c1tpICsgNF0ubGVuIDwgcHJpdi0+dHhfc3RhdHNbaSArIDRdLmxpbWl0KQorCQlpZiAocHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5sZW4gPAorCQkgICAgcHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5saW1pdCkKIAkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldiwgaSk7CiB9CiAKQEAgLTY2Myw3ICs4MDIsNyBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGZyZWVkID0gMCwgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAKQEAgLTY4MSwxOCArODIwLDE4IEBACiAJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAJaWYgKHNrYi0+cHJldiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+cHJldik7Ci0JCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCWxhc3RfYWRkciA9IG1yLT5lbmRfYWRkcjsKIAl9CiAJaWYgKHNrYi0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+bmV4dCk7Ci0JCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CiAJfSBlbHNlCiAJCWZyZWVkID0gcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyOwpAQCAtNzM1LDcgKzg3NCw3IEBACiAJc3RydWN0IHA1NF9mcmFtZV9zZW50ICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudCAqKSBoZHItPmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwogCXUzMiBhZGRyID0gbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpIC0gcHJpdi0+aGVhZHJvb207Ci0Jc3RydWN0IG1lbXJlY29yZCAqcmFuZ2UgPSBOVUxMOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2UgPSBOVUxMOwogCXUzMiBmcmVlZCA9IDA7CiAJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NTgsMTAgKzg5NywxMCBAQAogCiAJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJCW5pID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+bmV4dCk7Ci0JCQltciA9IChzdHJ1Y3QgbWVtcmVjb3JkICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CisJCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CiAJCX0gZWxzZQogCQkJZnJlZWQgPSBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHI7CkBAIC03NzYsOSArOTE1LDE2IEBACiAJCXByaXYtPnR4X3N0YXRzW2VudHJ5X2RhdGEtPmh3X3F1ZXVlXS5sZW4tLTsKIAkJcHJpdi0+c3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQgKz0gcGF5bG9hZC0+dHJpZXMgLSAxOwogCi0JCWlmICh1bmxpa2VseShlbnRyeSA9PSBwcml2LT5jYWNoZWRfYmVhY29uKSkgeworCQkvKgorCQkgKiBGcmFtZXMgaW4gUDU0X1FVRVVFX0ZXU0NBTiBhbmQgUDU0X1FVRVVFX0JFQUNPTiBhcmUKKwkJICogZ2VuZXJhdGVkIGJ5IHRoZSBkcml2ZXIuIFRoZXJlZm9yZSB0eF9zdGF0dXMgaXMgYm9ndXMKKwkJICogYW5kIHdlIGRvbid0IHdhbnQgdG8gY29uZnVzZSB0aGUgbWFjODAyMTEgc3RhY2suCisJCSAqLworCQlpZiAodW5saWtlbHkoZW50cnlfZGF0YS0+aHdfcXVldWUgPCBQNTRfUVVFVUVfRldTQ0FOKSkgeworCQkJaWYgKGVudHJ5X2RhdGEtPmh3X3F1ZXVlID09IFA1NF9RVUVVRV9CRUFDT04pCisJCQkJcHJpdi0+Y2FjaGVkX2JlYWNvbiA9IE5VTEw7CisKIAkJCWtmcmVlX3NrYihlbnRyeSk7Ci0JCQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTk3MSw4ICsxMTE3LDggQEAKICAqIGNhbiBmaW5kIHNvbWUgdW51c2VkIG1lbW9yeSB0byB1cGxvYWQgb3VyIHBhY2tldHMgdG8uIEhvd2V2ZXIsIGRhdGEgdGhhdCB3ZQogICogd2FudCB0aGUgY2FyZCB0byBUWCBuZWVkcyB0byBzdGF5IGludGFjdCB1bnRpbCB0aGUgY2FyZCBoYXMgdG9sZCB1cyB0aGF0CiAgKiBpdCBpcyBkb25lIHdpdGggaXQuIFRoaXMgZnVuY3Rpb24gZmluZHMgZW1wdHkgcGxhY2VzIHdlIGNhbiB1cGxvYWQgdG8gYW5kCi0gKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfcnhfZnJhbWVfc2VudCBmcmVlcwotICogYWxsb2NhdGVkIGFyZWFzLgorICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X3J4X2ZyYW1lX3NlbnQgb3IKKyAqIHA1NF9mcmVlX3NrYiBmcmVlcyBhbGxvY2F0ZWQgYXJlYXMuCiAgKi8KIHN0YXRpYyBpbnQgcDU0X2Fzc2lnbl9hZGRyZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgcDU0X2hkciAqZGF0YSwgdTMyIGxlbikKQEAgLTk4MSw3ICsxMTI3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CiAJc3RydWN0IHNrX2J1ZmYgKnRhcmdldF9za2IgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwogCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIAl1MzIgbGFyZ2VzdF9ob2xlID0gMDsKIAl1MzIgdGFyZ2V0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKQEAgLTEwNjMsMjUgKzEyMDksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJdTE2IGhkcl9mbGFncywgdTE2IGxlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKQorc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IGhkcl9mbGFncywKKwkJCQkgICAgIHUxNiBwYXlsb2FkX2xlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgZnJhbWVfbGVuID0gc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW47CiAKLQlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgcHJpdi0+dHhfaGRyX2xlbiwgbWVtZmxhZ3MpOworCWlmIChmcmFtZV9sZW4gPiBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihwcml2LT50eF9oZHJfbGVuICsgZnJhbWVfbGVuLCBtZW1mbGFncyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwogCXNrYl9yZXNlcnZlKHNrYiwgcHJpdi0+dHhfaGRyX2xlbik7CiAKIAloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CiAJaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gLSBzaXplb2YoKmhkcikpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYocGF5bG9hZF9sZW4pOwogCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KHR5cGUpOwogCWhkci0+dHJpZXMgPSBoZHItPnJ0c190cmllcyA9IDA7CiAKLQlpZiAodW5saWtlbHkocDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgc2tiLCBoZHIsIGxlbikpKSB7CisJaWYgKHA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBmcmFtZV9sZW4pKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMDkxLDcgKzEyNDEsNiBAQAogaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IE5VTEw7CiAJc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBlZXByb21fc2l6ZSA9IDB4MjAyMCwgb2Zmc2V0ID0gMCwgYmxvY2tzaXplLCBtYXhibG9ja3NpemU7CkBAIC0xMTA0LDkgKzEyNTMsOSBAQAogCWVsc2UKIAkJbWF4YmxvY2tzaXplIC09IDB4NDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgc2l6ZW9mKCpoZHIpICsKLQkJCSAgICBzaXplb2YoKmVlcHJvbV9oZHIpICsgbWF4YmxvY2tzaXplLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZigqZWVwcm9tX2hkcikgKworCQkJICAgIG1heGJsb2Nrc2l6ZSwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCWdvdG8gZnJlZTsKIAlwcml2LT5lZXByb20gPSBremFsbG9jKEVFUFJPTV9SRUFEQkFDS19MRU4sIEdGUF9LRVJORUwpOwpAQCAtMTE2Miw5ICsxMzExLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfdGltICp0aW07CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCSAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKnRpbSksCi0JCSAgICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqdGltKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RJTSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMTgxLDkgKzEzMjksOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF9zdGFfdW5sb2NrICpzdGE7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCXNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKnN0YSksCi0JCVA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzdGEpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIyMyw5ICsxMzcwLDggQEAKIAlzdHJ1Y3QgcDU0X2hkciAqaGRyOwogCXN0cnVjdCBwNTRfdHhjYW5jZWwgKmNhbmNlbDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqY2FuY2VsKSwKLQkJUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjQyLDQ2ICsxMzg4LDczIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgewotCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDA7Ci0JCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOwotCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUDsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMjsKLQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAgfAotCQkJCSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCSpxdWV1ZSA9IDI7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJKnF1ZXVlICs9IDQ7Ci0JCXJldCA9IDE7Ci0JfQorCWludCByZXQgPSAxOwogCiAJc3dpdGNoIChwcml2LT5tb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkvKgorCQkgKiBXZSBoYXZlIHRvIHNldCBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQyBmb3IKKwkJICogZXZlcnkgZnJhbWUgaW4gcHJvbWlzY3VvdXMvbW9uaXRvciBtb2RlLgorCQkgKiBzZWUgU1RTVzQ1eDBDIExNQUMgQVBJIC0gcGFnZSAxMi4KKwkJICovCisJCSphaWQgPSAwOworCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQzsKKwkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOworCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCSphaWQgPSAxOworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlCisJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CiAJCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDM7CisJCQkqcXVldWUgPSBQNTRfUVVFVUVfQ0FCOwogCQkJcmV0dXJuIDA7CiAJCX0KKworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkJKmFpZCA9IDA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7CisJCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUCB8CisJCQkJCSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJCSphaWQgPSAwOworCisJCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgeworCQkJCQkvKgorCQkJCQkgKiBJbmplY3RpbmcgYmVhY29ucyBvbiB0b3Agb2YgYSBBUCBpcworCQkJCQkgKiBub3QgYSBnb29kIGlkZWEuLi4gbmV2ZXJ0aGVsZXNzLAorCQkJCQkgKiBpdCBzaG91bGQgYmUgZG9hYmxlLgorCQkJCQkgKi8KKworCQkJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CisJCQkJCXJldHVybiAxOworCQkJCX0KKworCQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX0JFQUNPTjsKKwkJCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlIHsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2UKKwkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKKwogCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpCiAJCQkqYWlkID0gaW5mby0+Y29udHJvbC5zdGEtPmFpZDsKIAkJZWxzZQogCQkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKKwkJYnJlYWs7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMzAzLDcgKzE0NzYsNyBAQAogc3RhdGljIGludCBwNTRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpjdXJyZW50X3F1ZXVlID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpjdXJyZW50X3F1ZXVlOwogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHA1NF90eF9kYXRhICp0eGhkcjsKQEAgLTE0NDYsMTUgKzE2MTksMTcgQEAKIAl9CiAJdHhoZHItPmNyeXB0X29mZnNldCA9IGNyeXB0X29mZnNldDsKIAl0eGhkci0+aHdfcXVldWUgPSBxdWV1ZTsKLQlpZiAoY3VycmVudF9xdWV1ZSkKLQkJdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47Ci0JZWxzZQotCQl0eGhkci0+YmFja2xvZyA9IDA7CisJdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47CiAJbWVtc2V0KHR4aGRyLT5kdXJhdGlvbnMsIDAsIHNpemVvZih0eGhkci0+ZHVyYXRpb25zKSk7Ci0JdHhoZHItPnR4X2FudGVubmEgPSAoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPwotCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxOwotCXR4aGRyLT5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7Ci0JdHhoZHItPmN0c19yYXRlID0gY3RzX3JhdGU7CisJdHhoZHItPnR4X2FudGVubmEgPSAoKGluZm8tPmFudGVubmFfc2VsX3R4ID09IDApID8KKwkJMiA6IGluZm8tPmFudGVubmFfc2VsX3R4IC0gMSkgJiBwcml2LT50eF9kaXZlcnNpdHlfbWFzazsKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQl0eGhkci0+bG9uZ2Jvdy5jdHNfcmF0ZSA9IGN0c19yYXRlOworCQl0eGhkci0+bG9uZ2Jvdy5vdXRwdXRfcG93ZXIgPSBjcHVfdG9fbGUxNihwcml2LT5vdXRwdXRfcG93ZXIpOworCX0gZWxzZSB7CisJCXR4aGRyLT5ub3JtYWwub3V0cHV0X3Bvd2VyID0gcHJpdi0+b3V0cHV0X3Bvd2VyOworCQl0eGhkci0+bm9ybWFsLmN0c19yYXRlID0gY3RzX3JhdGU7CisJfQogCWlmIChwYWRkaW5nKQogCQl0eGhkci0+YWxpZ25bMF0gPSBwYWRkaW5nOwogCkBAIC0xNDY3LDE0ICsxNjQyLDEyIEBACiAJcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywKIAkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1RYX0ZSQU1FX0xJRkVUSU1FKSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgZXJyOgogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikgKyBwYWRkaW5nKTsKLQlpZiAoY3VycmVudF9xdWV1ZSkgewotCQljdXJyZW50X3F1ZXVlLT5sZW4tLTsKLQkJY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKLQl9CisJY3VycmVudF9xdWV1ZS0+bGVuLS07CisJY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKQEAgLTE0ODUsOSArMTY1OCw4IEBACiAJc3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwOwogCXUxNiBtb2RlOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwKLQkJCSAgICBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU0VUVVAsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTUwNCwxOSArMTY3NiwyOSBAQAogCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0lCU1M7CiAJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUzsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9OT05FOworCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQorCisJCS8qCisJCSAqICJUUkFOU1BBUkVOVCBhbmQgUFJPTUlTQ1VPVVMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKwkJICogU1RTVzQ1WDBDIExNQUMgQVBJIC0gcGFnZSAxMgorCQkgKi8KKwkJaWYgKCgocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB8fAorCQkgICAgIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKSkgJiYKKwkJICAgIChtb2RlICE9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUykpCiAJCQltb2RlIHw9IFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVDsKIAl9IGVsc2UKLQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9SWF9ESVNBQkxFRDsKKwkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAKIAlzZXR1cC0+bWFjX21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKIAltZW1jcHkoc2V0dXAtPm1hY19hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShzZXR1cC0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jc2V0dXAtPnJ4X2FudGVubmEgPSAyOyAvKiBhdXRvbWF0aWMgKi8KKwlzZXR1cC0+cnhfYW50ZW5uYSA9IDIgJiBwcml2LT5yeF9kaXZlcnNpdHlfbWFzazsgLyogYXV0b21hdGljICovCiAJc2V0dXAtPnJ4X2FsaWduID0gMDsKIAlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDApIHsKIAkJc2V0dXAtPnYxLmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CkBAIC0xNTQ5LDc5ICsxNzMxLDEzNyBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9zY2FuICpjaGFuOworCXN0cnVjdCBwNTRfaGRyICpoZHI7CisJc3RydWN0IHA1NF9zY2FuX2hlYWQgKmhlYWQ7CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOworCXVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7CisJc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSAqcmF0ZTsKKwlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpyc3NpOwogCXVuc2lnbmVkIGludCBpOwogCXZvaWQgKmVudHJ5OwotCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAlpbnQgYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOworCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpjaGFuKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLAotCQkJICAgIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpoZWFkKSArCisJCQkgICAgMiArIHNpemVvZigqaXFfYXV0b2NhbCkgKyBzaXplb2YoKmJvZHkpICsKKwkJCSAgICBzaXplb2YoKnJhdGUpICsgMiAqIHNpemVvZigqcnNzaSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljaGFuID0gKHN0cnVjdCBwNTRfc2NhbiAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpjaGFuKSk7Ci0JbWVtc2V0KGNoYW4tPnBhZGRpbmcxLCAwLCBzaXplb2YoY2hhbi0+cGFkZGluZzEpKTsKLQljaGFuLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JY2hhbi0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZCA9IChzdHJ1Y3QgcDU0X3NjYW5faGVhZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkKSk7CisJbWVtc2V0KGhlYWQtPnNjYW5fcGFyYW1zLCAwLCBzaXplb2YoaGVhZC0+c2Nhbl9wYXJhbXMpKTsKKwloZWFkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJaGVhZC0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZC0+ZnJlcSA9IGZyZXE7CiAKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQlfX2xlMTYgKnBhX3Bvd2VyX3BvaW50cyA9IChfX2xlMTYgKikgc2tiX3B1dChza2IsIDIpOworCQkqcGFfcG93ZXJfcG9pbnRzID0gY3B1X3RvX2xlMTYoMHgwYyk7CisJfQorCisJaXFfYXV0b2NhbCA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmlxX2F1dG9jYWwpKTsKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aXFfYXV0b2NhbF9sZW47IGkrKykgewogCQlpZiAocHJpdi0+aXFfYXV0b2NhbFtpXS5mcmVxICE9IGZyZXEpCiAJCQljb250aW51ZTsKIAotCQltZW1jcHkoJmNoYW4tPmlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLAotCQkgICAgICAgc2l6ZW9mKCpwcml2LT5pcV9hdXRvY2FsKSk7CisJCW1lbWNweShpcV9hdXRvY2FsLCAmcHJpdi0+aXFfYXV0b2NhbFtpXS5wYXJhbXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5KSk7CiAJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBwcml2LT5pcV9hdXRvY2FsX2xlbikKIAkJZ290byBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+b3V0cHV0X2xpbWl0X2xlbjsgaSsrKSB7Ci0JCWlmIChwcml2LT5vdXRwdXRfbGltaXRbaV0uZnJlcSAhPSBmcmVxKQorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5sb25nYm93KSk7CisJZWxzZQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5ub3JtYWwpKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXM7IGkrKykgeworCQlfX2xlMTYgKmVudHJ5X2ZyZXEgPSAodm9pZCAqKSAocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhICsKKwkJCQkgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqIGkpOworCisJCWlmICgqZW50cnlfZnJlcSAhPSBmcmVxKQogCQkJY29udGludWU7CiAKLQkJY2hhbi0+dmFsX2JhcmtlciA9IDB4Mzg7Ci0JCWNoYW4tPnZhbF9icHNrID0gY2hhbi0+ZHVwX2Jwc2sgPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF9icHNrOwotCQljaGFuLT52YWxfcXBzayA9IGNoYW4tPmR1cF9xcHNrID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfcXBzazsKLQkJY2hhbi0+dmFsXzE2cWFtID0gY2hhbi0+ZHVwXzE2cWFtID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfMTZxYW07Ci0JCWNoYW4tPnZhbF82NHFhbSA9IGNoYW4tPmR1cF82NHFhbSA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsXzY0cWFtOworCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LnBvd2VyX2xpbWl0cywKKwkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxICsgc2l6ZW9mKF9fbGUxNiksCisJCQkgICAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgKmxpbWl0cyA9CisJCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcTsKKworCQkJYm9keS0+bm9ybWFsLnZhbF9iYXJrZXIgPSAweDM4OworCQkJYm9keS0+bm9ybWFsLnZhbF9icHNrID0gYm9keS0+bm9ybWFsLmR1cF9icHNrID0KKwkJCQlsaW1pdHMtPnZhbF9icHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF9xcHNrID0gYm9keS0+bm9ybWFsLmR1cF9xcHNrID0KKwkJCQlsaW1pdHMtPnZhbF9xcHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF8xNnFhbSA9IGJvZHktPm5vcm1hbC5kdXBfMTZxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzE2cWFtOworCQkJYm9keS0+bm9ybWFsLnZhbF82NHFhbSA9IGJvZHktPm5vcm1hbC5kdXBfNjRxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzY0cWFtOworCQl9CiAJCWJyZWFrOwogCX0KLQlpZiAoaSA9PSBwcml2LT5vdXRwdXRfbGltaXRfbGVuKQorCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykKIAkJZ290byBlcnI7CiAKLQllbnRyeSA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKKwllbnRyeSA9ICh2b2lkICopKHByaXYtPmN1cnZlX2RhdGEtPmRhdGEgKyBwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzOyBpKyspIHsKIAkJaWYgKCooKF9fbGUxNiAqKWVudHJ5KSAhPSBmcmVxKSB7Ci0JCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKLQkJCWVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCi0JCQkJIHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwkJCWVudHJ5ICs9IHByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemU7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOwotCQljaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlID0gODsKLQkJbWVtc2V0KGNoYW4tPmN1cnZlX2RhdGEsIDAsIHNpemVvZigqY2hhbi0+Y3VydmVfZGF0YSkpOwotCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgotCQkgICAgICAgbWluKCh1OCk4LCBwcml2LT5jdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwpKTsKKwkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5jdXJ2ZV9kYXRhLAorCQkJCSh2b2lkICopIGVudHJ5ICsgc2l6ZW9mKF9fbGUxNiksCisJCQkJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9ICZib2R5LT5ub3JtYWw7CisJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQorCQkJCSh2b2lkICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisKKwkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOworCQkJY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZSA9IDg7CisJCQltZW1zZXQoY2hhbi0+Y3VydmVfZGF0YSwgMCwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSk7CisJCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKKwkJCSAgICAgICBtaW4oKHU4KTgsIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCkpOworCQl9CiAJCWJyZWFrOwogCX0KKwlpZiAoaSA9PSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKQorCQlnb3RvIGVycjsKIAotCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgewotCQljaGFuLT52MV9yc3NpLm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKLQkJY2hhbi0+djFfcnNzaS5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7Ci0JfSBlbHNlIHsKLQkJY2hhbi0+djIucnNzaS5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7Ci0JCWNoYW4tPnYyLnJzc2kuYWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOwotCQljaGFuLT52Mi5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwotCQltZW1zZXQoY2hhbi0+djIucnRzX3JhdGVzLCAwLCA4KTsKKwlpZiAoKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkgJiYgKHByaXYtPmZ3X3ZhciA8IDB4NTA5KSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CiAJfQorCisJcnNzaSA9IChzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7CisJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCS8qIExvbmdib3cgZnJvbnRlbmQgbmVlZHMgZXZlciBtb3JlICovCisJCXJzc2kgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7CisJCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmtuKTsKKwkJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3VuazIpOworCX0KKworCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpIHsKKwkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKKwkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCisJCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOworCX0KKworCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqaGRyKSk7CisKIAlwcml2LT50eChkZXYsIHNrYik7CiAJcmV0dXJuIDA7CiAKQEAgLTE2MzEsMjMgKzE4NzEsMjIgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBwNTRfc2V0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgbW9kZSwgaW50IGxpbmssIGludCBhY3QpCitzdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X2xlZCAqbGVkOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCkgKwotCQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwJUDU0X0NPTlRST0xfVFlQRV9MRUQsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqbGVkKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0xFRCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGVkID0gKHN0cnVjdCBwNTRfbGVkICopc2tiX3B1dChza2IsIHNpemVvZigqbGVkKSk7Ci0JbGVkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JbGVkLT5sZWRfcGVybWFuZW50ID0gY3B1X3RvX2xlMTYobGluayk7Ci0JbGVkLT5sZWRfdGVtcG9yYXJ5ID0gY3B1X3RvX2xlMTYoYWN0KTsKLQlsZWQtPmR1cmF0aW9uID0gY3B1X3RvX2xlMTYoMTAwMCk7CisJbGVkID0gKHN0cnVjdCBwNTRfbGVkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOworCWxlZC0+ZmxhZ3MgPSBjcHVfdG9fbGUxNigweDAwMDMpOworCWxlZC0+bWFza1swXSA9IGxlZC0+bWFza1sxXSA9IGNwdV90b19sZTE2KHByaXYtPnNvZnRsZWRfc3RhdGUpOworCWxlZC0+ZGVsYXlbMF0gPSBjcHVfdG9fbGUxNigxKTsKKwlsZWQtPmRlbGF5WzFdID0gY3B1X3RvX2xlMTYoMCk7CiAJcHJpdi0+dHgoZGV2LCBza2IpOwogCXJldHVybiAwOwogfQpAQCAtMTY2Niw5ICsxOTA1LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfZWRjZiAqZWRjZjsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCplZGNmKSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqZWRjZiksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2OTIsNiArMTkzMCw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHA1NF9zZXRfcHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHA1NF9wc20gKnBzbTsKKwl1MTYgbW9kZTsKKwlpbnQgaTsKKworCWlmIChkZXYtPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJbW9kZSA9IFA1NF9QU00gfCBQNTRfUFNNX0RUSU0gfCBQNTRfUFNNX01DQkM7CisJZWxzZQorCQltb2RlID0gUDU0X1BTTV9DQU07CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcHNtKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTSwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcHNtID0gKHN0cnVjdCBwNTRfcHNtICopc2tiX3B1dChza2IsIHNpemVvZigqcHNtKSk7CisJcHNtLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJcHNtLT5haWQgPSBjcHVfdG9fbGUxNihwcml2LT5haWQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBzbS0+aW50ZXJ2YWxzKTsgaSsrKSB7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLmludGVydmFsID0KKwkJCWNwdV90b19sZTE2KGRldi0+Y29uZi5saXN0ZW5faW50ZXJ2YWwpOworCQlwc20tPmludGVydmFsc1tpXS5wZXJpb2RzID0gY3B1X3RvX2xlMTYoMSk7CisJfQorCisJcHNtLT5iZWFjb25fcnNzaV9za2lwX21heCA9IDYwOworCXBzbS0+cnNzaV9kZWx0YV90aHJlc2hvbGQgPSAwOworCXBzbS0+bnIgPSAwOworCisJcHJpdi0+dHgoZGV2LCBza2IpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcDU0X2JlYWNvbl90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKgpAQCAtMTc5Niw2ICsyMDcwLDkgQEAKIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwogCisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisKIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiBlcnI7CkBAIC0xODA4LDYgKzIwODUsOSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCXA1NF9zZXRfbGVkcyhkZXYpOworCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKIAlpZiAocHJpdi0+Y2FjaGVkX2JlYWNvbikKIAkJcDU0X3R4X2NhbmNlbChkZXYsIHByaXYtPmNhY2hlZF9iZWFjb24pOwpAQCAtMTg0NSw3ICsyMTI1LDYgQEAKIAogCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAlwNTRfc2V0dXBfbWFjKGRldik7Ci0JcDU0X3NldF9sZWRzKGRldiwgMSwgMCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODQsNiArMjE2MywxMSBAQAogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCXJldCA9IHA1NF9zZXRfcHMoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KIAogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CkBAIC0xOTIwLDggKzIyMDQsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gcDU0X3NldF9sZWRzKGRldiwgMSwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSwgMCk7Ci0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xOTM1LDEyICsyMjE3LDExIEBACiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKIAkqdG90YWxfZmxhZ3MgJj0gRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCSgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpID8KLQkJCQlGSUZfRkNTRkFJTCA6IDA7CisJCQlGSUZfT1RIRVJfQlNTOwogCiAJcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpCiAJCXA1NF9zZXR1cF9tYWMoZGV2KTsKIH0KIApAQCAtMTk2NywxMCArMjI0OCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X3hib3dfc3ludGggKnhib3c7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdykgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkciksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywKLQkJCSAgICBHRlBfS0VSTkVMKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdyksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTk5LDcgKzIyNzgsNyBAQAogCSAqICAgICAgMi4gY2FuY2VsIHN0dWNrIGZyYW1lcyAvIHJlc2V0IHRoZSBkZXZpY2UgaWYgbmVjZXNzYXJ5LgogCSAqLwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfc3RhdGlzdGljcyksCiAJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKQEAgLTIwMjIsOCArMjMwMSw4IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKLQltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1s0XSwgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKLQorCW1lbWNweShzdGF0cywgJnByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9EQVRBXSwKKwkgICAgICAgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA1OSw3ICsyMzM4LDcgQEAKIH0KIAogc3RhdGljIGludCBwNTRfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKQEAgLTIxMTAsOSArMjM4OSw4IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLAlQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLAotCQkJR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxMjMsOCArMjQwMSw4IEBACiAJcnhrZXktPmVudHJ5ID0ga2V5LT5rZXlpZHg7CiAJcnhrZXktPmtleV9pZCA9IGtleS0+a2V5aWR4OwogCXJ4a2V5LT5rZXlfdHlwZSA9IGFsZ287Ci0JaWYgKGFkZHJlc3MpCi0JCW1lbWNweShyeGtleS0+bWFjLCBhZGRyZXNzLCBFVEhfQUxFTik7CisJaWYgKHN0YSkKKwkJbWVtY3B5KHJ4a2V5LT5tYWMsIHN0YS0+YWRkciwgRVRIX0FMRU4pOwogCWVsc2UKIAkJbWVtc2V0KHJ4a2V5LT5tYWMsIH4wLCBFVEhfQUxFTik7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKSB7CkBAIC0yMTQyLDYgKzI0MjAsOTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QNTRfTEVEUworc3RhdGljIHZvaWQgcDU0X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgcDU0X2xlZF9kZXYsCisJCQkJCSAgICAgICBsZWRfZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBsZWQtPmh3X2RldjsKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJLyogRG9uJ3QgdG9nZ2xlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLworCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQlyZXR1cm4gOworCisJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJcHJpdi0+c29mdGxlZF9zdGF0ZSB8PSBCSVQobGVkLT5pbmRleCk7CisJZWxzZQorCQlwcml2LT5zb2Z0bGVkX3N0YXRlICY9IH5CSVQobGVkLT5pbmRleCk7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwlpZiAoZXJyICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHVwZGF0ZSAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVkX2Rldi0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQsCisJCQkgICAgdW5zaWduZWQgaW50IGxlZF9pbmRleCwKKwkJCSAgICBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQoreworCWludCBlcnI7CisKKwlpZiAobGVkLT5yZWdpc3RlcmVkKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXNucHJpbnRmKGxlZC0+bmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSksICJwNTQtJXM6OiVzIiwKKwkJIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIG5hbWUpOworCWxlZC0+aHdfZGV2ID0gZGV2OworCWxlZC0+aW5kZXggPSBsZWRfaW5kZXg7CisJbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7CisJbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gcDU0X2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoZGV2LT53aXBoeSksICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZWdpc3RlciAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7CisJZWxzZQorCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBUT0RPOgorCSAqIEZpZ3VyZSBvdXQgaWYgdGhlIEVFUFJPTSBjb250YWlucyBzb21lIGhpbnRzIGFib3V0IHRoZSBudW1iZXIKKwkgKiBvZiBhdmFpbGFibGUvcHJvZ3JhbW1hYmxlIExFRHMgb2YgdGhlIGRldmljZS4KKwkgKiBCdXQgZm9yIG5vdywgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmUgdHdvIHByb2dyYW1tYWJsZSBMRURzLgorCSAqLworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT5hc3NvY19sZWQsIDAsICJhc3NvYyIsCisJCQkgICAgICAgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShkZXYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT50eF9sZWQsIDEsICJ0eCIsCisJCQkgICAgICAgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShkZXYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcDU0X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAocHJpdi0+dHhfbGVkLnJlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT50eF9sZWQubGVkX2Rldik7CisJaWYgKHByaXYtPmFzc29jX2xlZC5yZWdpc3RlcmVkKQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcHJpdi0+YXNzb2NfbGVkLmxlZF9kZXYpOworfQorI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcDU0X29wcyA9IHsKIAkudHgJCQk9IHA1NF90eCwKIAkuc3RhcnQJCQk9IHA1NF9zdGFydCwKQEAgLTIxNzUsNiArMjU0Myw4IEBACiAJcHJpdi0+YmFzaWNfcmF0ZV9tYXNrID0gMHgxNWY7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcXVldWUpOwogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CiAJCSAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CiAKQEAgLTIxODQsMTEgKzI1NTQsMTEgQEAKIAkJCQkgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7CiAKIAlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwkvKiBUT0RPOiBmaW5kIGFjdHVhbCB2YWx1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzBdLmxpbWl0ID0gMTsJCS8qIEJlYWNvbiBxdWV1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzFdLmxpbWl0ID0gMTsJCS8qIFByb2JlIHF1ZXVlIGZvciBIVyBzY2FuICovCi0JcHJpdi0+dHhfc3RhdHNbMl0ubGltaXQgPSAzOwkJLyogcXVldWUgZm9yIE1MTUVzICovCi0JcHJpdi0+dHhfc3RhdHNbM10ubGltaXQgPSAzOwkJLyogQnJvYWRjYXN0IC8gTUMgcXVldWUgKi8KLQlwcml2LT50eF9zdGF0c1s0XS5saW1pdCA9IDU7CQkvKiBEYXRhICovCisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0JFQUNPTl0ubGltaXQgPSAxOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9GV1NDQU5dLmxpbWl0ID0gMTsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfTUdNVF0ubGltaXQgPSAzOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9DQUJdLmxpbWl0ID0gMzsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0ubGltaXQgPSA1OwogCWRldi0+cXVldWVzID0gMTsKIAlwcml2LT5ub2lzZSA9IC05NDsKIAkvKgpAQCAtMjIxMiwxMiArMjU4MiwzNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKIAoraW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocGRldiwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2UgKCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisjaWZkZWYgQ09ORklHX1A1NF9MRURTCisJZXJyID0gcDU0X2luaXRfbGVkcyhkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCisKKwlkZXZfaW5mbyhwZGV2LCAiaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWdpc3Rlcl9jb21tb24pOworCiB2b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7CiAJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKIAlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKKworI2lmZGVmIENPTkZJR19QNTRfTEVEUworCXA1NF91bnJlZ2lzdGVyX2xlZHMoZGV2KTsKKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9mcmVlX2NvbW1vbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAppbmRleCBmNTcyOWRlLi43NWVhZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCkBAIC0yNiwxMiArMjYsMTcgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX01BU0sJCTB4MDAwNworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMwkweDAwMDEKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0RVRVRURTIJMHgwMDAyCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9GUklTQkVFCTB4MDAwMworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVwkJMHgwMDA0CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XCTB4MDAwNQogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX01BU0sJCTB4MDAxOAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1BBX0RFVEVDVE9SCTB4MDAwMAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX0RJU0FCTEVECTB4MDAwOAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1pJRgkJMHgwMDEwCiAjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX01BU0sJMHgwMDIwCi0jZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDAxCisjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDIwCiAjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfTUFTSwkJMHgwMDQwCiAjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfRElTQUJMRUQJMHgwMDQwCiAjZGVmaW5lIFBEUl9TWU5USF81X0dIWl9NQVNLCQkweDAwODAKQEAgLTEyNSw5ICsxMzAsMTMgQEAKIAl1OCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSB7CisJX19sZTE2IGlxX3BhcmFtWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7CiAgICAgICAgIF9fbGUxNiBmcmVxOwotICAgICAgICBfX2xlMTYgaXFfcGFyYW1bNF07CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHBhcmFtczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0IHsKQEAgLTE4MCw2ICsxODksMzUgQEAKIAlfX2xlMTYgYWRkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBwZGFfY291bnRyeSB7CisJdTggcmVnZG9tYWluOworCXU4IGFscGhhMlsyXTsKKwl1OCBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogV2FybmluZzogTG9uZ2JvdydzIHN0cnVjdHVyZXMgYXJlIGJvZ3VzLgorICovCitzdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgeworCV9fbGUxNiByZl9wb3dlcl9wb2ludHNbMTJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGVfbG9uZ2JvdyB7CisJX19sZTE2IHJmX3Bvd2VyOworCV9fbGUxNiBwYV9kZXRlY3RvcjsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgZGF0YVs0XTsKKwl9IHBvaW50c1szXSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciB7CisJX19sZTE2IGVudHJpZXM7CisJX19sZTE2IGVudHJ5X3NpemU7CisJX19sZTE2IG9mZnNldDsKKwlfX2xlMTYgbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoKICAqIHRoaXMgZGVmaW5lcyB0aGUgUERSIGNvZGVzIHVzZWQgdG8gYnVpbGQgUERBcyBhcyBkZWZpbmVkIGluIGRvY3VtZW50CiAgKiBudW1iZXIgNTUzMTU1LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtaXJyb3JzIHZlcnNpb24gMS4xIG9mIHRoZQpAQCAtMjI1LDggKzI2MywxMyBAQAogLyogcmVzZXJ2ZWQgcmFuZ2UgKDB4MjAwMCAtIDB4N2ZmZikgKi8KIAogLyogY3VzdG9tZXIgcmFuZ2UgKDB4ODAwMCAtIDB4ZmZmZikgKi8KLSNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCTB4ODAwMAotI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCTB4ODAwMQorI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJCTB4ODAwMAorI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCQkweDgwMDEKKworLyogdXNlZCBieSBvdXIgbW9kaWZpY2F0ZWQgZWVwcm9tIGltYWdlICovCisjZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTQkJMHhERUFECisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT00JMHhCRUVGCisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT00JCTB4QjA1RAogCiAvKiBQRFIgZGVmaW5pdGlvbnMgZm9yIGRlZmF1bHQgY291bnRyeSAmIGNvdW50cnkgbGlzdCAqLwogI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0NPREUJCTB4ODAKQEAgLTI0MSwxMiArMjg0LDYgQEAKICNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1JfT1VURE9PUgkweDMwCiAjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU5ERVgJCTB4MEYKIAotLyogc3RvcmVkIGluIHNrYi0+Y2IgKi8KLXN0cnVjdCBtZW1yZWNvcmQgewotCXUzMiBzdGFydF9hZGRyOwotCXUzMiBlbmRfYWRkcjsKLX07Ci0KIHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgewogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTMyOSw3ICszNjYsNyBAQAogCXU4IHBhZGRpbmc7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotZW51bSAgcDU0X3R4X2RhdGFfY3J5cHQgeworZW51bSBwNTRfdHhfZGF0YV9jcnlwdCB7CiAJUDU0X0NSWVBUT19OT05FID0gMCwKIAlQNTRfQ1JZUFRPX1dFUCwKIAlQNTRfQ1JZUFRPX1RLSVAsCkBAIC0zNDAsNiArMzc3LDIzIEBACiAJUDU0X0NSWVBUT19BRVNDQ01QCiB9OwogCitlbnVtIHA1NF90eF9kYXRhX3F1ZXVlIHsKKwlQNTRfUVVFVUVfQkVBQ09OCT0gMCwKKwlQNTRfUVVFVUVfRldTQ0FOCT0gMSwKKwlQNTRfUVVFVUVfTUdNVAkJPSAyLAorCVA1NF9RVUVVRV9DQUIJCT0gMywKKwlQNTRfUVVFVUVfREFUQQkJPSA0LAorCisJUDU0X1FVRVVFX0FDX05VTQk9IDQsCisJUDU0X1FVRVVFX0FDX1ZPCQk9IDQsCisJUDU0X1FVRVVFX0FDX1ZJCQk9IDUsCisJUDU0X1FVRVVFX0FDX0JFCQk9IDYsCisJUDU0X1FVRVVFX0FDX0JLCQk9IDcsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlQNTRfUVVFVUVfTlVNCQk9IDgsCit9OworCiBzdHJ1Y3QgcDU0X3R4X2RhdGEgewogCXU4IHJhdGVzZXRbOF07CiAJdTggcnRzX3JhdGVfaWR4OwpAQCAtMzUxLDkgKzQwNSwxOCBAQAogCXU4IGJhY2tsb2c7CiAJX19sZTE2IGR1cmF0aW9uc1s0XTsKIAl1OCB0eF9hbnRlbm5hOwotCXU4IG91dHB1dF9wb3dlcjsKLQl1OCBjdHNfcmF0ZTsKLQl1OCB1bmFsbG9jMlszXTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBjdHNfcmF0ZTsKKwkJCV9fbGUxNiBvdXRwdXRfcG93ZXI7CisJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbG9uZ2JvdzsKKwkJc3RydWN0IHsKKwkJCXU4IG91dHB1dF9wb3dlcjsKKwkJCXU4IGN0c19yYXRlOworCQkJdTggdW5hbGxvYzsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbm9ybWFsOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXU4IHVuYWxsb2MyWzJdOwogCXU4IGFsaWduWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTQxNCwxMSArNDc3LDE0IEBACiAjZGVmaW5lIFA1NF9TQ0FOX0FDVElWRSBCSVQoMikKICNkZWZpbmUgUDU0X1NDQU5fRklMVEVSIEJJVCgzKQogCi1zdHJ1Y3QgcDU0X3NjYW4geworc3RydWN0IHA1NF9zY2FuX2hlYWQgewogCV9fbGUxNiBtb2RlOwogCV9fbGUxNiBkd2VsbDsKLQl1OCBwYWRkaW5nMVsyMF07Ci0Jc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5IGlxX2F1dG9jYWw7CisJdTggc2Nhbl9wYXJhbXNbMjBdOworCV9fbGUxNiBmcmVxOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfc2Nhbl9ib2R5IHsKIAl1OCBwYV9wb2ludHNfcGVyX2N1cnZlOwogCXU4IHZhbF9iYXJrZXI7CiAJdTggdmFsX2Jwc2s7CkBAIC00MzAsMjUgKzQ5NiwyOCBAQAogCXU4IGR1cF9xcHNrOwogCXU4IGR1cF8xNnFhbTsKIAl1OCBkdXBfNjRxYW07Ci0JdW5pb24gewotCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5IHYxX3Jzc2k7Ci0KLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7Ci0JCQl1OCBydHNfcmF0ZXNbOF07Ci0JCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5IHJzc2k7Ci0JCX0gdjIgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgUDU0X1NDQU5fVjFfTEVOIDB4NzAKLSNkZWZpbmUgUDU0X1NDQU5fVjJfTEVOIDB4N2MKK3N0cnVjdCBwNTRfc2Nhbl9ib2R5X2xvbmdib3cgeworCXN0cnVjdCBwNTRfY2hhbm5lbF9vdXRwdXRfbGltaXRfbG9uZ2JvdyBwb3dlcl9saW1pdHM7CisJc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9sb25nYm93IGN1cnZlX2RhdGFbOF07CisJX19sZTE2IHVua25bNl07CQkvKiBtYXliZSBtb3JlIHBvd2VyX2xpbWl0cyBvciByYXRlX21hc2sgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uIHsKKwlzdHJ1Y3QgcDU0X3NjYW5fYm9keSBub3JtYWw7CisJc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyBsb25nYm93OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgeworCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7CisJdTggcnRzX3JhdGVzWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwNTRfbGVkIHsKLQlfX2xlMTYgbW9kZTsKLQlfX2xlMTYgbGVkX3RlbXBvcmFyeTsKLQlfX2xlMTYgbGVkX3Blcm1hbmVudDsKLQlfX2xlMTYgZHVyYXRpb247CisJX19sZTE2IGZsYWdzOworCV9fbGUxNiBtYXNrWzJdOworCV9fbGUxNiBkZWxheVsyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcDU0X2VkY2YgewpAQCAtNTExLDYgKzU4MCw3IEBACiAJX19sZTE2IHBlcmlvZHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQNTRfUFNNX0NBTQkJCTAKICNkZWZpbmUgUDU0X1BTTQkJCQlCSVQoMCkKICNkZWZpbmUgUDU0X1BTTV9EVElNCQkJQklUKDEpCiAjZGVmaW5lIFA1NF9QU01fTUNCQwkJCUJJVCgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGFhMzY3YTAuLmUzNTY5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTc5LDYgKzc5LDEyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlmIChwcml2LT5jb21tb24uZndfaW50ZXJmYWNlICE9IEZXX0xNODYpIHsKKwkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LCAid3JvbmcgZmlybXdhcmUsICIKKwkJCSJwbGVhc2UgZ2V0IGEgTE04NihQQ0kpIGZpcm13YXJlIGEgdHJ5IGFnYWluLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWRhdGEgPSAoX19sZTMyICopIHByaXYtPmZpcm13YXJlLT5kYXRhOwogCXJlbWFpbnMgPSBwcml2LT5maXJtd2FyZS0+c2l6ZTsKIAlkZXZpY2VfYWRkciA9IElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFI7CkBAIC00MDcsOCArNDEzLDcgQEAKIAllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZwNTRwX2ludGVycnVwdCwKIAkJCSAgSVJRRl9TSEFSRUQsICJwNTRwY2kiLCBkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC00NzAsMzAgKzQ3NSwyNiBAQAogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAltZW1fYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAltZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAlpZiAobWVtX2xlbiA8IHNpemVvZihzdHJ1Y3QgcDU0cF9jc3IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IFRvbyBzaG9ydCBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJUb28gc2hvcnQgUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2OwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInA1NHBjaSIpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9kaXNhYmxlX2RldjsKIAl9CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgfHwKIAkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQogCkBAIC01MDUsOCArNTA2LDcgQEAKIAogCWRldiA9IHA1NF9pbml0X2NvbW1vbihzaXplb2YoKnByaXYpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQpAQCAtNTE5LDE3ICs1MTksMTUgQEAKIAogCXByaXYtPm1hcCA9IGlvcmVtYXAobWVtX2FkZHIsIG1lbV9sZW4pOwogCWlmICghcHJpdi0+bWFwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZXJyID0gLUVJTlZBTDsJLy8gVE9ETzogdXNlIGEgYmV0dGVyIGVycm9yIGNvZGU/CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAogCXByaXYtPnJpbmdfY29udHJvbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqcHJpdi0+cmluZ19jb250cm9sKSwKIAkJCQkJCSAgJnByaXYtPnJpbmdfY29udHJvbF9kbWEpOwogCWlmICghcHJpdi0+cmluZ19jb250cm9sKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBhbGxvY2F0ZSByaW5nc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHJpbmdzXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9CkBAIC01NDMsOCArNTQxLDcgQEAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODZwY2kiLAogCQkJICAgICAgICZwcml2LT5wZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogY2Fubm90IGZpbmQgZmlybXdhcmUgIgotCQkJIihpc2wzODg2cGNpKVxuIiwgcGNpX25hbWUocHJpdi0+cGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZmluZCBmaXJtd2FyZSAoaXNsMzg4NnBjaSlcbiIpOwogCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODYiLAogCQkJCSAgICAgICAmcHJpdi0+cGRldi0+ZGV2KTsKIAkJaWYgKGVycikKQEAgLTU1OSwxMiArNTU2LDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwllcnIgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGRldiwgJnBkZXYtPmRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9jb21tb247Ci0JfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjIyMmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC0wLDAgKzEsNzY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqIENvcHlyaWdodCAyMDA4ICAgICAgIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBkcml2ZXIgaXMgYSBwb3J0IGZyb20gc3RsYzQ1eHg6CisgKglDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgInA1NHNwaS5oIgorI2luY2x1ZGUgInA1NHNwaV9lZXByb20uaCIKKyNpbmNsdWRlICJwNTQuaCIKKworI2luY2x1ZGUgInA1NGNvbW1vbi5oIgorCitNT0RVTEVfRklSTVdBUkUoIjM4MjYuYXJtIik7CitNT0RVTEVfQUxJQVMoInN0bGM0NXh4Iik7CisKKy8qCisgKiBncGlvcyBzaG91bGQgYmUgaGFuZGxlZCBpbiBib2FyZCBmaWxlcyBhbmQgcHJvdmlkZWQgdmlhIHBsYXRmb3JtIGRhdGEsCisgKiBidXQgYmVjYXVzZSBpdCdzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGZvciBwNTRzcGkgdG8gaGF2ZSBhIGhlYWRlciBmaWxlCisgKiBpbiBpbmNsdWRlL2xpbnV4LCBsZXQncyB1c2UgbW9kdWxlIHBhcmFtYXRlcnMgZm9yIG5vdworICovCisKK3N0YXRpYyBpbnQgcDU0c3BpX2dwaW9fcG93ZXIgPSA5NzsKK21vZHVsZV9wYXJhbShwNTRzcGlfZ3Bpb19wb3dlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocDU0c3BpX2dwaW9fcG93ZXIsICJncGlvIG51bWJlciBmb3IgcG93ZXIgbGluZSIpOworCitzdGF0aWMgaW50IHA1NHNwaV9ncGlvX2lycSA9IDg3OworbW9kdWxlX3BhcmFtKHA1NHNwaV9ncGlvX2lycSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocDU0c3BpX2dwaW9faXJxLCAiZ3BpbyBudW1iZXIgZm9yIGlycSBsaW5lIik7CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9zcGlfcmVhZChzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyZXNzLAorCQkJICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwlfX2xlMTYgYWRkcjsKKworCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KKwlhZGRyID0gY3B1X3RvX2xlMTYoYWRkcmVzcyA8PCA4IHwgU1BJX0FEUlNfUkVBRF9CSVRfMTUpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gc2l6ZW9mKGFkZHIpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwl0WzFdLnJ4X2J1ZiA9IGJ1ZjsKKwl0WzFdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJc3BpX3N5bmMocHJpdi0+c3BpLCAmbSk7Cit9CisKKworc3RhdGljIHZvaWQgcDU0c3BpX3NwaV93cml0ZShzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyZXNzLAorCQkJICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCV9fbGUxNiBhZGRyOworCisJLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLworCWFkZHIgPSBjcHVfdG9fbGUxNihhZGRyZXNzIDw8IDgpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gc2l6ZW9mKGFkZHIpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwl0WzFdLnR4X2J1ZiA9IGJ1ZjsKKwl0WzFdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJaWYgKGxlbiAlIDIpIHsKKwkJX19sZTE2IGxhc3Rfd29yZDsKKwkJbGFzdF93b3JkID0gY3B1X3RvX2xlMTYoKCh1OCAqKWJ1ZilbbGVuIC0gMV0pOworCisJCXRbMl0udHhfYnVmID0gJmxhc3Rfd29yZDsKKwkJdFsyXS5sZW4gPSBzaXplb2YobGFzdF93b3JkKTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKKwl9CisKKwlzcGlfc3luYyhwcml2LT5zcGksICZtKTsKK30KKworc3RhdGljIHUxNiBwNTRzcGlfcmVhZDE2KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIpCit7CisJX19sZTE2IHZhbDsKKworCXA1NHNwaV9zcGlfcmVhZChwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CisKKwlyZXR1cm4gbGUxNl90b19jcHUodmFsKTsKK30KKworc3RhdGljIHUzMiBwNTRzcGlfcmVhZDMyKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIpCit7CisJX19sZTMyIHZhbDsKKworCXA1NHNwaV9zcGlfcmVhZChwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CisKKwlyZXR1cm4gbGUzMl90b19jcHUodmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHA1NHNwaV93cml0ZTE2KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIsIF9fbGUxNiB2YWwpCit7CisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfd3JpdGUzMihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyLCBfX2xlMzIgdmFsKQoreworCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworfQorCitzdHJ1Y3QgcDU0c3BpX3NwaV9yZWcgeworCXUxNiBhZGRyZXNzOwkJLyogX19sZTE2ID8gKi8KKwl1MTYgbGVuZ3RoOworCWNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHA1NHNwaV9zcGlfcmVnIHA1NHNwaV9yZWdpc3RlcnNfYXJyYXlbXSA9Cit7CisJeyBTUElfQURSU19BUk1fSU5URVJSVVBUUywJMzIsICJBUk1fSU5UICAgICAiIH0sCisJeyBTUElfQURSU19BUk1fSU5UX0VOLAkJMzIsICJBUk1fSU5UX0VOQSAiIH0sCisJeyBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMsCTMyLCAiSE9TVF9JTlQgICAgIiB9LAorCXsgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCQkzMiwgIkhPU1RfSU5UX0VOQSIgfSwKKwl7IFNQSV9BRFJTX0hPU1RfSU5UX0FDSywJMzIsICJIT1NUX0lOVF9BQ0siIH0sCisJeyBTUElfQURSU19HRU5fUFVSUF8xLAkJMzIsICJHUDFfQ09NTSAgICAiIH0sCisJeyBTUElfQURSU19HRU5fUFVSUF8yLAkJMzIsICJHUDJfQ09NTSAgICAiIH0sCisJeyBTUElfQURSU19ERVZfQ1RSTF9TVEFULAkzMiwgIkRFVl9DVFJMX1NUQSIgfSwKKwl7IFNQSV9BRFJTX0RNQV9EQVRBLAkJMTYsICJETUFfREFUQSAgICAiIH0sCisJeyBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwJMTYsICJETUFfV1JfQ1RSTCAiIH0sCisJeyBTUElfQURSU19ETUFfV1JJVEVfTEVOLAkxNiwgIkRNQV9XUl9MRU4gICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAkzMiwgIkRNQV9XUl9CQVNFICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9SRUFEX0NUUkwsCTE2LCAiRE1BX1JEX0NUUkwgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1JFQURfTEVOLAkxNiwgIkRNQV9SRF9MRU4gICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAkzMiwgIkRNQV9SRF9CQVNFICIgfQorfTsKKworc3RhdGljIGludCBwNTRzcGlfd2FpdF9iaXQoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTE2IHJlZywgX19sZTMyIGJpdHMpCit7CisJaW50IGk7CisJX19sZTMyIGJ1ZmZlcjsKKworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJcDU0c3BpX3NwaV9yZWFkKHByaXYsIHJlZywgJmJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAoYnVmZmVyID09IGJpdHMpCisJCQlyZXR1cm4gMTsKKworCQltc2xlZXAoMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NHNwaV9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCByZXQ7CisKKwkvKiBGSVhNRTogc2hvdWxkIGRyaXZlciB1c2UgaXQncyBvd24gc3RydWN0IGRldmljZT8gKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgIjM4MjYuYXJtIiwgJnByaXYtPnNwaS0+ZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtPmZpcm13YXJlKTsKKwlpZiAocmV0KSB7CisJCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZmlybXdhcmUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NHNwaV9yZXF1ZXN0X2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmVlcHJvbTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBhbGxvdyB1c2VycyB0byBjdXN0b21pemUgdGhlaXIgZWVwcm9tLgorCSAqLworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZWVwcm9tLCAiMzgyNi5lZXByb20iLCAmcHJpdi0+c3BpLT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9pbmZvKCZwcml2LT5zcGktPmRldiwgImxvYWRpbmcgZGVmYXVsdCBlZXByb20uLi5cbiIpOworCQlyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgKHZvaWQgKikgcDU0c3BpX2VlcHJvbSwKKwkJCQkgICAgICAgc2l6ZW9mKHA1NHNwaV9lZXByb20pKTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmcHJpdi0+c3BpLT5kZXYsICJsb2FkaW5nIHVzZXIgZWVwcm9tLi4uXG4iKTsKKwkJcmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIGVlcHJvbS0+ZGF0YSwKKwkJCQkgICAgICAgKGludCllZXByb20tPnNpemUpOworCQlyZWxlYXNlX2Zpcm13YXJlKGVlcHJvbSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3VwbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZ3X2xlbiwgZndfYWRkcjsKKwlsb25nIF9md19sZW47CisKKwkvKiBzdG9wIHRoZSBkZXZpY2UgKi8KKwlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ERVZfQ1RSTF9TVEFULCBjcHVfdG9fbGUxNigKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVCB8CisJCSAgICAgICBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCkpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKSk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJZndfYWRkciA9IElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFI7CisJZndfbGVuID0gcHJpdi0+ZmlybXdhcmUtPnNpemU7CisKKwl3aGlsZSAoZndfbGVuID4gMCkgeworCQlfZndfbGVuID0gbWluX3QobG9uZywgZndfbGVuLCBTUElfTUFYX1BBQ0tFVF9TSVpFKTsKKworCQlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwKKwkJCSAgICAgICBjcHVfdG9fbGUxNihTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFKSk7CisKKwkJaWYgKHA1NHNwaV93YWl0X2JpdChwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwKKwkJCQkgICAgY3B1X3RvX2xlMzIoSE9TVF9BTExPV0VEKSkgPT0gMCkgeworCQkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJmd191cGxvYWQgbm90IGFsbG93ZWQgIgorCQkJCSJ0byBETUEgd3JpdGUuIik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9MRU4sCisJCQkgICAgICAgY3B1X3RvX2xlMTYoX2Z3X2xlbikpOworCQlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwKKwkJCSAgICAgICBjcHVfdG9fbGUzMihmd19hZGRyKSk7CisKKwkJcDU0c3BpX3NwaV93cml0ZShwcml2LCBTUElfQURSU19ETUFfREFUQSwKKwkJCQkgJnByaXYtPmZpcm13YXJlLT5kYXRhLCBfZndfbGVuKTsKKworCQlmd19sZW4gLT0gX2Z3X2xlbjsKKwkJZndfYWRkciArPSBfZndfbGVuOworCisJCS8qIEZJWE1FOiBJIHRoaW5rIHRoaXMgZG9lc24ndCB3b3JrIGlmIGZpcm13YXJlIGlzIGxhcmdlLAorCQkgKiB0aGlzIGxvb3AgZ29lcyB0byBzZWNvbmQgcm91bmQuIGZ3LT5kYXRhIGlzIG5vdAorCQkgKiBpbmNyZWFzZWQgYXQgYWxsISAqLworCX0KKworCUJVR19PTihmd19sZW4gIT0gMCk7CisKKwkvKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCisJCSAgICAgICBjcHVfdG9fbGUzMihTUElfSE9TVF9JTlRTX0RFRkFVTFQpKTsKKworCS8qIGJvb3QgdGhlIGRldmljZSAqLworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUIHwKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpKTsKKworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ERVZfQ1RSTF9TVEFULCBjcHVfdG9fbGUxNigKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpKTsKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfcG93ZXJfb2ZmKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSk7CisJZ3Bpb19zZXRfdmFsdWUocDU0c3BpX2dwaW9fcG93ZXIsIDApOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfcG93ZXJfb24oc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlncGlvX3NldF92YWx1ZShwNTRzcGlfZ3Bpb19wb3dlciwgMSk7CisJZW5hYmxlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpKTsKKworCS8qCisJICogbmVlZCB0byB3YWl0IGEgd2hpbGUgYmVmb3JlIGRldmljZSBjYW4gYmUgYWNjZXNzZWQsIHRoZSBsZW5naHQKKwkgKiBpcyBqdXN0IGEgZ3Vlc3MKKwkgKi8KKwltc2xlZXAoMTApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX2ludF9hY2soc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTMyIHZhbCkKK3sKKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19IT1NUX0lOVF9BQ0ssIGNwdV90b19sZTMyKHZhbCkpOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfd2FrZXVwKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBpbnRzOworCisJLyogd2FrZSB0aGUgY2hpcCAqLworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLAorCQkgICAgICAgY3B1X3RvX2xlMzIoU1BJX1RBUkdFVF9JTlRfV0FLRVVQKSk7CisKKwkvKiBBbmQgd2FpdCBmb3IgdGhlIFJFQURZIGludGVycnVwdCAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CisKKwlpbnRzID0gIHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCQlnb3RvIG91dDsKKwkJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl9CisKKwlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfUkVBRFkpOworCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX3NsZWVwKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsCisJCSAgICAgICBjcHVfdG9fbGUzMihTUElfVEFSR0VUX0lOVF9TTEVFUCkpOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfaW50X3JlYWR5KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRfRU4sIGNwdV90b19sZTMyKAorCQkgICAgICAgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpKTsKKworCXN3aXRjaCAocHJpdi0+Zndfc3RhdGUpIHsKKwljYXNlIEZXX1NUQVRFX0JPT1RJTkc6CisJCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisJCWNvbXBsZXRlKCZwcml2LT5md19jb21wKTsKKwkJYnJlYWs7CisJY2FzZSBGV19TVEFURV9SRVNFVFRJTkc6CisJCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisJCS8qIFRPRE86IHJlaW5pdGlhbGl6ZSBzdGF0ZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3J4KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgbGVuOworCisJcDU0c3BpX3dha2V1cChwcml2KTsKKworCS8qIGR1bW15IHJlYWQgdG8gZmx1c2ggU1BJIERNQSBjb250cm9sbGVyIGJ1ZyAqLworCXA1NHNwaV9yZWFkMTYocHJpdiwgU1BJX0FEUlNfR0VOX1BVUlBfMSk7CisKKwlsZW4gPSBwNTRzcGlfcmVhZDE2KHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBKTsKKworCWlmIChsZW4gPT0gMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInJ4IHJlcXVlc3Qgb2YgemVybyBieXRlcyIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CisJaWYgKCFza2IpIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2Mgc2tiIik7CisJCXJldHVybiAwOworCX0KKworCXA1NHNwaV9zcGlfcmVhZChwcml2LCBTUElfQURSU19ETUFfREFUQSwgc2tiX3B1dChza2IsIGxlbiksIGxlbik7CisJcDU0c3BpX3NsZWVwKHByaXYpOworCisJaWYgKHA1NF9yeChwcml2LT5odywgc2tiKSA9PSAwKQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgcDU0c3BpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb25maWcpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbmZpZzsKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlxdWV1ZV93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBwNTRzcGlfdHhfZnJhbWUoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcDU0c19kbWFfcmVncyBkbWFfcmVnczsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisJdTMyIGludHM7CisKKwlwNTRzcGlfd2FrZXVwKHByaXYpOworCisJZG1hX3JlZ3MuY21kID0gY3B1X3RvX2xlMTYoU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRSk7CisJZG1hX3JlZ3MubGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCWRtYV9yZWdzLmFkZHIgPSBoZHItPnJlcV9pZDsKKworCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsICZkbWFfcmVncywKKwkJCSAgIHNpemVvZihkbWFfcmVncykpOworCisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBTUElfQURSU19ETUFfREFUQSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIDIgKiBIWjsKKwlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgIldSX1JFQURZIHRpbWVvdXQiKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl9CisKKwlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfV1JfUkVBRFkpOworCXA1NHNwaV9zbGVlcChwcml2KTsKKworb3V0OgorCWlmIChGUkVFX0FGVEVSX1RYKHNrYikpCisJCXA1NF9mcmVlX3NrYihwcml2LT5odywgc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHA1NHNwaV93cV90eChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCXN0cnVjdCBwNTRzX3R4X2luZm8gKmVudHJ5OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqbWluZm87CisJc3RydWN0IHA1NHNfdHhfaW5mbyAqZGluZm87CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcml2LT50eF9wZW5kaW5nKSkgeworCQllbnRyeSA9IGxpc3RfZW50cnkocHJpdi0+dHhfcGVuZGluZy5uZXh0LAorCQkJCSAgIHN0cnVjdCBwNTRzX3R4X2luZm8sIHR4X2xpc3QpOworCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT50eF9saXN0KTsKKworCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwkJZGluZm8gPSBjb250YWluZXJfb2YoKHZvaWQgKikgZW50cnksIHN0cnVjdCBwNTRzX3R4X2luZm8sCisJCQkJICAgICB0eF9saXN0KTsKKwkJbWluZm8gPSBjb250YWluZXJfb2YoKHZvaWQgKikgZGluZm8sIHN0cnVjdCBwNTRfdHhfaW5mbywKKwkJCQkgICAgIGRhdGEpOworCQlpbmZvID0gY29udGFpbmVyX29mKCh2b2lkICopIG1pbmZvLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sCisJCQkJICAgIHJhdGVfZHJpdmVyX2RhdGEpOworCQlza2IgPSBjb250YWluZXJfb2YoKHZvaWQgKikgaW5mbywgc3RydWN0IHNrX2J1ZmYsIGNiKTsKKworCQlyZXQgPSBwNTRzcGlfdHhfZnJhbWUocHJpdiwgc2tiKTsKKworCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlwNTRfZnJlZV9za2IocHJpdi0+aHcsIHNrYik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqbWkgPSAoc3RydWN0IHA1NF90eF9pbmZvICopIGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisJc3RydWN0IHA1NHNfdHhfaW5mbyAqZGkgPSAoc3RydWN0IHA1NHNfdHhfaW5mbyAqKSBtaS0+ZGF0YTsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKmRpKSA+IHNpemVvZigobWktPmRhdGEpKSk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRpLT50eF9saXN0LCAmcHJpdi0+dHhfcGVuZGluZyk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcXVldWVfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwNTRzX3ByaXYsIHdvcmspOworCXUzMiBpbnRzOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAocHJpdi0+Zndfc3RhdGUgPT0gRldfU1RBVEVfT0ZGICYmCisJICAgIHByaXYtPmZ3X3N0YXRlID09IEZXX1NUQVRFX1JFU0VUKQorCQlnb3RvIG91dDsKKworCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisKKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkgeworCQlwNTRzcGlfaW50X3JlYWR5KHByaXYpOworCQlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfUkVBRFkpOworCX0KKworCWlmIChwcml2LT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKKwkJZ290byBvdXQ7CisKKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9VUERBVEUpIHsKKwkJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1VQREFURSk7CisJCXJldCA9IHA1NHNwaV9yeChwcml2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSB7CisJCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpOworCQlyZXQgPSBwNTRzcGlfcngocHJpdik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcDU0c3BpX3dxX3R4KHByaXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKK30KKworc3RhdGljIGludCBwNTRzcGlfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZXQgPSAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXV0ZXgpKSB7CisJCXJldCA9IC1FSU5UUjsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9CT09USU5HOworCisJcDU0c3BpX3Bvd2VyX29uKHByaXYpOworCisJcmV0ID0gcDU0c3BpX3VwbG9hZF9maXJtd2FyZShkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDIwMDApOworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmcHJpdi0+ZndfY29tcCwKKwkJCQkJCQkgICAgdGltZW91dCk7CisJaWYgKCF0aW1lb3V0KSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiZmlybXdhcmUgYm9vdCBmYWlsZWQiKTsKKwkJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KSkgeworCQlyZXQgPSAtRUlOVFI7CisJCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJCWdvdG8gb3V0OworCX0KKworCVdBUk5fT04ocHJpdi0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdXRleCkpIHsKKwkJLyogRklYTUU6IGhvdyB0byBoYW5kbGUgdGhpcyBlcnJvcj8gKi8KKwkJcmV0dXJuOworCX0KKworCVdBUk5fT04ocHJpdi0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOworCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+d29yayk7CisKKwlwNTRzcGlfcG93ZXJfb2ZmKHByaXYpOworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnR4X3BlbmRpbmcpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfT0ZGOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwNTRzcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWh3ID0gcDU0X2luaXRfY29tbW9uKHNpemVvZigqcHJpdikpOworCWlmICghaHcpIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYgPSBody0+cHJpdjsKKwlwcml2LT5odyA9IGh3OworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHByaXYpOworCXByaXYtPnNwaSA9IHNwaTsKKworCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OworCXNwaS0+bWF4X3NwZWVkX2h6ID0gMjQwMDAwMDA7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInNwaV9zZXR1cCBmYWlsZWQiKTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHA1NHNwaV9ncGlvX3Bvd2VyLCAicDU0c3BpIHBvd2VyIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJwb3dlciBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCXJldCA9IGdwaW9fcmVxdWVzdChwNTRzcGlfZ3Bpb19pcnEsICJwNTRzcGkgaXJxIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJpcnEgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQocDU0c3BpX2dwaW9fcG93ZXIsIDApOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHA1NHNwaV9ncGlvX2lycSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpLAorCQkJICBwNTRzcGlfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAicDU0c3BpIiwKKwkJCSAgcHJpdi0+c3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInJlcXVlc3RfaXJxKCkgZmFpbGVkIik7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpLAorCQkgICAgIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOworCisJSU5JVF9XT1JLKCZwcml2LT53b3JrLCBwNTRzcGlfd29yayk7CisJaW5pdF9jb21wbGV0aW9uKCZwcml2LT5md19jb21wKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dHhfcGVuZGluZyk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmc3BpLT5kZXYpOworCXByaXYtPmNvbW1vbi5vcGVuID0gcDU0c3BpX29wX3N0YXJ0OworCXByaXYtPmNvbW1vbi5zdG9wID0gcDU0c3BpX29wX3N0b3A7CisJcHJpdi0+Y29tbW9uLnR4ID0gcDU0c3BpX29wX3R4OworCisJcmV0ID0gcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoaHcpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKworCXJldCA9IHA1NHNwaV9yZXF1ZXN0X2VlcHJvbShodyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisKKwlyZXQgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGh3LCAmcHJpdi0+c3BpLT5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2NvbW1vbjoKKwlwNTRfZnJlZV9jb21tb24ocHJpdi0+aHcpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHA1NHNwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisKKwlmcmVlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpLCBzcGkpOworCisJZ3Bpb19mcmVlKHA1NHNwaV9ncGlvX3Bvd2VyKTsKKwlncGlvX2ZyZWUocDU0c3BpX2dwaW9faXJxKTsKKwlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmZpcm13YXJlKTsKKworCW11dGV4X2Rlc3Ryb3koJnByaXYtPm11dGV4KTsKKworCXA1NF9mcmVlX2NvbW1vbihwcml2LT5odyk7CisJaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHA1NHNwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLyogdXNlIGN4MzExMHggbmFtZSBiZWNhdXNlIGJvYXJkLW44MDAuYyB1c2VzIHRoYXQgZm9yIHRoZQorCQkgKiBTUEkgcG9ydCAqLworCQkubmFtZQkJPSAiY3gzMTEweCIsCisJCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisKKwkucHJvYmUJCT0gcDU0c3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocDU0c3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwNTRzcGlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZwNTRzcGlfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBTUEkgZHJpdmVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwNTRzcGlfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmcDU0c3BpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHA1NHNwaV9pbml0KTsKK21vZHVsZV9leGl0KHA1NHNwaV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYmU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGEgcG9ydCBmcm9tIHN0bGM0NXh4OgorICoJQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBQNTRTUElfSAorI2RlZmluZSBQNTRTUElfSAorCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJwNTQuaCIKKworLyogQml0IDE1IGlzIHJlYWQvd3JpdGUgYml0OyBPTiA9IFJFQUQsIE9GRiA9IFdSSVRFICovCisjZGVmaW5lIFNQSV9BRFJTX1JFQURfQklUXzE1CQkweDgwMDAKKworI2RlZmluZSBTUElfQURSU19BUk1fSU5URVJSVVBUUwkJMHgwMAorI2RlZmluZSBTUElfQURSU19BUk1fSU5UX0VOCQkweDA0CisKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTCTB4MDgKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfRU4JCTB4MGMKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfQUNLCQkweDEwCisKKyNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMQkJMHgxNAorI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8yCQkweDE4CisKKyNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVAkJMHgyNiAgICAvKiBoaWdoIHdvcmQgKi8KKworI2RlZmluZSBTUElfQURSU19ETUFfREFUQQkJMHgyOAorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMCQkweDJjCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4JCTB4MmUKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UJCTB4MzAKKworI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9DVFJMCQkweDM0CisjZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0xFTgkJMHgzNgorI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9CQVNFCQkweDM4CisKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFCTB4ODAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRAkweDQwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVAkJMHgyMDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVAkweDEwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX0NQVV9FTgkweDA4MDAKKworI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFCTB4MDAwMQorI2RlZmluZSBTUElfRE1BX1JFQURfQ1RSTF9FTkFCTEUJMHgwMDAxCisjZGVmaW5lIEhPU1RfQUxMT1dFRAkJCSgxIDw8IDcpCisKKyNkZWZpbmUgU1BJX1RJTUVPVVQJCQkxMDAgICAgICAgICAvKiBtc2VjICovCisKKyNkZWZpbmUgU1BJX01BWF9UWF9QQUNLRVRTCQkzMgorCisjZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUJCTMyNzY3CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfV0FLRVVQCQkweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQCQkweDAwMDAwMDAyCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORQkJMHgwMDAwMDAwNAorCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX0NUUwkJMHgwMDAwNDAwMAorI2RlZmluZSBTUElfVEFSR0VUX0lOVF9EUgkJMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9SRUFEWQkJMHgwMDAwMDAwMQorI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1BJX0hPU1RfSU5UX1NXX1VQREFURQkJMHgwMDAwMDAwNAorI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFCQkweDEwMDAwMDAwCisKKy8qIGNsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgU1BJX0hPU1RfSU5UX0NSCQkJMHgwMDAwNDAwMAorCisvKiBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9EUgkJCTB4MDAwMDgwMDAKKworI2RlZmluZSBTUElfSE9TVF9JTlRTX0RFRkFVTFQgCQkJCQkJICAgIFwKKwkoU1BJX0hPU1RfSU5UX1JFQURZIHwgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpCisKKyNkZWZpbmUgVEFSR0VUX0JPT1RfU0xFRVAgNTAKKworc3RydWN0IHA1NHNfZG1hX3JlZ3MgeworCV9fbGUxNiBjbWQ7CisJX19sZTE2IGxlbjsKKwlfX2xlMzIgYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0c190eF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7Cit9OworCitzdHJ1Y3QgcDU0c19wcml2IHsKKwkvKiBwNTRfY29tbW9uIGhhcyB0byBiZSB0aGUgZmlyc3QgZW50cnkgKi8KKwlzdHJ1Y3QgcDU0X2NvbW1vbiBjb21tb247CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBjb21wbGV0aW9uIGZ3X2NvbXA7CisKKwlzcGlubG9ja190IHR4X2xvY2s7CisKKwkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHhfcGVuZGluZzsKKworCWVudW0gZndfc3RhdGUgZndfc3RhdGU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKK307CisKKyNlbmRpZiAvKiBQNTRTUElfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaV9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGlfZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhMTA1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGlfZWVwcm9tLmgKQEAgLTAsMCArMSw2NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQ29uZXhhbnQgQW1lcmljYXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDggQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIGJhc2VkIG9uOgorICogIC0gY3gzMTEweCdzIHBkYS5oIGZyb20gTm9raWEKKyAqICAtIGN4MzExMC10cmFuc2Zlci5sb2cgYnkgSm9oYW5uZXMgQmVyZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgUDU0U1BJX0VFUFJPTV9ICisjZGVmaW5lIFA1NFNQSV9FRVBST01fSAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBwNTRzcGlfZWVwcm9tW10gPSB7CisKKy8qIHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKi8KKzB4NDcsIDB4NGQsIDB4NTUsIDB4YWEsCS8qIG1hZ2ljICovCisweDAwLCAweDAwLAkJLyogcGFkICovCisweDAwLCAweDAwLAkJLyogZWVwcm9tX3BkYV9kYXRhX3dyYXAgbGVuZ3RoICovCisweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBhcm0gb3Bjb2RlICovCisKKy8qIGJvZ3VzIE1BQyBhZGRyZXNzICovCisweDA0LCAweDAwLCAweDAxLCAweDAxLAkJLyogUERSX01BQ19BRERSRVNTICovCisJMHgwMCwgMHgwMiwgMHhlZSwgMHhjMCwgMHhmZiwgMHhlZSwKKworLyogc3RydWN0IGJvb3RyZWNfZXhwX2lmICovCisweDA2LCAweDAwLCAweDAxLCAweDEwLAkJLyogUERSX0lOVEVSRkFDRV9MSVNUICovCisJMHgwMCwgMHgwMCwJCQkvKiByb2xlICovCisJMHgwZiwgMHgwMCwJCQkvKiBpZl9pZCAqLworCTB4ODUsIDB4MDAsCQkJLyogdmFyaWFudCA9IExvbmdib3cgUkYsIDJHSHogKi8KKwkweDAxLCAweDAwLAkJCS8qIGJ0bV9jb21wYXQgKi8KKwkweDFmLCAweDAwLAkJCS8qIHRvcF9jb21wYXQgKi8KKworMHgwMywgMHgwMCwgMHgwMiwgMHgxMCwJCS8qIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQgKi8KKwkweDAzLCAweDIwLCAweDAwLCAweDQzLAorCisvKiBzdHJ1Y3QgcGRhX2NvdW50cnlbNl0gKi8KKzB4MGQsIDB4MDAsIDB4MDcsIDB4MTAsCQkvKiBQRFJfQ09VTlRSWV9MSVNUICovCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisKKy8qIHN0cnVjdCBwZGFfY291bnRyeSAqLworMHgwMywgMHgwMCwgMHgwOCwgMHgxMCwJCS8qIFBEUl9ERUZBVUxUX0NPVU5UUlkgKi8KKwkweDMwLCAweDAwLCAweDAwLCAweDAwLAkJLyogRVRTSSAqLworCisweDAzLCAweDAwLCAweDAwLCAweDExLAkJLyogUERSX0FOVEVOTkFfR0FJTiAqLworCTB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCisKKzB4MDksIDB4MDAsIDB4YWQsIDB4ZGUsCQkvKiBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT00gKi8KKwkweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisKKy8qIHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKi8KKzB4MTAsIDB4MDYsIDB4NWQsIDB4YjAsCQkvKiBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NICovCisJMHgwZCwgMHgwMCwgMHhlZSwgMHgwMCwJCS8qIDEzIGVudHJpZXMsIDIzOCBieXRlcyBwZXIgZW50cnkgKi8KKwkweDAwLCAweDAwLCAweDE2LCAweDBjLAkJLyogbm8gb2Zmc2V0LCAzMDk0IHRvdGFsIGxlbiAqLworCQkvKiAyNDEyIE1IeiAqLworCQkweDZjLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg5YSwgMHg4NCwKKwkJCQkweGFhLCAweDhhLCAweGFhLCAweDhhLCAweGFhLCAweDhhLCAweGFhLCAweDhhLAorCQkJCTB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsCisJCQkJMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4OTQsIDB4NmMsCisJCQkJMHg5OSwgMHg4MiwgMHg5OSwgMHg4MiwgMHg5OSwgMHg4MiwgMHg5OSwgMHg4MiwKKwkJCQkweDJiLCAweGFlLCAweDJiLCAweGFlLCAweDJiLCAweGFlLCAweDJiLCAweGFlLAorCQkJCTB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweGFhLCAweDVhLAorCQkJCTB4ODgsIDB4N2EsIDB4ODgsIDB4N2EsIDB4ODgsIDB4N2EsIDB4ODgsIDB4N2EsCisJCQkJMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwKKwkJCQkweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHhmMywgMHg0NywKKwkJCQkweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLAorCQkJCTB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsCisJCQkJMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4NTksIDB4MzYsCisJCQkJMHg0MywgMHg1YSwgMHg0MywgMHg1YSwgMHg0MywgMHg1YSwgMHg0MywgMHg1YSwKKwkJCQkweGQ1LCAweDg1LCAweGQ1LCAweDg1LCAweGQ1LCAweDg1LCAweGQ1LCAweDg1LAorCQkJCTB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGU0LCAweDJkLAorCQkJCTB4MTgsIDB4NDYsIDB4MTgsIDB4NDYsIDB4MTgsIDB4NDYsIDB4MTgsIDB4NDYsCisJCQkJMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwKKwkJCQkweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQxNyBNSHogKi8KKwkJMHg3MSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4YjksIDB4ODMsCisJCQkJMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDJlLCAweDZjLAorCQkJCTB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg4ZCwgMHg1YSwKKwkJCQkweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MGEsIDB4NDgsCisJCQkJMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDdjLCAweDM2LAorCQkJCTB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHhmNSwgMHgyZCwKKwkJCQkweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MjIgTUh6ICovCisJCTB4NzYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGI5LCAweDgzLAorCQkJCTB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsCisJCQkJMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgyZSwgMHg2YywKKwkJCQkweDY4LCAweDgyLCAweDY4LCAweDgyLCAweDY4LCAweDgyLCAweDY4LCAweDgyLAorCQkJCTB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4OGQsIDB4NWEsCisJCQkJMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwKKwkJCQkweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDBhLCAweDQ4LAorCQkJCTB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsCisJCQkJMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHg3YywgMHgzNiwKKwkJCQkweGZjLCAweDU5LCAweGZjLCAweDU5LCAweGZjLCAweDU5LCAweGZjLCAweDU5LAorCQkJCTB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZjUsIDB4MmQsCisJCQkJMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwKKwkJCQkweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDI3IE1IeiAqLworCQkweDdiLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg0OCwgMHg4MywKKwkJCQkweDY3LCAweDhhLCAweDY3LCAweDhhLCAweDY3LCAweDhhLCAweDY3LCAweDhhLAorCQkJCTB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsCisJCQkJMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZmIsIDB4NmIsCisJCQkJMHg1MCwgMHg4MiwgMHg1MCwgMHg4MiwgMHg1MCwgMHg4MiwgMHg1MCwgMHg4MiwKKwkJCQkweGUyLCAweGFkLCAweGUyLCAweGFkLCAweGUyLCAweGFkLCAweGUyLCAweGFkLAorCQkJCTB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDdlLCAweDVhLAorCQkJCTB4MzgsIDB4N2EsIDB4MzgsIDB4N2EsIDB4MzgsIDB4N2EsIDB4MzgsIDB4N2EsCisJCQkJMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwKKwkJCQkweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgxNSwgMHg0OCwKKwkJCQkweDE0LCAweDZlLCAweDE0LCAweDZlLCAweDE0LCAweDZlLCAweDE0LCAweDZlLAorCQkJCTB4YTYsIDB4OTksIDB4YTYsIDB4OTksIDB4YTYsIDB4OTksIDB4YTYsIDB4OTksCisJCQkJMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4OGUsIDB4MzYsCisJCQkJMHhkOSwgMHg1OSwgMHhkOSwgMHg1OSwgMHhkOSwgMHg1OSwgMHhkOSwgMHg1OSwKKwkJCQkweDZiLCAweDg1LCAweDZiLCAweDg1LCAweDZiLCAweDg1LCAweDZiLCAweDg1LAorCQkJCTB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGZlLCAweDJkLAorCQkJCTB4OWQsIDB4NDUsIDB4OWQsIDB4NDUsIDB4OWQsIDB4NDUsIDB4OWQsIDB4NDUsCisJCQkJMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwKKwkJCQkweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQzMiBNSHogKi8KKwkJMHg4MCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZDcsIDB4ODIsCisJCQkJMHg1MSwgMHg4YSwgMHg1MSwgMHg4YSwgMHg1MSwgMHg4YSwgMHg1MSwgMHg4YSwKKwkJCQkweGUzLCAweGI1LCAweGUzLCAweGI1LCAweGUzLCAweGI1LCAweGUzLCAweGI1LAorCQkJCTB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweGM4LCAweDZiLAorCQkJCTB4MzcsIDB4ODIsIDB4MzcsIDB4ODIsIDB4MzcsIDB4ODIsIDB4MzcsIDB4ODIsCisJCQkJMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwKKwkJCQkweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg2ZiwgMHg1YSwKKwkJCQkweDFkLCAweDdhLCAweDFkLCAweDdhLCAweDFkLCAweDdhLCAweDFkLCAweDdhLAorCQkJCTB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsCisJCQkJMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MjAsIDB4NDgsCisJCQkJMHhmNiwgMHg2ZCwgMHhmNiwgMHg2ZCwgMHhmNiwgMHg2ZCwgMHhmNiwgMHg2ZCwKKwkJCQkweDg4LCAweDk5LCAweDg4LCAweDk5LCAweDg4LCAweDk5LCAweDg4LCAweDk5LAorCQkJCTB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDlmLCAweDM2LAorCQkJCTB4YjUsIDB4NTksIDB4YjUsIDB4NTksIDB4YjUsIDB4NTksIDB4YjUsIDB4NTksCisJCQkJMHg0NywgMHg4NSwgMHg0NywgMHg4NSwgMHg0NywgMHg4NSwgMHg0NywgMHg4NSwKKwkJCQkweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwNiwgMHgyZSwKKwkJCQkweDc0LCAweDQ1LCAweDc0LCAweDQ1LCAweDc0LCAweDQ1LCAweDc0LCAweDQ1LAorCQkJCTB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsCisJCQkJMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MzcgTUh6ICovCisJCTB4ODUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDY3LCAweDgyLAorCQkJCTB4M2EsIDB4OGEsIDB4M2EsIDB4OGEsIDB4M2EsIDB4OGEsIDB4M2EsIDB4OGEsCisJCQkJMHhjYywgMHhiNSwgMHhjYywgMHhiNSwgMHhjYywgMHhiNSwgMHhjYywgMHhiNSwKKwkJCQkweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHg5NSwgMHg2YiwKKwkJCQkweDFmLCAweDgyLCAweDFmLCAweDgyLCAweDFmLCAweDgyLCAweDFmLCAweDgyLAorCQkJCTB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsCisJCQkJMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4NjEsIDB4NWEsCisJCQkJMHgwMiwgMHg3YSwgMHgwMiwgMHg3YSwgMHgwMiwgMHg3YSwgMHgwMiwgMHg3YSwKKwkJCQkweDk0LCAweGE1LCAweDk0LCAweGE1LCAweDk0LCAweGE1LCAweDk0LCAweGE1LAorCQkJCTB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDJjLCAweDQ4LAorCQkJCTB4ZDgsIDB4NmQsIDB4ZDgsIDB4NmQsIDB4ZDgsIDB4NmQsIDB4ZDgsIDB4NmQsCisJCQkJMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwKKwkJCQkweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhiMSwgMHgzNiwKKwkJCQkweDkyLCAweDU5LCAweDkyLCAweDU5LCAweDkyLCAweDU5LCAweDkyLCAweDU5LAorCQkJCTB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MGYsIDB4MmUsCisJCQkJMHg0YiwgMHg0NSwgMHg0YiwgMHg0NSwgMHg0YiwgMHg0NSwgMHg0YiwgMHg0NSwKKwkJCQkweGRkLCAweDcwLCAweGRkLCAweDcwLCAweGRkLCAweDcwLCAweGRkLCAweDcwLAorCQkJCTB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDQyIE1IeiAqLworCQkweDhhLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmNiwgMHg4MSwKKwkJCQkweDI0LCAweDhhLCAweDI0LCAweDhhLCAweDI0LCAweDhhLCAweDI0LCAweDhhLAorCQkJCTB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsCisJCQkJMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4NjIsIDB4NmIsCisJCQkJMHgwNiwgMHg4MiwgMHgwNiwgMHg4MiwgMHgwNiwgMHg4MiwgMHgwNiwgMHg4MiwKKwkJCQkweDk4LCAweGFkLCAweDk4LCAweGFkLCAweDk4LCAweGFkLCAweDk4LCAweGFkLAorCQkJCTB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDUyLCAweDVhLAorCQkJCTB4ZTcsIDB4NzksIDB4ZTcsIDB4NzksIDB4ZTcsIDB4NzksIDB4ZTcsIDB4NzksCisJCQkJMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwKKwkJCQkweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgzNywgMHg0OCwKKwkJCQkweGJhLCAweDZkLCAweGJhLCAweDZkLCAweGJhLCAweDZkLCAweGJhLCAweDZkLAorCQkJCTB4NGMsIDB4OTksIDB4NGMsIDB4OTksIDB4NGMsIDB4OTksIDB4NGMsIDB4OTksCisJCQkJMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4YzIsIDB4MzYsCisJCQkJMHg2ZSwgMHg1OSwgMHg2ZSwgMHg1OSwgMHg2ZSwgMHg1OSwgMHg2ZSwgMHg1OSwKKwkJCQkweDAwLCAweDg1LCAweDAwLCAweDg1LCAweDAwLCAweDg1LCAweDAwLCAweDg1LAorCQkJCTB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDE3LCAweDJlLAorCQkJCTB4MjIsIDB4NDUsIDB4MjIsIDB4NDUsIDB4MjIsIDB4NDUsIDB4MjIsIDB4NDUsCisJCQkJMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwKKwkJCQkweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQ0NyBNSHogKi8KKwkJMHg4ZiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NzUsIDB4ODMsCisJCQkJMHg2MSwgMHg4YSwgMHg2MSwgMHg4YSwgMHg2MSwgMHg4YSwgMHg2MSwgMHg4YSwKKwkJCQkweGYzLCAweGI1LCAweGYzLCAweGI1LCAweGYzLCAweGI1LCAweGYzLCAweGI1LAorCQkJCTB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweDRiLCAweDZjLAorCQkJCTB4M2YsIDB4ODIsIDB4M2YsIDB4ODIsIDB4M2YsIDB4ODIsIDB4M2YsIDB4ODIsCisJCQkJMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwKKwkJCQkweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHhkYSwgMHg1YSwKKwkJCQkweDFjLCAweDdhLCAweDFjLCAweDdhLCAweDFjLCAweDdhLCAweDFjLCAweDdhLAorCQkJCTB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsCisJCQkJMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4NmQsIDB4NDgsCisJCQkJMHhlOSwgMHg2ZCwgMHhlOSwgMHg2ZCwgMHhlOSwgMHg2ZCwgMHhlOSwgMHg2ZCwKKwkJCQkweDdiLCAweDk5LCAweDdiLCAweDk5LCAweDdiLCAweDk5LCAweDdiLCAweDk5LAorCQkJCTB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksCisJCQkweDUwLCAweDAwLCAweGM2LCAweDM2LAorCQkJCTB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgxNSwgMHgyZSwKKwkJCQkweDNjLCAweDQ1LCAweDNjLCAweDQ1LCAweDNjLCAweDQ1LCAweDNjLCAweDQ1LAorCQkJCTB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsCisJCQkJMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NTIgTUh6ICovCisJCTB4OTQsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGY0LCAweDg0LAorCQkJCTB4OWUsIDB4OGEsIDB4OWUsIDB4OGEsIDB4OWUsIDB4OGEsIDB4OWUsIDB4OGEsCisJCQkJMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwKKwkJCQkweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgzNCwgMHg2ZCwKKwkJCQkweDc3LCAweDgyLCAweDc3LCAweDgyLCAweDc3LCAweDgyLCAweDc3LCAweDgyLAorCQkJCTB4MDksIDB4YWUsIDB4MDksIDB4YWUsIDB4MDksIDB4YWUsIDB4MDksIDB4YWUsCisJCQkJMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4NjIsIDB4NWIsCisJCQkJMHg1MCwgMHg3YSwgMHg1MCwgMHg3YSwgMHg1MCwgMHg3YSwgMHg1MCwgMHg3YSwKKwkJCQkweGUyLCAweGE1LCAweGUyLCAweGE1LCAweGUyLCAweGE1LCAweGUyLCAweGE1LAorCQkJCTB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweGEyLCAweDQ4LAorCQkJCTB4MTcsIDB4NmUsIDB4MTcsIDB4NmUsIDB4MTcsIDB4NmUsIDB4MTcsIDB4NmUsCisJCQkJMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwKKwkJCQkweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjOSwgMHgzNiwKKwkJCQkweGI3LCAweDU5LCAweGI3LCAweDU5LCAweGI3LCAweDU5LCAweGI3LCAweDU5LAorCQkJCTB4NDksIDB4ODUsIDB4NDksIDB4ODUsIDB4NDksIDB4ODUsIDB4NDksIDB4ODUsCisJCQkJMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTIsIDB4MmUsCisJCQkJMHg1NywgMHg0NSwgMHg1NywgMHg0NSwgMHg1NywgMHg0NSwgMHg1NywgMHg0NSwKKwkJCQkweGU5LCAweDcwLCAweGU5LCAweDcwLCAweGU5LCAweDcwLCAweGU5LCAweDcwLAorCQkJCTB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDUyIE1IeiAqLworCQkweDk5LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg3NCwgMHg4NiwKKwkJCQkweGRiLCAweDhhLCAweGRiLCAweDhhLCAweGRiLCAweDhhLCAweGRiLCAweDhhLAorCQkJCTB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsCisJCQkJMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MWUsIDB4NmUsCisJCQkJMHhiMCwgMHg4MiwgMHhiMCwgMHg4MiwgMHhiMCwgMHg4MiwgMHhiMCwgMHg4MiwKKwkJCQkweDQyLCAweGFlLCAweDQyLCAweGFlLCAweDQyLCAweGFlLCAweDQyLCAweGFlLAorCQkJCTB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweGViLCAweDViLAorCQkJCTB4ODUsIDB4N2EsIDB4ODUsIDB4N2EsIDB4ODUsIDB4N2EsIDB4ODUsIDB4N2EsCisJCQkJMHgxNywgMHhhNiwgMHgxNywgMHhhNiwgMHgxNywgMHhhNiwgMHgxNywgMHhhNiwKKwkJCQkweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHhkOCwgMHg0OCwKKwkJCQkweDQ2LCAweDZlLCAweDQ2LCAweDZlLCAweDQ2LCAweDZlLCAweDQ2LCAweDZlLAorCQkJCTB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksCisJCQkJMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4Y2QsIDB4MzYsCisJCQkJMHhkYiwgMHg1OSwgMHhkYiwgMHg1OSwgMHhkYiwgMHg1OSwgMHhkYiwgMHg1OSwKKwkJCQkweDZkLCAweDg1LCAweDZkLCAweDg1LCAweDZkLCAweDg1LCAweDZkLCAweDg1LAorCQkJCTB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDEwLCAweDJlLAorCQkJCTB4NzEsIDB4NDUsIDB4NzEsIDB4NDUsIDB4NzEsIDB4NDUsIDB4NzEsIDB4NDUsCisJCQkJMHgwMywgMHg3MSwgMHgwMywgMHg3MSwgMHgwMywgMHg3MSwgMHgwMywgMHg3MSwKKwkJCQkweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjU1NyBNSHogKi8KKwkJMHg5ZSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZjMsIDB4ODcsCisJCQkJMHgxNywgMHg4YiwgMHgxNywgMHg4YiwgMHgxNywgMHg4YiwgMHgxNywgMHg4YiwKKwkJCQkweGE5LCAweGI2LCAweGE5LCAweGI2LCAweGE5LCAweGI2LCAweGE5LCAweGI2LAorCQkJCTB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDA3LCAweDZmLAorCQkJCTB4ZTksIDB4ODIsIDB4ZTksIDB4ODIsIDB4ZTksIDB4ODIsIDB4ZTksIDB4ODIsCisJCQkJMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwKKwkJCQkweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHg3MywgMHg1YywKKwkJCQkweGJhLCAweDdhLCAweGJhLCAweDdhLCAweGJhLCAweDdhLCAweGJhLCAweDdhLAorCQkJCTB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsCisJCQkJMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4MGQsIDB4NDksCisJCQkJMHg3NCwgMHg2ZSwgMHg3NCwgMHg2ZSwgMHg3NCwgMHg2ZSwgMHg3NCwgMHg2ZSwKKwkJCQkweDA2LCAweDlhLCAweDA2LCAweDlhLCAweDA2LCAweDlhLCAweDA2LCAweDlhLAorCQkJCTB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsCisJCQkweDUwLCAweDAwLCAweGQxLCAweDM2LAorCQkJCTB4ZmYsIDB4NTksIDB4ZmYsIDB4NTksIDB4ZmYsIDB4NTksIDB4ZmYsIDB4NTksCisJCQkJMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwKKwkJCQkweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwZSwgMHgyZSwKKwkJCQkweDhiLCAweDQ1LCAweDhiLCAweDQ1LCAweDhiLCAweDQ1LCAweDhiLCAweDQ1LAorCQkJCTB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsCisJCQkJMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI1NjIgTUh6ICovCisJCTB4YTMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDcyLCAweDg5LAorCQkJCTB4NTQsIDB4OGIsIDB4NTQsIDB4OGIsIDB4NTQsIDB4OGIsIDB4NTQsIDB4OGIsCisJCQkJMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwKKwkJCQkweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHg2ZiwKKwkJCQkweDIxLCAweDgzLCAweDIxLCAweDgzLCAweDIxLCAweDgzLCAweDIxLCAweDgzLAorCQkJCTB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsCisJCQkJMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4ZmIsIDB4NWMsCisJCQkJMHhlZSwgMHg3YSwgMHhlZSwgMHg3YSwgMHhlZSwgMHg3YSwgMHhlZSwgMHg3YSwKKwkJCQkweDgwLCAweGE2LCAweDgwLCAweGE2LCAweDgwLCAweGE2LCAweDgwLCAweGE2LAorCQkJCTB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweDQzLCAweDQ5LAorCQkJCTB4YTMsIDB4NmUsIDB4YTMsIDB4NmUsIDB4YTMsIDB4NmUsIDB4YTMsIDB4NmUsCisJCQkJMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwKKwkJCQkweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHhkNCwgMHgzNiwKKwkJCQkweDI0LCAweDVhLCAweDI0LCAweDVhLCAweDI0LCAweDVhLCAweDI0LCAweDVhLAorCQkJCTB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsCisJCQkJMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MGIsIDB4MmUsCisJCQkJMHhhNiwgMHg0NSwgMHhhNiwgMHg0NSwgMHhhNiwgMHg0NSwgMHhhNiwgMHg0NSwKKwkJCQkweDM4LCAweDcxLCAweDM4LCAweDcxLCAweDM4LCAweDcxLCAweDM4LCAweDcxLAorCQkJCTB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNTcyIE1IeiAqLworCQkweGE4LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmMSwgMHg4YSwKKwkJCQkweDkxLCAweDhiLCAweDkxLCAweDhiLCAweDkxLCAweDhiLCAweDkxLCAweDhiLAorCQkJCTB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsCisJCQkJMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywKKwkJCTB4ZjAsIDB4MDAsIDB4ZDksIDB4NzAsCisJCQkJMHg1YSwgMHg4MywgMHg1YSwgMHg4MywgMHg1YSwgMHg4MywgMHg1YSwgMHg4MywKKwkJCQkweGVjLCAweGFlLCAweGVjLCAweGFlLCAweGVjLCAweGFlLCAweGVjLCAweGFlLAorCQkJCTB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweDgzLCAweDVkLAorCQkJCTB4MjMsIDB4N2IsIDB4MjMsIDB4N2IsIDB4MjMsIDB4N2IsIDB4MjMsIDB4N2IsCisJCQkJMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwKKwkJCQkweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHg3OCwgMHg0OSwKKwkJCQkweGQxLCAweDZlLCAweGQxLCAweDZlLCAweGQxLCAweDZlLCAweGQxLCAweDZlLAorCQkJCTB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsCisJCQkJMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4ZDgsIDB4MzYsCisJCQkJMHg0OCwgMHg1YSwgMHg0OCwgMHg1YSwgMHg0OCwgMHg1YSwgMHg0OCwgMHg1YSwKKwkJCQkweGRhLCAweDg1LCAweGRhLCAweDg1LCAweGRhLCAweDg1LCAweGRhLCAweDg1LAorCQkJCTB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDA5LCAweDJlLAorCQkJCTB4YzAsIDB4NDUsIDB4YzAsIDB4NDUsIDB4YzAsIDB4NDUsIDB4YzAsIDB4NDUsCisJCQkJMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwKKwkJCQkweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKy8qCisgKiBOb3QgcmVhbGx5IHN1cmUgaWYgdGhpcyBpcyBhY3R1YWxseSB0aGUgcG93ZXJfbGltaXQgZGF0YWJhc2UsCisgKiBpdCBsb29rcyBhIGJpdCAicmVsYXRlZCIgdG8gUERSX1BSSVNNX1pJRl9UWF9JUV9DQUxJQlJBVElPTgorICovCisvKiBzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICovCisweGFlLCAweDAwLCAweGVmLCAweGJlLCAgICAgIC8qIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT00gKi8KKwkweDBkLCAweDAwLCAweDFhLCAweDAwLAkJLyogMTMgZW50cmllcywgMjYgYnl0ZXMgcGVyIGVudHJ5ICovCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwJCS8qIG5vIG9mZnNldCwgMzM4IGJ5dGVzIHRvdGFsICovCisKKwkJLyogMjQxMiBNSHogKi8KKwkJMHg2YywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGUwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDE3IE1IeiAqLworCQkweDcxLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MjIgTUh6ICovCisJCTB4NzYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQyNyBNSHogKi8KKwkJMHg3YiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDMyIE1IeiAqLworCQkweDgwLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MzcgTUh6ICovCisJCTB4ODUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ0MiBNSHogKi8KKwkJMHg4YSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDQ3IE1IeiAqLworCQkweDhmLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NTIgTUh6ICovCisJCTB4OTQsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ1NyBNSHogKi8KKwkJMHg5OSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDYyIE1IeiAqLworCQkweDllLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NjcgTUh6ICovCisJCTB4YTMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ3MiBNSHogKi8KKwkJMHhhOCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworLyogc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5WzEzXSAqLworMHg0MiwgMHgwMCwgMHgwNiwgMHgxOSwJCS8qIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT04gKi8KKwkvKiAyNDEyIE1IeiAqLworCTB4NmMsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQxNyBNSHogKi8KKwkweDcxLCAweDA5LCAweDI2LCAweDAwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MjIgTUh6ICovCisJMHg3NiwgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDI3IE1IeiAqLworCTB4N2IsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQzMiBNSHogKi8KKwkweDgwLCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MzcgTUh6ICovCisJMHg4NSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDQyIE1IeiAqLworCTB4OGEsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQ0NyBNSHogKi8KKwkweDhmLCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NTIgTUh6ICovCisJMHg5NCwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDU3IE1IeiAqLworCTB4OTksIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisJLyogMjQ2MiBNSHogKi8KKwkweDllLCAweDA5LCAweDI1LCAweDAwLCAweGY1LCAweGZmLCAweGY5LCAweGZmLCAweDAwLCAweDAxLAorCS8qIDI0NjcgTUh6ICovCisJMHhhMywgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKwkvKiAyNDcyIE1IeiAqLworCTB4YTgsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCQkvKiBQRFJfRU5EICovCisJMHhhOCwgMHhmNQkJCS8qIGJvZ3VzIGRhdGEgKi8KK307CisKKyNlbmRpZiAvKiBQNTRTUElfRUVQUk9NX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDVkZTJlYmYuLmRhNjY0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTQyNCw5ICs0MjQsNDYgQEAKIAkJCSAgICBkYXRhLCBsZW4sICZhbGVuLCAyMDAwKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgcDU0dV9yb21ib290XzM4ODdbXSA9ICJ+fn5+IjsKK3N0YXRpYyBjb25zdCBjaGFyIHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODdbXSA9ICI8XHIiOworCitzdGF0aWMgaW50IHA1NHVfZGV2aWNlX3Jlc2V0XzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldCwgbG9jayA9IChwcml2LT5pbnRmLT5jb25kaXRpb24gIT0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HKTsKKwl1OCBidWZbNF07CisKKwlpZiAobG9jaykgeworCQlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHByaXYtPnVkZXYsIHByaXYtPmludGYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgdW5hYmxlIHRvIGxvY2sgIgorCQkJCSIgZGV2aWNlIGZvciByZXNldDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gdXNiX3Jlc2V0X2RldmljZShwcml2LT51ZGV2KTsKKwlpZiAobG9jaykKKwkJdXNiX3VubG9ja19kZXZpY2UocHJpdi0+dWRldik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIihwNTR1c2IpIHVuYWJsZSB0byByZXNldCAiCisJCQkiZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZW1jcHkoJmJ1ZiwgcDU0dV9yb21ib290XzM4ODcsIHNpemVvZihidWYpKTsKKwlyZXQgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLAorCQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIihwNTR1c2IpIHVuYWJsZSB0byBqdW1wIHRvICIKKwkJCSJib290IFJPTTogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHA1NHVfdXBsb2FkX2Zpcm13YXJlXzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewotCXN0YXRpYyBjaGFyIHN0YXJ0X3N0cmluZ1tdID0gIn5+fn48XHIiOwogCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CiAJaW50IGVyciwgYWxlbjsKQEAgLTQ0NSwxMiArNDgyLDkgQEAKIAkJZ290byBlcnJfYnVmYWxsb2M7CiAJfQogCi0JbWVtY3B5KGJ1Ziwgc3RhcnRfc3RyaW5nLCA0KTsKLQllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLCBidWYsIDQpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgcmVzZXQgZmFpbGVkISAoJWQpXG4iLCBlcnIpOworCWVyciA9IHA1NHVfZGV2aWNlX3Jlc2V0XzM4ODcoZGV2KTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycl9yZXNldDsKLQl9CiAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgImlzbDM4ODd1c2IiLCAmcHJpdi0+dWRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC00NjYsMTUgKzUwMCwyMiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CiAKKwlpZiAocHJpdi0+Y29tbW9uLmZ3X2ludGVyZmFjZSAhPSBGV19MTTg3KSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIndyb25nIGZpcm13YXJlLCAiCisJCQkicGxlYXNlIGdldCBhIExNODcgZmlybXdhcmUgYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOworCX0KKwogCWxlZnQgPSBibG9ja19zaXplID0gbWluKChzaXplX3QpUDU0VV9GV19CTE9DSywgZndfZW50cnktPnNpemUpOwotCXN0cmNweShidWYsIHN0YXJ0X3N0cmluZyk7Ci0JbGVmdCAtPSBzdHJsZW4oc3RhcnRfc3RyaW5nKTsKLQl0bXAgKz0gc3RybGVuKHN0YXJ0X3N0cmluZyk7CisJc3RyY3B5KGJ1ZiwgcDU0dV9maXJtd2FyZV91cGxvYWRfMzg4Nyk7CisJbGVmdCAtPSBzdHJsZW4ocDU0dV9maXJtd2FyZV91cGxvYWRfMzg4Nyk7CisJdG1wICs9IHN0cmxlbihwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KTsKIAogCWRhdGEgPSBmd19lbnRyeS0+ZGF0YTsKIAlyZW1haW5zID0gZndfZW50cnktPnNpemU7CiAKLQloZHIgPSAoc3RydWN0IHgyX2hlYWRlciAqKShidWYgKyBzdHJsZW4oc3RhcnRfc3RyaW5nKSk7CisJaGRyID0gKHN0cnVjdCB4Ml9oZWFkZXIgKikoYnVmICsgc3RybGVuKHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODcpKTsKIAltZW1jcHkoaGRyLT5zaWduYXR1cmUsIFgyX1NJR05BVFVSRSwgWDJfU0lHTkFUVVJFX1NJWkUpOwogCWhkci0+ZndfbG9hZF9hZGRyID0gY3B1X3RvX2xlMzIoSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUik7CiAJaGRyLT5md19sZW5ndGggPSBjcHVfdG9fbGUzMihmd19lbnRyeS0+c2l6ZSk7CkBAIC02MTYsNiArNjU3LDE0IEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKHByaXYtPmNvbW1vbi5md19pbnRlcmZhY2UgIT0gRldfTE04NikgeworCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJ3cm9uZyBmaXJtd2FyZSwgIgorCQkJInBsZWFzZSBnZXQgYSBMTTg2KFVTQikgZmlybXdhcmUgYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlrZnJlZShidWYpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAjZGVmaW5lIFA1NFVfV1JJVEUodHlwZSwgYWRkciwgZGF0YSkgXAogCWRvIHtcCiAJCWVyciA9IHA1NHVfd3JpdGUocHJpdiwgYnVmLCB0eXBlLFwKQEAgLTg3Niw2ICs5MjUsOSBAQAogCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJmludGYtPmRldik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwogCXByaXYtPnVkZXYgPSB1ZGV2OworCXByaXYtPmludGYgPSBpbnRmOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3F1ZXVlKTsKKwlpbml0X3VzYl9hbmNob3IoJnByaXYtPnN1Ym1pdHRlZCk7CiAKIAl1c2JfZ2V0X2Rldih1ZGV2KTsKIApAQCAtOTE4LDIwICs5NzAsMTUgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3F1ZXVlKTsKLQlpbml0X3VzYl9hbmNob3IoJnByaXYtPnN1Ym1pdHRlZCk7Ci0KIAlwNTR1X29wZW4oZGV2KTsKIAllcnIgPSBwNTRfcmVhZF9lZXByb20oZGV2KTsKIAlwNTR1X3N0b3AoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiKHA1NHVzYikgQ2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZVxuIik7CisJZXJyID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsICZ1ZGV2LT5kZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwotCX0KIAogCXJldHVybiAwOwogCkBAIC05NTgsMTEgKzEwMDUsMjQgQEAKIAlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwogfQogCitzdGF0aWMgaW50IHA1NHVfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NHVfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0gewogCS5uYW1lCT0gInA1NHVzYiIsCiAJLmlkX3RhYmxlID0gcDU0dV90YWJsZSwKIAkucHJvYmUgPSBwNTR1X3Byb2JlLAogCS5kaXNjb25uZWN0ID0gcDU0dV9kaXNjb25uZWN0LAorCS5wcmVfcmVzZXQgPSBwNTR1X3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9IHA1NHVfcG9zdF9yZXNldCwKKwkuc29mdF91bmJpbmQgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcDU0dV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmgKaW5kZXggNTRlZTczOC4uOGJjNTg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaApAQCAtMTI2LDYgKzEyNiw3IEBACiBzdHJ1Y3QgcDU0dV9wcml2IHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiBjb21tb247CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiAJZW51bSB7CiAJCVA1NFVfTkVUMjI4MCA9IDAsCiAJCVA1NFVfMzg4NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggNTdhMTUwYS4uNGM5N2M2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0yOTgxLDcgKzI5ODEsOCBAQAogCQl1bmlvbiBpd3JlcV9kYXRhICp1d3JxLCBjaGFyICpleHRyYSkKIHsKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXUzMiB1LCBvaWQgPSBPSURfSU5MX0NPTkZJRzsKKwl1MzIgdTsKKwllbnVtIG9pZF9udW1fdCBvaWQgPSBPSURfSU5MX0NPTkZJRzsKIAogCWRvd25fd3JpdGUoJnByaXYtPm1pYl9zZW0pOwogCW1ndF9nZXQocHJpdiwgT0lEX0lOTF9DT05GSUcsICZ1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKaW5kZXggOTE5NjgyNS4uMTY2ZWQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKQEAgLTQzLDcgKzQzLDYgQEAKIAogc3RhdGljIGludCBwcmlzbTU0X2JyaW5nX2Rvd24oaXNscGNpX3ByaXZhdGUgKik7CiBzdGF0aWMgaW50IGlzbHBjaV9hbGxvY19tZW1vcnkoaXNscGNpX3ByaXZhdGUgKik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlzbHBjaV9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiAvKiBUZW1wb3JhcnkgZHVtbXkgTUFDIGFkZHJlc3MgdG8gdXNlIHVudGlsIGZpcm13YXJlIGlzIGxvYWRlZC4KICAqIFRoZSBpZGVhIHRoZXJlIGlzIHRoYXQgc29tZSB0b29scyAoc3VjaCBhcyBuYW1laWYpIG1heSBxdWVyeQpAQCAtNjE0LDE4ICs2MTMsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWlzbHBjaV9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLSNpZiBWRVJCT1NFID4gU0hPV19FUlJPUl9NRVNTQUdFUwotCURFQlVHKFNIT1dfRlVOQ1RJT05fQ0FMTFMsICJpc2xwY2lfc3RhdGlzdGljc1xuIik7Ci0jZW5kaWYKLQotCXJldHVybiAmcHJpdi0+c3RhdGlzdGljczsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIE5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04MDQsMTAgKzc5MSwyMiBAQAogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXNscGNpX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpc2xwY2lfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gaXNscGNpX2V0aHRvb2xfZ2V0X2RydmluZm8sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlzbHBjaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaXNscGNpX29wZW4sCisJLm5kb19zdG9wCQk9IGlzbHBjaV9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IHByaXNtNTRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0CQk9IGlzbHBjaV9ldGhfdHJhbnNtaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGlzbHBjaV9ldGhfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBwcmlzbTU0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKgogaXNscGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtODI3LDI1ICs4MjYsMTYgQEAKIAluZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBmdW5jdGlvbiBwb2ludGVycyAqLwotCW5kZXYtPm9wZW4gPSAmaXNscGNpX29wZW47Ci0JbmRldi0+c3RvcCA9ICZpc2xwY2lfY2xvc2U7Ci0JbmRldi0+Z2V0X3N0YXRzID0gJmlzbHBjaV9zdGF0aXN0aWNzOwotCW5kZXYtPmRvX2lvY3RsID0gJnByaXNtNTRfaW9jdGw7Ci0JbmRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZwcmlzbTU0X2hhbmRsZXJfZGVmOworCW5kZXYtPm5ldGRldl9vcHMgPSAmaXNscGNpX25ldGRldl9vcHM7CisJbmRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcHJpc201NF9oYW5kbGVyX2RlZjsKIAluZGV2LT5ldGh0b29sX29wcyA9ICZpc2xwY2lfZXRodG9vbF9vcHM7CiAKLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmaXNscGNpX2V0aF90cmFuc21pdDsKIAkvKiBuZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmaXNscGNpX3NldF9tdWx0aWNhc3RfbGlzdDsgKi8KIAluZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwotCW5kZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZwcmlzbTU0X3NldF9tYWNfYWRkcmVzczsKIAkvKiBHZXQgYSBub24temVybyBkdW1teSBNQUMgYWRkcmVzcyBmb3IgbmFtZWlmLiBKZWFuIElJICovCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBkdW1teV9tYWMsIDYpOwogCi0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCiAJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSBJU0xQQ0lfVFhfVElNRU9VVDsKLQluZGV2LT50eF90aW1lb3V0ID0gJmlzbHBjaV9ldGhfdHhfdGltZW91dDsKLSNlbmRpZgogCiAJLyogYWxsb2NhdGUgYSBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUgdG8gdGhlIG5ldHdvcmsgZGV2aWNlICAqLwogCXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKaW5kZXggOGU1NWE1Zi4uYzRkMGYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKQEAgLTE1OCw5ICsxNTgsNiBAQAogCWRtYV9hZGRyX3QgcGNpX21hcF90eF9hZGRyZXNzW0lTTDM4WFhfQ0JfVFhfUVNJWkVdOwogCWRtYV9hZGRyX3QgcGNpX21hcF9yeF9hZGRyZXNzW0lTTDM4WFhfQ0JfUlhfUVNJWkVdOwogCi0JLyogZHJpdmVyIG5ldHdvcmsgaW50ZXJmYWNlIG1lbWJlcnMgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0aXN0aWNzOwotCiAJLyogd2FpdCBmb3IgYSByZXNldCBpbnRlcnJ1cHQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNldF9kb25lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCmluZGV4IGU0M2JhZTkuLmVmM2VmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlICJwcmlzbWNvbXBhdC5oIgogI2luY2x1ZGUgImlzbF8zOHh4LmgiCkBAIC0yMzAsOCArMjMxLDggQEAKIAogCS8qIHNldCB0aGUgdHJhbnNtaXNzaW9uIHRpbWUgKi8KIAluZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwluZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiB0cmlnZ2VyIHRoZSBkZXZpY2UgKi8KIAlpc2xwY2lfdHJpZ2dlcihwcml2KTsKQEAgLTI0Miw3ICsyNDMsNyBAQAogCXJldHVybiAwOwogCiAgICAgICBkcm9wX2ZyZWU6Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9kcm9wcGVkKys7CisJbmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNsb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CkBAIC00MDcsOCArNDA4LDggQEAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CiAJfQogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQlwcml2LT5zdGF0aXN0aWNzLnJ4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0aXN0aWNzLnJ4X2J5dGVzICs9IHNpemU7CisJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAkvKiBkZWxpdmVyIHRoZSBza2IgdG8gdGhlIG5ldHdvcmsgbGF5ZXIgKi8KICNpZmRlZiBJU0xQQ0lfRVRIX0RFQlVHCkBAIC00NzEsOCArNDcyLDggQEAKIAkJd21iKCk7CiAKIAkJLyogaW5jcmVtZW50IHRoZSBkcml2ZXIgcmVhZCBwb2ludGVyICovCi0JCWFkZF9sZTMycCgmY29udHJvbF9ibG9jay0+Ci0JCQkgIGRyaXZlcl9jdXJyX2ZyYWdbSVNMMzhYWF9DQl9SWF9EQVRBX0xRXSwgMSk7CisJCWxlMzJfYWRkX2NwdSgmY29udHJvbF9ibG9jay0+CisJCQkgICAgIGRyaXZlcl9jdXJyX2ZyYWdbSVNMMzhYWF9DQl9SWF9EQVRBX0xRXSwgMSk7CiAJfQogCiAJLyogdHJpZ2dlciB0aGUgZGV2aWNlICovCkBAIC00OTYsMTAgKzQ5Nyw5IEBACiBpc2xwY2lfZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdGlzdGljcyA9ICZwcml2LT5zdGF0aXN0aWNzOwogCiAJLyogaW5jcmVtZW50IHRoZSB0cmFuc21pdCBlcnJvciBjb3VudGVyICovCi0Jc3RhdGlzdGljcy0+dHhfZXJyb3JzKys7CisJbmRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAlpZiAoIXByaXYtPnJlc2V0X3Rhc2tfcGVuZGluZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCmluZGV4IGY5MWE4OGYuLjg3YTE3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCkBAIC04NSwxMiArODUsNiBAQAogI2RlZmluZSBQSU1GT1JfRkxBR19BUFBMSUNfT1JJR0lOICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBQSU1GT1JfRkxBR19MSVRUTEVfRU5ESUFOICAgICAgICAgICAgICAgMHgwMgogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFkZF9sZTMycChfX2xlMzIgKiBsZV9udW1iZXIsIHUzMiBhZGQpCi17Ci0JKmxlX251bWJlciA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1cChsZV9udW1iZXIpICsgYWRkKTsKLX0KLQogdm9pZCBkaXNwbGF5X2J1ZmZlcihjaGFyICosIGludCk7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jCmluZGV4IDU3YTRhYzMuLjExODdlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jCkBAIC02OTgsNyArNjk4LDcgQEAKIG1ndF9jb21taXQoaXNscGNpX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IHJ2YWx1ZTsKLQl1MzIgdTsKKwllbnVtIG9pZF9udW1fdCB1OwogCiAJaWYgKGlzbHBjaV9nZXRfc3RhdGUocHJpdikgPCBQUlZfU1RBVEVfSU5JVCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IDk5ZWM3ZDYuLmZhOTBkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC04LDcgKzgsNyBAQAogICogQ29weXJpZ2h0IChjKSAxOTk4ICBDb3JleSBUaG9tYXMgKGNvcmV5QHdvcmxkLnN0ZC5jb20pCiAgKgogICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvbmx5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb25seSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIEl0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0yNyw3ICsyNyw3IEBACiAgKgogICogRGFuaWVsZSBCZWxsdWNjaSA8YmVsbHVjZGFAdGlzY2FsaS5pdD4gLSAwNy8xMC8yMDAzCiAgKiAtIEF1ZGl0IGNvcHlfdG9fdXNlciBpbiBpb2N0bChTSU9DR0lXRVNTSUQpCi0gKiAKKyAqCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTY1LDggKzY1LDggQEAKIC8qIFdhcm5pbmcgOiB0aGVzZSBzdHVmZiB3aWxsIHNsb3cgZG93biB0aGUgZHJpdmVyLi4uICovCiAjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogRW5hYmxlIHNweWluZyBhZGRyZXNzZXMgKi8KIC8qIERlZmluaXRpb25zIHdlIG5lZWQgZm9yIHNweSAqLwotdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKLXR5cGVkZWYgdV9jaGFyCW1hY19hZGRyW0VUSF9BTEVOXTsJLyogSGFyZHdhcmUgYWRkcmVzcyAqLwordHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcyBpd19zdGF0czsKK3R5cGVkZWYgdV9jaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogSGFyZHdhcmUgYWRkcmVzcyAqLwogCiAjaW5jbHVkZSAicmF5Y3RsLmgiCiAjaW5jbHVkZSAicmF5X2NzLmgiCkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogLyogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgKi8KLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKGFyZ3MpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhhcmdzKTsKICNlbHNlCiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTEwOCwxMiArMTA4LDEyIEBACiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX211bHRpX2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFsbCk7CiBzdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKLXN0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsIFVDSEFSIG1zZ190eXBlLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworCQkJICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7CitzdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAorCQkJICAgICBVQ0hBUiBtc2dfdHlwZSwgdW5zaWduZWQgY2hhciAqZGF0YSk7CiBzdGF0aWMgdm9pZCB1bnRyYW5zbGF0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKTsKLXN0YXRpYyBpd19zdGF0cyAqIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglyYXlfaGFuZGxlcl9kZWY7CitzdGF0aWMgaXdfc3RhdHMgKnJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJheV9oYW5kbGVyX2RlZjsKIAogLyoqKioqIFByb3RvdHlwZXMgZm9yIHJheWxpbmsgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBhc2NfdG9faW50KGNoYXIgYSk7CkBAIC0xMjQsNyArMTI0LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2ZyZWVfdHhfY2NzKHJheV9kZXZfdCAqbG9jYWwpOwogc3RhdGljIHZvaWQgaW5pdF9zdGFydHVwX3BhcmFtcyhyYXlfZGV2X3QgKmxvY2FsKTsKIHN0YXRpYyBpbnQgcGFyc2VfYWRkcihjaGFyICppbl9zdHIsIFVDSEFSICpvdXQpOwotc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBVQ0hBUiB0eXBlKTsKK3N0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgdHlwZSk7CiBzdGF0aWMgaW50IHJheV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpbnRlcnJ1cHRfZWNmKHJheV9kZXZfdCAqbG9jYWwsIGludCBjY3MpOwogc3RhdGljIHZvaWQgcmF5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTMyLDE3ICsxMzIsMTcgQEAKIHN0YXRpYyB2b2lkIHZlcmlmeV9kbF9zdGFydHVwKHVfbG9uZyk7CiAKIC8qIFByb3RvdHlwZXMgZm9yIGludGVycnB0IHRpbWUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdCAoaW50IHJlZywgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0KGludCByZWcsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9pbnRlcnJ1cHQocmF5X2Rldl90ICpsb2NhbCk7Ci1zdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOworc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKIHN0YXRpYyBpbnQgY29weV9mcm9tX3J4X2J1ZmYocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBwa3RfYWRkciwgaW50IGxlbik7CiBzdGF0aWMgdm9pZCByYXlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZnJhZ19jaGFpbihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpOwogc3RhdGljIHZvaWQgcnhfYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7Ci1zdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgdW5zaWduZWQgaW50IHBrdF9hZGRyLCAKLSAgICAgICAgICAgICBpbnQgcnhfbGVuKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOworc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOwogc3RhdGljIHZvaWQgYXNzb2NpYXRlKHJheV9kZXZfdCAqbG9jYWwpOwogCiAvKiBDYXJkIGNvbW1hbmQgZnVuY3Rpb25zICovCkBAIC0yMTksODIgKzIxOSw5NyBAQAogbW9kdWxlX3BhcmFtKHJheV9tZW1fc3BlZWQsIGludCwgMCk7CiAKIHN0YXRpYyBVQ0hBUiBiNV9kZWZhdWx0X3N0YXJ0dXBfcGFybXNbXSA9IHsKLSAgICAwLCAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkaG9jIHN0YXRpb24gKi8KLSAgICdMJywnSScsJ04nLCdVJywnWCcsIDAsICAwLCAgMCwgIC8qIDMyIGNoYXIgRVNTSUQgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAxLCAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgICAgICAgICAvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogRnJhZyB0aHJlc2hvbGQgKi8KLSAgICAweDAwLCAweDgwLCAgICAgICAgICAgICAgICAgICAgIC8qIEhvcCB0aW1lIDEyOCBLdXMqLwotICAgIDB4MDEsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgLyogQmVhY29uIHBlcmlvZCAyNTYgS3VzICovCi0gICAgMHgwMSwgMHgwNywgMHhhMywgICAgICAgICAgICAgICAvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCovCi0gICAgMHgxZCwgMHg4MiwgMHg0ZSwgICAgICAgICAgICAgICAvKiBTSUZTLCBESUZTLCBQSUZTICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBSVFMgdGhyZXNob2xkICovCi0gICAgMHgwNCwgMHhlMiwgMHgzOCwgMHhBNCwgICAgICAgICAvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLwotICAgIDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLwotICAgIDB4MDgsIDB4MDIsIDB4MDgsICAgICAgICAgICAgICAgLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXgqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvbWlzY3VvdXMgbW9kZSAqLwotICAgIDB4MGMsIDB4MGJkLCAgICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHdvcmQgKi8KLSAgICAweDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsb3QgdGltZSAqLwotICAgIDB4ZmYsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCi0gICAgMHgwNSwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KLSAgICAweDAxLCAweDBiLCAweDRmLCAgICAgICAgICAgICAgIC8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCisJMCwgMCwJCQkvKiBBZGhvYyBzdGF0aW9uICovCisJJ0wnLCAnSScsICdOJywgJ1UnLCAnWCcsIDAsIDAsIDAsCS8qIDMyIGNoYXIgRVNTSUQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkxLCAwLAkJCS8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCisJMCwgMCwgMCwgMCwgMCwgMCwJLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KKwkweDdmLCAweGZmLAkJLyogRnJhZyB0aHJlc2hvbGQgKi8KKwkweDAwLCAweDgwLAkJLyogSG9wIHRpbWUgMTI4IEt1cyAqLworCTB4MDEsIDB4MDAsCQkvKiBCZWFjb24gcGVyaW9kIDI1NiBLdXMgKi8KKwkweDAxLCAweDA3LCAweGEzLAkvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCAqLworCTB4MWQsIDB4ODIsIDB4NGUsCS8qIFNJRlMsIERJRlMsIFBJRlMgKi8KKwkweDdmLCAweGZmLAkJLyogUlRTIHRocmVzaG9sZCAqLworCTB4MDQsIDB4ZTIsIDB4MzgsIDB4QTQsCS8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCisJMHgwNSwJCQkvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCisJMHgwOCwgMHgwMiwgMHgwOCwJLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXggKi8KKwkwLAkJCS8qIFByb21pc2N1b3VzIG1vZGUgKi8KKwkweDBjLCAweDBiZCwJCS8qIFVuaXF1ZSB3b3JkICovCisJMHgzMiwJCQkvKiBTbG90IHRpbWUgKi8KKwkweGZmLCAweGZmLAkJLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCisJMHgwNSwgMHhmZiwJCS8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLworCTB4MDEsIDB4MGIsIDB4NGYsCS8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCiAvKiBiNCAtIGI1IGRpZmZlcmVuY2VzIHN0YXJ0IGhlcmUgKi8KLSAgICAweDAwLCAweDNmLCAgICAgICAgICAgICAgICAgICAgIC8qIENXIG1heCAqLwotICAgIDB4MDAsIDB4MGYsICAgICAgICAgICAgICAgICAgICAgLyogQ1cgbWluICovCi0gICAgMHgwNCwgMHgwOCwgICAgICAgICAgICAgICAgICAgICAvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KLSAgICAweDI4LCAweDI4LCAgICAgICAgICAgICAgICAgICAgIC8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCi0gICAgNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgc3luYyB0aHJlc2ggKi8KLSAgICAwLCAyLCAyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlc3QgbW9kZSwgbWluLCBtYXggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsbG93IGJyb2FkY2FzdCBTU0lEIHByb2JlIHJlc3AgKi8KLSAgICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaXZhY3kgbXVzdCBzdGFydCwgY2FuIGpvaW4gKi8KLSAgICAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwICAgICAgICAgIC8qIGJhc2ljIHJhdGUgc2V0ICovCisJMHgwMCwgMHgzZiwJCS8qIENXIG1heCAqLworCTB4MDAsIDB4MGYsCQkvKiBDVyBtaW4gKi8KKwkweDA0LCAweDA4LAkJLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCisJMHgyOCwgMHgyOCwJCS8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCisJNywJCQkvKiBkZXQgc3luYyB0aHJlc2ggKi8KKwkwLCAyLCAyLAkJLyogdGVzdCBtb2RlLCBtaW4sIG1heCAqLworCTAsCQkJLyogYWxsb3cgYnJvYWRjYXN0IFNTSUQgcHJvYmUgcmVzcCAqLworCTAsIDAsCQkJLyogcHJpdmFjeSBtdXN0IHN0YXJ0LCBjYW4gam9pbiAqLworCTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAJLyogYmFzaWMgcmF0ZSBzZXQgKi8KIH07CiAKIHN0YXRpYyBVQ0hBUiBiNF9kZWZhdWx0X3N0YXJ0dXBfcGFybXNbXSA9IHsKLSAgICAwLCAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkaG9jIHN0YXRpb24gKi8KLSAgICdMJywnSScsJ04nLCdVJywnWCcsIDAsICAwLCAgMCwgIC8qIDMyIGNoYXIgRVNTSUQgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAxLCAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgICAgICAgICAvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogRnJhZyB0aHJlc2hvbGQgKi8KLSAgICAweDAyLCAweDAwLCAgICAgICAgICAgICAgICAgICAgIC8qIEhvcCB0aW1lICovCi0gICAgMHgwMCwgMHgwMSwgICAgICAgICAgICAgICAgICAgICAvKiBCZWFjb24gcGVyaW9kICovCi0gICAgMHgwMSwgMHgwNywgMHhhMywgICAgICAgICAgICAgICAvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCovCi0gICAgMHgxZCwgMHg4MiwgMHhjZSwgICAgICAgICAgICAgICAvKiBTSUZTLCBESUZTLCBQSUZTICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBSVFMgdGhyZXNob2xkICovCi0gICAgMHhmYiwgMHgxZSwgMHhjNywgMHg1YywgICAgICAgICAvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLwotICAgIDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLwotICAgIDB4MDQsIDB4MDIsIDB4NCwgICAgICAgICAgICAgICAgLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXgqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvbWlzY3VvdXMgbW9kZSAqLwotICAgIDB4MGMsIDB4MGJkLCAgICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHdvcmQgKi8KLSAgICAweDRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsb3QgdGltZSAoVEJEIHNlZW1zIHdyb25nKSovCi0gICAgMHhmZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KLSAgICAweDA1LCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLwotICAgIDB4MDEsIDB4MGIsIDB4NGUsICAgICAgICAgICAgICAgLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KKwkwLCAwLAkJCS8qIEFkaG9jIHN0YXRpb24gKi8KKwknTCcsICdJJywgJ04nLCAnVScsICdYJywgMCwgMCwgMCwJLyogMzIgY2hhciBFU1NJRCAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTEsIDAsCQkJLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLAkvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLworCTB4N2YsIDB4ZmYsCQkvKiBGcmFnIHRocmVzaG9sZCAqLworCTB4MDIsIDB4MDAsCQkvKiBIb3AgdGltZSAqLworCTB4MDAsIDB4MDEsCQkvKiBCZWFjb24gcGVyaW9kICovCisJMHgwMSwgMHgwNywgMHhhMywJLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQgKi8KKwkweDFkLCAweDgyLCAweGNlLAkvKiBTSUZTLCBESUZTLCBQSUZTICovCisJMHg3ZiwgMHhmZiwJCS8qIFJUUyB0aHJlc2hvbGQgKi8KKwkweGZiLCAweDFlLCAweGM3LCAweDVjLAkvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLworCTB4MDUsCQkJLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLworCTB4MDQsIDB4MDIsIDB4NCwJLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXggKi8KKwkwLAkJCS8qIFByb21pc2N1b3VzIG1vZGUgKi8KKwkweDBjLCAweDBiZCwJCS8qIFVuaXF1ZSB3b3JkICovCisJMHg0ZSwJCQkvKiBTbG90IHRpbWUgKFRCRCBzZWVtcyB3cm9uZykgKi8KKwkweGZmLCAweGZmLAkJLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCisJMHgwNSwgMHhmZiwJCS8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLworCTB4MDEsIDB4MGIsIDB4NGUsCS8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCiAvKiBiNCAtIGI1IGRpZmZlcmVuY2VzIHN0YXJ0IGhlcmUgKi8KLSAgICAweDNmLCAweDBmLCAgICAgICAgICAgICAgICAgICAgIC8qIENXIG1heCwgbWluICovCi0gICAgMHgwNCwgMHgwOCwgICAgICAgICAgICAgICAgICAgICAvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KLSAgICAweDI4LCAweDI4LCAgICAgICAgICAgICAgICAgICAgIC8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCi0gICAgNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgc3luYyB0aHJlc2ggKi8KLSAgICAwLCAyLCAyICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlc3QgbW9kZSwgbWluLCBtYXgqLworCTB4M2YsIDB4MGYsCQkvKiBDVyBtYXgsIG1pbiAqLworCTB4MDQsIDB4MDgsCQkvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KKwkweDI4LCAweDI4LAkJLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KKwk3LAkJCS8qIGRldCBzeW5jIHRocmVzaCAqLworCTAsIDIsIDIJCQkvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4ICovCiB9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBldGgyX2xsY1tdID0gezB4YWEsIDB4YWEsIDMsIDAsIDAsIDB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgZXRoMl9sbGNbXSA9IHsgMHhhYSwgMHhhYSwgMywgMCwgMCwgMCB9OwogCiBzdGF0aWMgY2hhciBob3BfcGF0dGVybl9sZW5ndGhbXSA9IHsgMSwKLQkgICAgIFVTQV9IT1BfTU9ELCAgICAgICAgICAgICBFVVJPUEVfSE9QX01PRCwKLQkgICAgIEpBUEFOX0hPUF9NT0QsICAgICAgICAgICBLT1JFQV9IT1BfTU9ELAotCSAgICAgU1BBSU5fSE9QX01PRCwgICAgICAgICAgIEZSQU5DRV9IT1BfTU9ELAotCSAgICAgSVNSQUVMX0hPUF9NT0QsICAgICAgICAgIEFVU1RSQUxJQV9IT1BfTU9ELAotCSAgICAgSkFQQU5fVEVTVF9IT1BfTU9ECisJVVNBX0hPUF9NT0QsIEVVUk9QRV9IT1BfTU9ELAorCUpBUEFOX0hPUF9NT0QsIEtPUkVBX0hPUF9NT0QsCisJU1BBSU5fSE9QX01PRCwgRlJBTkNFX0hPUF9NT0QsCisJSVNSQUVMX0hPUF9NT0QsIEFVU1RSQUxJQV9IT1BfTU9ELAorCUpBUEFOX1RFU1RfSE9QX01PRAogfTsKIAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICJSYXlsaW5rL1dlYkdlYXIgd2lyZWxlc3MgTEFOIC0gQ29yZXkgPFRob21hcyBjb3JleUB3b3JsZC5zdGQuY29tPiI7CitzdGF0aWMgY2hhciByY3NpZFtdID0KKyAgICAiUmF5bGluay9XZWJHZWFyIHdpcmVsZXNzIExBTiAtIENvcmV5IDxUaG9tYXMgY29yZXlAd29ybGQuc3RkLmNvbT4iOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJheV9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdCAJCT0gcmF5X2Rldl9pbml0LAorCS5uZG9fb3BlbiAJCT0gcmF5X29wZW4sCisJLm5kb19zdG9wIAkJPSByYXlfZGV2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSByYXlfZGV2X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfY29uZmlnCQk9IHJheV9kZXZfY29uZmlnLAorCS5uZG9fZ2V0X3N0YXRzCQk9IHJheV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICByYXlfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKQEAgLTMwNiw3MSArMzIxLDY2IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXJheV9kZXZfdCAqbG9jYWw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotICAgIERFQlVHKDEsICJyYXlfYXR0YWNoKClcbiIpOworCURFQlVHKDEsICJyYXlfYXR0YWNoKClcbiIpOwogCi0gICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KLSAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YocmF5X2Rldl90KSk7Ci0gICAgaWYgKCFkZXYpCi0JICAgIGdvdG8gZmFpbF9hbGxvY19kZXY7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YocmF5X2Rldl90KSk7CisJaWYgKCFkZXYpCisJCWdvdG8gZmFpbF9hbGxvY19kZXY7CiAKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbG9jYWwtPmZpbmRlciA9IHBfZGV2OworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlsb2NhbC0+ZmluZGVyID0gcF9kZXY7CiAKLSAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcuIE5vbmUgdXNlZCBoZXJlICovCi0gICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDA7Ci0gICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKKwkvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcuIE5vbmUgdXNlZCBoZXJlICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IDA7CisJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKIAotICAgIC8qIEludGVycnVwdCBzZXR1cC4gRm9yIFBDTUNJQSwgZHJpdmVyIHRha2VzIHdoYXQncyBnaXZlbiAqLwotICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLSAgICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwotICAgIHBfZGV2LT5pcnEuSGFuZGxlciA9ICZyYXlfaW50ZXJydXB0OworCS8qIEludGVycnVwdCBzZXR1cC4gRm9yIFBDTUNJQSwgZHJpdmVyIHRha2VzIHdoYXQncyBnaXZlbiAqLworCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCXBfZGV2LT5pcnEuSGFuZGxlciA9ICZyYXlfaW50ZXJydXB0OwogCi0gICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwotICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIHBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKwkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCisJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKwlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCi0gICAgcF9kZXYtPnByaXYgPSBkZXY7Ci0gICAgcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKLSAgICAKLSAgICBsb2NhbC0+ZmluZGVyID0gcF9kZXY7Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTlNFUlRFRDsKLSAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7Ci0gICAgbG9jYWwtPm51bV9tdWx0aSA9IDA7Ci0gICAgREVCVUcoMiwicmF5X2F0dGFjaCBwX2RldiA9ICVwLCAgZGV2ID0gJXAsICBsb2NhbCA9ICVwLCBpbnRyID0gJXBcbiIsCi0gICAgICAgICAgcF9kZXYsZGV2LGxvY2FsLCZyYXlfaW50ZXJydXB0KTsKKwlwX2Rldi0+cHJpdiA9IGRldjsKKwlwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwogCi0gICAgLyogUmF5bGluayBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmcmF5X2Rldl9zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZyYXlfZGV2X2NvbmZpZzsKLSAgICBkZXYtPmdldF9zdGF0cyAgPSAmcmF5X2dldF9zdGF0czsKLSAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLSAgICBkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJheV9oYW5kbGVyX2RlZjsKKwlsb2NhbC0+ZmluZGVyID0gcF9kZXY7CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTlNFUlRFRDsKKwlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7CisJbG9jYWwtPm51bV9tdWx0aSA9IDA7CisJREVCVUcoMiwgInJheV9hdHRhY2ggcF9kZXYgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAorCSAgICAgIHBfZGV2LCBkZXYsIGxvY2FsLCAmcmF5X2ludGVycnVwdCk7CisKKwkvKiBSYXlsaW5rIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmcmF5X25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZyYXlfaGFuZGxlcl9kZWY7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgbG9jYWwtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmbG9jYWwtPnNweV9kYXRhOwotICAgIGRldi0+d2lyZWxlc3NfZGF0YSA9ICZsb2NhbC0+d2lyZWxlc3NfZGF0YTsKLSNlbmRpZgkvKiBXSVJFTEVTU19TUFkgKi8KKwlsb2NhbC0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZsb2NhbC0+c3B5X2RhdGE7CisJZGV2LT53aXJlbGVzc19kYXRhID0gJmxvY2FsLT53aXJlbGVzc19kYXRhOworI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogCi0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwogCi0gICAgREVCVUcoMiwicmF5X2NzIHJheV9hdHRhY2ggY2FsbGluZyBldGhlcl9zZXR1cC4pXG4iKTsKLSAgICBkZXYtPmluaXQgPSAmcmF5X2Rldl9pbml0OwotICAgIGRldi0+b3BlbiA9ICZyYXlfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmcmF5X2Rldl9jbG9zZTsKLSAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJREVCVUcoMiwgInJheV9jcyByYXlfYXR0YWNoIGNhbGxpbmcgZXRoZXJfc2V0dXAuKVxuIik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0gICAgaW5pdF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlpbml0X3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCi0gICAgdGhpc19kZXZpY2UgPSBwX2RldjsKLSAgICByZXR1cm4gcmF5X2NvbmZpZyhwX2Rldik7CisJdGhpc19kZXZpY2UgPSBwX2RldjsKKwlyZXR1cm4gcmF5X2NvbmZpZyhwX2Rldik7CiAKIGZhaWxfYWxsb2NfZGV2OgotICAgIHJldHVybiAtRU5PTUVNOworCXJldHVybiAtRU5PTUVNOwogfSAvKiByYXlfYXR0YWNoICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAogICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4gIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YQpAQCAtMzc5LDI1ICszODksMjcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJheV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLSAgICByYXlfZGV2X3QgKmxvY2FsOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJcmF5X2Rldl90ICpsb2NhbDsKIAotICAgIERFQlVHKDEsICJyYXlfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlERUJVRygxLCAicmF5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICB0aGlzX2RldmljZSA9IE5VTEw7Ci0gICAgZGV2ID0gbGluay0+cHJpdjsKKwl0aGlzX2RldmljZSA9IE5VTEw7CisJZGV2ID0gbGluay0+cHJpdjsKIAotICAgIHJheV9yZWxlYXNlKGxpbmspOworCXJheV9yZWxlYXNlKGxpbmspOwogCi0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCi0gICAgaWYgKGxpbmstPnByaXYpIHsKLQlpZiAobGluay0+ZGV2X25vZGUpIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gICAgICAgIGZyZWVfbmV0ZGV2KGRldik7Ci0gICAgfQotICAgIERFQlVHKDIsInJheV9jcyByYXlfZGV0YWNoIGVuZGluZ1xuIik7CisJaWYgKGxpbmstPnByaXYpIHsKKwkJaWYgKGxpbmstPmRldl9ub2RlKQorCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwl9CisJREVCVUcoMiwgInJheV9jcyByYXlfZGV0YWNoIGVuZGluZ1xuIik7CiB9IC8qIHJheV9kZXRhY2ggKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIHJheV9jb25maWcoKSBpcyBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAogICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQpAQCAtNDA4LDkyICs0MjAsMTAxIEBACiAjZGVmaW5lIE1BWF9UVVBMRV9TSVpFIDEyOAogc3RhdGljIGludCByYXlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGludCBsYXN0X2ZuID0gMCwgbGFzdF9yZXQgPSAwOwotICAgIGludCBpOwotICAgIHdpbl9yZXFfdCByZXE7Ci0gICAgbWVtcmVxX3QgbWVtOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBsYXN0X2ZuID0gMCwgbGFzdF9yZXQgPSAwOworCWludCBpOworCXdpbl9yZXFfdCByZXE7CisJbWVtcmVxX3QgbWVtOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0gICAgREVCVUcoMSwgInJheV9jb25maWcoMHglcClcbiIsIGxpbmspOworCURFQlVHKDEsICJyYXlfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIC8qIERldGVybWluZSBjYXJkIHR5cGUgYW5kIGZpcm13YXJlIHZlcnNpb24gKi8KLSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgRGV0ZWN0ZWQ6ICVzJXMlcyVzXG4iLAotCSAgIGxpbmstPnByb2RfaWRbMF0gPyBsaW5rLT5wcm9kX2lkWzBdIDogIiAiLAotCSAgIGxpbmstPnByb2RfaWRbMV0gPyBsaW5rLT5wcm9kX2lkWzFdIDogIiAiLAotCSAgIGxpbmstPnByb2RfaWRbMl0gPyBsaW5rLT5wcm9kX2lkWzJdIDogIiAiLAotCSAgIGxpbmstPnByb2RfaWRbM10gPyBsaW5rLT5wcm9kX2lkWzNdIDogIiAiKTsKKwkvKiBEZXRlcm1pbmUgY2FyZCB0eXBlIGFuZCBmaXJtd2FyZSB2ZXJzaW9uICovCisJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIERldGVjdGVkOiAlcyVzJXMlc1xuIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFswXSA/IGxpbmstPnByb2RfaWRbMF0gOiAiICIsCisJICAgICAgIGxpbmstPnByb2RfaWRbMV0gPyBsaW5rLT5wcm9kX2lkWzFdIDogIiAiLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzJdID8gbGluay0+cHJvZF9pZFsyXSA6ICIgIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFszXSA/IGxpbmstPnByb2RfaWRbM10gOiAiICIpOwogCi0gICAgLyogTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKLSAgICAgICBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCi0gICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwotICAgIAotICAgIC8qIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCi0gICAgICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCi0gICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCS8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CisJICAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgorCSAqLworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CisKKwkvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAorCSAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgorCSAqLworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAorCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAvKioqIFNldCB1cCAzMmsgd2luZG93IGZvciBzaGFyZWQgbWVtb3J5ICh0cmFuc21pdCBhbmQgY29udHJvbCkgKioqKioqKioqKioqLwotICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7Ci0gICAgcmVxLkJhc2UgPSAwOwotICAgIHJlcS5TaXplID0gMHg4MDAwOwotICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7IG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpOwotICAgIGxvY2FsLT5zcmFtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CisJcmVxLkF0dHJpYnV0ZXMgPQorCSAgICBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKKwlyZXEuQmFzZSA9IDA7CisJcmVxLlNpemUgPSAweDgwMDA7CisJcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKKwlDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKKwltZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsKKwltZW0uUGFnZSA9IDA7CisJQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKKwlsb2NhbC0+c3JhbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAogLyoqKiBTZXQgdXAgMTZrIHdpbmRvdyBmb3Igc2hhcmVkIG1lbW9yeSAocmVjZWl2ZSBidWZmZXIpICoqKioqKioqKioqKioqKi8KLSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOwotICAgIHJlcS5CYXNlID0gMDsKLSAgICByZXEuU2l6ZSA9IDB4NDAwMDsKLSAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5ybWVtX2hhbmRsZSkpOwotICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHg4MDAwOyBtZW0uUGFnZSA9IDA7Ci0gICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+cm1lbV9oYW5kbGUsICZtZW0pKTsKLSAgICBsb2NhbC0+cm1lbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOworCXJlcS5BdHRyaWJ1dGVzID0KKwkgICAgV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CisJcmVxLkJhc2UgPSAwOworCXJlcS5TaXplID0gMHg0MDAwOworCXJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7CisJQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywKKwkJIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5ybWVtX2hhbmRsZSkpOworCW1lbS5DYXJkT2Zmc2V0ID0gMHg4MDAwOworCW1lbS5QYWdlID0gMDsKKwlDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5ybWVtX2hhbmRsZSwgJm1lbSkpOworCWxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCiAvKioqIFNldCB1cCB3aW5kb3cgZm9yIGF0dHJpYnV0ZSBtZW1vcnkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0FNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKLSAgICByZXEuQmFzZSA9IDA7Ci0gICAgcmVxLlNpemUgPSAweDEwMDA7Ci0gICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+YW1lbV9oYW5kbGUpKTsKLSAgICBtZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPmFtZW1faGFuZGxlLCAmbWVtKSk7Ci0gICAgbG9jYWwtPmFtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKKwlyZXEuQXR0cmlidXRlcyA9CisJICAgIFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQU0gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOworCXJlcS5CYXNlID0gMDsKKwlyZXEuU2l6ZSA9IDB4MTAwMDsKKwlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOworCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csCisJCSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+YW1lbV9oYW5kbGUpKTsKKwltZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsKKwltZW0uUGFnZSA9IDA7CisJQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+YW1lbV9oYW5kbGUsICZtZW0pKTsKKwlsb2NhbC0+YW1lbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAotICAgIERFQlVHKDMsInJheV9jb25maWcgc3JhbT0lcFxuIixsb2NhbC0+c3JhbSk7Ci0gICAgREVCVUcoMywicmF5X2NvbmZpZyBybWVtPSVwXG4iLGxvY2FsLT5ybWVtKTsKLSAgICBERUJVRygzLCJyYXlfY29uZmlnIGFtZW09JXBcbiIsbG9jYWwtPmFtZW0pOwotICAgIGlmIChyYXlfaW5pdChkZXYpIDwgMCkgewotICAgICAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQorCURFQlVHKDMsICJyYXlfY29uZmlnIHNyYW09JXBcbiIsIGxvY2FsLT5zcmFtKTsKKwlERUJVRygzLCAicmF5X2NvbmZpZyBybWVtPSVwXG4iLCBsb2NhbC0+cm1lbSk7CisJREVCVUcoMywgInJheV9jb25maWcgYW1lbT0lcFxuIiwgbG9jYWwtPmFtZW0pOworCWlmIChyYXlfaW5pdChkZXYpIDwgMCkgeworCQlyYXlfcmVsZWFzZShsaW5rKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7Ci0gICAgaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotICAgIGlmIChpICE9IDApIHsKLSAgICAgICAgcHJpbnRrKCJyYXlfY29uZmlnIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0gICAgICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgICAgICByZXR1cm4gaTsKLSAgICB9CisJU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisJaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChpICE9IDApIHsKKwkJcHJpbnRrKCJyYXlfY29uZmlnIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CisJCXJheV9yZWxlYXNlKGxpbmspOworCQlyZXR1cm4gaTsKKwl9CiAKLSAgICBzdHJjcHkobG9jYWwtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0gICAgbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7CisJc3RyY3B5KGxvY2FsLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOworCWxpbmstPmRldl9ub2RlID0gJmxvY2FsLT5ub2RlOwogCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJheUxpbmssIGlycSAlZCwgaHdfYWRkciAlcE1cbiIsCi0gICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJheUxpbmssIGlycSAlZCwgaHdfYWRkciAlcE1cbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCi0gICAgcmF5X3JlbGVhc2UobGluayk7Ci0gICAgcmV0dXJuIC1FTk9ERVY7CisJcmF5X3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHJheV9jb25maWcgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2NzIF9faW9tZW0gKmNjc19iYXNlKHJheV9kZXZfdCAqZGV2KQpAQCAtNTE2LDI2NyArNTM3LDI3OCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGludCBpOwotICAgIFVDSEFSICpwOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgREVCVUcoMSwgInJheV9pbml0KDB4JXApXG4iLCBkZXYpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCWludCBpOworCVVDSEFSICpwOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJREVCVUcoMSwgInJheV9pbml0KDB4JXApXG4iLCBkZXYpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMCwgInJheV9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIGxvY2FsLT5uZXRfdHlwZSA9IG5ldF90eXBlOwotICAgIGxvY2FsLT5zdGFfdHlwZSA9IFRZUEVfU1RBOworCWxvY2FsLT5uZXRfdHlwZSA9IG5ldF90eXBlOworCWxvY2FsLT5zdGFfdHlwZSA9IFRZUEVfU1RBOwogCi0gICAgLyogQ29weSB0aGUgc3RhcnR1cCByZXN1bHRzIHRvIGxvY2FsIG1lbW9yeSAqLwotICAgIG1lbWNweV9mcm9taW8oJmxvY2FsLT5zdGFydHVwX3JlcywgbG9jYWwtPnNyYW0gKyBFQ0ZfVE9fSE9TVF9CQVNFLFwKLSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzdGFydHVwX3Jlc182KSk7CisJLyogQ29weSB0aGUgc3RhcnR1cCByZXN1bHRzIHRvIGxvY2FsIG1lbW9yeSAqLworCW1lbWNweV9mcm9taW8oJmxvY2FsLT5zdGFydHVwX3JlcywgbG9jYWwtPnNyYW0gKyBFQ0ZfVE9fSE9TVF9CQVNFLAorCQkgICAgICBzaXplb2Yoc3RydWN0IHN0YXJ0dXBfcmVzXzYpKTsKIAotICAgIC8qIENoZWNrIFBvd2VyIHVwIHRlc3Qgc3RhdHVzIGFuZCBnZXQgbWFjIGFkZHJlc3MgZnJvbSBjYXJkICovCi0gICAgaWYgKGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQgIT0gMHg4MCkgewotICAgIHByaW50ayhLRVJOX0lORk8gInJheV9pbml0IEVSUk9SIGNhcmQgc3RhdHVzID0gJTJ4XG4iLAotICAgICAgICAgICBsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTklUX0VSUk9SOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCS8qIENoZWNrIFBvd2VyIHVwIHRlc3Qgc3RhdHVzIGFuZCBnZXQgbWFjIGFkZHJlc3MgZnJvbSBjYXJkICovCisJaWYgKGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQgIT0gMHg4MCkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXlfaW5pdCBFUlJPUiBjYXJkIHN0YXR1cyA9ICUyeFxuIiwKKwkJICAgICAgIGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOSVRfRVJST1I7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICBsb2NhbC0+ZndfdmVyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMF07Ci0gICAgbG9jYWwtPmZ3X2JsZCA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzFdOwotICAgIGxvY2FsLT5md192YXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsyXTsKLSAgICBERUJVRygxLCJyYXlfaW5pdCBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkIFxuIixsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkKTsKKwlsb2NhbC0+ZndfdmVyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMF07CisJbG9jYWwtPmZ3X2JsZCA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzFdOworCWxvY2FsLT5md192YXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsyXTsKKwlERUJVRygxLCAicmF5X2luaXQgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBcbiIsIGxvY2FsLT5md192ZXIsCisJICAgICAgbG9jYWwtPmZ3X2JsZCk7CiAKLSAgICBsb2NhbC0+dGliX2xlbmd0aCA9IDB4MjA7Ci0gICAgaWYgKChsb2NhbC0+ZndfdmVyID09IDUpICYmIChsb2NhbC0+ZndfYmxkID49IDMwKSkKLSAgICAgICAgbG9jYWwtPnRpYl9sZW5ndGggPSBsb2NhbC0+c3RhcnR1cF9yZXMudGliX2xlbmd0aDsKLSAgICBERUJVRygyLCJyYXlfaW5pdCB0aWJfbGVuZ3RoID0gMHglMDJ4XG4iLCBsb2NhbC0+dGliX2xlbmd0aCk7Ci0gICAgLyogSW5pdGlhbGl6ZSBDQ1MncyB0byBidWZmZXIgZnJlZSBzdGF0ZSAqLwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgZm9yIChpPTA7ICBpPE5VTUJFUl9PRl9DQ1M7ICBpKyspIHsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9Ci0gICAgaW5pdF9zdGFydHVwX3BhcmFtcyhsb2NhbCk7CisJbG9jYWwtPnRpYl9sZW5ndGggPSAweDIwOworCWlmICgobG9jYWwtPmZ3X3ZlciA9PSA1KSAmJiAobG9jYWwtPmZ3X2JsZCA+PSAzMCkpCisJCWxvY2FsLT50aWJfbGVuZ3RoID0gbG9jYWwtPnN0YXJ0dXBfcmVzLnRpYl9sZW5ndGg7CisJREVCVUcoMiwgInJheV9pbml0IHRpYl9sZW5ndGggPSAweCUwMnhcbiIsIGxvY2FsLT50aWJfbGVuZ3RoKTsKKwkvKiBJbml0aWFsaXplIENDUydzIHRvIGJ1ZmZlciBmcmVlIHN0YXRlICovCisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJfQorCWluaXRfc3RhcnR1cF9wYXJhbXMobG9jYWwpOwogCi0gICAgLyogY29weSBtYWMgYWRkcmVzcyB0byBzdGFydHVwIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAocGFyc2VfYWRkcihwaHlfYWRkciwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIpKQotICAgIHsKLSAgICAgICAgcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtZW1jcHkoJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLAotICAgICAgICAgICAgICAgJmxvY2FsLT5zdGFydHVwX3Jlcy5zdGF0aW9uX2FkZHIsIEFERFJMRU4pOwotICAgICAgICBwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7Ci0gICAgfQorCS8qIGNvcHkgbWFjIGFkZHJlc3MgdG8gc3RhcnR1cCBwYXJhbWV0ZXJzICovCisJaWYgKHBhcnNlX2FkZHIocGh5X2FkZHIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyKSkgeworCQlwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwKKwkJICAgICAgICZsb2NhbC0+c3RhcnR1cF9yZXMuc3RhdGlvbl9hZGRyLCBBRERSTEVOKTsKKwkJcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOworCX0KIAotICAgIGNsZWFyX2ludGVycnVwdChsb2NhbCk7IC8qIENsZWFyIGFueSBpbnRlcnJ1cHQgZnJvbSB0aGUgY2FyZCAqLwotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVdBSVRJTkdfUEFSQU07Ci0gICAgREVCVUcoMiwicmF5X2luaXQgZW5kaW5nXG4iKTsKLSAgICByZXR1cm4gMDsKKwljbGVhcl9pbnRlcnJ1cHQobG9jYWwpOwkvKiBDbGVhciBhbnkgaW50ZXJydXB0IGZyb20gdGhlIGNhcmQgKi8KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FXQUlUSU5HX1BBUkFNOworCURFQlVHKDIsICJyYXlfaW5pdCBlbmRpbmdcbiIpOworCXJldHVybiAwOwogfSAvKiByYXlfaW5pdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgdG8gdGhlIGNhcmQgYW5kIGNvbW1hbmQgaXQgdG8gcmVhZCB0aGVtICAgICAgICovCiBzdGF0aWMgaW50IGRsX3N0YXJ0dXBfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGNjc2luZGV4OworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBERUJVRygxLCJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgCi0gICAgLyogQ29weSBwYXJhbWV0ZXJzIHRvIGhvc3QgdG8gRUNGIGFyZWEgKi8KLSAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAKLSAgICAgICAgbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI0LAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOwotICAgIGVsc2UKLSAgICAgICAgbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI1LAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOworCURFQlVHKDEsICJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgCi0gICAgLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHJldHVybiAtMTsKLSAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzID0gY2NzaW5kZXg7Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVMsICZwY2NzLT5jbWQpOwotICAgIERFQlVHKDIsImRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0IGNjc2luZGV4ID0gJWRcbiIsIGxvY2FsLT5kbF9wYXJhbV9jY3MpOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKLSAgICAgICAgICAgIkVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm4gLTI7Ci0gICAgfQotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU07Ci0gICAgLyogU3RhcnQga2VybmVsIHRpbWVyIHRvIHdhaXQgZm9yIGRsIHN0YXJ0dXAgdG8gY29tcGxldGUuICovCi0gICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFovMjsKLSAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZ2ZXJpZnlfZGxfc3RhcnR1cDsKLSAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgREVCVUcoMiwicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0ZWQgdGltZXIgZm9yIHZlcmlmeV9kbF9zdGFydHVwXG4iKTsKLSAgICByZXR1cm4gMDsKKwkvKiBDb3B5IHBhcmFtZXRlcnMgdG8gaG9zdCB0byBFQ0YgYXJlYSAqLworCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCisJCW1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNCwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7CisJZWxzZQorCQltZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjUsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOworCisJLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCisJCXJldHVybiAtMTsKKwlsb2NhbC0+ZGxfcGFyYW1fY2NzID0gY2NzaW5kZXg7CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVMsICZwY2NzLT5jbWQpOworCURFQlVHKDIsICJkbF9zdGFydHVwX3BhcmFtcyBzdGFydCBjY3NpbmRleCA9ICVkXG4iLAorCSAgICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKKwkJICAgICAgICJFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuIC0yOworCX0KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNOworCS8qIFN0YXJ0IGtlcm5lbCB0aW1lciB0byB3YWl0IGZvciBkbCBzdGFydHVwIHRvIGNvbXBsZXRlLiAqLworCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaIC8gMjsKKwlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZ2ZXJpZnlfZGxfc3RhcnR1cDsKKwlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJREVCVUcoMiwKKwkgICAgICAicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0ZWQgdGltZXIgZm9yIHZlcmlmeV9kbF9zdGFydHVwXG4iKTsKKwlyZXR1cm4gMDsKIH0gLyogZGxfc3RhcnR1cF9wYXJhbXMgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgaW5pdF9zdGFydHVwX3BhcmFtcyhyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIGludCBpOyAKKwlpbnQgaTsKIAotICAgIGlmIChjb3VudHJ5ID4gSkFQQU5fVEVTVCkgY291bnRyeSA9IFVTQTsKLSAgICBlbHNlCi0gICAgICAgIGlmIChjb3VudHJ5IDwgVVNBKSBjb3VudHJ5ID0gVVNBOwotICAgIC8qIHN0cnVjdHVyZSBmb3IgaG9wIHRpbWUgYW5kIGJlYWNvbiBwZXJpb2QgaXMgZGVmaW5lZCBoZXJlIHVzaW5nIAotICAgICAqIE5ldyA4MDIuMTFENi4xIGZvcm1hdC4gIENhcmQgZmlybXdhcmUgaXMgc3RpbGwgdXNpbmcgb2xkIGZvcm1hdAotICAgICAqIHVudGlsIHZlcnNpb24gNi4KLSAgICAgKiAgICBCZWZvcmUgICAgICAgICAgICAgICAgICAgIEFmdGVyCi0gICAgICogICAgYV9ob3BfdGltZSBtcyBieXRlICAgICAgICBhX2hvcF90aW1lIG1zIGJ5dGUKLSAgICAgKiAgICBhX2hvcF90aW1lIDJzIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbHMgYnl0ZQotICAgICAqICAgIGFfaG9wX3RpbWUgbHMgYnl0ZSAgICAgICAgYV9iZWFjb25fcGVyaW9kIG1zIGJ5dGUKLSAgICAgKiAgICBhX2JlYWNvbl9wZXJpb2QgICAgICAgICAgIGFfYmVhY29uX3BlcmlvZCBscyBieXRlCi0gICAgICoKLSAgICAgKiAgICBhX2hvcF90aW1lID0gdVMgICAgICAgICAgIGFfaG9wX3RpbWUgPSBLdVMKLSAgICAgKiAgICBhX2JlYWNvbl9wZXJpb2QgPSBob3BzICAgIGFfYmVhY29uX3BlcmlvZCA9IEt1UwotICAgICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjRtcyA9IDAxMDAwMCAqLwotICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpICB7Ci0gICAgICAgIG1lbWNweSgoVUNIQVIgKikmbG9jYWwtPnNwYXJtLmI0LCBiNF9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsIAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOwotICAgICAgICAvKiBUcmFuc2xhdGUgc2FuZSBrdXMgaW5wdXQgdmFsdWVzIHRvIG9sZCBidWlsZCA0LzUgZm9ybWF0ICovCi0gICAgICAgIC8qIGkgPSBob3AgdGltZSBpbiB1UyB0cnVuY2F0ZWQgdG8gMyBieXRlcyAqLwotICAgICAgICBpID0gKGhvcF9kd2VsbCAqIDEwMjQpICYgMHhmZmZmZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzBdID0gKGkgPj4gMTYpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMV0gPSAoaSA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMF0gPSAwOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzFdID0KLSAgICAgICAgICAgICgoYmVhY29uX3BlcmlvZC9ob3BfZHdlbGwpIC0gMSkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9IAotICAgICAgICAgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV0gLSAxOwotICAgICAgICBpZiAoYmMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2Fja190aW1lb3V0ID0gMHg1MDsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX3NpZnMgPSAweDNmOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgeyAgICAvKiBWZXJzaW9uIDUgdXNlcyByZWFsIGt1cyB2YWx1ZXMgKi8KLSAgICAgICAgbWVtY3B5KChVQ0hBUiAqKSZsb2NhbC0+c3Bhcm0uYjUsIGI1X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywgCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CisJaWYgKGNvdW50cnkgPiBKQVBBTl9URVNUKQorCQljb3VudHJ5ID0gVVNBOworCWVsc2UgaWYgKGNvdW50cnkgPCBVU0EpCisJCWNvdW50cnkgPSBVU0E7CisJLyogc3RydWN0dXJlIGZvciBob3AgdGltZSBhbmQgYmVhY29uIHBlcmlvZCBpcyBkZWZpbmVkIGhlcmUgdXNpbmcKKwkgKiBOZXcgODAyLjExRDYuMSBmb3JtYXQuICBDYXJkIGZpcm13YXJlIGlzIHN0aWxsIHVzaW5nIG9sZCBmb3JtYXQKKwkgKiB1bnRpbCB2ZXJzaW9uIDYuCisJICogICAgQmVmb3JlICAgICAgICAgICAgICAgICAgICBBZnRlcgorCSAqICAgIGFfaG9wX3RpbWUgbXMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBtcyBieXRlCisJICogICAgYV9ob3BfdGltZSAycyBieXRlICAgICAgICBhX2hvcF90aW1lIGxzIGJ5dGUKKwkgKiAgICBhX2hvcF90aW1lIGxzIGJ5dGUgICAgICAgIGFfYmVhY29uX3BlcmlvZCBtcyBieXRlCisJICogICAgYV9iZWFjb25fcGVyaW9kICAgICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbHMgYnl0ZQorCSAqCisJICogICAgYV9ob3BfdGltZSA9IHVTICAgICAgICAgICBhX2hvcF90aW1lID0gS3VTCisJICogICAgYV9iZWFjb25fcGVyaW9kID0gaG9wcyAgICBhX2JlYWNvbl9wZXJpb2QgPSBLdVMKKwkgKi8vKiA2NG1zID0gMDEwMDAwICovCisJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgeworCQltZW1jcHkoKFVDSEFSICopICZsb2NhbC0+c3Bhcm0uYjQsIGI0X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKKwkJLyogVHJhbnNsYXRlIHNhbmUga3VzIGlucHV0IHZhbHVlcyB0byBvbGQgYnVpbGQgNC81IGZvcm1hdCAqLworCQkvKiBpID0gaG9wIHRpbWUgaW4gdVMgdHJ1bmNhdGVkIHRvIDMgYnl0ZXMgKi8KKwkJaSA9IChob3BfZHdlbGwgKiAxMDI0KSAmIDB4ZmZmZmZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVswXSA9IChpID4+IDE2KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzFdID0gKGkgPj4gOCkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzBdID0gMDsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFsxXSA9CisJCSAgICAoKGJlYWNvbl9wZXJpb2QgLyBob3BfZHdlbGwpIC0gMSkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7CisJCWxvY2FsLT5zcGFybS5iNC5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9CisJCSAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XSAtIDE7CisJCWlmIChiYykgeworCQkJbG9jYWwtPnNwYXJtLmI0LmFfYWNrX3RpbWVvdXQgPSAweDUwOworCQkJbG9jYWwtPnNwYXJtLmI0LmFfc2lmcyA9IDB4M2Y7CisJCX0KKwl9IGVsc2UgeyAvKiBWZXJzaW9uIDUgdXNlcyByZWFsIGt1cyB2YWx1ZXMgKi8KKwkJbWVtY3B5KChVQ0hBUiAqKSAmbG9jYWwtPnNwYXJtLmI1LCBiNV9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CiAKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMF0gPSAoaG9wX2R3ZWxsID4+IDgpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMV0gPSBob3BfZHdlbGwgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzBdID0gKGJlYWNvbl9wZXJpb2QgPj4gOCkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzFdID0gYmVhY29uX3BlcmlvZCAmIDB4ZmY7Ci0gICAgICAgIGlmIChwc20pCi0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9wb3dlcl9tZ3Rfc3RhdGUgPSAxOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9IAotICAgICAgICAgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07Ci0gICAgfQotICAgIAotICAgIGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9IG5ldF90eXBlICYgMHgwMTsKLSAgICBsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzID0gVFlQRV9TVEE7CisJCWxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzBdID0gKGhvcF9kd2VsbCA+PiA4KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzFdID0gaG9wX2R3ZWxsICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFswXSA9CisJCSAgICAoYmVhY29uX3BlcmlvZCA+PiA4KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMV0gPSBiZWFjb25fcGVyaW9kICYgMHhmZjsKKwkJaWYgKHBzbSkKKwkJCWxvY2FsLT5zcGFybS5iNS5hX3Bvd2VyX21ndF9zdGF0ZSA9IDE7CisJCWxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0KKwkJICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOworCX0KIAotICAgIGlmIChlc3NpZCAhPSBOVUxMKQotICAgICAgICBzdHJuY3B5KGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkLCBlc3NpZCwgRVNTSURfU0laRSk7Ci19IC8qIGluaXRfc3RhcnR1cF9wYXJhbXMgKi8gCisJbG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID0gbmV0X3R5cGUgJiAweDAxOworCWxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMgPSBUWVBFX1NUQTsKKworCWlmIChlc3NpZCAhPSBOVUxMKQorCQlzdHJuY3B5KGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkLCBlc3NpZCwgRVNTSURfU0laRSk7Cit9IC8qIGluaXRfc3RhcnR1cF9wYXJhbXMgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgdmVyaWZ5X2RsX3N0YXJ0dXAodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGxvY2FsLT5kbF9wYXJhbV9jY3M7Ci0gICAgVUNIQVIgc3RhdHVzOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGxvY2FsLT5kbF9wYXJhbV9jY3M7CisJVUNIQVIgc3RhdHVzOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIHZlcmlmeV9kbF9zdGFydHVwIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgdmVyaWZ5X2RsX3N0YXJ0dXAgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQogI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIGlmIChwY19kZWJ1ZyA+IDIpIHsKLSAgICBpbnQgaTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAidmVyaWZ5X2RsX3N0YXJ0dXAgcGFyYW1ldGVycyBzZW50IHZpYSBjY3MgJWQ6XG4iLAotICAgICAgICAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKLSAgICAgICAgZm9yIChpPTA7IGk8c2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcyk7IGkrKykgewotICAgICAgICAgICAgcHJpbnRrKCIgJTJ4IiwgKHVuc2lnbmVkIGludCkgcmVhZGIobG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFICsgaSkpOwotICAgICAgICB9Ci0gICAgcHJpbnRrKCJcbiIpOwotICAgIH0KKwlpZiAocGNfZGVidWcgPiAyKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgInZlcmlmeV9kbF9zdGFydHVwIHBhcmFtZXRlcnMgc2VudCB2aWEgY2NzICVkOlxuIiwKKwkJICAgICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcyk7IGkrKykgeworCQkJcHJpbnRrKCIgJTJ4IiwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXJlYWRiKGxvY2FsLT5zcmFtICsKKwkJCQkJCSAgIEhPU1RfVE9fRUNGX0JBU0UgKyBpKSk7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KICNlbmRpZgogCi0gICAgc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgIGlmIChzdGF0dXMhPSBDQ1NfQlVGRkVSX0ZSRUUpCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJEb3dubG9hZCBzdGFydHVwIHBhcmFtcyBmYWlsZWQuICBTdGF0dXMgPSAlZFxuIiwKLSAgICAgICAgICAgc3RhdHVzKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKQotICAgICAgICBzdGFydF9uZXQoKHVfbG9uZylsb2NhbCk7Ci0gICAgZWxzZQotICAgICAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKKwlzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJaWYgKHN0YXR1cyAhPSBDQ1NfQlVGRkVSX0ZSRUUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkRvd25sb2FkIHN0YXJ0dXAgcGFyYW1zIGZhaWxlZC4gIFN0YXR1cyA9ICVkXG4iLAorCQkgICAgICAgc3RhdHVzKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKKwkJcmV0dXJuOworCX0KKwlpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKQorCQlzdGFydF9uZXQoKHVfbG9uZykgbG9jYWwpOworCWVsc2UKKwkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOwogCi0gICAgcmV0dXJuOworCXJldHVybjsKIH0gLyogZW5kIHZlcmlmeV9kbF9zdGFydHVwICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvbW1hbmQgY2FyZCB0byBzdGFydCBhIG5ldHdvcmsgKi8KIHN0YXRpYyB2b2lkIHN0YXJ0X25ldCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBjY3NpbmRleDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3Mgc3RhcnRfbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgcmV0dXJuOwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX1NUQVJUX05FVFdPUkssICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsudXBkYXRlX3BhcmFtKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheSBzdGFydCBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROwotICAgIHJldHVybjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgY2NzaW5kZXg7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBzdGFydF9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQorCS8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQorCQlyZXR1cm47CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfU1RBUlRfTkVUV09SSywgJnBjY3MtPmNtZCk7CisJd3JpdGViKDAsICZwY2NzLT52YXIuc3RhcnRfbmV0d29yay51cGRhdGVfcGFyYW0pOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwgInJheSBzdGFydCBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROworCXJldHVybjsKIH0gLyogZW5kIHN0YXJ0X25ldCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb21tYW5kIGNhcmQgdG8gam9pbiBhIG5ldHdvcmsgKi8KIHN0YXRpYyB2b2lkIGpvaW5fbmV0KHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOwogCi0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBjY3NpbmRleDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3Mgam9pbl9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSByZXR1cm47Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfSk9JTl9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsudXBkYXRlX3BhcmFtKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsubmV0X2luaXRpYXRlZCk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXkgam9pbiBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROwotICAgIHJldHVybjsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGNjc2luZGV4OworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBqb2luX25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CisJLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCisJCXJldHVybjsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19KT0lOX05FVFdPUkssICZwY2NzLT5jbWQpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay51cGRhdGVfcGFyYW0pOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay5uZXRfaW5pdGlhdGVkKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsICJyYXkgam9pbiBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROworCXJldHVybjsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIHJheV9yZWxlYXNlKCkgd2lsbCB1bnJlZ2lzdGVyIHRoZSBuZXQKICAgICBkZXZpY2UsIGFuZCByZWxlYXNlIHRoZSBQQ01DSUEgY29uZmlndXJhdGlvbi4gIElmIHRoZSBkZXZpY2UgaXMKQEAgLTc4NCwyNSArODE2LDI3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsgCi0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgREVCVUcoMSwgInJheV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKIAotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlERUJVRygxLCAicmF5X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgaW91bm1hcChsb2NhbC0+c3JhbSk7Ci0gICAgaW91bm1hcChsb2NhbC0+cm1lbSk7Ci0gICAgaW91bm1hcChsb2NhbC0+YW1lbSk7Ci0gICAgLyogRG8gYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPmFtZW1faGFuZGxlKTsKLSAgICBpZiAoIGkgIT0gMCApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLGkpOwotICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKLSAgICBpZiAoIGkgIT0gMCApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLGkpOwotICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICBERUJVRygyLCJyYXlfcmVsZWFzZSBlbmRpbmdcbiIpOworCWlvdW5tYXAobG9jYWwtPnNyYW0pOworCWlvdW5tYXAobG9jYWwtPnJtZW0pOworCWlvdW5tYXAobG9jYWwtPmFtZW0pOworCS8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KKwlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7CisJaWYgKGkgIT0gMCkKKwkJREVCVUcoMCwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLCBpKTsKKwlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5ybWVtX2hhbmRsZSk7CisJaWYgKGkgIT0gMCkKKwkJREVCVUcoMCwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLCBpKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisKKwlERUJVRygyLCAicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKIH0KIAogc3RhdGljIGludCByYXlfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTgzMSwyMzYgKzg2NSwyNDIgQEAKIHN0YXRpYyBpbnQgcmF5X2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgUkFZX0lNTUVESUFURV9JTklUCi0gICAgaW50IGk7Ci0jZW5kaWYJLyogUkFZX0lNTUVESUFURV9JTklUICovCi0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpOworI2VuZGlmIC8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIERFQlVHKDEsInJheV9kZXZfaW5pdChkZXY9JXApXG4iLGRldik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfZGV2X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCURFQlVHKDEsICJyYXlfZGV2X2luaXQoZGV2PSVwKVxuIiwgZGV2KTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfZGV2X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogI2lmZGVmIFJBWV9JTU1FRElBVEVfSU5JVAotICAgIC8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwotICAgIGlmICggKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgotICAgICAgICAgICAicmV0dXJucyAweCV4XG4iLGkpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotI2Vsc2UJLyogUkFZX0lNTUVESUFURV9JTklUICovCi0gICAgLyogUG9zdHBvbmUgdGhlIGNhcmQgaW5pdCBzbyB0aGF0IHdlIGNhbiBzdGlsbCBjb25maWd1cmUgdGhlIGNhcmQsCi0gICAgICogZm9yIGV4YW1wbGUgdXNpbmcgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMuIFRoZSBpbml0IHdpbGwgaGFwcGVuCi0gICAgICogaW4gcmF5X29wZW4oKSAtIEplYW4gSUkgKi8KLSAgICBERUJVRygxLCJyYXlfZGV2X2luaXQ6IHBvc3Rwb25pbmcgY2FyZCBpbml0IHRvIHJheV9vcGVuKCkgOyBTdGF0dXMgPSAlZFxuIiwKLQkgIGxvY2FsLT5jYXJkX3N0YXR1cyk7Ci0jZW5kaWYJLyogUkFZX0lNTUVESUFURV9JTklUICovCisJLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCisJaWYgKChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCisJCSAgICAgICAicmV0dXJucyAweCV4XG4iLCBpKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbHNlIC8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLworCS8qIFBvc3Rwb25lIHRoZSBjYXJkIGluaXQgc28gdGhhdCB3ZSBjYW4gc3RpbGwgY29uZmlndXJlIHRoZSBjYXJkLAorCSAqIGZvciBleGFtcGxlIHVzaW5nIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zLiBUaGUgaW5pdCB3aWxsIGhhcHBlbgorCSAqIGluIHJheV9vcGVuKCkgLSBKZWFuIElJICovCisJREVCVUcoMSwKKwkgICAgICAicmF5X2Rldl9pbml0OiBwb3N0cG9uaW5nIGNhcmQgaW5pdCB0byByYXlfb3BlbigpIDsgU3RhdHVzID0gJWRcbiIsCisJICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzKTsKKyNlbmRpZiAvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KIAotICAgIC8qIGNvcHkgbWFjIGFuZCBicm9hZGNhc3QgYWRkcmVzc2VzIHRvIGxpbnV4IGRldmljZSAqLwotICAgIG1lbWNweSgmZGV2LT5kZXZfYWRkciwgJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKLSAgICBtZW1zZXQoZGV2LT5icm9hZGNhc3QsIDB4ZmYsIEVUSF9BTEVOKTsKKwkvKiBjb3B5IG1hYyBhbmQgYnJvYWRjYXN0IGFkZHJlc3NlcyB0byBsaW51eCBkZXZpY2UgKi8KKwltZW1jcHkoJmRldi0+ZGV2X2FkZHIsICZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7CisJbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAweGZmLCBFVEhfQUxFTik7CiAKLSAgICBERUJVRygyLCJyYXlfZGV2X2luaXQgZW5kaW5nXG4iKTsKLSAgICByZXR1cm4gMDsKKwlERUJVRygyLCAicmF5X2Rldl9pbml0IGVuZGluZ1xuIik7CisJcmV0dXJuIDA7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIC8qIER1bW15IHJvdXRpbmUgdG8gc2F0aXNmeSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgREVCVUcoMSwicmF5X2Rldl9jb25maWcoZGV2PSVwLGlmbWFwPSVwKVxuIixkZXYsbWFwKTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9kZXZfY29uZmlnIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJLyogRHVtbXkgcm91dGluZSB0byBzYXRpc2Z5IGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlERUJVRygxLCAicmF5X2Rldl9jb25maWcoZGV2PSVwLGlmbWFwPSVwKVxuIiwgZGV2LCBtYXApOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9kZXZfY29uZmlnIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9kZXZfc3RhcnRfeG1pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgREVCVUcoMywicmF5X2Rldl9zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKVxuIixza2IsZGV2KTsKLSAgICBpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IE5FRURfVE9fQVVUSCkgewotICAgICAgICBERUJVRygwLCJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuIik7Ci0gICAgICAgIGlmICghYnVpbGRfYXV0aF9mcmFtZSAobG9jYWwsIGxvY2FsLT5hdXRoX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKLSAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfZGV2X3N0YXJ0X3htaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCURFQlVHKDMsICJyYXlfZGV2X3N0YXJ0X3htaXQoc2tiPSVwLCBkZXY9JXApXG4iLCBza2IsIGRldik7CisJaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBORUVEX1RPX0FVVEgpIHsKKwkJREVCVUcoMCwgInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4iKTsKKwkJaWYgKCFidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YXV0aF9pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7CisJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CiAKLSAgICBpZiAobGVuZ3RoIDwgRVRIX1pMRU4pCi0gICAgewotICAgIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotICAgIAkJcmV0dXJuIDA7Ci0gICAgCWxlbmd0aCA9IEVUSF9aTEVOOwotICAgIH0KLSAgICBzd2l0Y2ggKHJheV9od194bWl0KCBza2ItPmRhdGEsIGxlbmd0aCwgZGV2LCBEQVRBX1RZUEUpKSB7Ci0gICAgICAgIGNhc2UgWE1JVF9OT19DQ1M6Ci0gICAgICAgIGNhc2UgWE1JVF9ORUVEX0FVVEg6Ci0JICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNlIFhNSVRfTk9fSU5UUjoKLSAgICAgICAgY2FzZSBYTUlUX01TR19CQUQ6Ci0gICAgICAgIGNhc2UgWE1JVF9PSzoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAwOworCWlmIChsZW5ndGggPCBFVEhfWkxFTikgeworCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQorCQkJcmV0dXJuIDA7CisJCWxlbmd0aCA9IEVUSF9aTEVOOworCX0KKwlzd2l0Y2ggKHJheV9od194bWl0KHNrYi0+ZGF0YSwgbGVuZ3RoLCBkZXYsIERBVEFfVFlQRSkpIHsKKwljYXNlIFhNSVRfTk9fQ0NTOgorCWNhc2UgWE1JVF9ORUVEX0FVVEg6CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJcmV0dXJuIDE7CisJY2FzZSBYTUlUX05PX0lOVFI6CisJY2FzZSBYTUlUX01TR19CQUQ6CisJY2FzZSBYTUlUX09LOgorCWRlZmF1bHQ6CisJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKIH0gLyogcmF5X2Rldl9zdGFydF94bWl0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciogZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgCi0gICAgICAgICAgICAgICAgVUNIQVIgbXNnX3R5cGUpCitzdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBVQ0hBUiBtc2dfdHlwZSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIGludCBvZmZzZXQ7Ci0gICAgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7IC8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gUEMgc3BhY2UgKi8KLSAgICBzaG9ydCBpbnQgYWRkcjsgICAgIC8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gY2FyZCBzcGFjZSAqLwotICAgIAotICAgIERFQlVHKDMsInJheV9od194bWl0KGRhdGE9JXAsIGxlbj0lZCwgZGV2PSVwKVxuIixkYXRhLGxlbixkZXYpOwotICAgIGlmIChsZW4gKyBUWF9IRUFERVJfTEVOR1RIID4gVFhfQlVGX1NJWkUpCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfaHdfeG1pdCBwYWNrZXQgdG9vIGxhcmdlOiAlZCBieXRlc1xuIixsZW4pOwotICAgICAgICByZXR1cm4gWE1JVF9NU0dfQkFEOwotICAgIH0KKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGNjc2luZGV4OworCWludCBvZmZzZXQ7CisJc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7CS8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gUEMgc3BhY2UgKi8KKwlzaG9ydCBpbnQgYWRkcjsJCS8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gY2FyZCBzcGFjZSAqLworCisJREVCVUcoMywgInJheV9od194bWl0KGRhdGE9JXAsIGxlbj0lZCwgZGV2PSVwKVxuIiwgZGF0YSwgbGVuLCBkZXYpOworCWlmIChsZW4gKyBUWF9IRUFERVJfTEVOR1RIID4gVFhfQlVGX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2h3X3htaXQgcGFja2V0IHRvbyBsYXJnZTogJWQgYnl0ZXNcbiIsCisJCSAgICAgICBsZW4pOworCQlyZXR1cm4gWE1JVF9NU0dfQkFEOworCX0KIAlzd2l0Y2ggKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgewogCWNhc2UgRUNDU0JVU1k6Ci0JCURFQlVHKDIsInJheV9od194bWl0IHR4X2NjcyB0YWJsZSBidXN5XG4iKTsKKwkJREVCVUcoMiwgInJheV9od194bWl0IHR4X2NjcyB0YWJsZSBidXN5XG4iKTsKIAljYXNlIEVDQ1NGVUxMOgotICAgICAgICBERUJVRygyLCJyYXlfaHdfeG1pdCBObyBmcmVlIHR4IGNjc1xuIik7CisJCURFQlVHKDIsICJyYXlfaHdfeG1pdCBObyBmcmVlIHR4IGNjc1xuIik7CiAJY2FzZSBFQ0FSREdPTkU6Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICByZXR1cm4gWE1JVF9OT19DQ1M7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJcmV0dXJuIFhNSVRfTk9fQ0NTOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLSAgICBhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOworCWFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7CiAKLSAgICBpZiAobXNnX3R5cGUgPT0gREFUQV9UWVBFKSB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0gICAgICAgIGxvY2FsLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0gICAgfQorCWlmIChtc2dfdHlwZSA9PSBEQVRBX1RZUEUpIHsKKwkJbG9jYWwtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKKwkJbG9jYWwtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwl9CiAKLSAgICBwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7CisJcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOwogCi0gICAgcmF5X2J1aWxkX2hlYWRlcihsb2NhbCwgcHR4LCBtc2dfdHlwZSwgZGF0YSk7Ci0gICAgaWYgKHRyYW5zbGF0ZSkgewotICAgICAgICBvZmZzZXQgPSB0cmFuc2xhdGVfZnJhbWUobG9jYWwsIHB0eCwgZGF0YSwgbGVuKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIEVuY2Fwc3VsYXRlIGZyYW1lICovCi0gICAgICAgIC8qIFRCRCBUSUIgbGVuZ3RoIHdpbGwgbW92ZSBhZGRyZXNzIG9mIHB0eC0+dmFyICovCi0gICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSwgbGVuKTsKLSAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICB9CisJcmF5X2J1aWxkX2hlYWRlcihsb2NhbCwgcHR4LCBtc2dfdHlwZSwgZGF0YSk7CisJaWYgKHRyYW5zbGF0ZSkgeworCQlvZmZzZXQgPSB0cmFuc2xhdGVfZnJhbWUobG9jYWwsIHB0eCwgZGF0YSwgbGVuKTsKKwl9IGVsc2UgeyAvKiBFbmNhcHN1bGF0ZSBmcmFtZSAqLworCQkvKiBUQkQgVElCIGxlbmd0aCB3aWxsIG1vdmUgYWRkcmVzcyBvZiBwdHgtPnZhciAqLworCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEsIGxlbik7CisJCW9mZnNldCA9IDA7CisJfQogCi0gICAgLyogZmlsbCBpbiB0aGUgQ0NTICovCi0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIGxlbiArPSBUWF9IRUFERVJfTEVOR1RIICsgb2Zmc2V0OwotICAgIHdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKGFkZHIgPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzBdKTsKLSAgICB3cml0ZWIobG9jYWwtPnRpYl9sZW5ndGgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clsxXSk7Ci0gICAgd3JpdGViKGxlbiA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMF0pOwotICAgIHdyaXRlYihsZW4gJiAweGZmLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMV0pOworCS8qIGZpbGwgaW4gdGhlIENDUyAqLworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwlsZW4gKz0gVFhfSEVBREVSX0xFTkdUSCArIG9mZnNldDsKKwl3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOworCXdyaXRlYihhZGRyID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clswXSk7CisJd3JpdGViKGxvY2FsLT50aWJfbGVuZ3RoLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMV0pOworCXdyaXRlYihsZW4gPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzBdKTsKKwl3cml0ZWIobGVuICYgMHhmZiwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzFdKTsKIC8qIFRCRCBzdGlsbCBuZWVkIHBzbV9jYW0/ICovCi0gICAgd3JpdGViKFBTTV9DQU0sICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOwotICAgIHdyaXRlYihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X3JhdGUpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QuYW50ZW5uYSk7Ci0gICAgREVCVUcoMywicmF5X2h3X3htaXQgZGVmYXVsdF90eF9yYXRlID0gMHgleFxuIixcCi0gICAgICAgICAgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUpOworCXdyaXRlYihQU01fQ0FNLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKKwl3cml0ZWIobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9yYXRlKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LmFudGVubmEpOworCURFQlVHKDMsICJyYXlfaHdfeG1pdCBkZWZhdWx0X3R4X3JhdGUgPSAweCV4XG4iLAorCSAgICAgIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlKTsKIAotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2h3X3htaXQgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygyLCAicmF5X2h3X3htaXQgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CiAvKiBUQkQgdmVyeSBpbmVmZmljaWVudCB0byBjb3B5IHBhY2tldCB0byBidWZmZXIsIGFuZCB0aGVuIG5vdAogICAgc2VuZCBpdCwgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0byBxdWV1ZSB0aGUgbWVzc2FnZXMgYW5kIHRoYXQKICAgIHdvbid0IGJlIGRvbmUgZm9yIGEgd2hpbGUuICBNYXliZSBzZXQgdGJ1c3kgdW50aWwgYSBDQ1MgaXMgZnJlZT8KICovCi0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIFhNSVRfTk9fSU5UUjsKLSAgICB9Ci0gICAgcmV0dXJuIFhNSVRfT0s7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuIFhNSVRfTk9fSU5UUjsKKwl9CisJcmV0dXJuIFhNSVRfT0s7CiB9IC8qIGVuZCByYXlfaHdfeG1pdCAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIGludCBsZW4pCi17Ci0gICAgX19iZTE2IHByb3RvID0gKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfcHJvdG87Ci0gICAgaWYgKG50b2hzKHByb3RvKSA+PSAxNTM2KSB7IC8qIERJWCBJSSBldGhlcm5ldCBmcmFtZSAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIERJWCBJSVxuIik7Ci0gICAgICAgIC8qIENvcHkgTExDIGhlYWRlciB0byBjYXJkIGJ1ZmZlciAqLwotICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGV0aDJfbGxjLCBzaXplb2YoZXRoMl9sbGMpKTsKLSAgICAgICAgbWVtY3B5X3RvaW8oICgodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyKSArIHNpemVvZihldGgyX2xsYyksIChVQ0hBUiAqKSZwcm90bywgMik7Ci0gICAgICAgIGlmIChwcm90byA9PSBodG9ucyhFVEhfUF9BQVJQKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9JUFgpKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBzZWxlY3RpdmUgdHJhbnNsYXRpb24gdGFibGUsIG9ubHkgMiBlbnRyaWVzICovCi0gICAgICAgICAgICB3cml0ZWIoMHhmOCwgJigoc3RydWN0IHNuYXBoZHJfdCBfX2lvbWVtICopcHR4LT52YXIpLT5vcmdbM10pOwotICAgICAgICB9Ci0gICAgICAgIC8qIENvcHkgYm9keSBvZiBldGhlcm5ldCBwYWNrZXQgd2l0aG91dCBldGhlcm5ldCBoZWFkZXIgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhciArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSwgXAotICAgICAgICAgICAgICAgICAgICBkYXRhICsgRVRIX0hMRU4sICBsZW4gLSBFVEhfSExFTik7Ci0gICAgICAgIHJldHVybiAoaW50KSBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIGFscmVhZHkgIDgwMiB0eXBlLCBhbmQgcHJvdG8gaXMgbGVuZ3RoICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgODAyXG4iKTsKLSAgICAgICAgaWYgKHByb3RvID09IGh0b25zKDB4ZmZmZikpIHsgLyogZXZpbCBuZXR3YXJlIElQWCA4MDIuMyB3aXRob3V0IExMQyAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIGV2aWwgSVBYXG4iKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCAgbGVuIC0gRVRIX0hMRU4pOwotICAgICAgICAgICAgcmV0dXJuIDAgLSBFVEhfSExFTjsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgIGxlbiAtIEVUSF9ITEVOKTsKLSAgICAgICAgcmV0dXJuIDAgLSBFVEhfSExFTjsKLSAgICB9Ci0gICAgLyogVEJEIGRvIG90aGVyIGZyYW1lIHR5cGVzICovCi19IC8qIGVuZCB0cmFuc2xhdGVfZnJhbWUgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsIFVDSEFSIG1zZ190eXBlLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEpCi17Ci0gICAgd3JpdGViKFBST1RPQ09MX1ZFUiB8IG1zZ190eXBlLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOwotLyoqKiBJRUVFIDgwMi4xMSBBZGRyZXNzIGZpZWxkIGFzc2lnbm1lbnRzICoqKioqKioqKioqKioKLSAgICAgICAgICAgICAgICBUT0RTIEZST01EUyAgIGFkZHJfMSAgICAgYWRkcl8yICAgICAgICAgIGFkZHJfMyAgIGFkZHJfNAotQWRob2MgICAgICAgICAgIDAgICAgMCAgICAgICAgZGVzdCAgICAgICBzcmMgKHRlcm1pbmFsKSAgQlNTSUQgICAgTi9BCi1BUCB0byBUZXJtaW5hbCAgMCAgICAxICAgICAgICBkZXN0ICAgICAgIEFQKEJTU0lEKSAgICAgICBzb3VyY2UgICBOL0EKLVRlcm1pbmFsIHRvIEFQICAxICAgIDAgICAgICAgIEFQKEJTU0lEKSAgc3JjICh0ZXJtaW5hbCkgIGRlc3QgICAgIE4vQQotQVAgdG8gQVAgICAgICAgIDEgICAgMSAgICAgICAgZGVzdCBBUCAgICBzcmMgQVAgICAgICAgICAgZGVzdCAgICAgc291cmNlICAgICAgCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIGlmIChsb2NhbC0+bmV0X3R5cGUgPT0gQURIT0MpIHsgICAKLSAgICAgICAgd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7Ci0gICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgMiAqIEFERFJMRU4pOwotICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOwotICAgIH0KLSAgICBlbHNlIC8qIGluZnJhc3RydWN0dXJlICovCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGViKEZDMl9GUk9NX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPmJzc19pZCwgNik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBUZXJtaW5hbCAqLwotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZWIoRkMyX1RPX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8qIGVuZCBlbmNhcHN1bGF0ZV9mcmFtZSAqLwogCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJX19iZTE2IHByb3RvID0gKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfcHJvdG87CisJaWYgKG50b2hzKHByb3RvKSA+PSAxNTM2KSB7IC8qIERJWCBJSSBldGhlcm5ldCBmcmFtZSAqLworCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBESVggSUlcbiIpOworCQkvKiBDb3B5IExMQyBoZWFkZXIgdG8gY2FyZCBidWZmZXIgKi8KKwkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBldGgyX2xsYywgc2l6ZW9mKGV0aDJfbGxjKSk7CisJCW1lbWNweV90b2lvKCgodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyKSArIHNpemVvZihldGgyX2xsYyksCisJCQkgICAgKFVDSEFSICopICZwcm90bywgMik7CisJCWlmIChwcm90byA9PSBodG9ucyhFVEhfUF9BQVJQKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9JUFgpKSB7CisJCQkvKiBUaGlzIGlzIHRoZSBzZWxlY3RpdmUgdHJhbnNsYXRpb24gdGFibGUsIG9ubHkgMiBlbnRyaWVzICovCisJCQl3cml0ZWIoMHhmOCwKKwkJCSAgICAgICAmKChzdHJ1Y3Qgc25hcGhkcl90IF9faW9tZW0gKilwdHgtPnZhciktPm9yZ1szXSk7CisJCX0KKwkJLyogQ29weSBib2R5IG9mIGV0aGVybmV0IHBhY2tldCB3aXRob3V0IGV0aGVybmV0IGhlYWRlciAqLworCQltZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCksIGRhdGEgKyBFVEhfSExFTiwKKwkJCSAgICBsZW4gLSBFVEhfSExFTik7CisJCXJldHVybiAoaW50KXNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOworCX0gZWxzZSB7IC8qIGFscmVhZHkgIDgwMiB0eXBlLCBhbmQgcHJvdG8gaXMgbGVuZ3RoICovCisJCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIDgwMlxuIik7CisJCWlmIChwcm90byA9PSBodG9ucygweGZmZmYpKSB7IC8qIGV2aWwgbmV0d2FyZSBJUFggODAyLjMgd2l0aG91dCBMTEMgKi8KKwkJCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIGV2aWwgSVBYXG4iKTsKKwkJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCBsZW4gLSBFVEhfSExFTik7CisJCQlyZXR1cm4gMCAtIEVUSF9ITEVOOworCQl9CisJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCBsZW4gLSBFVEhfSExFTik7CisJCXJldHVybiAwIC0gRVRIX0hMRU47CisJfQorCS8qIFRCRCBkbyBvdGhlciBmcmFtZSB0eXBlcyAqLworfSAvKiBlbmQgdHJhbnNsYXRlX2ZyYW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCisJCQkgICAgIFVDSEFSIG1zZ190eXBlLCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXdyaXRlYihQUk9UT0NPTF9WRVIgfCBtc2dfdHlwZSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKKy8qKiogSUVFRSA4MDIuMTEgQWRkcmVzcyBmaWVsZCBhc3NpZ25tZW50cyAqKioqKioqKioqKioqCisJCVRPRFMJRlJPTURTCWFkZHJfMQkJYWRkcl8yCQlhZGRyXzMJYWRkcl80CitBZGhvYwkJMAkwCWRlc3QJCXNyYyAodGVybWluYWwpCUJTU0lECU4vQQorQVAgdG8gVGVybWluYWwJMAkxCWRlc3QJCUFQKEJTU0lEKQlzb3VyY2UJTi9BCitUZXJtaW5hbCB0byBBUAkxCTAJQVAoQlNTSUQpCXNyYyAodGVybWluYWwpCWRlc3QJTi9BCitBUCB0byBBUAkxCTEJZGVzdCBBUAkJc3JjIEFQCQlkZXN0CXNvdXJjZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAobG9jYWwtPm5ldF90eXBlID09IEFESE9DKSB7CisJCXdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsCisJCQkgICAgMiAqIEFERFJMRU4pOworCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOworCX0gZWxzZSB7IC8qIGluZnJhc3RydWN0dXJlICovCisKKwkJaWYgKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpIHsKKwkJCXdyaXRlYihGQzJfRlJPTV9EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5ic3NfaWQsIDYpOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOworCQl9IGVsc2UgeyAvKiBUZXJtaW5hbCAqLworCisJCQl3cml0ZWIoRkMyX1RPX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7CisJCX0KKwl9Cit9IC8qIGVuZCBlbmNhcHN1bGF0ZV9mcmFtZSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTEwNzEsNyArMTExMSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewotCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCisJLmdldF9kcnZpbmZvID0gbmV0ZGV2X2dldF9kcnZpbmZvLAogfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMDgxLDkgKzExMjEsNyBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBwcm90b2NvbCBuYW1lCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJY2hhciAqY3dycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3dycSwgY2hhciAqZXh0cmEpCiB7CiAJc3RyY3B5KGN3cnEsICJJRUVFIDgwMi4xMS1GSCIpOwogCXJldHVybiAwOwpAQCAtMTA5NSwxNCArMTEzMywxMyBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19mcmVxICpmd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLwpAQCAtMTExMywxNSArMTE1MCwxNCBAQAogCiAJcmV0dXJuIGVycjsKIH0KLSAKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgZnJlcXVlbmN5CiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTEzNiwyMiArMTE3MiwyMSBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwKLQkJCSBjaGFyICpleHRyYSkKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIENoZWNrIGlmIHdlIGFza2VkIGZvciBgYW55JyAqLwotCWlmKGR3cnEtPmZsYWdzID09IDApIHsKKwlpZiAoZHdycS0+ZmxhZ3MgPT0gMCkgewogCQkvKiBDb3JleSA6IGNhbiB5b3UgZG8gdGhhdCA/ICovCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9IGVsc2UgewogCQkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nICovCi0JCWlmKGR3cnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKSB7CisJCWlmIChkd3JxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkgewogCQkJcmV0dXJuIC1FMkJJRzsKIAkJfQogCkBAIC0xMTYwLDcgKzExOTUsNyBAQAogCQltZW1jcHkobG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWQsIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCX0KIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMTY5LDggKzEyMDQsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwKLQkJCSBjaGFyICpleHRyYSkKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xMTc5LDcgKzEyMTMsNyBAQAogCiAJLyogUHVzaCBpdCBvdXQgISAqLwogCWR3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSk7Ci0JZHdycS0+ZmxhZ3MgPSAxOyAvKiBhY3RpdmUgKi8KKwlkd3JxLT5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg5LDkgKzEyMjMsOCBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBBUCBhZGRyZXNzCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3Qgc29ja2FkZHIgKmF3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmF3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xMjA3LDI1ICsxMjQwLDI0IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIENoZWNrIGlmIHJhdGUgaXMgaW4gcmFuZ2UgKi8KLQlpZigodndycS0+dmFsdWUgIT0gMTAwMDAwMCkgJiYgKHZ3cnEtPnZhbHVlICE9IDIwMDAwMDApKQorCWlmICgodndycS0+dmFsdWUgIT0gMTAwMDAwMCkgJiYgKHZ3cnEtPnZhbHVlICE9IDIwMDAwMDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEhhY2sgZm9yIDEuNSBNYi9zIGluc3RlYWQgb2YgMiBNYi9zICovCi0JaWYoKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgJiYJCS8qIFBsZWFzZSBjaGVjayAqLwotCSAgICh2d3JxLT52YWx1ZSA9PSAyMDAwMDAwKSkKKwlpZiAoKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgJiYJLyogUGxlYXNlIGNoZWNrICovCisJICAgICh2d3JxLT52YWx1ZSA9PSAyMDAwMDAwKSkKIAkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAzOwogCWVsc2UKLQkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSB2d3JxLT52YWx1ZS81MDAwMDA7CisJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gdndycS0+dmFsdWUgLyA1MDAwMDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMzYsMTYgKzEyNjgsMTUgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9PSAzKQotCQl2d3JxLT52YWx1ZSA9IDIwMDAwMDA7CQkvKiBIdW0uLi4gKi8KKwlpZiAobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPT0gMykKKwkJdndycS0+dmFsdWUgPSAyMDAwMDAwOwkvKiBIdW0uLi4gKi8KIAllbHNlCiAJCXZ3cnEtPnZhbHVlID0gbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgKiA1MDAwMDA7Ci0JdndycS0+Zml4ZWQgPSAwOwkJLyogV2UgYXJlIGluIGF1dG8gbW9kZSAqLworCXZ3cnEtPmZpeGVkID0gMDsJLyogV2UgYXJlIGluIGF1dG8gbW9kZSAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjU2LDQzICsxMjg3LDQwIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCSAgICAgICBjaGFyICpleHRyYSkKKwkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJ0aHIgPSB2d3JxLT52YWx1ZTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBpZih3cnEtPnUucnRzLmZpeGVkID09IDApIHdlIHNob3VsZCBjb21wbGFpbiAqLwotCWlmKHZ3cnEtPmRpc2FibGVkKQorCWlmICh2d3JxLT5kaXNhYmxlZCkKIAkJcnRociA9IDMyNzY3OwogCWVsc2UgewotCQlpZigocnRociA8IDApIHx8IChydGhyID4gMjM0NykpIC8qIFdoYXQncyB0aGUgbWF4IHBhY2tldCBzaXplID8/PyAqLworCQlpZiAoKHJ0aHIgPCAwKSB8fCAocnRociA+IDIzNDcpKSAgIC8qIFdoYXQncyB0aGUgbWF4IHBhY2tldCBzaXplID8/PyAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMF0gPSAocnRociA+PiA4KSAmIDB4RkY7CiAJbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFsxXSA9IHJ0aHIgJiAweEZGOwogCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgUlRTIHRocmVzaG9sZAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkgICAgICAgY2hhciAqZXh0cmEpCisJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdndycS0+dmFsdWUgPSAobG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFswXSA8PCA4KQotCQkrIGxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMV07CisJICAgICsgbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFsxXTsKIAl2d3JxLT5kaXNhYmxlZCA9ICh2d3JxLT52YWx1ZSA9PSAzMjc2Nyk7CiAJdndycS0+Zml4ZWQgPSAxOwogCkBAIC0xMzA1LDI3ICsxMzMzLDI2IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBmdGhyID0gdndycS0+dmFsdWU7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogaWYod3JxLT51LmZyYWcuZml4ZWQgPT0gMCkgc2hvdWxkIGNvbXBsYWluICovCi0JaWYodndycS0+ZGlzYWJsZWQpCisJaWYgKHZ3cnEtPmRpc2FibGVkKQogCQlmdGhyID0gMzI3Njc7CiAJZWxzZSB7Ci0JCWlmKChmdGhyIDwgMjU2KSB8fCAoZnRociA+IDIzNDcpKSAvKiBUbyBjaGVjayBvdXQgISAqLworCQlpZiAoKGZ0aHIgPCAyNTYpIHx8IChmdGhyID4gMjM0NykpCS8qIFRvIGNoZWNrIG91dCAhICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMF0gPSAoZnRociA+PiA4KSAmIDB4RkY7CiAJbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMV0gPSBmdGhyICYgMHhGRjsKIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMzM0LDEzICsxMzYxLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdndycS0+dmFsdWUgPSAobG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMF0gPDwgOCkKLQkJKyBsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFsxXTsKKwkgICAgKyBsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFsxXTsKIAl2d3JxLT5kaXNhYmxlZCA9ICh2d3JxLT52YWx1ZSA9PSAzMjc2Nyk7CiAJdndycS0+Zml4ZWQgPSAxOwogCkBAIC0xMzUyLDIzICsxMzc4LDIwIEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogc2V0IE1vZGUgb2YgT3BlcmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJX191MzIgKnV3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIF9fdTMyICp1d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAljaGFyIGNhcmRfbW9kZSA9IDE7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoICgqdXdycSkKLQl7CisJc3dpdGNoICgqdXdycSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKIAkJY2FyZF9tb2RlID0gMDsKLQkJLy8gRmFsbCB0aHJvdWdoCisJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSVdfTU9ERV9JTkZSQToKIAkJbG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlID0gY2FyZF9tb2RlOwogCQlicmVhazsKQEAgLTEzODQsMTMgKzE0MDcsMTEgQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgTW9kZSBvZiBPcGVyYXRpb24KICAqLwogc3RhdGljIGludCByYXlfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlfX3UzMiAqdXdycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKnV3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlKQorCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUpCiAJCSp1d3JxID0gSVdfTU9ERV9JTkZSQTsKIAllbHNlCiAJCSp1d3JxID0gSVdfTU9ERV9BREhPQzsKQEAgLTE0MDQsMTIgKzE0MjUsMTEgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCisJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwogCi0JbWVtc2V0KChjaGFyICopIHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisJbWVtc2V0KChjaGFyICopcmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKIAogCS8qIFNldCB0aGUgbGVuZ3RoICh2ZXJ5IGltcG9ydGFudCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgKi8KIAlkd3JxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKQEAgLTE0MjAsNyArMTQ0MCw3IEBACiAKIAkvKiBTZXQgaW5mb3JtYXRpb24gaW4gdGhlIHJhbmdlIHN0cnVjdCAqLwogCXJhbmdlLT50aHJvdWdocHV0ID0gMS4xICogMTAwMCAqIDEwMDA7CS8qIFB1dCB0aGUgcmlnaHQgbnVtYmVyIGhlcmUgKi8KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07IAorCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsKIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IDA7CiAJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAwOwogCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDI1NTsJLyogV2hhdCdzIHRoZSBjb3JyZWN0IHZhbHVlID8gKi8KQEAgLTE0MzcsOCArMTQ1Nyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9mcmFtaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgIGNoYXIgKmV4dHJhKQorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJdHJhbnNsYXRlID0gKihleHRyYSk7CS8qIFNldCBmcmFtaW5nIG1vZGUgKi8KIApAQCAtMTQ1MSw4ICsxNDcwLDcgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2ZyYW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgY2hhciAqZXh0cmEpCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkqKGV4dHJhKSA9IHRyYW5zbGF0ZTsKIApAQCAtMTQ2NSw4ICsxNDgzLDcgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2NvdW50cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgY2hhciAqZXh0cmEpCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkqKGV4dHJhKSA9IGNvdW50cnk7CiAKQEAgLTE0NzcsMTEgKzE0OTQsMTAgQEAKIC8qCiAgKiBDb21taXQgaGFuZGxlciA6IGNhbGxlZCBhZnRlciBhIGJ1bmNoIG9mIFNFVCBvcGVyYXRpb25zCiAgKi8KLXN0YXRpYyBpbnQgcmF5X2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAkvKiBOVUxMICovCi0JCSAgICAgIHZvaWQgKnp3cnEsCQkJLyogTlVMTCAqLwotCQkgICAgICBjaGFyICpleHRyYSkJCQkvKiBOVUxMICovCi17CitzdGF0aWMgaW50IHJheV9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywJLyogTlVMTCAqLworCQkgICAgICB2b2lkICp6d3JxLAkvKiBOVUxMICovCisJCSAgICAgIGNoYXIgKmV4dHJhKQoreyAvKiBOVUxMICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0ODksMzMgKzE1MDUsMzQgQEAKIC8qCiAgKiBTdGF0cyBoYW5kbGVyIDogcmV0dXJuIFdpcmVsZXNzIFN0YXRzCiAgKi8KLXN0YXRpYyBpd19zdGF0cyAqIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCitzdGF0aWMgaXdfc3RhdHMgKnJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgcmF5X2Rldl90ICoJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gIHN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CiAKLSAgaWYobG9jYWwgPT0gKHJheV9kZXZfdCAqKSBOVUxMKQotICAgIHJldHVybiAoaXdfc3RhdHMgKikgTlVMTDsKKwlpZiAobG9jYWwgPT0gKHJheV9kZXZfdCAqKSBOVUxMKQorCQlyZXR1cm4gKGl3X3N0YXRzICopIE5VTEw7CiAKLSAgbG9jYWwtPndzdGF0cy5zdGF0dXMgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7CisJbG9jYWwtPndzdGF0cy5zdGF0dXMgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gIGlmKChsb2NhbC0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApICYmIChsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUgPT0gMCkpCi0gICAgewotICAgICAgLyogR2V0IGl0IGZyb20gdGhlIGZpcnN0IG5vZGUgaW4gc3B5IGxpc3QgKi8KLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7Ci0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubGV2ZWw7Ci0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7Ci0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOwotICAgIH0KKwlpZiAoKGxvY2FsLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkKKwkgICAgJiYgKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSA9PSAwKSkgeworCQkvKiBHZXQgaXQgZnJvbSB0aGUgZmlyc3Qgbm9kZSBpbiBzcHkgbGlzdCAqLworCQlsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5xdWFsOworCQlsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubGV2ZWw7CisJCWxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5ub2lzZTsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPQorCQkgICAgbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7CisJfQogI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogCi0gIGlmKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotICAgIGxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IHJlYWRiKCZwLT5yeG5vaXNlKTsKLSAgICBsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCB8PSA0OwotICB9CisJaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgeworCQlsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSByZWFkYigmcC0+cnhub2lzZSk7CisJCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkIHw9IDQ7CisJfQogCi0gIHJldHVybiAmbG9jYWwtPndzdGF0czsKKwlyZXR1cm4gJmxvY2FsLT53c3RhdHM7CiB9IC8qIGVuZCByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE1MjMsMTE1OSArMTU0MCwxMjY0IEBACiAgKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKICAqLwogCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglyYXlfaGFuZGxlcltdID0gewotCVtTSU9DU0lXQ09NTUlULVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfY29tbWl0LAotCVtTSU9DR0lXTkFNRSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X25hbWUsCi0JW1NJT0NTSVdGUkVRICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJlcSwKLQlbU0lPQ0dJV0ZSRVEgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmVxLAotCVtTSU9DU0lXTU9ERSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X21vZGUsCi0JW1NJT0NHSVdNT0RFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbW9kZSwKLQlbU0lPQ0dJV1JBTkdFIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYW5nZSwKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJheV9oYW5kbGVyW10gPSB7CisJW1NJT0NTSVdDT01NSVQgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2NvbW1pdCwKKwlbU0lPQ0dJV05BTUUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9uYW1lLAorCVtTSU9DU0lXRlJFUSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyZXEsCisJW1NJT0NHSVdGUkVRIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJlcSwKKwlbU0lPQ1NJV01PREUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9tb2RlLAorCVtTSU9DR0lXTU9ERSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X21vZGUsCisJW1NJT0NHSVdSQU5HRSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhbmdlLAogI2lmZGVmIFdJUkVMRVNTX1NQWQotIAlbU0lPQ1NJV1NQWSAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfc3B5LAotCVtTSU9DR0lXU1BZICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF9zcHksCi0JW1NJT0NTSVdUSFJTUFktU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3RocnNweSwKLQlbU0lPQ0dJV1RIUlNQWS1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfdGhyc3B5LAotI2VuZGlmCS8qIFdJUkVMRVNTX1NQWSAqLwotCVtTSU9DR0lXQVAgICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3dhcCwKLQlbU0lPQ1NJV0VTU0lEIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9lc3NpZCwKLQlbU0lPQ0dJV0VTU0lEIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9lc3NpZCwKLQlbU0lPQ1NJV1JBVEUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9yYXRlLAotCVtTSU9DR0lXUkFURSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhdGUsCi0JW1NJT0NTSVdSVFMgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcnRzLAotCVtTSU9DR0lXUlRTICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3J0cywKLQlbU0lPQ1NJV0ZSQUcgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmFnLAotCVtTSU9DR0lXRlJBRyAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyYWcsCisJW1NJT0NTSVdTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfc3B5LAorCVtTSU9DR0lXU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3NweSwKKwlbU0lPQ1NJV1RIUlNQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF90aHJzcHksCisJW1NJT0NHSVdUSFJTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfdGhyc3B5LAorI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLworCVtTSU9DR0lXQVAgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF93YXAsCisJW1NJT0NTSVdFU1NJRCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2Vzc2lkLAorCVtTSU9DR0lXRVNTSUQgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9lc3NpZCwKKwlbU0lPQ1NJV1JBVEUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9yYXRlLAorCVtTSU9DR0lXUkFURSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhdGUsCisJW1NJT0NTSVdSVFMgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9ydHMsCisJW1NJT0NHSVdSVFMgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9ydHMsCisJW1NJT0NTSVdGUkFHIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJhZywKKwlbU0lPQ0dJV0ZSQUcgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmFnLAogfTsKIAotI2RlZmluZSBTSU9DU0lQRlJBTUlORwlTSU9DSVdGSVJTVFBSSVYJCS8qIFNldCBmcmFtaW5nIG1vZGUgKi8KKyNkZWZpbmUgU0lPQ1NJUEZSQU1JTkcJU0lPQ0lXRklSU1RQUklWCS8qIFNldCBmcmFtaW5nIG1vZGUgKi8KICNkZWZpbmUgU0lPQ0dJUEZSQU1JTkcJU0lPQ0lXRklSU1RQUklWICsgMQkvKiBHZXQgZnJhbWluZyBtb2RlICovCiAjZGVmaW5lIFNJT0NHSVBDT1VOVFJZCVNJT0NJV0ZJUlNUUFJJViArIDMJLyogR2V0IGNvdW50cnkgY29kZSAqLwogCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglyYXlfcHJpdmF0ZV9oYW5kbGVyW10gPSB7CitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciByYXlfcHJpdmF0ZV9oYW5kbGVyW10gPSB7CiAJWzBdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJhbWluZywKIAlbMV0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmFtaW5nLAogCVszXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2NvdW50cnksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncwlyYXlfcHJpdmF0ZV9hcmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyByYXlfcHJpdmF0ZV9hcmdzW10gPSB7CiAvKiBjbWQsCQlzZXRfYXJncywJZ2V0X2FyZ3MsCW5hbWUgKi8KLXsgU0lPQ1NJUEZSQU1JTkcsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9mcmFtaW5nIiB9LAoteyBTSU9DR0lQRlJBTUlORywgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0X2ZyYW1pbmciIH0sCi17IFNJT0NHSVBDT1VOVFJZLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRfY291bnRyeSIgfSwKKwl7U0lPQ1NJUEZSQU1JTkcsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwKKwkgInNldF9mcmFtaW5nIn0sCisJe1NJT0NHSVBGUkFNSU5HLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICJnZXRfZnJhbWluZyJ9LAorCXtTSU9DR0lQQ09VTlRSWSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAiZ2V0X2NvdW50cnkifSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYJcmF5X2hhbmRsZXJfZGVmID0KLXsKLQkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShyYXlfaGFuZGxlciksCi0JLm51bV9wcml2YXRlCT0gQVJSQVlfU0laRShyYXlfcHJpdmF0ZV9oYW5kbGVyKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcmF5X2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKHJheV9oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKHJheV9wcml2YXRlX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShyYXlfcHJpdmF0ZV9hcmdzKSwKLQkuc3RhbmRhcmQJPSByYXlfaGFuZGxlciwKLQkucHJpdmF0ZQk9IHJheV9wcml2YXRlX2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncwk9IHJheV9wcml2YXRlX2FyZ3MsCisJLnN0YW5kYXJkID0gcmF5X2hhbmRsZXIsCisJLnByaXZhdGUgPSByYXlfcHJpdmF0ZV9oYW5kbGVyLAorCS5wcml2YXRlX2FyZ3MgPSByYXlfcHJpdmF0ZV9hcmdzLAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzLAogfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIGxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIAotICAgIERFQlVHKDEsICJyYXlfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmIChsaW5rLT5vcGVuID09IDApCi0JICAgIGxvY2FsLT5udW1fbXVsdGkgPSAwOwotICAgIGxpbmstPm9wZW4rKzsKKwlERUJVRygxLCAicmF5X29wZW4oJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKLSAgICAvKiBJZiB0aGUgY2FyZCBpcyBub3Qgc3RhcnRlZCwgdGltZSB0byBzdGFydCBpdCAhIC0gSmVhbiBJSSAqLwotICAgIGlmKGxvY2FsLT5jYXJkX3N0YXR1cyA9PSBDQVJEX0FXQUlUSU5HX1BBUkFNKSB7Ci0JaW50IGk7CisJaWYgKGxpbmstPm9wZW4gPT0gMCkKKwkJbG9jYWwtPm51bV9tdWx0aSA9IDA7CisJbGluay0+b3BlbisrOwogCi0JREVCVUcoMSwicmF5X29wZW46IGRvaW5nIGluaXQgbm93ICFcbiIpOworCS8qIElmIHRoZSBjYXJkIGlzIG5vdCBzdGFydGVkLCB0aW1lIHRvIHN0YXJ0IGl0ICEgLSBKZWFuIElJICovCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyA9PSBDQVJEX0FXQUlUSU5HX1BBUkFNKSB7CisJCWludCBpOwogCi0JLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCi0JaWYgKCAoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkKLQkgIHsKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKLQkJICAgInJldHVybnMgMHgleFxuIixpKTsKLQkgICAgcmV0dXJuIC0xOwotCSAgfQotICAgICB9CisJCURFQlVHKDEsICJyYXlfb3BlbjogZG9pbmcgaW5pdCBub3cgIVxuIik7CiAKLSAgICBpZiAoc25pZmZlcikgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgIGVsc2UgICAgICAgICBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KKwkJaWYgKChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCisJCQkgICAgICAgInJldHVybnMgMHgleFxuIiwgaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CiAKLSAgICBERUJVRygyLCJyYXlfb3BlbiBlbmRpbmdcbiIpOwotICAgIHJldHVybiAwOworCWlmIChzbmlmZmVyKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJZWxzZQorCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJREVCVUcoMiwgInJheV9vcGVuIGVuZGluZ1xuIik7CisJcmV0dXJuIDA7CiB9IC8qIGVuZCByYXlfb3BlbiAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICBsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIERFQlVHKDEsICJyYXlfZGV2X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOworCURFQlVHKDEsICJyYXlfZGV2X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgbGluay0+b3Blbi0tOwotICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlsaW5rLT5vcGVuLS07CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0gICAgLyogSW4gaGVyZSwgd2Ugc2hvdWxkIHN0b3AgdGhlIGhhcmR3YXJlIChzdG9wIGNhcmQgZnJvbSBiZWVpbmcgYWN0aXZlKQotICAgICAqIGFuZCBzZXQgbG9jYWwtPmNhcmRfc3RhdHVzIHRvIENBUkRfQVdBSVRJTkdfUEFSQU0sIHNvIHRoYXQgd2hpbGUgdGhlCi0gICAgICogY2FyZCBpcyBjbG9zZWQgd2UgY2FuIGNoYWdlIGl0cyBjb25maWd1cmF0aW9uLgotICAgICAqIFByb2JhYmx5IGFsc28gbmVlZCBhIENPUiByZXNldCB0byBnZXQgc2FuZSBzdGF0ZSAtIEplYW4gSUkgKi8KKwkvKiBJbiBoZXJlLCB3ZSBzaG91bGQgc3RvcCB0aGUgaGFyZHdhcmUgKHN0b3AgY2FyZCBmcm9tIGJlZWluZyBhY3RpdmUpCisJICogYW5kIHNldCBsb2NhbC0+Y2FyZF9zdGF0dXMgdG8gQ0FSRF9BV0FJVElOR19QQVJBTSwgc28gdGhhdCB3aGlsZSB0aGUKKwkgKiBjYXJkIGlzIGNsb3NlZCB3ZSBjYW4gY2hhZ2UgaXRzIGNvbmZpZ3VyYXRpb24uCisJICogUHJvYmFibHkgYWxzbyBuZWVkIGEgQ09SIHJlc2V0IHRvIGdldCBzYW5lIHN0YXRlIC0gSmVhbiBJSSAqLwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9IC8qIGVuZCByYXlfZGV2X2Nsb3NlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgREVCVUcoMSwicmF5X3Jlc2V0IGVudGVyZWRcbiIpOwotICAgIHJldHVybjsKK3N0YXRpYyB2b2lkIHJheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCURFQlVHKDEsICJyYXlfcmVzZXQgZW50ZXJlZFxuIik7CisJcmV0dXJuOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDYXVzZSBhIGZpcm13YXJlIGludGVycnVwdCBpZiBpdCBpcyByZWFkeSBmb3Igb25lICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZXR1cm4gbm9uemVybyBpZiBub3QgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGludGVycnVwdF9lY2YocmF5X2Rldl90ICpsb2NhbCwgaW50IGNjcykKIHsKLSAgICBpbnQgaSA9IDUwOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaSA9IDUwOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdF9lY2YgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIERFQlVHKDIsImludGVycnVwdF9lY2YobG9jYWw9JXAsIGNjcyA9IDB4JXhcbiIsbG9jYWwsY2NzKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgaW50ZXJydXB0X2VjZiAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJREVCVUcoMiwgImludGVycnVwdF9lY2YobG9jYWw9JXAsIGNjcyA9IDB4JXhcbiIsIGxvY2FsLCBjY3MpOwogCi0gICAgd2hpbGUgKCBpICYmIAotICAgICAgICAgICAgKHJlYWRiKGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCkgJiBFQ0ZfSU5UUl9TRVQpKQotICAgICAgICBpLS07Ci0gICAgaWYgKGkgPT0gMCkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0X2VjZiBjYXJkIG5vdCByZWFkeSBmb3IgaW50ZXJydXB0XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwl3aGlsZSAoaSAmJgorCSAgICAgICAocmVhZGIobG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKSAmCisJCUVDRl9JTlRSX1NFVCkpCisJCWktLTsKKwlpZiAoaSA9PSAwKSB7CisJCURFQlVHKDIsICJyYXlfY3MgaW50ZXJydXB0X2VjZiBjYXJkIG5vdCByZWFkeSBmb3IgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAkvKiBGaWxsIHRoZSBtYWlsYm94LCB0aGVuIGtpY2sgdGhlIGNhcmQgKi8KLSAgICB3cml0ZWIoY2NzLCBsb2NhbC0+c3JhbSArIFNDQl9CQVNFKTsKLSAgICB3cml0ZWIoRUNGX0lOVFJfU0VULCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpOwotICAgIHJldHVybiAwOworCXdyaXRlYihjY3MsIGxvY2FsLT5zcmFtICsgU0NCX0JBU0UpOworCXdyaXRlYihFQ0ZfSU5UUl9TRVQsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCk7CisJcmV0dXJuIDA7CiB9IC8qIGludGVycnVwdF9lY2YgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogR2V0IG5leHQgZnJlZSB0cmFuc21pdCBDQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUmV0dXJuIC0gaW5kZXggb2YgY3VycmVudCB0eCBjY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGludCBnZXRfZnJlZV90eF9jY3MocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBnZXRfZnJlZV90eF9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gRUNBUkRHT05FOwotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgZ2V0X2ZyZWVfdHhfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIEVDQVJER09ORTsKKwl9CiAKLSAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCZsb2NhbC0+dHhfY2NzX2xvY2spKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyB0eF9jY3NfbG9jayBidXN5XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQ1NCVVNZOwotICAgIH0gCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmxvY2FsLT50eF9jY3NfbG9jaykpIHsKKwkJREVCVUcoMSwgInJheV9jcyB0eF9jY3NfbG9jayBidXN5XG4iKTsKKwkJcmV0dXJuIEVDQ1NCVVNZOworCX0KIAotICAgIGZvciAoaT0wOyBpIDwgTlVNQkVSX09GX1RYX0NDUzsgaSsrKSB7Ci0gICAgICAgIGlmIChyZWFkYigmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgewotICAgICAgICAgICAgd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcytpKS0+bGluayk7CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9UWF9DQ1M7IGkrKykgeworCQlpZiAocmVhZGIoJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgeworCQkJd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpOworCQkJd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzICsgaSktPmxpbmspOwogCQkJbG9jYWwtPnR4X2Njc19sb2NrID0gMDsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQorCQkJcmV0dXJuIGk7CisJCX0KKwl9CiAJbG9jYWwtPnR4X2Njc19sb2NrID0gMDsKLSAgICBERUJVRygyLCJyYXlfY3MgRVJST1Igbm8gZnJlZSB0eCBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7Ci0gICAgcmV0dXJuIEVDQ1NGVUxMOworCURFQlVHKDIsICJyYXlfY3MgRVJST1Igbm8gZnJlZSB0eCBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7CisJcmV0dXJuIEVDQ1NGVUxMOwogfSAvKiBnZXRfZnJlZV90eF9jY3MgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogR2V0IG5leHQgZnJlZSBDQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUmV0dXJuIC0gaW5kZXggb2YgY3VycmVudCBjY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGludCBnZXRfZnJlZV9jY3MocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBnZXRfZnJlZV9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gRUNBUkRHT05FOwotICAgIH0KLSAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCZsb2NhbC0+Y2NzX2xvY2spKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBjY3NfbG9jayBidXN5XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQ1NCVVNZOwotICAgIH0gCisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGdldF9mcmVlX2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiBFQ0FSREdPTkU7CisJfQorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZsb2NhbC0+Y2NzX2xvY2spKSB7CisJCURFQlVHKDEsICJyYXlfY3MgY2NzX2xvY2sgYnVzeVxuIik7CisJCXJldHVybiBFQ0NTQlVTWTsKKwl9CiAKLSAgICBmb3IgKGkgPSBOVU1CRVJfT0ZfVFhfQ0NTOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7Ci0gICAgICAgIGlmIChyZWFkYigmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgewotICAgICAgICAgICAgd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcytpKS0+bGluayk7CisJZm9yIChpID0gTlVNQkVSX09GX1RYX0NDUzsgaSA8IE5VTUJFUl9PRl9DQ1M7IGkrKykgeworCQlpZiAocmVhZGIoJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgeworCQkJd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpOworCQkJd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzICsgaSktPmxpbmspOwogCQkJbG9jYWwtPmNjc19sb2NrID0gMDsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQorCQkJcmV0dXJuIGk7CisJCX0KKwl9CiAJbG9jYWwtPmNjc19sb2NrID0gMDsKLSAgICBERUJVRygxLCJyYXlfY3MgRVJST1Igbm8gZnJlZSBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7Ci0gICAgcmV0dXJuIEVDQ1NGVUxMOworCURFQlVHKDEsICJyYXlfY3MgRVJST1Igbm8gZnJlZSBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7CisJcmV0dXJuIEVDQ1NGVUxMOwogfSAvKiBnZXRfZnJlZV9jY3MgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXV0aGVudGljYXRlX3RpbWVvdXQodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOwotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgQXV0aGVudGljYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnQgZmFpbGVkIgotICAgICAgICIgLSB0aW1lb3V0XG4iKTsKLSAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgQXV0aGVudGljYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnQgZmFpbGVkIgorCSAgICAgICAiIC0gdGltZW91dFxuIik7CisJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IGFzY190b19pbnQoY2hhciBhKQogewotICAgIGlmIChhIDwgJzAnKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEgPD0gJzknKSByZXR1cm4gKGEgLSAnMCcpOwotICAgIGlmIChhIDwgJ0EnKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEgPD0gJ0YnKSByZXR1cm4gKDEwICsgYSAtICdBJyk7Ci0gICAgaWYgKGEgPCAnYScpIHJldHVybiAtMTsKLSAgICBpZiAoYSA8PSAnZicpIHJldHVybiAoMTAgKyBhIC0gJ2EnKTsKLSAgICByZXR1cm4gLTE7CisJaWYgKGEgPCAnMCcpCisJCXJldHVybiAtMTsKKwlpZiAoYSA8PSAnOScpCisJCXJldHVybiAoYSAtICcwJyk7CisJaWYgKGEgPCAnQScpCisJCXJldHVybiAtMTsKKwlpZiAoYSA8PSAnRicpCisJCXJldHVybiAoMTAgKyBhIC0gJ0EnKTsKKwlpZiAoYSA8ICdhJykKKwkJcmV0dXJuIC0xOworCWlmIChhIDw9ICdmJykKKwkJcmV0dXJuICgxMCArIGEgLSAnYScpOworCXJldHVybiAtMTsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCBwYXJzZV9hZGRyKGNoYXIgKmluX3N0ciwgVUNIQVIgKm91dCkKIHsKLSAgICBpbnQgbGVuOwotICAgIGludCBpLGosazsKLSAgICBpbnQgc3RhdHVzOwotICAgIAotICAgIGlmIChpbl9zdHIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgaWYgKChsZW4gPSBzdHJsZW4oaW5fc3RyKSkgPCAyKSByZXR1cm4gMDsKLSAgICBtZW1zZXQob3V0LCAwLCBBRERSTEVOKTsKKwlpbnQgbGVuOworCWludCBpLCBqLCBrOworCWludCBzdGF0dXM7CiAKLSAgICBzdGF0dXMgPSAxOwotICAgIGogPSBsZW4gLSAxOwotICAgIGlmIChqID4gMTIpIGogPSAxMjsKLSAgICBpID0gNTsKLSAgICAKLSAgICB3aGlsZSAoaiA+IDApCi0gICAgewotICAgICAgICBpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpIG91dFtpXSA9IGs7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDA7CisJaWYgKGluX3N0ciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoKGxlbiA9IHN0cmxlbihpbl9zdHIpKSA8IDIpCisJCXJldHVybiAwOworCW1lbXNldChvdXQsIDAsIEFERFJMRU4pOwogCi0gICAgICAgIGlmIChqID09IDApIGJyZWFrOwotICAgICAgICBpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpIG91dFtpXSArPSBrIDw8IDQ7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDA7Ci0gICAgICAgIGlmICghaS0tKSBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKKwlzdGF0dXMgPSAxOworCWogPSBsZW4gLSAxOworCWlmIChqID4gMTIpCisJCWogPSAxMjsKKwlpID0gNTsKKworCXdoaWxlIChqID4gMCkgeworCQlpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpCisJCQlvdXRbaV0gPSBrOworCQllbHNlCisJCQlyZXR1cm4gMDsKKworCQlpZiAoaiA9PSAwKQorCQkJYnJlYWs7CisJCWlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkKKwkJCW91dFtpXSArPSBrIDw8IDQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCQlpZiAoIWktLSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJheV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBuZXRfZGV2aWNlX3N0YXRzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuICZsb2NhbC0+c3RhdHM7Ci0gICAgfQotICAgIGlmIChyZWFkYigmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KSkKLSAgICB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPm1yeF9vdmVyZmxvdykpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X292ZXJmbG93KTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCk7Ci0gICAgfQotICAgIGlmIChyZWFkYigmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KSkKLSAgICB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKSk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KTsKLSAgICB9Ci0gICAgaWYgKHJlYWRiKCZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpKQotICAgIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPnJ4X2hlY19lcnJvcikpOwotICAgICAgICB3cml0ZWIoMCwmcC0+cnhfaGVjX2Vycm9yKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCk7Ci0gICAgfQotICAgIHJldHVybiAmbG9jYWwtPnN0YXRzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBuZXRfZGV2aWNlX3N0YXRzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuICZsb2NhbC0+c3RhdHM7CisJfQorCWlmIChyZWFkYigmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KSkgeworCQlsb2NhbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5tcnhfb3ZlcmZsb3cpKTsKKwkJd3JpdGViKDAsICZwLT5tcnhfb3ZlcmZsb3cpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCk7CisJfQorCWlmIChyZWFkYigmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KSkgeworCQlsb2NhbC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPQorCQkgICAgc3dhYjE2KHJlYWR3KCZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpKTsKKwkJd3JpdGViKDAsICZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCk7CisJfQorCWlmIChyZWFkYigmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KSkgeworCQlsb2NhbC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+cnhfaGVjX2Vycm9yKSk7CisJCXdyaXRlYigwLCAmcC0+cnhfaGVjX2Vycm9yKTsKKwkJd3JpdGViKDAsICZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpOworCX0KKwlyZXR1cm4gJmxvY2FsLT5zdGF0czsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9wYXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIG9iamlkLCBVQ0hBUiAqdmFsdWUsIGludCBsZW4pCitzdGF0aWMgdm9pZCByYXlfdXBkYXRlX3Bhcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgb2JqaWQsIFVDSEFSICp2YWx1ZSwKKwkJCSAgICBpbnQgbGVuKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgY2NzaW5kZXg7CisJaW50IGk7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX3Bhcm0gLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV91cGRhdGVfcGFybSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CiAKLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKLSAgICAgICAgREVCVUcoMCwicmF5X3VwZGF0ZV9wYXJtIC0gTm8gZnJlZSBjY3NcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX1VQREFURV9QQVJBTVMsICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYihvYmppZCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ub2JqZWN0X2lkKTsKLSAgICB3cml0ZWIoMSwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ubnVtYmVyX29iamVjdHMpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5mYWlsdXJlX2NhdXNlKTsKLSAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgewotICAgICAgICB3cml0ZWIodmFsdWVbaV0sIGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSk7Ci0gICAgfQotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9CisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgeworCQlERUJVRygwLCAicmF5X3VwZGF0ZV9wYXJtIC0gTm8gZnJlZSBjY3NcbiIpOworCQlyZXR1cm47CisJfQorCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX1VQREFURV9QQVJBTVMsICZwY2NzLT5jbWQpOworCXdyaXRlYihvYmppZCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ub2JqZWN0X2lkKTsKKwl3cml0ZWIoMSwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ubnVtYmVyX29iamVjdHMpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5mYWlsdXJlX2NhdXNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJd3JpdGViKHZhbHVlW2ldLCBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UpOworCX0KKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDAsICJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCX0KIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhbGwpCiB7Ci0gICAgc3RydWN0IGRldl9tY19saXN0ICpkbWksICoqZG1pcDsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBpID0gMDsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgdm9pZCBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pLCAqKmRtaXA7CisJaW50IGNjc2luZGV4OworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgaSA9IDA7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXZvaWQgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRTsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9tdWx0aV9saXN0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbHNlIAotICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX211bHRpX2xpc3QoJXApXG4iLGRldik7Ci0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDEsInJheV91cGRhdGVfbXVsdGkgLSBObyBmcmVlIGNjc1xuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNULCAmcGNjcy0+Y21kKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfdXBkYXRlX211bHRpX2xpc3QgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfSBlbHNlCisJCURFQlVHKDIsICJyYXlfdXBkYXRlX211bHRpX2xpc3QoJXApXG4iLCBkZXYpOworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKKwkJREVCVUcoMSwgInJheV91cGRhdGVfbXVsdGkgLSBObyBmcmVlIGNjc1xuIik7CisJCXJldHVybjsKKwl9CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNULCAmcGNjcy0+Y21kKTsKIAotICAgIGlmIChhbGwpIHsKLSAgICAgICAgd3JpdGViKDB4ZmYsICZwY2NzLT52YXIpOwotICAgICAgICBsb2NhbC0+bnVtX211bHRpID0gMHhmZjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIENvcHkgdGhlIGtlcm5lbCdzIGxpc3Qgb2YgTUMgYWRkcmVzc2VzIHRvIGNhcmQgKi8KLSAgICAgICAgZm9yIChkbWlwPSZkZXYtPm1jX2xpc3Q7IChkbWk9KmRtaXApIT1OVUxMOyBkbWlwPSZkbWktPm5leHQpIHsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHAsIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV91cGRhdGVfbXVsdGkgYWRkIGFkZHIgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLGRtaS0+ZG1pX2FkZHJbMF0sZG1pLT5kbWlfYWRkclsxXSxkbWktPmRtaV9hZGRyWzJdLGRtaS0+ZG1pX2FkZHJbM10sZG1pLT5kbWlfYWRkcls0XSxkbWktPmRtaV9hZGRyWzVdKTsKLSAgICAgICAgICAgIHAgKz0gRVRIX0FMRU47Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPiAyNTYvQUREUkxFTikgaSA9IDI1Ni9BRERSTEVOOwotICAgICAgICB3cml0ZWIoKFVDSEFSKWksICZwY2NzLT52YXIpOwotICAgICAgICBERUJVRygxLCJyYXlfY3MgdXBkYXRlX211bHRpICVkIGFkZHJlc3NlcyBpbiBsaXN0XG4iLCBpKTsKLSAgICAgICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgICAgIGxvY2FsLT5udW1fbXVsdGkgPSBpOwotICAgIH0KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyB1cGRhdGVfbXVsdGkgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQorCWlmIChhbGwpIHsKKwkJd3JpdGViKDB4ZmYsICZwY2NzLT52YXIpOworCQlsb2NhbC0+bnVtX211bHRpID0gMHhmZjsKKwl9IGVsc2UgeworCQkvKiBDb3B5IHRoZSBrZXJuZWwncyBsaXN0IG9mIE1DIGFkZHJlc3NlcyB0byBjYXJkICovCisJCWZvciAoZG1pcCA9ICZkZXYtPm1jX2xpc3Q7IChkbWkgPSAqZG1pcCkgIT0gTlVMTDsKKwkJICAgICBkbWlwID0gJmRtaS0+bmV4dCkgeworCQkJbWVtY3B5X3RvaW8ocCwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfdXBkYXRlX211bHRpIGFkZCBhZGRyICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCSAgICAgIGRtaS0+ZG1pX2FkZHJbMF0sIGRtaS0+ZG1pX2FkZHJbMV0sCisJCQkgICAgICBkbWktPmRtaV9hZGRyWzJdLCBkbWktPmRtaV9hZGRyWzNdLAorCQkJICAgICAgZG1pLT5kbWlfYWRkcls0XSwgZG1pLT5kbWlfYWRkcls1XSk7CisJCQlwICs9IEVUSF9BTEVOOworCQkJaSsrOworCQl9CisJCWlmIChpID4gMjU2IC8gQUREUkxFTikKKwkJCWkgPSAyNTYgLyBBRERSTEVOOworCQl3cml0ZWIoKFVDSEFSKSBpLCAmcGNjcy0+dmFyKTsKKwkJREVCVUcoMSwgInJheV9jcyB1cGRhdGVfbXVsdGkgJWQgYWRkcmVzc2VzIGluIGxpc3RcbiIsIGkpOworCQkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwkJbG9jYWwtPm51bV9tdWx0aSA9IGk7CisJfQorCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwKKwkJICAgICAgInJheV9jcyB1cGRhdGVfbXVsdGkgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJfQogfSAvKiBlbmQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIFVDSEFSIHByb21pc2M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJVUNIQVIgcHJvbWlzYzsKIAotICAgIERFQlVHKDIsInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QoJXApXG4iLGRldik7CisJREVCVUcoMiwgInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QoJXApXG4iLCBkZXYpOwogCi0gICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDApIHsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvblxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMTsKLSAgICAgICAgICAgIHByb21pc2MgPSAxOwotICAgICAgICAgICAgcmF5X3VwZGF0ZV9wYXJtKGRldiwgIE9CSklEX3Byb21pc2N1b3VzX21vZGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMSkgewotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9mZlxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMDsKLSAgICAgICAgICAgIHByb21pc2MgPSAwOwotICAgICAgICAgICAgcmF5X3VwZGF0ZV9wYXJtKGRldiwgIE9CSklEX3Byb21pc2N1b3VzX21vZGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKLSAgICAgICAgfQotICAgIH0KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDApIHsKKwkJCURFQlVHKDEsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb25cbiIpOworCQkJbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDE7CisJCQlwcm9taXNjID0gMTsKKwkJCXJheV91cGRhdGVfcGFybShkZXYsIE9CSklEX3Byb21pc2N1b3VzX21vZGUsCisJCQkJCSZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMSkgeworCQkJREVCVUcoMSwgInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvZmZcbiIpOworCQkJbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDA7CisJCQlwcm9taXNjID0gMDsKKwkJCXJheV91cGRhdGVfcGFybShkZXYsIE9CSklEX3Byb21pc2N1b3VzX21vZGUsCisJCQkJCSZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCQl9CisJfQogCi0gICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDEpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+bnVtX211bHRpICE9IGRldi0+bWNfY291bnQpIHJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDApOwotICAgIH0KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMSk7CisJZWxzZSB7CisJCWlmIChsb2NhbC0+bnVtX211bHRpICE9IGRldi0+bWNfY291bnQpCisJCQlyYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAwKTsKKwl9CiB9IC8qIGVuZCBzZXRfbXVsdGljYXN0X2xpc3QgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQWxsIHJvdXRpbmVzIGJlbG93IGhlcmUgYXJlIHJ1biBhdCBpbnRlcnJ1cHQgdGltZS4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIHJheV9kZXZfdCAqbG9jYWw7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjczsKLSAgICBVQ0hBUiByY3NpbmRleDsKLSAgICBVQ0hBUiB0bXA7Ci0gICAgVUNIQVIgY21kOwotICAgIFVDSEFSIHN0YXR1czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCXJheV9kZXZfdCAqbG9jYWw7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCByY3MgX19pb21lbSAqcHJjczsKKwlVQ0hBUiByY3NpbmRleDsKKwlVQ0hBUiB0bXA7CisJVUNIQVIgY21kOworCVVDSEFSIHN0YXR1czsKIAotICAgIGlmIChkZXYgPT0gTlVMTCkgLyogTm90ZSB0aGF0IHdlIHdhbnQgaW50ZXJydXB0cyB3aXRoIGRldi0+c3RhcnQgPT0gMCAqLwotCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoZGV2ID09IE5VTEwpCS8qIE5vdGUgdGhhdCB3ZSB3YW50IGludGVycnVwdHMgd2l0aCBkZXYtPnN0YXJ0ID09IDAgKi8KKwkJcmV0dXJuIElSUV9OT05FOwogCi0gICAgREVCVUcoNCwicmF5X2NzOiBpbnRlcnJ1cHQgZm9yICpkZXY9JXBcbiIsZGV2KTsKKwlERUJVRyg0LCAicmF5X2NzOiBpbnRlcnJ1cHQgZm9yICpkZXY9JXBcbiIsIGRldik7CiAKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbGluayA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKWxvY2FsLT5maW5kZXI7Ci0gICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuIElSUV9OT05FOwotICAgIH0KLSAgICByY3NpbmRleCA9IHJlYWRiKCYoKHN0cnVjdCBzY2IgX19pb21lbSAqKShsb2NhbC0+c3JhbSkpLT5yY3NfaW5kZXgpOworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopbG9jYWwtPmZpbmRlcjsKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgeworCQlERUJVRygyLAorCQkgICAgICAicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlyY3NpbmRleCA9IHJlYWRiKCYoKHN0cnVjdCBzY2IgX19pb21lbSAqKShsb2NhbC0+c3JhbSkpLT5yY3NfaW5kZXgpOwogCi0gICAgaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpCi0gICAgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIscmNzaW5kZXgpOwotICAgICAgICBjbGVhcl9pbnRlcnJ1cHQobG9jYWwpOwotICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Ci0gICAgfQotICAgIGlmIChyY3NpbmRleCA8IE5VTUJFUl9PRl9DQ1MpIC8qIElmIGl0J3MgYSByZXR1cm5lZCBDQ1MgKi8KLSAgICB7Ci0gICAgICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKLSAgICAgICAgY21kID0gcmVhZGIoJnBjY3MtPmNtZCk7Ci0gICAgICAgIHN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgc3dpdGNoIChjbWQpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVM6IC8qIEhhcHBlbnMgaW4gZmlybXdhcmUgc29tZWRheSAqLwotICAgICAgICAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIE9LXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIGZhaWxcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1VQREFURV9QQVJBTVM6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZG9uZVxuIik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgdG1wID0gcmVhZGIoJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uZmFpbHVyZV9jYXVzZSk7Ci0gICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZmFpbGVkIC0gcmVhc29uICVkXG4iLHRtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfUkVQT1JUX1BBUkFNUzoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgcmVwb3J0IHBhcmFtcyBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19VUERBVEVfTVVMVElDQVNUX0xJU1Q6IC8qIE5vdGUgdGhhdCB0aGlzIENDUyBpc24ndCByZXR1cm5lZCAqLwotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBDQ1MgVXBkYXRlIE11bHRpY2FzdCBMaXN0IGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1VQREFURV9QT1dFUl9TQVZJTkdTX01PREU6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwb3dlciBzYXZlIG1vZGUgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU1RBUlRfTkVUV09SSzoKLSAgICAgICAgY2FzZSBDQ1NfSk9JTl9ORVRXT1JLOgotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIGlmIChyZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsubmV0X2luaXRpYXRlZCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0ZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW5lZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCxwY2NzLT52YXIuc3RhcnRfbmV0d29yay5ic3NpZCxBRERSTEVOKTsKKwlpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkgeworCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLCByY3NpbmRleCk7CisJCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKHJjc2luZGV4IDwgTlVNQkVSX09GX0NDUykgeyAvKiBJZiBpdCdzIGEgcmV0dXJuZWQgQ0NTICovCisJCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKKwkJY21kID0gcmVhZGIoJnBjY3MtPmNtZCk7CisJCXN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVM6CS8qIEhhcHBlbnMgaW4gZmlybXdhcmUgc29tZWRheSAqLworCQkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIE9LXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgZmFpbFxuIik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVVBEQVRFX1BBUkFNUzoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZG9uZVxuIik7CisJCQlpZiAoc3RhdHVzICE9IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJdG1wID0KKwkJCQkgICAgcmVhZGIoJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uCisJCQkJCSAgZmFpbHVyZV9jYXVzZSk7CisJCQkJREVCVUcoMCwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGZhaWxlZCAtIHJlYXNvbiAlZFxuIiwKKwkJCQkgICAgICB0bXApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1JFUE9SVF9QQVJBTVM6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByZXBvcnQgcGFyYW1zIGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVDoJLyogTm90ZSB0aGF0IHRoaXMgQ0NTIGlzbid0IHJldHVybmVkICovCisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgQ0NTIFVwZGF0ZSBNdWx0aWNhc3QgTGlzdCBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19VUERBVEVfUE9XRVJfU0FWSU5HU19NT0RFOgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwb3dlciBzYXZlIG1vZGUgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU1RBUlRfTkVUV09SSzoKKwkJY2FzZSBDQ1NfSk9JTl9ORVRXT1JLOgorCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCWlmIChyZWFkYgorCQkJCSAgICAoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpID09CisJCQkJICAgIDEpIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnRlZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCX0gZWxzZSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW5lZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCX0KKwkJCQltZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLAorCQkJCQkgICAgICBwY2NzLT52YXIuc3RhcnRfbmV0d29yay5ic3NpZCwKKwkJCQkJICAgICAgQUREUkxFTik7CiAKLSAgICAgICAgICAgICAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IDM7Ci0gICAgICAgICAgICAgICAgZWxzZSBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfZGVmYXVsdF90eF9yYXRlKTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+ZW5jcnlwdGlvbiA9IHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5lbmNyeXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNuaWZmZXIgJiYgKGxvY2FsLT5uZXRfdHlwZSA9PSBJTkZSQSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIShsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGUobG9jYWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0ZBSUxFRDsKKwkJCQlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQorCQkJCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IDM7CisJCQkJZWxzZQorCQkJCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9CisJCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuCisJCQkJCQkgIG5ldF9kZWZhdWx0X3R4X3JhdGUpOworCQkJCWxvY2FsLT5lbmNyeXB0aW9uID0KKwkJCQkgICAgcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmVuY3J5cHRpb24pOworCQkJCWlmICghc25pZmZlciAmJiAobG9jYWwtPm5ldF90eXBlID09IElORlJBKQorCQkJCSAgICAmJiAhKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpKSB7CisJCQkJCWF1dGhlbnRpY2F0ZShsb2NhbCk7CisJCQkJfQorCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOworCQkJfSBlbHNlIHsKKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9GQUlMRUQ7CiAKLSAgICAgICAgICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqNTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX1NUQVJUX05FVFdPUkspIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydCBmYWlsZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZzdGFydF9uZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW4gZmFpbGVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TVEFSVF9BU1NPQ0lBVElPTjoKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0NPTVBMRVRFOwotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBhc3NvY2lhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgYXNzb2NpYXRpb24gZmFpbGVkLFxuIik7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVFhfUkVRVUVTVDoKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBERUJVRygzLCJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgY29tcGxldGVcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGZhaWxlZFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNuaWZmZXIpIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0gICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVEVTVF9NRU1PUlk6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IG1lbSB0ZXN0IGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NIVVRET1dOOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyByZXR1cm5lZCAtIFNodXRkb3duXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19EVU1QX01FTU9SWToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgZHVtcCBtZW1vcnkgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU1RBUlRfVElNRVI6Ci0gICAgICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0IERJTkcgLSByYXlsaW5rIHRpbWVyIGV4cGlyZWRcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIDB4JXggcmV0dXJuZWQgMHgleFxuIixcCi0gICAgICAgICAgICAgICAgICByY3NpbmRleCwgY21kKTsKLSAgICAgICAgfQotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQotICAgIGVsc2UgLyogSXQncyBhbiBSQ1MgKi8KLSAgICB7Ci0gICAgICAgIHByY3MgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKLSAgICAKLSAgICAgICAgc3dpdGNoIChyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSkKLSAgICAgICAgewotICAgICAgICBjYXNlIFBST0NFU1NfUlhfUEFDS0VUOgotICAgICAgICAgICAgcmF5X3J4KGRldiwgbG9jYWwsIHByY3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUkVKT0lOX05FVF9DT01QTEVURToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgcmVqb2luIG5ldCBjb21wbGV0ZVxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKLSAgICAgICAgICAgIC8qIGRvIHdlIG5lZWQgdG8gY2xlYXIgdHggYnVmZmVycyBDQ1Mncz8gKi8KLSAgICAgICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNuaWZmZXIpIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLCBwcmNzLT52YXIucmVqb2luX25ldF9jb21wbGV0ZS5ic3NpZCwgQUREUkxFTik7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIG5ldyBCU1NJRCA9ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmJzc19pZFswXSwgbG9jYWwtPmJzc19pZFsxXSwgbG9jYWwtPmJzc19pZFsyXSxcCi0gICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmJzc19pZFszXSwgbG9jYWwtPmJzc19pZFs0XSwgbG9jYWwtPmJzc19pZFs1XSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbmlmZmVyKSBhdXRoZW50aWNhdGUobG9jYWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUk9BTUlOR19JTklUSUFURUQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHJvYW1pbmcgaW5pdGlhdGVkXG4iKTsgCi0gICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEpBUEFOX0NBTExfU0lHTl9SWEQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGphcGFuIGNhbGwgc2lnbiByeFxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBVbmV4cGVjdGVkIGludGVycnVwdCBmb3IgUkNTIDB4JXggY21kID0gMHgleFxuIixcCi0gICAgICAgICAgICAgICAgICByY3NpbmRleCwgKHVuc2lnbmVkIGludCkgcmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KLSAgICBjbGVhcl9pbnRlcnJ1cHQobG9jYWwpOwotICAgIHJldHVybiBJUlFfSEFORExFRDsKKwkJCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCQkJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiA1OworCQkJCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJCQkJaWYgKHN0YXR1cyA9PSBDQ1NfU1RBUlRfTkVUV09SSykgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydCBmYWlsZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnN0YXJ0X25ldDsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luIGZhaWxlZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7CisJCQkJfQorCQkJCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19TVEFSVF9BU1NPQ0lBVElPTjoKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0NPTVBMRVRFOworCQkJCURFQlVHKDAsICJyYXlfY3MgYXNzb2NpYXRpb24gc3VjY2Vzc2Z1bFxuIik7CisJCQl9IGVsc2UgeworCQkJCURFQlVHKDAsICJyYXlfY3MgYXNzb2NpYXRpb24gZmFpbGVkLFxuIik7CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7CisJCQkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1RYX1JFUVVFU1Q6CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJREVCVUcoMywKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGNvbXBsZXRlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGZhaWxlZFxuIik7CisJCQl9CisJCQlpZiAoIXNuaWZmZXIpCisJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCWJyZWFrOworCQljYXNlIENDU19URVNUX01FTU9SWToKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IG1lbSB0ZXN0IGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NIVVRET1dOOgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIHJldHVybmVkIC0gU2h1dGRvd25cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX0RVTVBfTUVNT1JZOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgZHVtcCBtZW1vcnkgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU1RBUlRfVElNRVI6CisJCQlERUJVRygyLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgRElORyAtIHJheWxpbmsgdGltZXIgZXhwaXJlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyAweCV4IHJldHVybmVkIDB4JXhcbiIsCisJCQkgICAgICByY3NpbmRleCwgY21kKTsKKwkJfQorCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJfSBlbHNlIHsgLyogSXQncyBhbiBSQ1MgKi8KKworCQlwcmNzID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7CisKKwkJc3dpdGNoIChyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSkgeworCQljYXNlIFBST0NFU1NfUlhfUEFDS0VUOgorCQkJcmF5X3J4KGRldiwgbG9jYWwsIHByY3MpOworCQkJYnJlYWs7CisJCWNhc2UgUkVKT0lOX05FVF9DT01QTEVURToKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJlam9pbiBuZXQgY29tcGxldGVcbiIpOworCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7CisJCQkvKiBkbyB3ZSBuZWVkIHRvIGNsZWFyIHR4IGJ1ZmZlcnMgQ0NTJ3M/ICovCisJCQlpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7CisJCQkJaWYgKCFzbmlmZmVyKQorCQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkJfSBlbHNlIHsKKwkJCQltZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLAorCQkJCQkgICAgICBwcmNzLT52YXIucmVqb2luX25ldF9jb21wbGV0ZS4KKwkJCQkJICAgICAgYnNzaWQsIEFERFJMRU4pOworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBuZXcgQlNTSUQgPSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJICAgICAgbG9jYWwtPmJzc19pZFswXSwgbG9jYWwtPmJzc19pZFsxXSwKKwkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzJdLCBsb2NhbC0+YnNzX2lkWzNdLAorCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbNF0sIGxvY2FsLT5ic3NfaWRbNV0pOworCQkJCWlmICghc25pZmZlcikKKwkJCQkJYXV0aGVudGljYXRlKGxvY2FsKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJPQU1JTkdfSU5JVElBVEVEOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcm9hbWluZyBpbml0aWF0ZWRcbiIpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7CisJCQlicmVhazsKKwkJY2FzZSBKQVBBTl9DQUxMX1NJR05fUlhEOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgamFwYW4gY2FsbCBzaWduIHJ4XG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgVW5leHBlY3RlZCBpbnRlcnJ1cHQgZm9yIFJDUyAweCV4IGNtZCA9IDB4JXhcbiIsCisJCQkgICAgICByY3NpbmRleCwKKwkJCSAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3MtPmJ1ZmZlcl9zdGF0dXMpOworCX0KKwljbGVhcl9pbnRlcnJ1cHQobG9jYWwpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0gLyogcmF5X2ludGVycnVwdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKQorc3RhdGljIHZvaWQgcmF5X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHJheV9kZXZfdCAqbG9jYWwsCisJCSAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcykKIHsKLSAgICBpbnQgcnhfbGVuOwotICAgIHVuc2lnbmVkIGludCBwa3RfYWRkcjsKLSAgICB2b2lkIF9faW9tZW0gKnBtc2c7Ci0gICAgREVCVUcoNCwicmF5X3J4IHByb2Nlc3MgcnggcGFja2V0XG4iKTsKKwlpbnQgcnhfbGVuOworCXVuc2lnbmVkIGludCBwa3RfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBtc2c7CisJREVCVUcoNCwgInJheV9yeCBwcm9jZXNzIHJ4IHBhY2tldFxuIik7CiAKLSAgICAvKiBDYWxjdWxhdGUgYWRkcmVzcyBvZiBwYWNrZXQgd2l0aGluIFJ4IGJ1ZmZlciAqLwotICAgIHBrdF9hZGRyID0gKChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkgJiBSWF9CVUZGX0VORDsKLSAgICAvKiBMZW5ndGggb2YgZmlyc3QgcGFja2V0IGZyYWdtZW50ICovCi0gICAgcnhfbGVuID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKKwkvKiBDYWxjdWxhdGUgYWRkcmVzcyBvZiBwYWNrZXQgd2l0aGluIFJ4IGJ1ZmZlciAqLworCXBrdF9hZGRyID0gKChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwgOCkKKwkJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKSAmIFJYX0JVRkZfRU5EOworCS8qIExlbmd0aCBvZiBmaXJzdCBwYWNrZXQgZnJhZ21lbnQgKi8KKwlyeF9sZW4gPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCisJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOwogCi0gICAgbG9jYWwtPmxhc3RfcnNsID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfc2lnX2xldik7Ci0gICAgcG1zZyA9IGxvY2FsLT5ybWVtICsgcGt0X2FkZHI7Ci0gICAgc3dpdGNoKHJlYWRiKHBtc2cpKQotICAgIHsKLSAgICBjYXNlIERBVEFfVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGRhdGEgdHlwZVxuIik7Ci0gICAgICAgIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVVRIRU5USUNfVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGF1dGhlbnRpYyB0eXBlXG4iKTsKLSAgICAgICAgaWYgKHNuaWZmZXIpIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgZWxzZSByeF9hdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERFQVVUSEVOVElDX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBkZWF1dGggdHlwZVxuIik7Ci0gICAgICAgIGlmIChzbmlmZmVyKSByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGVsc2UgcnhfZGVhdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5VTExfTVNHX1RZUEU6Ci0gICAgICAgIERFQlVHKDMsInJheV9jcyByeCBOVUxMIG1zZ1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkVBQ09OX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBiZWFjb24gdHlwZVxuIik7Ci0gICAgICAgIGlmIChzbmlmZmVyKSByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJbG9jYWwtPmxhc3RfcnNsID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfc2lnX2xldik7CisJcG1zZyA9IGxvY2FsLT5ybWVtICsgcGt0X2FkZHI7CisJc3dpdGNoIChyZWFkYihwbXNnKSkgeworCWNhc2UgREFUQV9UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGRhdGEgdHlwZVxuIik7CisJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBBVVRIRU5USUNfVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBhdXRoZW50aWMgdHlwZVxuIik7CisJCWlmIChzbmlmZmVyKQorCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQllbHNlCisJCQlyeF9hdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQlicmVhazsKKwljYXNlIERFQVVUSEVOVElDX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggZGVhdXRoIHR5cGVcbiIpOworCQlpZiAoc25pZmZlcikKKwkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJZWxzZQorCQkJcnhfZGVhdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQlicmVhazsKKwljYXNlIE5VTExfTVNHX1RZUEU6CisJCURFQlVHKDMsICJyYXlfY3MgcnggTlVMTCBtc2dcbiIpOworCQlicmVhazsKKwljYXNlIEJFQUNPTl9UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGJlYWNvbiB0eXBlXG4iKTsKKwkJaWYgKHNuaWZmZXIpCisJCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CiAKLSAgICAgICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIChVQ0hBUiAqKSZsb2NhbC0+bGFzdF9iY24sIHBrdF9hZGRyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfbGVuIDwgc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpID8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2xlbiA6IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSk7CisJCWNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCAoVUNIQVIgKikgJmxvY2FsLT5sYXN0X2JjbiwgcGt0X2FkZHIsCisJCQkJICByeF9sZW4gPCBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkgPworCQkJCSAgcnhfbGVuIDogc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpKTsKIAotCWxvY2FsLT5iZWFjb25fcnhlZCA9IDE7Ci0gICAgICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBzbyB0aGUgY2FyZCBjb3VudGVycyBuZXZlciBvdmVyZmxvdyAqLwotICAgICAgICByYXlfZ2V0X3N0YXRzKGRldik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVRygwLCJyYXlfY3MgdW5rbm93biBwa3QgdHlwZSAlMnhcbiIsICh1bnNpZ25lZCBpbnQpIHJlYWRiKHBtc2cpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCQlsb2NhbC0+YmVhY29uX3J4ZWQgPSAxOworCQkvKiBHZXQgdGhlIHN0YXRpc3RpY3Mgc28gdGhlIGNhcmQgY291bnRlcnMgbmV2ZXIgb3ZlcmZsb3cgKi8KKwkJcmF5X2dldF9zdGF0cyhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVRygwLCAicmF5X2NzIHVua25vd24gcGt0IHR5cGUgJTJ4XG4iLAorCQkgICAgICAodW5zaWduZWQgaW50KXJlYWRiKHBtc2cpKTsKKwkJYnJlYWs7CisJfQogCiB9IC8qIGVuZCByYXlfcnggKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIHVuc2lnbmVkIGludCBwa3RfYWRkciwgCi0gICAgICAgICAgICAgaW50IHJ4X2xlbikKK3N0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQogewotICAgIHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotICAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIFVDSEFSICpyeF9wdHI7Ci0gICAgaW50IHRvdGFsX2xlbjsKLSAgICBpbnQgdG1wOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCVVDSEFSICpyeF9wdHI7CisJaW50IHRvdGFsX2xlbjsKKwlpbnQgdG1wOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIGludCBzaWdsZXYgPSBsb2NhbC0+bGFzdF9yc2w7Ci0gICAgdV9jaGFyIGxpbmtzcmNhZGRyW0VUSF9BTEVOXTsJLyogT3RoZXIgZW5kIG9mIHRoZSB3aXJlbGVzcyBsaW5rICovCisJaW50IHNpZ2xldiA9IGxvY2FsLT5sYXN0X3JzbDsKKwl1X2NoYXIgbGlua3NyY2FkZHJbRVRIX0FMRU5dOwkvKiBPdGhlciBlbmQgb2YgdGhlIHdpcmVsZXNzIGxpbmsgKi8KICNlbmRpZgogCi0gICAgaWYgKCFzbmlmZmVyKSB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGUpIHsKKwlpZiAoIXNuaWZmZXIpIHsKKwkJaWYgKHRyYW5zbGF0ZSkgewogLyogVEJEIGxlbmd0aCBuZWVkcyBmaXhpbmcgZm9yIHRyYW5zbGF0ZWQgaGVhZGVyICovCi0gICAgICAgICAgICBpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8Ci0gICAgICAgICAgICAgICAgcnhfbGVuID4gKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArIEZDU19MRU4pKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIixyeF9sZW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIC8qIGVuY2Fwc3VsYXRlZCBldGhlcm5ldCAqLyB7Ci0gICAgICAgICAgICBpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8Ci0gICAgICAgICAgICAgICAgcnhfbGVuID4gKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArIEZDU19MRU4pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLHJ4X2xlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIERFQlVHKDQsInJheV9jcyByeF9kYXRhIHBhY2tldFxuIik7Ci0gICAgLyogSWYgZnJhZ21lbnRlZCBwYWNrZXQsIHZlcmlmeSBzaXplcyBvZiBmcmFnbWVudHMgYWRkIHVwICovCi0gICAgaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHJ4J2VkIGZyYWdtZW50XG4iKTsKLSAgICAgICAgdG1wID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICAgICAgKyAgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMV0pOwotICAgICAgICB0b3RhbF9sZW4gPSB0bXA7Ci0gICAgICAgIHByY3NsaW5rID0gcHJjczsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgdG1wIC09IChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgKyAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7Ci0gICAgICAgICAgICBpZiAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpID09IDB4RkYKLSAgICAgICAgICAgICAgICB8fCB0bXAgPCAwKSBicmVhazsKLSAgICAgICAgICAgIHByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCi0gICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPmxpbmtfZmllbGQpOwotICAgICAgICB9IHdoaWxlICgxKTsKKwkJCWlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKKwkJCSAgICByeF9sZW4gPgorCQkJICAgIChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKworCQkJICAgICBGQ1NfTEVOKSkgeworCQkJCURFQlVHKDAsCisJCQkJICAgICAgInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLAorCQkJCSAgICAgIHJ4X2xlbik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeyAvKiBlbmNhcHN1bGF0ZWQgZXRoZXJuZXQgKi8KIAotICAgICAgICBpZiAodG1wIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIHJ4X2RhdGEgZnJhZ21lbnQgbGVuZ3RocyBkb24ndCBhZGQgdXBcbiIpOwotICAgICAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsgCi0gICAgICAgICAgICByZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgeyAvKiBTaW5nbGUgdW5mcmFnbWVudGVkIHBhY2tldCAqLwotICAgICAgICB0b3RhbF9sZW4gPSByeF9sZW47Ci0gICAgfQorCQkJaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAorCQkJICAgIHJ4X2xlbiA+CisJCQkgICAgKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArCisJCQkgICAgIEZDU19MRU4pKSB7CisJCQkJREVCVUcoMCwKKwkJCQkgICAgICAicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIsCisJCQkJICAgICAgcnhfbGVuKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisJREVCVUcoNCwgInJheV9jcyByeF9kYXRhIHBhY2tldFxuIik7CisJLyogSWYgZnJhZ21lbnRlZCBwYWNrZXQsIHZlcmlmeSBzaXplcyBvZiBmcmFnbWVudHMgYWRkIHVwICovCisJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKKwkJREVCVUcoMSwgInJheV9jcyByeCdlZCBmcmFnbWVudFxuIik7CisJCXRtcCA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFswXSkgPDwgOCkKKwkJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMV0pOworCQl0b3RhbF9sZW4gPSB0bXA7CisJCXByY3NsaW5rID0gcHJjczsKKwkJZG8geworCQkJdG1wIC09CisJCQkgICAgKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkKKwkJCSAgICAgPDwgOCkKKwkJCSAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7CisJCQlpZiAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpCisJCQkgICAgPT0gMHhGRiB8fCB0bXAgPCAwKQorCQkJCWJyZWFrOworCQkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKKwkJCSAgICArIHJlYWRiKCZwcmNzbGluay0+bGlua19maWVsZCk7CisJCX0gd2hpbGUgKDEpOwogCi0gICAgc2tiID0gZGV2X2FsbG9jX3NrYiggdG90YWxfbGVuKzUgKTsKLSAgICBpZiAoc2tiID09IE5VTEwpCi0gICAgewotICAgICAgICBERUJVRygwLCJyYXlfY3MgcnhfZGF0YSBjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsgCi0gICAgICAgIGlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKQotICAgICAgICAgICAgcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBza2JfcmVzZXJ2ZSggc2tiLCAyKTsgICAvKiBBbGlnbiBJUCBvbiAxNiBieXRlIChUQkQgY2hlY2sgdGhpcykqLworCQlpZiAodG1wIDwgMCkgeworCQkJREVCVUcoMCwKKwkJCSAgICAgICJyYXlfY3MgcnhfZGF0YSBmcmFnbWVudCBsZW5ndGhzIGRvbid0IGFkZCB1cFxuIik7CisJCQlsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7IC8qIFNpbmdsZSB1bmZyYWdtZW50ZWQgcGFja2V0ICovCisJCXRvdGFsX2xlbiA9IHJ4X2xlbjsKKwl9CiAKLSAgICBERUJVRyg0LCJyYXlfY3MgcnhfZGF0YSB0b3RhbF9sZW4gPSAleCwgcnhfbGVuID0gJXhcbiIsdG90YWxfbGVuLHJ4X2xlbik7CisJc2tiID0gZGV2X2FsbG9jX3NrYih0b3RhbF9sZW4gKyA1KTsKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJREVCVUcoMCwgInJheV9jcyByeF9kYXRhIGNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOworCQlsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikKKwkJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogQWxpZ24gSVAgb24gMTYgYnl0ZSAoVEJEIGNoZWNrIHRoaXMpICovCisKKwlERUJVRyg0LCAicmF5X2NzIHJ4X2RhdGEgdG90YWxfbGVuID0gJXgsIHJ4X2xlbiA9ICV4XG4iLCB0b3RhbF9sZW4sCisJICAgICAgcnhfbGVuKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBSZXNlcnZlIGVub3VnaCByb29tIGZvciB0aGUgd2hvbGUgZGFtbiBwYWNrZXQuICovCi0gICAgcnhfcHRyID0gc2tiX3B1dCggc2tiLCB0b3RhbF9sZW4pOwotICAgIC8qIENvcHkgdGhlIHdob2xlIHBhY2tldCB0byBza19idWZmICovCi0gICAgcnhfcHRyICs9IGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyICYgUlhfQlVGRl9FTkQsIHJ4X2xlbik7Ci0gICAgLyogR2V0IHNvdXJjZSBhZGRyZXNzICovCisJLyogUmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgdGhlIHdob2xlIGRhbW4gcGFja2V0LiAqLworCXJ4X3B0ciA9IHNrYl9wdXQoc2tiLCB0b3RhbF9sZW4pOworCS8qIENvcHkgdGhlIHdob2xlIHBhY2tldCB0byBza19idWZmICovCisJcnhfcHRyICs9CisJICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyICYgUlhfQlVGRl9FTkQsIHJ4X2xlbik7CisJLyogR2V0IHNvdXJjZSBhZGRyZXNzICovCiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBvZmZzZXRvZihzdHJ1Y3QgbWFjX2hlYWRlciwgYWRkcl8yKSwKLQkJCQkgICAgIGxpbmtzcmNhZGRyLCBFVEhfQUxFTik7CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLAorCQkJCQkgb2Zmc2V0b2Yoc3RydWN0IG1hY19oZWFkZXIsIGFkZHJfMiksCisJCQkJCSBsaW5rc3JjYWRkciwgRVRIX0FMRU4pOwogI2VuZGlmCi0gICAgLyogTm93LCBkZWFsIHdpdGggZW5jYXBzdWxhdGlvbi90cmFuc2xhdGlvbi9zbmlmZmVyICovCi0gICAgaWYgKCFzbmlmZmVyKSB7Ci0gICAgICAgIGlmICghdHJhbnNsYXRlKSB7IAotICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVkIGV0aGVybmV0LCBzbyBqdXN0IGxvcCBvZmYgODAyLjExIE1BQyBoZWFkZXIgKi8KKwkvKiBOb3csIGRlYWwgd2l0aCBlbmNhcHN1bGF0aW9uL3RyYW5zbGF0aW9uL3NuaWZmZXIgKi8KKwlpZiAoIXNuaWZmZXIpIHsKKwkJaWYgKCF0cmFuc2xhdGUpIHsKKwkJCS8qIEVuY2Fwc3VsYXRlZCBldGhlcm5ldCwgc28ganVzdCBsb3Agb2ZmIDgwMi4xMSBNQUMgaGVhZGVyICovCiAvKiBUQkQgcmVzZXJ2ZSAgICAgICAgICAgIHNrYl9yZXNlcnZlKCBza2IsIFJYX01BQ19IRUFERVJfTEVOR1RIKTsgKi8KLSAgICAgICAgICAgIHNrYl9wdWxsKCBza2IsIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIERvIHRyYW5zbGF0aW9uICovCi0gICAgICAgICAgICB1bnRyYW5zbGF0ZShsb2NhbCwgc2tiLCB0b3RhbF9sZW4pOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgeyAgLyogc25pZmZlciBtb2RlLCBzbyBqdXN0IHBhc3Mgd2hvbGUgcGFja2V0ICovICB9OworCQkJc2tiX3B1bGwoc2tiLCBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJCX0gZWxzZSB7CisJCQkvKiBEbyB0cmFuc2xhdGlvbiAqLworCQkJdW50cmFuc2xhdGUobG9jYWwsIHNrYiwgdG90YWxfbGVuKTsKKwkJfQorCX0gZWxzZSB7IC8qIHNuaWZmZXIgbW9kZSwgc28ganVzdCBwYXNzIHdob2xlIHBhY2tldCAqLworCX07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogTm93IHBpY2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGZyYWdtZW50cyBpZiBhbnkgKi8KLSAgICB0bXAgPSAxNzsgCi0gICAgaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKLSAgICAgICAgcHJjc2xpbmsgPSBwcmNzOwotICAgICAgICBERUJVRygxLCJyYXlfY3MgcnhfZGF0YSBpbiBmcmFnbWVudCBsb29wXG4iKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKLSAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKLSAgICAgICAgICAgIHJ4X2xlbiA9ICgoIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSkpCi0gICAgICAgICAgICAgICAgJiBSWF9CVUZGX0VORDsKLSAgICAgICAgICAgIHBrdF9hZGRyID0gKCggcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKQotICAgICAgICAgICAgICAgICYgUlhfQlVGRl9FTkQ7CisJLyogTm93IHBpY2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGZyYWdtZW50cyBpZiBhbnkgKi8KKwl0bXAgPSAxNzsKKwlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgeworCQlwcmNzbGluayA9IHByY3M7CisJCURFQlVHKDEsICJyYXlfY3MgcnhfZGF0YSBpbiBmcmFnbWVudCBsb29wXG4iKTsKKwkJZG8geworCQkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKKwkJCSAgICArCisJCQkgICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCQkJcnhfbGVuID0KKwkJCSAgICAoKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkKKwkJCSAgICAgIDw8IDgpCisJCQkgICAgICsKKwkJCSAgICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKSkKKwkJCSAgICAmIFJYX0JVRkZfRU5EOworCQkJcGt0X2FkZHIgPQorCQkJICAgICgocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PAorCQkJICAgICAgOCkKKwkJCSAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKQorCQkJICAgICYgUlhfQlVGRl9FTkQ7CiAKLSAgICAgICAgICAgIHJ4X3B0ciArPSBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJCXJ4X3B0ciArPQorCQkJICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyLCByeF9sZW4pOwogCi0gICAgICAgIH0gd2hpbGUgKHRtcC0tICYmIAotICAgICAgICAgICAgICAgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRik7Ci0gICAgICAgIHJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7Ci0gICAgfQorCQl9IHdoaWxlICh0bXAtLSAmJgorCQkJIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPQorCQkJIDB4RkYpOworCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOworCX0KIAotICAgIHNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLSAgICBuZXRpZl9yeChza2IpOwotICAgIGxvY2FsLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0gICAgbG9jYWwtPnN0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX2xlbjsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCW5ldGlmX3J4KHNrYik7CisJbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlsb2NhbC0+c3RhdHMucnhfYnl0ZXMgKz0gdG90YWxfbGVuOwogCi0gICAgLyogR2F0aGVyIHNpZ25hbCBzdHJlbmd0aCBwZXIgYWRkcmVzcyAqLworCS8qIEdhdGhlciBzaWduYWwgc3RyZW5ndGggcGVyIGFkZHJlc3MgKi8KICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICAvKiBGb3IgdGhlIEFjY2VzcyBQb2ludCBvciB0aGUgbm9kZSBoYXZpbmcgc3RhcnRlZCB0aGUgYWQtaG9jIG5ldAotICAgICAqIG5vdGUgOiBhZC1ob2Mgd29yayBvbmx5IGluIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGJ1dCB3ZQotICAgICAqIGtsdWRnZSBpbiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzLi4uICovCi0gICAgaWYoIW1lbWNtcChsaW5rc3JjYWRkciwgbG9jYWwtPmJzc19pZCwgRVRIX0FMRU4pKQotICAgICAgewotCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCi0JLypsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IG5vbmUgPyAqLwotCWxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IHNpZ2xldjsKLQkvKmxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IG5vbmUgPyAqLwotCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0gMHgyOwotICAgICAgfQotICAgIC8qIE5vdywgdXBkYXRlIHRoZSBzcHkgc3R1ZmYgKi8KLSAgICB7Ci0Jc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwotCXdzdGF0cy5sZXZlbCA9IHNpZ2xldjsKLQkvKiB3c3RhdHMubm9pc2UgPSBub25lID8gKi8KLQkvKiB3c3RhdHMucXVhbCA9IG5vbmUgPyAqLwotCXdzdGF0cy51cGRhdGVkID0gMHgyOwotCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBsaW5rc3JjYWRkciwgJndzdGF0cyk7Ci0gICAgfQotI2VuZGlmCS8qIFdJUkVMRVNTX1NQWSAqLworCS8qIEZvciB0aGUgQWNjZXNzIFBvaW50IG9yIHRoZSBub2RlIGhhdmluZyBzdGFydGVkIHRoZSBhZC1ob2MgbmV0CisJICogbm90ZSA6IGFkLWhvYyB3b3JrIG9ubHkgaW4gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IHdlCisJICoga2x1ZGdlIGluIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMuLi4gKi8KKwlpZiAoIW1lbWNtcChsaW5rc3JjYWRkciwgbG9jYWwtPmJzc19pZCwgRVRIX0FMRU4pKSB7CisJCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCisJCS8qbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBub25lID8gKi8KKwkJbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gc2lnbGV2OworCQkvKmxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IG5vbmUgPyAqLworCQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IDB4MjsKKwl9CisJLyogTm93LCB1cGRhdGUgdGhlIHNweSBzdHVmZiAqLworCXsKKwkJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOworCQl3c3RhdHMubGV2ZWwgPSBzaWdsZXY7CisJCS8qIHdzdGF0cy5ub2lzZSA9IG5vbmUgPyAqLworCQkvKiB3c3RhdHMucXVhbCA9IG5vbmUgPyAqLworCQl3c3RhdHMudXBkYXRlZCA9IDB4MjsKKwkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBsaW5rc3JjYWRkciwgJndzdGF0cyk7CisJfQorI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogfSAvKiBlbmQgcnhfZGF0YSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCB1bnRyYW5zbGF0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewotICAgIHNuYXBoZHJfdCAqcHNuYXAgPSAoc25hcGhkcl90ICopKHNrYi0+ZGF0YSArIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcG1hYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLSAgICBfX2JlMTYgdHlwZSA9ICooX19iZTE2ICopcHNuYXAtPmV0aGVydHlwZTsKLSAgICBpbnQgZGVsdGE7Ci0gICAgc3RydWN0IGV0aGhkciAqcGV0aDsKLSAgICBVQ0hBUiBzcmNhZGRyW0FERFJMRU5dOwotICAgIFVDSEFSIGRlc3RhZGRyW0FERFJMRU5dOwotICAgIHN0YXRpYyBVQ0hBUiBvcmdfYnJpZGdlWzNdID0gezAsIDAsIDB4Zjh9OwotICAgIHN0YXRpYyBVQ0hBUiBvcmdfMTA0MlszXSA9IHswLCAwLCAwfTsKKwlzbmFwaGRyX3QgKnBzbmFwID0gKHNuYXBoZHJfdCAqKSAoc2tiLT5kYXRhICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwbWFjID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCV9fYmUxNiB0eXBlID0gKihfX2JlMTYgKikgcHNuYXAtPmV0aGVydHlwZTsKKwlpbnQgZGVsdGE7CisJc3RydWN0IGV0aGhkciAqcGV0aDsKKwlVQ0hBUiBzcmNhZGRyW0FERFJMRU5dOworCVVDSEFSIGRlc3RhZGRyW0FERFJMRU5dOworCXN0YXRpYyBVQ0hBUiBvcmdfYnJpZGdlWzNdID0geyAwLCAwLCAweGY4IH07CisJc3RhdGljIFVDSEFSIG9yZ18xMDQyWzNdID0geyAwLCAwLCAwIH07CiAKLSAgICBtZW1jcHkoZGVzdGFkZHIsIGllZWU4MDIxMV9nZXRfREEocG1hYyksIEFERFJMRU4pOwotICAgIG1lbWNweShzcmNhZGRyLCBpZWVlODAyMTFfZ2V0X1NBKHBtYWMpLCBBRERSTEVOKTsKKwltZW1jcHkoZGVzdGFkZHIsIGllZWU4MDIxMV9nZXRfREEocG1hYyksIEFERFJMRU4pOworCW1lbWNweShzcmNhZGRyLCBpZWVlODAyMTFfZ2V0X1NBKHBtYWMpLCBBRERSTEVOKTsKIAogI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIGlmIChwY19kZWJ1ZyA+IDMpIHsKLSAgICBpbnQgaTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGJlZm9yZSB1bnRyYW5zbGF0ZSIpOwotICAgIGZvciAoaT0wO2k8NjQ7aSsrKSAKLSAgICAgICAgcHJpbnRrKCIlMDJ4ICIsc2tiLT5kYXRhW2ldKTsKLSAgICBwcmludGsoIlxuIiBLRVJOX0RFQlVHICJ0eXBlID0gJTA4eCwgeHNhcCA9ICUwMnglMDJ4JTAyeCwgb3JnID0gJTAyeDAyeDAyeFxuIiwKLSAgICAgICAgICAgbnRvaHModHlwZSksCi0JICAgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCwKLQkgICBwc25hcC0+b3JnWzBdLCBwc25hcC0+b3JnWzFdLCBwc25hcC0+b3JnWzJdKTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAidW50cmFuc2xhdGUgc2tiLT5kYXRhID0gJXBcbiIsc2tiLT5kYXRhKTsKLSAgICB9CisJaWYgKHBjX2RlYnVnID4gMykgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBiZWZvcmUgdW50cmFuc2xhdGUiKTsKKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCQlwcmludGsoIiUwMnggIiwgc2tiLT5kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIgS0VSTl9ERUJVRworCQkgICAgICAgInR5cGUgPSAlMDh4LCB4c2FwID0gJTAyeCUwMnglMDJ4LCBvcmcgPSAlMDJ4MDJ4MDJ4XG4iLAorCQkgICAgICAgbnRvaHModHlwZSksIHBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwsCisJCSAgICAgICBwc25hcC0+b3JnWzBdLCBwc25hcC0+b3JnWzFdLCBwc25hcC0+b3JnWzJdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVudHJhbnNsYXRlIHNrYi0+ZGF0YSA9ICVwXG4iLCBza2ItPmRhdGEpOworCX0KICNlbmRpZgogCi0gICAgaWYgKHBzbmFwLT5kc2FwICE9IDB4YWEgfHwgcHNuYXAtPnNzYXAgIT0gMHhhYSB8fCBwc25hcC0+Y3RybCAhPSAzKSB7Ci0gICAgICAgIC8qIG5vdCBhIHNuYXAgdHlwZSBzbyBsZWF2ZSBpdCBhbG9uZSAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgTk9UIFNOQVAgJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCXBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwpOworCWlmIChwc25hcC0+ZHNhcCAhPSAweGFhIHx8IHBzbmFwLT5zc2FwICE9IDB4YWEgfHwgcHNuYXAtPmN0cmwgIT0gMykgeworCQkvKiBub3QgYSBzbmFwIHR5cGUgc28gbGVhdmUgaXQgYWxvbmUgKi8KKwkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBOT1QgU05BUCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJICAgICAgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCk7CiAKLSAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwotICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICBwZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgIH0KLSAgICBlbHNlIHsgLyogSXRzIGEgU05BUCAqLwotICAgICAgICBpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ19icmlkZ2UsIDMpID09IDApIHsgLyogRXRoZXJJSSBhbmQgbnVrZSB0aGUgTExDICAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgQnJpZGdlIGVuY2FwXG4iKTsKLSAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggCi0gICAgICAgICAgICAgICAgKyBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKLSAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gdHlwZTsKLQl9IGVsc2UgaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfMTA0MiwgMykgPT0gMCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobnRvaHModHlwZSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVUSF9QX0lQWDoKLSAgICAgICAgICAgICAgICBjYXNlIEVUSF9QX0FBUlA6Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgSVBYL0FBUlBcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgZGVmYXVsdFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggKyAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwotICAgICAgICAgICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJyYXlfY3MgdW50cmFuc2xhdGUgdmVyeSBjb25mdXNlZCBieSBwYWNrZXRcbiIpOwotICAgICAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKLSAgICAgICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSB0eXBlOworCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47CisJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCXBldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJfSBlbHNlIHsgLyogSXRzIGEgU05BUCAqLworCQlpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ19icmlkZ2UsIDMpID09IDApIHsKKwkJLyogRXRoZXJJSSBhbmQgbnVrZSB0aGUgTExDICovCisJCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIEJyaWRnZSBlbmNhcFxuIik7CisJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RICisJCQkgICAgKyBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKKwkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQlwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJfSBlbHNlIGlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnXzEwNDIsIDMpID09IDApIHsKKwkJCXN3aXRjaCAobnRvaHModHlwZSkpIHsKKwkJCWNhc2UgRVRIX1BfSVBYOgorCQkJY2FzZSBFVEhfUF9BQVJQOgorCQkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIElQWC9BQVJQXG4iKTsKKwkJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47CisJCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCQlwZXRoLT5oX3Byb3RvID0KKwkJCQkgICAgaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBkZWZhdWx0XG4iKTsKKwkJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47CisJCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCQlwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50aygicmF5X2NzIHVudHJhbnNsYXRlIHZlcnkgY29uZnVzZWQgYnkgcGFja2V0XG4iKTsKKwkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKKwkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQlwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJfQogCX0KLSAgICB9CiAvKiBUQkQgcmVzZXJ2ZSAgc2tiX3Jlc2VydmUoc2tiLCBkZWx0YSk7ICovCi0gICAgc2tiX3B1bGwoc2tiLCBkZWx0YSk7Ci0gICAgREVCVUcoMywidW50cmFuc2xhdGUgYWZ0ZXIgc2tiX3B1bGwoJWQpLCBza2ItPmRhdGEgPSAlcFxuIixkZWx0YSxza2ItPmRhdGEpOwotICAgIG1lbWNweShwZXRoLT5oX2Rlc3QsIGRlc3RhZGRyLCBBRERSTEVOKTsKLSAgICBtZW1jcHkocGV0aC0+aF9zb3VyY2UsIHNyY2FkZHIsIEFERFJMRU4pOworCXNrYl9wdWxsKHNrYiwgZGVsdGEpOworCURFQlVHKDMsICJ1bnRyYW5zbGF0ZSBhZnRlciBza2JfcHVsbCglZCksIHNrYi0+ZGF0YSA9ICVwXG4iLCBkZWx0YSwKKwkgICAgICBza2ItPmRhdGEpOworCW1lbWNweShwZXRoLT5oX2Rlc3QsIGRlc3RhZGRyLCBBRERSTEVOKTsKKwltZW1jcHkocGV0aC0+aF9zb3VyY2UsIHNyY2FkZHIsIEFERFJMRU4pOwogI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIGlmIChwY19kZWJ1ZyA+IDMpIHsKLSAgICBpbnQgaTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGFmdGVyIHVudHJhbnNsYXRlOiIpOwotICAgIGZvciAoaT0wO2k8NjQ7aSsrKQotICAgICAgICBwcmludGsoIiUwMnggIixza2ItPmRhdGFbaV0pOwotICAgIHByaW50aygiXG4iKTsKLSAgICB9CisJaWYgKHBjX2RlYnVnID4gMykgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBhZnRlciB1bnRyYW5zbGF0ZToiKTsKKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCQlwcmludGsoIiUwMnggIiwgc2tiLT5kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KICNlbmRpZgogfSAvKiBlbmQgdW50cmFuc2xhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgcmVjZWl2ZSBidWZmZXIgdG8gUEMgbWVtb3J5LgogICogZGVzdCAgICAgPSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIFBDIG1lbW9yeQogICogcGt0X2FkZHIgPSBzb3VyY2UgYWRkcmVzcyBpbiByZWNlaXZlIGJ1ZmZlcgogICogbGVuICAgICAgPSBsZW5ndGggb2YgcGFja2V0IHRvIGNvcHkKICAqLwotc3RhdGljIGludCBjb3B5X2Zyb21fcnhfYnVmZihyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IHBrdF9hZGRyLCBpbnQgbGVuZ3RoKQorc3RhdGljIGludCBjb3B5X2Zyb21fcnhfYnVmZihyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IHBrdF9hZGRyLAorCQkJICAgICBpbnQgbGVuZ3RoKQogewotICAgIGludCB3cmFwX2J5dGVzID0gKHBrdF9hZGRyICsgbGVuZ3RoKSAtIChSWF9CVUZGX0VORCArIDEpOwotICAgIGlmICh3cmFwX2J5dGVzIDw9IDApCi0gICAgewotICAgICAgICBtZW1jcHlfZnJvbWlvKGRlc3QsbG9jYWwtPnJtZW0gKyBwa3RfYWRkcixsZW5ndGgpOwotICAgIH0KLSAgICBlbHNlIC8qIFBhY2tldCB3cmFwcGVkIGluIGNpcmN1bGFyIGJ1ZmZlciAqLwotICAgIHsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhkZXN0LGxvY2FsLT5ybWVtK3BrdF9hZGRyLGxlbmd0aCAtIHdyYXBfYnl0ZXMpOwotICAgICAgICBtZW1jcHlfZnJvbWlvKGRlc3QgKyBsZW5ndGggLSB3cmFwX2J5dGVzLCBsb2NhbC0+cm1lbSwgd3JhcF9ieXRlcyk7Ci0gICAgfQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByZWxlYXNlX2ZyYWdfY2hhaW4ocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICogcHJjcykKLXsKLSAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKLSAgICBpbnQgdG1wID0gMTc7Ci0gICAgdW5zaWduZWQgcmNzaW5kZXggPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKwlpbnQgd3JhcF9ieXRlcyA9IChwa3RfYWRkciArIGxlbmd0aCkgLSAoUlhfQlVGRl9FTkQgKyAxKTsKKwlpZiAod3JhcF9ieXRlcyA8PSAwKSB7CisJCW1lbWNweV9mcm9taW8oZGVzdCwgbG9jYWwtPnJtZW0gKyBwa3RfYWRkciwgbGVuZ3RoKTsKKwl9IGVsc2UgeyAvKiBQYWNrZXQgd3JhcHBlZCBpbiBjaXJjdWxhciBidWZmZXIgKi8KIAotICAgIHdoaWxlICh0bXAtLSkgewotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICBpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkgewotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLHJjc2luZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgIAotICAgICAgICB9ICAgCi0gICAgICAgIHByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7Ci0gICAgICAgIHJjc2luZGV4ID0gcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOwotICAgIH0KLSAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOworCQltZW1jcHlfZnJvbWlvKGRlc3QsIGxvY2FsLT5ybWVtICsgcGt0X2FkZHIsCisJCQkgICAgICBsZW5ndGggLSB3cmFwX2J5dGVzKTsKKwkJbWVtY3B5X2Zyb21pbyhkZXN0ICsgbGVuZ3RoIC0gd3JhcF9ieXRlcywgbG9jYWwtPnJtZW0sCisJCQkgICAgICB3cmFwX2J5dGVzKTsKKwl9CisJcmV0dXJuIGxlbmd0aDsKIH0KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIHZvaWQgcmVsZWFzZV9mcmFnX2NoYWluKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcykKK3sKKwlzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKKwlpbnQgdG1wID0gMTc7CisJdW5zaWduZWQgcmNzaW5kZXggPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKworCXdoaWxlICh0bXAtLSkgeworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOworCQlpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkgeworCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIiwKKwkJCSAgICAgIHJjc2luZGV4KTsKKwkJCWJyZWFrOworCQl9CisJCXByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7CisJCXJjc2luZGV4ID0gcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCX0KKwl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOworfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgREVCVUcoMCwicmF5X2NzIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uLlxuIik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgYXV0aGVudGljYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJREVCVUcoMCwgInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBhdXRoZW50aWNhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQogCi0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIGlmIChidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YnNzX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmF1dGhlbnRpY2F0ZV90aW1lb3V0OwotICAgIH0KLSAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWioyOwotICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFXQUlUSU5HX1JFU1BPTlNFOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlpZiAoYnVpbGRfYXV0aF9mcmFtZShsb2NhbCwgbG9jYWwtPmJzc19pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7CisJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKKwl9IGVsc2UgeworCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmYXV0aGVudGljYXRlX3RpbWVvdXQ7CisJfQorCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMjsKKwlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBV0FJVElOR19SRVNQT05TRTsKIH0gLyogZW5kIGF1dGhlbnRpY2F0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByeF9hdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQorCQkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKIHsKLSAgICBVQ0hBUiBidWZmWzI1Nl07Ci0gICAgc3RydWN0IHJ4X21zZyAqbXNnID0gKHN0cnVjdCByeF9tc2cgKilidWZmOwotICAgIAotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlVQ0hBUiBidWZmWzI1Nl07CisJc3RydWN0IHJ4X21zZyAqbXNnID0gKHN0cnVjdCByeF9tc2cgKilidWZmOwogCi0gICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIGJ1ZmYsIHBrdF9hZGRyLCByeF9sZW4gJiAweGZmKTsKLSAgICAvKiBpZiB3ZSBhcmUgdHJ5aW5nIHRvIGdldCBhdXRoZW50aWNhdGVkICovCi0gICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgcnhfYXV0aCB2YXI9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBtc2ctPnZhclswXSxtc2ctPnZhclsxXSxtc2ctPnZhclsyXSxtc2ctPnZhclszXSxtc2ctPnZhcls0XSxtc2ctPnZhcls1XSk7Ci0gICAgICAgIGlmIChtc2ctPnZhclsyXSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVpbGRfYXV0aF9mcmFtZSAobG9jYWwsIG1zZy0+bWFjLmFkZHJfMiwgT1BFTl9BVVRIX1JFU1BPTlNFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gTkVFRF9UT19BVVRIOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGxvY2FsLT5hdXRoX2lkLCBtc2ctPm1hYy5hZGRyXzIsIEFERFJMRU4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAvKiBJbmZyYXN0cnVjdHVyZSBuZXR3b3JrICovCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IEFXQUlUSU5HX1JFU1BPTlNFKSB7Ci0gICAgICAgICAgICAvKiBWZXJpZnkgYXV0aGVudGljYXRpb24gc2VxdWVuY2UgIzIgYW5kIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAgIGlmIChtc2ctPnZhclsyXSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtc2ctPnZhclszXSB8IG1zZy0+dmFyWzRdKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDEsIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfQ09NUExFVEU7Ci0gICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZShsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJBdXRoZW50aWNhdGlvbiByZWZ1c2VkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX1JFRlVTRUQ7Ci0gICAgICAgICAgICAgICAgICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKworCWNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7CisJLyogaWYgd2UgYXJlIHRyeWluZyB0byBnZXQgYXV0aGVudGljYXRlZCAqLworCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKKwkJREVCVUcoMSwgInJheV9jcyByeF9hdXRoIHZhcj0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCSAgICAgIG1zZy0+dmFyWzBdLCBtc2ctPnZhclsxXSwgbXNnLT52YXJbMl0sIG1zZy0+dmFyWzNdLAorCQkgICAgICBtc2ctPnZhcls0XSwgbXNnLT52YXJbNV0pOworCQlpZiAobXNnLT52YXJbMl0gPT0gMSkgeworCQkJREVCVUcoMCwgInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlLlxuIik7CisJCQlpZiAoIWJ1aWxkX2F1dGhfZnJhbWUKKwkJCSAgICAobG9jYWwsIG1zZy0+bWFjLmFkZHJfMiwgT1BFTl9BVVRIX1JFU1BPTlNFKSkgeworCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IE5FRURfVE9fQVVUSDsKKwkJCQltZW1jcHkobG9jYWwtPmF1dGhfaWQsIG1zZy0+bWFjLmFkZHJfMiwKKwkJCQkgICAgICAgQUREUkxFTik7CisJCQl9CisJCX0KKwl9IGVsc2UgeyAvKiBJbmZyYXN0cnVjdHVyZSBuZXR3b3JrICovCisKKwkJaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBBV0FJVElOR19SRVNQT05TRSkgeworCQkJLyogVmVyaWZ5IGF1dGhlbnRpY2F0aW9uIHNlcXVlbmNlICMyIGFuZCBzdWNjZXNzICovCisJCQlpZiAobXNnLT52YXJbMl0gPT0gMikgeworCQkJCWlmICgobXNnLT52YXJbM10gfCBtc2ctPnZhcls0XSkgPT0gMCkgeworCQkJCQlERUJVRygxLCAiQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bFxuIik7CisJCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9DT01QTEVURTsKKwkJCQkJYXNzb2NpYXRlKGxvY2FsKTsKKwkJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0KKwkJCQkJICAgIEFVVEhFTlRJQ0FURUQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUcoMCwgIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWRcbiIpOworCQkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfUkVGVVNFRDsKKwkJCQkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOworCQkJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPQorCQkJCQkgICAgVU5BVVRIRU5USUNBVEVEOworCQkJCX0KKwkJCX0KKwkJfQorCX0KIAogfSAvKiBlbmQgcnhfYXV0aGVudGljYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGFzc29jaWF0ZShyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGFzc29jaWF0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwlpbnQgY2NzaW5kZXg7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGFzc29jaWF0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CisJLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKIC8qIFRCRCBzaG91bGQgbmV2ZXIgYmUgaGVyZSBidXQuLi4gd2hhdCBpZiB3ZSBhcmU/ICovCi0gICAgICAgIERFQlVHKDEsInJheV9jcyBhc3NvY2lhdGUgLSBObyBmcmVlIGNjc1xuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgREVCVUcoMSwicmF5X2NzIFN0YXJ0aW5nIGFzc29jaWF0aW9uIHdpdGggYWNjZXNzIHBvaW50XG4iKTsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgLyogZmlsbCBpbiB0aGUgQ0NTICovCi0gICAgd3JpdGViKENDU19TVEFSVF9BU1NPQ0lBVElPTiwgJnBjY3MtPmNtZCk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlERUJVRygxLCAicmF5X2NzIGFzc29jaWF0ZSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlERUJVRygxLCAicmF5X2NzIFN0YXJ0aW5nIGFzc29jaWF0aW9uIHdpdGggYWNjZXNzIHBvaW50XG4iKTsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJLyogZmlsbCBpbiB0aGUgQ0NTICovCisJd3JpdGViKENDU19TVEFSVF9BU1NPQ0lBVElPTiwgJnBjY3MtPmNtZCk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLCAicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKIAotICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaKjI7Ci0gICAgICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKLSAgICAgICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNuaWZmZXIpIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiAyOworCQlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7CisJCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7CisJCXJldHVybjsKKwl9CisJaWYgKCFzbmlmZmVyKQorCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCiB9IC8qIGVuZCBhc3NvY2lhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQorc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQogewogLyogIFVDSEFSIGJ1ZmZbMjU2XTsKICAgICBzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7CiAqLwotICAgIERFQlVHKDAsIkRlYXV0aGVudGljYXRpb24gZnJhbWUgcmVjZWl2ZWRcbiIpOwotICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKLSAgICAvKiBOZWVkIHRvIHJlYXV0aGVudGljYXRlIG9yIHJlam9pbiBkZXBlbmRpbmcgb24gcmVhc29uIGNvZGUgKi8KKwlERUJVRygwLCAiRGVhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZFxuIik7CisJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOworCS8qIE5lZWQgdG8gcmVhdXRoZW50aWNhdGUgb3IgcmVqb2luIGRlcGVuZGluZyBvbiByZWFzb24gY29kZSAqLwogLyogIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7CiAgKi8KIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgY2xlYXJfaW50ZXJydXB0KHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgd3JpdGViKDAsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEhDU19JTlRSX09GRlNFVCk7CisJd3JpdGViKDAsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEhDU19JTlRSX09GRlNFVCk7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2RlZmluZSBNQVhEQVRBIChQQUdFX1NJWkUgLSA4MCkKIAogc3RhdGljIGNoYXIgKmNhcmRfc3RhdHVzW10gPSB7Ci0gICAgIkNhcmQgaW5zZXJ0ZWQgLSB1bmluaXRpYWxpemVkIiwgICAgIC8qIDAgKi8KLSAgICAiQ2FyZCBub3QgZG93bmxvYWRlZCIsICAgICAgICAgICAgICAgLyogMSAqLwotICAgICJXYWl0aW5nIGZvciBkb3dubG9hZCBwYXJhbWV0ZXJzIiwgICAvKiAyICovCi0gICAgIkNhcmQgZG9pbmcgYWNxdWlzaXRpb24iLCAgICAgICAgICAgIC8qIDMgKi8KLSAgICAiQWNxdWlzaXRpb24gY29tcGxldGUiLCAgICAgICAgICAgICAgLyogNCAqLwotICAgICJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZSIsICAgICAgICAgICAvKiA1ICovCi0gICAgIkFzc29jaWF0aW9uIGNvbXBsZXRlIiwgICAgICAgICAgICAgIC8qIDYgKi8KLSAgICAiPz8/IiwgIj8/PyIsICI/Pz8iLCAiPz8/IiwgICAgICAgICAgLyogNyA4IDkgMTAgdW5kZWZpbmVkICovCi0gICAgIkNhcmQgaW5pdCBlcnJvciIsICAgICAgICAgICAgICAgICAgIC8qIDExICovCi0gICAgIkRvd25sb2FkIHBhcmFtZXRlcnMgZXJyb3IiLCAgICAgICAgIC8qIDEyICovCi0gICAgIj8/PyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzICovCi0gICAgIkFjcXVpc2l0aW9uIGZhaWxlZCIsICAgICAgICAgICAgICAgIC8qIDE0ICovCi0gICAgIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWQiLCAgICAgICAgICAgIC8qIDE1ICovCi0gICAgIkFzc29jaWF0aW9uIGZhaWxlZCIgICAgICAgICAgICAgICAgIC8qIDE2ICovCisJIkNhcmQgaW5zZXJ0ZWQgLSB1bmluaXRpYWxpemVkIiwJLyogMCAqLworCSJDYXJkIG5vdCBkb3dubG9hZGVkIiwJCQkvKiAxICovCisJIldhaXRpbmcgZm9yIGRvd25sb2FkIHBhcmFtZXRlcnMiLAkvKiAyICovCisJIkNhcmQgZG9pbmcgYWNxdWlzaXRpb24iLAkJLyogMyAqLworCSJBY3F1aXNpdGlvbiBjb21wbGV0ZSIsCQkJLyogNCAqLworCSJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZSIsCQkvKiA1ICovCisJIkFzc29jaWF0aW9uIGNvbXBsZXRlIiwJCQkvKiA2ICovCisJIj8/PyIsICI/Pz8iLCAiPz8/IiwgIj8/PyIsCQkvKiA3IDggOSAxMCB1bmRlZmluZWQgKi8KKwkiQ2FyZCBpbml0IGVycm9yIiwJCQkvKiAxMSAqLworCSJEb3dubG9hZCBwYXJhbWV0ZXJzIGVycm9yIiwJCS8qIDEyICovCisJIj8/PyIsCQkJCQkvKiAxMyAqLworCSJBY3F1aXNpdGlvbiBmYWlsZWQiLAkJCS8qIDE0ICovCisJIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWQiLAkJLyogMTUgKi8KKwkiQXNzb2NpYXRpb24gZmFpbGVkIgkJCS8qIDE2ICovCiB9OwogCi1zdGF0aWMgY2hhciAqbmV0dHlwZVtdID0geyJBZGhvYyIsICJJbmZyYSAifTsKLXN0YXRpYyBjaGFyICpmcmFtaW5nW10gPSB7IkVuY2Fwc3VsYXRpb24iLCAiVHJhbnNsYXRpb24ifQorc3RhdGljIGNoYXIgKm5ldHR5cGVbXSA9IHsgIkFkaG9jIiwgIkluZnJhICIgfTsKK3N0YXRpYyBjaGFyICpmcmFtaW5nW10gPSB7ICJFbmNhcHN1bGF0aW9uIiwgIlRyYW5zbGF0aW9uIiB9CisKIDsKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2NzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAvKiBQcmludCBjdXJyZW50IHZhbHVlcyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB2aWEgb3RoZXIgbWVhbnMKLSAqIGVnIGlmY29uZmlnIAorICogZWcgaWZjb25maWcKICAqLwotICAgIGludCBpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKLSAgICBVQ0hBUiAqcDsKLSAgICBzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqcGZoOwotICAgIFVDSEFSIGNbMzNdOworCWludCBpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJcmF5X2Rldl90ICpsb2NhbDsKKwlVQ0hBUiAqcDsKKwlzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqcGZoOworCVVDSEFSIGNbMzNdOwogCi0gICAgbGluayA9IHRoaXNfZGV2aWNlOwotICAgIGlmICghbGluaykKLSAgICAJcmV0dXJuIDA7Ci0gICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKLSAgICBpZiAoIWRldikKLSAgICAJcmV0dXJuIDA7Ci0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGlmICghbG9jYWwpCi0gICAgCXJldHVybiAwOworCWxpbmsgPSB0aGlzX2RldmljZTsKKwlpZiAoIWxpbmspCisJCXJldHVybiAwOworCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7CisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gMDsKIAotICAgIHNlcV9wdXRzKG0sICJSYXlsaW5rIFdpcmVsZXNzIExBTiBkcml2ZXIgc3RhdHVzXG4iKTsKLSAgICBzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmNzaWQpOwotICAgIC8qIGJ1aWxkIDQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb24sIGFuZCBmaWVsZCBpcyAweDU1IGFmdGVyIG1lbXRlc3QgKi8KLSAgICBzZXFfcHV0cyhtLCAiRmlybXdhcmUgdmVyc2lvbiAgICAgPSAiKTsKLSAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQotICAgICAgICBzZXFfcHV0cyhtLCAiNCAtIFVzZSBkdW1wX2NpcyBmb3IgbW9yZSBkZXRhaWxzXG4iKTsKLSAgICBlbHNlCi0gICAgICAgIHNlcV9wcmludGYobSwgIiUyZC4lMDJkLiUwMmRcbiIsCi0gICAgICAgICAgICAgICAgICAgbG9jYWwtPmZ3X3ZlciwgbG9jYWwtPmZ3X2JsZCwgbG9jYWwtPmZ3X3Zhcik7CisJc2VxX3B1dHMobSwgIlJheWxpbmsgV2lyZWxlc3MgTEFOIGRyaXZlciBzdGF0dXNcbiIpOworCXNlcV9wcmludGYobSwgIiVzXG4iLCByY3NpZCk7CisJLyogYnVpbGQgNCBkb2VzIG5vdCByZXBvcnQgdmVyc2lvbiwgYW5kIGZpZWxkIGlzIDB4NTUgYWZ0ZXIgbWVtdGVzdCAqLworCXNlcV9wdXRzKG0sICJGaXJtd2FyZSB2ZXJzaW9uICAgICA9ICIpOworCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCisJCXNlcV9wdXRzKG0sICI0IC0gVXNlIGR1bXBfY2lzIGZvciBtb3JlIGRldGFpbHNcbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiJTJkLiUwMmQuJTAyZFxuIiwKKwkJCSAgIGxvY2FsLT5md192ZXIsIGxvY2FsLT5md19ibGQsIGxvY2FsLT5md192YXIpOwogCi0gICAgZm9yIChpPTA7IGk8MzI7IGkrKykgY1tpXSA9IGxvY2FsLT5zcGFybS5iNS5hX2N1cnJlbnRfZXNzX2lkW2ldOwotICAgIGNbMzJdID0gMDsKLSAgICBzZXFfcHJpbnRmKG0sICIlcyBuZXR3b3JrIEVTU0lEID0gXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgIG5ldHR5cGVbbG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlXSwgYyk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCWNbaV0gPSBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZFtpXTsKKwljWzMyXSA9IDA7CisJc2VxX3ByaW50ZihtLCAiJXMgbmV0d29yayBFU1NJRCA9IFwiJXNcIlxuIiwKKwkJICAgbmV0dHlwZVtsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGVdLCBjKTsKIAotICAgIHAgPSBsb2NhbC0+YnNzX2lkOwotICAgIHNlcV9wcmludGYobSwgIkJTU0lEICAgICAgICAgICAgICAgID0gJXBNXG4iLCBwKTsKKwlwID0gbG9jYWwtPmJzc19pZDsKKwlzZXFfcHJpbnRmKG0sICJCU1NJRCAgICAgICAgICAgICAgICA9ICVwTVxuIiwgcCk7CiAKLSAgICBzZXFfcHJpbnRmKG0sICJDb3VudHJ5IGNvZGUgICAgICAgICA9ICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlKTsKKwlzZXFfcHJpbnRmKG0sICJDb3VudHJ5IGNvZGUgICAgICAgICA9ICVkXG4iLAorCQkgICBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSk7CiAKLSAgICBpID0gbG9jYWwtPmNhcmRfc3RhdHVzOwotICAgIGlmIChpIDwgMCkgaSA9IDEwOwotICAgIGlmIChpID4gMTYpIGkgPSAxMDsKLSAgICBzZXFfcHJpbnRmKG0sICJDYXJkIHN0YXR1cyAgICAgICAgICA9ICVzXG4iLCBjYXJkX3N0YXR1c1tpXSk7CisJaSA9IGxvY2FsLT5jYXJkX3N0YXR1czsKKwlpZiAoaSA8IDApCisJCWkgPSAxMDsKKwlpZiAoaSA+IDE2KQorCQlpID0gMTA7CisJc2VxX3ByaW50ZihtLCAiQ2FyZCBzdGF0dXMgICAgICAgICAgPSAlc1xuIiwgY2FyZF9zdGF0dXNbaV0pOwogCi0gICAgc2VxX3ByaW50ZihtLCAiRnJhbWluZyBtb2RlICAgICAgICAgPSAlc1xuIixmcmFtaW5nW3RyYW5zbGF0ZV0pOworCXNlcV9wcmludGYobSwgIkZyYW1pbmcgbW9kZSAgICAgICAgID0gJXNcbiIsIGZyYW1pbmdbdHJhbnNsYXRlXSk7CiAKLSAgICBzZXFfcHJpbnRmKG0sICJMYXN0IHBrdCBzaWduYWwgbHZsICA9ICVkXG4iLCBsb2NhbC0+bGFzdF9yc2wpOworCXNlcV9wcmludGYobSwgIkxhc3QgcGt0IHNpZ25hbCBsdmwgID0gJWRcbiIsIGxvY2FsLT5sYXN0X3JzbCk7CiAKLSAgICBpZiAobG9jYWwtPmJlYWNvbl9yeGVkKSB7Ci0JLyogUHVsbCBzb21lIGZpZWxkcyBvdXQgb2YgbGFzdCBiZWFjb24gcmVjZWl2ZWQgKi8KLQlzZXFfcHJpbnRmKG0sICJCZWFjb24gSW50ZXJ2YWwgICAgICA9ICVkIEt1c1xuIiwKLQkJICAgICAgIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMF0KLQkJICAgICAgICsgMjU2ICogbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFsxXSk7Ci0gICAgCi0gICAgcCA9IGxvY2FsLT5sYXN0X2Jjbi5lbGVtZW50czsKLSAgICBpZiAocFswXSA9PSBDX0VTU0lEX0VMRU1FTlRfSUQpIHAgKz0gcFsxXSArIDI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNlcV9wcmludGYobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgZXNzaWQgZWxlbWVudCBpZCA9ICVkXG4iLHBbMF0pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisJaWYgKGxvY2FsLT5iZWFjb25fcnhlZCkgeworCQkvKiBQdWxsIHNvbWUgZmllbGRzIG91dCBvZiBsYXN0IGJlYWNvbiByZWNlaXZlZCAqLworCQlzZXFfcHJpbnRmKG0sICJCZWFjb24gSW50ZXJ2YWwgICAgICA9ICVkIEt1c1xuIiwKKwkJCSAgIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMF0KKwkJCSAgICsgMjU2ICogbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFsxXSk7CiAKLSAgICBpZiAocFswXSA9PSBDX1NVUFBPUlRFRF9SQVRFU19FTEVNRU5UX0lEKSB7Ci0gICAgICAgIHNlcV9wdXRzKG0sICJTdXBwb3J0ZWQgcmF0ZSBjb2RlcyA9ICIpOwotICAgICAgICBmb3IgKGk9MjsgaTxwWzFdICsgMjsgaSsrKSAKLSAgICAgICAgICAgIHNlcV9wcmludGYobSwgIjB4JTAyeCAiLCBwW2ldKTsKLSAgICAgICAgc2VxX3B1dGMobSwgJ1xuJyk7Ci0gICAgICAgIHAgKz0gcFsxXSArIDI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCByYXRlcyBlbGVtZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorCQlwID0gbG9jYWwtPmxhc3RfYmNuLmVsZW1lbnRzOworCQlpZiAocFswXSA9PSBDX0VTU0lEX0VMRU1FTlRfSUQpCisJCQlwICs9IHBbMV0gKyAyOworCQllbHNlIHsKKwkJCXNlcV9wcmludGYobSwKKwkJCQkgICAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBlc3NpZCBlbGVtZW50IGlkID0gJWRcbiIsCisJCQkJICAgcFswXSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCi0JaWYgKHBbMF0gPT0gQ19GSF9QQVJBTV9TRVRfRUxFTUVOVF9JRCkgewotCSAgICBwZmggPSAoc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKilwOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgZHdlbGwgICAgICAgICAgICA9ICVkIEt1c1xuIiwKLQkJCSAgIHBmaC0+ZHdlbGxfdGltZVswXSArIDI1NiAqIHBmaC0+ZHdlbGxfdGltZVsxXSk7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBzZXQgICAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9zZXQpOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgcGF0dGVybiAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3BfcGF0dGVybik7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBpbmRleCAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9pbmRleCk7Ci0JICAgIHAgKz0gcFsxXSArIDI7CisJCWlmIChwWzBdID09IENfU1VQUE9SVEVEX1JBVEVTX0VMRU1FTlRfSUQpIHsKKwkJCXNlcV9wdXRzKG0sICJTdXBwb3J0ZWQgcmF0ZSBjb2RlcyA9ICIpOworCQkJZm9yIChpID0gMjsgaSA8IHBbMV0gKyAyOyBpKyspCisJCQkJc2VxX3ByaW50ZihtLCAiMHglMDJ4ICIsIHBbaV0pOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CisJCQlwICs9IHBbMV0gKyAyOworCQl9IGVsc2UgeworCQkJc2VxX3B1dHMobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgcmF0ZXMgZWxlbWVudFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChwWzBdID09IENfRkhfUEFSQU1fU0VUX0VMRU1FTlRfSUQpIHsKKwkJCXBmaCA9IChzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqKXA7CisJCQlzZXFfcHJpbnRmKG0sICJIb3AgZHdlbGwgICAgICAgICAgICA9ICVkIEt1c1xuIiwKKwkJCQkgICBwZmgtPmR3ZWxsX3RpbWVbMF0gKworCQkJCSAgIDI1NiAqIHBmaC0+ZHdlbGxfdGltZVsxXSk7CisJCQlzZXFfcHJpbnRmKG0sICJIb3Agc2V0ICAgICAgICAgICAgICA9ICVkIFxuIiwKKwkJCQkgICBwZmgtPmhvcF9zZXQpOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIHBhdHRlcm4gICAgICAgICAgPSAlZCBcbiIsCisJCQkJICAgcGZoLT5ob3BfcGF0dGVybik7CisJCQlzZXFfcHJpbnRmKG0sICJIb3AgaW5kZXggICAgICAgICAgICA9ICVkIFxuIiwKKwkJCQkgICBwZmgtPmhvcF9pbmRleCk7CisJCQlwICs9IHBbMV0gKyAyOworCQl9IGVsc2UgeworCQkJc2VxX3B1dHMobSwKKwkJCQkgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgRkggcGFyYW0gZWxlbWVudFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCXNlcV9wdXRzKG0sICJObyBiZWFjb25zIHJlY2VpdmVkXG4iKTsKIAl9Ci0JZWxzZSB7Ci0JICAgIHNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IEZIIHBhcmFtIGVsZW1lbnRcbiIpOwotCSAgICByZXR1cm4gMDsKLQl9Ci0gICAgfSBlbHNlIHsKLQlzZXFfcHV0cyhtLCAiTm8gYmVhY29ucyByZWNlaXZlZFxuIik7Ci0gICAgfQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJheV9jc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yNjg0LDc0ICsyODA2LDc3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJheV9jc19wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHJheV9jc19wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHJheV9jc19wcm9jX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogI2VuZGlmCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IGJ1aWxkX2F1dGhfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBhdXRoX3R5cGUpCiB7Ci0gICAgaW50IGFkZHI7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OwotICAgIGludCBjY3NpbmRleDsKKwlpbnQgYWRkcjsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7CisJaW50IGNjc2luZGV4OwogCi0gICAgLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSA8IDApCi0gICAgewotICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGUgLSBObyBmcmVlIHR4IGNjc1xuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSA8IDApIHsKKwkJREVCVUcoMSwgInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0ZSAtIE5vIGZyZWUgdHggY2NzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CiAKLSAgICAvKiBBZGRyZXNzIGluIGNhcmQgc3BhY2UgKi8KLSAgICBhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOwotICAgIC8qIGZpbGwgaW4gdGhlIENDUyAqLwotICAgIHdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKGFkZHIgPj4gOCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIpOwotICAgIHdyaXRlYigweDIwLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0ciArIDEpOwotICAgIHdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX01TQiwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGgpOwotICAgIHdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX0xTQixwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCArIDEpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKKwkvKiBBZGRyZXNzIGluIGNhcmQgc3BhY2UgKi8KKwlhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOworCS8qIGZpbGwgaW4gdGhlIENDUyAqLworCXdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7CisJd3JpdGViKGFkZHIgPj4gOCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIpOworCXdyaXRlYigweDIwLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0ciArIDEpOworCXdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX01TQiwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGgpOworCXdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX0xTQiwKKwkgICAgICAgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGggKyAxKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7CiAKLSAgICBwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7Ci0gICAgLyogZmlsbCBpbiB0aGUgbWFjIGhlYWRlciAqLwotICAgIHdyaXRlYihQUk9UT0NPTF9WRVIgfCBBVVRIRU5USUNfVFlQRSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKLSAgICB3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwlwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7CisJLyogZmlsbCBpbiB0aGUgbWFjIGhlYWRlciAqLworCXdyaXRlYihQUk9UT0NPTF9WRVIgfCBBVVRIRU5USUNfVFlQRSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKKwl3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKIAotICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgZGVzdCwgQUREUkxFTik7Ci0gICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7Ci0gICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKKwltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGRlc3QsIEFERFJMRU4pOworCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOworCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CiAKLSAgICAvKiBGaWxsIGluIG1zZyBib2R5IHdpdGggcHJvdG9jb2wgMDAgMDAsIHNlcXVlbmNlIDAxIDAwICxzdGF0dXMgMDAgMDAgKi8KLSAgICBtZW1zZXRfaW8ocHR4LT52YXIsIDAsIDYpOwotICAgIHdyaXRlYihhdXRoX3R5cGUgJiAweGZmLCBwdHgtPnZhciArIDIpOworCS8qIEZpbGwgaW4gbXNnIGJvZHkgd2l0aCBwcm90b2NvbCAwMCAwMCwgc2VxdWVuY2UgMDEgMDAgLHN0YXR1cyAwMCAwMCAqLworCW1lbXNldF9pbyhwdHgtPnZhciwgMCwgNik7CisJd3JpdGViKGF1dGhfdHlwZSAmIDB4ZmYsIHB0eC0+dmFyICsgMik7CiAKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLAorCQkgICAgICAicmF5X2NzIHNlbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKIH0gLyogRW5kIGJ1aWxkX2F1dGhfZnJhbWUgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCByYXljc193cml0ZShjb25zdCBjaGFyICpuYW1lLCB3cml0ZV9wcm9jX3QgKncsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGUkVHIHwgU19JV1VTUiwgTlVMTCk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9CisJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZSRUcgfCBTX0lXVVNSLCBOVUxMKTsKIAlpZiAoZW50cnkpIHsKIAkJZW50cnktPndyaXRlX3Byb2MgPSB3OwogCQllbnRyeS0+ZGF0YSA9IGRhdGE7CiAJfQogfQogCi1zdGF0aWMgaW50IHdyaXRlX2Vzc2lkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCB3cml0ZV9lc3NpZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107CiAJaW50IGxlbiA9IGNvdW50OwpAQCAtMjc2NSw3ICsyODkwLDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfaW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCB3cml0ZV9pbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgY2hhciBwcm9jX251bWJlclsxMF07CiAJY2hhciAqcDsKQEAgLTI3ODUsNyArMjkxMSw3IEBACiAJCXVuc2lnbmVkIGludCBjID0gKnAgLSAnMCc7CiAJCWlmIChjID4gOSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQluciA9IG5yKjEwICsgYzsKKwkJbnIgPSBuciAqIDEwICsgYzsKIAkJcCsrOwogCX0gd2hpbGUgKC0tbGVuKTsKIAkqKGludCAqKWRhdGEgPSBucjsKQEAgLTI3OTcsNTUgKzI5MjMsNTggQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYTYsIDB4MDAwMCksCiAJUENNQ0lBX0RFVklDRV9OVUxMLAogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHJheV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcmF5X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmRydgkJPSB7Ci0JCS5uYW1lCT0gInJheV9jcyIsCi0JfSwKLQkucHJvYmUJCT0gcmF5X3Byb2JlLAotCS5yZW1vdmUJCT0gcmF5X2RldGFjaCwKLQkuaWRfdGFibGUgICAgICAgPSByYXlfaWRzLAotCS5zdXNwZW5kCT0gcmF5X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSByYXlfcmVzdW1lLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCS5uYW1lID0gInJheV9jcyIsCisJCX0sCisJLnByb2JlID0gcmF5X3Byb2JlLAorCS5yZW1vdmUgPSByYXlfZGV0YWNoLAorCS5pZF90YWJsZSA9IHJheV9pZHMsCisJLnN1c3BlbmQgPSByYXlfc3VzcGVuZCwKKwkucmVzdW1lID0gcmF5X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcmF5X2NzKHZvaWQpCiB7Ci0gICAgaW50IHJjOwotICAgIAotICAgIERFQlVHKDEsICIlc1xuIiwgcmNzaWQpOwotICAgIHJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7Ci0gICAgREVCVUcoMSwgInJheWxpbmsgaW5pdF9tb2R1bGUgcmVnaXN0ZXJfcGNtY2lhX2RyaXZlciByZXR1cm5zIDB4JXhcbiIscmMpOworCWludCByYzsKKworCURFQlVHKDEsICIlc1xuIiwgcmNzaWQpOworCXJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7CisJREVCVUcoMSwgInJheWxpbmsgaW5pdF9tb2R1bGUgcmVnaXN0ZXJfcGNtY2lhX2RyaXZlciByZXR1cm5zIDB4JXhcbiIsCisJICAgICAgcmMpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLSAgICBwcm9jX21rZGlyKCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CisJcHJvY19ta2RpcigiZHJpdmVyL3JheV9jcyIsIE5VTEwpOwogCi0gICAgcHJvY19jcmVhdGUoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgMCwgTlVMTCwgJnJheV9jc19wcm9jX2ZvcHMpOwotICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgd3JpdGVfZXNzaWQsIE5VTEwpOwotICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgd3JpdGVfaW50LCAmbmV0X3R5cGUpOwotICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIHdyaXRlX2ludCwgJnRyYW5zbGF0ZSk7CisJcHJvY19jcmVhdGUoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgMCwgTlVMTCwgJnJheV9jc19wcm9jX2ZvcHMpOworCXJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgd3JpdGVfZXNzaWQsIE5VTEwpOworCXJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgd3JpdGVfaW50LCAmbmV0X3R5cGUpOworCXJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIHdyaXRlX2ludCwgJnRyYW5zbGF0ZSk7CiAjZW5kaWYKLSAgICBpZiAodHJhbnNsYXRlICE9IDApIHRyYW5zbGF0ZSA9IDE7Ci0gICAgcmV0dXJuIDA7CisJaWYgKHRyYW5zbGF0ZSAhPSAwKQorCQl0cmFuc2xhdGUgPSAxOworCXJldHVybiAwOwogfSAvKiBpbml0X3JheV9jcyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JheV9jcyh2b2lkKQogewotICAgIERFQlVHKDAsICJyYXlfY3M6IGNsZWFudXBfbW9kdWxlXG4iKTsKKwlERUJVRygwLCAicmF5X2NzOiBjbGVhbnVwX21vZHVsZVxuIik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcyIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcyIsIE5VTEwpOwogI2VuZGlmCiAKLSAgICBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7CiB9IC8qIGV4aXRfcmF5X2NzICovCiAKIG1vZHVsZV9pbml0KGluaXRfcmF5X2NzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwppbmRleCBlZDkzYWM0Li5kYjkxZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCkBAIC05MCw0NCArOTAsNDQgQEAKIAogCiAvKiB2YXJpb3VzIFJORElTIE9JRCBkZWZzICovCi0jZGVmaW5lIE9JRF9HRU5fTElOS19TUEVFRAkJCWNjcHUyKDB4MDAwMTAxMDcpCi0jZGVmaW5lIE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUgkJY2NwdTIoMHgwMDAxMDIxYikKKyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVECQkJY3B1X3RvX2xlMzIoMHgwMDAxMDEwNykKKyNkZWZpbmUgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSCQljcHVfdG9fbGUzMigweDAwMDEwMjFiKQogCi0jZGVmaW5lIE9JRF9HRU5fWE1JVF9PSwkJCQljY3B1MigweDAwMDIwMTAxKQotI2RlZmluZSBPSURfR0VOX1JDVl9PSwkJCQljY3B1MigweDAwMDIwMTAyKQotI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IJCQljY3B1MigweDAwMDIwMTAzKQotI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUgkJCWNjcHUyKDB4MDAwMjAxMDQpCi0jZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCWNjcHUyKDB4MDAwMjAxMDUpCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSwkJCQljcHVfdG9fbGUzMigweDAwMDIwMTAxKQorI2RlZmluZSBPSURfR0VOX1JDVl9PSwkJCQljcHVfdG9fbGUzMigweDAwMDIwMTAyKQorI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IJCQljcHVfdG9fbGUzMigweDAwMDIwMTAzKQorI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDQpCisjZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDUpCiAKLSNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCQljY3B1MigweDAxMDEwMTAxKQotI2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTCQljY3B1MigweDAxMDEwMTAyKQotI2RlZmluZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QJCWNjcHUyKDB4MDEwMTAxMDMpCi0jZGVmaW5lIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRQkJY2NwdTIoMHgwMTAxMDEwNCkKKyNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCQljcHVfdG9fbGUzMigweDAxMDEwMTAxKQorI2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTCQljcHVfdG9fbGUzMigweDAxMDEwMTAyKQorI2RlZmluZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QJCWNwdV90b19sZTMyKDB4MDEwMTAxMDMpCisjZGVmaW5lIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRQkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwNCkKIAotI2RlZmluZSBPSURfODAyXzExX0JTU0lECQkJY2NwdTIoMHgwZDAxMDEwMSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9TU0lECQkJCWNjcHUyKDB4MGQwMTAxMDIpCi0jZGVmaW5lIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQkJY2NwdTIoMHgwZDAxMDEwOCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9BRERfV0VQCQkJY2NwdTIoMHgwZDAxMDExMykKLSNkZWZpbmUgT0lEXzgwMl8xMV9SRU1PVkVfV0VQCQkJY2NwdTIoMHgwZDAxMDExNCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUJCQljY3B1MigweDBkMDEwMTE1KQotI2RlZmluZSBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJCWNjcHUyKDB4MGQwMTAxMTgpCi0jZGVmaW5lIE9JRF84MDJfMTFfUFJJVkFDWV9GSUxURVIJCWNjcHUyKDB4MGQwMTAxMTkpCi0jZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOCQljY3B1MigweDBkMDEwMTFhKQotI2RlZmluZSBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCQljY3B1MigweDBkMDEwMTFiKQotI2RlZmluZSBPSURfODAyXzExX0FERF9LRVkJCQljY3B1MigweDBkMDEwMTFkKQotI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9LRVkJCQljY3B1MigweDBkMDEwMTFlKQotI2RlZmluZSBPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCWNjcHUyKDB4MGQwMTAxMWYpCi0jZGVmaW5lIE9JRF84MDJfMTFfUE1LSUQJCQljY3B1MigweDBkMDEwMTIzKQotI2RlZmluZSBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVECWNjcHUyKDB4MGQwMTAyMDMpCi0jZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRQkJY2NwdTIoMHgwZDAxMDIwNCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTAkJY2NwdTIoMHgwZDAxMDIwNSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJCQkJCWNjcHUyKDB4MGQwMTAyMDYpCi0jZGVmaW5lIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSCQkJY2NwdTIoMHgwZDAxMDIwNykKLSNkZWZpbmUgT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRAljY3B1MigweDBkMDEwMjA5KQotI2RlZmluZSBPSURfODAyXzExX1JUU19USFJFU0hPTEQJCWNjcHUyKDB4MGQwMTAyMGEpCi0jZGVmaW5lIE9JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQljY3B1MigweDBkMDEwMjBlKQotI2RlZmluZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT04JCWNjcHUyKDB4MGQwMTAyMTEpCi0jZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVAkJCWNjcHUyKDB4MGQwMTAyMTcpCisjZGVmaW5lIE9JRF84MDJfMTFfQlNTSUQJCQljcHVfdG9fbGUzMigweDBkMDEwMTAxKQorI2RlZmluZSBPSURfODAyXzExX1NTSUQJCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDEwMikKKyNkZWZpbmUgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFCQljcHVfdG9fbGUzMigweDBkMDEwMTA4KQorI2RlZmluZSBPSURfODAyXzExX0FERF9XRVAJCQljcHVfdG9fbGUzMigweDBkMDEwMTEzKQorI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9XRVAJCQljcHVfdG9fbGUzMigweDBkMDEwMTE0KQorI2RlZmluZSBPSURfODAyXzExX0RJU0FTU09DSUFURQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMTUpCisjZGVmaW5lIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExOCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgkJY3B1X3RvX2xlMzIoMHgwZDAxMDExOSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4JCWNwdV90b19sZTMyKDB4MGQwMTAxMWEpCisjZGVmaW5lIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCWNwdV90b19sZTMyKDB4MGQwMTAxMWIpCisjZGVmaW5lIE9JRF84MDJfMTFfQUREX0tFWQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMWQpCisjZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX0tFWQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMWUpCisjZGVmaW5lIE9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04JY3B1X3RvX2xlMzIoMHgwZDAxMDExZikKKyNkZWZpbmUgT0lEXzgwMl8xMV9QTUtJRAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMjMpCisjZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQJY3B1X3RvX2xlMzIoMHgwZDAxMDIwMykKKyNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCQljcHVfdG9fbGUzMigweDBkMDEwMjA0KQorI2RlZmluZSBPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQljcHVfdG9fbGUzMigweDBkMDEwMjA1KQorI2RlZmluZSBPSURfODAyXzExX1JTU0kJCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwNikKKyNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIJCQljcHVfdG9fbGUzMigweDBkMDEwMjA3KQorI2RlZmluZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECWNwdV90b19sZTMyKDB4MGQwMTAyMDkpCisjZGVmaW5lIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwYSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMJCWNwdV90b19sZTMyKDB4MGQwMTAyMGUpCisjZGVmaW5lIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTgkJY3B1X3RvX2xlMzIoMHgwZDAxMDIxMSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDIxNykKIAogCiAvKiBUeXBpY2FsIG5vaXNlL21heGltdW0gc2lnbmFsIGxldmVsIHZhbHVlcyB0YWtlbiBmcm9tIG5kaXN3cmFwcGVyIGl3X25kaXMuaCAqLwpAQCAtMTQ0LDggKzE0NCw4IEBACiAKIAogLyogY29kZXMgZm9yICJzdGF0dXMiIGZpZWxkIG9mIGNvbXBsZXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUgUk5ESVNfU1RBVFVTX0FEQVBURVJfTk9UX1JFQURZCQljY3B1MigweGMwMDEwMDExKQotI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfT1BFTgkJY2NwdTIoMHhjMDAxMDAxMikKKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0FEQVBURVJfTk9UX1JFQURZCQljcHVfdG9fbGUzMigweGMwMDEwMDExKQorI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfT1BFTgkJY3B1X3RvX2xlMzIoMHhjMDAxMDAxMikKIAogCiAvKiBORElTIGRhdGEgc3RydWN0dXJlcy4gVGFrZW4gZnJvbSB3cGFfc3VwcGxpY2FudCBkcml2ZXJfbmRpcy5jCkBAIC0zNjksOSArMzY5LDYgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IGludCBmcmVxX2NoYW5bXSA9IHsgMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKLQkJCQkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0IH07Ci0KIHN0YXRpYyBjb25zdCBpbnQgcmF0ZXNfODAyMTFnWzhdID0geyA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0IH07CiAKIHN0YXRpYyBjb25zdCBpbnQgYmNtNDMyMF9wb3dlcl9vdXRwdXRbNF0gPSB7IDI1LCA1MCwgNzUsIDEwMCB9OwpAQCAtNDQ1LDcgKzQ0Miw3IEBACiAKIAltZW1zZXQodS5nZXQsIDAsIHNpemVvZiAqdS5nZXQpOwogCXUuZ2V0LT5tc2dfdHlwZSA9IFJORElTX01TR19RVUVSWTsKLQl1LmdldC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5nZXQpOworCXUuZ2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmdldCk7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKQEAgLTQ5NCw4ICs0OTEsOCBAQAogCXUuc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCp1LnNldCkgKyBsZW4pOwogCXUuc2V0LT5vaWQgPSBvaWQ7CiAJdS5zZXQtPmxlbiA9IGNwdV90b19sZTMyKGxlbik7Ci0JdS5zZXQtPm9mZnNldCA9IGNjcHUyKHNpemVvZigqdS5zZXQpIC0gOCk7Ci0JdS5zZXQtPmhhbmRsZSA9IGNjcHUyKDApOworCXUuc2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMihzaXplb2YoKnUuc2V0KSAtIDgpOworCXUuc2V0LT5oYW5kbGUgPSBjcHVfdG9fbGUzMigwKTsKIAltZW1jcHkodS5idWYgKyBzaXplb2YoKnUuc2V0KSwgZGF0YSwgbGVuKTsKIAogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKQEAgLTY0MCw4ICs2MzcsOCBAQAogc3RhdGljIGludCBmcmVxX3RvX2RzY29uZmlnKHN0cnVjdCBpd19mcmVxICpmcmVxLCB1bnNpZ25lZCBpbnQgKmRzY29uZmlnKQogewogCWlmIChmcmVxLT5tIDwgMTAwMCAmJiBmcmVxLT5lID09IDApIHsKLQkJaWYgKGZyZXEtPm0gPj0gMSAmJiBmcmVxLT5tIDw9IEFSUkFZX1NJWkUoZnJlcV9jaGFuKSkKLQkJCSpkc2NvbmZpZyA9IGZyZXFfY2hhbltmcmVxLT5tIC0gMV0gKiAxMDAwOworCQlpZiAoZnJlcS0+bSA+PSAxICYmIGZyZXEtPm0gPD0gMTQpCisJCQkqZHNjb25maWcgPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoZnJlcS0+bSkgKiAxMDAwOwogCQllbHNlCiAJCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKQEAgLTExNzgsMTEgKzExNzUsMTEgQEAKIAkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxMSAqIDEwMDAgKiAxMDAwIC8gMjsKIAl9CiAKLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShmcmVxX2NoYW4pOworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAxNDsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFfY2hhbikgJiYgaSA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgKGkgPCAxNCkgJiYgKGkgPCBJV19NQVhfRlJFUVVFTkNJRVMpOyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFbaV0uaSA9IGkgKyAxOwotCQlyYW5nZS0+ZnJlcVtpXS5tID0gZnJlcV9jaGFuW2ldICogMTAwMDAwOworCQlyYW5nZS0+ZnJlcVtpXS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqIDEwMDAwMDsKIAkJcmFuZ2UtPmZyZXFbaV0uZSA9IDE7CiAJfQogCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gaTsKQEAgLTE2MzMsNyArMTYzMCw3IEBACiAJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdTQ0FOIik7CiAKIAlpZiAod3JxdS0+ZGF0YS5mbGFncyA9PSAwKSB7Ci0JCXRtcCA9IGNjcHUyKDEpOworCQl0bXAgPSBjcHVfdG9fbGUzMigxKTsKIAkJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiAJCWV2dC5kYXRhLmZsYWdzID0gMDsKQEAgLTI0MzEsNyArMjQyOCw3IEBACiAJCS8qIFNlbmQgc2NhbiBPSUQuIFVzZSBvZiBib3RoIE9JRHMgaXMgcmVxdWlyZWQgdG8gZ2V0IGRldmljZQogCQkgKiB3b3JraW5nLgogCQkgKi8KLQkJdG1wID0gY2NwdTIoMSk7CisJCXRtcCA9IGNwdV90b19sZTMyKDEpOwogCQlybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKIApAQCAtMjUyNyw2ICsyNTI0LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHNhbWUgYXMgcm5kaXNfbmV0ZGV2X29wcyBidXQgd2l0aCBsb2NhbCBtdWx0aWNhc3QgaGFuZGxlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc193ZXh0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHJuZGlzX3dleHRfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogCiBzdGF0aWMgaW50IHJuZGlzX3dleHRfYmluZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewpAQCAtMjU2Miw3ICsyNTcwLDggQEAKIAkgKiBybmRpc19ob3N0IHdhbnRzIHRvIGF2b2lkIGFsbCBPSUQgYXMgbXVjaCBhcyBwb3NzaWJsZQogCSAqIHNvIGRvIHByb21pc2MvbXVsdGljYXN0IGhhbmRsaW5nIGluIHJuZGlzX3dleHQuCiAJICovCi0JdXNiZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHJuZGlzX3dleHRfc2V0X211bHRpY2FzdF9saXN0OworCXVzYmRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnJuZGlzX3dleHRfbmV0ZGV2X29wczsKKwogCXRtcCA9IFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEIHwgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUOwogCXJldHZhbCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCAxNzhiMzEzLi5iZmM1ZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtOTcsMTAgKzk3LDExIEBACiAKIGNvbmZpZyBSVDJYMDBfTElCX1JGS0lMTAogCWJvb2xlYW4KLQlkZWZhdWx0IHkgaWYgKFJUMlgwMF9MSUI9eSAmJiBSRktJTEw9eSkgfHwgKFJUMlgwMF9MSUI9bSAmJiBSRktJTEwhPW4pCisJZGVmYXVsdCB5IGlmIChSVDJYMDBfTElCPXkgJiYgSU5QVVQ9eSkgfHwgKFJUMlgwMF9MSUI9bSAmJiBJTlBVVCE9bikKKwlzZWxlY3QgSU5QVVRfUE9MTERFVgogCi1jb21tZW50ICJydDJ4MDAgcmZraWxsIHN1cHBvcnQgZGlzYWJsZWQgZHVlIHRvIG1vZHVsYXJpemVkIFJGS0lMTCBhbmQgYnVpbHQtaW4gcnQyeDAwIgotCWRlcGVuZHMgb24gUlQyWDAwX0xJQj15ICYmIFJGS0lMTD1tCitjb21tZW50ICJydDJ4MDAgcmZraWxsIHN1cHBvcnQgZGlzYWJsZWQgZHVlIHRvIG1vZHVsYXJpemVkIElOUFVUIGFuZCBidWlsdC1pbiBydDJ4MDAiCisJZGVwZW5kcyBvbiBSVDJYMDBfTElCPXkgJiYgSU5QVVQ9bQogCiBjb25maWcgUlQyWDAwX0xJQl9MRURTCiAJYm9vbGVhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCmluZGV4IDkxN2NiNGYuLmYyMmQ4MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKQEAgLTIsNiArMiw3IEBACiBydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBtYWMubwogcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwY29uZmlnLm8KIHJ0MngwMGxpYi15CQkJCSs9IHJ0MngwMHF1ZXVlLm8KK3J0MngwMGxpYi15CQkJCSs9IHJ0MngwMGxpbmsubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUykJKz0gcnQyeDAwZGVidWcubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPKQkrPSBydDJ4MDBjcnlwdG8ubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMKQkrPSBydDJ4MDByZmtpbGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IDZhOTc3NjcuLjBmMDg3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMTQsOSArMTE0LDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtNTI0LDYgKzUyMSwzMiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjEyLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICAobGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDIwKSAqIDE2KTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCX0KKworCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBzdGF0ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC01MzcsNiArNTYwLDggQEAKIAkJcnQyNDAwcGNpX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0MjQwMHBjaV9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0MjQwMHBjaV9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2NvbmZpZ19jdyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtNTcyLDM1ICs1OTcsMzcgQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBiYnA7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0MjQwMHBjaV9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCAweDA4KTsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMHgwODsKKwlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsIHZnY19sZXZlbCk7CisJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JdTggcmVnOworCXJ0MjQwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHgwOCk7Cit9CiAKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAkvKgogCSAqIFRoZSBsaW5rIHR1bmVyIHNob3VsZCBub3QgcnVuIGxvbmdlciB0aGVuIDYwIHNlY29uZHMsCiAJICogYW5kIHNob3VsZCBydW4gb25jZSBldmVyeSAyIHNlY29uZHMuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5jb3VudCA+IDYwIHx8ICEocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkpCisJaWYgKGNvdW50ID4gNjAgfHwgIShjb3VudCAmIDEpKQogCQlyZXR1cm47CiAKIAkvKgogCSAqIEJhc2UgcjEzIGxpbmsgdHVuaW5nIG9uIHRoZSBmYWxzZSBjY2EgY291bnQuCiAJICovCi0JcnQyNDAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMTMsICZyZWcpOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByZWcgPCAweDIwKSB7Ci0JCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgKytyZWcpOwotCQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gcmVnOwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHJlZyA+IDB4MDgpIHsKLQkJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCAtLXJlZyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByZWc7Ci0JfQorCWlmICgocXVhbC0+ZmFsc2VfY2NhID4gNTEyKSAmJiAocXVhbC0+dmdjX2xldmVsIDwgMHgyMCkpCisJCXJ0MjQwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgKytxdWFsLT52Z2NfbGV2ZWwpOworCWVsc2UgaWYgKChxdWFsLT5mYWxzZV9jY2EgPCAxMDApICYmIChxdWFsLT52Z2NfbGV2ZWwgPiAweDA4KSkKKwkJcnQyNDAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAtLXF1YWwtPnZnY19sZXZlbCk7CiB9CiAKIC8qCkBAIC05MDQsMjEgKzkzMSwxMCBAQAogCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXUzMiByZWc7Ci0KKwkvKgorCSAqIERpc2FibGUgcG93ZXIKKwkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JDU1IwLCAwKTsKLQotCS8qCi0JICogRGlzYWJsZSBzeW5jaHJvbmlzYXRpb24uCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOwotCi0JLyoKLQkgKiBDYW5jZWwgUlggYW5kIFRYLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgcnQyNDAwcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMTExNSw2ICsxMTMxLDIwIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHFpZCA9PSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKKwl9IGVsc2UgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJfQorfQorCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0xMzY1LDcgKzEzOTUsOSBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCiAJcnQyNDAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7Ci0JaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfREVGQVVMVCB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9BU1VTKQogCQlydDI0MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKIAkJCQkgICBMRURfVFlQRV9BQ1RJVklUWSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwpAQCAtMTQxOSw3ICsxNDUxLDkgQEAKIAkgKiBJbml0aWFsaXplIGFsbCBodyBmaWVsZHMuCiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAwOwogCiAJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwpAQCAtMTU3Miw2ICsxNjA2LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjQwMHBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNDAwcGNpX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyNDAwcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjQwMHBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX2ZpbHRlcgkJPSBydDI0MDBwY2lfY29uZmlnX2ZpbHRlciwKIAkuY29uZmlnX2ludGYJCT0gcnQyNDAwcGNpX2NvbmZpZ19pbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCmluZGV4IDlhZWZkYTQuLmVjM2IwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00OCw4ICs0OCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDIwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDBjCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCmluZGV4IGQzYmMyMTguLjI3NmE4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMTQsOSArMTE0LDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtNTczLDYgKzU3MCwzMiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjEyLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICAobGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDIwKSAqIDE2KTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCX0KKworCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBzdGF0ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC01ODgsNiArNjExLDggQEAKIAkJcnQyNTAwcGNpX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0MjUwMHBjaV9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0MjUwMHBjaV9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTYxMSwyOSArNjM2LDMzIEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgQ05UM19GQUxTRV9DQ0EpOwogfQogCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDI1MDBwY2lfc2V0X3ZnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg0OCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4NDg7CisJaWYgKHF1YWwtPnZnY19sZXZlbF9yZWcgIT0gdmdjX2xldmVsKSB7CisJCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JaW50IHJzc2kgPSBydDJ4MDBfZ2V0X2xpbmtfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQl1OCByMTc7CisJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDQ4KTsKK30KIAorc3RhdGljIHZvaWQgcnQyNTAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCS8qCiAJICogVG8gcHJldmVudCBjb2xsaXNpb25zIHdpdGggTUFDIEFTSUMgb24gY2hpcHNldHMKIAkgKiB1cCB0byB2ZXJzaW9uIEMgdGhlIGxpbmsgdHVuaW5nIHNob3VsZCBoYWx0IGFmdGVyIDIwCiAJICogc2Vjb25kcyB3aGlsZSBiZWluZyBhc3NvY2lhdGVkLgogCSAqLwogCWlmIChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApIDwgUlQyNTYwX1ZFUlNJT05fRCAmJgotCSAgICBydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCAmJgotCSAgICBydDJ4MDBkZXYtPmxpbmsuY291bnQgPiAyMCkKKwkgICAgcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQgJiYgY291bnQgPiAyMCkKIAkJcmV0dXJuOwogCi0JcnQyNTAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCiAJLyoKIAkgKiBDaGlwc2V0IHZlcnNpb25zIEMgYW5kIGxvd2VyIHNob3VsZCBkaXJlY3RseSBjb250aW51ZQogCSAqIHRvIHRoZSBkeW5hbWljIENDQSB0dW5pbmcuIENoaXBzZXQgdmVyc2lvbiBEIGFuZCBoaWdoZXIKQEAgLTY0OSwyOSArNjc4LDI1IEBACiAJICogdGhlbiBjb3JydXB0IHRoZSBSMTcgdHVuaW5nLiBUbyByZW1pZHkgdGhpcyB0aGUgdHVuaW5nIHNob3VsZAogCSAqIGJlIHN0b3BwZWQgKFdoaWxlIG1ha2luZyBzdXJlIHRoZSBSMTcgdmFsdWUgd2lsbCBub3QgZXhjZWVkIGxpbWl0cykKIAkgKi8KLQlpZiAocnNzaSA8IC04MCAmJiBydDJ4MDBkZXYtPmxpbmsuY291bnQgPiAyMCkgewotCQlpZiAocjE3ID49IDB4NDEpIHsKLQkJCXIxNyA9IHJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWw7Ci0JCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JCX0KKwlpZiAocXVhbC0+cnNzaSA8IC04MCAmJiBjb3VudCA+IDIwKSB7CisJCWlmIChxdWFsLT52Z2NfbGV2ZWxfcmVnID49IDB4NDEpCisJCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHF1YWwtPnZnY19sZXZlbCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3Igc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNTgpIHsKLQkJaWYgKHIxNyAhPSAweDUwKQotCQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDUwKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNTgpIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDUwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBtaWQtUjE3IGZvciBtaWRkbGUgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNzQpIHsKLQkJaWYgKHIxNyAhPSAweDQxKQotCQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDQxKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNzQpIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDQxKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjc5LDggKzcwNCw4IEBACiAJICogTGVhdmUgc2hvcnQgb3IgbWlkZGxlIGRpc3RhbmNlIGNvbmRpdGlvbiwgcmVzdG9yZSByMTcKIAkgKiB0byB0aGUgZHluYW1pYyB0dW5pbmcgcmFuZ2UuCiAJICovCi0JaWYgKHIxNyA+PSAweDQxKSB7Ci0JCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCk7CisJaWYgKHF1YWwtPnZnY19sZXZlbF9yZWcgPj0gMHg0MSkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHF1YWwtPnZnY19sZXZlbCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY5MCwxMiArNzE1LDEyIEBACiAJICogUjE3IGlzIGluc2lkZSB0aGUgZHluYW1pYyB0dW5pbmcgcmFuZ2UsCiAJICogc3RhcnQgdHVuaW5nIHRoZSBsaW5rIGJhc2VkIG9uIHRoZSBmYWxzZSBjY2EgY291bnRlci4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHIxNyA8IDB4NDApIHsKLQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCArK3IxNyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByMTc7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gMHgzMikgewotCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIC0tcjE3KTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHIxNzsKKwlpZiAocXVhbC0+ZmFsc2VfY2NhID4gNTEyICYmIHF1YWwtPnZnY19sZXZlbF9yZWcgPCAweDQwKSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgKytxdWFsLT52Z2NfbGV2ZWxfcmVnKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gcXVhbC0+dmdjX2xldmVsX3JlZzsKKwl9IGVsc2UgaWYgKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCAmJiBxdWFsLT52Z2NfbGV2ZWxfcmVnID4gMHgzMikgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIC0tcXVhbC0+dmdjX2xldmVsX3JlZyk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHF1YWwtPnZnY19sZXZlbF9yZWc7CiAJfQogfQogCkBAIC0xMDY1LDIxICsxMDkwLDEwIEBACiAKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyIHJlZzsKLQorCS8qCisJICogRGlzYWJsZSBwb3dlcgorCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUkNTUjAsIDApOwotCi0JLyoKLQkgKiBEaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0KLQkvKgotCSAqIENhbmNlbCBSWCBhbmQgVFguCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBydDI1MDBwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC0xMjA1LDcgKzEyMTksNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX09XTkVSLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLApAQCAtMTI3NSw2ICsxMjg5LDIwIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHFpZCA9PSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKKwl9IGVsc2UgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJfQorfQorCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0xNTI0LDcgKzE1NTIsOSBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCiAJcnQyNTAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7Ci0JaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfREVGQVVMVCB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9BU1VTKQogCQlydDI1MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKIAkJCQkgICBMRURfVFlQRV9BQ1RJVklUWSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwpAQCAtMTcyMSw3ICsxNzUxLDkgQEAKIAkgKiBJbml0aWFsaXplIGFsbCBodyBmaWVsZHMuCiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAKQEAgLTE4NzMsNiArMTkwNSw3IEBACiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyeDAwcGNpX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI1MDBwY2lfd3JpdGVfYmVhY29uLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI1MDBwY2lfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19maWx0ZXIJCT0gcnQyNTAwcGNpX2NvbmZpZ19maWx0ZXIsCiAJLmNvbmZpZ19pbnRmCQk9IHJ0MjUwMHBjaV9jb25maWdfaW50ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAppbmRleCBlMTM1MjQ3Li5jZTJmMDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTksOCArNTksOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDIwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA0MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwppbmRleCAzZTJhYzJiLi45ZTYzMGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjA0LDkgKzIwNCw2IEBACiB7CiAJdTE2IHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTI4MCw2ICsyNzcsMTggQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwogCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCitzdGF0aWMgaW50IHJ0MjUwMHVzYl9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXUxNiByZWc7CisKKwlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxOSwgJnJlZyk7CisJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxOV9CSVQ3KTsKK30KKyNlbHNlCisjZGVmaW5lIHJ0MjUwMHVzYl9yZmtpbGxfcG9sbAlOVUxMCisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCkBAIC02MzQsNiArNjQzLDMyIEBACiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOCwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTE2IHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxOCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMThfREVMQVlfQUZURVJfQkVBQ09OLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAyMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMThfQkVBQ09OU19CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9BVVRPX1dBS0UsIDApOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTgsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9BVVRPX1dBS0UsIDEpOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTgsIHJlZyk7CisJfQorCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTY0Nyw2ICs2ODIsOCBAQAogCQkJCQkgbGliY29uZi0+Y29uZi0+cG93ZXJfbGV2ZWwpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0MjUwMHVzYl9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0MjUwMHVzYl9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTY3MCw3ICs3MDcsOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQxNihyZWcsIFNUQV9DU1IzX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQyNTAwdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQogewogCXUxNiBlZXByb207CiAJdTE2IHZhbHVlOwpAQCAtNjkxLDcgKzcyOSw3IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQkJQVFVORV9WR0NVUFBFUik7CiAJcnQyNTAwdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2YWx1ZSk7CiAKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gdmFsdWU7CisJcXVhbC0+dmdjX2xldmVsID0gdmFsdWU7CiB9CiAKIC8qCkBAIC0xMTc2LDcgKzEyMTQsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfTkVXX1NFUSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKQEAgLTE1NjIsMTIgKzE2MDAsMjIgQEAKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKIAogCXJ0MjUwMHVzYl9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9yYWRpbywgTEVEX1RZUEVfUkFESU8pOwotCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKQorCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0RFRkFVTFQgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfQVNVUykKIAkJcnQyNTAwdXNiX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCiAJCQkJICAgTEVEX1RZUEVfQUNUSVZJVFkpOwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KIAogCS8qCisJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgorCSAqLworI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCisJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KKworCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGRpc2FibGVkLgogCSAqLwogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUMsICZlZXByb20pOwpAQCAtMTc1Miw3ICsxODAwLDkgQEAKIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CiAJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBUWERfREVTQ19TSVpFOwogCkBAIC0xODM5LDcgKzE4ODksNyBAQAogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkgewogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCV9fc2V0X2JpdChDT05GSUdfQ1JZUFRPX0NPUFlfSVYsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0NPUFlfSVYsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAl9CiAJX19zZXRfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKQEAgLTE4NzMsNiArMTkyMyw3IEBACiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDB1c2JfdW5pbml0aWFsaXplLAogCS5jbGVhcl9lbnRyeQkJPSBydDJ4MDB1c2JfY2xlYXJfZW50cnksCiAJLnNldF9kZXZpY2Vfc3RhdGUJPSBydDI1MDB1c2Jfc2V0X2RldmljZV9zdGF0ZSwKKwkucmZraWxsX3BvbGwJCT0gcnQyNTAwdXNiX3Jma2lsbF9wb2xsLAogCS5saW5rX3N0YXRzCQk9IHJ0MjUwMHVzYl9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI1MDB1c2JfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQyNTAwdXNiX2xpbmtfdHVuZXIsCkBAIC0xODgxLDYgKzE5MzIsNyBAQAogCS53cml0ZV9iZWFjb24JCT0gcnQyNTAwdXNiX3dyaXRlX2JlYWNvbiwKIAkuZ2V0X3R4X2RhdGFfbGVuCT0gcnQyNTAwdXNiX2dldF90eF9kYXRhX2xlbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI1MDB1c2Jfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNTAwdXNiX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0MjUwMHVzYl9jb25maWdfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQyNTAwdXNiX2NvbmZpZ19rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKaW5kZXggNDM0N2RmZC4uNWJjNDZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTU5LDggKzU5LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAwNmEKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwNjAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCkBAIC0xODksNiArMTg5LDE0IEBACiAgKiBNQUNfQ1NSMTk6IEdQSU8gY29udHJvbCByZWdpc3Rlci4KICAqLwogI2RlZmluZSBNQUNfQ1NSMTkJCQkweDA0MjYKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDAJCQlGSUVMRDMyKDB4MDAwMSkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDEJCQlGSUVMRDMyKDB4MDAwMikKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDIJCQlGSUVMRDMyKDB4MDAwNCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDMJCQlGSUVMRDMyKDB4MDAwOCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDQJCQlGSUVMRDMyKDB4MDAxMCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDUJCQlGSUVMRDMyKDB4MDAyMCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDYJCQlGSUVMRDMyKDB4MDA0MCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDcJCQlGSUVMRDMyKDB4MDA4MCkKIAogLyoKICAqIE1BQ19DU1IyMDogTEVEIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKaW5kZXggMzllY2YzYi4uODRiZDZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCkBAIC00NCw3ICs0NSw3IEBACiAvKgogICogTW9kdWxlIGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIyLjIuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMy4wIgogI2RlZmluZSBEUlZfUFJPSkVDVAkiaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tIgogCiAvKgpAQCAtMTc3LDUyICsxNzgsNDEgQEAKICAqLwogc3RydWN0IGxpbmtfcXVhbCB7CiAJLyoKLQkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBMaW5rIHR1bmluZy4KLQkgKiBGb3IgdGhlIGF2ZXJhZ2UgUlNTSSB2YWx1ZSB3ZSB1c2UgdGhlICJXYWxraW5nIGF2ZXJhZ2UiIGFwcHJvYWNoLgotCSAqIFdoZW4gYWRkaW5nIFJTU0kgdG8gdGhlIGF2ZXJhZ2UgdmFsdWUgdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbgotCSAqIGlzIG5lZWRlZDoKLQkgKgotCSAqICAgICAgICBhdmdfcnNzaSA9ICgoYXZnX3Jzc2kgKiA3KSArIHJzc2kpIC8gODsKLQkgKgotCSAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIG9ubHkgbmVlZCAxIHZhcmlhYmxlCi0JICogdG8gc3RvcmUgdGhlIGF2ZXJhZ2UgaW4gKE5vIG5lZWQgZm9yIGEgY291bnQgYW5kIGEgdG90YWwpLgotCSAqIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBub3JtYWwgYXZlcmFnZSB2YWx1ZXMgd2lsbCBvdmVyIHRpbWUKLQkgKiBtb3ZlIGxlc3MgYW5kIGxlc3MgdG93YXJkcyBuZXdseSBhZGRlZCB2YWx1ZXMgdGhpcyByZXN1bHRzCi0JICogdGhhdCB3aXRoIGxpbmsgdHVuaW5nLCB0aGUgZGV2aWNlIGNhbiBoYXZlIGEgdmVyeSBnb29kIFJTU0kKLQkgKiBmb3IgYSBmZXcgbWludXRlcyBidXQgd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIGF3YXkgZnJvbSB0aGUgQVAKLQkgKiB0aGUgYXZlcmFnZSB3aWxsIG5vdCBkZWNyZWFzZSBmYXN0IGVub3VnaCB0byBjb21wZW5zYXRlLgotCSAqIFRoZSB3YWxraW5nIGF2ZXJhZ2UgY29tcGVuc2F0ZXMgdGhpcyBhbmQgd2lsbCBtb3ZlIHRvd2FyZHMKLQkgKiB0aGUgbmV3IHZhbHVlcyBjb3JyZWN0bHkgYWxsb3dpbmcgYSBlZmZlY3RpdmUgbGluayB0dW5pbmcuCisJICogU3RhdGlzdGljcyByZXF1aXJlZCBmb3IgTGluayB0dW5pbmcgYnkgZHJpdmVyCisJICogVGhlIHJzc2kgdmFsdWUgaXMgcHJvdmlkZWQgYnkgcnQyeDAwbGliIGR1cmluZyB0aGUKKwkgKiBsaW5rX3R1bmVyKCkgY2FsbGJhY2sgZnVuY3Rpb24uCisJICogVGhlIGZhbHNlX2NjYSBmaWVsZCBpcyBmaWxsZWQgZHVyaW5nIHRoZSBsaW5rX3N0YXRzKCkKKwkgKiBjYWxsYmFjayBmdW5jdGlvbiBhbmQgY291bGQgYmUgdXNlZCBkdXJpbmcgdGhlCisJICogbGlua190dW5lcigpIGNhbGxiYWNrIGZ1bmN0aW9uLgogCSAqLwotCWludCBhdmdfcnNzaTsKKwlpbnQgcnNzaTsKIAlpbnQgZmFsc2VfY2NhOwogCiAJLyoKLQkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBTaWduYWwgcXVhbGl0eSBjYWxjdWxhdGlvbi4KLQkgKiBGb3IgY2FsY3VsYXRpbmcgdGhlIFNpZ25hbCBxdWFsaXR5IHdlIGhhdmUgdG8gZGV0ZXJtaW5lCi0JICogdGhlIHRvdGFsIG51bWJlciBvZiBzdWNjZXNzIGFuZCBmYWlsZWQgUlggYW5kIFRYIGZyYW1lcy4KLQkgKiBBZnRlciB0aGF0IHdlIGFsc28gdXNlIHRoZSBhdmVyYWdlIFJTU0kgdmFsdWUgdG8gaGVscAotCSAqIGRldGVybWluaW5nIHRoZSBzaWduYWwgcXVhbGl0eS4KLQkgKiBGb3IgdGhlIGNhbGN1bGF0aW9uIHdlIHdpbGwgdXNlIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorCSAqIFZHQyBsZXZlbHMKKwkgKiBIYXJkd2FyZSBkcml2ZXIgd2lsbCB0dW5lIHRoZSBWR0MgbGV2ZWwgZHVyaW5nIGVhY2ggY2FsbAorCSAqIHRvIHRoZSBsaW5rX3R1bmVyKCkgY2FsbGJhY2sgZnVuY3Rpb24uIFRoaXMgdmdjX2xldmVsIGlzCisJICogaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGluayBxdWFsaXR5IHN0YXRpc3RpY3MgbGlrZQorCSAqIGF2ZXJhZ2UgUlNTSSBhbmQgdGhlIGZhbHNlIENDQSBjb3VudC4KIAkgKgotCSAqICAgICAgICAgcnNzaV9wZXJjZW50YWdlID0gKGF2Z19yc3NpICogMTAwKSAvIHJzc2lfb2Zmc2V0Ci0JICogICAgICAgICByeF9wZXJjZW50YWdlID0gKHJ4X3N1Y2Nlc3MgKiAxMDApIC8gcnhfdG90YWwKLQkgKiAgICAgICAgIHR4X3BlcmNlbnRhZ2UgPSAodHhfc3VjY2VzcyAqIDEwMCkgLyB0eF90b3RhbAotCSAqICAgICAgICAgYXZnX3NpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiBhdmdfcnNzaSkgKwotCSAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1RYICogdHhfcGVyY2VudGFnZSkgKwotCSAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1JYICogcnhfcGVyY2VudGFnZSkpIC8gMTAwCi0JICoKLQkgKiBUaGlzIHZhbHVlIHNob3VsZCB0aGVuIGJlIGNoZWNrZWQgdG8gbm90IGJlIGdyZWF0ZWQgdGhlbiAxMDAuCisJICogSW4gc29tZSBjYXNlcyB0aGUgZHJpdmVycyBuZWVkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbgorCSAqIHRoZSBjdXJyZW50bHkgImRlc2lyZWQiIFZHQyBsZXZlbCBhbmQgdGhlIGxldmVsIGNvbmZpZ3VyZWQKKwkgKiBpbiB0aGUgaGFyZHdhcmUuIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50IHRvIHJlZHVjZSB0aGUKKwkgKiBudW1iZXIgb2YgQkJQIHJlZ2lzdGVyIHJlYWRzIHRvIHJlZHVjZSByZWdpc3RlciBhY2Nlc3MKKwkgKiBvdmVyaGVhZC4gRm9yIHRoaXMgcmVhc29uIHdlIHN0b3JlIGJvdGggdmFsdWVzIGhlcmUuCiAJICovCi0JaW50IHJ4X3BlcmNlbnRhZ2U7CisJdTggdmdjX2xldmVsOworCXU4IHZnY19sZXZlbF9yZWc7CisKKwkvKgorCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIFNpZ25hbCBxdWFsaXR5IGNhbGN1bGF0aW9uLgorCSAqIFRoZXNlIGZpZWxkcyBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlua19zdGF0cygpCisJICogY2FsbGJhY2sgZnVuY3Rpb24uCisJICovCiAJaW50IHJ4X3N1Y2Nlc3M7CiAJaW50IHJ4X2ZhaWxlZDsKLQlpbnQgdHhfcGVyY2VudGFnZTsKIAlpbnQgdHhfc3VjY2VzczsKIAlpbnQgdHhfZmFpbGVkOwotI2RlZmluZSBXRUlHSFRfUlNTSQkyMAotI2RlZmluZSBXRUlHSFRfUlgJNDAKLSNkZWZpbmUgV0VJR0hUX1RYCTQwCiB9OwogCiAvKgpAQCAtMjg2LDkgKzI3NiwxNiBAQAogCXN0cnVjdCBsaW5rX2FudCBhbnQ7CiAKIAkvKgotCSAqIEFjdGl2ZSBWR0MgbGV2ZWwKKwkgKiBDdXJyZW50bHkgYWN0aXZlIGF2ZXJhZ2UgUlNTSSB2YWx1ZQogCSAqLwotCWludCB2Z2NfbGV2ZWw7CisJaW50IGF2Z19yc3NpOworCisJLyoKKwkgKiBDdXJyZW50bHkgcHJlY2FsY3VsYXRlZCBwZXJjZW50YWdlcyBvZiBzdWNjZXNzZnVsCisJICogVFggYW5kIFJYIGZyYW1lcy4KKwkgKi8KKwlpbnQgcnhfcGVyY2VudGFnZTsKKwlpbnQgdHhfcGVyY2VudGFnZTsKIAogCS8qCiAJICogV29yayBzdHJ1Y3R1cmUgZm9yIHNjaGVkdWxpbmcgcGVyaW9kaWMgbGluayB0dW5pbmcuCkBAIC0yOTcsNTUgKzI5NCw2IEBACiB9OwogCiAvKgotICogU21hbGwgaGVscGVyIG1hY3JvIHRvIHdvcmsgd2l0aCBtb3Zpbmcvd2Fsa2luZyBhdmVyYWdlcy4KLSAqLwotI2RlZmluZSBNT1ZJTkdfQVZFUkFHRShfX2F2ZywgX192YWwsIF9fc2FtcGxlcykgXAotCSggKCgoX19hdmcpICogKChfX3NhbXBsZXMpIC0gMSkpICsgKF9fdmFsKSkgLyAoX19zYW1wbGVzKSApCi0KLS8qCi0gKiBXaGVuIHdlIGxhY2sgUlNTSSBpbmZvcm1hdGlvbiByZXR1cm4gc29tZXRoaW5nIGxlc3MgdGhlbiAtODAgdG8KLSAqIHRlbGwgdGhlIGRyaXZlciB0byB0dW5lIHRoZSBkZXZpY2UgdG8gbWF4aW11bSBzZW5zaXRpdml0eS4KLSAqLwotI2RlZmluZSBERUZBVUxUX1JTU0kJKCAtMTI4ICkKLQotLyoKLSAqIExpbmsgcXVhbGl0eSBhY2Nlc3MgZnVuY3Rpb25zLgotICovCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfZ2V0X2xpbmtfcnNzaShzdHJ1Y3QgbGluayAqbGluaykKLXsKLQlpZiAobGluay0+cXVhbC5hdmdfcnNzaSAmJiBsaW5rLT5xdWFsLnJ4X3N1Y2Nlc3MpCi0JCXJldHVybiBsaW5rLT5xdWFsLmF2Z19yc3NpOwotCXJldHVybiBERUZBVUxUX1JTU0k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaShzdHJ1Y3QgbGluayAqbGluaykKLXsKLQlpZiAobGluay0+YW50LnJzc2lfYW50ICYmIGxpbmstPnF1YWwucnhfc3VjY2VzcykKLQkJcmV0dXJuIGxpbmstPmFudC5yc3NpX2FudDsKLQlyZXR1cm4gREVGQVVMVF9SU1NJOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3Jlc2V0X2xpbmtfYW50X3Jzc2koc3RydWN0IGxpbmsgKmxpbmspCi17Ci0JbGluay0+YW50LnJzc2lfYW50ID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpX2hpc3Rvcnkoc3RydWN0IGxpbmsgKmxpbmssCi0JCQkJCQkgICBlbnVtIGFudGVubmEgYW50KQotewotCWlmIChsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2FudCAtIEFOVEVOTkFfQV0pCi0JCXJldHVybiBsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2FudCAtIEFOVEVOTkFfQV07Ci0JcmV0dXJuIERFRkFVTFRfUlNTSTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX3VwZGF0ZV9hbnRfcnNzaShzdHJ1Y3QgbGluayAqbGluaywgaW50IHJzc2kpCi17Ci0JaW50IG9sZF9yc3NpID0gbGluay0+YW50LnJzc2lfaGlzdG9yeVtsaW5rLT5hbnQuYWN0aXZlLnJ4IC0gQU5URU5OQV9BXTsKLQlsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2xpbmstPmFudC5hY3RpdmUucnggLSBBTlRFTk5BX0FdID0gcnNzaTsKLQlyZXR1cm4gb2xkX3Jzc2k7Ci19Ci0KLS8qCiAgKiBJbnRlcmZhY2Ugc3RydWN0dXJlCiAgKiBQZXIgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZGV0YWlscywgdGhpcyBzdHJ1Y3R1cmUKICAqIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIGZvciBpZWVlODAyMTFfdmlmLgpAQCAtNDQ4LDcgKzM5Niw3IEBACiAJaW50IGFja190aW1lb3V0OwogCWludCBhY2tfY29uc3VtZV90aW1lOwogCi0JdTY0IGJhc2ljX3JhdGVzOworCXUzMiBiYXNpY19yYXRlczsKIAogCWludCBzbG90X3RpbWU7CiAKQEAgLTUyMCw5ICs0NjgsMTAgQEAKIAkgKi8KIAlpbnQgKCpwcm9iZV9odykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCWNoYXIgKigqZ2V0X2Zpcm13YXJlX25hbWUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLQl1MTYgKCpnZXRfZmlybXdhcmVfY3JjKSAoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7Ci0JaW50ICgqbG9hZF9maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICAgICBjb25zdCBzaXplX3QgbGVuKTsKKwlpbnQgKCpjaGVja19maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOworCWludCAoKmxvYWRfZmlybXdhcmUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwogCiAJLyoKIAkgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24vZGVpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KQEAgLTU0NCw4ICs0OTMsMTAgQEAKIAlpbnQgKCpyZmtpbGxfcG9sbCkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCXZvaWQgKCpsaW5rX3N0YXRzKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKTsKLQl2b2lkICgqcmVzZXRfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLQl2b2lkICgqbGlua190dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCXZvaWQgKCpyZXNldF90dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOworCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpOwogCiAJLyoKIAkgKiBUWCBjb250cm9sIGhhbmRsZXJzCkBAIC01NTgsNiArNTA5LDggQEAKIAlpbnQgKCpnZXRfdHhfZGF0YV9sZW4pIChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIAl2b2lkICgqa2lja190eF9xdWV1ZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZSk7CisJdm9pZCAoKmtpbGxfdHhfcXVldWUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpOwogCiAJLyoKIAkgKiBSWCBjb250cm9sIGhhbmRsZXJzCkBAIC02MjUsNyArNTc4LDYgQEAKIAlERVZJQ0VfU1RBVEVfUkVHSVNURVJFRF9IVywKIAlERVZJQ0VfU1RBVEVfSU5JVElBTElaRUQsCiAJREVWSUNFX1NUQVRFX1NUQVJURUQsCi0JREVWSUNFX1NUQVRFX1NUQVJURURfU1VTUEVORCwKIAlERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywKIAlERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsCiAKQEAgLTYzNyw2ICs1ODksNyBAQAogCURSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsCiAJRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELAogCURSSVZFUl9SRVFVSVJFX0RNQSwKKwlEUklWRVJfUkVRVUlSRV9DT1BZX0lWLAogCiAJLyoKIAkgKiBEcml2ZXIgZmVhdHVyZXMKQEAgLTY1Myw3ICs2MDYsNiBAQAogCUNPTkZJR19FWFRFUk5BTF9MTkFfQkcsCiAJQ09ORklHX0RPVUJMRV9BTlRFTk5BLAogCUNPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLAotCUNPTkZJR19DUllQVE9fQ09QWV9JViwKIH07CiAKIC8qCkBAIC02ODksOCArNjQxLDggQEAKIAl1bnNpZ25lZCBsb25nIHJma2lsbF9zdGF0ZTsKICNkZWZpbmUgUkZLSUxMX1NUQVRFX0FMTE9DQVRFRAkJMQogI2RlZmluZSBSRktJTExfU1RBVEVfUkVHSVNURVJFRAkJMgotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF93b3JrOworI2RlZmluZSBSRktJTExfU1RBVEVfQkxPQ0tFRAkJMworCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpyZmtpbGxfcG9sbF9kZXY7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgpAQCAtOTE4LDcgKzg3MCw3IEBACiAJcmV0dXJuIChjaGlwc2V0LT5yZiA9PSBjaGlwKTsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgcnQyeDAwX3Jldihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQpCitzdGF0aWMgaW5saW5lIHUzMiBydDJ4MDBfcmV2KGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCkKIHsKIAlyZXR1cm4gY2hpcHNldC0+cmV2OwogfQpAQCAtOTgyLDcgKzkzNCw3IEBACiAJCQkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPCiBpbnQgcnQyeDAwbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAjZWxzZQogI2RlZmluZSBydDJ4MDBtYWNfc2V0X2tleQlOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKaW5kZXggZTY2ZmIzMS4uOWMyZjU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMyLDcgKzMyLDcgQEAKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCiAJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCi0JCQkgICB1OCAqbWFjLCB1OCAqYnNzaWQpCisJCQkgICBjb25zdCB1OCAqbWFjLCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IHJ0MngwMGludGZfY29uZiBjb25mOwogCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CkBAIC00Miw2ICs0Miw4IEBACiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAkJY29uZi5zeW5jID0gVFNGX1NZTkNfQkVBQ09OOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CkBAIC0xNTIsOCArMTU0LDcgQEAKIAkgKi8KIAlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfYW50KHJ0MngwMGRldiwgYW50KTsKIAotCXJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHJ0MngwMGRldik7Ci0JcnQyeDAwX3Jlc2V0X2xpbmtfYW50X3Jzc2koJnJ0MngwMGRldi0+bGluayk7CisJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIHRydWUpOwogCiAJbWVtY3B5KGFjdGl2ZSwgYW50LCBzaXplb2YoKmFudCkpOwogCkBAIC0xOTEsNyArMTkyLDcgQEAKIAkgKiB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBsaW5rIHR1bmVyLgogCSAqLwogCWlmIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkKLQkJcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKKwkJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAogCXJ0MngwMGRldi0+Y3Vycl9iYW5kID0gY29uZi0+Y2hhbm5lbC0+YmFuZDsKIAlydDJ4MDBkZXYtPnR4X3Bvd2VyID0gY29uZi0+cG93ZXJfbGV2ZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKaW5kZXggYWVlOWNiYS4uMGI0MTg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ5LDkgKzQ5LDE0IEBACiB2b2lkIHJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCSAgICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICFod19rZXkgfHwgZW50cnktPnNrYi0+ZG9fbm90X2VuY3J5cHQpCisJCXJldHVybjsKKwogCV9fc2V0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy0+ZmxhZ3MpOwogCiAJdHhkZXNjLT5jaXBoZXIgPSBydDJ4MDBjcnlwdG9fa2V5X3RvX2NpcGhlcihod19rZXkpOwpAQCAtNjksMTEgKzc0LDE3IEBACiAJCV9fc2V0X2JpdChFTlRSWV9UWERfRU5DUllQVF9NTUlDLCAmdHhkZXNjLT5mbGFncyk7CiB9CiAKLXVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQordW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCXVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7CiAKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICFrZXkgfHwgc2tiLT5kb19ub3RfZW5jcnlwdCkKKwkJcmV0dXJuIG92ZXJoZWFkOworCiAJLyoKIAkgKiBFeHRlbmQgZnJhbWUgbGVuZ3RoIHRvIGluY2x1ZGUgSVYvRUlWL0lDVi9NTUlDLAogCSAqIG5vdGUgdGhhdCB0aGVzZSBsZW5ndGhzIHNob3VsZCBvbmx5IGJlIGFkZGVkIHdoZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggNTRkZDEwMC4uMDdkMzc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMzAsOSArMTMwLDExIEBACiB9OwogCiB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBlbnVtIGNpcGhlciBjaXBoZXIsIGVudW0gcnhfY3J5cHRvIHN0YXR1cykKKwkJCSAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKIAlzdHJ1Y3QgcnQyeDAwZGVidWdfaW50ZiAqaW50ZiA9IHJ0MngwMGRldi0+ZGVidWdmc19pbnRmOworCWVudW0gY2lwaGVyIGNpcGhlciA9IHJ4ZGVzYy0+Y2lwaGVyOworCWVudW0gcnhfY3J5cHRvIHN0YXR1cyA9IHJ4ZGVzYy0+Y2lwaGVyX3N0YXR1czsKIAogCWlmIChjaXBoZXIgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKQogCQljaXBoZXIgPSBDSVBIRVJfVEtJUDsKQEAgLTQzMywxMSArNDM1LDEyIEBACiAJaWYgKGluZGV4ID49IGRlYnVnLT5fX25hbWUud29yZF9jb3VudCkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJXAogCQkJCQkJCQlcCisJaW5kZXggKz0gKGRlYnVnLT5fX25hbWUud29yZF9iYXNlIC8JCQlcCisJCSAgZGVidWctPl9fbmFtZS53b3JkX3NpemUpOwkJCVwKKwkJCQkJCQkJXAogCWlmIChkZWJ1Zy0+X19uYW1lLmZsYWdzICYgUlQyWDAwREVCVUdGU19PRkZTRVQpCQlcCiAJCWluZGV4ICo9IGRlYnVnLT5fX25hbWUud29yZF9zaXplOwkJXAogCQkJCQkJCQlcCi0JaW5kZXggKz0gZGVidWctPl9fbmFtZS53b3JkX2Jhc2U7CQkJXAotCQkJCQkJCQlcCiAJZGVidWctPl9fbmFtZS5yZWFkKGludGYtPnJ0MngwMGRldiwgaW5kZXgsICZ2YWx1ZSk7CVwKIAkJCQkJCQkJXAogCXNpemUgPSBzcHJpbnRmKGxpbmUsIF9fZm9ybWF0LCB2YWx1ZSk7CQkJXApAQCAtNDc0LDExICs0NzcsMTIgQEAKIAlzaXplID0gc3RybGVuKGxpbmUpOwkJCQkJXAogCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwobGluZSwgTlVMTCwgMCk7CQkJXAogCQkJCQkJCQlcCisJaW5kZXggKz0gKGRlYnVnLT5fX25hbWUud29yZF9iYXNlIC8JCQlcCisJCSAgZGVidWctPl9fbmFtZS53b3JkX3NpemUpOwkJCVwKKwkJCQkJCQkJXAogCWlmIChkZWJ1Zy0+X19uYW1lLmZsYWdzICYgUlQyWDAwREVCVUdGU19PRkZTRVQpCQlcCiAJCWluZGV4ICo9IGRlYnVnLT5fX25hbWUud29yZF9zaXplOwkJXAogCQkJCQkJCQlcCi0JaW5kZXggKz0gZGVidWctPl9fbmFtZS53b3JkX2Jhc2U7CQkJXAotCQkJCQkJCQlcCiAJZGVidWctPl9fbmFtZS53cml0ZShpbnRmLT5ydDJ4MDBkZXYsIGluZGV4LCB2YWx1ZSk7CVwKIAkJCQkJCQkJXAogCSpvZmZzZXQgKz0gc2l6ZTsJCQkJCVwKQEAgLTU0Myw5ICs1NDcsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWJsb2ItPmRhdGEgPSBkYXRhOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZHJpdmVyOiAlc1xuIiwgaW50Zi0+cnQyeDAwZGV2LT5vcHMtPm5hbWUpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAidmVyc2lvbjogJXNcbiIsIERSVl9WRVJTSU9OKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImNvbXBpbGVkOiAlcyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImRyaXZlcjpcdCVzXG4iLCBpbnRmLT5ydDJ4MDBkZXYtPm9wcy0+bmFtZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJ2ZXJzaW9uOlx0JXNcbiIsIERSVl9WRVJTSU9OKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImNvbXBpbGVkOlx0JXMgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7CiAJYmxvYi0+c2l6ZSA9IHN0cmxlbihibG9iLT5kYXRhKTsKIAogCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKG5hbWUsIFNfSVJVU1IsIGludGYtPmRyaXZlcl9mb2xkZXIsIGJsb2IpOwpAQCAtNTY2LDE0ICs1NzAsMjcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlibG9iLT5kYXRhID0gZGF0YTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJ0IGNoaXA6ICUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5ydCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBjaGlwOiAlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmYpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmV2aXNpb246JTA4eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJldik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJydCBjaGlwOlx0JTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJ0KTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmIGNoaXA6XHQlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmYpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmV2aXNpb246XHQlMDh4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmV2KTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgIlxuIik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjc3IgbGVuZ3RoOiAlZFxuIiwgZGVidWctPmNzci53b3JkX2NvdW50KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImVlcHJvbSBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+ZWVwcm9tLndvcmRfY291bnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiYmJwIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5iYnAud29yZF9jb3VudCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+cmYud29yZF9jb3VudCk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZWdpc3Rlclx0YmFzZVx0d29yZHNcdHdvcmRzaXplXG4iKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImNzclx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5jc3Iud29yZF9iYXNlLAorCQkJZGVidWctPmNzci53b3JkX2NvdW50LAorCQkJZGVidWctPmNzci53b3JkX3NpemUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZWVwcm9tXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPmVlcHJvbS53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+ZWVwcm9tLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+ZWVwcm9tLndvcmRfc2l6ZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJiYnBcdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+YmJwLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5iYnAud29yZF9jb3VudCwKKwkJCWRlYnVnLT5iYnAud29yZF9zaXplKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPnJmLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5yZi53b3JkX2NvdW50LAorCQkJZGVidWctPnJmLndvcmRfc2l6ZSk7CiAJYmxvYi0+c2l6ZSA9IHN0cmxlbihibG9iLT5kYXRhKTsKIAogCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKG5hbWUsIFNfSVJVU1IsIGludGYtPmRyaXZlcl9mb2xkZXIsIGJsb2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaAppbmRleCBhOTIxMDRkLi4wMzVjYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCA4N2MwZjJjLi4wNWY5NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzAsNjAgKzMwLDYgQEAKICNpbmNsdWRlICJydDJ4MDBsaWIuaCIKIAogLyoKLSAqIExpbmsgdHVuaW5nIGhhbmRsZXJzCi0gKi8KLXZvaWQgcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCS8qCi0JICogUmVzZXQgbGluayBpbmZvcm1hdGlvbi4KLQkgKiBCb3RoIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZnYyBsZXZlbCBhcyB3ZWxsIGFzCi0JICogdGhlIGxpbmsgdHVuZXIgY291bnRlciBzaG91bGQgYmUgcmVzZXQuIFJlc2V0dGluZwotCSAqIHRoZSBjb3VudGVyIGlzIGltcG9ydGFudCBmb3IgZGV2aWNlcyB3aGVyZSB0aGUKLQkgKiBkZXZpY2Ugc2hvdWxkIG9ubHkgcGVyZm9ybSBsaW5rIHR1bmluZyBkdXJpbmcgdGhlCi0JICogZmlyc3QgbWludXRlIGFmdGVyIGJlaW5nIGVuYWJsZWQuCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLmNvdW50ID0gMDsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMDsKLQotCS8qCi0JICogUmVzZXQgdGhlIGxpbmsgdHVuZXIuCi0JICovCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmVzZXRfdHVuZXIocnQyeDAwZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3N0YXJ0X2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQkvKgotCSAqIENsZWFyIGFsbCAocG9zc2libHkpIHByZS1leGlzdGluZyBxdWFsaXR5IHN0YXRpc3RpY3MuCi0JICovCi0JbWVtc2V0KCZydDJ4MDBkZXYtPmxpbmsucXVhbCwgMCwgc2l6ZW9mKHJ0MngwMGRldi0+bGluay5xdWFsKSk7Ci0KLQkvKgotCSAqIFRoZSBSWCBhbmQgVFggcGVyY2VudGFnZSBzaG91bGQgc3RhcnQgYXQgNTAlCi0JICogdGhpcyB3aWxsIGFzc3VyZSB3ZSB3aWxsIGdldCBhdCBsZWFzdCBnZXQgc29tZQotCSAqIGRlY2VudCB2YWx1ZSB3aGVuIHRoZSBsaW5rIHR1bmVyIHN0YXJ0cy4KLQkgKiBUaGUgdmFsdWUgd2lsbCBiZSBkcm9wcGVkIGFuZCBvdmVyd3JpdHRlbiB3aXRoCi0JICogdGhlIGNvcnJlY3QgKG1lYXN1cmVkICl2YWx1ZSBhbnl3YXkgZHVyaW5nIHRoZQotCSAqIGZpcnN0IHJ1biBvZiB0aGUgbGluayB0dW5lci4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9wZXJjZW50YWdlID0gNTA7Ci0JcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfcGVyY2VudGFnZSA9IDUwOwotCi0JcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmcnQyeDAwZGV2LT5saW5rLndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9zdG9wX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+bGluay53b3JrKTsKLX0KLQotLyoKICAqIFJhZGlvIGNvbnRyb2wgaGFuZGxlcnMuCiAgKi8KIGludCBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0xMzcsOSArODMsMTAgQEAKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBTdG9wIHRoZSBUWCBxdWV1ZXMuCisJICogU3RvcCB0aGUgVFggcXVldWVzIGluIG1hYzgwMjExLgogCSAqLwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKKwlydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYpOwogCiAJLyoKIAkgKiBEaXNhYmxlIFJYLgpAQCAtMTYxLDIzOCArMTA4LDE1IEBACiAJICogV2hlbiB3ZSBhcmUgZGlzYWJsaW5nIHRoZSBSWCwgd2Ugc2hvdWxkIGFsc28gc3RvcCB0aGUgbGluayB0dW5lci4KIAkgKi8KIAlpZiAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGKQotCQlydDJ4MDBsaWJfc3RvcF9saW5rX3R1bmVyKHJ0MngwMGRldik7CisJCXJ0MngwMGxpbmtfc3RvcF90dW5lcihydDJ4MDBkZXYpOwogCiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKIAogCS8qCiAJICogV2hlbiB3ZSBhcmUgZW5hYmxpbmcgdGhlIFJYLCB3ZSBzaG91bGQgYWxzbyBzdGFydCB0aGUgbGluayB0dW5lci4KIAkgKi8KLQlpZiAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT04gJiYKLQkgICAgKHJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCB8fCBydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KSkKLQkJcnQyeDAwbGliX3N0YXJ0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfc2FtcGxlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0Jc3RydWN0IGFudGVubmFfc2V0dXAgYW50OwotCWludCBzYW1wbGVfYSA9Ci0JICAgIHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaV9oaXN0b3J5KCZydDJ4MDBkZXYtPmxpbmssIEFOVEVOTkFfQSk7Ci0JaW50IHNhbXBsZV9iID0KLQkgICAgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpX2hpc3RvcnkoJnJ0MngwMGRldi0+bGluaywgQU5URU5OQV9CKTsKLQotCW1lbWNweSgmYW50LCAmcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUsIHNpemVvZihhbnQpKTsKLQotCS8qCi0JICogV2UgYXJlIGRvbmUgc2FtcGxpbmcuIE5vdyB3ZSBzaG91bGQgZXZhbHVhdGUgdGhlIHJlc3VsdHMuCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmPSB+QU5URU5OQV9NT0RFX1NBTVBMRTsKLQotCS8qCi0JICogRHVyaW5nIHRoZSBsYXN0IHBlcmlvZCB3ZSBoYXZlIHNhbXBsZWQgdGhlIFJTU0kKLQkgKiBmcm9tIGJvdGggYW50ZW5uYSdzLiBJdCBub3cgaXMgdGltZSB0byBkZXRlcm1pbmUKLQkgKiB3aGljaCBhbnRlbm5hIGRlbW9uc3RyYXRlZCB0aGUgYmVzdCBwZXJmb3JtYW5jZS4KLQkgKiBXaGVuIHdlIGFyZSBhbHJlYWR5IG9uIHRoZSBhbnRlbm5hIHdpdGggdGhlIGJlc3QKLQkgKiBwZXJmb3JtYW5jZSwgdGhlbiB0aGVyZSByZWFsbHkgaXMgbm90aGluZyBmb3IgdXMKLQkgKiBsZWZ0IHRvIGRvLgotCSAqLwotCWlmIChzYW1wbGVfYSA9PSBzYW1wbGVfYikKLQkJcmV0dXJuOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKLQkJYW50LnJ4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKLQkJYW50LnR4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COwotCi0JcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJmFudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hX2V2YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBhbnQ7Ci0JaW50IHJzc2lfY3VyciA9IHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQlpbnQgcnNzaV9vbGQgPSBydDJ4MDBfdXBkYXRlX2FudF9yc3NpKCZydDJ4MDBkZXYtPmxpbmssIHJzc2lfY3Vycik7Ci0KLQltZW1jcHkoJmFudCwgJnJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlLCBzaXplb2YoYW50KSk7Ci0KLQkvKgotCSAqIExlZ2FjeSBkcml2ZXIgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIHN3YXAgYW50ZW5uYSdzCi0JICogd2hlbiB0aGUgZGlmZmVyZW5jZSBpbiBSU1NJIGlzIGdyZWF0ZXIgdGhhdCA1LiBUaGlzCi0JICogYWxzbyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBSU1NJIHdhcyBhY3R1YWxseSBiZXR0ZXIKLQkgKiB0aGVuIHRoZSBwcmV2aW91cyBzYW1wbGUuCi0JICogV2hlbiB0aGUgZGlmZmVyZW5jZSBleGNlZWRzIHRoZSB0aHJlc2hvbGQgd2Ugc2hvdWxkCi0JICogc2FtcGxlIHRoZSByc3NpIGZyb20gdGhlIG90aGVyIGFudGVubmEgdG8gbWFrZSBhIHZhbGlkCi0JICogY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSAyIGFudGVubmFzLgotCSAqLwotCWlmIChhYnMocnNzaV9jdXJyIC0gcnNzaV9vbGQpIDwgNSkKLQkJcmV0dXJuOwotCi0JcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyB8PSBBTlRFTk5BX01PREVfU0FNUExFOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKLQkJYW50LnJ4ID0gKGFudC5yeCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKLQkJYW50LnR4ID0gKGFudC50eCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOwotCi0JcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJmFudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgc29mdHdhcmUgZGl2ZXJzaXR5IGlzIGVuYWJsZWQgZm9yCi0JICogZWl0aGVyIHRoZSBUWCBvciBSWCBhbnRlbm5hIChvciBib3RoKS4KLQkgKiBBbHdheXMgcGVyZm9ybSB0aGlzIGNoZWNrIHNpbmNlIHdpdGhpbiB0aGUgbGluawotCSAqIHR1bmVyIGludGVydmFsIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZC4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKLQotCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOwotCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOwotCi0JaWYgKCEocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKSAmJgotCSAgICAhKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpIHsKLQkJcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHdlIGhhdmUgb25seSBzYW1wbGVkIHRoZSBkYXRhIG92ZXIgdGhlIGxhc3QgcGVyaW9kCi0JICogd2Ugc2hvdWxkIG5vdyBoYXJ2ZXN0IHRoZSBkYXRhLiBPdGhlcndpc2UganVzdCBldmFsdWF0ZQotCSAqIHRoZSBkYXRhLiBUaGUgbGF0dGVyIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCBvbmNlCi0JICogZXZlcnkgMiBzZWNvbmRzLgotCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9NT0RFX1NBTVBMRSkKLQkJcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfc2FtcGxlKHJ0MngwMGRldik7Ci0JZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkKLQkJcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfZXZhbChydDJ4MDBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfdXBkYXRlX2xpbmtfc3RhdHMoc3RydWN0IGxpbmsgKmxpbmssIGludCByc3NpKQotewotCWludCBhdmdfcnNzaSA9IHJzc2k7Ci0KLQkvKgotCSAqIFVwZGF0ZSBnbG9iYWwgUlNTSQotCSAqLwotCWlmIChsaW5rLT5xdWFsLmF2Z19yc3NpKQotCQlhdmdfcnNzaSA9IE1PVklOR19BVkVSQUdFKGxpbmstPnF1YWwuYXZnX3Jzc2ksIHJzc2ksIDgpOwotCWxpbmstPnF1YWwuYXZnX3Jzc2kgPSBhdmdfcnNzaTsKLQotCS8qCi0JICogVXBkYXRlIGFudGVubmEgUlNTSQotCSAqLwotCWlmIChsaW5rLT5hbnQucnNzaV9hbnQpCi0JCXJzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5hbnQucnNzaV9hbnQsIHJzc2ksIDgpOwotCWxpbmstPmFudC5yc3NpX2FudCA9IHJzc2k7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9wcmVjYWxjdWxhdGVfbGlua19zaWduYWwoc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKLXsKLQlpZiAocXVhbC0+cnhfZmFpbGVkIHx8IHF1YWwtPnJ4X3N1Y2Nlc3MpCi0JCXF1YWwtPnJ4X3BlcmNlbnRhZ2UgPQotCQkgICAgKHF1YWwtPnJ4X3N1Y2Nlc3MgKiAxMDApIC8KLQkJICAgIChxdWFsLT5yeF9mYWlsZWQgKyBxdWFsLT5yeF9zdWNjZXNzKTsKLQllbHNlCi0JCXF1YWwtPnJ4X3BlcmNlbnRhZ2UgPSA1MDsKLQotCWlmIChxdWFsLT50eF9mYWlsZWQgfHwgcXVhbC0+dHhfc3VjY2VzcykKLQkJcXVhbC0+dHhfcGVyY2VudGFnZSA9Ci0JCSAgICAocXVhbC0+dHhfc3VjY2VzcyAqIDEwMCkgLwotCQkgICAgKHF1YWwtPnR4X2ZhaWxlZCArIHF1YWwtPnR4X3N1Y2Nlc3MpOwotCWVsc2UKLQkJcXVhbC0+dHhfcGVyY2VudGFnZSA9IDUwOwotCi0JcXVhbC0+cnhfc3VjY2VzcyA9IDA7Ci0JcXVhbC0+cnhfZmFpbGVkID0gMDsKLQlxdWFsLT50eF9zdWNjZXNzID0gMDsKLQlxdWFsLT50eF9mYWlsZWQgPSAwOwotfQotCi1zdGF0aWMgaW50IHJ0MngwMGxpYl9jYWxjdWxhdGVfbGlua19zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJICAgaW50IHJzc2kpCi17Ci0JaW50IHJzc2lfcGVyY2VudGFnZSA9IDA7Ci0JaW50IHNpZ25hbDsKLQotCS8qCi0JICogV2UgbmVlZCBhIHBvc2l0aXZlIHZhbHVlIGZvciB0aGUgUlNTSS4KLQkgKi8KLQlpZiAocnNzaSA8IDApCi0JCXJzc2kgKz0gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbnQgcGVyY2VudGFnZXMsCi0JICogd2hpY2ggd2lsbCBiZSB1c2VkIGZvciB0aGUgc2lnbmFsLgotCSAqLwotCWlmIChydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0KQotCQlyc3NpX3BlcmNlbnRhZ2UgPSAocnNzaSAqIDEwMCkgLyBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OwotCi0JLyoKLQkgKiBBZGQgdGhlIGluZGl2aWR1YWwgcGVyY2VudGFnZXMgYW5kIHVzZSB0aGUgV0VJR0hUCi0JICogZGVmaW5lcyB0byBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgbGluayBzaWduYWwuCi0JICovCi0Jc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIHJzc2lfcGVyY2VudGFnZSkgKwotCQkgIChXRUlHSFRfVFggKiBydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9wZXJjZW50YWdlKSArCi0JCSAgKFdFSUdIVF9SWCAqIHJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3BlcmNlbnRhZ2UpKSAvIDEwMDsKLQotCXJldHVybiAoc2lnbmFsID4gMTAwKSA/IDEwMCA6IHNpZ25hbDsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2xpbmtfdHVuZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIGxpbmsud29yay53b3JrKTsKLQotCS8qCi0JICogV2hlbiB0aGUgcmFkaW8gaXMgc2h1dHRpbmcgZG93biB3ZSBzaG91bGQKLQkgKiBpbW1lZGlhdGVseSBjZWFzZSBhbGwgbGluayB0dW5pbmcuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFVwZGF0ZSBzdGF0aXN0aWNzLgotCSAqLwotCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfc3RhdHMocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5saW5rLnF1YWwpOwotCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExRkNTRXJyb3JDb3VudCArPQotCSAgICBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9mYWlsZWQ7Ci0KLQkvKgotCSAqIE9ubHkgcGVyZm9ybSB0aGUgbGluayB0dW5pbmcgd2hlbiBMaW5rIHR1bmluZwotCSAqIGhhcyBiZWVuIGVuYWJsZWQgKFRoaXMgY291bGQgaGF2ZSBiZWVuIGRpc2FibGVkIGZyb20gdGhlIEVFUFJPTSkuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3R1bmVyKHJ0MngwMGRldik7Ci0KLQkvKgotCSAqIFByZWNhbGN1bGF0ZSBhIHBvcnRpb24gb2YgdGhlIGxpbmsgc2lnbmFsIHdoaWNoIGlzCi0JICogaW4gYmFzZWQgb24gdGhlIHR4L3J4IHN1Y2Nlc3MvZmFpbHVyZSBjb3VudGVycy4KLQkgKi8KLQlydDJ4MDBsaWJfcHJlY2FsY3VsYXRlX2xpbmtfc2lnbmFsKCZydDJ4MDBkZXYtPmxpbmsucXVhbCk7Ci0KLQkvKgotCSAqIFNlbmQgYSBzaWduYWwgdG8gdGhlIGxlZCB0byB1cGRhdGUgdGhlIGxlZCBzaWduYWwgc3RyZW5ndGguCi0JICovCi0JcnQyeDAwbGVkc19sZWRfcXVhbGl0eShydDJ4MDBkZXYsIHJ0MngwMGRldi0+bGluay5xdWFsLmF2Z19yc3NpKTsKLQotCS8qCi0JICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgc2luY2UgdGhpcyBjb3VsZAotCSAqIHBvc3NpYmx5IHJlc2V0IHNvbWUgc3RhdGlzdGljcy4KLQkgKi8KLQlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYShydDJ4MDBkZXYpOwotCi0JLyoKLQkgKiBJbmNyZWFzZSB0dW5lciBjb3VudGVyLCBhbmQgcmVzY2hlZHVsZSB0aGUgbmV4dCBsaW5rIHR1bmVyIHJ1bi4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuY291bnQrKzsKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJnJ0MngwMGRldi0+bGluay53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTikKKwkJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfcGFja2V0ZmlsdGVyX3NjaGVkdWxlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC00MzQsNyArMTU4LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX1VQREFURV9CRUFDT04pCi0JCXJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYpOworCQlydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmLCB0cnVlKTsKIAogCWlmIChkZWxheWVkX2ZsYWdzICYgREVMQVlFRF9DT05GSUdfRVJQKQogCQlydDJ4MDBsaWJfY29uZmlnX2VycChydDJ4MDBkZXYsIGludGYsICZjb25mKTsKQEAgLTQ2Nyw3ICsxOTEsOSBAQAogCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAKIAlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMpCiAJCXJldHVybjsKIAogCS8qCkBAIC00OTAsNyArMjE2LDcgQEAKIAkJCQkJCSAgIHJ0MngwMGxpYl9iZWFjb25kb25lX2l0ZXIsCiAJCQkJCQkgICBydDJ4MDBkZXYpOwogCi0Jc2NoZWR1bGVfd29yaygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2JlYWNvbmRvbmUpOwogCkBAIC01OTcsNyArMzIzLDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSAmcnQyeDAwZGV2LT5yeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAljb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKnJhdGU7CiAJdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IGFsaWduOwpAQCAtNjY4LDMwICszOTMsMjIgQEAKIAogCWlmIChpZHggPCAwKSB7CiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiRnJhbWUgcmVjZWl2ZWQgd2l0aCB1bnJlY29nbml6ZWQgc2lnbmFsLCIKLQkJCSJzaWduYWw9MHglLjJ4LCBwbGNwPSVkLlxuIiwgcnhkZXNjLnNpZ25hbCwKLQkJCSEhKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApKTsKKwkJCSJzaWduYWw9MHglLjJ4LCB0eXBlPSVkLlxuIiwgcnhkZXNjLnNpZ25hbCwKKwkJCShyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX1NJR05BTF9NQVNLKSk7CiAJCWlkeCA9IDA7CiAJfQogCiAJLyoKLQkgKiBPbmx5IHVwZGF0ZSBsaW5rIHN0YXR1cyBpZiB0aGlzIGlzIGEgYmVhY29uIGZyYW1lIGNhcnJ5aW5nIG91ciBic3NpZC4KKwkgKiBVcGRhdGUgZXh0cmEgY29tcG9uZW50cwogCSAqLwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7Ci0JaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSAmJgotCSAgICAocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9NWV9CU1MpKQotCQlydDJ4MDBsaWJfdXBkYXRlX2xpbmtfc3RhdHMoJnJ0MngwMGRldi0+bGluaywgcnhkZXNjLnJzc2kpOwotCi0JcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhydDJ4MDBkZXYsCi0JCQkJICByeGRlc2MuY2lwaGVyLAotCQkJCSAgcnhkZXNjLmNpcGhlcl9zdGF0dXMpOwotCi0JcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfc3VjY2VzcysrOworCXJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzKHJ0MngwMGRldiwgZW50cnktPnNrYiwgJnJ4ZGVzYyk7CisJcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhydDJ4MDBkZXYsICZyeGRlc2MpOwogCiAJcnhfc3RhdHVzLT5tYWN0aW1lID0gcnhkZXNjLnRpbWVzdGFtcDsKIAlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gaWR4OwotCXJ4X3N0YXR1cy0+cXVhbCA9Ci0JICAgIHJ0MngwMGxpYl9jYWxjdWxhdGVfbGlua19zaWduYWwocnQyeDAwZGV2LCByeGRlc2MucnNzaSk7CisJcnhfc3RhdHVzLT5xdWFsID0gcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHJ0MngwMGRldiwgcnhkZXNjLnJzc2kpOwogCXJ4X3N0YXR1cy0+c2lnbmFsID0gcnhkZXNjLnJzc2k7CisJcnhfc3RhdHVzLT5ub2lzZSA9IHJ4ZGVzYy5ub2lzZTsKIAlyeF9zdGF0dXMtPmZsYWcgPSByeGRlc2MuZmxhZ3M7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUucng7CiAKQEAgLTEwNjcsNyArNzg0LDkgQEAKIAlpZiAocnQyeDAwZGV2LT5vcHMtPmJjbi0+ZW50cnlfbnVtID4gMCkKIAkJcnQyeDAwZGV2LT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PQogCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8Ci0JCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOworCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfAorCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX1dEUyk7CiAKIAkvKgogCSAqIExldCB0aGUgZHJpdmVyIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZWN0IHRoZSBjYXBhYmlsaXRpZXMuCkBAIC0xMDgzLDcgKzgwMiw2IEBACiAJICovCiAJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmludGZfd29yaywgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKTsKIAlJTklUX1dPUksoJnJ0MngwMGRldi0+ZmlsdGVyX3dvcmssIHJ0MngwMGxpYl9wYWNrZXRmaWx0ZXJfc2NoZWR1bGVkKTsKLQlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5saW5rLndvcmssIHJ0MngwMGxpYl9saW5rX3R1bmVyKTsKIAogCS8qCiAJICogQWxsb2NhdGUgcXVldWUgYXJyYXkuCkBAIC0xMTA0LDYgKzgyMiw3IEBACiAJLyoKIAkgKiBSZWdpc3RlciBleHRyYSBjb21wb25lbnRzLgogCSAqLworCXJ0MngwMGxpbmtfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDBsZWRzX3JlZ2lzdGVyKHJ0MngwMGRldik7CiAJcnQyeDAwcmZraWxsX2FsbG9jYXRlKHJ0MngwMGRldik7CiAJcnQyeDAwZGVidWdfcmVnaXN0ZXIocnQyeDAwZGV2KTsKQEAgLTExNjMsMjMgKzg4MiwxNyBAQAogI2lmZGVmIENPTkZJR19QTQogaW50IHJ0MngwMGxpYl9zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlpbnQgcmV0dmFsOwotCiAJTk9USUNFKHJ0MngwMGRldiwgIkdvaW5nIHRvIHNsZWVwLlxuIik7CiAKIAkvKgotCSAqIE9ubHkgY29udGludWUgaWYgbWFjODAyMTEgaGFzIG9wZW4gaW50ZXJmYWNlcy4KKwkgKiBQcmV2ZW50IG1hYzgwMjExIGZyb20gYWNjZXNzaW5nIGRyaXZlciB3aGlsZSBzdXNwZW5kZWQuCiAJICovCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAhdGVzdF9iaXQoREVWSUNFX1NUQVRFX1NUQVJURUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJZ290byBleGl0OwotCi0Jc2V0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRF9TVVNQRU5ELCAmcnQyeDAwZGV2LT5mbGFncyk7CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIERpc2FibGUgcmFkaW8uCisJICogQ2xlYW51cCBhcyBtdWNoIGFzIHBvc3NpYmxlLgogCSAqLwotCXJ0MngwMGxpYl9zdG9wKHJ0MngwMGRldik7CiAJcnQyeDAwbGliX3VuaW5pdGlhbGl6ZShydDJ4MDBkZXYpOwogCiAJLyoKQEAgLTExODgsNyArOTAxLDYgQEAKIAlydDJ4MDBsZWRzX3N1c3BlbmQocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7CiAKLWV4aXQ6CiAJLyoKIAkgKiBTZXQgZGV2aWNlIG1vZGUgdG8gc2xlZXAgZm9yIHBvd2VyIG1hbmFnZW1lbnQsCiAJICogb24gc29tZSBoYXJkd2FyZSB0aGlzIGNhbGwgc2VlbXMgdG8gY29uc2lzdGVudGx5IGZhaWwuCkBAIC0xMjAwLDggKzkxMiw3IEBACiAJICogdGhlIHJhZGlvIGFuZCB0aGUgb3RoZXIgY29tcG9uZW50cyBhbHJlYWR5IGRpc2FibGVkIHRoZQogCSAqIGRldmljZSBpcyBhcyBnb29kIGFzIGRpc2FibGVkLgogCSAqLwotCXJldHZhbCA9IHJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBTVEFURV9TTEVFUCk7Ci0JaWYgKHJldHZhbCkKKwlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX1NMRUVQKSkKIAkJV0FSTklORyhydDJ4MDBkZXYsICJEZXZpY2UgZmFpbGVkIHRvIGVudGVyIHNsZWVwIHN0YXRlLCAiCiAJCQkiY29udGludWUgc3VzcGVuZGluZy5cbiIpOwogCkBAIC0xMjA5LDMyICs5MjAsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3N1c3BlbmQpOwogCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfcmVzdW1lX2ludGYodm9pZCAqZGF0YSwgdTggKm1hYywKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7Ci0Jc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKLQotCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7Ci0KLQlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLAotCQkJICAgICAgdmlmLT50eXBlLCBpbnRmLT5tYWMsIGludGYtPmJzc2lkKTsKLQotCi0JLyoKLQkgKiBNYXN0ZXIgb3IgQWQtaG9jIG1vZGUgcmVxdWlyZSBhIG5ldyBiZWFjb24gdXBkYXRlLgotCSAqLwotCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKLQkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlpbnRmLT5kZWxheWVkX2ZsYWdzIHw9IERFTEFZRURfVVBEQVRFX0JFQUNPTjsKLQotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKLX0KLQogaW50IHJ0MngwMGxpYl9yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpbnQgcmV0dmFsOwotCiAJTk9USUNFKHJ0MngwMGRldiwgIldha2luZyB1cC5cbiIpOwogCiAJLyoKQEAgLTEyNDQsNjAgKzkzMSwxMSBAQAogCXJ0MngwMGxlZHNfcmVzdW1lKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIE9ubHkgY29udGludWUgaWYgbWFjODAyMTEgaGFkIG9wZW4gaW50ZXJmYWNlcy4KLQkgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRF9TVVNQRU5ELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBSZWluaXRpYWxpemUgZGV2aWNlIGFuZCBhbGwgYWN0aXZlIGludGVyZmFjZXMuCi0JICovCi0JcmV0dmFsID0gcnQyeDAwbGliX3N0YXJ0KHJ0MngwMGRldik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JLyoKLQkgKiBSZWNvbmZpZ3VyZSBkZXZpY2UuCi0JICovCi0JcmV0dmFsID0gcnQyeDAwbWFjX2NvbmZpZyhydDJ4MDBkZXYtPmh3LCB+MCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JLyoKLQkgKiBJdGVyYXRvciBvdmVyIGVhY2ggYWN0aXZlIGludGVyZmFjZSB0bwotCSAqIHJlY29uZmlndXJlIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhydDJ4MDBkZXYtPmh3LAotCQkJCQkgICAgcnQyeDAwbGliX3Jlc3VtZV9pbnRmLCBydDJ4MDBkZXYpOwotCi0JLyoKIAkgKiBXZSBhcmUgcmVhZHkgYWdhaW4gdG8gcmVjZWl2ZSByZXF1ZXN0cyBmcm9tIG1hYzgwMjExLgogCSAqLwogCXNldF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAotCS8qCi0JICogSXQgaXMgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhhdCBtYWM4MDIxMSBoYXMgYXR0ZW1wdGVkCi0JICogdG8gc2VuZCBmcmFtZXMgd2hpbGUgd2Ugd2VyZSBzdXNwZW5kaW5nIG9yIHJlc3VtaW5nLgotCSAqIEluIHRoYXQgY2FzZSB3ZSBoYXZlIGRpc2FibGVkIHRoZSBUWCBxdWV1ZSBhbmQgc2hvdWxkCi0JICogbm93IGVuYWJsZSBpdCBhZ2FpbgotCSAqLwotCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKLQotCS8qCi0JICogRHVyaW5nIGludGVyZmFjZSBpdGVyYXRpb24gd2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZQotCSAqIGRlbGF5ZWRfZmxhZ3MsIHRpbWUgdG8gaGFuZGxlcyB0aGUgZXZlbnQgYnkgY2FsbGluZwotCSAqIHRoZSB3b3JrIGhhbmRsZXIgZGlyZWN0bHkuCi0JICovCi0JcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKCZydDJ4MDBkZXYtPmludGZfd29yayk7Ci0KIAlyZXR1cm4gMDsKLQotZXhpdDoKLQlydDJ4MDBsaWJfc3RvcChydDJ4MDBkZXYpOwotCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKLQlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7Ci0KLQlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3Jlc3VtZSk7CiAjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaAppbmRleCA3MTY5YzIyLi5mZGVkYjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCmluZGV4IGJhYjA1YTUuLmQyZGVlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzUsNyArMzUsNiBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJY2hhciAqZndfbmFtZTsKIAlpbnQgcmV0dmFsOwotCXUxNiBjcmM7CiAKIAkvKgogCSAqIFJlYWQgY29ycmVjdCBmaXJtd2FyZSBmcm9tIGhhcmRkaXNrLgpAQCAtNjEsMTYgKzYwLDI2IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNyYyA9IHJ0MngwMGRldi0+b3BzLT5saWItPmdldF9maXJtd2FyZV9jcmMoZnctPmRhdGEsIGZ3LT5zaXplKTsKLQlpZiAoY3JjICE9IChmdy0+ZGF0YVtmdy0+c2l6ZSAtIDJdIDw8IDggfCBmdy0+ZGF0YVtmdy0+c2l6ZSAtIDFdKSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGaXJtd2FyZSBjaGVja3N1bSBlcnJvci5cbiIpOwotCQlyZXR2YWwgPSAtRU5PRU5UOwotCQlnb3RvIGV4aXQ7Ci0JfQotCiAJSU5GTyhydDJ4MDBkZXYsICJGaXJtd2FyZSBkZXRlY3RlZCAtIHZlcnNpb246ICVkLiVkLlxuIiwKIAkgICAgIGZ3LT5kYXRhW2Z3LT5zaXplIC0gNF0sIGZ3LT5kYXRhW2Z3LT5zaXplIC0gM10pOwogCisJcmV0dmFsID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y2hlY2tfZmlybXdhcmUocnQyeDAwZGV2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCXN3aXRjaCAocmV0dmFsKSB7CisJY2FzZSBGV19PSzoKKwkJYnJlYWs7CisJY2FzZSBGV19CQURfQ1JDOgorCQlFUlJPUihydDJ4MDBkZXYsICJGaXJtd2FyZSBjaGVja3N1bSBlcnJvci5cbiIpOworCQlnb3RvIGV4aXQ7CisJY2FzZSBGV19CQURfTEVOR1RIOgorCQlFUlJPUihydDJ4MDBkZXYsCisJCSAgICAgICJJbnZhbGlkIGZpcm13YXJlIGZpbGUgbGVuZ3RoIChsZW49JXp1KVxuIiwgZnctPnNpemUpOworCQlnb3RvIGV4aXQ7CisJY2FzZSBGV19CQURfVkVSU0lPTjoKKwkJRVJST1IocnQyeDAwZGV2LAorCQkgICAgICAiQ3VycmVudCBmaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGRldGVjdGVkIGNoaXBzZXQuXG4iKTsKKwkJZ290byBleGl0OworCX07CisKIAlydDJ4MDBkZXYtPmZ3ID0gZnc7CiAKIAlyZXR1cm4gMDsKQEAgLTc4LDcgKzg3LDcgQEAKIGV4aXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAtRU5PRU5UOwogfQogCiBpbnQgcnQyeDAwbGliX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5jCmluZGV4IGEwY2QzNWIuLjQ5NjcxZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkgcnQyeDAwZGV2LT5vcHMtPm5hbWUsIHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpKTsKIAogCWlmIChydDJ4MDBkZXYtPmxlZF9yYWRpby5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczpyYWRpbyIsIGRldl9uYW1lKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6OnJhZGlvIiwgZGV2X25hbWUpOwogCiAJCXJldHZhbCA9IHJ0MngwMGxlZHNfcmVnaXN0ZXJfbGVkKHJ0MngwMGRldiwKIAkJCQkJCSAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl9CiAKIAlpZiAocnQyeDAwZGV2LT5sZWRfYXNzb2MuZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6YXNzb2MiLCBkZXZfbmFtZSk7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOjphc3NvYyIsIGRldl9uYW1lKTsKIAogCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCiAJCQkJCQkgJnJ0MngwMGRldi0+bGVkX2Fzc29jLApAQCAtMTU0LDcgKzE1NCw3IEBACiAJfQogCiAJaWYgKHJ0MngwMGRldi0+bGVkX3F1YWwuZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6cXVhbGl0eSIsIGRldl9uYW1lKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6OnF1YWxpdHkiLCBkZXZfbmFtZSk7CiAKIAkJcmV0dmFsID0gcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQocnQyeDAwZGV2LAogCQkJCQkJICZydDJ4MDBkZXYtPmxlZF9xdWFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmgKaW5kZXggOWRmNGE0OWJkLi4xMDQ2OTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKaW5kZXggODZjZDI2Zi4uYTYzMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMzLDcgKzMzLDcgQEAKICAqIEJvdGggdGhlIGxpbmsgdHVuZXIgYXMgdGhlIHJma2lsbCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlciBzZWNvbmQuCiAgKi8KICNkZWZpbmUgTElOS19UVU5FX0lOVEVSVkFMCSggcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikgKQotI2RlZmluZSBSRktJTExfUE9MTF9JTlRFUlZBTAkoIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopICkKKyNkZWZpbmUgUkZLSUxMX1BPTExfSU5URVJWQUwJKCAxMDAwICkKIAogLyoKICAqIHJ0MngwMF9yYXRlOiBQZXIgcmF0ZSBkZXZpY2UgaW5mb3JtYXRpb24KQEAgLTYzLDcgKzYzLDYgQEAKIGludCBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwbGliX3RvZ2dsZV9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBlbnVtIGRldl9zdGF0ZSBzdGF0ZSk7Ci12b2lkIHJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCiAvKgogICogSW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCkBAIC03Nyw3ICs3Niw3IEBACiB2b2lkIHJ0MngwMGxpYl9jb25maWdfaW50ZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLAotCQkJICAgdTggKm1hYywgdTggKmJzc2lkKTsKKwkJCSAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICpic3NpZCk7CiB2b2lkIHJ0MngwMGxpYl9jb25maWdfZXJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZik7CkBAIC0xMjQsOSArMTIzLDExIEBACiAgKiBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uIC0gU2VuZCBuZXcgYmVhY29uIGZyb20gbWFjODAyMTEgdG8gaGFyZHdhcmUKICAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgogICogQHZpZjogSW50ZXJmYWNlIGZvciB3aGljaCB0aGUgYmVhY29uIHNob3VsZCBiZSB1cGRhdGVkLgorICogQGVuYWJsZV9iZWFjb246IEVuYWJsZSBiZWFjb25pbmcKICAqLwogaW50IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGNvbnN0IGJvb2wgZW5hYmxlX2JlYWNvbik7CiAKIC8qKgogICogcnQyeDAwcXVldWVfaW5kZXhfaW5jIC0gSW5kZXggaW5jcmVtZW50YXRpb24gZnVuY3Rpb24KQEAgLTE0MCw2ICsxNDEsMTUgQEAKIHZvaWQgcnQyeDAwcXVldWVfaW5kZXhfaW5jKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgZW51bSBxdWV1ZV9pbmRleCBpbmRleCk7CiAKIC8qKgorICogcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMgLSBIYWx0IGFsbCBkYXRhIHF1ZXVlcworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGxvb3AgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIHF1ZXVlcyB0byBzdG9wCisgKiBhbnkgcGVuZGluZyBvdXRnb2luZyBmcmFtZXMuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgogICogcnQyeDAwcXVldWVfaW5pdF9xdWV1ZXMgLSBJbml0aWFsaXplIGFsbCBkYXRhIHF1ZXVlcwogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKgpAQCAtMTU0LDYgKzE2NCw4MSBAQAogaW50IHJ0MngwMHF1ZXVlX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBxdWV1ZV9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCisvKioKKyAqIHJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzIC0gVXBkYXRlIGxpbmsgc3RhdGlzdGljcyBmcm9tIFJYIGZyYW1lCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEBza2I6IFJlY2VpdmVkIGZyYW1lCisgKiBAcnhkZXNjOiBSZWNlaXZlZCBmcmFtZSBkZXNjcmlwdG9yCisgKgorICogVXBkYXRlIGxpbmsgc3RhdGlzdGljcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAqIHJlY2VpdmVkIGZyYW1lIGRlc2NyaXB0b3IuCisgKi8KK3ZvaWQgcnQyeDAwbGlua191cGRhdGVfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpOworCisvKioKKyAqIHJ0MngwMGxpbmtfY2FsY3VsYXRlX3NpZ25hbCAtIENhbGN1bGF0ZSBzaWduYWwgcXVhbGl0eQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAcnNzaTogUlggRnJhbWUgUlNTSQorICoKKyAqIENhbGN1bGF0ZSB0aGUgc2lnbmFsIHF1YWxpdHkgb2YgYSBmcmFtZSBiYXNlZCBvbiB0aGUgcnNzaQorICogbWVhc3VyZWQgZHVyaW5nIHRoZSByZWNlaXZpbmcgb2YgdGhlIGZyYW1lIGFuZCB0aGUgZ2xvYmFsCisgKiBsaW5rIHF1YWxpdHkgc3RhdGlzdGljcyBtZWFzdXJlZCBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlCisgKiBsaW5rIHR1bmluZy4gVGhlIHJlc3VsdCBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwIHdoaWNoCisgKiBpcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBzaWduYWwgcXVhbGl0eS4KKyAqLworaW50IHJ0MngwMGxpbmtfY2FsY3VsYXRlX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgcnNzaSk7CisKKy8qKgorICogcnQyeDAwbGlua19zdGFydF90dW5lciAtIFN0YXJ0IHBlcmlvZGljIGxpbmsgdHVuZXIgd29yaworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogVGhpcyBzdGFydCB0aGUgbGluayB0dW5lciBwZXJpb2RpYyB3b3JrLCB0aGlzIHdvcmsgd2lsbAorICogYmUgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHVudGlsICZydDJ4MDBsaW5rX3N0b3BfdHVuZXIgaGFzCisgKiBiZWVuIGNhbGxlZC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMGxpbmtfc3RvcF90dW5lciAtIFN0b3AgcGVyaW9kaWMgbGluayB0dW5lciB3b3JrCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlZCB0aGUgbGluayB0dW5lciB3aWxsIG5vdAorICogYmUgcnVubmluZyB1bnRpbCAmcnQyeDAwbGlua19zdGFydF90dW5lciBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19zdG9wX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMGxpbmtfcmVzZXRfdHVuZXIgLSBSZXNldCBwZXJpb2RpYyBsaW5rIHR1bmVyIHdvcmsKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQGFudGVubmE6IFNob3VsZCB0aGUgYW50ZW5uYSB0dW5pbmcgYWxzbyBiZSByZXNldAorICoKKyAqIFRoZSBWR0MgbGltaXQgY29uZmlndXJlZCBpbiB0aGUgaGFyZHdhcmUgd2lsbCBiZSByZXNldCB0byAwCisgKiB3aGljaCBmb3JjZXMgdGhlIGRyaXZlciB0byByZWRpc2NvdmVyIHRoZSBjb3JyZWN0IHZhbHVlIGZvcgorICogdGhlIGN1cnJlbnQgYXNzb2NpYXRpb24uIFRoaXMgaXMgbmVlZGVkIHdoZW4gY29uZmlndXJhdGlvbgorICogb3B0aW9ucyBoYXZlIGNoYW5nZWQgd2hpY2ggY291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIHRoZQorICogU05SIGxldmVsIG9yIGxpbmsgcXVhbGl0eSAoaS5lLiBjaGFuZ2luZyB0aGUgYW50ZW5uYSBzZXR0aW5nKS4KKyAqCisgKiBSZXNldHRpbmcgdGhlIGxpbmsgdHVuZXIgd2lsbCBhbHNvIGNhdXNlIHRoZSBwZXJpb2RpYyB3b3JrIGNvdW50ZXIKKyAqIHRvIGJlIHJlc2V0LiBBbnkgZHJpdmVyIHdoaWNoIGhhcyBhIGZpeGVkIGxpbWl0IG9uIHRoZSBudW1iZXIKKyAqIG9mIHJvdW5kcyB0aGUgbGluayB0dW5lciBpcyBzdXBwb3NlZCB0byB3b3JrIHdpbGwgYWNjZXB0IHRoZQorICogdHVuZXIgYWN0aW9ucyBhZ2FpbiBpZiB0aGlzIGxpbWl0IHdhcyBwcmV2aW91c2x5IHJlYWNoZWQuCisgKgorICogSWYgQGFudGVubmEgaXMgc2V0IHRvIHRydWUgYSB0aGUgc29mdHdhcmUgYW50ZW5uYSBkaXZlcnNpdHkKKyAqIHR1bmluZyB3aWxsIGFsc28gYmUgcmVzZXQuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGFudGVubmEpOworCisvKioKKyAqIHJ0MngwMGxpbmtfcmVnaXN0ZXIgLSBJbml0aWFsaXplIGxpbmsgdHVuaW5nIGZ1bmN0aW9uYWxpdHkKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIEluaXRpYWxpemUgd29yayBzdHJ1Y3R1cmUgYW5kIGFsbCBsaW5rIHR1bmluZyByZWxhdGVkCisgKiBwYXJhbXRlcnMuIFRoaXMgd2lsbCBub3Qgc3RhcnQgdGhlIGxpbmsgdHVuaW5nIHByb2Nlc3MgaXRzZWxmLgorICovCit2b2lkIHJ0MngwMGxpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKIC8qCiAgKiBGaXJtd2FyZSBoYW5kbGVycy4KICAqLwpAQCAtMTc5LDcgKzI2NCw3IEBACiB2b2lkIHJ0MngwMGRlYnVnX2R1bXBfZnJhbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBlbnVtIHJ0MngwMF9kdW1wX3R5cGUgdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBlbnVtIGNpcGhlciBjaXBoZXIsIGVudW0gcnhfY3J5cHRvIHN0YXR1cyk7CisJCQkgICAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBkZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewpAQCAtMTk2LDggKzI4MSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJCSAgICAgZW51bSBjaXBoZXIgY2lwaGVyLAotCQkJCQkgICAgIGVudW0gcnhfY3J5cHRvIHN0YXR1cykKKwkJCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKIH0KICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCkBAIC0yMDksNyArMjkzLDggQEAKIGVudW0gY2lwaGVyIHJ0MngwMGNyeXB0b19rZXlfdG9fY2lwaGVyKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiB2b2lkIHJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCSAgICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpOwotdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pOwordW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBydDJ4MDBjcnlwdG9fdHhfY29weV9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaXZfbGVuKTsKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaXZfbGVuKTsKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X2luc2VydF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTIyNyw3ICszMTIsOCBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjVjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorCTU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKwlNb2R1bGU6IHJ0MngwMGxpYgorCUFic3RyYWN0OiBydDJ4MDAgZ2VuZXJpYyBsaW5rIHR1bmluZyByb3V0aW5lcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJydDJ4MDAuaCIKKyNpbmNsdWRlICJydDJ4MDBsaWIuaCIKKworLyoKKyAqIFdoZW4gd2UgbGFjayBSU1NJIGluZm9ybWF0aW9uIHJldHVybiBzb21ldGhpbmcgbGVzcyB0aGVuIC04MCB0bworICogdGVsbCB0aGUgZHJpdmVyIHRvIHR1bmUgdGhlIGRldmljZSB0byBtYXhpbXVtIHNlbnNpdGl2aXR5LgorICovCisjZGVmaW5lIERFRkFVTFRfUlNTSQkJLTEyOAorCisvKgorICogV2hlbiBubyBUWC9SWCBwZXJjZW50YWdlIGNvdWxkIGJlIGNhbGN1bGF0ZWQgZHVlIHRvIGxhY2sgb2YKKyAqIGZyYW1lcyBvbiB0aGUgYWlyLCB3ZSBmYWxsYmFjayB0byBhIHBlcmNlbnRhZ2Ugb2YgNTAlLgorICogVGhpcyB3aWxsIGFzc3VyZSB3ZSB3aWxsIGdldCBhdCBsZWFzdCBnZXQgc29tZSBkZWNlbnQgdmFsdWUKKyAqIHdoZW4gdGhlIGxpbmsgdHVuZXIgc3RhcnRzLgorICogVGhlIHZhbHVlIHdpbGwgYmUgZHJvcHBlZCBhbmQgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgY29ycmVjdCAobWVhc3VyZWQpCisgKiB2YWx1ZSBhbnl3YXkgZHVyaW5nIHRoZSBmaXJzdCBydW4gb2YgdGhlIGxpbmsgdHVuZXIuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9QRVJDRU5UQUdFCTUwCisKKy8qCisgKiBTbWFsbCBoZWxwZXIgbWFjcm8gdG8gd29yayB3aXRoIG1vdmluZy93YWxraW5nIGF2ZXJhZ2VzLgorICogV2hlbiBhZGRpbmcgYSB2YWx1ZSB0byB0aGUgYXZlcmFnZSB2YWx1ZSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uCisgKiBpcyBuZWVkZWQ6CisgKgorICogICAgICAgIGF2Z19yc3NpID0gKChhdmdfcnNzaSAqIDcpICsgcnNzaSkgLyA4OworICoKKyAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIG9ubHkgbmVlZCAxIHZhcmlhYmxlCisgKiB0byBzdG9yZSB0aGUgYXZlcmFnZSBpbiAoTm8gbmVlZCBmb3IgYSBjb3VudCBhbmQgYSB0b3RhbCkuCisgKiBCdXQgbW9yZSBpbXBvcnRhbnRseSwgbm9ybWFsIGF2ZXJhZ2UgdmFsdWVzIHdpbGwgb3ZlciB0aW1lCisgKiBtb3ZlIGxlc3MgYW5kIGxlc3MgdG93YXJkcyBuZXdseSBhZGRlZCB2YWx1ZXMgdGhpcyByZXN1bHRzCisgKiB0aGF0IHdpdGggbGluayB0dW5pbmcsIHRoZSBkZXZpY2UgY2FuIGhhdmUgYSB2ZXJ5IGdvb2QgUlNTSQorICogZm9yIGEgZmV3IG1pbnV0ZXMgYnV0IHdoZW4gdGhlIGRldmljZSBpcyBtb3ZlZCBhd2F5IGZyb20gdGhlIEFQCisgKiB0aGUgYXZlcmFnZSB3aWxsIG5vdCBkZWNyZWFzZSBmYXN0IGVub3VnaCB0byBjb21wZW5zYXRlLgorICogVGhlIHdhbGtpbmcgYXZlcmFnZSBjb21wZW5zYXRlcyB0aGlzIGFuZCB3aWxsIG1vdmUgdG93YXJkcworICogdGhlIG5ldyB2YWx1ZXMgY29ycmVjdGx5IGFsbG93aW5nIGEgZWZmZWN0aXZlIGxpbmsgdHVuaW5nLgorICovCisjZGVmaW5lIE1PVklOR19BVkVSQUdFKF9fYXZnLCBfX3ZhbCwgX19zYW1wbGVzKSBcCisJKCAoKChfX2F2ZykgKiAoKF9fc2FtcGxlcykgLSAxKSkgKyAoX192YWwpKSAvIChfX3NhbXBsZXMpICkKKworLyoKKyAqIFNtYWxsIGhlbHBlciBtYWNybyBmb3IgcGVyY2VudGFnZSBjYWxjdWxhdGlvbgorICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIG1hY3JvIHdpdGggdGhlIG9ubHkgY2F0Y2ggdGhhdCBpdCB3aWxsCisgKiBwcm9kdWNlIGEgZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIG5vIHRvdGFsIHZhbHVlIHdhcyBwcm92aWRlZC4KKyAqLworI2RlZmluZSBQRVJDRU5UQUdFKF9fdmFsdWUsIF9fdG90YWwpIFwKKwkoIChfX3RvdGFsKSA/ICgoKF9fdmFsdWUpICogMTAwKSAvIChfX3RvdGFsKSkgOiAoREVGQVVMVF9QRVJDRU5UQUdFKSApCisKKy8qCisgKiBGb3IgY2FsY3VsYXRpbmcgdGhlIFNpZ25hbCBxdWFsaXR5IHdlIGhhdmUgZGV0ZXJtaW5lZAorICogdGhlIHRvdGFsIG51bWJlciBvZiBzdWNjZXNzIGFuZCBmYWlsZWQgUlggYW5kIFRYIGZyYW1lcy4KKyAqIFdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBhdmVyYWdlIFJTU0kgdmFsdWUgd2UgY2FuIGRldGVybWluZQorICogdGhlIGxpbmsgcXVhbGl0eSB1c2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKKyAqCisgKiAgICAgICAgIHJzc2lfcGVyY2VudGFnZSA9IChhdmdfcnNzaSAqIDEwMCkgLyByc3NpX29mZnNldAorICogICAgICAgICByeF9wZXJjZW50YWdlID0gKHJ4X3N1Y2Nlc3MgKiAxMDApIC8gcnhfdG90YWwKKyAqICAgICAgICAgdHhfcGVyY2VudGFnZSA9ICh0eF9zdWNjZXNzICogMTAwKSAvIHR4X3RvdGFsCisgKiAgICAgICAgIGF2Z19zaWduYWwgPSAoKFdFSUdIVF9SU1NJICogYXZnX3Jzc2kpICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1RYICogdHhfcGVyY2VudGFnZSkgKworICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfUlggKiByeF9wZXJjZW50YWdlKSkgLyAxMDAKKyAqCisgKiBUaGlzIHZhbHVlIHNob3VsZCB0aGVuIGJlIGNoZWNrZWQgdG8gbm90IGJlIGdyZWF0ZXIgdGhlbiAxMDAuCisgKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZXMgb2YgV0VJR0hUX1JTU0ksIFdFSUdIVF9SWCwgV0VJR0hUX1RYIG11c3QKKyAqIHN1bSB1cCB0byAxMDAgYXMgd2VsbC4KKyAqLworI2RlZmluZSBXRUlHSFRfUlNTSQkyMAorI2RlZmluZSBXRUlHSFRfUlgJNDAKKyNkZWZpbmUgV0VJR0hUX1RYCTQwCisKK3N0YXRpYyBpbnQgcnQyeDAwbGlua19hbnRlbm5hX2dldF9saW5rX3Jzc2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCisJaWYgKGFudC0+cnNzaV9hbnQgJiYgcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfc3VjY2VzcykKKwkJcmV0dXJuIGFudC0+cnNzaV9hbnQ7CisJcmV0dXJuIERFRkFVTFRfUlNTSTsKK30KKworc3RhdGljIGludCBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkgICAgICAgZW51bSBhbnRlbm5hIGFudGVubmEpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKworCWlmIChhbnQtPnJzc2lfaGlzdG9yeVthbnRlbm5hIC0gQU5URU5OQV9BXSkKKwkJcmV0dXJuIGFudC0+cnNzaV9oaXN0b3J5W2FudGVubmEgLSBBTlRFTk5BX0FdOworCXJldHVybiBERUZBVUxUX1JTU0k7Cit9CisvKiBTbWFsbCB3cmFwcGVyIGZvciBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgpICovCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9yeF9oaXN0b3J5KF9fZGV2KSBcCisJcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnJ4KQorI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfdHhfaGlzdG9yeShfX2RldikgXAorCXJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKKwkJCQkJICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS50eCkKKworc3RhdGljIHZvaWQgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3Rvcnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJCSAgIGVudW0gYW50ZW5uYSBhbnRlbm5hLAorCQkJCQkJICAgaW50IHJzc2kpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlhbnQtPnJzc2lfaGlzdG9yeVthbnQtPmFjdGl2ZS5yeCAtIEFOVEVOTkFfQV0gPSByc3NpOworfQorLyogU21hbGwgd3JhcHBlciBmb3IgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKSAqLworI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfcnhfaGlzdG9yeShfX2RldiwgX19yc3NpKSBcCisJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnJ4LCBcCisJCQkJCSAgICAgICAoX19yc3NpKSkKKyNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3R4X2hpc3RvcnkoX19kZXYsIF9fcnNzaSkgXAorCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKKwkJCQkJICAgICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS50eCwgXAorCQkJCQkgICAgICAgKF9fcnNzaSkpCisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfYW50ZW5uYV9yZXNldChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXJ0MngwMGRldi0+bGluay5hbnQucnNzaV9hbnQgPSAwOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfc2FtcGxlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBuZXdfYW50OworCWludCBzYW1wbGVfYSA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHJ0MngwMGRldiwgQU5URU5OQV9BKTsKKwlpbnQgc2FtcGxlX2IgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYsIEFOVEVOTkFfQik7CisKKwltZW1jcHkoJm5ld19hbnQsICZhbnQtPmFjdGl2ZSwgc2l6ZW9mKG5ld19hbnQpKTsKKworCS8qCisJICogV2UgYXJlIGRvbmUgc2FtcGxpbmcuIE5vdyB3ZSBzaG91bGQgZXZhbHVhdGUgdGhlIHJlc3VsdHMuCisJICovCisJYW50LT5mbGFncyAmPSB+QU5URU5OQV9NT0RFX1NBTVBMRTsKKworCS8qCisJICogRHVyaW5nIHRoZSBsYXN0IHBlcmlvZCB3ZSBoYXZlIHNhbXBsZWQgdGhlIFJTU0kKKwkgKiBmcm9tIGJvdGggYW50ZW5uYSdzLiBJdCBub3cgaXMgdGltZSB0byBkZXRlcm1pbmUKKwkgKiB3aGljaCBhbnRlbm5hIGRlbW9uc3RyYXRlZCB0aGUgYmVzdCBwZXJmb3JtYW5jZS4KKwkgKiBXaGVuIHdlIGFyZSBhbHJlYWR5IG9uIHRoZSBhbnRlbm5hIHdpdGggdGhlIGJlc3QKKwkgKiBwZXJmb3JtYW5jZSwgdGhlbiB0aGVyZSByZWFsbHkgaXMgbm90aGluZyBmb3IgdXMKKwkgKiBsZWZ0IHRvIGRvLgorCSAqLworCWlmIChzYW1wbGVfYSA9PSBzYW1wbGVfYikKKwkJcmV0dXJuOworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC5yeCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCisJCW5ld19hbnQudHggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7CisKKwlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmbmV3X2FudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9ldmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBuZXdfYW50OworCWludCByc3NpX2N1cnI7CisJaW50IHJzc2lfb2xkOworCisJbWVtY3B5KCZuZXdfYW50LCAmYW50LT5hY3RpdmUsIHNpemVvZihuZXdfYW50KSk7CisKKwkvKgorCSAqIEdldCBjdXJyZW50IFJTU0kgdmFsdWUgYWxvbmcgd2l0aCB0aGUgaGlzdG9yaWNhbCB2YWx1ZSwKKwkgKiBhZnRlciB0aGF0IHVwZGF0ZSB0aGUgaGlzdG9yeSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlLgorCSAqLworCXJzc2lfY3VyciA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfbGlua19yc3NpKHJ0MngwMGRldik7CisJcnNzaV9vbGQgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfcnhfaGlzdG9yeShydDJ4MDBkZXYpOworCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9yeF9oaXN0b3J5KHJ0MngwMGRldiwgcnNzaV9jdXJyKTsKKworCS8qCisJICogTGVnYWN5IGRyaXZlciBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgc3dhcCBhbnRlbm5hJ3MKKwkgKiB3aGVuIHRoZSBkaWZmZXJlbmNlIGluIFJTU0kgaXMgZ3JlYXRlciB0aGF0IDUuIFRoaXMKKwkgKiBhbHNvIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIFJTU0kgd2FzIGFjdHVhbGx5IGJldHRlcgorCSAqIHRoZW4gdGhlIHByZXZpb3VzIHNhbXBsZS4KKwkgKiBXaGVuIHRoZSBkaWZmZXJlbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCB3ZSBzaG91bGQKKwkgKiBzYW1wbGUgdGhlIHJzc2kgZnJvbSB0aGUgb3RoZXIgYW50ZW5uYSB0byBtYWtlIGEgdmFsaWQKKwkgKiBjb21wYXJpc29uIGJldHdlZW4gdGhlIDIgYW50ZW5uYXMuCisJICovCisJaWYgKGFicyhyc3NpX2N1cnIgLSByc3NpX29sZCkgPCA1KQorCQlyZXR1cm47CisKKwlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfTU9ERV9TQU1QTEU7CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQorCQluZXdfYW50LnJ4ID0gKG5ld19hbnQucnggPT0gQU5URU5OQV9BKSA/IEFOVEVOTkFfQiA6IEFOVEVOTkFfQTsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCisJCW5ld19hbnQudHggPSAobmV3X2FudC50eCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOworCisJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJm5ld19hbnQpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgc29mdHdhcmUgZGl2ZXJzaXR5IGlzIGVuYWJsZWQgZm9yCisJICogZWl0aGVyIHRoZSBUWCBvciBSWCBhbnRlbm5hIChvciBib3RoKS4KKwkgKiBBbHdheXMgcGVyZm9ybSB0aGlzIGNoZWNrIHNpbmNlIHdpdGhpbiB0aGUgbGluaworCSAqIHR1bmVyIGludGVydmFsIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZC4KKwkgKi8KKwlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKKwlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKKworCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQorCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOworCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQorCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOworCisJaWYgKCEoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKSAmJgorCSAgICAhKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpIHsKKwkJYW50LT5mbGFncyA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgb25seSBzYW1wbGVkIHRoZSBkYXRhIG92ZXIgdGhlIGxhc3QgcGVyaW9kCisJICogd2Ugc2hvdWxkIG5vdyBoYXJ2ZXN0IHRoZSBkYXRhLiBPdGhlcndpc2UganVzdCBldmFsdWF0ZQorCSAqIHRoZSBkYXRhLiBUaGUgbGF0dGVyIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCBvbmNlCisJICogZXZlcnkgMiBzZWNvbmRzLgorCSAqLworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9NT0RFX1NBTVBMRSkKKwkJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X3NhbXBsZShydDJ4MDBkZXYpOworCWVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5jb3VudCAmIDEpCisJCXJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9ldmFsKHJ0MngwMGRldik7Cit9CisKK3ZvaWQgcnQyeDAwbGlua191cGRhdGVfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWludCBhdmdfcnNzaSA9IHJ4ZGVzYy0+cnNzaTsKKwlpbnQgYW50X3Jzc2kgPSByeGRlc2MtPnJzc2k7CisKKwkvKgorCSAqIEZyYW1lIHdhcyByZWNlaXZlZCBzdWNjZXNzZnVsbHkgc2luY2Ugbm9uLXN1Y2Nlc2Z1bGwKKwkgKiBmcmFtZXMgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYnkgdGhlIGhhcmR3YXJlLgorCSAqLworCXF1YWwtPnJ4X3N1Y2Nlc3MrKzsKKworCS8qCisJICogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBxdWFsaXR5IHN0YXRpc3RpY3MgZnJvbQorCSAqIGJlYWNvbnMgd2hpY2ggY2FtZSBmcm9tIHRoZSBCU1Mgd2hpY2ggd2UgYXJlCisJICogYXNzb2NpYXRlZCB3aXRoLgorCSAqLworCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgICEocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfTVlfQlNTKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVcGRhdGUgZ2xvYmFsIFJTU0kKKwkgKi8KKwlpZiAobGluay0+YXZnX3Jzc2kpCisJCWF2Z19yc3NpID0gTU9WSU5HX0FWRVJBR0UobGluay0+YXZnX3Jzc2ksIHJ4ZGVzYy0+cnNzaSwgOCk7CisJbGluay0+YXZnX3Jzc2kgPSBhdmdfcnNzaTsKKworCS8qCisJICogVXBkYXRlIGFudGVubmEgUlNTSQorCSAqLworCWlmIChhbnQtPnJzc2lfYW50KQorCQlhbnRfcnNzaSA9IE1PVklOR19BVkVSQUdFKGFudC0+cnNzaV9hbnQsIHJ4ZGVzYy0+cnNzaSwgOCk7CisJYW50LT5yc3NpX2FudCA9IGFudF9yc3NpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX3ByZWNhbGN1bGF0ZV9zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCWxpbmstPnJ4X3BlcmNlbnRhZ2UgPQorCSAgICBQRVJDRU5UQUdFKHF1YWwtPnJ4X3N1Y2Nlc3MsIHF1YWwtPnJ4X2ZhaWxlZCArIHF1YWwtPnJ4X3N1Y2Nlc3MpOworCWxpbmstPnR4X3BlcmNlbnRhZ2UgPQorCSAgICBQRVJDRU5UQUdFKHF1YWwtPnR4X3N1Y2Nlc3MsIHF1YWwtPnR4X2ZhaWxlZCArIHF1YWwtPnR4X3N1Y2Nlc3MpOworfQorCitpbnQgcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGludCByc3NpKQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlpbnQgcnNzaV9wZXJjZW50YWdlID0gMDsKKwlpbnQgc2lnbmFsOworCisJLyoKKwkgKiBXZSBuZWVkIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSBSU1NJLgorCSAqLworCWlmIChyc3NpIDwgMCkKKwkJcnNzaSArPSBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVudCBwZXJjZW50YWdlcywKKwkgKiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzaWduYWwuCisJICovCisJcnNzaV9wZXJjZW50YWdlID0gUEVSQ0VOVEFHRShyc3NpLCBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0KTsKKworCS8qCisJICogQWRkIHRoZSBpbmRpdmlkdWFsIHBlcmNlbnRhZ2VzIGFuZCB1c2UgdGhlIFdFSUdIVAorCSAqIGRlZmluZXMgdG8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGxpbmsgc2lnbmFsLgorCSAqLworCXNpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiByc3NpX3BlcmNlbnRhZ2UpICsKKwkJICAoV0VJR0hUX1RYICogbGluay0+dHhfcGVyY2VudGFnZSkgKworCQkgIChXRUlHSFRfUlggKiBsaW5rLT5yeF9wZXJjZW50YWdlKSkgLyAxMDA7CisKKwlyZXR1cm4gbWF4X3QoaW50LCBzaWduYWwsIDEwMCk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19zdGFydF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKworCS8qCisJICogTGluayB0dW5pbmcgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIHdoZW4KKwkgKiBhbiBhY3RpdmUgc3RhIG9yIG1hc3RlciBpbnRlcmZhY2UgZXhpc3RzLgorCSAqIFNpbmdsZSBtb25pdG9yIG1vZGUgaW50ZXJmYWNlcyBzaG91bGQgbmV2ZXIgaGF2ZQorCSAqIHdvcmsgd2l0aCBsaW5rIHR1bmVycy4KKwkgKi8KKwlpZiAoIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkKKwkJcmV0dXJuOworCisJbGluay0+cnhfcGVyY2VudGFnZSA9IERFRkFVTFRfUEVSQ0VOVEFHRTsKKwlsaW5rLT50eF9wZXJjZW50YWdlID0gREVGQVVMVF9QRVJDRU5UQUdFOworCisJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCisJCQkgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3N0b3BfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+bGluay53b3JrKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGJvb2wgYW50ZW5uYSkKK3sKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJlc2V0IGxpbmsgaW5mb3JtYXRpb24uCisJICogQm90aCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2Z2MgbGV2ZWwgYXMgd2VsbCBhcworCSAqIHRoZSBsaW5rIHR1bmVyIGNvdW50ZXIgc2hvdWxkIGJlIHJlc2V0LiBSZXNldHRpbmcKKwkgKiB0aGUgY291bnRlciBpcyBpbXBvcnRhbnQgZm9yIGRldmljZXMgd2hlcmUgdGhlCisJICogZGV2aWNlIHNob3VsZCBvbmx5IHBlcmZvcm0gbGluayB0dW5pbmcgZHVyaW5nIHRoZQorCSAqIGZpcnN0IG1pbnV0ZSBhZnRlciBiZWluZyBlbmFibGVkLgorCSAqLworCXJ0MngwMGRldi0+bGluay5jb3VudCA9IDA7CisJbWVtc2V0KHF1YWwsIDAsIHNpemVvZigqcXVhbCkpOworCisJLyoKKwkgKiBSZXNldCB0aGUgbGluayB0dW5lci4KKwkgKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZXNldF90dW5lcihydDJ4MDBkZXYsIHF1YWwpOworCisJaWYgKGFudGVubmEpCisJCXJ0MngwMGxpbmtfYW50ZW5uYV9yZXNldChydDJ4MDBkZXYpOworfQorCit2b2lkIHJ0MngwMGxpbmtfcmVzZXRfcXVhbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisKKwlxdWFsLT5yeF9zdWNjZXNzID0gMDsKKwlxdWFsLT5yeF9mYWlsZWQgPSAwOworCXF1YWwtPnR4X3N1Y2Nlc3MgPSAwOworCXF1YWwtPnR4X2ZhaWxlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfdHVuZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIGxpbmsud29yay53b3JrKTsKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCS8qCisJICogV2hlbiB0aGUgcmFkaW8gaXMgc2h1dHRpbmcgZG93biB3ZSBzaG91bGQKKwkgKiBpbW1lZGlhdGVseSBjZWFzZSBhbGwgbGluayB0dW5pbmcuCisJICovCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSBzdGF0aXN0aWNzLgorCSAqLworCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfc3RhdHMocnQyeDAwZGV2LCBxdWFsKTsKKwlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQgKz0gcXVhbC0+cnhfZmFpbGVkOworCisJLyoKKwkgKiBVcGRhdGUgcXVhbGl0eSBSU1NJIGZvciBsaW5rIHR1bmluZywKKwkgKiB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgc29tZSBmcmFtZXMgYW5kIHdlIG1hbmFnZWQgdG8KKwkgKiBjb2xsZWN0IHRoZSBSU1NJIGRhdGEgd2UgY291bGQgdXNlIHRoaXMuIE90aGVyd2lzZSB3ZQorCSAqIG11c3QgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgUlNTSSB2YWx1ZS4KKwkgKi8KKwlpZiAoIWxpbmstPmF2Z19yc3NpIHx8ICFxdWFsLT5yeF9zdWNjZXNzKQorCQlxdWFsLT5yc3NpID0gREVGQVVMVF9SU1NJOworCWVsc2UKKwkJcXVhbC0+cnNzaSA9IGxpbmstPmF2Z19yc3NpOworCisJLyoKKwkgKiBPbmx5IHBlcmZvcm0gdGhlIGxpbmsgdHVuaW5nIHdoZW4gTGluayB0dW5pbmcKKwkgKiBoYXMgYmVlbiBlbmFibGVkIChUaGlzIGNvdWxkIGhhdmUgYmVlbiBkaXNhYmxlZCBmcm9tIHRoZSBFRVBST00pLgorCSAqLworCWlmICghdGVzdF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua190dW5lcihydDJ4MDBkZXYsIHF1YWwsIGxpbmstPmNvdW50KTsKKworCS8qCisJICogUHJlY2FsY3VsYXRlIGEgcG9ydGlvbiBvZiB0aGUgbGluayBzaWduYWwgd2hpY2ggaXMKKwkgKiBpbiBiYXNlZCBvbiB0aGUgdHgvcnggc3VjY2Vzcy9mYWlsdXJlIGNvdW50ZXJzLgorCSAqLworCXJ0MngwMGxpbmtfcHJlY2FsY3VsYXRlX3NpZ25hbChydDJ4MDBkZXYpOworCisJLyoKKwkgKiBTZW5kIGEgc2lnbmFsIHRvIHRoZSBsZWQgdG8gdXBkYXRlIHRoZSBsZWQgc2lnbmFsIHN0cmVuZ3RoLgorCSAqLworCXJ0MngwMGxlZHNfbGVkX3F1YWxpdHkocnQyeDAwZGV2LCBsaW5rLT5hdmdfcnNzaSk7CisKKwkvKgorCSAqIEV2YWx1YXRlIGFudGVubmEgc2V0dXAsIG1ha2UgdGhpcyB0aGUgbGFzdCBzdGVwIHNpbmNlIHRoaXMgY291bGQKKwkgKiBwb3NzaWJseSByZXNldCBzb21lIHN0YXRpc3RpY3MuCisJICovCisJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5KHJ0MngwMGRldik7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBxdWFsaXR5IGNvdW50ZXJzIHdoaWNoIHJlY291bnRlZCBkdXJpbmcgZWFjaCBwZXJpb2QuCisJICovCisJcnQyeDAwbGlua19yZXNldF9xdWFsKHJ0MngwMGRldik7CisKKwkvKgorCSAqIEluY3JlYXNlIHR1bmVyIGNvdW50ZXIsIGFuZCByZXNjaGVkdWxlIHRoZSBuZXh0IGxpbmsgdHVuZXIgcnVuLgorCSAqLworCWxpbmstPmNvdW50Kys7CisJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKKwkJCSAgICZsaW5rLT53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworfQorCit2b2lkIHJ0MngwMGxpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5saW5rLndvcmssIHJ0MngwMGxpbmtfdHVuZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IDM4ZWRlZTUuLmM0MWEwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC03OSw4ICs3OSw3IEBACiAJICogUlRTL0NUUyBmcmFtZSBzaG91bGQgdXNlIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIHBsdXMgYW55CiAJICogZW5jcnlwdGlvbiBvdmVyaGVhZCB0aGF0IHdpbGwgYmUgYWRkZWQgYnkgdGhlIGhhcmR3YXJlLgogCSAqLwotCWlmICghZnJhZ19za2ItPmRvX25vdF9lbmNyeXB0KQotCQlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQodHhfaW5mbyk7CisJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHJ0MngwMGRldiwgc2tiKTsKIAogCWlmICh0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkKIAkJaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQocnQyeDAwZGV2LT5odywgdHhfaW5mby0+Y29udHJvbC52aWYsCkBAIC0yMjYsNiArMjI1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgogCQkvKgogCQkgKiBXZSBkb24ndCBzdXBwb3J0IG1peGVkIGNvbWJpbmF0aW9ucyBvZgogCQkgKiBzdGEgYW5kIGFwIGludGVyZmFjZXMuCkBAIC00MzAsOCArNDMxLDEwIEBACiAJLyoKIAkgKiBVcGRhdGUgdGhlIGJlYWNvbi4KIAkgKi8KLQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikKLQkJc3RhdHVzID0gcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZik7CisJaWYgKGNvbmYtPmNoYW5nZWQgJiAoSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCSAgICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpKQorCQlzdGF0dXMgPSBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmLAorCQkJCQkJICAgY29uZi0+ZW5hYmxlX2JlYWNvbik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDgyLDE2ICs0ODUsMzYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKTsKIAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTworc3RhdGljIHZvaWQgbWVtY3B5X3RraXAoc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gKmNyeXB0bywgdTggKmtleSwgdTgga2V5X2xlbikKK3sKKwlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWSkKKwkJbWVtY3B5KCZjcnlwdG8tPmtleSwKKwkJICAgICAgICZrZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZXSwKKwkJICAgICAgIHNpemVvZihjcnlwdG8tPmtleSkpOworCisJaWYgKGtleV9sZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWSkKKwkJbWVtY3B5KCZjcnlwdG8tPnR4X21pYywKKwkJICAgICAgICZrZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVldLAorCQkgICAgICAgc2l6ZW9mKGNyeXB0by0+dHhfbWljKSk7CisKKwlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZKQorCQltZW1jcHkoJmNyeXB0by0+cnhfbWljLAorCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV0sCisJCSAgICAgICBzaXplb2YoY3J5cHRvLT5yeF9taWMpKTsKK30KKwogaW50IHJ0MngwMG1hY19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAlpbnQgKCpzZXRfa2V5KSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCXN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvICpjcnlwdG8sCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogCXN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvIGNyeXB0bzsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPQorCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIH07CiAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwpAQCAtNTA5LDQ1ICs1MzIsMjUgQEAKIAlpZiAocnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkKIAkJY3J5cHRvLmJzc2lkeCA9IDA7CiAJZWxzZQotCQljcnlwdG8uYnNzaWR4ID0KLQkJICAgIGxvY2FsX2FkZHJlc3NbNV0gJiAocnQyeDAwZGV2LT5vcHMtPm1heF9hcF9pbnRmIC0gMSk7CisJCWNyeXB0by5ic3NpZHggPSBpbnRmLT5tYWNbNV0gJiAocnQyeDAwZGV2LT5vcHMtPm1heF9hcF9pbnRmIC0gMSk7CiAKIAljcnlwdG8uY2lwaGVyID0gcnQyeDAwY3J5cHRvX2tleV90b19jaXBoZXIoa2V5KTsKIAlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfTk9ORSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJY3J5cHRvLmNtZCA9IGNtZDsKLQljcnlwdG8uYWRkcmVzcyA9IGFkZHJlc3M7CiAKLQlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfVEtJUCkgewotCQlpZiAoa2V5LT5rZXlsZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVkpCi0JCQltZW1jcHkoJmNyeXB0by5rZXksCi0JCQkgICAgICAgJmtleS0+a2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWV0sCi0JCQkgICAgICAgc2l6ZW9mKGNyeXB0by5rZXkpKTsKLQotCQlpZiAoa2V5LT5rZXlsZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWSkKLQkJCW1lbWNweSgmY3J5cHRvLnR4X21pYywKLQkJCSAgICAgICAma2V5LT5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVldLAotCQkJICAgICAgIHNpemVvZihjcnlwdG8udHhfbWljKSk7Ci0KLQkJaWYgKGtleS0+a2V5bGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkpCi0JCQltZW1jcHkoJmNyeXB0by5yeF9taWMsCi0JCQkgICAgICAgJmtleS0+a2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZXSwKLQkJCSAgICAgICBzaXplb2YoY3J5cHRvLnJ4X21pYykpOwotCX0gZWxzZQotCQltZW1jcHkoJmNyeXB0by5rZXksICZrZXktPmtleVswXSwga2V5LT5rZXlsZW4pOwotCi0JLyoKLQkgKiBEaXNjb3ZlciB0aGUgQXNzb2NpYXRpb24gSUQgZnJvbSBtYWM4MDIxMS4KLQkgKiBTb21lIGRyaXZlcnMgbmVlZCB0aGlzIGluZm9ybWF0aW9uIHdoZW4gdXBkYXRpbmcgdGhlCi0JICogaGFyZHdhcmUga2V5IChlaXRoZXIgYWRkaW5nIG9yIHJlbW92aW5nKS4KLQkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKGh3LCBhZGRyZXNzKTsKLQlpZiAoc3RhKQorCWlmIChzdGEpIHsKKwkJLyogc29tZSBkcml2ZXJzIG5lZWQgdGhlIEFJRCAqLwogCQljcnlwdG8uYWlkID0gc3RhLT5haWQ7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJCWNyeXB0by5hZGRyZXNzID0gc3RhLT5hZGRyOworCX0gZWxzZQorCQljcnlwdG8uYWRkcmVzcyA9IGJjYXN0X2FkZHI7CiAKKwlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfVEtJUCkKKwkJbWVtY3B5X3RraXAoJmNyeXB0bywgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7CisJZWxzZQorCQltZW1jcHkoJmNyeXB0by5rZXksICZrZXktPmtleVswXSwga2V5LT5rZXlsZW4pOwogCS8qCiAJICogRWFjaCBCU1MgaGFzIGEgbWF4aW11bSBvZiA0IHNoYXJlZCBrZXlzLgogCSAqIFNoYXJlZCBrZXkgaW5kZXggdmFsdWVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCmluZGV4IGQ1MmIyMmIuLmU2MTZjMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggOWMwYTRkNy4uMTVhMTI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggMDcwOWRlYy4uYTU2NjRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNDgsMjAgKzE0OCwxMDUgQEAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQogCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9zZXEoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCQkJCSBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih0eF9pbmZvLT5jb250cm9sLnZpZik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB8fAorCSAgICB1bmxpa2VseSghdHhfaW5mby0+Y29udHJvbC52aWYpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEhhcmR3YXJlIHNob3VsZCBpbnNlcnQgc2VxdWVuY2UgY291bnRlci4KKwkgKiBGSVhNRTogV2UgaW5zZXJ0IGEgc29mdHdhcmUgc2VxdWVuY2UgY291bnRlciBmaXJzdCBmb3IKKwkgKiBoYXJkd2FyZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBoYXJkd2FyZSBzZXF1ZW5jZSBjb3VudGluZy4KKwkgKgorCSAqIFRoaXMgaXMgd3JvbmcgYmVjYXVzZSBiZWFjb25zIGFyZSBub3QgZ2V0dGluZyBzZXF1ZW5jZQorCSAqIG51bWJlcnMgYXNzaWduZWQgcHJvcGVybHkuCisJICoKKwkgKiBBIHNlY29uZGFyeSBwcm9ibGVtIGV4aXN0cyBmb3IgZHJpdmVycyB0aGF0IGNhbm5vdCB0b2dnbGUKKwkgKiBzZXF1ZW5jZSBjb3VudGluZyBwZXItZnJhbWUsIHNpbmNlIHRob3NlIHdpbGwgb3ZlcnJpZGUgdGhlCisJICogc2VxdWVuY2UgY291bnRlciBnaXZlbiBieSBtYWM4MDIxMS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW50Zi0+c2VxbG9jaywgaXJxZmxhZ3MpOworCisJaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpKQorCQlpbnRmLT5zZXFubyArPSAweDEwOworCWhkci0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CisJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihpbnRmLT5zZXFubyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7CisKKwlfX3NldF9iaXQoRU5UUllfVFhEX0dFTkVSQVRFX1NFUSwgJnR4ZGVzYy0+ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9wbGNwKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJCQkgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eHJhdGUgPSAmdHhfaW5mby0+Y29udHJvbC5yYXRlc1swXTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGg7CisJdW5zaWduZWQgaW50IGR1cmF0aW9uOworCXVuc2lnbmVkIGludCByZXNpZHVhbDsKKworCS8qIERhdGEgbGVuZ3RoICsgQ1JDICsgQ3J5cHRvIG92ZXJoZWFkIChJVi9FSVYvSUNWL01JQykgKi8KKwlkYXRhX2xlbmd0aCA9IGVudHJ5LT5za2ItPmxlbiArIDQ7CisJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHJ0MngwMGRldiwgZW50cnktPnNrYik7CisKKwkvKgorCSAqIFBMQ1Agc2V0dXAKKwkgKiBMZW5ndGggY2FsY3VsYXRpb24gZGVwZW5kcyBvbiBPRkRNL0NDSyByYXRlLgorCSAqLworCXR4ZGVzYy0+c2lnbmFsID0gaHdyYXRlLT5wbGNwOworCXR4ZGVzYy0+c2VydmljZSA9IDB4MDQ7CisKKwlpZiAoaHdyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pIHsKKwkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkYXRhX2xlbmd0aCA+PiA2KSAmIDB4M2Y7CisJCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGRhdGFfbGVuZ3RoICYgMHgzZjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBDb252ZXJ0IGxlbmd0aCB0byBtaWNyb3NlY29uZHMuCisJCSAqLworCQlyZXNpZHVhbCA9IEdFVF9EVVJBVElPTl9SRVMoZGF0YV9sZW5ndGgsIGh3cmF0ZS0+Yml0cmF0ZSk7CisJCWR1cmF0aW9uID0gR0VUX0RVUkFUSU9OKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOworCisJCWlmIChyZXNpZHVhbCAhPSAwKSB7CisJCQlkdXJhdGlvbisrOworCisJCQkvKgorCQkJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIExlbmd0aCBFeHRlbnNpb24KKwkJCSAqLworCQkJaWYgKGh3cmF0ZS0+Yml0cmF0ZSA9PSAxMTAgJiYgcmVzaWR1YWwgPD0gMzApCisJCQkJdHhkZXNjLT5zZXJ2aWNlIHw9IDB4ODA7CisJCX0KKworCQl0eGRlc2MtPmxlbmd0aF9oaWdoID0gKGR1cmF0aW9uID4+IDgpICYgMHhmZjsKKwkJdHhkZXNjLT5sZW5ndGhfbG93ID0gZHVyYXRpb24gJiAweGZmOworCisJCS8qCisJCSAqIFdoZW4gcHJlYW1ibGUgaXMgZW5hYmxlZCB3ZSBzaG91bGQgc2V0IHRoZQorCQkgKiBwcmVhbWJsZSBiaXQgZm9yIHRoZSBzaWduYWwuCisJCSAqLworCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCQl0eGRlc2MtPnNpZ25hbCB8PSAweDA4OworCX0KK30KKwogc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkJICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eHJhdGUgPSAmdHhfaW5mby0+Y29udHJvbC5yYXRlc1swXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPQogCSAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUocnQyeDAwZGV2LT5odywgdHhfaW5mbyk7CiAJY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGU7Ci0JdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoOwotCXVuc2lnbmVkIGludCBkdXJhdGlvbjsKLQl1bnNpZ25lZCBpbnQgcmVzaWR1YWw7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCW1lbXNldCh0eGRlc2MsIDAsIHNpemVvZigqdHhkZXNjKSk7CiAKQEAgLTE3MywyNyArMjU4LDEyIEBACiAJdHhkZXNjLT5jd19tYXggPSBlbnRyeS0+cXVldWUtPmN3X21heDsKIAl0eGRlc2MtPmFpZnMgPSBlbnRyeS0+cXVldWUtPmFpZnM7CiAKLQkvKiBEYXRhIGxlbmd0aCArIENSQyAqLwotCWRhdGFfbGVuZ3RoID0gZW50cnktPnNrYi0+bGVuICsgNDsKLQogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGlzIGZyYW1lIGlzIHRvIGJlIGFja2VkLgogCSAqLwogCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQogCQlfX3NldF9iaXQoRU5UUllfVFhEX0FDSywgJnR4ZGVzYy0+ZmxhZ3MpOwogCi0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCi0JICAgICFlbnRyeS0+c2tiLT5kb19ub3RfZW5jcnlwdCkgewotCQkvKiBBcHBseSBjcnlwdG8gc3BlY2lmaWMgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiAqLwotCQlydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3IoZW50cnksIHR4ZGVzYyk7Ci0KLQkJLyoKLQkJICogRXh0ZW5kIGZyYW1lIGxlbmd0aCB0byBpbmNsdWRlIGFsbCBlbmNyeXB0aW9uIG92ZXJoZWFkCi0JCSAqIHRoYXQgd2lsbCBiZSBhZGRlZCBieSB0aGUgaGFyZHdhcmUuCi0JCSAqLwotCQlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQodHhfaW5mbyk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGlzIGlzIGEgUlRTL0NUUyBmcmFtZQogCSAqLwpAQCAtMjM3LDg2ICszMDcsMjcgQEAKIAkgKiBTZXQgaWZzIHRvIElGU19TSUZTIHdoZW4gdGhlIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBmcmFnbWVudCwKIAkgKiBvciB0aGlzIGZyYWdtZW50IGNhbWUgYWZ0ZXIgUlRTL0NUUy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRU5UUllfVFhEX1JUU19GUkFNRSwgJnR4ZGVzYy0+ZmxhZ3MpKSB7Ci0JCXR4ZGVzYy0+aWZzID0gSUZTX1NJRlM7Ci0JfSBlbHNlIGlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpIHsKKwlpZiAoKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkgJiYKKwkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MtPmZsYWdzKSkgewogCQlfX3NldF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncyk7CiAJCXR4ZGVzYy0+aWZzID0gSUZTX0JBQ0tPRkY7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJdHhkZXNjLT5pZnMgPSBJRlNfU0lGUzsKLQl9CiAKIAkvKgotCSAqIEhhcmR3YXJlIHNob3VsZCBpbnNlcnQgc2VxdWVuY2UgY291bnRlci4KLQkgKiBGSVhNRTogV2UgaW5zZXJ0IGEgc29mdHdhcmUgc2VxdWVuY2UgY291bnRlciBmaXJzdCBmb3IKLQkgKiBoYXJkd2FyZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBoYXJkd2FyZSBzZXF1ZW5jZSBjb3VudGluZy4KLQkgKgotCSAqIFRoaXMgaXMgd3JvbmcgYmVjYXVzZSBiZWFjb25zIGFyZSBub3QgZ2V0dGluZyBzZXF1ZW5jZQotCSAqIG51bWJlcnMgYXNzaWduZWQgcHJvcGVybHkuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBwcm9ibGVtIGV4aXN0cyBmb3IgZHJpdmVycyB0aGF0IGNhbm5vdCB0b2dnbGUKLQkgKiBzZXF1ZW5jZSBjb3VudGluZyBwZXItZnJhbWUsIHNpbmNlIHRob3NlIHdpbGwgb3ZlcnJpZGUgdGhlCi0JICogc2VxdWVuY2UgY291bnRlciBnaXZlbiBieSBtYWM4MDIxMS4KLQkgKi8KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKLQkJaWYgKGxpa2VseSh0eF9pbmZvLT5jb250cm9sLnZpZikpIHsKLQkJCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZjsKLQotCQkJaW50ZiA9IHZpZl90b19pbnRmKHR4X2luZm8tPmNvbnRyb2wudmlmKTsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKLQotCQkJaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpKQotCQkJCWludGYtPnNlcW5vICs9IDB4MTA7Ci0JCQloZHItPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwotCQkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihpbnRmLT5zZXFubyk7Ci0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKLQotCQkJX19zZXRfYml0KEVOVFJZX1RYRF9HRU5FUkFURV9TRVEsICZ0eGRlc2MtPmZsYWdzKTsKLQkJfQotCX0KLQotCS8qCi0JICogUExDUCBzZXR1cAotCSAqIExlbmd0aCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIE9GRE0vQ0NLIHJhdGUuCisJICogRGV0ZXJtaW5lIHJhdGUgbW9kdWxhdGlvbi4KIAkgKi8KIAlod3JhdGUgPSBydDJ4MDBfZ2V0X3JhdGUocmF0ZS0+aHdfdmFsdWUpOwotCXR4ZGVzYy0+c2lnbmFsID0gaHdyYXRlLT5wbGNwOwotCXR4ZGVzYy0+c2VydmljZSA9IDB4MDQ7CisJdHhkZXNjLT5yYXRlX21vZGUgPSBSQVRFX01PREVfQ0NLOworCWlmIChod3JhdGUtPmZsYWdzICYgREVWX1JBVEVfT0ZETSkKKwkJdHhkZXNjLT5yYXRlX21vZGUgPSBSQVRFX01PREVfT0ZETTsKIAotCWlmIChod3JhdGUtPmZsYWdzICYgREVWX1JBVEVfT0ZETSkgewotCQlfX3NldF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpOwotCi0JCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZGF0YV9sZW5ndGggPj4gNikgJiAweDNmOwotCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkYXRhX2xlbmd0aCAmIDB4M2Y7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogQ29udmVydCBsZW5ndGggdG8gbWljcm9zZWNvbmRzLgotCQkgKi8KLQkJcmVzaWR1YWwgPSBHRVRfRFVSQVRJT05fUkVTKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOwotCQlkdXJhdGlvbiA9IEdFVF9EVVJBVElPTihkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKLQotCQlpZiAocmVzaWR1YWwgIT0gMCkgewotCQkJZHVyYXRpb24rKzsKLQotCQkJLyoKLQkJCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBMZW5ndGggRXh0ZW5zaW9uCi0JCQkgKi8KLQkJCWlmIChod3JhdGUtPmJpdHJhdGUgPT0gMTEwICYmIHJlc2lkdWFsIDw9IDMwKQotCQkJCXR4ZGVzYy0+c2VydmljZSB8PSAweDgwOwotCQl9Ci0KLQkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7Ci0JCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGR1cmF0aW9uICYgMHhmZjsKLQotCQkvKgotCQkgKiBXaGVuIHByZWFtYmxlIGlzIGVuYWJsZWQgd2Ugc2hvdWxkIHNldCB0aGUKLQkJICogcHJlYW1ibGUgYml0IGZvciB0aGUgc2lnbmFsLgotCQkgKi8KLQkJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQotCQkJdHhkZXNjLT5zaWduYWwgfD0gMHgwODsKLQl9CisJLyoKKwkgKiBBcHBseSBUWCBkZXNjcmlwdG9yIGhhbmRsaW5nIGJ5IGNvbXBvbmVudHMKKwkgKi8KKwlydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3IoZW50cnksIHR4ZGVzYyk7CisJcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Jfc2VxKGVudHJ5LCB0eGRlc2MpOworCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3BsY3AoZW50cnksIHR4ZGVzYywgaHdyYXRlKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfd3JpdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LApAQCAtNDAzLDcgKzQxNCw3IEBACiAJICovCiAJaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLmZsYWdzKSAmJgogCSAgICAhdGVzdF9iaXQoRU5UUllfVFhEX0VOQ1JZUFRfSVYsICZ0eGRlc2MuZmxhZ3MpKSB7Ci0JCWlmICh0ZXN0X2JpdChDT05GSUdfQ1JZUFRPX0NPUFlfSVYsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9DT1BZX0lWLCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQogCQkJcnQyeDAwY3J5cHRvX3R4X2NvcHlfaXYoc2tiLCBpdl9sZW4pOwogCQllbHNlCiAJCQlydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHNrYiwgaXZfbGVuKTsKQEAgLTQzMiw3ICs0NDMsOCBAQAogfQogCiBpbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBjb25zdCBib29sIGVuYWJsZV9iZWFjb24pCiB7CiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CkBAIC00NDIsNiArNDU0LDExIEBACiAJaWYgKHVubGlrZWx5KCFpbnRmLT5iZWFjb24pKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKKwlpZiAoIWVuYWJsZV9iZWFjb24pIHsKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9CRUFDT04pOworCQlyZXR1cm4gMDsKKwl9CisKIAlpbnRmLT5iZWFjb24tPnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHJ0MngwMGRldi0+aHcsIHZpZik7CiAJaWYgKCFpbnRmLT5iZWFjb24tPnNrYikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00OTAsNiArNTA3LDkgQEAKIHsKIAlpbnQgYXRpbSA9IHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAorCWlmIChxdWV1ZSA9PSBRSURfUlgpCisJCXJldHVybiBydDJ4MDBkZXYtPnJ4OworCiAJaWYgKHF1ZXVlIDwgcnQyeDAwZGV2LT5vcHMtPnR4X3F1ZXVlcyAmJiBydDJ4MDBkZXYtPnR4KQogCQlyZXR1cm4gJnJ0MngwMGRldi0+dHhbcXVldWVdOwogCkBAIC01NjYsNiArNTg2LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKIH0KIAordm9pZCBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKworCXR4YWxsX3F1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpCisJCXJ0MngwMGRldi0+b3BzLT5saWItPmtpbGxfdHhfcXVldWUocnQyeDAwZGV2LCBxdWV1ZS0+cWlkKTsKK30KKwogdm9pZCBydDJ4MDBxdWV1ZV9pbml0X3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggMjgyOTM3MS4uOTdlMmFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNTgsNiArMTU4LDE0IEBACiB9OwogCiAvKioKKyAqIFJYRE9ORV9TSUdOQUxfTUFTSyAtIERlZmluZSB0byBtYXNrIG9mZiBhbGwgJnJ4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzIGZsYWdzCisgKiBleGNlcHQgZm9yIHRoZSBSWERPTkVfU0lHTkFMXyogZmxhZ3MuIFRoaXMgaXMgdXNlZnVsIHRvIGNvbnZlcnQgdGhlIGRldl9mbGFncworICogZnJvbSAmcnhkb25lX2VudHJ5X2Rlc2MgdG8gYSBzaWduYWwgdmFsdWUgdHlwZS4KKyAqLworI2RlZmluZSBSWERPTkVfU0lHTkFMX01BU0sgXAorICAgICAgICggUlhET05FX1NJR05BTF9QTENQIHwgUlhET05FX1NJR05BTF9CSVRSQVRFICkKKworLyoqCiAgKiBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2M6IFJYIEVudHJ5IGRlc2NyaXB0b3IKICAqCiAgKiBTdW1tYXJ5IG9mIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gcmVhZCBmcm9tIHRoZSBSWCBmcmFtZSBkZXNjcmlwdG9yLgpAQCAtMTY1LDYgKzE3Myw3IEBACiAgKiBAdGltZXN0YW1wOiBSWCBUaW1lc3RhbXAKICAqIEBzaWduYWw6IFNpZ25hbCBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCiAgKiBAcnNzaTogUlNTSSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCisgKiBAbm9pc2U6IE1lYXN1cmVkIG5vaXNlIGR1cmluZyBmcmFtZSByZWNlcHRpb24uCiAgKiBAc2l6ZTogRGF0YSBzaXplIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KICAqIEBmbGFnczogTUFDODAyMTEgcmVjZWl2ZSBmbGFncyAoU2VlICZlbnVtIG1hYzgwMjExX3J4X2ZsYWdzKS4KICAqIEBkZXZfZmxhZ3M6IFJhbGluayByZWNlaXZlIGZsYWdzIChTZWUgJmVudW0gcnhkb25lX2VudHJ5X2Rlc2NfZmxhZ3MpLgpAQCAtMTc3LDYgKzE4Niw3IEBACiAJdTY0IHRpbWVzdGFtcDsKIAlpbnQgc2lnbmFsOwogCWludCByc3NpOworCWludCBub2lzZTsKIAlpbnQgc2l6ZTsKIAlpbnQgZmxhZ3M7CiAJaW50IGRldl9mbGFnczsKQEAgLTIyMiw3ICsyMzIsNiBAQAogICoKICAqIEBFTlRSWV9UWERfUlRTX0ZSQU1FOiBUaGlzIGZyYW1lIGlzIGEgUlRTIGZyYW1lLgogICogQEVOVFJZX1RYRF9DVFNfRlJBTUU6IFRoaXMgZnJhbWUgaXMgYSBDVFMtdG8tc2VsZiBmcmFtZS4KLSAqIEBFTlRSWV9UWERfT0ZETV9SQVRFOiBUaGlzIGZyYW1lIGlzIHNlbmQgb3V0IHdpdGggYW4gT0ZETSByYXRlLgogICogQEVOVFJZX1RYRF9HRU5FUkFURV9TRVE6IFRoaXMgZnJhbWUgcmVxdWlyZXMgc2VxdWVuY2UgY291bnRlci4KICAqIEBFTlRSWV9UWERfRklSU1RfRlJBR01FTlQ6IFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLgogICogQEVOVFJZX1RYRF9NT1JFX0ZSQUc6IFRoaXMgZnJhbWUgaXMgZm9sbG93ZWQgYnkgYW5vdGhlciBmcmFnbWVudC4KQEAgLTIzOCw3ICsyNDcsNiBAQAogZW51bSB0eGVudHJ5X2Rlc2NfZmxhZ3MgewogCUVOVFJZX1RYRF9SVFNfRlJBTUUsCiAJRU5UUllfVFhEX0NUU19GUkFNRSwKLQlFTlRSWV9UWERfT0ZETV9SQVRFLAogCUVOVFJZX1RYRF9HRU5FUkFURV9TRVEsCiAJRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULAogCUVOVFJZX1RYRF9NT1JFX0ZSQUcsCkBAIC0yNjMsNiArMjcxLDcgQEAKICAqIEBsZW5ndGhfbG93OiBQTENQIGxlbmd0aCBsb3cgd29yZC4KICAqIEBzaWduYWw6IFBMQ1Agc2lnbmFsLgogICogQHNlcnZpY2U6IFBMQ1Agc2VydmljZS4KKyAqIEByYXRlX21vZGU6IFJhdGUgbW9kZSAoU2VlIEBlbnVtIHJhdGVfbW9kdWxhdGlvbikuCiAgKiBAcmV0cnlfbGltaXQ6IE1heCBudW1iZXIgb2YgcmV0cmllcy4KICAqIEBhaWZzOiBBSUZTIHZhbHVlLgogICogQGlmczogSUZTIHZhbHVlLgpAQCAtMjgyLDYgKzI5MSw4IEBACiAJdTE2IHNpZ25hbDsKIAl1MTYgc2VydmljZTsKIAorCXUxNiByYXRlX21vZGU7CisKIAlzaG9ydCByZXRyeV9saW1pdDsKIAlzaG9ydCBhaWZzOwogCXNob3J0IGlmczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaAppbmRleCBjMmZiYTdjLi44NjEzMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTI1LDYgKzEyNSwyNiBAQAogfTsKIAogLyoKKyAqIFJhdGUgbW9kdWxhdGlvbnMKKyAqLworZW51bSByYXRlX21vZHVsYXRpb24geworCVJBVEVfTU9ERV9DQ0sgPSAwLAorCVJBVEVfTU9ERV9PRkRNID0gMSwKKwlSQVRFX01PREVfSFRfTUlYID0gMiwKKwlSQVRFX01PREVfSFRfR1JFRU5GSUVMRCA9IDMsCit9OworCisvKgorICogRmlybXdhcmUgdmFsaWRhdGlvbiBlcnJvciBjb2RlcworICovCitlbnVtIGZpcm13YXJlX2Vycm9ycyB7CisJRldfT0ssCisJRldfQkFEX0NSQywKKwlGV19CQURfTEVOR1RILAorCUZXX0JBRF9WRVJTSU9OLAorfTsKKworLyoKICAqIFJlZ2lzdGVyIGhhbmRsZXJzLgogICogV2Ugc3RvcmUgdGhlIHBvc2l0aW9uIG9mIGEgcmVnaXN0ZXIgZmllbGQgaW5zaWRlIGEgZmllbGQgc3RydWN0dXJlLAogICogVGhpcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgYW5kIHJlYWRpbmcgYSBjZXJ0YWluIGZpZWxkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKaW5kZXggMzI5OGNhZS4uYjZkNGM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDczICsyNSwzMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAKICNpbmNsdWRlICJydDJ4MDAuaCIKICNpbmNsdWRlICJydDJ4MDBsaWIuaCIKIAotc3RhdGljIGludCBydDJ4MDByZmtpbGxfdG9nZ2xlX3JhZGlvKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQorc3RhdGljIHZvaWQgcnQyeDAwcmZraWxsX3BvbGwoc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2KQogewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwotCWludCByZXR2YWwgPSAwOwotCi0JaWYgKHVubGlrZWx5KCFydDJ4MDBkZXYpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogT25seSBjb250aW51ZSBpZiB0aGVyZSBhcmUgZW5hYmxlZCBpbnRlcmZhY2VzLgotCSAqLwotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1NUQVJURUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCkgewotCQlJTkZPKHJ0MngwMGRldiwgIlJGS0lMTCBldmVudDogZW5hYmxpbmcgcmFkaW8uXG4iKTsKLQkJY2xlYXJfYml0KERFVklDRV9TVEFURV9ESVNBQkxFRF9SQURJT19IVywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCQlyZXR2YWwgPSBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHJ0MngwMGRldik7Ci0JfSBlbHNlIGlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEKSB7Ci0JCUlORk8ocnQyeDAwZGV2LCAiUkZLSUxMIGV2ZW50OiBkaXNhYmxpbmcgcmFkaW8uXG4iKTsKLQkJc2V0X2JpdChERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJcnQyeDAwbGliX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKLQl9IGVsc2UgewotCQlXQVJOSU5HKHJ0MngwMGRldiwgIlJGS0lMTCBldmVudDogdW5rbm93biBzdGF0ZSAlZC5cbiIsIHN0YXRlKTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IHJ0MngwMHJma2lsbF9nZXRfc3RhdGUodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwotCi0JLyoKLQkgKiByZmtpbGxfcG9sbCByZXBvcnRzIDEgd2hlbiB0aGUga2V5IGhhcyBiZWVuIHByZXNzZWQgYW5kIHRoZQotCSAqIHJhZGlvIHNob3VsZCBiZSBibG9ja2VkLgotCSAqLwotCSpzdGF0ZSA9IHJ0MngwMGRldi0+b3BzLT5saWItPnJma2lsbF9wb2xsKHJ0MngwMGRldikgPwotCSAgICBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIDogUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDByZmtpbGxfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgcmZraWxsX3dvcmsud29yayk7Ci0JZW51bSByZmtpbGxfc3RhdGUgc3RhdGU7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHBvbGxfZGV2LT5wcml2YXRlOworCWludCBzdGF0ZSwgb2xkX3N0YXRlOwogCiAJaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAogCSAgICAhdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAogCS8qCi0JICogUG9sbCBsYXRlc3Qgc3RhdGUgYW5kIHJlcG9ydCBpdCB0byByZmtpbGwgd2hvIHNob3VsZCBzb3J0Ci0JICogb3V0IGlmIHRoZSBzdGF0ZSBzaG91bGQgYmUgdG9nZ2xlZCBvciBub3QuCisJICogUG9sbCBsYXRlc3Qgc3RhdGUsIGlmIHRoZSBzdGF0ZSBpcyBkaWZmZXJlbnQgdGhlbiB0aGUgcHJldmlvdXMgc3RhdGUsCisJICogd2Ugc2hvdWxkIGdlbmVyYXRlIGFuIGlucHV0IGV2ZW50LgogCSAqLwotCWlmICghcnQyeDAwcmZraWxsX2dldF9zdGF0ZShydDJ4MDBkZXYsICZzdGF0ZSkpCi0JCXJma2lsbF9mb3JjZV9zdGF0ZShydDJ4MDBkZXYtPnJma2lsbCwgc3RhdGUpOworCXN0YXRlID0gISFydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpOworCW9sZF9zdGF0ZSA9ICEhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0JMT0NLRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJnJ0MngwMGRldi0+cmZraWxsX3dvcmssIFJGS0lMTF9QT0xMX0lOVEVSVkFMKTsKKwlpZiAob2xkX3N0YXRlICE9IHN0YXRlKSB7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2gocG9sbF9kZXYtPmlucHV0LCBTV19SRktJTExfQUxMLCBzdGF0ZSk7CisJCWNoYW5nZV9iaXQoUkZLSUxMX1NUQVRFX0JMT0NLRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CisJfQogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTAwLDggKzU3LDggQEAKIAkgICAgdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWlmIChyZmtpbGxfcmVnaXN0ZXIocnQyeDAwZGV2LT5yZmtpbGwpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZmtpbGwgaGFuZGxlci5cbiIpOworCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KSkgeworCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG9sbGVkIGRldmljZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDksMTAgKzY2LDEwIEBACiAKIAkvKgogCSAqIEZvcmNlIGluaXRpYWwgcG9sbCB3aGljaCB3aWxsIGRldGVjdCB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUsCi0JICogYW5kIGNvcnJlY3RseSBzZW5kcyB0aGUgc2lnbmFsIHRvIHRoZSByZmtpbGwgbGF5ZXIgYWJvdXQgdGhpcworCSAqIGFuZCBjb3JyZWN0bHkgc2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgaW5wdXQgbGF5ZXIgYWJvdXQgdGhpcwogCSAqIHN0YXRlLgogCSAqLwotCXJ0MngwMHJma2lsbF9wb2xsKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrLndvcmspOworCXJ0MngwMHJma2lsbF9wb2xsKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTIxLDUyICs3OCw1MCBAQAogCSAgICAhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5yZmtpbGxfd29yayk7Ci0KLQlyZmtpbGxfdW5yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKIAogCV9fY2xlYXJfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OwogCi0JaWYgKHRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCisJaWYgKHRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkgfHwKKwkgICAgIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKLQlydDJ4MDBkZXYtPnJma2lsbCA9IHJma2lsbF9hbGxvY2F0ZShkZXYsIFJGS0lMTF9UWVBFX1dMQU4pOwotCWlmICghcnQyeDAwZGV2LT5yZmtpbGwpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJma2lsbCBoYW5kbGVyLlxuIik7CisJcG9sbF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7CisJaWYgKCFwb2xsX2RldikgeworCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9sbGVkIGRldmljZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCisJcG9sbF9kZXYtPnByaXZhdGUgPSBydDJ4MDBkZXY7CisJcG9sbF9kZXYtPnBvbGwgPSBydDJ4MDByZmtpbGxfcG9sbDsKKwlwb2xsX2Rldi0+cG9sbF9pbnRlcnZhbCA9IFJGS0lMTF9QT0xMX0lOVEVSVkFMOworCisJcG9sbF9kZXYtPmlucHV0LT5uYW1lID0gcnQyeDAwZGV2LT5vcHMtPm5hbWU7CisJcG9sbF9kZXYtPmlucHV0LT5waHlzID0gd2lwaHlfbmFtZShydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJcG9sbF9kZXYtPmlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJcG9sbF9kZXYtPmlucHV0LT5pZC52ZW5kb3IgPSAweDE4MTQ7CisJcG9sbF9kZXYtPmlucHV0LT5pZC5wcm9kdWN0ID0gcnQyeDAwZGV2LT5jaGlwLnJ0OworCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVyc2lvbiA9IHJ0MngwMGRldi0+Y2hpcC5yZXY7CisJcG9sbF9kZXYtPmlucHV0LT5kZXYucGFyZW50ID0gd2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlwb2xsX2Rldi0+aW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX1NXKTsKKwlwb2xsX2Rldi0+aW5wdXQtPnN3Yml0WzBdID0gQklUKFNXX1JGS0lMTF9BTEwpOworCisJcnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYgPSBwb2xsX2RldjsKKwogCV9fc2V0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotCi0JcnQyeDAwZGV2LT5yZmtpbGwtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKLQlydDJ4MDBkZXYtPnJma2lsbC0+ZGF0YSA9IHJ0MngwMGRldjsKLQlydDJ4MDBkZXYtPnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gcnQyeDAwcmZraWxsX3RvZ2dsZV9yYWRpbzsKLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKLQkJcnQyeDAwZGV2LT5yZmtpbGwtPmdldF9zdGF0ZSA9IHJ0MngwMHJma2lsbF9nZXRfc3RhdGU7Ci0JCXJ0MngwMGRldi0+cmZraWxsLT5zdGF0ZSA9Ci0JCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpID8KLQkJCSAgICBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIDogUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQl9IGVsc2UgewotCQlydDJ4MDBkZXYtPnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOwotCX0KLQotCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrLCBydDJ4MDByZmtpbGxfcG9sbCk7Ci0KLQlyZXR1cm47CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpZiAoIXRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCisJaWYgKCFfX3Rlc3RfYW5kX2NsZWFyX2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELAorCQkJCSAgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKIAkJcmV0dXJuOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrKTsKLQotCXJma2lsbF9mcmVlKHJ0MngwMGRldi0+cmZraWxsKTsKLQlydDJ4MDBkZXYtPnJma2lsbCA9IE5VTEw7CisJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKKwlydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2RldiA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKaW5kZXggMGIyOWQ3Ni4uN2Q1MGNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI5Niw2ICsyOTYsNDEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlKTsKIAordm9pZCBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxaWQpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdjsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpiY25fcHJpdjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlib29sIGtpbGxfZ3VhcmQ7CisKKwkvKgorCSAqIFdoZW4ga2lsbGluZyB0aGUgYmVhY29uIHF1ZXVlLCB3ZSBtdXN0IGFsc28ga2lsbAorCSAqIHRoZSBiZWFjb24gZ3VhcmQgYnl0ZS4KKwkgKi8KKwlraWxsX2d1YXJkID0KKwkgICAgKHFpZCA9PSBRSURfQkVBQ09OKSAmJgorCSAgICAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpOworCisJLyoKKwkgKiBDYW5jZWwgYWxsIGVudHJpZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7CisJCWVudHJ5X3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOworCisJCS8qCisJCSAqIEtpbGwgZ3VhcmRpYW4gdXJiIChpZiByZXF1aXJlZCBieSBkcml2ZXIpLgorCQkgKi8KKwkJaWYgKGtpbGxfZ3VhcmQpIHsKKwkJCWJjbl9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJdXNiX2tpbGxfdXJiKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2tpbGxfdHhfcXVldWUpOworCiAvKgogICogUlggZGF0YSBoYW5kbGVycy4KICAqLwpAQCAtMzM4LDM1ICszNzMsMTQgQEAKICAqLwogdm9pZCBydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdjsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpiY25fcHJpdjsKLQlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7Ci0JdW5zaWduZWQgaW50IGk7Ci0KIAlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfUlhfQ09OVFJPTCwgMCwgMCwKIAkJCQkgICAgUkVHSVNURVJfVElNRU9VVCk7CiAKIAkvKgotCSAqIENhbmNlbCBhbGwgcXVldWVzLgorCSAqIFRoZSBVU0IgdmVyc2lvbiBvZiBraWxsX3R4X3F1ZXVlIGFsc28gd29ya3MKKwkgKiBvbiB0aGUgUlggcXVldWUuCiAJICovCi0JcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKLQkJCWVudHJ5X3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7Ci0JCQl1c2Jfa2lsbF91cmIoZW50cnlfcHJpdi0+dXJiKTsKLQkJfQotCX0KLQotCS8qCi0JICogS2lsbCBndWFyZGlhbiB1cmIgKGlmIHJlcXVpcmVkIGJ5IGRyaXZlcikuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+YmNuLT5saW1pdDsgaSsrKSB7Ci0JCWJjbl9wcml2ID0gcnQyeDAwZGV2LT5iY24tPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQlpZiAoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYikKLQkJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKLQl9CisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9SWCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAppbmRleCAyYmQ0YWM4Li5iZDJkNTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDE5LDYgKzQxOSwxNyBAQAogdm9pZCBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCk7CiAKKy8qKgorICogcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUgLSBLaWxsIGRhdGEgcXVldWUKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKiBAcWlkOiBEYXRhIHF1ZXVlIHRvIGtpbGwKKyAqCisgKiBUaGlzIHdpbGwgd2FsayB0aHJvdWdoIGFsbCBlbnRyaWVzIG9mIHRoZSBxdWV1ZSBhbmQga2lsbCBhbGwKKyAqIHByZXZpb3VzbHkga2lja2VkIGZyYW1lcyBiZWZvcmUgdGhleSBjYW4gYmUgc2VuZC4KKyAqLwordm9pZCBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpOworCiAvKgogICogRGV2aWNlIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA5ODdlODkwLi4yY2E4YjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMjMsOSArMTIzLDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtMTQ2LDEyICsxNDMsNiBAQAogCW11dGV4X3VubG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogfQogCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSBydDYxcGNpX2xlZF9icmlnaHRuZXNzKCkKLSAqIG1ha2UgZ2NjIGhhcHB5IGJ5IHBsYWNpbmcgdGhpcyBmdW5jdGlvbiBpbnNpZGUgdGhlCi0gKiBzYW1lIGlmZGVmIHN0YXRlbWVudCBhcyB0aGUgY2FsbGVyLgotICovCiBzdGF0aWMgdm9pZCBydDYxcGNpX21jdV9yZXF1ZXN0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJY29uc3QgdTggY29tbWFuZCwgY29uc3QgdTggdG9rZW4sCiAJCQkJY29uc3QgdTggYXJnMCwgY29uc3QgdTggYXJnMSkKQEAgLTE4MCw3ICsxNzEsNiBAQAogCW11dGV4X3VubG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiB9Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwogCiBzdGF0aWMgdm9pZCBydDYxcGNpX2VlcHJvbXJlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQogewpAQCAtOTY3LDYgKzk1Nyw1MCBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQ2MXBjaV9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTEsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0RFTEFZX0FGVEVSX1RCQ04sCisJCQkJICAgbGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDEwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9UQkNOX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDUpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFNPRlRfUkVTRVRfQ1NSLCAweDAwMDAwMDA1KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU9fQ05UTF9DU1IsIDB4MDAwMDAwMWMpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQ0lfVVNFQ19DU1IsIDB4MDAwMDAwNjApOworCisJCXJ0NjFwY2lfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfU0xFRVAsIDB4ZmYsIDAsIDApOworCX0gZWxzZSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9UQkNOX0JFRk9SRV9XQUtFVVAsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9XQUtFVVBfTEFURU5DWSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBTT0ZUX1JFU0VUX0NTUiwgMHgwMDAwMDAwNyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElPX0NOVExfQ1NSLCAweDAwMDAwMDE4KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUENJX1VTRUNfQ1NSLCAweDAwMDAwMDIwKTsKKworCQlydDYxcGNpX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1dBS0VVUCwgMHhmZiwgMCwgMCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBydDYxcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtOTg0LDYgKzEwMTgsOCBAQAogCQlydDYxcGNpX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0NjFwY2lfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDYxcGNpX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtMTAwNywyMSArMTA0MywyOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFNUQV9DU1IxX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NjFwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDYxcGNpX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHgyMCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4MjA7CisJaWYgKHF1YWwtPnZnY19sZXZlbCAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQ2MXBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDYxcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDIwKTsKK30KKworc3RhdGljIHZvaWQgcnQ2MXBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCXU4IHVwX2JvdW5kOwogCXU4IGxvd19ib3VuZDsKIAotCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwpAQCAtMTA1MSwzOCArMTA5NCwzMiBAQAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciB2ZXJ5IHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTM1KSB7Ci0JCWlmIChyMTcgIT0gMHg2MCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NjApOworCWlmIChxdWFsLT5yc3NpID49IC0zNSkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDYwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IHVwX2JvdW5kKQotCQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgbWlkZGxlLXNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTY2KSB7Ci0JCWxvd19ib3VuZCArPSAweDEwOwotCQlpZiAocjE3ICE9IGxvd19ib3VuZCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTY2KSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlsb3dfYm91bmQgKz0gMHgwODsKLQkJaWYgKHIxNyAhPSBsb3dfYm91bmQpCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDA4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA5MCwxMiArMTEyNywxMiBAQAogCSAqIFNwZWNpYWwgY2FzZTogQ2hhbmdlIHVwX2JvdW5kIGJhc2VkIG9uIHRoZSByc3NpLgogCSAqIExvd2VyIHVwX2JvdW5kIHdoZW4gcnNzaSBpcyB3ZWFrZXIgdGhlbiAtNzQgZEJtLgogCSAqLwotCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcnNzaSk7CisJdXBfYm91bmQgLT0gMiAqICgtNzQgLSBxdWFsLT5yc3NpKTsKIAlpZiAobG93X2JvdW5kID4gdXBfYm91bmQpCiAJCXVwX2JvdW5kID0gbG93X2JvdW5kOwogCi0JaWYgKHIxNyA+IHVwX2JvdW5kKSB7Ci0JCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+dmdjX2xldmVsID4gdXBfYm91bmQpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTA1LDE1ICsxMTQyLDEwIEBACiAJICogcjE3IGRvZXMgbm90IHlldCBleGNlZWQgdXBwZXIgbGltaXQsIGNvbnRpbnVlIGFuZCBiYXNlCiAJICogdGhlIHIxNyB0dW5pbmcgb24gdGhlIGZhbHNlIENDQSBjb3VudC4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHIxNyA8IHVwX2JvdW5kKSB7Ci0JCWlmICgrK3IxNyA+IHVwX2JvdW5kKQotCQkJcjE3ID0gdXBfYm91bmQ7Ci0JCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gbG93X2JvdW5kKSB7Ci0JCWlmICgtLXIxNyA8IGxvd19ib3VuZCkKLQkJCXIxNyA9IGxvd19ib3VuZDsKLQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQl9CisJaWYgKChxdWFsLT5mYWxzZV9jY2EgPiA1MTIpICYmIChxdWFsLT52Z2NfbGV2ZWwgPCB1cF9ib3VuZCkpCisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsICsrcXVhbC0+dmdjX2xldmVsKTsKKwllbHNlIGlmICgocXVhbC0+ZmFsc2VfY2NhIDwgMTAwKSAmJiAocXVhbC0+dmdjX2xldmVsID4gbG93X2JvdW5kKSkKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgLS1xdWFsLT52Z2NfbGV2ZWwpOwogfQogCiAvKgpAQCAtMTE0MSwyNSArMTE3MywzNyBAQAogCXJldHVybiBmd19uYW1lOwogfQogCi1zdGF0aWMgdTE2IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX2NyYyhjb25zdCB2b2lkICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDYxcGNpX2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKKwl1MTYgZndfY3JjOwogCXUxNiBjcmM7CiAKIAkvKgotCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKiBPbmx5IHN1cHBvcnQgOGtiIGZpcm13YXJlIGZpbGVzLgorCSAqLworCWlmIChsZW4gIT0gODE5MikKKwkJcmV0dXJuIEZXX0JBRF9MRU5HVEg7CisKKwkvKgogCSAqIFRoZSBsYXN0IDIgYnl0ZXMgaW4gdGhlIGZpcm13YXJlIGFycmF5IGFyZSB0aGUgY3JjIGNoZWNrc3VtIGl0c2VsZiwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5ldmVyIHBhc3MgdGhvc2UgMiBieXRlcyB0byB0aGUgY3JjCiAJICogYWxnb3JpdGhtLgogCSAqLworCWZ3X2NyYyA9IChkYXRhW2xlbiAtIDJdIDw8IDggfCBkYXRhW2xlbiAtIDFdKTsKKworCS8qCisJICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqLwogCWNyYyA9IGNyY19pdHVfdCgwLCBkYXRhLCBsZW4gLSAyKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CiAKLQlyZXR1cm4gY3JjOworCXJldHVybiAoZndfY3JjID09IGNyYykgPyBGV19PSyA6IEZXX0JBRF9DUkM7CiB9CiAKLXN0YXRpYyBpbnQgcnQ2MXBjaV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkJIGNvbnN0IHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHJ0NjFwY2lfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKIAl1MzIgcmVnOwpAQCAtMTY1NiwyNCArMTcwMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBydDYxcGNpX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQl1MzIgcmVnOwotCisJLyoKKwkgKiBEaXNhYmxlIHBvd2VyCisJICovCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEwLCAweDAwMDAxODE4KTsKLQotCS8qCi0JICogRGlzYWJsZSBzeW5jaHJvbmlzYXRpb24uCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAwKTsKLQotCS8qCi0JICogQ2FuY2VsIFJYIGFuZCBUWC4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMwLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMxLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMyLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMzLCAxKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKIH0KIAogc3RhdGljIGludCBydDYxcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKQEAgLTE4MTIsNyArMTg0Miw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFVFJZX01PREUsICZ0eGRlc2MtPmZsYWdzKSk7CkBAIC0xODk2LDYgKzE5MjYsMjQgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQ2MXBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHFpZCA9PSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgMCk7CisJCXJldHVybjsKKwl9CisKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMwLCAocWlkID09IFFJRF9BQ19CRSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzEsIChxaWQgPT0gUUlEX0FDX0JLKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMiwgKHFpZCA9PSBRSURfQUNfVkkpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMzLCAocWlkID09IFFJRF9BQ19WTykpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOworfQorCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0yMTk1LDcgKzIyNDMsOCBAQAogCWlmICh3b3JkID09IDB4ZmZmZikgewogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRU5BQkxFX0RJVkVSU0lUWSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19UWF9ESVZFUlNJVFksIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfVFhfUlhfRklYRUQsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfUlhfRklYRUQsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfVFhfRklYRUQsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0JHLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NBUkRCVVNfQUNDRUwsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0EsIDApOwpAQCAtMjMzOSwyNCArMjM4OCwxMCBAQAogCSAqLwogCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI5KSAmJgogCSAgICAhdGVzdF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKLQkJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1RYX1JYX0ZJWEVEKSkgewotCQljYXNlIDA6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9COwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9COwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9BOwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9BOwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQjsKLQkJCWJyZWFrOwotCQl9CisJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPQorCQkgICAgQU5URU5OQV9BICsgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19SWF9GSVhFRCk7CisJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPQorCQkgICAgQU5URU5OQV9CIC0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19UWF9GSVhFRCk7CiAKIAkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZKSkKIAkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPSBBTlRFTk5BX1NXX0RJVkVSU0lUWTsKQEAgLTI1MzQsNyArMjU2OSw5IEBACiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPQogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKIAogCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsIHJ0MngwMGRldi0+ZGV2KTsKQEAgLTI2MzMsNiArMjY3MCw3IEBACiAJc3RydWN0IHJ0MngwMF9maWVsZDMyIGZpZWxkOwogCWludCByZXR2YWw7CiAJdTMyIHJlZzsKKwl1MzIgb2Zmc2V0OwogCiAJLyoKIAkgKiBGaXJzdCBwYXNzIHRoZSBjb25maWd1cmF0aW9uIHRocm91Z2ggcnQyeDAwbGliLCB0aGF0IHdpbGwKQEAgLTI2NDQsMjQgKzI2ODIsMjMgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCisJLyoKKwkgKiBXZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uCisJICogZm9yIFdNTSBxdWV1ZXMvCisJICovCisJaWYgKHF1ZXVlX2lkeCA+PSA0KQorCQlyZXR1cm4gMDsKKwogCXF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcXVldWVfaWR4KTsKIAogCS8qIFVwZGF0ZSBXTU0gVFhPUCByZWdpc3RlciAqLwotCWlmIChxdWV1ZV9pZHggPCAyKSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKKwlvZmZzZXQgPSBBQ19UWE9QX0NTUjAgKyAoc2l6ZW9mKHUzMikgKiAoISEocXVldWVfaWR4ICYgMikpKTsKKwlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAmIDEpICogMTY7CisJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKIAotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsIHJlZyk7Ci0JfSBlbHNlIGlmIChxdWV1ZV9pZHggPCA0KSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4IC0gMikgKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKLQotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsIHJlZyk7Ci0JfQorCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CiAKIAkvKiBVcGRhdGUgV01NIHJlZ2lzdGVycyAqLwogCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiA0OwpAQCAtMjcxNyw3ICsyNzU0LDcgQEAKIAkuaXJxX2hhbmRsZXIJCT0gcnQ2MXBjaV9pbnRlcnJ1cHQsCiAJLnByb2JlX2h3CQk9IHJ0NjFwY2lfcHJvYmVfaHcsCiAJLmdldF9maXJtd2FyZV9uYW1lCT0gcnQ2MXBjaV9nZXRfZmlybXdhcmVfbmFtZSwKLQkuZ2V0X2Zpcm13YXJlX2NyYwk9IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX2NyYywKKwkuY2hlY2tfZmlybXdhcmUJCT0gcnQ2MXBjaV9jaGVja19maXJtd2FyZSwKIAkubG9hZF9maXJtd2FyZQkJPSBydDYxcGNpX2xvYWRfZmlybXdhcmUsCiAJLmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX2luaXRpYWxpemUsCiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDBwY2lfdW5pbml0aWFsaXplLApAQCAtMjczMiw2ICsyNzY5LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0NjFwY2lfd3JpdGVfYmVhY29uLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NjFwY2lfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDYxcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NjFwY2lfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQ2MXBjaV9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0NjFwY2lfY29uZmlnX3BhaXJ3aXNlX2tleSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IDY1ZmUzMzMuLjQxZTg5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUwLDggKzUwLDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwODAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCkBAIC04OCw4ICs4OCwxMCBAQAogCiAvKgogICogU09GVF9SRVNFVF9DU1IKKyAqIEZPUkNFX0NMT0NLX09OOiBIb3N0IGZvcmNlIE1BQyBjbG9jayBPTgogICovCiAjZGVmaW5lIFNPRlRfUkVTRVRfQ1NSCQkJMHgwMDEwCisjZGVmaW5lIFNPRlRfUkVTRVRfQ1NSX0ZPUkNFX0NMT0NLX09OCUZJRUxEMzIoMHgwMDAwMDAwMikKIAogLyoKICAqIE1DVV9JTlRfU09VUkNFX0NTUjogTUNVIGludGVycnVwdCBzb3VyY2UvbWFzayByZWdpc3Rlci4KQEAgLTEwNTQsOCArMTA1NiwxMCBAQAogCiAvKgogICogSU9fQ05UTF9DU1IKKyAqIFJGX1BTOiBTZXQgUkYgaW50ZXJmYWNlIHZhbHVlIHRvIHBvd2VyIHNhdmUKICAqLwogI2RlZmluZSBJT19DTlRMX0NTUgkJCTB4MzQ5OAorI2RlZmluZSBJT19DTlRMX0NTUl9SRl9QUwkJRklFTEQzMigweDAwMDAwMDA0KQogCiAvKgogICogVUFSVF9JTlRfU09VUkNFX0NTUgpAQCAtMTE4Niw3ICsxMTkwLDggQEAKICNkZWZpbmUgRUVQUk9NX05JQwkJCTB4MDAxMQogI2RlZmluZSBFRVBST01fTklDX0VOQUJMRV9ESVZFUlNJVFkJRklFTEQxNigweDAwMDEpCiAjZGVmaW5lIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZCQlGSUVMRDE2KDB4MDAwMikKLSNkZWZpbmUgRUVQUk9NX05JQ19UWF9SWF9GSVhFRAkJRklFTEQxNigweDAwMGMpCisjZGVmaW5lIEVFUFJPTV9OSUNfUlhfRklYRUQJCUZJRUxEMTYoMHgwMDA0KQorI2RlZmluZSBFRVBST01fTklDX1RYX0ZJWEVECQlGSUVMRDE2KDB4MDAwOCkKICNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQkcJRklFTEQxNigweDAwMTApCiAjZGVmaW5lIEVFUFJPTV9OSUNfQ0FSREJVU19BQ0NFTAlGSUVMRDE2KDB4MDAyMCkKICNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQQlGSUVMRDE2KDB4MDA0MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGNlZmVlMWIuLjQyMGZmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyMiw5ICsxMjIsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC0xODYsNiArMTgzLDE4IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAorI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorc3RhdGljIGludCBydDczdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdTMyIHJlZzsKKworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjEzLCAmcmVnKTsKKwlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEzX0JJVDcpOworfQorI2Vsc2UKKyNkZWZpbmUgcnQ3M3VzYl9yZmtpbGxfcG9sbAlOVUxMCisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDczdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKQEAgLTg0NCw2ICs4NTMsNDQgQEAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAxMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCA1KTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfREVWSUNFX01PREUsIDAsCisJCQkJCSAgICBVU0JfTU9ERV9TTEVFUCwgUkVHSVNURVJfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAorCQkJCQkgICAgVVNCX01PREVfV0FLRVVQLCBSRUdJU1RFUl9USU1FT1VUKTsKKworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBydDczdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtODYxLDYgKzkwOCw4IEBACiAJCXJ0NzN1c2JfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQ3M3VzYl9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0NzN1c2JfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIC8qCkBAIC04ODQsMjEgKzkzMywyOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFNUQV9DU1IxX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NzN1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDczdXNiX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHgyMCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4MjA7CisJaWYgKHF1YWwtPnZnY19sZXZlbCAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQ3M3VzYl9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDczdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDIwKTsKK30KKworc3RhdGljIHZvaWQgcnQ3M3VzYl9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCXU4IHVwX2JvdW5kOwogCXU4IGxvd19ib3VuZDsKIAotCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwpAQCAtOTExLDEwICs5NjcsMTAgQEAKIAkJCXVwX2JvdW5kICs9IDB4MTA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAocnNzaSA+IC04MikgeworCQlpZiAocXVhbC0+cnNzaSA+IC04MikgewogCQkJbG93X2JvdW5kID0gMHgxYzsKIAkJCXVwX2JvdW5kID0gMHg0MDsKLQkJfSBlbHNlIGlmIChyc3NpID4gLTg0KSB7CisJCX0gZWxzZSBpZiAocXVhbC0+cnNzaSA+IC04NCkgewogCQkJbG93X2JvdW5kID0gMHgxYzsKIAkJCXVwX2JvdW5kID0gMHgyMDsKIAkJfSBlbHNlIHsKQEAgLTkzOCwzNyArOTk0LDMyIEBACiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHZlcnkgc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+IC0zNSkgewotCQlpZiAocjE3ICE9IDB4NjApCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDYwKTsKKwlpZiAocXVhbC0+cnNzaSA+IC0zNSkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDYwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IHVwX2JvdW5kKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgbWlkZGxlLXNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTY2KSB7Ci0JCWxvd19ib3VuZCArPSAweDEwOwotCQlpZiAocjE3ICE9IGxvd19ib3VuZCkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTY2KSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlpZiAocjE3ICE9IChsb3dfYm91bmQgKyAweDEwKSkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCArIDB4MDgpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDA4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTc2LDEyICsxMDI3LDEyIEBACiAJICogU3BlY2lhbCBjYXNlOiBDaGFuZ2UgdXBfYm91bmQgYmFzZWQgb24gdGhlIHJzc2kuCiAJICogTG93ZXIgdXBfYm91bmQgd2hlbiByc3NpIGlzIHdlYWtlciB0aGVuIC03NCBkQm0uCiAJICovCi0JdXBfYm91bmQgLT0gMiAqICgtNzQgLSByc3NpKTsKKwl1cF9ib3VuZCAtPSAyICogKC03NCAtIHF1YWwtPnJzc2kpOwogCWlmIChsb3dfYm91bmQgPiB1cF9ib3VuZCkKIAkJdXBfYm91bmQgPSBsb3dfYm91bmQ7CiAKLQlpZiAocjE3ID4gdXBfYm91bmQpIHsKLQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgPiB1cF9ib3VuZCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk5MSwxNyArMTA0MiwxMiBAQAogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCB1cF9ib3VuZCkgewotCQlyMTcgKz0gNDsKLQkJaWYgKHIxNyA+IHVwX2JvdW5kKQotCQkJcjE3ID0gdXBfYm91bmQ7Ci0JCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gbG93X2JvdW5kKSB7Ci0JCXIxNyAtPSA0OwotCQlpZiAocjE3IDwgbG93X2JvdW5kKQotCQkJcjE3ID0gbG93X2JvdW5kOwotCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0KKwlpZiAoKHF1YWwtPmZhbHNlX2NjYSA+IDUxMikgJiYgKHF1YWwtPnZnY19sZXZlbCA8IHVwX2JvdW5kKSkKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwKKwkJCQltaW5fdCh1OCwgcXVhbC0+dmdjX2xldmVsICsgNCwgdXBfYm91bmQpKTsKKwllbHNlIGlmICgocXVhbC0+ZmFsc2VfY2NhIDwgMTAwKSAmJiAocXVhbC0+dmdjX2xldmVsID4gbG93X2JvdW5kKSkKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwKKwkJCQltYXhfdCh1OCwgcXVhbC0+dmdjX2xldmVsIC0gNCwgbG93X2JvdW5kKSk7CiB9CiAKIC8qCkBAIC0xMDEyLDI1ICsxMDU4LDM3IEBACiAJcmV0dXJuIEZJUk1XQVJFX1JUMjU3MTsKIH0KIAotc3RhdGljIHUxNiBydDczdXNiX2dldF9maXJtd2FyZV9jcmMoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ3M3VzYl9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CisJdTE2IGZ3X2NyYzsKIAl1MTYgY3JjOwogCiAJLyoKLQkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICogT25seSBzdXBwb3J0IDJrYiBmaXJtd2FyZSBmaWxlcy4KKwkgKi8KKwlpZiAobGVuICE9IDIwNDgpCisJCXJldHVybiBGV19CQURfTEVOR1RIOworCisJLyoKIAkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCiAJICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwogCSAqIGFsZ29yaXRobS4KIAkgKi8KKwlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7CisKKwkvKgorCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKi8KIAljcmMgPSBjcmNfaXR1X3QoMCwgZGF0YSwgbGVuIC0gMik7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCi0JcmV0dXJuIGNyYzsKKwlyZXR1cm4gKGZ3X2NyYyA9PSBjcmMpID8gRldfT0sgOiBGV19CQURfQ1JDOwogfQogCi1zdGF0aWMgaW50IHJ0NzN1c2JfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB2b2lkICpkYXRhLAotCQkJCSBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDczdXNiX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHN0YXR1czsKQEAgLTE0NDksNyArMTUwNyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFVFJZX01PREUsICZ0eGRlc2MtPmZsYWdzKSk7CkBAIC0xODE2LDYgKzE4NzQsMTQgQEAKIAkJX19zZXRfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgorCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQorCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKKwkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldC4KIAkgKi8KIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fRlJFUSwgJmVlcHJvbSk7CkBAIC0yMDIwLDcgKzIwODYsOSBAQAogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0yMTIxLDYgKzIxODksNyBAQAogCXN0cnVjdCBydDJ4MDBfZmllbGQzMiBmaWVsZDsKIAlpbnQgcmV0dmFsOwogCXUzMiByZWc7CisJdTMyIG9mZnNldDsKIAogCS8qCiAJICogRmlyc3QgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIHJ0MngwMGxpYiwgdGhhdCB3aWxsCkBAIC0yMTMyLDI0ICsyMjAxLDIzIEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCS8qCisJICogV2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCByZWdpc3RlciBpbml0aWFsaXphdGlvbgorCSAqIGZvciBXTU0gcXVldWVzLworCSAqLworCWlmIChxdWV1ZV9pZHggPj0gNCkKKwkJcmV0dXJuIDA7CisKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlX2lkeCk7CiAKIAkvKiBVcGRhdGUgV01NIFRYT1AgcmVnaXN0ZXIgKi8KLQlpZiAocXVldWVfaWR4IDwgMikgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CisJb2Zmc2V0ID0gQUNfVFhPUF9DU1IwICsgKHNpemVvZih1MzIpICogKCEhKHF1ZXVlX2lkeCAmIDIpKSk7CisJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggJiAxKSAqIDE2OworCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CiAKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCByZWcpOwotCX0gZWxzZSBpZiAocXVldWVfaWR4IDwgNCkgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAtIDIpICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7Ci0KLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCByZWcpOwotCX0KKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCiAJLyogVXBkYXRlIFdNTSByZWdpc3RlcnMgKi8KIAlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogNDsKQEAgLTIxNzAsMTMgKzIyMzgsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotLyoKLSAqIE1hYzgwMjExIGRlbWFuZHMgZ2V0X3RzZiBtdXN0IGJlIGF0b21pYy4KLSAqIFRoaXMgaXMgbm90IHBvc3NpYmxlIGZvciBydDczdXNiIHNpbmNlIGFsbCByZWdpc3RlciBhY2Nlc3MKLSAqIGZ1bmN0aW9ucyByZXF1aXJlIHNsZWVwaW5nLiBVbnRpbGwgbWFjODAyMTEgbm8gbG9uZ2VyIG5lZWRzCi0gKiBnZXRfdHNmIHRvIGJlIGF0b21pYywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuCi0gKi8KIHN0YXRpYyB1NjQgcnQ3M3VzYl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKQEAgLTIxOTAsOSArMjI1MSw2IEBACiAKIAlyZXR1cm4gdHNmOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQ3M3VzYl9nZXRfdHNmCU5VTEwKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnQ3M3VzYl9tYWM4MDIxMV9vcHMgPSB7CiAJLnR4CQkJPSBydDJ4MDBtYWNfdHgsCkBAIC0yMjE0LDEyICsyMjcyLDEzIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ3M3VzYl9ydDJ4MDBfb3BzID0gewogCS5wcm9iZV9odwkJPSBydDczdXNiX3Byb2JlX2h3LAogCS5nZXRfZmlybXdhcmVfbmFtZQk9IHJ0NzN1c2JfZ2V0X2Zpcm13YXJlX25hbWUsCi0JLmdldF9maXJtd2FyZV9jcmMJPSBydDczdXNiX2dldF9maXJtd2FyZV9jcmMsCisJLmNoZWNrX2Zpcm13YXJlCQk9IHJ0NzN1c2JfY2hlY2tfZmlybXdhcmUsCiAJLmxvYWRfZmlybXdhcmUJCT0gcnQ3M3VzYl9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwdXNiX3VuaW5pdGlhbGl6ZSwKIAkuY2xlYXJfZW50cnkJCT0gcnQyeDAwdXNiX2NsZWFyX2VudHJ5LAogCS5zZXRfZGV2aWNlX3N0YXRlCT0gcnQ3M3VzYl9zZXRfZGV2aWNlX3N0YXRlLAorCS5yZmtpbGxfcG9sbAkJPSBydDczdXNiX3Jma2lsbF9wb2xsLAogCS5saW5rX3N0YXRzCQk9IHJ0NzN1c2JfbGlua19zdGF0cywKIAkucmVzZXRfdHVuZXIJCT0gcnQ3M3VzYl9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDczdXNiX2xpbmtfdHVuZXIsCkBAIC0yMjI4LDYgKzIyODcsNyBAQAogCS53cml0ZV9iZWFjb24JCT0gcnQ3M3VzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0NzN1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NzN1c2Jfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ3M3VzYl9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDczdXNiX2NvbmZpZ19zaGFyZWRfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQ3M3VzYl9jb25maWdfcGFpcndpc2Vfa2V5LApAQCAtMjM2NSw2ICsyNDI1LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDk3MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIFN1cmVjb20gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNzY5LCAweDMxZjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIFRpbGdpbiAqLworCXsgVVNCX0RFVklDRSgweDY5MzMsIDB4NTAwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUGhpbGlwcyAqLwogCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MjAwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUGxhbmV4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCA0NmUxNDA1Li5jODAxNmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01MCw4ICs1MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDgwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpAQCAtMjY3LDYgKzI2NywxOSBAQAogICogTUFDX0NTUjEzOiBHUElPLgogICovCiAjZGVmaW5lIE1BQ19DU1IxMwkJCTB4MzAzNAorI2RlZmluZSBNQUNfQ1NSMTNfQklUMAkJCUZJRUxEMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEJCQlGSUVMRDMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQyCQkJRklFTEQzMigweDAwMDAwMDA0KQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMwkJCUZJRUxEMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDQJCQlGSUVMRDMyKDB4MDAwMDAwMTApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ1CQkJRklFTEQzMigweDAwMDAwMDIwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNgkJCUZJRUxEMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDcJCQlGSUVMRDMyKDB4MDAwMDAwODApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ4CQkJRklFTEQzMigweDAwMDAwMTAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUOQkJCUZJRUxEMzIoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEwCQkJRklFTEQzMigweDAwMDAwNDAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMTEJCQlGSUVMRDMyKDB4MDAwMDA4MDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxMgkJCUZJRUxEMzIoMHgwMDAwMTAwMCkKIAogLyoKICAqIE1BQ19DU1IxNDogTEVEIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCmluZGV4IDNiMWUxYzIuLjk3MThmNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCkBAIC0xMDAsNiArMTAwLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAl1MzIgcnhfY29uZjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBhbmNob3JlZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwogCXUxNiB0eHB3cl9iYXNlOwogCXU4IGFzaWNfcmV2OwogCXU4IGlzX3J0bDgxODdiOwpAQCAtMTE3LDcgKzExOSw3IEBACiAJc3RydWN0IHsKIAkJX19sZTY0IGJ1ZjsKIAkJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKLQl9IGJfdHhfc3RhdHVzOworCX0gYl90eF9zdGF0dXM7IC8qIFRoaXMgcXVldWUgaXMgdXNlZCBieSBib3RoIC1iIGFuZCBub24tYiBkZXZpY2VzICovCiB9OwogCiB2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCmluZGV4IGY0NzQ3YTEuLmZkODE4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKQEAgLTE4OSwyNSArMTg5LDMzIEBACiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3X3R4X2hkcikpOwogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKIAotCWlmICghdXJiLT5zdGF0dXMgJiYKLQkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgotCSAgICBwcml2LT5pc19ydGw4MTg3YikgewotCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CisJaWYgKCEodXJiLT5zdGF0dXMpICYmICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKKwkJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CisJCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CiAKLQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KLQkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSA+IDUpIHsKLQkJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOworCQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KKwkJCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7CiAKLQkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKLQkJCQkidHJhbnNtaXQgc3RhdHVzIHF1ZXVlIGZ1bGxcbiIpOworCQkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKKwkJCQkJInRyYW5zbWl0IHN0YXR1cyBxdWV1ZSBmdWxsXG4iKTsKIAotCQkJb2xkX3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7Ci0JCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYgIXVyYi0+c3RhdHVzKQorCQkJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgb2xkX3NrYik7CisJCQl9CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCX0KKwl9CisJaWYgKHByaXYtPmlzX3J0bDgxODdiKQogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisJZWxzZSB7CisJCS8qIFJldHJ5IGluZm9ybWF0aW9uIGZvciB0aGUgUlRJODE4NyBpcyBvbmx5IGF2YWlsYWJsZSBieQorCQkgKiByZWFkaW5nIGEgcmVnaXN0ZXIgaW4gdGhlIGRldmljZS4gV2UgYXJlIGluIGludGVycnVwdCBtb2RlCisJCSAqIGhlcmUsIHRodXMgcXVldWUgdGhlIHNrYiBhbmQgZmluaXNoIG9uIGEgd29yayBxdWV1ZS4gKi8KKwkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwogCX0KIH0KIApAQCAtNDAzLDcgKzQxMSw3IEBACiAJc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqaW5mbzsKIAlpbnQgcmV0ID0gMDsKIAotCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9xdWV1ZSkgPCA4KSB7CisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDE2KSB7CiAJCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihSVEw4MTg3X01BWF9SWCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNjU3LDcgKzY2NSw3IEBACiAKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5JTlRfVElNRU9VVCwgMCk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5XUEFfQ09ORiwgMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCAweDgxKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIDApOwogCiAJLy8gVE9ETzogc2V0IFJFU1BfUkFURSBhbmQgQlJTUiBwcm9wZXJseQogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkVTUF9SQVRFLCAoOCA8PCA0KSB8IDApOwpAQCAtNzc3LDkgKzc4NSw2IEBACiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMLCByZWcpOwogCiAJcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIChfX2xlMTYgKikweEZGRTAsIDB4MEZGRiwgMSk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0spOwotCXJlZyB8PSBSVEw4MThYX1JBVEVfRkFMTEJBQ0tfRU5BQkxFOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgcmVnKTsKIAogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJFQUNPTl9JTlRFUlZBTCwgMTAwKTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5BVElNX1dORCwgMik7CkBAIC04NjcsNiArODcyLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxODdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJLyogVGhlIFJUTDgxODcgcmV0dXJucyB0aGUgcmV0cnkgY291bnQgdGhyb3VnaCByZWdpc3RlciAweEZGRkEuIEluCisJICogYWRkaXRpb24sIGl0IGFwcGVhcnMgdG8gYmUgYSBjdW11bGF0aXZlIHJldHJ5IGNvdW50LCBub3QgdGhlCisJICogdmFsdWUgZm9yIHRoZSBjdXJyZW50IFRYIHBhY2tldC4gV2hlbiBtdWx0aXBsZSBUWCBlbnRyaWVzIGFyZQorCSAqIHF1ZXVlZCwgdGhlIHJldHJ5IGNvdW50IHdpbGwgYmUgdmFsaWQgZm9yIHRoZSBsYXN0IG9uZSBpbiB0aGUgcXVldWUuCisJICogVGhlICJlcnJvciIgc2hvdWxkIG5vdCBtYXR0ZXIgZm9yIHB1cnBvc2VzIG9mIHJhdGUgc2V0dGluZy4gKi8KKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTg3X3ByaXYsCisJCQkJICAgIHdvcmsud29yayk7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHByaXYtPmRldjsKKwlzdGF0aWMgdTE2IHJldHJ5OworCXUxNiB0bXA7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwl0bXAgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsIChfX2xlMTYgKikweEZGRkEpOworCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiAwKSB7CisJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOworCisJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihvbGRfc2tiKTsKKwkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdG1wIC0gcmV0cnkgKyAxOworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LCBvbGRfc2tiKTsKKwl9CisJcmV0cnkgPSB0bXA7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKwogc3RhdGljIGludCBydGw4MTg3X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtODgxLDYgKzkxNCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAKIAlpbml0X3VzYl9hbmNob3IoJnByaXYtPmFuY2hvcmVkKTsKKwlwcml2LT5kZXYgPSBkZXY7CiAKIAlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKIAkJcmVnID0gUlRMODE4WF9SWF9DT05GX01HTVQgfApAQCAtOTQ4LDYgKzk4Miw3IEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKIAlyZWcgfD0gUlRMODE4WF9DTURfUlhfRU5BQkxFOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBydGw4MTg3X3dvcmspOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTk3OCw2ICsxMDEzLDggQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnByaXYtPmFuY2hvcmVkKTsKKwlpZiAoIXByaXYtPmlzX3J0bDgxODdiKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiB9CiAKQEAgLTk4NiwxOSArMTAyMywyMSBAQAogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGk7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CiAKIAlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWdvdG8gZXhpdDsKIAl9CiAKLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXQgPSAwOwogCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKIAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CkBAIC0xMDA3LDggKzEwNDYsOSBAQAogCQkJCSAoKHU4ICopY29uZi0+bWFjX2FkZHIpW2ldKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCitleGl0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4N19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCmluZGV4IDcwMTVmMjQuLmY5NTIwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwpAQCAtOTUwLDYgKzk1MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpzdHJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoUkNVKQogewogCXJjdV9yZWFkX2xvY2soKTsKIAlyZXR1cm4gKnBvcyA/IHN0cmlwX2dldF9pZHgoKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOwpAQCAtOTczLDYgKzk3NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHN0cmlwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMTEyNSw3ICsxMTI3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0cmlwX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0cmlwX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gc3RyaXBfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IHN0cmlwX3NlcV9uZXh0LAogCS5zdG9wICA9IHN0cmlwX3NlcV9zdG9wLApAQCAtMjQ3NSw2ICsyNDc3LDE2IEBACiAJLnJlYnVpbGQgPSBzdHJpcF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdHJpcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJPSBzdHJpcF9vcGVuX2xvdywKKwkubmRvX3N0b3AgCT0gc3RyaXBfY2xvc2VfbG93LAorCS5uZG9fc3RhcnRfeG1pdCA9IHN0cmlwX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBzdHJpcF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19nZXRfc3RhdHMJPSBzdHJpcF9nZXRfc3RhdHMsCisJLm5kb19jaGFuZ2VfbXR1ID0gc3RyaXBfY2hhbmdlX210dSwKK307CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IERESSB3aGVuIHRoZQogICogKGR5bmFtaWNhbGx5IGFzc2lnbmVkKSBkZXZpY2UgaXMgcmVnaXN0ZXJlZApAQCAtMjUwMSwxOCArMjUxMyw4IEBACiAJZGV2LT5kZXZfYWRkclswXSA9IDA7CiAJZGV2LT5hZGRyX2xlbiA9IHNpemVvZihNZXRyaWNvbUFkZHJlc3MpOwogCi0JLyoKLQkgKiBQb2ludGVycyB0byBpbnRlcmZhY2Ugc2VydmljZSByb3V0aW5lcy4KLQkgKi8KLQotCWRldi0+b3BlbiA9IHN0cmlwX29wZW5fbG93OwotCWRldi0+c3RvcCA9IHN0cmlwX2Nsb3NlX2xvdzsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN0cmlwX3htaXQ7Ci0JZGV2LT5oZWFkZXJfb3BzID0gJnN0cmlwX2hlYWRlcl9vcHM7Ci0KLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHN0cmlwX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cyA9IHN0cmlwX2dldF9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBzdHJpcF9jaGFuZ2VfbXR1OworCWRldi0+aGVhZGVyX29wcyA9ICZzdHJpcF9oZWFkZXJfb3BzLAorCWRldi0+bmV0ZGV2X29wcyA9ICZzdHJpcF9uZXRkZXZfb3BzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCmluZGV4IDgzMjY3OTMuLjNhYjNlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKQEAgLTQwLDExICs0MCwxMSBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCB3dl9wc2FfdG9faXJxKHU4IGlycXZhbCkKIHsKLQlpbnQgaXJxOworCWludCBpOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpcnErKykKLQkJaWYgKGlycXZhbHNbaXJxXSA9PSBpcnF2YWwpCi0JCQlyZXR1cm4gaXJxOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpKyspCisJCWlmIChpcnF2YWxzW2ldID09IGlycXZhbCkKKwkJCXJldHVybiBpOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtNzM1LDkgKzczNSw5IEBACiAJCWlmICh0eF9zdGF0dXMgJiBBQ19TRkxEX09LKSB7CiAJCQlpbnQgbmNvbGxpc2lvbnM7CiAKLQkJCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCW5jb2xsaXNpb25zID0gdHhfc3RhdHVzICYgQUNfU0ZMRF9NQVhDT0w7Ci0JCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPSBuY29sbGlzaW9uczsKKwkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBuY29sbGlzaW9uczsKICNpZmRlZiBERUJVR19UWF9JTkZPCiAJCQlpZiAobmNvbGxpc2lvbnMgPiAwKQogCQkJCXByaW50ayhLRVJOX0RFQlVHCkBAIC03NDUsOSArNzQ1LDkgQEAKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBuY29sbGlzaW9ucyk7CiAjZW5kaWYKIAkJfSBlbHNlIHsKLQkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TMTApIHsKLQkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfY29tcGxldGUoKTogdHggZXJyb3I6IG5vIENTLlxuIiwKQEAgLTc1NSw3ICs3NTUsNyBAQAogI2VuZGlmCiAJCQl9CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TOSkgewotCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9jb21wbGV0ZSgpOiB0eCBlcnJvcjogbG9zdCBDVFMuXG4iLApAQCAtNzYzLDcgKzc2Myw3IEBACiAjZW5kaWYKIAkJCX0KIAkJCWlmICh0eF9zdGF0dXMgJiBBQ19TRkxEX1M4KSB7Ci0JCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X2NvbXBsZXRlKCk6IHR4IGVycm9yOiBzbG93IERNQS5cbiIsCkBAIC03NzEsNyArNzcxLDcgQEAKICNlbmRpZgogCQkJfQogCQkJaWYgKHR4X3N0YXR1cyAmIEFDX1NGTERfUzYpIHsKLQkJCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X2NvbXBsZXRlKCk6IHR4IGVycm9yOiBoZWFydCBiZWF0LlxuIiwKQEAgLTc3OSw3ICs3NzksNyBAQAogI2VuZGlmCiAJCQl9CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TNSkgewotCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9jb21wbGV0ZSgpOiB0eCBlcnJvcjogdG9vIG1hbnkgY29sbGlzaW9ucy5cbiIsCkBAIC0xMzQ2LDIwICsxMzQ2LDYgQEAKICAqIG9yIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogR2V0IHRoZSBjdXJyZW50IEV0aGVybmV0IHN0YXRpc3RpY3MuIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotICogY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqIFVzZWQgd2hlbiB0aGUgdXNlciByZWFkIC9wcm9jL25ldC9kZXYKLSAqLwotc3RhdGljIGVuX3N0YXRzICp3YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLSNpZmRlZiBERUJVR19JT0NUTF9UUkFDRQotCXByaW50ayhLRVJOX0RFQlVHICIlczogPD53YXZlbGFuX2dldF9zdGF0cygpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0KLQlyZXR1cm4gJigobmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgpAQCAtMjQ2Niw3ICsyNDUyLDcgQEAKIAkJICAgICAgICIlczogd3ZfcGFja2V0X3JlYWQoKTogY291bGQgbm90IGFsbG9jX3NrYiglZCwgR0ZQX0FUT01JQykuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBza3NpemUpOwogI2VuZGlmCi0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTI2LDggKzI1MTIsOCBAQAogCW5ldGlmX3J4KHNrYik7CiAKIAkvKiBLZWVwIHN0YXRpc3RpY3MgdXAgdG8gZGF0ZSAqLwotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKIAogI2lmZGVmIERFQlVHX1JYX1RSQUNFCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LXd2X3BhY2tldF9yZWFkKClcbiIsIGRldi0+bmFtZSk7CkBAIC0yNjA4LDcgKzI1OTQsNyBAQAogI2VuZGlmCiAJCX0gZWxzZSB7CS8qIElmIHJlY2VwdGlvbiB3YXMgbm8gc3VjY2Vzc2Z1bCAqLwogCi0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAjaWZkZWYgREVCVUdfUlhfSU5GTwogCQkJcHJpbnRrKEtFUk5fREVCVUcKQEAgLTI2MjQsNyArMjYxMCw3IEBACiAjZW5kaWYKIAogCQkJaWYgKChmZC5mZF9zdGF0dXMgJiBGRF9TVEFUVVNfUzcpICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogZnJhbWUgdG9vIHNob3J0LlxuIiwKQEAgLTI2MzMsNyArMjYxOSw3IEBACiAJCQl9CiAKIAkJCWlmICgoZmQuZmRfc3RhdHVzICYgRkRfU1RBVFVTX1M4KSAhPSAwKSB7Ci0JCQkJbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogcnggRE1BIG92ZXJydW4uXG4iLApAQCAtMjY0Miw3ICsyNjI4LDcgQEAKIAkJCX0KIAogCQkJaWYgKChmZC5mZF9zdGF0dXMgJiBGRF9TVEFUVVNfUzkpICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfUlhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfcmVjZWl2ZSgpOiByYW4gb3V0IG9mIHJlc291cmNlcy5cbiIsCkBAIC0yNjUxLDcgKzI2MzcsNyBAQAogCQkJfQogCiAJCQlpZiAoKGZkLmZkX3N0YXR1cyAmIEZEX1NUQVRVU19TMTApICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9yZWNlaXZlKCk6IGFsaWdubWVudCBlcnJvci5cbiIsCkBAIC0yNjYwLDcgKzI2NDYsNyBAQAogCQkJfQogCiAJCQlpZiAoKGZkLmZkX3N0YXR1cyAmIEZEX1NUQVRVU19TMTEpICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogQ1JDIGVycm9yLlxuIiwKQEAgLTI4MjYsNyArMjgxMiw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBLZWVwIHN0YXRzIHVwIHRvIGRhdGUuICovCi0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKIAogCWlmIChscC0+dHhfZmlyc3RfaW5fdXNlID09IEk4MjU4Nk5VTEwpCiAJCWxwLT50eF9maXJzdF9pbl91c2UgPSB0eGJsb2NrOwpAQCAtNDAzOCw2ICs0MDI0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2F2ZWxhbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gd2F2ZWxhbl9vcGVuLAorCS5uZG9fc3RvcCAJCT0gd2F2ZWxhbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gd2F2ZWxhbl9wYWNrZXRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHdhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0LAorICAgICAgICAubmRvX3R4X3RpbWVvdXQJCT0gd2F2ZWxhbl93YXRjaGRvZywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgU0VUX01BQ19BRERSRVNTCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB3YXZlbGFuX3NldF9tYWNfYWRkcmVzcworI2Vsc2UKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisjZW5kaWYKK307CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFByb2JlIGFuIEkvTyBhZGRyZXNzLCBhbmQgaWYgdGhlIFdhdmVMQU4gaXMgdGhlcmUgY29uZmlndXJlIHRoZQpAQCAtNDEzMCwxNyArNDEzMiw4IEBACiAJLyogSW5pdCBzcGlubG9jayAqLwogCXNwaW5fbG9ja19pbml0KCZscC0+c3BpbmxvY2spOwogCi0JZGV2LT5vcGVuID0gd2F2ZWxhbl9vcGVuOwotCWRldi0+c3RvcCA9IHdhdmVsYW5fY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB3YXZlbGFuX3BhY2tldF94bWl0OwotCWRldi0+Z2V0X3N0YXRzID0gd2F2ZWxhbl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0gICAgICAgIGRldi0+dHhfdGltZW91dAkJPSAmd2F2ZWxhbl93YXRjaGRvZzsKLSAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IFdBVENIRE9HX0pJRkZJRVM7Ci0jaWZkZWYgU0VUX01BQ19BRERSRVNTCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYJCQkJLyogU0VUX01BQ19BRERSRVNTICovCi0KKwlkZXYtPm5ldGRldl9vcHMgPSAmd2F2ZWxhbl9uZXRkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBXQVRDSERPR19KSUZGSUVTOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmd2F2ZWxhbl9oYW5kbGVyX2RlZjsKIAlscC0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZscC0+c3B5X2RhdGE7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJmxwLT53aXJlbGVzc19kYXRhOwpAQCAtNDI4MSw4ICs0Mjc0LDcgQEAKIAogCiAJLyogTG9vcCBvbiBhbGwgcG9zc2libGUgYmFzZSBhZGRyZXNzZXMuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaW9bKytpXSAhPSAwKSAmJiAoaSA8IEFSUkFZX1NJWkUoaW8pKSkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlvKSAmJiBpb1tpXSAhPSAwOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihuZXRfbG9jYWwpKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKaW5kZXggNDRkMzFiYi4uMmRhYTAyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKQEAgLTQ1OSwxMSArNDU5LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTaG9ydGN1dHMgKi8KLXR5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJZW5fc3RhdHM7CiB0eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzCWl3X3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfcXVhbGl0eQlpd19xdWFsOwotdHlwZWRlZiBzdHJ1Y3QgaXdfZnJlcQkJaXdfZnJlcTsKLXR5cGVkZWYgc3RydWN0IG5ldF9sb2NhbAluZXRfbG9jYWw7Cit0eXBlZGVmIHN0cnVjdCBpd19mcmVxCQlpd19mcmVxO3R5cGVkZWYgc3RydWN0IG5ldF9sb2NhbAluZXRfbG9jYWw7CiB0eXBlZGVmIHN0cnVjdCB0aW1lcl9saXN0CXRpbWVyX2xpc3Q7CiAKIC8qIEJhc2ljIHR5cGVzICovCkBAIC00NzUsMTUgKzQ3MywxMiBAQAogICogRm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UsIExpbnV4IGtlZXBzIGRhdGEgaW4gdHdvIHN0cnVjdHVyZXM6ICAiZGV2aWNlIgogICoga2VlcHMgdGhlIGdlbmVyaWMgZGF0YSAoc2FtZSBmb3JtYXQgZm9yIGV2ZXJ5Ym9keSkgYW5kICJuZXRfbG9jYWwiIGtlZXBzCiAgKiBhZGRpdGlvbmFsIHNwZWNpZmljIGRhdGEuCi0gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEgaXMgaW4gZmFjdCBnZW5lcmljIChlbl9zdGF0cywgZm9yCi0gKiBleGFtcGxlKS4KICAqLwogc3RydWN0IG5ldF9sb2NhbAogewogICBuZXRfbG9jYWwgKgluZXh0OwkJLyogbGlua2VkIGxpc3Qgb2YgdGhlIGRldmljZXMgKi8KICAgc3RydWN0IG5ldF9kZXZpY2UgKglkZXY7CQkvKiByZXZlcnNlIGxpbmsgKi8KICAgc3BpbmxvY2tfdAlzcGlubG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgKFNNUCkgKi8KLSAgZW5fc3RhdHMJc3RhdHM7CQkvKiBFdGhlcm5ldCBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwogICBpbnQJCW5yZXNldHM7CS8qIG51bWJlciBvZiBoYXJkd2FyZSByZXNldHMgKi8KICAgdV9jaGFyCXJlY29uZmlnXzgyNTg2OwkvKiBXZSBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVyLiAqLwogICB1X2NoYXIJcHJvbWlzY3VvdXM7CS8qIHByb21pc2N1b3VzIG1vZGUgKi8KQEAgLTYwMSw4ICs1OTYsNiBAQAogc3RhdGljIGlubGluZSB2b2lkCiAJd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBkaXNwbGF5IHN0YXJ0dXAgaW5mbyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCwgU1RBVFMgJiBSRUNPTkZJRyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgZW5fc3RhdHMJKgotCXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBHaXZlIHN0YXRzIC9wcm9jL25ldC9kZXYgKi8KIHN0YXRpYyBpd19zdGF0cyAqCiAJd2F2ZWxhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IGRlNzE3ZjguLmU1NWIzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTgzOCw5ICs4MzgsOCBAQAogICAgIH0KICAgd2hpbGUoKChzdGF0dXMgJiBTUjNfRVhFQ19TVEFURV9NQVNLKSAhPSBTUjNfRVhFQ19JRExFKSAmJiAoc3Bpbi0tID4gMCkpOwogCi0gIC8qIElmIHRoZSBpbnRlcnJ1cHQgaGFzbid0IGJlIHBvc3RlZCAqLwotICBpZihzcGluIDw9IDApCi0gICAgeworICAvKiBJZiB0aGUgaW50ZXJydXB0IGhhc24ndCBiZWVuIHBvc3RlZCAqLworICBpZiAoc3BpbiA8IDApIHsKICNpZmRlZiBERUJVR19JTlRFUlJVUFRfRVJST1IKICAgICAgIHByaW50ayhLRVJOX0lORk8gInd2XzgyNTkzX2NtZDogJXMgdGltZW91dCAocHJldmlvdXMgY29tbWFuZCksIHN0YXR1cyAweCUwMnhcbiIsCiAJICAgICBzdHIsIHN0YXR1cyk7CkBAIC0xMzUzLDIxICsxMzUyLDYgQEAKICAqIG9yIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogR2V0IHRoZSBjdXJyZW50IGV0aGVybmV0IHN0YXRpc3RpY3MuIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotICogY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqIFVzZWQgd2hlbiB0aGUgdXNlciByZWFkIC9wcm9jL25ldC9kZXYKLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQotewotI2lmZGVmIERFQlVHX0lPQ1RMX1RSQUNFCi0gIHByaW50ayhLRVJOX0RFQlVHICIlczogPD53YXZlbGFuX2dldF9zdGF0cygpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0KLSAgcmV0dXJuKCYoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0cyk7Ci19CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0yODE4LDcgKzI4MDIsNyBAQAogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHd2X3BhY2tldF9yZWFkKCk6IGNvdWxkIG5vdCBhbGxvY19za2IoJWQsIEdGUF9BVE9NSUMpXG4iLAogCSAgICAgZGV2LT5uYW1lLCBza3NpemUpOwogI2VuZGlmCi0gICAgICBscC0+c3RhdHMucnhfZHJvcHBlZCsrOworICAgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAvKgogICAgICAgICogTm90IG9ubHkgZG8gd2Ugd2FudCB0byByZXR1cm4gaGVyZSwgYnV0IHdlIGFsc28gbmVlZCB0byBkcm9wIHRoZQogICAgICAgICogcGFja2V0IG9uIHRoZSBmbG9vciB0byBjbGVhciB0aGUgaW50ZXJydXB0LgpAQCAtMjg3OCw4ICsyODYyLDggQEAKICAgbmV0aWZfcngoc2tiKTsKIAogICAvKiBLZWVwIHN0YXRzIHVwIHRvIGRhdGUgKi8KLSAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKKyAgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisgIGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tzaXplOwogCiAjaWZkZWYgREVCVUdfUlhfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LXd2X3BhY2tldF9yZWFkKClcbiIsIGRldi0+bmFtZSk7CkBAIC0yOTgxLDEzICsyOTY1LDEzIEBACiAgICAgICAvKiBDaGVjayBzdGF0dXMgKi8KICAgICAgIGlmKChzdGF0dXMgJiBSWF9SQ1ZfT0spICE9IFJYX1JDVl9PSykKIAl7Ci0JICBscC0+c3RhdHMucnhfZXJyb3JzKys7CisJICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCSAgaWYoc3RhdHVzICYgUlhfTk9fU0ZEKQotCSAgICBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJICBpZihzdGF0dXMgJiBSWF9DUkNfRVJSKQotCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkgIGlmKHN0YXR1cyAmIFJYX09WUlJVTikKLQkgICAgbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfcGFja2V0X3JjdigpOiBwYWNrZXQgbm90IHJlY2VpdmVkIG9rLCBzdGF0dXMgPSAweCV4XG4iLApAQCAtMzA3NCw3ICszMDU4LDcgQEAKICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKICAgLyogS2VlcCBzdGF0cyB1cCB0byBkYXRlICovCi0gIGxwLT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CisgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuZ3RoOwogCiAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5zcGlubG9jaywgZmxhZ3MpOwogCkBAIC00MTA3LDcgKzQwOTEsNyBAQAogCSAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB3dl9pbnRlcnJ1cHQoKTogcmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3dcbiIsCiAJCSAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgotCSAgICAgIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICAgIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkgICAgICBscC0+b3ZlcnJ1bm5pbmcgPSAxOwogICAgICAgCSAgICB9CiAKQEAgLTQxNTYsNyArNDE0MCw3IEBACiAJICAvKiBDaGVjayBmb3IgcG9zc2libGUgZXJyb3JzICovCiAJICBpZigodHhfc3RhdHVzICYgVFhfT0spICE9IFRYX09LKQogCSAgICB7Ci0JICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCSAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9GUlRMKQogCQl7CkBAIC00MTcxLDE0ICs0MTU1LDE0IEBACiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogRE1BIHVuZGVycnVuXG4iLAogCQkJIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9MT1NUX0NUUykKIAkJewogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBubyBDVFNcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9MT1NUX0NSUykKIAkJewpAQCAtNDE4NiwxNCArNDE3MCwxNCBAQAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IG5vIGNhcnJpZXJcbiIsCiAJCQkgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0hSVF9CRUFUKQogCQl7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IGhlYXJ0IGJlYXRcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfREVGRVIpCiAJCXsKQEAgLTQyMTcsMTQgKzQyMDEsMTQgQEAKICNlbmRpZgogCQkgICAgICBpZighKHR4X3N0YXR1cyAmIFRYX05DT0xfTUFTSykpCiAJCQl7Ci0JCQkgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9IDB4MTA7CisJCQkgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAweDEwOwogCQkJfQogCQkgICAgfQogCQl9CiAJICAgIH0JLyogaWYoISh0eF9zdGF0dXMgJiBUWF9PSykpICovCiAKLQkgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgJiBUWF9OQ09MX01BU0spOwotCSAgbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhfc3RhdHVzICYgVFhfTkNPTF9NQVNLKTsKKwkgIGRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJICBvdXRiKENSMF9JTlRfQUNLIHwgT1AwX05PUCwgTENDUihiYXNlKSk7CS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KQEAgLTQ0NTIsNiArNDQzNiwxOSBAQAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3YXZlbGFuX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSB3YXZlbGFuX29wZW4sCisJLm5kb19zdG9wCQk9IHdhdmVsYW5fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdhdmVsYW5fcGFja2V0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdCwKKyNpZmRlZiBTRVRfTUFDX0FERFJFU1MKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHdhdmVsYW5fc2V0X21hY19hZGRyZXNzLAorI2VuZGlmCisJLm5kb190eF90aW1lb3V0CQk9IHdhdmVsYW5fd2F0Y2hkb2csCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIHdhdmVsYW5fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKQEAgLTQ1MTIsMTcgKzQ1MDksNyBAQAogICBscC0+ZGV2ID0gZGV2OwogCiAgIC8qIHdhdmVsYW4gTkVUMyBjYWxsYmFja3MgKi8KLSAgZGV2LT5vcGVuID0gJndhdmVsYW5fb3BlbjsKLSAgZGV2LT5zdG9wID0gJndhdmVsYW5fY2xvc2U7Ci0gIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJndhdmVsYW5fcGFja2V0X3htaXQ7Ci0gIGRldi0+Z2V0X3N0YXRzID0gJndhdmVsYW5fZ2V0X3N0YXRzOwotICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdDsKLSNpZmRlZiBTRVRfTUFDX0FERFJFU1MKLSAgZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYJLyogU0VUX01BQ19BRERSRVNTICovCi0KLSAgLyogU2V0IHRoZSB3YXRjaGRvZyB0aW1lciAqLwotICBkZXYtPnR4X3RpbWVvdXQJPSAmd2F2ZWxhbl93YXRjaGRvZzsKKyAgZGV2LT5uZXRkZXZfb3BzID0gJndhdmVsYW5fbmV0ZGV2X29wczsKICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IFdBVENIRE9HX0pJRkZJRVM7CiAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCmluZGV4IDYyODE5MmQuLjcwNmZkMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaApAQCAtNTc2LDcgKzU3Niw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogU2hvcnRjdXRzICovCi10eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCWVuX3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3F1YWxpdHkJaXdfcXVhbDsKIHR5cGVkZWYgc3RydWN0IGl3X2ZyZXEJCWl3X2ZyZXE7CkBAIC01OTIsOCArNTkxLDYgQEAKICAqIEZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLCBMaW51eCBrZWVwIGRhdGEgaW4gdHdvIHN0cnVjdHVyZS4gImRldmljZSIKICAqIGtlZXAgdGhlIGdlbmVyaWMgZGF0YSAoc2FtZSBmb3JtYXQgZm9yIGV2ZXJ5Ym9keSkgYW5kICJuZXRfbG9jYWwiIGtlZXAKICAqIHRoZSBhZGRpdGlvbmFsIHNwZWNpZmljIGRhdGEuCi0gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEgaXMgaW4gZmFjdCBnZW5lcmljIChlbl9zdGF0cywgZm9yCi0gKiBleGFtcGxlKS4KICAqLwogc3RydWN0IG5ldF9sb2NhbAogewpAQCAtNjAxLDcgKzU5OCw2IEBACiAgIHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2OwkJLyogUmV2ZXJzZSBsaW5rLi4uICovCiAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCiAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluazsJCS8qIHBjbWNpYSBzdHJ1Y3R1cmUgKi8KLSAgZW5fc3RhdHMJc3RhdHM7CQkvKiBFdGhlcm5ldCBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwogICBpbnQJCW5yZXNldHM7CS8qIE51bWJlciBvZiBodyByZXNldHMgKi8KICAgdV9jaGFyCWNvbmZpZ3VyZWQ7CS8qIElmIGl0IGlzIGNvbmZpZ3VyZWQgKi8KICAgdV9jaGFyCXJlY29uZmlnXzgyNTkzOwkvKiBOZWVkIHRvIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVyICovCkBAIC02OTQsOCArNjkwLDYgQEAKIHN0YXRpYyB2b2lkCiAJd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBkaXNwbGF5IHN0YXJ0dXAgaW5mbyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCwgU1RBVFMgJiBSRUNPTkZJRyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgZW5fc3RhdHMJKgotCXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBHaXZlIHN0YXRzIC9wcm9jL25ldC9kZXYgKi8KIHN0YXRpYyBpd19zdGF0cyAqCiAJd2F2ZWxhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQQUNLRVQgUkVDRVBUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCmluZGV4IDU5YmIzYTUuLjhiY2UxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCkBAIC02MDYsNyArNjA2LDcgQEAKIAl1OAkJCQlyZWdfZG9tYWluOwogCXU4CQkJCXZlcnNpb25bMl07CiAJc3RydWN0IHdsMzUwMV9zY2FuX2NvbmZpcm0JYnNzX3NldFsyMF07Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgCXN0YXRzOworCiAJc3RydWN0IGl3X3N0YXRpc3RpY3MJCXdzdGF0czsKIAlzdHJ1Y3QgaXdfc3B5X2RhdGEJCXNweV9kYXRhOwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQkJd2lyZWxlc3NfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggYzk5YTFiNi4uMWY2NGQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKQEAgLTExMSwxMiArMTEyLDYgQEAKICAqLwogc3RhdGljIGRldl9pbmZvX3Qgd2wzNTAxX2Rldl9pbmZvID0gIndsMzUwMV9jcyI7CiAKLXN0YXRpYyBpbnQgd2wzNTAxX2NoYW4yZnJlcVtdID0gewotCVswXSAgPSAyNDEyLCBbMV0gID0gMjQxNywgWzJdICA9IDI0MjIsIFszXSAgPSAyNDI3LCBbNF0gPSAyNDMyLAotCVs1XSAgPSAyNDM3LCBbNl0gID0gMjQ0MiwgWzddICA9IDI0NDcsIFs4XSAgPSAyNDUyLCBbOV0gPSAyNDU3LAotCVsxMF0gPSAyNDYyLCBbMTFdID0gMjQ2NywgWzEyXSA9IDI0NzIsIFsxM10gPSAyNDc3LAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CiAJaW50IG1pbiwgbWF4LCBkZWZsdDsKQEAgLTEwMDUsNyArMTAwMCw3IEBACiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCXRoaXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJfSBlbHNlIHsKIAkJc2tiLT5kZXYgPSBkZXY7CiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIElQIGhlYWRlcnMgb24gMTYgYnl0ZXMgYm91bmRhcmllcyAqLwpAQCAtMTAxMyw4ICsxMDA4LDggQEAKIAkJd2wzNTAxX3JlY2VpdmUodGhpcywgc2tiLT5kYXRhLCBwa3RfbGVuKTsKIAkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwogCQlza2ItPnByb3RvY29sCT0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQl0aGlzLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXRoaXMtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiB9CkBAIC0xMzE2LDcgKzEzMTEsNyBAQAogc3RhdGljIHZvaWQgd2wzNTAxX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0aGlzLT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIApAQCAtMTM1MSwxMSArMTM0NiwxMSBAQAogCWlmIChlbmFibGVkKQogCQl3bDM1MDFfdW5ibG9ja19pbnRlcnJ1cHQodGhpcyk7CiAJaWYgKHJjKSB7Ci0JCSsrdGhpcy0+c3RhdHMudHhfZHJvcHBlZDsKKwkJKytkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9IGVsc2UgewotCQkrK3RoaXMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCXRoaXMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJa2ZyZWVfc2tiKHNrYik7CiAKIAkJaWYgKHRoaXMtPnR4X2J1ZmZlcl9jbnQgPCAyKQpAQCAtMTQwNSwxMyArMTQwMCw2IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqd2wzNTAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnRoaXMtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKndsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTUxMCw3ICsxNDk4LDcgQEAKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jd3JxdS0+ZnJlcS5tID0gd2wzNTAxX2NoYW4yZnJlcVt0aGlzLT5jaGFuIC0gMV0gKiAxMDAwMDA7CisJd3JxdS0+ZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKHRoaXMtPmNoYW4pICogMTAwMDAwOwogCXdycXUtPmZyZXEuZSA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODk1LDYgKzE4ODMsMTYgQEAKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gd2wzNTAxX2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2wzNTAxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHdsMzUwMV9vcGVuLAorCS5uZG9fc3RvcAkJPSB3bDM1MDFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdsMzUwMV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHdsMzUwMV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIHdsMzUwMV9hdHRhY2ggLSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlcgogICoKQEAgLTE5MjcsMTcgKzE5MjUsMTYgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHdsMzUwMV9jYXJkKSk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0X2xpbms7Ci0JZGV2LT5vcGVuCQk9IHdsMzUwMV9vcGVuOwotCWRldi0+c3RvcAkJPSB3bDM1MDFfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSB3bDM1MDFfaGFyZF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJPSB3bDM1MDFfdHhfdGltZW91dDsKKworCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZ3bDM1MDFfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gNSAqIEhaOwotCWRldi0+Z2V0X3N0YXRzCQk9IHdsMzUwMV9nZXRfc3RhdHM7CisKIAl0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0aGlzLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnRoaXMtPnNweV9kYXRhOwogCXRoaXMtPnBfZGV2ID0gcF9kZXY7CiAJZGV2LT53aXJlbGVzc19kYXRhCT0gJnRoaXMtPndpcmVsZXNzX2RhdGE7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycwk9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmd2wzNTAxX2hhbmRsZXJfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMJPSAmd2wzNTAxX2hhbmRsZXJfZGVmOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlwX2Rldi0+cHJpdiA9IHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IGI0NWMyN2QuLjliMjQ0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCkBAIC0zMjgsOCArMzI4LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMjRdLCAyKTsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOwotCQkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXpkLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXpkLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJbmV0aWZfcngoc2tiKTsKIAkJCWdvdG8gcmVzdWJtaXQ7CiAJCX0KQEAgLTM4NCw4ICszODQsOCBAQAogCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhKzgsIGxlbik7CiAJCX0KIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7Ci0JCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJemQtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQl6ZC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiByZXN1Ym1pdDoKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCXN0cnVjdCB1cmIgKnVyYiA9IHpkLT50eF91cmI7CiAKIAlpZiAoIXpkLT5tYWNfZW5hYmxlZCB8fCB6ZC0+bW9uaXRvcikgewotCQl6ZC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KQEAgLTgxNywxMiArODE3LDEyIEBACiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih6ZC0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyKSB7Ci0JCXpkLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JemQtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQl6ZC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlrZnJlZV9za2Ioc2tiKTsKIApAQCAtODM4LDcgKzgzOCw3IEBACiAJZGV2X3dhcm4oJnpkLT51c2ItPmRldiwgIiVzOiBUWCB0aW1lb3V0LCBzaG9vdGluZyBkb3duIHVyYlxuIiwKIAkgICAgZGV2LT5uYW1lKTsKIAl1c2JfdW5saW5rX3VyYih6ZC0+dHhfdXJiKTsKLQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkvKiBSZXN0YXJ0IHRoZSB0aW1lb3V0IHRvIHF1aWV0IHRoZSB3YXRjaGRvZzogKi8KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIH0KQEAgLTg2MSwxMyArODYxLDYgQEAKIAlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqemQxMjAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB6ZDEyMDEgKnpkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmemQtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKnpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05MTksMTAgKzkxMiw5IEBACiAJaWYgKGZyZXEtPmUgPT0gMCkKIAkJY2hhbm5lbCA9IGZyZXEtPm07CiAJZWxzZSB7Ci0JCWlmIChmcmVxLT5tID49IDI0ODIpCi0JCQljaGFubmVsID0gMTQ7Ci0JCWlmIChmcmVxLT5tID49IDI0MDcpCi0JCQljaGFubmVsID0gKGZyZXEtPm0tMjQwNykvNTsKKwkJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxLT5tKTsKKwkJaWYgKGNoYW5uZWwgPCAwKQorCQkJY2hhbm5lbCA9IDA7CiAJfQogCiAJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk9XTkNIQU5ORUwsIGNoYW5uZWwpOwpAQCAtMTcyNSw2ICsxNzE3LDE4IEBACiAJLmdldF93aXJlbGVzc19zdGF0cwk9IHpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpkMTIwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6ZDEyMDFfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpkMTIwMV9uZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gemQxMjAxX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gemQxMjAxX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC0xNzc3LDE2ICsxNzgxLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zdGFydDsKIAotCWRldi0+b3BlbiA9IHpkMTIwMV9uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB6ZDEyMDFfbmV0X3N0b3A7Ci0JZGV2LT5nZXRfc3RhdHMgPSB6ZDEyMDFfZ2V0X3N0YXRzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJnpkMTIwMV9pd19oYW5kbGVyczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnpkMTIwMV9uZXRkZXZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmemQxMjAxX2l3X2hhbmRsZXJzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBaRDEyMDFfVFhfVElNRU9VVDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB6ZDEyMDFfdHhfdGltZW91dDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gemQxMjAxX3NldF9tYWNfYWRkcmVzczsKIAlzdHJjcHkoZGV2LT5uYW1lLCAid2xhbiVkIik7CiAKIAllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAppbmRleCAyMzVmMGVlLi5kZDdlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaApAQCAtMjYsNyArMjYsNiBAQAogCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CiAJaW50CQkJcmVtb3ZlZDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzCWl3c3RhdHM7CiAKIAlpbnQJCQllbmRwX2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGYxNTE5MTQuLjJjODEzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTE2MTYsMyArMTYxNiwyNCBAQAogCiAJcmV0dXJuIHpkX2lvd3JpdGUzMmEoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwogfQorCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKQoreworCWludCByOworCXN0YXRpYyBjb25zdCB6ZF9hZGRyX3QgYXdfcHRfYmlfYWRkcltdID0KKwkJeyBDUl9UU0ZfTE9XX1BBUlQsIENSX1RTRl9ISUdIX1BBUlQgfTsKKwl1MzIgdmFsdWVzWzJdOworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJciA9IHpkX2lvcmVhZDMydl9sb2NrZWQoY2hpcCwgdmFsdWVzLCAoY29uc3QgemRfYWRkcl90ICopYXdfcHRfYmlfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGF3X3B0X2JpX2FkZHIpKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlpZiAocikKKwkJcmV0dXJuIDA7CisKKwl0c2YgPSB2YWx1ZXNbMV07CisJdHNmID0gKHRzZiA8PCAzMikgfCB2YWx1ZXNbMF07CisKKwlyZXR1cm4gdHNmOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IGY4YzA2MWEuLmVlNDI3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTk1MCw0ICs5NTAsNiBAQAogaW50IHpkX2NoaXBfc2V0X211bHRpY2FzdF9oYXNoKHN0cnVjdCB6ZF9jaGlwICpjaGlwLAogCSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHpkX21jX2hhc2ggKmhhc2gpOwogCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKTsKKwogI2VuZGlmIC8qIF9aRF9DSElQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKaW5kZXggNTIwMGRiNC4uNmFjNTk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKQEAgLTMzLDggKzMzLDEzIEBACiAjaWZkZWYgREVCVUcKICMgIGRlZmluZSBkZXZfZGJnX2YoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKIAkgIGRldl9wcmludGtfZihLRVJOX0RFQlVHLCBkZXYsIGZtdCwgIyMgYXJncykKKyMgIGRlZmluZSBkZXZfZGJnX2ZfbGltaXQoZGV2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgXAorCWlmIChuZXRfcmF0ZWxpbWl0KCkpIFwKKwkJZGV2X3ByaW50a19mKEtFUk5fREVCVUcsIGRldiwgZm10LCAjIyBhcmdzKTsgXAorfSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUgZGV2X2RiZ19mKGRldiwgZm10LCBhcmdzLi4uKSBkbyB7ICh2b2lkKShkZXYpOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIGRldl9kYmdfZl9saW1pdChkZXYsIGZtdCwgYXJncy4uLikgZG8geyAodm9pZCkoZGV2KTsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBERUJVRyAqLwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggODQ3MDU3ZC4uYzNhNTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTE3MCwxMCArMTcwLDEwIEBACiAJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKIAlyID0gemRfcmVnMmFscGhhMihtYWMtPnJlZ2RvbWFpbiwgYWxwaGEyKTsKLQlpZiAoIXIpCi0JCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGFscGhhMik7CisJaWYgKHIpCisJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKLQlyID0gMDsKKwlyID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgYWxwaGEyKTsKIGRpc2FibGVfaW50OgogCXpkX2NoaXBfZGlzYWJsZV9pbnQoY2hpcCk7CiBvdXQ6CkBAIC03NzIsMTMgKzc3MiwyMyBAQAogCQkJaWYgKCFiZWFjb24pCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlyID0gemRfbWFjX2NvbmZpZ19iZWFjb24oaHcsIGJlYWNvbik7Ci0JCQlpZiAociA8IDApCi0JCQkJcmV0dXJuIHI7Ci0JCQlyID0gemRfc2V0X2JlYWNvbl9pbnRlcnZhbCgmbWFjLT5jaGlwLCBCQ05fTU9ERV9JQlNTIHwKLQkJCQkJaHctPmNvbmYuYmVhY29uX2ludCk7Ci0JCQlpZiAociA8IDApCi0JCQkJcmV0dXJuIHI7CiAJCQlrZnJlZV9za2IoYmVhY29uKTsKKworCQkJaWYgKHIgPCAwKQorCQkJCXJldHVybiByOworCQl9CisKKwkJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCkgeworCQkJdTMyIGludGVydmFsOworCisJCQlpZiAoY29uZi0+ZW5hYmxlX2JlYWNvbikKKwkJCQlpbnRlcnZhbCA9IEJDTl9NT0RFX0lCU1MgfCBody0+Y29uZi5iZWFjb25faW50OworCQkJZWxzZQorCQkJCWludGVydmFsID0gMDsKKworCQkJciA9IHpkX3NldF9iZWFjb25faW50ZXJ2YWwoJm1hYy0+Y2hpcCwgaW50ZXJ2YWwpOworCQkJaWYgKHIgPCAwKQorCQkJCXJldHVybiByOwogCQl9CiAJfSBlbHNlCiAJCWFzc29jaWF0ZWQgPSBpc192YWxpZF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKTsKQEAgLTc5NywxMCArODA3LDkgQEAKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpkX21hYywgcHJvY2Vzc19pbnRyKTsKIAogCWludF9zdGF0dXMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKShtYWMtPmludHJfYnVmZmVyKzQpKTsKLQlpZiAoaW50X3N0YXR1cyAmIElOVF9DRkdfTkVYVF9CQ04pIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJJTlRfQ0ZHX05FWFRfQkNOXG4iKTsKLQl9IGVsc2UKKwlpZiAoaW50X3N0YXR1cyAmIElOVF9DRkdfTkVYVF9CQ04pCisJCWRldl9kYmdfZl9saW1pdCh6ZF9tYWNfZGV2KG1hYyksICJJTlRfQ0ZHX05FWFRfQkNOXG4iKTsKKwllbHNlCiAJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJVbnN1cHBvcnRlZCBpbnRlcnJ1cHRcbiIpOwogCiAJemRfY2hpcF9lbmFibGVfaHdpbnQoJm1hYy0+Y2hpcCk7CkBAIC05MzAsNiArOTM5LDEyIEBACiAJfQogfQogCitzdGF0aWMgdTY0IHpkX29wX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKKwlyZXR1cm4gemRfY2hpcF9nZXRfdHNmKCZtYWMtPmNoaXApOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgemRfb3BzID0gewogCS50eAkJCT0gemRfb3BfdHgsCiAJLnN0YXJ0CQkJPSB6ZF9vcF9zdGFydCwKQEAgLTk0MCw2ICs5NTUsNyBAQAogCS5jb25maWdfaW50ZXJmYWNlCT0gemRfb3BfY29uZmlnX2ludGVyZmFjZSwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHpkX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSB6ZF9vcF9ic3NfaW5mb19jaGFuZ2VkLAorCS5nZXRfdHNmCQk9IHpkX29wX2dldF90c2YsCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICp6ZF9tYWNfYWxsb2NfaHcoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC05NzEsNyArOTg3LDcgQEAKIAlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJm1hYy0+YmFuZDsKIAogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQjsKKwkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOwogCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCBjZDYxODRlLi5mNjczMjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIH0KIAogc3RhdGljIGludCBuZXRmcm9udF90eF9zbG90X2F2YWlsYWJsZShzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnApCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkJeGVubmV0X2FsbG9jX3J4X2J1ZmZlcnMoZGV2KTsKIAkJbnAtPnJ4LnNyaW5nLT5yc3BfZXZlbnQgPSBucC0+cngucnNwX2NvbnMgKyAxOwogCQlpZiAoUklOR19IQVNfVU5DT05TVU1FRF9SRVNQT05TRVMoJm5wLT5yeCkpCi0JCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCX0KIAlzcGluX3VubG9ja19iaCgmbnAtPnJ4X2xvY2spOwogCkBAIC05NzksNyArOTc5LDcgQEAKIAogCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVNQT05TRVMoJm5wLT5yeCwgbW9yZV90b19kbyk7CiAJCWlmICghbW9yZV90b19kbykKLQkJCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KQEAgLTEzMTcsNyArMTMxNyw3IEBACiAJCXhlbm5ldF90eF9idWZfZ2MoZGV2KTsKIAkJLyogVW5kZXIgdHhfbG9jazogcHJvdGVjdHMgYWNjZXNzIHRvIHJ4IHNoYXJlZC1yaW5nIGluZGV4ZXMuICovCiAJCWlmIChSSU5HX0hBU19VTkNPTlNVTUVEX1JFU1BPTlNFUygmbnAtPnJ4KSkKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPnR4X2xvY2ssIGZsYWdzKTsKQEAgLTE1MTEsNyArMTUxMSw3IEBACiBzdGF0aWMgdm9pZCB4ZW5uZXRfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogVHVybiBvZmYgYWxsIEdTTyBiaXRzIGV4Y2VwdCBST0JVU1QuICovCi0JZGV2LT5mZWF0dXJlcyAmPSAoMSA8PCBORVRJRl9GX0dTT19TSElGVCkgLSAxOworCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPX01BU0s7CiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19ST0JVU1Q7CiAJeGVubmV0X3NldF9zZyhkZXYsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94dHNvbmljLmMgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKaW5kZXggMDNhM2YzNC4uYTEyYTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveHRzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIAlpZiAobHAtPmRlc2NyaXB0b3JzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgIgotCQkJCSIgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQkJCSIgZGVzY3JpcHRvcnMuXG4iLCBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAyZjE2NDVkLi43NDc3ZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMTA3LDkgKzEwNyw5IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICAodW5vZmZpY2lhbCAyLjQueCBwb3J0LCAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorICBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKKyAgS0VSTl9JTkZPICIgICh1bm9mZmljaWFsIDIuNC54IHBvcnQsICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGFja2V0IEVuZ2luZXMgWWVsbG93ZmluIEctTklDIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggZjBiMTVjOS4uMGE2OTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtMzU4LDYgKzM1OCwxNyBAQAogCSAqIG11bHRpY2FzdCBhZGRyZXNzIGNvbmZpZ3VyZWQgaXNuJ3QgZXF1YWwgdG8gSUZGX0FMTE1VTFRJICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgem5ldF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHpuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6bmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gem5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGUgWi1Ob3RlIHByb2JlIGlzIHByZXR0eSBlYXN5LiAgVGhlIE5FVElEQkxLIGV4aXN0cyBpbiB0aGUgc2FmZS10by1wcm9iZQogICAgQklPUyBhcmVhLiAgV2UganVzdCBzY2FuIGZvciB0aGUgc2lnbmF0dXJlLCBhbmQgcHVsbCB0aGUgdml0YWwgcGFyYW1ldGVycwogICAgb3V0IG9mIHRoZSBzdHJ1Y3R1cmUuICovCkBAIC00NDAsMTEgKzQ1MSw3IEBACiAJem5ldC0+dHhfZW5kID0gem5ldC0+dHhfc3RhcnQgKyB6bmV0LT50eF9idWZfbGVuOwogCiAJLyogVGhlIFpORVQtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSAmem5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnpuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5zdG9wID0gJnpuZXRfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmem5ldF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gem5ldF90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ6bmV0X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwppbmRleCA5ZGE1YTRiLi5jM2VhNWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCkBAIC0zOCw3ICszOCw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoZHlpbmdfdGFza3MpOwogc3RhdGljIExJU1RfSEVBRChkZWFkX3Rhc2tzKTsKLXN0YXRpYyBjcHVtYXNrX3QgbWFya2VkX2NwdXMgPSBDUFVfTUFTS19OT05FOworc3RhdGljIGNwdW1hc2tfdmFyX3QgbWFya2VkX2NwdXM7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc2tfbW9ydHVhcnkpOwogc3RhdGljIHZvaWQgcHJvY2Vzc190YXNrX21vcnR1YXJ5KHZvaWQpOwogCkBAIC00NTYsMTAgKzQ1NiwxMCBAQAogewogCWludCBpOwogCi0JY3B1X3NldChjcHUsIG1hcmtlZF9jcHVzKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCBtYXJrZWRfY3B1cyk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJaWYgKCFjcHVfaXNzZXQoaSwgbWFya2VkX2NwdXMpKQorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgbWFya2VkX2NwdXMpKQogCQkJcmV0dXJuOwogCX0KIApAQCAtNDY4LDcgKzQ2OCw3IEBACiAJICovCiAJcHJvY2Vzc190YXNrX21vcnR1YXJ5KCk7CiAKLQljcHVzX2NsZWFyKG1hcmtlZF9jcHVzKTsKKwljcHVtYXNrX2NsZWFyKG1hcmtlZF9jcHVzKTsKIH0KIAogCkBAIC01NjUsNiArNTY1LDIwIEBACiAJbXV0ZXhfdW5sb2NrKCZidWZmZXJfbXV0ZXgpOwogfQogCitpbnQgX19pbml0IGJ1ZmZlcl9zeW5jX2luaXQodm9pZCkKK3sKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZtYXJrZWRfY3B1cywgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJY3B1bWFza19jbGVhcihtYXJrZWRfY3B1cyk7CisJCXJldHVybiAwOworfQorCit2b2lkIF9fZXhpdCBidWZmZXJfc3luY19jbGVhbnVwKHZvaWQpCit7CisJZnJlZV9jcHVtYXNrX3ZhcihtYXJrZWRfY3B1cyk7Cit9CisKIC8qIFRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhZGQgYSBidWZmZXIgd29ydGggb2YgZGF0YSBkaXJlY3RseSB0bwogICogdGhlIGtlcm5lbCBidWZmZXIuIFRoZSBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSBhIGNpcmN1bGFyIGJ1ZmZlci4KICAqIFRha2UgdGhlIGVudHJpZXMgZnJvbSBpbmRleCBzdGFydCBhbmQgZW5kIGF0IGluZGV4IGVuZCwgd3JhcHBpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaAppbmRleCAzMTEwNzMyLi4wZWJmNWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmgKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oCkBAIC0xOSw0ICsxOSw4IEBACiAvKiBzeW5jIHRoZSBnaXZlbiBDUFUncyBidWZmZXIgKi8KIHZvaWQgc3luY19idWZmZXIoaW50IGNwdSk7CiAKKy8qIGluaXRpYWxpemUvZGVzdHJveSB0aGUgYnVmZmVyIHN5c3RlbS4gKi8KK2ludCBidWZmZXJfc3luY19pbml0KHZvaWQpOwordm9pZCBidWZmZXJfc3luY19jbGVhbnVwKHZvaWQpOworCiAjZW5kaWYgLyogT1BST0ZJTEVfQlVGRkVSX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCmluZGV4IDNjZmZjZTkuLmNlZDM5ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYworKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKQEAgLTE4Myw2ICsxODMsMTAgQEAKIHsKIAlpbnQgZXJyOwogCisJZXJyID0gYnVmZmVyX3N5bmNfaW5pdCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAllcnIgPSBvcHJvZmlsZV9hcmNoX2luaXQoJm9wcm9maWxlX29wcyk7CiAKIAlpZiAoZXJyIDwgMCB8fCB0aW1lcikgewpAQCAtMTkxLDggKzE5NSwxMCBAQAogCX0KIAogCWVyciA9IG9wcm9maWxlZnNfcmVnaXN0ZXIoKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKIAkJb3Byb2ZpbGVfYXJjaF9leGl0KCk7CisJCWJ1ZmZlcl9zeW5jX2NsZWFudXAoKTsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjAyLDYgKzIwOCw3IEBACiB7CiAJb3Byb2ZpbGVmc191bnJlZ2lzdGVyKCk7CiAJb3Byb2ZpbGVfYXJjaF9leGl0KCk7CisJYnVmZmVyX3N5bmNfY2xlYW51cCgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2RtYXIuYyBiL2RyaXZlcnMvcGNpL2RtYXIuYwppbmRleCAyNmM1MzZiLi41ZjMzMzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9kbWFyLmMKKysrIGIvZHJpdmVycy9wY2kvZG1hci5jCkBAIC00Miw2ICs0Miw3IEBACiBMSVNUX0hFQUQoZG1hcl9kcmhkX3VuaXRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqIF9faW5pdGRhdGEgZG1hcl90Ymw7CitzdGF0aWMgYWNwaV9zaXplIGRtYXJfdGJsX3NpemU7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkbWFyX3JlZ2lzdGVyX2RyaGRfdW5pdChzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpCiB7CkBAIC0yODgsOCArMjg5LDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAogCS8qIGlmIHdlIGNvdWxkIGZpbmQgRE1BUiB0YWJsZSwgdGhlbiB0aGVyZSBhcmUgRE1BUiBkZXZpY2VzICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfRE1BUiwgMCwKLQkJCQkoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZkbWFyX3RibCk7CisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKEFDUElfU0lHX0RNQVIsIDAsCisJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmZG1hcl90YmwsCisJCQkJJmRtYXJfdGJsX3NpemUpOwogCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmICFkbWFyX3RibCkgewogCQlwcmludGsgKEtFUk5fV0FSTklORyBQUkVGSVggIlVuYWJsZSB0byBtYXAgRE1BUlxuIik7CkBAIC00ODksNiArNDkxLDcgQEAKIAkJCWlvbW11X2RldGVjdGVkID0gMTsKICNlbmRpZgogCX0KKwllYXJseV9hY3BpX29zX3VubWFwX21lbW9yeShkbWFyX3RibCwgZG1hcl90Ymxfc2l6ZSk7CiAJZG1hcl90YmwgPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYwppbmRleCBhMTNhYmY1Li44NDUwZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKQEAgLTIyNSw3ICsyMjUsOCBAQAogCiB2b2lkIGNwcWhwX2NyZWF0ZV9kZWJ1Z2ZzX2ZpbGVzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCWN0cmwtPmRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoY3RybC0+cGNpX2Rldi0+ZGV2LmJ1c19pZCwgU19JUlVHTywgcm9vdCwgY3RybCwgJmRlYnVnX29wcyk7CisJY3RybC0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShkZXZfbmFtZSgmY3RybC0+cGNpX2Rldi0+ZGV2KSwKKwkJCQkJICAgU19JUlVHTywgcm9vdCwgY3RybCwgJmRlYnVnX29wcyk7CiB9CiAKIHZvaWQgY3BxaHBfcmVtb3ZlX2RlYnVnZnNfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA0NWVmZmM1Li45ZDA3YTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSAiaW50cl9yZW1hcHBpbmcuaCIKIApAQCAtMjAsNyArMjEsNyBAQAogCXU4ICBpcnRlX21hc2s7CiB9OwogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqZ2V0X29uZV9mcmVlX2lycV8yX2lvbW11KGludCBjcHUpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppb21tdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IGZjMWRlNDYuLjkwMDEzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtNDY4LDEzICs0NjgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKQEAgLTQ5OCwxMyArNDk4LDEzIEBACiAgKiBQQ01DSUEgIkRyaXZlciIgQVBJCiAgKi8KIAotc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnBjbWNpYV9zb2NrZXRzX2xvY2spOwogCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShhdTF4MDBfcGNtY2lhX2h3X2luaXQpOyBpKyspIHsKLQkJcmV0ID0gYXUxeDAwX3BjbWNpYV9od19pbml0W2ldKGRldik7CisJCXJldCA9IGF1MXgwMF9wY21jaWFfaHdfaW5pdFtpXSgmZGV2LT5kZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKIAl9CkBAIC01MTIsMTQgKzUxMiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTF4MDBfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MXgwMF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlLAotCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCisJLnN1c3BlbmQgCT0gYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIApAQCAtNTMzLDggKzU0NSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhdTF4MDBfcGNtY2lhX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWlmICgoZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKSkpCi0JCXJldHVybiBlcnJvcjsKKwllcnJvciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTQ0LDcgKzU1NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4MDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MXgwMF9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDcxNjUzYWIuLjQwZDQ5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMjM4LDYgKzEyMzgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIHN0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgcGNpY19vcGVyYXRpb25zID0gewogCS5pbml0CQkJPSBwY2ljX2luaXQsCiAJLmdldF9zdGF0dXMJCT0gcGNpY19nZXRfc3RhdHVzLApAQCAtMTI0OCwxMSArMTI1OCwxMyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGk4MjM2NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiaTgyMzY1IiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTgyMzY1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpODIzNjUiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gaTgyMzY1X2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmk4MjM2NV9kZXZpY2U7CkBAIC0xMjYxLDcgKzEyNzMsNyBAQAogewogICAgIGludCBpLCByZXQ7CiAKLSAgICByZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiAgICAgaWYgKHJldCkKIAlnb3RvIGVycl9vdXQ7CiAKQEAgLTEzMzcsNyArMTM0OSw3IEBACiAJcG5wX2Rpc2FibGVfZGV2KGk4MjM2NV9wbnBkZXYpOwogI2VuZGlmCiBlcnJfZHJpdmVyX3VucmVnaXN0ZXI6Ci0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIGVycl9vdXQ6CiAgICAgcmV0dXJuIHJldDsKIH0gLyogaW5pdF9pODIzNjUgKi8KQEAgLTEzNjUsNyArMTM3Nyw3IEBACiAgICAgaWYgKGk4MjM2NV9wbnBkZXYpCiAgICAgCQlwbnBfZGlzYWJsZV9kZXYoaTgyMzY1X3BucGRldik7CiAjZW5kaWYKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogfSAvKiBleGl0X2k4MjM2NSAqLwogCiBtb2R1bGVfaW5pdChpbml0X2k4MjM2NSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAyYWI0ZjIyLi42MmI0ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTY5NiwxMyArNjk2LDI1IEBACiAJLnNldF9tZW1fbWFwCQk9IHBjY19zZXRfbWVtX21hcCwKIH07CiAKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBjY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY2ZjIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiY2ZjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gY2ZjX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGNmY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjY19kZXZpY2UgPSB7CkBAIC03MTYsMTMgKzcyOCwxMyBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNjX2RldmljZSk7CiAJaWYgKHJldCl7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzU0LDcgKzc2Niw3IEBACiAJaWYgKHBjY19zb2NrZXRzID09IDApIHsKIAkJcHJpbnRrKCJzb2NrZXQgaXMgbm90IGZvdW5kLlxuIik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODAyLDcgKzgxNCw3IEBACiAJaWYgKHBvbGxfaW50ZXJ2YWwgIT0gMCkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfdGltZXIpOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIH0gLyogZXhpdF9tMzJyX3BjYyAqLwogCiBtb2R1bGVfaW5pdChpbml0X20zMnJfcGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDJmMTA4YzIuLjEyMDM0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtNjcyLDEzICs2NzIsMjUgQEAKIAkuc2V0X21lbV9tYXAJCT0gcGNjX3NldF9tZW1fbWFwLAogfTsKIAorc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwY2MiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJwY2MiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gcGNjX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNjX2RldmljZSA9IHsKQEAgLTY5MiwxMyArNzA0LDEzIEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKIAlpZiAocmV0KXsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03MTUsNyArNzI3LDcgQEAKIAlpZiAocGNjX3NvY2tldHMgPT0gMCkgewogCQlwcmludGsoInNvY2tldCBpcyBub3QgZm91bmQuXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBjY19kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NjMsNyArNzc1LDcgQEAKIAlpZiAocG9sbF9pbnRlcnZhbCAhPSAwKQogCQlkZWxfdGltZXJfc3luYygmcG9sbF90aW1lcik7CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogfSAvKiBleGl0X20zMnJfcGNjICovCiAKIG1vZHVsZV9pbml0KGluaXRfbTMycl9wY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggYmI5ZGRiOS4uYzQ5YTcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKQEAgLTM5LDYgKzM4LDQ0IEBACiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogI2luY2x1ZGUgInB4YTJ4eF9iYXNlLmgiCiAKKy8qCisgKiBQZXJzb25hbCBDb21wdXRlciBNZW1vcnkgQ2FyZCBJbnRlcm5hdGlvbmFsIEFzc29jaWF0aW9uIChQQ01DSUEpIHNvY2tldHMKKyAqLworCisjZGVmaW5lIFBDTUNJQVBydFNwCTB4MDQwMDAwMDAJLyogUENNQ0lBIFBhcnRpdGlvbiBTcGFjZSBbYnl0ZV0gICAqLworI2RlZmluZSBQQ01DSUFTcAkoNCpQQ01DSUFQcnRTcCkJLyogUENNQ0lBIFNwYWNlIFtieXRlXSAgICAgICAgICAgICAqLworI2RlZmluZSBQQ01DSUFJT1NwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBJL08gU3BhY2UgW2J5dGVdICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBQXR0clNwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICAgKi8KKyNkZWZpbmUgUENNQ0lBTWVtU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgICAqLworCisjZGVmaW5lIFBDTUNJQTBTcAlQQ01DSUFTcAkvKiBQQ01DSUEgMCBTcGFjZSBbYnl0ZV0gICAgICAgICAgICovCisjZGVmaW5lIFBDTUNJQTBJT1NwCVBDTUNJQUlPU3AJLyogUENNQ0lBIDAgSS9PIFNwYWNlIFtieXRlXSAgICAgICAqLworI2RlZmluZSBQQ01DSUEwQXR0clNwCVBDTUNJQUF0dHJTcAkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICovCisjZGVmaW5lIFBDTUNJQTBNZW1TcAlQQ01DSUFNZW1TcAkvKiBQQ01DSUEgMCBNZW1vcnkgU3BhY2UgW2J5dGVdICAgICovCisKKyNkZWZpbmUgUENNQ0lBMVNwCVBDTUNJQVNwCS8qIFBDTUNJQSAxIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMUlPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMSBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCisjZGVmaW5lIFBDTUNJQTFBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAxIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KKyNkZWZpbmUgUENNQ0lBMU1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAxIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KKworI2RlZmluZSBfUENNQ0lBKE5iKQkJCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKDB4MjAwMDAwMDAgKyAoTmIpICogUENNQ0lBU3ApCisjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQShOYikJLyogUENNQ0lBIEkvTyBbMC4uMV0gICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBQXR0cihOYikJCQkvKiBQQ01DSUEgQXR0cmlidXRlIFswLi4xXSAgICAgICAgICovIFwKKwkJCShfUENNQ0lBKE5iKSArIDIgKiBQQ01DSUFQcnRTcCkKKyNkZWZpbmUgX1BDTUNJQU1lbShOYikJCQkvKiBQQ01DSUEgTWVtb3J5IFswLi4xXSAgICAgICAgICAgICovIFwKKwkJCShfUENNQ0lBKE5iKSArIDMgKiBQQ01DSUFQcnRTcCkKKworI2RlZmluZSBfUENNQ0lBMAlfUENNQ0lBKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8oMCkJLyogUENNQ0lBIDAgSS9PICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMEF0dHIJX1BDTUNJQUF0dHIoMCkJLyogUENNQ0lBIDAgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBME1lbQlfUENNQ0lBTWVtKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBKDEpCS8qIFBDTUNJQSAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTFJTwlfUENNQ0lBSU8oMSkJLyogUENNQ0lBIDEgSS9PICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMUF0dHIJX1BDTUNJQUF0dHIoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtKDEpCS8qIFBDTUNJQSAxIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKwogCiAjZGVmaW5lIE1DWFhfU0VUVVBfTUFTSyAgICAgKDB4N2YpCiAjZGVmaW5lIE1DWFhfQVNTVF9NQVNLICAgICAgKDB4MWYpCkBAIC0xNzcsMjkgKzIxNCw3MyBAQAogCU1FQ1IgfD0gTUVDUl9DSVQ7CiAKIAkvKiBTZXQgTUVDUjpOT1MgKE51bWJlciBPZiBTb2NrZXRzKSAqLwotCWlmIChvcHMtPm5yID4gMSB8fCBtYWNoaW5lX2lzX3ZpcGVyKCkpCisJaWYgKChvcHMtPmZpcnN0ICsgb3BzLT5ucikgPiAxIHx8IG1hY2hpbmVfaXNfdmlwZXIoKSkKIAkJTUVDUiB8PSBNRUNSX05PUzsKIAllbHNlCiAJCU1FQ1IgJj0gfk1FQ1JfTk9TOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqc2t0X25hbWVzW10gPSB7CisJIlBDTUNJQSBzb2NrZXQgMCIsCisJIlBDTUNJQSBzb2NrZXQgMSIsCit9OworCisjZGVmaW5lIFNLVF9ERVZfSU5GT19TSVpFKG4pIFwKKwkoc2l6ZW9mKHN0cnVjdCBza3RfZGV2X2luZm8pICsgKG4pKnNpemVvZihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQpKQorCiBpbnQgX19weGEyeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgaSwgcmV0OwogCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHM7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm87CisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3Q7CiAKIAlpZiAoIWRldiB8fCAhZGV2LT5wbGF0Zm9ybV9kYXRhKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW9wcyA9IChzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqKWRldi0+cGxhdGZvcm1fZGF0YTsKIAorCXNpbmZvID0ga3phbGxvYyhTS1RfREVWX0lORk9fU0laRShvcHMtPm5yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaW5mby0+bnNrdCA9IG9wcy0+bnI7CisKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IG9wcy0+bnI7IGkrKykgeworCQlza3QgPSAmc2luZm8tPnNrdFtpXTsKKworCQlza3QtPm5yCQk9IG9wcy0+Zmlyc3QgKyBpOworCQlza3QtPmlycQk9IE5PX0lSUTsKKworCQlza3QtPnJlc19za3Quc3RhcnQJPSBfUENNQ0lBKHNrdC0+bnIpOworCQlza3QtPnJlc19za3QuZW5kCT0gX1BDTUNJQShza3QtPm5yKSArIFBDTUNJQVNwIC0gMTsKKwkJc2t0LT5yZXNfc2t0Lm5hbWUJPSBza3RfbmFtZXNbc2t0LT5ucl07CisJCXNrdC0+cmVzX3NrdC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJCXNrdC0+cmVzX2lvLnN0YXJ0CT0gX1BDTUNJQUlPKHNrdC0+bnIpOworCQlza3QtPnJlc19pby5lbmQJCT0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7CisJCXNrdC0+cmVzX2lvLm5hbWUJPSAiaW8iOworCQlza3QtPnJlc19pby5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCisJCXNrdC0+cmVzX21lbS5zdGFydAk9IF9QQ01DSUFNZW0oc2t0LT5ucik7CisJCXNrdC0+cmVzX21lbS5lbmQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpICsgUENNQ0lBTWVtU3AgLSAxOworCQlza3QtPnJlc19tZW0ubmFtZQk9ICJtZW1vcnkiOworCQlza3QtPnJlc19tZW0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKworCQlza3QtPnJlc19hdHRyLnN0YXJ0CT0gX1BDTUNJQUF0dHIoc2t0LT5ucik7CisJCXNrdC0+cmVzX2F0dHIuZW5kCT0gX1BDTUNJQUF0dHIoc2t0LT5ucikgKyBQQ01DSUFBdHRyU3AgLSAxOworCQlza3QtPnJlc19hdHRyLm5hbWUJPSAiYXR0cmlidXRlIjsKKwkJc2t0LT5yZXNfYXR0ci5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCX0KKwogCS8qIFByb3ZpZGUgb3VyIFBYQTJ4eCBzcGVjaWZpYyB0aW1pbmcgcm91dGluZXMuICovCiAJb3BzLT5zZXRfdGltaW5nICA9IHB4YTJ4eF9wY21jaWFfc2V0X3RpbWluZzsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIAlvcHMtPmZyZXF1ZW5jeV9jaGFuZ2UgPSBweGEyeHhfcGNtY2lhX2ZyZXF1ZW5jeV9jaGFuZ2U7CiAjZW5kaWYKIAotCXJldCA9IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgb3BzLT5maXJzdCwgb3BzLT5ucik7CisJcmV0ID0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKGRldiwgb3BzLCBzaW5mbyk7CiAKIAlpZiAoIXJldCkKIAkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwppbmRleCA3YzhiY2I0Li40ZWQ2NGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKaW5kZXggNmMzYWFjMy4uYTdiOTQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfZTc0MC5jCmluZGV4IGY2NjNhMDEuLmQwOWMwZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2U3NDAuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggMzdlYzU1ZC4uNmNiYjFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2x1YmJvY2suaD4KIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMKaW5kZXggODc3MDAxZC4uMTEzODU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYwpAQCAtMjEsMTEgKzIxLDEwIEBACiAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tYWluc3RvbmUuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYwppbmRleCAxNzM2YzY3Li41YmE5YjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbWxkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG1sZC5jCkBAIC05OCw4ICs5OCw4IEBACiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbWxkX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAotCS5maXJzdAkJCT0gMCwKLQkubnIJCQk9IDIsCisJLmZpcnN0CQkJPSAxLAorCS5ucgkJCT0gMSwKIAogCS5od19pbml0CQk9IHBhbG1sZF9wY21jaWFfaHdfaW5pdCwKIAkuaHdfc2h1dGRvd24JCT0gcGFsbWxkX3BjbWNpYV9od19zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKaW5kZXggMzZjN2EwYi4uZTBlNWNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvdHJpemVwczQuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92aXBlci5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKaW5kZXggZGQxMDQ4MS4uMTc4NzEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3ZpcGVyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggYzBlMmFmYy4uZTU5MmUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBtYWtlX3Jlc291cmNlKDAsIG51bSwgSU9SRVNPVVJDRV9JTywKLQkJCQkJICAgICBzLT5kZXYuYnVzX2lkKTsKKwkJCQkJICAgICBkZXZfbmFtZSgmcy0+ZGV2KSk7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4gPSBiYXNlOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBjNWIyYTQ0Li5kOGRhNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIApAQCAtNzMsNyArNzMsNyBAQAogCSAqIEluaXRpYWxpc2UgYW55ICJvbi1ib2FyZCIgUENNQ0lBIHNvY2tldHMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2ExMXgwX3BjbWNpYV9od19pbml0KTsgaSsrKSB7Ci0JCXJldCA9IHNhMTF4MF9wY21jaWFfaHdfaW5pdFtpXShkZXYpOworCQlyZXQgPSBzYTExeDBfcGNtY2lhX2h3X2luaXRbaV0oJmRldi0+ZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtODEsMTMgKzgxLDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJzYTExeDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlLAotCS5yZW1vdmUJCT0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSwKLQkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lIAk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3JlbW92ZSwKKwkuc3VzcGVuZCAJPSBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogLyogc2ExMXgwX3BjbWNpYV9pbml0KCkKQEAgLTEwMCw3ICsxMTgsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzYTExeDBfcGNtY2lhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOwogfQogCiAvKiBzYTExeDBfcGNtY2lhX2V4aXQoKQpAQCAtMTEwLDcgKzEyOCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkpvaG4gRG9yc2V5IDxqb2huK0Bjcy5jbXUuZWR1PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2gzNjAwLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwppbmRleCA2ZGU0ZTFiLi4wY2MzNzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwpAQCAtMzcsOSArMzcsOSBAQAogCXNvY19wY21jaWFfZnJlZV9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CiAgIAogCS8qIERpc2FibGUgQ0YgYnVzOiAqLwotCWNscl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTik7Ci0JY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQlzZXRfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQpOworCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgMCk7CisJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAwKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQsIDEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNzksMTAgKzc5LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkKLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fQ0FSRF9SRVNFVCk7Ci0JZWxzZQotCQljbHJfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19DQVJEX1JFU0VUKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19DQVJEX1JFU0VULCAhIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpOwogCiAJLyogU2lsZW50bHkgaWdub3JlIFZwcCwgb3V0cHV0IGVuYWJsZSwgc3BlYWtlciBlbmFibGUuICovCiAKQEAgLTkyLDkgKzg5LDkgQEAKIHN0YXRpYyB2b2lkIGgzNjAwX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAkvKiBFbmFibGUgQ0YgYnVzOiAqLwotCXNldF9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTik7Ci0Jc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQljbHJfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQpOworCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgMSk7CisJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAxKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQsIDApOwogCiAJbXNsZWVwKDEwKTsKIApAQCAtMTEyLDEwICsxMDksMTAgQEAKIAkgKiBzb2NrZXQgMCB0aGVuIHNvY2tldCAxLgogCSAqLwogCWlmIChza3QtPm5yID09IDEpIHsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX05WUkFNX09OKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAwKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX05WUkFNX09OLCAwKTsKIAkJLyogaG1tLCBkb2VzIHRoaXMgc3VjayBwb3dlcj8gKi8KLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX1JFU0VUKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX1JFU0VULCAxKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCmluZGV4IDY5MjRkMGUuLjQwMTA1MmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKQEAgLTExLDEyICsxMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYwppbmRleCA3Y2IxMjczLi5lMTVkNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMKQEAgLTM2LDkgKzM2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMTYzLDkgKzE2Myw1NSBAQAogCXJldHVybiBwIC0gYnVmOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqc2t0X25hbWVzW10gPSB7CisJIlBDTUNJQSBzb2NrZXQgMCIsCisJIlBDTUNJQSBzb2NrZXQgMSIsCit9OworCisjZGVmaW5lIFNLVF9ERVZfSU5GT19TSVpFKG4pIFwKKwkoc2l6ZW9mKHN0cnVjdCBza3RfZGV2X2luZm8pICsgKG4pKnNpemVvZihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQpKQorCiBpbnQgc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLAogCQkJICAgIGludCBmaXJzdCwgaW50IG5yKQogeworCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvOworCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0OworCWludCBpOworCisJc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG5yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaW5mby0+bnNrdCA9IG5yOworCisJLyogSW5pdGlsaWF6ZSBwcm9jZXNzb3Igc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXNrdCA9ICZzaW5mby0+c2t0W2ldOworCisJCXNrdC0+bnIJCT0gZmlyc3QgKyBpOworCQlza3QtPmlycQk9IE5PX0lSUTsKKworCQlza3QtPnJlc19za3Quc3RhcnQJPSBfUENNQ0lBKHNrdC0+bnIpOworCQlza3QtPnJlc19za3QuZW5kCT0gX1BDTUNJQShza3QtPm5yKSArIFBDTUNJQVNwIC0gMTsKKwkJc2t0LT5yZXNfc2t0Lm5hbWUJPSBza3RfbmFtZXNbc2t0LT5ucl07CisJCXNrdC0+cmVzX3NrdC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJCXNrdC0+cmVzX2lvLnN0YXJ0CT0gX1BDTUNJQUlPKHNrdC0+bnIpOworCQlza3QtPnJlc19pby5lbmQJCT0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7CisJCXNrdC0+cmVzX2lvLm5hbWUJPSAiaW8iOworCQlza3QtPnJlc19pby5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCisJCXNrdC0+cmVzX21lbS5zdGFydAk9IF9QQ01DSUFNZW0oc2t0LT5ucik7CisJCXNrdC0+cmVzX21lbS5lbmQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpICsgUENNQ0lBTWVtU3AgLSAxOworCQlza3QtPnJlc19tZW0ubmFtZQk9ICJtZW1vcnkiOworCQlza3QtPnJlc19tZW0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKworCQlza3QtPnJlc19hdHRyLnN0YXJ0CT0gX1BDTUNJQUF0dHIoc2t0LT5ucik7CisJCXNrdC0+cmVzX2F0dHIuZW5kCT0gX1BDTUNJQUF0dHIoc2t0LT5ucikgKyBQQ01DSUFBdHRyU3AgLSAxOworCQlza3QtPnJlc19hdHRyLm5hbWUJPSAiYXR0cmlidXRlIjsKKwkJc2t0LT5yZXNfYXR0ci5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCX0KKwogCS8qCiAJICogc2V0IGRlZmF1bHQgTUVDUiBjYWxjdWxhdGlvbiBpZiB0aGUgYm9hcmQgc3BlY2lmaWMKIAkgKiBjb2RlIGRpZCBub3Qgc3BlY2lmeSBvbmUuLi4KQEAgLTE4MCw3ICsyMjYsNyBAQAogCW9wcy0+ZnJlcXVlbmN5X2NoYW5nZSA9IHNhMTEwMF9wY21jaWFfZnJlcXVlbmN5X2NoYW5nZTsKICNlbmRpZgogCi0JcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgZmlyc3QsIG5yKTsKKwlyZXR1cm4gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKGRldiwgb3BzLCBzaW5mbyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNhMTF4eF9kcnZfcGNtY2lhX3Byb2JlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IGY0OWFjNjYuLjE2M2NmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTQ5LDExICs0OSw2IEBACiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKLS8qIEZJWE1FOiBwbGF0Zm9ybSBkZXBlbmRlbnQgcmVzb3VyY2UgZGVjbGFyYXRpb24gaGFzIHRvIG1vdmUgb3V0IG9mIHRoaXMgZmlsZSAqLwotI2lmZGVmIENPTkZJR19BUkNIX1BYQQotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogCiBzdGF0aWMgaW50IHBjX2RlYnVnOwpAQCAtNTgxLDE5ICs1NzYsNiBAQAogTElTVF9IRUFEKHNvY19wY21jaWFfc29ja2V0cyk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnNrdF9uYW1lc1tdID0gewotCSJQQ01DSUEgc29ja2V0IDAiLAotCSJQQ01DSUEgc29ja2V0IDEiLAotfTsKLQotc3RydWN0IHNrdF9kZXZfaW5mbyB7Ci0JaW50IG5za3Q7Ci0Jc3RydWN0IHNvY19wY21jaWFfc29ja2V0IHNrdFswXTsKLX07Ci0KLSNkZWZpbmUgU0tUX0RFVl9JTkZPX1NJWkUobikgXAotCShzaXplb2Yoc3RydWN0IHNrdF9kZXZfaW5mbykgKyAobikqc2l6ZW9mKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCkpCi0KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIHN0YXRpYyBpbnQKIHNvY19wY21jaWFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCkBAIC02MzcsMjYgKzYxOSwxOCBAQAogc3RhdGljIHZvaWQgc29jX3BjbWNpYV9jcHVmcmVxX3VucmVnaXN0ZXIodm9pZCkge30KICNlbmRpZgogCi1pbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywgaW50IGZpcnN0LCBpbnQgbnIpCitpbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywKKwkJCQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbykKIHsKLQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbzsKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdDsKIAlpbnQgcmV0LCBpOwogCiAJbXV0ZXhfbG9jaygmc29jX3BjbWNpYV9zb2NrZXRzX2xvY2spOwogCi0Jc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG5yKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzaW5mbykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzaW5mby0+bnNrdCA9IG5yOwotCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwZXItc29ja2V0IHN0cnVjdHVyZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXNrdCA9ICZzaW5mby0+c2t0W2ldOwogCiAJCXNrdC0+c29ja2V0Lm9wcyA9ICZzb2NfY29tbW9uX3BjbWNpYV9vcGVyYXRpb25zOwpAQCAtNjY4LDQzICs2NDIsMjEgQEAKIAkJc2t0LT5wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylza3Q7CiAJCXNrdC0+cG9sbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIFNPQ19QQ01DSUFfUE9MTF9QRVJJT0Q7CiAKLQkJc2t0LT5ucgkJPSBmaXJzdCArIGk7Ci0JCXNrdC0+aXJxCT0gTk9fSVJROwogCQlza3QtPmRldgk9IGRldjsKIAkJc2t0LT5vcHMJPSBvcHM7CiAKLQkJc2t0LT5yZXNfc2t0LnN0YXJ0CT0gX1BDTUNJQShza3QtPm5yKTsKLQkJc2t0LT5yZXNfc2t0LmVuZAk9IF9QQ01DSUEoc2t0LT5ucikgKyBQQ01DSUFTcCAtIDE7Ci0JCXNrdC0+cmVzX3NrdC5uYW1lCT0gc2t0X25hbWVzW3NrdC0+bnJdOwotCQlza3QtPnJlc19za3QuZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKLQogCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnNrdC0+cmVzX3NrdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9lcnJfMTsKIAotCQlza3QtPnJlc19pby5zdGFydAk9IF9QQ01DSUFJTyhza3QtPm5yKTsKLQkJc2t0LT5yZXNfaW8uZW5kCQk9IF9QQ01DSUFJTyhza3QtPm5yKSArIFBDTUNJQUlPU3AgLSAxOwotCQlza3QtPnJlc19pby5uYW1lCT0gImlvIjsKLQkJc2t0LT5yZXNfaW8uZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQogCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZza3QtPnJlc19za3QsICZza3QtPnJlc19pbyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9lcnJfMjsKIAotCQlza3QtPnJlc19tZW0uc3RhcnQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpOwotCQlza3QtPnJlc19tZW0uZW5kCT0gX1BDTUNJQU1lbShza3QtPm5yKSArIFBDTUNJQU1lbVNwIC0gMTsKLQkJc2t0LT5yZXNfbWVtLm5hbWUJPSAibWVtb3J5IjsKLQkJc2t0LT5yZXNfbWVtLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07Ci0KIAkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfbWVtKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2Vycl8zOwogCi0JCXNrdC0+cmVzX2F0dHIuc3RhcnQJPSBfUENNQ0lBQXR0cihza3QtPm5yKTsKLQkJc2t0LT5yZXNfYXR0ci5lbmQJPSBfUENNQ0lBQXR0cihza3QtPm5yKSArIFBDTUNJQUF0dHJTcCAtIDE7Ci0JCXNrdC0+cmVzX2F0dHIubmFtZQk9ICJhdHRyaWJ1dGUiOwotCQlza3QtPnJlc19hdHRyLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07Ci0KIAkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfYXR0cik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9lcnJfNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaCBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAppbmRleCAzOGM2NzM3Li4yOTBlMTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCkBAIC01OCw2ICs1OCwxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIH07CiAKK3N0cnVjdCBza3RfZGV2X2luZm8geworCWludCBuc2t0OworCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCBza3RbMF07Cit9OworCiBzdHJ1Y3QgcGNtY2lhX3N0YXRlIHsKICAgdW5zaWduZWQgZGV0ZWN0OiAxLAogICAgICAgICAgICAgcmVhZHk6IDEsCkBAIC0xMzIsNyArMTM3LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc29jX3BjbWNpYV9zb2NrZXRzOwogCi1leHRlcm4gaW50IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsIGludCBmaXJzdCwgaW50IG5yKTsKK2V4dGVybiBpbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywgc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8pOwogZXh0ZXJuIGludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDJhNjEzZTkuLjlhZDk3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTM2MywxMyArMzYzLDI1IEBACiAgICAgcmV0dXJuIGlkOwogfQogCitzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRjaWNfZHJpdmVyID0gewotCS5uYW1lID0gInRjaWMtcGNtY2lhIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGNpY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGNpYy1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0Y2ljX2RldmljZSA9IHsKQEAgLTM4Myw3ICszOTUsNyBAQAogICAgIGludCBpLCBzb2NrLCByZXQgPSAwOwogICAgIHVfaW50IG1hc2ssIHNjYW47CiAKLSAgICBpZiAoZHJpdmVyX3JlZ2lzdGVyKCZ0Y2ljX2RyaXZlcikpCisgICAgaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGNpY19kcml2ZXIpKQogCXJldHVybiAtMTsKICAgICAKICAgICBwcmludGsoS0VSTl9JTkZPICJEYXRhYm9vayBUQ0lDLTIgUENNQ0lBIHByb2JlOiAiKTsKQEAgLTM5MSw3ICs0MDMsNyBAQAogCiAgICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbih0Y2ljX2Jhc2UsIDE2LCAidGNpYy0yIikpIHsKIAlwcmludGsoImNvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0cyxcbiAiKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNDE0LDcgKzQyNiw3IEBACiAgICAgaWYgKHNvY2sgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcmVsZWFzZV9yZWdpb24odGNpY19iYXNlLCAxNik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KIApAQCAtNTQyLDcgKzU1NCw3IEBACiAgICAgfQogCiAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRjaWNfZGV2aWNlKTsKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiB9IC8qIGV4aXRfdGNpYyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggYjJjNDEyNC4uNjU5NDIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNCwyNCArNzA0LDM3IEBACiAKIF9fc2V0dXAoInZyYzQxNzFfY2FyZD0iLCB2cmM0MTcxX2NhcmRfc2V0dXApOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdnJjNDE3MV9jYXJkX2RyaXZlciA9IHsKLQkubmFtZQkJPSB2cmM0MTcxX2NhcmRfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZyYzQxNzFfY2FyZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gdnJjNDE3MV9jYXJkX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kCT0gdnJjNDE3MV9jYXJkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2cmM0MTcxX2NhcmRfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdnJjNDE3MV9jYXJkX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTczNSwxMSArNzQ4LDEyIEBACiAJaWYgKHJldHZhbCA8IDApIHsKIAkJdnJjNDE3MV9yZW1vdmVfc29ja2V0cygpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzLCBjb25uZWN0ZWQgdG8gSVJRICVkXG4iLCB2cmM0MTcxX2NhcmRfZHJpdmVyLm5hbWUsIHZyYzQxNzFfaXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcywgY29ubmVjdGVkIHRvIElSUSAlZFxuIiwKKwkJdnJjNDE3MV9jYXJkX2RyaXZlci5kcml2ZXIubmFtZSwgdnJjNDE3MV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDksNyArNzYzLDcgQEAKIAlmcmVlX2lycSh2cmM0MTcxX2lycSwgdnJjNDE3MV9zb2NrZXRzKTsKIAl2cmM0MTcxX3JlbW92ZV9zb2NrZXRzKCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZyYzQxNzFfY2FyZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IDUzNzk1OWQuLmJjODk5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtMTkxNywxMiArMTkxNyw3IEBACiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9jb21wYXQuZmlmb19hc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCmluZGV4IGFkZGI4N2MuLjMyMjJmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHJpb19idXMgPSB7Ci0JLmJ1c19pZCA9ICJyYXBpZGlvIiwKKwkuaW5pdF9uYW1lID0gInJhcGlkaW8iLAogfTsKIAogc3RydWN0IGJ1c190eXBlIHJpb19idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggZDVlNGU2My4uODZjNjFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCS8qIHJlZ2lzdGVyIGlycSBoYW5kbGVyIGFmdGVyIHdlIGtub3cgd2hhdCBuYW1lIHdlJ2xsIHVzZSAqLwogCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfU1lTLCBhdDkxX3J0Y19pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAotCQkJCXJ0Yy0+cnRjZGV2LT5kZXYuYnVzX2lkLCBydGMpOworCQkJCWRldl9uYW1lKCZydGMtPnJ0Y2Rldi0+ZGV2KSwgcnRjKTsKIAlpZiAocmV0KSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IHNoYXJlIElSUSAlZD9cbiIsIEFUOTFfSURfU1lTKTsKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yy0+cnRjZGV2KTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJaWYgKGdwYnJfcmVhZGwocnRjKSA9PSAwKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IFNFVCBUSU1FIVxuIiwKLQkJCQlydGMtPnJ0Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+cnRjZGV2LT5kZXYpKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCmluZGV4IDQ1ZjEyZGMuLmUwMjYzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAKICNkZWZpbmUgUlRDX1RJTUVfUkVHX09GRlMJMApAQCAtMTE5LDYgKzEyMCwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBtYWtlIHN1cmUgaXQgaXMgYWN0dWFsbHkgZnVuY3Rpb25hbCAqLworCWlmIChydGNfdGltZSA9PSAweDAxMDAwMDAwKSB7CisJCXNzbGVlcCgxKTsKKwkJcnRjX3RpbWUgPSByZWFkbChwZGF0YS0+aW9hZGRyICsgUlRDX1RJTUVfUkVHX09GRlMpOworCQlpZiAocnRjX3RpbWUgPT0gMHgwMTAwMDAwMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW50ZXJuYWwgUlRDIG5vdCB0aWNraW5nXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOwogCXBkYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkJCSAmbXZfcnRjX29wcywgVEhJU19NT0RVTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggMmNiZWIwNy4uYmQxY2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC0zNzcsMTMgKzM3NywxMyBAQAogCiAJLyogaGFuZGxlIHBlcmlvZGljIGFuZCBhbGFybSBpcnFzICovCiAJaWYgKHJlcXVlc3RfaXJxKG9tYXBfcnRjX3RpbWVyLCBydGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpKSB7CisJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIHRpbWVyIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y190aW1lcik7CiAJCWdvdG8gZmFpbDA7CiAJfQogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y19hbGFybSwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKSkgeworCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyBhbGFybSBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAogCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfYWxhcm0pOwogCQlnb3RvIGZhaWwxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IGQyNmE1ZjguLjRmMjQ3ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTM1LDcgKzM1LDggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDSF9QWEEKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXJ0Yy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KICNlbmRpZgogCiAjZGVmaW5lIFJUQ19ERUZfRElWSURFUgkJMzI3NjggLSAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2guYyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCmluZGV4IDFjM2ZjNmIuLjQ4OThmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzaC1ydGMiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMi4xIgogCiAjZGVmaW5lIFJUQ19SRUcocikJKChyKSAqIHJ0Y19yZWdfc2l6ZSkKIApAQCAtOTksNTYgKzk5LDUxIEBACiAJdW5zaWduZWQgc2hvcnQgcGVyaW9kaWNfZnJlcTsKIH07CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfaW50ZXJydXB0KHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisJcGVuZGluZyA9IHRtcCAmIFJDUjFfQ0Y7CiAJdG1wICY9IH5SQ1IxX0NGOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCiAJLyogVXNlcnMgaGF2ZSByZXF1ZXN0ZWQgT25lIHggU2Vjb25kIElSUSAqLwotCWlmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpCisJaWYgKHBlbmRpbmcgJiYgcnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKQogCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19VRiB8IFJUQ19JUlFGKTsKIAotCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfYWxhcm0oc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMV9BRjsKIAl0bXAgJj0gfihSQ1IxX0FGIHwgUkNSMV9BSUUpOwotCQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKIAotCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCWlmIChwZW5kaW5nKQorCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKIAotCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3BlcmlvZGljKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfcGVyaW9kaWMoc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2RldiA9IHJ0Yy0+cnRjX2RldjsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXN0cnVjdCBydGNfdGFzayAqaXJxX3Rhc2s7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjIpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IyX1BFRjsKIAl0bXAgJj0gflJDUjJfUEVGOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjIpOwogCisJaWYgKCFwZW5kaW5nKQorCQlyZXR1cm4gMDsKKwogCS8qIEhhbGYgcGVyaW9kIGVuYWJsZWQgdGhhbiBvbmUgc2tpcHBlZCBhbmQgdGhlIG5leHQgbm90aWZpZWQgKi8KIAlpZiAoKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0hQKSAmJiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfQ09VTlQpKQogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX0NPVU5UOwpAQCAtMTU3LDE2ICsxNTIsNjUgQEAKIAkJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9DT1VOVDsKIAkJaWYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0tPVSkgewogCQkJc3Bpbl9sb2NrKCZydGNfZGV2LT5pcnFfdGFza19sb2NrKTsKLQkJCWlmIChydGNfZGV2LT5pcnFfdGFzaykKLQkJCQlydGNfZGV2LT5pcnFfdGFzay0+ZnVuYyhydGNfZGV2LT5pcnFfdGFzay0+cHJpdmF0ZV9kYXRhKTsKKwkJCWlycV90YXNrID0gcnRjX2Rldi0+aXJxX3Rhc2s7CisJCQlpZiAoaXJxX3Rhc2spCisJCQkJaXJxX3Rhc2stPmZ1bmMoaXJxX3Rhc2stPnByaXZhdGVfZGF0YSk7CiAJCQlzcGluX3VubG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7CiAJCX0gZWxzZQogCQkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfUEYgfCBSVENfSVJRRik7CiAJfQogCisJcmV0dXJuIHBlbmRpbmc7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19pbnRlcnJ1cHQocnRjKTsKIAlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19hbGFybShydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfcGVyaW9kaWMocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfc2hhcmVkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19pbnRlcnJ1cHQocnRjKTsKKwlyZXQgfD0gX19zaF9ydGNfYWxhcm0ocnRjKTsKKwlyZXQgfD0gX19zaF9ydGNfcGVyaW9kaWMocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ydGNfc2V0cGllKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKQEAgLTI3NSw2ICszMTksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRjaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOworCisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlpZiAoIWVuYWJsZSkKKwkJdG1wICY9IH5SQ1IxX0NJRTsKKwllbHNlCisJCXRtcCB8PSBSQ1IxX0NJRTsKKworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOworfQorCiBzdGF0aWMgaW50IHNoX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMjkxLDkgKzM1NCwxMSBAQAogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX09YUzsKKwkJc2hfcnRjX3NldGNpZShkZXYsIDApOwogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT046CiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9PWFM7CisJCXNoX3J0Y19zZXRjaWUoZGV2LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfSVJRUF9SRUFEOgogCQlyZXQgPSBwdXRfdXNlcihydGMtPnJ0Y19kZXYtPmlycV9mcmVxLApAQCAtMzU2LDE4ICs0MjEsMTcgQEAKIAkJdG0tPnRtX3NlYy0tOwogI2VuZGlmCiAKKwkvKiBvbmx5IGtlZXAgdGhlIGNhcnJ5IGludGVycnVwdCBlbmFibGVkIGlmIFVJRSBpcyBvbiAqLworCWlmICghKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykpCisJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKKwogCWRldl9kYmcoZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCiAJCV9fZnVuY19fLAogCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24gKyAxLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCi0JaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBkYXRlXG4iKTsKLQkJcnRjX3RpbWVfdG9fdG0oMCwgdG0pOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQogCiBzdGF0aWMgaW50IHNoX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC01NzIsNyArNjM2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgaW50IHRtcDsKKwlzdHJ1Y3QgcnRjX3RpbWUgcjsKIAlpbnQgcmV0OwogCiAJcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX3J0YyksIEdGUF9LRVJORUwpOwpAQCAtNTg1LDI2ICs2NDksMTIgQEAKIAlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBwZXJpb2RcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgcmVzb3VyY2VcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQogCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgY2FycnlcbiIpOwotCQlnb3RvIGVycl9iYWRyZXM7Ci0JfQotCXJ0Yy0+Y2FycnlfaXJxID0gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKLQlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgYWxhcm1cbiIpOwotCQlnb3RvIGVycl9iYWRyZXM7Ci0JfQotCXJ0Yy0+YWxhcm1faXJxID0gcmV0OworCXJ0Yy0+Y2FycnlfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlydGMtPmFsYXJtX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CiAJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgewpAQCAtNjQ2LDQ3ICs2OTYsNjYgQEAKIAl9CiAKIAlydGMtPnJ0Y19kZXYtPm1heF91c2VyX2ZyZXEgPSAyNTY7Ci0JcnRjLT5ydGNfZGV2LT5pcnFfZnJlcSA9IDE7Ci0JcnRjLT5wZXJpb2RpY19mcmVxID0gMHg2MDsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAKLQkvKiByZWdpc3RlciBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19wZXJpb2RpYywgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBwZXJpb2QiLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IHBlcmlvZCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5wZXJpb2RpY19pcnEpOwotCQlnb3RvIGVycl91bm1hcDsKKwlpZiAocnRjLT5jYXJyeV9pcnEgPD0gMCkgeworCQkvKiByZWdpc3RlciBzaGFyZWQgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxICovCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfc2hhcmVkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKKwkJCQlydGMtPnBlcmlvZGljX2lycSk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJlZ2lzdGVyIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycXMgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19wZXJpb2RpYywKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgcGVyaW9kIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBwZXJpb2QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPnBlcmlvZGljX2lycSk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBzaF9ydGNfaW50ZXJydXB0LAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBjYXJyeSIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgY2FycnkgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPmNhcnJ5X2lycSk7CisJCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5hbGFybV9pcnEsIHNoX3J0Y19hbGFybSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgYWxhcm0iLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5hbGFybV9pcnEpOworCQkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CisJCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgY2FycnkiLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IGNhcnJ5IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPmNhcnJ5X2lycSk7Ci0JCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCQlnb3RvIGVycl91bm1hcDsKKwkvKiBldmVyeXRoaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwlydGMtPnBlcmlvZGljX2ZyZXEgPSAwOworCXJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEgPSAwOworCXNoX3J0Y19zZXRwaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGFpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0Y2llKCZwZGV2LT5kZXYsIDApOworCisJLyogcmVzZXQgcnRjIHRvIGVwb2NoIDAgaWYgdGltZSBpcyBpbnZhbGlkICovCisJaWYgKHJ0Y19yZWFkX3RpbWUocnRjLT5ydGNfZGV2LCAmcikgPCAwKSB7CisJCXJ0Y190aW1lX3RvX3RtKDAsICZyKTsKKwkJcnRjX3NldF90aW1lKHJ0Yy0+cnRjX2RldiwgJnIpOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgYWxhcm0iLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPmFsYXJtX2lycSk7Ci0JCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOwotCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCi0JdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7Ci0JdG1wICY9IH5SQ1IxX0NGOwotCXRtcCB8PSBSQ1IxX0NJRTsKLQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQorCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubWFwOgpAQCAtNzA4LDEwICs3NzcsMTMgQEAKIAogCXNoX3J0Y19zZXRwaWUoJnBkZXYtPmRldiwgMCk7CiAJc2hfcnRjX3NldGFpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0Y2llKCZwZGV2LT5kZXYsIDApOwogCi0JZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CiAJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JZnJlZV9pcnEocnRjLT5hbGFybV9pcnEsIHJ0Yyk7CisJaWYgKHJ0Yy0+Y2FycnlfaXJxID4gMCkgeworCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKKwkJZnJlZV9pcnEocnRjLT5hbGFybV9pcnEsIHJ0Yyk7CisJfQogCiAJcmVsZWFzZV9yZXNvdXJjZShydGMtPnJlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCmluZGV4IGFkMzVmNzYuLmE2MzQxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHR3bDQwMzBfcnRjX2ludGVycnVwdCwKIAkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBpcyBub3QgZnJlZS5cbiIpOwogCQlnb3RvIG91dDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKaW5kZXggZDBlYWU1OS4uOTViY2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBTLzM5MCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycwogIwogCi1DRkxBR1Nfc3lzaW5mby5vICs9IC1JaW5jbHVkZS9tYXRoLWVtdSAtSWFyY2gvczM5MC9tYXRoLWVtdSAtdwotCi1vYmoteSArPSBzMzkwbWFjaC5vIHN5c2luZm8ubwogb2JqLXkgKz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIGt2bS8KIAogZHJpdmVycy15ICs9IGRyaXZlcnMvczM5MC9idWlsdC1pbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCAwOGMyM2E5Li4yZmQ2NGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTksNiArOSw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjIsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KICNpbmNsdWRlIDxhc20vdG9kY2xrLmg+CisjaW5jbHVkZSA8YXNtL2l0Y3cuaD4KIAogLyogVGhpcyBpcyB1Z2x5Li4uICovCiAjZGVmaW5lIFBSSU5US19IRUFERVIgImRhc2Q6IgpAQCAtMjIxLDcgKzIyNSw3IEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCS8qIHJlZ2lzdGVyICdkZXZpY2UnIGRlYnVnIGFyZWEsIHVzZWQgZm9yIGFsbCBEQkZfREVWX1hYWCBjYWxscyAqLwotCWRldmljZS0+ZGVidWdfYXJlYSA9IGRlYnVnX3JlZ2lzdGVyKGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIDEsIDEsCisJZGV2aWNlLT5kZWJ1Z19hcmVhID0gZGVidWdfcmVnaXN0ZXIoZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgNCwgMSwKIAkJCQkJICAgIDggKiBzaXplb2YobG9uZykpOwogCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGV2aWNlLT5kZWJ1Z19hcmVhLCAmZGVidWdfc3ByaW50Zl92aWV3KTsKIAlkZWJ1Z19zZXRfbGV2ZWwoZGV2aWNlLT5kZWJ1Z19hcmVhLCBEQkZfV0FSTklORyk7CkBAIC03NjIsNyArNzY2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2aWNlID0gY3FyLT5zdGFydGRldjsKIAlpZiAoc3RybmNtcCgoY2hhciAqKSAmY3FyLT5tYWdpYywgZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCA0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICIgZGFzZF9jY3dfcmVxIDB4JTA4eCBtYWdpYyBkb2Vzbid0IG1hdGNoIgogCQkJICAgICIgZGlzY2lwbGluZSAweCUwOHgiLAogCQkJICAgIGNxci0+bWFnaWMsCkBAIC03ODIsNiArNzg2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmV0cmllcywgcmM7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAkvKiBDaGVjayB0aGUgY3FyICovCiAJcmMgPSBkYXNkX2NoZWNrX2NxcihjcXIpOwpAQCAtODE1LDEwICs4MjAsMTAgQEAKIAkJCQkgICAgICAiZGV2aWNlIGJ1c3ksIHJldHJ5IGxhdGVyIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJsaW5lICVkIHVua25vd24gUkM9JWQsIHBsZWFzZSAiCi0JCQkJICAgICJyZXBvcnQgdG8gbGludXgzOTBAZGUuaWJtLmNvbSIsCi0JCQkJICAgIF9fTElORV9fLCByYyk7CisJCQkvKiBpbnRlcm5hbCBlcnJvciAxMCAtIHVua25vd24gcmMqLworCQkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTAgJWQiLCByYyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSAiCisJCQkJIkRBU0QgZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCQlCVUcoKTsKIAkJCWJyZWFrOwogCQl9CkBAIC04MzYsNiArODQxLDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmM7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAkvKiBDaGVjayB0aGUgY3FyICovCiAJcmMgPSBkYXNkX2NoZWNrX2NxcihjcXIpOwpAQCAtODQzLDE3ICs4NDksMjMgQEAKIAkJcmV0dXJuIHJjOwogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoY3FyLT5yZXRyaWVzIDwgMCkgewotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCi0JCQkgICAgInN0YXJ0X0lPOiByZXF1ZXN0ICVwICglMDJ4LyVpKSAtIG5vIHJldHJ5IGxlZnQuIiwKLQkJCSAgICBjcXIsIGNxci0+c3RhdHVzLCBjcXItPnJldHJpZXMpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxNCAtIHN0YXJ0X0lPIHJ1biBvdXQgb2YgcmV0cmllcyAqLworCQlzcHJpbnRmKGVycm9yc3RyaW5nLCAiMTQgJXAiLCBjcXIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9FUlJPUjsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWNxci0+c3RhcnRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXJ0dGltZSA9IGppZmZpZXM7CiAJY3FyLT5yZXRyaWVzLS07Ci0JcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsIChsb25nKSBjcXIsCi0JCQkgICAgICBjcXItPmxwbSwgMCk7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJcmMgPSBjY3dfZGV2aWNlX3RtX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCisJCQkJCSAobG9uZykgY3FyLCBjcXItPmxwbSk7CisJfSBlbHNlIHsKKwkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCisJCQkJICAgICAgKGxvbmcpIGNxciwgY3FyLT5scG0sIDApOworCX0KIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0lOX0lPOwpAQCAtODYyLDExICs4NzQsMTEgQEAKIAkJCSAgICAgIGNxcik7CiAJCWJyZWFrOwogCWNhc2UgLUVCVVNZOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogZGV2aWNlIGJ1c3ksIHJldHJ5IGxhdGVyIik7CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FRE9VVDoKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHJlcXVlc3QgdGltZW91dCwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUFDQ0VTOgpAQCAtODc2LDE5ICs4ODgsMjQgQEAKIAkJICogRG8gYSByZXRyeSB3aXRoIGFsbCBhdmFpbGFibGUgcGF0aGVzLgogCQkgKi8KIAkJY3FyLT5scG0gPSBMUE1fQU5ZUEFUSDsKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHNlbGVjdGVkIHBhdGhlcyBnb25lLCIKIAkJCSAgICAgICIgcmV0cnkgb24gYWxsIHBhdGhlcyIpOwogCQlicmVhazsKIAljYXNlIC1FTk9ERVY6CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAic3RhcnRfSU86IC1FTk9ERVYgZGV2aWNlIGdvbmUsIHJldHJ5Iik7CisJCWJyZWFrOwogCWNhc2UgLUVJTzoKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgICAic3RhcnRfSU86IGRldmljZSBnb25lLCByZXRyeSIpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgInN0YXJ0X0lPOiAtRUlPIGRldmljZSBnb25lLCByZXRyeSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJsaW5lICVkIHVua25vd24gUkM9JWQsIHBsZWFzZSByZXBvcnQiCi0JCQkgICAgIiB0byBsaW51eDM5MEBkZS5pYm0uY29tIiwgX19MSU5FX18sIHJjKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTEgLSB1bmtub3duIHJjICovCisJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjExICVkIiwgcmMpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCUJVRygpOwogCQlicmVhazsKIAl9CkBAIC05NDUsNyArOTYyLDcgQEAKIAkJcmV0dXJuOwogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGludHBhcm07CiAJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywKKwkJREJGX0VWRU5UKERCRl9ERUJVRywKIAkJCSJpbnZhbGlkIHN0YXR1cyBpbiBoYW5kbGVfa2lsbGVkX3JlcXVlc3Q6ICIKIAkJCSJidXNfaWQgJXMsIHN0YXR1cyAlMDJ4IiwKIAkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CkBAIC05NTYsOCArOTczLDggQEAKIAlpZiAoZGV2aWNlID09IE5VTEwgfHwKIAkgICAgZGV2aWNlICE9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2RldikgfHwKIAkgICAgc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiBidXNfaWQgJXMiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogIgorCQkJICAgICAgImJ1c19pZCAlcyIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTk2LDExICsxMDEzLDExIEBACiAJCWNhc2UgLUVJTzoKIAkJCWJyZWFrOwogCQljYXNlIC1FVElNRURPVVQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzKCVzKTogcmVxdWVzdCB0aW1lZCBvdXRcbiIsCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyglcyk6IHJlcXVlc3QgdGltZWQgb3V0XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXMoJXMpOiB1bmtub3duIGVycm9yICVsZFxuIiwKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIiVzKCVzKTogdW5rbm93biBlcnJvciAlbGRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBQVFJfRVJSKGlyYikpOwogCQl9CiAJCWRhc2RfaGFuZGxlX2tpbGxlZF9yZXF1ZXN0KGNkZXYsIGludHBhcm0pOwpAQCAtMTAwOSwxNSArMTAyNiwxMSBAQAogCiAJbm93ID0gZ2V0X2Nsb2NrKCk7CiAKLQlEQkZfRVZFTlQoREJGX0VSUiwgIkludGVycnVwdDogYnVzX2lkICVzIENTL0RTICUwNHggaXAgJTA4eCIsCi0JCSAgZGV2X25hbWUoJmNkZXYtPmRldiksICgoaXJiLT5zY3N3LmNtZC5jc3RhdCA8PCA4KSB8Ci0JCSAgaXJiLT5zY3N3LmNtZC5kc3RhdCksICh1bnNpZ25lZCBpbnQpIGludHBhcm0pOwotCiAJLyogY2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KIAljcXIgPSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKSBpbnRwYXJtOwotCWlmICghY3FyIHx8ICgoaXJiLT5zY3N3LmNtZC5jYyA9PSAxKSAmJgotCQkgICAgIChpcmItPnNjc3cuY21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKLQkJICAgICAoaXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgeworCWlmICghY3FyIHx8ICgoc2Nzd19jYygmaXJiLT5zY3N3KSA9PSAxKSAmJgorCQkgICAgIChzY3N3X2ZjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKKwkJICAgICAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgewogCQlpZiAoY3FyICYmIGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPKQogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2Rldik7CkBAIC0xMDMzLDE0ICsxMDQ2LDE0IEBACiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmICghZGV2aWNlIHx8CiAJICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogYnVzX2lkICVzIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6ICIKKwkJCSAgICAgICJidXNfaWQgJXMiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgY2xlYXIgcGVuZGluZyAqLwogCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9DTEVBUl9QRU5ESU5HICYmCi0JICAgIGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CisJICAgIHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfQ0xFQVJFRDsKIAkJZGFzZF9kZXZpY2VfY2xlYXJfdGltZXIoZGV2aWNlKTsKIAkJd2FrZV91cCgmZGFzZF9mbHVzaF93cSk7CkBAIC0xMDQ4LDE5ICsxMDYxLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLSAJLyogY2hlY2sgc3RhdHVzIC0gdGhlIHJlcXVlc3QgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZCBieSBkeW4gZGV0YWNoICovCisJLyogY2hlY2sgc3RhdHVzIC0gdGhlIHJlcXVlc3QgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZCBieSBkeW4gZGV0YWNoICovCiAJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywKLQkJCSJpbnZhbGlkIHN0YXR1czogYnVzX2lkICVzLCBzdGF0dXMgJTAyeCIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBzdGF0dXM6IGJ1c19pZCAlcywgIgorCQkJICAgICAgInN0YXR1cyAlMDJ4IiwgZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KLQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiSW50OiBDUy9EUyAweCUwNHggZm9yIGNxciAlcCIsCi0JCSAgICAgICgoaXJiLT5zY3N3LmNtZC5jc3RhdCA8PCA4KSB8IGlyYi0+c2Nzdy5jbWQuZHN0YXQpLCBjcXIpOworCiAJbmV4dCA9IE5VTEw7CiAJZXhwaXJlcyA9IDA7Ci0JaWYgKGlyYi0+c2Nzdy5jbWQuZHN0YXQgPT0gKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSAmJgotCSAgICBpcmItPnNjc3cuY21kLmNzdGF0ID09IDAgJiYgIWlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwlpZiAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCisJICAgIHNjc3dfY3N0YXQoJmlyYi0+c2NzdykgPT0gMCkgewogCQkvKiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfU1VDQ0VTUzsKIAkJY3FyLT5zdG9wY2xrID0gbm93OwpAQCAtMTA3MSwxOCArMTA4MiwyMyBAQAogCQl9CiAJfSBlbHNlIHsgIC8qIGVycm9yICovCiAJCW1lbWNweSgmY3FyLT5pcmIsIGlyYiwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKKwkJLyogbG9nIHNlbnNlIGZvciBldmVyeSBmYWlsZWQgSS9PIHRvIHMzOTAgZGVidWdmZWF0dXJlICovCisJCWRhc2RfbG9nX3NlbnNlX2RiZihjcXIsIGlyYik7CiAJCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkJZGFzZF9sb2dfc2Vuc2UoY3FyLCBpcmIpOwogCQl9CisKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3Qgd2FudCBjb21wbGV4IEVSUCBmb3IgdGhpcyByZXF1ZXN0LCB0aGVuIGp1c3QKIAkJICogcmVzZXQgdGhpcyBhbmQgcmV0cnkgaXQgaW4gdGhlIGZhc3RwYXRoCiAJCSAqLwogCQlpZiAoIXRlc3RfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKSAmJgogCQkgICAgY3FyLT5yZXRyaWVzID4gMCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAotCQkJCSAgICAiZGVmYXVsdCBFUlAgaW4gZmFzdHBhdGggKCVpIHJldHJpZXMgbGVmdCkiLAotCQkJCSAgICBjcXItPnJldHJpZXMpOworCQkJaWYgKGNxci0+bHBtID09IExQTV9BTllQQVRIKQorCQkJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCisJCQkJCSAgICAgICJkZWZhdWx0IEVSUCBpbiBmYXN0cGF0aCAiCisJCQkJCSAgICAgICIoJWkgcmV0cmllcyBsZWZ0KSIsCisJCQkJCSAgICAgIGNxci0+cmV0cmllcyk7CiAJCQljcXItPmxwbSAgICA9IExQTV9BTllQQVRIOwogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCQluZXh0ID0gY3FyOwpAQCAtMTA5MywxMCArMTEwOSw2IEBACiAJICAgICghZGV2aWNlLT5zdG9wcGVkKSkgewogCQlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT5zdGFydF9JTyhuZXh0KSA9PSAwKQogCQkJZXhwaXJlcyA9IG5leHQtPmV4cGlyZXM7Ci0JCWVsc2UKLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkludGVycnVwdCBmYXN0cGF0aCAiCi0JCQkJICAgICJmYWlsZWQhIik7CiAJfQogCWlmIChleHBpcmVzICE9IDApCiAJCWRhc2RfZGV2aWNlX3NldF90aW1lcihkZXZpY2UsIGV4cGlyZXMpOwpAQCAtMTE2OSw2ICsxMTgxLDcgQEAKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CiAJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgZGFzZF9jY3dfcmVxICosIHZvaWQgKmRhdGEpOwogCXZvaWQgKmNhbGxiYWNrX2RhdGE7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgZmluYWxfcXVldWUpIHsKIAkJY3FyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKQEAgLTExODksMTAgKzEyMDIsMTEgQEAKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfVEVSTUlOQVRFRDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIndyb25nIGNxciBzdGF0dXMgaW4gX19kYXNkX3Byb2Nlc3NfZmluYWxfcXVldWUgIgotCQkJCSAgICAiZm9yIGNxciAlcCwgc3RhdHVzICV4IiwKLQkJCQkgICAgY3FyLCBjcXItPnN0YXR1cyk7CisJCQkvKiBpbnRlcm5hbCBlcnJvciAxMiAtIHdyb25nIGNxciBzdGF0dXMqLworCQkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTIgJXAgJXgwMiIsIGNxciwgY3FyLT5zdGF0dXMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCQkicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCQlCVUcoKTsKIAkJfQogCQlpZiAoY3FyLT5jYWxsYmFjayAhPSBOVUxMKQpAQCAtMTIxNywxOCArMTIzMSwxNyBAQAogCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBjcXItPmV4cGlyZXMgKyBjcXItPnN0YXJ0dGltZSkpKSB7CiAJCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKSAhPSAwKSB7CiAJCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gNSBzZWMgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJpbnRlcm5hbCBlcnJvciAtIHRpbWVvdXQgKCVpcykgZXhwaXJlZCAiCi0JCQkJICAgICJmb3IgY3FyICVwLCB0ZXJtaW5hdGlvbiBmYWlsZWQsICIKLQkJCQkgICAgInJldHJ5aW5nIGluIDVzIiwKLQkJCQkgICAgKGNxci0+ZXhwaXJlcy9IWiksIGNxcik7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiY3FyICVwIHRpbWVkIG91dCAoJWlzKSBidXQgY2Fubm90IGJlICIKKwkJCQkiZW5kZWQsIHJldHJ5aW5nIGluIDUgc1xuIiwKKwkJCQljcXIsIChjcXItPmV4cGlyZXMvSFopKTsKIAkJCWNxci0+ZXhwaXJlcyArPSA1KkhaOwogCQkJZGFzZF9kZXZpY2Vfc2V0X3RpbWVyKGRldmljZSwgNSpIWik7CiAJCX0gZWxzZSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiaW50ZXJuYWwgZXJyb3IgLSB0aW1lb3V0ICglaXMpIGV4cGlyZWQgIgotCQkJCSAgICAiZm9yIGNxciAlcCAoJWkgcmV0cmllcyBsZWZ0KSIsCi0JCQkJICAgIChjcXItPmV4cGlyZXMvSFopLCBjcXIsIGNxci0+cmV0cmllcyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiY3FyICVwIHRpbWVkIG91dCAoJWlzKSwgJWkgcmV0cmllcyAiCisJCQkJInJlbWFpbmluZ1xuIiwgY3FyLCAoY3FyLT5leHBpcmVzL0haKSwKKwkJCQljcXItPnJldHJpZXMpOwogCQl9CiAJfQogfQpAQCAtMTI5MCwxMCArMTMwMyw5IEBACiAJCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwogCQkJaWYgKHJjKSB7CiAJCQkJLyogdW5hYmxlIHRvIHRlcm1pbmF0ZSByZXF1ZXVzdCAqLwotCQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJCSAgICAiZGFzZCBmbHVzaCBjY3dfcXVldWUgaXMgdW5hYmxlICIKLQkJCQkJICAgICIgdG8gdGVybWluYXRlIHJlcXVlc3QgJXAiLAotCQkJCQkgICAgY3FyKTsKKwkJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJIkZsdXNoaW5nIHRoZSBEQVNEIHJlcXVlc3QgcXVldWUgIgorCQkJCQkiZmFpbGVkIGZvciByZXF1ZXN0ICVwXG4iLCBjcXIpOwogCQkJCS8qIHN0b3AgZmx1c2ggcHJvY2Vzc2luZyAqLwogCQkJCWdvdG8gZmluaXNoZWQ7CiAJCQl9CkBAIC0xNTM3LDEwICsxNTQ5LDkgQEAKIAkJLyogcmVxdWVzdCBpbiBJTyAtIHRlcm1pbmF0ZSBJTyBhbmQgcmVsZWFzZSBhZ2FpbiAqLwogCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwogCQlpZiAocmMpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJkYXNkX2NhbmNlbF9yZXEgaXMgdW5hYmxlICIKLQkJCQkgICAgIiB0byB0ZXJtaW5hdGUgcmVxdWVzdCAlcCwgcmMgPSAlZCIsCi0JCQkJICAgIGNxciwgcmMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkNhbmNlbGxpbmcgcmVxdWVzdCAlcCBmYWlsZWQgd2l0aCByYz0lZFxuIiwKKwkJCQljcXIsIHJjKTsKIAkJfSBlbHNlIHsKIAkJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwogCQkJcmMgPSAxOwpAQCAtMTYxNyw3ICsxNjI4LDcgQEAKIAlpZiAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfRE9ORSkKIAkJREJGX0RFVl9FVkVOVChEQkZfTk9USUNFLCBkZXZpY2UsICIlcyIsICJFUlAgc3VjY2Vzc2Z1bCIpOwogCWVsc2UKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIkVSUCB1bnN1Y2Nlc3NmdWwiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJFUlAgZmFpbGVkIGZvciB0aGUgREFTRFxuIik7CiAJZXJwX2ZuID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5lcnBfcG9zdGFjdGlvbihjcXIpOwogCWVycF9mbihjcXIpOwogfQpAQCAtMTk5MSw4ICsyMDAyLDExIEBACiAJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBtYXgpOwogCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOworCS8qIHdpdGggcGFnZSBzaXplZCBzZWdtZW50cyB3ZSBjYW4gdHJhbnNsYXRlIGVhY2ggc2VnZW1lbnQgaW50bworCSAqIG9uZSBpZGF3L3RpZGF3CisJICovCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSk7CisJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSAtIDEpOwogCWJsa19xdWV1ZV9vcmRlcmVkKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKIH0KIApAQCAtMjA0Myw4ICsyMDU3LDkgQEAKIAl9CiAKIAlpZiAoZGFzZF9wcm9iZW9ubHkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBiYXNlLCAiJXMiLAotCQkJICAgICJObyBhY2Nlc3MgdG8gZGV2aWNlIGR1ZSB0byBwcm9iZW9ubHkgbW9kZSIpOworCQlkZXZfaW5mbygmYmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UgaXQgaXMgaW4gIgorCQkJICJwcm9iZW9ubHkgbW9kZVxuIik7CiAJCXJjID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTAxLDcgKzIxMTYsOCBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBkYXNkX29wZW4sCiAJLnJlbGVhc2UJPSBkYXNkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAk9IGRhc2RfaW9jdGwsCisJLmlvY3RsCQk9IGRhc2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IGRhc2RfaW9jdGwsCiAJLmdldGdlbwkJPSBkYXNkX2dldGdlbywKIH07CiAKQEAgLTIxNDMsMTQgKzIxNTksMTQgQEAKIAogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoY2RldiwgQ0NXREVWX0RPX1BBVEhHUk9VUCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBzZXQgY2N3LWRldmljZSBvcHRpb25zICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gZGFzZF9hZGRfc3lzZnNfZmlsZXMoY2Rldik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBhZGQgc3lzZnMgZW50cmllcyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CkBAIC0yMTY2LDkgKzIxODIsNyBAQAogCSAgICAoZGFzZF9hdXRvZGV0ZWN0ICYmIGRhc2RfYnVzaWRfa25vd24oZGV2X25hbWUoJmNkZXYtPmRldikpICE9IDApKQogCQlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2Rldik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IGluaXRpYWxseSAiCi0JCSAgICAgICAib25saW5lIGNjdy1kZXZpY2UgJXM7IHJldHVybiBjb2RlOiAlZFxuIiwKKwkJcHJfd2FybmluZygiJXM6IFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAogCQkgICAgICAgZGV2X25hbWUoJmNkZXYtPmRldiksIHJldCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjMyLDEwICsyMjQ2LDkgQEAKIAlkaXNjaXBsaW5lID0gYmFzZV9kaXNjaXBsaW5lOwogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRURJQUcpIHsKIAkgIAlpZiAoIWRhc2RfZGlhZ19kaXNjaXBsaW5lX3BvaW50ZXIpIHsKLQkJICAgICAgICBwcmludGsgKEtFUk5fV0FSTklORwotCQkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCi0JCQkJIi0gZGlzY2lwbGluZSBESUFHIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIGJlY2F1c2UgIgorCQkJCSAgICJvZiBtaXNzaW5nIERJQUcgZGlzY2lwbGluZVxuIiwKKwkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC0yMjU2LDEwICsyMjY5LDkgQEAKIAkvKiBjaGVja19kZXZpY2Ugd2lsbCBhbGxvY2F0ZSBibG9jayBkZXZpY2UgaWYgbmVjZXNzYXJ5ICovCiAJcmMgPSBkaXNjaXBsaW5lLT5jaGVja19kZXZpY2UoZGV2aWNlKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCi0JCQkid2l0aCBkaXNjaXBsaW5lICVzIHJjPSVpXG4iLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGRpc2NpcGxpbmUtPm5hbWUsIHJjKTsKKwkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgd2l0aCBkaXNjaXBsaW5lICVzICIKKwkJCSAgICJmYWlsZWQgd2l0aCByYz0laVxuIiwKKwkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBkaXNjaXBsaW5lLT5uYW1lLCByYyk7CiAJCW1vZHVsZV9wdXQoZGlzY2lwbGluZS0+b3duZXIpOwogCQltb2R1bGVfcHV0KGJhc2VfZGlzY2lwbGluZS0+b3duZXIpOwogCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKQEAgLTIyNjgsOSArMjI4MCw4IEBACiAKIAlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX09OTElORSk7CiAJaWYgKGRldmljZS0+c3RhdGUgPD0gREFTRF9TVEFURV9LTk9XTikgewotCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJImRhc2RfZ2VuZXJpYyBkaXNjaXBsaW5lIG5vdCBmb3VuZCBmb3IgJXNcbiIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCBiZWNhdXNlIG9mIGEgIgorCQkJICAgIm1pc3NpbmcgZGlzY2lwbGluZVxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShkZXZpY2UsIERBU0RfU1RBVEVfTkVXKTsKIAkJaWYgKGRldmljZS0+YmxvY2spCkBAIC0yMzE0LDEzICsyMzI1LDEzIEBACiAJCW9wZW5fY291bnQgPSBhdG9taWNfcmVhZCgmZGV2aWNlLT5ibG9jay0+b3Blbl9jb3VudCk7CiAJCWlmIChvcGVuX2NvdW50ID4gbWF4X2NvdW50KSB7CiAJCQlpZiAob3Blbl9jb3VudCA+IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkICIKLQkJCQkgICAgICAgImRldmljZSB3aXRoIG9wZW4gY291bnQgPSAlaS5cbiIsCi0JCQkJICAgICAgIG9wZW5fY291bnQpOworCQkJCXByX3dhcm5pbmcoIiVzOiBUaGUgREFTRCBjYW5ub3QgYmUgc2V0IG9mZmxpbmUgIgorCQkJCQkgICAid2l0aCBvcGVuIGNvdW50ICVpXG4iLAorCQkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgb3Blbl9jb3VudCk7CiAJCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLAotCQkJCSAgICAgICAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSBkdWUgIgotCQkJCSAgICAgICAidG8gaW50ZXJuYWwgdXNlXG4iKTsKKwkJCQlwcl93YXJuaW5nKCIlczogVGhlIERBU0QgY2Fubm90IGJlIHNldCBvZmZsaW5lICIKKwkJCQkJICAgIndoaWxlIGl0IGlzIGluIHVzZVxuIiwKKwkJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJY2xlYXJfYml0KERBU0RfRkxBR19PRkZMSU5FLCAmZGV2aWNlLT5mbGFncyk7CiAJCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC0yMzkzLDggKzI0MDQsMTAgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChtYWdpYywgMSAvKiBSREMgKi8sIHJkY19idWZmZXJfc2l6ZSwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJEQyByZXF1ZXN0Iik7CisJCS8qIGludGVybmFsIGVycm9yIDEzIC0gQWxsb2NhdGluZyB0aGUgUkRDIHJlcXVlc3QgZmFpbGVkKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSAicmVhc29uPSVzXG4iLCAiMTMiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAKQEAgLTI0MzEsNiArMjQ0NCw0MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKTsKIAorLyoKKyAqICAgSW4gY29tbWFuZCBtb2RlIGFuZCB0cmFuc3BvcnQgbW9kZSB3ZSBuZWVkIHRvIGxvb2sgZm9yIHNlbnNlCisgKiAgIGRhdGEgaW4gZGlmZmVyZW50IHBsYWNlcy4gVGhlIHNlbnNlIGRhdGEgaXRzZWxmIGlzIGFsbHdheXMKKyAqICAgYW4gYXJyYXkgb2YgMzIgYnl0ZXMsIHNvIHdlIGNhbiB1bmlmeSB0aGUgc2Vuc2UgZGF0YSBhY2Nlc3MKKyAqICAgZm9yIGJvdGggbW9kZXMuCisgKi8KK2NoYXIgKmRhc2RfZ2V0X3NlbnNlKHN0cnVjdCBpcmIgKmlyYikKK3sKKwlzdHJ1Y3QgdHNiICp0c2IgPSBOVUxMOworCWNoYXIgKnNlbnNlID0gTlVMTDsKKworCWlmIChzY3N3X2lzX3RtKCZpcmItPnNjc3cpICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQlpZiAoaXJiLT5zY3N3LnRtLnRjdykKKwkJCXRzYiA9IHRjd19nZXRfdHNiKChzdHJ1Y3QgdGN3ICopKHVuc2lnbmVkIGxvbmcpCisJCQkJCSAgaXJiLT5zY3N3LnRtLnRjdyk7CisJCWlmICh0c2IgJiYgdHNiLT5sZW5ndGggPT0gNjQgJiYgdHNiLT5mbGFncykKKwkJCXN3aXRjaCAodHNiLT5mbGFncyAmIDB4MDcpIHsKKwkJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJCXNlbnNlID0gdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiB0c2FfZGRwYyAqLworCQkJCXNlbnNlID0gdHNiLT50c2EuZGRwYy5zZW5zZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogY3VycmVudGx5IHdlIGRvbid0IHVzZSBpbnRlcnJvZ2F0ZSBkYXRhICovCisJCQkJYnJlYWs7CisJCQl9CisJfSBlbHNlIGlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKSB7CisJCXNlbnNlID0gaXJiLT5lY3c7CisJfQorCXJldHVybiBzZW5zZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2V0X3NlbnNlKTsKKwogc3RhdGljIGludCBfX2luaXQgZGFzZF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwpAQCAtMjQ3Miw3ICsyNTE5LDcgQEAKIAogCXJldHVybiAwOwogZmFpbGVkOgotCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiaW5pdGlhbGl6YXRpb24gbm90IHBlcmZvcm1lZCBkdWUgdG8gZXJyb3JzIik7CisJcHJfaW5mbygiVGhlIERBU0QgZGV2aWNlIGRyaXZlciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOwogCWRhc2RfZXhpdCgpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCmluZGV4IGQ4MmFhZDUyLi4yNzk5MWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTcsNiArNyw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KQEAgLTc1LDcgKzc3LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwKIAkJICAgICJibG9ja2luZyByZXF1ZXN0IHF1ZXVlIGZvciAlaXMiLCBleHBpcmVzL0haKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xMTQsOSArMTE2LDkgQEAKIAl9IGVsc2UgewogCiAJCS8qIGlzc3VlIGEgbWVzc2FnZSBhbmQgd2FpdCBmb3IgJ2RldmljZSByZWFkeScgaW50ZXJydXB0ICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJICAgICJpcyBvZmZsaW5lIG9yIG5vdCBpbnN0YWxsZWQgLSAiCi0JCQkgICAgIklOVEVSVkVOVElPTiBSRVFVSVJFRCEhIik7CisJCQkgICAgIklOVEVSVkVOVElPTiBSRVFVSVJFRCEhXG4iKTsKIAogCQlkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlKGVycCwgNjAqSFopOwogCX0KQEAgLTE1OCw3ICsxNjAsNyBAQAogCiAJaWYgKChlcnAtPmxwbSAmIG9wbSkgIT0gMHgwMCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICJ0cnkgYWx0ZXJuYXRlIGxwbT0leCAobHB1bT0leCAvIG9wbT0leCkiLAogCQkJICAgIGVycC0+bHBtLCBlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSwgb3BtKTsKIApAQCAtMTY2LDEwICsxNjgsOSBAQAogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKIAkJZXJwLT5yZXRyaWVzID0gMTA7CiAJfSBlbHNlIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCSAgICAiTm8gYWx0ZXJuYXRlIGNoYW5uZWwgcGF0aCBsZWZ0IChscHVtPSV4IC8gIgotCQkJICAgICJvcG09JXgpIC0+IHBlcm1hbmVudCBlcnJvciIsCi0JCQkgICAgZXJwLT5pcmIuZXN3LmVzdzAuc3VibG9nLmxwdW0sIG9wbSk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIlRoZSBEQVNEIGNhbm5vdCBiZSByZWFjaGVkIG9uIGFueSBwYXRoIChscHVtPSV4IgorCQkJIi9vcG09JXgpXG4iLCBlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSwgb3BtKTsKIAogCQkvKiBwb3N0IHJlcXVlc3Qgd2l0aCBwZXJtYW5lbnQgZXJyb3IgKi8KIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CkBAIC0yMDQsOCArMjA1LDggQEAKIAkJCQkJICBzaXplb2Yoc3RydWN0IERDVExfZGF0YSksCiAJCQkJCSAgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGRjdGxfY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgRENUTC1DUVIiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBEQ1RMLUNRUlxuIik7CiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCQlyZXR1cm4gZXJwOwogCX0KQEAgLTI5NCw3ICsyOTUsNyBAQAogCS8qIGludGVycnVwdCAodGhpcyBlbmFibGVzIGVhc2llciBlbnF1ZWluZyBvZiB0aGUgY3FyKQkgICAgKi8KIAlpZiAoZXJwLT5mdW5jdGlvbiAhPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwgIiVzIiwKIAkJCSAgICAiZGFzZF8zOTkwX2VycF9hY3Rpb25fNDogZmlyc3QgdGltZSByZXRyeSIpOwogCiAJCWVycC0+cmV0cmllcyA9IDI1NjsKQEAgLTMwMyw3ICszMDQsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChzZW5zZSAmJiAoc2Vuc2VbMjVdID09IDB4MUQpKSB7IC8qIHN0YXRlIGNoYW5nZSBwZW5kaW5nICovCiAKLQkJCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkJCSAgICAid2FpdGluZyBmb3Igc3RhdGUgY2hhbmdlIHBlbmRpbmcgIgogCQkJCSAgICAiaW50ZXJydXB0LCAlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICBlcnAtPnJldHJpZXMpOwpAQCAtMzExLDE1ICszMTIsMTQgQEAKIAkJCWRhc2RfMzk5MF9lcnBfYmxvY2tfcXVldWUoZXJwLCAzMCpIWik7CiAKIAkJfSBlbHNlIGlmIChzZW5zZSAmJiAoc2Vuc2VbMjVdID09IDB4MUUpKSB7CS8qIGJ1c3kgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkJCSAgICAiYnVzeSAtIHJlZHJpdmluZyByZXF1ZXN0IGxhdGVyLCAiCiAJCQkJICAgICIlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICBlcnAtPnJldHJpZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIEhaKTsKIAkJfSBlbHNlIHsKLQogCQkJLyogbm8gc3RhdGUgY2hhbmdlIHBlbmRpbmcgLSByZXRyeSAqLwotCQkJREVWX01FU1NBR0UgKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkJCSAgICAgInJlZHJpdmluZyByZXF1ZXN0IGltbWVkaWF0ZWx5LCAiCiAJCQkJICAgICAiJWQgcmV0cmllcyBsZWZ0IiwKIAkJCQkgICAgIGVycC0+cmV0cmllcyk7CkBAIC0zODQsNiArMzg0LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAJY2hhciBtc2dfZm9ybWF0ID0gKHNlbnNlWzddICYgMHhGMCk7CiAJY2hhciBtc2dfbm8gPSAoc2Vuc2VbN10gJiAweDBGKTsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCXN3aXRjaCAobXNnX2Zvcm1hdCkgewogCWNhc2UgMHgwMDoJCS8qIEZvcm1hdCAwIC0gUHJvZ3JhbSBvciBTeXN0ZW0gQ2hlY2tzICovCkBAIC0zOTQsOTUgKzM5NSw5NyBAQAogCQkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDE6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIENvbW1hbmQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIENvbW1hbmRcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAyOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgQ29tbWFuZCAiCi0JCQkJCSAgICAiU2VxdWVuY2UiKTsKKwkJCQkJICAgICJTZXF1ZW5jZVxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDM6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ0NXIENvdW50IGxlc3MgdGhhbiAiCi0JCQkJCSAgICAicmVxdWlyZWQiKTsKKwkJCQkJICAgICJyZXF1aXJlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIFBhcmFtZXRlciIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgUGFyYW1ldGVyXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIERpYWdub3N0aWMgb2YgU2VwZWNpYWwiCi0JCQkJCSAgICAiIENvbW1hbmQgVmlvbGF0ZXMgRmlsZSBNYXNrIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gRGlhZ25vc3RpYyBvZiBTcGVjaWFsIgorCQkJCQkgICAgIiBDb21tYW5kIFZpb2xhdGVzIEZpbGUgTWFza1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDc6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ2hhbm5lbCBSZXR1cm5lZCB3aXRoICIKLQkJCQkJICAgICJJbmNvcnJlY3QgcmV0cnkgQ0NXIik7CisJCQkJCSAgICAiSW5jb3JyZWN0IHJldHJ5IENDV1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDg6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBSZXNldCBOb3RpZmljYXRpb24iKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNldCBOb3RpZmljYXRpb25cbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA5OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gU3RvcmFnZSBQYXRoIFJlc3RhcnQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAiRk9STUFUIDAgLSBTdG9yYWdlIFBhdGggUmVzdGFydFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEE6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ2hhbm5lbCByZXF1ZXN0ZWQgIgotCQkJCQkgICAgIi4uLiAlMDJ4Iiwgc2Vuc2VbOF0pOworCQkJCQkgICAgIi4uLiAlMDJ4XG4iLCBzZW5zZVs4XSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEI6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBEZWZlY3RpdmUvIgotCQkJCQkgICAgIkFsdGVybmF0ZSBUcmFjayBQb2ludGVyIik7CisJCQkJCSAgICAiQWx0ZXJuYXRlIFRyYWNrIFBvaW50ZXJcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBDOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIERQUyBJbnN0YWxsYXRpb24gIgotCQkJCQkgICAgIkNoZWNrIik7CisJCQkJCSAgICAiQ2hlY2tcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBFOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIENvbW1hbmQgSW52YWxpZCBvbiAiCi0JCQkJCSAgICAiU2Vjb25kYXJ5IEFkZHJlc3MiKTsKKwkJCQkJICAgICJTZWNvbmRhcnkgQWRkcmVzc1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEY6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gU3RhdHVzIE5vdCBBcyAiCi0JCQkJCSAgICAiUmVxdWlyZWQ6IHJlYXNvbiAlMDJ4Iiwgc2Vuc2VbOF0pOworCQkJCQkgICAgIlJlcXVpcmVkOiByZWFzb24gJTAyeFxuIiwKKwkJCQkJIHNlbnNlWzhdKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBSZXNldmVkIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWRcbiIpOwogCQkJfQogCQl9IGVsc2UgewogCQkJc3dpdGNoIChtc2dfbm8pIHsKIAkJCWNhc2UgMHgwMDoJLyogTm8gTWVzc2FnZSAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAxOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gRGV2aWNlIEVycm9yIFNvdXJjZSIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICJGT1JNQVQgMCAtIERldmljZSBFcnJvciAiCisJCQkJCSAiU291cmNlXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWRcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAzOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIERldmljZSBGZW5jZWQgLSAiCi0JCQkJCSAgICAiZGV2aWNlID0gJTAyeCIsIHNlbnNlWzRdKTsKKwkJCQkJICAgICJkZXZpY2UgPSAlMDJ4XG4iLCBzZW5zZVs0XSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gRGF0YSBQaW5uZWQgZm9yICIKLQkJCQkJICAgICJEZXZpY2UiKTsKKwkJCQkJICAgICJEZXZpY2VcbiIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWRcbiIpOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtNDkyLDM0OCArNDk1LDM1MiBAQAogCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIFN0YXR1cyAxIG5vdCBhcyAiCi0JCQkJICAgICJleHBlY3RlZCIpOworCQkJCSAgICAiZXhwZWN0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBJbmRleCBtaXNzaW5nIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIEluZGV4IG1pc3NpbmdcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBJbnRlcnJ1cHRpb24gY2Fubm90IGJlIHJlc2V0Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgMSAtIEludGVycnVwdGlvbiBjYW5ub3QgYmUgIgorCQkJCSAicmVzZXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2UgZGlkIG5vdCByZXNwb25kIHRvICIKLQkJCQkgICAgInNlbGVjdGlvbiIpOworCQkJCSAgICAic2VsZWN0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIGNoZWNrLTIgZXJyb3Igb3IgU2V0ICIKLQkJCQkgICAgIlNlY3RvciBpcyBub3QgY29tcGxldGUiKTsKKwkJCQkgICAgIlNlY3RvciBpcyBub3QgY29tcGxldGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBIZWFkIGFkZHJlc3MgZG9lcyBub3QgIgotCQkJCSAgICAiY29tcGFyZSIpOworCQkJCSAgICAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBzdGF0dXMgMSBub3QgdmFsaWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIHN0YXR1cyAxIG5vdCB2YWxpZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBub3QgcmVhZHkiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIG5vdCByZWFkeVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIFRyYWNrIHBoeXNpY2FsIGFkZHJlc3MgZGlkICIKLQkJCQkgICAgIm5vdCBjb21wYXJlIik7CisJCQkJICAgICJub3QgY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIE1pc3NpbmcgZGV2aWNlIGFkZHJlc3MgYml0Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIE1pc3NpbmcgZGV2aWNlIGFkZHJlc3MgYml0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gRHJpdmUgbW90b3Igc3dpdGNoIGlzIG9mZiIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBEcml2ZSBtb3RvciBzd2l0Y2ggaXMgb2ZmXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gU2VlayBpbmNvbXBsZXRlIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIFNlZWsgaW5jb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIEN5bGluZGVyIGFkZHJlc3MgZGlkIG5vdCAiCi0JCQkJICAgICJjb21wYXJlIik7CisJCQkJICAgICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gT2Zmc2V0IGFjdGl2ZSBjYW5ub3QgYmUgIgotCQkJCSAgICAicmVzZXQiKTsKKwkJCQkgICAgInJlc2V0XG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHgyMDoJCS8qIEZvcm1hdCAyIC0gMzk5MCBFcXVpcG1lbnQgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDIgLSAzOTkwIGNoZWNrLTIgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAyIC0gMzk5MCBjaGVjay0yIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAyIC0gU3VwcG9ydCBmYWNpbGl0eSBlcnJvcnMiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAyIC0gU3VwcG9ydCBmYWNpbGl0eSBlcnJvcnNcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJCSAgICAiRk9STUFUIDIgLSBNaWNyb2NvZGUgZGV0ZWN0ZWQgZXJyb3IgJTAyeCIsCi0JCQkJICAgIHNlbnNlWzhdKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCAyIC0gTWljcm9jb2RlIGRldGVjdGVkIGVycm9yICIKKwkJCQkgIiUwMnhcbiIsCisJCQkJIHNlbnNlWzhdKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMiAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMiAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHgzMDoJCS8qIEZvcm1hdCAzIC0gMzk5MCBDb250cm9sIENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAzIC0gQWxsZWdpYW5jZSB0ZXJtaW5hdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMyAtIEFsbGVnaWFuY2UgdGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDMgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDMgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NDA6CQkvKiBGb3JtYXQgNCAtIERhdGEgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBIb21lIGFkZHJlc3MgYXJlYSBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBIb21lIGFkZHJlc3MgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIENvdW50IGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gQ291bnQgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIEtleSBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIEtleSBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gRGF0YSBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIERhdGEgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBob21lIGFkZHJlc3MgIgotCQkJCSAgICAiYXJlYSIpOworCQkJCSAgICAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBjb3VudCBhZGRyZXNzICIKLQkJCQkgICAgImFyZWEiKTsKKwkJCQkgICAgImFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4ga2V5IGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGtleSBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGRhdGEgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gZGF0YSBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gSG9tZSBhZGRyZXNzIGFyZWEgZXJyb3I7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBDb3VudCBhcmVhIGVycm9yOyBvZmZzZXQgIgotCQkJCSAgICAiYWN0aXZlIik7CisJCQkJICAgICJhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBLZXkgYXJlYSBlcnJvcjsgb2Zmc2V0ICIKLQkJCQkgICAgImFjdGl2ZSIpOworCQkJCSAgICAiYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gRGF0YSBhcmVhIGVycm9yOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGhvbWUgIgotCQkJCSAgICAiYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW4gYnl0ZSBpbiBjb3VudCAiCi0JCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBrZXkgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBGOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5biBieXRlIGluIGRhdGEgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NTA6ICAvKiBGb3JtYXQgNSAtIERhdGEgQ2hlY2sgd2l0aCBkaXNwbGFjZW1lbnQgaW5mb3JtYXRpb24gKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlICIKLQkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhIik7CisJCQkJICAgICJob21lIGFkZHJlc3MgYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGNvdW50IGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgY291bnQgIgorCQkJCSAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGtleSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGtleSBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgZGF0YSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGRhdGEgIgorCQkJCSAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlICIKLQkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJob21lIGFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGNvdW50IGFyZWE7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBrZXkgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGRhdGEgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDUgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDUgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NjA6ICAvKiBGb3JtYXQgNiAtIFVzYWdlIFN0YXRpc3RpY3MvT3ZlcnJ1biBFcnJvcnMgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBBIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBBXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEIiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEJcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQyIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQ1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBEIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBEXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEUiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRiIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRlxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBHIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBHXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEgiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEhcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDcwOiAgLyogRm9ybWF0IDcgLSBEZXZpY2UgQ29ubmVjdGlvbiBDb250cm9sIENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUkNDIGluaXRpYXRlZCBieSBhIGNvbm5lY3Rpb24gIgotCQkJCSAgICAiY2hlY2sgYWxlcnQiKTsKKwkJCQkgICAgImNoZWNrIGFsZXJ0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUkNDIDEgc2VxdWVuY2Ugbm90ICIKLQkJCQkgICAgInN1Y2Nlc3NmdWwiKTsKKwkJCQkgICAgInN1Y2Nlc3NmdWxcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBSQ0MgMSBhbmQgUkNDIDIgc2VxdWVuY2VzIG5vdCAiCi0JCQkJICAgICJzdWNjZXNzZnVsIik7CisJCQkJICAgICJzdWNjZXNzZnVsXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCB0YWctaW4gZHVyaW5nICIKLQkJCQkgICAgInNlbGVjdGlvbiBzZXF1ZW5jZSIpOworCQkJCSAgICAic2VsZWN0aW9uIHNlcXVlbmNlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA3IC0gZXh0cmEgUkNDIHJlcXVpcmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNyAtIGV4dHJhIFJDQyByZXF1aXJlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgRENDIHNlbGVjdGlvbiAiCi0JCQkJICAgICJyZXNwb25zZSBvciB0aW1lb3V0Iik7CisJCQkJICAgICJyZXNwb25zZSBvciB0aW1lb3V0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gTWlzc2luZyBlbmQgb3BlcmF0aW9uOyBkZXZpY2UgIgotCQkJCSAgICAidHJhbnNmZXIgY29tcGxldGUiKTsKKwkJCQkgICAgInRyYW5zZmVyIGNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gTWlzc2luZyBlbmQgb3BlcmF0aW9uOyBkZXZpY2UgIgotCQkJCSAgICAidHJhbnNmZXIgaW5jb21wbGV0ZSIpOworCQkJCSAgICAidHJhbnNmZXIgaW5jb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgdGFnLWluIGZvciBhbiAiCi0JCQkJICAgICJpbW1lZGlhdGUgY29tbWFuZCBzZXF1ZW5jZSIpOworCQkJCSAgICAiaW1tZWRpYXRlIGNvbW1hbmQgc2VxdWVuY2VcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBJbnZhbGlkIHRhZy1pbiBmb3IgYW4gIgotCQkJCSAgICAiZXh0ZW5kZWQgY29tbWFuZCBzZXF1ZW5jZSIpOworCQkJCSAgICAiZXh0ZW5kZWQgY29tbWFuZCBzZXF1ZW5jZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIDM5OTAgbWljcm9jb2RlIHRpbWUgb3V0IHdoZW4gIgotCQkJCSAgICAic3RvcHBpbmcgc2VsZWN0aW9uIik7CisJCQkJICAgICJzdG9wcGluZyBzZWxlY3Rpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBObyByZXNwb25zZSB0byBzZWxlY3Rpb24gIgotCQkJCSAgICAiYWZ0ZXIgYSBwb2xsIGludGVycnVwdGlvbiIpOworCQkJCSAgICAiYWZ0ZXIgYSBwb2xsIGludGVycnVwdGlvblxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIFBlcm1hbmVudCBwYXRoIGVycm9yIChEQVNEICIKLQkJCQkgICAgImNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSkiKTsKKwkJCQkgICAgImNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSlcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBEQVNEIGNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSIKLQkJCQkgICAgIiBvbiBkaXNjb25uZWN0ZWQgY29tbWFuZCBjaGFpbiIpOworCQkJCSAgICAiIG9uIGRpc2Nvbm5lY3RlZCBjb21tYW5kIGNoYWluXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNyAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNyAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIApAQCAtODQxLDUyICs4NDgsNTIgQEAKIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBFcnJvciBjb3JyZWN0aW9uIGNvZGUgIgotCQkJCSAgICAiaGFyZHdhcmUgZmF1bHQiKTsKKwkJCQkgICAgImhhcmR3YXJlIGZhdWx0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gVW5leHBlY3RlZCBlbmQgb3BlcmF0aW9uICIKLQkJCQkgICAgInJlc3BvbnNlIGNvZGUiKTsKKwkJCQkgICAgInJlc3BvbnNlIGNvZGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBFbmQgb3BlcmF0aW9uIHdpdGggdHJhbnNmZXIgIgotCQkJCSAgICAiY291bnQgbm90IHplcm8iKTsKKwkJCQkgICAgImNvdW50IG5vdCB6ZXJvXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gRW5kIG9wZXJhdGlvbiB3aXRoIHRyYW5zZmVyICIKLQkJCQkgICAgImNvdW50IHplcm8iKTsKKwkJCQkgICAgImNvdW50IHplcm9cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBEUFMgY2hlY2tzIGFmdGVyIGEgc3lzdGVtICIKLQkJCQkgICAgInJlc2V0IG9yIHNlbGVjdGl2ZSByZXNldCIpOworCQkJCSAgICAicmVzZXQgb3Igc2VsZWN0aXZlIHJlc2V0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA4IC0gRFBTIGNhbm5vdCBiZSBmaWxsZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA4IC0gRFBTIGNhbm5vdCBiZSBmaWxsZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBTaG9ydCBidXN5IHRpbWUtb3V0IGR1cmluZyAiCi0JCQkJICAgICJkZXZpY2Ugc2VsZWN0aW9uIik7CisJCQkJICAgICJkZXZpY2Ugc2VsZWN0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gREFTRCBjb250cm9sbGVyIGZhaWxlZCB0byAiCi0JCQkJICAgICJzZXQgb3IgcmVzZXQgdGhlIGxvbmcgYnVzeSBsYXRjaCIpOworCQkJCSAgICAic2V0IG9yIHJlc2V0IHRoZSBsb25nIGJ1c3kgbGF0Y2hcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBObyBpbnRlcnJ1cHRpb24gZnJvbSBkZXZpY2UgIgotCQkJCSAgICAiZHVyaW5nIGEgY29tbWFuZCBjaGFpbiIpOworCQkJCSAgICAiZHVyaW5nIGEgY29tbWFuZCBjaGFpblxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDggLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDggLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTg5NSw5NyArOTAyLDEwMCBAQAogCQljYXNlIDB4MDA6CiAJCQlicmVhazsJLyogTm8gTWVzc2FnZSAqLwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA5IC0gRGV2aWNlIGNoZWNrLTIgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA5IC0gRGV2aWNlIGNoZWNrLTIgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDkgLSBIZWFkIGFkZHJlc3MgZGlkIG5vdCBjb21wYXJlIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgOSAtIEhlYWQgYWRkcmVzcyBkaWQgbm90ICIKKwkJCQkgImNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDkgLSBUcmFjayBwaHlzaWNhbCBhZGRyZXNzIGRpZCAiCi0JCQkJICAgICJub3QgY29tcGFyZSB3aGlsZSBvcmllbnRlZCIpOworCQkJCSAgICAibm90IGNvbXBhcmUgd2hpbGUgb3JpZW50ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDkgLSBDeWxpbmRlciBhZGRyZXNzIGRpZCBub3QgIgotCQkJCSAgICAiY29tcGFyZSIpOworCQkJCSAgICAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDkgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDkgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4RjA6CQkvKiBGb3JtYXQgRiAtIENhY2hlIFN0b3JhZ2UgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBPcGVyYXRpb24gVGVybWluYXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBPcGVyYXRpb24gVGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBQcm9jZXNzaW5nIEVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBQcm9jZXNzaW5nIEVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGUgb3Igbm9udm9sYXRpbGUgc3RvcmFnZSAiCi0JCQkJICAgICJlcXVpcG1lbnQgZmFpbHVyZSIpOworCQkJCSAgICAiZXF1aXBtZW50IGZhaWx1cmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHRlcm1pbmF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyB0ZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGUgZmFzdCB3cml0ZSBhY2Nlc3Mgbm90ICIKLQkJCQkgICAgImF1dGhvcml6ZWQiKTsKKwkJCQkgICAgImF1dGhvcml6ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBUcmFjayBmb3JtYXQgaW5jb3JyZWN0Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFRyYWNrIGZvcm1hdCBpbmNvcnJlY3RcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHJlaW5pdGlhdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgcmVpbml0aWF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBOb252b2xhdGlsZSBzdG9yYWdlICIKLQkJCQkgICAgInRlcm1pbmF0ZWQiKTsKKwkJCQkgICAgInRlcm1pbmF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBWb2x1bWUgaXMgc3VzcGVuZGVkIGR1cGxleCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBWb2x1bWUgaXMgc3VzcGVuZGVkIGR1cGxleFxuIik7CiAJCQkvKiBjYWxsIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyAoRUVSKSAqLwogCQkJZGFzZF9lZXJfd3JpdGUoZGV2aWNlLCBlcnAtPnJlZmVycywKIAkJCQkgICAgICAgREFTRF9FRVJfUFBSQ1NVU1BFTkQpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBTdWJzeXN0ZW0gc3RhdHVzIGNvbm5vdCBiZSAiCi0JCQkJICAgICJkZXRlcm1pbmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBzdGF0dXMgY2Fubm90IGJlICIKKwkJCQkgICAgImRldGVybWluZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHN0YXR1cyByZXNldCB0byAiCi0JCQkJICAgICJkZWZhdWx0Iik7CisJCQkJICAgICJkZWZhdWx0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gREFTRCBGYXN0IFdyaXRlIGluaGliaXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBEQVNEIEZhc3QgV3JpdGUgaW5oaWJpdGVkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRCAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRCAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAotCWRlZmF1bHQ6CS8qIHVua25vd24gbWVzc2FnZSBmb3JtYXQgLSBzaG91bGQgbm90IGhhcHBlbiAqLwotCSAgICAgICAgREVWX01FU1NBR0UgKEtFUk5fV0FSTklORywgZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBtZXNzYWdlIGZvcm1hdCAlMDJ4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX2Zvcm1hdCk7CisJZGVmYXVsdDoJLyogdW5rbm93biBtZXNzYWdlIGZvcm1hdCAtIHNob3VsZCBub3QgaGFwcGVuCisJCQkgICBpbnRlcm5hbCBlcnJvciAwMyAtIHVua25vd24gbWVzc2FnZSBmb3JtYXQgKi8KKwkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMDMgJXgwMiIsIG1zZ19mb3JtYXQpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJICJyZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJYnJlYWs7CiAJfQkJCS8qIGVuZCBzd2l0Y2ggbWVzc2FnZSBmb3JtYXQgKi8KIApAQCAtMTAxNSw3ICsxMDI1LDcgQEAKIAkvKiBlbnYgZGF0YSBwcmVzZW50IChBQ1RJT04gMTAgLSByZXRyeSBzaG91bGQgd29yaykgKi8KIAlpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ29tbWFuZCBSZWplY3QgLSBlbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOwogCiAJCWRhc2RfMzk5MF9oYW5kbGVfZW52X2RhdGEoZXJwLCBzZW5zZSk7CkBAIC0xMDIzLDkgKzEwMzMsMTAgQEAKIAkJZXJwLT5yZXRyaWVzID0gNTsKIAogCX0gZWxzZSB7Ci0JCS8qIGZhdGFsIGVycm9yIC0gIHNldCBzdGF0dXMgdG8gRkFJTEVEICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvbW1hbmQgUmVqZWN0IC0gRmF0YWwgZXJyb3IiKTsKKwkJLyogZmF0YWwgZXJyb3IgLSAgc2V0IHN0YXR1cyB0byBGQUlMRUQKKwkJICAgaW50ZXJuYWwgZXJyb3IgMDkgLSBDb21tYW5kIFJlamVjdCAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwOSIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQpAQCAtMTA2MSw3ICsxMDcyLDcgQEAKIAl9IGVsc2UgewogCiAJCS8qIGlzc3VlIGEgbWVzc2FnZSBhbmQgd2FpdCBmb3IgJ2RldmljZSByZWFkeScgaW50ZXJydXB0ICovCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJidXMgb3V0IHBhcml0eSBlcnJvciBvciBCT1BDIHJlcXVlc3RlZCBieSAiCiAJCQkgICAgImNoYW5uZWwiKTsKIApAQCAtMTA5MywyMSArMTEwNCwxOSBAQAogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2VxdWlwX2NoZWNrOwogCiAJaWYgKHNlbnNlWzFdICYgU05TMV9XUklURV9JTkhJQklURUQpIHsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJXcml0ZSBpbmhpYml0ZWQgcGF0aCBlbmNvdW50ZXJlZFxuIik7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJXcml0ZSBpbmhpYml0ZWQgcGF0aCBlbmNvdW50ZXJlZCIpOwotCi0JCS8qIHZhcnkgcGF0aCBvZmZsaW5lICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlBhdGggc2hvdWxkIGJlIHZhcmllZCBvZmYtbGluZS4gIgotCQkJICAgICJUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgXG4gLSBwbGVhc2UgcmVwb3J0ICIKLQkJCSAgICAidG8gbGludXgzOTBAZGUuaWJtLmNvbSIpOworCQkvKiB2YXJ5IHBhdGggb2ZmbGluZQorCQkgICBpbnRlcm5hbCBlcnJvciAwNCAtIFBhdGggc2hvdWxkIGJlIHZhcmllZCBvZmYtbGluZS4qLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwNCIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEoZXJwKTsKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiRXF1aXBtZW50IENoZWNrIC0gIiAiZW52aXJvbm1lbnRhbCBkYXRhIHByZXNlbnQiKTsKIAogCQlkYXNkXzM5OTBfaGFuZGxlX2Vudl9kYXRhKGVycCwgc2Vuc2UpOwpAQCAtMTExNiw3ICsxMTI1LDcgQEAKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMV0gJiBTTlMxX1BFUk1fRVJSKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkVxdWlwbWVudCBDaGVjayAtIHJldHJ5IGV4aGF1c3RlZCBvciAiCiAJCQkgICAgInVuZGVzaXJhYmxlIik7CiAKQEAgLTExMjUsNyArMTEzNCw3IEBACiAJfSBlbHNlIHsKIAkJLyogYWxsIG90aGVyIGVxdWlwbWVudCBjaGVja3MgLSBBY3Rpb24gNSAqLwogCQkvKiByZXN0IGlzIGRvbmUgd2hlbiByZXRyaWVzID09IDAgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkVxdWlwbWVudCBjaGVjayBvciBwcm9jZXNzaW5nIGVycm9yIik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNShlcnApOwpAQCAtMTE1Niw5ICsxMTY1LDkgQEAKIAlpZiAoc2Vuc2VbMl0gJiBTTlMyX0NPUlJFQ1RBQkxFKSB7CS8qIGNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgKi8KIAogCQkvKiBpc3N1ZSBtZXNzYWdlIHRoYXQgdGhlIGRhdGEgaGFzIGJlZW4gY29ycmVjdGVkICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJZGV2X2VtZXJnKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCSAgICAiRGF0YSByZWNvdmVyZWQgZHVyaW5nIHJldHJ5IHdpdGggUENJICIKLQkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmUiKTsKKwkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmVcbiIpOwogCiAJCS8qIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaW4gTGludXggKi8KIAkJcGFuaWMoIk5vIHdheSB0byBpbmZvcm0gYXBwbGljYXRpb24gYWJvdXQgdGhlIHBvc3NpYmx5ICIKQEAgLTExNjYsNyArMTE3NSw3IEBACiAKIAl9IGVsc2UgaWYgKHNlbnNlWzJdICYgU05TMl9FTlZfREFUQV9QUkVTRU5UKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlVuY29ycmVjdGFibGUgZGF0YSBjaGVjayByZWNvdmVyZWQgc2Vjb25kYXJ5ICIKIAkJCSAgICAiYWRkciBvZiBkdXBsZXggcGFpciIpOwogCkBAIC0xMTc0LDcgKzExODMsNyBAQAogCiAJfSBlbHNlIGlmIChzZW5zZVsxXSAmIFNOUzFfUEVSTV9FUlIpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5jb3JyZWN0YWJsZSBkYXRhIGNoZWNrIHdpdGggaW50ZXJuYWwgIgogCQkJICAgICJyZXRyeSBleGhhdXN0ZWQiKTsKIApAQCAtMTE4Miw3ICsxMTkxLDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIGFsbCBvdGhlciBkYXRhIGNoZWNrcyAqLwotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5jb3JyZWN0YWJsZSBkYXRhIGNoZWNrIHdpdGggcmV0cnkgY291bnQgIgogCQkJICAgICJleGhhdXN0ZWQuLi4iKTsKIApAQCAtMTIxMiw3ICsxMjIxLDcgQEAKIAogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX292ZXJydW47CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgIk92ZXJydW4gLSBzZXJ2aWNlIG92ZXJydW4gb3Igb3ZlcnJ1biIKIAkJICAgICIgZXJyb3IgcmVxdWVzdGVkIGJ5IGNoYW5uZWwiKTsKIApAQCAtMTI0Myw3ICsxMjUyLDcgQEAKIAogCWlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJUcmFjayBmb3JtYXQgZXJyb3Igd2hlbiBkZXN0YWdpbmcgb3IgIgogCQkJICAgICJzdGFnaW5nIGRhdGEiKTsKIApAQCAtMTI1Miw4ICsxMjYxLDEwIEBACiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBzZW5zZSk7CiAKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJJbnZhbGlkIFRyYWNrIEZvcm1hdCAtIEZhdGFsIGVycm9yIik7CisJCS8qIGludGVybmFsIGVycm9yIDA2IC0gVGhlIHRyYWNrIGZvcm1hdCBpcyBub3QgdmFsaWQqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkicmVhc29uPSVzXG4iLCAiMDYiKTsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCX0KQEAgLTEyNzksOCArMTI5MCw4IEBACiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGRlZmF1bHRfZXJwLT5zdGFydGRldjsKIAotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCSAgICAiRW5kLW9mLUN5bGluZGVyIC0gbXVzdCBuZXZlciBoYXBwZW4iKTsKKwlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJIlRoZSBjeWxpbmRlciBkYXRhIGZvciBhY2Nlc3NpbmcgdGhlIERBU0QgaXMgaW5jb25zaXN0ZW50XG4iKTsKIAogCS8qIGltcGxlbWVudCBhY3Rpb24gNyAtIEJVRyAqLwogCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CkBAIC0xMzA2LDcgKzEzMTcsNyBAQAogCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfZW52X2RhdGE7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsICJFbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOworCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwgIkVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CiAKIAlkYXNkXzM5OTBfaGFuZGxlX2Vudl9kYXRhKGVycCwgc2Vuc2UpOwogCkBAIC0xMzM5LDggKzEzNTAsOCBAQAogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBkZWZhdWx0X2VycC0+c3RhcnRkZXY7CiAKLQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkgICAgIk5vIFJlY29yZCBGb3VuZCAtIEZhdGFsIGVycm9yICIpOworCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgICAgIlRoZSBzcGVjaWZpZWQgcmVjb3JkIHdhcyBub3QgZm91bmRcbiIpOwogCiAJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKIApAQCAtMTM2NSw3ICsxMzc2LDggQEAKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsICJGaWxlIFByb3RlY3RlZCIpOworCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIG9mICIKKwkJImEgaGFyZHdhcmUgZXJyb3JcbiIpOwogCiAJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAKQEAgLTEzOTQsNyArMTQwNiw3IEBACiAJaWYgKGNxci0+YmxvY2sgJiYKIAkgICAgKGNxci0+YmxvY2stPmJhc2UgIT0gY3FyLT5zdGFydGRldikpIHsKIAkJaWYgKGNxci0+c3RhcnRkZXYtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGNxci0+c3RhcnRkZXYsCisJCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGNxci0+c3RhcnRkZXYsCiAJCQkJICAgICJFUlAgb24gYWxpYXMgZGV2aWNlIGZvciByZXF1ZXN0ICVwLCIKIAkJCQkgICAgIiByZWNvdmVyIG9uIGJhc2UgZGV2aWNlICVzIiwgY3FyLAogCQkJCSAgICBkZXZfbmFtZSgmY3FyLT5ibG9jay0+YmFzZS0+Y2Rldi0+ZGV2KSk7CkBAIC0xNTExLDcgKzE1MjMsNyBAQAogCWVycC0+cmV0cmllcyA9IDI1NjsKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMTBfMzI7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsICJQZXJmb3JtIGxvZ2dpbmcgcmVxdWVzdGVkIik7CisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLCAiUGVyZm9ybSBsb2dnaW5nIHJlcXVlc3RlZCIpOwogCiAJcmV0dXJuIGVycDsKIApAQCAtMTU0OSw3ICsxNTYxLDcgQEAKIAljaGFyICpMT19kYXRhOwkJLyogTE9fZWNrZF9kYXRhX3QgKi8KIAlzdHJ1Y3QgY2N3MSAqY2N3LCAqb2xkY2N3OwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJXcml0ZSBub3QgZmluaXNoZWQgYmVjYXVzZSBvZiB1bmV4cGVjdGVkIGNvbmRpdGlvbiIpOwogCiAJZGVmYXVsdF9lcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMUJfMzI7CkBAIC0xNTYxLDEwICsxNTczLDE2IEBACiAJCWNxciA9IGNxci0+cmVmZXJzOwogCX0KIAorCWlmIChzY3N3X2lzX3RtKCZjcXItPmlyYi5zY3N3KSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiMzIgYml0IHNlbnNlLCBhY3Rpb24gMUIgaXMgbm90IGRlZmluZWQiCisJCQkgICAgICAiIGluIHRyYW5zcG9ydCBtb2RlIC0ganVzdCByZXRyeSIpOworCQlyZXR1cm4gZGVmYXVsdF9lcnA7CisJfQorCiAJLyogZm9yIGltcHJlY2lzZSBlbmRpbmcganVzdCBkbyBkZWZhdWx0IGVycCAqLwogCWlmIChzZW5zZVsxXSAmIDB4MDEpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiSW1wcmVjaXNlIGVuZGluZyBpcyBzZXQgLSBqdXN0IHJldHJ5Iik7CiAKIAkJcmV0dXJuIGRlZmF1bHRfZXJwOwpAQCAtMTU3NSw4ICsxNTkzLDcgQEAKIAljcGEgPSBkZWZhdWx0X2VycC0+cmVmZXJzLT5pcmIuc2Nzdy5jbWQuY3BhOwogCiAJaWYgKGNwYSA9PSAwKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWRkcmVzcyBvZiB0aGUgQ0NXICIKIAkJCSAgICAidG8gYmUgcmVzdGFydGVkIik7CiAKQEAgLTE1OTAsNyArMTYwNyw5IEBACiAJCQkJICAgICBzaXplb2Yoc3RydWN0IExPX2Vja2RfZGF0YSksIGRldmljZSk7CiAKIAlpZiAoSVNfRVJSKGVycCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBFUlAiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMDEgLSBVbmFibGUgdG8gYWxsb2NhdGUgRVJQICovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjAxIik7CiAJCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQogCkBAIC0xNTk5LDcgKzE2MTgsNyBAQAogCW9sZGNjdyA9IGNxci0+Y3BhZGRyOwogCWlmIChvbGRjY3ctPmNtZF9jb2RlID09IERBU0RfRUNLRF9DQ1dfUEZYKSB7CiAJCVBGWF9kYXRhID0gY3FyLT5kYXRhOwotCQltZW1jcHkoREVfZGF0YSwgJlBGWF9kYXRhLT5kZWZpbmVfZXh0ZW5kLAorCQltZW1jcHkoREVfZGF0YSwgJlBGWF9kYXRhLT5kZWZpbmVfZXh0ZW50LAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpKTsKIAl9IGVsc2UKIAkJbWVtY3B5KERFX2RhdGEsIGNxci0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpKTsKQEAgLTE2MDgsMTAgKzE2MjcsNyBAQAogCUxPX2RhdGEgPSBlcnAtPmRhdGEgKyBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSk7CiAKIAlpZiAoKHNlbnNlWzNdID09IDB4MDEpICYmIChMT19kYXRhWzFdICYgMHgwMSkpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJCVUcgLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIik7Ci0KKwkJLyogc2hvdWxkIG5vdCAqLwogCQlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGRlZmF1bHRfZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCX0KIApAQCAtMTcwMSw3ICsxNzE3LDcgQEAKIAljaGFyICpMT19kYXRhOwkJLyogc3RydWN0IExPX2Vja2RfZGF0YSAqLwogCXN0cnVjdCBjY3cxICpjY3c7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgIldyaXRlIG5vdCBmaW5pc2hlZCBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQgY29uZGl0aW9uIgogCQkgICAgIiAtIGZvbGxvdyBvbiIpOwogCkBAIC0xNzEyLDEwICsxNzI4LDE2IEBACiAJCWNxciA9IGNxci0+cmVmZXJzOwogCX0KIAorCWlmIChzY3N3X2lzX3RtKCZjcXItPmlyYi5zY3N3KSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiMzIgYml0IHNlbnNlLCBhY3Rpb24gMUIsIHVwZGF0ZSwiCisJCQkgICAgICAiIGluIHRyYW5zcG9ydCBtb2RlIC0ganVzdCByZXRyeSIpOworCQlyZXR1cm4gcHJldmlvdXNfZXJwOworCX0KKwogCS8qIGZvciBpbXByZWNpc2UgZW5kaW5nIGp1c3QgZG8gZGVmYXVsdCBlcnAgKi8KIAlpZiAoc2Vuc2VbMV0gJiAweDAxKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkltcHJlY2lzZSBlbmRpbmcgaXMgc2V0IC0ganVzdCByZXRyeSIpOwogCiAJCXByZXZpb3VzX2VycC0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwpAQCAtMTcyOCwxMCArMTc1MCwxMCBAQAogCWNwYSA9IHByZXZpb3VzX2VycC0+aXJiLnNjc3cuY21kLmNwYTsKIAogCWlmIChjcGEgPT0gMCkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiVW5hYmxlIHRvIGRldGVybWluZSBhZGRyZXNzIG9mIHRoZSBDQ1cgIgotCQkJICAgICJ0byBiZSByZXN0YXJ0ZWQiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMDIgLQorCQkgICBVbmFibGUgdG8gZGV0ZXJtaW5lIGFkZHJlc3Mgb2YgdGhlIENDVyB0byBiZSByZXN0YXJ0ZWQgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDIiKTsKIAogCQlwcmV2aW91c19lcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIApAQCAtMTc0NCwxMCArMTc2Niw3IEBACiAJTE9fZGF0YSA9IGVycC0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKIAogCWlmICgoc2Vuc2VbM10gPT0gMHgwMSkgJiYgKExPX2RhdGFbMV0gJiAweDAxKSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkJVRyAtIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iKTsKLQorCQkvKiBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlwcmV2aW91c19lcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAogCQlyZXR1cm4gcHJldmlvdXNfZXJwOwpAQCAtMTkzNSwxNCArMTk1NCwxMyBAQAogCiAJaWYgKChzZW5zZVsyNV0gJiBEQVNEX1NFTlNFX0JJVF8xKSAmJiAoc2Vuc2VbMjZdICYgREFTRF9TRU5TRV9CSVRfMikpIHsKIAotCQkvKiBzZXQgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZSB0aGVuIHJlc3RhcnQgKi8KKwkJLyogc2V0IHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUgdGhlbiByZXN0YXJ0CisJCSAgIGludGVybmFsIGVycm9yIDA1IC0gU2V0IGRldmljZSB0byBzdXNwZW5kZWQgZHVwbGV4IHN0YXRlCisJCSAgIHNob3VsZCBiZSBkb25lICovCiAJCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKLQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJTZXQgZGV2aWNlIHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUgc2hvdWxkIGJlICIKLQkJCSAgICAiZG9uZSFcbiIKLQkJCSAgICAiVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0IChmb3IgY29tcG91bmQgRVJQKSIKLQkJCSAgICAiIC0gcGxlYXNlIHJlcG9ydCB0byBsaW51eDM5MEBkZS5pYm0uY29tIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSJyZWFzb249JXNcbiIsICIwNSIpOwogCiAJfQogCkBAIC0yMDEyLDE1ICsyMDMwLDE0IEBACiB7CiAJLyogcHJpbnQgbWVzc2FnZSBhY2NvcmRpbmcgdG8gbG9nIG9yIG1lc3NhZ2UgdG8gb3BlcmF0b3IgbW9kZSAqLwogCWlmICgoc2Vuc2VbMjRdICYgREFTRF9TSU1fTVNHX1RPX09QKSB8fCAoc2Vuc2VbMV0gJiAweDEwKSkgewotCiAJCS8qIHByaW50IFNJTSBTUkMgZnJvbSBSZWZDb2RlICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICJTSU0gLSBTUkM6ICIKLQkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCIsIHNlbnNlWzIyXSwKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJTSU0gLSBTUkM6ICIKKwkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeFxuIiwgc2Vuc2VbMjJdLAogCQkJICAgIHNlbnNlWzIzXSwgc2Vuc2VbMTFdLCBzZW5zZVsxMl0pOwogCX0gZWxzZSBpZiAoc2Vuc2VbMjRdICYgREFTRF9TSU1fTE9HKSB7CiAJCS8qIHByaW50IFNJTSBTUkMgUmVmY29kZSAqLwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIlNJTSAtIFNSQzogIgotCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4Iiwgc2Vuc2VbMjJdLAorCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJsb2cgU0lNIC0gU1JDOiAiCisJCQkgICAgIiUwMnglMDJ4JTAyeCUwMnhcbiIsIHNlbnNlWzIyXSwKIAkJCSAgICBzZW5zZVsyM10sIHNlbnNlWzExXSwgc2Vuc2VbMTJdKTsKIAl9CiB9CkBAIC0yMDYzLDE0ICsyMDgwLDE0IEBACiAJCXN3aXRjaCAoc2Vuc2VbMjVdKSB7CiAKIAkJY2FzZSAweDAwOgkvKiBzdWNjZXNzIC0gdXNlIGRlZmF1bHQgRVJQIGZvciByZXRyaWVzICovCi0JCSAgICAgICAgREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIkVSUCBjYWxsZWQgZm9yIHN1Y2Nlc3NmdWwgcmVxdWVzdCIKIAkJCQkgICAgIiAtIGp1c3QgcmV0cnkiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwMToJLyogZmF0YWwgZXJyb3IgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJSZXRyeSBub3QgcmVjb21tZW5kZWQgLSBGYXRhbCBlcnJvciIpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJFUlAgZmFpbGVkIGZvciB0aGUgREFTRFxuIik7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTIwODAsMTMgKzIwOTcsMTAgQEAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfaW50X3JlcShlcnApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAweDBGOiAgLyogbGVuZ3RoIG1pc21hdGNoIGR1cmluZyB1cGRhdGUgd3JpdGUgY29tbWFuZCAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgInVwZGF0ZSB3cml0ZSBjb21tYW5kIGVycm9yIC0gc2hvdWxkIG5vdCAiCi0JCQkJICAgICJoYXBwZW47XG4iCi0JCQkJICAgICJQbGVhc2Ugc2VuZCB0aGlzIG1lc3NhZ2UgdG9nZXRoZXIgd2l0aCAiCi0JCQkJICAgICJ0aGUgYWJvdmUgc2Vuc2UgZGF0YSB0byBsaW51eDM5MEBkZS4iCi0JCQkJICAgICJpYm0uY29tIik7CisJCWNhc2UgMHgwRjogIC8qIGxlbmd0aCBtaXNtYXRjaCBkdXJpbmcgdXBkYXRlIHdyaXRlIGNvbW1hbmQKKwkJCSAgICAgICBpbnRlcm5hbCBlcnJvciAwOCAtIHVwZGF0ZSB3cml0ZSBjb21tYW5kIGVycm9yKi8KKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlICIKKwkJCQkiREFTRCBkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwOCIpOwogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCQkJYnJlYWs7CkBAIC0yMDk1LDEzICsyMTA5LDEyIEBACiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xMF8zMihlcnAsIHNlbnNlKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMHgxNToJLyogbmV4dCB0cmFjayBvdXRzaWRlIGRlZmluZWQgZXh0ZW5kICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAibmV4dCB0cmFjayBvdXRzaWRlIGRlZmluZWQgZXh0ZW5kIC0gIgotCQkJCSAgICAic2hvdWxkIG5vdCBoYXBwZW47XG4iCi0JCQkJICAgICJQbGVhc2Ugc2VuZCB0aGlzIG1lc3NhZ2UgdG9nZXRoZXIgd2l0aCAiCi0JCQkJICAgICJ0aGUgYWJvdmUgc2Vuc2UgZGF0YSB0byBsaW51eDM5MEBkZS4iCi0JCQkJICAgICJpYm0uY29tIik7CisJCWNhc2UgMHgxNToJLyogbmV4dCB0cmFjayBvdXRzaWRlIGRlZmluZWQgZXh0ZW5kCisJCQkJICAgaW50ZXJuYWwgZXJyb3IgMDcgLSBUaGUgbmV4dCB0cmFjayBpcyBub3QKKwkJCQkgICB3aXRoaW4gdGhlIGRlZmluZWQgc3RvcmFnZSBleHRlbnQgKi8KKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkJInJlYXNvbj0lc1xuIiwgIjA3Iik7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTIxMTIsOSArMjEyNSw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MUM6CS8qIGludmFsaWQgZGF0YSAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X2VtZXJnKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkRhdGEgcmVjb3ZlcmVkIGR1cmluZyByZXRyeSB3aXRoIFBDSSAiCi0JCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZSIpOworCQkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmVcbiIpOwogCiAJCQkvKiBub3QgcG9zc2libGUgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uIGluIExpbnV4ICovCiAJCQlwYW5pYwpAQCAtMjEyMyw3ICsyMTM2LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxRDoJLyogc3RhdGUtY2hhbmdlIHBlbmRpbmcgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIkEgU3RhdGUgY2hhbmdlIHBlbmRpbmcgY29uZGl0aW9uIGV4aXN0cyAiCiAJCQkJICAgICJmb3IgdGhlIHN1YnN5c3RlbSBvciBkZXZpY2UiKTsKIApAQCAtMjEzMSw3ICsyMTQ0LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxRToJLyogYnVzeSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiQnVzeSBjb25kaXRpb24gZXhpc3RzICIKIAkJCQkgICAgImZvciB0aGUgc3Vic3lzdGVtIG9yIGRldmljZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIHNlbnNlKTsKQEAgLTIxNzEsOSArMjE4NCw5IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwogCi0JaWYgKGVycC0+cmVmZXJzLT5pcmIuc2Nzdy5jbWQuY3N0YXQgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsKKwlpZiAoc2Nzd19jc3RhdCgmZXJwLT5yZWZlcnMtPmlyYi5zY3N3KSAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISwogCQkJCQkgICB8IFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJjaGFubmVsIG9yIGludGVyZmFjZSBjb250cm9sIGNoZWNrIik7CiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBOVUxMKTsKIAl9CkBAIC0yMTkzLDIxICsyMjA2LDIzIEBACiAgKiAgIGVycF9uZXcJCWNvbnRlbnMgd2FzIHBvc3NpYmx5IG1vZGlmaWVkCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKLWRhc2RfMzk5MF9lcnBfaW5zcGVjdChzdHJ1Y3QgZGFzZF9jY3dfcmVxICogZXJwKQorZGFzZF8zOTkwX2VycF9pbnNwZWN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKmVycCkKIHsKIAogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycF9uZXcgPSBOVUxMOwotCS8qIHNlbnNlIGRhdGEgYXJlIGxvY2F0ZWQgaW4gdGhlIHJlZmVycyByZWNvcmQgb2YgdGhlICovCi0JLyogYWxyZWFkeSBzZXQgdXAgbmV3IEVSUCAhCQkJICAgICAgKi8KLQljaGFyICpzZW5zZSA9IGVycC0+cmVmZXJzLT5pcmIuZWN3OworCWNoYXIgKnNlbnNlOwogCiAJLyogaWYgdGhpcyBwcm9ibGVtIG9jY3VyZWQgb24gYW4gYWxpYXMgcmV0cnkgb24gYmFzZSAqLwogCWVycF9uZXcgPSBkYXNkXzM5OTBfZXJwX2luc3BlY3RfYWxpYXMoZXJwKTsKIAlpZiAoZXJwX25ldykKIAkJcmV0dXJuIGVycF9uZXc7CiAKLQkvKiBjaGVjayBpZiBubyBjb25jdXJyZW50IHNlbnMgaXMgYXZhaWxhYmxlICovCi0JaWYgKCFlcnAtPnJlZmVycy0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQorCS8qIHNlbnNlIGRhdGEgYXJlIGxvY2F0ZWQgaW4gdGhlIHJlZmVycyByZWNvcmQgb2YgdGhlCisJICogYWxyZWFkeSBzZXQgdXAgbmV3IEVSUCAhCisJICogY2hlY2sgaWYgY29uY3VycmVudCBzZW5zIGlzIGF2YWlsYWJsZQorCSAqLworCXNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoJmVycC0+cmVmZXJzLT5pcmIpOworCWlmICghc2Vuc2UpCiAJCWVycF9uZXcgPSBkYXNkXzM5OTBfZXJwX2NvbnRyb2xfY2hlY2soZXJwKTsKIAkvKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIDI0IGFuZCAzMiBieXRlIHNlbnNlIGRhdGEgKi8KIAllbHNlIGlmIChzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSB7CkBAIC0yMjMxLDcgKzIyNDYsMTEgQEAKICAqIERFU0NSSVBUSU9OCiAgKiAgIFRoaXMgZnVudGlvbiBhZGRzIGFuIGFkZGl0aW9uYWwgcmVxdWVzdCBibG9jayAoRVJQKSB0byB0aGUgaGVhZCBvZgogICogICB0aGUgZ2l2ZW4gY3FyIChvciBlcnApLgotICogICBUaGlzIGVycCBpcyBpbml0aWFsaXplZCBhcyBhbiBkZWZhdWx0IGVycCAocmV0cnkgVElDKQorICogICBGb3IgYSBjb21tYW5kIG1vZGUgY3FyIHRoZSBlcnAgaXMgaW5pdGlhbGl6ZWQgYXMgYW4gZGVmYXVsdCBlcnAKKyAqICAgKHJldHJ5IFRJQykuCisgKiAgIEZvciB0cmFuc3BvcnQgbW9kZSB3ZSBtYWtlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgVENXIChwb2ludHMgdG8KKyAqICAgdGhlIG9yaWdpbmFsIFRDQ0IsIFRJREFMcywgZXRjLikgYnV0IGdpdmUgaXQgYSBmcmVzaAorICogICBUU0Igc28gdGhlIG9yaWdpbmFsIHNlbnNlIGRhdGEgd2lsbCBub3QgYmUgY2hhbmdlZC4KICAqCiAgKiBQQVJBTUVURVIKICAqICAgY3FyCQloZWFkIG9mIHRoZSBjdXJyZW50IEVSUC1jaGFpbiAob3Igc2luZ2xlIGNxciBpZgpAQCAtMjIzOSwyNSArMjI1OCwzNSBAQAogICogUkVUVVJOIFZBTFVFUwogICogICBlcnAJCXBvaW50ZXIgdG8gbmV3IEVSUC1jaGFpbiBoZWFkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKLWRhc2RfMzk5MF9lcnBfYWRkX2VycChzdHJ1Y3QgZGFzZF9jY3dfcmVxICogY3FyKQorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfMzk5MF9lcnBfYWRkX2VycChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIpCiB7CiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGNxci0+c3RhcnRkZXY7CiAJc3RydWN0IGNjdzEgKmNjdzsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnA7CisJaW50IGNwbGVuZ3RoLCBkYXRhc2l6ZTsKKwlzdHJ1Y3QgdGN3ICp0Y3c7CisJc3RydWN0IHRzYiAqdHNiOworCisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJY3BsZW5ndGggPSAwOworCQlkYXRhc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGN3KSArIHNpemVvZihzdHJ1Y3QgdHNiKTsKKwl9IGVsc2UgeworCQljcGxlbmd0aCA9IDI7CisJCWRhdGFzaXplID0gMDsKKwl9CiAKIAkvKiBhbGxvY2F0ZSBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKi8KLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnA7Ci0KLQllcnAgPSBkYXNkX2FsbG9jX2VycF9yZXF1ZXN0KChjaGFyICopICZjcXItPm1hZ2ljLCAyLCAwLCBkZXZpY2UpOworCWVycCA9IGRhc2RfYWxsb2NfZXJwX3JlcXVlc3QoKGNoYXIgKikgJmNxci0+bWFnaWMsCisJCQkJICAgICBjcGxlbmd0aCwgZGF0YXNpemUsIGRldmljZSk7CiAJaWYgKElTX0VSUihlcnApKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNxci0+cmV0cmllcyA8PSAwKSB7Ci0JCSAgICAgICAgREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCByZXF1ZXN0Iik7CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+c3RvcGNsayA9IGdldF9jbG9jayAoKTsKIAkJfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX0VSUiwgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBFUlAgcmVxdWVzdCAiCiAJCQkJICAgICAiKCVpIHJldHJpZXMgbGVmdCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+cmV0cmllcyk7CkBAIC0yMjY2LDEzICsyMjk1LDI0IEBACiAJCXJldHVybiBjcXI7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSByZXF1ZXN0IHdpdGggZGVmYXVsdCBUSUMgdG8gY3VycmVudCBFUlAvQ1FSICovCi0JY2N3ID0gZXJwLT5jcGFkZHI7Ci0JY2N3LT5jbWRfY29kZSA9IENDV19DTURfTk9PUDsKLQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfQ0M7Ci0JY2N3Kys7Ci0JY2N3LT5jbWRfY29kZSA9IENDV19DTURfVElDOwotCWNjdy0+Y2RhICAgICAgPSAobG9uZykoY3FyLT5jcGFkZHIpOworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCS8qIG1ha2UgYSBzaGFsbG93IGNvcHkgb2YgdGhlIG9yaWdpbmFsIHRjdyBidXQgc2V0IG5ldyB0c2IgKi8KKwkJZXJwLT5jcG1vZGUgPSAxOworCQllcnAtPmNwYWRkciA9IGVycC0+ZGF0YTsKKwkJdGN3ID0gZXJwLT5kYXRhOworCQl0c2IgPSAoc3RydWN0IHRzYiAqKSAmdGN3WzFdOworCQkqdGN3ID0gKigoc3RydWN0IHRjdyAqKWNxci0+Y3BhZGRyKTsKKwkJdGN3LT50c2IgPSAobG9uZyl0c2I7CisJfSBlbHNlIHsKKwkJLyogaW5pdGlhbGl6ZSByZXF1ZXN0IHdpdGggZGVmYXVsdCBUSUMgdG8gY3VycmVudCBFUlAvQ1FSICovCisJCWNjdyA9IGVycC0+Y3BhZGRyOworCQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9OT09QOworCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfQ0M7CisJCWNjdysrOworCQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9USUM7CisJCWNjdy0+Y2RhICAgICAgPSAobG9uZykoY3FyLT5jcGFkZHIpOworCX0KKwogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FkZF9lcnA7CiAJZXJwLT5yZWZlcnMgICA9IGNxcjsKIAllcnAtPnN0YXJ0ZGV2ID0gZGV2aWNlOwpAQCAtMjI4Miw3ICsyMzIyLDYgQEAKIAllcnAtPmV4cGlyZXMgID0gMDsKIAllcnAtPnJldHJpZXMgID0gMjU2OwogCWVycC0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKLQogCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogCiAJcmV0dXJuIGVycDsKQEAgLTIzNDAsMjggKzIzNzksMzMgQEAKICAqICAgbWF0Y2gJCSdib29sZWFuJyBmb3IgbWF0Y2ggZm91bmQKICAqCQkJcmV0dXJucyAxIGlmIG1hdGNoIGZvdW5kLCBvdGhlcndpc2UgMC4KICAqLwotc3RhdGljIGludAotZGFzZF8zOTkwX2VycF9lcnJvcl9tYXRjaChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIxLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIyKQorc3RhdGljIGludCBkYXNkXzM5OTBfZXJwX2Vycm9yX21hdGNoKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjEsCisJCQkJICAgICBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIyKQogeworCWNoYXIgKnNlbnNlMSwgKnNlbnNlMjsKIAogCWlmIChjcXIxLT5zdGFydGRldiAhPSBjcXIyLT5zdGFydGRldikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY3FyMS0+aXJiLmVzdy5lc3cwLmVydy5jb25zICE9IGNxcjItPmlyYi5lc3cuZXN3MC5lcncuY29ucykKLQkJcmV0dXJuIDA7CisJc2Vuc2UxID0gZGFzZF9nZXRfc2Vuc2UoJmNxcjEtPmlyYik7CisJc2Vuc2UyID0gZGFzZF9nZXRfc2Vuc2UoJmNxcjItPmlyYik7CiAKLQlpZiAoKGNxcjEtPmlyYi5lc3cuZXN3MC5lcncuY29ucyA9PSAwKSAmJgotCSAgICAoY3FyMi0+aXJiLmVzdy5lc3cwLmVydy5jb25zID09IDApKQl7Ci0JCWlmICgoY3FyMS0+aXJiLnNjc3cuY21kLmNzdGF0ICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKLQkJCQkJICAgICBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkgPT0KLQkJICAgIChjcXIyLT5pcmIuc2Nzdy5jbWQuY3N0YXQgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAotCQkJCQkgICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSkKKwkvKiBvbmUgcmVxdWVzdCBoYXMgc2Vuc2UgZGF0YSwgdGhlIG90aGVyIG5vdCAtPiBubyBtYXRjaCwgcmV0dXJuIDAgKi8KKwlpZiAoIXNlbnNlMSAhPSAhc2Vuc2UyKQorCQlyZXR1cm4gMDsKKwkvKiBubyBzZW5zZSBkYXRhIGluIGJvdGggY2FzZXMgLT4gY2hlY2sgY3N0YXQgZm9yIElGQ0MgKi8KKwlpZiAoIXNlbnNlMSAmJiAhc2Vuc2UyKQl7CisJCWlmICgoc2Nzd19jc3RhdCgmY3FyMS0+aXJiLnNjc3cpICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKKwkJCQkJCSAgICBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkgPT0KKwkJICAgIChzY3N3X2NzdGF0KCZjcXIyLT5pcmIuc2NzdykgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkJCQkJICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSkKIAkJCXJldHVybiAxOyAvKiBtYXRjaCB3aXRoIGlmY2MqLwogCX0KIAkvKiBjaGVjayBzZW5zZSBkYXRhOyBieXRlIDAtMiwyNSwyNyAqLwotCWlmICghKChtZW1jbXAgKGNxcjEtPmlyYi5lY3csIGNxcjItPmlyYi5lY3csIDMpID09IDApICYmCi0JICAgICAgKGNxcjEtPmlyYi5lY3dbMjddID09IGNxcjItPmlyYi5lY3dbMjddKSAmJgotCSAgICAgIChjcXIxLT5pcmIuZWN3WzI1XSA9PSBjcXIyLT5pcmIuZWN3WzI1XSkpKSB7CisJaWYgKCEoc2Vuc2UxICYmIHNlbnNlMiAmJgorCSAgICAgIChtZW1jbXAoc2Vuc2UxLCBzZW5zZTIsIDMpID09IDApICYmCisJICAgICAgKHNlbnNlMVsyN10gPT0gc2Vuc2UyWzI3XSkgJiYKKwkgICAgICAoc2Vuc2UxWzI1XSA9PSBzZW5zZTJbMjVdKSkpIHsKIAogCQlyZXR1cm4gMDsJLyogc2Vuc2UgZG9lc24ndCBtYXRjaCAqLwogCX0KQEAgLTI0MzQsNyArMjQ3OCw3IEBACiB7CiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7Ci0JY2hhciAqc2Vuc2UgPSBlcnAtPmlyYi5lY3c7CisJY2hhciAqc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmZXJwLT5pcmIpOwogCiAJLyogY2hlY2sgZm9yIDI0IGJ5dGUgc2Vuc2UgRVJQICovCiAJaWYgKChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYnVzX291dCkgfHwKQEAgLTI0NDksNyArMjQ5Myw3IEBACiAJCS8qIHByZXBhcmUgZXJwIGZvciByZXRyeSBvbiBkaWZmZXJlbnQgY2hhbm5lbCBwYXRoICovCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEoZXJwKTsKIAotCQlpZiAoIShzZW5zZVsyXSAmIERBU0RfU0VOU0VfQklUXzApKSB7CisJCWlmIChzZW5zZSAmJiAhKHNlbnNlWzJdICYgREFTRF9TRU5TRV9CSVRfMCkpIHsKIAogCQkJLyogaXNzdWUgYSBEaWFnbm9zdGljIENvbnRyb2wgY29tbWFuZCB3aXRoIGFuCiAJCQkgKiBJbmhpYml0IFdyaXRlIHN1YmNvbW1hbmQgKi8KQEAgLTI0NzEsNyArMjUxNSw3IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCWRlZmF1bHQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAorCQkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKIAkJCQkJICAgICJpbnZhbGlkIHN1YmNvbW1hbmQgbW9kaWZpZXIgMHgleCAiCiAJCQkJCSAgICAiZm9yIERpYWdub3N0aWMgQ29udHJvbCBDb21tYW5kIiwKIAkJCQkJICAgIHNlbnNlWzI1XSk7CkBAIC0yNDc5LDE5ICsyNTIzLDIxIEBACiAJCX0KIAogCQkvKiBjaGVjayBmb3IgMzIgYnl0ZSBzZW5zZSBFUlAgKi8KLQl9IGVsc2UgaWYgKChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcmV0cnkpIHx8Ci0JCSAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcGF0aCkgfHwKLQkJICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb2RlKSB8fAotCQkgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvbmZpZykpIHsKKwl9IGVsc2UgaWYgKHNlbnNlICYmCisJCSAgICgoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3JldHJ5KSB8fAorCQkgICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9wYXRoKSB8fAorCQkgICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb2RlKSB8fAorCQkgICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb25maWcpKSkgewogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfY29tcG91bmQoZXJwLCBzZW5zZSk7CiAKIAl9IGVsc2UgewotCQkvKiBObyByZXRyeSBsZWZ0IGFuZCBubyBhZGRpdGlvbmFsIHNwZWNpYWwgaGFuZGxpbmcgKi8KLQkJLypuZWNlc3NhcnkgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCSAgICAibm8gcmV0cmllcyBsZWZ0IGZvciBlcnAgJXAgLSAiCi0JCQkgICAgInNldCBzdGF0dXMgdG8gRkFJTEVEIiwgZXJwKTsKKwkJLyoKKwkJICogTm8gcmV0cnkgbGVmdCBhbmQgbm8gYWRkaXRpb25hbCBzcGVjaWFsIGhhbmRsaW5nCisJCSAqIG5lY2Vzc2FyeQorCQkgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiRVJQICVwIGhhcyBydW4gb3V0IG9mIHJldHJpZXMgYW5kIGZhaWxlZFxuIiwgZXJwKTsKIAogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAl9CkBAIC0yNTQ4LDI0ICsyNTk0LDI1IEBACiAKIAlpZiAoZXJwLT5yZXRyaWVzID4gMCkgewogCi0JCWNoYXIgKnNlbnNlID0gZXJwLT5yZWZlcnMtPmlyYi5lY3c7CisJCWNoYXIgKnNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoJmVycC0+cmVmZXJzLT5pcmIpOwogCiAJCS8qIGNoZWNrIGZvciBzcGVjaWFsIHJldHJpZXMgKi8KLQkJaWYgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNCkgeworCQlpZiAoc2Vuc2UgJiYgZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KSB7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBzZW5zZSk7CiAKLQkJfSBlbHNlIGlmIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzFCXzMyKSB7CisJCX0gZWxzZSBpZiAoc2Vuc2UgJiYKKwkJCSAgIGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMUJfMzIpIHsKIAogCQkJZXJwID0gZGFzZF8zOTkwX3VwZGF0ZV8xQihlcnAsIHNlbnNlKTsKIAotCQl9IGVsc2UgaWYgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKSB7CisJCX0gZWxzZSBpZiAoc2Vuc2UgJiYgZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2ludF9yZXEpIHsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKGVycCk7CiAKIAkJfSBlbHNlIHsKIAkJCS8qIHNpbXBsZSByZXRyeQkgICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAogCQkJCSAgICAiJWkgcmV0cmllcyBsZWZ0IGZvciBlcnAgJXAiLAogCQkJCSAgICBlcnAtPnJldHJpZXMsIGVycCk7CiAKQEAgLTI2MDksMjQgKzI2NTYsMjQgQEAKIAogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkvKiBwcmludCBjdXJyZW50IGVycF9jaGFpbiAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJFUlAgY2hhaW4gYXQgQkVHSU5OSU5HIG9mIEVSUC1BQ1RJT04iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIkVSUCBjaGFpbiBhdCBCRUdJTk5JTkcgb2YgRVJQLUFDVElPTlxuIik7CiAJCWZvciAodGVtcF9lcnAgPSBjcXI7CiAJCSAgICAgdGVtcF9lcnAgIT0gTlVMTDsgdGVtcF9lcnAgPSB0ZW1wX2VycC0+cmVmZXJzKSB7CiAKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICIgICBlcnAgJXAgKCUwMngpIHJlZmVycyB0byAlcCIsCisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkVSUCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwXG4iLAogCQkJCSAgICB0ZW1wX2VycCwgdGVtcF9lcnAtPnN0YXR1cywKIAkJCQkgICAgdGVtcF9lcnAtPnJlZmVycyk7CiAJCX0KIAl9CiAKIAkvKiBkb3VibGUtY2hlY2sgaWYgY3VycmVudCBlcnAvY3FyIHdhcyBzdWNjZXNzZnVsICovCi0JaWYgKChjcXItPmlyYi5zY3N3LmNtZC5jc3RhdCA9PSAweDAwKSAmJgotCSAgICAoY3FyLT5pcmIuc2Nzdy5jbWQuZHN0YXQgPT0KKwlpZiAoKHNjc3dfY3N0YXQoJmNxci0+aXJiLnNjc3cpID09IDB4MDApICYmCisJICAgIChzY3N3X2RzdGF0KCZjcXItPmlyYi5zY3N3KSA9PQogCSAgICAgKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCiAJCQkgICAgIkVSUCBjYWxsZWQgZm9yIHN1Y2Nlc3NmdWwgcmVxdWVzdCAlcCIKIAkJCSAgICAiIC0gTk8gRVJQIG5lY2Vzc2FyeSIsIGNxcik7CiAKQEAgLTI2NDgsMTMgKzI2OTUsMTMgQEAKIAogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkvKiBwcmludCBjdXJyZW50IGVycF9jaGFpbiAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJFUlAgY2hhaW4gYXQgRU5EIG9mIEVSUC1BQ1RJT04iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIkVSUCBjaGFpbiBhdCBFTkQgb2YgRVJQLUFDVElPTlxuIik7CiAJCWZvciAodGVtcF9lcnAgPSBlcnA7CiAJCSAgICAgdGVtcF9lcnAgIT0gTlVMTDsgdGVtcF9lcnAgPSB0ZW1wX2VycC0+cmVmZXJzKSB7CiAKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICIgICBlcnAgJXAgKCUwMngpIHJlZmVycyB0byAlcCIsCisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkVSUCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwXG4iLAogCQkJCSAgICB0ZW1wX2VycCwgdGVtcF9lcnAtPnN0YXR1cywKIAkJCQkgICAgdGVtcF9lcnAtPnJlZmVycyk7CiAJCX0KQEAgLTI2NjcsNiArMjcxNCw4IEBACiAJCWxpc3RfYWRkX3RhaWwoJmVycC0+YmxvY2tsaXN0LCAmY3FyLT5ibG9ja2xpc3QpOwogCX0KIAorCisKIAlyZXR1cm4gZXJwOwogCiB9CQkJCS8qIGVuZCBkYXNkXzM5OTBfZXJwX2FjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKaW5kZXggMjA2NzZjZC4uNWI3YmJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCkBAIC01LDYgKzUsOCBAQAogICogQXV0aG9yKHMpOiBTdGVmYW4gV2Vpbmh1YmVyIDx3ZWluQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSAiZGFzZF9pbnQuaCIKQEAgLTUwMyw3ICs1MDUsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZsY3UtPmxvY2ssIGZsYWdzKTsKIAlpZiAocmMgfHwgKGxjdS0+ZmxhZ3MgJiBORUVEX1VBQ19VUERBVEUpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiY291bGQgbm90IHVwZGF0ZSIKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiY291bGQgbm90IHVwZGF0ZSIKIAkJCSAgICAiIGFsaWFzIGRhdGEgaW4gbGN1IChyYyA9ICVkKSwgcmV0cnkgbGF0ZXIiLCByYyk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbGN1LT5ydWFjX2RhdGEuZHdvcmssIDMwKkhaKTsKIAl9IGVsc2UgewpAQCAtNjQ2LDE0ICs2NDgsMTYgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJY3FyID0gbGN1LT5yc3VfY3FyOwogCXN0cm5jcHkoKGNoYXIgKikgJmNxci0+bWFnaWMsICJFQ0tEIiwgNCk7CiAJQVNDRUJDKChjaGFyICopICZjcXItPm1hZ2ljLCA0KTsKLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JTQ0s7Ci0JY3FyLT5jcGFkZHItPmZsYWdzID0gMCA7Ci0JY3FyLT5jcGFkZHItPmNvdW50ID0gMTY7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUlNDSzsKKwljY3ctPmZsYWdzID0gMCA7CisJY2N3LT5jb3VudCA9IDE2OworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAkoKGNoYXIgKiljcXItPmRhdGEpWzBdID0gcmVhc29uOwogCiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTg1NSwxNiArODU5LDI1IEBACiAJc3RydWN0IGFsaWFzX2xjdSAqbGN1OwogCWNoYXIgcmVhc29uOwogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwljaGFyICpzZW5zZTsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAotCXJlYXNvbiA9IGlyYi0+ZWN3WzhdOwotCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMgJXgiLAotCQkgICAgImVja2QgaGFuZGxlIHN1bW1hcnkgdW5pdCBjaGVjazogcmVhc29uIiwgcmVhc29uKTsKKwlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKGlyYik7CisJaWYgKHNlbnNlKSB7CisJCXJlYXNvbiA9IHNlbnNlWzhdOworCQlEQkZfREVWX0VWRU5UKERCRl9OT1RJQ0UsIGRldmljZSwgIiVzICV4IiwKKwkJCSAgICAiZWNrZCBoYW5kbGUgc3VtbWFyeSB1bml0IGNoZWNrOiByZWFzb24iLCByZWFzb24pOworCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAiZWNrZCBoYW5kbGUgc3VtbWFyeSB1bml0IGNoZWNrOiIKKwkJCSAgICAiIG5vIHJlYXNvbiBjb2RlIGF2YWlsYWJsZSIpOworCQlyZXR1cm47CisJfQogCiAJbGN1ID0gcHJpdmF0ZS0+bGN1OwogCWlmICghbGN1KSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImRldmljZSBub3QgcmVhZHkgdG8gaGFuZGxlIHN1bW1hcnkiCiAJCQkgICAgIiB1bml0IGNoZWNrIChubyBsY3Ugc3RydWN0dXJlKSIpOwogCQlyZXR1cm47CkBAIC04NzcsNyArODkwLDcgQEAKIAkgKiB0aGUgbmV4dCBpbnRlcnJ1cHQgb24gYSBkaWZmZXJlbnQgZGV2aWNlCiAJICovCiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+YWxpYXNfbGlzdCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiZGV2aWNlIGlzIGluIG9mZmxpbmUgcHJvY2Vzc2luZywiCiAJCQkgICAgIiBkb24ndCBkbyBzdW1tYXJ5IHVuaXQgY2hlY2sgaGFuZGxpbmciKTsKIAkJc3Bpbl91bmxvY2soJmxjdS0+bG9jayk7CkBAIC04ODUsNyArODk4LDcgQEAKIAl9CiAJaWYgKGxjdS0+c3VjX2RhdGEuZGV2aWNlKSB7CiAJCS8qIGFscmVhZHkgc2NoZWR1bGVkIG9yIHJ1bm5pbmcgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAicHJldmlvdXMgaW5zdGFuY2Ugb2Ygc3VtbWFyeSB1bml0IGNoZWNrIHdvcmtlciIKIAkJCSAgICAiIHN0aWxsIHBlbmRpbmciKTsKIAkJc3Bpbl91bmxvY2soJmxjdS0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDM0MzM5OTAuLmU3NzY2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTY3LDYgKzY5LDggQEAKIGludCBkYXNkX2F1dG9kZXRlY3QgPSAwOwkvKiBpcyB0cnVlLCB3aGVuIGF1dG9kZXRlY3Rpb24gaXMgYWN0aXZlICovCiBpbnQgZGFzZF9ub3BhdiA9IDA7CQkvKiBpcyB0cnVlLCB3aGVuIFBBViBpcyBkaXNhYmxlZCAqLwogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9ub3Bhdik7CitpbnQgZGFzZF9ub2ZjeDsJCQkvKiBkaXNhYmxlIEhpZ2ggUGVyZm9ybWFuY2UgRmljb24gKi8KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2Rfbm9mY3gpOwogCiAvKgogICogY2hhciAqZGFzZFtdIGlzIGludGVuZGVkIHRvIGhvbGQgdGhlIHJhbmdlcyBzdXBwbGllZCBieSB0aGUgZGFzZD0gc3RhdGVtZW50CkBAIC0xMjUsNiArMTI5LDcgQEAKICAqIFJlYWQgYSBkZXZpY2UgYnVzaWQvZGV2bm8gZnJvbSBhIHN0cmluZy4KICAqLwogc3RhdGljIGludAorCiBkYXNkX2J1c2lkKGNoYXIgKipzdHIsIGludCAqaWQwLCBpbnQgKmlkMSwgaW50ICpkZXZubykKIHsKIAlpbnQgdmFsLCBvbGRfc3R5bGU7CkBAIC0xMzIsOCArMTM3LDcgQEAKIAkvKiBJbnRlcnByZXQgaXBsZGV2IGJ1c2lkICovCiAJaWYgKHN0cm5jbXAoREFTRF9JUExERVYsICpzdHIsIHN0cmxlbihEQVNEX0lQTERFVikpID09IDApIHsKIAkJaWYgKGlwbF9pbmZvLnR5cGUgIT0gSVBMX1RZUEVfQ0NXKSB7Ci0JCQlNRVNTQUdFKEtFUk5fRVJSLCAiJXMiLCAiaXBsIGRldmljZSBpcyBub3QgYSBjY3cgIgotCQkJCSJkZXZpY2UiKTsKKwkJCXByX2VycigiVGhlIElQTCBkZXZpY2UgaXMgbm90IGEgQ0NXIGRldmljZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkqaWQwID0gMDsKQEAgLTIwOSw5ICsyMTMsOCBAQAogCQllbHNlIGlmIChsZW4gPT0gOCAmJiAhc3RybmNtcChzdHIsICJmYWlsZmFzdCIsIDgpKQogCQkJZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX0ZBSUxGQVNUOwogCQllbHNlIHsKLQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAotCQkJCSJ1bnN1cHBvcnRlZCBmZWF0dXJlOiAlKnMsICIKLQkJCQkiaWdub3Jpbmcgc2V0dGluZyIsIGxlbiwgc3RyKTsKKwkJCXByX3dhcm5pbmcoIiUqcyBpcyBub3QgYSBzdXBwb3J0ZWQgZGV2aWNlIG9wdGlvblxuIiwKKwkJCQkgICBsZW4sIHN0cik7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0KIAkJc3RyICs9IGxlbjsKQEAgLTIyMCw4ICsyMjMsOCBAQAogCQlzdHIrKzsKIAl9CiAJaWYgKCpzdHIgIT0gJyknKSB7Ci0JCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLAotCQkJIm1pc3NpbmcgJyknIGluIGRhc2QgcGFyYW1ldGVyIHN0cmluZ1xuIik7CisJCXByX3dhcm5pbmcoIkEgY2xvc2luZyBwYXJlbnRoZXNpcyAnKScgaXMgbWlzc2luZyBpbiB0aGUgIgorCQkJICAgImRhc2Q9IHBhcmFtZXRlclxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAl9IGVsc2UKIAkJc3RyKys7CkBAIC0yNTMsMjUgKzI1NiwyOSBAQAogICAgICAgICB9CiAJaWYgKHN0cm5jbXAoImF1dG9kZXRlY3QiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWRhc2RfYXV0b2RldGVjdCA9IDE7Ci0JCU1FU1NBR0UgKEtFUk5fSU5GTywgIiVzIiwKLQkJCSAidHVybmluZyB0byBhdXRvZGV0ZWN0aW9uIG1vZGUiKTsKKwkJcHJfaW5mbygiVGhlIGF1dG9kZXRlY3Rpb24gbW9kZSBoYXMgYmVlbiBhY3RpdmF0ZWRcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXNpZHVhbF9zdHI7CiAgICAgICAgIH0KIAlpZiAoc3RybmNtcCgicHJvYmVvbmx5IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlkYXNkX3Byb2Jlb25seSA9IDE7Ci0JCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLAotCQkJInR1cm5pbmcgdG8gcHJvYmVvbmx5IG1vZGUiKTsKKwkJcHJfaW5mbygiVGhlIHByb2Jlb25seSBtb2RlIGhhcyBiZWVuIGFjdGl2YXRlZFxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc2lkdWFsX3N0cjsKICAgICAgICAgfQogCWlmIChzdHJuY21wKCJub3BhdiIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJaWYgKE1BQ0hJTkVfSVNfVk0pCi0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIidub3Bhdicgbm90IHN1cHBvcnRlZCBvbiBWTSIpOworCQkJcHJfaW5mbygiJ25vcGF2JyBpcyBub3Qgc3VwcG9ydGVkIG9uIHovVk1cbiIpOwogCQllbHNlIHsKIAkJCWRhc2Rfbm9wYXYgPSAxOwotCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJkaXNhYmxlIFBBViBtb2RlIik7CisJCQlwcl9pbmZvKCJQQVYgc3VwcG9ydCBoYXMgYmUgZGVhY3RpdmF0ZWRcbiIpOwogCQl9CiAJCXJldHVybiByZXNpZHVhbF9zdHI7CiAJfQorCWlmIChzdHJuY21wKCJub2ZjeCIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKKwkJZGFzZF9ub2ZjeCA9IDE7CisJCXByX2luZm8oIkhpZ2ggUGVyZm9ybWFuY2UgRklDT04gc3VwcG9ydCBoYXMgYmVlbiAiCisJCQkiZGVhY3RpdmF0ZWRcbiIpOworCQlyZXR1cm4gcmVzaWR1YWxfc3RyOworCX0KIAlpZiAoc3RybmNtcCgiZml4ZWRidWZmZXJzIiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlpZiAoZGFzZF9wYWdlX2NhY2hlKQogCQkJcmV0dXJuIHJlc2lkdWFsX3N0cjsKQEAgLTI4MCwxMCArMjg3LDEwIEBACiAJCQkJCSAgUEFHRV9TSVpFLCBTTEFCX0NBQ0hFX0RNQSwKIAkJCQkJICBOVUxMKTsKIAkJaWYgKCFkYXNkX3BhZ2VfY2FjaGUpCi0JCQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwgIkZhaWxlZCB0byBjcmVhdGUgc2xhYiwgIgorCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiJXMiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzbGFiLCAiCiAJCQkJImZpeGVkIGJ1ZmZlciBtb2RlIGRpc2FibGVkLiIpOwogCQllbHNlCi0JCQlNRVNTQUdFIChLRVJOX0lORk8sICIlcyIsCisJCQlEQkZfRVZFTlQoREJGX0lORk8sICIlcyIsCiAJCQkJICJ0dXJuaW5nIG9uIGZpeGVkIGJ1ZmZlciBtb2RlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc2lkdWFsX3N0cjsKICAgICAgICAgfQpAQCAtMzIxLDcgKzMyOCw3IEBACiAJICAgIChmcm9tX2lkMCAhPSB0b19pZDAgfHwgZnJvbV9pZDEgIT0gdG9faWQxIHx8IGZyb20gPiB0bykpCiAJCXJjID0gLUVJTlZBTDsKIAlpZiAocmMpIHsKLQkJTUVTU0FHRShLRVJOX0VSUiwgIkludmFsaWQgZGV2aWNlIHJhbmdlICVzIiwgcGFyc2VzdHJpbmcpOworCQlwcl9lcnIoIiVzIGlzIG5vdCBhIHZhbGlkIGRldmljZSByYW5nZVxuIiwgcGFyc2VzdHJpbmcpOwogCQlyZXR1cm4gRVJSX1BUUihyYyk7CiAJfQogCWZlYXR1cmVzID0gZGFzZF9mZWF0dXJlX2xpc3Qoc3RyLCAmc3RyKTsKQEAgLTM0MCw4ICszNDcsOCBAQAogCQlyZXR1cm4gc3RyICsgMTsKIAlpZiAoKnN0ciA9PSAnXDAnKQogCQlyZXR1cm4gc3RyOwotCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAotCQkianVuayBhdCBlbmQgb2YgZGFzZCBwYXJhbWV0ZXIgc3RyaW5nOiAlc1xuIiwgc3RyKTsKKwlwcl93YXJuaW5nKCJUaGUgZGFzZD0gcGFyYW1ldGVyIHZhbHVlICVzIGhhcyBhbiBpbnZhbGlkIGVuZGluZ1xuIiwKKwkJICAgc3RyKTsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IGVmMmE1NjkuLmI5YTdmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTgsNiArOCw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNDQsOCArMTQ2LDggQEAKIAltZHNrX3Rlcm1faW8oZGV2aWNlKTsKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGRldmljZS0+YmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMpCi0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiRElBRyBFUlAgdW5zdWNjZXNzZnVsLCAiCi0JCQkgICAgInJjPSVkIiwgcmMpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIEVSUCBmYWlsZWQgd2l0aCAiCisJCQkgICAgInJjPSVkXG4iLCByYyk7CiB9CiAKIC8qIFN0YXJ0IGEgZ2l2ZW4gcmVxdWVzdCBhdCB0aGUgZGV2aWNlLiBSZXR1cm4gemVybyBvbiBzdWNjZXNzLCBub24temVybwpAQCAtMTYwLDcgKzE2Miw3IEBACiAKIAlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OwogCWlmIChjcXItPnJldHJpZXMgPCAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiRElBRyBzdGFydF9JTzogcmVxdWVzdCAlcCAiCisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiRElBRyBzdGFydF9JTzogcmVxdWVzdCAlcCAiCiAJCQkgICAgIi0gbm8gcmV0cnkgbGVmdCkiLCBjcXIpOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0VSUk9SOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE5NSw3ICsxOTcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OiAvKiBFcnJvciBjb25kaXRpb24gKi8KIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiZGlhMjUwIHJldHVybmVkIHJjPSVkIiwgcmMpOworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJkaWEyNTAgcmV0dXJuZWQgcmM9JWQiLCByYyk7CiAJCWRhc2RfZGlhZ19lcnAoZGV2aWNlKTsKIAkJcmMgPSAtRUlPOwogCQlicmVhazsKQEAgLTI0MywxMyArMjQ1LDE0IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKCFpcCkgewkJLyogbm8gaW50cGFybTogdW5zb2xpY2l0ZWQgaW50ZXJydXB0ICovCi0JCU1FU1NBR0UoS0VSTl9ERUJVRywgIiVzIiwgImNhdWdodCB1bnNvbGljaXRlZCBpbnRlcnJ1cHQiKTsKKwkJREJGX0VWRU5UKERCRl9OT1RJQ0UsICIlcyIsICJjYXVnaHQgdW5zb2xpY2l0ZWQgIgorCQkJICAgICAgImludGVycnVwdCIpOwogCQlyZXR1cm47CiAJfQogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGlwOwogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICIgbWFnaWMgbnVtYmVyIG9mIGRhc2RfY2N3X3JlcSAweCUwOFggZG9lc24ndCIKIAkJCSAgICAiIG1hdGNoIGRpc2NpcGxpbmUgMHglMDhYIiwKIAkJCSAgICBjcXItPm1hZ2ljLCAqKGludCAqKSAoJmRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSkpOwpAQCAtMjgxLDE1ICsyODQsMTEgQEAKIAkJCQlyYyA9IGRhc2Rfc3RhcnRfZGlhZyhuZXh0KTsKIAkJCQlpZiAocmMgPT0gMCkKIAkJCQkJZXhwaXJlcyA9IG5leHQtPmV4cGlyZXM7Ci0JCQkJZWxzZSBpZiAocmMgIT0gLUVBQ0NFUykKLQkJCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCQkgICAgIkludGVycnVwdCBmYXN0cGF0aCAiCi0JCQkJCQkgICAgImZhaWxlZCEiKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImludGVycnVwdCBzdGF0dXMgZm9yICIKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludGVycnVwdCBzdGF0dXMgZm9yICIKIAkJCSAgICAicmVxdWVzdCAlcCB3YXMgJWQgKCVkIHJldHJpZXMgbGVmdCkiLCBjcXIsIHN0YXR1cywKIAkJCSAgICBjcXItPnJldHJpZXMpOwogCQlkYXNkX2RpYWdfZXJwKGRldmljZSk7CkBAIC0zMjIsOCArMzIxLDkgQEAKIAlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7CiAJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9kaWFnX3ByaXZhdGUpLEdGUF9LRVJORUwpOwogCQlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlIGRhdGEiKTsKKwkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQkiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHByaXZhdGUgREFTRCBkYXRhICIKKwkJCQkgICAgICAiZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWNjd19kZXZpY2VfZ2V0X2lkKGRldmljZS0+Y2RldiwgJnByaXZhdGUtPmRldl9pZCk7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAl9CiAJYmxvY2sgPSBkYXNkX2FsbG9jX2Jsb2NrKCk7CiAJaWYgKElTX0VSUihibG9jaykpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgc3RydWN0dXJlIik7CiAJCWRldmljZS0+cHJpdmF0ZSA9IE5VTEw7CiAJCWtmcmVlKHByaXZhdGUpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIAlyYyA9IGRpYWcyMTAoKHN0cnVjdCBkaWFnMjEwICopIHJkY19kYXRhKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJmYWlsZWQgdG8gcmV0cmlldmUgZGV2aWNlICIKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiZmFpbGVkIHRvIHJldHJpZXZlIGRldmljZSAiCiAJCQkgICAgImluZm9ybWF0aW9uIChyYz0lZCkiLCByYyk7CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwpAQCAtMzYyLDggKzM2Miw4IEBACiAJCXByaXZhdGUtPnB0X2Jsb2NrID0gMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJ1bnN1cHBvcnRlZCBkZXZpY2UgY2xhc3MgIgotCQkJICAgICIoY2xhc3M9JWQpIiwgcHJpdmF0ZS0+cmRjX2RhdGEudmRldl9jbGFzcyk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldmljZSB0eXBlICVkIGlzIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgICJpbiBESUFHIG1vZGVcbiIsIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOwogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zODAsNyArMzgwLDcgQEAKIAkvKiBmaWd1cmUgb3V0IGJsb2Nrc2l6ZSBvZiBkZXZpY2UgKi8KIAlsYWJlbCA9IChzdHJ1Y3QgdnRvY19jbXNfbGFiZWwgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmIChsYWJlbCA9PSBOVUxMKSAgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJObyBtZW1vcnkgdG8gYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNDA0LDggKzQwNCw4IEBACiAJCXByaXZhdGUtPmlvYi5mbGFnYSA9IERBU0RfRElBR19GTEFHQV9ERUZBVUxUOwogCQlyYyA9IGRpYTI1MCgmcHJpdmF0ZS0+aW9iLCBSV19CSU8pOwogCQlpZiAocmMgPT0gMykgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJIkRJQUcgY2FsbCBmYWlsZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQSA2NC1iaXQgRElBRyBjYWxsIGZhaWxlZFxuIik7CiAJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfbGFiZWw7CiAJCX0KQEAgLTQxNCw4ICs0MTQsOCBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChic2l6ZSA+IFBBR0VfU0laRSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImRldmljZSBhY2Nlc3MgZmFpbGVkICIKLQkJCSAgICAiKHJjPSVkKSIsIHJjKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIgorCQkJICIgb2YgYW4gaW5jb3JyZWN0IGZvcm1hdCAocmM9JWQpXG4iLCByYyk7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXRfbGFiZWw7CiAJfQpAQCAtNDMzLDE1ICs0MzMsMTUgQEAKIAkJYmxvY2stPnMyYl9zaGlmdCsrOwogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgYmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJESUFHIGluaXRpYWxpemF0aW9uICIKLQkJCSJmYWlsZWQgKHJjPSVkKSIsIHJjKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRElBRyBpbml0aWFsaXphdGlvbiAiCisJCQkiZmFpbGVkIHdpdGggcmM9JWRcbiIsIHJjKTsKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkJICAgICIoJWxkIEIvYmxrKTogJWxka0IiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIChibG9jay0+YmxvY2tzIDw8Ci0JCQkJYmxvY2stPnMyYl9zaGlmdCkgPj4gMSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiTmV3IERBU0Qgd2l0aCAlbGQgYnl0ZS9ibG9jaywgdG90YWwgc2l6ZSAlbGQgS0JcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLT5icF9ibG9jaywKKwkJCSAodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKKwkJCQkJICBibG9jay0+czJiX3NoaWZ0KSA+PiAxKTsKIAl9CiBvdXRfbGFiZWw6CiAJZnJlZV9wYWdlKChsb25nKSBsYWJlbCk7CkBAIC01OTUsNyArNTk1LDcgQEAKIGRhc2RfZGlhZ19kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICogcmVxLAogCQkgICAgIHN0cnVjdCBpcmIgKnN0YXQpCiB7Ci0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiZHVtcCBzZW5zZSBub3QgYXZhaWxhYmxlIGZvciBESUFHIGRhdGEiKTsKIH0KIApAQCAtNjIxLDEwICs2MjEsOCBAQAogZGFzZF9kaWFnX2luaXQodm9pZCkKIHsKIAlpZiAoIU1BQ0hJTkVfSVNfVk0pIHsKLQkJTUVTU0FHRV9MT0coS0VSTl9JTkZPLAotCQkJICAgICJNYWNoaW5lIGlzIG5vdCBWTTogJXMgIgotCQkJICAgICJkaXNjaXBsaW5lIG5vdCBpbml0aWFsaXppbmciLAotCQkJICAgIGRhc2RfZGlhZ19kaXNjaXBsaW5lLm5hbWUpOworCQlwcl9pbmZvKCJEaXNjaXBsaW5lICVzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgei9WTVxuIiwKKwkJCWRhc2RfZGlhZ19kaXNjaXBsaW5lLm5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJQVNDRUJDKGRhc2RfZGlhZ19kaXNjaXBsaW5lLmViY25hbWUsIDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGJkYjg3OTkuLjIxMjU0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTExLDYgKzExLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTI3LDkgKzI5LDEyIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgorI2luY2x1ZGUgPGFzbS9pdGN3Lmg+CiAKICNpbmNsdWRlICJkYXNkX2ludC5oIgogI2luY2x1ZGUgImRhc2RfZWNrZC5oIgorI2luY2x1ZGUgIi4uL2Npby9jaHNjLmgiCisKIAogI2lmZGVmIFBSSU5US19IRUFERVIKICN1bmRlZiBQUklOVEtfSEVBREVSCkBAIC04NCw3ICs4OSw3IEBACiAJLyogc2V0IEVDS0Qgc3BlY2lmaWMgY2N3LWRldmljZSBvcHRpb25zICovCiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb3B0aW9ucyhjZGV2LCBDQ1dERVZfQUxMT1dfRk9SQ0UpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCSAgICAgICAiZGFzZF9lY2tkX3Byb2JlOiBjb3VsZCBub3Qgc2V0IGNjdy1kZXZpY2Ugb3B0aW9ucyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CkBAIC0xNTksNiArMTY0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9jaF90KHN0cnVjdCBjaF90ICpnZW8sIF9fdTMyIGN5bCwgX191OCBoZWFkKQoreworCWdlby0+Y3lsID0gKF9fdTE2KSBjeWw7CisJZ2VvLT5oZWFkID0gY3lsID4+IDE2OworCWdlby0+aGVhZCA8PD0gNDsKKwlnZW8tPmhlYWQgfD0gaGVhZDsKK30KKwogc3RhdGljIGludAogY2hlY2tfWFJDIChzdHJ1Y3QgY2N3MSAgICAgICAgICpkZV9jY3csCiAgICAgICAgICAgIHN0cnVjdCBERV9lY2tkX2RhdGEgKmRhdGEsCkBAIC0xODYsMTEgKzE5OSwxMiBAQAogfQogCiBzdGF0aWMgaW50Ci1kZWZpbmVfZXh0ZW50KHN0cnVjdCBjY3cxICogY2N3LCBzdHJ1Y3QgREVfZWNrZF9kYXRhICogZGF0YSwgaW50IHRyaywKLQkgICAgICBpbnQgdG90cmssIGludCBjbWQsIHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKK2RlZmluZV9leHRlbnQoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IERFX2Vja2RfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHRyaywKKwkgICAgICB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKLQlzdHJ1Y3QgY2hfdCBnZW8sIGJlZywgZW5kOworCXUzMiBiZWdjeWwsIGVuZGN5bDsKKwl1MTYgaGVhZHMsIGJlZ2hlYWQsIGVuZGhlYWQ7CiAJaW50IHJjID0gMDsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKQEAgLTIzNiw3ICsyNTAsOCBAQAogCQlyYyA9IGNoZWNrX1hSQyAoY2N3LCBkYXRhLCBkZXZpY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAidW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIjB4JXggaXMgbm90IGEga25vd24gY29tbWFuZFxuIiwgY21kKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDgsMjcgKzI2MywyNCBAQAogCSAgICAmJiAhKHByaXZhdGUtPnVzZXNfY2RsICYmIHRyayA8IDIpKQogCQlkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQwOyAvKiBSZWd1bGFyIERhdGEgRm9ybWF0IE1vZGUgKi8KIAotCWdlby5jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWw7Ci0JZ2VvLmhlYWQgPSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQliZWcuY3lsID0gdHJrIC8gZ2VvLmhlYWQ7Ci0JYmVnLmhlYWQgPSB0cmsgJSBnZW8uaGVhZDsKLQllbmQuY3lsID0gdG90cmsgLyBnZW8uaGVhZDsKLQllbmQuaGVhZCA9IHRvdHJrICUgZ2VvLmhlYWQ7CisJaGVhZHMgPSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwliZWdjeWwgPSB0cmsgLyBoZWFkczsKKwliZWdoZWFkID0gdHJrICUgaGVhZHM7CisJZW5kY3lsID0gdG90cmsgLyBoZWFkczsKKwllbmRoZWFkID0gdG90cmsgJSBoZWFkczsKIAogCS8qIGNoZWNrIGZvciBzZXF1ZW50aWFsIHByZXN0YWdlIC0gZW5oYW5jZSBjeWxpbmRlciByYW5nZSAqLwogCWlmIChkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAogCSAgICBkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKIAotCQlpZiAoZW5kLmN5bCArIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwgPCBnZW8uY3lsKQotCQkJZW5kLmN5bCArPSBwcml2YXRlLT5hdHRyaWIubnJfY3lsOworCQlpZiAoZW5kY3lsICsgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCA8IHByaXZhdGUtPnJlYWxfY3lsKQorCQkJZW5kY3lsICs9IHByaXZhdGUtPmF0dHJpYi5ucl9jeWw7CiAJCWVsc2UKLQkJCWVuZC5jeWwgPSAoZ2VvLmN5bCAtIDEpOworCQkJZW5kY3lsID0gKHByaXZhdGUtPnJlYWxfY3lsIC0gMSk7CiAJfQogCi0JZGF0YS0+YmVnX2V4dC5jeWwgPSBiZWcuY3lsOwotCWRhdGEtPmJlZ19leHQuaGVhZCA9IGJlZy5oZWFkOwotCWRhdGEtPmVuZF9leHQuY3lsID0gZW5kLmN5bDsKLQlkYXRhLT5lbmRfZXh0LmhlYWQgPSBlbmQuaGVhZDsKKwlzZXRfY2hfdCgmZGF0YS0+YmVnX2V4dCwgYmVnY3lsLCBiZWdoZWFkKTsKKwlzZXRfY2hfdCgmZGF0YS0+ZW5kX2V4dCwgZW5kY3lsLCBlbmRoZWFkKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI4MywyOSArMjk1LDE0NSBAQAogCQlyZXR1cm4gMDsKIAogCS8qIHN3aXRjaCBvbiBTeXN0ZW0gVGltZSBTdGFtcCAtIG5lZWRlZCBmb3IgWFJDIFN1cHBvcnQgKi8KLQlwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kLmdhX2V4dGVuZGVkIHw9IDB4MDg7IC8qICdUaW1lIFN0YW1wIFZhbGlkJyAgICovCi0JcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZC5nYV9leHRlbmRlZCB8PSAweDAyOyAvKiAnRXh0ZW5kZWQgUGFyYW1ldGVyJyAqLworCXBmeGRhdGEtPmRlZmluZV9leHRlbnQuZ2FfZXh0ZW5kZWQgfD0gMHgwODsgLyogJ1RpbWUgU3RhbXAgVmFsaWQnICAgKi8KKwlwZnhkYXRhLT5kZWZpbmVfZXh0ZW50LmdhX2V4dGVuZGVkIHw9IDB4MDI7IC8qICdFeHRlbmRlZCBQYXJhbWV0ZXInICovCiAJcGZ4ZGF0YS0+dmFsaWRpdHkudGltZV9zdGFtcCA9IDE7CSAgICAvKiAnVGltZSBTdGFtcCBWYWxpZCcgICAqLwogCi0JcmMgPSBnZXRfc3luY19jbG9jaygmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZC5lcF9zeXNfdGltZSk7CisJcmMgPSBnZXRfc3luY19jbG9jaygmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudC5lcF9zeXNfdGltZSk7CiAJLyogSWdub3JlIHJldHVybiBjb2RlIGlmIHN5bmMgY2xvY2sgaXMgc3dpdGNoZWQgb2ZmLiAqLwogCWlmIChyYyA9PSAtRU5PU1lTIHx8IHJjID09IC1FQUNDRVMpCiAJCXJjID0gMDsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgcHJlZml4KHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhLCBpbnQgdHJrLAotCQkgIGludCB0b3RyaywgaW50IGNtZCwgc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2LAotCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYpCitzdGF0aWMgdm9pZCBmaWxsX0xSRV9kYXRhKHN0cnVjdCBMUkVfZWNrZF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHJrLAorCQkJICB1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IGNvdW50LCBpbnQgY21kLAorCQkJICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwkJCSAgdW5zaWduZWQgaW50IHRsZikKK3sKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJaW50IHNlY3RvcjsKKwlpbnQgZG4sIGQ7CisKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisJc2VjdG9yID0gMDsKKwlpZiAocmVjX29uX3RyaykgeworCQlzd2l0Y2ggKHByaXZhdGUtPnJkY19kYXRhLmRldl90eXBlKSB7CisJCWNhc2UgMHgzMzkwOgorCQkJZG4gPSBjZWlsX3F1b3QocmVjbGVuICsgNiwgMjMyKTsKKwkJCWQgPSA5ICsgY2VpbF9xdW90KHJlY2xlbiArIDYgKiAoZG4gKyAxKSwgMzQpOworCQkJc2VjdG9yID0gKDQ5ICsgKHJlY19vbl90cmsgLSAxKSAqICgxMCArIGQpKSAvIDg7CisJCQlicmVhazsKKwkJY2FzZSAweDMzODA6CisJCQlkID0gNyArIGNlaWxfcXVvdChyZWNsZW4gKyAxMiwgMzIpOworCQkJc2VjdG9yID0gKDM5ICsgKHJlY19vbl90cmsgLSAxKSAqICg4ICsgZCkpIC8gNzsKKwkJCWJyZWFrOworCQl9CisJfQorCWRhdGEtPnNlY3RvciA9IHNlY3RvcjsKKwkvKiBub3RlOiBtZWFuaW5nIG9mIGNvdW50IGRlcGVuZHMgb24gdGhlIG9wZXJhdGlvbgorCSAqCSBmb3IgcmVjb3JkIGJhc2VkIEkvTyBpdCdzIHRoZSBudW1iZXIgb2YgcmVjb3JkcywgYnV0IGZvcgorCSAqCSB0cmFjayBiYXNlZCBJL08gaXQncyB0aGUgbnVtYmVyIG9mIHRyYWNrcworCSAqLworCWRhdGEtPmNvdW50ID0gY291bnQ7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfSE9NRV9BRERSRVNTOgorCQlkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDM7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAzOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9IT01FX0FERFJFU1M6CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MzsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MTY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9SRUNPUkRfWkVSTzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgxOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMzsKKwkJZGF0YS0+Y291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfUkVDT1JEX1pFUk86CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MzsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MTY7CisJCWRhdGEtPmNvdW50Kys7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURToKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfTVQ6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9LRF9NVDoKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAzOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOwkvKiBub3QgdGxmLCBhcyBvbmUgbWlnaHQgdGhpbmsgKi8KKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4M0Y7CisJCWRhdGEtPmV4dGVuZGVkX29wZXJhdGlvbiA9IDB4MjM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX01UOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDA2OworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDE2OworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DT1VOVDoKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHRsZjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MEM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19FUkFTRToKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwYjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsCisJCQkgICAgImZpbGwgTFJFIHVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlCVUcoKTsKKwl9CisJc2V0X2NoX3QoJmRhdGEtPnNlZWtfYWRkciwKKwkJIHRyayAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAorCQkgdHJrICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpOworCWRhdGEtPnNlYXJjaF9hcmcuY3lsID0gZGF0YS0+c2Vla19hZGRyLmN5bDsKKwlkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPSBkYXRhLT5zZWVrX2FkZHIuaGVhZDsKKwlkYXRhLT5zZWFyY2hfYXJnLnJlY29yZCA9IHJlY19vbl90cms7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X0xSRShzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqcGZ4ZGF0YSwKKwkJICAgICAgdW5zaWduZWQgaW50IHRyaywgdW5zaWduZWQgaW50IHRvdHJrLCBpbnQgY21kLAorCQkgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IGNvdW50LAorCQkgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSwgdW5zaWduZWQgaW50IHRsZikKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKmJhc2Vwcml2LCAqc3RhcnRwcml2OwotCXN0cnVjdCBERV9lY2tkX2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGNoX3QgZ2VvLCBiZWcsIGVuZDsKKwlzdHJ1Y3QgREVfZWNrZF9kYXRhICpkZWRhdGE7CisJc3RydWN0IExSRV9lY2tkX2RhdGEgKmxyZWRhdGE7CisJdTMyIGJlZ2N5bCwgZW5kY3lsOworCXUxNiBoZWFkcywgYmVnaGVhZCwgZW5kaGVhZDsKIAlpbnQgcmMgPSAwOwogCiAJYmFzZXByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CiAJc3RhcnRwcml2ID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBzdGFydGRldi0+cHJpdmF0ZTsKLQlkYXRhID0gJnBmeGRhdGEtPmRlZmluZV9leHRlbmQ7CisJZGVkYXRhID0gJnBmeGRhdGEtPmRlZmluZV9leHRlbnQ7CisJbHJlZGF0YSA9ICZwZnhkYXRhLT5sb2NhdGVfcmVjb3JkOwogCiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUEZYOwogCWNjdy0+ZmxhZ3MgPSAwOwpAQCAtMzE0LDEwICs0NDIsMTYgQEAKIAogCW1lbXNldChwZnhkYXRhLCAwLCBzaXplb2YoKnBmeGRhdGEpKTsKIAkvKiBwcmVmaXggZGF0YSAqLwotCXBmeGRhdGEtPmZvcm1hdCA9IDA7CisJaWYgKGZvcm1hdCA+IDEpIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LAorCQkJICAgICAgIlBGWCBMUkUgdW5rbm93biBmb3JtYXQgMHgleCIsIGZvcm1hdCk7CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcGZ4ZGF0YS0+Zm9ybWF0ID0gZm9ybWF0OwogCXBmeGRhdGEtPmJhc2VfYWRkcmVzcyA9IGJhc2Vwcml2LT5uZWQtPnVuaXRfYWRkcjsKIAlwZnhkYXRhLT5iYXNlX2xzcyA9IGJhc2Vwcml2LT5uZWQtPklEOwotCXBmeGRhdGEtPnZhbGlkaXR5LmRlZmluZV9leHRlbmQgPSAxOworCXBmeGRhdGEtPnZhbGlkaXR5LmRlZmluZV9leHRlbnQgPSAxOwogCiAJLyogcHJpdmF0ZSB1aWQgaXMga2VwdCB1cCB0byBkYXRlLCBjb25mX2RhdGEgbWF5IGJlIG91dGRhdGVkICovCiAJaWYgKHN0YXJ0cHJpdi0+dWlkLnR5cGUgIT0gVUFfQkFTRV9ERVZJQ0UpIHsKQEAgLTMzNyw3MCArNDcxLDk0IEBACiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0Q6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0RfTVQ6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ09VTlQ6Ci0JCWRhdGEtPm1hc2sucGVybSA9IDB4MTsKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5ibGtfc2l6ZSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURToKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfTVQ6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9LRF9NVDoKLQkJZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CiAJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UOgotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IERBU0RfQllQQVNTX0NBQ0hFOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CiAJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX0VSQVNFOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9IT01FX0FERFJFU1M6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1JFQ09SRF9aRVJPOgotCQlkYXRhLT5tYXNrLnBlcm0gPSAweDM7Ci0JCWRhdGEtPm1hc2suYXV0aCA9IDB4MTsKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDM7CisJCWRlZGF0YS0+bWFzay5hdXRoID0gMHgxOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CisJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gYmxrc2l6ZTsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgYmFzZWRldiwgInVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOwotCQlicmVhazsKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LAorCQkJICAgICJQRlggTFJFIHVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGF0YS0+YXR0cmlidXRlcy5tb2RlID0gMHgzOwkvKiBFQ0tEICovCisJZGVkYXRhLT5hdHRyaWJ1dGVzLm1vZGUgPSAweDM7CS8qIEVDS0QgKi8KIAogCWlmICgoYmFzZXByaXYtPnJkY19kYXRhLmN1X3R5cGUgPT0gMHgyMTA1IHx8CiAJICAgICBiYXNlcHJpdi0+cmRjX2RhdGEuY3VfdHlwZSA9PSAweDIxMDcgfHwKIAkgICAgIGJhc2Vwcml2LT5yZGNfZGF0YS5jdV90eXBlID09IDB4MTc1MCkKIAkgICAgJiYgIShiYXNlcHJpdi0+dXNlc19jZGwgJiYgdHJrIDwgMikpCi0JCWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDA7IC8qIFJlZ3VsYXIgRGF0YSBGb3JtYXQgTW9kZSAqLworCQlkZWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDA7IC8qIFJlZ3VsYXIgRGF0YSBGb3JtYXQgTW9kZSAqLwogCi0JZ2VvLmN5bCA9IGJhc2Vwcml2LT5yZGNfZGF0YS5ub19jeWw7Ci0JZ2VvLmhlYWQgPSBiYXNlcHJpdi0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JYmVnLmN5bCA9IHRyayAvIGdlby5oZWFkOwotCWJlZy5oZWFkID0gdHJrICUgZ2VvLmhlYWQ7Ci0JZW5kLmN5bCA9IHRvdHJrIC8gZ2VvLmhlYWQ7Ci0JZW5kLmhlYWQgPSB0b3RyayAlIGdlby5oZWFkOworCWhlYWRzID0gYmFzZXByaXYtPnJkY19kYXRhLnRya19wZXJfY3lsOworCWJlZ2N5bCA9IHRyayAvIGhlYWRzOworCWJlZ2hlYWQgPSB0cmsgJSBoZWFkczsKKwllbmRjeWwgPSB0b3RyayAvIGhlYWRzOworCWVuZGhlYWQgPSB0b3RyayAlIGhlYWRzOwogCiAJLyogY2hlY2sgZm9yIHNlcXVlbnRpYWwgcHJlc3RhZ2UgLSBlbmhhbmNlIGN5bGluZGVyIHJhbmdlICovCi0JaWYgKGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8Ci0JICAgIGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgeworCWlmIChkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CisJICAgIGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CiAKLQkJaWYgKGVuZC5jeWwgKyBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bCA8IGdlby5jeWwpCi0JCQllbmQuY3lsICs9IGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsOworCQlpZiAoZW5kY3lsICsgYmFzZXByaXYtPmF0dHJpYi5ucl9jeWwgPCBiYXNlcHJpdi0+cmVhbF9jeWwpCisJCQllbmRjeWwgKz0gYmFzZXByaXYtPmF0dHJpYi5ucl9jeWw7CiAJCWVsc2UKLQkJCWVuZC5jeWwgPSAoZ2VvLmN5bCAtIDEpOworCQkJZW5kY3lsID0gKGJhc2Vwcml2LT5yZWFsX2N5bCAtIDEpOwogCX0KIAotCWRhdGEtPmJlZ19leHQuY3lsID0gYmVnLmN5bDsKLQlkYXRhLT5iZWdfZXh0LmhlYWQgPSBiZWcuaGVhZDsKLQlkYXRhLT5lbmRfZXh0LmN5bCA9IGVuZC5jeWw7Ci0JZGF0YS0+ZW5kX2V4dC5oZWFkID0gZW5kLmhlYWQ7CisJc2V0X2NoX3QoJmRlZGF0YS0+YmVnX2V4dCwgYmVnY3lsLCBiZWdoZWFkKTsKKwlzZXRfY2hfdCgmZGVkYXRhLT5lbmRfZXh0LCBlbmRjeWwsIGVuZGhlYWQpOworCisJaWYgKGZvcm1hdCA9PSAxKSB7CisJCWZpbGxfTFJFX2RhdGEobHJlZGF0YSwgdHJrLCByZWNfb25fdHJrLCBjb3VudCwgY21kLAorCQkJICAgICAgYmFzZWRldiwgYmxrc2l6ZSwgdGxmKTsKKwl9CisKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgcHJlZml4KHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhLAorCQkgIHVuc2lnbmVkIGludCB0cmssIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwKKwkJICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYpCit7CisJcmV0dXJuIHByZWZpeF9MUkUoY2N3LCBwZnhkYXRhLCB0cmssIHRvdHJrLCBjbWQsIGJhc2VkZXYsIHN0YXJ0ZGV2LAorCQkJICAwLCAwLCAwLCAwLCAwKTsKK30KKwogc3RhdGljIHZvaWQKLWxvY2F0ZV9yZWNvcmQoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IExPX2Vja2RfZGF0YSAqZGF0YSwgaW50IHRyaywKLQkgICAgICBpbnQgcmVjX29uX3RyaywgaW50IG5vX3JlYywgaW50IGNtZCwKK2xvY2F0ZV9yZWNvcmQoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IExPX2Vja2RfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHRyaywKKwkgICAgICB1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IG5vX3JlYywgaW50IGNtZCwKIAkgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UsIGludCByZWNsZW4pCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwpAQCAtNDkxLDEyICs2NDksMTQgQEAKIAkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MGI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICJ1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICJ1bmtub3duIGxvY2F0ZSByZWNvcmQgIgorCQkJICAgICAgIm9wY29kZSAweCV4IiwgY21kKTsKIAl9Ci0JZGF0YS0+c2Vla19hZGRyLmN5bCA9IGRhdGEtPnNlYXJjaF9hcmcuY3lsID0KLQkJdHJrIC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JZGF0YS0+c2Vla19hZGRyLmhlYWQgPSBkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPQotCQl0cmsgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwlzZXRfY2hfdCgmZGF0YS0+c2Vla19hZGRyLAorCQkgdHJrIC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSB0cmsgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCk7CisJZGF0YS0+c2VhcmNoX2FyZy5jeWwgPSBkYXRhLT5zZWVrX2FkZHIuY3lsOworCWRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9IGRhdGEtPnNlZWtfYWRkci5oZWFkOwogCWRhdGEtPnNlYXJjaF9hcmcucmVjb3JkID0gcmVjX29uX3RyazsKIH0KIApAQCAtNTg1LDggKzc0NSw4IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoIkVDS0QiLCAxIC8qIFJDRCAqLywgY2l3LT5jb3VudCwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJDRCByZXF1ZXN0Iik7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkNEIHJlcXVlc3QiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAKQEAgLTczNiwxNCArODk2LDE2IEBACiAJCQlyYyA9IGRhc2RfZWNrZF9yZWFkX2NvbmZfbHBtKGRldmljZSwgJmNvbmZfZGF0YSwKIAkJCQkJCSAgICAgJmNvbmZfbGVuLCBscG0pOwogCQkJaWYgKHJjICYmIHJjICE9IC1FT1BOT1RTVVBQKSB7CS8qIC1FT1BOT1RTVVBQIGlzIG9rICovCi0JCQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCQkJCSJSZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSByZXR1cm5lZCAiCi0JCQkJCSJlcnJvciAlZCIsIHJjKTsKKwkJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCisJCQkJCSAgIlJlYWQgY29uZmlndXJhdGlvbiBkYXRhIHJldHVybmVkICIKKwkJCQkJICAiZXJyb3IgJWQgZm9yIGRldmljZTogJXMiLCByYywKKwkJCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCQlpZiAoY29uZl9kYXRhID09IE5VTEwpIHsKLQkJCQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwgIk5vIGNvbmZpZ3VyYXRpb24gIgotCQkJCQkiZGF0YSByZXRyaWV2ZWQiKTsKKwkJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJObyBjb25maWd1cmF0aW9uICIKKwkJCQkJICAiZGF0YSByZXRyaWV2ZWQgZm9yIGRldmljZTogJXMiLAorCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJCWNvbnRpbnVlOwkvKiBubyBlcnJvciAqLwogCQkJfQogCQkJLyogc2F2ZSBmaXJzdCB2YWxpZCBjb25maWd1cmF0aW9uIGRhdGEgKi8KQEAgLTc5MCw4ICs5NTIsOSBAQAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGRhc2RfcnNzZF9mZWF0dXJlcykpLAogCQkJCSAgIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gIgorCQkJICAicmVxdWVzdCBmb3IgZGV2aWNlOiAlcyIsCisJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwpAQCAtODQwLDcgKzEwMDMsOCBAQAogLyoKICAqIEJ1aWxkIENQIGZvciBQZXJmb3JtIFN1YnN5c3RlbSBGdW5jdGlvbiAtIFNTQy4KICAqLwotc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQkJCQkJICAgIGludCBlbmFibGVfcGF2KQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgZGFzZF9wc2Zfc3NjX2RhdGEgKnBzZl9zc2NfZGF0YTsKQEAgLTg1MSwxNSArMTAxNSwxNyBAQAogCQkJCSAgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBQU0YtU1NDIHJlcXVlc3QiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAJcHNmX3NzY19kYXRhID0gKHN0cnVjdCBkYXNkX3BzZl9zc2NfZGF0YSAqKWNxci0+ZGF0YTsKIAlwc2Zfc3NjX2RhdGEtPm9yZGVyID0gUFNGX09SREVSX1NTQzsKLQlwc2Zfc3NjX2RhdGEtPnN1Ym9yZGVyID0gMHg4ODsKLQlwc2Zfc3NjX2RhdGEtPnJlc2VydmVkWzBdID0gMHg4ODsKLQorCXBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgPSAweDQwOworCWlmIChlbmFibGVfcGF2KSB7CisJCXBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgfD0gMHg4ODsKKwkJcHNmX3NzY19kYXRhLT5yZXNlcnZlZFswXSA9IDB4ODg7CisJfQogCWNjdyA9IGNxci0+Y3BhZGRyOwogCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1BTRjsKIAljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KXBzZl9zc2NfZGF0YTsKQEAgLTg4MCwxMiArMTA0NiwxMiBAQAogICogY2FsbCBtaWdodCBjaGFuZ2UgYmVoYXZpb3VyIG9mIERBU0QgZGV2aWNlcy4KICAqLwogc3RhdGljIGludAotZGFzZF9lY2tkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCitkYXNkX2Vja2RfcHNmX3NzYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgaW50IGVuYWJsZV9wYXYpCiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKIAotCWNxciA9IGRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKGRldmljZSk7CisJY3FyID0gZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2MoZGV2aWNlLCBlbmFibGVfcGF2KTsKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAKQEAgLTkwNCwxOSArMTA3MCwyMCBAQAogewogCWludCByYzsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJaW50IGVuYWJsZV9wYXY7CiAKLQkvKiBDdXJyZW50bHkgUEFWIGlzIHRoZSBvbmx5IHJlYXNvbiB0byAndmFsaWRhdGUnIHNlcnZlciBvbiBMUEFSICovCiAJaWYgKGRhc2Rfbm9wYXYgfHwgTUFDSElORV9JU19WTSkKLQkJcmV0dXJuIDA7Ci0KLQlyYyA9IGRhc2RfZWNrZF9wc2Zfc3NjKGRldmljZSk7CisJCWVuYWJsZV9wYXYgPSAwOworCWVsc2UKKwkJZW5hYmxlX3BhdiA9IDE7CisJcmMgPSBkYXNkX2Vja2RfcHNmX3NzYyhkZXZpY2UsIGVuYWJsZV9wYXYpOwogCS8qIG1heSBiZSByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIG9uIHNlcnZlciwKIAkgKiB0aGVyZWZvcmUganVzdCByZXBvcnQgZXJyb3IgYW5kIGdvIGFoZWFkICovCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgIlBTRi1TU0Mgb24gc3RvcmFnZSBzdWJzeXN0ZW0gJXMuJXMuJTA0eCByZXR1cm5lZCByYz0lZCIsCi0JCSAgICBwcml2YXRlLT51aWQudmVuZG9yLCBwcml2YXRlLT51aWQuc2VyaWFsLAotCQkgICAgcHJpdmF0ZS0+dWlkLnNzaWQsIHJjKTsKKwlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJQU0YtU1NDIG9uIHN0b3JhZ2Ugc3Vic3lzdGVtICVzLiVzLiUwNHggIgorCQkgICJyZXR1cm5lZCByYz0lZCBmb3IgZGV2aWNlOiAlcyIsCisJCSAgcHJpdmF0ZS0+dWlkLnZlbmRvciwgcHJpdmF0ZS0+dWlkLnNlcmlhbCwKKwkJICBwcml2YXRlLT51aWQuc3NpZCwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCS8qIFJFLVJlYWQgQ29uZmlndXJhdGlvbiBEYXRhICovCiAJcmV0dXJuIGRhc2RfZWNrZF9yZWFkX2NvbmYoZGV2aWNlKTsKIH0KQEAgLTkzOCw5ICsxMTA1LDkgQEAKIAkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSksCiAJCQkJICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlICIKLQkJCQkgICAgImRhdGEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkFsbG9jYXRpbmcgbWVtb3J5IGZvciBwcml2YXRlIERBU0QgZGF0YSAiCisJCQkJICJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZGV2aWNlLT5wcml2YXRlID0gKHZvaWQgKikgcHJpdmF0ZTsKQEAgLTk2NSw4ICsxMTMyLDkgQEAKIAlpZiAocHJpdmF0ZS0+dWlkLnR5cGUgPT0gVUFfQkFTRV9ERVZJQ0UpIHsKIAkJYmxvY2sgPSBkYXNkX2FsbG9jX2Jsb2NrKCk7CiAJCWlmIChJU19FUlIoYmxvY2spKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrIHN0cnVjdHVyZSIpOworCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgIgorCQkJCSAgImJsb2NrIHN0cnVjdHVyZSBmb3IgZGV2aWNlOiAlcyIsCisJCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCXJjID0gUFRSX0VSUihibG9jayk7CiAJCQlnb3RvIG91dF9lcnIxOwogCQl9CkBAIC05OTcsMjAgKzExNjUsMjcgQEAKIAltZW1zZXQocmRjX2RhdGEsIDAsIHNpemVvZihyZGNfZGF0YSkpOwogCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgIkVDS0QiLCAmcmRjX2RhdGEsIDY0KTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0JCQkgICAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyByZXR1cm5lZCAiCi0JCQkgICAgInJjPSVkIiwgcmMpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCisJCQkgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgZmFpbGVkLCByYz0lZCBmb3IgIgorCQkJICAiZGV2aWNlOiAlcyIsIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZ290byBvdXRfZXJyMzsKIAl9Ci0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiJTA0WC8lMDJYKENVOiUwNFgvJTAyWCkgQ3lsOiVkIEhlYWQ6JWQgU2VjOiVkIiwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmRldl90eXBlLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X21vZGVsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfdHlwZSwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmN1X21vZGVsLm1vZGVsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3Ryayk7CisJLyogZmluZCB0aGUgdmFpbGQgY3lsaW5kZXIgc2l6ZSAqLworCWlmIChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgPT0gTFZfQ09NUEFUX0NZTCAmJgorCSAgICBwcml2YXRlLT5yZGNfZGF0YS5sb25nX25vX2N5bCkKKwkJcHJpdmF0ZS0+cmVhbF9jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5sb25nX25vX2N5bDsKKwllbHNlCisJCXByaXZhdGUtPnJlYWxfY3lsID0gcHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsOworCisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiTmV3IERBU0QgJTA0WC8lMDJYIChDVSAlMDRYLyUwMlgpICIKKwkJICJ3aXRoICVkIGN5bGluZGVycywgJWQgaGVhZHMsICVkIHNlY3RvcnNcbiIsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5kZXZfdHlwZSwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmRldl9tb2RlbCwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmN1X3R5cGUsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5jdV9tb2RlbC5tb2RlbCwKKwkJICAgIHByaXZhdGUtPnJlYWxfY3lsLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3Ryayk7CiAJcmV0dXJuIDA7CiAKIG91dF9lcnIzOgpAQCAtMTE1MSwxNCArMTMyNiwxMiBAQAogCXN0YXR1cyA9IHByaXZhdGUtPmluaXRfY3FyX3N0YXR1czsKIAlwcml2YXRlLT5pbml0X2Nxcl9zdGF0dXMgPSAtMTsKIAlpZiAoc3RhdHVzICE9IERBU0RfQ1FSX0RPTkUpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgInZvbHVtZSBhbmFseXNpcyByZXR1cm5lZCB1bmZvcm1hdHRlZCBkaXNrIik7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiVGhlIERBU0QgaXMgbm90IGZvcm1hdHRlZFxuIik7CiAJCXJldHVybiAtRU1FRElVTVRZUEU7CiAJfQogCiAJcHJpdmF0ZS0+dXNlc19jZGwgPSAxOwotCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2tzL3JlY29yZHMgcGVyIHRyYWNrLiAqLwotCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibG9jay0+YnBfYmxvY2spOwogCS8qIENoZWNrIFRyYWNrIDAgZm9yIENvbXBhdGlibGUgRGlzayBMYXlvdXQgKi8KIAljb3VudF9hcmVhID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CkBAIC0xMTgyLDggKzEzNTUsOCBAQAogCQkJY291bnRfYXJlYSA9ICZwcml2YXRlLT5jb3VudF9hcmVhWzBdOwogCX0gZWxzZSB7CiAJCWlmIChwcml2YXRlLT5jb3VudF9hcmVhWzNdLnJlY29yZCA9PSAxKQotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJUcmsgMDogbm8gcmVjb3JkcyBhZnRlciBWVE9DISIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiVHJhY2sgMCBoYXMgbm8gcmVjb3JkcyBmb2xsb3dpbmcgdGhlIFZUT0NcbiIpOwogCX0KIAlpZiAoY291bnRfYXJlYSAhPSBOVUxMICYmIGNvdW50X2FyZWEtPmtsID09IDApIHsKIAkJLyogd2UgZm91bmQgbm90dGhpbmcgdmlvbGF0aW5nIG91ciBkaXNrIGxheW91dCAqLwpAQCAtMTE5MSw4ICsxMzY0LDggQEAKIAkJCWJsb2NrLT5icF9ibG9jayA9IGNvdW50X2FyZWEtPmRsOwogCX0KIAlpZiAoYmxvY2stPmJwX2Jsb2NrID09IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlZvbHVtZSBoYXMgaW5jb21wYXRpYmxlIGRpc2sgbGF5b3V0Iik7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiVGhlIGRpc2sgbGF5b3V0IG9mIHRoZSBEQVNEIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVNRURJVU1UWVBFOwogCX0KIAlibG9jay0+czJiX3NoaWZ0ID0gMDsJLyogYml0cyB0byBzaGlmdCA1MTIgdG8gZ2V0IGEgYmxvY2sgKi8KQEAgLTEyMDAsMTkgKzEzNzMsMTkgQEAKIAkJYmxvY2stPnMyYl9zaGlmdCsrOwogCiAJYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsb2NrLT5icF9ibG9jayk7Ci0JYmxvY2stPmJsb2NrcyA9IChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgKgorCWJsb2NrLT5ibG9ja3MgPSAocHJpdmF0ZS0+cmVhbF9jeWwgKgogCQkJICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCAqCiAJCQkgIGJsa19wZXJfdHJrKTsKIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgIiglZGtCIGJsa3MpOiAlZGtCIGF0ICVka0IvdHJrICVzIiwKLQkJICAgIChibG9jay0+YnBfYmxvY2sgPj4gMTApLAotCQkgICAgKChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgKgotCQkgICAgICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCAqCi0JCSAgICAgIGJsa19wZXJfdHJrICogKGJsb2NrLT5icF9ibG9jayA+PiA5KSkgPj4gMSksCi0JCSAgICAoKGJsa19wZXJfdHJrICogYmxvY2stPmJwX2Jsb2NrKSA+PiAxMCksCi0JCSAgICBwcml2YXRlLT51c2VzX2NkbCA/Ci0JCSAgICAiY29tcGF0aWJsZSBkaXNrIGxheW91dCIgOiAibGludXggZGlzayBsYXlvdXQiKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAiREFTRCB3aXRoICVkIEtCL2Jsb2NrLCAlZCBLQiB0b3RhbCBzaXplLCAlZCBLQi90cmFjaywgIgorCQkgIiVzXG4iLCAoYmxvY2stPmJwX2Jsb2NrID4+IDEwKSwKKwkJICgocHJpdmF0ZS0+cmVhbF9jeWwgKgorCQkgICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCAqCisJCSAgIGJsa19wZXJfdHJrICogKGJsb2NrLT5icF9ibG9jayA+PiA5KSkgPj4gMSksCisJCSAoKGJsa19wZXJfdHJrICogYmxvY2stPmJwX2Jsb2NrKSA+PiAxMCksCisJCSBwcml2YXRlLT51c2VzX2NkbCA/CisJCSAiY29tcGF0aWJsZSBkaXNrIGxheW91dCIgOiAibGludXggZGlzayBsYXlvdXQiKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI2MiwzMSArMTQzNSwzNSBAQAogCXN0cnVjdCBlY2tkX2NvdW50ICplY3Q7CiAJc3RydWN0IGNjdzEgKmNjdzsKIAl2b2lkICpkYXRhOwotCWludCBycHQsIGN5bCwgaGVhZDsKKwlpbnQgcnB0OworCXN0cnVjdCBjaF90IGFkZHJlc3M7CiAJaW50IGNwbGVuZ3RoLCBkYXRhc2l6ZTsKIAlpbnQgaTsKKwlpbnQgaW50ZW5zaXR5ID0gMDsKKwlpbnQgcjBfcGVybTsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAlycHQgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGZkYXRhLT5ibGtzaXplKTsKLQljeWwgPSBmZGF0YS0+c3RhcnRfdW5pdCAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOwotCWhlYWQgPSBmZGF0YS0+c3RhcnRfdW5pdCAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOworCXNldF9jaF90KCZhZGRyZXNzLAorCQkgZmRhdGEtPnN0YXJ0X3VuaXQgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIGZkYXRhLT5zdGFydF91bml0ICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpOwogCiAJLyogU2FuaXR5IGNoZWNrcy4gKi8KIAlpZiAoZmRhdGEtPnN0YXJ0X3VuaXQgPj0KLQkgICAgKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwgIlRyYWNrIG5vICVkIHRvbyBiaWchIiwKLQkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCk7CisJICAgIChwcml2YXRlLT5yZWFsX2N5bCAqIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKSkgeworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJTdGFydCB0cmFjayBudW1iZXIgJWQgdXNlZCBpbiAiCisJCQkgImZvcm1hdHRpbmcgaXMgdG9vIGJpZ1xuIiwgZmRhdGEtPnN0YXJ0X3VuaXQpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAJaWYgKGZkYXRhLT5zdGFydF91bml0ID4gZmRhdGEtPnN0b3BfdW5pdCkgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwgIlRyYWNrICVkIHJlYWNoZWQhIGVuZGluZy4iLAotCQkJICAgIGZkYXRhLT5zdGFydF91bml0KTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiU3RhcnQgdHJhY2sgJWQgdXNlZCBpbiAiCisJCQkgImZvcm1hdHRpbmcgZXhjZWVkcyBlbmQgdHJhY2tcbiIsIGZkYXRhLT5zdGFydF91bml0KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCWlmIChkYXNkX2NoZWNrX2Jsb2Nrc2l6ZShmZGF0YS0+Ymxrc2l6ZSkgIT0gMCkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCSAgICAiSW52YWxpZCBibG9ja3NpemUgJWQuLi50ZXJtaW5hdGluZyEiLAotCQkJICAgIGZkYXRhLT5ibGtzaXplKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgREFTRCBjYW5ub3QgYmUgZm9ybWF0dGVkIHdpdGggYmxvY2sgc2l6ZSAlZFxuIiwKKwkJCSBmZGF0YS0+Ymxrc2l6ZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIApAQCAtMTI5Niw5ICsxNDczLDE3IEBACiAJICogICBCaXQgMTogd3JpdGUgaG9tZSBhZGRyZXNzLCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAogCSAqICAgQml0IDI6IGludmFsaWRhdGUgdHJhY2tzCiAJICogICBCaXQgMzogdXNlIE9TLzM5MCBjb21wYXRpYmxlIGRpc2sgbGF5b3V0IChjZGwpCisJICogICBCaXQgNDogZG8gbm90IGFsbG93IHN0b3JhZ2Ugc3Vic3lzdGVtIHRvIG1vZGlmeSByZWNvcmQgemVybwogCSAqIE9ubHkgc29tZSBiaXQgY29tYmluYXRpb25zIGRvIG1ha2Ugc2Vuc2UuCiAJICovCi0Jc3dpdGNoIChmZGF0YS0+aW50ZW5zaXR5KSB7CisJaWYgKGZkYXRhLT5pbnRlbnNpdHkgJiAweDEwKSB7CisJCXIwX3Blcm0gPSAwOworCQlpbnRlbnNpdHkgPSBmZGF0YS0+aW50ZW5zaXR5ICYgfjB4MTA7CisJfSBlbHNlIHsKKwkJcjBfcGVybSA9IDE7CisJCWludGVuc2l0eSA9IGZkYXRhLT5pbnRlbnNpdHk7CisJfQorCXN3aXRjaCAoaW50ZW5zaXR5KSB7CiAJY2FzZSAweDAwOgkvKiBOb3JtYWwgZm9ybWF0ICovCiAJY2FzZSAweDA4OgkvKiBOb3JtYWwgZm9ybWF0LCB1c2UgY2RsLiAqLwogCQljcGxlbmd0aCA9IDIgKyBycHQ7CkBAIC0xMzIyLDggKzE1MDcsOCBAQAogCQkJc2l6ZW9mKHN0cnVjdCBlY2tkX2NvdW50KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJJbnZhbGlkIGZsYWdzIDB4JXguIiwKLQkJCSAgICBmZGF0YS0+aW50ZW5zaXR5KTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gSS9PIGNvbnRyb2wgY2FsbCB1c2VkICIKKwkJCSAiaW5jb3JyZWN0IGZsYWdzIDB4JXhcbiIsIGZkYXRhLT5pbnRlbnNpdHkpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAJLyogQWxsb2NhdGUgdGhlIGZvcm1hdCBjY3cgcmVxdWVzdC4gKi8KQEAgLTEzMzUsMTEgKzE1MjAsMTQgQEAKIAlkYXRhID0gZmNwLT5kYXRhOwogCWNjdyA9IGZjcC0+Y3BhZGRyOwogCi0Jc3dpdGNoIChmZGF0YS0+aW50ZW5zaXR5ICYgfjB4MDgpIHsKKwlzd2l0Y2ggKGludGVuc2l0eSAmIH4weDA4KSB7CiAJY2FzZSAweDAwOiAvKiBOb3JtYWwgZm9ybWF0LiAqLwogCQlkZWZpbmVfZXh0ZW50KGNjdysrLCAoc3RydWN0IERFX2Vja2RfZGF0YSAqKSBkYXRhLAogCQkJICAgICAgZmRhdGEtPnN0YXJ0X3VuaXQsIGZkYXRhLT5zdGFydF91bml0LAogCQkJICAgICAgREFTRF9FQ0tEX0NDV19XUklURV9DS0QsIGRldmljZSk7CisJCS8qIGdyYW50IHN1YnN5c3RlbSBwZXJtaXNzaW9uIHRvIGZvcm1hdCBSMCAqLworCQlpZiAocjBfcGVybSkKKwkJCSgoc3RydWN0IERFX2Vja2RfZGF0YSAqKWRhdGEpLT5nYV9leHRlbmRlZCB8PSAweDA0OwogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKIAkJY2N3Wy0xXS5mbGFncyB8PSBDQ1dfRkxBR19DQzsKIAkJbG9jYXRlX3JlY29yZChjY3crKywgKHN0cnVjdCBMT19lY2tkX2RhdGEgKikgZGF0YSwKQEAgLTEzNzMsMTEgKzE1NjEsMTEgQEAKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IExPX2Vja2RfZGF0YSk7CiAJCWJyZWFrOwogCX0KLQlpZiAoZmRhdGEtPmludGVuc2l0eSAmIDB4MDEpIHsJLyogd3JpdGUgcmVjb3JkIHplcm8gKi8KKwlpZiAoaW50ZW5zaXR5ICYgMHgwMSkgewkvKiB3cml0ZSByZWNvcmQgemVybyAqLwogCQllY3QgPSAoc3RydWN0IGVja2RfY291bnQgKikgZGF0YTsKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwotCQllY3QtPmN5bCA9IGN5bDsKLQkJZWN0LT5oZWFkID0gaGVhZDsKKwkJZWN0LT5jeWwgPSBhZGRyZXNzLmN5bDsKKwkJZWN0LT5oZWFkID0gYWRkcmVzcy5oZWFkOwogCQllY3QtPnJlY29yZCA9IDA7CiAJCWVjdC0+a2wgPSAwOwogCQllY3QtPmRsID0gODsKQEAgLTEzODgsMTEgKzE1NzYsMTEgQEAKIAkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgZWN0OwogCQljY3crKzsKIAl9Ci0JaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgfjB4MDgpICYgMHgwNCkgewkvKiBlcmFzZSB0cmFjayAqLworCWlmICgoaW50ZW5zaXR5ICYgfjB4MDgpICYgMHgwNCkgewkvKiBlcmFzZSB0cmFjayAqLwogCQllY3QgPSAoc3RydWN0IGVja2RfY291bnQgKikgZGF0YTsKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwotCQllY3QtPmN5bCA9IGN5bDsKLQkJZWN0LT5oZWFkID0gaGVhZDsKKwkJZWN0LT5jeWwgPSBhZGRyZXNzLmN5bDsKKwkJZWN0LT5oZWFkID0gYWRkcmVzcy5oZWFkOwogCQllY3QtPnJlY29yZCA9IDE7CiAJCWVjdC0+a2wgPSAwOwogCQllY3QtPmRsID0gMDsKQEAgLTE0MDUsMjAgKzE1OTMsMjAgQEAKIAkJZm9yIChpID0gMDsgaSA8IHJwdDsgaSsrKSB7CiAJCQllY3QgPSAoc3RydWN0IGVja2RfY291bnQgKikgZGF0YTsKIAkJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBlY2tkX2NvdW50KTsKLQkJCWVjdC0+Y3lsID0gY3lsOwotCQkJZWN0LT5oZWFkID0gaGVhZDsKKwkJCWVjdC0+Y3lsID0gYWRkcmVzcy5jeWw7CisJCQllY3QtPmhlYWQgPSBhZGRyZXNzLmhlYWQ7CiAJCQllY3QtPnJlY29yZCA9IGkgKyAxOwogCQkJZWN0LT5rbCA9IDA7CiAJCQllY3QtPmRsID0gZmRhdGEtPmJsa3NpemU7CiAJCQkvKiBDaGVjayBmb3Igc3BlY2lhbCB0cmFja3MgMC0xIHdoZW4gZm9ybWF0dGluZyBDREwgKi8KLQkJCWlmICgoZmRhdGEtPmludGVuc2l0eSAmIDB4MDgpICYmCisJCQlpZiAoKGludGVuc2l0eSAmIDB4MDgpICYmCiAJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQgPT0gMCkgewogCQkJCWlmIChpIDwgMykgewogCQkJCQllY3QtPmtsID0gNDsKIAkJCQkJZWN0LT5kbCA9IHNpemVzX3RyazBbaV0gLSA0OwogCQkJCX0KIAkJCX0KLQkJCWlmICgoZmRhdGEtPmludGVuc2l0eSAmIDB4MDgpICYmCisJCQlpZiAoKGludGVuc2l0eSAmIDB4MDgpICYmCiAJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQgPT0gMSkgewogCQkJCWVjdC0+a2wgPSA0NDsKIAkJCQllY3QtPmRsID0gTEFCRUxfU0laRSAtIDQ0OwpAQCAtMTQ3OSw1NyArMTY2Nyw2OSBAQAogCQkJCQkJICAgc3RydWN0IGlyYiAqaXJiKQogewogCWNoYXIgbWFzazsKKwljaGFyICpzZW5zZSA9IE5VTEw7CiAKIAkvKiBmaXJzdCBvZiBhbGwgY2hlY2sgZm9yIHN0YXRlIGNoYW5nZSBwZW5kaW5nIGludGVycnVwdCAqLwogCW1hc2sgPSBERVZfU1RBVF9BVFRFTlRJT04gfCBERVZfU1RBVF9ERVZfRU5EIHwgREVWX1NUQVRfVU5JVF9FWENFUDsKLQlpZiAoKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBtYXNrKSA9PSBtYXNrKSB7CisJaWYgKChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgbWFzaykgPT0gbWFzaykgewogCQlkYXNkX2dlbmVyaWNfaGFuZGxlX3N0YXRlX2NoYW5nZShkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCiAJLyogc3VtbWFyeSB1bml0IGNoZWNrICovCi0JaWYgKChpcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgJiYKKwlpZiAoKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBERVZfU1RBVF9VTklUX0NIRUNLKSAmJgogCSAgICAoaXJiLT5lY3dbN10gPT0gMHgwRCkpIHsKIAkJZGFzZF9hbGlhc19oYW5kbGVfc3VtbWFyeV91bml0X2NoZWNrKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KIAotCisJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZShpcmIpOwogCS8qIHNlcnZpY2UgaW5mb3JtYXRpb24gbWVzc2FnZSBTSU0gKi8KLQlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucyAmJiAhKGlyYi0+ZWN3WzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmCi0JICAgICgoaXJiLT5lY3dbNl0gJiBEQVNEX1NJTV9TRU5TRSkgPT0gREFTRF9TSU1fU0VOU0UpKSB7Ci0JCWRhc2RfMzk5MF9lcnBfaGFuZGxlX3NpbShkZXZpY2UsIGlyYi0+ZWN3KTsKKwlpZiAoc2Vuc2UgJiYgIShzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSAmJgorCSAgICAoKHNlbnNlWzZdICYgREFTRF9TSU1fU0VOU0UpID09IERBU0RfU0lNX1NFTlNFKSkgeworCQlkYXNkXzM5OTBfZXJwX2hhbmRsZV9zaW0oZGV2aWNlLCBzZW5zZSk7CiAJCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoKGlyYi0+c2Nzdy5jbWQuY2MgPT0gMSkgJiYKLQkgICAgKGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCSAgICAoaXJiLT5zY3N3LmNtZC5hY3RsICYgU0NTV19BQ1RMX1NUQVJUX1BFTkQpICYmCi0JICAgIChpcmItPnNjc3cuY21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpIHsKKwlpZiAoKHNjc3dfY2MoJmlyYi0+c2NzdykgPT0gMSkgJiYKKwkgICAgKHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgorCSAgICAoc2Nzd19hY3RsKCZpcmItPnNjc3cpICYgU0NTV19BQ1RMX1NUQVJUX1BFTkQpICYmCisJICAgIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpIHsKIAkJLyogZmFrZSBpcmIgZG8gbm90aGluZywgdGhleSBhcmUgaGFuZGxlZCBlbHNld2hlcmUgKi8KIAkJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICghKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpKSB7CisJaWYgKCFzZW5zZSkgewogCQkvKiBqdXN0IHJlcG9ydCBvdGhlciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAogCQkJICAgICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHQgcmVjZWl2ZWQiKTsKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKIAkJCSAgICAidW5zb2xpY2l0ZWQgaW50ZXJydXB0IHJlY2VpdmVkICIKIAkJCSAgICAiKHNlbnNlIGF2YWlsYWJsZSkiKTsKLQkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYiwKKwkJCQkJCSAgICJ1bnNvbGljaXRlZCIpOwogCX0KIAogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJcmV0dXJuOwogfTsKIAotc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcChzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwX2NtZF9zaW5nbGUoCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAogCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAotCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3RyaywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgKmlkYXdzOwpAQCAtMTUzOSwxMSArMTczOSw5IEBACiAJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOwogCXN0cnVjdCBiaW9fdmVjICpidjsKIAljaGFyICpkc3Q7Ci0JdW5zaWduZWQgaW50IGJsa3NpemUsIGJsa19wZXJfdHJrLCBvZmY7CisJdW5zaWduZWQgaW50IG9mZjsKIAlpbnQgY291bnQsIGNpZGF3LCBjcGxlbmd0aCwgZGF0YXNpemU7Ci0Jc2VjdG9yX3QgcmVjaWQsIGZpcnN0X3JlYywgbGFzdF9yZWM7Ci0Jc2VjdG9yX3QgZmlyc3RfdHJrLCBsYXN0X3RyazsKLQl1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzOworCXNlY3Rvcl90IHJlY2lkOwogCXVuc2lnbmVkIGNoYXIgY21kLCByY21kOwogCWludCB1c2VfcHJlZml4OwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKQEAgLTE1NTYsMTUgKzE3NTQsNyBAQAogCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1dSSVRFX01UOwogCWVsc2UKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCi0JYmxrc2l6ZSA9IGJsb2NrLT5icF9ibG9jazsKLQlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxrc2l6ZSk7Ci0JLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KLQlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSByZXEtPnNlY3RvciA+PiBibG9jay0+czJiX3NoaWZ0OwotCWZpcnN0X29mZnMgPSBzZWN0b3JfZGl2KGZpcnN0X3RyaywgYmxrX3Blcl90cmspOwotCWxhc3RfcmVjID0gbGFzdF90cmsgPQotCQkocmVxLT5zZWN0b3IgKyByZXEtPm5yX3NlY3RvcnMgLSAxKSA+PiBibG9jay0+czJiX3NoaWZ0OwotCWxhc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYobGFzdF90cmssIGJsa19wZXJfdHJrKTsKKwogCS8qIENoZWNrIHN0cnVjdCBiaW8gYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgYmxvY2tzIGZvciB0aGUgcmVxdWVzdC4gKi8KIAljb3VudCA9IDA7CiAJY2lkYXcgPSAwOwpAQCAtMTcxNCw2ICsxOTA0LDQ5NyBAQAogCXJldHVybiBjcXI7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3RyYWNrKAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3RyaywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUpCit7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXVuc2lnbmVkIGxvbmcgKmlkYXdzOworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKwlzdHJ1Y3QgY2N3MSAqY2N3OworCXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJY2hhciAqZHN0LCAqaWRhd19kc3Q7CisJdW5zaWduZWQgaW50IGNpZGF3LCBjcGxlbmd0aCwgZGF0YXNpemU7CisJdW5zaWduZWQgaW50IHRsZjsKKwlzZWN0b3JfdCByZWNpZDsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJdW5zaWduZWQgaW50IHRya2NvdW50LCBjb3VudCwgY291bnRfdG9fdHJrX2VuZDsKKwl1bnNpZ25lZCBpbnQgaWRhd19sZW4sIHNlZ19sZW4sIHBhcnRfbGVuLCBsZW5fdG9fdHJhY2tfZW5kOworCXVuc2lnbmVkIGNoYXIgbmV3X3RyYWNrLCBlbmRfaWRhdzsKKwlzZWN0b3JfdCB0cmtpZDsKKwl1bnNpZ25lZCBpbnQgcmVjb2ZmczsKKworCWJhc2VkZXYgPSBibG9jay0+YmFzZTsKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCWlmIChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpCisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOworCWVsc2UgaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpCisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQTsKKwllbHNlCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogVHJhY2sgYmFzZWQgSS9PIG5lZWRzIElEQVdzIGZvciBlYWNoIHBhZ2UsIGFuZCBub3QganVzdCBmb3IKKwkgKiA2NCBiaXQgYWRkcmVzc2VzLiBXZSBuZWVkIGFkZGl0aW9uYWwgaWRhbHMgZm9yIHBhZ2VzCisJICogdGhhdCBnZXQgZmlsbGVkIGZyb20gdHdvIHRyYWNrcywgc28gd2UgdXNlIHRoZSBudW1iZXIKKwkgKiBvZiByZWNvcmRzIGFzIHVwcGVyIGxpbWl0LgorCSAqLworCWNpZGF3ID0gbGFzdF9yZWMgLSBmaXJzdF9yZWMgKyAxOworCXRya2NvdW50ID0gbGFzdF90cmsgLSBmaXJzdF90cmsgKyAxOworCisJLyogMXggcHJlZml4ICsgb25lIHJlYWQvd3JpdGUgY2N3IHBlciB0cmFjayAqLworCWNwbGVuZ3RoID0gMSArIHRya2NvdW50OworCisJLyogb24gMzEtYml0IHdlIG5lZWQgc3BhY2UgZm9yIHR3byAzMiBiaXQgYWRkcmVzc2VzIHBlciBwYWdlCisJICogb24gNjQtYml0IG9uZSA2NCBiaXQgYWRkcmVzcworCSAqLworCWRhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCBQRlhfZWNrZF9kYXRhKSArCisJCWNpZGF3ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgY2N3IHJlcXVlc3QuICovCisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKKwkJCQkgICBjcGxlbmd0aCwgZGF0YXNpemUsIHN0YXJ0ZGV2KTsKKwlpZiAoSVNfRVJSKGNxcikpCisJCXJldHVybiBjcXI7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJLyogdHJhbnNmZXIgbGVuZ3RoIGZhY3RvcjogaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSBsYXN0IHRyYWNrICovCisJaWYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykKKwkJdGxmID0gbGFzdF9vZmZzIC0gZmlyc3Rfb2ZmcyArIDE7CisJZWxzZQorCQl0bGYgPSBsYXN0X29mZnMgKyAxOworCXRsZiAqPSBibGtzaXplOworCisJaWYgKHByZWZpeF9MUkUoY2N3KyssIGNxci0+ZGF0YSwgZmlyc3RfdHJrLAorCQkgICAgICAgbGFzdF90cmssIGNtZCwgYmFzZWRldiwgc3RhcnRkZXYsCisJCSAgICAgICAxIC8qIGZvcm1hdCAqLywgZmlyc3Rfb2ZmcyArIDEsCisJCSAgICAgICB0cmtjb3VudCwgYmxrc2l6ZSwKKwkJICAgICAgIHRsZikgPT0gLUVBR0FJTikgeworCQkvKiBDbG9jayBub3QgaW4gc3luYyBhbmQgWFJDIGlzIGVuYWJsZWQuCisJCSAqIFRyeSBhZ2FpbiBsYXRlci4KKwkJICovCisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJfQorCisJLyoKKwkgKiBUaGUgdHJhbnNsYXRpb24gb2YgcmVxdWVzdCBpbnRvIGNjdyBwcm9ncmFtcyBtdXN0IG1lZXQgdGhlCisJICogZm9sbG93aW5nIGNvbmRpdGlvbnM6CisJICogLSBhbGwgaWRhd3MgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgbXVzdCBhZGRyZXNzIGZ1bGwgcGFnZXMKKwkgKiAgIChvciAySyBibG9ja3Mgb24gMzEtYml0KQorCSAqIC0gdGhlIHNjb3BlIG9mIGEgY2N3IGFuZCBpdCdzIGlkYWwgZW5kcyB3aXRoIHRoZSB0cmFjayBib3VuZGFyaWVzCisJICovCisJaWRhd3MgPSAodW5zaWduZWQgbG9uZyAqKSAoY3FyLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBQRlhfZWNrZF9kYXRhKSk7CisJcmVjaWQgPSBmaXJzdF9yZWM7CisJbmV3X3RyYWNrID0gMTsKKwllbmRfaWRhdyA9IDA7CisJbGVuX3RvX3RyYWNrX2VuZCA9IDA7CisJaWRhd19kc3QgPSAwOworCWlkYXdfbGVuID0gMDsKKwlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJZHN0ID0gcGFnZV9hZGRyZXNzKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCXNlZ19sZW4gPSBidi0+YnZfbGVuOworCQl3aGlsZSAoc2VnX2xlbikgeworCQkJaWYgKG5ld190cmFjaykgeworCQkJCXRya2lkID0gcmVjaWQ7CisJCQkJcmVjb2ZmcyA9IHNlY3Rvcl9kaXYodHJraWQsIGJsa19wZXJfdHJrKTsKKwkJCQljb3VudF90b190cmtfZW5kID0gYmxrX3Blcl90cmsgLSByZWNvZmZzOworCQkJCWNvdW50ID0gbWluKChsYXN0X3JlYyAtIHJlY2lkICsgMSksCisJCQkJCSAgICAoc2VjdG9yX3QpY291bnRfdG9fdHJrX2VuZCk7CisJCQkJbGVuX3RvX3RyYWNrX2VuZCA9IGNvdW50ICogYmxrc2l6ZTsKKwkJCQljY3dbLTFdLmZsYWdzIHw9IENDV19GTEFHX0NDOworCQkJCWNjdy0+Y21kX2NvZGUgPSBjbWQ7CisJCQkJY2N3LT5jb3VudCA9IGxlbl90b190cmFja19lbmQ7CisJCQkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClpZGF3czsKKwkJCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfSURBOworCQkJCWNjdysrOworCQkJCXJlY2lkICs9IGNvdW50OworCQkJCW5ld190cmFjayA9IDA7CisJCQl9CisJCQkvKiBJZiB3ZSBzdGFydCBhIG5ldyBpZGF3LCBldmVyeXRoaW5nIGlzIGZpbmUgYW5kIHRoZQorCQkJICogc3RhcnQgb2YgdGhlIG5ldyBpZGF3IGlzIHRoZSBzdGFydCBvZiB0aGlzIHNlZ21lbnQuCisJCQkgKiBJZiB3ZSBjb250aW51ZSBhbiBpZGF3LCB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZQorCQkJICogY3VycmVudCBzZWdtZW50IGJlZ2lucyB3aGVyZSB0aGUgc28gZmFyIGFjY3VtdWxhdGVkCisJCQkgKiBpZGF3IGVuZHMKKwkJCSAqLworCQkJaWYgKCFpZGF3X2RzdCkKKwkJCQlpZGF3X2RzdCA9IGRzdDsKKwkJCWlmICgoaWRhd19kc3QgKyBpZGF3X2xlbikgIT0gZHN0KSB7CisJCQkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgc3RhcnRkZXYpOworCQkJCXJldHVybiBFUlJfUFRSKC1FUkFOR0UpOworCQkJfQorCQkJcGFydF9sZW4gPSBtaW4oc2VnX2xlbiwgbGVuX3RvX3RyYWNrX2VuZCk7CisJCQlzZWdfbGVuIC09IHBhcnRfbGVuOworCQkJZHN0ICs9IHBhcnRfbGVuOworCQkJaWRhd19sZW4gKz0gcGFydF9sZW47CisJCQlsZW5fdG9fdHJhY2tfZW5kIC09IHBhcnRfbGVuOworCQkJLyogY29sbGVjdGVkIG1lbW9yeSBhcmVhIGVuZHMgb24gYW4gSURBX0JMT0NLIGJvcmRlciwKKwkJCSAqIC0+IGNyZWF0ZSBhbiBpZGF3CisJCQkgKiBpZGFsX2NyZWF0ZV93b3JkcyB3aWxsIGhhbmRsZSBjYXNlcyB3aGVyZSBpZGF3X2xlbgorCQkJICogaXMgbGFyZ2VyIHRoZW4gSURBX0JMT0NLX1NJWkUKKwkJCSAqLworCQkJaWYgKCEoX19wYShpZGF3X2RzdCArIGlkYXdfbGVuKSAmIChJREFfQkxPQ0tfU0laRS0xKSkpCisJCQkJZW5kX2lkYXcgPSAxOworCQkJLyogV2UgYWxzbyBuZWVkIHRvIGVuZCB0aGUgaWRhdyBhdCB0cmFjayBlbmQgKi8KKwkJCWlmICghbGVuX3RvX3RyYWNrX2VuZCkgeworCQkJCW5ld190cmFjayA9IDE7CisJCQkJZW5kX2lkYXcgPSAxOworCQkJfQorCQkJaWYgKGVuZF9pZGF3KSB7CisJCQkJaWRhd3MgPSBpZGFsX2NyZWF0ZV93b3JkcyhpZGF3cywgaWRhd19kc3QsCisJCQkJCQkJICBpZGF3X2xlbik7CisJCQkJaWRhd19kc3QgPSAwOworCQkJCWlkYXdfbGVuID0gMDsKKwkJCQllbmRfaWRhdyA9IDA7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpIHx8CisJICAgIGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9GQUlMRkFTVCkKKwkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCisJY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOworCWNxci0+cmV0cmllcyA9IDI1NjsKKwljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CisJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CisJcmV0dXJuIGNxcjsKK30KKworc3RhdGljIGludCBwcmVwYXJlX2l0Y3coc3RydWN0IGl0Y3cgKml0Y3csCisJCQl1bnNpZ25lZCBpbnQgdHJrLCB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsCisJCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsCisJCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJdW5zaWduZWQgaW50IHJlY19vbl90cmssIGludCBjb3VudCwKKwkJCXVuc2lnbmVkIGludCBibGtzaXplLAorCQkJdW5zaWduZWQgaW50IHRvdGFsX2RhdGFfc2l6ZSwKKwkJCXVuc2lnbmVkIGludCB0bGYsCisJCQl1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmspCit7CisJc3RydWN0IFBGWF9lY2tkX2RhdGEgcGZ4ZGF0YTsKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKmJhc2Vwcml2LCAqc3RhcnRwcml2OworCXN0cnVjdCBERV9lY2tkX2RhdGEgKmRlZGF0YTsKKwlzdHJ1Y3QgTFJFX2Vja2RfZGF0YSAqbHJlZGF0YTsKKwlzdHJ1Y3QgZGN3ICpkY3c7CisKKwl1MzIgYmVnY3lsLCBlbmRjeWw7CisJdTE2IGhlYWRzLCBiZWdoZWFkLCBlbmRoZWFkOworCXU4IHBmeF9jbWQ7CisKKwlpbnQgcmMgPSAwOworCWludCBzZWN0b3IgPSAwOworCWludCBkbiwgZDsKKworCisJLyogc2V0dXAgcHJlZml4IGRhdGEgKi8KKwliYXNlcHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKKwlzdGFydHByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIHN0YXJ0ZGV2LT5wcml2YXRlOworCWRlZGF0YSA9ICZwZnhkYXRhLmRlZmluZV9leHRlbnQ7CisJbHJlZGF0YSA9ICZwZnhkYXRhLmxvY2F0ZV9yZWNvcmQ7CisKKwltZW1zZXQoJnBmeGRhdGEsIDAsIHNpemVvZihwZnhkYXRhKSk7CisJcGZ4ZGF0YS5mb3JtYXQgPSAxOyAvKiBQRlggd2l0aCBMUkUgKi8KKwlwZnhkYXRhLmJhc2VfYWRkcmVzcyA9IGJhc2Vwcml2LT5uZWQtPnVuaXRfYWRkcjsKKwlwZnhkYXRhLmJhc2VfbHNzID0gYmFzZXByaXYtPm5lZC0+SUQ7CisJcGZ4ZGF0YS52YWxpZGl0eS5kZWZpbmVfZXh0ZW50ID0gMTsKKworCS8qIHByaXZhdGUgdWlkIGlzIGtlcHQgdXAgdG8gZGF0ZSwgY29uZl9kYXRhIG1heSBiZSBvdXRkYXRlZCAqLworCWlmIChzdGFydHByaXYtPnVpZC50eXBlICE9IFVBX0JBU0VfREVWSUNFKSB7CisJCXBmeGRhdGEudmFsaWRpdHkudmVyaWZ5X2Jhc2UgPSAxOworCQlpZiAoc3RhcnRwcml2LT51aWQudHlwZSA9PSBVQV9IWVBFUl9QQVZfQUxJQVMpCisJCQlwZnhkYXRhLnZhbGlkaXR5Lmh5cGVyX3BhdiA9IDE7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOgorCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gYmxrc2l6ZTsKKwkJZGVkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQyOworCQlscmVkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDA7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDBDOworCQlscmVkYXRhLT5hdXhpbGlhcnkuY2hlY2tfYnl0ZXMgPSAweDAxOworCQlwZnhfY21kID0gREFTRF9FQ0tEX0NDV19QRlhfUkVBRDsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gYmxrc2l6ZTsKKwkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KCZwZnhkYXRhLCBiYXNlZGV2KTsKKwkJZGVkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQyOworCQlscmVkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDA7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDNGOworCQlscmVkYXRhLT5leHRlbmRlZF9vcGVyYXRpb24gPSAweDIzOworCQlscmVkYXRhLT5hdXhpbGlhcnkuY2hlY2tfYnl0ZXMgPSAweDI7CisJCXBmeF9jbWQgPSBEQVNEX0VDS0RfQ0NXX1BGWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LAorCQkJICAgICAgInByZXBhcmUgaXRjdywgdW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlkZWRhdGEtPmF0dHJpYnV0ZXMubW9kZSA9IDB4MzsJLyogRUNLRCAqLworCisJaGVhZHMgPSBiYXNlcHJpdi0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJYmVnY3lsID0gdHJrIC8gaGVhZHM7CisJYmVnaGVhZCA9IHRyayAlIGhlYWRzOworCWVuZGN5bCA9IHRvdHJrIC8gaGVhZHM7CisJZW5kaGVhZCA9IHRvdHJrICUgaGVhZHM7CisKKwkvKiBjaGVjayBmb3Igc2VxdWVudGlhbCBwcmVzdGFnZSAtIGVuaGFuY2UgY3lsaW5kZXIgcmFuZ2UgKi8KKwlpZiAoZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAorCSAgICBkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgeworCisJCWlmIChlbmRjeWwgKyBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bCA8IGJhc2Vwcml2LT5yZWFsX2N5bCkKKwkJCWVuZGN5bCArPSBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bDsKKwkJZWxzZQorCQkJZW5kY3lsID0gKGJhc2Vwcml2LT5yZWFsX2N5bCAtIDEpOworCX0KKworCXNldF9jaF90KCZkZWRhdGEtPmJlZ19leHQsIGJlZ2N5bCwgYmVnaGVhZCk7CisJc2V0X2NoX3QoJmRlZGF0YS0+ZW5kX2V4dCwgZW5kY3lsLCBlbmRoZWFkKTsKKworCWRlZGF0YS0+ZXBfZm9ybWF0ID0gMHgyMDsgLyogcmVjb3JkcyBwZXIgdHJhY2sgaXMgdmFsaWQgKi8KKwlkZWRhdGEtPmVwX3JlY19wZXJfdHJhY2sgPSBibGtfcGVyX3RyazsKKworCWlmIChyZWNfb25fdHJrKSB7CisJCXN3aXRjaCAoYmFzZXByaXYtPnJkY19kYXRhLmRldl90eXBlKSB7CisJCWNhc2UgMHgzMzkwOgorCQkJZG4gPSBjZWlsX3F1b3QoYmxrc2l6ZSArIDYsIDIzMik7CisJCQlkID0gOSArIGNlaWxfcXVvdChibGtzaXplICsgNiAqIChkbiArIDEpLCAzNCk7CisJCQlzZWN0b3IgPSAoNDkgKyAocmVjX29uX3RyayAtIDEpICogKDEwICsgZCkpIC8gODsKKwkJCWJyZWFrOworCQljYXNlIDB4MzM4MDoKKwkJCWQgPSA3ICsgY2VpbF9xdW90KGJsa3NpemUgKyAxMiwgMzIpOworCQkJc2VjdG9yID0gKDM5ICsgKHJlY19vbl90cmsgLSAxKSAqICg4ICsgZCkpIC8gNzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbHJlZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDE7CisJbHJlZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF9zY29wZSA9IDE7CisJbHJlZGF0YS0+YXV4aWxpYXJ5LmltYmVkZGVkX2Njd192YWxpZCA9IDE7CisJbHJlZGF0YS0+bGVuZ3RoID0gdGxmOworCWxyZWRhdGEtPmltYmVkZGVkX2NjdyA9IGNtZDsKKwlscmVkYXRhLT5jb3VudCA9IGNvdW50OworCWxyZWRhdGEtPnNlY3RvciA9IHNlY3RvcjsKKwlzZXRfY2hfdCgmbHJlZGF0YS0+c2Vla19hZGRyLCBiZWdjeWwsIGJlZ2hlYWQpOworCWxyZWRhdGEtPnNlYXJjaF9hcmcuY3lsID0gbHJlZGF0YS0+c2Vla19hZGRyLmN5bDsKKwlscmVkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPSBscmVkYXRhLT5zZWVrX2FkZHIuaGVhZDsKKwlscmVkYXRhLT5zZWFyY2hfYXJnLnJlY29yZCA9IHJlY19vbl90cms7CisKKwlkY3cgPSBpdGN3X2FkZF9kY3coaXRjdywgcGZ4X2NtZCwgMCwKKwkJICAgICAmcGZ4ZGF0YSwgc2l6ZW9mKHBmeGRhdGEpLCB0b3RhbF9kYXRhX3NpemUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwX3RwbV90cmFjaygKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF90cmssCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBmaXJzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxhc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtfcGVyX3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtzaXplKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOworCXN0cnVjdCBiaW9fdmVjICpidjsKKwljaGFyICpkc3Q7CisJdW5zaWduZWQgaW50IHRya2NvdW50LCBjdGlkYXc7CisJdW5zaWduZWQgY2hhciBjbWQ7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2OworCXVuc2lnbmVkIGludCB0bGY7CisJc3RydWN0IGl0Y3cgKml0Y3c7CisJc3RydWN0IHRpZGF3ICpsYXN0X3RpZGF3ID0gTlVMTDsKKwlpbnQgaXRjd19vcDsKKwlzaXplX3QgaXRjd19zaXplOworCisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkgeworCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQTsKKwkJaXRjd19vcCA9IElUQ1dfT1BfUkVBRDsKKwl9IGVsc2UgaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpIHsKKwkJY21kID0gREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOworCQlpdGN3X29wID0gSVRDV19PUF9XUklURTsKKwl9IGVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiB0cmFja2Jhc2VkIEkvTyBuZWVkcyBhZGRyZXNzIGFsbCBtZW1vcnkgdmlhIFRJREFXcywKKwkgKiBub3QganVzdCBmb3IgNjQgYml0IGFkZHJlc3Nlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbWFwCisJICogZWFjaCBzZWdtZW50IGRpcmVjdGx5IHRvIG9uZSB0aWRhdy4KKwkgKi8KKwl0cmtjb3VudCA9IGxhc3RfdHJrIC0gZmlyc3RfdHJrICsgMTsKKwljdGlkYXcgPSAwOworCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgeworCQkrK2N0aWRhdzsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgY2N3IHJlcXVlc3QuICovCisJaXRjd19zaXplID0gaXRjd19jYWxjX3NpemUoMCwgY3RpZGF3LCAwKTsKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAorCQkJCSAgIDAsIGl0Y3dfc2l6ZSwgc3RhcnRkZXYpOworCWlmIChJU19FUlIoY3FyKSkKKwkJcmV0dXJuIGNxcjsKKworCWNxci0+Y3Btb2RlID0gMTsKKwljcXItPnN0YXJ0ZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKKwljcXItPmJsb2NrID0gYmxvY2s7CisJY3FyLT5leHBpcmVzID0gMTAwKkhaOworCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKwljcXItPnJldHJpZXMgPSAxMDsKKworCS8qIHRyYW5zZmVyIGxlbmd0aCBmYWN0b3I6IGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB0aGUgbGFzdCB0cmFjayAqLworCWlmIChmaXJzdF90cmsgPT0gbGFzdF90cmspCisJCXRsZiA9IGxhc3Rfb2ZmcyAtIGZpcnN0X29mZnMgKyAxOworCWVsc2UKKwkJdGxmID0gbGFzdF9vZmZzICsgMTsKKwl0bGYgKj0gYmxrc2l6ZTsKKworCWl0Y3cgPSBpdGN3X2luaXQoY3FyLT5kYXRhLCBpdGN3X3NpemUsIGl0Y3dfb3AsIDAsIGN0aWRhdywgMCk7CisJY3FyLT5jcGFkZHIgPSBpdGN3X2dldF90Y3coaXRjdyk7CisKKwlpZiAocHJlcGFyZV9pdGN3KGl0Y3csIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkgY21kLCBiYXNlZGV2LCBzdGFydGRldiwKKwkJCSBmaXJzdF9vZmZzICsgMSwKKwkJCSB0cmtjb3VudCwgYmxrc2l6ZSwKKwkJCSAobGFzdF9yZWMgLSBmaXJzdF9yZWMgKyAxKSAqIGJsa3NpemUsCisJCQkgdGxmLCBibGtfcGVyX3RyaykgPT0gLUVBR0FJTikgeworCQkvKiBDbG9jayBub3QgaW4gc3luYyBhbmQgWFJDIGlzIGVuYWJsZWQuCisJCSAqIFRyeSBhZ2FpbiBsYXRlci4KKwkJICovCisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJfQorCisJLyoKKwkgKiBBIHRpZGF3IGNhbiBhZGRyZXNzIDRrIG9mIG1lbW9yeSwgYnV0IG11c3Qgbm90IGNyb3NzIHBhZ2UgYm91bmRhcmllcworCSAqIFdlIGNhbiBsZXQgdGhlIGJsb2NrIGxheWVyIGhhbmRsZSB0aGlzIGJ5IHNldHRpbmcKKwkgKiBibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeSB0byBwYWdlIGJvdW5kYXJpZXMgYW5kCisJICogYmxrX21heF9zZWdtZW50X3NpemUgdG8gcGFnZSBzaXplIHdoZW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCBxdWV1ZS4KKwkgKi8KKwlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJZHN0ID0gcGFnZV9hZGRyZXNzKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCWxhc3RfdGlkYXcgPSBpdGN3X2FkZF90aWRhdyhpdGN3LCAweDAwLCBkc3QsIGJ2LT5idl9sZW4pOworCQlpZiAoSVNfRVJSKGxhc3RfdGlkYXcpKQorCQkJcmV0dXJuIChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopbGFzdF90aWRhdzsKKwl9CisKKwlsYXN0X3RpZGF3LT5mbGFncyB8PSAweDgwOworCWl0Y3dfZmluYWxpemUoaXRjdyk7CisKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpIHx8CisJICAgIGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9GQUlMRkFTVCkKKwkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCisJY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOworCWNxci0+cmV0cmllcyA9IDI1NjsKKwljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CisJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CisJcmV0dXJuIGNxcjsKK30KKworc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcChzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlpbnQgdHBtLCBjbWRydGQsIGNtZHd0ZDsKKwlpbnQgdXNlX3ByZWZpeDsKKworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgZmN4X2luX2NzcywgZmN4X2luX2duZXEsIGZjeF9pbl9mZWF0dXJlczsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJc2VjdG9yX3QgZmlyc3RfcmVjLCBsYXN0X3JlYzsKKwlzZWN0b3JfdCBmaXJzdF90cmssIGxhc3RfdHJrOworCXVuc2lnbmVkIGludCBmaXJzdF9vZmZzLCBsYXN0X29mZnM7CisJdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLCBibGtzaXplOworCWludCBjZGxzcGVjaWFsOworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKworCWJhc2VkZXYgPSBibG9jay0+YmFzZTsKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCisJLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCisJYmxrc2l6ZSA9IGJsb2NrLT5icF9ibG9jazsKKwlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxrc2l6ZSk7CisJLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KKwlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSByZXEtPnNlY3RvciA+PiBibG9jay0+czJiX3NoaWZ0OworCWZpcnN0X29mZnMgPSBzZWN0b3JfZGl2KGZpcnN0X3RyaywgYmxrX3Blcl90cmspOworCWxhc3RfcmVjID0gbGFzdF90cmsgPQorCQkocmVxLT5zZWN0b3IgKyByZXEtPm5yX3NlY3RvcnMgLSAxKSA+PiBibG9jay0+czJiX3NoaWZ0OworCWxhc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYobGFzdF90cmssIGJsa19wZXJfdHJrKTsKKwljZGxzcGVjaWFsID0gKHByaXZhdGUtPnVzZXNfY2RsICYmIGZpcnN0X3JlYyA8IDIqYmxrX3Blcl90cmspOworCisJLyogaXMgdHJhbnNwb3J0IG1vZGUgc3VwcG9ydGVkID8gKi8KKwlmY3hfaW5fY3NzID0gY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmZjeDsKKwlmY3hfaW5fZ25lcSA9IHByaXZhdGUtPmduZXEtPnJlc2VydmVkMls3XSAmIDB4MDQ7CisJZmN4X2luX2ZlYXR1cmVzID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs0MF0gJiAweDgwOworCXRwbSA9IGZjeF9pbl9jc3MgJiYgZmN4X2luX2duZXEgJiYgZmN4X2luX2ZlYXR1cmVzOworCisJLyogaXMgcmVhZCB0cmFjayBkYXRhIGFuZCB3cml0ZSB0cmFjayBkYXRhIGluIGNvbW1hbmQgbW9kZSBzdXBwb3J0ZWQ/ICovCisJY21kcnRkID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs5XSAmIDB4MjA7CisJY21kd3RkID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVsxMl0gJiAweDQwOworCXVzZV9wcmVmaXggPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzhdICYgMHgwMTsKKworCWNxciA9IE5VTEw7CisJaWYgKGNkbHNwZWNpYWwgfHwgZGFzZF9wYWdlX2NhY2hlKSB7CisJCS8qIGRvIG5vdGhpbmcsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBjbWQgbW9kZSBzaW5nbGUgY2FzZSAqLworCX0gZWxzZSBpZiAoIWRhc2Rfbm9mY3ggJiYgdHBtICYmIChmaXJzdF90cmsgPT0gbGFzdF90cmspKSB7CisJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF90cG1fdHJhY2soc3RhcnRkZXYsIGJsb2NrLCByZXEsCisJCQkJCQkgICAgZmlyc3RfcmVjLCBsYXN0X3JlYywKKwkJCQkJCSAgICBmaXJzdF90cmssIGxhc3RfdHJrLAorCQkJCQkJICAgIGZpcnN0X29mZnMsIGxhc3Rfb2ZmcywKKwkJCQkJCSAgICBibGtfcGVyX3RyaywgYmxrc2l6ZSk7CisJCWlmIChJU19FUlIoY3FyKSAmJiBQVFJfRVJSKGNxcikgIT0gLUVBR0FJTikKKwkJCWNxciA9IE5VTEw7CisJfSBlbHNlIGlmICh1c2VfcHJlZml4ICYmCisJCSAgICgoKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkgJiYgY21kcnRkKSB8fAorCQkgICAgKChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSAmJiBjbWR3dGQpKSkgeworCQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3RyYWNrKHN0YXJ0ZGV2LCBibG9jaywgcmVxLAorCQkJCQkJICAgZmlyc3RfcmVjLCBsYXN0X3JlYywKKwkJCQkJCSAgIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkJCQkgICBmaXJzdF9vZmZzLCBsYXN0X29mZnMsCisJCQkJCQkgICBibGtfcGVyX3RyaywgYmxrc2l6ZSk7CisJCWlmIChJU19FUlIoY3FyKSAmJiBQVFJfRVJSKGNxcikgIT0gLUVBR0FJTikKKwkJCWNxciA9IE5VTEw7CisJfQorCWlmICghY3FyKQorCQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3NpbmdsZShzdGFydGRldiwgYmxvY2ssIHJlcSwKKwkJCQkJCSAgICBmaXJzdF9yZWMsIGxhc3RfcmVjLAorCQkJCQkJICAgIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkJCQkgICAgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzLAorCQkJCQkJICAgIGJsa19wZXJfdHJrLCBibGtzaXplKTsKKwlyZXR1cm4gY3FyOworfQorCiBzdGF0aWMgaW50CiBkYXNkX2Vja2RfZnJlZV9jcChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CkBAIC0xNzY3LDcgKzI0NDgsNyBAQAogfQogCiAvKgotICogTW9kaWZ5IGNjdyBjaGFpbiBpbiBjcXIgc28gaXQgY2FuIGJlIHN0YXJ0ZWQgb24gYSBiYXNlIGRldmljZS4KKyAqIE1vZGlmeSBjY3cvdGN3IGluIGNxciBzbyBpdCBjYW4gYmUgc3RhcnRlZCBvbiBhIGJhc2UgZGV2aWNlLgogICoKICAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBlbm91Z2ggdG8gcmVzdGFydCB0aGUgY3FyIQogICogRWl0aGVyIHJlc2V0IGNxci0+c3RhcnRkZXYgYXMgd2VsbCAoc3VtbWFyeSB1bml0IGNoZWNrIGhhbmRsaW5nKQpAQCAtMTc3NywxMyArMjQ1OCwyNCBAQAogewogCXN0cnVjdCBjY3cxICpjY3c7CiAJc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGE7CisJc3RydWN0IHRjdyAqdGN3OworCXN0cnVjdCB0Y2NiICp0Y2NiOworCXN0cnVjdCBkY3cgKmRjdzsKIAotCWNjdyA9IGNxci0+Y3BhZGRyOwotCXBmeGRhdGEgPSBjcXItPmRhdGE7Ci0KLQlpZiAoY2N3LT5jbWRfY29kZSA9PSBEQVNEX0VDS0RfQ0NXX1BGWCkgeworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCXRjdyA9IGNxci0+Y3BhZGRyOworCQl0Y2NiID0gdGN3X2dldF90Y2NiKHRjdyk7CisJCWRjdyA9IChzdHJ1Y3QgZGN3ICopJnRjY2ItPnRjYVswXTsKKwkJcGZ4ZGF0YSA9IChzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqKSZkY3ctPmNkWzBdOwogCQlwZnhkYXRhLT52YWxpZGl0eS52ZXJpZnlfYmFzZSA9IDA7CiAJCXBmeGRhdGEtPnZhbGlkaXR5Lmh5cGVyX3BhdiA9IDA7CisJfSBlbHNlIHsKKwkJY2N3ID0gY3FyLT5jcGFkZHI7CisJCXBmeGRhdGEgPSBjcXItPmRhdGE7CisJCWlmIChjY3ctPmNtZF9jb2RlID09IERBU0RfRUNLRF9DQ1dfUEZYKSB7CisJCQlwZnhkYXRhLT52YWxpZGl0eS52ZXJpZnlfYmFzZSA9IDA7CisJCQlwZnhkYXRhLT52YWxpZGl0eS5oeXBlcl9wYXYgPSAwOworCQl9CiAJfQogfQogCkBAIC0xODYxLDYgKzI1NTMsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xODY4LDE0ICsyNTYxLDE1IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9Ci0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRUxFQVNFOwotICAgICAgICBjcXItPmNwYWRkci0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOwotICAgICAgICBjcXItPmNwYWRkci0+Y291bnQgPSAzMjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRUxFQVNFOworCWNjdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOworCWNjdy0+Y291bnQgPSAzMjsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtMTkwMiw2ICsyNTk2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMTkwOSwxNCArMjYwNCwxNSBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCiAJCQkJICAgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVTRVJWRTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmNvdW50ID0gMzI7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVTRVJWRTsKKwljY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKKwljY3ctPmNvdW50ID0gMzI7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTE5NDIsNiArMjYzOCw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTE5NDksMTQgKzI2NDYsMTUgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NMQ0s7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5jb3VudCA9IDMyOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NMQ0s7CisJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7CisJY2N3LT5jb3VudCA9IDMyOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CkBAIC0xOTkwLDcgKzI2ODgsNyBAQAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGRhc2RfcnNzZF9wZXJmX3N0YXRzX3QpKSwKIAkJCQkgICBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KQEAgLTIwODAsOSArMjc3OCw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCXByaXZhdGUtPmF0dHJpYiA9IGF0dHJpYjsKIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgImNhY2hlIG9wZXJhdGlvbiBtb2RlIHNldCB0byAleCAoJWkgY3lsaW5kZXIgcHJlc3RhZ2UpIiwKLQkJICAgIHByaXZhdGUtPmF0dHJpYi5vcGVyYXRpb24sIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJICJUaGUgREFTRCBjYWNoZSBtb2RlIHdhcyBzZXQgdG8gJXggKCVpIGN5bGluZGVyIHByZXN0YWdlKVxuIiwKKwkJIHByaXZhdGUtPmF0dHJpYi5vcGVyYXRpb24sIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTMzLDcgKzI4MzEsNyBAQAogCS8qIHNldHVwIENDV3MgZm9yIFBTRiArIFJTU0QgKi8KIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDIgLCAwLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJjID0gUFRSX0VSUihjcXIpOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjI0MiwxMSArMjk0MCw1NCBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyB2b2lkCitkYXNkX2Vja2RfZHVtcF9zZW5zZV9kYmYoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwKKwkJCSBzdHJ1Y3QgaXJiICppcmIsIGNoYXIgKnJlYXNvbikKK3sKKwl1NjQgKnNlbnNlOworCWludCBzbDsKKwlzdHJ1Y3QgdHNiICp0c2I7CisKKwlzZW5zZSA9IE5VTEw7CisJdHNiID0gTlVMTDsKKwlpZiAocmVxICYmIHNjc3dfaXNfdG0oJnJlcS0+aXJiLnNjc3cpKSB7CisJCWlmIChpcmItPnNjc3cudG0udGN3KQorCQkJdHNiID0gdGN3X2dldF90c2IoCisJCQkJKHN0cnVjdCB0Y3cgKikodW5zaWduZWQgbG9uZylpcmItPnNjc3cudG0udGN3KTsKKwkJaWYgKHRzYiAmJiAoaXJiLT5zY3N3LnRtLmZjeHMgPT0gMHgwMSkpIHsKKwkJCXN3aXRjaCAodHNiLT5mbGFncyAmIDB4MDcpIHsKKwkJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJCXNlbnNlID0gKHU2NCAqKXRzYi0+dHNhLmlvc3RhdC5zZW5zZTsKKwkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiB0c19kZHBjICovCisJCQkJc2Vuc2UgPSAodTY0ICopdHNiLT50c2EuZGRwYy5zZW5zZTsKKwkJCWJyZWFrOworCQkJY2FzZSAzOiAvKiB0c2FfaW50cmcgKi8KKwkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpCisJCQlzZW5zZSA9ICh1NjQgKilpcmItPmVjdzsKKwl9CisJaWYgKHNlbnNlKSB7CisJCWZvciAoc2wgPSAwOyBzbCA8IDQ7IHNsKyspIHsKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VNRVJHLCBkZXZpY2UsCisJCQkJICAgICAgIiVzOiAlMDE2bGx4ICUwMTZsbHggJTAxNmxseCAlMDE2bGx4IiwKKwkJCQkgICAgICByZWFzb24sIHNlbnNlWzBdLCBzZW5zZVsxXSwgc2Vuc2VbMl0sCisJCQkJICAgICAgc2Vuc2VbM10pOworCQl9CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CisJfQorfQorCiAvKgogICogUHJpbnQgc2Vuc2UgZGF0YSBhbmQgcmVsYXRlZCBjaGFubmVsIHByb2dyYW0uCiAgKiBQYXJ0cyBhcmUgcHJpbnRlZCBiZWNhdXNlIHByaW50ayBidWZmZXIgaXMgb25seSAxMDI0IGJ5dGVzLgogICovCi1zdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKK3N0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlX2NjdyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKIAkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJY2hhciAqcGFnZTsKQEAgLTIyNTUsOCArMjk5Niw4IEBACiAKIAlwYWdlID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmIChwYWdlID09IE5VTEwpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiAlcyIsCi0JCQkgICAgIk5vIG1lbW9yeSB0byBkdW1wIHNlbnNlIGRhdGEiKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIk5vIG1lbW9yeSB0byBkdW1wIHNlbnNlIGRhdGFcbiIpOwogCQlyZXR1cm47CiAJfQogCS8qIGR1bXAgdGhlIHNlbnNlIGRhdGEgKi8KQEAgLTIyNjUsNyArMzAwNiw3IEBACiAJCSAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJICAgICAgICIgaW4gcmVxOiAlcCBDUzogMHglMDJYIERTOiAweCUwMlhcbiIsIHJlcSwKLQkJICAgICAgIGlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOworCQkgICAgICAgc2Nzd19jc3RhdCgmaXJiLT5zY3N3KSwgc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSk7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgogCQkgICAgICAgIiBkZXZpY2UgJXM6IEZhaWxpbmcgQ0NXOiAlcFxuIiwKIAkJICAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCkBAIC0yMzQxLDYgKzMwODIsMTQ3IEBACiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKIH0KIAorCisvKgorICogUHJpbnQgc2Vuc2UgZGF0YSBmcm9tIGEgdGN3LgorICovCitzdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZV90Y3coc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwgc3RydWN0IGlyYiAqaXJiKQoreworCWNoYXIgKnBhZ2U7CisJaW50IGxlbiwgc2wsIHNjdCwgcmVzaWR1YWw7CisKKwlzdHJ1Y3QgdHNiICp0c2I7CisJdTggKnNlbnNlOworCisKKwlwYWdlID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCWlmIChwYWdlID09IE5VTEwpIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiICVzIiwKKwkJCSAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YSIpOworCQlyZXR1cm47CisJfQorCS8qIGR1bXAgdGhlIHNlbnNlIGRhdGEgKi8KKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCSAgICAgICIgSS9PIHN0YXR1cyByZXBvcnQgZm9yIGRldmljZSAlczpcbiIsCisJCSAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJICAgICAgICIgaW4gcmVxOiAlcCBDUzogMHglMDJYIERTOiAweCUwMlggIgorCQkgICAgICAgImZjeHM6IDB4JTAyWCBzY2h4czogMHglMDJYXG4iLCByZXEsCisJCSAgICAgICBzY3N3X2NzdGF0KCZpcmItPnNjc3cpLCBzY3N3X2RzdGF0KCZpcmItPnNjc3cpLAorCQkgICAgICAgaXJiLT5zY3N3LnRtLmZjeHMsIGlyYi0+c2Nzdy50bS5zY2h4cyk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkgICAgICAgIiBkZXZpY2UgJXM6IEZhaWxpbmcgVENXOiAlcFxuIiwKKwkJICAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCisJCSAgICAgICAodm9pZCAqKSAoYWRkcl90KSBpcmItPnNjc3cudG0udGN3KTsKKworCXRzYiA9IE5VTEw7CisJc2Vuc2UgPSBOVUxMOworCWlmIChpcmItPnNjc3cudG0udGN3KQorCQl0c2IgPSB0Y3dfZ2V0X3RzYigKKwkJCShzdHJ1Y3QgdGN3ICopKHVuc2lnbmVkIGxvbmcpaXJiLT5zY3N3LnRtLnRjdyk7CisKKwlpZiAodHNiICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmxlbmd0aCAlZFxuIiwgdHNiLT5sZW5ndGgpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmZsYWdzICV4XG4iLCB0c2ItPmZsYWdzKTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT5kY3dfb2Zmc2V0ICVkXG4iLCB0c2ItPmRjd19vZmZzZXQpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmNvdW50ICVkXG4iLCB0c2ItPmNvdW50KTsKKwkJcmVzaWR1YWwgPSB0c2ItPmNvdW50IC0gMjg7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHJlc2lkdWFsICVkXG4iLCByZXNpZHVhbCk7CisKKwkJc3dpdGNoICh0c2ItPmZsYWdzICYgMHgwNykgeworCQljYXNlIDE6CS8qIHRzYV9pb3N0YXQgKi8KKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZXZfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRldl90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZWZfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRlZl90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5xdWV1ZV90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQucXVldWVfdGltZSk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQuZGV2X2J1c3lfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRldl9idXN5X3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRldl9hY3RfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRldl9hY3RfdGltZSk7CisJCQlzZW5zZSA9IHRzYi0+dHNhLmlvc3RhdC5zZW5zZTsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIHRzX2RkcGMgKi8KKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmRkcGMucmMgJWRcbiIsIHRzYi0+dHNhLmRkcGMucmMpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuZGRwYy5yY3E6ICAiKTsKKwkJCWZvciAoc2wgPSAwOyBzbCA8IDE2OyBzbCsrKSB7CisJCQkJZm9yIChzY3QgPSAwOyBzY3QgPCA4OyBzY3QrKykgeworCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiICUwMngiLAorCQkJCQkJICAgICAgIHRzYi0+dHNhLmRkcGMucmNxW3NsXSk7CisJCQkJfQorCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCQkJfQorCQkJc2Vuc2UgPSB0c2ItPnRzYS5kZHBjLnNlbnNlOworCQkJYnJlYWs7CisJCWNhc2UgMzogLyogdHNhX2ludHJnICovCisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJICAgICAgIiB0c2ItPnRzYS5pbnRyZy46IG5vdCBzdXBwb3J0ZXQgeWV0IFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzZW5zZSkgeworCQkJZm9yIChzbCA9IDA7IHNsIDwgNDsgc2wrKykgeworCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCisJCQkJCSAgICAgICBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJCSAgICAgICAiIFNlbnNlKGhleCkgJTJkLSUyZDoiLAorCQkJCQkgICAgICAgKDggKiBzbCksICgoOCAqIHNsKSArIDcpKTsKKwkJCQlmb3IgKHNjdCA9IDA7IHNjdCA8IDg7IHNjdCsrKSB7CisJCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgJTAyeCIsCisJCQkJCQkgICAgICAgc2Vuc2VbOCAqIHNsICsgc2N0XSk7CisJCQkJfQorCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCQkJfQorCisJCQlpZiAoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgeworCQkJCS8qIDI0IEJ5dGUgU2Vuc2UgRGF0YSAqLworCQkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCQkiIDI0IEJ5dGU6ICV4IE1TRyAleCwgIgorCQkJCQkiJXMgTVNHYiB0byBTWVNPUFxuIiwKKwkJCQkJc2Vuc2VbN10gPj4gNCwgc2Vuc2VbN10gJiAweDBmLAorCQkJCQlzZW5zZVsxXSAmIDB4MTAgPyAiIiA6ICJubyIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAzMiBCeXRlIFNlbnNlIERhdGEgKi8KKwkJCQlzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkJIiAzMiBCeXRlOiBGb3JtYXQ6ICV4ICIKKwkJCQkJIkV4Y2VwdGlvbiBjbGFzcyAleFxuIiwKKwkJCQkJc2Vuc2VbNl0gJiAweDBmLCBzZW5zZVsyMl0gPj4gNCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkiIFNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJIiBTT1JSWSAtIE5PIFRTQiBEQVRBIEFWQUlMQUJMRVxuIik7CisJfQorCXByaW50aygiJXMiLCBwYWdlKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLCBzdHJ1Y3QgaXJiICppcmIpCit7CisJaWYgKHJlcSAmJiBzY3N3X2lzX3RtKCZyZXEtPmlyYi5zY3N3KSkKKwkJZGFzZF9lY2tkX2R1bXBfc2Vuc2VfdGN3KGRldmljZSwgcmVxLCBpcmIpOworCWVsc2UKKwkJZGFzZF9lY2tkX2R1bXBfc2Vuc2VfY2N3KGRldmljZSwgcmVxLCBpcmIpOworfQorCisKIC8qCiAgKiBtYXhfYmxvY2tzIGlzIGRlcGVuZGVudCBvbiB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgdGhhdCBpcyBhdmFpbGFibGUKICAqIGluIHRoZSBzdGF0aWMgaW8gYnVmZmVyIGZvciBlYWNoIGRldmljZS4gQ3VycmVudGx5IGVhY2ggZGV2aWNlIGhhcwpAQCAtMjM3NSw2ICszMjU3LDcgQEAKIAkuYnVpbGRfY3AgPSBkYXNkX2Vja2RfYnVpbGRfYWxpYXNfY3AsCiAJLmZyZWVfY3AgPSBkYXNkX2Vja2RfZnJlZV9hbGlhc19jcCwKIAkuZHVtcF9zZW5zZSA9IGRhc2RfZWNrZF9kdW1wX3NlbnNlLAorCS5kdW1wX3NlbnNlX2RiZiA9IGRhc2RfZWNrZF9kdW1wX3NlbnNlX2RiZiwKIAkuZmlsbF9pbmZvID0gZGFzZF9lY2tkX2ZpbGxfaW5mbywKIAkuaW9jdGwgPSBkYXNkX2Vja2RfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCmluZGV4IDI0NzZmODcuLmFkNDViY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKQEAgLTM4LDggKzM4LDExIEBACiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVMRUFTRQkJIDB4OTQKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUFEX0NLRF9NVAkgMHg5ZQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRF9NVAkgMHg5ZAorI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEEJIDB4QTUKKyNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEEJIDB4QTYKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRVNFUlZFCQkgMHhCNAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1BGWAkJIDB4RTcKKyNkZWZpbmUgREFTRF9FQ0tEX0NDV19QRlhfUkVBRAkJIDB4RUEKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SU0NLCQkgMHhGOQogCiAvKgpAQCAtNDgsNiArNTEsMTEgQEAKICNkZWZpbmUgUFNGX09SREVSX1BSU1NEIDB4MTgKICNkZWZpbmUgUFNGX09SREVSX1NTQwkweDFECiAKKy8qCisgKiBTaXplIHRoYXQgaXMgcmVwb3J0ZXQgZm9yIGxhcmdlIHZvbHVtZXMgaW4gdGhlIG9sZCAxNi1iaXQgbm9fY3lsIGZpZWxkCisgKi8KKyNkZWZpbmUgTFZfQ09NUEFUX0NZTCAweEZGRkUKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRUNUSU9OOiBUeXBlIERlZmluaXRpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExOCw3ICsxMjYsOSBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBlcF9zeXNfdGltZTsgLyogRXh0IFBhcmFtZXRlciAtIFN5c3RlbSBUaW1lIFN0YW1wICovCiAJX191OCBlcF9mb3JtYXQ7ICAgICAgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgZm9ybWF0IGJ5dGUgICAgICAgKi8KIAlfX3U4IGVwX3ByaW87ICAgICAgICAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBwcmlvcml0eSBJL08gYnl0ZSAqLwotCV9fdTggZXBfcmVzZXJ2ZWRbNl07ICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIFJlc2VydmVkICAgICAgICAgICovCisJX191OCBlcF9yZXNlcnZlZDE7ICAgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgUmVzZXJ2ZWQJICAgICAgICovCisJX191OCBlcF9yZWNfcGVyX3RyYWNrOyAvKiBOdW1iZXIgb2YgcmVjb3JkcyBvbiBhIHRyYWNrCSAgICAgICAqLworCV9fdTggZXBfcmVzZXJ2ZWRbNF07ICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIFJlc2VydmVkCSAgICAgICAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBMT19lY2tkX2RhdGEgewpAQCAtMTM5LDExICsxNDksMzcgQEAKIAlfX3UxNiBsZW5ndGg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IExSRV9lY2tkX2RhdGEgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgb3JpZW50YXRpb246MjsKKwkJdW5zaWduZWQgY2hhciBvcGVyYXRpb246NjsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBvcGVyYXRpb247CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBsZW5ndGhfdmFsaWQ6MTsKKwkJdW5zaWduZWQgY2hhciBsZW5ndGhfc2NvcGU6MTsKKwkJdW5zaWduZWQgY2hhciBpbWJlZGRlZF9jY3dfdmFsaWQ6MTsKKwkJdW5zaWduZWQgY2hhciBjaGVja19ieXRlczoyOworCQl1bnNpZ25lZCBjaGFyIGltYmVkZGVkX2NvdW50X3ZhbGlkOjE7CisJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ6MTsKKwkJdW5zaWduZWQgY2hhciByZWFkX2NvdW50X3N1ZmZpeDoxOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF1eGlsaWFyeTsKKwlfX3U4IGltYmVkZGVkX2NjdzsKKwlfX3U4IGNvdW50OworCXN0cnVjdCBjaF90IHNlZWtfYWRkcjsKKwlzdHJ1Y3QgY2hyX3Qgc2VhcmNoX2FyZzsKKwlfX3U4IHNlY3RvcjsKKwlfX3UxNiBsZW5ndGg7CisJX191OCBpbWJlZGRlZF9jb3VudDsKKwlfX3U4IGV4dGVuZGVkX29wZXJhdGlvbjsKKwlfX3UxNiBleHRlbmRlZF9wYXJhbWV0ZXJfbGVuZ3RoOworCV9fdTggZXh0ZW5kZWRfcGFyYW1ldGVyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIFByZWZpeCBkYXRhIGZvciBmb3JtYXQgMHgwMCBhbmQgMHgwMSAqLwogc3RydWN0IFBGWF9lY2tkX2RhdGEgewogCXVuc2lnbmVkIGNoYXIgZm9ybWF0OwogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGNoYXIgZGVmaW5lX2V4dGVuZDoxOworCQl1bnNpZ25lZCBjaGFyIGRlZmluZV9leHRlbnQ6MTsKIAkJdW5zaWduZWQgY2hhciB0aW1lX3N0YW1wOjE7CiAJCXVuc2lnbmVkIGNoYXIgdmVyaWZ5X2Jhc2U6MTsKIAkJdW5zaWduZWQgY2hhciBoeXBlcl9wYXY6MTsKQEAgLTE1Myw5ICsxODksOCBAQAogCV9fdTggYXV4OwogCV9fdTggYmFzZV9sc3M7CiAJX191OCByZXNlcnZlZFs3XTsKLQlzdHJ1Y3QgREVfZWNrZF9kYXRhIGRlZmluZV9leHRlbmQ7Ci0Jc3RydWN0IExPX2Vja2RfZGF0YSBsb2NhdGVfcmVjb3JkOwotCV9fdTggTE9fZXh0ZW5kZWRfZGF0YVs0XTsKKwlzdHJ1Y3QgREVfZWNrZF9kYXRhIGRlZmluZV9leHRlbnQ7CisJc3RydWN0IExSRV9lY2tkX2RhdGEgbG9jYXRlX3JlY29yZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZGFzZF9lY2tkX2NoYXJhY3RlcmlzdGljcyB7CkBAIC0yMjgsNyArMjYzLDggQEAKIAlfX3U4IGZhY3Rvcjc7CiAJX191OCBmYWN0b3I4OwogCV9fdTggcmVzZXJ2ZWQyWzNdOwotCV9fdTggcmVzZXJ2ZWQzWzEwXTsKKwlfX3U4IHJlc2VydmVkM1s2XTsKKwlfX3UzMiBsb25nX25vX2N5bDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBlbGVtZW50cyBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhICovCkBAIC00MDYsNiArNDQyLDcgQEAKIAlpbnQgdXNlc19jZGw7CiAJc3RydWN0IGF0dHJpYl9kYXRhX3QgYXR0cmliOwkvKiBlLmcuIGNhY2hlIG9wZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgZGFzZF9yc3NkX2ZlYXR1cmVzIGZlYXR1cmVzOworCXUzMiByZWFsX2N5bDsKIAogCS8qIGFsaWFzIG1hbmFnZW1uZXQgKi8KIAlzdHJ1Y3QgZGFzZF91aWQgdWlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwppbmRleCBmOGUwNWNlLi5jMjRjOGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwpAQCAtNiw2ICs2LDggQEAKICAqICBBdXRob3Iocyk6IFN0ZWZhbiBXZWluaHViZXIgPHdlaW5AZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOTcsMTEgKzI5OSwxMiBAQAogCXN0cnVjdCBkYXNkX2Vlcl9oZWFkZXIgaGVhZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVlcmJ1ZmZlciAqZWVyYjsKKwljaGFyICpzZW5zZTsKIAogCS8qIGdvIHRocm91Z2ggY3FyIGNoYWluIGFuZCBjb3VudCB0aGUgdmFsaWQgc2Vuc2UgZGF0YSBzZXRzICovCiAJZGF0YV9zaXplID0gMDsKIAlmb3IgKHRlbXBfY3FyID0gY3FyOyB0ZW1wX2NxcjsgdGVtcF9jcXIgPSB0ZW1wX2Nxci0+cmVmZXJzKQotCQlpZiAodGVtcF9jcXItPmlyYi5lc3cuZXN3MC5lcncuY29ucykKKwkJaWYgKGRhc2RfZ2V0X3NlbnNlKCZ0ZW1wX2Nxci0+aXJiKSkKIAkJCWRhdGFfc2l6ZSArPSAzMjsKIAogCWhlYWRlci50b3RhbF9zaXplID0gc2l6ZW9mKGhlYWRlcikgKyBkYXRhX3NpemUgKyA0OyAvKiAiRU9SIiAqLwpAQCAtMzE2LDkgKzMxOSwxMSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZWVyYiwgJmJ1ZmZlcmxpc3QsIGxpc3QpIHsKIAkJZGFzZF9lZXJfc3RhcnRfcmVjb3JkKGVlcmIsIGhlYWRlci50b3RhbF9zaXplKTsKIAkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIChjaGFyICopICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLQkJZm9yICh0ZW1wX2NxciA9IGNxcjsgdGVtcF9jcXI7IHRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVycykKLQkJCWlmICh0ZW1wX2Nxci0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQotCQkJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBjcXItPmlyYi5lY3csIDMyKTsKKwkJZm9yICh0ZW1wX2NxciA9IGNxcjsgdGVtcF9jcXI7IHRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVycykgeworCQkJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmdGVtcF9jcXItPmlyYik7CisJCQlpZiAoc2Vuc2UpCisJCQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIHNlbnNlLCAzMik7CisJCX0KIAkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsICJFT1IiLCA0KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwpAQCAtNDUxLDYgKzQ1Niw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmIChkZXZpY2UtPmVlcl9jcXIpCiAJCXJldHVybiAwOwpAQCAtNDY4LDEwICs0NzQsMTEgQEAKIAljcXItPmV4cGlyZXMgPSAxMCAqIEhaOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CiAKLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NOU1M7Ci0JY3FyLT5jcGFkZHItPmNvdW50ID0gU05TU19EQVRBX1NJWkU7Ci0JY3FyLT5jcGFkZHItPmZsYWdzID0gMDsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19TTlNTOworCWNjdy0+Y291bnQgPSBTTlNTX0RBVEFfU0laRTsKKwljY3ctPmZsYWdzID0gMDsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CkBAIC01MzQsNyArNTQxLDcgQEAKIAlpZiAoZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPCAxIHx8CiAJICAgIGVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50ID4gSU5UX01BWCAvIFBBR0VfU0laRSkgewogCQlrZnJlZShlZXJiKTsKLQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsICJjYW4ndCBvcGVuIGRldmljZSBzaW5jZSBtb2R1bGUgIgorCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJjYW4ndCBvcGVuIGRldmljZSBzaW5jZSBtb2R1bGUgIgogCQkJInBhcmFtZXRlciBlZXJfcGFnZXMgaXMgc21hbGxlciB0aGFuIDEgb3IiCiAJCQkiIGJpZ2dlciB0aGFuICVkIiwgKGludCkoSU5UX01BWCAvIFBBR0VfU0laRSkpOwogCQl1bmxvY2tfa2VybmVsKCk7CkBAIC02ODcsNyArNjk0LDcgQEAKIAlpZiAocmMpIHsKIAkJa2ZyZWUoZGFzZF9lZXJfZGV2KTsKIAkJZGFzZF9lZXJfZGV2ID0gTlVMTDsKLQkJTUVTU0FHRShLRVJOX0VSUiwgIiVzIiwgImRhc2RfZWVyX2luaXQgY291bGQgbm90ICIKKwkJREJGX0VWRU5UKERCRl9FUlIsICIlcyIsICJkYXNkX2Vlcl9pbml0IGNvdWxkIG5vdCAiCiAJCSAgICAgICAicmVnaXN0ZXIgbWlzYyBkZXZpY2UiKTsKIAkJcmV0dXJuIHJjOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKaW5kZXggOGYxMDAwMC4uZDk3MGNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKQEAgLTksNiArOSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIApAQCAtOTEsMTQgKzkzLDE0IEBACiAKICAgICAgICAgLyoganVzdCByZXRyeSAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2F2ZSAuLi4gSSBnb3Qgbm8gc2Vuc2UgZGF0YS4uLi4gKi8KICAgICAgICAgaWYgKGNxci0+cmV0cmllcyA+IDApIHsKLQkJREVWX01FU1NBR0UgKEtFUk5fREVCVUcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgRVJQIGNhbGxlZCAoJWkgcmV0cmllcyBsZWZ0KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+cmV0cmllcyk7CiAJCWNxci0+bHBtICAgID0gTFBNX0FOWVBBVEg7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAgImRlZmF1bHQgRVJQIGNhbGxlZCAoTk8gcmV0cnkgbGVmdCkiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiZGVmYXVsdCBFUlAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iKTsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwogICAgICAgICB9CkBAIC0xNjIsOCArMTY0LDIxIEBACiAJCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZShkZXZpY2UsIGNxciwgaXJiKTsKIH0KIAordm9pZAorZGFzZF9sb2dfc2Vuc2VfZGJmKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOworCisJZGV2aWNlID0gY3FyLT5zdGFydGRldjsKKwkvKiBkdW1wIHNlbnNlIGRhdGEgdG8gczM5MCBkZWJ1Z2ZlYXR1cmUqLworCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUgJiYgZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZikKKwkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIGNxciwgaXJiLCAibG9nIik7Cit9CitFWFBPUlRfU1lNQk9MKGRhc2RfbG9nX3NlbnNlX2RiZik7CisKIEVYUE9SVF9TWU1CT0woZGFzZF9kZWZhdWx0X2VycF9hY3Rpb24pOwogRVhQT1JUX1NZTUJPTChkYXNkX2RlZmF1bHRfZXJwX3Bvc3RhY3Rpb24pOwogRVhQT1JUX1NZTUJPTChkYXNkX2FsbG9jX2VycF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZGFzZF9mcmVlX2VycF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZGFzZF9sb2dfc2Vuc2UpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCmluZGV4IGYxZDE3NjAuLmEzZWI2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCkBAIC02LDYgKzYsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CkBAIC0xMjgsMTcgKzEzMCwxOCBAQAogCQlwcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUpLAogCQkJCSAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCQlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgcHJpdmF0ZSAiCi0JCQkJICAgICJkYXRhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJBbGxvY2F0aW5nIG1lbW9yeSBmb3IgcHJpdmF0ZSBEQVNEICIKKwkJCQkgImRhdGEgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWRldmljZS0+cHJpdmF0ZSA9ICh2b2lkICopIHByaXZhdGU7CiAJfQogCWJsb2NrID0gZGFzZF9hbGxvY19ibG9jaygpOwogCWlmIChJU19FUlIoYmxvY2spKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCBibG9jayBzdHJ1Y3R1cmUiKTsKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgIgorCQkJICAic3RydWN0dXJlIGZvciBkZXZpY2U6ICVzIiwKKwkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWRldmljZS0+cHJpdmF0ZSA9IE5VTEw7CiAJCWtmcmVlKHByaXZhdGUpOwogCQlyZXR1cm4gUFRSX0VSUihibG9jayk7CkBAIC0xNTAsOSArMTUzLDkgQEAKIAlyZGNfZGF0YSA9ICh2b2lkICopICYocHJpdmF0ZS0+cmRjX2RhdGEpOwogCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgIkZCQSAiLCAmcmRjX2RhdGEsIDMyKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0JCQkgICAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyByZXR1cm5lZCBlcnJvciAlZCIsCi0JCQkgICAgcmMpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgcmV0dXJuZWQgIgorCQkJICAiZXJyb3IgJWQgZm9yIGRldmljZTogJXMiLAorCQkJICByYywgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWRldmljZS0+YmxvY2sgPSBOVUxMOwogCQlkYXNkX2ZyZWVfYmxvY2soYmxvY2spOwogCQlkZXZpY2UtPnByaXZhdGUgPSBOVUxMOwpAQCAtMTYwLDE1ICsxNjMsMTYgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgIiUwNFgvJTAyWChDVTolMDRYLyUwMlgpICVkTUIgYXQoJWQgQi9ibGspIiwKLQkJICAgIGNkZXYtPmlkLmRldl90eXBlLAotCQkgICAgY2Rldi0+aWQuZGV2X21vZGVsLAotCQkgICAgY2Rldi0+aWQuY3VfdHlwZSwKLQkJICAgIGNkZXYtPmlkLmN1X21vZGVsLAotCQkgICAgKChwcml2YXRlLT5yZGNfZGF0YS5ibGtfYmRzYSAqCi0JCSAgICAgIChwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSA+PiA5KSkgPj4gMTEpLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJICJOZXcgRkJBIERBU0QgJTA0WC8lMDJYIChDVSAlMDRYLyUwMlgpIHdpdGggJWQgTUIgIgorCQkgImFuZCAlZCBCL2Jsa1xuIiwKKwkJIGNkZXYtPmlkLmRldl90eXBlLAorCQkgY2Rldi0+aWQuZGV2X21vZGVsLAorCQkgY2Rldi0+aWQuY3VfdHlwZSwKKwkJIGNkZXYtPmlkLmN1X21vZGVsLAorCQkgKChwcml2YXRlLT5yZGNfZGF0YS5ibGtfYmRzYSAqCisJCSAgIChwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSA+PiA5KSkgPj4gMTEpLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xODAsNyArMTg0LDcgQEAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2ZiYV9wcml2YXRlICopIGJsb2NrLT5iYXNlLT5wcml2YXRlOwogCXJjID0gZGFzZF9jaGVja19ibG9ja3NpemUocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUpOwogCWlmIChyYykgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGJsb2NrLT5iYXNlLCAidW5rbm93biBibG9ja3NpemUgJWQiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBibG9jay0+YmFzZSwgInVua25vd24gYmxvY2tzaXplICVkIiwKIAkJCSAgICBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0yMTUsNyArMjE5LDcgQEAKIAlpZiAoY3FyLT5mdW5jdGlvbiA9PSBkYXNkX2RlZmF1bHRfZXJwX2FjdGlvbikKIAkJcmV0dXJuIGRhc2RfZGVmYXVsdF9lcnBfcG9zdGFjdGlvbjsKIAotCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgY3FyLT5zdGFydGRldiwgInVua25vd24gRVJQIGFjdGlvbiAlcCIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgY3FyLT5zdGFydGRldiwgInVua25vd24gRVJQIGFjdGlvbiAlcCIsCiAJCSAgICBjcXItPmZ1bmN0aW9uKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIzMyw5ICsyMzcsOSBAQAogCX0KIAogCS8qIGNoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzICovCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHQgcmVjZWl2ZWQiKTsKLQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBOVUxMLCBpcmIsICJ1bnNvbGljaXRlZCIpOwogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJcmV0dXJuOwogfTsKQEAgLTQzNyw2ICs0NDEsMjUgQEAKIH0KIAogc3RhdGljIHZvaWQKK2Rhc2RfZmJhX2R1bXBfc2Vuc2VfZGJmKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsCisJCQkgc3RydWN0IGlyYiAqaXJiLCBjaGFyICpyZWFzb24pCit7CisJaW50IHNsOworCWlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKSB7CisJCWZvciAoc2wgPSAwOyBzbCA8IDQ7IHNsKyspIHsKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VNRVJHLCBkZXZpY2UsCisJCQkJICAgICAgIiVzOiAlMDh4ICUwOHggJTA4eCAlMDh4IiwKKwkJCQkgICAgICByZWFzb24sIGlyYi0+ZWN3WzggKiAwXSwgaXJiLT5lY3dbOCAqIDFdLAorCQkJCSAgICAgIGlyYi0+ZWN3WzggKiAyXSwgaXJiLT5lY3dbOCAqIDNdKTsKKwkJfQorCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX0VNRVJHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiU09SUlkgLSBOTyBWQUxJRCBTRU5TRSBBVkFJTEFCTEVcbiIpOworCX0KK30KKworCitzdGF0aWMgdm9pZAogZGFzZF9mYmFfZHVtcF9zZW5zZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqIHJlcSwKIAkJICAgIHN0cnVjdCBpcmIgKmlyYikKIHsKQEAgLTQ0Niw3ICs0NjksNyBAQAogCiAJcGFnZSA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAocGFnZSA9PSBOVUxMKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIgJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIk5vIG1lbW9yeSB0byBkdW1wIHNlbnNlIGRhdGEiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ3Niw4ICs0OTksNyBAQAogCSAgICAgICAgbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgogCQkJICAgICAgICIgU09SUlkgLSBOTyBWQUxJRCBTRU5TRSBBVkFJTEFCTEVcbiIpOwogCX0KLQlNRVNTQUdFX0xPRyhLRVJOX0VSUiwgIiVzIiwKLQkJICAgIHBhZ2UgKyBzaXplb2YoS0VSTl9FUlIgUFJJTlRLX0hFQURFUikpOworCXByaW50ayhLRVJOX0VSUiAiJXMiLCBwYWdlKTsKIAogCS8qIGR1bXAgdGhlIENoYW5uZWwgUHJvZ3JhbSAqLwogCS8qIHByaW50IGZpcnN0IENDV3MgKG1heGltdW0gOCkgKi8KQEAgLTQ5OCw4ICs1MjAsNyBAQAogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKIAkJYWN0Kys7CiAJfQotCU1FU1NBR0VfTE9HKEtFUk5fRVJSLCAiJXMiLAotCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJcHJpbnRrKEtFUk5fRVJSICIlcyIsIHBhZ2UpOwogCiAKIAkvKiBwcmludCBmYWlsaW5nIENDVyBhcmVhICovCkBAIC01NDAsOCArNTYxLDcgQEAKIAkJYWN0Kys7CiAJfQogCWlmIChsZW4gPiAwKQotCQlNRVNTQUdFX0xPRyhLRVJOX0VSUiwgIiVzIiwKLQkJCSAgICBwYWdlICsgc2l6ZW9mKEtFUk5fRVJSIFBSSU5US19IRUFERVIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyIsIHBhZ2UpOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7CiB9CiAKQEAgLTU3Niw2ICs1OTYsNyBAQAogCS5idWlsZF9jcCA9IGRhc2RfZmJhX2J1aWxkX2NwLAogCS5mcmVlX2NwID0gZGFzZF9mYmFfZnJlZV9jcCwKIAkuZHVtcF9zZW5zZSA9IGRhc2RfZmJhX2R1bXBfc2Vuc2UsCisJLmR1bXBfc2Vuc2VfZGJmID0gZGFzZF9mYmFfZHVtcF9zZW5zZV9kYmYsCiAJLmZpbGxfaW5mbyA9IGRhc2RfZmJhX2ZpbGxfaW5mbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IGU5OWQ1NjYuLmQzMTk4MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtMTEsNiArMTEsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgpAQCAtMTYzLDkgKzE2NSw4IEBACiAJLyogUmVnaXN0ZXIgdG8gc3RhdGljIGRhc2QgbWFqb3IgOTQgKi8KIAlyYyA9IHJlZ2lzdGVyX2Jsa2RldihEQVNEX01BSk9SLCAiZGFzZCIpOwogCWlmIChyYyAhPSAwKSB7Ci0JCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAotCQkJIkNvdWxkbid0IHJlZ2lzdGVyIHN1Y2Nlc3NmdWxseSB0byAiCi0JCQkibWFqb3Igbm8gJWQiLCBEQVNEX01BSk9SKTsKKwkJcHJfd2FybmluZygiUmVnaXN0ZXJpbmcgdGhlIGRldmljZSBkcml2ZXIgd2l0aCBtYWpvciBudW1iZXIgIgorCQkJICAgIiVkIGZhaWxlZFxuIiwgREFTRF9NQUpPUik7CiAJCXJldHVybiByYzsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IDRhMzkwODQuLmMxZTQ4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC0xMTIsNiArMTEyLDkgQEAKIAkJCQlkX2RhdGEpOyBcCiB9IHdoaWxlKDApCiAKKy8qIGxpbWl0IHNpemUgZm9yIGFuIGVycm9yc3RyaW5nICovCisjZGVmaW5lIEVSUk9STEVOR1RIIDMwCisKIC8qIGRlZmluaXRpb24gb2YgZGJmIGRlYnVnIGxldmVscyAqLwogI2RlZmluZQlEQkZfRU1FUkcJMAkvKiBzeXN0ZW0gaXMgdW51c2FibGUJCQkqLwogI2RlZmluZQlEQkZfQUxFUlQJMQkvKiBhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseQkqLwpAQCAtMTU3LDcgKzE2MCw4IEBACiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrOwkvKiB0aGUgb3JpZ2luYXRpbmcgYmxvY2sgZGV2aWNlICovCiAJc3RydWN0IGRhc2RfZGV2aWNlICptZW1kZXY7CS8qIHRoZSBkZXZpY2UgdXNlZCB0byBhbGxvY2F0ZSB0aGlzICovCiAJc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldjsJLyogZGV2aWNlIHRoZSByZXF1ZXN0IGlzIHN0YXJ0ZWQgb24gKi8KLQlzdHJ1Y3QgY2N3MSAqY3BhZGRyOwkJLyogYWRkcmVzcyBvZiBjaGFubmVsIHByb2dyYW0gKi8KKwl2b2lkICpjcGFkZHI7CQkJLyogYWRkcmVzcyBvZiBjY3cgb3IgdGN3ICovCisJdW5zaWduZWQgY2hhciBjcG1vZGU7CQkvKiAwID0gY21kIG1vZGUsIDEgPSBpdGN3ICovCiAJY2hhciBzdGF0dXM7CQkJLyogc3RhdHVzIG9mIHRoaXMgcmVxdWVzdCAqLwogCXNob3J0IHJldHJpZXM7CQkJLyogQSByZXRyeSBjb3VudGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsgICAgICAgIAkvKiBmbGFncyBvZiB0aGlzIHJlcXVlc3QgKi8KQEAgLTI4MCw2ICsyODQsOCBAQAogCWRhc2RfZXJwX2ZuX3QoKmVycF9wb3N0YWN0aW9uKSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKTsKIAl2b2lkICgqZHVtcF9zZW5zZSkgKHN0cnVjdCBkYXNkX2RldmljZSAqLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICosCiAJCQkgICAgc3RydWN0IGlyYiAqKTsKKwl2b2lkICgqZHVtcF9zZW5zZV9kYmYpIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgc3RydWN0IGRhc2RfY2N3X3JlcSAqLAorCQkJICAgIHN0cnVjdCBpcmIgKiwgY2hhciAqKTsKIAogCXZvaWQgKCpoYW5kbGVfdW5zb2xpY2l0ZWRfaW50ZXJydXB0KSAoc3RydWN0IGRhc2RfZGV2aWNlICosCiAJCQkJCSAgICAgIHN0cnVjdCBpcmIgKik7CkBAIC0zNzgsNyArMzg0LDcgQEAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCWF0b21pY190IG9wZW5fY291bnQ7CiAKLQl1bnNpZ25lZCBsb25nIGJsb2NrczsJICAgLyogc2l6ZSBvZiB2b2x1bWUgaW4gYmxvY2tzICovCisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrczsgLyogc2l6ZSBvZiB2b2x1bWUgaW4gYmxvY2tzICovCiAJdW5zaWduZWQgaW50IGJwX2Jsb2NrOwkgICAvKiBieXRlcyBwZXIgYmxvY2sgKi8KIAl1bnNpZ25lZCBpbnQgczJiX3NoaWZ0OwkgICAvKiBsb2cyIChicF9ibG9jay81MTIpICovCiAKQEAgLTU3MywxMiArNTc5LDE0IEBACiB2b2lkIGRhc2RfZ2VuZXJpY19oYW5kbGVfc3RhdGVfY2hhbmdlKHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIAogaW50IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgY2hhciAqLCB2b2lkICoqLCBpbnQpOworY2hhciAqZGFzZF9nZXRfc2Vuc2Uoc3RydWN0IGlyYiAqKTsKIAogLyogZXh0ZXJuYWxzIGluIGRhc2RfZGV2bWFwLmMgKi8KIGV4dGVybiBpbnQgZGFzZF9tYXhfZGV2aW5kZXg7CiBleHRlcm4gaW50IGRhc2RfcHJvYmVvbmx5OwogZXh0ZXJuIGludCBkYXNkX2F1dG9kZXRlY3Q7CiBleHRlcm4gaW50IGRhc2Rfbm9wYXY7CitleHRlcm4gaW50IGRhc2Rfbm9mY3g7CiAKIGludCBkYXNkX2Rldm1hcF9pbml0KHZvaWQpOwogdm9pZCBkYXNkX2Rldm1hcF9leGl0KHZvaWQpOwpAQCAtNjIzLDYgKzYzMSw3IEBACiAJCQkJCSAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiB2b2lkIGRhc2RfZnJlZV9lcnBfcmVxdWVzdChzdHJ1Y3QgZGFzZF9jY3dfcmVxICosIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIHZvaWQgZGFzZF9sb2dfc2Vuc2Uoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCBzdHJ1Y3QgaXJiICopOwordm9pZCBkYXNkX2xvZ19zZW5zZV9kYmYoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLCBzdHJ1Y3QgaXJiICppcmIpOwogCiAvKiBleHRlcm5hbHMgaW4gZGFzZF8zOTkwX2VycC5jICovCiBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkXzM5OTBfZXJwX2FjdGlvbihzdHJ1Y3QgZGFzZF9jY3dfcmVxICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKaW5kZXggYjgyZDgxNi4uNGNlM2Y3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCkBAIC05LDYgKzksOSBAQAogICoKICAqIGkvbyBjb250cm9scyBmb3IgdGhlIGRhc2QgZHJpdmVyLgogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC05NCw3ICs5Nyw4IEBACiAJaWYgKCFjYXBhYmxlIChDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBiYXNlLCAiJXMiLCAiUXVpZXNjZSBJTyBvbiBkZXZpY2UiKTsKKwlkZXZfaW5mbygmYmFzZS0+Y2Rldi0+ZGV2LCAiVGhlIERBU0QgaGFzIGJlZW4gcHV0IGluIHRoZSBxdWllc2NlICIKKwkJICJzdGF0ZVxuIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CiAJYmFzZS0+c3RvcHBlZCB8PSBEQVNEX1NUT1BQRURfUVVJRVNDRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwpAQCAtMTAzLDcgKzEwNyw3IEBACiAKIAogLyoKLSAqIFF1aWVzY2UgZGV2aWNlLgorICogUmVzdW1lIGRldmljZS4KICAqLwogc3RhdGljIGludCBkYXNkX2lvY3RsX3Jlc3VtZShzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2spCiB7CkBAIC0xMTQsNyArMTE4LDggQEAKIAlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGJhc2UsICIlcyIsICJyZXN1bWUgSU8gb24gZGV2aWNlIik7CisJZGV2X2luZm8oJmJhc2UtPmNkZXYtPmRldiwgIkkvTyBvcGVyYXRpb25zIGhhdmUgYmVlbiByZXN1bWVkICIKKwkJICJvbiB0aGUgREFTRFxuIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CiAJYmFzZS0+c3RvcHBlZCAmPSB+REFTRF9TVE9QUEVEX1FVSUVTQ0U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKQEAgLTE0MCwxMyArMTQ1LDEzIEBACiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAoYmFzZS0+c3RhdGUgIT0gREFTRF9TVEFURV9CQVNJQykgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGJhc2UsICIlcyIsCi0JCQkgICAgImRhc2RfZm9ybWF0OiBkZXZpY2UgaXMgbm90IGRpc2FibGVkISAiKTsKKwkJZGV2X3dhcm4oJmJhc2UtPmNkZXYtPmRldiwKKwkJCSAiVGhlIERBU0QgY2Fubm90IGJlIGZvcm1hdHRlZCB3aGlsZSBpdCBpcyBlbmFibGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlEQkZfREVWX0VWRU5UKERCRl9OT1RJQ0UsIGJhc2UsCi0JCSAgICAgICJmb3JtYXR0aW5nIHVuaXRzICVkIHRvICVkICglZCBCIGJsb2NrcykgZmxhZ3MgJWQiLAorCQkgICAgICAiZm9ybWF0dGluZyB1bml0cyAldSB0byAldSAoJXUgQiBibG9ja3MpIGZsYWdzICV1IiwKIAkJICAgICAgZmRhdGEtPnN0YXJ0X3VuaXQsCiAJCSAgICAgIGZkYXRhLT5zdG9wX3VuaXQsIGZkYXRhLT5ibGtzaXplLCBmZGF0YS0+aW50ZW5zaXR5KTsKIApAQCAtMTY5LDEwICsxNzQsOSBAQAogCQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBjcXItPm1lbWRldik7CiAJCWlmIChyYykgewogCQkJaWYgKHJjICE9IC1FUkVTVEFSVFNZUykKLQkJCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgYmFzZSwKLQkJCQkJICAgICIgRm9ybWF0dGluZyBvZiB1bml0ICVkIGZhaWxlZCAiCi0JCQkJCSAgICAid2l0aCByYyA9ICVkIiwKLQkJCQkJICAgIGZkYXRhLT5zdGFydF91bml0LCByYyk7CisJCQkJZGV2X2VycigmYmFzZS0+Y2Rldi0+ZGV2LAorCQkJCQkiRm9ybWF0dGluZyB1bml0ICVkIGZhaWxlZCB3aXRoICIKKwkJCQkJInJjPSVkXG4iLCBmZGF0YS0+c3RhcnRfdW5pdCwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJCWZkYXRhLT5zdGFydF91bml0Kys7CkBAIC0xOTksOCArMjAzLDkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZkYXRhLCBhcmdwLCBzaXplb2Yoc3RydWN0IGZvcm1hdF9kYXRhX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBibG9jay0+YmFzZSwgIiVzIiwKLQkJCSAgICAiQ2Fubm90IGxvdy1sZXZlbCBmb3JtYXQgYSBwYXJ0aXRpb24iKTsKKwkJZGV2X3dhcm4oJmJsb2NrLT5iYXNlLT5jZGV2LT5kZXYsCisJCQkgIlRoZSBzcGVjaWZpZWQgREFTRCBpcyBhIHBhcnRpdGlvbiBhbmQgY2Fubm90IGJlICIKKwkJCSAiZm9ybWF0dGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBkYXNkX2Zvcm1hdChibG9jaywgJmZkYXRhKTsKQEAgLTM2NSw5ICszNzAsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludAotZGFzZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCi0JICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50CitkYXNkX2RvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00MjAsMyArNDI1LDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KKworaW50IGRhc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmM7CisKKwlsb2NrX2tlcm5lbCgpOworCXJjID0gZGFzZF9kb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwppbmRleCBiZjZmZDM0Li4yMDgwYmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCkBAIC0xMSw2ICsxMSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMTEyLDcgKzExNCw3IEBACiAJCQlzZXFfcHJpbnRmKG0sICJuL2YJICIpOwogCQllbHNlCiAJCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgImF0IGJsb2Nrc2l6ZTogJWQsICVsZCBibG9ja3MsICVsZCBNQiIsCisJCQkJICAgImF0IGJsb2Nrc2l6ZTogJWQsICVsbGQgYmxvY2tzLCAlbGxkIE1CIiwKIAkJCQkgICBibG9jay0+YnBfYmxvY2ssIGJsb2NrLT5ibG9ja3MsCiAJCQkJICAgKChibG9jay0+YnBfYmxvY2sgPj4gOSkgKgogCQkJCSAgICBibG9jay0+YmxvY2tzKSA+PiAxMSk7CkBAIC0yNjcsNyArMjY5LDcgQEAKIAlidWZmZXIgPSBkYXNkX2dldF91c2VyX3N0cmluZyh1c2VyX2J1ZiwgdXNlcl9sZW4pOwogCWlmIChJU19FUlIoYnVmZmVyKSkKIAkJcmV0dXJuIFBUUl9FUlIoYnVmZmVyKTsKLQlNRVNTQUdFX0xPRyhLRVJOX0lORk8sICIvcHJvYy9kYXNkL3N0YXRpY3RpY3M6ICclcyciLCBidWZmZXIpOworCURCRl9FVkVOVChEQkZfREVCVUcsICIvcHJvYy9kYXNkL3N0YXRpY3RpY3M6ICclcydcbiIsIGJ1ZmZlcik7CiAKIAkvKiBjaGVjayBmb3IgdmFsaWQgdmVyYnMgKi8KIAlmb3IgKHN0ciA9IGJ1ZmZlcjsgaXNzcGFjZSgqc3RyKTsgc3RyKyspOwpAQCAtMjc3LDMzICsyNzksMzMgQEAKIAkJaWYgKHN0cmNtcChzdHIsICJvbiIpID09IDApIHsKIAkJCS8qIHN3aXRjaCBvbiBzdGF0aXN0aWNzIHByb2ZpbGluZyAqLwogCQkJZGFzZF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX09OOwotCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJTdGF0aXN0aWNzIHN3aXRjaGVkIG9uIik7CisJCQlwcl9pbmZvKCJUaGUgc3RhdGlzdGljcyBmZWF0dXJlIGhhcyBiZWVuIHN3aXRjaGVkICIKKwkJCQkib25cbiIpOwogCQl9IGVsc2UgaWYgKHN0cmNtcChzdHIsICJvZmYiKSA9PSAwKSB7CiAJCQkvKiBzd2l0Y2ggb2ZmIGFuZCByZXNldCBzdGF0aXN0aWNzIHByb2ZpbGluZyAqLwogCQkJbWVtc2V0KCZkYXNkX2dsb2JhbF9wcm9maWxlLAogCQkJICAgICAgIDAsIHNpemVvZiAoc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvX3QpKTsKIAkJCWRhc2RfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9PRkY7Ci0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3Mgc3dpdGNoZWQgb2ZmIik7CisJCQlwcl9pbmZvKCJUaGUgc3RhdGlzdGljcyBmZWF0dXJlIGhhcyBiZWVuIHN3aXRjaGVkICIKKwkJCQkib2ZmXG4iKTsKIAkJfSBlbHNlCiAJCQlnb3RvIG91dF9lcnJvcjsKIAl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAicmVzZXQiLCA1KSA9PSAwKSB7CiAJCS8qIHJlc2V0IHRoZSBzdGF0aXN0aWNzICovCiAJCW1lbXNldCgmZGFzZF9nbG9iYWxfcHJvZmlsZSwgMCwKIAkJICAgICAgIHNpemVvZiAoc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvX3QpKTsKLQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJTdGF0aXN0aWNzIHJlc2V0Iik7CisJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGhhdmUgYmVlbiByZXNldFxuIik7CiAJfSBlbHNlCiAJCWdvdG8gb3V0X2Vycm9yOwogCWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHVzZXJfbGVuOwogb3V0X2Vycm9yOgotCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLAotCQkiL3Byb2MvZGFzZC9zdGF0aXN0aWNzOiBvbmx5ICdzZXQgb24nLCAnc2V0IG9mZicgIgotCQkiYW5kICdyZXNldCcgYXJlIHN1cHBvcnRlZCB2ZXJicyIpOworCXByX3dhcm5pbmcoIiVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgL3Byb2MvZGFzZC9zdGF0aXN0aWNzXG4iLAorCQlzdHIpOwogCWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIC1FSU5WQUw7CiAjZWxzZQotCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLAotCQkiL3Byb2MvZGFzZC9zdGF0aXN0aWNzOiBpcyBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsIik7CisJcHJfd2FybmluZygiL3Byb2MvZGFzZC9zdGF0aXN0aWNzOiBpcyBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKIAlyZXR1cm4gdXNlcl9sZW47CiAjZW5kaWYJCQkJLyogQ09ORklHX0RBU0RfUFJPRklMRSAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCmluZGV4IGQwZDU2NWEuLmMwNzgwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKQEAgLTMyNCw4ICszMjQsNiBAQAogI2VuZGlmCiAKIC8qIGEgZnVuY3Rpb24gZm9yIGR1bXBpbmcgZGV2aWNlIHNlbnNlIGluZm8gKi8KLWV4dGVybiB2b2lkIHRhcGVfZHVtcF9zZW5zZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKiwgc3RydWN0IHRhcGVfcmVxdWVzdCAqLAotCQkJICAgIHN0cnVjdCBpcmIgKik7CiBleHRlcm4gdm9pZCB0YXBlX2R1bXBfc2Vuc2VfZGJmKHN0cnVjdCB0YXBlX2RldmljZSAqLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICosCiAJCQkJc3RydWN0IGlyYiAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwppbmRleCAyMmNhMzQzLi44MDdkZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwpAQCAtOCw2ICs4LDggQEAKICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CkBAIC0xOCw4ICsyMCw2IEBACiAjaW5jbHVkZSAidGFwZS5oIgogI2luY2x1ZGUgInRhcGVfc3RkLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV8zNFhYOiAiCi0KIC8qCiAgKiBQb2ludGVyIHRvIGRlYnVnIGFyZWEuCiAgKi8KQEAgLTIwMyw4ICsyMDMsNyBAQAogCQl0YXBlXzM0eHhfc2NoZWR1bGVfd29yayhkZXZpY2UsIFRPX01TRU4pOwogCX0gZWxzZSB7CiAJCURCRl9FVkVOVCgzLCAidW5zb2wuaXJxISBkZXYgZW5kOiAlMDh4XG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCJVbnNvbGljaXRlZCBJUlEgKERldmljZSBFbmQpIGNhdWdodC5cbiIpOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCQl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiKTsKIAl9CiAJcmV0dXJuIFRBUEVfSU9fU1VDQ0VTUzsKIH0KQEAgLTIyNiw5ICsyMjUsNyBAQAogCQl0YXBlX3N0ZF9yZWFkX2JhY2t3YXJkKGRldmljZSwgcmVxdWVzdCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCX0KLQlpZiAocmVxdWVzdC0+b3AgIT0gVE9fUkJBKQotCQlQUklOVF9FUlIoInJlYWRfb3Bwb3NpdGUgY2FsbGVkIHdpdGggc3RhdGU6JXNcbiIsCi0JCQkgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOworCiAJLyoKIAkgKiBXZSB0cmllZCB0byByZWFkIGZvcndhcmQgYW5kIGJhY2t3YXJkLCBidXQgaGF0IG5vCiAJICogc3VjY2VzcyAtPiBmYWlsZWQuCkBAIC0yNDEsMTMgKzIzOCw5IEBACiAJCSAgc3RydWN0IGlyYiAqaXJiLCBpbnQgbm8pCiB7CiAJaWYgKHJlcXVlc3QtPm9wICE9IFRPX0FTU0lHTikgewotCQlQUklOVF9XQVJOKCJBbiB1bmV4cGVjdGVkIGNvbmRpdGlvbiAjJWQgd2FzIGNhdWdodCBpbiAiCi0JCQkgICAidGFwZSBlcnJvciByZWNvdmVyeS5cbiIsIG5vKTsKLQkJUFJJTlRfV0FSTigiUGxlYXNlIHJlcG9ydCB0aGlzIGluY2lkZW50LlxuIik7Ci0JCWlmIChyZXF1ZXN0KQotCQkJUFJJTlRfV0FSTigiT3BlcmF0aW9uIG9mIHRhcGU6JXNcbiIsCi0JCQkJICAgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0JCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gdW5leHBlY3RlZCBjb25kaXRpb24gJWQgIgorCQkJIm9jY3VycmVkIGluIHRhcGUgZXJyb3IgcmVjb3ZlcnlcbiIsIG5vKTsKKwkJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIHJlcXVlc3QsIGlyYik7CiAJfQogCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIH0KQEAgLTI2MSw5ICsyNTQsOCBAQAogCQkgICAgICBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJaWYgKGlyYi0+ZWN3WzNdID09IDB4NDApIHsKLQkJUFJJTlRfV0FSTiAoIkRhdGEgb3ZlcnJ1biBlcnJvciBiZXR3ZWVuIGNvbnRyb2wtdW5pdCAiCi0JCQkgICAgImFuZCBkcml2ZS4gVXNlIGEgZmFzdGVyIGNoYW5uZWwgY29ubmVjdGlvbiwgIgotCQkJICAgICJpZiBwb3NzaWJsZSEgXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgZGF0YSBvdmVycnVuIG9jY3VycmVkIGJldHdlZW4iCisJCQkiIHRoZSBjb250cm9sIHVuaXQgYW5kIHRhcGUgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAl9CiAJcmV0dXJuIHRhcGVfMzR4eF9lcnBfYnVnKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtMSk7CkBAIC0yODAsNyArMjcyLDggQEAKIAkJLyoKIAkJICogY3UgZGV0ZWN0ZWQgaW5jb3JyZWN0IGJsb2NrLWlkIHNlcXVlbmNlIG9uIHRhcGUuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJJbGxlZ2FsIGJsb2NrLWlkIHNlcXVlbmNlIGZvdW5kIVxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgYmxvY2sgSUQgc2VxdWVuY2Ugb24gdGhlICIKKwkJCSJ0YXBlIGlzIGluY29ycmVjdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAl9CiAJLyoKQEAgLTM5Myw4ICszODYsNiBAQAogCQkJLyogV3JpdGluZyBhdCBwaHlzaWNhbCBlbmQgb2Ygdm9sdW1lICovCiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT1NQQyk7CiAJCWRlZmF1bHQ6Ci0JCQlQUklOVF9FUlIoIkludmFsaWQgb3AgaW4gJXM6JWlcbiIsCi0JCQkJICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIDApOwogCQl9CiAJfQpAQCAtNDIwLDcgKzQxMSw4IEBACiAJCQkJCQkJIGlyYiwgLTQpOwogCiAJCQkvKiBkYXRhIGNoZWNrIGlzIHBlcm1hbmVudCwgQ1UgcmVjb3ZlcnkgaGFzIGZhaWxlZCAqLwotCQkJUFJJTlRfV0FSTigiUGVybWFuZW50IHJlYWQgZXJyb3JcbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgcmVhZCBlcnJvciBvY2N1cnJlZCAiCisJCQkJInRoYXQgY2Fubm90IGJlIHJlY292ZXJlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCWNhc2UgMHgyNToKIAkJCS8vIGEgd3JpdGUgZGF0YSBjaGVjayBvY2N1cnJlZApAQCAtNDMzLDIyICs0MjUsMjYgQEAKIAkJCQkJCQkgaXJiLCAtNSk7CiAKIAkJCS8vIGRhdGEgY2hlY2sgaXMgcGVybWFuZW50LCBjdS1yZWNvdmVyeSBoYXMgZmFpbGVkCi0JCQlQUklOVF9XQVJOKCJQZXJtYW5lbnQgd3JpdGUgZXJyb3JcbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgd3JpdGUgZXJyb3Igb24gdGhlICIKKwkJCQkidGFwZSBjYW5ub3QgYmUgcmVjb3ZlcmVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJY2FzZSAweDI2OgogCQkJLyogRGF0YSBDaGVjayAocmVhZCBvcHBvc2l0ZSkgb2NjdXJyZWQuICovCiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZWFkX29wcG9zaXRlKGRldmljZSwgcmVxdWVzdCk7CiAJCWNhc2UgMHgyODoKIAkJCS8qIElELU1hcmsgYXQgdGFwZSBzdGFydCBjb3VsZG4ndCBiZSB3cml0dGVuICovCi0JCQlQUklOVF9XQVJOKCJJRC1NYXJrIGNvdWxkIG5vdCBiZSB3cml0dGVuLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiV3JpdGluZyB0aGUgSUQtbWFyayAiCisJCQkJImZhaWxlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCWNhc2UgMHgzMToKIAkJCS8qIFRhcGUgdm9pZC4gVHJpZWQgdG8gcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZS4gKi8KLQkJCVBSSU5UX1dBUk4oIlJlYWQgYmV5b25kIGVuZCBvZiByZWNvcmRlZCBhcmVhLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiUmVhZGluZyB0aGUgdGFwZSBiZXlvbmQiCisJCQkJIiB0aGUgZW5kIG9mIHRoZSByZWNvcmRlZCBhcmVhIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT1NQQyk7CiAJCWNhc2UgMHg0MToKIAkJCS8qIFJlY29yZCBzZXF1ZW5jZSBlcnJvci4gKi8KLQkJCVBSSU5UX1dBUk4oIkludmFsaWQgYmxvY2staWQgc2VxdWVuY2UgZm91bmQuXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBjb250YWlucyBhbiAiCisJCQkJImluY29ycmVjdCBibG9jayBJRCBzZXF1ZW5jZVxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCWRlZmF1bHQ6CiAJCQkvKiBhbGwgZGF0YSBjaGVja3MgZm9yIDM0ODAgc2hvdWxkIHJlc3VsdCBpbiBvbmUgb2YKQEAgLTQ3MCwxNiArNDY2LDEyIEBACiAJc3dpdGNoIChzZW5zZVszXSkgewogCWNhc2UgMHgwMDoKIAkJLyogVW5pdCBjaGVjayB3aXRoIGVycGEgY29kZSAwLiBSZXBvcnQgYW5kIGlnbm9yZS4gKi8KLQkJUFJJTlRfV0FSTigiTm9uLWVycm9yIHNlbnNlIHdhcyBmb3VuZC4gIgotCQkJICAgIlVuaXQtY2hlY2sgd2lsbCBiZSBpZ25vcmVkLlxuIik7CiAJCXJldHVybiBUQVBFX0lPX1NVQ0NFU1M7CiAJY2FzZSAweDIxOgogCQkvKgogCQkgKiBEYXRhIHN0cmVhbWluZyBub3Qgb3BlcmF0aW9uYWwuIENVIHdpbGwgc3dpdGNoIHRvCiAJCSAqIGludGVybG9jayBtb2RlLiBSZWlzc3VlIHRoZSBjb21tYW5kLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiRGF0YSBzdHJlYW1pbmcgbm90IG9wZXJhdGlvbmFsLiAiCi0JCQkgICAiU3dpdGNoaW5nIHRvIGludGVybG9jay1tb2RlLlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHgyMjoKIAkJLyoKQEAgLTQ4NywxMSArNDc5LDggQEAKIAkJICogZXJyb3Igb24gdGhlIGxvd2VyIGludGVyZmFjZSwgaW50ZXJuYWwgcGF0aCBub3QgdXNhYmxlLAogCQkgKiBvciBlcnJvciBkdXJpbmcgY2FydHJpZGdlIGxvYWQuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJBIHBhdGggZXF1aXBtZW50IGNoZWNrIG9jY3VycmVkLiBPbmUgb2YgdGhlICIKLQkJCSAgICJmb2xsb3dpbmcgY29uZGl0aW9ucyBvY2N1cnJlZDpcbiIpOwotCQlQUklOVF9XQVJOKCJkcml2ZSBhZGFwdGVyIGVycm9yLCBidWZmZXIgZXJyb3Igb24gdGhlIGxvd2VyICIKLQkJCSAgICJpbnRlcmZhY2UsIGludGVybmFsIHBhdGggbm90IHVzYWJsZSwgZXJyb3IgIgotCQkJICAgImR1cmluZyBjYXJ0cmlkZ2UgbG9hZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBwYXRoIGVxdWlwbWVudCBjaGVjayBvY2N1cnJlZCIKKwkJCSIgZm9yIHRoZSB0YXBlIGRldmljZVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MjQ6CiAJCS8qCkBAIC01MTQsNyArNTAzLDYgQEAKIAkJICogYnV0IHRoZSBoYXJkd2FyZSBpc24ndCBjYXBhYmxlIHRvIGRvIGlkcmMsIG9yIGEgcGVyZm9ybQogCQkgKiBzdWJzeXN0ZW0gZnVuYyBpcyBpc3N1ZWQgYW5kIHRoZSBDVSBpcyBub3Qgb24tbGluZS4KIAkJICovCi0JCVBSSU5UX1dBUk4gKCJGdW5jdGlvbiBpbmNvbXBhdGlibGUuIFRyeSB0byBzd2l0Y2ggb2ZmIGlkcmNcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDJhOgogCQkvKgpAQCAtNTUyLDIzICs1NDAsMjYgQEAKIAkJICogcmVhZGluZyB0aGUgZm9ybWF0IGlkIG1hcmsgb3IgdGhhdCB0aGF0IGZvcm1hdCBzcGVjaWZpZWQKIAkJICogaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmUuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJEcml2ZSBub3QgY2FwYWJsZSBwcm9jZXNzaW5nIHRoZSB0YXBlIGZvcm1hdCFcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBjYW5ub3QgcHJvY2VzcyAiCisJCQkidGhlIHRhcGUgZm9ybWF0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAJY2FzZSAweDMwOgogCQkvKiBUaGUgbWVkaXVtIGlzIHdyaXRlIHByb3RlY3RlZC4gKi8KLQkJUFJJTlRfV0FSTigiTWVkaXVtIGlzIHdyaXRlIHByb3RlY3RlZCFcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgbWVkaXVtIGlzIHdyaXRlLSIKKwkJCSJwcm90ZWN0ZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVBQ0NFUyk7CiAJY2FzZSAweDMyOgogCQkvLyBUZW5zaW9uIGxvc3MuIFdlIGNhbm5vdCByZWNvdmVyIHRoaXMsIGl0J3MgYW4gSS9PIGVycm9yLgotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgbG9zdCB0YXBlIHRlbnNpb24uXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGRvZXMgbm90IGhhdmUgdGhlICIKKwkJCSJyZXF1aXJlZCB0YXBlIHRlbnNpb25cbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDMzOgogCQkvKgogCQkgKiBMb2FkIEZhaWx1cmUuIFRoZSBjYXJ0cmlkZ2Ugd2FzIG5vdCBpbnNlcnRlZCBjb3JyZWN0bHkgb3IKIAkJICogdGhlIHRhcGUgaXMgbm90IHRocmVhZGVkIGNvcnJlY3RseS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkNhcnRyaWRnZSBsb2FkIGZhaWx1cmUuIFJlbG9hZCB0aGUgY2FydHJpZGdlICIKLQkJCSAgICJhbmQgdHJ5IGFnYWluLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGZhaWxlZCB0byBsb2FkIgorCQkJIiB0aGUgY2FydHJpZGdlXG4iKTsKIAkJdGFwZV8zNHh4X2RlbGV0ZV9zYmlkX2Zyb20oZGV2aWNlLCAwKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzNDoKQEAgLTU3Niw4ICs1NjcsOCBAQAogCQkgKiBVbmxvYWQgZmFpbHVyZS4gVGhlIGRyaXZlIGNhbm5vdCBtYWludGFpbiB0YXBlIHRlbnNpb24KIAkJICogYW5kIGNvbnRyb2wgdGFwZSBtb3ZlbWVudCBkdXJpbmcgYW4gdW5sb2FkIG9wZXJhdGlvbi4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkZhaWx1cmUgZHVyaW5nIGNhcnRyaWRnZSB1bmxvYWQuICIKLQkJCSAgICJQbGVhc2UgdHJ5IG1hbnVhbGx5LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBdXRvbWF0aWMgdW5sb2FkaW5nIG9mIHRoZSB0YXBlIgorCQkJIiBjYXJ0cmlkZ2UgZmFpbGVkXG4iKTsKIAkJaWYgKHJlcXVlc3QtPm9wID09IFRPX1JVTikKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfYnVnKGRldmljZSwgcmVxdWVzdCwgaXJiLCBzZW5zZVszXSk7CkBAIC01ODksOCArNTgwLDggQEAKIAkJICogLSB0aGUgY2FydHJpZGdlIGxvYWRlciBkb2VzIG5vdCByZXNwb25kIGNvcnJlY3RseQogCQkgKiAtIGEgZmFpbHVyZSBvY2N1cnMgZHVyaW5nIGFuIGluZGV4LCBsb2FkLCBvciB1bmxvYWQgY3ljbGUKIAkJICovCi0JCVBSSU5UX1dBUk4oIkVxdWlwbWVudCBjaGVjayEgUGxlYXNlIGNoZWNrIHRoZSBkcml2ZSBhbmQgIgotCQkJICAgInRoZSBjYXJ0cmlkZ2UgbG9hZGVyLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcXVpcG1lbnQgY2hlY2sgaGFzIG9jY3VycmVkIgorCQkJIiBvbiB0aGUgdGFwZSB1bml0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzNjoKIAkJaWYgKGRldmljZS0+Y2Rldi0+aWQuZHJpdmVyX2luZm8gPT0gdGFwZV8zNDkwKQpAQCAtNjAzLDcgKzU5NCw4IEBACiAJCSAqIFRhcGUgbGVuZ3RoIGVycm9yLiBUaGUgdGFwZSBpcyBzaG9ydGVyIHRoYW4gcmVwb3J0ZWQgaW4KIAkJICogdGhlIGJlZ2lubmluZy1vZi10YXBlIGRhdGEuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUYXBlIGxlbmd0aCBlcnJvci5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgaW5mb3JtYXRpb24gc3RhdGVzIGFuIgorCQkJIiBpbmNvcnJlY3QgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzODoKIAkJLyoKQEAgLTYyMCwxMiArNjEyLDEyIEBACiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4M2E6CiAJCS8qIERyaXZlIHN3aXRjaGVkIHRvIG5vdCByZWFkeS4gKi8KLQkJUFJJTlRfV0FSTigiRHJpdmUgbm90IHJlYWR5LiBUdXJuIHRoZSByZWFkeS9ub3QgcmVhZHkgc3dpdGNoICIKLQkJCSAgICJ0byByZWFkeSBwb3NpdGlvbiBhbmQgdHJ5IGFnYWluLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4M2I6CiAJCS8qIE1hbnVhbCByZXdpbmQgb3IgdW5sb2FkLiBUaGlzIGNhdXNlcyBhbiBJL08gZXJyb3IuICovCi0JCVBSSU5UX1dBUk4oIk1lZGl1bSB3YXMgcmV3b3VuZCBvciB1bmxvYWRlZCBtYW51YWxseS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgbWVkaXVtIGhhcyBiZWVuICIKKwkJCSJyZXdvdW5kIG9yIHVubG9hZGVkIG1hbnVhbGx5XG4iKTsKIAkJdGFwZV8zNHh4X2RlbGV0ZV9zYmlkX2Zyb20oZGV2aWNlLCAwKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0MjoKQEAgLTYzMyw3ICs2MjUsOCBAQAogCQkgKiBEZWdyYWRlZCBtb2RlLiBBIGNvbmRpdGlvbiB0aGF0IGNhbiBjYXVzZSBkZWdyYWRlZAogCQkgKiBwZXJmb3JtYW5jZSBpcyBkZXRlY3RlZC4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlN1YnN5c3RlbSBpcyBydW5uaW5nIGluIGRlZ3JhZGVkIG1vZGUuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHN1YnN5c3RlbSBpcyBydW5uaW5nICIKKwkJCSJpbiBkZWdyYWRlZCBtb2RlXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJY2FzZSAweDQzOgogCQkvKiBEcml2ZSBub3QgcmVhZHkuICovCkBAIC02NTIsNyArNjQ1LDYgQEAKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGlzIG5vdCByZWFkeS5cbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT01FRElVTSk7CiAJY2FzZSAweDQ0OgogCQkvKiBMb2NhdGUgQmxvY2sgdW5zdWNjZXNzZnVsLiAqLwpAQCAtNjYzLDcgKzY1NSw4IEBACiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDU6CiAJCS8qIFRoZSBkcml2ZSBpcyBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBjaGFubmVsIHBhdGguICovCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBpcyBhc3NpZ25lZCBlbHNld2hlcmUuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaXMgYWxyZWFkeSAiCisJCQkiYXNzaWduZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ2OgogCQkvKgpAQCAtNjcxLDExICs2NjQsMTIgQEAKIAkJICogdGhlIHBvd2VyIHN1cHBseSBtYXkgYmUgc3dpdGNoZWQgb2ZmIG9yCiAJCSAqIHRoZSBkcml2ZSBhZGRyZXNzIG1heSBub3QgYmUgc2V0IGNvcnJlY3RseS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBpcyBub3Qgb24tbGluZS4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaXMgbm90IG9ubGluZVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDc6CiAJCS8qIFZvbHVtZSBmZW5jZWQuIENVIHJlcG9ydHMgdm9sdW1lIGludGVncml0eSBpcyBsb3N0LiAqLwotCQlQUklOVF9XQVJOKCJWb2x1bWUgZmVuY2VkLiBUaGUgdm9sdW1lIGludGVncml0eSBpcyBsb3N0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgY29udHJvbCB1bml0IGhhcyBmZW5jZWQgIgorCQkJImFjY2VzcyB0byB0aGUgdGFwZSB2b2x1bWVcbiIpOwogCQl0YXBlXzM0eHhfZGVsZXRlX3NiaWRfZnJvbShkZXZpY2UsIDApOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ4OgpAQCAtNjgzLDIwICs2NzcsMjEgQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJY2FzZSAweDQ5OgogCQkvKiBCdXMgb3V0IGNoZWNrLiBBIHBhcml0eSBjaGVjayBlcnJvciBvbiB0aGUgYnVzIHdhcyBmb3VuZC4gKi8KLQkJUFJJTlRfV0FSTigiQnVzIG91dCBjaGVjay4gQSBkYXRhIHRyYW5zZmVyIG92ZXIgdGhlIGJ1cyAiCi0JCQkgICAiaGFzIGJlZW4gY29ycnVwdGVkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHBhcml0eSBlcnJvciBvY2N1cnJlZCBvbiB0aGUgIgorCQkJInRhcGUgYnVzXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0YToKIAkJLyogQ29udHJvbCB1bml0IGVycCBmYWlsZWQuICovCi0JCVBSSU5UX1dBUk4oIlRoZSBjb250cm9sIHVuaXQgSS9PIGVycm9yIHJlY292ZXJ5IGZhaWxlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSS9PIGVycm9yIHJlY292ZXJ5IGZhaWxlZCBvbiAiCisJCQkidGhlIHRhcGUgY29udHJvbCB1bml0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0YjoKIAkJLyoKIAkJICogQ1UgYW5kIGRyaXZlIGluY29tcGF0aWJsZS4gVGhlIGRyaXZlIHJlcXVlc3RzIG1pY3JvLXByb2dyYW0KIAkJICogcGF0Y2hlcywgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb24gdGhlIENVLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIG5lZWRzIG1pY3JvcHJvZ3JhbSBwYXRjaGVzIGZyb20gdGhlICIKLQkJCSAgICJjb250cm9sIHVuaXQsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IHJlcXVpcmVzIGEgIgorCQkJImZpcm13YXJlIHVwZGF0ZVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGM6CiAJCS8qCkBAIC03MjEsOCArNzE2LDggQEAKIAkJCSAqIHRoZSBibG9jayB0byBiZSB3cml0dGVuIGlzIGxhcmdlciB0aGFuIGFsbG93ZWQgZm9yCiAJCQkgKiBidWZmZXJlZCBtb2RlLgogCQkJICovCi0JCQlQUklOVF9XQVJOKCJNYXhpbXVtIGJsb2NrIHNpemUgZm9yIGJ1ZmZlcmVkICIKLQkJCQkgICAibW9kZSBleGNlZWRlZC5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBtYXhpbXVtIGJsb2NrIHNpemUiCisJCQkJIiBmb3IgYnVmZmVyZWQgbW9kZSBpcyBleGNlZWRlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT0JVRlMpOwogCQl9CiAJCS8qIFRoaXMgZXJwYSBpcyByZXNlcnZlZCBmb3IgMzQ4MC4gKi8KQEAgLTc1OSwyMiArNzU0LDIwIEBACiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg1NToKIAkJLyogQ2hhbm5lbCBpbnRlcmZhY2UgcmVjb3ZlcnkgKHBlcm1hbmVudCkuICovCi0JCVBSSU5UX1dBUk4oIkEgcGVybWFuZW50IGNoYW5uZWwgaW50ZXJmYWNlIGVycm9yIG9jY3VycmVkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGNoYW5uZWwgaW50ZXJmYWNlIGVycm9yIGNhbm5vdCBiZSIKKwkJCSIgcmVjb3ZlcmVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1NjoKIAkJLyogQ2hhbm5lbCBwcm90b2NvbCBlcnJvci4gKi8KLQkJUFJJTlRfV0FSTigiQSBjaGFubmVsIHByb3RvY29sIGVycm9yIG9jY3VycmVkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGNoYW5uZWwgcHJvdG9jb2wgZXJyb3IgIgorCQkJIm9jY3VycmVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1NzoKIAkJaWYgKGRldmljZS0+Y2Rldi0+aWQuZHJpdmVyX2luZm8gPT0gdGFwZV8zNDgwKSB7CiAJCQkvKiBBdHRlbnRpb24gaW50ZXJjZXB0LiAqLwotCQkJUFJJTlRfV0FSTigiQW4gYXR0ZW50aW9uIGludGVyY2VwdCBvY2N1cnJlZCwgIgotCQkJCSAgICJ3aGljaCB3aWxsIGJlIHJlY292ZXJlZC5cbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBHbG9iYWwgc3RhdHVzIGludGVyY2VwdC4gKi8KLQkJCVBSSU5UX1dBUk4oIkFuIGdsb2JhbCBzdGF0dXMgaW50ZXJjZXB0IHdhcyByZWNlaXZlZCwgIgotCQkJCSAgICJ3aGljaCB3aWxsIGJlIHJlY292ZXJlZC5cbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJCX0KIAljYXNlIDB4NWE6CkBAIC03ODIsNDIgKzc3NSwzMSBAQAogCQkgKiBUYXBlIGxlbmd0aCBpbmNvbXBhdGlibGUuIFRoZSB0YXBlIGluc2VydGVkIGlzIHRvbyBsb25nLAogCQkgKiB3aGljaCBjb3VsZCBjYXVzZSBkYW1hZ2UgdG8gdGhlIHRhcGUgb3IgdGhlIGRyaXZlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBMZW5ndGggSW5jb21wYXRpYmxlXG4iKTsKLQkJUFJJTlRfV0FSTigiVGFwZSBsZW5ndGggZXhjZWVkcyBJQk0gZW5oYW5jZWQgY2FwYWNpdHkgIgotCQkJImNhcnRkcmlkZ2UgbGVuZ3RoIG9yIGEgbWVkaXVtXG4iKTsKLQkJUFJJTlRfV0FSTigid2l0aCBFQy1DU1QgaWRlbnRpZmljYXRpb24gbWFyayBoYXMgYmVlbiBtb3VudGVkICIKLQkJCSJpbiBhIGRldmljZSB0aGF0IHdyaXRlc1xuIik7Ci0JCVBSSU5UX1dBUk4oIjM0ODAgb3IgMzQ4MCBYRiBmb3JtYXQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCAiCisJCQkidGhlIHRhcGUgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1YjoKIAkJLyogRm9ybWF0IDM0ODAgWEYgaW5jb21wYXRpYmxlICovCiAJCWlmIChzZW5zZVsxXSAmIFNFTlNFX0JFR0lOTklOR19PRl9UQVBFKQogCQkJLyogVGhlIHRhcGUgd2lsbCBnZXQgb3ZlcndyaXR0ZW4uICovCiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKLQkJUFJJTlRfV0FSTigiRm9ybWF0IDM0ODAgWEYgSW5jb21wYXRpYmxlXG4iKTsKLQkJUFJJTlRfV0FSTigiTWVkaXVtIGhhcyBiZWVuIGNyZWF0ZWQgaW4gMzQ4MCBmb3JtYXQuICIKLQkJCSJUbyBjaGFuZ2UgdGhlIGZvcm1hdCB3cml0ZXNcbiIpOwotCQlQUklOVF9XQVJOKCJtdXN0IGJlIGlzc3VlZCBhdCBCT1QuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCIKKwkJCSIgZm9ybWF0IDM0ODAgWEZcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDVjOgogCQkvKiBGb3JtYXQgMzQ4MC0yIFhGIGluY29tcGF0aWJsZSAqLwotCQlQUklOVF9XQVJOKCJGb3JtYXQgMzQ4MC0yIFhGIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIkRldmljZSBjYW4gb25seSByZWFkIDM0ODAgb3IgMzQ4MCBYRiBmb3JtYXQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCB0YXBlICIKKwkJCSJmb3JtYXQgMzQ4MC0yIFhGXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1ZDoKIAkJLyogVGFwZSBsZW5ndGggdmlvbGF0aW9uLiAqLwotCQlQUklOVF9XQVJOKCJUYXBlIExlbmd0aCBWaW9sYXRpb25cbiIpOwotCQlQUklOVF9XQVJOKCJUaGUgbW91bnRlZCB0YXBlIGV4Y2VlZHMgSUJNIEVuaGFuY2VkIENhcGFjaXR5ICIKLQkJCSJDYXJ0ZHJpZGdlIFN5c3RlbSBUYXBlIGxlbmd0aC5cbiIpOwotCQlQUklOVF9XQVJOKCJUaGlzIG1heSBjYXVzZSBkYW1hZ2UgdG8gdGhlIGRyaXZlIG9yIHRhcGUgd2hlbiAiCi0JCQkicHJvY2Vzc2luZyB0byB0aGUgRU9WXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCIKKwkJCSIgdGhlIGN1cnJlbnQgdGFwZSBsZW5ndGhcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVNRURJVU1UWVBFKTsKIAljYXNlIDB4NWU6CiAJCS8qIENvbXBhY3Rpb24gYWxnb3JpdGhtIGluY29tcGF0aWJsZS4gKi8KLQkJUFJJTlRfV0FSTigiQ29tcGFjdGlvbiBBbGdvcml0aG0gSW5jb21wYXRpYmxlXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhlIHZvbHVtZSBpcyByZWNvcmRlZCB1c2luZyBhbiBpbmNvbXBhdGlibGUgIgotCQkJImNvbXBhY3Rpb24gYWxnb3JpdGhtLFxuIik7Ci0JCVBSSU5UX1dBUk4oIndoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IgorCQkJIiB0aGUgY29tcGFjdGlvbiBhbGdvcml0aG1cbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVNRURJVU1UWVBFKTsKIAogCQkvKiBUaGUgZm9sbG93aW5nIGVycGFzIHNob3VsZCBoYXZlIGJlZW4gY292ZXJlZCBlYXJsaWVyLiAqLwpAQCAtODQ4LDcgKzgzMCw2IEBACiAJICAgIChpcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfREVWX0VORCkgJiYKIAkgICAgKHJlcXVlc3QtPm9wID09IFRPX1dSSSkpIHsKIAkJLyogV3JpdGUgYXQgZW5kIG9mIHZvbHVtZSAqLwotCQlQUklOVF9JTkZPKCJFbmQgb2Ygdm9sdW1lXG4iKTsgLyogWFhYICovCiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PU1BDKTsKIAl9CiAKQEAgLTg2OSw5ICs4NTAsNyBAQAogCX0KIAogCURCRl9FVkVOVCg2LCAieHVua25vd25pcnFcbiIpOwotCVBSSU5UX0VSUigiVW5leHBlY3RlZCBpbnRlcnJ1cHQuXG4iKTsKLQlQUklOVF9FUlIoIkN1cnJlbnQgb3AgaXM6ICVzIiwgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0JdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKIAlyZXR1cm4gVEFQRV9JT19TVE9QOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCmluZGV4IDcxNjA1YTEuLmZjMWQ5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCkBAIC04LDEyICs4LDE1IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KIAogI2RlZmluZSBUQVBFX0RCRl9BUkVBCXRhcGVfMzU5MF9kYmYKKyNkZWZpbmUgQlVGU0laRSA1MTIJLyogc2l6ZSBvZiBidWZmZXJzIGZvciBkeW5hbWljIGdlbmVyYXRlZCBtZXNzYWdlcyAqLwogCiAjaW5jbHVkZSAidGFwZS5oIgogI2luY2x1ZGUgInRhcGVfc3RkLmgiCkBAIC0zNiw3ICszOSw3IEBACiAgKiAtIFJlYWQgQWx0ZXJuYXRlOgkJIGltcGxlbWVudGVkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFXzM1OTA6ICIKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCiAKIHN0YXRpYyBjb25zdCBjaGFyICp0YXBlXzM1OTBfbXNnW1RBUEVfMzU5MF9NQVhfTVNHXSA9IHsKIAlbMHgwMF0gPSAiIiwKQEAgLTY2MSw4ICs2NjQsNyBAQAogCQkJY2N3Kys7CiAJCQlkc3QgKz0gVEFQRUJMT0NLX0hTRUNfU0laRTsKIAkJfQotCQlpZiAob2ZmID4gYnYtPmJ2X2xlbikKLQkJCUJVRygpOworCQlCVUdfT04ob2ZmID4gYnYtPmJ2X2xlbik7CiAJfQogCWNjdyA9IHRhcGVfY2N3X2VuZChjY3csIE5PUCwgMCwgTlVMTCk7CiAJREJGX0VWRU5UKDYsICJ4QlJFRGNjd2dcbiIpOwpAQCAtNzI2LDcgKzcyOCw3IEBACiAJfQogCWNfaW5mby0+bWVkaXVtX3N0YXR1cyB8PSBUQVBFMzkwX01FRElVTV9MT0FERURfTUFTSzsKIAlpZiAoc2Vuc2UtPmZsYWdzICYgTVNFTlNFX0NSWVBUX01BU0spIHsKLQkJUFJJTlRfSU5GTygiTWVkaXVtIGlzIGVuY3J5cHRlZCAoJTA0eClcbiIsIHNlbnNlLT5mbGFncyk7CisJCURCRl9FVkVOVCg2LCAiTWVkaXVtIGlzIGVuY3J5cHRlZCAoJTA0eClcbiIsIHNlbnNlLT5mbGFncyk7CiAJCWNfaW5mby0+bWVkaXVtX3N0YXR1cyB8PSBUQVBFMzkwX01FRElVTV9FTkNSWVBURURfTUFTSzsKIAl9IGVsc2UJewogCQlEQkZfRVZFTlQoNiwgIk1lZGl1bSBpcyBub3QgZW5jcnlwdGVkICUwNHhcbiIsIHNlbnNlLT5mbGFncyk7CkBAIC04NDcsOCArODQ5LDcgQEAKIAkJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19SRUFEX0FUVE1TRyk7CiAJfSBlbHNlIHsKIAkJREJGX0VWRU5UKDMsICJ1bnNvbC5pcnEhIGRldiBlbmQ6ICUwOHhcbiIsIGRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIlVuc29saWNpdGVkIElSUSAoRGV2aWNlIEVuZCkgY2F1Z2h0LlxuIik7Ci0JCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIE5VTEwsIGlyYik7CisJCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBOVUxMLCBpcmIpOwogCX0KIAkvKiBjaGVjayBtZWRpdW0gc3RhdGUgKi8KIAl0YXBlXzM1OTBfc2NoZWR1bGVfd29yayhkZXZpY2UsIFRPX01TRU4pOwpAQCAtODc2LDggKzg3Nyw2IEBACiAJY2FzZSBTRU5TRV9CUkFfRFJFOgogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIHJjKTsKIAlkZWZhdWx0OgotCQlQUklOVF9FUlIoIlVua25vd24gQlJBICV4IC0gVGhpcyBzaG91bGQgbm90IGhhcHBlbiFcbiIsCi0JCQkgIHNlbnNlLT5icmEpOwogCQlCVUcoKTsKIAkJcmV0dXJuIFRBUEVfSU9fU1RPUDsKIAl9CkBAIC05MTAsNyArOTA5LDggQEAKIAkgKiBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBuZXcgdGFwZS4uLiB0aGlzCiAJICogc2hvdWxkIHByb2JhYmx5IGJlIGRvbmUgaW4gdXNlciBzcGFjZSEKIAkgKi8KLQlQUklOVF9XQVJOKCIoJXMpOiBTd2FwIFRhcGUgRGV2aWNlIVxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBtdXN0IGJlIGxvYWRlZCBpbnRvIGEgIgorCQkiZGlmZmVyZW50IHRhcGUgdW5pdFxuIik7CiAJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwogfQogCkBAIC05ODUsOCArOTg1LDYgQEAKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfZmFpbGVkKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigicmVhZF9vcHBvc2l0ZV9yZWNvdmVyeV9jYWxsZWRfd2l0aF9vcDogJXNcbiIsCi0JCQkgICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfZmFpbGVkKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKIAl9CiB9CkBAIC05OTgsNTAgKzk5Niw2MSBAQAogdGFwZV8zNTkwX3ByaW50X21pbV9tc2dfZjAoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICpzZW5zZTsKKwljaGFyICpleGNlcHRpb24sICpzZXJ2aWNlOworCisJZXhjZXB0aW9uID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKwlzZXJ2aWNlID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKworCWlmICghZXhjZXB0aW9uIHx8ICFzZXJ2aWNlKQorCQlnb3RvIG91dF9ub21lbTsKIAogCXNlbnNlID0gKHN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKikgaXJiLT5lY3c7CiAJLyogRXhjZXB0aW9uIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcwLmVtYykgewogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogRGF0YSBkZWdyYWRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEYXRhIGRlZ3JhZGVkIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKLQkJUFJJTlRfV0FSTigiKCVzKTogRGF0YSBkZWdyYWRlZCBpbiBwYXJ0aW9uICVpXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubXApOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEYXRhIGRlZ3JhZGVkIGluIHBhcnRpb24gJWkiLAorCQkJc2Vuc2UtPmZtdC5mNzAubXApOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1lZGl1bSBkZWdyYWRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJNZWRpdW0gZGVncmFkZWQiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gZGVncmFkZWQgaW4gcGFydGl0aW9uICVpXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubXApOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJNZWRpdW0gZGVncmFkZWQgaW4gcGFydGl0aW9uICVpIiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1wKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgotCQlQUklOVF9XQVJOKCIoJXMpOiBCbG9jayAwIEVycm9yXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkJsb2NrIDAgRXJyb3IiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gRXhjZXB0aW9uIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1kKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIEV4Y2VwdGlvbiAweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzAubWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNSU0gRXhNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLmVtYyk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MC5lbWMpOwogCQlicmVhazsKIAl9CiAJLyogU2VydmljZSBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MC5zbWMpIHsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlZmVyZW5jZSBNZWRpYSBtYWludGVuYW5jZSBwcm9jZWR1cmUgJWlcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tZCk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZWZlcmVuY2UgTWVkaWEgbWFpbnRlbmFuY2UgIgorCQkJInByb2NlZHVyZSAlaSIsIHNlbnNlLT5mbXQuZjcwLm1kKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogTUlNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzAuc21jKTsKIAkJYnJlYWs7CiAJfQorCisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRhcGUgbWVkaWEgaW5mb3JtYXRpb246IGV4Y2VwdGlvbiAlcywgIgorCQkic2VydmljZSAlc1xuIiwgZXhjZXB0aW9uLCBzZXJ2aWNlKTsKKworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMDUxLDEwOCArMTA2MCwxMDggQEAKIHRhcGVfMzU5MF9wcmludF9pb19zaW1fbXNnX2YxKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqc2Vuc2U7CisJY2hhciAqZXhjZXB0aW9uLCAqc2VydmljZTsKKworCWV4Y2VwdGlvbiA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisJc2VydmljZSA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWV4Y2VwdGlvbiB8fCAhc2VydmljZSkKKwkJZ290byBvdXRfbm9tZW07CiAKIAlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICopIGlyYi0+ZWN3OwogCS8qIEV4Y2VwdGlvbiBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MS5lbWMpIHsKIAljYXNlIDB4MDE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd25cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRWZmZWN0IG9mIGZhaWx1cmUgaXMgdW5rbm93biIpOwogCQlicmVhazsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiAtIG5vIHBlcmZvcm1hbmNlIGltcGFjdFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSAiCisJCQkiaW1wYWN0Iik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIGNoYW5uZWwgaW50ZXJmYWNlIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIGNoYW5uZWwgIgorCQkJImludGVyZmFjZSAweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIGRldmljZSBwYXRoIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIGRldmljZSBwYXRoICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIGxpYnJhcnkgcGF0aCAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBsaWJyYXJ5IHBhdGggIgorCQkJIjB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gbm9kZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBub2RlIDB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIHBhcnRpdGlvbiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBwYXJ0aXRpb24gIgorCQkJIjB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogU0lNIEV4TXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5lbWMpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuZW1jKTsKIAl9CiAJLyogU2VydmljZSBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MS5zbWMpIHsKIAljYXNlIDB4MDE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciBpbXBhY3QgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIGltcGFjdCBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgbm90IGltcGFjdCBjdSBwZXJmb3JtYW5jZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgbm90IGltcGFjdCBjdSAiCisJCQkicGVyZm9ybWFuY2UiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGUgIgotCQkJCSAgICIweCV4IG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgbm9kZSAiCisJCQkJIjB4JXggb24gQ1UiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbm9kZXMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJIm5vZGVzICgweCV4LTB4JXgpIG9uIENVIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0sCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2FubmVsIHBhdGggIgotCQkJCSAgICIweCV4IG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJjaGFubmVsIHBhdGggMHgleCBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNhbm5lbCBwYXRocyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGNhbm5lbCIKKwkJCQkiIHBhdGhzICgweCV4LTB4JXgpIG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgZGV2aWNlIHBhdGggIgotCQkJCSAgICIweCV4IG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgZGV2aWNlIgorCQkJCSIgcGF0aCAweCV4IG9uIENVIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSBwYXRocyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSIKKwkJCQkiIHBhdGhzICgweCV4LTB4JXgpIG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDY6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbGlicmFyeSBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibGlicmFyeSBwYXRoIDB4JXggb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsaWJyYXJ5IHBhdGhzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJsaWJyYXJ5IHBhdGhzICgweCV4LTB4JXgpIG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIENVXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBDVSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBTSU0gU2VydmljZU1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuc21jKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5zbWMpOwogCX0KKworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJJL08gc3Vic3lzdGVtIGluZm9ybWF0aW9uOiBleGNlcHRpb24iCisJCSIgJXMsIHNlcnZpY2UgJXNcbiIsIGV4Y2VwdGlvbiwgc2VydmljZSk7CitvdXRfbm9tZW06CisJa2ZyZWUoZXhjZXB0aW9uKTsKKwlrZnJlZShzZXJ2aWNlKTsKIH0KIAogLyoKQEAgLTExNjIsMTExICsxMTcxLDEwOSBAQAogdGFwZV8zNTkwX3ByaW50X2Rldl9zaW1fbXNnX2YyKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqc2Vuc2U7CisJY2hhciAqZXhjZXB0aW9uLCAqc2VydmljZTsKKworCWV4Y2VwdGlvbiA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisJc2VydmljZSA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWV4Y2VwdGlvbiB8fCAhc2VydmljZSkKKwkJZ290byBvdXRfbm9tZW07CiAKIAlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICopIGlyYi0+ZWN3OwogCS8qIEV4Y2VwdGlvbiBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MS5lbWMpIHsKIAljYXNlIDB4MDE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd25cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRWZmZWN0IG9mIGZhaWx1cmUgaXMgdW5rbm93biIpOwogCQlicmVhazsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiAtIG5vIHBlcmZvcm1hbmNlIGltcGFjdFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSIKKwkJCSIgaW1wYWN0Iik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIG9uIGNoYW5uZWwgaW50ZXJmYWNlIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIG9uIGNoYW5uZWwgIgorCQkJImludGVyZmFjZSAweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIG9uIGxvYWRlciAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBsb2FkZXIgMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gb24gbWVzc2FnZSBkaXNwbGF5IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIG9uIG1lc3NhZ2UgZGlzcGxheSIKKwkJCSIgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDY6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBpbiB0YXBlIHBhdGhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIGluIHRhcGUgcGF0aCIpOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBpbiBkcml2ZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gaW4gZHJpdmUiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFNJTSBFeE1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuZW1jKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLmVtYyk7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuc21jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgaW1wYWN0IGlzIHVua25vd25cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciBpbXBhY3QgaXMgdW5rbm93biIpOwogCQlicmVhazsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIG5vdCBpbXBhY3QgZGV2aWNlIHBlcmZvcm1hbmNlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGRldmljZSAiCisJCQkicGVyZm9ybWFuY2UiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNoYW5uZWwgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImNoYW5uZWwgcGF0aCAweCV4IG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2hhbm5lbCBwYXRoICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJjaGFubmVsIHBhdGggKDB4JXgtMHgleCkgb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBpbnRlcmZhY2UgMHgleCAiCi0JCQkJICAgIm9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJpbnRlcmZhY2UgMHgleCBvbiBEViIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBpbnRlcmZhY2VzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJpbnRlcmZhY2VzICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbG9hZGVyIDB4JXggIgotCQkJCSAgICJvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciIKKwkJCQkiIDB4JXggb24gRFYiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbG9hZGVyICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgbG9hZGVyIgorCQkJCSIgKDB4JXgtMHgleCkgb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gRFZcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIERWIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwODoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBtZXNzYWdlICIKLQkJCQkgICAiZGlzcGxheSAweCV4IG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJtZXNzYWdlIGRpc3BsYXkgMHgleCBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG1lc3NhZ2UgIgotCQkJCSAgICJkaXNwbGF5cyAoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJIm1lc3NhZ2UgZGlzcGxheXMgKDB4JXgtMHgleCkgb24gRFYiLAorCQkJCSBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDk6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENsZWFuIERWXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIkNsZWFuIERWIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERTSU0gU2VydmljZU1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuc21jKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5zbWMpOwogCX0KKworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXZpY2Ugc3Vic3lzdGVtIGluZm9ybWF0aW9uOiBleGNlcHRpb24iCisJCSIgJXMsIHNlcnZpY2UgJXNcbiIsIGV4Y2VwdGlvbiwgc2VydmljZSk7CitvdXRfbm9tZW06CisJa2ZyZWUoZXhjZXB0aW9uKTsKKwlrZnJlZShzZXJ2aWNlKTsKIH0KIAogLyoKQEAgLTEyODIsNDYgKzEyODksNDQgQEAKIAkJcmV0dXJuOwogCWlmICgoc2Vuc2UtPm1jID4gMCkgJiYgKHNlbnNlLT5tYyA8IFRBUEVfMzU5MF9NQVhfTVNHKSkgewogCQlpZiAodGFwZV8zNTkwX21zZ1tzZW5zZS0+bWNdICE9IE5VTEwpCi0JCQlQUklOVF9XQVJOKCIoJXMpOiAlc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICB0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10pOwotCQllbHNlIHsKLQkJCVBSSU5UX1dBUk4oIiglcyk6IE1lc3NhZ2UgQ29kZSAweCV4XG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5tYyk7Ci0JCX0KKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGhhcyAiCisJCQkJImlzc3VlZCBzZW5zZSBtZXNzYWdlICVzXG4iLAorCQkJCXRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSk7CisJCWVsc2UKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGhhcyAiCisJCQkJImlzc3VlZCBhbiB1bmtub3duIHNlbnNlIG1lc3NhZ2UgY29kZSAweCV4XG4iLAorCQkJCXNlbnNlLT5tYyk7CiAJCXJldHVybjsKIAl9CiAJaWYgKHNlbnNlLT5tYyA9PSAweGYwKSB7CiAJCS8qIFN0YW5kYXJkIE1lZGlhIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KLQkJUFJJTlRfV0FSTigiKCVzKTogTUlNIFNFVj0laSwgTUM9JTAyeCwgRVM9JXgvJXgsICIKLQkJCSAgICJSQz0lMDJ4LSUwNHgtJTAyeFxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLnNldiwgc2Vuc2UtPm1jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAuZW1jLCBzZW5zZS0+Zm10LmY3MC5zbWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5yZWZjb2RlLCBzZW5zZS0+Zm10LmY3MC5taWQsCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5maWQpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiTUlNIFNFVj0laSwgTUM9JTAyeCwgRVM9JXgvJXgsICIKKwkJCSJSQz0lMDJ4LSUwNHgtJTAyeFxuIiwgc2Vuc2UtPmZtdC5mNzAuc2V2LCBzZW5zZS0+bWMsCisJCQlzZW5zZS0+Zm10LmY3MC5lbWMsIHNlbnNlLT5mbXQuZjcwLnNtYywKKwkJCXNlbnNlLT5mbXQuZjcwLnJlZmNvZGUsIHNlbnNlLT5mbXQuZjcwLm1pZCwKKwkJCXNlbnNlLT5mbXQuZjcwLmZpZCk7CiAJCXRhcGVfMzU5MF9wcmludF9taW1fbXNnX2YwKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2Vuc2UtPm1jID09IDB4ZjEpIHsKIAkJLyogU3RhbmRhcmQgSS9PIFN1YnN5c3RlbSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KLQkJUFJJTlRfV0FSTigiKCVzKTogSU9TSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwgIgotCQkJICAgIk1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zZXYsCi0JCQkgICBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKLQkJCSAgIHNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEuc21jLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJJT1NJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4LCIKKwkJCSIgTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNldiwgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCisJCQlzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywgc2Vuc2UtPmZtdC5mNzEuc21jLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOwogCQl0YXBlXzM1OTBfcHJpbnRfaW9fc2ltX21zZ19mMShkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKIAl9CiAJaWYgKHNlbnNlLT5tYyA9PSAweGYyKSB7CiAJCS8qIFN0YW5kYXJkIERldmljZSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KLQkJUFJJTlRfV0FSTigiKCVzKTogREVWU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsICIKLQkJCSAgICJNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuc2V2LAotCQkJICAgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCi0JCQkgICBzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnNtYywgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiREVWU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngiCisJCQkiLCBNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAorCQkJc2Vuc2UtPmZtdC5mNzEuc2V2LCBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKKwkJCXNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLCBzZW5zZS0+Zm10LmY3MS5zbWMsCisJCQlzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsCisJCQlzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CiAJCXRhcGVfMzU5MF9wcmludF9kZXZfc2ltX21zZ19mMihkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKIAl9CkBAIC0xMzI5LDggKzEzMzQsOCBAQAogCQkvKiBTdGFuZGFyZCBMaWJyYXJ5IFNlcnZpY2UgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwogCQlyZXR1cm47CiAJfQotCVBSSU5UX1dBUk4oIiglcyk6IERldmljZSBNZXNzYWdlKCV4KVxuIiwKLQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPm1jKTsKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgaXNzdWVkIGFuIHVua25vd24gIgorCQkic2Vuc2UgbWVzc2FnZSBjb2RlICV4XG4iLCBzZW5zZS0+bWMpOwogfQogCiBzdGF0aWMgaW50IHRhcGVfMzU5MF9jcnlwdF9lcnJvcihzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKQEAgLTEzNTUsOSArMTM2MCw4IEBACiAJCS8qIE5vIGNvbm5lY3Rpb24gdG8gRUtNICovCiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PVENPTk4pOwogCi0JUFJJTlRfRVJSKCIoJXMpOiBVbmFibGUgdG8gZ2V0IGVuY3J5cHRpb24ga2V5IGZyb20gRUtNXG4iLCBidXNfaWQpOwotCVBSSU5UX0VSUigiKCVzKTogQ1U9JTAyWCBEUklWRT0lMDZYIEVLTT0lMDJYOiUwNFhcbiIsIGJ1c19pZCwgY3VfcmMsCi0JCWRydl9yYywgZWttX3JjMSwgZWttX3JjMik7CisJZGV2X2VyciAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBmYWlsZWQgdG8gb2J0YWluIHRoZSAiCisJCSJlbmNyeXB0aW9uIGtleSBmcm9tIEVLTVxuIik7CiAKIAlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT0tFWSk7CiB9CkBAIC0xNDQzLDggKzE0NDcsNiBAQAogCQkgKiBwcmludCBhZGRpdGlvbmFsIG1zZyBzaW5jZSBkZWZhdWx0IG1zZwogCQkgKiAiZGV2aWNlIGludGVydmVudGlvbiIgaXMgbm90IHZlcnkgbWVhbmluZ2Z1bGwKIAkJICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IFRhcGUgb3BlcmF0aW9uIHdoZW4gbWVkaXVtIG5vdCBsb2FkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJdGFwZV9tZWRfc3RhdGVfc2V0KGRldmljZSwgTVNfVU5MT0FERUQpOwogCQl0YXBlXzM1OTBfc2NoZWR1bGVfd29yayhkZXZpY2UsIFRPX0NSWVBUX09GRik7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PTUVESVVNKTsKQEAgLTE0OTAsMTkgKzE0OTIsMTMgQEAKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9NRURJVU0pOwogCiAJY2FzZSAweDYwMjA6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENhcnRyaWRnZSBvZiB3cm9uZyB0eXBlID9cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTUVESVVNVFlQRSk7CiAKIAljYXNlIDB4ODAxMToKLQkJUFJJTlRfV0FSTigiKCVzKTogQW5vdGhlciBob3N0IGhhcyByZXNlcnZlZCB0aGUgdGFwZSBkZXZpY2VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FUEVSTSk7CiAJY2FzZSAweDgwMTM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEFub3RoZXIgaG9zdCBoYXMgcHJpdmlsZWdlZCBhY2Nlc3MgdG8gdGhlICIKLQkJCSAgICJ0YXBlIGRldmljZVxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFRvIHNvbHZlIHRoZSBwcm9ibGVtIHVubG9hZCB0aGUgY3VycmVudCAiCi0JCQkgICAiY2FydHJpZGdlIVxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGRpZmZlcmVudCBob3N0IGhhcyBwcml2aWxlZ2VkIgorCQkJIiBhY2Nlc3MgdG8gdGhlIHRhcGUgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRVBFUk0pOwogCWRlZmF1bHQ6CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKQEAgLTE1NTIsOSArMTU0OCw3IEBACiAJfQogCiAJREJGX0VWRU5UKDYsICJ4dW5rbm93bmlycVxuIik7Ci0JUFJJTlRfRVJSKCJVbmV4cGVjdGVkIGludGVycnVwdC5cbiIpOwotCVBSSU5UX0VSUigiQ3VycmVudCBvcCBpczogJXMiLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOwogCXJldHVybiBUQVBFX0lPX1NUT1A7CiB9CiAKQEAgLTE2MDksNyArMTYwMyw2IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfcmRjX2RhdGE7CiAJaWYgKHJkY19kYXRhLT5kYXRhWzMxXSA9PSAweDEzKSB7Ci0JCVBSSU5UX0lORk8oIkRldmljZSBoYXMgY3J5cHRvIHN1cHBvcnRcbiIpOwogCQlkYXRhLT5jcnlwdF9pbmZvLmNhcGFiaWxpdHkgfD0gVEFQRTM5MF9DUllQVF9TVVBQT1JURURfTUFTSzsKIAkJdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoZGV2aWNlKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IGFlMThiYWYuLmYzMmU4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTEwLDYgKzEwLDggQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC0yMyw4ICsyNSw2IEBACiAKICNpbmNsdWRlICJ0YXBlLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9CTE9DSzogIgotCiAjZGVmaW5lIFRBUEVCTE9DS19NQVhfU0VDCTEwMAogI2RlZmluZSBUQVBFQkxPQ0tfTUlOX1JFUVVFVUUJMwogCkBAIC0yNzksOCArMjc5LDYgQEAKIAl0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAogCWlmICghZGV2aWNlLT5ibGtfZGF0YS5kaXNrKSB7Ci0JCVBSSU5UX0VSUigiKCVzKTogTm8gZ2VuZGlzayB0byBjbGVhbiB1cCFcbiIsCi0JCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZ290byBjbGVhbnVwX3F1ZXVlOwogCX0KIApAQCAtMzE0LDcgKzMxMiw4IEBACiAJaWYgKCFkZXZpY2UtPmJsa19kYXRhLm1lZGl1bV9jaGFuZ2VkKQogCQlyZXR1cm4gMDsKIAotCVBSSU5UX0lORk8oIkRldGVjdGluZyBtZWRpYSBzaXplLi4uXG4iKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiB0aGUgcmVjb3JkZWQgIgorCQkiYXJlYS4uLlxuIik7CiAJcmMgPSB0YXBlX210b3AoZGV2aWNlLCBNVEZTRk0sIDEpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtMzQxLDcgKzM0MCw4IEBACiAJZGV2aWNlLT5ib2YgPSByYzsKIAlucl9vZl9ibGtzIC09IHJjOwogCi0JUFJJTlRfSU5GTygiRm91bmQgJWkgYmxvY2tzIG9uIG1lZGlhXG4iLCBucl9vZl9ibGtzKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgc2l6ZSBvZiB0aGUgcmVjb3JkZWQgYXJlYSBpcyAlaSAiCisJCSJibG9ja3NcbiIsIG5yX29mX2Jsa3MpOwogCXNldF9jYXBhY2l0eShkZXZpY2UtPmJsa19kYXRhLmRpc2ssCiAJCW5yX29mX2Jsa3MqKFRBUEVCTE9DS19IU0VDX1NJWkUvNTEyKSk7CiAKQEAgLTM3Niw4ICszNzYsOCBAQAogCiAJaWYgKGRldmljZS0+cmVxdWlyZWRfdGFwZW1hcmtzKSB7CiAJCURCRl9FVkVOVCgyLCAiVEJMT0NLOiBtaXNzaW5nIHRhcGVtYXJrc1xuIik7Ci0JCVBSSU5UX0VSUigiVEJMT0NLOiBSZWZ1c2luZyB0byBvcGVuIHRhcGUgd2l0aCBtaXNzaW5nIgotCQkJIiBlbmQgb2YgZmlsZSBtYXJrcy5cbiIpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJPcGVuaW5nIHRoZSB0YXBlIGZhaWxlZCBiZWNhdXNlIgorCQkJIiBvZiBtaXNzaW5nIGVuZC1vZi1maWxlIG1hcmtzXG4iKTsKIAkJcmMgPSAtRVBFUk07CiAJCWdvdG8gcHV0X2RldmljZTsKIAl9CkBAIC00NTIsNyArNDUyLDYgQEAKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJUFJJTlRfV0FSTigiaW52YWxpZCBpb2N0bCAweCV4XG4iLCBjb21tYW5kKTsKIAkJCXJjID0gLUVJTlZBTDsKIAl9CiAKQEAgLTQ3NCw3ICs0NzMsNiBAQAogCiAJaWYgKHRhcGVibG9ja19tYWpvciA9PSAwKQogCQl0YXBlYmxvY2tfbWFqb3IgPSByYzsKLQlQUklOVF9JTkZPKCJ0YXBlIGdldHMgbWFqb3IgJWQgZm9yIGJsb2NrIGRldmljZVxuIiwgdGFwZWJsb2NrX21ham9yKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYwppbmRleCBiZTBjZTIyLi4zMTU2NmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYwpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUgInRhcGVfc3RkLmgiCiAjaW5jbHVkZSAidGFwZV9jbGFzcy5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfQ0hBUjogIgotCiAjZGVmaW5lIFRBUEVDSEFSX01BSk9SCQkwCS8qIGdldCBkeW5hbWljIG1ham9yICovCiAKIC8qCkBAIC0xMDIsOCArMTAwLDYgQEAKIAlpZiAoYmxvY2tfc2l6ZSA+IE1BWF9CTE9DS1NJWkUpIHsKIAkJREJGX0VWRU5UKDMsICJJbnZhbGlkIGJsb2Nrc2l6ZSAoJXpkID4gJWQpXG4iLAogCQkJYmxvY2tfc2l6ZSwgTUFYX0JMT0NLU0laRSk7Ci0JCVBSSU5UX0VSUigiSW52YWxpZCBibG9ja3NpemUgKCV6ZD4gJWQpXG4iLAotCQkJYmxvY2tfc2l6ZSwgTUFYX0JMT0NLU0laRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDg1LDcgKzQ4MSw2IEBACiAJCXJldHVybiAtMTsKIAogCXRhcGVjaGFyX21ham9yID0gTUFKT1IoZGV2KTsKLQlQUklOVF9JTkZPKCJ0YXBlIGdldHMgbWFqb3IgJWQgZm9yIGNoYXJhY3RlciBkZXZpY2VzXG4iLCBNQUpPUihkZXYpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDk2LDcgKzQ5MSw1IEBACiB2b2lkCiB0YXBlY2hhcl9leGl0KHZvaWQpCiB7Ci0JUFJJTlRfSU5GTygidGFwZSByZWxlYXNlcyBtYWpvciAlZCBmb3IgY2hhcmFjdGVyIGRldmljZXNcbiIsCi0JCXRhcGVjaGFyX21ham9yKTsKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYodGFwZWNoYXJfbWFqb3IsIDApLCAyNTYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwppbmRleCBmOWJiNTFmLi4wOGMwOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwpAQCAtMTEsNiArMTEsNyBAQAogICoJCSBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JICAgICAvLyBmb3Iga2VybmVsIHBhcmFtZXRlcnMKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CSAgICAgLy8gZm9yIHJlcXVlc3RpbmcgbW9kdWxlcwpAQCAtMjUsNyArMjYsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfQ09SRTogIgogI2RlZmluZSBMT05HX0JVU1lfVElNRU9VVCAxODAgLyogc2Vjb25kcyAqLwogCiBzdGF0aWMgdm9pZCBfX3RhcGVfZG9faXJxIChzdHJ1Y3QgY2N3X2RldmljZSAqLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgaXJiICopOwpAQCAtMjE0LDEzICsyMTQsMTMgQEAKIAlzd2l0Y2gobmV3c3RhdGUpewogCWNhc2UgTVNfVU5MT0FERUQ6CiAJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyB8PSBHTVRfRFJfT1BFTih+MCk7Ci0JCVBSSU5UX0lORk8oIiglcyk6IFRhcGUgaXMgdW5sb2FkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgY2FydHJpZGdlIGhhcyBiZWVuICIKKwkJCSJzdWNjZXNzZnVsbHkgdW5sb2FkZWRcbiIpOwogCQlicmVhazsKIAljYXNlIE1TX0xPQURFRDoKIAkJZGV2aWNlLT50YXBlX2dlbmVyaWNfc3RhdHVzICY9IH5HTVRfRFJfT1BFTih+MCk7Ci0JCVBSSU5UX0lORk8oIiglcyk6IFRhcGUgaGFzIGJlZW4gbW91bnRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHRhcGUgY2FydHJpZGdlIGhhcyBiZWVuICIKKwkJCSJtb3VudGVkXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLy8gcHJpbnQgbm90aGluZwpAQCAtMzMzLDcgKzMzMyw2IEBACiAJLyogTGV0IHRoZSBkaXNjaXBsaW5lIGhhdmUgYSBnbyBhdCB0aGUgZGV2aWNlLiAqLwogCWRldmljZS0+ZGlzY2lwbGluZSA9IGRpc2NpcGxpbmU7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChkaXNjaXBsaW5lLT5vd25lcikpIHsKLQkJUFJJTlRfRVJSKCJDYW5ub3QgZ2V0IG1vZHVsZS4gTW9kdWxlIGdvbmUuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zOTEsNyArMzkwLDYgQEAKIHRhcGVfZ2VuZXJpY19vZmZsaW5lKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogewogCWlmICghZGV2aWNlKSB7Ci0JCVBSSU5UX0VSUigidGFwZV9nZW5lcmljX29mZmxpbmU6IG5vIHN1Y2ggZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC00MTMsOSArNDExLDYgQEAKIAkJCURCRl9FVkVOVCgzLCAiKCUwOHgpOiBTZXQgb2ZmbGluZSBmYWlsZWQgIgogCQkJCSItIGRyaXZlIGluIHVzZS5cbiIsCiAJCQkJZGV2aWNlLT5jZGV2X2lkKTsKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFNldCBvZmZsaW5lIGZhaWxlZCAiCi0JCQkJIi0gZHJpdmUgaW4gdXNlLlxuIiwKLQkJCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTQzNSwxNCArNDMwLDExIEBACiAJZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRhcGVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldmljZSA9PSBOVUxMKSB7CiAJCURCRl9FWENFUFRJT04oMiwgInRpOm5vIG1lbVxuIik7Ci0JCVBSSU5UX0lORk8gKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKLQkJCSAgICAidGFwZSBpbmZvIHN0cnVjdHVyZVxuIik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAlkZXZpY2UtPm1vZGVzZXRfYnl0ZSA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmIChkZXZpY2UtPm1vZGVzZXRfYnl0ZSA9PSBOVUxMKSB7CiAJCURCRl9FWENFUFRJT04oMiwgInRpOm5vIG1lbVxuIik7Ci0JCVBSSU5UX0lORk8oImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW9kZXNldCBieXRlXG4iKTsKIAkJa2ZyZWUoZGV2aWNlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQpAQCAtNDkwLDcgKzQ4Miw2IEBACiAJfSBlbHNlIHsKIAkJaWYgKHJlbWFpbiA8IDApIHsKIAkJCURCRl9FVkVOVCg0LCAicHV0IGRldmljZSB3aXRob3V0IHJlZmVyZW5jZVxuIik7Ci0JCQlQUklOVF9FUlIoInB1dCBkZXZpY2Ugd2l0aG91dCByZWZlcmVuY2VcbiIpOwogCQl9IGVsc2UgewogCQkJREJGX0VWRU5UKDQsICJ0YXBlX2ZyZWVfZGV2aWNlKCVwKVxuIiwgZGV2aWNlKTsKIAkJCWtmcmVlKGRldmljZS0+bW9kZXNldF9ieXRlKTsKQEAgLTUzOCw4ICs1MjksNiBAQAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2Rldi0+ZGV2LmtvYmosICZ0YXBlX2F0dHJfZ3JvdXApOwogCWlmIChyZXQpIHsKIAkJdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7Ci0JCVBSSU5UX0VSUigicHJvYmUgZmFpbGVkIGZvciB0YXBlIGRldmljZSAlc1xuIiwKLQkJCSAgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm4gcmV0OwogCX0KIAljZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBkZXZpY2U7CkBAIC01NDcsNyArNTM2LDYgQEAKIAlkZXZpY2UtPmNkZXYgPSBjZGV2OwogCWNjd19kZXZpY2VfZ2V0X2lkKGNkZXYsICZkZXZfaWQpOwogCWRldmljZS0+Y2Rldl9pZCA9IGRldmlkX3RvX2ludCgmZGV2X2lkKTsKLQlQUklOVF9JTkZPKCJ0YXBlIGRldmljZSAlcyBmb3VuZFxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4NCw3ICs1NzIsNiBAQAogCiAJZGV2aWNlID0gY2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWlmICghZGV2aWNlKSB7Ci0JCVBSSU5UX0VSUigiTm8gZGV2aWNlIHBvaW50ZXIgaW4gdGFwZV9nZW5lcmljX3JlbW92ZSFcbiIpOwogCQlyZXR1cm47CiAJfQogCURCRl9MSCgzLCAiKCUwOHgpOiB0YXBlX2dlbmVyaWNfcmVtb3ZlKCVwKVxuIiwgZGV2aWNlLT5jZGV2X2lkLCBjZGV2KTsKQEAgLTYxNSwxMCArNjAyLDggQEAKIAkJCSAqLwogCQkJREJGX0VWRU5UKDMsICIoJTA4eCk6IERyaXZlIGluIHVzZSB2YW5pc2hlZCFcbiIsCiAJCQkJZGV2aWNlLT5jZGV2X2lkKTsKLQkJCVBSSU5UX1dBUk4oIiglcyk6IERyaXZlIGluIHVzZSB2YW5pc2hlZCAtICIKLQkJCQkiZXhwZWN0IHRyb3VibGUhXG4iLAotCQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQkJUFJJTlRfV0FSTigiU3RhdGUgd2FzICVpXG4iLCBkZXZpY2UtPnRhcGVfc3RhdGUpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSB0YXBlIHVuaXQgd2FzIGRldGFjaGVkIgorCQkJCSIgd2hpbGUgaW4gdXNlXG4iKTsKIAkJCXRhcGVfc3RhdGVfc2V0KGRldmljZSwgVFNfTk9UX09QRVIpOwogCQkJX190YXBlX2Rpc2NhcmRfcmVxdWVzdHMoZGV2aWNlKTsKIAkJCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CkBAIC02MzksOCArNjI0LDcgQEAKIHsKIAlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwogCi0JaWYgKGRhdGFzaXplID4gUEFHRV9TSVpFIHx8IChjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKSA+IFBBR0VfU0laRSkKLQkJQlVHKCk7CisJQlVHX09OKGRhdGFzaXplID4gUEFHRV9TSVpFIHx8IChjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKSA+IFBBR0VfU0laRSk7CiAKIAlEQkZfTEgoNiwgInRhcGVfYWxsb2NfcmVxdWVzdCglZCwgJWQpXG4iLCBjcGxlbmd0aCwgZGF0YXNpemUpOwogCkBAIC03OTcsOCArNzgxLDcgQEAKIAlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopIGRhdGE7CiAJc3Bpbl9sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CiAJcmVxdWVzdCA9IGxpc3RfZW50cnkoZGV2aWNlLT5yZXFfcXVldWUubmV4dCwgc3RydWN0IHRhcGVfcmVxdWVzdCwgbGlzdCk7Ci0JaWYgKHJlcXVlc3QtPnN0YXR1cyAhPSBUQVBFX1JFUVVFU1RfTE9OR19CVVNZKQotCQlCVUcoKTsKKwlCVUdfT04ocmVxdWVzdC0+c3RhdHVzICE9IFRBUEVfUkVRVUVTVF9MT05HX0JVU1kpOwogCURCRl9MSCg2LCAiJTA4eDogTG9uZyBidXN5IHRpbWVvdXQuXG4iLCBkZXZpY2UtPmNkZXZfaWQpOwogCV9fdGFwZV9zdGFydF9uZXh0X3JlcXVlc3QoZGV2aWNlKTsKIAlkZXZpY2UtPmxiX3RpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKQEAgLTgzMCwzMCArODEzLDYgQEAKIH0KIAogLyoKLSAqIFdyaXRlIHNlbnNlIGRhdGEgdG8gY29uc29sZS9kYmYKLSAqLwotdm9pZAotdGFwZV9kdW1wX3NlbnNlKHN0cnVjdCB0YXBlX2RldmljZSogZGV2aWNlLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0LAotCQlzdHJ1Y3QgaXJiICppcmIpCi17Ci0JdW5zaWduZWQgaW50ICpzcHRyOwotCi0JUFJJTlRfSU5GTygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JUFJJTlRfSU5GTygiRFNUQVQgOiAlMDJ4ICBDU1RBVDogJTAyeAlDUEE6ICUwNHhcbiIsCi0JCSAgIGlyYi0+c2Nzdy5jbWQuZHN0YXQsIGlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuY3BhKTsKLQlQUklOVF9JTkZPKCJERVZJQ0U6ICVzXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQlpZiAocmVxdWVzdCAhPSBOVUxMKQotCQlQUklOVF9JTkZPKCJPUAkgIDogJXNcbiIsIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCi0Jc3B0ciA9ICh1bnNpZ25lZCBpbnQgKikgaXJiLT5lY3c7Ci0JUFJJTlRfSU5GTygiU2Vuc2UgZGF0YTogJTA4WCAlMDhYICUwOFggJTA4WCBcbiIsCi0JCSAgIHNwdHJbMF0sIHNwdHJbMV0sIHNwdHJbMl0sIHNwdHJbM10pOwotCVBSSU5UX0lORk8oIlNlbnNlIGRhdGE6ICUwOFggJTA4WCAlMDhYICUwOFggXG4iLAotCQkgICBzcHRyWzRdLCBzcHRyWzVdLCBzcHRyWzZdLCBzcHRyWzddKTsKLQlQUklOVF9JTkZPKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci19Ci0KLS8qCiAgKiBXcml0ZSBzZW5zZSBkYXRhIHRvIGRiZgogICovCiB2b2lkCkBAIC0xMDUxLDggKzEwMTAsNiBAQAogCiAJZGV2aWNlID0gKHN0cnVjdCB0YXBlX2RldmljZSAqKSBjZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJaWYgKGRldmljZSA9PSBOVUxMKSB7Ci0JCVBSSU5UX0VSUigiY291bGQgbm90IGdldCBkZXZpY2Ugc3RydWN0dXJlIGZvciAlcyAiCi0JCQkgICJpbiBpbnRlcnJ1cHRcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuOwogCX0KIAlyZXF1ZXN0ID0gKHN0cnVjdCB0YXBlX3JlcXVlc3QgKikgaW50cGFybTsKQEAgLTEwNjQsMTMgKzEwMjEsMTMgQEAKIAkJLyogRklYTUU6IFdoYXQgdG8gZG8gd2l0aCB0aGUgcmVxdWVzdD8gKi8KIAkJc3dpdGNoIChQVFJfRVJSKGlyYikpIHsKIAkJCWNhc2UgLUVUSU1FRE9VVDoKLQkJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXF1ZXN0IHRpbWVkIG91dFxuIiwKKwkJCQlEQkZfTEgoMSwgIiglcyk6IFJlcXVlc3QgdGltZWQgb3V0XG4iLAogCQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQljYXNlIC1FSU86CiAJCQkJX190YXBlX2VuZF9yZXF1ZXN0KGRldmljZSwgcmVxdWVzdCwgLUVJTyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCVBSSU5UX0VSUigiKCVzKTogVW5leHBlY3RlZCBpL28gZXJyb3IgJWxpXG4iLAorCQkJCURCRl9MSCgxLCAiKCVzKTogVW5leHBlY3RlZCBpL28gZXJyb3IgJWxpXG4iLAogCQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwKIAkJCQkJUFRSX0VSUihpcmIpKTsKIAkJfQpAQCAtMTE4Miw4ICsxMTM5LDYgQEAKIAkJZGVmYXVsdDoKIAkJCWlmIChyYyA+IDApIHsKIAkJCQlEQkZfRVZFTlQoNiwgInh1bmtub3ducmNcbiIpOwotCQkJCVBSSU5UX0VSUigiSW52YWxpZCByZXR1cm4gY29kZSBmcm9tIGRpc2NpcGxpbmUgIgotCQkJCSAgCSJpbnRlcnJ1cHQgZnVuY3Rpb24uXG4iKTsKIAkJCQlfX3RhcGVfZW5kX3JlcXVlc3QoZGV2aWNlLCByZXF1ZXN0LCAtRUlPKTsKIAkJCX0gZWxzZSB7CiAJCQkJX190YXBlX2VuZF9yZXF1ZXN0KGRldmljZSwgcmVxdWVzdCwgcmMpOwpAQCAtMTMyMyw3ICsxMjc4LDYgQEAKIEVYUE9SVF9TWU1CT0wodGFwZV9tZWRfc3RhdGVfc2V0KTsKIEVYUE9SVF9TWU1CT0wodGFwZV9hbGxvY19yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0wodGFwZV9mcmVlX3JlcXVlc3QpOwotRVhQT1JUX1NZTUJPTCh0YXBlX2R1bXBfc2Vuc2UpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2R1bXBfc2Vuc2VfZGJmKTsKIEVYUE9SVF9TWU1CT0wodGFwZV9kb19pbyk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZG9faW9fYXN5bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYwppbmRleCA4YTM3NmFmLi4yMDJmNDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYwpAQCAtMjAsOCArMjAsNiBAQAogCiAjaW5jbHVkZSAidGFwZS5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfUFJPQzogIgotCiBzdGF0aWMgY29uc3QgY2hhciAqdGFwZV9tZWRfc3RfdmVyYm9zZVtNU19TSVpFXSA9CiB7CiAJW01TX1VOS05PV05dID0gIlVOS05PV04gIiwKQEAgLTEyOCw3ICsxMjYsNiBAQAogCQlwcm9jX2NyZWF0ZSgidGFwZWRldmljZXMiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIE5VTEwsCiAJCQkgICAgJnRhcGVfcHJvY19vcHMpOwogCWlmICh0YXBlX3Byb2NfZGV2aWNlcyA9PSBOVUxMKSB7Ci0JCVBSSU5UX1dBUk4oInRhcGU6IENhbm5vdCByZWdpc3RlciBwcm9jZnMgZW50cnkgdGFwZWRldmljZXNcbiIpOwogCQlyZXR1cm47CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKaW5kZXggNWJkNTczZC4uMWE5NDIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAidGFwZS5oIgogI2luY2x1ZGUgInRhcGVfc3RkLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9TVEQ6ICIKLQogLyoKICAqIHRhcGVfc3RkX2Fzc2lnbgogICovCkBAIC0zOSwxNiArMzcsMTUgQEAKIAlpbnQgcmM7CiAKIAlyZXF1ZXN0ID0gKHN0cnVjdCB0YXBlX3JlcXVlc3QgKikgZGF0YTsKLQlpZiAoKGRldmljZSA9IHJlcXVlc3QtPmRldmljZSkgPT0gTlVMTCkKLQkJQlVHKCk7CisJZGV2aWNlID0gcmVxdWVzdC0+ZGV2aWNlOworCUJVR19PTighZGV2aWNlKTsKIAogCURCRl9FVkVOVCgzLCAiJTA4eDogQXNzaWdubWVudCB0aW1lb3V0LiBEZXZpY2UgYnVzeS5cbiIsCiAJCQlkZXZpY2UtPmNkZXZfaWQpOwogCXJjID0gdGFwZV9jYW5jZWxfaW8oZGV2aWNlLCByZXF1ZXN0KTsKIAlpZihyYykKLQkJUFJJTlRfRVJSKCIoJXMpOiBBc3NpZ24gdGltZW91dDogQ2FuY2VsIGZhaWxlZCB3aXRoIHJjID0gJWlcbiIsCisJCURCRl9FVkVOVCgzLCAiKCVzKTogQXNzaWduIHRpbWVvdXQ6IENhbmNlbCBmYWlsZWQgd2l0aCByYyA9ICVpXG4iLAogCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwotCiB9CiAKIGludApAQCAtODIsOCArNzksNiBAQAogCWRlbF90aW1lcigmdGltZW91dCk7CiAKIAlpZiAocmMgIT0gMCkgewotCQlQUklOVF9XQVJOKCIlczogYXNzaWduIGZhaWxlZCAtIGRldmljZSBtaWdodCBiZSBidXN5XG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCURCRl9FVkVOVCgzLCAiJTA4eDogYXNzaWduIGZhaWxlZCAtIGRldmljZSBtaWdodCBiZSBidXN5XG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKIAl9IGVsc2UgewpAQCAtMTA1LDggKzEwMCw2IEBACiAJaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA9PSBUU19OT1RfT1BFUikgewogCQlEQkZfRVZFTlQoMywgIiglMDh4KTogQ2FuJ3QgdW5hc3NpZ24gZGV2aWNlXG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiKCVzKTogQ2FuJ3QgdW5hc3NpZ24gZGV2aWNlIC0gZGV2aWNlIGdvbmVcbiIsCi0JCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMjAsOCArMTEzLDYgQEAKIAogCWlmICgocmMgPSB0YXBlX2RvX2lvKGRldmljZSwgcmVxdWVzdCkpICE9IDApIHsKIAkJREJGX0VWRU5UKDMsICIlMDh4OiBVbmFzc2lnbiBmYWlsZWRcbiIsIGRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIiVzOiBVbmFzc2lnbiBmYWlsZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgIiUwOHg6IFRhcGUgdW5hc3NpZ25lZFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKIAl9CkBAIC0yNDIsOCArMjMzLDYgQEAKIAlpZiAoY291bnQgPiBNQVhfQkxPQ0tTSVpFKSB7CiAJCURCRl9FVkVOVCgzLCAiSW52YWxpZCBibG9jayBzaXplICglZCA+ICVkKSBnaXZlbi5cbiIsCiAJCQljb3VudCwgTUFYX0JMT0NLU0laRSk7Ci0JCVBSSU5UX0VSUigiSW52YWxpZCBibG9jayBzaXplICglZCA+ICVkKSBnaXZlbi5cbiIsCi0JCQljb3VudCwgTUFYX0JMT0NLU0laRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjMzLDE0ICs2MjIsNiBAQAogCiAJaWYgKG10X2NvdW50IDwgMCB8fCBtdF9jb3VudCA+IDEpIHsKIAkJREJGX0VYQ0VQVElPTig2LCAieGNvbSBwYXJtXG4iKTsKLQkJaWYgKCpkZXZpY2UtPm1vZGVzZXRfYnl0ZSAmIDB4MDgpCi0JCQlQUklOVF9JTkZPKCIoJXMpIENvbXByZXNzaW9uIGlzIGN1cnJlbnRseSBvblxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJZWxzZQotCQkJUFJJTlRfSU5GTygiKCVzKSBDb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgb2ZmXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQlQUklOVF9JTkZPKCJVc2UgMSB0byBzd2l0Y2ggY29tcHJlc3Npb24gb24sIDAgdG8gIgotCQkJICAgInN3aXRjaCBpdCBvZmZcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgyLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCmluZGV4IGVlZmM2NjEuLjFiYmFlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9zMzkwL3pmY3BkdW1wLnR4dAogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA3CisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwOAogICogQXV0aG9yKHMpOiBNaWNoYWVsIEhvbHpoZXUKICAqLwogCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgInNjbHAuaCIKIAogI2RlZmluZSBUUkFDRSh4Li4uKSBkZWJ1Z19zcHJpbnRmX2V2ZW50KHpjb3JlX2RiZiwgMSwgeCkKQEAgLTQ4LDEyICs0OSwxOSBAQAogCXVuaW9uIHNhdmVfYXJlYQlsY19tYXNrOwogfTsKIAorc3RydWN0IGlwaWJfaW5mbyB7CisJdW5zaWduZWQgbG9uZwlpcGliOworCXUzMgkJY2hlY2tzdW07Cit9ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RhdGljIHN0cnVjdCBzeXNfaW5mbyBzeXNfaW5mbzsKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfaW5mbyAqemNvcmVfZGJmOwogc3RhdGljIGludCBoc2FfYXZhaWxhYmxlOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX2RpcjsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9maWxlOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX21lbW1hcF9maWxlOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX3JlaXBsX2ZpbGU7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwbF9ibG9jazsKIAogLyoKICAqIENvcHkgbWVtb3J5IGZyb20gSFNBIHRvIGtlcm5lbCBvciB1c2VyIG1lbW9yeSAobm90IHJlZW50cmFudCk6CkBAIC01MjcsNiArNTM1LDMzIEBACiAJLnJlbGVhc2UJPSB6Y29yZV9tZW1tYXBfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHpjb3JlX3JlaXBsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAoaXBsX2Jsb2NrKSB7CisJCWRpYWczMDgoRElBRzMwOF9TRVQsIGlwbF9ibG9jayk7CisJCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgemNvcmVfcmVpcGxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6Y29yZV9yZWlwbF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6Y29yZV9yZWlwbF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkud3JpdGUJCT0gemNvcmVfcmVpcGxfd3JpdGUsCisJLm9wZW4JCT0gemNvcmVfcmVpcGxfb3BlbiwKKwkucmVsZWFzZQk9IHpjb3JlX3JlaXBsX3JlbGVhc2UsCit9OworCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfczM5MF9sY19tYXNrKHVuaW9uIHNhdmVfYXJlYSAqbWFwKQogewpAQCAtNjQ1LDYgKzY4MCw0MCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUHJvdmlkZSBJUEwgcGFyYW1ldGVyIGluZm9ybWF0aW9uIGJsb2NrIGZyb20gZWl0aGVyIEhTQSBvciBtZW1vcnkKKyAqIGZvciBmdXR1cmUgcmVpcGwKKyAqLworc3RhdGljIGludCBfX2luaXQgemNvcmVfcmVpcGxfaW5pdCh2b2lkKQoreworCXN0cnVjdCBpcGliX2luZm8gaXBpYl9pbmZvOworCWludCByYzsKKworCXJjID0gbWVtY3B5X2hzYV9rZXJuZWwoJmlwaWJfaW5mbywgX19MQ19EVU1QX1JFSVBMLCBzaXplb2YoaXBpYl9pbmZvKSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKGlwaWJfaW5mby5pcGliID09IDApCisJCXJldHVybiAwOworCWlwbF9ibG9jayA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWlwbF9ibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGlwaWJfaW5mby5pcGliIDwgWkZDUERVTVBfSFNBX1NJWkUpCisJCXJjID0gbWVtY3B5X2hzYV9rZXJuZWwoaXBsX2Jsb2NrLCBpcGliX2luZm8uaXBpYiwgUEFHRV9TSVpFKTsKKwllbHNlCisJCXJjID0gbWVtY3B5X3JlYWwoaXBsX2Jsb2NrLCBpcGliX2luZm8uaXBpYiwgUEFHRV9TSVpFKTsKKwlpZiAocmMpIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCQlyZXR1cm4gcmM7CisJfQorCWlmIChjc3VtX3BhcnRpYWwoaXBsX2Jsb2NrLCBpcGxfYmxvY2stPmhkci5sZW4sIDApICE9CisJICAgIGlwaWJfaW5mby5jaGVja3N1bSkgeworCQlUUkFDRSgiQ2hlY2tzdW0gZG9lcyBub3QgbWF0Y2hcbiIpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlwbF9ibG9jayk7CisJCWlwbF9ibG9jayA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCB6Y29yZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBhcmNoOwpAQCAtNjkwLDYgKzc1OSwxMCBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCisJcmMgPSB6Y29yZV9yZWlwbF9pbml0KCk7CisJaWYgKHJjKQorCQlnb3RvIGZhaWw7CisKIAl6Y29yZV9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInpjb3JlIiAsIE5VTEwpOwogCWlmICghemNvcmVfZGlyKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTcwNyw5ICs3ODAsMTcgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmlsZTsKIAl9CisJemNvcmVfcmVpcGxfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlaXBsIiwgU19JUlVTUiwgemNvcmVfZGlyLAorCQkJCQkJTlVMTCwgJnpjb3JlX3JlaXBsX2ZvcHMpOworCWlmICghemNvcmVfcmVpcGxfZmlsZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tZW1tYXBfZmlsZTsKKwl9CiAJaHNhX2F2YWlsYWJsZSA9IDE7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfbWVtbWFwX2ZpbGU6CisJZGVidWdmc19yZW1vdmUoemNvcmVfbWVtbWFwX2ZpbGUpOwogZmFpbF9maWxlOgogCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX2ZpbGUpOwogZmFpbF9kaXI6CkBAIC03MjMsMTAgKzgwNCwxNSBAQAogewogCWRlYnVnX3VucmVnaXN0ZXIoemNvcmVfZGJmKTsKIAlzY2xwX3NkaWFzX2V4aXQoKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlwbF9ibG9jayk7CisJZGVidWdmc19yZW1vdmUoemNvcmVfcmVpcGxfZmlsZSk7CisJZGVidWdmc19yZW1vdmUoemNvcmVfbWVtbWFwX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX2Rpcik7CiAJZGlhZzMwOChESUFHMzA4X1JFTF9IU0EsIE5VTEwpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwNyIpOworTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDgiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiemNvcmUgbW9kdWxlIGZvciB6ZmNwZHVtcCBzdXBwb3J0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCmluZGV4IGJkNzliZDEuLmFkYjNkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogb2JqLXkgKz0gYWlycS5vIGJsYWNrbGlzdC5vIGNoc2MubyBjaW8ubyBjc3MubyBjaHAubyBpZHNldC5vIGlzYy5vIHNjc3cubyBcCi0JZmN4Lm8gaXRjdy5vCisJZmN4Lm8gaXRjdy5vIGNydy5vCiBjY3dfZGV2aWNlLW9ianMgKz0gZGV2aWNlLm8gZGV2aWNlX2ZzbS5vIGRldmljZV9vcHMubwogY2N3X2RldmljZS1vYmpzICs9IGRldmljZV9pZC5vIGRldmljZV9wZ2lkLm8gZGV2aWNlX3N0YXR1cy5vCiBvYmoteSArPSBjY3dfZGV2aWNlLm8gY21mLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jIGIvZHJpdmVycy9zMzkwL2Npby9haXJxLmMKaW5kZXggZmU2Y2VhMS4uNjVkMmU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9haXJxLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9haXJxLmMKQEAgLTM0LDggKzM0LDggQEAKIAl2b2lkICpkcnZfZGF0YTsKIH07CiAKLXN0YXRpYyB1bmlvbiBpbmRpY2F0b3JfdCBpbmRpY2F0b3JzW01BWF9JU0NdOwotc3RhdGljIHN0cnVjdCBhaXJxX3QgKmFpcnFzW01BWF9JU0NdW05SX0FJUlFTXTsKK3N0YXRpYyB1bmlvbiBpbmRpY2F0b3JfdCBpbmRpY2F0b3JzW01BWF9JU0MrMV07CitzdGF0aWMgc3RydWN0IGFpcnFfdCAqYWlycXNbTUFYX0lTQysxXVtOUl9BSVJRU107CiAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfYWlycShzdHJ1Y3QgYWlycV90ICphaXJxLCB1OCBpc2MpCiB7CkBAIC0xMzMsNiArMTMzLDggQEAKIAkJd2hpbGUgKHdvcmQpIHsKIAkJCWlmICh3b3JkICYgSU5ESUNBVE9SX01BU0spIHsKIAkJCQlhaXJxID0gYWlycXNbaXNjXVtpXTsKKwkJCQkvKiBNYWtlIHN1cmUgZ2NjIHJlYWRzIGZyb20gYWlycXMgb25seSBvbmNlLiAqLworCQkJCWJhcnJpZXIoKTsKIAkJCQlpZiAobGlrZWx5KGFpcnEpKQogCQkJCQlhaXJxLT5oYW5kbGVyKCZpbmRpY2F0b3JzW2lzY10uYnl0ZVtpXSwKIAkJCQkJCSAgICAgIGFpcnEtPmRydl9kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCmluZGV4IGZlMDBiZTMuLjY1NjVmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwpAQCAtMzM2LDggKzMzNiw3IEBACiAJCSBzaXplX3QgdXNlcl9sZW4sIGxvZmZfdCAqb2Zmc2V0KQogewogCWNoYXIgKmJ1ZjsKLQlzaXplX3QgaTsKLQlzc2l6ZV90IHJjLCByZXQ7CisJc3NpemVfdCByYywgcmV0LCBpOwogCiAJaWYgKCpvZmZzZXQpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCmluZGV4IDkxOGU2ZmMuLjIyY2U3NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKQEAgLTEwNCw4ICsxMDQsOSBAQAogCXJjID0gZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrKGRldiwgY2N3Z3JvdXBfdW5ncm91cF9jYWxsYmFjayk7CiBvdXQ6CiAJaWYgKHJjKSB7Ci0JCS8qIFJlbGVhc2Ugb25vZmYgImxvY2siIHdoZW4gdW5ncm91cGluZyBmYWlsZWQuICovCi0JCWF0b21pY19zZXQoJmdkZXYtPm9ub2ZmLCAwKTsKKwkJaWYgKHJjICE9IC1FQUdBSU4pCisJCQkvKiBSZWxlYXNlIG9ub2ZmICJsb2NrIiB3aGVuIHVuZ3JvdXBpbmcgZmFpbGVkLiAqLworCQkJYXRvbWljX3NldCgmZ2Rldi0+b25vZmYsIDApOwogCQlyZXR1cm4gcmM7CiAJfQogCXJldHVybiBjb3VudDsKQEAgLTMxNCwxNiArMzE1LDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNjd2dyb3VwX2NyZWF0ZV9mcm9tX3N0cmluZyk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2Njd2dyb3VwICh2b2lkKQorc3RhdGljIGludCBjY3dncm91cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgICAgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2N3Z3JvdXBfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjY3dncm91cF9ub3RpZmllcgorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9jY3dncm91cCh2b2lkKQogewotCXJldHVybiBidXNfcmVnaXN0ZXIgKCZjY3dncm91cF9idXNfdHlwZSk7CisJaW50IHJldDsKKworCXJldCA9IGJ1c19yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoJmNjd2dyb3VwX2J1c190eXBlLCAmY2N3Z3JvdXBfbmIpOworCWlmIChyZXQpCisJCWJ1c191bnJlZ2lzdGVyKCZjY3dncm91cF9idXNfdHlwZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWNsZWFudXBfY2N3Z3JvdXAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9jY3dncm91cCh2b2lkKQogewotCWJ1c191bnJlZ2lzdGVyICgmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZjY3dncm91cF9idXNfdHlwZSwgJmNjd2dyb3VwX25iKTsKKwlidXNfdW5yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X2Njd2dyb3VwKTsKQEAgLTM5MSwyNyArNDA4LDI4IEBACiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgcmV0OwogCi0JZ2RldiA9IHRvX2Njd2dyb3VwZGV2KGRldik7CiAJaWYgKCFkZXYtPmRyaXZlcikKLQkJcmV0dXJuIGNvdW50OworCQlyZXR1cm4gLUVOT0RFVjsKIAotCWdkcnYgPSB0b19jY3dncm91cGRydiAoZ2Rldi0+ZGV2LmRyaXZlcik7CisJZ2RldiA9IHRvX2Njd2dyb3VwZGV2KGRldik7CisJZ2RydiA9IHRvX2Njd2dyb3VwZHJ2KGRldi0+ZHJpdmVyKTsKKwogCWlmICghdHJ5X21vZHVsZV9nZXQoZ2Rydi0+b3duZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKLQlyZXQgPSBjb3VudDsKKwogCWlmICh2YWx1ZSA9PSAxKQotCQljY3dncm91cF9zZXRfb25saW5lKGdkZXYpOworCQlyZXQgPSBjY3dncm91cF9zZXRfb25saW5lKGdkZXYpOwogCWVsc2UgaWYgKHZhbHVlID09IDApCi0JCWNjd2dyb3VwX3NldF9vZmZsaW5lKGdkZXYpOworCQlyZXQgPSBjY3dncm91cF9zZXRfb2ZmbGluZShnZGV2KTsKIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiBvdXQ6CiAJbW9kdWxlX3B1dChnZHJ2LT5vd25lcik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gKHJldCA9PSAwKSA/IGNvdW50IDogcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNDUzLDEzICs0NzEsMTggQEAKIAlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmdkcnY7CiAKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb25saW5lKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdW5ncm91cCk7CisKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm4gMDsKKwogCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7CiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb25saW5lKTsKLQotCWlmIChnZHJ2ICYmIGdkcnYtPnJlbW92ZSkKKwlpZiAoZ2Rydi0+cmVtb3ZlKQogCQlnZHJ2LT5yZW1vdmUoZ2Rldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDY4LDkgKzQ5MSwxMyBAQAogCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CiAJc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqZ2RydjsKIAorCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybjsKKwogCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7Ci0JaWYgKGdkcnYgJiYgZ2Rydi0+c2h1dGRvd24pCisKKwlpZiAoZ2Rydi0+c2h1dGRvd24pCiAJCWdkcnYtPnNodXRkb3duKGdkZXYpOwogfQogCkBAIC00ODMsNiArNTEwLDE5IEBACiAJLnNodXRkb3duID0gY2N3Z3JvdXBfc2h1dGRvd24sCiB9OwogCisKK3N0YXRpYyBpbnQgY2N3Z3JvdXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCWlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSKQorCQlkZXZpY2Vfc2NoZWR1bGVfY2FsbGJhY2soZGV2LCBjY3dncm91cF91bmdyb3VwX2NhbGxiYWNrKTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKwogLyoqCiAgKiBjY3dncm91cF9kcml2ZXJfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgY2N3IGdyb3VwIGRyaXZlcgogICogQGNkcml2ZXI6IGRyaXZlciB0byBiZSByZWdpc3RlcmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwppbmRleCAxMjQ2ZjYxLi4zZTVmMzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9jaHBpZC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJpb2FzbS5oIgpAQCAtNzA2LDEyICs3MDYsMTIgQEAKIAlzdHJ1Y3QgY2hwX2lkIGNocGlkOwogCWludCByZXQ7CiAKLQlyZXQgPSBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1BBVEgsIGNocF9wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DUEFUSCwgY2hwX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCWNocF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW9fY2hwIik7CiAJaWYgKCFjaHBfd3EpIHsKLQkJczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1BBVEgpOworCQljcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1BBVEgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJSU5JVF9XT1JLKCZjZmdfd29yaywgY2ZnX2Z1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCBlYmFiNmVhLi44ODNmMTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGFzbS9jaW8uaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vY2hzYy5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCkBAIC01ODksNiArNTg5LDcgQEAKIAljYXNlIDB4MDEwMjoKIAljYXNlIDB4MDEwMzoKIAkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gY2hzY19lcnJvcl9mcm9tX3Jlc3BvbnNlKHNlY21fYXJlYS0+cmVzcG9uc2UuY29kZSk7CiAJfQpAQCAtODIwLDcgKzgyMSw3IEBACiAJCQkgICAgICAiY2hzYyBtYWNoaW5lIGNoZWNrcyFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUywgY2hzY19wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MsIGNoc2NfcHJvY2Vzc19jcncpOwogCWlmIChyZXQpCiAJCWtmcmVlKHNlaV9wYWdlKTsKIAlyZXR1cm4gcmV0OwpAQCAtODI4LDcgKzgyOSw3IEBACiAKIHZvaWQgX19pbml0IGNoc2NfZnJlZV9zZWlfYXJlYSh2b2lkKQogewotCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CiAJa2ZyZWUoc2VpX3BhZ2UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKaW5kZXggMGEyZjJlZC4uOTNlY2ExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwpAQCAtODQsOCArODQsOCBAQAogCQlrZnJlZShwcml2YXRlKTsKIAl9IGVsc2UgewogCQlzY2gtPnByaXZhdGUgPSBwcml2YXRlOwotCQlpZiAoc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzKSB7Ci0JCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlpZiAoZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2KSkgeworCQkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCA2NTlmOGE3Li4yYWViYjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vaXNjLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9mY3guaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImNoc2MuaCIKQEAgLTM4LDcgKzQwLDYgQEAKICNpbmNsdWRlICJibGFja2xpc3QuaCIKICNpbmNsdWRlICJjaW9fZGVidWcuaCIKICNpbmNsdWRlICJjaHAuaCIKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogCiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7CiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDsKQEAgLTQ3MSw2ICs0NzIsNyBAQAogaW50IGNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKIHsKIAljaGFyIGRiZl90eHRbMTVdOworCWludCByZXRyeTsKIAlpbnQgcmV0OwogCiAJQ0lPX1RSQUNFX0VWRU5UICgyLCAiZGlzc2NoIik7CkBAIC00ODEsMTYgKzQ4MywxNyBAQAogCWlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSAhPSAwKQotCQkvKgotCQkgKiB0aGUgZGlzYWJsZSBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlcmUgYXJlCi0JCSAqICByZXF1ZXN0cyBwZW5kaW5nIGZvciBjb21wbGV0aW9uICEKLQkJICovCi0JCXJldHVybiAtRUJVU1k7Ci0KIAlzY2gtPmNvbmZpZy5lbmEgPSAwOwotCXJldCA9IGNpb19jb21taXRfY29uZmlnKHNjaCk7CiAKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAzOyByZXRyeSsrKSB7CisJCXJldCA9IGNpb19jb21taXRfY29uZmlnKHNjaCk7CisJCWlmIChyZXQgPT0gLUVCVVNZKSB7CisJCQlzdHJ1Y3QgaXJiIGlyYjsKKwkJCWlmICh0c2NoKHNjaC0+c2NoaWQsICZpcmIpICE9IDApCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQogCXNwcmludGYgKGRiZl90eHQsICJyZXQ6JWQiLCByZXQpOwogCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTc2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogICBDaGFubmVsIHJlcG9ydCBoYW5kbGluZyBjb2RlCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgorCitzdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBjcndfc2VtYXBob3JlOworc3RhdGljIERFRklORV9NVVRFWChjcndfaGFuZGxlcl9tdXRleCk7CitzdGF0aWMgY3J3X2hhbmRsZXJfdCBjcndfaGFuZGxlcnNbTlJfUlNDU107CisKKy8qKgorICogY3J3X3JlZ2lzdGVyX2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCisgKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCisgKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCisgKgorICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IGNyd19yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJaWYgKGNyd19oYW5kbGVyc1tyc2NdKQorCQlyYyA9IC1FQlVTWTsKKwllbHNlCisJCWNyd19oYW5kbGVyc1tyc2NdID0gaGFuZGxlcjsKKwltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogY3J3X3VucmVnaXN0ZXJfaGFuZGxlcigpIC0gdW5yZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgorICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQorICovCit2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYykKK3sKKwlpZiAoKHJzYyA8IDApIHx8IChyc2MgPj0gTlJfUlNDUykpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJY3J3X2hhbmRsZXJzW3JzY10gPSBOVUxMOworCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworfQorCisvKgorICogUmV0cmlldmUgQ1JXcyBhbmQgY2FsbCBmdW5jdGlvbiB0byBoYW5kbGUgZXZlbnQuCisgKi8KK3N0YXRpYyBpbnQgY3J3X2NvbGxlY3RfaW5mbyh2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGNydyBjcndbMl07CisJaW50IGNjb2RlOworCXVuc2lnbmVkIGludCBjaGFpbjsKKwlpbnQgaWdub3JlOworCityZXBlYXQ6CisJaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZjcndfc2VtYXBob3JlKTsKKwljaGFpbiA9IDA7CisJd2hpbGUgKDEpIHsKKwkJY3J3X2hhbmRsZXJfdCBoYW5kbGVyOworCisJCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7CisJCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7CisKKwkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKKwkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKKwkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKKwkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgorCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAorCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCisJCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCisJCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOworCQkJaWYgKGNjb2RlICE9IDApCisJCQkJYnJlYWs7CisJCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOworCQlpZiAoY2NvZGUgIT0gMCkKKwkJCWJyZWFrOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCisJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAorCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAorCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKKwkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7CisJCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCisJCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKKwkJCWludCBpOworCisJCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKKwkJCW11dGV4X2xvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKKwkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQorCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7CisJCQl9CisJCQltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJCWNoYWluID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjcndbMF0uY2huICYmICFjaGFpbikgeworCQkJY2hhaW4rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCW11dGV4X2xvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJaGFuZGxlciA9IGNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY107CisJCWlmIChoYW5kbGVyKQorCQkJaGFuZGxlcigmY3J3WzBdLCBjaGFpbiA/ICZjcndbMV0gOiBOVUxMLCAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KKwkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7CisJfQorCWdvdG8gcmVwZWF0OworCXJldHVybiAwOworfQorCit2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCkKK3sKKwl1cCgmY3J3X3NlbWFwaG9yZSk7Cit9CisKKy8qCisgKiBTZXBhcmF0ZSBpbml0Y2FsbCBuZWVkZWQgZm9yIHNlbWFwaG9yZSBpbml0aWFsaXphdGlvbiBzaW5jZQorICogY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCBtaWdodCBiZSBjYWxsZWQgYmVmb3JlIGNyd19tYWNoaW5lX2NoZWNrX2luaXQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyd19pbml0X3NlbWFwaG9yZSh2b2lkKQoreworCWluaXRfTVVURVhfTE9DS0VEKCZjcndfc2VtYXBob3JlKTsKKwlyZXR1cm4gMDsKK30KK3B1cmVfaW5pdGNhbGwoY3J3X2luaXRfc2VtYXBob3JlKTsKKworLyoKKyAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCisgKiBhZnRlciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgY3J3X21hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKworCXRhc2sgPSBrdGhyZWFkX3J1bihjcndfY29sbGVjdF9pbmZvLCBOVUxMLCAia21jaGVjayIpOworCWlmIChJU19FUlIodGFzaykpCisJCXJldHVybiBQVFJfRVJSKHRhc2spOworCWN0bF9zZXRfYml0KDE0LCAyOCk7CS8qIGVuYWJsZSBjaGFubmVsIHJlcG9ydCBNQ0ggKi8KKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChjcndfbWFjaGluZV9jaGVja19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDgwMTkyODguLjAwODVkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vaXNjLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjaW9fZGVidWcuaCIKQEAgLTgzLDYgKzgzLDI1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGNhbGxfZm5fYWxsX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2JfZGF0YSAqY2IgPSBkYXRhOworCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJjID0gMDsKKworCXNjaCA9IGdldF9zdWJjaGFubmVsX2J5X3NjaGlkKHNjaGlkKTsKKwlpZiAoc2NoKSB7CisJCWlmIChjYi0+Zm5fa25vd25fc2NoKQorCQkJcmMgPSBjYi0+Zm5fa25vd25fc2NoKHNjaCwgY2ItPmRhdGEpOworCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CisJfSBlbHNlIHsKKwkJaWYgKGNiLT5mbl91bmtub3duX3NjaCkKKwkJCXJjID0gY2ItPmZuX3Vua25vd25fc2NoKHNjaGlkLCBjYi0+ZGF0YSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCiBpbnQgZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoaW50ICgqZm5fa25vd24pKHN0cnVjdCBzdWJjaGFubmVsICosIHZvaWQgKiksCiAJCQkgICAgICAgaW50ICgqZm5fdW5rbm93bikoc3RydWN0IHN1YmNoYW5uZWxfaWQsCiAJCQkgICAgICAgdm9pZCAqKSwgdm9pZCAqZGF0YSkKQEAgLTkwLDEzICsxMDksMTcgQEAKIAlzdHJ1Y3QgY2JfZGF0YSBjYjsKIAlpbnQgcmM7CiAKLQljYi5zZXQgPSBpZHNldF9zY2hfbmV3KCk7Ci0JaWYgKCFjYi5zZXQpCi0JCXJldHVybiAtRU5PTUVNOwotCWlkc2V0X2ZpbGwoY2Iuc2V0KTsKIAljYi5kYXRhID0gZGF0YTsKIAljYi5mbl9rbm93bl9zY2ggPSBmbl9rbm93bjsKIAljYi5mbl91bmtub3duX3NjaCA9IGZuX3Vua25vd247CisKKwljYi5zZXQgPSBpZHNldF9zY2hfbmV3KCk7CisJaWYgKCFjYi5zZXQpCisJCS8qIGZhbGwgYmFjayB0byBicnV0ZSBmb3JjZSBzY2FubmluZyBpbiBjYXNlIG9mIG9vbSAqLworCQlyZXR1cm4gZm9yX2VhY2hfc3ViY2hhbm5lbChjYWxsX2ZuX2FsbF9zY2gsICZjYik7CisKKwlpZHNldF9maWxsKGNiLnNldCk7CisKIAkvKiBQcm9jZXNzIHJlZ2lzdGVyZWQgc3ViY2hhbm5lbHMuICovCiAJcmMgPSBidXNfZm9yX2VhY2hfZGV2KCZjc3NfYnVzX3R5cGUsIE5VTEwsICZjYiwgY2FsbF9mbl9rbm93bl9zY2gpOwogCWlmIChyYykKQEAgLTI3Miw3ICsyOTUsNyBAQAogCSAqIHRoZSBzdWJjaGFubmVsIGRyaXZlciBjYW4gZGVjaWRlIGl0c2VsZiB3aGVuIGl0IHdhbnRzIHRvIGluZm9ybQogCSAqIHVzZXJzcGFjZSBvZiBpdHMgZXhpc3RlbmNlLgogCSAqLwotCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAxKTsKIAljc3NfdXBkYXRlX3NzZF9pbmZvKHNjaCk7CiAJLyogbWFrZSBpdCBrbm93biB0byB0aGUgc3lzdGVtICovCiAJcmV0ID0gY3NzX3NjaF9kZXZpY2VfcmVnaXN0ZXIoc2NoKTsKQEAgLTI4Nyw3ICszMTAsNyBAQAogCQkgKiBhIGZpdHRpbmcgZHJpdmVyIG1vZHVsZSBtYXkgYmUgbG9hZGVkIGJhc2VkIG9uIHRoZQogCQkgKiBtb2RhbGlhcy4KIAkJICovCi0JCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC01MTAsNiArNTMzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgcmVwcm9iZV9hZnRlcl9pZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLworCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAorCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAobmVlZF9yZXByb2JlKQorCQljc3Nfc2NoZWR1bGVfcmVwcm9iZSgpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlcHJvYmVfaWRsZV93b3JrLCByZXByb2JlX2FmdGVyX2lkbGUpOworCiAvKiBXb3JrIGZ1bmN0aW9uIHVzZWQgdG8gcmVwcm9iZSBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogc3RhdGljIHZvaWQgcmVwcm9iZV9hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCiB7CkBAIC01MTcsMTAgKzU1MSwxMiBAQAogCiAJQ0lPX01TR19FVkVOVCg0LCAicmVwcm9iZSBzdGFydFxuIik7CiAKLQluZWVkX3JlcHJvYmUgPSAwOwogCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLwotCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAotCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAoYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgIT0gMCkgeworCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJnJlcHJvYmVfaWRsZV93b3JrKTsKKwkJcmV0dXJuOworCX0KKwluZWVkX3JlcHJvYmUgPSAwOwogCXJldCA9IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKE5VTEwsIHJlcHJvYmVfc3ViY2hhbm5lbCwgTlVMTCk7CiAKIAlDSU9fTVNHX0VWRU5UKDQsICJyZXByb2JlIGRvbmUgKHJjPSVkLCBuZWVkX3JlcHJvYmU9JWQpXG4iLCByZXQsCkBAIC02MTksNyArNjU1LDcgQEAKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guZXh0X2Nzc2lkLmNzc2lkID0gY3NzLT5jc3NpZDsKIAl9IGVsc2UgewogI2lmZGVmIENPTkZJR19TTVAKLQkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSBzdGFwKCk7CiAjZWxzZQogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IDA7CiAjZW5kaWYKQEAgLTc2NSw3ICs4MDEsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX1NDSCwgY3NzX3Byb2Nlc3NfY3J3KTsKKwlyZXQgPSBjcndfcmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX1NDSCwgY3NzX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtODQ1LDcgKzg4MSw3IEBACiBvdXRfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpOwogb3V0OgotCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CiAJY2hzY19mcmVlX3NlaV9hcmVhKCk7CiAJa2ZyZWUoc2xvd19zdWJjaGFubmVsX3NldCk7CiAJcHJfYWxlcnQoIlRoZSBDU1MgZGV2aWNlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCAyM2Q1NzUyLi5jNGQyZjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC00NTcsMTIgKzQ1NywxMyBAQAogCXJldHVybiAocmV0ID09IDApID8gLUVOT0RFViA6IHJldDsKIH0KIAotc3RhdGljIHZvaWQgb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQorc3RhdGljIGludCBvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpCiAJCWNjd19kZXZpY2VfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChjZGV2KTsKLQllbHNlIGlmIChjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5zZXRfb2ZmbGluZSkKLQkJY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZGV2KTsKKwllbHNlIGlmIChjZGV2LT5vbmxpbmUgJiYgY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29mZmxpbmUpCisJCXJldHVybiBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNkZXYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9ubGluZV9zdG9yZV9yZWNvZ19hbmRfb25saW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQpAQCAtNTMwLDEzICs1MzEsMTAgQEAKIAkJZ290byBvdXQ7CiAJc3dpdGNoIChpKSB7CiAJY2FzZSAwOgotCQlvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoY2Rldik7Ci0JCXJldCA9IGNvdW50OworCQlyZXQgPSBvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoY2Rldik7CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJcmV0ID0gb25saW5lX3N0b3JlX2hhbmRsZV9vbmxpbmUoY2RldiwgZm9yY2UpOwotCQlpZiAoIXJldCkKLQkJCXJldCA9IGNvdW50OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNTQ1LDcgKzU0Myw3IEBACiAJaWYgKGNkZXYtPmRydikKIAkJbW9kdWxlX3B1dChjZGV2LT5kcnYtPm93bmVyKTsKIAlhdG9taWNfc2V0KCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC02ODEsMzUgKzY3OSwyMiBAQAogCXJldHVybiBkZXYgPyB0b19jY3dkZXYoZGV2KSA6IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1jY3dfZGV2aWNlX2FkZF9jaGFuZ2VkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwotCi0JcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOwotCWNkZXYgPSBwcml2LT5jZGV2OwotCWlmIChkZXZpY2VfYWRkKCZjZGV2LT5kZXYpKSB7Ci0JCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Ci0JCXJldHVybjsKLQl9Ci0Jc2V0X2JpdCgxLCAmY2Rldi0+cHJpdmF0ZS0+cmVnaXN0ZXJlZCk7Ci19Ci0KLXZvaWQgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKwlpbnQgcmV0OwogCiAJcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOwogCWNkZXYgPSBwcml2LT5jZGV2OwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKLQljY3dfZGV2aWNlX3VucmVnaXN0ZXIoY2Rldik7Ci0JUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCSAgICAgY2N3X2RldmljZV9hZGRfY2hhbmdlZCk7Ci0JcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOworCWlmICh0ZXN0X2JpdCgxLCAmY2Rldi0+cHJpdmF0ZS0+cmVnaXN0ZXJlZCkpIHsKKwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZjZGV2LT5kZXYpOworCQlyZXQgPSBkZXZpY2VfYXR0YWNoKCZjZGV2LT5kZXYpOworCQlXQVJOX09OKHJldCA9PSAtRU5PREVWKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC03OTksNyArNzg0LDcgQEAKIAkJcmV0dXJuOwogCW90aGVyX3NjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJLyogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQgKi8KLQlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldiwgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkaXNjb25uZWN0ZWQgZGV2aWNlIDAuJXguJTA0eCBmYWlsZWQgIgogCQkJICAgICAgIihyZXQ9JWQpIVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCkBAIC04MzAsNyArODE1LDcgQEAKIAkgKiBUcnkgdG8gbW92ZSB0aGUgY2N3IGRldmljZSB0byBpdHMgbmV3IHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldiwgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IGZyb20gb3JwaGFuYWdlICIKIAkJCSAgICAgICJmYWlsZWQgKHJldD0lZCkhXG4iLApAQCAtODk3LDcgKzg4Miw4IEBACiAJICogY2N3IGRldmljZSBjYW4gdGFrZSBpdHMgcGxhY2Ugb24gdGhlIHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmY3NzLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmY3NzLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2LAorCQlEUE1fT1JERVJfTk9ORSk7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCB0byBvcnBoYW5hZ2UgZmFpbGVkICIKIAkJCSAgICAgICIocmV0PSVkKSFcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLApAQCAtOTgxLDcgKzk2Nyw3IEBACiAJICogTm93IHdlIGtub3cgdGhpcyBzdWJjaGFubmVsIHdpbGwgc3RheSwgd2UgY2FuIHRocm93CiAJICogb3VyIGRlbGF5ZWQgdWV2ZW50LgogCSAqLwotCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGNjd19kZXZpY2VfcmVnaXN0ZXIoY2Rldik7CkBAIC0xMDM0LDggKzEwMjAsNiBAQAogdm9pZAogaW9fc3ViY2hhbm5lbF9yZWNvZ19kb25lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0KIAlpZiAoY3NzX2luaXRfZG9uZSA9PSAwKSB7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlY29nX2RvbmUgPSAxOwogCQlyZXR1cm47CkBAIC0xMDQ2LDcgKzEwMzAsNiBAQAogCQkvKiBSZW1vdmUgZGV2aWNlIGZvdW5kIG5vdCBvcGVyYXRpb25hbC4gKi8KIAkJaWYgKCFnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKQogCQkJYnJlYWs7Ci0JCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAogCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwogCQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CkBAIC0xMTI5LDcgKzExMTIsNyBAQAogCSAqIFRyeSB0byBtb3ZlIHRoZSBjY3cgZGV2aWNlIHRvIGl0cyBuZXcgc3ViY2hhbm5lbC4KIAkgKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudAogCSAqLwotCXJjID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyYyA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldiwgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWKTsKIAltdXRleF91bmxvY2soJnNjaC0+cmVnX211dGV4KTsKIAlpZiAocmMpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggdG8gc3ViY2hhbm5lbCAiCkBAIC0xMjQzLDcgKzEyMjYsNyBAQAogCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4gVGhpcyBoYXBwZW5zIGZvciBhbGwgZWFybHkKIAkJICogZGV2aWNlcywgZS5nLiB0aGUgY29uc29sZS4KIAkJICovCi0JCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJCWNkZXYtPmRldi5ncm91cHMgPSBjY3dkZXZfYXR0cl9ncm91cHM7CiAJCWRldmljZV9pbml0aWFsaXplKCZjZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggMGYyZTYzZS4uODVlMDE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC04MCw3ICs4MCw3IEBACiAKIGludCBjY3dfZGV2aWNlX2NhbmNlbF9oYWx0X2NsZWFyKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCi12b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIHZvaWQgY2N3X2RldmljZV9tb3ZlX3RvX29ycGhhbmFnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBpbnQgY2N3X2RldmljZV9pc19vcnBoYW4oc3RydWN0IGNjd19kZXZpY2UgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggOGRmNWVhYS4uODdiNGJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCSAgICBjZGV2LT5pZC5kZXZfdHlwZSAhPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmRldl90eXBlIHx8CiAJICAgIGNkZXYtPmlkLmRldl9tb2RlbCAhPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmRldl9tb2RlbCkgewogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyk7CisJCQkgICAgIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQpOwogCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCXJldHVybiAwOwogCX0KQEAgLTM2Niw3ICszNjYsNyBAQAogCX0KIAkvKiBEcml2ZXIgZG9lc24ndCB3YW50IGRldmljZSBiYWNrLiAqLwogCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7Ci0JUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcpOworCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKTsKIAlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiB9CiAKQEAgLTcyOCw3ICs3MjgsNyBAQAogewogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAKLQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9OT1RfT1BFUjsKKwljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJY3NzX3NjaGVkdWxlX2V2YWwoc2NoLT5zY2hpZCk7CiB9CkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJLyoKIAkgKiBBbiBpbnRlcnJ1cHQgaW4gc3RhdGUgb2ZmbGluZSBtZWFucyBhIHByZXZpb3VzIGRpc2FibGUgd2FzIG5vdAotCSAqIHN1Y2Nlc3NmdWwuIFRyeSBhZ2Fpbi4KKwkgKiBzdWNjZXNzZnVsIC0gc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSB0cnkgdG8gZGlzYWJsZSBhZ2Fpbi4KIAkgKi8KIAljaW9fZGlzYWJsZV9zdWJjaGFubmVsKHNjaCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCmluZGV4IGVhYmNjNDIuLjE1MTc1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCkBAIC02ODAsNyArNjgwLDcgQEAKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKCFzY3N3X2lzX3RtKCZzY2gtPnNjaGliLnNjc3cpIHx8Ci0JICAgICEoc2Nzd19hY3RsKCZzY2gtPnNjaGliLnNjc3cpIHwgU0NTV19BQ1RMX1NUQVJUX1BFTkQpKQorCSAgICAhKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSAmIFNDU1dfQUNUTF9TVEFSVF9QRU5EKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNpb190bV9pbnRyZyhzY2gpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0MmYyYjA5Li4xM2JjYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMTg2LDYgKzE4Niw5IEBACiAJLyogaW5wdXQgYnVmZmVyIGFja25vd2xlZGdlbWVudCBmbGFnICovCiAJaW50IHBvbGxpbmc7CiAKKwkvKiBmaXJzdCBBQ0snZWQgYnVmZmVyICovCisJaW50IGFja19zdGFydDsKKwogCS8qIGhvdyBtdWNoIHNiYWxzIGFyZSBhY2tub3dsZWRnZWQgd2l0aCBxZWJzbSAqLwogCWludCBhY2tfY291bnQ7CiAKQEAgLTIzNCw3ICsyMzcsNyBAQAogCWludCBmaXJzdF90b19jaGVjazsKIAogCS8qIGZpcnN0X3RvX2NoZWNrIG9mIHRoZSBsYXN0IHRpbWUgKi8KLQlpbnQgbGFzdF9tb3ZlX2Z0YzsKKwlpbnQgbGFzdF9tb3ZlOwogCiAJLyogYmVnaW5uaW5nIHBvc2l0aW9uIGZvciBjYWxsaW5nIHRoZSBwcm9ncmFtICovCiAJaW50IGZpcnN0X3RvX2tpY2s7CkBAIC0yNDQsNyArMjQ3LDYgQEAKIAogCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLQlzcGlubG9ja190IGxvY2s7CiAKIAkvKiBlcnJvciBjb25kaXRpb24gZHVyaW5nIGEgZGF0YSB0cmFuc2ZlciAqLwogCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yOwpAQCAtMzU0LDcgKzM1Niw3IEBACiAJCSAgaW50IGF1dG9fYWNrKTsKIHZvaWQgcWRpb19jaGVja19vdXRib3VuZF9hZnRlcl90aGluaW50KHN0cnVjdCBxZGlvX3EgKnEpOwogaW50IHFkaW9faW5ib3VuZF9xX21vdmVkKHN0cnVjdCBxZGlvX3EgKnEpOwotdm9pZCBxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpOwordm9pZCBxZGlvX2tpY2tfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKTsKIHZvaWQgcWRpb19zdG9wX3BvbGxpbmcoc3RydWN0IHFkaW9fcSAqcSk7CiBpbnQgcWRpb19zaWdhX3N5bmNfcShzdHJ1Y3QgcWRpb19xICpxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwppbmRleCBkYTdhZmIwLi5lMzQzNGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtNjMsOCArNjMsOSBAQAogCXNlcV9wcmludGYobSwgImRldmljZSBzdGF0ZSBpbmRpY2F0b3I6ICVkXG4iLCAqKHUzMiAqKXEtPmlycV9wdHItPmRzY2kpOwogCXNlcV9wcmludGYobSwgIm5yX3VzZWQ6ICVkXG4iLCBhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpKTsKIAlzZXFfcHJpbnRmKG0sICJmdGM6ICVkXG4iLCBxLT5maXJzdF90b19jaGVjayk7Ci0Jc2VxX3ByaW50ZihtLCAibGFzdF9tb3ZlX2Z0YzogJWRcbiIsIHEtPmxhc3RfbW92ZV9mdGMpOworCXNlcV9wcmludGYobSwgImxhc3RfbW92ZTogJWRcbiIsIHEtPmxhc3RfbW92ZSk7CiAJc2VxX3ByaW50ZihtLCAicG9sbGluZzogJWRcbiIsIHEtPnUuaW4ucG9sbGluZyk7CisJc2VxX3ByaW50ZihtLCAiYWNrIHN0YXJ0OiAlZFxuIiwgcS0+dS5pbi5hY2tfc3RhcnQpOwogCXNlcV9wcmludGYobSwgImFjayBjb3VudDogJWRcbiIsIHEtPnUuaW4uYWNrX2NvdW50KTsKIAlzZXFfcHJpbnRmKG0sICJzbHNiIGJ1ZmZlciBzdGF0ZXM6XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJ8MCAgICAgIHw4ICAgICAgfDE2ICAgICB8MjQgICAgIHwzMiAgICAgfDQwICAgICB8NDggICAgIHw1NiAgNjN8XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDEwY2IwZjguLjllOGEyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMzgwLDExICszODAsMTEgQEAKIAogCS8qIHNob3cgdGhlIGNhcmQgdGhhdCB3ZSBhcmUgbm90IHBvbGxpbmcgYW55bW9yZSAqLwogCWlmIChpc19xZWJzbShxKSkgewotCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJCXNldF9idWZfc3RhdGVzKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCQkgICAgICAgcS0+dS5pbi5hY2tfY291bnQpOwogCQlxLT51LmluLmFja19jb3VudCA9IDA7CiAJfSBlbHNlCi0JCXNldF9idWZfc3RhdGUocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKKwkJc2V0X2J1Zl9zdGF0ZShxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKIH0KIAogc3RhdGljIHZvaWQgYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKQEAgLTQxOSwxNSArNDE5LDE1IEBACiAJCWlmICghcS0+dS5pbi5wb2xsaW5nKSB7CiAJCQlxLT51LmluLnBvbGxpbmcgPSAxOwogCQkJcS0+dS5pbi5hY2tfY291bnQgPSBjb3VudDsKLQkJCXEtPmxhc3RfbW92ZV9mdGMgPSBxLT5maXJzdF90b19jaGVjazsKKwkJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gcS0+Zmlyc3RfdG9fY2hlY2s7CiAJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBkZWxldGUgdGhlIHByZXZpb3VzIEFDSydzICovCi0JCXNldF9idWZfc3RhdGVzKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKKwkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJCSAgICAgICBxLT51LmluLmFja19jb3VudCk7CiAJCXEtPnUuaW4uYWNrX2NvdW50ID0gY291bnQ7Ci0JCXEtPmxhc3RfbW92ZV9mdGMgPSBxLT5maXJzdF90b19jaGVjazsKKwkJcS0+dS5pbi5hY2tfc3RhcnQgPSBxLT5maXJzdF90b19jaGVjazsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDM5LDE0ICs0MzksMTMgQEAKIAlpZiAocS0+dS5pbi5wb2xsaW5nKSB7CiAJCS8qIHJlc2V0IHRoZSBwcmV2aW91cyBBQ0sgYnV0IGZpcnN0IHNldCB0aGUgbmV3IG9uZSAqLwogCQlzZXRfYnVmX3N0YXRlKHEsIG5ldywgU0xTQl9QX0lOUFVUX0FDSyk7Ci0JCXNldF9idWZfc3RhdGUocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKLQl9Ci0JZWxzZSB7CisJCXNldF9idWZfc3RhdGUocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CisJfSBlbHNlIHsKIAkJcS0+dS5pbi5wb2xsaW5nID0gMTsKLQkJc2V0X2J1Zl9zdGF0ZShxLCBxLT5maXJzdF90b19jaGVjaywgU0xTQl9QX0lOUFVUX0FDSyk7CisJCXNldF9idWZfc3RhdGUocSwgbmV3LCBTTFNCX1BfSU5QVVRfQUNLKTsKIAl9CiAKLQlxLT5sYXN0X21vdmVfZnRjID0gbmV3OworCXEtPnUuaW4uYWNrX3N0YXJ0ID0gbmV3OwogCWNvdW50LS07CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJICogTmVlZCB0byBjaGFuZ2UgYWxsIFBSSU1FRCBidWZmZXJzIHRvIE5PVF9JTklULCBvdGhlcndpc2UKIAkgKiB3ZSdyZSBsb29zaW5nIGluaXRpYXRpdmUgaW4gdGhlIHRoaW5pbnQgY29kZS4KIAkgKi8KLQlzZXRfYnVmX3N0YXRlcyhxLCBuZXh0X2J1ZihxLT5maXJzdF90b19jaGVjayksIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKKwlzZXRfYnVmX3N0YXRlcyhxLCBxLT5maXJzdF90b19jaGVjaywgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkgICAgICAgY291bnQpOwogfQogCkBAIC01MjMsNyArNTIyLDggQEAKIAogCWJ1Zm5yID0gZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHEpOwogCi0JaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmVfZnRjKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmUpIHx8IHEtPnFkaW9fZXJyb3IpIHsKKwkJcS0+bGFzdF9tb3ZlID0gYnVmbnI7CiAJCWlmICghbmVlZF9zaWdhX3N5bmMocSkgJiYgIXBjaV9vdXRfc3VwcG9ydGVkKHEpKQogCQkJcS0+dS5pbi50aW1lc3RhbXAgPSBnZXRfdXNlY3MoKTsKIApAQCAtNTcwLDI5ICs1NzAsMzAgQEAKIAl9CiB9CiAKLXZvaWQgcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKQordm9pZCBxZGlvX2tpY2tfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKQogewotCWludCBjb3VudCwgc3RhcnQsIGVuZDsKLQotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5pbmJvdW5kX2hhbmRsZXIpOwotCi0Jc3RhcnQgPSBxLT5maXJzdF90b19raWNrOwotCWVuZCA9IHEtPmZpcnN0X3RvX2NoZWNrOwotCWlmIChlbmQgPj0gc3RhcnQpCi0JCWNvdW50ID0gZW5kIC0gc3RhcnQ7Ci0JZWxzZQotCQljb3VudCA9IGVuZCArIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBzdGFydDsKLQotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCWludCBzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7CisJaW50IGVuZCA9IHEtPmZpcnN0X3RvX2NoZWNrOworCWludCBjb3VudDsKIAogCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9BQ1RJVkUpKQogCQlyZXR1cm47CiAKLQlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLAotCQkgICBzdGFydCwgY291bnQsIHEtPmlycV9wdHItPmludF9wYXJtKTsKKwljb3VudCA9IHN1Yl9idWYoZW5kLCBzdGFydCk7CisKKwlpZiAocS0+aXNfaW5wdXRfcSkgeworCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuaW5ib3VuZF9oYW5kbGVyKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtvaDogbnI6JTFkIiwgcS0+bnIpOworCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCX0KKworCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKKwkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwogCiAJLyogZm9yIHRoZSBuZXh0IHRpbWUgKi8KLQlxLT5maXJzdF90b19raWNrID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJcS0+Zmlyc3RfdG9fa2ljayA9IGVuZDsKIAlxLT5xZGlvX2Vycm9yID0gMDsKIH0KIApAQCAtNjAzLDcgKzYwNCw3IEBACiAJaWYgKCFxZGlvX2luYm91bmRfcV9tb3ZlZChxKSkKIAkJcmV0dXJuOwogCi0JcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihxKTsKKwlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkKIAkJLyogbWVhbnMgcG9sbCB0aW1lIGlzIG5vdCB5ZXQgb3ZlciAqLwpAQCAtNjk4LDIxICs2OTksMjEgQEAKIAogCWJ1Zm5yID0gZ2V0X291dGJvdW5kX2J1ZmZlcl9mcm9udGllcihxKTsKIAotCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlX2Z0YykgfHwgcS0+cWRpb19lcnJvcikgewotCQlxLT5sYXN0X21vdmVfZnRjID0gYnVmbnI7CisJaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmUpIHx8IHEtPnFkaW9fZXJyb3IpIHsKKwkJcS0+bGFzdF9tb3ZlID0gYnVmbnI7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgbW92ZWQ6JTFkIiwgcS0+bnIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHFkaW9fa2lja19vdXRib3VuZF9xKHN0cnVjdCBxZGlvX3EgKnEpCitzdGF0aWMgaW50IHFkaW9fa2lja19vdXRib3VuZF9xKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJdW5zaWduZWQgaW50IGJ1c3lfYml0OwogCWludCBjYzsKIAogCWlmICghbmVlZF9zaWdhX291dChxKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXc6JTFkIiwgcS0+bnIpOwogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5zaWdhX291dCk7CkBAIC03MjQsNzUgKzcyNSwzNyBAQAogCWNhc2UgMjoKIAkJaWYgKGJ1c3lfYml0KSB7CiAJCQlEQkZfRVJST1IoIiU0eCBjYzIgUkVQOiUxZCIsIFNDSF9OTyhxKSwgcS0+bnIpOwotCQkJcS0+cWRpb19lcnJvciA9IGNjIHwgUURJT19FUlJPUl9TSUdBX0JVU1k7Ci0JCX0gZWxzZSB7Ci0JCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13IGNjMjolMWQiLAotCQkJCSAgICAgIHEtPm5yKTsKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYzsKLQkJfQorCQkJY2MgfD0gUURJT19FUlJPUl9TSUdBX0JVU1k7CisJCX0gZWxzZQorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdyBjYzI6JTFkIiwgcS0+bnIpOwogCQlicmVhazsKIAljYXNlIDE6CiAJY2FzZSAzOgogCQlEQkZfRVJST1IoIiU0eCBTSUdBLVc6JTFkIiwgU0NIX05PKHEpLCBjYyk7Ci0JCXEtPnFkaW9fZXJyb3IgPSBjYzsKIAkJYnJlYWs7CiAJfQotfQotCi1zdGF0aWMgdm9pZCBxZGlvX2tpY2tfb3V0Ym91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKQotewotCWludCBzdGFydCwgZW5kLCBjb3VudDsKLQotCXN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKLQllbmQgPSBxLT5sYXN0X21vdmVfZnRjOwotCWlmIChlbmQgPj0gc3RhcnQpCi0JCWNvdW50ID0gZW5kIC0gc3RhcnQ7Ci0JZWxzZQotCQljb3VudCA9IGVuZCArIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBzdGFydDsKLQotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWNrb3V0aDogJTFkIiwgcS0+bnIpOwotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7Ci0KLQlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfQUNUSVZFKSkKLQkJcmV0dXJuOwotCi0JcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwgc3RhcnQsIGNvdW50LAotCQkgICBxLT5pcnFfcHRyLT5pbnRfcGFybSk7Ci0KLQkvKiBmb3IgdGhlIG5leHQgdGltZTogKi8KLQlxLT5maXJzdF90b19raWNrID0gcS0+bGFzdF9tb3ZlX2Z0YzsKLQlxLT5xZGlvX2Vycm9yID0gMDsKKwlyZXR1cm4gY2M7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcWRpb19vdXRib3VuZF9wcm9jZXNzaW5nKHN0cnVjdCBxZGlvX3EgKnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50YXNrbGV0X291dGJvdW5kKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwotCiAJQlVHX09OKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkgPCAwKTsKIAogCWlmIChxZGlvX291dGJvdW5kX3FfbW92ZWQocSkpCi0JCXFkaW9fa2lja19vdXRib3VuZF9oYW5kbGVyKHEpOworCQlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fWkZDUF9RRk1UKSB7CisJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19aRkNQX1FGTVQpCiAJCWlmICghcGNpX291dF9zdXBwb3J0ZWQocSkgJiYgIXFkaW9fb3V0Ym91bmRfcV9kb25lKHEpKQotCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7Ci0JCXJldHVybjsKLQl9CisJCQlnb3RvIHNjaGVkOwogCiAJLyogYmFpbCBvdXQgZm9yIEhpcGVyU29ja2V0cyB1bmljYXN0IHF1ZXVlcyAqLwogCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCAmJiAhbXVsdGljYXN0X291dGJvdW5kKHEpKQogCQlyZXR1cm47CiAKIAlpZiAoKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UKSAmJgotCSAgICAoYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSkgPiBRRElPX0lRRElPX1BPTExfTFZMKSB7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwotCQlyZXR1cm47Ci0JfQorCSAgICAoYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSkgPiBRRElPX0lRRElPX1BPTExfTFZMKQorCQlnb3RvIHNjaGVkOwogCiAJaWYgKHEtPnUub3V0LnBjaV9vdXRfZW5hYmxlZCkKIAkJcmV0dXJuOwpAQCAtODEwLDYgKzc3MywxMiBAQAogCQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmRlYnVnX3RsX291dF90aW1lcik7CiAJCX0KIAl9CisJcmV0dXJuOworCitzY2hlZDoKKwlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKKwl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIH0KIAogLyogb3V0Ym91bmQgdGFza2xldCAqLwpAQCAtODIyLDYgKzc5MSw5IEBACiB2b2lkIHFkaW9fb3V0Ym91bmRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBxZGlvX3EgKnEgPSAoc3RydWN0IHFkaW9fcSAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIH0KIApAQCAtODYzLDYgKzgzNSw5IEBACiAJaW50IGk7CiAJc3RydWN0IHFkaW9fcSAqcTsKIAorCWlmICh1bmxpa2VseShpcnFfcHRyLT5zdGF0ZSA9PSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJcmV0dXJuOworCiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnBjaV9pbnQpOwogCiAJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKQEAgLTEwNjUsOCArMTA0MCw5IEBACiAgKiBAY2RldjogYXNzb2NpYXRlZCBjY3cgZGV2aWNlCiAgKiBAaG93OiB1c2UgaGFsdCBvciBjbGVhciB0byBzaHV0ZG93bgogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgcWRpb19zaHV0ZG93bigpIGZvciBAY2RldiB3aXRoIG1ldGhvZCBAaG93Ci0gKiBhbmQgb24gc3VjY2VzcyBxZGlvX2ZyZWUoKSBmb3IgQGNkZXYuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHFkaW9fc2h1dGRvd24oKSBmb3IgQGNkZXYgd2l0aCBtZXRob2QgQGhvdy4KKyAqIGFuZCBxZGlvX2ZyZWUoKS4gVGhlIHFkaW9fZnJlZSgpIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkIHNpbmNlCisgKiAhaXJxX3B0ciBpcyBhbHJlYWR5IGNoZWNrZWQuCiAgKi8KIGludCBxZGlvX2NsZWFudXAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBob3cpCiB7CkBAIC0xMDc3LDggKzEwNTMsOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJjID0gcWRpb19zaHV0ZG93bihjZGV2LCBob3cpOwotCWlmIChyYyA9PSAwKQotCQlyYyA9IHFkaW9fZnJlZShjZGV2KTsKKworCXFkaW9fZnJlZShjZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2NsZWFudXApOwpAQCAtMTA5MCwxMSArMTA2NiwxMSBAQAogCWludCBpOwogCiAJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKLQkJdGFza2xldF9kaXNhYmxlKCZxLT50YXNrbGV0KTsKKwkJdGFza2xldF9raWxsKCZxLT50YXNrbGV0KTsKIAogCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKSB7Ci0JCXRhc2tsZXRfZGlzYWJsZSgmcS0+dGFza2xldCk7CiAJCWRlbF90aW1lcigmcS0+dS5vdXQudGltZXIpOworCQl0YXNrbGV0X2tpbGwoJnEtPnRhc2tsZXQpOwogCX0KIH0KIApAQCAtMTExMiw2ICsxMDg4LDcgQEAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybiAtRU5PREVWOwogCisJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJREJGX0VWRU5UKCJxc2h1dGRvd246JTR4IiwgY2Rldi0+cHJpdmF0ZS0+c2NoaWQuc2NoX25vKTsKIAogCW11dGV4X2xvY2soJmlycV9wdHItPnNldHVwX211dGV4KTsKQEAgLTExMjQsNiArMTEwMSwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwkvKgorCSAqIEluZGljYXRlIHRoYXQgdGhlIGRldmljZSBpcyBnb2luZyBkb3duLiBTY2hlZHVsaW5nIHRoZSBxdWV1ZQorCSAqIHRhc2tsZXRzIGlzIGZvcmJpZGRlbiBmcm9tIGhlcmUgb24uCisJICovCisJcWRpb19zZXRfc3RhdGUoaXJxX3B0ciwgUURJT19JUlFfU1RBVEVfU1RPUFBFRCk7CisKIAl0aXFkaW9fcmVtb3ZlX2lucHV0X3F1ZXVlcyhpcnFfcHRyKTsKIAlxZGlvX3NodXRkb3duX3F1ZXVlcyhjZGV2KTsKIAlxZGlvX3NodXRkb3duX2RlYnVnX2VudHJpZXMoaXJxX3B0ciwgY2Rldik7CkBAIC0xNDAzLDkgKzEzODYsOCBAQAogCXN3aXRjaCAoaXJxX3B0ci0+c3RhdGUpIHsKIAljYXNlIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQ6CiAJY2FzZSBRRElPX0lSUV9TVEFURV9FUlI6Ci0JCW11dGV4X3VubG9jaygmaXJxX3B0ci0+c2V0dXBfbXV0ZXgpOwotCQlxZGlvX3NodXRkb3duKGNkZXYsIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKTsKLQkJcmV0dXJuIC1FSU87CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcWRpb19zZXRfc3RhdGUoaXJxX3B0ciwgUURJT19JUlFfU1RBVEVfQUNUSVZFKTsKIAkJcmMgPSAwOwpAQCAtMTQ0MiwxMCArMTQyNCwxMCBAQAogICogQGJ1Zm5yOiBmaXJzdCBidWZmZXIgdG8gcHJvY2VzcwogICogQGNvdW50OiBob3cgbWFueSBidWZmZXJzIGFyZSBlbXB0aWVkCiAgKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9pbmJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCi0JCQkgICBpbnQgYnVmbnIsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaGFuZGxlX2luYm91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKKwkJCSAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCiB7Ci0JaW50IHVzZWQsIGNjLCBkaWZmOworCWludCB1c2VkLCBkaWZmOwogCiAJaWYgKCFxLT51LmluLnBvbGxpbmcpCiAJCWdvdG8gc2V0OwpAQCAtMTQ1NiwxOSArMTQzOCwxOCBAQAogCQlxLT51LmluLnBvbGxpbmcgPSAwOwogCQlxLT51LmluLmFja19jb3VudCA9IDA7CiAJCWdvdG8gc2V0OwotCX0gZWxzZSBpZiAoYnVmX2luX2JldHdlZW4ocS0+bGFzdF9tb3ZlX2Z0YywgYnVmbnIsIGNvdW50KSkgeworCX0gZWxzZSBpZiAoYnVmX2luX2JldHdlZW4ocS0+dS5pbi5hY2tfc3RhcnQsIGJ1Zm5yLCBjb3VudCkpIHsKIAkJaWYgKGlzX3FlYnNtKHEpKSB7Ci0JCQkvKiBwYXJ0aWFsIG92ZXJ3cml0ZSwganVzdCB1cGRhdGUgbGFzdF9tb3ZlX2Z0YyAqLworCQkJLyogcGFydGlhbCBvdmVyd3JpdGUsIGp1c3QgdXBkYXRlIGFja19zdGFydCAqLwogCQkJZGlmZiA9IGFkZF9idWYoYnVmbnIsIGNvdW50KTsKLQkJCWRpZmYgPSBzdWJfYnVmKGRpZmYsIHEtPmxhc3RfbW92ZV9mdGMpOworCQkJZGlmZiA9IHN1Yl9idWYoZGlmZiwgcS0+dS5pbi5hY2tfc3RhcnQpOwogCQkJcS0+dS5pbi5hY2tfY291bnQgLT0gZGlmZjsKIAkJCWlmIChxLT51LmluLmFja19jb3VudCA8PSAwKSB7CiAJCQkJcS0+dS5pbi5wb2xsaW5nID0gMDsKIAkJCQlxLT51LmluLmFja19jb3VudCA9IDA7Ci0JCQkJLyogVE9ETzogbXVzdCB3ZSBzZXQgbGFzdF9tb3ZlX2Z0YyB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bD8gKi8KIAkJCQlnb3RvIHNldDsKIAkJCX0KLQkJCXEtPmxhc3RfbW92ZV9mdGMgPSBhZGRfYnVmKHEtPmxhc3RfbW92ZV9mdGMsIGRpZmYpOworCQkJcS0+dS5pbi5hY2tfc3RhcnQgPSBhZGRfYnVmKHEtPnUuaW4uYWNrX3N0YXJ0LCBkaWZmKTsKIAkJfQogCQllbHNlCiAJCQkvKiB0aGUgb25seSBBQ0sgd2lsbCBiZSBkZWxldGVkLCBzbyBzdG9wIHBvbGxpbmcgKi8KQEAgLTE0ODMsMTMgKzE0NjQsMTEgQEAKIAogCS8qIG5vIG5lZWQgdG8gc2lnbmFsIGFzIGxvbmcgYXMgdGhlIGFkYXB0ZXIgaGFkIGZyZWUgYnVmZmVycyAqLwogCWlmICh1c2VkKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCi0JaWYgKG5lZWRfc2lnYV9pbihxKSkgewotCQljYyA9IHFkaW9fc2lnYV9pbnB1dChxKTsKLQkJaWYgKGNjKQotCQkJcS0+cWRpb19lcnJvciA9IGNjOwotCX0KKwlpZiAobmVlZF9zaWdhX2luKHEpKQorCQlyZXR1cm4gcWRpb19zaWdhX2lucHV0KHEpOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE0OTksMTEgKzE0NzgsMTEgQEAKICAqIEBidWZucjogZmlyc3QgYnVmZmVyIHRvIHByb2Nlc3MKICAqIEBjb3VudDogaG93IG1hbnkgYnVmZmVycyBhcmUgZmlsbGVkCiAgKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9vdXRib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAotCQkJICAgIGludCBidWZuciwgaW50IGNvdW50KQorc3RhdGljIGludCBoYW5kbGVfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKKwkJCSAgIGludCBidWZuciwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIGNoYXIgc3RhdGU7Ci0JaW50IHVzZWQ7CisJaW50IHVzZWQsIHJjID0gMDsKIAogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyKTsKIApAQCAtMTUxOCwyNyArMTQ5NywyNiBAQAogCiAJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UKSB7CiAJCWlmIChtdWx0aWNhc3Rfb3V0Ym91bmQocSkpCi0JCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJCWVsc2UKIAkJCWlmICgocS0+aXJxX3B0ci0+c3NxZF9kZXNjLm1td2MgPiAxKSAmJgogCQkJICAgIChjb3VudCA+IDEpICYmCiAJCQkgICAgKGNvdW50IDw9IHEtPmlycV9wdHItPnNzcWRfZGVzYy5tbXdjKSkgewogCQkJCS8qIGV4cGxvaXQgZW5oYW5jZWQgU0lHQSAqLwogCQkJCXEtPnUub3V0LnVzZV9lbmhfc2lnYSA9IDE7Ci0JCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkqIE9uZSBzaWdhLXcgcGVyIGJ1ZmZlciByZXF1aXJlZCBmb3IgdW5pY2FzdAogCQkJCSogSGlwZXJTb2NrZXRzLgogCQkJCSovCiAJCQkJcS0+dS5vdXQudXNlX2VuaF9zaWdhID0gMDsKLQkJCQl3aGlsZSAoY291bnQtLSkKLQkJCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCQkJaWYgKHJjKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQogCQkJfQotCi0JCS8qIHJlcG9ydCBDQz0yIGNvbmRpdGlvbnMgc3luY2hyb25vdXNseSAqLwotCQlpZiAocS0+cWRpb19lcnJvcikKLQkJCV9fcWRpb19vdXRib3VuZF9wcm9jZXNzaW5nKHEpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE1NTAsMTQgKzE1MjgsMTQgQEAKIAkvKiB0cnkgdG8gZmFzdCByZXF1ZXVlIGJ1ZmZlcnMgKi8KIAlnZXRfYnVmX3N0YXRlKHEsIHByZXZfYnVmKGJ1Zm5yKSwgJnN0YXRlLCAwKTsKIAlpZiAoc3RhdGUgIT0gU0xTQl9DVV9PVVRQVVRfUFJJTUVEKQotCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKIAllbHNlIHsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImZhc3QtcmVxIik7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5mYXN0X3JlcXVldWUpOwogCX0KIG91dDoKLQkvKiBGaXhtZTogY291bGQgd2FpdCBmb3JldmVyIGlmIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0xNTk2LDE0ICsxNTc0LDEyIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1NZTkNfSU5QVVQpCi0JCWhhbmRsZV9pbmJvdW5kKGlycV9wdHItPmlucHV0X3FzW3FfbnJdLCBjYWxsZmxhZ3MsIGJ1Zm5yLAotCQkJICAgICAgIGNvdW50KTsKKwkJcmV0dXJuIGhhbmRsZV9pbmJvdW5kKGlycV9wdHItPmlucHV0X3FzW3FfbnJdLAorCQkJCSAgICAgIGNhbGxmbGFncywgYnVmbnIsIGNvdW50KTsKIAllbHNlIGlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfU1lOQ19PVVRQVVQpCi0JCWhhbmRsZV9vdXRib3VuZChpcnFfcHRyLT5vdXRwdXRfcXNbcV9ucl0sIGNhbGxmbGFncywgYnVmbnIsCi0JCQkJY291bnQpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJCXJldHVybiBoYW5kbGVfb3V0Ym91bmQoaXJxX3B0ci0+b3V0cHV0X3FzW3FfbnJdLAorCQkJCSAgICAgICBjYWxsZmxhZ3MsIGJ1Zm5yLCBjb3VudCk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkb19RRElPKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwppbmRleCBjMDgzNTZiLi4xOGQ1NGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwpAQCAtMTE3LDcgKzExNyw2IEBACiAJcS0+bWFzayA9IDEgPDwgKDMxIC0gaSk7CiAJcS0+bnIgPSBpOwogCXEtPmhhbmRsZXIgPSBoYW5kbGVyOwotCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfc3RvcmFnZV9saXN0cyhzdHJ1Y3QgcWRpb19xICpxLCBzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCA4ZTkwZTE0Li5jNjU1ZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogLyogbGlzdCBvZiB0aGluIGludGVycnVwdCBpbnB1dCBxdWV1ZXMgKi8KIHN0YXRpYyBMSVNUX0hFQUQodGlxX2xpc3QpOworREVGSU5FX01VVEVYKHRpcV9saXN0X2xvY2spOwogCiAvKiBhZGFwdGVyIGxvY2FsIHN1bW1hcnkgaW5kaWNhdG9yICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqdGlxZGlvX2Fsc2k7CkBAIC05NSwxMiArOTYsMTEgQEAKIAlpZiAoIWNzc19xZGlvX29taXRfc3ZzICYmIGlycV9wdHItPnNpZ2FfZmxhZy5zeW5jKQogCQljc3NfcWRpb19vbWl0X3N2cyA9IDE7CiAKLQlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKSB7CisJbXV0ZXhfbG9jaygmdGlxX2xpc3RfbG9jayk7CisJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKIAkJbGlzdF9hZGRfcmN1KCZxLT5lbnRyeSwgJnRpcV9saXN0KTsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JfQorCW11dGV4X3VubG9jaygmdGlxX2xpc3RfbG9jayk7CiAJeGNoZyhpcnFfcHRyLT5kc2NpLCAxKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZ0aXFkaW9fdGFza2xldCk7CiB9CiAKIC8qCkBAIC0xMTgsNyArMTE4LDEwIEBACiAJCS8qIGlmIGVzdGFibGlzaCB0cmlnZ2VyZWQgYW4gZXJyb3IgKi8KIAkJaWYgKCFxIHx8ICFxLT5lbnRyeS5wcmV2IHx8ICFxLT5lbnRyeS5uZXh0KQogCQkJY29udGludWU7CisKKwkJbXV0ZXhfbG9jaygmdGlxX2xpc3RfbG9jayk7CiAJCWxpc3RfZGVsX3JjdSgmcS0+ZW50cnkpOworCQltdXRleF91bmxvY2soJnRpcV9saXN0X2xvY2spOwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAl9CiB9CkBAIC0xNTUsMTUgKzE1OCwxNSBAQAogCSAqLwogCXFkaW9fY2hlY2tfb3V0Ym91bmRfYWZ0ZXJfdGhpbmludChxKTsKIAotYWdhaW46CiAJaWYgKCFxZGlvX2luYm91bmRfcV9tb3ZlZChxKSkKIAkJcmV0dXJuOwogCi0JcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihxKTsKKwlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAogCWlmICghdGlxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmRfbG9vcCk7Ci0JCWdvdG8gYWdhaW47CisJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CiAKIAlxZGlvX3N0b3BfcG9sbGluZyhxKTsKQEAgLTE3Myw3ICsxNzYsOCBAQAogCSAqLwogCWlmICghdGlxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmRfbG9vcDIpOwotCQlnb3RvIGFnYWluOworCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiAJfQogfQogCkBAIC0zNjYsMTAgKzM3MCwxMSBAQAogCiB2b2lkIF9fZXhpdCB0aXFkaW9fdW5yZWdpc3Rlcl90aGluaW50cyh2b2lkKQogewotCXRhc2tsZXRfZGlzYWJsZSgmdGlxZGlvX3Rhc2tsZXQpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnRpcV9saXN0KSk7CiAKIAlpZiAodGlxZGlvX2Fsc2kpIHsKIAkJczM5MF91bnJlZ2lzdGVyX2FkYXB0ZXJfaW50ZXJydXB0KHRpcWRpb19hbHNpLCBRRElPX0FJUlFfSVNDKTsKIAkJaXNjX3VucmVnaXN0ZXIoUURJT19BSVJRX0lTQyk7CiAJfQorCXRhc2tsZXRfa2lsbCgmdGlxZGlvX3Rhc2tsZXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwppbmRleCBjYjIyYjk3Li42NWI2YTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpAQCAtMTI4LDggKzEyOCw3IEBACiAJaWYgKGwgPT0gemRldi0+bGlzdC5wcmV2KQogCQlyZXR1cm47CiAJLyogTW92ZSB6ZGV2IGJlaGluZCBsICovCi0JbGlzdF9kZWwoJnpkZXYtPmxpc3QpOwotCWxpc3RfYWRkKCZ6ZGV2LT5saXN0LCBsKTsKKwlsaXN0X21vdmUoJnpkZXYtPmxpc3QsIGwpOwogfQogCiAvKioKQEAgLTE1Nyw4ICsxNTYsNyBAQAogCWlmIChsID09IHpkZXYtPmxpc3QubmV4dCkKIAkJcmV0dXJuOwogCS8qIE1vdmUgemRldiBiZWZvcmUgbCAqLwotCWxpc3RfZGVsKCZ6ZGV2LT5saXN0KTsKLQlsaXN0X2FkZF90YWlsKCZ6ZGV2LT5saXN0LCBsKTsKKwlsaXN0X21vdmVfdGFpbCgmemRldi0+bGlzdCwgbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHpjcnlwdF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKaW5kZXggZTdhMWUyMi4uYzIwZDQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKQEAgLTc4MSw4ICs3ODEsNyBAQAogCQkvKiBTaWduYWwgcGVuZGluZy4gKi8KIAkJYXBfY2FuY2VsX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKIG91dF9mcmVlOgotCW1lbXNldChhcF9tc2cubWVzc2FnZSwgMHgwLCBhcF9tc2cubGVuZ3RoKTsKLQlrZnJlZShhcF9tc2cubWVzc2FnZSk7CisJa3pmcmVlKGFwX21zZy5tZXNzYWdlKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9lYmNkaWMuYyBiL2RyaXZlcnMvczM5MC9lYmNkaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljOThkYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvZWJjZGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL2ViY2RpYy5jCi0gKiAgICBFQ0JESUMgLT4gQVNDSUksIEFTQ0lJIC0+IEVDQkRJQyBjb252ZXJzaW9uIHRhYmxlcy4KLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTggSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLS8qCi0gKiBBU0NJSSAtPiBFQkNESUMKLSAqLwotX191OCBfYXNjZWJjWzI1Nl0gPQotewotIC8qMDAgIE5MICAgIFNIICAgIFNYICAgIEVYICAgIEVUICAgIE5RICAgIEFLICAgIEJMICovCi0gICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MzcsIDB4MkQsIDB4MkUsIDB4MkYsCi0gLyowOCAgQlMgICAgSFQgICAgTEYgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KLSAgICAgMHgxNiwgMHgwNSwgMHgxNSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAvKjEwICBETCAgICBEMSAgICBEMiAgICBEMyAgICBENCAgICBOSyAgICBTTiAgICBFQiAqLwotICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDNDLCAweDE1LCAweDMyLCAweDI2LAotIC8qMTggIENOICAgIEVNICAgIFNCICAgIEVDICAgIEZTICAgIEdTICAgIFJTICAgIFVTICovCi0gICAgIDB4MTgsIDB4MTksIDB4M0YsIDB4MjcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsCi0gLyoyMCAgU1AgICAgICEgICAgICIgICAgICMgICAgICQgICAgICUgICAgICYgICAgICcgKi8KLSAgICAgMHg0MCwgMHg1QSwgMHg3RiwgMHg3QiwgMHg1QiwgMHg2QywgMHg1MCwgMHg3RCwKLSAvKjI4ICAgKCAgICAgKSAgICAgKiAgICAgKyAgICAgLCAgICAgLSAgICAuICAgICAgLyAqLwotICAgICAweDRELCAweDVELCAweDVDLCAweDRFLCAweDZCLCAweDYwLCAweDRCLCAweDYxLAotIC8qMzAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsCi0gLyozOCAgIDggICAgIDkgICAgIDogICAgIDsgICAgIDwgICAgID0gICAgID4gICAgID8gKi8KLSAgICAgMHhGOCwgMHhGOSwgMHg3QSwgMHg1RSwgMHg0QywgMHg3RSwgMHg2RSwgMHg2RiwKLSAvKjQwICAgQCAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLwotICAgICAweDdDLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LAotIC8qNDggICBIICAgICBJICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICovCi0gICAgIDB4QzgsIDB4QzksIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsCi0gLyo1MCAgIFAgICAgIFEgICAgIFIgICAgIFMgICAgIFQgICAgIFUgICAgIFYgICAgIFcgKi8KLSAgICAgMHhENywgMHhEOCwgMHhEOSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwKLSAvKjU4ICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAgXSAgICAgXiAgICAgXyAqLwotICAgICAweEU3LCAweEU4LCAweEU5LCAweEFELCAweEUwLCAweEJELCAweDVGLCAweDZELAotIC8qNjAgICBgICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgIDB4NzksIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0gLyo2OCAgIGggICAgIGkgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gKi8KLSAgICAgMHg4OCwgMHg4OSwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKLSAvKjcwICAgcCAgICAgcSAgICAgciAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAqLwotICAgICAweDk3LCAweDk4LCAweDk5LCAweEEyLCAweEEzLCAweEE0LCAweEE1LCAweEE2LAotIC8qNzggICB4ICAgICB5ICAgICB6ICAgICB7ICAgICB8ICAgICB9ICAgICB+ICAgIERMICovCi0gICAgIDB4QTcsIDB4QTgsIDB4QTksIDB4QzAsIDB4NEYsIDB4RDAsIDB4QTEsIDB4MDcsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCi0gICAgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4RkYKLX07Ci0KLS8qCi0gKiBFQkNESUMgLT4gQVNDSUkKLSAqLwotX191OCBfZWJjYXNjWzI1Nl0gPQotewotIC8qIDB4MDAgICBOVUwgICBTT0ggICBTVFggICBFVFggICpTRUwgICAgSFQgICpSTkwgICBERUwgKi8KLSAgICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA3LCAweDA5LCAweDA3LCAweDdGLAotIC8qIDB4MDggICAtR0UgIC1TUFMgIC1SUFQgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotIC8qIDB4MTAgICBETEUgICBEQzEgICBEQzIgICBEQzMgIC1SRVMgICAtTkwgICAgQlMgIC1QT0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRU5QICAtPkxGICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgwNywgMHgwQSwgMHgwOCwgMHgwNywKLSAvKiAweDE4ICAgQ0FOICAgIEVNICAtVUJTICAtQ1UxICAtSUZTICAtSUdTICAtSVJTICAtSVRCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlVUyAqLwotICAgICAgICAgIDB4MTgsIDB4MTksIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHgyMCAgIC1EUyAgLVNPUyAgICBGUyAgLVdVUyAgLUJZUCAgICBMRiAgIEVUQiAgIEVTQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JTlAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDFDLCAweDA3LCAweDA3LCAweDBBLCAweDE3LCAweDFCLAotIC8qIDB4MjggICAtU0EgIC1TRkUgICAtU00gIC1DU1AgIC1NRkEgICBFTlEgICBBQ0sgICBCRUwKLSAgICAgICAgICAgICAgICAgICAgICAgLVNXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDcsCi0gLyogMHgzMCAgLS0tLSAgLS0tLSAgIFNZTiAgIC1JUiAgIC1QUCAgLVRSTiAgLU5CUyAgIEVPVCAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MTYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDQsCi0gLyogMHgzOCAgLVNCUyAgIC1JVCAgLVJGRiAgLUNVMyAgIERDNCAgIE5BSyAgLS0tLSAgIFNVQiAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MTQsIDB4MTUsIDB4MDcsIDB4MUEsCi0gLyogMHg0MCAgICBTUCAgIFJTUCAgICAgICAgICAggeQgICAgICAgICAgICAgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDIwLCAweEZGLCAweDgzLCAweDg0LCAweDg1LCAweEEwLCAweDA3LCAweDg2LAotIC8qIDB4NDggICAgICAgICAgICAgICAgICAgICAgIC4gICAgIDwgICAgICggICAgICsgICAgIHwgKi8KLSAgICAgICAgICAweDg3LCAweEE0LCAweDlCLCAweDJFLCAweDNDLCAweDI4LCAweDJCLCAweDdDLAotIC8qIDB4NTAgICAgICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDI2LCAweDgyLCAweDg4LCAweDg5LCAweDhBLCAweEExLCAweDhDLCAweDA3LAotIC8qIDB4NTggICAgICAgICAgIIHfICAgICAhICAgICAkICAgICAqICAgICApICAgICA7ICAgICAgICovCi0gICAgICAgICAgMHg4RCwgMHhFMSwgMHgyMSwgMHgyNCwgMHgyQSwgMHgyOSwgMHgzQiwgMHhBQSwKLSAvKiAweDYwICAgICAtICAgICAvICAtLS0tICAgICCBxCAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MkQsIDB4MkYsIDB4MDcsIDB4OEUsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OEYsCi0gLyogMHg2OCAgICAgICAgICAgICAgLS0tLSAgICAgLCAgICAgJSAgICAgXyAgICAgPiAgICAgPyAqLyAKLSAgICAgICAgICAweDgwLCAweEE1LCAweDA3LCAweDJDLCAweDI1LCAweDVGLCAweDNFLCAweDNGLAotIC8qIDB4NzAgIC0tLS0gICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDA3LCAweDkwLCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4NzggICAgICogICAgIGAgICAgIDogICAgICMgICAgIEAgICAgICcgICAgID0gICAgICIgKi8KLSAgICAgICAgICAweDcwLCAweDYwLCAweDNBLCAweDIzLCAweDQwLCAweDI3LCAweDNELCAweDIyLAotIC8qIDB4ODAgICAgICogICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KLSAgICAgICAgICAweDA3LCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotIC8qIDB4ODggICAgIGggICAgIGkgICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweEFFLCAweEFGLCAweDA3LCAweDA3LCAweDA3LCAweEYxLAotIC8qIDB4OTAgICAgIIGwICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICAgICBwICovCi0gICAgICAgICAgMHhGOCwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgMHg3MCwKLSAvKiAweDk4ICAgICBxICAgICByICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg3MSwgMHg3MiwgMHhBNiwgMHhBNywgMHg5MSwgMHgwNywgMHg5MiwgMHgwNywKLSAvKiAweEEwICAgICAgICAgICB+ICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAgICB4ICovCi0gICAgICAgICAgMHhFNiwgMHg3RSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLSAvKiAweEE4ICAgICB5ICAgICB6ICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg3OSwgMHg3QSwgMHhBRCwgMHhBQiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweEIwICAgICBeICAgICAgICAgICAgICAgICAgICAtLS0tICAgICCBpyAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NUUsIDB4OUMsIDB4OUQsIDB4RkEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4QUMsCi0gLyogMHhCOCAgICAgICAgLS0tLSAgICAgWyAgICAgXSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4QUIsIDB4MDcsIDB4NUIsIDB4NUQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhDMCAgICAgeyAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLwotICAgICAgICAgIDB4N0IsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0gLyogMHhDOCAgICAgSCAgICAgSSAgLS0tLSAgICAgICAgICAggfYgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDQ4LCAweDQ5LCAweDA3LCAweDkzLCAweDk0LCAweDk1LCAweEEyLCAweDA3LAotIC8qIDB4RDAgICAgIH0gICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gICAgIFAgKi8KLSAgICAgICAgICAweDdELCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAotIC8qIDB4RDggICAgIFEgICAgIFIgIC0tLS0gICAgICAgICAgIIH8ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHg1MSwgMHg1MiwgMHgwNywgMHg5NiwgMHg4MSwgMHg5NywgMHhBMywgMHg5OCwKLSAvKiAweEUwICAgICBcICAgICAgICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICAgICBYICovCi0gICAgICAgICAgMHg1QywgMHhGNiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKLSAvKiAweEU4ICAgICBZICAgICBaICAgICAgICAtLS0tICAgICCB1iAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NTksIDB4NUEsIDB4RkQsIDB4MDcsIDB4OTksIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhGMCAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAgICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0gLyogMHhGOCAgICAgOCAgICAgOSAgLS0tLSAgLS0tLSAgICAggdwgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDM4LCAweDM5LCAweDA3LCAweDA3LCAweDlBLCAweDA3LCAweDA3LCAweDA3Ci19OwotCi0vKgotICogRUJDRElDIChjYXBpdGFscykgLT4gQVNDSUkgKHNtYWxsIGNhc2UpCi0gKi8KLV9fdTggX2ViY2FzY19yZWR1Y2VfY2FzZVsyNTZdID0KLXsKLSAvKiAweDAwICAgTlVMICAgU09IICAgU1RYICAgRVRYICAqU0VMICAgIEhUICAqUk5MICAgREVMICovCi0gICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNywgMHgwOSwgMHgwNywgMHg3RiwKLQotIC8qIDB4MDggICAtR0UgIC1TUFMgIC1SUFQgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotCi0gLyogMHgxMCAgIERMRSAgIERDMSAgIERDMiAgIERDMyAgLVJFUyAgIC1OTCAgICBCUyAgLVBPQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FTlAgIC0+TEYgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDA3LCAweDBBLCAweDA4LCAweDA3LAotCi0gLyogMHgxOCAgIENBTiAgICBFTSAgLVVCUyAgLUNVMSAgLUlGUyAgLUlHUyAgLUlSUyAgLUlUQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JVVMgKi8KLSAgICAgICAgICAweDE4LCAweDE5LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHgyMCAgIC1EUyAgLVNPUyAgICBGUyAgLVdVUyAgLUJZUCAgICBMRiAgIEVUQiAgIEVTQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JTlAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDFDLCAweDA3LCAweDA3LCAweDBBLCAweDE3LCAweDFCLAotCi0gLyogMHgyOCAgIC1TQSAgLVNGRSAgIC1TTSAgLUNTUCAgLU1GQSAgIEVOUSAgIEFDSyAgIEJFTAotICAgICAgICAgICAgICAgICAgICAgICAtU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNSwgMHgwNiwgMHgwNywKLQotIC8qIDB4MzAgIC0tLS0gIC0tLS0gICBTWU4gICAtSVIgICAtUFAgIC1UUk4gIC1OQlMgICBFT1QgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDE2LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA0LAotCi0gLyogMHgzOCAgLVNCUyAgIC1JVCAgLVJGRiAgLUNVMyAgIERDNCAgIE5BSyAgLS0tLSAgIFNVQiAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MTQsIDB4MTUsIDB4MDcsIDB4MUEsCi0KLSAvKiAweDQwICAgIFNQICAgUlNQICAgICAgICAgICCB5CAgICAgICAgICAgICAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MjAsIDB4RkYsIDB4ODMsIDB4ODQsIDB4ODUsIDB4QTAsIDB4MDcsIDB4ODYsCi0KLSAvKiAweDQ4ICAgICAgICAgICAgICAgICAgICAgICAuICAgICA8ICAgICAoICAgICArICAgICB8ICovCi0gICAgICAgICAgMHg4NywgMHhBNCwgMHg5QiwgMHgyRSwgMHgzQywgMHgyOCwgMHgyQiwgMHg3QywKLQotIC8qIDB4NTAgICAgICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDI2LCAweDgyLCAweDg4LCAweDg5LCAweDhBLCAweEExLCAweDhDLCAweDA3LAotCi0gLyogMHg1OCAgICAgICAgICAggd8gICAgICEgICAgICQgICAgICogICAgICkgICAgIDsgICAgICAgKi8KLSAgICAgICAgICAweDhELCAweEUxLCAweDIxLCAweDI0LCAweDJBLCAweDI5LCAweDNCLCAweEFBLAotCi0gLyogMHg2MCAgICAgLSAgICAgLyAgLS0tLSAgICAggcQgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDJELCAweDJGLCAweDA3LCAweDg0LCAweDA3LCAweDA3LCAweDA3LCAweDhGLAotCi0gLyogMHg2OCAgICAgICAgICAgICAgLS0tLSAgICAgLCAgICAgJSAgICAgXyAgICAgPiAgICAgPyAqLyAKLSAgICAgICAgICAweDgwLCAweEE1LCAweDA3LCAweDJDLCAweDI1LCAweDVGLCAweDNFLCAweDNGLAotCi0gLyogMHg3MCAgLS0tLSAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MDcsIDB4OTAsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweDc4ICAgICAqICAgICBgICAgICA6ICAgICAjICAgICBAICAgICAnICAgICA9ICAgICAiICovCi0gICAgICAgICAgMHg3MCwgMHg2MCwgMHgzQSwgMHgyMywgMHg0MCwgMHgyNywgMHgzRCwgMHgyMiwKLQotIC8qIDB4ODAgICAgICogICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KLSAgICAgICAgICAweDA3LCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCi0gLyogMHg4OCAgICAgaCAgICAgaSAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NjgsIDB4NjksIDB4QUUsIDB4QUYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4RjEsCi0KLSAvKiAweDkwICAgICCBsCAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAgICAgcCAqLwotICAgICAgICAgIDB4RjgsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0KLSAvKiAweDk4ICAgICBxICAgICByICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg3MSwgMHg3MiwgMHhBNiwgMHhBNywgMHg5MSwgMHgwNywgMHg5MiwgMHgwNywKLQotIC8qIDB4QTAgICAgICAgICAgIH4gICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgICAgIHggKi8KLSAgICAgICAgICAweEU2LCAweDdFLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotCi0gLyogMHhBOCAgICAgeSAgICAgeiAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4QUQsIDB4QUIsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEIwICAgICBeICAgICAgICAgICAgICAgICAgICAtLS0tICAgICCBpyAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NUUsIDB4OUMsIDB4OUQsIDB4RkEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4QUMsCi0KLSAvKiAweEI4ICAgICAgICAtLS0tICAgICBbICAgICBdICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHhBQiwgMHgwNywgMHg1QiwgMHg1RCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4QzAgICAgIHsgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgICAgICAweDdCLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCi0gLyogMHhDOCAgICAgSCAgICAgSSAgLS0tLSAgICAgICAgICAggfYgICAgICAgICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweDA3LCAweDkzLCAweDk0LCAweDk1LCAweEEyLCAweDA3LAotCi0gLyogMHhEMCAgICAgfSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAgICAgUCAqLwotICAgICAgICAgIDB4N0QsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0KLSAvKiAweEQ4ICAgICBRICAgICBSICAtLS0tICAgICAgICAgICCB/CAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4MDcsIDB4OTYsIDB4ODEsIDB4OTcsIDB4QTMsIDB4OTgsCi0KLSAvKiAweEUwICAgICBcICAgICAgICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICAgICBYICovCi0gICAgICAgICAgMHg1QywgMHhGNiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLQotIC8qIDB4RTggICAgIFkgICAgIFogICAgICAgIC0tLS0gICAgIIHWICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg3OSwgMHg3QSwgMHhGRCwgMHgwNywgMHg5NCwgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4RjAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgICAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCi0gLyogMHhGOCAgICAgOCAgICAgOSAgLS0tLSAgLS0tLSAgICAggdwgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDM4LCAweDM5LCAweDA3LCAweDA3LCAweDgxLCAweDA3LCAweDA3LCAweDA3Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKaW5kZXggNjM4MmMwNC4uOTZlZGRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogb2JqLSQoQ09ORklHX1NNU0dJVUNWKSArPSBzbXNnaXVjdi5vCiBvYmotJChDT05GSUdfTENTKSArPSBsY3MubyBjdTMwODgubwogb2JqLSQoQ09ORklHX0NMQVcpICs9IGNsYXcubyBjdTMwODgubwotcWV0aC15ICs9IHFldGhfY29yZV9zeXMubyBxZXRoX2NvcmVfbWFpbi5vIHFldGhfY29yZV9tcGMubyBxZXRoX2NvcmVfb2ZmbC5vCitxZXRoLXkgKz0gcWV0aF9jb3JlX3N5cy5vIHFldGhfY29yZV9tYWluLm8gcWV0aF9jb3JlX21wYy5vCiBvYmotJChDT05GSUdfUUVUSCkgKz0gcWV0aC5vCiBxZXRoX2wyLXkgKz0gcWV0aF9sMl9tYWluLm8KIG9iai0kKENPTkZJR19RRVRIX0wyKSArPSBxZXRoX2wyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggZjVlNjE4NS4uMzBhNDNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTYwLDYgKzYwLDkgQEAKICAqICAgIDEuMjUgIEFkZGVkIFBhY2tpbmcgc3VwcG9ydAogICogICAgMS41CiAgKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiY2xhdyIKKwogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vY2N3Z3JvdXAuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KQEAgLTk0LDcgKzk3LDcgQEAKICAgIENMQVcgdXNlcyB0aGUgczM5MGRiZiBmaWxlIHN5c3RlbSAgc2VlIGNsYXdfdHJhY2UgYW5kIGNsYXdfc2V0dXAKICovCiAKLQorc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSAiQ0xBVyBkcml2ZXIiOwogc3RhdGljIGNoYXIgZGVidWdfYnVmZmVyWzI1NV07CiAvKioKICAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCkBAIC0yMDYsMjAgKzIwOSwzMCBAQAogc3RhdGljIGludCBwYWdlc190b19vcmRlcl9vZl9tYWcoaW50IG51bV9vZl9wYWdlcyk7CiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNsYXdfcGFja19za2Ioc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyKTsKIC8qIHN5c2ZzIEZ1bmN0aW9ucyAqLwotc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiBzdGF0aWMgaW50IGNsYXdfYWRkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBjbGF3X3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMjk4LDggKzMxMSw4IEBACiAJaWYgKHJjKSB7CiAJCXByb2JlX2Vycm9yKGNnZGV2KTsKIAkJcHV0X2RldmljZSgmY2dkZXYtPmRldik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImFkZF9maWxlcyBmYWlsZWQgJXMgJXMgRXhpdCBMaW5lICVkIFxuIiwKLQkJCWRldl9uYW1lKCZjZ2Rldi0+Y2RldlswXS0+ZGV2KSwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJZGV2X2VycigmY2dkZXYtPmRldiwgIkNyZWF0aW5nIHRoZSAvcHJvYyBmaWxlcyBmb3IgYSBuZXciCisJCSIgQ0xBVyBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICJwcm9iZXglZCIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTMzNSw2ICszNDgsOCBAQAogICAgICAgICByYz1jbGF3X2h3X3R4KCBza2IsIGRldiwgMSApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhwX2NoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKIAlDTEFXX0RCRl9URVhUXyg0LCB0cmFjZSwgImNsYXd0eCVkIiwgcmMpOworCWlmIChyYykKKwkJcmMgPSBORVRERVZfVFhfQlVTWTsKICAgICAgICAgcmV0dXJuIHJjOwogfSAgIC8qICBlbmQgb2YgY2xhd190eCAqLwogCkBAIC00OTYsNyArNTExLDggQEAKICAgICAgICAgICAgfihERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkpICE9IDB4MDApIHx8CiAgICAgICAgICAgICgoKHByaXZwdHItPmNoYW5uZWxbUkVBRF0uZmxhZyB8CiAJICAgCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmZsYWcpICYgQ0xBV19USU1FUikgIT0gMHgwMCkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogcmVtb3RlIHNpZGUgaXMgbm90IHJlYWR5XG4iLCBkZXYtPm5hbWUpOworCQlkZXZfaW5mbygmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXYsCisJCQkiJXM6IHJlbW90ZSBzaWRlIGlzIG5vdCByZWFkeVxuIiwgZGV2LT5uYW1lKTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgIm5vdHJkeSIpOwogCiAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCAyOyAgaSsrKSB7CkBAIC01ODIsMTAgKzU5OCw5IEBACiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImNsYXdpcnEiKTsKICAgICAgICAgLyogQnlwYXNzIGFsbCAndW5zb2xpY2l0ZWQgaW50ZXJydXB0cycgKi8KIAlpZiAoIWNkZXYtPmRldi5kcml2ZXJfZGF0YSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IHVuc29saWNpdGVkIGludGVycnVwdCBmb3IgZGV2aWNlOiIKLQkJIAkiJXMgcmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKLQkJICAgICAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBpcmItPnNjc3cuY21kLmNzdGF0LAotCQkgICAgICAgaXJiLT5zY3N3LmNtZC5kc3RhdCk7CisJCWRldl93YXJuKCZjZGV2LT5kZXYsICJBbiB1bmluaXRpYWxpemVkIENMQVcgZGV2aWNlIHJlY2VpdmVkIGFuIgorCQkJIiBJUlEsIGMtJTAyeCBkLSUwMnhcbiIsCisJCQlpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0KTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZGlycSIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTk3LDggKzYxMiw3IEBACiAJZWxzZSBpZiAocHJpdnB0ci0+Y2hhbm5lbFtXUklURV0uY2RldiA9PSBjZGV2KQogCQlwX2NoID0gJnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwogCWVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiBDYW4ndCBkZXRlcm1pbmUgY2hhbm5lbCBmb3IgIgotCQkJImludGVycnVwdCwgZGV2aWNlICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCWRldl93YXJuKCZjZGV2LT5kZXYsICJUaGUgZGV2aWNlIGlzIG5vdCBhIENMQVcgZGV2aWNlXG4iKTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZGNoYW4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTYxMiw3ICs2MjYsOCBAQAogCiAJLyogQ2hlY2sgZm9yIGdvb2Qgc3ViY2hhbm5lbCByZXR1cm4gY29kZSwgb3RoZXJ3aXNlIGluZm8gbWVzc2FnZSAqLwogCWlmIChpcmItPnNjc3cuY21kLmNzdGF0ICYmICEoaXJiLT5zY3N3LmNtZC5jc3RhdCAmIFNDSE5fU1RBVF9QQ0kpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1YmNoYW5uZWwgY2hlY2sgZm9yIGRldmljZTogJTA0eCAtIgorCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJIiVzOiBzdWJjaGFubmVsIGNoZWNrIGZvciBkZXZpY2U6ICUwNHggLSIKIAkJCSIgU2NoIFN0YXQgJTAyeCAgRGV2IFN0YXQgJTAyeCBDUEEgLSAlMDR4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX2NoLT5kZXZubywKIAkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuZHN0YXQsCkBAIC02NTEsNyArNjY2LDcgQEAKIAkJCXdha2VfdXAoJnBfY2gtPndhaXQpOyAvKiB3YWtlIGNsYXdfb3BlbiAoUkVBRCkqLwogCQl9IGVsc2UgaWYgKHBfY2gtPmZsYWcgPT0gQ0xBV19XUklURSkgewogCQkJcF9jaC0+Y2xhd19zdGF0ZSA9IENMQVdfU1RBUlRfV1JJVEU7Ci0JCQkvKglzZW5kIFNZU1RFTV9WQUxJREFURQkJCSovCisJCQkvKiAgICAgIHNlbmQgU1lTVEVNX1ZBTElEQVRFICAgICAgICAgICAgICAgICAgICAqLwogCQkJY2xhd19zdHJ0X3JlYWQoZGV2LCBMT0NLX05PKTsKIAkJCWNsYXdfc2VuZF9jb250cm9sKGRldiwKIAkJCQlTWVNURU1fVkFMSURBVEVfUkVRVUVTVCwKQEAgLTY1OSwxMCArNjc0LDkgQEAKIAkJCQlwX2Vudi0+aG9zdF9uYW1lLAogCQkJCXBfZW52LT5hZGFwdGVyX25hbWUpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogdW5zb2xpY2l0ZWQgIgotCQkJCSJpbnRlcnJ1cHQgZm9yIGRldmljZToiCi0JCQkJIiVzIHJlY2VpdmVkIGMtJTAyeCBkLSUwMnhcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldiksCisJCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiVGhlIENMQVcgZGV2aWNlIHJlY2VpdmVkIgorCQkJCSIgYW4gdW5leHBlY3RlZCBJUlEsICIKKwkJCQkiYy0lMDJ4IGQtJTAyeFxuIiwKIAkJCQlpcmItPnNjc3cuY21kLmNzdGF0LAogCQkJCWlyYi0+c2Nzdy5jbWQuZHN0YXQpOwogCQkJcmV0dXJuOwpAQCAtNjc3LDggKzY5MSw4IEBACiAJCQkgICAgKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg0MCkgPT0gMHg0MCB8fAogCQkJICAgIChwX2NoLT5pcmItPmVjd1swXSkgICAgICAgID09IDApIHsKIAkJCQlwcml2cHRyLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzdGFydCBpcyAiCi0JCQkJCSJyZXF1aXJlZCBhZnRlciByZW1vdGUgIgorCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJCSIlczogUmVzdGFydCBpcyByZXF1aXJlZCBhZnRlciByZW1vdGUgIgogCQkJCQkic2lkZSByZWNvdmVycyBcbiIsCiAJCQkJCWRldi0+bmFtZSk7CiAJCQl9CkBAIC03MTMsMTEgKzcyNywxMyBAQAogCQlyZXR1cm47CiAJY2FzZSBDTEFXX1NUQVJUX1dSSVRFOgogCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IENoZWNrIE9jY3VyZWQgaW4gIgorCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkiJXM6IFVuaXQgQ2hlY2sgT2NjdXJlZCBpbiAiCiAJCQkJIndyaXRlIGNoYW5uZWxcbiIsIGRldi0+bmFtZSk7CiAJCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKIAkJCWlmIChwX2NoLT5pcmItPmVjd1swXSAmIDB4ODApIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzZXR0aW5nIEV2ZW50ICIKKwkJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCQkiJXM6IFJlc2V0dGluZyBFdmVudCAiCiAJCQkJCSJvY2N1cnJlZDpcbiIsIGRldi0+bmFtZSk7CiAJCQkJaW5pdF90aW1lcigmcF9jaC0+dGltZXIpOwogCQkJCXBfY2gtPnRpbWVyLmZ1bmN0aW9uID0KQEAgLTcyNSw3ICs3NDEsOCBAQAogCQkJCXBfY2gtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwX2NoOwogCQkJCXBfY2gtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAqSFo7CiAJCQkJYWRkX3RpbWVyKCZwX2NoLT50aW1lcik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHdyaXRlIGNvbm5lY3Rpb24gIgorCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJCSIlczogd3JpdGUgY29ubmVjdGlvbiAiCiAJCQkJCSJyZXN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJfQogCQkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInJzdHJ0d3J0Iik7CkBAIC03MzMsOSArNzUwLDEwIEBACiAJCX0KIAkJaWYgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0VYQ0VQKSB7CiAJCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IEV4Y2VwdGlvbiAiCi0JCQkgICAgICAgIk9jY3VyZWQgaW4gd3JpdGUgY2hhbm5lbFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkiJXM6IFVuaXQgRXhjZXB0aW9uICIKKwkJCQkib2NjdXJyZWQgaW4gd3JpdGUgY2hhbm5lbFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCWlmICghKChwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsICYgU0NTV19TVENUTF9TRUNfU1RBVFVTKSB8fAogCQkocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCA9PSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fApAQCAtNzU3LDggKzc3NSw5IEBACiAJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJTdFd0RXhpdCIpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdyb25nIHNlbGVjdGlvbiBjb2RlIC0gaXJxICIKLQkJCSJzdGF0ZT0lZFxuIiwgZGV2LT5uYW1lLCBwX2NoLT5jbGF3X3N0YXRlKTsKKwkJZGV2X3dhcm4oJmNkZXYtPmRldiwKKwkJCSJUaGUgQ0xBVyBkZXZpY2UgZm9yICVzIHJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgSVJRXG4iLAorCQkJIGRldi0+bmFtZSk7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRJUlEiKTsKIAkJcmV0dXJuOwogICAgICAgICB9CkBAIC05MTAsOCArOTI5LDEwIEBACiAgICAgICAgIGlmICgoKHByaXZwdHItPmNoYW5uZWxbUkVBRF0ubGFzdF9kc3RhdCB8CiAJCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmxhc3RfZHN0YXQpICYKIAkJfihERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkpICE9IDB4MDApIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2hhbm5lbCBwcm9ibGVtcyBkdXJpbmcgY2xvc2UgLSAiCi0JCQkicmVhZDogJTAyeCAtICB3cml0ZTogJTAyeFxuIiwKKwkJZGV2X3dhcm4oJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2LAorCQkJIkRlYWN0aXZhdGluZyAlcyBjb21wbGV0ZWQgd2l0aCBpbmNvcnJlY3QiCisJCQkiIHN1YmNoYW5uZWwgc3RhdHVzICIKKwkJCSIocmVhZCAlMDJ4LCB3cml0ZSAlMDJ4KVxuIiwKICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsCiAJCXByaXZwdHItPmNoYW5uZWxbUkVBRF0ubGFzdF9kc3RhdCwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0ubGFzdF9kc3RhdCk7CkBAIC0xMDEyLDcgKzEwMzMsNyBAQAogcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKGludCBudW1fb2ZfcGFnZXMpCiB7CiAJaW50CW9yZGVyX29mX21hZz0xOwkJLyogYXNzdW1lIDIgcGFnZXMgKi8KLQlpbnQJbnVtcD0yOworCWludAludW1wOwogCiAJQ0xBV19EQkZfVEVYVF8oNSwgdHJhY2UsICJwYWdlcyVkIiwgbnVtX29mX3BhZ2VzKTsKIAlpZiAobnVtX29mX3BhZ2VzID09IDEpICAge3JldHVybiAwOyB9ICAvKiBtYWduaXR1ZGUgb2YgMCA9IDEgcGFnZSAqLwpAQCAtMTA3Niw4ICsxMDk3LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICggcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3QgPT1OVUxMICkgewotICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0PSBwX2ZpcnN0OyAgLyogICAgc2V0IG5ldyBmaXJzdCAqLwotICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2xhc3QgPSBwX2xhc3Q7ICAgLyogICAgc2V0IG5ldyBsYXN0ICAqLworCQlwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2ZpcnN0ID0gcF9maXJzdDsgIC8qICBzZXQgbmV3IGZpcnN0ICovCisJCXByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdCAgPSBwX2xhc3Q7ICAgLyogIHNldCBuZXcgbGFzdCAgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKIApAQCAtMTExMyw3ICsxMTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdC0+cl9USUNfMi5jZGE9CiAJCQkJKF9fdTMyKV9fcGEoJnBfZmlyc3QtPnJlYWQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiAgICAgIGNoYWluIGluIG5ldyBzZXQgb2YgYmxvY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJLyogICAgICBjaGFpbiBpbiBuZXcgc2V0IG9mIGJsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdC0+bmV4dCA9IHBfZmlyc3Q7CiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0PXBfbGFzdDsKICAgICAgICAgfSAvKiBlbmQgb2YgaWYgKCBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdCA9PU5VTEwpICAqLwpAQCAtMTEzNSwyMSArMTE1NiwxOCBAQAogCQljYXNlIC1FQlVTWTogLyogQlVTWSBpcyBhIHRyYW5zaWVudCBzdGF0ZSBubyBhY3Rpb24gbmVlZGVkICovCiAJCQlicmVhazsKIAkJY2FzZSAtRU5PREVWOgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBNaXNzaW5nIGRldmljZSBjYWxsZWQgIgotCQkJCSJmb3IgSU8gRU5PREVWXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7Ci0JCQlicmVhazsKLQkJY2FzZSAtRUlPOgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBTdGF0dXMgcGVuZGluZy4uLiBFSU8gXG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJCWRldl9lcnIoJmNkZXYtPmRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGlzIG5vdCIKKwkJCQkiIGF2YWlsYWJsZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAtRUlOVkFMOgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBJbnZhbGlkIERldiBTdGF0ZSBFSU5WQUwgXG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJCWRldl9lcnIoJmNkZXYtPmRldiwKKwkJCQkiVGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciIKKwkJCQkiIGlzIG5vdCB2YWxpZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogVW5rbm93biBlcnJvciBpbiAiCi0JCQkJICJEb19JTyAlZFxuIiwgZGV2X25hbWUoJmNkZXYtPmRldiksCi0JCQkgICAgICAgcmV0dXJuX2NvZGUpOworCQkJZGV2X2VycigmY2Rldi0+ZGV2LCAiVGhlIGNvbW1vbiBkZXZpY2UgbGF5ZXIiCisJCQkJIiByZXR1cm5lZCBlcnJvciBjb2RlICVkXG4iLAorCQkJCSAgcmV0dXJuX2NvZGUpOwogCQl9CiAJfQogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJjY3dyZXQiKTsKQEAgLTExNjMsNDIgKzExODEsMzcgQEAKIGNjd19jaGVja191bml0X2NoZWNrKHN0cnVjdCBjaGJrICogcF9jaCwgdW5zaWduZWQgY2hhciBzZW5zZSApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwX2NoLT5uZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwX2NoLT5jZGV2LT5kZXY7CiAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAidW5pdGNoZWsiKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgQ2hlY2sgd2l0aCBzZW5zZSBieXRlOjB4JTA0eFxuIiwKLQkgICAgICAgbmRldi0+bmFtZSwgc2Vuc2UpOworCWRldl93YXJuKGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgZGlzY29ubmVjdGVkXG4iLAorCQluZGV2LT5uYW1lKTsKIAotICAgICAgICBpZiAoc2Vuc2UgJiAweDQwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbnNlICYgMHgwMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludGVyZmFjZSBkaXNjb25uZWN0IG9yICIKLQkJCQkiU2VsZWN0aXZlIHJlc2V0ICIKLQkJCQkib2NjdXJyZWQgKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFN5c3RlbSByZXNldCBvY2N1cmVkIgotCQkJCSIgKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbnNlICYgMHgyMCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEYXRhLXN0cmVhbWluZyAiCi0JCQkJInRpbWVvdXQpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERhdGEtdHJhbnNmZXIgcGFyaXR5IgotCQkJCSIgZXJyb3JcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDIwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogSGFyZHdhcmUgbWFsZnVuY3Rpb24gIgotCQkJCSIocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVhZC1kYXRhIHBhcml0eSBlcnJvciAiCi0JCQkJIihyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChzZW5zZSAmIDB4NDApIHsKKwkJaWYgKHNlbnNlICYgMHgwMSkgeworCQkJZGV2X3dhcm4oZGV2LCAiVGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIgZm9yIgorCQkJCSIgJXMgaGFzIGJlZW4gcmVzZXRcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKHNlbnNlICYgMHgyMCkgeworCQlpZiAoc2Vuc2UgJiAweDA0KSB7CisJCQlkZXZfd2FybihkZXYsICJBIGRhdGEgc3RyZWFtaW5nIHRpbWVvdXQgb2NjdXJyZWQiCisJCQkJIiBmb3IgJXNcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0gZWxzZSBpZiAoc2Vuc2UgJiAweDEwKSB7CisJCQlkZXZfd2FybihkZXYsICJUaGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciBmb3IgJXMiCisJCQkJIiBpcyBmYXVsdHlcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybihkZXYsICJBIGRhdGEgdHJhbnNmZXIgcGFyaXR5IGVycm9yIG9jY3VycmVkIgorCQkJCSIgZm9yICVzXG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKKwkJZGV2X3dhcm4oZGV2LCAiQSByZWFkIGRhdGEgcGFyaXR5IGVycm9yIG9jY3VycmVkIgorCQkJIiBmb3IgJXNcbiIsCisJCQluZGV2LT5uYW1lKTsKKwl9CiAKIH0gICAvKiAgICBlbmQgb2YgY2N3X2NoZWNrX3VuaXRfY2hlY2sgICAgKi8KIApAQCAtMTIzNSw3ICsxMjQ4LDcgQEAKIAkJCWJyZWFrOwogCX0KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9ICAgIC8qICAgIGVuZCBvZiBmaW5kX2xpbmsgICAgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM0Nyw3ICsxMzYwLDEwIEBACiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF93cml0ZV9mcmVlX2NoYWluPXBfdGhpc19jY3ctPm5leHQ7CiAgICAgICAgICAgICAgICAgcF90aGlzX2Njdy0+bmV4dD1OVUxMOwogICAgICAgICAgICAgICAgIC0tcHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudDsgLyogLTEgKi8KLSAgICAgICAgICAgICAgICBieXRlc0luVGhpc0J1ZmZlcj1sZW5fb2ZfZGF0YTsKKwkJaWYgKGxlbl9vZl9kYXRhID49IHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKQorCQkJYnl0ZXNJblRoaXNCdWZmZXIgPSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJZWxzZQorCQkJYnl0ZXNJblRoaXNCdWZmZXIgPSBsZW5fb2ZfZGF0YTsKICAgICAgICAgICAgICAgICBtZW1jcHkoIHBfdGhpc19jY3ctPnBfYnVmZmVyLHBEYXRhQWRkcmVzcywgYnl0ZXNJblRoaXNCdWZmZXIpOwogICAgICAgICAgICAgICAgIGxlbl9vZl9kYXRhLT1ieXRlc0luVGhpc0J1ZmZlcjsKICAgICAgICAgICAgICAgICBwRGF0YUFkZHJlc3MrPSh1bnNpZ25lZCBsb25nKWJ5dGVzSW5UaGlzQnVmZmVyOwpAQCAtMTM3NSw3ICsxMzkxLDcgQEAKICAgICAgICAgKi8KIAogICAgICAgICBpZiAocF9maXJzdF9jY3chPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAvKiAgICAgIHNldHVwIGVuZGluZyBjY3cgc2VxdWVuY2UgZm9yIHRoaXMgc2VnbWVudCAgICAgICAgICAgICAgKi8KKwkJLyogICAgICBzZXR1cCBlbmRpbmcgY2N3IHNlcXVlbmNlIGZvciB0aGlzIHNlZ21lbnQgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgcEVuZD1wcml2cHRyLT5wX2VuZF9jY3c7CiAgICAgICAgICAgICAgICAgaWYgKHBFbmQtPndyaXRlMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcEVuZC0+d3JpdGUxPTB4MDA7ICAgLyogc2Vjb25kIGVuZCBjY3cgaXMgbm93IGFjdGl2ZSAqLwpAQCAtMTY5NywxMCArMTcxMywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPiB3X1RJQ18xLmZsYWdzICAgICAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPiB3X1RJQ18xLmNvdW50ICAgICAgPSAwOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZitwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgPj0KKwkJCWlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmICsKKwkJCQkJICAgIHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSA+PQogCQkJICAgKCh1bnNpZ25lZCBsb25nKShwX2J1ZmYrMioKLQkJCQkocHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpIC0xKSAmIFBBR0VfTUFTSykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZj0gcF9idWZmK3ByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOworCQkJICAgIChwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgLSAxKSAmIFBBR0VfTUFTSykpIHsKKwkJCQlwX2J1ZmYgPSBwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CkBAIC0xODQwLDE1ICsxODU3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+aGVhZGVyLm9wY29kZT0weGZmOwogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPmhlYWRlci5mbGFnPUNMQVdfUEVORElORzsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgPj0KLQkJCQkoKHVuc2lnbmVkIGxvbmcpKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSAtMSkKLQkJCQkgJiBQQUdFX01BU0spICkgeworCQkJaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgPj0KKwkJCSAgKCh1bnNpZ25lZCBsb25nKShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkKKwkJCQkgLTEpCisJCQkgICAmIFBBR0VfTUFTSykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmPSBwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmY9CiAJCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCi0JCQkJCShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgLTEpCisJCQkJCShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSktMSkKIAkJCQkJICYgUEFHRV9NQVNLKSA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSAgIC8qIGZvciByZWFkX2J1ZmZlcnMgICAqLwpAQCAtMTg1NiwyNCArMTg3NCwyOCBAQAogICAgICAgICAgIGVsc2UgeyAgLyogcmVhZCBTaXplID49IFBBR0VfU0laRSAgKi8KICAgICAgICAgICAgICAgICBmb3IgKGk9MCA7IGk8IHByaXZwdHItPnBfZW52LT5yZWFkX2J1ZmZlcnMgOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhfX0dGUF9ETUEsCi0JCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQpICk7CisJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCisJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF9idWZmPT1OVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX2NjdywKLQkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+cF9idWZmX2Njd19udW0pKTsKKwkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcocHJpdnB0ci0+CisJCQkJCXBfYnVmZl9jY3dfbnVtKSk7CiAJCQkJLyogZnJlZSB0aGUgd3JpdGUgcGFnZXMgICovCiAJICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cHJpdnB0ci0+cF9idWZmX3dyaXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocF9idWYhPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKLQkJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAotCQkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlICkpOworCQkJCQlmcmVlX3BhZ2VzKAorCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAorCQkJCQkgICAgKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCisJCQkJCSAgICBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCQkJCS8qIGZyZWUgYW55IHJlYWQgcGFnZXMgYWxyZWFkeSBhbGxvYyAgKi8KIAkgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX2J1ZmZfcmVhZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCi0JCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKLQkJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkICkpOworCQkJCQlmcmVlX3BhZ2VzKAorCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAorCQkJCQkgICAgKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCisJCQkJCSAgICAgcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wX2J1Zi0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfY2N3PU5VTEw7CkBAIC0yMDAzLDcgKzIwMjUsNyBAQAogCXRkZXYgPSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXY7CiAJbWVtY3B5KCAmdGVtcF9ob3N0X25hbWUsIHBfZW52LT5ob3N0X25hbWUsIDgpOwogICAgICAgICBtZW1jcHkoICZ0ZW1wX3dzX25hbWUsIHBfZW52LT5hZGFwdGVyX25hbWUgLCA4KTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6ICIKKwlkZXZfaW5mbyh0ZGV2LCAiJXM6IENMQVcgZGV2aWNlICUuOHM6ICIKIAkJIlJlY2VpdmVkIENvbnRyb2wgUGFja2V0XG4iLAogCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CiAgICAgICAgIGlmIChwcml2cHRyLT5yZWxlYXNlX3BlbmQ9PTEpIHsKQEAgLTIwMjIsMzIgKzIwNDQsMzAgQEAKIAkJaWYgKHBfY3RsYmstPnZlcnNpb24gIT0gQ0xBV19WRVJTSU9OX0lEKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX1dST05HX1ZFUlNJT04pOwotCQkJcHJpbnRrKCIlczogJWQgaXMgd3JvbmcgdmVyc2lvbiBpZC4gIgotCQkJICAgICAgICJFeHBlY3RlZCAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCi0JCQkgICAgICAgQ0xBV19WRVJTSU9OX0lEKTsKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIgorCQkJCSIgdXNlcyBhbiBpbmNvcnJlY3QgQVBJIHZlcnNpb24gJWRcbiIsCisJCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uKTsKIAkJfQogCQlwX3N5c3ZhbCA9IChzdHJ1Y3Qgc3lzdmFsICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVxdWVzdDogIgotCQkgICAgICAgIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkLFdTIG5hbWU9JS4iCi0JCSAgICAgICAiOHMsSG9zdCBuYW1lPSUuOHNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCi0JCSAgICAgICBwX2N0bGJrLT5saW5raWQsCi0JCSAgICAgICBwX2N0bGJrLT5jb3JyZWxhdG9yLAotCQkgICAgICAgcF9zeXN2YWwtPldTX25hbWUsCi0JCSAgICAgICBwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKKwkJZGV2X2luZm8odGRldiwgIiVzOiBSZWN2IFN5cyBWYWxpZGF0ZSBSZXF1ZXN0OiAiCisJCQkiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWQsV1MgbmFtZT0lLjhzLCIKKwkJCSJIb3N0IG5hbWU9JS44c1xuIiwKKwkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKKwkJCXBfY3RsYmstPmxpbmtpZCwKKwkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCisJCQlwX3N5c3ZhbC0+V1NfbmFtZSwKKwkJCXBfc3lzdmFsLT5ob3N0X25hbWUpOwogCQlpZiAobWVtY21wKHRlbXBfaG9zdF9uYW1lLCBwX3N5c3ZhbC0+aG9zdF9uYW1lLCA4KSkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19OQU1FX01JU01BVENIKTsKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJIU1RCQUQiKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCB0ZW1wX2hvc3RfbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogIEhvc3QgbmFtZSBtaXNtYXRjaFxuIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIDolczogIgotCQkJCSJleHBlY3RlZCA6JXM6IFxuIiwKLQkJCQlkZXYtPm5hbWUsCisJCQlkZXZfd2Fybih0ZGV2LAorCQkJCSJIb3N0IG5hbWUgJXMgZm9yICVzIGRvZXMgbm90IG1hdGNoIHRoZSIKKwkJCQkiIHJlbW90ZSBhZGFwdGVyIG5hbWUgJXNcbiIsCiAJCQkJcF9zeXN2YWwtPmhvc3RfbmFtZSwKKwkJCQlkZXYtPm5hbWUsCiAJCQkJdGVtcF9ob3N0X25hbWUpOwogCQl9CiAJCWlmIChtZW1jbXAodGVtcF93c19uYW1lLCBwX3N5c3ZhbC0+V1NfbmFtZSwgOCkpIHsKQEAgLTIwNTYsMzUgKzIwNzYsMzggQEAKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJXU05CQUQiKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBwX3N5c3ZhbC0+V1NfbmFtZSk7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgdGVtcF93c19uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXUyBuYW1lIG1pc21hdGNoXG4iLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgOiVzOiAiCi0JCQkgICAgICAgImV4cGVjdGVkIDolczogXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwKLQkJCSAgICAgICBwX3N5c3ZhbC0+V1NfbmFtZSwKLQkJCSAgICAgICB0ZW1wX3dzX25hbWUpOworCQkJZGV2X3dhcm4odGRldiwgIkFkYXB0ZXIgbmFtZSAlcyBmb3IgJXMgZG9lcyBub3QgbWF0Y2giCisJCQkJIiB0aGUgcmVtb3RlIGhvc3QgbmFtZSAlc1xuIiwKKwkJCQlwX3N5c3ZhbC0+V1NfbmFtZSwKKwkJCQlkZXYtPm5hbWUsCisJCQkJdGVtcF93c19uYW1lKTsKIAkJfQogCQlpZiAoKHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplIDwgcF9lbnYtPndyaXRlX3NpemUpICYmCiAJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gMCkpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IHdyaXRlIHNpemUgaXMgdG9vICIKLQkJCQkic21hbGxcbiIsIGRldi0+bmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LAorCQkJCSJUaGUgbG9jYWwgd3JpdGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUiCisJCQkJIiByZW1vdGUgcmVhZCBidWZmZXJcbiIpOwogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIndydHN6YmFkIik7CiAJCX0KIAkJaWYgKChwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplIDwgcF9lbnYtPnJlYWRfc2l6ZSkgJiYKIAkJICAgIChwX2Vudi0+cGFja2luZyA9PSAwKSkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEwpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhvc3QgcmVhZCBzaXplIGlzIHRvbyAiCi0JCQkJInNtYWxsXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4odGRldiwKKwkJCQkiVGhlIGxvY2FsIHJlYWQgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUiCisJCQkJIiByZW1vdGUgd3JpdGUgYnVmZmVyXG4iKTsKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJyZHNpemJhZCIpOwogCQl9CiAJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLCAwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6IFN5c3RlbSB2YWxpZGF0ZSAiCi0JCQkiY29tcGxldGVkLlxuIiwgZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOwotCQlwcmludGsoIiVzOiBzeXMgVmFsaWRhdGUgUnNpemU6JWQgV3NpemU6JWRcbiIsIGRldi0+bmFtZSwKLQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUsIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplKTsKKwkJZGV2X2luZm8odGRldiwKKwkJCSJDTEFXIGRldmljZSAlLjhzOiBTeXN0ZW0gdmFsaWRhdGUiCisJCQkiIGNvbXBsZXRlZC5cbiIsIHRlbXBfd3NfbmFtZSk7CisJCWRldl9pbmZvKHRkZXYsCisJCQkiJXM6IHN5cyBWYWxpZGF0ZSBSc2l6ZTolZCBXc2l6ZTolZFxuIiwKKwkJCWRldi0+bmFtZSwgcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSwKKwkJCXBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplKTsKIAkJcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPSAxOwogCQlpZiAoc3RybmNtcChwX2Vudi0+YXBpX3R5cGUsIFdTX0FQUExfTkFNRV9QQUNLRUQsIDYpID09IDApCiAJCQlwX2Vudi0+cGFja2luZyA9IFBBQ0tJTkdfQVNLOwpAQCAtMjA5Miw4ICsyMTE1LDEwIEBACiAJCWJyZWFrOwogCWNhc2UgU1lTVEVNX1ZBTElEQVRFX1JFU1BPTlNFOgogCQlwX3N5c3ZhbCA9IChzdHJ1Y3Qgc3lzdmFsICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKCIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVzcDogVmVycz0lZCxDb3JyPSVkLFJDPSVkLCIKLQkJCSJXUyBuYW1lPSUuOHMsSG9zdCBuYW1lPSUuOHNcbiIsCisJCWRldl9pbmZvKHRkZXYsCisJCQkiU2V0dGluZ3MgZm9yICVzIHZhbGlkYXRlZCAodmVyc2lvbj0lZCwgIgorCQkJInJlbW90ZSBkZXZpY2U9JWQsIHJjPSVkLCBhZGFwdGVyIG5hbWU9JS44cywgIgorCQkJImhvc3QgbmFtZT0lLjhzKVxuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCiAJCQlwX2N0bGJrLT5jb3JyZWxhdG9yLApAQCAtMjEwMiw0MSArMjEyNywzOSBAQAogCQkJcF9zeXN2YWwtPmhvc3RfbmFtZSk7CiAJCXN3aXRjaCAocF9jdGxiay0+cmMpIHsKIAkJY2FzZSAwOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICIKLQkJCQkiJS44czogU3lzdGVtIHZhbGlkYXRlICIKLQkJCQkiY29tcGxldGVkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CisJCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IENMQVcgZGV2aWNlICIKKwkJCQkiJS44czogU3lzdGVtIHZhbGlkYXRlIGNvbXBsZXRlZC5cbiIsCisJCQkJZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOwogCQkJaWYgKHByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID09IDApCiAJCQkJY2xhd19zdHJ0X2Nvbm5fcmVxKGRldik7CiAJCQlwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBDTEFXX1JDX05BTUVfTUlTTUFUQ0g6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiUmVzcCA6IEhvc3QsIFdTIG5hbWUgaXMgIgotCQkJCSJtaXNtYXRjaFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4odGRldiwgIlZhbGlkYXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YiCisJCQkJIiBhIGhvc3Qgb3IgYWRhcHRlciBuYW1lIG1pc21hdGNoXG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBDTEFXX1JDX1dST05HX1ZFUlNJT046Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiUmVzcCA6IFdyb25nIHZlcnNpb25cbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiVmFsaWRhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiBhIgorCQkJCSIgdmVyc2lvbiBjb25mbGljdFxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEw6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiUmVzcCA6IGJhZCBmcmFtZSBzaXplXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIlZhbGlkYXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YgYSIKKwkJCQkiIGZyYW1lIHNpemUgY29uZmxpY3RcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJImVycm9yIGNvZGU9JWQgXG4iLAotCQkJCSBkZXYtPm5hbWUsIHBfY3RsYmstPnJjKTsKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIHJlamVjdGVkIgorCQkJCSIgdGhlIGNvbm5lY3Rpb25cbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgQ09OTkVDVElPTl9SRVFVRVNUOgogCQlwX2Nvbm5lY3QgPSAoc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjdiBDb25uIFJlcTogVmVycz0lZCxsaW5rX2lkPSVkLCIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBSZWN2IENvbm4gUmVxOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgogCQkJIkNvcnI9JWQsSE9TVCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKQEAgLTIxNDYsMjEgKzIxNjksMjEgQEAKIAkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CiAJCWlmIChwcml2cHRyLT5hY3RpdmVfbGlua19JRCAhPSAwKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCi0JCQkJImFscmVhZHkgbG9naWNhbCBsaW5rIGlzIGFjdGl2ZSBcbiIsCisJCQlkZXZfaW5mbyh0ZGV2LCAiJXMgcmVqZWN0ZWQgYSBjb25uZWN0aW9uIHJlcXVlc3QiCisJCQkJIiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgYWN0aXZlXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJaWYgKHBfY3RsYmstPmxpbmtpZCAhPSAxKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXEgZXJyb3IgOiAiCi0JCQkJInJlcSBsb2dpY2FsIGxpbmsgaWQgaXMgbm90IDFcbiIsCisJCQlkZXZfaW5mbyh0ZGV2LCAiJXMgcmVqZWN0ZWQgYSByZXF1ZXN0IHRvIG9wZW4gbXVsdGlwbGUiCisJCQkJIiBjb25uZWN0aW9uc1xuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCXJjID0gZmluZF9saW5rKGRldiwgcF9jb25uZWN0LT5ob3N0X25hbWUsIHBfY29ubmVjdC0+V1NfbmFtZSk7CiAJCWlmIChyYyAhPSAwKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiAiCi0JCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCisJCQlkZXZfaW5mbyh0ZGV2LCAiJXMgcmVqZWN0ZWQgYSBjb25uZWN0aW9uIHJlcXVlc3QiCisJCQkJIiBiZWNhdXNlIG9mIGEgdHlwZSBtaXNtYXRjaFxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCWNsYXdfc2VuZF9jb250cm9sKGRldiwKQEAgLTIxNzIsNyArMjE5NSw3IEBACiAJCQlwX2Vudi0+cGFja2luZyA9IFBBQ0tfU0VORDsKIAkJCWNsYXdfc25kX2Nvbm5fcmVxKGRldiwgMCk7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgZGV2aWNlICUuOHM6IENvbm5lY3Rpb24gIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IENMQVcgZGV2aWNlICUuOHM6IENvbm5lY3Rpb24gIgogCQkJImNvbXBsZXRlZCBsaW5rX2lkPSVkLlxuIiwKIAkJCWRldi0+bmFtZSwgdGVtcF93c19uYW1lLAogCQkJcF9jdGxiay0+bGlua2lkKTsKQEAgLTIxODIsNyArMjIwNSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ09OTkVDVElPTl9SRVNQT05TRToKIAkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJldmMgQ29ubiBSZXNwOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IFJlY3YgQ29ubiBSZXNwOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgogCQkJIkNvcnI9JWQsUkM9JWQsSG9zdCBhcHBsPSUuOHMsIFdTIGFwcGw9JS44c1xuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCkBAIC0yMTkzLDE2ICsyMjE2LDE4IEBACiAJCQlwX2Nvbm5lY3QtPldTX25hbWUpOwogCiAJCWlmIChwX2N0bGJrLT5yYyAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiByYz0lZCBcbiIsCi0JCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyByZWplY3RlZCIKKwkJCQkiIGEgY29ubmVjdGlvbiByZXF1ZXN0XG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlyYyA9IGZpbmRfbGluayhkZXYsCiAJCQlwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKIAkJaWYgKHJjICE9IDApIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6ICIKLQkJCQkicmVxIGFwcGwgbmFtZSBkb2VzIG5vdCBtYXRjaFxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIgorCQkJCSIgcmVqZWN0ZWQgYSBjb25uZWN0aW9uICIKKwkJCQkicmVxdWVzdCBiZWNhdXNlIG9mIGEgdHlwZSBtaXNtYXRjaFxuIiwKIAkJCQkgZGV2LT5uYW1lKTsKIAkJfQogCQkvKiBzaG91bGQgYmUgdW50aWwgQ09OTkVDVElPTl9DT05GSVJNICovCkBAIC0yMjEwLDcgKzIyMzUsOCBAQAogCQlicmVhazsKIAljYXNlIENPTk5FQ1RJT05fQ09ORklSTToKIAkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY3YgQ29ubiBDb25maXJtOlZlcnM9JWQsbGlua19pZD0lZCwiCisJCWRldl9pbmZvKHRkZXYsCisJCQkiJXM6IFJlY3YgQ29ubiBDb25maXJtOlZlcnM9JWQsbGlua19pZD0lZCwiCiAJCQkiQ29ycj0lZCxIb3N0IGFwcGw9JS44cyxXUyBhcHBsPSUuOHNcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLApAQCAtMjIyMSwyMSArMjI0NywyMSBAQAogCQlpZiAocF9jdGxiay0+bGlua2lkID09IC0ocHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQpKSB7CiAJCQlwcml2cHRyLT5hY3RpdmVfbGlua19JRCA9IHBfY3RsYmstPmxpbmtpZDsKIAkJCWlmIChwX2Vudi0+cGFja2luZyA+IFBBQ0tJTkdfQVNLKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbmZpcm1lZCBOb3cgcGFja2luZ1xuIiwKLQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlkZXZfaW5mbyh0ZGV2LAorCQkJCSIlczogQ29uZmlybWVkIE5vdyBwYWNraW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJCXBfZW52LT5wYWNraW5nID0gRE9fUEFDS0VEOwogCQkJfQogCQkJcF9jaCA9ICZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKIAkJCXdha2VfdXAoJnBfY2gtPndhaXQpOwogCQl9IGVsc2UgewotCQkgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gY29uZmlybTogIgotCQkJCSJ1bmV4cGVjdGVkIGxpbmtpZD0lZCBcbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiQWN0aXZhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiIKKwkJCQkiIGFuIGluY29ycmVjdCBsaW5rIElEPSVkXG4iLAogCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+bGlua2lkKTsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERJU0NPTk5FQ1Q6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEaXNjb25uZWN0OiAiCisJCWRldl9pbmZvKHRkZXYsICIlczogRGlzY29ubmVjdDogIgogCQkJIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkXG4iLAogCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAogCQkJcF9jdGxiay0+bGlua2lkLCBwX2N0bGJrLT5jb3JyZWxhdG9yKTsKQEAgLTIyNDcsMTIgKzIyNzMsMTMgQEAKIAkJCXByaXZwdHItPmFjdGl2ZV9saW5rX0lEID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBDTEFXX0VSUk9SOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBFUlJPUiBkZXRlY3RlZFxuIiwKKwkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgZmFpbGVkXG4iLAogCQkJZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBVbmV4cGVjdGVkIGNvbW1hbmQgY29kZT0lZCBcbiIsCi0JCQlkZXYtPm5hbWUsICBwX2N0bGJrLT5jb21tYW5kKTsKKwkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgc2VudCIKKwkJCSIgYW4gdW5rbm93biBjb21tYW5kIGNvZGVcbiIsCisJCQlkZXYtPm5hbWUpOwogCQlicmVhazsKICAgICAgICAgfQogCkBAIC0yMjk0LDEyICsyMzIxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnBfc3lzdmFsLT5ob3N0X25hbWUsIGxvY2FsX25hbWUsIDgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZwX3N5c3ZhbC0+V1NfbmFtZSwgcmVtb3RlX25hbWUsIDgpOwogCQkJaWYgKHByaXZwdHItPnBfZW52LT5wYWNraW5nID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemU9REVGX1BBQ0tfQlVGU0laRTsKLQkgICAgICAgICAgICAgICAgICAgICAgICBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZT1ERUZfUEFDS19CVUZTSVpFOworCQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPSBERUZfUEFDS19CVUZTSVpFOworCQkJCXBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplID0gREVGX1BBQ0tfQlVGU0laRTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogaG93IGJpZyBpcyB0aGUgYmlnZ2VzdCBncm91cCBvZiBwYWNrZXRzICovCi0JCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZT1wcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOwotCSAgICAgICAgICAgICAgICAgICAgICAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplPXByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOworCQkJICAgcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSA9CisJCQkJcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKKwkJCSAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplID0KKwkJCQlwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKIAkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmcF9zeXN2YWwtPnJlc2VydmVkLCAweDAwLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ4NSw3ICsyNTE0LDYgQEAKIAlwX2RldiA9ICZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldjsKIAlwX2VudiA9IHByaXZwdHItPnBfZW52OwogICAgICAgICBwX3RoaXNfY2N3PXByaXZwdHItPnBfcmVhZF9hY3RpdmVfZmlyc3Q7Ci0gICAgICAgIGk9MDsKIAl3aGlsZSAocF90aGlzX2NjdyE9TlVMTCAmJiBwX3RoaXNfY2N3LT5oZWFkZXIuZmxhZyE9Q0xBV19QRU5ESU5HKSB7CiAJCXBhY2tfb2ZmID0gMDsKIAkJcCA9IDA7CkBAIC0yNTExLDggKzI1MzksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG10Y190aGlzX2ZybT0xOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfdGhpc19jY3ctPmhlYWRlci5sZW5ndGghPQogCQkJCXByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiAlczogSW52YWxpZCBmcmFtZSBkZXRlY3RlZCAiCi0JCQkJCSJsZW5ndGggaXMgJTAyeFxuIiAsCisJCQkJZGV2X3dhcm4ocF9kZXYsCisJCQkJCSJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIgorCQkJCQkiIHNlbnQgYSBmYXVsdHkiCisJCQkJCSIgZnJhbWUgb2YgbGVuZ3RoICUwMnhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX3RoaXNfY2N3LT5oZWFkZXIubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNTQ0LDcgKzI1NzQsNyBAQAogCQkJCWdvdG8gTmV4dEZyYW1lOwogCQkJcF9wYWNrZCA9IHBfdGhpc19jY3ctPnBfYnVmZmVyK3BhY2tfb2ZmOwogCQkJcF9wYWNraCA9IChzdHJ1Y3QgY2xhd3BoICopIHBfcGFja2Q7Ci0JCQlpZiAoKHBfcGFja2gtPmxlbiA9PSAwKSB8fCAvKiBhbGwgZG9uZSB3aXRoIHRoaXMgZnJhbWU/ICovCisJCQlpZiAoKHBfcGFja2gtPmxlbiA9PSAwKSB8fCAvKiBkb25lIHdpdGggdGhpcyBmcmFtZT8gKi8KIAkJCSAgICAocF9wYWNraC0+ZmxhZyAhPSAwKSkKIAkJCQlnb3RvIE5leHRGcmFtZTsKIAkJCWJ5dGVzX3RvX21vdiA9IHBfcGFja2gtPmxlbjsKQEAgLTI1OTQsOSArMjYyNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkJCQlkZXZfaW5mbyhwX2RldiwgIkFsbG9jYXRpbmcgYSBidWZmZXIgZm9yIgorCQkJCQkiIGluY29taW5nIGRhdGEgZmFpbGVkXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+c3RhdHMucnhfZHJvcHBlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMoKSBsb3cgb24gbWVtb3J5XG4iLAotCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5tdGNfb2Zmc2V0PTA7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5tdGNfbG9naWNhbF9saW5rPS0xOwpAQCAtMjcyMCw4ICsyNzUwLDggQEAKICAgICAgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcGFybSA9ICh1bnNpZ25lZCBsb25nKSBwX2NoOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiU3RXcnRJTyIpOwotICAgICAgICAgICAgICAgIHJjID0gY2N3X2RldmljZV9zdGFydCAocF9jaC0+Y2RldiwmcF9maXJzdF9jY3ctPndyaXRlLCBwYXJtLAotCQkJCSAgICAgICAweGZmLCAwKTsKKwkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KHBfY2gtPmNkZXYsICZwX2ZpcnN0X2Njdy0+d3JpdGUsIHBhcm0sCisJCQkJICAgICAgMHhmZiwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKHJjICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNjd19jaGVja19yZXR1cm5fY29kZShwX2NoLT5jZGV2LCByYyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjgxNiwyMiArMjg0NiwyNiBAQAogICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nIG9mIHRoZSBuZXQgZGV2aWNlIGV4Y2VwdCB0aGUgbmFtZSBhbmQgdGhlCiAgKiBjaGFubmVsIHN0cnVjdHMuCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2xhd19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjbGF3X29wZW4sCisJLm5kb19zdG9wCQk9IGNsYXdfcmVsZWFzZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjbGF3X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjbGF3X3R4LAorCS5uZG9fY2hhbmdlX210dQkJPSBjbGF3X2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZAogY2xhd19pbml0X25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9kZXYiKTsKIAlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgZGV2LT5uYW1lKTsKIAlkZXYtPm10dSA9IENMQVdfREVGQVVMVF9NVFVfU0laRTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNsYXdfdHg7Ci0JZGV2LT5vcGVuID0gY2xhd19vcGVuOwotCWRldi0+c3RvcCA9IGNsYXdfcmVsZWFzZTsKLQlkZXYtPmdldF9zdGF0cyA9IGNsYXdfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gY2xhd19jaGFuZ2VfbXR1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKIAlkZXYtPmFkZHJfbGVuID0gMDsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEzMDA7CiAJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmY2xhd19uZXRkZXZfb3BzOwogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0b2siKTsKIAlyZXR1cm47CiB9CkBAIC0yODgwLDggKzI5MTQsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogYWRkIGZvciAlc1xuIiwKLQkgICAgICAgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1JFQURdLT5kZXYpKTsKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgImFkZCBmb3IgJXNcbiIsCisJCSBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbUkVBRF0tPmRldikpOwogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJuZXdfZGV2Iik7CiAJcHJpdnB0ciA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJY2dkZXYtPmNkZXZbUkVBRF0tPmRldi5kcml2ZXJfZGF0YSA9IHByaXZwdHI7CkBAIC0yODk3LDI5ICsyOTMxLDI4IEBACiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBhZGRfY2hhbm5lbChjZ2Rldi0+Y2RldlsxXSwxLHByaXZwdHIpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiYWRkIGNoYW5uZWwgZmFpbGVkIHdpdGggcmV0ID0gJWRcbiIsIHJldCk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LCAiQ3JlYXRpbmcgYSBDTEFXIGdyb3VwIGRldmljZSIKKwkJCSIgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZ2Rldi0+Y2RldltSRUFEXSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjbGF3OiBjY3dfZGV2aWNlX3NldF9vbmxpbmUgJXMgUkVBRCBmYWlsZWQgIgotCQkgICAgICAgIndpdGggcmV0ID0gJWRcbiIsIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltSRUFEXS0+ZGV2KSwKLQkJICAgICAgIHJldCk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LAorCQkJIlNldHRpbmcgdGhlIHJlYWQgc3ViY2hhbm5lbCBvbmxpbmUiCisJCQkiIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbV1JJVEVdKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNsYXc6IGNjd19kZXZpY2Vfc2V0X29ubGluZSAlcyBXUklURSBmYWlsZWQgIgotCQkgICAgICAgIndpdGggcmV0ID0gJWRcbiIsIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltXUklURV0tPmRldiksCi0JCSAgICAgICByZXQpOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwKKwkJCSJTZXR0aW5nIHRoZSB3cml0ZSBzdWJjaGFubmVsIG9ubGluZSAiCisJCQkiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCWRldiA9IGFsbG9jX25ldGRldigwLCJjbGF3JWQiLGNsYXdfaW5pdF9uZXRkZXZpY2UpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOmFsbG9jX25ldGRldiBmYWlsZWRcbiIsX19mdW5jX18pOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwKKwkJCSJBY3RpdmF0aW5nIHRoZSBDTEFXIGRldmljZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJZGV2LT5tbF9wcml2ID0gcHJpdnB0cjsKQEAgLTI5NDcsMTMgKzI5ODAsMTMgQEAKIAlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5uZGV2ID0gZGV2OwogCXByaXZwdHItPnBfZW52LT5uZGV2ID0gZGV2OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6cmVhZHNpemU9JWQgIHdyaXRlc2l6ZT0lZCAiCisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIlczpyZWFkc2l6ZT0lZCAgd3JpdGVzaXplPSVkICIKIAkJInJlYWRidWZmZXI9JWQgd3JpdGVidWZmZXI9JWQgcmVhZD0weCUwNHggd3JpdGU9MHglMDR4XG4iLAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9lbnYtPnJlYWRfc2l6ZSwKIAkJcF9lbnYtPndyaXRlX3NpemUsIHBfZW52LT5yZWFkX2J1ZmZlcnMsCiAgICAgICAgICAgICAgICAgcF9lbnYtPndyaXRlX2J1ZmZlcnMsIHBfZW52LT5kZXZub1tSRUFEXSwKIAkJcF9lbnYtPmRldm5vW1dSSVRFXSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOmhvc3RfbmFtZTolLjhzLCBhZGFwdGVyX25hbWUgIgorCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiJXM6aG9zdF9uYW1lOiUuOHMsIGFkYXB0ZXJfbmFtZSAiCiAJCSI6JS44cyBhcGlfdHlwZTogJS44c1xuIiwKICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfZW52LT5ob3N0X25hbWUsCiAJCXBfZW52LT5hZGFwdGVyX25hbWUgLCBwX2Vudi0+YXBpX3R5cGUpOwpAQCAtMjk5Nyw4ICszMDMwLDggQEAKIAluZGV2ID0gcHJpdi0+Y2hhbm5lbFtSRUFEXS5uZGV2OwogCWlmIChuZGV2KSB7CiAJCS8qIENsb3NlIHRoZSBkZXZpY2UgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBzaHV0aW5nIGRvd24gXG4iLG5kZXYtPm5hbWUpOworCQlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiVzOiBzaHV0dGluZyBkb3duIFxuIiwKKwkJCW5kZXYtPm5hbWUpOwogCQlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfUlVOTklORykKIAkJCXJldCA9IGNsYXdfcmVsZWFzZShuZGV2KTsKIAkJbmRldi0+ZmxhZ3MgJj1+SUZGX1JVTk5JTkc7CkBAIC0zMDIzLDggKzMwNTYsNyBAQAogCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBkZXZfbmFtZSgmY2dkZXYtPmRldikpOwogCXByaXYgPSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCUJVR19PTighcHJpdik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogJXMoKSBjYWxsZWQgJXMgd2lsbCBiZSByZW1vdmVkLlxuIiwKLQkJCV9fZnVuY19fLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbMF0tPmRldikpOworCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiIHdpbGwgYmUgcmVtb3ZlZC5cbiIpOwogCWlmIChjZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKQogCQljbGF3X3NodXRkb3duX2RldmljZShjZ2Rldik7CiAJY2xhd19yZW1vdmVfZmlsZXMoJmNnZGV2LT5kZXYpOwpAQCAtMzA2Myw3ICszMDk1LDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMTAwLDcgKzMxMzMsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzEzOCw3ICszMTcyLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzE4NSw3ICszMjIwLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMyMjYsNyArMzI2Miw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKnBfZW52OwpAQCAtMzI4OSw3ICszMzI2LDcgQEAKIHsKIAl1bnJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjbGF3X2dyb3VwX2RyaXZlcik7CiAJY2xhd191bnJlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogRHJpdmVyIHVubG9hZGVkXG4iKTsKKwlwcl9pbmZvKCJEcml2ZXIgdW5sb2FkZWRcbiIpOwogCiB9CiAKQEAgLTMzMDMsMTIgKzMzNDAsMTIgQEAKIGNsYXdfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IHN0YXJ0aW5nIGRyaXZlclxuIik7CiAKKwlwcl9pbmZvKCJMb2FkaW5nICVzXG4iLCB2ZXJzaW9uKTsKIAlyZXQgPSBjbGF3X3JlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiAlcygpIGRlYnVnX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKLQkJCV9fZnVuY19fLHJldCk7CisJCXByX2VycigiUmVnaXN0ZXJpbmcgd2l0aCB0aGUgUy8zOTAgZGVidWcgZmVhdHVyZSIKKwkJCSIgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfbW9kIik7CkBAIC0zMzE2LDggKzMzNTMsOCBAQAogCWlmIChyZXQpIHsKIAkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfYmFkIik7CiAJCWNsYXdfdW5yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OyAlcygpIGN1MzA4OCByZWdpc3RlciBmYWlsZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXyxyZXQpOworCQlwcl9lcnIoIlJlZ2lzdGVyaW5nIHdpdGggdGhlIGN1MzA4OCBkZXZpY2UgZHJpdmVyIGZhaWxlZCAiCisJCQkgICAid2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKaW5kZXggZjI5YzcwOC4uNGRlZDlhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCkBAIC00MTAsOSArNDEwLDggQEAKIAkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCQkJZ290byBhZ2FpbjsKIAl9Ci0JYmxvY2tfbGVuIC09IDI7Ci0JaWYgKGJsb2NrX2xlbiA+IDApIHsKLQkJKigoX191MTYgKilza2ItPmRhdGEpID0gYmxvY2tfbGVuOworCWlmIChibG9ja19sZW4gPiAyKSB7CisJCSooKF9fdTE2ICopc2tiLT5kYXRhKSA9IGJsb2NrX2xlbiAtIDI7CiAJCWN0Y21fdW5wYWNrX3NrYihjaCwgc2tiKTsKIAl9CiAgYWdhaW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwppbmRleCAyNjc4NTczLi43N2Y0MDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKQEAgLTEwNSw3ICsxMDUsOCBAQAogCQkJcmV0dXJuOwogCQl9CiAJCXBza2ItPnByb3RvY29sID0gbnRvaHMoaGVhZGVyLT50eXBlKTsKLQkJaWYgKGhlYWRlci0+bGVuZ3RoIDw9IExMX0hFQURFUl9MRU5HVEgpIHsKKwkJaWYgKChoZWFkZXItPmxlbmd0aCA8PSBMTF9IRUFERVJfTEVOR1RIKSB8fAorCQkgICAgKGxlbiA8PSBMTF9IRUFERVJfTEVOR1RIKSkgewogCQkJaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfSUxMRUdBTFNJWkUpKSB7CiAJCQkJQ1RDTV9EQkZfVEVYVF8oRVJST1IsIENUQ19EQkZfRVJST1IsCiAJCQkJCSIlcyglcyk6IElsbGVnYWwgcGFja2V0IHNpemUgJWQoJWQsJWQpIgpAQCAtMTY3LDExICsxNjgsOSBAQAogCQlpZiAobGVuID4gMCkgewogCQkJc2tiX3B1bGwocHNrYiwgaGVhZGVyLT5sZW5ndGgpOwogCQkJaWYgKHNrYl90YWlscm9vbShwc2tiKSA8IExMX0hFQURFUl9MRU5HVEgpIHsKLQkJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19PVkVSUlVOKSkgewotCQkJCQlDVENNX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LAotCQkJCQkJIk92ZXJydW4gaW4gY3RjbV91bnBhY2tfc2tiIik7Ci0JCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwotCQkJCX0KKwkJCQlDVENNX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LAorCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKKwkJCQljaC0+bG9nZmxhZ3MgfD0gTE9HX0ZMQUdfT1ZFUlJVTjsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlza2JfcHV0KHBza2IsIExMX0hFQURFUl9MRU5HVEgpOwpAQCAtOTA2LDExICs5MDUsMTEgQEAKIAl9CiAKIAlpZiAoY3RjbV90ZXN0X2FuZF9zZXRfYnVzeShkZXYpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlpZiAoY3RjbV90cmFuc21pdF9za2IocHJpdi0+Y2hhbm5lbFtXUklURV0sIHNrYikgIT0gMCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5OSwxMiArMTA5OCwyNCBAQAogCiBzdHJ1Y3QgbXBjX2dyb3VwICpjdGNtcGNfaW5pdF9tcGNfZ3JvdXAoc3RydWN0IGN0Y21fcHJpdiAqcHJpdik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY3RjbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjdGNtX29wZW4sCisJLm5kb19zdG9wCQk9IGN0Y21fY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gY3RjbV9zdGF0cywKKwkubmRvX2NoYW5nZV9tdHUJICAgCT0gY3RjbV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjdGNtX3R4LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdGNtX21wY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjdGNtX29wZW4sCisJLm5kb19zdG9wCQk9IGN0Y21fY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gY3RjbV9zdGF0cywKKwkubmRvX2NoYW5nZV9tdHUJICAgCT0gY3RjbV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjdGNtcGNfdHgsCit9OworCiB2b2lkIHN0YXRpYyBjdGNtX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+b3BlbiA9IGN0Y21fb3BlbjsKLQlkZXYtPnN0b3AgPSBjdGNtX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gY3RjbV9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBjdGNtX2NoYW5nZV9tdHU7CiAJZGV2LT50eXBlID0gQVJQSFJEX1NMSVA7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKQEAgLTExNTcsMTIgKzExNjgsMTIgQEAKIAkJZGV2LT5tdHUgPSBNUENfQlVGU0laRV9ERUZBVUxUIC0KIAkJCQlUSF9IRUFERVJfTEVOR1RIIC0gUERVX0hFQURFUl9MRU5HVEg7CiAKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjdGNtcGNfdHg7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZjdGNtX21wY19uZXRkZXZfb3BzOwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSDsKIAkJcHJpdi0+YnVmZmVyX3NpemUgPSBNUENfQlVGU0laRV9ERUZBVUxUOwogCX0gZWxzZSB7CiAJCWRldi0+bXR1ID0gQ1RDTV9CVUZTSVpFX0RFRkFVTFQgLSBMTF9IRUFERVJfTEVOR1RIIC0gMjsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjdGNtX3R4OworCQlkZXYtPm5ldGRldl9vcHMgPSAmY3RjbV9uZXRkZXZfb3BzOwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IExMX0hFQURFUl9MRU5HVEggKyAyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCmluZGV4IDNkYjVmODQuLjc4MWUxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKQEAgLTM5Myw3ICszOTMsNiBAQAogCQl9IGVsc2UgewogCQkJLyogdGhlcmUgYXJlIHByb2JsZW1zLi4uYmFpbCBvdXQJICAgICovCiAJCQkvKiB0aGVyZSBtYXkgYmUgYSBzdGF0ZSBtaXNtYXRjaCBzbyByZXN0YXJ0ICovCi0JCQlncnAtPnBvcnRfcGVyc2lzdCA9IDE7CiAJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKIAkJCWdycC0+YWxsb2NjaGFuX2NhbGxiYWNrX3JldHJpZXMgPSAwOwogCQl9CkBAIC02OTksMTEgKzY5OCw5IEBACiAJcmV0dXJuOwogCiBkb25lOgotCWlmIChyYyAhPSAwKSB7Ci0JCWdycC0+aW5fc3dlZXAgPSAwOwotCQljdGNtX2NsZWFyX2J1c3lfZG8oZGV2KTsKLQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7Ci0JfQorCWdycC0+aW5fc3dlZXAgPSAwOworCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOworCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCiAJcmV0dXJuOwogfQpAQCAtMTExOCw3ICsxMTE1LDYgQEAKIAogCQlpZiAodW5saWtlbHkoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSAhPSBNUENHX1NUQVRFX1JFQURZKSkKIAkJCQkJZ290byBkb25lOwotCQlwZHVfbGFzdF9zZWVuID0gMDsKIAkJd2hpbGUgKChwc2tiLT5sZW4gPiAwKSAmJiAhcGR1X2xhc3Rfc2VlbikgewogCQkJY3Vycl9wZHUgPSAoc3RydWN0IHBkdSAqKXBza2ItPmRhdGE7CiAKQEAgLTEzOTYsOCArMTM5Miw3IEBACiAJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCWlmICgoZ3JwLT5zYXZlZF9zdGF0ZSAhPSBNUENHX1NUQVRFX1JFU0VUKSB8fAogCQkvKiBkZWFsbG9jX2NoYW5uZWwgaGFzIGJlZW4gY2FsbGVkICovCi0JCQkoKGdycC0+c2F2ZWRfc3RhdGUgPT0gTVBDR19TVEFURV9SRVNFVCkgJiYKLQkJCQkJCShncnAtPnBvcnRfcGVyc2lzdCA9PSAwKSkpCisJCShncnAtPnBvcnRfcGVyc2lzdCA9PSAwKSkKIAkJZnNtX2RlbHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKIAogCXdjaCA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOwpAQCAtMTkxNywxMCArMTkxMiw4IEBACiAKIAlpZiAocHJpdikKIAkJZ3JwID0gcHJpdi0+bXBjZzsKLQlpZiAoZ3JwID09IE5VTEwpIHsKLQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJaWYgKGdycCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQogCiAJZm9yIChkaXJlY3Rpb24gPSBSRUFEOyBkaXJlY3Rpb24gPD0gV1JJVEU7IGRpcmVjdGlvbisrKQl7CiAJCXN0cnVjdCBjaGFubmVsICpjaCA9IHByaXYtPmNoYW5uZWxbZGlyZWN0aW9uXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IDQ5YzNiZmEuLmE0NWJjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIApAQCAtMTI1OSw3ICsxMjYwLDYgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbjRfZGV2OwogCiAJY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGF0YTsKLQlkYWVtb25pemUoInJlZ2lwbSIpOwogCiAJaWYgKCFsY3NfZG9fcnVuX3RocmVhZChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCiAJCXJldHVybiAwOwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOwogCX0KIAlpZiAoY2FyZC0+c3RhdGUgIT0gREVWX1NUQVRFX1VQKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAJCWNhcmQtPnR4X2J1ZmZlciA9IGxjc19nZXRfYnVmZmVyKCZjYXJkLT53cml0ZSk7CiAJCWlmIChjYXJkLT50eF9idWZmZXIgPT0gTlVMTCkgewogCQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmMgPSAtRUJVU1k7CisJCQlyYyA9IE5FVERFVl9UWF9CVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJY2FyZC0+dHhfYnVmZmVyLT5jYWxsYmFjayA9IGxjc190eGJ1ZmZlcl9jYjsKQEAgLTE3NTMsMTEgKzE3NTMsMTAgQEAKIAlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxjc19jYXJkLCBrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOwogCUxDU19EQkZfVEVYVCg1LCB0cmFjZSwgImtybnRocmQiKTsKIAlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVjb3ZlcnksICh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCQlrdGhyZWFkX3J1bihsY3NfcmVjb3ZlcnksIGNhcmQsICJsY3NfcmVjb3ZlciIpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQobGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywKLQkJCQkodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKKwkJa3RocmVhZF9ydW4obGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywgY2FyZCwgInJlZ2lwbSIpOwogI2VuZGlmCiB9CiAKQEAgLTIxMDEsNiArMjEwMCwyMCBAQAogLyoqCiAgKiBsY3NfbmV3X2RldmljZSB3aWxsIGJlIGNhbGxlZCBieSBzZXR0aW5nIHRoZSBncm91cCBkZXZpY2Ugb25saW5lLgogICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxjc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsY3Nfb3Blbl9kZXZpY2UsCisJLm5kb19zdG9wCQk9IGxjc19zdG9wX2RldmljZSwKKwkubmRvX2dldF9zdGF0cwkJPSBsY3NfZ2V0c3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGxjc19zdGFydF94bWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsY3NfbWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGNzX29wZW5fZGV2aWNlLAorCS5uZG9fc3RvcAkJPSBsY3Nfc3RvcF9kZXZpY2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbGNzX2dldHN0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsY3Nfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGxjc19zZXRfbXVsdGljYXN0X2xpc3QsCit9OwogCiBzdGF0aWMgaW50CiBsY3NfbmV3X2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjY3dnZGV2KQpAQCAtMjE2OCwxNCArMjE4MSwxMSBAQAogCQlnb3RvIG91dDsKIAljYXJkLT5kZXYgPSBkZXY7CiAJY2FyZC0+ZGV2LT5tbF9wcml2ID0gY2FyZDsKLQljYXJkLT5kZXYtPm9wZW4gPSBsY3Nfb3Blbl9kZXZpY2U7Ci0JY2FyZC0+ZGV2LT5zdG9wID0gbGNzX3N0b3BfZGV2aWNlOwotCWNhcmQtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gbGNzX3N0YXJ0X3htaXQ7Ci0JY2FyZC0+ZGV2LT5nZXRfc3RhdHMgPSBsY3NfZ2V0c3RhdHM7CisJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJmxjc19uZXRkZXZfb3BzOwogCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLCBjYXJkLT5tYWMsIExDU19NQUNfTEVOR1RIKTsKICNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUCiAJaWYgKCFsY3NfY2hlY2tfbXVsdGljYXN0X3N1cHBvcnQoY2FyZCkpCi0JCWNhcmQtPmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGNzX3NldF9tdWx0aWNhc3RfbGlzdDsKKwkJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJmxjc19tY19uZXRkZXZfb3BzOwogI2VuZGlmCiBuZXRkZXZfb3V0OgogCWxjc19zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsMHhmZmZmZmZmZik7CkBAIC0yMjU4LDcgKzIyNjgsNiBAQAogICAgICAgICBpbnQgcmM7CiAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBwdHI7Ci0JZGFlbW9uaXplKCJsY3NfcmVjb3ZlciIpOwogCiAJTENTX0RCRl9URVhUKDQsIHRyYWNlLCAicmVjb3ZlcjEiKTsKIAlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA5MzBlMmZjLi5iZTcxNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMTMxMiw3ICsxMzEyLDcgQEAKIAogCWlmIChuZXRpdWN2X3Rlc3RfYW5kX3NldF9idXN5KGRldikpIHsKIAkJSVVDVl9EQkZfVEVYVChkYXRhLCAyLCAiRUJVU1kgZnJvbSBuZXRpdWN2X3R4XG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlyYyA9IG5ldGl1Y3ZfdHJhbnNtaXRfc2tiKHByaXZwdHItPmNvbm4sIHNrYikgIT0gMDsKQEAgLTE4NzYsMjAgKzE4NzYsMjQgQEAKIC8qKgogICogSW5pdGlhbGl6ZSBhIG5ldCBkZXZpY2UuIChDYWxsZWQgZnJvbSBrZXJuZWwgaW4gYWxsb2NfbmV0ZGV2KCkpCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0aXVjdl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuZXRpdWN2X29wZW4sCisJLm5kb19zdG9wCQk9IG5ldGl1Y3ZfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbmV0aXVjdl9zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gbmV0aXVjdl90eCwKKwkubmRvX2NoYW5nZV9tdHUJICAgCT0gbmV0aXVjdl9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgbmV0aXVjdl9zZXR1cF9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm10dQkgICAgICAgICA9IE5FVElVQ1ZfTVRVX0RFRkFVTFQ7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgID0gbmV0aXVjdl90eDsKLQlkZXYtPm9wZW4JICAgICAgICAgPSBuZXRpdWN2X29wZW47Ci0JZGV2LT5zdG9wCSAgICAgICAgID0gbmV0aXVjdl9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgICAgICA9IG5ldGl1Y3Zfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ICAgICAgICAgID0gbmV0aXVjdl9jaGFuZ2VfbXR1OwogCWRldi0+ZGVzdHJ1Y3RvciAgICAgICAgICA9IG5ldGl1Y3ZfZnJlZV9uZXRkZXZpY2U7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgID0gTkVUSVVDVl9IRFJMRU47CiAJZGV2LT5hZGRyX2xlbiAgICAgICAgICAgID0gMDsKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICAgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICAgICAgPSBORVRJVUNWX1FVRVVFTEVOX0RFRkFVTFQ7CiAJZGV2LT5mbGFncwkgICAgICAgICA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKKwlkZXYtPm5ldGRldl9vcHMJCSA9ICZuZXRpdWN2X25ldGRldl9vcHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKaW5kZXggZTBjNDU1Ny4uNDQ3ZTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKIAl1bnNpZ25lZCBpbnQgc2dfc2tic19yeDsKIAl1bnNpZ25lZCBpbnQgc2dfZnJhZ3Nfcng7CiAJdW5zaWduZWQgaW50IHNnX2FsbG9jX3BhZ2Vfcng7CisJdW5zaWduZWQgaW50IHR4X2NzdW07CiB9OwogCiAvKiBSb3V0aW5nIHN0dWZmICovCkBAIC00MDMsNyArNDA0LDYgQEAKIC8qIHBvc3NpYmxlIHR5cGVzIG9mIHFldGggbGFyZ2Vfc2VuZCBzdXBwb3J0ICovCiBlbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB7CiAJUUVUSF9MQVJHRV9TRU5EX05PLAotCVFFVEhfTEFSR0VfU0VORF9FRERQLAogCVFFVEhfTEFSR0VfU0VORF9UU08sCiB9OwogCkBAIC04MzgsMTEgKzgzOCw5IEBACiBpbnQgcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsIGludCk7CiBpbnQgcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqLCB2b2lkICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkJc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIGludCwKLQkJCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqLCBpbnQsIGludCk7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50LCBpbnQsIGludCk7CiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLAotCQkgICAgaW50LCBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7CisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50KTsKIGludCBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICopOwogdm9pZCBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqLCB1NjQgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZDFiNWJlYi4uYzgyN2Q2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMjYsNyArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAicWV0aF9jb3JlLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKIAogc3RydWN0IHFldGhfZGJmX2luZm8gcWV0aF9kYmZbUUVUSF9EQkZfSU5GT1NdID0gewogCS8qIGRlZmluZSBkYmYgLSBOYW1lLCBQYWdlcywgQXJlYXMsIE1heGxlbiwgTGV2ZWwsIFZpZXcsIEhhbmRsZSAqLwpAQCAtMjg1LDE3ICsyODMsNiBAQAogCQluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CiAJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKIAlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6Ci0JCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7Ci0JCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCU5FVElGX0ZfSFdfQ1NVTTsKLQkJfSBlbHNlIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAotCQkJCQkJTkVUSUZfRl9IV19DU1VNKTsKLQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQkJCXJjID0gLUVPUE5PVFNVUFA7Ci0JCX0KLQkJYnJlYWs7CiAJY2FzZSBRRVRIX0xBUkdFX1NFTkRfVFNPOgogCQlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX1RTTykpIHsKIAkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKQEAgLTk1Niw3ICs5NDMsNiBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlza2IgPSBza2JfZGVxdWV1ZSgmYnVmLT5za2JfbGlzdCk7CiAJfQotCXFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhidWYpOwogCWZvciAoaSA9IDA7IGkgPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpOyArK2kpIHsKIAkJaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgJiYgYnVmLT5pc19oZWFkZXJbaV0pCiAJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwKQEAgLTE2OTAsNyArMTY3Niw3IEBACiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBldmVudF90aW1lb3V0OwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzZW5kY3RsIik7CkBAIC0xNzE1LDkgKzE3MDEsMTAgQEAKIAlxZXRoX3ByZXBhcmVfY29udHJvbF9kYXRhKGNhcmQsIGxlbiwgaW9iKTsKIAogCWlmIChJU19JUEEoaW9iLT5kYXRhKSkKLQkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX0lQQV9USU1FT1VUOworCQlldmVudF90aW1lb3V0ID0gUUVUSF9JUEFfVElNRU9VVDsKIAllbHNlCi0JCXRpbWVvdXQgPSBqaWZmaWVzICsgUUVUSF9USU1FT1VUOworCQlldmVudF90aW1lb3V0ID0gUUVUSF9USU1FT1VUOworCXRpbWVvdXQgPSBqaWZmaWVzICsgZXZlbnRfdGltZW91dDsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJub2lycXBuZCIpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjYXJkLT53cml0ZS5jY3dkZXYpLCBmbGFncyk7CkBAIC0xNzQ1LDcgKzE3MzIsNyBAQAogCWlmICgoY21kLT5oZHIuY29tbWFuZCA9PSBJUEFfQ01EX1NFVElQKSAmJgogCSAgICAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KSkgewogCQlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZXBseS0+d2FpdF9xLAotCQkgICAgYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCksIHRpbWVvdXQpKQorCQkgICAgYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCksIGV2ZW50X3RpbWVvdXQpKQogCQkJZ290byB0aW1lX2VycjsKIAl9IGVsc2UgewogCQl3aGlsZSAoIWF0b21pY19yZWFkKCZyZXBseS0+cmVjZWl2ZWQpKSB7CkBAIC0yNjkzLDQwICsyNjgwLDIxIEBACiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgcWRpb19lcnIpCiB7CiAJaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmOwotCWludCBjYyA9IHFkaW9fZXJyICYgMzsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJoZHNuZGVyciIpOwogCXFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLCAicW91dGVyciIpOwotCXN3aXRjaCAoY2MpIHsKLQljYXNlIDA6Ci0JCWlmIChxZGlvX2VycikgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgImxua2ZhaWwiKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiUwNHggJTAyeCIsCi0JCQkJICAgICAgICh1MTYpcWRpb19lcnIsICh1OClzYmFsZjE1KTsKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCQl9CisKKwlpZiAoIXFkaW9fZXJyKQogCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX05PTkU7Ci0JY2FzZSAyOgotCQlpZiAocWRpb19lcnIgJiBRRElPX0VSUk9SX1NJR0FfQlVTWSkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzJCIik7Ci0JCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUOwotCQl9Ci0JCWlmICgoc2JhbGYxNSA+PSAxNSkgJiYgKHNiYWxmMTUgPD0gMzEpKQotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9SRVRSWTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JCS8qIGxvb2sgYXQgcWRpb19lcnJvciBhbmQgc2JhbGYgMTUgKi8KLQljYXNlIDE6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MxIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCWNhc2UgMzoKLQlkZWZhdWx0OgotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMyIpOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7Ci0JfQorCisJaWYgKChzYmFsZjE1ID49IDE1KSAmJiAoc2JhbGYxNSA8PSAzMSkpCisJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfUkVUUlk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOworCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlMDR4ICUwMngiLAorCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOworCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwogfQogCiAvKgpAQCAtMjg2MiwxMCArMjgzMCwxNCBAQAogCQkJcWV0aF9nZXRfbWljcm9zKCkgLQogCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lOwogCWlmIChyYykgeworCQlxdWV1ZS0+Y2FyZC0+c3RhdHMudHhfZXJyb3JzICs9IGNvdW50OworCQkvKiBpZ25vcmUgdGVtcG9yYXJ5IFNJR0EgZXJyb3JzIHdpdGhvdXQgYnVzeSBjb25kaXRpb24gKi8KKwkJaWYgKHJjID09IFFESU9fRVJST1JfU0lHQV9UQVJHRVQpCisJCQlyZXR1cm47CiAJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJmbHVzaGJ1ZiIpOwogCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiBlcnIlZCIsIHJjKTsKIAkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIlcyIsIENBUkRfRERFVl9JRChxdWV1ZS0+Y2FyZCkpOwotCQlxdWV1ZS0+Y2FyZC0+c3RhdHMudHhfZXJyb3JzICs9IGNvdW50OworCiAJCS8qIHRoaXMgbXVzdCBub3QgaGFwcGVuIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLiBpZiBpdAogCQkgKiBoYXBwZW5zIHNvbWV0aGluZyBpcyByZWFsbHkgd3JvbmcgLT4gcmVjb3ZlciAqLwogCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHF1ZXVlLT5jYXJkKTsKQEAgLTI5NDAsMTMgKzI5MTIsNyBAQAogCX0KIAlmb3IgKGkgPSBmaXJzdF9lbGVtZW50OyBpIDwgKGZpcnN0X2VsZW1lbnQgKyBjb3VudCk7ICsraSkgewogCQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCQkvKndlIG9ubHkgaGFuZGxlIHRoZSBLSUNLX0lUIGVycm9yIGJ5IGRvaW5nIGEgcmVjb3ZlcnkgKi8KLQkJaWYgKHFldGhfaGFuZGxlX3NlbmRfZXJyb3IoY2FyZCwgYnVmZmVyLCBxZGlvX2Vycm9yKQotCQkJCT09IFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUKXsKLQkJCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKLQkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJcWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpOwogCQlxZXRoX2NsZWFyX291dHB1dF9idWZmZXIocXVldWUsIGJ1ZmZlcik7CiAJfQogCWF0b21pY19zdWIoY291bnQsICZxdWV1ZS0+dXNlZF9idWZmZXJzKTsKQEAgLTMxODcsMTEgKzMxNTMsOSBAQAogaW50IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAogCQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3RydWN0IHFldGhfaGRyICpoZHIsIGludCBlbGVtZW50c19uZWVkZWQsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LCBpbnQgb2Zmc2V0LCBpbnQgaGRfbGVuKQorCQlpbnQgb2Zmc2V0LCBpbnQgaGRfbGVuKQogewogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwotCWludCBidWZmZXJzX25lZWRlZCA9IDA7Ci0JaW50IGZsdXNoX2NudCA9IDA7CiAJaW50IGluZGV4OwogCiAJLyogc3BpbiB1bnRpbCB3ZSBnZXQgdGhlIHF1ZXVlIC4uLiAqLwpAQCAtMzIwNiwyNyArMzE3MCwxMSBAQAogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkKIAkJZ290byBvdXQ7Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKKwlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKIAkJCQkJICBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCWVsc2UgewotCQlidWZmZXJzX25lZWRlZCA9IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHF1ZXVlLAotCQkJCQkJCQkJY3R4KTsKLQkJaWYgKGJ1ZmZlcnNfbmVlZGVkIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9Ci0JCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyBidWZmZXJzX25lZWRlZCkgJQotCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQl9CiAJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VEKTsKLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgb2Zmc2V0LCBoZF9sZW4pOwotCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIGluZGV4LCAxKTsKLQl9IGVsc2UgewotCQlmbHVzaF9jbnQgPSBxZXRoX2VkZHBfZmlsbF9idWZmZXIocXVldWUsIGN0eCwgaW5kZXgpOwotCQlXQVJOX09OKGJ1ZmZlcnNfbmVlZGVkICE9IGZsdXNoX2NudCk7Ci0JCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIGZsdXNoX2NudCk7Ci0JfQorCXFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiLCBoZHIsIG9mZnNldCwgaGRfbGVuKTsKKwlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIGluZGV4LCAxKTsKIAlyZXR1cm4gMDsKIG91dDoKIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwpAQCAtMzIzNiw3ICszMTg0LDcgQEAKIAogaW50IHFldGhfZG9fc2VuZF9wYWNrZXQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCiAJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqaGRyLAotCQlpbnQgZWxlbWVudHNfbmVlZGVkLCBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKKwkJaW50IGVsZW1lbnRzX25lZWRlZCkKIHsKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKIAlpbnQgc3RhcnRfaW5kZXg7CkBAIC0zMjYyLDUzICszMjEwLDMyIEBACiAJcWV0aF9zd2l0Y2hfdG9fcGFja2luZ19pZl9uZWVkZWQocXVldWUpOwogCWlmIChxdWV1ZS0+ZG9fcGFjaykgewogCQlkb19wYWNrID0gMTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQkvKiBkb2VzIHBhY2tldCBmaXQgaW4gY3VycmVudCBidWZmZXI/ICovCi0JCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtCi0JCQkgICAgYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkgPCBlbGVtZW50c19uZWVkZWQpIHsKLQkJCQkvKiAuLi4gbm8gLT4gc2V0IHN0YXRlIFBSSU1FRCAqLwotCQkJCWF0b21pY19zZXQoJmJ1ZmZlci0+c3RhdGUsCi0JCQkJCVFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCQlmbHVzaF9jb3VudCsrOwotCQkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQotCQkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCQkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07Ci0JCQkJLyogd2UgZGlkIGEgc3RlcCBmb3J3YXJkLCBzbyBjaGVjayBidWZmZXIgc3RhdGUKLQkJCQkgKiBhZ2FpbiAqLwotCQkJCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0KLQkJCQkJCVFFVEhfUURJT19CVUZfRU1QVFkpewotCQkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIHN0YXJ0X2luZGV4LAorCQkvKiBkb2VzIHBhY2tldCBmaXQgaW4gY3VycmVudCBidWZmZXI/ICovCisJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KKwkJICAgIGJ1ZmZlci0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpIDwgZWxlbWVudHNfbmVlZGVkKSB7CisJCQkvKiAuLi4gbm8gLT4gc2V0IHN0YXRlIFBSSU1FRCAqLworCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOworCQkJZmx1c2hfY291bnQrKzsKKwkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KKwkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCisJCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKKwkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07CisJCQkvKiB3ZSBkaWQgYSBzdGVwIGZvcndhcmQsIHNvIGNoZWNrIGJ1ZmZlciBzdGF0ZQorCQkJICogYWdhaW4gKi8KKwkJCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0KKwkJCSAgICBRRVRIX1FESU9fQlVGX0VNUFRZKSB7CisJCQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBzdGFydF9pbmRleCwKIAkJCQkJCQkgICBmbHVzaF9jb3VudCk7Ci0JCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwKKwkJCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsCiAJCQkJCQlRRVRIX09VVF9RX1VOTE9DS0VEKTsKLQkJCQkJcmV0dXJuIC1FQlVTWTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBlbGVtZW50cyAoaW5jbHVkaW5nIGZvbGxvd2luZwotCQkJICogZnJlZSBidWZmZXJzKSB0byBoYW5kbGUgZWRkcCBjb250ZXh0ICovCi0JCQlpZiAocWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQocXVldWUsIGN0eCkKLQkJCQk8IDApIHsKLQkJCQlyYyA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKKwkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9CiAJfQotCWlmIChjdHggPT0gTlVMTCkKLQkJdG1wID0gcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgLTEsIDApOwotCWVsc2UgewotCQl0bXAgPSBxZXRoX2VkZHBfZmlsbF9idWZmZXIocXVldWUsIGN0eCwKLQkJCQkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsKTsKLQkJaWYgKHRtcCA8IDApIHsKLQkJCXJjID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJdG1wID0gcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgLTEsIDApOwogCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgdG1wKSAlCiAJCQkJICBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCWZsdXNoX2NvdW50ICs9IHRtcDsKLW91dDoKIAlpZiAoZmx1c2hfY291bnQpCiAJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgc3RhcnRfaW5kZXgsIGZsdXNoX2NvdW50KTsKIAllbHNlIGlmICghYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKQEAgLTQzMjcsNiArNDI1NCw3IEBACiAvKiAzMCAqL3sidHggY291bnQifSwKIAl7InR4IGRvX1FESU8gdGltZSJ9LAogCXsidHggZG9fUURJTyBjb3VudCJ9LAorCXsidHggY3N1bSJ9LAogfTsKIAogaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQzNzgsNiArNDMwNiw3IEBACiAJZGF0YVszMF0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2NudDsKIAlkYXRhWzMxXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lOwogCWRhdGFbMzJdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX2NudDsKKwlkYXRhWzMzXSA9IGNhcmQtPnBlcmZfc3RhdHMudHhfY3N1bTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwppbmRleCA0MDgwMTI2Li5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCkBAIC0xLDY5OSArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwotICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNwotICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAotICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0KLSNpbmNsdWRlIDxuZXQvaXAuaD4KLSNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+Ci0KLSNpbmNsdWRlICJxZXRoX2NvcmUuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfbXBjLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKLQotaW50IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlpbnQgaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKLQlpbnQgZWxlbWVudHNfbmVlZGVkID0gY3R4LT5udW1fZWxlbWVudHM7Ci0JaW50IGVsZW1lbnRzX2luX2J1ZmZlcjsKLQlpbnQgc2tic19pbl9idWZmZXI7Ci0JaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2JmYyIpOwotCXdoaWxlIChlbGVtZW50c19uZWVkZWQgPiAwKSB7Ci0JCWJ1ZmZlcnNfbmVlZGVkKys7Ci0JCWlmIChhdG9taWNfcmVhZCgmcXVldWUtPmJ1ZnNbaW5kZXhdLnN0YXRlKSAhPQotCQkJCVFFVEhfUURJT19CVUZfRU1QVFkpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCWVsZW1lbnRzX2luX2J1ZmZlciA9IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQotCQkJCSAgICAgcXVldWUtPmJ1ZnNbaW5kZXhdLm5leHRfZWxlbWVudF90b19maWxsOwotCQlza2JzX2luX2J1ZmZlciA9IGVsZW1lbnRzX2luX2J1ZmZlciAvIGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsKLQkJZWxlbWVudHNfbmVlZGVkIC09IHNrYnNfaW5fYnVmZmVyICogY3R4LT5lbGVtZW50c19wZXJfc2tiOwotCQlpbmRleCA9IChpbmRleCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQl9Ci0JcmV0dXJuIGJ1ZmZlcnNfbmVlZGVkOwotfQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfZnJlZV9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmY3R4Iik7Ci0JZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljdHgtPnBhZ2VzW2ldKTsKLQlrZnJlZShjdHgtPnBhZ2VzKTsKLQlrZnJlZShjdHgtPmVsZW1lbnRzKTsKLQlrZnJlZShjdHgpOwotfQotCi0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9nZXRfY29udGV4dChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlhdG9taWNfaW5jKCZjdHgtPnJlZmNudCk7Ci19Ci0KLXZvaWQgcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWlmIChhdG9taWNfZGVjX3JldHVybigmY3R4LT5yZWZjbnQpID09IDApCi0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfZWRkcF9wdXRfY29udGV4dCk7Ci0KLXZvaWQgcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgKnJlZjsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJlZGRwcmN0eCIpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5jdHhfbGlzdCkpIHsKLQkJcmVmID0gbGlzdF9lbnRyeShidWYtPmN0eF9saXN0Lm5leHQsCi0JCQkJIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UsIGxpc3QpOwotCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQocmVmLT5jdHgpOwotCQlsaXN0X2RlbCgmcmVmLT5saXN0KTsKLQkJa2ZyZWUocmVmKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImVkZHByZmN4Iik7Ci0JcmVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSksIEdGUF9BVE9NSUMpOwotCWlmIChyZWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcWV0aF9lZGRwX2dldF9jb250ZXh0KGN0eCk7Ci0JcmVmLT5jdHggPSBjdHg7Ci0JbGlzdF9hZGRfdGFpbCgmcmVmLT5saXN0LCAmYnVmLT5jdHhfbGlzdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBxZXRoX2VkZHBfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYgPSBOVUxMOwotCXN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmZmVyOwotCWludCBlbGVtZW50cyA9IGN0eC0+bnVtX2VsZW1lbnRzOwotCWludCBlbGVtZW50ID0gMDsKLQlpbnQgZmx1c2hfY250ID0gMDsKLQlpbnQgbXVzdF9yZWZjbnQgPSAxOwotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmaWJ1Iik7Ci0Jd2hpbGUgKGVsZW1lbnRzID4gMCkgewotCQlidWYgPSAmcXVldWUtPmJ1ZnNbaW5kZXhdOwotCQlpZiAoYXRvbWljX3JlYWQoJmJ1Zi0+c3RhdGUpICE9IFFFVEhfUURJT19CVUZfRU1QVFkpIHsKLQkJCS8qIG5vcm1hbGx5IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugd2UgY2hlY2tlZCBmb3IKLQkJCSAqIGF2YWlsYWJsZSBlbGVtZW50cyBpbiBxZXRoX2NoZWNrX2VsZW1lbnRzX2Zvcl9jb250ZXh0Ci0JCQkgKi8KLQkJCWlmIChlbGVtZW50ID09IDApCi0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCWVsc2UgewotCQkJCVFFVEhfREJGX01FU1NBR0UoMiwgImNvdWxkIG9ubHkgcGFydGlhbGx5IGZpbGwiCi0JCQkJCSJlZGRwIGJ1ZmZlciFcbiIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JCS8qIGNoZWNrIGlmIHRoZSB3aG9sZSBuZXh0IHNrYiBmaXRzIGludG8gY3VycmVudCBidWZmZXIgKi8KLQkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpIC0KLQkJCQkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkKLQkJCQk8IGN0eC0+ZWxlbWVudHNfcGVyX3NrYil7Ci0JCQkvKiBubyAtPiBnbyB0byBuZXh0IGJ1ZmZlciAqLwotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJaW5kZXggPSAoaW5kZXggKyAxKSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCQlmbHVzaF9jbnQrKzsKLQkJCS8qIG5ldyBidWZmZXIsIHNvIHdlIGhhdmUgdG8gYWRkIGN0eCB0byBidWZmZXInY3R4X2xpc3QKLQkJCSAqIGFuZCBpbmNyZW1lbnQgY3R4J3MgcmVmY250ICovCi0JCQltdXN0X3JlZmNudCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobXVzdF9yZWZjbnQpIHsKLQkJCW11c3RfcmVmY250ID0gMDsKLQkJCWlmIChxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KGJ1ZiwgY3R4KSkgewotCQkJCWdvdG8gb3V0X2NoZWNrOwotCQkJfQotCQl9Ci0JCWJ1ZmZlciA9IGJ1Zi0+YnVmZmVyOwotCQkvKiBmaWxsIG9uZSBza2IgaW50byBidWZmZXIgKi8KLQkJZm9yIChpID0gMDsgaSA8IGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsgKytpKSB7Ci0JCQlpZiAoY3R4LT5lbGVtZW50c1tlbGVtZW50XS5sZW5ndGggIT0gMCkgewotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlhZGRyID0gY3R4LT5lbGVtZW50c1tlbGVtZW50XS5hZGRyOwotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlsZW5ndGggPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aDsKLQkJCQlidWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbF0uCi0JCQkJZmxhZ3MgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmZsYWdzOwotCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKLQkJCX0KLQkJCWVsZW1lbnQrKzsKLQkJCWVsZW1lbnRzLS07Ci0JCX0KLQl9Ci1vdXRfY2hlY2s6Ci0JaWYgKCFxdWV1ZS0+ZG9fcGFjaykgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZmlsbGJmbnAiKTsKLQkJLyogc2V0IHN0YXRlIHRvIFBSSU1FRCAtPiB3aWxsIGJlIGZsdXNoZWQgKi8KLQkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPiAwKSB7Ci0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlmbHVzaF9jbnQrKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKLQkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrKys7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZwYSIpOwotCQlpZiAoYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+PQotCQkJCVFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkpIHsKLQkJCS8qCi0JCQkgKiBwYWNrZWQgYnVmZmVyIGlmIGZ1bGwgLT4gc2V0IHN0YXRlIFBSSU1FRAotCQkJICogLT4gd2lsbCBiZSBmbHVzaGVkCi0JCQkgKi8KLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWZsdXNoX2NudCsrOwotCQl9Ci0JfQotb3V0OgotCXJldHVybiBmbHVzaF9jbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9oZHJzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbikKLXsKLQl1OCAqcGFnZTsKLQlpbnQgcGFnZV9yZW1haW5kZXI7Ci0JaW50IHBhZ2Vfb2Zmc2V0OwotCWludCBwa3RfbGVuOwotCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3JzaCIpOwotCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCXBhZ2Vfb2Zmc2V0ID0gY3R4LT5vZmZzZXQgJSBQQUdFX1NJWkU7Ci0JZWxlbWVudCA9ICZjdHgtPmVsZW1lbnRzW2N0eC0+bnVtX2VsZW1lbnRzXTsKLQlwa3RfbGVuID0gZWRkcC0+bmhsICsgZWRkcC0+dGhsICsgZGF0YV9sZW47Ci0JLyogRklYTUU6IGxheWVyMiBhbmQgVkxBTiAhISEgKi8KLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKQotCQlwa3RfbGVuICs9IEVUSF9ITEVOOwotCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKLQkJcGt0X2xlbiArPSBWTEFOX0hMRU47Ci0JLyogZG9lcyBjb21wbGV0ZSBwYWNrZXQgZml0IGluIGN1cnJlbnQgcGFnZSA/ICovCi0JcGFnZV9yZW1haW5kZXIgPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKLQlpZiAocGFnZV9yZW1haW5kZXIgPCAoc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBwa3RfbGVuKSkgewotCQkvKiBubyAtPiBnbyB0byBzdGFydCBvZiBuZXh0IHBhZ2UgKi8KLQkJY3R4LT5vZmZzZXQgKz0gcGFnZV9yZW1haW5kZXI7Ci0JCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCQlwYWdlX29mZnNldCA9IDA7Ci0JfQotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5xaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWVsZW1lbnQtPmFkZHIgPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JZWxlbWVudC0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JY3R4LT5vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JLyogYWRkIG1hYyBoZWFkZXIgKD8pICovCi0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+bWFjLCBFVEhfSExFTik7Ci0JCWVsZW1lbnQtPmxlbmd0aCArPSBFVEhfSExFTjsKLQkJY3R4LT5vZmZzZXQgKz0gRVRIX0hMRU47Ci0JCXBhZ2Vfb2Zmc2V0ICs9IEVUSF9ITEVOOwotCX0KLQkvKiBhZGQgVkxBTiB0YWcgKi8KLQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPnZsYW4sIFZMQU5fSExFTik7Ci0JCWVsZW1lbnQtPmxlbmd0aCArPSBWTEFOX0hMRU47Ci0JCWN0eC0+b2Zmc2V0ICs9IFZMQU5fSExFTjsKLQkJcGFnZV9vZmZzZXQgKz0gVkxBTl9ITEVOOwotCX0KLQkvKiBhZGQgbmV0d29yayBoZWFkZXIgKi8KLQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAodTggKikmZWRkcC0+bmgsIGVkZHAtPm5obCk7Ci0JZWxlbWVudC0+bGVuZ3RoICs9IGVkZHAtPm5obDsKLQllZGRwLT5uaF9pbl9jdHggPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JY3R4LT5vZmZzZXQgKz0gZWRkcC0+bmhsOwotCXBhZ2Vfb2Zmc2V0ICs9IGVkZHAtPm5obDsKLQkvKiBhZGQgdHJhbnNwb3J0IGhlYWRlciAqLwotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICh1OCAqKSZlZGRwLT50aCwgZWRkcC0+dGhsKTsKLQllbGVtZW50LT5sZW5ndGggKz0gZWRkcC0+dGhsOwotCWVkZHAtPnRoX2luX2N0eCA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQljdHgtPm9mZnNldCArPSBlZGRwLT50aGw7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKGNoYXIgKmRzdCwgc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgbGVuLCBfX3dzdW0gKmhjc3VtKQotewotCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7Ci0JaW50IGxlZnRfaW5fZnJhZzsKLQlpbnQgY29weV9sZW47Ci0JdTggKnNyYzsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2R0YyIpOwotCWlmIChza2Jfc2hpbmZvKGVkZHAtPnNrYiktPm5yX2ZyYWdzID09IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoZWRkcC0+c2tiLCBlZGRwLT5za2Jfb2Zmc2V0LAotCQkJCQkJIGRzdCwgbGVuKTsKLQkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKGVkZHAtPnNrYi0+ZGF0YSArIGVkZHAtPnNrYl9vZmZzZXQsIGxlbiwKLQkJCQkgICAgICAqaGNzdW0pOwotCQllZGRwLT5za2Jfb2Zmc2V0ICs9IGxlbjsKLQl9IGVsc2UgewotCQl3aGlsZSAobGVuID4gMCkgewotCQkJaWYgKGVkZHAtPmZyYWcgPCAwKSB7Ci0JCQkJLyogd2UncmUgaW4gc2tiLT5kYXRhICovCi0JCQkJbGVmdF9pbl9mcmFnID0gKGVkZHAtPnNrYi0+bGVuIC0KLQkJCQkJCWVkZHAtPnNrYi0+ZGF0YV9sZW4pCi0JCQkJCQktIGVkZHAtPnNrYl9vZmZzZXQ7Ci0JCQkJc3JjID0gZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldDsKLQkJCX0gZWxzZSB7Ci0JCQkJZnJhZyA9ICZza2Jfc2hpbmZvKGVkZHAtPnNrYiktPmZyYWdzWwotCQkJCQllZGRwLT5mcmFnXTsKLQkJCQlsZWZ0X2luX2ZyYWcgPSBmcmFnLT5zaXplIC0gZWRkcC0+ZnJhZ19vZmZzZXQ7Ci0JCQkJc3JjID0gKHU4ICopKChwYWdlX3RvX3BmbihmcmFnLT5wYWdlKSA8PAotCQkJCQlQQUdFX1NISUZUKSArIGZyYWctPnBhZ2Vfb2Zmc2V0ICsKLQkJCQkJZWRkcC0+ZnJhZ19vZmZzZXQpOwotCQkJfQotCQkJaWYgKGxlZnRfaW5fZnJhZyA8PSAwKSB7Ci0JCQkJZWRkcC0+ZnJhZysrOwotCQkJCWVkZHAtPmZyYWdfb2Zmc2V0ID0gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWNvcHlfbGVuID0gbWluKGxlZnRfaW5fZnJhZywgbGVuKTsKLQkJCW1lbWNweShkc3QsIHNyYywgY29weV9sZW4pOwotCQkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgY29weV9sZW4sICpoY3N1bSk7Ci0JCQlkc3QgKz0gY29weV9sZW47Ci0JCQllZGRwLT5mcmFnX29mZnNldCArPSBjb3B5X2xlbjsKLQkJCWVkZHAtPnNrYl9vZmZzZXQgKz0gY29weV9sZW47Ci0JCQlsZW4gLT0gY29weV9sZW47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgZGF0YV9sZW4sIF9fd3N1bSBoY3N1bSkKLXsKLQl1OCAqcGFnZTsKLQlpbnQgcGFnZV9yZW1haW5kZXI7Ci0JaW50IHBhZ2Vfb2Zmc2V0OwotCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudDsKLQlpbnQgZmlyc3RfbGFwID0gMTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3NkdCIpOwotCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCXBhZ2Vfb2Zmc2V0ID0gY3R4LT5vZmZzZXQgJSBQQUdFX1NJWkU7Ci0JZWxlbWVudCA9ICZjdHgtPmVsZW1lbnRzW2N0eC0+bnVtX2VsZW1lbnRzXTsKLQl3aGlsZSAoZGF0YV9sZW4pIHsKLQkJcGFnZV9yZW1haW5kZXIgPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKLQkJaWYgKHBhZ2VfcmVtYWluZGVyIDwgZGF0YV9sZW4pIHsKLQkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKLQkJCQkJCXBhZ2VfcmVtYWluZGVyLCAmaGNzdW0pOwotCQkJZWxlbWVudC0+bGVuZ3RoICs9IHBhZ2VfcmVtYWluZGVyOwotCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKLQkJCWVsc2UKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7Ci0JCQljdHgtPm51bV9lbGVtZW50cysrOwotCQkJZWxlbWVudCsrOwotCQkJZGF0YV9sZW4gLT0gcGFnZV9yZW1haW5kZXI7Ci0JCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCQkJcGFnZV9vZmZzZXQgPSAwOwotCQkJZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQkJfSBlbHNlIHsKLQkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKLQkJCQkJCWRhdGFfbGVuLCAmaGNzdW0pOwotCQkJZWxlbWVudC0+bGVuZ3RoICs9IGRhdGFfbGVuOwotCQkJaWYgKCFmaXJzdF9sYXApCi0JCQkJZWxlbWVudC0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKLQkJCWN0eC0+bnVtX2VsZW1lbnRzKys7Ci0JCQljdHgtPm9mZnNldCArPSBkYXRhX2xlbjsKLQkJCWRhdGFfbGVuID0gMDsKLQkJfQotCQlmaXJzdF9sYXAgPSAwOwotCX0KLQkoKHN0cnVjdCB0Y3BoZHIgKillZGRwLT50aF9pbl9jdHgpLT5jaGVjayA9IGNzdW1fZm9sZChoY3N1bSk7Ci19Ci0KLXN0YXRpYyBfX3dzdW0gcWV0aF9lZGRwX2NoZWNrX3RjcDRfaGRyKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKLQkJaW50IGRhdGFfbGVuKQotewotCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2t0NCIpOwotCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKLQkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQlwaGNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoZWRkcC0+bmguaXA0Lmguc2FkZHIsIGVkZHAtPm5oLmlwNC5oLmRhZGRyLAotCQkJCSAgICBlZGRwLT50aGwgKyBkYXRhX2xlbiwgSVBQUk9UT19UQ1AsIDApOwotCS8qIGNvbXB1dGUgY2hlY2tzdW0gb2YgdGNwIGhlYWRlciAqLwotCXJldHVybiBjc3VtX3BhcnRpYWwoJmVkZHAtPnRoLCBlZGRwLT50aGwsIHBoY3N1bSk7Ci19Ci0KLXN0YXRpYyBfX3dzdW0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKLQkJaW50IGRhdGFfbGVuKQotewotCV9fYmUzMiBwcm90bzsKLQlfX3dzdW0gcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNrdDYiKTsKLQllZGRwLT50aC50Y3AuaC5jaGVjayA9IDA7Ci0JLyogY29tcHV0ZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0JcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCZlZGRwLT5uaC5pcDYuaC5zYWRkciwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCAwKTsKLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJmVkZHAtPm5oLmlwNi5oLmRhZGRyLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIHBoY3N1bSk7Ci0JcHJvdG8gPSBodG9ubChJUFBST1RPX1RDUCk7Ci0JcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCZwcm90bywgc2l6ZW9mKHUzMiksIHBoY3N1bSk7Ci0JcmV0dXJuIHBoY3N1bTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEoc3RydWN0IHFldGhfaGRyICpxaCwKLQkJdTggKm5oLCB1OCBuaGwsIHU4ICp0aCwgdTggdGhsKQotewotCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3JkYSIpOwotCWVkZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEpLCBHRlBfQVRPTUlDKTsKLQlpZiAoZWRkcCkgewotCQllZGRwLT5uaGwgPSBuaGw7Ci0JCWVkZHAtPnRobCA9IHRobDsKLQkJbWVtY3B5KCZlZGRwLT5xaCwgcWgsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQkJbWVtY3B5KCZlZGRwLT5uaCwgbmgsIG5obCk7Ci0JCW1lbWNweSgmZWRkcC0+dGgsIHRoLCB0aGwpOwotCQllZGRwLT5mcmFnID0gLTE7IC8qIGluaXRpYWxseSB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KLQl9Ci0JcmV0dXJuIGVkZHA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCkKLXsKLQlzdHJ1Y3QgdGNwaGRyICp0Y3BoOwotCWludCBkYXRhX2xlbjsKLQlfX3dzdW0gaGNzdW07Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZ0Y3AiKTsKLQllZGRwLT5za2Jfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBlZGRwLT5uaGwgKyBlZGRwLT50aGw7Ci0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQllZGRwLT5za2Jfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKTsKLQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQkJZWRkcC0+c2tiX29mZnNldCArPSBWTEFOX0hMRU47Ci0JfQotCXRjcGggPSB0Y3BfaGRyKGVkZHAtPnNrYik7Ci0Jd2hpbGUgKGVkZHAtPnNrYl9vZmZzZXQgPCBlZGRwLT5za2ItPmxlbikgewotCQlkYXRhX2xlbiA9IG1pbigoaW50KXNrYl9zaGluZm8oZWRkcC0+c2tiKS0+Z3NvX3NpemUsCi0JCQkgICAgICAgKGludCkoZWRkcC0+c2tiLT5sZW4gLSBlZGRwLT5za2Jfb2Zmc2V0KSk7Ci0JCS8qIHByZXBhcmUgcWRpbyBoZHIgKi8KLQkJaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggPSBkYXRhX2xlbiArIEVUSF9ITEVOICsKLQkJCQkJCSAgICAgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwotCQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQkJCWVkZHAtPnFoLmhkci5sMi5wa3RfbGVuZ3RoICs9IFZMQU5fSExFTjsKLQkJfSBlbHNlCi0JCQllZGRwLT5xaC5oZHIubDMubGVuZ3RoID0gZGF0YV9sZW4gKyBlZGRwLT5uaGwgKwotCQkJCQkJIGVkZHAtPnRobDsKLQkJLyogcHJlcGFyZSBpcCBoZHIgKi8KLQkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCQllZGRwLT5uaC5pcDQuaC50b3RfbGVuID0gaHRvbnMoZGF0YV9sZW4gKyBlZGRwLT5uaGwgKwotCQkJCQkJIGVkZHAtPnRobCk7Ci0JCQllZGRwLT5uaC5pcDQuaC5jaGVjayA9IDA7Ci0JCQllZGRwLT5uaC5pcDQuaC5jaGVjayA9Ci0JCQkJaXBfZmFzdF9jc3VtKCh1OCAqKSZlZGRwLT5uaC5pcDQuaCwKLQkJCQkJCWVkZHAtPm5oLmlwNC5oLmlobCk7Ci0JCX0gZWxzZQotCQkJZWRkcC0+bmguaXA2LmgucGF5bG9hZF9sZW4gPSBodG9ucyhkYXRhX2xlbiArCi0JCQkJCQkJCWVkZHAtPnRobCk7Ci0JCS8qIHByZXBhcmUgdGNwIGhkciAqLwotCQlpZiAoZGF0YV9sZW4gPT0gKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiX29mZnNldCkpIHsKLQkJCS8qIGxhc3Qgc2VnbWVudCAtPiBzZXQgRklOIGFuZCBQU0ggZmxhZ3MgKi8KLQkJCWVkZHAtPnRoLnRjcC5oLmZpbiA9IHRjcGgtPmZpbjsKLQkJCWVkZHAtPnRoLnRjcC5oLnBzaCA9IHRjcGgtPnBzaDsKLQkJfQotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCQloY3N1bSA9IHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihlZGRwLCBkYXRhX2xlbik7Ci0JCWVsc2UKLQkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKGVkZHAsIGRhdGFfbGVuKTsKLQkJLyogZmlsbCB0aGUgbmV4dCBzZWdtZW50IGludG8gdGhlIGNvbnRleHQgKi8KLQkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoY3R4LCBlZGRwLCBkYXRhX2xlbik7Ci0JCXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChjdHgsIGVkZHAsIGRhdGFfbGVuLCBoY3N1bSk7Ci0JCWlmIChlZGRwLT5za2Jfb2Zmc2V0ID49IGVkZHAtPnNrYi0+bGVuKQotCQkJYnJlYWs7Ci0JCS8qIHByZXBhcmUgaGVhZGVycyBmb3IgbmV4dCByb3VuZCAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCQllZGRwLT5uaC5pcDQuaC5pZCA9IGh0b25zKG50b2hzKGVkZHAtPm5oLmlwNC5oLmlkKSArIDEpOwotCQllZGRwLT50aC50Y3AuaC5zZXEgPSBodG9ubChudG9obChlZGRwLT50aC50Y3AuaC5zZXEpICsKLQkJCWRhdGFfbGVuKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkcikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAgPSBOVUxMOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmaWN4Iik7Ci0JLyogY3JlYXRlIG91ciBzZWdtZW50YXRpb24gaGVhZGVycyBhbmQgY29weSBvcmlnaW5hbCBoZWFkZXJzICovCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQllZGRwID0gcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEocWhkciwKLQkJCQkJCSAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksCi0JCQkJCQkgIGlwX2hkcmxlbihza2IpLAotCQkJCQkJICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLAotCQkJCQkJICB0Y3BfaGRybGVuKHNrYikpOwotCWVsc2UKLQkJZWRkcCA9IHFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHFoZHIsCi0JCQkJCQkgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLAotCQkJCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAotCQkJCQkJICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLAotCQkJCQkJICB0Y3BfaGRybGVuKHNrYikpOwotCi0JaWYgKGVkZHAgPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZWRkcGZjbm0iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWlmIChxaGRyLT5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKLQkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCQltZW1jcHkoJmVkZHAtPm1hYywgZXRoX2hkcihza2IpLCBFVEhfSExFTik7Ci0JCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJZWRkcC0+dmxhblswXSA9IHNrYi0+cHJvdG9jb2w7Ci0JCQllZGRwLT52bGFuWzFdID0gaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpOwotCQl9Ci0JfQotCS8qIHRoZSBuZXh0IGZsYWdzIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIGxhc3Qgc2VnbWVudCAqLwotCWVkZHAtPnRoLnRjcC5oLmZpbiA9IDA7Ci0JZWRkcC0+dGgudGNwLmgucHNoID0gMDsKLQllZGRwLT5za2IgPSBza2I7Ci0JLyogYmVnaW4gc2VnbWVudGF0aW9uIGFuZCBmaWxsIGNvbnRleHQgKi8KLQlfX3FldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgZWRkcCk7Ci0Ja2ZyZWUoZWRkcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9jYWxjX251bV9wYWdlcyhzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4pCi17Ci0JaW50IHNrYnNfcGVyX3BhZ2U7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNhbnAiKTsKLQkvKiBjYW4gd2UgcHV0IG11bHRpcGxlIHNrYnMgaW4gb25lIHBhZ2U/ICovCi0Jc2tic19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbik7Ci0JaWYgKHNrYnNfcGVyX3BhZ2UgPiAxKSB7Ci0JCWN0eC0+bnVtX3BhZ2VzID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKSAvCi0JCQkJIHNrYnNfcGVyX3BhZ2UgKyAxOwotCQljdHgtPmVsZW1lbnRzX3Blcl9za2IgPSAxOwotCX0gZWxzZSB7Ci0JCS8qIG5vIC0+IGhvdyBtYW55IGVsZW1lbnRzIHBlciBza2I/ICovCi0JCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbiArCi0JCQkJICAgICBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQ7Ci0JCWN0eC0+bnVtX3BhZ2VzID0gY3R4LT5lbGVtZW50c19wZXJfc2tiICoKLQkJCQkgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKLQl9Ci0JY3R4LT5udW1fZWxlbWVudHMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgotCQkJICAgIChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICsgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKAotCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0JdTggKmFkZHI7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwY2ciKTsKLQkvKiBjcmVhdGUgdGhlIGNvbnRleHQgYW5kIGFsbG9jYXRlIHBhZ2VzICovCi0JY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMSIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JY3R4LT50eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0JcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKGN0eCwgc2tiLCBoZHJfbGVuKTsKLQlpZiAoY3R4LT5lbGVtZW50c19wZXJfc2tiID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNpcyIpOwotCQlrZnJlZShjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JY3R4LT5wYWdlcyA9IGtjYWxsb2MoY3R4LT5udW1fcGFnZXMsIHNpemVvZih1OCAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGN0eC0+cGFnZXMgPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjbjIiKTsKLQkJa2ZyZWUoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWdlczsgKytpKSB7Ci0JCWFkZHIgPSAodTggKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMyIpOwotCQkJY3R4LT5udW1fcGFnZXMgPSBpOwotCQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJY3R4LT5wYWdlc1tpXSA9IGFkZHI7Ci0JfQotCWN0eC0+ZWxlbWVudHMgPSBrY2FsbG9jKGN0eC0+bnVtX2VsZW1lbnRzLAotCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4LT5lbGVtZW50cyA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuNCIpOwotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQkvKiByZXNldCBudW1fZWxlbWVudHM7IHdpbGwgYmUgaW5jcmVtZW50ZWQgYWdhaW4gaW4gZmlsbF9idWZmZXIgdG8KLQkgKiByZWZsZWN0IG51bWJlciBvZiBhY3R1YWxseSB1c2VkIGVsZW1lbnRzICovCi0JY3R4LT5udW1fZWxlbWVudHMgPSAwOwotCXJldHVybiBjdHg7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dF90Y3AoCi0JCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCBxZXRoX2hkciAqcWhkcikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwY3QiKTsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKLQkJCQkJCShzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCi0JCQkJCQlpcF9oZHJsZW4oc2tiKSArCi0JCQkJCQl0Y3BfaGRybGVuKHNrYikpKTsKLQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhjYXJkLCBza2IsCi0JCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKwotCQkJdGNwX2hkcmxlbihza2IpKTsKLQllbHNlCi0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZXRjcGludiIpOwotCi0JaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjcmVkZHBubCIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKHFldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgc2tiLCBxaGRyKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHB0ZmUiKTsKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JYXRvbWljX3NldCgmY3R4LT5yZWZjbnQsIDEpOwotCXJldHVybiBjdHg7Ci19Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkciwKLQkJdW5zaWduZWQgY2hhciBza19wcm90b2NvbCkKLXsKLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwYyIpOwotCXN3aXRjaCAoc2tfcHJvdG9jb2wpIHsKLQljYXNlIElQUFJPVE9fVENQOgotCQlyZXR1cm4gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcChjYXJkLCBza2IsIHFoZHIpOwotCWRlZmF1bHQ6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJlZGRwaW52cCIpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfZWRkcF9jcmVhdGVfY29udGV4dCk7Ci0KLXZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaGRyICpxaGRyLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBxZXRoX2hkcl90c28gKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopcWhkcjsKLQlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInRzb2ZoZHIiKTsKLQotCS8qZml4IGhlYWRlciB0byBUU08gdmFsdWVzIC4uLiovCi0JaGRyLT5oZHIuaGRyLmwzLmlkID0gUUVUSF9IRUFERVJfVFlQRV9UU087Ci0JLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLwotCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOwotCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKLQloZHItPmV4dC5oZHJfdHlwZSAgICA9IDE7Ci0JaGRyLT5leHQuaGRyX3ZlcnNpb24gPSAxOwotCWhkci0+ZXh0Lmhkcl9sZW4gICAgID0gMjg7Ci0JLyppbnNlcnQgbm9uLWZpeCB2YWx1ZXMgKi8KLQloZHItPmV4dC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwotCWhkci0+ZXh0LmRnX2hkcl9sZW4gPSAoX191MTYpKGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQpOwotCWhkci0+ZXh0LnBheWxvYWRfbGVuID0gKF9fdTE2KShza2ItPmxlbiAtIGhkci0+ZXh0LmRnX2hkcl9sZW4gLQotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOwotCXRjcGgtPmNoZWNrID0gMDsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7Ci0JCWlwNmgtPnBheWxvYWRfbGVuID0gMDsKLQkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAotCQkJCQkgICAgICAgMCwgSVBQUk9UT19UQ1AsIDApOwotCX0gZWxzZSB7Ci0JCS8qT1NBIHdhbnQgdXMgdG8gc2V0IHRoZXNlIHZhbHVlcyAuLi4qLwotCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAotCQkJCQkgMCwgSVBQUk9UT19UQ1AsIDApOwotCQlpcGgtPnRvdF9sZW4gPSAwOwotCQlpcGgtPmNoZWNrID0gMDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChxZXRoX3Rzb19maWxsX2hlYWRlcik7Ci0KLXZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IHRsZW47Ci0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCXRsZW4gPSBudG9ocyhpcF9oZHIoc2tiKS0+dG90X2xlbikgLSAoaXBfaGRyKHNrYiktPmlobCA8PCAyKTsKLQkJc3dpdGNoIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wpIHsKLQkJY2FzZSBJUFBST1RPX1RDUDoKLQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKAotCQkJCWlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAotCQkJCXRsZW4sIGlwX2hkcihza2IpLT5wcm90b2NvbCwKLQkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAotCQkJCQl0bGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFBST1RPX1VEUDoKLQkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKAotCQkJCWlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAotCQkJCXRsZW4sIGlwX2hkcihza2IpLT5wcm90b2NvbCwKLQkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAotCQkJCQl0bGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewotCQlzd2l0Y2ggKGlwdjZfaGRyKHNrYiktPm5leHRoZHIpIHsKLQkJY2FzZSBJUFBST1RPX1RDUDoKLQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygKLQkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKLQkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwKLQkJCQlpcHY2X2hkcihza2IpLT5uZXh0aGRyLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFBST1RPX1VEUDoKLQkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygKLQkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKLQkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwKLQkJCQlpcHY2X2hkcihza2IpLT5uZXh0aGRyLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLCAwKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfdHhfY3N1bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKaW5kZXggODZiZjdkZi4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaApAQCAtMSw3NiArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAotICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNwotICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAotICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KLSAqLwotCi0jaWZuZGVmIF9fUUVUSF9DT1JFX09GRkxfSF9fCi0jZGVmaW5lIF9fUUVUSF9DT1JFX09GRkxfSF9fCi0KLXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCB7Ci0JdTMyIGZsYWdzOwotCXUzMiBsZW5ndGg7Ci0Jdm9pZCAqYWRkcjsKLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCB7Ci0JYXRvbWljX3QgcmVmY250OwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGU7Ci0JaW50IG51bV9wYWdlczsJCQkgICAgLyogIyBvZiBhbGxvY2F0ZWQgcGFnZXMgKi8KLQl1OCAqKnBhZ2VzOwkJCSAgICAvKiBwb2ludGVycyB0byBwYWdlcyAqLwotCWludCBvZmZzZXQ7CQkJICAgIC8qIG9mZnNldCBpbiBjdHggZHVyaW5nIGNyZWF0aW9uICovCi0JaW50IG51bV9lbGVtZW50czsJCSAgICAvKiAjIG9mIHJlcXVpcmVkICdTQkFMRXMnICovCi0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50czsgLyogYXJyYXkgb2YgJ1NCQUxFcycgKi8KLQlpbnQgZWxlbWVudHNfcGVyX3NrYjsJCSAgICAvKiAjIG9mICdTQkFMRXMnIHBlciBza2IgKiovCi19OwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHg7Ci19OwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgewotCXN0cnVjdCBxZXRoX2hkciBxaDsKLQlzdHJ1Y3QgZXRoaGRyIG1hYzsKLQlfX2JlMTYgdmxhblsyXTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgaXBoZHIgaDsKLQkJCXU4IG9wdGlvbnNbNDBdOwotCQl9IGlwNDsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpcHY2aGRyIGg7Ci0JCX0gaXA2OwotCX0gbmg7Ci0JdTggbmhsOwotCXZvaWQgKm5oX2luX2N0eDsJLyogYWRkcmVzcyBvZiBuaCB3aXRoaW4gdGhlIGN0eCAqLwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCB0Y3BoZHIgaDsKLQkJCXU4IG9wdGlvbnNbNDBdOwotCQl9IHRjcDsKLQl9IHRoOwotCXU4IHRobDsKLQl2b2lkICp0aF9pbl9jdHg7CS8qIGFkZHJlc3Mgb2YgdGggd2l0aGluIHRoZSBjdHggKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBza2Jfb2Zmc2V0OwotCWludCBmcmFnOwotCWludCBmcmFnX29mZnNldDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1leHRlcm4gc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqLAotCQkgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIHVuc2lnbmVkIGNoYXIpOwotZXh0ZXJuIHZvaWQgcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKLWV4dGVybiBpbnQgcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCk7Ci1leHRlcm4gdm9pZCBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICopOwotZXh0ZXJuIGludCBxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKLQotdm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2hkciAqLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqKTsKLXZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpOwotCi0jZW5kaWYgLyogX19RRVRIX0NPUkVfRUREUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKaW5kZXggYzI2ZTg0Mi4uNTY4NDY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKQEAgLTQyNyw4ICs0MjcsNiBAQAogCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7CiAJY2FzZSBRRVRIX0xBUkdFX1NFTkRfTk86CiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAibm8iKTsKLQljYXNlIFFFVEhfTEFSR0VfU0VORF9FRERQOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIkVERFAiKTsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiVFNPIik7CiAJZGVmYXVsdDoKQEAgLTQ0OSw4ICs0NDcsNiBAQAogCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7CiAJaWYgKCFzdHJjbXAodG1wLCAibm8iKSkgewogCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJFRERQIikpIHsKLQkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwogCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJUU08iKSkgewogCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggMDdhYjhhNS4uMTcyMDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KIAogI2luY2x1ZGUgInFldGhfY29yZS5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOwogc3RhdGljIGludCBxZXRoX2wyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC0zMjgsNiArMzI3LDEwIEBACiAJc3RydWN0IHFldGhfdmxhbl92aWQgKmlkOwogCiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJhaWQ6JWQiLCB2aWQpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImFpZFJFQyIpOworCQlyZXR1cm47CisJfQogCWlkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfdmxhbl92aWQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoaWQpIHsKIAkJaWQtPnZpZCA9IHZpZDsKQEAgLTM0NCw2ICszNDcsMTAgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJraWQ6JWQiLCB2aWQpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImtpZFJFQyIpOworCQlyZXR1cm47CisJfQogCXNwaW5fbG9ja19iaCgmY2FyZC0+dmxhbmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZjYXJkLT52aWRfbGlzdCwgbGlzdCkgewogCQlpZiAoaWQtPnZpZCA9PSB2aWQpIHsKQEAgLTM3OSw3ICszODYsOCBAQAogCQkJZGV2X2Nsb3NlKGNhcmQtPmRldik7CiAJCQlydG5sX3VubG9jaygpOwogCQl9Ci0JCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCkgeworCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3AgfHwKKwkJCXJlY292ZXJ5X21vZGUpIHsKIAkJCV9fdTggKm1hYyA9ICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdOwogCQkJcmMgPSBxZXRoX2wyX3NlbmRfZGVsbWFjKGNhcmQsIG1hYyk7CiAJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIkxlcnIlZCIsIHJjKTsKQEAgLTM4OCw3ICszOTYsOCBAQAogCX0KIAlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApIHsKIAkJcWV0aF9sMl9wcm9jZXNzX3ZsYW5zKGNhcmQsIDEpOwotCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3ApCisJCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCB8fAorCQkJcmVjb3ZlcnlfbW9kZSkKIAkJCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKIAkJcWV0aF9jbGVhcl9pcGFjbWRfbGlzdChjYXJkKTsKIAkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX0hBUkRTRVRVUDsKQEAgLTU5Myw2ICs2MDIsMTAgQEAKIAl9CiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDMsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKIAlRRVRIX0RCRl9IRVgoVFJBQ0UsIDMsIGFkZHItPnNhX2RhdGEsIE9TQV9BRERSX0xFTik7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bWNSRUMiKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CiAJcmMgPSBxZXRoX2wyX3NlbmRfZGVsbWFjKGNhcmQsICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdKTsKIAlpZiAoIXJjKQogCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgYWRkci0+c2FfZGF0YSk7CkBAIC02MDgsNiArNjIxLDkgQEAKIAkJcmV0dXJuIDsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCisJCXJldHVybjsKIAlxZXRoX2wyX2RlbF9hbGxfbWMoY2FyZCk7CiAJc3Bpbl9sb2NrX2JoKCZjYXJkLT5tY2xvY2spOwogCWZvciAoZG0gPSBkZXYtPm1jX2xpc3Q7IGRtOyBkbSA9IGRtLT5uZXh0KQpAQCAtNjM0LDggKzY1MCw2IEBACiAJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUgPSBjYXJkLT5xZGlvLm91dF9xcwogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCBkYXRhX29mZnNldCA9IC0xOwogCWludCBlbGVtZW50c19uZWVkZWQgPSAwOwogCWludCBoZF9sZW4gPSAwOwpAQCAtNjU1LDE0ICs2NjksMTAgQEAKIAl9CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaWYgKHNrYl9pc19nc28oc2tiKSkKLQkJbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwotCiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCiAJCWhkciA9IChzdHJ1Y3QgcWV0aF9oZHIgKilza2ItPmRhdGE7CiAJZWxzZSB7Ci0JCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYgKCFsYXJnZV9zZW5kKSAmJgotCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkpIHsKKwkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKIAkJCW5ld19za2IgPSBza2I7CiAJCQlkYXRhX29mZnNldCA9IEVUSF9ITEVOOwogCQkJaGRfbGVuID0gRVRIX0hMRU47CkBAIC02ODksNTkgKzY5OSwyNiBAQAogCQl9CiAJfQogCi0JaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX0VERFApIHsKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkciwKLQkJCQkJCXNrYi0+c2stPnNrX3Byb3RvY29sKTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJjb3VsZCBub3QgY3JlYXRlIGVkZHAgY29udGV4dFxuIik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KLQl9IGVsc2UgewotCQllbGVtZW50cyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAorCWVsZW1lbnRzID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCiAJCQkJCQllbGVtZW50c19uZWVkZWQpOwotCQlpZiAoIWVsZW1lbnRzKSB7Ci0JCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKLQkJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQorCWlmICghZWxlbWVudHMpIHsKKwkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCisJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKKwkJZ290byB0eF9kcm9wOwogCX0KIAotCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pICYmCi0JICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKLQkJcWV0aF90eF9jc3VtKG5ld19za2IpOwotCiAJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQkgZWxlbWVudHMsIGN0eCk7CisJCQkJCSBlbGVtZW50cyk7CiAJZWxzZQogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQllbGVtZW50cywgY3R4LCBkYXRhX29mZnNldCwgaGRfbGVuKTsKKwkJCQkJZWxlbWVudHMsIGRhdGFfb2Zmc2V0LCBoZF9sZW4pOwogCWlmICghcmMpIHsKIAkJY2FyZC0+c3RhdHMudHhfcGFja2V0cysrOwogCQljYXJkLT5zdGF0cy50eF9ieXRlcyArPSB0eF9ieXRlczsKIAkJaWYgKG5ld19za2IgIT0gc2tiKQogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKLQkJCWlmIChsYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykgewotCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyArPSB0eF9ieXRlczsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfY250Kys7Ci0JCQl9Ci0JCQlpZiAoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgPiAwKSB7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKLQkJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQotCQkJCQlza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDE7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY3R4ICE9IE5VTEwpIHsKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Ci0JCX0KIAl9IGVsc2UgewotCQlpZiAoY3R4ICE9IE5VTEwpCi0JCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKLQogCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwogCkBAIC04NzgsMzAgKzg1NSw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHFldGhfbDJfZXRodG9vbF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7Ci0KLQlpZiAoZGF0YSkgewotCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgewotCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0JCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sMl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKLQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvID0gcWV0aF9sMl9ldGh0b29sX3NldF90c28sCiAJLmdldF9zdHJpbmdzID0gcWV0aF9jb3JlX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3N0YXRzX2NvdW50ID0gcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IDNkMDQ5MjAuLjBiYTM4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtMTksMTUgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogCiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogI2luY2x1ZGUgInFldGhfbDMuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgogCiBzdGF0aWMgaW50IHFldGhfbDNfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sM19yZWNvdmVyKHZvaWQgKik7CkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCXJjID0gcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CiAJaWYgKHJjKSB7CiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIGNvdWxkbid0IHNldCBhZGFwdGVyIHBhcmFtZXRlcnM6ICIKLQkJCSIweCV4XG4iLCBjYXJkLT5nZGV2LT5kZXYuYnVzX2lkLCByYyk7CisJCQkiMHgleFxuIiwgZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfQUxURVJfTUFDX0FERFJFU1MpKSB7CkBAIC0xODM4LDYgKzE4MzgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJraWQ6JWQiLCB2aWQpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImtpZFJFQyIpOworCQlyZXR1cm47CisJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwogCS8qIHVucmVnaXN0ZXIgSVAgYWRkcmVzc2VzIG9mIHZsYW4gZGV2aWNlICovCiAJcWV0aF9sM19mcmVlX3ZsYW5fYWRkcmVzc2VzKGNhcmQsIHZpZCk7CkBAIC0yMTAxLDYgKzIxMDUsOSBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bXVsdGkiKTsKKwlpZiAocWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApKQorCQlyZXR1cm47CiAJcWV0aF9sM19kZWxldGVfbWNfYWRkcmVzc2VzKGNhcmQpOwogCXFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY0KGNhcmQpOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKQEAgLTI1NzcsMTIgKzI1ODQsNjMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHFldGhfdHNvX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX2hkciAqcWhkciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcWV0aF9oZHJfdHNvICpoZHIgPSAoc3RydWN0IHFldGhfaGRyX3RzbyAqKXFoZHI7CisJc3RydWN0IHRjcGhkciAqdGNwaCA9IHRjcF9oZHIoc2tiKTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKKworCS8qZml4IGhlYWRlciB0byBUU08gdmFsdWVzIC4uLiovCisJaGRyLT5oZHIuaGRyLmwzLmlkID0gUUVUSF9IRUFERVJfVFlQRV9UU087CisJLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLworCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOworCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKKwloZHItPmV4dC5oZHJfdHlwZSAgICA9IDE7CisJaGRyLT5leHQuaGRyX3ZlcnNpb24gPSAxOworCWhkci0+ZXh0Lmhkcl9sZW4gICAgID0gMjg7CisJLyppbnNlcnQgbm9uLWZpeCB2YWx1ZXMgKi8KKwloZHItPmV4dC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCWhkci0+ZXh0LmRnX2hkcl9sZW4gPSAoX191MTYpKGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQpOworCWhkci0+ZXh0LnBheWxvYWRfbGVuID0gKF9fdTE2KShza2ItPmxlbiAtIGhkci0+ZXh0LmRnX2hkcl9sZW4gLQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOworCXRjcGgtPmNoZWNrID0gMDsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7CisJCWlwNmgtPnBheWxvYWRfbGVuID0gMDsKKwkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQkJCQkgICAgICAgMCwgSVBQUk9UT19UQ1AsIDApOworCX0gZWxzZSB7CisJCS8qT1NBIHdhbnQgdXMgdG8gc2V0IHRoZXNlIHZhbHVlcyAuLi4qLworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkgMCwgSVBQUk9UT19UQ1AsIDApOworCQlpcGgtPnRvdF9sZW4gPSAwOworCQlpcGgtPmNoZWNrID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCV9fd3N1bSBjc3VtOworCWludCBvZmZzZXQ7CisKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKSk7CisJb2Zmc2V0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJQlVHX09OKG9mZnNldCA+PSBza2JfaGVhZGxlbihza2IpKTsKKwljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbiAtIG9mZnNldCwgMCk7CisKKwlvZmZzZXQgKz0gc2tiLT5jc3VtX29mZnNldDsKKwlCVUdfT04ob2Zmc2V0ICsgc2l6ZW9mKF9fc3VtMTYpID4gc2tiX2hlYWRsZW4oc2tiKSk7CisJKihfX3N1bTE2ICopKHNrYi0+ZGF0YSArIG9mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bSk7Cit9CisKIHN0YXRpYyBpbnQgcWV0aF9sM19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAJdTE2ICp0YWc7CiAJc3RydWN0IHFldGhfaGRyICpoZHIgPSBOVUxMOwogCWludCBlbGVtZW50c19uZWVkZWQgPSAwOworCWludCBlbGVtczsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gTlVMTDsKIAlpbnQgaXB2ID0gcWV0aF9nZXRfaXBfdmVyc2lvbihza2IpOwpAQCAtMjU5MSw4ICsyNjQ5LDggQEAKIAkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKIAlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKIAllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKIAlpbnQgZGF0YV9vZmZzZXQgPSAtMTsKKwlpbnQgbnJfZnJhZ3M7CiAKIAlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpICYmCiAJICAgIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKSAmJgpAQCAtMjYxNSw2ICsyNjczLDEyIEBACiAKIAlpZiAoc2tiX2lzX2dzbyhza2IpKQogCQlsYXJnZV9zZW5kID0gY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kOworCWVsc2UKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCXFldGhfdHhfY3N1bShza2IpOworCQkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCisJCQkJY2FyZC0+cGVyZl9zdGF0cy50eF9jc3VtKys7CisJCX0KIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYgKCFsYXJnZV9zZW5kKSAmJgogCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkgewpAQCAtMjY2MSwxMiArMjcyNSwxMyBAQAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCS8qIGZpeCBoYXJkd2FyZSBsaW1pdGF0aW9uOiBhcyBsb25nIGFzIHdlIGRvIG5vdCBoYXZlIHNiYWwKLQkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzIHNvIHdlIHRlbXBvcmFyeQotCSAqIHN3aXRjaCB0byBFRERQCisJICogY2hhaW5pbmcgd2UgY2FuIG5vdCBzZW5kIGxvbmcgZnJhZyBsaXN0cwogCSAqLwogCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKSAmJgotCQkoKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMikgPiAxNikpCi0JCWxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKKwkgICAgKChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDIpID4gMTYpKSB7CisJCWlmIChza2JfbGluZWFyaXplKG5ld19za2IpKQorCQkJZ290byB0eF9kcm9wOworCX0KIAogCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKSAmJgogCSAgICAoY2FzdF90eXBlID09IFJUTl9VTlNQRUMpKSB7CkBAIC0yNjg5LDM3ICsyNzU0LDIyIEBACiAJCX0KIAl9CiAKLQlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfRUREUCkgewotCQkvKiBuZXdfc2tiIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldCBzbyB3ZSB1c2Ugc2tiIHRvIGdldAotCQkgKiB0aGUgcHJvdG9jb2wKLQkJICovCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChjYXJkLCBuZXdfc2tiLCBoZHIsCi0JCQkJCQlza2ItPnNrLT5za19wcm90b2NvbCk7Ci0JCWlmIChjdHggPT0gTlVMTCkgewotCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGQgbm90IGNyZWF0ZSBlZGRwIGNvbnRleHRcbiIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGVsZW1zID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCisJZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKIAkJCQkJCSBlbGVtZW50c19uZWVkZWQpOwotCQlpZiAoIWVsZW1zKSB7Ci0JCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKLQkJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQotCQllbGVtZW50c19uZWVkZWQgKz0gZWxlbXM7CisJaWYgKCFlbGVtcykgeworCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKKwkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOworCQlnb3RvIHR4X2Ryb3A7CiAJfQotCi0JaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkgICAgKG5ld19za2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKLQkJcWV0aF90eF9jc3VtKG5ld19za2IpOworCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKKwlucl9mcmFncyA9IHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzOwogCiAJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQkgZWxlbWVudHNfbmVlZGVkLCBjdHgpOworCQkJCQkgZWxlbWVudHNfbmVlZGVkKTsKIAllbHNlCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCWVsZW1lbnRzX25lZWRlZCwgY3R4LCBkYXRhX29mZnNldCwgMCk7CisJCQkJCWVsZW1lbnRzX25lZWRlZCwgZGF0YV9vZmZzZXQsIDApOwogCiAJaWYgKCFyYykgewogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0yNzMxLDIyICsyNzgxLDEzIEBACiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwogCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKIAkJCX0KLQkJCWlmIChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyA+IDApIHsKKwkJCWlmIChucl9mcmFncykgewogCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7CiAJCQkJLyogbnJfZnJhZ3MgKyBza2ItPmRhdGEgKi8KLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0KLQkJCQkJc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAxOworCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPSBucl9mcmFncyArIDE7CiAJCQl9CiAJCX0KLQotCQlpZiAoY3R4ICE9IE5VTEwpIHsKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Ci0JCX0KIAl9IGVsc2UgewotCQlpZiAoY3R4ICE9IE5VTEwpCi0JCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKLQogCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwogCkBAIC0yODQxLDcgKzI4ODIsNyBAQAogCWlmIChkYXRhKSB7CiAJCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7CiAJCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKLQkJCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKKwkJCQlyZXR1cm4gLUVQRVJNOwogCQkJZWxzZQogCQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9UU087CiAJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJiMDQxNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYworKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9zMzkwbWFjaC5jCi0gKiAgIFMvMzkwIG1hY2hpbmUgY2hlY2sgaGFuZGxlcgotICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA4Ci0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqCQkgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQotICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxhc20vZXRyLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vY2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdS5oPgotI2luY2x1ZGUgInMzOTBtYWNoLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIG1fc2VtOwotCi1zdGF0aWMgTk9SRVRfVFlQRSB2b2lkCi1zMzkwX2hhbmRsZV9kYW1hZ2UoY2hhciAqbXNnKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfc2VuZF9zdG9wKCk7Ci0jZW5kaWYKLQlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCWZvcig7Oyk7Ci19Ci0KLXN0YXRpYyBjcndfaGFuZGxlcl90IGNyd19oYW5kbGVyc1tOUl9SU0NTXTsKLQotLyoqCi0gKiBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSByZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgotICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQotICogQGhhbmRsZXI6IGhhbmRsZXIgdG8gYmUgcmVnaXN0ZXJlZAotICoKLSAqIFJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCi0gKi8KLWludCBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcikKLXsKLQlpZiAoKHJzYyA8IDApIHx8IChyc2MgPj0gTlJfUlNDUykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghY21weGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwsIGhhbmRsZXIpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gLUVCVVNZOwotfQotCi0vKioKLSAqIHMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcigpIC0gdW5yZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgotICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQotICovCi12b2lkIHMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihpbnQgcnNjKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuOwotCXhjaGcoJmNyd19oYW5kbGVyc1tyc2NdLCBOVUxMKTsKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotfQotCi0vKgotICogUmV0cmlldmUgQ1JXcyBhbmQgY2FsbCBmdW5jdGlvbiB0byBoYW5kbGUgZXZlbnQuCi0gKi8KLXN0YXRpYyBpbnQgczM5MF9jb2xsZWN0X2Nyd19pbmZvKHZvaWQgKnBhcmFtKQotewotCXN0cnVjdCBjcncgY3J3WzJdOwotCWludCBjY29kZTsKLQlzdHJ1Y3Qgc2VtYXBob3JlICpzZW07Ci0JdW5zaWduZWQgaW50IGNoYWluOwotCWludCBpZ25vcmU7Ci0KLQlzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSAqKXBhcmFtOwotcmVwZWF0OgotCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZShzZW0pOwotCWNoYWluID0gMDsKLQl3aGlsZSAoMSkgewotCQlpZiAodW5saWtlbHkoY2hhaW4gPiAxKSkgewotCQkJc3RydWN0IGNydyB0bXBfY3J3OwotCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBDb2RlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSAiCi0JCQkgICAgICAgInRoYW4gdHdvIGNoYWluZWQgY3J3czsgcGxlYXNlIHJlcG9ydCB0byAiCi0JCQkgICAgICAgImxpbnV4MzkwQGRlLmlibS5jb20hXG4iLCBfX2Z1bmNfXyk7Ci0JCQljY29kZSA9IHN0Y3J3KCZ0bXBfY3J3KTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IGNydyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKLQkJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCB0bXBfY3J3LnNsY3QsIHRtcF9jcncub2ZsdywKLQkJCSAgICAgICB0bXBfY3J3LmNobiwgdG1wX2Nydy5yc2MsIHRtcF9jcncuYW5jLAotCQkJICAgICAgIHRtcF9jcncuZXJjLCB0bXBfY3J3LnJzaWQpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogVGhpcyB3YXMgY3J3IG51bWJlciAleCBpbiB0aGUgIgotCQkJICAgICAgICJjaGFpblxuIiwgX19mdW5jX18sIGNoYWluKTsKLQkJCWlmIChjY29kZSAhPSAwKQotCQkJCWJyZWFrOwotCQkJY2hhaW4gPSB0bXBfY3J3LmNobiA/IGNoYWluICsgMSA6IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQljY29kZSA9IHN0Y3J3KCZjcndbY2hhaW5dKTsKLQkJaWYgKGNjb2RlICE9IDApCi0JCQlicmVhazsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNyd19pbmZvIDogQ1JXIHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkgICAgICAgImNobj0lZCwgcnNjPSVYLCBhbmM9JWQsIGVyYz0lWCwgcnNpZD0lWFxuIiwKLQkJICAgICAgIGNyd1tjaGFpbl0uc2xjdCwgY3J3W2NoYWluXS5vZmx3LCBjcndbY2hhaW5dLmNobiwKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNjLCBjcndbY2hhaW5dLmFuYywgY3J3W2NoYWluXS5lcmMsCi0JCSAgICAgICBjcndbY2hhaW5dLnJzaWQpOwotCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLwotCQlpZiAoY3J3W2NoYWluXS5vZmx3KSB7Ci0JCQlpbnQgaTsKLQotCQkJcHJfZGVidWcoIiVzOiBjcncgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iLCBfX2Z1bmNfXyk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTlJfUlNDUzsgaSsrKSB7Ci0JCQkJaWYgKGNyd19oYW5kbGVyc1tpXSkKLQkJCQkJY3J3X2hhbmRsZXJzW2ldKE5VTEwsIE5VTEwsIDEpOwotCQkJfQotCQkJY2hhaW4gPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNyd1swXS5jaG4gJiYgIWNoYWluKSB7Ci0JCQljaGFpbisrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10pCi0JCQljcndfaGFuZGxlcnNbY3J3W2NoYWluXS5yc2NdKCZjcndbMF0sCi0JCQkJCQkgICAgIGNoYWluID8gJmNyd1sxXSA6IE5VTEwsCi0JCQkJCQkgICAgIDApOwotCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCi0JCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOwotCX0KLQlnb3RvIHJlcGVhdDsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IG1jY2tfc3RydWN0IHsKLQlpbnQga2lsbF90YXNrOwotCWludCBjaGFubmVsX3JlcG9ydDsKLQlpbnQgd2FybmluZzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWNja19jb2RlOwotfTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2NrX3N0cnVjdCwgY3B1X21jY2spOwotCi0vKgotICogTWFpbiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCi0gKiBvciBkaXNhYmxlZCBhbmQgbWFjaGluZSBjaGVja3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAqLwotdm9pZAotczM5MF9oYW5kbGVfbWNjayh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IG1jY2tfc3RydWN0IG1jY2s7Ci0KLQkvKgotCSAqIERpc2FibGUgbWFjaGluZSBjaGVja3MgYW5kIGdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhY2N1bXVsYXRlZAotCSAqIG1hY2hpbmUgY2hlY2tzLiBBZnRlcndhcmRzIGRlbGV0ZSB0aGUgb2xkIHN0YXRlIGFuZCBlbmFibGUgbWFjaGluZQotCSAqIGNoZWNrcyBhZ2Fpbi4KLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbG9jYWxfbWNja19kaXNhYmxlKCk7Ci0JbWNjayA9IF9fZ2V0X2NwdV92YXIoY3B1X21jY2spOwotCW1lbXNldCgmX19nZXRfY3B1X3ZhcihjcHVfbWNjayksIDAsIHNpemVvZihzdHJ1Y3QgbWNja19zdHJ1Y3QpKTsKLQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQlsb2NhbF9tY2NrX2VuYWJsZSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmIChtY2NrLmNoYW5uZWxfcmVwb3J0KQotCQl1cCgmbV9zZW0pOwotCi0jaWZkZWYgQ09ORklHX01BQ0hDSEtfV0FSTklORwotLyoKLSAqIFRoZSB3YXJuaW5nIG1heSByZW1haW4gZm9yIGEgcHJvbG9uZ2VkIHBlcmlvZCBvbiB0aGUgYmFyZSBpcm9uLgotICogKGFjdHVhbGx5IHRpbGwgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBvZmYsIG9yIHVudGlsIHRoZSBwcm9ibGVtIGlzIGdvbmUpCi0gKiBTbyB3ZSBqdXN0IHN0b3AgbGlzdGVuaW5nIGZvciB0aGUgV0FSTklORyBNQ0ggYW5kIHByZXZlbnQgY29udGludW91c2x5Ci0gKiBiZWluZyBpbnRlcnJ1cHRlZC4gIE9uZSBjYXZlYXQgaXMgaG93ZXZlciwgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgcGVyCi0gKiBwcm9jZXNzb3IgYW5kIGNhbm5vdCB1c2UgdGhlIHNtcCB2ZXJzaW9uIG9mIGN0bF9jbGVhcl9iaXQoKS4KLSAqIE9uIFZNIHdlIG9ubHkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyIHZpcnRhbGx5IHByZXNlbnRlZCBtYWNoaW5lY2hlY2suCi0gKiBUaG91Z2ggb25lIHN1ZmZpY2VzLCB3ZSBtYXkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyICh2aXJ0dWFsKSBwcm9jZXNzb3IuCi0gKi8KLQlpZiAobWNjay53YXJuaW5nKSB7CS8qIFdBUk5JTkcgcGVuZGluZyA/ICovCi0JCXN0YXRpYyBpbnQgbWNoY2hrX3duZ19wb3N0ZWQgPSAwOwotCQkvKgotCQkgKiBVc2Ugc2luZ2xlIG1hY2hpbmUgY2xlYXIsIGFzIHdlIGNhbm5vdCBoYW5kbGUgc21wIHJpZ2h0IG5vdwotCQkgKi8KLQkJX19jdGxfY2xlYXJfYml0KDE0LCAyNCk7CS8qIERpc2FibGUgV0FSTklORyBNQ0ggKi8KLQkJaWYgKHhjaGcoJm1jaGNoa193bmdfcG9zdGVkLCAxKSA9PSAwKQotCQkJa2lsbF9jYWRfcGlkKFNJR1BXUiwgMSk7Ci0JfQotI2VuZGlmCi0KLQlpZiAobWNjay5raWxsX3Rhc2spIHsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlwcmludGsoS0VSTl9FTUVSRyAibWNjazogVGVybWluYXRpbmcgdGFzayBiZWNhdXNlIG9mIG1hY2hpbmUgIgotCQkgICAgICAgIm1hbGZ1bmN0aW9uIChjb2RlIDB4JTAxNmxseCkuXG4iLCBtY2NrLm1jY2tfY29kZSk7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJtY2NrOiB0YXNrOiAlcywgcGlkOiAlZC5cbiIsCi0JCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOwotCQlkb19leGl0KFNJR1NFR1YpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHMzOTBfaGFuZGxlX21jY2spOwotCi0vKgotICogcmV0dXJucyAwIGlmIGFsbCByZWdpc3RlcnMgY291bGQgYmUgdmFsaWRhdGVkCi0gKiByZXR1cm5zIDEgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQKLXMzOTBfcmV2YWxpZGF0ZV9yZWdpc3RlcnMoc3RydWN0IG1jaSAqbWNpKQotewotCWludCBraWxsX3Rhc2s7Ci0JdTY0IHRtcGNsb2NrOwotCXU2NCB6ZXJvOwotCXZvaWQgKmZwdF9zYXZlX2FyZWEsICpmcHRfY3JlZ19zYXZlX2FyZWE7Ci0KLQlraWxsX3Rhc2sgPSAwOwotCXplcm8gPSAwOwotCS8qIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgKi8KLQlpZiAoIW1jaS0+Z3IpCi0JCS8qCi0JCSAqIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgY291bGRuJ3QgYmUgcmVzdG9yZWQgYW5kIGhhdmUKLQkJICogdW5rbm93biBjb250ZW50cy4gUHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgotCQkgKi8KLQkJa2lsbF90YXNrID0gMTsKLQotCS8qIFJldmFsaWRhdGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmZwKQotCQkvKgotCQkgKiBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgY2FuJ3QgYmUgcmVzdG9yZWQgYW5kCi0JCSAqIHRoZXJlZm9yZSB0aGUgcHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgotCQkgKi8KLQkJa2lsbF90YXNrID0gMTsKLQotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQlhc20gdm9sYXRpbGUoCi0JCSIJbGQJMCwwKCUwKVxuIgotCQkiCWxkCTIsOCglMClcbiIKLQkJIglsZAk0LDE2KCUwKVxuIgotCQkiCWxkCTYsMjQoJTApIgotCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmZsb2F0aW5nX3B0X3NhdmVfYXJlYSkpOwotI2VuZGlmCi0KLQlpZiAoTUFDSElORV9IQVNfSUVFRSkgewotI2lmZGVmIENPTkZJR182NEJJVAotCQlmcHRfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mbG9hdGluZ19wdF9zYXZlX2FyZWE7Ci0JCWZwdF9jcmVnX3NhdmVfYXJlYSA9ICZTMzkwX2xvd2NvcmUuZnB0X2NyZWdfc2F2ZV9hcmVhOwotI2Vsc2UKLQkJZnB0X3NhdmVfYXJlYSA9ICh2b2lkICopIFMzOTBfbG93Y29yZS5leHRlbmRlZF9zYXZlX2FyZWFfYWRkcjsKLQkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSsxMjg7Ci0jZW5kaWYKLQkJLyogRmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciAqLwotCQlpZiAoIW1jaS0+ZmMpIHsKLQkJCS8qCi0JCQkgKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGNhbid0IGJlIHJlc3RvcmVkLgotCQkJICogVGFzayB3aWxsIGJlIHRlcm1pbmF0ZWQuCi0JCQkgKi8KLQkJCWFzbSB2b2xhdGlsZSgibGZwYyAwKCUwKSIgOiA6ICJhIiAoJnplcm8pLCAibSIgKHplcm8pKTsKLQkJCWtpbGxfdGFzayA9IDE7Ci0KLQkJfSBlbHNlCi0JCQlhc20gdm9sYXRpbGUoImxmcGMgMCglMCkiIDogOiAiYSIgKGZwdF9jcmVnX3NhdmVfYXJlYSkpOwotCi0JCWFzbSB2b2xhdGlsZSgKLQkJCSIJbGQJMCwwKCUwKVxuIgotCQkJIglsZAkxLDgoJTApXG4iCi0JCQkiCWxkCTIsMTYoJTApXG4iCi0JCQkiCWxkCTMsMjQoJTApXG4iCi0JCQkiCWxkCTQsMzIoJTApXG4iCi0JCQkiCWxkCTUsNDAoJTApXG4iCi0JCQkiCWxkCTYsNDgoJTApXG4iCi0JCQkiCWxkCTcsNTYoJTApXG4iCi0JCQkiCWxkCTgsNjQoJTApXG4iCi0JCQkiCWxkCTksNzIoJTApXG4iCi0JCQkiCWxkCTEwLDgwKCUwKVxuIgotCQkJIglsZAkxMSw4OCglMClcbiIKLQkJCSIJbGQJMTIsOTYoJTApXG4iCi0JCQkiCWxkCTEzLDEwNCglMClcbiIKLQkJCSIJbGQJMTQsMTEyKCUwKVxuIgotCQkJIglsZAkxNSwxMjAoJTApXG4iCi0JCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7Ci0JfQotCi0JLyogUmV2YWxpZGF0ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCi0JYXNtIHZvbGF0aWxlKAotCQkiCWxhbQkwLDE1LDAoJTApIgotCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOwotCWlmICghbWNpLT5hcikKLQkJLyoKLQkJICogQWNjZXNzIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCi0JCSAqIFRlcm1pbmF0aW5nIHRhc2suCi0JCSAqLwotCQlraWxsX3Rhc2sgPSAxOwotCi0JLyogUmV2YWxpZGF0ZSBjb250cm9sIHJlZ2lzdGVycyAqLwotCWlmICghbWNpLT5jcikKLQkJLyoKLQkJICogQ29udHJvbCByZWdpc3RlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzLgotCQkgKiBDYW4ndCByZWNvdmVyIGFuZCB0aGVyZWZvcmUgc3RvcHBpbmcgbWFjaGluZS4KLQkJICovCi0JCXMzOTBfaGFuZGxlX2RhbWFnZSgiaW52YWxpZCBjb250cm9sIHJlZ2lzdGVycy4iKTsKLQllbHNlCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JCWFzbSB2b2xhdGlsZSgKLQkJCSIJbGN0bGcJMCwxNSwwKCUwKSIKLQkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7Ci0jZWxzZQotCQlhc20gdm9sYXRpbGUoCi0JCQkiCWxjdGwJMCwxNSwwKCUwKSIKLQkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgZG9uJ3QgZXZlbiB0cnkgdG8gcmV2YWxpZGF0ZSB0aGUgVE9EIHJlZ2lzdGVyLCBzaW5jZSB3ZSBzaW1wbHkKLQkgKiBjYW4ndCB3cml0ZSBzb21ldGhpbmcgc2Vuc2libGUgaW50byB0aGF0IHJlZ2lzdGVyLgotCSAqLwotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JLyoKLQkgKiBTZWUgaWYgd2UgY2FuIHJldmFsaWRhdGUgdGhlIFRPRCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgd2l0aCBpdHMKLQkgKiBvbGQgY29udGVudHMgKHNob3VsZCBiZSB6ZXJvKSBvdGhlcndpc2Ugc2V0IGl0IHRvIHplcm8uCi0JICovCi0JaWYgKCFtY2ktPnByKQotCQlhc20gdm9sYXRpbGUoCi0JCQkiCXNyCTAsMFxuIgotCQkJIglzY2twZiIKLQkJCTogOiA6ICIwIiwgImNjIik7Ci0JZWxzZQotCQlhc20gdm9sYXRpbGUoCi0JCQkiCWwJMCwwKCUwKVxuIgotCQkJIglzY2twZiIKLQkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUudG9kX3Byb2dyZWdfc2F2ZV9hcmVhKQotCQkJOiAiMCIsICJjYyIpOwotI2VuZGlmCi0KLQkvKiBSZXZhbGlkYXRlIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJc3RjawkwKCUxKVxuIgotCQkiCXNja2MJMCglMSkiCi0JCTogIj1tIiAodG1wY2xvY2spIDogImEiICgmKHRtcGNsb2NrKSkgOiAiY2MiLCAibWVtb3J5Iik7Ci0KLQkvKiBDaGVjayBpZiBvbGQgUFNXIGlzIHZhbGlkICovCi0JaWYgKCFtY2ktPndwKQotCQkvKgotCQkgKiBDYW4ndCB0ZWxsIGlmIHdlIGNvbWUgZnJvbSB1c2VyIG9yIGtlcm5lbCBtb2RlCi0JCSAqIC0+IHN0b3BwaW5nIG1hY2hpbmUuCi0JCSAqLwotCQlzMzkwX2hhbmRsZV9kYW1hZ2UoIm9sZCBwc3cgaW52YWxpZC4iKTsKLQotCWlmICghbWNpLT5tcyB8fCAhbWNpLT5wbSB8fCAhbWNpLT5pYSkKLQkJa2lsbF90YXNrID0gMTsKLQotCXJldHVybiBraWxsX3Rhc2s7Ci19Ci0KLSNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQotI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCi0KLS8qCi0gKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCi0gKi8KLXZvaWQKLXMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwZF9sb2NrKTsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGxhc3RfaXBkOwotCXN0YXRpYyBpbnQgaXBkX2NvdW50OwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7Ci0Jc3RydWN0IG1jaSAqbWNpOwotCXN0cnVjdCBtY2NrX3N0cnVjdCAqbWNjazsKLQlpbnQgdW1vZGU7Ci0KLQlsb2NrZGVwX29mZigpOwotCi0JczM5MF9pZGxlX2NoZWNrKCk7Ci0KLQltY2kgPSAoc3RydWN0IG1jaSAqKSAmUzM5MF9sb3djb3JlLm1jY2tfaW50ZXJydXB0aW9uX2NvZGU7Ci0JbWNjayA9ICZfX2dldF9jcHVfdmFyKGNwdV9tY2NrKTsKLQl1bW9kZSA9IHVzZXJfbW9kZShyZWdzKTsKLQotCWlmIChtY2ktPnNkKQotCQkvKiBTeXN0ZW0gZGFtYWdlIC0+IHN0b3BwaW5nIG1hY2hpbmUgKi8KLQkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzeXN0ZW0gZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7Ci0KLQlpZiAobWNpLT5wZCkgewotCQlpZiAobWNpLT5iKSB7Ci0JCQkvKiBQcm9jZXNzaW5nIGJhY2t1cCAtPiB2ZXJpZnkgaWYgd2UgY2FuIHN1cnZpdmUgdGhpcyAqLwotCQkJdTY0IHpfbWNpYywgb19tY2ljLCB0X21jaWM7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JCQl6X21jaWMgPSAoMVVMTDw8NjMgfCAxVUxMPDw1OSB8IDFVTEw8PDI5KTsKLQkJCW9fbWNpYyA9ICgxVUxMPDw0MyB8IDFVTEw8PDQyIHwgMVVMTDw8NDEgfCAxVUxMPDw0MCB8Ci0JCQkJICAxVUxMPDwzNiB8IDFVTEw8PDM1IHwgMVVMTDw8MzQgfCAxVUxMPDwzMiB8Ci0JCQkJICAxVUxMPDwzMCB8IDFVTEw8PDIxIHwgMVVMTDw8MjAgfCAxVUxMPDwxNyB8Ci0JCQkJICAxVUxMPDwxNik7Ci0jZWxzZQotCQkJel9tY2ljID0gKDFVTEw8PDYzIHwgMVVMTDw8NTkgfCAxVUxMPDw1NyB8IDFVTEw8PDUwIHwKLQkJCQkgIDFVTEw8PDI5KTsKLQkJCW9fbWNpYyA9ICgxVUxMPDw0MyB8IDFVTEw8PDQyIHwgMVVMTDw8NDEgfCAxVUxMPDw0MCB8Ci0JCQkJICAxVUxMPDwzNiB8IDFVTEw8PDM1IHwgMVVMTDw8MzQgfCAxVUxMPDwzMiB8Ci0JCQkJICAxVUxMPDwzMCB8IDFVTEw8PDIwIHwgMVVMTDw8MTcgfCAxVUxMPDwxNik7Ci0jZW5kaWYKLQkJCXRfbWNpYyA9ICoodTY0ICopbWNpOwotCi0JCQlpZiAoKCh0X21jaWMgJiB6X21jaWMpICE9IDApIHx8Ci0JCQkgICAgKCh0X21jaWMgJiBvX21jaWMpICE9IG9fbWNpYykpIHsKLQkJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInByb2Nlc3NpbmcgYmFja3VwIG1hY2hpbmUgIgotCQkJCQkJICAgImNoZWNrIHdpdGggZGFtYWdlLiIpOwotCQkJfQotCi0JCQkvKgotCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0Ci0JCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgotCQkJICovCi0KLQkJCXNwaW5fbG9jaygmaXBkX2xvY2spOwotCi0JCQl0bXAgPSBnZXRfY2xvY2soKTsKLQotCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKLQkJCQlpcGRfY291bnQrKzsKLQkJCWVsc2UKLQkJCQlpcGRfY291bnQgPSAxOwotCi0JCQlsYXN0X2lwZCA9IHRtcDsKLQotCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQotCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7Ci0KLQkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCi0JCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIGluc3RydWN0aW9uIHByb2Nlc3NpbmcgIgotCQkJCQkgICAiZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7Ci0JCX0KLQl9Ci0JaWYgKHMzOTBfcmV2YWxpZGF0ZV9yZWdpc3RlcnMobWNpKSkgewotCQlpZiAodW1vZGUpIHsKLQkJCS8qCi0JCQkgKiBDb3VsZG4ndCByZXN0b3JlIGFsbCByZWdpc3RlciBjb250ZW50cyB3aGlsZSBpbgotCQkJICogdXNlciBtb2RlIC0+IG1hcmsgdGFzayBmb3IgdGVybWluYXRpb24uCi0JCQkgKi8KLQkJCW1jY2stPmtpbGxfdGFzayA9IDE7Ci0JCQltY2NrLT5tY2NrX2NvZGUgPSAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBtY2k7Ci0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7Ci0JCX0KLQkJZWxzZQotCQkJLyoKLQkJCSAqIENvdWxkbid0IHJlc3RvcmUgYWxsIHJlZ2lzdGVyIGNvbnRlbnRzIHdoaWxlIGluCi0JCQkgKiBrZXJuZWwgbW9kZSAtPiBzdG9wcGluZyBtYWNoaW5lLgotCQkJICovCi0JCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInVuYWJsZSB0byByZXZhbGlkYXRlIHJlZ2lzdGVycy4iKTsKLQl9Ci0KLQlpZiAobWNpLT5jZCkgewotCQkvKiBUaW1pbmcgZmFjaWxpdHkgZGFtYWdlICovCi0JCXMzOTBfaGFuZGxlX2RhbWFnZSgiVE9EIGNsb2NrIGRhbWFnZWQiKTsKLQl9Ci0KLQlpZiAobWNpLT5lZCAmJiBtY2ktPmVjKSB7Ci0JCS8qIEV4dGVybmFsIGRhbWFnZSAqLwotCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX0VUUl9TWU5DKSkKLQkJCWV0cl9zeW5jX2NoZWNrKCk7Ci0JCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfRVRSX1NXSVRDSCkpCi0JCQlldHJfc3dpdGNoX3RvX2xvY2FsKCk7Ci0JCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfU1RQX1NZTkMpKQotCQkJc3RwX3N5bmNfY2hlY2soKTsKLQkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9TVFBfSVNMQU5EKSkKLQkJCXN0cF9pc2xhbmRfY2hlY2soKTsKLQl9Ci0KLQlpZiAobWNpLT5zZSkKLQkJLyogU3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAqLwotCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgIgotCQkJCSAgICJtYWNoaW5lIGNoZWNrLiIpOwotCi0JaWYgKG1jaS0+a2UpCi0JCS8qIFN0b3JhZ2Uga2V5LWVycm9yIHVuY29ycmVjdGVkICovCi0JCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgIgotCQkJCSAgICJtYWNoaW5lIGNoZWNrLiIpOwotCi0JaWYgKG1jaS0+ZHMgJiYgbWNpLT5mYSkKLQkJLyogU3RvcmFnZSBkZWdyYWRhdGlvbiAqLwotCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN0b3JhZ2UgZGVncmFkYXRpb24gbWFjaGluZSAiCi0JCQkJICAgImNoZWNrLiIpOwotCi0JaWYgKG1jaS0+Y3ApIHsKLQkJLyogQ2hhbm5lbCByZXBvcnQgd29yZCBwZW5kaW5nICovCi0JCW1jY2stPmNoYW5uZWxfcmVwb3J0ID0gMTsKLQkJc2V0X3RocmVhZF9mbGFnKFRJRl9NQ0NLX1BFTkRJTkcpOwotCX0KLQotCWlmIChtY2ktPncpIHsKLQkJLyogV2FybmluZyBwZW5kaW5nICovCi0JCW1jY2stPndhcm5pbmcgPSAxOwotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7Ci0JfQotCWxvY2tkZXBfb24oKTsKLX0KLQotLyoKLSAqIHMzOTBfaW5pdF9tYWNoaW5lX2NoZWNrCi0gKgotICogaW5pdGlhbGl6ZSBtYWNoaW5lIGNoZWNrIGhhbmRsaW5nCi0gKi8KLXN0YXRpYyBpbnQKLW1hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQotewotCWluaXRfTVVURVhfTE9DS0VEKCZtX3NlbSk7Ci0JY3RsX3NldF9iaXQoMTQsIDI1KTsJLyogZW5hYmxlIGV4dGVybmFsIGRhbWFnZSBNQ0ggKi8KLQljdGxfc2V0X2JpdCgxNCwgMjcpOyAgICAvKiBlbmFibGUgc3lzdGVtIHJlY292ZXJ5IE1DSCAqLwotI2lmZGVmIENPTkZJR19NQUNIQ0hLX1dBUk5JTkcKLQljdGxfc2V0X2JpdCgxNCwgMjQpOwkvKiBlbmFibGUgd2FybmluZyBNQ0ggKi8KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgbWFjaGluZSBjaGVjayBoYW5kbGVyIHJlYWxseSBlYXJseSB0byBiZSBhYmxlIHRvCi0gKiBjYXRjaCBhbGwgbWFjaGluZSBjaGVja3MgdGhhdCBoYXBwZW4gZHVyaW5nIGJvb3QKLSAqLwotYXJjaF9pbml0Y2FsbChtYWNoaW5lX2NoZWNrX2luaXQpOwotCi0vKgotICogTWFjaGluZSBjaGVja3MgZm9yIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBtdXN0IGJlIGVuYWJsZWQKLSAqIGFmdGVyIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBpcyBpbml0aWFsaXplZAotICovCi1zdGF0aWMgaW50IF9faW5pdAotbWFjaGluZV9jaGVja19jcndfaW5pdCAodm9pZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KLQl0YXNrID0ga3RocmVhZF9ydW4oczM5MF9jb2xsZWN0X2Nyd19pbmZvLCAmbV9zZW0sICJrbWNoZWNrIik7Ci0JaWYgKElTX0VSUih0YXNrKSkKLQkJcmV0dXJuIFBUUl9FUlIodGFzayk7Ci0JY3RsX3NldF9iaXQoMTQsIDI4KTsJLyogZW5hYmxlIGNoYW5uZWwgcmVwb3J0IE1DSCAqLwotCXJldHVybiAwOwotfQotCi1kZXZpY2VfaW5pdGNhbGwgKG1hY2hpbmVfY2hlY2tfY3J3X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmggYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5ZjhiNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9zMzkwbWFjaC5oCi0gKiAgIFMvMzkwIGRhdGEgZGVmaW5pdGlvbnMgZm9yIG1hY2hpbmUgY2hlY2sgcHJvY2Vzc2luZwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqLwotCi0jaWZuZGVmIF9fczM5MG1hY2hfaAotI2RlZmluZSBfX3MzOTBtYWNoX2gKLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3QgbWNpIHsKLQlfX3UzMiAgIHNkICAgICAgICAgICAgICA6ICAxOyAvKiAwMCBzeXN0ZW0gZGFtYWdlICovCi0JX191MzIgICBwZCAgICAgICAgICAgICAgOiAgMTsgLyogMDEgaW5zdHJ1Y3Rpb24tcHJvY2Vzc2luZyBkYW1hZ2UgKi8KLQlfX3UzMiAgIHNyICAgICAgICAgICAgICA6ICAxOyAvKiAwMiBzeXN0ZW0gcmVjb3ZlcnkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfMSA6ICAxOyAvKiAwMyAqLwotCV9fdTMyICAgY2QgICAgICAgICAgICAgIDogIDE7IC8qIDA0IHRpbWluZy1mYWNpbGl0eSBkYW1hZ2UgKi8KLQlfX3UzMiAgIGVkICAgICAgICAgICAgICA6ICAxOyAvKiAwNSBleHRlcm5hbCBkYW1hZ2UgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfMiA6ICAxOyAvKiAwNiAqLwotCV9fdTMyICAgZGcgICAgICAgICAgICAgIDogIDE7IC8qIDA3IGRlZ3JhZGF0aW9uICovCi0JX191MzIgICB3ICAgICAgICAgICAgICAgOiAgMTsgLyogMDggd2FybmluZyBwZW5kaW5nICovCi0JX191MzIgICBjcCAgICAgICAgICAgICAgOiAgMTsgLyogMDkgY2hhbm5lbC1yZXBvcnQgcGVuZGluZyAqLwotCV9fdTMyICAgc3AgICAgICAgICAgICAgIDogIDE7IC8qIDEwIHNlcnZpY2UtcHJvY2Vzc29yIGRhbWFnZSAqLwotCV9fdTMyICAgY2sgICAgICAgICAgICAgIDogIDE7IC8qIDExIGNoYW5uZWwtc3Vic3lzdGVtIGRhbWFnZSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8zIDogIDI7IC8qIDEyLTEzICovCi0JX191MzIgICBiICAgICAgICAgICAgICAgOiAgMTsgLyogMTQgYmFja2VkIHVwICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzQgOiAgMTsgLyogMTUgKi8KLQlfX3UzMiAgIHNlICAgICAgICAgICAgICA6ICAxOyAvKiAxNiBzdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCi0JX191MzIgICBzYyAgICAgICAgICAgICAgOiAgMTsgLyogMTcgc3RvcmFnZSBlcnJvciBjb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIGtlICAgICAgICAgICAgICA6ICAxOyAvKiAxOCBzdG9yYWdlLWtleSBlcnJvciB1bmNvcnJlY3RlZCAqLwotCV9fdTMyICAgZHMgICAgICAgICAgICAgIDogIDE7IC8qIDE5IHN0b3JhZ2UgZGVncmFkYXRpb24gKi8KLQlfX3UzMiAgIHdwICAgICAgICAgICAgICA6ICAxOyAvKiAyMCBwc3cgbXdwIHZhbGlkaXR5ICovCi0JX191MzIgICBtcyAgICAgICAgICAgICAgOiAgMTsgLyogMjEgcHN3IG1hc2sgYW5kIGtleSB2YWxpZGl0eSAqLwotCV9fdTMyICAgcG0gICAgICAgICAgICAgIDogIDE7IC8qIDIyIHBzdyBwcm9ncmFtIG1hc2sgYW5kIGNjIHZhbGlkaXR5ICovCi0JX191MzIgICBpYSAgICAgICAgICAgICAgOiAgMTsgLyogMjMgcHN3IGluc3RydWN0aW9uIGFkZHJlc3MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZhICAgICAgICAgICAgICA6ICAxOyAvKiAyNCBmYWlsaW5nIHN0b3JhZ2UgYWRkcmVzcyB2YWxpZGl0eSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF81IDogIDE7IC8qIDI1ICovCi0JX191MzIgICBlYyAgICAgICAgICAgICAgOiAgMTsgLyogMjYgZXh0ZXJuYWwgZGFtYWdlIGNvZGUgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZwICAgICAgICAgICAgICA6ICAxOyAvKiAyNyBmbG9hdGluZyBwb2ludCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgZ3IgICAgICAgICAgICAgIDogIDE7IC8qIDI4IGdlbmVyYWwgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGNyICAgICAgICAgICAgICA6ICAxOyAvKiAyOSBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzYgOiAgMTsgLyogMzAgKi8KLQlfX3UzMiAgIHN0ICAgICAgICAgICAgICA6ICAxOyAvKiAzMSBzdG9yYWdlIGxvZ2ljYWwgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGllICAgICAgICAgICAgICA6ICAxOyAvKiAzMiBpbmRpcmVjdCBzdG9yYWdlIGVycm9yICovCi0JX191MzIgICBhciAgICAgICAgICAgICAgOiAgMTsgLyogMzMgYWNjZXNzIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBkYSAgICAgICAgICAgICAgOiAgMTsgLyogMzQgZGVsYXllZCBhY2Nlc3MgZXhjZXB0aW9uICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzcgOiAgNzsgLyogMzUtNDEgKi8KLQlfX3UzMiAgIHByICAgICAgICAgICAgICA6ICAxOyAvKiA0MiB0b2QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBmYyAgICAgICAgICAgICAgOiAgMTsgLyogNDMgZnAgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgYXAgICAgICAgICAgICAgIDogIDE7IC8qIDQ0IGFuY2lsbGFyeSByZXBvcnQgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfOCA6ICAxOyAvKiA0NSAqLwotCV9fdTMyICAgY3QgICAgICAgICAgICAgIDogIDE7IC8qIDQ2IGNwdSB0aW1lciB2YWxpZGl0eSAqLwotCV9fdTMyICAgY2MgICAgICAgICAgICAgIDogIDE7IC8qIDQ3IGNsb2NrIGNvbXBhcmF0b3IgdmFsaWRpdHkgKi8KLQlfX3UzMgl0b19iZV9kZWZpbmVkXzkgOiAxNjsgLyogNDctNjMgKi8KLX07Ci0KLS8qCi0gKiBDaGFubmVsIFJlcG9ydCBXb3JkCi0gKi8KLXN0cnVjdCBjcncgewotCV9fdTMyIHJlczEgICAgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCi0JX191MzIgc2xjdCAgICA6ICAxOyAgIC8qIHNvbGljaXRlZCAqLwotCV9fdTMyIG9mbHcgICAgOiAgMTsgICAvKiBvdmVyZmxvdyAqLwotCV9fdTMyIGNobiAgICAgOiAgMTsgICAvKiBjaGFpbmVkICovCi0JX191MzIgcnNjICAgICA6ICA0OyAgIC8qIHJlcG9ydGluZyBzb3VyY2UgY29kZSAqLwotCV9fdTMyIGFuYyAgICAgOiAgMTsgICAvKiBhbmNpbGxhcnkgcmVwb3J0ICovCi0JX191MzIgcmVzMiAgICA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KLQlfX3UzMiBlcmMgICAgIDogIDY7ICAgLyogZXJyb3ItcmVjb3ZlcnkgY29kZSAqLwotCV9fdTMyIHJzaWQgICAgOiAxNjsgICAvKiByZXBvcnRpbmctc291cmNlIElEICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotdHlwZWRlZiB2b2lkICgqY3J3X2hhbmRsZXJfdCkoc3RydWN0IGNydyAqLCBzdHJ1Y3QgY3J3ICosIGludCk7Ci0KLWV4dGVybiBpbnQgczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpOwotZXh0ZXJuIHZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpOwotCi0jZGVmaW5lIE5SX1JTQ1MgMTYKLQotI2RlZmluZSBDUldfUlNDX01PTklUT1IgIDB4MiAgLyogbW9uaXRvcmluZyBmYWNpbGl0eSAqLwotI2RlZmluZSBDUldfUlNDX1NDSCAgICAgIDB4MyAgLyogc3ViY2hhbm5lbCAqLwotI2RlZmluZSBDUldfUlNDX0NQQVRIICAgIDB4NCAgLyogY2hhbm5lbCBwYXRoICovCi0jZGVmaW5lIENSV19SU0NfQ09ORklHICAgMHg5ICAvKiBjb25maWd1cmF0aW9uLWFsZXJ0IGZhY2lsaXR5ICovCi0jZGVmaW5lIENSV19SU0NfQ1NTICAgICAgMHhCICAvKiBjaGFubmVsIHN1YnN5c3RlbSAqLwotCi0jZGVmaW5lIENSV19FUkNfRVZFTlQgICAgMHgwMCAvKiBldmVudCBpbmZvcm1hdGlvbiBwZW5kaW5nICovCi0jZGVmaW5lIENSV19FUkNfQVZBSUwgICAgMHgwMSAvKiBhdmFpbGFibGUgKi8KLSNkZWZpbmUgQ1JXX0VSQ19JTklUICAgICAweDAyIC8qIGluaXRpYWxpemVkICovCi0jZGVmaW5lIENSV19FUkNfVEVSUk9SICAgMHgwMyAvKiB0ZW1wb3JhcnkgZXJyb3IgKi8KLSNkZWZpbmUgQ1JXX0VSQ19JUEFSTSAgICAweDA0IC8qIGluc3RhbGxlZCBwYXJtIGluaXRpYWxpemVkICovCi0jZGVmaW5lIENSV19FUkNfVEVSTSAgICAgMHgwNSAvKiB0ZXJtaW5hbCAqLwotI2RlZmluZSBDUldfRVJDX1BFUlJOICAgIDB4MDYgLyogcGVybS4gZXJyb3IsIGZhYy4gbm90IGluaXQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QRVJSSSAgICAweDA3IC8qIHBlcm0uIGVycm9yLCBmYWNpbGl0eSBpbml0ICovCi0jZGVmaW5lIENSV19FUkNfUE1PRCAgICAgMHgwOCAvKiBpbnN0YWxsZWQgcGFyYW1ldGVycyBtb2RpZmllZCAqLwotCi1zdGF0aWMgaW5saW5lIGludCBzdGNydyhzdHJ1Y3QgY3J3ICpwY3J3ICkKLXsKLQlpbnQgY2NvZGU7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInN0Y3J3IDAoJTIpXG5cdCIKLQkJImlwbSAlMFxuXHQiCi0JCSJzcmwgJTAsMjhcblx0IgotCQk6ICI9ZCIgKGNjb2RlKSwgIj1tIiAoKnBjcncpCi0JCTogImEiIChwY3J3KQotCQk6ICJjYyIgKTsKLQlyZXR1cm4gY2NvZGU7Ci19Ci0KLSNkZWZpbmUgRURfRVRSX1NZTkMJMTIJLyogRXh0ZXJuYWwgZGFtYWdlIEVUUiBzeW5jIGNoZWNrICovCi0jZGVmaW5lIEVEX0VUUl9TV0lUQ0gJMTMJLyogRXh0ZXJuYWwgZGFtYWdlIEVUUiBzd2l0Y2ggdG8gbG9jYWwgKi8KLQotI2RlZmluZSBFRF9TVFBfU1lOQwk3CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgc3luYyBjaGVjayAqLwotI2RlZmluZSBFRF9TVFBfSVNMQU5ECTYJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBpc2xhbmQgY2hlY2sgKi8KLQotc3RydWN0IHB0X3JlZ3M7Ci0KLXZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKLXZvaWQgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNlbmRpZiAvKiBfX3MzOTBtYWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCA4YWY3ZGZiLi42MTZjNjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogTW9kdWxlIGludGVyZmFjZSBhbmQgaGFuZGxpbmcgb2YgemZjcCBkYXRhIHN0cnVjdHVyZXMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKICAqLwogCiAvKgpAQCAtMjQ5LDggKzI0OSw4IEBACiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KQotCQlpZiAoKHBvcnQtPnd3cG4gPT0gd3dwbikgJiYgIShhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmCi0JCSAgICAgIChaRkNQX1NUQVRVU19QT1JUX05PX1dXUE4gfCBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFKSkpCisJCWlmICgocG9ydC0+d3dwbiA9PSB3d3BuKSAmJgorCQkgICAgIShhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUpKQogCQkJcmV0dXJuIHBvcnQ7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00MjEsNyArNDIxLDggQEAKIAl3aGlsZSAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXRfbWlzcykgPiAwKQogCQlpZiAoemZjcF9mc2Zfc3RhdHVzX3JlYWQoYWRhcHRlcikpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdF9taXNzKSA+PSAxNikgewotCQkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDEwMywgTlVMTCk7CisJCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImF4c3JlZjEiLAorCQkJCQkJCU5VTEwpOwogCQkJCXJldHVybiAxOwogCQkJfQogCQkJYnJlYWs7CkBAIC01MDEsNiArNTAyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c2NzaV9kYmZfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlY19kYmZfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5xZGlvX3N0YXRfbG9jayk7CiAKIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+ZXJwX2xvY2spOwogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5hYm9ydF9sb2NrKTsKQEAgLTUyMiw3ICs1MjQsNiBAQAogCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKIAogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUsICZhZGFwdGVyLT5zdGF0dXMpOwotCXpmY3BfZmNfbmFtZXNlcnZlcl9pbml0KGFkYXB0ZXIpOwogCiAJaWYgKCF6ZmNwX2FkYXB0ZXJfc2NzaV9yZWdpc3RlcihhZGFwdGVyKSkKIAkJcmV0dXJuIDA7CkBAIC01NTIsNiArNTUzLDcgQEAKIAogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c3RhdF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFkYXB0ZXItPm5zcC53b3JrKTsKIAl6ZmNwX2FkYXB0ZXJfc2NzaV91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LmtvYmosCiAJCQkgICAmemZjcF9zeXNmc19hZGFwdGVyX2F0dHJzKTsKQEAgLTYwMywxMCArNjA1LDEzIEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+cmVtb3ZlX3dxKTsKIAlJTklUX0xJU1RfSEVBRCgmcG9ydC0+dW5pdF9saXN0X2hlYWQpOwogCUlOSVRfV09SSygmcG9ydC0+Z2lkX3BuX3dvcmssIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9sb29rdXApOworCUlOSVRfV09SSygmcG9ydC0+dGVzdF9saW5rX3dvcmssIHpmY3BfZmNfbGlua190ZXN0X3dvcmspOworCUlOSVRfV09SSygmcG9ydC0+cnBvcnRfd29yaywgemZjcF9zY3NpX3Jwb3J0X3dvcmspOwogCiAJcG9ydC0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJcG9ydC0+ZF9pZCA9IGRfaWQ7CiAJcG9ydC0+d3dwbiA9IHd3cG47CisJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX05PTkU7CiAKIAkvKiBtYXJrIHBvcnQgdW51c2FibGUgYXMgbG9uZyBhcyBzeXNmcyByZWdpc3RyYXRpb24gaXMgbm90IGNvbXBsZXRlICovCiAJYXRvbWljX3NldF9tYXNrKHN0YXR1cyB8IFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUsICZwb3J0LT5zdGF0dXMpOwpAQCAtNjIwLDExICs2MjUsMTAgQEAKIAlkZXZfc2V0X2RydmRhdGEoJnBvcnQtPnN5c2ZzX2RldmljZSwgcG9ydCk7CiAKIAlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCWlmICghKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX1BPUlRfTk9fV1dQTikpCi0JCWlmICh6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgd3dwbikpIHsKLQkJCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCQl9CisJaWYgKHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCB3d3BuKSkgeworCQlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KIAlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAKIAlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKaW5kZXggMjg1ODgxZi4uMWZlMWUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFJlZ2lzdHJhdGlvbiBhbmQgY2FsbGJhY2sgZm9yIHRoZSBzMzkwIGNvbW1vbiBJL08gbGF5ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtNzIsOCArNzIsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHAsICZwb3J0X3JlbW92ZV9saCwgbGlzdCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5pdCwgdSwgJnVuaXRfcmVtb3ZlX2xoLCBsaXN0KSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgotCQkJICAgIFpGQ1BfU1RBVFVTX1VOSVRfUkVHSVNURVJFRCkKKwkJCWlmICh1bml0LT5kZXZpY2UpCiAJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHVuaXQtPmRldmljZSk7CiAJCQl6ZmNwX3VuaXRfZGVxdWV1ZSh1bml0KTsKIAkJfQpAQCAtMTA5LDExICsxMDgsMTIgQEAKIAkvKiBpbml0aWFsaXplIHJlcXVlc3QgY291bnRlciAqLwogCUJVR19PTighemZjcF9yZXFsaXN0X2lzZW1wdHkoYWRhcHRlcikpOwogCWFkYXB0ZXItPnJlcV9ubyA9IDA7CisJemZjcF9mY19uYW1lc2VydmVyX2luaXQoYWRhcHRlcik7CiAKLQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMTAsIE5VTEwsCisJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsICJjY3NvbmwxIiwgTlVMTCwKIAkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsIFpGQ1BfU0VUKTsKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgODUsCi0JCQkJTlVMTCk7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCisJCQkJImNjc29ubDIiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwogCWZsdXNoX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7CkBAIC0xMzcsNyArMTM3LDcgQEAKIAogCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKLQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDg2LCBOVUxMKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NvZmYxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAl6ZmNwX2VycF90aHJlYWRfa2lsbChhZGFwdGVyKTsKIAl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKQEAgLTE2MCwyMSArMTYwLDIxIEBACiAJY2FzZSBDSU9fR09ORToKIAkJZGV2X3dhcm4oJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSAiVGhlIEZDUCBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWRcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDg3LCBOVUxMKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2Nub3RpMSIsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIENJT19OT19QQVRIOgogCQlkZXZfd2FybigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJICJUaGUgQ0hQSUQgZm9yIHRoZSBGQ1AgZGV2aWNlIGlzIG9mZmxpbmVcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDg4LCBOVUxMKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2Nub3RpMiIsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIENJT19PUEVSOgogCQlkZXZfaW5mbygmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJICJUaGUgRkNQIGRldmljZSBpcyBvcGVyYXRpb25hbCBhZ2FpblxuIik7Ci0JCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAxMSwgTlVMTCwKKwkJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsICJjY25vdGkzIiwgTlVMTCwKIAkJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLAogCQkJCQkgICAgICAgWkZDUF9TRVQpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJODksIE5VTEwpOworCQkJCQkiY2Nub3RpNCIsIE5VTEwpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDE7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAogCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKLQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDkwLCBOVUxMKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NodXQxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCmluZGV4IGNiNmRmNjAuLjBhMWE1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwpAQCAtNDkwLDE3MiArNDkwLDE3IEBACiAJW1pGQ1BfUkVDX0RCRl9JRF9BQ1RJT05dID0gImFjdGlvbiIsCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqemZjcF9yZWNfZGJmX2lkc1tdID0gewotCVsxXQk9ICJuZXciLAotCVsyXQk9ICJyZWFkeSIsCi0JWzNdCT0gImtpbGwiLAotCVs0XQk9ICJkb3duIHNsZWVwIiwKLQlbNV0JPSAiZG93biB3YWtldXAiLAotCVs2XQk9ICJkb3duIHNsZWVwIGVjZCIsCi0JWzddCT0gImRvd24gd2FrZXVwIGVjZCIsCi0JWzhdCT0gImRvd24gc2xlZXAgZXBkIiwKLQlbOV0JPSAiZG93biB3YWtldXAgZXBkIiwKLQlbMTBdCT0gIm9ubGluZSIsCi0JWzExXQk9ICJvcGVyYXRpb25hbCIsCi0JWzEyXQk9ICJzY3NpIHNsYXZlIGRlc3Ryb3kiLAotCVsxM10JPSAicHJvcGFnYXRlIGZhaWxlZCBhZGFwdGVyIiwKLQlbMTRdCT0gInByb3BhZ2F0ZSBmYWlsZWQgcG9ydCIsCi0JWzE1XQk9ICJibG9jayBhZGFwdGVyIiwKLQlbMTZdCT0gInVuYmxvY2sgYWRhcHRlciIsCi0JWzE3XQk9ICJibG9jayBwb3J0IiwKLQlbMThdCT0gInVuYmxvY2sgcG9ydCIsCi0JWzE5XQk9ICJibG9jayB1bml0IiwKLQlbMjBdCT0gInVuYmxvY2sgdW5pdCIsCi0JWzIxXQk9ICJ1bml0IHJlY292ZXJ5IGZhaWxlZCIsCi0JWzIyXQk9ICJwb3J0IHJlY292ZXJ5IGZhaWxlZCIsCi0JWzIzXQk9ICJhZGFwdGVyIHJlY292ZXJ5IGZhaWxlZCIsCi0JWzI0XQk9ICJxZGlvIHF1ZXVlcyBkb3duIiwKLQlbMjVdCT0gInAycCBmYWlsZWQiLAotCVsyNl0JPSAibmFtZXNlcnZlciBsb29rdXAgZmFpbGVkIiwKLQlbMjddCT0gIm5hbWVzZXJ2ZXIgcG9ydCBmYWlsZWQiLAotCVsyOF0JPSAibGluayB1cCIsCi0JWzI5XQk9ICJsaW5rIGRvd24iLAotCVszMF0JPSAibGluayB1cCBzdGF0dXMgcmVhZCIsCi0JWzMxXQk9ICJvcGVuIHBvcnQgZmFpbGVkIiwKLQlbMzJdCT0gIiIsCi0JWzMzXQk9ICJjbG9zZSBwb3J0IiwKLQlbMzRdCT0gIm9wZW4gdW5pdCBmYWlsZWQiLAotCVszNV0JPSAiZXhjbHVzaXZlIG9wZW4gdW5pdCBmYWlsZWQiLAotCVszNl0JPSAic2hhcmVkIG9wZW4gdW5pdCBmYWlsZWQiLAotCVszN10JPSAibGluayBkb3duIiwKLQlbMzhdCT0gImxpbmsgZG93biBzdGF0dXMgcmVhZCBubyBsaW5rIiwKLQlbMzldCT0gImxpbmsgZG93biBzdGF0dXMgcmVhZCBmZGlzYyBsb2dpbiIsCi0JWzQwXQk9ICJsaW5rIGRvd24gc3RhdHVzIHJlYWQgZmlybXdhcmUgdXBkYXRlIiwKLQlbNDFdCT0gImxpbmsgZG93biBzdGF0dXMgcmVhZCB1bmtub3duIHJlYXNvbiIsCi0JWzQyXQk9ICJsaW5rIGRvd24gZWNkIGluY29tcGxldGUiLAotCVs0M10JPSAibGluayBkb3duIGVwZCBpbmNvbXBsZXRlIiwKLQlbNDRdCT0gInN5c2ZzIGFkYXB0ZXIgcmVjb3ZlcnkiLAotCVs0NV0JPSAic3lzZnMgcG9ydCByZWNvdmVyeSIsCi0JWzQ2XQk9ICJzeXNmcyB1bml0IHJlY292ZXJ5IiwKLQlbNDddCT0gInBvcnQgYm94ZWQgYWJvcnQiLAotCVs0OF0JPSAidW5pdCBib3hlZCBhYm9ydCIsCi0JWzQ5XQk9ICJwb3J0IGJveGVkIGN0IiwKLQlbNTBdCT0gInBvcnQgYm94ZWQgY2xvc2UgcGh5c2ljYWwiLAotCVs1MV0JPSAicG9ydCBib3hlZCBvcGVuIHVuaXQiLAotCVs1Ml0JPSAicG9ydCBib3hlZCBjbG9zZSB1bml0IiwKLQlbNTNdCT0gInBvcnQgYm94ZWQgZmNwIiwKLQlbNTRdCT0gInVuaXQgYm94ZWQgZmNwIiwKLQlbNTVdCT0gInBvcnQgYWNjZXNzIGRlbmllZCIsCi0JWzU2XQk9ICIiLAotCVs1N10JPSAiIiwKLQlbNThdCT0gIiIsCi0JWzU5XQk9ICJ1bml0IGFjY2VzcyBkZW5pZWQiLAotCVs2MF0JPSAic2hhcmVkIHVuaXQgYWNjZXNzIGRlbmllZCBvcGVuIHVuaXQiLAotCVs2MV0JPSAiIiwKLQlbNjJdCT0gInJlcXVlc3QgdGltZW91dCIsCi0JWzYzXQk9ICJhZGlzYyBsaW5rIHRlc3QgcmVqZWN0IG9yIHRpbWVvdXQiLAotCVs2NF0JPSAiYWRpc2MgbGluayB0ZXN0IGRfaWQgY2hhbmdlZCIsCi0JWzY1XQk9ICJhZGlzYyBsaW5rIHRlc3QgZmFpbGVkIiwKLQlbNjZdCT0gInJlY292ZXJ5IG91dCBvZiBtZW1vcnkiLAotCVs2N10JPSAiYWRhcHRlciByZWNvdmVyeSByZXBlYXRlZCBhZnRlciBzdGF0ZSBjaGFuZ2UiLAotCVs2OF0JPSAicG9ydCByZWNvdmVyeSByZXBlYXRlZCBhZnRlciBzdGF0ZSBjaGFuZ2UiLAotCVs2OV0JPSAidW5pdCByZWNvdmVyeSByZXBlYXRlZCBhZnRlciBzdGF0ZSBjaGFuZ2UiLAotCVs3MF0JPSAicG9ydCByZWNvdmVyeSBmb2xsb3ctdXAgYWZ0ZXIgc3VjY2Vzc2Z1bCBhZGFwdGVyIHJlY292ZXJ5IiwKLQlbNzFdCT0gImFkYXB0ZXIgcmVjb3ZlcnkgZXNjYWxhdGlvbiBhZnRlciBmYWlsZWQgYWRhcHRlciByZWNvdmVyeSIsCi0JWzcyXQk9ICJwb3J0IHJlY292ZXJ5IGZvbGxvdy11cCBhZnRlciBzdWNjZXNzZnVsIHBoeXNpY2FsIHBvcnQgIgotCQkgICJyZWNvdmVyeSIsCi0JWzczXQk9ICJhZGFwdGVyIHJlY292ZXJ5IGVzY2FsYXRpb24gYWZ0ZXIgZmFpbGVkIHBoeXNpY2FsIHBvcnQgIgotCQkgICJyZWNvdmVyeSIsCi0JWzc0XQk9ICJ1bml0IHJlY292ZXJ5IGZvbGxvdy11cCBhZnRlciBzdWNjZXNzZnVsIHBvcnQgcmVjb3ZlcnkiLAotCVs3NV0JPSAicGh5c2ljYWwgcG9ydCByZWNvdmVyeSBlc2NhbGF0aW9uIGFmdGVyIGZhaWxlZCBwb3J0ICIKLQkJICAicmVjb3ZlcnkiLAotCVs3Nl0JPSAicG9ydCByZWNvdmVyeSBlc2NhbGF0aW9uIGFmdGVyIGZhaWxlZCB1bml0IHJlY292ZXJ5IiwKLQlbNzddCT0gIiIsCi0JWzc4XQk9ICJkdXBsaWNhdGUgcmVxdWVzdCBpZCIsCi0JWzc5XQk9ICJsaW5rIGRvd24iLAotCVs4MF0JPSAiZXhjbHVzaXZlIHJlYWQtb25seSB1bml0IGFjY2VzcyB1bnN1cHBvcnRlZCIsCi0JWzgxXQk9ICJzaGFyZWQgcmVhZC13cml0ZSB1bml0IGFjY2VzcyB1bnN1cHBvcnRlZCIsCi0JWzgyXQk9ICJpbmNvbWluZyByc2NuIiwKLQlbODNdCT0gImluY29taW5nIHd3cG4iLAotCVs4NF0JPSAid2thIHBvcnQgaGFuZGxlIG5vdCB2YWxpZCBjbG9zZSBwb3J0IiwKLQlbODVdCT0gIm9ubGluZSIsCi0JWzg2XQk9ICJvZmZsaW5lIiwKLQlbODddCT0gImNjdyBkZXZpY2UgZ29uZSIsCi0JWzg4XQk9ICJjY3cgZGV2aWNlIG5vIHBhdGgiLAotCVs4OV0JPSAiY2N3IGRldmljZSBvcGVyYXRpb25hbCIsCi0JWzkwXQk9ICJjY3cgZGV2aWNlIHNodXRkb3duIiwKLQlbOTFdCT0gInN5c2ZzIHBvcnQgYWRkaXRpb24iLAotCVs5Ml0JPSAic3lzZnMgcG9ydCByZW1vdmFsIiwKLQlbOTNdCT0gInN5c2ZzIGFkYXB0ZXIgcmVjb3ZlcnkiLAotCVs5NF0JPSAic3lzZnMgdW5pdCBhZGRpdGlvbiIsCi0JWzk1XQk9ICJzeXNmcyB1bml0IHJlbW92YWwiLAotCVs5Nl0JPSAic3lzZnMgcG9ydCByZWNvdmVyeSIsCi0JWzk3XQk9ICJzeXNmcyB1bml0IHJlY292ZXJ5IiwKLQlbOThdCT0gInNlcXVlbmNlIG51bWJlciBtaXNtYXRjaCIsCi0JWzk5XQk9ICJsaW5rIHVwIiwKLQlbMTAwXQk9ICJlcnJvciBzdGF0ZSIsCi0JWzEwMV0JPSAic3RhdHVzIHJlYWQgcGh5c2ljYWwgcG9ydCBjbG9zZWQiLAotCVsxMDJdCT0gImxpbmsgdXAgc3RhdHVzIHJlYWQiLAotCVsxMDNdCT0gInRvbyBtYW55IGZhaWxlZCBzdGF0dXMgcmVhZCBidWZmZXJzIiwKLQlbMTA0XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgYWJvcnQiLAotCVsxMDVdCT0gImx1biBoYW5kbGUgbm90IHZhbGlkIGFib3J0IiwKLQlbMTA2XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgY3QiLAotCVsxMDddCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBjbG9zZSBwb3J0IiwKLQlbMTA4XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgY2xvc2UgcGh5c2ljYWwgcG9ydCIsCi0JWzEwOV0JPSAicG9ydCBoYW5kbGUgbm90IHZhbGlkIG9wZW4gdW5pdCIsCi0JWzExMF0JPSAicG9ydCBoYW5kbGUgbm90IHZhbGlkIGNsb3NlIHVuaXQiLAotCVsxMTFdCT0gImx1biBoYW5kbGUgbm90IHZhbGlkIGNsb3NlIHVuaXQiLAotCVsxMTJdCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBmY3AiLAotCVsxMTNdCT0gImx1biBoYW5kbGUgbm90IHZhbGlkIGZjcCIsCi0JWzExNF0JPSAiaGFuZGxlIG1pc21hdGNoIGZjcCIsCi0JWzExNV0JPSAibHVuIG5vdCB2YWxpZCBmY3AiLAotCVsxMTZdCT0gInFkaW8gc2VuZCBmYWlsZWQiLAotCVsxMTddCT0gInZlcnNpb24gbWlzbWF0Y2giLAotCVsxMThdCT0gImluY29tcGF0aWJsZSBxdGNiIHR5cGUiLAotCVsxMTldCT0gInVua25vd24gcHJvdG9jb2wgc3RhdHVzIiwKLQlbMTIwXQk9ICJ1bmtub3duIGZzZiBjb21tYW5kIiwKLQlbMTIxXQk9ICJubyByZWNvbW1lbmRhdGlvbiBmb3Igc3RhdHVzIHF1YWxpZmllciIsCi0JWzEyMl0JPSAic3RhdHVzIHJlYWQgcGh5c2ljYWwgcG9ydCBjbG9zZWQgaW4gZXJyb3IiLAotCVsxMjNdCT0gImZjIHNlcnZpY2UgY2xhc3Mgbm90IHN1cHBvcnRlZCIsCi0JWzEyNF0JPSAiIiwKLQlbMTI1XQk9ICJuZWVkIG5ld2VyIHpmY3AiLAotCVsxMjZdCT0gIm5lZWQgbmV3ZXIgbWljcm9jb2RlIiwKLQlbMTI3XQk9ICJhcmJpdHJhdGVkIGxvb3Agbm90IHN1cHBvcnRlZCIsCi0JWzEyOF0JPSAiIiwKLQlbMTI5XQk9ICJxdGNiIHNpemUgbWlzbWF0Y2giLAotCVsxMzBdCT0gInVua25vd24gZnNmIHN0YXR1cyBlY2QiLAotCVsxMzFdCT0gImZjcCByZXF1ZXN0IHRvbyBiaWciLAotCVsxMzJdCT0gIiIsCi0JWzEzM10JPSAiZGF0YSBkaXJlY3Rpb24gbm90IHZhbGlkIGZjcCIsCi0JWzEzNF0JPSAiY29tbWFuZCBsZW5ndGggbm90IHZhbGlkIGZjcCIsCi0JWzEzNV0JPSAic3RhdHVzIHJlYWQgYWN0IHVwZGF0ZSIsCi0JWzEzNl0JPSAic3RhdHVzIHJlYWQgY2ZkYyB1cGRhdGUiLAotCVsxMzddCT0gImhiYWFwaSBwb3J0IG9wZW4iLAotCVsxMzhdCT0gImhiYWFwaSB1bml0IG9wZW4iLAotCVsxMzldCT0gImhiYWFwaSB1bml0IHNodXRkb3duIiwKLQlbMTQwXQk9ICJxZGlvIGVycm9yIG91dGJvdW5kIiwKLQlbMTQxXQk9ICJzY3NpIGhvc3QgcmVzZXQiLAotCVsxNDJdCT0gImRpc21pc3NpbmcgZnNmIHJlcXVlc3QgZm9yIHJlY292ZXJ5IGFjdGlvbiIsCi0JWzE0M10JPSAicmVjb3ZlcnkgYWN0aW9uIHRpbWVkIG91dCIsCi0JWzE0NF0JPSAicmVjb3ZlcnkgYWN0aW9uIGdvbmUiLAotCVsxNDVdCT0gInJlY292ZXJ5IGFjdGlvbiBiZWluZyBwcm9jZXNzZWQiLAotCVsxNDZdCT0gInJlY292ZXJ5IGFjdGlvbiByZWFkeSBmb3IgbmV4dCBzdGVwIiwKLQlbMTQ3XQk9ICJxZGlvIGVycm9yIGluYm91bmQiLAotCVsxNDhdICAgPSAibmFtZXNlcnZlciBuZWVkZWQgZm9yIHBvcnQgc2NhbiIsCi0JWzE0OV0gICA9ICJwb3J0IHNjYW4iLAotCVsxNTBdCT0gInB0cCBhdHRhY2giLAotCVsxNTFdICAgPSAicG9ydCB2YWxpZGF0aW9uIGZhaWxlZCIsCi19OwotCiBzdGF0aWMgaW50IHpmY3BfcmVjX2RiZl92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKIAkJCQkgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpfcmVjKQogewogCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICopX3JlYzsKIAljaGFyICpwID0gYnVmOworCWNoYXIgaGludFtaRkNQX0RCRl9JRF9TSVpFICsgMV07CiAKKwltZW1jcHkoaGludCwgci0+aWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKKwloaW50W1pGQ1BfREJGX0lEX1NJWkVdID0gMDsKIAl6ZmNwX2RiZl9vdXRzKCZwLCAidGFnIiwgemZjcF9yZWNfZGJmX3RhZ3Nbci0+aWRdKTsKLQl6ZmNwX2RiZl9vdXRzKCZwLCAiaGludCIsIHpmY3BfcmVjX2RiZl9pZHNbci0+aWQyXSk7Ci0JemZjcF9kYmZfb3V0KCZwLCAiaWQiLCAiJWQiLCByLT5pZDIpOworCXpmY3BfZGJmX291dHMoJnAsICJoaW50IiwgaGludCk7CiAJc3dpdGNoIChyLT5pZCkgewogCWNhc2UgWkZDUF9SRUNfREJGX0lEX1RIUkVBRDoKIAkJemZjcF9kYmZfb3V0KCZwLCAidG90YWwiLCAiJWQiLCByLT51LnRocmVhZC50b3RhbCk7CkBAIC03MDcsNyArNTUyLDcgQEAKICAqIEBhZGFwdGVyOiBhZGFwdGVyCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGlzIGhvbGRpbmcgZXJwX2xvY2suCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCh1OCBpZDIsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnJlY19kYmZfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtNzIzLDcgKzU2OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9USFJFQUQ7Ci0Jci0+aWQyID0gaWQyOworCW1lbWNweShyLT5pZDIsIGlkMiwgWkZDUF9EQkZfSURfU0laRSk7CiAJci0+dS50aHJlYWQudG90YWwgPSB0b3RhbDsKIAlyLT51LnRocmVhZC5yZWFkeSA9IHJlYWR5OwogCXItPnUudGhyZWFkLnJ1bm5pbmcgPSBydW5uaW5nOwpAQCAtNzM3LDcgKzU4Miw3IEBACiAgKiBAYWRhcHRlcjogYWRhcHRlcgogICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIGVycF9sb2NrLgogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayh1OCBpZDIsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayhjaGFyICppZDIsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzQ2LDcgKzU5MSw3IEBACiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldCh1OCBpZDIsIHZvaWQgKnJlZiwKK3N0YXRpYyB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoY2hhciAqaWQyLCB2b2lkICpyZWYsCiAJCQkJICAgICAgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICAgICBhdG9taWNfdCAqc3RhdHVzLCBhdG9taWNfdCAqZXJwX2NvdW50LAogCQkJCSAgICAgIHU2NCB3d3BuLCB1MzIgZF9pZCwgdTY0IGZjcF9sdW4pCkBAIC03NTcsNyArNjAyLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX1RBUkdFVDsKLQlyLT5pZDIgPSBpZDI7CisJbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKIAlyLT51LnRhcmdldC5yZWYgPSAodW5zaWduZWQgbG9uZylyZWY7CiAJci0+dS50YXJnZXQuc3RhdHVzID0gYXRvbWljX3JlYWQoc3RhdHVzKTsKIAlyLT51LnRhcmdldC53d3BuID0gd3dwbjsKQEAgLTc3NCw3ICs2MTksOCBAQAogICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKICAqIEBhZGFwdGVyOiBhZGFwdGVyCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIodTggaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoY2hhciAqaWQsIHZvaWQgKnJlZiwKKwkJCQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCXpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoaWQsIHJlZiwgYWRhcHRlciwgJmFkYXB0ZXItPnN0YXR1cywKIAkJCQkgICZhZGFwdGVyLT5lcnBfY291bnRlciwgMCwgMCwgMCk7CkBAIC03ODYsNyArNjMyLDcgQEAKICAqIEByZWY6IGFkZGl0aW9uYWwgcmVmZXJlbmNlIChlLmcuIHJlcXVlc3QpCiAgKiBAcG9ydDogcG9ydAogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KHU4IGlkLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KGNoYXIgKmlkLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CiAKQEAgLTgwMSw3ICs2NDcsNyBAQAogICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKICAqIEB1bml0OiB1bml0CiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQodTggaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gdW5pdC0+cG9ydDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKQEAgLTgyMiw3ICs2NjgsNyBAQAogICogQHBvcnQ6IHBvcnQKICAqIEB1bml0OiB1bml0CiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIodTggaWQyLCB2b2lkICpyZWYsIHU4IHdhbnQsIHU4IG5lZWQsCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKGNoYXIgKmlkMiwgdm9pZCAqcmVmLCB1OCB3YW50LCB1OCBuZWVkLAogCQkJCXZvaWQgKmFjdGlvbiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKIAkJCQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewpAQCAtODMyLDcgKzY3OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9UUklHR0VSOwotCXItPmlkMiA9IGlkMjsKKwltZW1jcHkoci0+aWQyLCBpZDIsIFpGQ1BfREJGX0lEX1NJWkUpOwogCXItPnUudHJpZ2dlci5yZWYgPSAodW5zaWduZWQgbG9uZylyZWY7CiAJci0+dS50cmlnZ2VyLndhbnQgPSB3YW50OwogCXItPnUudHJpZ2dlci5uZWVkID0gbmVlZDsKQEAgLTg1NSw3ICs3MDEsNyBAQAogICogQGlkMjogaWRlbnRpZmllcgogICogQGVycF9hY3Rpb246IGVycm9yIHJlY292ZXJ5IGFjdGlvbiBzdHJ1Y3QgcG9pbnRlcgogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24odTggaWQyLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQordm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5yZWNfZGJmX2J1ZjsKQEAgLTg2NCw3ICs3MTAsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CiAJci0+aWQgPSBaRkNQX1JFQ19EQkZfSURfQUNUSU9OOwotCXItPmlkMiA9IGlkMjsKKwltZW1jcHkoci0+aWQyLCBpZDIsIFpGQ1BfREJGX0lEX1NJWkUpOwogCXItPnUuYWN0aW9uLmFjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb247CiAJci0+dS5hY3Rpb24uc3RhdHVzID0gZXJwX2FjdGlvbi0+c3RhdHVzOwogCXItPnUuYWN0aW9uLnN0ZXAgPSBlcnBfYWN0aW9uLT5zdGVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKaW5kZXggNzQ5OThmZi4uYTU3M2Y3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiemZjcF9mc2YuaCIKIAogI2RlZmluZSBaRkNQX0RCRl9UQUdfU0laRSAgICAgIDQKKyNkZWZpbmUgWkZDUF9EQkZfSURfU0laRSAgICAgICA3CiAKIHN0cnVjdCB6ZmNwX2RiZl9kdW1wIHsKIAl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwpAQCAtNzAsNyArNzEsNyBAQAogCiBzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCB7CiAJdTggaWQ7Ci0JdTggaWQyOworCWNoYXIgaWQyWzddOwogCXVuaW9uIHsKIAkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfYWN0aW9uIGFjdGlvbjsKIAkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGhyZWFkIHRocmVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDUxMDY2MjcuLmEwMzE4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKICAqLwogCiAjaWZuZGVmIFpGQ1BfREVGX0gKQEAgLTI0Myw5ICsyNDMsNiBAQAogCiAvKiByZW1vdGUgcG9ydCBzdGF0dXMgKi8KICNkZWZpbmUgWkZDUF9TVEFUVVNfUE9SVF9QSFlTX09QRU4JCTB4MDAwMDAwMDEKLSNkZWZpbmUgWkZDUF9TVEFUVVNfUE9SVF9QSFlTX0NMT1NJTkcJCTB4MDAwMDAwMDQKLSNkZWZpbmUgWkZDUF9TVEFUVVNfUE9SVF9OT19XV1BOCQkweDAwMDAwMDA4Ci0jZGVmaW5lIFpGQ1BfU1RBVFVTX1BPUlRfSU5WQUxJRF9XV1BOCQkweDAwMDAwMDIwCiAKIC8qIHdlbGwga25vd24gYWRkcmVzcyAoV0tBKSBwb3J0IHN0YXR1cyovCiBlbnVtIHpmY3Bfd2thX3N0YXR1cyB7CkBAIC0yNTgsNyArMjU1LDYgQEAKIC8qIGxvZ2ljYWwgdW5pdCBzdGF0dXMgKi8KICNkZWZpbmUgWkZDUF9TVEFUVVNfVU5JVF9TSEFSRUQJCQkweDAwMDAwMDA0CiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfUkVBRE9OTFkJCTB4MDAwMDAwMDgKLSNkZWZpbmUgWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVECQkweDAwMDAwMDEwCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfU0NTSV9XT1JLX1BFTkRJTkcJMHgwMDAwMDAyMAogCiAvKiBGU0YgcmVxdWVzdCBzdGF0dXMgKHRoaXMgZG9lcyBub3QgaGF2ZSBhIGNvbW1vbiBwYXJ0KSAqLwpAQCAtNDQ3LDggKzQ0Myw5IEBACiAJc3BpbmxvY2tfdAkJcmVxX2xpc3RfbG9jazsJICAgLyogcmVxdWVzdCBsaXN0IGxvY2sgKi8KIAlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlcV9xOwkJICAgLyogcmVxdWVzdCBxdWV1ZSAqLwogCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7CSAgIC8qIGZvciBvcGVyYXRpb25zIG9uIHF1ZXVlICovCi0JaW50CQkJcmVxX3FfcGNpX2JhdGNoOyAgIC8qIFNCQUxzIHNpbmNlIFBDSSBpbmRpY2F0aW9uCi0JCQkJCQkgICAgICB3YXMgbGFzdCBzZXQgKi8KKwlrdGltZV90CQkJcmVxX3FfdGltZTsgLyogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlICovCisJdTY0CQkJcmVxX3FfdXRpbDsgLyogZm9yIGFjY291bnRpbmcgKi8KKwlzcGlubG9ja190CQlxZGlvX3N0YXRfbG9jazsKIAl1MzIJCQlmc2ZfcmVxX3NlcV9ubzsJICAgLyogRlNGIGNtbmQgc2VxIG51bWJlciAqLwogCXdhaXRfcXVldWVfaGVhZF90CXJlcXVlc3Rfd3E7CSAgIC8qIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yCiAJCQkJCQkgICAgICBtb3JlIGF2YWxpYWJsZSBTQkFMcyAqLwpAQCAtNTE0LDYgKzUxMSw5IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICBtYXhmcmFtZV9zaXplOwogCXUzMiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkX2NsYXNzZXM7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICBnaWRfcG5fd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgIHRlc3RfbGlua193b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgcnBvcnRfd29yazsKKwllbnVtIHsgUlBPUlRfTk9ORSwgUlBPUlRfQURELCBSUE9SVF9ERUwgfSAgcnBvcnRfdGFzazsKIH07CiAKIHN0cnVjdCB6ZmNwX3VuaXQgewpAQCAtNTg3LDkgKzU4Nyw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqIFpGQ1AgU1BFQ0lGSUMgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBaRkNQX1JFUV9BVVRPX0NMRUFOVVAJMHgwMDAwMDAwMgotI2RlZmluZSBaRkNQX1JFUV9OT19RVENCCTB4MDAwMDAwMDgKLQogI2RlZmluZSBaRkNQX1NFVCAgICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIFpGQ1BfQ0xFQVIgICAgICAgICAgICAgIDB4MDAwMDAyMDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggMzg3YTNhZi4uNjMxYmRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEVycm9yIFJlY292ZXJ5IFByb2NlZHVyZXMgKEVSUCkuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtNTUsNyArNTUsNyBAQAogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2Jsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtYXNrKQogewotCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAxNSwgTlVMTCwKKwl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImVyYWJsazEiLCBOVUxMLAogCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEIHwgbWFzaywKIAkJCQkgICAgICAgWkZDUF9DTEVBUik7CiB9CkBAIC03NSw5ICs3NSw5IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKIAogCWxpc3RfbW92ZSgmYWN0LT5saXN0LCAmYWN0LT5hZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigxNDYsIGFjdCk7CisJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJhcmR5MSIsIGFjdCk7CiAJdXAoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoMiwgYWRhcHRlcik7CisJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCgiZXJhcmR5MiIsIGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzcyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogc3RhdGljIGludCB6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShpbnQgd2FudCwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LAotCQkJCSAgIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCisJCQkJICAgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAlpbnQgcmV0dmFsID0gMSwgbmVlZDsKIAlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QgPSBOVUxMOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJKythZGFwdGVyLT5lcnBfdG90YWxfY291bnQ7CiAJbGlzdF9hZGRfdGFpbCgmYWN0LT5saXN0LCAmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpOwogCXVwKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKDEsIGFkYXB0ZXIpOworCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoImVyYWN0ZTEiLCBhZGFwdGVyKTsKIAlyZXR2YWwgPSAwOwogIG91dDoKIAl6ZmNwX3JlY19kYmZfZXZlbnRfdHJpZ2dlcihpZCwgcmVmLCB3YW50LCBuZWVkLCBhY3QsCkBAIC0yMzcsMTMgKzIzNywxNCBAQAogfQogCiBzdGF0aWMgaW50IF96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICBpbnQgY2xlYXJfbWFzaywgdTggaWQsIHZvaWQgKnJlZikKKwkJCQkgICAgaW50IGNsZWFyX21hc2ssIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfYWRhcHRlcl9ibG9jayhhZGFwdGVyLCBjbGVhcl9tYXNrKTsKKwl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRzX2Jsb2NrKGFkYXB0ZXIpOwogCiAJLyogZW5zdXJlIHByb3BhZ2F0aW9uIG9mIGZhaWxlZCBzdGF0dXMgdG8gbmV3IGRldmljZXMgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgewotCQl6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChhZGFwdGVyLCAxMywgTlVMTCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKGFkYXB0ZXIsICJlcmFyZW8xIiwgTlVMTCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gemZjcF9lcnBfYWN0aW9uX2VucXVldWUoWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSLApAQCAtMjU4LDcgKzI1OSw3IEBACiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgogICovCiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhciwKLQkJCSAgICAgdTggaWQsIHZvaWQgKnJlZikKKwkJCSAgICAgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNzcsNyArMjc4LDcgQEAKICAqIEByZWY6IFJlZmVyZW5jZSBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKi8KIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXIsCi0JCQkgICAgICAgdTggaWQsIHZvaWQgKnJlZikKKwkJCSAgICAgICBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCWludCBmbGFncyA9IFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HIHwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQ7CiAJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgY2xlYXIgfCBmbGFncywgaWQsIHJlZik7CkBAIC0yOTAsNyArMjkxLDggQEAKICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgogICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwotdm9pZCB6ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgdTggaWQsIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfcG9ydF9zaHV0ZG93bihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIGNoYXIgKmlkLAorCQkJICAgIHZvaWQgKnJlZikKIHsKIAlpbnQgZmxhZ3MgPSBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORyB8IFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEOwogCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIGNsZWFyIHwgZmxhZ3MsIGlkLCByZWYpOwpAQCAtMzAzLDcgKzMwNSw4IEBACiAgKiBAaWQ6IElkIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqIEByZWY6IFJlZmVyZW5jZSBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKi8KLXZvaWQgemZjcF9lcnBfdW5pdF9zaHV0ZG93bihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBpbnQgY2xlYXIsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3VuaXRfc2h1dGRvd24oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyLCBjaGFyICppZCwKKwkJCSAgICB2b2lkICpyZWYpCiB7CiAJaW50IGZsYWdzID0gWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcgfCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRDsKIAl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCBjbGVhciB8IGZsYWdzLCBpZCwgcmVmKTsKQEAgLTMxMSwxNSArMzE0LDE2IEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyKQogewotCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCAxNywgTlVMTCwKKwl6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMocG9ydCwgImVycGJsazEiLCBOVUxMLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEIHwgY2xlYXIsCiAJCQkJICAgIFpGQ1BfQ0xFQVIpOwogfQogCiBzdGF0aWMgdm9pZCBfemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCi0JCQkJCSBpbnQgY2xlYXIsIHU4IGlkLCB2b2lkICpyZWYpCisJCQkJCSBpbnQgY2xlYXIsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfcG9ydF9ibG9jayhwb3J0LCBjbGVhcik7CisJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHBvcnQpOwogCiAJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpCiAJCXJldHVybjsKQEAgLTMzNCw3ICszMzgsNyBAQAogICogQGlkOiBJZCBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgogICovCi12b2lkIHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIHU4IGlkLAordm9pZCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCwKIAkJCQkgdm9pZCAqcmVmKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNDcsMTQgKzM1MSwxNSBAQAogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IF96ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIHU4IGlkLAorc3RhdGljIGludCBfemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCwKIAkJCQkgdm9pZCAqcmVmKQogewogCXpmY3BfZXJwX3BvcnRfYmxvY2socG9ydCwgY2xlYXIpOworCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9ibG9jayhwb3J0KTsKIAogCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSB7CiAJCS8qIGVuc3VyZSBwcm9wYWdhdGlvbiBvZiBmYWlsZWQgc3RhdHVzIHRvIG5ldyBkZXZpY2VzICovCi0JCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDE0LCBOVUxMKTsKKwkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgImVycHJlbzEiLCBOVUxMKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0zNjksNyArMzc0LDcgQEAKICAqCiAgKiBSZXR1cm5zIDAgaWYgcmVjb3ZlcnkgaGFzIGJlZW4gdHJpZ2dlcmVkLCA8IDAgaWYgbm90LgogICovCi1pbnQgemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCB1OCBpZCwgdm9pZCAqcmVmKQoraW50IHpmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXR2YWw7CkBAIC0zODYsMTIgKzM5MSwxMiBAQAogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF91bml0X2Jsb2NrKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhcl9tYXNrKQogewotCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCAxOSwgTlVMTCwKKwl6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXModW5pdCwgImVydWJsazEiLCBOVUxMLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEIHwgY2xlYXJfbWFzaywKIAkJCQkgICAgWkZDUF9DTEVBUik7CiB9CiAKLXN0YXRpYyB2b2lkIF96ZmNwX2VycF91bml0X3Jlb3BlbihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBpbnQgY2xlYXIsIHU4IGlkLAorc3RhdGljIHZvaWQgX3pmY3BfZXJwX3VuaXRfcmVvcGVuKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhciwgY2hhciAqaWQsCiAJCQkJICB2b2lkICpyZWYpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CkBAIC00MTEsNyArNDE2LDggQEAKICAqIEBjbGVhcl9tYXNrOiBzcGVjaWZpZXMgZmxhZ3MgaW4gdW5pdCBzdGF0dXMgdG8gYmUgY2xlYXJlZAogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvcgogICovCi12b2lkIHpmY3BfZXJwX3VuaXRfcmVvcGVuKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhciwgdTggaWQsIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfdW5pdF9yZW9wZW4oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyLCBjaGFyICppZCwKKwkJCSAgdm9pZCAqcmVmKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IHVuaXQtPnBvcnQ7CkBAIC00MzcsMjggKzQ0MywyOCBAQAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWRhcHRlcl91bmJsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZhZGFwdGVyLT5zdGF0dXMpKQotCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcigxNiwgTlVMTCwgYWRhcHRlcik7CisJCXpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKCJlcmF1YmwxIiwgTlVMTCwgYWRhcHRlcik7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZhZGFwdGVyLT5zdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9wb3J0X3VuYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKIAlpZiAoc3RhdHVzX2NoYW5nZV9zZXQoWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJnBvcnQtPnN0YXR1cykpCi0JCXpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KDE4LCBOVUxMLCBwb3J0KTsKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoImVycHVibDEiLCBOVUxMLCBwb3J0KTsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJnBvcnQtPnN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3VuaXRfdW5ibG9jayhzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewogCWlmIChzdGF0dXNfY2hhbmdlX3NldChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmdW5pdC0+c3RhdHVzKSkKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoMjAsIE5VTEwsIHVuaXQpOworCQl6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdCgiZXJ1dWJsMSIsIE5VTEwsIHVuaXQpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmdW5pdC0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX3RvX3J1bm5pbmcoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlsaXN0X21vdmUoJmVycF9hY3Rpb24tPmxpc3QsICZlcnBfYWN0aW9uLT5hZGFwdGVyLT5lcnBfcnVubmluZ19oZWFkKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKDE0NSwgZXJwX2FjdGlvbik7CisJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJhdG9yMSIsIGVycF9hY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19mc2ZyZXEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQpAQCAtNDc0LDExICs0ODAsMTEgQEAKIAkJaWYgKGFjdC0+c3RhdHVzICYgKFpGQ1BfU1RBVFVTX0VSUF9ESVNNSVNTRUQgfAogCQkJCSAgIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkpIHsKIAkJCWFjdC0+ZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7Ci0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKDE0MiwgYWN0KTsKKwkJCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oImVyc2NmXzEiLCBhY3QpOwogCQkJYWN0LT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gTlVMTDsKIAkJfQogCQlpZiAoYWN0LT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpCi0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKDE0MywgYWN0KTsKKwkJCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oImVyc2NmXzIiLCBhY3QpOwogCQlpZiAoYWN0LT5mc2ZfcmVxLT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCB8CiAJCQkJCSAgICBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKSkKIAkJCWFjdC0+ZnNmX3JlcSA9IE5VTEw7CkBAIC01MzAsNyArNTM2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgX3pmY3BfZXJwX3BvcnRfcmVvcGVuX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgIGludCBjbGVhciwgdTggaWQsIHZvaWQgKnJlZikKKwkJCQkgICAgICBpbnQgY2xlYXIsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIApAQCAtNTM4LDggKzU0NCw4IEBACiAJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBjbGVhciwgaWQsIHJlZik7CiB9CiAKLXN0YXRpYyB2b2lkIF96ZmNwX2VycF91bml0X3Jlb3Blbl9hbGwoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCB1OCBpZCwKLQkJCQkgICAgICB2b2lkICpyZWYpCitzdGF0aWMgdm9pZCBfemZjcF9lcnBfdW5pdF9yZW9wZW5fYWxsKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwKKwkJCQkgICAgICBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAKQEAgLTU1OSwyOCArNTY1LDI4IEBACiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fQURBUFRFUjoKIAkJaWYgKHN0YXR1cyA9PSBaRkNQX0VSUF9TVUNDRUVERUQpCi0JCQlfemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsKGFkYXB0ZXIsIDAsIDcwLCBOVUxMKTsKKwkJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGwoYWRhcHRlciwgMCwgImVyc2ZhXzEiLCBOVUxMKTsKIAkJZWxzZQotCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDcxLCBOVUxMKTsKKwkJCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZXJzZmFfMiIsIE5VTEwpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKIAkJaWYgKHN0YXR1cyA9PSBaRkNQX0VSUF9TVUNDRUVERUQpCi0JCQlfemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgNzIsIE5VTEwpOworCQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJlcnNmYV8zIiwgTlVMTCk7CiAJCWVsc2UKLQkJCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCA3MywgTlVMTCk7CisJCQlfemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImVyc2ZhXzQiLCBOVUxMKTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAkJaWYgKHN0YXR1cyA9PSBaRkNQX0VSUF9TVUNDRUVERUQpCi0JCQlfemZjcF9lcnBfdW5pdF9yZW9wZW5fYWxsKHBvcnQsIDAsIDc0LCBOVUxMKTsKKwkJCV96ZmNwX2VycF91bml0X3Jlb3Blbl9hbGwocG9ydCwgMCwgImVyc2ZhXzUiLCBOVUxMKTsKIAkJZWxzZQotCQkJX3pmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCA3NSwgTlVMTCk7CisJCQlfemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsICJlcnNmYV82IiwgTlVMTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6CiAJCWlmIChzdGF0dXMgIT0gWkZDUF9FUlBfU1VDQ0VFREVEKQotCQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsIDc2LCBOVUxMKTsKKwkJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwLCAiZXJzZmFfNyIsIE5VTEwpOwogCQlicmVhazsKIAl9CiB9CkBAIC02MTcsNyArNjIzLDcgQEAKIAkJCQkgYWRhcHRlci0+cGVlcl9kX2lkKTsKIAlpZiAoSVNfRVJSKHBvcnQpKSAvKiBlcnJvciBvciBwb3J0IGFscmVhZHkgYXR0YWNoZWQgKi8KIAkJcmV0dXJuOwotCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAxNTAsIE5VTEwpOworCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZXJlcHRwMSIsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRfZnNmX3hjb25mKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCkBAIC02NDAsOSArNjQ2LDkgQEAKIAkJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAJCX0KIAotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soNiwgYWRhcHRlcik7CisJCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc2Z4MSIsIGFkYXB0ZXIpOwogCQlkb3duKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKDcsIGFkYXB0ZXIpOworCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVyYXNmeDIiLCBhZGFwdGVyKTsKIAkJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJCWJyZWFrOwogCkBAIC02ODEsOSArNjg3LDkgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCi0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKDgsIGFkYXB0ZXIpOworCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc294MSIsIGFkYXB0ZXIpOwogCWRvd24oJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayg5LCBhZGFwdGVyKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVyYXNveDIiLCBhZGFwdGVyKTsKIAlpZiAoYWN0LT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpCiAJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAKQEAgLTcwNSw2MCArNzExLDU5IEBACiAJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKIH0KIAotc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X2dlbmVyaWMoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0LAotCQkJCQkgICAgIGludCBjbG9zZSkKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfY2xvc2Uoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewotCWludCByZXR2YWwgPSBaRkNQX0VSUF9TVUNDRUVERUQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKIAotCWlmIChjbG9zZSkKLQkJZ290byBjbG9zZV9vbmx5OwotCi0JcmV0dmFsID0gemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX3FkaW8oYWN0KTsKLQlpZiAocmV0dmFsICE9IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJZ290byBmYWlsZWRfcWRpbzsKLQotCXJldHZhbCA9IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2YoYWN0KTsKLQlpZiAocmV0dmFsICE9IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJZ290byBmYWlsZWRfb3BlbmZjcDsKLQotCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fT1BFTiwgJmFjdC0+YWRhcHRlci0+c3RhdHVzKTsKLQotCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7Ci0KLSBjbG9zZV9vbmx5OgotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLAotCQkJICAmYWN0LT5hZGFwdGVyLT5zdGF0dXMpOwotCi0gZmFpbGVkX29wZW5mY3A6CiAJLyogY2xvc2UgcXVldWVzIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlcnMgYXJlIG5vdCBhY2Nlc3NlZCBieSBhZGFwdGVyICovCiAJemZjcF9xZGlvX2Nsb3NlKGFkYXB0ZXIpOwogCXpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbChhZGFwdGVyKTsKIAlhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubyA9IDA7CiAJLyogYWxsIHBvcnRzIGFuZCB1bml0cyBhcmUgY2xvc2VkICovCi0JemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIDI0LCBOVUxMLAorCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAiZXJhc2NsMSIsIE5VTEwsCiAJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLCBaRkNQX0NMRUFSKTsKLSBmYWlsZWRfcWRpbzoKKwogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWENPTkZJR19PSyB8Ci0JCQkgIFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCi0JCQkgICZhY3QtPmFkYXB0ZXItPnN0YXR1cyk7Ci0JcmV0dXJuIHJldHZhbDsKKwkJCSAgWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwgJmFkYXB0ZXItPnN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOworCisJaWYgKHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9xZGlvKGFjdCkpIHsKKwkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LIHwKKwkJCQkgIFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsCisJCQkJICAmYWRhcHRlci0+c3RhdHVzKTsKKwkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKKwl9CisKKwlpZiAoemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihhY3QpKSB7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfY2xvc2UoYWN0KTsKKwkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKKwl9CisKKwlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4sICZhZGFwdGVyLT5zdGF0dXMpOworCisJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKIH0KIAogc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKIHsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CiAKLQl6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X2dlbmVyaWMoYWN0LCAxKTsgLyogY2xvc2UgKi8KLQlpZiAoYWN0LT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfQ0xPU0VfT05MWSkKLQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CisJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pIHsKKwkJemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZShhY3QpOworCQlpZiAoYWN0LT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfQ0xPU0VfT05MWSkKKwkJCXJldHVybiBaRkNQX0VSUF9FWElUOworCX0KIAotCXJldHZhbCA9IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfZ2VuZXJpYyhhY3QsIDApOyAvKiBvcGVuICovCi0KLQlpZiAocmV0dmFsID09IFpGQ1BfRVJQX0ZBSUxFRCkKKwlpZiAoemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuKGFjdCkpIHsKIAkJc3NsZWVwKDgpOworCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOworCX0KIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKIH0KIAogc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9zdHJhdGVneV9jbG9zZShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCkBAIC03NzcsMTAgKzc4Miw3IEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEIHwKLQkJCSAgWkZDUF9TVEFUVVNfUE9SVF9QSFlTX0NMT1NJTkcgfAotCQkJICBaRkNQX1NUQVRVU19QT1JUX0lOVkFMSURfV1dQTiwKLQkJCSAgJnBvcnQtPnN0YXR1cyk7CisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQsICZwb3J0LT5zdGF0dXMpOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3N0cmF0ZWd5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCkBAIC04MzYsNyArODM4LDcgQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gYWN0LT5wb3J0OwogCiAJaWYgKHBvcnQtPnd3cG4gIT0gYWRhcHRlci0+cGVlcl93d3BuKSB7Ci0JCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDI1LCBOVUxMKTsKKwkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgImVyb3B0cDEiLCBOVUxMKTsKIAkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAl9CiAJcG9ydC0+ZF9pZCA9IGFkYXB0ZXItPnBlZXJfZF9pZDsKQEAgLTg1NSw3ICs4NTcsNyBAQAogCXBvcnQtPmVycF9hY3Rpb24uc3RlcCA9IFpGQ1BfRVJQX1NURVBfTkFNRVNFUlZFUl9MT09LVVA7CiAJaWYgKHJldHZhbCkKIAkJemZjcF9lcnBfbm90aWZ5KCZwb3J0LT5lcnBfYWN0aW9uLCBaRkNQX0VSUF9GQUlMRUQpOwotCisJemZjcF9wb3J0X3B1dChwb3J0KTsKIH0KIAogc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fY29tbW9uKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKQEAgLTg3MSwxNyArODczLDE1IEBACiAJCWlmIChmY19ob3N0X3BvcnRfdHlwZShhZGFwdGVyLT5zY3NpX2hvc3QpID09IEZDX1BPUlRUWVBFX1BUUCkKIAkJCXJldHVybiB6ZmNwX2VycF9vcGVuX3B0cF9wb3J0KGFjdCk7CiAJCWlmICghcG9ydC0+ZF9pZCkgewotCQkJcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnBvcnQtPmdpZF9wbl93b3JrKTsKKwkJCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJCQlpZiAoIXF1ZXVlX3dvcmsoemZjcF9kYXRhLndvcmtfcXVldWUsCisJCQkJCSZwb3J0LT5naWRfcG5fd29yaykpCisJCQkJemZjcF9wb3J0X3B1dChwb3J0KTsKIAkJCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CiAJCX0KIAljYXNlIFpGQ1BfRVJQX1NURVBfTkFNRVNFUlZFUl9MT09LVVA6Ci0JCWlmICghcG9ydC0+ZF9pZCkgewotCQkJaWYgKHBfc3RhdHVzICYgKFpGQ1BfU1RBVFVTX1BPUlRfSU5WQUxJRF9XV1BOKSkgewotCQkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDI2LCBOVUxMKTsKLQkJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKLQkJCX0KKwkJaWYgKCFwb3J0LT5kX2lkKQogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKLQkJfQogCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX3BvcnQoYWN0KTsKIAogCWNhc2UgWkZDUF9FUlBfU1RFUF9QT1JUX09QRU5JTkc6CkBAIC05OTUsNyArOTk1LDcgQEAKIAkJCQkicG9ydCAweCUwMTZMeFxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl1bml0LT5wb3J0LT53d3BuKTsKLQkJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsIDIxLCBOVUxMKTsKKwkJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsICJlcnVzY2sxIiwgTlVMTCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAkJCWRldl9lcnIoJnBvcnQtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCQkiRVJQIGZhaWxlZCBmb3IgcmVtb3RlIHBvcnQgMHglMDE2THhcbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT53d3BuKTsKLQkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDIyLCBOVUxMKTsKKwkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsICJlcnBzY2sxIiwgTlVMTCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAkJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCQkiRVJQIGNhbm5vdCByZWNvdmVyIGFuIGVycm9yICIKIAkJCQkib24gdGhlIEZDUCBkZXZpY2VcbiIpOwotCQkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlciwgMjMsIE5VTEwpOworCQkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlciwgImVyYXNjazEiLCBOVUxMKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCQlpZiAoemZjcF9lcnBfc3RyYXRfY2hhbmdlX2RldCgmYWRhcHRlci0+c3RhdHVzLCBlcnBfc3RhdHVzKSkgewogCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCQkgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJCQkgNjcsIE5VTEwpOworCQkJCQkJICJlcnNzY2cxIiwgTlVMTCk7CiAJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJfQogCQlicmVhazsKQEAgLTExMjcsNyArMTEyNyw3IEBACiAJCWlmICh6ZmNwX2VycF9zdHJhdF9jaGFuZ2VfZGV0KCZwb3J0LT5zdGF0dXMsIGVycF9zdGF0dXMpKSB7CiAJCQlfemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwKIAkJCQkJICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJCSAgICAgIDY4LCBOVUxMKTsKKwkJCQkJICAgICAgImVyc3NjZzIiLCBOVUxMKTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCWJyZWFrOwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAkJaWYgKHpmY3BfZXJwX3N0cmF0X2NoYW5nZV9kZXQoJnVuaXQtPnN0YXR1cywgZXJwX3N0YXR1cykpIHsKIAkJCV96ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LAogCQkJCQkgICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJICAgICAgNjksIE5VTEwpOworCQkJCQkgICAgICAiZXJzc2NnMyIsIE5VTEwpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMTU1LDcgKzExNTUsNyBAQAogCX0KIAogCWxpc3RfZGVsKCZlcnBfYWN0aW9uLT5saXN0KTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKDE0NCwgZXJwX2FjdGlvbik7CisJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJhY3RkMSIsIGVycF9hY3Rpb24pOwogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKQEAgLTEyMTQsMzggKzEyMTQsOCBAQAogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19VTklUX1NDU0lfV09SS19QRU5ESU5HLCAmdW5pdC0+c3RhdHVzKTsKIAlJTklUX1dPUksoJnAtPndvcmssIHpmY3BfZXJwX3Njc2lfc2Nhbik7CiAJcC0+dW5pdCA9IHVuaXQ7Ci0JcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnAtPndvcmspOwotfQotCi1zdGF0aWMgdm9pZCB6ZmNwX2VycF9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7Ci0JaWRzLm5vZGVfbmFtZSA9IHBvcnQtPnd3bm47Ci0JaWRzLnBvcnRfbmFtZSA9IHBvcnQtPnd3cG47Ci0JaWRzLnBvcnRfaWQgPSBwb3J0LT5kX2lkOwotCWlkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKLQlwb3J0LT5ycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZChwb3J0LT5hZGFwdGVyLT5zY3NpX2hvc3QsIDAsICZpZHMpOwotCWlmICghcG9ydC0+cnBvcnQpIHsKLQkJZGV2X2VycigmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAotCQkJIlJlZ2lzdGVyaW5nIHBvcnQgMHglMDE2THggZmFpbGVkXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT53d3BuKTsKLQkJcmV0dXJuOwotCX0KLQotCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnBvcnQtPnJwb3J0LT5kZXYpOwotCXBvcnQtPnJwb3J0LT5tYXhmcmFtZV9zaXplID0gcG9ydC0+bWF4ZnJhbWVfc2l6ZTsKLQlwb3J0LT5ycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlczsKLX0KLQotc3RhdGljIHZvaWQgemZjcF9lcnBfcnBvcnRzX2RlbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpIHsKLQkJaWYgKCFwb3J0LT5ycG9ydCkKLQkJCWNvbnRpbnVlOwotCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocG9ydC0+cnBvcnQpOwotCQlwb3J0LT5ycG9ydCA9IE5VTEw7Ci0JfQorCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnAtPndvcmspKQorCQl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fY2xlYW51cChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QsIGludCByZXN1bHQpCkBAIC0xMjU2LDEwICsxMjI2LDggQEAKIAogCXN3aXRjaCAoYWN0LT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKLQkJaWYgKChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKSAmJgotCQkgICAgIXVuaXQtPmRldmljZSAmJiBwb3J0LT5ycG9ydCkgewotCQkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfUkVHSVNURVJFRCwKLQkJCQkJJnVuaXQtPnN0YXR1cyk7CisJCWZsdXNoX3dvcmsoJnBvcnQtPnJwb3J0X3dvcmspOworCQlpZiAoKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpICYmICF1bml0LT5kZXZpY2UpIHsKIAkJCWlmICghKGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpICYKIAkJCSAgICAgIFpGQ1BfU1RBVFVTX1VOSVRfU0NTSV9XT1JLX1BFTkRJTkcpKQogCQkJCXpmY3BfZXJwX3NjaGVkdWxlX3dvcmsodW5pdCk7CkBAIC0xMjY5LDI3ICsxMjM3LDE3IEBACiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6Ci0JCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX1BPUlRfTk9fV1dQTikgewotCQkJemZjcF9wb3J0X3B1dChwb3J0KTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpICYmICFwb3J0LT5ycG9ydCkKLQkJCXpmY3BfZXJwX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwotCQlpZiAoKHJlc3VsdCAhPSBaRkNQX0VSUF9TVUNDRUVERUQpICYmIHBvcnQtPnJwb3J0KSB7Ci0JCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocG9ydC0+cnBvcnQpOwotCQkJcG9ydC0+cnBvcnQgPSBOVUxMOwotCQl9CisJCWlmIChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKQorCQkJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwogCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgotCQlpZiAocmVzdWx0ICE9IFpGQ1BfRVJQX1NVQ0NFRURFRCkgewotCQkJdW5yZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKCZhZGFwdGVyLT5zZXJ2aWNlX2xldmVsKTsKLQkJCXpmY3BfZXJwX3Jwb3J0c19kZWwoYWRhcHRlcik7Ci0JCX0gZWxzZSB7CisJCWlmIChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKSB7CiAJCQlyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKCZhZGFwdGVyLT5zZXJ2aWNlX2xldmVsKTsKIAkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7Ci0JCX0KKwkJfSBlbHNlCisJCQl1bnJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJmFkYXB0ZXItPnNlcnZpY2VfbGV2ZWwpOwogCQl6ZmNwX2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCQlicmVhazsKIAl9CkBAIC0xMzQ2LDcgKzEzMDQsNyBAQAogCQkJZXJwX2FjdGlvbi0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0VSUF9MT1dNRU07CiAJCX0KIAkJaWYgKGFkYXB0ZXItPmVycF90b3RhbF9jb3VudCA9PSBhZGFwdGVyLT5lcnBfbG93X21lbV9jb3VudCkKLQkJCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCA2NiwgTlVMTCk7CisJCQlfemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImVyc3RneTEiLCBOVUxMKTsKIAkJZWxzZSB7CiAJCQl6ZmNwX2VycF9zdHJhdGVneV9tZW13YWl0KGVycF9hY3Rpb24pOwogCQkJcmV0dmFsID0gWkZDUF9FUlBfQ09OVElOVUVTOwpAQCAtMTQwNiw5ICsxMzY0LDkgQEAKIAkJCQl6ZmNwX2VycF93YWtldXAoYWRhcHRlcik7CiAJCX0KIAotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soNCwgYWRhcHRlcik7CisJCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJ0aHJkMSIsIGFkYXB0ZXIpOwogCQlpZ25vcmUgPSBkb3duX2ludGVycnVwdGlibGUoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soNSwgYWRhcHRlcik7CisJCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJ0aHJkMiIsIGFkYXB0ZXIpOwogCX0KIAogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7CkBAIC0xNDUzLDcgKzE0MTEsNyBAQAogewogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfS0lMTCwgJmFkYXB0ZXItPnN0YXR1cyk7CiAJdXAoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygzLCBhZGFwdGVyKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVydGhyazEiLCBhZGFwdGVyKTsKIAogCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3RocmVhZF93cWgsCiAJCSAgICEoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJgpAQCAtMTQ2OSw3ICsxNDI3LDcgQEAKICAqIEBpZDogRXZlbnQgaWQgZm9yIGRlYnVnIHRyYWNlLgogICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZS4KICAqLwotdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCBpZCwgcmVmLAogCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgWkZDUF9TRVQpOwpAQCAtMTQ4MSw3ICsxNDM5LDcgQEAKICAqIEBpZDogRXZlbnQgaWQgZm9yIGRlYnVnIHRyYWNlLgogICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZS4KICAqLwotdm9pZCB6ZmNwX2VycF9wb3J0X2ZhaWxlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9wb3J0X2ZhaWxlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCBpZCwgcmVmLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgWkZDUF9TRVQpOwpAQCAtMTQ5Myw3ICsxNDUxLDcgQEAKICAqIEBpZDogRXZlbnQgaWQgZm9yIGRlYnVnIHRyYWNlLgogICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZS4KICAqLwotdm9pZCB6ZmNwX2VycF91bml0X2ZhaWxlZChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF91bml0X2ZhaWxlZChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCBpZCwgcmVmLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgWkZDUF9TRVQpOwpAQCAtMTUyMCw3ICsxNDc4LDcgQEAKICAqCiAgKiBDaGFuZ2VzIGluIGNvbW1vbiBzdGF0dXMgYml0cyBhcmUgcHJvcGFnYXRlZCB0byBhdHRhY2hlZCBwb3J0cyBhbmQgdW5pdHMuCiAgKi8KLXZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGlkLAordm9pZCB6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqaWQsCiAJCQkJICAgIHZvaWQgKnJlZiwgdTMyIG1hc2ssIGludCBzZXRfb3JfY2xlYXIpCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKQEAgLTE1NTQsNyArMTUxMiw3IEBACiAgKgogICogQ2hhbmdlcyBpbiBjb21tb24gc3RhdHVzIGJpdHMgYXJlIHByb3BhZ2F0ZWQgdG8gYXR0YWNoZWQgdW5pdHMuCiAgKi8KLXZvaWQgemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHU4IGlkLCB2b2lkICpyZWYsCit2b2lkIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBjaGFyICppZCwgdm9pZCAqcmVmLAogCQkJCSB1MzIgbWFzaywgaW50IHNldF9vcl9jbGVhcikKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwpAQCAtMTU4Niw3ICsxNTQ0LDcgQEAKICAqIEBtYXNrOiBzdGF0dXMgYml0cyB0byBjaGFuZ2UKICAqIEBzZXRfb3JfY2xlYXI6IFpGQ1BfU0VUIG9yIFpGQ1BfQ0xFQVIKICAqLwotdm9pZCB6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggaWQsIHZvaWQgKnJlZiwKK3ZvaWQgemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGNoYXIgKmlkLCB2b2lkICpyZWYsCiAJCQkJIHUzMiBtYXNrLCBpbnQgc2V0X29yX2NsZWFyKQogewogCWlmIChzZXRfb3JfY2xlYXIgPT0gWkZDUF9TRVQpIHsKQEAgLTE2MDksNyArMTU2Nyw3IEBACiAgKiBAaWQ6IFRoZSBkZWJ1ZyB0cmFjZSBpZC4KICAqIEBpZDogUmVmZXJlbmNlIGZvciB0aGUgZGVidWcgdHJhY2UuCiAgKi8KLXZvaWQgemZjcF9lcnBfcG9ydF9ib3hlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9wb3J0X2JveGVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTYyNiw3ICsxNTg0LDcgQEAKICAqIEBpZDogVGhlIGRlYnVnIHRyYWNlIGlkLgogICogQGlkOiBSZWZlcmVuY2UgZm9yIHRoZSBkZWJ1ZyB0cmFjZS4KICAqLwotdm9pZCB6ZmNwX2VycF91bml0X2JveGVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3VuaXRfYm94ZWQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXModW5pdCwgaWQsIHJlZiwKIAkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwgWkZDUF9TRVQpOwpAQCAtMTY0Miw3ICsxNjAwLDcgQEAKICAqIFNpbmNlIHRoZSBhZGFwdGVyIGhhcyBkZW5pZWQgYWNjZXNzLCBzdG9wIHVzaW5nIHRoZSBwb3J0IGFuZCB0aGUKICAqIGF0dGFjaGVkIHVuaXRzLgogICovCi12b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNjYxLDE0ICsxNjE5LDE0IEBACiAgKgogICogU2luY2UgdGhlIGFkYXB0ZXIgaGFzIGRlbmllZCBhY2Nlc3MsIHN0b3AgdXNpbmcgdGhlIHVuaXQuCiAgKi8KLXZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCBpZCwgcmVmLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCB8CiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVELCBaRkNQX1NFVCk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggaWQsCitzdGF0aWMgdm9pZCB6ZmNwX2VycF91bml0X2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGNoYXIgKmlkLAogCQkJCQkgdm9pZCAqcmVmKQogewogCWludCBzdGF0dXMgPSBhdG9taWNfcmVhZCgmdW5pdC0+c3RhdHVzKTsKQEAgLTE2NzksNyArMTYzNyw3IEBACiAJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsIGlkLCByZWYpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHU4IGlkLAorc3RhdGljIHZvaWQgemZjcF9lcnBfcG9ydF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBjaGFyICppZCwKIAkJCQkJIHZvaWQgKnJlZikKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwpAQCAtMTcwMSw3ICsxNjU5LDcgQEAKICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlCiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlCiAgKi8KLXZvaWQgemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1OCBpZCwKK3ZvaWQgemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBjaGFyICppZCwKIAkJCQkgICAgIHZvaWQgKnJlZikKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggYjVhZGVkYS4uZjYzOTljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEV4dGVybmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNpZm5kZWYgWkZDUF9FWFRfSApAQCAtMzUsMTUgKzM1LDE1IEBACiAvKiB6ZmNwX2RiZi5jICovCiBleHRlcm4gaW50IHpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQodTgsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2sodTgsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcih1OCwgdm9pZCAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQodTgsIHZvaWQgKiwgc3RydWN0IHpmY3BfcG9ydCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF91bml0KHU4LCB2b2lkICosIHN0cnVjdCB6ZmNwX3VuaXQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdHJpZ2dlcih1OCwgdm9pZCAqLCB1OCwgdTgsIHZvaWQgKiwKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoY2hhciAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoY2hhciAqLCB2b2lkICosIHN0cnVjdCB6ZmNwX3BvcnQgKik7CitleHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdChjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfdW5pdCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKGNoYXIgKiwgdm9pZCAqLCB1OCwgdTgsIHZvaWQgKiwKIAkJCQkgICAgICAgc3RydWN0IHpmY3BfYWRhcHRlciAqLAogCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCB6ZmNwX3VuaXQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKHU4LCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOworZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbihjaGFyICosIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBleHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAogCQkJCQkgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKik7CkBAIC02NiwzMSArNjYsMzQgQEAKIAkJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKIC8qIHpmY3BfZXJwLmMgKi8KLWV4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHU4LCB2b2lkICosCi0JCQkJCSAgIHUzMiwgaW50KTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQsIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoc3RydWN0IHpmY3BfYWRhcHRlciAqLCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhzdHJ1Y3QgemZjcF9wb3J0ICosIHU4LCB2b2lkICosIHUzMiwKK2V4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGNoYXIgKiwKKwkJCQkJICAgdm9pZCAqLCB1MzIsIGludCk7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgY2hhciAqLAorCQkJCSAgICAgIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhzdHJ1Y3QgemZjcF9wb3J0ICosIGNoYXIgKiwgdm9pZCAqLCB1MzIsCiAJCQkJCWludCk7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2ZhaWxlZChzdHJ1Y3QgemZjcF9wb3J0ICosIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsIHZvaWQgKiwgdTMyLAorZXh0ZXJuIGludCAgemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfc2h1dGRvd24oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgY2hhciAqLAorCQkJCQl2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9mYWlsZWQoc3RydWN0IHpmY3BfcG9ydCAqLCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqLCBjaGFyICosIHZvaWQgKiwgdTMyLAogCQkJCQlpbnQpOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9yZW9wZW4oc3RydWN0IHpmY3BfdW5pdCAqLCBpbnQsIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9zaHV0ZG93bihzdHJ1Y3QgemZjcF91bml0ICosIGludCwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X2ZhaWxlZChzdHJ1Y3QgemZjcF91bml0ICosIHU4LCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9yZW9wZW4oc3RydWN0IHpmY3BfdW5pdCAqLCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfc2h1dGRvd24oc3RydWN0IHpmY3BfdW5pdCAqLCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKiwgY2hhciAqLCB2b2lkICopOwogZXh0ZXJuIGludCAgemZjcF9lcnBfdGhyZWFkX3NldHVwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF90aHJlYWRfa2lsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfd2FpdChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfbm90aWZ5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2JveGVkKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X2JveGVkKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQoc3RydWN0IHpmY3BfcG9ydCAqLCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF91bml0ICosIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHU4LCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9ib3hlZChzdHJ1Y3QgemZjcF9wb3J0ICosIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYm94ZWQoc3RydWN0IHpmY3BfdW5pdCAqLCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQoc3RydWN0IHpmY3BfcG9ydCAqLCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X2FjY2Vzc19kZW5pZWQoc3RydWN0IHpmY3BfdW5pdCAqLCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgY2hhciAqLAorCQkJCQkgICAgdm9pZCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9sb29rdXAoc3RydWN0IHdvcmtfc3RydWN0ICopOwogCkBAIC0xMDEsNiArMTA0LDcgQEAKIGV4dGVybiBpbnQgemZjcF9mY19uc19naWRfcG4oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUoc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgZnNmX3Bsb2dpICopOwogZXh0ZXJuIHZvaWQgemZjcF90ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZmNfbGlua190ZXN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19uYW1lc2VydmVyX2luaXQoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIAogLyogemZjcF9mc2YuYyAqLwpAQCAtMTI1LDE2ICsxMjksMTMgQEAKIGV4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9jdChzdHJ1Y3QgemZjcF9zZW5kX2N0ICosIG1lbXBvb2xfdCAqLAogCQkJICAgIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBleHRlcm4gaW50IHpmY3BfZnNmX3NlbmRfZWxzKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopOwotZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2soc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCQkgIHN0cnVjdCB6ZmNwX3VuaXQgKiwKLQkJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICosIGludCwgaW50KTsKK2V4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrKHN0cnVjdCB6ZmNwX3VuaXQgKiwKKwkJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICopOwogZXh0ZXJuIHZvaWQgemZjcF9mc2ZfcmVxX2NvbXBsZXRlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZzZl9yZXFfZnJlZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3NlbmRfZmNwX2N0bShzdHJ1Y3QgemZjcF9hZGFwdGVyICosCi0JCQkJCQkgIHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsIGludCk7CitleHRlcm4gc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2Zfc2VuZF9mY3BfY3RtKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgpOwogZXh0ZXJuIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kKHVuc2lnbmVkIGxvbmcsCi0JCQkJCQkgICAgICAgc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCQkJICAgICAgIHN0cnVjdCB6ZmNwX3VuaXQgKiwgaW50KTsKKwkJCQkJCSAgICAgICBzdHJ1Y3QgemZjcF91bml0ICopOwogCiAvKiB6ZmNwX3FkaW8uYyAqLwogZXh0ZXJuIGludCB6ZmNwX3FkaW9fYWxsb2NhdGUoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKQEAgLTE1Myw2ICsxNTQsMTAgQEAKIGV4dGVybiB2b2lkIHpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiBjaGFyICp6ZmNwX2dldF9mY3Bfc25zX2luZm9fcHRyKHN0cnVjdCBmY3BfcnNwX2l1ICopOwogZXh0ZXJuIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSB6ZmNwX3RyYW5zcG9ydF9mdW5jdGlvbnM7CitleHRlcm4gdm9pZCB6ZmNwX3Njc2lfcnBvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIoc3RydWN0IHpmY3BfcG9ydCAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICopOworZXh0ZXJuIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogCiAvKiB6ZmNwX3N5c2ZzLmMgKi8KIGV4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHpmY3Bfc3lzZnNfdW5pdF9hdHRyczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCBlYWJkZmUyLi5hYWI4MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEZpYnJlIENoYW5uZWwgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMDkKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtOTgsOCArOTgsMTIgQEAKIAlzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQgPQogCQkJY29udGFpbmVyX29mKGR3LCBzdHJ1Y3QgemZjcF93a2FfcG9ydCwgd29yayk7CiAKLQl3YWl0X2V2ZW50KHdrYV9wb3J0LT5jb21wbGV0aW9uX3dxLAotCQkJYXRvbWljX3JlYWQoJndrYV9wb3J0LT5yZWZjb3VudCkgPT0gMCk7CisJLyogRG9uJ3Qgd2FpdCBmb3J2ZXZlci4gSWYgdGhlIHdrYV9wb3J0IGlzIHRvbyBidXN5IHRha2UgaXQgb2ZmbGluZQorCSAgIHRocm91Z2ggYSBuZXcgY2FsbCBsYXRlciAqLworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHdrYV9wb3J0LT5jb21wbGV0aW9uX3dxLAorCQkJCWF0b21pY19yZWFkKCZ3a2FfcG9ydC0+cmVmY291bnQpID09IDAsCisJCQkJSFogPj4gMSkpCisJCXJldHVybjsKIAogCW11dGV4X2xvY2soJndrYV9wb3J0LT5tdXRleCk7CiAJaWYgKChhdG9taWNfcmVhZCgmd2thX3BvcnQtPnJlZmNvdW50KSAhPSAwKSB8fApAQCAtMTQ1LDE2ICsxNDksMTAgQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmZzZl9yZXEtPmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7Ci0JCWlmICghKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfUE9SVF9QSFlTX09QRU4pKQotCQkJLyogVHJ5IHRvIGNvbm5lY3QgdG8gdW51c2VkIHBvcnRzIGFueXdheS4gKi8KLQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsCi0JCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJCSAgICAgODIsIGZzZl9yZXEpOwotCQllbHNlIGlmICgocG9ydC0+ZF9pZCAmIHJhbmdlKSA9PSAoZWxlbS0+bnBvcnRfZGlkICYgcmFuZ2UpKQotCQkJLyogQ2hlY2sgY29ubmVjdGlvbiBzdGF0dXMgZm9yIGNvbm5lY3RlZCBwb3J0cyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmZzZl9yZXEtPmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KQorCQlpZiAoKHBvcnQtPmRfaWQgJiByYW5nZSkgPT0gKGVsZW0tPm5wb3J0X2RpZCAmIHJhbmdlKSkKIAkJCXpmY3BfdGVzdF9saW5rKHBvcnQpOwotCX0KKwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0xOTYsNyArMTk0LDcgQEAKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAogCWlmIChwb3J0ICYmIChwb3J0LT53d3BuID09IHd3cG4pKQotCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgODMsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAiZmNpd3dwMSIsIHJlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZmNfaW5jb21pbmdfcGxvZ2koc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQpAQCAtMjU5LDEwICsyNTcsOSBAQAogCiAJaWYgKGN0LT5zdGF0dXMpCiAJCXJldHVybjsKLQlpZiAoY3RfaXVfcmVzcC0+aGVhZGVyLmNtZF9yc3BfY29kZSAhPSBaRkNQX0NUX0FDQ0VQVCkgewotCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfUE9SVF9JTlZBTElEX1dXUE4sICZwb3J0LT5zdGF0dXMpOworCWlmIChjdF9pdV9yZXNwLT5oZWFkZXIuY21kX3JzcF9jb2RlICE9IFpGQ1BfQ1RfQUNDRVBUKQogCQlyZXR1cm47Ci0JfQorCiAJLyogcGFyYW5vaWEgKi8KIAlpZiAoY3RfaXVfcmVxLT53d3BuICE9IHBvcnQtPnd3cG4pCiAJCXJldHVybjsKQEAgLTM3NSwxNiArMzcyLDIyIEBACiAKIAlpZiAoYWRpc2MtPmVscy5zdGF0dXMpIHsKIAkJLyogcmVxdWVzdCByZWplY3RlZCBvciB0aW1lZCBvdXQgKi8KLQkJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsIDYzLCBOVUxMKTsKKwkJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsICJmY2FkaF8xIiwgTlVMTCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghcG9ydC0+d3dubikKIAkJcG9ydC0+d3dubiA9IGxzX2FkaXNjLT53d25uOwogCi0JaWYgKHBvcnQtPnd3cG4gIT0gbHNfYWRpc2MtPnd3cG4pCi0JCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsIDY0LCBOVUxMKTsKKwlpZiAoKHBvcnQtPnd3cG4gIT0gbHNfYWRpc2MtPnd3cG4pIHx8CisJICAgICEoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikpIHsKKwkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCisJCQkJICAgICAiZmNhZGhfMiIsIE5VTEwpOworCQlnb3RvIG91dDsKKwl9CiAKKwkvKiBwb3J0IGlzIGdvb2QsIHVuYmxvY2sgcnBvcnQgd2l0aG91dCBnb2luZyB0aHJvdWdoIGVycCAqLworCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3Rlcihwb3J0KTsKICBvdXQ6CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIAlrZnJlZShhZGlzYyk7CkBAIC00MjIsNiArNDI1LDMxIEBACiAJcmV0dXJuIHpmY3BfZnNmX3NlbmRfZWxzKCZhZGlzYy0+ZWxzKTsKIH0KIAordm9pZCB6ZmNwX2ZjX2xpbmtfdGVzdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsIHRlc3RfbGlua193b3JrKTsKKwlpbnQgcmV0dmFsOworCisJaWYgKCEoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkgeworCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworCQlyZXR1cm47IC8qIHBvcnQgZXJwIGlzIHJ1bm5pbmcgYW5kIHdpbGwgdXBkYXRlIHJwb3J0IHN0YXR1cyAqLworCX0KKworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0RFTDsKKwl6ZmNwX3Njc2lfcnBvcnRfd29yaygmcG9ydC0+cnBvcnRfd29yayk7CisKKwlyZXR2YWwgPSB6ZmNwX2ZjX2FkaXNjKHBvcnQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuOworCisJLyogc2VuZCBvZiBBRElTQyB3YXMgbm90IHBvc3NpYmxlICovCisJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsICJmY2x0d2sxIiwgTlVMTCk7CisKKwl6ZmNwX3BvcnRfcHV0KHBvcnQpOworfQorCiAvKioKICAqIHpmY3BfdGVzdF9saW5rIC0gbGlnaHR3ZWlnaHQgbGluayB0ZXN0IHByb2NlZHVyZQogICogQHBvcnQ6IHBvcnQgdG8gYmUgdGVzdGVkCkBAIC00MzIsMTcgKzQ2MCw5IEBACiAgKi8KIHZvaWQgemZjcF90ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlpbnQgcmV0dmFsOwotCiAJemZjcF9wb3J0X2dldChwb3J0KTsKLQlyZXR2YWwgPSB6ZmNwX2ZjX2FkaXNjKHBvcnQpOwotCWlmIChyZXR2YWwgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogc2VuZCBvZiBBRElTQyB3YXMgbm90IHBvc3NpYmxlICovCi0JemZjcF9wb3J0X3B1dChwb3J0KTsKLQlpZiAocmV0dmFsICE9IC1FQlVTWSkKLQkJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsIDY1LCBOVUxMKTsKKwlpZiAoIXF1ZXVlX3dvcmsoemZjcF9kYXRhLndvcmtfcXVldWUsICZwb3J0LT50ZXN0X2xpbmtfd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZnJlZV9zZ19lbnYoc3RydWN0IHpmY3BfZ3BuX2Z0ICpncG5fZnQsIGludCBidWZfbnVtKQpAQCAtNTI5LDcgKzU0OSw3IEBACiAJCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJCXJldHVybjsKIAl9Ci0JemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAxNTEsIE5VTEwpOworCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgImZjcHZhbDEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJemZjcF9wb3J0X2RlcXVldWUocG9ydCk7CkBAIC01OTIsNyArNjEyLDcgQEAKIAkJaWYgKElTX0VSUihwb3J0KSkKIAkJCXJldCA9IFBUUl9FUlIocG9ydCk7CiAJCWVsc2UKLQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsIDE0OSwgTlVMTCk7CisJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZmNlZ3BmMSIsIE5VTEwpOwogCX0KIAogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCBlNjQxNmY4Li5iMjlmMzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogSW1wbGVtZW50YXRpb24gb2YgRlNGIGNvbW1hbmRzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTEyLDExICsxMiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAKKyNkZWZpbmUgWkZDUF9SRVFfQVVUT19DTEVBTlVQCTB4MDAwMDAwMDIKKyNkZWZpbmUgWkZDUF9SRVFfTk9fUVRDQgkweDAwMDAwMDA4CisKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgZGF0YTsKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgNjIsCi0JCQkJTlVMTCk7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCisJCQkJImZzcnRoXzEiLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mc2Zfc3RhcnRfdGltZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKQEAgLTc1LDcgKzc4LDcgQEAKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+d3dwbik7CiAJemZjcF9hY3RfZXZhbF9lcnIocmVxLT5hZGFwdGVyLCBoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC5oYWxmd29yZFswXSk7CiAJemZjcF9hY3RfZXZhbF9lcnIocmVxLT5hZGFwdGVyLCBoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC5oYWxmd29yZFsxXSk7Ci0JemZjcF9lcnBfcG9ydF9hY2Nlc3NfZGVuaWVkKHBvcnQsIDU1LCByZXEpOworCXpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChwb3J0LCAiZnNwYWRfMSIsIHJlcSk7CiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogfQogCkBAIC04OSw3ICs5Miw3IEBACiAJCSAodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwogCXpmY3BfYWN0X2V2YWxfZXJyKHJlcS0+YWRhcHRlciwgaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwuaGFsZndvcmRbMF0pOwogCXpmY3BfYWN0X2V2YWxfZXJyKHJlcS0+YWRhcHRlciwgaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwuaGFsZndvcmRbMV0pOwotCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0LCA1OSwgcmVxKTsKKwl6ZmNwX2VycF91bml0X2FjY2Vzc19kZW5pZWQodW5pdCwgImZzdWFkXzEiLCByZXEpOwogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIH0KIApAQCAtOTcsNyArMTAwLDcgQEAKIHsKIAlkZXZfZXJyKCZyZXEtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwgIkZDUCBkZXZpY2Ugbm90ICIKIAkJIm9wZXJhdGlvbmFsIGJlY2F1c2Ugb2YgYW4gdW5zdXBwb3J0ZWQgRkMgY2xhc3NcbiIpOwotCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAxMjMsIHJlcSk7CisJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihyZXEtPmFkYXB0ZXIsIDAsICJmc2Nuc18xIiwgcmVxKTsKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiB9CiAKQEAgLTE1OSwyMCArMTYyLDEzIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpCiAJCWlmIChwb3J0LT5kX2lkID09IGRfaWQpIHsKIAkJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwotCQkJc3dpdGNoIChzcl9idWYtPnN0YXR1c19zdWJ0eXBlKSB7Ci0JCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0xPU0VfUEhZU19QT1JUOgotCQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsIDEwMSwgcmVxKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9FUlJPUl9QT1JUOgotCQkJCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgMTIyLCByZXEpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgImZzc3JwYzEiLCByZXEpOwogCQkJcmV0dXJuOwogCQl9CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCB1OCBpZCwKK3N0YXRpYyB2b2lkIHpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCBjaGFyICppZCwKIAkJCQkJIHN0cnVjdCBmc2ZfbGlua19kb3duX2luZm8gKmxpbmtfZG93bikKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOwpAQCAtMTgxLDYgKzE3Nyw3IEBACiAJCXJldHVybjsKIAogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELCAmYWRhcHRlci0+c3RhdHVzKTsKKwl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRzX2Jsb2NrKGFkYXB0ZXIpOwogCiAJaWYgKCFsaW5rX2Rvd24pCiAJCWdvdG8gb3V0OwpAQCAtMjYxLDEzICsyNTgsMTMgQEAKIAogCXN3aXRjaCAoc3JfYnVmLT5zdGF0dXNfc3VidHlwZSkgewogCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9OT19QSFlTSUNBTF9MSU5LOgotCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgMzgsIGxkaSk7CisJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAiZnNzcmxkMSIsIGxkaSk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9GRElTQ19GQUlMRUQ6Ci0JCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAzOSwgbGRpKTsKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsICJmc3NybGQyIiwgbGRpKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZJUk1XQVJFX1VQREFURToKLQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsIDQwLCBOVUxMKTsKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsICJmc3NybGQzIiwgTlVMTCk7CiAJfTsKIH0KIApAQCAtMzA3LDIyICszMDQsMjMgQEAKIAkJZGV2X2luZm8oJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSAiVGhlIGxvY2FsIGxpbmsgaGFzIGJlZW4gcmVzdG9yZWRcbiIpOwogCQkvKiBBbGwgcG9ydHMgc2hvdWxkIGJlIG1hcmtlZCBhcyByZWFkeSB0byBydW4gYWdhaW4gKi8KLQkJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIDMwLCBOVUxMLAorCQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImZzc3JoXzEiLCBOVUxMLAogCQkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsCiAJCQkJCSAgICAgICBaRkNQX1NFVCk7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAogCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJMTAyLCByZXEpOworCQkJCQkiZnNzcmhfMiIsIHJlcSk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NUQVRVU19SRUFEX05PVElGSUNBVElPTl9MT1NUOgogCQlpZiAoc3JfYnVmLT5zdGF0dXNfc3VidHlwZSAmIEZTRl9TVEFUVVNfUkVBRF9TVUJfQUNUX1VQREFURUQpCi0JCQl6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKGFkYXB0ZXIsIDEzNSwgcmVxKTsKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoYWRhcHRlciwgImZzc3JoXzMiLAorCQkJCQkJCXJlcSk7CiAJCWlmIChzcl9idWYtPnN0YXR1c19zdWJ0eXBlICYgRlNGX1NUQVRVU19SRUFEX1NVQl9JTkNPTUlOR19FTFMpCiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCQlicmVhazsKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9DRkRDX1VQREFURUQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoYWRhcHRlciwgMTM2LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKGFkYXB0ZXIsICJmc3NyaF80IiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfRkVBVFVSRV9VUERBVEVfQUxFUlQ6CiAJCWFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgPSBzcl9idWYtPnBheWxvYWQud29yZFswXTsKQEAgLTM1MSw3ICszNDksNyBAQAogCQlkZXZfZXJyKCZyZXEtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgcmVwb3J0ZWQgYSBwcm9ibGVtICIKIAkJCSJ0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgMTIxLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgImZzZnNxZTEiLCByZXEpOwogCQlicmVhazsKIAl9CiAJLyogYWxsIG5vbi1yZXR1cm4gc3RhdHMgc2V0IEZTRlJFUV9FUlJPUiovCkBAIC0zNjgsNyArMzY2LDcgQEAKIAkJZGV2X2VycigmcmVxLT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiVGhlIEZDUCBhZGFwdGVyIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgY29tbWFuZCAweCV4XG4iLAogCQkJcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgMTIwLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgImZzZnNlXzEiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0FEQVBURVJfU1RBVFVTX0FWQUlMQUJMRToKQEAgLTQwMCwxNyArMzk4LDE3IEBACiAJCQkiUVRDQiB2ZXJzaW9uIDB4JXggbm90IHN1cHBvcnRlZCBieSBGQ1AgYWRhcHRlciAiCiAJCQkiKDB4JXggdG8gMHgleClcbiIsIEZTRl9RVENCX0NVUlJFTlRfVkVSU0lPTiwKIAkJCXBzcS0+d29yZFswXSwgcHNxLT53b3JkWzFdKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMTcsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzEiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX0VSUk9SX1NUQVRFOgogCWNhc2UgRlNGX1BST1RfU0VRX05VTUJfRVJST1I6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDk4LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNwc2VfMiIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9VTlNVUFBfUVRDQl9UWVBFOgogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiVGhlIFFUQ0IgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBGQ1AgYWRhcHRlclxuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTE4LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc3BzZV8zIiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9IT1NUX0NPTk5FQ1RJT05fSU5JVElBTElaSU5HOgogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9IT1NUX0NPTl9JTklULApAQCAtNDIwLDI3ICs0MTgsMjkgQEAKIAkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIjB4JUx4IGlzIGFuIGFtYmlndW91cyByZXF1ZXN0IGlkZW50aWZpZXJcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlcV9oYW5kbGUpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDc4LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc3BzZV80IiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9MSU5LX0RPV046Ci0JCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAzNywgJnBzcS0+bGlua19kb3duX2luZm8pOworCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgImZzcHNlXzUiLAorCQkJCQkgICAgICZwc3EtPmxpbmtfZG93bl9pbmZvKTsKIAkJLyogRklYTUU6IHJlb3BlbmluZyBhZGFwdGVyIG5vdz8gYmV0dGVyIHdhaXQgZm9yIGxpbmsgdXAgKi8KLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgNzksIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3BzZV82IiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9SRUVTVF9RVUVVRToKIAkJLyogQWxsIHBvcnRzIHNob3VsZCBiZSBtYXJrZWQgYXMgcmVhZHkgdG8gcnVuIGFnYWluICovCi0JCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAyOCwgTlVMTCwKKwkJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsICJmc3BzZV83IiwgTlVMTCwKIAkJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLAogCQkJCQkgICAgICAgWkZDUF9TRVQpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLAogCQkJCQlaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VEIHwKLQkJCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsIDk5LCByZXEpOworCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkJImZzcHNlXzgiLCByZXEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiMHgleCBpcyBub3QgYSB2YWxpZCB0cmFuc2ZlciBwcm90b2NvbCBzdGF0dXNcbiIsCiAJCQlxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDExOSwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNwc2VfOSIsIHJlcSk7CiAJfQogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIH0KQEAgLTUyNiw3ICs1MjYsNyBAQAogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiVW5rbm93biBvciB1bnN1cHBvcnRlZCBhcmJpdHJhdGVkIGxvb3AgIgogCQkJImZpYnJlIGNoYW5uZWwgdG9wb2xvZ3kgZGV0ZWN0ZWRcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEyNywgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNlY2VfMSIsIHJlcSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNTYwLDcgKzU2MCw3IEBACiAJCQkJIkZDUCBhZGFwdGVyIG1heGltdW0gUVRDQiBzaXplICglZCBieXRlcykgIgogCQkJCSJpcyB0b28gc21hbGxcbiIsCiAJCQkJYm90dG9tLT5tYXhfcXRjYl9zaXplKTsKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI5LCByZXEpOworCQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNlY2RoMSIsIHJlcSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWENPTkZJR19PSywKQEAgLTU3NywxMSArNTc3LDExIEBACiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1hDT05GSUdfT0ssCiAJCQkJJmFkYXB0ZXItPnN0YXR1cyk7CiAKLQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsIDQyLAorCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgImZzZWNkaDIiLAogCQkJJnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwubGlua19kb3duX2luZm8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEzMCwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNlY2RoMyIsIHJlcSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU5NywxNCArNTk3LDE0IEBACiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgb25seSBzdXBwb3J0cyBuZXdlciAiCiAJCQkiY29udHJvbCBibG9jayB2ZXJzaW9uc1xuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI1LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGg0IiwgcmVxKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoRlNGX1FUQ0JfQ1VSUkVOVF9WRVJTSU9OID4gYm90dG9tLT5oaWdoX3F0Y2JfdmVyc2lvbikgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiVGhlIEZDUCBhZGFwdGVyIG9ubHkgc3VwcG9ydHMgb2xkZXIgIgogCQkJImNvbnRyb2wgYmxvY2sgdmVyc2lvbnNcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEyNiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNlY2RoNSIsIHJlcSk7CiAJfQogfQogCkBAIC02MTcsOSArNjE3LDEwIEBACiAJaWYgKHJlcS0+ZGF0YSkKIAkJbWVtY3B5KHJlcS0+ZGF0YSwgYm90dG9tLCBzaXplb2YoKmJvdHRvbSkpOwogCi0JaWYgKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpCisJaWYgKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpIHsKIAkJZmNfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lKHNob3N0KSA9IGJvdHRvbS0+d3dwbjsKLQllbHNlCisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX05QSVY7CisJfSBlbHNlCiAJCWZjX2hvc3RfcGVybWFuZW50X3BvcnRfbmFtZShzaG9zdCkgPSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCk7CiAJZmNfaG9zdF9tYXhmcmFtZV9zaXplKHNob3N0KSA9IGJvdHRvbS0+bWF4aW11bV9mcmFtZV9zaXplOwogCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhzaG9zdCkgPSBib3R0b20tPnN1cHBvcnRlZF9zcGVlZDsKQEAgLTYzOCwyMCArNjM5LDEyIEBACiAJCWJyZWFrOwogCWNhc2UgRlNGX0VYQ0hBTkdFX0NPTkZJR19EQVRBX0lOQ09NUExFVEU6CiAJCXpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZXZhbHVhdGUocmVxKTsKLQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsIDQzLAorCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgImZzZXBkaDEiLAogCQkJJnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwubGlua19kb3duX2luZm8pOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9mc2Zfc2JhbF9hdmFpbGFibGUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcV9xLmNvdW50KSA+IDApCi0JCXJldHVybiAxOwotCWF0b21pY19pbmMoJmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIAlfX3JlbGVhc2VzKCZhZGFwdGVyLT5yZXFfcV9sb2NrKQogCV9fYWNxdWlyZXMoJmFkYXB0ZXItPnJlcV9xX2xvY2spCkBAIC03MzUsNyArNzI4LDcgQEAKIAogCXJlcS0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJcmVxLT5mc2ZfY29tbWFuZCA9IGZzZl9jbWQ7Ci0JcmVxLT5yZXFfaWQgPSBhZGFwdGVyLT5yZXFfbm8rKzsKKwlyZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubzsKIAlyZXEtPnNiYWxfbnVtYmVyID0gMTsKIAlyZXEtPnNiYWxfZmlyc3QgPSByZXFfcS0+Zmlyc3Q7CiAJcmVxLT5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7CkBAIC03OTEsMTMgKzc4NCwxNCBAQAogCQlpZiAoemZjcF9yZXFsaXN0X2ZpbmRfc2FmZShhZGFwdGVyLCByZXEpKQogCQkJemZjcF9yZXFsaXN0X3JlbW92ZShhZGFwdGVyLCByZXEpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDExNiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcnNfXzEiLCByZXEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBEb24ndCBpbmNyZWFzZSBmb3IgdW5zb2xpY2l0ZWQgc3RhdHVzICovCiAJaWYgKHJlcS0+cXRjYikKIAkJYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm8rKzsKKwlhZGFwdGVyLT5yZXFfbm8rKzsKIAogCXJldHVybiAwOwogfQpAQCAtODcwLDE0ICs4NjQsMTQgQEAKIAlzd2l0Y2ggKHJlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQ6CiAJCWlmIChmc3EtPndvcmRbMF0gPT0gZnNxLT53b3JkWzFdKSB7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAxMDQsCi0JCQkJCQlyZXEpOworCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwKKwkJCQkJCSJmc2FmY2gxIiwgcmVxKTsKIAkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJfQogCQlicmVhazsKIAljYXNlIEZTRl9MVU5fSEFORExFX05PVF9WQUxJRDoKIAkJaWYgKGZzcS0+d29yZFswXSA9PSBmc3EtPndvcmRbMV0pIHsKLQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsIDEwNSwgcmVxKTsKKwkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsICJmc2FmY2gyIiwgcmVxKTsKIAkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJfQogCQlicmVhazsKQEAgLTg4NSwxMiArODc5LDEyIEBACiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVE5PVE5FRURFRDsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUE9SVF9CT1hFRDoKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA0NywgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCAiZnNhZmNoMyIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CiAJCQkgICAgICAgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKIAljYXNlIEZTRl9MVU5fQk9YRUQ6Ci0JCXpmY3BfZXJwX3VuaXRfYm94ZWQodW5pdCwgNDgsIHJlcSk7CisJCXpmY3BfZXJwX3VuaXRfYm94ZWQodW5pdCwgImZzYWZjaDQiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJICAgICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkxMiwyNyArOTA2LDIyIEBACiAvKioKICAqIHpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kIC0gYWJvcnQgcnVubmluZyBTQ1NJIGNvbW1hbmQKICAqIEBvbGRfcmVxX2lkOiB1bnNpZ25lZCBsb25nCi0gKiBAYWRhcHRlcjogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9hZGFwdGVyCiAgKiBAdW5pdDogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF91bml0Ci0gKiBAcmVxX2ZsYWdzOiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIHJlcXVlc3QgZmxhZ3MKICAqIFJldHVybnM6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfZnNmX3JlcQotICoKLSAqIEZJWE1FKGRlc2lnbik6IHNob3VsZCBiZSB3YXRjaGVkIGJ5IGEgdGltZW91dCAhISEKICAqLwogCiBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZCh1bnNpZ25lZCBsb25nIG9sZF9yZXFfaWQsCi0JCQkJCQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCQkJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwKLQkJCQkJCWludCByZXFfZmxhZ3MpCisJCQkJCQlzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoIXpmY3BfZnNmX3NiYWxfYXZhaWxhYmxlKGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKIAkJZ290byBvdXQ7CiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9BQk9SVF9GQ1BfQ01ORCwKLQkJCQkgIHJlcV9mbGFncywgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2Fib3J0KTsKKwkJCQkgIDAsIGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9hYm9ydCk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJlcSA9IE5VTEw7CiAJCWdvdG8gb3V0OwpAQCAtOTYwLDcgKzk0OSw3IEBACiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAlyZXEgPSBOVUxMOwogb3V0OgotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJlcTsKIH0KIApAQCAtOTk4LDcgKzk4Nyw3IEBACiAJCQkgICAgICAgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKIAljYXNlIEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDEwNiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzc2N0aDEiLCByZXEpOwogCWNhc2UgRlNGX0dFTkVSSUNfQ09NTUFORF9SRUpFQ1RFRDoKIAljYXNlIEZTRl9QQVlMT0FEX1NJWkVfTUlTTUFUQ0g6CiAJY2FzZSBGU0ZfUkVRVUVTVF9TSVpFX1RPT19MQVJHRToKQEAgLTExNzQsMTIgKzExNjMsOCBAQAogCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fc3VwcG9ydCAqYm90dG9tOwogCWludCByZXQgPSAtRUlPOwogCi0JaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJmVscy0+cG9ydC0+c3RhdHVzKSAmCi0JCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICghemZjcF9mc2Zfc2JhbF9hdmFpbGFibGUoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQogCQlnb3RvIG91dDsKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX1NFTkRfRUxTLAogCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLCBOVUxMKTsKQEAgLTEyMTIsNyArMTE5Nyw3IEBACiBmYWlsZWRfc2VuZDoKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogb3V0OgotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIyNCw3ICsxMjA5LDcgQEAKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKCF6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShhZGFwdGVyKSkKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQogCQlnb3RvIG91dDsKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsCiAJCQkJICBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQSwKQEAgLTEzMjAsNyArMTMwNSw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKCF6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShhZGFwdGVyKSkKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQogCQlnb3RvIG91dDsKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwKIAkJCQkgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCwKQEAgLTEzNjYsNyArMTM1MSw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKCF6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShhZGFwdGVyKSkKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLCAwLApAQCAtMTQxNiw3ICsxNDAxLDcgQEAKIAkJCSAiTm90IGVub3VnaCBGQ1AgYWRhcHRlciByZXNvdXJjZXMgdG8gb3BlbiAiCiAJCQkgInJlbW90ZSBwb3J0IDB4JTAxNkx4XG4iLAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+d3dwbik7Ci0JCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDMxLCByZXEpOworCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0LCAiZnNvcGhfMSIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgpAQCAtMTUyMiwxMyArMTUwNywxMyBAQAogCiAJc3dpdGNoIChyZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKSB7CiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAxMDcsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHBvcnQtPmFkYXB0ZXIsIDAsICJmc2NwaF8xIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CiAJCWJyZWFrOwogCWNhc2UgRlNGX0dPT0Q6Ci0JCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCAzMywgcmVxLAorCQl6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMocG9ydCwgImZzY3BoXzIiLCByZXEsCiAJCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fT1BFTiwKIAkJCQkJICAgIFpGQ1BfQ0xFQVIpOwogCQlicmVhazsKQEAgLTE2NTcsNyArMTY0Miw3IEBACiAKIAlpZiAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cyA9PSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEKSB7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4od2thX3BvcnQtPmFkYXB0ZXIsIDAsIDg0LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih3a2FfcG9ydC0+YWRhcHRlciwgMCwgImZzY3dwaDEiLCByZXEpOwogCX0KIAogCXdrYV9wb3J0LT5zdGF0dXMgPSBaRkNQX1dLQV9QT1JUX09GRkxJTkU7CkBAIC0xNzEyLDE4ICsxNjk3LDE4IEBACiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAogCWlmIChyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikKLQkJZ290byBza2lwX2ZzZnN0YXR1czsKKwkJcmV0dXJuOwogCiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHBvcnQtPmFkYXB0ZXIsIDAsIDEwOCwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocG9ydC0+YWRhcHRlciwgMCwgImZzY3BwaDEiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0FDQ0VTU19ERU5JRUQ6CiAJCXpmY3BfZnNmX2FjY2Vzc19kZW5pZWRfcG9ydChyZXEsIHBvcnQpOwogCQlicmVhazsKIAljYXNlIEZTRl9QT1JUX0JPWEVEOgotCQl6ZmNwX2VycF9wb3J0X2JveGVkKHBvcnQsIDUwLCByZXEpOworCQl6ZmNwX2VycF9wb3J0X2JveGVkKHBvcnQsICJmc2NwcGgyIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SIHwKIAkJCSAgICAgICBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCS8qIGNhbid0IHVzZSBnZW5lcmljIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyBiZWNhdXNlCkBAIC0xNzUyLDggKzE3MzcsNiBAQAogCQkJCQkgICZ1bml0LT5zdGF0dXMpOwogCQlicmVhazsKIAl9Ci1za2lwX2ZzZnN0YXR1czoKLQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19QT1JUX1BIWVNfQ0xPU0lORywgJnBvcnQtPnN0YXR1cyk7CiB9CiAKIC8qKgpAQCAtMTc4OSw4ICsxNzcyLDYgQEAKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2Nsb3NlX3BoeXNpY2FsX3BvcnRfaGFuZGxlcjsKIAllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOwotCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19QT1JUX1BIWVNfQ0xPU0lORywKLQkJCSZlcnBfYWN0aW9uLT5wb3J0LT5zdGF0dXMpOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKQEAgLTE4MjUsNyArMTgwNiw3IEBACiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKIAogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTA5LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAiZnNvdWhfMSIsIHJlcSk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgRlNGX0xVTl9BTFJFQURZX09QRU46CiAJCWJyZWFrOwpAQCAtMTgzNSw3ICsxODE2LDcgQEAKIAkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUFET05MWSwgJnVuaXQtPnN0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfQk9YRUQ6Ci0JCXpmY3BfZXJwX3BvcnRfYm94ZWQodW5pdC0+cG9ydCwgNTEsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfYm94ZWQodW5pdC0+cG9ydCwgImZzb3VoXzIiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJICAgICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJYnJlYWs7CkBAIC0xODUxLDcgKzE4MzIsNyBAQAogCQllbHNlCiAJCQl6ZmNwX2FjdF9ldmFsX2VycihhZGFwdGVyLAogCQkJCQkgIGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMl0pOwotCQl6ZmNwX2VycF91bml0X2FjY2Vzc19kZW5pZWQodW5pdCwgNjAsIHJlcSk7CisJCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0LCAiZnNvdWhfMyIsIHJlcSk7CiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVELCAmdW5pdC0+c3RhdHVzKTsKIAkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUFET05MWSwgJnVuaXQtPnN0YXR1cyk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKQEAgLTE4NjIsNyArMTg0Myw3IEBACiAJCQkgIjB4JTAxNkx4IG9uIHBvcnQgMHglMDE2THhcbiIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl1bml0LT5mY3BfbHVuLAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+cG9ydC0+d3dwbik7Ci0JCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsIDM0LCByZXEpOworCQl6ZmNwX2VycF91bml0X2ZhaWxlZCh1bml0LCAiZnNvdWhfNCIsIHJlcSk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgRlNGX0lOVkFMSURfQ09NTUFORF9PUFRJT046CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKQEAgLTE5MTEsOSArMTg5Miw5IEBACiAJCQkJCSJwb3J0IDB4JTAxNkx4KVxuIiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl1bml0LT5mY3BfbHVuLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwotCQkJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsIDM1LCByZXEpOworCQkJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsICJmc291aF81IiwgcmVxKTsKIAkJCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7Ci0JCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCA4MCwgcmVxKTsKKwkJCQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsICJmc291aF82IiwgcmVxKTsKICAgICAgICAgCQl9IGVsc2UgaWYgKCFleGNsdXNpdmUgJiYgcmVhZHdyaXRlKSB7CiAJCQkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJCQkiU2hhcmVkIHJlYWQtd3JpdGUgYWNjZXNzIG5vdCAiCkBAIC0xOTIxLDkgKzE5MDIsOSBAQAogCQkJCQkiMHglMDE2THgpXG4iLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+cG9ydC0+d3dwbik7Ci0JCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMzYsIHJlcSk7CisJCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgImZzb3VoXzciLCByZXEpOwogCQkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKLQkJCQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsIDgxLCByZXEpOworCQkJCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCwgImZzb3VoXzgiLCByZXEpOwogICAgICAgICAJCX0KIAkJfQogCQlicmVhazsKQEAgLTE5ODgsMTUgKzE5NjksMTUgQEAKIAogCXN3aXRjaCAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTEwLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAiZnNjdWhfMSIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfTFVOX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsIDExMSwgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgImZzY3VoXzIiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfQk9YRUQ6Ci0JCXpmY3BfZXJwX3BvcnRfYm94ZWQodW5pdC0+cG9ydCwgNTIsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfYm94ZWQodW5pdC0+cG9ydCwgImZzY3VoXzMiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJICAgICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJYnJlYWs7CkBAIC0yMDczLDcgKzIwNTQsNiBAQAogCXN0cnVjdCBmc2ZfcXVhbF9sYXRlbmN5X2luZm8gKmxhdF9pbmY7CiAJc3RydWN0IGxhdGVuY3lfY29udCAqbGF0OwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSByZXEtPnVuaXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxhdF9pbmYgPSAmcmVxLT5xdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbC5sYXRlbmN5X2luZm87CiAKQEAgLTIwOTEsMTEgKzIwNzEsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ1bml0LT5sYXRlbmNpZXMubG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmdW5pdC0+bGF0ZW5jaWVzLmxvY2spOwogCXpmY3BfZnNmX3VwZGF0ZV9sYXQoJmxhdC0+Y2hhbm5lbCwgbGF0X2luZi0+Y2hhbm5lbF9sYXQpOwogCXpmY3BfZnNmX3VwZGF0ZV9sYXQoJmxhdC0+ZmFicmljLCBsYXRfaW5mLT5mYWJyaWNfbGF0KTsKIAlsYXQtPmNvdW50ZXIrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bml0LT5sYXRlbmNpZXMubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZ1bml0LT5sYXRlbmNpZXMubG9jayk7CiB9CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRQpAQCAtMjE0Nyw3ICsyMTI3LDYgQEAKIAogCWlmICh1bmxpa2VseShyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVEVEKSkgewogCQlzZXRfaG9zdF9ieXRlKHNjcG50LCBESURfU09GVF9FUlJPUik7Ci0JCXNldF9kcml2ZXJfYnl0ZShzY3BudCwgU1VHR0VTVF9SRVRSWSk7CiAJCWdvdG8gc2tpcF9mc2ZzdGF0dXM7CiAJfQogCkBAIC0yMjM3LDEyICsyMjE2LDEyIEBACiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9IQU5ETEVfTUlTTUFUQ0g6CiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAxMTIsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc3NmY2gxIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9GQ1BMVU5fTk9UX1ZBTElEOgogCWNhc2UgRlNGX0xVTl9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwLCAxMTMsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsICJmc3NmY2gyIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9TRVJWSUNFX0NMQVNTX05PVF9TVVBQT1JURUQ6CkBAIC0yMjU4LDcgKzIyMzcsOCBAQAogCQkJcmVxLT5xdGNiLT5ib3R0b20uaW8uZGF0YV9kaXJlY3Rpb24sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDEzMywgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAiZnNzZmNoMyIsCisJCQkJCSAgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9DTU5EX0xFTkdUSF9OT1RfVkFMSUQ6CkBAIC0yMjY4LDE2ICsyMjQ4LDE3IEBACiAJCQlyZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfY21uZF9sZW5ndGgsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDEzNCwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAiZnNzZmNoNCIsCisJCQkJCSAgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9QT1JUX0JPWEVEOgotCQl6ZmNwX2VycF9wb3J0X2JveGVkKHVuaXQtPnBvcnQsIDUzLCByZXEpOworCQl6ZmNwX2VycF9wb3J0X2JveGVkKHVuaXQtPnBvcnQsICJmc3NmY2g1IiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SIHwKIAkJCSAgICAgICBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0xVTl9CT1hFRDoKLQkJemZjcF9lcnBfdW5pdF9ib3hlZCh1bml0LCA1NCwgcmVxKTsKKwkJemZjcF9lcnBfdW5pdF9ib3hlZCh1bml0LCAiZnNzZmNoNiIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CiAJCQkgICAgICAgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTIzMTQsMzAgKzIyOTUsMjkgQEAKIAogLyoqCiAgKiB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2sgLSBpbml0aWF0ZSBhbiBGQ1AgY29tbWFuZCAoZm9yIGEgU0NTSSBjb21tYW5kKQotICogQGFkYXB0ZXI6IGFkYXB0ZXIgd2hlcmUgc2NzaSBjb21tYW5kIGlzIGlzc3VlZAogICogQHVuaXQ6IHVuaXQgd2hlcmUgY29tbWFuZCBpcyBzZW50IHRvCiAgKiBAc2NzaV9jbW5kOiBzY3NpIGNvbW1hbmQgdG8gYmUgc2VudAotICogQHRpbWVyOiB0aW1lciB0byBiZSBzdGFydGVkIHdoZW4gcmVxdWVzdCBpcyBpbml0aWF0ZWQKLSAqIEByZXFfZmxhZ3M6IGZsYWdzIGZvciBmc2ZfcmVxdWVzdAogICovCi1pbnQgemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwKLQkJCQkgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCi0JCQkJICAgaW50IHVzZV90aW1lciwgaW50IHJlcV9mbGFncykKK2ludCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2soc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwKKwkJCQkgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQpCiB7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCXN0cnVjdCBmY3BfY21uZF9pdSAqZmNwX2NtbmRfaXU7CiAJdW5zaWduZWQgaW50IHNidHlwZTsKIAlpbnQgcmVhbF9ieXRlcywgcmV0dmFsID0gLUVJTzsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKIAogCWlmICh1bmxpa2VseSghKGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpICYKIAkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKCF6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShhZGFwdGVyKSkKKwlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcV9xLmNvdW50KSA8PSAwKSB7CisJCWF0b21pY19pbmMoJmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKTsKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9GQ1BfQ01ORCwgcmVxX2ZsYWdzLAorCX0KKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0ZDUF9DTU5ELAorCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAogCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3Njc2kpOwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CkBAIC0yNDExLDcgKzIzOTEsNyBAQAogCQkJCSJvbiBwb3J0IDB4JTAxNkx4IGNsb3NlZFxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl1bml0LT5wb3J0LT53d3BuKTsKLQkJCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCwgMTMxLCByZXEpOworCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAiZnNzZmN0MSIsIHJlcSk7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQl9CiAJCWdvdG8gZmFpbGVkX3Njc2lfY21uZDsKQEAgLTI0MTksOSArMjM5OSw2IEBACiAKIAl6ZmNwX3NldF9mY3BfZGwoZmNwX2NtbmRfaXUsIHJlYWxfYnl0ZXMpOwogCi0JaWYgKHVzZV90aW1lcikKLQkJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCBaRkNQX0ZTRl9SRVFVRVNUX1RJTUVPVVQpOwotCiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAodW5saWtlbHkocmV0dmFsKSkKIAkJZ290byBmYWlsZWRfc2NzaV9jbW5kOwpAQCAtMjQzOSwyOCArMjQxNiwyNSBAQAogCiAvKioKICAqIHpmY3BfZnNmX3NlbmRfZmNwX2N0bSAtIHNlbmQgU0NTSSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZAotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3AtYWRhcHRlcgogICogQHVuaXQ6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfdW5pdAogICogQHRtX2ZsYWdzOiB1bnNpZ25lZCBieXRlIGZvciB0YXNrIG1hbmFnZW1lbnQgZmxhZ3MKLSAqIEByZXFfZmxhZ3M6IGludCByZXF1ZXN0IGZsYWdzCiAgKiBSZXR1cm5zOiBvbiBzdWNjZXNzIHBvaW50ZXIgdG8gc3RydWN0IGZzZl9yZXEsIE5VTEwgb3RoZXJ3aXNlCiAgKi8KLXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3NlbmRfZmNwX2N0bShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCQkgICBzdHJ1Y3QgemZjcF91bml0ICp1bml0LAotCQkJCQkgICB1OCB0bV9mbGFncywgaW50IHJlcV9mbGFncykKK3N0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3NlbmRfZmNwX2N0bShzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCB0bV9mbGFncykKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgZmNwX2NtbmRfaXUgKmZjcF9jbW5kX2l1OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCiAJaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgogCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCkpKQogCQlyZXR1cm4gTlVMTDsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKCF6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCiAJCWdvdG8gb3V0OwotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRkNQX0NNTkQsIHJlcV9mbGFncywKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0ZDUF9DTU5ELCAwLAogCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3Njc2kpOwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXEgPSBOVUxMOwpAQCAtMjQ5Miw3ICsyNDY2LDcgQEAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCXJlcSA9IE5VTEw7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmVxOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAppbmRleCA4YmIyMDAyLi5kZjdmMjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKQEAgLTEyNywxMCArMTI3LDYgQEAKICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX0NGRENfVVBEQVRFRAkJMHgwMDAwMDAwQQogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfRkVBVFVSRV9VUERBVEVfQUxFUlQJMHgwMDAwMDAwQwogCi0vKiBzdGF0dXMgc3VidHlwZXMgaW4gc3RhdHVzIHJlYWQgYnVmZmVyICovCi0jZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0xPU0VfUEhZU19QT1JUCTB4MDAwMDAwMDEKLSNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9FUlJPUl9QT1JUCQkweDAwMDAwMDAyCi0KIC8qIHN0YXR1cyBzdWJ0eXBlcyBmb3IgbGluayBkb3duICovCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfTk9fUEhZU0lDQUxfTElOSwkweDAwMDAwMDAwCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9TVUJfRkRJU0NfRkFJTEVECTB4MDAwMDAwMDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggMzNlMGEyMC4uZTBhMjE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTExLDkgKzExLDYgQEAKIAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAKLS8qIEZJWE1FKHR1bmUpOiBmcmVlIHNwYWNlIHNob3VsZCBiZSBvbmUgbWF4LiBTQkFMIGNoYWluIHBsdXMgd2hhdD8gKi8KLSNkZWZpbmUgWkZDUF9RRElPX1BDSV9JTlRFUlZBTAkoUURJT19NQVhfQlVGRkVSU19QRVJfUSBcCi0JCQkJLSAoRlNGX01BWF9TQkFMU19QRVJfUkVRICsgNCkpCiAjZGVmaW5lIFFCVUZGX1BFUl9QQUdFCQkoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBxZGlvX2J1ZmZlcikpCiAKIHN0YXRpYyBpbnQgemZjcF9xZGlvX2J1ZmZlcnNfZW5xdWV1ZShzdHJ1Y3QgcWRpb19idWZmZXIgKipzYmFsKQpAQCAtNTgsNyArNTUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgemZjcF9xZGlvX2hhbmRsZXJfZXJyb3Ioc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdTggaWQpCitzdGF0aWMgdm9pZCB6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBjaGFyICppZCkKIHsKIAlkZXZfd2FybigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCAiQSBRRElPIHByb2JsZW0gb2NjdXJyZWRcbiIpOwogCkBAIC03Nyw2ICs3NCwyMyBAQAogCX0KIH0KIAorLyogdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgcHJpb3IgdG8gdXBkYXRpbmcgdGhlIHF1ZXVlIGZpbGwgbGV2ZWwgKi8KK3N0YXRpYyB2b2lkIHpmY3BfcWRpb19hY2NvdW50KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJa3RpbWVfdCBub3c7CisJczY0IHNwYW47CisJaW50IGZyZWUsIHVzZWQ7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKKwlub3cgPSBrdGltZV9nZXQoKTsKKwlzcGFuID0ga3RpbWVfdXNfZGVsdGEobm93LCBhZGFwdGVyLT5yZXFfcV90aW1lKTsKKwlmcmVlID0gbWF4KDAsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXFfcS5jb3VudCkpOworCXVzZWQgPSBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gZnJlZTsKKwlhZGFwdGVyLT5yZXFfcV91dGlsICs9IHVzZWQgKiBzcGFuOworCWFkYXB0ZXItPnJlcV9xX3RpbWUgPSBub3c7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKK30KKwogc3RhdGljIHZvaWQgemZjcF9xZGlvX2ludF9yZXEoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBxZGlvX2VyciwKIAkJCSAgICAgIGludCBxdWV1ZV9ubywgaW50IGZpcnN0LCBpbnQgY291bnQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHBhcm0pCkBAIC04NiwxMyArMTAwLDE0IEBACiAKIAlpZiAodW5saWtlbHkocWRpb19lcnIpKSB7CiAJCXpmY3BfaGJhX2RiZl9ldmVudF9xZGlvKGFkYXB0ZXIsIHFkaW9fZXJyLCBmaXJzdCwgY291bnQpOwotCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihhZGFwdGVyLCAxNDApOworCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihhZGFwdGVyLCAicWRpcmVxMSIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogY2xlYW51cCBhbGwgU0JBTHMgYmVpbmcgcHJvZ3JhbS1vd25lZCBub3cgKi8KIAl6ZmNwX3FkaW9femVyb19zYmFscyhxdWV1ZS0+c2JhbCwgZmlyc3QsIGNvdW50KTsKIAorCXpmY3BfcWRpb19hY2NvdW50KGFkYXB0ZXIpOwogCWF0b21pY19hZGQoY291bnQsICZxdWV1ZS0+Y291bnQpOwogCXdha2VfdXAoJmFkYXB0ZXItPnJlcXVlc3Rfd3EpOwogfQpAQCAtMTU0LDcgKzE2OSw3IEBACiAKIAlpZiAodW5saWtlbHkocWRpb19lcnIpKSB7CiAJCXpmY3BfaGJhX2RiZl9ldmVudF9xZGlvKGFkYXB0ZXIsIHFkaW9fZXJyLCBmaXJzdCwgY291bnQpOwotCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihhZGFwdGVyLCAxNDcpOworCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihhZGFwdGVyLCAicWRpcmVzMSIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNDYsMjEgKzM2MSwxMiBAQAogCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJmFkYXB0ZXItPnJlcV9xOwogCWludCBmaXJzdCA9IGZzZl9yZXEtPnNiYWxfZmlyc3Q7CiAJaW50IGNvdW50ID0gZnNmX3JlcS0+c2JhbF9udW1iZXI7Ci0JaW50IHJldHZhbCwgcGNpLCBwY2lfYmF0Y2g7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOworCWludCByZXR2YWw7CisJdW5zaWduZWQgaW50IHFkaW9fZmxhZ3MgPSBRRElPX0ZMQUdfU1lOQ19PVVRQVVQ7CiAKLQkvKiBhY2tub3dsZWRnZW1lbnRzIGZvciB0cmFuc2ZlcnJlZCBidWZmZXJzICovCi0JcGNpX2JhdGNoID0gYWRhcHRlci0+cmVxX3FfcGNpX2JhdGNoICsgY291bnQ7Ci0JaWYgKHVubGlrZWx5KHBjaV9iYXRjaCA+PSBaRkNQX1FESU9fUENJX0lOVEVSVkFMKSkgewotCQlwY2lfYmF0Y2ggJT0gWkZDUF9RRElPX1BDSV9JTlRFUlZBTDsKLQkJcGNpID0gZmlyc3QgKyBjb3VudCAtIChwY2lfYmF0Y2ggKyAxKTsKLQkJcGNpICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlKHJlcV9xLCBwY2ksIDApOwotCQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHUzBfUENJOwotCX0KKwl6ZmNwX3FkaW9fYWNjb3VudChhZGFwdGVyKTsKIAotCXJldHZhbCA9IGRvX1FESU8oYWRhcHRlci0+Y2N3X2RldmljZSwgUURJT19GTEFHX1NZTkNfT1VUUFVULCAwLCBmaXJzdCwKLQkJCSBjb3VudCk7CisJcmV0dmFsID0gZG9fUURJTyhhZGFwdGVyLT5jY3dfZGV2aWNlLCBxZGlvX2ZsYWdzLCAwLCBmaXJzdCwgY291bnQpOwogCWlmICh1bmxpa2VseShyZXR2YWwpKSB7CiAJCXpmY3BfcWRpb196ZXJvX3NiYWxzKHJlcV9xLT5zYmFsLCBmaXJzdCwgY291bnQpOwogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMzcwLDcgKzM3Niw2IEBACiAJYXRvbWljX3N1Yihjb3VudCwgJnJlcV9xLT5jb3VudCk7CiAJcmVxX3EtPmZpcnN0ICs9IGNvdW50OwogCXJlcV9xLT5maXJzdCAlPSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCWFkYXB0ZXItPnJlcV9xX3BjaV9iYXRjaCA9IHBjaV9iYXRjaDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQxLDcgKzQ0Niw2IEBACiAJfQogCXJlcV9xLT5maXJzdCA9IDA7CiAJYXRvbWljX3NldCgmcmVxX3EtPmNvdW50LCAwKTsKLQlhZGFwdGVyLT5yZXFfcV9wY2lfYmF0Y2ggPSAwOwogCWFkYXB0ZXItPnJlc3BfcS5maXJzdCA9IDA7CiAJYXRvbWljX3NldCgmYWRhcHRlci0+cmVzcF9xLmNvdW50LCAwKTsKIH0KQEAgLTQ3OSw3ICs0ODMsNiBAQAogCS8qIHNldCBpbmRleCBvZiBmaXJzdCBhdmFsYWJsZSBTQkFMUyAvIG51bWJlciBvZiBhdmFpbGFibGUgU0JBTFMgKi8KIAlhZGFwdGVyLT5yZXFfcS5maXJzdCA9IDA7CiAJYXRvbWljX3NldCgmYWRhcHRlci0+cmVxX3EuY291bnQsIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpOwotCWFkYXB0ZXItPnJlcV9xX3BjaV9iYXRjaCA9IDA7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA5ZGM0MmE2Li41ODIwMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBJbnRlcmZhY2UgdG8gTGludXggU0NTSSBtaWRsYXllci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0yNyw5ICsyNyw3IEBACiBzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcG50KQogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzZHBudC0+aG9zdGRhdGE7Ci0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVELCAmdW5pdC0+c3RhdHVzKTsKIAl1bml0LT5kZXZpY2UgPSBOVUxMOwotCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsIDEyLCBOVUxMKTsKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogfQogCkBAIC01OCw4ICs1Niw4IEBACiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwotCWludCAgICBzdGF0dXM7Ci0JaW50ICAgIHJldDsKKwlpbnQgICAgc3RhdHVzLCBzY3NpX3Jlc3VsdCwgcmV0OworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNjcG50LT5kZXZpY2UpKTsKIAogCS8qIHJlc2V0IHRoZSBzdGF0dXMgZm9yIHRoaXMgcmVxdWVzdCAqLwogCXNjcG50LT5yZXN1bHQgPSAwOwpAQCAtODEsNiArNzksMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJc2NzaV9yZXN1bHQgPSBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCk7CisJaWYgKHVubGlrZWx5KHNjc2lfcmVzdWx0KSkgeworCQlzY3BudC0+cmVzdWx0ID0gc2NzaV9yZXN1bHQ7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJmYWlsIiwgNCwgYWRhcHRlciwgc2NwbnQsIE5VTEwpOworCQlzY3BudC0+c2NzaV9kb25lKHNjcG50KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3RhdHVzID0gYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cyk7CiAJaWYgKHVubGlrZWx5KChzdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgfHwKIAkJICAgICAhKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkpIHsKQEAgLTg4LDggKzk0LDcgQEAKIAkJcmV0dXJuIDA7OwogCX0KIAotCXJldCA9IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayhhZGFwdGVyLCB1bml0LCBzY3BudCwgMCwKLQkJCQkJICAgICBaRkNQX1JFUV9BVVRPX0NMRUFOVVApOworCXJldCA9IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayh1bml0LCBzY3BudCk7CiAJaWYgKHVubGlrZWx5KHJldCA9PSAtRUJVU1kpKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwogCWVsc2UgaWYgKHVubGlrZWx5KHJldCA8IDApKQpAQCAtMTMzLDggKzEzOCw3IEBACiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAJdW5pdCA9IHpmY3BfdW5pdF9sb29rdXAoYWRhcHRlciwgc2RwLT5jaGFubmVsLCBzZHAtPmlkLCBzZHAtPmx1bik7Ci0JaWYgKHVuaXQgJiYKLQkgICAgKGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVEKSkgeworCWlmICh1bml0KSB7CiAJCXNkcC0+aG9zdGRhdGEgPSB1bml0OwogCQl1bml0LT5kZXZpY2UgPSBzZHA7CiAJCXpmY3BfdW5pdF9nZXQodW5pdCk7CkBAIC0xNDcsNzkgKzE1MSw5MSBAQAogCiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQogewotIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3Q7Ci0gCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOworCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdCA9IHNjcG50LT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9CisJCShzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjc2lfaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKm9sZF9yZXEsICphYnJ0X3JlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgb2xkX3JlcV9pZCA9ICh1bnNpZ25lZCBsb25nKSBzY3BudC0+aG9zdF9zY3JpYmJsZTsKIAlpbnQgcmV0dmFsID0gU1VDQ0VTUzsKLQotCXNjc2lfaG9zdCA9IHNjcG50LT5kZXZpY2UtPmhvc3Q7Ci0JYWRhcHRlciA9IChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjc2lfaG9zdC0+aG9zdGRhdGFbMF07Ci0JdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOworCWludCByZXRyeSA9IDM7CiAKIAkvKiBhdm9pZCByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGxhdGUgbm9ybWFsIGNvbXBsZXRpb24gYW5kIGFib3J0ICovCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7CiAKLQkvKiBDaGVjayB3aGV0aGVyIGNvcnJlc3BvbmRpbmcgZnNmX3JlcSBpcyBzdGlsbCBwZW5kaW5nICovCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgb2xkX3JlcV9pZCk7CisJb2xkX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIG9sZF9yZXFfaWQpOwogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQlpZiAoIWZzZl9yZXEpIHsKKwlpZiAoIW9sZF9yZXEpIHsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibHRlMSIsIGFkYXB0ZXIsIHNjcG50LCBOVUxMLCAwKTsKLQkJcmV0dXJuIHJldHZhbDsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibHRlMSIsIGFkYXB0ZXIsIHNjcG50LCBOVUxMLAorCQkJCQkgIG9sZF9yZXFfaWQpOworCQlyZXR1cm4gU1VDQ0VTUzsKIAl9Ci0JZnNmX3JlcS0+ZGF0YSA9IE5VTEw7CisJb2xkX3JlcS0+ZGF0YSA9IE5VTEw7CiAKIAkvKiBkb24ndCBhY2Nlc3Mgb2xkIGZzZl9yZXEgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBhYm9ydF9sb2NrICovCiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAotCWZzZl9yZXEgPSB6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZChvbGRfcmVxX2lkLCBhZGFwdGVyLCB1bml0LCAwKTsKLQlpZiAoIWZzZl9yZXEpIHsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibnJlcyIsIGFkYXB0ZXIsIHNjcG50LCBOVUxMLAotCQkJCQkgIG9sZF9yZXFfaWQpOwotCQlyZXR2YWwgPSBGQUlMRUQ7Ci0JCXJldHVybiByZXR2YWw7CisJd2hpbGUgKHJldHJ5LS0pIHsKKwkJYWJydF9yZXEgPSB6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZChvbGRfcmVxX2lkLCB1bml0KTsKKwkJaWYgKGFicnRfcmVxKQorCQkJYnJlYWs7CisKKwkJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKKwkJaWYgKCEoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJgorCQkgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORykpIHsKKwkJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoIm5yZXMiLCBhZGFwdGVyLCBzY3BudCwgTlVMTCwKKwkJCQkJCSAgb2xkX3JlcV9pZCk7CisJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJfQogCX0KKwlpZiAoIWFicnRfcmVxKQorCQlyZXR1cm4gRkFJTEVEOwogCi0JX193YWl0X2V2ZW50KGZzZl9yZXEtPmNvbXBsZXRpb25fd3EsCi0JCSAgICAgZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CisJd2FpdF9ldmVudChhYnJ0X3JlcS0+Y29tcGxldGlvbl93cSwKKwkJICAgYWJydF9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOwogCi0JaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVFNVQ0NFRURFRCkgewotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJva2F5IiwgYWRhcHRlciwgc2NwbnQsIGZzZl9yZXEsIDApOwotCX0gZWxzZSBpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUTk9UTkVFREVEKSB7Ci0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoImx0ZTIiLCBhZGFwdGVyLCBzY3BudCwgZnNmX3JlcSwgMCk7Ci0JfSBlbHNlIHsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgiZmFpbCIsIGFkYXB0ZXIsIHNjcG50LCBmc2ZfcmVxLCAwKTsKKwlpZiAoYWJydF9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVFNVQ0NFRURFRCkKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgib2theSIsIGFkYXB0ZXIsIHNjcG50LCBhYnJ0X3JlcSwgMCk7CisJZWxzZSBpZiAoYWJydF9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVE5PVE5FRURFRCkKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibHRlMiIsIGFkYXB0ZXIsIHNjcG50LCBhYnJ0X3JlcSwgMCk7CisJZWxzZSB7CisJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoImZhaWwiLCBhZGFwdGVyLCBzY3BudCwgYWJydF9yZXEsIDApOwogCQlyZXR2YWwgPSBGQUlMRUQ7CiAJfQotCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwotCisJemZjcF9mc2ZfcmVxX2ZyZWUoYWJydF9yZXEpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF90YXNrX21nbXRfZnVuY3Rpb24oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggdG1fZmxhZ3MsCi0JCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKK3N0YXRpYyBpbnQgemZjcF90YXNrX21nbXRfZnVuY3Rpb24oc3RydWN0IHNjc2lfY21uZCAqc2NwbnQsIHU4IHRtX2ZsYWdzKQogeworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwogCWludCByZXR2YWwgPSBTVUNDRVNTOworCWludCByZXRyeSA9IDM7CiAKLQkvKiBpc3N1ZSB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb24gKi8KLQlmc2ZfcmVxID0gemZjcF9mc2Zfc2VuZF9mY3BfY3RtKGFkYXB0ZXIsIHVuaXQsIHRtX2ZsYWdzLCAwKTsKLQlpZiAoIWZzZl9yZXEpIHsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgibnJlcyIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7Ci0JCXJldHVybiBGQUlMRUQ7CisJd2hpbGUgKHJldHJ5LS0pIHsKKwkJZnNmX3JlcSA9IHpmY3BfZnNmX3NlbmRfZmNwX2N0bSh1bml0LCB0bV9mbGFncyk7CisJCWlmIChmc2ZfcmVxKQorCQkJYnJlYWs7CisKKwkJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKKwkJaWYgKCEoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJgorCQkgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORykpIHsKKwkJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoIm5yZXMiLCB0bV9mbGFncywgdW5pdCwKKwkJCQkJCSAgICAgc2NwbnQpOworCQkJcmV0dXJuIFNVQ0NFU1M7CisJCX0KIAl9CisJaWYgKCFmc2ZfcmVxKQorCQlyZXR1cm4gRkFJTEVEOwogCi0JX193YWl0X2V2ZW50KGZzZl9yZXEtPmNvbXBsZXRpb25fd3EsCi0JCSAgICAgZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CisJd2FpdF9ldmVudChmc2ZfcmVxLT5jb21wbGV0aW9uX3dxLAorCQkgICBmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKIAotCS8qCi0JICogY2hlY2sgY29tcGxldGlvbiBzdGF0dXMgb2YgdGFzayBtYW5hZ2VtZW50IGZ1bmN0aW9uCi0JICovCiAJaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UTUZVTkNGQUlMRUQpIHsKIAkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgiZmFpbCIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CiAJCXJldHZhbCA9IEZBSUxFRDsKQEAgLTIzMCw0MCArMjQ2LDI1IEBACiAJCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoIm9rYXkiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOwogCiAJemZjcF9mc2ZfcmVxX2ZyZWUoZnNmX3JlcSk7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7Ci0KLQlpZiAoIXVuaXQpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCXJldHVybiB6ZmNwX3Rhc2tfbWdtdF9mdW5jdGlvbih1bml0LCBGQ1BfTE9HSUNBTF9VTklUX1JFU0VULCBzY3BudCk7CisJcmV0dXJuIHpmY3BfdGFza19tZ210X2Z1bmN0aW9uKHNjcG50LCBGQ1BfTE9HSUNBTF9VTklUX1JFU0VUKTsKIH0KIAogc3RhdGljIGludCB6ZmNwX3Njc2lfZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCiB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwotCi0JaWYgKCF1bml0KSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiBTVUNDRVNTOwotCX0KLQlyZXR1cm4gemZjcF90YXNrX21nbXRfZnVuY3Rpb24odW5pdCwgRkNQX1RBUkdFVF9SRVNFVCwgc2NwbnQpOworCXJldHVybiB6ZmNwX3Rhc2tfbWdtdF9mdW5jdGlvbihzY3BudCwgRkNQX1RBUkdFVF9SRVNFVCk7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCi0JdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwotCWFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDE0MSwgc2NwbnQpOworCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJzY2hyaF8xIiwgc2NwbnQpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAKIAlyZXR1cm4gU1VDQ0VTUzsKQEAgLTQ3OSw2ICs0ODAsMTA5IEBACiAJcnBvcnQtPmRldl9sb3NzX3RtbyA9IHRpbWVvdXQ7CiB9CiAKKy8qKgorICogemZjcF9zY3NpX2Rldl9sb3NzX3Rtb19jYWxsYmsgLSBGcmVlIGFueSByZWZlcmVuY2UgdG8gcnBvcnQKKyAqIEBycG9ydDogVGhlIHJwb3J0IHRoYXQgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZC4KKyAqLworc3RhdGljIHZvaWQgemZjcF9zY3NpX2Rldl9sb3NzX3Rtb19jYWxsYmsoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3sKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gcnBvcnQtPmRkX2RhdGE7CisKKwl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwlwb3J0LT5ycG9ydCA9IE5VTEw7CisJd3JpdGVfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKK30KKworLyoqCisgKiB6ZmNwX3Njc2lfdGVybWluYXRlX3Jwb3J0X2lvIC0gVGVybWluYXRlIGFsbCBJL08gb24gYSBycG9ydAorICogQHJwb3J0OiBUaGUgRkMgcnBvcnQgd2hlcmUgdG8gdGVtaW5hdGUgSS9PCisgKgorICogQWJvcnQgYWxsIHBlbmRpbmcgU0NTSSBjb21tYW5kcyBmb3IgYSBwb3J0IGJ5IGNsb3NpbmcgdGhlCisgKiBwb3J0LiBVc2luZyBhIHJlb3BlbiBmb3IgYXZvaWRzIGEgY29uZmxpY3Qgd2l0aCBhIHNodXRkb3duCisgKiBvdmVyd3JpdGluZyBhIHJlb3Blbi4KKyAqLworc3RhdGljIHZvaWQgemZjcF9zY3NpX3Rlcm1pbmF0ZV9ycG9ydF9pbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBycG9ydC0+ZGRfZGF0YTsKKworCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJzY3RycGkxIiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHpmY3Bfc2NzaV9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKKworCWlkcy5ub2RlX25hbWUgPSBwb3J0LT53d25uOworCWlkcy5wb3J0X25hbWUgPSBwb3J0LT53d3BuOworCWlkcy5wb3J0X2lkID0gcG9ydC0+ZF9pZDsKKwlpZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7CisKKwlycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZChwb3J0LT5hZGFwdGVyLT5zY3NpX2hvc3QsIDAsICZpZHMpOworCWlmICghcnBvcnQpIHsKKwkJZGV2X2VycigmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAorCQkJIlJlZ2lzdGVyaW5nIHBvcnQgMHglMDE2THggZmFpbGVkXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT53d3BuKTsKKwkJcmV0dXJuOworCX0KKworCXJwb3J0LT5kZF9kYXRhID0gcG9ydDsKKwlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IHBvcnQtPm1heGZyYW1lX3NpemU7CisJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gcG9ydC0+c3VwcG9ydGVkX2NsYXNzZXM7CisJcG9ydC0+cnBvcnQgPSBycG9ydDsKK30KKworc3RhdGljIHZvaWQgemZjcF9zY3NpX3Jwb3J0X2Jsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJaWYgKHBvcnQtPnJwb3J0KQorCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocG9ydC0+cnBvcnQpOworfQorCit2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0FERDsKKworCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnBvcnQtPnJwb3J0X3dvcmspKQorCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworfQorCit2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0RFTDsKKworCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnBvcnQtPnJwb3J0X3dvcmspKQorCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworfQorCit2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydHNfYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpCisJCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9ibG9jayhwb3J0KTsKK30KKwordm9pZCB6ZmNwX3Njc2lfcnBvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemZjcF9wb3J0LAorCQkJCQkgICAgICBycG9ydF93b3JrKTsKKworCXdoaWxlIChwb3J0LT5ycG9ydF90YXNrKSB7CisJCWlmIChwb3J0LT5ycG9ydF90YXNrID09IFJQT1JUX0FERCkgeworCQkJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX05PTkU7CisJCQl6ZmNwX3Njc2lfcnBvcnRfcmVnaXN0ZXIocG9ydCk7CisJCX0gZWxzZSB7CisJCQlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfTk9ORTsKKwkJCXpmY3Bfc2NzaV9ycG9ydF9ibG9jayhwb3J0KTsKKwkJfQorCX0KKworCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKKwogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHpmY3BfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKIAkuc2hvd19zdGFyZ2V0X3BvcnRfaWQgPSAxLAogCS5zaG93X3N0YXJnZXRfcG9ydF9uYW1lID0gMSwKQEAgLTQ5Nyw2ICs2MDEsOCBAQAogCS5yZXNldF9mY19ob3N0X3N0YXRzID0gemZjcF9yZXNldF9mY19ob3N0X3N0YXRzLAogCS5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vID0gemZjcF9zZXRfcnBvcnRfZGV2X2xvc3NfdG1vLAogCS5nZXRfaG9zdF9wb3J0X3N0YXRlID0gemZjcF9nZXRfaG9zdF9wb3J0X3N0YXRlLAorCS5kZXZfbG9zc190bW9fY2FsbGJrID0gemZjcF9zY3NpX2Rldl9sb3NzX3Rtb19jYWxsYmssCisJLnRlcm1pbmF0ZV9ycG9ydF9pbyA9IHpmY3Bfc2NzaV90ZXJtaW5hdGVfcnBvcnRfaW8sCiAJLnNob3dfaG9zdF9wb3J0X3N0YXRlID0gMSwKIAkvKiBubyBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBmb3IgZm9sbG93aW5nIGR5bmFtaWMgYXR0cmlidXRlcyBidXQKIAkgICBkaXJlY3RseSBzZXQgYnkgTExERCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDg5OWFmMmIuLjlhM2I4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTExMiw5ICsxMTIsOSBAQAogCQkgICAgIHpmY3Bfc3lzZnNfIyNfZmVhdCMjX2ZhaWxlZF9zaG93LAkJCSAgICAgICBcCiAJCSAgICAgemZjcF9zeXNmc18jI19mZWF0IyNfZmFpbGVkX3N0b3JlKTsKIAotWkZDUF9TWVNGU19GQUlMRUQoemZjcF9hZGFwdGVyLCBhZGFwdGVyLCBhZGFwdGVyLCA0NCwgOTMpOwotWkZDUF9TWVNGU19GQUlMRUQoemZjcF9wb3J0LCBwb3J0LCBwb3J0LT5hZGFwdGVyLCA0NSwgOTYpOwotWkZDUF9TWVNGU19GQUlMRUQoemZjcF91bml0LCB1bml0LCB1bml0LT5wb3J0LT5hZGFwdGVyLCA0NiwgOTcpOworWkZDUF9TWVNGU19GQUlMRUQoemZjcF9hZGFwdGVyLCBhZGFwdGVyLCBhZGFwdGVyLCAic3lhZmFpMSIsICJzeWFmYWkyIik7CitaRkNQX1NZU0ZTX0ZBSUxFRCh6ZmNwX3BvcnQsIHBvcnQsIHBvcnQtPmFkYXB0ZXIsICJzeXBmYWkxIiwgInN5cGZhaTIiKTsKK1pGQ1BfU1lTRlNfRkFJTEVEKHpmY3BfdW5pdCwgdW5pdCwgdW5pdC0+cG9ydC0+YWRhcHRlciwgInN5dWZhaTEiLCAic3l1ZmFpMiIpOwogCiBzdGF0aWMgc3NpemVfdCB6ZmNwX3N5c2ZzX3BvcnRfcmVzY2FuX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMTY4LDcgKzE2OCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgOTIsIE5VTEwpOworCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgInN5cHJzXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJemZjcF9wb3J0X2RlcXVldWUocG9ydCk7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCXJldHZhbCA9IDA7CiAKLQl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCAwLCA5NCwgTlVMTCk7CisJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgInN5dWFzXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiBvdXQ6CkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCA5NSwgTlVMTCk7CisJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAic3l1cnNfMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIAl6ZmNwX3VuaXRfZGVxdWV1ZSh1bml0KTsKQEAgLTMxOCwxMCArMzE4LDkgQEAKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2Rldi0+aG9zdGRhdGE7CQkJXAogCXN0cnVjdCB6ZmNwX2xhdGVuY2llcyAqbGF0ID0gJnVuaXQtPmxhdGVuY2llczsJCQlcCiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CQlcCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBsb25nIGZzdW0sIGZtaW4sIGZtYXgsIGNzdW0sIGNtaW4sIGNtYXgsIGNjOwlcCiAJCQkJCQkJCQlcCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxhdC0+bG9jaywgZmxhZ3MpOwkJCQlcCisJc3Bpbl9sb2NrX2JoKCZsYXQtPmxvY2spOwkJCQkJXAogCWZzdW0gPSBsYXQtPl9uYW1lLmZhYnJpYy5zdW0gKiBhZGFwdGVyLT50aW1lcl90aWNrczsJCVwKIAlmbWluID0gbGF0LT5fbmFtZS5mYWJyaWMubWluICogYWRhcHRlci0+dGltZXJfdGlja3M7CQlcCiAJZm1heCA9IGxhdC0+X25hbWUuZmFicmljLm1heCAqIGFkYXB0ZXItPnRpbWVyX3RpY2tzOwkJXApAQCAtMzI5LDcgKzMyOCw3IEBACiAJY21pbiA9IGxhdC0+X25hbWUuY2hhbm5lbC5taW4gKiBhZGFwdGVyLT50aW1lcl90aWNrczsJCVwKIAljbWF4ID0gbGF0LT5fbmFtZS5jaGFubmVsLm1heCAqIGFkYXB0ZXItPnRpbWVyX3RpY2tzOwkJXAogCWNjICA9IGxhdC0+X25hbWUuY291bnRlcjsJCQkJCVwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYXQtPmxvY2ssIGZsYWdzKTsJCQlcCisJc3Bpbl91bmxvY2tfYmgoJmxhdC0+bG9jayk7CQkJCQlcCiAJCQkJCQkJCQlcCiAJZG9fZGl2KGZzdW0sIDEwMDApOwkJCQkJCVwKIAlkb19kaXYoZm1pbiwgMTAwMCk7CQkJCQkJXApAQCAtNDg3LDcgKzQ4Niw4IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9CiAJCShzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjc2lfaG9zdC0+aG9zdGRhdGFbMF07CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQgJWxsdVxuIiwgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRhcHRlci0+cmVxX3FfdXRpbCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIocXVldWVfZnVsbCwgU19JUlVHTywgemZjcF9zeXNmc19hZGFwdGVyX3FfZnVsbF9zaG93LCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYyBiL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZWE5MDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYworKysgL2Rldi9udWxsCkBAIC0xLDQ2OSArMCwwIEBACi0vKgotICogIGRyaXZlcnMvczM5MC9zeXNpbmZvLmMKLSAqCi0gKiAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA4Ci0gKiAgQXV0aG9yKHMpOiBVbHJpY2ggV2VpZ2FuZCAoVWxyaWNoLldlaWdhbmRAZGUuaWJtLmNvbSkKLSAqCSAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgotI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2NwY21kLmg+Ci0KLS8qIFNpZ2gsIG1hdGgtZW11LiBEb24ndCBhc2suICovCi0jaW5jbHVkZSA8YXNtL3NmcC11dGlsLmg+Ci0jaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgotI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgotCi1zdGF0aWMgaW5saW5lIGludCBzdHNpXzAodm9pZCkKLXsKLQlpbnQgcmMgPSBzdHNpIChOVUxMLCAwLCAwLCAwKTsKLQlyZXR1cm4gcmMgPT0gLUVOT1NZUyA/IHJjIDogKCgodW5zaWduZWQgaW50KSByYykgPj4gMjgpOwotfQotCi1zdGF0aWMgaW50IHN0c2lfMV8xXzEoc3RydWN0IHN5c2luZm9fMV8xXzEgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCi17Ci0JaWYgKHN0c2koaW5mbywgMSwgMSwgMSkgPT0gLUVOT1NZUykKLQkJcmV0dXJuIGxlbjsKLQotCUVCQ0FTQyhpbmZvLT5tYW51ZmFjdHVyZXIsIHNpemVvZihpbmZvLT5tYW51ZmFjdHVyZXIpKTsKLQlFQkNBU0MoaW5mby0+dHlwZSwgc2l6ZW9mKGluZm8tPnR5cGUpKTsKLQlFQkNBU0MoaW5mby0+bW9kZWwsIHNpemVvZihpbmZvLT5tb2RlbCkpOwotCUVCQ0FTQyhpbmZvLT5zZXF1ZW5jZSwgc2l6ZW9mKGluZm8tPnNlcXVlbmNlKSk7Ci0JRUJDQVNDKGluZm8tPnBsYW50LCBzaXplb2YoaW5mby0+cGxhbnQpKTsKLQlFQkNBU0MoaW5mby0+bW9kZWxfY2FwYWNpdHksIHNpemVvZihpbmZvLT5tb2RlbF9jYXBhY2l0eSkpOwotCUVCQ0FTQyhpbmZvLT5tb2RlbF9wZXJtX2NhcCwgc2l6ZW9mKGluZm8tPm1vZGVsX3Blcm1fY2FwKSk7Ci0JRUJDQVNDKGluZm8tPm1vZGVsX3RlbXBfY2FwLCBzaXplb2YoaW5mby0+bW9kZWxfdGVtcF9jYXApKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTWFudWZhY3R1cmVyOiAgICAgICAgICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+bWFudWZhY3R1cmVyKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVHlwZTogICAgICAgICAgICAgICAgICUtNC40c1xuIiwKLQkJICAgICAgIGluZm8tPnR5cGUpOwotCWlmIChpbmZvLT5tb2RlbFswXSAhPSAnXDAnKQotCQkvKgotCQkgKiBTaWdoOiB0aGUgbW9kZWwgZmllbGQgaGFzIGJlZW4gcmVuYW1lZCB3aXRoIFN5c3RlbSB6OQotCQkgKiB0byBtb2RlbF9jYXBhY2l0eSBhbmQgYSBuZXcgbW9kZWwgZmllbGQgaGFzIGJlZW4gYWRkZWQKLQkJICogYWZ0ZXIgdGhlIHBsYW50IGZpZWxkLiBUbyBhdm9pZCBjb25mdXNpbmcgb2xkZXIgcHJvZ3JhbXMKLQkJICogdGhlICJNb2RlbDoiIHByaW50cyAibW9kZWxfY2FwYWNpdHkgbW9kZWwiIG9yIGp1c3QKLQkJICogIm1vZGVsX2NhcGFjaXR5IiBpZiB0aGUgbW9kZWwgc3RyaW5nIGlzIGVtcHR5IC4KLQkJICovCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCi0JCQkgICAgICAgIk1vZGVsOiAgICAgICAgICAgICAgICAlLTE2LjE2cyAlLTE2LjE2c1xuIiwKLQkJCSAgICAgICBpbmZvLT5tb2RlbF9jYXBhY2l0eSwgaW5mby0+bW9kZWwpOwotCWVsc2UKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1vZGVsOiAgICAgICAgICAgICAgICAlLTE2LjE2c1xuIiwKLQkJCSAgICAgICBpbmZvLT5tb2RlbF9jYXBhY2l0eSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlcXVlbmNlIENvZGU6ICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnNlcXVlbmNlKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUGxhbnQ6ICAgICAgICAgICAgICAgICUtNC40c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgQ2FwYWNpdHk6ICAgICAgICUtMTYuMTZzICUwOHVcbiIsCi0JCSAgICAgICBpbmZvLT5tb2RlbF9jYXBhY2l0eSwgKih1MzIgKikgaW5mby0+bW9kZWxfY2FwX3JhdGluZyk7Ci0JaWYgKGluZm8tPm1vZGVsX3Blcm1fY2FwWzBdICE9ICdcMCcpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCi0JCQkgICAgICAgIk1vZGVsIFBlcm0uIENhcGFjaXR5OiAlLTE2LjE2cyAlMDh1XG4iLAotCQkJICAgICAgIGluZm8tPm1vZGVsX3Blcm1fY2FwLAotCQkJICAgICAgICoodTMyICopIGluZm8tPm1vZGVsX3Blcm1fY2FwX3JhdGluZyk7Ci0JaWYgKGluZm8tPm1vZGVsX3RlbXBfY2FwWzBdICE9ICdcMCcpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCi0JCQkgICAgICAgIk1vZGVsIFRlbXAuIENhcGFjaXR5OiAlLTE2LjE2cyAlMDh1XG4iLAotCQkJICAgICAgIGluZm8tPm1vZGVsX3RlbXBfY2FwLAotCQkJICAgICAgICoodTMyICopIGluZm8tPm1vZGVsX3RlbXBfY2FwX3JhdGluZyk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotI2lmIDAgLyogQ3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIGludCBzdHNpXzFfMl8xKHN0cnVjdCBzeXNpbmZvXzFfMl8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDEsIDIsIDEpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKLQlFQkNBU0MoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOwotCUVCQ0FTQyhpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlcXVlbmNlIENvZGUgb2YgQ1BVOiAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnNlcXVlbmNlKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUGxhbnQgb2YgQ1BVOiAgICAgICAgICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+cGxhbnQpOwotCXJldHVybiBsZW47Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBzdHNpXzFfMl8yKHN0cnVjdCBzeXNpbmZvXzFfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCXN0cnVjdCBzeXNpbmZvXzFfMl8yX2V4dGVuc2lvbiAqZXh0OwotCWludCBpOwotCi0JaWYgKHN0c2koaW5mbywgMSwgMiwgMikgPT0gLUVOT1NZUykKLQkJcmV0dXJuIGxlbjsKLQlleHQgPSAoc3RydWN0IHN5c2luZm9fMV8yXzJfZXh0ZW5zaW9uICopCi0JCSgodW5zaWduZWQgbG9uZykgaW5mbyArIGluZm8tPmFjY19vZmZzZXQpOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNQVXMgVG90YWw6ICAgICAgICAgICAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNwdXNfdG90YWwpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDUFVzIENvbmZpZ3VyZWQ6ICAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX2NvbmZpZ3VyZWQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDUFVzIFN0YW5kYnk6ICAgICAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX3N0YW5kYnkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDUFVzIFJlc2VydmVkOiAgICAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX3Jlc2VydmVkKTsKLQotCWlmIChpbmZvLT5mb3JtYXQgPT0gMSkgewotCQkvKgotCQkgKiBTaWdoIDIuIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiB0aGUgYWx0ZXJuYXRlCi0JCSAqIGNhcGFiaWxpdHkgZmllbGQgaXMgYSAzMiBiaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCi0JCSAqIGlmIHRoZSBoaWdoZXIgb3JkZXIgOCBiaXRzIGFyZSBub3QgemVyby4gUHJpbnRpbmcKLQkJICogYSBmbG9hdGluZyBwb2ludCBudW1iZXIgaW4gdGhlIGtlcm5lbCBpcyBhIG5vLW5vLAotCQkgKiBhbHdheXMgcHJpbnQgdGhlIG51bWJlciBhcyAzMiBiaXQgdW5zaWduZWQgaW50ZWdlci4KLQkJICogVGhlIHVzZXItc3BhY2UgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgc3RyYW5nZQotCQkgKiBlbmNvZGluZyBvZiB0aGUgYWx0ZXJuYXRlIGNwdSBjYXBhYmlsaXR5LgotCQkgKi8KLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNhcGFiaWxpdHk6ICAgICAgICAgICAldSAldVxuIiwKLQkJCSAgICAgICBpbmZvLT5jYXBhYmlsaXR5LCBleHQtPmFsdF9jYXBhYmlsaXR5KTsKLQkJZm9yIChpID0gMjsgaSA8PSBpbmZvLT5jcHVzX3RvdGFsOyBpKyspCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAotCQkJCSAgICAgICAiQWRqdXN0bWVudCAlMDJkLXdheTogICAgJXUgJXVcbiIsCi0JCQkJICAgICAgIGksIGluZm8tPmFkanVzdG1lbnRbaS0yXSwKLQkJCQkgICAgICAgZXh0LT5hbHRfYWRqdXN0bWVudFtpLTJdKTsKLQotCX0gZWxzZSB7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDYXBhYmlsaXR5OiAgICAgICAgICAgJXVcbiIsCi0JCQkgICAgICAgaW5mby0+Y2FwYWJpbGl0eSk7Ci0JCWZvciAoaSA9IDI7IGkgPD0gaW5mby0+Y3B1c190b3RhbDsgaSsrKQotCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKLQkJCQkgICAgICAgIkFkanVzdG1lbnQgJTAyZC13YXk6ICAgICV1XG4iLAotCQkJCSAgICAgICBpLCBpbmZvLT5hZGp1c3RtZW50W2ktMl0pOwotCX0KLQotCWlmIChpbmZvLT5zZWNvbmRhcnlfY2FwYWJpbGl0eSAhPSAwKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2Vjb25kYXJ5IENhcGFiaWxpdHk6ICVkXG4iLAotCQkJICAgICAgIGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5KTsKLQotCXJldHVybiBsZW47Ci19Ci0KLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8yXzJfMShzdHJ1Y3Qgc3lzaW5mb18yXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAyLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDIChpbmZvLT5zZXF1ZW5jZSwgc2l6ZW9mKGluZm8tPnNlcXVlbmNlKSk7Ci0JRUJDQVNDIChpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlcXVlbmNlIENvZGUgb2YgbG9naWNhbCBDUFU6ICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+c2VxdWVuY2UpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJQbGFudCBvZiBsb2dpY2FsIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5wbGFudCk7Ci0JcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IHN0c2lfMl8yXzIoc3RydWN0IHN5c2luZm9fMl8yXzIgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCi17Ci0JaWYgKHN0c2koaW5mbywgMiwgMiwgMikgPT0gLUVOT1NZUykKLQkJcmV0dXJuIGxlbjsKLQotCUVCQ0FTQyAoaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIE51bWJlcjogICAgICAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5scGFyX251bWJlcik7Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDaGFyYWN0ZXJpc3RpY3M6ICIpOwotCWlmIChpbmZvLT5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfREVESUNBVEVEKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRGVkaWNhdGVkICIpOwotCWlmIChpbmZvLT5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfU0hBUkVEKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2hhcmVkICIpOwotCWlmIChpbmZvLT5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfTElNSVRFRCkKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxpbWl0ZWQgIik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKLQkJICAgICAgIGluZm8tPm5hbWUpOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQWRqdXN0bWVudDogICAgICAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNhZik7Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDUFVzIFRvdGFsOiAgICAgICVkXG4iLAotCQkgICAgICAgaW5mby0+Y3B1c190b3RhbCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBDb25maWd1cmVkOiAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNwdXNfY29uZmlndXJlZCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBTdGFuZGJ5OiAgICAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNwdXNfc3RhbmRieSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBSZXNlcnZlZDogICAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNwdXNfcmVzZXJ2ZWQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgRGVkaWNhdGVkOiAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX2RlZGljYXRlZCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBTaGFyZWQ6ICAgICAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNwdXNfc2hhcmVkKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IHN0c2lfM18yXzIoc3RydWN0IHN5c2luZm9fM18yXzIgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlpZiAoc3RzaShpbmZvLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5jb3VudDsgaSsrKSB7Ci0JCUVCQ0FTQyAoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKLQkJRUJDQVNDIChpbmZvLT52bVtpXS5jcGksIHNpemVvZihpbmZvLT52bVtpXS5jcGkpKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCi0JCQkgICAgICAgaSwgaW5mby0+dm1baV0ubmFtZSk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ29udHJvbCBQcm9ncmFtOiAlLTE2LjE2c1xuIiwKLQkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcGkpOwotCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQWRqdXN0bWVudDogICAgICAlZFxuIiwKLQkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jYWYpOwotCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ1BVcyBUb3RhbDogICAgICAlZFxuIiwKLQkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcHVzX3RvdGFsKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDUFVzIENvbmZpZ3VyZWQ6ICVkXG4iLAotCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwdXNfY29uZmlndXJlZCk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ1BVcyBTdGFuZGJ5OiAgICAlZFxuIiwKLQkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcHVzX3N0YW5kYnkpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgUmVzZXJ2ZWQ6ICAgJWRcbiIsCi0JCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c19yZXNlcnZlZCk7Ci0JfQotCXJldHVybiBsZW47Ci19Ci0KLQotc3RhdGljIGludCBwcm9jX3JlYWRfc3lzaW5mbyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGluZm8gPSBnZXRfemVyb2VkX3BhZ2UgKEdGUF9LRVJORUwpOwotCWludCBsZXZlbCwgbGVuOwotCQotCWlmICghaW5mbykKLQkJcmV0dXJuIDA7Ci0KLQlsZW4gPSAwOwotCWxldmVsID0gc3RzaV8wKCk7Ci0JaWYgKGxldmVsID49IDEpCi0JCWxlbiA9IHN0c2lfMV8xXzEoKHN0cnVjdCBzeXNpbmZvXzFfMV8xICopIGluZm8sIHBhZ2UsIGxlbik7Ci0KLQlpZiAobGV2ZWwgPj0gMSkKLQkJbGVuID0gc3RzaV8xXzJfMigoc3RydWN0IHN5c2luZm9fMV8yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKLQotCWlmIChsZXZlbCA+PSAyKQotCQlsZW4gPSBzdHNpXzJfMl8yKChzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqKSBpbmZvLCBwYWdlLCBsZW4pOwotCi0JaWYgKGxldmVsID49IDMpCi0JCWxlbiA9IHN0c2lfM18yXzIoKHN0cnVjdCBzeXNpbmZvXzNfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7Ci0KLQlmcmVlX3BhZ2UgKGluZm8pOwotICAgICAgICByZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zeXNpbmZvKHZvaWQpCi17Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgic3lzaW5mbyIsIDA0NDQsIE5VTEwsCi0JCQkgICAgICAgcHJvY19yZWFkX3N5c2luZm8sIE5VTEwpOwotCXJldHVybiAwOwotfQotCi1fX2luaXRjYWxsKGNyZWF0ZV9wcm9jX3N5c2luZm8pOwotCi0vKgotICogU2VydmljZSBsZXZlbHMgaW50ZXJmYWNlLgotICovCi0KLXN0YXRpYyBERUNMQVJFX1JXU0VNKHNlcnZpY2VfbGV2ZWxfc2VtKTsKLXN0YXRpYyBMSVNUX0hFQUQoc2VydmljZV9sZXZlbF9saXN0KTsKLQotaW50IHJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnNscikKLXsKLQlzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqcHRyOwotCi0JZG93bl93cml0ZSgmc2VydmljZV9sZXZlbF9zZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmc2VydmljZV9sZXZlbF9saXN0LCBsaXN0KQotCQlpZiAocHRyID09IHNscikgewotCQkJdXBfd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKLQkJCXJldHVybiAtRUVYSVNUOwotCQl9Ci0JbGlzdF9hZGRfdGFpbCgmc2xyLT5saXN0LCAmc2VydmljZV9sZXZlbF9saXN0KTsKLQl1cF93cml0ZSgmc2VydmljZV9sZXZlbF9zZW0pOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKTsKLQotaW50IHVucmVnaXN0ZXJfc2VydmljZV9sZXZlbChzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqc2xyKQotewotCXN0cnVjdCBzZXJ2aWNlX2xldmVsICpwdHIsICpuZXh0OwotCWludCByYyA9IC1FTk9FTlQ7Ci0KLQlkb3duX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ciwgbmV4dCwgJnNlcnZpY2VfbGV2ZWxfbGlzdCwgbGlzdCkgewotCQlpZiAocHRyICE9IHNscikKLQkJCWNvbnRpbnVlOwotCQlsaXN0X2RlbCgmcHRyLT5saXN0KTsKLQkJcmMgPSAwOwotCQlicmVhazsKLQl9Ci0JdXBfd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfc2VydmljZV9sZXZlbCk7Ci0KLXN0YXRpYyB2b2lkICpzZXJ2aWNlX2xldmVsX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCi17Ci0JZG93bl9yZWFkKCZzZXJ2aWNlX2xldmVsX3NlbSk7Ci0JcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZzZXJ2aWNlX2xldmVsX2xpc3QsICpwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2VydmljZV9sZXZlbF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIHNlcV9saXN0X25leHQocCwgJnNlcnZpY2VfbGV2ZWxfbGlzdCwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmljZV9sZXZlbF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKLXsKLQl1cF9yZWFkKCZzZXJ2aWNlX2xldmVsX3NlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2VydmljZV9sZXZlbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKLXsKLQlzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqc2xyOwotCi0Jc2xyID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc2VydmljZV9sZXZlbCwgbGlzdCk7Ci0Jc2xyLT5zZXFfcHJpbnQobSwgc2xyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXJ2aWNlX2xldmVsX3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CQk9IHNlcnZpY2VfbGV2ZWxfc3RhcnQsCi0JLm5leHQJCT0gc2VydmljZV9sZXZlbF9uZXh0LAotCS5zdG9wCQk9IHNlcnZpY2VfbGV2ZWxfc3RvcCwKLQkuc2hvdwkJPSBzZXJ2aWNlX2xldmVsX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2VydmljZV9sZXZlbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2VydmljZV9sZXZlbF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VydmljZV9sZXZlbF9vcHMgPSB7Ci0JLm9wZW4JCT0gc2VydmljZV9sZXZlbF9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsgCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UKLX07Ci0KLXN0YXRpYyB2b2lkIHNlcnZpY2VfbGV2ZWxfdm1fcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAotCQkJCSAgIHN0cnVjdCBzZXJ2aWNlX2xldmVsICpzbHIpCi17Ci0JY2hhciAqcXVlcnlfYnVmZmVyLCAqc3RyOwotCi0JcXVlcnlfYnVmZmVyID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JaWYgKCFxdWVyeV9idWZmZXIpCi0JCXJldHVybjsKLQljcGNtZCgiUVVFUlkgQ1BMRVZFTCIsIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7Ci0Jc3RyID0gc3RyY2hyKHF1ZXJ5X2J1ZmZlciwgJ1xuJyk7Ci0JaWYgKHN0cikKLQkJKnN0ciA9IDA7Ci0Jc2VxX3ByaW50ZihtLCAiVk06ICVzXG4iLCBxdWVyeV9idWZmZXIpOwotCWtmcmVlKHF1ZXJ5X2J1ZmZlcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9sZXZlbCBzZXJ2aWNlX2xldmVsX3ZtID0gewotCS5zZXFfcHJpbnQgPSBzZXJ2aWNlX2xldmVsX3ZtX3ByaW50Ci19OwotCi1zdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKHZvaWQpCi17Ci0JcHJvY19jcmVhdGUoInNlcnZpY2VfbGV2ZWxzIiwgMCwgTlVMTCwgJnNlcnZpY2VfbGV2ZWxfb3BzKTsKLQlpZiAoTUFDSElORV9JU19WTSkKLQkJcmVnaXN0ZXJfc2VydmljZV9sZXZlbCgmc2VydmljZV9sZXZlbF92bSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN1YnN5c19pbml0Y2FsbChjcmVhdGVfcHJvY19zZXJ2aWNlX2xldmVsKTsKLQotLyoKLSAqIEJvZ29taXBzIGNhbGN1bGF0aW9uIGJhc2VkIG9uIGNwdSBjYXBhYmlsaXR5LgotICovCi0KLWludCBnZXRfY3B1X2NhcGFiaWxpdHkodW5zaWduZWQgaW50ICpjYXBhYmlsaXR5KQotewotCXN0cnVjdCBzeXNpbmZvXzFfMl8yICppbmZvOwotCWludCByYzsKLQotCWluZm8gPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyYyA9IHN0c2koaW5mbywgMSwgMiwgMik7Ci0JaWYgKHJjID09IC1FTk9TWVMpCi0JCWdvdG8gb3V0OwotCXJjID0gMDsKLQkqY2FwYWJpbGl0eSA9IGluZm8tPmNhcGFiaWxpdHk7Ci1vdXQ6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpbmZvKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDUFUgY2FwYWJpbGl0eSBtaWdodCBoYXZlIGNoYW5nZWQuIFRoZXJlZm9yZSByZWNhbGN1bGF0ZSBsb29wc19wZXJfamlmZnkuCi0gKi8KLXZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKQotewotCXN0cnVjdCBzeXNpbmZvXzFfMl8yICppbmZvOwotCWNvbnN0IHVuc2lnbmVkIGludCBmbWlsID0gMHg0YjE4OTY4MDsJLyogMWU3IGFzIDMyLWJpdCBmbG9hdC4gKi8KLQlGUF9ERUNMX1MoU0EpOyBGUF9ERUNMX1MoU0IpOyBGUF9ERUNMX1MoU1IpOwotCUZQX0RFQ0xfRVg7Ci0JdW5zaWduZWQgaW50IGNhcGFiaWxpdHk7Ci0KLQlpbmZvID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghaW5mbykKLQkJcmV0dXJuOwotCi0JaWYgKHN0c2koaW5mbywgMSwgMiwgMikgIT0gLUVOT1NZUykgewotCQkvKgotCQkgKiBNYWpvciBzaWdoLiBUaGUgY3B1IGNhcGFiaWxpdHkgZW5jb2RpbmcgaXMgInNwZWNpYWwiLgotCQkgKiBJZiB0aGUgZmlyc3QgOSBiaXRzIG9mIGluZm8tPmNhcGFiaWxpdHkgYXJlIDAgdGhlbiBpdAotCQkgKiBpcyBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIC4uIDJeMjMuCi0JCSAqIElmIHRoZSBmaXJzdCA5IGJpdHMgYXJlICE9IDAgdGhlbiBpdCBpcyBhIDMyIGJpdCBmbG9hdC4KLQkJICogSW4gYWRkaXRpb24gYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBwcm9wb3J0aW9uYWxseQotCQkgKiBoaWdoZXIgY3B1IGNhcGFjaXR5LiBCb2dvbWlwcyBhcmUgdGhlIG90aGVyIHdheSByb3VuZC4KLQkJICogVG8gZ2V0IHRvIGEgaGFsZndheSBzdWl0YWJsZSBudW1iZXIgd2UgZGl2aWRlIDFlNwotCQkgKiBieSB0aGUgY3B1IGNhcGFiaWxpdHkgbnVtYmVyLiBZZXMsIHRoYXQgbWVhbnMgYSBmbG9hdGluZwotCQkgKiBwb2ludCBkaXZpc2lvbiAuLiBtYXRoLWVtdSBoZXJlIHdlIGNvbWUgOi0pCi0JCSAqLwotCQlGUF9VTlBBQ0tfU1AoU0EsICZmbWlsKTsKLQkJaWYgKChpbmZvLT5jYXBhYmlsaXR5ID4+IDIzKSA9PSAwKQotCQkJRlBfRlJPTV9JTlRfUyhTQiwgaW5mby0+Y2FwYWJpbGl0eSwgMzIsIGludCk7Ci0JCWVsc2UKLQkJCUZQX1VOUEFDS19TUChTQiwgJmluZm8tPmNhcGFiaWxpdHkpOwotCQlGUF9ESVZfUyhTUiwgU0EsIFNCKTsKLQkJRlBfVE9fSU5UX1MoY2FwYWJpbGl0eSwgU1IsIDMyLCAwKTsKLQl9IGVsc2UKLQkJLyoKLQkJICogUmVhbGx5IG9sZCBtYWNoaW5lIHdpdGhvdXQgc3RzaSBibG9jayBmb3IgYmFzaWMKLQkJICogY3B1IGluZm9ybWF0aW9uLiBSZXBvcnQgNDIuMCBib2dvbWlwcy4KLQkJICovCi0JCWNhcGFiaWxpdHkgPSA0MjsKLQlsb29wc19wZXJfamlmZnkgPSBjYXBhYmlsaXR5ICogKDUwMDAwMC9IWik7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpbmZvKTsKLX0KLQotLyoKLSAqIGNhbGlicmF0ZSB0aGUgZGVsYXkgbG9vcAotICovCi12b2lkIF9fY3B1aW5pdCBjYWxpYnJhdGVfZGVsYXkodm9pZCkKLXsKLQlzMzkwX2FkanVzdF9qaWZmaWVzKCk7Ci0JLyogUHJpbnQgdGhlIGdvb2Qgb2xkIEJvZ29taXBzIGxpbmUgLi4gKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsaWJyYXRpbmcgZGVsYXkgbG9vcCAoc2tpcHBlZCkuLi4gIgotCSAgICAgICAiJWx1LiUwMmx1IEJvZ29NSVBTIHByZXNldFxuIiwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAotCSAgICAgICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKaW5kZXggNTMxMTMxNy4uYTEyNzgzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCkBAIC00LDcgKzQsNyBAQAogICAgV3JpdHRlbiBCeTogQWRhbSBSYWRmb3JkIDxsaW51eHJhaWRAYW1jYy5jb20+CiAgICBNb2RpZmljYXRpb25zIEJ5OiBUb20gQ291Y2ggPGxpbnV4cmFpZEBhbWNjLmNvbT4KIAotICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzUsNiArNzUsNyBAQAogICAgICAgICAgICAgICAgICBBZGQgTVNJIHN1cHBvcnQgYW5kICJ1c2VfbXNpIiBtb2R1bGUgcGFyYW1ldGVyLgogICAgICAgICAgICAgICAgICBGaXggYnVnIGluIHR3YV9nZXRfcGFyYW0oKSBvbiA0R0IrLgogICAgICAgICAgICAgICAgICBVc2UgcGNpX3Jlc291cmNlX2xlbigpIGZvciBpb3JlbWFwKCkuCisgICAyLjI2LjAyLjAxMiAtIEFkZCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC05OSw3ICsxMDAsNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMTEiCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAxMiIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtMjE4Miw2ICsyMTgzLDk4IEBACiAJdHdhX2RldmljZV9leHRlbnNpb25fY291bnQtLTsKIH0gLyogRW5kIHR3YV9yZW1vdmUoKSAqLwogCisjaWZkZWYgQ09ORklHX1BNCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBQQ0kgc3VzcGVuZCAqLworc3RhdGljIGludCB0d2Ffc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2ID0gKFRXX0RldmljZV9FeHRlbnNpb24gKilob3N0LT5ob3N0ZGF0YTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IFN1c3BlbmRpbmcgaG9zdCAlZC5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CisKKwlUV19ESVNBQkxFX0lOVEVSUlVQVFModHdfZGV2KTsKKwlmcmVlX2lycSh0d19kZXYtPnR3X3BjaV9kZXYtPmlycSwgdHdfZGV2KTsKKworCWlmICh0ZXN0X2JpdChUV19VU0lOR19NU0ksICZ0d19kZXYtPmZsYWdzKSkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCisJLyogVGVsbCB0aGUgY2FyZCB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLworCWlmICh0d2FfaW5pdGNvbm5lY3Rpb24odHdfZGV2LCAxLCAwLCAwLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSkgeworCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MzgsICJDb25uZWN0aW9uIHNodXRkb3duIGZhaWxlZCBkdXJpbmcgc3VzcGVuZCIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IFN1c3BlbmQgY29tcGxldGUuXG4iKTsKKwl9CisJVFdfQ0xFQVJfQUxMX0lOVEVSUlVQVFModHdfZGV2KTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfSAvKiBFbmQgdHdhX3N1c3BlbmQoKSAqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBQQ0kgcmVzdW1lICovCitzdGF0aWMgaW50IHR3YV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYgPSAoVFdfRGV2aWNlX0V4dGVuc2lvbiAqKWhvc3QtPmhvc3RkYXRhOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiM3ctOXh4eDogUmVzdW1pbmcgaG9zdCAlZC5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkgeworCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MzksICJFbmFibGUgZGV2aWNlIGZhaWxlZCBkdXJpbmcgcmVzdW1lIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3RyeV9zZXRfbXdpKHBkZXYpOworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spCisJICAgIHx8IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKQorCQkgICAgfHwgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQkJVFdfUFJJTlRLKGhvc3QsIFRXX0RSSVZFUiwgMHg0MCwgIkZhaWxlZCB0byBzZXQgZG1hIG1hc2sgZHVyaW5nIHJlc3VtZSIpOworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCQl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBjYXJkICovCisJaWYgKHR3YV9yZXNldF9zZXF1ZW5jZSh0d19kZXYsIDApKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCX0KKworCS8qIE5vdyBzZXR1cCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHR3YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiM3ctOXh4eCIsIHR3X2Rldik7CisJaWYgKHJldHZhbCkgeworCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4NDIsICJFcnJvciByZXF1ZXN0aW5nIElSUSBkdXJpbmcgcmVzdW1lIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCX0KKworCS8qIE5vdyBlbmFibGUgTVNJIGlmIGVuYWJsZWQgKi8KKwlpZiAodGVzdF9iaXQoVFdfVVNJTkdfTVNJLCAmdHdfZGV2LT5mbGFncykpCisJCXBjaV9lbmFibGVfbXNpKHBkZXYpOworCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgb24gdGhlIGNhcmQgKi8KKwlUV19FTkFCTEVfQU5EX0NMRUFSX0lOVEVSUlVQVFModHdfZGV2KTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IFJlc3VtZSBjb21wbGV0ZS5cbiIpOworCXJldHVybiAwOworCitvdXRfZGlzYWJsZV9kZXZpY2U6CisJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworfSAvKiBFbmQgdHdhX3Jlc3VtZSgpICovCisjZW5kaWYKKwogLyogUENJIERldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF8zV0FSRSwgUENJX0RFVklDRV9JRF8zV0FSRV85MDAwLApAQCAtMjIwMiw2ICsyMjk1LDEwIEBACiAJLmlkX3RhYmxlCT0gdHdhX3BjaV90YmwsCiAJLnByb2JlCQk9IHR3YV9wcm9iZSwKIAkucmVtb3ZlCQk9IHR3YV9yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSB0d2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IHR3YV9yZXN1bWUsCisjZW5kaWYKIAkuc2h1dGRvd24JPSB0d2Ffc2h1dGRvd24KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmggYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCmluZGV4IDE3MjlhODcuLjI4OTNlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguaApAQCAtNCw3ICs0LDcgQEAKICAgIFdyaXR0ZW4gQnk6IEFkYW0gUmFkZm9yZCA8bGludXhyYWlkQGFtY2MuY29tPgogICAgTW9kaWZpY2F0aW9ucyBCeTogVG9tIENvdWNoIDxsaW51eHJhaWRAYW1jYy5jb20+CiAKLSAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggMjU2YzdiZS4uZTJmNDRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTIyNCwxNCArMjI0LDE1IEBACiAJICBjYW4gZW5hYmxlIGxvZ2dpbmcgYnkgc2F5aW5nIFkgdG8gIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnQiIGFuZAogCSAgIlN5c2N0bCBzdXBwb3J0IiBiZWxvdyBhbmQgZXhlY3V0aW5nIHRoZSBjb21tYW5kCiAKLQkgIGVjaG8gInNjc2kgbG9nIHRva2VuIFtsZXZlbF0iID4gL3Byb2Mvc2NzaS9zY3NpCisJICBlY2hvIDxiaXRtYXNrPiA+IC9wcm9jL3N5cy9kZXYvc2NzaS9sb2dnaW5nX2xldmVsCiAKLQkgIGF0IGJvb3QgdGltZSBhZnRlciB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZC4KKwkgIHdoZXJlIDxiaXRtYXNrPiBpcyBhIGZvdXIgYnl0ZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGxvZ2dpbmcgdHlwZQorCSAgYW5kIGxvZ2dpbmcgbGV2ZWwgZm9yIGVhY2ggdHlwZSBvZiBsb2dnaW5nIHNlbGVjdGVkLgogCi0JICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgdGhpbmdzIHRoYXQgY2FuIGJlIHVzZWQgZm9yICd0b2tlbicgKHlvdSBjYW4KLQkgIGZpbmQgdGhlbSBpbiB0aGUgc291cmNlOiA8ZmlsZTpkcml2ZXJzL3Njc2kvc2NzaS5jPiksIGFuZCB0aGlzCi0JICBhbGxvd3MgeW91IHRvIHNlbGVjdCB0aGUgdHlwZXMgb2YgaW5mb3JtYXRpb24geW91IHdhbnQsIGFuZCB0aGUKLQkgIGxldmVsIGFsbG93cyB5b3UgdG8gc2VsZWN0IHRoZSBsZXZlbCBvZiB2ZXJib3NpdHkuCisJICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbG9nZ2luZyB0eXBlcyBhbmQgeW91IGNhbiBmaW5kIHRoZW0gaW4gdGhlCisJICBzb3VyY2UgYXQgPGZpbGU6ZHJpdmVycy9zY3NpL3Njc2lfbG9nZ2luZy5oPi4gVGhlIGxvZ2dpbmcgbGV2ZWxzCisJICBhcmUgYWxzbyBkZXNjcmliZWQgaW4gdGhhdCBmaWxlIGFuZCB0aGV5IGRldGVybWluZSB0aGUgdmVyYm9zaXR5IG9mCisJICB0aGUgbG9nZ2luZyBmb3IgZWFjaCBsb2dnaW5nIHR5cGUuCiAKIAkgIElmIHlvdSBzYXkgTiBoZXJlLCBpdCBtYXkgYmUgaGFyZGVyIHRvIHRyYWNrIGRvd24gc29tZSB0eXBlcyBvZiBTQ1NJCiAJICBwcm9ibGVtcy4gSWYgeW91IHNheSBZIGhlcmUgeW91ciBrZXJuZWwgd2lsbCBiZSBzb21ld2hhdCBsYXJnZXIsIGJ1dApAQCAtNTcwLDYgKzU3MSw3IEBACiAJICBUbyBlbmFibGUgdGhpcyBmdW5jdGlvbiwgY2hvb3NlIFkgaGVyZS4KIAogc291cmNlICJkcml2ZXJzL3Njc2kvbWVnYXJhaWQvS2NvbmZpZy5tZWdhcmFpZCIKK3NvdXJjZSAiZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZyIKIAogY29uZmlnIFNDU0lfSFBUSU9QCiAJdHJpc3RhdGUgIkhpZ2hQb2ludCBSb2NrZXRSQUlEIDN4eHgvNHh4eCBDb250cm9sbGVyIHN1cHBvcnQiCkBAIC02MDgsNiArNjEwLDcgQEAKIGNvbmZpZyBMSUJGQwogCXRyaXN0YXRlICJMaWJGQyBtb2R1bGUiCiAJc2VsZWN0IFNDU0lfRkNfQVRUUlMKKwlzZWxlY3QgQ1JDMzIKIAktLS1oZWxwLS0tCiAJICBGaWJyZSBDaGFubmVsIGxpYnJhcnkgbW9kdWxlCiAKQEAgLTE1MzUsNiArMTUzOCw3IEBACiBjb25maWcgU0NTSV9ERUJVRwogCXRyaXN0YXRlICJTQ1NJIGRlYnVnZ2luZyBob3N0IHNpbXVsYXRvciIKIAlkZXBlbmRzIG9uIFNDU0kKKwlzZWxlY3QgQ1JDX1QxMERJRgogCWhlbHAKIAkgIFRoaXMgaXMgYSBob3N0IGFkYXB0ZXIgc2ltdWxhdG9yIHRoYXQgY2FuIHNpbXVsYXRlIG11bHRpcGxlIGhvc3RzCiAJICBlYWNoIHdpdGggbXVsdGlwbGUgZHVtbXkgU0NTSSBkZXZpY2VzIChkaXNrcykuIEl0IGRlZmF1bHRzIHRvIG9uZQpAQCAtMTgwMyw0ICsxODA3LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3Njc2kvb3NkL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCA3NDYxZWIwLi5jZjc5Mjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC05OSw2ICs5OSw3IEBACiBvYmotJChDT05GSUdfTUVHQVJBSURfTEVHQUNZKQkrPSBtZWdhcmFpZC5vCiBvYmotJChDT05GSUdfTUVHQVJBSURfTkVXR0VOKQkrPSBtZWdhcmFpZC8KIG9iai0kKENPTkZJR19NRUdBUkFJRF9TQVMpCSs9IG1lZ2FyYWlkLworb2JqLSQoQ09ORklHX1NDU0lfTVBUMlNBUykJKz0gbXB0MnNhcy8KIG9iai0kKENPTkZJR19TQ1NJX0FDQVJEKQkrPSBhdHA4NzB1Lm8KIG9iai0kKENPTkZJR19TQ1NJX1NVTkVTUCkJKz0gZXNwX3Njc2kubwlzdW5fZXNwLm8KIG9iai0kKENPTkZJR19TQ1NJX0dEVEgpCQkrPSBnZHRoLm8KQEAgLTEzNyw2ICsxMzgsOCBAQAogb2JqLSQoQ09ORklHX0NIUl9ERVZfU0NIKQkrPSBjaC5vCiBvYmotJChDT05GSUdfU0NTSV9FTkNMT1NVUkUpCSs9IHNlcy5vCiAKK29iai0kKENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IpICs9IG9zZC8KKwogIyBUaGlzIGdvZXMgbGFzdCwgc28gdGhhdCAicmVhbCIgc2NzaSBkZXZpY2VzIHByb2JlIGVhcmxpZXIKIG9iai0kKENPTkZJR19TQ1NJX0RFQlVHKQkrPSBzY3NpX2RlYnVnLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2E0MDAwdC5jIGIvZHJpdmVycy9zY3NpL2E0MDAwdC5jCmluZGV4IGQ0YmRhMjAuLjYxYWYzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hNDAwMHQuYworKysgYi9kcml2ZXJzL3Njc2kvYTQwMDB0LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2RlZmluZSBBNDAwMFRfU0NTSV9BRERSIDB4ZGQwMDQwCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGE0MDAwdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhNDAwMHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YTsKQEAgLTYxLDcgKzYxLDggQEAKIAlob3N0ZGF0YS0+ZGNudGxfZXh0cmEgPSBFQV83MTA7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmE0MDAwdF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZhNDAwMHRfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLAorCQkJICAgICAgJmRldi0+ZGV2KTsKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhNDAwMHQtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTc4LDcgKzc5LDcgQEAKIAkJZ290byBvdXRfcHV0X2hvc3Q7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtOTMsOSArOTQsOSBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgX19kZXZleGl0IGludCBhNDAwMHRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgX19kZXZleGl0IGludCBhNDAwMHRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKQEAgLTEwOCwyNSArMTA5LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhNDAwMHRfc2NzaV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiYTQwMDB0LXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gYTQwMDB0X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChhNDAwMHRfZGV2aWNlX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhNDAwMHRfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gImE0MDAwdC1zY3NpIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBhNDAwMHRfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AoYTQwMDB0X2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYTQwMDB0X3Njc2lfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAlhNDAwMHRfc2NzaV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhNDAwMHQtc2NzaSIsCiAJCQktMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihhNDAwMHRfc2NzaV9kZXZpY2UpKSB7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKGE0MDAwdF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xMzYsNyArMTM5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhNDAwMHRfc2NzaV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYTQwMDB0X3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYTQwMDB0X3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKaW5kZXggNjhhNjQxMi4uYzk5MDJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiB7CiAJaW50IHJldCA9IGxlbmd0aDsKIAotCWlmIChsZW5ndGggPj0gMTEgJiYgc3RyY21wKGJ1ZmZlciwgIkNVTUFOQVNDU0kyIikgPT0gMCkgeworCWlmIChsZW5ndGggPj0gMTEgJiYgc3RybmNtcChidWZmZXIsICJDVU1BTkFTQ1NJMiIsIDExKSA9PSAwKSB7CiAJCWJ1ZmZlciArPSAxMTsKIAkJbGVuZ3RoIC09IDExOwogCkBAIC0zOTAsNyArMzkwLDggQEAKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBmYXMyMTZfZWhfYWJvcnQsCiAJLmNhbl9xdWV1ZQkJCT0gMSwKIAkudGhpc19pZAkJCT0gNywKLQkuc2dfdGFibGVzaXplCQkJPSBTR19BTEwsCisJLnNnX3RhYmxlc2l6ZQkJCT0gU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMsCisJLmRtYV9ib3VuZGFyeQkJCT0gSU9NRF9ETUFfQk9VTkRBUlksCiAJLmNtZF9wZXJfbHVuCQkJPSAxLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUJCQk9ICJjdW1hbmFzY3NpMiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKaW5kZXggYmIyNDc3Yi4uZDg0MzUxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYwpAQCAtNTA4LDcgKzUwOCw4IEBACiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gZmFzMjE2X2VoX2Fib3J0LAogCS5jYW5fcXVldWUJCQk9IDEsCiAJLnRoaXNfaWQJCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJCT0gU0dfQUxMLAorCS5zZ190YWJsZXNpemUJCQk9IFNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTLAorCS5kbWFfYm91bmRhcnkJCQk9IElPTURfRE1BX0JPVU5EQVJZLAogCS5jbWRfcGVyX2x1bgkJCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IERJU0FCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lCQkJPSAiZWVzb3giLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCmluZGV4IGQ5YTU0NmQuLmUyMjk3YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKQEAgLTMwMiw3ICszMDIsOCBAQAogCiAJLmNhbl9xdWV1ZQkJCT0gOCwKIAkudGhpc19pZAkJCT0gNywKLQkuc2dfdGFibGVzaXplCQkJPSBTR19BTEwsCisJLnNnX3RhYmxlc2l6ZQkJCT0gU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMsCisJLmRtYV9ib3VuZGFyeQkJCT0gSU9NRF9ETUFfQk9VTkRBUlksCiAJLmNtZF9wZXJfbHVuCQkJPSAyLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZQkJCT0gInBvd2VydGVjIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDkzYjYxZjEuLjA0NzFmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IF9faW5pdCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKIHsKIAlpbnQgaTsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCAyMWZlMDdmLi5hZDdhMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogI2VuZGlmCiAKIAotaW50IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCitpbnQgX19pbml0IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCiB7CiAJc3RhdGljIGludCBjYWxsZWQgPSAwOwogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKaW5kZXggZDg1OGYzZC4uNTc5OWNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYnZtZTYwMDBfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1idm1lNjAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitidm1lNjAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNTgsNyArNTgsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ2bWU2MDAwLXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC03Myw3ICs3NCw3IEBACiAJCWdvdG8gb3V0X3B1dF9ob3N0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTg3LDkgKzg4LDkgQEAKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQKLWJ2bWU2MDAwX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorYnZtZTYwMDBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKQEAgLTEwMCwyNSArMTAxLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBidm1lNjAwMF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJidm1lNjAwMC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IGJ2bWU2MDAwX3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJ2bWU2MDAwX3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJidm1lNjAwMC1zY3NpIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGJ2bWU2MDAwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYnZtZTYwMDBfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWJ2bWU2MDAwX3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYnZtZTYwMDAtc2NzaSIsCiAJCQkJCQkJICAgICAgIC0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogCQlyZXR1cm4gUFRSX0VSUihidm1lNjAwMF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xMjgsNyArMTMxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBidm1lNjAwMF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihidm1lNjAwMF9zY3NpX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidm1lNjAwMF9zY3NpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NoLmMgYi9kcml2ZXJzL3Njc2kvY2guYwppbmRleCBhZjk3MjU0Li43YjE2MzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY2guYworKysgYi9kcml2ZXJzL3Njc2kvY2guYwpAQCAtNDEsNiArNDEsNyBAQAogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9DSEFOR0VSX01BSk9SKTsKK01PRFVMRV9BTElBU19TQ1NJX0RFVklDRShUWVBFX01FRElVTV9DSEFOR0VSKTsKIAogc3RhdGljIGludCBpbml0ID0gMTsKIG1vZHVsZV9wYXJhbShpbml0LCBpbnQsIDA0NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDQwMDNkZWUuLmU3OWUxODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTEzNzMsMjEgKzEzNzMsMTQgQEAKICJEUklWRVJfSU5WQUxJRCIsICJEUklWRVJfVElNRU9VVCIsICJEUklWRVJfSEFSRCIsICJEUklWRVJfU0VOU0UifTsKICNkZWZpbmUgTlVNX0RSSVZFUkJZVEVfU1RSUyBBUlJBWV9TSVpFKGRyaXZlcmJ5dGVfdGFibGUpCiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHJpdmVyc3VnZ2VzdF90YWJsZVtdPXsiU1VHR0VTVF9PSyIsCi0iU1VHR0VTVF9SRVRSWSIsICJTVUdHRVNUX0FCT1JUIiwgIlNVR0dFU1RfUkVNQVAiLCAiU1VHR0VTVF9ESUUiLAotIlNVR0dFU1RfNSIsICJTVUdHRVNUXzYiLCAiU1VHR0VTVF83IiwgIlNVR0dFU1RfU0VOU0UifTsKLSNkZWZpbmUgTlVNX1NVR0dFU1RfU1RSUyBBUlJBWV9TSVpFKGRyaXZlcnN1Z2dlc3RfdGFibGUpCi0KIHZvaWQgc2NzaV9zaG93X3Jlc3VsdChpbnQgcmVzdWx0KQogewogCWludCBoYiA9IGhvc3RfYnl0ZShyZXN1bHQpOwotCWludCBkYiA9IChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX01BU0spOwotCWludCBzdSA9ICgoZHJpdmVyX2J5dGUocmVzdWx0KSAmIFNVR0dFU1RfTUFTSykgPj4gNCk7CisJaW50IGRiID0gZHJpdmVyX2J5dGUocmVzdWx0KTsKIAotCXByaW50aygiUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzLCVzXG4iLAorCXByaW50aygiUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzXG4iLAogCSAgICAgICAoaGIgPCBOVU1fSE9TVEJZVEVfU1RSUyA/IGhvc3RieXRlX3RhYmxlW2hiXSAgICAgOiAiaW52YWxpZCIpLAotCSAgICAgICAoZGIgPCBOVU1fRFJJVkVSQllURV9TVFJTID8gZHJpdmVyYnl0ZV90YWJsZVtkYl0gOiAiaW52YWxpZCIpLAotCSAgICAgICAoc3UgPCBOVU1fU1VHR0VTVF9TVFJTID8gZHJpdmVyc3VnZ2VzdF90YWJsZVtzdV0gOiAiaW52YWxpZCIpKTsKKwkgICAgICAgKGRiIDwgTlVNX0RSSVZFUkJZVEVfU1RSUyA/IGRyaXZlcmJ5dGVfdGFibGVbZGJdIDogImludmFsaWQiKSk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCmluZGV4IGE4M2QzNmUuLjRlYjZmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfZGRwX2ZpbmRfcGFnZV9pbmRleCAtIHJldHVybiBkZHAgcGFnZSBpbmRleCBmb3IgYSBnaXZlbiBwYWdlIHNpemUuCisgKiBjeGdiM2lfZGRwX2ZpbmRfcGFnZV9pbmRleCAtIHJldHVybiBkZHAgcGFnZSBpbmRleCBmb3IgYSBnaXZlbiBwYWdlIHNpemUKICAqIEBwZ3N6OiBwYWdlIHNpemUKICAqIHJldHVybiB0aGUgZGRwIHBhZ2UgaW5kZXgsIGlmIG5vIG1hdGNoIGlzIGZvdW5kIHJldHVybiBERFBfUEdJRFhfTUFYLgogICovCkBAIC0zNTUsOCArMzU1LDcgQEAKICAqIEB0ZGV2OiB0M2NkZXYgYWRhcHRlcgogICogQHRpZDogY29ubmVjdGlvbiBpZAogICogQHRmb3JtYXQ6IHRhZyBmb3JtYXQKLSAqIEB0YWdwOiB0aGUgcy93IHRhZywgaWYgZGRwIHNldHVwIGlzIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoCi0gKgkgIGRkcC9odyB0YWcKKyAqIEB0YWdwOiBjb250YWlucyBzL3cgdGFnIGluaXRpYWxseSwgd2lsbCBiZSB1cGRhdGVkIHdpdGggZGRwL2h3IHRhZwogICogQGdsOiB0aGUgcGFnZSBtb21vcnkgbGlzdAogICogQGdmcDogYWxsb2NhdGlvbiBtb2RlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfZGRwLmggYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuaAppbmRleCAzZmFhZTc4Li43NWE2M2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuaAorKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuaApAQCAtMTg1LDEyICsxODUsMTEgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfc3dfdGFnX3VzYWJsZSAtIGNoZWNrIGlmIGEgZ2l2ZW4gcy93IHRhZyBoYXMgZW5vdWdoIGJpdHMgbGVmdCBmb3IKLSAqCQkJICB0aGUgcmVzZXJ2ZWQvaHcgYml0cworICogY3hnYjNpX3N3X3RhZ191c2FibGUgLSBjaGVjayBpZiBzL3cgdGFnIGhhcyBlbm91Z2ggYml0cyBsZWZ0IGZvciBodyBiaXRzCiAgKiBAdGZvcm1hdDogdGFnIGZvcm1hdCBpbmZvcm1hdGlvbgogICogQHN3X3RhZzogcy93IHRhZyB0byBiZSBjaGVja2VkCiAgKgotICogcmV0dXJuIHRydWUgaWYgdGhlIHRhZyBpcyBhIGRkcCB0YWcsIGZhbHNlIG90aGVyd2lzZS4KKyAqIHJldHVybiB0cnVlIGlmIHRoZSB0YWcgY2FuIGJlIHVzZWQgZm9yIGh3IGRkcCB0YWcsIGZhbHNlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgY3hnYjNpX3N3X3RhZ191c2FibGUoc3RydWN0IGN4Z2IzaV90YWdfZm9ybWF0ICp0Zm9ybWF0LAogCQkJCQl1MzIgc3dfdGFnKQpAQCAtMjIyLDggKzIyMSw3IEBACiB9CiAKIC8qKgotICogY3hnYjNpX2RkcF90YWdfYmFzZSAtIHNoaWZ0IHRoZSBzL3cgdGFnIGJpdHMgc28gdGhhdCByZXNlcnZlZCBiaXRzIGFyZSBub3QKLSAqCQkJIHVzZWQuCisgKiBjeGdiM2lfZGRwX3RhZ19iYXNlIC0gc2hpZnQgcy93IHRhZyBiaXRzIHNvIHRoYXQgcmVzZXJ2ZWQgYml0cyBhcmUgbm90IHVzZWQKICAqIEB0Zm9ybWF0OiB0YWcgZm9ybWF0IGluZm9ybWF0aW9uCiAgKiBAc3dfdGFnOiBzL3cgdGFnIHRvIGJlIGNoZWNrZWQKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKaW5kZXggZmEyYTQ0Zi4uZTE4NWRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCkBAIC0xMDEsOCArMTAxLDcgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfYWRhcHRlcl9yZW1vdmUgLSByZWxlYXNlIGFsbCB0aGUgcmVzb3VyY2VzIGhlbGQgYW5kIGNsZWFudXAgYW55Ci0gKgloL3cgc2V0dGluZ3MKKyAqIGN4Z2IzaV9hZGFwdGVyX3JlbW92ZSAtIHJlbGVhc2UgdGhlIHJlc291cmNlcyBoZWxkIGFuZCBjbGVhbnVwIGgvdyBzZXR0aW5ncwogICogQHQzZGV2OiB0M2NkZXYgYWRhcHRlcgogICovCiB2b2lkIGN4Z2IzaV9hZGFwdGVyX3JlbW92ZShzdHJ1Y3QgdDNjZGV2ICp0M2RldikKQEAgLTEzNSw4ICsxMzQsNyBAQAogfQogCiAvKioKLSAqIGN4Z2IzaV9oYmFfZmluZF9ieV9uZXRkZXYgLSBmaW5kIHRoZSBjeGdiM2lfaGJhIHN0cnVjdHVyZSB3aXRoIGEgZ2l2ZW4KLSAqCW5ldF9kZXZpY2UKKyAqIGN4Z2IzaV9oYmFfZmluZF9ieV9uZXRkZXYgLSBmaW5kIHRoZSBjeGdiM2lfaGJhIHN0cnVjdHVyZSB2aWEgbmV0X2RldmljZQogICogQHQzZGV2OiB0M2NkZXYgYWRhcHRlcgogICovCiBzdHJ1Y3QgY3hnYjNpX2hiYSAqY3hnYjNpX2hiYV9maW5kX2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTE3MCw4ICsxNjgsNyBAQAogCWludCBlcnI7CiAKIAlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmN4Z2IzaV9ob3N0X3RlbXBsYXRlLAotCQkJCSBzaXplb2Yoc3RydWN0IGN4Z2IzaV9oYmEpLAotCQkJCSBDWEdCM0lfU0NTSV9RREVQVEhfREZMVCk7CisJCQkJIHNpemVvZihzdHJ1Y3QgY3hnYjNpX2hiYSksIDEpOwogCWlmICghc2hvc3QpIHsKIAkJY3hnYjNpX2xvZ19pbmZvKCJpc2NzaV9ob3N0X2FsbG9jIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTMzNSwxMyArMzMyLDEyIEBACiAgKiBAY21kc19tYXg6CQltYXggIyBvZiBjb21tYW5kcwogICogQHFkZXB0aDoJCXNjc2kgcXVldWUgZGVwdGgKICAqIEBpbml0aWFsX2NtZHNuOglpbml0aWFsIGlzY3NpIENNRFNOIGZvciB0aGlzIHNlc3Npb24KLSAqIEBob3N0X25vOgkJcG9pbnRlciB0byByZXR1cm4gaG9zdCBubwogICoKICAqIENyZWF0ZXMgYSBuZXcgaVNDU0kgc2Vzc2lvbgogICovCiBzdGF0aWMgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKIGN4Z2IzaV9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCB1MTYgY21kc19tYXgsIHUxNiBxZGVwdGgsCi0JCSAgICAgIHUzMiBpbml0aWFsX2NtZHNuLCB1MzIgKmhvc3Rfbm8pCisJCSAgICAgIHUzMiBpbml0aWFsX2NtZHNuKQogewogCXN0cnVjdCBjeGdiM2lfZW5kcG9pbnQgKmNlcDsKIAlzdHJ1Y3QgY3hnYjNpX2hiYSAqaGJhOwpAQCAtMzYwLDggKzM1Niw2IEBACiAJY3hnYjNpX2FwaV9kZWJ1ZygiZXAgMHglcCwgY2VwIDB4JXAsIGhiYSAweCVwLlxuIiwgZXAsIGNlcCwgaGJhKTsKIAlCVUdfT04oaGJhICE9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCkpOwogCi0JKmhvc3Rfbm8gPSBzaG9zdC0+aG9zdF9ubzsKLQogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmY3hnYjNpX2lzY3NpX3RyYW5zcG9ydCwgc2hvc3QsCiAJCQkJCSAgY21kc19tYXgsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV90Y3BfdGFzaykgKwpAQCAtMzk0LDkgKzM4OCw5IEBACiB9CiAKIC8qKgotICogY3hnYjNpX2Nvbm5fbWF4X3htaXRfZGxlbmd0aCAtLSBjaGVjayB0aGUgbWF4LiB4bWl0IHBkdSBzZWdtZW50IHNpemUsCi0gKiByZWR1Y2UgaXQgdG8gYmUgd2l0aGluIHRoZSBoYXJkd2FyZSBsaW1pdCBpZiBuZWVkZWQKKyAqIGN4Z2IzaV9jb25uX21heF94bWl0X2RsZW5ndGggLS0gY2FsYyB0aGUgbWF4LiB4bWl0IHBkdSBzZWdtZW50IHNpemUKICAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCisgKiBjaGVjayB0aGUgbWF4LiB4bWl0IHBkdSBwYXlsb2FkLCByZWR1Y2UgaXQgaWYgbmVlZGVkCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGN4Z2IzaV9jb25uX21heF94bWl0X2RsZW5ndGgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCiAKQEAgLTQxNyw4ICs0MTEsNyBAQAogfQogCiAvKioKLSAqIGN4Z2IzaV9jb25uX21heF9yZWN2X2RsZW5ndGggLS0gY2hlY2sgdGhlIG1heC4gcmVjdiBwZHUgc2VnbWVudCBzaXplIGFnYWluc3QKLSAqIHRoZSBoYXJkd2FyZSBsaW1pdAorICogY3hnYjNpX2Nvbm5fbWF4X3JlY3ZfZGxlbmd0aCAtLSBjaGVjayB0aGUgbWF4LiByZWN2IHBkdSBzZWdtZW50IHNpemUKICAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCiAgKiByZXR1cm4gMCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQsIDwgMCBvdGhlcndpc2UuCiAgKi8KQEAgLTc1OSw5ICs3NTIsOSBAQAogCiAvKioKICAqIGN4Z2IzaV9yZXNlcnZlX2l0dCAtIGdlbmVyYXRlIHRhZyBmb3IgYSBnaXZlIHRhc2sKLSAqIFRyeSB0byBzZXQgdXAgZGRwIGZvciBhIHNjc2kgcmVhZCB0YXNrLgogICogQHRhc2s6IGlzY3NpIHRhc2sKICAqIEBoZHJfaXR0OiB0YWcsIGZpbGxlZCBpbiBieSB0aGlzIGZ1bmN0aW9uCisgKiBTZXQgdXAgZGRwIGZvciBzY3NpIHJlYWQgdGFza3MgaWYgcG9zc2libGUuCiAgKi8KIGludCBjeGdiM2lfcmVzZXJ2ZV9pdHQoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIGl0dF90ICpoZHJfaXR0KQogewpAQCAtODA5LDkgKzgwMiw5IEBACiAKIC8qKgogICogY3hnYjNpX3JlbGVhc2VfaXR0IC0gcmVsZWFzZSB0aGUgdGFnIGZvciBhIGdpdmVuIHRhc2sKLSAqIGlmIHRoZSB0YWcgaXMgYSBkZHAgdGFnLCByZWxlYXNlIHRoZSBkZHAgc2V0dXAKICAqIEB0YXNrOglpc2NzaSB0YXNrCiAgKiBAaGRyX2l0dDoJdGFnCisgKiBJZiB0aGUgdGFnIGlzIGEgZGRwIHRhZywgcmVsZWFzZSB0aGUgZGRwIHNldHVwCiAgKi8KIHZvaWQgY3hnYjNpX3JlbGVhc2VfaXR0KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBpdHRfdCBoZHJfaXR0KQogewpAQCAtODQzLDcgKzgzNiw3IEBACiAJLmNhbl9xdWV1ZQkJPSBDWEdCM0lfU0NTSV9RREVQVEhfREZMVCAtIDEsCiAJLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKLQkuY21kX3Blcl9sdW4JCT0gSVNDU0lfREVGX0NNRF9QRVJfTFVOLAorCS5jbWRfcGVyX2x1bgkJPSBDWEdCM0lfU0NTSV9RREVQVEhfREZMVCwKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKaW5kZXggZGUzYjNiNi4uYzJlNDM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwpAQCAtMTQxNyw4ICsxNDE3LDcgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfYzNjbl9yZWxlYXNlIC0gY2xvc2UgYW5kIHJlbGVhc2UgYW4gaXNjc2kgdGNwIGNvbm5lY3Rpb24gYW5kIGFueQotICogCXJlc291cmNlIGhlbGQKKyAqIGN4Z2IzaV9jM2NuX3JlbGVhc2UgLSBjbG9zZSBhbmQgcmVsZWFzZSBhbiBpc2NzaSB0Y3AgY29ubmVjdGlvbgogICogQGMzY246IHRoZSBpc2NzaSB0Y3AgY29ubmVjdGlvbgogICovCiB2b2lkIGN4Z2IzaV9jM2NuX3JlbGVhc2Uoc3RydWN0IHMzX2Nvbm4gKmMzY24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmggYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmgKaW5kZXggNjM0NGI5ZS4uMjc1ZjIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuaApAQCAtMTM5LDYgKzEzOSw3IEBACiAKIC8qKgogICogY3hnYjNpX3NkZXZfZGF0YSAtIFBlciBhZGFwdGVyIGRhdGEuCisgKgogICogTGlua2VkIG9mZiBvZiBlYWNoIEV0aGVybmV0IGRldmljZSBwb3J0IG9uIHRoZSBhZGFwdGVyLgogICogQWxzbyBhdmFpbGFibGUgdmlhIHRoZSB0M2NkZXYgc3RydWN0dXJlIHNpbmNlIHdlIGhhdmUgcG9pbnRlcnMgdG8gb3VyIHBvcnQKICAqIG5ldF9kZXZpY2UncyB0aGVyZSAuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKaW5kZXggMTcxMTVjMi4uN2VlYmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogCWN4Z2IzaV90eF9kZWJ1ZygiY24gMHglcC5cbiIsIGMzY24pOwogCWlmIChjb25uKSB7CiAJCWN4Z2IzaV90eF9kZWJ1ZygiY24gMHglcCwgY2lkICVkLlxuIiwgYzNjbiwgY29ubi0+aWQpOwotCQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IGUzNTZiNDMuLmRiYTE1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTI0Nyw4ICsyNDcsOCBAQAogCS8qIFByZXBhcmUgdGhlIGRhdGEgYnVmZmVyICovCiAJbWVtc2V0KGgtPmJ1ZmYsIDAsIHN0cGdfbGVuKTsKIAloLT5idWZmWzRdID0gVFBHU19TVEFURV9PUFRJTUlaRUQgJiAweDBmOwotCWgtPmJ1ZmZbNl0gPSAoaC0+Z3JvdXBfaWQgPj4gOCkgJiAweDBmOwotCWgtPmJ1ZmZbN10gPSBoLT5ncm91cF9pZCAmIDB4MGY7CisJaC0+YnVmZls2XSA9IChoLT5ncm91cF9pZCA+PiA4KSAmIDB4ZmY7CisJaC0+YnVmZls3XSA9IGgtPmdyb3VwX2lkICYgMHhmZjsKIAogCXJxID0gZ2V0X2FsdWFfcmVxKHNkZXYsIGgtPmJ1ZmYsIHN0cGdfbGVuLCBXUklURSk7CiAJaWYgKCFycSkKQEAgLTQ2MSw2ICs0NjEsMTUgQEAKIAkJCSAqLwogCQkJcmV0dXJuIEFERF9UT19NTFFVRVVFOwogCQl9CisJCWlmIChzZW5zZV9oZHItPmFzYyA9PSAweDNmICYmIHNlbnNlX2hkci0+YXNjcSA9PSAweDBlKSB7CisJCQkvKgorCQkJICogUkVQT1JURURfTFVOU19EQVRBX0hBU19DSEFOR0VEIGlzIHJlcG9ydGVkCisJCQkgKiB3aGVuIHN3aXRjaGluZyBjb250cm9sbGVycyBvbiB0YXJnZXRzIGxpa2UKKwkJCSAqIEludGVsIE11bHRpLUZsZXguIFdlIGNhbiBqdXN0IHJldHJ5LgorCQkJICovCisJCQlyZXR1cm4gQUREX1RPX01MUVVFVUU7CisJCX0KKwogCQlicmVhazsKIAl9CiAKQEAgLTY5MSw2ICs3MDAsNyBAQAogCXsiSUJNIiwgIjIxMDc5MDAiIH0sCiAJeyJJQk0iLCAiMjE0NSIgfSwKIAl7IlBpbGxhciIsICJBeGlvbSIgfSwKKwl7IkludGVsIiwgIk11bHRpLUZsZXgifSwKIAl7TlVMTCwgTlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwppbmRleCA1MzY2NDc2Li40M2I4YzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCkBAIC00NDksMjggKzQ0OSw0MCBAQAogCQkJCSAgICB1bnNpZ25lZCBjaGFyICpzZW5zZWJ1ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc2Vuc2VfaGRyOwotCWludCBzZW5zZSwgZXJyID0gU0NTSV9ESF9JTywgcmV0OworCWludCBlcnIgPSBTQ1NJX0RIX0lPLCByZXQ7CiAKIAlyZXQgPSBzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZWJ1ZiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCAmc2Vuc2VfaGRyKTsKIAlpZiAoIXJldCkKIAkJZ290byBkb25lOwogCiAJZXJyID0gU0NTSV9ESF9PSzsKLQlzZW5zZSA9IChzZW5zZV9oZHIuc2Vuc2Vfa2V5IDw8IDE2KSB8IChzZW5zZV9oZHIuYXNjIDw8IDgpIHwKLQkJCXNlbnNlX2hkci5hc2NxOwotCS8qIElmIGl0IGlzIHJldHJ5YWJsZSBmYWlsdXJlLCBzdWJtaXQgdGhlIGM5IGlucXVpcnkgYWdhaW4gKi8KLQlpZiAoc2Vuc2UgPT0gMHg1OTEzNiB8fCBzZW5zZSA9PSAweDY4YjAyIHx8IHNlbnNlID09IDB4YjhiMDIgfHwKLQkJCSAgICBzZW5zZSA9PSAweDYyOTAwKSB7Ci0JCS8qIDB4NTkxMzYgICAgLSBDb21tYW5kIGxvY2sgY29udGVudGlvbgotCQkgKiAweFs2Yl04YjAyIC0gUXVpZXNlbnNlIGluIHByb2dyZXNzIG9yIGFjaGlldmVkCi0JCSAqIDB4NjI5MDAgICAgLSBQb3dlciBPbiwgUmVzZXQsIG9yIEJ1cyBEZXZpY2UgUmVzZXQKLQkJICovCisKKwlzd2l0Y2ggKHNlbnNlX2hkci5zZW5zZV9rZXkpIHsKKwljYXNlIE5PX1NFTlNFOgorCWNhc2UgQUJPUlRFRF9DT01NQU5EOgorCWNhc2UgVU5JVF9BVFRFTlRJT046CiAJCWVyciA9IFNDU0lfREhfUkVUUlk7CisJCWJyZWFrOworCWNhc2UgTk9UX1JFQURZOgorCQlpZiAoc2Vuc2VfaGRyLmFzYyA9PSAweDA0ICYmIHNlbnNlX2hkci5hc2NxID09IDB4MDEpCisJCQkvKiBMVU4gTm90IFJlYWR5IGFuZCBpcyBpbiB0aGUgUHJvY2VzcyBvZiBCZWNvbWluZworCQkJICogUmVhZHkKKwkJCSAqLworCQkJZXJyID0gU0NTSV9ESF9SRVRSWTsKKwkJYnJlYWs7CisJY2FzZSBJTExFR0FMX1JFUVVFU1Q6CisJCWlmIChzZW5zZV9oZHIuYXNjID09IDB4OTEgJiYgc2Vuc2VfaGRyLmFzY3EgPT0gMHgzNikKKwkJCS8qCisJCQkgKiBDb21tYW5kIExvY2sgY29udGVudGlvbgorCQkJICovCisJCQllcnIgPSBTQ1NJX0RIX1JFVFJZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkgICAgIk1PREVfU0VMRUNUIGZhaWxlZCB3aXRoIHNlbnNlICUwMngvJTAyeC8lMDJ4LlxuIiwKKwkJCSAgICBzZW5zZV9oZHIuc2Vuc2Vfa2V5LCBzZW5zZV9oZHIuYXNjLCBzZW5zZV9oZHIuYXNjcSk7CiAJfQogCi0JaWYgKHNlbnNlKQotCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCi0JCQkiTU9ERV9TRUxFQ1QgZmFpbGVkIHdpdGggc2Vuc2UgMHgleC5cbiIsIHNlbnNlKTsKIGRvbmU6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTU2Miw2ICs1NzQsMTIgQEAKIAkJCSAqIEp1c3QgcmV0cnkgYW5kIHdhaXQuCiAJCQkgKi8KIAkJCXJldHVybiBBRERfVE9fTUxRVUVVRTsKKwkJaWYgKHNlbnNlX2hkci0+YXNjID09IDB4QTEgICYmIHNlbnNlX2hkci0+YXNjcSA9PSAweDAyKQorCQkJLyogTFVOIE5vdCBSZWFkeSAtIFF1aWVzY2Vuc2UgaW4gcHJvZ3Jlc3MKKwkJCSAqIG9yIGhhcyBiZWVuIGFjaGlldmVkCisJCQkgKiBKdXN0IHJldHJ5LgorCQkJICovCisJCQlyZXR1cm4gQUREX1RPX01MUVVFVUU7CiAJCWJyZWFrOwogCWNhc2UgSUxMRUdBTF9SRVFVRVNUOgogCQlpZiAoc2Vuc2VfaGRyLT5hc2MgPT0gMHg5NCAmJiBzZW5zZV9oZHItPmFzY3EgPT0gMHgwMSkgewpAQCAtNTc5LDYgKzU5NywxMSBAQAogCQkJICogUG93ZXIgT24sIFJlc2V0LCBvciBCdXMgRGV2aWNlIFJlc2V0LCBqdXN0IHJldHJ5LgogCQkJICovCiAJCQlyZXR1cm4gQUREX1RPX01MUVVFVUU7CisJCWlmIChzZW5zZV9oZHItPmFzYyA9PSAweDhiICYmIHNlbnNlX2hkci0+YXNjcSA9PSAweDAyKQorCQkJLyoKKwkJCSAqIFF1aWVzY2VuY2UgaW4gcHJvZ3Jlc3MgLCBqdXN0IHJldHJ5LgorCQkJICovCisJCQlyZXR1cm4gQUREX1RPX01MUVVFVUU7CiAJCWJyZWFrOwogCX0KIAkvKiBzdWNjZXNzIGp1c3QgbWVhbnMgd2UgZG8gbm90IGNhcmUgd2hhdCBzY3NpLW1sIGRvZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2Vfc3cuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2Vfc3cuYwppbmRleCBkYTIxMGViLi4yYmJiZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3N3LmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9zdy5jCkBAIC0xMzMsNiArMTMzLDEzIEBACiAJLyogbHBvcnQgZmNfbHBvcnQgcmVsYXRlZCBjb25maWd1cmF0aW9uICovCiAJZmNfbHBvcnRfY29uZmlnKGxwKTsKIAorCS8qIG9mZmxvYWQgcmVsYXRlZCBjb25maWd1cmF0aW9uICovCisJbHAtPmNyY19vZmZsb2FkID0gMDsKKwlscC0+c2VxX29mZmxvYWQgPSAwOworCWxwLT5scm9fZW5hYmxlZCA9IDA7CisJbHAtPmxyb194aWQgPSAwOworCWxwLT5sc29fbWF4ID0gMDsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODYsNyArMTkzLDI3IEBACiAJaWYgKGZjLT5yZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQogCQlscC0+c2dfc3VwcCA9IDE7CiAKLQorI2lmZGVmIE5FVElGX0ZfRkNPRV9DUkMKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9DUkMpIHsKKwkJbHAtPmNyY19vZmZsb2FkID0gMTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImZjb2U6JXMgc3VwcG9ydHMgRkNDUkMgb2ZmbG9hZFxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJfQorI2VuZGlmCisjaWZkZWYgTkVUSUZfRl9GU08KKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlNPKSB7CisJCWxwLT5zZXFfb2ZmbG9hZCA9IDE7CisJCWxwLT5sc29fbWF4ID0gbmV0ZGV2LT5nc29fbWF4X3NpemU7CisJCXByaW50ayhLRVJOX0RFQlVHICJmY29lOiVzIHN1cHBvcnRzIExTTyBmb3IgbWF4IGxlbiAweCV4XG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBscC0+bHNvX21heCk7CisJfQorI2VuZGlmCisJaWYgKG5ldGRldi0+ZmNvZV9kZHBfeGlkKSB7CisJCWxwLT5scm9fZW5hYmxlZCA9IDE7CisJCWxwLT5scm9feGlkID0gbmV0ZGV2LT5mY29lX2RkcF94aWQ7CisJCXByaW50ayhLRVJOX0RFQlVHICJmY29lOiVzIHN1cHBvcnRzIExSTyBmb3IgbWF4IHhpZCAweCV4XG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBscC0+bHJvX3hpZCk7CisJfQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUpOwogCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMDsKIApAQCAtMzQ2LDggKzM3Myw0NiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogZmNvZV9zd19kZHBfc2V0dXAgLSBjYWxscyBMTEQncyBkZHBfc2V0dXAgdGhyb3VnaCBuZXRfZGV2aWNlCisgKiBAbHA6CXRoZSBjb3JyZXNwb25kaW5nIGZjX2xwb3J0CisgKiBAeGlkOiB0aGUgZXhjaGFuZ2UgaWQgZm9yIHRoaXMgZGRwIHRyYW5zZmVyCisgKiBAc2dsOiB0aGUgc2NhdHRlcmxpc3QgZGVzY3JpYmluZyB0aGlzIHRyYW5zZmVyCisgKiBAc2djOiBudW1iZXIgb2Ygc2cgaXRlbXMKKyAqCisgKiBSZXR1cm5zIDogMCBubyBkZHAKKyAqLworc3RhdGljIGludCBmY29lX3N3X2RkcF9zZXR1cChzdHJ1Y3QgZmNfbHBvcnQgKmxwLCB1MTYgeGlkLAorCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnYykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbiA9IGZjb2VfbmV0ZGV2KGxwKTsKKworCWlmIChuLT5uZXRkZXZfb3BzICYmIG4tPm5ldGRldl9vcHMtPm5kb19mY29lX2RkcF9zZXR1cCkKKwkJcmV0dXJuIG4tPm5ldGRldl9vcHMtPm5kb19mY29lX2RkcF9zZXR1cChuLCB4aWQsIHNnbCwgc2djKTsKKworCXJldHVybiAwOworfQorCisvKgorICogZmNvZV9zd19kZHBfZG9uZSAtIGNhbGxzIExMRCdzIGRkcF9kb25lIHRocm91Z2ggbmV0X2RldmljZQorICogQGxwOgl0aGUgY29ycmVzcG9uZGluZyBmY19scG9ydAorICogQHhpZDogdGhlIGV4Y2hhbmdlIGlkIGZvciB0aGlzIGRkcCB0cmFuc2ZlcgorICoKKyAqIFJldHVybnMgOiB0aGUgbGVuZ3RoIG9mIGRhdGEgdGhhdCBoYXZlIGJlZW4gY29tcGxldGVkIGJ5IGRkcAorICovCitzdGF0aWMgaW50IGZjb2Vfc3dfZGRwX2RvbmUoc3RydWN0IGZjX2xwb3J0ICpscCwgdTE2IHhpZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbiA9IGZjb2VfbmV0ZGV2KGxwKTsKKworCWlmIChuLT5uZXRkZXZfb3BzICYmIG4tPm5ldGRldl9vcHMtPm5kb19mY29lX2RkcF9kb25lKQorCQlyZXR1cm4gbi0+bmV0ZGV2X29wcy0+bmRvX2Zjb2VfZGRwX2RvbmUobiwgeGlkKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSBmY29lX3N3X2xpYmZjX2Zjbl90ZW1wbCA9IHsKIAkuZnJhbWVfc2VuZCA9IGZjb2VfeG1pdCwKKwkuZGRwX3NldHVwID0gZmNvZV9zd19kZHBfc2V0dXAsCisJLmRkcF9kb25lID0gZmNvZV9zd19kZHBfZG9uZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCmluZGV4IDU1NDhiZjMuLjBkNmY1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiAJLyogY3JjIG9mZmxvYWQgKi8KIAlpZiAobGlrZWx5KGxwLT5jcmNfb2ZmbG9hZCkpIHsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCQlza2ItPmNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKTsKIAkJc2tiLT5jc3VtX29mZnNldCA9IHNrYi0+bGVuOwogCQljcmMgPSAwOwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlza2ItPm1hY19sZW4gPSBlbGVuOwotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMyk7CisJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0ZDT0UpOwogCXNrYi0+ZGV2ID0gZmMtPnJlYWxfZGV2OwogCiAJLyogZmlsbCB1cCBtYWMgYW5kIGZjb2UgaGVhZGVycyAqLwpAQCAtNDgzLDYgKzQ4MywxNiBAQAogCQlGQ19GQ09FX0VOQ0FQU19WRVIoaHAsIEZDX0ZDT0VfVkVSKTsKIAlocC0+ZmNvZV9zb2YgPSBzb2Y7CiAKKyNpZmRlZiBORVRJRl9GX0ZTTworCS8qIGZjb2UgbHNvLCBtc3MgaXMgaW4gbWF4X3BheWxvYWQgd2hpY2ggaXMgbm9uLXplcm8gZm9yIEZDUCBkYXRhICovCisJaWYgKGxwLT5zZXFfb2ZmbG9hZCAmJiBmcl9tYXhfcGF5bG9hZChmcCkpIHsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fRkNPRTsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IGZyX21heF9wYXlsb2FkKGZwKTsKKwl9IGVsc2UgeworCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gMDsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IDA7CisJfQorI2VuZGlmCiAJLyogdXBkYXRlIHR4IHN0YXRzOiByZWdhcmRsZXNzIGlmIExMRCBmYWlscyAqLwogCXN0YXRzID0gbHAtPmRldl9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldOwogCWlmIChzdGF0cykgewpAQCAtNjIzLDcgKzYzMyw3IEBACiAJCSAqIGl0J3Mgc29saWNpdGVkIGRhdGEsIGluIHdoaWNoIGNhc2UsIHRoZSBGQ1AgbGF5ZXIgd291bGQKIAkJICogY2hlY2sgaXQgZHVyaW5nIHRoZSBjb3B5LgogCQkgKi8KLQkJaWYgKGxwLT5jcmNfb2ZmbG9hZCkKKwkJaWYgKGxwLT5jcmNfb2ZmbG9hZCAmJiBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKIAkJCWZyX2ZsYWdzKGZwKSAmPSB+RkNQSEZfQ1JDX1VOQ0hFQ0tFRDsKIAkJZWxzZQogCQkJZnJfZmxhZ3MoZnApIHw9IEZDUEhGX0NSQ19VTkNIRUNLRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IGFhNjcwYTEuLjg5ZDQxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0xNzYsNyArMTc2LDYgQEAKIAl0cmFuc3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwogCWRldmljZV91bnJlZ2lzdGVyKCZzaG9zdC0+c2hvc3RfZGV2KTsKIAlkZXZpY2VfZGVsKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKLQlzY3NpX3Byb2NfaG9zdGRpcl9ybShzaG9zdC0+aG9zdHQpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX3JlbW92ZV9ob3N0KTsKIApAQCAtMjcwLDYgKzI2OSw4IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtPnBhcmVudDsKIAorCXNjc2lfcHJvY19ob3N0ZGlyX3JtKHNob3N0LT5ob3N0dCk7CisKIAlpZiAoc2hvc3QtPmVoYW5kbGVyKQogCQlrdGhyZWFkX3N0b3Aoc2hvc3QtPmVoYW5kbGVyKTsKIAlpZiAoc2hvc3QtPndvcmtfcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwppbmRleCAzNGJlODhkLi5hZjFmMGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCkBAIC01ODAsOCArNTgwLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlzY3AtPnJlc3VsdCA9ICgoRFJJVkVSX0lOVkFMSUR8U1VHR0VTVF9BQk9SVCk8PDI0KSB8Ci0JCQkJCShESURfQUJPUlQ8PDE2KTsKKwkJc2NwLT5yZXN1bHQgPSBEUklWRVJfSU5WQUxJRCA8PCAyNCB8IERJRF9BQk9SVCA8PCAxNjsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKaW5kZXggZWQxZTcyOC4uOTNkMWZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwpAQCAtMjc2Nyw2ICsyNzY3LDQwIEBACiAJCWlibXZmY19pbml0X3RndCh0Z3QsIGpvYl9zdGVwKTsKIH0KIAorLyogRGVmaW5lZCBpbiBGQy1MUyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IGNvZGU7CisJaW50IHJldHJ5OworCWludCBsb2dnZWRfaW47Cit9IHBybGlfcnNwIFtdID0geworCXsgMCwgMSwgMCB9LAorCXsgMSwgMCwgMSB9LAorCXsgMiwgMSwgMCB9LAorCXsgMywgMSwgMCB9LAorCXsgNCwgMCwgMCB9LAorCXsgNSwgMCwgMCB9LAorCXsgNiwgMCwgMSB9LAorCXsgNywgMCwgMCB9LAorCXsgOCwgMSwgMCB9LAorfTsKKworLyoqCisgKiBpYm12ZmNfZ2V0X3BybGlfcnNwIC0gRmluZCBQUkxJIHJlc3BvbnNlIGluZGV4CisgKiBAZmxhZ3M6CVBSTEkgcmVzcG9uc2UgZmxhZ3MKKyAqCisgKiovCitzdGF0aWMgaW50IGlibXZmY19nZXRfcHJsaV9yc3AodTE2IGZsYWdzKQoreworCWludCBpOworCWludCBjb2RlID0gKGZsYWdzICYgMHgwZjAwKSA+PiA4OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJsaV9yc3ApOyBpKyspCisJCWlmIChwcmxpX3JzcFtpXS5jb2RlID09IGNvZGUpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIGlibXZmY190Z3RfcHJsaV9kb25lIC0gQ29tcGxldGlvbiBoYW5kbGVyIGZvciBQcm9jZXNzIExvZ2luCiAgKiBAZXZ0OglpYm12ZmMgZXZlbnQgc3RydWN0CkBAIC0yNzc3LDE1ICsyODExLDM2IEBACiAJc3RydWN0IGlibXZmY190YXJnZXQgKnRndCA9IGV2dC0+dGd0OwogCXN0cnVjdCBpYm12ZmNfaG9zdCAqdmhvc3QgPSBldnQtPnZob3N0OwogCXN0cnVjdCBpYm12ZmNfcHJvY2Vzc19sb2dpbiAqcnNwID0gJmV2dC0+eGZlcl9pdS0+cHJsaTsKKwlzdHJ1Y3QgaWJtdmZjX3BybGlfc3ZjX3Bhcm1zICpwYXJtcyA9ICZyc3AtPnBhcm1zOwogCXUzMiBzdGF0dXMgPSByc3AtPmNvbW1vbi5zdGF0dXM7CisJaW50IGluZGV4OwogCiAJdmhvc3QtPmRpc2NvdmVyeV90aHJlYWRzLS07CiAJaWJtdmZjX3NldF90Z3RfYWN0aW9uKHRndCwgSUJNVkZDX1RHVF9BQ1RJT05fTk9ORSk7CiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIElCTVZGQ19NQURfU1VDQ0VTUzoKLQkJdGd0X2RiZyh0Z3QsICJQcm9jZXNzIExvZ2luIHN1Y2NlZWRlZFxuIik7Ci0JCXRndC0+bmVlZF9sb2dpbiA9IDA7Ci0JCWlibXZmY19zZXRfdGd0X2FjdGlvbih0Z3QsIElCTVZGQ19UR1RfQUNUSU9OX0FERF9SUE9SVCk7CisJCXRndF9kYmcodGd0LCAiUHJvY2VzcyBMb2dpbiBzdWNjZWVkZWQ6ICVYICUwMlggJTA0WFxuIiwKKwkJCXBhcm1zLT50eXBlLCBwYXJtcy0+ZmxhZ3MsIHBhcm1zLT5zZXJ2aWNlX3Bhcm1zKTsKKworCQlpZiAocGFybXMtPnR5cGUgPT0gSUJNVkZDX1NDU0lfRkNQX1RZUEUpIHsKKwkJCWluZGV4ID0gaWJtdmZjX2dldF9wcmxpX3JzcChwYXJtcy0+ZmxhZ3MpOworCQkJaWYgKHBybGlfcnNwW2luZGV4XS5sb2dnZWRfaW4pIHsKKwkJCQlpZiAocGFybXMtPmZsYWdzICYgSUJNVkZDX1BSTElfRVNUX0lNR19QQUlSKSB7CisJCQkJCXRndC0+bmVlZF9sb2dpbiA9IDA7CisJCQkJCXRndC0+aWRzLnJvbGVzID0gMDsKKwkJCQkJaWYgKHBhcm1zLT5zZXJ2aWNlX3Bhcm1zICYgSUJNVkZDX1BSTElfVEFSR0VUX0ZVTkMpCisJCQkJCQl0Z3QtPmlkcy5yb2xlcyB8PSBGQ19QT1JUX1JPTEVfRkNQX1RBUkdFVDsKKwkJCQkJaWYgKHBhcm1zLT5zZXJ2aWNlX3Bhcm1zICYgSUJNVkZDX1BSTElfSU5JVElBVE9SX0ZVTkMpCisJCQkJCQl0Z3QtPmlkcy5yb2xlcyB8PSBGQ19QT1JUX1JPTEVfRkNQX0lOSVRJQVRPUjsKKwkJCQkJaWJtdmZjX3NldF90Z3RfYWN0aW9uKHRndCwgSUJNVkZDX1RHVF9BQ1RJT05fQUREX1JQT1JUKTsKKwkJCQl9IGVsc2UKKwkJCQkJaWJtdmZjX3NldF90Z3RfYWN0aW9uKHRndCwgSUJNVkZDX1RHVF9BQ1RJT05fREVMX1JQT1JUKTsKKwkJCX0gZWxzZSBpZiAocHJsaV9yc3BbaW5kZXhdLnJldHJ5KQorCQkJCWlibXZmY19yZXRyeV90Z3RfaW5pdCh0Z3QsIGlibXZmY190Z3Rfc2VuZF9wcmxpKTsKKwkJCWVsc2UKKwkJCQlpYm12ZmNfc2V0X3RndF9hY3Rpb24odGd0LCBJQk1WRkNfVEdUX0FDVElPTl9ERUxfUlBPUlQpOworCQl9IGVsc2UKKwkJCWlibXZmY19zZXRfdGd0X2FjdGlvbih0Z3QsIElCTVZGQ19UR1RfQUNUSU9OX0RFTF9SUE9SVCk7CiAJCWJyZWFrOwogCWNhc2UgSUJNVkZDX01BRF9EUklWRVJfRkFJTEVEOgogCQlicmVhazsKQEAgLTI4NzQsNyArMjkyOSw2IEBACiAJCXRndC0+aWRzLm5vZGVfbmFtZSA9IHd3bl90b191NjQocnNwLT5zZXJ2aWNlX3Bhcm1zLm5vZGVfbmFtZSk7CiAJCXRndC0+aWRzLnBvcnRfbmFtZSA9IHd3bl90b191NjQocnNwLT5zZXJ2aWNlX3Bhcm1zLnBvcnRfbmFtZSk7CiAJCXRndC0+aWRzLnBvcnRfaWQgPSB0Z3QtPnNjc2lfaWQ7Ci0JCXRndC0+aWRzLnJvbGVzID0gRkNfUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7CiAJCW1lbWNweSgmdGd0LT5zZXJ2aWNlX3Bhcm1zLCAmcnNwLT5zZXJ2aWNlX3Bhcm1zLAogCQkgICAgICAgc2l6ZW9mKHRndC0+c2VydmljZV9wYXJtcykpOwogCQltZW1jcHkoJnRndC0+c2VydmljZV9wYXJtc19jaGFuZ2UsICZyc3AtPnNlcnZpY2VfcGFybXNfY2hhbmdlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDA3ODI5MDAuLmRlZjQ3M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTE1MiwxMyArMTUyLDEzIEBACiBNT0RVTEVfUEFSTV9ERVNDKGxvZ19sZXZlbCwgIlNldCB0byAwIC0gNCBmb3IgaW5jcmVhc2luZyB2ZXJib3NpdHkgb2YgZGV2aWNlIGRyaXZlciIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHRlc3Rtb2RlLCBpcHJfdGVzdG1vZGUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRlc3Rtb2RlLCAiREFOR0VST1VTISEhIEFsbG93cyB1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyIpOwotbW9kdWxlX3BhcmFtX25hbWVkKGZhc3RmYWlsLCBpcHJfZmFzdGZhaWwsIGludCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZmFzdGZhaWwsIGlwcl9mYXN0ZmFpbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGZhc3RmYWlsLCAiUmVkdWNlIHRpbWVvdXRzIGFuZCByZXRyaWVzIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQodHJhbnNvcF90aW1lb3V0LCBpcHJfdHJhbnNvcF90aW1lb3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0cmFuc29wX3RpbWVvdXQsICJUaW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgYWRhcHRlciB0byBjb21lIG9wZXJhdGlvbmFsIChkZWZhdWx0OiAzMDApIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZW5hYmxlX2NhY2hlLCBpcHJfZW5hYmxlX2NhY2hlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfY2FjaGUsICJFbmFibGUgYWRhcHRlcidzIG5vbi12b2xhdGlsZSB3cml0ZSBjYWNoZSAoZGVmYXVsdDogMSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaXByX2RlYnVnLCBpbnQsIDApOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpcHJfZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZXZpY2UgZHJpdmVyIGRlYnVnZ2luZyBsb2dnaW5nLiBTZXQgdG8gMSB0byBlbmFibGUuIChkZWZhdWx0OiAwKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGR1YWxfaW9hX3JhaWQsIGlwcl9kdWFsX2lvYV9yYWlkLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkdWFsX2lvYV9yYWlkLCAiRW5hYmxlIGR1YWwgYWRhcHRlciBSQUlEIHN1cHBvcnQuIFNldCB0byAxIHRvIGVuYWJsZS4gKGRlZmF1bHQ6IDEpIik7CkBAIC0zNTQsNiArMzU0LDggQEAKIAkiOTA3NjogQ29uZmlndXJhdGlvbiBlcnJvciwgbWlzc2luZyByZW1vdGUgSU9BIn0sCiAJezB4MDY2NzkxMDAsIDAsIElQUl9ERUZBVUxUX0xPR19MRVZFTCwKIAkiNDA1MDogRW5jbG9zdXJlIGRvZXMgbm90IHN1cHBvcnQgYSByZXF1aXJlZCBtdWx0aXBhdGggZnVuY3Rpb24ifSwKKwl7MHgwNjY5MDAwMCwgMCwgSVBSX0RFRkFVTFRfTE9HX0xFVkVMLAorCSI0MDcwOiBMb2dpY2FsbHkgYmFkIGJsb2NrIHdyaXR0ZW4gb24gZGV2aWNlIn0sCiAJezB4MDY2OTAyMDAsIDAsIElQUl9ERUZBVUxUX0xPR19MRVZFTCwKIAkiOTA0MTogQXJyYXkgcHJvdGVjdGlvbiB0ZW1wb3JhcmlseSBzdXNwZW5kZWQifSwKIAl7MHgwNjY5ODIwMCwgMCwgSVBSX0RFRkFVTFRfTE9HX0xFVkVMLApAQCAtNzE0Nyw2ICs3MTQ5LDcgQEAKIAogCUVOVEVSOwogCWZyZWVfaXJxKHBkZXYtPmlycSwgaW9hX2NmZyk7CisJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCWlvdW5tYXAoaW9hX2NmZy0+aGR3X2RtYV9yZWdzKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCWlwcl9mcmVlX21lbShpb2FfY2ZnKTsKQEAgLTc0MzIsNiArNzQzNSwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoIShyYyA9IHBjaV9lbmFibGVfbXNpKHBkZXYpKSkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1TSSBlbmFibGVkXG4iKTsKKwllbHNlIGlmIChpcHJfZGVidWcpCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIE1TSVxuIik7CisKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRm91bmQgSU9BIHdpdGggSVJROiAlZFxuIiwgcGRldi0+aXJxKTsKIAogCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJmRyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKCppb2FfY2ZnKSk7CkBAIC03NTc0LDYgKzc1ODIsNyBAQAogb3V0X3Njc2lfaG9zdF9wdXQ6CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKIG91dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJZ290byBvdXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggOGY4NzJmOC4uNzlhM2FlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMzcsOCArMzcsOCBAQAogLyoKICAqIExpdGVyYWxzCiAgKi8KLSNkZWZpbmUgSVBSX0RSSVZFUl9WRVJTSU9OICIyLjQuMSIKLSNkZWZpbmUgSVBSX0RSSVZFUl9EQVRFICIoQXByaWwgMjQsIDIwMDcpIgorI2RlZmluZSBJUFJfRFJJVkVSX1ZFUlNJT04gIjIuNC4yIgorI2RlZmluZSBJUFJfRFJJVkVSX0RBVEUgIihKYW51YXJ5IDIxLCAyMDA5KSIKIAogLyoKICAqIElQUl9NQVhfQ01EX1BFUl9MVU46IFRoaXMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHMuYyBiL2RyaXZlcnMvc2NzaS9pcHMuYwppbmRleCBlZjY4M2YwLi40NTdkNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXBzLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwcy5jCkBAIC0xMDA0LDggKzEwMDQsNyBAQAogCURFQlVHX1ZBUigxLCAiKCVzJWQpIEZhaWxpbmcgYWN0aXZlIGNvbW1hbmRzIiwgaXBzX25hbWUsIGhhLT5ob3N0X251bSk7CiAKIAl3aGlsZSAoKHNjYiA9IGlwc19yZW1vdmVxX3NjYl9oZWFkKCZoYS0+c2NiX2FjdGl2ZWxpc3QpKSkgewotCQlzY2ItPnNjc2lfY21kLT5yZXN1bHQgPQotCQkgICAgKERJRF9SRVNFVCA8PCAxNikgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CisJCXNjYi0+c2NzaV9jbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKIAkJc2NiLT5zY3NpX2NtZC0+c2NzaV9kb25lKHNjYi0+c2NzaV9jbWQpOwogCQlpcHNfZnJlZXNjYihoYSwgc2NiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggMjM4MDhkZi4uYjNlNWUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtNDgsMTMgKzQ4LDYgQEAKIAkgICAgICAiQWxleCBBaXptYW4gPGl0bjc4MEB5YWhvby5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImlTQ1NJL1RDUCBkYXRhLXBhdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSN1bmRlZiBERUJVR19UQ1AKLQotI2lmZGVmIERFQlVHX1RDUAotI2RlZmluZSBkZWJ1Z190Y3AoZm10Li4uKSBwcmludGsoS0VSTl9JTkZPICJ0Y3A6ICIgZm10KQotI2Vsc2UKLSNkZWZpbmUgZGVidWdfdGNwKGZtdC4uLikKLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICppc2NzaV9zd190Y3Bfc2NzaV90cmFuc3BvcnQ7CiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpc2NzaV9zd190Y3Bfc2h0OwpAQCAtNjMsNiArNTYsMjEgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNjc2lfbWF4X2x1biA9IDUxMjsKIG1vZHVsZV9wYXJhbV9uYW1lZChtYXhfbHVuLCBpc2NzaV9tYXhfbHVuLCB1aW50LCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBpc2NzaV9zd190Y3BfZGJnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2lzY3NpX3RjcCwgaXNjc2lfc3dfdGNwX2RiZywgaW50LAorCQkgICBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2lzY3NpX3RjcCwgIlR1cm4gb24gZGVidWdnaW5nIGZvciBpc2NzaV90Y3AgbW9kdWxlICIKKwkJICJTZXQgdG8gMSB0byB0dXJuIG9uLCBhbmQgemVybyB0byB0dXJuIG9mZi4gRGVmYXVsdCBpcyBvZmYuIik7CisKKyNkZWZpbmUgSVNDU0lfU1dfVENQX0RCRyhfY29ubiwgZGJnX2ZtdCwgYXJnLi4uKQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoaXNjc2lfc3dfdGNwX2RiZykJCQkJXAorCQkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9JTkZPLCBfY29ubiwJXAorCQkJCQkgICAgICIlcyAiIGRiZ19mbXQsCVwKKwkJCQkJICAgICBfX2Z1bmNfXywgIyNhcmcpOwlcCisJfSB3aGlsZSAoMCk7CisKKwogLyoqCiAgKiBpc2NzaV9zd190Y3BfcmVjdiAtIFRDUCByZWNlaXZlIGluIHNlbmRmaWxlIGZhc2hpb24KICAqIEByZF9kZXNjOiByZWFkIGRlc2NyaXB0b3IKQEAgLTc3LDcgKzg1LDcgQEAKIAl1bnNpZ25lZCBpbnQgY29uc3VtZWQsIHRvdGFsX2NvbnN1bWVkID0gMDsKIAlpbnQgc3RhdHVzOwogCi0JZGVidWdfdGNwKCJpbiAlZCBieXRlc1xuIiwgc2tiLT5sZW4gLSBvZmZzZXQpOworCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgImluICVkIGJ5dGVzXG4iLCBza2ItPmxlbiAtIG9mZnNldCk7CiAKIAlkbyB7CiAJCXN0YXR1cyA9IDA7CkBAIC04Niw3ICs5NCw4IEBACiAJCXRvdGFsX2NvbnN1bWVkICs9IGNvbnN1bWVkOwogCX0gd2hpbGUgKGNvbnN1bWVkICE9IDAgJiYgc3RhdHVzICE9IElTQ1NJX1RDUF9TS0JfRE9ORSk7CiAKLQlkZWJ1Z190Y3AoInJlYWQgJWQgYnl0ZXMgc3RhdHVzICVkXG4iLCBza2ItPmxlbiAtIG9mZnNldCwgc3RhdHVzKTsKKwlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJyZWFkICVkIGJ5dGVzIHN0YXR1cyAlZFxuIiwKKwkJCSBza2ItPmxlbiAtIG9mZnNldCwgc3RhdHVzKTsKIAlyZXR1cm4gdG90YWxfY29uc3VtZWQ7CiB9CiAKQEAgLTEzMSw3ICsxNDAsOCBAQAogCWlmICgoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRV9XQUlUIHx8CiAJICAgICBzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKSAmJgogCSAgICAhYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSkgewotCQlkZWJ1Z190Y3AoImlzY3NpX3RjcF9zdGF0ZV9jaGFuZ2U6IFRDUF9DTE9TRXxUQ1BfQ0xPU0VfV0FJVFxuIik7CisJCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgImlzY3NpX3RjcF9zdGF0ZV9jaGFuZ2U6ICIKKwkJCQkgIlRDUF9DTE9TRXxUQ1BfQ0xPU0VfV0FJVFxuIik7CiAJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCX0KIApAQCAtMTU1LDggKzE2NSw4IEBACiAJc3RydWN0IGlzY3NpX3N3X3RjcF9jb25uICp0Y3Bfc3dfY29ubiA9IHRjcF9jb25uLT5kZF9kYXRhOwogCiAJdGNwX3N3X2Nvbm4tPm9sZF93cml0ZV9zcGFjZShzayk7Ci0JZGVidWdfdGNwKCJpc2NzaV93cml0ZV9zcGFjZTogY2lkICVkXG4iLCBjb25uLT5pZCk7Ci0Jc2NzaV9xdWV1ZV93b3JrKGNvbm4tPnNlc3Npb24tPmhvc3QsICZjb25uLT54bWl0d29yayk7CisJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiaXNjc2lfd3JpdGVfc3BhY2VcbiIpOworCWlzY3NpX2Nvbm5fcXVldWVfd29yayhjb25uKTsKIH0KIAogc3RhdGljIHZvaWQgaXNjc2lfc3dfdGNwX2Nvbm5fc2V0X2NhbGxiYWNrcyhzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubikKQEAgLTI4Myw3ICsyOTMsNyBAQAogCQl9CiAJfQogCi0JZGVidWdfdGNwKCJ4bWl0ICVkIGJ5dGVzXG4iLCBjb25zdW1lZCk7CisJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAieG1pdCAlZCBieXRlc1xuIiwgY29uc3VtZWQpOwogCiAJY29ubi0+dHhkYXRhX29jdGV0cyArPSBjb25zdW1lZDsKIAlyZXR1cm4gY29uc3VtZWQ7CkBAIC0yOTEsNyArMzAxLDcgQEAKIGVycm9yOgogCS8qIFRyYW5zbWl0IGVycm9yLiBXZSBjb3VsZCBpbml0aWF0ZSBlcnJvciByZWNvdmVyeQogCSAqIGhlcmUuICovCi0JZGVidWdfdGNwKCJFcnJvciBzZW5kaW5nIFBEVSwgZXJybm89JWRcbiIsIHJjKTsKKwlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJFcnJvciBzZW5kaW5nIFBEVSwgZXJybm89JWRcbiIsIHJjKTsKIAlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgcmMpOwogCXJldHVybiAtRUlPOwogfQpAQCAtMzM0LDkgKzM0NCwxMCBAQAogCXN0cnVjdCBpc2NzaV9zd190Y3BfY29ubiAqdGNwX3N3X2Nvbm4gPSB0Y3BfY29ubi0+ZGRfZGF0YTsKIAogCXRjcF9zd19jb25uLT5vdXQuc2VnbWVudCA9IHRjcF9zd19jb25uLT5vdXQuZGF0YV9zZWdtZW50OwotCWRlYnVnX3RjcCgiSGVhZGVyIGRvbmUuIE5leHQgc2VnbWVudCBzaXplICV1IHRvdGFsX3NpemUgJXVcbiIsCi0JCSAgdGNwX3N3X2Nvbm4tPm91dC5zZWdtZW50LnNpemUsCi0JCSAgdGNwX3N3X2Nvbm4tPm91dC5zZWdtZW50LnRvdGFsX3NpemUpOworCUlTQ1NJX1NXX1RDUF9EQkcodGNwX2Nvbm4tPmlzY3NpX2Nvbm4sCisJCQkgIkhlYWRlciBkb25lLiBOZXh0IHNlZ21lbnQgc2l6ZSAldSB0b3RhbF9zaXplICV1XG4iLAorCQkJIHRjcF9zd19jb25uLT5vdXQuc2VnbWVudC5zaXplLAorCQkJIHRjcF9zd19jb25uLT5vdXQuc2VnbWVudC50b3RhbF9zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzQ2LDggKzM1Nyw4IEBACiAJc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX3N3X3RjcF9jb25uICp0Y3Bfc3dfY29ubiA9IHRjcF9jb25uLT5kZF9kYXRhOwogCi0JZGVidWdfdGNwKCIlcyglcCVzKVxuIiwgX19mdW5jX18sIHRjcF9jb25uLAotCQkJY29ubi0+aGRyZGdzdF9lbj8gIiwgZGlnZXN0IGVuYWJsZWQiIDogIiIpOworCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgIiVzXG4iLCBjb25uLT5oZHJkZ3N0X2VuID8KKwkJCSAiZGlnZXN0IGVuYWJsZWQiIDogImRpZ2VzdCBkaXNhYmxlZCIpOwogCiAJLyogQ2xlYXIgdGhlIGRhdGEgc2VnbWVudCAtIG5lZWRzIHRvIGJlIGZpbGxlZCBpbiBieSB0aGUKIAkgKiBjYWxsZXIgdXNpbmcgaXNjc2lfdGNwX3NlbmRfZGF0YV9wcmVwKCkgKi8KQEAgLTM4OSw5ICs0MDAsOSBAQAogCXN0cnVjdCBoYXNoX2Rlc2MgKnR4X2hhc2ggPSBOVUxMOwogCXVuc2lnbmVkIGludCBoZHJfc3BlY19sZW47CiAKLQlkZWJ1Z190Y3AoIiVzKCVwLCBvZmZzZXQ9JWQsIGRhdGFsZW49JWQlcylcbiIsIF9fZnVuY19fLAotCQkJdGNwX2Nvbm4sIG9mZnNldCwgbGVuLAotCQkJY29ubi0+ZGF0YWRnc3RfZW4/ICIsIGRpZ2VzdCBlbmFibGVkIiA6ICIiKTsKKwlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJvZmZzZXQ9JWQsIGRhdGFsZW49JWQgJXNcbiIsIG9mZnNldCwgbGVuLAorCQkJIGNvbm4tPmRhdGFkZ3N0X2VuID8KKwkJCSAiZGlnZXN0IGVuYWJsZWQiIDogImRpZ2VzdCBkaXNhYmxlZCIpOwogCiAJLyogTWFrZSBzdXJlIHRoZSBkYXRhbGVuIG1hdGNoZXMgd2hhdCB0aGUgY2FsbGVyCiAJICAgc2FpZCBoZSB3b3VsZCBzZW5kLiAqLwpAQCAtNDE1LDggKzQyNiw4IEBACiAJc3RydWN0IGhhc2hfZGVzYyAqdHhfaGFzaCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGhkcl9zcGVjX2xlbjsKIAotCWRlYnVnX3RjcCgiJXMoJXAsIGRhdGFsZW49JWQlcylcbiIsIF9fZnVuY19fLCB0Y3BfY29ubiwgbGVuLAotCQkgIGNvbm4tPmRhdGFkZ3N0X2VuPyAiLCBkaWdlc3QgZW5hYmxlZCIgOiAiIik7CisJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiZGF0YWxlbj0lemQgJXNcbiIsIGxlbiwgY29ubi0+ZGF0YWRnc3RfZW4gPworCQkJICJkaWdlc3QgZW5hYmxlZCIgOiAiZGlnZXN0IGRpc2FibGVkIik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGRhdGFsZW4gbWF0Y2hlcyB3aGF0IHRoZSBjYWxsZXIKIAkgICBzYWlkIGhlIHdvdWxkIHNlbmQuICovCkBAIC03NTQsOCArNzY1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9zd190Y3Bfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgdWludDE2X3QgY21kc19tYXgsCi0JCQkgICAgdWludDE2X3QgcWRlcHRoLCB1aW50MzJfdCBpbml0aWFsX2NtZHNuLAotCQkJICAgIHVpbnQzMl90ICpob3N0bm8pCisJCQkgICAgdWludDE2X3QgcWRlcHRoLCB1aW50MzJfdCBpbml0aWFsX2NtZHNuKQogewogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CkBAIC03NjYsMTAgKzc3NiwxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmlzY3NpX3N3X3RjcF9zaHQsIDAsIHFkZXB0aCk7CisJc2hvc3QgPSBpc2NzaV9ob3N0X2FsbG9jKCZpc2NzaV9zd190Y3Bfc2h0LCAwLCAxKTsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm4gTlVMTDsKIAlzaG9zdC0+dHJhbnNwb3J0dCA9IGlzY3NpX3N3X3RjcF9zY3NpX3RyYW5zcG9ydDsKKwlzaG9zdC0+Y21kX3Blcl9sdW4gPSBxZGVwdGg7CiAJc2hvc3QtPm1heF9sdW4gPSBpc2NzaV9tYXhfbHVuOwogCXNob3N0LT5tYXhfaWQgPSAwOwogCXNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CkBAIC03NzcsNyArNzg4LDYgQEAKIAogCWlmIChpc2NzaV9ob3N0X2FkZChzaG9zdCwgTlVMTCkpCiAJCWdvdG8gZnJlZV9ob3N0OwotCSpob3N0bm8gPSBzaG9zdC0+aG9zdF9ubzsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmaXNjc2lfc3dfdGNwX3RyYW5zcG9ydCwgc2hvc3QsCiAJCQkJCSAgY21kc19tYXgsCkBAIC04MTMsNiArODIzLDEyIEBACiAJaXNjc2lfaG9zdF9mcmVlKHNob3N0KTsKIH0KIAorc3RhdGljIGludCBpc2NzaV9zd190Y3Bfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXNldF9iaXQoUVVFVUVfRkxBR19CSURJLCAmc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfZmxhZ3MpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGlzY3NpX3N3X3RjcF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOwpAQCAtODMzLDYgKzg0OSw3IEBACiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCiAJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCiAJLnVzZV9jbHVzdGVyaW5nICAgICAgICAgPSBESVNBQkxFX0NMVVNURVJJTkcsCisJLnNsYXZlX2FsbG9jICAgICAgICAgICAgPSBpc2NzaV9zd190Y3Bfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZSAgICAgICAgPSBpc2NzaV9zd190Y3Bfc2xhdmVfY29uZmlndXJlLAogCS5wcm9jX25hbWUJCT0gImlzY3NpX3RjcCIsCiAJLnRoaXNfaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYwppbmRleCA1MDU4MjViLi45OTJhZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCQkJZXAtPmRlc3RydWN0b3IoJmVwLT5zZXEsIGVwLT5hcmcpOwogCQlpZiAoZXAtPmxwLT50dC5leGNoX3B1dCkKIAkJCWVwLT5scC0+dHQuZXhjaF9wdXQoZXAtPmxwLCBtcCwgZXAtPnhpZCk7Ci0JCVdBUk5fT04oIWVwLT5lc2Jfc3RhdCAmIEVTQl9TVF9DT01QTEVURSk7CisJCVdBUk5fT04oIShlcC0+ZXNiX3N0YXQgJiBFU0JfU1RfQ09NUExFVEUpKTsKIAkJbWVtcG9vbF9mcmVlKGVwLCBtcC0+ZXBfcG9vbCk7CiAJfQogfQpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJc3RydWN0IGZjX2V4Y2ggKmVwID0gTlVMTDsKIAogCWlmIChtcC0+bWF4X3JlYWQpIHsKLQkJaWYgKGZjX2ZyYW1lX2lzX3JlYWQoZnApKSB7CisJCWlmIChmY19mY3BfaXNfcmVhZChmcl9mc3AoZnApKSkgewogCQkJbWluID0gbXAtPm1pbl94aWQ7CiAJCQltYXggPSBtcC0+bWF4X3JlYWQ7CiAJCQlwbGFzdCA9ICZtcC0+bGFzdF9yZWFkOwpAQCAtMTg0MSw2ICsxODQxLDggQEAKIAlmY19leGNoX3NldHVwX2hkcihlcCwgZnAsIGVwLT5mX2N0bCk7CiAJc3AtPmNudCsrOwogCisJZmNfZmNwX2RkcF9zZXR1cChmcl9mc3AoZnApLCBlcC0+eGlkKTsKKwogCWlmICh1bmxpa2VseShscC0+dHQuZnJhbWVfc2VuZChscCwgZnApKSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwppbmRleCAyYTYzMWQ3Li5hNTcyNWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCkBAIC0yNTksMTIgKzI1OSw2MiBAQAogCX0KIAogCWZzcC0+c3RhdGUgJj0gfkZDX1NSQl9BQk9SVF9QRU5ESU5HOwotCWZzcC0+aW9fc3RhdHVzID0gU1VHR0VTVF9SRVRSWSA8PCAyNDsKKwlmc3AtPmlvX3N0YXR1cyA9IDA7CiAJZnNwLT5zdGF0dXNfY29kZSA9IEZDX0VSUk9SOwogCWZjX2ZjcF9jb21wbGV0ZV9sb2NrZWQoZnNwKTsKIH0KIAogLyoKKyAqIGZjX2ZjcF9kZHBfc2V0dXAgLSBjYWxscyB0byBMTEQncyBkZHBfc2V0dXAgdG8gc2V0IHVwIEREUAorICogdHJhbnNmZXIgZm9yIGEgcmVhZCBJL08gaW5kaWNhdGVkIGJ5IHRoZSBmY19mY3BfcGt0LgorICogQGZzcDogcHRyIHRvIHRoZSBmY19mY3BfcGt0CisgKgorICogVGhpcyBpcyBjYWxsZWQgaW4gZXhjaF9zZXFfc2VuZCgpIHdoZW4gd2UgaGF2ZSBhIG5ld2x5IGFsbG9jYXRlZAorICogZXhjaGFuZ2Ugd2l0aCBhIHZhbGlkIGV4Y2hhbmdlIGlkIHRvIHNldHVwIGRkcC4KKyAqCisgKiByZXR1cm5zOiBub25lCisgKi8KK3ZvaWQgZmNfZmNwX2RkcF9zZXR1cChzdHJ1Y3QgZmNfZmNwX3BrdCAqZnNwLCB1MTYgeGlkKQoreworCXN0cnVjdCBmY19scG9ydCAqbHA7CisKKwlpZiAoIWZzcCkKKwkJcmV0dXJuOworCisJbHAgPSBmc3AtPmxwOworCWlmICgoZnNwLT5yZXFfZmxhZ3MgJiBGQ19TUkJfUkVBRCkgJiYKKwkgICAgKGxwLT5scm9fZW5hYmxlZCkgJiYgKGxwLT50dC5kZHBfc2V0dXApKSB7CisJCWlmIChscC0+dHQuZGRwX3NldHVwKGxwLCB4aWQsIHNjc2lfc2dsaXN0KGZzcC0+Y21kKSwKKwkJCQkgICAgIHNjc2lfc2dfY291bnQoZnNwLT5jbWQpKSkKKwkJCWZzcC0+eGZlcl9kZHAgPSB4aWQ7CisJfQorfQorRVhQT1JUX1NZTUJPTChmY19mY3BfZGRwX3NldHVwKTsKKworLyoKKyAqIGZjX2ZjcF9kZHBfZG9uZSAtIGNhbGxzIHRvIExMRCdzIGRkcF9kb25lIHRvIHJlbGVhc2UgYW55CisgKiBERFAgcmVsYXRlZCByZXNvdXJjZXMgZm9yIHRoaXMgSS9PIGlmIGl0IGlzIGluaXRpYWxpemVkCisgKiBhcyBhIGRkcCB0cmFuc2ZlcgorICogQGZzcDogcHRyIHRvIHRoZSBmY19mY3BfcGt0CisgKgorICogcmV0dXJuczogbm9uZQorICovCitzdGF0aWMgdm9pZCBmY19mY3BfZGRwX2RvbmUoc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCkKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwOworCisJaWYgKCFmc3ApCisJCXJldHVybjsKKworCWxwID0gZnNwLT5scDsKKwlpZiAoZnNwLT54ZmVyX2RkcCAmJiBscC0+dHQuZGRwX2RvbmUpIHsKKwkJZnNwLT54ZmVyX2xlbiA9IGxwLT50dC5kZHBfZG9uZShscCwgZnNwLT54ZmVyX2RkcCk7CisJCWZzcC0+eGZlcl9kZHAgPSAwOworCX0KK30KKworCisvKgogICogUmVjZWl2ZSBTQ1NJIGRhdGEgZnJvbSB0YXJnZXQuCiAgKiBDYWxsZWQgYWZ0ZXIgcmVjZWl2aW5nIHNvbGljaXRlZCBkYXRhLgogICovCkBAIC0yODksNiArMzM5LDkgQEAKIAlsZW4gPSBmcl9sZW4oZnApIC0gc2l6ZW9mKCpmaCk7CiAJYnVmID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIDApOwogCisJLyogaWYgdGhpcyBJL08gaXMgZGRwZWQsIHVwZGF0ZSB4ZmVyIGxlbiAqLworCWZjX2ZjcF9kZHBfZG9uZShmc3ApOworCiAJaWYgKG9mZnNldCArIGxlbiA+IGZzcC0+ZGF0YV9sZW4pIHsKIAkJLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCiAJCWlmICgoZnJfZmxhZ3MoZnApICYgRkNQSEZfQ1JDX1VOQ0hFQ0tFRCkgJiYKQEAgLTQzNSw3ICs0ODgsMTMgQEAKIAkgKiBidXJzdCBsZW5ndGggKHRfYmxlbikgdG8gc2VxX2JsZW4sIG90aGVyd2lzZSBzZXQgdF9ibGVuCiAJICogdG8gbWF4IEZDIGZyYW1lIHBheWxvYWQgcHJldmlvdXNseSBzZXQgaW4gZnNwLT5tYXhfcGF5bG9hZC4KIAkgKi8KLQl0X2JsZW4gPSBscC0+c2VxX29mZmxvYWQgPyBzZXFfYmxlbiA6IGZzcC0+bWF4X3BheWxvYWQ7CisJdF9ibGVuID0gZnNwLT5tYXhfcGF5bG9hZDsKKwlpZiAobHAtPnNlcV9vZmZsb2FkKSB7CisJCXRfYmxlbiA9IG1pbihzZXFfYmxlbiwgKHNpemVfdClscC0+bHNvX21heCk7CisJCUZDX0RFQlVHX0ZDUCgiZnNwPSVwOmxzbzpibGVuPSV6eCBsc29fbWF4PTB4JXggdF9ibGVuPSV6eFxuIiwKKwkJCSAgIGZzcCwgc2VxX2JsZW4sIGxwLT5sc29fbWF4LCB0X2JsZW4pOworCX0KKwogCVdBUk5fT04odF9ibGVuIDwgRkNfTUlOX01BWF9QQVlMT0FEKTsKIAlpZiAodF9ibGVuID4gNTEyKQogCQl0X2JsZW4gJj0gfig1MTIgLSAxKTsJLyogcm91bmQgZG93biB0byBibG9jayBzaXplICovCkBAIC03NDQsNiArODAzLDkgQEAKIAlmc3AtPnNjc2lfY29tcF9mbGFncyA9IGZsYWdzOwogCWV4cGVjdGVkX2xlbiA9IGZzcC0+ZGF0YV9sZW47CiAKKwkvKiBpZiBkZHAsIHVwZGF0ZSB4ZmVyIGxlbiAqLworCWZjX2ZjcF9kZHBfZG9uZShmc3ApOworCiAJaWYgKHVubGlrZWx5KChmbGFncyAmIH5GQ1BfQ09ORl9SRVEpIHx8IGZjX3JwLT5mcl9zdGF0dXMpKSB7CiAJCXJwX2V4ID0gKHZvaWQgKikoZmNfcnAgKyAxKTsKIAkJaWYgKGZsYWdzICYgKEZDUF9SU1BfTEVOX1ZBTCB8IEZDUF9TTlNfTEVOX1ZBTCkpIHsKQEAgLTg1OSw3ICs5MjEsNyBAQAogCQkgICAgKCEoZnNwLT5zY3NpX2NvbXBfZmxhZ3MgJiBGQ1BfUkVTSURfVU5ERVIpIHx8CiAJCSAgICAgZnNwLT54ZmVyX2xlbiA8IGZzcC0+ZGF0YV9sZW4gLSBmc3AtPnNjc2lfcmVzaWQpKSB7CiAJCQlmc3AtPnN0YXR1c19jb2RlID0gRkNfREFUQV9VTkRSVU47Ci0JCQlmc3AtPmlvX3N0YXR1cyA9IFNVR0dFU1RfUkVUUlkgPDwgMjQ7CisJCQlmc3AtPmlvX3N0YXR1cyA9IDA7CiAJCX0KIAl9CiAKQEAgLTEwMDYsNyArMTA2OCw3IEBACiAJfQogCiAJbWVtY3B5KGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBsZW4pLCAmZnNwLT5jZGJfY21kLCBsZW4pOwotCWZyX2NtZChmcCkgPSBmc3AtPmNtZDsKKwlmcl9mc3AoZnApID0gZnNwOwogCXJwb3J0ID0gZnNwLT5ycG9ydDsKIAlmc3AtPm1heF9wYXlsb2FkID0gcnBvcnQtPm1heGZyYW1lX3NpemU7CiAJcnAgPSBycG9ydC0+ZGRfZGF0YTsKQEAgLTEyNjcsNyArMTMyOSw3IEBACiAJcnAgPSBycG9ydC0+ZGRfZGF0YTsKIAlpZiAoIWZzcC0+c2VxX3B0ciB8fCBycC0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfUkVBRFkpIHsKIAkJZnNwLT5zdGF0dXNfY29kZSA9IEZDX0hSRF9FUlJPUjsKLQkJZnNwLT5pb19zdGF0dXMgPSBTVUdHRVNUX1JFVFJZIDw8IDI0OworCQlmc3AtPmlvX3N0YXR1cyA9IDA7CiAJCWZjX2ZjcF9jb21wbGV0ZV9sb2NrZWQoZnNwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3NDAsNiArMTgwMiw5IEBACiAJc3RydWN0IGZjX2xwb3J0ICpscDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyogcmVsZWFzZSBvdXRzdGFuZGluZyBkZHAgY29udGV4dCAqLworCWZjX2ZjcF9kZHBfZG9uZShmc3ApOworCiAJZnNwLT5zdGF0ZSB8PSBGQ19TUkJfQ09NUEw7CiAJaWYgKCEoZnNwLT5zdGF0ZSAmIEZDX1NSQl9GQ1BfUFJPQ0VTU0lOR19UTU8pKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZmc3AtPnNjc2lfcGt0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwppbmRleCAyYWU1MGExLi43ZWY0NDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwpAQCAtNzYyLDEwICs3NjIsMTEgQEAKIAlyZW1vdGVfd3dwbiA9IGdldF91bmFsaWduZWRfYmU2NCgmZmxwLT5mbF93d3BuKTsKIAlpZiAocmVtb3RlX3d3cG4gPT0gbHBvcnQtPnd3cG4pIHsKIAkJRkNfREJHKCJGTE9HSSBmcm9tIHBvcnQgd2l0aCBzYW1lIFdXUE4gJWxseCAiCi0JCSAgICAgICAicG9zc2libGUgY29uZmlndXJhdGlvbiBlcnJvclxuIiwgcmVtb3RlX3d3cG4pOworCQkgICAgICAgInBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlbW90ZV93d3BuKTsKIAkJZ290byBvdXQ7CiAJfQotCUZDX0RCRygiRkxPR0kgZnJvbSBwb3J0IFdXUE4gJWxseFxuIiwgcmVtb3RlX3d3cG4pOworCUZDX0RCRygiRkxPR0kgZnJvbSBwb3J0IFdXUE4gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZW1vdGVfd3dwbik7CiAKIAkvKgogCSAqIFhYWCB3aGF0IGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBmb3IgRklEcz8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKaW5kZXggZGFlNjUxMy4uMDQ3MmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKQEAgLTk4OCw3ICs5ODgsNyBAQAogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9JTklUOgogCQlGQ19ERUJVR19SUE9SVCgiaW5jb21pbmcgUExPR0kgZnJvbSAlNnggd3dwbiAlbGx4IHN0YXRlIElOSVQgIgotCQkJICAgICAgICItIHJlamVjdFxuIiwgc2lkLCB3d3BuKTsKKwkJCSAgICAgICAiLSByZWplY3RcbiIsIHNpZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKTsKIAkJcmVqZWN0ID0gRUxTX1JKVF9VTlNVUDsKIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9TVF9QTE9HSToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggODA5ZDMyZC4uZGZhYThhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTM4LDYgKzM4LDI4IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KIAorc3RhdGljIGludCBpc2NzaV9kYmdfbGliOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2xpYmlzY3NpLCBpc2NzaV9kYmdfbGliLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbGliaXNjc2ksICJUdXJuIG9uIGRlYnVnZ2luZyBmb3IgbGliaXNjc2kgbW9kdWxlLiAiCisJCSAiU2V0IHRvIDEgdG8gdHVybiBvbiwgYW5kIHplcm8gdG8gdHVybiBvZmYuIERlZmF1bHQgIgorCQkgImlzIG9mZi4iKTsKKworI2RlZmluZSBJU0NTSV9EQkdfQ09OTihfY29ubiwgZGJnX2ZtdCwgYXJnLi4uKQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKGlzY3NpX2RiZ19saWIpCQkJCVwKKwkJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fSU5GTywgX2Nvbm4sCVwKKwkJCQkJICAgICAiJXMgIiBkYmdfZm10LAlcCisJCQkJCSAgICAgX19mdW5jX18sICMjYXJnKTsJXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIElTQ1NJX0RCR19TRVNTSU9OKF9zZXNzaW9uLCBkYmdfZm10LCBhcmcuLi4pCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGlzY3NpX2RiZ19saWIpCQkJCQlcCisJCQlpc2NzaV9zZXNzaW9uX3ByaW50ayhLRVJOX0lORk8sIF9zZXNzaW9uLAlcCisJCQkJCSAgICAgIiVzICIgZGJnX2ZtdCwJCVwKKwkJCQkJICAgICBfX2Z1bmNfXywgIyNhcmcpOwkJXAorCX0gd2hpbGUgKDApOworCiAvKiBTZXJpYWwgTnVtYmVyIEFyaXRobWV0aWMsIDMyIGJpdHMsIGxlc3MgdGhhbiwgUkZDMTk4MiAqLwogI2RlZmluZSBTTkEzMl9DSEVDSyAyMTQ3NDgzNjQ4VUwKIApAQCAtNTQsNiArNzYsMTUgQEAKIAkJCSAgICAobjEgPiBuMiAmJiAobjIgLSBuMSA8IFNOQTMyX0NIRUNLKSkpOwogfQogCitpbmxpbmUgdm9pZCBpc2NzaV9jb25uX3F1ZXVlX3dvcmsoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjb25uLT5zZXNzaW9uLT5ob3N0OworCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcXVldWVfd29yayhpaG9zdC0+d29ya3EsICZjb25uLT54bWl0d29yayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb25uX3F1ZXVlX3dvcmspOworCiB2b2lkCiBpc2NzaV91cGRhdGVfY21kc24oc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBpc2NzaV9ub3BpbiAqaGRyKQogewpAQCAtODEsOCArMTEyLDcgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZzZXNzaW9uLT5sZWFkY29ubi0+eG1pdHF1ZXVlKSB8fAogCQkgICAgIWxpc3RfZW1wdHkoJnNlc3Npb24tPmxlYWRjb25uLT5tZ210cXVldWUpKSB7CiAJCQlpZiAoIShzZXNzaW9uLT50dC0+Y2FwcyAmIENBUF9EQVRBX1BBVEhfT0ZGTE9BRCkpCi0JCQkJc2NzaV9xdWV1ZV93b3JrKHNlc3Npb24tPmhvc3QsCi0JCQkJCQkmc2Vzc2lvbi0+bGVhZGNvbm4tPnhtaXR3b3JrKTsKKwkJCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoc2Vzc2lvbi0+bGVhZGNvbm4pOwogCQl9CiAJfQogfQpAQCAtMTc2LDEwICsyMDYsMTEgQEAKIAllY2RiX2FoZHItPnJlc2VydmVkID0gMDsKIAltZW1jcHkoZWNkYl9haGRyLT5lY2RiLCBjbWQtPmNtbmQgKyBJU0NTSV9DREJfU0laRSwgcmxlbik7CiAKLQlkZWJ1Z19zY3NpKCJpc2NzaV9wcmVwX2VjZGJfYWhzOiB2YXJsZW5fY2RiX2xlbiAlZCAiCi0JCSAgICJybGVuICVkIHBhZF9sZW4gJWQgYWhzX2xlbmd0aCAlZCBpc2NzaV9oZWFkZXJzX3NpemUgJXVcbiIsCi0JCSAgIGNtZC0+Y21kX2xlbiwgcmxlbiwgcGFkX2xlbiwgYWhzbGVuZ3RoLCB0YXNrLT5oZHJfbGVuKTsKLQorCUlTQ1NJX0RCR19TRVNTSU9OKHRhc2stPmNvbm4tPnNlc3Npb24sCisJCQkgICJpc2NzaV9wcmVwX2VjZGJfYWhzOiB2YXJsZW5fY2RiX2xlbiAlZCAiCisJCSAgICAgICAgICAicmxlbiAlZCBwYWRfbGVuICVkIGFoc19sZW5ndGggJWQgaXNjc2lfaGVhZGVyc19zaXplICIKKwkJICAgICAgICAgICIldVxuIiwgY21kLT5jbWRfbGVuLCBybGVuLCBwYWRfbGVuLCBhaHNsZW5ndGgsCisJCSAgICAgICAgICB0YXNrLT5oZHJfbGVuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAxLDEwICsyMzIsMTEgQEAKIAlybGVuX2FoZHItPnJlc2VydmVkID0gMDsKIAlybGVuX2FoZHItPnJlYWRfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc2NzaV9pbihzYyktPmxlbmd0aCk7CiAKLQlkZWJ1Z19zY3NpKCJiaWRpLWluIHJsZW5fYWhkci0+cmVhZF9sZW5ndGgoJWQpICIKLQkJICAgInJsZW5fYWhkci0+YWhzbGVuZ3RoKCVkKVxuIiwKLQkJICAgYmUzMl90b19jcHUocmxlbl9haGRyLT5yZWFkX2xlbmd0aCksCi0JCSAgIGJlMTZfdG9fY3B1KHJsZW5fYWhkci0+YWhzbGVuZ3RoKSk7CisJSVNDU0lfREJHX1NFU1NJT04odGFzay0+Y29ubi0+c2Vzc2lvbiwKKwkJCSAgImJpZGktaW4gcmxlbl9haGRyLT5yZWFkX2xlbmd0aCglZCkgIgorCQkgICAgICAgICAgInJsZW5fYWhkci0+YWhzbGVuZ3RoKCVkKVxuIiwKKwkJICAgICAgICAgIGJlMzJfdG9fY3B1KHJsZW5fYWhkci0+cmVhZF9sZW5ndGgpLAorCQkgICAgICAgICAgYmUxNl90b19jcHUocmxlbl9haGRyLT5haHNsZW5ndGgpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM1LDEzICszNjcsMTUgQEAKIAlsaXN0X21vdmVfdGFpbCgmdGFzay0+cnVubmluZywgJmNvbm4tPnJ1bl9saXN0KTsKIAogCWNvbm4tPnNjc2ljbWRfcGR1c19jbnQrKzsKLQlkZWJ1Z19zY3NpKCJpc2NzaSBwcmVwIFslcyBjaWQgJWQgc2MgJXAgY2RiIDB4JXggaXR0IDB4JXggbGVuICVkICIKLQkJICAgImJpZGlfbGVuICVkIGNtZHNuICVkIHdpbiAlZF1cbiIsIHNjc2lfYmlkaV9jbW5kKHNjKSA/Ci0JCSAgICJiaWRpcmVjdGlvbmFsIiA6IHNjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFID8KLQkJICAgIndyaXRlIiA6ICJyZWFkIiwgY29ubi0+aWQsIHNjLCBzYy0+Y21uZFswXSwgdGFzay0+aXR0LAotCQkgICBzY3NpX2J1ZmZsZW4oc2MpLAotCQkgICBzY3NpX2JpZGlfY21uZChzYykgPyBzY3NpX2luKHNjKS0+bGVuZ3RoIDogMCwKLQkJICAgc2Vzc2lvbi0+Y21kc24sIHNlc3Npb24tPm1heF9jbWRzbiAtIHNlc3Npb24tPmV4cF9jbWRzbiArIDEpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJpc2NzaSBwcmVwIFslcyBjaWQgJWQgc2MgJXAgY2RiIDB4JXggIgorCQkJICAiaXR0IDB4JXggbGVuICVkIGJpZGlfbGVuICVkIGNtZHNuICVkIHdpbiAlZF1cbiIsCisJCQkgIHNjc2lfYmlkaV9jbW5kKHNjKSA/ICJiaWRpcmVjdGlvbmFsIiA6CisJCQkgIHNjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFID8KKwkJCSAgIndyaXRlIiA6ICJyZWFkIiwgY29ubi0+aWQsIHNjLCBzYy0+Y21uZFswXSwKKwkJCSAgdGFzay0+aXR0LCBzY3NpX2J1ZmZsZW4oc2MpLAorCQkJICBzY3NpX2JpZGlfY21uZChzYykgPyBzY3NpX2luKHNjKS0+bGVuZ3RoIDogMCwKKwkJCSAgc2Vzc2lvbi0+Y21kc24sCisJCQkgIHNlc3Npb24tPm1heF9jbWRzbiAtIHNlc3Npb24tPmV4cF9jbWRzbiArIDEpOwogCXJldHVybiAwOwogfQogCkBAIC00ODMsOSArNTE3LDkgQEAKIAogCXRhc2stPnN0YXRlID0gSVNDU0lfVEFTS19SVU5OSU5HOwogCWxpc3RfbW92ZV90YWlsKCZ0YXNrLT5ydW5uaW5nLCAmY29ubi0+bWdtdF9ydW5fbGlzdCk7Ci0JZGVidWdfc2NzaSgibWdtdHBkdSBbb3AgMHgleCBoZHItPml0dCAweCV4IGRhdGFsZW4gJWRdXG4iLAotCQkgICBoZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLLCBoZHItPml0dCwKLQkJICAgdGFzay0+ZGF0YV9jb3VudCk7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgIm1nbXRwZHUgW29wIDB4JXggaGRyLT5pdHQgMHgleCAiCisJCQkgICJkYXRhbGVuICVkXVxuIiwgaGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSywKKwkJCSAgaGRyLT5pdHQsIHRhc2stPmRhdGFfY291bnQpOwogCXJldHVybiAwOwogfQogCkBAIC01NjAsNyArNTk0LDcgQEAKIAkJCWdvdG8gZnJlZV90YXNrOwogCiAJfSBlbHNlCi0JCXNjc2lfcXVldWVfd29yayhjb25uLT5zZXNzaW9uLT5ob3N0LCAmY29ubi0+eG1pdHdvcmspOworCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoY29ubik7CiAKIAlyZXR1cm4gdGFzazsKIApAQCAtNjM3LDggKzY3MSw5IEBACiAKIAkJbWVtY3B5KHNjLT5zZW5zZV9idWZmZXIsIGRhdGEgKyAyLAogCQkgICAgICAgbWluX3QodWludDE2X3QsIHNlbnNlbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKLQkJZGVidWdfc2NzaSgiY29waWVkICVkIGJ5dGVzIG9mIHNlbnNlXG4iLAotCQkJICAgbWluX3QodWludDE2X3QsIHNlbnNlbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKKwkJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImNvcGllZCAlZCBieXRlcyBvZiBzZW5zZVxuIiwKKwkJCQkgIG1pbl90KHVpbnQxNl90LCBzZW5zZWxlbiwKKwkJCQkgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkpOwogCX0KIAogCWlmIChyaGRyLT5mbGFncyAmIChJU0NTSV9GTEFHX0NNRF9CSURJX1VOREVSRkxPVyB8CkBAIC02NjYsOCArNzAxLDggQEAKIAkJCXNjLT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpIHwgcmhkci0+Y21kX3N0YXR1czsKIAl9CiBvdXQ6Ci0JZGVidWdfc2NzaSgiZG9uZSBbc2MgJWx4IHJlcyAlZCBpdHQgMHgleF1cbiIsCi0JCSAgIChsb25nKXNjLCBzYy0+cmVzdWx0LCB0YXNrLT5pdHQpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJkb25lIFtzYyAlcCByZXMgJWQgaXR0IDB4JXhdXG4iLAorCQkJICBzYywgc2MtPnJlc3VsdCwgdGFzay0+aXR0KTsKIAljb25uLT5zY3NpcnNwX3BkdXNfY250Kys7CiAKIAlfX2lzY3NpX3B1dF90YXNrKHRhc2spOwpAQCAtODM1LDggKzg3MCw4IEBACiAJZWxzZQogCQlpdHQgPSB+MFU7CiAKLQlkZWJ1Z19zY3NpKCJbb3AgMHgleCBjaWQgJWQgaXR0IDB4JXggbGVuICVkXVxuIiwKLQkJICAgb3Bjb2RlLCBjb25uLT5pZCwgaXR0LCBkYXRhbGVuKTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiW29wIDB4JXggY2lkICVkIGl0dCAweCV4IGxlbiAlZF1cbiIsCisJCQkgIG9wY29kZSwgY29ubi0+aWQsIGl0dCwgZGF0YWxlbik7CiAKIAlpZiAoaXR0ID09IH4wVSkgewogCQlpc2NzaV91cGRhdGVfY21kc24oc2Vzc2lvbiwgKHN0cnVjdCBpc2NzaV9ub3BpbiopaGRyKTsKQEAgLTEwMzQsMTAgKzEwNjksOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaXR0X3RvX2N0YXNrKTsKIAotdm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKK3ZvaWQgaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgZW51bSBpc2NzaV9lcnIgZXJyKQogewotCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDk1LDEwICsxMTI5LDEwIEBACiAJICogQ2hlY2sgZm9yIGlTQ1NJIHdpbmRvdyBhbmQgdGFrZSBjYXJlIG9mIENtZFNOIHdyYXAtYXJvdW5kCiAJICovCiAJaWYgKCFpc2NzaV9zbmFfbHRlKHNlc3Npb24tPnF1ZXVlZF9jbWRzbiwgc2Vzc2lvbi0+bWF4X2NtZHNuKSkgewotCQlkZWJ1Z19zY3NpKCJpU0NTSSBDbWRTTiBjbG9zZWQuIEV4cENtZFNuICV1IE1heENtZFNOICV1ICIKLQkJCSAgICJDbWRTTiAldS8ldVxuIiwgc2Vzc2lvbi0+ZXhwX2NtZHNuLAotCQkJICAgc2Vzc2lvbi0+bWF4X2NtZHNuLCBzZXNzaW9uLT5jbWRzbiwKLQkJCSAgIHNlc3Npb24tPnF1ZXVlZF9jbWRzbik7CisJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJpU0NTSSBDbWRTTiBjbG9zZWQuIEV4cENtZFNuICIKKwkJCQkgICIldSBNYXhDbWRTTiAldSBDbWRTTiAldS8ldVxuIiwKKwkJCQkgIHNlc3Npb24tPmV4cF9jbWRzbiwgc2Vzc2lvbi0+bWF4X2NtZHNuLAorCQkJCSAgc2Vzc2lvbi0+Y21kc24sIHNlc3Npb24tPnF1ZXVlZF9jbWRzbik7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlyZXR1cm4gMDsKQEAgLTExMzMsNyArMTE2Nyw3IEBACiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOwogCiAJbGlzdF9tb3ZlX3RhaWwoJnRhc2stPnJ1bm5pbmcsICZjb25uLT5yZXF1ZXVlKTsKLQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoY29ubik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9yZXF1ZXVlX3Rhc2spOwogCkBAIC0xMTUyLDcgKzExODYsNyBAQAogCiAJc3Bpbl9sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIAlpZiAodW5saWtlbHkoY29ubi0+c3VzcGVuZF90eCkpIHsKLQkJZGVidWdfc2NzaSgiY29ubiAlZCBUeCBzdXNwZW5kZWQhXG4iLCBjb25uLT5pZCk7CisJCUlTQ1NJX0RCR19TRVNTSU9OKGNvbm4tPnNlc3Npb24sICJUeCBzdXNwZW5kZWQhXG4iKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCQlyZXR1cm4gLUVOT0RBVEE7CiAJfQpAQCAtMTM4Niw3ICsxNDIwLDcgQEAKIAkJCWdvdG8gcHJlcGRfcmVqZWN0OwogCQl9CiAJfSBlbHNlCi0JCXNjc2lfcXVldWVfd29yayhzZXNzaW9uLT5ob3N0LCAmY29ubi0+eG1pdHdvcmspOworCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoY29ubik7CiAKIAlzZXNzaW9uLT5xdWV1ZWRfY21kc24rKzsKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CkBAIC0xMzk4LDcgKzE0MzIsOCBAQAogCWlzY3NpX2NvbXBsZXRlX2NvbW1hbmQodGFzayk7CiByZWplY3Q6CiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwotCWRlYnVnX3Njc2koImNtZCAweCV4IHJlamVjdGVkICglZClcbiIsIHNjLT5jbW5kWzBdLCByZWFzb24pOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJjbWQgMHgleCByZWplY3RlZCAoJWQpXG4iLAorCQkJICBzYy0+Y21uZFswXSwgcmVhc29uKTsKIAlzcGluX2xvY2soaG9zdC0+aG9zdF9sb2NrKTsKIAlyZXR1cm4gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOwogCkBAIC0xNDA3LDcgKzE0NDIsOCBAQAogCWlzY3NpX2NvbXBsZXRlX2NvbW1hbmQodGFzayk7CiBmYXVsdDoKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7Ci0JZGVidWdfc2NzaSgiaXNjc2k6IGNtZCAweCV4IGlzIG5vdCBxdWV1ZWQgKCVkKVxuIiwgc2MtPmNtbmRbMF0sIHJlYXNvbik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImlzY3NpOiBjbWQgMHgleCBpcyBub3QgcXVldWVkICglZClcbiIsCisJCQkgIHNjLT5jbW5kWzBdLCByZWFzb24pOwogCWlmICghc2NzaV9iaWRpX2NtbmQoc2MpKQogCQlzY3NpX3NldF9yZXNpZChzYywgc2NzaV9idWZmbGVuKHNjKSk7CiAJZWxzZSB7CkBAIC0xNDIyLDggKzE0NTgsNiBAQAogCiBpbnQgaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewotCWlmIChkZXB0aCA+IElTQ1NJX01BWF9DTURfUEVSX0xVTikKLQkJZGVwdGggPSBJU0NTSV9NQVhfQ01EX1BFUl9MVU47CiAJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKIAlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9CkBAIC0xNDU3LDggKzE0OTEsMTAgQEAKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCWlmIChzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9URVJNSU5BVEUpIHsKIGZhaWxlZDoKLQkJZGVidWdfc2NzaSgiZmFpbGluZyB0YXJnZXQgcmVzZXQ6IHNlc3Npb24gdGVybWluYXRlZCAiCi0JCQkgICAiW0NJRCAlZCBhZ2UgJWRdXG4iLCBjb25uLT5pZCwgc2Vzc2lvbi0+YWdlKTsKKwkJaXNjc2lfc2Vzc2lvbl9wcmludGsoS0VSTl9JTkZPLCBzZXNzaW9uLAorCQkJCSAgICAgImZhaWxpbmcgdGFyZ2V0IHJlc2V0OiBDb3VsZCBub3QgbG9nICIKKwkJCQkgICAgICJiYWNrIGludG8gdGFyZ2V0IFthZ2UgJWRdXG4iLAorCQkJCSAgICAgc2Vzc2lvbi0+YWdlKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCQltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKIAkJcmV0dXJuIEZBSUxFRDsKQEAgLTE0NzIsNyArMTUwOCw3IEBACiAJICovCiAJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAKLQlkZWJ1Z19zY3NpKCJpc2NzaV9laF90YXJnZXRfcmVzZXQgd2FpdCBmb3IgcmVsb2dpblxuIik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgIndhaXQgZm9yIHJlbG9naW5cbiIpOwogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjb25uLT5laHdhaXQsCiAJCQkJIHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX1RFUk1JTkFURSB8fAogCQkJCSBzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9MT0dHRURfSU4gfHwKQEAgLTE1MDEsNyArMTUzNyw3IEBACiAJc3Bpbl9sb2NrKCZzZXNzaW9uLT5sb2NrKTsKIAlpZiAoY29ubi0+dG1mX3N0YXRlID09IFRNRl9RVUVVRUQpIHsKIAkJY29ubi0+dG1mX3N0YXRlID0gVE1GX1RJTUVET1VUOwotCQlkZWJ1Z19zY3NpKCJ0bWYgdGltZWRvdXRcbiIpOworCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAidG1mIHRpbWVkb3V0XG4iKTsKIAkJLyogdW5ibG9jayBlaF9hYm9ydCgpICovCiAJCXdha2VfdXAoJmNvbm4tPmVod2FpdCk7CiAJfQpAQCAtMTUyMSw3ICsxNTU3LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQkJZGVidWdfc2NzaSgidG1mIGV4ZWMgZmFpbHVyZVxuIik7CisJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJ0bWYgZXhlYyBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAJY29ubi0+dG1mY21kX3BkdXNfY250Kys7CkBAIC0xNTI5LDcgKzE1NjUsNyBAQAogCWNvbm4tPnRtZl90aW1lci5mdW5jdGlvbiA9IGlzY3NpX3RtZl90aW1lZG91dDsKIAljb25uLT50bWZfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNvbm47CiAJYWRkX3RpbWVyKCZjb25uLT50bWZfdGltZXIpOwotCWRlYnVnX3Njc2koInRtZiBzZXQgdGltZW91dFxuIik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgInRtZiBzZXQgdGltZW91dFxuIik7CiAKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CkBAIC0xNTY3LDIyICsxNjAzLDI3IEBACiB7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssICp0bXA7CiAKLQlpZiAoY29ubi0+dGFzayAmJiAoY29ubi0+dGFzay0+c2MtPmRldmljZS0+bHVuID09IGx1biB8fCBsdW4gPT0gLTEpKQotCQljb25uLT50YXNrID0gTlVMTDsKKwlpZiAoY29ubi0+dGFzaykgeworCQlpZiAobHVuID09IC0xIHx8CisJCSAgICAoY29ubi0+dGFzay0+c2MgJiYgY29ubi0+dGFzay0+c2MtPmRldmljZS0+bHVuID09IGx1bikpCisJCQljb25uLT50YXNrID0gTlVMTDsKKwl9CiAKIAkvKiBmbHVzaCBwZW5kaW5nICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRhc2ssIHRtcCwgJmNvbm4tPnhtaXRxdWV1ZSwgcnVubmluZykgewogCQlpZiAobHVuID09IHRhc2stPnNjLT5kZXZpY2UtPmx1biB8fCBsdW4gPT0gLTEpIHsKLQkJCWRlYnVnX3Njc2koImZhaWxpbmcgcGVuZGluZyBzYyAlcCBpdHQgMHgleFxuIiwKLQkJCQkgICB0YXNrLT5zYywgdGFzay0+aXR0KTsKKwkJCUlTQ1NJX0RCR19TRVNTSU9OKGNvbm4tPnNlc3Npb24sCisJCQkJCSAgImZhaWxpbmcgcGVuZGluZyBzYyAlcCBpdHQgMHgleFxuIiwKKwkJCQkJICB0YXNrLT5zYywgdGFzay0+aXR0KTsKIAkJCWZhaWxfY29tbWFuZChjb25uLCB0YXNrLCBlcnJvciA8PCAxNik7CiAJCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGFzaywgdG1wLCAmY29ubi0+cmVxdWV1ZSwgcnVubmluZykgewogCQlpZiAobHVuID09IHRhc2stPnNjLT5kZXZpY2UtPmx1biB8fCBsdW4gPT0gLTEpIHsKLQkJCWRlYnVnX3Njc2koImZhaWxpbmcgcmVxdWV1ZWQgc2MgJXAgaXR0IDB4JXhcbiIsCi0JCQkJICAgdGFzay0+c2MsIHRhc2stPml0dCk7CisJCQlJU0NTSV9EQkdfU0VTU0lPTihjb25uLT5zZXNzaW9uLAorCQkJCQkgICJmYWlsaW5nIHJlcXVldWVkIHNjICVwIGl0dCAweCV4XG4iLAorCQkJCQkgIHRhc2stPnNjLCB0YXNrLT5pdHQpOwogCQkJZmFpbF9jb21tYW5kKGNvbm4sIHRhc2ssIGVycm9yIDw8IDE2KTsKIAkJfQogCX0KQEAgLTE1OTAsOCArMTYzMSw5IEBACiAJLyogZmFpbCBhbGwgb3RoZXIgcnVubmluZyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCB0bXAsICZjb25uLT5ydW5fbGlzdCwgcnVubmluZykgewogCQlpZiAobHVuID09IHRhc2stPnNjLT5kZXZpY2UtPmx1biB8fCBsdW4gPT0gLTEpIHsKLQkJCWRlYnVnX3Njc2koImZhaWxpbmcgaW4gcHJvZ3Jlc3Mgc2MgJXAgaXR0IDB4JXhcbiIsCi0JCQkJICAgdGFzay0+c2MsIHRhc2stPml0dCk7CisJCQlJU0NTSV9EQkdfU0VTU0lPTihjb25uLT5zZXNzaW9uLAorCQkJCQkgImZhaWxpbmcgaW4gcHJvZ3Jlc3Mgc2MgJXAgaXR0IDB4JXhcbiIsCisJCQkJCSB0YXNrLT5zYywgdGFzay0+aXR0KTsKIAkJCWZhaWxfY29tbWFuZChjb25uLCB0YXNrLCBlcnJvciA8PCAxNik7CiAJCX0KIAl9CkBAIC0xNTk5LDkgKzE2NDEsMTIgQEAKIAogdm9pZCBpc2NzaV9zdXNwZW5kX3R4KHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQogeworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY29ubi0+c2Vzc2lvbi0+aG9zdDsKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKKwogCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KTsKIAlpZiAoIShjb25uLT5zZXNzaW9uLT50dC0+Y2FwcyAmIENBUF9EQVRBX1BBVEhfT0ZGTE9BRCkpCi0JCXNjc2lfZmx1c2hfd29yayhjb25uLT5zZXNzaW9uLT5ob3N0KTsKKwkJZmx1c2hfd29ya3F1ZXVlKGlob3N0LT53b3JrcSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9zdXNwZW5kX3R4KTsKIApAQCAtMTYwOSw3ICsxNjU0LDcgQEAKIHsKIAljbGVhcl9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KTsKIAlpZiAoIShjb25uLT5zZXNzaW9uLT50dC0+Y2FwcyAmIENBUF9EQVRBX1BBVEhfT0ZGTE9BRCkpCi0JCXNjc2lfcXVldWVfd29yayhjb25uLT5zZXNzaW9uLT5ob3N0LCAmY29ubi0+eG1pdHdvcmspOworCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoY29ubik7CiB9CiAKIHN0YXRpYyBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gaXNjc2lfZWhfY21kX3RpbWVkX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQpAQCAtMTYyMiw3ICsxNjY3LDcgQEAKIAljbHNfc2Vzc2lvbiA9IHN0YXJnZXRfdG9fc2Vzc2lvbihzY3NpX3RhcmdldChzY21kLT5kZXZpY2UpKTsKIAlzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAKLQlkZWJ1Z19zY3NpKCJzY3NpIGNtZCAlcCB0aW1lZG91dFxuIiwgc2NtZCk7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgInNjc2kgY21kICVwIHRpbWVkb3V0XG4iLCBzY21kKTsKIAogCXNwaW5fbG9jaygmc2Vzc2lvbi0+bG9jayk7CiAJaWYgKHNlc3Npb24tPnN0YXRlICE9IElTQ1NJX1NUQVRFX0xPR0dFRF9JTikgewpAQCAtMTY2Miw4ICsxNzA3LDggQEAKIAkJcmMgPSBCTEtfRUhfUkVTRVRfVElNRVI7CiBkb25lOgogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKLQlkZWJ1Z19zY3NpKCJyZXR1cm4gJXNcbiIsIHJjID09IEJMS19FSF9SRVNFVF9USU1FUiA/Ci0JCQkJCSJ0aW1lciByZXNldCIgOiAibmgiKTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAicmV0dXJuICVzXG4iLCByYyA9PSBCTEtfRUhfUkVTRVRfVElNRVIgPworCQkJICAidGltZXIgcmVzZXQiIDogIm5oIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNjk3LDEzICsxNzQyLDEzIEBACiAKIAlpZiAodGltZV9iZWZvcmVfZXEobGFzdF9yZWN2ICsgcmVjdl90aW1lb3V0LCBqaWZmaWVzKSkgewogCQkvKiBzZW5kIGEgcGluZyB0byB0cnkgdG8gcHJvdm9rZSBzb21lIHRyYWZmaWMgKi8KLQkJZGVidWdfc2NzaSgiU2VuZGluZyBub3BvdXQgYXMgcGluZyBvbiBjb25uICVwXG4iLCBjb25uKTsKKwkJSVNDU0lfREJHX0NPTk4oY29ubiwgIlNlbmRpbmcgbm9wb3V0IGFzIHBpbmdcbiIpOwogCQlpc2NzaV9zZW5kX25vcG91dChjb25uLCBOVUxMKTsKIAkJbmV4dF90aW1lb3V0ID0gY29ubi0+bGFzdF9waW5nICsgKGNvbm4tPnBpbmdfdGltZW91dCAqIEhaKTsKIAl9IGVsc2UKIAkJbmV4dF90aW1lb3V0ID0gbGFzdF9yZWN2ICsgcmVjdl90aW1lb3V0OwogCi0JZGVidWdfc2NzaSgiU2V0dGluZyBuZXh0IHRtbyAlbHVcbiIsIG5leHRfdGltZW91dCk7CisJSVNDU0lfREJHX0NPTk4oY29ubiwgIlNldHRpbmcgbmV4dCB0bW8gJWx1XG4iLCBuZXh0X3RpbWVvdXQpOwogCW1vZF90aW1lcigmY29ubi0+dHJhbnNwb3J0X3RpbWVyLCBuZXh0X3RpbWVvdXQpOwogZG9uZToKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CkBAIC0xNzQwLDcgKzE3ODUsOCBAQAogCSAqIGdvdCB0aGUgY29tbWFuZC4KIAkgKi8KIAlpZiAoIXNjLT5TQ3AucHRyKSB7Ci0JCWRlYnVnX3Njc2koInNjIG5ldmVyIHJlYWNoZWQgaXNjc2kgbGF5ZXIgb3IgaXQgY29tcGxldGVkLlxuIik7CisJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJzYyBuZXZlciByZWFjaGVkIGlzY3NpIGxheWVyIG9yICIKKwkJCQkgICJpdCBjb21wbGV0ZWQuXG4iKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCQltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKIAkJcmV0dXJuIFNVQ0NFU1M7CkBAIC0xNzYyLDExICsxODA4LDEzIEBACiAJYWdlID0gc2Vzc2lvbi0+YWdlOwogCiAJdGFzayA9IChzdHJ1Y3QgaXNjc2lfdGFzayAqKXNjLT5TQ3AucHRyOwotCWRlYnVnX3Njc2koImFib3J0aW5nIFtzYyAlcCBpdHQgMHgleF1cbiIsIHNjLCB0YXNrLT5pdHQpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJhYm9ydGluZyBbc2MgJXAgaXR0IDB4JXhdXG4iLAorCQkJICBzYywgdGFzay0+aXR0KTsKIAogCS8qIHRhc2sgY29tcGxldGVkIGJlZm9yZSB0aW1lIG91dCAqLwogCWlmICghdGFzay0+c2MpIHsKLQkJZGVidWdfc2NzaSgic2MgY29tcGxldGVkIHdoaWxlIGFib3J0IGluIHByb2dyZXNzXG4iKTsKKwkJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgInNjIGNvbXBsZXRlZCB3aGlsZSBhYm9ydCBpbiAiCisJCQkJICAicHJvZ3Jlc3NcbiIpOwogCQlnb3RvIHN1Y2Nlc3M7CiAJfQogCkBAIC0xODE1LDcgKzE4NjMsOCBAQAogCQlpZiAoIXNjLT5TQ3AucHRyKSB7CiAJCQljb25uLT50bWZfc3RhdGUgPSBUTUZfSU5JVElBTDsKIAkJCS8qIHRhc2sgY29tcGxldGVkIGJlZm9yZSB0bWYgYWJvcnQgcmVzcG9uc2UgKi8KLQkJCWRlYnVnX3Njc2koInNjIGNvbXBsZXRlZCB3aGlsZSBhYm9ydCBpbiBwcm9ncmVzc1xuIik7CisJCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAic2MgY29tcGxldGVkIHdoaWxlIGFib3J0ICIKKwkJCQkJICAiaW4gcHJvZ3Jlc3NcbiIpOwogCQkJZ290byBzdWNjZXNzOwogCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtMTgyNywxNSArMTg3NiwxNiBAQAogc3VjY2VzczoKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiBzdWNjZXNzX3VubG9ja2VkOgotCWRlYnVnX3Njc2koImFib3J0IHN1Y2Nlc3MgW3NjICVseCBpdHQgMHgleF1cbiIsIChsb25nKXNjLCB0YXNrLT5pdHQpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJhYm9ydCBzdWNjZXNzIFtzYyAlcCBpdHQgMHgleF1cbiIsCisJCQkgIHNjLCB0YXNrLT5pdHQpOwogCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwogCXJldHVybiBTVUNDRVNTOwogCiBmYWlsZWQ6CiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogZmFpbGVkX3VubG9ja2VkOgotCWRlYnVnX3Njc2koImFib3J0IGZhaWxlZCBbc2MgJXAgaXR0IDB4JXhdXG4iLCBzYywKLQkJICAgIHRhc2sgPyB0YXNrLT5pdHQgOiAwKTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiYWJvcnQgZmFpbGVkIFtzYyAlcCBpdHQgMHgleF1cbiIsIHNjLAorCQkJICB0YXNrID8gdGFzay0+aXR0IDogMCk7CiAJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CiAJcmV0dXJuIEZBSUxFRDsKIH0KQEAgLTE4NjIsNyArMTkxMiw4IEBACiAJY2xzX3Nlc3Npb24gPSBzdGFyZ2V0X3RvX3Nlc3Npb24oc2NzaV90YXJnZXQoc2MtPmRldmljZSkpOwogCXNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKIAotCWRlYnVnX3Njc2koIkxVIFJlc2V0IFtzYyAlcCBsdW4gJXVdXG4iLCBzYywgc2MtPmRldmljZS0+bHVuKTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiTFUgUmVzZXQgW3NjICVwIGx1biAldV1cbiIsCisJCQkgIHNjLCBzYy0+ZGV2aWNlLT5sdW4pOwogCiAJbXV0ZXhfbG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CkBAIC0xOTE2LDggKzE5NjcsOCBAQAogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIGRvbmU6Ci0JZGVidWdfc2NzaSgiaXNjc2lfZWhfZGV2aWNlX3Jlc2V0ICVzXG4iLAotCQkgIHJjID09IFNVQ0NFU1MgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImRldiByZXNldCByZXN1bHQgPSAlc1xuIiwKKwkJCSByYyA9PSBTVUNDRVNTID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpOwogCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KQEAgLTE5NDQsNyArMTk5NSw3IEBACiAJCW51bV9hcnJheXMrKzsKIAlxLT5wb29sID0ga3phbGxvYyhudW1fYXJyYXlzICogbWF4ICogc2l6ZW9mKHZvaWQqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHEtPnBvb2wgPT0gTlVMTCkKLQkJZ290byBlbm9tZW07CisJCXJldHVybiAtRU5PTUVNOwogCiAJcS0+cXVldWUgPSBrZmlmb19pbml0KCh2b2lkKilxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCopLAogCQkJICAgICAgR0ZQX0tFUk5FTCwgTlVMTCk7CkBAIC0xOTc5LDggKzIwMzAsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHEtPm1heDsgaSsrKQogCQlrZnJlZShxLT5wb29sW2ldKTsKLQlpZiAocS0+cG9vbCkKLQkJa2ZyZWUocS0+cG9vbCk7CisJa2ZyZWUocS0+cG9vbCk7CiAJa2ZyZWUocS0+cXVldWUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcG9vbF9mcmVlKTsKQEAgLTE5OTgsNiArMjA0OCw5IEBACiAJaWYgKCFzaG9zdC0+Y2FuX3F1ZXVlKQogCQlzaG9zdC0+Y2FuX3F1ZXVlID0gSVNDU0lfREVGX1hNSVRfQ01EU19NQVg7CiAKKwlpZiAoIXNob3N0LT5jbWRfcGVyX2x1bikKKwkJc2hvc3QtPmNtZF9wZXJfbHVuID0gSVNDU0lfREVGX0NNRF9QRVJfTFVOOworCiAJaWYgKCFzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0KQogCQlzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0ID0gaXNjc2lfZWhfY21kX3RpbWVkX291dDsKIAlyZXR1cm4gc2NzaV9hZGRfaG9zdChzaG9zdCwgcGRldik7CkBAIC0yMDA4LDEzICsyMDYxLDEzIEBACiAgKiBpc2NzaV9ob3N0X2FsbG9jIC0gYWxsb2NhdGUgYSBob3N0IGFuZCBkcml2ZXIgZGF0YQogICogQHNodDogc2NzaSBob3N0IHRlbXBsYXRlCiAgKiBAZGRfZGF0YV9zaXplOiBkcml2ZXIgaG9zdCBkYXRhIHNpemUKLSAqIEBxZGVwdGg6IGRlZmF1bHQgZGV2aWNlIHF1ZXVlIGRlcHRoCisgKiBAeG1pdF9jYW5fc2xlZXA6IGJvb2wgaW5kaWNhdGluZyBpZiBMTEQgd2lsbCBxdWV1ZSBJTyBmcm9tIGEgd29yayBxdWV1ZQogICoKICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBieSBwYXJ0aWFsIG9mZmxvYWQgYW5kIHNvZnR3YXJlIGlzY3NpIGRyaXZlcnMuCiAgKiBUbyBhY2Nlc3MgdGhlIGRyaXZlciBzcGVjaWZpYyBtZW1vcnkgdXNlIHRoZSBpc2NzaV9ob3N0X3ByaXYoKSBtYWNyby4KICAqLwogc3RydWN0IFNjc2lfSG9zdCAqaXNjc2lfaG9zdF9hbGxvYyhzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQsCi0JCQkJICAgaW50IGRkX2RhdGFfc2l6ZSwgdWludDE2X3QgcWRlcHRoKQorCQkJCSAgIGludCBkZF9kYXRhX3NpemUsIGJvb2wgeG1pdF9jYW5fc2xlZXApCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0OwpAQCAtMjAyMiwyOCArMjA3NSwzMSBAQAogCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKHNodCwgc2l6ZW9mKHN0cnVjdCBpc2NzaV9ob3N0KSArIGRkX2RhdGFfc2l6ZSk7CiAJaWYgKCFzaG9zdCkKIAkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAocWRlcHRoID4gSVNDU0lfTUFYX0NNRF9QRVJfTFVOIHx8IHFkZXB0aCA8IDEpIHsKLQkJaWYgKHFkZXB0aCAhPSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogaW52YWxpZCBxdWV1ZSBkZXB0aCBvZiAlZC4gIgotCQkJICAgICAgICJRdWV1ZSBkZXB0aCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgJWQuXG4iLAotCQkJICAgICAgIHFkZXB0aCwgSVNDU0lfTUFYX0NNRF9QRVJfTFVOKTsKLQkJcWRlcHRoID0gSVNDU0lfREVGX0NNRF9QRVJfTFVOOwotCX0KLQlzaG9zdC0+Y21kX3Blcl9sdW4gPSBxZGVwdGg7Ci0KIAlpaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJaWYgKHhtaXRfY2FuX3NsZWVwKSB7CisJCXNucHJpbnRmKGlob3N0LT53b3JrcV9uYW1lLCBzaXplb2YoaWhvc3QtPndvcmtxX25hbWUpLAorCQkJImlzY3NpX3FfJWQiLCBzaG9zdC0+aG9zdF9ubyk7CisJCWlob3N0LT53b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGlob3N0LT53b3JrcV9uYW1lKTsKKwkJaWYgKCFpaG9zdC0+d29ya3EpCisJCQlnb3RvIGZyZWVfaG9zdDsKKwl9CisKIAlzcGluX2xvY2tfaW5pdCgmaWhvc3QtPmxvY2spOwogCWlob3N0LT5zdGF0ZSA9IElTQ1NJX0hPU1RfU0VUVVA7CiAJaWhvc3QtPm51bV9zZXNzaW9ucyA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaWhvc3QtPnNlc3Npb25fcmVtb3ZhbF93cSk7CiAJcmV0dXJuIHNob3N0OworCitmcmVlX2hvc3Q6CisJc2NzaV9ob3N0X3B1dChzaG9zdCk7CisJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ob3N0X2FsbG9jKTsKIAogc3RhdGljIHZvaWQgaXNjc2lfbm90aWZ5X2hvc3RfcmVtb3ZlZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uKQogewotCWlzY3NpX3Nlc3Npb25fZmFpbHVyZShjbHNfc2Vzc2lvbiwgSVNDU0lfRVJSX0lOVkFMSURfSE9TVCk7CisJaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKGNsc19zZXNzaW9uLT5kZF9kYXRhLCBJU0NTSV9FUlJfSU5WQUxJRF9IT1NUKTsKIH0KIAogLyoqCkBAIC0yMDY5LDYgKzIxMjUsOCBAQAogCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChzaG9zdCk7CisJaWYgKGlob3N0LT53b3JrcSkKKwkJZGVzdHJveV93b3JrcXVldWUoaWhvc3QtPndvcmtxKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2hvc3RfcmVtb3ZlKTsKIApAQCAtMjQ2NywxNCArMjUyNSwxNiBAQAogCiAJLyogaGFuZGxlIHBlbmRpbmcgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGFzaywgdG1wLCAmY29ubi0+bWdtdHF1ZXVlLCBydW5uaW5nKSB7Ci0JCWRlYnVnX3Njc2koImZsdXNoaW5nIHBlbmRpbmcgbWdtdCB0YXNrIGl0dCAweCV4XG4iLCB0YXNrLT5pdHQpOworCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiZmx1c2hpbmcgcGVuZGluZyBtZ210IHRhc2sgIgorCQkJCSAgIml0dCAweCV4XG4iLCB0YXNrLT5pdHQpOwogCQkvKiByZWxlYXNlIHJlZiBmcm9tIHByZXAgdGFzayAqLwogCQlfX2lzY3NpX3B1dF90YXNrKHRhc2spOwogCX0KIAogCS8qIGhhbmRsZSBydW5uaW5nICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRhc2ssIHRtcCwgJmNvbm4tPm1nbXRfcnVuX2xpc3QsIHJ1bm5pbmcpIHsKLQkJZGVidWdfc2NzaSgiZmx1c2hpbmcgcnVubmluZyBtZ210IHRhc2sgaXR0IDB4JXhcbiIsIHRhc2stPml0dCk7CisJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJmbHVzaGluZyBydW5uaW5nIG1nbXQgdGFzayAiCisJCQkJICAiaXR0IDB4JXhcbiIsIHRhc2stPml0dCk7CiAJCS8qIHJlbGVhc2UgcmVmIGZyb20gcHJlcCB0YXNrICovCiAJCV9faXNjc2lfcHV0X3Rhc2sodGFzayk7CiAJfQpAQCAtMjUyNCw3ICsyNTg0LDcgQEAKIAkJY29ubi0+ZGF0YWRnc3RfZW4gPSAwOwogCQlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfSU5fUkVDT1ZFUlkgJiYKIAkJICAgIG9sZF9zdG9wX3N0YWdlICE9IFNUT1BfQ09OTl9SRUNPVkVSKSB7Ci0JCQlkZWJ1Z19zY3NpKCJibG9ja2luZyBzZXNzaW9uXG4iKTsKKwkJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJibG9ja2luZyBzZXNzaW9uXG4iKTsKIAkJCWlzY3NpX2Jsb2NrX3Nlc3Npb24oc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCmluZGV4IGU3NzA1ZDMuLjkxZjhjZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKQEAgLTQ5LDEzICs0OSwyMSBAQAogCSAgICAgICJBbGV4IEFpem1hbiA8aXRuNzgwQHlhaG9vLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaVNDU0kvVENQIGRhdGEtcGF0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI3VuZGVmIERFQlVHX1RDUAogCi0jaWZkZWYgREVCVUdfVENQCi0jZGVmaW5lIGRlYnVnX3RjcChmbXQuLi4pIHByaW50ayhLRVJOX0lORk8gInRjcDogIiBmbXQpCi0jZWxzZQotI2RlZmluZSBkZWJ1Z190Y3AoZm10Li4uKQotI2VuZGlmCitzdGF0aWMgaW50IGlzY3NpX2RiZ19saWJ0Y3A7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbGliaXNjc2lfdGNwLCBpc2NzaV9kYmdfbGlidGNwLCBpbnQsCisJCSAgIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbGliaXNjc2lfdGNwLCAiVHVybiBvbiBkZWJ1Z2dpbmcgZm9yIGxpYmlzY3NpX3RjcCAiCisJCSAibW9kdWxlLiBTZXQgdG8gMSB0byB0dXJuIG9uLCBhbmQgemVybyB0byB0dXJuIG9mZi4gRGVmYXVsdCAiCisJCSAiaXMgb2ZmLiIpOworCisjZGVmaW5lIElTQ1NJX0RCR19UQ1AoX2Nvbm4sIGRiZ19mbXQsIGFyZy4uLikJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChpc2NzaV9kYmdfbGlidGNwKQkJCQlcCisJCQlpc2NzaV9jb25uX3ByaW50ayhLRVJOX0lORk8sIF9jb25uLAlcCisJCQkJCSAgICAgIiVzICIgZGJnX2ZtdCwJXAorCQkJCQkgICAgIF9fZnVuY19fLCAjI2FyZyk7CVwKKwl9IHdoaWxlICgwKTsKIAogc3RhdGljIGludCBpc2NzaV90Y3BfaGRyX3JlY3ZfZG9uZShzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uLAogCQkJCSAgIHN0cnVjdCBpc2NzaV9zZWdtZW50ICpzZWdtZW50KTsKQEAgLTEyMywxOCArMTMxLDEzIEBACiAJaWYgKHBhZ2VfY291bnQoc2dfcGFnZShzZykpID49IDEgJiYgIXJlY3YpCiAJCXJldHVybjsKIAotCWRlYnVnX3RjcCgiaXNjc2lfdGNwX3NlZ21lbnRfbWFwICVzICVwXG4iLCByZWN2ID8gInJlY3YiIDogInhtaXQiLAotCQkgIHNlZ21lbnQpOwogCXNlZ21lbnQtPnNnX21hcHBlZCA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9TT0ZUSVJRMCk7CiAJc2VnbWVudC0+ZGF0YSA9IHNlZ21lbnQtPnNnX21hcHBlZCArIHNnLT5vZmZzZXQgKyBzZWdtZW50LT5zZ19vZmZzZXQ7CiB9CiAKIHZvaWQgaXNjc2lfdGNwX3NlZ21lbnRfdW5tYXAoc3RydWN0IGlzY3NpX3NlZ21lbnQgKnNlZ21lbnQpCiB7Ci0JZGVidWdfdGNwKCJpc2NzaV90Y3Bfc2VnbWVudF91bm1hcCAlcFxuIiwgc2VnbWVudCk7Ci0KIAlpZiAoc2VnbWVudC0+c2dfbWFwcGVkKSB7Ci0JCWRlYnVnX3RjcCgiaXNjc2lfdGNwX3NlZ21lbnRfdW5tYXAgdmFsaWRcbiIpOwogCQlrdW5tYXBfYXRvbWljKHNlZ21lbnQtPnNnX21hcHBlZCwgS01fU09GVElSUTApOwogCQlzZWdtZW50LT5zZ19tYXBwZWQgPSBOVUxMOwogCQlzZWdtZW50LT5kYXRhID0gTlVMTDsKQEAgLTE4MCw4ICsxODMsOSBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKIAl1bnNpZ25lZCBpbnQgcGFkOwogCi0JZGVidWdfdGNwKCJjb3BpZWQgJXUgJXUgc2l6ZSAldSAlc1xuIiwgc2VnbWVudC0+Y29waWVkLCBjb3BpZWQsCi0JCSAgc2VnbWVudC0+c2l6ZSwgcmVjdiA/ICJyZWN2IiA6ICJ4bWl0Iik7CisJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwgImNvcGllZCAldSAldSBzaXplICV1ICVzXG4iLAorCQkgICAgICBzZWdtZW50LT5jb3BpZWQsIGNvcGllZCwgc2VnbWVudC0+c2l6ZSwKKwkJICAgICAgcmVjdiA/ICJyZWN2IiA6ICJ4bWl0Iik7CiAJaWYgKHNlZ21lbnQtPmhhc2ggJiYgY29waWVkKSB7CiAJCS8qCiAJCSAqIElmIGEgc2VnbWVudCBpcyBrbWFwZCB3ZSBtdXN0IHVubWFwIGl0IGJlZm9yZSBzZW5kaW5nCkBAIC0yMTQsOCArMjE4LDggQEAKIAlpc2NzaV90Y3Bfc2VnbWVudF91bm1hcChzZWdtZW50KTsKIAogCS8qIERvIHdlIGhhdmUgbW9yZSBzY2F0dGVybGlzdCBlbnRyaWVzPyAqLwotCWRlYnVnX3RjcCgidG90YWwgY29waWVkICV1IHRvdGFsIHNpemUgJXVcbiIsIHNlZ21lbnQtPnRvdGFsX2NvcGllZCwKLQkJICAgc2VnbWVudC0+dG90YWxfc2l6ZSk7CisJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwgInRvdGFsIGNvcGllZCAldSB0b3RhbCBzaXplICV1XG4iLAorCQkgICAgICBzZWdtZW50LT50b3RhbF9jb3BpZWQsIHNlZ21lbnQtPnRvdGFsX3NpemUpOwogCWlmIChzZWdtZW50LT50b3RhbF9jb3BpZWQgPCBzZWdtZW50LT50b3RhbF9zaXplKSB7CiAJCS8qIFByb2NlZWQgdG8gdGhlIG5leHQgZW50cnkgaW4gdGhlIHNjYXR0ZXJsaXN0LiAqLwogCQlpc2NzaV90Y3Bfc2VnbWVudF9pbml0X3NnKHNlZ21lbnQsIHNnX25leHQoc2VnbWVudC0+c2cpLApAQCAtMjI5LDcgKzIzMyw4IEBACiAJaWYgKCEodGNwX2Nvbm4tPmlzY3NpX2Nvbm4tPnNlc3Npb24tPnR0LT5jYXBzICYgQ0FQX1BBRERJTkdfT0ZGTE9BRCkpIHsKIAkJcGFkID0gaXNjc2lfcGFkZGluZyhzZWdtZW50LT50b3RhbF9jb3BpZWQpOwogCQlpZiAocGFkICE9IDApIHsKLQkJCWRlYnVnX3RjcCgiY29uc3VtZSAlZCBwYWQgYnl0ZXNcbiIsIHBhZCk7CisJCQlJU0NTSV9EQkdfVENQKHRjcF9jb25uLT5pc2NzaV9jb25uLAorCQkJCSAgICAgICJjb25zdW1lICVkIHBhZCBieXRlc1xuIiwgcGFkKTsKIAkJCXNlZ21lbnQtPnRvdGFsX3NpemUgKz0gcGFkOwogCQkJc2VnbWVudC0+c2l6ZSA9IHBhZDsKIAkJCXNlZ21lbnQtPmRhdGEgPSBzZWdtZW50LT5wYWRidWY7CkBAIC0yNzgsMTMgKzI4MywxMyBAQAogCiAJd2hpbGUgKCFpc2NzaV90Y3Bfc2VnbWVudF9kb25lKHRjcF9jb25uLCBzZWdtZW50LCAxLCBjb3B5KSkgewogCQlpZiAoY29waWVkID09IGxlbikgewotCQkJZGVidWdfdGNwKCJpc2NzaV90Y3Bfc2VnbWVudF9yZWN2IGNvcGllZCAlZCBieXRlc1xuIiwKLQkJCQkgIGxlbik7CisJCQlJU0NTSV9EQkdfVENQKHRjcF9jb25uLT5pc2NzaV9jb25uLAorCQkJCSAgICAgICJjb3BpZWQgJWQgYnl0ZXNcbiIsIGxlbik7CiAJCQlicmVhazsKIAkJfQogCiAJCWNvcHkgPSBtaW4obGVuIC0gY29waWVkLCBzZWdtZW50LT5zaXplIC0gc2VnbWVudC0+Y29waWVkKTsKLQkJZGVidWdfdGNwKCJpc2NzaV90Y3Bfc2VnbWVudF9yZWN2IGNvcHlpbmcgJWRcbiIsIGNvcHkpOworCQlJU0NTSV9EQkdfVENQKHRjcF9jb25uLT5pc2NzaV9jb25uLCAiY29weWluZyAlZFxuIiwgY29weSk7CiAJCW1lbWNweShzZWdtZW50LT5kYXRhICsgc2VnbWVudC0+Y29waWVkLCBwdHIgKyBjb3BpZWQsIGNvcHkpOwogCQljb3BpZWQgKz0gY29weTsKIAl9CkBAIC0zMTEsNyArMzE2LDcgQEAKIAogCWlmIChtZW1jbXAoc2VnbWVudC0+cmVjdl9kaWdlc3QsIHNlZ21lbnQtPmRpZ2VzdCwKIAkJICAgc2VnbWVudC0+ZGlnZXN0X2xlbikpIHsKLQkJZGVidWdfc2NzaSgiZGlnZXN0IG1pc21hdGNoXG4iKTsKKwkJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwgImRpZ2VzdCBtaXNtYXRjaFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzU1LDEyICszNjAsOCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlkZWJ1Z19zY3NpKCJpc2NzaV9zZWdtZW50X3NlZWtfc2cgb2Zmc2V0ICV1IHNpemUgJWxsdVxuIiwKLQkJICBvZmZzZXQsIHNpemUpOwogCV9faXNjc2lfc2VnbWVudF9pbml0KHNlZ21lbnQsIHNpemUsIGRvbmUsIGhhc2gpOwogCWZvcl9lYWNoX3NnKHNnX2xpc3QsIHNnLCBzZ19jb3VudCwgaSkgewotCQlkZWJ1Z19zY3NpKCJzZyAlZCwgbGVuICV1IG9mZnNldCAldVxuIiwgaSwgc2ctPmxlbmd0aCwKLQkJCSAgIHNnLT5vZmZzZXQpOwogCQlpZiAob2Zmc2V0IDwgc2ctPmxlbmd0aCkgewogCQkJaXNjc2lfdGNwX3NlZ21lbnRfaW5pdF9zZyhzZWdtZW50LCBzZywgb2Zmc2V0KTsKIAkJCXJldHVybiAwOwpAQCAtMzgyLDggKzM4Myw5IEBACiAgKi8KIHZvaWQgaXNjc2lfdGNwX2hkcl9yZWN2X3ByZXAoc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubikKIHsKLQlkZWJ1Z190Y3AoImlzY3NpX3RjcF9oZHJfcmVjdl9wcmVwKCVwJXMpXG4iLCB0Y3BfY29ubiwKLQkJICB0Y3BfY29ubi0+aXNjc2lfY29ubi0+aGRyZGdzdF9lbiA/ICIsIGRpZ2VzdCBlbmFibGVkIiA6ICIiKTsKKwlJU0NTSV9EQkdfVENQKHRjcF9jb25uLT5pc2NzaV9jb25uLAorCQkgICAgICAiKCVzKVxuIiwgdGNwX2Nvbm4tPmlzY3NpX2Nvbm4tPmhkcmRnc3RfZW4gPworCQkgICAgICAiZGlnZXN0IGVuYWJsZWQiIDogImRpZ2VzdCBkaXNhYmxlZCIpOwogCWlzY3NpX3NlZ21lbnRfaW5pdF9saW5lYXIoJnRjcF9jb25uLT5pbi5zZWdtZW50LAogCQkJCXRjcF9jb25uLT5pbi5oZHJfYnVmLCBzaXplb2Yoc3RydWN0IGlzY3NpX2hkciksCiAJCQkJaXNjc2lfdGNwX2hkcl9yZWN2X2RvbmUsIE5VTEwpOwpAQCAtNDQ2LDcgKzQ0OCw3IEBACiAJd2hpbGUgKF9fa2ZpZm9fZ2V0KHRjcF90YXNrLT5yMnRxdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpKSB7CiAJCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKLQkJZGVidWdfc2NzaSgiaXNjc2lfdGNwX2NsZWFudXBfdGFzayBwZW5kaW5nIHIydCBkcm9wcGVkXG4iKTsKKwkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLCAicGVuZGluZyByMnQgZHJvcHBlZFxuIik7CiAJfQogCiAJcjJ0ID0gdGNwX3Rhc2stPnIydDsKQEAgLTQ3Niw4ICs0NzgsOCBAQAogCQlyZXR1cm4gMDsKIAogCWlmICh0Y3BfdGFzay0+ZXhwX2RhdGFzbiAhPSBkYXRhc24pIHsKLQkJZGVidWdfdGNwKCIlczogdGFzay0+ZXhwX2RhdGFzbiglZCkgIT0gcmhkci0+ZGF0YXNuKCVkKVxuIiwKLQkJICAgICAgICAgIF9fZnVuY19fLCB0Y3BfdGFzay0+ZXhwX2RhdGFzbiwgZGF0YXNuKTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAidGFzay0+ZXhwX2RhdGFzbiglZCkgIT0gcmhkci0+ZGF0YXNuKCVkKSIKKwkJCSAgICAgICJcbiIsIHRjcF90YXNrLT5leHBfZGF0YXNuLCBkYXRhc24pOwogCQlyZXR1cm4gSVNDU0lfRVJSX0RBVEFTTjsKIAl9CiAKQEAgLTQ4NSw5ICs0ODcsOSBAQAogCiAJdGNwX3Rhc2stPmRhdGFfb2Zmc2V0ID0gYmUzMl90b19jcHUocmhkci0+b2Zmc2V0KTsKIAlpZiAodGNwX3Rhc2stPmRhdGFfb2Zmc2V0ICsgdGNwX2Nvbm4tPmluLmRhdGFsZW4gPiB0b3RhbF9pbl9sZW5ndGgpIHsKLQkJZGVidWdfdGNwKCIlczogZGF0YV9vZmZzZXQoJWQpICsgZGF0YV9sZW4oJWQpID4gdG90YWxfbGVuZ3RoX2luKCVkKVxuIiwKLQkJICAgICAgICAgIF9fZnVuY19fLCB0Y3BfdGFzay0+ZGF0YV9vZmZzZXQsCi0JCSAgICAgICAgICB0Y3BfY29ubi0+aW4uZGF0YWxlbiwgdG90YWxfaW5fbGVuZ3RoKTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAiZGF0YV9vZmZzZXQoJWQpICsgZGF0YV9sZW4oJWQpID4gIgorCQkJICAgICAgInRvdGFsX2xlbmd0aF9pbiglZClcbiIsIHRjcF90YXNrLT5kYXRhX29mZnNldCwKKwkJCSAgICAgIHRjcF9jb25uLT5pbi5kYXRhbGVuLCB0b3RhbF9pbl9sZW5ndGgpOwogCQlyZXR1cm4gSVNDU0lfRVJSX0RBVEFfT0ZGU0VUOwogCX0KIApAQCAtNTE4LDggKzUyMCw4IEBACiAJfQogCiAJaWYgKHRjcF90YXNrLT5leHBfZGF0YXNuICE9IHIydHNuKXsKLQkJZGVidWdfdGNwKCIlczogdGFzay0+ZXhwX2RhdGFzbiglZCkgIT0gcmhkci0+cjJ0c24oJWQpXG4iLAotCQkgICAgICAgICAgX19mdW5jX18sIHRjcF90YXNrLT5leHBfZGF0YXNuLCByMnRzbik7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgInRhc2stPmV4cF9kYXRhc24oJWQpICE9IHJoZHItPnIydHNuKCVkKVxuIiwKKwkJCSAgICAgIHRjcF90YXNrLT5leHBfZGF0YXNuLCByMnRzbik7CiAJCXJldHVybiBJU0NTSV9FUlJfUjJUU047CiAJfQogCkBAIC01NTIsOSArNTU0LDkgQEAKIAl9CiAKIAlpZiAocjJ0LT5kYXRhX2xlbmd0aCA+IHNlc3Npb24tPm1heF9idXJzdCkKLQkJZGVidWdfc2NzaSgiaW52YWxpZCBSMlQgd2l0aCBkYXRhIGxlbiAldSBhbmQgbWF4IGJ1cnN0ICV1LiIKLQkJCSAgICJBdHRlbXB0aW5nIHRvIGV4ZWN1dGUgcmVxdWVzdC5cbiIsCi0JCQkgICAgcjJ0LT5kYXRhX2xlbmd0aCwgc2Vzc2lvbi0+bWF4X2J1cnN0KTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAiaW52YWxpZCBSMlQgd2l0aCBkYXRhIGxlbiAldSBhbmQgbWF4ICIKKwkJCSAgICAgICJidXJzdCAldS4gQXR0ZW1wdGluZyB0byBleGVjdXRlIHJlcXVlc3QuXG4iLAorCQkJICAgICAgcjJ0LT5kYXRhX2xlbmd0aCwgc2Vzc2lvbi0+bWF4X2J1cnN0KTsKIAogCXIydC0+ZGF0YV9vZmZzZXQgPSBiZTMyX3RvX2NwdShyaGRyLT5kYXRhX29mZnNldCk7CiAJaWYgKHIydC0+ZGF0YV9vZmZzZXQgKyByMnQtPmRhdGFfbGVuZ3RoID4gc2NzaV9vdXQodGFzay0+c2MpLT5sZW5ndGgpIHsKQEAgLTY0MSw4ICs2NDMsOCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JZGVidWdfdGNwKCJvcGNvZGUgMHgleCBhaHNsZW4gJWQgZGF0YWxlbiAlZFxuIiwKLQkJICBvcGNvZGUsIGFoc2xlbiwgdGNwX2Nvbm4tPmluLmRhdGFsZW4pOworCUlTQ1NJX0RCR19UQ1AoY29ubiwgIm9wY29kZSAweCV4IGFoc2xlbiAlZCBkYXRhbGVuICVkXG4iLAorCQkgICAgICBvcGNvZGUsIGFoc2xlbiwgdGNwX2Nvbm4tPmluLmRhdGFsZW4pOwogCiAJc3dpdGNoKG9wY29kZSkgewogCWNhc2UgSVNDU0lfT1BfU0NTSV9EQVRBX0lOOgpAQCAtNjc0LDEwICs2NzYsMTAgQEAKIAkJCSAgICAhKGNvbm4tPnNlc3Npb24tPnR0LT5jYXBzICYgQ0FQX0RJR0VTVF9PRkZMT0FEKSkKIAkJCQlyeF9oYXNoID0gdGNwX2Nvbm4tPnJ4X2hhc2g7CiAKLQkJCWRlYnVnX3RjcCgiaXNjc2lfdGNwX2JlZ2luX2RhdGFfaW4oJXAsIG9mZnNldD0lZCwgIgotCQkJCSAgImRhdGFsZW49JWQpXG4iLCB0Y3BfY29ubiwKLQkJCQkgIHRjcF90YXNrLT5kYXRhX29mZnNldCwKLQkJCQkgIHRjcF9jb25uLT5pbi5kYXRhbGVuKTsKKwkJCUlTQ1NJX0RCR19UQ1AoY29ubiwgImlzY3NpX3RjcF9iZWdpbl9kYXRhX2luKCAiCisJCQkJICAgICAib2Zmc2V0PSVkLCBkYXRhbGVuPSVkKVxuIiwKKwkJCQkgICAgICB0Y3BfdGFzay0+ZGF0YV9vZmZzZXQsCisJCQkJICAgICAgdGNwX2Nvbm4tPmluLmRhdGFsZW4pOwogCQkJcmMgPSBpc2NzaV9zZWdtZW50X3NlZWtfc2coJnRjcF9jb25uLT5pbi5zZWdtZW50LAogCQkJCQkJICAgc2RiLT50YWJsZS5zZ2wsCiAJCQkJCQkgICBzZGItPnRhYmxlLm5lbnRzLApAQCAtODU0LDEwICs4NTYsMTAgQEAKIAl1bnNpZ25lZCBpbnQgY29uc3VtZWQgPSAwOwogCWludCByYyA9IDA7CiAKLQlkZWJ1Z190Y3AoImluICVkIGJ5dGVzXG4iLCBza2ItPmxlbiAtIG9mZnNldCk7CisJSVNDU0lfREJHX1RDUChjb25uLCAiaW4gJWQgYnl0ZXNcbiIsIHNrYi0+bGVuIC0gb2Zmc2V0KTsKIAogCWlmICh1bmxpa2VseShjb25uLT5zdXNwZW5kX3J4KSkgewotCQlkZWJ1Z190Y3AoImNvbm4gJWQgUnggc3VzcGVuZGVkIVxuIiwgY29ubi0+aWQpOworCQlJU0NTSV9EQkdfVENQKGNvbm4sICJSeCBzdXNwZW5kZWQhXG4iKTsKIAkJKnN0YXR1cyA9IElTQ1NJX1RDUF9TVVNQRU5ERUQ7CiAJCXJldHVybiAwOwogCX0KQEAgLTg3NCwxNSArODc2LDE2IEBACiAKIAkJYXZhaWwgPSBza2Jfc2VxX3JlYWQoY29uc3VtZWQsICZwdHIsICZzZXEpOwogCQlpZiAoYXZhaWwgPT0gMCkgewotCQkJZGVidWdfdGNwKCJubyBtb3JlIGRhdGEgYXZhaWwuIENvbnN1bWVkICVkXG4iLAotCQkJCSAgY29uc3VtZWQpOworCQkJSVNDU0lfREJHX1RDUChjb25uLCAibm8gbW9yZSBkYXRhIGF2YWlsLiBDb25zdW1lZCAlZFxuIiwKKwkJCQkgICAgICBjb25zdW1lZCk7CiAJCQkqc3RhdHVzID0gSVNDU0lfVENQX1NLQl9ET05FOwogCQkJc2tiX2Fib3J0X3NlcV9yZWFkKCZzZXEpOwogCQkJZ290byBza2JfZG9uZTsKIAkJfQogCQlCVUdfT04oc2VnbWVudC0+Y29waWVkID49IHNlZ21lbnQtPnNpemUpOwogCi0JCWRlYnVnX3RjcCgic2tiICVwIHB0cj0lcCBhdmFpbD0ldVxuIiwgc2tiLCBwdHIsIGF2YWlsKTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAic2tiICVwIHB0cj0lcCBhdmFpbD0ldVxuIiwgc2tiLCBwdHIsCisJCQkgICAgICBhdmFpbCk7CiAJCXJjID0gaXNjc2lfdGNwX3NlZ21lbnRfcmVjdih0Y3BfY29ubiwgc2VnbWVudCwgcHRyLCBhdmFpbCk7CiAJCUJVR19PTihyYyA9PSAwKTsKIAkJY29uc3VtZWQgKz0gcmM7CkBAIC04OTUsMTEgKzg5OCwxMSBAQAogCiBzZWdtZW50X2RvbmU6CiAJKnN0YXR1cyA9IElTQ1NJX1RDUF9TRUdNRU5UX0RPTkU7Ci0JZGVidWdfdGNwKCJzZWdtZW50IGRvbmVcbiIpOworCUlTQ1NJX0RCR19UQ1AoY29ubiwgInNlZ21lbnQgZG9uZVxuIik7CiAJcmMgPSBzZWdtZW50LT5kb25lKHRjcF9jb25uLCBzZWdtZW50KTsKIAlpZiAocmMgIT0gMCkgewogCQkqc3RhdHVzID0gSVNDU0lfVENQX0NPTk5fRVJSOwotCQlkZWJ1Z190Y3AoIkVycm9yIHJlY2VpdmluZyBQRFUsIGVycm5vPSVkXG4iLCByYyk7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgIkVycm9yIHJlY2VpdmluZyBQRFUsIGVycm5vPSVkXG4iLCByYyk7CiAJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCByYyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTkyOSw4ICs5MzIsNyBAQAogCQkgKiBtZ210IHRhc2tzIGRvIG5vdCBoYXZlIGEgc2NhdHRlcmxpc3Qgc2luY2UgdGhleSBjb21lCiAJCSAqIGluIGZyb20gdGhlIGlzY3NpIGludGVyZmFjZS4KIAkJICovCi0JCWRlYnVnX3Njc2koIm10YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwgY29ubi0+aWQsCi0JCQkgICB0YXNrLT5pdHQpOworCQlJU0NTSV9EQkdfVENQKGNvbm4sICJtdGFzayBkZXEgW2l0dCAweCV4XVxuIiwgdGFzay0+aXR0KTsKIAogCQlyZXR1cm4gY29ubi0+c2Vzc2lvbi0+dHQtPmluaXRfcGR1KHRhc2ssIDAsIHRhc2stPmRhdGFfY291bnQpOwogCX0KQEAgLTkzOSw5ICs5NDEsOCBAQAogCXRjcF90YXNrLT5leHBfZGF0YXNuID0gMDsKIAogCS8qIFByZXBhcmUgUERVLCBvcHRpb25hbGx5IHcvIGltbWVkaWF0ZSBkYXRhICovCi0JZGVidWdfc2NzaSgidGFzayBkZXEgW2NpZCAlZCBpdHQgMHgleCBpbW0gJWQgdW5zb2wgJWRdXG4iLAotCQkgICAgY29ubi0+aWQsIHRhc2stPml0dCwgdGFzay0+aW1tX2NvdW50LAotCQkgICAgdGFzay0+dW5zb2xfcjJ0LmRhdGFfbGVuZ3RoKTsKKwlJU0NTSV9EQkdfVENQKGNvbm4sICJ0YXNrIGRlcSBbaXR0IDB4JXggaW1tICVkIHVuc29sICVkXVxuIiwKKwkJICAgICAgdGFzay0+aXR0LCB0YXNrLT5pbW1fY291bnQsIHRhc2stPnVuc29sX3IydC5kYXRhX2xlbmd0aCk7CiAKIAllcnIgPSBjb25uLT5zZXNzaW9uLT50dC0+aW5pdF9wZHUodGFzaywgMCwgdGFzay0+aW1tX2NvdW50KTsKIAlpZiAoZXJyKQpAQCAtOTY1LDcgKzk2Niw4IEBACiAJCQlyMnQgPSB0Y3BfdGFzay0+cjJ0OwogCQkJLyogQ29udGludWUgd2l0aCB0aGlzIFIyVD8gKi8KIAkJCWlmIChyMnQtPmRhdGFfbGVuZ3RoIDw9IHIydC0+c2VudCkgewotCQkJCWRlYnVnX3Njc2koIiAgZG9uZSB3aXRoIHIydCAlcFxuIiwgcjJ0KTsKKwkJCQlJU0NTSV9EQkdfVENQKHRhc2stPmNvbm4sCisJCQkJCSAgICAgICIgIGRvbmUgd2l0aCByMnQgJXBcbiIsIHIydCk7CiAJCQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsCiAJCQkJCSAgICAodm9pZCAqKSZ0Y3BfdGFzay0+cjJ0LAogCQkJCQkgICAgc2l6ZW9mKHZvaWQgKikpOwpAQCAtMTAxOSw3ICsxMDIxLDcgQEAKIAlyMnQgPSBpc2NzaV90Y3BfZ2V0X2N1cnJfcjJ0KHRhc2spOwogCWlmIChyMnQgPT0gTlVMTCkgewogCQkvKiBXYWl0aW5nIGZvciBtb3JlIFIyVHMgdG8gYXJyaXZlLiAqLwotCQlkZWJ1Z190Y3AoIm5vIFIyVHMgeWV0XG4iKTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAibm8gUjJUcyB5ZXRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEwMjgsOSArMTAzMCw5IEBACiAJCXJldHVybiByYzsKIAlpc2NzaV9wcmVwX2RhdGFfb3V0X3BkdSh0YXNrLCByMnQsIChzdHJ1Y3QgaXNjc2lfZGF0YSAqKSB0YXNrLT5oZHIpOwogCi0JZGVidWdfc2NzaSgic29sIGRvdXQgJXAgW2RzbiAlZCBpdHQgMHgleCBkb2ZmICVkIGRsZW4gJWRdXG4iLAotCQkgICByMnQsIHIydC0+ZGF0YXNuIC0gMSwgdGFzay0+aGRyLT5pdHQsCi0JCSAgIHIydC0+ZGF0YV9vZmZzZXQgKyByMnQtPnNlbnQsIHIydC0+ZGF0YV9jb3VudCk7CisJSVNDU0lfREJHX1RDUChjb25uLCAic29sIGRvdXQgJXAgW2RzbiAlZCBpdHQgMHgleCBkb2ZmICVkIGRsZW4gJWRdXG4iLAorCQkgICAgICByMnQsIHIydC0+ZGF0YXNuIC0gMSwgdGFzay0+aGRyLT5pdHQsCisJCSAgICAgIHIydC0+ZGF0YV9vZmZzZXQgKyByMnQtPnNlbnQsIHIydC0+ZGF0YV9jb3VudCk7CiAKIAlyYyA9IGNvbm4tPnNlc3Npb24tPnR0LT5pbml0X3BkdSh0YXNrLCByMnQtPmRhdGFfb2Zmc2V0ICsgcjJ0LT5zZW50LAogCQkJCQkgcjJ0LT5kYXRhX2NvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKaW5kZXggYjYxNWVkYS4uODFjZGNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKQEAgLTExMzIsNyArMTEzMiw3IEBACiB9CiAKICN1bmRlZiBscGZjX2RlYnVnZnNfb3BfZGlzY190cmMKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kaXNjX3RyYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kaXNjX3RyYyA9IHsKIAkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxwZmNfZGVidWdmc19kaXNjX3RyY19vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCkBAIC0xMTQxLDcgKzExNDEsNyBAQAogfTsKIAogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9ub2RlbGlzdAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX25vZGVsaXN0ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX25vZGVsaXN0ID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgICAgICAgbHBmY19kZWJ1Z2ZzX25vZGVsaXN0X29wZW4sCiAJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKQEAgLTExNTAsNyArMTE1MCw3IEBACiB9OwogCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2hicWluZm8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9oYnFpbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2hicWluZm8gPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2RlYnVnZnNfaGJxaW5mb19vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCkBAIC0xMTU5LDcgKzExNTksNyBAQAogfTsKIAogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9kdW1wSEJBU2xpbQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBIQkFTbGltID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBIQkFTbGltID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgICAgICAgbHBmY19kZWJ1Z2ZzX2R1bXBIQkFTbGltX29wZW4sCiAJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKQEAgLTExNjgsNyArMTE2OCw3IEBACiB9OwogCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2R1bXBIb3N0U2xpbQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBIb3N0U2xpbSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kdW1wSG9zdFNsaW0gPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2RlYnVnZnNfZHVtcEhvc3RTbGltX29wZW4sCiAJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKQEAgLTExNzcsNyArMTE3Nyw3IEBACiB9OwogCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2R1bXBEYXRhCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZHVtcERhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZHVtcERhdGEgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2RlYnVnZnNfZHVtcERhdGFfb3BlbiwKIAkubGxzZWVrID0gICAgICAgbHBmY19kZWJ1Z2ZzX2xzZWVrLApAQCAtMTE4Nyw3ICsxMTg3LDcgQEAKIH07CiAKICN1bmRlZiBscGZjX2RlYnVnZnNfb3BfZHVtcERpZgotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBEaWYgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZHVtcERpZiA9IHsKIAkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxwZmNfZGVidWdmc19kdW1wRGlmX29wZW4sCiAJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKQEAgLTExOTcsNyArMTE5Nyw3IEBACiB9OwogCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX3Nsb3dfcmluZ190cmMKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9zbG93X3JpbmdfdHJjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX3Nsb3dfcmluZ190cmMgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyY19vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGIxMDNiNmUuLmIxYmQzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC0xMzU3LDcgKzEzNTcsNyBAQAogCiAJCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDEsIGNtZC0+c2Vuc2VfYnVmZmVyLCBJTExFR0FMX1JFUVVFU1QsCiAJCQkJMHgxMCwgMHgxKTsKLQkJY21kLT5yZXN1bHQgPSAoRFJJVkVSX1NFTlNFfFNVR0dFU1RfRElFKSA8PCAyNAorCQljbWQtPnJlc3VsdCA9IERSSVZFUl9TRU5TRSA8PCAyNAogCQkJfCBTY3NpUmVzdWx0KERJRF9BQk9SVCwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKTsKIAkJcGhiYS0+YmdfZ3VhcmRfZXJyX2NudCsrOwogCQlwcmludGsoS0VSTl9FUlIgIkJMS0dSRDogZ3VhcmRfdGFnIGVycm9yXG4iKTsKQEAgLTEzNjgsNyArMTM2OCw3IEBACiAKIAkJc2NzaV9idWlsZF9zZW5zZV9idWZmZXIoMSwgY21kLT5zZW5zZV9idWZmZXIsIElMTEVHQUxfUkVRVUVTVCwKIAkJCQkweDEwLCAweDMpOwotCQljbWQtPnJlc3VsdCA9IChEUklWRVJfU0VOU0V8U1VHR0VTVF9ESUUpIDw8IDI0CisJCWNtZC0+cmVzdWx0ID0gRFJJVkVSX1NFTlNFIDw8IDI0CiAJCQl8IFNjc2lSZXN1bHQoRElEX0FCT1JULCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pOwogCiAJCXBoYmEtPmJnX3JlZnRhZ19lcnJfY250Kys7CkBAIC0xMzgwLDcgKzEzODAsNyBAQAogCiAJCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDEsIGNtZC0+c2Vuc2VfYnVmZmVyLCBJTExFR0FMX1JFUVVFU1QsCiAJCQkJMHgxMCwgMHgyKTsKLQkJY21kLT5yZXN1bHQgPSAoRFJJVkVSX1NFTlNFfFNVR0dFU1RfRElFKSA8PCAyNAorCQljbWQtPnJlc3VsdCA9IERSSVZFUl9TRU5TRSA8PCAyNAogCQkJfCBTY3NpUmVzdWx0KERJRF9BQk9SVCwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKTsKIAogCQlwaGJhLT5iZ19hcHB0YWdfZXJyX2NudCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4Njg1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKQEAgLTAsMCArMSw2NiBAQAorIworIyBLZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgTVBUMlNBUworIworIyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisjICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorIyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIE5PIFdBUlJBTlRZCisjIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorIyBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorIyBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorIyBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisjIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyMgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCisjIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworIyB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorIyBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworIyBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorIyBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisjIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyMgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisjIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorIyBVU0EuCisKK2NvbmZpZyBTQ1NJX01QVDJTQVMKKwl0cmlzdGF0ZSAiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TQVNfQVRUUlMKKwktLS1oZWxwLS0tCisJVGhpcyBkcml2ZXIgc3VwcG9ydHMgUENJLUV4cHJlc3MgU0FTIDZHYi9zIEhvc3QgQWRhcHRlcnMuCisKK2NvbmZpZyBTQ1NJX01QVDJTQVNfTUFYX1NHRQorCWludCAiTFNJIE1QVCBGdXNpb24gTWF4IG51bWJlciBvZiBTRyBFbnRyaWVzICgxNiAtIDEyOCkiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSSAmJiBTQ1NJX01QVDJTQVMKKwlkZWZhdWx0ICIxMjgiCisJcmFuZ2UgMTYgMTI4CisJLS0taGVscC0tLQorCVRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci0KKwlnYXRoZXIgZW50cmllcyBwZXIgSS9PLiBUaGUgZHJpdmVyIGRlZmF1bHQgaXMgMTI4LCB3aGljaCBtYXRjaGVzCisJU0FGRV9QSFlTX1NFR01FTlRTLiAgSG93ZXZlciwgaXQgbWF5IGRlY3JlYXNlZCBkb3duIHRvIDE2LgorCURlY3JlYXNpbmcgdGhpcyBwYXJhbWV0ZXIgd2lsbCByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50cworCW9uIGEgcGVyIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisKK2NvbmZpZyBTQ1NJX01QVDJTQVNfTE9HR0lORworCWJvb2wgIkxTSSBNUFQgRnVzaW9uIGxvZ2dpbmcgZmFjaWxpdHkiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSSAmJiBTQ1NJX01QVDJTQVMKKwktLS1oZWxwLS0tCisJVGhpcyB0dXJucyBvbiBhIGxvZ2dpbmcgZmFjaWxpdHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOGYwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMgbXB0MnNhcyBtYWtlZmlsZQorb2JqLSQoQ09ORklHX1NDU0lfTVBUMlNBUykgKz0gbXB0MnNhcy5vCittcHQyc2FzLXkgKz0gIG1wdDJzYXNfYmFzZS5vICAgICAgICBcCisJCW1wdDJzYXNfY29uZmlnLm8gICAgXAorCQltcHQyc2FzX3Njc2loLm8gICAgIFwKKwkJbXB0MnNhc190cmFuc3BvcnQubyBcCisJCW1wdDJzYXNfY3RsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjJlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCkBAIC0wLDAgKzEsMTA2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCisgKgorICoKKyAqICAgICAgICAgICBOYW1lOiAgbXBpMi5oCisgKiAgICAgICAgICBUaXRsZTogIE1QSSBNZXNzYWdlIGluZGVwZW5kZW50IHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCisgKiAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBTeXN0ZW0gSW50ZXJmYWNlIFJlZ2lzdGVyIFNldCBhbmQKKyAqICAgICAgICAgICAgICAgICAgc2NhdHRlci9nYXRoZXIgZm9ybWF0cy4KKyAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMSwgMjAwNgorICoKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjExCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBSZXBseVBvc3RIb3N0SW5kZXggcmVnaXN0ZXIgdG8gb2Zmc2V0IDB4NkMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NZU1RFTV9JTlRFUkZBQ0VfUkVHUyBhbmQgbW9kaWZpZWQgdGhlIGRlZmluZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX09GRlNFVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHVuaW9uIG9mIHJlcXVlc3QgZGVzY3JpcHRvcnMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB1bmlvbiBvZiByZXBseSBkZXNjcmlwdG9ycy4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yIE1QSTJfVkVSU0lPTl8wMl8wMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIHRoZSBzaXplIG9mIHRoZSBGdW5jdGlvbkRlcGVuZGVudDUgZmllbGQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0RFRkFVTFRfUkVQTFkgc3RydWN0dXJlLgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgdGhlIE1QSS1kZWZpbmVkIEZhdWx0IENvZGVzIGFuZCBleHRlbmRlZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Qgc3BlY2lmaWMgY29kZXMgdXAgdG8gMHhFRkZGLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYSBzaXh0aCBrZXkgdmFsdWUgZm9yIHRoZSBXcml0ZVNlcXVlbmNlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hhbmdlZCB0aGUgZmx1c2ggdmFsdWUgdG8gMHgwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbWVzc2FnZSBmdW5jdGlvbiBjb2RlcyBmb3IgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIERpYWduc290aWMgUmVsZWFzZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE5ldyBJT0NTdGF0dXMgZGVmaW5lOiBNUEkyX0lPQ1NUQVRVU19ESUFHTk9TVElDX1JFTEVBU0VECisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBNUEkyX1ZFUlNJT05fVU5JT04gZnJvbSBtcGkyX2lvYy5oLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDcgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA4ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgI2RlZmluZXMgZm9yIG1hcmtpbmcgYSByZXBseSBkZXNjcmlwdG9yIGFzIHVudXNlZC4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDkgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMDItMDggIDAyLjAwLjEwICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgZnJvbSBtcGkyX2luaXQuaC4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTEgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE1QSTJfSAorI2RlZmluZSBNUEkyX0gKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIE1QSSBWZXJzaW9uIERlZmluaXRpb25zCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX1ZFUlNJT05fTUFKT1IgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01JTk9SICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9NQVNLICAgICAgICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9TSElGVCAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfTUFTSyAgICAgICAgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfU0hJRlQgICAgICAgICAgICAoMCkKKyNkZWZpbmUgTVBJMl9WRVJTSU9OICgoTVBJMl9WRVJTSU9OX01BSk9SIDw8IE1QSTJfVkVSU0lPTl9NQUpPUl9TSElGVCkgfCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJMl9WRVJTSU9OX01JTk9SKQorCisjZGVmaW5lIE1QSTJfVkVSU0lPTl8wMl8wMCAgICAgICAgICAgICAgICAgICgweDAyMDApCisKKy8qIHZlcnNpb25pbmcgZm9yIHRoaXMgTVBJIGhlYWRlciBzZXQgKi8KKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVZfTUFTSyAgICAgICAgKDB4MDBGRikKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVZfU0hJRlQgICAgICAgKDApCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT04gKChNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgPDwgOCkgfCBNUEkyX0hFQURFUl9WRVJTSU9OX0RFVikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIElPQyBTdGF0ZSBEZWZpbml0aW9ucworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NfU1RBVEVfUkVTRVQgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NfU1RBVEVfUkVBRFkgICAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwgICAgICAgICAoMHgyMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NfU1RBVEVfRkFVTFQgICAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKKworI2RlZmluZSBNUEkyX0lPQ19TVEFURV9NQVNLICAgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX0lPQ19TVEFURV9TSElGVCAgICAgICAgICAgICAgICgyOCkKKworLyogRmF1bHQgc3RhdGUgcmFuZ2UgZm9yIHByb2RjdXQgc3BlY2lmaWMgY29kZXMgKi8KKyNkZWZpbmUgTVBJMl9GQVVMVF9QUk9EVUNUX1NQRUNJRklDX01JTiAgICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9GQVVMVF9QUk9EVUNUX1NQRUNJRklDX01BWCAgICAgICAgICAgICAgICAgKDB4RUZGRikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIFN5c3RlbSBJbnRlcmZhY2UgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBfTVBJMl9TWVNURU1fSU5URVJGQUNFX1JFR1MKK3sKKyAgICBVMzIgICAgICAgICBEb29yYmVsbDsgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgIFdyaXRlU2VxdWVuY2U7ICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgSG9zdERpYWdub3N0aWM7ICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgIERpYWdSV0RhdGE7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgRGlhZ1JXQWRkcmVzc0xvdzsgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICBEaWFnUldBZGRyZXNzSGlnaDsgICAgICAgICAgLyogMHgxOCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMls1XTsgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTMyICAgICAgICAgSG9zdEludGVycnVwdFN0YXR1czsgICAgICAgIC8qIDB4MzAgKi8KKyAgICBVMzIgICAgICAgICBIb3N0SW50ZXJydXB0TWFzazsgICAgICAgICAgLyogMHgzNCAqLworICAgIFUzMiAgICAgICAgIERDUkRhdGE7ICAgICAgICAgICAgICAgICAgICAvKiAweDM4ICovCisgICAgVTMyICAgICAgICAgRENSQWRkcmVzczsgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDNbMl07ICAgICAgICAgICAgICAgLyogMHg0MCAqLworICAgIFUzMiAgICAgICAgIFJlcGx5RnJlZUhvc3RJbmRleDsgICAgICAgICAvKiAweDQ4ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ0WzhdOyAgICAgICAgICAgICAgIC8qIDB4NEMgKi8KKyAgICBVMzIgICAgICAgICBSZXBseVBvc3RIb3N0SW5kZXg7ICAgICAgICAgLyogMHg2QyAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDcwICovCisgICAgVTMyICAgICAgICAgSENCU2l6ZTsgICAgICAgICAgICAgICAgICAgIC8qIDB4NzQgKi8KKyAgICBVMzIgICAgICAgICBIQ0JBZGRyZXNzTG93OyAgICAgICAgICAgICAgLyogMHg3OCAqLworICAgIFUzMiAgICAgICAgIEhDQkFkZHJlc3NIaWdoOyAgICAgICAgICAgICAvKiAweDdDICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ2WzE2XTsgICAgICAgICAgICAgIC8qIDB4ODAgKi8KKyAgICBVMzIgICAgICAgICBSZXF1ZXN0RGVzY3JpcHRvclBvc3RMb3c7ICAgLyogMHhDMCAqLworICAgIFUzMiAgICAgICAgIFJlcXVlc3REZXNjcmlwdG9yUG9zdEhpZ2g7ICAvKiAweEM0ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ3WzE0XTsgICAgICAgICAgICAgIC8qIDB4QzggKi8KK30gTVBJMl9TWVNURU1fSU5URVJGQUNFX1JFR1MsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TWVNURU1fSU5URVJGQUNFX1JFR1MsCisgIE1waTJTeXN0ZW1JbnRlcmZhY2VSZWdzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlN5c3RlbUludGVyZmFjZVJlZ3NfdDsKKworLyoKKyAqIERlZmluZXMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgRG9vcmJlbGwgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorCisvKiBJT0MgLS0+IFN5c3RlbSB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9VU0VEICAgICAgICAgICAgICAgICAgICAgICgweDA4MDAwMDAwKQorI2RlZmluZSBNUEkyX0RPT1JCRUxMX1dIT19JTklUX01BU0sgICAgICAgICAgICAgKDB4MDcwMDAwMDApCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfV0hPX0lOSVRfU0hJRlQgICAgICAgICAgICAoMjQpCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfRkFVTFRfQ09ERV9NQVNLICAgICAgICAgICAoMHgwMDAwRkZGRikKKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9EQVRBX01BU0sgICAgICAgICAgICAgICAgICgweDAwMDBGRkZGKQorCisvKiBTeXN0ZW0gLS0+IElPQyB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9GVU5DVElPTl9NQVNLICAgICAgICAgICAgICgweEZGMDAwMDAwKQorI2RlZmluZSBNUEkyX0RPT1JCRUxMX0ZVTkNUSU9OX1NISUZUICAgICAgICAgICAgKDI0KQorI2RlZmluZSBNUEkyX0RPT1JCRUxMX0FERF9EV09SRFNfTUFTSyAgICAgICAgICAgKDB4MDBGRjAwMDApCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfQUREX0RXT1JEU19TSElGVCAgICAgICAgICAoMTYpCisKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSBXcml0ZVNlcXVlbmNlIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTVBJMl9XUklURV9TRVFVRU5DRV9PRkZTRVQgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1dSU0VRX0tFWV9WQUxVRV9NQVNLICAgICAgICAgICAgICAgKDB4MDAwMDAwMEYpCisjZGVmaW5lIE1QSTJfV1JTRVFfRkxVU0hfS0VZX1ZBTFVFICAgICAgICAgICAgICAoMHgwKQorI2RlZmluZSBNUEkyX1dSU0VRXzFTVF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4RikKKyNkZWZpbmUgTVBJMl9XUlNFUV8yTkRfS0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweDQpCisjZGVmaW5lIE1QSTJfV1JTRVFfM1JEX0tFWV9WQUxVRSAgICAgICAgICAgICAgICAoMHhCKQorI2RlZmluZSBNUEkyX1dSU0VRXzRUSF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4MikKKyNkZWZpbmUgTVBJMl9XUlNFUV81VEhfS0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweDcpCisjZGVmaW5lIE1QSTJfV1JTRVFfNlRIX0tFWV9WQUxVRSAgICAgICAgICAgICAgICAoMHhEKQorCisvKgorICogRGVmaW5lcyBmb3IgdGhlIEhvc3REaWFnbm9zdGljIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTVBJMl9IT1NUX0RJQUdOT1NUSUNfT0ZGU0VUICAgICAgICAgICAgICgweDAwMDAwMDA4KQorCisjZGVmaW5lIE1QSTJfRElBR19CT09UX0RFVklDRV9TRUxFQ1RfTUFTSyAgICAgICAoMHgwMDAwMTgwMCkKKyNkZWZpbmUgTVBJMl9ESUFHX0JPT1RfREVWSUNFX1NFTEVDVF9ERUZBVUxUICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX0RJQUdfQk9PVF9ERVZJQ0VfU0VMRUNUX0hDRFcgICAgICAgKDB4MDAwMDA4MDApCisKKyNkZWZpbmUgTVBJMl9ESUFHX0NMRUFSX0ZMQVNIX0JBRF9TSUcgICAgICAgICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBNUEkyX0RJQUdfRk9SQ0VfSENCX09OX1JFU0VUICAgICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfRElBR19IQ0JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9ESUFHX0RJQUdfV1JJVEVfRU5BQkxFICAgICAgICAgICAgICgweDAwMDAwMDgwKQorI2RlZmluZSBNUEkyX0RJQUdfRkxBU0hfQkFEX1NJRyAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfRElBR19SRVNFVF9ISVNUT1JZICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9ESUFHX0RJQUdfUldfRU5BQkxFICAgICAgICAgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX0RJQUdfUkVTRVRfQURBUFRFUiAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfRElBR19IT0xEX0lPQ19SRVNFVCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKworLyoKKyAqIE9mZnNldHMgZm9yIERpYWdSV0RhdGEgYW5kIGFkZHJlc3MKKyAqLworI2RlZmluZSBNUEkyX0RJQUdfUldfREFUQV9PRkZTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfRElBR19SV19BRERSRVNTX0xPV19PRkZTRVQgICAgICAgICAoMHgwMDAwMDAxNCkKKyNkZWZpbmUgTVBJMl9ESUFHX1JXX0FERFJFU1NfSElHSF9PRkZTRVQgICAgICAgICgweDAwMDAwMDE4KQorCisvKgorICogRGVmaW5lcyBmb3IgdGhlIEhvc3RJbnRlcnJ1cHRTdGF0dXMgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBNUEkyX0hPU1RfSU5URVJSVVBUX1NUQVRVU19PRkZTRVQgICAgICAgKDB4MDAwMDAwMzApCisjZGVmaW5lIE1QSTJfSElTX1NZUzJJT0NfREJfU1RBVFVTICAgICAgICAgICAgICAoMHg4MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9ISVNfSU9QX0RPT1JCRUxMX1NUQVRVUyAgICAgICAgICAgIE1QSTJfSElTX1NZUzJJT0NfREJfU1RBVFVTCisjZGVmaW5lIE1QSTJfSElTX1JFU0VUX0lSUV9TVEFUVVMgICAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9ISVNfUkVQTFlfREVTQ1JJUFRPUl9JTlRFUlJVUFQgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNUEkyX0hJU19JT0MyU1lTX0RCX1NUQVRVUyAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1QSTJfSElTX0RPT1JCRUxMX0lOVEVSUlVQVCAgICAgICAgICAgICBNUEkyX0hJU19JT0MyU1lTX0RCX1NUQVRVUworCisvKgorICogRGVmaW5lcyBmb3IgdGhlIEhvc3RJbnRlcnJ1cHRNYXNrIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTVBJMl9IT1NUX0lOVEVSUlVQVF9NQVNLX09GRlNFVCAgICAgICAgICgweDAwMDAwMDM0KQorI2RlZmluZSBNUEkyX0hJTV9SRVNFVF9JUlFfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMDApCisjZGVmaW5lIE1QSTJfSElNX1JFUExZX0lOVF9NQVNLICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9ISU1fUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSTJfSElNX1JFUExZX0lOVF9NQVNLCisjZGVmaW5lIE1QSTJfSElNX0lPQzJTWVNfREJfTUFTSyAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVBJMl9ISU1fRElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSTJfSElNX0lPQzJTWVNfREJfTUFTSworCisvKgorICogT2Zmc2V0cyBmb3IgRENSRGF0YSBhbmQgYWRkcmVzcworICovCisjZGVmaW5lIE1QSTJfRENSX0RBVEFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzOCkKKyNkZWZpbmUgTVBJMl9EQ1JfQUREUkVTU19PRkZTRVQgICAgICAgICAgICAgICAgICgweDAwMDAwMDNDKQorCisvKgorICogT2Zmc2V0IGZvciB0aGUgUmVwbHkgRnJlZSBRdWV1ZQorICovCisjZGVmaW5lIE1QSTJfUkVQTFlfRlJFRV9IT1NUX0lOREVYX09GRlNFVCAgICAgICAoMHgwMDAwMDA0OCkKKworLyoKKyAqIE9mZnNldCBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZQorICovCisjZGVmaW5lIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX09GRlNFVCAgICAgICAoMHgwMDAwMDA2QykKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSBIQ0JTaXplIGFuZCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgTVBJMl9IQ0JfU0laRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDc0KQorI2RlZmluZSBNUEkyX0hDQl9TSVpFX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZGRkYwMDApCisjZGVmaW5lIE1QSTJfSENCX1NJWkVfSENCX0VOQUJMRSAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworI2RlZmluZSBNUEkyX0hDQl9BRERSRVNTX0xPV19PRkZTRVQgICAgICAgICAgICAgKDB4MDAwMDAwNzgpCisjZGVmaW5lIE1QSTJfSENCX0FERFJFU1NfSElHSF9PRkZTRVQgICAgICAgICAgICAoMHgwMDAwMDA3QykKKworLyoKKyAqIE9mZnNldHMgZm9yIHRoZSBSZXF1ZXN0IFF1ZXVlCisgKi8KKyNkZWZpbmUgTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfUE9TVF9MT1dfT0ZGU0VUICAgICAoMHgwMDAwMDBDMCkKKyNkZWZpbmUgTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfUE9TVF9ISUdIX09GRlNFVCAgICAoMHgwMDAwMDBDNCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIE1lc3NhZ2UgRGVzY3JpcHRvcnMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZXF1ZXN0IERlc2NyaXB0b3JzICovCisKKy8qIERlZmF1bHQgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUgoreworICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDsgICAgLyogMHgwNiAqLworfSBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1waTJEZWZhdWx0UmVxdWVzdERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGVmYXVsdFJlcXVlc3REZXNjcmlwdG9yX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBSZXF1ZXN0RmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICAgICAgICAgKDB4MEUpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU8gICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX1RBUkdFVCAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWSAgICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0RFRkFVTFRfVFlQRSAgICAgICAgICAgICgweDA4KQorCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0lPQ19GSUZPX01BUktFUiAoMHgwMSkKKworCisvKiBIaWdoIFByaW9yaXR5IFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SLAorICBNcGkySGlnaFByaW9yaXR5UmVxdWVzdERlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkySGlnaFByaW9yaXR5UmVxdWVzdERlc2NyaXB0b3JfdDsKKworCisvKiBTQ1NJIElPIFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SLAorICBNcGkyU0NTSUlPUmVxdWVzdERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSUlPUmVxdWVzdERlc2NyaXB0b3JfdDsKKworCisvKiBTQ1NJIFRhcmdldCBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUgoreworICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTXBpMlNDU0lUYXJnZXRSZXF1ZXN0RGVzY3JpcHRvcl90LAorICBNUEkyX1BPSU5URVIgcE1waTJTQ1NJVGFyZ2V0UmVxdWVzdERlc2NyaXB0b3JfdDsKKworLyogdW5pb24gb2YgUmVxdWVzdCBEZXNjcmlwdG9ycyAqLwordHlwZWRlZiB1bmlvbiBfTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04KK3sKKyAgICBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgRGVmYXVsdDsKKyAgICBNUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SICAgSGlnaFByaW9yaXR5OworICAgIE1QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJSU87CisgICAgTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgIFNDU0lUYXJnZXQ7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOworfSBNUEkyX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiwKKyAgTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90OworCisKKy8qIFJlcGx5IERlc2NyaXB0b3JzICovCisKKy8qIERlZmF1bHQgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SCit7CisgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlRGVwZW5kZW50MTsgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlRGVwZW5kZW50MjsgICAvKiAweDA0ICovCit9IE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SLAorICBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJEZWZhdWx0UmVwbHlEZXNjcmlwdG9yX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBSZXBseUZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSyAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPX1NVQ0NFU1MgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVEFTU0lTVF9TVUNDRVNTICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRfQ09NTUFORF9CVUZGRVIgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVU5VU0VEICAgICAgICAgICAgICAgICAgKDB4MEYpCisKKy8qIHZhbHVlcyBmb3IgbWFya2luZyBhIHJlcGx5IGRlc2NyaXB0b3IgYXMgdW51c2VkICovCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX1VOVVNFRF9XT1JEMF9NQVJLICAgICAgICAgICAgICgweEZGRkZGRkZGKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9VTlVTRURfV09SRDFfTUFSSyAgICAgICAgICAgICAoMHhGRkZGRkZGRikKKworLyogQWRkcmVzcyBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMzIgICAgICAgICAgICAgUmVwbHlGcmFtZUFkZHJlc3M7ICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1waTJBZGRyZXNzUmVwbHlEZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkFkZHJlc3NSZXBseURlc2NyaXB0b3JfdDsKKworI2RlZmluZSBNUEkyX0FERFJFU1NfUkVQTFlfU01JRF9JTlZBTElEICAgICAgICAgICAgICAgICAoMHgwMCkKKworCisvKiBTQ1NJIElPIFN1Y2Nlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMTYgICAgICAgICAgICAgVGFza1RhZzsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAorICBNcGkyU0NTSUlPU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LAorICBNUEkyX1BPSU5URVIgcE1waTJTQ1NJSU9TdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKworLyogVGFyZ2V0QXNzaXN0IFN1Y2Nlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICBTZXF1ZW5jZU51bWJlcjsgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAorICBNcGkyVGFyZ2V0QXNzaXN0U3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LAorICBNUEkyX1BPSU5URVIgcE1waTJUYXJnZXRBc3Npc3RTdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKworLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SCit7CisgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgIEluaXRpYXRvckRldkhhbmRsZTsgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgIElvSW5kZXg7ICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTXBpMlRhcmdldENvbW1hbmRCdWZmZXJSZXBseURlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVGFyZ2V0Q29tbWFuZEJ1ZmZlclJlcGx5RGVzY3JpcHRvcl90OworCisvKiBkZWZpbmVzIGZvciBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9UQ0JfRkxBR1NfUEhZTlVNX01BU0sgICAgICgweDNGKQorCisKKy8qIHVuaW9uIG9mIFJlcGx5IERlc2NyaXB0b3JzICovCit0eXBlZGVmIHVuaW9uIF9NUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OCit7CisgICAgTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICBEZWZhdWx0OworICAgIE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgQWRkcmVzc1JlcGx5OworICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgU0NTSUlPU3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFRhcmdldEFzc2lzdFN1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiBUYXJnZXRDb21tYW5kQnVmZmVyOworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7Cit9IE1QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwKKyAgTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdDsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbnMKKyogICAgICAgICAgICAgIDB4ODAgLT4gMHg4RiByZXNlcnZlZCBmb3IgcHJpdmF0ZSBtZXNzYWdlIHVzZSBwZXIgcHJvZHVjdAorKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgICAgICAgICAgICAgICAoMHgwMCkgLyogU0NTSSBJTyAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UICAgICAgICAgICAgICAgICgweDAxKSAvKiBTQ1NJIFRhc2sgTWFuYWdlbWVudCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUICAgICAgICAgICAgICAgICAgICAgICgweDAyKSAvKiBJT0MgSW5pdCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0lPQ19GQUNUUyAgICAgICAgICAgICAgICAgICAgICgweDAzKSAvKiBJT0MgRmFjdHMgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNCkgLyogQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1BPUlRfRkFDVFMgICAgICAgICAgICAgICAgICAgICgweDA1KSAvKiBQb3J0IEZhY3RzICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgKDB4MDYpIC8qIFBvcnQgRW5hYmxlICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OICAgICAgICAgICAgKDB4MDcpIC8qIEV2ZW50IE5vdGlmaWNhdGlvbiAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0VWRU5UX0FDSyAgICAgICAgICAgICAgICAgICAgICgweDA4KSAvKiBFdmVudCBBY2tub3dsZWRnZSAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0ZXX0RPV05MT0FEICAgICAgICAgICAgICAgICAgICgweDA5KSAvKiBGVyBEb3dubG9hZCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9BU1NJU1QgICAgICAgICAgICAgICAgICgweDBCKSAvKiBUYXJnZXQgQXNzaXN0ICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX1NUQVRVU19TRU5EICAgICAgICAgICAgKDB4MEMpIC8qIFRhcmdldCBTdGF0dXMgU2VuZCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9NT0RFX0FCT1JUICAgICAgICAgICAgICgweDBEKSAvKiBUYXJnZXQgTW9kZSBBYm9ydCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0ZXX1VQTE9BRCAgICAgICAgICAgICAgICAgICAgICgweDEyKSAvKiBGVyBVcGxvYWQgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9SQUlEX0FDVElPTiAgICAgICAgICAgICAgICAgICAoMHgxNSkgLyogUkFJRCBBY3Rpb24gKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0ggICAgICAoMHgxNikgLyogU0NTSSBJTyBSQUlEIFBhc3N0aHJvdWdoICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVE9PTEJPWCAgICAgICAgICAgICAgICAgICAgICAgKDB4MTcpIC8qIFRvb2xib3ggKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9TQ1NJX0VOQ0xPU1VSRV9QUk9DRVNTT1IgICAgICAoMHgxOCkgLyogU0NTSSBFbmNsb3N1cmUgUHJvY2Vzc29yICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIICAgICAgICAgICAgICAgKDB4MUEpIC8qIFNNUCBQYXNzdGhyb3VnaCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0wgICAgICAgICAgICgweDFCKSAvKiBTQVMgSU8gVW5pdCBDb250cm9sICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU0FUQV9QQVNTVEhST1VHSCAgICAgICAgICAgICAgKDB4MUMpIC8qIFNBVEEgUGFzc3Rocm91Z2ggKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9ESUFHX0JVRkZFUl9QT1NUICAgICAgICAgICAgICAoMHgxRCkgLyogRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0RJQUdfUkVMRUFTRSAgICAgICAgICAgICAgICAgICgweDFFKSAvKiBEaWFnbm9zdGljIFJlbGVhc2UgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9CQVNFX1BPU1QgICAgICAoMHgyNCkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgQmFzZSAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0xJU1RfUE9TVCAgICAgICgweDI1KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBMaXN0ICovCisKKworCisvKiBEb29yYmVsbCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VUICAgICAgICAoMHg0MCkKKy8qICNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT19VTklUX1JFU0VUICAgICAgICAgICAgICAgICAoMHg0MSkgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAgICAoMHg0MikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIElPQyBTdGF0dXMgVmFsdWVzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogbWFzayBmb3IgSU9DU3RhdHVzIHN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4N0ZGRikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvbW1vbiBJT0NTdGF0dXMgdmFsdWVzIGZvciBhbGwgcmVwbGllcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfRlVOQ1RJT04gICAgICAgICAgICAgKDB4MDAwMSkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX1NHTCAgICAgICAgICAgICAgICAgICgweDAwMDMpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9WUElEICAgICAgICAgICAgICAgICAoMHgwMDA1KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTICAgICAgICgweDAwMDYpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfRklFTEQgICAgICAgICAgICAgICAgKDB4MDAwNykKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9TVEFURSAgICAgICAgICAgICAgICAoMHgwMDA4KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19PUF9TVEFURV9OT1RfU1VQUE9SVEVEICAgICAgICgweDAwMDkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb25maWcgSU9DU3RhdHVzIHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9BQ1RJT04gICAgICAgICgweDAwMjApCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1RZUEUgICAgICAgICAgKDB4MDAyMSkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSAgICAgICAgICAoMHgwMDIyKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9EQVRBICAgICAgICAgICgweDAwMjMpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19OT19ERUZBVUxUUyAgICAgICAgICAgKDB4MDAyNCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0NBTlRfQ09NTUlUICAgICAgICAgICAoMHgwMDI1KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0NTSSBJTyBSZXBseQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1JFQ09WRVJFRF9FUlJPUiAgICAgICAgICgweDAwNDApCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU5WQUxJRF9ERVZIQU5ETEUgICAgICAgKDB4MDA0MikKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9ERVZJQ0VfTk9UX1RIRVJFICAgICAgICAoMHgwMDQzKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfT1ZFUlJVTiAgICAgICAgICAgICgweDAwNDQpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfREFUQV9VTkRFUlJVTiAgICAgICAgICAgKDB4MDA0NSkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT19EQVRBX0VSUk9SICAgICAgICAgICAoMHgwMDQ2KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1BST1RPQ09MX0VSUk9SICAgICAgICAgICgweDAwNDcpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19URVJNSU5BVEVEICAgICAgICAgKDB4MDA0OCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9SRVNJRFVBTF9NSVNNQVRDSCAgICAgICAoMHgwMDQ5KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1RBU0tfTUdNVF9GQUlMRUQgICAgICAgICgweDAwNEEpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU9DX1RFUk1JTkFURUQgICAgICAgICAgKDB4MDA0QikKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9FWFRfVEVSTUlOQVRFRCAgICAgICAgICAoMHgwMDRDKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRm9yIHVzZSBieSBTQ1NJIEluaXRpYXRvciBhbmQgU0NTSSBUYXJnZXQgZW5kLXRvLWVuZCBkYXRhIHByb3RlY3Rpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRUVEUF9HVUFSRF9FUlJPUiAgICAgICAgICAgICAoMHgwMDREKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19FRURQX1JFRl9UQUdfRVJST1IgICAgICAgICAgICgweDAwNEUpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0VFRFBfQVBQX1RBR19FUlJPUiAgICAgICAgICAgKDB4MDA0RikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNDU0kgVGFyZ2V0IHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfSU5WQUxJRF9JT19JTkRFWCAgICAgICgweDAwNjIpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9BQk9SVEVEICAgICAgICAgICAgICAgKDB4MDA2MykKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX05PX0NPTk5fUkVUUllBQkxFICAgICAoMHgwMDY0KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfTk9fQ09OTkVDVElPTiAgICAgICAgICgweDAwNjUpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9YRkVSX0NPVU5UX01JU01BVENIICAgKDB4MDA2QSkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0RBVEFfT0ZGU0VUX0VSUk9SICAgICAoMHgwMDZEKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfVE9PX01VQ0hfV1JJVEVfREFUQSAgICgweDAwNkUpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9JVV9UT09fU0hPUlQgICAgICAgICAgKDB4MDA2RikKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0FDS19OQUtfVElNRU9VVCAgICAgICAoMHgwMDcwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfTkFLX1JFQ0VJVkVEICAgICAgICAgICgweDAwNzEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTZXJpYWwgQXR0YWNoZWQgU0NTSSB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0FTX1NNUF9SRVFVRVNUX0ZBSUxFRCAgICAgICAoMHgwMDkwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQVNfU01QX0RBVEFfT1ZFUlJVTiAgICAgICAgICgweDAwOTEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IC8gRGlhZ25vc3RpYyBSZWxlYXNlIHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19ESUFHTk9TVElDX1JFTEVBU0VEICAgICAgICAgICgweDAwQTApCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElPQ1N0YXR1cyBmbGFnIHRvIGluZGljYXRlIHRoYXQgbG9nIGluZm8gaXMgYXZhaWxhYmxlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFICAoMHg4MDAwKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSU9DTG9nSW5mbyBUeXBlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ0xPR0lORk9fVFlQRV9NQVNLICAgICAgICAgICAgICAgKDB4RjAwMDAwMDApCisjZGVmaW5lIE1QSTJfSU9DTE9HSU5GT19UWVBFX1NISUZUICAgICAgICAgICAgICAoMjgpCisjZGVmaW5lIE1QSTJfSU9DTE9HSU5GT19UWVBFX05PTkUgICAgICAgICAgICAgICAoMHgwKQorI2RlZmluZSBNUEkyX0lPQ0xPR0lORk9fVFlQRV9TQ1NJICAgICAgICAgICAgICAgKDB4MSkKKyNkZWZpbmUgTVBJMl9JT0NMT0dJTkZPX1RZUEVfRkMgICAgICAgICAgICAgICAgICgweDIpCisjZGVmaW5lIE1QSTJfSU9DTE9HSU5GT19UWVBFX1NBUyAgICAgICAgICAgICAgICAoMHgzKQorI2RlZmluZSBNUEkyX0lPQ0xPR0lORk9fVFlQRV9JU0NTSSAgICAgICAgICAgICAgKDB4NCkKKyNkZWZpbmUgTVBJMl9JT0NMT0dJTkZPX0xPR19EQVRBX01BU0sgICAgICAgICAgICgweDBGRkZGRkZGKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgU3RhbmRhcmQgTWVzc2FnZSBTdHJ1Y3R1cmVzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUmVxdWVzdCBNZXNzYWdlIEhlYWRlciBmb3IgYWxsIHJlcXVlc3QgbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JFUVVFU1RfSEVBREVSCit7CisgICAgVTE2ICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50MTsgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50MjsgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50MzsgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCit9IE1QSTJfUkVRVUVTVF9IRUFERVIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVFVRVNUX0hFQURFUiwKKyAgTVBJMlJlcXVlc3RIZWFkZXJfdCwgTVBJMl9QT0lOVEVSIHBNUEkyUmVxdWVzdEhlYWRlcl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBEZWZhdWx0IFJlcGx5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9ERUZBVUxUX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50MTsgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50MjsgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50MzsgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgIEZ1bmN0aW9uRGVwZW5kZW50NTsgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfREVGQVVMVF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVQTFksCisgIE1QSTJEZWZhdWx0UmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNUEkyRGVmYXVsdFJlcGx5X3Q7CisKKworLyogY29tbW9uIHZlcnNpb24gc3RydWN0dXJlL3VuaW9uIHVzZWQgaW4gbWVzc2FnZXMgYW5kIGNvbmZpZ3VyYXRpb24gcGFnZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVkVSU0lPTl9TVFJVQ1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEZXY7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFVuaXQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWlub3I7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYWpvcjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX1ZFUlNJT05fU1RSVUNUOworCit0eXBlZGVmIHVuaW9uIF9NUEkyX1ZFUlNJT05fVU5JT04KK3sKKyAgICBNUEkyX1ZFUlNJT05fU1RSVUNUICAgICBTdHJ1Y3Q7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgV29yZDsKK30gTVBJMl9WRVJTSU9OX1VOSU9OOworCisKKy8qIExVTiBmaWVsZCBkZWZpbmVzLCBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzICovCisjZGVmaW5lIE1QSTJfTFVOX0ZJUlNUX0xFVkVMX0FERFJFU1NJTkcgICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisjZGVmaW5lIE1QSTJfTFVOX1NFQ09ORF9MRVZFTF9BRERSRVNTSU5HICAgICAgICAgICAgKDB4RkZGRjAwMDApCisjZGVmaW5lIE1QSTJfTFVOX1RISVJEX0xFVkVMX0FERFJFU1NJTkcgICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisjZGVmaW5lIE1QSTJfTFVOX0ZPVVJUSF9MRVZFTF9BRERSRVNTSU5HICAgICAgICAgICAgKDB4RkZGRjAwMDApCisjZGVmaW5lIE1QSTJfTFVOX0xFVkVMXzFfV09SRCAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMCkKKyNkZWZpbmUgTVBJMl9MVU5fTEVWRUxfMV9EV09SRCAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwRkYwMCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIEZ1c2lvbi1NUFQgTVBJIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnRzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBTaW1wbGUgRWxlbWVudCBzdHJ1Y3R1cmVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfU0lNUExFMzIKK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBGbGFnc0xlbmd0aDsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworfSBNUEkyX1NHRV9TSU1QTEUzMiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9TSU1QTEUzMiwKKyAgTXBpMlNHRVNpbXBsZTMyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRVNpbXBsZTMyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9TSU1QTEU2NAoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzTGVuZ3RoOworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7Cit9IE1QSTJfU0dFX1NJTVBMRTY0LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX1NJTVBMRTY0LAorICBNcGkyU0dFU2ltcGxlNjRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFU2ltcGxlNjRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1NJTVBMRV9VTklPTgoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzTGVuZ3RoOworICAgIHVuaW9uCisgICAgeworICAgICAgICBVMzIgICAgICAgICAgICAgICAgIEFkZHJlc3MzMjsKKyAgICAgICAgVTY0ICAgICAgICAgICAgICAgICBBZGRyZXNzNjQ7CisgICAgfSB1OworfSBNUEkyX1NHRV9TSU1QTEVfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfU0lNUExFX1VOSU9OLAorICBNcGkyU0dFU2ltcGxlVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFU2ltcGxlVW5pb25fdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTVBJIENoYWluIEVsZW1lbnQgc3RydWN0dXJlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX0NIQUlOMzIKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTmV4dENoYWluT2Zmc2V0OworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7Cit9IE1QSTJfU0dFX0NIQUlOMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfQ0hBSU4zMiwKKyAgTXBpMlNHRUNoYWluMzJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFQ2hhaW4zMl90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfQ0hBSU42NAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOZXh0Q2hhaW5PZmZzZXQ7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzczsKK30gTVBJMl9TR0VfQ0hBSU42NCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9DSEFJTjY0LAorICBNcGkyU0dFQ2hhaW42NF90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VDaGFpbjY0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9DSEFJTl9VTklPTgoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOZXh0Q2hhaW5PZmZzZXQ7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIFUzMiAgICAgICAgICAgICAgICAgQWRkcmVzczMyOworICAgICAgICBVNjQgICAgICAgICAgICAgICAgIEFkZHJlc3M2NDsKKyAgICB9IHU7Cit9IE1QSTJfU0dFX0NIQUlOX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX0NIQUlOX1VOSU9OLAorICBNcGkyU0dFQ2hhaW5Vbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VDaGFpblVuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBUcmFuc2FjdGlvbiBDb250ZXh0IEVsZW1lbnQgc3RydWN0dXJlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1RSQU5TQUNUSU9OMzIKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U2l6ZTsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEZXRhaWxzTGVuZ3RoOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQ29udGV4dFsxXTsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkRldGFpbHNbMV07Cit9IE1QSTJfU0dFX1RSQU5TQUNUSU9OMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfVFJBTlNBQ1RJT04zMiwKKyAgTXBpMlNHRVRyYW5zYWN0aW9uMzJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFVHJhbnNhY3Rpb24zMl90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfVFJBTlNBQ1RJT042NAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTaXplOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldGFpbHNMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0WzJdOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uRGV0YWlsc1sxXTsKK30gTVBJMl9TR0VfVFJBTlNBQ1RJT042NCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9UUkFOU0FDVElPTjY0LAorICBNcGkyU0dFVHJhbnNhY3Rpb242NF90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VUcmFuc2FjdGlvbjY0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9UUkFOU0FDVElPTjk2Cit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFNpemU7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV0YWlsc0xlbmd0aDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkNvbnRleHRbM107CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25EZXRhaWxzWzFdOworfSBNUEkyX1NHRV9UUkFOU0FDVElPTjk2LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX1RSQU5TQUNUSU9OOTYsCisgIE1waTJTR0VUcmFuc2FjdGlvbjk2X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRVRyYW5zYWN0aW9uOTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1RSQU5TQUNUSU9OMTI4Cit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFNpemU7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV0YWlsc0xlbmd0aDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkNvbnRleHRbNF07CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25EZXRhaWxzWzFdOworfSBNUEkyX1NHRV9UUkFOU0FDVElPTjEyOCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9UUkFOU0FDVElPTjEyOCwKKyAgTXBpMlNHRVRyYW5zYWN0aW9uX3QxMjgsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRVRyYW5zYWN0aW9uX3QxMjg7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9UUkFOU0FDVElPTl9VTklPTgoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTaXplOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldGFpbHNMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIFUzMiAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0MzJbMV07CisgICAgICAgIFUzMiAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0NjRbMl07CisgICAgICAgIFUzMiAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0OTZbM107CisgICAgICAgIFUzMiAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0MTI4WzRdOworICAgIH0gdTsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkRldGFpbHNbMV07Cit9IE1QSTJfU0dFX1RSQU5TQUNUSU9OX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX1RSQU5TQUNUSU9OX1VOSU9OLAorICBNcGkyU0dFVHJhbnNhY3Rpb25Vbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VUcmFuc2FjdGlvblVuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBTR0UgdW5pb24gZm9yIElPIFNHTCdzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9NUElfU0dFX0lPX1VOSU9OCit7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNpbXBsZTsKKyAgICAgICAgTVBJMl9TR0VfQ0hBSU5fVU5JT04gICAgQ2hhaW47CisgICAgfSB1OworfSBNUEkyX01QSV9TR0VfSU9fVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9NUElfU0dFX0lPX1VOSU9OLAorICBNcGkyTXBpU0dFSU9Vbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJNcGlTR0VJT1VuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBTR0UgdW5pb24gZm9yIFNHTCdzIHdpdGggU2ltcGxlIGFuZCBUcmFuc2FjdGlvbiBlbGVtZW50cworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1RSQU5TX1NJTVBMRV9VTklPTgoreworICAgIHVuaW9uCisgICAgeworICAgICAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICAgICAgU2ltcGxlOworICAgICAgICBNUEkyX1NHRV9UUkFOU0FDVElPTl9VTklPTiAgVHJhbnNhY3Rpb247CisgICAgfSB1OworfSBNUEkyX1NHRV9UUkFOU19TSU1QTEVfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfVFJBTlNfU0lNUExFX1VOSU9OLAorICBNcGkyU0dFVHJhbnNTaW1wbGVVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VUcmFuc1NpbXBsZVVuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEFsbCBNUEkgU0dFIHR5cGVzIHVuaW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9NUElfU0dFX1VOSU9OCit7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgICAgICBTaW1wbGU7CisgICAgICAgIE1QSTJfU0dFX0NIQUlOX1VOSU9OICAgICAgICBDaGFpbjsKKyAgICAgICAgTVBJMl9TR0VfVFJBTlNBQ1RJT05fVU5JT04gIFRyYW5zYWN0aW9uOworICAgIH0gdTsKK30gTVBJMl9NUElfU0dFX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfTVBJX1NHRV9VTklPTiwKKyAgTXBpMk1waVNnZVVuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1waVNnZVVuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBTR0UgZmllbGQgZGVmaW5pdGlvbiBhbmQgbWFza3MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZsYWdzIGZpZWxkIGJpdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCAgICAgICAgICAgICAoMHg4MCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiAgICAgICAgICAgICgweDQwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19FTEVNRU5UX1RZUEVfTUFTSyAgICAgICAgKDB4MzApCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0xPQ0FMX0FERFJFU1MgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfRElSRUNUSU9OICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19BRERSRVNTX1NJWkUgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUICAgICAgICAgICAgICAoMHgwMSkKKworI2RlZmluZSBNUEkyX1NHRV9GTEFHU19TSElGVCAgICAgICAgICAgICAgICAgICAgKDI0KQorCisjZGVmaW5lIE1QSTJfU0dFX0xFTkdUSF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwMEZGRkZGRikKKyNkZWZpbmUgTVBJMl9TR0VfQ0hBSU5fTEVOR1RIX01BU0sgICAgICAgICAgICAgICgweDAwMDBGRkZGKQorCisvKiBFbGVtZW50IFR5cGUgKi8KKworI2RlZmluZSBNUEkyX1NHRV9GTEFHU19UUkFOU0FDVElPTl9FTEVNRU5UICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfQ0hBSU5fRUxFTUVOVCAgICAgICAgICAgICgweDMwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19FTEVNRU5UX01BU0sgICAgICAgICAgICAgKDB4MzApCisKKy8qIEFkZHJlc3MgbG9jYXRpb24gKi8KKworI2RlZmluZSBNUEkyX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUyAgICAgICAgICAgKDB4MDApCisKKy8qIERpcmVjdGlvbiAqLworCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0lPQ19UT19IT1NUICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfSE9TVF9UT19JT0MgICAgICAgICAgICAgICgweDA0KQorCisvKiBBZGRyZXNzIFNpemUgKi8KKworI2RlZmluZSBNUEkyX1NHRV9GTEFHU18zMl9CSVRfQUREUkVTU0lORyAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTXzY0X0JJVF9BRERSRVNTSU5HICAgICAgICAoMHgwMikKKworLyogQ29udGV4dCBTaXplICovCisKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfMzJfQklUX0NPTlRFWFQgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU182NF9CSVRfQ09OVEVYVCAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTXzk2X0JJVF9DT05URVhUICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfMTI4X0JJVF9DT05URVhUICAgICAgICAgICgweDA2KQorCisjZGVmaW5lIE1QSTJfU0dFX0NIQUlOX09GRlNFVF9NQVNLICAgICAgICAgICAgICAoMHgwMEZGMDAwMCkKKyNkZWZpbmUgTVBJMl9TR0VfQ0hBSU5fT0ZGU0VUX1NISUZUICAgICAgICAgICAgICgxNikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBTR0Ugb3BlcmF0aW9uIE1hY3JvcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0lNUExFIEZsYWdzTGVuZ3RoIG1hbmlwdWxhdGlvbnMuLi4gKi8KKyNkZWZpbmUgTVBJMl9TR0VfU0VUX0ZMQUdTKGYpICAgICAgICAgICgoVTMyKShmKSA8PCBNUEkyX1NHRV9GTEFHU19TSElGVCkKKyNkZWZpbmUgTVBJMl9TR0VfR0VUX0ZMQUdTKGYpICAgICAgICAgICgoKGYpICYgfk1QSTJfU0dFX0xFTkdUSF9NQVNLKSA+PiBNUEkyX1NHRV9GTEFHU19TSElGVCkKKyNkZWZpbmUgTVBJMl9TR0VfTEVOR1RIKGYpICAgICAgICAgICAgICgoZikgJiBNUEkyX1NHRV9MRU5HVEhfTUFTSykKKyNkZWZpbmUgTVBJMl9TR0VfQ0hBSU5fTEVOR1RIKGYpICAgICAgICgoZikgJiBNUEkyX1NHRV9DSEFJTl9MRU5HVEhfTUFTSykKKworI2RlZmluZSBNUEkyX1NHRV9TRVRfRkxBR1NfTEVOR1RIKGYsbCkgKE1QSTJfU0dFX1NFVF9GTEFHUyhmKSB8IE1QSTJfU0dFX0xFTkdUSChsKSkKKworI2RlZmluZSBNUEkyX3BTR0VfR0VUX0ZMQUdTKHBzZykgICAgICAgICAgICBNUEkyX1NHRV9HRVRfRkxBR1MoKHBzZyktPkZsYWdzTGVuZ3RoKQorI2RlZmluZSBNUEkyX3BTR0VfR0VUX0xFTkdUSChwc2cpICAgICAgICAgICBNUEkyX1NHRV9MRU5HVEgoKHBzZyktPkZsYWdzTGVuZ3RoKQorI2RlZmluZSBNUEkyX3BTR0VfU0VUX0ZMQUdTX0xFTkdUSChwc2csZixsKSAocHNnKS0+RmxhZ3NMZW5ndGggPSBNUEkyX1NHRV9TRVRfRkxBR1NfTEVOR1RIKGYsbCkKKworLyogQ0FVVElPTiAtIFRoZSBmb2xsb3dpbmcgYXJlIFJFQUQtTU9ESUZZLVdSSVRFISAqLworI2RlZmluZSBNUEkyX3BTR0VfU0VUX0ZMQUdTKHBzZyxmKSAgICAgIChwc2cpLT5GbGFnc0xlbmd0aCB8PSBNUEkyX1NHRV9TRVRfRkxBR1MoZikKKyNkZWZpbmUgTVBJMl9wU0dFX1NFVF9MRU5HVEgocHNnLGwpICAgICAocHNnKS0+RmxhZ3NMZW5ndGggfD0gTVBJMl9TR0VfTEVOR1RIKGwpCisKKyNkZWZpbmUgTVBJMl9HRVRfQ0hBSU5fT0ZGU0VUKHgpICAgICgoeCAmIE1QSTJfU0dFX0NIQUlOX09GRlNFVF9NQVNLKSA+PiBNUEkyX1NHRV9DSEFJTl9PRkZTRVRfU0hJRlQpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBGdXNpb24tTVBUIElFRUUgU2NhdHRlciBHYXRoZXIgRWxlbWVudHMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSUVFRSBTaW1wbGUgRWxlbWVudCBzdHJ1Y3R1cmVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JRUVFX1NHRV9TSU1QTEUzMgoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3NMZW5ndGg7Cit9IE1QSTJfSUVFRV9TR0VfU0lNUExFMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JRUVFX1NHRV9TSU1QTEUzMiwKKyAgTXBpMkllZWVTZ2VTaW1wbGUzMl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlU2ltcGxlMzJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSUVFRV9TR0VfU0lNUExFNjQKK3sKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworfSBNUEkyX0lFRUVfU0dFX1NJTVBMRTY0LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9TR0VfU0lNUExFNjQsCisgIE1waTJJZWVlU2dlU2ltcGxlNjRfdCwgTVBJMl9QT0lOVEVSIHBNcGkySWVlZVNnZVNpbXBsZTY0X3Q7CisKK3R5cGVkZWYgdW5pb24gX01QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OCit7CisgICAgTVBJMl9JRUVFX1NHRV9TSU1QTEUzMiAgU2ltcGxlMzI7CisgICAgTVBJMl9JRUVFX1NHRV9TSU1QTEU2NCAgU2ltcGxlNjQ7Cit9IE1QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OLAorICBNcGkySWVlZVNnZVNpbXBsZVVuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkllZWVTZ2VTaW1wbGVVbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJRUVFIENoYWluIEVsZW1lbnQgc3RydWN0dXJlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyICBNUEkyX0lFRUVfU0dFX0NIQUlOMzI7CisKK3R5cGVkZWYgTVBJMl9JRUVFX1NHRV9TSU1QTEU2NCAgTVBJMl9JRUVFX1NHRV9DSEFJTjY0OworCit0eXBlZGVmIHVuaW9uIF9NUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OCit7CisgICAgTVBJMl9JRUVFX1NHRV9DSEFJTjMyICAgQ2hhaW4zMjsKKyAgICBNUEkyX0lFRUVfU0dFX0NIQUlONjQgICBDaGFpbjY0OworfSBNUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9TR0VfQ0hBSU5fVU5JT04sCisgIE1waTJJZWVlU2dlQ2hhaW5Vbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlQ2hhaW5Vbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBBbGwgSUVFRSBTR0UgdHlwZXMgdW5pb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0lFRUVfU0dFX1VOSU9OCit7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIE1QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OICBTaW1wbGU7CisgICAgICAgIE1QSTJfSUVFRV9TR0VfQ0hBSU5fVU5JT04gICBDaGFpbjsKKyAgICB9IHU7Cit9IE1QSTJfSUVFRV9TR0VfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JRUVFX1NHRV9VTklPTiwKKyAgTXBpMkllZWVTZ2VVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlVW5pb25fdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSUVFRSBTR0UgZmllbGQgZGVmaW5pdGlvbnMgYW5kIG1hc2tzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGbGFncyBmaWVsZCBiaXQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0VMRU1FTlRfVFlQRV9NQVNLICAgKDB4ODApCisKKyNkZWZpbmUgTVBJMl9JRUVFMzJfU0dFX0ZMQUdTX1NISUZUICAgICAgICAgICAgICgyNCkKKworI2RlZmluZSBNUEkyX0lFRUUzMl9TR0VfTEVOR1RIX01BU0sgICAgICAgICAgICAgKDB4MDBGRkZGRkYpCisKKy8qIEVsZW1lbnQgVHlwZSAqLworCisjZGVmaW5lIE1QSTJfSUVFRV9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9JRUVFX1NHRV9GTEFHU19DSEFJTl9FTEVNRU5UICAgICAgICgweDgwKQorCisvKiBEYXRhIExvY2F0aW9uIEFkZHJlc3MgU3BhY2UgKi8KKworI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0FERFJfTUFTSyAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfSUVFRV9TR0VfRkxBR1NfU1lTVEVNX0FERFIgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9JRUVFX1NHRV9GTEFHU19JT0NERFJfQUREUiAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0lPQ1BMQl9BRERSICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfSUVFRV9TR0VfRkxBR1NfSU9DUExCTlRBX0FERFIgICAgICAoMHgwMykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSUVFRSBTR0Ugb3BlcmF0aW9uIE1hY3JvcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0lNUExFIEZsYWdzTGVuZ3RoIG1hbmlwdWxhdGlvbnMuLi4gKi8KKyNkZWZpbmUgTVBJMl9JRUVFMzJfU0dFX1NFVF9GTEFHUyhmKSAgICAgKChVMzIpKGYpIDw8IE1QSTJfSUVFRTMyX1NHRV9GTEFHU19TSElGVCkKKyNkZWZpbmUgTVBJMl9JRUVFMzJfU0dFX0dFVF9GTEFHUyhmKSAgICAgKCgoZikgJiB+TVBJMl9JRUVFMzJfU0dFX0xFTkdUSF9NQVNLKSA+PiBNUEkyX0lFRUUzMl9TR0VfRkxBR1NfU0hJRlQpCisjZGVmaW5lIE1QSTJfSUVFRTMyX1NHRV9MRU5HVEgoZikgICAgICAgICgoZikgJiBNUEkyX0lFRUUzMl9TR0VfTEVOR1RIX01BU0spCisKKyNkZWZpbmUgTVBJMl9JRUVFMzJfU0dFX1NFVF9GTEFHU19MRU5HVEgoZiwgbCkgICAgICAoTVBJMl9JRUVFMzJfU0dFX1NFVF9GTEFHUyhmKSB8IE1QSTJfSUVFRTMyX1NHRV9MRU5HVEgobCkpCisKKyNkZWZpbmUgTVBJMl9JRUVFMzJfcFNHRV9HRVRfRkxBR1MocHNnKSAgICAgICAgICAgICBNUEkyX0lFRUUzMl9TR0VfR0VUX0ZMQUdTKChwc2cpLT5GbGFnc0xlbmd0aCkKKyNkZWZpbmUgTVBJMl9JRUVFMzJfcFNHRV9HRVRfTEVOR1RIKHBzZykgICAgICAgICAgICBNUEkyX0lFRUUzMl9TR0VfTEVOR1RIKChwc2cpLT5GbGFnc0xlbmd0aCkKKyNkZWZpbmUgTVBJMl9JRUVFMzJfcFNHRV9TRVRfRkxBR1NfTEVOR1RIKHBzZyxmLGwpICAocHNnKS0+RmxhZ3NMZW5ndGggPSBNUEkyX0lFRUUzMl9TR0VfU0VUX0ZMQUdTX0xFTkdUSChmLGwpCisKKy8qIENBVVRJT04gLSBUaGUgZm9sbG93aW5nIGFyZSBSRUFELU1PRElGWS1XUklURSEgKi8KKyNkZWZpbmUgTVBJMl9JRUVFMzJfcFNHRV9TRVRfRkxBR1MocHNnLGYpICAgIChwc2cpLT5GbGFnc0xlbmd0aCB8PSBNUEkyX0lFRUUzMl9TR0VfU0VUX0ZMQUdTKGYpCisjZGVmaW5lIE1QSTJfSUVFRTMyX3BTR0VfU0VUX0xFTkdUSChwc2csbCkgICAocHNnKS0+RmxhZ3NMZW5ndGggfD0gTVBJMl9JRUVFMzJfU0dFX0xFTkdUSChsKQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIEZ1c2lvbi1NUFQgTVBJL0lFRUUgU2NhdHRlciBHYXRoZXIgVW5pb25zCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBfTVBJMl9TSU1QTEVfU0dFX1VOSU9OCit7CisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgICAgIE1waVNpbXBsZTsKKyAgICBNUEkyX0lFRUVfU0dFX1NJTVBMRV9VTklPTiAgSWVlZVNpbXBsZTsKK30gTVBJMl9TSU1QTEVfU0dFX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0lNUExFX1NHRV9VTklPTiwKKyAgTXBpMlNpbXBsZVNnZVVudGlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTaW1wbGVTZ2VVbnRpb25fdDsKKworCit0eXBlZGVmIHVuaW9uIF9NUEkyX1NHRV9JT19VTklPTgoreworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgICAgICBNcGlTaW1wbGU7CisgICAgTVBJMl9TR0VfQ0hBSU5fVU5JT04gICAgICAgIE1waUNoYWluOworICAgIE1QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OICBJZWVlU2ltcGxlOworICAgIE1QSTJfSUVFRV9TR0VfQ0hBSU5fVU5JT04gICBJZWVlQ2hhaW47Cit9IE1QSTJfU0dFX0lPX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX0lPX1VOSU9OLAorICBNcGkyU0dFSU9Vbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VJT1VuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIFZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQsIHVzZWQgaW4gbWFueSByZXF1ZXN0IG1lc3NhZ2VzIHdpdGggYW4gU0dMCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB2YWx1ZXMgZm9yIE1QSSBTR0wgRGF0YSBMb2NhdGlvbiBBZGRyZXNzIFNwYWNlIHN1YmZpZWxkICovCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfQUREUkVTU19TUEFDRV9NQVNLICAgICAgICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfU1lTVEVNX0FERFJFU1NfU1BBQ0UgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfSU9DRERSX0FERFJFU1NfU1BBQ0UgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfSU9DUExCX0FERFJFU1NfU1BBQ0UgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfSU9DUExCTlRBX0FERFJFU1NfU1BBQ0UgICAgICAgKDB4MEMpCisvKiB2YWx1ZXMgZm9yIFNHTCBUeXBlIHN1YmZpZWxkICovCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfU0dMX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfU0dMX1RZUEVfTVBJICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfU0dMX1RZUEVfSUVFRTMyICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0dMRkxBR1NfU0dMX1RZUEVfSUVFRTY0ICAgICAgICAgICAgICAgKDB4MDIpCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI3Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCkBAIC0wLDAgKzEsMjE1MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCisgKgorICoKKyAqICAgICAgICAgICBOYW1lOiAgbXBpMl9jbmZnLmgKKyAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCisgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CisgKgorICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEwCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBBZGRlZCBkZWZpbmVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDIgUGh5RmxhZ3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYW51ZmFjdHVyaW5nIFBhZ2UgMTEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfQ09OTkVDVE9SX0VORF9ERVZJQ0UKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEFkZGluZyBnZW5lcmljIHN0cnVjdHVyZSBmb3IgcHJvZHVjdC1zcGVjaWZpYworICogICAgICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmluZyBwYWdlczogTVBJMl9DT05GSUdfUEFHRV9NQU5VRkFDVFVSSU5HX1BTLgorICogICAgICAgICAgICAgICAgICAgICAgUmV3b3JrIG9mIEJJT1MgUGFnZSAyIGNvbmZpZ3VyYXRpb24gcGFnZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIE1QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFIHRvIGJlIGEgdW5pb24gb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGNvbmZpZ3VyYXRpb24gcGFnZXMgSU9DIFBhZ2UgOCBhbmQgRHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICBQZXJzaXN0ZW50IE1hcHBpbmcgUGFnZSAwLgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgTW9kaWZpZWQgY29uZmlndXJhdGlvbiBwYWdlcyBkZWFsaW5nIHdpdGggSW50ZWdyYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgUkFJRCAoTWFudWZhY3R1cmluZyBQYWdlIDQsIFJBSUQgVm9sdW1lIFBhZ2VzIDAgYW5kIDEsCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZXMgMCBhbmQgMSwgUkFJRCBDb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDApLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IHZhbHVlIGZvciBBY2Nlc3NTdGF0dXMgZmllbGQgb2YgU0FTIERldmljZQorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwIChfU0FUQV9ORUVEU19JTklUSUFMSVpBVElPTikuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBBZGRlZCBtaXNzaW5nIFNFUERldkhhbmRsZSBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAuCisgKiAgMTItMTgtMDcgIDAyLjAwLjA1ICBNb2RpZmllZCBJTyBVbml0IFBhZ2UgMCB0byB1c2UgMzItYml0IHZlcnNpb24gZmllbGRzIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTlZEQVRBLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgSU9DIFBhZ2UgNyB0byB1c2UgbWFza3MgYW5kIGFkZGVkIGZpZWxkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX0JJT1NfNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfQ09ORklHX1BBR0VfTE9HXzAuCisgKiAgMDItMjktMDggIDAyLjAwLjA2ICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIERldmljZSBJRHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVkIEludGVncmF0ZWQgUkFJRCBjb25maWd1cmF0aW9uIHBhZ2VzIGluY2x1ZGluZworICogICAgICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmluZyBQYWdlIDQsIElPQyBQYWdlIDYsIGFuZCBSQUlEIENvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMC4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDcgIEFkZGVkIGRlZmluZSBNUEkyX01BTlBBR0U0X01JWF9TU0RfU0FTX1NBVEEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgTVBJMl9NQU5QQUdFNF9QSFlTRElTS18xMjhNQl9DT0VSQ0lPTi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIGRlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0VOQ0xPU1VSRV9TTE9UX01BUFBJTkcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBtaXNzaW5nIE1heE51bVJvdXRlZFNhc0FkZHJlc3NlcyBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBvcnQgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgc3RydWN0dXJlIGxheW91dCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfRFJJVkVSX01BUFBJTkdfMC4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDggIENoYW5nZWQgTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18xIHRvIHVzZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVggdG8gc2l6ZSB0aGUgYXJyYXkuCisgKiAgMTAtMDItMDggIDAyLjAwLjA5ICBDaGFuZ2VkIE1QSTJfUkFJRF9QR0FEX0NPTkZJR05VTV9NQVNLIGZyb20gMHgwMDAwRkZGRgorICogICAgICAgICAgICAgICAgICAgICAgdG8gMHgwMDAwMDBGRi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgdmFsdWVzIGZvciB0aGUgUGh5c2ljYWwgRGlzayBDb2VyY2lvbiBTaXplCisgKiAgICAgICAgICAgICAgICAgICAgICBiaXRzIGluIHRoZSBGbGFncyBmaWVsZCBvZiBNYW51ZmFjdHVyaW5nIFBhZ2UgNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHByb2R1Y3Qtc3BlY2lmaWMgTWFudWZhY3R1cmluZyBwYWdlcyAxNiB0byAzMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIEZsYWdzIGJpdHMgZm9yIGNvbnRyb2xsaW5nIHdyaXRlIGNhY2hlIG9uIFNBVEEKKyAqICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcyBpbiBJTyBVbml0IFBhZ2UgMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBiaXQgdG8gQWRkaXRpb25hbENvbnRyb2xGbGFncyBvZiBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAxIHRvIGNvbnRyb2wgSW52YWxpZCBUb3BvbG9neSBDb3JyZWN0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYWRkaXRpb25hbCBkZWZpbmVzIGZvciBSQUlEIFZvbHVtZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXR1c0ZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgbWVhbmluZyBvZiBSQUlEIFZvbHVtZSBQYWdlIDAgVm9sdW1lU2V0dGluZ3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBmb3IgYXV0by1jb25maWd1cmUgb2YgaG90LXN3YXAgZHJpdmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU3VwcG9ydGVkUGh5c0Rpc2tzIGZpZWxkIHRvIFJBSUQgVm9sdW1lIFBhZ2UgMSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHJlbGF0ZWQgZGVmaW5lcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeXNEaXNrQXR0cmlidXRlcyBmaWVsZCAoYW5kIHJlbGF0ZWQgZGVmaW5lcykgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19QSFlJTkZPX1BIWV9WQUNBTlQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhyZWUgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXRzIGZvciBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBtdWx0aXBsZXhpbmcgaW5mb3JtYXRpb24gZnJvbSBTQVMgSU8gVW5pdCBwYWdlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEJvb3REZXZpY2VXYWl0VGltZSBmaWVsZCB0byBTQVMgSU8gVW5pdCBQYWdlIDQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIFpvbmUgQWRkcmVzcyBSZXNvbHZlZCBiaXQgZnJvbSBQaHlJbmZvIGFuZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAgRmxhZ3MgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IEFjY2Vzc1N0YXR1cyB2YWx1ZXMgdG8gU0FTIERldmljZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpY2F0aW5nIHJvdXRpbmcgcHJvYmxlbXMuIEFkZGVkIDMgcmVzZXJ2ZWQgd29yZHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoaXMgcGFnZS4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTAgIEZpeGVkIGRlZmluZXMgZm9yIEdQSU9WYWwgZmllbGQgb2YgSU8gVW5pdCBQYWdlIDMuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRlZCBtaXNzaW5nIHJlc2VydmVkIGZpZWxkIGludG8gc3RydWN0dXJlIGZvciBJT0MKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgNi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1vcmUgcGVuZGluZyB0YXNrIGJpdHMgdG8gUkFJRCBWb2x1bWUgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFncyBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfTk9UX0NFUlRJRklFRCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBhIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0IGZvciBTQVMgSU8gVW5pdCBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwIHRvIGZsYWcgYSBkb3duc3RyZWFtIGluaXRpYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgd2hlbiBpbiBzaW1wbGlmaWVkIHJvdXRpbmcgbW9kZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgU0FUQSBJbml0IEZhaWx1cmUgZGVmaW5lcyBmb3IgRGlzY292ZXJ5U3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgb2YgU0FTIElPIFVuaXQgUGFnZSAwIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX0RFVklDRV9CTE9DS0VEIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBvcnRHcm91cHMsIERtYUdyb3VwLCBhbmQgQ29udHJvbEdyb3VwIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgU0FTIERldmljZSBQYWdlIDAuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE1QSTJfQ05GR19ICisjZGVmaW5lIE1QSTJfQ05GR19ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvbmZpZ3VyYXRpb24gUGFnZSBIZWFkZXIgYW5kIGRlZmluZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb25maWcgUGFnZSBIZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0hFQURFUgoreworICAgIFU4ICAgICAgICAgICAgICAgICBQYWdlVmVyc2lvbjsgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICBQYWdlTGVuZ3RoOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICBQYWdlTnVtYmVyOyAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICBQYWdlVHlwZTsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0hFQURFUiwKKyAgTXBpMkNvbmZpZ1BhZ2VIZWFkZXJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQ29uZmlnUGFnZUhlYWRlcl90OworCit0eXBlZGVmIHVuaW9uIF9NUEkyX0NPTkZJR19QQUdFX0hFQURFUl9VTklPTgoreworICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgIFN0cnVjdDsKKyAgIFU4ICAgICAgICAgICAgICAgICAgICAgICBCeXRlc1s0XTsKKyAgIFUxNiAgICAgICAgICAgICAgICAgICAgICBXb3JkMTZbMl07CisgICBVMzIgICAgICAgICAgICAgICAgICAgICAgV29yZDMyOworfSBNUEkyX0NPTkZJR19QQUdFX0hFQURFUl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0hFQURFUl9VTklPTiwKKyAgTXBpMkNvbmZpZ1BhZ2VIZWFkZXJVbmlvbiwgTVBJMl9QT0lOVEVSIHBNcGkyQ29uZmlnUGFnZUhlYWRlclVuaW9uOworCisvKiBFeHRlbmRlZCBDb25maWcgUGFnZSBIZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUgoreworICAgIFU4ICAgICAgICAgICAgICAgICAgUGFnZVZlcnNpb247ICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICBQYWdlTnVtYmVyOyAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgUGFnZVR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgIEV4dFBhZ2VMZW5ndGg7ICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICBFeHRQYWdlVHlwZTsgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KK30gTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIsCisgIE1waTJDb25maWdFeHRlbmRlZFBhZ2VIZWFkZXJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQ29uZmlnRXh0ZW5kZWRQYWdlSGVhZGVyX3Q7CisKK3R5cGVkZWYgdW5pb24gX01QSTJfQ09ORklHX0VYVF9QQUdFX0hFQURFUl9VTklPTgoreworICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICAgU3RydWN0OworICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgRXh0OworICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNbOF07CisgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkMTZbNF07CisgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkMzJbMl07Cit9IE1QSTJfQ09ORklHX0VYVF9QQUdFX0hFQURFUl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19FWFRfUEFHRV9IRUFERVJfVU5JT04sCisgIE1waTJDb25maWdQYWdlRXh0ZW5kZWRIZWFkZXJVbmlvbiwgTVBJMl9QT0lOVEVSIHBNcGkyQ29uZmlnUGFnZUV4dGVuZGVkSGVhZGVyVW5pb247CisKKworLyogUGFnZVR5cGUgZmllbGQgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VBVFRSX1JFQURfT05MWSAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VBVFRSX0NIQU5HRUFCTEUgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VBVFRSX1BFUlNJU1RFTlQgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VBVFRSX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RjApCisKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfSU9fVU5JVCAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfSU9DICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfQklPUyAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xVTUUgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfTUFOVUZBQ1RVUklORyAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSyAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9DT05GSUdfUEFHRVRZUEVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgwRikKKworI2RlZmluZSBNUEkyX0NPTkZJR19UWVBFTlVNX01BU0sgICAgICAgICAgICAgICAgICAgICgweDBGRkYpCisKKworLyogRXh0UGFnZVR5cGUgZmllbGQgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19FWFBBTkRFUiAgICAgICAgKDB4MTEpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19ERVZJQ0UgICAgICAgICAgKDB4MTIpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19QSFkgICAgICAgICAgICAgKDB4MTMpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX0xPRyAgICAgICAgICAgICAgICAgKDB4MTQpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX0VOQ0xPU1VSRSAgICAgICAgICAgKDB4MTUpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1JBSURfQ09ORklHICAgICAgICAgKDB4MTYpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX0RSSVZFUl9NQVBQSU5HICAgICAgKDB4MTcpCisjZGVmaW5lIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19QT1JUICAgICAgICAgICAgKDB4MTgpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgUGFnZUFkZHJlc3MgZGVmaW5lcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJBSUQgVm9sdW1lIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9HRVRfTkVYVF9IQU5ETEUgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUgICAgICAgICAgICgweDEwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9IQU5ETEVfTUFTSyAgICAgICAgICAgKDB4MDAwMEZGRkYpCisKKworLyogUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTS19QR0FEX0ZPUk1fR0VUX05FWFRfUEhZU0RJU0tOVU0gICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfUEhZU0RJU0tfUEdBRF9GT1JNX1BIWVNESVNLTlVNICAgICAgICAgICAgICgweDEwMDAwMDAwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9ERVZIQU5ETEUgICAgICAgICAgICAgICAoMHgyMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX1BIWVNESVNLX1BHQURfUEhZU0RJU0tOVU1fTUFTSyAgICAgICAgICAgICAoMHgwMDAwMDBGRikKKyNkZWZpbmUgTVBJMl9QSFlTRElTS19QR0FEX0RFVkhBTkRMRV9NQVNLICAgICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisKKworLyogU0FTIEV4cGFuZGVyIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0dFVF9ORVhUX0hOREwgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hORExfUEhZX05VTSAgICAgICgweDEwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hOREwgICAgICAgICAgICAgICgweDIwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFORF9QR0FEX0hBTkRMRV9NQVNLICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFORF9QR0FEX1BIWU5VTV9NQVNLICAgICAgICAgICAgKDB4MDBGRjAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFORF9QR0FEX1BIWU5VTV9TSElGVCAgICAgICAgICAgKDE2KQorCisKKy8qIFNBUyBEZXZpY2UgUGFnZUFkZHJlc3MgZm9ybWF0ICovCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fTUFTSyAgICAgICAgICAgICAgKDB4RjAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFICAgICAgICAgICAgKDB4MjAwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX1BHQURfSEFORExFX01BU0sgICAgICAgICAgICAoMHgwMDAwRkZGRikKKworCisvKiBTQVMgUEhZIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1NBU19QSFlfUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlfUEdBRF9GT1JNX1BIWV9OVU1CRVIgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlfUEdBRF9GT1JNX1BIWV9UQkxfSU5ERVggICAgICAgICgweDEwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfU0FTX1BIWV9QR0FEX1BIWV9OVU1CRVJfTUFTSyAgICAgICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1QSTJfU0FTX1BIWV9QR0FEX1BIWV9UQkxfSU5ERVhfTUFTSyAgICAgICAgKDB4MDAwMEZGRkYpCisKKworLyogU0FTIFBvcnQgUGFnZUFkZHJlc3MgZm9ybWF0ICovCisjZGVmaW5lIE1QSTJfU0FTUE9SVF9QR0FEX0ZPUk1fTUFTSyAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTUE9SVF9QR0FEX0ZPUk1fR0VUX05FWFRfUE9SVCAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTUE9SVF9QR0FEX0ZPUk1fUE9SVF9OVU0gICAgICAgICAgICAgKDB4MTAwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9TQVNQT1JUX1BHQURfUE9SVE5VTUJFUl9NQVNLICAgICAgICAgICAoMHgwMDAwMEZGRikKKworCisvKiBTQVMgRW5jbG9zdXJlIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1NBU19FTkNMT1NfUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FTkNMT1NfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FTkNMT1NfUEdBRF9GT1JNX0hBTkRMRSAgICAgICAgICAgICgweDEwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfU0FTX0VOQ0xPU19QR0FEX0hBTkRMRV9NQVNLICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisKKworLyogUkFJRCBDb25maWd1cmF0aW9uIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1JBSURfUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURfUEdBRF9GT1JNX0dFVF9ORVhUX0NPTkZJR05VTSAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURfUEdBRF9GT1JNX0NPTkZJR05VTSAgICAgICAgICAgICAgICgweDEwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURfUEdBRF9GT1JNX0FDVElWRV9DT05GSUcgICAgICAgICAgICgweDIwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfUkFJRF9QR0FEX0NPTkZJR05VTV9NQVNLICAgICAgICAgICAgICAgKDB4MDAwMDAwRkYpCisKKworLyogRHJpdmVyIFBlcnNpc3RlbnQgTWFwcGluZyBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9EUE1fUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9EUE1fUEdBRF9GT1JNX0VOVFJZX1JBTkdFICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX0RQTV9QR0FEX0VOVFJZX0NPVU5UX01BU0sgICAgICAgICAgICAgICgweDBGRkYwMDAwKQorI2RlZmluZSBNUEkyX0RQTV9QR0FEX0VOVFJZX0NPVU5UX1NISUZUICAgICAgICAgICAgICgxNikKKyNkZWZpbmUgTVBJMl9EUE1fUEdBRF9TVEFSVF9FTlRSWV9NQVNLICAgICAgICAgICAgICAoMHgwMDAwRkZGRikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENvbmZpZ3VyYXRpb24gUmVxdWVzdCBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRXh0UGFnZUxlbmd0aDsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBFeHRQYWdlVHlwZTsgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUGFnZUFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBNUEkyX1NHRV9JT19VTklPTiAgICAgICBQYWdlQnVmZmVyU0dFOyAgICAgICAgICAgICAgLyogMHgxQyAqLworfSBNUEkyX0NPTkZJR19SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1JFUVVFU1QsCisgIE1waTJDb25maWdSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkNvbmZpZ1JlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciB0aGUgQWN0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUiAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVCAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0RFRkFVTFQgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX05WUkFNICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfREVGQVVMVCAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfTlZSQU0gICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0dFVF9DSEFOR0VBQkxFICAgICAgKDB4MDcpCisKKy8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKworCisvKiBDb25maWcgUmVwbHkgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFeHRQYWdlTGVuZ3RoOyAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEV4dFBhZ2VUeXBlOyAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0NPTkZJR19SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19SRVBMWSwKKyAgTXBpMkNvbmZpZ1JlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkNvbmZpZ1JlcGx5X3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgICAgICAgICBDIG8gbiBmIGkgZyB1IHIgYSB0IGkgbyBuICAgIFAgYSBnIGUgcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgTWFudWZhY3R1cmluZyBDb25maWcgcGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorCisvKiBTQVMgKi8KKyNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIwMDQgICAgICAgICAgICAgICAgICAoMHgwMDcwKQorI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjAwOCAgICAgICAgICAgICAgICAgICgweDAwNzIpCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTA4XzEgICAgICAgICAgICAgICAgKDB4MDA3NCkKKyNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMDhfMiAgICAgICAgICAgICAgICAoMHgwMDc2KQorI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjEwOF8zICAgICAgICAgICAgICAgICgweDAwNzcpCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTE2XzEgICAgICAgICAgICAgICAgKDB4MDA2NCkKKyNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMTZfMiAgICAgICAgICAgICAgICAoMHgwMDY1KQorCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl8wCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGlwTmFtZVsxNl07ICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoaXBSZXZpc2lvbls4XTsgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQm9hcmROYW1lWzE2XTsgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBCb2FyZEFzc2VtYmx5WzE2XTsgICAgICAgICAgLyogMHgyQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEJvYXJkVHJhY2VyTnVtYmVyWzE2XTsgICAgICAvKiAweDNDICovCit9IE1QSTJfQ09ORklHX1BBR0VfTUFOXzAsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fMCwKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcwX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSAxICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl8xCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUERbMjU2XTsgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl8xLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTUFOXzEsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTFfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UxX3Q7CisKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DSElQX1JFVklTSU9OX0lECit7CisgICAgVTE2IERldmljZUlEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgUENJUmV2aXNpb25JRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICBSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCit9IE1QSTJfQ0hJUF9SRVZJU0lPTl9JRCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NISVBfUkVWSVNJT05fSUQsCisgIE1waTJDaGlwUmV2aXNpb25JZF90LCBNUEkyX1BPSU5URVIgcE1waTJDaGlwUmV2aXNpb25JZF90OworCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSAyICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfTUFOX1BBR0VfMl9IV19TRVRUSU5HU19XT1JEUworI2RlZmluZSBNUEkyX01BTl9QQUdFXzJfSFdfU0VUVElOR1NfV09SRFMgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9NQU5fMgoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgTVBJMl9DSElQX1JFVklTSU9OX0lEICAgQ2hpcElkOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBId1NldHRpbmdzW01QSTJfTUFOX1BBR0VfMl9IV19TRVRUSU5HU19XT1JEU107LyogMHgwOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl8yLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTUFOXzIsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UyX3Q7CisKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgKDB4MDApCisKKworLyogTWFudWZhY3R1cmluZyBQYWdlIDMgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9NQU5fUEFHRV8zX0lORk9fV09SRFMKKyNkZWZpbmUgTVBJMl9NQU5fUEFHRV8zX0lORk9fV09SRFMgICAgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzMKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiAgICAgICAgICAgICBIZWFkZXI7ICAgICAgICAgLyogMHgwMCAqLworICAgIE1QSTJfQ0hJUF9SRVZJU0lPTl9JRCAgICAgICAgICAgICAgIENoaXBJZDsgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1tNUEkyX01BTl9QQUdFXzNfSU5GT19XT1JEU107LyogMHgwOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl8zLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTUFOXzMsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UzX3Q7CisKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HM19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgKDB4MDApCisKKworLyogTWFudWZhY3R1cmluZyBQYWdlIDQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfTUFOUEFHRTRfUFdSX1NBVkVfU0VUVElOR1MKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXJTYXZlRmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsT3BlcmF0aW9uc1NsZWVwVGltZTsgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbE9wZXJhdGlvbnNSdW5UaW1lOyAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdElkbGVUaW1lOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCit9IE1QSTJfTUFOUEFHRTRfUFdSX1NBVkVfU0VUVElOR1MsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9NQU5QQUdFNF9QV1JfU0FWRV9TRVRUSU5HUywKKyAgTXBpMk1hblBhZ2U0UHdyU2F2ZVNldHRpbmdzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hblBhZ2U0UHdyU2F2ZVNldHRpbmdzX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBQb3dlclNhdmVGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX01BTlBBR0U0X01BU0tfUE9XRVJTQVZFX01PREUgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9QT1dFUlNBVkVfTU9ERV9ESVNBQkxFRCAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfQ1VTVE9NX1BPV0VSU0FWRV9NT0RFICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X0ZVTExfUE9XRVJTQVZFX01PREUgICAgICAgICAgICAgICAoMHgwMikKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzQKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiAgICAgICAgICAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnF1aXJ5U2l6ZTsgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnF1aXJ5RGF0YVs1Nl07ICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFJRDBWb2x1bWVTZXR0aW5nczsgICAgLyogMHg0OCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBSUQxRVZvbHVtZVNldHRpbmdzOyAgIC8qIDB4NEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQUlEMVZvbHVtZVNldHRpbmdzOyAgICAvKiAweDUwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFJRDEwVm9sdW1lU2V0dGluZ3M7ICAgLyogMHg1NCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgIC8qIDB4NTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAvKiAweDVDICovCisgICAgTVBJMl9NQU5QQUdFNF9QV1JfU0FWRV9TRVRUSU5HUyAgICAgUG93ZXJTYXZlU2V0dGluZ3M7ICAgICAgLyogMHg2MCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heE9DRURpc2tzOyAgICAgICAgICAgIC8qIDB4NjQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN5bmNSYXRlOyAgICAgICAgICAgICAvKiAweDY1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNjcnViRHVyYXRpb247ICAgICAgLyogMHg2NiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heEhvdFNwYXJlczsgICAgICAgICAgIC8qIDB4NjggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhQaHlzRGlza3NQZXJWb2w7ICAgICAvKiAweDY5ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UGh5c0Rpc2tzOyAgICAgICAgICAgLyogMHg2QSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFZvbHVtZXM7ICAgICAgICAgICAgIC8qIDB4NkIgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fNCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl80LAorICBNcGkyTWFudWZhY3R1cmluZ1BhZ2U0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlNF90OworCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzRfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICgweDBBKQorCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgNCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX01BTlBBR0U0X01FVEFEQVRBX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAoMHgwMDAzMDAwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9NRVRBREFUQV81MTJNQiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9NSVhfU1NEX1NBU19TQVRBICAgICAgICAgICAgICAgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfTUlYX1NTRF9BTkRfTk9OX1NTRCAgICAgICAgICAgICAgICgweDAwMDA0MDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X0hJREVfUEhZU0RJU0tfTk9OX0lSICAgICAgICAgICAgICAoMHgwMDAwMjAwMCkKKworI2RlZmluZSBNUEkyX01BTlBBR0U0X01BU0tfUEhZU0RJU0tfQ09FUkNJT04gICAgICAgICAgICAoMHgwMDAwMUMwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9QSFlTRElTS19DT0VSQ0lPTl8xR0IgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUEhZU0RJU0tfMTI4TUJfQ09FUkNJT04gICAgICAgICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X1BIWVNESVNLX0FEQVBUSVZFX0NPRVJDSU9OICAgICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9QSFlTRElTS19aRVJPX0NPRVJDSU9OICAgICAgICAgICAgKDB4MDAwMDBDMDApCisKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9NQVNLX0JBRF9CTE9DS19NQVJLSU5HICAgICAgICAgICAgKDB4MDAwMDAzMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfREVGQVVMVF9CQURfQkxPQ0tfTUFSS0lORyAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X1RBQkxFX0JBRF9CTE9DS19NQVJLSU5HICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9XUklURV9MT05HX0JBRF9CTE9DS19NQVJLSU5HICAgICAgKDB4MDAwMDAyMDApCisKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9GT1JDRV9PRkZMSU5FX0ZBSUxPVkVSICAgICAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUkFJRDEwX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X1JBSUQxRV9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9SQUlEMV9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUkFJRDBfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNUEkyX01BTlBBR0U0X0lSX01PREVQQUdFOF9ESVNBQkxFICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9JTV9SRVNZTkNfQ0FDSEVfRU5BQkxFICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfSVJfTk9fTUlYX1NBU19TQVRBICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSA1ICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9NQU5fUEFHRV81X1BIWV9FTlRSSUVTCisjZGVmaW5lIE1QSTJfTUFOX1BBR0VfNV9QSFlfRU5UUklFUyAgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX01BTlVGQUNUVVJJTkc1X0VOVFJZCit7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1dJRDsgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VOYW1lOyAgICAgLyogMHgwOCAqLworfSBNUEkyX01BTlVGQUNUVVJJTkc1X0VOVFJZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfTUFOVUZBQ1RVUklORzVfRU5UUlksCisgIE1waTJNYW51ZmFjdHVyaW5nNUVudHJ5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmc1RW50cnlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzUKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiAgICAgICAgICAgICBIZWFkZXI7ICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgLyogMHgwNiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgIC8qIDB4MEMgKi8KKyAgICBNUEkyX01BTlVGQUNUVVJJTkc1X0VOVFJZICAgICAgICAgICBQaHlbTVBJMl9NQU5fUEFHRV81X1BIWV9FTlRSSUVTXTsvKiAweDA4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfTUFOXzUsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fNSwKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlNV90LCBNUEkyX1BPSU5URVIgcE1waTJNYW51ZmFjdHVyaW5nUGFnZTVfdDsKKworI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkc1X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAoMHgwMykKKworCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgNiAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9NQU5fNgoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgSGVhZGVyOyAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0U3BlY2lmaWNJbmZvOy8qIDB4MDQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fNiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl82LAorICBNcGkyTWFudWZhY3R1cmluZ1BhZ2U2X3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlNl90OworCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzZfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICgweDAwKQorCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSA3ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPCit7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFBpbm91dDsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdG9yWzE2XTsgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbjsgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgU2xvdDsgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAvKiAweDE4ICovCit9IE1QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk8sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9NQU5QQUdFN19DT05ORUNUT1JfSU5GTywKKyAgTXBpMk1hblBhZ2U3Q29ubmVjdG9ySW5mb190LCBNUEkyX1BPSU5URVIgcE1waTJNYW5QYWdlN0Nvbm5lY3RvckluZm9fdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFBpbm91dCBmaWVsZCAqLworI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ4NF9MNCAgICAgICAgICAgICAgICAoMHgwMDA4MDAwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0ODRfTDMgICAgICAgICAgICAgICAgKDB4MDAwNDAwMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfUElOT1VUX1NGRl84NDg0X0wyICAgICAgICAgICAgICAgICgweDAwMDIwMDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ4NF9MMSAgICAgICAgICAgICAgICAoMHgwMDAxMDAwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0NzBfTDQgICAgICAgICAgICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfUElOT1VUX1NGRl84NDcwX0wzICAgICAgICAgICAgICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ3MF9MMiAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0NzBfTDEgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfUElOT1VUX1NGRl84NDgyICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9DT05ORUNUSU9OX1VOS05PV04gICAgICAgICAoMHgwMDAwMDAwMSkKKworLyogZGVmaW5lcyBmb3IgdGhlIExvY2F0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfTE9DQVRJT05fVU5LTk9XTiAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X0xPQ0FUSU9OX0lOVEVSTkFMICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19MT0NBVElPTl9FWFRFUk5BTCAgICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfTE9DQVRJT05fU1dJVENIQUJMRSAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX01BTlBBR0U3X0xPQ0FUSU9OX0FVVE8gICAgICAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19MT0NBVElPTl9OT1RfUFJFU0VOVCAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfTE9DQVRJT05fTk9UX0NPTk5FQ1RFRCAgICAgICAgICAgICgweDgwKQorCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgTnVtUGh5cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk9fTUFYCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk9fTUFYICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9NQU5fNworeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgSGVhZGVyOyAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmVOYW1lWzE2XTsgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDIxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MjIgKi8KKyAgICBNUEkyX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPICAgIENvbm5lY3RvckluZm9bTVBJMl9NQU5QQUdFN19DT05ORUNUT1JfSU5GT19NQVhdOyAvKiAweDI0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfTUFOXzcsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fNywKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlN190LCBNUEkyX1BPSU5URVIgcE1waTJNYW51ZmFjdHVyaW5nUGFnZTdfdDsKKworI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkc3X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAoMHgwMCkKKworLyogZGVmaW5lcyBmb3IgdGhlIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfRkxBR19VU0VfU0xPVF9JTkZPICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisKKy8qCisgKiBHZW5lcmljIHN0cnVjdHVyZSB0byB1c2UgZm9yIHByb2R1Y3Qtc3BlY2lmaWMgbWFudWZhY3R1cmluZyBwYWdlcworICogKGN1cnJlbnRseSBNYW51ZmFjdHVyaW5nIFBhZ2UgOCB0aHJvdWdoIE1hbnVmYWN0dXJpbmcgUGFnZSAzMSkuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOX1BTCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICBIZWFkZXI7ICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RTcGVjaWZpY0luZm87LyogMHgwNCAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl9QUywKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl9QUywKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlUFNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2VQU190OworCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzhfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkc5X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMTBfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzExX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcxMl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMTNfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzE0X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcxNV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMTZfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzE3X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcxOF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMTlfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzIwX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMjJfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzIzX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyNF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMjVfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzI2X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyN19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMjhfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzI5X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkczMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMzFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBJTyBVbml0IENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSU8gVW5pdCBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8wCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBVbmlxdWVWYWx1ZTsgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIE1QSTJfVkVSU0lPTl9VTklPTiAgICAgIE52ZGF0YVZlcnNpb25EZWZhdWx0OyAgICAgICAvKiAweDA4ICovCisgICAgTVBJMl9WRVJTSU9OX1VOSU9OICAgICAgTnZkYXRhVmVyc2lvblBlcnNpc3RlbnQ7ICAgIC8qIDB4MEEgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzAsCisgIE1waTJJT1VuaXRQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlMF90OworCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTBfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDAyKQorCisKKy8qIElPIFVuaXQgUGFnZSAxICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfMQoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzEsCisgIE1waTJJT1VuaXRQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlMV90OworCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDA0KQorCisvKiBJTyBVbml0IFBhZ2UgMSBGbGFncyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfTUFTS19TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAgICgweDAwMDAwNjAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9ESVNBQkxFX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfVU5DSEFOR0VEX1NBVEFfV1JJVEVfQ0FDSEUgICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX05BVElWRV9DT01NQU5EX1FfRElTQUJMRSAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9ESVNBQkxFX0lSICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9UQVNLX1NFVF9GVUxMX0hBTkRMSU5HICgweDAwMDAwMDIwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0lSX1VTRV9TVEFUSUNfVk9MVU1FX0lEICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9NVUxUSV9QQVRISU5HICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfU0lOR0xFX1BBVEhJTkcgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorCisKKy8qIElPIFVuaXQgUGFnZSAzICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfSU9fVU5JVF9QQUdFXzNfR1BJT19WQUxfTUFYCisjZGVmaW5lIE1QSTJfSU9fVU5JVF9QQUdFXzNfR1BJT19WQUxfTUFYICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfMworeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBHUElPQ291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBHUElPVmFsW01QSTJfSU9fVU5JVF9QQUdFXzNfR1BJT19WQUxfTUFYXTsvKiAweDA4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8zLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8zLAorICBNcGkySU9Vbml0UGFnZTNfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9Vbml0UGFnZTNfdDsKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UzX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKworLyogZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDMgR1BJT1ZhbCBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UzX0dQSU9fRlVOQ1RJT05fTUFTSyAgICAgICAgICAgICAoMHhGRkZDKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UzX0dQSU9fRlVOQ1RJT05fU0hJRlQgICAgICAgICAgICAoMikKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19HUElPX1NFVFRJTkdfT0ZGICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19HUElPX1NFVFRJTkdfT04gICAgICAgICAgICAgICAgKDB4MDAwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIElPQyBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElPQyBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9DXzAKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBWZW5kb3JJRDsgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldmljZUlEOyAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmV2aXNpb25JRDsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgxMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDEyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQ2xhc3NDb2RlOyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTdWJzeXN0ZW1WZW5kb3JJRDsgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFN1YnN5c3RlbUlEOyAgICAgICAgICAgICAgICAvKiAweDFBICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9DXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT0NfMCwKKyAgTXBpMklPQ1BhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ1BhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9JT0NQQUdFMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDIpCisKKworLyogSU9DIFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT0NfMQoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBDb2FsZXNjaW5nVGltZW91dDsgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvYWxlc2NpbmdEZXB0aDsgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUENJU2xvdE51bTsgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQQ0lCdXNOdW07ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBDSURvbWFpblNlZ21lbnQ7ICAgICAgICAgICAvKiAweDBGICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPQ18xLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9DXzEsCisgIE1waTJJT0NQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NQYWdlMV90OworCisjZGVmaW5lIE1QSTJfSU9DUEFHRTFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICgweDA1KQorCisvKiBkZWZpbmVzIGZvciBJT0MgUGFnZSAxIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU9DUEFHRTFfUkVQTFlfQ09BTEVTQ0lORyAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisjZGVmaW5lIE1QSTJfSU9DUEFHRTFfUENJU0xPVE5VTV9VTktOT1dOICAgICAgICAgICAgICAgICgweEZGKQorI2RlZmluZSBNUEkyX0lPQ1BBR0UxX1BDSUJVU05VTV9VTktOT1dOICAgICAgICAgICAgICAgICAoMHhGRikKKyNkZWZpbmUgTVBJMl9JT0NQQUdFMV9QQ0lET01BSU5fVU5LTk9XTiAgICAgICAgICAgICAgICAgKDB4RkYpCisKKy8qIElPQyBQYWdlIDYgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9DXzYKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBDYXBhYmlsaXRpZXNGbGFnczsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhEcml2ZXNSQUlEMDsgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhEcml2ZXNSQUlEMTsgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhEcml2ZXNSQUlEMUU7ICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhEcml2ZXNSQUlEMTA7ICAgICAgICAgICAgICAgIC8qIDB4MEIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNaW5Ecml2ZXNSQUlEMDsgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNaW5Ecml2ZXNSQUlEMTsgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNaW5Ecml2ZXNSQUlEMUU7ICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNaW5Ecml2ZXNSQUlEMTA7ICAgICAgICAgICAgICAgIC8qIDB4MEYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhHbG9iYWxIb3RTcGFyZXM7ICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhQaHlzRGlza3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhWb2x1bWVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhDb25maWdzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhPQ0VEaXNrczsgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRTdHJpcGVTaXplTWFwUkFJRDA7ICAgIC8qIDB4MUMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRTdHJpcGVTaXplTWFwUkFJRDFFOyAgIC8qIDB4MjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRTdHJpcGVTaXplTWFwUkFJRDEwOyAgIC8qIDB4MjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MkMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0TWV0YWRhdGFTaXplOyAgICAgICAgICAgIC8qIDB4MzAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzIgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhCYWRCbG9ja1RhYmxlRW50cmllczsgICAgICAgIC8qIDB4MzQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJUk52c3JhbVZlcnNpb247ICAgICAgICAgICAgICAgIC8qIDB4MzggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT0NfNiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPQ182LAorICBNcGkySU9DUGFnZTZfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DUGFnZTZfdDsKKworI2RlZmluZSBNUEkyX0lPQ1BBR0U2X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKworLyogZGVmaW5lcyBmb3IgSU9DIFBhZ2UgNiBDYXBhYmlsaXRpZXNGbGFncyAqLworI2RlZmluZSBNUEkyX0lPQ1BBR0U2X0NBUF9GTEFHU19SQUlEMTBfU1VQUE9SVCAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9JT0NQQUdFNl9DQVBfRkxBR1NfUkFJRDFfU1VQUE9SVCAgICAgICAgICAgKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1QSTJfSU9DUEFHRTZfQ0FQX0ZMQUdTX1JBSUQxRV9TVVBQT1JUICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX0lPQ1BBR0U2X0NBUF9GTEFHU19SQUlEMF9TVVBQT1JUICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9JT0NQQUdFNl9DQVBfRkxBR1NfR0xPQkFMX0hPVF9TUEFSRSAgICAgICAgKDB4MDAwMDAwMDEpCisKKworLyogSU9DIFBhZ2UgNyAqLworCisjZGVmaW5lIE1QSTJfSU9DUEFHRTdfRVZFTlRNQVNLX1dPUkRTICAgICAgICg0KQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT0NfNworeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBFdmVudE1hc2tzW01QSTJfSU9DUEFHRTdfRVZFTlRNQVNLX1dPUkRTXTsvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3M7IC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgxQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDFDICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9DXzcsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT0NfNywKKyAgTXBpMklPQ1BhZ2U3X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ1BhZ2U3X3Q7CisKKyNkZWZpbmUgTVBJMl9JT0NQQUdFN19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisKKworLyogSU9DIFBhZ2UgOCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT0NfOAoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtRGV2c1BlckVuY2xvc3VyZTsgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4UGVyc2lzdGVudEVudHJpZXM7ICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhOdW1QaHlzaWNhbE1hcHBlZElEczsgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJUlZvbHVtZU1hcHBpbmdGbGFnczsgICAgICAgLyogMHgxMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDEyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT0NfOCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPQ184LAorICBNcGkySU9DUGFnZThfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DUGFnZThfdDsKKworI2RlZmluZSBNUEkyX0lPQ1BBR0U4X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKworLyogZGVmaW5lcyBmb3IgSU9DIFBhZ2UgOCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0RBX1NUQVJUX1NMT1RfMSAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19SRVNFUlZFRF9UQVJHRVRJRF8wICAgICAgICAgKDB4MDAwMDAwMTApCisKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19NQVNLX01BUFBJTkdfTU9ERSAgICAgICAgICAgKDB4MDAwMDAwMEUpCisjZGVmaW5lIE1QSTJfSU9DUEFHRThfRkxBR1NfREVWSUNFX1BFUlNJU1RFTkNFX01BUFBJTkcgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0VOQ0xPU1VSRV9TTE9UX01BUFBJTkcgICAgICAoMHgwMDAwMDAwMikKKworI2RlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0RJU0FCTEVfUEVSU0lTVEVOVF9NQVBQSU5HICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19FTkFCTEVfUEVSU0lTVEVOVF9NQVBQSU5HICAgKDB4MDAwMDAwMDApCisKKy8qIGRlZmluZXMgZm9yIElPQyBQYWdlIDggSVJWb2x1bWVNYXBwaW5nRmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX01BU0tfVk9MVU1FX01BUFBJTkdfTU9ERSAgKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1QSTJfSU9DUEFHRThfSVJGTEFHU19MT1dfVk9MVU1FX01BUFBJTkcgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX0lPQ1BBR0U4X0lSRkxBR1NfSElHSF9WT0xVTUVfTUFQUElORyAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIEJJT1MgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCSU9TIFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9CSU9TXzEKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEJpb3NPcHRpb25zOyAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DU2V0dGluZ3M7ICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERldmljZVNldHRpbmdzOyAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZEZXZpY2VzOyAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPVGltZW91dEJsb2NrRGV2aWNlc05vblJNOyAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9UaW1lb3V0U2VxdWVudGlhbDsgICAgICAgIC8qIDB4MUEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT1RpbWVvdXRPdGhlcjsgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPVGltZW91dEJsb2NrRGV2aWNlc1JNOyAgICAvKiAweDFFICovCit9IE1QSTJfQ09ORklHX1BBR0VfQklPU18xLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfQklPU18xLAorICBNcGkyQmlvc1BhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJpb3NQYWdlMV90OworCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICgweDA0KQorCisvKiB2YWx1ZXMgZm9yIEJJT1MgUGFnZSAxIEJpb3NPcHRpb25zIGZpZWxkICovCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX09QVElPTlNfRElTQUJMRV9CSU9TICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisvKiB2YWx1ZXMgZm9yIEJJT1MgUGFnZSAxIElPQ1NldHRpbmdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9NQVNLX0JPT1RfUFJFRkVSRU5DRSAgICAgICgweDAwMDMwMDAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfRU5DTE9TVVJFX1NMT1RfQk9PVCAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX1NBU19BRERSRVNTX0JPT1QgICAgICAgICAgKDB4MDAwMTAwMDApCisKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX01BU0tfUk1fU0VUVElORyAgICAgICAgICAgKDB4MDAwMDAwQzApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9OT05FX1JNX1NFVFRJTkcgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfQk9PVF9STV9TRVRUSU5HICAgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX01FRElBX1JNX1NFVFRJTkcgICAgICAgICAgKDB4MDAwMDAwODApCisKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX01BU0tfQURBUFRFUl9TVVBQT1JUICAgICAgKDB4MDAwMDAwMzApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9OT19TVVBQT1JUICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfQklPU19TVVBQT1JUICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX09TX1NVUFBPUlQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9BTExfU1VQUE9SVCAgICAgICAgICAgICAgICgweDAwMDAwMDMwKQorCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9BTFRFUk5BVEVfQ0hTICAgICAgICAgICAgICgweDAwMDAwMDA4KQorCisvKiB2YWx1ZXMgZm9yIEJJT1MgUGFnZSAxIERldmljZVNldHRpbmdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0RFVlNFVF9ESVNBQkxFX1NNQVJUX1BPTExJTkcgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9ERVZTRVRfRElTQUJMRV9TRVFfTFVOICAgICAgICAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfREVWU0VUX0RJU0FCTEVfUk1fTFVOICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0RFVlNFVF9ESVNBQkxFX05PTl9STV9MVU4gICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9ERVZTRVRfRElTQUJMRV9PVEhFUl9MVU4gICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKiBCSU9TIFBhZ2UgMiAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9CT09UX0RFVklDRV9BREFQVEVSX09SREVSCit7CisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfQk9PVF9ERVZJQ0VfQURBUFRFUl9PUkRFUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0JPT1RfREVWSUNFX0FEQVBURVJfT1JERVIsCisgIE1waTJCb290RGV2aWNlQWRhcHRlck9yZGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJvb3REZXZpY2VBZGFwdGVyT3JkZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQk9PVF9ERVZJQ0VfU0FTX1dXSUQKK3sKKyAgICBVNjQgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0JPT1RfREVWSUNFX1NBU19XV0lELCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQk9PVF9ERVZJQ0VfU0FTX1dXSUQsCisgIE1waTJCb290RGV2aWNlU2FzV3dpZF90LCBNUEkyX1BPSU5URVIgcE1waTJCb290RGV2aWNlU2FzV3dpZF90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9CT09UX0RFVklDRV9FTkNMT1NVUkVfU0xPVAoreworICAgIFU2NCAgICAgICAgIEVuY2xvc3VyZUxvZ2ljYWxJRDsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgIFNsb3ROdW1iZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTIgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0JPT1RfREVWSUNFX0VOQ0xPU1VSRV9TTE9ULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQk9PVF9ERVZJQ0VfRU5DTE9TVVJFX1NMT1QsCisgIE1waTJCb290RGV2aWNlRW5jbG9zdXJlU2xvdF90LCBNUEkyX1BPSU5URVIgcE1waTJCb290RGV2aWNlRW5jbG9zdXJlU2xvdF90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9CT09UX0RFVklDRV9ERVZJQ0VfTkFNRQoreworICAgIFU2NCAgICAgICAgIERldmljZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgTFVOWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfQk9PVF9ERVZJQ0VfREVWSUNFX05BTUUsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9CT09UX0RFVklDRV9ERVZJQ0VfTkFNRSwKKyAgTXBpMkJvb3REZXZpY2VEZXZpY2VOYW1lX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJvb3REZXZpY2VEZXZpY2VOYW1lX3Q7CisKK3R5cGVkZWYgdW5pb24gX01QSTJfTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UKK3sKKyAgICBNUEkyX0JPT1RfREVWSUNFX0FEQVBURVJfT1JERVIgIEFkYXB0ZXJPcmRlcjsKKyAgICBNUEkyX0JPT1RfREVWSUNFX1NBU19XV0lEICAgICAgIFNhc1d3aWQ7CisgICAgTVBJMl9CT09UX0RFVklDRV9FTkNMT1NVUkVfU0xPVCBFbmNsb3N1cmVTbG90OworICAgIE1QSTJfQk9PVF9ERVZJQ0VfREVWSUNFX05BTUUgICAgRGV2aWNlTmFtZTsKK30gTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UsCisgIE1waTJCaW9zUGFnZTJCb290RGV2aWNlX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJpb3NQYWdlMkJvb3REZXZpY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfQklPU18yCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxQm9vdERldmljZUZvcm07ICAgICAgLyogMHgxQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAvKiAweDFEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkODsgICAgICAgICAgICAgIC8qIDB4MUUgKi8KKyAgICBNUEkyX0JJT1NQQUdFMl9CT09UX0RFVklDRSAgUmVxdWVzdGVkQm9vdERldmljZTsgICAgLyogMHgyMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXFBbHRCb290RGV2aWNlRm9ybTsgICAvKiAweDM4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOTsgICAgICAgICAgICAgIC8qIDB4MzkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMDsgICAgICAgICAgICAgLyogMHgzQSAqLworICAgIE1QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFICBSZXF1ZXN0ZWRBbHRCb290RGV2aWNlOyAvKiAweDNDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRCb290RGV2aWNlRm9ybTsgIC8qIDB4NTggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMTsgICAgICAgICAgICAgLyogMHg1OSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDEyOyAgICAgICAgICAgICAvKiAweDVBICovCisgICAgTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UgIEN1cnJlbnRCb290RGV2aWNlOyAgICAgIC8qIDB4NTggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9CSU9TXzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9CSU9TXzIsCisgIE1waTJCaW9zUGFnZTJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQmlvc1BhZ2UyX3Q7CisKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTJfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDB4MDQpCisKKy8qIHZhbHVlcyBmb3IgQklPUyBQYWdlIDIgQm9vdERldmljZUZvcm0gZmllbGRzICovCisjZGVmaW5lIE1QSTJfQklPU1BBR0UyX0ZPUk1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMl9GT1JNX05PX0RFVklDRV9TUEVDSUZJRUQgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTJfRk9STV9TQVNfV1dJRCAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfQklPU1BBR0UyX0ZPUk1fRU5DTE9TVVJFX1NMT1QgICAgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMl9GT1JNX0RFVklDRV9OQU1FICAgICAgICAgICAgICAgICAoMHgwNykKKworCisvKiBCSU9TIFBhZ2UgMyAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9BREFQVEVSX0lORk8KK3sKKyAgICBVOCAgICAgIFBjaUJ1c051bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgUGNpRGV2aWNlQW5kRnVuY3Rpb25OdW1iZXI7ICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICBBZGFwdGVyRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9BREFQVEVSX0lORk8sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9BREFQVEVSX0lORk8sCisgIE1waTJBZGFwdGVySW5mb190LCBNUEkyX1BPSU5URVIgcE1waTJBZGFwdGVySW5mb190OworCisjZGVmaW5lIE1QSTJfQURBUFRFUl9JTkZPX0ZMQUdTX0VNQkVEREVEICAgICAgICAgICAgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfQURBUFRFUl9JTkZPX0ZMQUdTX0lOSVRfU1RBVFVTICAgICAgICAgICAgICgweDAwMDIpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0JJT1NfMworeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgR2xvYmFsRmxhZ3M7ICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBCaW9zVmVyc2lvbjsgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIE1QSTJfQURBUFRFUl9JTkZPICAgICAgIEFkYXB0ZXJPcmRlcls0XTsgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9CSU9TXzMsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9CSU9TXzMsCisgIE1waTJCaW9zUGFnZTNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQmlvc1BhZ2UzX3Q7CisKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTNfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIHZhbHVlcyBmb3IgQklPUyBQYWdlIDMgR2xvYmFsRmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTNfRkxBR1NfUEFVU0VfT05fRVJST1IgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfQklPU1BBR0UzX0ZMQUdTX1ZFUkJPU0VfRU5BQkxFICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX0JJT1NQQUdFM19GTEFHU19IT09LX0lOVF80MF9ESVNBQkxFICAgICAgICAoMHgwMDAwMDAxMCkKKworI2RlZmluZSBNUEkyX0JJT1NQQUdFM19GTEFHU19ERVZfTElTVF9ESVNQTEFZX01BU0sgICAgICAoMHgwMDAwMDBFMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTNfRkxBR1NfSU5TVEFMTEVEX0RFVl9ESVNQTEFZICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UzX0ZMQUdTX0FEQVBURVJfRElTUExBWSAgICAgICAgICAgICgweDAwMDAwMDIwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFM19GTEFHU19BREFQVEVSX0RFVl9ESVNQTEFZICAgICAgICAoMHgwMDAwMDA0MCkKKworCisvKiBCSU9TIFBhZ2UgNCAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggb3IgTnVtUGh5cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfQklPU19QQUdFXzRfUEhZX0VOVFJJRVMKKyNkZWZpbmUgTVBJMl9CSU9TX1BBR0VfNF9QSFlfRU5UUklFUyAgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQklPUzRfRU5UUlkKK3sKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSZWFzc2lnbm1lbnRXV0lEOyAgICAgICAvKiAweDAwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmVhc3NpZ25tZW50RGV2aWNlTmFtZTsgLyogMHgwOCAqLworfSBNUEkyX0JJT1M0X0VOVFJZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQklPUzRfRU5UUlksCisgIE1waTJNQmlvczRFbnRyeV90LCBNUEkyX1BPSU5URVIgcE1waTJCaW9zNEVudHJ5X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0JJT1NfNAoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBNUEkyX0JJT1M0X0VOVFJZICAgICAgICBQaHlbTVBJMl9CSU9TX1BBR0VfNF9QSFlfRU5UUklFU107ICAvKiAweDA4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfQklPU180LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfQklPU180LAorICBNcGkyQmlvc1BhZ2U0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJpb3NQYWdlNF90OworCisjZGVmaW5lIE1QSTJfQklPU1BBR0U0X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICgweDAxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgUkFJRCBWb2x1bWUgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSQUlEIFZvbHVtZSBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRFZPTDBfUEhZU19ESVNLCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFJRFNldE51bTsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza01hcDsgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KK30gTVBJMl9SQUlEVk9MMF9QSFlTX0RJU0ssIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEVk9MMF9QSFlTX0RJU0ssCisgIE1waTJSYWlkVm9sMFBoeXNEaXNrX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRWb2wwUGh5c0Rpc2tfdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFBoeXNEaXNrTWFwIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfUEhZU0RJU0tfUFJJTUFSWSAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1BIWVNESVNLX1NFQ09OREFSWSAgICAgICAgICAgICAgICAoMHgwMikKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRFZPTDBfU0VUVElOR1MKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTZXR0aW5nczsgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEhvdFNwYXJlUG9vbDsgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9SQUlEVk9MMF9TRVRUSU5HUywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURWT0wwX1NFVFRJTkdTLAorICBNcGkyUmFpZFZvbDBTZXR0aW5nc190LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkVm9sMFNldHRpbmdzX3Q7CisKKy8qIFJBSUQgVm9sdW1lIFBhZ2UgMCBIb3RTcGFyZVBvb2wgZGVmaW5lcywgYWxzbyB1c2VkIGluIFJBSUQgUGh5c2ljYWwgRGlzayAqLworI2RlZmluZSBNUEkyX1JBSURfSE9UX1NQQVJFX1BPT0xfMCAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXzEgICAgICAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUkFJRF9IT1RfU1BBUkVfUE9PTF8yICAgICAgICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1JBSURfSE9UX1NQQVJFX1BPT0xfMyAgICAgICAgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXzQgICAgICAgICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfUkFJRF9IT1RfU1BBUkVfUE9PTF81ICAgICAgICAgICAgICAgICAgICAgICgweDIwKQorI2RlZmluZSBNUEkyX1JBSURfSE9UX1NQQVJFX1BPT0xfNiAgICAgICAgICAgICAgICAgICAgICAoMHg0MCkKKyNkZWZpbmUgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXzcgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCisKKy8qIFJBSUQgVm9sdW1lIFBhZ2UgMCBWb2x1bWVTZXR0aW5ncyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU0VUVElOR19VU0VfUFJPRFVDVF9JRF9TVUZGSVggICAgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU0VUVElOR19BVVRPX0NPTkZJR19IU1dBUF9ESVNBQkxFICgweDAwMDQpCisKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TRVRUSU5HX01BU0tfV1JJVEVfQ0FDSElORyAgICAgICAgKDB4MDAwMykKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TRVRUSU5HX1VOQ0hBTkdFRCAgICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TRVRUSU5HX0RJU0FCTEVfV1JJVEVfQ0FDSElORyAgICAgKDB4MDAwMSkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TRVRUSU5HX0VOQUJMRV9XUklURV9DQUNISU5HICAgICAgKDB4MDAwMikKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9SQUlEX1ZPTF9QQUdFXzBfUEhZU0RJU0tfTUFYCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfUEFHRV8wX1BIWVNESVNLX01BWCAgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9SQUlEX1ZPTF8wCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXRlOyAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVm9sdW1lVHlwZTsgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFnczsgICAgICAgICAgLyogMHgwOCAqLworICAgIE1QSTJfUkFJRFZPTDBfU0VUVElOR1MgIFZvbHVtZVNldHRpbmdzOyAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgTWF4TEJBOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTdHJpcGVTaXplOyAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MUUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRQaHlzRGlza3M7ICAgICAgICAgLyogMHgyMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc3luY1JhdGU7ICAgICAgICAgICAgICAgICAvKiAweDIxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGF0YVNjcnViRHVyYXRpb247ICAgICAgICAgIC8qIDB4MjIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzRGlza3M7ICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDI1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MjYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJbmFjdGl2ZVN0YXR1czsgICAgICAgICAgICAgLyogMHgyNyAqLworICAgIE1QSTJfUkFJRFZPTDBfUEhZU19ESVNLIFBoeXNEaXNrW01QSTJfUkFJRF9WT0xfUEFHRV8wX1BIWVNESVNLX01BWF07IC8qIDB4MjggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9SQUlEX1ZPTF8wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfUkFJRF9WT0xfMCwKKyAgTXBpMlJhaWRWb2xQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkVm9sUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTiAgICAgICAgICAgKDB4MEEpCisKKy8qIHZhbHVlcyBmb3IgUkFJRCBWb2x1bWVTdGF0ZSAqLworI2RlZmluZSBNUEkyX1JBSURfVk9MX1NUQVRFX01JU1NJTkcgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfU1RBVEVfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9TVEFURV9JTklUSUFMSVpJTkcgICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX1NUQVRFX09OTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfU1RBVEVfREVHUkFERUQgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9TVEFURV9PUFRJTUFMICAgICAgICAgICAgICAgICAgICAgICAgICgweDA1KQorCisvKiB2YWx1ZXMgZm9yIFJBSUQgVm9sdW1lVHlwZSAqLworI2RlZmluZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfVFlQRV9VTktOT1dOICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRikKKworLyogdmFsdWVzIGZvciBSQUlEIFZvbHVtZSBQYWdlIDAgVm9sdW1lU3RhdHVzRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19QRU5ESU5HX1JFU1lOQyAgICAgICAgICAgICgweDAyMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0JBQ0tHX0lOSVRfUEVORElORyAgICAgICAgKDB4MDEwMDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfTURDX1BFTkRJTkcgICAgICAgICAgICAgICAoMHgwMDgwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19VU0VSX0NPTlNJU1RfUEVORElORyAgICAgICgweDAwNDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX01BS0VfREFUQV9DT05TSVNURU5UICAgICAgKDB4MDAyMDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfREFUQV9TQ1JVQiAgICAgICAgICAgICAgICAoMHgwMDEwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19DT05TSVNURU5DWV9DSEVDSyAgICAgICAgICgweDAwMDgwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0NBUEFDSVRZX0VYUEFOU0lPTiAgICAgICAgKDB4MDAwNDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfQkFDS0dST1VORF9JTklUICAgICAgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19SRVNZTkNfSU5fUFJPR1JFU1MgICAgICAgICgweDAwMDEwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX09DRV9BTExPV0VEICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfQkdJX0NPTVBMRVRFICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR18xRV9PRkZTRVRfTUlSUk9SICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHXzFFX0FESkFDRU5UX01JUlJPUiAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfQkFEX0JMT0NLX1RBQkxFX0ZVTEwgICAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19WT0xVTUVfSU5BQ1RJVkUgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX1FVSUVTQ0VEICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworLyogdmFsdWVzIGZvciBSQUlEIFZvbHVtZSBQYWdlIDAgU3VwcG9ydGVkUGh5c0Rpc2tzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1VQUE9SVF9TT0xJRF9TVEFURV9ESVNLUyAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVVBQT1JUX0hBUkRfRElTS1MgICAgICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NVUFBPUlRfU0FTX1BST1RPQ09MICAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1VQUE9SVF9TQVRBX1BST1RPQ09MICAgICAgICAgICAgICAgICAoMHgwMSkKKworLyogdmFsdWVzIGZvciBSQUlEIFZvbHVtZSBQYWdlIDAgSW5hY3RpdmVTdGF0dXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEVk9MUEFHRTBfVU5LTk9XTl9JTkFDVElWRSAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0xQQUdFMF9TVEFMRV9NRVRBREFUQV9JTkFDVElWRSAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJRFZPTFBBR0UwX0ZPUkVJR05fVk9MVU1FX0lOQUNUSVZFICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SQUlEVk9MUEFHRTBfSU5TVUZGSUNJRU5UX1JFU09VUkNFX0lOQUNUSVZFICAgICgweDAzKQorI2RlZmluZSBNUEkyX1JBSURWT0xQQUdFMF9DTE9ORV9WT0xVTUVfSU5BQ1RJVkUgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfUkFJRFZPTFBBR0UwX0lOU1VGRklDSUVOVF9NRVRBREFUQV9JTkFDVElWRSAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MUEFHRTBfUFJFVklPVVNMWV9ERUxFVEVEICAgICAgICAgICAgICAgICgweDA2KQorCisKKy8qIFJBSUQgVm9sdW1lIFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9SQUlEX1ZPTF8xCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMDsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgR1VJRFsyNF07ICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOYW1lWzE2XTsgICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFdXSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDMwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MzggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgzQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX1JBSURfVk9MXzEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9SQUlEX1ZPTF8xLAorICBNcGkyUmFpZFZvbFBhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRWb2xQYWdlMV90OworCisjZGVmaW5lIE1QSTJfUkFJRFZPTFBBR0UxX1BBR0VWRVJTSU9OICAgICAgICAgICAoMHgwMykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFJBSUQgUGh5c2ljYWwgRGlzayBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRFBIWVNESVNLMF9TRVRUSU5HUworeworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSG90U3BhcmVQb29sOyAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX1JBSURQSFlTRElTSzBfU0VUVElOR1MsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEUEhZU0RJU0swX1NFVFRJTkdTLAorICBNcGkyUmFpZFBoeXNEaXNrMFNldHRpbmdzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRQaHlzRGlzazBTZXR0aW5nc190OworCisvKiB1c2UgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXyBkZWZpbmVzIGZvciB0aGUgSG90U3BhcmVQb29sIGZpZWxkICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURQSFlTRElTSzBfSU5RVUlSWV9EQVRBCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVmVuZG9ySURbOF07ICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0SURbMTZdOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RSZXZMZXZlbFs0XTsgICAgICAgICAvKiAweDE4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU2VyaWFsTnVtWzMyXTsgICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9SQUlEUEhZU0RJU0swX0lOUVVJUllfREFUQSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURQSFlTRElTSzBfSU5RVUlSWV9EQVRBLAorICBNcGkyUmFpZFBoeXNEaXNrMElucXVpcnlEYXRhX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRQaHlzRGlzazBJbnF1aXJ5RGF0YV90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18wCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza051bTsgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIE1QSTJfUkFJRFBIWVNESVNLMF9TRVRUSU5HUyAgICAgUGh5c0Rpc2tTZXR0aW5nczsgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgTVBJMl9SQUlEUEhZU0RJU0swX0lOUVVJUllfREFUQSBJbnF1aXJ5RGF0YTsgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4NEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrU3RhdGU7ICAgICAgICAgICAgICAvKiAweDUwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZsaW5lUmVhc29uOyAgICAgICAgICAgICAgLyogMHg1MSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jb21wYXRpYmxlUmVhc29uOyAgICAgICAgIC8qIDB4NTIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrQXR0cmlidXRlczsgICAgICAgICAvKiAweDUzICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza1N0YXR1c0ZsYWdzOyAgICAgICAgLyogMHg1NCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlTWF4TEJBOyAgICAgICAgICAgICAgIC8qIDB4NTggKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RNYXhMQkE7ICAgICAgICAgICAgICAgICAvKiAweDYwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2VyY2VkTWF4TEJBOyAgICAgICAgICAgICAgLyogMHg2OCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4NzAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDcyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHg3NCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1JEX1BESVNLXzAsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18wLAorICBNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1JBSURQSFlTRElTS1BBR0UwX1BBR0VWRVJTSU9OICAgICAgICAgICgweDA1KQorCisvKiBQaHlzRGlza1N0YXRlIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1BEX1NUQVRFX05PVF9DT05GSUdVUkVEICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09NUEFUSUJMRSAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURfUERfU1RBVEVfT0ZGTElORSAgICAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SQUlEX1BEX1NUQVRFX09OTElORSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfUkFJRF9QRF9TVEFURV9IT1RfU1BBUkUgICAgICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1JBSURfUERfU1RBVEVfREVHUkFERUQgICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9SQUlEX1BEX1NUQVRFX1JFQlVJTERJTkcgICAgICAgICAgICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfUkFJRF9QRF9TVEFURV9PUFRJTUFMICAgICAgICAgICAgICAgICAgICAgICgweDA3KQorCisvKiBPZmZsaW5lUmVhc29uIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfT05MSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX09GRkxJTkVfTUlTU0lORyAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9PRkZMSU5FX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfT0ZGTElORV9JTklUSUFMSVpJTkcgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX09GRkxJTkVfUkVRVUVTVEVEICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9PRkZMSU5FX0ZBSUxFRF9SRVFVRVNURUQgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfT0ZGTElORV9PVEhFUiAgICAgICAgICAgICAgICAgICAgKDB4RkYpCisKKy8qIEluY29tcGF0aWJsZVJlYXNvbiBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0NPTVBBVElCTEUgICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9JTkNPTVBBVElCTEVfUFJPVE9DT0wgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX0JMT0NLU0laRSAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0lOQ09NUEFUSUJMRV9NQVhfTEJBICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9JTkNPTVBBVElCTEVfU0FUQV9FWFRFTkRFRF9DTUQgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX1JFTU9WRUFCTEVfTUVESUEgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0lOQ09NUEFUSUJMRV9VTktOT1dOICAgICAgICAgICAgICgweEZGKQorCisvKiBQaHlzRGlza0F0dHJpYnV0ZXMgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1BIWVNESVNLMF9BVFRSSUJfU09MSURfU1RBVEVfRFJJVkUgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfQVRUUklCX0hBUkRfRElTS19EUklWRSAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0FUVFJJQl9TQVNfUFJPVE9DT0wgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9BVFRSSUJfU0FUQV9QUk9UT0NPTCAgICAgICAgICAgICAoMHgwMSkKKworLyogUGh5c0Rpc2tTdGF0dXNGbGFncyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX05PVF9DRVJUSUZJRUQgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19PQ0VfVEFSR0VUICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfV1JJVEVfQ0FDSEVfRU5BQkxFRCAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX09QVElNQUxfUFJFVklPVVMgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19OT1RfT1BUSU1BTF9QUkVWSU9VUyAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfSU5BQ1RJVkVfVk9MVU1FICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX1FVSUVTQ0VEICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19PVVRfT0ZfU1lOQyAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKiBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZSAxICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBvciBOdW1QaHlzRGlza1BhdGhzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVgKKyNkZWZpbmUgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVggICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEUEhZU0RJU0sxX1BBVEgKK3sKKyAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwMiAqLworICAgIFU2NCAgICAgICAgICAgICBXV0lEOyAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVNjQgICAgICAgICAgICAgT3duZXJXV0lEOyAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgIE93bmVySWRlbnRpZmllcjsgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVMTYgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDE2ICovCit9IE1QSTJfUkFJRFBIWVNESVNLMV9QQVRILCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRFBIWVNESVNLMV9QQVRILAorICBNcGkyUmFpZFBoeXNEaXNrMVBhdGhfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFBoeXNEaXNrMVBhdGhfdDsKKworLyogUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2UgMSBQaHlzaWNhbCBEaXNrIFBhdGggRmxhZ3MgZmllbGQgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1JBSURfUEhZU0RJU0sxX0ZMQUdfUFJJTUFSWSAgICAgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9SQUlEX1BIWVNESVNLMV9GTEFHX0JST0tFTiAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfUkFJRF9QSFlTRElTSzFfRkxBR19JTlZBTElEICAgICAgICAoMHgwMDAxKQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18xCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5c0Rpc2tQYXRoczsgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOyAgICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBNUEkyX1JBSURQSFlTRElTSzFfUEFUSCAgICAgICAgIFBoeXNpY2FsRGlza1BhdGhbTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVhdOy8qIDB4MEMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18xLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMSwKKyAgTXBpMlJhaWRQaHlzRGlza1BhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRQaHlzRGlza1BhZ2UxX3Q7CisKKyNkZWZpbmUgTVBJMl9SQUlEUEhZU0RJU0tQQUdFMV9QQUdFVkVSU0lPTiAgICAgICAgICAoMHgwMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIHZhbHVlcyBmb3IgZmllbGRzIHVzZWQgYnkgc2V2ZXJhbCB0eXBlcyBvZiBTQVMgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB2YWx1ZXMgZm9yIE5lZ290aWF0ZWRMaW5rUmF0ZXMgZmllbGRzICovCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTUFTS19MT0dJQ0FMICAgICAgICAgICAgICgweEYwKQorI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1NISUZUX0xPR0lDQUwgICAgICAgICAgICAoNCkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9NQVNLX1BIWVNJQ0FMICAgICAgICAgICAgKDB4MEYpCisvKiBsaW5rIHJhdGVzIHVzZWQgZm9yIE5lZ290aWF0ZWQgUGh5c2ljYWwgYW5kIExvZ2ljYWwgTGluayBSYXRlICovCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfVU5LTk9XTl9MSU5LX1JBVEUgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1BIWV9ESVNBQkxFRCAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9ORUdPVElBVElPTl9GQUlMRUQgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfU0FUQV9PT0JfQ09NUExFVEUgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1BPUlRfU0VMRUNUT1IgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9TTVBfUkVTRVRfSU5fUFJPR1JFU1MgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzNfMCAgICAgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV82XzAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEpCisKKworLyogdmFsdWVzIGZvciBBdHRhY2hlZFBoeUluZm8gZmllbGRzICovCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX0lOU0lERV9aUFNEU19QRVJTSVNURU5UICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRVFVRVNURURfSU5TSURFX1pQU0RTICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fQlJFQUtfUkVQTFlfQ0FQQUJMRSAgICAgICAgICAgKDB4MDAwMDAwMTApCisKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMEYpCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9VTktOT1dOICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRUFTT05fUE9XRVJfT04gICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX0hBUkRfUkVTRVQgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9TTVBfUEhZX0NPTlRST0wgICAgICAgICgweDAwMDAwMDAzKQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRUFTT05fTE9TU19PRl9TWU5DICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX01VTFRJUExFWElOR19TRVEgICAgICAgKDB4MDAwMDAwMDUpCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9JVF9ORVhVU19MT1NTX1RJTUVSICAgICgweDAwMDAwMDA2KQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRUFTT05fQlJFQUtfVElNRU9VVCAgICAgICAgICAoMHgwMDAwMDAwNykKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX1BIWV9URVNUX1NUT1BQRUQgICAgICAgKDB4MDAwMDAwMDgpCisKKworLyogdmFsdWVzIGZvciBQaHlJbmZvIGZpZWxkcyAqLworI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1BIWV9WQUNBTlQgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19DSEFOR0VEX1JFUV9JTlNJREVfWlBTRFMgICAgICAgKDB4MDQwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fSU5TSURFX1pQU0RTX1BFUlNJU1RFTlQgICAgICAgICgweDAyMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFUV9JTlNJREVfWlBTRFMgICAgICAgICAgICAgICAoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19aT05FX0dST1VQX1BFUlNJU1RFTlQgICAgICAgICAgKDB4MDA0MDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fSU5TSURFX1pQU0RTICAgICAgICAgICAgICAgICAgICgweDAwMjAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1pPTklOR19FTkFCTEVEICAgICAgICAgICAgICAgICAoMHgwMDEwMDAwMCkKKworI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwMDBGMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fVU5LTk9XTiAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUkVBU09OX1BPV0VSX09OICAgICAgICAgICAgICAgICgweDAwMDEwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9IQVJEX1JFU0VUICAgICAgICAgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fU01QX1BIWV9DT05UUk9MICAgICAgICAgKDB4MDAwMzAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUkVBU09OX0xPU1NfT0ZfU1lOQyAgICAgICAgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9NVUxUSVBMRVhJTkdfU0VRICAgICAgICAoMHgwMDA1MDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fSVRfTkVYVVNfTE9TU19USU1FUiAgICAgKDB4MDAwNjAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUkVBU09OX0JSRUFLX1RJTUVPVVQgICAgICAgICAgICgweDAwMDcwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9QSFlfVEVTVF9TVE9QUEVEICAgICAgICAoMHgwMDA4MDAwMCkKKworI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX01VTFRJUExFWElOR19TVVBQT1JURUQgICAgICAgICAoMHgwMDAwODAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19TQVRBX1BPUlRfQUNUSVZFICAgICAgICAgICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fU0FUQV9QT1JUX1NFTEVDVE9SX1BSRVNFTlQgICAgICgweDAwMDAyMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1ZJUlRVQUxfUEhZICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMTAwMCkKKworI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX01BU0tfUEFSVElBTF9QQVRIV0FZX1RJTUUgICAgICAoMHgwMDAwMEYwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19TSElGVF9QQVJUSUFMX1BBVEhXQVlfVElNRSAgICAgKDgpCisKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19NQVNLX1JPVVRJTkdfQVRUUklCVVRFICAgICAgICAgKDB4MDAwMDAwRjApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fRElSRUNUX1JPVVRJTkcgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1NVQlRSQUNUSVZFX1JPVVRJTkcgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19UQUJMRV9ST1VUSU5HICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisKKworLyogdmFsdWVzIGZvciBTQVMgUHJvZ3JhbW1lZExpbmtSYXRlIGZpZWxkcyAqLworI2RlZmluZSBNUEkyX1NBU19QUkFURV9NQVhfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGMCkKKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUFYX1JBVEVfTk9UX1BST0dSQU1NQUJMRSAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTX1BSQVRFX01BWF9SQVRFXzFfNSAgICAgICAgICAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBNUEkyX1NBU19QUkFURV9NQVhfUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICAoMHg5MCkKKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUFYX1JBVEVfNl8wICAgICAgICAgICAgICAgICAgICAgKDB4QTApCisjZGVmaW5lIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1NBU19QUkFURV9NSU5fUkFURV9OT1RfUFJPR1JBTU1BQkxFICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFXzNfMCAgICAgICAgICAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX1NBU19QUkFURV9NSU5fUkFURV82XzAgICAgICAgICAgICAgICAgICAgICAoMHgwQSkKKworCisvKiB2YWx1ZXMgZm9yIFNBUyBId0xpbmtSYXRlIGZpZWxkcyAqLworI2RlZmluZSBNUEkyX1NBU19IV1JBVEVfTUFYX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGMCkKKyNkZWZpbmUgTVBJMl9TQVNfSFdSQVRFX01BWF9SQVRFXzFfNSAgICAgICAgICAgICAgICAgICAgKDB4ODApCisjZGVmaW5lIE1QSTJfU0FTX0hXUkFURV9NQVhfUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICgweDkwKQorI2RlZmluZSBNUEkyX1NBU19IV1JBVEVfTUFYX1JBVEVfNl8wICAgICAgICAgICAgICAgICAgICAoMHhBMCkKKyNkZWZpbmUgTVBJMl9TQVNfSFdSQVRFX01JTl9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfU0FTX0hXUkFURV9NSU5fUkFURV8xXzUgICAgICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU19IV1JBVEVfTUlOX1JBVEVfM18wICAgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQVNfSFdSQVRFX01JTl9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgKDB4MEEpCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFNBUyBJTyBVbml0IENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0FTIElPIFVuaXQgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU19JT19VTklUMF9QSFlfREFUQQoreworICAgIFU4ICAgICAgICAgIFBvcnQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBQb3J0RmxhZ3M7ICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgUGh5RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgIE5lZ290aWF0ZWRMaW5rUmF0ZTsgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICBDb250cm9sbGVyUGh5RGV2aWNlSW5mbzsvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgQXR0YWNoZWREZXZIYW5kbGU7ICAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgIENvbnRyb2xsZXJEZXZIYW5kbGU7ICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICBEaXNjb3ZlcnlTdGF0dXM7ICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX1NBU19JT19VTklUMF9QSFlfREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBU19JT19VTklUMF9QSFlfREFUQSwKKyAgTXBpMlNhc0lPVW5pdDBQaHlEYXRhX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lPVW5pdDBQaHlEYXRhX3Q7CisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNfSU9VTklUMF9QSFlfTUFYCisjZGVmaW5lIE1QSTJfU0FTX0lPVU5JVDBfUEhZX01BWCAgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzAKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIE1QSTJfU0FTX0lPX1VOSVQwX1BIWV9EQVRBICAgICAgICAgIFBoeURhdGFbTVBJMl9TQVNfSU9VTklUMF9QSFlfTUFYXTsgIC8qIDB4MTAgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfMCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF8wLAorICBNcGkyU2FzSU9Vbml0UGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzSU9Vbml0UGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAwIFBvcnRGbGFncyAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfUE9SVEZMQUdTX0RJU0NPVkVSWV9JTl9QUk9HUkVTUyAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9QT1JURkxBR1NfQVVUT19QT1JUX0NPTkZJRyAgICAgICAgICAoMHgwMSkKKworLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDAgUGh5RmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX1BIWUZMQUdTX1pPTklOR19FTkFCTEVEICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfUEhZRkxBR1NfUEhZX0RJU0FCTEVEICAgICAgICAgICAgICAgKDB4MDgpCisKKy8qIHVzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXyBkZWZpbmVzIGZvciB0aGUgTmVnb3RpYXRlZExpbmtSYXRlIGZpZWxkICovCisKKy8qIHNlZSBtcGkyX3Nhcy5oIGZvciB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMCBDb250cm9sbGVyUGh5RGV2aWNlSW5mbyB2YWx1ZXMgKi8KKworLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDAgRGlzY292ZXJ5U3RhdHVzICovCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19NQVhfRU5DTE9TVVJFU19FWENFRUQgICAgICAgICAgICAoMHg4MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX01BWF9FWFBBTkRFUlNfRVhDRUVEICAgICAgICAgICAgICgweDQwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfTUFYX0RFVklDRVNfRVhDRUVEICAgICAgICAgICAgICAgKDB4MjAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19NQVhfVE9QT19QSFlTX0VYQ0VFRCAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX0RPV05TVFJFQU1fSU5JVElBVE9SICAgICAgICAgICAgICgweDA4MDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfTVVMVElfU1VCVFJBQ1RJVkVfU1VCVFJBQ1RJVkUgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19FWFBfTVVMVElfU1VCVFJBQ1RJVkUgICAgICAgICAgICAoMHgwMDAwNDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX01VTFRJX1BPUlRfRE9NQUlOICAgICAgICAgICAgICAgICgweDAwMDAyMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfVEFCTEVfVE9fU1VCVFJBQ1RJVkVfTElOSyAgICAgICAgKDB4MDAwMDEwMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19VTlNVUFBPUlRFRF9ERVZJQ0UgICAgICAgICAgICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX1RBQkxFX0xJTksgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfU1VCVFJBQ1RJVkVfTElOSyAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19TTVBfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX1NNUF9GVU5DVElPTl9GQUlMRUQgICAgICAgICAgICAgICgweDAwMDAwMDgwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfSU5ERVhfTk9UX0VYSVNUICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19PVVRfUk9VVEVfRU5UUklFUyAgICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX1NNUF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfTVVMVElQTEVfUE9SVFMgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19VTkFERFJFU1NBQkxFX0RFVklDRSAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX0xPT1BfREVURUNURUQgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisKKy8qIFNBUyBJTyBVbml0IFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNfSU9fVU5JVDFfUEhZX0RBVEEKK3sKKyAgICBVOCAgICAgICAgICBQb3J0OyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIFBvcnRGbGFnczsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgUGh5RmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICBNYXhNaW5MaW5rUmF0ZTsgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgIENvbnRyb2xsZXJQaHlEZXZpY2VJbmZvOyAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgTWF4VGFyZ2V0UG9ydENvbm5lY3RUaW1lOyAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworfSBNUEkyX1NBU19JT19VTklUMV9QSFlfREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBU19JT19VTklUMV9QSFlfREFUQSwKKyAgTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3Q7CisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNfSU9VTklUMV9QSFlfTUFYCisjZGVmaW5lIE1QSTJfU0FTX0lPVU5JVDFfUEhZX01BWCAgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzEKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBU05hcnJvd01heFF1ZXVlRGVwdGg7ICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsQ29udHJvbEZsYWdzOyAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FTV2lkZU1heFF1ZXVlRGVwdGg7ICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVRBTWF4UURlcHRoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDExICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0RGV2aWNlTWlzc2luZ0RlbGF5OyAgICAgICAgICAgLyogMHgxMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPRGV2aWNlTWlzc2luZ0RlbGF5OyAgICAgICAgICAgICAgIC8qIDB4MTMgKi8KKyAgICBNUEkyX1NBU19JT19VTklUMV9QSFlfREFUQSAgICAgICAgICBQaHlEYXRhW01QSTJfU0FTX0lPVU5JVDFfUEhZX01BWF07ICAvKiAweDE0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzEsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfMSwKKyAgTXBpMlNhc0lPVW5pdFBhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lPVW5pdFBhZ2UxX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVRQQUdFMV9QQUdFVkVSU0lPTiAgICAgKDB4MDkpCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAxIENvbnRyb2xGbGFncyAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9ERVZJQ0VfU0VMRl9URVNUICAgICAgICAgICAgICAgICAgICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBXzNfMF9NQVggICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBXzFfNV9NQVggICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBX1NXX1BSRVNFUlZFICAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX01BU0tfREVWX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICgweDA2MDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1NISUZUX0RFVl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICg5KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9ERVZfU1VQUE9SVF9CT1RIICAgICAgICAgICAgICAgICAgICAoMHgwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9ERVZfU0FTX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAoMHgxKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9ERVZfU0FUQV9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAoMHgyKQorCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1NBVEFfNDhCSVRfTEJBX1JFUVVJUkVEICAgICAgICAgICAgICgweDAwODApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1NBVEFfU01BUlRfUkVRVUlSRUQgICAgICAgICAgICAgICAgICgweDAwNDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1NBVEFfTkNRX1JFUVVJUkVEICAgICAgICAgICAgICAgICAgICgweDAwMjApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1NBVEFfRlVBX1JFUVVJUkVEICAgICAgICAgICAgICAgICAgICgweDAwMTApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1RBQkxFX1NVQlRSQUNUSVZFX0lMTEVHQUwgICAgICAgICAgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX1NVQlRSQUNUSVZFX0lMTEVHQUwgICAgICAgICAgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX0ZJUlNUX0xWTF9ESVNDX09OTFkgICAgICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9DT05UUk9MX0NMRUFSX0FGRklMSUFUSU9OICAgICAgICAgICAgICAgICAgICgweDAwMDEpCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAxIEFkZGl0aW9uYWxDb250cm9sRmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX01VTFRJX1BPUlRfRE9NQUlOX0lMTEVHQUwgICAgICAgICAgKDB4MDA4MCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX1NBVEFfQVNZTkNIUk9VTk9VU19OT1RJRklDQVRJT04gICAgKDB4MDA0MCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX0lOVkFMSURfVE9QT0xPR1lfQ09SUkVDVElPTiAgICAgICAgKDB4MDAyMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX1BPUlRfRU5BQkxFX09OTFlfU0FUQV9MSU5LX1JFU0VUICAgKDB4MDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX09USEVSX0FGRklMSUFUSU9OX1NBVEFfTElOS19SRVNFVCAgKDB4MDAwOCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX1NFTEZfQUZGSUxJQVRJT05fU0FUQV9MSU5LX1JFU0VUICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX05PX0FGRklMSUFUSU9OX1NBVEFfTElOS19SRVNFVCAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0FDT05UUk9MX0FMTE9XX1RBQkxFX1RPX1RBQkxFICAgICAgICAgICAgICAgKDB4MDAwMSkKKworLyogZGVmaW5lcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAxIFJlcG9ydERldmljZU1pc3NpbmdEZWxheSAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVElNRU9VVF9NQVNLICAgICAgICAgICAgICAgICAoMHg3RikKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX1JFUE9SVF9NSVNTSU5HX1VOSVRfMTYgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAxIFBvcnRGbGFncyAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfUE9SVF9GTEFHU19BVVRPX1BPUlRfQ09ORklHICAgICAgICAgICAgICAgICAoMHgwMSkKKworLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDIgUGh5RmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX1BIWUZMQUdTX1pPTklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9QSFlGTEFHU19QSFlfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICgweDA4KQorCisvKiB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMCBNYXhNaW5MaW5rUmF0ZSAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfTUFYX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX01BWF9SQVRFXzFfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9NQVhfUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDkwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfTUFYX1JBVEVfNl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhBMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX01JTl9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9NSU5fUkFURV8xXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfTUlOX1JBVEVfM18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX01JTl9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEpCisKKy8qIHNlZSBtcGkyX3Nhcy5oIGZvciB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMSBDb250cm9sbGVyUGh5RGV2aWNlSW5mbyB2YWx1ZXMgKi8KKworCisvKiBTQVMgSU8gVW5pdCBQYWdlIDQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTX0lPVU5JVDRfU1BJTlVQX0dST1VQCit7CisgICAgVTggICAgICAgICAgTWF4VGFyZ2V0U3BpbnVwOyAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBTcGludXBEZWxheTsgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfU0FTX0lPVU5JVDRfU1BJTlVQX0dST1VQLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTX0lPVU5JVDRfU1BJTlVQX0dST1VQLAorICBNcGkyU2FzSU9Vbml0NFNwaW51cEdyb3VwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lPVW5pdDRTcGludXBHcm91cF90OworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIGZvdXIgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX1NBU19JT1VOSVQ0X1BIWV9NQVgKKyNkZWZpbmUgTVBJMl9TQVNfSU9VTklUNF9QSFlfTUFYICAgICAgICAoNCkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNAoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIE1QSTJfU0FTX0lPVU5JVDRfU1BJTlVQX0dST1VQICAgICAgIFNwaW51cEdyb3VwUGFyYW1ldGVyc1s0XTsgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3REZXZpY2VXYWl0VGltZTsgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFSW5pdGlhbFNwaW51cERlbGF5OyAgICAgICAgICAgLyogMHgyOSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFUmVwbHlEZWxheTsgICAgICAgICAgICAgICAgICAgLyogMHgyQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyQiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBIWVtNUEkyX1NBU19JT1VOSVQ0X1BIWV9NQVhdOyAgLyogMHgyQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF80LAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzQsCisgIE1waTJTYXNJT1VuaXRQYWdlNF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXRQYWdlNF90OworCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUUEFHRTRfUEFHRVZFUlNJT04gICAgICgweDAyKQorCisvKiBkZWZpbmVzIGZvciBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDRfRkxBR1NfQVVUT19QT1JURU5BQkxFICAgICAgICAgICAgICAgKDB4MDEpCisKKy8qIGRlZmluZXMgZm9yIFBIWSBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDRfUEhZX1NQSU5VUF9HUk9VUF9NQVNLICAgICAgICAgICAgICAgKDB4MDMpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBTQVMgRXhwYW5kZXIgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQVMgRXhwYW5kZXIgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0R2VuTGVuZ3RoOyAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmVIYW5kbGU7ICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBU0FkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXJ5U3RhdHVzOyAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmVudERldkhhbmRsZTsgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXJDaGFuZ2VDb3VudDsgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlclJvdXRlSW5kZXhlczsgICAgICAgLyogMHgxRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FTTGV2ZWw7ICAgICAgICAgICAgICAgICAgIC8qIDB4MjEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyMiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUEJ1c0luYWN0aXZpdHlUaW1lTGltaXQ7ICAvKiAweDI0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RQTWF4Q29ubmVjdFRpbWVMaW1pdDsgICAgIC8qIDB4MjYgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFBfU01QX05leHVzTG9zc1RpbWU7ICAgICAgLyogMHgyOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heE51bVJvdXRlZFNhc0FkZHJlc3NlczsgICAvKiAweDJBICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlWm9uZU1hbmFnZXJTQVNBZGRyZXNzOy8qIDB4MkMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lTG9ja0luYWN0aXZpdHlMaW1pdDsgICAgLyogMHgzNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDM2ICovCit9IE1QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAsCisgIE1waTJFeHBhbmRlclBhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV4cGFuZGVyUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTiAgICAgICAoMHgwNSkKKworLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAwIERpc2NvdmVyeVN0YXR1cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTUFYX0VOQ0xPU1VSRVNfRVhDRUVEICAgICAgICAgKDB4ODAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NQVhfRVhQQU5ERVJTX0VYQ0VFRCAgICAgICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX01BWF9ERVZJQ0VTX0VYQ0VFRCAgICAgICAgICAgICgweDIwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTUFYX1RPUE9fUEhZU19FWENFRUQgICAgICAgICAgKDB4MTAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19ET1dOU1RSRUFNX0lOSVRJQVRPUiAgICAgICAgICAoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX01VTFRJX1NVQlRSQUNUSVZFX1NVQlRSQUNUSVZFICgweDAwMDA4MDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfRVhQX01VTFRJX1NVQlRSQUNUSVZFICAgICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NVUxUSV9QT1JUX0RPTUFJTiAgICAgICAgICAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX1RBQkxFX1RPX1NVQlRSQUNUSVZFX0xJTksgICAgICgweDAwMDAxMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfVU5TVVBQT1JURURfREVWSUNFICAgICAgICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19UQUJMRV9MSU5LICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX1NVQlRSQUNUSVZFX0xJTksgICAgICAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfU01QX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19TTVBfRlVOQ1RJT05fRkFJTEVEICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX0lOREVYX05PVF9FWElTVCAgICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfT1VUX1JPVVRFX0VOVFJJRVMgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19TTVBfVElNRU9VVCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX01VTFRJUExFX1BPUlRTICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfVU5BRERSRVNTQUJMRV9ERVZJQ0UgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19MT09QX0RFVEVDVEVEICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAwIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19aT05FX0xPQ0tFRCAgICAgICAgICAgICAgICAoMHgxMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfU1VQUE9SVEVEX1BIWVNJQ0FMX1BSRVMgICAgKDB4MDgwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX0FTU0VSVEVEX1BIWVNJQ0FMX1BSRVMgICAgICgweDA0MDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19aT05JTkdfU1VQUE9SVCAgICAgICAgICAgICAoMHgwMjAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfRU5BQkxFRF9aT05JTkcgICAgICAgICAgICAgKDB4MDEwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1RBQkxFX1RPX1RBQkxFX1NVUFBPUlQgICAgICgweDAwODApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19DT05ORUNUT1JfRU5EX0RFVklDRSAgICAgICAoMHgwMDEwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfT1RIRVJTX0NPTkZJRyAgICAgICAgICAgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX0NPTkZJR19JTl9QUk9HUkVTUyAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19ST1VURV9UQUJMRV9DT05GSUcgICAgICAgICAoMHgwMDAxKQorCisKKy8qIFNBUyBFeHBhbmRlciBQYWdlIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMQoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5czsgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVRhYmxlRW50cmllc1Byb2dyYW1tZWQ7ICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbW1lZExpbmtSYXRlOyAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBId0xpbmtSYXRlOyAgICAgICAgICAgICAgICAgLyogMHgxMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDEyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5SW5mbzsgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hlZERldmljZUluZm87ICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDFDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQ291bnQ7ICAgICAgICAgICAgICAgIC8qIDB4MUUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZWdvdGlhdGVkTGlua1JhdGU7ICAgICAgICAgLyogMHgxRiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeUlkZW50aWZpZXI7ICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWRQaHlJZGVudGlmaWVyOyAgICAgIC8qIDB4MjEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgyMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVyeUluZm87ICAgICAgICAgICAgICAvKiAweDIzICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWRQaHlJbmZvOyAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lR3JvdXA7ICAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGZDb25maWdTdGF0dXM7ICAgICAgICAgICAvKiAweDI5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MkEgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8xLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMSwKKyAgTXBpMkV4cGFuZGVyUGFnZTFfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXhwYW5kZXJQYWdlMV90OworCisjZGVmaW5lIE1QSTJfU0FTRVhQQU5ERVIxX1BBR0VWRVJTSU9OICAgICAgICgweDAyKQorCisvKiB1c2UgTVBJMl9TQVNfUFJBVEVfIGRlZmluZXMgZm9yIHRoZSBQcm9ncmFtbWVkTGlua1JhdGUgZmllbGQgKi8KKworLyogdXNlIE1QSTJfU0FTX0hXUkFURV8gZGVmaW5lcyBmb3IgdGhlIEh3TGlua1JhdGUgZmllbGQgKi8KKworLyogdXNlIE1QSTJfU0FTX1BIWUlORk9fIGZvciB0aGUgUGh5SW5mbyBmaWVsZCAqLworCisvKiBzZWUgbXBpMl9zYXMuaCBmb3IgdGhlIE1QSTJfU0FTX0RFVklDRV9JTkZPXyBkZWZpbmVzIHVzZWQgZm9yIHRoZSBBdHRhY2hlZERldmljZUluZm8gZmllbGQgKi8KKworLyogdXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfIGRlZmluZXMgZm9yIHRoZSBOZWdvdGlhdGVkTGlua1JhdGUgZmllbGQgKi8KKworLyogdXNlIE1QSTJfU0FTX0FQSFlJTkZPXyBkZWZpbmVzIGZvciBBdHRhY2hlZFBoeUluZm8gZmllbGQgKi8KKworLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAxIERpc2NvdmVyeUluZm8gZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIxX0RJU0NJTkZPX0JBRF9QSFlfRElTQUJMRUQgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMV9ESVNDSU5GT19MSU5LX1NUQVRVU19DSEFOR0UgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjFfRElTQ0lORk9fTk9fUk9VVElOR19FTlRSSUVTICAoMHgwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFNBUyBEZXZpY2UgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQVMgRGV2aWNlIFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzAKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvdDsgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZUhhbmRsZTsgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyZW50RGV2SGFuZGxlOyAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeU51bTsgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NTdGF0dXM7ICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkUGh5SWRlbnRpZmllcjsgIC8qIDB4MUEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lR3JvdXA7ICAgICAgICAgICAgICAvKiAweDFCICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5mbzsgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAvKiAweDIyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UG9ydENvbm5lY3Rpb25zOyAgICAgLyogMHgyMyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZU5hbWU7ICAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0R3JvdXBzOyAgICAgICAgICAgICAvKiAweDJDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG1hR3JvdXA7ICAgICAgICAgICAgICAgLyogMHgyRCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xHcm91cDsgICAgICAgICAgIC8qIDB4MkUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAvKiAweDJGICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMHgzMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgIC8qIDB4MzQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzAsCisgIE1waTJTYXNEZXZpY2VQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNEZXZpY2VQYWdlMF90OworCisjZGVmaW5lIE1QSTJfU0FTREVWSUNFMF9QQUdFVkVSU0lPTiAgICAgICAgICgweDA4KQorCisvKiB2YWx1ZXMgZm9yIFNBUyBEZXZpY2UgUGFnZSAwIEFjY2Vzc1N0YXR1cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfTk9fRVJST1JTICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TQVRBX0lOSVRfRkFJTEVEICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NBVEFfQ0FQQUJJTElUWV9GQUlMRUQgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0FUQV9BRkZJTElBVElPTl9DT05GTElDVCAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TQVRBX05FRURTX0lOSVRJQUxJWkFUSU9OICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1JPVVRFX05PVF9BRERSRVNTQUJMRSAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU01QX0VSUk9SX05PVF9BRERSRVNTQUJMRSAgKDB4MDYpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19ERVZJQ0VfQkxPQ0tFRCAgICAgICAgICAgICAoMHgwNykKKy8qIHNwZWNpZmljIHZhbHVlcyBmb3IgU0FUQSBJbml0IGZhaWx1cmVzICovCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfVU5LTk9XTiAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9BRkZJTElBVElPTl9DT05GTElDVCAgICgweDExKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX0RJQUcgICAgICAgICAgICAgICAgICAgKDB4MTIpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfSURFTlRJRklDQVRJT04gICAgICAgICAoMHgxMykKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9DSEVDS19QT1dFUiAgICAgICAgICAgICgweDE0KQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX1BJT19TTiAgICAgICAgICAgICAgICAgKDB4MTUpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfTURNQV9TTiAgICAgICAgICAgICAgICAoMHgxNikKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9VRE1BX1NOICAgICAgICAgICAgICAgICgweDE3KQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX1pPTklOR19WSU9MQVRJT04gICAgICAgKDB4MTgpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfTk9UX0FERFJFU1NBQkxFICAgICAgICAoMHgxOSkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9NQVggICAgICAgICAgICAgICAgICAgICgweDFGKQorCisvKiBzZWUgbXBpMl9zYXMuaCBmb3IgdmFsdWVzIGZvciBTQVMgRGV2aWNlIFBhZ2UgMCBEZXZpY2VJbmZvIHZhbHVlcyAqLworCisvKiB2YWx1ZXMgZm9yIFNBUyBEZXZpY2UgUGFnZSAwIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9BU1lOQ0hST05PVVNfTk9USUZZICAgICAoMHgwNDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfU1dfUFJFU0VSVkUgICAgICAgICAgICAgKDB4MDIwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19VTlNVUFBPUlRFRF9ERVZJQ0UgICAgICAgICAgICgweDAxMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV80OEJJVF9MQkFfU1VQUE9SVEVEICAgICAoMHgwMDgwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfU01BUlRfU1VQUE9SVEVEICAgICAgICAgKDB4MDA0MCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX05DUV9TVVBQT1JURUQgICAgICAgICAgICgweDAwMjApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9GVUFfU1VQUE9SVEVEICAgICAgICAgICAoMHgwMDEwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1BPUlRfU0VMRUNUT1JfQVRUQUNIICAgICAgICAgKDB4MDAwOCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19ERVZJQ0VfUFJFU0VOVCAgICAgICAgICAgICAgICgweDAwMDEpCisKKworLyogU0FTIERldmljZSBQYWdlIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX0RFVl8xCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbFJlZ0RldmljZUZJU1syMF07LyogMHgxQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19ERVZfMSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19ERVZfMSwKKyAgTXBpMlNhc0RldmljZVBhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0RldmljZVBhZ2UxX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNERVZJQ0UxX1BBR0VWRVJTSU9OICAgICAgICAgKDB4MDEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBTQVMgUEhZIENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0FTIFBIWSBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93bmVyRGV2SGFuZGxlOyAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWREZXZIYW5kbGU7ICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkUGh5SWRlbnRpZmllcjsgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAvKiAweDBGICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWRQaHlJbmZvOyAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1tZWRMaW5rUmF0ZTsgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBId0xpbmtSYXRlOyAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQ291bnQ7ICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlJbmZvOyAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVnb3RpYXRlZExpbmtSYXRlOyAgICAgLyogMHgxQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgIC8qIDB4MUQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAvKiAweDFFICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8wLAorICBNcGkyU2FzUGh5UGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5UGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1NBU1BIWTBfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMykKKworLyogdXNlIE1QSTJfU0FTX1BSQVRFXyBkZWZpbmVzIGZvciB0aGUgUHJvZ3JhbW1lZExpbmtSYXRlIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19IV1JBVEVfIGRlZmluZXMgZm9yIHRoZSBId0xpbmtSYXRlIGZpZWxkICovCisKKy8qIHZhbHVlcyBmb3IgU0FTIFBIWSBQYWdlIDAgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfUEhZMF9GTEFHU19TR1BJT19ESVJFQ1RfQVRUQUNIX0VOQyAgICAgICAgICAgICAoMHgwMSkKKworLyogdXNlIE1QSTJfU0FTX0FQSFlJTkZPXyBkZWZpbmVzIGZvciBBdHRhY2hlZFBoeUluZm8gZmllbGQgKi8KKworLyogdXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfIGRlZmluZXMgZm9yIHRoZSBOZWdvdGlhdGVkTGlua1JhdGUgZmllbGQgKi8KKworLyogdXNlIE1QSTJfU0FTX1BIWUlORk9fIGZvciB0aGUgUGh5SW5mbyBmaWVsZCAqLworCisKKy8qIFNBUyBQSFkgUGFnZSAxICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMQoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhbGlkRHdvcmRDb3VudDsgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmdEaXNwYXJpdHlFcnJvckNvdW50OyAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9zc0R3b3JkU3luY2hDb3VudDsgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlSZXNldFByb2JsZW1Db3VudDsgICAgICAgLyogMHgxOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMSwKKyAgTXBpMlNhc1BoeVBhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2UxX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFkxX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBTQVMgUG9ydCBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNBUyBQb3J0IFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUE9SVF8wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0TnVtYmVyOyAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydFdpZHRoOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnRXaWR0aDsgICAgICAgICAgLyogMHgwQiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvbmVHcm91cDsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBU0FkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDIwICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BPUlRfMCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QT1JUXzAsCisgIE1waTJTYXNQb3J0UGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUG9ydFBhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQT1JUMF9QQUdFVkVSU0lPTiAgICAgICAgICAgKDB4MDApCisKKy8qIHNlZSBtcGkyX3Nhcy5oIGZvciB2YWx1ZXMgZm9yIFNBUyBQb3J0IFBhZ2UgMCBEZXZpY2VJbmZvIHZhbHVlcyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgU0FTIEVuY2xvc3VyZSBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNBUyBFbmNsb3N1cmUgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19FTkNMT1NVUkVfMAoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmVMb2dpY2FsSUQ7ICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1TbG90czsgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0U2xvdDsgICAgICAgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgLyogMHgxRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MjQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAsCisgIE1waTJTYXNFbmNsb3N1cmVQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNFbmNsb3N1cmVQYWdlMF90OworCisjZGVmaW5lIE1QSTJfU0FTRU5DTE9TVVJFMF9QQUdFVkVSU0lPTiAgICAgICgweDAzKQorCisvKiB2YWx1ZXMgZm9yIFNBUyBFbmNsb3N1cmUgUGFnZSAwIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19NTkdfTUFTSyAgICAgICAgICAgICAgKDB4MDAwRikKKyNkZWZpbmUgTVBJMl9TQVNfRU5DTFMwX0ZMQUdTX01OR19VTktOT1dOICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FTkNMUzBfRkxBR1NfTU5HX0lPQ19TRVMgICAgICAgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19NTkdfSU9DX1NHUElPICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9TQVNfRU5DTFMwX0ZMQUdTX01OR19FWFBfU0dQSU8gICAgICAgICAoMHgwMDAzKQorI2RlZmluZSBNUEkyX1NBU19FTkNMUzBfRkxBR1NfTU5HX1NFU19FTkNMT1NVUkUgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19NTkdfSU9DX0dQSU8gICAgICAgICAgKDB4MDAwNSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIExvZyBDb25maWcgUGFnZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTG9nIFBhZ2UgMCAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfTE9HXzBfTlVNX0xPR19FTlRSSUVTCisjZGVmaW5lIE1QSTJfTE9HXzBfTlVNX0xPR19FTlRSSUVTICAgICAgICAgICgxKQorI2VuZGlmCisKKyNkZWZpbmUgTVBJMl9MT0dfMF9MT0dfREFUQV9MRU5HVEggICAgICAgICAgKDB4MUMpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0xPR18wX0VOVFJZCit7CisgICAgVTY0ICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICBMb2dTZXF1ZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgTG9nRW50cnlRdWFsaWZpZXI7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDExICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMiAqLworICAgIFU4ICAgICAgICAgIExvZ0RhdGFbTVBJMl9MT0dfMF9MT0dfREFUQV9MRU5HVEhdOy8qIDB4MTQgKi8KK30gTVBJMl9MT0dfMF9FTlRSWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0xPR18wX0VOVFJZLAorICBNcGkyTG9nMEVudHJ5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkxvZzBFbnRyeV90OworCisvKiB2YWx1ZXMgZm9yIExvZyBQYWdlIDAgTG9nRW50cnkgTG9nRW50cnlRdWFsaWZpZXIgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9MT0dfMF9FTlRSWV9RVUFMX0VOVFJZX1VOVVNFRCAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0xPR18wX0VOVFJZX1FVQUxfUE9XRVJfT05fUkVTRVQgICAgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfTE9HXzBfRU5UUllfUVVBTF9USU1FU1RBTVBfVVBEQVRFICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9MT0dfMF9FTlRSWV9RVUFMX01JTl9JTVBMRU1FTlRfU1BFQyAgICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX0xPR18wX0VOVFJZX1FVQUxfTUFYX0lNUExFTUVOVF9TUEVDICAgICgweEZGRkYpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0xPR18wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtTG9nRW50cmllczsgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgxMiAqLworICAgIE1QSTJfTE9HXzBfRU5UUlkgICAgICAgICAgICAgICAgICAgIExvZ0VudHJ5W01QSTJfTE9HXzBfTlVNX0xPR19FTlRSSUVTXTsgLyogMHgxNCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0xPR18wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTE9HXzAsCisgIE1waTJMb2dQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJMb2dQYWdlMF90OworCisjZGVmaW5lIE1QSTJfTE9HXzBfUEFHRVZFUlNJT04gICAgICAgICAgICAgICgweDAyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgUkFJRCBDb25maWcgUGFnZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUkFJRCBQYWdlIDAgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX1JBSURDT05GSUcwX01BWF9FTEVNRU5UUworI2RlZmluZSBNUEkyX1JBSURDT05GSUcwX01BWF9FTEVNRU5UUyAgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEQ09ORklHMF9DT05GSUdfRUxFTUVOVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVm9sRGV2SGFuZGxlOyAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBIb3RTcGFyZVBvb2w7ICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOyAgICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9SQUlEQ09ORklHMF9DT05GSUdfRUxFTUVOVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURDT05GSUcwX0NPTkZJR19FTEVNRU5ULAorICBNcGkyUmFpZENvbmZpZzBDb25maWdFbGVtZW50X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRDb25maWcwQ29uZmlnRWxlbWVudF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBFbGVtZW50RmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfTUFTS19FTEVNRU5UX1RZUEUgICAgICAgKDB4MDAwRikKKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfVk9MVU1FX0VMRU1FTlQgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfVk9MX1BIWVNfRElTS19FTEVNRU5UICAgKDB4MDAwMSkKKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfSE9UX1NQQVJFX0VMRU1FTlQgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfT0NFX0VMRU1FTlQgICAgICAgICAgICAgKDB4MDAwMykKKworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9SQUlEX0NPTkZJR1VSQVRJT05fMAoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtSG90U3BhcmVzOyAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzRGlza3M7ICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVZvbHVtZXM7ICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnTnVtOyAgICAgICAgICAgICAgICAgIC8qIDB4MEIgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0dVSURbMjRdOyAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1FbGVtZW50czsgICAgICAgICAgICAgICAgLyogMHgyQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDJEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MkUgKi8KKyAgICBNUEkyX1JBSURDT05GSUcwX0NPTkZJR19FTEVNRU5UICAgICBDb25maWdFbGVtZW50W01QSTJfUkFJRENPTkZJRzBfTUFYX0VMRU1FTlRTXTsgLyogMHgzMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1JBSURfQ09ORklHVVJBVElPTl8wLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfUkFJRF9DT05GSUdVUkFUSU9OXzAsCisgIE1waTJSYWlkQ29uZmlndXJhdGlvblBhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRDb25maWd1cmF0aW9uUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1JBSURDT05GSUcwX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKy8qIHZhbHVlcyBmb3IgUkFJRCBDb25maWd1cmF0aW9uIFBhZ2UgMCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURDT05GSUcwX0ZMQUdfRk9SRUlHTl9DT05GSUcgICAgICAgICgweDAwMDAwMDAxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRHJpdmVyIFBlcnNpc3RlbnQgTWFwcGluZyBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERyaXZlciBQZXJzaXN0ZW50IE1hcHBpbmcgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVAwX0VOVFJZCit7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxJZGVudGlmaWVyOyAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSW5mb3JtYXRpb247ICAgICAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUluZGV4OyAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxCaXRzTWFwcGluZzsgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVAwX0VOVFJZLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfRFJJVkVSX01BUDBfRU5UUlksCisgIE1waTJEcml2ZXJNYXAwRW50cnlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRHJpdmVyTWFwMEVudHJ5X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVBQSU5HXzAKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIE1QSTJfQ09ORklHX1BBR0VfRFJJVkVSX01BUDBfRU5UUlkgIEVudHJ5OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfRFJJVkVSX01BUFBJTkdfMCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVBQSU5HXzAsCisgIE1waTJEcml2ZXJNYXBwaW5nUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRHJpdmVyTWFwcGluZ1BhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9EUklWRVJNQVBQSU5HMF9QQUdFVkVSU0lPTiAgICAgICAgICgweDAwKQorCisvKiB2YWx1ZXMgZm9yIERyaXZlciBQZXJzaXN0ZW50IE1hcHBpbmcgUGFnZSAwIE1hcHBpbmdJbmZvcm1hdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX0RSVk1BUDBfTUFQSU5GT19TTE9UX01BU0sgICAgICAgICAgICAgICgweDA3RjApCisjZGVmaW5lIE1QSTJfRFJWTUFQMF9NQVBJTkZPX1NMT1RfU0hJRlQgICAgICAgICAgICAgKDQpCisjZGVmaW5lIE1QSTJfRFJWTUFQMF9NQVBJTkZPX01JU1NJTkdfTUFTSyAgICAgICAgICAgKDB4MDAwRikKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTE1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggTFNJIENvcnBvcmF0aW9uLgorICoKKyAqCisgKiAgICAgICAgICAgTmFtZTogIG1waTJfaW5pdC5oCisgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCisgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKKyAqCisgKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDYKKyAqCisgKiAgVmVyc2lvbiBIaXN0b3J5CisgKiAgLS0tLS0tLS0tLS0tLS0tCisgKgorICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KKyAqICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDEgIEZpeGVkIG5hbWUgZm9yIHBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90LgorICogIDEyLTE4LTA3ICAwMi4wMC4wMiAgTW9kaWZpZWQgVGFzayBNYW5hZ2VtZW50IFRhcmdldCBSZXNldCBNZXRob2QgZGVmaW5lcy4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDMgIEFkZGVkIFF1ZXJ5IFRhc2sgU2V0IGFuZCBRdWVyeSBVbml0IEF0dGVudGlvbi4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDQgIEZpeGVkIG5hbWUgb2Ygc3RydWN0IF9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA1ICBGaXhlZCB0eXBvIGluIG5hbWUgb2YgTXBpMlNlcFJlcXVlc3RfdC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDYgIFJlbW92ZWQgVW50YWdnZWQgYW5kIE5vIERpc2Nvbm5lY3QgdmFsdWVzIGZyb20gU0NTSSBJTworICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBmaWVsZCBUYXNrIEF0dHJpYnV0ZSBmbGFncy4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIHRvIG1waTIuaCBiZWNhc3VlIHRoZXkgYXJlCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBNUEkyX0lOSVRfSAorI2RlZmluZSBNUEkyX0lOSVRfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgICAgICAgICBTQ1NJIEluaXRpYXRvciBNZXNzYWdlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTQ1NJIElPIG1lc3NhZ2VzIGFuZCBhc3NvY2lhdGVkIHN0cnVjdHVyZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ0RCWzIwXTsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5UmVmZXJlbmNlVGFnOyAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlBcHBsaWNhdGlvblRhZzsgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeUFwcGxpY2F0aW9uVGFnTWFzazsgIC8qIDB4MUEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsgICAgICAgICAgICAgLyogMHgxQyAqLworfSBNUEkyX1NDU0lfSU9fQ0RCX0VFRFAzMiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fQ0RCX0VFRFAzMiwKKyAgTXBpMlNjc2lJb0NkYkVlZHAzMl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW9DZGJFZWRwMzJfdDsKKworLyogVEJEOiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgbmVlZGVkIGZvciBNUEkyL0dlbjIgKi8KKyNpZiAwCit0eXBlZGVmIHN0cnVjdAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENEQlsxNl07ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5UmVmZXJlbmNlVGFnOyAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlBcHBsaWNhdGlvblRhZzsgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeUFwcGxpY2F0aW9uVGFnTWFzazsgIC8qIDB4MUEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsgICAgICAgICAgICAgLyogMHgxQyAqLworfSBNUEkyX1NDU0lfSU8zMl9DREJfRUVEUDE2LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JTzMyX0NEQl9FRURQMTYsCisgIE1waTJTY3NpSW8zMkNkYkVlZHAxNl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW8zMkNkYkVlZHAxNl90OworI2VuZGlmCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDREIzMlszMl07CisgICAgTVBJMl9TQ1NJX0lPX0NEQl9FRURQMzIgRUVEUDMyOworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNHRTsKK30gTVBJMl9TQ1NJX0lPX0NEQl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fQ0RCX1VOSU9OLAorICBNcGkyU2NzaUlvQ2RiX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNjc2lJb0NkYl90OworCisvKiBTQ1NJIElPIFJlcXVlc3QgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2Vuc2VCdWZmZXJMb3dBZGRyZXNzOyAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU2Vuc2VCdWZmZXJMZW5ndGg7ICAgICAgICAgICAgICAvKiAweDEyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMT2Zmc2V0MDsgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMT2Zmc2V0MTsgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMT2Zmc2V0MjsgICAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMT2Zmc2V0MzsgICAgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2tpcENvdW50OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQmlkaXJlY3Rpb25hbERhdGFMZW5ndGg7ICAgICAgICAvKiAweDIwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSW9GbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRUVEUEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDI2ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRUVEUEJsb2NrU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2Vjb25kYXJ5UmVmZXJlbmNlVGFnOyAgICAgICAgICAvKiAweDJDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU2Vjb25kYXJ5QXBwbGljYXRpb25UYWc7ICAgICAgICAvKiAweDMwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25UYWdUcmFuc2xhdGlvbk1hc2s7ICAvKiAweDMyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTFVOWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDM0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQ29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgTVBJMl9TQ1NJX0lPX0NEQl9VTklPTiAgQ0RCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDQwICovCisgICAgTVBJMl9TR0VfSU9fVU5JT04gICAgICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDYwICovCit9IE1QSTJfU0NTSV9JT19SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JT19SRVFVRVNULAorICBNcGkyU0NTSUlPUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJTQ1NJSU9SZXF1ZXN0X3Q7CisKKy8qIFNDU0kgSU8gTXNnRmxhZ3MgYml0cyAqLworCisvKiBNc2dGbGFncyBmb3IgU2Vuc2VCdWZmZXJBZGRyZXNzU3BhY2UgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJSU9fTVNHRkxBR1NfTUFTS19TRU5TRV9BRERSICAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fTVNHRkxBR1NfU1lTVEVNX1NFTlNFX0FERFIgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fTVNHRkxBR1NfSU9DRERSX1NFTlNFX0FERFIgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fTVNHRkxBR1NfSU9DUExCX1NFTlNFX0FERFIgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fTVNHRkxBR1NfSU9DUExCTlRBX1NFTlNFX0FERFIgICAoMHgwQykKKworLyogU0NTSSBJTyBTR0xGbGFncyBiaXRzICovCisKKy8qIGJhc2UgdmFsdWVzIGZvciBEYXRhIExvY2F0aW9uIEFkZHJlc3MgU3BhY2UgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfQUREUl9NQVNLICAgICAgICAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU1lTVEVNX0FERFIgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfSU9DRERSX0FERFIgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfSU9DUExCX0FERFIgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfSU9DUExCTlRBX0FERFIgICAgICAgICAoMHgwQykKKworLyogYmFzZSB2YWx1ZXMgZm9yIFR5cGUgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9NQVNLICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9NUEkgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9JRUVFMzIgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9JRUVFNjQgICAgICAgICAgICAoMHgwMikKKworLyogc2hpZnQgdmFsdWVzIGZvciBlYWNoIHN1Yi1maWVsZCAqLworI2RlZmluZSBNUEkyX1NDU0lJT19TR0xGTEFHU19TR0wzX1NISUZUICAgICAgICAgICAgICgxMikKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU0dMMl9TSElGVCAgICAgICAgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU0dMMV9TSElGVCAgICAgICAgICAgICAoNCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU0dMMF9TSElGVCAgICAgICAgICAgICAoMCkKKworLyogU0NTSSBJTyBJb0ZsYWdzIGJpdHMgKi8KKworLyogTGFyZ2UgQ0RCIEFkZHJlc3MgU3BhY2UgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ0RCX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg2MDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DREJfQUREUl9TWVNURU0gICAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NEQl9BRERSX0lPQ0REUiAgICAgICAgICAgICAgICAgKDB4MjAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ0RCX0FERFJfSU9DUExCICAgICAgICAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DREJfQUREUl9JT0NQTEJOVEEgICAgICAgICAgICAgICgweDYwMDApCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fSU9GTEFHU19MQVJHRV9DREIgICAgICAgICAgICAgICAoMHgxMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19JT0ZMQUdTX0JJRElSRUNUSU9OQUwgICAgICAgICAgICgweDA4MDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0lPRkxBR1NfTVVMVElDQVNUICAgICAgICAgICAgICAgKDB4MDQwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fSU9GTEFHU19DTURfREVURVJNSU5FU19EQVRBX0RJUiAoMHgwMjAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19JT0ZMQUdTX0NEQkxFTkdUSF9NQVNLICAgICAgICAgICgweDAxRkYpCisKKy8qIFNDU0kgSU8gRUVEUEZsYWdzIGJpdHMgKi8KKworI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfSU5DX1BSSV9SRUZUQUcgICAgICAgICgweDgwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTkNfU0VDX1JFRlRBRyAgICAgICAgKDB4NDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfQVBQVEFHICAgICAgICAoMHgyMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfSU5DX1NFQ19BUFBUQUcgICAgICAgICgweDEwMDApCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFRlRBRyAgICAgICAgICAoMHgwNDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfQVBQVEFHICAgICAgICAgICgweDAyMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19HVUFSRCAgICAgICAgICAgKDB4MDEwMCkKKworI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfUEFTU1RIUlVfUkVGVEFHICAgICAgICgweDAwMDgpCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX01BU0tfT1AgICAgICAgICAgICAgICAoMHgwMDA3KQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfTk9PUF9PUCAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19PUCAgICAgICAgICAgICAgKDB4MDAwMSkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX1NUUklQX09QICAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfUkVNT1ZFX09QICAgICAgICgweDAwMDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTlNFUlRfT1AgICAgICAgICAgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX1JFUExBQ0VfT1AgICAgICAgICAgICAoMHgwMDA2KQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfUkVHRU5fT1AgICAgICAgICgweDAwMDcpCisKKy8qIFNDU0kgSU8gTFVOIGZpZWxkczogdXNlIE1QSTJfTFVOXyBmcm9tIG1waTIuaCAqLworCisvKiBTQ1NJIElPIENvbnRyb2wgYml0cyAqLworI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX0FERENEQkxFTl9NQVNLICAgICAgKDB4RkMwMDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfQUREQ0RCTEVOX1NISUZUICAgICAoMjYpCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9EQVRBRElSRUNUSU9OX01BU0sgICgweDAzMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfV1JJVEUgICAgICAgICAgICAgICAoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9SRUFEICAgICAgICAgICAgICAgICgweDAyMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX0JJRElSRUNUSU9OQUwgICAgICAgKDB4MDMwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9UQVNLUFJJX01BU0sgICAgICAgICgweDAwMDA3ODAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1RBU0tQUklfU0hJRlQgICAgICAgKDExKQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfVEFTS0FUVFJJQlVURV9NQVNLICAoMHgwMDAwMDcwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9TSU1QTEVRICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX0hFQURPRlEgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfT1JERVJFRFEgICAgICAgICAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9BQ0FRICAgICAgICAgICAgICAgICgweDAwMDAwNDAwKQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfVExSX01BU0sgICAgICAgICAgICAoMHgwMDAwMDBDMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9OT19UTFIgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTiAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfVExSX09GRiAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKworCisvKiBTQ1NJIElPIEVycm9yIFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fUkVQTFkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTQ1NJU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTQ1NJU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlckNvdW50OyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTZW5zZUNvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZUluZm87ICAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUYXNrVGFnOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjIgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBCaWRpcmVjdGlvbmFsVHJhbnNmZXJDb3VudDsgICAgIC8qIDB4MjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MkMgKi8KK30gTVBJMl9TQ1NJX0lPX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JT19SRVBMWSwKKyAgTXBpMlNDU0lJT1JlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lJT1JlcGx5X3Q7CisKKy8qIFNDU0kgSU8gUmVwbHkgU0NTSVN0YXR1cyB2YWx1ZXMgKFNBTS00IHN0YXR1cyBjb2RlcykgKi8KKworI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX0dPT0QgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19DT05ESVRJT05fTUVUICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19JTlRFUk1FRElBVEVfQ09ORE1FVCAgICgweDE0KQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX1JFU0VSVkFUSU9OX0NPTkZMSUNUICAgKDB4MTgpCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfQ09NTUFORF9URVJNSU5BVEVEICAgICAoMHgyMikgLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19UQVNLX1NFVF9GVUxMICAgICAgICAgICgweDI4KQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX0FDQV9BQ1RJVkUgICAgICAgICAgICAgKDB4MzApCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfVEFTS19BQk9SVEVEICAgICAgICAgICAoMHg0MCkKKworLyogU0NTSSBJTyBSZXBseSBTQ1NJU3RhdGUgZmxhZ3MgKi8KKworI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfUkVTUE9OU0VfSU5GT19WQUxJRCAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFURV9URVJNSU5BVEVEICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX05PX1NDU0lfU1RBVFVTICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX0ZBSUxFRCAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQgICAgICAgICAoMHgwMSkKKworI2RlZmluZSBNUEkyX1NDU0lfVEFTS1RBR19VTktOT1dOICAgICAgICAgICAgICAgKDB4RkZGRikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0NTSSBUYXNrIE1hbmFnZW1lbnQgbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNDU0kgVGFzayBNYW5hZ2VtZW50IFJlcXVlc3QgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVGFza1R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTFVOWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0WzddOyAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVGFza01JRDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDMwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDMyICovCit9IE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVFVRVNULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVFVRVNULAorICBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90LAorICBNUEkyX1BPSU5URVIgcE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3Q7CisKKy8qIFRhc2tUeXBlIHZhbHVlcyAqLworCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCT1JUX1RBU0sgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQlJUX1RBU0tfU0VUICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VUICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0xPR0lDQUxfVU5JVF9SRVNFVCAgICgweDA1KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9DTEVBUl9UQVNLX1NFVCAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSyAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0NMUl9BQ0EgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfVEFTS19TRVQgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1VOSVRfQVRURU5USU9OICAgKDB4MEEpCisKKy8qIE1zZ0ZsYWdzIGJpdHMgKi8KKworI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9NU0dGTEFHU19NQVNLX1RBUkdFVF9SRVNFVCAgICAoMHgxOCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfTVNHRkxBR1NfTElOS19SRVNFVCAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX01TR0ZMQUdTX05FWFVTX1JFU0VUX1NSU1QgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9NU0dGTEFHU19TQVNfSEFSRF9MSU5LX1JFU0VUICAoMHgxMCkKKworI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9NU0dGTEFHU19ET19OT1RfU0VORF9UQVNLX0lVICAoMHgwMSkKKworCisKKy8qIFNDU0kgVGFzayBNYW5hZ2VtZW50IFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZUNvZGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUYXNrVHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbkNvdW50OyAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSwKKyAgTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lNYW5hZ2VtZW50UmVwbHlfdDsKKworLyogUmVzcG9uc2VDb2RlIHZhbHVlcyAqLworCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9DT01QTEVURSAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRSAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX05PVF9TVVBQT1JURUQgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9GQUlMRUQgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0lOVkFMSURfTFVOICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JT19RVUVVRURfT05fSU9DICAgICAgICAgICgweDgwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTQ1NJIEVuY2xvc3VyZSBQcm9jZXNzb3IgbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNDU0kgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NFUF9SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAvKiAweDAzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2xvdFN0YXR1czsgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU2xvdDsgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAvKiAweDFFICovCit9IE1QSTJfU0VQX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TRVBfUkVRVUVTVCwKKyAgTXBpMlNlcFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2VwUmVxdWVzdF90OworCisvKiBBY3Rpb24gZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1NFUF9SRVFfQUNUSU9OX1dSSVRFX1NUQVRVUyAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX0FDVElPTl9SRUFEX1NUQVRVUyAgICAgICAgICAgICAgICAgKDB4MDEpCisKKy8qIEZsYWdzIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9TRVBfUkVRX0ZMQUdTX0RFVkhBTkRMRV9BRERSRVNTICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9GTEFHU19FTkNMT1NVUkVfU0xPVF9BRERSRVNTICAgICAgICgweDAxKQorCisvKiBTbG90U3RhdHVzIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfUkVRVUVTVF9SRU1PVkUgICAgICAgICAgKDB4MDAwNDAwMDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0lERU5USUZZX1JFUVVFU1QgICAgICAgICgweDAwMDIwMDAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19SRUJVSUxEX1NUT1BQRUQgICAgICAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSE9UX1NQQVJFICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAgICgweDAwMDAwMDgwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfREVWX1JFQlVJTERJTkcgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0RFVl9GQVVMVFkgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19OT19FUlJPUiAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKiBTQ1NJIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVwbHkgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0VQX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAvKiAweDAzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2xvdFN0YXR1czsgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU2xvdDsgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAvKiAweDFFICovCit9IE1QSTJfU0VQX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0VQX1JFUExZLAorICBNcGkyU2VwUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2VwUmVwbHlfdDsKKworLyogU2xvdFN0YXR1cyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfUkVNT1ZFX1JFQURZICAgICAgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0lERU5USUZZX1JFUVVFU1QgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19SRUJVSUxEX1NUT1BQRUQgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSE9UX1NQQVJFICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfREVWX1JFQlVJTERJTkcgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0RFVl9GQVVMVFkgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19OT19FUlJPUiAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzVkODE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKQEAgLTAsMCArMSwxMjk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKgorICogICAgICAgICAgIE5hbWU6ICBtcGkyX2lvYy5oCisgKiAgICAgICAgICBUaXRsZTogIE1QSSBJT0MsIFBvcnQsIEV2ZW50LCBGVyBEb3dubG9hZCwgYW5kIEZXIFVwbG9hZCBtZXNzYWdlcworICogIENyZWF0aW9uIERhdGU6ICBPY3RvYmVyIDExLCAyMDA2CisgKgorICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEwCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBJbiBJT0NGYWN0cyBSZXBseSBzdHJ1Y3R1cmUsIHJlbmFtZWQgTWF4RGV2aWNlcyB0bworICogICAgICAgICAgICAgICAgICAgICAgTWF4VGFyZ2V0cy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFRvdGFsSW1hZ2VTaXplIGZpZWxkIHRvIEZXRG93bmxvYWQgUmVxdWVzdC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHJlc2VydmVkIHdvcmRzIHRvIEZXVXBsb2FkIFJlcXVlc3QuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAyICBBZGRlZCBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50LgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgUmVtb3ZlZCBTeXN0ZW1SZXBseVF1ZXVlRGVwdGggZmllbGQgZnJvbSB0aGUgSU9DSW5pdAorICogICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgcmVwbGFjZWQgaXQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggYW5kIFJlcGx5RnJlZVF1ZXVlRGVwdGguCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCB0aGUgTWluUmVwbHlRdWV1ZURlcHRoIGZpZWxkIG9mIHRoZSBJT0NGYWN0cworICogICAgICAgICAgICAgICAgICAgICAgcmVwbHkgd2l0aCBNYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfUkRQUV9ERVBUSF9NSU4gZGVmaW5lIHRvIHNwZWNpZnkgdGhlIG1pbmltdW0KKyAqICAgICAgICAgICAgICAgICAgICAgIGRlcHRoIGZvciB0aGUgUmVwbHkgRGVzY3JpcHRvciBQb3N0IFF1ZXVlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTQWRkcmVzcyBmaWVsZCB0byBJbml0aWF0b3IgRGV2aWNlIFRhYmxlCisgKiAgICAgICAgICAgICAgICAgICAgICBPdmVyZmxvdyBFdmVudCBkYXRhLgorICogIDEwLTMxLTA3ICAwMi4wMC4wNCAgQWRkZWQgUmVhc29uQ29kZSBNUEkyX0VWRU5UX1NBU19JTklUX1JDX05PVF9SRVNQT05ESU5HCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgU0FTIEluaXRpYXRvciBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgUmVhc29uIENvZGUgZGVmaW5lcyBmb3IgU0FTIFRvcG9sb2d5IENoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgTGlzdCBFdmVudCBkYXRhLCBpbmNsdWRpbmcgYWRkaW5nIGEgYml0IGZvciBQSFkgVmFjYW50CisgKiAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGFuZCBhZGRpbmcgYSBtYXNrIGZvciB0aGUgUmVhc29uIENvZGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX0RFTEFZX05PVF9SRVNQT05ESU5HLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvciBNUEkyX0VYVF9JTUFHRV9UWVBFX01FR0FSQUlELgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgQWRkZWQgQm9vdCBTdGF0dXMgZGVmaW5lcyBmb3IgdGhlIElPQ0V4Y2VwdGlvbnMgZmllbGQgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBJT0NGYWN0cyBSZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VYVEVOREVEX0JVRkZFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBNUEkyX1ZFUlNJT05fVU5JT04gdG8gbXBpMi5oLgorICogICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZCBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVFVRVNUIHRvIHVzZSBtYXNrcworICogICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBlbmFibGVzLCBhbmQgYWRkZWQgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGFuZCByZWxhdGVkIHN0cnVjdHVyZS4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIEFkZGVkIGRlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlELgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBkZWZpbmUgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TTVBfVEFSR0VULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4Vm9sdW1lcyBhbmQgTWF4UGVyc2lzdGVudEVudHJpZXMgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBJT0NGYWN0cyByZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFByb3RvY2FsRmxhZ3MgYW5kIElPQ0NhcGFiaWxpdGllcyBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfRldfSU1BR0VfSEVBREVSLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX1BPUlRFTkFCTEVfRkxBR1NfRU5BQkxFX1NJTkdMRV9QT1JULgorICogIDAzLTAzLTA4ICAwMi4wMC4wNyAgRml4ZWQgTVBJMl9GV19JTUFHRV9IRUFERVIgYnkgY2hhbmdpbmcgUmVzZXJ2ZWQyNiB0bworICogICAgICAgICAgICAgICAgICAgICAgYSBVMTYgKGZyb20gYSBVMzIpLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBleHRyYSAncycgZnJvbSBFdmVudE1hc2tzIG5hbWUuCisgKiAgMDYtMjctMDggIDAyLjAwLjA4ICBGaXhlZCBhbiBvZmZzZXQgaW4gYSBjb21tZW50LgorICogIDEwLTAyLTA4ICAwMi4wMC4wOSAgUmVtb3ZlZCBTeXN0ZW1SZXBseUZyYW1lU2l6ZSBmcm9tIE1QSTJfSU9DX0lOSVRfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgQ3VyUmVwbHlGcmFtZVNpemUgZnJvbSBNUEkyX0lPQ19GQUNUU19SRVBMWSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQgTWluUmVwbHlGcmFtZVNpemUgdG8gUmVwbHlGcmFtZVNpemUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9JUl9GT1JFSUdOX0NPTkZJR19NQVguCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IFJBSURPcGVyYXRpb24gdmFsdWVzIGZvciBJbnRlZ3JhdGVkIFJBSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnMgU3RhdHVzIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmb3VyIG5ldyBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGUgdmFsdWVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBSZWFzb25Db2RlIGRlZmluZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHRocmVlIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0cyBmb3IgdGhlIFNBUworICogICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXJ5IGV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNdWx0aXBsZXhpbmcgU3RhdHVzIENoYW5nZSBiaXQgdG8gdGhlIFBoeVN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgdGhlIFNBUyBUb3BvbG9neSBDaGFuZ2UgTGlzdCBldmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBkZWZpbmUgZm9yIE1QSTJfSU5JVF9JTUFHRV9CT09URkxBR1NfWE1FTUNPUFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBCb290RmxhZ3MgYXJlIG5vdyBwcm9kdWN0LXNwZWNpZmljLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgdGhlIGluZGl2ZHVhbCBzaWduYXR1cmUgYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBNUEkyX0lOSVRfSU1BR0VfRk9PVEVSLgorICogIDAxLTE5LTA5ICAwMi4wMC4xMCAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX0RPV05TVFJFQU1fSU5JVElBVE9SCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRQorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX1NBVEFfSU5JVF9GQUlMVVJFIGRlZmluZS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgTVBJMl9JT0NfSAorI2RlZmluZSBNUEkyX0lPQ19ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgICAgICAgIElPQyBNZXNzYWdlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJT0NJbml0IG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElPQ0luaXQgUmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JT0NfSU5JVF9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTXNnVmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyVmVyc2lvbjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lU2l6ZTsgICAgICAgICAvKiAweDFBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7ICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVEZXB0aDsgICAgICAgICAgICAvKiAweDFFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2Vuc2VCdWZmZXJBZGRyZXNzSGlnaDsgICAgICAgICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVwbHlBZGRyZXNzSGlnaDsgICAgICAgICAvKiAweDI0ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lQmFzZUFkZHJlc3M7ICAvKiAweDI4ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlQWRkcmVzczsvKiAweDMwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVBZGRyZXNzOyAgICAgICAgICAvKiAweDM4ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDQwICovCit9IE1QSTJfSU9DX0lOSVRfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lPQ19JTklUX1JFUVVFU1QsCisgIE1waTJJT0NJbml0UmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NJbml0UmVxdWVzdF90OworCisvKiBXaG9Jbml0IHZhbHVlcyAqLworI2RlZmluZSBNUEkyX1dIT0lOSVRfTk9UX0lOSVRJQUxJWkVEICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfV0hPSU5JVF9TWVNURU1fQklPUyAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9XSE9JTklUX1JPTV9CSU9TICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1dIT0lOSVRfUENJX1BFRVIgICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfV0hPSU5JVF9IT1NUX0RSSVZFUiAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9XSE9JTklUX01BTlVGQUNUVVJFUiAgICAgICAgICAgICAgICgweDA1KQorCisvKiBNc2dWZXJzaW9uICovCisjZGVmaW5lIE1QSTJfSU9DSU5JVF9NU0dWRVJTSU9OX01BSk9SX01BU0sgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0lPQ0lOSVRfTVNHVkVSU0lPTl9NQUpPUl9TSElGVCAgICAgKDgpCisjZGVmaW5lIE1QSTJfSU9DSU5JVF9NU0dWRVJTSU9OX01JTk9SX01BU0sgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX0lPQ0lOSVRfTVNHVkVSU0lPTl9NSU5PUl9TSElGVCAgICAgKDApCisKKy8qIEhlYWRlclZlcnNpb24gKi8KKyNkZWZpbmUgTVBJMl9JT0NJTklUX0hEUlZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfSU9DSU5JVF9IRFJWRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9JT0NJTklUX0hEUlZFUlNJT05fREVWX01BU0sgICAgICAgICgweDAwRkYpCisjZGVmaW5lIE1QSTJfSU9DSU5JVF9IRFJWRVJTSU9OX0RFVl9TSElGVCAgICAgICAoMCkKKworLyogbWluaW11bSBkZXB0aCBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZSAqLworI2RlZmluZSBNUEkyX1JEUFFfREVQVEhfTUlOICAgICAgICAgICAgICAgICAgICAgKDE2KQorCisKKy8qIElPQ0luaXQgUmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSU9DX0lOSVRfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBXaG9Jbml0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9JT0NfSU5JVF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lPQ19JTklUX1JFUExZLAorICBNcGkySU9DSW5pdFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ0luaXRSZXBseV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJT0NGYWN0cyBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJT0NGYWN0cyBSZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0lPQ19GQUNUU19SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCit9IE1QSTJfSU9DX0ZBQ1RTX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JT0NfRkFDVFNfUkVRVUVTVCwKKyAgTXBpMklPQ0ZhY3RzUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NGYWN0c1JlcXVlc3RfdDsKKworCisvKiBJT0NGYWN0cyBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JT0NfRkFDVFNfUkVQTFkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNc2dWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBIZWFkZXJWZXJzaW9uOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJT0NOdW1iZXI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NFeGNlcHRpb25zOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhDaGFpbkRlcHRoOyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBXaG9Jbml0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlBvcnRzOyAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0Q3JlZGl0OyAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0SUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NDYXBhYmlsaXRpZXM7ICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBNUEkyX1ZFUlNJT05fVU5JT04gICAgICBGV1ZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NSZXF1ZXN0RnJhbWVTaXplOyAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjYgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhJbml0aWF0b3JzOyAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhUYXJnZXRzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MkEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhTYXNFeHBhbmRlcnM7ICAgICAgICAgICAgICAgIC8qIDB4MkMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhFbmNsb3N1cmVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MkUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbEZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIDB4MzAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBIaWdoUHJpb3JpdHlDcmVkaXQ7ICAgICAgICAgICAgIC8qIDB4MzIgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aDsgLyogMHgzNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlcGx5RnJhbWVTaXplOyAgICAgICAgICAgICAgICAgLyogMHgzNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heFZvbHVtZXM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgzNyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyogMHgzOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heFBlcnNpc3RlbnRFbnRyaWVzOyAgICAgICAgICAgLyogMHgzQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgzQyAqLworfSBNUEkyX0lPQ19GQUNUU19SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lPQ19GQUNUU19SRVBMWSwKKyAgTXBpMklPQ0ZhY3RzUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DRmFjdHNSZXBseV90OworCisvKiBNc2dWZXJzaW9uICovCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfTVNHVkVSU0lPTl9NQUpPUl9NQVNLICAgICAgICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfTVNHVkVSU0lPTl9NQUpPUl9TSElGVCAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX01TR1ZFUlNJT05fTUlOT1JfTUFTSyAgICAgICAgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX01TR1ZFUlNJT05fTUlOT1JfU0hJRlQgICAgICAgICAgICAoMCkKKworLyogSGVhZGVyVmVyc2lvbiAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0hEUlZFUlNJT05fVU5JVF9NQVNLICAgICAgICAgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0hEUlZFUlNJT05fVU5JVF9TSElGVCAgICAgICAgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19IRFJWRVJTSU9OX0RFVl9NQVNLICAgICAgICAgICAgICAgKDB4MDBGRikKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19IRFJWRVJTSU9OX0RFVl9TSElGVCAgICAgICAgICAgICAgKDApCisKKy8qIElPQ0V4Y2VwdGlvbnMgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19FWENFUFRfSVJfRk9SRUlHTl9DT05GSUdfTUFYICAgICAgKDB4MDEwMCkKKworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9CT09UU1RBVF9NQVNLICAgICAgICAgICAgICAoMHgwMEUwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9CT09UU1RBVF9HT09EICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9CT09UU1RBVF9CQUNLVVAgICAgICAgICAgICAoMHgwMDIwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9CT09UU1RBVF9SRVNUT1JFRCAgICAgICAgICAoMHgwMDQwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9CT09UU1RBVF9DT1JSVVBUX0JBQ0tVUCAgICAoMHgwMDYwKQorCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfRVhDRVBUX01FVEFEQVRBX1VOU1VQUE9SVEVEICAgICAgICgweDAwMTApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfRVhDRVBUX01BTlVGQUNUX0NIRUNLU1VNX0ZBSUwgICAgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfRVhDRVBUX0ZXX0NIRUNLU1VNX0ZBSUwgICAgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfRVhDRVBUX1JBSURfQ09ORklHX0lOVkFMSUQgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfRVhDRVBUX0NPTkZJR19DSEVDS1NVTV9GQUlMICAgICAgICgweDAwMDEpCisKKy8qIGRlZmluZXMgZm9yIFdob0luaXQgZmllbGQgYXJlIGFmdGVyIHRoZSBJT0NJbml0IFJlcXVlc3QgKi8KKworLyogUHJvZHVjdElEIGZpZWxkIHVzZXMgTVBJMl9GV19IRUFERVJfUElEXyAqLworCisvKiBJT0NDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSAgICAgICAgICAgKDB4MDAwMDIwMDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9JTlRFR1JBVEVEX1JBSUQgICAgICAgICgweDAwMDAxMDAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01VTFRJQ0FTVCAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9CSURJUkVDVElPTkFMX1RBUkdFVCAgICgweDAwMDAwMDgwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRUVEUCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1NOQVBTSE9UX0JVRkZFUiAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9ESUFHX1RSQUNFX0JVRkZFUiAgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVEFTS19TRVRfRlVMTF9IQU5ETElORyAoMHgwMDAwMDAwNCkKKworLyogUHJvdG9jb2xGbGFncyAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NDU0lfVEFSR0VUICAgICAgICAgICAgICAoMHgwMDAxKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NDU0lfSU5JVElBVE9SICAgICAgICAgICAoMHgwMDAyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBQb3J0RmFjdHMgbWVzc2FnZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUG9ydEZhY3RzIFJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUE9SVF9GQUNUU19SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydE51bWJlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCit9IE1QSTJfUE9SVF9GQUNUU19SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUE9SVF9GQUNUU19SRVFVRVNULAorICBNcGkyUG9ydEZhY3RzUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJQb3J0RmFjdHNSZXF1ZXN0X3Q7CisKKy8qIFBvcnRGYWN0cyBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9QT1JUX0ZBQ1RTX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydE51bWJlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydFR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4UG9zdGVkQ21kQnVmZmVyczsgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDFBICovCit9IE1QSTJfUE9SVF9GQUNUU19SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1BPUlRfRkFDVFNfUkVQTFksCisgIE1waTJQb3J0RmFjdHNSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJQb3J0RmFjdHNSZXBseV90OworCisvKiBQb3J0VHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9QT1JURkFDVFNfUE9SVFRZUEVfSU5BQ1RJVkUgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9QT1JURkFDVFNfUE9SVFRZUEVfRkMgICAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9QT1JURkFDVFNfUE9SVFRZUEVfSVNDU0kgICAgICAgICAgICAgICAoMHgyMCkKKyNkZWZpbmUgTVBJMl9QT1JURkFDVFNfUE9SVFRZUEVfU0FTX1BIWVNJQ0FMICAgICAgICAoMHgzMCkKKyNkZWZpbmUgTVBJMl9QT1JURkFDVFNfUE9SVFRZUEVfU0FTX1ZJUlRVQUwgICAgICAgICAoMHgzMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUG9ydEVuYWJsZSBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQb3J0RW5hYmxlIFJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUE9SVF9FTkFCTEVfUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnRGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworfSBNUEkyX1BPUlRfRU5BQkxFX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9QT1JUX0VOQUJMRV9SRVFVRVNULAorICBNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdDsKKworCisvKiBQb3J0RW5hYmxlIFJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1BPUlRfRU5BQkxFX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfUE9SVF9FTkFCTEVfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9QT1JUX0VOQUJMRV9SRVBMWSwKKyAgTXBpMlBvcnRFbmFibGVSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJQb3J0RW5hYmxlUmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRXZlbnROb3RpZmljYXRpb24gbWVzc2FnZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRXZlbnROb3RpZmljYXRpb24gUmVxdWVzdCBtZXNzYWdlICovCisjZGVmaW5lIE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUyAgICAgICAgICAgKDQpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRXZlbnRNYXNrc1tNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFNdOy8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTQVNCcm9hZGNhc3RQcmltaXRpdmVNYXNrczsgICAgIC8qIDB4MjQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KK30gTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVRVUVTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVFVRVNULAorICBNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90OworCisKKy8qIEV2ZW50Tm90aWZpY2F0aW9uIFJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEV2ZW50RGF0YUxlbmd0aDsgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFja1JlcXVpcmVkOyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEV2ZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEV2ZW50Q29udGV4dDsgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEV2ZW50RGF0YVsxXTsgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworfSBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVBMWSwKKyAgTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90OworCisvKiBBY2tSZXF1aXJlZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9BQ0tfTk9UX1JFUVVJUkVEICAgICgweDAwKQorI2RlZmluZSBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9BQ0tfUkVRVUlSRUQgICAgICAgICgweDAxKQorCisvKiBFdmVudCAqLworI2RlZmluZSBNUEkyX0VWRU5UX0xPR19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU1RBVEVfQ0hBTkdFICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9IQVJEX1JFU0VUX1JFQ0VJVkVEICAgICAgICAgICAgICAoMHgwMDA1KQorI2RlZmluZSBNUEkyX0VWRU5UX0VWRU5UX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgICgweDAwMEEpCisjZGVmaW5lIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTCAgICAgICAgICAgICAgICAgICAgKDB4MDAwRSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0UgICAgICAgICAoMHgwMDBGKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVMgICAgICAgICAgICAgICgweDAwMTQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NPVkVSWSAgICAgICAgICAgICAgICAgICAgKDB4MDAxNikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfQlJPQURDQVNUX1BSSU1JVElWRSAgICAgICAgICAoMHgwMDE3KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19JTklUX0RFVklDRV9TVEFUVVNfQ0hBTkdFICAgICgweDAwMTgpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0lOSVRfVEFCTEVfT1ZFUkZMT1cgICAgICAgICAgKDB4MDAxOSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT0xPR1lfQ0hBTkdFX0xJU1QgICAgICAgICAoMHgwMDFDKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFICAgICgweDAwMUQpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxRSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLICAgICAgICAgICAgICAgICAoMHgwMDFGKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1QgICAgICgweDAwMjApCisjZGVmaW5lIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEICAgICAgICAgICAgICAgICAgKDB4MDAyMSkKKworCisvKiBMb2cgRW50cnkgQWRkZWQgRXZlbnQgZGF0YSAqLworCisvKiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBtYXRjaGVzIE1QSTJfTE9HXzBfRU5UUlkgaW4gbXBpMl9jbmZnLmggKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9EQVRBX0xPR19EQVRBX0xFTkdUSCAgICAgICAgICAgICAoMHgxQykKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9MT0dfRU5UUllfQURERUQKK3sKKyAgICBVNjQgICAgICAgICBUaW1lU3RhbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgIExvZ1NlcXVlbmNlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICBMb2dFbnRyeVF1YWxpZmllcjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTEgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEyICovCisgICAgVTggICAgICAgICAgTG9nRGF0YVtNUEkyX0VWRU5UX0RBVEFfTE9HX0RBVEFfTEVOR1RIXTsvKiAweDE0ICovCit9IE1QSTJfRVZFTlRfREFUQV9MT0dfRU5UUllfQURERUQsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0xPR19FTlRSWV9BRERFRCwKKyAgTXBpMkV2ZW50RGF0YUxvZ0VudHJ5QWRkZWRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhTG9nRW50cnlBZGRlZF90OworCisvKiBIYXJkIFJlc2V0IFJlY2VpdmVkIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9IQVJEX1JFU0VUX1JFQ0VJVkVECit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfRVZFTlRfREFUQV9IQVJEX1JFU0VUX1JFQ0VJVkVELAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9IQVJEX1JFU0VUX1JFQ0VJVkVELAorICBNcGkyRXZlbnREYXRhSGFyZFJlc2V0UmVjZWl2ZWRfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhSGFyZFJlc2V0UmVjZWl2ZWRfdDsKKworLyogVGFzayBTZXQgRnVsbCBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfVEFTS19TRVRfRlVMTAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnREZXB0aDsgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX0VWRU5UX0RBVEFfVEFTS19TRVRfRlVMTCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfVEFTS19TRVRfRlVMTCwKKyAgTXBpMkV2ZW50RGF0YVRhc2tTZXRGdWxsX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVRhc2tTZXRGdWxsX3Q7CisKKworLyogU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0UKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUYXNrVGFnOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZWFzb25Db2RlOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBU0NROyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBMVU5bOF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFLAorICBNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90OworCisvKiBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICAgICgweDA4KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FCT1JUX1RBU0tfU0VUX0lOVEVSTkFMICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ0xFQVJfVEFTS19TRVRfSU5URVJOQUwgICgweDBCKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19RVUVSWV9UQVNLX0lOVEVSTkFMICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FTWU5DX05PVElGSUNBVElPTiAgICAgICAoMHgwRCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX0lOVEVSTkFMX0RFVl9SRVNFVCAgICgweDBFKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfVEFTS19BQk9SVF9JTlRFUk5BTCAgKDB4MEYpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFICAgICAgICAoMHgxMCkKKworCisvKiBJbnRlZ3JhdGVkIFJBSUQgT3BlcmF0aW9uIFN0YXR1cyBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfSVJfT1BFUkFUSU9OX1NUQVRVUworeworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZvbERldkhhbmRsZTsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQUlET3BlcmF0aW9uOyAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBlcmNlbnRDb21wbGV0ZTsgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcmV2ZWQzOyAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworfSBNUEkyX0VWRU5UX0RBVEFfSVJfT1BFUkFUSU9OX1NUQVRVUywKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfSVJfT1BFUkFUSU9OX1NUQVRVUywKKyAgTXBpMkV2ZW50RGF0YUlyT3BlcmF0aW9uU3RhdHVzX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YUlyT3BlcmF0aW9uU3RhdHVzX3Q7CisKKy8qIEludGVncmF0ZWQgUkFJRCBPcGVyYXRpb24gU3RhdHVzIEV2ZW50IGRhdGEgUkFJRE9wZXJhdGlvbiB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9SQUlET1BfUkVTWU5DICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUkFJRE9QX09OTElORV9DQVBfRVhQQU5TSU9OICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX1JBSURPUF9DT05TSVNURU5DWV9DSEVDSyAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9SQUlET1BfQkFDS0dST1VORF9JTklUICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUkFJRE9QX01BS0VfREFUQV9DT05TSVNURU5UICAgICAgICgweDA0KQorCisKKy8qIEludGVncmF0ZWQgUkFJRCBWb2x1bWUgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX0lSX1ZPTFVNRQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZvbERldkhhbmRsZTsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIE5ld1ZhbHVlOyAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJldmlvdXNWYWx1ZTsgICAgICAgICAgICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9EQVRBX0lSX1ZPTFVNRSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfSVJfVk9MVU1FLAorICBNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhSXJWb2x1bWVfdDsKKworLyogSW50ZWdyYXRlZCBSQUlEIFZvbHVtZSBFdmVudCBkYXRhIFJlYXNvbkNvZGUgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfVk9MVU1FX1JDX1NFVFRJTkdTX0NIQU5HRUQgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRV9SQ19TVEFUVVNfRkxBR1NfQ0hBTkdFRCAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RBVEVfQ0hBTkdFRCAgICAgICAgICAgKDB4MDMpCisKKworLyogSW50ZWdyYXRlZCBSQUlEIFBoeXNpY2FsIERpc2sgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX0lSX1BIWVNJQ0FMX0RJU0sKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tOdW07ICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza0RldkhhbmRsZTsgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU2xvdDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmVIYW5kbGU7ICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIE5ld1ZhbHVlOyAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJldmlvdXNWYWx1ZTsgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9FVkVOVF9EQVRBX0lSX1BIWVNJQ0FMX0RJU0ssCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0lSX1BIWVNJQ0FMX0RJU0ssCisgIE1waTJFdmVudERhdGFJclBoeXNpY2FsRGlza190LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFJclBoeXNpY2FsRGlza190OworCisvKiBJbnRlZ3JhdGVkIFJBSUQgUGh5c2ljYWwgRGlzayBFdmVudCBkYXRhIFJlYXNvbkNvZGUgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUEhZU0RJU0tfUkNfU0VUVElOR1NfQ0hBTkdFRCAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX1BIWVNESVNLX1JDX1NUQVRVU19GTEFHU19DSEFOR0VEICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9QSFlTRElTS19SQ19TVEFURV9DSEFOR0VEICAgICAgICAgKDB4MDMpCisKKworLyogSW50ZWdyYXRlZCBSQUlEIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQgZGF0YSAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgTnVtRWxlbWVudHMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0VWRU5UX0lSX0NPTkZJR19FTEVNRU5UX0NPVU5UCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ09ORklHX0VMRU1FTlRfQ09VTlQgICAgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfSVJfQ09ORklHX0VMRU1FTlQKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFbGVtZW50RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZvbERldkhhbmRsZTsgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza051bTsgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfRVZFTlRfSVJfQ09ORklHX0VMRU1FTlQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9JUl9DT05GSUdfRUxFTUVOVCwKKyAgTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3Q7CisKKy8qIElSIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQgZGF0YSBFbGVtZW50RmxhZ3MgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0VGTEFHU19FTEVNRU5UX1RZUEVfTUFTSyAgICgweDAwMEYpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0VGTEFHU19WT0xVTUVfRUxFTUVOVCAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0VGTEFHU19WT0xQSFlTRElTS19FTEVNRU5UICgweDAwMDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0VGTEFHU19IT1RTUEFSRV9FTEVNRU5UICAgICgweDAwMDIpCisKKy8qIElSIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19BRERFRCAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUkVNT1ZFRCAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX05PX0NIQU5HRSAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19ISURFICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVU5ISURFICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1ZPTFVNRV9DUkVBVEVEICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19WT0xVTUVfREVMRVRFRCAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUERfQ1JFQVRFRCAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0RFTEVURUQgICAgICAgICAgICAgICgweDA5KQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX0lSX0NPTkZJR19DSEFOR0VfTElTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtRWxlbWVudHM7ICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnTnVtOyAgICAgICAgICAvKiAweDAzICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBNUEkyX0VWRU5UX0lSX0NPTkZJR19FTEVNRU5UICAgIENvbmZpZ0VsZW1lbnRbTVBJMl9FVkVOVF9JUl9DT05GSUdfRUxFTUVOVF9DT1VOVF07ICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9EQVRBX0lSX0NPTkZJR19DSEFOR0VfTElTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfSVJfQ09ORklHX0NIQU5HRV9MSVNULAorICBNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90OworCisvKiBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEgRmxhZ3MgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0ZMQUdTX0ZPUkVJR05fQ09ORklHICAgKDB4MDAwMDAwMDEpCisKKworLyogU0FTIERpc2NvdmVyeSBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX0RJU0NPVkVSWQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXJ5U3RhdHVzOyAgICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19ESVNDT1ZFUlksCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1NBU19ESVNDT1ZFUlksCisgIE1waTJFdmVudERhdGFTYXNEaXNjb3ZlcnlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzRGlzY292ZXJ5X3Q7CisKKy8qIFNBUyBEaXNjb3ZlcnkgRXZlbnQgZGF0YSBGbGFncyB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19ERVZJQ0VfQ0hBTkdFICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ESVNDX0lOX1BST0dSRVNTICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisKKy8qIFNBUyBEaXNjb3ZlcnkgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ESVNDX1JDX1NUQVJURUQgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfUkNfQ09NUExFVEVEICAgICAgICAgICAgICAgICAgICAoMHgwMikKKworLyogU0FTIERpc2NvdmVyeSBFdmVudCBkYXRhIERpc2NvdmVyeVN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NQVhfRU5DTE9TVVJFU19FWENFRUQgICAgICAgICAgICAoMHg4MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NQVhfRVhQQU5ERVJTX0VYQ0VFRCAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NQVhfREVWSUNFU19FWENFRUQgICAgICAgICAgICAgICAoMHgyMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NQVhfVE9QT19QSFlTX0VYQ0VFRCAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19ET1dOU1RSRUFNX0lOSVRJQVRPUiAgICAgICAgICAgICAoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NVUxUSV9TVUJUUkFDVElWRV9TVUJUUkFDVElWRSAgICAoMHgwMDAwODAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19FWFBfTVVMVElfU1VCVFJBQ1RJVkUgICAgICAgICAgICAoMHgwMDAwNDAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NVUxUSV9QT1JUX0RPTUFJTiAgICAgICAgICAgICAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19UQUJMRV9UT19TVUJUUkFDVElWRV9MSU5LICAgICAgICAoMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19VTlNVUFBPUlRFRF9ERVZJQ0UgICAgICAgICAgICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19UQUJMRV9MSU5LICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TVUJUUkFDVElWRV9MSU5LICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TTVBfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TTVBfRlVOQ1RJT05fRkFJTEVEICAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19JTkRFWF9OT1RfRVhJU1QgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19PVVRfUk9VVEVfRU5UUklFUyAgICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TTVBfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19NVUxUSVBMRV9QT1JUUyAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19VTkFERFJFU1NBQkxFX0RFVklDRSAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19MT09QX0RFVEVDVEVEICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKiBTQVMgQnJvYWRjYXN0IFByaW1pdGl2ZSBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkUKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydFdpZHRoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQcmltaXRpdmU7ICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX0VWRU5UX0RBVEFfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkUsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFLAorICBNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90OworCisvKiBkZWZpbmVzIGZvciB0aGUgUHJpbWl0aXZlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfUFJJTUlUSVZFX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9QUklNSVRJVkVfU0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX1BSSU1JVElWRV9FWFBBTkRFUiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfRVZFTlRfUFJJTUlUSVZFX0FTWU5DSFJPTk9VU19FVkVOVCAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9QUklNSVRJVkVfUkVTRVJWRUQzICAgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0VWRU5UX1BSSU1JVElWRV9SRVNFUlZFRDQgICAgICAgICAgICAgICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfRVZFTlRfUFJJTUlUSVZFX0NIQU5HRTBfUkVTRVJWRUQgICAgICAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9FVkVOVF9QUklNSVRJVkVfQ0hBTkdFMV9SRVNFUlZFRCAgICAgICAgICAgICAgICgweDA4KQorCisKKy8qIFNBUyBJbml0aWF0b3IgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19JTklUX0RFVl9TVEFUVVNfQ0hBTkdFCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19JTklUX0RFVl9TVEFUVVNfQ0hBTkdFLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9TQVNfSU5JVF9ERVZfU1RBVFVTX0NIQU5HRSwKKyAgTXBpMkV2ZW50RGF0YVNhc0luaXREZXZTdGF0dXNDaGFuZ2VfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzSW5pdERldlN0YXR1c0NoYW5nZV90OworCisvKiBTQVMgSW5pdGlhdG9yIERldmljZSBTdGF0dXMgQ2hhbmdlIGV2ZW50IFJlYXNvbkNvZGUgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0lOSVRfUkNfQURERUQgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0lOSVRfUkNfTk9UX1JFU1BPTkRJTkcgICAgICAgKDB4MDIpCisKKworLyogU0FTIEluaXRpYXRvciBEZXZpY2UgVGFibGUgT3ZlcmZsb3cgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19JTklUX1RBQkxFX09WRVJGTE9XCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4SW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBDdXJyZW50SW5pdDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFNBU0FkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVywKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX0lOSVRfVEFCTEVfT1ZFUkZMT1csCisgIE1waTJFdmVudERhdGFTYXNJbml0VGFibGVPdmVyZmxvd190LAorICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNJbml0VGFibGVPdmVyZmxvd190OworCisKKy8qIFNBUyBUb3BvbG9neSBDaGFuZ2UgTGlzdCBFdmVudCBkYXRhICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBOdW1FbnRyaWVzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfQ09VTlQKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfQ09VTlQgICAgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX1NBU19UT1BPX1BIWV9FTlRSWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTGlua1JhdGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWV9FTlRSWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX1NBU19UT1BPX1BIWV9FTlRSWSwKKyAgTXBpMkV2ZW50U2FzVG9wb1BoeUVudHJ5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50U2FzVG9wb1BoeUVudHJ5X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmVIYW5kbGU7ICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXJEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bUVudHJpZXM7ICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydFBoeU51bTsgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDBCICovCisgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfRU5UUlkgICBQSFlbTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfQ09VTlRdOyAvKiAweDBDKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNULAorICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBFeHBTdGF0dXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19BRERFRCAgICAgICAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PVF9SRVNQT05ESU5HICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfUkVTUE9ORElORyAgICAgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19ERUxBWV9OT1RfUkVTUE9ORElORyAgICAgICAgICgweDA0KQorCisvKiBkZWZpbmVzIGZvciB0aGUgTGlua1JhdGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9DVVJSRU5UX01BU0sgICAgICAgICAgICAgICAgICgweEYwKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX0NVUlJFTlRfU0hJRlQgICAgICAgICAgICAgICAgKDQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUFJFVl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9QUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICgwKQorCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfVU5LTk9XTl9MSU5LX1JBVEUgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9QSFlfRElTQUJMRUQgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX05FR09USUFUSU9OX0ZBSUxFRCAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfU0FUQV9PT0JfQ09NUExFVEUgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9QT1JUX1NFTEVDVE9SICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1NNUF9SRVNFVF9JTl9QUk9HUkVTUyAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUkFURV8xXzUgICAgICAgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9SQVRFXzNfMCAgICAgICAgICAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1JBVEVfNl8wICAgICAgICAgICAgICAgICAgICAgKDB4MEEpCisKKy8qIHZhbHVlcyBmb3IgdGhlIFBoeVN0YXR1cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQgICAgICAgICAgICAgICAgKDB4ODApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fUFNfTVVMVElQTEVYX0NIQU5HRSAgICAgICAgICAgICAoMHgxMCkKKy8qIHZhbHVlcyBmb3IgdGhlIFBoeVN0YXR1cyBSZWFzb25Db2RlIHN1Yi1maWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19BRERFRCAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX05PVF9SRVNQT05ESU5HICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTk9fQ0hBTkdFICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19ERUxBWV9OT1RfUkVTUE9ORElORyAgICAgICAgICgweDA1KQorCisKKy8qIFNBUyBFbmNsb3N1cmUgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19FTkNMX0RFVl9TVEFUVVNfQ0hBTkdFCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZWFzb25Db2RlOyAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlTG9naWNhbElEOyAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBOdW1TbG90czsgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0U2xvdDsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUGh5Qml0czsgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19FTkNMX0RFVl9TVEFUVVNfQ0hBTkdFLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9TQVNfRU5DTF9ERVZfU1RBVFVTX0NIQU5HRSwKKyAgTXBpMkV2ZW50RGF0YVNhc0VuY2xEZXZTdGF0dXNDaGFuZ2VfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzRW5jbERldlN0YXR1c0NoYW5nZV90OworCisvKiBTQVMgRW5jbG9zdXJlIERldmljZSBTdGF0dXMgQ2hhbmdlIGV2ZW50IFJlYXNvbkNvZGUgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0VOQ0xfUkNfQURERUQgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0VOQ0xfUkNfTk9UX1JFU1BPTkRJTkcgICAgICAgKDB4MDIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEV2ZW50QWNrIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEV2ZW50QWNrIFJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfQUNLX1JFUVVFU1QKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFdmVudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBFdmVudENvbnRleHQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9FVkVOVF9BQ0tfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0FDS19SRVFVRVNULAorICBNcGkyRXZlbnRBY2tSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50QWNrUmVxdWVzdF90OworCisKKy8qIEV2ZW50QWNrIFJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0FDS19SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX0VWRU5UX0FDS19SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0FDS19SRVBMWSwKKyAgTXBpMkV2ZW50QWNrUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnRBY2tSZXBseV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGV0Rvd25sb2FkIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZXRG93bmxvYWQgUmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9GV19ET1dOTE9BRF9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VUeXBlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUb3RhbEltYWdlU2l6ZTsgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgTVBJMl9NUElfU0dFX1VOSU9OICAgICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9GV19ET1dOTE9BRF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRldfRE9XTkxPQURfUkVRVUVTVCwKKyAgTXBpMkZXRG93bmxvYWRSZXF1ZXN0LCBNUEkyX1BPSU5URVIgcE1waTJGV0Rvd25sb2FkUmVxdWVzdDsKKworI2RlZmluZSBNUEkyX0ZXX0RPV05MT0FEX01TR0ZMR1NfTEFTVF9TRUdNRU5UICAgKDB4MDEpCisKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9GVyAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9CSU9TICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9NQU5VRkFDVFVSSU5HICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9DT05GSUdfMSAgICAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9DT05GSUdfMiAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9NRUdBUkFJRCAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9JVFlQRV9DT01NT05fQk9PVF9CTE9DSyAgICAoMHgwQikKKworLyogRldEb3dubG9hZCBUcmFuc2FjdGlvbkNvbnRleHQgRWxlbWVudCAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfRE9XTkxPQURfVENTR0UKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTaXplOyAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV0YWlsc0xlbmd0aDsgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSW1hZ2VPZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworfSBNUEkyX0ZXX0RPV05MT0FEX1RDU0dFLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRldfRE9XTkxPQURfVENTR0UsCisgIE1waTJGV0Rvd25sb2FkVENTR0VfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRldEb3dubG9hZFRDU0dFX3Q7CisKKy8qIEZXRG93bmxvYWQgUmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfRE9XTkxPQURfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJbWFnZVR5cGU7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX0ZXX0RPV05MT0FEX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRldfRE9XTkxPQURfUkVQTFksCisgIE1waTJGV0Rvd25sb2FkUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRldEb3dubG9hZFJlcGx5X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZXVXBsb2FkIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZXVXBsb2FkIFJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfVVBMT0FEX1JFUVVFU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJbWFnZVR5cGU7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBNUEkyX01QSV9TR0VfVU5JT04gICAgICBTR0w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0ZXX1VQTE9BRF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRldfVVBMT0FEX1JFUVVFU1QsCisgIE1waTJGV1VwbG9hZFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRldVcGxvYWRSZXF1ZXN0X3Q7CisKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfRldfQ1VSUkVOVCAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0ZXX1VQTE9BRF9JVFlQRV9GV19GTEFTSCAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0JJT1NfRkxBU0ggICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfRldfQkFDS1VQICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0ZXX1VQTE9BRF9JVFlQRV9NQU5VRkFDVFVSSU5HICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0NPTkZJR18xICAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfQ09ORklHXzIgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX0ZXX1VQTE9BRF9JVFlQRV9NRUdBUkFJRCAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0NPTVBMRVRFICAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfQ09NTU9OX0JPT1RfQkxPQ0sgICgweDBCKQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9GV19VUExPQURfVENTR0UKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTaXplOyAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV0YWlsc0xlbmd0aDsgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSW1hZ2VPZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworfSBNUEkyX0ZXX1VQTE9BRF9UQ1NHRSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZXX1VQTE9BRF9UQ1NHRSwKKyAgTXBpMkZXVXBsb2FkVENTR0VfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRldVcGxvYWRUQ1NHRV90OworCisvKiBGV1VwbG9hZCBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9GV19VUExPQURfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJbWFnZVR5cGU7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEFjdHVhbEltYWdlU2l6ZTsgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfRldfVVBMT0FEX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRldfVVBMT0FEX1JFUExZLAorICBNcGkyRldVcGxvYWRSZXBseV90LCBNUEkyX1BPSU5URVIgcE1QaTJGV1VwbG9hZFJlcGx5X3Q7CisKKworLyogRlcgSW1hZ2UgSGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9GV19JTUFHRV9IRUFERVIKK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTA7ICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlMTsgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUyOyAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIE1QSTJfVkVSU0lPTl9VTklPTiAgICAgIE1QSVZlcnNpb247ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgTVBJMl9WRVJTSU9OX1VOSU9OICAgICAgRldWZXJzaW9uOyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBNUEkyX1ZFUlNJT05fVU5JT04gICAgICBOVkRBVEFWZXJzaW9uOyAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIE1QSTJfVkVSU0lPTl9VTklPTiAgICAgIFBhY2thZ2VWZXJzaW9uOyAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVmVuZG9ySUQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0SUQ7ICAgICAgICAgICAgICAgICAgLyogMHgyMiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyNjsgICAgICAgICAgICAgICAgIC8qIDB4MjYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NDYXBhYmlsaXRpZXM7ICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDJDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgTmV4dEltYWdlSGVhZGVyT2Zmc2V0OyAgICAgIC8qIDB4MzAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBDaGVja3N1bTsgICAgICAgICAgICAgICAgICAgLyogMHgzNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzg7ICAgICAgICAgICAgICAgICAvKiAweDM4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzQzsgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQwOyAgICAgICAgICAgICAgICAgLyogMHg0MCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDQ7ICAgICAgICAgICAgICAgICAvKiAweDQ0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0ODsgICAgICAgICAgICAgICAgIC8qIDB4NDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDRDOyAgICAgICAgICAgICAgICAgLyogMHg0QyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTA7ICAgICAgICAgICAgICAgICAvKiAweDUwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1NDsgICAgICAgICAgICAgICAgIC8qIDB4NTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU4OyAgICAgICAgICAgICAgICAgLyogMHg1OCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNUM7ICAgICAgICAgICAgICAgICAvKiAweDVDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2MDsgICAgICAgICAgICAgICAgIC8qIDB4NjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZVZlcnNpb25OYW1lV2hhdDsgICAgLyogMHg2NCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZpcm13YXJlVmVyc2lvbk5hbWVbMzJdOyAgICAvKiAweDY4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVmVuZG9yTmFtZVdoYXQ7ICAgICAgICAgICAgIC8qIDB4ODggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWZW5kb3JOYW1lWzMyXTsgICAgICAgICAgICAgLyogMHg4QyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VOYW1lV2hhdDsgICAgICAgICAgICAvKiAweDg4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU5hbWVbMzJdOyAgICAgICAgICAgIC8qIDB4OEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEQwOyAgICAgICAgICAgICAgICAgLyogMHhEMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRDQ7ICAgICAgICAgICAgICAgICAvKiAweEQ0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWREODsgICAgICAgICAgICAgICAgIC8qIDB4RDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZERDOyAgICAgICAgICAgICAgICAgLyogMHhEQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRTA7ICAgICAgICAgICAgICAgICAvKiAweEUwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRFNDsgICAgICAgICAgICAgICAgIC8qIDB4RTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEU4OyAgICAgICAgICAgICAgICAgLyogMHhFOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRUM7ICAgICAgICAgICAgICAgICAvKiAweEVDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRGMDsgICAgICAgICAgICAgICAgIC8qIDB4RjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEY0OyAgICAgICAgICAgICAgICAgLyogMHhGNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRjg7ICAgICAgICAgICAgICAgICAvKiAweEY4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRGQzsgICAgICAgICAgICAgICAgIC8qIDB4RkMgKi8KK30gTVBJMl9GV19JTUFHRV9IRUFERVIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9GV19JTUFHRV9IRUFERVIsCisgIE1waTJGV0ltYWdlSGVhZGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZXSW1hZ2VIZWFkZXJfdDsKKworLyogU2lnbmF0dXJlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1NJR05BVFVSRV9PRkZTRVQgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFX01BU0sgICAgICAgICAgICgweEZGMDAwMDAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9TSUdOQVRVUkUgICAgICAgICAgICAgICAgKDB4RUEwMDAwMDApCisKKy8qIFNpZ25hdHVyZTAgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFMF9PRkZTRVQgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9TSUdOQVRVUkUwICAgICAgICAgICAgICAgKDB4NUFGQUE1NUEpCisKKy8qIFNpZ25hdHVyZTEgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFMV9PRkZTRVQgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9TSUdOQVRVUkUxICAgICAgICAgICAgICAgKDB4QTU1QUZBQTUpCisKKy8qIFNpZ25hdHVyZTIgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFMl9PRkZTRVQgICAgICAgICgweDBDKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9TSUdOQVRVUkUyICAgICAgICAgICAgICAgKDB4NUFBNTVBRkEpCisKKworLyogZGVmaW5lcyBmb3IgdXNpbmcgdGhlIFByb2R1Y3RJRCBmaWVsZCAqLworI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfVFlQRV9NQVNLICAgICAgICAgICAgKDB4RjAwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1RZUEVfU0FTICAgICAgICAgICAgICgweDIwMDApCisKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICgweDBGMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0EgICAgICAgICAgICAgICAoMHgwMDAwKQorCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfTUFTSyAgICAgICAgICAoMHgwMEZGKQorLyogU0FTICovCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjEwOF9TQVMgICAgICAoMHgwMDEwKQorCisvKiB1c2UgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF8gZGVmaW5lcyBmb3IgUHJvdG9jb2xGbGFncyBmaWVsZCAqLworCisvKiB1c2UgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZXyBkZWZpbmVzIGZvciBJT0NDYXBhYmlsaXRpZXMgZmllbGQgKi8KKworCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX0lNQUdFU0laRV9PRkZTRVQgICAgICAgICAoMHgyQykKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfTkVYVElNQUdFX09GRlNFVCAgICAgICAgICgweDMwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9WRVJOTUhXQVRfT0ZGU0VUICAgICAgICAgKDB4NjQpCisKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfV0hBVF9TSUdOQVRVUkUgICAgICAgICAgICgweDI5MjMyODQwKQorCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAoMHgxMDApCisKKworLyogRXh0ZW5kZWQgSW1hZ2UgSGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FWFRfSU1BR0VfSEVBREVSCisKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJbWFnZVR5cGU7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBDaGVja3N1bTsgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgTmV4dEltYWdlSGVhZGVyT2Zmc2V0OyAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIElkZW50aWZ5U3RyaW5nWzMyXTsgICAgICAgICAvKiAweDIwICovCit9IE1QSTJfRVhUX0lNQUdFX0hFQURFUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VYVF9JTUFHRV9IRUFERVIsCisgIE1waTJFeHRJbWFnZUhlYWRlcl90LCBNUEkyX1BPSU5URVIgcE1waTJFeHRJbWFnZUhlYWRlcl90OworCisvKiB1c2VmdWwgb2Zmc2V0cyAqLworI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9JTUFHRVRZUEVfT0ZGU0VUICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX0lNQUdFU0laRV9PRkZTRVQgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfTkVYVElNQUdFX09GRlNFVCAgICAgICAgICgweDBDKQorCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX0hFQURFUl9TSVpFICAgICAgICAgICAgICAoMHg0MCkKKworLyogZGVmaW5lcyBmb3IgdGhlIEltYWdlVHlwZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX1VOU1BFQ0lGSUVEICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX1RZUEVfRlcgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfVFlQRV9OVkRBVEEgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX0JPT1RMT0FERVIgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX1RZUEVfSU5JVElBTElaQVRJT04gICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfVFlQRV9GTEFTSF9MQVlPVVQgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX1NVUFBPUlRFRF9ERVZJQ0VTICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX1RZUEVfTUVHQVJBSUQgICAgICAgICAgICAoMHgwOCkKKworI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX01BWCAgICAgICAgICAgICAgICAgKE1QSTJfRVhUX0lNQUdFX1RZUEVfTUVHQVJBSUQpCisKKworCisvKiBGTEFTSCBMYXlvdXQgRXh0ZW5kZWQgSW1hZ2UgRGF0YSAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgUmVnaW9uc1BlckxheW91dCBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfRkxBU0hfTlVNQkVSX09GX1JFR0lPTlMKKyNkZWZpbmUgTVBJMl9GTEFTSF9OVU1CRVJfT0ZfUkVHSU9OUyAgICAgICAgKDEpCisjZW5kaWYKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIE51bWJlck9mTGF5b3V0cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfRkxBU0hfTlVNQkVSX09GX0xBWU9VVFMKKyNkZWZpbmUgTVBJMl9GTEFTSF9OVU1CRVJfT0ZfTEFZT1VUUyAgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRkxBU0hfUkVHSU9OCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVnaW9uVHlwZTsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVnaW9uT2Zmc2V0OyAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZWdpb25TaXplOyAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCit9IE1QSTJfRkxBU0hfUkVHSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRkxBU0hfUkVHSU9OLAorICBNcGkyRmxhc2hSZWdpb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyRmxhc2hSZWdpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRkxBU0hfTEFZT1VUCit7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhc2hTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBNUEkyX0ZMQVNIX1JFR0lPTiAgICAgICBSZWdpb25bTVBJMl9GTEFTSF9OVU1CRVJfT0ZfUkVHSU9OU107LyogMHgxMCAqLworfSBNUEkyX0ZMQVNIX0xBWU9VVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZMQVNIX0xBWU9VVCwKKyAgTXBpMkZsYXNoTGF5b3V0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZsYXNoTGF5b3V0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0ZMQVNIX0xBWU9VVF9EQVRBCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VSZXZpc2lvbjsgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNpemVPZlJlZ2lvbjsgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkxheW91dHM7ICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlZ2lvbnNQZXJMYXlvdXQ7ICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWluaW11bVNlY3RvckFsaWdubWVudDsgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgTVBJMl9GTEFTSF9MQVlPVVQgICAgICAgTGF5b3V0W01QSTJfRkxBU0hfTlVNQkVSX09GX0xBWU9VVFNdOy8qIDB4MTAgKi8KK30gTVBJMl9GTEFTSF9MQVlPVVRfREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZMQVNIX0xBWU9VVF9EQVRBLAorICBNcGkyRmxhc2hMYXlvdXREYXRhX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZsYXNoTGF5b3V0RGF0YV90OworCisvKiBkZWZpbmVzIGZvciB0aGUgUmVnaW9uVHlwZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9VTlVTRUQgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRkxBU0hfUkVHSU9OX0ZJUk1XQVJFICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fQklPUyAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9OVkRBVEEgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfRkxBU0hfUkVHSU9OX0ZJUk1XQVJFX0JBQ0tVUCAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fTUZHX0lORk9STUFUSU9OICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9DT05GSUdfMSAgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRkxBU0hfUkVHSU9OX0NPTkZJR18yICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fTUVHQVJBSUQgICAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9JTklUICAgICAgICAgICAgICAgICAgKDB4MEEpCisKKy8qIEltYWdlUmV2aXNpb24gKi8KKyNkZWZpbmUgTVBJMl9GTEFTSF9MQVlPVVRfSU1BR0VfUkVWSVNJT04gICAgICAgICgweDAwKQorCisKKworLyogU3VwcG9ydGVkIERldmljZXMgRXh0ZW5kZWQgSW1hZ2UgRGF0YSAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgTnVtYmVyT2ZEZXZpY2VzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TVVBQT1JURURfREVWSUNFU19JTUFHRV9OVU1fREVWSUNFUworI2RlZmluZSBNUEkyX1NVUFBPUlRFRF9ERVZJQ0VTX0lNQUdFX05VTV9ERVZJQ0VTICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NVUFBPUlRFRF9ERVZJQ0UKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDsgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZlbmRvcklEOyAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSURNYXNrOyAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIExvd1BDSVJldjsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSGlnaFBDSVJldjsgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCit9IE1QSTJfU1VQUE9SVEVEX0RFVklDRSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NVUFBPUlRFRF9ERVZJQ0UsCisgIE1waTJTdXBwb3J0ZWREZXZpY2VfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU3VwcG9ydGVkRGV2aWNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NVUFBPUlRFRF9ERVZJQ0VTX0RBVEEKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJbWFnZVJldmlzaW9uOyAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZEZXZpY2VzOyAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgTVBJMl9TVVBQT1JURURfREVWSUNFICAgU3VwcG9ydGVkRGV2aWNlW01QSTJfU1VQUE9SVEVEX0RFVklDRVNfSU1BR0VfTlVNX0RFVklDRVNdOyAvKiAweDA4ICovCit9IE1QSTJfU1VQUE9SVEVEX0RFVklDRVNfREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NVUFBPUlRFRF9ERVZJQ0VTX0RBVEEsCisgIE1waTJTdXBwb3J0ZWREZXZpY2VzRGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJTdXBwb3J0ZWREZXZpY2VzRGF0YV90OworCisvKiBJbWFnZVJldmlzaW9uICovCisjZGVmaW5lIE1QSTJfU1VQUE9SVEVEX0RFVklDRVNfSU1BR0VfUkVWSVNJT04gICAoMHgwMCkKKworCisvKiBJbml0IEV4dGVuZGVkIEltYWdlIERhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSU5JVF9JTUFHRV9GT09URVIKKworeworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEJvb3RGbGFnczsgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUwOyAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTE7ICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlMjsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNldFZlY3RvcjsgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0lOSVRfSU1BR0VfRk9PVEVSLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSU5JVF9JTUFHRV9GT09URVIsCisgIE1waTJJbml0SW1hZ2VGb290ZXJfdCwgTVBJMl9QT0lOVEVSIHBNcGkySW5pdEltYWdlRm9vdGVyX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBCb290RmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX0JPT1RGTEFHU19PRkZTRVQgICAgICAgICgweDAwKQorCisvKiBkZWZpbmVzIGZvciB0aGUgSW1hZ2VTaXplIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9JTUFHRVNJWkVfT0ZGU0VUICAgICAgICAoMHgwNCkKKworLyogZGVmaW5lcyBmb3IgdGhlIFNpZ25hdHVyZTAgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRTBfT0ZGU0VUICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFMCAgICAgICAgICAgICAgKDB4NUFBNTVBRUEpCisKKy8qIGRlZmluZXMgZm9yIHRoZSBTaWduYXR1cmUxIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkUxX09GRlNFVCAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRTEgICAgICAgICAgICAgICgweEE1NUFFQUE1KQorCisvKiBkZWZpbmVzIGZvciB0aGUgU2lnbmF0dXJlMiBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFMl9PRkZTRVQgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkUyICAgICAgICAgICAgICAoMHg1QUVBQTU1QSkKKworLyogU2lnbmF0dXJlIGZpZWxkcyBhcyBpbmRpdmlkdWFsIGJ5dGVzICovCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV8wICAgICAgICAoMHhFQSkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzEgICAgICAgICgweDVBKQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfMiAgICAgICAgKDB4QTUpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV8zICAgICAgICAoMHg1QSkKKworI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfNCAgICAgICAgKDB4QTUpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV81ICAgICAgICAoMHhFQSkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzYgICAgICAgICgweDVBKQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfNyAgICAgICAgKDB4QTUpCisKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzggICAgICAgICgweDVBKQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfOSAgICAgICAgKDB4QTUpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV9BICAgICAgICAoMHhFQSkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFX0IgICAgICAgICgweDVBKQorCisvKiBkZWZpbmVzIGZvciB0aGUgUmVzZXRWZWN0b3IgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1JFU0VUVkVDVE9SX09GRlNFVCAgICAgICgweDE0KQorCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9yYWlkLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9yYWlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNDgxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9yYWlkLmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggTFNJIENvcnBvcmF0aW9uLgorICoKKyAqCisgKiAgICAgICAgICAgTmFtZTogIG1waTJfcmFpZC5oCisgKiAgICAgICAgICBUaXRsZTogIE1QSSBJbnRlZ3JhdGVkIFJBSUQgbWVzc2FnZXMgYW5kIHN0cnVjdHVyZXMKKyAqICBDcmVhdGlvbiBEYXRlOiAgQXByaWwgMjYsIDIwMDcKKyAqCisgKiAgICBtcGkyX3JhaWQuaCBWZXJzaW9uOiAgMDIuMDAuMDMKKyAqCisgKiAgVmVyc2lvbiBIaXN0b3J5CisgKiAgLS0tLS0tLS0tLS0tLS0tCisgKgorICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KKyAqICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDEgIE1vZGlmaWNhdGlvbnMgdG8gUkFJRCBBY3Rpb24gcmVxdWVzdCBhbmQgcmVwbHksCisgKiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIEFjdGlvbnMgYW5kIEFjdGlvbkRhdGEuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBBZGRlZCBNUEkyX1JBSURfQUNUSU9OX0FEQVRBX0RJU0FCTF9GVUxMX1JFQlVJTEQuCisgKiAgMDUtMjEtMDggIDAyLjAwLjAzICBBZGRlZCBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1Mgc28gdGhhdAorICogICAgICAgICAgICAgICAgICAgICAgdGhlIFBoeXNEaXNrIGFycmF5IGluIE1QSTJfUkFJRF9WT0xVTUVfQ1JFQVRJT05fU1RSVUNUCisgKiAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc2l6ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBNUEkyX1JBSURfSAorI2RlZmluZSBNUEkyX1JBSURfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgICAgICAgICBJbnRlZ3JhdGVkIFJBSUQgTWVzc2FnZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUkFJRCBBY3Rpb24gbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFjdGlvbkRhdGFXb3JkIGRlZmluZXMgZm9yIHVzZSB3aXRoIE1QSTJfUkFJRF9BQ1RJT05fREVMRVRFX1ZPTFVNRSBhY3Rpb24gKi8KKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9LRUVQX0xCQTAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9aRVJPX0xCQTAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworLyogdXNlIE1QSTJfUkFJRFZPTDBfU0VUVElOR18gZGVmaW5lcyBmcm9tIG1waTJfY25mZy5oIGZvciBNUEkyX1JBSURfQUNUSU9OX0NIQU5HRV9WT0xfV1JJVEVfQ0FDSEUgYWN0aW9uICovCisKKy8qIEFjdGlvbkRhdGFXb3JkIGRlZmluZXMgZm9yIHVzZSB3aXRoIE1QSTJfUkFJRF9BQ1RJT05fRElTQUJMRV9BTExfVk9MVU1FUyBhY3Rpb24gKi8KKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9ESVNBQkxfRlVMTF9SRUJVSUxEICAoMHgwMDAwMDAwMSkKKworLyogQWN0aW9uRGF0YVdvcmQgZm9yIE1QSTJfUkFJRF9BQ1RJT05fU0VUX1JBSURfRlVOQ1RJT05fUkFURSBBY3Rpb24gKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNUSU9OX1JBVEVfREFUQQoreworICAgIFU4ICAgICAgICAgICAgICBSYXRlVG9DaGFuZ2U7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBSYXRlT3JNb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBEYXRhU2NydWJEdXJhdGlvbjsgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX1JBSURfQUNUSU9OX1JBVEVfREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX1JBVEVfREFUQSwKKyAgTXBpMlJhaWRBY3Rpb25SYXRlRGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uUmF0ZURhdGFfdDsKKworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NFVF9SQVRFX1JFU1lOQyAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NFVF9SQVRFX0RBVEFfU0NSVUIgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NFVF9SQVRFX1BPV0VSU0FWRV9NT0RFICAgICgweDAyKQorCisvKiBBY3Rpb25EYXRhV29yZCBmb3IgTVBJMl9SQUlEX0FDVElPTl9TVEFSVF9SQUlEX0ZVTkNUSU9OIEFjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ1RJT05fU1RBUlRfUkFJRF9GVU5DVElPTgoreworICAgIFU4ICAgICAgICAgICAgICBSQUlERnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX1JBSURfRlVOQ1RJT04sCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDVElPTl9TVEFSVF9SQUlEX0ZVTkNUSU9OLAorICBNcGkyUmFpZEFjdGlvblN0YXJ0UmFpZEZ1bmN0aW9uX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRBY3Rpb25TdGFydFJhaWRGdW5jdGlvbl90OworCisvKiBkZWZpbmVzIGZvciB0aGUgUkFJREZ1bmN0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fU1RBUlRfQkFDS0dST1VORF9JTklUICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fU1RBUlRfT05MSU5FX0NBUF9FWFBBTlNJT04gKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fU1RBUlRfQ09OU0lTVEVOQ1lfQ0hFQ0sgICAgKDB4MDIpCisKKy8qIGRlZmluZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX05FVyAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX1JFU1VNRSAgICAgICAgICAgICAgICgweDAxKQorCisvKiBBY3Rpb25EYXRhV29yZCBmb3IgTVBJMl9SQUlEX0FDVElPTl9TVE9QX1JBSURfRlVOQ1RJT04gQWN0aW9uICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDVElPTl9TVE9QX1JBSURfRlVOQ1RJT04KK3sKKyAgICBVOCAgICAgICAgICAgICAgUkFJREZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9SQUlEX0FDVElPTl9TVE9QX1JBSURfRlVOQ1RJT04sCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDVElPTl9TVE9QX1JBSURfRlVOQ1RJT04sCisgIE1waTJSYWlkQWN0aW9uU3RvcFJhaWRGdW5jdGlvbl90LAorICBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uU3RvcFJhaWRGdW5jdGlvbl90OworCisvKiBkZWZpbmVzIGZvciB0aGUgUkFJREZ1bmN0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fU1RPUF9CQUNLR1JPVU5EX0lOSVQgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fU1RPUF9PTkxJTkVfQ0FQX0VYUEFOU0lPTiAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fU1RPUF9DT05TSVNURU5DWV9DSEVDSyAgICAgKDB4MDIpCisKKy8qIGRlZmluZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUT1BfQUJPUlQgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUT1BfUEFVU0UgICAgICAgICAgICAgICAgICgweDAxKQorCisvKiBBY3Rpb25EYXRhV29yZCBmb3IgTVBJMl9SQUlEX0FDVElPTl9DUkVBVEVfSE9UX1NQQVJFIEFjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ1RJT05fSE9UX1NQQVJFCit7CisgICAgVTggICAgICAgICAgICAgIEhvdFNwYXJlUG9vbDsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfUkFJRF9BQ1RJT05fSE9UX1NQQVJFLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ1RJT05fSE9UX1NQQVJFLAorICBNcGkyUmFpZEFjdGlvbkhvdFNwYXJlX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRBY3Rpb25Ib3RTcGFyZV90OworCisvKiBBY3Rpb25EYXRhV29yZCBmb3IgTVBJMl9SQUlEX0FDVElPTl9ERVZJQ0VfRldfVVBEQVRFX01PREUgQWN0aW9uICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDVElPTl9GV19VUERBVEVfTU9ERQoreworICAgIFU4ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIERldmljZUZpcm13YXJlVXBkYXRlTW9kZVRpbWVvdXQ7ICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX1JBSURfQUNUSU9OX0ZXX1VQREFURV9NT0RFLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ1RJT05fRldfVVBEQVRFX01PREUsCisgIE1waTJSYWlkQWN0aW9uRndVcGRhdGVNb2RlX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRBY3Rpb25Gd1VwZGF0ZU1vZGVfdDsKKworLyogQWN0aW9uRGF0YVdvcmQgZGVmaW5lcyBmb3IgdXNlIHdpdGggTVBJMl9SQUlEX0FDVElPTl9ERVZJQ0VfRldfVVBEQVRFX01PREUgYWN0aW9uICovCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fQURBVEFfRElTQUJMRV9GV19VUERBVEUgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0FEQVRBX0VOQUJMRV9GV19VUERBVEUgICAgICAgICAoMHgwMSkKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9SQUlEX0FDVElPTl9EQVRBCit7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmQ7CisgICAgTVBJMl9SQUlEX0FDVElPTl9SQVRFX0RBVEEgICAgICAgICAgICAgIFJhdGVzOworICAgIE1QSTJfUkFJRF9BQ1RJT05fU1RBUlRfUkFJRF9GVU5DVElPTiAgICBTdGFydFJhaWRGdW5jdGlvbjsKKyAgICBNUEkyX1JBSURfQUNUSU9OX1NUT1BfUkFJRF9GVU5DVElPTiAgICAgU3RvcFJhaWRGdW5jdGlvbjsKKyAgICBNUEkyX1JBSURfQUNUSU9OX0hPVF9TUEFSRSAgICAgICAgICAgICAgSG90U3BhcmU7CisgICAgTVBJMl9SQUlEX0FDVElPTl9GV19VUERBVEVfTU9ERSAgICAgICAgIEZ3VXBkYXRlTW9kZTsKK30gTVBJMl9SQUlEX0FDVElPTl9EQVRBLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ1RJT05fREFUQSwKKyAgTXBpMlJhaWRBY3Rpb25EYXRhX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRBY3Rpb25EYXRhX3Q7CisKKworLyogUkFJRCBBY3Rpb24gUmVxdWVzdCBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDVElPTl9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVm9sRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tOdW07ICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgTVBJMl9SQUlEX0FDVElPTl9EQVRBICAgQWN0aW9uRGF0YVdvcmQ7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgQWN0aW9uRGF0YVNHRTsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfUkFJRF9BQ1RJT05fUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX1JFUVVFU1QsCisgIE1waTJSYWlkQWN0aW9uUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uUmVxdWVzdF90OworCisvKiBSQUlEIEFjdGlvbiByZXF1ZXN0IEFjdGlvbiB2YWx1ZXMgKi8KKworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0lORElDQVRPUl9TVFJVQ1QgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0NSRUFURV9WT0xVTUUgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0RFTEVURV9WT0xVTUUgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0RJU0FCTEVfQUxMX1ZPTFVNRVMgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0VOQUJMRV9BTExfVk9MVU1FUyAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1BIWVNESVNLX09GRkxJTkUgICAgICAgICAgICgweDBBKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1BIWVNESVNLX09OTElORSAgICAgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0ZBSUxfUEhZU0RJU0sgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0FDVElWQVRFX1ZPTFVNRSAgICAgICAgICAgICgweDExKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0RFVklDRV9GV19VUERBVEVfTU9ERSAgICAgICgweDE1KQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0NIQU5HRV9WT0xfV1JJVEVfQ0FDSEUgICAgICgweDE3KQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NFVF9WT0xVTUVfTkFNRSAgICAgICAgICAgICgweDE4KQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NFVF9SQUlEX0ZVTkNUSU9OX1JBVEUgICAgICgweDE5KQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0VOQUJMRV9GQUlMRURfVk9MVU1FICAgICAgICgweDFDKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0NSRUFURV9IT1RfU1BBUkUgICAgICAgICAgICgweDFEKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0RFTEVURV9IT1RfU1BBUkUgICAgICAgICAgICgweDFFKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NZU1RFTV9TSFVURE9XTl9JTklUSUFURUQgICgweDIwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX1JBSURfRlVOQ1RJT04gICAgICAgICgweDIxKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUT1BfUkFJRF9GVU5DVElPTiAgICAgICAgICgweDIyKQorCisKKy8qIFJBSUQgVm9sdW1lIENyZWF0aW9uIFN0cnVjdHVyZSAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmUgY2FuIGJlIGN1c3RvbWl6ZWQgZm9yIHRoZSB0YXJnZXRlZCBwcm9kdWN0LgorICovCisjaWZuZGVmIE1QSTJfUkFJRF9WT0xfQ1JFQVRJT05fTlVNX1BIWVNESVNLUworI2RlZmluZSBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1MgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfVk9MVU1FX1BIWVNESVNLCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFJRFNldE51bTsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tNYXA7ICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tEZXZIYW5kbGU7ICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfUkFJRF9WT0xVTUVfUEhZU0RJU0ssIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX1ZPTFVNRV9QSFlTRElTSywKKyAgTXBpMlJhaWRWb2x1bWVQaHlzRGlza190LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkVm9sdW1lUGh5c0Rpc2tfdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFBoeXNEaXNrTWFwIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJREFDVElPTl9QSFlTRElTS19QUklNQVJZICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJREFDVElPTl9QSFlTRElTS19TRUNPTkRBUlkgICAgICAgICAgKDB4MDIpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfVk9MVU1FX0NSRUFUSU9OX1NUUlVDVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzRGlza3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVUeXBlOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVDcmVhdGlvbkZsYWdzOyAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTZXR0aW5nczsgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN5bmNSYXRlOyAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2NydWJEdXJhdGlvbjsgICAgICAgICAgLyogMHgwRSAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVNYXhMQkE7ICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpcGVTaXplOyAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lWzE2XTsgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIE1QSTJfUkFJRF9WT0xVTUVfUEhZU0RJU0sgICBQaHlzRGlza1tNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1NdOy8qIDB4MkMgKi8KK30gTVBJMl9SQUlEX1ZPTFVNRV9DUkVBVElPTl9TVFJVQ1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX1ZPTFVNRV9DUkVBVElPTl9TVFJVQ1QsCisgIE1waTJSYWlkVm9sdW1lQ3JlYXRpb25TdHJ1Y3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFZvbHVtZUNyZWF0aW9uU3RydWN0X3Q7CisKKy8qIHVzZSBNUEkyX1JBSURfVk9MX1RZUEVfIGRlZmluZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgVm9sdW1lVHlwZSAqLworCisvKiBkZWZpbmVzIGZvciB0aGUgVm9sdW1lQ3JlYXRpb25GbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX1VTRV9ERUZBVUxUX1NFVFRJTkdTICgweDgwKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX0JBQ0tHUk9VTkRfSU5JVCAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX0xPV19MRVZFTF9JTklUICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX01JR1JBVEVfREFUQSAgICAgICAgICgweDAxKQorCisKKy8qIFJBSUQgT25saW5lIENhcGFjaXR5IEV4cGFuc2lvbiBTdHJ1Y3R1cmUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9PTkxJTkVfQ0FQQUNJVFlfRVhQQU5TSU9OCit7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlMDsgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlMTsgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCit9IE1QSTJfUkFJRF9PTkxJTkVfQ0FQQUNJVFlfRVhQQU5TSU9OLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9PTkxJTkVfQ0FQQUNJVFlfRVhQQU5TSU9OLAorICBNcGkyUmFpZE9ubGluZUNhcGFjaXR5RXhwYW5zaW9uX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRPbmxpbmVDYXBhY2l0eUV4cGFuc2lvbl90OworCisKKy8qIFJBSUQgVm9sdW1lIEluZGljYXRvciBTdHJ1Y3R1cmUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9WT0xfSU5ESUNBVE9SCit7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgVG90YWxCbG9ja3M7ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgQmxvY2tzUmVtYWluaW5nOyAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfUkFJRF9WT0xfSU5ESUNBVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9WT0xfSU5ESUNBVE9SLAorICBNcGkyUmFpZFZvbEluZGljYXRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkVm9sSW5kaWNhdG9yX3Q7CisKKy8qIGRlZmluZXMgZm9yIFJBSUQgVm9sdW1lIEluZGljYXRvciBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURfVk9MX0ZMQUdTX09QX01BU0sgICAgICAgICAgICAgICAgICgweDAwMDAwMDBGKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0ZMQUdTX09QX0JBQ0tHUk9VTkRfSU5JVCAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0ZMQUdTX09QX09OTElORV9DQVBfRVhQQU5TSU9OICgweDAwMDAwMDAxKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0ZMQUdTX09QX0NPTlNJU1RFTkNZX0NIRUNLICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX0ZMQUdTX09QX1JFU1lOQyAgICAgICAgICAgICAgICgweDAwMDAwMDAzKQorCisKKy8qIFJBSUQgQWN0aW9uIFJlcGx5IEFjdGlvbkRhdGEgdW5pb24gKi8KK3R5cGVkZWYgdW5pb24gX01QSTJfUkFJRF9BQ1RJT05fUkVQTFlfREFUQQoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFdvcmRbNV07CisgICAgTVBJMl9SQUlEX1ZPTF9JTkRJQ0FUT1IgUmFpZFZvbHVtZUluZGljYXRvcjsKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBWb2xEZXZIYW5kbGU7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVm9sdW1lU3RhdGU7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tOdW07Cit9IE1QSTJfUkFJRF9BQ1RJT05fUkVQTFlfREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX1JFUExZX0RBVEEsCisgIE1waTJSYWlkQWN0aW9uUmVwbHlEYXRhX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRBY3Rpb25SZXBseURhdGFfdDsKKworLyogdXNlIE1QSTJfUkFJRFZPTDBfU0VUVElOR18gZGVmaW5lcyBmcm9tIG1waTJfY25mZy5oIGZvciBNUEkyX1JBSURfQUNUSU9OX0NIQU5HRV9WT0xfV1JJVEVfQ0FDSEUgYWN0aW9uICovCisKKworLyogUkFJRCBBY3Rpb24gUmVwbHkgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ1RJT05fUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgVm9sRGV2SGFuZGxlOyAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tOdW07ICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBNUEkyX1JBSURfQUNUSU9OX1JFUExZX0RBVEEgQWN0aW9uRGF0YTsgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9SQUlEX0FDVElPTl9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX1JFUExZLAorICBNcGkyUmFpZEFjdGlvblJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRBY3Rpb25SZXBseV90OworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDJiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNyBMU0kgQ29ycG9yYXRpb24uCisgKgorICoKKyAqICAgICAgICAgICBOYW1lOiAgbXBpMl9zYXMuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgU2VyaWFsIEF0dGFjaGVkIFNDU0kgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKKyAqICBDcmVhdGlvbiBEYXRlOiAgRmVicnVhcnkgOSwgMjAwNworICoKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjAyCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAxICBBZGRlZCBDbGVhciBBbGwgUGVyc2lzdGVudCBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgUmVxdWVzdC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDIgIEFkZGVkIFNldCBJT0MgUGFyYW1ldGVyIE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdCBDb250cm9sCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBNUEkyX1NBU19ICisjZGVmaW5lIE1QSTJfU0FTX0gKKworLyoKKyAqIFZhbHVlcyBmb3IgU0FTU3RhdHVzLgorICovCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19VTktOT1dOX0VSUk9SICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfSU5WQUxJRF9GUkFNRSAgICAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1VUQ19CQURfREVTVCAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19VVENfQlJFQUtfUkVDRUlWRUQgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfVVRDX0NPTk5FQ1RfUkFURV9OT1RfU1VQUE9SVEVEICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1VUQ19QT1JUX0xBWUVSX1JFUVVFU1QgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19VVENfUFJPVE9DT0xfTk9UX1NVUFBPUlRFRCAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfVVRDX1NUUF9SRVNPVVJDRVNfQlVTWSAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1VUQ19XUk9OR19ERVNUSU5BVElPTiAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19TSE9SVF9JTkZPUk1BVElPTl9VTklUICAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfTE9OR19JTkZPUk1BVElPTl9VTklUICAgICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1hGRVJfUkRZX0lOQ09SUkVDVF9XUklURV9EQVRBICAgICgweDBDKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19YRkVSX1JEWV9SRVFVRVNUX09GRlNFVF9FUlJPUiAgICAoMHgwRCkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfWEZFUl9SRFlfTk9UX0VYUEVDVEVEICAgICAgICAgICAgKDB4MEUpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX0RBVEFfSU5DT1JSRUNUX0RBVEFfTEVOR1RIICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19EQVRBX1RPT19NVUNIX1JFQURfREFUQSAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfREFUQV9PRkZTRVRfRVJST1IgICAgICAgICAgICAgICAgKDB4MTEpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1NEU0ZfTkFLX1JFQ0VJVkVEICAgICAgICAgICAgICAgICgweDEyKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19TRFNGX0NPTk5FQ1RJT05fRkFJTEVEICAgICAgICAgICAoMHgxMykKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfSU5JVElBVE9SX1JFU1BPTlNFX1RJTUVPVVQgICAgICAgKDB4MTQpCisKKworLyoKKyAqIFZhbHVlcyBmb3IgdGhlIFNBUyBEZXZpY2VJbmZvIGZpZWxkIHVzZWQgaW4gU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50CisgKiBkYXRhIGFuZCBTQVMgQ29uZmlndXJhdGlvbiBwYWdlcy4KKyAqLworI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19TRVAgICAgICAgICAgICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX0FUQVBJX0RFVklDRSAgICAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fTFNJX0RFVklDRSAgICAgICAgICgweDAwMDAxMDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19ESVJFQ1RfQVRUQUNIICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fU1RQX1RBUkdFVCAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19TTVBfVEFSR0VUICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fU1NQX0lOSVRJQVRPUiAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19TVFBfSU5JVElBVE9SICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NNUF9JTklUSUFUT1IgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fU0FUQV9IT1NUICAgICAgICAgICgweDAwMDAwMDA4KQorCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX01BU0tfREVWSUNFX1RZUEUgICAoMHgwMDAwMDAwNykKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fTk9fREVWSUNFICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX0VER0VfRVhQQU5ERVIgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fRkFOT1VUX0VYUEFOREVSICAgICgweDAwMDAwMDAzKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgU0FTIE1lc3NhZ2VzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNNUCBQYXNzdGhyb3VnaCBtZXNzYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU01QIFBhc3N0aHJvdWdoIFJlcXVlc3QgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU01QX1BBU1NUSFJPVUdIX1JFUVVFU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQYXNzdGhyb3VnaEZsYWdzOyAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0RGF0YUxlbmd0aDsgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBNUEkyX1NJTVBMRV9TR0VfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KK30gTVBJMl9TTVBfUEFTU1RIUk9VR0hfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NNUF9QQVNTVEhST1VHSF9SRVFVRVNULAorICBNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIFBhc3N0aHJvdWdoRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TTVBfUFRfUkVRX1BUX0ZMQUdTX0lNTUVESUFURSAgICAgICgweDgwKQorCisvKiB2YWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkIGFyZSBpbiB0aGUgU0dMIHNlY3Rpb24gb2YgbXBpMi5oICovCisKKworLyogU01QIFBhc3N0aHJvdWdoIFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NNUF9QQVNTVEhST1VHSF9SRVBMWQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBhc3N0aHJvdWdoRmxhZ3M7ICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlRGF0YUxlbmd0aDsgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNBU1N0YXR1czsgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlRGF0YVs0XTsgICAgLyogMHgxOCAqLworfSBNUEkyX1NNUF9QQVNTVEhST1VHSF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NNUF9QQVNTVEhST1VHSF9SRVBMWSwKKyAgTXBpMlNtcFBhc3N0aHJvdWdoUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU21wUGFzc3Rocm91Z2hSZXBseV90OworCisvKiB2YWx1ZXMgZm9yIFBhc3N0aHJvdWdoRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TTVBfUFRfUkVQTFlfUFRfRkxBR1NfSU1NRURJQVRFICAgICgweDgwKQorCisvKiB2YWx1ZXMgZm9yIFNBU1N0YXR1cyBmaWVsZCBhcmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0FUQSBQYXNzdGhyb3VnaCBtZXNzYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0FUQSBQYXNzdGhyb3VnaCBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFBhc3N0aHJvdWdoRmxhZ3M7ICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgLyogMHgxOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGSVNbMjBdOyAgICAgLyogMHgxQyAqLworICAgIE1QSTJfU0lNUExFX1NHRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgLyogMHgyMCAqLworfSBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVCwKKyAgTXBpMlNhdGFQYXNzdGhyb3VnaFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2F0YVBhc3N0aHJvdWdoUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIFBhc3N0aHJvdWdoRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVRBX1BUX1JFUV9QVF9GTEFHU19FWEVDVVRFX0RJQUcgICAgICAoMHgwMTAwKQorI2RlZmluZSBNUEkyX1NBVEFfUFRfUkVRX1BUX0ZMQUdTX0RNQSAgICAgICAgICAgICAgICgweDAwMjApCisjZGVmaW5lIE1QSTJfU0FUQV9QVF9SRVFfUFRfRkxBR1NfUElPICAgICAgICAgICAgICAgKDB4MDAxMCkKKyNkZWZpbmUgTVBJMl9TQVRBX1BUX1JFUV9QVF9GTEFHU19VTlNQRUNJRklFRF9WVSAgICAoMHgwMDA0KQorI2RlZmluZSBNUEkyX1NBVEFfUFRfUkVRX1BUX0ZMQUdTX1dSSVRFICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FUQV9QVF9SRVFfUFRfRkxBR1NfUkVBRCAgICAgICAgICAgICAgKDB4MDAwMSkKKworLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworCisKKy8qIFNBVEEgUGFzc3Rocm91Z2ggUmVwbHkgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFBhc3N0aHJvdWdoRmxhZ3M7ICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNBU1N0YXR1czsgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c0ZJU1syMF07ICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFN0YXR1c0NvbnRyb2xSZWdpc3RlcnM7IC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlckNvdW50OyAgICAgIC8qIDB4MkMgKi8KK30gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVBMWSwKKyAgTXBpMlNhdGFQYXNzdGhyb3VnaFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhdGFQYXNzdGhyb3VnaFJlcGx5X3Q7CisKKy8qIHZhbHVlcyBmb3IgU0FTU3RhdHVzIGZpZWxkIGFyZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZSAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTQVMgSU8gVW5pdCBDb250cm9sIG1lc3NhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQVMgSU8gVW5pdCBDb250cm9sIFJlcXVlc3QgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTX0lPVU5JVF9DT05UUk9MX1JFUVVFU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb247ICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJT0NQYXJhbWV0ZXI7ICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQcmltRmxhZ3M7ICAgICAgICAgIC8qIDB4MEYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBQcmltaXRpdmU7ICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBMb29rdXBNZXRob2Q7ICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTbG90TnVtYmVyOyAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBMb29rdXBBZGRyZXNzOyAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NQYXJhbWV0ZXJWYWx1ZTsgIC8qIDB4MjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgIC8qIDB4MjggKi8KK30gTVBJMl9TQVNfSU9VTklUX0NPTlRST0xfUkVRVUVTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBU19JT1VOSVRfQ09OVFJPTF9SRVFVRVNULAorICBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciB0aGUgT3BlcmF0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX09QX0NMRUFSX0FMTF9QRVJTSVNURU5UICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQgICAgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVCAgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfU0FTX09QX1BIWV9DTEVBUl9FUlJPUl9MT0cgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQVNfT1BfU0VORF9QUklNSVRJVkUgICAgICAgICAgICAgICgweDBBKQorI2RlZmluZSBNUEkyX1NBU19PUF9GT1JDRV9GVUxMX0RJU0NPVkVSWSAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfU0FTX09QX1RSQU5TTUlUX1BPUlRfU0VMRUNUX1NJR05BTCAoMHgwQykKKyNkZWZpbmUgTVBJMl9TQVNfT1BfUkVNT1ZFX0RFVklDRSAgICAgICAgICAgICAgICgweDBEKQorI2RlZmluZSBNUEkyX1NBU19PUF9MT09LVVBfTUFQUElORyAgICAgICAgICAgICAgKDB4MEUpCisjZGVmaW5lIE1QSTJfU0FTX09QX1NFVF9JT0NfUEFSQU1FVEVSICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9TQVNfT1BfUFJPRFVDVF9TUEVDSUZJQ19NSU4gICAgICAgICgweDgwKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBQcmltRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfUFJJTUZMQUdTX1NJTkdMRSAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU19QUklNRkxBR1NfVFJJUExFICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTX1BSSU1GTEFHU19SRURVTkRBTlQgICAgICAgICAgICAoMHgwMSkKKworLyogdmFsdWVzIGZvciB0aGUgTG9va3VwTWV0aG9kIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0xPT0tVUF9NRVRIT0RfU0FTX0FERFJFU1MgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTX0xPT0tVUF9NRVRIT0RfU0FTX0VOQ0xPU1VSRV9TTE9UICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTX0xPT0tVUF9NRVRIT0RfU0FTX0RFVklDRV9OQU1FICAgICAgKDB4MDMpCisKKworLyogU0FTIElPIFVuaXQgQ29udHJvbCBSZXBseSBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNfSU9VTklUX0NPTlRST0xfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb247ICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJT0NQYXJhbWV0ZXI7ICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9TQVNfSU9VTklUX0NPTlRST0xfUkVQTFksCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNfSU9VTklUX0NPTlRST0xfUkVQTFksCisgIE1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3Q7CisKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjRlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggTFNJIENvcnBvcmF0aW9uLgorICoKKyAqCisgKiAgICAgICAgICAgTmFtZTogIG1waTJfdG9vbC5oCisgKiAgICAgICAgICBUaXRsZTogIE1QSSBkaWFnbm9zdGljIHRvb2wgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKKyAqICBDcmVhdGlvbiBEYXRlOiAgTWFyY2ggMjYsIDIwMDcKKyAqCisgKiAgICBtcGkyX3Rvb2wuaCBWZXJzaW9uOiAgMDIuMDAuMDIKKyAqCisgKiAgVmVyc2lvbiBIaXN0b3J5CisgKiAgLS0tLS0tLS0tLS0tLS0tCisgKgorICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KKyAqICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDEgIEFkZGVkIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgYW5kIERpYWdub3N0aWMgUmVsZWFzZQorICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE1QSTJfVE9PTF9ICisjZGVmaW5lIE1QSTJfVE9PTF9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgICAgICAgIFRvb2xib3ggTWVzc2FnZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBkZWZpbmVzIGZvciB0aGUgVG9vbHMgKi8KKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX1RPT0wgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX01FTU9SWV9NT1ZFX1RPT0wgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0JFQUNPTl9UT09MICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFRvb2xib3ggcmVwbHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX1RPT0xCT1hfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX1JFUExZLAorICBNcGkyVG9vbGJveFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hSZXBseV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IENsZWFuIFRvb2wgcmVxdWVzdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9DTEVBTl9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgfSBNUEkyX1RPT0xCT1hfQ0xFQU5fUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfQ0xFQU5fUkVRVUVTVCwKKyAgTXBpMlRvb2xib3hDbGVhblJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveENsZWFuUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fQk9PVF9TRVJWSUNFUyAgICAgICAgICAgICgweDgwMDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fUEVSU0lTVF9NQU5VRkFDVF9QQUdFUyAgICgweDQwMDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fT1RIRVJfUEVSU0lTVF9QQUdFUyAgICAgICgweDIwMDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fRldfQ1VSUkVOVCAgICAgICAgICAgICAgICgweDEwMDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fRldfQkFDS1VQICAgICAgICAgICAgICAgICgweDA4MDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fTUVHQVJBSUQgICAgICAgICAgICAgICAgICgweDAyMDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fSU5JVElBTElaQVRJT04gICAgICAgICAgICgweDAxMDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fRkxBU0ggICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fU0VFUFJPTSAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fTlZTUkFNICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IE1lbW9yeSBNb3ZlIHJlcXVlc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfTUVNX01PVkVfUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KK30gTVBJMl9UT09MQk9YX01FTV9NT1ZFX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX01FTV9NT1ZFX1JFUVVFU1QsCisgIE1waTJUb29sYm94TWVtTW92ZVJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveE1lbU1vdmVSZXF1ZXN0X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFRvb2xib3ggQmVhY29uIFRvb2wgcmVxdWVzdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9CRUFDT05fUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEYgKi8KK30gTVBJMl9UT09MQk9YX0JFQUNPTl9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9CRUFDT05fUkVRVUVTVCwKKyAgTXBpMlRvb2xib3hCZWFjb25SZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hCZWFjb25SZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9GTEFHU19CRUFDT05NT0RFX09GRiAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0ZMQUdTX0JFQUNPTk1PREVfT04gICAgICAgICgweDAxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICBEaWFnbm9zdGljIEJ1ZmZlciBNZXNzYWdlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgcmVxdWVzdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRElBR19CVUZGRVJfUE9TVF9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJUeXBlOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBCdWZmZXJBZGRyZXNzOyAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aDsgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdFNwZWNpZmljWzIzXTsgICAgICAgIC8qIDB4MjQgKi8KK30gTVBJMl9ESUFHX0JVRkZFUl9QT1NUX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ESUFHX0JVRkZFUl9QT1NUX1JFUVVFU1QsCisgIE1waTJEaWFnQnVmZmVyUG9zdFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGlhZ0J1ZmZlclBvc3RSZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIEJ1ZmZlclR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9ESUFHX0JVRl9UWVBFX1RSQUNFICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9ESUFHX0JVRl9UWVBFX1NOQVBTSE9UICAgICAgICAgICAgICAgICAoMHgwMSkKKy8qIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYnVmZmVyIHR5cGVzICovCisjZGVmaW5lIE1QSTJfRElBR19CVUZfVFlQRV9DT1VOVCAgICAgICAgICAgICAgICAgICAgKDB4MDIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgcmVwbHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0RJQUdfQlVGRkVSX1BPU1RfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclR5cGU7ICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoOyAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfRElBR19CVUZGRVJfUE9TVF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RJQUdfQlVGRkVSX1BPU1RfUkVQTFksCisgIE1waTJEaWFnQnVmZmVyUG9zdFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRpYWdCdWZmZXJQb3N0UmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRGlhZ25vc3RpYyBSZWxlYXNlIHJlcXVlc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0RJQUdfUkVMRUFTRV9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJUeXBlOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KK30gTVBJMl9ESUFHX1JFTEVBU0VfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RJQUdfUkVMRUFTRV9SRVFVRVNULAorICBNcGkyRGlhZ1JlbGVhc2VSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRpYWdSZWxlYXNlUmVxdWVzdF90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IHJlcGx5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9ESUFHX1JFTEVBU0VfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclR5cGU7ICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX0RJQUdfUkVMRUFTRV9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RJQUdfUkVMRUFTRV9SRVBMWSwKKyAgTXBpMkRpYWdSZWxlYXNlUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGlhZ1JlbGVhc2VSZXBseV90OworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90eXBlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkZTAxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3R5cGUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA3IExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKgorICogICAgICAgICAgIE5hbWU6ICBtcGkyX3R5cGUuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgYmFzaWMgdHlwZSBkZWZpbml0aW9ucworICogIENyZWF0aW9uIERhdGU6ICBBdWd1c3QgMTYsIDIwMDYKKyAqCisgKiAgICBtcGkyX3R5cGUuaCBWZXJzaW9uOiAgMDIuMDAuMDAKKyAqCisgKiAgVmVyc2lvbiBIaXN0b3J5CisgKiAgLS0tLS0tLS0tLS0tLS0tCisgKgorICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KKyAqICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgTVBJMl9UWVBFX0gKKyNkZWZpbmUgTVBJMl9UWVBFX0gKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5lIE1QSTJfUE9JTlRFUiBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEJ5IGRlZmF1bHQKKyAqIE1QSTJfUE9JTlRFUiBpcyBkZWZpbmVkIHRvIGJlIGEgbmVhciBwb2ludGVyLiBNUEkyX1BPSU5URVIgY2FuIGJlIGRlZmluZWQgYXMKKyAqIGEgZmFyIHBvaW50ZXIgYnkgZGVmaW5pbmcgTVBJMl9QT0lOVEVSIGFzICJmYXIgKiIgYmVmb3JlIHRoaXMgaGVhZGVyIGZpbGUgaXMKKyAqIGluY2x1ZGVkLgorICovCisjaWZuZGVmIE1QSTJfUE9JTlRFUgorI2RlZmluZSBNUEkyX1BPSU5URVIgICAgICoKKyNlbmRpZgorCisvKiB0aGUgYmFzaWMgdHlwZXMgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGluY2x1ZGVkIGJ5IG1waV90eXBlLmggKi8KKyNpZm5kZWYgTVBJX1RZUEVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICAgICAgICAgQmFzaWMgVHlwZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHU4IFU4OwordHlwZWRlZiBfX2xlMTYgVTE2OwordHlwZWRlZiBfX2xlMzIgVTMyOwordHlwZWRlZiBfX2xlNjQgVTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICAgICAgICAgUG9pbnRlciBUeXBlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgVTggICAgICAqUFU4OwordHlwZWRlZiBVMTYgICAgICpQVTE2OwordHlwZWRlZiBVMzIgICAgICpQVTMyOwordHlwZWRlZiBVNjQgICAgICpQVTY0OworCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0MjdhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0wLDAgKzEsMzQzNSBAQAorLyoKKyAqIFRoaXMgaXMgdGhlIEZ1c2lvbiBNUFQgYmFzZSBkcml2ZXIgcHJvdmlkaW5nIGNvbW1vbiBBUEkgbGF5ZXIgaW50ZXJmYWNlCisgKiBmb3IgYWNjZXNzIHRvIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuYworICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICogQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAqIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgKiBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgKiBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKKyAqIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAqIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisgKiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICogTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgKiBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgIm1wdDJzYXNfYmFzZS5oIgorCitzdGF0aWMgTVBUX0NBTExCQUNLCW1wdF9jYWxsYmFja3NbTVBUX01BWF9DQUxMQkFDS1NdOworCisjZGVmaW5lIEZBVUxUX1BPTExJTkdfSU5URVJWQUwgMTAwMCAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA1MDAgLyogbWF4aW11bSBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICovCisKK3N0YXRpYyBpbnQgbWF4X3F1ZXVlX2RlcHRoID0gLTE7Cittb2R1bGVfcGFyYW0obWF4X3F1ZXVlX2RlcHRoLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcXVldWVfZGVwdGgsICIgbWF4IGNvbnRyb2xsZXIgcXVldWUgZGVwdGggIik7CisKK3N0YXRpYyBpbnQgbWF4X3NnbF9lbnRyaWVzID0gLTE7Cittb2R1bGVfcGFyYW0obWF4X3NnbF9lbnRyaWVzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc2dsX2VudHJpZXMsICIgbWF4IHNnIGVudHJpZXMgIik7CisKK3N0YXRpYyBpbnQgbXNpeF9kaXNhYmxlID0gLTE7Cittb2R1bGVfcGFyYW0obXNpeF9kaXNhYmxlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtc2l4X2Rpc2FibGUsICIgZGlzYWJsZSBtc2l4IHJvdXRlZCBpbnRlcnJ1cHRzIChkZWZhdWx0PTApIik7CisKKy8qKgorICogX2Jhc2VfZmF1bHRfcmVzZXRfd29yayAtIHdvcmtxIGhhbmRsaW5nIGlvYyBmYXVsdCBjb25kaXRpb25zCisgKiBAd29yazogaW5wdXQgYXJndW1lbnQsIHVzZWQgdG8gZGVyaXZlIGlvYworICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9mYXVsdF9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IE1QVDJTQVNfQURBUFRFUiwgZmF1bHRfcmVzZXRfd29yay53b3JrKTsKKwl1bnNpZ25lZCBsb25nCSBmbGFnczsKKwl1MzIgZG9vcmJlbGw7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpCisJCWdvdG8gcmVhcm1fdGltZXI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCisJZG9vcmJlbGwgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMCk7CisJaWYgKChkb29yYmVsbCAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09IE1QSTJfSU9DX1NUQVRFX0ZBVUxUKSB7CisJCXJjID0gbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKKwkJICAgIEZPUkNFX0JJR19IQU1NRVIpOworCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiJXM6IGhhcmQgcmVzZXQ6ICVzXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgKHJjID09IDApID8gInN1Y2Nlc3MiIDogImZhaWxlZCIpOworCQlkb29yYmVsbCA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAwKTsKKwkJaWYgKChkb29yYmVsbCAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09IE1QSTJfSU9DX1NUQVRFX0ZBVUxUKQorCQkJbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8oaW9jLCBkb29yYmVsbCAmCisJCQkgICAgTVBJMl9ET09SQkVMTF9EQVRBX01BU0spOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisgcmVhcm1fdGltZXI6CisJaWYgKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoaW9jLT5mYXVsdF9yZXNldF93b3JrX3EsCisJCSAgICAmaW9jLT5mYXVsdF9yZXNldF93b3JrLAorCQkgICAgbXNlY3NfdG9famlmZmllcyhGQVVMVF9QT0xMSU5HX0lOVEVSVkFMKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9iYXNlX3Nhc19pb2NfaW5mbyAtIHZlcmJvc2UgdHJhbnNsYXRpb24gb2YgdGhlIGlvYyBzdGF0dXMKKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAcmVxdWVzdF9oZHI6IHJlcXVlc3QgbWYKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX3Nhc19pb2NfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5LAorICAgICBNUEkyUmVxdWVzdEhlYWRlcl90ICpyZXF1ZXN0X2hkcikKK3sKKwl1MTYgaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJY2hhciAqZGVzYyA9IE5VTEw7CisJdTE2IGZyYW1lX3N6OworCWNoYXIgKmZ1bmNfc3RyID0gTlVMTDsKKworCS8qIFNDU0lfSU8sIFJBSURfUEFTUyBhcmUgaGFuZGxlZCBmcm9tIF9zY3NpaF9zY3NpX2lvY19pbmZvICovCisJaWYgKHJlcXVlc3RfaGRyLT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fAorCSAgICByZXF1ZXN0X2hkci0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0ggfHwKKwkgICAgcmVxdWVzdF9oZHItPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGlvY19zdGF0dXMpIHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvbW1vbiBJT0NTdGF0dXMgdmFsdWVzIGZvciBhbGwgcmVwbGllcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9GVU5DVElPTjoKKwkJZGVzYyA9ICJpbnZhbGlkIGZ1bmN0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19CVVNZOgorCQlkZXNjID0gImJ1c3kiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfU0dMOgorCQlkZXNjID0gImludmFsaWQgc2dsIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlRFUk5BTF9FUlJPUjoKKwkJZGVzYyA9ICJpbnRlcm5hbCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9WUElEOgorCQlkZXNjID0gImludmFsaWQgdnBpZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzoKKwkJZGVzYyA9ICJpbnN1ZmZpY2llbnQgcmVzb3VyY2VzIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX0ZJRUxEOgorCQlkZXNjID0gImludmFsaWQgZmllbGQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfU1RBVEU6CisJCWRlc2MgPSAiaW52YWxpZCBzdGF0ZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfT1BfU1RBVEVfTk9UX1NVUFBPUlRFRDoKKwkJZGVzYyA9ICJvcCBzdGF0ZSBub3Qgc3VwcG9ydGVkIjsKKwkJYnJlYWs7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb25maWcgSU9DU3RhdHVzIHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfQUNUSU9OOgorCQlkZXNjID0gImNvbmZpZyBpbnZhbGlkIGFjdGlvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfVFlQRToKKwkJZGVzYyA9ICJjb25maWcgaW52YWxpZCB0eXBlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFOgorCQlkZXNjID0gImNvbmZpZyBpbnZhbGlkIHBhZ2UiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX0RBVEE6CisJCWRlc2MgPSAiY29uZmlnIGludmFsaWQgZGF0YSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQ09ORklHX05PX0RFRkFVTFRTOgorCQlkZXNjID0gImNvbmZpZyBubyBkZWZhdWx0cyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0NBTlRfQ09NTUlUOgorCQlkZXNjID0gImNvbmZpZyBjYW50IGNvbW1pdCI7CisJCWJyZWFrOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0NTSSBJTyBSZXBseQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9SRUNPVkVSRURfRVJST1I6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lOVkFMSURfREVWSEFORExFOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9ERVZJQ0VfTk9UX1RIRVJFOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX09WRVJSVU46CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfVU5ERVJSVU46CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lPX0RBVEFfRVJST1I6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1BST1RPQ09MX0VSUk9SOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9UQVNLX1RFUk1JTkFURUQ6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1JFU0lEVUFMX01JU01BVENIOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9UQVNLX01HTVRfRkFJTEVEOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT0NfVEVSTUlOQVRFRDoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfRVhUX1RFUk1JTkFURUQ6CisJCWJyZWFrOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRm9yIHVzZSBieSBTQ1NJIEluaXRpYXRvciBhbmQgU0NTSSBUYXJnZXQgZW5kLXRvLWVuZCBkYXRhIHByb3RlY3Rpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0VFRFBfR1VBUkRfRVJST1I6CisJCWRlc2MgPSAiZWVkcCBndWFyZCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfRUVEUF9SRUZfVEFHX0VSUk9SOgorCQlkZXNjID0gImVlZHAgcmVmIHRhZyBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfRUVEUF9BUFBfVEFHX0VSUk9SOgorCQlkZXNjID0gImVlZHAgYXBwIHRhZyBlcnJvciI7CisJCWJyZWFrOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0NTSSBUYXJnZXQgdmFsdWVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfSU5WQUxJRF9JT19JTkRFWDoKKwkJZGVzYyA9ICJ0YXJnZXQgaW52YWxpZCBpbyBpbmRleCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0FCT1JURUQ6CisJCWRlc2MgPSAidGFyZ2V0IGFib3J0ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9OT19DT05OX1JFVFJZQUJMRToKKwkJZGVzYyA9ICJ0YXJnZXQgbm8gY29ubiByZXRyeWFibGUiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9OT19DT05ORUNUSU9OOgorCQlkZXNjID0gInRhcmdldCBubyBjb25uZWN0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfWEZFUl9DT1VOVF9NSVNNQVRDSDoKKwkJZGVzYyA9ICJ0YXJnZXQgeGZlciBjb3VudCBtaXNtYXRjaCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0RBVEFfT0ZGU0VUX0VSUk9SOgorCQlkZXNjID0gInRhcmdldCBkYXRhIG9mZnNldCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX1RPT19NVUNIX1dSSVRFX0RBVEE6CisJCWRlc2MgPSAidGFyZ2V0IHRvbyBtdWNoIHdyaXRlIGRhdGEiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9JVV9UT09fU0hPUlQ6CisJCWRlc2MgPSAidGFyZ2V0IGl1IHRvbyBzaG9ydCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0FDS19OQUtfVElNRU9VVDoKKwkJZGVzYyA9ICJ0YXJnZXQgYWNrIG5hayB0aW1lb3V0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfTkFLX1JFQ0VJVkVEOgorCQlkZXNjID0gInRhcmdldCBuYWsgcmVjZWl2ZWQiOworCQlicmVhazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNlcmlhbCBBdHRhY2hlZCBTQ1NJIHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0FTX1NNUF9SRVFVRVNUX0ZBSUxFRDoKKwkJZGVzYyA9ICJzbXAgcmVxdWVzdCBmYWlsZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NBU19TTVBfREFUQV9PVkVSUlVOOgorCQlkZXNjID0gInNtcCBkYXRhIG92ZXJydW4iOworCQlicmVhazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgLyBEaWFnbm9zdGljIFJlbGVhc2UgdmFsdWVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19ESUFHTk9TVElDX1JFTEVBU0VEOgorCQlkZXNjID0gImRpYWdub3N0aWMgcmVsZWFzZWQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoIWRlc2MpCisJCXJldHVybjsKKworCXN3aXRjaCAocmVxdWVzdF9oZHItPkZ1bmN0aW9uKSB7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzoKKwkJZnJhbWVfc3ogPSBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkgKyBpb2MtPnNnZV9zaXplOworCQlmdW5jX3N0ciA9ICJjb25maWdfcGFnZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVDoKKwkJZnJhbWVfc3ogPSBzaXplb2YoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCk7CisJCWZ1bmNfc3RyID0gInRhc2tfbWdtdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOgorCQlmcmFtZV9zeiA9IHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCk7CisJCWZ1bmNfc3RyID0gInNhc19pb3VuaXRfY3RsIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1NDU0lfRU5DTE9TVVJFX1BST0NFU1NPUjoKKwkJZnJhbWVfc3ogPSBzaXplb2YoTXBpMlNlcFJlcXVlc3RfdCk7CisJCWZ1bmNfc3RyID0gImVuY2xvc3VyZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9JT0NfSU5JVDoKKwkJZnJhbWVfc3ogPSBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpOworCQlmdW5jX3N0ciA9ICJpb2NfaW5pdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9QT1JUX0VOQUJMRToKKwkJZnJhbWVfc3ogPSBzaXplb2YoTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QpOworCQlmdW5jX3N0ciA9ICJwb3J0X2VuYWJsZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g6CisJCWZyYW1lX3N6ID0gc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkgKyBpb2MtPnNnZV9zaXplOworCQlmdW5jX3N0ciA9ICJzbXBfcGFzc3RocnUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcmFtZV9zeiA9IDMyOworCQlmdW5jX3N0ciA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgImlvY19zdGF0dXM6ICVzKDB4JTA0eCksIHJlcXVlc3QoMHglcCksIgorCSAgICAiICglcylcbiIsIGlvYy0+bmFtZSwgZGVzYywgaW9jX3N0YXR1cywgcmVxdWVzdF9oZHIsIGZ1bmNfc3RyKTsKKworCV9kZWJ1Z19kdW1wX21mKHJlcXVlc3RfaGRyLCBmcmFtZV9zei80KTsKK30KKworLyoqCisgKiBfYmFzZV9kaXNwbGF5X2V2ZW50X2RhdGEgLSB2ZXJib3NlIHRyYW5zbGF0aW9uIG9mIGZpcm13YXJlIGFzeW4gZXZlbnRzCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfZGlzcGxheV9ldmVudF9kYXRhKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHkpCit7CisJY2hhciAqZGVzYyA9IE5VTEw7CisJdTE2IGV2ZW50OworCisJaWYgKCEoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UUykpCisJCXJldHVybjsKKworCWV2ZW50ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FdmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNUEkyX0VWRU5UX0xPR19EQVRBOgorCQlkZXNjID0gIkxvZyBEYXRhIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NUQVRFX0NIQU5HRToKKwkJZGVzYyA9ICJTdGF0dXMgQ2hhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0hBUkRfUkVTRVRfUkVDRUlWRUQ6CisJCWRlc2MgPSAiSGFyZCBSZXNldCBSZWNlaXZlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9FVkVOVF9DSEFOR0U6CisJCWRlc2MgPSAiRXZlbnQgQ2hhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEw6CisJCWRlc2MgPSAiVGFzayBTZXQgRnVsbCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0U6CisJCWRlc2MgPSAiRGV2aWNlIFN0YXR1cyBDaGFuZ2UiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUzoKKwkJZGVzYyA9ICJJUiBPcGVyYXRpb24gU3RhdHVzIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ESVNDT1ZFUlk6CisJCWRlc2MgPSAgIkRpc2NvdmVyeSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfQlJPQURDQVNUX1BSSU1JVElWRToKKwkJZGVzYyA9ICJTQVMgQnJvYWRjYXN0IFByaW1pdGl2ZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfSU5JVF9ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwkJZGVzYyA9ICJTQVMgSW5pdCBEZXZpY2UgU3RhdHVzIENoYW5nZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVzoKKwkJZGVzYyA9ICJTQVMgSW5pdCBUYWJsZSBPdmVyZmxvdyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT0xPR1lfQ0hBTkdFX0xJU1Q6CisJCWRlc2MgPSAiU0FTIFRvcG9sb2d5IENoYW5nZSBMaXN0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCQlkZXNjID0gIlNBUyBFbmNsb3N1cmUgRGV2aWNlIFN0YXR1cyBDaGFuZ2UiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfVk9MVU1FOgorCQlkZXNjID0gIklSIFZvbHVtZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLOgorCQlkZXNjID0gIklSIFBoeXNpY2FsIERpc2siOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVDoKKwkJZGVzYyA9ICJJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRDoKKwkJZGVzYyA9ICJMb2cgRW50cnkgQWRkZWQiOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRlc2MpCisJCXJldHVybjsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLCBkZXNjKTsKK30KKyNlbmRpZgorCisvKioKKyAqIF9iYXNlX3Nhc19sb2dfaW5mbyAtIHZlcmJvc2UgdHJhbnNsYXRpb24gb2YgZmlybXdhcmUgbG9nIGluZm8KKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQGxvZ19pbmZvOiBsb2cgaW5mbworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2Vfc2FzX2xvZ19pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyAsIHUzMiBsb2dfaW5mbykKK3sKKwl1bmlvbiBsb2dpbmZvX3R5cGUgeworCQl1MzIJbG9naW5mbzsKKwkJc3RydWN0IHsKKwkJCXUzMglzdWJjb2RlOjE2OworCQkJdTMyCWNvZGU6ODsKKwkJCXUzMglvcmlnaW5hdG9yOjQ7CisJCQl1MzIJYnVzX3R5cGU6NDsKKwkJfSBkdzsKKwl9OworCXVuaW9uIGxvZ2luZm9fdHlwZSBzYXNfbG9naW5mbzsKKwljaGFyICpvcmlnaW5hdG9yX3N0ciA9IE5VTEw7CisKKwlzYXNfbG9naW5mby5sb2dpbmZvID0gbG9nX2luZm87CisJaWYgKHNhc19sb2dpbmZvLmR3LmJ1c190eXBlICE9IDMgLypTQVMqLykKKwkJcmV0dXJuOworCisJLyogZWF0IHRoZSBsb2dpbmZvcyBhc3NvY2lhdGVkIHdpdGggdGFzayBhYm9ydHMgKi8KKwlpZiAoaW9jLT5pZ25vcmVfbG9naW5mb3MgJiYgKGxvZ19pbmZvID09IDMwMDUwMDAwIHx8IGxvZ19pbmZvID09CisJICAgIDB4MzExNDAwMDAgfHwgbG9nX2luZm8gPT0gMHgzMTEzMDAwMCkpCisJCXJldHVybjsKKworCXN3aXRjaCAoc2FzX2xvZ2luZm8uZHcub3JpZ2luYXRvcikgeworCWNhc2UgMDoKKwkJb3JpZ2luYXRvcl9zdHIgPSAiSU9QIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlvcmlnaW5hdG9yX3N0ciA9ICJQTCI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJb3JpZ2luYXRvcl9zdHIgPSAiSVIiOworCQlicmVhazsKKwl9CisKKwlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAibG9nX2luZm8oMHglMDh4KTogb3JpZ2luYXRvciglcyksICIKKwkgICAgImNvZGUoMHglMDJ4KSwgc3ViX2NvZGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBsb2dfaW5mbywKKwkgICAgIG9yaWdpbmF0b3Jfc3RyLCBzYXNfbG9naW5mby5kdy5jb2RlLAorCSAgICAgc2FzX2xvZ2luZm8uZHcuc3ViY29kZSk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8gLSB2ZXJib3NlIHRyYW5zbGF0aW9uIG9mIGZpcm13YXJlIEZBVUxUIGNvZGUKKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQGZhdWx0X2NvZGU6IGZhdWx0IGNvZGUKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jICwgdTE2IGZhdWx0X2NvZGUpCit7CisJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmF1bHRfc3RhdGUoMHglMDR4KSFcbiIsCisJICAgIGlvYy0+bmFtZSwgZmF1bHRfY29kZSk7Cit9CisKKy8qKgorICogX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvIC0KKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCisgICAgdTMyIHJlcGx5KQoreworCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKTsKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoKGlvY19zdGF0dXMgJiBNUEkyX0lPQ1NUQVRVU19NQVNLKSAmJgorCSAgICAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1JFUExZKSkgeworCQlfYmFzZV9zYXNfaW9jX2luZm8oaW9jICwgbXBpX3JlcGx5LAorCQkgICBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpKTsKKwl9CisjZW5kaWYKKwlpZiAoaW9jX3N0YXR1cyAmIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFKQorCQlfYmFzZV9zYXNfbG9nX2luZm8oaW9jLCBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZG9uZSAtIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBjb21wbGV0aW9uIHJvdXRpbmUKKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit7CisJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CisKKwltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwlpZiAobXBpX3JlcGx5ICYmIG1waV9yZXBseS0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9FVkVOVF9BQ0spCisJCXJldHVybjsKKworCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCisJCXJldHVybjsKKworCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKKwlpZiAobXBpX3JlcGx5KSB7CisJCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVBMWV9WQUxJRDsKKwkJbWVtY3B5KGlvYy0+YmFzZV9jbWRzLnJlcGx5LCBtcGlfcmVwbHksIG1waV9yZXBseS0+TXNnTGVuZ3RoKjQpOworCX0KKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CisJY29tcGxldGUoJmlvYy0+YmFzZV9jbWRzLmRvbmUpOworfQorCisvKioKKyAqIF9iYXNlX2FzeW5jX2V2ZW50IC0gbWFpbiBjYWxsYmFjayBoYW5kbGVyIGZvciBmaXJtd2FyZSBhc3luIGV2ZW50cworICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfYXN5bmNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQoreworCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseTsKKwlNcGkyRXZlbnRBY2tSZXF1ZXN0X3QgKmFja19yZXF1ZXN0OworCXUxNiBzbWlkOworCisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaWYgKCFtcGlfcmVwbHkpCisJCXJldHVybjsKKwlpZiAobXBpX3JlcGx5LT5GdW5jdGlvbiAhPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTikKKwkJcmV0dXJuOworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCV9iYXNlX2Rpc3BsYXlfZXZlbnRfZGF0YShpb2MsIG1waV9yZXBseSk7CisjZW5kaWYKKwlpZiAoIShtcGlfcmVwbHktPkFja1JlcXVpcmVkICYgTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fQUNLX1JFUVVJUkVEKSkKKwkJZ290byBvdXQ7CisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+YmFzZV9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJYWNrX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCW1lbXNldChhY2tfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJFdmVudEFja1JlcXVlc3RfdCkpOworCWFja19yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRVZFTlRfQUNLOworCWFja19yZXF1ZXN0LT5FdmVudCA9IG1waV9yZXBseS0+RXZlbnQ7CisJYWNrX3JlcXVlc3QtPkV2ZW50Q29udGV4dCA9IG1waV9yZXBseS0+RXZlbnRDb250ZXh0OworCWFja19yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCisgb3V0OgorCisJLyogc2NzaWggY2FsbGJhY2sgaGFuZGxlciAqLworCW1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soaW9jLCBWRl9JRCwgcmVwbHkpOworCisJLyogY3RsIGNhbGxiYWNrIGhhbmRsZXIgKi8KKwltcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhpb2MsIFZGX0lELCByZXBseSk7Cit9CisKKy8qKgorICogX2Jhc2VfbWFza19pbnRlcnJ1cHRzIC0gZGlzYWJsZSBpbnRlcnJ1cHRzCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqCisgKiBEaXNhYmxpbmcgUmVzZXRJUlEsIFJlcGx5IGFuZCBEb29yYmVsbCBJbnRlcnJ1cHRzCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9tYXNrX2ludGVycnVwdHMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXUzMiBoaW1fcmVnaXN0ZXI7CisKKwlpb2MtPm1hc2tfaW50ZXJydXB0cyA9IDE7CisJaGltX3JlZ2lzdGVyID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOworCWhpbV9yZWdpc3RlciB8PSBNUEkyX0hJTV9ESU0gKyBNUEkyX0hJTV9SSU0gKyBNUEkyX0hJTV9SRVNFVF9JUlFfTUFTSzsKKwl3cml0ZWwoaGltX3JlZ2lzdGVyLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0TWFzayk7CisJcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOworfQorCisvKioKKyAqIF9iYXNlX3VubWFza19pbnRlcnJ1cHRzIC0gZW5hYmxlIGludGVycnVwdHMKKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICoKKyAqIEVuYWJsaW5nIG9ubHkgUmVwbHkgSW50ZXJydXB0cworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfdW5tYXNrX2ludGVycnVwdHMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXUzMiBoaW1fcmVnaXN0ZXI7CisKKwl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisJaGltX3JlZ2lzdGVyID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOworCWhpbV9yZWdpc3RlciAmPSB+TVBJMl9ISU1fUklNOworCXdyaXRlbChoaW1fcmVnaXN0ZXIsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKKwlpb2MtPm1hc2tfaW50ZXJydXB0cyA9IDA7Cit9CisKKy8qKgorICogX2Jhc2VfaW50ZXJydXB0IC0gTVBUIGFkYXB0ZXIgKElPQykgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuCisgKiBAaXJxOiBpcnEgbnVtYmVyIChub3QgdXNlZCkKKyAqIEBidXNfaWQ6IGJ1cyBpZGVudGlmaWVyIGNvb2tpZSA9PSBwb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQorICogQHI6IHB0X3JlZ3MgcG9pbnRlciAobm90IHVzZWQpCisgKgorICogUmV0dXJuIElSUV9IQU5ETEUgaWYgcHJvY2Vzc2VkLCBlbHNlIElSUV9OT05FLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK19iYXNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpidXNfaWQpCit7CisJdTMyIHBvc3RfaW5kZXgsIHBvc3RfaW5kZXhfbmV4dCwgY29tcGxldGVkX2NtZHM7CisJdTggcmVxdWVzdF9kZXNyaXB0X3R5cGU7CisJdTE2IHNtaWQ7CisJdTggY2JfaWR4OworCXUzMiByZXBseTsKKwl1OCBWRl9JRDsKKwlpbnQgaTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBidXNfaWQ7CisKKwlpZiAoaW9jLT5tYXNrX2ludGVycnVwdHMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXBvc3RfaW5kZXggPSBpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleDsKKwlyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9IGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgorCSAgICBEZWZhdWx0LlJlcGx5RmxhZ3MgJiBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0s7CisJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09IE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJY29tcGxldGVkX2NtZHMgPSAwOworCWRvIHsKKwkJaWYgKGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLldvcmRzID09IH4wVUxMKQorCQkJZ290byBvdXQ7CisJCXJlcGx5ID0gMDsKKwkJY2JfaWR4ID0gMHhGRjsKKwkJc21pZCA9IGxlMTZfdG9fY3B1KGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgorCQkgICAgRGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudDEpOworCQlWRl9JRCA9IGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgorCQkgICAgRGVmYXVsdC5WRl9JRDsKKwkJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09CisJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19BRERSRVNTX1JFUExZKSB7CisJCQlyZXBseSA9IGxlMzJfdG9fY3B1KGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgorCQkJICAgIEFkZHJlc3NSZXBseS5SZXBseUZyYW1lQWRkcmVzcyk7CisJCX0gZWxzZSBpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0KKwkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVF9DT01NQU5EX0JVRkZFUikKKwkJCWdvdG8gbmV4dDsKKwkJZWxzZSBpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0KKwkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVEFTU0lTVF9TVUNDRVNTKQorCQkJZ290byBuZXh0OworCQlpZiAoc21pZCkKKwkJCWNiX2lkeCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLmNiX2lkeDsKKwkJaWYgKHNtaWQgJiYgY2JfaWR4ICE9IDB4RkYpIHsKKwkJCW1wdF9jYWxsYmFja3NbY2JfaWR4XShpb2MsIHNtaWQsIFZGX0lELCByZXBseSk7CisJCQlpZiAocmVwbHkpCisJCQkJX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvKGlvYywgc21pZCwgVkZfSUQsCisJCQkJICAgIHJlcGx5KTsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJfQorCQlpZiAoIXNtaWQpCisJCQlfYmFzZV9hc3luY19ldmVudChpb2MsIFZGX0lELCByZXBseSk7CisKKwkJLyogcmVwbHkgZnJlZSBxdWV1ZSBoYW5kbGluZyAqLworCQlpZiAocmVwbHkpIHsKKwkJCWlvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4ID0KKwkJCSAgICAoaW9jLT5yZXBseV9mcmVlX2hvc3RfaW5kZXggPT0KKwkJCSAgICAoaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC0gMSkpID8KKwkJCSAgICAwIDogaW9jLT5yZXBseV9mcmVlX2hvc3RfaW5kZXggKyAxOworCQkJaW9jLT5yZXBseV9mcmVlW2lvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4XSA9CisJCQkgICAgY3B1X3RvX2xlMzIocmVwbHkpOworCQkJd3JpdGVsKGlvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4LAorCQkJICAgICZpb2MtPmNoaXAtPlJlcGx5RnJlZUhvc3RJbmRleCk7CisJCQl3bWIoKTsKKwkJfQorCisgbmV4dDoKKwkJcG9zdF9pbmRleF9uZXh0ID0gKHBvc3RfaW5kZXggPT0gKGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCAtCisJCSAgICAxKSkgPyAwIDogcG9zdF9pbmRleCArIDE7CisJCXJlcXVlc3RfZGVzcmlwdF90eXBlID0KKwkJICAgIGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhfbmV4dF0uRGVmYXVsdC5SZXBseUZsYWdzCisJCSAgICAmIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSzsKKwkJY29tcGxldGVkX2NtZHMrKzsKKwkJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09IE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCkKKwkJCWdvdG8gb3V0OworCQlwb3N0X2luZGV4ID0gcG9zdF9pbmRleF9uZXh0OworCX0gd2hpbGUgKDEpOworCisgb3V0OgorCisJaWYgKCFjb21wbGV0ZWRfY21kcykKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogcmVwbHkgcG9zdCBkZXNjcmlwdG9yIGhhbmRsaW5nICovCisJcG9zdF9pbmRleF9uZXh0ID0gaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXg7CisJZm9yIChpID0gMCA7IGkgPCBjb21wbGV0ZWRfY21kczsgaSsrKSB7CisJCXBvc3RfaW5kZXggPSBwb3N0X2luZGV4X25leHQ7CisJCS8qIHBvaXNvbiB0aGUgcmVwbHkgcG9zdCBkZXNjcmlwdG9yICovCisJCWlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhfbmV4dF0uV29yZHMgPSB+MFVMTDsKKwkJcG9zdF9pbmRleF9uZXh0ID0gKHBvc3RfaW5kZXggPT0KKwkJICAgIChpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggLSAxKSkKKwkJICAgID8gMCA6IHBvc3RfaW5kZXggKyAxOworCX0KKwlpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleCA9IHBvc3RfaW5kZXhfbmV4dDsKKwl3cml0ZWwocG9zdF9pbmRleF9uZXh0LCAmaW9jLT5jaGlwLT5SZXBseVBvc3RIb3N0SW5kZXgpOworCXdtYigpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyIC0gY2xlYXIgaW50ZXJ1cHQgY2FsbGJhY2sgaGFuZGxlcgorICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih1OCBjYl9pZHgpCit7CisJbXB0X2NhbGxiYWNrc1tjYl9pZHhdID0gTlVMTDsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlciAtIG9idGFpbiBpbmRleCBmb3IgdGhlIGludGVycnVwdCBjYWxsYmFjayBoYW5kbGVyCisgKiBAY2JfZnVuYzogY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIGNiX2Z1bmMuCisgKi8KK3U4CittcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihNUFRfQ0FMTEJBQ0sgY2JfZnVuYykKK3sKKwl1OCBjYl9pZHg7CisKKwlmb3IgKGNiX2lkeCA9IE1QVF9NQVhfQ0FMTEJBQ0tTLTE7IGNiX2lkeDsgY2JfaWR4LS0pCisJCWlmIChtcHRfY2FsbGJhY2tzW2NiX2lkeF0gPT0gTlVMTCkKKwkJCWJyZWFrOworCisJbXB0X2NhbGxiYWNrc1tjYl9pZHhdID0gY2JfZnVuYzsKKwlyZXR1cm4gY2JfaWR4OworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9pbml0aWFsaXplX2NhbGxiYWNrX2hhbmRsZXIgLSBpbml0aWFsaXplIHRoZSBpbnRlcnJ1cHQgY2FsbGJhY2sgaGFuZGxlcgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX2Jhc2VfaW5pdGlhbGl6ZV9jYWxsYmFja19oYW5kbGVyKHZvaWQpCit7CisJdTggY2JfaWR4OworCisJZm9yIChjYl9pZHggPSAwOyBjYl9pZHggPCBNUFRfTUFYX0NBTExCQUNLUzsgY2JfaWR4KyspCisJCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoY2JfaWR4KTsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlIC0gYnVpbGQgemVybyBsZW5ndGggc2cgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHBhZGRyOiB2aXJ0dWFsIGFkZHJlc3MgZm9yIFNHRQorICoKKyAqIENyZWF0ZSBhIHplcm8gbGVuZ3RoIHNjYXR0ZXIgZ2F0aGVyIGVudHJ5IHRvIGluc3VyZSB0aGUgSU9DcyBoYXJkd2FyZSBoYXMKKyAqIHNvbWV0aGluZyB0byB1c2UgaWYgdGhlIHRhcmdldCBkZXZpY2UgZ29lcyBicmFpbiBkZWFkIGFuZCB0cmllcworICogdG8gc2VuZCBkYXRhIGV2ZW4gd2hlbiBub25lIGlzIGFza2VkIGZvci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHZvaWQgKnBhZGRyKQoreworCXUzMiBmbGFnc19sZW5ndGggPSAodTMyKSgoTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQpIDw8CisJICAgIE1QSTJfU0dFX0ZMQUdTX1NISUZUKTsKKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwYWRkciwgZmxhZ3NfbGVuZ3RoLCAtMSk7Cit9CisKKy8qKgorICogX2Jhc2VfYWRkX3NnX3NpbmdsZV8zMiAtIFBsYWNlIGEgc2ltcGxlIDMyIGJpdCBTR0UgYXQgYWRkcmVzcyBwQWRkci4KKyAqIEBwYWRkcjogdmlydHVhbCBhZGRyZXNzIGZvciBTR0UKKyAqIEBmbGFnc19sZW5ndGg6IFNHRSBmbGFncyBhbmQgZGF0YSB0cmFuc2ZlciBsZW5ndGgKKyAqIEBkbWFfYWRkcjogUGh5c2ljYWwgYWRkcmVzcworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfYWRkX3NnX3NpbmdsZV8zMih2b2lkICpwYWRkciwgdTMyIGZsYWdzX2xlbmd0aCwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlNcGkyU0dFU2ltcGxlMzJfdCAqc2dlbCA9IHBhZGRyOworCisJZmxhZ3NfbGVuZ3RoIHw9IChNUEkyX1NHRV9GTEFHU18zMl9CSVRfQUREUkVTU0lORyB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX1NZU1RFTV9BRERSRVNTKSA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwlzZ2VsLT5GbGFnc0xlbmd0aCA9IGNwdV90b19sZTMyKGZsYWdzX2xlbmd0aCk7CisJc2dlbC0+QWRkcmVzcyA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTsKK30KKworCisvKioKKyAqIF9iYXNlX2FkZF9zZ19zaW5nbGVfNjQgLSBQbGFjZSBhIHNpbXBsZSA2NCBiaXQgU0dFIGF0IGFkZHJlc3MgcEFkZHIuCisgKiBAcGFkZHI6IHZpcnR1YWwgYWRkcmVzcyBmb3IgU0dFCisgKiBAZmxhZ3NfbGVuZ3RoOiBTR0UgZmxhZ3MgYW5kIGRhdGEgdHJhbnNmZXIgbGVuZ3RoCisgKiBAZG1hX2FkZHI6IFBoeXNpY2FsIGFkZHJlc3MKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX2FkZF9zZ19zaW5nbGVfNjQodm9pZCAqcGFkZHIsIHUzMiBmbGFnc19sZW5ndGgsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJTXBpMlNHRVNpbXBsZTY0X3QgKnNnZWwgPSBwYWRkcjsKKworCWZsYWdzX2xlbmd0aCB8PSAoTVBJMl9TR0VfRkxBR1NfNjRfQklUX0FERFJFU1NJTkcgfAorCSAgICBNUEkyX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUykgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJc2dlbC0+RmxhZ3NMZW5ndGggPSBjcHVfdG9fbGUzMihmbGFnc19sZW5ndGgpOworCXNnZWwtPkFkZHJlc3MgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7Cit9CisKKyNkZWZpbmUgY29udmVydF90b19rYih4KSAoKHgpIDw8IChQQUdFX1NISUZUIC0gMTApKQorCisvKioKKyAqIF9iYXNlX2NvbmZpZ19kbWFfYWRkcmVzc2luZyAtIHNldCBkbWEgYWRkcmVzc2luZworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9jb25maWdfZG1hX2FkZHJlc3Npbmcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc3lzaW5mbyBzOworCWNoYXIgKmRlc2MgPSBOVUxMOworCisJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IDQpIHsKKwkJY29uc3QgdWludDY0X3QgcmVxdWlyZWRfbWFzayA9CisJCSAgICBkbWFfZ2V0X3JlcXVpcmVkX21hc2soJnBkZXYtPmRldik7CisJCWlmICgocmVxdWlyZWRfbWFzayA+IERNQV8zMkJJVF9NQVNLKSAmJiAhcGNpX3NldF9kbWFfbWFzayhwZGV2LAorCQkgICAgRE1BXzY0QklUX01BU0spICYmICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwKKwkJICAgIERNQV82NEJJVF9NQVNLKSkgeworCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUgPSAmX2Jhc2VfYWRkX3NnX3NpbmdsZV82NDsKKwkJCWlvYy0+c2dlX3NpemUgPSBzaXplb2YoTXBpMlNHRVNpbXBsZTY0X3QpOworCQkJZGVzYyA9ICI2NCI7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykKKwkgICAgJiYgIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUgPSAmX2Jhc2VfYWRkX3NnX3NpbmdsZV8zMjsKKwkJaW9jLT5zZ2Vfc2l6ZSA9IHNpemVvZihNcGkyU0dFU2ltcGxlMzJfdCk7CisJCWRlc2MgPSAiMzIiOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworIG91dDoKKwlzaV9tZW1pbmZvKCZzKTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXMgQklUIFBDSSBCVVMgRE1BIEFERFJFU1NJTkcgU1VQUE9SVEVELCAiCisJICAgICJ0b3RhbCBtZW0gKCVsZCBrQilcbiIsIGlvYy0+bmFtZSwgZGVzYywgY29udmVydF90b19rYihzLnRvdGFscmFtKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfYmFzZV9zYXZlX21zaXhfdGFibGUgLSBiYWNrdXAgbXNpeCB2ZWN0b3IgdGFibGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFRoaXMgYWRkcmVzcyBhbiBlcnJhdGEgd2hlcmUgZGlhZyByZXNldCBjbGVhcnMgb3V0IHRoZSB0YWJsZQorICovCitzdGF0aWMgdm9pZAorX2Jhc2Vfc2F2ZV9tc2l4X3RhYmxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlpbnQgaTsKKworCWlmICghaW9jLT5tc2l4X2VuYWJsZSB8fCBpb2MtPm1zaXhfdGFibGVfYmFja3VwID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPm1zaXhfdmVjdG9yX2NvdW50OyBpKyspCisJCWlvYy0+bXNpeF90YWJsZV9iYWNrdXBbaV0gPSBpb2MtPm1zaXhfdGFibGVbaV07Cit9CisKKy8qKgorICogX2Jhc2VfcmVzdG9yZV9tc2l4X3RhYmxlIC0gdGhpcyByZXN0b3JlcyB0aGUgbXNpeCB2ZWN0b3IgdGFibGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqLworc3RhdGljIHZvaWQKK19iYXNlX3Jlc3RvcmVfbXNpeF90YWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJaW50IGk7CisKKwlpZiAoIWlvYy0+bXNpeF9lbmFibGUgfHwgaW9jLT5tc2l4X3RhYmxlX2JhY2t1cCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5tc2l4X3ZlY3Rvcl9jb3VudDsgaSsrKQorCQlpb2MtPm1zaXhfdGFibGVbaV0gPSBpb2MtPm1zaXhfdGFibGVfYmFja3VwW2ldOworfQorCisvKioKKyAqIF9iYXNlX2NoZWNrX2VuYWJsZV9tc2l4IC0gY2hlY2tzIE1TSVggY2FwYWJhYmxlLgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogQ2hlY2sgdG8gc2VlIGlmIGNhcmQgaXMgY2FwYWJsZSBvZiBNU0lYLCBhbmQgc2V0IG51bWJlcgorICogb2YgYXZhbGlhYmxlIG1zaXggdmVjdG9ycworICovCitzdGF0aWMgaW50CitfYmFzZV9jaGVja19lbmFibGVfbXNpeChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJaW50IGJhc2U7CisJdTE2IG1lc3NhZ2VfY29udHJvbDsKKwl1MzIgbXNpeF90YWJsZV9vZmZzZXQ7CisKKwliYXNlID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShpb2MtPnBkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKCFiYXNlKSB7CisJCWRmYWlscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIm1zaXggbm90ICIKKwkJICAgICJzdXBwb3J0ZWRcbiIsIGlvYy0+bmFtZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBnZXQgbXNpeCB2ZWN0b3IgY291bnQgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChpb2MtPnBkZXYsIGJhc2UgKyAyLCAmbWVzc2FnZV9jb250cm9sKTsKKwlpb2MtPm1zaXhfdmVjdG9yX2NvdW50ID0gKG1lc3NhZ2VfY29udHJvbCAmIDB4M0ZGKSArIDE7CisKKwkvKiBnZXQgbXNpeCB0YWJsZSAgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoaW9jLT5wZGV2LCBiYXNlICsgNCwgJm1zaXhfdGFibGVfb2Zmc2V0KTsKKwltc2l4X3RhYmxlX29mZnNldCAmPSAweEZGRkZGRkY4OworCWlvYy0+bXNpeF90YWJsZSA9ICh1MzIgKikoKHZvaWQgKilpb2MtPmNoaXAgKyBtc2l4X3RhYmxlX29mZnNldCk7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJtc2l4IGlzIHN1cHBvcnRlZCwgIgorCSAgICAidmVjdG9yX2NvdW50KCVkKSwgdGFibGVfb2Zmc2V0KDB4JTA4eCksIHRhYmxlKCVwKVxuIiwgaW9jLT5uYW1lLAorCSAgICBpb2MtPm1zaXhfdmVjdG9yX2NvdW50LCBtc2l4X3RhYmxlX29mZnNldCwgaW9jLT5tc2l4X3RhYmxlKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2Jhc2VfZGlzYWJsZV9tc2l4IC0gZGlzYWJsZXMgbXNpeAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfZGlzYWJsZV9tc2l4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlpZiAoaW9jLT5tc2l4X2VuYWJsZSkgeworCQlwY2lfZGlzYWJsZV9tc2l4KGlvYy0+cGRldik7CisJCWtmcmVlKGlvYy0+bXNpeF90YWJsZV9iYWNrdXApOworCQlpb2MtPm1zaXhfdGFibGVfYmFja3VwID0gTlVMTDsKKwkJaW9jLT5tc2l4X2VuYWJsZSA9IDA7CisJfQorfQorCisvKioKKyAqIF9iYXNlX2VuYWJsZV9tc2l4IC0gZW5hYmxlcyBtc2l4LCBmYWlsYmFjayB0byBpb19hcGljCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX2VuYWJsZV9tc2l4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBlbnRyaWVzOworCWludCByOworCXU4IHRyeV9tc2l4ID0gMDsKKworCWlmIChtc2l4X2Rpc2FibGUgPT0gLTEgfHwgbXNpeF9kaXNhYmxlID09IDApCisJCXRyeV9tc2l4ID0gMTsKKworCWlmICghdHJ5X21zaXgpCisJCWdvdG8gdHJ5X2lvYXBpYzsKKworCWlmIChfYmFzZV9jaGVja19lbmFibGVfbXNpeChpb2MpICE9IDApCisJCWdvdG8gdHJ5X2lvYXBpYzsKKworCWlvYy0+bXNpeF90YWJsZV9iYWNrdXAgPSBrY2FsbG9jKGlvYy0+bXNpeF92ZWN0b3JfY291bnQsCisJICAgIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+bXNpeF90YWJsZV9iYWNrdXApIHsKKwkJZGZhaWxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYWxsb2NhdGlvbiBmb3IgIgorCQkgICAgIm1zaXhfdGFibGVfYmFja3VwIGZhaWxlZCEhIVxuIiwgaW9jLT5uYW1lKSk7CisJCWdvdG8gdHJ5X2lvYXBpYzsKKwl9CisKKwltZW1zZXQoJmVudHJpZXMsIDAsIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCXIgPSBwY2lfZW5hYmxlX21zaXgoaW9jLT5wZGV2LCAmZW50cmllcywgMSk7CisJaWYgKHIpIHsKKwkJZGZhaWxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicGNpX2VuYWJsZV9tc2l4ICIKKwkJICAgICJmYWlsZWQgKHI9JWQpICEhIVxuIiwgaW9jLT5uYW1lLCByKSk7CisJCWdvdG8gdHJ5X2lvYXBpYzsKKwl9CisKKwlyID0gcmVxdWVzdF9pcnEoZW50cmllcy52ZWN0b3IsIF9iYXNlX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJICAgIGlvYy0+bmFtZSwgaW9jKTsKKwlpZiAocikgeworCQlkZmFpbHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJ1bmFibGUgdG8gYWxsb2NhdGUgIgorCQkgICAgImludGVycnVwdCAlZCAhISFcbiIsIGlvYy0+bmFtZSwgZW50cmllcy52ZWN0b3IpKTsKKwkJcGNpX2Rpc2FibGVfbXNpeChpb2MtPnBkZXYpOworCQlnb3RvIHRyeV9pb2FwaWM7CisJfQorCisJaW9jLT5wY2lfaXJxID0gZW50cmllcy52ZWN0b3I7CisJaW9jLT5tc2l4X2VuYWJsZSA9IDE7CisJcmV0dXJuIDA7CisKKy8qIGZhaWxiYWNrIHRvIGlvX2FwaWMgaW50ZXJydXB0IHJvdXRpbmcgKi8KKyB0cnlfaW9hcGljOgorCisJciA9IHJlcXVlc3RfaXJxKGlvYy0+cGRldi0+aXJxLCBfYmFzZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCSAgICBpb2MtPm5hbWUsIGlvYyk7CisJaWYgKHIpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAidW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCAlZCFcbiIsCisJCSAgICBpb2MtPm5hbWUsIGlvYy0+cGRldi0+aXJxKTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlpb2MtPnBjaV9pcnEgPSBpb2MtPnBkZXYtPmlycTsKKwlyZXR1cm4gMDsKKworIG91dF9mYWlsOgorCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzIC0gbWFwIGluIGNvbnRyb2xsZXIgcmVzb3VyY2VzIChpby9pcnEvbWVtYXApCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGlvYy0+cGRldjsKKwl1MzIgbWVtYXBfc3o7CisJdTMyIHBpb19zejsKKwlpbnQgaSwgciA9IDA7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsCisJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKworCWlvYy0+YmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgeworCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAicGNpX2VuYWJsZV9kZXZpY2VfbWVtOiAiCisJCSAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKworCWlmIChwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGlvYy0+YmFycywKKwkgICAgTVBUMlNBU19EUklWRVJfTkFNRSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnM6ICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCXIgPSAtRU5PREVWOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaWYgKF9iYXNlX2NvbmZpZ19kbWFfYWRkcmVzc2luZyhpb2MsIHBkZXYpICE9IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIm5vIHN1aXRhYmxlIERNQSBtYXNrIGZvciAlc1xuIiwKKwkJICAgIGlvYy0+bmFtZSwgcGNpX25hbWUocGRldikpOworCQlyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlmb3IgKGkgPSAwLCBtZW1hcF9zeiA9IDAsIHBpb19zeiA9IDAgOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKKwkJCWlmIChwaW9fc3opCisJCQkJY29udGludWU7CisJCQlpb2MtPnBpb19jaGlwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJcGlvX3N6ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChtZW1hcF9zeikKKwkJCQljb250aW51ZTsKKwkJCWlvYy0+Y2hpcF9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJbWVtYXBfc3ogPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpOworCQkJaW9jLT5jaGlwID0gaW9yZW1hcChpb2MtPmNoaXBfcGh5cywgbWVtYXBfc3opOworCQkJaWYgKGlvYy0+Y2hpcCA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAidW5hYmxlIHRvIG1hcCBhZGFwdGVyICIKKwkJCQkgICAgIm1lbW9yeSFcbiIsIGlvYy0+bmFtZSk7CisJCQkJciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZmFpbDsKKwkJCX0KKwkJfQorCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpb2MtPnNob3N0KTsKKwlfYmFzZV9tYXNrX2ludGVycnVwdHMoaW9jKTsKKwlyID0gX2Jhc2VfZW5hYmxlX21zaXgoaW9jKTsKKwlpZiAocikKKwkJZ290byBvdXRfZmFpbDsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogSVJRICVkXG4iLAorCSAgICBpb2MtPm5hbWUsICAoKGlvYy0+bXNpeF9lbmFibGUpID8gIlBDSS1NU0ktWCBlbmFibGVkIiA6CisJICAgICJJTy1BUElDIGVuYWJsZWQiKSwgaW9jLT5wY2lfaXJxKTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9tZW0oMHglbHgpLCBtYXBwZWQoMHglcCksIHNpemUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsIGlvYy0+Y2hpcF9waHlzLCBpb2MtPmNoaXAsIG1lbWFwX3N6KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9wb3J0KDB4JWx4KSwgc2l6ZSglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgaW9jLT5waW9fY2hpcCwgcGlvX3N6KTsKKworCXJldHVybiAwOworCisgb3V0X2ZhaWw6CisJaWYgKGlvYy0+Y2hpcF9waHlzKQorCQlpb3VubWFwKGlvYy0+Y2hpcCk7CisJaW9jLT5jaGlwX3BoeXMgPSAwOworCWlvYy0+cGNpX2lycSA9IC0xOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW9jLT5wZGV2LCBpb2MtPmJhcnMpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWVfZG1hIC0gb2J0YWluIHJlcXVlc3QgbWYgcG9pbnRlciBwaHlzIGFkZHIKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgoc21pZCB6ZXJvIGlzIGludmFsaWQpCisgKgorICogUmV0dXJucyBwaHlzIHBvaW50ZXIgdG8gbWVzc2FnZSBmcmFtZS4KKyAqLworZG1hX2FkZHJfdAorbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWVfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJcmV0dXJuIGlvYy0+cmVxdWVzdF9kbWEgKyAoc21pZCAqIGlvYy0+cmVxdWVzdF9zeik7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUgLSBvYnRhaW4gcmVxdWVzdCBtZiBwb2ludGVyCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4KHNtaWQgemVybyBpcyBpbnZhbGlkKQorICoKKyAqIFJldHVybnMgdmlydCBwb2ludGVyIHRvIG1lc3NhZ2UgZnJhbWUuCisgKi8KK3ZvaWQgKgorbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlyZXR1cm4gKHZvaWQgKikoaW9jLT5yZXF1ZXN0ICsgKHNtaWQgKiBpb2MtPnJlcXVlc3Rfc3opKTsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlciAtIG9idGFpbiBhIHNlbnNlIGJ1ZmZlciBhc3NpZ25lZCB0byBhIG1mIHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHZpcnQgcG9pbnRlciB0byBzZW5zZSBidWZmZXIuCisgKi8KK3ZvaWQgKgorbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlyZXR1cm4gKHZvaWQgKikoaW9jLT5zZW5zZSArICgoc21pZCAtIDEpICogU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hIC0gb2J0YWluIGEgc2Vuc2UgYnVmZmVyIGFzc2lnbmVkIHRvIGEgbWYgcmVxdWVzdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICoKKyAqIFJldHVybnMgcGh5cyBwb2ludGVyIHRvIHNlbnNlIGJ1ZmZlci4KKyAqLworZG1hX2FkZHJfdAorbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJcmV0dXJuIGlvYy0+c2Vuc2VfZG1hICsgKChzbWlkIC0gMSkgKiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyIC0gb2J0YWluIHJlcGx5IGZyYW1lcyB2aXJ0IGFkZHJlc3MKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHBoeXNfYWRkcjogbG93ZXIgMzIgcGh5c2ljYWwgYWRkciBvZiB0aGUgcmVwbHkKKyAqCisgKiBDb252ZXJ0cyAzMmJpdCBsb3dlciBwaHlzaWNhbCBhZGRyIGludG8gYSB2aXJ0IGFkZHJlc3MuCisgKi8KK3ZvaWQgKgorbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgcGh5c19hZGRyKQoreworCWlmICghcGh5c19hZGRyKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gaW9jLT5yZXBseSArIChwaHlzX2FkZHIgLSAodTMyKWlvYy0+cmVwbHlfZG1hKTsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQgLSBvYnRhaW4gYSBmcmVlIHNtaWQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHNtaWQgKHplcm8gaXMgaW52YWxpZCkKKyAqLwordTE2CittcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpyZXF1ZXN0OworCXUxNiBzbWlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZpb2MtPmZyZWVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBzbWlkIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxdWVzdCA9IGxpc3RfZW50cnkoaW9jLT5mcmVlX2xpc3QubmV4dCwKKwkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKKwlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CisJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CisJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNtaWQ7Cit9CisKKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZnJlZV9zbWlkIC0gcHV0IHNtaWQgYmFjayBvbiBmcmVlX2xpc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX2ZyZWVfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uY2JfaWR4ID0gMHhGRjsKKwlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS50cmFja2VyX2xpc3QsCisJICAgICZpb2MtPmZyZWVfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFNlZSBfd2FpdF9mb3JfY29tbWFuZHNfdG9fY29tcGxldGUoKSBjYWxsIHdpdGggcmVnYXJkcyB0byB0aGlzIGNvZGUuCisJICovCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgJiYgaW9jLT5wZW5kaW5nX2lvX2NvdW50KSB7CisJCWlmIChpb2MtPnBlbmRpbmdfaW9fY291bnQgPT0gMSkKKwkJCXdha2VfdXAoJmlvYy0+cmVzZXRfd3EpOworCQlpb2MtPnBlbmRpbmdfaW9fY291bnQtLTsKKwl9Cit9CisKKy8qKgorICogX2Jhc2Vfd3JpdGVxIC0gNjQgYml0IHdyaXRlIHRvIE1NSU8KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGI6IGRhdGEgcGF5bG9hZAorICogQGFkZHI6IGFkZHJlc3MgaW4gTU1JTyBzcGFjZQorICogQHdyaXRlcV9sb2NrOiBzcGluIGxvY2sKKyAqCisgKiBHbHVlIGZvciBoYW5kbGluZyBhbiBhdG9taWMgNjQgYml0IHdvcmQgdG8gTU1JTy4gVGhpcyBzcGVjaWFsIGhhbmRsaW5nIHRha2VzCisgKiBjYXJlIG9mIDMyIGJpdCBlbnZpcm9ubWVudCB3aGVyZSBpdHMgbm90IHF1YXJlbnRlZWQgdG8gc2VuZCB0aGUgZW50aXJlIHdvcmQKKyAqIGluIG9uZSB0cmFuc2Zlci4KKyAqLworI2lmbmRlZiB3cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYmFzZV93cml0ZXEoX191NjQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorICAgIHNwaW5sb2NrX3QgKndyaXRlcV9sb2NrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191NjQgZGF0YV9vdXQgPSBjcHVfdG9fbGU2NChiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKHdyaXRlcV9sb2NrLCBmbGFncyk7CisJd3JpdGVsKCh1MzIpKGRhdGFfb3V0KSwgYWRkcik7CisJd3JpdGVsKCh1MzIpKGRhdGFfb3V0ID4+IDMyKSwgKGFkZHIgKyA0KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3cml0ZXFfbG9jaywgZmxhZ3MpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYmFzZV93cml0ZXEoX191NjQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorICAgIHNwaW5sb2NrX3QgKndyaXRlcV9sb2NrKQoreworCXdyaXRlcShjcHVfdG9fbGU2NChiKSwgYWRkcik7Cit9CisjZW5kaWYKKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyAtIHNlbmQgU0NTSV9JTyByZXF1ZXN0IHRvIGZpcm13YXJlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQsCisgICAgdTE2IGhhbmRsZSkKK3sKKwlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CisJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOworCisKKwlkZXNjcmlwdG9yLlNDU0lJTy5SZXF1ZXN0RmxhZ3MgPSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPOworCWRlc2NyaXB0b3IuU0NTSUlPLlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5TQ1NJSU8uU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOworCWRlc2NyaXB0b3IuU0NTSUlPLkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisJZGVzY3JpcHRvci5TQ1NJSU8uTE1JRCA9IDA7CisJX2Jhc2Vfd3JpdGVxKCpyZXF1ZXN0LCAmaW9jLT5jaGlwLT5SZXF1ZXN0RGVzY3JpcHRvclBvc3RMb3csCisJICAgICZpb2MtPnNjc2lfbG9va3VwX2xvY2spOworfQorCisKKy8qKgorICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5IC0gc2VuZCBUYXNrIE1hbmFnbWVudCByZXF1ZXN0IHRvIGZpcm13YXJlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggdmZfaWQpCit7CisJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOworCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKKworCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlJlcXVlc3RGbGFncyA9CisJICAgIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFk7CisJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CisJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuTE1JRCA9IDA7CisJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuUmVzZXJ2ZWQxID0gMDsKKwlfYmFzZV93cml0ZXEoKnJlcXVlc3QsICZpb2MtPmNoaXAtPlJlcXVlc3REZXNjcmlwdG9yUG9zdExvdywKKwkgICAgJmlvYy0+c2NzaV9sb29rdXBfbG9jayk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQgLSBEZWZhdWx0LCBwcmltYXJpbHkgdXNlZCBmb3IgY29uZmlnIHBhZ2VzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpCit7CisJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOworCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKKworCWRlc2NyaXB0b3IuRGVmYXVsdC5SZXF1ZXN0RmxhZ3MgPSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZBVUxUX1RZUEU7CisJZGVzY3JpcHRvci5EZWZhdWx0LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5EZWZhdWx0LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKKwlkZXNjcmlwdG9yLkRlZmF1bHQuTE1JRCA9IDA7CisJZGVzY3JpcHRvci5EZWZhdWx0LkRlc2NyaXB0b3JUeXBlRGVwZW5kZW50ID0gMDsKKwlfYmFzZV93cml0ZXEoKnJlcXVlc3QsICZpb2MtPmNoaXAtPlJlcXVlc3REZXNjcmlwdG9yUG9zdExvdywKKwkgICAgJmlvYy0+c2NzaV9sb29rdXBfbG9jayk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3QgLSBzZW5kIFRhcmdldCBBc3Npc3QvU3RhdHVzIHRvIGZpcm13YXJlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBpb19pbmRleDogdmFsdWUgdXNlZCB0byB0cmFjayB0aGUgSU8KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3Qoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKKyAgICB1OCB2Zl9pZCwgdTE2IGlvX2luZGV4KQoreworCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKKwl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CisKKwlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuUmVxdWVzdEZsYWdzID0KKwkgICAgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9UQVJHRVQ7CisJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKKwlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuTE1JRCA9IDA7CisJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LklvSW5kZXggPSBjcHVfdG9fbGUxNihpb19pbmRleCk7CisJX2Jhc2Vfd3JpdGVxKCpyZXF1ZXN0LCAmaW9jLT5jaGlwLT5SZXF1ZXN0RGVzY3JpcHRvclBvc3RMb3csCisJICAgICZpb2MtPnNjc2lfbG9va3VwX2xvY2spOworfQorCisvKioKKyAqIF9iYXNlX2Rpc3BsYXlfaW9jX2NhcGFiaWxpdGllcyAtIERpc3BseSBJT0MncyBjYXBhYmlsaXRpZXMuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX2Rpc3BsYXlfaW9jX2NhcGFiaWxpdGllcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJaW50IGkgPSAwOworCWNoYXIgZGVzY1sxNl07CisJdTggcmV2aXNpb247CisJdTMyIGlvdW5pdF9wZzFfZmxhZ3M7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShpb2MtPnBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldmlzaW9uKTsKKwlzdHJuY3B5KGRlc2MsIGlvYy0+bWFudV9wZzAuQ2hpcE5hbWUsIDE2KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IEZXVmVyc2lvbiglMDJkLiUwMmQuJTAyZC4lMDJkKSwgIgorCSAgICJDaGlwUmV2aXNpb24oMHglMDJ4KSwgQmlvc1ZlcnNpb24oJTAyZC4lMDJkLiUwMmQuJTAyZClcbiIsCisJICAgIGlvYy0+bmFtZSwgZGVzYywKKwkgICAoaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4RkYwMDAwMDApID4+IDI0LAorCSAgIChpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkICYgMHgwMEZGMDAwMCkgPj4gMTYsCisJICAgKGlvYy0+ZmFjdHMuRldWZXJzaW9uLldvcmQgJiAweDAwMDBGRjAwKSA+PiA4LAorCSAgIGlvYy0+ZmFjdHMuRldWZXJzaW9uLldvcmQgJiAweDAwMDAwMEZGLAorCSAgIHJldmlzaW9uLAorCSAgIChpb2MtPmJpb3NfcGczLkJpb3NWZXJzaW9uICYgMHhGRjAwMDAwMCkgPj4gMjQsCisJICAgKGlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24gJiAweDAwRkYwMDAwKSA+PiAxNiwKKwkgICAoaW9jLT5iaW9zX3BnMy5CaW9zVmVyc2lvbiAmIDB4MDAwMEZGMDApID4+IDgsCisJICAgIGlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24gJiAweDAwMDAwMEZGKTsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJQcm90b2NvbD0oIiwgaW9jLT5uYW1lKTsKKworCWlmIChpb2MtPmZhY3RzLlByb3RvY29sRmxhZ3MgJiBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NDU0lfSU5JVElBVE9SKSB7CisJCXByaW50aygiSW5pdGlhdG9yIik7CisJCWkrKzsKKwl9CisKKwlpZiAoaW9jLT5mYWN0cy5Qcm90b2NvbEZsYWdzICYgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TQ1NJX1RBUkdFVCkgeworCQlwcmludGsoIiVzVGFyZ2V0IiwgaSA/ICIsIiA6ICIiKTsKKwkJaSsrOworCX0KKworCWkgPSAwOworCXByaW50aygiKSwgIik7CisJcHJpbnRrKCJDYXBhYmlsaXRpZXM9KCIpOworCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0lOVEVHUkFURURfUkFJRCkgeworCQlwcmludGsoIlJhaWQiKTsKKwkJaSsrOworCX0KKworCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpIHsKKwkJcHJpbnRrKCIlc1RMUiIsIGkgPyAiLCIgOiAiIik7CisJCWkrKzsKKwl9CisKKwlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJiBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVVMVElDQVNUKSB7CisJCXByaW50aygiJXNNdWx0aWNhc3QiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0JJRElSRUNUSU9OQUxfVEFSR0VUKSB7CisJCXByaW50aygiJXNCSURJIFRhcmdldCIsIGkgPyAiLCIgOiAiIik7CisJCWkrKzsKKwl9CisKKwlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJiBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRUVEUCkgeworCQlwcmludGsoIiVzRUVEUCIsIGkgPyAiLCIgOiAiIik7CisJCWkrKzsKKwl9CisKKwlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgorCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfU05BUFNIT1RfQlVGRkVSKSB7CisJCXByaW50aygiJXNTbmFwc2hvdCBCdWZmZXIiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0RJQUdfVFJBQ0VfQlVGRkVSKSB7CisJCXByaW50aygiJXNEaWFnIFRyYWNlIEJ1ZmZlciIsIGkgPyAiLCIgOiAiIik7CisJCWkrKzsKKwl9CisKKwlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgorCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVEFTS19TRVRfRlVMTF9IQU5ETElORykgeworCQlwcmludGsoIiVzVGFzayBTZXQgRnVsbCIsIGkgPyAiLCIgOiAiIik7CisJCWkrKzsKKwl9CisKKwlpb3VuaXRfcGcxX2ZsYWdzID0gbGUzMl90b19jcHUoaW9jLT5pb3VuaXRfcGcxLkZsYWdzKTsKKwlpZiAoIShpb3VuaXRfcGcxX2ZsYWdzICYgTVBJMl9JT1VOSVRQQUdFMV9OQVRJVkVfQ09NTUFORF9RX0RJU0FCTEUpKSB7CisJCXByaW50aygiJXNOQ1EiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJcHJpbnRrKCIpXG4iKTsKK30KKworLyoqCisgKiBfYmFzZV9zdGF0aWNfY29uZmlnX3BhZ2VzIC0gc3RhdGljIHN0YXJ0IG9mIGRheSBjb25maWcgcGFnZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2Vfc3RhdGljX2NvbmZpZ19wYWdlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUzMiBpb3VuaXRfcGcxX2ZsYWdzOworCisJbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwKGlvYywgJm1waV9yZXBseSwgJmlvYy0+bWFudV9wZzApOworCW1wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMihpb2MsICZtcGlfcmVwbHksICZpb2MtPmJpb3NfcGcyKTsKKwltcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzMoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5iaW9zX3BnMyk7CisJbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzgoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb2NfcGc4KTsKKwltcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMChpb2MsICZtcGlfcmVwbHksICZpb2MtPmlvdW5pdF9wZzApOworCW1wdDJzYXNfY29uZmlnX2dldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW91bml0X3BnMSk7CisJX2Jhc2VfZGlzcGxheV9pb2NfY2FwYWJpbGl0aWVzKGlvYyk7CisKKwkvKgorCSAqIEVuYWJsZSB0YXNrX3NldF9mdWxsIGhhbmRsaW5nIGluIGlvdW5pdF9wZzEgd2hlbiB0aGUKKwkgKiBmYWN0cyBjYXBhYmlsaXRpZXMgaW5kaWNhdGUgdGhhdCBpdHMgc3VwcG9ydGVkLgorCSAqLworCWlvdW5pdF9wZzFfZmxhZ3MgPSBsZTMyX3RvX2NwdShpb2MtPmlvdW5pdF9wZzEuRmxhZ3MpOworCWlmICgoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgorCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVEFTS19TRVRfRlVMTF9IQU5ETElORykpCisJCWlvdW5pdF9wZzFfZmxhZ3MgJj0KKwkJICAgIH5NUEkyX0lPVU5JVFBBR0UxX0RJU0FCTEVfVEFTS19TRVRfRlVMTF9IQU5ETElORzsKKwllbHNlCisJCWlvdW5pdF9wZzFfZmxhZ3MgfD0KKwkJICAgIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9UQVNLX1NFVF9GVUxMX0hBTkRMSU5HOworCWlvYy0+aW91bml0X3BnMS5GbGFncyA9IGNwdV90b19sZTMyKGlvdW5pdF9wZzFfZmxhZ3MpOworCW1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgaW9jLT5pb3VuaXRfcGcxKTsKK30KKworLyoqCisgKiBfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyAtIHJlbGVhc2UgbWVtb3J5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSBfYmFzZV9hbGxvY2F0ZV9tZW1vcnlfcG9vbHMuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlpZiAoaW9jLT5yZXF1ZXN0KSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBpb2MtPnJlcXVlc3RfZG1hX3N6LAorCQkgICAgaW9jLT5yZXF1ZXN0LCAgaW9jLT5yZXF1ZXN0X2RtYSk7CisJCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcXVlc3RfcG9vbCgweCVwKSIKKwkJICAgICI6IGZyZWVcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0KSk7CisJCWlvYy0+cmVxdWVzdCA9IE5VTEw7CisJfQorCisJaWYgKGlvYy0+c2Vuc2UpIHsKKwkJcGNpX3Bvb2xfZnJlZShpb2MtPnNlbnNlX2RtYV9wb29sLCBpb2MtPnNlbnNlLCBpb2MtPnNlbnNlX2RtYSk7CisJCWlmIChpb2MtPnNlbnNlX2RtYV9wb29sKQorCQkJcGNpX3Bvb2xfZGVzdHJveShpb2MtPnNlbnNlX2RtYV9wb29sKTsKKwkJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2Vuc2VfcG9vbCgweCVwKSIKKwkJICAgICI6IGZyZWVcbiIsIGlvYy0+bmFtZSwgaW9jLT5zZW5zZSkpOworCQlpb2MtPnNlbnNlID0gTlVMTDsKKwl9CisKKwlpZiAoaW9jLT5yZXBseSkgeworCQlwY2lfcG9vbF9mcmVlKGlvYy0+cmVwbHlfZG1hX3Bvb2wsIGlvYy0+cmVwbHksIGlvYy0+cmVwbHlfZG1hKTsKKwkJaWYgKGlvYy0+cmVwbHlfZG1hX3Bvb2wpCisJCQlwY2lfcG9vbF9kZXN0cm95KGlvYy0+cmVwbHlfZG1hX3Bvb2wpOworCQlkZXhpdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXBseV9wb29sKDB4JXApIgorCQkgICAgICI6IGZyZWVcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXBseSkpOworCQlpb2MtPnJlcGx5ID0gTlVMTDsKKwl9CisKKwlpZiAoaW9jLT5yZXBseV9mcmVlKSB7CisJCXBjaV9wb29sX2ZyZWUoaW9jLT5yZXBseV9mcmVlX2RtYV9wb29sLCBpb2MtPnJlcGx5X2ZyZWUsCisJCSAgICBpb2MtPnJlcGx5X2ZyZWVfZG1hKTsKKwkJaWYgKGlvYy0+cmVwbHlfZnJlZV9kbWFfcG9vbCkKKwkJCXBjaV9wb29sX2Rlc3Ryb3koaW9jLT5yZXBseV9mcmVlX2RtYV9wb29sKTsKKwkJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVwbHlfZnJlZV9wb29sIgorCQkgICAgIigweCVwKTogZnJlZVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcGx5X2ZyZWUpKTsKKwkJaW9jLT5yZXBseV9mcmVlID0gTlVMTDsKKwl9CisKKwlpZiAoaW9jLT5yZXBseV9wb3N0X2ZyZWUpIHsKKwkJcGNpX3Bvb2xfZnJlZShpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbCwKKwkJICAgIGlvYy0+cmVwbHlfcG9zdF9mcmVlLCBpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWEpOworCQlpZiAoaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2wpCisJCQlwY2lfcG9vbF9kZXN0cm95KGlvYy0+cmVwbHlfcG9zdF9mcmVlX2RtYV9wb29sKTsKKwkJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkgICAgInJlcGx5X3Bvc3RfZnJlZV9wb29sKDB4JXApOiBmcmVlXG4iLCBpb2MtPm5hbWUsCisJCSAgICBpb2MtPnJlcGx5X3Bvc3RfZnJlZSkpOworCQlpb2MtPnJlcGx5X3Bvc3RfZnJlZSA9IE5VTEw7CisJfQorCisJaWYgKGlvYy0+Y29uZmlnX3BhZ2UpIHsKKwkJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkgICAgImNvbmZpZ19wYWdlKDB4JXApOiBmcmVlXG4iLCBpb2MtPm5hbWUsCisJCSAgICBpb2MtPmNvbmZpZ19wYWdlKSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBpb2MtPmNvbmZpZ19wYWdlX3N6LAorCQkgICAgaW9jLT5jb25maWdfcGFnZSwgaW9jLT5jb25maWdfcGFnZV9kbWEpOworCX0KKworCWtmcmVlKGlvYy0+c2NzaV9sb29rdXApOworfQorCisKKy8qKgorICogX2Jhc2VfYWxsb2NhdGVfbWVtb3J5X3Bvb2xzIC0gYWxsb2NhdGUgc3RhcnQgb2YgZGF5IG1lbW9yeSBwb29scworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIHN1Y2Nlc3MsIGFueXRoaW5nIGVsc2UgZXJyb3IKKyAqLworc3RhdGljIGludAorX2Jhc2VfYWxsb2NhdGVfbWVtb3J5X3Bvb2xzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgIGludCBzbGVlcF9mbGFnKQoreworCU1waTJJT0NGYWN0c1JlcGx5X3QgKmZhY3RzOworCXUzMiBxdWV1ZV9zaXplLCBxdWV1ZV9kaWZmOworCXUxNiBtYXhfc2dlX2VsZW1lbnRzOworCXUxNiBudW1fb2ZfcmVwbHlfZnJhbWVzOworCXUxNiBjaGFpbnNfbmVlZGVkX3Blcl9pbzsKKwl1MzIgc3osIHRvdGFsX3N6OworCXUxNiBpOworCXUzMiByZXRyeV9zejsKKwl1MTYgbWF4X3JlcXVlc3RfY3JlZGl0OworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlyZXRyeV9zeiA9IDA7CisJZmFjdHMgPSAmaW9jLT5mYWN0czsKKworCS8qIGNvbW1hbmQgbGluZSB0dW5hYmxlcyAgZm9yIG1heCBzZ2wgZW50cmllcyAqLworCWlmIChtYXhfc2dsX2VudHJpZXMgIT0gLTEpIHsKKwkJaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplID0gKG1heF9zZ2xfZW50cmllcyA8CisJCSAgICBNUFQyU0FTX1NHX0RFUFRIKSA/IG1heF9zZ2xfZW50cmllcyA6CisJCSAgICBNUFQyU0FTX1NHX0RFUFRIOworCX0gZWxzZSB7CisJCWlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSA9IE1QVDJTQVNfU0dfREVQVEg7CisJfQorCisJLyogY29tbWFuZCBsaW5lIHR1bmFibGVzICBmb3IgbWF4IGNvbnRyb2xsZXIgcXVldWUgZGVwdGggKi8KKwlpZiAobWF4X3F1ZXVlX2RlcHRoICE9IC0xKSB7CisJCW1heF9yZXF1ZXN0X2NyZWRpdCA9IChtYXhfcXVldWVfZGVwdGggPCBmYWN0cy0+UmVxdWVzdENyZWRpdCkKKwkJICAgID8gbWF4X3F1ZXVlX2RlcHRoIDogZmFjdHMtPlJlcXVlc3RDcmVkaXQ7CisJfSBlbHNlIHsKKwkJbWF4X3JlcXVlc3RfY3JlZGl0ID0gKGZhY3RzLT5SZXF1ZXN0Q3JlZGl0ID4KKwkJICAgIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUpID8gTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA6CisJCSAgICBmYWN0cy0+UmVxdWVzdENyZWRpdDsKKwl9CisJaW9jLT5yZXF1ZXN0X2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0OworCisJLyogcmVxdWVzdCBmcmFtZSBzaXplICovCisJaW9jLT5yZXF1ZXN0X3N6ID0gZmFjdHMtPklPQ1JlcXVlc3RGcmFtZVNpemUgKiA0OworCisJLyogcmVwbHkgZnJhbWUgc2l6ZSAqLworCWlvYy0+cmVwbHlfc3ogPSBmYWN0cy0+UmVwbHlGcmFtZVNpemUgKiA0OworCisgcmV0cnlfYWxsb2NhdGlvbjoKKwl0b3RhbF9zeiA9IDA7CisJLyogY2FsY3VsYXRlIG51bWJlciBvZiBzZyBlbGVtZW50cyBsZWZ0IG92ZXIgaW4gdGhlIDFzdCBmcmFtZSAqLworCW1heF9zZ2VfZWxlbWVudHMgPSBpb2MtPnJlcXVlc3Rfc3ogLSAoKHNpemVvZihNcGkyU0NTSUlPUmVxdWVzdF90KSAtCisJICAgIHNpemVvZihNcGkyU0dFSU9Vbmlvbl90KSkgKyBpb2MtPnNnZV9zaXplKTsKKwlpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZSA9IG1heF9zZ2VfZWxlbWVudHMvaW9jLT5zZ2Vfc2l6ZTsKKworCS8qIG5vdyBkbyB0aGUgc2FtZSBmb3IgYSBjaGFpbiBidWZmZXIgKi8KKwltYXhfc2dlX2VsZW1lbnRzID0gaW9jLT5yZXF1ZXN0X3N6IC0gaW9jLT5zZ2Vfc2l6ZTsKKwlpb2MtPm1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2UgPSBtYXhfc2dlX2VsZW1lbnRzL2lvYy0+c2dlX3NpemU7CisKKwlpb2MtPmNoYWluX29mZnNldF92YWx1ZV9mb3JfbWFpbl9tZXNzYWdlID0KKwkgICAgKChzaXplb2YoTXBpMlNDU0lJT1JlcXVlc3RfdCkgLSBzaXplb2YoTXBpMlNHRUlPVW5pb25fdCkpICsKKwkgICAgIChpb2MtPm1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2UgKiBpb2MtPnNnZV9zaXplKSkgLyA0OworCisJLyoKKwkgKiAgTVBUMlNBU19TR19ERVBUSCA9IENPTkZJR19GVVNJT05fTUFYX1NHRQorCSAqLworCWNoYWluc19uZWVkZWRfcGVyX2lvID0gKChpb2MtPnNob3N0LT5zZ190YWJsZXNpemUgLQorCSAgIGlvYy0+bWF4X3NnZXNfaW5fbWFpbl9tZXNzYWdlKS9pb2MtPm1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2UpCisJICAgICsgMTsKKwlpZiAoY2hhaW5zX25lZWRlZF9wZXJfaW8gPiBmYWN0cy0+TWF4Q2hhaW5EZXB0aCkgeworCQljaGFpbnNfbmVlZGVkX3Blcl9pbyA9IGZhY3RzLT5NYXhDaGFpbkRlcHRoOworCQlpb2MtPnNob3N0LT5zZ190YWJsZXNpemUgPSBtaW5fdCh1MTYsCisJCWlvYy0+bWF4X3NnZXNfaW5fbWFpbl9tZXNzYWdlICsgKGlvYy0+bWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZQorCQkqIGNoYWluc19uZWVkZWRfcGVyX2lvKSwgaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplKTsKKwl9CisJaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbyA9IGNoYWluc19uZWVkZWRfcGVyX2lvOworCisJLyogcmVwbHkgZnJlZSBxdWV1ZSBzaXppbmcgLSB0YWtpbmcgaW50byBhY2NvdW50IGZvciBldmVudHMgKi8KKwludW1fb2ZfcmVwbHlfZnJhbWVzID0gaW9jLT5yZXF1ZXN0X2RlcHRoICsgMzI7CisKKwkvKiBudW1iZXIgb2YgcmVwbGllcyBmcmFtZXMgY2FuJ3QgYmUgYSBtdWx0aXBsZSBvZiAxNiAqLworCS8qIGRlY3JlYXNlIG51bWJlciBvZiByZXBseSBmcmFtZXMgYnkgMSAqLworCWlmICghKG51bV9vZl9yZXBseV9mcmFtZXMgJSAxNikpCisJCW51bV9vZl9yZXBseV9mcmFtZXMtLTsKKworCS8qIGNhbGN1bGF0ZSBudW1iZXIgb2YgcmVwbHkgZnJlZSBxdWV1ZSBlbnRyaWVzCisJICogIChtdXN0IGJlIG11bHRpcGxlIG9mIDE2KQorCSAqLworCisJLyogKHdlIGtub3cgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiAxNikgKi8KKwlxdWV1ZV9zaXplID0gbnVtX29mX3JlcGx5X2ZyYW1lczsKKwlxdWV1ZV9zaXplICs9IDE2IC0gKHF1ZXVlX3NpemUgJSAxNik7CisJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoID0gcXVldWVfc2l6ZTsKKworCS8qIHJlcGx5IGRlc2NyaXB0b3IgcG9zdCBxdWV1ZSBzaXppbmcgKi8KKwkvKiB0aGlzIHNpemUgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgcmVxdWVzdCBmcmFtZXMgKyBudW1iZXIgb2YgcmVwbHkKKwkgKiBmcmFtZXMKKwkgKi8KKworCXF1ZXVlX3NpemUgPSBpb2MtPnJlcXVlc3RfZGVwdGggKyBudW1fb2ZfcmVwbHlfZnJhbWVzICsgMTsKKwkvKiByb3VuZCB1cCB0byAxNiBieXRlIGJvdW5kYXJ5ICovCisJaWYgKHF1ZXVlX3NpemUgJSAxNikKKwkJcXVldWVfc2l6ZSArPSAxNiAtIChxdWV1ZV9zaXplICUgMTYpOworCisJLyogY2hlY2sgYWdhaW5zdCBJT0MgbWF4aW11bSByZXBseSBwb3N0IHF1ZXVlIGRlcHRoICovCisJaWYgKHF1ZXVlX3NpemUgPiBmYWN0cy0+TWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGgpIHsKKwkJcXVldWVfZGlmZiA9IHF1ZXVlX3NpemUgLQorCQkgICAgZmFjdHMtPk1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoOworCisJCS8qIHJvdW5kIHF1ZXVlX2RpZmYgdXAgdG8gbXVsdGlwbGUgb2YgMTYgKi8KKwkJaWYgKHF1ZXVlX2RpZmYgJSAxNikKKwkJCXF1ZXVlX2RpZmYgKz0gMTYgLSAocXVldWVfZGlmZiAlIDE2KTsKKworCQkvKiBhZGp1c3QgcmVxdWVzdF9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKKwkJICogYW5kIHF1ZXVlX3NpemUKKwkJICovCisJCWlvYy0+cmVxdWVzdF9kZXB0aCAtPSBxdWV1ZV9kaWZmOworCQlpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKKwkJcXVldWVfc2l6ZSAtPSBxdWV1ZV9kaWZmOworCX0KKwlpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggPSBxdWV1ZV9zaXplOworCisJLyogbWF4IHNjc2kgaG9zdCBxdWV1ZSBkZXB0aCAqLworCWlvYy0+c2hvc3QtPmNhbl9xdWV1ZSA9IGlvYy0+cmVxdWVzdF9kZXB0aCAtIElOVEVSTkFMX0NNRFNfQ09VTlQ7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaSBob3N0IHF1ZXVlOiBkZXB0aCIKKwkgICAgIiglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlKSk7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY2F0dGVyIGdhdGhlcjogIgorCSAgICAic2dlX2luX21haW5fbXNnKCVkKSwgc2dlX3Blcl9jaGFpbiglZCksIHNnZV9wZXJfaW8oJWQpLCAiCisJICAgICJjaGFpbnNfcGVyX2lvKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZSwKKwkgICAgaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlLCBpb2MtPnNob3N0LT5zZ190YWJsZXNpemUsCisJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8pKTsKKworCS8qIGNvbnRpZ3VvdXMgcG9vbCBmb3IgcmVxdWVzdCBhbmQgY2hhaW5zLCAxNiBieXRlIGFsaWduLCBvbmUgZXh0cmEgIgorCSAqICJmcmFtZSBmb3Igc21pZD0wCisJICovCisJaW9jLT5jaGFpbl9kZXB0aCA9IGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gKiBpb2MtPnJlcXVlc3RfZGVwdGg7CisJc3ogPSAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEgKyBpb2MtPmNoYWluX2RlcHRoKSAqIGlvYy0+cmVxdWVzdF9zeik7CisKKwlpb2MtPnJlcXVlc3RfZG1hX3N6ID0gc3o7CisJaW9jLT5yZXF1ZXN0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBzeiwgJmlvYy0+cmVxdWVzdF9kbWEpOworCWlmICghaW9jLT5yZXF1ZXN0KSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcXVlc3QgcG9vbDogcGNpX2FsbG9jX2NvbnNpc3RlbnQgIgorCQkgICAgImZhaWxlZDogcmVxX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgorCQkgICAgInRvdGFsKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvLCBpb2MtPnJlcXVlc3Rfc3osIHN6LzEwMjQpOworCQlpZiAoaW9jLT5yZXF1ZXN0X2RlcHRoIDwgTVBUMlNBU19TQVNfUVVFVUVfREVQVEgpCisJCQlnb3RvIG91dDsKKwkJcmV0cnlfc3ogKz0gNjQ7CisJCWlvYy0+cmVxdWVzdF9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdCAtIHJldHJ5X3N6OworCQlnb3RvIHJldHJ5X2FsbG9jYXRpb247CisJfQorCisJaWYgKHJldHJ5X3N6KQorCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXF1ZXN0IHBvb2w6IHBjaV9hbGxvY19jb25zaXN0ZW50ICIKKwkJICAgICJzdWNjZWVkOiByZXFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCisJCSAgICAidG90YWwoJWQga2IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdF9kZXB0aCwKKwkJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8sIGlvYy0+cmVxdWVzdF9zeiwgc3ovMTAyNCk7CisKKwlpb2MtPmNoYWluID0gaW9jLT5yZXF1ZXN0ICsgKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxKSAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisJaW9jLT5jaGFpbl9kbWEgPSBpb2MtPnJlcXVlc3RfZG1hICsgKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxKSAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVxdWVzdCBwb29sKDB4JXApOiAiCisJICAgICJkZXB0aCglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsCisJICAgIGlvYy0+cmVxdWVzdCwgaW9jLT5yZXF1ZXN0X2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osCisJICAgICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKiBpb2MtPnJlcXVlc3Rfc3opLzEwMjQpKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjaGFpbiBwb29sKDB4JXApOiBkZXB0aCIKKwkgICAgIiglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+Y2hhaW4sCisJICAgIGlvYy0+Y2hhaW5fZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwgKChpb2MtPmNoYWluX2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KSkvMTAyNCkpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcXVlc3QgcG9vbDogZG1hKDB4JWxseClcbiIsCisJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW9jLT5yZXF1ZXN0X2RtYSkpOworCXRvdGFsX3N6ICs9IHN6OworCisJaW9jLT5zY3NpX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5yZXF1ZXN0X2RlcHRoLAorCSAgICBzaXplb2Yoc3RydWN0IHJlcXVlc3RfdHJhY2tlciksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5zY3NpX2xvb2t1cCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJzY3NpX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkgLyogaW5pdGlhbGl6ZSBzb21lIGJpdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspCisJCWlvYy0+c2NzaV9sb29rdXBbaV0uc21pZCA9IGkgKyAxOworCisJLyogc2Vuc2UgYnVmZmVycywgNCBieXRlIGFsaWduICovCisJc3ogPSBpb2MtPnJlcXVlc3RfZGVwdGggKiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisJaW9jLT5zZW5zZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgic2Vuc2UgcG9vbCIsIGlvYy0+cGRldiwgc3osIDQsCisJICAgIDApOworCWlmICghaW9jLT5zZW5zZV9kbWFfcG9vbCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJzZW5zZSBwb29sOiBwY2lfcG9vbF9jcmVhdGUgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+c2Vuc2UgPSBwY2lfcG9vbF9hbGxvYyhpb2MtPnNlbnNlX2RtYV9wb29sICwgR0ZQX0tFUk5FTCwKKwkgICAgJmlvYy0+c2Vuc2VfZG1hKTsKKwlpZiAoIWlvYy0+c2Vuc2UpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAic2Vuc2UgcG9vbDogcGNpX3Bvb2xfYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkgICAgInNlbnNlIHBvb2woMHglcCk6IGRlcHRoKCVkKSwgZWxlbWVudF9zaXplKCVkKSwgcG9vbF9zaXplIgorCSAgICAiKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNlbnNlLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgc3ovMTAyNCkpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbnNlX2RtYSgweCVsbHgpXG4iLAorCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpaW9jLT5zZW5zZV9kbWEpKTsKKwl0b3RhbF9zeiArPSBzejsKKworCS8qIHJlcGx5IHBvb2wsIDQgYnl0ZSBhbGlnbiAqLworCXN6ID0gaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoICogaW9jLT5yZXBseV9zejsKKwlpb2MtPnJlcGx5X2RtYV9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJyZXBseSBwb29sIiwgaW9jLT5wZGV2LCBzeiwgNCwKKwkgICAgMCk7CisJaWYgKCFpb2MtPnJlcGx5X2RtYV9wb29sKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcGx5IHBvb2w6IHBjaV9wb29sX2NyZWF0ZSBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5yZXBseSA9IHBjaV9wb29sX2FsbG9jKGlvYy0+cmVwbHlfZG1hX3Bvb2wgLCBHRlBfS0VSTkVMLAorCSAgICAmaW9jLT5yZXBseV9kbWEpOworCWlmICghaW9jLT5yZXBseSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXBseSBwb29sOiBwY2lfcG9vbF9hbGxvYyBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVwbHkgcG9vbCgweCVwKTogZGVwdGgiCisJICAgICIoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcGx5LAorCSAgICBpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGgsIGlvYy0+cmVwbHlfc3osIHN6LzEwMjQpKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXBseV9kbWEoMHglbGx4KVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+cmVwbHlfZG1hKSk7CisJdG90YWxfc3ogKz0gc3o7CisKKwkvKiByZXBseSBmcmVlIHF1ZXVlLCAxNiBieXRlIGFsaWduICovCisJc3ogPSBpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGggKiA0OworCWlvYy0+cmVwbHlfZnJlZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgicmVwbHlfZnJlZSBwb29sIiwKKwkgICAgaW9jLT5wZGV2LCBzeiwgMTYsIDApOworCWlmICghaW9jLT5yZXBseV9mcmVlX2RtYV9wb29sKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcGx5X2ZyZWUgcG9vbDogcGNpX3Bvb2xfY3JlYXRlICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPnJlcGx5X2ZyZWUgPSBwY2lfcG9vbF9hbGxvYyhpb2MtPnJlcGx5X2ZyZWVfZG1hX3Bvb2wgLCBHRlBfS0VSTkVMLAorCSAgICAmaW9jLT5yZXBseV9mcmVlX2RtYSk7CisJaWYgKCFpb2MtPnJlcGx5X2ZyZWUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVwbHlfZnJlZSBwb29sOiBwY2lfcG9vbF9hbGxvYyAiCisJCSAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJbWVtc2V0KGlvYy0+cmVwbHlfZnJlZSwgMCwgc3opOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcGx5X2ZyZWUgcG9vbCgweCVwKTogIgorCSAgICAiZGVwdGgoJWQpLCBlbGVtZW50X3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsCisJICAgIGlvYy0+cmVwbHlfZnJlZSwgaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoLCA0LCBzei8xMDI0KSk7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVwbHlfZnJlZV9kbWEiCisJICAgICIoMHglbGx4KVxuIiwgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+cmVwbHlfZnJlZV9kbWEpKTsKKwl0b3RhbF9zeiArPSBzejsKKworCS8qIHJlcGx5IHBvc3QgcXVldWUsIDE2IGJ5dGUgYWxpZ24gKi8KKwlzeiA9IGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCAqIHNpemVvZihNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90KTsKKwlpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgicmVwbHlfcG9zdF9mcmVlIHBvb2wiLAorCSAgICBpb2MtPnBkZXYsIHN6LCAxNiwgMCk7CisJaWYgKCFpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXBseV9wb3N0X2ZyZWUgcG9vbDogcGNpX3Bvb2xfY3JlYXRlICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPnJlcGx5X3Bvc3RfZnJlZSA9IHBjaV9wb29sX2FsbG9jKGlvYy0+cmVwbHlfcG9zdF9mcmVlX2RtYV9wb29sICwKKwkgICAgR0ZQX0tFUk5FTCwgJmlvYy0+cmVwbHlfcG9zdF9mcmVlX2RtYSk7CisJaWYgKCFpb2MtPnJlcGx5X3Bvc3RfZnJlZSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXBseV9wb3N0X2ZyZWUgcG9vbDogcGNpX3Bvb2xfYWxsb2MgIgorCQkgICAgImZhaWxlZFxuIiwgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldChpb2MtPnJlcGx5X3Bvc3RfZnJlZSwgMCwgc3opOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcGx5IHBvc3QgZnJlZSBwb29sIgorCSAgICAiKDB4JXApOiBkZXB0aCglZCksIGVsZW1lbnRfc2l6ZSglZCksIHBvb2xfc2l6ZSglZCBrQilcbiIsCisJICAgIGlvYy0+bmFtZSwgaW9jLT5yZXBseV9wb3N0X2ZyZWUsIGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCwgOCwKKwkgICAgc3ovMTAyNCkpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcGx5X3Bvc3RfZnJlZV9kbWEgPSAiCisJICAgICIoMHglbGx4KVxuIiwgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKQorCSAgICBpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWEpKTsKKwl0b3RhbF9zeiArPSBzejsKKworCWlvYy0+Y29uZmlnX3BhZ2Vfc3ogPSA1MTI7CisJaW9jLT5jb25maWdfcGFnZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwKKwkgICAgaW9jLT5jb25maWdfcGFnZV9zeiwgJmlvYy0+Y29uZmlnX3BhZ2VfZG1hKTsKKwlpZiAoIWlvYy0+Y29uZmlnX3BhZ2UpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiY29uZmlnIHBhZ2U6IHBjaV9wb29sX2FsbG9jICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjb25maWcgcGFnZSgweCVwKTogc2l6ZSIKKwkgICAgIiglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5jb25maWdfcGFnZSwgaW9jLT5jb25maWdfcGFnZV9zeikpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImNvbmZpZ19wYWdlX2RtYSIKKwkgICAgIigweCVsbHgpXG4iLCBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpaW9jLT5jb25maWdfcGFnZV9kbWEpKTsKKwl0b3RhbF9zeiArPSBpb2MtPmNvbmZpZ19wYWdlX3N6OworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIkFsbG9jYXRlZCBwaHlzaWNhbCBtZW1vcnk6IHNpemUoJWQga0IpXG4iLAorCSAgICBpb2MtPm5hbWUsIHRvdGFsX3N6LzEwMjQpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJDdXJyZW50IENvbnRyb2xsZXIgUXVldWUgRGVwdGgoJWQpLCAiCisJICAgICJNYXggQ29udHJvbGxlciBRdWV1ZSBEZXB0aCglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlLCBmYWN0cy0+UmVxdWVzdENyZWRpdCk7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIlNjYXR0ZXIgR2F0aGVyIEVsZW1lbnRzIHBlciBJTyglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplKTsKKwlyZXR1cm4gMDsKKworIG91dDoKKwlfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyhpb2MpOworCXJldHVybiAtRU5PTUVNOworfQorCisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZSAtIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIE1QVCBhZGFwdGVyLgorICogQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKKyAqIEBjb29rZWQ6IFJlcXVlc3QgcmF3IG9yIGNvb2tlZCBJT0Mgc3RhdGUKKyAqCisgKiBSZXR1cm5zIGFsbCBJT0MgRG9vcmJlbGwgcmVnaXN0ZXIgYml0cyBpZiBjb29rZWQ9PTAsIGVsc2UganVzdCB0aGUKKyAqIERvb3JiZWxsIGJpdHMgaW4gTVBJX0lPQ19TVEFURV9NQVNLLgorICovCit1MzIKK21wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgY29va2VkKQoreworCXUzMiBzLCBzYzsKKworCXMgPSByZWFkbCgmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CisJc2MgPSBzICYgTVBJMl9JT0NfU1RBVEVfTUFTSzsKKwlyZXR1cm4gY29va2VkID8gc2MgOiBzOworfQorCisvKioKKyAqIF9iYXNlX3dhaXRfb25faW9jc3RhdGUgLSB3YWl0aW5nIG9uIGEgcGFydGljdWxhciBpb2Mgc3RhdGUKKyAqIEBpb2Nfc3RhdGU6IGNvbnRyb2xsZXIgc3RhdGUgeyBSRUFEWSwgT1BFUkFUSU9OQUwsIG9yIFJFU0VUIH0KKyAqIEB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX3dhaXRfb25faW9jc3RhdGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgaW9jX3N0YXRlLCBpbnQgdGltZW91dCwKKyAgICBpbnQgc2xlZXBfZmxhZykKK3sKKwl1MzIgY291bnQsIGNudGRuOworCXUzMiBjdXJyZW50X3N0YXRlOworCisJY291bnQgPSAwOworCWNudGRuID0gKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKSA/IDEwMDAqdGltZW91dCA6IDIwMDAqdGltZW91dDsKKwlkbyB7CisJCWN1cnJlbnRfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCWlmIChjdXJyZW50X3N0YXRlID09IGlvY19zdGF0ZSkKKwkJCXJldHVybiAwOworCQlpZiAoY291bnQgJiYgY3VycmVudF9zdGF0ZSA9PSBNUEkyX0lPQ19TVEFURV9GQVVMVCkKKwkJCWJyZWFrOworCQlpZiAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApCisJCQltc2xlZXAoMSk7CisJCWVsc2UKKwkJCXVkZWxheSg1MDApOworCQljb3VudCsrOworCX0gd2hpbGUgKC0tY250ZG4pOworCisJcmV0dXJuIGN1cnJlbnRfc3RhdGU7Cit9CisKKy8qKgorICogX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50IC0gd2FpdGluZyBmb3IgY29udHJvbGxlciBpbnRlcnJ1cHQoZ2VuZXJhdGVkIGJ5CisgKiBhIHdyaXRlIHRvIHRoZSBkb29yYmVsbCkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqCisgKiBOb3RlczogTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMgLSBzZXQgdG8gb25lIHdoZW4gSU9DIHdyaXRlcyB0byBkb29yYmVsbC4KKyAqLworc3RhdGljIGludAorX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHRpbWVvdXQsCisgICAgaW50IHNsZWVwX2ZsYWcpCit7CisJdTMyIGNudGRuLCBjb3VudDsKKwl1MzIgaW50X3N0YXR1czsKKworCWNvdW50ID0gMDsKKwljbnRkbiA9IChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkgPyAxMDAwKnRpbWVvdXQgOiAyMDAwKnRpbWVvdXQ7CisJZG8geworCQlpbnRfc3RhdHVzID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisJCWlmIChpbnRfc3RhdHVzICYgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMpIHsKKwkJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJCSAgICAic3VjY2Vzc2Z1bGwgY291bnQoJWQpLCB0aW1lb3V0KCVkKVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIF9fZnVuY19fLCBjb3VudCwgdGltZW91dCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEpOworCQllbHNlCisJCQl1ZGVsYXkoNTAwKTsKKwkJY291bnQrKzsKKwl9IHdoaWxlICgtLWNudGRuKTsKKworCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZHVlIHRvIHRpbWVvdXQgY291bnQoJWQpLCAiCisJICAgICJpbnRfc3RhdHVzKCV4KSFcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGNvdW50LCBpbnRfc3RhdHVzKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworLyoqCisgKiBfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9hY2sgLSB3YWl0aW5nIGZvciBjb250cm9sbGVyIHRvIHJlYWQgdGhlIGRvb3JiZWxsLgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAdGltZW91dDogdGltZW91dCBpbiBzZWNvbmQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICoKKyAqIE5vdGVzOiBNUEkyX0hJU19TWVMySU9DX0RCX1NUQVRVUyAtIHNldCB0byBvbmUgd2hlbiBob3N0IHdyaXRlcyB0bworICogZG9vcmJlbGwuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2FjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCB0aW1lb3V0LAorICAgIGludCBzbGVlcF9mbGFnKQoreworCXUzMiBjbnRkbiwgY291bnQ7CisJdTMyIGludF9zdGF0dXM7CisJdTMyIGRvb3JiZWxsOworCisJY291bnQgPSAwOworCWNudGRuID0gKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKSA/IDEwMDAqdGltZW91dCA6IDIwMDAqdGltZW91dDsKKwlkbyB7CisJCWludF9zdGF0dXMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKKwkJaWYgKCEoaW50X3N0YXR1cyAmIE1QSTJfSElTX1NZUzJJT0NfREJfU1RBVFVTKSkgeworCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkJICAgICJzdWNjZXNzZnVsbCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgX19mdW5jX18sIGNvdW50LCB0aW1lb3V0KSk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChpbnRfc3RhdHVzICYgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMpIHsKKwkJCWRvb3JiZWxsID0gcmVhZGwoJmlvYy0+Y2hpcC0+RG9vcmJlbGwpOworCQkJaWYgKChkb29yYmVsbCAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09CisJCQkgICAgTVBJMl9JT0NfU1RBVEVfRkFVTFQpIHsKKwkJCQltcHQyc2FzX2Jhc2VfZmF1bHRfaW5mbyhpb2MgLCBkb29yYmVsbCk7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0gZWxzZSBpZiAoaW50X3N0YXR1cyA9PSAweEZGRkZGRkZGKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEpOworCQllbHNlCisJCQl1ZGVsYXkoNTAwKTsKKwkJY291bnQrKzsKKwl9IHdoaWxlICgtLWNudGRuKTsKKworIG91dDoKKwlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGR1ZSB0byB0aW1lb3V0IGNvdW50KCVkKSwgIgorCSAgICAiaW50X3N0YXR1cygleCkhXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBjb3VudCwgaW50X3N0YXR1cyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qKgorICogX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfbm90X3VzZWQgLSB3YWl0aW5nIGZvciBkb29yYmVsbCB0byBub3QgYmUgaW4gdXNlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50CitfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9ub3RfdXNlZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCB0aW1lb3V0LAorICAgIGludCBzbGVlcF9mbGFnKQoreworCXUzMiBjbnRkbiwgY291bnQ7CisJdTMyIGRvb3JiZWxsX3JlZzsKKworCWNvdW50ID0gMDsKKwljbnRkbiA9IChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkgPyAxMDAwKnRpbWVvdXQgOiAyMDAwKnRpbWVvdXQ7CisJZG8geworCQlkb29yYmVsbF9yZWcgPSByZWFkbCgmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CisJCWlmICghKGRvb3JiZWxsX3JlZyAmIE1QSTJfRE9PUkJFTExfVVNFRCkpIHsKKwkJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJCSAgICAic3VjY2Vzc2Z1bGwgY291bnQoJWQpLCB0aW1lb3V0KCVkKVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIF9fZnVuY19fLCBjb3VudCwgdGltZW91dCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEpOworCQllbHNlCisJCQl1ZGVsYXkoNTAwKTsKKwkJY291bnQrKzsKKwl9IHdoaWxlICgtLWNudGRuKTsKKworCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZHVlIHRvIHRpbWVvdXQgY291bnQoJWQpLCAiCisJICAgICJkb29yYmVsbF9yZWcoJXgpIVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgY291bnQsIGRvb3JiZWxsX3JlZyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qKgorICogX2Jhc2Vfc2VuZF9pb2NfcmVzZXQgLSBzZW5kIGRvb3JiZWxsIHJlc2V0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByZXNldF90eXBlOiBjdXJyZW50bHkgb25seSBzdXBwb3J0czogTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VUCisgKiBAdGltZW91dDogdGltZW91dCBpbiBzZWNvbmQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9zZW5kX2lvY19yZXNldChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IHJlc2V0X3R5cGUsIGludCB0aW1lb3V0LAorICAgIGludCBzbGVlcF9mbGFnKQoreworCXUzMiBpb2Nfc3RhdGU7CisJaW50IHIgPSAwOworCisJaWYgKHJlc2V0X3R5cGUgIT0gTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VUKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB1bmtub3duIHJlc2V0X3R5cGVcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCEoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgorCSAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzZW5kaW5nIG1lc3NhZ2UgdW5pdCByZXNldCAhIVxuIiwgaW9jLT5uYW1lKTsKKworCXdyaXRlbChyZXNldF90eXBlIDw8IE1QSTJfRE9PUkJFTExfRlVOQ1RJT05fU0hJRlQsCisJICAgICZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKKwlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2Fjayhpb2MsIDE1LCBzbGVlcF9mbGFnKSkpIHsKKwkJciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKwlpb2Nfc3RhdGUgPSBfYmFzZV93YWl0X29uX2lvY3N0YXRlKGlvYywgTVBJMl9JT0NfU1RBVEVfUkVBRFksCisJICAgIHRpbWVvdXQsIHNsZWVwX2ZsYWcpOworCWlmIChpb2Nfc3RhdGUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBnb2luZyB0byByZWFkeSBzdGF0ZSAiCisJCSAgICAiIChpb2Nfc3RhdGU9MHgleClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGlvY19zdGF0ZSk7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9Cisgb3V0OgorCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJtZXNzYWdlIHVuaXQgcmVzZXQ6ICVzXG4iLAorCSAgICBpb2MtPm5hbWUsICgociA9PSAwKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX2Jhc2VfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0IC0gc2VuZCByZXF1ZXN0IHRocnUgZG9vcmJlbGwgaW50ZXJmYWNlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByZXF1ZXN0X2J5dGVzOiByZXF1ZXN0IGxlbmd0aAorICogQHJlcXVlc3Q6IHBvaW50ZXIgaGF2aW5nIHJlcXVlc3QgcGF5bG9hZAorICogQHJlcGx5X2J5dGVzOiByZXBseSBsZW5ndGgKKyAqIEByZXBseTogcG9pbnRlciB0byByZXBseSBwYXlsb2FkCisgKiBAdGltZW91dDogdGltZW91dCBpbiBzZWNvbmQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9oYW5kc2hha2VfcmVxX3JlcGx5X3dhaXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVxdWVzdF9ieXRlcywKKyAgICB1MzIgKnJlcXVlc3QsIGludCByZXBseV9ieXRlcywgdTE2ICpyZXBseSwgaW50IHRpbWVvdXQsIGludCBzbGVlcF9mbGFnKQoreworCU1QSTJEZWZhdWx0UmVwbHlfdCAqZGVmYXVsdF9yZXBseSA9IChNUEkyRGVmYXVsdFJlcGx5X3QgKilyZXBseTsKKwlpbnQgaTsKKwl1OCBmYWlsZWQ7CisJdTE2IGR1bW15OworCXUzMiAqbWZwOworCisJLyogbWFrZSBzdXJlIGRvb3JiZWxsIGlzIG5vdCBpbiB1c2UgKi8KKwlpZiAoKHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKSAmIE1QSTJfRE9PUkJFTExfVVNFRCkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaXMgaW4gdXNlICIKKwkJICAgICIgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogY2xlYXIgcGVuZGluZyBkb29yYmVsbCBpbnRlcnJ1cHRzIGZyb20gcHJldmlvdXMgc3RhdGUgY2hhbmdlcyAqLworCWlmIChyZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKSAmCisJICAgIE1QSTJfSElTX0lPQzJTWVNfREJfU1RBVFVTKQorCQl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisKKwkvKiBzZW5kIG1lc3NhZ2UgdG8gaW9jICovCisJd3JpdGVsKCgoTVBJMl9GVU5DVElPTl9IQU5EU0hBS0U8PE1QSTJfRE9PUkJFTExfRlVOQ1RJT05fU0hJRlQpIHwKKwkgICAgKChyZXF1ZXN0X2J5dGVzLzQpPDxNUEkyX0RPT1JCRUxMX0FERF9EV09SRFNfU0hJRlQpKSwKKwkgICAgJmlvYy0+Y2hpcC0+RG9vcmJlbGwpOworCisJaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCA1LCBzbGVlcF9mbGFnKSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaGFuZHNoYWtlICIKKwkJICAgImludCBmYWlsZWQgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKKworCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfYWNrKGlvYywgNSwgc2xlZXBfZmxhZykpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRvb3JiZWxsIGhhbmRzaGFrZSAiCisJCSAgICAiYWNrIGZhaWxlZCAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwgX19MSU5FX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBzZW5kIG1lc3NhZ2UgMzItYml0cyBhdCBhIHRpbWUgKi8KKwlmb3IgKGkgPSAwLCBmYWlsZWQgPSAwOyBpIDwgcmVxdWVzdF9ieXRlcy80ICYmICFmYWlsZWQ7IGkrKykgeworCQl3cml0ZWwoY3B1X3RvX2xlMzIocmVxdWVzdFtpXSksICZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKKwkJaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9hY2soaW9jLCA1LCBzbGVlcF9mbGFnKSkpCisJCQlmYWlsZWQgPSAxOworCX0KKworCWlmIChmYWlsZWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaGFuZHNoYWtlICIKKwkJICAgICJzZW5kaW5nIHJlcXVlc3QgZmFpbGVkIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIG5vdyB3YWl0IGZvciB0aGUgcmVwbHkgKi8KKwlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIHRpbWVvdXQsIHNsZWVwX2ZsYWcpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJkb29yYmVsbCBoYW5kc2hha2UgIgorCQkgICAiaW50IGZhaWxlZCAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwgX19MSU5FX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiByZWFkIHRoZSBmaXJzdCB0d28gMTYtYml0cywgaXQgZ2l2ZXMgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgcmVwbHkgKi8KKwlyZXBseVswXSA9IGxlMTZfdG9fY3B1KHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKQorCSAgICAmIE1QSTJfRE9PUkJFTExfREFUQV9NQVNLKTsKKwl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisJaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCA1LCBzbGVlcF9mbGFnKSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaGFuZHNoYWtlICIKKwkJICAgImludCBmYWlsZWQgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJlcGx5WzFdID0gbGUxNl90b19jcHUocmVhZGwoJmlvYy0+Y2hpcC0+RG9vcmJlbGwpCisJICAgICYgTVBJMl9ET09SQkVMTF9EQVRBX01BU0spOworCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKKworCWZvciAoaSA9IDI7IGkgPCBkZWZhdWx0X3JlcGx5LT5Nc2dMZW5ndGggKiAyOyBpKyspICB7CisJCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KGlvYywgNSwgc2xlZXBfZmxhZykpKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJkb29yYmVsbCAiCisJCQkgICAgImhhbmRzaGFrZSBpbnQgZmFpbGVkIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIF9fTElORV9fKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmIChpID49ICByZXBseV9ieXRlcy8yKSAvKiBvdmVyZmxvdyBjYXNlICovCisJCQlkdW1teSA9IHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKKwkJZWxzZQorCQkJcmVwbHlbaV0gPSBsZTE2X3RvX2NwdShyZWFkbCgmaW9jLT5jaGlwLT5Eb29yYmVsbCkKKwkJCSAgICAmIE1QSTJfRE9PUkJFTExfREFUQV9NQVNLKTsKKwkJd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCX0KKworCV9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIDUsIHNsZWVwX2ZsYWcpOworCWlmIChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9ub3RfdXNlZChpb2MsIDUsIHNsZWVwX2ZsYWcpICE9IDApIHsKKwkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRvb3JiZWxsIGlzIGluIHVzZSAiCisJCSAgICAiIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLCBfX0xJTkVfXykpOworCX0KKwl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0lOSVQpIHsKKwkJbWZwID0gKHUzMiAqKXJlcGx5OworCQlwcmludGsoS0VSTl9ERUJVRyAiXHRvZmZzZXQ6ZGF0YVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCByZXBseV9ieXRlcy80OyBpKyspCisJCQlwcmludGsoS0VSTl9ERUJVRyAiXHRbMHglMDJ4XTolMDh4XG4iLCBpKjQsCisJCQkgICAgbGUzMl90b19jcHUobWZwW2ldKSk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2wgLSBzZW5kIHNhcyBpb3VuaXQgY29udHJvbCB0byBGVworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiB0aGUgcmVwbHkgcGF5bG9hZCBmcm9tIEZXCisgKiBAbXBpX3JlcXVlc3Q6IHRoZSByZXF1ZXN0IHBheWxvYWQgc2VudCB0byBGVworICoKKyAqIFRoZSBTQVMgSU8gVW5pdCBDb250cm9sIFJlcXVlc3QgbWVzc2FnZSBhbGxvd3MgdGhlIGhvc3QgdG8gcGVyZm9ybSBsb3ctbGV2ZWwKKyAqIG9wZXJhdGlvbnMsIHN1Y2ggYXMgcmVzZXRzIG9uIHRoZSBQSFlzIG9mIHRoZSBJTyBVbml0LCBhbHNvIGFsbG93cyB0aGUgaG9zdAorICogdG8gb2J0YWluIHRoZSBJT0MgYXNzaWduZWQgZGV2aWNlIGhhbmRsZXMgZm9yIGEgZGV2aWNlIGlmIGl0IGhhcyBvdGhlcgorICogaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSwgaW4gYWRkaXRpb24gYWxsb3dzIHRoZSBob3N0IHRvCisgKiByZW1vdmUgSU9DIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2woc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCAqbXBpX3JlcGx5LAorICAgIE1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90ICptcGlfcmVxdWVzdCkKK3sKKwl1MTYgc21pZDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdTggaXNzdWVfcmVzZXQ7CisJaW50IHJjOworCXZvaWQgKnJlcXVlc3Q7CisJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCW11dGV4X2xvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKKworCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGJhc2VfY21kIGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXdhaXRfc3RhdGVfY291bnQgPSAwOworCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwl3aGlsZSAoaW9jX3N0YXRlICE9IE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCWlmICh3YWl0X3N0YXRlX2NvdW50KysgPT0gMTApIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQKKwkJCSAgICAiJXM6IGZhaWxlZCBkdWUgdG8gaW9jIG5vdCBvcGVyYXRpb25hbFxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJCXJjID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNzbGVlcCgxKTsKKwkJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHdhaXRpbmcgZm9yICIKKwkJICAgICJvcGVyYXRpb25hbCBzdGF0ZShjb3VudD0lZClcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fLCB3YWl0X3N0YXRlX2NvdW50KTsKKwl9CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5iYXNlX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCXJlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOworCW1lbWNweShyZXF1ZXN0LCBtcGlfcmVxdWVzdCwgc2l6ZW9mKE1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90KSk7CisJaWYgKG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgfHwKKwkgICAgbXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfTElOS19SRVNFVCkKKwkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAorCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7CisJaWYgKChtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUIHx8CisJICAgIG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQpICYmCisJICAgIGlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MpCisJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpCisJCW1lbWNweShtcGlfcmVwbHksIGlvYy0+YmFzZV9jbWRzLnJlcGx5LAorCQkgICAgc2l6ZW9mKE1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCkpOworCWVsc2UKKwkJbWVtc2V0KG1waV9yZXBseSwgMCwgc2l6ZW9mKE1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCkpOworCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCWdvdG8gb3V0OworCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlyYyA9IC1FRkFVTFQ7Cisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOworCXJldHVybiByYzsKK30KKworCisvKioKKyAqIG1wdDJzYXNfYmFzZV9zY3NpX2VuY2xvc3VyZV9wcm9jZXNzb3IgLSBzZW5kaW5nIHJlcXVlc3QgdG8gc2VwIGRldmljZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiB0aGUgcmVwbHkgcGF5bG9hZCBmcm9tIEZXCisgKiBAbXBpX3JlcXVlc3Q6IHRoZSByZXF1ZXN0IHBheWxvYWQgc2VudCB0byBGVworICoKKyAqIFRoZSBTQ1NJIEVuY2xvc3VyZSBQcm9jZXNzb3IgcmVxdWVzdCBtZXNzYWdlIGNhdXNlcyB0aGUgSU9DIHRvCisgKiBjb21tdW5pY2F0ZSB3aXRoIFNFUyBkZXZpY2VzIHRvIGNvbnRyb2wgTEVEIHN0YXR1cyBzaWduYWxzLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19iYXNlX3Njc2lfZW5jbG9zdXJlX3Byb2Nlc3NvcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMlNlcFJlcGx5X3QgKm1waV9yZXBseSwgTXBpMlNlcFJlcXVlc3RfdCAqbXBpX3JlcXVlc3QpCit7CisJdTE2IHNtaWQ7CisJdTMyIGlvY19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXU4IGlzc3VlX3Jlc2V0OworCWludCByYzsKKwl2b2lkICpyZXF1ZXN0OworCXUxNiB3YWl0X3N0YXRlX2NvdW50OworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwltdXRleF9sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CisKKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBiYXNlX2NtZCBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwl3YWl0X3N0YXRlX2NvdW50ID0gMDsKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJd2hpbGUgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgeworCQlpZiAod2FpdF9zdGF0ZV9jb3VudCsrID09IDEwKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlyYyA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzc2xlZXAoMSk7CisJCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB3YWl0aW5nIGZvciAiCisJCSAgICAib3BlcmF0aW9uYWwgc3RhdGUoY291bnQ9JWQpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgd2FpdF9zdGF0ZV9jb3VudCk7CisJfQorCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+YmFzZV9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IDA7CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwlyZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKKwltZW1jcHkocmVxdWVzdCwgbXBpX3JlcXVlc3QsIHNpemVvZihNcGkyU2VwUmVwbHlfdCkpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKKwkgICAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOworCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU2VwUmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQorCQkJaXNzdWVfcmVzZXQgPSAxOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkKKwkJbWVtY3B5KG1waV9yZXBseSwgaW9jLT5iYXNlX2NtZHMucmVwbHksCisJCSAgICBzaXplb2YoTXBpMlNlcFJlcGx5X3QpKTsKKwllbHNlCisJCW1lbXNldChtcGlfcmVwbHksIDAsIHNpemVvZihNcGkyU2VwUmVwbHlfdCkpOworCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCWdvdG8gb3V0OworCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlyYyA9IC1FRkFVTFQ7Cisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfYmFzZV9nZXRfcG9ydF9mYWN0cyAtIG9idGFpbiBwb3J0IGZhY3RzIHJlcGx5IGFuZCBzYXZlIGluIGlvYworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2VfZ2V0X3BvcnRfZmFjdHMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcG9ydCwgaW50IHNsZWVwX2ZsYWcpCit7CisJTXBpMlBvcnRGYWN0c1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlNcGkyUG9ydEZhY3RzUmVwbHlfdCBtcGlfcmVwbHksICpwZmFjdHM7CisJaW50IG1waV9yZXBseV9zeiwgbXBpX3JlcXVlc3Rfc3osIHI7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCW1waV9yZXBseV9zeiA9IHNpemVvZihNcGkyUG9ydEZhY3RzUmVwbHlfdCk7CisJbXBpX3JlcXVlc3Rfc3ogPSBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcXVlc3RfdCk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgbXBpX3JlcXVlc3Rfc3opOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9QT1JUX0ZBQ1RTOworCW1waV9yZXF1ZXN0LlBvcnROdW1iZXIgPSBwb3J0OworCXIgPSBfYmFzZV9oYW5kc2hha2VfcmVxX3JlcGx5X3dhaXQoaW9jLCBtcGlfcmVxdWVzdF9zeiwKKwkgICAgKHUzMiAqKSZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5X3N6LCAodTE2ICopJm1waV9yZXBseSwgNSwgQ0FOX1NMRUVQKTsKKworCWlmIChyICE9IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGhhbmRzaGFrZSBmYWlsZWQgKHI9JWQpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcik7CisJCXJldHVybiByOworCX0KKworCXBmYWN0cyA9ICZpb2MtPnBmYWN0c1twb3J0XTsKKwltZW1zZXQocGZhY3RzLCAwLCBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpKTsKKwlwZmFjdHMtPlBvcnROdW1iZXIgPSBtcGlfcmVwbHkuUG9ydE51bWJlcjsKKwlwZmFjdHMtPlZQX0lEID0gbXBpX3JlcGx5LlZQX0lEOworCXBmYWN0cy0+VkZfSUQgPSBtcGlfcmVwbHkuVkZfSUQ7CisJcGZhY3RzLT5NYXhQb3N0ZWRDbWRCdWZmZXJzID0KKwkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5Lk1heFBvc3RlZENtZEJ1ZmZlcnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2Jhc2VfZ2V0X2lvY19mYWN0cyAtIG9idGFpbiBpb2MgZmFjdHMgcmVwbHkgYW5kIHNhdmUgaW4gaW9jCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9nZXRfaW9jX2ZhY3RzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCit7CisJTXBpMklPQ0ZhY3RzUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCU1waTJJT0NGYWN0c1JlcGx5X3QgbXBpX3JlcGx5LCAqZmFjdHM7CisJaW50IG1waV9yZXBseV9zeiwgbXBpX3JlcXVlc3Rfc3osIHI7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCW1waV9yZXBseV9zeiA9IHNpemVvZihNcGkySU9DRmFjdHNSZXBseV90KTsKKwltcGlfcmVxdWVzdF9zeiA9IHNpemVvZihNcGkySU9DRmFjdHNSZXF1ZXN0X3QpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIG1waV9yZXF1ZXN0X3N6KTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fSU9DX0ZBQ1RTOworCXIgPSBfYmFzZV9oYW5kc2hha2VfcmVxX3JlcGx5X3dhaXQoaW9jLCBtcGlfcmVxdWVzdF9zeiwKKwkgICAgKHUzMiAqKSZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5X3N6LCAodTE2ICopJm1waV9yZXBseSwgNSwgQ0FOX1NMRUVQKTsKKworCWlmIChyICE9IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGhhbmRzaGFrZSBmYWlsZWQgKHI9JWQpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcik7CisJCXJldHVybiByOworCX0KKworCWZhY3RzID0gJmlvYy0+ZmFjdHM7CisJbWVtc2V0KGZhY3RzLCAwLCBzaXplb2YoTXBpMklPQ0ZhY3RzUmVwbHlfdCkpOworCWZhY3RzLT5Nc2dWZXJzaW9uID0gbGUxNl90b19jcHUobXBpX3JlcGx5Lk1zZ1ZlcnNpb24pOworCWZhY3RzLT5IZWFkZXJWZXJzaW9uID0gbGUxNl90b19jcHUobXBpX3JlcGx5LkhlYWRlclZlcnNpb24pOworCWZhY3RzLT5WUF9JRCA9IG1waV9yZXBseS5WUF9JRDsKKwlmYWN0cy0+VkZfSUQgPSBtcGlfcmVwbHkuVkZfSUQ7CisJZmFjdHMtPklPQ0V4Y2VwdGlvbnMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DRXhjZXB0aW9ucyk7CisJZmFjdHMtPk1heENoYWluRGVwdGggPSBtcGlfcmVwbHkuTWF4Q2hhaW5EZXB0aDsKKwlmYWN0cy0+V2hvSW5pdCA9IG1waV9yZXBseS5XaG9Jbml0OworCWZhY3RzLT5OdW1iZXJPZlBvcnRzID0gbXBpX3JlcGx5Lk51bWJlck9mUG9ydHM7CisJZmFjdHMtPlJlcXVlc3RDcmVkaXQgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuUmVxdWVzdENyZWRpdCk7CisJZmFjdHMtPk1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoID0KKwkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5Lk1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoKTsKKwlmYWN0cy0+UHJvZHVjdElEID0gbGUxNl90b19jcHUobXBpX3JlcGx5LlByb2R1Y3RJRCk7CisJZmFjdHMtPklPQ0NhcGFiaWxpdGllcyA9IGxlMzJfdG9fY3B1KG1waV9yZXBseS5JT0NDYXBhYmlsaXRpZXMpOworCWlmICgoZmFjdHMtPklPQ0NhcGFiaWxpdGllcyAmIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9JTlRFR1JBVEVEX1JBSUQpKQorCQlpb2MtPmlyX2Zpcm13YXJlID0gMTsKKwlmYWN0cy0+RldWZXJzaW9uLldvcmQgPSBsZTMyX3RvX2NwdShtcGlfcmVwbHkuRldWZXJzaW9uLldvcmQpOworCWZhY3RzLT5JT0NSZXF1ZXN0RnJhbWVTaXplID0KKwkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1JlcXVlc3RGcmFtZVNpemUpOworCWZhY3RzLT5NYXhJbml0aWF0b3JzID0gbGUxNl90b19jcHUobXBpX3JlcGx5Lk1heEluaXRpYXRvcnMpOworCWZhY3RzLT5NYXhUYXJnZXRzID0gbGUxNl90b19jcHUobXBpX3JlcGx5Lk1heFRhcmdldHMpOworCWlvYy0+c2hvc3QtPm1heF9pZCA9IC0xOworCWZhY3RzLT5NYXhTYXNFeHBhbmRlcnMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuTWF4U2FzRXhwYW5kZXJzKTsKKwlmYWN0cy0+TWF4RW5jbG9zdXJlcyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5NYXhFbmNsb3N1cmVzKTsKKwlmYWN0cy0+UHJvdG9jb2xGbGFncyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5Qcm90b2NvbEZsYWdzKTsKKwlmYWN0cy0+SGlnaFByaW9yaXR5Q3JlZGl0ID0KKwkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LkhpZ2hQcmlvcml0eUNyZWRpdCk7CisJZmFjdHMtPlJlcGx5RnJhbWVTaXplID0gbXBpX3JlcGx5LlJlcGx5RnJhbWVTaXplOworCWZhY3RzLT5NYXhEZXZIYW5kbGUgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuTWF4RGV2SGFuZGxlKTsKKworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImhiYSBxdWV1ZSBkZXB0aCglZCksICIKKwkgICAgIm1heCBjaGFpbnMgcGVyIGlvKCVkKVxuIiwgaW9jLT5uYW1lLCBmYWN0cy0+UmVxdWVzdENyZWRpdCwKKwkgICAgZmFjdHMtPk1heENoYWluRGVwdGgpKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXF1ZXN0IGZyYW1lIHNpemUoJWQpLCAiCisJICAgICJyZXBseSBmcmFtZSBzaXplKCVkKVxuIiwgaW9jLT5uYW1lLAorCSAgICBmYWN0cy0+SU9DUmVxdWVzdEZyYW1lU2l6ZSAqIDQsIGZhY3RzLT5SZXBseUZyYW1lU2l6ZSAqIDQpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfYmFzZV9zZW5kX2lvY19pbml0IC0gc2VuZCBpb2NfaW5pdCB0byBmaXJtd2FyZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9zZW5kX2lvY19pbml0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQoreworCU1waTJJT0NJbml0UmVxdWVzdF90IG1waV9yZXF1ZXN0OworCU1waTJJT0NJbml0UmVwbHlfdCBtcGlfcmVwbHk7CisJaW50IHI7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkySU9DSW5pdFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9JT0NfSU5JVDsKKwltcGlfcmVxdWVzdC5XaG9Jbml0ID0gTVBJMl9XSE9JTklUX0hPU1RfRFJJVkVSOworCW1waV9yZXF1ZXN0LlZGX0lEID0gVkZfSUQ7CisJbXBpX3JlcXVlc3QuTXNnVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSTJfVkVSU0lPTik7CisJbXBpX3JlcXVlc3QuSGVhZGVyVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSTJfSEVBREVSX1ZFUlNJT04pOworCisJLyogSW4gTVBJIFJldmlzaW9uIEkgKDB4QSksIHRoZSBTeXN0ZW1SZXBseUZyYW1lU2l6ZShvZmZzZXQgMHgxOCkgd2FzCisJICogcmVtb3ZlZCBhbmQgbWFkZSByZXNlcnZlZC4gIEZvciB0aG9zZSB3aXRoIG9sZGVyIGZpcm13YXJlIHdpbGwgbmVlZAorCSAqIHRoaXMgZml4LiBJdCB3YXMgZGVjaWRlZCB0aGF0IHRoZSBSZXBseSBhbmQgUmVxdWVzdCBmcmFtZSBzaXplcyBhcmUKKwkgKiB0aGUgc2FtZS4KKwkgKi8KKwlpZiAoKGlvYy0+ZmFjdHMuSGVhZGVyVmVyc2lvbiA+PiA4KSA8IDB4QSkgeworCQltcGlfcmVxdWVzdC5SZXNlcnZlZDcgPSBjcHVfdG9fbGUxNihpb2MtPnJlcGx5X3N6KTsKKy8qCQltcGlfcmVxdWVzdC5TeXN0ZW1SZXBseUZyYW1lU2l6ZSA9CisgKgkJIGNwdV90b19sZTE2KGlvYy0+cmVwbHlfc3opOworICovCisJfQorCisJbXBpX3JlcXVlc3QuU3lzdGVtUmVxdWVzdEZyYW1lU2l6ZSA9IGNwdV90b19sZTE2KGlvYy0+cmVxdWVzdF9zei80KTsKKwltcGlfcmVxdWVzdC5SZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aCA9CisJICAgIGNwdV90b19sZTE2KGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCk7CisJbXBpX3JlcXVlc3QuUmVwbHlGcmVlUXVldWVEZXB0aCA9CisJICAgIGNwdV90b19sZTE2KGlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCk7CisKKyNpZiBCSVRTX1BFUl9MT05HID4gMzIKKwltcGlfcmVxdWVzdC5TZW5zZUJ1ZmZlckFkZHJlc3NIaWdoID0KKwkgICAgY3B1X3RvX2xlMzIoaW9jLT5zZW5zZV9kbWEgPj4gMzIpOworCW1waV9yZXF1ZXN0LlN5c3RlbVJlcGx5QWRkcmVzc0hpZ2ggPQorCSAgICBjcHVfdG9fbGUzMihpb2MtPnJlcGx5X2RtYSA+PiAzMik7CisJbXBpX3JlcXVlc3QuU3lzdGVtUmVxdWVzdEZyYW1lQmFzZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGU2NChpb2MtPnJlcXVlc3RfZG1hKTsKKwltcGlfcmVxdWVzdC5SZXBseUZyZWVRdWV1ZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGU2NChpb2MtPnJlcGx5X2ZyZWVfZG1hKTsKKwltcGlfcmVxdWVzdC5SZXBseURlc2NyaXB0b3JQb3N0UXVldWVBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlNjQoaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hKTsKKyNlbHNlCisJbXBpX3JlcXVlc3QuU3lzdGVtUmVxdWVzdEZyYW1lQmFzZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihpb2MtPnJlcXVlc3RfZG1hKTsKKwltcGlfcmVxdWVzdC5SZXBseUZyZWVRdWV1ZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihpb2MtPnJlcGx5X2ZyZWVfZG1hKTsKKwltcGlfcmVxdWVzdC5SZXBseURlc2NyaXB0b3JQb3N0UXVldWVBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlMzIoaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hKTsKKyNlbmRpZgorCisJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19JTklUKSB7CisJCXUzMiAqbWZwOworCQlpbnQgaTsKKworCQltZnAgPSAodTMyICopJm1waV9yZXF1ZXN0OworCQlwcmludGsoS0VSTl9ERUJVRyAiXHRvZmZzZXQ6ZGF0YVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpLzQ7IGkrKykKKwkJCXByaW50ayhLRVJOX0RFQlVHICJcdFsweCUwMnhdOiUwOHhcbiIsIGkqNCwKKwkJCSAgICBsZTMyX3RvX2NwdShtZnBbaV0pKTsKKwl9CisKKwlyID0gX2Jhc2VfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywKKwkgICAgc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KSwgKHUzMiAqKSZtcGlfcmVxdWVzdCwKKwkgICAgc2l6ZW9mKE1waTJJT0NJbml0UmVwbHlfdCksICh1MTYgKikmbXBpX3JlcGx5LCAxMCwKKwkgICAgc2xlZXBfZmxhZyk7CisKKwlpZiAociAhPSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBoYW5kc2hha2UgZmFpbGVkIChyPSVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAobXBpX3JlcGx5LklPQ1N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTIHx8CisJICAgIG1waV9yZXBseS5JT0NMb2dJbmZvKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlIC0gc2VuZCBwb3J0X2VuYWJsZShkaXNjb3Zlcnkgc3R1ZmYpIHRvIGZpcm13YXJlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX3NlbmRfcG9ydF9lbmFibGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgaW50IHNsZWVwX2ZsYWcpCit7CisJTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCXUzMiBpb2Nfc3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwlpbnQgciA9IDA7CisJdTE2IHNtaWQ7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2VuZGluZyBwb3J0IGVuYWJsZSAhIVxuIiwgaW9jLT5uYW1lKTsKKworCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBpbnRlcm5hbCBjb21tYW5kIGFscmVhZHkgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmJhc2VfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJQb3J0RW5hYmxlUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9QT1JUX0VOQUJMRTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKKworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAorCSAgICAzMDAqSFopOworCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCkvNCk7CisJCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkKKwkJCXIgPSAtRUZBVUxUOworCQllbHNlCisJCQlyID0gLUVUSU1FOworCQlnb3RvIG91dDsKKwl9IGVsc2UKKwkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBjb21wbGV0ZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKworCWlvY19zdGF0ZSA9IF9iYXNlX3dhaXRfb25faW9jc3RhdGUoaW9jLCBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCwKKwkgICAgNjAsIHNsZWVwX2ZsYWcpOworCWlmIChpb2Nfc3RhdGUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBnb2luZyB0byBvcGVyYXRpb25hbCBzdGF0ZSAiCisJCSAgICAiIChpb2Nfc3RhdGU9MHgleClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGlvY19zdGF0ZSk7CisJCXIgPSAtRUZBVUxUOworCX0KKyBvdXQ6CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBvcnQgZW5hYmxlOiAlc1xuIiwKKwkgICAgaW9jLT5uYW1lLCAoKHIgPT0gMCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIikpOworCXJldHVybiByOworfQorCisvKioKKyAqIF9iYXNlX3VubWFza19ldmVudHMgLSB0dXJuIG9uIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBldmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnQ6IGZpcm13YXJlIGV2ZW50CisgKgorICogVGhlIG1hc2sgaXMgc3RvcmVkIGluIGlvYy0+ZXZlbnRfbWFza3MuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV91bm1hc2tfZXZlbnRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGV2ZW50KQoreworCXUzMiBkZXNpcmVkX2V2ZW50OworCisJaWYgKGV2ZW50ID49IDEyOCkKKwkJcmV0dXJuOworCisJZGVzaXJlZF9ldmVudCA9ICgxIDw8IChldmVudCAlIDMyKSk7CisKKwlpZiAoZXZlbnQgPCAzMikKKwkJaW9jLT5ldmVudF9tYXNrc1swXSAmPSB+ZGVzaXJlZF9ldmVudDsKKwllbHNlIGlmIChldmVudCA8IDY0KQorCQlpb2MtPmV2ZW50X21hc2tzWzFdICY9IH5kZXNpcmVkX2V2ZW50OworCWVsc2UgaWYgKGV2ZW50IDwgOTYpCisJCWlvYy0+ZXZlbnRfbWFza3NbMl0gJj0gfmRlc2lyZWRfZXZlbnQ7CisJZWxzZSBpZiAoZXZlbnQgPCAxMjgpCisJCWlvYy0+ZXZlbnRfbWFza3NbM10gJj0gfmRlc2lyZWRfZXZlbnQ7Cit9CisKKy8qKgorICogX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uIC0gc2VuZCBldmVudCBub3RpZmljYXRpb24KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQoreworCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwl1MTYgc21pZDsKKwlpbnQgciA9IDA7CisJaW50IGk7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBpbnRlcm5hbCBjb21tYW5kIGFscmVhZHkgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmJhc2VfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTjsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKKwlmb3IgKGkgPSAwOyBpIDwgTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTOyBpKyspCisJCW1waV9yZXF1ZXN0LT5FdmVudE1hc2tzW2ldID0KKwkJICAgIGxlMzJfdG9fY3B1KGlvYy0+ZXZlbnRfbWFza3NbaV0pOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLCAzMCpIWik7CisJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCV9kZWJ1Z19kdW1wX21mKG1waV9yZXF1ZXN0LAorCQkgICAgc2l6ZW9mKE1waTJFdmVudE5vdGlmaWNhdGlvblJlcXVlc3RfdCkvNCk7CisJCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkKKwkJCXIgPSAtRUZBVUxUOworCQllbHNlCisJCQlyID0gLUVUSU1FOworCX0gZWxzZQorCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGNvbXBsZXRlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV92YWxpZGF0ZV9ldmVudF90eXBlIC0gdmFsaWRhdGluZyBldmVudCB0eXBlcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnQ6IGZpcm13YXJlIGV2ZW50CisgKgorICogVGhpcyB3aWxsIHR1cm4gb24gZmlybXdhcmUgZXZlbnQgbm90aWZpY2F0aW9uIHdoZW4gYXBwbGljYXRpb24KKyAqIGFzayBmb3IgdGhhdCBldmVudC4gV2UgZG9uJ3QgbWFzayBldmVudHMgdGhhdCBhcmUgYWxyZWFkeSBlbmFibGVkLgorICovCit2b2lkCittcHQyc2FzX2Jhc2VfdmFsaWRhdGVfZXZlbnRfdHlwZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUzMiAqZXZlbnRfdHlwZSkKK3sKKwlpbnQgaSwgajsKKwl1MzIgZXZlbnRfbWFzaywgZGVzaXJlZF9ldmVudDsKKwl1OCBzZW5kX3VwZGF0ZV90b19mdzsKKworCWZvciAoaSA9IDAsIHNlbmRfdXBkYXRlX3RvX2Z3ID0gMDsgaSA8CisJICAgIE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUzsgaSsrKSB7CisJCWV2ZW50X21hc2sgPSB+ZXZlbnRfdHlwZVtpXTsKKwkJZGVzaXJlZF9ldmVudCA9IDE7CisJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQlpZiAoIShldmVudF9tYXNrICYgZGVzaXJlZF9ldmVudCkgJiYKKwkJCSAgICAoaW9jLT5ldmVudF9tYXNrc1tpXSAmIGRlc2lyZWRfZXZlbnQpKSB7CisJCQkJaW9jLT5ldmVudF9tYXNrc1tpXSAmPSB+ZGVzaXJlZF9ldmVudDsKKwkJCQlzZW5kX3VwZGF0ZV90b19mdyA9IDE7CisJCQl9CisJCQlkZXNpcmVkX2V2ZW50ID0gKGRlc2lyZWRfZXZlbnQgPDwgMSk7CisJCX0KKwl9CisKKwlpZiAoIXNlbmRfdXBkYXRlX3RvX2Z3KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CisJX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgMCwgQ0FOX1NMRUVQKTsKKwltdXRleF91bmxvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKK30KKworLyoqCisgKiBfYmFzZV9kaWFnX3Jlc2V0IC0gdGhlICJiaWcgaGFtbWVyIiBzdGFydCBvZiBkYXkgcmVzZXQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX2RpYWdfcmVzZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKK3sKKwl1MzIgaG9zdF9kaWFnbm9zdGljOworCXUzMiBpb2Nfc3RhdGU7CisJdTMyIGNvdW50OworCXUzMiBoY2Jfc2l6ZTsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzZW5kaW5nIGRpYWcgcmVzZXQgISFcbiIsIGlvYy0+bmFtZSk7CisKKwlfYmFzZV9zYXZlX21zaXhfdGFibGUoaW9jKTsKKworCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiY2xlYXIgaW50ZXJydXB0c1xuIiwKKwkgICAgaW9jLT5uYW1lKSk7CisJd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCisJY291bnQgPSAwOworCWRvIHsKKwkJLyogV3JpdGUgbWFnaWMgc2VxdWVuY2UgdG8gV3JpdGVTZXF1ZW5jZSByZWdpc3RlcgorCQkgKiBMb29wIHVudGlsIGluIGRpYWdub3N0aWMgbW9kZQorCQkgKi8KKwkJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJ3cml0ZSBtYWdpYyAiCisJCSAgICAic2VxdWVuY2VcbiIsIGlvYy0+bmFtZSkpOworCQl3cml0ZWwoTVBJMl9XUlNFUV9GTFVTSF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOworCQl3cml0ZWwoTVBJMl9XUlNFUV8xU1RfS0VZX1ZBTFVFLCAmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlKTsKKwkJd3JpdGVsKE1QSTJfV1JTRVFfMk5EX0tFWV9WQUxVRSwgJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSk7CisJCXdyaXRlbChNUEkyX1dSU0VRXzNSRF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOworCQl3cml0ZWwoTVBJMl9XUlNFUV80VEhfS0VZX1ZBTFVFLCAmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlKTsKKwkJd3JpdGVsKE1QSTJfV1JTRVFfNVRIX0tFWV9WQUxVRSwgJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSk7CisJCXdyaXRlbChNUEkyX1dSU0VRXzZUSF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOworCisJCS8qIHdhaXQgMTAwIG1zZWMgKi8KKwkJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEwMCk7CisJCWVsc2UKKwkJCW1kZWxheSgxMDApOworCisJCWlmIChjb3VudCsrID4gMjApCisJCQlnb3RvIG91dDsKKworCQlob3N0X2RpYWdub3N0aWMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0RGlhZ25vc3RpYyk7CisJCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAid3JvdGUgbWFnaWMgIgorCQkgICAgInNlcXVlbmNlOiBjb3VudCglZCksIGhvc3RfZGlhZ25vc3RpYygweCUwOHgpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBjb3VudCwgaG9zdF9kaWFnbm9zdGljKSk7CisKKwl9IHdoaWxlICgoaG9zdF9kaWFnbm9zdGljICYgTVBJMl9ESUFHX0RJQUdfV1JJVEVfRU5BQkxFKSA9PSAwKTsKKworCWhjYl9zaXplID0gcmVhZGwoJmlvYy0+Y2hpcC0+SENCU2l6ZSk7CisKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpYWcgcmVzZXQ6IGlzc3VlZFxuIiwKKwkgICAgaW9jLT5uYW1lKSk7CisJd3JpdGVsKGhvc3RfZGlhZ25vc3RpYyB8IE1QSTJfRElBR19SRVNFVF9BREFQVEVSLAorCSAgICAgJmlvYy0+Y2hpcC0+SG9zdERpYWdub3N0aWMpOworCisJLyogZG9uJ3QgYWNjZXNzIGFueSByZWdpc3RlcnMgZm9yIDUwIG1pbGxpc2Vjb25kcyAqLworCW1zbGVlcCg1MCk7CisKKwkvKiAzMDAgc2Vjb25kIG1heCB3YWl0ICovCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMzAwMDAwMCA7IGNvdW50KyspIHsKKworCQlob3N0X2RpYWdub3N0aWMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0RGlhZ25vc3RpYyk7CisKKwkJaWYgKGhvc3RfZGlhZ25vc3RpYyA9PSAweEZGRkZGRkZGKQorCQkJZ290byBvdXQ7CisJCWlmICghKGhvc3RfZGlhZ25vc3RpYyAmIE1QSTJfRElBR19SRVNFVF9BREFQVEVSKSkKKwkJCWJyZWFrOworCisJCS8qIHdhaXQgMTAwIG1zZWMgKi8KKwkJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEpOworCQllbHNlCisJCQltZGVsYXkoMSk7CisJfQorCisJaWYgKGhvc3RfZGlhZ25vc3RpYyAmIE1QSTJfRElBR19IQ0JfTU9ERSkgeworCisJCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmVzdGFydCB0aGUgYWRhcHRlciAiCisJCSAgICAiYXNzdW1pbmcgdGhlIEhDQiBBZGRyZXNzIHBvaW50cyB0byBnb29kIEYvV1xuIiwKKwkJICAgIGlvYy0+bmFtZSkpOworCQlob3N0X2RpYWdub3N0aWMgJj0gfk1QSTJfRElBR19CT09UX0RFVklDRV9TRUxFQ1RfTUFTSzsKKwkJaG9zdF9kaWFnbm9zdGljIHw9IE1QSTJfRElBR19CT09UX0RFVklDRV9TRUxFQ1RfSENEVzsKKwkJd3JpdGVsKGhvc3RfZGlhZ25vc3RpYywgJmlvYy0+Y2hpcC0+SG9zdERpYWdub3N0aWMpOworCisJCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkgICAgInJlLWVuYWJsZSB0aGUgSENEV1xuIiwgaW9jLT5uYW1lKSk7CisJCXdyaXRlbChoY2Jfc2l6ZSB8IE1QSTJfSENCX1NJWkVfSENCX0VOQUJMRSwKKwkJICAgICZpb2MtPmNoaXAtPkhDQlNpemUpOworCX0KKworCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmVzdGFydCB0aGUgYWRhcHRlclxuIiwKKwkgICAgaW9jLT5uYW1lKSk7CisJd3JpdGVsKGhvc3RfZGlhZ25vc3RpYyAmIH5NUEkyX0RJQUdfSE9MRF9JT0NfUkVTRVQsCisJICAgICZpb2MtPmNoaXAtPkhvc3REaWFnbm9zdGljKTsKKworCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiZGlzYWJsZSB3cml0ZXMgdG8gdGhlICIKKwkgICAgImRpYWdub3N0aWMgcmVnaXN0ZXJcbiIsIGlvYy0+bmFtZSkpOworCXdyaXRlbChNUEkyX1dSU0VRX0ZMVVNIX0tFWV9WQUxVRSwgJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSk7CisKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIldhaXQgZm9yIEZXIHRvIGdvIHRvIHRoZSAiCisJICAgICJSRUFEWSBzdGF0ZVxuIiwgaW9jLT5uYW1lKSk7CisJaW9jX3N0YXRlID0gX2Jhc2Vfd2FpdF9vbl9pb2NzdGF0ZShpb2MsIE1QSTJfSU9DX1NUQVRFX1JFQURZLCAyMCwKKwkgICAgc2xlZXBfZmxhZyk7CisJaWYgKGlvY19zdGF0ZSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGdvaW5nIHRvIHJlYWR5IHN0YXRlICIKKwkJICAgICIgKGlvY19zdGF0ZT0weCV4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgaW9jX3N0YXRlKTsKKwkJZ290byBvdXQ7CisJfQorCisJX2Jhc2VfcmVzdG9yZV9tc2l4X3RhYmxlKGlvYyk7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRpYWcgcmVzZXQ6IFNVQ0NFU1NcbiIsIGlvYy0+bmFtZSk7CisJcmV0dXJuIDA7CisKKyBvdXQ6CisJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZGlhZyByZXNldDogRkFJTEVEXG4iLCBpb2MtPm5hbWUpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKioKKyAqIF9iYXNlX21ha2VfaW9jX3JlYWR5IC0gcHV0IGNvbnRyb2xsZXIgaW4gUkVBRFkgc3RhdGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICogQHR5cGU6IEZPUkNFX0JJR19IQU1NRVIgb3IgU09GVF9SRVNFVAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX21ha2VfaW9jX3JlYWR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcsCisgICAgZW51bSByZXNldF90eXBlIHR5cGUpCit7CisJdTMyIGlvY19zdGF0ZTsKKworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDApOworCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGlvY19zdGF0ZSgweCUwOHgpXG4iLAorCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBpb2Nfc3RhdGUpKTsKKworCWlmICgoaW9jX3N0YXRlICYgTVBJMl9JT0NfU1RBVEVfTUFTSykgPT0gTVBJMl9JT0NfU1RBVEVfUkVBRFkpCisJCXJldHVybiAwOworCisJaWYgKGlvY19zdGF0ZSAmIE1QSTJfRE9PUkJFTExfVVNFRCkgeworCQlkaHNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInVuZXhwZWN0ZWQgZG9vcmJlbGwgIgorCQkgICAgImFjdGl2ZSFcbiIsIGlvYy0+bmFtZSkpOworCQlnb3RvIGlzc3VlX2RpYWdfcmVzZXQ7CisJfQorCisJaWYgKChpb2Nfc3RhdGUgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSA9PSBNUEkyX0lPQ19TVEFURV9GQVVMVCkgeworCQltcHQyc2FzX2Jhc2VfZmF1bHRfaW5mbyhpb2MsIGlvY19zdGF0ZSAmCisJCSAgICBNUEkyX0RPT1JCRUxMX0RBVEFfTUFTSyk7CisJCWdvdG8gaXNzdWVfZGlhZ19yZXNldDsKKwl9CisKKwlpZiAodHlwZSA9PSBGT1JDRV9CSUdfSEFNTUVSKQorCQlnb3RvIGlzc3VlX2RpYWdfcmVzZXQ7CisKKwlpZiAoKGlvY19zdGF0ZSAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09IE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMKQorCQlpZiAoIShfYmFzZV9zZW5kX2lvY19yZXNldChpb2MsCisJCSAgICBNUEkyX0ZVTkNUSU9OX0lPQ19NRVNTQUdFX1VOSVRfUkVTRVQsIDE1LCBDQU5fU0xFRVApKSkKKwkJCXJldHVybiAwOworCisgaXNzdWVfZGlhZ19yZXNldDoKKwlyZXR1cm4gX2Jhc2VfZGlhZ19yZXNldChpb2MsIENBTl9TTEVFUCk7Cit9CisKKy8qKgorICogX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwgLSBwdXQgY29udHJvbGxlciBpbiBPUEVSQVRJT05BTCBzdGF0ZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgIGludCBzbGVlcF9mbGFnKQoreworCWludCByLCBpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdTMyIHJlcGx5X2FkZHJlc3M7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCS8qIGluaXRpYWxpemUgdGhlIHNjc2kgbG9va3VwIGZyZWUgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5mcmVlX2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCQlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkgICAgJmlvYy0+ZnJlZV9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwkvKiBpbml0aWFsaXplIFJlcGx5IEZyZWUgUXVldWUgKi8KKwlmb3IgKGkgPSAwLCByZXBseV9hZGRyZXNzID0gKHUzMilpb2MtPnJlcGx5X2RtYSA7CisJICAgIGkgPCBpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGggOyBpKyssIHJlcGx5X2FkZHJlc3MgKz0KKwkgICAgaW9jLT5yZXBseV9zeikKKwkJaW9jLT5yZXBseV9mcmVlW2ldID0gY3B1X3RvX2xlMzIocmVwbHlfYWRkcmVzcyk7CisKKwkvKiBpbml0aWFsaXplIFJlcGx5IFBvc3QgRnJlZSBRdWV1ZSAqLworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGg7IGkrKykKKwkJaW9jLT5yZXBseV9wb3N0X2ZyZWVbaV0uV29yZHMgPSB+MFVMTDsKKworCXIgPSBfYmFzZV9zZW5kX2lvY19pbml0KGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCS8qIGluaXRpYWxpemUgdGhlIGluZGV4J3MgKi8KKwlpb2MtPnJlcGx5X2ZyZWVfaG9zdF9pbmRleCA9IGlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtIDE7CisJaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXggPSAwOworCXdyaXRlbChpb2MtPnJlcGx5X2ZyZWVfaG9zdF9pbmRleCwgJmlvYy0+Y2hpcC0+UmVwbHlGcmVlSG9zdEluZGV4KTsKKwl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+UmVwbHlQb3N0SG9zdEluZGV4KTsKKworCV9iYXNlX3VubWFza19pbnRlcnJ1cHRzKGlvYyk7CisJciA9IF9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpZiAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApCisJCV9iYXNlX3N0YXRpY19jb25maWdfcGFnZXMoaW9jKTsKKworCXIgPSBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyAtIGZyZWUgcmVzb3VyY2VzIGNvbnRyb2xsZXIgcmVzb3VyY2VzIChpby9pcnEvbWVtYXApCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGlvYy0+cGRldjsKKworCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJX2Jhc2VfbWFza19pbnRlcnJ1cHRzKGlvYyk7CisJX2Jhc2VfbWFrZV9pb2NfcmVhZHkoaW9jLCBDQU5fU0xFRVAsIFNPRlRfUkVTRVQpOworCWlmIChpb2MtPnBjaV9pcnEpIHsKKwkJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7CisJCWZyZWVfaXJxKGlvYy0+cGNpX2lycSwgaW9jKTsKKwl9CisJX2Jhc2VfZGlzYWJsZV9tc2l4KGlvYyk7CisJaWYgKGlvYy0+Y2hpcF9waHlzKQorCQlpb3VubWFwKGlvYy0+Y2hpcCk7CisJaW9jLT5wY2lfaXJxID0gLTE7CisJaW9jLT5jaGlwX3BoeXMgPSAwOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW9jLT5wZGV2LCBpb2MtPmJhcnMpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9hdHRhY2ggLSBhdHRhY2ggY29udHJvbGxlciBpbnN0YW5jZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2Jhc2VfYXR0YWNoKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlpbnQgciwgaTsKKwl1bnNpZ25lZCBsb25nCSBmbGFnczsKKworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJciA9IG1wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzKGlvYyk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJciA9IF9iYXNlX21ha2VfaW9jX3JlYWR5KGlvYywgQ0FOX1NMRUVQLCBTT0ZUX1JFU0VUKTsKKwlpZiAocikKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisKKwlyID0gX2Jhc2VfZ2V0X2lvY19mYWN0cyhpb2MsIENBTl9TTEVFUCk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCisJciA9IF9iYXNlX2FsbG9jYXRlX21lbW9yeV9wb29scyhpb2MsIENBTl9TTEVFUCk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaW9jLT5yZXNldF93cSk7CisKKwkvKiBiYXNlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLworCW11dGV4X2luaXQoJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOworCWlvYy0+YmFzZV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKworCS8qIHRyYW5zcG9ydCBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X2luaXQoJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKKworCS8qIHRhc2sgbWFuYWdlbWVudCBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KKwlpb2MtPnRtX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOworCWlvYy0+dG1fY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwltdXRleF9pbml0KCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50bV9jbWRzLmRvbmUpOworCisJLyogY29uZmlnIHBhZ2UgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCisJaW9jLT5jb25maWdfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CisJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwltdXRleF9pbml0KCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CisKKwkvKiBjdGwgbW9kdWxlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLworCWlvYy0+Y3RsX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfaW5pdCgmaW9jLT5jdGxfY21kcy5tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmN0bF9jbWRzLmRvbmUpOworCisJZm9yIChpID0gMDsgaSA8IE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUzsgaSsrKQorCQlpb2MtPmV2ZW50X21hc2tzW2ldID0gLTE7CisKKwkvKiBoZXJlIHdlIGVuYWJsZSB0aGUgZXZlbnRzIHdlIGNhcmUgYWJvdXQgKi8KKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9TQVNfQlJPQURDQVNUX1BSSU1JVElWRSk7CisJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0UpOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9DT05GSUdVUkFUSU9OX0NIQU5HRV9MSVNUKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9WT0xVTUUpOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0lSX1BIWVNJQ0FMX0RJU0spOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVMpOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEwpOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCk7CisKKwlpb2MtPnBmYWN0cyA9IGtjYWxsb2MoaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzLAorCSAgICBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+cGZhY3RzKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspIHsKKwkJciA9IF9iYXNlX2dldF9wb3J0X2ZhY3RzKGlvYywgaSwgQ0FOX1NMRUVQKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKwl9CisJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgMCwgQ0FOX1NMRUVQKTsKKwlpZiAocikKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisKKwkvKiBpbml0aWFsaXplIGZhdWx0IHBvbGxpbmcgKi8KKwlJTklUX0RFTEFZRURfV09SSygmaW9jLT5mYXVsdF9yZXNldF93b3JrLCBfYmFzZV9mYXVsdF9yZXNldF93b3JrKTsKKwlzbnByaW50Zihpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcV9uYW1lLAorCSAgICBzaXplb2YoaW9jLT5mYXVsdF9yZXNldF93b3JrX3FfbmFtZSksICJwb2xsXyVkX3N0YXR1cyIsIGlvYy0+aWQpOworCWlvYy0+ZmF1bHRfcmVzZXRfd29ya19xID0KKwkJY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaW9jLT5mYXVsdF9yZXNldF93b3JrX3FfbmFtZSk7CisJaWYgKCFpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIChsaW5lPSVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xLAorCQkgICAgJmlvYy0+ZmF1bHRfcmVzZXRfd29yaywKKwkJICAgIG1zZWNzX3RvX2ppZmZpZXMoRkFVTFRfUE9MTElOR19JTlRFUlZBTCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlX3Jlc291cmNlczoKKworCWlvYy0+cmVtb3ZlX2hvc3QgPSAxOworCW1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhpb2MpOworCV9iYXNlX3JlbGVhc2VfbWVtb3J5X3Bvb2xzKGlvYyk7CisJa2ZyZWUoaW9jLT50bV9jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPmNvbmZpZ19jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPmJhc2VfY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT5jdGxfY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT5wZmFjdHMpOworCWlvYy0+Y3RsX2NtZHMucmVwbHkgPSBOVUxMOworCWlvYy0+YmFzZV9jbWRzLnJlcGx5ID0gTlVMTDsKKwlpb2MtPnRtX2NtZHMucmVwbHkgPSBOVUxMOworCWlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHkgPSBOVUxMOworCWlvYy0+Y29uZmlnX2NtZHMucmVwbHkgPSBOVUxMOworCWlvYy0+cGZhY3RzID0gTlVMTDsKKwlyZXR1cm4gcjsKK30KKworCisvKioKKyAqIG1wdDJzYXNfYmFzZV9kZXRhY2ggLSByZW1vdmUgY29udHJvbGxlciBpbnN0YW5jZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9kZXRhY2goc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXVuc2lnbmVkIGxvbmcJIGZsYWdzOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKworCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwl3cSA9IGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xOworCWlvYy0+ZmF1bHRfcmVzZXRfd29ya19xID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZpb2MtPmZhdWx0X3Jlc2V0X3dvcmspKQorCQlmbHVzaF93b3JrcXVldWUod3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHdxKTsKKworCW1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhpb2MpOworCV9iYXNlX3JlbGVhc2VfbWVtb3J5X3Bvb2xzKGlvYyk7CisJa2ZyZWUoaW9jLT5wZmFjdHMpOworCWtmcmVlKGlvYy0+Y3RsX2NtZHMucmVwbHkpOworCWtmcmVlKGlvYy0+YmFzZV9jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPnRtX2NtZHMucmVwbHkpOworCWtmcmVlKGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHkpOworCWtmcmVlKGlvYy0+Y29uZmlnX2NtZHMucmVwbHkpOworfQorCisvKioKKyAqIF9iYXNlX3Jlc2V0X2hhbmRsZXIgLSByZXNldCBjYWxsYmFjayBoYW5kbGVyIChmb3IgYmFzZSkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJlc2V0X3BoYXNlOiBwaGFzZQorICoKKyAqIFRoZSBoYW5kbGVyIGZvciBkb2luZyBhbnkgcmVxdWlyZWQgY2xlYW51cCBvciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBUaGUgcmVzZXQgcGhhc2UgY2FuIGJlIE1QVDJfSU9DX1BSRV9SRVNFVCwgTVBUMl9JT0NfQUZURVJfUkVTRVQsCisgKiBNUFQyX0lPQ19ET05FX1JFU0VUCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKQoreworCXN3aXRjaCAocmVzZXRfcGhhc2UpIHsKKwljYXNlIE1QVDJfSU9DX1BSRV9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX1BSRV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX0FGVEVSX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfQUZURVJfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQkJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkKTsKKwkJCWNvbXBsZXRlKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOworCQl9CisJCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CisJCQlpb2MtPmJhc2VfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT5iYXNlX2NtZHMuc21pZCk7CisJCQljb21wbGV0ZSgmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CisJCX0KKwkJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQkJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT5jb25maWdfY21kcy5zbWlkKTsKKwkJCWNvbXBsZXRlKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOworCQl9CisJCWJyZWFrOworCWNhc2UgTVBUMl9JT0NfRE9ORV9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX0RPTkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJfQorCW1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKKwltcHQyc2FzX2N0bF9yZXNldF9oYW5kbGVyKGlvYywgcmVzZXRfcGhhc2UpOworfQorCisvKioKKyAqIF93YWl0X2Zvcl9jb21tYW5kc190b19jb21wbGV0ZSAtIHJlc2V0IGNvbnRyb2xsZXIKKyAqIEBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0aW5nKDNzKSBmb3IgYWxsIHBlbmRpbmcgY29tbWFuZHMgdG8gY29tcGxldGUKKyAqIHByaW9yIHRvIHB1dHRpbmcgY29udHJvbGxlciBpbiByZXNldC4KKyAqLworc3RhdGljIHZvaWQKK193YWl0X2Zvcl9jb21tYW5kc190b19jb21wbGV0ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQoreworCXUzMiBpb2Nfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaTsKKworCWlvYy0+cGVuZGluZ19pb19jb3VudCA9IDA7CisJaWYgKHNsZWVwX2ZsYWcgIT0gQ0FOX1NMRUVQKQorCQlyZXR1cm47CisKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMCk7CisJaWYgKChpb2Nfc3RhdGUgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkKKwkJcmV0dXJuOworCisJLyogcGVuZGluZyBjb21tYW5kIGNvdW50ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykKKwkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ICE9IDB4RkYpCisJCQlpb2MtPnBlbmRpbmdfaW9fY291bnQrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKworCWlmICghaW9jLT5wZW5kaW5nX2lvX2NvdW50KQorCQlyZXR1cm47CisKKwkvKiB3YWl0IGZvciBwZW5kaW5nIGNvbW1hbmRzIHRvIGNvbXBsZXRlICovCisJd2FpdF9ldmVudF90aW1lb3V0KGlvYy0+cmVzZXRfd3EsIGlvYy0+cGVuZGluZ19pb19jb3VudCA9PSAwLCAzICogSFopOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIgLSByZXNldCBjb250cm9sbGVyCisgKiBAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICogQHR5cGU6IEZPUkNFX0JJR19IQU1NRVIgb3IgU09GVF9SRVNFVAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnLAorICAgIGVudW0gcmVzZXRfdHlwZSB0eXBlKQoreworCWludCByLCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVzeVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CisJaW9jLT5zaG9zdF9yZWNvdmVyeSA9IDE7CisJaWYgKGlvYy0+c2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JVTk5JTkcpIHsKKwkJLyogc2V0IGJhY2sgdG8gU0hPU1RfUlVOTklORyBpbiBtcHQyc2FzX3Njc2loLmMgKi8KKwkJc2NzaV9ob3N0X3NldF9zdGF0ZShpb2MtPnNob3N0LCBTSE9TVF9SRUNPVkVSWSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwdXR0aW5nIGNvbnRyb2xsZXIgaW50byAiCisJCSAgICAiU0hPU1RfUkVDT1ZFUllcbiIsIGlvYy0+bmFtZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19QUkVfUkVTRVQpOworCV93YWl0X2Zvcl9jb21tYW5kc190b19jb21wbGV0ZShpb2MsIHNsZWVwX2ZsYWcpOworCV9iYXNlX21hc2tfaW50ZXJydXB0cyhpb2MpOworCXIgPSBfYmFzZV9tYWtlX2lvY19yZWFkeShpb2MsIHNsZWVwX2ZsYWcsIHR5cGUpOworCWlmIChyKQorCQlnb3RvIG91dDsKKwlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfQUZURVJfUkVTRVQpOworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspCisJCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIGlvYy0+cGZhY3RzW2ldLlZGX0lELAorCQkgICAgc2xlZXBfZmxhZyk7CisJaWYgKCFyKQorCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7Cisgb3V0OgorCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICVzXG4iLAorCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCAoKHIgPT0gMCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIikpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0NWZmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC0wLDAgKzEsNzc5IEBACisvKgorICogVGhpcyBpcyB0aGUgRnVzaW9uIE1QVCBiYXNlIGRyaXZlciBwcm92aWRpbmcgY29tbW9uIEFQSSBsYXllciBpbnRlcmZhY2UKKyAqIGZvciBhY2Nlc3MgdG8gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpZm5kZWYgTVBUMlNBU19CQVNFX0hfSU5DTFVERUQKKyNkZWZpbmUgTVBUMlNBU19CQVNFX0hfSU5DTFVERUQKKworI2luY2x1ZGUgIm1waS9tcGkyX3R5cGUuaCIKKyNpbmNsdWRlICJtcGkvbXBpMi5oIgorI2luY2x1ZGUgIm1waS9tcGkyX2lvYy5oIgorI2luY2x1ZGUgIm1waS9tcGkyX2NuZmcuaCIKKyNpbmNsdWRlICJtcGkvbXBpMl9pbml0LmgiCisjaW5jbHVkZSAibXBpL21waTJfcmFpZC5oIgorI2luY2x1ZGUgIm1waS9tcGkyX3Rvb2wuaCIKKyNpbmNsdWRlICJtcGkvbXBpMl9zYXMuaCIKKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc2FzLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorCisjaW5jbHVkZSAibXB0MnNhc19kZWJ1Zy5oIgorCisvKiBkcml2ZXIgdmVyc2lvbmluZyBpbmZvICovCisjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX05BTUUJCSJtcHQyc2FzIgorI2RlZmluZSBNUFQyU0FTX0FVVEhPUgkiTFNJIENvcnBvcmF0aW9uIDxETC1NUFRGdXNpb25MaW51eEBsc2kuY29tPiIKKyNkZWZpbmUgTVBUMlNBU19ERVNDUklQVElPTgkiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgorI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDAuMTAwLjExLjE2IgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTAwCisjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCisjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMTEKKyNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTE2CisKKy8qCisgKiBTZXQgTVBUMlNBU19TR19ERVBUSCB2YWx1ZSBiYXNlZCBvbiB1c2VyIGlucHV0LgorICovCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19NQVhfU0dFCisjaWYgICAgIENPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRSAgPCAxNgorI2RlZmluZSBNUFQyU0FTX1NHX0RFUFRIICAgICAgIDE2CisjZWxpZiBDT05GSUdfU0NTSV9NUFQyU0FTX01BWF9TR0UgID4gMTI4CisjZGVmaW5lIE1QVDJTQVNfU0dfREVQVEggICAgICAgMTI4CisjZWxzZQorI2RlZmluZSBNUFQyU0FTX1NHX0RFUFRIICAgICAgIENPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBNUFQyU0FTX1NHX0RFUFRIICAgICAgIDEyOCAvKiBNQVhfSFdfU0VHTUVOVFMgKi8KKyNlbmRpZgorCisKKy8qCisgKiBHZW5lcmljIERlZmluZXMKKyAqLworI2RlZmluZSBNUFQyU0FTX1NBVEFfUVVFVUVfREVQVEgJMzIKKyNkZWZpbmUgTVBUMlNBU19TQVNfUVVFVUVfREVQVEgJCTI1NAorI2RlZmluZSBNUFQyU0FTX1JBSURfUVVFVUVfREVQVEgJMTI4CisKKyNkZWZpbmUgTVBUX05BTUVfTEVOR1RICQkJMzIJLyogZ2VuZXJpYyBsZW5ndGggb2Ygc3RyaW5ncyAqLworI2RlZmluZSBNUFRfU1RSSU5HX0xFTkdUSAkJNjQKKworI2RlZmluZQlNUFRfTUFYX0NBTExCQUNLUwkJMTYKKworI2RlZmluZQkgQ0FOX1NMRUVQCQkJMQorI2RlZmluZSAgTk9fU0xFRVAJCQkwCisKKyNkZWZpbmUgSU5URVJOQUxfQ01EU19DT1VOVAkJMTAJLyogcmVzZXJ2ZWQgY21kcyAqLworCisjZGVmaW5lIE1QSTJfSElNX01BU0sJCQkweEZGRkZGRkZGIC8qIG1hc2sgZXZlcnkgYml0Ki8KKworI2RlZmluZSBNUFQyU0FTX0lOVkFMSURfREVWSUNFX0hBTkRMRQkweEZGRkYKKworCisvKgorICogcmVzZXQgcGhhc2VzCisgKi8KKyNkZWZpbmUgTVBUMl9JT0NfUFJFX1JFU0VUCQkxIC8qIHByaW9yIHRvIGhvc3QgcmVzZXQgKi8KKyNkZWZpbmUgTVBUMl9JT0NfQUZURVJfUkVTRVQJCTIgLyoganVzdCBhZnRlciBob3N0IHJlc2V0ICovCisjZGVmaW5lIE1QVDJfSU9DX0RPTkVfUkVTRVQJCTMgLyogbGlua3MgcmUtaW5pdGlhbGl6ZWQgKi8KKworLyoKKyAqIGxvZ2dpbmcgZm9ybWF0CisgKi8KKyNkZWZpbmUgTVBUMlNBU19GTVQJCQkiJXM6ICIKKyNkZWZpbmUgTVBUMlNBU19ERUJVR19GTVQJCUtFUk5fREVCVUcgTVBUMlNBU19GTVQKKyNkZWZpbmUgTVBUMlNBU19JTkZPX0ZNVAkJS0VSTl9JTkZPIE1QVDJTQVNfRk1UCisjZGVmaW5lIE1QVDJTQVNfTk9URV9GTVQJCUtFUk5fTk9USUNFIE1QVDJTQVNfRk1UCisjZGVmaW5lIE1QVDJTQVNfV0FSTl9GTVQJCUtFUk5fV0FSTklORyBNUFQyU0FTX0ZNVAorI2RlZmluZSBNUFQyU0FTX0VSUl9GTVQJCQlLRVJOX0VSUiBNUFQyU0FTX0ZNVAorCisvKgorICogcGVyIHRhcmdldCBwcml2YXRlIGRhdGEKKyAqLworI2RlZmluZSBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UCTB4MDEKKyNkZWZpbmUgTVBUX1RBUkdFVF9GTEFHU19WT0xVTUUJCTB4MDIKKyNkZWZpbmUgTVBUX1RBUkdFVF9GTEFHU19ERUxFVEVECTB4MDQKKworLyoqCisgKiBzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgLSBzdGFyZ2V0IHByaXZhdGUgaG9zdGRhdGEKKyAqIEBzdGFyZ2V0OiBzdGFyZ2V0IG9iamVjdAorICogQHNhc19hZGRyZXNzOiB0YXJnZXQgc2FzIGFkZHJlc3MKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBudW1fbHVuczogbnVtYmVyIGx1bnMKKyAqIEBmbGFnczogTVBUX1RBUkdFVF9GTEFHU19YWFggZmxhZ3MKKyAqIEBkZWxldGVkOiB0YXJnZXQgZmxhZ2VkIGZvciBkZWxldGlvbgorICogQHRtX2J1c3k6IHRhcmdldCBpcyBidXN5IHdpdGggVE0gcmVxdWVzdC4KKyAqLworc3RydWN0IE1QVDJTQVNfVEFSR0VUIHsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJdTY0CXNhc19hZGRyZXNzOworCXUxNgloYW5kbGU7CisJaW50CW51bV9sdW5zOworCXUzMglmbGFnczsKKwl1OAlkZWxldGVkOworCXU4CXRtX2J1c3k7Cit9OworCisvKgorICogcGVyIGRldmljZSBwcml2YXRlIGRhdGEKKyAqLworI2RlZmluZSBNUFRfREVWSUNFX0ZMQUdTX0lOSVQJCTB4MDEKKyNkZWZpbmUgTVBUX0RFVklDRV9UTFJfT04JCTB4MDIKKworLyoqCisgKiBzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgLSBzZGV2IHByaXZhdGUgaG9zdGRhdGEKKyAqIEBzYXNfdGFyZ2V0OiBzdGFyZ2V0IHByaXZhdGUgaG9zdGRhdGEKKyAqIEBsdW46IGx1biBudW1iZXIKKyAqIEBmbGFnczogTVBUX0RFVklDRV9YWFggZmxhZ3MKKyAqIEBjb25maWd1cmVkX2x1bjogbHVuIGlzIGNvbmZpZ3VyZWQKKyAqIEBibG9jazogZGV2aWNlIGlzIGluIFNERVZfQkxPQ0sgc3RhdGUKKyAqIEB0bHJfc25vb3BfY2hlY2s6IGZsYWcgdXNlZCBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIGRpc2FibGUgVExSCisgKi8KK3N0cnVjdCBNUFQyU0FTX0RFVklDRSB7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0OworCXVuc2lnbmVkIGludAlsdW47CisJdTMyCWZsYWdzOworCXU4CWNvbmZpZ3VyZWRfbHVuOworCXU4CWJsb2NrOworCXU4CXRscl9zbm9vcF9jaGVjazsKK307CisKKyNkZWZpbmUgTVBUMl9DTURfTk9UX1VTRUQJMHg4MDAwCS8qIGZyZWUgKi8KKyNkZWZpbmUgTVBUMl9DTURfQ09NUExFVEUJMHgwMDAxCS8qIGNvbXBsZXRlZCAqLworI2RlZmluZSBNUFQyX0NNRF9QRU5ESU5HCTB4MDAwMgkvKiBwZW5kaW5nICovCisjZGVmaW5lIE1QVDJfQ01EX1JFUExZX1ZBTElECTB4MDAwNAkvKiByZXBseSBpcyB2YWxpZCAqLworI2RlZmluZSBNUFQyX0NNRF9SRVNFVAkJMHgwMDA4CS8qIGhvc3QgcmVzZXQgZHJvcHBlZCB0aGUgY29tbWFuZCAqLworCisvKioKKyAqIHN0cnVjdCBfaW50ZXJuYWxfY21kIC0gaW50ZXJuYWwgY29tbWFuZHMgc3RydWN0CisgKiBAbXV0ZXg6IG11dGV4CisgKiBAZG9uZTogY29tcGxldGlvbgorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIHBvaW50ZXIKKyAqIEBzdGF0dXM6IE1QVDJfQ01EX1hYWCBzdGF0dXMKKyAqIEBzbWlkOiBzeXN0ZW0gbWVzc2FnZSBpZAorICovCitzdHJ1Y3QgX2ludGVybmFsX2NtZCB7CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisJdm9pZCAJKnJlcGx5OworCXUxNglzdGF0dXM7CisJdTE2CXNtaWQ7Cit9OworCisvKgorICogU0FTIFRvcG9sb2d5IFN0cnVjdHVyZXMKKyAqLworCisvKioKKyAqIHN0cnVjdCBfc2FzX2RldmljZSAtIGF0dGFjaGVkIGRldmljZSBpbmZvcm1hdGlvbgorICogQGxpc3Q6IHNhcyBkZXZpY2UgbGlzdAorICogQHN0YXJnZXQ6IHN0YXJnZXQgb2JqZWN0CisgKiBAc2FzX2FkZHJlc3M6IGRldmljZSBzYXMgYWRkcmVzcworICogQGRldmljZV9uYW1lOiByZXRyaWV2ZWQgZnJvbSB0aGUgU0FTIElERU5USUZZIGZyYW1lLgorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQHBhcmVudF9oYW5kbGU6IGhhbmRsZSB0byBwYXJlbnQgZGV2aWNlCisgKiBAZW5jbG9zdXJlX2hhbmRsZTogZW5jbG9zdXJlIGhhbmRsZQorICogQGVuY2xvc3VyZV9sb2dpY2FsX2lkOiBlbmNsb3N1cmUgbG9naWNhbCBpZGVudGlmaWVyCisgKiBAdm9sdW1lX2hhbmRsZTogdm9sdW1lIGhhbmRsZSAodmFsaWQgd2hlbiBoaWRkZW4gcmFpZCBtZW1iZXIpCisgKiBAdm9sdW1lX3d3aWQ6IHZvbHVtZSB1bmlxdWUgaWRlbnRpZmllcgorICogQGRldmljZV9pbmZvOiBiaXRmaWVsZCBwcm92aWRlcyBkZXRhaWxlZCBpbmZvIGFib3V0IHRoZSBkZXZpY2UKKyAqIEBpZDogdGFyZ2V0IGlkCisgKiBAY2hhbm5lbDogdGFyZ2V0IGNoYW5uZWwKKyAqIEBzbG90OiBudW1iZXIgbnVtYmVyCisgKiBAaGlkZGVuX3JhaWRfY29tcG9uZW50OiBzZXQgdG8gMSB3aGVuIHRoaXMgaXMgYSByYWlkIG1lbWJlcgorICogQHJlc3BvbmRpbmc6IHVzZWQgaW4gX3Njc2loX3Nhc19kZXZpY2VfbWFya19yZXNwb25kaW5nCisgKi8KK3N0cnVjdCBfc2FzX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKKwl1NjQJc2FzX2FkZHJlc3M7CisJdTY0CWRldmljZV9uYW1lOworCXUxNgloYW5kbGU7CisJdTE2CXBhcmVudF9oYW5kbGU7CisJdTE2CWVuY2xvc3VyZV9oYW5kbGU7CisJdTY0CWVuY2xvc3VyZV9sb2dpY2FsX2lkOworCXUxNgl2b2x1bWVfaGFuZGxlOworCXU2NAl2b2x1bWVfd3dpZDsKKwl1MzIJZGV2aWNlX2luZm87CisJaW50CWlkOworCWludAljaGFubmVsOworCXUxNglzbG90OworCXU4CWhpZGRlbl9yYWlkX2NvbXBvbmVudDsKKwl1OAlyZXNwb25kaW5nOworfTsKKworLyoqCisgKiBzdHJ1Y3QgX3JhaWRfZGV2aWNlIC0gcmFpZCB2b2x1bWUgbGluayBsaXN0CisgKiBAbGlzdDogc2FzIGRldmljZSBsaXN0CisgKiBAc3RhcmdldDogc3RhcmdldCBvYmplY3QKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QgKHZvbHVtZXMgYXJlIHNpbmdsZSBsdW4pCisgKiBAd3dpZDogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB2b2x1bWUKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBpZDogdGFyZ2V0IGlkCisgKiBAY2hhbm5lbDogdGFyZ2V0IGNoYW5uZWwKKyAqIEB2b2x1bWVfdHlwZTogdGhlIHJhaWQgbGV2ZWwKKyAqIEBkZXZpY2VfaW5mbzogYml0ZmllbGQgcHJvdmlkZXMgZGV0YWlsZWQgaW5mbyBhYm91dCB0aGUgaGlkZGVuIGNvbXBvbmVudHMKKyAqIEBudW1fcGRzOiBudW1iZXIgb2YgaGlkZGVuIHJhaWQgY29tcG9uZW50cworICogQHJlc3BvbmRpbmc6IHVzZWQgaW4gX3Njc2loX3JhaWRfZGV2aWNlX21hcmtfcmVzcG9uZGluZworICovCitzdHJ1Y3QgX3JhaWRfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwl1NjQJd3dpZDsKKwl1MTYJaGFuZGxlOworCWludAlpZDsKKwlpbnQJY2hhbm5lbDsKKwl1OAl2b2x1bWVfdHlwZTsKKwl1MzIJZGV2aWNlX2luZm87CisJdTgJbnVtX3BkczsKKwl1OAlyZXNwb25kaW5nOworfTsKKworLyoqCisgKiBzdHJ1Y3QgX2Jvb3RfZGV2aWNlIC0gYm9vdCBkZXZpY2UgaW5mbworICogQGlzX3JhaWQ6IGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGlzIGlzIHZvbHVtZQorICogQGRldmljZTogaG9sZHMgcG9pbnRlciBmb3IgZWl0aGVyIHN0cnVjdCBfc2FzX2RldmljZSBvcgorICogICAgIHN0cnVjdCBfcmFpZF9kZXZpY2UKKyAqLworc3RydWN0IF9ib290X2RldmljZSB7CisJdTggaXNfcmFpZDsKKwl2b2lkICpkZXZpY2U7Cit9OworCisvKioKKyAqIHN0cnVjdCBfc2FzX3BvcnQgLSB3aWRlL25hcnJvdyBzYXMgcG9ydCBpbmZvcm1hdGlvbgorICogQHBvcnRfbGlzdDogbGlzdCBvZiBwb3J0cyBiZWxvbmdpbmcgdG8gZXhwYW5kZXIKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUgZm9yIHRoaXMgcG9ydAorICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcyBvZiB0aGlzIHBvcnQKKyAqIEBudW1fcGh5czogbnVtYmVyIG9mIHBoeXMgYmVsb25naW5nIHRvIHRoaXMgcG9ydAorICogQHJlbW90ZV9pZGVudGlmeTogYXR0YWNoZWQgZGV2aWNlIGlkZW50aWZpY2F0aW9uCisgKiBAcnBoeTogc2FzIHRyYW5zcG9ydCBycGh5IG9iamVjdAorICogQHBvcnQ6IHNhcyB0cmFuc3BvcnQgd2lkZS9uYXJyb3cgcG9ydCBvYmplY3QKKyAqIEBwaHlfbGlzdDogX3Nhc19waHkgbGlzdCBvYmplY3RzIGJlbG9uZ2luZyB0byB0aGlzIHBvcnQKKyAqLworc3RydWN0IF9zYXNfcG9ydCB7CisJc3RydWN0IGxpc3RfaGVhZCBwb3J0X2xpc3Q7CisJdTE2CWhhbmRsZTsKKwl1NjQJc2FzX2FkZHJlc3M7CisJdTgJbnVtX3BoeXM7CisJc3RydWN0IHNhc19pZGVudGlmeSByZW1vdGVfaWRlbnRpZnk7CisJc3RydWN0IHNhc19ycGh5ICpycGh5OworCXN0cnVjdCBzYXNfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBoeV9saXN0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgX3Nhc19waHkgLSBwaHkgaW5mb3JtYXRpb24KKyAqIEBwb3J0X3NpYmxpbmdzOiBsaXN0IG9mIHBoeXMgYmVsb25naW5nIHRvIGEgcG9ydAorICogQGlkZW50aWZ5OiBwaHkgaWRlbnRpZmljYXRpb24KKyAqIEByZW1vdGVfaWRlbnRpZnk6IGF0dGFjaGVkIGRldmljZSBpZGVudGlmaWNhdGlvbgorICogQHBoeTogc2FzIHRyYW5zcG9ydCBwaHkgb2JqZWN0CisgKiBAcGh5X2lkOiB1bmlxdWUgcGh5IGlkCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlIGZvciB0aGlzIHBoeQorICogQGF0dGFjaGVkX2hhbmRsZTogZGV2aWNlIGhhbmRsZSBmb3IgYXR0YWNoZWQgZGV2aWNlCisgKi8KK3N0cnVjdCBfc2FzX3BoeSB7CisJc3RydWN0IGxpc3RfaGVhZCBwb3J0X3NpYmxpbmdzOworCXN0cnVjdCBzYXNfaWRlbnRpZnkgaWRlbnRpZnk7CisJc3RydWN0IHNhc19pZGVudGlmeSByZW1vdGVfaWRlbnRpZnk7CisJc3RydWN0IHNhc19waHkgKnBoeTsKKwl1OAlwaHlfaWQ7CisJdTE2CWhhbmRsZTsKKwl1MTYJYXR0YWNoZWRfaGFuZGxlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgX3Nhc19ub2RlIC0gc2FzX2hvc3QvZXhwYW5kZXIgaW5mb3JtYXRpb24KKyAqIEBsaXN0OiBsaXN0IG9mIGV4cGFuZGVycworICogQHBhcmVudF9kZXY6IHBhcmVudCBkZXZpY2UgY2xhc3MKKyAqIEBudW1fcGh5czogbnVtYmVyIHBoeXMgYmVsb25naW5nIHRvIHRoaXMgc2FzX2hvc3QvZXhwYW5kZXIKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3Mgb2YgdGhpcyBzYXNfaG9zdC9leHBhbmRlcgorICogQGhhbmRsZTogaGFuZGxlIGZvciB0aGlzIHNhc19ob3N0L2V4cGFuZGVyCisgKiBAcGFyZW50X2hhbmRsZTogcGFyZW50IGhhbmRsZQorICogQGVuY2xvc3VyZV9oYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyBhIG1lbWJlciBvZiBhbiBlbmNsb3N1cmUKKyAqIEBkZXZpY2VfaW5mbzogYml0d2lzZSBkZWZpbmluZyBjYXBhYmlsaXRpZXMgb2YgdGhpcyBzYXNfaG9zdC9leHBhbmRlcgorICogQHJlc3BvbmRpbmc6IHVzZWQgaW4gX3Njc2loX2V4cGFuZGVyX2RldmljZV9tYXJrX3Jlc3BvbmRpbmcKKyAqIEBwaHk6IGEgbGlzdCBvZiBwaHlzIHRoYXQgbWFrZSB1cCB0aGlzIHNhc19ob3N0L2V4cGFuZGVyCisgKiBAc2FzX3BvcnRfbGlzdDogbGlzdCBvZiBwb3J0cyBhdHRhY2hlZCB0byB0aGlzIHNhc19ob3N0L2V4cGFuZGVyCisgKi8KK3N0cnVjdCBfc2FzX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2OworCXU4CW51bV9waHlzOworCXU2NAlzYXNfYWRkcmVzczsKKwl1MTYJaGFuZGxlOworCXUxNglwYXJlbnRfaGFuZGxlOworCXUxNgllbmNsb3N1cmVfaGFuZGxlOworCXU2NAllbmNsb3N1cmVfbG9naWNhbF9pZDsKKwl1OAlyZXNwb25kaW5nOworCXN0cnVjdAlfc2FzX3BoeSAqcGh5OworCXN0cnVjdCBsaXN0X2hlYWQgc2FzX3BvcnRfbGlzdDsKK307CisKKy8qKgorICogZW51bSByZXNldF90eXBlIC0gcmVzZXQgc3RhdGUKKyAqIEBGT1JDRV9CSUdfSEFNTUVSOiBpc3N1ZSBkaWFnbm9zdGljIHJlc2V0CisgKiBAU09GVF9SRVNFVDogaXNzdWUgbWVzc2FnZV91bml0X3Jlc2V0LCBpZiBmYWlscyB0byB0byBiaWcgaGFtbWVyCisgKi8KK2VudW0gcmVzZXRfdHlwZSB7CisJRk9SQ0VfQklHX0hBTU1FUiwKKwlTT0ZUX1JFU0VULAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcmVxdWVzdF90cmFja2VyIC0gZmlybXdhcmUgcmVxdWVzdCB0cmFja2VyCisgKiBAc21pZDogc3lzdGVtIG1lc3NhZ2UgaWQKKyAqIEBzY21kOiBzY3NpIHJlcXVlc3QgcG9pbnRlcgorICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqIEBjaGFpbl9saXN0OiBsaXN0IG9mIGNoYWlucyBhc3NvY2lhdGVkIHRvIHRoaXMgSU8KKyAqIEB0cmFja2VyX2xpc3Q6IGxpc3Qgb2YgZnJlZSByZXF1ZXN0IChpb2MtPmZyZWVfbGlzdCkKKyAqLworc3RydWN0IHJlcXVlc3RfdHJhY2tlciB7CisJdTE2CXNtaWQ7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwl1OAljYl9pZHg7CisJc3RydWN0IGxpc3RfaGVhZCB0cmFja2VyX2xpc3Q7Cit9OworCit0eXBlZGVmIHZvaWQgKCpNUFRfQUREX1NHRSkodm9pZCAqcGFkZHIsIHUzMiBmbGFnc19sZW5ndGgsIGRtYV9hZGRyX3QgZG1hX2FkZHIpOworCisvKioKKyAqIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgLSBwZXIgYWRhcHRlciBzdHJ1Y3QKKyAqIEBsaXN0OiBpb2NfbGlzdAorICogQHNob3N0OiBzaG9zdCBvYmplY3QKKyAqIEBpZDogdW5pcXVlIGFkYXB0ZXIgaWQKKyAqIEBwY2lfaXJxOiBpcnEgbnVtYmVyCisgKiBAbmFtZTogZ2VuZXJpYyBpb2Mgc3RyaW5nCisgKiBAdG1wX3N0cmluZzogdG1wIHN0cmluZyB1c2VkIGZvciBsb2dnaW5nCisgKiBAcGRldjogcGNpIHBkZXYgb2JqZWN0CisgKiBAY2hpcDogbWVtb3J5IG1hcHBlZCByZWdpc3RlciBzcGFjZQorICogQGNoaXBfcGh5czogcGh5c2ljYWwgYWRkcnNzIHByaW9yIHRvIG1hcHBpbmcKKyAqIEBwaW9fY2hpcDogSS9PIG1hcHBlZCByZWdpc3RlciBzcGFjZQorICogQGxvZ2dpbmdfbGV2ZWw6IHNlZSBtcHQyc2FzX2RlYnVnLmgKKyAqIEBpcl9maXJtd2FyZTogSVIgZmlybXdhcmUgcHJlc2VudAorICogQGJhcnM6IGJpdG1hc2sgb2YgQkFSJ3MgdGhhdCBtdXN0IGJlIGNvbmZpZ3VyZWQKKyAqIEBtYXNrX2ludGVycnVwdHM6IGlnbm9yZSBpbnRlcnJ1cHQKKyAqIEBmYXVsdF9yZXNldF93b3JrX3FfbmFtZTogZncgZmF1bHQgd29yayBxdWV1ZQorICogQGZhdWx0X3Jlc2V0X3dvcmtfcTogIiIKKyAqIEBmYXVsdF9yZXNldF93b3JrOiAiIgorICogQGZpcm13YXJlX2V2ZW50X25hbWU6IGZ3IGV2ZW50IHdvcmsgcXVldWUKKyAqIEBmaXJtd2FyZV9ldmVudF90aHJlYWQ6ICIiCisgKiBAZndfZXZlbnRzX29mZjogZmxhZyB0byB0dXJuIG9mZiBmdyBldmVudCBoYW5kbGluZworICogQGZ3X2V2ZW50X2xvY2s6CisgKiBAZndfZXZlbnRfbGlzdDogbGlzdCBvZiBmdyBldmVudHMKKyAqIEBhZW5fZXZlbnRfcmVhZF9mbGFnOiBldmVudCBsb2cgd2FzIHJlYWQKKyAqIEBicm9hZGNhc3RfYWVuX2J1c3k6IGJyb2FkY2FzdCBhZW4gd2FpdGluZyB0byBiZSBzZXJ2aWNlZAorICogQGlvY19yZXNldF9pbl9wcm9ncmVzczogaG9zdCByZXNldCBpbiBwcm9ncmVzcworICogQGlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrOgorICogQGlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzOiBwaHkvaGFyZCByZXNldCBpbiBwcm9ncmVzcworICogQGlnbm9yZV9sb2dpbmZvczogaWdub3JlIGxvZ2luZm9zIGR1cmluZyB0YXNrIG1hbmFnbWVudAorICogQHJlbW92ZV9ob3N0OiBmbGFnIGZvciB3aGVuIGRyaXZlciB1bmxvYWRzLCB0byBhdm9pZCBzZW5kaW5nIGRldiByZXNldHMKKyAqIEB3YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZToKKyAqIEBtc2l4X2VuYWJsZTogZmxhZyBpbmRpY2F0aW5nIG1zaXggaXMgZW5hYmxlZAorICogQG1zaXhfdmVjdG9yX2NvdW50OiBudW1iZXIgbXNpeCB2ZWN0b3JzCisgKiBAbXNpeF90YWJsZTogdmlydCBhZGRyZXNzIHRvIHRoZSBtc2l4IHRhYmxlCisgKiBAbXNpeF90YWJsZV9iYWNrdXA6IGJhY2t1cCBtc2l4IHRhYmxlCisgKiBAc2NzaV9pb19jYl9pZHg6IHNob3N0IGdlbmVyYXRlZCBjb21tYW5kcworICogQHRtX2NiX2lkeDogdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzCisgKiBAdHJhbnNwb3J0X2NiX2lkeDogdHJhbnNwb3J0IGludGVybmFsIGNvbW1hbmRzCisgKiBAY3RsX2NiX2lkeDogY2x0IGludGVybmFsIGNvbW1hbmRzCisgKiBAYmFzZV9jYl9pZHg6IGJhc2UgaW50ZXJuYWwgY29tbWFuZHMKKyAqIEBjb25maWdfY2JfaWR4OiBiYXNlIGludGVybmFsIGNvbW1hbmRzCisgKiBAYmFzZV9jbWRzOgorICogQHRyYW5zcG9ydF9jbWRzOgorICogQHRtX2NtZHM6CisgKiBAY3RsX2NtZHM6CisgKiBAY29uZmlnX2NtZHM6CisgKiBAYmFzZV9hZGRfc2dfc2luZ2xlOiBoYW5kbGVyIGZvciBlaXRoZXIgMzIvNjQgYml0IHNnbCdzCisgKiBAZXZlbnRfdHlwZTogYml0cyBpbmRpY2F0aW5nIHdoaWNoIGV2ZW50cyB0byBsb2cKKyAqIEBldmVudF9jb250ZXh0OiB1bmlxdWUgaWQgZm9yIGVhY2ggbG9nZ2VkIGV2ZW50CisgKiBAZXZlbnRfbG9nOiBldmVudCBsb2cgcG9pbnRlcgorICogQGV2ZW50X21hc2tzOiBldmVudHMgdGhhdCBhcmUgbWFza2VkCisgKiBAZmFjdHM6IHN0YXRpYyBmYWN0cyBkYXRhCisgKiBAcGZhY3RzOiBzdGF0aWMgcG9ydCBmYWN0cyBkYXRhCisgKiBAbWFudV9wZzA6IHN0YXRpYyBtYW51ZmFjdHVyaW5nIHBhZ2UgMAorICogQGJpb3NfcGcyOiBzdGF0aWMgYmlvcyBwYWdlIDIKKyAqIEBiaW9zX3BnMzogc3RhdGljIGJpb3MgcGFnZSAzCisgKiBAaW9jX3BnODogc3RhdGljIGlvYyBwYWdlIDgKKyAqIEBpb3VuaXRfcGcwOiBzdGF0aWMgaW91bml0IHBhZ2UgMAorICogQGlvdW5pdF9wZzE6IHN0YXRpYyBpb3VuaXQgcGFnZSAxCisgKiBAc2FzX2hiYTogc2FzIGhvc3Qgb2JqZWN0CisgKiBAc2FzX2V4cGFuZGVyX2xpc3Q6IGV4cGFuZGVyIG9iamVjdCBsaXN0CisgKiBAc2FzX25vZGVfbG9jazoKKyAqIEBzYXNfZGV2aWNlX2xpc3Q6IHNhcyBkZXZpY2Ugb2JqZWN0IGxpc3QKKyAqIEBzYXNfZGV2aWNlX2luaXRfbGlzdDogc2FzIGRldmljZSBvYmplY3QgbGlzdCAodXNlZCBvbmx5IGF0IGluaXQgdGltZSkKKyAqIEBzYXNfZGV2aWNlX2xvY2s6CisgKiBAaW9fbWlzc2luZ19kZWxheTogdGltZSBmb3IgSU8gY29tcGxldGVkIGJ5IGZ3IHdoZW4gUERSIGVuYWJsZWQKKyAqIEBkZXZpY2VfbWlzc2luZ19kZWxheTogdGltZSBmb3IgZGV2aWNlIG1pc3NpbmcgYnkgZncgd2hlbiBQRFIgZW5hYmxlZAorICogQGNvbmZpZ19wYWdlX3N6OiBjb25maWcgcGFnZSBzaXplCisgKiBAY29uZmlnX3BhZ2U6IHJlc2VydmUgbWVtb3J5IGZvciBjb25maWcgcGFnZSBwYXlsb2FkCisgKiBAY29uZmlnX3BhZ2VfZG1hOgorICogQHNnZV9zaXplOiBzZyBlbGVtZW50IHNpemUgZm9yIGVpdGhlciAzMi82NCBiaXQKKyAqIEByZXF1ZXN0X2RlcHRoOiBoYmEgcmVxdWVzdCBxdWV1ZSBkZXB0aAorICogQHJlcXVlc3Rfc3o6IHBlciByZXF1ZXN0IGZyYW1lIHNpemUKKyAqIEByZXF1ZXN0OiBwb29sIG9mIHJlcXVlc3QgZnJhbWVzCisgKiBAcmVxdWVzdF9kbWE6CisgKiBAcmVxdWVzdF9kbWFfc3o6CisgKiBAc2NzaV9sb29rdXA6IGZpcm13YXJlIHJlcXVlc3QgdHJhY2tlciBsaXN0CisgKiBAc2NzaV9sb29rdXBfbG9jazoKKyAqIEBmcmVlX2xpc3Q6IGZyZWUgbGlzdCBvZiByZXF1ZXN0CisgKiBAY2hhaW46IHBvb2wgb2YgY2hhaW5zCisgKiBAcGVuZGluZ19pb19jb3VudDoKKyAqIEByZXNldF93cToKKyAqIEBjaGFpbl9kbWE6CisgKiBAbWF4X3NnZXNfaW5fbWFpbl9tZXNzYWdlOiBudW1iZXIgc2cgZWxlbWVudHMgaW4gbWFpbiBtZXNzYWdlCisgKiBAbWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZTogbnVtYmVyIHNnIGVsZW1lbnRzIHBlciBjaGFpbgorICogQGNoYWluc19uZWVkZWRfcGVyX2lvOiBtYXggY2hhaW5zIHBlciBpbworICogQGNoYWluX29mZnNldF92YWx1ZV9mb3JfbWFpbl9tZXNzYWdlOiBsb2NhdGlvbiAxc3Qgc2cgaW4gbWFpbgorICogQGNoYWluX2RlcHRoOiB0b3RhbCBjaGFpbnMgYWxsb2NhdGVkCisgKiBAc2Vuc2U6IHBvb2wgb2Ygc2Vuc2UKKyAqIEBzZW5zZV9kbWE6CisgKiBAc2Vuc2VfZG1hX3Bvb2w6CisgKiBAcmVwbHlfZGVwdGg6IGhiYSByZXBseSBxdWV1ZSBkZXB0aDoKKyAqIEByZXBseV9zejogcGVyIHJlcGx5IGZyYW1lIHNpemU6CisgKiBAcmVwbHk6IHBvb2wgb2YgcmVwbHlzOgorICogQHJlcGx5X2RtYToKKyAqIEByZXBseV9kbWFfcG9vbDoKKyAqIEByZXBseV9mcmVlX3F1ZXVlX2RlcHRoOiByZXBseSBmcmVlIGRlcHRoCisgKiBAcmVwbHlfZnJlZTogcG9vbCBmb3IgcmVwbHkgZnJlZSBxdWV1ZSAoMzIgYml0IGFkZHIpCisgKiBAcmVwbHlfZnJlZV9kbWE6CisgKiBAcmVwbHlfZnJlZV9kbWFfcG9vbDoKKyAqIEByZXBseV9mcmVlX2hvc3RfaW5kZXg6IHRhaWwgaW5kZXggaW4gcG9vbCB0byBpbnNlcnQgZnJlZSByZXBseXMKKyAqIEByZXBseV9wb3N0X3F1ZXVlX2RlcHRoOiByZXBseSBwb3N0IHF1ZXVlIGRlcHRoCisgKiBAcmVwbHlfcG9zdF9mcmVlOiBwb29sIGZvciByZXBseSBwb3N0ICg2NGJpdCBkZXNjcmlwdG9yKQorICogQHJlcGx5X3Bvc3RfZnJlZV9kbWE6CisgKiBAcmVwbHlfcG9zdF9mcmVlX2RtYV9wb29sOgorICogQHJlcGx5X3Bvc3RfaG9zdF9pbmRleDogaGVhZCBpbmRleCBpbiB0aGUgcG9vbCB3aGVyZSBGVyBjb21wbGV0ZXMgSU8KKyAqLworc3RydWN0IE1QVDJTQVNfQURBUFRFUiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXU4CQlpZDsKKwl1MzIJCXBjaV9pcnE7CisJY2hhcgkJbmFtZVtNUFRfTkFNRV9MRU5HVEhdOworCWNoYXIJCXRtcF9zdHJpbmdbTVBUX1NUUklOR19MRU5HVEhdOworCXN0cnVjdCBwY2lfZGV2CSpwZGV2OworCU1waTJTeXN0ZW1JbnRlcmZhY2VSZWdzX3QgX19pb21lbSAqY2hpcDsKKwl1bnNpZ25lZCBsb25nCWNoaXBfcGh5czsKKwl1bnNpZ25lZCBsb25nCXBpb19jaGlwOworCWludAkJbG9nZ2luZ19sZXZlbDsKKwl1OAkJaXJfZmlybXdhcmU7CisJaW50CQliYXJzOworCXU4CQltYXNrX2ludGVycnVwdHM7CisKKwkvKiBmdyBmYXVsdCBoYW5kbGVyICovCisJY2hhcgkJZmF1bHRfcmVzZXRfd29ya19xX25hbWVbMjBdOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmYXVsdF9yZXNldF93b3JrX3E7CisJc3RydWN0IGRlbGF5ZWRfd29yayBmYXVsdF9yZXNldF93b3JrOworCisJLyogZncgZXZlbnQgaGFuZGxlciAqLworCWNoYXIJCWZpcm13YXJlX2V2ZW50X25hbWVbMjBdOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSpmaXJtd2FyZV9ldmVudF90aHJlYWQ7CisJdTgJCWZ3X2V2ZW50c19vZmY7CisJc3BpbmxvY2tfdAlmd19ldmVudF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgZndfZXZlbnRfbGlzdDsKKworCSAvKiBtaXNjIGZsYWdzICovCisJaW50CQlhZW5fZXZlbnRfcmVhZF9mbGFnOworCXU4CQlicm9hZGNhc3RfYWVuX2J1c3k7CisJdTgJCWlvY19yZXNldF9pbl9wcm9ncmVzczsKKwl1OAkJc2hvc3RfcmVjb3Zlcnk7CisJc3BpbmxvY2tfdCAJaW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2s7CisJdTgJCWlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzOworCXU4CQlpZ25vcmVfbG9naW5mb3M7CisJdTgJCXJlbW92ZV9ob3N0OworCXU4CQl3YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZTsKKworCXU4CQltc2l4X2VuYWJsZTsKKwl1MTYJCW1zaXhfdmVjdG9yX2NvdW50OworCXUzMgkJKm1zaXhfdGFibGU7CisJdTMyCQkqbXNpeF90YWJsZV9iYWNrdXA7CisKKwkvKiBpbnRlcm5hbCBjb21tYW5kcywgY2FsbGJhY2sgaW5kZXggKi8KKwl1OAkJc2NzaV9pb19jYl9pZHg7CisJdTgJCXRtX2NiX2lkeDsKKwl1OAkJdHJhbnNwb3J0X2NiX2lkeDsKKwl1OAkJY3RsX2NiX2lkeDsKKwl1OAkJYmFzZV9jYl9pZHg7CisJdTgJCWNvbmZpZ19jYl9pZHg7CisJc3RydWN0IF9pbnRlcm5hbF9jbWQgYmFzZV9jbWRzOworCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRyYW5zcG9ydF9jbWRzOworCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRtX2NtZHM7CisJc3RydWN0IF9pbnRlcm5hbF9jbWQgY3RsX2NtZHM7CisJc3RydWN0IF9pbnRlcm5hbF9jbWQgY29uZmlnX2NtZHM7CisKKwlNUFRfQUREX1NHRQliYXNlX2FkZF9zZ19zaW5nbGU7CisKKwkvKiBldmVudCBsb2cgKi8KKwl1MzIJCWV2ZW50X3R5cGVbTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTXTsKKwl1MzIJCWV2ZW50X2NvbnRleHQ7CisJdm9pZAkJKmV2ZW50X2xvZzsKKwl1MzIJCWV2ZW50X21hc2tzW01QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEU107CisKKwkvKiBzdGF0aWMgY29uZmlnIHBhZ2VzICovCisJTXBpMklPQ0ZhY3RzUmVwbHlfdCBmYWN0czsKKwlNcGkyUG9ydEZhY3RzUmVwbHlfdCAqcGZhY3RzOworCU1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCBtYW51X3BnMDsKKwlNcGkyQmlvc1BhZ2UyX3QJYmlvc19wZzI7CisJTXBpMkJpb3NQYWdlM190CWJpb3NfcGczOworCU1waTJJT0NQYWdlOF90IGlvY19wZzg7CisJTXBpMklPVW5pdFBhZ2UwX3QgaW91bml0X3BnMDsKKwlNcGkySU9Vbml0UGFnZTFfdCBpb3VuaXRfcGcxOworCisJc3RydWN0IF9ib290X2RldmljZSByZXFfYm9vdF9kZXZpY2U7CisJc3RydWN0IF9ib290X2RldmljZSByZXFfYWx0X2Jvb3RfZGV2aWNlOworCXN0cnVjdCBfYm9vdF9kZXZpY2UgY3VycmVudF9ib290X2RldmljZTsKKworCS8qIHNhcyBoYmEsIGV4cGFuZGVyLCBhbmQgZGV2aWNlIGxpc3QgKi8KKwlzdHJ1Y3QgX3Nhc19ub2RlIHNhc19oYmE7CisJc3RydWN0IGxpc3RfaGVhZCBzYXNfZXhwYW5kZXJfbGlzdDsKKwlzcGlubG9ja190CXNhc19ub2RlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzYXNfZGV2aWNlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBzYXNfZGV2aWNlX2luaXRfbGlzdDsKKwlzcGlubG9ja190CXNhc19kZXZpY2VfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJhaWRfZGV2aWNlX2xpc3Q7CisJc3BpbmxvY2tfdAlyYWlkX2RldmljZV9sb2NrOworCXU4CQlpb19taXNzaW5nX2RlbGF5OworCXUxNgkJZGV2aWNlX21pc3NpbmdfZGVsYXk7CisJaW50CQlzYXNfaWQ7CisKKwkvKiBjb25maWcgcGFnZSAqLworCXUxNgkJY29uZmlnX3BhZ2Vfc3o7CisJdm9pZCAJCSpjb25maWdfcGFnZTsKKwlkbWFfYWRkcl90CWNvbmZpZ19wYWdlX2RtYTsKKworCS8qIHJlcXVlc3QgKi8KKwl1MTYJCXNnZV9zaXplOworCXUxNiAJCXJlcXVlc3RfZGVwdGg7CisJdTE2CQlyZXF1ZXN0X3N6OworCXU4CQkqcmVxdWVzdDsKKwlkbWFfYWRkcl90CXJlcXVlc3RfZG1hOworCXUzMgkJcmVxdWVzdF9kbWFfc3o7CisJc3RydWN0IHJlcXVlc3RfdHJhY2tlciAqc2NzaV9sb29rdXA7CisJc3BpbmxvY2tfdCBzY3NpX2xvb2t1cF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCWludAkJcGVuZGluZ19pb19jb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByZXNldF93cTsKKworCS8qIGNoYWluICovCisJdTgJCSpjaGFpbjsKKwlkbWFfYWRkcl90CWNoYWluX2RtYTsKKwl1MTYgCQltYXhfc2dlc19pbl9tYWluX21lc3NhZ2U7CisJdTE2CQltYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlOworCXUxNgkJY2hhaW5zX25lZWRlZF9wZXJfaW87CisJdTE2CQljaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZTsKKwl1MTYJCWNoYWluX2RlcHRoOworCisJLyogc2Vuc2UgKi8KKwl1OAkJKnNlbnNlOworCWRtYV9hZGRyX3QJc2Vuc2VfZG1hOworCXN0cnVjdCBkbWFfcG9vbCAqc2Vuc2VfZG1hX3Bvb2w7CisKKwkvKiByZXBseSAqLworCXUxNgkJcmVwbHlfc3o7CisJdTgJCSpyZXBseTsKKwlkbWFfYWRkcl90CXJlcGx5X2RtYTsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X2RtYV9wb29sOworCisJLyogcmVwbHkgZnJlZSBxdWV1ZSAqLworCXUxNiAJCXJlcGx5X2ZyZWVfcXVldWVfZGVwdGg7CisJdTMyCQkqcmVwbHlfZnJlZTsKKwlkbWFfYWRkcl90CXJlcGx5X2ZyZWVfZG1hOworCXN0cnVjdCBkbWFfcG9vbCAqcmVwbHlfZnJlZV9kbWFfcG9vbDsKKwl1MzIJCXJlcGx5X2ZyZWVfaG9zdF9pbmRleDsKKworCS8qIHJlcGx5IHBvc3QgcXVldWUgKi8KKwl1MTYgCQlyZXBseV9wb3N0X3F1ZXVlX2RlcHRoOworCU1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCAqcmVwbHlfcG9zdF9mcmVlOworCWRtYV9hZGRyX3QJcmVwbHlfcG9zdF9mcmVlX2RtYTsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbDsKKwl1MzIJCXJlcGx5X3Bvc3RfaG9zdF9pbmRleDsKKworCS8qIGRpYWcgYnVmZmVyIHN1cHBvcnQgKi8KKwl1OAkJKmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CisJdTMyCQlkaWFnX2J1ZmZlcl9zeltNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCWRtYV9hZGRyX3QJZGlhZ19idWZmZXJfZG1hW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CisJdTgJCWRpYWdfYnVmZmVyX3N0YXR1c1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCXUzMgkJdW5pcXVlX2lkW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CisJdTMyCQlwcm9kdWN0X3NwZWNpZmljW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF1bMjNdOworCXUzMgkJZGlhZ25vc3RpY19mbGFnc1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworfTsKKwordHlwZWRlZiB2b2lkICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKKyAgICB1MzIgcmVwbHkpOworCisKKy8qIGJhc2Ugc2hhcmVkIEFQSSAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbXB0MnNhc19pb2NfbGlzdDsKKworaW50IG1wdDJzYXNfYmFzZV9hdHRhY2goc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKTsKK3ZvaWQgbXB0MnNhc19iYXNlX2RldGFjaChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpOworaW50IG1wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyk7Cit2b2lkIG1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpOworaW50IG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZywKKyAgICBlbnVtIHJlc2V0X3R5cGUgdHlwZSk7CisKK3ZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwordm9pZCAqbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB2b2lkICpwYWRkcik7CitkbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKK2RtYV9hZGRyX3QgbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOworCit1MTYgbXB0MnNhc19iYXNlX2dldF9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KTsKK3ZvaWQgbXB0MnNhc19iYXNlX2ZyZWVfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQsCisgICAgdTE2IGhhbmRsZSk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggdmZfaWQsIHUxNiBpb19pbmRleCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkKTsKK3ZvaWQgbXB0MnNhc19iYXNlX2luaXRpYWxpemVfY2FsbGJhY2tfaGFuZGxlcih2b2lkKTsKK3U4IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKE1QVF9DQUxMQkFDSyBjYl9mdW5jKTsKK3ZvaWQgbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih1OCBjYl9pZHgpOworCit2b2lkIG1wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordm9pZCAqbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgcGh5c19hZGRyKTsKKwordTMyIG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgY29va2VkKTsKKwordm9pZCBtcHQyc2FzX2Jhc2VfZmF1bHRfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgLCB1MTYgZmF1bHRfY29kZSk7CitpbnQgbXB0MnNhc19iYXNlX3Nhc19pb3VuaXRfY29udHJvbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90ICptcGlfcmVwbHksIE1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90CisgICAgKm1waV9yZXF1ZXN0KTsKK2ludCBtcHQyc2FzX2Jhc2Vfc2NzaV9lbmNsb3N1cmVfcHJvY2Vzc29yKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyU2VwUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyU2VwUmVxdWVzdF90ICptcGlfcmVxdWVzdCk7Cit2b2lkIG1wdDJzYXNfYmFzZV92YWxpZGF0ZV9ldmVudF90eXBlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyICpldmVudF90eXBlKTsKKworLyogc2NzaWggc2hhcmVkIEFQSSAqLwordm9pZCBtcHQyc2FzX3Njc2loX2lzc3VlX3RtKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdWludCBsdW4sCisgICAgdTggdHlwZSwgdTE2IHNtaWRfdGFzaywgdWxvbmcgdGltZW91dCk7Cit2b2lkIG1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKTsKK3ZvaWQgbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSk7CitzdHJ1Y3QgX3Nhc19ub2RlICptcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfaGFuZGxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1MTYgaGFuZGxlKTsKK3N0cnVjdCBfc2FzX25vZGUgKm1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSCisgICAgKmlvYywgdTY0IHNhc19hZGRyZXNzKTsKK3N0cnVjdCBfc2FzX2RldmljZSAqbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoCisgICAgc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MpOworCit2b2lkIG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3ZvaWQgbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKTsKKworLyogY29uZmlnIHNoYXJlZCBBUEkgKi8KK3ZvaWQgbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggKm51bV9waHlzKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCAqY29uZmlnX3BhZ2UpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMkJpb3NQYWdlMl90ICpjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGczKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyQmlvc1BhZ2UzX3QgKmNvbmZpZ19wYWdlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UwX3QgKmNvbmZpZ19wYWdlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNEZXZpY2VQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0RldmljZVBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwgdTMyIGhhbmRsZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeik7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfc2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90IGNvbmZpZ19wYWdlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfaW9jX3BnOChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMklPQ1BhZ2U4X3QgKmNvbmZpZ19wYWdlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyRXhwYW5kZXJQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJFeHBhbmRlclBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MzIgcGh5X251bWJlciwgdTE2IGhhbmRsZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2VuY2xvc3VyZV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNFbmNsb3N1cmVQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9waHlfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzUGh5UGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBwaHlfbnVtYmVyKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc1BoeVBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MzIgcGh5X251bWJlcik7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlJhaWRWb2xQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9udW1iZXJfcGRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdTggKm51bV9wZHMpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJSYWlkVm9sUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlLCB1MTYgc3opOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9waHlzX2Rpc2tfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLAorICAgIHUzMiBmb3JtX3NwZWNpZmljKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBwZF9oYW5kbGUsCisgICAgdTE2ICp2b2x1bWVfaGFuZGxlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgdm9sdW1lX2hhbmRsZSwKKyAgICB1NjQgKnd3aWQpOworCisvKiBjdGwgc2hhcmVkIEFQSSAqLworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHQyc2FzX2hvc3RfYXR0cnNbXTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19kZXZfYXR0cnNbXTsKK3ZvaWQgbXB0MnNhc19jdGxfaW5pdCh2b2lkKTsKK3ZvaWQgbXB0MnNhc19jdGxfZXhpdCh2b2lkKTsKK3ZvaWQgbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3ZvaWQgbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSk7Cit2b2lkIG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSk7Cit2b2lkIG1wdDJzYXNfY3RsX2FkZF90b19ldmVudF9sb2coc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseSk7CisKKy8qIHRyYW5zcG9ydCBzaGFyZWQgQVBJICovCit2b2lkIG1wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7CitzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTE2IGhhbmRsZSwgdTE2IHBhcmVudF9oYW5kbGUpOwordm9pZCBtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcywKKyAgICB1MTYgcGFyZW50X2hhbmRsZSk7CitpbnQgbXB0MnNhc190cmFuc3BvcnRfYWRkX2hvc3RfcGh5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IF9zYXNfcGh5CisgICAgKm1wdDJzYXNfcGh5LCBNcGkyU2FzUGh5UGFnZTBfdCBwaHlfcGcwLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2KTsKK2ludCBtcHQyc2FzX3RyYW5zcG9ydF9hZGRfZXhwYW5kZXJfcGh5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IF9zYXNfcGh5CisgICAgKm1wdDJzYXNfcGh5LCBNcGkyRXhwYW5kZXJQYWdlMV90IGV4cGFuZGVyX3BnMSwgc3RydWN0IGRldmljZSAqcGFyZW50X2Rldik7Cit2b2lkIG1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9waHlfbGlua19jaGFuZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLAorICAgdTE2IGF0dGFjaGVkX2hhbmRsZSwgdTggcGh5X251bWJlciwgdTggbGlua19yYXRlKTsKK2V4dGVybiBzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9uczsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlOworCisjZW5kaWYgLyogTVBUMlNBU19CQVNFX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2ZiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0wLDAgKzEsMTg3MyBAQAorLyoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvbW1vbiBBUEkgZm9yIGFjY2Vzc2luZyBmaXJtd2FyZSBjb25maWd1cmF0aW9uIHBhZ2VzCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSAibXB0MnNhc19iYXNlLmgiCisKKy8qIGxvY2FsIGRlZmluaXRpb25zICovCisKKy8qIFRpbWVvdXQgZm9yIGNvbmZpZyBwYWdlIHJlcXVlc3QgKGluIHNlY29uZHMpICovCisjZGVmaW5lIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUIDE1CisKKy8qIENvbW1vbiBzZ2wgZmxhZ3MgZm9yIFJFQURJTkcgYSBjb25maWcgcGFnZS4gKi8KKyNkZWZpbmUgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTICgoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfCBcCisgICAgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiBcCisgICAgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCkgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQpCisKKy8qIENvbW1vbiBzZ2wgZmxhZ3MgZm9yIFdSSVRJTkcgYSBjb25maWcgcGFnZS4gKi8KKyNkZWZpbmUgTVBUMl9DT05GSUdfQ09NTU9OX1dSSVRFX1NHTEZMQUdTICgoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfCBcCisgICAgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiBcCisgICAgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCB8IE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DKSBcCisgICAgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQpCisKKy8qKgorICogc3RydWN0IGNvbmZpZ19yZXF1ZXN0IC0gb2J0YWluIGRtYSBtZW1vcnkgdmlhIHJvdXRpbmUKKyAqIEBjb25maWdfcGFnZV9zejogc2l6ZQorICogQGNvbmZpZ19wYWdlOiB2aXJ0IHBvaW50ZXIKKyAqIEBjb25maWdfcGFnZV9kbWE6IHBoeXMgcG9pbnRlcgorICoKKyAqLworc3RydWN0IGNvbmZpZ19yZXF1ZXN0eworCXUxNgkJCWNvbmZpZ19wYWdlX3N6OworCXZvaWQJCQkqY29uZmlnX3BhZ2U7CisJZG1hX2FkZHJfdAkJY29uZmlnX3BhZ2VfZG1hOworfTsKKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworLyoqCisgKiBfY29uZmlnX2Rpc3BsYXlfc29tZV9kZWJ1ZyAtIGRlYnVnIHJvdXRpbmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBjYWxsaW5nX2Z1bmN0aW9uX25hbWU6IHN0cmluZyBwYXNzIGZyb20gY2FsbGluZyBmdW5jdGlvbgorICogQG1waV9yZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZQorICogQ29udGV4dDogbm9uZS4KKyAqCisgKiBGdW5jdGlvbiBmb3IgZGlzcGxheWluZyBkZWJ1ZyBpbmZvIGhlbHBmdWxsIHdoZW4gZGVidWdnaW5nIGlzc3VlcworICogaW4gdGhpcyBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkCitfY29uZmlnX2Rpc3BsYXlfc29tZV9kZWJ1ZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAorICAgIGNoYXIgKmNhbGxpbmdfZnVuY3Rpb25fbmFtZSwgTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHkpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJY2hhciAqZGVzYyA9IE5VTEw7CisKKwlpZiAoIShpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfQ09ORklHKSkKKwkJcmV0dXJuOworCisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCXN3aXRjaCAobXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlVHlwZSAmIE1QSTJfQ09ORklHX1BBR0VUWVBFX01BU0spIHsKKwljYXNlIE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPX1VOSVQ6CisJCWRlc2MgPSAiaW9fdW5pdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9DT05GSUdfUEFHRVRZUEVfSU9DOgorCQlkZXNjID0gImlvYyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9DT05GSUdfUEFHRVRZUEVfQklPUzoKKwkJZGVzYyA9ICJiaW9zIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRToKKwkJZGVzYyA9ICJyYWlkX3ZvbHVtZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9DT05GSUdfUEFHRVRZUEVfTUFOVUZBQ1RVUklORzoKKwkJZGVzYyA9ICJtYW51ZmF1Y3R1cmluZyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSzoKKwkJZGVzYyA9ICJwaHlzZGlzayI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ6CisJCXN3aXRjaCAobXBpX3JlcXVlc3QtPkV4dFBhZ2VUeXBlKSB7CisJCWNhc2UgTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ6CisJCQlkZXNjID0gInNhc19pb191bml0IjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19FWFBBTkRFUjoKKwkJCWRlc2MgPSAic2FzX2V4cGFuZGVyIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19ERVZJQ0U6CisJCQlkZXNjID0gInNhc19kZXZpY2UiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX1BIWToKKwkJCWRlc2MgPSAic2FzX3BoeSI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9MT0c6CisJCQlkZXNjID0gImxvZyI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9FTkNMT1NVUkU6CisJCQlkZXNjID0gImVuY2xvc3VyZSI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9SQUlEX0NPTkZJRzoKKwkJCWRlc2MgPSAicmFpZF9jb25maWciOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfRFJJVkVSX01BUFBJTkc6CisJCQlkZXNjID0gImRyaXZlcl9tYXBwcGluZyI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoIWRlc2MpCisJCXJldHVybjsKKworCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICVzKCVkKSwgYWN0aW9uKCVkKSwgZm9ybSgweCUwOHgpLCAiCisJICAgICJzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBjYWxsaW5nX2Z1bmN0aW9uX25hbWUsIGRlc2MsCisJICAgIG1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZU51bWJlciwgbXBpX3JlcXVlc3QtPkFjdGlvbiwKKwkgICAgbGUzMl90b19jcHUobXBpX3JlcXVlc3QtPlBhZ2VBZGRyZXNzKSwgc21pZCk7CisKKwlpZiAoIW1waV9yZXBseSkKKwkJcmV0dXJuOworCisJaWYgKG1waV9yZXBseS0+SU9DU3RhdHVzIHx8IG1waV9yZXBseS0+SU9DTG9nSW5mbykKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCSAgICAiXHRpb2NzdGF0dXMoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKK30KKyNlbmRpZgorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2RvbmUgLSBjb25maWcgcGFnZSBjb21wbGV0aW9uIHJvdXRpbmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBub25lLgorICoKKyAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgX2NvbmZpZ19yZXF1ZXN0LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit7CisJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CisKKwlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCisJCXJldHVybjsKKwlpZiAoaW9jLT5jb25maWdfY21kcy5zbWlkICE9IHNtaWQpCisJCXJldHVybjsKKwlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKKwltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaWYgKG1waV9yZXBseSkgeworCQlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVBMWV9WQUxJRDsKKwkJbWVtY3B5KGlvYy0+Y29uZmlnX2NtZHMucmVwbHksIG1waV9yZXBseSwKKwkJICAgIG1waV9yZXBseS0+TXNnTGVuZ3RoKjQpOworCX0KKwlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmPSB+TVBUMl9DTURfUEVORElORzsKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlfY29uZmlnX2Rpc3BsYXlfc29tZV9kZWJ1Zyhpb2MsIHNtaWQsICJjb25maWdfZG9uZSIsIG1waV9yZXBseSk7CisjZW5kaWYKKwljb21wbGV0ZSgmaW9jLT5jb25maWdfY21kcy5kb25lKTsKK30KKworLyoqCisgKiBfY29uZmlnX3JlcXVlc3QgLSBtYWluIHJvdXRpbmUgZm9yIHNlbmRpbmcgY29uZmlnIHBhZ2UgcmVxdWVzdHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXF1ZXN0OiByZXF1ZXN0IG1lc3NhZ2UgZnJhbWUKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcworICogQ29udGV4dDogc2xlZXAsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIG5lZWRzIHRvIGFjcXVpcmUgdGhlIGNvbmZpZ19jbWRzLm11dGV4CisgKgorICogQSBnZW5lcmljIEFQSSBmb3IgY29uZmlnIHBhZ2UgcmVxdWVzdHMgdG8gZmlybXdhcmUuCisgKgorICogVGhlIGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzIGZsYWcgc2hvdWxkIGJlIE1QVDJfQ01EX05PVF9VU0VEIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIEFQSS4KKyAqCisgKiBUaGUgY2FsbGJhY2sgaW5kZXggaXMgc2V0IGluc2lkZSBgaW9jLT5jb25maWdfY2JfaWR4LgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19jb25maWdfcmVxdWVzdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXF1ZXN0X3QKKyAgICAqbXBpX3JlcXVlc3QsIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIGludCB0aW1lb3V0KQoreworCXUxNiBzbWlkOworCXUzMiBpb2Nfc3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwlNcGkyQ29uZmlnUmVxdWVzdF90ICpjb25maWdfcmVxdWVzdDsKKwlpbnQgcjsKKwl1OCByZXRyeV9jb3VudDsKKwl1OCBpc3N1ZV9yZXNldDsKKwl1MTYgd2FpdF9zdGF0ZV9jb3VudDsKKworCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogY29uZmlnX2NtZCBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXJldHJ5X2NvdW50ID0gMDsKKworIHJldHJ5X2NvbmZpZzoKKwl3YWl0X3N0YXRlX2NvdW50ID0gMDsKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJd2hpbGUgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgeworCQlpZiAod2FpdF9zdGF0ZV9jb3VudCsrID09IE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJc3NsZWVwKDEpOworCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogd2FpdGluZyBmb3IgIgorCQkgICAgIm9wZXJhdGlvbmFsIHN0YXRlKGNvdW50PSVkKVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIHdhaXRfc3RhdGVfY291bnQpOworCX0KKwlpZiAod2FpdF9zdGF0ZV9jb3VudCkKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmNvbmZpZ19jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJciA9IDA7CisJbWVtc2V0KG1waV9yZXBseSwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXBseV90KSk7CisJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCWNvbmZpZ19yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmNvbmZpZ19jbWRzLnNtaWQgPSBzbWlkOworCW1lbWNweShjb25maWdfcmVxdWVzdCwgbXBpX3JlcXVlc3QsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY29uZmlnX3JlcXVlc3QiLCBOVUxMKTsKKyNlbmRpZgorCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgY29uZmlnX3JlcXVlc3QtPlZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jb25maWdfY21kcy5kb25lLAorCSAgICB0aW1lb3V0KkhaKTsKKwlpZiAoIShpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlpc3N1ZV9yZXNldCA9IDE7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpCisJCW1lbWNweShtcGlfcmVwbHksIGlvYy0+Y29uZmlnX2NtZHMucmVwbHksCisJCSAgICBzaXplb2YoTXBpMkNvbmZpZ1JlcGx5X3QpKTsKKwlpZiAocmV0cnlfY291bnQpCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogcmV0cnkgY29tcGxldGVkISFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCXJldHVybiByOworCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCWlmICghcmV0cnlfY291bnQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBhdHRlbXB0aW5nIHJldHJ5XG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHJ5X2NvdW50Kys7CisJCWdvdG8gcmV0cnlfY29uZmlnOworCX0KKwlyZXR1cm4gLUVGQVVMVDsKK30KKworLyoqCisgKiBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5IC0gb2J0YWluIHBoeXNpY2FsIG1lbW9yeQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbWVtOiBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QKKyAqCisgKiBBIHdyYXBwZXIgZm9yIG9idGFpbmluZyBkbWEtYWJsZSBtZW1vcnkgZm9yIGNvbmZpZyBwYWdlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGNvbmZpZ19yZXF1ZXN0ICptZW0pCit7CisJaW50IHIgPSAwOworCisJbWVtLT5jb25maWdfcGFnZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgbWVtLT5jb25maWdfcGFnZV9zeiwKKwkgICAgJm1lbS0+Y29uZmlnX3BhZ2VfZG1hKTsKKwlpZiAoIW1lbS0+Y29uZmlnX3BhZ2UpCisJCXIgPSAtRU5PTUVNOworCXJldHVybiByOworfQorCisvKioKKyAqIF9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeSAtIHdyYXBwZXIgdG8gZnJlZSB0aGUgbWVtb3J5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtZW06IHN0cnVjdCBjb25maWdfcmVxdWVzdAorICoKKyAqIEEgd3JhcHBlciB0byBmcmVlIGRtYS1hYmxlIG1lbW9yeSB3aGVuIHVzaW5nIF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK19jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGNvbmZpZ19yZXF1ZXN0ICptZW0pCit7CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBkZXYsIG1lbS0+Y29uZmlnX3BhZ2Vfc3osIG1lbS0+Y29uZmlnX3BhZ2UsCisJICAgIG1lbS0+Y29uZmlnX3BhZ2VfZG1hKTsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAgLSBvYnRhaW4gbWFudWZhY3R1cmluZyBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCAqY29uZmlnX3BhZ2UpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMk1hbnVmYWN0dXJpbmdQYWdlMF90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9NQU5VRkFDVFVSSU5HOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX01BTlVGQUNUVVJJTkcwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMk1hbnVmYWN0dXJpbmdQYWdlMF90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGcyIC0gb2J0YWluIGJpb3MgcGFnZSAyCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGcyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyQmlvc1BhZ2UyX3QgKmNvbmZpZ19wYWdlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJCaW9zUGFnZTJfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfQklPUzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9CSU9TUEFHRTJfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyQmlvc1BhZ2UyX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzMgLSBvYnRhaW4gYmlvcyBwYWdlIDMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJCaW9zUGFnZTNfdCAqY29uZmlnX3BhZ2UpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMkJpb3NQYWdlM190KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9CSU9TOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0JJT1NQQUdFM19QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJCaW9zUGFnZTNfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9pb3VuaXRfcGcwIC0gb2J0YWluIGlvdW5pdCBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UwX3QgKmNvbmZpZ19wYWdlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJJT1VuaXRQYWdlMF90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMklPVW5pdFBhZ2UwX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMSAtIG9idGFpbiBpb3VuaXQgcGFnZSAxCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkySU9Vbml0UGFnZTFfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfSU9fVU5JVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9JT1VOSVRQQUdFMV9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJJT1VuaXRQYWdlMV90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfc2V0X2lvdW5pdF9wZzEgLSBzZXQgaW91bml0IHBhZ2UgMQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCBjb25maWdfcGFnZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPX1VOSVQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKworCW1lbXNldChtZW0uY29uZmlnX3BhZ2UsIDAsIG1lbS5jb25maWdfcGFnZV9zeik7CisJbWVtY3B5KG1lbS5jb25maWdfcGFnZSwgJmNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoTXBpMklPVW5pdFBhZ2UxX3QpKTsKKworCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fV1JJVEVfU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzggLSBvYnRhaW4gaW9jIHBhZ2UgOAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkySU9DUGFnZThfdCAqY29uZmlnX3BhZ2UpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMklPQ1BhZ2U4X3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPQzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDg7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9JT0NQQUdFOF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJJT0NQYWdlOF90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwIC0gb2J0YWluIHNhcyBkZXZpY2UgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBmb3JtOiBHRVRfTkVYVF9IQU5ETEUgb3IgSEFORExFCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0RldmljZVBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwgdTMyIGhhbmRsZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyU2FzRGV2aWNlUGFnZTBfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfREVWSUNFOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTREVWSUNFMF9QQUdFVkVSU0lPTjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBoYW5kbGUpOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyU2FzRGV2aWNlUGFnZTBfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMSAtIG9idGFpbiBzYXMgZGV2aWNlIHBhZ2UgMQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAZm9ybTogR0VUX05FWFRfSEFORExFIG9yIEhBTkRMRQorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNEZXZpY2VQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UxX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0RFVklDRTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0RFVklDRTFfUEFHRVZFUlNJT047CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UxX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzIC0gb2J0YWluIG51bWJlciBvZiBwaHlzIG9uIHRoZSBob3N0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBudW1fcGh5czogcG9pbnRlciByZXR1cm5lZCB3aXRoIHRoZSBudW1iZXIgb2YgcGh5cworICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggKm51bV9waHlzKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKwl1MTYgaW9jX3N0YXR1czsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc0lPVW5pdFBhZ2UwX3QgY29uZmlnX3BhZ2U7CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAwOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHkuRXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQkJbWVtY3B5KCZjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0UGFnZTBfdCkpKTsKKwkJCSpudW1fcGh5cyA9IGNvbmZpZ19wYWdlLk51bVBoeXM7CisJCX0KKwl9CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzAgLSBvYnRhaW4gc2FzIGlvdW5pdCBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQHN6OiBzaXplIG9mIGJ1ZmZlciBwYXNzZWQgaW4gY29uZmlnX3BhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGNhbGwgY29uZmlnX2dldF9udW1iZXJfaGJhX3BoeXMgcHJpb3IgdG8KKyAqIHRoaXMgZnVuY3Rpb24sIHNvIGVub3VnaCBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBjb25maWdfcGFnZS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzeik7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgc3osIG1lbS5jb25maWdfcGFnZV9zeikpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxIC0gb2J0YWluIHNhcyBpb3VuaXQgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBzejogc2l6ZSBvZiBidWZmZXIgcGFzc2VkIGluIGNvbmZpZ19wYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBjYWxsIGNvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzIHByaW9yIHRvCisgKiB0aGlzIGZ1bmN0aW9uLCBzbyBlbm91Z2ggbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgY29uZmlnX3BhZ2UuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc3opOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfSU9fVU5JVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIHN6LCBtZW0uY29uZmlnX3BhZ2Vfc3opKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAgLSBvYnRhaW4gZXhwYW5kZXIgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBmb3JtOiBHRVRfTkVYVF9IQU5ETEUgb3IgSEFORExFCisgKiBAaGFuZGxlOiBleHBhbmRlciBoYW5kbGUKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMkV4cGFuZGVyUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJFeHBhbmRlclBhZ2UwX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0VYUEFOREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJFeHBhbmRlclBhZ2UwX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcxIC0gb2J0YWluIGV4cGFuZGVyIHBhZ2UgMQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAcGh5X251bWJlcjogcGh5IG51bWJlcgorICogQGhhbmRsZTogZXhwYW5kZXIgaGFuZGxlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJFeHBhbmRlclBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MzIgcGh5X251bWJlciwKKyAgICB1MTYgaGFuZGxlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJFeHBhbmRlclBhZ2UxX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0VYUEFOREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0VYUEFOREVSMV9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlMzIoTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9ITkRMX1BIWV9OVU0gfAorCSAgICAocGh5X251bWJlciA8PCBNUEkyX1NBU19FWFBBTkRfUEdBRF9QSFlOVU1fU0hJRlQpIHwgaGFuZGxlKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMkV4cGFuZGVyUGFnZTFfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9lbmNsb3N1cmVfcGcwIC0gb2J0YWluIGVuY2xvc3VyZSBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQGZvcm06IEdFVF9ORVhUX0hBTkRMRSBvciBIQU5ETEUKKyAqIEBoYW5kbGU6IGV4cGFuZGVyIGhhbmRsZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfZW5jbG9zdXJlX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwgdTMyIGhhbmRsZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9FTkNMT1NVUkU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAwOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTRU5DTE9TVVJFMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJTYXNFbmNsb3N1cmVQYWdlMF90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3BoeV9wZzAgLSBvYnRhaW4gcGh5IHBhZ2UgMAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAcGh5X251bWJlcjogcGh5IG51bWJlcgorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc1BoeVBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgcGh5X251bWJlcikKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyU2FzUGh5UGFnZTBfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfUEhZOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU1BIWTBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CisJICAgIGNwdV90b19sZTMyKE1QSTJfU0FTX1BIWV9QR0FEX0ZPUk1fUEhZX05VTUJFUiB8IHBoeV9udW1iZXIpOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyU2FzUGh5UGFnZTBfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9waHlfcGcxIC0gb2J0YWluIHBoeSBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQHBoeV9udW1iZXI6IHBoeSBudW1iZXIKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3BoeV9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNQaHlQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIHBoeV9udW1iZXIpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc1BoeVBhZ2UxX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX1BIWTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNQSFkxX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihNUEkyX1NBU19QSFlfUEdBRF9GT1JNX1BIWV9OVU1CRVIgfCBwaHlfbnVtYmVyKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMlNhc1BoeVBhZ2UxX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcxIC0gb2J0YWluIHJhaWQgdm9sdW1lIHBhZ2UgMQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAZm9ybTogR0VUX05FWFRfSEFORExFIG9yIEhBTkRMRQorICogQGhhbmRsZTogdm9sdW1lIGhhbmRsZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyUmFpZFZvbFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwKKyAgICB1MzIgaGFuZGxlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJSYWlkVm9sUGFnZTFfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xVTUU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfUkFJRFZPTFBBR0UxX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyUmFpZFZvbFBhZ2UxX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX3BkcyAtIG9idGFpbiBudW1iZXIgb2YgcGh5cyBkaXNrIGFzc2lnbmVkIHRvIHZvbHVtZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiB2b2x1bWUgaGFuZGxlCisgKiBAbnVtX3BkczogcmV0dXJucyBwZHMgY291bnQKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9wZHMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLAorICAgIHU4ICpudW1fcGRzKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJTXBpMlJhaWRWb2xQYWdlMF90ICpjb25maWdfcGFnZTsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKwl1MTYgaW9jX3N0YXR1czsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJKm51bV9wZHMgPSAwOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfVk9MVU1FOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CisJICAgIGNwdV90b19sZTMyKE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQkJY29uZmlnX3BhZ2UgPSBtZW0uY29uZmlnX3BhZ2U7CisJCQkqbnVtX3BkcyA9IGNvbmZpZ19wYWdlLT5OdW1QaHlzRGlza3M7CisJCX0KKwl9CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwIC0gb2J0YWluIHJhaWQgdm9sdW1lIHBhZ2UgMAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAZm9ybTogR0VUX05FWFRfSEFORExFIG9yIEhBTkRMRQorICogQGhhbmRsZTogdm9sdW1lIGhhbmRsZQorICogQHN6OiBzaXplIG9mIGJ1ZmZlciBwYXNzZWQgaW4gY29uZmlnX3BhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMlJhaWRWb2xQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sCisgICAgdTMyIGhhbmRsZSwgdTE2IHN6KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzeik7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xVTUU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAwOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfUkFJRFZPTFBBR0UwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIHN6LCBtZW0uY29uZmlnX3BhZ2Vfc3opKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9waHlzX2Rpc2tfcGcwIC0gb2J0YWluIHBoeXMgZGlzayBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQGZvcm06IEdFVF9ORVhUX1BIWVNESVNLTlVNLCBQSFlTRElTS05VTSwgREVWSEFORExFCisgKiBAZm9ybV9zcGVjaWZpYzogc3BlY2lmaWMgdG8gdGhlIGZvcm0KKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3BoeXNfZGlza19wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJSYWlkUGh5c0Rpc2tQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sCisgICAgdTMyIGZvcm1fc3BlY2lmaWMpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfUEhZU0RJU0s7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAwOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfUkFJRFBIWVNESVNLUEFHRTBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBmb3JtX3NwZWNpZmljKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfaGFuZGxlIC0gcmV0dXJucyB2b2x1bWUgaGFuZGxlIGZvciBnaXZlIGhpZGRlbiByYWlkIGNvbXBvbmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHBkX2hhbmRsZTogcGh5cyBkaXNrIGhhbmRsZQorICogQHZvbHVtZV9oYW5kbGU6IHZvbHVtZSBoYW5kbGUKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgcGRfaGFuZGxlLAorICAgIHUxNiAqdm9sdW1lX2hhbmRsZSkKK3sKKwlNcGkyUmFpZENvbmZpZ3VyYXRpb25QYWdlMF90ICpjb25maWdfcGFnZTsKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlpbnQgciwgaTsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCXUxNiBpb2Nfc3RhdHVzOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJKnZvbHVtZV9oYW5kbGUgPSAwOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9SQUlEX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURDT05GSUcwX1BBR0VWRVJTSU9OOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CisJICAgIGNwdV90b19sZTMyKE1QSTJfUkFJRF9QR0FEX0ZPUk1fQUNUSVZFX0NPTkZJRyk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHkuRXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCXIgPSAtMTsKKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJiBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gZG9uZTsKKwljb25maWdfcGFnZSA9IG1lbS5jb25maWdfcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnX3BhZ2UtPk51bUVsZW1lbnRzOyBpKyspIHsKKwkJaWYgKChjb25maWdfcGFnZS0+Q29uZmlnRWxlbWVudFtpXS5FbGVtZW50RmxhZ3MgJgorCQkgICAgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfTUFTS19FTEVNRU5UX1RZUEUpICE9CisJCSAgICBNUEkyX1JBSURDT05GSUcwX0VGTEFHU19WT0xfUEhZU19ESVNLX0VMRU1FTlQpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbmZpZ19wYWdlLT5Db25maWdFbGVtZW50W2ldLlBoeXNEaXNrRGV2SGFuZGxlID09CisJCSAgICBwZF9oYW5kbGUpIHsKKwkJCSp2b2x1bWVfaGFuZGxlID0gbGUxNl90b19jcHUoY29uZmlnX3BhZ2UtPgorCQkJICAgIENvbmZpZ0VsZW1lbnRbaV0uVm9sRGV2SGFuZGxlKTsKKwkJCXIgPSAwOworCQkJZ290byBkb25lOworCQl9CisJfQorCisgZG9uZToKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQgLSByZXR1cm5zIHd3aWQgZ2l2ZW4gdGhlIHZvbHVtZSBoYW5kbGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHZvbHVtZV9oYW5kbGU6IHZvbHVtZSBoYW5kbGUKKyAqIEB3d2lkOiB2b2x1bWUgd3dpZAorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgdm9sdW1lX2hhbmRsZSwKKyAgICB1NjQgKnd3aWQpCit7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCU1waTJSYWlkVm9sUGFnZTFfdCByYWlkX3ZvbF9wZzE7CisKKwkqd3dpZCA9IDA7CisJaWYgKCEobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgICZyYWlkX3ZvbF9wZzEsIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwKKwkgICAgdm9sdW1lX2hhbmRsZSkpKSB7CisJCSp3d2lkID0gbGU2NF90b19jcHUocmFpZF92b2xfcGcxLldXSUQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0Zjg1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKQEAgLTAsMCArMSwyNTE2IEBACisvKgorICogTWFuYWdlbWVudCBNb2R1bGUgU3VwcG9ydCBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQKKyAqIGNvbnRyb2xsZXJzCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmMKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IKKyAqIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUCisgKiBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcworICogc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorICogZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCisgKiBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAqIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsCisgKiBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworICogRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKyAqIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAorICogSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUworCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJtcHQyc2FzX2Jhc2UuaCIKKyNpbmNsdWRlICJtcHQyc2FzX2N0bC5oIgorCitzdGF0aWMgc3RydWN0IGZhc3luY19zdHJ1Y3QgKmFzeW5jX3F1ZXVlOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGN0bF9wb2xsX3dhaXQpOworCisvKioKKyAqIGVudW0gYmxvY2tfc3RhdGUgLSBibG9ja2luZyBzdGF0ZQorICogQE5PTl9CTE9DS0lORzogbm9uIGJsb2NraW5nCisgKiBAQkxPQ0tJTkc6IGJsb2NraW5nCisgKgorICogVGhlc2Ugc3RhdGVzIGFyZSBmb3IgaW9jdGxzIHRoYXQgbmVlZCB0byB3YWl0IGZvciBhIHJlc3BvbnNlCisgKiBmcm9tIGZpcm13YXJlLCBzbyB0aGV5IHByb2JhYmx5IHJlcXVpcmUgc2xlZXAuCisgKi8KK2VudW0gYmxvY2tfc3RhdGUgeworCU5PTl9CTE9DS0lORywKKwlCTE9DS0lORywKK307CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX2N0bF9kaXNwbGF5X3NvbWVfZGVidWcgLSBkZWJ1ZyByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAY2FsbGluZ19mdW5jdGlvbl9uYW1lOiBzdHJpbmcgcGFzcyBmcm9tIGNhbGxpbmcgZnVuY3Rpb24KKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUKKyAqIENvbnRleHQ6IG5vbmUuCisgKgorICogRnVuY3Rpb24gZm9yIGRpc3BsYXlpbmcgZGVidWcgaW5mbyBoZWxwZnVsbCB3aGVuIGRlYnVnZ2luZyBpc3N1ZXMKKyAqIGluIHRoaXMgbW9kdWxlLgorICovCitzdGF0aWMgdm9pZAorX2N0bF9kaXNwbGF5X3NvbWVfZGVidWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKKyAgICBjaGFyICpjYWxsaW5nX2Z1bmN0aW9uX25hbWUsIE1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCWNoYXIgKmRlc2MgPSBOVUxMOworCisJaWYgKCEoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0lPQ1RMKSkKKwkJcmV0dXJuOworCisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCXN3aXRjaCAobXBpX3JlcXVlc3QtPkZ1bmN0aW9uKSB7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVDoKKwl7CisJCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKnNjc2lfcmVxdWVzdCA9CisJCSAgICAoTXBpMlNDU0lJT1JlcXVlc3RfdCAqKW1waV9yZXF1ZXN0OworCisJCXNucHJpbnRmKGlvYy0+dG1wX3N0cmluZywgTVBUX1NUUklOR19MRU5HVEgsCisJCSAgICAic2NzaV9pbywgY21kKDB4JTAyeCksIGNkYl9sZW4oJWQpIiwKKwkJICAgIHNjc2lfcmVxdWVzdC0+Q0RCLkNEQjMyWzBdLAorCQkgICAgbGUxNl90b19jcHUoc2NzaV9yZXF1ZXN0LT5Jb0ZsYWdzKSAmIDB4Rik7CisJCWRlc2MgPSBpb2MtPnRtcF9zdHJpbmc7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQ6CisJCWRlc2MgPSAidGFza19tZ210IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUOgorCQlkZXNjID0gImlvY19pbml0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX0lPQ19GQUNUUzoKKwkJZGVzYyA9ICJpb2NfZmFjdHMiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fQ09ORklHOgorCXsKKwkJTXBpMkNvbmZpZ1JlcXVlc3RfdCAqY29uZmlnX3JlcXVlc3QgPQorCQkgICAgKE1waTJDb25maWdSZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKworCQlzbnByaW50Zihpb2MtPnRtcF9zdHJpbmcsIE1QVF9TVFJJTkdfTEVOR1RILAorCQkgICAgImNvbmZpZywgdHlwZSgweCUwMngpLCBleHRfdHlwZSgweCUwMngpLCBudW1iZXIoJWQpIiwKKwkJICAgIChjb25maWdfcmVxdWVzdC0+SGVhZGVyLlBhZ2VUeXBlICYKKwkJICAgICBNUEkyX0NPTkZJR19QQUdFVFlQRV9NQVNLKSwgY29uZmlnX3JlcXVlc3QtPkV4dFBhZ2VUeXBlLAorCQkgICAgY29uZmlnX3JlcXVlc3QtPkhlYWRlci5QYWdlTnVtYmVyKTsKKwkJZGVzYyA9IGlvYy0+dG1wX3N0cmluZzsKKwkJYnJlYWs7CisJfQorCWNhc2UgTVBJMl9GVU5DVElPTl9QT1JUX0ZBQ1RTOgorCQlkZXNjID0gInBvcnRfZmFjdHMiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFCTEU6CisJCWRlc2MgPSAicG9ydF9lbmFibGUiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OOgorCQlkZXNjID0gImV2ZW50X25vdGlmaWNhdGlvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9GV19ET1dOTE9BRDoKKwkJZGVzYyA9ICJmd19kb3dubG9hZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9GV19VUExPQUQ6CisJCWRlc2MgPSAiZndfdXBsb2FkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1JBSURfQUNUSU9OOgorCQlkZXNjID0gInJhaWRfYWN0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSDoKKwl7CisJCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKnNjc2lfcmVxdWVzdCA9CisJCSAgICAoTXBpMlNDU0lJT1JlcXVlc3RfdCAqKW1waV9yZXF1ZXN0OworCisJCXNucHJpbnRmKGlvYy0+dG1wX3N0cmluZywgTVBUX1NUUklOR19MRU5HVEgsCisJCSAgICAicmFpZF9wYXNzLCBjbWQoMHglMDJ4KSwgY2RiX2xlbiglZCkiLAorCQkgICAgc2NzaV9yZXF1ZXN0LT5DREIuQ0RCMzJbMF0sCisJCSAgICBsZTE2X3RvX2NwdShzY3NpX3JlcXVlc3QtPklvRmxhZ3MpICYgMHhGKTsKKwkJZGVzYyA9IGlvYy0+dG1wX3N0cmluZzsKKwkJYnJlYWs7CisJfQorCWNhc2UgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOgorCQlkZXNjID0gInNhc19pb3VuaXRfY250bCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9TQVRBX1BBU1NUSFJPVUdIOgorCQlkZXNjID0gInNhdGFfcGFzcyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9ESUFHX0JVRkZFUl9QT1NUOgorCQlkZXNjID0gImRpYWdfYnVmZmVyX3Bvc3QiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fRElBR19SRUxFQVNFOgorCQlkZXNjID0gImRpYWdfcmVsZWFzZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g6CisJCWRlc2MgPSAic21wX3Bhc3N0aHJvdWdoIjsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFkZXNjKQorCQlyZXR1cm47CisKKwlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAlcywgc21pZCglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgY2FsbGluZ19mdW5jdGlvbl9uYW1lLCBkZXNjLCBzbWlkKTsKKworCWlmICghbXBpX3JlcGx5KQorCQlyZXR1cm47CisKKwlpZiAobXBpX3JlcGx5LT5JT0NTdGF0dXMgfHwgbXBpX3JlcGx5LT5JT0NMb2dJbmZvKQorCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJICAgICJcdGlvY3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCisJCSAgICBpb2MtPm5hbWUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpOworCisJaWYgKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fAorCSAgICBtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0KKwkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpIHsKKwkJTXBpMlNDU0lJT1JlcGx5X3QgKnNjc2lfcmVwbHkgPQorCQkgICAgKE1waTJTQ1NJSU9SZXBseV90ICopbXBpX3JlcGx5OworCQlpZiAoc2NzaV9yZXBseS0+U0NTSVN0YXRlIHx8IHNjc2lfcmVwbHktPlNDU0lTdGF0dXMpCisJCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJCSAgICAiXHRzY3NpX3N0YXRlKDB4JTAyeCksIHNjc2lfc3RhdHVzIgorCQkJICAgICIoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIHNjc2lfcmVwbHktPlNDU0lTdGF0ZSwKKwkJCSAgICBzY3NpX3JlcGx5LT5TQ1NJU3RhdHVzKTsKKwl9Cit9CisjZW5kaWYKKworLyoqCisgKiBtcHQyc2FzX2N0bF9kb25lIC0gY3RsIG1vZHVsZSBjb21wbGV0aW9uIHJvdXRpbmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBub25lLgorICoKKyAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgaW9jLT5jdGxfY2JfaWR4LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX2N0bF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit7CisJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CisKKwlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCisJCXJldHVybjsKKwlpZiAoaW9jLT5jdGxfY21kcy5zbWlkICE9IHNtaWQpCisJCXJldHVybjsKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKKwltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwlpZiAobXBpX3JlcGx5KSB7CisJCW1lbWNweShpb2MtPmN0bF9jbWRzLnJlcGx5LCBtcGlfcmVwbHksIG1waV9yZXBseS0+TXNnTGVuZ3RoKjQpOworCQlpb2MtPmN0bF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVBMWV9WQUxJRDsKKwl9CisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJX2N0bF9kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY3RsX2RvbmUiLCBtcGlfcmVwbHkpOworI2VuZGlmCisJaW9jLT5jdGxfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CisJY29tcGxldGUoJmlvYy0+Y3RsX2NtZHMuZG9uZSk7Cit9CisKKy8qKgorICogX2N0bF9jaGVja19ldmVudF90eXBlIC0gZGV0ZXJtaW5lcyB3aGVuIGFuIGV2ZW50IG5lZWRzIGxvZ2dpbmcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50OiBmaXJtd2FyZSBldmVudAorICoKKyAqIFRoZSBiaXRtYXNrIGluIGlvYy0+ZXZlbnRfdHlwZVtdIGluZGljYXRlcyB3aGljaCBldmVudHMgc2hvdWxkIGJlCisgKiBiZSBzYXZlZCBpbiB0aGUgZHJpdmVyIGV2ZW50X2xvZy4gIFRoaXMgYml0bWFzayBpcyBzZXQgYnkgYXBwbGljYXRpb24uCisgKgorICogUmV0dXJucyAxIHdoZW4gZXZlbnQgc2hvdWxkIGJlIGNhcHR1cmVkLCBvciB6ZXJvIG1lYW5zIG5vIG1hdGNoLgorICovCitzdGF0aWMgaW50CitfY3RsX2NoZWNrX2V2ZW50X3R5cGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgZXZlbnQpCit7CisJdTE2IGk7CisJdTMyIGRlc2lyZWRfZXZlbnQ7CisKKwlpZiAoZXZlbnQgPj0gMTI4IHx8ICFldmVudCB8fCAhaW9jLT5ldmVudF9sb2cpCisJCXJldHVybiAwOworCisJZGVzaXJlZF9ldmVudCA9ICgxIDw8IChldmVudCAlIDMyKSk7CisJaWYgKCFkZXNpcmVkX2V2ZW50KQorCQlkZXNpcmVkX2V2ZW50ID0gMTsKKwlpID0gZXZlbnQgLyAzMjsKKwlyZXR1cm4gZGVzaXJlZF9ldmVudCAmIGlvYy0+ZXZlbnRfdHlwZVtpXTsKK30KKworLyoqCisgKiBtcHQyc2FzX2N0bF9hZGRfdG9fZXZlbnRfbG9nIC0gYWRkIGV2ZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5KQoreworCXN0cnVjdCBNUFQyX0lPQ1RMX0VWRU5UUyAqZXZlbnRfbG9nOworCXUxNiBldmVudDsKKwlpbnQgaTsKKwl1MzIgc3osIGV2ZW50X2RhdGFfc3o7CisJdTggc2VuZF9hZW4gPSAwOworCisJaWYgKCFpb2MtPmV2ZW50X2xvZykKKwkJcmV0dXJuOworCisJZXZlbnQgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV2ZW50KTsKKworCWlmIChfY3RsX2NoZWNrX2V2ZW50X3R5cGUoaW9jLCBldmVudCkpIHsKKworCQkvKiBpbnNlcnQgZW50cnkgaW50byBjaXJjdWxhciBldmVudF9sb2cgKi8KKwkJaSA9IGlvYy0+ZXZlbnRfY29udGV4dCAlIE1QVDJTQVNfQ1RMX0VWRU5UX0xPR19TSVpFOworCQlldmVudF9sb2cgPSBpb2MtPmV2ZW50X2xvZzsKKwkJZXZlbnRfbG9nW2ldLmV2ZW50ID0gZXZlbnQ7CisJCWV2ZW50X2xvZ1tpXS5jb250ZXh0ID0gaW9jLT5ldmVudF9jb250ZXh0Kys7CisKKwkJZXZlbnRfZGF0YV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKSo0OworCQlzeiA9IG1pbl90KHUzMiwgZXZlbnRfZGF0YV9zeiwgTVBUMl9FVkVOVF9EQVRBX1NJWkUpOworCQltZW1zZXQoZXZlbnRfbG9nW2ldLmRhdGEsIDAsIE1QVDJfRVZFTlRfREFUQV9TSVpFKTsKKwkJbWVtY3B5KGV2ZW50X2xvZ1tpXS5kYXRhLCBtcGlfcmVwbHktPkV2ZW50RGF0YSwgc3opOworCQlzZW5kX2FlbiA9IDE7CisJfQorCisJLyogVGhpcyBhZW5fZXZlbnRfcmVhZF9mbGFnIGZsYWcgaXMgc2V0IHVudGlsIHRoZQorCSAqIGFwcGxpY2F0aW9uIGhhcyByZWFkIHRoZSBldmVudCBsb2cuCisJICogRm9yIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVELCB3ZSBhbHdheXMgbm90aWZ5LgorCSAqLworCWlmIChldmVudCA9PSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCB8fAorCSAgICAoc2VuZF9hZW4gJiYgIWlvYy0+YWVuX2V2ZW50X3JlYWRfZmxhZykpIHsKKwkJaW9jLT5hZW5fZXZlbnRfcmVhZF9mbGFnID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdGxfcG9sbF93YWl0KTsKKwkJaWYgKGFzeW5jX3F1ZXVlKQorCQkJa2lsbF9mYXN5bmMoJmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CisJfQorfQorCisvKioKKyAqIG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrIC0gZmlybXdhcmUgZXZlbnQgaGFuZGxlciAoY2FsbGVkIGF0IElTUiB0aW1lKQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogaW50ZXJydXB0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWVyZWx5IGFkZHMgYSBuZXcgd29yayB0YXNrIGludG8gaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQuCisgKiBUaGUgdGFza3MgYXJlIHdvcmtlZCBmcm9tIF9maXJtd2FyZV9ldmVudF93b3JrIGluIHVzZXIgY29udGV4dC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQoreworCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseTsKKworCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCW1wdDJzYXNfY3RsX2FkZF90b19ldmVudF9sb2coaW9jLCBtcGlfcmVwbHkpOworfQorCisvKioKKyAqIF9jdGxfdmVyaWZ5X2FkYXB0ZXIgLSB2YWxpZGF0ZXMgaW9jX251bWJlciBwYXNzZWQgZnJvbSBhcHBsaWNhdGlvbgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaW9jcHA6IFRoZSBpb2MgcG9pbnRlciBpcyByZXR1cm5lZCBpbiB0aGlzLgorICoKKyAqIFJldHVybiAoLTEpIG1lYW5zIGVycm9yLCBlbHNlIGlvY19udW1iZXIuCisgKi8KK3N0YXRpYyBpbnQKK19jdGxfdmVyaWZ5X2FkYXB0ZXIoaW50IGlvY19udW1iZXIsIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKippb2NwcCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvYywgJm1wdDJzYXNfaW9jX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlvYy0+aWQgIT0gaW9jX251bWJlcikKKwkJCWNvbnRpbnVlOworCQkqaW9jcHAgPSBpb2M7CisJCXJldHVybiBpb2NfbnVtYmVyOworCX0KKwkqaW9jcHAgPSBOVUxMOworCXJldHVybiAtMTsKK30KKworLyoqCisgKiBtcHQyc2FzX2N0bF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgY2FsbGJhY2sgaGFuZGxlciAoZm9yIGN0bCkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJlc2V0X3BoYXNlOiBwaGFzZQorICoKKyAqIFRoZSBoYW5kbGVyIGZvciBkb2luZyBhbnkgcmVxdWlyZWQgY2xlYW51cCBvciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBUaGUgcmVzZXQgcGhhc2UgY2FuIGJlIE1QVDJfSU9DX1BSRV9SRVNFVCwgTVBUMl9JT0NfQUZURVJfUkVTRVQsCisgKiBNUFQyX0lPQ19ET05FX1JFU0VUCisgKi8KK3ZvaWQKK21wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCit7CisJc3dpdGNoIChyZXNldF9waGFzZSkgeworCWNhc2UgTVBUMl9JT0NfUFJFX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfUFJFX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCWJyZWFrOworCWNhc2UgTVBUMl9JT0NfQUZURVJfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19BRlRFUl9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CisJCQlpb2MtPmN0bF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVNFVDsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBpb2MtPmN0bF9jbWRzLnNtaWQpOworCQkJY29tcGxldGUoJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNUFQyX0lPQ19ET05FX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogX2N0bF9mYXN5bmMgLQorICogQGZkIC0KKyAqIEBmaWxlcCAtCisgKiBAbW9kZSAtCisgKgorICogQ2FsbGVkIHdoZW4gYXBwbGljYXRpb24gcmVxdWVzdCBmYXN5biBjYWxsYmFjayBoYW5kbGVyLgorICovCitzdGF0aWMgaW50CitfY3RsX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IG1vZGUpCit7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGVwLCBtb2RlLCAmYXN5bmNfcXVldWUpOworfQorCisvKioKKyAqIF9jdGxfcmVsZWFzZSAtCisgKiBAaW5vZGUgLQorICogQGZpbGVwIC0KKyAqCisgKiBDYWxsZWQgd2hlbiBhcHBsaWNhdGlvbiByZWxlYXNlcyB0aGUgZmFzeW4gY2FsbGJhY2sgaGFuZGxlci4KKyAqLworc3RhdGljIGludAorX2N0bF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcigtMSwgZmlsZXAsIDAsICZhc3luY19xdWV1ZSk7Cit9CisKKy8qKgorICogX2N0bF9wb2xsIC0KKyAqIEBmaWxlIC0KKyAqIEB3YWl0IC0KKyAqCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK19jdGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCisJcG9sbF93YWl0KGZpbGVwLCAmY3RsX3BvbGxfd2FpdCwgd2FpdCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvYywgJm1wdDJzYXNfaW9jX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlvYy0+YWVuX2V2ZW50X3JlYWRfZmxhZykKKwkJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2RvX3Rhc2tfYWJvcnQgLSBhc3NpZ24gYW4gYWN0aXZlIHNtaWQgdG8gdGhlIGFib3J0X3Rhc2sKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGthcmcgLSAoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCkKKyAqIEB0bV9yZXF1ZXN0IC0gcG9pbnRlciB0byBtZiBmcm9tIHVzZXIgc3BhY2UKKyAqCisgKiBSZXR1cm5zIDAgd2hlbiBhbiBzbWlkIGlmIGZvdW5kLCBlbHNlIGZhaWwuCisgKiBkdXJpbmcgZmFpbHVyZSwgdGhlIHJlcGx5IGZyYW1lIGlzIGZpbGxlZC4KKyAqLworc3RhdGljIGludAorX2N0bF9kb190YXNrX2Fib3J0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCAqa2FyZywKKyAgICBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICp0bV9yZXF1ZXN0KQoreworCXU4IGZvdW5kID0gMDsKKwl1MTYgaTsKKwl1MTYgaGFuZGxlOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpwcml2X2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqdG1fcmVwbHk7CisJdTMyIHN6OworCXUzMiBsdW47CisKKwlsdW4gPSBzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopdG1fcmVxdWVzdC0+TFVOKTsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHRtX3JlcXVlc3QtPkRldkhhbmRsZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSAmJiAhZm91bmQ7IGktLSkgeworCQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtpIC0gMV0uc2NtZDsKKwkJaWYgKHNjbWQgPT0gTlVMTCB8fCBzY21kLT5kZXZpY2UgPT0gTlVMTCB8fAorCQkgICAgc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChsdW4gIT0gc2NtZC0+ZGV2aWNlLT5sdW4pCisJCQljb250aW51ZTsKKwkJcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJaWYgKHByaXZfZGF0YS0+c2FzX3RhcmdldCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChwcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSAhPSBoYW5kbGUpCisJCQljb250aW51ZTsKKwkJdG1fcmVxdWVzdC0+VGFza01JRCA9IGNwdV90b19sZTE2KGlvYy0+c2NzaV9sb29rdXBbaSAtIDFdLnNtaWQpOworCQlmb3VuZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCisJaWYgKCFmb3VuZCkgeworCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJBQk9SVF9UQVNLOiAiCisJCSAgICAiRGV2SGFuZGxlKDB4JTA0eCksIGx1biglZCksIG5vIGFjdGl2ZSBtaWQhIVxuIiwgaW9jLT5uYW1lLAorCQkgICAgdG1fcmVxdWVzdC0+RGV2SGFuZGxlLCBsdW4pKTsKKwkJdG1fcmVwbHkgPSBpb2MtPmN0bF9jbWRzLnJlcGx5OworCQl0bV9yZXBseS0+RGV2SGFuZGxlID0gdG1fcmVxdWVzdC0+RGV2SGFuZGxlOworCQl0bV9yZXBseS0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOworCQl0bV9yZXBseS0+VGFza1R5cGUgPSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLOworCQl0bV9yZXBseS0+TXNnTGVuZ3RoID0gc2l6ZW9mKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90KS80OworCQl0bV9yZXBseS0+VlBfSUQgPSB0bV9yZXF1ZXN0LT5WUF9JRDsKKwkJdG1fcmVwbHktPlZGX0lEID0gdG1fcmVxdWVzdC0+VkZfSUQ7CisJCXN6ID0gbWluX3QodTMyLCBrYXJnLT5tYXhfcmVwbHlfYnl0ZXMsIGlvYy0+cmVwbHlfc3opOworCQlpZiAoY29weV90b191c2VyKGthcmctPnJlcGx5X2ZyYW1lX2J1Zl9wdHIsIGlvYy0+Y3RsX2NtZHMucmVwbHksCisJCSAgICBzeikpCisJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAxOworCX0KKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIkFCT1JUX1RBU0s6ICIKKwkgICAgIkRldkhhbmRsZSgweCUwNHgpLCBsdW4oJWQpLCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLAorCSAgICB0bV9yZXF1ZXN0LT5EZXZIYW5kbGUsIGx1biwgdG1fcmVxdWVzdC0+VGFza01JRCkpOworCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZG9fbXB0X2NvbW1hbmQgLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJDT01NQU5EIG9wY29kZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAa2FyZyAtIChzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kKQorICogQG1mIC0gcG9pbnRlciB0byBtZiBpbiB1c2VyIHNwYWNlCisgKiBAc3RhdGUgLSBOT05fQkxPQ0tJTkcgb3IgQkxPQ0tJTkcKKyAqLworc3RhdGljIGxvbmcKK19jdGxfZG9fbXB0X2NvbW1hbmQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQga2FyZywgdm9pZCBfX3VzZXIgKm1mLCBlbnVtIGJsb2NrX3N0YXRlIHN0YXRlKQoreworCU1QSTJSZXF1ZXN0SGVhZGVyX3QgKm1waV9yZXF1ZXN0OworCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCXUzMiBpb2Nfc3RhdGU7CisJdTE2IGlvY19zdGF0dXM7CisJdTE2IHNtaWQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB0aW1lbGVmdDsKKwl1OCBpc3N1ZV9yZXNldDsKKwl1MzIgc3o7CisJdm9pZCAqcHNnZTsKKwl2b2lkICpwcml2X3NlbnNlID0gTlVMTDsKKwl2b2lkICpkYXRhX291dCA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX291dF9kbWE7CisJc2l6ZV90IGRhdGFfb3V0X3N6ID0gMDsKKwl2b2lkICpkYXRhX2luID0gTlVMTDsKKwlkbWFfYWRkcl90IGRhdGFfaW5fZG1hOworCXNpemVfdCBkYXRhX2luX3N6ID0gMDsKKwl1MzIgc2dsX2ZsYWdzOworCWxvbmcgcmV0OworCXUxNiB3YWl0X3N0YXRlX2NvdW50OworCisJaXNzdWVfcmVzZXQgPSAwOworCisJaWYgKHN0YXRlID09IE5PTl9CTE9DS0lORyAmJiAhbXV0ZXhfdHJ5bG9jaygmaW9jLT5jdGxfY21kcy5tdXRleCkpCisJCXJldHVybiAtRUFHQUlOOworCWVsc2UgaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW9jLT5jdGxfY21kcy5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGN0bF9jbWQgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXdhaXRfc3RhdGVfY291bnQgPSAwOworCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwl3aGlsZSAoaW9jX3N0YXRlICE9IE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCWlmICh3YWl0X3N0YXRlX2NvdW50KysgPT0gMTApIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQKKwkJCSAgICAiJXM6IGZhaWxlZCBkdWUgdG8gaW9jIG5vdCBvcGVyYXRpb25hbFxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzc2xlZXAoMSk7CisJCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB3YWl0aW5nIGZvciAiCisJCSAgICAib3BlcmF0aW9uYWwgc3RhdGUoY291bnQ9JWQpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgd2FpdF9zdGF0ZV9jb3VudCk7CisJfQorCWlmICh3YWl0X3N0YXRlX2NvdW50KQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGlvYyBpcyBvcGVyYXRpb25hbFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+Y3RsX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSAwOworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwltZW1zZXQoaW9jLT5jdGxfY21kcy5yZXBseSwgMCwgaW9jLT5yZXBseV9zeik7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+Y3RsX2NtZHMuc21pZCA9IHNtaWQ7CisJZGF0YV9vdXRfc3ogPSBrYXJnLmRhdGFfb3V0X3NpemU7CisJZGF0YV9pbl9zeiA9IGthcmcuZGF0YV9pbl9zaXplOworCisJLyogY29weSBpbiByZXF1ZXN0IG1lc3NhZ2UgZnJhbWUgZnJvbSB1c2VyICovCisJaWYgKGNvcHlfZnJvbV91c2VyKG1waV9yZXF1ZXN0LCBtZiwga2FyZy5kYXRhX3NnZV9vZmZzZXQqNCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICBfX2Z1bmNfXyk7CisJCXJldCA9IC1FRkFVTFQ7CisJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fAorCSAgICBtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpIHsKKwkJaWYgKCFtcGlfcmVxdWVzdC0+RnVuY3Rpb25EZXBlbmRlbnQxIHx8CisJCSAgICBtcGlfcmVxdWVzdC0+RnVuY3Rpb25EZXBlbmRlbnQxID4KKwkJICAgIGNwdV90b19sZTE2KGlvYy0+ZmFjdHMuTWF4RGV2SGFuZGxlKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogb2J0YWluIGRtYS1hYmxlIG1lbW9yeSBmb3IgZGF0YSB0cmFuc2ZlciAqLworCWlmIChkYXRhX291dF9zeikgLyogV1JJVEUgKi8geworCQlkYXRhX291dCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgZGF0YV9vdXRfc3osCisJCSAgICAmZGF0YV9vdXRfZG1hKTsKKwkJaWYgKCFkYXRhX291dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywKKwkJCSAgICBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhX291dCwga2FyZy5kYXRhX291dF9idWZfcHRyLAorCQkJZGF0YV9vdXRfc3opKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAgLUVGQVVMVDsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGRhdGFfaW5fc3opIC8qIFJFQUQgKi8geworCQlkYXRhX2luID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBkYXRhX2luX3N6LAorCQkgICAgJmRhdGFfaW5fZG1hKTsKKwkJaWYgKCFkYXRhX2luKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBhZGQgc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgKi8KKwlwc2dlID0gKHZvaWQgKiltcGlfcmVxdWVzdCArIChrYXJnLmRhdGFfc2dlX29mZnNldCo0KTsKKworCWlmICghZGF0YV9vdXRfc3ogJiYgIWRhdGFfaW5fc3opIHsKKwkJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsIHBzZ2UpOworCX0gZWxzZSBpZiAoZGF0YV9vdXRfc3ogJiYgZGF0YV9pbl9zeikgeworCQkvKiBXUklURSBzZ2VsIGZpcnN0ICovCisJCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwgTVBJMl9TR0VfRkxBR1NfSE9TVF9UT19JT0MpOworCQlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHBzZ2UsIHNnbF9mbGFncyB8CisJCSAgICBkYXRhX291dF9zeiwgZGF0YV9vdXRfZG1hKTsKKworCQkvKiBpbmNyIHNnZWwgKi8KKwkJcHNnZSArPSBpb2MtPnNnZV9zaXplOworCisJCS8qIFJFQUQgc2dlbCBsYXN0ICovCisJCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCSAgICBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwKKwkJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUKTsKKwkJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwc2dlLCBzZ2xfZmxhZ3MgfAorCQkgICAgZGF0YV9pbl9zeiwgZGF0YV9pbl9kbWEpOworCX0gZWxzZSBpZiAoZGF0YV9vdXRfc3opIC8qIFdSSVRFICovIHsKKwkJc2dsX2ZsYWdzID0gKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkJICAgIE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgfAorCQkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0xJU1QgfCBNUEkyX1NHRV9GTEFHU19IT1NUX1RPX0lPQyk7CisJCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwKKwkJICAgIGRhdGFfb3V0X3N6LCBkYXRhX291dF9kbWEpOworCX0gZWxzZSBpZiAoZGF0YV9pbl9zeikgLyogUkVBRCAqLyB7CisJCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCSAgICBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwKKwkJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUKTsKKwkJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwc2dlLCBzZ2xfZmxhZ3MgfAorCQkgICAgZGF0YV9pbl9zeiwgZGF0YV9pbl9kbWEpOworCX0KKworCS8qIHNlbmQgY29tbWFuZCB0byBmaXJtd2FyZSAqLworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCV9jdGxfZGlzcGxheV9zb21lX2RlYnVnKGlvYywgc21pZCwgImN0bF9yZXF1ZXN0IiwgTlVMTCk7CisjZW5kaWYKKworCXN3aXRjaCAobXBpX3JlcXVlc3QtPkZ1bmN0aW9uKSB7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVDoKKwljYXNlIE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIOgorCXsKKwkJTXBpMlNDU0lJT1JlcXVlc3RfdCAqc2NzaWlvX3JlcXVlc3QgPQorCQkgICAgKE1waTJTQ1NJSU9SZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKwkJc2NzaWlvX3JlcXVlc3QtPlNlbnNlQnVmZmVyTG93QWRkcmVzcyA9CisJCSAgICAodTMyKW1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShpb2MsIHNtaWQpOworCQlwcml2X3NlbnNlID0gbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoaW9jLCBzbWlkKTsKKwkJbWVtc2V0KHByaXZfc2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwgMCwKKwkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXF1ZXN0LT5GdW5jdGlvbkRlcGVuZGVudDEpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVDoKKwl7CisJCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKnRtX3JlcXVlc3QgPQorCQkgICAgKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKworCQlpZiAodG1fcmVxdWVzdC0+VGFza1R5cGUgPT0KKwkJICAgIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCT1JUX1RBU0spIHsKKwkJCWlmIChfY3RsX2RvX3Rhc2tfYWJvcnQoaW9jLCAma2FyZywgdG1fcmVxdWVzdCkpCisJCQkJZ290byBvdXQ7CisJCX0KKworCQltdXRleF9sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCQltcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKGlvYywgbGUxNl90b19jcHUoCisJCSAgICB0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCwKKwkJICAgIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOgorCXsKKwkJTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICpzbXBfcmVxdWVzdCA9CisJCSAgICAoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICopbXBpX3JlcXVlc3Q7CisJCXU4ICpkYXRhOworCisJCS8qIGlvYyBkZXRlcm1pbmVzIHdoaWNoIHBvcnQgdG8gdXNlICovCisJCXNtcF9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCQlpZiAoc21wX3JlcXVlc3QtPlBhc3N0aHJvdWdoRmxhZ3MgJgorCQkgICAgTVBJMl9TTVBfUFRfUkVRX1BUX0ZMQUdTX0lNTUVESUFURSkKKwkJCWRhdGEgPSAodTggKikmc21wX3JlcXVlc3QtPlNHTDsKKwkJZWxzZQorCQkJZGF0YSA9IGRhdGFfb3V0OworCisJCWlmIChkYXRhWzFdID09IDB4OTEgJiYgKGRhdGFbMTBdID09IDEgfHwgZGF0YVsxMF0gPT0gMikpIHsKKwkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOworCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOworCQl9CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOgorCXsKKwkJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgKnNhc2lvdW5pdF9yZXF1ZXN0ID0KKwkJICAgIChNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCAqKW1waV9yZXF1ZXN0OworCisJCWlmIChzYXNpb3VuaXRfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUCisJCSAgICB8fCBzYXNpb3VuaXRfcmVxdWVzdC0+T3BlcmF0aW9uID09CisJCSAgICBNUEkyX1NBU19PUF9QSFlfTElOS19SRVNFVCkgeworCQkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CisJCQlpb2MtPmlnbm9yZV9sb2dpbmZvcyA9IDE7CisJCX0KKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQlicmVhazsKKwl9CisKKwlpZiAoa2FyZy50aW1lb3V0IDwgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQpCisJCXRpbWVvdXQgPSBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVDsKKwllbHNlCisJCXRpbWVvdXQgPSBrYXJnLnRpbWVvdXQ7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKKwkgICAgdGltZW91dCpIWik7CisJaWYgKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UKSB7CisJCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKnRtX3JlcXVlc3QgPQorCQkgICAgKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKwkJbXV0ZXhfdW5sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCQltcHQyc2FzX3Njc2loX2NsZWFyX3RtX2ZsYWcoaW9jLCBsZTE2X3RvX2NwdSgKKwkJICAgIHRtX3JlcXVlc3QtPkRldkhhbmRsZSkpOworCX0gZWxzZSBpZiAoKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSCB8fAorCSAgICBtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MKSAmJgorCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCQlpb2MtPmlnbm9yZV9sb2dpbmZvcyA9IDA7CisJfQorCWlmICghKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXyk7CisJCV9kZWJ1Z19kdW1wX21mKG1waV9yZXF1ZXN0LCBrYXJnLmRhdGFfc2dlX29mZnNldCk7CisJCWlmICghKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQorCQkJaXNzdWVfcmVzZXQgPSAxOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCisJbXBpX3JlcGx5ID0gaW9jLT5jdGxfY21kcy5yZXBseTsKKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpICYgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCWlmIChtcGlfcmVwbHktPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQgJiYKKwkgICAgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UTSkpIHsKKwkJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKnRtX3JlcGx5ID0KKwkJICAgIChNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqKW1waV9yZXBseTsKKworCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIlRBU0tfTUdNVDogIgorCQkgICAgIklPQ1N0YXR1cygweCUwNHgpLCBJT0NMb2dJbmZvKDB4JTA4eCksICIKKwkJICAgICJUZXJtaW5hdGlvbkNvdW50KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwKKwkJICAgIHRtX3JlcGx5LT5JT0NTdGF0dXMsIHRtX3JlcGx5LT5JT0NMb2dJbmZvLAorCQkgICAgdG1fcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpOworCX0KKyNlbmRpZgorCS8qIGNvcHkgb3V0IHhkYXRhIHRvIHVzZXIgKi8KKwlpZiAoZGF0YV9pbl9zeikgeworCQlpZiAoY29weV90b191c2VyKGthcmcuZGF0YV9pbl9idWZfcHRyLCBkYXRhX2luLAorCQkgICAgZGF0YV9pbl9zeikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sCisJCQkgICAgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FTk9EQVRBOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBjb3B5IG91dCByZXBseSBtZXNzYWdlIGZyYW1lIHRvIHVzZXIgKi8KKwlpZiAoa2FyZy5tYXhfcmVwbHlfYnl0ZXMpIHsKKwkJc3ogPSBtaW5fdCh1MzIsIGthcmcubWF4X3JlcGx5X2J5dGVzLCBpb2MtPnJlcGx5X3N6KTsKKwkJaWYgKGNvcHlfdG9fdXNlcihrYXJnLnJlcGx5X2ZyYW1lX2J1Zl9wdHIsIGlvYy0+Y3RsX2NtZHMucmVwbHksCisJCSAgICBzeikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sCisJCQkgICAgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FTk9EQVRBOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBjb3B5IG91dCBzZW5zZSB0byB1c2VyICovCisJaWYgKGthcmcubWF4X3NlbnNlX2J5dGVzICYmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0KKwkgICAgTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09CisJICAgIE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSkgeworCQlzeiA9IG1pbl90KHUzMiwga2FyZy5tYXhfc2Vuc2VfYnl0ZXMsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJCWlmIChjb3B5X3RvX3VzZXIoa2FyZy5zZW5zZV9kYXRhX3B0ciwgcHJpdl9zZW5zZSwgc3opKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRU5PREFUQTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpIHsKKwkJaWYgKChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwKKwkJICAgIG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PQorCQkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpKSB7CisJCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaXNzdWUgdGFyZ2V0IHJlc2V0OiBoYW5kbGUgIgorCQkJICAgICI9ICgweCUwNHgpXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSk7CisJCQltdXRleF9sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCQkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsCisJCQkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSwgMCwKKwkJCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQsIDAsIDEwKTsKKwkJCWlvYy0+dG1fY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwkJCW11dGV4X3VubG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKwkJfSBlbHNlCisJCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkJICAgIEZPUkNFX0JJR19IQU1NRVIpOworCX0KKworIG91dDoKKworCS8qIGZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBzZyBidWZmZXJzICovCisJaWYgKGRhdGFfaW4pCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBkYXRhX2luX3N6LCBkYXRhX2luLAorCQkgICAgZGF0YV9pbl9kbWEpOworCisJaWYgKGRhdGFfb3V0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgZGF0YV9vdXRfc3osIGRhdGFfb3V0LAorCQkgICAgZGF0YV9vdXRfZG1hKTsKKworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIF9jdGxfZ2V0aW9jaW5mbyAtIG1haW4gaGFuZGxlciBmb3IgTVBUMklPQ0lORk8gb3Bjb2RlCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2dldGlvY2luZm8odm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9pb2NpbmZvIGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCXU4IHJldmlzaW9uOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJbWVtc2V0KCZrYXJnLCAwICwgc2l6ZW9mKGthcmcpKTsKKwlrYXJnLmFkYXB0ZXJfdHlwZSA9IE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUzI7CisJaWYgKGlvYy0+cGZhY3RzKQorCQlrYXJnLnBvcnRfbnVtYmVyID0gaW9jLT5wZmFjdHNbMF0uUG9ydE51bWJlcjsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShpb2MtPnBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldmlzaW9uKTsKKwlrYXJnLmh3X3JldiA9IHJldmlzaW9uOworCWthcmcucGNpX2lkID0gaW9jLT5wZGV2LT5kZXZpY2U7CisJa2FyZy5zdWJzeXN0ZW1fZGV2aWNlID0gaW9jLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCWthcmcuc3Vic3lzdGVtX3ZlbmRvciA9IGlvYy0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlrYXJnLnBjaV9pbmZvcm1hdGlvbi51LmJpdHMuYnVzID0gaW9jLT5wZGV2LT5idXMtPm51bWJlcjsKKwlrYXJnLnBjaV9pbmZvcm1hdGlvbi51LmJpdHMuZGV2aWNlID0gUENJX1NMT1QoaW9jLT5wZGV2LT5kZXZmbik7CisJa2FyZy5wY2lfaW5mb3JtYXRpb24udS5iaXRzLmZ1bmN0aW9uID0gUENJX0ZVTkMoaW9jLT5wZGV2LT5kZXZmbik7CisJa2FyZy5wY2lfaW5mb3JtYXRpb24uc2VnbWVudF9pZCA9IHBjaV9kb21haW5fbnIoaW9jLT5wZGV2LT5idXMpOworCWthcmcuZmlybXdhcmVfdmVyc2lvbiA9IGlvYy0+ZmFjdHMuRldWZXJzaW9uLldvcmQ7CisJc3RybmNweShrYXJnLmRyaXZlcl92ZXJzaW9uLCBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OLAorCSAgICBNUFQyX0lPQ1RMX1ZFUlNJT05fTEVOR1RIKTsKKwlrYXJnLmRyaXZlcl92ZXJzaW9uW01QVDJfSU9DVExfVkVSU0lPTl9MRU5HVEggLSAxXSA9ICdcMCc7CisJa2FyZy5iaW9zX3ZlcnNpb24gPSBsZTMyX3RvX2NwdShpb2MtPmJpb3NfcGczLkJpb3NWZXJzaW9uKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAma2FyZywgc2l6ZW9mKGthcmcpKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZXZlbnRxdWVyeSAtIG1haW4gaGFuZGxlciBmb3IgTVBUMkVWRU5UUVVFUlkgb3Bjb2RlCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2V2ZW50cXVlcnkodm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHF1ZXJ5IGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJa2FyZy5ldmVudF9lbnRyaWVzID0gTVBUMlNBU19DVExfRVZFTlRfTE9HX1NJWkU7CisJbWVtY3B5KGthcmcuZXZlbnRfdHlwZXMsIGlvYy0+ZXZlbnRfdHlwZSwKKwkgICAgTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTICogc2l6ZW9mKHUzMikpOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZrYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2N0bF9ldmVudGVuYWJsZSAtIG1haW4gaGFuZGxlciBmb3IgTVBUMkVWRU5URU5BQkxFIG9wY29kZQorICogQGFyZyAtIHVzZXIgc3BhY2UgYnVmZmVyIGNvbnRhaW5pbmcgaW9jdGwgY29udGVudAorICovCitzdGF0aWMgbG9uZworX2N0bF9ldmVudGVuYWJsZSh2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50ZW5hYmxlIGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJaWYgKGlvYy0+ZXZlbnRfbG9nKQorCQlyZXR1cm4gMDsKKwltZW1jcHkoaW9jLT5ldmVudF90eXBlLCBrYXJnLmV2ZW50X3R5cGVzLAorCSAgICBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFMgKiBzaXplb2YodTMyKSk7CisJbXB0MnNhc19iYXNlX3ZhbGlkYXRlX2V2ZW50X3R5cGUoaW9jLCBpb2MtPmV2ZW50X3R5cGUpOworCisJLyogaW5pdGlhbGl6ZSBldmVudF9sb2cgKi8KKwlpb2MtPmV2ZW50X2NvbnRleHQgPSAwOworCWlvYy0+YWVuX2V2ZW50X3JlYWRfZmxhZyA9IDA7CisJaW9jLT5ldmVudF9sb2cgPSBrY2FsbG9jKE1QVDJTQVNfQ1RMX0VWRU5UX0xPR19TSVpFLAorCSAgICBzaXplb2Yoc3RydWN0IE1QVDJfSU9DVExfRVZFTlRTKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPmV2ZW50X2xvZykgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZXZlbnRyZXBvcnQgLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJFVkVOVFJFUE9SVCBvcGNvZGUKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqLworc3RhdGljIGxvbmcKK19jdGxfZXZlbnRyZXBvcnQodm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHJlcG9ydCBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwl1MzIgbnVtYmVyX2J5dGVzLCBtYXhfZXZlbnRzLCBtYXg7CisJc3RydWN0IG1wdDJfaW9jdGxfZXZlbnRyZXBvcnQgX191c2VyICp1YXJnID0gYXJnOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJbnVtYmVyX2J5dGVzID0ga2FyZy5oZHIubWF4X2RhdGFfc2l6ZSAtCisJICAgIHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIpOworCW1heF9ldmVudHMgPSBudW1iZXJfYnl0ZXMvc2l6ZW9mKHN0cnVjdCBNUFQyX0lPQ1RMX0VWRU5UUyk7CisJbWF4ID0gbWluX3QodTMyLCBNUFQyU0FTX0NUTF9FVkVOVF9MT0dfU0laRSwgbWF4X2V2ZW50cyk7CisKKwkvKiBJZiBmZXdlciB0aGFuIDEgZXZlbnQgaXMgcmVxdWVzdGVkLCB0aGVyZSBtdXN0IGhhdmUKKwkgKiBiZWVuIHNvbWUgdHlwZSBvZiBlcnJvci4KKwkgKi8KKwlpZiAoIW1heCB8fCAhaW9jLT5ldmVudF9sb2cpCisJCXJldHVybiAtRU5PREFUQTsKKworCW51bWJlcl9ieXRlcyA9IG1heCAqIHNpemVvZihzdHJ1Y3QgTVBUMl9JT0NUTF9FVkVOVFMpOworCWlmIChjb3B5X3RvX3VzZXIodWFyZy0+ZXZlbnRfZGF0YSwgaW9jLT5ldmVudF9sb2csIG51bWJlcl9ieXRlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIHJlc2V0IGZsYWcgc28gU0lHSU8gY2FuIHJlc3RhcnQgKi8KKwlpb2MtPmFlbl9ldmVudF9yZWFkX2ZsYWcgPSAwOworCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZG9fcmVzZXQgLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJIQVJEUkVTRVQgb3Bjb2RlCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2RvX3Jlc2V0KHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfaW9jdGxfZGlhZ19yZXNldCBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwlpbnQgcmV0dmFsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJcmV0dmFsID0gbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKKwkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImhvc3QgcmVzZXQ6ICVzXG4iLAorCSAgICBpb2MtPm5hbWUsICgoIXJldHZhbCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIikpOworCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfYnRkaF9zZWFyY2hfc2FzX2RldmljZSAtIHNlYXJjaGluZyBmb3Igc2FzIGRldmljZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAYnRkaDogYnRkaCBpb2N0bCBwYXlsb2FkCisgKi8KK3N0YXRpYyBpbnQKK19jdGxfYnRkaF9zZWFyY2hfc2FzX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IG1wdDJfaW9jdGxfYnRkaF9tYXBwaW5nICpidGRoKQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5zYXNfZGV2aWNlX2xpc3QpKQorCQlyZXR1cm4gcmM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhc19kZXZpY2UsICZpb2MtPnNhc19kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoYnRkaC0+YnVzID09IDB4RkZGRkZGRkYgJiYgYnRkaC0+aWQgPT0gMHhGRkZGRkZGRiAmJgorCQkgICAgYnRkaC0+aGFuZGxlID09IHNhc19kZXZpY2UtPmhhbmRsZSkgeworCQkJYnRkaC0+YnVzID0gc2FzX2RldmljZS0+Y2hhbm5lbDsKKwkJCWJ0ZGgtPmlkID0gc2FzX2RldmljZS0+aWQ7CisJCQlyYyA9IDE7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChidGRoLT5idXMgPT0gc2FzX2RldmljZS0+Y2hhbm5lbCAmJiBidGRoLT5pZCA9PQorCQkgICAgc2FzX2RldmljZS0+aWQgJiYgYnRkaC0+aGFuZGxlID09IDB4RkZGRikgeworCQkJYnRkaC0+aGFuZGxlID0gc2FzX2RldmljZS0+aGFuZGxlOworCQkJcmMgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9jdGxfYnRkaF9zZWFyY2hfcmFpZF9kZXZpY2UgLSBzZWFyY2hpbmcgZm9yIHJhaWQgZGV2aWNlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBidGRoOiBidGRoIGlvY3RsIHBheWxvYWQKKyAqLworc3RhdGljIGludAorX2N0bF9idGRoX3NlYXJjaF9yYWlkX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IG1wdDJfaW9jdGxfYnRkaF9tYXBwaW5nICpidGRoKQoreworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCWlmIChsaXN0X2VtcHR5KCZpb2MtPnJhaWRfZGV2aWNlX2xpc3QpKQorCQlyZXR1cm4gcmM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyYWlkX2RldmljZSwgJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoYnRkaC0+YnVzID09IDB4RkZGRkZGRkYgJiYgYnRkaC0+aWQgPT0gMHhGRkZGRkZGRiAmJgorCQkgICAgYnRkaC0+aGFuZGxlID09IHJhaWRfZGV2aWNlLT5oYW5kbGUpIHsKKwkJCWJ0ZGgtPmJ1cyA9IHJhaWRfZGV2aWNlLT5jaGFubmVsOworCQkJYnRkaC0+aWQgPSByYWlkX2RldmljZS0+aWQ7CisJCQlyYyA9IDE7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChidGRoLT5idXMgPT0gcmFpZF9kZXZpY2UtPmNoYW5uZWwgJiYgYnRkaC0+aWQgPT0KKwkJICAgIHJhaWRfZGV2aWNlLT5pZCAmJiBidGRoLT5oYW5kbGUgPT0gMHhGRkZGKSB7CisJCQlidGRoLT5oYW5kbGUgPSByYWlkX2RldmljZS0+aGFuZGxlOworCQkJcmMgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfY3RsX2J0ZGhfbWFwcGluZyAtIG1haW4gaGFuZGxlciBmb3IgTVBUMkJUREhNQVBQSU5HIG9wY29kZQorICogQGFyZyAtIHVzZXIgc3BhY2UgYnVmZmVyIGNvbnRhaW5pbmcgaW9jdGwgY29udGVudAorICovCitzdGF0aWMgbG9uZworX2N0bF9idGRoX21hcHBpbmcodm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9idGRoX21hcHBpbmcga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJaW50IHJjOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlyYyA9IF9jdGxfYnRkaF9zZWFyY2hfc2FzX2RldmljZShpb2MsICZrYXJnKTsKKwlpZiAoIXJjKQorCQlfY3RsX2J0ZGhfc2VhcmNoX3JhaWRfZGV2aWNlKGlvYywgJmthcmcpOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZrYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2N0bF9kaWFnX2NhcGFiaWxpdHkgLSByZXR1cm4gZGlhZyBidWZmZXIgY2FwYWJpbGl0eQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAYnVmZmVyX3R5cGU6IHNwZWNpZmllcyBlaXRoZXIgVFJBQ0Ugb3IgU05BUFNIT1QKKyAqCisgKiByZXR1cm5zIDEgd2hlbiBkaWFnIGJ1ZmZlciBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gZmlybXdhcmUKKyAqLworc3RhdGljIHU4CitfY3RsX2RpYWdfY2FwYWJpbGl0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGJ1ZmZlcl90eXBlKQoreworCXU4IHJjID0gMDsKKworCXN3aXRjaCAoYnVmZmVyX3R5cGUpIHsKKwljYXNlIE1QSTJfRElBR19CVUZfVFlQRV9UUkFDRToKKwkJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkJICAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9ESUFHX1RSQUNFX0JVRkZFUikKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0RJQUdfQlVGX1RZUEVfU05BUFNIT1Q6CisJCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfU05BUFNIT1RfQlVGRkVSKQorCQkJcmMgPSAxOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2N0bF9kaWFnX3JlZ2lzdGVyIC0gYXBwbGljYXRpb24gcmVnaXN0ZXIgd2l0aCBkcml2ZXIKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqIEBzdGF0ZSAtIE5PTl9CTE9DS0lORyBvciBCTE9DS0lORworICoKKyAqIFRoaXMgd2lsbCBhbGxvdyB0aGUgZHJpdmVyIHRvIHNldHVwIGFueSByZXF1aXJlZCBidWZmZXJzIHRoYXQgd2lsbCBiZQorICogbmVlZGVkIGJ5IGZpcm13YXJlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRyaXZlci4KKyAqLworc3RhdGljIGxvbmcKK19jdGxfZGlhZ19yZWdpc3Rlcih2b2lkIF9fdXNlciAqYXJnLCBlbnVtIGJsb2NrX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBtcHQyX2RpYWdfcmVnaXN0ZXIga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJaW50IHJjLCBpOworCXZvaWQgKnJlcXVlc3RfZGF0YSA9IE5VTEw7CisJZG1hX2FkZHJfdCByZXF1ZXN0X2RhdGFfZG1hOworCXUzMiByZXF1ZXN0X2RhdGFfc3ogPSAwOworCU1waTJEaWFnQnVmZmVyUG9zdFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJTXBpMkRpYWdCdWZmZXJQb3N0UmVwbHlfdCAqbXBpX3JlcGx5OworCXU4IGJ1ZmZlcl90eXBlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdTE2IHNtaWQ7CisJdTE2IGlvY19zdGF0dXM7CisJdTggaXNzdWVfcmVzZXQgPSAwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlidWZmZXJfdHlwZSA9IGthcmcuYnVmZmVyX3R5cGU7CisJaWYgKCFfY3RsX2RpYWdfY2FwYWJpbGl0eShpb2MsIGJ1ZmZlcl90eXBlKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG9lc24ndCBoYXZlIGNhcGFiaWxpdHkgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYWxyZWFkeSBoYXMgYSByZWdpc3RlcmVkICIKKwkJICAgICJidWZmZXIgZm9yIGJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJCSAgICBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChrYXJnLnJlcXVlc3RlZF9idWZmZXJfc2l6ZSAlIDQpICB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aGUgcmVxdWVzdGVkX2J1ZmZlcl9zaXplICIKKwkJICAgICJpcyBub3QgNCBieXRlIGFsaWduZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RhdGUgPT0gTk9OX0JMT0NLSU5HICYmICFtdXRleF90cnlsb2NrKCZpb2MtPmN0bF9jbWRzLm11dGV4KSkKKwkJcmV0dXJuIC1FQUdBSU47CisJZWxzZSBpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpb2MtPmN0bF9jbWRzLm11dGV4KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChpb2MtPmN0bF9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogY3RsX2NtZCBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5jdGxfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwltZW1zZXQoaW9jLT5jdGxfY21kcy5yZXBseSwgMCwgaW9jLT5yZXBseV9zeik7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+Y3RsX2NtZHMuc21pZCA9IHNtaWQ7CisKKwlyZXF1ZXN0X2RhdGEgPSBpb2MtPmRpYWdfYnVmZmVyW2J1ZmZlcl90eXBlXTsKKwlyZXF1ZXN0X2RhdGFfc3ogPSBrYXJnLnJlcXVlc3RlZF9idWZmZXJfc2l6ZTsKKwlpb2MtPnVuaXF1ZV9pZFtidWZmZXJfdHlwZV0gPSBrYXJnLnVuaXF1ZV9pZDsKKwlpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gPSAwOworCW1lbWNweShpb2MtPnByb2R1Y3Rfc3BlY2lmaWNbYnVmZmVyX3R5cGVdLCBrYXJnLnByb2R1Y3Rfc3BlY2lmaWMsCisJICAgIE1QVDJfUFJPRFVDVF9TUEVDSUZJQ19EV09SRFMpOworCWlvYy0+ZGlhZ25vc3RpY19mbGFnc1tidWZmZXJfdHlwZV0gPSBrYXJnLmRpYWdub3N0aWNfZmxhZ3M7CisKKwlpZiAocmVxdWVzdF9kYXRhKSB7CisJCXJlcXVlc3RfZGF0YV9kbWEgPSBpb2MtPmRpYWdfYnVmZmVyX2RtYVtidWZmZXJfdHlwZV07CisJCWlmIChyZXF1ZXN0X2RhdGFfc3ogIT0gaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV0pIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LAorCQkJICAgIGlvYy0+ZGlhZ19idWZmZXJfc3pbYnVmZmVyX3R5cGVdLAorCQkJICAgIHJlcXVlc3RfZGF0YSwgcmVxdWVzdF9kYXRhX2RtYSk7CisJCQlyZXF1ZXN0X2RhdGEgPSBOVUxMOworCQl9CisJfQorCisJaWYgKHJlcXVlc3RfZGF0YSA9PSBOVUxMKSB7CisJCWlvYy0+ZGlhZ19idWZmZXJfc3pbYnVmZmVyX3R5cGVdID0gMDsKKwkJaW9jLT5kaWFnX2J1ZmZlcl9kbWFbYnVmZmVyX3R5cGVdID0gMDsKKwkJcmVxdWVzdF9kYXRhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQlpb2MtPnBkZXYsIHJlcXVlc3RfZGF0YV9zeiwgJnJlcXVlc3RfZGF0YV9kbWEpOworCQlpZiAocmVxdWVzdF9kYXRhID09IE5VTEwpIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgYWxsb2NhdGluZyBtZW1vcnkiCisJCQkgICAgIiBmb3IgZGlhZyBidWZmZXJzLCByZXF1ZXN0ZWQgc2l6ZSglZClcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcmVxdWVzdF9kYXRhX3N6KTsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlvYy0+ZGlhZ19idWZmZXJbYnVmZmVyX3R5cGVdID0gcmVxdWVzdF9kYXRhOworCQlpb2MtPmRpYWdfYnVmZmVyX3N6W2J1ZmZlcl90eXBlXSA9IHJlcXVlc3RfZGF0YV9zejsKKwkJaW9jLT5kaWFnX2J1ZmZlcl9kbWFbYnVmZmVyX3R5cGVdID0gcmVxdWVzdF9kYXRhX2RtYTsKKwl9CisKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0RJQUdfQlVGRkVSX1BPU1Q7CisJbXBpX3JlcXVlc3QtPkJ1ZmZlclR5cGUgPSBrYXJnLmJ1ZmZlcl90eXBlOworCW1waV9yZXF1ZXN0LT5GbGFncyA9IGNwdV90b19sZTMyKGthcmcuZGlhZ25vc3RpY19mbGFncyk7CisJbXBpX3JlcXVlc3QtPkJ1ZmZlckFkZHJlc3MgPSBjcHVfdG9fbGU2NChyZXF1ZXN0X2RhdGFfZG1hKTsKKwltcGlfcmVxdWVzdC0+QnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIocmVxdWVzdF9kYXRhX3N6KTsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlcigweCVwKSwgIgorCSAgICAiZG1hKDB4JWxseCksIHN6KCVkKVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcmVxdWVzdF9kYXRhLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcXVlc3RfZGF0YV9kbWEsIG1waV9yZXF1ZXN0LT5CdWZmZXJMZW5ndGgpKTsKKworCWZvciAoaSA9IDA7IGkgPCBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTOyBpKyspCisJCW1waV9yZXF1ZXN0LT5Qcm9kdWN0U3BlY2lmaWNbaV0gPQorCQkJY3B1X3RvX2xlMzIoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXVtpXSk7CisKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKKwkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOworCisJaWYgKCEoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMkRpYWdCdWZmZXJQb3N0UmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlpc3N1ZV9yZXNldCA9IDE7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisKKwkvKiBwcm9jZXNzIHRoZSBjb21wbGV0ZWQgUmVwbHkgTWVzc2FnZSBGcmFtZSAqLworCWlmICgoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogbm8gcmVwbHkgbWVzc2FnZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCW1waV9yZXBseSA9IGlvYy0+Y3RsX2NtZHMucmVwbHk7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmIE1QSTJfSU9DU1RBVFVTX01BU0s7CisKKwlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSB8PQorCQkJTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEOworCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogc3VjY2Vzc1xuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwl9IGVsc2UgeworCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBpb2Nfc3RhdHVzKDB4JTA0eCkgIgorCQkgICAgImxvZ19pbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJCSAgICBpb2Nfc3RhdHVzLCBtcGlfcmVwbHktPklPQ0xvZ0luZm8pOworCQlyYyA9IC1FRkFVTFQ7CisJfQorCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKworIG91dDoKKworCWlmIChyYyAmJiByZXF1ZXN0X2RhdGEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCByZXF1ZXN0X2RhdGFfc3osCisJCSAgICByZXF1ZXN0X2RhdGEsIHJlcXVlc3RfZGF0YV9kbWEpOworCisJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwltdXRleF91bmxvY2soJmlvYy0+Y3RsX2NtZHMubXV0ZXgpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfY3RsX2RpYWdfdW5yZWdpc3RlciAtIGFwcGxpY2F0aW9uIHVucmVnaXN0ZXIgd2l0aCBkcml2ZXIKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqCisgKiBUaGlzIHdpbGwgYWxsb3cgdGhlIGRyaXZlciB0byBjbGVhbnVwIGFueSBtZW1vcnkgYWxsb2NhdGVkIGZvciBkaWFnCisgKiBtZXNzYWdlcyBhbmQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzLgorICovCitzdGF0aWMgbG9uZworX2N0bF9kaWFnX3VucmVnaXN0ZXIodm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9kaWFnX3VucmVnaXN0ZXIga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJdm9pZCAqcmVxdWVzdF9kYXRhOworCWRtYV9hZGRyX3QgcmVxdWVzdF9kYXRhX2RtYTsKKwl1MzIgcmVxdWVzdF9kYXRhX3N6OworCXU4IGJ1ZmZlcl90eXBlOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlidWZmZXJfdHlwZSA9IGthcmcudW5pcXVlX2lkICYgMHgwMDAwMDBmZjsKKwlpZiAoIV9jdGxfZGlhZ19jYXBhYmlsaXR5KGlvYywgYnVmZmVyX3R5cGUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgY2FwYWJpbGl0eSBmb3IgIgorCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAoKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVmZmVyX3R5cGUoMHglMDJ4KSBpcyBub3QgIgorCQkgICAgInJlZ2lzdGVyZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdICYKKwkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVmZmVyX3R5cGUoMHglMDJ4KSBoYXMgbm90IGJlZW4gIgorCQkgICAgInJlbGVhc2VkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChrYXJnLnVuaXF1ZV9pZCAhPSBpb2MtPnVuaXF1ZV9pZFtidWZmZXJfdHlwZV0pIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHVuaXF1ZV9pZCgweCUwOHgpIGlzIG5vdCAiCisJCSAgICAicmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywga2FyZy51bmlxdWVfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXF1ZXN0X2RhdGEgPSBpb2MtPmRpYWdfYnVmZmVyW2J1ZmZlcl90eXBlXTsKKwlpZiAoIXJlcXVlc3RfZGF0YSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG9lc24ndCBoYXZlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlcXVlc3RfZGF0YV9zeiA9IGlvYy0+ZGlhZ19idWZmZXJfc3pbYnVmZmVyX3R5cGVdOworCXJlcXVlc3RfZGF0YV9kbWEgPSBpb2MtPmRpYWdfYnVmZmVyX2RtYVtidWZmZXJfdHlwZV07CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBkZXYsIHJlcXVlc3RfZGF0YV9zeiwKKwkgICAgcmVxdWVzdF9kYXRhLCByZXF1ZXN0X2RhdGFfZG1hKTsKKwlpb2MtPmRpYWdfYnVmZmVyW2J1ZmZlcl90eXBlXSA9IE5VTEw7CisJaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2RpYWdfcXVlcnkgLSBxdWVyeSByZWxldmFudCBpbmZvIGFzc29jaWF0ZWQgd2l0aCBkaWFnIGJ1ZmZlcnMKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqCisgKiBUaGUgYXBwbGljYXRpb24gd2lsbCBzZW5kIG9ubHkgYnVmZmVyX3R5cGUgYW5kIHVuaXF1ZV9pZC4gIERyaXZlciB3aWxsCisgKiBpbnNwZWN0IHVuaXF1ZV9pZCBmaXJzdCwgaWYgdmFsaWQsIGZpbGwgaW4gYWxsIHRoZSBpbmZvLiAgSWYgdW5pcXVlX2lkIGlzCisgKiAweDAwLCB0aGUgZHJpdmVyIHdpbGwgcmV0dXJuIGluZm8gc3BlY2lmaWVkIGJ5IEJ1ZmZlciBUeXBlLgorICovCitzdGF0aWMgbG9uZworX2N0bF9kaWFnX3F1ZXJ5KHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfZGlhZ19xdWVyeSBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwl2b2lkICpyZXF1ZXN0X2RhdGE7CisJaW50IGk7CisJdTggYnVmZmVyX3R5cGU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmthcmcsIGFyZywgc2l6ZW9mKGthcmcpKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChfY3RsX3ZlcmlmeV9hZGFwdGVyKGthcmcuaGRyLmlvY19udW1iZXIsICZpb2MpID09IC0xIHx8ICFpb2MpCisJCXJldHVybiAtRU5PREVWOworCisJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCWthcmcuYXBwbGljYXRpb25fZmxhZ3MgPSAwOworCWJ1ZmZlcl90eXBlID0ga2FyZy5idWZmZXJfdHlwZTsKKworCWlmICghX2N0bF9kaWFnX2NhcGFiaWxpdHkoaW9jLCBidWZmZXJfdHlwZSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGRvZXNuJ3QgaGF2ZSBjYXBhYmlsaXR5IGZvciAiCisJCSAgICAiYnVmZmVyX3R5cGUoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmICgoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdICYKKwkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEKSA9PSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBidWZmZXJfdHlwZSgweCUwMngpIGlzIG5vdCAiCisJCSAgICAicmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2FyZy51bmlxdWVfaWQgJiAweGZmZmZmZjAwKSB7CisJCWlmIChrYXJnLnVuaXF1ZV9pZCAhPSBpb2MtPnVuaXF1ZV9pZFtidWZmZXJfdHlwZV0pIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB1bmlxdWVfaWQoMHglMDh4KSBpcyBub3QgIgorCQkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkJICAgIGthcmcudW5pcXVlX2lkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmVxdWVzdF9kYXRhID0gaW9jLT5kaWFnX2J1ZmZlcltidWZmZXJfdHlwZV07CisJaWYgKCFyZXF1ZXN0X2RhdGEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGRvZXNuJ3QgaGF2ZSBidWZmZXIgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gJiBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFTEVBU0VEKQorCQlrYXJnLmFwcGxpY2F0aW9uX2ZsYWdzID0gKE1QVDJfQVBQX0ZMQUdTX0FQUF9PV05FRCB8CisJCSAgICBNUFQyX0FQUF9GTEFHU19CVUZGRVJfVkFMSUQpOworCWVsc2UKKwkJa2FyZy5hcHBsaWNhdGlvbl9mbGFncyA9IChNUFQyX0FQUF9GTEFHU19BUFBfT1dORUQgfAorCQkgICAgTVBUMl9BUFBfRkxBR1NfQlVGRkVSX1ZBTElEIHwKKwkJICAgIE1QVDJfQVBQX0ZMQUdTX0ZXX0JVRkZFUl9BQ0NFU1MpOworCisJZm9yIChpID0gMDsgaSA8IE1QVDJfUFJPRFVDVF9TUEVDSUZJQ19EV09SRFM7IGkrKykKKwkJa2FyZy5wcm9kdWN0X3NwZWNpZmljW2ldID0KKwkJICAgIGlvYy0+cHJvZHVjdF9zcGVjaWZpY1tidWZmZXJfdHlwZV1baV07CisKKwlrYXJnLnRvdGFsX2J1ZmZlcl9zaXplID0gaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV07CisJa2FyZy5kcml2ZXJfYWRkZWRfYnVmZmVyX3NpemUgPSAwOworCWthcmcudW5pcXVlX2lkID0gaW9jLT51bmlxdWVfaWRbYnVmZmVyX3R5cGVdOworCWthcmcuZGlhZ25vc3RpY19mbGFncyA9IGlvYy0+ZGlhZ25vc3RpY19mbGFnc1tidWZmZXJfdHlwZV07CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmthcmcsIHNpemVvZihzdHJ1Y3QgbXB0Ml9kaWFnX3F1ZXJ5KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHVuYWJsZSB0byB3cml0ZSBtcHQyX2RpYWdfcXVlcnkgIgorCQkgICAgImRhdGEgQCAlcFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYXJnKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZGlhZ19yZWxlYXNlIC0gcmVxdWVzdCB0byBzZW5kIERpYWcgUmVsZWFzZSBNZXNzYWdlIHRvIGZpcm13YXJlCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKiBAc3RhdGUgLSBOT05fQkxPQ0tJTkcgb3IgQkxPQ0tJTkcKKyAqCisgKiBUaGlzIGFsbG93cyBvd25lcnNoaXAgb2YgdGhlIHNwZWNpZmllZCBidWZmZXIgdG8gcmV0dXJuZWQgdG8gdGhlIGRyaXZlciwKKyAqIGFsbG93aW5nIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgdGhlIGJ1ZmZlciB3aXRob3V0IGZlYXIgdGhhdCBmaXJtd2FyZSBpcworICogb3ZlcndyaXR0aW5nIGluZm9ybWF0aW9uIGluIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2RpYWdfcmVsZWFzZSh2b2lkIF9fdXNlciAqYXJnLCBlbnVtIGJsb2NrX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBtcHQyX2RpYWdfcmVsZWFzZSBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwl2b2lkICpyZXF1ZXN0X2RhdGE7CisJaW50IHJjOworCU1waTJEaWFnUmVsZWFzZVJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJTXBpMkRpYWdSZWxlYXNlUmVwbHlfdCAqbXBpX3JlcGx5OworCXU4IGJ1ZmZlcl90eXBlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdTE2IHNtaWQ7CisJdTE2IGlvY19zdGF0dXM7CisJdTggaXNzdWVfcmVzZXQgPSAwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlidWZmZXJfdHlwZSA9IGthcmcudW5pcXVlX2lkICYgMHgwMDAwMDBmZjsKKwlpZiAoIV9jdGxfZGlhZ19jYXBhYmlsaXR5KGlvYywgYnVmZmVyX3R5cGUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgY2FwYWJpbGl0eSBmb3IgIgorCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAoKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVmZmVyX3R5cGUoMHglMDJ4KSBpcyBub3QgIgorCQkgICAgInJlZ2lzdGVyZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGthcmcudW5pcXVlX2lkICE9IGlvYy0+dW5pcXVlX2lkW2J1ZmZlcl90eXBlXSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdW5pcXVlX2lkKDB4JTA4eCkgaXMgbm90ICIKKwkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBrYXJnLnVuaXF1ZV9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gJgorCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFTEVBU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBidWZmZXJfdHlwZSgweCUwMngpICIKKwkJICAgICJpcyBhbHJlYWR5IHJlbGVhc2VkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkgICAgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXF1ZXN0X2RhdGEgPSBpb2MtPmRpYWdfYnVmZmVyW2J1ZmZlcl90eXBlXTsKKworCWlmICghcmVxdWVzdF9kYXRhKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgIgorCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHN0YXRlID09IE5PTl9CTE9DS0lORyAmJiAhbXV0ZXhfdHJ5bG9jaygmaW9jLT5jdGxfY21kcy5tdXRleCkpCisJCXJldHVybiAtRUFHQUlOOworCWVsc2UgaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW9jLT5jdGxfY21kcy5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGN0bF9jbWQgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+Y3RsX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJbWVtc2V0KGlvYy0+Y3RsX2NtZHMucmVwbHksIDAsIGlvYy0+cmVwbHlfc3opOworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmN0bF9jbWRzLnNtaWQgPSBzbWlkOworCisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0U7CisJbXBpX3JlcXVlc3QtPkJ1ZmZlclR5cGUgPSBidWZmZXJfdHlwZTsKKworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAorCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CisKKwlpZiAoIShpb2MtPmN0bF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyRGlhZ1JlbGVhc2VSZXF1ZXN0X3QpLzQpOworCQlpZiAoIShpb2MtPmN0bF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCS8qIHByb2Nlc3MgdGhlIGNvbXBsZXRlZCBSZXBseSBNZXNzYWdlIEZyYW1lICovCisJaWYgKChpb2MtPmN0bF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKSA9PSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBubyByZXBseSBtZXNzYWdlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJbXBpX3JlcGx5ID0gaW9jLT5jdGxfY21kcy5yZXBseTsKKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpICYgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKworCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdIHw9CisJCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFTEVBU0VEOworCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogc3VjY2Vzc1xuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwl9IGVsc2UgeworCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBpb2Nfc3RhdHVzKDB4JTA0eCkgIgorCQkgICAgImxvZ19pbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJCSAgICBpb2Nfc3RhdHVzLCBtcGlfcmVwbHktPklPQ0xvZ0luZm8pOworCQlyYyA9IC1FRkFVTFQ7CisJfQorCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKworIG91dDoKKworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2N0bF9kaWFnX3JlYWRfYnVmZmVyIC0gcmVxdWVzdCBmb3IgY29weSBvZiB0aGUgZGlhZyBidWZmZXIKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqIEBzdGF0ZSAtIE5PTl9CTE9DS0lORyBvciBCTE9DS0lORworICovCitzdGF0aWMgbG9uZworX2N0bF9kaWFnX3JlYWRfYnVmZmVyKHZvaWQgX191c2VyICphcmcsIGVudW0gYmxvY2tfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IG1wdDJfZGlhZ19yZWFkX2J1ZmZlciBrYXJnOworCXN0cnVjdCBtcHQyX2RpYWdfcmVhZF9idWZmZXIgX191c2VyICp1YXJnID0gYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwl2b2lkICpyZXF1ZXN0X2RhdGEsICpkaWFnX2RhdGE7CisJTXBpMkRpYWdCdWZmZXJQb3N0UmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlNcGkyRGlhZ0J1ZmZlclBvc3RSZXBseV90ICptcGlfcmVwbHk7CisJaW50IHJjLCBpOworCXU4IGJ1ZmZlcl90eXBlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdTE2IHNtaWQ7CisJdTE2IGlvY19zdGF0dXM7CisJdTggaXNzdWVfcmVzZXQgPSAwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlidWZmZXJfdHlwZSA9IGthcmcudW5pcXVlX2lkICYgMHgwMDAwMDBmZjsKKwlpZiAoIV9jdGxfZGlhZ19jYXBhYmlsaXR5KGlvYywgYnVmZmVyX3R5cGUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgY2FwYWJpbGl0eSBmb3IgIgorCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAoa2FyZy51bmlxdWVfaWQgIT0gaW9jLT51bmlxdWVfaWRbYnVmZmVyX3R5cGVdKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB1bmlxdWVfaWQoMHglMDh4KSBpcyBub3QgIgorCQkgICAgInJlZ2lzdGVyZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGthcmcudW5pcXVlX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVxdWVzdF9kYXRhID0gaW9jLT5kaWFnX2J1ZmZlcltidWZmZXJfdHlwZV07CisJaWYgKCFyZXF1ZXN0X2RhdGEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGRvZXNuJ3QgaGF2ZSBidWZmZXIgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICgoa2FyZy5zdGFydGluZ19vZmZzZXQgJSA0KSB8fCAoa2FyZy5ieXRlc190b19yZWFkICUgNCkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGVpdGhlciB0aGUgc3RhcnRpbmdfb2Zmc2V0ICIKKwkJICAgICJvciBieXRlc190b19yZWFkIGFyZSBub3QgNCBieXRlIGFsaWduZWRcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGlhZ19kYXRhID0gKHZvaWQgKikocmVxdWVzdF9kYXRhICsga2FyZy5zdGFydGluZ19vZmZzZXQpOworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlciglcCksICIKKwkgICAgIm9mZnNldCglZCksIHN6KCVkKVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkgICAgZGlhZ19kYXRhLCBrYXJnLnN0YXJ0aW5nX29mZnNldCwga2FyZy5ieXRlc190b19yZWFkKSk7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKXVhcmctPmRpYWdub3N0aWNfZGF0YSwKKwkgICAgZGlhZ19kYXRhLCBrYXJnLmJ5dGVzX3RvX3JlYWQpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBVbmFibGUgdG8gd3JpdGUgIgorCQkgICAgIm1wdF9kaWFnX3JlYWRfYnVmZmVyX3QgZGF0YSBAICVwXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgZGlhZ19kYXRhKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKChrYXJnLmZsYWdzICYgTVBUMl9GTEFHU19SRVJFR0lTVEVSKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBSZXJlZ2lzdGVyICIKKwkJImJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKSk7CisJaWYgKChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gJgorCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFTEVBU0VEKSA9PSAwKSB7CisJCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiYnVmZmVyX3R5cGUoMHglMDJ4KSBpcyBzdGlsbCByZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsCisJCSAgICAgX19mdW5jX18sIGJ1ZmZlcl90eXBlKSk7CisJCXJldHVybiAwOworCX0KKwkvKiBHZXQgYSBmcmVlIHJlcXVlc3QgZnJhbWUgYW5kIHNhdmUgdGhlIG1lc3NhZ2UgY29udGV4dC4KKwkqLworCWlmIChzdGF0ZSA9PSBOT05fQkxPQ0tJTkcgJiYgIW11dGV4X3RyeWxvY2soJmlvYy0+Y3RsX2NtZHMubXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlIGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlvYy0+Y3RsX2NtZHMubXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBjdGxfY21kIGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmN0bF9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IDA7CisJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCW1lbXNldChpb2MtPmN0bF9jbWRzLnJlcGx5LCAwLCBpb2MtPnJlcGx5X3N6KTsKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT5jdGxfY21kcy5zbWlkID0gc21pZDsKKworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRElBR19CVUZGRVJfUE9TVDsKKwltcGlfcmVxdWVzdC0+QnVmZmVyVHlwZSA9IGJ1ZmZlcl90eXBlOworCW1waV9yZXF1ZXN0LT5CdWZmZXJMZW5ndGggPQorCSAgICBjcHVfdG9fbGUzMihpb2MtPmRpYWdfYnVmZmVyX3N6W2J1ZmZlcl90eXBlXSk7CisJbXBpX3JlcXVlc3QtPkJ1ZmZlckFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGU2NChpb2MtPmRpYWdfYnVmZmVyX2RtYVtidWZmZXJfdHlwZV0pOworCWZvciAoaSA9IDA7IGkgPCBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTOyBpKyspCisJCW1waV9yZXF1ZXN0LT5Qcm9kdWN0U3BlY2lmaWNbaV0gPQorCQkJY3B1X3RvX2xlMzIoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXVtpXSk7CisKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKKwkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOworCisJaWYgKCEoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMkRpYWdCdWZmZXJQb3N0UmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlpc3N1ZV9yZXNldCA9IDE7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisKKwkvKiBwcm9jZXNzIHRoZSBjb21wbGV0ZWQgUmVwbHkgTWVzc2FnZSBGcmFtZSAqLworCWlmICgoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogbm8gcmVwbHkgbWVzc2FnZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCW1waV9yZXBseSA9IGlvYy0+Y3RsX2NtZHMucmVwbHk7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmIE1QSTJfSU9DU1RBVFVTX01BU0s7CisKKwlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSB8PQorCQkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEOworCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogc3VjY2Vzc1xuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwl9IGVsc2UgeworCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBpb2Nfc3RhdHVzKDB4JTA0eCkgIgorCQkgICAgImxvZ19pbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJCSAgICBpb2Nfc3RhdHVzLCBtcGlfcmVwbHktPklPQ0xvZ0luZm8pOworCQlyYyA9IC1FRkFVTFQ7CisJfQorCisgaXNzdWVfaG9zdF9yZXNldDoKKwlpZiAoaXNzdWVfcmVzZXQpCisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKworIG91dDoKKworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2N0bF9pb2N0bF9tYWluIC0gbWFpbiBpb2N0bCBlbnRyeSBwb2ludAorICogQGZpbGUgLSAoc3RydWN0IGZpbGUpCisgKiBAY21kIC0gaW9jdGwgb3Bjb2RlCisgKiBAYXJnIC0KKyAqLworc3RhdGljIGxvbmcKK19jdGxfaW9jdGxfbWFpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwllbnVtIGJsb2NrX3N0YXRlIHN0YXRlOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RhdGUgPSAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gTk9OX0JMT0NLSU5HIDoKKwkgICAgQkxPQ0tJTkc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTVBUMklPQ0lORk86CisJCWlmIChfSU9DX1NJWkUoY21kKSA9PSBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfaW9jaW5mbykpCisJCQlyZXQgPSBfY3RsX2dldGlvY2luZm8oYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyQ09NTUFORDoKKwl7CisJCXN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQga2FyZzsKKwkJc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCBfX3VzZXIgKnVhcmc7CisJCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmthcmcsIGFyZywgc2l6ZW9mKGthcmcpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fAorCQkgICAgIWlvYykKKwkJCXJldHVybiAtRU5PREVWOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLAorCQkJICAgIGZsYWdzKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQpKSB7CisJCQl1YXJnID0gYXJnOworCQkJcmV0ID0gX2N0bF9kb19tcHRfY29tbWFuZChpb2MsIGthcmcsICZ1YXJnLT5tZiwgc3RhdGUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIE1QVDJFVkVOVFFVRVJZOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cXVlcnkpKQorCQkJcmV0ID0gX2N0bF9ldmVudHF1ZXJ5KGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkVWRU5URU5BQkxFOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50ZW5hYmxlKSkKKwkJCXJldCA9IF9jdGxfZXZlbnRlbmFibGUoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyRVZFTlRSRVBPUlQ6CisJCXJldCA9IF9jdGxfZXZlbnRyZXBvcnQoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQySEFSRFJFU0VUOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2RpYWdfcmVzZXQpKQorCQkJcmV0ID0gX2N0bF9kb19yZXNldChhcmcpOworCQlicmVhazsKKwljYXNlIE1QVDJCVERITUFQUElORzoKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9idGRoX21hcHBpbmcpKQorCQkJcmV0ID0gX2N0bF9idGRoX21hcHBpbmcoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyRElBR1JFR0lTVEVSOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2RpYWdfcmVnaXN0ZXIpKQorCQkJcmV0ID0gX2N0bF9kaWFnX3JlZ2lzdGVyKGFyZywgc3RhdGUpOworCQlicmVhazsKKwljYXNlIE1QVDJESUFHVU5SRUdJU1RFUjoKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9kaWFnX3VucmVnaXN0ZXIpKQorCQkJcmV0ID0gX2N0bF9kaWFnX3VucmVnaXN0ZXIoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyRElBR1FVRVJZOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2RpYWdfcXVlcnkpKQorCQkJcmV0ID0gX2N0bF9kaWFnX3F1ZXJ5KGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkRJQUdSRUxFQVNFOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2RpYWdfcmVsZWFzZSkpCisJCQlyZXQgPSBfY3RsX2RpYWdfcmVsZWFzZShhcmcsIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyRElBR1JFQURCVUZGRVI6CisJCWlmIChfSU9DX1NJWkUoY21kKSA9PSBzaXplb2Yoc3RydWN0IG1wdDJfZGlhZ19yZWFkX2J1ZmZlcikpCisJCQlyZXQgPSBfY3RsX2RpYWdfcmVhZF9idWZmZXIoYXJnLCBzdGF0ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJeworCQlzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kIGthcmc7CisJCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmthcmcsIGFyZywgc2l6ZW9mKGthcmcpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fAorCQkgICAgIWlvYykKKwkJCXJldHVybiAtRU5PREVWOworCisJCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJICAgICJ1bnN1cHBvcnRlZCBpb2N0bCBvcGNvZGUoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBjbWQpKTsKKwkJYnJlYWs7CisJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIF9jdGxfaW9jdGwgLSBtYWluIGlvY3RsIGVudHJ5IHBvaW50ICh1bmxvY2tlZCkKKyAqIEBmaWxlIC0gKHN0cnVjdCBmaWxlKQorICogQGNtZCAtIGlvY3RsIG9wY29kZQorICogQGFyZyAtCisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlsb25nIHJldDsKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IF9jdGxfaW9jdGxfbWFpbihmaWxlLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisvKioKKyAqIF9jdGxfY29tcGF0X21wdF9jb21tYW5kIC0gY29udmVydCAzMmJpdCBwb2ludGVycyB0byA2NGJpdC4KKyAqIEBmaWxlIC0gKHN0cnVjdCBmaWxlKQorICogQGNtZCAtIGlvY3RsIG9wY29kZQorICogQGFyZyAtIChzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kMzIpCisgKgorICogTVBUMkNPTU1BTkQzMiAtIEhhbmRsZSAzMmJpdCBhcHBsaWNhdGlvbnMgcnVubmluZyBvbiA2NGJpdCBvcy4KKyAqLworc3RhdGljIGxvbmcKK19jdGxfY29tcGF0X21wdF9jb21tYW5kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQzMiBrYXJnMzI7CisJc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZDMyIF9fdXNlciAqdWFyZzsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kIGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCWVudW0gYmxvY2tfc3RhdGUgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChfSU9DX1NJWkUoY21kKSAhPSBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZDMyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1YXJnID0gKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQzMiBfX3VzZXIgKikgYXJnOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnMzIsIChjaGFyIF9fdXNlciAqKWFyZywgc2l6ZW9mKGthcmczMikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZzMyLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywKKwkJICAgIGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCW1lbXNldCgma2FyZywgMCwgc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQpKTsKKwlrYXJnLmhkci5pb2NfbnVtYmVyID0ga2FyZzMyLmhkci5pb2NfbnVtYmVyOworCWthcmcuaGRyLnBvcnRfbnVtYmVyID0ga2FyZzMyLmhkci5wb3J0X251bWJlcjsKKwlrYXJnLmhkci5tYXhfZGF0YV9zaXplID0ga2FyZzMyLmhkci5tYXhfZGF0YV9zaXplOworCWthcmcudGltZW91dCA9IGthcmczMi50aW1lb3V0OworCWthcmcubWF4X3JlcGx5X2J5dGVzID0ga2FyZzMyLm1heF9yZXBseV9ieXRlczsKKwlrYXJnLmRhdGFfaW5fc2l6ZSA9IGthcmczMi5kYXRhX2luX3NpemU7CisJa2FyZy5kYXRhX291dF9zaXplID0ga2FyZzMyLmRhdGFfb3V0X3NpemU7CisJa2FyZy5tYXhfc2Vuc2VfYnl0ZXMgPSBrYXJnMzIubWF4X3NlbnNlX2J5dGVzOworCWthcmcuZGF0YV9zZ2Vfb2Zmc2V0ID0ga2FyZzMyLmRhdGFfc2dlX29mZnNldDsKKwltZW1jcHkoJmthcmcucmVwbHlfZnJhbWVfYnVmX3B0ciwgJmthcmczMi5yZXBseV9mcmFtZV9idWZfcHRyLAorCSAgICBzaXplb2YodWludDMyX3QpKTsKKwltZW1jcHkoJmthcmcuZGF0YV9pbl9idWZfcHRyLCAma2FyZzMyLmRhdGFfaW5fYnVmX3B0ciwKKwkgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisJbWVtY3B5KCZrYXJnLmRhdGFfb3V0X2J1Zl9wdHIsICZrYXJnMzIuZGF0YV9vdXRfYnVmX3B0ciwKKwkgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisJbWVtY3B5KCZrYXJnLnNlbnNlX2RhdGFfcHRyLCAma2FyZzMyLnNlbnNlX2RhdGFfcHRyLAorCSAgICBzaXplb2YodWludDMyX3QpKTsKKwlzdGF0ZSA9IChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyBOT05fQkxPQ0tJTkcgOiBCTE9DS0lORzsKKwlyZXR1cm4gX2N0bF9kb19tcHRfY29tbWFuZChpb2MsIGthcmcsICZ1YXJnLT5tZiwgc3RhdGUpOworfQorCisvKioKKyAqIF9jdGxfaW9jdGxfY29tcGF0IC0gbWFpbiBpb2N0bCBlbnRyeSBwb2ludCAoY29tcGF0KQorICogQGZpbGUgLQorICogQGNtZCAtCisgKiBAYXJnIC0KKyAqCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyAzMiBiaXQgYXBwbGljYXRpb25zIGluIDY0Yml0IG9zLgorICovCitzdGF0aWMgbG9uZworX2N0bF9pb2N0bF9jb21wYXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbG9uZyByZXQ7CisJbG9ja19rZXJuZWwoKTsKKwlpZiAoY21kID09IE1QVDJDT01NQU5EMzIpCisJCXJldCA9IF9jdGxfY29tcGF0X21wdF9jb21tYW5kKGZpbGUsIGNtZCwgYXJnKTsKKwllbHNlCisJCXJldCA9IF9jdGxfaW9jdGxfbWFpbihmaWxlLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyogc2NzaSBob3N0IGF0dHJpYnV0ZXMgKi8KKworLyoqCisgKiBfY3RsX3ZlcnNpb25fZndfc2hvdyAtIGZpcm13YXJlIHZlcnNpb24KKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX3ZlcnNpb25fZndfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMmQuJTAyZC4lMDJkLiUwMmRcbiIsCisJICAgIChpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkICYgMHhGRjAwMDAwMCkgPj4gMjQsCisJICAgIChpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkICYgMHgwMEZGMDAwMCkgPj4gMTYsCisJICAgIChpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkICYgMHgwMDAwRkYwMCkgPj4gOCwKKwkgICAgaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4MDAwMDAwRkYpOworfQorc3RhdGljIERFVklDRV9BVFRSKHZlcnNpb25fZncsIFNfSVJVR08sIF9jdGxfdmVyc2lvbl9md19zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX3ZlcnNpb25fYmlvc19zaG93IC0gYmlvcyB2ZXJzaW9uCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF92ZXJzaW9uX2Jpb3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXUzMiB2ZXJzaW9uID0gbGUzMl90b19jcHUoaW9jLT5iaW9zX3BnMy5CaW9zVmVyc2lvbik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJkLiUwMmQuJTAyZC4lMDJkXG4iLAorCSAgICAodmVyc2lvbiAmIDB4RkYwMDAwMDApID4+IDI0LAorCSAgICAodmVyc2lvbiAmIDB4MDBGRjAwMDApID4+IDE2LAorCSAgICAodmVyc2lvbiAmIDB4MDAwMEZGMDApID4+IDgsCisJICAgIHZlcnNpb24gJiAweDAwMDAwMEZGKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uX2Jpb3MsIFNfSVJVR08sIF9jdGxfdmVyc2lvbl9iaW9zX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfdmVyc2lvbl9tcGlfc2hvdyAtIE1QSSAobWVzc2FnZSBwYXNzaW5nIGludGVyZmFjZSkgdmVyc2lvbgorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfdmVyc2lvbl9tcGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwM3guJTAyeFxuIiwKKwkgICAgaW9jLT5mYWN0cy5Nc2dWZXJzaW9uLCBpb2MtPmZhY3RzLkhlYWRlclZlcnNpb24gPj4gOCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbl9tcGksIFNfSVJVR08sIF9jdGxfdmVyc2lvbl9tcGlfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF92ZXJzaW9uX3Byb2R1Y3Rfc2hvdyAtIHByb2R1Y3QgbmFtZQorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfdmVyc2lvbl9wcm9kdWN0X3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAxNiwgIiVzXG4iLCBpb2MtPm1hbnVfcGcwLkNoaXBOYW1lKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uX3Byb2R1Y3QsIFNfSVJVR08sCisgICBfY3RsX3ZlcnNpb25fcHJvZHVjdF9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX3ZlcnNpb25fbnZkYXRhX3BlcnNpc3RlbnRfc2hvdyAtIG5kdmF0YSBwZXJzaXN0ZW50IHZlcnNpb24KKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX3ZlcnNpb25fbnZkYXRhX3BlcnNpc3RlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMnhoXG4iLAorCSAgICBsZTE2X3RvX2NwdShpb2MtPmlvdW5pdF9wZzAuTnZkYXRhVmVyc2lvblBlcnNpc3RlbnQuV29yZCkpOworfQorc3RhdGljIERFVklDRV9BVFRSKHZlcnNpb25fbnZkYXRhX3BlcnNpc3RlbnQsIFNfSVJVR08sCisgICAgX2N0bF92ZXJzaW9uX252ZGF0YV9wZXJzaXN0ZW50X3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfdmVyc2lvbl9udmRhdGFfZGVmYXVsdF9zaG93IC0gbnZkYXRhIGRlZmF1bHQgdmVyc2lvbgorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfdmVyc2lvbl9udmRhdGFfZGVmYXVsdF9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsCisgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyeGhcbiIsCisJICAgIGxlMTZfdG9fY3B1KGlvYy0+aW91bml0X3BnMC5OdmRhdGFWZXJzaW9uRGVmYXVsdC5Xb3JkKSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbl9udmRhdGFfZGVmYXVsdCwgU19JUlVHTywKKyAgICBfY3RsX3ZlcnNpb25fbnZkYXRhX2RlZmF1bHRfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF9ib2FyZF9uYW1lX3Nob3cgLSBib2FyZCBuYW1lCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF9ib2FyZF9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAxNiwgIiVzXG4iLCBpb2MtPm1hbnVfcGcwLkJvYXJkTmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfbmFtZSwgU19JUlVHTywgX2N0bF9ib2FyZF9uYW1lX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfYm9hcmRfYXNzZW1ibHlfc2hvdyAtIGJvYXJkIGFzc2VtYmx5IG5hbWUKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2JvYXJkX2Fzc2VtYmx5X3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAxNiwgIiVzXG4iLCBpb2MtPm1hbnVfcGcwLkJvYXJkQXNzZW1ibHkpOworfQorc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX2Fzc2VtYmx5LCBTX0lSVUdPLAorICAgIF9jdGxfYm9hcmRfYXNzZW1ibHlfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF9ib2FyZF90cmFjZXJfc2hvdyAtIGJvYXJkIHRyYWNlciBudW1iZXIKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2JvYXJkX3RyYWNlcl9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTYsICIlc1xuIiwgaW9jLT5tYW51X3BnMC5Cb2FyZFRyYWNlck51bWJlcik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfdHJhY2VyLCBTX0lSVUdPLAorICAgIF9jdGxfYm9hcmRfdHJhY2VyX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfaW9fZGVsYXlfc2hvdyAtIGlvIG1pc3NpbmcgZGVsYXkKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogVGhpcyBpcyBmb3IgZmlybXdhcmUgaW1wbGVtZW50aW9uIGZvciBkZWJvdWNpbmcgZGV2aWNlCisgKiByZW1vdmFsIGV2ZW50cy4KKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfaW9fZGVsYXlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMmRcbiIsIGlvYy0+aW9fbWlzc2luZ19kZWxheSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaW9fZGVsYXksIFNfSVJVR08sCisgICAgX2N0bF9pb19kZWxheV9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX2RldmljZV9kZWxheV9zaG93IC0gZGV2aWNlIG1pc3NpbmcgZGVsYXkKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogVGhpcyBpcyBmb3IgZmlybXdhcmUgaW1wbGVtZW50aW9uIGZvciBkZWJvdWNpbmcgZGV2aWNlCisgKiByZW1vdmFsIGV2ZW50cy4KKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfZGV2aWNlX2RlbGF5X3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJkXG4iLCBpb2MtPmRldmljZV9taXNzaW5nX2RlbGF5KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkZXZpY2VfZGVsYXksIFNfSVJVR08sCisgICAgX2N0bF9kZXZpY2VfZGVsYXlfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF9md19xdWV1ZV9kZXB0aF9zaG93IC0gZ2xvYmFsIGNyZWRpdHMKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogVGhpcyBpcyBmaXJtd2FyZSBxdWV1ZSBkZXB0aCBsaW1pdAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF9md19xdWV1ZV9kZXB0aF9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyZFxuIiwgaW9jLT5mYWN0cy5SZXF1ZXN0Q3JlZGl0KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihmd19xdWV1ZV9kZXB0aCwgU19JUlVHTywKKyAgICBfY3RsX2Z3X3F1ZXVlX2RlcHRoX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfc2FzX2FkZHJlc3Nfc2hvdyAtIHNhcyBhZGRyZXNzCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIFRoaXMgaXMgdGhlIGNvbnRyb2xsZXIgc2FzIGFkZHJlc3MKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfaG9zdF9zYXNfYWRkcmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDE2bGx4XG4iLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcyk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaG9zdF9zYXNfYWRkcmVzcywgU19JUlVHTywKKyAgICBfY3RsX2hvc3Rfc2FzX2FkZHJlc3Nfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF9sb2dnaW5nX2xldmVsX3Nob3cgLSBsb2dnaW5nIGxldmVsCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQvd3JpdGUnIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfbG9nZ2luZ19sZXZlbF9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTA4eGhcbiIsIGlvYy0+bG9nZ2luZ19sZXZlbCk7Cit9CitzdGF0aWMgc3NpemVfdAorX2N0bF9sb2dnaW5nX2xldmVsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJaW50IHZhbCA9IDA7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV4IiwgJnZhbCkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpb2MtPmxvZ2dpbmdfbGV2ZWwgPSB2YWw7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImxvZ2dpbmdfbGV2ZWw9JTA4eGhcbiIsIGlvYy0+bmFtZSwKKwkgICAgaW9jLT5sb2dnaW5nX2xldmVsKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobG9nZ2luZ19sZXZlbCwgU19JUlVHTyB8IFNfSVdVU1IsCisgICAgX2N0bF9sb2dnaW5nX2xldmVsX3Nob3csIF9jdGxfbG9nZ2luZ19sZXZlbF9zdG9yZSk7CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHQyc2FzX2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfdmVyc2lvbl9mdywKKwkmZGV2X2F0dHJfdmVyc2lvbl9iaW9zLAorCSZkZXZfYXR0cl92ZXJzaW9uX21waSwKKwkmZGV2X2F0dHJfdmVyc2lvbl9wcm9kdWN0LAorCSZkZXZfYXR0cl92ZXJzaW9uX252ZGF0YV9wZXJzaXN0ZW50LAorCSZkZXZfYXR0cl92ZXJzaW9uX252ZGF0YV9kZWZhdWx0LAorCSZkZXZfYXR0cl9ib2FyZF9uYW1lLAorCSZkZXZfYXR0cl9ib2FyZF9hc3NlbWJseSwKKwkmZGV2X2F0dHJfYm9hcmRfdHJhY2VyLAorCSZkZXZfYXR0cl9pb19kZWxheSwKKwkmZGV2X2F0dHJfZGV2aWNlX2RlbGF5LAorCSZkZXZfYXR0cl9sb2dnaW5nX2xldmVsLAorCSZkZXZfYXR0cl9md19xdWV1ZV9kZXB0aCwKKwkmZGV2X2F0dHJfaG9zdF9zYXNfYWRkcmVzcywKKwlOVUxMLAorfTsKKworLyogZGV2aWNlIGF0dHJpYnV0ZXMgKi8KKworLyoqCisgKiBfY3RsX2RldmljZV9zYXNfYWRkcmVzc19zaG93IC0gc2FzIGFkZHJlc3MKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogVGhpcyBpcyB0aGUgc2FzIGFkZHJlc3MgZm9yIHRoZSB0YXJnZXQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfZGV2aWNlX3Nhc19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2Rldi0+aG9zdGRhdGE7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwMTZsbHhcbiIsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPnNhc19hZGRyZXNzKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihzYXNfYWRkcmVzcywgU19JUlVHTywgX2N0bF9kZXZpY2Vfc2FzX2FkZHJlc3Nfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF9kZXZpY2VfaGFuZGxlX3Nob3cgLSBkZXZpY2UgaGFuZGxlCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIFRoaXMgaXMgdGhlIGZpcm13YXJlIGFzc2lnbmVkIGRldmljZSBoYW5kbGUKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfZGV2aWNlX2hhbmRsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDR4XG4iLAorCSAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihzYXNfZGV2aWNlX2hhbmRsZSwgU19JUlVHTywgX2N0bF9kZXZpY2VfaGFuZGxlX3Nob3csIE5VTEwpOworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2FzX2FkZHJlc3MsCisJJmRldl9hdHRyX3Nhc19kZXZpY2VfaGFuZGxlLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjdGxfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkudW5sb2NrZWRfaW9jdGwgPSBfY3RsX2lvY3RsLAorCS5yZWxlYXNlID0gX2N0bF9yZWxlYXNlLAorCS5wb2xsID0gX2N0bF9wb2xsLAorCS5mYXN5bmMgPSBfY3RsX2Zhc3luYywKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IF9jdGxfaW9jdGxfY29tcGF0LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgY3RsX2RldiA9IHsKKwkubWlub3IgID0gTVBUMlNBU19NSU5PUiwKKwkubmFtZSAgID0gTVBUMlNBU19ERVZfTkFNRSwKKwkuZm9wcyAgID0gJmN0bF9mb3BzLAorfTsKKworLyoqCisgKiBtcHQyc2FzX2N0bF9pbml0IC0gbWFpbiBlbnRyeSBwb2ludCBmb3IgY3RsLgorICoKKyAqLwordm9pZAorbXB0MnNhc19jdGxfaW5pdCh2b2lkKQoreworCWFzeW5jX3F1ZXVlID0gTlVMTDsKKwlpZiAobWlzY19yZWdpc3RlcigmY3RsX2RldikgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzIGNhbid0IHJlZ2lzdGVyIG1pc2MgZGV2aWNlIFttaW5vcj0lZF1cbiIsCisJCSAgICBNUFQyU0FTX0RSSVZFUl9OQU1FLCBNUFQyU0FTX01JTk9SKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0bF9wb2xsX3dhaXQpOworfQorCisvKioKKyAqIG1wdDJzYXNfY3RsX2V4aXQgLSBleGl0IHBvaW50IGZvciBjdGwKKyAqCisgKi8KK3ZvaWQKK21wdDJzYXNfY3RsX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvYywgJm1wdDJzYXNfaW9jX2xpc3QsIGxpc3QpIHsKKworCQkvKiBmcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIGRpYWcgYnVmZmVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UOyBpKyspIHsKKwkJCWlmICghaW9jLT5kaWFnX2J1ZmZlcltpXSkKKwkJCQljb250aW51ZTsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBpb2MtPmRpYWdfYnVmZmVyX3N6W2ldLAorCQkJICAgIGlvYy0+ZGlhZ19idWZmZXJbaV0sIGlvYy0+ZGlhZ19idWZmZXJfZG1hW2ldKTsKKwkJCWlvYy0+ZGlhZ19idWZmZXJbaV0gPSBOVUxMOworCQkJaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbaV0gPSAwOworCQl9CisKKwkJa2ZyZWUoaW9jLT5ldmVudF9sb2cpOworCX0KKwltaXNjX2RlcmVnaXN0ZXIoJmN0bF9kZXYpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI2YzBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaApAQCAtMCwwICsxLDQxNiBAQAorLyoKKyAqIE1hbmFnZW1lbnQgTW9kdWxlIFN1cHBvcnQgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkCisgKiBjb250cm9sbGVycworICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2N0bC5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpZm5kZWYgTVBUMlNBU19DVExfSF9JTkNMVURFRAorI2RlZmluZSBNUFQyU0FTX0NUTF9IX0lOQ0xVREVECisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2VuZGlmCisKKyNkZWZpbmUgTVBUMlNBU19ERVZfTkFNRQkibXB0MmN0bCIKKyNkZWZpbmUgTVBUMl9NQUdJQ19OVU1CRVIJJ20nCisjZGVmaW5lIE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUICgxMCkgLyogaW4gc2Vjb25kcyAqLworCisvKioKKyAqIElPQ1RMIG9wY29kZXMKKyAqLworI2RlZmluZSBNUFQySU9DSU5GTwlfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMTcsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9pb2N0bF9pb2NpbmZvKQorI2RlZmluZSBNUFQyQ09NTUFORAlfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMjAsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kKQorI2lmZGVmIENPTkZJR19DT01QQVQKKyNkZWZpbmUgTVBUMkNPTU1BTkQzMglfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMjAsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kMzIpCisjZW5kaWYKKyNkZWZpbmUgTVBUMkVWRU5UUVVFUlkJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDIxLCBcCisgICAgc3RydWN0IG1wdDJfaW9jdGxfZXZlbnRxdWVyeSkKKyNkZWZpbmUgTVBUMkVWRU5URU5BQkxFCV9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAyMiwgXAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50ZW5hYmxlKQorI2RlZmluZSBNUFQyRVZFTlRSRVBPUlQJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDIzLCBcCisgICAgc3RydWN0IG1wdDJfaW9jdGxfZXZlbnRyZXBvcnQpCisjZGVmaW5lIE1QVDJIQVJEUkVTRVQJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDI0LCBcCisgICAgc3RydWN0IG1wdDJfaW9jdGxfZGlhZ19yZXNldCkKKyNkZWZpbmUgTVBUMkJUREhNQVBQSU5HCV9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAzMSwgXAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2J0ZGhfbWFwcGluZykKKworLyogZGlhZyBidWZmZXIgc3VwcG9ydCAqLworI2RlZmluZSBNUFQyRElBR1JFR0lTVEVSIF9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAyNiwgXAorICAgIHN0cnVjdCBtcHQyX2RpYWdfcmVnaXN0ZXIpCisjZGVmaW5lIE1QVDJESUFHUkVMRUFTRQlfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMjcsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9kaWFnX3JlbGVhc2UpCisjZGVmaW5lIE1QVDJESUFHVU5SRUdJU1RFUiBfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMjgsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9kaWFnX3VucmVnaXN0ZXIpCisjZGVmaW5lIE1QVDJESUFHUVVFUlkJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDI5LCBcCisgICAgc3RydWN0IG1wdDJfZGlhZ19xdWVyeSkKKyNkZWZpbmUgTVBUMkRJQUdSRUFEQlVGRkVSIF9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAzMCwgXAorICAgIHN0cnVjdCBtcHQyX2RpYWdfcmVhZF9idWZmZXIpCisKKy8qKgorICogc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIC0gbWFpbiBoZWFkZXIgc3RydWN0dXJlCisgKiBAaW9jX251bWJlciAtICBJT0MgdW5pdCBudW1iZXIKKyAqIEBwb3J0X251bWJlciAtIElPQyBwb3J0IG51bWJlcgorICogQG1heF9kYXRhX3NpemUgLSBtYXhpbXVtIG51bWJlciBieXRlcyB0byB0cmFuc2ZlciBvbiByZWFkCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciB7CisJdWludDMyX3QgaW9jX251bWJlcjsKKwl1aW50MzJfdCBwb3J0X251bWJlcjsKKwl1aW50MzJfdCBtYXhfZGF0YV9zaXplOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9kaWFnX3Jlc2V0IC0gZGlhZ25vc3RpYyByZXNldAorICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2RpYWdfcmVzZXQgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7Cit9OworCisKKy8qKgorICogc3RydWN0IG1wdDJfaW9jdGxfcGNpX2luZm8gLSBwY2kgZGV2aWNlIGluZm8KKyAqIEBkZXZpY2UgLSBwY2kgZGV2aWNlIGlkCisgKiBAZnVuY3Rpb24gLSBwY2kgZnVuY3Rpb24gaWQKKyAqIEBidXMgLSBwY2kgYnVzIGlkCisgKiBAc2VnbWVudF9pZCAtIHBjaSBzZWdtZW50IGlkCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX3BjaV9pbmZvIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBkZXZpY2U6NTsKKwkJCXVpbnQzMl90IGZ1bmN0aW9uOjM7CisJCQl1aW50MzJfdCBidXM6MjQ7CisJCX0gYml0czsKKwkJdWludDMyX3QgIHdvcmQ7CisJfSB1OworCXVpbnQzMl90IHNlZ21lbnRfaWQ7Cit9OworCisKKyNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfU0NTSQkoMHgwMCkKKyNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfRkMJCSgweDAxKQorI2RlZmluZSBNUFQyX0lPQ1RMX0lOVEVSRkFDRV9GQ19JUAkoMHgwMikKKyNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfU0FTCSgweDAzKQorI2RlZmluZSBNUFQyX0lPQ1RMX0lOVEVSRkFDRV9TQVMyCSgweDA0KQorI2RlZmluZSBNUFQyX0lPQ1RMX1ZFUlNJT05fTEVOR1RICSgzMikKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9pb2NpbmZvIC0gZ2VuZXJpYyBjb250cm9sbGVyIGluZm8KKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQGFkYXB0ZXJfdHlwZSAtIHR5cGUgb2YgYWRhcHRlciAoc3BpLCBmYywgc2FzKQorICogQHBvcnRfbnVtYmVyIC0gcG9ydCBudW1iZXIKKyAqIEBwY2lfaWQgLSBQQ0kgSWQKKyAqIEBod19yZXYgLSBoYXJkd2FyZSByZXZpc2lvbgorICogQHN1Yl9zeXN0ZW1fZGV2aWNlIC0gUENJIHN1YnN5c3RlbSBEZXZpY2UgSUQKKyAqIEBzdWJfc3lzdGVtX3ZlbmRvciAtIFBDSSBzdWJzeXN0ZW0gVmVuZG9yIElECisgKiBAcnN2ZDAgLSByZXNlcnZlZAorICogQGZpcm13YXJlX3ZlcnNpb24gLSBmaXJtd2FyZSB2ZXJzaW9uCisgKiBAYmlvc192ZXJzaW9uIC0gQklPUyB2ZXJzaW9uCisgKiBAZHJpdmVyX3ZlcnNpb24gLSBkcml2ZXIgdmVyc2lvbiAtIDMyIEFTQ0lJIGNoYXJhY3RlcnMKKyAqIEByc3ZkMSAtIHJlc2VydmVkCisgKiBAc2NzaV9pZCAtIHNjc2kgaWQgb2YgYWRhcHRlciAwCisgKiBAcnN2ZDIgLSByZXNlcnZlZAorICogQHBjaV9pbmZvcm1hdGlvbiAtIHBjaSBpbmZvICgybmQgcmV2aXNpb24pCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2lvY2luZm8geworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDMyX3QgYWRhcHRlcl90eXBlOworCXVpbnQzMl90IHBvcnRfbnVtYmVyOworCXVpbnQzMl90IHBjaV9pZDsKKwl1aW50MzJfdCBod19yZXY7CisJdWludDMyX3Qgc3Vic3lzdGVtX2RldmljZTsKKwl1aW50MzJfdCBzdWJzeXN0ZW1fdmVuZG9yOworCXVpbnQzMl90IHJzdmQwOworCXVpbnQzMl90IGZpcm13YXJlX3ZlcnNpb247CisJdWludDMyX3QgYmlvc192ZXJzaW9uOworCXVpbnQ4X3QgZHJpdmVyX3ZlcnNpb25bTVBUMl9JT0NUTF9WRVJTSU9OX0xFTkdUSF07CisJdWludDhfdCByc3ZkMTsKKwl1aW50OF90IHNjc2lfaWQ7CisJdWludDE2X3QgcnN2ZDI7CisJc3RydWN0IG1wdDJfaW9jdGxfcGNpX2luZm8gcGNpX2luZm9ybWF0aW9uOworfTsKKworCisvKiBudW1iZXIgb2YgZXZlbnQgbG9nIGVudHJpZXMgKi8KKyNkZWZpbmUgTVBUMlNBU19DVExfRVZFTlRfTE9HX1NJWkUgKDUwKQorCisvKioKKyAqIHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cXVlcnkgLSBxdWVyeSBldmVudCBjb3VudCBhbmQgdHlwZQorICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAZXZlbnRfZW50cmllcyAtIG51bWJlciBvZiBldmVudHMgcmV0dXJuZWQgYnkgZ2V0X2V2ZW50X3JlcG9ydAorICogQHJzdmQgLSByZXNlcnZlZAorICogQGV2ZW50X3R5cGVzIC0gdHlwZSBvZiBldmVudHMgY3VycmVudGx5IGJlaW5nIGNhcHR1cmVkCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cXVlcnkgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDE2X3QgZXZlbnRfZW50cmllczsKKwl1aW50MTZfdCByc3ZkOworCXVpbnQzMl90IGV2ZW50X3R5cGVzW01QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEU107Cit9OworCisvKioKKyAqIHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50ZW5hYmxlIC0gZW5hYmxlL2Rpc2FibGUgZXZlbnQgY2FwdHVyaW5nCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEBldmVudF90eXBlcyAtIHRvZ2dsZSBvZmYvb24gdHlwZSBvZiBldmVudHMgdG8gYmUgY2FwdHVyZWQKKyAqLworc3RydWN0IG1wdDJfaW9jdGxfZXZlbnRlbmFibGUgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDMyX3QgZXZlbnRfdHlwZXNbNF07Cit9OworCisjZGVmaW5lIE1QVDJfRVZFTlRfREFUQV9TSVpFICgxOTIpCisvKioKKyAqIHN0cnVjdCBNUFQyX0lPQ1RMX0VWRU5UUyAtCisgKiBAZXZlbnQgLSB0aGUgZXZlbnQgdGhhdCB3YXMgcmVwb3J0ZWQKKyAqIEBjb250ZXh0IC0gdW5pcXVlIHZhbHVlIGZvciBlYWNoIGV2ZW50IGFzc2lnbmVkIGJ5IGRyaXZlcgorICogQGRhdGEgLSBldmVudCBkYXRhIHJldHVybmVkIGluIGZ3IHJlcGx5IG1lc3NhZ2UKKyAqLworc3RydWN0IE1QVDJfSU9DVExfRVZFTlRTIHsKKwl1aW50MzJfdCBldmVudDsKKwl1aW50MzJfdCBjb250ZXh0OworCXVpbnQ4X3QgZGF0YVtNUFQyX0VWRU5UX0RBVEFfU0laRV07Cit9OworCisvKioKKyAqIHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cmVwb3J0IC0gcmV0dXJpbmcgZXZlbnQgbG9nCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEBldmVudF9kYXRhIC0gKHNlZSBzdHJ1Y3QgTVBUMl9JT0NUTF9FVkVOVFMpCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cmVwb3J0IHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXN0cnVjdCBNUFQyX0lPQ1RMX0VWRU5UUyBldmVudF9kYXRhWzFdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kIC0gZ2VuZXJpYyBtcHQgZmlybXdhcmUgcGFzc3RocnUgaW9jbHQKKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQHRpbWVvdXQgLSBjb21tYW5kIHRpbWVvdXQgaW4gc2Vjb25kcy4gKGlmIHplcm8gdGhlbiB1c2UgZHJpdmVyIGRlZmF1bHQKKyAqICB2YWx1ZSkuCisgKiBAcmVwbHlfZnJhbWVfYnVmX3B0ciAtIHJlcGx5IGxvY2F0aW9uCisgKiBAZGF0YV9pbl9idWZfcHRyIC0gZGVzdGluYXRpb24gZm9yIHJlYWQKKyAqIEBkYXRhX291dF9idWZfcHRyIC0gZGF0YSBzb3VyY2UgZm9yIHdyaXRlCisgKiBAc2Vuc2VfZGF0YV9wdHIgLSBzZW5zZSBkYXRhIGxvY2F0aW9uCisgKiBAbWF4X3JlcGx5X2J5dGVzIC0gbWF4aW11bSBudW1iZXIgb2YgcmVwbHkgYnl0ZXMgdG8gYmUgc2VudCB0byBhcHAuCisgKiBAZGF0YV9pbl9zaXplIC0gbnVtYmVyIGJ5dGVzIGZvciBkYXRhIHRyYW5zZmVyIGluIChyZWFkKQorICogQGRhdGFfb3V0X3NpemUgLSBudW1iZXIgYnl0ZXMgZm9yIGRhdGEgdHJhbnNmZXIgb3V0ICh3cml0ZSkKKyAqIEBtYXhfc2Vuc2VfYnl0ZXMgLSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBmb3IgYXV0byBzZW5zZSBidWZmZXJzCisgKiBAZGF0YV9zZ2Vfb2Zmc2V0IC0gb2Zmc2V0IGluIHdvcmRzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0IG1lc3NhZ2UgdG8KKyAqIHRoZSBmaXJzdCBTR0wKKyAqIEBtZlsxXTsKKyAqLworc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwl1aW50MzJfdCB0aW1lb3V0OworCXZvaWQgX191c2VyICpyZXBseV9mcmFtZV9idWZfcHRyOworCXZvaWQgX191c2VyICpkYXRhX2luX2J1Zl9wdHI7CisJdm9pZCBfX3VzZXIgKmRhdGFfb3V0X2J1Zl9wdHI7CisJdm9pZCBfX3VzZXIgKnNlbnNlX2RhdGFfcHRyOworCXVpbnQzMl90IG1heF9yZXBseV9ieXRlczsKKwl1aW50MzJfdCBkYXRhX2luX3NpemU7CisJdWludDMyX3QgZGF0YV9vdXRfc2l6ZTsKKwl1aW50MzJfdCBtYXhfc2Vuc2VfYnl0ZXM7CisJdWludDMyX3QgZGF0YV9zZ2Vfb2Zmc2V0OworCXVpbnQ4X3QgbWZbMV07Cit9OworCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZDMyIHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQzMl90IHRpbWVvdXQ7CisJdWludDMyX3QgcmVwbHlfZnJhbWVfYnVmX3B0cjsKKwl1aW50MzJfdCBkYXRhX2luX2J1Zl9wdHI7CisJdWludDMyX3QgZGF0YV9vdXRfYnVmX3B0cjsKKwl1aW50MzJfdCBzZW5zZV9kYXRhX3B0cjsKKwl1aW50MzJfdCBtYXhfcmVwbHlfYnl0ZXM7CisJdWludDMyX3QgZGF0YV9pbl9zaXplOworCXVpbnQzMl90IGRhdGFfb3V0X3NpemU7CisJdWludDMyX3QgbWF4X3NlbnNlX2J5dGVzOworCXVpbnQzMl90IGRhdGFfc2dlX29mZnNldDsKKwl1aW50OF90IG1mWzFdOworfTsKKyNlbmRpZgorCisvKioKKyAqIHN0cnVjdCBtcHQyX2lvY3RsX2J0ZGhfbWFwcGluZyAtIG1hcHBpbmcgaW5mbworICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAaWQgLSB0YXJnZXQgZGV2aWNlIGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogQGJ1cyAtIFNDU0kgYnVzIG51bWJlciB0aGF0IHRoZSB0YXJnZXQgZGV2aWNlIGV4aXN0cyBvbgorICogQGhhbmRsZSAtIGRldmljZSBoYW5kbGUgZm9yIHRoZSB0YXJnZXQgZGV2aWNlCisgKiBAcnN2ZCAtIHJlc2VydmVkCisgKgorICogVG8gb2J0YWluIGEgYnVzL2lkIHRoZSBhcHBsaWNhdGlvbiBzZXRzCisgKiBoYW5kbGUgdG8gdmFsaWQgaGFuZGxlLCBhbmQgYnVzL2lkIHRvIDB4RkZGRi4KKyAqCisgKiBUbyBvYnRhaW4gdGhlIGRldmljZSBoYW5kbGUgdGhlIGFwcGxpY2F0aW9uIHNldHMKKyAqIGJ1cy9pZCB2YWxpZCB2YWx1ZSwgYW5kIHRoZSBoYW5kbGUgdG8gMHhGRkZGLgorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9idGRoX21hcHBpbmcgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDMyX3QgaWQ7CisJdWludDMyX3QgYnVzOworCXVpbnQxNl90IGhhbmRsZTsKKwl1aW50MTZfdCByc3ZkOworfTsKKworCisvKiBzdGF0dXMgYml0cyBmb3IgaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXMgKi8KKyNkZWZpbmUgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUdJU1RFUkVEIAkoMHgwMSkKKyNkZWZpbmUgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRCAJKDB4MDIpCisKKy8qIGFwcGxpY2F0aW9uIGZsYWdzIGZvciBtcHQyX2RpYWdfcmVnaXN0ZXIsIG1wdDJfZGlhZ19xdWVyeSAqLworI2RlZmluZSBNUFQyX0FQUF9GTEFHU19BUFBfT1dORUQJKDB4MDAwMSkKKyNkZWZpbmUgTVBUMl9BUFBfRkxBR1NfQlVGRkVSX1ZBTElECSgweDAwMDIpCisjZGVmaW5lIE1QVDJfQVBQX0ZMQUdTX0ZXX0JVRkZFUl9BQ0NFU1MJKDB4MDAwNCkKKworLyogZmxhZ3MgZm9yIG1wdDJfZGlhZ19yZWFkX2J1ZmZlciAqLworI2RlZmluZSBNUFQyX0ZMQUdTX1JFUkVHSVNURVIJCSgweDAwMDEpCisKKyNkZWZpbmUgTVBUMl9QUk9EVUNUX1NQRUNJRklDX0RXT1JEUyAJCTIzCisKKy8qKgorICogc3RydWN0IG1wdDJfZGlhZ19yZWdpc3RlciAtIGFwcGxpY2F0aW9uIHJlZ2lzdGVyIHdpdGggZHJpdmVyCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEByZXNlcnZlZCAtCisgKiBAYnVmZmVyX3R5cGUgLSBzcGVjaWZpZXMgZWl0aGVyIFRSQUNFIG9yIFNOQVBTSE9UCisgKiBAYXBwbGljYXRpb25fZmxhZ3MgLSBtaXNjIGZsYWdzCisgKiBAZGlhZ25vc3RpY19mbGFncyAtIHNwZWNpZmllcyBmbGFncyBhZmZlY3RpbmcgY29tbWFuZCBwcm9jZXNzaW5nCisgKiBAcHJvZHVjdF9zcGVjaWZpYyAtIHByb2R1Y3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqIEByZXF1ZXN0ZWRfYnVmZmVyX3NpemUgLSBidWZmZXJzIHNpemUgaW4gYnl0ZXMKKyAqIEB1bmlxdWVfaWQgLSB0YWcgc3BlY2lmaWVkIGJ5IGFwcGxpY2F0aW9uIHRoYXQgaXMgdXNlZCB0byBzaWduYWwgb3duZXJzaGlwCisgKiAgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHdpbGwgYWxsb3cgdGhlIGRyaXZlciB0byBzZXR1cCBhbnkgcmVxdWlyZWQgYnVmZmVycyB0aGF0IHdpbGwgYmUKKyAqIG5lZWRlZCBieSBmaXJtd2FyZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkcml2ZXIuCisgKi8KK3N0cnVjdCBtcHQyX2RpYWdfcmVnaXN0ZXIgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDhfdCByZXNlcnZlZDsKKwl1aW50OF90IGJ1ZmZlcl90eXBlOworCXVpbnQxNl90IGFwcGxpY2F0aW9uX2ZsYWdzOworCXVpbnQzMl90IGRpYWdub3N0aWNfZmxhZ3M7CisJdWludDMyX3QgcHJvZHVjdF9zcGVjaWZpY1tNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTXTsKKwl1aW50MzJfdCByZXF1ZXN0ZWRfYnVmZmVyX3NpemU7CisJdWludDMyX3QgdW5pcXVlX2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9kaWFnX3VucmVnaXN0ZXIgLSBhcHBsaWNhdGlvbiB1bnJlZ2lzdGVyIHdpdGggZHJpdmVyCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEB1bmlxdWVfaWQgLSB0YWcgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgYnVmZmVyIHRvIGJlIHVucmVnaXN0ZXJlZAorICoKKyAqIFRoaXMgd2lsbCBhbGxvdyB0aGUgZHJpdmVyIHRvIGNsZWFudXAgYW55IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGRpYWcKKyAqIG1lc3NhZ2VzIGFuZCB0byBmcmVlIHVwIGFueSByZXNvdXJjZXMuCisgKi8KK3N0cnVjdCBtcHQyX2RpYWdfdW5yZWdpc3RlciB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwl1aW50MzJfdCB1bmlxdWVfaWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBtcHQyX2RpYWdfcXVlcnkgLSBxdWVyeSByZWxldmFudCBpbmZvIGFzc29jaWF0ZWQgd2l0aCBkaWFnIGJ1ZmZlcnMKKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQHJlc2VydmVkIC0KKyAqIEBidWZmZXJfdHlwZSAtIHNwZWNpZmllcyBlaXRoZXIgVFJBQ0Ugb3IgU05BUFNIT1QKKyAqIEBhcHBsaWNhdGlvbl9mbGFncyAtIG1pc2MgZmxhZ3MKKyAqIEBkaWFnbm9zdGljX2ZsYWdzIC0gc3BlY2lmaWVzIGZsYWdzIGFmZmVjdGluZyBjb21tYW5kIHByb2Nlc3NpbmcKKyAqIEBwcm9kdWN0X3NwZWNpZmljIC0gcHJvZHVjdCBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICogQHRvdGFsX2J1ZmZlcl9zaXplIC0gZGlhZyBidWZmZXIgc2l6ZSBpbiBieXRlcworICogQGRyaXZlcl9hZGRlZF9idWZmZXJfc2l6ZSAtIHNpemUgb2YgZXh0cmEgc3BhY2UgYXBwZW5kZWQgdG8gZW5kIG9mIGJ1ZmZlcgorICogQHVuaXF1ZV9pZCAtIHVuaXF1ZSBpZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBidWZmZXIuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIHdpbGwgc2VuZCBvbmx5IGJ1ZmZlcl90eXBlIGFuZCB1bmlxdWVfaWQuICBEcml2ZXIgd2lsbAorICogaW5zcGVjdCB1bmlxdWVfaWQgZmlyc3QsIGlmIHZhbGlkLCBmaWxsIGluIGFsbCB0aGUgaW5mby4gIElmIHVuaXF1ZV9pZCBpcworICogMHgwMCwgdGhlIGRyaXZlciB3aWxsIHJldHVybiBpbmZvIHNwZWNpZmllZCBieSBCdWZmZXIgVHlwZS4KKyAqLworc3RydWN0IG1wdDJfZGlhZ19xdWVyeSB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwl1aW50OF90IHJlc2VydmVkOworCXVpbnQ4X3QgYnVmZmVyX3R5cGU7CisJdWludDE2X3QgYXBwbGljYXRpb25fZmxhZ3M7CisJdWludDMyX3QgZGlhZ25vc3RpY19mbGFnczsKKwl1aW50MzJfdCBwcm9kdWN0X3NwZWNpZmljW01QVDJfUFJPRFVDVF9TUEVDSUZJQ19EV09SRFNdOworCXVpbnQzMl90IHRvdGFsX2J1ZmZlcl9zaXplOworCXVpbnQzMl90IGRyaXZlcl9hZGRlZF9idWZmZXJfc2l6ZTsKKwl1aW50MzJfdCB1bmlxdWVfaWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBtcHQyX2RpYWdfcmVsZWFzZSAtICByZXF1ZXN0IHRvIHNlbmQgRGlhZyBSZWxlYXNlIE1lc3NhZ2UgdG8gZmlybXdhcmUKKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQHVuaXF1ZV9pZCAtIHRhZyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBidWZmZXIgdG8gYmUgcmVsZWFzZWQKKyAqCisgKiBUaGlzIGFsbG93cyBvd25lcnNoaXAgb2YgdGhlIHNwZWNpZmllZCBidWZmZXIgdG8gcmV0dXJuZWQgdG8gdGhlIGRyaXZlciwKKyAqIGFsbG93aW5nIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgdGhlIGJ1ZmZlciB3aXRob3V0IGZlYXIgdGhhdCBmaXJtd2FyZSBpcworICogb3ZlcndyaXR0aW5nIGluZm9ybWF0aW9uIGluIHRoZSBidWZmZXIuCisgKi8KK3N0cnVjdCBtcHQyX2RpYWdfcmVsZWFzZSB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwl1aW50MzJfdCB1bmlxdWVfaWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBtcHQyX2RpYWdfcmVhZF9idWZmZXIgLSByZXF1ZXN0IGZvciBjb3B5IG9mIHRoZSBkaWFnIGJ1ZmZlcgorICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAc3RhdHVzIC0KKyAqIEByZXNlcnZlZCAtCisgKiBAZmxhZ3MgLSBtaXNjIGZsYWdzCisgKiBAc3RhcnRpbmdfb2Zmc2V0IC0gc3RhcnRpbmcgb2Zmc2V0IHdpdGhpbiBkcml2ZXJzIGJ1ZmZlciB3aGVyZSB0byBzdGFydAorICogIHJlYWRpbmcgZGF0YSBhdCBpbnRvIHRoZSBzcGVjaWZpZWQgYXBwbGljYXRpb24gYnVmZmVyCisgKiBAYnl0ZXNfdG9fcmVhZCAtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhlIGRyaXZlcnMgYnVmZmVyIGludG8gdGhlCisgKiAgYXBwbGljYXRpb24gYnVmZmVyIHN0YXJ0aW5nIGF0IHN0YXJ0aW5nX29mZnNldC4KKyAqIEB1bmlxdWVfaWQgLSB1bmlxdWUgaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnVmZmVyLgorICogQGRpYWdub3N0aWNfZGF0YSAtIGRhdGEgcGF5bG9hZAorICovCitzdHJ1Y3QgbXB0Ml9kaWFnX3JlYWRfYnVmZmVyIHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQ4X3Qgc3RhdHVzOworCXVpbnQ4X3QgcmVzZXJ2ZWQ7CisJdWludDE2X3QgZmxhZ3M7CisJdWludDMyX3Qgc3RhcnRpbmdfb2Zmc2V0OworCXVpbnQzMl90IGJ5dGVzX3RvX3JlYWQ7CisJdWludDMyX3QgdW5pcXVlX2lkOworCXVpbnQzMl90IGRpYWdub3N0aWNfZGF0YVsxXTsKK307CisKKyNlbmRpZiAvKiBNUFQyU0FTX0NUTF9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzMjUwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIExvZ2dpbmcgU3VwcG9ydCBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9kZWJ1Zy5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpZm5kZWYgTVBUMlNBU19ERUJVR19IX0lOQ0xVREVECisjZGVmaW5lIE1QVDJTQVNfREVCVUdfSF9JTkNMVURFRAorCisjZGVmaW5lIE1QVF9ERUJVRwkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVBUX0RFQlVHX01TR19GUkFNRQkJMHgwMDAwMDAwMgorI2RlZmluZSBNUFRfREVCVUdfU0cJCQkweDAwMDAwMDA0CisjZGVmaW5lIE1QVF9ERUJVR19FVkVOVFMJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSwkweDAwMDAwMDEwCisjZGVmaW5lIE1QVF9ERUJVR19JTklUCQkJMHgwMDAwMDAyMAorI2RlZmluZSBNUFRfREVCVUdfRVhJVAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTVBUX0RFQlVHX0ZBSUwJCQkweDAwMDAwMDgwCisjZGVmaW5lIE1QVF9ERUJVR19UTQkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTVBUX0RFQlVHX1JFUExZCQkJMHgwMDAwMDIwMAorI2RlZmluZSBNUFRfREVCVUdfSEFORFNIQUtFCQkweDAwMDAwNDAwCisjZGVmaW5lIE1QVF9ERUJVR19DT05GSUcJCTB4MDAwMDA4MDAKKyNkZWZpbmUgTVBUX0RFQlVHX0RMCQkJMHgwMDAwMTAwMAorI2RlZmluZSBNUFRfREVCVUdfUkVTRVQJCQkweDAwMDAyMDAwCisjZGVmaW5lIE1QVF9ERUJVR19TQ1NJCQkJMHgwMDAwNDAwMAorI2RlZmluZSBNUFRfREVCVUdfSU9DVEwJCQkweDAwMDA4MDAwCisjZGVmaW5lIE1QVF9ERUJVR19DU01JU0FTCQkweDAwMDEwMDAwCisjZGVmaW5lIE1QVF9ERUJVR19TQVMJCQkweDAwMDIwMDAwCisjZGVmaW5lIE1QVF9ERUJVR19UUkFOU1BPUlQJCTB4MDAwNDAwMDAKKyNkZWZpbmUgTVBUX0RFQlVHX1RBU0tfU0VUX0ZVTEwJCTB4MDAwODAwMDAKKworI2RlZmluZSBNUFRfREVCVUdfVEFSR0VUX01PREUJCTB4MDAxMDAwMDAKKworCisvKgorICogQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HIC0gZW5hYmxlZCBpbiBLY29uZmlnCisgKi8KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworI2RlZmluZSBNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgQklUUykJCQlcCit7CQkJCQkJCQlcCisJaWYgKElPQy0+bG9nZ2luZ19sZXZlbCAmIEJJVFMpCQkJCVwKKwkJQ01EOwkJCQkJCVwKK30KKyNlbHNlCisjZGVmaW5lIE1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBCSVRTKQorI2VuZGlmIC8qIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORyAqLworCisKKy8qCisgKiBkZWJ1ZyBtYWNyb3MKKyAqLworCisjZGVmaW5lIGRwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUcpCisKKyNkZWZpbmUgZHNncHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX1NHKQorCisjZGVmaW5lIGRldnRwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfRVZFTlRTKQorCisjZGVmaW5lIGRld3RwcmludGsoSU9DLCBDTUQpCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCisKKyNkZWZpbmUgZGluaXRwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfSU5JVCkKKworI2RlZmluZSBkZXhpdHByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19FWElUKQorCisjZGVmaW5lIGRmYWlscHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0ZBSUwpCisKKyNkZWZpbmUgZHRtcHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX1RNKQorCisjZGVmaW5lIGRyZXBseXByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19SRVBMWSkKKworI2RlZmluZSBkaHNwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfSEFORFNIQUtFKQorCisjZGVmaW5lIGRjcHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0NPTkZJRykKKworI2RlZmluZSBkZGxwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfREwpCisKKyNkZWZpbmUgZHJzcHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX1JFU0VUKQorCisjZGVmaW5lIGRzcHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX1NDU0kpCisKKyNkZWZpbmUgZGN0bHByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19JT0NUTCkKKworI2RlZmluZSBkY3NtaXNhc3ByaW50ayhJT0MsIENNRCkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0NTTUlTQVMpCisKKyNkZWZpbmUgZHNhc3ByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19TQVMpCisKKyNkZWZpbmUgZHNhc3RyYW5zcG9ydChJT0MsIENNRCkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX1NBU19XSURFKQorCisjZGVmaW5lIGRtZnByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19NU0dfRlJBTUUpCisKKyNkZWZpbmUgZHRzZnByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19UQVNLX1NFVF9GVUxMKQorCisjZGVmaW5lIGR0cmFuc3BvcnRwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfVFJBTlNQT1JUKQorCisjZGVmaW5lIGRUTXByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19UQVJHRVRfTU9ERSkKKworLyogaW5saW5lIGZ1bmN0aW9ucyBmb3IgZHVtcGluZyBkZWJ1ZyBkYXRhKi8KKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX2RlYnVnX2R1bXBfbWYgLSBwcmludCBtZXNzYWdlIGZyYW1lIGNvbnRlbnRzCisgKiBAbXBpX3JlcXVlc3Q6IHBvaW50ZXIgdG8gbWVzc2FnZSBmcmFtZQorICogQHN6OiBudW1iZXIgb2YgZHdvcmRzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX2RlYnVnX2R1bXBfbWYodm9pZCAqbXBpX3JlcXVlc3QsIGludCBzeikKK3sKKwlpbnQgaTsKKwl1MzIgKm1mcCA9ICh1MzIgKiltcGlfcmVxdWVzdDsKKworCXByaW50ayhLRVJOX0lORk8gIm1mOlxuXHQiKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3o7IGkrKykgeworCQlpZiAoaSAmJiAoKGkgJSA4KSA9PSAwKSkKKwkJCXByaW50aygiXG5cdCIpOworCQlwcmludGsoIiUwOHggIiwgbGUzMl90b19jcHUobWZwW2ldKSk7CisJfQorCXByaW50aygiXG4iKTsKK30KKyNlbHNlCisjZGVmaW5lIF9kZWJ1Z19kdW1wX21mKG1waV9yZXF1ZXN0LCBzeikKKyNlbmRpZiAvKiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgKi8KKworI2VuZGlmIC8qIE1QVDJTQVNfREVCVUdfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDYzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTAsMCArMSw1Njg3IEBACisvKgorICogU2NzaSBIb3N0IExheWVyIGZvciBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBiYXNlZCBjb250cm9sbGVycworICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX3Njc2loLmMKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IKKyAqIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUCisgKiBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcworICogc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorICogZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCisgKiBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAqIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsCisgKiBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworICogRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKyAqIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAorICogSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUworCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlICJtcHQyc2FzX2Jhc2UuaCIKKworTU9EVUxFX0FVVEhPUihNUFQyU0FTX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oTVBUMlNBU19ERVNDUklQVElPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihNUFQyU0FTX0RSSVZFUl9WRVJTSU9OKTsKKworI2RlZmluZSBSQUlEX0NIQU5ORUwgMQorCisvKiBmb3J3YXJkIHByb3RvJ3MgKi8KK3N0YXRpYyB2b2lkIF9zY3NpaF9leHBhbmRlcl9ub2RlX3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyKTsKK3N0YXRpYyB2b2lkIF9maXJtd2FyZV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qIGdsb2JhbCBwYXJhbWV0ZXJzICovCitMSVNUX0hFQUQobXB0MnNhc19pb2NfbGlzdCk7CisKKy8qIGxvY2FsIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyB1OCBzY3NpX2lvX2NiX2lkeCA9IC0xOworc3RhdGljIHU4IHRtX2NiX2lkeCA9IC0xOworc3RhdGljIHU4IGN0bF9jYl9pZHggPSAtMTsKK3N0YXRpYyB1OCBiYXNlX2NiX2lkeCA9IC0xOworc3RhdGljIHU4IHRyYW5zcG9ydF9jYl9pZHggPSAtMTsKK3N0YXRpYyB1OCBjb25maWdfY2JfaWR4ID0gLTE7CitzdGF0aWMgaW50IG1wdF9pZHM7CisKKy8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCitzdGF0aWMgdTMyIGxvZ2dpbmdfbGV2ZWw7CitNT0RVTEVfUEFSTV9ERVNDKGxvZ2dpbmdfbGV2ZWwsICIgYml0cyBmb3IgZW5hYmxpbmcgYWRkaXRpb25hbCBsb2dnaW5nIGluZm8gIgorICAgICIoZGVmYXVsdD0wKSIpOworCisvKiBzY3NpLW1pZCBsYXllciBnbG9iYWwgcGFybWV0ZXIgaXMgbWF4X3JlcG9ydF9sdW5zLCB3aGljaCBpcyA1MTEgKi8KKyNkZWZpbmUgTVBUMlNBU19NQVhfTFVOICgxNjg5NSkKK3N0YXRpYyBpbnQgbWF4X2x1biA9IE1QVDJTQVNfTUFYX0xVTjsKK21vZHVsZV9wYXJhbShtYXhfbHVuLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhfbHVuLCAiIG1heCBsdW4sIGRlZmF1bHQ9MTY4OTUgIik7CisKKy8qKgorICogc3RydWN0IHNlbnNlX2luZm8gLSBjb21tb24gc3RydWN0dXJlIGZvciBvYnRhaW5pbmcgc2Vuc2Uga2V5cworICogQHNrZXk6IHNlbnNlIGtleQorICogQGFzYzogYWRkaXRpb25hbCBzZW5zZSBjb2RlCisgKiBAYXNjcTogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgorICovCitzdHJ1Y3Qgc2Vuc2VfaW5mbyB7CisJdTggc2tleTsKKwl1OCBhc2M7CisJdTggYXNjcTsKK307CisKKworI2RlZmluZSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NUX1JFU0VUICgweEZGRkYpCisvKioKKyAqIHN0cnVjdCBmd19ldmVudF93b3JrIC0gZmlybXdhcmUgZXZlbnQgc3RydWN0CisgKiBAbGlzdDogbGluayBsaXN0IGZyYW1ld29yaworICogQHdvcms6IHdvcmsgb2JqZWN0IChpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAaG9zdF9yZXNldF9oYW5kbGluZzogaGFuZGxpbmcgZXZlbnRzIGR1cmluZyBob3N0IHJlc2V0CisgKiBAaWdub3JlOiBmbGFnIG1lYW5pbmcgdGhpcyBldmVudCBoYXMgYmVlbiBtYXJrZWQgdG8gaWdub3JlCisgKiBAZXZlbnQ6IGZpcm13YXJlIGV2ZW50IE1QSTJfRVZFTlRfWFhYIGRlZmluZWQgaW4gbXB0Ml9pb2MuaAorICogQGV2ZW50X2RhdGE6IHJlcGx5IGV2ZW50IGRhdGEgcGF5bG9hZCBmb2xsb3dzCisgKgorICogVGhpcyBvYmplY3Qgc3RvcmVkIG9uIGlvYy0+ZndfZXZlbnRfbGlzdC4KKyAqLworc3RydWN0IGZ3X2V2ZW50X3dvcmsgeworCXN0cnVjdCBsaXN0X2hlYWQgCWxpc3Q7CisJc3RydWN0IGRlbGF5ZWRfd29yawl3b3JrOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwl1OAkJCVZGX0lEOworCXU4CQkJaG9zdF9yZXNldF9oYW5kbGluZzsKKwl1OAkJCWlnbm9yZTsKKwl1MTYJCQlldmVudDsKKwl2b2lkCQkJKmV2ZW50X2RhdGE7Cit9OworCisvKioKKyAqIHN0cnVjdCBfc2NzaV9pb190cmFuc2ZlciAtIHNjc2kgaW8gdHJhbnNmZXIKKyAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlIChhc3NpZ25lZCBieSBmaXJtd2FyZSkKKyAqIEBpc19yYWlkOiBmbGFnIHNldCBmb3IgaGlkZGVuIHJhaWQgY29tcG9uZW50cworICogQGRpcjogRE1BX1RPX0RFVklDRSwgRE1BX0ZST01fREVWSUNFLAorICogQGRhdGFfbGVuZ3RoOiBkYXRhIHRyYW5zZmVyIGxlbmd0aAorICogQGRhdGFfZG1hOiBkbWEgcG9pbnRlciB0byBkYXRhCisgKiBAc2Vuc2U6IHNlbnNlIGRhdGEKKyAqIEBsdW46IGx1biBudW1iZXIKKyAqIEBjZGJfbGVuZ3RoOiBjZGIgbGVuZ3RoCisgKiBAY2RiOiBjZGIgY29udGVudHMKKyAqIEB2YWxpZF9yZXBseTogZmxhZyBzZXQgZm9yIHJlcGx5IG1lc3NhZ2UKKyAqIEB0aW1lb3V0OiB0aW1lb3V0IGZvciB0aGlzIGNvbW1hbmQKKyAqIEBzZW5zZV9sZW5ndGg6IHNlbnNlIGxlbmd0aAorICogQGlvY19zdGF0dXM6IGlvYyBzdGF0dXMKKyAqIEBzY3NpX3N0YXRlOiBzY3NpIHN0YXRlCisgKiBAc2NzaV9zdGF0dXM6IHNjc2kgc3RhdXMKKyAqIEBsb2dfaW5mbzogbG9nIGluZm9ybWF0aW9uCisgKiBAdHJhbnNmZXJfbGVuZ3RoOiBkYXRhIGxlbmd0aCB0cmFuc2ZlciB3aGVuIHRoZXJlIGlzIGEgcmVwbHkgbWVzc2FnZQorICoKKyAqIFVzZWQgZm9yIHNlbmRpbmcgaW50ZXJuYWwgc2NzaSBjb21tYW5kcyB0byBkZXZpY2VzIHdpdGhpbiB0aGlzIG1vZHVsZS4KKyAqIFJlZmVyIHRvIF9zY3NpX3NlbmRfc2NzaV9pbygpLgorICovCitzdHJ1Y3QgX3Njc2lfaW9fdHJhbnNmZXIgeworCXUxNgloYW5kbGU7CisJdTgJaXNfcmFpZDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CisJdTMyCWRhdGFfbGVuZ3RoOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJdTggCXNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CisJdTMyCWx1bjsKKwl1OAljZGJfbGVuZ3RoOworCXU4CWNkYlszMl07CisJdTgJdGltZW91dDsKKwl1OAl2YWxpZF9yZXBseTsKKyAgLyogdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBvbmx5IHZhbGlkIHdoZW4gJ3ZhbGlkX3JlcGx5ID0gMScgKi8KKwl1MzIJc2Vuc2VfbGVuZ3RoOworCXUxNglpb2Nfc3RhdHVzOworCXU4CXNjc2lfc3RhdGU7CisJdTgJc2NzaV9zdGF0dXM7CisJdTMyCWxvZ19pbmZvOworCXUzMgl0cmFuc2Zlcl9sZW5ndGg7Cit9OworCisvKgorICogVGhlIHBjaSBkZXZpY2UgaWRzIGFyZSBkZWZpbmVkIGluIG1waS9tcGkyX2NuZmcuaC4KKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjc2loX3BjaV90YWJsZVtdID0geworCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIwMDQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwkvKiBGYWxjb24gfiAyMDA4Ki8KKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMDA4LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJLyogTGliZXJhdG9yIH4gMjEwOCAqLworCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMDhfMSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMDhfMiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMDhfMywKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMTZfMSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMTZfMiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXswfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzY3NpaF9wY2lfdGFibGUpOworCisvKioKKyAqIHNjc2loX3NldF9kZWJ1Z19sZXZlbCAtIGdsb2JhbCBzZXR0aW5nIG9mIGlvYy0+bG9nZ2luZ19sZXZlbC4KKyAqCisgKiBOb3RlOiBUaGUgbG9nZ2luZyBsZXZlbHMgYXJlIGRlZmluZWQgaW4gbXB0MnNhc19kZWJ1Zy5oLgorICovCitzdGF0aWMgaW50CitzY3NpaF9zZXRfZGVidWdfbGV2ZWwoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmV0ID0gcGFyYW1fc2V0X2ludCh2YWwsIGtwKTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAic2V0dGluZyBsb2dnaW5nX2xldmVsKDB4JTA4eClcbiIsIGxvZ2dpbmdfbGV2ZWwpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jLCAmbXB0MnNhc19pb2NfbGlzdCwgbGlzdCkKKwkJaW9jLT5sb2dnaW5nX2xldmVsID0gbG9nZ2luZ19sZXZlbDsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9wYXJhbV9jYWxsKGxvZ2dpbmdfbGV2ZWwsIHNjc2loX3NldF9kZWJ1Z19sZXZlbCwgcGFyYW1fZ2V0X2ludCwKKyAgICAmbG9nZ2luZ19sZXZlbCwgMDY0NCk7CisKKy8qKgorICogX3Njc2loX3NyY2hfYm9vdF9zYXNfYWRkcmVzcyAtIHNlYXJjaCBiYXNlZCBvbiBzYXNfYWRkcmVzcworICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcworICogQGJvb3RfZGV2aWNlOiBib290IGRldmljZSBvYmplY3QgZnJvbSBiaW9zIHBhZ2UgMgorICoKKyAqIFJldHVybnMgMSB3aGVuIHRoZXJlJ3MgYSBtYXRjaCwgMCBtZWFucyBubyBtYXRjaC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19zY3NpaF9zcmNoX2Jvb3Rfc2FzX2FkZHJlc3ModTY0IHNhc19hZGRyZXNzLAorICAgIE1waTJCb290RGV2aWNlU2FzV3dpZF90ICpib290X2RldmljZSkKK3sKKwlyZXR1cm4gKHNhc19hZGRyZXNzID09IGxlNjRfdG9fY3B1KGJvb3RfZGV2aWNlLT5TQVNBZGRyZXNzKSkgPyAgMSA6IDA7Cit9CisKKy8qKgorICogX3Njc2loX3NyY2hfYm9vdF9kZXZpY2VfbmFtZSAtIHNlYXJjaCBiYXNlZCBvbiBkZXZpY2UgbmFtZQorICogQGRldmljZV9uYW1lOiBkZXZpY2UgbmFtZSBzcGVjaWZpZWQgaW4gSU5ERU5USUZZIGZyYW0KKyAqIEBib290X2RldmljZTogYm9vdCBkZXZpY2Ugb2JqZWN0IGZyb20gYmlvcyBwYWdlIDIKKyAqCisgKiBSZXR1cm5zIDEgd2hlbiB0aGVyZSdzIGEgbWF0Y2gsIDAgbWVhbnMgbm8gbWF0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citfc2NzaWhfc3JjaF9ib290X2RldmljZV9uYW1lKHU2NCBkZXZpY2VfbmFtZSwKKyAgICBNcGkyQm9vdERldmljZURldmljZU5hbWVfdCAqYm9vdF9kZXZpY2UpCit7CisJcmV0dXJuIChkZXZpY2VfbmFtZSA9PSBsZTY0X3RvX2NwdShib290X2RldmljZS0+RGV2aWNlTmFtZSkpID8gMSA6IDA7Cit9CisKKy8qKgorICogX3Njc2loX3NyY2hfYm9vdF9lbmNsX3Nsb3QgLSBzZWFyY2ggYmFzZWQgb24gZW5jbG9zdXJlX2xvZ2ljYWxfaWQvc2xvdAorICogQGVuY2xvc3VyZV9sb2dpY2FsX2lkOiBlbmNsb3N1cmUgbG9naWNhbCBpZAorICogQHNsb3RfbnVtYmVyOiBzbG90IG51bWJlcgorICogQGJvb3RfZGV2aWNlOiBib290IGRldmljZSBvYmplY3QgZnJvbSBiaW9zIHBhZ2UgMgorICoKKyAqIFJldHVybnMgMSB3aGVuIHRoZXJlJ3MgYSBtYXRjaCwgMCBtZWFucyBubyBtYXRjaC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19zY3NpaF9zcmNoX2Jvb3RfZW5jbF9zbG90KHU2NCBlbmNsb3N1cmVfbG9naWNhbF9pZCwgdTE2IHNsb3RfbnVtYmVyLAorICAgIE1waTJCb290RGV2aWNlRW5jbG9zdXJlU2xvdF90ICpib290X2RldmljZSkKK3sKKwlyZXR1cm4gKGVuY2xvc3VyZV9sb2dpY2FsX2lkID09IGxlNjRfdG9fY3B1KGJvb3RfZGV2aWNlLT4KKwkgICAgRW5jbG9zdXJlTG9naWNhbElEKSAmJiBzbG90X251bWJlciA9PSBsZTE2X3RvX2NwdShib290X2RldmljZS0+CisJICAgIFNsb3ROdW1iZXIpKSA/IDEgOiAwOworfQorCisvKioKKyAqIF9zY3NpaF9pc19ib290X2RldmljZSAtIHNlYXJjaCBmb3IgbWF0Y2hpbmcgYm9vdCBkZXZpY2UuCisgKiBAc2FzX2FkZHJlc3M6IHNhcyBhZGRyZXNzCisgKiBAZGV2aWNlX25hbWU6IGRldmljZSBuYW1lIHNwZWNpZmllZCBpbiBJTkRFTlRJRlkgZnJhbQorICogQGVuY2xvc3VyZV9sb2dpY2FsX2lkOiBlbmNsb3N1cmUgbG9naWNhbCBpZAorICogQHNsb3RfbnVtYmVyOiBzbG90IG51bWJlcgorICogQGZvcm06IHNwZWNpZmllcyBib290IGRldmljZSBmb3JtCisgKiBAYm9vdF9kZXZpY2U6IGJvb3QgZGV2aWNlIG9iamVjdCBmcm9tIGJpb3MgcGFnZSAyCisgKgorICogUmV0dXJucyAxIHdoZW4gdGhlcmUncyBhIG1hdGNoLCAwIG1lYW5zIG5vIG1hdGNoLgorICovCitzdGF0aWMgaW50Citfc2NzaWhfaXNfYm9vdF9kZXZpY2UodTY0IHNhc19hZGRyZXNzLCB1NjQgZGV2aWNlX25hbWUsCisgICAgdTY0IGVuY2xvc3VyZV9sb2dpY2FsX2lkLCB1MTYgc2xvdCwgdTggZm9ybSwKKyAgICBNcGkyQmlvc1BhZ2UyQm9vdERldmljZV90ICpib290X2RldmljZSkKK3sKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChmb3JtKSB7CisJY2FzZSBNUEkyX0JJT1NQQUdFMl9GT1JNX1NBU19XV0lEOgorCQlpZiAoIXNhc19hZGRyZXNzKQorCQkJYnJlYWs7CisJCXJjID0gX3Njc2loX3NyY2hfYm9vdF9zYXNfYWRkcmVzcygKKwkJICAgIHNhc19hZGRyZXNzLCAmYm9vdF9kZXZpY2UtPlNhc1d3aWQpOworCQlicmVhazsKKwljYXNlIE1QSTJfQklPU1BBR0UyX0ZPUk1fRU5DTE9TVVJFX1NMT1Q6CisJCWlmICghZW5jbG9zdXJlX2xvZ2ljYWxfaWQpCisJCQlicmVhazsKKwkJcmMgPSBfc2NzaWhfc3JjaF9ib290X2VuY2xfc2xvdCgKKwkJICAgIGVuY2xvc3VyZV9sb2dpY2FsX2lkLAorCQkgICAgc2xvdCwgJmJvb3RfZGV2aWNlLT5FbmNsb3N1cmVTbG90KTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0JJT1NQQUdFMl9GT1JNX0RFVklDRV9OQU1FOgorCQlpZiAoIWRldmljZV9uYW1lKQorCQkJYnJlYWs7CisJCXJjID0gX3Njc2loX3NyY2hfYm9vdF9kZXZpY2VfbmFtZSgKKwkJICAgIGRldmljZV9uYW1lLCAmYm9vdF9kZXZpY2UtPkRldmljZU5hbWUpOworCQlicmVhazsKKwljYXNlIE1QSTJfQklPU1BBR0UyX0ZPUk1fTk9fREVWSUNFX1NQRUNJRklFRDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9zY3NpaF9kZXRlcm1pbmVfYm9vdF9kZXZpY2UgLSBkZXRlcm1pbmUgYm9vdCBkZXZpY2UuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBkZXZpY2U6IGVpdGhlciBzYXNfZGV2aWNlIG9yIHJhaWRfZGV2aWNlIG9iamVjdAorICogQGlzX3JhaWQ6IFtmbGFnXSAxID0gcmFpZCBvYmplY3QsIDAgPSBzYXMgb2JqZWN0CisgKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZGV2aWNlIHNob3VsZCBiZSBmaXJzdCByZXBvcnRlZCBkZXZpY2UgdG8KKyAqIHRvIHNjc2ktbWwgb3Igc2FzIHRyYW5zcG9ydCwgdGhpcyBwdXJwb3NlIGlzIGZvciBwZXJzaXN0YW50IGJvb3QgZGV2aWNlLgorICogVGhlcmUgYXJlIHByaW1hcnksIGFsdGVybmF0ZSwgYW5kIGN1cnJlbnQgZW50cmllcyBpbiBiaW9zIHBhZ2UgMi4gVGhlIG9yZGVyCisgKiBwcmlvcml0eSBpcyBwcmltYXJ5LCBhbHRlcm5hdGUsIHRoZW4gY3VycmVudC4gIFRoaXMgcm91dGluZSBzYXZlcworICogdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIG9iamVjdCBhbmQgaXNfcmFpZCBmbGFnIGluIHRoZSBpb2Mgb2JqZWN0LgorICogVGhlIHNhdmVkIGRhdGEgdG8gYmUgdXNlZCBsYXRlciBpbiBfc2NzaWhfcHJvYmVfYm9vdF9kZXZpY2VzKCkuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZGV0ZXJtaW5lX2Jvb3RfZGV2aWNlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB2b2lkICpkZXZpY2UsIHU4IGlzX3JhaWQpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXU2NCBzYXNfYWRkcmVzczsKKwl1NjQgZGV2aWNlX25hbWU7CisJdTY0IGVuY2xvc3VyZV9sb2dpY2FsX2lkOworCXUxNiBzbG90OworCisJIC8qIG9ubHkgcHJvY2VzcyB0aGlzIGZ1bmN0aW9uIHdoZW4gZHJpdmVyIGxvYWRzICovCisJaWYgKCFpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3JhaWQpIHsKKwkJc2FzX2RldmljZSA9IGRldmljZTsKKwkJc2FzX2FkZHJlc3MgPSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzczsKKwkJZGV2aWNlX25hbWUgPSBzYXNfZGV2aWNlLT5kZXZpY2VfbmFtZTsKKwkJZW5jbG9zdXJlX2xvZ2ljYWxfaWQgPSBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZDsKKwkJc2xvdCA9IHNhc19kZXZpY2UtPnNsb3Q7CisJfSBlbHNlIHsKKwkJcmFpZF9kZXZpY2UgPSBkZXZpY2U7CisJCXNhc19hZGRyZXNzID0gcmFpZF9kZXZpY2UtPnd3aWQ7CisJCWRldmljZV9uYW1lID0gMDsKKwkJZW5jbG9zdXJlX2xvZ2ljYWxfaWQgPSAwOworCQlzbG90ID0gMDsKKwl9CisKKwlpZiAoIWlvYy0+cmVxX2Jvb3RfZGV2aWNlLmRldmljZSkgeworCQlpZiAoX3Njc2loX2lzX2Jvb3RfZGV2aWNlKHNhc19hZGRyZXNzLCBkZXZpY2VfbmFtZSwKKwkJICAgIGVuY2xvc3VyZV9sb2dpY2FsX2lkLCBzbG90LAorCQkgICAgKGlvYy0+Ymlvc19wZzIuUmVxQm9vdERldmljZUZvcm0gJgorCQkgICAgTVBJMl9CSU9TUEFHRTJfRk9STV9NQVNLKSwKKwkJICAgICZpb2MtPmJpb3NfcGcyLlJlcXVlc3RlZEJvb3REZXZpY2UpKSB7CisJCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJICAgIiVzOiByZXFfYm9vdF9kZXZpY2UoMHglMDE2bGx4KVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpKTsKKwkJCWlvYy0+cmVxX2Jvb3RfZGV2aWNlLmRldmljZSA9IGRldmljZTsKKwkJCWlvYy0+cmVxX2Jvb3RfZGV2aWNlLmlzX3JhaWQgPSBpc19yYWlkOworCQl9CisJfQorCisJaWYgKCFpb2MtPnJlcV9hbHRfYm9vdF9kZXZpY2UuZGV2aWNlKSB7CisJCWlmIChfc2NzaWhfaXNfYm9vdF9kZXZpY2Uoc2FzX2FkZHJlc3MsIGRldmljZV9uYW1lLAorCQkgICAgZW5jbG9zdXJlX2xvZ2ljYWxfaWQsIHNsb3QsCisJCSAgICAoaW9jLT5iaW9zX3BnMi5SZXFBbHRCb290RGV2aWNlRm9ybSAmCisJCSAgICBNUEkyX0JJT1NQQUdFMl9GT1JNX01BU0spLAorCQkgICAgJmlvYy0+Ymlvc19wZzIuUmVxdWVzdGVkQWx0Qm9vdERldmljZSkpIHsKKwkJCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCQkgICAiJXM6IHJlcV9hbHRfYm9vdF9kZXZpY2UoMHglMDE2bGx4KVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpKTsKKwkJCWlvYy0+cmVxX2FsdF9ib290X2RldmljZS5kZXZpY2UgPSBkZXZpY2U7CisJCQlpb2MtPnJlcV9hbHRfYm9vdF9kZXZpY2UuaXNfcmFpZCA9IGlzX3JhaWQ7CisJCX0KKwl9CisKKwlpZiAoIWlvYy0+Y3VycmVudF9ib290X2RldmljZS5kZXZpY2UpIHsKKwkJaWYgKF9zY3NpaF9pc19ib290X2RldmljZShzYXNfYWRkcmVzcywgZGV2aWNlX25hbWUsCisJCSAgICBlbmNsb3N1cmVfbG9naWNhbF9pZCwgc2xvdCwKKwkJICAgIChpb2MtPmJpb3NfcGcyLkN1cnJlbnRCb290RGV2aWNlRm9ybSAmCisJCSAgICBNUEkyX0JJT1NQQUdFMl9GT1JNX01BU0spLAorCQkgICAgJmlvYy0+Ymlvc19wZzIuQ3VycmVudEJvb3REZXZpY2UpKSB7CisJCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJICAgIiVzOiBjdXJyZW50X2Jvb3RfZGV2aWNlKDB4JTAxNmxseClcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CisJCQlpb2MtPmN1cnJlbnRfYm9vdF9kZXZpY2UuZGV2aWNlID0gZGV2aWNlOworCQkJaW9jLT5jdXJyZW50X2Jvb3RfZGV2aWNlLmlzX3JhaWQgPSBpc19yYWlkOworCQl9CisJfQorfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzIC0gc2FzIGRldmljZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcworICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnNhc19kZXZpY2VfbG9jaworICoKKyAqIFRoaXMgc2VhcmNoZXMgZm9yIHNhc19kZXZpY2UgYmFzZWQgb24gc2FzX2FkZHJlc3MsIHRoZW4gcmV0dXJuIHNhc19kZXZpY2UKKyAqIG9iamVjdC4KKyAqLworc3RydWN0IF9zYXNfZGV2aWNlICoKK21wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1NjQgc2FzX2FkZHJlc3MpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqcjsKKworCXIgPSBOVUxMOworCS8qIGNoZWNrIHRoZSBzYXNfZGV2aWNlX2luaXRfbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2RldmljZSwgJmlvYy0+c2FzX2RldmljZV9pbml0X2xpc3QsCisJICAgIGxpc3QpIHsKKwkJaWYgKHNhc19kZXZpY2UtPnNhc19hZGRyZXNzICE9IHNhc19hZGRyZXNzKQorCQkJY29udGludWU7CisJCXIgPSBzYXNfZGV2aWNlOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0aGVuIGNoZWNrIHRoZSBzYXNfZGV2aWNlX2xpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhc19kZXZpY2UsICZpb2MtPnNhc19kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoc2FzX2RldmljZS0+c2FzX2FkZHJlc3MgIT0gc2FzX2FkZHJlc3MpCisJCQljb250aW51ZTsKKwkJciA9IHNhc19kZXZpY2U7CisJCWdvdG8gb3V0OworCX0KKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUgLSBzYXMgZGV2aWNlIHNlYXJjaAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+c2FzX2RldmljZV9sb2NrCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3Igc2FzX2RldmljZSBiYXNlZCBvbiBzYXNfYWRkcmVzcywgdGhlbiByZXR1cm4gc2FzX2RldmljZQorICogb2JqZWN0LgorICovCitzdGF0aWMgc3RydWN0IF9zYXNfZGV2aWNlICoKK19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UsICpyOworCisJciA9IE5VTEw7CisJaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZGV2aWNlLCAmaW9jLT5zYXNfZGV2aWNlX2luaXRfbGlzdCwKKwkJICAgIGxpc3QpIHsKKwkJCWlmIChzYXNfZGV2aWNlLT5oYW5kbGUgIT0gaGFuZGxlKQorCQkJCWNvbnRpbnVlOworCQkJciA9IHNhc19kZXZpY2U7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2RldmljZSwgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CisJCQlpZiAoc2FzX2RldmljZS0+aGFuZGxlICE9IGhhbmRsZSkKKwkJCQljb250aW51ZTsKKwkJCXIgPSBzYXNfZGV2aWNlOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlIC0gcmVtb3ZlIHNhc19kZXZpY2UgZnJvbSBsaXN0LgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2RldmljZTogdGhlIHNhc19kZXZpY2Ugb2JqZWN0CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNhc19kZXZpY2VfbG9jay4KKyAqCisgKiBSZW1vdmluZyBvYmplY3QgYW5kIGZyZWVpbmcgYXNzb2NpYXRlZCBtZW1vcnkgZnJvbSB0aGUgaW9jLT5zYXNfZGV2aWNlX2xpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnNhc19kZXZpY2UtPmxpc3QpOworCW1lbXNldChzYXNfZGV2aWNlLCAwLCBzaXplb2Yoc3RydWN0IF9zYXNfZGV2aWNlKSk7CisJa2ZyZWUoc2FzX2RldmljZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX2RldmljZV9hZGQgLSBpbnNlcnQgc2FzX2RldmljZSB0byB0aGUgbGlzdC4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19kZXZpY2U6IHRoZSBzYXNfZGV2aWNlIG9iamVjdAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zYXNfZGV2aWNlX2xvY2suCisgKgorICogQWRkaW5nIG5ldyBvYmplY3QgdG8gdGhlIGlvYy0+c2FzX2RldmljZV9saXN0LgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19kZXZpY2VfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlLCBwYXJlbnRfaGFuZGxlOworCXU2NCBzYXNfYWRkcmVzczsKKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBoYW5kbGUiCisJICAgICIoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkgICAgc2FzX2RldmljZS0+aGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwloYW5kbGUgPSBzYXNfZGV2aWNlLT5oYW5kbGU7CisJcGFyZW50X2hhbmRsZSA9IHNhc19kZXZpY2UtPnBhcmVudF9oYW5kbGU7CisJc2FzX2FkZHJlc3MgPSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzczsKKwlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgaGFuZGxlLCBwYXJlbnRfaGFuZGxlKSkgeworCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwl9IGVsc2UgaWYgKCFzYXNfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywgc2FzX2FkZHJlc3MsIHBhcmVudF9oYW5kbGUpOworCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwl9Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19kZXZpY2VfaW5pdF9hZGQgLSBpbnNlcnQgc2FzX2RldmljZSB0byB0aGUgbGlzdC4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19kZXZpY2U6IHRoZSBzYXNfZGV2aWNlIG9iamVjdAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zYXNfZGV2aWNlX2xvY2suCisgKgorICogQWRkaW5nIG5ldyBvYmplY3QgYXQgZHJpdmVyIGxvYWQgdGltZSB0byB0aGUgaW9jLT5zYXNfZGV2aWNlX2luaXRfbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfZGV2aWNlX2luaXRfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBoYW5kbGUiCisJICAgICIoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkgICAgc2FzX2RldmljZS0+aGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2luaXRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlfc2NzaWhfZGV0ZXJtaW5lX2Jvb3RfZGV2aWNlKGlvYywgc2FzX2RldmljZSwgMCk7Cit9CisKKy8qKgorICogbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZSAtIGV4cGFuZGVyIGRldmljZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZXhwYW5kZXIgaGFuZGxlIChhc3NpZ25lZCBieSBmaXJtd2FyZSkKKyAqIENvbnRleHQ6IENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGFjcXVpcmUgaW9jLT5zYXNfZGV2aWNlX2xvY2sKKyAqCisgKiBUaGlzIHNlYXJjaGVzIGZvciBleHBhbmRlciBkZXZpY2UgYmFzZWQgb24gaGFuZGxlLCB0aGVuIHJldHVybnMgdGhlCisgKiBzYXNfbm9kZSBvYmplY3QuCisgKi8KK3N0cnVjdCBfc2FzX25vZGUgKgorbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyLCAqcjsKKworCXIgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2V4cGFuZGVyLCAmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoc2FzX2V4cGFuZGVyLT5oYW5kbGUgIT0gaGFuZGxlKQorCQkJY29udGludWU7CisJCXIgPSBzYXNfZXhwYW5kZXI7CisJCWdvdG8gb3V0OworCX0KKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaWQgLSByYWlkIGRldmljZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGlkOiBzYXMgZGV2aWNlIHRhcmdldCBpZAorICogQGNoYW5uZWw6IHNhcyBkZXZpY2UgY2hhbm5lbAorICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnJhaWRfZGV2aWNlX2xvY2sKKyAqCisgKiBUaGlzIHNlYXJjaGVzIGZvciByYWlkX2RldmljZSBiYXNlZCBvbiB0YXJnZXQgaWQsIHRoZW4gcmV0dXJuIHJhaWRfZGV2aWNlCisgKiBvYmplY3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICoKK19zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IGlkLCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSwgKnI7CisKKwlyID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhaWRfZGV2aWNlLCAmaW9jLT5yYWlkX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChyYWlkX2RldmljZS0+aWQgPT0gaWQgJiYgcmFpZF9kZXZpY2UtPmNoYW5uZWwgPT0gY2hhbm5lbCkgeworCQkJciA9IHJhaWRfZGV2aWNlOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlIC0gcmFpZCBkZXZpY2Ugc2VhcmNoCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlIChhc3NpZ25lZCBieSBmaXJtd2FyZSkKKyAqIENvbnRleHQ6IENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGFjcXVpcmUgaW9jLT5yYWlkX2RldmljZV9sb2NrCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3IgcmFpZF9kZXZpY2UgYmFzZWQgb24gaGFuZGxlLCB0aGVuIHJldHVybiByYWlkX2RldmljZQorICogb2JqZWN0LgorICovCitzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqCitfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqcjsKKworCXIgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmFpZF9kZXZpY2UsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJhaWRfZGV2aWNlLT5oYW5kbGUgIT0gaGFuZGxlKQorCQkJY29udGludWU7CisJCXIgPSByYWlkX2RldmljZTsKKwkJZ290byBvdXQ7CisJfQorCisgb3V0OgorCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X3d3aWQgLSByYWlkIGRldmljZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogc2FzIGRldmljZSBoYW5kbGUgKGFzc2lnbmVkIGJ5IGZpcm13YXJlKQorICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnJhaWRfZGV2aWNlX2xvY2sKKyAqCisgKiBUaGlzIHNlYXJjaGVzIGZvciByYWlkX2RldmljZSBiYXNlZCBvbiB3d2lkLCB0aGVuIHJldHVybiByYWlkX2RldmljZQorICogb2JqZWN0LgorICovCitzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqCitfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV93d2lkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHd3aWQpCit7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UsICpyOworCisJciA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyYWlkX2RldmljZSwgJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAocmFpZF9kZXZpY2UtPnd3aWQgIT0gd3dpZCkKKwkJCWNvbnRpbnVlOworCQlyID0gcmFpZF9kZXZpY2U7CisJCWdvdG8gb3V0OworCX0KKworIG91dDoKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBfc2NzaWhfcmFpZF9kZXZpY2VfYWRkIC0gYWRkIHJhaWRfZGV2aWNlIG9iamVjdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcmFpZF9kZXZpY2U6IHJhaWRfZGV2aWNlIG9iamVjdAorICoKKyAqIFRoaXMgaXMgYWRkZWQgdG8gdGhlIHJhaWRfZGV2aWNlX2xpc3QgbGluayBsaXN0LgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3JhaWRfZGV2aWNlX2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBoYW5kbGUiCisJICAgICIoMHglMDR4KSwgd3dpZCgweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCSAgICByYWlkX2RldmljZS0+aGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKXJhaWRfZGV2aWNlLT53d2lkKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcmFpZF9kZXZpY2UtPmxpc3QsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUgLSBkZWxldGUgcmFpZF9kZXZpY2Ugb2JqZWN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByYWlkX2RldmljZTogcmFpZF9kZXZpY2Ugb2JqZWN0CisgKgorICogVGhpcyBpcyByZW1vdmVkIGZyb20gdGhlIHJhaWRfZGV2aWNlX2xpc3QgbGluayBsaXN0LgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcmFpZF9kZXZpY2UtPmxpc3QpOworCW1lbXNldChyYWlkX2RldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBfcmFpZF9kZXZpY2UpKTsKKwlrZnJlZShyYWlkX2RldmljZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzIC0gZXhwYW5kZXIgZGV2aWNlIHNlYXJjaAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2FkZHJlc3M6IHNhcyBhZGRyZXNzCisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+c2FzX25vZGVfbG9jay4KKyAqCisgKiBUaGlzIHNlYXJjaGVzIGZvciBleHBhbmRlciBkZXZpY2UgYmFzZWQgb24gc2FzX2FkZHJlc3MsIHRoZW4gcmV0dXJucyB0aGUKKyAqIHNhc19ub2RlIG9iamVjdC4KKyAqLworc3RydWN0IF9zYXNfbm9kZSAqCittcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3Moc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHU2NCBzYXNfYWRkcmVzcykKK3sKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXIsICpyOworCisJciA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZXhwYW5kZXIsICZpb2MtPnNhc19leHBhbmRlcl9saXN0LCBsaXN0KSB7CisJCWlmIChzYXNfZXhwYW5kZXItPnNhc19hZGRyZXNzICE9IHNhc19hZGRyZXNzKQorCQkJY29udGludWU7CisJCXIgPSBzYXNfZXhwYW5kZXI7CisJCWdvdG8gb3V0OworCX0KKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX3Njc2loX2V4cGFuZGVyX25vZGVfYWRkIC0gaW5zZXJ0IGV4cGFuZGVyIGRldmljZSB0byB0aGUgbGlzdC4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19leHBhbmRlcjogdGhlIHNhc19kZXZpY2Ugb2JqZWN0CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNhc19ub2RlX2xvY2suCisgKgorICogQWRkaW5nIG5ldyBvYmplY3QgdG8gdGhlIGlvYy0+c2FzX2V4cGFuZGVyX2xpc3QuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZXhwYW5kZXJfbm9kZV9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnNhc19leHBhbmRlci0+bGlzdCwgJmlvYy0+c2FzX2V4cGFuZGVyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9pc19lbmRfZGV2aWNlIC0gZGV0ZXJtaW5lcyBpZiBkZXZpY2UgaXMgYW4gZW5kIGRldmljZQorICogQGRldmljZV9pbmZvOiBiaXRmaWVsZCBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZS4KKyAqIENvbnRleHQ6IG5vbmUKKyAqCisgKiBSZXR1cm5zIDEgaWYgZW5kIGRldmljZS4KKyAqLworc3RhdGljIGludAorX3Njc2loX2lzX2VuZF9kZXZpY2UodTMyIGRldmljZV9pbmZvKQoreworCWlmIChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX0VORF9ERVZJQ0UgJiYKKwkJKChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpIHwKKwkJKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU1RQX1RBUkdFVCkgfAorCQkoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TQVRBX0RFVklDRSkpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2NzaV9sb29rdXBfbG9jay4KKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKK19zY3NpaF9zY3NpX2xvb2t1cF9nZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNjbWQ7Cit9CisKKy8qKgorICogbXB0c2NzaWhfZ2V0Y2xlYXJfc2NzaV9sb29rdXAgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2NzaV9sb29rdXBfbG9jay4KKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIsIGFzIHdlbGwgYXMgY2xlYXJpbmcgdGhlIHNjbWQgcG9pbnRlci4KKyAqLworc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKgorX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOworCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzY21kOworfQorCisvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9zZXQgLSB1cGRhdGVzIHNjbWQgZW50cnkgaW4gbG9va3VwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCisgKgorICogVGhpcyB3aWxsIHNhdmUgc2NtZCBwb2ludGVyIGluIHRoZSBzY3NpX2xvb2t1cCBhcnJheS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zY3NpX2xvb2t1cF9zZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKKyAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IHNjbWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX3Njc2lfbG9va3VwX2ZpbmRfYnlfc2NtZCAtIHNjbWQgbG9va3VwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCisgKgorICogVGhpcyB3aWxsIHNlYXJjaCBmb3IgYSBzY21kIHBvaW50ZXIgaW4gdGhlIHNjc2lfbG9va3VwIGFycmF5LAorICogcmV0dXJuaW5nIHRoZSByZXZlbGVudCBzbWlkLiAgQSByZXR1cm5lZCB2YWx1ZSBvZiB6ZXJvIG1lYW5zIGludmFsaWQuCisgKi8KK3N0YXRpYyB1MTYKK19zY3NpaF9zY3NpX2xvb2t1cF9maW5kX2J5X3NjbWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2NzaV9jbW5kCisgICAgKnNjbWQpCit7CisJdTE2IHNtaWQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlzbWlkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCA9PSBzY21kKSB7CisJCQlzbWlkID0gaSArIDE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNtaWQ7Cit9CisKKy8qKgorICogX3Njc2loX3Njc2lfbG9va3VwX2ZpbmRfYnlfdGFyZ2V0IC0gc2VhcmNoIGZvciBtYXRjaGluZyBjaGFubmVsOmlkCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBpZDogdGFyZ2V0IGlkCisgKiBAY2hhbm5lbDogY2hhbm5lbAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgorICoKKyAqIFRoaXMgd2lsbCBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgY2hhbm5lbDppZCBpbiB0aGUgc2NzaV9sb29rdXAgYXJyYXksCisgKiByZXR1cm5pbmcgMSBpZiBmb3VuZC4KKyAqLworc3RhdGljIHU4Citfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV90YXJnZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgaWQsCisgICAgaW50IGNoYW5uZWwpCit7CisJdTggZm91bmQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlmb3VuZCA9IDA7CisJZm9yIChpID0gMCA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCQlpZiAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kICYmCisJCSAgICAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmlkID09IGlkICYmCisJCSAgICBpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+Y2hhbm5lbCA9PSBjaGFubmVsKSkgeworCQkJZm91bmQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiBfc2NzaWhfZ2V0X2NoYWluX2J1ZmZlcl9kbWEgLSBvYnRhaW4gYmxvY2sgb2YgY2hhaW5zIChkbWEgYWRkcmVzcykKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHBoeXMgcG9pbnRlciB0byBjaGFpbiBidWZmZXIuCisgKi8KK3N0YXRpYyBkbWFfYWRkcl90Citfc2NzaWhfZ2V0X2NoYWluX2J1ZmZlcl9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlyZXR1cm4gaW9jLT5jaGFpbl9kbWEgKyAoKHNtaWQgLSAxKSAqIChpb2MtPnJlcXVlc3Rfc3ogKgorCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvKSk7Cit9CisKKy8qKgorICogX3Njc2loX2dldF9jaGFpbl9idWZmZXIgLSBvYnRhaW4gYmxvY2sgb2YgY2hhaW5zIGFzc2lnbmVkIHRvIGEgbWYgcmVxdWVzdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICoKKyAqIFJldHVybnMgdmlydCBwb2ludGVyIHRvIGNoYWluIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgKgorX3Njc2loX2dldF9jaGFpbl9idWZmZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlyZXR1cm4gKHZvaWQgKikoaW9jLT5jaGFpbiArICgoc21pZCAtIDEpICogKGlvYy0+cmVxdWVzdF9zeiAqCisJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8pKSk7Cit9CisKKy8qKgorICogX3Njc2loX2J1aWxkX3NjYXR0ZXJfZ2F0aGVyIC0gbWFpbiBzZyBjcmVhdGlvbiByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzY21kOiBzY3NpIGNvbW1hbmQKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBDb250ZXh0OiBub25lLgorICoKKyAqIFRoZSBtYWluIHJvdXRpbmUgdGhhdCBidWlsZHMgc2NhdHRlciBnYXRoZXIgdGFibGUgZnJvbSBhIGdpdmVuCisgKiBzY3NpIHJlcXVlc3Qgc2VudCB2aWEgdGhlIC5xdWV1ZWNvbW1hbmQgbWFpbiBoYW5kbGVyLgorICoKKyAqIFJldHVybnMgMCBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIGVycm9yCisgKi8KK3N0YXRpYyBpbnQKK19zY3NpaF9idWlsZF9zY2F0dGVyX2dhdGhlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdTE2IHNtaWQpCit7CisJTXBpMlNDU0lJT1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJZG1hX2FkZHJfdCBjaGFpbl9kbWE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zY21kOworCXZvaWQgKnNnX2xvY2FsLCAqY2hhaW47CisJdTMyIGNoYWluX29mZnNldDsKKwl1MzIgY2hhaW5fbGVuZ3RoOworCXUzMiBjaGFpbl9mbGFnczsKKwl1MzIgc2dlc19sZWZ0OworCXUzMiBzZ2VzX2luX3NlZ21lbnQ7CisJdTMyIHNnbF9mbGFnczsKKwl1MzIgc2dsX2ZsYWdzX2xhc3RfZWxlbWVudDsKKwl1MzIgc2dsX2ZsYWdzX2VuZF9idWZmZXI7CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisKKwkvKiBpbml0IHNjYXR0ZXIgZ2F0aGVyIGZsYWdzICovCisJc2dsX2ZsYWdzID0gTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQ7CisJaWYgKHNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXNnbF9mbGFncyB8PSBNUEkyX1NHRV9GTEFHU19IT1NUX1RPX0lPQzsKKwlzZ2xfZmxhZ3NfbGFzdF9lbGVtZW50ID0gKHNnbF9mbGFncyB8IE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCkKKwkgICAgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJc2dsX2ZsYWdzX2VuZF9idWZmZXIgPSAoc2dsX2ZsYWdzIHwgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUKQorCSAgICA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisKKwlzZ19zY21kID0gc2NzaV9zZ2xpc3Qoc2NtZCk7CisJc2dlc19sZWZ0ID0gc2NzaV9kbWFfbWFwKHNjbWQpOworCWlmICghc2dlc19sZWZ0KSB7CisJCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzY21kLT5kZXZpY2UsICJwY2lfbWFwX3NnIgorCQkiIGZhaWxlZDogcmVxdWVzdCBmb3IgJWQgYnl0ZXMhXG4iLCBzY3NpX2J1ZmZsZW4oc2NtZCkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzZ19sb2NhbCA9ICZtcGlfcmVxdWVzdC0+U0dMOworCXNnZXNfaW5fc2VnbWVudCA9IGlvYy0+bWF4X3NnZXNfaW5fbWFpbl9tZXNzYWdlOworCWlmIChzZ2VzX2xlZnQgPD0gc2dlc19pbl9zZWdtZW50KQorCQlnb3RvIGZpbGxfaW5fbGFzdF9zZWdtZW50OworCisJbXBpX3JlcXVlc3QtPkNoYWluT2Zmc2V0ID0gKG9mZnNldG9mKE1waTJTQ1NJSU9SZXF1ZXN0X3QsIFNHTCkgKworCSAgICAoc2dlc19pbl9zZWdtZW50ICogaW9jLT5zZ2Vfc2l6ZSkpLzQ7CisKKwkvKiBmaWxsIGluIG1haW4gbWVzc2FnZSBzZWdtZW50IHdoZW4gdGhlcmUgaXMgYSBjaGFpbiBmb2xsb3dpbmcgKi8KKwl3aGlsZSAoc2dlc19pbl9zZWdtZW50KSB7CisJCWlmIChzZ2VzX2luX3NlZ21lbnQgPT0gMSkKKwkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHNnX2xvY2FsLAorCQkJICAgIHNnbF9mbGFnc19sYXN0X2VsZW1lbnQgfCBzZ19kbWFfbGVuKHNnX3NjbWQpLAorCQkJICAgIHNnX2RtYV9hZGRyZXNzKHNnX3NjbWQpKTsKKwkJZWxzZQorCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoc2dfbG9jYWwsIHNnbF9mbGFncyB8CisJCQkgICAgc2dfZG1hX2xlbihzZ19zY21kKSwgc2dfZG1hX2FkZHJlc3Moc2dfc2NtZCkpOworCQlzZ19zY21kID0gc2dfbmV4dChzZ19zY21kKTsKKwkJc2dfbG9jYWwgKz0gaW9jLT5zZ2Vfc2l6ZTsKKwkJc2dlc19sZWZ0LS07CisJCXNnZXNfaW5fc2VnbWVudC0tOworCX0KKworCS8qIGluaXRpYWxpemluZyB0aGUgY2hhaW4gZmxhZ3MgYW5kIHBvaW50ZXJzICovCisJY2hhaW5fZmxhZ3MgPSBNUEkyX1NHRV9GTEFHU19DSEFJTl9FTEVNRU5UIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCWNoYWluID0gX3Njc2loX2dldF9jaGFpbl9idWZmZXIoaW9jLCBzbWlkKTsKKwljaGFpbl9kbWEgPSBfc2NzaWhfZ2V0X2NoYWluX2J1ZmZlcl9kbWEoaW9jLCBzbWlkKTsKKwlkbyB7CisJCXNnZXNfaW5fc2VnbWVudCA9IChzZ2VzX2xlZnQgPD0KKwkJICAgIGlvYy0+bWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZSkgPyBzZ2VzX2xlZnQgOgorCQkgICAgaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlOworCQljaGFpbl9vZmZzZXQgPSAoc2dlc19sZWZ0ID09IHNnZXNfaW5fc2VnbWVudCkgPworCQkgICAgMCA6IChzZ2VzX2luX3NlZ21lbnQgKiBpb2MtPnNnZV9zaXplKS80OworCQljaGFpbl9sZW5ndGggPSBzZ2VzX2luX3NlZ21lbnQgKiBpb2MtPnNnZV9zaXplOworCQlpZiAoY2hhaW5fb2Zmc2V0KSB7CisJCQljaGFpbl9vZmZzZXQgPSBjaGFpbl9vZmZzZXQgPDwKKwkJCSAgICBNUEkyX1NHRV9DSEFJTl9PRkZTRVRfU0hJRlQ7CisJCQljaGFpbl9sZW5ndGggKz0gaW9jLT5zZ2Vfc2l6ZTsKKwkJfQorCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShzZ19sb2NhbCwgY2hhaW5fZmxhZ3MgfCBjaGFpbl9vZmZzZXQgfAorCQkgICAgY2hhaW5fbGVuZ3RoLCBjaGFpbl9kbWEpOworCQlzZ19sb2NhbCA9IGNoYWluOworCQlpZiAoIWNoYWluX29mZnNldCkKKwkJCWdvdG8gZmlsbF9pbl9sYXN0X3NlZ21lbnQ7CisKKwkJLyogZmlsbCBpbiBjaGFpbiBzZWdtZW50cyAqLworCQl3aGlsZSAoc2dlc19pbl9zZWdtZW50KSB7CisJCQlpZiAoc2dlc19pbl9zZWdtZW50ID09IDEpCisJCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoc2dfbG9jYWwsCisJCQkJICAgIHNnbF9mbGFnc19sYXN0X2VsZW1lbnQgfAorCQkJCSAgICBzZ19kbWFfbGVuKHNnX3NjbWQpLAorCQkJCSAgICBzZ19kbWFfYWRkcmVzcyhzZ19zY21kKSk7CisJCQllbHNlCisJCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoc2dfbG9jYWwsIHNnbF9mbGFncyB8CisJCQkJICAgIHNnX2RtYV9sZW4oc2dfc2NtZCksCisJCQkJICAgIHNnX2RtYV9hZGRyZXNzKHNnX3NjbWQpKTsKKwkJCXNnX3NjbWQgPSBzZ19uZXh0KHNnX3NjbWQpOworCQkJc2dfbG9jYWwgKz0gaW9jLT5zZ2Vfc2l6ZTsKKwkJCXNnZXNfbGVmdC0tOworCQkJc2dlc19pbl9zZWdtZW50LS07CisJCX0KKworCQljaGFpbl9kbWEgKz0gaW9jLT5yZXF1ZXN0X3N6OworCQljaGFpbiArPSBpb2MtPnJlcXVlc3Rfc3o7CisJfSB3aGlsZSAoMSk7CisKKworIGZpbGxfaW5fbGFzdF9zZWdtZW50OgorCisJLyogZmlsbCB0aGUgbGFzdCBzZWdtZW50ICovCisJd2hpbGUgKHNnZXNfbGVmdCkgeworCQlpZiAoc2dlc19sZWZ0ID09IDEpCisJCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShzZ19sb2NhbCwgc2dsX2ZsYWdzX2VuZF9idWZmZXIgfAorCQkJICAgIHNnX2RtYV9sZW4oc2dfc2NtZCksIHNnX2RtYV9hZGRyZXNzKHNnX3NjbWQpKTsKKwkJZWxzZQorCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoc2dfbG9jYWwsIHNnbF9mbGFncyB8CisJCQkgICAgc2dfZG1hX2xlbihzZ19zY21kKSwgc2dfZG1hX2FkZHJlc3Moc2dfc2NtZCkpOworCQlzZ19zY21kID0gc2dfbmV4dChzZ19zY21kKTsKKwkJc2dfbG9jYWwgKz0gaW9jLT5zZ2Vfc2l6ZTsKKwkJc2dlc19sZWZ0LS07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqIEBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAorICoKKyAqIFJldHVybnMgcXVldWUgZGVwdGguCisgKi8KK3N0YXRpYyBpbnQKK3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OworCWludCBtYXhfZGVwdGg7CisJaW50IHRhZ190eXBlOworCisJbWF4X2RlcHRoID0gc2hvc3QtPmNhbl9xdWV1ZTsKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCW1heF9kZXB0aCA9IDE7CisJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKKwkJcWRlcHRoID0gbWF4X2RlcHRoOworCXRhZ190eXBlID0gKHFkZXB0aCA9PSAxKSA/IDAgOiBNU0dfU0lNUExFX1RBRzsKKwlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCB0YWdfdHlwZSwgcWRlcHRoKTsKKworCWlmIChzZGV2LT5pbnF1aXJ5X2xlbiA+IDcpCisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgInFkZXB0aCglZCksIHRhZ2dlZCglZCksICIKKwkJInNpbXBsZSglZCksIG9yZGVyZWQoJWQpLCBzY3NpX2xldmVsKCVkKSwgY21kX3F1ZSglZClcbiIsCisJCXNkZXYtPnF1ZXVlX2RlcHRoLCBzZGV2LT50YWdnZWRfc3VwcG9ydGVkLCBzZGV2LT5zaW1wbGVfdGFncywKKwkJc2Rldi0+b3JkZXJlZF90YWdzLCBzZGV2LT5zY3NpX2xldmVsLAorCQkoc2Rldi0+aW5xdWlyeVs3XSAmIDIpID4+IDEpOworCisJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOworfQorCisvKioKKyAqIHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHRhZ190eXBlOiByZXF1ZXN0ZWQgdGFnIHR5cGUKKyAqCisgKiBSZXR1cm5zIHF1ZXVlIHRhZyB0eXBlLgorICovCitzdGF0aWMgaW50CitzY3NpaF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKK3sKKwlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgeworCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7CisJCWlmICh0YWdfdHlwZSkKKwkJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKKwkJZWxzZQorCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7CisJfSBlbHNlCisJCXRhZ190eXBlID0gMDsKKworCXJldHVybiB0YWdfdHlwZTsKK30KKworLyoqCisgKiBzY3NpaF90YXJnZXRfYWxsb2MgLSB0YXJnZXQgYWRkIHJvdXRpbmUKKyAqIEBzdGFyZ2V0OiBzY3NpIHRhcmdldCBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgaWYgb2suIEFueSBvdGhlciByZXR1cm4gaXMgYXNzdW1lZCB0byBiZSBhbiBlcnJvciBhbmQKKyAqIHRoZSBkZXZpY2UgaXMgaWdub3JlZC4KKyAqLworc3RhdGljIGludAorc2NzaWhfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKworCXNhc190YXJnZXRfcHJpdl9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjc2lfdGFyZ2V0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfdGFyZ2V0X3ByaXZfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGFyZ2V0LT5ob3N0ZGF0YSA9IHNhc190YXJnZXRfcHJpdl9kYXRhOworCXNhc190YXJnZXRfcHJpdl9kYXRhLT5zdGFyZ2V0ID0gc3RhcmdldDsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID0gTVBUMlNBU19JTlZBTElEX0RFVklDRV9IQU5ETEU7CisKKwkvKiBSQUlEIHZvbHVtZXMgKi8KKwlpZiAoc3RhcmdldC0+Y2hhbm5lbCA9PSBSQUlEX0NIQU5ORUwpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKGlvYywgc3RhcmdldC0+aWQsCisJCSAgICBzdGFyZ2V0LT5jaGFubmVsKTsKKwkJaWYgKHJhaWRfZGV2aWNlKSB7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID0gcmFpZF9kZXZpY2UtPmhhbmRsZTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5zYXNfYWRkcmVzcyA9IHJhaWRfZGV2aWNlLT53d2lkOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FOworCQkJcmFpZF9kZXZpY2UtPnN0YXJnZXQgPSBzdGFyZ2V0OworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzYXMvc2F0YSBkZXZpY2VzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJcnBoeSA9IGRldl90b19ycGh5KHN0YXJnZXQtPmRldi5wYXJlbnQpOworCXNhc19kZXZpY2UgPSBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJICAgcnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCisJaWYgKHNhc19kZXZpY2UpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IHNhc19kZXZpY2UtPmhhbmRsZTsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnNhc19hZGRyZXNzID0gc2FzX2RldmljZS0+c2FzX2FkZHJlc3M7CisJCXNhc19kZXZpY2UtPnN0YXJnZXQgPSBzdGFyZ2V0OworCQlzYXNfZGV2aWNlLT5pZCA9IHN0YXJnZXQtPmlkOworCQlzYXNfZGV2aWNlLT5jaGFubmVsID0gc3RhcmdldC0+Y2hhbm5lbDsKKwkJaWYgKHNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCkKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5mbGFncyB8PQorCQkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzY3NpaF90YXJnZXRfZGVzdHJveSAtIHRhcmdldCBkZXN0cm95IHJvdXRpbmUKKyAqIEBzdGFyZ2V0OiBzY3NpIHRhcmdldCBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitzY3NpaF90YXJnZXRfZGVzdHJveShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoJnN0YXJnZXQtPmRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHk7CisKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCWlmICghc2FzX3RhcmdldF9wcml2X2RhdGEpCisJCXJldHVybjsKKworCWlmIChzdGFyZ2V0LT5jaGFubmVsID09IFJBSURfQ0hBTk5FTCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaWQoaW9jLCBzdGFyZ2V0LT5pZCwKKwkJICAgIHN0YXJnZXQtPmNoYW5uZWwpOworCQlpZiAocmFpZF9kZXZpY2UpIHsKKwkJCXJhaWRfZGV2aWNlLT5zdGFyZ2V0ID0gTlVMTDsKKwkJCXJhaWRfZGV2aWNlLT5zZGV2ID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJcnBoeSA9IGRldl90b19ycGh5KHN0YXJnZXQtPmRldi5wYXJlbnQpOworCXNhc19kZXZpY2UgPSBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJICAgcnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCWlmIChzYXNfZGV2aWNlKQorCQlzYXNfZGV2aWNlLT5zdGFyZ2V0ID0gTlVMTDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKyBvdXQ6CisJa2ZyZWUoc2FzX3RhcmdldF9wcml2X2RhdGEpOworCXN0YXJnZXQtPmhvc3RkYXRhID0gTlVMTDsKK30KKworLyoqCisgKiBzY3NpaF9zbGF2ZV9hbGxvYyAtIGRldmljZSBhZGQgcm91dGluZQorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybnMgMCBpZiBvay4gQW55IG90aGVyIHJldHVybiBpcyBhc3N1bWVkIHRvIGJlIGFuIGVycm9yIGFuZAorICogdGhlIGRldmljZSBpcyBpZ25vcmVkLgorICovCitzdGF0aWMgaW50CitzY3NpaF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3NpX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc2FzX2RldmljZV9wcml2X2RhdGEtPmx1biA9IHNkZXYtPmx1bjsKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgPSBNUFRfREVWSUNFX0ZMQUdTX0lOSVQ7CisKKwlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+bnVtX2x1bnMrKzsKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldCA9IHNhc190YXJnZXRfcHJpdl9kYXRhOworCXNkZXYtPmhvc3RkYXRhID0gc2FzX2RldmljZV9wcml2X2RhdGE7CisJaWYgKChzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKSkKKwkJc2Rldi0+bm9fdWxkX2F0dGFjaCA9IDE7CisKKwlzaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2KTsKKwlpb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlpZiAoc3RhcmdldC0+Y2hhbm5lbCA9PSBSQUlEX0NIQU5ORUwpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKGlvYywKKwkJICAgIHN0YXJnZXQtPmlkLCBzdGFyZ2V0LT5jaGFubmVsKTsKKwkJaWYgKHJhaWRfZGV2aWNlKQorCQkJcmFpZF9kZXZpY2UtPnNkZXYgPSBzZGV2OyAvKiByYWlkIGlzIHNpbmdsZSBsdW4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJLyogc2V0IFRMUiBiaXQgZm9yIFNTUCBkZXZpY2VzICovCisJCWlmICghKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkJICAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSKSkKKwkJCWdvdG8gb3V0OworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkJICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPnNhc19hZGRyZXNzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHNhc19kZXZpY2UgJiYgc2FzX2RldmljZS0+ZGV2aWNlX2luZm8gJgorCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkKKwkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyB8PSBNUFRfREVWSUNFX1RMUl9PTjsKKwl9CisKKyBvdXQ6CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2NzaWhfc2xhdmVfZGVzdHJveSAtIGRldmljZSBkZXN0cm95IHJvdXRpbmUKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitzY3NpaF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKKworCWlmICghc2Rldi0+aG9zdGRhdGEpCisJCXJldHVybjsKKworCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCXNhc190YXJnZXRfcHJpdl9kYXRhLT5udW1fbHVucy0tOworCWtmcmVlKHNkZXYtPmhvc3RkYXRhKTsKKwlzZGV2LT5ob3N0ZGF0YSA9IE5VTEw7Cit9CisKKy8qKgorICogc2NzaWhfZGlzcGxheV9zYXRhX2NhcGFiaWxpdGllcyAtIHNhdGEgY2FwYWJpbGl0aWVzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZGV2aWNlOiB0aGUgc2FzX2RldmljZSBvYmplY3QKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqLworc3RhdGljIHZvaWQKK3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsKKwl1MzIgaW9jX3N0YXR1czsKKwl1MTYgZmxhZ3M7CisJdTMyIGRldmljZV9pbmZvOworCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmc2FzX2RldmljZV9wZzAsCisJICAgIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLCBzYXNfZGV2aWNlLT5oYW5kbGUpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWZsYWdzID0gbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuRmxhZ3MpOworCWRldmljZV9pbmZvID0gbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuRGV2aWNlSW5mbyk7CisKKwlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJICAgICJhdGFwaSglcyksIG5jcSglcyksIGFzeW5fbm90aWZ5KCVzKSwgc21hcnQoJXMpLCBmdWEoJXMpLCAiCisJICAgICJzd19wcmVzZXJ2ZSglcylcbiIsCisJICAgIChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX0FUQVBJX0RFVklDRSkgPyAieSIgOiAibiIsCisJICAgIChmbGFncyAmIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9OQ1FfU1VQUE9SVEVEKSA/ICJ5IiA6ICJuIiwKKwkgICAgKGZsYWdzICYgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX0FTWU5DSFJPTk9VU19OT1RJRlkpID8gInkiIDoKKwkgICAgIm4iLAorCSAgICAoZmxhZ3MgJiBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfU01BUlRfU1VQUE9SVEVEKSA/ICJ5IiA6ICJuIiwKKwkgICAgKGZsYWdzICYgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX0ZVQV9TVVBQT1JURUQpID8gInkiIDogIm4iLAorCSAgICAoZmxhZ3MgJiBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfU1dfUFJFU0VSVkUpID8gInkiIDogIm4iKTsKK30KKworLyoqCisgKiBfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMgLSB2b2x1bWUgY2FwYWJpbGl0aWVzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZGV2aWNlOiB0aGUgcmFpZF9kZXZpY2Ugb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlKQoreworCU1waTJSYWlkVm9sUGFnZTBfdCAqdm9sX3BnMDsKKwlNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCBwZF9wZzA7CisJTXBpMlNhc0RldmljZVBhZ2UwX3Qgc2FzX2RldmljZV9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBzejsKKwl1OCBudW1fcGRzOworCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX3Bkcyhpb2MsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJICAgICZudW1fcGRzKSkgfHwgIW51bV9wZHMpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlyYWlkX2RldmljZS0+bnVtX3BkcyA9IG51bV9wZHM7CisJc3ogPSBvZmZzZXRvZihNcGkyUmFpZFZvbFBhZ2UwX3QsIFBoeXNEaXNrKSArIChudW1fcGRzICoKKwkgICAgc2l6ZW9mKE1waTJSYWlkVm9sMFBoeXNEaXNrX3QpKTsKKwl2b2xfcGcwID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2b2xfcGcwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgdm9sX3BnMCwKKwkgICAgIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwgcmFpZF9kZXZpY2UtPmhhbmRsZSwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJa2ZyZWUodm9sX3BnMCk7CisJCXJldHVybjsKKwl9CisKKwlyYWlkX2RldmljZS0+dm9sdW1lX3R5cGUgPSB2b2xfcGcwLT5Wb2x1bWVUeXBlOworCisJLyogZmlndXJlIG91dCB3aGF0IHRoZSB1bmRlcmx5aW5nIGRldmljZXMgYXJlIGJ5CisJICogb2J0YWluaW5nIHRoZSBkZXZpY2VfaW5mbyBiaXRzIGZvciB0aGUgMXN0IGRldmljZQorCSAqLworCWlmICghKG1wdDJzYXNfY29uZmlnX2dldF9waHlzX2Rpc2tfcGcwKGlvYywgJm1waV9yZXBseSwKKwkgICAgJnBkX3BnMCwgTVBJMl9QSFlTRElTS19QR0FEX0ZPUk1fUEhZU0RJU0tOVU0sCisJICAgIHZvbF9wZzAtPlBoeXNEaXNrWzBdLlBoeXNEaXNrTnVtKSkpIHsKKwkJaWYgKCEobXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwKGlvYywgJm1waV9yZXBseSwKKwkJICAgICZzYXNfZGV2aWNlX3BnMCwgTVBJMl9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUsCisJCSAgICBsZTE2X3RvX2NwdShwZF9wZzAuRGV2SGFuZGxlKSkpKSB7CisJCQlyYWlkX2RldmljZS0+ZGV2aWNlX2luZm8gPQorCQkJICAgIGxlMzJfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldmljZUluZm8pOworCQl9CisJfQorCisJa2ZyZWUodm9sX3BnMCk7Cit9CisKKy8qKgorICogc2NzaWhfc2xhdmVfY29uZmlndXJlIC0gZGV2aWNlIGNvbmZpZ3VyZSByb3V0aW5lLgorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybnMgMCBpZiBvay4gQW55IG90aGVyIHJldHVybiBpcyBhc3N1bWVkIHRvIGJlIGFuIGVycm9yIGFuZAorICogdGhlIGRldmljZSBpcyBpZ25vcmVkLgorICovCitzdGF0aWMgaW50CitzY3NpaF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHFkZXB0aDsKKwl1OCBzc3BfdGFyZ2V0ID0gMDsKKwljaGFyICpkcyA9ICIiOworCWNoYXIgKnJfbGV2ZWwgPSAiIjsKKworCXFkZXB0aCA9IDE7CisJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+Y29uZmlndXJlZF9sdW4gPSAxOworCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmPSB+TVBUX0RFVklDRV9GTEFHU19JTklUOworCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQ7CisKKwkvKiByYWlkIHZvbHVtZSBoYW5kbGluZyAqLworCWlmIChzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZPTFVNRSkgeworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLAorCQkgICAgIHNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFyYWlkX2RldmljZSkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMoaW9jLCByYWlkX2RldmljZSk7CisKKwkJLyogUkFJRCBRdWV1ZSBEZXB0aCBTdXBwb3J0CisJCSAqIElTIHZvbHVtZSA9IHVuZGVybHlpbmcgcWRlcHRoIG9mIGRyaXZlIHR5cGUsIGVpdGhlcgorCQkgKiAgICBNUFQyU0FTX1NBU19RVUVVRV9ERVBUSCBvciBNUFQyU0FTX1NBVEFfUVVFVUVfREVQVEgKKwkJICogSU0vSU1FL1IxMCA9IDEyOCAoTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIKQorCQkgKi8KKwkJaWYgKHJhaWRfZGV2aWNlLT5kZXZpY2VfaW5mbyAmCisJCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKSB7CisJCQlxZGVwdGggPSBNUFQyU0FTX1NBU19RVUVVRV9ERVBUSDsKKwkJCWRzID0gIlNTUCI7CisJCX0gZWxzZSB7CisJCQlxZGVwdGggPSBNUFQyU0FTX1NBVEFfUVVFVUVfREVQVEg7CisJCQkgaWYgKHJhaWRfZGV2aWNlLT5kZXZpY2VfaW5mbyAmCisJCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpCisJCQkJZHMgPSAiU0FUQSI7CisJCQllbHNlCisJCQkJZHMgPSAiU1RQIjsKKwkJfQorCisJCXN3aXRjaCAocmFpZF9kZXZpY2UtPnZvbHVtZV90eXBlKSB7CisJCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQwOgorCQkJcl9sZXZlbCA9ICJSQUlEMCI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDFFOgorCQkJcWRlcHRoID0gTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIOworCQkJcl9sZXZlbCA9ICJSQUlEMUUiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxOgorCQkJcWRlcHRoID0gTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIOworCQkJcl9sZXZlbCA9ICJSQUlEMSI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDEwOgorCQkJcWRlcHRoID0gTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIOworCQkJcl9sZXZlbCA9ICJSQUlEMTAiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1VOS05PV046CisJCWRlZmF1bHQ6CisJCQlxZGVwdGggPSBNUFQyU0FTX1JBSURfUVVFVUVfREVQVEg7CisJCQlyX2xldmVsID0gIlJBSURYIjsKKwkJCWJyZWFrOworCQl9CisKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6ICIKKwkJICAgICJoYW5kbGUoMHglMDR4KSwgd3dpZCgweCUwMTZsbHgpLCBwZF9jb3VudCglZCksIHR5cGUoJXMpXG4iLAorCQkgICAgcl9sZXZlbCwgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQsCisJCSAgICByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOworCQlzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogbm9uLXJhaWQgaGFuZGxpbmcgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCSAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2FzX2RldmljZSkgeworCQlpZiAoc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzICYKKwkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpIHsKKwkJCW1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfaGFuZGxlKGlvYywKKwkJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUsICZzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKTsKKwkJCW1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfd3dpZChpb2MsCisJCQkgICAgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSwKKwkJCSAgICAmc2FzX2RldmljZS0+dm9sdW1lX3d3aWQpOworCQl9CisJCWlmIChzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpIHsKKwkJCXFkZXB0aCA9IE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIOworCQkJc3NwX3RhcmdldCA9IDE7CisJCQlkcyA9ICJTU1AiOworCQl9IGVsc2UgeworCQkJcWRlcHRoID0gTVBUMlNBU19TQVRBX1FVRVVFX0RFUFRIOworCQkJaWYgKHNhc19kZXZpY2UtPmRldmljZV9pbmZvICYKKwkJCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19TVFBfVEFSR0VUKQorCQkJCWRzID0gIlNUUCI7CisJCQllbHNlIGlmIChzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyAmCisJCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpCisJCQkJZHMgPSAiU0FUQSI7CisJCX0KKworCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICIlczogaGFuZGxlKDB4JTA0eCksICIKKwkJICAgICJzYXNfYWRkcigweCUwMTZsbHgpLCBkZXZpY2VfbmFtZSgweCUwMTZsbHgpXG4iLAorCQkgICAgZHMsIHNhc19kZXZpY2UtPmhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPmRldmljZV9uYW1lKTsKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6ICIKKwkJICAgICJlbmNsb3N1cmVfbG9naWNhbF9pZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgZHMsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJICAgIHNhc19kZXZpY2UtPnNsb3QpOworCisJCWlmICghc3NwX3RhcmdldCkKKwkJCXNjc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBzYXNfZGV2aWNlLCBzZGV2KTsKKwl9CisKKwlzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKKworCWlmIChzc3BfdGFyZ2V0KQorCQlzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzY3NpaF9iaW9zX3BhcmFtIC0gZmV0Y2ggaGVhZCwgc2VjdG9yLCBjeWxpbmRlciBpbmZvIGZvciBhIGRpc2sKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqIEBiZGV2OiBwb2ludGVyIHRvIGJsb2NrIGRldmljZSBjb250ZXh0CisgKiBAY2FwYWNpdHk6IGRldmljZSBzaXplIChpbiA1MTIgYnl0ZSBzZWN0b3JzKQorICogQHBhcmFtczogdGhyZWUgZWxlbWVudCBhcnJheSB0byBwbGFjZSBvdXRwdXQ6CisgKiAgICAgICAgICAgICAgcGFyYW1zWzBdIG51bWJlciBvZiBoZWFkcyAobWF4IDI1NSkKKyAqICAgICAgICAgICAgICBwYXJhbXNbMV0gbnVtYmVyIG9mIHNlY3RvcnMgKG1heCA2MykKKyAqICAgICAgICAgICAgICBwYXJhbXNbMl0gbnVtYmVyIG9mIGN5bGluZGVycworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgaW50CitzY3NpaF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKyAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IHBhcmFtc1tdKQoreworCWludAkJaGVhZHM7CisJaW50CQlzZWN0b3JzOworCXNlY3Rvcl90CWN5bGluZGVyczsKKwl1bG9uZyAJCWR1bW15OworCisJaGVhZHMgPSA2NDsKKwlzZWN0b3JzID0gMzI7CisKKwlkdW1teSA9IGhlYWRzICogc2VjdG9yczsKKwljeWxpbmRlcnMgPSBjYXBhY2l0eTsKKwlzZWN0b3JfZGl2KGN5bGluZGVycywgZHVtbXkpOworCisJLyoKKwkgKiBIYW5kbGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gc2l6ZSBmb3IgbG9naWNhbCBkcml2ZXMKKwkgKiA+IDFHYgorCSAqLworCWlmICgodWxvbmcpY2FwYWNpdHkgPj0gMHgyMDAwMDApIHsKKwkJaGVhZHMgPSAyNTU7CisJCXNlY3RvcnMgPSA2MzsKKwkJZHVtbXkgPSBoZWFkcyAqIHNlY3RvcnM7CisJCWN5bGluZGVycyA9IGNhcGFjaXR5OworCQlzZWN0b3JfZGl2KGN5bGluZGVycywgZHVtbXkpOworCX0KKworCS8qIHJldHVybiByZXN1bHQgKi8KKwlwYXJhbXNbMF0gPSBoZWFkczsKKwlwYXJhbXNbMV0gPSBzZWN0b3JzOworCXBhcmFtc1syXSA9IGN5bGluZGVyczsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9zY3NpaF9yZXNwb25zZV9jb2RlIC0gdHJhbnNsYXRpb24gb2YgZGV2aWNlIHJlc3BvbnNlIGNvZGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJlc3BvbnNlX2NvZGU6IHJlc3BvbnNlIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRldmljZQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Jlc3BvbnNlX2NvZGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCByZXNwb25zZV9jb2RlKQoreworCWNoYXIgKmRlc2M7CisKKwlzd2l0Y2ggKHJlc3BvbnNlX2NvZGUpIHsKKwljYXNlIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9DT01QTEVURToKKwkJZGVzYyA9ICJ0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBjb21wbGV0ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FOgorCQlkZXNjID0gImludmFsaWQgZnJhbWUiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9OT1RfU1VQUE9SVEVEOgorCQlkZXNjID0gInRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IG5vdCBzdXBwb3J0ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9GQUlMRUQ6CisJCWRlc2MgPSAidGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgZmFpbGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEOgorCQlkZXNjID0gInRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IHN1Y2NlZWRlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0lOVkFMSURfTFVOOgorCQlkZXNjID0gImludmFsaWQgbHVuIjsKKwkJYnJlYWs7CisJY2FzZSAweEE6CisJCWRlc2MgPSAib3ZlcmxhcHBlZCB0YWcgYXR0ZW1wdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQzoKKwkJZGVzYyA9ICJ0YXNrIHF1ZXVlZCwgaG93ZXZlciBub3Qgc2VudCB0byB0YXJnZXQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXNjID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgInJlc3BvbnNlX2NvZGUoMHglMDF4KTogJXNcbiIsCisJCWlvYy0+bmFtZSwgcmVzcG9uc2VfY29kZSwgZGVzYyk7Cit9CisKKy8qKgorICogc2NzaWhfdG1fZG9uZSAtIHRtIGNvbXBsZXRpb24gcm91dGluZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IG5vbmUuCisgKgorICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBzY3NpaF9pc3N1ZV90bS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK3Njc2loX3RtX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3sKKwlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKKworCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQorCQlyZXR1cm47CisJaWYgKGlvYy0+dG1fY21kcy5zbWlkICE9IHNtaWQpCisJCXJldHVybjsKKwlpb2MtPnRtX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOworCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwlpZiAobXBpX3JlcGx5KSB7CisJCW1lbWNweShpb2MtPnRtX2NtZHMucmVwbHksIG1waV9yZXBseSwgbXBpX3JlcGx5LT5Nc2dMZW5ndGgqNCk7CisJCWlvYy0+dG1fY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVQTFlfVkFMSUQ7CisJfQorCWlvYy0+dG1fY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CisJY29tcGxldGUoJmlvYy0+dG1fY21kcy5kb25lKTsKK30KKworLyoqCisgKiBtcHQyc2FzX3Njc2loX3NldF90bV9mbGFnIC0gc2V0IHBlciB0YXJnZXQgdG1fYnVzeQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKgorICogRHVyaW5nIHRhc2ttYW5nZW1lbnQgcmVxdWVzdCwgd2UgbmVlZCB0byBmcmVlemUgdGhlIGRldmljZSBxdWV1ZS4KKyAqLwordm9pZAorbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJdTggc2tpcCA9IDA7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaW9jLT5zaG9zdCkgeworCQlpZiAoc2tpcCkKKwkJCWNvbnRpbnVlOworCQlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCQlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhKQorCQkJY29udGludWU7CisJCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlID09IGhhbmRsZSkgeworCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPnRtX2J1c3kgPSAxOworCQkJc2tpcCA9IDE7CisJCQlpb2MtPmlnbm9yZV9sb2dpbmZvcyA9IDE7CisJCX0KKwl9Cit9CisKKy8qKgorICogbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnIC0gY2xlYXIgcGVyIHRhcmdldCB0bV9idXN5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqCisgKiBEdXJpbmcgdGFza21hbmdlbWVudCByZXF1ZXN0LCB3ZSBuZWVkIHRvIGZyZWV6ZSB0aGUgZGV2aWNlIHF1ZXVlLgorICovCit2b2lkCittcHQyc2FzX3Njc2loX2NsZWFyX3RtX2ZsYWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXU4IHNraXAgPSAwOworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGlvYy0+c2hvc3QpIHsKKwkJaWYgKHNraXApCisJCQljb250aW51ZTsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKwkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT50bV9idXN5ID0gMDsKKwkJCXNraXAgPSAxOworCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAwOworCQl9CisJfQorfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0gLSBtYWluIHJvdXRpbmUgZm9yIHNlbmRpbmcgdG0gcmVxdWVzdHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIHN0cnVjdAorICogQGRldmljZV9oYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBsdW46IGx1biBudW1iZXIKKyAqIEB0eXBlOiBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9fWFhYIChkZWZpbmVkIGluIG1waTJfaW5pdC5oKQorICogQHNtaWRfdGFzazogc21pZCBhc3NpZ25lZCB0byB0aGUgdGFzaworICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcworICogQ29udGV4dDogVGhlIGNhbGxpbmcgZnVuY3Rpb24gbmVlZHMgdG8gYWNxdWlyZSB0aGUgdG1fY21kcy5tdXRleAorICoKKyAqIEEgZ2VuZXJpYyBBUEkgZm9yIHNlbmRpbmcgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3RzIHRvIGZpcm13YXJlLgorICoKKyAqIFRoZSBpb2MtPnRtX2NtZHMuc3RhdHVzIGZsYWcgc2hvdWxkIGJlIE1QVDJfQ01EX05PVF9VU0VEIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIEFQSS4KKyAqCisgKiBUaGUgY2FsbGJhY2sgaW5kZXggaXMgc2V0IGluc2lkZSBgaW9jLT50bV9jYl9pZHhgLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX3Njc2loX2lzc3VlX3RtKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdWludCBsdW4sCisgICAgdTggdHlwZSwgdTE2IHNtaWRfdGFzaywgdWxvbmcgdGltZW91dCkKK3sKKwlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqbXBpX3JlcGx5OworCXUxNiBzbWlkID0gMDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdTggVkZfSUQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEIHx8CisJICAgIGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDApOworCWlmIChpb2Nfc3RhdGUgJiBNUEkyX0RPT1JCRUxMX1VTRUQpIHsKKwkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJ1bmV4cGVjdGVkIGRvb3JiZWxsICIKKwkJICAgICJhY3RpdmUhXG4iLCBpb2MtPm5hbWUpKTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCWlmICgoaW9jX3N0YXRlICYgTVBJMl9JT0NfU1RBVEVfTUFTSykgPT0gTVBJMl9JT0NfU1RBVEVfRkFVTFQpIHsKKwkJbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8oaW9jLCBpb2Nfc3RhdGUgJgorCQkgICAgTVBJMl9ET09SQkVMTF9EQVRBX01BU0spOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dG1fY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2VuZGluZyB0bTogaGFuZGxlKDB4JTA0eCksIgorCSAgICAiIHRhc2tfdHlwZSgweCUwMngpLCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsIHR5cGUsIHNtaWQpKTsKKwlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT50bV9jbWRzLnNtaWQgPSBzbWlkOworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOworCW1waV9yZXF1ZXN0LT5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOworCW1waV9yZXF1ZXN0LT5UYXNrVHlwZSA9IHR5cGU7CisJbXBpX3JlcXVlc3QtPlRhc2tNSUQgPSBjcHVfdG9fbGUxNihzbWlkX3Rhc2spOworCWludF90b19zY3NpbHVuKGx1biwgKHN0cnVjdCBzY3NpX2x1biAqKW1waV9yZXF1ZXN0LT5MVU4pOworCW1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoaW9jLCBoYW5kbGUpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsIFZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50bV9jbWRzLmRvbmUsIHRpbWVvdXQqSFopOworCW1wdDJzYXNfc2NzaWhfY2xlYXJfdG1fZmxhZyhpb2MsIGhhbmRsZSk7CisJaWYgKCEoaW9jLT50bV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT50bV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisKKwlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKSB7CisJCW1waV9yZXBseSA9IGlvYy0+dG1fY21kcy5yZXBseTsKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImNvbXBsZXRlIHRtOiAiCisJCSAgICAiaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eCksIHRlcm1fY291bnQoMHglMDh4KVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCkpKTsKKwkJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UTSkKKwkJCV9zY3NpaF9yZXNwb25zZV9jb2RlKGlvYywgbXBpX3JlcGx5LT5SZXNwb25zZUNvZGUpOworCX0KKwlyZXR1cm47CisgaXNzdWVfaG9zdF9yZXNldDoKKwltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLCBGT1JDRV9CSUdfSEFNTUVSKTsKK30KKworLyoqCisgKiBzY3NpaF9hYm9ydCAtIGVoIHRocmVhZHMgbWFpbiBhYm9ydCByb3V0aW5lCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICovCitzdGF0aWMgaW50CitzY3NpaF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2NtZC0+ZGV2aWNlLT5ob3N0KTsKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXUxNiBzbWlkOworCXUxNiBoYW5kbGU7CisJaW50IHI7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZF9sb29rdXA7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYXR0ZW1wdGluZyB0YXNrIGFib3J0ISBzY21kKCVwKVxuIiwKKwkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CisKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRldmljZSBiZWVuIGRlbGV0ZWQhIHNjbWQoJXApXG4iLAorCQkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwkJc2NtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKKwkJciA9IFNVQ0NFU1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHNlYXJjaCBmb3IgdGhlIGNvbW1hbmQgKi8KKwlzbWlkID0gX3Njc2loX3Njc2lfbG9va3VwX2ZpbmRfYnlfc2NtZChpb2MsIHNjbWQpOworCWlmICghc21pZCkgeworCQlzY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CisJCXIgPSBTVUNDRVNTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBmb3IgaGlkZGVuIHJhaWQgY29tcG9uZW50cyBhbmQgdm9sdW1lcyB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmZsYWdzICYKKwkgICAgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVCB8fAorCSAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZPTFVNRSkgeworCQlzY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CisJCXIgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCW11dGV4X2xvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CisJaGFuZGxlID0gc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZTsKKwltcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+bHVuLAorCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLCBzbWlkLCAzMCk7CisKKwkvKiBzYW5pdHkgY2hlY2sgLSBzZWUgd2hldGhlciBjb21tYW5kIGFjdHVhbGx5IGNvbXBsZXRlZCAqLworCXNjbWRfbG9va3VwID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCWlmIChzY21kX2xvb2t1cCAmJiAoc2NtZF9sb29rdXAtPnNlcmlhbF9udW1iZXIgPT0gc2NtZC0+c2VyaWFsX251bWJlcikpCisJCXIgPSBGQUlMRUQ7CisJZWxzZQorCQlyID0gU1VDQ0VTUzsKKwlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCisgb3V0OgorCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyBzY21kKCVwKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAoKHIgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHNjbWQpOworCXJldHVybiByOworfQorCisKKy8qKgorICogc2NzaWhfZGV2X3Jlc2V0IC0gZWggdGhyZWFkcyBtYWluIGRldmljZSByZXNldCByb3V0aW5lCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICovCitzdGF0aWMgaW50CitzY3NpaF9kZXZfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYJaGFuZGxlOworCWludCByOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImF0dGVtcHRpbmcgdGFyZ2V0IHJlc2V0ISBzY21kKCVwKVxuIiwKKwkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CisKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImRldmljZSBiZWVuIGRlbGV0ZWQhIHNjbWQoJXApXG4iLAorCQkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwkJc2NtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKKwkJciA9IFNVQ0NFU1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGZvciBoaWRkZW4gcmFpZCBjb21wb25lbnRzIG9idGFpbiB0aGUgdm9sdW1lX2hhbmRsZSAqLworCWhhbmRsZSA9IDA7CisJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5mbGFncyAmCisJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsCisJCSAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUpOworCQlpZiAoc2FzX2RldmljZSkKKwkJCWhhbmRsZSA9IHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCWhhbmRsZSA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGU7CisKKwlpZiAoIWhhbmRsZSkgeworCQlzY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CisJCXIgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCW11dGV4X2xvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CisJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwKKwkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VULCAwLCAzMCk7CisKKwkvKgorCSAqICBzYW5pdHkgY2hlY2sgc2VlIHdoZXRoZXIgYWxsIGNvbW1hbmRzIHRvIHRoaXMgdGFyZ2V0IGJlZW4KKwkgKiAgY29tcGxldGVkCisJICovCisJaWYgKF9zY3NpaF9zY3NpX2xvb2t1cF9maW5kX2J5X3RhcmdldChpb2MsIHNjbWQtPmRldmljZS0+aWQsCisJICAgIHNjbWQtPmRldmljZS0+Y2hhbm5lbCkpCisJCXIgPSBGQUlMRUQ7CisJZWxzZQorCQlyID0gU1VDQ0VTUzsKKwlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCisgb3V0OgorCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJ0YXJnZXQgcmVzZXQ6ICVzIHNjbWQoJXApXG4iLAorCSAgICBpb2MtPm5hbWUsICgociA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgc2NtZCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogc2NzaWhfYWJvcnQgLSBlaCB0aHJlYWRzIG1haW4gaG9zdCByZXNldCByb3V0aW5lCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICovCitzdGF0aWMgaW50CitzY3NpaF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzY21kLT5kZXZpY2UtPmhvc3QpOworCWludCByLCByZXR2YWw7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYXR0ZW1wdGluZyBob3N0IHJlc2V0ISBzY21kKCVwKVxuIiwKKwkgICAgaW9jLT5uYW1lLCBzY21kKTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CisKKwlyZXR2YWwgPSBtcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwlyID0gKHJldHZhbCA8IDApID8gRkFJTEVEIDogU1VDQ0VTUzsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaG9zdCByZXNldDogJXMgc2NtZCglcClcbiIsCisJICAgIGlvYy0+bmFtZSwgKChyID09IFNVQ0NFU1MpID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpLCBzY21kKTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9md19ldmVudF9hZGQgLSBpbnNlcnQgYW5kIHF1ZXVlIHVwIGZ3X2V2ZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBmd19ldmVudDogb2JqZWN0IGRlc2NyaWJpbmcgdGhlIGV2ZW50CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPmZ3X2V2ZW50X2xvY2suCisgKgorICogVGhpcyBhZGRzIHRoZSBmaXJtd2FyZSBldmVudCBvYmplY3QgaW50byBsaW5rIGxpc3QsIHRoZW4gcXVldWVzIGl0IHVwIHRvCisgKiBiZSBwcm9jZXNzZWQgZnJvbSB1c2VyIGNvbnRleHQuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZndfZXZlbnRfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmZ3X2V2ZW50LT5saXN0LCAmaW9jLT5md19ldmVudF9saXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmZndfZXZlbnQtPndvcmssIF9maXJtd2FyZV9ldmVudF93b3JrKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQsICZmd19ldmVudC0+d29yaywgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX2Z3X2V2ZW50X2ZyZWUgLSBkZWxldGUgZndfZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGZ3X2V2ZW50OiBvYmplY3QgZGVzY3JpYmluZyB0aGUgZXZlbnQKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+ZndfZXZlbnRfbG9jay4KKyAqCisgKiBUaGlzIHJlbW92ZXMgZmlybXdhcmUgZXZlbnQgb2JqZWN0IGZyb20gbGluayBsaXN0LCBmcmVlcyBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9md19ldmVudF9mcmVlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IGZ3X2V2ZW50X3dvcmsKKyAgICAqZndfZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmZndfZXZlbnQtPmxpc3QpOworCWtmcmVlKGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwlrZnJlZShmd19ldmVudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX2Z3X2V2ZW50X2FkZCAtIHJlcXVldWUgYW4gZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGZ3X2V2ZW50OiBvYmplY3QgZGVzY3JpYmluZyB0aGUgZXZlbnQKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+ZndfZXZlbnRfbG9jay4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9md19ldmVudF9yZXF1ZXVlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IGZ3X2V2ZW50X3dvcmsKKyAgICAqZndfZXZlbnQsIHVuc2lnbmVkIGxvbmcgZGVsYXkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAoaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhpb2MtPmZpcm13YXJlX2V2ZW50X3RocmVhZCwgJmZ3X2V2ZW50LT53b3JrLCBkZWxheSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX2Z3X2V2ZW50X29mZiAtIHR1cm4gZmxhZyBvZmYgcHJldmVudGluZyBldmVudCBoYW5kbGluZworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogVXNlZCB0byBwcmV2ZW50IGhhbmRsaW5nIG9mIGZpcm13YXJlIGV2ZW50cyBkdXJpbmcgYWRhcHRlciByZXNldAorICogZHJpdmVyIHVubG9hZC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9md19ldmVudF9vZmYoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisJaW9jLT5md19ldmVudHNfb2ZmID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKworfQorCisvKioKKyAqIF9zY3NpaF9md19ldmVudF9vbiAtIHR1cm4gZmxhZyBvbiBhbGxvd2luZyBmaXJtd2FyZSBldmVudCBoYW5kbGluZworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2Z3X2V2ZW50X29uKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCWlvYy0+ZndfZXZlbnRzX29mZiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX3VibG9ja19pb19kZXZpY2UgLSBzZXQgdGhlIGRldmljZSBzdGF0ZSB0byBTREVWX1JVTk5JTkcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICoKKyAqIER1cmluZyBkZXZpY2UgcHVsbCB3ZSBuZWVkIHRvIGFwcHJvcGlhdGVseSBzZXQgdGhlIHNkZXYgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdWJsb2NrX2lvX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaW9jLT5zaG9zdCkgeworCQlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCQlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhKQorCQkJY29udGludWU7CisJCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEtPmJsb2NrKQorCQkJY29udGludWU7CisJCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlID09IGhhbmRsZSkgeworCQkJZGV3dHByaW50ayhpb2MsIHNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCSAgICBNUFQyU0FTX0lORk9fRk1UICJTREVWX1JVTk5JTkc6ICIKKwkJCSAgICAiaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CisJCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+YmxvY2sgPSAwOworCQkJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORyk7CisJCX0KKwl9Cit9CisKKy8qKgorICogX3Njc2loX2Jsb2NrX2lvX2RldmljZSAtIHNldCB0aGUgZGV2aWNlIHN0YXRlIHRvIFNERVZfQkxPQ0sKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICoKKyAqIER1cmluZyBkZXZpY2UgcHVsbCB3ZSBuZWVkIHRvIGFwcHJvcGlhdGVseSBzZXQgdGhlIHNkZXYgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfYmxvY2tfaW9fZGV2aWNlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKworCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBpb2MtPnNob3N0KSB7CisJCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2Rldi0+aG9zdGRhdGE7CisJCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEpCisJCQljb250aW51ZTsKKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5ibG9jaykKKwkJCWNvbnRpbnVlOworCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJCWRld3RwcmludGsoaW9jLCBzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkgICAgTVBUMlNBU19JTkZPX0ZNVCAiU0RFVl9CTE9DSzogIgorCQkJICAgICJoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUpKTsKKwkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5ibG9jayA9IDE7CisJCQlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9CTE9DSyk7CisJCX0KKwl9Cit9CisKKy8qKgorICogX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX3RvX2V4CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZXhwYW5kZXI6IHRoZSBzYXNfZGV2aWNlIG9iamVjdAorICoKKyAqIFRoaXMgcm91dGluZSBzZXQgc2RldiBzdGF0ZSB0byBTREVWX0JMT0NLIGZvciBhbGwgZGV2aWNlcworICogYXR0YWNoZWQgdG8gdGhpcyBleHBhbmRlci4gVGhpcyBmdW5jdGlvbiBjYWxsZWQgd2hlbiBleHBhbmRlciBpcworICogcHVsbGVkLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX3RvX2V4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXIpCit7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9zaWJsaW5nOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXNhc19leHBhbmRlcikKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCisJICAgJnNhc19leHBhbmRlci0+c2FzX3BvcnRfbGlzdCwgcG9ydF9saXN0KSB7CisJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCQkgICAgU0FTX0VORF9ERVZJQ0UpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQkJc2FzX2RldmljZSA9CisJCQkgICAgbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCQkJICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghc2FzX2RldmljZSkKKwkJCQljb250aW51ZTsKKwkJCV9zY3NpaF9ibG9ja19pb19kZXZpY2UoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUpOworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCisJICAgJnNhc19leHBhbmRlci0+c2FzX3BvcnRfbGlzdCwgcG9ydF9saXN0KSB7CisKKwkJaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19FREdFX0VYUEFOREVSIHx8CisJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRkFOT1VUX0VYUEFOREVSKSB7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwkJCWV4cGFuZGVyX3NpYmxpbmcgPQorCQkJICAgIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcygKKwkJCSAgICBpb2MsIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCQkJX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX3RvX2V4KGlvYywKKwkJCSAgICBleHBhbmRlcl9zaWJsaW5nKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBfc2NzaWhfYmxvY2tfaW9fdG9fY2hpbGRyZW5fYXR0YWNoZWRfZGlyZWN0bHkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IHRvcG9sb2d5IGNoYW5nZSBldmVudCBkYXRhCisgKgorICogVGhpcyByb3V0aW5lIHNldCBzZGV2IHN0YXRlIHRvIFNERVZfQkxPQ0sgZm9yIGFsbCBkZXZpY2VzCisgKiBkaXJlY3QgYXR0YWNoZWQgZHVyaW5nIGRldmljZSBwdWxsLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX2RpcmVjdGx5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCit7CisJaW50IGk7CisJdTE2IGhhbmRsZTsKKwl1MTYgcmVhc29uX2NvZGU7CisJdTggcGh5X251bWJlcjsKKworCWZvciAoaSA9IDA7IGkgPCBldmVudF9kYXRhLT5OdW1FbnRyaWVzOyBpKyspIHsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKCFoYW5kbGUpCisJCQljb250aW51ZTsKKwkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKHJlYXNvbl9jb2RlID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfREVMQVlfTk9UX1JFU1BPTkRJTkcpCisJCQlfc2NzaWhfYmxvY2tfaW9fZGV2aWNlKGlvYywgaGFuZGxlKTsKKwl9Cit9CisKKy8qKgorICogX3Njc2loX2NoZWNrX3RvcG9fZGVsZXRlX2V2ZW50cyAtIHNhbml0eSBjaGVjayBvbiB0b3BvIGV2ZW50cworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnRfZGF0YTogdGhlIGV2ZW50IGRhdGEgcGF5bG9hZAorICoKKyAqIFRoaXMgcm91dGluZSBhZGRlZCB0byBiZXR0ZXIgaGFuZGxlIGNhYmxlIGJyZWFrZXIuCisgKgorICogVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGRyaXZlciByZWNpZXZlcyBtdWx0aXBsZSBleHBhbmRlcgorICogYWRkIGFuZCBkZWxldGUgZXZlbnRzIGluIGEgc2luZ2xlIHNob3QuICBXaGVuIHRoZXJlIGlzIGEgZGVsZXRlIGV2ZW50CisgKiB0aGUgcm91dGluZSB3aWxsIHZvaWQgYW55IHBlbmRpbmcgYWRkIGV2ZW50cyB3YWl0aW5nIGluIHRoZSBldmVudCBxdWV1ZS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9jaGVja190b3BvX2RlbGV0ZV9ldmVudHMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSkKK3sKKwlzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQ7CisJTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICpsb2NhbF9ldmVudF9kYXRhOworCXUxNiBleHBhbmRlcl9oYW5kbGU7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlleHBhbmRlcl9oYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5FeHBhbmRlckRldkhhbmRsZSk7CisJaWYgKGV4cGFuZGVyX2hhbmRsZSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cykgeworCQlfc2NzaWhfYmxvY2tfaW9fdG9fY2hpbGRyZW5fYXR0YWNoZWRfZGlyZWN0bHkoaW9jLCBldmVudF9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19ERUxBWV9OT1RfUkVTUE9ORElORworCSB8fCBldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCXNhc19leHBhbmRlciA9IG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoaW9jLAorCQkgICAgZXhwYW5kZXJfaGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCV9zY3NpaF9ibG9ja19pb190b19jaGlsZHJlbl9hdHRhY2hlZF90b19leChpb2MsIHNhc19leHBhbmRlcik7CisJfSBlbHNlIGlmIChldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19SRVNQT05ESU5HKQorCQlfc2NzaWhfYmxvY2tfaW9fdG9fY2hpbGRyZW5fYXR0YWNoZWRfZGlyZWN0bHkoaW9jLCBldmVudF9kYXRhKTsKKworCWlmIChldmVudF9kYXRhLT5FeHBTdGF0dXMgIT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORykKKwkJcmV0dXJuOworCisJLyogbWFyayBpZ25vcmUgZmxhZyBmb3IgcGVuZGluZyBldmVudHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmd19ldmVudCwgJmlvYy0+ZndfZXZlbnRfbGlzdCwgbGlzdCkgeworCQlpZiAoZndfZXZlbnQtPmV2ZW50ICE9IE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUIHx8CisJCSAgICBmd19ldmVudC0+aWdub3JlKQorCQkJY29udGludWU7CisJCWxvY2FsX2V2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKKwkJaWYgKGxvY2FsX2V2ZW50X2RhdGEtPkV4cFN0YXR1cyA9PQorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19BRERFRCB8fAorCQkgICAgbG9jYWxfZXZlbnRfZGF0YS0+RXhwU3RhdHVzID09CisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX1JFU1BPTkRJTkcpIHsKKwkJCWlmIChsZTE2X3RvX2NwdShsb2NhbF9ldmVudF9kYXRhLT5FeHBhbmRlckRldkhhbmRsZSkgPT0KKwkJCSAgICBleHBhbmRlcl9oYW5kbGUpIHsKKwkJCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCQkJICAgICJzZXR0aW5nIGlnbm9yaW5nIGZsYWdcbiIsIGlvYy0+bmFtZSkpOworCQkJCWZ3X2V2ZW50LT5pZ25vcmUgPSAxOworCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9xdWV1ZV9yZXNjYW4gLSBxdWV1ZSBhIHRvcG9sb2d5IHJlc2NhbiBmcm9tIHVzZXIgY29udGV4dAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcXVldWVfcmVzY2FuKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQ7CisKKwlpZiAoaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSkKKwkJcmV0dXJuOworCWZ3X2V2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ3X2V2ZW50X3dvcmspLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWZ3X2V2ZW50KQorCQlyZXR1cm47CisJZndfZXZlbnQtPmV2ZW50ID0gTVBUMlNBU19SRVNDQU5fQUZURVJfSE9TVF9SRVNFVDsKKwlmd19ldmVudC0+aW9jID0gaW9jOworCV9zY3NpaF9md19ldmVudF9hZGQoaW9jLCBmd19ldmVudCk7Cit9CisKKy8qKgorICogX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyAtIGNvbXBsZXRpbmcgb3V0c3RhbmRpbmcgY29tbWFuZHMuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBUaGUgZmx1c2hpbmcgb3V0IG9mIGFsbCBwZW5kaW5nIHNjbWQgY29tbWFuZHMgZm9sbG93aW5nIGhvc3QgcmVzZXQsCisgKiB3aGVyZSBhbGwgSU8gaXMgZHJvcHBlZCB0byB0aGUgZmxvb3IuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZmx1c2hfcnVubmluZ19jbWRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXUxNiBzbWlkOworCXUxNiBjb3VudCA9IDA7CisKKwlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+cmVxdWVzdF9kZXB0aDsgc21pZCsrKSB7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0Y2xlYXIoaW9jLCBzbWlkKTsKKwkJaWYgKCFzY21kKQorCQkJY29udGludWU7CisJCWNvdW50Kys7CisJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJc2NzaV9kbWFfdW5tYXAoc2NtZCk7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKKwkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCX0KKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY29tcGxldGluZyAlZCBjbWRzXG4iLAorCSAgICBpb2MtPm5hbWUsIGNvdW50KSk7Cit9CisKKy8qKgorICogbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgY2FsbGJhY2sgaGFuZGxlciAoZm9yIHNjc2loKQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcmVzZXRfcGhhc2U6IHBoYXNlCisgKgorICogVGhlIGhhbmRsZXIgZm9yIGRvaW5nIGFueSByZXF1aXJlZCBjbGVhbnVwIG9yIGluaXRpYWxpemF0aW9uLgorICoKKyAqIFRoZSByZXNldCBwaGFzZSBjYW4gYmUgTVBUMl9JT0NfUFJFX1JFU0VULCBNUFQyX0lPQ19BRlRFUl9SRVNFVCwKKyAqIE1QVDJfSU9DX0RPTkVfUkVTRVQKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKQoreworCXN3aXRjaCAocmVzZXRfcGhhc2UpIHsKKwljYXNlIE1QVDJfSU9DX1BSRV9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX1BSRV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlfc2NzaWhfZndfZXZlbnRfb2ZmKGlvYyk7CisJCWJyZWFrOworCWNhc2UgTVBUMl9JT0NfQUZURVJfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19BRlRFUl9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKKwkJCWlvYy0+dG1fY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT50bV9jbWRzLnNtaWQpOworCQkJY29tcGxldGUoJmlvYy0+dG1fY21kcy5kb25lKTsKKwkJfQorCQlfc2NzaWhfZndfZXZlbnRfb24oaW9jKTsKKwkJX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyhpb2MpOworCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX0RPTkVfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCV9zY3NpaF9xdWV1ZV9yZXNjYW4oaW9jKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIHNjc2loX3FjbWQgLSBtYWluIHNjc2kgcmVxdWVzdCBlbnRyeSBwb2ludAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQGRvbmU6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgaW52b2tlZCBvbiBjb21wbGV0aW9uCisgKgorICogVGhlIGNhbGxiYWNrIGluZGV4IGlzIHNldCBpbnNpZGUgYGlvYy0+c2NzaV9pb19jYl9pZHhgLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLiAgSWYgdGhlcmUncyBhIGZhaWx1cmUsIHJldHVybiBlaXRoZXI6CisgKiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgaWYgdGhlIGRldmljZSBxdWV1ZSBpcyBmdWxsLCBvcgorICogU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSBpZiB0aGUgZW50aXJlIGhvc3QgcXVldWUgaXMgZnVsbAorICovCitzdGF0aWMgaW50CitzY3NpaF9xY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2NtZC0+ZGV2aWNlLT5ob3N0KTsKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJTXBpMlNDU0lJT1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJdTMyIG1waV9jb250cm9sOworCXUxNiBzbWlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzY21kLT5zY3NpX2RvbmUgPSBkb25lOworCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhKSB7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CisJCXJldHVybiAwOworCX0KKworCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQ7CisJaWYgKCFzYXNfdGFyZ2V0X3ByaXZfZGF0YSB8fCBzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID09CisJICAgIE1QVDJTQVNfSU5WQUxJRF9ERVZJQ0VfSEFORExFIHx8IHNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkKSB7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CisJCXJldHVybiAwOworCX0KKworCS8qIHNlZSBpZiB3ZSBhcmUgYnVzeSB3aXRoIHRhc2sgbWFuYWdtZW50IHN0dWZmICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgfHwKKwkgICAgaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCW1waV9jb250cm9sID0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9SRUFEOworCWVsc2UgaWYgKHNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCW1waV9jb250cm9sID0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9XUklURTsKKwllbHNlCisJCW1waV9jb250cm9sID0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9OT0RBVEFUUkFOU0ZFUjsKKworCS8qIHNldCB0YWdzICovCisJaWYgKCEoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9GTEFHU19JTklUKSkgeworCQlpZiAoc2NtZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CisJCQlpZiAoc2NtZC0+ZGV2aWNlLT5vcmRlcmVkX3RhZ3MpCisJCQkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9PUkRFUkVEUTsKKwkJCWVsc2UKKwkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CisJCX0gZWxzZQorLyogTVBJIFJldmlzaW9uIEkgKFVOSVQgPSAweEEpIC0gcmVtb3ZlZCBNUEkyX1NDU0lJT19DT05UUk9MX1VOVEFHR0VEICovCisvKgkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfVU5UQUdHRUQ7CisgKi8KKwkJCW1waV9jb250cm9sIHw9ICgweDUwMCk7CisKKwl9IGVsc2UKKwkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9TSU1QTEVROworCisJaWYgKChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX1RMUl9PTikpCisJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfVExSX09OOworCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+c2NzaV9pb19jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU0NTSUlPUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CisJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5mbGFncyAmCisJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpCisJCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIOworCWVsc2UKKwkJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9CisJICAgIGNwdV90b19sZTE2KHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUpOworCW1waV9yZXF1ZXN0LT5EYXRhTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2NzaV9idWZmbGVuKHNjbWQpKTsKKwltcGlfcmVxdWVzdC0+Q29udHJvbCA9IGNwdV90b19sZTMyKG1waV9jb250cm9sKTsKKwltcGlfcmVxdWVzdC0+SW9GbGFncyA9IGNwdV90b19sZTE2KHNjbWQtPmNtZF9sZW4pOworCW1waV9yZXF1ZXN0LT5Nc2dGbGFncyA9IE1QSTJfU0NTSUlPX01TR0ZMQUdTX1NZU1RFTV9TRU5TRV9BRERSOworCW1waV9yZXF1ZXN0LT5TZW5zZUJ1ZmZlckxlbmd0aCA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwltcGlfcmVxdWVzdC0+U2Vuc2VCdWZmZXJMb3dBZGRyZXNzID0KKwkgICAgKHUzMiltcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoaW9jLCBzbWlkKTsKKwltcGlfcmVxdWVzdC0+U0dMT2Zmc2V0MCA9IG9mZnNldG9mKE1waTJTQ1NJSU9SZXF1ZXN0X3QsIFNHTCkgLyA0OworCW1waV9yZXF1ZXN0LT5TR0xGbGFncyA9IGNwdV90b19sZTE2KE1QSTJfU0NTSUlPX1NHTEZMQUdTX1RZUEVfTVBJICsKKwkgICAgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU1lTVEVNX0FERFIpOworCisJaW50X3RvX3Njc2lsdW4oc2FzX2RldmljZV9wcml2X2RhdGEtPmx1biwgKHN0cnVjdCBzY3NpX2x1biAqKQorCSAgICBtcGlfcmVxdWVzdC0+TFVOKTsKKwltZW1jcHkobXBpX3JlcXVlc3QtPkNEQi5DREIzMiwgc2NtZC0+Y21uZCwgc2NtZC0+Y21kX2xlbik7CisKKwlpZiAoIW1waV9yZXF1ZXN0LT5EYXRhTGVuZ3RoKSB7CisJCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QtPlNHTCk7CisJfSBlbHNlIHsKKwkJaWYgKF9zY3NpaF9idWlsZF9zY2F0dGVyX2dhdGhlcihpb2MsIHNjbWQsIHNtaWQpKSB7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCV9zY3NpaF9zY3NpX2xvb2t1cF9zZXQoaW9jLCBzbWlkLCBzY21kKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsIDAsCisJICAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUpOworCXJldHVybiAwOworCisgb3V0OgorCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworfQorCisvKioKKyAqIF9zY3NpaF9ub3JtYWxpemVfc2Vuc2UgLSBub3JtYWxpemUgZGVzY3JpcHRvciBhbmQgZml4ZWQgZm9ybWF0IHNlbnNlIGRhdGEKKyAqIEBzZW5zZV9idWZmZXI6IHNlbnNlIGRhdGEgcmV0dXJuZWQgYnkgdGFyZ2V0CisgKiBAZGF0YTogbm9ybWFsaXplZCBza2V5L2FzYy9hc2NxCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfbm9ybWFsaXplX3NlbnNlKGNoYXIgKnNlbnNlX2J1ZmZlciwgc3RydWN0IHNlbnNlX2luZm8gKmRhdGEpCit7CisJaWYgKChzZW5zZV9idWZmZXJbMF0gJiAweDdGKSA+PSAweDcyKSB7CisJCS8qIGRlc2NyaXB0b3IgZm9ybWF0ICovCisJCWRhdGEtPnNrZXkgPSBzZW5zZV9idWZmZXJbMV0gJiAweDBGOworCQlkYXRhLT5hc2MgPSBzZW5zZV9idWZmZXJbMl07CisJCWRhdGEtPmFzY3EgPSBzZW5zZV9idWZmZXJbM107CisJfSBlbHNlIHsKKwkJLyogZml4ZWQgZm9ybWF0ICovCisJCWRhdGEtPnNrZXkgPSBzZW5zZV9idWZmZXJbMl0gJiAweDBGOworCQlkYXRhLT5hc2MgPSBzZW5zZV9idWZmZXJbMTJdOworCQlkYXRhLT5hc2NxID0gc2Vuc2VfYnVmZmVyWzEzXTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX3Njc2loX3Njc2lfaW9jX2luZm8gLSB0cmFuc2xhdGVkIG5vbi1zdWNjZXNmdWxsIFNDU0lfSU8gcmVxdWVzdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqCisgKiBzY3NpX3N0YXR1cyAtIFNDU0kgU3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJvbSB0YXJnZXQgZGV2aWNlCisgKiBzY3NpX3N0YXRlIC0gc3RhdGUgaW5mbyBhc3NvY2lhdGVkIHdpdGggU0NTSV9JTyBkZXRlcm1pbmVkIGJ5IGlvYworICogaW9jX3N0YXR1cyAtIGlvYyBzdXBwbGllZCBzdGF0dXMgaW5mbworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Njc2lfaW9jX2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAorICAgIE1waTJTQ1NJSU9SZXBseV90ICptcGlfcmVwbHksIHUxNiBzbWlkKQoreworCXUzMiByZXNwb25zZV9pbmZvOworCXU4ICpyZXNwb25zZV9ieXRlczsKKwl1MTYgaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJdTggc2NzaV9zdGF0ZSA9IG1waV9yZXBseS0+U0NTSVN0YXRlOworCXU4IHNjc2lfc3RhdHVzID0gbXBpX3JlcGx5LT5TQ1NJU3RhdHVzOworCWNoYXIgKmRlc2NfaW9jX3N0YXRlID0gTlVMTDsKKwljaGFyICpkZXNjX3Njc2lfc3RhdHVzID0gTlVMTDsKKwljaGFyICpkZXNjX3Njc2lfc3RhdGUgPSBpb2MtPnRtcF9zdHJpbmc7CisKKwlzd2l0Y2ggKGlvY19zdGF0dXMpIHsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1M6CisJCWRlc2NfaW9jX3N0YXRlID0gInN1Y2Nlc3MiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfRlVOQ1RJT046CisJCWRlc2NfaW9jX3N0YXRlID0gImludmFsaWQgZnVuY3Rpb24iOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUkVDT1ZFUkVEX0VSUk9SOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIHJlY292ZXJlZCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JTlZBTElEX0RFVkhBTkRMRToKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBpbnZhbGlkIGRldiBoYW5kbGUiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfREVWSUNFX05PVF9USEVSRToKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBkZXZpY2Ugbm90IHRoZXJlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfT1ZFUlJVTjoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBkYXRhIG92ZXJydW4iOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfREFUQV9VTkRFUlJVTjoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBkYXRhIHVuZGVycnVuIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lPX0RBVEFfRVJST1I6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgaW8gZGF0YSBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9QUk9UT0NPTF9FUlJPUjoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBwcm90b2NvbCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9UQVNLX1RFUk1JTkFURUQ6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgdGFzayB0ZXJtaW5hdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1JFU0lEVUFMX01JU01BVENIOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIHJlc2lkdWFsIG1pc21hdGNoIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1RBU0tfTUdNVF9GQUlMRUQ6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgdGFzayBtZ210IGZhaWxlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT0NfVEVSTUlOQVRFRDoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBpb2MgdGVybWluYXRlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9FWFRfVEVSTUlOQVRFRDoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBleHQgdGVybWluYXRlZCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRlc2NfaW9jX3N0YXRlID0gInVua25vd24iOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHNjc2lfc3RhdHVzKSB7CisJY2FzZSBNUEkyX1NDU0lfU1RBVFVTX0dPT0Q6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiZ29vZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19DSEVDS19DT05ESVRJT046CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiY2hlY2sgY29uZGl0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lfU1RBVFVTX0NPTkRJVElPTl9NRVQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiY29uZGl0aW9uIG1ldCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19CVVNZOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImJ1c3kiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImludGVybWVkaWF0ZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19JTlRFUk1FRElBVEVfQ09ORE1FVDoKKwkJZGVzY19zY3NpX3N0YXR1cyA9ICJpbnRlcm1lZGlhdGUgY29uZG1ldCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVDoKKwkJZGVzY19zY3NpX3N0YXR1cyA9ICJyZXNlcnZhdGlvbiBjb25mbGljdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19DT01NQU5EX1RFUk1JTkFURUQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiY29tbWFuZCB0ZXJtaW5hdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lfU1RBVFVTX1RBU0tfU0VUX0ZVTEw6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAidGFzayBzZXQgZnVsbCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19BQ0FfQUNUSVZFOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImFjYSBhY3RpdmUiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfVEFTS19BQk9SVEVEOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gInRhc2sgYWJvcnRlZCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKworCWRlc2Nfc2NzaV9zdGF0ZVswXSA9ICdcMCc7CisJaWYgKCFzY3NpX3N0YXRlKQorCQlkZXNjX3Njc2lfc3RhdGUgPSAiICI7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfUkVTUE9OU0VfSU5GT19WQUxJRCkKKwkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgInJlc3BvbnNlIGluZm8gIik7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfVEVSTUlOQVRFRCkKKwkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgInN0YXRlIHRlcm1pbmF0ZWQgIik7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfTk9fU0NTSV9TVEFUVVMpCisJCXN0cmNhdChkZXNjX3Njc2lfc3RhdGUsICJubyBzdGF0dXMgIik7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX0ZBSUxFRCkKKwkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgImF1dG9zZW5zZSBmYWlsZWQgIik7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEKQorCQlzdHJjYXQoZGVzY19zY3NpX3N0YXRlLCAiYXV0b3NlbnNlIHZhbGlkICIpOworCisJc2NzaV9wcmludF9jb21tYW5kKHNjbWQpOworCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdGRldiBoYW5kbGUoMHglMDR4KSwgIgorCSAgICAiaW9jX3N0YXR1cyglcykoMHglMDR4KSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwKKwkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LT5EZXZIYW5kbGUpLCBkZXNjX2lvY19zdGF0ZSwKKwkJaW9jX3N0YXR1cywgc21pZCk7CisJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIlx0cmVxdWVzdF9sZW4oJWQpLCB1bmRlcmZsb3coJWQpLCAiCisJICAgICJyZXNpZCglZClcbiIsIGlvYy0+bmFtZSwgc2NzaV9idWZmbGVuKHNjbWQpLCBzY21kLT51bmRlcmZsb3csCisJICAgIHNjc2lfZ2V0X3Jlc2lkKHNjbWQpKTsKKwlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHR0YWcoJWQpLCB0cmFuc2Zlcl9jb3VudCglZCksICIKKwkgICAgInNjLT5yZXN1bHQoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPlRhc2tUYWcpLAorCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRyYW5zZmVyQ291bnQpLCBzY21kLT5yZXN1bHQpOworCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdHNjc2lfc3RhdHVzKCVzKSgweCUwMngpLCAiCisJICAgICJzY3NpX3N0YXRlKCVzKSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIGRlc2Nfc2NzaV9zdGF0dXMsCisJICAgIHNjc2lfc3RhdHVzLCBkZXNjX3Njc2lfc3RhdGUsIHNjc2lfc3RhdGUpOworCisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEKSB7CisJCXN0cnVjdCBzZW5zZV9pbmZvIGRhdGE7CisJCV9zY3NpaF9ub3JtYWxpemVfc2Vuc2Uoc2NtZC0+c2Vuc2VfYnVmZmVyLCAmZGF0YSk7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdFtzZW5zZV9rZXksYXNjLGFzY3FdOiAiCisJCSAgICAiWzB4JTAyeCwweCUwMngsMHglMDJ4XVxuIiwgaW9jLT5uYW1lLCBkYXRhLnNrZXksCisJCSAgICBkYXRhLmFzYywgZGF0YS5hc2NxKTsKKwl9CisKKwlpZiAoc2NzaV9zdGF0ZSAmIE1QSTJfU0NTSV9TVEFURV9SRVNQT05TRV9JTkZPX1ZBTElEKSB7CisJCXJlc3BvbnNlX2luZm8gPSBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlSW5mbyk7CisJCXJlc3BvbnNlX2J5dGVzID0gKHU4ICopJnJlc3BvbnNlX2luZm87CisJCV9zY3NpaF9yZXNwb25zZV9jb2RlKGlvYywgcmVzcG9uc2VfYnl0ZXNbM10pOworCX0KK30KKyNlbmRpZgorCisvKioKKyAqIF9zY3NpaF9zbWFydF9wcmVkaWN0ZWRfZmF1bHQgLSBpbGx1bWluYXRlIEZhdWx0IExFRAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc21hcnRfcHJlZGljdGVkX2ZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlNcGkyU2VwUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNlcFJlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICpldmVudF9yZXBseTsKKwlNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGE7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXNzaXplX3Qgc3o7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIG9ubHkgaGFuZGxlIG5vbi1yYWlkIGRldmljZXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXN0YXJnZXQgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0OworCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CisKKwlpZiAoKHNhc190YXJnZXRfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpIHx8CisJICAgKChzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZPTFVNRSkpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJc3RhcmdldF9wcmludGsoS0VSTl9XQVJOSU5HLCBzdGFyZ2V0LCAicHJlZGljdGVkIGZhdWx0XG4iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKGlvYy0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lCTSkgeworCQltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNlcFJlcXVlc3RfdCkpOworCQltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9FTkNMT1NVUkVfUFJPQ0VTU09SOworCQltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX1NFUF9SRVFfQUNUSU9OX1dSSVRFX1NUQVRVUzsKKwkJbXBpX3JlcXVlc3QuU2xvdFN0YXR1cyA9CisJCSAgICBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQ7CisJCW1waV9yZXF1ZXN0LkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisJCW1waV9yZXF1ZXN0LkZsYWdzID0gTVBJMl9TRVBfUkVRX0ZMQUdTX0RFVkhBTkRMRV9BRERSRVNTOworCQlpZiAoKG1wdDJzYXNfYmFzZV9zY3NpX2VuY2xvc3VyZV9wcm9jZXNzb3IoaW9jLCAmbXBpX3JlcGx5LAorCQkgICAgJm1waV9yZXF1ZXN0KSkgIT0gMCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKG1waV9yZXBseS5JT0NTdGF0dXMgfHwgbXBpX3JlcGx5LklPQ0xvZ0luZm8pIHsKKwkJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCQkJICAgICJlbmNsb3N1cmVfcHJvY2Vzc29yOiBpb2Nfc3RhdHVzICgweCUwNHgpLCAiCisJCQkgICAgImxvZ2luZm8oMHglMDh4KVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpLAorCQkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS5JT0NMb2dJbmZvKSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogaW5zZXJ0IGludG8gZXZlbnQgbG9nICovCisJc3ogPSBvZmZzZXRvZihNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90LCBFdmVudERhdGEpICsKKwkgICAgIHNpemVvZihNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QpOworCWV2ZW50X3JlcGx5ID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFldmVudF9yZXBseSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWV2ZW50X3JlcGx5LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OOworCWV2ZW50X3JlcGx5LT5FdmVudCA9CisJICAgIGNwdV90b19sZTE2KE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFKTsKKwlldmVudF9yZXBseS0+TXNnTGVuZ3RoID0gc3ovNDsKKwlldmVudF9yZXBseS0+RXZlbnREYXRhTGVuZ3RoID0KKwkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdCkvNCk7CisJZXZlbnRfZGF0YSA9IChNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QgKikKKwkgICAgZXZlbnRfcmVwbHktPkV2ZW50RGF0YTsKKwlldmVudF9kYXRhLT5SZWFzb25Db2RlID0gTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQTsKKwlldmVudF9kYXRhLT5BU0MgPSAweDVEOworCWV2ZW50X2RhdGEtPkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisJZXZlbnRfZGF0YS0+U0FTQWRkcmVzcyA9IGNwdV90b19sZTY0KHNhc190YXJnZXRfcHJpdl9kYXRhLT5zYXNfYWRkcmVzcyk7CisJbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhpb2MsIGV2ZW50X3JlcGx5KTsKKwlrZnJlZShldmVudF9yZXBseSk7Cit9CisKKy8qKgorICogc2NzaWhfaW9fZG9uZSAtIHNjc2kgcmVxdWVzdCBjYWxsYmFjaworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqCisgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgc2NzaWhfcWNtZC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK3Njc2loX2lvX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3sKKwlNcGkyU0NTSUlPUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlNcGkyU0NTSUlPUmVwbHlfdCAqbXBpX3JlcGx5OworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisJdTE2IGlvY19zdGF0dXM7CisJdTMyIHhmZXJfY250OworCXU4IHNjc2lfc3RhdGU7CisJdTggc2NzaV9zdGF0dXM7CisJdTMyIGxvZ19pbmZvOworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CisJdTMyIHJlc3BvbnNlX2NvZGU7CisKKwltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKGlvYywgc21pZCk7CisJaWYgKHNjbWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCisJaWYgKG1waV9yZXBseSA9PSBOVUxMKSB7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKKwkJZ290byBvdXQ7CisJfQorCisJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0IHx8CisJICAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+ZGVsZXRlZCkgeworCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdHVybmluZyBvZmYgVExSICovCisJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKSB7CisJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT50bHJfc25vb3BfY2hlY2srKzsKKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSB7CisJCQlyZXNwb25zZV9jb2RlID0gKGxlMzJfdG9fY3B1KG1waV9yZXBseS0+UmVzcG9uc2VJbmZvKQorCQkJICAgID4+IDI0KTsKKwkJCWlmIChyZXNwb25zZV9jb2RlID09CisJCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lOVkFMSURfRlJBTUUpCisJCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICY9CisJCQkJICAgIH5NUFRfREVWSUNFX1RMUl9PTjsKKwkJfQorCX0KKworCXhmZXJfY250ID0gbGUzMl90b19jcHUobXBpX3JlcGx5LT5UcmFuc2ZlckNvdW50KTsKKwlzY3NpX3NldF9yZXNpZChzY21kLCBzY3NpX2J1ZmZsZW4oc2NtZCkgLSB4ZmVyX2NudCk7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKTsKKwlpZiAoaW9jX3N0YXR1cyAmIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFKQorCQlsb2dfaW5mbyA9ICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pOworCWVsc2UKKwkJbG9nX2luZm8gPSAwOworCWlvY19zdGF0dXMgJj0gTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlzY3NpX3N0YXRlID0gbXBpX3JlcGx5LT5TQ1NJU3RhdGU7CisJc2NzaV9zdGF0dXMgPSBtcGlfcmVwbHktPlNDU0lTdGF0dXM7CisKKwlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfVU5ERVJSVU4gJiYgeGZlcl9jbnQgPT0gMCAmJgorCSAgICAoc2NzaV9zdGF0dXMgPT0gTVBJMl9TQ1NJX1NUQVRVU19CVVNZIHx8CisJICAgICBzY3NpX3N0YXR1cyA9PSBNUEkyX1NDU0lfU1RBVFVTX1JFU0VSVkFUSU9OX0NPTkZMSUNUIHx8CisJICAgICBzY3NpX3N0YXR1cyA9PSBNUEkyX1NDU0lfU1RBVFVTX1RBU0tfU0VUX0ZVTEwpKSB7CisJCWlvY19zdGF0dXMgPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTOworCX0KKworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkgeworCQlzdHJ1Y3Qgc2Vuc2VfaW5mbyBkYXRhOworCQljb25zdCB2b2lkICpzZW5zZV9kYXRhID0gbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoaW9jLAorCQkgICAgc21pZCk7CisJCW1lbWNweShzY21kLT5zZW5zZV9idWZmZXIsIHNlbnNlX2RhdGEsCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlNlbnNlQ291bnQpKTsKKwkJX3Njc2loX25vcm1hbGl6ZV9zZW5zZShzY21kLT5zZW5zZV9idWZmZXIsICZkYXRhKTsKKwkJLyogZmFpbHVyZSBwcmVkaWN0aW9uIHRocmVzaG9sZCBleGNlZWRlZCAqLworCQlpZiAoZGF0YS5hc2MgPT0gMHg1RCkKKwkJCV9zY3NpaF9zbWFydF9wcmVkaWN0ZWRfZmF1bHQoaW9jLAorCQkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKSk7CisJfQorCisJc3dpdGNoIChpb2Nfc3RhdHVzKSB7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19CVVNZOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzoKKwkJc2NtZC0+cmVzdWx0ID0gU0FNX1NUQVRfQlVTWTsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfREVWSUNFX05PVF9USEVSRToKKwkJc2NtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lPQ19URVJNSU5BVEVEOgorCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPmJsb2NrKSB7CisJCQlzY21kLT5yZXN1bHQgPSAoRElEX0JVU19CVVNZIDw8IDE2KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19URVJNSU5BVEVEOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9FWFRfVEVSTUlOQVRFRDoKKwkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQlicmVhazsKKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9SRVNJRFVBTF9NSVNNQVRDSDoKKwkJaWYgKCh4ZmVyX2NudCA9PSAwKSB8fCAoc2NtZC0+dW5kZXJmbG93ID4geGZlcl9jbnQpKQorCQkJc2NtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCWVsc2UKKwkJCXNjbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgc2NzaV9zdGF0dXM7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfVU5ERVJSVU46CisJCXNjbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgc2NzaV9zdGF0dXM7CisKKwkJaWYgKChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkpCisJCQlicmVhazsKKworCQlpZiAoeGZlcl9jbnQgPCBzY21kLT51bmRlcmZsb3cpIHsKKwkJCWlmIChzY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9CVVNZKQorCQkJCXNjbWQtPnJlc3VsdCA9IFNBTV9TVEFUX0JVU1k7CisJCQllbHNlCisJCQkJc2NtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCX0gZWxzZSBpZiAoc2NzaV9zdGF0ZSAmIChNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX0ZBSUxFRCB8CisJCSAgICAgTVBJMl9TQ1NJX1NUQVRFX05PX1NDU0lfU1RBVFVTKSkKKwkJCXNjbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQllbHNlIGlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX1RFUk1JTkFURUQpCisJCQlzY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CisJCWVsc2UgaWYgKCF4ZmVyX2NudCAmJiBzY21kLT5jbW5kWzBdID09IFJFUE9SVF9MVU5TKSB7CisJCQltcGlfcmVwbHktPlNDU0lTdGF0ZSA9IE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQ7CisJCQltcGlfcmVwbHktPlNDU0lTdGF0dXMgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCQlzY21kLT5yZXN1bHQgPSAoRFJJVkVSX1NFTlNFIDw8IDI0KSB8CisJCQkgICAgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOworCQkJc2NtZC0+c2Vuc2VfYnVmZmVyWzBdID0gMHg3MDsKKwkJCXNjbWQtPnNlbnNlX2J1ZmZlclsyXSA9IElMTEVHQUxfUkVRVUVTVDsKKwkJCXNjbWQtPnNlbnNlX2J1ZmZlclsxMl0gPSAweDIwOworCQkJc2NtZC0+c2Vuc2VfYnVmZmVyWzEzXSA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfREFUQV9PVkVSUlVOOgorCQlzY3NpX3NldF9yZXNpZChzY21kLCAwKTsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUkVDT1ZFUkVEX0VSUk9SOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUzoKKwkJc2NtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBzY3NpX3N0YXR1czsKKwkJaWYgKHNjc2lfc3RhdGUgJiAoTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9GQUlMRUQgfAorCQkgICAgIE1QSTJfU0NTSV9TVEFURV9OT19TQ1NJX1NUQVRVUykpCisJCQlzY21kLT5yZXN1bHQgPSBESURfU09GVF9FUlJPUiA8PCAxNjsKKwkJZWxzZSBpZiAoc2NzaV9zdGF0ZSAmIE1QSTJfU0NTSV9TVEFURV9URVJNSU5BVEVEKQorCQkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQlicmVhazsKKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9QUk9UT0NPTF9FUlJPUjoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfRlVOQ1RJT046CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX1NHTDoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVEVSTkFMX0VSUk9SOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9GSUVMRDoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfU1RBVEU6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lPX0RBVEFfRVJST1I6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1RBU0tfTUdNVF9GQUlMRUQ6CisJZGVmYXVsdDoKKwkJc2NtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCWJyZWFrOworCisJfQorCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJaWYgKHNjbWQtPnJlc3VsdCAmJiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1JFUExZKSkKKwkJX3Njc2loX3Njc2lfaW9jX2luZm8oaW9jICwgc2NtZCwgbXBpX3JlcGx5LCBzbWlkKTsKKyNlbmRpZgorCisgb3V0OgorCXNjc2lfZG1hX3VubWFwKHNjbWQpOworCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKK30KKworLyoqCisgKiBfc2NzaWhfbGlua19jaGFuZ2UgLSBwcm9jZXNzIHBoeSBsaW5rIGNoYW5nZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogcGh5IGhhbmRsZQorICogQGF0dGFjaGVkX2hhbmRsZTogdmFsaWQgZm9yIGRldmljZXMgYXR0YWNoZWQgdG8gbGluaworICogQHBoeV9udW1iZXI6IHBoeSBudW1iZXIKKyAqIEBsaW5rX3JhdGU6IG5ldyBsaW5rIHJhdGUKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfbGlua19jaGFuZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLCB1MTYgYXR0YWNoZWRfaGFuZGxlLAorICAgdTggcGh5X251bWJlciwgdTggbGlua19yYXRlKQoreworCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9waHlfbGlua19jaGFuZ2UoaW9jLCBoYW5kbGUsIGF0dGFjaGVkX2hhbmRsZSwKKwkgICAgcGh5X251bWJlciwgbGlua19yYXRlKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaCAtIHJlZnJlc2hpbmcgc2FzIGhvc3Qgb2JqZWN0IGNvbnRlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEB1cGRhdGU6IHVwZGF0ZSBsaW5rIGluZm9ybWF0aW9uCisgKiBDb250ZXh0OiB1c2VyCisgKgorICogRHVyaW5nIHBvcnQgZW5hYmxlLCBmdyB3aWxsIHNlbmQgdG9wb2xvZ3kgZXZlbnRzIGZvciBldmVyeSBkZXZpY2UuIEl0cworICogcG9zc2libGUgdGhhdCB0aGUgaGFuZGxlcyBtYXkgY2hhbmdlIGZyb20gdGhlIHByZXZpb3VzIHNldHRpbmcsIHNvIHRoaXMKKyAqIGNvZGUga2VlcGluZyBoYW5kbGVzIHVwZGF0aW5nIGlmIGNoYW5nZWQuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IHVwZGF0ZSkKK3sKKwl1MTYgc3o7CisJdTE2IGlvY19zdGF0dXM7CisJaW50IGk7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCU1waTJTYXNJT1VuaXRQYWdlMF90ICpzYXNfaW91bml0X3BnMCA9IE5VTEw7CisKKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAorCSAgICAidXBkYXRpbmcgaGFuZGxlcyBmb3Igc2FzX2hvc3QoMHglMDE2bGx4KVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcykpOworCisJc3ogPSBvZmZzZXRvZihNcGkyU2FzSU9Vbml0UGFnZTBfdCwgUGh5RGF0YSkgKyAoaW9jLT5zYXNfaGJhLm51bV9waHlzCisJICAgICogc2l6ZW9mKE1waTJTYXNJT1VuaXQwUGh5RGF0YV90KSk7CisJc2FzX2lvdW5pdF9wZzAgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19pb3VuaXRfcGcwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWlmICghKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMChpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcwLCBzeikpKSB7CisJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCQlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKQorCQkJZ290byBvdXQ7CisJCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgOyBpKyspIHsKKwkJCWlvYy0+c2FzX2hiYS5waHlbaV0uaGFuZGxlID0KKwkJCSAgICBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS4KKwkJCQlDb250cm9sbGVyRGV2SGFuZGxlKTsKKwkJCWlmICh1cGRhdGUpCisJCQkJX3Njc2loX2xpbmtfY2hhbmdlKGlvYywKKwkJCQkgICAgaW9jLT5zYXNfaGJhLnBoeVtpXS5oYW5kbGUsCisJCQkJICAgIGxlMTZfdG9fY3B1KHNhc19pb3VuaXRfcGcwLT5QaHlEYXRhW2ldLgorCQkJCSAgICBBdHRhY2hlZERldkhhbmRsZSksIGksCisJCQkJICAgIHNhc19pb3VuaXRfcGcwLT5QaHlEYXRhW2ldLgorCQkJCSAgICBOZWdvdGlhdGVkTGlua1JhdGUgPj4gNCk7CisJCX0KKwl9CisKKyBvdXQ6CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzApOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfaG9zdF9hZGQgLSBjcmVhdGUgc2FzIGhvc3Qgb2JqZWN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBDcmVhdGluZyBob3N0IHNpZGUgZGF0YSBvYmplY3QsIHN0b3JlZCBpbiBpb2MtPnNhc19oYmEKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfaG9zdF9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCWludCBpOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlNcGkyU2FzSU9Vbml0UGFnZTBfdCAqc2FzX2lvdW5pdF9wZzAgPSBOVUxMOworCU1waTJTYXNJT1VuaXRQYWdlMV90ICpzYXNfaW91bml0X3BnMSA9IE5VTEw7CisJTXBpMlNhc1BoeVBhZ2UwX3QgcGh5X3BnMDsKKwlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsKKwlNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCBlbmNsb3N1cmVfcGcwOworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBzejsKKwl1MTYgZGV2aWNlX21pc3NpbmdfZGVsYXk7CisKKwltcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzKGlvYywgJmlvYy0+c2FzX2hiYS5udW1fcGh5cyk7CisJaWYgKCFpb2MtPnNhc19oYmEubnVtX3BoeXMpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzYXNfaW91bml0IHBhZ2UgMCAqLworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UwX3QsIFBoeURhdGEpICsgKGlvYy0+c2FzX2hiYS5udW1fcGh5cyAqCisJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0MFBoeURhdGFfdCkpOworCXNhc19pb3VuaXRfcGcwID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfaW91bml0X3BnMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMChpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcwLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBzYXNfaW91bml0IHBhZ2UgMSAqLworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UxX3QsIFBoeURhdGEpICsgKGlvYy0+c2FzX2hiYS5udW1fcGh5cyAqCisJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0MVBoeURhdGFfdCkpOworCXNhc19pb3VuaXRfcGcxID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfaW91bml0X3BnMSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwKKwkgICAgc2FzX2lvdW5pdF9wZzEsIHN6KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCWlvYy0+aW9fbWlzc2luZ19kZWxheSA9CisJICAgIGxlMTZfdG9fY3B1KHNhc19pb3VuaXRfcGcxLT5JT0RldmljZU1pc3NpbmdEZWxheSk7CisJZGV2aWNlX21pc3NpbmdfZGVsYXkgPQorCSAgICBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMS0+UmVwb3J0RGV2aWNlTWlzc2luZ0RlbGF5KTsKKwlpZiAoZGV2aWNlX21pc3NpbmdfZGVsYXkgJiBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVU5JVF8xNikKKwkJaW9jLT5kZXZpY2VfbWlzc2luZ19kZWxheSA9IChkZXZpY2VfbWlzc2luZ19kZWxheSAmCisJCSAgICBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVElNRU9VVF9NQVNLKSAqIDE2OworCWVsc2UKKwkJaW9jLT5kZXZpY2VfbWlzc2luZ19kZWxheSA9IGRldmljZV9taXNzaW5nX2RlbGF5ICYKKwkJICAgIE1QSTJfU0FTSU9VTklUMV9SRVBPUlRfTUlTU0lOR19USU1FT1VUX01BU0s7CisKKwlpb2MtPnNhc19oYmEucGFyZW50X2RldiA9ICZpb2MtPnNob3N0LT5zaG9zdF9nZW5kZXY7CisJaW9jLT5zYXNfaGJhLnBoeSA9IGtjYWxsb2MoaW9jLT5zYXNfaGJhLm51bV9waHlzLAorCSAgICBzaXplb2Yoc3RydWN0IF9zYXNfcGh5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPnNhc19oYmEucGh5KSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cyA7IGkrKykgeworCQlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9waHlfcGcwKGlvYywgJm1waV9yZXBseSwgJnBoeV9wZzAsCisJCSAgICBpKSkpIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCQlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpb2MtPnNhc19oYmEucGh5W2ldLmhhbmRsZSA9CisJCSAgICBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS5Db250cm9sbGVyRGV2SGFuZGxlKTsKKwkJaW9jLT5zYXNfaGJhLnBoeVtpXS5waHlfaWQgPSBpOworCQltcHQyc2FzX3RyYW5zcG9ydF9hZGRfaG9zdF9waHkoaW9jLCAmaW9jLT5zYXNfaGJhLnBoeVtpXSwKKwkJICAgIHBoeV9wZzAsIGlvYy0+c2FzX2hiYS5wYXJlbnRfZGV2KTsKKwl9CisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmc2FzX2RldmljZV9wZzAsCisJICAgIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLCBpb2MtPnNhc19oYmEucGh5WzBdLmhhbmRsZSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5zYXNfaGJhLmhhbmRsZSA9IGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldkhhbmRsZSk7CisJaW9jLT5zYXNfaGJhLmVuY2xvc3VyZV9oYW5kbGUgPQorCSAgICBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5FbmNsb3N1cmVIYW5kbGUpOworCWlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlNBU0FkZHJlc3MpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJob3N0X2FkZDogaGFuZGxlKDB4JTA0eCksICIKKwkgICAgInNhc19hZGRyKDB4JTAxNmxseCksIHBoeXMoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2FzX2hiYS5oYW5kbGUsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcywKKwkgICAgaW9jLT5zYXNfaGJhLm51bV9waHlzKSA7CisKKwlpZiAoaW9jLT5zYXNfaGJhLmVuY2xvc3VyZV9oYW5kbGUpIHsKKwkJaWYgKCEobXB0MnNhc19jb25maWdfZ2V0X2VuY2xvc3VyZV9wZzAoaW9jLCAmbXBpX3JlcGx5LAorCQkgICAgJmVuY2xvc3VyZV9wZzAsCisJCSAgIE1QSTJfU0FTX0VOQ0xPU19QR0FEX0ZPUk1fSEFORExFLAorCQkgICBpb2MtPnNhc19oYmEuZW5jbG9zdXJlX2hhbmRsZSkpKSB7CisJCQlpb2MtPnNhc19oYmEuZW5jbG9zdXJlX2xvZ2ljYWxfaWQgPQorCQkJICAgIGxlNjRfdG9fY3B1KGVuY2xvc3VyZV9wZzAuRW5jbG9zdXJlTG9naWNhbElEKTsKKwkJfQorCX0KKworIG91dDoKKwlrZnJlZShzYXNfaW91bml0X3BnMSk7CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzApOworfQorCisvKioKKyAqIF9zY3NpaF9leHBhbmRlcl9hZGQgLSAgY3JlYXRpbmcgZXhwYW5kZXIgb2JqZWN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGV4cGFuZGVyIGhhbmRsZQorICoKKyAqIENyZWF0aW5nIGV4cGFuZGVyIG9iamVjdCwgc3RvcmVkIGluIGlvYy0+c2FzX2V4cGFuZGVyX2xpc3QuCisgKgorICogUmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIGVsc2UgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK19zY3NpaF9leHBhbmRlcl9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMkV4cGFuZGVyUGFnZTBfdCBleHBhbmRlcl9wZzA7CisJTXBpMkV4cGFuZGVyUGFnZTFfdCBleHBhbmRlcl9wZzE7CisJTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QgZW5jbG9zdXJlX3BnMDsKKwl1MzIgaW9jX3N0YXR1czsKKwl1MTYgcGFyZW50X2hhbmRsZTsKKwlfX2xlNjQgc2FzX2FkZHJlc3M7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQ7CisJaW50IHJjID0gMDsKKworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmZXhwYW5kZXJfcGcwLAorCSAgICBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hOREwsIGhhbmRsZSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogaGFuZGxlIG91dCBvZiBvcmRlciB0b3BvbG9neSBldmVudHMgKi8KKwlwYXJlbnRfaGFuZGxlID0gbGUxNl90b19jcHUoZXhwYW5kZXJfcGcwLlBhcmVudERldkhhbmRsZSk7CisJaWYgKHBhcmVudF9oYW5kbGUgPj0gaW9jLT5zYXNfaGJhLm51bV9waHlzKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwkJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZShpb2MsCisJCSAgICBwYXJlbnRfaGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCWlmICghc2FzX2V4cGFuZGVyKSB7CisJCQlyYyA9IF9zY3NpaF9leHBhbmRlcl9hZGQoaW9jLCBwYXJlbnRfaGFuZGxlKTsKKwkJCWlmIChyYyAhPSAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCX0KKworCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoZXhwYW5kZXJfcGcwLlNBU0FkZHJlc3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCXNhc19leHBhbmRlciA9IG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJICAgIHNhc19hZGRyZXNzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzYXNfZXhwYW5kZXIpCisJCXJldHVybiAwOworCisJc2FzX2V4cGFuZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IF9zYXNfbm9kZSksCisJICAgIEdGUF9LRVJORUwpOworCWlmICghc2FzX2V4cGFuZGVyKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJc2FzX2V4cGFuZGVyLT5oYW5kbGUgPSBoYW5kbGU7CisJc2FzX2V4cGFuZGVyLT5udW1fcGh5cyA9IGV4cGFuZGVyX3BnMC5OdW1QaHlzOworCXNhc19leHBhbmRlci0+cGFyZW50X2hhbmRsZSA9IHBhcmVudF9oYW5kbGU7CisJc2FzX2V4cGFuZGVyLT5lbmNsb3N1cmVfaGFuZGxlID0KKwkgICAgbGUxNl90b19jcHUoZXhwYW5kZXJfcGcwLkVuY2xvc3VyZUhhbmRsZSk7CisJc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyA9IHNhc19hZGRyZXNzOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImV4cGFuZGVyX2FkZDogaGFuZGxlKDB4JTA0eCksIgorCSAgICAiIHBhcmVudCgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLCBwaHlzKCVkKVxuIiwgaW9jLT5uYW1lLAorCSAgICBoYW5kbGUsIHNhc19leHBhbmRlci0+cGFyZW50X2hhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkgICAgc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcywgc2FzX2V4cGFuZGVyLT5udW1fcGh5cyk7CisKKwlpZiAoIXNhc19leHBhbmRlci0+bnVtX3BoeXMpCisJCWdvdG8gb3V0X2ZhaWw7CisJc2FzX2V4cGFuZGVyLT5waHkgPSBrY2FsbG9jKHNhc19leHBhbmRlci0+bnVtX3BoeXMsCisJICAgIHNpemVvZihzdHJ1Y3QgX3Nhc19waHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19leHBhbmRlci0+cGh5KSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC0xOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZzYXNfZXhwYW5kZXItPnNhc19wb3J0X2xpc3QpOworCW1wdDJzYXNfcG9ydCA9IG1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgaGFuZGxlLAorCSAgICBzYXNfZXhwYW5kZXItPnBhcmVudF9oYW5kbGUpOworCWlmICghbXB0MnNhc19wb3J0KSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC0xOworCQlnb3RvIG91dF9mYWlsOworCX0KKwlzYXNfZXhwYW5kZXItPnBhcmVudF9kZXYgPSAmbXB0MnNhc19wb3J0LT5ycGh5LT5kZXY7CisKKwlmb3IgKGkgPSAwIDsgaSA8IHNhc19leHBhbmRlci0+bnVtX3BoeXMgOyBpKyspIHsKKwkJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcxKGlvYywgJm1waV9yZXBseSwKKwkJICAgICZleHBhbmRlcl9wZzEsIGksIGhhbmRsZSkpKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQljb250aW51ZTsKKwkJfQorCQlzYXNfZXhwYW5kZXItPnBoeVtpXS5oYW5kbGUgPSBoYW5kbGU7CisJCXNhc19leHBhbmRlci0+cGh5W2ldLnBoeV9pZCA9IGk7CisJCW1wdDJzYXNfdHJhbnNwb3J0X2FkZF9leHBhbmRlcl9waHkoaW9jLCAmc2FzX2V4cGFuZGVyLT5waHlbaV0sCisJCSAgICBleHBhbmRlcl9wZzEsIHNhc19leHBhbmRlci0+cGFyZW50X2Rldik7CisJfQorCisJaWYgKHNhc19leHBhbmRlci0+ZW5jbG9zdXJlX2hhbmRsZSkgeworCQlpZiAoIShtcHQyc2FzX2NvbmZpZ19nZXRfZW5jbG9zdXJlX3BnMChpb2MsICZtcGlfcmVwbHksCisJCSAgICAmZW5jbG9zdXJlX3BnMCwgTVBJMl9TQVNfRU5DTE9TX1BHQURfRk9STV9IQU5ETEUsCisJCSAgIHNhc19leHBhbmRlci0+ZW5jbG9zdXJlX2hhbmRsZSkpKSB7CisJCQlzYXNfZXhwYW5kZXItPmVuY2xvc3VyZV9sb2dpY2FsX2lkID0KKwkJCSAgICBsZTY0X3RvX2NwdShlbmNsb3N1cmVfcGcwLkVuY2xvc3VyZUxvZ2ljYWxJRCk7CisJCX0KKwl9CisKKwlfc2NzaWhfZXhwYW5kZXJfbm9kZV9hZGQoaW9jLCBzYXNfZXhwYW5kZXIpOworCSByZXR1cm4gMDsKKworIG91dF9mYWlsOgorCisJaWYgKHNhc19leHBhbmRlcikKKwkJa2ZyZWUoc2FzX2V4cGFuZGVyLT5waHkpOworCWtmcmVlKHNhc19leHBhbmRlcik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9zY3NpaF9leHBhbmRlcl9yZW1vdmUgLSByZW1vdmluZyBleHBhbmRlciBvYmplY3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZXhwYW5kZXIgaGFuZGxlCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZXhwYW5kZXIgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlfc2NzaWhfZXhwYW5kZXJfbm9kZV9yZW1vdmUoaW9jLCBzYXNfZXhwYW5kZXIpOworfQorCisvKioKKyAqIF9zY3NpaF9hZGRfZGV2aWNlIC0gIGNyZWF0aW5nIHNhcyBkZXZpY2Ugb2JqZWN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlCisgKiBAcGh5X251bTogcGh5IG51bWJlciBlbmQgZGV2aWNlIGF0dGFjaGVkIHRvCisgKiBAaXNfcGQ6IGlzIHRoaXMgaGlkZGVuIHJhaWQgY29tcG9uZW50CisgKgorICogQ3JlYXRpbmcgZW5kIGRldmljZSBvYmplY3QsIHN0b3JlZCBpbiBpb2MtPnNhc19kZXZpY2VfbGlzdC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50Citfc2NzaWhfYWRkX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsIHU4IHBoeV9udW0sIHU4IGlzX3BkKQoreworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsKKwlNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCBlbmNsb3N1cmVfcGcwOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1MzIgaW9jX3N0YXR1czsKKwlfX2xlNjQgc2FzX2FkZHJlc3M7CisJdTMyIGRldmljZV9pbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChpb2MsICZtcGlfcmVwbHksICZzYXNfZGV2aWNlX3BnMCwKKwkgICAgTVBJMl9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUsIGhhbmRsZSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogY2hlY2sgaWYgZGV2aWNlIGlzIHByZXNlbnQgKi8KKwlpZiAoIShsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5GbGFncykgJgorCSAgICBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX0RFVklDRV9QUkVTRU5UKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiRmxhZ3MgPSAweCUwNHhcbiIsCisJCSAgICBpb2MtPm5hbWUsIGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkZsYWdzKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1cyB3aXRoIGRpc2NvdmVyeSAqLworCWlmIChzYXNfZGV2aWNlX3BnMC5BY2Nlc3NTdGF0dXMgPT0KKwkgICAgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NBVEFfSU5JVF9GQUlMRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIkFjY2Vzc1N0YXR1cyA9IDB4JTAyeFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgc2FzX2RldmljZV9wZzAuQWNjZXNzU3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgZW5kIGRldmljZSAqLworCWRldmljZV9pbmZvID0gbGUzMl90b19jcHUoc2FzX2RldmljZV9wZzAuRGV2aWNlSW5mbyk7CisJaWYgKCEoX3Njc2loX2lzX2VuZF9kZXZpY2UoZGV2aWNlX2luZm8pKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2RldmljZV9wZzAuU0FTQWRkcmVzcyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCSAgICBzYXNfYWRkcmVzcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzYXNfZGV2aWNlKSB7CisJCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgaGFuZGxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2FzX2RldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfc2FzX2RldmljZSksCisJICAgIEdGUF9LRVJORUwpOworCWlmICghc2FzX2RldmljZSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNhc19kZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKKwlzYXNfZGV2aWNlLT5wYXJlbnRfaGFuZGxlID0KKwkgICAgbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuUGFyZW50RGV2SGFuZGxlKTsKKwlzYXNfZGV2aWNlLT5lbmNsb3N1cmVfaGFuZGxlID0KKwkgICAgbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuRW5jbG9zdXJlSGFuZGxlKTsKKwlzYXNfZGV2aWNlLT5zbG90ID0KKwkgICAgbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuU2xvdCk7CisJc2FzX2RldmljZS0+ZGV2aWNlX2luZm8gPSBkZXZpY2VfaW5mbzsKKwlzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyA9IHNhc19hZGRyZXNzOworCXNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCA9IGlzX3BkOworCisJLyogZ2V0IGVuY2xvc3VyZV9sb2dpY2FsX2lkICovCisJaWYgKCEobXB0MnNhc19jb25maWdfZ2V0X2VuY2xvc3VyZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmZW5jbG9zdXJlX3BnMCwKKwkgICBNUEkyX1NBU19FTkNMT1NfUEdBRF9GT1JNX0hBTkRMRSwKKwkgICBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfaGFuZGxlKSkpIHsKKwkJc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQgPQorCQkgICAgbGU2NF90b19jcHUoZW5jbG9zdXJlX3BnMC5FbmNsb3N1cmVMb2dpY2FsSUQpOworCX0KKworCS8qIGdldCBkZXZpY2UgbmFtZSAqLworCXNhc19kZXZpY2UtPmRldmljZV9uYW1lID0gbGU2NF90b19jcHUoc2FzX2RldmljZV9wZzAuRGV2aWNlTmFtZSk7CisKKwlpZiAoaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSkKKwkJX3Njc2loX3Nhc19kZXZpY2VfaW5pdF9hZGQoaW9jLCBzYXNfZGV2aWNlKTsKKwllbHNlCisJCV9zY3NpaF9zYXNfZGV2aWNlX2FkZChpb2MsIHNhc19kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX3Njc2loX3JlbW92ZV9kZXZpY2UgLSAgcmVtb3Zpbmcgc2FzIGRldmljZSBvYmplY3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogc2FzIGRldmljZSBoYW5kbGUKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJdTE2IGRldmljZV9oYW5kbGU7CisKKwkvKiBsb29rdXAgc2FzX2RldmljZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJaWYgKCFzYXNfZGV2aWNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlcjogaGFuZGxlIgorCSAgICAiKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGhhbmRsZSkpOworCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQgJiYgc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGEpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmRlbGV0ZWQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKGlvYy0+cmVtb3ZlX2hvc3QpCisJCWdvdG8gb3V0OworCisJLyogVGFyZ2V0IFJlc2V0IHRvIGZsdXNoIG91dCBhbGwgdGhlIG91dHN0YW5kaW5nIElPICovCisJZGV2aWNlX2hhbmRsZSA9IChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpID8KKwkgICAgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSA6IGhhbmRsZTsKKwlpZiAoZGV2aWNlX2hhbmRsZSkgeworCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlzc3VlIHRhcmdldCByZXNldDogIgorCQkgICAgImhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGRldmljZV9oYW5kbGUpKTsKKwkJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKwkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGRldmljZV9oYW5kbGUsIDAsCisJCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQsIDAsIDEwKTsKKwkJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCQltdXRleF91bmxvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaXNzdWUgdGFyZ2V0IHJlc2V0ICIKKwkJICAgICJkb25lOiBoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBkZXZpY2VfaGFuZGxlKSk7CisJfQorCisJLyogU0FTX0lPX1VOSVRfQ05UUiAtIHNlbmQgUkVNT1ZFX0RFVklDRSAqLworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2FzX2lvdW5pdDogaGFuZGxlIgorCSAgICAiKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CisJbXBpX3JlcXVlc3QuT3BlcmF0aW9uID0gTVBJMl9TQVNfT1BfUkVNT1ZFX0RFVklDRTsKKwltcGlfcmVxdWVzdC5EZXZIYW5kbGUgPSBoYW5kbGU7CisJbXBpX3JlcXVlc3QuVkZfSUQgPSAwOworCWlmICgobXB0MnNhc19iYXNlX3Nhc19pb3VuaXRfY29udHJvbChpb2MsICZtcGlfcmVwbHksCisJICAgICZtcGlfcmVxdWVzdCkpICE9IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJfQorCisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzYXNfaW91bml0OiBpb2Nfc3RhdHVzIgorCSAgICAiKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwgaW9jLT5uYW1lLAorCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSwKKwkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LklPQ0xvZ0luZm8pKSk7CisKKyBvdXQ6CisJbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcywKKwkgICAgc2FzX2RldmljZS0+cGFyZW50X2hhbmRsZSk7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVtb3ZpbmcgaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyIgorCSAgICAiKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgc2FzX2RldmljZS0+aGFuZGxlLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyk7CisJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CisKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBleGl0OiBoYW5kbGUiCisJICAgICIoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgaGFuZGxlKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnRfZGVidWcgLSBkZWJ1ZyBmb3IgdG9wb2xvZ3kgZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50X2RlYnVnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCit7CisJaW50IGk7CisJdTE2IGhhbmRsZTsKKwl1MTYgcmVhc29uX2NvZGU7CisJdTggcGh5X251bWJlcjsKKwljaGFyICpzdGF0dXNfc3RyID0gTlVMTDsKKwljaGFyIGxpbmtfcmF0ZVsyNV07CisKKwlzd2l0Y2ggKGV2ZW50X2RhdGEtPkV4cFN0YXR1cykgeworCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19BRERFRDoKKwkJc3RhdHVzX3N0ciA9ICJhZGQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9UX1JFU1BPTkRJTkc6CisJCXN0YXR1c19zdHIgPSAicmVtb3ZlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX1JFU1BPTkRJTkc6CisJCXN0YXR1c19zdHIgPSAgInJlc3BvbmRpbmciOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfREVMQVlfTk9UX1JFU1BPTkRJTkc6CisJCXN0YXR1c19zdHIgPSAicmVtb3ZlIGRlbGF5IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzX3N0ciA9ICJ1bmtub3duIHN0YXR1cyI7CisJCWJyZWFrOworCX0KKwlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInNhcyB0b3BvbG9neSBjaGFuZ2U6ICglcylcbiIsCisJICAgIGlvYy0+bmFtZSwgc3RhdHVzX3N0cik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0aGFuZGxlKDB4JTA0eCksIGVuY2xvc3VyZV9oYW5kbGUoMHglMDR4KSAiCisJICAgICJzdGFydF9waHkoJTAyZCksIGNvdW50KCVkKVxuIiwKKwkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RXhwYW5kZXJEZXZIYW5kbGUpLAorCSAgICBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5FbmNsb3N1cmVIYW5kbGUpLAorCSAgICBldmVudF9kYXRhLT5TdGFydFBoeU51bSwgZXZlbnRfZGF0YS0+TnVtRW50cmllcyk7CisJZm9yIChpID0gMDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgeworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOworCQlpZiAoIWhhbmRsZSkKKwkJCWNvbnRpbnVlOworCQlwaHlfbnVtYmVyID0gZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0gKyBpOworCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOworCQlzd2l0Y2ggKHJlYXNvbl9jb2RlKSB7CisJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX0FEREVEOgorCQkJc25wcmludGYobGlua19yYXRlLCAyNSwgIjogYWRkLCBsaW5rKDB4JTAyeCkiLAorCQkJICAgIChldmVudF9kYXRhLT5QSFlbaV0uTGlua1JhdGUgPj4gNCkpOworCQkJc3RhdHVzX3N0ciA9IGxpbmtfcmF0ZTsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19OT1RfUkVTUE9ORElORzoKKwkJCXN0YXR1c19zdHIgPSAiOiByZW1vdmUiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19ERUxBWV9OT1RfUkVTUE9ORElORzoKKwkJCXN0YXR1c19zdHIgPSAiOiByZW1vdmVfZGVsYXkiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19QSFlfQ0hBTkdFRDoKKwkJCXNucHJpbnRmKGxpbmtfcmF0ZSwgMjUsICI6IGxpbmsoMHglMDJ4KSIsCisJCQkgICAgKGV2ZW50X2RhdGEtPlBIWVtpXS5MaW5rUmF0ZSA+PiA0KSk7CisJCQlzdGF0dXNfc3RyID0gbGlua19yYXRlOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19OT19DSEFOR0U6CisJCQlzdGF0dXNfc3RyID0gIjogcmVzcG9uZGluZyI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0YXR1c19zdHIgPSAiOiB1bmtub3duIjsKKwkJCWJyZWFrOworCQl9CisJCXByaW50ayhLRVJOX0RFQlVHICJcdHBoeSglMDJkKSwgYXR0YWNoZWRfaGFuZGxlKDB4JTA0eCklc1xuIiwKKwkJICAgIHBoeV9udW1iZXIsIGhhbmRsZSwgc3RhdHVzX3N0cik7CisJfQorfQorI2VuZGlmCisKKy8qKgorICogX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgdG9wb2xvZ3kgY2hhbmdlcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBmd19ldmVudDoKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKKyAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQoreworCWludCBpOworCXUxNiBwYXJlbnRfaGFuZGxlLCBoYW5kbGU7CisJdTE2IHJlYXNvbl9jb2RlOworCXU4IHBoeV9udW1iZXI7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggbGlua19yYXRlXzsKKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQorCQlfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworI2VuZGlmCisKKwlpZiAoIWlvYy0+c2FzX2hiYS5udW1fcGh5cykKKwkJX3Njc2loX3Nhc19ob3N0X2FkZChpb2MpOworCWVsc2UKKwkJX3Njc2loX3Nhc19ob3N0X3JlZnJlc2goaW9jLCAwKTsKKworCWlmIChmd19ldmVudC0+aWdub3JlKSB7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImlnbm9yaW5nIGV4cGFuZGVyICIKKwkJICAgICJldmVudFxuIiwgaW9jLT5uYW1lKSk7CisJCXJldHVybjsKKwl9CisKKwlwYXJlbnRfaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RXhwYW5kZXJEZXZIYW5kbGUpOworCisJLyogaGFuZGxlIGV4cGFuZGVyIGFkZCAqLworCWlmIChldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19BRERFRCkKKwkJaWYgKF9zY3NpaF9leHBhbmRlcl9hZGQoaW9jLCBwYXJlbnRfaGFuZGxlKSAhPSAwKQorCQkJcmV0dXJuOworCisJLyogaGFuZGxlIHNpYmxpbmdzIGV2ZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBldmVudF9kYXRhLT5OdW1FbnRyaWVzOyBpKyspIHsKKwkJaWYgKGZ3X2V2ZW50LT5pZ25vcmUpIHsKKwkJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImlnbm9yaW5nICIKKwkJCSAgICAiZXhwYW5kZXIgZXZlbnRcbiIsIGlvYy0+bmFtZSkpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKKwkJCWNvbnRpbnVlOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOworCQlpZiAoIWhhbmRsZSkKKwkJCWNvbnRpbnVlOworCQlwaHlfbnVtYmVyID0gZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0gKyBpOworCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOworCQlsaW5rX3JhdGVfID0gZXZlbnRfZGF0YS0+UEhZW2ldLkxpbmtSYXRlID4+IDQ7CisJCXN3aXRjaCAocmVhc29uX2NvZGUpIHsKKwkJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEOgorCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19BRERFRDoKKwkJCWlmICghcGFyZW50X2hhbmRsZSkgeworCQkJCWlmIChwaHlfbnVtYmVyIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzKQorCQkJCQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAorCQkJCQkgICBpb2MtPnNhc19oYmEucGh5W3BoeV9udW1iZXJdLmhhbmRsZSwKKwkJCQkJICAgaGFuZGxlLCBwaHlfbnVtYmVyLCBsaW5rX3JhdGVfKTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCQkJCXNhc19leHBhbmRlciA9CisJCQkJICAgIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoaW9jLAorCQkJCQlwYXJlbnRfaGFuZGxlKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssCisJCQkJICAgIGZsYWdzKTsKKwkJCQlpZiAoc2FzX2V4cGFuZGVyKSB7CisJCQkJCWlmIChwaHlfbnVtYmVyIDwgc2FzX2V4cGFuZGVyLT5udW1fcGh5cykKKwkJCQkJCV9zY3NpaF9saW5rX2NoYW5nZShpb2MsCisJCQkJCQkgICBzYXNfZXhwYW5kZXItPgorCQkJCQkJICAgcGh5W3BoeV9udW1iZXJdLmhhbmRsZSwKKwkJCQkJCSAgIGhhbmRsZSwgcGh5X251bWJlciwKKwkJCQkJCSAgIGxpbmtfcmF0ZV8pOworCQkJCX0KKwkJCX0KKwkJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEKSB7CisJCQkJaWYgKGxpbmtfcmF0ZV8gPj0gTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzUpCisJCQkJCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgaGFuZGxlKTsKKwkJCX0KKwkJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfQURERUQpIHsKKwkJCQlpZiAobGlua19yYXRlXyA8IE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KQorCQkJCQlicmVhazsKKwkJCQlfc2NzaWhfYWRkX2RldmljZShpb2MsIGhhbmRsZSwgcGh5X251bWJlciwgMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfTk9UX1JFU1BPTkRJTkc6CisJCQlfc2NzaWhfcmVtb3ZlX2RldmljZShpb2MsIGhhbmRsZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGhhbmRsZSBleHBhbmRlciByZW1vdmFsICovCisJaWYgKGV2ZW50X2RhdGEtPkV4cFN0YXR1cyA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PVF9SRVNQT05ESU5HKQorCQlfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKGlvYywgcGFyZW50X2hhbmRsZSk7CisKK30KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworLyoqCisgKiBfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnIC0gZGVidWcgZm9yIGRldmljZSBldmVudAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdCAqZXZlbnRfZGF0YSkKK3sKKwljaGFyICpyZWFzb25fc3RyID0gTlVMTDsKKworCXN3aXRjaCAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSkgeworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQToKKwkJcmVhc29uX3N0ciA9ICJzbWFydCBkYXRhIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19VTlNVUFBPUlRFRDoKKwkJcmVhc29uX3N0ciA9ICJ1bnN1cHBvcnRlZCBkZXZpY2UgZGlzY292ZXJlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUOgorCQlyZWFzb25fc3RyID0gImludGVybmFsIGRldmljZSByZXNldCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVEFTS19BQk9SVF9JTlRFUk5BTDoKKwkJcmVhc29uX3N0ciA9ICJpbnRlcm5hbCB0YXNrIGFib3J0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BQk9SVF9UQVNLX1NFVF9JTlRFUk5BTDoKKwkJcmVhc29uX3N0ciA9ICJpbnRlcm5hbCB0YXNrIGFib3J0IHNldCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ0xFQVJfVEFTS19TRVRfSU5URVJOQUw6CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgY2xlYXIgdGFzayBzZXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1FVRVJZX1RBU0tfSU5URVJOQUw6CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgcXVlcnkgdGFzayI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkU6CisJCXJlYXNvbl9zdHIgPSAic2F0YSBpbml0IGZhaWx1cmUiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9JTlRFUk5BTF9ERVZfUkVTRVQ6CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgZGV2aWNlIHJlc2V0IGNvbXBsZXRlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfVEFTS19BQk9SVF9JTlRFUk5BTDoKKwkJcmVhc29uX3N0ciA9ICJpbnRlcm5hbCB0YXNrIGFib3J0IGNvbXBsZXRlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BU1lOQ19OT1RJRklDQVRJT046CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgYXN5bmMgbm90aWZpY2F0aW9uIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVhc29uX3N0ciA9ICJ1bmtub3duIHJlYXNvbiI7CisJCWJyZWFrOworCX0KKwlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRldmljZSBzdGF0dXMgY2hhbmdlOiAoJXMpXG4iCisJICAgICJcdGhhbmRsZSgweCUwNHgpLCBzYXMgYWRkcmVzcygweCUwMTZsbHgpIiwgaW9jLT5uYW1lLAorCSAgICByZWFzb25fc3RyLCBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5EZXZIYW5kbGUpLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGV2ZW50X2RhdGEtPlNBU0FkZHJlc3MpKTsKKwlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSA9PSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBKQorCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiwgQVNDKDB4JXgpLCBBU0NRKDB4JXgpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBldmVudF9kYXRhLT5BU0MsIGV2ZW50X2RhdGEtPkFTQ1EpOworCXByaW50ayhLRVJOX0lORk8gIlxuIik7Cit9CisjZW5kaWYKKworLyoqCisgKiBfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGRldmljZSBzdGF0dXMgY2hhbmdlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDoKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICAgTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhKQoreworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQorCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworLyoqCisgKiBfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1ZyAtIGRlYnVnIGZvciBlbmNsb3N1cmUgZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhU2FzRW5jbERldlN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhKQoreworCWNoYXIgKnJlYXNvbl9zdHIgPSBOVUxMOworCisJc3dpdGNoIChldmVudF9kYXRhLT5SZWFzb25Db2RlKSB7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX1JDX0FEREVEOgorCQlyZWFzb25fc3RyID0gImVuY2xvc3VyZSBhZGQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0VOQ0xfUkNfTk9UX1JFU1BPTkRJTkc6CisJCXJlYXNvbl9zdHIgPSAiZW5jbG9zdXJlIHJlbW92ZSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlYXNvbl9zdHIgPSAidW5rbm93biByZWFzb24iOworCQlicmVhazsKKwl9CisKKwlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImVuY2xvc3VyZSBzdGF0dXMgY2hhbmdlOiAoJXMpXG4iCisJICAgICJcdGhhbmRsZSgweCUwNHgpLCBlbmNsb3N1cmUgbG9naWNhbCBpZCgweCUwMTZsbHgpIgorCSAgICAiIG51bWJlciBzbG90cyglZClcbiIsIGlvYy0+bmFtZSwgcmVhc29uX3N0ciwKKwkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RW5jbG9zdXJlSGFuZGxlKSwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShldmVudF9kYXRhLT5FbmNsb3N1cmVMb2dpY2FsSUQpLAorCSAgICBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5TdGFydFNsb3QpKTsKK30KKyNlbmRpZgorCisvKioKKyAqIF9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGVuY2xvc3VyZSBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOgorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1OCBWRl9JRCwgTXBpMkV2ZW50RGF0YVNhc0VuY2xEZXZTdGF0dXNDaGFuZ2VfdCAqZXZlbnRfZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwkJX3Njc2loX3Nhc19lbmNsb3N1cmVfZGV2X3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGV2ZW50X2RhdGEpOworI2VuZGlmCit9CisKKy8qKgorICogX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50IC0gaGFuZGxlIGJyb2FkY2FzdCBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgIE1waTJFdmVudERhdGFTYXNCcm9hZGNhc3RQcmltaXRpdmVfdCAqZXZlbnRfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXUxNiBzbWlkLCBoYW5kbGU7CisJdTMyIGx1bjsKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXUzMiB0ZXJtaW5hdGlvbl9jb3VudDsKKwl1MzIgcXVlcnlfY291bnQ7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseTsKKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKKwkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAorCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKKworCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwltdXRleF9sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKKwlxdWVyeV9jb3VudCA9IDA7CisJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OworCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5yZXF1ZXN0X2RlcHRoOyBzbWlkKyspIHsKKwkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKKwkJaWYgKCFzY21kKQorCQkJY29udGludWU7CisJCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpCisJCQljb250aW51ZTsKKwkJIC8qIHNraXAgaGlkZGVuIHJhaWQgY29tcG9uZW50cyAqLworCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmZsYWdzICYKKwkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpCisJCQljb250aW51ZTsKKwkJIC8qIHNraXAgdm9sdW1lcyAqLworCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmZsYWdzICYKKwkJICAgIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FKQorCQkJY29udGludWU7CisKKwkJaGFuZGxlID0gc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZTsKKwkJbHVuID0gc2FzX2RldmljZV9wcml2X2RhdGEtPmx1bjsKKwkJcXVlcnlfY291bnQrKzsKKworCQltcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCBsdW4sCisJCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RVUVSWV9UQVNLLCBzbWlkLCAzMCk7CisJCXRlcm1pbmF0aW9uX2NvdW50ICs9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCk7CisKKwkJaWYgKChtcGlfcmVwbHktPklPQ1N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSAmJgorCQkgICAgKG1waV9yZXBseS0+UmVzcG9uc2VDb2RlID09CisJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX1NVQ0NFRURFRCB8fAorCQkgICAgIG1waV9yZXBseS0+UmVzcG9uc2VDb2RlID09CisJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKQorCQkJY29udGludWU7CisKKwkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgbHVuLAorCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJSVF9UQVNLX1NFVCwgc21pZCwgMzApOworCQl0ZXJtaW5hdGlvbl9jb3VudCArPSBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpOworCX0KKwlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOworCW11dGV4X3VubG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKworCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCSAgICAiJXMgLSBleGl0LCBxdWVyeV9jb3VudCA9ICVkIHRlcm1pbmF0aW9uX2NvdW50ID0gJWRcbiIsCisJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHF1ZXJ5X2NvdW50LCB0ZXJtaW5hdGlvbl9jb3VudCkpOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50IC0gaGFuZGxlIGRpc2NvdmVyeSBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICAgTXBpMkV2ZW50RGF0YVNhc0Rpc2NvdmVyeV90ICpldmVudF9kYXRhKQoreworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKSB7CisJCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiZGlzY292ZXJ5IGV2ZW50OiAoJXMpIiwgaW9jLT5uYW1lLAorCQkgICAgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgPT0gTVBJMl9FVkVOVF9TQVNfRElTQ19SQ19TVEFSVEVEKSA/CisJCSAgICAic3RhcnQiIDogInN0b3AiKTsKKwlpZiAoZXZlbnRfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKQorCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiwgZGlzY292ZXJ5X3N0YXR1cygweCUwOHgpIiwKKwkJICAgIGlvYy0+bmFtZSwgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKSk7CisJcHJpbnRrKCJcbiIpOworCX0KKyNlbmRpZgorCisJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgPT0gTVBJMl9FVkVOVF9TQVNfRElTQ19SQ19TVEFSVEVEICYmCisJICAgICFpb2MtPnNhc19oYmEubnVtX3BoeXMpCisJCV9zY3NpaF9zYXNfaG9zdF9hZGQoaW9jKTsKK30KKworLyoqCisgKiBfc2NzaWhfcmVwcm9iZV9sdW4gLSByZXByb2JpbmcgbHVuCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKiBAbm9fdWxkX2F0dGFjaDogc2Rldi0+bm9fdWxkX2F0dGFjaCBmbGFnIHNldHRpbmcKKyAqCisgKiovCitzdGF0aWMgdm9pZAorX3Njc2loX3JlcHJvYmVfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqbm9fdWxkX2F0dGFjaCkKK3sKKwlpbnQgcmM7CisKKwlzZGV2LT5ub191bGRfYXR0YWNoID0gbm9fdWxkX2F0dGFjaCA/IDEgOiAwOworCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIiVzIHJhaWQgY29tcG9uZW50XG4iLAorCSAgICBzZGV2LT5ub191bGRfYXR0YWNoID8gImhpZGRpbmciIDogImV4cG9zaW5nIik7CisJcmMgPSBzY3NpX2RldmljZV9yZXByb2JlKHNkZXYpOworfQorCisvKioKKyAqIF9zY3NpaF9yZXByb2JlX3RhcmdldCAtIHJlcHJvYmluZyB0YXJnZXQKKyAqIEBzdGFyZ2V0OiBzY3NpIHRhcmdldCBzdHJ1Y3QKKyAqIEBub191bGRfYXR0YWNoOiBzZGV2LT5ub191bGRfYXR0YWNoIGZsYWcgc2V0dGluZworICoKKyAqIE5vdGU6IG5vX3VsZF9hdHRhY2ggZmxhZyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRpc2sgZGV2aWNlIGlzIGF0dGFjaGVkCisgKiB0byBibG9jayBsYXllci4gQSB2YWx1ZSBvZiBgMWAgbWVhbnMgdG8gbm90IGF0dGFjaC4KKyAqKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcmVwcm9iZV90YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCBpbnQgbm9fdWxkX2F0dGFjaCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CisKKwlpZiAobm9fdWxkX2F0dGFjaCkKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisJZWxzZQorCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgJj0gfk1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisKKwlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzdGFyZ2V0LCBub191bGRfYXR0YWNoID8gKHZvaWQgKikxIDogTlVMTCwKKwkgICAgX3Njc2loX3JlcHJvYmVfbHVuKTsKK30KKy8qKgorICogX3Njc2loX3Nhc192b2x1bWVfYWRkIC0gYWRkIG5ldyB2b2x1bWUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGVsZW1lbnQ6IElSIGNvbmZpZyBlbGVtZW50IGRhdGEKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX3ZvbHVtZV9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50KQoreworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IHd3aWQ7CisJdTE2IGhhbmRsZSA9IGxlMTZfdG9fY3B1KGVsZW1lbnQtPlZvbERldkhhbmRsZSk7CisJaW50IHJjOworCisjaWYgMCAvKiBSQUlEX0hBQ0tTICovCisJaWYgKGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkZsYWdzKSAmCisJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0ZMQUdTX0ZPUkVJR05fQ09ORklHKQorCQlyZXR1cm47CisjZW5kaWYKKworCW1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfd3dpZChpb2MsIGhhbmRsZSwgJnd3aWQpOworCWlmICghd3dpZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCSAgICAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV93d2lkKGlvYywgd3dpZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAocmFpZF9kZXZpY2UpCisJCXJldHVybjsKKworCXJhaWRfZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IF9yYWlkX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghcmFpZF9kZXZpY2UpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkgICAgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcmFpZF9kZXZpY2UtPmlkID0gaW9jLT5zYXNfaWQrKzsKKwlyYWlkX2RldmljZS0+Y2hhbm5lbCA9IFJBSURfQ0hBTk5FTDsKKwlyYWlkX2RldmljZS0+aGFuZGxlID0gaGFuZGxlOworCXJhaWRfZGV2aWNlLT53d2lkID0gd3dpZDsKKwlfc2NzaWhfcmFpZF9kZXZpY2VfYWRkKGlvYywgcmFpZF9kZXZpY2UpOworCWlmICghaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSkgeworCQlyYyA9IHNjc2lfYWRkX2RldmljZShpb2MtPnNob3N0LCBSQUlEX0NIQU5ORUwsCisJCSAgICByYWlkX2RldmljZS0+aWQsIDApOworCQlpZiAocmMpCisJCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOworCX0gZWxzZQorCQlfc2NzaWhfZGV0ZXJtaW5lX2Jvb3RfZGV2aWNlKGlvYywgcmFpZF9kZXZpY2UsIDEpOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfdm9sdW1lX2RlbGV0ZSAtIGRlbGV0ZSB2b2x1bWUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGVsZW1lbnQ6IElSIGNvbmZpZyBlbGVtZW50IGRhdGEKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX3ZvbHVtZV9kZWxldGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50KQoreworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXUxNiBoYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKworI2lmIDAgLyogUkFJRF9IQUNLUyAqLworCWlmIChsZTMyX3RvX2NwdShldmVudF9kYXRhLT5GbGFncykgJgorCSAgICBNUEkyX0VWRU5UX0lSX0NIQU5HRV9GTEFHU19GT1JFSUdOX0NPTkZJRykKKwkJcmV0dXJuOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCWlmICghcmFpZF9kZXZpY2UpCisJCXJldHVybjsKKwlpZiAocmFpZF9kZXZpY2UtPnN0YXJnZXQpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSByYWlkX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMTsKKwkJc2NzaV9yZW1vdmVfdGFyZ2V0KCZyYWlkX2RldmljZS0+c3RhcmdldC0+ZGV2KTsKKwl9CisJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX3BkX2V4cG9zZSAtIGV4cG9zZSBwZCBjb21wb25lbnQgdG8gL2Rldi9zZFgKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGVsZW1lbnQ6IElSIGNvbmZpZyBlbGVtZW50IGRhdGEKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX3BkX2V4cG9zZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKmVsZW1lbnQpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZSA9IGxlMTZfdG9fY3B1KGVsZW1lbnQtPlBoeXNEaXNrRGV2SGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXNhc19kZXZpY2UpCisJCXJldHVybjsKKworCS8qIGV4cG9zaW5nIHJhaWQgY29tcG9uZW50ICovCisJc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSA9IDA7CisJc2FzX2RldmljZS0+dm9sdW1lX3d3aWQgPSAwOworCXNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCA9IDA7CisJX3Njc2loX3JlcHJvYmVfdGFyZ2V0KHNhc19kZXZpY2UtPnN0YXJnZXQsIDApOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfcGRfaGlkZSAtIGhpZGUgcGQgY29tcG9uZW50IGZyb20gL2Rldi9zZFgKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGVsZW1lbnQ6IElSIGNvbmZpZyBlbGVtZW50IGRhdGEKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX3BkX2hpZGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50KQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5QaHlzRGlza0RldkhhbmRsZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJaWYgKCFzYXNfZGV2aWNlKQorCQlyZXR1cm47CisKKwkvKiBoaWRpbmcgcmFpZCBjb21wb25lbnQgKi8KKwltcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZShpb2MsIGhhbmRsZSwKKwkgICAgJnNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUpOworCW1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfd3dpZChpb2MsIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUsCisJICAgICZzYXNfZGV2aWNlLT52b2x1bWVfd3dpZCk7CisJc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50ID0gMTsKKwlfc2NzaWhfcmVwcm9iZV90YXJnZXQoc2FzX2RldmljZS0+c3RhcmdldCwgMSk7Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19wZF9kZWxldGUgLSBkZWxldGUgcGQgY29tcG9uZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBlbGVtZW50OiBJUiBjb25maWcgZWxlbWVudCBkYXRhCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19wZF9kZWxldGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50KQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5QaHlzRGlza0RldkhhbmRsZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJaWYgKCFzYXNfZGV2aWNlKQorCQlyZXR1cm47CisJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBoYW5kbGUpOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfcGRfYWRkIC0gcmVtb3ZlIHBkIGNvbXBvbmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZWxlbWVudDogSVIgY29uZmlnIGVsZW1lbnQgZGF0YQorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfcGRfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlID0gbGUxNl90b19jcHUoZWxlbWVudC0+UGh5c0Rpc2tEZXZIYW5kbGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCWlmIChzYXNfZGV2aWNlKQorCQlzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgPSAxOworCWVsc2UKKwkJX3Njc2loX2FkZF9kZXZpY2UoaW9jLCBoYW5kbGUsIDAsIDEpOworfQorCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudF9kZWJ1ZyAtIGRlYnVnIGZvciBJUiBDb25maWcgQ2hhbmdlIGV2ZW50cworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50X2RlYnVnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCit7CisJTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKmVsZW1lbnQ7CisJdTggZWxlbWVudF90eXBlOworCWludCBpOworCWNoYXIgKnJlYXNvbl9zdHIgPSBOVUxMLCAqZWxlbWVudF9zdHIgPSBOVUxMOworCisJZWxlbWVudCA9IChNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqKSZldmVudF9kYXRhLT5Db25maWdFbGVtZW50WzBdOworCisJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJyYWlkIGNvbmZpZyBjaGFuZ2U6ICglcyksIGVsZW1lbnRzKCVkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAobGUzMl90b19jcHUoZXZlbnRfZGF0YS0+RmxhZ3MpICYKKwkgICAgTVBJMl9FVkVOVF9JUl9DSEFOR0VfRkxBR1NfRk9SRUlHTl9DT05GSUcpID8KKwkgICAgImZvcmVpZ24iIDogIm5hdGl2ZSIsIGV2ZW50X2RhdGEtPk51bUVsZW1lbnRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRWxlbWVudHM7IGkrKywgZWxlbWVudCsrKSB7CisJCXN3aXRjaCAoZWxlbWVudC0+UmVhc29uQ29kZSkgeworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX0FEREVEOgorCQkJcmVhc29uX3N0ciA9ICJhZGQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUkVNT1ZFRDoKKwkJCXJlYXNvbl9zdHIgPSAicmVtb3ZlIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX05PX0NIQU5HRToKKwkJCXJlYXNvbl9zdHIgPSAibm8gY2hhbmdlIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX0hJREU6CisJCQlyZWFzb25fc3RyID0gImhpZGUiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVU5ISURFOgorCQkJcmVhc29uX3N0ciA9ICJ1bmhpZGUiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVk9MVU1FX0NSRUFURUQ6CisJCQlyZWFzb25fc3RyID0gInZvbHVtZV9jcmVhdGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1ZPTFVNRV9ERUxFVEVEOgorCQkJcmVhc29uX3N0ciA9ICJ2b2x1bWVfZGVsZXRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19QRF9DUkVBVEVEOgorCQkJcmVhc29uX3N0ciA9ICJwZF9jcmVhdGVkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0RFTEVURUQ6CisJCQlyZWFzb25fc3RyID0gInBkX2RlbGV0ZWQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZWFzb25fc3RyID0gInVua25vd24gcmVhc29uIjsKKwkJCWJyZWFrOworCQl9CisJCWVsZW1lbnRfdHlwZSA9IGxlMTZfdG9fY3B1KGVsZW1lbnQtPkVsZW1lbnRGbGFncykgJgorCQkgICAgTVBJMl9FVkVOVF9JUl9DSEFOR0VfRUZMQUdTX0VMRU1FTlRfVFlQRV9NQVNLOworCQlzd2l0Y2ggKGVsZW1lbnRfdHlwZSkgeworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0VGTEFHU19WT0xVTUVfRUxFTUVOVDoKKwkJCWVsZW1lbnRfc3RyID0gInZvbHVtZSI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfVk9MUEhZU0RJU0tfRUxFTUVOVDoKKwkJCWVsZW1lbnRfc3RyID0gInBoeXMgZGlzayI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfSE9UU1BBUkVfRUxFTUVOVDoKKwkJCWVsZW1lbnRfc3RyID0gImhvdCBzcGFyZSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsZW1lbnRfc3RyID0gInVua25vd24gZWxlbWVudCI7CisJCQlicmVhazsKKwkJfQorCQlwcmludGsoS0VSTl9ERUJVRyAiXHQoJXM6JXMpLCB2b2wgaGFuZGxlKDB4JTA0eCksICIKKwkJICAgICJwZCBoYW5kbGUoMHglMDR4KSwgcGQgbnVtKDB4JTAyeClcbiIsIGVsZW1lbnRfc3RyLAorCQkgICAgcmVhc29uX3N0ciwgbGUxNl90b19jcHUoZWxlbWVudC0+Vm9sRGV2SGFuZGxlKSwKKwkJICAgIGxlMTZfdG9fY3B1KGVsZW1lbnQtPlBoeXNEaXNrRGV2SGFuZGxlKSwKKwkJICAgIGVsZW1lbnQtPlBoeXNEaXNrTnVtKTsKKwl9Cit9CisjZW5kaWYKKworLyoqCisgKiBfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgaXIgY29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDoKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKKyAgICBNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCit7CisJTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKmVsZW1lbnQ7CisJaW50IGk7CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisKKyNlbmRpZgorCisJZWxlbWVudCA9IChNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqKSZldmVudF9kYXRhLT5Db25maWdFbGVtZW50WzBdOworCWZvciAoaSA9IDA7IGkgPCBldmVudF9kYXRhLT5OdW1FbGVtZW50czsgaSsrLCBlbGVtZW50KyspIHsKKworCQlzd2l0Y2ggKGVsZW1lbnQtPlJlYXNvbkNvZGUpIHsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19WT0xVTUVfQ1JFQVRFRDoKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19BRERFRDoKKwkJCV9zY3NpaF9zYXNfdm9sdW1lX2FkZChpb2MsIGVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVk9MVU1FX0RFTEVURUQ6CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUkVNT1ZFRDoKKwkJCV9zY3NpaF9zYXNfdm9sdW1lX2RlbGV0ZShpb2MsIGVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUERfQ1JFQVRFRDoKKwkJCV9zY3NpaF9zYXNfcGRfaGlkZShpb2MsIGVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUERfREVMRVRFRDoKKwkJCV9zY3NpaF9zYXNfcGRfZXhwb3NlKGlvYywgZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19ISURFOgorCQkJX3Njc2loX3Nhc19wZF9hZGQoaW9jLCBlbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1VOSElERToKKwkJCV9zY3NpaF9zYXNfcGRfZGVsZXRlKGlvYywgZWxlbWVudCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiBfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudCAtIElSIHZvbHVtZSBldmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKKyAgICBNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCAqZXZlbnRfZGF0YSkKK3sKKwl1NjQgd3dpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXUxNiBoYW5kbGU7CisJdTMyIHN0YXRlOworCWludCByYzsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCisJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0gTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RBVEVfQ0hBTkdFRCkKKwkJcmV0dXJuOworCisJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Vm9sRGV2SGFuZGxlKTsKKwlzdGF0ZSA9IGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPk5ld1ZhbHVlKTsKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaGFuZGxlKDB4JTA0eCksICIKKwkgICAgIm9sZCgweCUwOHgpLCBuZXcoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgIGhhbmRsZSwKKwkgICAgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+UHJldmlvdXNWYWx1ZSksIHN0YXRlKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9NSVNTSU5HOgorCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9GQUlMRUQ6CisJCWlmICghcmFpZF9kZXZpY2UpCisJCQlicmVhazsKKwkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHJhaWRfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMTsKKwkJCXNjc2lfcmVtb3ZlX3RhcmdldCgmcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmRldik7CisJCX0KKwkJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfT05MSU5FOgorCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9ERUdSQURFRDoKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfT1BUSU1BTDoKKwkJaWYgKHJhaWRfZGV2aWNlKQorCQkJYnJlYWs7CisKKwkJbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkKGlvYywgaGFuZGxlLCAmd3dpZCk7CisJCWlmICghd3dpZCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlicmVhazsKKwkJfQorCisJCXJhaWRfZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IF9yYWlkX2RldmljZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXJhaWRfZGV2aWNlKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmFpZF9kZXZpY2UtPmlkID0gaW9jLT5zYXNfaWQrKzsKKwkJcmFpZF9kZXZpY2UtPmNoYW5uZWwgPSBSQUlEX0NIQU5ORUw7CisJCXJhaWRfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7CisJCXJhaWRfZGV2aWNlLT53d2lkID0gd3dpZDsKKwkJX3Njc2loX3JhaWRfZGV2aWNlX2FkZChpb2MsIHJhaWRfZGV2aWNlKTsKKwkJcmMgPSBzY3NpX2FkZF9kZXZpY2UoaW9jLT5zaG9zdCwgUkFJRF9DSEFOTkVMLAorCQkgICAgcmFpZF9kZXZpY2UtPmlkLCAwKTsKKwkJaWYgKHJjKQorCQkJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfSU5JVElBTElaSU5HOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQgLSBQRCBldmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICBNcGkyRXZlbnREYXRhSXJQaHlzaWNhbERpc2tfdCAqZXZlbnRfZGF0YSkKK3sKKwl1MTYgaGFuZGxlOworCXUzMiBzdGF0ZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJfUEhZU0RJU0tfUkNfU1RBVEVfQ0hBTkdFRCkKKwkJcmV0dXJuOworCisJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UGh5c0Rpc2tEZXZIYW5kbGUpOworCXN0YXRlID0gbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+TmV3VmFsdWUpOworCisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCisJICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCisJICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJc3dpdGNoIChzdGF0ZSkgeworI2lmIDAKKwljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9PRkZMSU5FOgorCQlpZiAoc2FzX2RldmljZSkKKwkJCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgaGFuZGxlKTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9PTkxJTkU6CisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfREVHUkFERUQ6CisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfUkVCVUlMRElORzoKKwljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9PUFRJTUFMOgorCQlpZiAoc2FzX2RldmljZSkKKwkJCXNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCA9IDE7CisJCWVsc2UKKwkJCV9zY3NpaF9hZGRfZGV2aWNlKGlvYywgaGFuZGxlLCAwLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09ORklHVVJFRDoKKwljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09NUEFUSUJMRToKKwljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9IT1RfU1BBUkU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1ZyAtIGRlYnVnIGZvciBJUiBvcCBldmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50X2RlYnVnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhSXJPcGVyYXRpb25TdGF0dXNfdCAqZXZlbnRfZGF0YSkKK3sKKwljaGFyICpyZWFzb25fc3RyID0gTlVMTDsKKworCXN3aXRjaCAoZXZlbnRfZGF0YS0+UkFJRE9wZXJhdGlvbikgeworCWNhc2UgTVBJMl9FVkVOVF9JUl9SQUlET1BfUkVTWU5DOgorCQlyZWFzb25fc3RyID0gInJlc3luYyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9JUl9SQUlET1BfT05MSU5FX0NBUF9FWFBBTlNJT046CisJCXJlYXNvbl9zdHIgPSAib25saW5lIGNhcGFjaXR5IGV4cGFuc2lvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9JUl9SQUlET1BfQ09OU0lTVEVOQ1lfQ0hFQ0s6CisJCXJlYXNvbl9zdHIgPSAiY29uc2lzdGVuY3kgY2hlY2siOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWFzb25fc3RyID0gInVua25vd24gcmVhc29uIjsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJhaWQgb3BlcmF0aW9uYWwgc3RhdHVzOiAoJXMpIgorCSAgICAiXHRoYW5kbGUoMHglMDR4KSwgcGVyY2VudCBjb21wbGV0ZSglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgcmVhc29uX3N0ciwKKwkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Vm9sRGV2SGFuZGxlKSwKKwkgICAgZXZlbnRfZGF0YS0+UGVyY2VudENvbXBsZXRlKTsKK30KKyNlbmRpZgorCisvKioKKyAqIF9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudCAtIGhhbmRsZSBSQUlEIG9wZXJhdGlvbiBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOgorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgIE1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190ICpldmVudF9kYXRhKQoreworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQorCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLCBldmVudF9kYXRhKTsKKyNlbmRpZgorfQorCisvKioKKyAqIF9zY3NpaF90YXNrX3NldF9mdWxsIC0gaGFuZGxlIHRhc2sgc2V0IGZ1bGwKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBUaHJvdHRsZSBiYWNrIHFkZXB0aC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF90YXNrX3NldF9mdWxsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICAgTXBpMkV2ZW50RGF0YVRhc2tTZXRGdWxsX3QgKmV2ZW50X2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlpbnQgZGVwdGg7CisJdTE2IGN1cnJlbnRfZGVwdGg7CisJdTE2IGhhbmRsZTsKKwlpbnQgaWQsIGNoYW5uZWw7CisJdTY0IHNhc19hZGRyZXNzOworCisJY3VycmVudF9kZXB0aCA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkN1cnJlbnREZXB0aCk7CisJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RGV2SGFuZGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJaWQgPSBzYXNfZGV2aWNlLT5pZDsKKwljaGFubmVsID0gc2FzX2RldmljZS0+Y2hhbm5lbDsKKwlzYXNfYWRkcmVzcyA9IHNhc19kZXZpY2UtPnNhc19hZGRyZXNzOworCisJLyogaWYgaGlkZGVuIHJhaWQgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0byB2b2x1bWUgY2hhcmFjdGVyaXN0aWNzICovCisJaWYgKHNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCAmJiBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoCisJCSAgICBpb2MsIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHJhaWRfZGV2aWNlKSB7CisJCQlpZCA9IHJhaWRfZGV2aWNlLT5pZDsKKwkJCWNoYW5uZWwgPSByYWlkX2RldmljZS0+Y2hhbm5lbDsKKwkJCWhhbmRsZSA9IHJhaWRfZGV2aWNlLT5oYW5kbGU7CisJCQlzYXNfYWRkcmVzcyA9IHJhaWRfZGV2aWNlLT53d2lkOworCQl9CisJfQorCisJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UQVNLX1NFVF9GVUxMKQorCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0RFQlVHLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LCAidGFzayBzZXQgIgorCQkgICAgImZ1bGw6IGhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLCBkZXB0aCglZClcbiIsCisJCSAgICBoYW5kbGUsICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MsIGN1cnJlbnRfZGVwdGgpOworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGlvYy0+c2hvc3QpIHsKKwkJaWYgKHNkZXYtPmlkID09IGlkICYmIHNkZXYtPmNoYW5uZWwgPT0gY2hhbm5lbCkgeworCQkJaWYgKGN1cnJlbnRfZGVwdGggPiBzZGV2LT5xdWV1ZV9kZXB0aCkgeworCQkJCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJgorCQkJCSAgICBNUFRfREVCVUdfVEFTS19TRVRfRlVMTCkKKwkJCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAic3RyYW5nZSAiCisJCQkJCSAgICAib2JzZXJ2YXRpb24sIHRoZSBxdWV1ZSBkZXB0aCBpcyIKKwkJCQkJICAgICIgKCVkKSBtZWFud2hpbGUgZncgcXVldWUgZGVwdGggIgorCQkJCQkgICAgImlzICglZClcbiIsIHNkZXYtPnF1ZXVlX2RlcHRoLAorCQkJCQkgICAgY3VycmVudF9kZXB0aCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkZXB0aCA9IHNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LAorCQkJICAgIGN1cnJlbnRfZGVwdGggLSAxKTsKKwkJCWlmIChkZXB0aCA+IDApCisJCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiUXVldWUgZGVwdGggIgorCQkJCSAgICAicmVkdWNlZCB0byAoJWQpXG4iLCBkZXB0aCk7CisJCQllbHNlIGlmIChkZXB0aCA8IDApCisJCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiVGFnZ2VkIENvbW1hbmQgIgorCQkJCSAgICAiUXVldWVpbmcgaXMgYmVpbmcgZGlzYWJsZWRcbiIpOworCQkJZWxzZSBpZiAoZGVwdGggPT0gMCkKKwkJCQlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYKKwkJCQkgICAgIE1QVF9ERUJVR19UQVNLX1NFVF9GVUxMKQorCQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCSAgICAgIlF1ZXVlIGRlcHRoIG5vdCBjaGFuZ2VkIHlldFxuIik7CisJCX0KKwl9Cit9CisKKy8qKgorICogX3Njc2loX21hcmtfcmVzcG9uZGluZ19zYXNfZGV2aWNlIC0gbWFyayBhIHNhc19kZXZpY2VzIGFzIHJlc3BvbmRpbmcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcworICogQHNsb3Q6IGVuY2xvc3VyZSBzbG90IGlkCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKgorICogQWZ0ZXIgaG9zdCByZXNldCwgZmluZCBvdXQgd2hldGhlciBkZXZpY2VzIGFyZSBzdGlsbCByZXNwb25kaW5nLgorICogVXNlZCBpbiBfc2NzaV9yZW1vdmVfdW5yZXNwb25zaXZlX3Nhc19kZXZpY2VzLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX21hcmtfcmVzcG9uZGluZ19zYXNfZGV2aWNlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzLAorICAgIHUxNiBzbG90LCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZGV2aWNlLCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNhc19kZXZpY2UtPnNhc19hZGRyZXNzID09IHNhc19hZGRyZXNzICYmCisJCSAgICBzYXNfZGV2aWNlLT5zbG90ID09IHNsb3QgJiYgc2FzX2RldmljZS0+c3RhcmdldCkgeworCQkJc2FzX2RldmljZS0+cmVzcG9uZGluZyA9IDE7CisJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNhc19kZXZpY2UtPnN0YXJnZXQsCisJCQkgICAgImhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLCBlbmNsb3N1cmUgIgorCQkJICAgICJsb2dpY2FsIGlkKDB4JTAxNmxseCksIHNsb3QoJWQpXG4iLCBoYW5kbGUsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgIHNhc19kZXZpY2UtPmVuY2xvc3VyZV9sb2dpY2FsX2lkLAorCQkJICAgIHNhc19kZXZpY2UtPnNsb3QpOworCQkJaWYgKHNhc19kZXZpY2UtPmhhbmRsZSA9PSBoYW5kbGUpCisJCQkJZ290byBvdXQ7CisJCQlwcmludGsoS0VSTl9JTkZPICJcdGhhbmRsZSBjaGFuZ2VkIGZyb20oMHglMDR4KSEhIVxuIiwKKwkJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUpOworCQkJc2FzX2RldmljZS0+aGFuZGxlID0gaGFuZGxlOworCQkJc3RhcmdldCA9IHNhc19kZXZpY2UtPnN0YXJnZXQ7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IGhhbmRsZTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19zYXNfZGV2aWNlcyAtCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBBZnRlciBob3N0IHJlc2V0LCBmaW5kIG91dCB3aGV0aGVyIGRldmljZXMgYXJlIHN0aWxsIHJlc3BvbmRpbmcuCisgKiBJZiBub3QgcmVtb3ZlLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3Nhc19kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGlvY19zdGF0dXM7CisJX19sZTY0IHNhc19hZGRyZXNzOworCXUxNiBoYW5kbGU7CisJdTMyIGRldmljZV9pbmZvOworCXUxNiBzbG90OworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKworCWlmIChsaXN0X2VtcHR5KCZpb2MtPnNhc19kZXZpY2VfbGlzdCkpCisJCXJldHVybjsKKworCWhhbmRsZSA9IDB4RkZGRjsKKwl3aGlsZSAoIShtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmc2FzX2RldmljZV9wZzAsIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFLAorCSAgICBoYW5kbGUpKSkgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKKwkJCWJyZWFrOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5EZXZIYW5kbGUpOworCQlkZXZpY2VfaW5mbyA9IGxlMzJfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldmljZUluZm8pOworCQlpZiAoIShfc2NzaWhfaXNfZW5kX2RldmljZShkZXZpY2VfaW5mbykpKQorCQkJY29udGludWU7CisJCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2RldmljZV9wZzAuU0FTQWRkcmVzcyk7CisJCXNsb3QgPSBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5TbG90KTsKKwkJX3Njc2loX21hcmtfcmVzcG9uZGluZ19zYXNfZGV2aWNlKGlvYywgc2FzX2FkZHJlc3MsIHNsb3QsCisJCSAgICBoYW5kbGUpOworCX0KK30KKworLyoqCisgKiBfc2NzaWhfbWFya19yZXNwb25kaW5nX3JhaWRfZGV2aWNlIC0gbWFyayBhIHJhaWRfZGV2aWNlIGFzIHJlc3BvbmRpbmcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHd3aWQ6IHdvcmxkIHdpZGUgaWRlbnRpZmllciBmb3IgcmFpZCB2b2x1bWUKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqCisgKiBBZnRlciBob3N0IHJlc2V0LCBmaW5kIG91dCB3aGV0aGVyIGRldmljZXMgYXJlIHN0aWxsIHJlc3BvbmRpbmcuCisgKiBVc2VkIGluIF9zY3NpX3JlbW92ZV91bnJlc3BvbnNpdmVfcmFpZF9kZXZpY2VzLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX21hcmtfcmVzcG9uZGluZ19yYWlkX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCB3d2lkLAorICAgIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhaWRfZGV2aWNlLCAmaW9jLT5yYWlkX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChyYWlkX2RldmljZS0+d3dpZCA9PSB3d2lkICYmIHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCQlyYWlkX2RldmljZS0+cmVzcG9uZGluZyA9IDE7CisJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHJhaWRfZGV2aWNlLT5zdGFyZ2V0LAorCQkJICAgICJoYW5kbGUoMHglMDR4KSwgd3dpZCgweCUwMTZsbHgpXG4iLCBoYW5kbGUsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCk7CisJCQlpZiAocmFpZF9kZXZpY2UtPmhhbmRsZSA9PSBoYW5kbGUpCisJCQkJZ290byBvdXQ7CisJCQlwcmludGsoS0VSTl9JTkZPICJcdGhhbmRsZSBjaGFuZ2VkIGZyb20oMHglMDR4KSEhIVxuIiwKKwkJCSAgICByYWlkX2RldmljZS0+aGFuZGxlKTsKKwkJCXJhaWRfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7CisJCQlzdGFyZ2V0ID0gcmFpZF9kZXZpY2UtPnN0YXJnZXQ7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IGhhbmRsZTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2VzIC0KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIEFmdGVyIGhvc3QgcmVzZXQsIGZpbmQgb3V0IHdoZXRoZXIgZGV2aWNlcyBhcmUgc3RpbGwgcmVzcG9uZGluZy4KKyAqIElmIG5vdCByZW1vdmUuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlNcGkyUmFpZFZvbFBhZ2UxX3Qgdm9sdW1lX3BnMTsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGlvY19zdGF0dXM7CisJdTE2IGhhbmRsZTsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5yYWlkX2RldmljZV9saXN0KSkKKwkJcmV0dXJuOworCisJaGFuZGxlID0gMHhGRkZGOworCXdoaWxlICghKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmdm9sdW1lX3BnMSwgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFLCBoYW5kbGUpKSkgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKKwkJCWJyZWFrOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdSh2b2x1bWVfcGcxLkRldkhhbmRsZSk7CisJCV9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2UoaW9jLAorCQkgICAgbGU2NF90b19jcHUodm9sdW1lX3BnMS5XV0lEKSwgaGFuZGxlKTsKKwl9Cit9CisKKy8qKgorICogX3Njc2loX21hcmtfcmVzcG9uZGluZ19leHBhbmRlciAtIG1hcmsgYSBleHBhbmRlciBhcyByZXNwb25kaW5nCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3MKKyAqIEBoYW5kbGU6CisgKgorICogQWZ0ZXIgaG9zdCByZXNldCwgZmluZCBvdXQgd2hldGhlciBkZXZpY2VzIGFyZSBzdGlsbCByZXNwb25kaW5nLgorICogVXNlZCBpbiBfc2NzaV9yZW1vdmVfdW5yZXNwb25zaXZlX2V4cGFuZGVycy4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfZXhwYW5kZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MsCisgICAgIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZXhwYW5kZXIsICZpb2MtPnNhc19leHBhbmRlcl9saXN0LCBsaXN0KSB7CisJCWlmIChzYXNfZXhwYW5kZXItPnNhc19hZGRyZXNzID09IHNhc19hZGRyZXNzKSB7CisJCQlzYXNfZXhwYW5kZXItPnJlc3BvbmRpbmcgPSAxOworCQkJaWYgKHNhc19leHBhbmRlci0+aGFuZGxlICE9IGhhbmRsZSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIm9sZCBoYW5kbGUoMHglMDR4KVxuIiwKKwkJCQkgICAgc2FzX2V4cGFuZGVyLT5oYW5kbGUpOworCQkJCXNhc19leHBhbmRlci0+aGFuZGxlID0gaGFuZGxlOworCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwl9Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19leHBhbmRlcnMgLQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogQWZ0ZXIgaG9zdCByZXNldCwgZmluZCBvdXQgd2hldGhlciBkZXZpY2VzIGFyZSBzdGlsbCByZXNwb25kaW5nLgorICogSWYgbm90IHJlbW92ZS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19leHBhbmRlcnMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCU1waTJFeHBhbmRlclBhZ2UwX3QgZXhwYW5kZXJfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MTYgaW9jX3N0YXR1czsKKwlfX2xlNjQgc2FzX2FkZHJlc3M7CisJdTE2IGhhbmRsZTsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCkpCisJCXJldHVybjsKKworCWhhbmRsZSA9IDB4RkZGRjsKKwl3aGlsZSAoIShtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwKGlvYywgJm1waV9yZXBseSwgJmV4cGFuZGVyX3BnMCwKKwkgICAgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9HRVRfTkVYVF9ITkRMLCBoYW5kbGUpKSkgeworCisJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQorCQkJYnJlYWs7CisKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXhwYW5kZXJfcGcwLkRldkhhbmRsZSk7CisJCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoZXhwYW5kZXJfcGcwLlNBU0FkZHJlc3MpOworCQlwcmludGsoS0VSTl9JTkZPICJcdGV4cGFuZGVyIHByZXNlbnQ6IGhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAic2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfYWRkcmVzcyk7CisJCV9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfZXhwYW5kZXIoaW9jLCBzYXNfYWRkcmVzcywgaGFuZGxlKTsKKwl9CisKK30KKworLyoqCisgKiBfc2NzaWhfcmVtb3ZlX3VucmVzcG9uZGluZ19kZXZpY2VzIC0gcmVtb3ZpbmcgdW5yZXNwb25kaW5nIGRldmljZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3JlbW92ZV91bnJlc3BvbmRpbmdfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqc2FzX2RldmljZV9uZXh0OworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlciwgKnNhc19leHBhbmRlcl9uZXh0OworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqcmFpZF9kZXZpY2VfbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3Nhc19kZXZpY2VzKGlvYyk7CisJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3JhaWRfZGV2aWNlcyhpb2MpOworCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19leHBhbmRlcnMoaW9jKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaW9jLT5zaG9zdF9yZWNvdmVyeSA9IDA7CisJaWYgKGlvYy0+c2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JFQ09WRVJZKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwdXR0aW5nIGNvbnRyb2xsZXIgaW50byAiCisJCSAgICAiU0hPU1RfUlVOTklOR1xuIiwgaW9jLT5uYW1lKTsKKwkJc2NzaV9ob3N0X3NldF9zdGF0ZShpb2MtPnNob3N0LCBTSE9TVF9SVU5OSU5HKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNhc19kZXZpY2UsIHNhc19kZXZpY2VfbmV4dCwKKwkgICAgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChzYXNfZGV2aWNlLT5yZXNwb25kaW5nKSB7CisJCQlzYXNfZGV2aWNlLT5yZXNwb25kaW5nID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0KQorCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkJICAgICJyZW1vdmluZzogaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseCksICIKKwkJCSAgICAiZW5jbG9zdXJlIGxvZ2ljYWwgaWQoMHglMDE2bGx4KSwgc2xvdCglZClcbiIsCisJCQkgICAgc2FzX2RldmljZS0+aGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJCSAgICBzYXNfZGV2aWNlLT5zbG90KTsKKwkJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyYWlkX2RldmljZSwgcmFpZF9kZXZpY2VfbmV4dCwKKwkgICAgJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAocmFpZF9kZXZpY2UtPnJlc3BvbmRpbmcpIHsKKwkJCXJhaWRfZGV2aWNlLT5yZXNwb25kaW5nID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgeworCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCByYWlkX2RldmljZS0+c3RhcmdldCwKKwkJCSAgICAicmVtb3Zpbmc6IGhhbmRsZSgweCUwNHgpLCB3d2lkKDB4JTAxNmxseClcbiIsCisJCQkgICAgICByYWlkX2RldmljZS0+aGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQpOworCQkJc2NzaV9yZW1vdmVfdGFyZ2V0KCZyYWlkX2RldmljZS0+c3RhcmdldC0+ZGV2KTsKKwkJfQorCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYXNfZXhwYW5kZXIsIHNhc19leHBhbmRlcl9uZXh0LAorCSAgICAmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoc2FzX2V4cGFuZGVyLT5yZXNwb25kaW5nKSB7CisJCQlzYXNfZXhwYW5kZXItPnJlc3BvbmRpbmcgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJcHJpbnRrKCJcdHJlbW92aW5nIGV4cGFuZGVyOiBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgIiBzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBzYXNfZXhwYW5kZXItPmhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyk7CisJCV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoaW9jLCBzYXNfZXhwYW5kZXItPmhhbmRsZSk7CisJfQorfQorCisvKioKKyAqIF9maXJtd2FyZV9ldmVudF93b3JrIC0gZGVsYXllZCB0YXNrIGZvciBwcm9jZXNzaW5nIGZpcm13YXJlIGV2ZW50cworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAd29yazogZXF1YWwgdG8gdGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Zpcm13YXJlX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCA9IGNvbnRhaW5lcl9vZih3b3JrLAorCSAgICBzdHJ1Y3QgZndfZXZlbnRfd29yaywgd29yay53b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IGZ3X2V2ZW50LT5pb2M7CisKKwkvKiBUaGlzIGlzIGludm9rZWQgYnkgY2FsbGluZyBfc2NzaWhfcXVldWVfcmVzY2FuKCkuICovCisJaWYgKGZ3X2V2ZW50LT5ldmVudCA9PSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NUX1JFU0VUKSB7CisJCV9zY3NpaF9md19ldmVudF9mcmVlKGlvYywgZndfZXZlbnQpOworCQlfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaChpb2MsIDEpOworCQlfc2NzaWhfcmVtb3ZlX3VucmVzcG9uZGluZ19kZXZpY2VzKGlvYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZCBzbyBpZ25vcmUgdGhpcyBldmVudCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5md19ldmVudHNfb2ZmIHx8IGlvYy0+cmVtb3ZlX2hvc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisJCV9zY3NpaF9md19ldmVudF9mcmVlKGlvYywgZndfZXZlbnQpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJCV9zY3NpaF9md19ldmVudF9yZXF1ZXVlKGlvYywgZndfZXZlbnQsIDEwMDApOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAoZndfZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVDoKKwkJX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCisJCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSwgZndfZXZlbnQpOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAorCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RJU0NPVkVSWToKKwkJX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCisJCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfQlJPQURDQVNUX1BSSU1JVElWRToKKwkJX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAorCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0VOQ0xfREVWSUNFX1NUQVRVU19DSEFOR0U6CisJCV9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50KGlvYywKKwkJICAgIGZ3X2V2ZW50LT5WRl9JRCwgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVDoKKwkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAorCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfVk9MVU1FOgorCQlfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX1BIWVNJQ0FMX0RJU0s6CisJCV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6CisJCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEw6CisJCV9zY3NpaF90YXNrX3NldF9mdWxsKGlvYywgZndfZXZlbnQtPlZGX0lELAorCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlicmVhazsKKwl9CisJX3Njc2loX2Z3X2V2ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7Cit9CisKKy8qKgorICogbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayAtIGZpcm13YXJlIGV2ZW50IGhhbmRsZXIgKGNhbGxlZCBhdCBJU1IgdGltZSkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IGludGVycnVwdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgorICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQoreworCXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudDsKKwlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgZXZlbnQ7CisKKwkvKiBldmVudHMgdHVybmVkIG9mZiBkdWUgdG8gaG9zdCByZXNldCBvciBkcml2ZXIgdW5sb2FkaW5nICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPmZ3X2V2ZW50c19vZmYgfHwgaW9jLT5yZW1vdmVfaG9zdCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKworCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwlldmVudCA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCS8qIGhhbmRsZSB0aGVzZSAqLworCWNhc2UgTVBJMl9FVkVOVF9TQVNfQlJPQURDQVNUX1BSSU1JVElWRToKKwl7CisJCU1waTJFdmVudERhdGFTYXNCcm9hZGNhc3RQcmltaXRpdmVfdCAqYmFlbl9kYXRhID0KKwkJICAgIChNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKikKKwkJICAgIG1waV9yZXBseS0+RXZlbnREYXRhOworCisJCWlmIChiYWVuX2RhdGEtPlByaW1pdGl2ZSAhPQorCQkgICAgTVBJMl9FVkVOVF9QUklNSVRJVkVfQVNZTkNIUk9OT1VTX0VWRU5UIHx8CisJCSAgICBpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSkKKwkJCXJldHVybjsKKwkJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAxOworCQlicmVhazsKKwl9CisKKwljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUOgorCQlfc2NzaWhfY2hlY2tfdG9wb19kZWxldGVfZXZlbnRzKGlvYywKKwkJICAgIChNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKikKKwkJICAgIG1waV9yZXBseS0+RXZlbnREYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCWNhc2UgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTOgorCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgorCWNhc2UgTVBJMl9FVkVOVF9TQVNfRU5DTF9ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwljYXNlIE1QSTJfRVZFTlRfSVJfVk9MVU1FOgorCWNhc2UgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLOgorCWNhc2UgTVBJMl9FVkVOVF9JUl9DT05GSUdVUkFUSU9OX0NIQU5HRV9MSVNUOgorCWNhc2UgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMOgorCQlicmVhazsKKworCWRlZmF1bHQ6IC8qIGlnbm9yZSB0aGUgcmVzdCAqLworCQlyZXR1cm47CisJfQorCisJZndfZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZndfZXZlbnRfd29yayksIEdGUF9BVE9NSUMpOworCWlmICghZndfZXZlbnQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJZndfZXZlbnQtPmV2ZW50X2RhdGEgPQorCSAgICBremFsbG9jKG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQsIEdGUF9BVE9NSUMpOworCWlmICghZndfZXZlbnQtPmV2ZW50X2RhdGEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWtmcmVlKGZ3X2V2ZW50KTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweShmd19ldmVudC0+ZXZlbnRfZGF0YSwgbXBpX3JlcGx5LT5FdmVudERhdGEsCisJICAgIG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQpOworCWZ3X2V2ZW50LT5pb2MgPSBpb2M7CisJZndfZXZlbnQtPlZGX0lEID0gVkZfSUQ7CisJZndfZXZlbnQtPmV2ZW50ID0gZXZlbnQ7CisJX3Njc2loX2Z3X2V2ZW50X2FkZChpb2MsIGZ3X2V2ZW50KTsKK30KKworLyogc2hvc3QgdGVtcGxhdGUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjc2loX2RyaXZlcl90ZW1wbGF0ZSA9IHsKKwkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQkJPSAiRnVzaW9uIE1QVCBTQVMgSG9zdCIsCisJLnByb2NfbmFtZQkJCT0gTVBUMlNBU19EUklWRVJfTkFNRSwKKwkucXVldWVjb21tYW5kCQkJPSBzY3NpaF9xY21kLAorCS50YXJnZXRfYWxsb2MJCQk9IHNjc2loX3RhcmdldF9hbGxvYywKKwkuc2xhdmVfYWxsb2MJCQk9IHNjc2loX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUJCT0gc2NzaWhfc2xhdmVfY29uZmlndXJlLAorCS50YXJnZXRfZGVzdHJveQkJCT0gc2NzaWhfdGFyZ2V0X2Rlc3Ryb3ksCisJLnNsYXZlX2Rlc3Ryb3kJCQk9IHNjc2loX3NsYXZlX2Rlc3Ryb3ksCisJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfdHlwZQkJPSBzY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuZWhfYWJvcnRfaGFuZGxlcgkJPSBzY3NpaF9hYm9ydCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBzY3NpaF9kZXZfcmVzZXQsCisJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSBzY3NpaF9ob3N0X3Jlc2V0LAorCS5iaW9zX3BhcmFtCQkJPSBzY3NpaF9iaW9zX3BhcmFtLAorCS5jYW5fcXVldWUJCQk9IDEsCisJLnRoaXNfaWQJCQk9IC0xLAorCS5zZ190YWJsZXNpemUJCQk9IE1QVDJTQVNfU0dfREVQVEgsCisJLm1heF9zZWN0b3JzCQkJPSA4MTkyLAorCS5jbWRfcGVyX2x1bgkJCT0gNywKKwkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5zaG9zdF9hdHRycwkJCT0gbXB0MnNhc19ob3N0X2F0dHJzLAorCS5zZGV2X2F0dHJzCQkJPSBtcHQyc2FzX2Rldl9hdHRycywKK307CisKKy8qKgorICogX3Njc2loX2V4cGFuZGVyX25vZGVfcmVtb3ZlIC0gcmVtb3ZpbmcgZXhwYW5kZXIgZGV2aWNlIGZyb20gbGlzdC4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19leHBhbmRlcjogdGhlIHNhc19kZXZpY2Ugb2JqZWN0CisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+c2FzX25vZGVfbG9jay4KKyAqCisgKiBSZW1vdmluZyBvYmplY3QgYW5kIGZyZWVpbmcgYXNzb2NpYXRlZCBtZW1vcnkgZnJvbSB0aGUKKyAqIGlvYy0+c2FzX2V4cGFuZGVyX2xpc3QuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZXhwYW5kZXJfbm9kZV9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcikKK3sKKwlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQ7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXN0cnVjdCBfc2FzX25vZGUgKmV4cGFuZGVyX3NpYmxpbmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghc2FzX2V4cGFuZGVyKQorCQlyZXR1cm47CisKKwkvKiByZW1vdmUgc2libGluZyBwb3J0cyBhdHRhY2hlZCB0byB0aGlzIGV4cGFuZGVyICovCisgcmV0cnlfZGV2aWNlX3NlYXJjaDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wdDJzYXNfcG9ydCwKKwkgICAmc2FzX2V4cGFuZGVyLT5zYXNfcG9ydF9saXN0LCBwb3J0X2xpc3QpIHsKKwkJaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJCSAgICBTQVNfRU5EX0RFVklDRSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCQlzYXNfZGV2aWNlID0KKwkJCSAgICBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJCQkgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFzYXNfZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUpOworCQkJZ290byByZXRyeV9kZXZpY2Vfc2VhcmNoOworCQl9CisJfQorCisgcmV0cnlfZXhwYW5kZXJfc2VhcmNoOgorCWxpc3RfZm9yX2VhY2hfZW50cnkobXB0MnNhc19wb3J0LAorCSAgICZzYXNfZXhwYW5kZXItPnNhc19wb3J0X2xpc3QsIHBvcnRfbGlzdCkgeworCisJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRURHRV9FWFBBTkRFUiB8fAorCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0KKwkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX0ZBTk9VVF9FWFBBTkRFUikgeworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCQlleHBhbmRlcl9zaWJsaW5nID0KKwkJCSAgICBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoCisJCQkgICAgaW9jLCBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghZXhwYW5kZXJfc2libGluZykKKwkJCQljb250aW51ZTsKKwkJCV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoaW9jLCBleHBhbmRlcl9zaWJsaW5nLT5oYW5kbGUpOworCQkJZ290byByZXRyeV9leHBhbmRlcl9zZWFyY2g7CisJCX0KKwl9CisKKwltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19leHBhbmRlci0+c2FzX2FkZHJlc3MsCisJICAgIHNhc19leHBhbmRlci0+cGFyZW50X2hhbmRsZSk7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiZXhwYW5kZXJfcmVtb3ZlOiBoYW5kbGUiCisJICAgIigweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsCisJICAgIHNhc19leHBhbmRlci0+aGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKQorCSAgICBzYXNfZXhwYW5kZXItPnNhc19hZGRyZXNzKTsKKworCWxpc3RfZGVsKCZzYXNfZXhwYW5kZXItPmxpc3QpOworCWtmcmVlKHNhc19leHBhbmRlci0+cGh5KTsKKwlrZnJlZShzYXNfZXhwYW5kZXIpOworfQorCisvKioKKyAqIHNjc2loX3JlbW92ZSAtIGRldGFjaCBhbmQgcmVtb3ZlIGFkZCBob3N0CisgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0CitzY3NpaF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9zaWJsaW5nOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3cTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW9jLT5yZW1vdmVfaG9zdCA9IDE7CisJX3Njc2loX2Z3X2V2ZW50X29mZihpb2MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCXdxID0gaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQ7CisJaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCWlmICh3cSkKKwkJZGVzdHJveV93b3JrcXVldWUod3EpOworCisJLyogZnJlZSBwb3J0cyBhdHRhY2hlZCB0byB0aGUgc2FzX2hvc3QgKi8KKyByZXRyeV9hZ2FpbjoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wdDJzYXNfcG9ydCwKKwkgICAmaW9jLT5zYXNfaGJhLnNhc19wb3J0X2xpc3QsIHBvcnRfbGlzdCkgeworCQlpZiAobXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0KKwkJICAgIFNBU19FTkRfREVWSUNFKSB7CisJCQlzYXNfZGV2aWNlID0KKwkJCSAgICBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJCQkgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJCQlpZiAoc2FzX2RldmljZSkgeworCQkJCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgc2FzX2RldmljZS0+aGFuZGxlKTsKKwkJCQlnb3RvIHJldHJ5X2FnYWluOworCQkJfQorCQl9IGVsc2UgeworCQkJZXhwYW5kZXJfc2libGluZyA9CisJCQkgICAgbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJCQlpZiAoZXhwYW5kZXJfc2libGluZykgeworCQkJCV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoaW9jLAorCQkJCSAgICBleHBhbmRlcl9zaWJsaW5nLT5oYW5kbGUpOworCQkJCWdvdG8gcmV0cnlfYWdhaW47CisJCQl9CisJCX0KKwl9CisKKwkvKiBmcmVlIHBoeXMgYXR0YWNoZWQgdG8gdGhlIHNhc19ob3N0ICovCisJaWYgKGlvYy0+c2FzX2hiYS5udW1fcGh5cykgeworCQlrZnJlZShpb2MtPnNhc19oYmEucGh5KTsKKwkJaW9jLT5zYXNfaGJhLnBoeSA9IE5VTEw7CisJCWlvYy0+c2FzX2hiYS5udW1fcGh5cyA9IDA7CisJfQorCisJc2FzX3JlbW92ZV9ob3N0KHNob3N0KTsKKwltcHQyc2FzX2Jhc2VfZGV0YWNoKGlvYyk7CisJbGlzdF9kZWwoJmlvYy0+bGlzdCk7CisJc2NzaV9yZW1vdmVfaG9zdChzaG9zdCk7CisJc2NzaV9ob3N0X3B1dChzaG9zdCk7Cit9CisKKy8qKgorICogX3Njc2loX3Byb2JlX2Jvb3RfZGV2aWNlcyAtIHJlcG9ydHMgMXN0IGRldmljZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogSWYgc3BlY2lmaWVkIGluIGJpb3MgcGFnZSAyLCB0aGlzIHJvdXRpbmUgcmVwb3J0cyB0aGUgMXN0CisgKiBkZXZpY2Ugc2NzaS1tbCBvciBzYXMgdHJhbnNwb3J0IGZvciBwZXJzaXN0ZW50IGJvb3QgZGV2aWNlCisgKiBwdXJwb3Nlcy4gIFBsZWFzZSByZWZlciB0byBmdW5jdGlvbiBfc2NzaWhfZGV0ZXJtaW5lX2Jvb3RfZGV2aWNlKCkKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9wcm9iZV9ib290X2RldmljZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXU4IGlzX3JhaWQ7CisJdm9pZCAqZGV2aWNlOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1MTYgaGFuZGxlLCBwYXJlbnRfaGFuZGxlOworCXU2NCBzYXNfYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKworCWRldmljZSA9IE5VTEw7CisJaWYgKGlvYy0+cmVxX2Jvb3RfZGV2aWNlLmRldmljZSkgeworCQlkZXZpY2UgPSAgaW9jLT5yZXFfYm9vdF9kZXZpY2UuZGV2aWNlOworCQlpc19yYWlkID0gaW9jLT5yZXFfYm9vdF9kZXZpY2UuaXNfcmFpZDsKKwl9IGVsc2UgaWYgKGlvYy0+cmVxX2FsdF9ib290X2RldmljZS5kZXZpY2UpIHsKKwkJZGV2aWNlID0gIGlvYy0+cmVxX2FsdF9ib290X2RldmljZS5kZXZpY2U7CisJCWlzX3JhaWQgPSBpb2MtPnJlcV9hbHRfYm9vdF9kZXZpY2UuaXNfcmFpZDsKKwl9IGVsc2UgaWYgKGlvYy0+Y3VycmVudF9ib290X2RldmljZS5kZXZpY2UpIHsKKwkJZGV2aWNlID0gIGlvYy0+Y3VycmVudF9ib290X2RldmljZS5kZXZpY2U7CisJCWlzX3JhaWQgPSBpb2MtPmN1cnJlbnRfYm9vdF9kZXZpY2UuaXNfcmFpZDsKKwl9CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuOworCisJaWYgKGlzX3JhaWQpIHsKKwkJcmFpZF9kZXZpY2UgPSBkZXZpY2U7CisJCXJjID0gc2NzaV9hZGRfZGV2aWNlKGlvYy0+c2hvc3QsIFJBSURfQ0hBTk5FTCwKKwkJICAgIHJhaWRfZGV2aWNlLT5pZCwgMCk7CisJCWlmIChyYykKKwkJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJfSBlbHNlIHsKKwkJc2FzX2RldmljZSA9IGRldmljZTsKKwkJaGFuZGxlID0gc2FzX2RldmljZS0+aGFuZGxlOworCQlwYXJlbnRfaGFuZGxlID0gc2FzX2RldmljZS0+cGFyZW50X2hhbmRsZTsKKwkJc2FzX2FkZHJlc3MgPSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZV90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgc2FzX2RldmljZS0+aGFuZGxlLAorCQkgICAgc2FzX2RldmljZS0+cGFyZW50X2hhbmRsZSkpIHsKKwkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOworCQl9IGVsc2UgaWYgKCFzYXNfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19hZGRyZXNzLAorCQkJICAgIHBhcmVudF9oYW5kbGUpOworCQkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CisJCX0KKwl9Cit9CisKKy8qKgorICogX3Njc2loX3Byb2JlX3JhaWQgLSByZXBvcnRpbmcgcmFpZCB2b2x1bWVzIHRvIHNjc2ktbWwKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIENhbGxlZCBkdXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcHJvYmVfcmFpZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UsICpyYWlkX25leHQ7CisJaW50IHJjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhaWRfZGV2aWNlLCByYWlkX25leHQsCisJICAgICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KQorCQkJY29udGludWU7CisJCXJjID0gc2NzaV9hZGRfZGV2aWNlKGlvYy0+c2hvc3QsIFJBSURfQ0hBTk5FTCwKKwkJICAgIHJhaWRfZGV2aWNlLT5pZCwgMCk7CisJCWlmIChyYykKKwkJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgcmFpZCB2b2x1bWVzIHRvIHNhcyB0cmFuc3BvcnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIENhbGxlZCBkdXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcHJvYmVfc2FzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZSwgcGFyZW50X2hhbmRsZTsKKwl1NjQgc2FzX2FkZHJlc3M7CisKKwkvKiBTQVMgRGV2aWNlIExpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2FzX2RldmljZSwgbmV4dCwgJmlvYy0+c2FzX2RldmljZV9pbml0X2xpc3QsCisJICAgIGxpc3QpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZV90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJCWhhbmRsZSA9IHNhc19kZXZpY2UtPmhhbmRsZTsKKwkJcGFyZW50X2hhbmRsZSA9IHNhc19kZXZpY2UtPnBhcmVudF9oYW5kbGU7CisJCXNhc19hZGRyZXNzID0gc2FzX2RldmljZS0+c2FzX2FkZHJlc3M7CisJCWlmICghbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoaW9jLCBoYW5kbGUsIHBhcmVudF9oYW5kbGUpKSB7CisJCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwkJfSBlbHNlIGlmICghc2FzX2RldmljZS0+c3RhcmdldCkgeworCQkJbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoaW9jLCBzYXNfYWRkcmVzcywKKwkJCSAgICBwYXJlbnRfaGFuZGxlKTsKKwkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOworCQl9CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9wcm9iZV9kZXZpY2VzIC0gcHJvYmluZyBmb3IgZGV2aWNlcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogQ2FsbGVkIGR1cmluZyBpbml0aWFsIGxvYWRpbmcgb2YgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9wcm9iZV9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1MTYgdm9sdW1lX21hcHBpbmdfZmxhZ3MgPQorCSAgICBsZTE2X3RvX2NwdShpb2MtPmlvY19wZzguSVJWb2x1bWVNYXBwaW5nRmxhZ3MpICYKKwkgICAgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX01BU0tfVk9MVU1FX01BUFBJTkdfTU9ERTsKKworCWlmICghKGlvYy0+ZmFjdHMuUHJvdG9jb2xGbGFncyAmIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfU0NTSV9JTklUSUFUT1IpKQorCQlyZXR1cm47ICAvKiByZXR1cm4gd2hlbiBJT0MgZG9lc24ndCBzdXBwb3J0IGluaXRpYXRvciBtb2RlICovCisKKwlfc2NzaWhfcHJvYmVfYm9vdF9kZXZpY2VzKGlvYyk7CisKKwlpZiAoaW9jLT5pcl9maXJtd2FyZSkgeworCQlpZiAoKHZvbHVtZV9tYXBwaW5nX2ZsYWdzICYKKwkJICAgICBNUEkyX0lPQ1BBR0U4X0lSRkxBR1NfSElHSF9WT0xVTUVfTUFQUElORykpIHsKKwkJCV9zY3NpaF9wcm9iZV9zYXMoaW9jKTsKKwkJCV9zY3NpaF9wcm9iZV9yYWlkKGlvYyk7CisJCX0gZWxzZSB7CisJCQlfc2NzaWhfcHJvYmVfcmFpZChpb2MpOworCQkJX3Njc2loX3Byb2JlX3Nhcyhpb2MpOworCQl9CisJfSBlbHNlCisJCV9zY3NpaF9wcm9iZV9zYXMoaW9jKTsKK30KKworLyoqCisgKiBzY3NpaF9wcm9iZSAtIGF0dGFjaCBhbmQgYWRkIHNjc2kgaG9zdAorICogQHBkZXY6IFBDSSBkZXZpY2Ugc3RydWN0CisgKiBAaWQ6IHBjaSBkZXZpY2UgaWQKKyAqCisgKiBSZXR1cm5zIDAgc3VjY2VzcywgYW55dGhpbmcgZWxzZSBlcnJvci4KKyAqLworc3RhdGljIGludAorc2NzaWhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisKKwlzaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmc2NzaWhfZHJpdmVyX3RlbXBsYXRlLAorCSAgICBzaXplb2Yoc3RydWN0IE1QVDJTQVNfQURBUFRFUikpOworCWlmICghc2hvc3QpCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW5pdCBsb2NhbCBwYXJhbXMgKi8KKwlpb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwltZW1zZXQoaW9jLCAwLCBzaXplb2Yoc3RydWN0IE1QVDJTQVNfQURBUFRFUikpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmxpc3QpOworCWxpc3RfYWRkX3RhaWwoJmlvYy0+bGlzdCwgJm1wdDJzYXNfaW9jX2xpc3QpOworCWlvYy0+c2hvc3QgPSBzaG9zdDsKKwlpb2MtPmlkID0gbXB0X2lkcysrOworCXNwcmludGYoaW9jLT5uYW1lLCAiJXMlZCIsIE1QVDJTQVNfRFJJVkVSX05BTUUsIGlvYy0+aWQpOworCWlvYy0+cGRldiA9IHBkZXY7CisJaW9jLT5zY3NpX2lvX2NiX2lkeCA9IHNjc2lfaW9fY2JfaWR4OworCWlvYy0+dG1fY2JfaWR4ID0gdG1fY2JfaWR4OworCWlvYy0+Y3RsX2NiX2lkeCA9IGN0bF9jYl9pZHg7CisJaW9jLT5iYXNlX2NiX2lkeCA9IGJhc2VfY2JfaWR4OworCWlvYy0+dHJhbnNwb3J0X2NiX2lkeCA9IHRyYW5zcG9ydF9jYl9pZHg7CisJaW9jLT5jb25maWdfY2JfaWR4ID0gY29uZmlnX2NiX2lkeDsKKwlpb2MtPmxvZ2dpbmdfbGV2ZWwgPSBsb2dnaW5nX2xldmVsOworCS8qIG1pc2Mgc2VtYXBob3JlcyBhbmQgc3BpbiBsb2NrcyAqLworCXNwaW5fbG9ja19pbml0KCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaW9jLT5zYXNfZGV2aWNlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpb2MtPnNhc19ub2RlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpb2MtPmZ3X2V2ZW50X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpb2MtPnJhaWRfZGV2aWNlX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2RldmljZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5zYXNfZGV2aWNlX2luaXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2V4cGFuZGVyX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmZ3X2V2ZW50X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPnJhaWRfZGV2aWNlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPnNhc19oYmEuc2FzX3BvcnRfbGlzdCk7CisKKwkvKiBpbml0IHNob3N0IHBhcmFtZXRlcnMgKi8KKwlzaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKKwlzaG9zdC0+bWF4X2x1biA9IG1heF9sdW47CisJc2hvc3QtPnRyYW5zcG9ydHQgPSBtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZTsKKwlzaG9zdC0+dW5pcXVlX2lkID0gaW9jLT5pZDsKKworCWlmICgoc2NzaV9hZGRfaG9zdChzaG9zdCwgJnBkZXYtPmRldikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlsaXN0X2RlbCgmaW9jLT5saXN0KTsKKwkJZ290byBvdXRfYWRkX3Nob3N0X2ZhaWw7CisJfQorCisJLyogZXZlbnQgdGhyZWFkICovCisJc25wcmludGYoaW9jLT5maXJtd2FyZV9ldmVudF9uYW1lLCBzaXplb2YoaW9jLT5maXJtd2FyZV9ldmVudF9uYW1lKSwKKwkgICAgImZ3X2V2ZW50JWQiLCBpb2MtPmlkKTsKKwlpb2MtPmZpcm13YXJlX2V2ZW50X3RocmVhZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCSAgICBpb2MtPmZpcm13YXJlX2V2ZW50X25hbWUpOworCWlmICghaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X3RocmVhZF9mYWlsOworCX0KKworCWlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUgPSAxOworCWlmICgobXB0MnNhc19iYXNlX2F0dGFjaChpb2MpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXRfYXR0YWNoX2ZhaWw7CisJfQorCisJaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSA9IDA7CisJX3Njc2loX3Byb2JlX2RldmljZXMoaW9jKTsKKwlyZXR1cm4gMDsKKworIG91dF9hdHRhY2hfZmFpbDoKKwlkZXN0cm95X3dvcmtxdWV1ZShpb2MtPmZpcm13YXJlX2V2ZW50X3RocmVhZCk7Cisgb3V0X3RocmVhZF9mYWlsOgorCWxpc3RfZGVsKCZpb2MtPmxpc3QpOworCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOworIG91dF9hZGRfc2hvc3RfZmFpbDoKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworI2lmZGVmIENPTkZJR19QTQorLyoqCisgKiBzY3NpaF9zdXNwZW5kIC0gcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kIG1haW4gZW50cnkgcG9pbnQKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHN0cnVjdAorICogQHN0YXRlOiBQTSBzdGF0ZSBjaGFuZ2UgdG8gKHVzdWFsbHkgUENJX0QzKQorICoKKyAqIFJldHVybnMgMCBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIGVycm9yLgorICovCitzdGF0aWMgaW50CitzY3NpaF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJdTMyIGRldmljZV9zdGF0ZTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJc2NzaV9ibG9ja19yZXF1ZXN0cyhzaG9zdCk7CisJZGV2aWNlX3N0YXRlID0gcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSk7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBkZXY9MHglcCwgc2xvdD0lcywgZW50ZXJpbmcgIgorCSAgICAib3BlcmF0aW5nIHN0YXRlIFtEJWRdXG4iLCBpb2MtPm5hbWUsIHBkZXYsCisJICAgIHBjaV9uYW1lKHBkZXYpLCBkZXZpY2Vfc3RhdGUpOworCisJbXB0MnNhc19iYXNlX2ZyZWVfcmVzb3VyY2VzKGlvYyk7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgZGV2aWNlX3N0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzY3NpaF9yZXN1bWUgLSBwb3dlciBtYW5hZ2VtZW50IHJlc3VtZSBtYWluIGVudHJ5IHBvaW50CisgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgc3VjY2VzcywgYW55dGhpbmcgZWxzZSBlcnJvci4KKyAqLworc3RhdGljIGludAorc2NzaWhfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCXUzMiBkZXZpY2Vfc3RhdGUgPSBwZGV2LT5jdXJyZW50X3N0YXRlOworCWludCByOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBkZXY9MHglcCwgc2xvdD0lcywgcHJldmlvdXMgIgorCSAgICAib3BlcmF0aW5nIHN0YXRlIFtEJWRdXG4iLCBpb2MtPm5hbWUsIHBkZXYsCisJICAgIHBjaV9uYW1lKHBkZXYpLCBkZXZpY2Vfc3RhdGUpOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCWlvYy0+cGRldiA9IHBkZXY7CisJciA9IG1wdDJzYXNfYmFzZV9tYXBfcmVzb3VyY2VzKGlvYyk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwgU09GVF9SRVNFVCk7CisJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2NzaWhfZHJpdmVyID0geworCS5uYW1lCQk9IE1QVDJTQVNfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gc2NzaWhfcGNpX3RhYmxlLAorCS5wcm9iZQkJPSBzY3NpaF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNjc2loX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBzY3NpaF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2NzaWhfcmVzdW1lLAorI2VuZGlmCit9OworCisKKy8qKgorICogc2NzaWhfaW5pdCAtIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqIFJldHVybnMgMCBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIGVycm9yLgorICovCitzdGF0aWMgaW50IF9faW5pdAorc2NzaWhfaW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKworCW1wdF9pZHMgPSAwOworCXByaW50ayhLRVJOX0lORk8gIiVzIHZlcnNpb24gJXMgbG9hZGVkXG4iLCBNUFQyU0FTX0RSSVZFUl9OQU1FLAorCSAgICBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OKTsKKworCW1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlID0KKwkgICAgc2FzX2F0dGFjaF90cmFuc3BvcnQoJm1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyk7CisJaWYgKCFtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltcHQyc2FzX2Jhc2VfaW5pdGlhbGl6ZV9jYWxsYmFja19oYW5kbGVyKCk7CisKKwkgLyogcXVldWVjb21tYW5kIGNhbGxiYWNrIGhhbmRlciAqLworCXNjc2lfaW9fY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoc2NzaWhfaW9fZG9uZSk7CisKKwkvKiB0YXNrIG1hbmFnbWVudCBjYWxsYmFjayBoYW5kbGVyICovCisJdG1fY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoc2NzaWhfdG1fZG9uZSk7CisKKwkvKiBiYXNlIGludGVybmFsIGNvbW1hbmRzIGNhbGxiYWNrIGhhbmRsZXIgKi8KKwliYXNlX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKG1wdDJzYXNfYmFzZV9kb25lKTsKKworCS8qIHRyYW5zcG9ydCBpbnRlcm5hbCBjb21tYW5kcyBjYWxsYmFjayBoYW5kbGVyICovCisJdHJhbnNwb3J0X2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKAorCSAgICBtcHQyc2FzX3RyYW5zcG9ydF9kb25lKTsKKworCS8qIGNvbmZpZ3VyYXRpb24gcGFnZSBBUEkgaW50ZXJuYWwgY29tbWFuZHMgY2FsbGJhY2sgaGFuZGxlciAqLworCWNvbmZpZ19jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgbXB0MnNhc19jb25maWdfZG9uZSk7CisKKwkvKiBjdGwgbW9kdWxlIGNhbGxiYWNrIGhhbmRsZXIgKi8KKwljdGxfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIobXB0MnNhc19jdGxfZG9uZSk7CisKKwltcHQyc2FzX2N0bF9pbml0KCk7CisKKwllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjc2loX2RyaXZlcik7CisJaWYgKGVycm9yKQorCQlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHNjc2loX2V4aXQgLSBleGl0IHBvaW50IGZvciB0aGlzIGRyaXZlciAod2hlbiBpdCBpcyBhIG1vZHVsZSkuCisgKgorICogUmV0dXJucyAwIHN1Y2Nlc3MsIGFueXRoaW5nIGVsc2UgZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdAorc2NzaWhfZXhpdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIm1wdDJzYXMgdmVyc2lvbiAlcyB1bmxvYWRpbmdcbiIsCisJICAgIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04pOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOworCisJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHNjc2lfaW9fY2JfaWR4KTsKKwltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX2NiX2lkeCk7CisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihiYXNlX2NiX2lkeCk7CisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0cmFuc3BvcnRfY2JfaWR4KTsKKwltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGNvbmZpZ19jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoY3RsX2NiX2lkeCk7CisKKwltcHQyc2FzX2N0bF9leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KHNjc2loX2luaXQpOworbW9kdWxlX2V4aXQoc2NzaWhfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDNkYzBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwpAQCAtMCwwICsxLDEyMTEgQEAKKy8qCisgKiBTQVMgVHJhbnNwb3J0IExheWVyIGZvciBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBiYXNlZCBjb250cm9sbGVycworICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX3RyYW5zcG9ydC5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc2FzLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorCisjaW5jbHVkZSAibXB0MnNhc19iYXNlLmgiCisvKioKKyAqIF90cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9oYW5kbGUgLSBzYXMgbm9kZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZXhwYW5kZXIgb3IgaGJhIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+c2FzX25vZGVfbG9jay4KKyAqCisgKiBTZWFyY2ggZm9yIGVpdGhlciBoYmEgcGh5cyBvciBleHBhbmRlciBkZXZpY2UgYmFzZWQgb24gaGFuZGxlLCB0aGVuIHJldHVybnMKKyAqIHRoZSBzYXNfbm9kZSBvYmplY3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX3Nhc19ub2RlICoKK190cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5czsgaSsrKQorCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5oYW5kbGUgPT0gaGFuZGxlKQorCQkJcmV0dXJuICZpb2MtPnNhc19oYmE7CisKKwlyZXR1cm4gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7Cit9CisKKy8qKgorICogX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUgLQorICogQGxpbmtfcmF0ZTogbGluayByYXRlIHJldHVybmVkIGZyb20gbXB0IGZpcm13YXJlCisgKgorICogQ29udmVydCBsaW5rX3JhdGUgZnJvbSBtcGkgZnVzaW9uIGludG8gc2FzX3RyYW5zcG9ydCBmb3JtLgorICovCitzdGF0aWMgZW51bSBzYXNfbGlua3JhdGUKK190cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKHU4IGxpbmtfcmF0ZSkKK3sKKwllbnVtIHNhc19saW5rcmF0ZSByYzsKKworCXN3aXRjaCAobGlua19yYXRlKSB7CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNToKKwkJcmMgPSBTQVNfTElOS19SQVRFXzFfNV9HQlBTOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfM18wOgorCQlyYyA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV82XzA6CisJCXJjID0gU0FTX0xJTktfUkFURV82XzBfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1BIWV9ESVNBQkxFRDoKKwkJcmMgPSBTQVNfUEhZX0RJU0FCTEVEOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTkVHT1RJQVRJT05fRkFJTEVEOgorCQlyYyA9IFNBU19MSU5LX1JBVEVfRkFJTEVEOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfUE9SVF9TRUxFQ1RPUjoKKwkJcmMgPSBTQVNfU0FUQV9QT1JUX1NFTEVDVE9SOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfU01QX1JFU0VUX0lOX1BST0dSRVNTOgorCQlyYyA9IFNBU19QSFlfUkVTRVRfSU5fUFJPR1JFU1M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1NBVEFfT09CX0NPTVBMRVRFOgorCWNhc2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9VTktOT1dOX0xJTktfUkFURToKKwkJcmMgPSBTQVNfTElOS19SQVRFX1VOS05PV047CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX3RyYW5zcG9ydF9zZXRfaWRlbnRpZnkgLSBzZXQgaWRlbnRpZnkgZm9yIHBoeXMgYW5kIGVuZCBkZXZpY2VzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBpZGVudGlmeTogc2FzIGlkZW50aWZ5IGluZm8KKyAqCisgKiBQb3B1bGF0ZXMgc2FzIGlkZW50aWZ5IGluZm8uCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX3RyYW5zcG9ydF9zZXRfaWRlbnRpZnkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLAorICAgIHN0cnVjdCBzYXNfaWRlbnRpZnkgKmlkZW50aWZ5KQoreworCU1waTJTYXNEZXZpY2VQYWdlMF90IHNhc19kZXZpY2VfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MzIgZGV2aWNlX2luZm87CisJdTMyIGlvY19zdGF0dXM7CisKKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChpb2MsICZtcGlfcmVwbHksICZzYXNfZGV2aWNlX3BnMCwKKwkgICAgTVBJMl9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUsIGhhbmRsZSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImhhbmRsZSgweCUwNHgpLCBpb2Nfc3RhdHVzKDB4JTA0eCkiCisJCSAgICAiXG5mYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgaW9jX3N0YXR1cywKKwkJICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbXNldChpZGVudGlmeSwgMCwgc2l6ZW9mKGlkZW50aWZ5KSk7CisJZGV2aWNlX2luZm8gPSBsZTMyX3RvX2NwdShzYXNfZGV2aWNlX3BnMC5EZXZpY2VJbmZvKTsKKworCS8qIHNhc19hZGRyZXNzICovCisJaWRlbnRpZnktPnNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2RldmljZV9wZzAuU0FTQWRkcmVzcyk7CisKKwkvKiBkZXZpY2VfdHlwZSAqLworCXN3aXRjaCAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19NQVNLX0RFVklDRV9UWVBFKSB7CisJY2FzZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19OT19ERVZJQ0U6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19QSFlfVU5VU0VEOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX0RFVklDRV9JTkZPX0VORF9ERVZJQ0U6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19FTkRfREVWSUNFOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX0RFVklDRV9JTkZPX0VER0VfRVhQQU5ERVI6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19FREdFX0VYUEFOREVSX0RFVklDRTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19GQU5PVVRfRVhQQU5ERVI6CisJCWlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9IFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFOworCQlicmVhazsKKwl9CisKKwkvKiBpbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgKi8KKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfSU5JVElBVE9SKQorCQlpZGVudGlmeS0+aW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TU1A7CisJaWYgKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU1RQX0lOSVRJQVRPUikKKwkJaWRlbnRpZnktPmluaXRpYXRvcl9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU1RQOworCWlmIChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NNUF9JTklUSUFUT1IpCisJCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NNUDsKKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TQVRBX0hPU1QpCisJCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NBVEE7CisKKwkvKiB0YXJnZXRfcG9ydF9wcm90b2NvbHMgKi8KKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKQorCQlpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TU1A7CisJaWYgKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU1RQX1RBUkdFVCkKKwkJaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU1RQOworCWlmIChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NNUF9UQVJHRVQpCisJCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NNUDsKKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TQVRBX0RFVklDRSkKKwkJaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU0FUQTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1wdDJzYXNfdHJhbnNwb3J0X2RvbmUgLSAgaW50ZXJuYWwgdHJhbnNwb3J0IGxheWVyIGNhbGxiYWNrIGhhbmRsZXIuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICoKKyAqIENhbGxiYWNrIGhhbmRsZXIgd2hlbiBzZW5kaW5nIGludGVybmFsIGdlbmVyYXRlZCB0cmFuc3BvcnQgY21kcy4KKyAqIFRoZSBjYWxsYmFjayBpbmRleCBwYXNzZWQgaXMgYGlvYy0+dHJhbnNwb3J0X2NiX2lkeGAKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKKyAgICB1MzIgcmVwbHkpCit7CisJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CisKKwltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQorCQlyZXR1cm47CisJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc21pZCAhPSBzbWlkKQorCQlyZXR1cm47CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CisJaWYgKG1waV9yZXBseSkgeworCQltZW1jcHkoaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSwgbXBpX3JlcGx5LAorCQkgICAgbXBpX3JlcGx5LT5Nc2dMZW5ndGgqNCk7CisJCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFUExZX1ZBTElEOworCX0KKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmPSB+TVBUMl9DTURfUEVORElORzsKKwljb21wbGV0ZSgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKK30KKworLyogcmVwb3J0IG1hbnVmYWN0dXJlIHJlcXVlc3Qgc3RydWN0dXJlICovCitzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdHsKKwl1OCBzbXBfZnJhbWVfdHlwZTsKKwl1OCBmdW5jdGlvbjsKKwl1OCByZXNlcnZlZDsKKwl1OCByZXF1ZXN0X2xlbmd0aDsKK307CisKKy8qIHJlcG9ydCBtYW51ZmFjdHVyZSByZXBseSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCByZXBfbWFudV9yZXBseXsKKwl1OCBzbXBfZnJhbWVfdHlwZTsgLyogMHg0MSAqLworCXU4IGZ1bmN0aW9uOyAvKiAweDAxICovCisJdTggZnVuY3Rpb25fcmVzdWx0OworCXU4IHJlc3BvbnNlX2xlbmd0aDsKKwl1MTYgZXhwYW5kZXJfY2hhbmdlX2NvdW50OworCXU4IHJlc2VydmVkMFsyXTsKKwl1OCBzYXNfZm9ybWF0OjE7CisJdTggcmVzZXJ2ZWQxOjc7CisJdTggcmVzZXJ2ZWQyWzNdOworCXU4IHZlbmRvcl9pZFtTQVNfRVhQQU5ERVJfVkVORE9SX0lEX0xFTl07CisJdTggcHJvZHVjdF9pZFtTQVNfRVhQQU5ERVJfUFJPRFVDVF9JRF9MRU5dOworCXU4IHByb2R1Y3RfcmV2W1NBU19FWFBBTkRFUl9QUk9EVUNUX1JFVl9MRU5dOworCXU4IGNvbXBvbmVudF92ZW5kb3JfaWRbU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOXTsKKwl1MTYgY29tcG9uZW50X2lkOworCXU4IGNvbXBvbmVudF9yZXZpc2lvbl9pZDsKKwl1OCByZXNlcnZlZDM7CisJdTggdmVuZG9yX3NwZWNpZmljWzhdOworfTsKKworLyoqCisgKiB0cmFuc3BvcnRfZXhwYW5kZXJfcmVwb3J0X21hbnVmYWN0dXJlIC0gb2J0YWluIFNNUCByZXBvcnRfbWFudWZhY3R1cmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19hZGRyZXNzOiBleHBhbmRlciBzYXMgYWRkcmVzcworICogQGVkZXY6IHRoZSBzYXNfZXhwYW5kZXJfZGV2aWNlIG9iamVjdAorICoKKyAqIEZpbGxzIGluIHRoZSBzYXNfZXhwYW5kZXJfZGV2aWNlIG9iamVjdCB3aGVuIFNNUCBwb3J0IGlzIGNyZWF0ZWQuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAordHJhbnNwb3J0X2V4cGFuZGVyX3JlcG9ydF9tYW51ZmFjdHVyZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTY0IHNhc19hZGRyZXNzLCBzdHJ1Y3Qgc2FzX2V4cGFuZGVyX2RldmljZSAqZWRldikKK3sKKwlNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCU1waTJTbXBQYXNzdGhyb3VnaFJlcGx5X3QgKm1waV9yZXBseTsKKwlzdHJ1Y3QgcmVwX21hbnVfcmVwbHkgKm1hbnVmYWN0dXJlX3JlcGx5OworCXN0cnVjdCByZXBfbWFudV9yZXF1ZXN0ICptYW51ZmFjdHVyZV9yZXF1ZXN0OworCWludCByYzsKKwl1MTYgc21pZDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdm9pZCAqcHNnZTsKKwl1MzIgc2dsX2ZsYWdzOworCXU4IGlzc3VlX3Jlc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmRhdGFfb3V0ID0gTlVMTDsKKwlkbWFfYWRkcl90IGRhdGFfb3V0X2RtYTsKKwl1MzIgc3o7CisJdTY0ICpzYXNfYWRkcmVzc19sZTsKKwl1MTYgd2FpdF9zdGF0ZV9jb3VudDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCisJbXV0ZXhfbG9jaygmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7CisKKwlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRyYW5zcG9ydF9jbWRzIGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisKKwl3YWl0X3N0YXRlX2NvdW50ID0gMDsKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJd2hpbGUgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgeworCQlpZiAod2FpdF9zdGF0ZV9jb3VudCsrID09IDEwKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlyYyA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzc2xlZXAoMSk7CisJCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB3YWl0aW5nIGZvciAiCisJCSAgICAib3BlcmF0aW9uYWwgc3RhdGUoY291bnQ9JWQpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgd2FpdF9zdGF0ZV9jb3VudCk7CisJfQorCWlmICh3YWl0X3N0YXRlX2NvdW50KQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGlvYyBpcyBvcGVyYXRpb25hbFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dHJhbnNwb3J0X2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkID0gc21pZDsKKworCXN6ID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpOworCWRhdGFfb3V0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBzeiwgJmRhdGFfb3V0X2RtYSk7CisKKwlpZiAoIWRhdGFfb3V0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sCisJCSAgICBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTk9NRU07CisJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWFudWZhY3R1cmVfcmVxdWVzdCA9IGRhdGFfb3V0OworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnNtcF9mcmFtZV90eXBlID0gMHg0MDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5mdW5jdGlvbiA9IDE7CisJbWFudWZhY3R1cmVfcmVxdWVzdC0+cmVzZXJ2ZWQgPSAwOworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnJlcXVlc3RfbGVuZ3RoID0gMDsKKworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOworCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCXNhc19hZGRyZXNzX2xlID0gKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzczsKKwkqc2FzX2FkZHJlc3NfbGUgPSBjcHVfdG9fbGU2NChzYXNfYWRkcmVzcyk7CisJbXBpX3JlcXVlc3QtPlJlcXVlc3REYXRhTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKKwlwc2dlID0gJm1waV9yZXF1ZXN0LT5TR0w7CisKKwkvKiBXUklURSBzZ2VsIGZpcnN0ICovCisJc2dsX2ZsYWdzID0gKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8IE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DKTsKKwlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwKKwkgICAgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KSwgZGF0YV9vdXRfZG1hKTsKKworCS8qIGluY3Igc2dlbCAqLworCXBzZ2UgKz0gaW9jLT5zZ2Vfc2l6ZTsKKworCS8qIFJFQUQgc2dlbCBsYXN0ICovCisJc2dsX2ZsYWdzID0gKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUKTsKKwlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwKKwkgICAgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXBseSksIGRhdGFfb3V0X2RtYSArCisJICAgIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCkpOworCisJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmVwb3J0X21hbnVmYWN0dXJlIC0gIgorCSAgICAic2VuZCB0byBzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIDAgLyogVkZfSUQgKi8pOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUsCisJICAgIDEwKkhaKTsKKworCWlmICghKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCV9kZWJ1Z19kdW1wX21mKG1waV9yZXF1ZXN0LAorCQkgICAgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQorCQkJaXNzdWVfcmVzZXQgPSAxOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCisJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmVwb3J0X21hbnVmYWN0dXJlIC0gIgorCSAgICAiY29tcGxldGVcbiIsIGlvYy0+bmFtZSkpOworCisJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpIHsKKwkJdTggKnRtcDsKKworCQltcGlfcmVwbHkgPSBpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5OworCisJCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJICAgICJyZXBvcnRfbWFudWZhY3R1cmUgLSByZXBseSBkYXRhIHRyYW5zZmVyIHNpemUoJWQpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlRGF0YUxlbmd0aCkpKTsKKworCQlpZiAobGUxNl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGgpICE9CisJCSAgICBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcGx5KSkKKwkJCWdvdG8gb3V0OworCisJCW1hbnVmYWN0dXJlX3JlcGx5ID0gZGF0YV9vdXQgKyBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpOworCQlzdHJuY3B5KGVkZXYtPnZlbmRvcl9pZCwgbWFudWZhY3R1cmVfcmVwbHktPnZlbmRvcl9pZCwKKwkJICAgICBTQVNfRVhQQU5ERVJfVkVORE9SX0lEX0xFTik7CisJCXN0cm5jcHkoZWRldi0+cHJvZHVjdF9pZCwgbWFudWZhY3R1cmVfcmVwbHktPnByb2R1Y3RfaWQsCisJCSAgICAgU0FTX0VYUEFOREVSX1BST0RVQ1RfSURfTEVOKTsKKwkJc3RybmNweShlZGV2LT5wcm9kdWN0X3JldiwgbWFudWZhY3R1cmVfcmVwbHktPnByb2R1Y3RfcmV2LAorCQkgICAgIFNBU19FWFBBTkRFUl9QUk9EVUNUX1JFVl9MRU4pOworCQllZGV2LT5sZXZlbCA9IG1hbnVmYWN0dXJlX3JlcGx5LT5zYXNfZm9ybWF0OworCQlpZiAobWFudWZhY3R1cmVfcmVwbHktPnNhc19mb3JtYXQpIHsKKwkJCXN0cm5jcHkoZWRldi0+Y29tcG9uZW50X3ZlbmRvcl9pZCwKKwkJCSAgICBtYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X3ZlbmRvcl9pZCwKKwkJCSAgICAgU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOKTsKKwkJCXRtcCA9ICh1OCAqKSZtYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X2lkOworCQkJZWRldi0+Y29tcG9uZW50X2lkID0gdG1wWzBdIDw8IDggfCB0bXBbMV07CisJCQllZGV2LT5jb21wb25lbnRfcmV2aXNpb25faWQgPQorCQkJICAgIG1hbnVmYWN0dXJlX3JlcGx5LT5jb21wb25lbnRfcmV2aXNpb25faWQ7CisJCX0KKwl9IGVsc2UKKwkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkgICAgInJlcG9ydF9tYW51ZmFjdHVyZSAtIG5vIHJlcGx5XG4iLCBpb2MtPm5hbWUpKTsKKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7Cisgb3V0OgorCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJaWYgKGRhdGFfb3V0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgc3osIGRhdGFfb3V0LCBkYXRhX291dF9kbWEpOworCisJbXV0ZXhfdW5sb2NrKCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQgLSBpbnNlcnQgcG9ydCB0byB0aGUgbGlzdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBoYW5kbGUgb2YgYXR0YWNoZWQgZGV2aWNlCisgKiBAcGFyZW50X2hhbmRsZTogcGFyZW50IGhhbmRsZShlaXRoZXIgaGJhIG9yIGV4cGFuZGVyKQorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zYXNfbm9kZV9sb2NrLgorICoKKyAqIEFkZGluZyBuZXcgcG9ydCBvYmplY3QgdG8gdGhlIHNhc19ub2RlLT5zYXNfcG9ydF9saXN0LgorICoKKyAqIFJldHVybnMgbXB0MnNhc19wb3J0LgorICovCitzdHJ1Y3QgX3Nhc19wb3J0ICoKK21wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwKKyAgICB1MTYgcGFyZW50X2hhbmRsZSkKK3sKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5LCAqbmV4dDsKKwlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfbm9kZTsKKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHk7CisJaW50IGk7CisJc3RydWN0IHNhc19wb3J0ICpwb3J0OworCisJaWYgKCFwYXJlbnRfaGFuZGxlKQorCQlyZXR1cm4gTlVMTDsKKworCW1wdDJzYXNfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfc2FzX3BvcnQpLAorCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1wdDJzYXNfcG9ydCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJm1wdDJzYXNfcG9ydC0+cG9ydF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbXB0MnNhc19wb3J0LT5waHlfbGlzdCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCXNhc19ub2RlID0gX3RyYW5zcG9ydF9zYXNfbm9kZV9maW5kX2J5X2hhbmRsZShpb2MsIHBhcmVudF9oYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCisJaWYgKCFzYXNfbm9kZSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogQ291bGQgbm90IGZpbmQgcGFyZW50KDB4JTA0eCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcGFyZW50X2hhbmRsZSk7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJbXB0MnNhc19wb3J0LT5oYW5kbGUgPSBwYXJlbnRfaGFuZGxlOworCW1wdDJzYXNfcG9ydC0+c2FzX2FkZHJlc3MgPSBzYXNfbm9kZS0+c2FzX2FkZHJlc3M7CisJaWYgKChfdHJhbnNwb3J0X3NldF9pZGVudGlmeShpb2MsIGhhbmRsZSwKKwkgICAgJm1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19QSFlfVU5VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzYXNfbm9kZS0+bnVtX3BoeXM7IGkrKykgeworCQlpZiAoc2FzX25vZGUtPnBoeVtpXS5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MgIT0KKwkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKQorCQkJY29udGludWU7CisJCWxpc3RfYWRkX3RhaWwoJnNhc19ub2RlLT5waHlbaV0ucG9ydF9zaWJsaW5ncywKKwkJICAgICZtcHQyc2FzX3BvcnQtPnBoeV9saXN0KTsKKwkJbXB0MnNhc19wb3J0LT5udW1fcGh5cysrOworCX0KKworCWlmICghbXB0MnNhc19wb3J0LT5udW1fcGh5cykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlwb3J0ID0gc2FzX3BvcnRfYWxsb2NfbnVtKHNhc19ub2RlLT5wYXJlbnRfZGV2KTsKKwlpZiAoKHNhc19wb3J0X2FkZChwb3J0KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BoeSwgJm1wdDJzYXNfcG9ydC0+cGh5X2xpc3QsCisJICAgIHBvcnRfc2libGluZ3MpIHsKKwkJaWYgKChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVFJBTlNQT1JUKSkKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcG9ydC0+ZGV2LCAiYWRkOiBoYW5kbGUoMHglMDR4KSIKKwkJCSAgICAiLCBzYXNfYWRkcigweCUwMTZsbHgpLCBwaHkoJWQpXG4iLCBoYW5kbGUsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcywKKwkJCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkKTsKKwkJc2FzX3BvcnRfYWRkX3BoeShwb3J0LCBtcHQyc2FzX3BoeS0+cGh5KTsKKwl9CisKKwltcHQyc2FzX3BvcnQtPnBvcnQgPSBwb3J0OworCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PSBTQVNfRU5EX0RFVklDRSkKKwkJcnBoeSA9IHNhc19lbmRfZGV2aWNlX2FsbG9jKHBvcnQpOworCWVsc2UKKwkJcnBoeSA9IHNhc19leHBhbmRlcl9hbGxvYyhwb3J0LAorCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUpOworCisJcnBoeS0+aWRlbnRpZnkgPSBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeTsKKwlpZiAoKHNhc19ycGh5X2FkZChycGh5KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJfQorCWlmICgoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1RSQU5TUE9SVCkpCisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcnBoeS0+ZGV2LCAiYWRkOiBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgInNhc19hZGRyKDB4JTAxNmxseClcbiIsIGhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJbXB0MnNhc19wb3J0LT5ycGh5ID0gcnBoeTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbXB0MnNhc19wb3J0LT5wb3J0X2xpc3QsICZzYXNfbm9kZS0+c2FzX3BvcnRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisKKwkvKiBmaWxsIGluIHJlcG9ydCBtYW51ZmFjdHVyZSAqLworCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19FREdFX0VYUEFOREVSIHx8CisJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX0ZBTk9VVF9FWFBBTkRFUikKKwkJdHJhbnNwb3J0X2V4cGFuZGVyX3JlcG9ydF9tYW51ZmFjdHVyZShpb2MsCisJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcywKKwkJICAgIHJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHJwaHkpKTsKKworCXJldHVybiBtcHQyc2FzX3BvcnQ7CisKKyBvdXRfZmFpbDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXB0MnNhc19waHksIG5leHQsICZtcHQyc2FzX3BvcnQtPnBoeV9saXN0LAorCSAgICBwb3J0X3NpYmxpbmdzKQorCQlsaXN0X2RlbCgmbXB0MnNhc19waHktPnBvcnRfc2libGluZ3MpOworCWtmcmVlKG1wdDJzYXNfcG9ydCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUgLSByZW1vdmUgcG9ydCBmcm9tIHRoZSBsaXN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3Mgb2YgYXR0YWNoZWQgZGV2aWNlCisgKiBAcGFyZW50X2hhbmRsZTogaGFuZGxlIHRvIHRoZSB1cHN0cmVhbSBwYXJlbnQoZWl0aGVyIGhiYSBvciBleHBhbmRlcikKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2FzX25vZGVfbG9jay4KKyAqCisgKiBSZW1vdmluZyBvYmplY3QgYW5kIGZyZWVpbmcgYXNzb2NpYXRlZCBtZW1vcnkgZnJvbSB0aGUKKyAqIGlvYy0+c2FzX3BvcnRfbGlzdC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MsCisgICAgdTE2IHBhcmVudF9oYW5kbGUpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQsICpuZXh0OworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19ub2RlOworCXU4IGZvdW5kID0gMDsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5LCAqbmV4dF9waHk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc2FzX25vZGUgPSBfdHJhbnNwb3J0X3Nhc19ub2RlX2ZpbmRfYnlfaGFuZGxlKGlvYywgcGFyZW50X2hhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJaWYgKCFzYXNfbm9kZSkKKwkJcmV0dXJuOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcHQyc2FzX3BvcnQsIG5leHQsICZzYXNfbm9kZS0+c2FzX3BvcnRfbGlzdCwKKwkgICAgcG9ydF9saXN0KSB7CisJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyAhPSBzYXNfYWRkcmVzcykKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IDE7CisJCWxpc3RfZGVsKCZtcHQyc2FzX3BvcnQtPnBvcnRfbGlzdCk7CisJCWdvdG8gb3V0OworCX0KKyBvdXQ6CisJaWYgKCFmb3VuZCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHNhc19ub2RlLT5udW1fcGh5czsgaSsrKSB7CisJCWlmIChzYXNfbm9kZS0+cGh5W2ldLnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcykKKwkJCW1lbXNldCgmc2FzX25vZGUtPnBoeVtpXS5yZW1vdGVfaWRlbnRpZnksIDAgLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2FzX2lkZW50aWZ5KSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wdDJzYXNfcGh5LCBuZXh0X3BoeSwKKwkgICAgJm1wdDJzYXNfcG9ydC0+cGh5X2xpc3QsIHBvcnRfc2libGluZ3MpIHsKKwkJaWYgKChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVFJBTlNQT1JUKSkKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmbXB0MnNhc19wb3J0LT5wb3J0LT5kZXYsCisJCQkgICAgInJlbW92ZTogcGFyZW50X2hhbmRsZSgweCUwNHgpLCAiCisJCQkgICAgInNhc19hZGRyKDB4JTAxNmxseCksIHBoeSglZClcbiIsIHBhcmVudF9oYW5kbGUsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcywKKwkJCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkKTsKKwkJc2FzX3BvcnRfZGVsZXRlX3BoeShtcHQyc2FzX3BvcnQtPnBvcnQsIG1wdDJzYXNfcGh5LT5waHkpOworCQlsaXN0X2RlbCgmbXB0MnNhc19waHktPnBvcnRfc2libGluZ3MpOworCX0KKwlzYXNfcG9ydF9kZWxldGUobXB0MnNhc19wb3J0LT5wb3J0KTsKKwlrZnJlZShtcHQyc2FzX3BvcnQpOworfQorCisvKioKKyAqIG1wdDJzYXNfdHJhbnNwb3J0X2FkZF9ob3N0X3BoeSAtIHJlcG9ydCBzYXNfaG9zdCBwaHkgdG8gdHJhbnNwb3J0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcHQyc2FzX3BoeTogbXB0MnNhcyBwZXIgcGh5IG9iamVjdAorICogQHBoeV9wZzA6IHNhcyBwaHkgcGFnZSAwCisgKiBAcGFyZW50X2RldjogcGFyZW50IGRldmljZSBjbGFzcyBvYmplY3QKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfdHJhbnNwb3J0X2FkZF9ob3N0X3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBfc2FzX3BoeQorICAgICptcHQyc2FzX3BoeSwgTXBpMlNhc1BoeVBhZ2UwX3QgcGh5X3BnMCwgc3RydWN0IGRldmljZSAqcGFyZW50X2RldikKK3sKKwlzdHJ1Y3Qgc2FzX3BoeSAqcGh5OworCWludCBwaHlfaW5kZXggPSBtcHQyc2FzX3BoeS0+cGh5X2lkOworCisKKwlJTklUX0xJU1RfSEVBRCgmbXB0MnNhc19waHktPnBvcnRfc2libGluZ3MpOworCXBoeSA9IHNhc19waHlfYWxsb2MocGFyZW50X2RldiwgcGh5X2luZGV4KTsKKwlpZiAoIXBoeSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoKF90cmFuc3BvcnRfc2V0X2lkZW50aWZ5KGlvYywgbXB0MnNhc19waHktPmhhbmRsZSwKKwkgICAgJm1wdDJzYXNfcGh5LT5pZGVudGlmeSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCXBoeS0+aWRlbnRpZnkgPSBtcHQyc2FzX3BoeS0+aWRlbnRpZnk7CisJbXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSA9IGxlMTZfdG9fY3B1KHBoeV9wZzAuQXR0YWNoZWREZXZIYW5kbGUpOworCWlmIChtcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlKQorCQlfdHJhbnNwb3J0X3NldF9pZGVudGlmeShpb2MsIG1wdDJzYXNfcGh5LT5hdHRhY2hlZF9oYW5kbGUsCisJCSAgICAmbXB0MnNhc19waHktPnJlbW90ZV9pZGVudGlmeSk7CisJcGh5LT5pZGVudGlmeS5waHlfaWRlbnRpZmllciA9IG1wdDJzYXNfcGh5LT5waHlfaWQ7CisJcGh5LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIHBoeV9wZzAuTmVnb3RpYXRlZExpbmtSYXRlICYgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9NQVNLX1BIWVNJQ0FMKTsKKwlwaHktPm1pbmltdW1fbGlua3JhdGVfaHcgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkgICAgcGh5X3BnMC5Id0xpbmtSYXRlICYgTVBJMl9TQVNfSFdSQVRFX01JTl9SQVRFX01BU0spOworCXBoeS0+bWF4aW11bV9saW5rcmF0ZV9odyA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBwaHlfcGcwLkh3TGlua1JhdGUgPj4gNCk7CisJcGh5LT5taW5pbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIHBoeV9wZzAuUHJvZ3JhbW1lZExpbmtSYXRlICYgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfTUFTSyk7CisJcGh5LT5tYXhpbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIHBoeV9wZzAuUHJvZ3JhbW1lZExpbmtSYXRlID4+IDQpOworCisJaWYgKChzYXNfcGh5X2FkZChwaHkpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJc2FzX3BoeV9mcmVlKHBoeSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVFJBTlNQT1JUKSkKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwaHktPmRldiwKKwkJICAgICJhZGQ6IGhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpXG4iCisJCSAgICAiXHRhdHRhY2hlZF9oYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwKKwkJICAgIG1wdDJzYXNfcGh5LT5oYW5kbGUsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgICBtcHQyc2FzX3BoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCSAgICBtcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgIG1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCW1wdDJzYXNfcGh5LT5waHkgPSBwaHk7CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBtcHQyc2FzX3RyYW5zcG9ydF9hZGRfZXhwYW5kZXJfcGh5IC0gcmVwb3J0IGV4cGFuZGVyIHBoeSB0byB0cmFuc3BvcnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1wdDJzYXNfcGh5OiBtcHQyc2FzIHBlciBwaHkgb2JqZWN0CisgKiBAZXhwYW5kZXJfcGcxOiBleHBhbmRlciBwYWdlIDEKKyAqIEBwYXJlbnRfZGV2OiBwYXJlbnQgZGV2aWNlIGNsYXNzIG9iamVjdAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc190cmFuc3BvcnRfYWRkX2V4cGFuZGVyX3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBfc2FzX3BoeQorICAgICptcHQyc2FzX3BoeSwgTXBpMkV4cGFuZGVyUGFnZTFfdCBleHBhbmRlcl9wZzEsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYpCit7CisJc3RydWN0IHNhc19waHkgKnBoeTsKKwlpbnQgcGh5X2luZGV4ID0gbXB0MnNhc19waHktPnBoeV9pZDsKKworCUlOSVRfTElTVF9IRUFEKCZtcHQyc2FzX3BoeS0+cG9ydF9zaWJsaW5ncyk7CisJcGh5ID0gc2FzX3BoeV9hbGxvYyhwYXJlbnRfZGV2LCBwaHlfaW5kZXgpOworCWlmICghcGh5KSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCWlmICgoX3RyYW5zcG9ydF9zZXRfaWRlbnRpZnkoaW9jLCBtcHQyc2FzX3BoeS0+aGFuZGxlLAorCSAgICAmbXB0MnNhc19waHktPmlkZW50aWZ5KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisJcGh5LT5pZGVudGlmeSA9IG1wdDJzYXNfcGh5LT5pZGVudGlmeTsKKwltcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlID0KKwkgICAgbGUxNl90b19jcHUoZXhwYW5kZXJfcGcxLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwlpZiAobXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSkKKwkJX3RyYW5zcG9ydF9zZXRfaWRlbnRpZnkoaW9jLCBtcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlLAorCQkgICAgJm1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnkpOworCXBoeS0+aWRlbnRpZnkucGh5X2lkZW50aWZpZXIgPSBtcHQyc2FzX3BoeS0+cGh5X2lkOworCXBoeS0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBleHBhbmRlcl9wZzEuTmVnb3RpYXRlZExpbmtSYXRlICYKKwkgICAgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9NQVNLX1BIWVNJQ0FMKTsKKwlwaHktPm1pbmltdW1fbGlua3JhdGVfaHcgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkgICAgZXhwYW5kZXJfcGcxLkh3TGlua1JhdGUgJiBNUEkyX1NBU19IV1JBVEVfTUlOX1JBVEVfTUFTSyk7CisJcGh5LT5tYXhpbXVtX2xpbmtyYXRlX2h3ID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIGV4cGFuZGVyX3BnMS5Id0xpbmtSYXRlID4+IDQpOworCXBoeS0+bWluaW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBleHBhbmRlcl9wZzEuUHJvZ3JhbW1lZExpbmtSYXRlICYgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfTUFTSyk7CisJcGh5LT5tYXhpbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIGV4cGFuZGVyX3BnMS5Qcm9ncmFtbWVkTGlua1JhdGUgPj4gNCk7CisKKwlpZiAoKHNhc19waHlfYWRkKHBoeSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlzYXNfcGh5X2ZyZWUocGh5KTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UUkFOU1BPUlQpKQorCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBoeS0+ZGV2LAorCQkgICAgImFkZDogaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseClcbiIKKwkJICAgICJcdGF0dGFjaGVkX2hhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpXG4iLAorCQkgICAgbXB0MnNhc19waHktPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgIG1wdDJzYXNfcGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcywKKwkJICAgIG1wdDJzYXNfcGh5LT5hdHRhY2hlZF9oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICAgbXB0MnNhc19waHktPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJbXB0MnNhc19waHktPnBoeSA9IHBoeTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlIC0gcmVmcmVzaGluZyBwaHkgbGluayBjaGFuZ2VzIGFuZCBhdHRhY2hlZCBkZXZpY2VzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGhhbmRsZSB0byBzYXNfaG9zdCBvciBleHBhbmRlcgorICogQGF0dGFjaGVkX2hhbmRsZTogYXR0YWNoZWQgZGV2aWNlIGhhbmRsZQorICogQHBoeV9udW1iZXJ2OiBwaHkgbnVtYmVyCisgKiBAbGlua19yYXRlOiBuZXcgbGluayByYXRlCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1MTYgaGFuZGxlLCB1MTYgYXR0YWNoZWRfaGFuZGxlLCB1OCBwaHlfbnVtYmVyLCB1OCBsaW5rX3JhdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfbm9kZTsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCXNhc19ub2RlID0gX3RyYW5zcG9ydF9zYXNfbm9kZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJaWYgKCFzYXNfbm9kZSkKKwkJcmV0dXJuOworCisJbXB0MnNhc19waHkgPSAmc2FzX25vZGUtPnBoeVtwaHlfbnVtYmVyXTsKKwltcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlID0gYXR0YWNoZWRfaGFuZGxlOworCWlmIChhdHRhY2hlZF9oYW5kbGUgJiYgKGxpbmtfcmF0ZSA+PSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSkpCisJCV90cmFuc3BvcnRfc2V0X2lkZW50aWZ5KGlvYywgbXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSwKKwkJICAgICZtcHQyc2FzX3BoeS0+cmVtb3RlX2lkZW50aWZ5KTsKKwllbHNlCisJCW1lbXNldCgmbXB0MnNhc19waHktPnJlbW90ZV9pZGVudGlmeSwgMCAsIHNpemVvZihzdHJ1Y3QKKwkJICAgIHNhc19pZGVudGlmeSkpOworCisJaWYgKG1wdDJzYXNfcGh5LT5waHkpCisJCW1wdDJzYXNfcGh5LT5waHktPm5lZ290aWF0ZWRfbGlua3JhdGUgPQorCQkgICAgX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUobGlua19yYXRlKTsKKworCWlmICgoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1RSQU5TUE9SVCkpCisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmbXB0MnNhc19waHktPnBoeS0+ZGV2LAorCQkgICAgInJlZnJlc2g6IGhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLFxuIgorCQkgICAgIlx0bGlua19yYXRlKDB4JTAyeCksIHBoeSglZClcbiIKKwkJICAgICJcdGF0dGFjaGVkX2hhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpXG4iLAorCQkgICAgaGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICAgbXB0MnNhc19waHktPmlkZW50aWZ5LnNhc19hZGRyZXNzLCBsaW5rX3JhdGUsCisJCSAgICBwaHlfbnVtYmVyLCBhdHRhY2hlZF9oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICAgbXB0MnNhc19waHktPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitwaHlfdG9faW9jKHN0cnVjdCBzYXNfcGh5ICpwaHkpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QocGh5LT5kZXYucGFyZW50KTsKKwlyZXR1cm4gc2hvc3RfcHJpdihzaG9zdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitycGh5X3RvX2lvYyhzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QocnBoeS0+ZGV2LnBhcmVudC0+cGFyZW50KTsKKwlyZXR1cm4gc2hvc3RfcHJpdihzaG9zdCk7Cit9CisKKy8qKgorICogdHJhbnNwb3J0X2dldF9saW5rZXJyb3JzIC0KKyAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAorICoKKyAqIE9ubHkgc3VwcG9ydCBzYXNfaG9zdCBkaXJlY3QgYXR0YWNoZWQgcGh5cy4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50Cit0cmFuc3BvcnRfZ2V0X2xpbmtlcnJvcnMoc3RydWN0IHNhc19waHkgKnBoeSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc1BoeVBhZ2UxX3QgcGh5X3BnMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDAsIG1wdDJzYXNfcGh5ID0gTlVMTDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cyAmJgorCSAgICAhbXB0MnNhc19waHk7IGkrKykgeworCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHkgIT0gcGh5KQorCQkJY29udGludWU7CisJCW1wdDJzYXNfcGh5ID0gJmlvYy0+c2FzX2hiYS5waHlbaV07CisJfQorCisJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMShpb2MsICZtcGlfcmVwbHksICZwaHlfcGcxLAorCQkgICAgbXB0MnNhc19waHktPnBoeV9pZCkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChtcGlfcmVwbHkuSU9DU3RhdHVzIHx8IG1waV9yZXBseS5JT0NMb2dJbmZvKQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicGh5KCVkKSwgaW9jX3N0YXR1cyIKKwkJICAgICIoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkLAorCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHkuSU9DTG9nSW5mbykpOworCisJcGh5LT5pbnZhbGlkX2R3b3JkX2NvdW50ID0gbGUzMl90b19jcHUocGh5X3BnMS5JbnZhbGlkRHdvcmRDb3VudCk7CisJcGh5LT5ydW5uaW5nX2Rpc3Bhcml0eV9lcnJvcl9jb3VudCA9CisJICAgIGxlMzJfdG9fY3B1KHBoeV9wZzEuUnVubmluZ0Rpc3Bhcml0eUVycm9yQ291bnQpOworCXBoeS0+bG9zc19vZl9kd29yZF9zeW5jX2NvdW50ID0KKwkgICAgbGUzMl90b19jcHUocGh5X3BnMS5Mb3NzRHdvcmRTeW5jaENvdW50KTsKKwlwaHktPnBoeV9yZXNldF9wcm9ibGVtX2NvdW50ID0KKwkgICAgbGUzMl90b19jcHUocGh5X3BnMS5QaHlSZXNldFByb2JsZW1Db3VudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdHJhbnNwb3J0X2dldF9lbmNsb3N1cmVfaWRlbnRpZmllciAtCisgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKKyAqCisgKiBPYnRhaW4gdGhlIGVuY2xvc3VyZSBsb2dpY2FsIGlkIGZvciBhbiBleHBhbmRlci4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK3RyYW5zcG9ydF9nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIoc3RydWN0IHNhc19ycGh5ICpycGh5LCB1NjQgKmlkZW50aWZpZXIpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcnBoeV90b19pb2MocnBoeSk7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICAgcnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCisJaWYgKCFzYXNfZXhwYW5kZXIpCisJCXJldHVybiAtRU5YSU87CisKKwkqaWRlbnRpZmllciA9IHNhc19leHBhbmRlci0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdHJhbnNwb3J0X2dldF9iYXlfaWRlbnRpZmllciAtCisgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKKyAqCisgKiBSZXR1cm5zIHRoZSBzbG90IGlkIGZvciBhIGRldmljZSB0aGF0IHJlc2lkZXMgaW5zaWRlIGFuIGVuY2xvc3VyZS4KKyAqLworc3RhdGljIGludAordHJhbnNwb3J0X2dldF9iYXlfaWRlbnRpZmllcihzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcnBoeV90b19pb2MocnBoeSk7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCSAgICBycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmICghc2FzX2RldmljZSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXJldHVybiBzYXNfZGV2aWNlLT5zbG90OworfQorCisvKioKKyAqIHRyYW5zcG9ydF9waHlfcmVzZXQgLQorICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKiBAaGFyZF9yZXNldDoKKyAqCisgKiBPbmx5IHN1cHBvcnQgc2FzX2hvc3QgZGlyZWN0IGF0dGFjaGVkIHBoeXMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50Cit0cmFuc3BvcnRfcGh5X3Jlc2V0KHN0cnVjdCBzYXNfcGh5ICpwaHksIGludCBoYXJkX3Jlc2V0KQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHBoeV90b19pb2MocGh5KTsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OworCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCBtcHQyc2FzX3BoeSA9IE5VTEw7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgJiYKKwkgICAgIW1wdDJzYXNfcGh5OyBpKyspIHsKKwkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ICE9IHBoeSkKKwkJCWNvbnRpbnVlOworCQltcHQyc2FzX3BoeSA9ICZpb2MtPnNhc19oYmEucGh5W2ldOworCX0KKworCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDsKKwltcGlfcmVxdWVzdC5PcGVyYXRpb24gPSBoYXJkX3Jlc2V0ID8KKwkgICAgTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgOiBNUEkyX1NBU19PUF9QSFlfTElOS19SRVNFVDsKKwltcGlfcmVxdWVzdC5QaHlOdW0gPSBtcHQyc2FzX3BoeS0+cGh5X2lkOworCisJaWYgKChtcHQyc2FzX2Jhc2Vfc2FzX2lvdW5pdF9jb250cm9sKGlvYywgJm1waV9yZXBseSwgJm1waV9yZXF1ZXN0KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaWYgKG1waV9yZXBseS5JT0NTdGF0dXMgfHwgbXBpX3JlcGx5LklPQ0xvZ0luZm8pCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwaHkoJWQpLCBpb2Nfc3RhdHVzIgorCQkgICAgIigweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwKKwkJICAgIG1wdDJzYXNfcGh5LT5waHlfaWQsCisJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS5JT0NMb2dJbmZvKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0cmFuc3BvcnRfc21wX2hhbmRsZXIgLSB0cmFuc3BvcnQgcG9ydGFsIGZvciBzbXAgcGFzc3RocnUKKyAqIEBzaG9zdDogc2hvc3Qgb2JqZWN0CisgKiBAcnBoeTogc2FzIHRyYW5zcG9ydCBycGh5IG9iamVjdAorICogQHJlcToKKyAqCisgKiBUaGlzIHVzZWQgcHJpbWFyaWx5IGZvciBzbXBfdXRpbHMuCisgKiBFeGFtcGxlOgorICogICAgICAgICAgIHNtcF9yZXBfZ2VuZXJhbCAvc3lzL2NsYXNzL2JzZy9leHBhbmRlci01OjAKKyAqLworc3RhdGljIGludAordHJhbnNwb3J0X3NtcF9oYW5kbGVyKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHksCisgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCU1waTJTbXBQYXNzdGhyb3VnaFJlcGx5X3QgKm1waV9yZXBseTsKKwlpbnQgcmM7CisJdTE2IHNtaWQ7CisJdTMyIGlvY19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXZvaWQgKnBzZ2U7CisJdTMyIHNnbF9mbGFnczsKKwl1OCBpc3N1ZV9yZXNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbWFfYWRkcl90IGRtYV9hZGRyX2luID0gMDsKKwlkbWFfYWRkcl90IGRtYV9hZGRyX291dCA9IDA7CisJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisJc3RydWN0IHJlcXVlc3QgKnJzcCA9IHJlcS0+bmV4dF9ycTsKKworCWlmICghcnNwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aGUgc21wIHJlc3BvbnNlIHNwYWNlIGlzICIKKwkJICAgICJtaXNzaW5nXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIHNlZ21lbnRzPyAqLworCWlmIChyZXEtPmJpby0+YmlfdmNudCA+IDEgfHwgcnNwLT5iaW8tPmJpX3ZjbnQgPiAxKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBtdWx0aXBsZSBzZWdtZW50cyByZXEgJXUgJXUsICIKKwkJICAgICJyc3AgJXUgJXVcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIHJlcS0+YmlvLT5iaV92Y250LAorCQkgICAgcmVxLT5kYXRhX2xlbiwgcnNwLT5iaW8tPmJpX3ZjbnQsIHJzcC0+ZGF0YV9sZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCXJjID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdHJhbnNwb3J0X2NtZHMgaW4gdXNlXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKworCXdhaXRfc3RhdGVfY291bnQgPSAwOworCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwl3aGlsZSAoaW9jX3N0YXRlICE9IE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCWlmICh3YWl0X3N0YXRlX2NvdW50KysgPT0gMTApIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQKKwkJCSAgICAiJXM6IGZhaWxlZCBkdWUgdG8gaW9jIG5vdCBvcGVyYXRpb25hbFxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJCXJjID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNzbGVlcCgxKTsKKwkJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHdhaXRpbmcgZm9yICIKKwkJICAgICJvcGVyYXRpb25hbCBzdGF0ZShjb3VudD0lZClcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fLCB3YWl0X3N0YXRlX2NvdW50KTsKKwl9CisJaWYgKHdhaXRfc3RhdGVfY291bnQpCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaW9jIGlzIG9wZXJhdGlvbmFsXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT50cmFuc3BvcnRfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnNtaWQgPSBzbWlkOworCisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g7CisJbXBpX3JlcXVlc3QtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJKigodTY0ICopJm1waV9yZXF1ZXN0LT5TQVNBZGRyZXNzKSA9IChycGh5KSA/CisJICAgIGNwdV90b19sZTY0KHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKSA6CisJICAgIGNwdV90b19sZTY0KGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcyk7CisJbXBpX3JlcXVlc3QtPlJlcXVlc3REYXRhTGVuZ3RoID0gY3B1X3RvX2xlMTYocmVxLT5kYXRhX2xlbiAtIDQpOworCXBzZ2UgPSAmbXBpX3JlcXVlc3QtPlNHTDsKKworCS8qIFdSSVRFIHNnZWwgZmlyc3QgKi8KKwlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwgTVBJMl9TR0VfRkxBR1NfSE9TVF9UT19JT0MpOworCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwlkbWFfYWRkcl9vdXQgPSBwY2lfbWFwX3NpbmdsZShpb2MtPnBkZXYsIGJpb19kYXRhKHJlcS0+YmlvKSwKKwkgICAgICByZXEtPmRhdGFfbGVuLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICghZG1hX2FkZHJfb3V0KSB7CisJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBsZTE2X3RvX2NwdShzbWlkKSk7CisJCWdvdG8gdW5tYXA7CisJfQorCisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwgKHJlcS0+ZGF0YV9sZW4gLSA0KSwKKwkgICAgZG1hX2FkZHJfb3V0KTsKKworCS8qIGluY3Igc2dlbCAqLworCXBzZ2UgKz0gaW9jLT5zZ2Vfc2l6ZTsKKworCS8qIFJFQUQgc2dlbCBsYXN0ICovCisJc2dsX2ZsYWdzID0gKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUKTsKKwlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJZG1hX2FkZHJfaW4gPSAgcGNpX21hcF9zaW5nbGUoaW9jLT5wZGV2LCBiaW9fZGF0YShyc3AtPmJpbyksCisJICAgICAgcnNwLT5kYXRhX2xlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAoIWRtYV9hZGRyX2luKSB7CisJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBsZTE2X3RvX2NwdShzbWlkKSk7CisJCWdvdG8gdW5tYXA7CisJfQorCisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwgKHJzcC0+ZGF0YV9sZW4gKyA0KSwKKwkgICAgZG1hX2FkZHJfaW4pOworCisJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXMgLSAiCisJICAgICJzZW5kaW5nIHNtcCByZXF1ZXN0XG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIDAgLyogVkZfSUQgKi8pOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUsCisJICAgIDEwKkhaKTsKKworCWlmICghKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzIDogdGltZW91dFxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpLzQpOworCQlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzIC0gIgorCSAgICAiY29tcGxldGVcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKworCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKSB7CisKKwkJbXBpX3JlcGx5ID0gaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseTsKKworCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCSAgICAiJXMgLSByZXBseSBkYXRhIHRyYW5zZmVyIHNpemUoJWQpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+UmVzcG9uc2VEYXRhTGVuZ3RoKSkpOworCisJCW1lbWNweShyZXEtPnNlbnNlLCBtcGlfcmVwbHksIHNpemVvZigqbXBpX3JlcGx5KSk7CisJCXJlcS0+c2Vuc2VfbGVuID0gc2l6ZW9mKCptcGlfcmVwbHkpOworCQlyZXEtPmRhdGFfbGVuID0gMDsKKwkJcnNwLT5kYXRhX2xlbiAtPSBtcGlfcmVwbHktPlJlc3BvbnNlRGF0YUxlbmd0aDsKKworCX0gZWxzZSB7CisJCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJICAgICIlcyAtIG5vIHJlcGx5XG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCXJjID0gLUVOWElPOworCX0KKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KSB7CisJCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwkJcmMgPSAtRVRJTUVET1VUOworCX0KKworIHVubWFwOgorCWlmIChkbWFfYWRkcl9vdXQpCisJCXBjaV91bm1hcF9zaW5nbGUoaW9jLT5wZGV2LCBkbWFfYWRkcl9vdXQsIHJlcS0+ZGF0YV9sZW4sCisJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChkbWFfYWRkcl9pbikKKwkJcGNpX3VubWFwX3NpbmdsZShpb2MtPnBkZXYsIGRtYV9hZGRyX2luLCByc3AtPmRhdGFfbGVuLAorCQkgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworIG91dDoKKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X3VubG9jaygmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7CisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKKwkuZ2V0X2xpbmtlcnJvcnMJCT0gdHJhbnNwb3J0X2dldF9saW5rZXJyb3JzLAorCS5nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIgPSB0cmFuc3BvcnRfZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyLAorCS5nZXRfYmF5X2lkZW50aWZpZXIJPSB0cmFuc3BvcnRfZ2V0X2JheV9pZGVudGlmaWVyLAorCS5waHlfcmVzZXQJCT0gdHJhbnNwb3J0X3BoeV9yZXNldCwKKwkuc21wX2hhbmRsZXIJCT0gdHJhbnNwb3J0X3NtcF9oYW5kbGVyLAorfTsKKworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICptcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYwppbmRleCBiMjY0YjQ5Li5iNWZiZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXZtZTE2eF9zY3NpX2RldmljZTsKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQKLW12bWUxNnhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXZtZTE2eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqIGhvc3QgPSBOVUxMOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CkBAIC02NCw3ICs2NCw4IEBACiAJaG9zdGRhdGEtPmN0ZXN0N19leHRyYSA9IENURVNUN19UVDE7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJm12bWUxNnhfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLCBkZXYpOworCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmbXZtZTE2eF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgIm12bWUxNngtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTg4LDcgKzg5LDcgQEAKIAkJb3V0X2JlMzIoMHhmZmY0MjAyYywgdik7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtMTAyLDkgKzEwMyw5IEBACiB9CiAKIHN0YXRpYyBfX2RldmV4aXQgaW50Ci1tdm1lMTZ4X2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorbXZtZTE2eF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAkvKiBEaXNhYmxlIHNjc2kgY2hpcCBpbnRzICovCkBAIC0xMjMsMjUgKzEyNCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXZtZTE2eF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJtdm1lMTZ4LXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gbXZtZTE2eF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobXZtZTE2eF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bWUxNnhfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIm12bWUxNngtc2NzaSIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgICAgICAgID0gbXZtZTE2eF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChtdm1lMTZ4X2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXZtZTE2eF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAltdm1lMTZ4X3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibXZtZTE2eC1zY3NpIiwKIAkJCQkJCQkgICAgICAtMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihtdm1lMTZ4X3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIobXZtZTE2eF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xNTEsNyArMTU0LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtdm1lMTZ4X3Njc2lfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG12bWUxNnhfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12bWUxNnhfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc2QvS2J1aWxkIGIvZHJpdmVycy9zY3NpL29zZC9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyMDdhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9vc2QvS2J1aWxkCkBAIC0wLDAgKzEsNDUgQEAKKyMKKyMgS2J1aWxkIGZvciB0aGUgT1NEIG1vZHVsZXMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgQXV0aG9yczoKKyMgICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorIyAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKworaWZuZXEgKCQoT1NEX0lOQyksKQorIyB3ZSBhcmUgYnVpbHQgb3V0LW9mLXRyZWUgS2NvbmZpZ3VyZSBldmVyeXRoaW5nIGFzIG9uCisKK0NPTkZJR19TQ1NJX09TRF9JTklUSUFUT1I9bQorY2NmbGFncy15ICs9IC1EQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiAtRENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1JfTU9EVUxFCisKK0NPTkZJR19TQ1NJX09TRF9VTEQ9bQorY2NmbGFncy15ICs9IC1EQ09ORklHX1NDU0lfT1NEX1VMRCAtRENPTkZJR19TQ1NJX09TRF9VTERfTU9EVUxFCisKKyMgQ09ORklHX1NDU0lfT1NEX0RQUklOVF9TRU5TRSA9CisjCTAgLSBubyBwcmludCBvZiBlcnJvcnMKKyMJMSAtIHByaW50IGVycm9ycworIwkyIC0gZXJyb3JzICsgd2Fycm5pbmdzCitjY2ZsYWdzLXkgKz0gLURDT05GSUdfU0NTSV9PU0RfRFBSSU5UX1NFTlNFPTEKKworIyBVbmNvbW1lbnQgdG8gdHVybiBkZWJ1ZyBvbgorIyBjY2ZsYWdzLXkgKz0gLURDT05GSUdfU0NTSV9PU0RfREVCVUcKKworIyBpZiB3ZSBhcmUgYnVpbHQgb3V0LW9mLXRyZWUgYW5kIHRoZSBob3N0aW5nIGtlcm5lbCBoYXMgT1NEIGhlYWRlcnMKKyMgdGhlbiAiY2NmbGFncy15ICs9IiB3aWxsIG5vdCBwaWNrIHRoZSBvdXQtb2ZmLXRyZWUgaGVhZGVycy4gT25seSBieSBkb2luZworIyB0aGlzIGl0IHdpbGwgd29yay4gVGhpcyBtaWdodCBicmVhayBpbiBmdXR1cmUga2VybmVscworTElOVVhJTkNMVURFIDo9IC1JJChPU0RfSU5DKSAkKExJTlVYSU5DTFVERSkKKworZW5kaWYKKworIyBsaWJvc2Qua28gLSBvc2QtaW5pdGlhdG9yIGxpYnJhcnkKK2xpYm9zZC15IDo9IG9zZF9pbml0aWF0b3Iubworb2JqLSQoQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUikgKz0gbGlib3NkLm8KKworIyBvc2Qua28gLSBTQ1NJIFVMRCBhbmQgY2hhci1kZXZpY2UKK29zZC15IDo9IG9zZF91bGQubworb2JqLSQoQ09ORklHX1NDU0lfT1NEX1VMRCkgKz0gb3NkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc2QvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9vc2QvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjFiNWNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL29zZC9LY29uZmlnCkBAIC0wLDAgKzEsNTMgQEAKKyMKKyMgS2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE9TRCBzY3NpIHByb3RvY29sCisjCisjIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIEF1dGhvcnM6CisjICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyMgICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIHZlcnNpb24gMiBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjCisjIEZJWE1FOiBTQ1NJX09TRF9JTklUSUFUT1Igc2hvdWxkIHNlbGVjdCBDT05GSUcgKEhNQUMpIFNIQTEgc29tZWhvdy4KKyMgICAgICAgIEhvdyBpcyBpdCBkb25lIHByb3Blcmx5PworIworCitjb25maWcgU0NTSV9PU0RfSU5JVElBVE9SCisJdHJpc3RhdGUgIk9TRC1Jbml0aWF0b3IgbGlicmFyeSIKKwlkZXBlbmRzIG9uIFNDU0kKKwloZWxwCisJCUVuYWJsZSB0aGUgT1NELUluaXRpYXRvciBsaWJyYXJ5IChsaWJvc2Qua28pLgorCQlOT1RFOiBZb3UgbXVzdCBhbHNvIHNlbGVjdCBDUllQVE9fU0hBMSArIENSWVBUT19ITUFDIGFuZCB0aGVpcgorCQlkZXBlbmRlbmNpZXMKKworY29uZmlnIFNDU0lfT1NEX1VMRAorCXRyaXN0YXRlICJPU0QgVXBwZXIgTGV2ZWwgZHJpdmVyIgorCWRlcGVuZHMgb24gU0NTSV9PU0RfSU5JVElBVE9SCisJaGVscAorCQlCdWlsZCBhIFNDU0kgdXBwZXIgbGF5ZXIgZHJpdmVyIHRoYXQgZXhwb3J0cyAvZGV2L29zZFggZGV2aWNlcworCQl0byB1c2VyLW1vZGUgZm9yIHRlc3RpbmcgYW5kIGNvbnRyb2xsaW5nIE9TRCBkZXZpY2VzLiBJdCBpcyBhbHNvCisJCW5lZWRlZCBieSBleG9mcywgZm9yIG1vdW50aW5nIGFuIE9TRCBiYXNlZCBmaWxlIHN5c3RlbS4KKworY29uZmlnIFNDU0lfT1NEX0RQUklOVF9TRU5TRQorICAgIGludCAiKDAtMikgV2hlbiBzZW5zZSBpcyByZXR1cm5lZCwgREVCVUcgcHJpbnQgYWxsIHNlbnNlIGRlc2NyaXB0b3JzIgorICAgIGRlZmF1bHQgMQorICAgIGRlcGVuZHMgb24gU0NTSV9PU0RfSU5JVElBVE9SCisgICAgaGVscAorICAgICAgICBXaGVuIGEgQ0hFQ0tfQ09ORElUSU9OIHN0YXR1cyBpcyByZXR1cm5lZCBmcm9tIGEgdGFyZ2V0LCBhbmQgYQorICAgICAgICBzZW5zZS1idWZmZXIgaXMgcmV0cmlldmVkLCB0dXJuaW5nIHRoaXMgb24gd2lsbCBkdW1wIGEgZnVsbAorICAgICAgICBzZW5zZS1kZWNvZGluZyBtZXNzYWdlLiBTZXR0aW5nIHRvIDIgd2lsbCBhbHNvIHByaW50IHJlY292ZXJhYmxlCisgICAgICAgIGVycm9ycyB0aGF0IG1pZ2h0IGJlIHJlZ3VsYXJseSByZXR1cm5lZCBmb3Igc29tZSBmaWxlc3lzdGVtCisgICAgICAgIG9wZXJhdGlvbnMuCisKK2NvbmZpZyBTQ1NJX09TRF9ERUJVRworCWJvb2wgIkNvbXBpbGUgQWxsIE9TRCBtb2R1bGVzIHdpdGggbG90cyBvZiBERUJVRyBwcmludHMiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBTQ1NJX09TRF9JTklUSUFUT1IKKwloZWxwCisJCU9TRCBDb2RlIGlzIHBvcHVsYXRlZCB3aXRoIGxvdHMgb2YgT1NEX0RFQlVHKC4uKSBwcmludG91dHMgdG8KKwkJZG1lc2cuIEVuYWJsZSB0aGlzIGlmIHlvdSBmb3VuZCBhIGJ1ZyBhbmQgeW91IHdhbnQgdG8gaGVscCB1cworCQl0cmFjayB0aGUgcHJvYmxlbSAoc2VlIGFsc28gTUFJTlRBSU5FUlMpLiBTZXR0aW5nIHRoaXMgd2lsbCBhbHNvCisJCWZvcmNlIFNDU0lfT1NEX0RQUklOVF9TRU5TRT0yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zZC9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9vc2QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDkwNTM0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9vc2QvTWFrZWZpbGUKQEAgLTAsMCArMSwzNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIE9TRCBtb2R1bGVzIChvdXQgb2YgdHJlZSkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgQXV0aG9yczoKKyMgICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorIyAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgVGhpcyBNYWtlZmlsZSBpcyB1c2VkIHRvIGNhbGwgdGhlIGtlcm5lbCBNYWtlZmlsZSBpbiBjYXNlIG9mIGFuIG91dC1vZi10cmVlCisjIGJ1aWxkLgorIyAkS1NSQyBzaG91bGQgcG9pbnQgdG8gYSBLZXJuZWwgc291cmNlIHRyZWUgb3RoZXJ3aXNlIGhvc3QncyBkZWZhdWx0IGlzCisjIHVzZWQuIChlZy4gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvYnVpbGQpCisKKyMgaW5jbHVkZSBwYXRoIGZvciBvdXQtb2YtdHJlZSBIZWFkZXJzCitPU0RfSU5DID89IGBwd2RgLy4uLy4uLy4uL2luY2x1ZGUKKworIyBhbGxvdyB1c2VycyB0byBvdmVycmlkZSB0aGVzZQorIyBlLmcuIHRvIGNvbXBpbGUgZm9yIGEga2VybmVsIHRoYXQgeW91IGFyZW4ndCBjdXJyZW50bHkgcnVubmluZworS1NSQyA/PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvYnVpbGQKK0tCVUlMRF9PVVRQVVQgPz0KK0FSQ0ggPz0KK1YgPz0gMAorCisjIHRoaXMgaXMgdGhlIGJhc2ljIEtidWlsZCBvdXQtb2YtdHJlZSBpbnZvY2F0aW9uLCB3aXRoIHRoZSBNPSBvcHRpb24KK0tCVUlMRF9CQVNFID0gKyQoTUFLRSkgLUMgJChLU1JDKSBNPWBwd2RgIEtCVUlMRF9PVVRQVVQ9JChLQlVJTERfT1VUUFVUKSBBUkNIPSQoQVJDSCkgVj0kKFYpCisKK2FsbDogbGlib3NkCisKK2xpYm9zZDogOworCSQoS0JVSUxEX0JBU0UpIE9TRF9JTkM9JChPU0RfSU5DKSBtb2R1bGVzCisKK2NsZWFuOgorCSQoS0JVSUxEX0JBU0UpIGNsZWFuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL29zZF9kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzllNDkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfZGVidWcuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogb3NkX2RlYnVnLmggLSBTb21lIGtwcmludGYgbWFjcm9zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3JzOgorICogICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICogICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKgorICovCisjaWZuZGVmIF9fT1NEX0RFQlVHX0hfXworI2RlZmluZSBfX09TRF9ERUJVR19IX18KKworI2RlZmluZSBPU0RfRVJSKGZtdCwgYS4uLikgcHJpbnRrKEtFUk5fRVJSICJvc2Q6ICIgZm10LCAjI2EpCisjZGVmaW5lIE9TRF9JTkZPKGZtdCwgYS4uLikgcHJpbnRrKEtFUk5fTk9USUNFICJvc2Q6ICIgZm10LCAjI2EpCisKKyNpZmRlZiBDT05GSUdfU0NTSV9PU0RfREVCVUcKKyNkZWZpbmUgT1NEX0RFQlVHKGZtdCwgYS4uLikgXAorCXByaW50ayhLRVJOX05PVElDRSAib3NkIEAlczolZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhKQorI2Vsc2UKKyNkZWZpbmUgT1NEX0RFQlVHKGZtdCwgYS4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyogdTY0IGhhcyBwcm9ibGVtcyB3aXRoIHByaW50ayB0aGlzIHdpbGwgY2FzdCBpdCB0byB1bnNpZ25lZCBsb25nIGxvbmcgKi8KKyNkZWZpbmUgX0xMVSh4KSAodW5zaWduZWQgbG9uZyBsb25nKSh4KQorCisjZW5kaWYgLyogbmRlZiBfX09TRF9ERUJVR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2luaXRpYXRvci5jIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyZjU4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2luaXRpYXRvci5jCkBAIC0wLDAgKzEsMTY1NyBAQAorLyoKKyAqIG9zZF9pbml0aWF0b3IgLSBNYWluIGJvZHkgb2YgdGhlIG9zZCBpbml0aWF0b3IgbGlicmFyeS4KKyAqCisgKiBOb3RlOiBUaGUgZmlsZSBkb2VzIG5vdCBjb250YWluIHRoZSBhZHZhbmNlZCBzZWN1cml0eSBmdW5jdGlvbmFsaXR5IHdoaWNoCisgKiBpcyBvbmx5IG5lZWRlZCBieSB0aGUgc2VjdXJpdHlfbWFuYWdlcidzIGluaXRpYXRvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3JzOgorICogICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICogICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUGFuYXNhcyBjb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHNjc2kvb3NkX2luaXRpYXRvci5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX3NlYy5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX2F0dHJpYnV0ZXMuaD4KKyNpbmNsdWRlIDxzY3NpL29zZF9zZW5zZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAib3NkX2RlYnVnLmgiCisKKyNpZm5kZWYgX191bnVzZWQKKyMgICAgZGVmaW5lIF9fdW51c2VkCQkJX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbmRpZgorCitlbnVtIHsgT1NEX1JFUV9SRVRSSUVTID0gMSB9OworCitNT0RVTEVfQVVUSE9SKCJCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvcGVuLW9zZCBpbml0aWF0b3IgbGlicmFyeSBsaWJvc2Qua28iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGlubGluZSB2b2lkIGJ1aWxkX3Rlc3Qodm9pZCkKK3sKKwkvKiBzdHJ1Y3R1cmVzIHdlcmUgbm90IHBhY2tlZCAqLworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG9zZF9jYXBhYmlsaXR5KSAhPSBPU0RfQ0FQX0xFTik7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgb3NkdjJfY2RiKSAhPSBPU0RfVE9UQUxfQ0RCX0xFTik7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgb3NkdjFfY2RiKSAhPSBPU0R2MV9UT1RBTF9DREJfTEVOKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKl9vc2RfdmVyX2Rlc2Moc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlyZXR1cm4gb3NkX3JlcV9pc192ZXIxKG9yKSA/ICJPU0QxIiA6ICJPU0QyIjsKK30KKworI2RlZmluZSBBVFRSX0RFRl9SSShpZCwgbGVuKSBBVFRSX0RFRihPU0RfQVBBR0VfUk9PVF9JTkZPUk1BVElPTiwgaWQsIGxlbikKKworc3RhdGljIGludCBfb3NkX3ByaW50X3N5c3RlbV9pbmZvKHN0cnVjdCBvc2RfZGV2ICpvZCwgdm9pZCAqY2FwcykKK3sKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOworCXN0cnVjdCBvc2RfYXR0ciBnZXRfYXR0cnNbXSA9IHsKKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfVkVORE9SX0lERU5USUZJQ0FUSU9OLCA4KSwKKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfUFJPRFVDVF9JREVOVElGSUNBVElPTiwgMTYpLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9QUk9EVUNUX01PREVMLCAzMiksCisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX1BST0RVQ1RfUkVWSVNJT05fTEVWRUwsIDQpLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9QUk9EVUNUX1NFUklBTF9OVU1CRVIsIDY0IC8qdmFyaWFibGUqLyksCisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX09TRF9OQU1FLCA2NCAvKnZhcmlhYmxlKi8pLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9UT1RBTF9DQVBBQ0lUWSwgOCksCisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX1VTRURfQ0FQQUNJVFksIDgpLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9OVU1CRVJfT0ZfUEFSVElUSU9OUywgOCksCisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX0NMT0NLLCA2KSwKKwkJLyogSUJNLU9TRC1TSU0gSGFzIGEgYnVnIHdpdGggdGhpcyBvbmUgcHV0IGl0IGxhc3QgKi8KKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfT1NEX1NZU1RFTV9JRCwgMjApLAorCX07CisJdm9pZCAqaXRlciA9IE5VTEwsICpwRmlyc3Q7CisJaW50IG5lbGVtID0gQVJSQVlfU0laRShnZXRfYXR0cnMpLCBhID0gMDsKKwlpbnQgcmV0OworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChvZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBnZXQgYXR0cnMgKi8KKwlvc2RfcmVxX2dldF9hdHRyaWJ1dGVzKG9yLCAmb3NkX3Jvb3Rfb2JqZWN0KTsKKwlvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KG9yLCBnZXRfYXR0cnMsIEFSUkFZX1NJWkUoZ2V0X2F0dHJzKSk7CisKKwlyZXQgPSBvc2RfZmluYWxpemVfcmVxdWVzdChvciwgMCwgY2FwcywgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvc2RfZXhlY3V0ZV9yZXF1ZXN0KG9yKTsKKwlpZiAocmV0KSB7CisJCU9TRF9FUlIoIkZhaWxlZCB0byBkZXRlY3QgJXMgPT4gJWRcbiIsIF9vc2RfdmVyX2Rlc2Mob3IpLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlvc2RfcmVxX2RlY29kZV9nZXRfYXR0cl9saXN0KG9yLCBnZXRfYXR0cnMsICZuZWxlbSwgJml0ZXIpOworCisJT1NEX0lORk8oIkRldGVjdGVkICVzIGRldmljZVxuIiwKKwkJX29zZF92ZXJfZGVzYyhvcikpOworCisJcEZpcnN0ID0gZ2V0X2F0dHJzW2ErK10udmFsX3B0cjsKKwlPU0RfSU5GTygiT1NEX0FUVFJfUklfVkVORE9SX0lERU5USUZJQ0FUSU9OIFslc11cbiIsCisJCShjaGFyICopcEZpcnN0KTsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX1BST0RVQ1RfSURFTlRJRklDQVRJT04gWyVzXVxuIiwKKwkJKGNoYXIgKilwRmlyc3QpOworCisJcEZpcnN0ID0gZ2V0X2F0dHJzW2ErK10udmFsX3B0cjsKKwlPU0RfSU5GTygiT1NEX0FUVFJfUklfUFJPRFVDVF9NT0RFTCBbJXNdXG4iLAorCQkoY2hhciAqKXBGaXJzdCk7CisKKwlwRmlyc3QgPSBnZXRfYXR0cnNbYSsrXS52YWxfcHRyOworCU9TRF9JTkZPKCJPU0RfQVRUUl9SSV9QUk9EVUNUX1JFVklTSU9OX0xFVkVMIFsldV1cbiIsCisJCXBGaXJzdCA/IGdldF91bmFsaWduZWRfYmUzMihwRmlyc3QpIDogfjBVKTsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX1BST0RVQ1RfU0VSSUFMX05VTUJFUiBbJXNdXG4iLAorCQkoY2hhciAqKXBGaXJzdCk7CisKKwlwRmlyc3QgPSBnZXRfYXR0cnNbYV0udmFsX3B0cjsKKwlPU0RfSU5GTygiT1NEX0FUVFJfUklfT1NEX05BTUUgWyVzXVxuIiwgKGNoYXIgKilwRmlyc3QpOworCWErKzsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX1RPVEFMX0NBUEFDSVRZIFsweCVsbHhdXG4iLAorCQlwRmlyc3QgPyBfTExVKGdldF91bmFsaWduZWRfYmU2NChwRmlyc3QpKSA6IH4wVUxMKTsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX1VTRURfQ0FQQUNJVFkgWzB4JWxseF1cbiIsCisJCXBGaXJzdCA/IF9MTFUoZ2V0X3VuYWxpZ25lZF9iZTY0KHBGaXJzdCkpIDogfjBVTEwpOworCisJcEZpcnN0ID0gZ2V0X2F0dHJzW2ErK10udmFsX3B0cjsKKwlPU0RfSU5GTygiT1NEX0FUVFJfUklfTlVNQkVSX09GX1BBUlRJVElPTlMgWyVsbHVdXG4iLAorCQlwRmlyc3QgPyBfTExVKGdldF91bmFsaWduZWRfYmU2NChwRmlyc3QpKSA6IH4wVUxMKTsKKworCWlmIChhID49IG5lbGVtKQorCQlnb3RvIG91dDsKKworCS8qIEZJWE1FOiBXaGVyZSBhcmUgdGhlIHRpbWUgdXRpbGl0aWVzICovCisJcEZpcnN0ID0gZ2V0X2F0dHJzW2ErK10udmFsX3B0cjsKKwlPU0RfSU5GTygiT1NEX0FUVFJfUklfQ0xPQ0sgWzB4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XVxuIiwKKwkJKChjaGFyICopcEZpcnN0KVswXSwgKChjaGFyICopcEZpcnN0KVsxXSwKKwkJKChjaGFyICopcEZpcnN0KVsyXSwgKChjaGFyICopcEZpcnN0KVszXSwKKwkJKChjaGFyICopcEZpcnN0KVs0XSwgKChjaGFyICopcEZpcnN0KVs1XSk7CisKKwlpZiAoYSA8IG5lbGVtKSB7IC8qIElCTS1PU0QtU0lNIGJ1ZywgTWlnaHQgbm90IGhhdmUgaXQgKi8KKwkJdW5zaWduZWQgbGVuID0gZ2V0X2F0dHJzW2FdLmxlbjsKKwkJY2hhciBzaWRfZHVtcFszMio0ICsgMl07IC8qIDJuaWJibGVzK3NwYWNlK0FTQ0lJICovCisKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKGdldF9hdHRyc1thXS52YWxfcHRyLCBsZW4sIDMyLCAxLAorCQkJCSAgIHNpZF9kdW1wLCBzaXplb2Yoc2lkX2R1bXApLCB0cnVlKTsKKwkJT1NEX0lORk8oIk9TRF9BVFRSX1JJX09TRF9TWVNURU1fSUQoJWQpIFslc11cbiIsIGxlbiwgc2lkX2R1bXApOworCQlhKys7CisJfQorb3V0OgorCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IG9zZF9hdXRvX2RldGVjdF92ZXIoc3RydWN0IG9zZF9kZXYgKm9kLCB2b2lkICpjYXBzKQoreworCWludCByZXQ7CisKKwkvKiBBdXRvLWRldGVjdCB0aGUgb3NkIHZlcnNpb24gKi8KKwlyZXQgPSBfb3NkX3ByaW50X3N5c3RlbV9pbmZvKG9kLCBjYXBzKTsKKwlpZiAocmV0KSB7CisJCW9zZF9kZXZfc2V0X3ZlcihvZCwgT1NEX1ZFUjEpOworCQlPU0RfREVCVUcoImNvbnZlcnRpbmcgdG8gT1NEMVxuIik7CisJCXJldCA9IF9vc2RfcHJpbnRfc3lzdGVtX2luZm8ob2QsIGNhcHMpOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9hdXRvX2RldGVjdF92ZXIpOworCitzdGF0aWMgdW5zaWduZWQgX29zZF9yZXFfY2RiX2xlbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXJldHVybiBvc2RfcmVxX2lzX3ZlcjEob3IpID8gT1NEdjFfVE9UQUxfQ0RCX0xFTiA6IE9TRF9UT1RBTF9DREJfTEVOOworfQorCitzdGF0aWMgdW5zaWduZWQgX29zZF9yZXFfYWxpc3RfZWxlbV9zaXplKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHVuc2lnbmVkIGxlbikKK3sKKwlyZXR1cm4gb3NkX3JlcV9pc192ZXIxKG9yKSA/CisJCW9zZHYxX2F0dHJfbGlzdF9lbGVtX3NpemUobGVuKSA6CisJCW9zZHYyX2F0dHJfbGlzdF9lbGVtX3NpemUobGVuKTsKK30KKworc3RhdGljIHVuc2lnbmVkIF9vc2RfcmVxX2FsaXN0X3NpemUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdm9pZCAqbGlzdF9oZWFkKQoreworCXJldHVybiBvc2RfcmVxX2lzX3ZlcjEob3IpID8KKwkJb3NkdjFfbGlzdF9zaXplKGxpc3RfaGVhZCkgOgorCQlvc2R2Ml9saXN0X3NpemUobGlzdF9oZWFkKTsKK30KKworc3RhdGljIHVuc2lnbmVkIF9vc2RfcmVxX3NpemVvZl9hbGlzdF9oZWFkZXIoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlyZXR1cm4gb3NkX3JlcV9pc192ZXIxKG9yKSA/CisJCXNpemVvZihzdHJ1Y3Qgb3NkdjFfYXR0cmlidXRlc19saXN0X2hlYWRlcikgOgorCQlzaXplb2Yoc3RydWN0IG9zZHYyX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIpOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3JlcV9zZXRfYWxpc3RfdHlwZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXZvaWQgKmxpc3QsIGludCBsaXN0X3R5cGUpCit7CisJaWYgKG9zZF9yZXFfaXNfdmVyMShvcikpIHsKKwkJc3RydWN0IG9zZHYxX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIgKmF0dHJfbGlzdCA9IGxpc3Q7CisKKwkJbWVtc2V0KGF0dHJfbGlzdCwgMCwgc2l6ZW9mKCphdHRyX2xpc3QpKTsKKwkJYXR0cl9saXN0LT50eXBlID0gbGlzdF90eXBlOworCX0gZWxzZSB7CisJCXN0cnVjdCBvc2R2Ml9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyICphdHRyX2xpc3QgPSBsaXN0OworCisJCW1lbXNldChhdHRyX2xpc3QsIDAsIHNpemVvZigqYXR0cl9saXN0KSk7CisJCWF0dHJfbGlzdC0+dHlwZSA9IGxpc3RfdHlwZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIF9vc2RfcmVxX2lzX2FsaXN0X3R5cGUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl2b2lkICpsaXN0LCBpbnQgbGlzdF90eXBlKQoreworCWlmICghbGlzdCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG9zZF9yZXFfaXNfdmVyMShvcikpIHsKKwkJc3RydWN0IG9zZHYxX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIgKmF0dHJfbGlzdCA9IGxpc3Q7CisKKwkJcmV0dXJuIGF0dHJfbGlzdC0+dHlwZSA9PSBsaXN0X3R5cGU7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9zZHYyX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIgKmF0dHJfbGlzdCA9IGxpc3Q7CisKKwkJcmV0dXJuIGF0dHJfbGlzdC0+dHlwZSA9PSBsaXN0X3R5cGU7CisJfQorfQorCisvKiBUaGlzIGlzIGZvciBMaXN0LW9iamVjdHMgbm90IEF0dHJpYnV0ZXMtTGlzdHMgKi8KK3N0YXRpYyB2b2lkIF9vc2RfcmVxX2VuY29kZV9vbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IG9zZF9jZGJfaGVhZCAqY2RiaCA9IG9zZF9jZGJfaGVhZCgmb3ItPmNkYik7CisKKwlpZiAob3NkX3JlcV9pc192ZXIxKG9yKSkgeworCQljZGJoLT52MS5saXN0X2lkZW50aWZpZXIgPSBsaXN0LT5saXN0X2lkZW50aWZpZXI7CisJCWNkYmgtPnYxLnN0YXJ0X2FkZHJlc3MgPSBsaXN0LT5jb250aW51YXRpb25faWQ7CisJfSBlbHNlIHsKKwkJY2RiaC0+djIubGlzdF9pZGVudGlmaWVyID0gbGlzdC0+bGlzdF9pZGVudGlmaWVyOworCQljZGJoLT52Mi5zdGFydF9hZGRyZXNzID0gbGlzdC0+Y29udGludWF0aW9uX2lkOworCX0KK30KKworc3RhdGljIG9zZF9jZGJfb2Zmc2V0IG9zZF9yZXFfZW5jb2RlX29mZnNldChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXU2NCBvZmZzZXQsIHVuc2lnbmVkICpwYWRkaW5nKQoreworCXJldHVybiBfX29zZF9lbmNvZGVfb2Zmc2V0KG9mZnNldCwgcGFkZGluZywKKwkJCW9zZF9yZXFfaXNfdmVyMShvcikgPworCQkJCU9TRHYxX09GRlNFVF9NSU5fU0hJRlQgOiBPU0RfT0ZGU0VUX01JTl9TSElGVCwKKwkJCU9TRF9PRkZTRVRfTUFYX1NISUZUKTsKK30KKworc3RhdGljIHN0cnVjdCBvc2Rfc2VjdXJpdHlfcGFyYW1ldGVycyAqCitfb3NkX3JlcV9zZWNfcGFyYW1zKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJc3RydWN0IG9zZF9jZGIgKm9jZGIgPSAmb3ItPmNkYjsKKworCWlmIChvc2RfcmVxX2lzX3ZlcjEob3IpKQorCQlyZXR1cm4gJm9jZGItPnYxLnNlY19wYXJhbXM7CisJZWxzZQorCQlyZXR1cm4gJm9jZGItPnYyLnNlY19wYXJhbXM7Cit9CisKK3ZvaWQgb3NkX2Rldl9pbml0KHN0cnVjdCBvc2RfZGV2ICpvc2RkLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlKQoreworCW1lbXNldChvc2RkLCAwLCBzaXplb2YoKm9zZGQpKTsKKwlvc2RkLT5zY3NpX2RldmljZSA9IHNjc2lfZGV2aWNlOworCW9zZGQtPmRlZl90aW1lb3V0ID0gQkxLX0RFRkFVTFRfU0dfVElNRU9VVDsKKyNpZmRlZiBPU0RfVkVSMV9TVVBQT1JUCisJb3NkZC0+dmVyc2lvbiA9IE9TRF9WRVIyOworI2VuZGlmCisJLyogVE9ETzogQWxsb2NhdGUgcG9vbHMgZm9yIG9zZF9yZXF1ZXN0IGF0dHJpYnV0ZXMgLi4uICovCit9CitFWFBPUlRfU1lNQk9MKG9zZF9kZXZfaW5pdCk7CisKK3ZvaWQgb3NkX2Rldl9maW5pKHN0cnVjdCBvc2RfZGV2ICpvc2RkKQoreworCS8qIFRPRE86IERlLWFsbG9jYXRlIHBvb2xzICovCisKKwlvc2RkLT5zY3NpX2RldmljZSA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9kZXZfZmluaSk7CisKK3N0YXRpYyBzdHJ1Y3Qgb3NkX3JlcXVlc3QgKl9vc2RfcmVxdWVzdF9hbGxvYyhnZnBfdCBnZnApCit7CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKworCS8qIFRPRE86IFVzZSBtZW1wb29sIHdpdGggb25lIHNhdmVkIHJlcXVlc3QgKi8KKwlvciA9IGt6YWxsb2Moc2l6ZW9mKCpvciksIGdmcCk7CisJcmV0dXJuIG9yOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3JlcXVlc3RfZnJlZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCWtmcmVlKG9yKTsKK30KKworc3RydWN0IG9zZF9yZXF1ZXN0ICpvc2Rfc3RhcnRfcmVxdWVzdChzdHJ1Y3Qgb3NkX2RldiAqZGV2LCBnZnBfdCBnZnApCit7CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKworCW9yID0gX29zZF9yZXF1ZXN0X2FsbG9jKGdmcCk7CisJaWYgKCFvcikKKwkJcmV0dXJuIE5VTEw7CisKKwlvci0+b3NkX2RldiA9IGRldjsKKwlvci0+YWxsb2NfZmxhZ3MgPSBnZnA7CisJb3ItPnRpbWVvdXQgPSBkZXYtPmRlZl90aW1lb3V0OworCW9yLT5yZXRyaWVzID0gT1NEX1JFUV9SRVRSSUVTOworCisJcmV0dXJuIG9yOworfQorRVhQT1JUX1NZTUJPTChvc2Rfc3RhcnRfcmVxdWVzdCk7CisKKy8qCisgKiBJZiBvc2RfZmluYWxpemVfcmVxdWVzdCgpIHdhcyBjYWxsZWQgYnV0IHRoZSByZXF1ZXN0IHdhcyBub3QgZXhlY3V0ZWQgdGhyb3VnaAorICogdGhlIGJsb2NrIGxheWVyLCB0aGVuIHdlIG11c3QgcmVsZWFzZSBCSU9zLgorICovCitzdGF0aWMgdm9pZCBfYWJvcnRfdW5leGVjdXRlZF9iaW9zKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IHJxLT5iaW8pICE9IE5VTEwpIHsKKwkJcnEtPmJpbyA9IGJpby0+YmlfbmV4dDsKKwkJYmlvX2VuZGlvKGJpbywgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfb3NkX2ZyZWVfc2VnKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgX191bnVzZWQsCisJc3RydWN0IF9vc2RfcmVxX2RhdGFfc2VnbWVudCAqc2VnKQoreworCWlmICghc2VnLT5idWZmIHx8ICFzZWctPmFsbG9jX3NpemUpCisJCXJldHVybjsKKworCWtmcmVlKHNlZy0+YnVmZik7CisJc2VnLT5idWZmID0gTlVMTDsKKwlzZWctPmFsbG9jX3NpemUgPSAwOworfQorCit2b2lkIG9zZF9lbmRfcmVxdWVzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXN0cnVjdCByZXF1ZXN0ICpycSA9IG9yLT5yZXF1ZXN0OworCisJX29zZF9mcmVlX3NlZyhvciwgJm9yLT5zZXRfYXR0cik7CisJX29zZF9mcmVlX3NlZyhvciwgJm9yLT5lbmNfZ2V0X2F0dHIpOworCV9vc2RfZnJlZV9zZWcob3IsICZvci0+Z2V0X2F0dHIpOworCisJaWYgKHJxKSB7CisJCWlmIChycS0+bmV4dF9ycSkgeworCQkJX2Fib3J0X3VuZXhlY3V0ZWRfYmlvcyhycS0+bmV4dF9ycSk7CisJCQlibGtfcHV0X3JlcXVlc3QocnEtPm5leHRfcnEpOworCQl9CisKKwkJX2Fib3J0X3VuZXhlY3V0ZWRfYmlvcyhycSk7CisJCWJsa19wdXRfcmVxdWVzdChycSk7CisJfQorCV9vc2RfcmVxdWVzdF9mcmVlKG9yKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX2VuZF9yZXF1ZXN0KTsKKworaW50IG9zZF9leGVjdXRlX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlyZXR1cm4gYmxrX2V4ZWN1dGVfcnEob3ItPnJlcXVlc3QtPnEsIE5VTEwsIG9yLT5yZXF1ZXN0LCAwKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX2V4ZWN1dGVfcmVxdWVzdCk7CisKK3N0YXRpYyB2b2lkIG9zZF9yZXF1ZXN0X2FzeW5jX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGVycm9yKQoreworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSByZXEtPmVuZF9pb19kYXRhOworCisJb3ItPmFzeW5jX2Vycm9yID0gZXJyb3I7CisKKwlpZiAoZXJyb3IpCisJCU9TRF9ERUJVRygib3NkX3JlcXVlc3RfYXN5bmNfZG9uZSBlcnJvciByZWNpZXZlZCAlZFxuIiwgZXJyb3IpOworCisJaWYgKG9yLT5hc3luY19kb25lKQorCQlvci0+YXN5bmNfZG9uZShvciwgb3ItPmFzeW5jX3ByaXZhdGUpOworCWVsc2UKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKK30KKworaW50IG9zZF9leGVjdXRlX3JlcXVlc3RfYXN5bmMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfcmVxX2RvbmVfZm4gKmRvbmUsIHZvaWQgKnByaXZhdGUpCit7CisJb3ItPnJlcXVlc3QtPmVuZF9pb19kYXRhID0gb3I7CisJb3ItPmFzeW5jX3ByaXZhdGUgPSBwcml2YXRlOworCW9yLT5hc3luY19kb25lID0gZG9uZTsKKworCWJsa19leGVjdXRlX3JxX25vd2FpdChvci0+cmVxdWVzdC0+cSwgTlVMTCwgb3ItPnJlcXVlc3QsIDAsCisJCQkgICAgICBvc2RfcmVxdWVzdF9hc3luY19kb25lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob3NkX2V4ZWN1dGVfcmVxdWVzdF9hc3luYyk7CisKK3U4IHNnX291dF9wYWRfYnVmZmVyWzEgPDwgT1NEdjFfT0ZGU0VUX01JTl9TSElGVF07Cit1OCBzZ19pbl9wYWRfYnVmZmVyWzEgPDwgT1NEdjFfT0ZGU0VUX01JTl9TSElGVF07CisKK3N0YXRpYyBpbnQgX29zZF9yZWFsbG9jX3NlZyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBfb3NkX3JlcV9kYXRhX3NlZ21lbnQgKnNlZywgdW5zaWduZWQgbWF4X2J5dGVzKQoreworCXZvaWQgKmJ1ZmY7CisKKwlpZiAoc2VnLT5hbGxvY19zaXplID49IG1heF9ieXRlcykKKwkJcmV0dXJuIDA7CisKKwlidWZmID0ga3JlYWxsb2Moc2VnLT5idWZmLCBtYXhfYnl0ZXMsIG9yLT5hbGxvY19mbGFncyk7CisJaWYgKCFidWZmKSB7CisJCU9TRF9FUlIoIkZhaWxlZCB0byBSZWFsbG9jICVkLWJ5dGVzIHdhcy0lZFxuIiwgbWF4X2J5dGVzLAorCQkJc2VnLT5hbGxvY19zaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGJ1ZmYgKyBzZWctPmFsbG9jX3NpemUsIDAsIG1heF9ieXRlcyAtIHNlZy0+YWxsb2Nfc2l6ZSk7CisJc2VnLT5idWZmID0gYnVmZjsKKwlzZWctPmFsbG9jX3NpemUgPSBtYXhfYnl0ZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX2FsbG9jX3NldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgKm9hLCB1bnNpZ25lZCBuZWxlbSwgdW5zaWduZWQgYWRkX2J5dGVzKQoreworCXVuc2lnbmVkIHRvdGFsX2J5dGVzID0gYWRkX2J5dGVzOworCisJZm9yICg7IG5lbGVtOyAtLW5lbGVtLCArK29hKQorCQl0b3RhbF9ieXRlcyArPSBfb3NkX3JlcV9hbGlzdF9lbGVtX3NpemUob3IsIG9hLT5sZW4pOworCisJT1NEX0RFQlVHKCJ0b3RhbF9ieXRlcz0lZFxuIiwgdG90YWxfYnl0ZXMpOworCXJldHVybiBfb3NkX3JlYWxsb2Nfc2VnKG9yLCAmb3ItPnNldF9hdHRyLCB0b3RhbF9ieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgX2FsbG9jX2dldF9hdHRyX2Rlc2Moc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdW5zaWduZWQgbWF4X2J5dGVzKQoreworCU9TRF9ERUJVRygidG90YWxfYnl0ZXM9JWRcbiIsIG1heF9ieXRlcyk7CisJcmV0dXJuIF9vc2RfcmVhbGxvY19zZWcob3IsICZvci0+ZW5jX2dldF9hdHRyLCBtYXhfYnl0ZXMpOworfQorCitzdGF0aWMgaW50IF9hbGxvY19nZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJT1NEX0RFQlVHKCJ0b3RhbF9ieXRlcz0lZFxuIiwgb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzKTsKKwlyZXR1cm4gX29zZF9yZWFsbG9jX3NlZyhvciwgJm9yLT5nZXRfYXR0ciwgb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzKTsKK30KKworLyoKKyAqIENvbW1vbiB0byBhbGwgT1NEIGNvbW1hbmRzCisgKi8KKworc3RhdGljIHZvaWQgX29zZHYxX3JlcV9lbmNvZGVfY29tbW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJX19iZTE2IGFjdCwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdTY0IGxlbikKK3sKKwlzdHJ1Y3Qgb3NkdjFfY2RiICpvY2RiID0gJm9yLT5jZGIudjE7CisKKwkvKgorCSAqIEZvciBzcGVlZCwgdGhlIGNvbW1hbmRzCisJICoJT1NEX0FDVF9QRVJGT1JNX1NDU0lfQ09NTUFORAksIFYxIDB4OEY3RSwgVjIgMHg4RjdDCisJICoJT1NEX0FDVF9TQ1NJX1RBU0tfTUFOQUdFTUVOVAksIFYxIDB4OEY3RiwgVjIgMHg4RjdECisJICogYXJlIG5vdCBzdXBwb3J0ZWQgaGVyZS4gU2hvdWxkIHBhc3MgemVybyBhbmQgc2V0IGFmdGVyIHRoZSBjYWxsCisJICovCisJYWN0ICY9IGNwdV90b19iZTE2KH4weDAwODApOyAvKiBWMSBhY3Rpb24gY29kZSAqLworCisJT1NEX0RFQlVHKCJPU0R2MSBleGVjdXRlIG9wY29kZSAweCV4XG4iLCBiZTE2X3RvX2NwdShhY3QpKTsKKworCW9jZGItPmgudmFybGVuX2NkYi5vcGNvZGUgPSBWQVJJQUJMRV9MRU5HVEhfQ01EOworCW9jZGItPmgudmFybGVuX2NkYi5hZGRpdGlvbmFsX2NkYl9sZW5ndGggPSBPU0RfQURESVRJT05BTF9DREJfTEVOR1RIOworCW9jZGItPmgudmFybGVuX2NkYi5zZXJ2aWNlX2FjdGlvbiA9IGFjdDsKKworCW9jZGItPmgucGFydGl0aW9uID0gY3B1X3RvX2JlNjQob2JqLT5wYXJ0aXRpb24pOworCW9jZGItPmgub2JqZWN0ID0gY3B1X3RvX2JlNjQob2JqLT5pZCk7CisJb2NkYi0+aC52MS5sZW5ndGggPSBjcHVfdG9fYmU2NChsZW4pOworCW9jZGItPmgudjEuc3RhcnRfYWRkcmVzcyA9IGNwdV90b19iZTY0KG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9vc2R2Ml9yZXFfZW5jb2RlX2NvbW1vbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCSBfX2JlMTYgYWN0LCBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCB1NjQgb2Zmc2V0LCB1NjQgbGVuKQoreworCXN0cnVjdCBvc2R2Ml9jZGIgKm9jZGIgPSAmb3ItPmNkYi52MjsKKworCU9TRF9ERUJVRygiT1NEdjIgZXhlY3V0ZSBvcGNvZGUgMHgleFxuIiwgYmUxNl90b19jcHUoYWN0KSk7CisKKwlvY2RiLT5oLnZhcmxlbl9jZGIub3Bjb2RlID0gVkFSSUFCTEVfTEVOR1RIX0NNRDsKKwlvY2RiLT5oLnZhcmxlbl9jZGIuYWRkaXRpb25hbF9jZGJfbGVuZ3RoID0gT1NEX0FERElUSU9OQUxfQ0RCX0xFTkdUSDsKKwlvY2RiLT5oLnZhcmxlbl9jZGIuc2VydmljZV9hY3Rpb24gPSBhY3Q7CisKKwlvY2RiLT5oLnBhcnRpdGlvbiA9IGNwdV90b19iZTY0KG9iai0+cGFydGl0aW9uKTsKKwlvY2RiLT5oLm9iamVjdCA9IGNwdV90b19iZTY0KG9iai0+aWQpOworCW9jZGItPmgudjIubGVuZ3RoID0gY3B1X3RvX2JlNjQobGVuKTsKKwlvY2RiLT5oLnYyLnN0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmU2NChvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3JlcV9lbmNvZGVfY29tbW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJX19iZTE2IGFjdCwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdTY0IGxlbikKK3sKKwlpZiAob3NkX3JlcV9pc192ZXIxKG9yKSkKKwkJX29zZHYxX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBhY3QsIG9iaiwgb2Zmc2V0LCBsZW4pOworCWVsc2UKKwkJX29zZHYyX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBhY3QsIG9iaiwgb2Zmc2V0LCBsZW4pOworfQorCisvKgorICogRGV2aWNlIGNvbW1hbmRzCisgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX3NldF9tYXN0ZXJfc2VlZF94Y2hnKHN0cnVjdCBvc2RfcmVxdWVzdCAqLCAuLi4pOyAqLworLypUT0RPOiB2b2lkIG9zZF9yZXFfc2V0X21hc3Rlcl9rZXkoc3RydWN0IG9zZF9yZXF1ZXN0ICosIC4uLik7ICovCisKK3ZvaWQgb3NkX3JlcV9mb3JtYXQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdTY0IHRvdF9jYXBhY2l0eSkKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX0ZPUk1BVF9PU0QsICZvc2Rfcm9vdF9vYmplY3QsIDAsCisJCQkJdG90X2NhcGFjaXR5KTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9mb3JtYXQpOworCitpbnQgb3NkX3JlcV9saXN0X2Rldl9wYXJ0aXRpb25zKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX2lkIGluaXRpYWxfaWQsIHN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsIHVuc2lnbmVkIG5lbGVtKQoreworCXJldHVybiBvc2RfcmVxX2xpc3RfcGFydGl0aW9uX29iamVjdHMob3IsIDAsIGluaXRpYWxfaWQsIGxpc3QsIG5lbGVtKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9saXN0X2Rldl9wYXJ0aXRpb25zKTsKKworc3RhdGljIHZvaWQgX29zZF9yZXFfZW5jb2RlX2ZsdXNoKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJZW51bSBvc2Rfb3B0aW9uc19mbHVzaF9zY29wZV92YWx1ZXMgb3ApCit7CisJc3RydWN0IG9zZF9jZGJfaGVhZCAqb2NkYiA9IG9zZF9jZGJfaGVhZCgmb3ItPmNkYik7CisKKwlvY2RiLT5jb21tYW5kX3NwZWNpZmljX29wdGlvbnMgPSBvcDsKK30KKwordm9pZCBvc2RfcmVxX2ZsdXNoX29ic2Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwllbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyBvcCkKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX0ZMVVNIX09TRCwgJm9zZF9yb290X29iamVjdCwgMCwgMCk7CisJX29zZF9yZXFfZW5jb2RlX2ZsdXNoKG9yLCBvcCk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfZmx1c2hfb2JzZCk7CisKKy8qVE9ETzogdm9pZCBvc2RfcmVxX3BlcmZvcm1fc2NzaV9jb21tYW5kKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHU4ICpjZGIsIC4uLik7ICovCisvKlRPRE86IHZvaWQgb3NkX3JlcV90YXNrX21hbmFnZW1lbnQoc3RydWN0IG9zZF9yZXF1ZXN0ICosIC4uLik7ICovCisKKy8qCisgKiBQYXJ0aXRpb24gY29tbWFuZHMKKyAqLworc3RhdGljIHZvaWQgX29zZF9yZXFfZW5jb2RlX3BhcnRpdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCV9fYmUxNiBhY3QsIG9zZF9pZCBwYXJ0aXRpb24pCit7CisJc3RydWN0IG9zZF9vYmpfaWQgcGFyID0geworCQkucGFydGl0aW9uID0gcGFydGl0aW9uLAorCQkuaWQgPSAwLAorCX07CisKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBhY3QsICZwYXIsIDAsIDApOworfQorCit2b2lkIG9zZF9yZXFfY3JlYXRlX3BhcnRpdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBvc2RfaWQgcGFydGl0aW9uKQoreworCV9vc2RfcmVxX2VuY29kZV9wYXJ0aXRpb24ob3IsIE9TRF9BQ1RfQ1JFQVRFX1BBUlRJVElPTiwgcGFydGl0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9jcmVhdGVfcGFydGl0aW9uKTsKKwordm9pZCBvc2RfcmVxX3JlbW92ZV9wYXJ0aXRpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgb3NkX2lkIHBhcnRpdGlvbikKK3sKKwlfb3NkX3JlcV9lbmNvZGVfcGFydGl0aW9uKG9yLCBPU0RfQUNUX1JFTU9WRV9QQVJUSVRJT04sIHBhcnRpdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfcmVtb3ZlX3BhcnRpdGlvbik7CisKKy8qVE9ETzogdm9pZCBvc2RfcmVxX3NldF9wYXJ0aXRpb25fa2V5KHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCW9zZF9pZCBwYXJ0aXRpb24sIHU4IG5ld19rZXlfaWRbT1NEX0NSWVBUT19LRVlJRF9TSVpFXSwKKwl1OCBzZWVkW09TRF9DUllQVE9fU0VFRF9TSVpFXSk7ICovCisKK3N0YXRpYyBpbnQgX29zZF9yZXFfbGlzdF9vYmplY3RzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJX19iZTE2IGFjdGlvbiwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgb3NkX2lkIGluaXRpYWxfaWQsCisJc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwgdW5zaWduZWQgbmVsZW0pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBvci0+b3NkX2Rldi0+c2NzaV9kZXZpY2UtPnJlcXVlc3RfcXVldWU7CisJdTY0IGxlbiA9IG5lbGVtICogc2l6ZW9mKG9zZF9pZCkgKyBzaXplb2YoKmxpc3QpOworCXN0cnVjdCBiaW8gKmJpbzsKKworCV9vc2RfcmVxX2VuY29kZV9jb21tb24ob3IsIGFjdGlvbiwgb2JqLCAodTY0KWluaXRpYWxfaWQsIGxlbik7CisKKwlpZiAobGlzdC0+bGlzdF9pZGVudGlmaWVyKQorCQlfb3NkX3JlcV9lbmNvZGVfb2xpc3Qob3IsIGxpc3QpOworCisJV0FSTl9PTihvci0+aW4uYmlvKTsKKwliaW8gPSBiaW9fbWFwX2tlcm4ocSwgbGlzdCwgbGVuLCBvci0+YWxsb2NfZmxhZ3MpOworCWlmICghYmlvKSB7CisJCU9TRF9FUlIoIiEhISBGYWlsZWQgdG8gYWxsb2NhdGUgbGlzdF9vYmplY3RzIEJJT1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJpby0+YmlfcncgJj0gfigxIDw8IEJJT19SVyk7CisJb3ItPmluLmJpbyA9IGJpbzsKKwlvci0+aW4udG90YWxfYnl0ZXMgPSBiaW8tPmJpX3NpemU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvc2RfcmVxX2xpc3RfcGFydGl0aW9uX2NvbGxlY3Rpb25zKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX2lkIHBhcnRpdGlvbiwgb3NkX2lkIGluaXRpYWxfaWQsIHN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsCisJdW5zaWduZWQgbmVsZW0pCit7CisJc3RydWN0IG9zZF9vYmpfaWQgcGFyID0geworCQkucGFydGl0aW9uID0gcGFydGl0aW9uLAorCQkuaWQgPSAwLAorCX07CisKKwlyZXR1cm4gb3NkX3JlcV9saXN0X2NvbGxlY3Rpb25fb2JqZWN0cyhvciwgJnBhciwgaW5pdGlhbF9pZCwgbGlzdCwKKwkJCQkJICAgICAgIG5lbGVtKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9saXN0X3BhcnRpdGlvbl9jb2xsZWN0aW9ucyk7CisKK2ludCBvc2RfcmVxX2xpc3RfcGFydGl0aW9uX29iamVjdHMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgcGFydGl0aW9uLCBvc2RfaWQgaW5pdGlhbF9pZCwgc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwKKwl1bnNpZ25lZCBuZWxlbSkKK3sKKwlzdHJ1Y3Qgb3NkX29ial9pZCBwYXIgPSB7CisJCS5wYXJ0aXRpb24gPSBwYXJ0aXRpb24sCisJCS5pZCA9IDAsCisJfTsKKworCXJldHVybiBfb3NkX3JlcV9saXN0X29iamVjdHMob3IsIE9TRF9BQ1RfTElTVCwgJnBhciwgaW5pdGlhbF9pZCwgbGlzdCwKKwkJCQkgICAgIG5lbGVtKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9saXN0X3BhcnRpdGlvbl9vYmplY3RzKTsKKwordm9pZCBvc2RfcmVxX2ZsdXNoX3BhcnRpdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBwYXJ0aXRpb24sIGVudW0gb3NkX29wdGlvbnNfZmx1c2hfc2NvcGVfdmFsdWVzIG9wKQoreworCV9vc2RfcmVxX2VuY29kZV9wYXJ0aXRpb24ob3IsIE9TRF9BQ1RfRkxVU0hfUEFSVElUSU9OLCBwYXJ0aXRpb24pOworCV9vc2RfcmVxX2VuY29kZV9mbHVzaChvciwgb3ApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2ZsdXNoX3BhcnRpdGlvbik7CisKKy8qCisgKiBDb2xsZWN0aW9uIGNvbW1hbmRzCisgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX2NyZWF0ZV9jb2xsZWN0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICopOyAqLworLypUT0RPOiB2b2lkIG9zZF9yZXFfcmVtb3ZlX2NvbGxlY3Rpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICosCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKik7ICovCisKK2ludCBvc2RfcmVxX2xpc3RfY29sbGVjdGlvbl9vYmplY3RzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgb3NkX2lkIGluaXRpYWxfaWQsCisJc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwgdW5zaWduZWQgbmVsZW0pCit7CisJcmV0dXJuIF9vc2RfcmVxX2xpc3Rfb2JqZWN0cyhvciwgT1NEX0FDVF9MSVNUX0NPTExFQ1RJT04sIG9iaiwKKwkJCQkgICAgIGluaXRpYWxfaWQsIGxpc3QsIG5lbGVtKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9saXN0X2NvbGxlY3Rpb25fb2JqZWN0cyk7CisKKy8qVE9ETzogdm9pZCBxdWVyeShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwgLi4uKTsgVjIgKi8KKwordm9pZCBvc2RfcmVxX2ZsdXNoX2NvbGxlY3Rpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCBlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyBvcCkKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX0ZMVVNIX1BBUlRJVElPTiwgb2JqLCAwLCAwKTsKKwlfb3NkX3JlcV9lbmNvZGVfZmx1c2gob3IsIG9wKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9mbHVzaF9jb2xsZWN0aW9uKTsKKworLypUT0RPOiB2b2lkIGdldF9tZW1iZXJfYXR0cnMoc3RydWN0IG9zZF9yZXF1ZXN0ICosIC4uLik7IFYyICovCisvKlRPRE86IHZvaWQgc2V0X21lbWJlcl9hdHRycyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwgLi4uKTsgVjIgKi8KKworLyoKKyAqIE9iamVjdCBjb21tYW5kcworICovCit2b2lkIG9zZF9yZXFfY3JlYXRlX29iamVjdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqKQoreworCV9vc2RfcmVxX2VuY29kZV9jb21tb24ob3IsIE9TRF9BQ1RfQ1JFQVRFLCBvYmosIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2NyZWF0ZV9vYmplY3QpOworCit2b2lkIG9zZF9yZXFfcmVtb3ZlX29iamVjdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqKQoreworCV9vc2RfcmVxX2VuY29kZV9jb21tb24ob3IsIE9TRF9BQ1RfUkVNT1ZFLCBvYmosIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX3JlbW92ZV9vYmplY3QpOworCisKKy8qVE9ETzogdm9pZCBvc2RfcmVxX2NyZWF0ZV9tdWx0aShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2Rfb2JqX2lkICpmaXJzdCwgc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwgdW5zaWduZWQgbmVsZW0pOworKi8KKwordm9pZCBvc2RfcmVxX3dyaXRlKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgc3RydWN0IGJpbyAqYmlvLCB1NjQgb2Zmc2V0KQoreworCV9vc2RfcmVxX2VuY29kZV9jb21tb24ob3IsIE9TRF9BQ1RfV1JJVEUsIG9iaiwgb2Zmc2V0LCBiaW8tPmJpX3NpemUpOworCVdBUk5fT04ob3ItPm91dC5iaW8gfHwgb3ItPm91dC50b3RhbF9ieXRlcyk7CisJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUlcpOworCW9yLT5vdXQuYmlvID0gYmlvOworCW9yLT5vdXQudG90YWxfYnl0ZXMgPSBiaW8tPmJpX3NpemU7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfd3JpdGUpOworCisvKlRPRE86IHZvaWQgb3NkX3JlcV9hcHBlbmQoc3RydWN0IG9zZF9yZXF1ZXN0ICosCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgc3RydWN0IGJpbyAqZGF0YV9vdXQpOyAqLworLypUT0RPOiB2b2lkIG9zZF9yZXFfY3JlYXRlX3dyaXRlKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHN0cnVjdCBiaW8gKmRhdGFfb3V0LCB1NjQgb2Zmc2V0KTsgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX2NsZWFyKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHU2NCBvZmZzZXQsIHU2NCBsZW4pOyAqLworLypUT0RPOiB2b2lkIG9zZF9yZXFfcHVuY2goc3RydWN0IG9zZF9yZXF1ZXN0ICosCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgdTY0IG9mZnNldCwgdTY0IGxlbik7IFYyICovCisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9vYmplY3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCBlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyBvcCwKKwkvKlYyKi8gdTY0IG9mZnNldCwgLypWMiovIHU2NCBsZW4pCit7CisJaWYgKHVubGlrZWx5KG9zZF9yZXFfaXNfdmVyMShvcikgJiYgKG9mZnNldCB8fCBsZW4pKSkgeworCQlPU0RfREVCVUcoIk9TRCBWZXIxIGZsdXNoIG9uIHNwZWNpZmljIHJhbmdlIGlnbm9yZWRcbiIpOworCQlvZmZzZXQgPSAwOworCQlsZW4gPSAwOworCX0KKworCV9vc2RfcmVxX2VuY29kZV9jb21tb24ob3IsIE9TRF9BQ1RfRkxVU0gsIG9iaiwgb2Zmc2V0LCBsZW4pOworCV9vc2RfcmVxX2VuY29kZV9mbHVzaChvciwgb3ApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2ZsdXNoX29iamVjdCk7CisKK3ZvaWQgb3NkX3JlcV9yZWFkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgc3RydWN0IGJpbyAqYmlvLCB1NjQgb2Zmc2V0KQoreworCV9vc2RfcmVxX2VuY29kZV9jb21tb24ob3IsIE9TRF9BQ1RfUkVBRCwgb2JqLCBvZmZzZXQsIGJpby0+Ymlfc2l6ZSk7CisJV0FSTl9PTihvci0+aW4uYmlvIHx8IG9yLT5pbi50b3RhbF9ieXRlcyk7CisJYmlvLT5iaV9ydyAmPSB+KDEgPDwgQklPX1JXKTsKKwlvci0+aW4uYmlvID0gYmlvOworCW9yLT5pbi50b3RhbF9ieXRlcyA9IGJpby0+Ymlfc2l6ZTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9yZWFkKTsKKwordm9pZCBvc2RfcmVxX2dldF9hdHRyaWJ1dGVzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaikKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX0dFVF9BVFRSSUJVVEVTLCBvYmosIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2dldF9hdHRyaWJ1dGVzKTsKKwordm9pZCBvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaikKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX1NFVF9BVFRSSUJVVEVTLCBvYmosIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKTsKKworLyoKKyAqIEF0dHJpYnV0ZXMgTGlzdC1tb2RlCisgKi8KKworaW50IG9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgKm9hLCB1bnNpZ25lZCBuZWxlbSkKK3sKKwl1bnNpZ25lZCB0b3RhbF9ieXRlcyA9IG9yLT5zZXRfYXR0ci50b3RhbF9ieXRlczsKKwl2b2lkICphdHRyX2xhc3Q7CisJaW50IHJldDsKKworCWlmIChvci0+YXR0cmlidXRlc19tb2RlICYmCisJICAgIG9yLT5hdHRyaWJ1dGVzX21vZGUgIT0gT1NEX0NEQl9HRVRfU0VUX0FUVFJfTElTVFMpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9yLT5hdHRyaWJ1dGVzX21vZGUgPSBPU0RfQ0RCX0dFVF9TRVRfQVRUUl9MSVNUUzsKKworCWlmICghdG90YWxfYnl0ZXMpIHsgLyogZmlyc3QtdGltZTogYWxsb2NhdGUgYW5kIHB1dCBsaXN0IGhlYWRlciAqLworCQl0b3RhbF9ieXRlcyA9IF9vc2RfcmVxX3NpemVvZl9hbGlzdF9oZWFkZXIob3IpOworCQlyZXQgPSBfYWxsb2Nfc2V0X2F0dHJfbGlzdChvciwgb2EsIG5lbGVtLCB0b3RhbF9ieXRlcyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlfb3NkX3JlcV9zZXRfYWxpc3RfdHlwZShvciwgb3ItPnNldF9hdHRyLmJ1ZmYsCisJCQkJCU9TRF9BVFRSX0xJU1RfU0VUX1JFVFJJRVZFKTsKKwl9CisJYXR0cl9sYXN0ID0gb3ItPnNldF9hdHRyLmJ1ZmYgKyB0b3RhbF9ieXRlczsKKworCWZvciAoOyBuZWxlbTsgLS1uZWxlbSkgeworCQlzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9lbGVtZW50ICphdHRyOworCQl1bnNpZ25lZCBlbGVtX3NpemUgPSBfb3NkX3JlcV9hbGlzdF9lbGVtX3NpemUob3IsIG9hLT5sZW4pOworCisJCXRvdGFsX2J5dGVzICs9IGVsZW1fc2l6ZTsKKwkJaWYgKHVubGlrZWx5KG9yLT5zZXRfYXR0ci5hbGxvY19zaXplIDwgdG90YWxfYnl0ZXMpKSB7CisJCQlvci0+c2V0X2F0dHIudG90YWxfYnl0ZXMgPSB0b3RhbF9ieXRlcyAtIGVsZW1fc2l6ZTsKKwkJCXJldCA9IF9hbGxvY19zZXRfYXR0cl9saXN0KG9yLCBvYSwgbmVsZW0sIHRvdGFsX2J5dGVzKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWF0dHJfbGFzdCA9CisJCQkJb3ItPnNldF9hdHRyLmJ1ZmYgKyBvci0+c2V0X2F0dHIudG90YWxfYnl0ZXM7CisJCX0KKworCQlhdHRyID0gYXR0cl9sYXN0OworCQlhdHRyLT5hdHRyX3BhZ2UgPSBjcHVfdG9fYmUzMihvYS0+YXR0cl9wYWdlKTsKKwkJYXR0ci0+YXR0cl9pZCA9IGNwdV90b19iZTMyKG9hLT5hdHRyX2lkKTsKKwkJYXR0ci0+YXR0cl9ieXRlcyA9IGNwdV90b19iZTE2KG9hLT5sZW4pOworCQltZW1jcHkoYXR0ci0+YXR0cl92YWwsIG9hLT52YWxfcHRyLCBvYS0+bGVuKTsKKworCQlhdHRyX2xhc3QgKz0gZWxlbV9zaXplOworCQkrK29hOworCX0KKworCW9yLT5zZXRfYXR0ci50b3RhbF9ieXRlcyA9IHRvdGFsX2J5dGVzOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2FkZF9zZXRfYXR0cl9saXN0KTsKKworc3RhdGljIGludCBfYXBwZW5kX21hcF9rZXJuKHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJdm9pZCAqYnVmZiwgdW5zaWduZWQgbGVuLCBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3QgYmlvICpiaW87CisJaW50IHJldDsKKworCWJpbyA9IGJpb19tYXBfa2VybihyZXEtPnEsIGJ1ZmYsIGxlbiwgZmxhZ3MpOworCWlmIChJU19FUlIoYmlvKSkgeworCQlPU0RfRVJSKCJGYWlsZWQgYmlvX21hcF9rZXJuKCVwLCAlZCkgPT4gJWxkXG4iLCBidWZmLCBsZW4sCisJCQlQVFJfRVJSKGJpbykpOworCQlyZXR1cm4gUFRSX0VSUihiaW8pOworCX0KKwlyZXQgPSBibGtfcnFfYXBwZW5kX2JpbyhyZXEtPnEsIHJlcSwgYmlvKTsKKwlpZiAocmV0KSB7CisJCU9TRF9FUlIoIkZhaWxlZCBibGtfcnFfYXBwZW5kX2JpbyglcCkgPT4gJWRcbiIsIGJpbywgcmV0KTsKKwkJYmlvX3B1dChiaW8pOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9yZXFfYXBwZW5kX3NlZ21lbnQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl1bnNpZ25lZCBwYWRkaW5nLCBzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50ICpzZWcsCisJc3RydWN0IF9vc2RfcmVxX2RhdGFfc2VnbWVudCAqbGFzdF9zZWcsIHN0cnVjdCBfb3NkX2lvX2luZm8gKmlvKQoreworCXZvaWQgKnBhZF9idWZmOworCWludCByZXQ7CisKKwlpZiAocGFkZGluZykgeworCQkvKiBjaGVjayBpZiB3ZSBjYW4ganVzdCBhZGQgaXQgdG8gbGFzdCBidWZmZXIgKi8KKwkJaWYgKGxhc3Rfc2VnICYmCisJCSAgICAocGFkZGluZyA8PSBsYXN0X3NlZy0+YWxsb2Nfc2l6ZSAtIGxhc3Rfc2VnLT50b3RhbF9ieXRlcykpCisJCQlwYWRfYnVmZiA9IGxhc3Rfc2VnLT5idWZmICsgbGFzdF9zZWctPnRvdGFsX2J5dGVzOworCQllbHNlCisJCQlwYWRfYnVmZiA9IGlvLT5wYWRfYnVmZjsKKworCQlyZXQgPSBfYXBwZW5kX21hcF9rZXJuKGlvLT5yZXEsIHBhZF9idWZmLCBwYWRkaW5nLAorCQkJCSAgICAgICBvci0+YWxsb2NfZmxhZ3MpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJaW8tPnRvdGFsX2J5dGVzICs9IHBhZGRpbmc7CisJfQorCisJcmV0ID0gX2FwcGVuZF9tYXBfa2Vybihpby0+cmVxLCBzZWctPmJ1ZmYsIHNlZy0+dG90YWxfYnl0ZXMsCisJCQkgICAgICAgb3ItPmFsbG9jX2ZsYWdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaW8tPnRvdGFsX2J5dGVzICs9IHNlZy0+dG90YWxfYnl0ZXM7CisJT1NEX0RFQlVHKCJwYWRkaW5nPSVkIGJ1ZmY9JXAgdG90YWxfYnl0ZXM9JWRcbiIsIHBhZGRpbmcsIHNlZy0+YnVmZiwKKwkJICBzZWctPnRvdGFsX2J5dGVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfb3NkX3JlcV9maW5hbGl6ZV9zZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJc3RydWN0IG9zZF9jZGJfaGVhZCAqY2RiaCA9IG9zZF9jZGJfaGVhZCgmb3ItPmNkYik7CisJdW5zaWduZWQgcGFkZGluZzsKKwlpbnQgcmV0OworCisJaWYgKCFvci0+c2V0X2F0dHIudG90YWxfYnl0ZXMpIHsKKwkJY2RiaC0+YXR0cnNfbGlzdC5zZXRfYXR0cl9vZmZzZXQgPSBPU0RfT0ZGU0VUX1VOVVNFRDsKKwkJcmV0dXJuIDA7CisJfQorCisJY2RiaC0+YXR0cnNfbGlzdC5zZXRfYXR0cl9ieXRlcyA9IGNwdV90b19iZTMyKG9yLT5zZXRfYXR0ci50b3RhbF9ieXRlcyk7CisJY2RiaC0+YXR0cnNfbGlzdC5zZXRfYXR0cl9vZmZzZXQgPQorCQlvc2RfcmVxX2VuY29kZV9vZmZzZXQob3IsIG9yLT5vdXQudG90YWxfYnl0ZXMsICZwYWRkaW5nKTsKKworCXJldCA9IF9yZXFfYXBwZW5kX3NlZ21lbnQob3IsIHBhZGRpbmcsICZvci0+c2V0X2F0dHIsCisJCQkJICBvci0+b3V0Lmxhc3Rfc2VnLCAmb3ItPm91dCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9yLT5vdXQubGFzdF9zZWcgPSAmb3ItPnNldF9hdHRyOworCXJldHVybiAwOworfQorCitpbnQgb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2RfYXR0ciAqb2EsIHVuc2lnbmVkIG5lbGVtKQoreworCXVuc2lnbmVkIHRvdGFsX2J5dGVzID0gb3ItPmVuY19nZXRfYXR0ci50b3RhbF9ieXRlczsKKwl2b2lkICphdHRyX2xhc3Q7CisJaW50IHJldDsKKworCWlmIChvci0+YXR0cmlidXRlc19tb2RlICYmCisJICAgIG9yLT5hdHRyaWJ1dGVzX21vZGUgIT0gT1NEX0NEQl9HRVRfU0VUX0FUVFJfTElTVFMpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9yLT5hdHRyaWJ1dGVzX21vZGUgPSBPU0RfQ0RCX0dFVF9TRVRfQVRUUl9MSVNUUzsKKworCS8qIGZpcnN0IHRpbWUgY2FsYyBkYXRhLWluIGxpc3QgaGVhZGVyIHNpemUgKi8KKwlpZiAoIW9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcykKKwkJb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzID0gX29zZF9yZXFfc2l6ZW9mX2FsaXN0X2hlYWRlcihvcik7CisKKwkvKiBjYWxjIGRhdGEtb3V0IGluZm8gKi8KKwlpZiAoIXRvdGFsX2J5dGVzKSB7IC8qIGZpcnN0LXRpbWU6IGFsbG9jYXRlIGFuZCBwdXQgbGlzdCBoZWFkZXIgKi8KKwkJdW5zaWduZWQgbWF4X2J5dGVzOworCisJCXRvdGFsX2J5dGVzID0gX29zZF9yZXFfc2l6ZW9mX2FsaXN0X2hlYWRlcihvcik7CisJCW1heF9ieXRlcyA9IHRvdGFsX2J5dGVzICsKKwkJCW5lbGVtICogc2l6ZW9mKHN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2F0dHJpZCk7CisJCXJldCA9IF9hbGxvY19nZXRfYXR0cl9kZXNjKG9yLCBtYXhfYnl0ZXMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlfb3NkX3JlcV9zZXRfYWxpc3RfdHlwZShvciwgb3ItPmVuY19nZXRfYXR0ci5idWZmLAorCQkJCQlPU0RfQVRUUl9MSVNUX0dFVCk7CisJfQorCWF0dHJfbGFzdCA9IG9yLT5lbmNfZ2V0X2F0dHIuYnVmZiArIHRvdGFsX2J5dGVzOworCisJZm9yICg7IG5lbGVtOyAtLW5lbGVtKSB7CisJCXN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2F0dHJpZCAqYXR0cmlkOworCQljb25zdCB1bnNpZ25lZCBjdXJfc2l6ZSA9IHNpemVvZigqYXR0cmlkKTsKKworCQl0b3RhbF9ieXRlcyArPSBjdXJfc2l6ZTsKKwkJaWYgKHVubGlrZWx5KG9yLT5lbmNfZ2V0X2F0dHIuYWxsb2Nfc2l6ZSA8IHRvdGFsX2J5dGVzKSkgeworCQkJb3ItPmVuY19nZXRfYXR0ci50b3RhbF9ieXRlcyA9IHRvdGFsX2J5dGVzIC0gY3VyX3NpemU7CisJCQlyZXQgPSBfYWxsb2NfZ2V0X2F0dHJfZGVzYyhvciwKKwkJCQkJdG90YWxfYnl0ZXMgKyBuZWxlbSAqIHNpemVvZigqYXR0cmlkKSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlhdHRyX2xhc3QgPSBvci0+ZW5jX2dldF9hdHRyLmJ1ZmYgKworCQkJCW9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXM7CisJCX0KKworCQlhdHRyaWQgPSBhdHRyX2xhc3Q7CisJCWF0dHJpZC0+YXR0cl9wYWdlID0gY3B1X3RvX2JlMzIob2EtPmF0dHJfcGFnZSk7CisJCWF0dHJpZC0+YXR0cl9pZCA9IGNwdV90b19iZTMyKG9hLT5hdHRyX2lkKTsKKworCQlhdHRyX2xhc3QgKz0gY3VyX3NpemU7CisKKwkJLyogY2FsYyBkYXRhLWluIHNpemUgKi8KKwkJb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzICs9CisJCQlfb3NkX3JlcV9hbGlzdF9lbGVtX3NpemUob3IsIG9hLT5sZW4pOworCQkrK29hOworCX0KKworCW9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXMgPSB0b3RhbF9ieXRlczsKKworCU9TRF9ERUJVRygKKwkgICAgICAgImdldF9hdHRyLnRvdGFsX2J5dGVzPSV1KCV1KSBlbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXM9JXUoJVp1KVxuIiwKKwkgICAgICAgb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzLAorCSAgICAgICBvci0+Z2V0X2F0dHIudG90YWxfYnl0ZXMgLSBfb3NkX3JlcV9zaXplb2ZfYWxpc3RfaGVhZGVyKG9yKSwKKwkgICAgICAgb3ItPmVuY19nZXRfYXR0ci50b3RhbF9ieXRlcywKKwkgICAgICAgKG9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXMgLSBfb3NkX3JlcV9zaXplb2ZfYWxpc3RfaGVhZGVyKG9yKSkKKwkJCS8gc2l6ZW9mKHN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2F0dHJpZCkpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfYWRkX2dldF9hdHRyX2xpc3QpOworCitzdGF0aWMgaW50IF9vc2RfcmVxX2ZpbmFsaXplX2dldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlzdHJ1Y3Qgb3NkX2NkYl9oZWFkICpjZGJoID0gb3NkX2NkYl9oZWFkKCZvci0+Y2RiKTsKKwl1bnNpZ25lZCBvdXRfcGFkZGluZzsKKwl1bnNpZ25lZCBpbl9wYWRkaW5nOworCWludCByZXQ7CisKKwlpZiAoIW9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXMpIHsKKwkJY2RiaC0+YXR0cnNfbGlzdC5nZXRfYXR0cl9kZXNjX29mZnNldCA9IE9TRF9PRkZTRVRfVU5VU0VEOworCQljZGJoLT5hdHRyc19saXN0LmdldF9hdHRyX29mZnNldCA9IE9TRF9PRkZTRVRfVU5VU0VEOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBfYWxsb2NfZ2V0X2F0dHJfbGlzdChvcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRoZSBvdXQtZ29pbmcgYnVmZmVyIGluZm8gdXBkYXRlICovCisJT1NEX0RFQlVHKCJvdXQtZ29pbmdcbiIpOworCWNkYmgtPmF0dHJzX2xpc3QuZ2V0X2F0dHJfZGVzY19ieXRlcyA9CisJCWNwdV90b19iZTMyKG9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXMpOworCisJY2RiaC0+YXR0cnNfbGlzdC5nZXRfYXR0cl9kZXNjX29mZnNldCA9CisJCW9zZF9yZXFfZW5jb2RlX29mZnNldChvciwgb3ItPm91dC50b3RhbF9ieXRlcywgJm91dF9wYWRkaW5nKTsKKworCXJldCA9IF9yZXFfYXBwZW5kX3NlZ21lbnQob3IsIG91dF9wYWRkaW5nLCAmb3ItPmVuY19nZXRfYXR0ciwKKwkJCQkgIG9yLT5vdXQubGFzdF9zZWcsICZvci0+b3V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCW9yLT5vdXQubGFzdF9zZWcgPSAmb3ItPmVuY19nZXRfYXR0cjsKKworCS8qIFRoZSBpbmNvbWluZyBidWZmZXIgaW5mbyB1cGRhdGUgKi8KKwlPU0RfREVCVUcoImluLWNvbWluZ1xuIik7CisJY2RiaC0+YXR0cnNfbGlzdC5nZXRfYXR0cl9hbGxvY19sZW5ndGggPQorCQljcHVfdG9fYmUzMihvci0+Z2V0X2F0dHIudG90YWxfYnl0ZXMpOworCisJY2RiaC0+YXR0cnNfbGlzdC5nZXRfYXR0cl9vZmZzZXQgPQorCQlvc2RfcmVxX2VuY29kZV9vZmZzZXQob3IsIG9yLT5pbi50b3RhbF9ieXRlcywgJmluX3BhZGRpbmcpOworCisJcmV0ID0gX3JlcV9hcHBlbmRfc2VnbWVudChvciwgaW5fcGFkZGluZywgJm9yLT5nZXRfYXR0ciwgTlVMTCwKKwkJCQkgICZvci0+aW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJb3ItPmluLmxhc3Rfc2VnID0gJm9yLT5nZXRfYXR0cjsKKworCXJldHVybiAwOworfQorCitpbnQgb3NkX3JlcV9kZWNvZGVfZ2V0X2F0dHJfbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2RfYXR0ciAqb2EsIGludCAqbmVsZW0sIHZvaWQgKippdGVyYXRvcikKK3sKKwl1bnNpZ25lZCBjdXJfYnl0ZXMsIHJldHVybmVkX2J5dGVzOworCWludCBuOworCWNvbnN0IHVuc2lnbmVkIHNpemVvZl9hdHRyX2xpc3QgPSBfb3NkX3JlcV9zaXplb2ZfYWxpc3RfaGVhZGVyKG9yKTsKKwl2b2lkICpjdXJfcDsKKworCWlmICghX29zZF9yZXFfaXNfYWxpc3RfdHlwZShvciwgb3ItPmdldF9hdHRyLmJ1ZmYsCisJCQkJICAgIE9TRF9BVFRSX0xJU1RfU0VUX1JFVFJJRVZFKSkgeworCQlvYS0+YXR0cl9wYWdlID0gMDsKKwkJb2EtPmF0dHJfaWQgPSAwOworCQlvYS0+dmFsX3B0ciA9IE5VTEw7CisJCW9hLT5sZW4gPSAwOworCQkqaXRlcmF0b3IgPSBOVUxMOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKml0ZXJhdG9yKSB7CisJCUJVR19PTigoKml0ZXJhdG9yIDwgb3ItPmdldF9hdHRyLmJ1ZmYpIHx8CisJCSAgICAgKG9yLT5nZXRfYXR0ci5idWZmICsgb3ItPmdldF9hdHRyLmFsbG9jX3NpemUgPCAqaXRlcmF0b3IpKTsKKwkJY3VyX3AgPSAqaXRlcmF0b3I7CisJCWN1cl9ieXRlcyA9ICgqaXRlcmF0b3IgLSBvci0+Z2V0X2F0dHIuYnVmZikgLSBzaXplb2ZfYXR0cl9saXN0OworCQlyZXR1cm5lZF9ieXRlcyA9IG9yLT5nZXRfYXR0ci50b3RhbF9ieXRlczsKKwl9IGVsc2UgeyAvKiBmaXJzdCB0aW1lIGRlY29kZSB0aGUgbGlzdCBoZWFkZXIgKi8KKwkJY3VyX2J5dGVzID0gc2l6ZW9mX2F0dHJfbGlzdDsKKwkJcmV0dXJuZWRfYnl0ZXMgPSBfb3NkX3JlcV9hbGlzdF9zaXplKG9yLCBvci0+Z2V0X2F0dHIuYnVmZikgKworCQkJCQlzaXplb2ZfYXR0cl9saXN0OworCisJCWN1cl9wID0gb3ItPmdldF9hdHRyLmJ1ZmYgKyBzaXplb2ZfYXR0cl9saXN0OworCisJCWlmIChyZXR1cm5lZF9ieXRlcyA+IG9yLT5nZXRfYXR0ci5hbGxvY19zaXplKSB7CisJCQlPU0RfREVCVUcoInRhcmdldCByZXBvcnQ6IHNwYWNlIHdhcyBub3QgYmlnIGVub3VnaCEgIgorCQkJCSAgIkFsbG9jYXRlPSV1IE5lZWRlZD0ldVxuIiwKKwkJCQkgIG9yLT5nZXRfYXR0ci5hbGxvY19zaXplLAorCQkJCSAgcmV0dXJuZWRfYnl0ZXMgKyBzaXplb2ZfYXR0cl9saXN0KTsKKworCQkJcmV0dXJuZWRfYnl0ZXMgPQorCQkJCW9yLT5nZXRfYXR0ci5hbGxvY19zaXplIC0gc2l6ZW9mX2F0dHJfbGlzdDsKKwkJfQorCQlvci0+Z2V0X2F0dHIudG90YWxfYnl0ZXMgPSByZXR1cm5lZF9ieXRlczsKKwl9CisKKwlmb3IgKG4gPSAwOyAobiA8ICpuZWxlbSkgJiYgKGN1cl9ieXRlcyA8IHJldHVybmVkX2J5dGVzKTsgKytuKSB7CisJCXN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2VsZW1lbnQgKmF0dHIgPSBjdXJfcDsKKwkJdW5zaWduZWQgaW5jOworCisJCW9hLT5sZW4gPSBiZTE2X3RvX2NwdShhdHRyLT5hdHRyX2J5dGVzKTsKKwkJaW5jID0gX29zZF9yZXFfYWxpc3RfZWxlbV9zaXplKG9yLCBvYS0+bGVuKTsKKwkJT1NEX0RFQlVHKCJvYS0+bGVuPSVkIGluYz0lZCBjdXJfYnl0ZXM9JWRcbiIsCisJCQkgIG9hLT5sZW4sIGluYywgY3VyX2J5dGVzKTsKKwkJY3VyX2J5dGVzICs9IGluYzsKKwkJaWYgKGN1cl9ieXRlcyA+IHJldHVybmVkX2J5dGVzKSB7CisJCQlPU0RfRVJSKCJCQUQgRk9PRCBmcm9tIHRhcmdldC4gbGlzdCBub3QgdmFsaWQhIgorCQkJCSJjPSVkIHI9JWQgbj0lZFxuIiwKKwkJCQljdXJfYnl0ZXMsIHJldHVybmVkX2J5dGVzLCBuKTsKKwkJCW9hLT52YWxfcHRyID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJb2EtPmF0dHJfcGFnZSA9IGJlMzJfdG9fY3B1KGF0dHItPmF0dHJfcGFnZSk7CisJCW9hLT5hdHRyX2lkID0gYmUzMl90b19jcHUoYXR0ci0+YXR0cl9pZCk7CisJCW9hLT52YWxfcHRyID0gYXR0ci0+YXR0cl92YWw7CisKKwkJY3VyX3AgKz0gaW5jOworCQkrK29hOworCX0KKworCSppdGVyYXRvciA9IChyZXR1cm5lZF9ieXRlcyAtIGN1cl9ieXRlcykgPyBjdXJfcCA6IE5VTEw7CisJKm5lbGVtID0gbjsKKwlyZXR1cm4gcmV0dXJuZWRfYnl0ZXMgLSBjdXJfYnl0ZXM7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfZGVjb2RlX2dldF9hdHRyX2xpc3QpOworCisvKgorICogQXR0cmlidXRlcyBQYWdlLW1vZGUKKyAqLworCitpbnQgb3NkX3JlcV9hZGRfZ2V0X2F0dHJfcGFnZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXUzMiBwYWdlX2lkLCB2b2lkICphdHRhcl9wYWdlLCB1bnNpZ25lZCBtYXhfcGFnZV9sZW4sCisJY29uc3Qgc3RydWN0IG9zZF9hdHRyICpzZXRfb25lX2F0dHIpCit7CisJc3RydWN0IG9zZF9jZGJfaGVhZCAqY2RiaCA9IG9zZF9jZGJfaGVhZCgmb3ItPmNkYik7CisKKwlpZiAob3ItPmF0dHJpYnV0ZXNfbW9kZSAmJgorCSAgICBvci0+YXR0cmlidXRlc19tb2RlICE9IE9TRF9DREJfR0VUX0FUVFJfUEFHRV9TRVRfT05FKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvci0+YXR0cmlidXRlc19tb2RlID0gT1NEX0NEQl9HRVRfQVRUUl9QQUdFX1NFVF9PTkU7CisKKwlvci0+Z2V0X2F0dHIuYnVmZiA9IGF0dGFyX3BhZ2U7CisJb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzID0gbWF4X3BhZ2VfbGVuOworCisJb3ItPnNldF9hdHRyLmJ1ZmYgPSBzZXRfb25lX2F0dHItPnZhbF9wdHI7CisJb3ItPnNldF9hdHRyLnRvdGFsX2J5dGVzID0gc2V0X29uZV9hdHRyLT5sZW47CisKKwljZGJoLT5hdHRyc19wYWdlLmdldF9hdHRyX3BhZ2UgPSBjcHVfdG9fYmUzMihwYWdlX2lkKTsKKwljZGJoLT5hdHRyc19wYWdlLmdldF9hdHRyX2FsbG9jX2xlbmd0aCA9IGNwdV90b19iZTMyKG1heF9wYWdlX2xlbik7CisJLyogb2NkYi0+YXR0cnNfcGFnZS5nZXRfYXR0cl9vZmZzZXQ7ICovCisKKwljZGJoLT5hdHRyc19wYWdlLnNldF9hdHRyX3BhZ2UgPSBjcHVfdG9fYmUzMihzZXRfb25lX2F0dHItPmF0dHJfcGFnZSk7CisJY2RiaC0+YXR0cnNfcGFnZS5zZXRfYXR0cl9pZCA9IGNwdV90b19iZTMyKHNldF9vbmVfYXR0ci0+YXR0cl9pZCk7CisJY2RiaC0+YXR0cnNfcGFnZS5zZXRfYXR0cl9sZW5ndGggPSBjcHVfdG9fYmUzMihzZXRfb25lX2F0dHItPmxlbik7CisJLyogb2NkYi0+YXR0cnNfcGFnZS5zZXRfYXR0cl9vZmZzZXQ7ICovCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfYWRkX2dldF9hdHRyX3BhZ2UpOworCitzdGF0aWMgaW50IF9vc2RfcmVxX2ZpbmFsaXplX2F0dHJfcGFnZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXN0cnVjdCBvc2RfY2RiX2hlYWQgKmNkYmggPSBvc2RfY2RiX2hlYWQoJm9yLT5jZGIpOworCXVuc2lnbmVkIGluX3BhZGRpbmcsIG91dF9wYWRkaW5nOworCWludCByZXQ7CisKKwkvKiByZXR1cm5lZCBwYWdlICovCisJY2RiaC0+YXR0cnNfcGFnZS5nZXRfYXR0cl9vZmZzZXQgPQorCQlvc2RfcmVxX2VuY29kZV9vZmZzZXQob3IsIG9yLT5pbi50b3RhbF9ieXRlcywgJmluX3BhZGRpbmcpOworCisJcmV0ID0gX3JlcV9hcHBlbmRfc2VnbWVudChvciwgaW5fcGFkZGluZywgJm9yLT5nZXRfYXR0ciwgTlVMTCwKKwkJCQkgICZvci0+aW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgb25lIHZhbHVlICovCisJY2RiaC0+YXR0cnNfcGFnZS5zZXRfYXR0cl9vZmZzZXQgPQorCQlvc2RfcmVxX2VuY29kZV9vZmZzZXQob3IsIG9yLT5vdXQudG90YWxfYnl0ZXMsICZvdXRfcGFkZGluZyk7CisKKwlyZXQgPSBfcmVxX2FwcGVuZF9zZWdtZW50KG9yLCBvdXRfcGFkZGluZywgJm9yLT5lbmNfZ2V0X2F0dHIsIE5VTEwsCisJCQkJICAmb3ItPm91dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfb3NkX3JlcV9maW5hbGl6ZV9kYXRhX2ludGVncml0eShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWJvb2wgaGFzX2luLCBib29sIGhhc19vdXQsIGNvbnN0IHU4ICpjYXBfa2V5KQoreworCXN0cnVjdCBvc2Rfc2VjdXJpdHlfcGFyYW1ldGVycyAqc2VjX3Bhcm1zID0gX29zZF9yZXFfc2VjX3BhcmFtcyhvcik7CisJaW50IHJldDsKKworCWlmICghb3NkX2lzX3NlY19hbGxkYXRhKHNlY19wYXJtcykpCisJCXJldHVybiAwOworCisJaWYgKGhhc19vdXQpIHsKKwkJc3RydWN0IF9vc2RfcmVxX2RhdGFfc2VnbWVudCBzZWcgPSB7CisJCQkuYnVmZiA9ICZvci0+b3V0X2RhdGFfaW50ZWcsCisJCQkudG90YWxfYnl0ZXMgPSBzaXplb2Yob3ItPm91dF9kYXRhX2ludGVnKSwKKwkJfTsKKwkJdW5zaWduZWQgcGFkOworCisJCW9yLT5vdXRfZGF0YV9pbnRlZy5kYXRhX2J5dGVzID0gY3B1X3RvX2JlNjQoCisJCQlvci0+b3V0LmJpbyA/IG9yLT5vdXQuYmlvLT5iaV9zaXplIDogMCk7CisJCW9yLT5vdXRfZGF0YV9pbnRlZy5zZXRfYXR0cmlidXRlc19ieXRlcyA9IGNwdV90b19iZTY0KAorCQkJb3ItPnNldF9hdHRyLnRvdGFsX2J5dGVzKTsKKwkJb3ItPm91dF9kYXRhX2ludGVnLmdldF9hdHRyaWJ1dGVzX2J5dGVzID0gY3B1X3RvX2JlNjQoCisJCQlvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzKTsKKworCQlzZWNfcGFybXMtPmRhdGFfb3V0X2ludGVncml0eV9jaGVja19vZmZzZXQgPQorCQkJb3NkX3JlcV9lbmNvZGVfb2Zmc2V0KG9yLCBvci0+b3V0LnRvdGFsX2J5dGVzLCAmcGFkKTsKKworCQlyZXQgPSBfcmVxX2FwcGVuZF9zZWdtZW50KG9yLCBwYWQsICZzZWcsIG9yLT5vdXQubGFzdF9zZWcsCisJCQkJCSAgJm9yLT5vdXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJb3ItPm91dC5sYXN0X3NlZyA9IE5VTEw7CisKKwkJLyogdGhleSBhcmUgbm93IGFsbCBjaGFpbmVkIHRvIHJlcXVlc3Qgc2lnbiB0aGVtIGFsbCB0b2dldGhlciAqLworCQlvc2Rfc2VjX3NpZ25fZGF0YSgmb3ItPm91dF9kYXRhX2ludGVnLCBvci0+b3V0LnJlcS0+YmlvLAorCQkJCSAgY2FwX2tleSk7CisJfQorCisJaWYgKGhhc19pbikgeworCQlzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50IHNlZyA9IHsKKwkJCS5idWZmID0gJm9yLT5pbl9kYXRhX2ludGVnLAorCQkJLnRvdGFsX2J5dGVzID0gc2l6ZW9mKG9yLT5pbl9kYXRhX2ludGVnKSwKKwkJfTsKKwkJdW5zaWduZWQgcGFkOworCisJCXNlY19wYXJtcy0+ZGF0YV9pbl9pbnRlZ3JpdHlfY2hlY2tfb2Zmc2V0ID0KKwkJCW9zZF9yZXFfZW5jb2RlX29mZnNldChvciwgb3ItPmluLnRvdGFsX2J5dGVzLCAmcGFkKTsKKworCQlyZXQgPSBfcmVxX2FwcGVuZF9zZWdtZW50KG9yLCBwYWQsICZzZWcsIG9yLT5pbi5sYXN0X3NlZywKKwkJCQkJICAmb3ItPmluKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJb3ItPmluLmxhc3Rfc2VnID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG9zZF9maW5hbGl6ZV9yZXF1ZXN0IGFuZCBoZWxwZXJzCisgKi8KKworc3RhdGljIGludCBfaW5pdF9ibGtfcmVxdWVzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWJvb2wgaGFzX2luLCBib29sIGhhc19vdXQpCit7CisJZ2ZwX3QgZmxhZ3MgPSBvci0+YWxsb2NfZmxhZ3M7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSA9IG9yLT5vc2RfZGV2LT5zY3NpX2RldmljZTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNjc2lfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlyZXEgPSBibGtfZ2V0X3JlcXVlc3QocSwgaGFzX291dCwgZmxhZ3MpOworCWlmICghcmVxKQorCQlnb3RvIG91dDsKKworCW9yLT5yZXF1ZXN0ID0gcmVxOworCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKKwlyZXEtPnRpbWVvdXQgPSBvci0+dGltZW91dDsKKwlyZXEtPnJldHJpZXMgPSBvci0+cmV0cmllczsKKwlyZXEtPnNlbnNlID0gb3ItPnNlbnNlOworCXJlcS0+c2Vuc2VfbGVuID0gMDsKKworCWlmIChoYXNfb3V0KSB7CisJCW9yLT5vdXQucmVxID0gcmVxOworCQlpZiAoaGFzX2luKSB7CisJCQkvKiBhbGxvY2F0ZSBiaWRpIHJlcXVlc3QgKi8KKwkJCXJlcSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBmbGFncyk7CisJCQlpZiAoIXJlcSkgeworCQkJCU9TRF9ERUJVRygiYmxrX2dldF9yZXF1ZXN0IGZvciBiaWRpIGZhaWxlZFxuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CisJCQlvci0+aW4ucmVxID0gb3ItPnJlcXVlc3QtPm5leHRfcnEgPSByZXE7CisJCX0KKwl9IGVsc2UgaWYgKGhhc19pbikKKwkJb3ItPmluLnJlcSA9IHJlcTsKKworCXJldCA9IDA7CitvdXQ6CisJT1NEX0RFQlVHKCJvcj0lcCBoYXNfaW49JWQgaGFzX291dD0lZCA9PiAlZCwgJXBcbiIsCisJCQlvciwgaGFzX2luLCBoYXNfb3V0LCByZXQsIG9yLT5yZXF1ZXN0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb3NkX2ZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl1OCBvcHRpb25zLCBjb25zdCB2b2lkICpjYXAsIGNvbnN0IHU4ICpjYXBfa2V5KQoreworCXN0cnVjdCBvc2RfY2RiX2hlYWQgKmNkYmggPSBvc2RfY2RiX2hlYWQoJm9yLT5jZGIpOworCWJvb2wgaGFzX2luLCBoYXNfb3V0OworCWludCByZXQ7CisKKwlpZiAob3B0aW9ucyAmIE9TRF9SRVFfRlVBKQorCQljZGJoLT5vcHRpb25zIHw9IE9TRF9DREJfRlVBOworCisJaWYgKG9wdGlvbnMgJiBPU0RfUkVRX0RQTykKKwkJY2RiaC0+b3B0aW9ucyB8PSBPU0RfQ0RCX0RQTzsKKworCWlmIChvcHRpb25zICYgT1NEX1JFUV9CWVBBU1NfVElNRVNUQU1QUykKKwkJY2RiaC0+dGltZXN0YW1wX2NvbnRyb2wgPSBPU0RfQ0RCX0JZUEFTU19USU1FU1RBTVBTOworCisJb3NkX3NldF9jYXBzKCZvci0+Y2RiLCBjYXApOworCisJaGFzX2luID0gb3ItPmluLmJpbyB8fCBvci0+Z2V0X2F0dHIudG90YWxfYnl0ZXM7CisJaGFzX291dCA9IG9yLT5vdXQuYmlvIHx8IG9yLT5zZXRfYXR0ci50b3RhbF9ieXRlcyB8fAorCQlvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzOworCisJcmV0ID0gX2luaXRfYmxrX3JlcXVlc3Qob3IsIGhhc19pbiwgaGFzX291dCk7CisJaWYgKHJldCkgeworCQlPU0RfREVCVUcoIl9pbml0X2Jsa19yZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG9yLT5vdXQuYmlvKSB7CisJCXJldCA9IGJsa19ycV9hcHBlbmRfYmlvKG9yLT5yZXF1ZXN0LT5xLCBvci0+b3V0LnJlcSwKKwkJCQkJb3ItPm91dC5iaW8pOworCQlpZiAocmV0KSB7CisJCQlPU0RfREVCVUcoImJsa19ycV9hcHBlbmRfYmlvIG91dCBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlPU0RfREVCVUcoIm91dCBieXRlcz0lbGx1IChieXRlc19yZXE9JXUpXG4iLAorCQkJX0xMVShvci0+b3V0LnRvdGFsX2J5dGVzKSwgb3ItPm91dC5yZXEtPmRhdGFfbGVuKTsKKwl9CisJaWYgKG9yLT5pbi5iaW8pIHsKKwkJcmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ob3ItPnJlcXVlc3QtPnEsIG9yLT5pbi5yZXEsIG9yLT5pbi5iaW8pOworCQlpZiAocmV0KSB7CisJCQlPU0RfREVCVUcoImJsa19ycV9hcHBlbmRfYmlvIGluIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCU9TRF9ERUJVRygiaW4gYnl0ZXM9JWxsdSAoYnl0ZXNfcmVxPSV1KVxuIiwKKwkJCV9MTFUob3ItPmluLnRvdGFsX2J5dGVzKSwgb3ItPmluLnJlcS0+ZGF0YV9sZW4pOworCX0KKworCW9yLT5vdXQucGFkX2J1ZmYgPSBzZ19vdXRfcGFkX2J1ZmZlcjsKKwlvci0+aW4ucGFkX2J1ZmYgPSBzZ19pbl9wYWRfYnVmZmVyOworCisJaWYgKCFvci0+YXR0cmlidXRlc19tb2RlKQorCQlvci0+YXR0cmlidXRlc19tb2RlID0gT1NEX0NEQl9HRVRfU0VUX0FUVFJfTElTVFM7CisJY2RiaC0+Y29tbWFuZF9zcGVjaWZpY19vcHRpb25zIHw9IG9yLT5hdHRyaWJ1dGVzX21vZGU7CisJaWYgKG9yLT5hdHRyaWJ1dGVzX21vZGUgPT0gT1NEX0NEQl9HRVRfQVRUUl9QQUdFX1NFVF9PTkUpIHsKKwkJcmV0ID0gX29zZF9yZXFfZmluYWxpemVfYXR0cl9wYWdlKG9yKTsKKwl9IGVsc2UgeworCQkvKiBUT0RPOiBJIHRoaW5rIHRoYXQgZm9yIHRoZSBHRVRfQVRUUiBjb21tYW5kIHRoZXNlIDIgc2hvdWxkCisJCSAqIGJlIHJldmVyc2VkIHRvIGtlZXAgdGhlbSBpbiBleGVjdXRpb24gb3JkZXIgKGZvciBlbWJlZGVkCisJCSAqIHRhcmdldHMgd2l0aCBsb3cgbWVtb3J5IGZvb3RwcmludCkKKwkJICovCisJCXJldCA9IF9vc2RfcmVxX2ZpbmFsaXplX3NldF9hdHRyX2xpc3Qob3IpOworCQlpZiAocmV0KSB7CisJCQlPU0RfREVCVUcoIl9vc2RfcmVxX2ZpbmFsaXplX3NldF9hdHRyX2xpc3QgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBfb3NkX3JlcV9maW5hbGl6ZV9nZXRfYXR0cl9saXN0KG9yKTsKKwkJaWYgKHJldCkgeworCQkJT1NEX0RFQlVHKCJfb3NkX3JlcV9maW5hbGl6ZV9nZXRfYXR0cl9saXN0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gX29zZF9yZXFfZmluYWxpemVfZGF0YV9pbnRlZ3JpdHkob3IsIGhhc19pbiwgaGFzX291dCwgY2FwX2tleSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9zZF9zZWNfc2lnbl9jZGIoJm9yLT5jZGIsIGNhcF9rZXkpOworCisJb3ItPnJlcXVlc3QtPmNtZCA9IG9yLT5jZGIuYnVmZjsKKwlvci0+cmVxdWVzdC0+Y21kX2xlbiA9IF9vc2RfcmVxX2NkYl9sZW4ob3IpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9maW5hbGl6ZV9yZXF1ZXN0KTsKKworI2RlZmluZSBPU0RfU0VOU0VfUFJJTlQxKGZtdCwgYS4uLikgXAorCWRvIHsgXAorCQlpZiAoX19jdXJfc2Vuc2VfbmVlZF9vdXRwdXQpIFwKKwkJCU9TRF9FUlIoZm10LCAjI2EpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBPU0RfU0VOU0VfUFJJTlQyKGZtdCwgYS4uLikgT1NEX1NFTlNFX1BSSU5UMSgiICAgICIgZm10LCAjI2EpCisKK2ludCBvc2RfcmVxX2RlY29kZV9zZW5zZV9mdWxsKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJc3RydWN0IG9zZF9zZW5zZV9pbmZvICpvc2ksIGJvb2wgc2lsZW50LAorCXN0cnVjdCBvc2Rfb2JqX2lkICpiYWRfb2JqX2xpc3QgX191bnVzZWQsIGludCBtYXhfb2JqIF9fdW51c2VkLAorCXN0cnVjdCBvc2RfYXR0ciAqYmFkX2F0dHJfbGlzdCwgaW50IG1heF9hdHRyKQoreworCWludCBzZW5zZV9sZW4sIG9yaWdpbmFsX3NlbnNlX2xlbjsKKwlzdHJ1Y3Qgb3NkX3NlbnNlX2luZm8gbG9jYWxfb3NpOworCXN0cnVjdCBzY3NpX3NlbnNlX2Rlc2NyaXB0b3JfYmFzZWQgKnNzZGI7CisJdm9pZCAqY3VyX2Rlc2NyaXB0b3I7CisjaWYgKENPTkZJR19TQ1NJX09TRF9EUFJJTlRfU0VOU0UgPT0gMCkKKwljb25zdCBib29sIF9fY3VyX3NlbnNlX25lZWRfb3V0cHV0ID0gZmFsc2U7CisjZWxzZQorCWJvb2wgX19jdXJfc2Vuc2VfbmVlZF9vdXRwdXQgPSAhc2lsZW50OworI2VuZGlmCisKKwlpZiAoIW9yLT5yZXF1ZXN0LT5lcnJvcnMpCisJCXJldHVybiAwOworCisJc3NkYiA9IG9yLT5yZXF1ZXN0LT5zZW5zZTsKKwlzZW5zZV9sZW4gPSBvci0+cmVxdWVzdC0+c2Vuc2VfbGVuOworCWlmICgoc2Vuc2VfbGVuIDwgKGludClzaXplb2YoKnNzZGIpIHx8ICFzc2RiLT5zZW5zZV9rZXkpKSB7CisJCU9TRF9FUlIoIkJsb2NrLWxheWVyIHJldHVybmVkIGVycm9yKDB4JXgpIGJ1dCAiCisJCQkic2Vuc2VfbGVuKCV1KSB8fCBrZXkoJWQpIGlzIGVtcHR5XG4iLAorCQkJb3ItPnJlcXVlc3QtPmVycm9ycywgc2Vuc2VfbGVuLCBzc2RiLT5zZW5zZV9rZXkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoKHNzZGItPnJlc3BvbnNlX2NvZGUgIT0gMHg3MikgJiYgKHNzZGItPnJlc3BvbnNlX2NvZGUgIT0gMHg3MykpIHsKKwkJT1NEX0VSUigiVW5yZWNvZ25pemVkIHNjc2kgc2Vuc2U6IHJjb2RlPSV4IGxlbmd0aD0lZFxuIiwKKwkJCXNzZGItPnJlc3BvbnNlX2NvZGUsIHNlbnNlX2xlbik7CisJCXJldHVybiAtRUlPOworCX0KKworCW9zaSA9IG9zaSA/IDogJmxvY2FsX29zaTsKKwltZW1zZXQob3NpLCAwLCBzaXplb2YoKm9zaSkpOworCW9zaS0+a2V5ID0gc3NkYi0+c2Vuc2Vfa2V5OworCW9zaS0+YWRkaXRpb25hbF9jb2RlID0gYmUxNl90b19jcHUoc3NkYi0+YWRkaXRpb25hbF9zZW5zZV9jb2RlKTsKKwlvcmlnaW5hbF9zZW5zZV9sZW4gPSBzc2RiLT5hZGRpdGlvbmFsX3NlbnNlX2xlbmd0aCArIDg7CisKKyNpZiAoQ09ORklHX1NDU0lfT1NEX0RQUklOVF9TRU5TRSA9PSAxKQorCWlmIChfX2N1cl9zZW5zZV9uZWVkX291dHB1dCkKKwkJX19jdXJfc2Vuc2VfbmVlZF9vdXRwdXQgPSAob3NpLT5rZXkgPiBzY3NpX3NrX3JlY292ZXJlZF9lcnJvcik7CisjZW5kaWYKKwlPU0RfU0VOU0VfUFJJTlQxKCJNYWluIFNlbnNlIGluZm9ybWF0aW9uIGtleT0weCV4IGxlbmd0aCglZCwgJWQpICIKKwkJCSJhZGRpdGlvbmFsX2NvZGU9MHgleFxuIiwKKwkJCW9zaS0+a2V5LCBvcmlnaW5hbF9zZW5zZV9sZW4sIHNlbnNlX2xlbiwKKwkJCW9zaS0+YWRkaXRpb25hbF9jb2RlKTsKKworCWlmIChvcmlnaW5hbF9zZW5zZV9sZW4gPCBzZW5zZV9sZW4pCisJCXNlbnNlX2xlbiA9IG9yaWdpbmFsX3NlbnNlX2xlbjsKKworCWN1cl9kZXNjcmlwdG9yID0gc3NkYi0+c3NkOworCXNlbnNlX2xlbiAtPSBzaXplb2YoKnNzZGIpOworCXdoaWxlIChzZW5zZV9sZW4gPiAwKSB7CisJCXN0cnVjdCBzY3NpX3NlbnNlX2Rlc2NyaXB0b3IgKnNzZCA9IGN1cl9kZXNjcmlwdG9yOworCQlpbnQgY3VyX2xlbiA9IHNzZC0+YWRkaXRpb25hbF9sZW5ndGggKyAyOworCisJCXNlbnNlX2xlbiAtPSBjdXJfbGVuOworCisJCWlmIChzZW5zZV9sZW4gPCAwKQorCQkJYnJlYWs7IC8qIHNlbnNlIHdhcyB0cnVuY2F0ZWQgKi8KKworCQlzd2l0Y2ggKHNzZC0+ZGVzY3JpcHRvcl90eXBlKSB7CisJCWNhc2Ugc2NzaV9zZW5zZV9pbmZvcm1hdGlvbjoKKwkJY2FzZSBzY3NpX3NlbnNlX2NvbW1hbmRfc3BlY2lmaWNfaW5mb3JtYXRpb246CisJCXsKKwkJCXN0cnVjdCBzY3NpX3NlbnNlX2NvbW1hbmRfc3BlY2lmaWNfZGF0YV9kZXNjcmlwdG9yCisJCQkJKnNzY2QgPSBjdXJfZGVzY3JpcHRvcjsKKworCQkJb3NpLT5jb21tYW5kX2luZm8gPQorCQkJCWdldF91bmFsaWduZWRfYmU2NCgmc3NjZC0+aW5mb3JtYXRpb24pIDsKKwkJCU9TRF9TRU5TRV9QUklOVDIoCisJCQkJImNvbW1hbmRfc3BlY2lmaWNfaW5mb3JtYXRpb24gMHglbGx4IFxuIiwKKwkJCQlfTExVKG9zaS0+Y29tbWFuZF9pbmZvKSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIHNjc2lfc2Vuc2Vfa2V5X3NwZWNpZmljOgorCQl7CisJCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9rZXlfc3BlY2lmaWNfZGF0YV9kZXNjcmlwdG9yCisJCQkJKnNza3MgPSBjdXJfZGVzY3JpcHRvcjsKKworCQkJb3NpLT5zZW5zZV9pbmZvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZzc2tzLT52YWx1ZSk7CisJCQlPU0RfU0VOU0VfUFJJTlQyKAorCQkJCSJzZW5zZV9rZXlfc3BlY2lmaWNfaW5mb3JtYXRpb24gJXUiCisJCQkJInNrc3ZfY2RfYnB2X2JwICgweCV4KVxuIiwKKwkJCQlvc2ktPnNlbnNlX2luZm8sIHNza3MtPnNrc3ZfY2RfYnB2X2JwKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2Ugb3NkX3NlbnNlX29iamVjdF9pZGVudGlmaWNhdGlvbjoKKwkJeyAvKkZJWE1FOiBLZWVwIGZpcnN0IG5vdCBsYXN0LCBTdG9yZSBpbiBhcnJheSovCisJCQlzdHJ1Y3Qgb3NkX3NlbnNlX2lkZW50aWZpY2F0aW9uX2RhdGFfZGVzY3JpcHRvcgorCQkJCSpvc2lkZCA9IGN1cl9kZXNjcmlwdG9yOworCisJCQlvc2ktPm5vdF9pbml0aWF0ZWRfY29tbWFuZF9mdW5jdGlvbnMgPQorCQkJCWxlMzJfdG9fY3B1KG9zaWRkLT5ub3RfaW5pdGlhdGVkX2Z1bmN0aW9ucyk7CisJCQlvc2ktPmNvbXBsZXRlZF9jb21tYW5kX2Z1bmN0aW9ucyA9CisJCQkJbGUzMl90b19jcHUob3NpZGQtPmNvbXBsZXRlZF9mdW5jdGlvbnMpOworCQkJb3NpLT5vYmoucGFydGl0aW9uID0gYmU2NF90b19jcHUob3NpZGQtPnBhcnRpdGlvbl9pZCk7CisJCQlvc2ktPm9iai5pZCA9IGJlNjRfdG9fY3B1KG9zaWRkLT5vYmplY3RfaWQpOworCQkJT1NEX1NFTlNFX1BSSU5UMigKKwkJCQkib2JqZWN0X2lkZW50aWZpY2F0aW9uIHBpZD0weCVsbHggb2lkPTB4JWxseFxuIiwKKwkJCQlfTExVKG9zaS0+b2JqLnBhcnRpdGlvbiksIF9MTFUob3NpLT5vYmouaWQpKTsKKwkJCU9TRF9TRU5TRV9QUklOVDIoCisJCQkJIm5vdF9pbml0aWF0ZWRfYml0cygleCkgIgorCQkJCSJjb21wbGV0ZWRfY29tbWFuZF9iaXRzKCV4KVxuIiwKKwkJCQlvc2ktPm5vdF9pbml0aWF0ZWRfY29tbWFuZF9mdW5jdGlvbnMsCisJCQkJb3NpLT5jb21wbGV0ZWRfY29tbWFuZF9mdW5jdGlvbnMpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBvc2Rfc2Vuc2VfcmVzcG9uc2VfaW50ZWdyaXR5X2NoZWNrOgorCQl7CisJCQlzdHJ1Y3Qgb3NkX3NlbnNlX3Jlc3BvbnNlX2ludGVncml0eV9jaGVja19kZXNjcmlwdG9yCisJCQkJKm9zcmljZCA9IGN1cl9kZXNjcmlwdG9yOworCQkJY29uc3QgdW5zaWduZWQgbGVuID0KKwkJCQkJICBzaXplb2Yob3NyaWNkLT5pbnRlZ3JpdHlfY2hlY2tfdmFsdWUpOworCQkJY2hhciBrZXlfZHVtcFtsZW4qNCArIDJdOyAvKiAybmliYmxlcytzcGFjZStBU0NJSSAqLworCisJCQloZXhfZHVtcF90b19idWZmZXIob3NyaWNkLT5pbnRlZ3JpdHlfY2hlY2tfdmFsdWUsIGxlbiwKKwkJCQkgICAgICAgMzIsIDEsIGtleV9kdW1wLCBzaXplb2Yoa2V5X2R1bXApLCB0cnVlKTsKKwkJCU9TRF9TRU5TRV9QUklOVDIoInJlc3BvbnNlX2ludGVncml0eSBbJXNdXG4iLCBrZXlfZHVtcCk7CisJCX0KKwkJY2FzZSBvc2Rfc2Vuc2VfYXR0cmlidXRlX2lkZW50aWZpY2F0aW9uOgorCQl7CisJCQlzdHJ1Y3Qgb3NkX3NlbnNlX2F0dHJpYnV0ZXNfZGF0YV9kZXNjcmlwdG9yCisJCQkJKm9zYWRkID0gY3VyX2Rlc2NyaXB0b3I7CisJCQlpbnQgbGVuID0gbWluKGN1cl9sZW4sIHNlbnNlX2xlbik7CisJCQlpbnQgaSA9IDA7CisJCQlzdHJ1Y3Qgb3NkX3NlbnNlX2F0dHIgKnBhdHRyID0gb3NhZGQtPnNlbnNlX2F0dHJzOworCisJCQl3aGlsZSAobGVuIDwgMCkgeworCQkJCXUzMiBhdHRyX3BhZ2UgPSBiZTMyX3RvX2NwdShwYXR0ci0+YXR0cl9wYWdlKTsKKwkJCQl1MzIgYXR0cl9pZCA9IGJlMzJfdG9fY3B1KHBhdHRyLT5hdHRyX2lkKTsKKworCQkJCWlmIChpKysgPT0gMCkgeworCQkJCQlvc2ktPmF0dHIuYXR0cl9wYWdlID0gYXR0cl9wYWdlOworCQkJCQlvc2ktPmF0dHIuYXR0cl9pZCA9IGF0dHJfaWQ7CisJCQkJfQorCisJCQkJaWYgKGJhZF9hdHRyX2xpc3QgJiYgbWF4X2F0dHIpIHsKKwkJCQkJYmFkX2F0dHJfbGlzdC0+YXR0cl9wYWdlID0gYXR0cl9wYWdlOworCQkJCQliYWRfYXR0cl9saXN0LT5hdHRyX2lkID0gYXR0cl9pZDsKKwkJCQkJYmFkX2F0dHJfbGlzdCsrOworCQkJCQltYXhfYXR0ci0tOworCQkJCX0KKwkJCQlPU0RfU0VOU0VfUFJJTlQyKAorCQkJCQkib3NkX3NlbnNlX2F0dHJpYnV0ZV9pZGVudGlmaWNhdGlvbiIKKwkJCQkJImF0dHJfcGFnZT0weCV4IGF0dHJfaWQ9MHgleFxuIiwKKwkJCQkJYXR0cl9wYWdlLCBhdHRyX2lkKTsKKwkJCX0KKwkJfQorCQkvKlRoZXNlIGFyZSBub3QgbGVnYWwgZm9yIE9TRCovCisJCWNhc2Ugc2NzaV9zZW5zZV9maWVsZF9yZXBsYWNlYWJsZV91bml0OgorCQkJT1NEX1NFTlNFX1BSSU5UMigic2NzaV9zZW5zZV9maWVsZF9yZXBsYWNlYWJsZV91bml0XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIHNjc2lfc2Vuc2Vfc3RyZWFtX2NvbW1hbmRzOgorCQkJT1NEX1NFTlNFX1BSSU5UMigic2NzaV9zZW5zZV9zdHJlYW1fY29tbWFuZHNcbiIpOworCQkJYnJlYWs7CisJCWNhc2Ugc2NzaV9zZW5zZV9ibG9ja19jb21tYW5kczoKKwkJCU9TRF9TRU5TRV9QUklOVDIoInNjc2lfc2Vuc2VfYmxvY2tfY29tbWFuZHNcbiIpOworCQkJYnJlYWs7CisJCWNhc2Ugc2NzaV9zZW5zZV9hdGFfcmV0dXJuOgorCQkJT1NEX1NFTlNFX1BSSU5UMigic2NzaV9zZW5zZV9hdGFfcmV0dXJuXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKHNzZC0+ZGVzY3JpcHRvcl90eXBlIDw9IHNjc2lfc2Vuc2VfUmVzZXJ2ZWRfbGFzdCkKKwkJCQlPU0RfU0VOU0VfUFJJTlQyKAorCQkJCQkic2NzaV9zZW5zZSBSZXNlcnZlZCBkZXNjcmlwdG9yICgweCV4KSIsCisJCQkJCXNzZC0+ZGVzY3JpcHRvcl90eXBlKTsKKwkJCWVsc2UKKwkJCQlPU0RfU0VOU0VfUFJJTlQyKAorCQkJCQkic2NzaV9zZW5zZSBWZW5kb3IgZGVzY3JpcHRvciAoMHgleCkiLAorCQkJCQlzc2QtPmRlc2NyaXB0b3JfdHlwZSk7CisJCX0KKworCQljdXJfZGVzY3JpcHRvciArPSBjdXJfbGVuOworCX0KKworCXJldHVybiAob3NpLT5rZXkgPiBzY3NpX3NrX3JlY292ZXJlZF9lcnJvcikgPyAtRUlPIDogMDsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9kZWNvZGVfc2Vuc2VfZnVsbCk7CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBvc2Rfc2VjLmggQVBJCisgKiBUT0RPOiBNb3ZlIHRvIGEgc2VwYXJhdGUgb3NkX3NlYy5jIGZpbGUgYXQgYSBsYXRlciBzdGFnZS4KKyAqLworCitlbnVtIHsgT1NEX1NFQ19DQVBfVjFfQUxMX0NBUFMgPQorCU9TRF9TRUNfQ0FQX0FQUEVORCB8IE9TRF9TRUNfQ0FQX09CSl9NR01UIHwgT1NEX1NFQ19DQVBfUkVNT1ZFICAgfAorCU9TRF9TRUNfQ0FQX0NSRUFURSB8IE9TRF9TRUNfQ0FQX1NFVF9BVFRSIHwgT1NEX1NFQ19DQVBfR0VUX0FUVFIgfAorCU9TRF9TRUNfQ0FQX1dSSVRFICB8IE9TRF9TRUNfQ0FQX1JFQUQgICAgIHwgT1NEX1NFQ19DQVBfUE9MX1NFQyAgfAorCU9TRF9TRUNfQ0FQX0dMT0JBTCB8IE9TRF9TRUNfQ0FQX0RFVl9NR01UCit9OworCitlbnVtIHsgT1NEX1NFQ19DQVBfVjJfQUxMX0NBUFMgPQorCU9TRF9TRUNfQ0FQX1YxX0FMTF9DQVBTIHwgT1NEX1NFQ19DQVBfUVVFUlkgfCBPU0RfU0VDX0NBUF9NX09CSkVDVAorfTsKKwordm9pZCBvc2Rfc2VjX2luaXRfbm9zZWNfZG9hbGxfY2Fwcyh2b2lkICpjYXBzLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIGJvb2wgaXNfY29sbGVjdGlvbiwgY29uc3QgYm9vbCBpc192MSkKK3sKKwlzdHJ1Y3Qgb3NkX2NhcGFiaWxpdHkgKmNhcCA9IGNhcHM7CisJdTggdHlwZTsKKwl1OCBkZXNjcmlwdG9yX3R5cGU7CisKKwlpZiAobGlrZWx5KG9iai0+aWQpKSB7CisJCWlmICh1bmxpa2VseShpc19jb2xsZWN0aW9uKSkgeworCQkJdHlwZSA9IE9TRF9TRUNfT0JKX0NPTExFQ1RJT047CisJCQlkZXNjcmlwdG9yX3R5cGUgPSBpc192MSA/IE9TRF9TRUNfT0JKX0RFU0NfT0JKIDoKKwkJCQkJCSAgT1NEX1NFQ19PQkpfREVTQ19DT0w7CisJCX0gZWxzZSB7CisJCQl0eXBlID0gT1NEX1NFQ19PQkpfVVNFUjsKKwkJCWRlc2NyaXB0b3JfdHlwZSA9IE9TRF9TRUNfT0JKX0RFU0NfT0JKOworCQl9CisJCVdBUk5fT04oIW9iai0+cGFydGl0aW9uKTsKKwl9IGVsc2UgeworCQl0eXBlID0gb2JqLT5wYXJ0aXRpb24gPyBPU0RfU0VDX09CSl9QQVJUSVRJT04gOgorCQkJCQlPU0RfU0VDX09CSl9ST09UOworCQlkZXNjcmlwdG9yX3R5cGUgPSBPU0RfU0VDX09CSl9ERVNDX1BBUjsKKwl9CisKKwltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCisJY2FwLT5oLmZvcm1hdCA9IE9TRF9TRUNfQ0FQX0ZPUk1BVF9WRVIxOworCWNhcC0+aC5pbnRlZ3JpdHlfYWxnb3JpdGhtX19rZXlfdmVyc2lvbiA9IDA7IC8qIE1BS0VfQllURSgwLCAwKTsgKi8KKwljYXAtPmguc2VjdXJpdHlfbWV0aG9kID0gT1NEX1NFQ19OT1NFQzsKKy8qCWNhcC0+ZXhwaXJhdGlvbl90aW1lOworCWNhcC0+QVVESVRbMzAtMTBdOworCWNhcC0+ZGlzY3JpbWluYXRvcls0Mi0zMF07CisJY2FwLT5vYmplY3RfY3JlYXRlZF90aW1lOyAqLworCWNhcC0+aC5vYmplY3RfdHlwZSA9IHR5cGU7CisJb3NkX3NlY19zZXRfY2FwcygmY2FwLT5oLCBPU0RfU0VDX0NBUF9WMV9BTExfQ0FQUyk7CisJY2FwLT5oLm9iamVjdF9kZXNjcmlwdG9yX3R5cGUgPSBkZXNjcmlwdG9yX3R5cGU7CisJY2FwLT5vZC5vYmpfZGVzYy5wb2xpY3lfYWNjZXNzX3RhZyA9IDA7CisJY2FwLT5vZC5vYmpfZGVzYy5hbGxvd2VkX3BhcnRpdGlvbl9pZCA9IGNwdV90b19iZTY0KG9iai0+cGFydGl0aW9uKTsKKwljYXAtPm9kLm9ial9kZXNjLmFsbG93ZWRfb2JqZWN0X2lkID0gY3B1X3RvX2JlNjQob2JqLT5pZCk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9zZWNfaW5pdF9ub3NlY19kb2FsbF9jYXBzKTsKKworLyogRklYTUU6IEV4dHJhY3QgdmVyc2lvbiBmcm9tIGNhcHMgcG9pbnRlci4KKyAqICAgICAgICBBbHNvIFBldGUncyB0YXJnZXQgb25seSBzdXBwb3J0cyBjYXBzIGZyb20gT1NEdjEgZm9yIG5vdworICovCit2b2lkIG9zZF9zZXRfY2FwcyhzdHJ1Y3Qgb3NkX2NkYiAqY2RiLCBjb25zdCB2b2lkICpjYXBzKQoreworCWJvb2wgaXNfdmVyMSA9IHRydWU7CisJLyogTk9URTogVGhleSBzdGFydCBhdCBzYW1lIGFkZHJlc3MgKi8KKwltZW1jcHkoJmNkYi0+djEuY2FwcywgY2FwcywgaXNfdmVyMSA/IE9TRHYxX0NBUF9MRU4gOiBPU0RfQ0FQX0xFTik7Cit9CisKK2Jvb2wgb3NkX2lzX3NlY19hbGxkYXRhKHN0cnVjdCBvc2Rfc2VjdXJpdHlfcGFyYW1ldGVycyAqc2VjX3Bhcm1zIF9fdW51c2VkKQoreworCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBvc2Rfc2VjX3NpZ25fY2RiKHN0cnVjdCBvc2RfY2RiICpvY2RiIF9fdW51c2VkLCBjb25zdCB1OCAqY2FwX2tleSBfX3VudXNlZCkKK3sKK30KKwordm9pZCBvc2Rfc2VjX3NpZ25fZGF0YSh2b2lkICpkYXRhX2ludGVnIF9fdW51c2VkLAorCQkgICAgICAgc3RydWN0IGJpbyAqYmlvIF9fdW51c2VkLCBjb25zdCB1OCAqY2FwX2tleSBfX3VudXNlZCkKK3sKK30KKworLyoKKyAqIERlY2xhcmVkIGluIG9zZF9wcm90b2NvbC5oCisgKiA0LjEyLjUgRGF0YS1JbiBhbmQgRGF0YS1PdXQgYnVmZmVyIG9mZnNldHMKKyAqIGJ5dGUgb2Zmc2V0ID0gbWFudGlzc2EgKiAoMl4oZXhwb25lbnQrOCkpCisgKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCBhbGxvd2VkIGVuY29kZWQgb2Zmc2V0IHRoYXQgY29udGFpbnMgZ2l2ZW4gQG9mZnNldAorICogVGhlIGFjdHVhbCBlbmNvZGVkIG9mZnNldCByZXR1cm5lZCBpcyBAb2Zmc2V0ICsgKkBwYWRkaW5nLgorICovCitvc2RfY2RiX29mZnNldCBfX29zZF9lbmNvZGVfb2Zmc2V0KAorCXU2NCBvZmZzZXQsIHVuc2lnbmVkICpwYWRkaW5nLCBpbnQgbWluX3NoaWZ0LCBpbnQgbWF4X3NoaWZ0KQoreworCXU2NCB0cnlfb2Zmc2V0ID0gLTEsIG1vZCwgYWxpZ247CisJb3NkX2NkYl9vZmZzZXQgYmUzMl9vZmZzZXQ7CisJaW50IHNoaWZ0OworCisJKnBhZGRpbmcgPSAwOworCWlmICghb2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCWZvciAoc2hpZnQgPSBtaW5fc2hpZnQ7IHNoaWZ0IDwgbWF4X3NoaWZ0OyArK3NoaWZ0KSB7CisJCXRyeV9vZmZzZXQgPSBvZmZzZXQgPj4gc2hpZnQ7CisJCWlmICh0cnlfb2Zmc2V0IDwgKDEgPDwgT1NEX09GRlNFVF9NQVhfQklUUykpCisJCQlicmVhazsKKwl9CisKKwlCVUdfT04oc2hpZnQgPT0gbWF4X3NoaWZ0KTsKKworCWFsaWduID0gMSA8PCBzaGlmdDsKKwltb2QgPSBvZmZzZXQgJiAoYWxpZ24gLSAxKTsKKwlpZiAobW9kKSB7CisJCSpwYWRkaW5nID0gYWxpZ24gLSBtb2Q7CisJCXRyeV9vZmZzZXQgKz0gMTsKKwl9CisKKwl0cnlfb2Zmc2V0IHw9ICgoc2hpZnQgLSA4KSAmIDB4ZikgPDwgMjg7CisJYmUzMl9vZmZzZXQgPSBjcHVfdG9fYmUzMigodTMyKXRyeV9vZmZzZXQpOworCisJT1NEX0RFQlVHKCJvZmZzZXQ9JWxsdSBtYW50aXNzYT0lbGx1IGV4cD0lZCBlbmNvZGVkPSV4IHBhZD0lZFxuIiwKKwkJIF9MTFUob2Zmc2V0KSwgX0xMVSh0cnlfb2Zmc2V0ICYgMHgwRkZGRkZGRiksIHNoaWZ0LAorCQkgYmUzMl9vZmZzZXQsICpwYWRkaW5nKTsKKwlyZXR1cm4gYmUzMl9vZmZzZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL29zZF91bGQuYyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjFhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvb3NkL29zZF91bGQuYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIG9zZF91bGQuYyAtIE9TRCBVcHBlciBMYXllciBEcml2ZXIKKyAqCisgKiBBIExpbnV4IGRyaXZlciBtb2R1bGUgdGhhdCByZWdpc3RlcnMgYXMgYSBTQ1NJIFVMRCBhbmQgcHJvYmVzCisgKiBmb3IgT1NEIHR5cGUgU0NTSSBkZXZpY2VzLgorICogSXQncyBtYWluIGZ1bmN0aW9uIGlzIHRvIGV4cG9ydCBvc2QgZGV2aWNlcyB0byBpbi1rZXJuZWwgdXNlcnMgbGlrZQorICogb3NkZnMgYW5kIHBORlMtb2JqZWN0cy1MRC4gSXQgYWxzbyBwcm92aWRlcyBvbmUgaW9jdGwgZm9yIHJ1bm5pbmcKKyAqIGluIEtlcm5lbCB0ZXN0cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKiAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQYW5hc2FzIGNvbXBhbnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RyaXZlci5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaW9jdGwuaD4KKworI2luY2x1ZGUgPHNjc2kvb3NkX2luaXRpYXRvci5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX3NlYy5oPgorCisjaW5jbHVkZSAib3NkX2RlYnVnLmgiCisKKyNpZm5kZWYgVFlQRV9PU0QKKyMgIGRlZmluZSBUWVBFX09TRCAweDExCisjZW5kaWYKKworI2lmbmRlZiBTQ1NJX09TRF9NQUpPUgorIyAgZGVmaW5lIFNDU0lfT1NEX01BSk9SIDI2MAorI2VuZGlmCisjZGVmaW5lIFNDU0lfT1NEX01BWF9NSU5PUiA2NAorCitzdGF0aWMgY29uc3QgY2hhciBvc2RfbmFtZVtdID0gIm9zZCI7CitzdGF0aWMgY29uc3QgY2hhciAqb3NkX3ZlcnNpb25fc3RyaW5nID0gIm9wZW4tb3NkIDAuMS4wIjsKK2NvbnN0IGNoYXIgb3NkX3N5bWxpbmtbXSA9ICJzY3NpX29zZCI7CisKK01PRFVMRV9BVVRIT1IoIkJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIm9wZW4tb3NkIFVwcGVyLUxheWVyLURyaXZlciBvc2Qua28iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKFNDU0lfT1NEX01BSk9SKTsKK01PRFVMRV9BTElBU19TQ1NJX0RFVklDRShUWVBFX09TRCk7CisKK3N0cnVjdCBvc2RfdWxkX2RldmljZSB7CisJaW50IG1pbm9yOworCXN0cnVjdCBrcmVmIGtyZWY7CisJc3RydWN0IGNkZXYgY2RldjsKKwlzdHJ1Y3Qgb3NkX2RldiBvZDsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlzdHJ1Y3QgZGV2aWNlICpjbGFzc19tZW1iZXI7Cit9OworCitzdGF0aWMgdm9pZCBfX3VsZF9nZXQoc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQpOworc3RhdGljIHZvaWQgX191bGRfcHV0KHN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkKTsKKworLyoKKyAqIENoYXIgRGV2aWNlIG9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgaW50IG9zZF91bGRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZCA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LAorCQkJCQlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UsIGNkZXYpOworCisJX191bGRfZ2V0KG91ZCk7CisJLyogY2FjaGUgb3NkX3VsZF9kZXZpY2Ugb24gZmlsZSBoYW5kbGUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBvdWQ7CisJT1NEX0RFQlVHKCJvc2RfdWxkX29wZW4gJXBcbiIsIG91ZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3NkX3VsZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJT1NEX0RFQlVHKCJvc2RfdWxkX3JlbGVhc2UgJXBcbiIsIGZpbGUtPnByaXZhdGVfZGF0YSk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlfX3VsZF9wdXQob3VkKTsKKwlyZXR1cm4gMDsKK30KKworLyogRklYTUU6IE9ubHkgb25lIHZlY3RvciBmb3Igbm93ICovCit1bnNpZ25lZCBnX3Rlc3RfaW9jdGw7Citkb190ZXN0X2ZuICpnX2RvX3Rlc3Q7CisKK2ludCBvc2R1bGRfcmVnaXN0ZXJfdGVzdCh1bnNpZ25lZCBpb2N0bCwgZG9fdGVzdF9mbiAqZG9fdGVzdCkKK3sKKwlpZiAoZ190ZXN0X2lvY3RsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdfdGVzdF9pb2N0bCA9IGlvY3RsOworCWdfZG9fdGVzdCA9IGRvX3Rlc3Q7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG9zZHVsZF9yZWdpc3Rlcl90ZXN0KTsKKwordm9pZCBvc2R1bGRfdW5yZWdpc3Rlcl90ZXN0KHVuc2lnbmVkIGlvY3RsKQoreworCWlmIChpb2N0bCA9PSBnX3Rlc3RfaW9jdGwpIHsKKwkJZ190ZXN0X2lvY3RsID0gMDsKKwkJZ19kb190ZXN0ID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG9zZHVsZF91bnJlZ2lzdGVyX3Rlc3QpOworCitzdGF0aWMgZG9fdGVzdF9mbiAqX2ZpbmRfaW9jdGwodW5zaWduZWQgY21kKQoreworCWlmIChnX3Rlc3RfaW9jdGwgPT0gY21kKQorCQlyZXR1cm4gZ19kb190ZXN0OworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBsb25nIG9zZF91bGRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKwlkb190ZXN0X2ZuICpkb190ZXN0OworCisJZG9fdGVzdCA9IF9maW5kX2lvY3RsKGNtZCk7CisJaWYgKGRvX3Rlc3QpCisJCXJldCA9IGRvX3Rlc3QoJm91ZC0+b2QsIGNtZCwgYXJnKTsKKwllbHNlIHsKKwkJT1NEX0VSUigiVW5rbm93biBpb2N0bCAlZDogb3NkX3VsZF9kZXZpY2U9JXBcbiIsIGNtZCwgb3VkKTsKKwkJcmV0ID0gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvc2RfZm9wcyA9IHsKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSBvc2RfdWxkX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gb3NkX3VsZF9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IG9zZF91bGRfaW9jdGwsCit9OworCitzdHJ1Y3Qgb3NkX2RldiAqb3NkdWxkX3BhdGhfbG9va3VwKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBjZGV2ICpjZGV2OworCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqdW5pbml0aWFsaXplZF92YXIob3VkKTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXBhdGggfHwgISpwYXRoKSB7CisJCU9TRF9FUlIoIk1vdW50IHdpdGggIXBhdGggfHwgISpwYXRoXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJZXJyb3IgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOworCWlmIChlcnJvcikgeworCQlPU0RfRVJSKCJwYXRoX2xvb2t1cCBvZiAlcyBmYWlsZD0+JWRcbiIsIHBhdGgsIGVycm9yKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCX0KKworCWlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CisJZXJyb3IgPSAtRUlOVkFMOyAvKiBOb3QgdGhlIHJpZ2h0IGRldmljZSBlLmcgb3NkX3VsZF9kZXZpY2UgKi8KKwlpZiAoIVNfSVNDSFIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJT1NEX0RFQlVHKCIhU19JU0NIUigpXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJY2RldiA9IGlub2RlLT5pX2NkZXY7CisJaWYgKCFjZGV2KSB7CisJCU9TRF9FUlIoIkJlZm9yZSBtb3VudGluZyBhbiBPU0QgQmFzZWQgZmlsZXN5c3RlbVxuIik7CisJCU9TRF9FUlIoIiAgdXNlci1tb2RlIG11c3Qgb3BlbitjbG9zZSB0aGUgJXMgZGV2aWNlXG4iLCBwYXRoKTsKKwkJT1NEX0VSUigiICBFeGFtcGxlOiBiYXNoOiBlY2hvIDwgJXNcbiIsIHBhdGgpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUaGUgTWFnaWMgd2FuZC4gSXMgaXQgb3VyIGNoYXItZGV2ICovCisJLyogVE9ETzogU3VwcG9ydCBzZyBkZXZpY2VzICovCisJaWYgKGNkZXYtPm93bmVyICE9IFRISVNfTU9EVUxFKSB7CisJCU9TRF9FUlIoIkVycm9yIG1vdW50aW5nICVzIC0gaXMgbm90IGFuIE9TRCBkZXZpY2VcbiIsIHBhdGgpOworCQlnb3RvIG91dDsKKwl9CisKKwlvdWQgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IG9zZF91bGRfZGV2aWNlLCBjZGV2KTsKKworCV9fdWxkX2dldChvdWQpOworCWVycm9yID0gMDsKKworb3V0OgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlyZXR1cm4gZXJyb3IgPyBFUlJfUFRSKGVycm9yKSA6ICZvdWQtPm9kOworfQorRVhQT1JUX1NZTUJPTChvc2R1bGRfcGF0aF9sb29rdXApOworCit2b2lkIG9zZHVsZF9wdXRfZGV2aWNlKHN0cnVjdCBvc2RfZGV2ICpvZCkKK3sKKwlpZiAob2QpIHsKKwkJc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQgPSBjb250YWluZXJfb2Yob2QsCisJCQkJCQlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UsIG9kKTsKKworCQlfX3VsZF9wdXQob3VkKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG9zZHVsZF9wdXRfZGV2aWNlKTsKKworLyoKKyAqIFNjc2kgRGV2aWNlIG9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgaW50IF9fZGV0ZWN0X29zZChzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlID0gb3VkLT5vZC5zY3NpX2RldmljZTsKKwljaGFyIGNhcHNbT1NEX0NBUF9MRU5dOworCWludCBlcnJvcjsKKworCS8qIHNlbmRpbmcgYSB0ZXN0X3VuaXRfcmVhZHkgYXMgZmlyc3QgY29tbWFuZCBzZWVtcyB0byBiZSBuZWVkZWQKKwkgKiBieSBzb21lIHRhcmdldHMKKwkgKi8KKwlPU0RfREVCVUcoInN0YXJ0IHNjc2lfdGVzdF91bml0X3JlYWR5ICVwICVwICVwXG4iLAorCQkJb3VkLCBzY3NpX2RldmljZSwgc2NzaV9kZXZpY2UtPnJlcXVlc3RfcXVldWUpOworCWVycm9yID0gc2NzaV90ZXN0X3VuaXRfcmVhZHkoc2NzaV9kZXZpY2UsIDEwKkhaLCA1LCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCU9TRF9FUlIoIndhcm5pbmc6IHNjc2lfdGVzdF91bml0X3JlYWR5IGZhaWxlZFxuIik7CisKKwlvc2Rfc2VjX2luaXRfbm9zZWNfZG9hbGxfY2FwcyhjYXBzLCAmb3NkX3Jvb3Rfb2JqZWN0LCBmYWxzZSwgdHJ1ZSk7CisJaWYgKG9zZF9hdXRvX2RldGVjdF92ZXIoJm91ZC0+b2QsIGNhcHMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzICpvc2Rfc3lzZnNfY2xhc3M7CitzdGF0aWMgREVGSU5FX0lEQShvc2RfbWlub3JfaWRhKTsKKworc3RhdGljIGludCBvc2RfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2UgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkOworCWludCBtaW5vcjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoc2NzaV9kZXZpY2UtPnR5cGUgIT0gVFlQRV9PU0QpCisJCXJldHVybiAtRU5PREVWOworCisJZG8geworCQlpZiAoIWlkYV9wcmVfZ2V0KCZvc2RfbWlub3JfaWRhLCBHRlBfS0VSTkVMKSkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWVycm9yID0gaWRhX2dldF9uZXcoJm9zZF9taW5vcl9pZGEsICZtaW5vcik7CisJfSB3aGlsZSAoZXJyb3IgPT0gLUVBR0FJTik7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpZiAobWlub3IgPj0gU0NTSV9PU0RfTUFYX01JTk9SKSB7CisJCWVycm9yID0gLUVCVVNZOworCQlnb3RvIGVycl9yZXRyYWN0X21pbm9yOworCX0KKworCWVycm9yID0gLUVOT01FTTsKKwlvdWQgPSBremFsbG9jKHNpemVvZigqb3VkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gb3VkKQorCQlnb3RvIGVycl9yZXRyYWN0X21pbm9yOworCisJa3JlZl9pbml0KCZvdWQtPmtyZWYpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG91ZCk7CisJb3VkLT5taW5vciA9IG1pbm9yOworCisJLyogYWxsb2NhdGUgYSBkaXNrIGFuZCBzZXQgaXQgdXAgKi8KKwkvKiBGSVhNRTogZG8gd2UgbmVlZCB0aGlzIHNpbmNlIHNnIGhhcyBhbHJlYWR5IGRvbmUgdGhhdCAqLworCWRpc2sgPSBhbGxvY19kaXNrKDEpOworCWlmICghZGlzaykgeworCQlPU0RfRVJSKCJhbGxvY19kaXNrIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWVfb3NkOworCX0KKwlkaXNrLT5tYWpvciA9IFNDU0lfT1NEX01BSk9SOworCWRpc2stPmZpcnN0X21pbm9yID0gb3VkLT5taW5vcjsKKwlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgIm9zZCVkIiwgb3VkLT5taW5vcik7CisJb3VkLT5kaXNrID0gZGlzazsKKworCS8qIGhvbGQgb25lIG1vcmUgcmVmZXJlbmNlIHRvIHRoZSBzY3NpX2RldmljZSB0aGF0IHdpbGwgZ2V0IHJlbGVhc2VkCisJICogaW4gX19yZWxlYXNlLCBpbiBjYXNlIGEgbG9nb3V0IGlzIGhhcHBlbmluZyB3aGlsZSBmcyBpcyBtb3VudGVkCisJICovCisJc2NzaV9kZXZpY2VfZ2V0KHNjc2lfZGV2aWNlKTsKKwlvc2RfZGV2X2luaXQoJm91ZC0+b2QsIHNjc2lfZGV2aWNlKTsKKworCS8qIERldGVjdCB0aGUgT1NEIFZlcnNpb24gKi8KKwllcnJvciA9IF9fZGV0ZWN0X29zZChvdWQpOworCWlmIChlcnJvcikgeworCQlPU0RfRVJSKCJvc2QgZGV0ZWN0aW9uIGZhaWxlZCwgbm9uLWNvbXBhdGlibGUgT1NEIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3B1dF9kaXNrOworCX0KKworCS8qIGluaXQgdGhlIGNoYXItZGV2aWNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdXNlci1tb2RlICovCisJY2Rldl9pbml0KCZvdWQtPmNkZXYsICZvc2RfZm9wcyk7CisJb3VkLT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJZXJyb3IgPSBjZGV2X2FkZCgmb3VkLT5jZGV2LAorCQkJIE1LREVWKFNDU0lfT1NEX01BSk9SLCBvdWQtPm1pbm9yKSwgMSk7CisJaWYgKGVycm9yKSB7CisJCU9TRF9FUlIoImNkZXZfYWRkIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3B1dF9kaXNrOworCX0KKwlrb2JqZWN0X2dldCgmb3VkLT5jZGV2LmtvYmopOyAvKiAybmQgcmVmIHNlZSBvc2RfcmVtb3ZlKCkgKi8KKworCS8qIGNsYXNzX21lbWJlciAqLworCW91ZC0+Y2xhc3NfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZShvc2Rfc3lzZnNfY2xhc3MsIGRldiwKKwkJTUtERVYoU0NTSV9PU0RfTUFKT1IsIG91ZC0+bWlub3IpLCAiJXMiLCBkaXNrLT5kaXNrX25hbWUpOworCWlmIChJU19FUlIob3VkLT5jbGFzc19tZW1iZXIpKSB7CisJCU9TRF9FUlIoImNsYXNzX2RldmljZV9jcmVhdGUgZmFpbGVkXG4iKTsKKwkJZXJyb3IgPSBQVFJfRVJSKG91ZC0+Y2xhc3NfbWVtYmVyKTsKKwkJZ290byBlcnJfcHV0X2NkZXY7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKG91ZC0+Y2xhc3NfbWVtYmVyLCBvdWQpOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJnNjc2lfZGV2aWNlLT5zZGV2X2dlbmRldi5rb2JqLAorCQkJCSAgJm91ZC0+Y2xhc3NfbWVtYmVyLT5rb2JqLCBvc2Rfc3ltbGluayk7CisJaWYgKGVycm9yKQorCQlPU0RfRVJSKCJ3YXJuaW5nOiB1bmFibGUgdG8gbWFrZSBzeW1saW5rXG4iKTsKKworCU9TRF9JTkZPKCJvc2RfcHJvYmUgJXNcbiIsIGRpc2stPmRpc2tfbmFtZSk7CisJcmV0dXJuIDA7CisKK2Vycl9wdXRfY2RldjoKKwljZGV2X2RlbCgmb3VkLT5jZGV2KTsKK2Vycl9wdXRfZGlzazoKKwlzY3NpX2RldmljZV9wdXQoc2NzaV9kZXZpY2UpOworCXB1dF9kaXNrKGRpc2spOworZXJyX2ZyZWVfb3NkOgorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKG91ZCk7CitlcnJfcmV0cmFjdF9taW5vcjoKKwlpZGFfcmVtb3ZlKCZvc2RfbWlub3JfaWRhLCBtaW5vcik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IG9zZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2UgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIW91ZCB8fCAob3VkLT5vZC5zY3NpX2RldmljZSAhPSBzY3NpX2RldmljZSkpIHsKKwkJT1NEX0VSUigiSGFsZiBjb29rZWQgb3NkLWRldmljZSAlcCwlcCB8fCAlcCE9JXAiLAorCQkJZGV2LCBvdWQsIG91ZCA/IG91ZC0+b2Quc2NzaV9kZXZpY2UgOiBOVUxMLAorCQkJc2NzaV9kZXZpY2UpOworCX0KKworCXN5c2ZzX3JlbW92ZV9saW5rKCZvdWQtPm9kLnNjc2lfZGV2aWNlLT5zZGV2X2dlbmRldi5rb2JqLCBvc2Rfc3ltbGluayk7CisKKwlpZiAob3VkLT5jbGFzc19tZW1iZXIpCisJCWRldmljZV9kZXN0cm95KG9zZF9zeXNmc19jbGFzcywKKwkJCSAgICAgICBNS0RFVihTQ1NJX09TRF9NQUpPUiwgb3VkLT5taW5vcikpOworCisJLyogV2UgaGF2ZSAyIHJlZmVyZW5jZXMgdG8gdGhlIGNkZXYuIE9uZSBpcyByZWxlYXNlZCBoZXJlCisJICogYW5kIGFsc28gdGFrZXMgZG93biB0aGUgL2Rldi9vc2RYIG1hcHBpbmcuIFRoZSBzZWNvbmQKKwkgKiBXaWxsIGJlIHJlbGVhc2VkIGluIF9fcmVtb3ZlKCkgYWZ0ZXIgYWxsIHVzZXJzIGhhdmUgcmVsZWFzZWQKKwkgKiB0aGUgb3NkX3VsZF9kZXZpY2UuCisJICovCisJaWYgKG91ZC0+Y2Rldi5vd25lcikKKwkJY2Rldl9kZWwoJm91ZC0+Y2Rldik7CisKKwlfX3VsZF9wdXQob3VkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19yZW1vdmUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQgPSBjb250YWluZXJfb2Yoa3JlZiwKKwkJCQkJc3RydWN0IG9zZF91bGRfZGV2aWNlLCBrcmVmKTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlID0gb3VkLT5vZC5zY3NpX2RldmljZTsKKworCS8qIG5vdyBsZXQgZGVsZXRlIHRoZSBjaGFyX2RldiAqLworCWtvYmplY3RfcHV0KCZvdWQtPmNkZXYua29iaik7CisKKwlvc2RfZGV2X2ZpbmkoJm91ZC0+b2QpOworCXNjc2lfZGV2aWNlX3B1dChzY3NpX2RldmljZSk7CisKKwlPU0RfSU5GTygib3NkX3JlbW92ZSAlc1xuIiwKKwkJIG91ZC0+ZGlzayA/IG91ZC0+ZGlzay0+ZGlza19uYW1lIDogTlVMTCk7CisKKwlpZiAob3VkLT5kaXNrKQorCQlwdXRfZGlzayhvdWQtPmRpc2spOworCisJaWRhX3JlbW92ZSgmb3NkX21pbm9yX2lkYSwgb3VkLT5taW5vcik7CisJa2ZyZWUob3VkKTsKK30KKworc3RhdGljIHZvaWQgX191bGRfZ2V0KHN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkKQoreworCWtyZWZfZ2V0KCZvdWQtPmtyZWYpOworfQorCitzdGF0aWMgdm9pZCBfX3VsZF9wdXQoc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQpCit7CisJa3JlZl9wdXQoJm91ZC0+a3JlZiwgX19yZW1vdmUpOworfQorCisvKgorICogR2xvYmFsIGRyaXZlciBhbmQgc2NzaSByZWdpc3RyYXRpb24KKyAqLworCitzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIG9zZF9kcml2ZXIgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZ2VuZHJ2ID0geworCQkubmFtZQkJPSBvc2RfbmFtZSwKKwkJLnByb2JlCQk9IG9zZF9wcm9iZSwKKwkJLnJlbW92ZQkJPSBvc2RfcmVtb3ZlLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9zZF91bGRfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlvc2Rfc3lzZnNfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIG9zZF9zeW1saW5rKTsKKwlpZiAoSVNfRVJSKG9zZF9zeXNmc19jbGFzcykpIHsKKwkJT1NEX0VSUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHN5c2ZzIGNsYXNzID0+ICVsZFxuIiwKKwkJCVBUUl9FUlIob3NkX3N5c2ZzX2NsYXNzKSk7CisJCXJldHVybiBQVFJfRVJSKG9zZF9zeXNmc19jbGFzcyk7CisJfQorCisJZXJyID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX09TRF9NQUpPUiwgMCksCisJCQkJICAgICBTQ1NJX09TRF9NQVhfTUlOT1IsIG9zZF9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCU9TRF9FUlIoIlVuYWJsZSB0byByZWdpc3RlciBtYWpvciAlZCBmb3Igb3NkIFVMRCA9PiAlZFxuIiwKKwkJCVNDU0lfT1NEX01BSk9SLCBlcnIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyID0gc2NzaV9yZWdpc3Rlcl9kcml2ZXIoJm9zZF9kcml2ZXIuZ2VuZHJ2KTsKKwlpZiAoZXJyKSB7CisJCU9TRF9FUlIoInNjc2lfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCA9PiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfb3V0X2NocmRldjsKKwl9CisKKwlPU0RfSU5GTygiTE9BREVEICVzXG4iLCBvc2RfdmVyc2lvbl9zdHJpbmcpOworCXJldHVybiAwOworCitlcnJfb3V0X2NocmRldjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9PU0RfTUFKT1IsIDApLCBTQ1NJX09TRF9NQVhfTUlOT1IpOworZXJyX291dDoKKwljbGFzc19kZXN0cm95KG9zZF9zeXNmc19jbGFzcyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9zZF91bGRfZXhpdCh2b2lkKQoreworCXNjc2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm9zZF9kcml2ZXIuZ2VuZHJ2KTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9PU0RfTUFKT1IsIDApLCBTQ1NJX09TRF9NQVhfTUlOT1IpOworCWNsYXNzX2Rlc3Ryb3kob3NkX3N5c2ZzX2NsYXNzKTsKKwlPU0RfSU5GTygiVU5MT0FERUQgJXNcbiIsIG9zZF92ZXJzaW9uX3N0cmluZyk7Cit9CisKK21vZHVsZV9pbml0KG9zZF91bGRfaW5pdCk7Cittb2R1bGVfZXhpdChvc2RfdWxkX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuYyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKaW5kZXggMGVhNzhkOS4uYWNiODM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zc3QuYworKysgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCkBAIC0yODAsOCArMjgwLDggQEAKIAkJCXN0YXRpYwlpbnQJbm90eWV0cHJpbnRlZCA9IDE7CiAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgIiVzOlc6IFdhcm5pbmcgJXggKHN1Z2cuIGJ0IDB4JXgsIGRyaXZlciBidCAweCV4LCBob3N0IGJ0IDB4JXgpLlxuIiwKLQkJCSAgICAgbmFtZSwgcmVzdWx0LCBzdWdnZXN0aW9uKHJlc3VsdCksIGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBEUklWRVJfTUFTSywKKwkJCSAgICAgIiVzOlc6IFdhcm5pbmcgJXggKGRyaXZlciBidCAweCV4LCBob3N0IGJ0IDB4JXgpLlxuIiwKKwkJCSAgICAgbmFtZSwgcmVzdWx0LCBkcml2ZXJfYnl0ZShyZXN1bHQpLAogCQkJICAgICBob3N0X2J5dGUocmVzdWx0KSk7CiAJCQlpZiAobm90eWV0cHJpbnRlZCkgewogCQkJCW5vdHlldHByaW50ZWQgPSAwOwpAQCAtMzE3LDE4ICszMTcsMjUgQEAKIAogCiAvKiBXYWtldXAgZnJvbSBpbnRlcnJ1cHQgKi8KLXN0YXRpYyB2b2lkIG9zc3Rfc2xlZXBfZG9uZSh2b2lkICpkYXRhLCBjaGFyICpzZW5zZSwgaW50IHJlc3VsdCwgaW50IHJlc2lkKQorc3RhdGljIHZvaWQgb3NzdF9lbmRfYXN5bmMoc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IHVwZGF0ZSkKIHsKLQlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICpTUnBudCA9IGRhdGE7CisJc3RydWN0IG9zc3RfcmVxdWVzdCAqU1JwbnQgPSByZXEtPmVuZF9pb19kYXRhOwogCXN0cnVjdCBvc3N0X3RhcGUgKlNUcCA9IFNScG50LT5zdHA7CisJc3RydWN0IHJxX21hcF9kYXRhICptZGF0YSA9ICZTUnBudC0+c3RwLT5idWZmZXItPm1hcF9kYXRhOwogCi0JbWVtY3B5KFNScG50LT5zZW5zZSwgc2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JU1RwLT5idWZmZXItPmNtZHN0YXQubWlkbGV2ZWxfcmVzdWx0ID0gU1JwbnQtPnJlc3VsdCA9IHJlc3VsdDsKKwlTVHAtPmJ1ZmZlci0+Y21kc3RhdC5taWRsZXZlbF9yZXN1bHQgPSBTUnBudC0+cmVzdWx0ID0gcmVxLT5lcnJvcnM7CiAjaWYgREVCVUcKIAlTVHAtPndyaXRlX3BlbmRpbmcgPSAwOwogI2VuZGlmCiAJaWYgKFNScG50LT53YWl0aW5nKQogCQljb21wbGV0ZShTUnBudC0+d2FpdGluZyk7CisKKwlpZiAoU1JwbnQtPmJpbykgeworCQlrZnJlZShtZGF0YS0+cGFnZXMpOworCQlibGtfcnFfdW5tYXBfdXNlcihTUnBudC0+YmlvKTsKKwl9CisKKwlfX2Jsa19wdXRfcmVxdWVzdChyZXEtPnEsIHJlcSk7CiB9CiAKIC8qIG9zc3RfcmVxdWVzdCBtZW1vcnkgbWFuYWdlbWVudCAqLwpAQCAtMzQyLDYgKzM0OSw3NCBAQAogCWtmcmVlKHN0cmVxKTsKIH0KIAorc3RhdGljIGludCBvc3N0X2V4ZWN1dGUoc3RydWN0IG9zc3RfcmVxdWVzdCAqU1JwbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtZCwKKwkJCWludCBjbWRfbGVuLCBpbnQgZGF0YV9kaXJlY3Rpb24sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKKwkJCWludCB1c2Vfc2csIGludCB0aW1lb3V0LCBpbnQgcmV0cmllcykKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCXN0cnVjdCBycV9tYXBfZGF0YSAqbWRhdGEgPSAmU1JwbnQtPnN0cC0+YnVmZmVyLT5tYXBfZGF0YTsKKworCWludCBlcnIgPSAwOworCWludCB3cml0ZSA9IChkYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKTsKKworCXJlcSA9IGJsa19nZXRfcmVxdWVzdChTUnBudC0+c3RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWUsIHdyaXRlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIERSSVZFUl9FUlJPUiA8PCAyNDsKKworCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CisKKwlTUnBudC0+YmlvID0gTlVMTDsKKworCWlmICh1c2Vfc2cpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgKnNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilidWZmZXI7CisJCWludCBpOworCisJCXBhZ2VzID0ga3phbGxvYyh1c2Vfc2cgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCQlpZiAoIXBhZ2VzKQorCQkJZ290byBmcmVlX3JlcTsKKworCQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCB1c2Vfc2csIGkpCisJCQlwYWdlc1tpXSA9IHNnX3BhZ2Uoc2cpOworCisJCW1kYXRhLT5udWxsX21hcHBlZCA9IDE7CisKKwkJbWRhdGEtPnBhZ2Vfb3JkZXIgPSBnZXRfb3JkZXIoc2dsWzBdLmxlbmd0aCk7CisJCW1kYXRhLT5ucl9lbnRyaWVzID0KKwkJCURJVl9ST1VORF9VUChidWZmbGVuLCBQQUdFX1NJWkUgPDwgbWRhdGEtPnBhZ2Vfb3JkZXIpOworCQltZGF0YS0+b2Zmc2V0ID0gMDsKKworCQllcnIgPSBibGtfcnFfbWFwX3VzZXIocmVxLT5xLCByZXEsIG1kYXRhLCBOVUxMLCBidWZmbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUocGFnZXMpOworCQkJZ290byBmcmVlX3JlcTsKKwkJfQorCQlTUnBudC0+YmlvID0gcmVxLT5iaW87CisJCW1kYXRhLT5wYWdlcyA9IHBhZ2VzOworCisJfSBlbHNlIGlmIChidWZmbGVuKSB7CisJCWVyciA9IGJsa19ycV9tYXBfa2VybihyZXEtPnEsIHJlcSwgYnVmZmVyLCBidWZmbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9yZXE7CisJfQorCisJcmVxLT5jbWRfbGVuID0gY21kX2xlbjsKKwltZW1zZXQocmVxLT5jbWQsIDAsIEJMS19NQVhfQ0RCKTsgLyogQVRBUEkgaGF0ZXMgZ2FyYmFnZSBhZnRlciBDREIgKi8KKwltZW1jcHkocmVxLT5jbWQsIGNtZCwgcmVxLT5jbWRfbGVuKTsKKwlyZXEtPnNlbnNlID0gU1JwbnQtPnNlbnNlOworCXJlcS0+c2Vuc2VfbGVuID0gMDsKKwlyZXEtPnRpbWVvdXQgPSB0aW1lb3V0OworCXJlcS0+cmV0cmllcyA9IHJldHJpZXM7CisJcmVxLT5lbmRfaW9fZGF0YSA9IFNScG50OworCisJYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHJlcS0+cSwgTlVMTCwgcmVxLCAxLCBvc3N0X2VuZF9hc3luYyk7CisJcmV0dXJuIDA7CitmcmVlX3JlcToKKwlibGtfcHV0X3JlcXVlc3QocmVxKTsKKwlyZXR1cm4gRFJJVkVSX0VSUk9SIDw8IDI0OworfQorCiAvKiBEbyB0aGUgc2NzaSBjb21tYW5kLiBXYWl0cyB1bnRpbCBjb21tYW5kIHBlcmZvcm1lZCBpZiBkb193YWl0IGlzIHRydWUuCiAgICBPdGhlcndpc2Ugb3NzdF93cml0ZV9iZWhpbmRfY2hlY2soKSBpcyB1c2VkIHRvIGNoZWNrIHRoYXQgdGhlIGNvbW1hbmQKICAgIGhhcyBmaW5pc2hlZC4gKi8KQEAgLTQwMyw4ICs0NzgsOCBAQAogCVNUcC0+YnVmZmVyLT5jbWRzdGF0LmhhdmVfc2Vuc2UgPSAwOwogCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCA9IDA7CiAKLQlpZiAoc2NzaV9leGVjdXRlX2FzeW5jKFNUcC0+ZGV2aWNlLCBjbWQsIENPTU1BTkRfU0laRShjbWRbMF0pLCBkaXJlY3Rpb24sIGJwLCBieXRlcywKLQkJCXVzZV9zZywgdGltZW91dCwgcmV0cmllcywgU1JwbnQsIG9zc3Rfc2xlZXBfZG9uZSwgR0ZQX0tFUk5FTCkpCisJaWYgKG9zc3RfZXhlY3V0ZShTUnBudCwgY21kLCBDT01NQU5EX1NJWkUoY21kWzBdKSwgZGlyZWN0aW9uLCBicCwgYnl0ZXMsCisJCQkgdXNlX3NnLCB0aW1lb3V0LCByZXRyaWVzKSkKIAkJLyogY291bGQgbm90IGFsbG9jYXRlIHRoZSBidWZmZXIgb3IgcmVxdWVzdCB3YXMgdG9vIGxhcmdlICovCiAJCShTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0ID0gKC1FQlVTWSk7CiAJZWxzZSBpZiAoZG9fd2FpdCkgewpAQCAtNTI4NiwxMSArNTM2MSw2IEBACiAJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMocHJpb3JpdHksIChPU19GUkFNRV9TSVpFIC0gZ290IDw9IFBBR0VfU0laRSkgPyAwIDogb3JkZXIpOwogCQlTVGJ1ZmZlci0+c2dbc2Vnc10ub2Zmc2V0ID0gMDsKIAkJaWYgKHBhZ2UgPT0gTlVMTCkgewotCQkJaWYgKE9TX0ZSQU1FX1NJWkUgLSBnb3QgPD0gKG1heF9zZWdzIC0gc2VncykgKiBiX3NpemUgLyAyICYmIG9yZGVyKSB7Ci0JCQkJYl9zaXplIC89IDI7ICAvKiBMYXJnZSBlbm91Z2ggZm9yIHRoZSByZXN0IG9mIHRoZSBidWZmZXJzICovCi0JCQkJb3JkZXItLTsKLQkJCQljb250aW51ZTsKLQkJCX0KIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm9zc3QgOlc6IEZhaWxlZCB0byBlbmxhcmdlIGJ1ZmZlciB0byAlZCBieXRlcy5cbiIsCiAJCQkJCQlPU19GUkFNRV9TSVpFKTsKICNpZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuaCBiL2RyaXZlcnMvc2NzaS9vc3N0LmgKaW5kZXggNWFhMjI3NC4uMTFkMjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zc3QuaAorKysgYi9kcml2ZXJzL3Njc2kvb3NzdC5oCkBAIC01MjAsNiArNTIwLDcgQEAKICAgaW50IHN5c2NhbGxfcmVzdWx0OwogICBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICpsYXN0X1NScG50OwogICBzdHJ1Y3Qgc3RfY21kc3RhdHVzIGNtZHN0YXQ7CisgIHN0cnVjdCBycV9tYXBfZGF0YSBtYXBfZGF0YTsKICAgdW5zaWduZWQgY2hhciAqYl9kYXRhOwogICBvc19hdXhfdCAqYXV4OyAgICAgICAgICAgICAgIC8qIG9uc3RyZWFtIEFVWCBzdHJ1Y3R1cmUgYXQgZW5kIG9mIGVhY2ggYmxvY2sgICAgICovCiAgIHVuc2lnbmVkIHNob3J0IHVzZV9zZzsgICAgICAgLyogemVybyBvciBudW1iZXIgb2Ygcy9nIHNlZ21lbnRzIGZvciB0aGlzIGFkYXB0ZXIgKi8KQEAgLTYzNCw2ICs2MzUsNyBAQAogCWludCByZXN1bHQ7CiAJc3RydWN0IG9zc3RfdGFwZSAqc3RwOwogCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOworCXN0cnVjdCBiaW8gKmJpbzsKIH07CiAKIC8qIFZhbHVlcyBvZiB3cml0ZV90eXBlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCBjYmNkM2Y2Li5hMmVmMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTk2Nyw2ICs5NjcsMTEwIEBACiBFWFBPUlRfU1lNQk9MKHNjc2lfdHJhY2tfcXVldWVfZnVsbCk7CiAKIC8qKgorICogc2NzaV92cGRfaW5xdWlyeSAtIFJlcXVlc3QgYSBkZXZpY2UgcHJvdmlkZSB1cyB3aXRoIGEgVlBEIHBhZ2UKKyAqIEBzZGV2OiBUaGUgZGV2aWNlIHRvIGFzaworICogQGJ1ZmZlcjogV2hlcmUgdG8gcHV0IHRoZSByZXN1bHQKKyAqIEBwYWdlOiBXaGljaCBWaXRhbCBQcm9kdWN0IERhdGEgdG8gcmV0dXJuCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiBUaGlzIGlzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gIFlvdSBwcm9iYWJseSB3YW50IHRvIHVzZQorICogc2NzaV9nZXRfdnBkX3BhZ2UgaW5zdGVhZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqLworc3RhdGljIGludCBzY3NpX3ZwZF9pbnF1aXJ5KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCQkJCXU4IHBhZ2UsIHVuc2lnbmVkIGxlbikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgY21kWzE2XTsKKworCWNtZFswXSA9IElOUVVJUlk7CisJY21kWzFdID0gMTsJCS8qIEVWUEQgKi8KKwljbWRbMl0gPSBwYWdlOworCWNtZFszXSA9IGxlbiA+PiA4OworCWNtZFs0XSA9IGxlbiAmIDB4ZmY7CisJY21kWzVdID0gMDsJCS8qIENvbnRyb2wgYnl0ZSAqLworCisJLyoKKwkgKiBJJ20gbm90IGNvbnZpbmNlZCB3ZSBuZWVkIHRvIHRyeSBxdWl0ZSB0aGlzIGhhcmQgdG8gZ2V0IFZQRCwgYnV0CisJICogYWxsIHRoZSBleGlzdGluZyB1c2VycyB0cmllZCB0aGlzIGhhcmQuCisJICovCisJcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShzZGV2LCBjbWQsIERNQV9GUk9NX0RFVklDRSwgYnVmZmVyLAorCQkJCSAgbGVuICsgNCwgTlVMTCwgMzAgKiBIWiwgMywgTlVMTCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFNhbml0eSBjaGVjayB0aGF0IHdlIGdvdCB0aGUgcGFnZSBiYWNrIHRoYXQgd2UgYXNrZWQgZm9yICovCisJaWYgKGJ1ZmZlclsxXSAhPSBwYWdlKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNjc2lfZ2V0X3ZwZF9wYWdlIC0gR2V0IFZpdGFsIFByb2R1Y3QgRGF0YSBmcm9tIGEgU0NTSSBkZXZpY2UKKyAqIEBzZGV2OiBUaGUgZGV2aWNlIHRvIGFzaworICogQHBhZ2U6IFdoaWNoIFZpdGFsIFByb2R1Y3QgRGF0YSB0byByZXR1cm4KKyAqCisgKiBTQ1NJIGRldmljZXMgbWF5IG9wdGlvbmFsbHkgc3VwcGx5IFZpdGFsIFByb2R1Y3QgRGF0YS4gIEVhY2ggJ3BhZ2UnCisgKiBvZiBWUEQgaXMgZGVmaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUgU0NTSSBkb2N1bWVudCAoZWcgU1BDLCBTQkMpLgorICogSWYgdGhlIGRldmljZSBzdXBwb3J0cyB0aGlzIFZQRCBwYWdlLCB0aGlzIHJvdXRpbmUgcmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgZnJvbSB0aGF0IHBhZ2UuICBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBrZnJlZSgpIG9uIHRoaXMgcG9pbnRlciB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICogbmVlZGVkLiAgSWYgd2UgY2Fubm90IHJldHJpZXZlIHRoZSBWUEQgcGFnZSB0aGlzIHJvdXRpbmUgcmV0dXJucyAlTlVMTC4KKyAqLwordW5zaWduZWQgY2hhciAqc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1OCBwYWdlKQoreworCWludCBpLCByZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBrbWFsbG9jKDI1OSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBc2sgZm9yIGFsbCB0aGUgcGFnZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlICovCisJcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIDAsIDI1NSk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsOworCisJLyogSWYgdGhlIHVzZXIgYWN0dWFsbHkgd2FudGVkIHRoaXMgcGFnZSwgd2UgY2FuIHNraXAgdGhlIHJlc3QgKi8KKwlpZiAocGFnZSA9PSAwKQorCQlyZXR1cm4gYnVmOworCisJZm9yIChpID0gMDsgaSA8IGJ1ZlszXTsgaSsrKQorCQlpZiAoYnVmW2kgKyA0XSA9PSBwYWdlKQorCQkJZ290byBmb3VuZDsKKwkvKiBUaGUgZGV2aWNlIGNsYWltcyBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBwYWdlICovCisJZ290byBmYWlsOworCisgZm91bmQ6CisJcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIHBhZ2UsIDI1NSk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsOworCisJLyoKKwkgKiBTb21lIHBhZ2VzIGFyZSBsb25nZXIgdGhhbiAyNTUgYnl0ZXMuICBUaGUgYWN0dWFsIGxlbmd0aCBvZgorCSAqIHRoZSBwYWdlIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIuCisJICovCisJbGVuID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKKwlpZiAobGVuIDw9IDI1NSkKKwkJcmV0dXJuIGJ1ZjsKKworCWtmcmVlKGJ1Zik7CisJYnVmID0ga21hbGxvYyhsZW4gKyA0LCBHRlBfS0VSTkVMKTsKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgbGVuKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gYnVmOworCisgZmFpbDoKKwlrZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9nZXRfdnBkX3BhZ2UpOworCisvKioKICAqIHNjc2lfZGV2aWNlX2dldCAgLSAgZ2V0IGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIGEgc2NzaV9kZXZpY2UKICAqIEBzZGV2OglkZXZpY2UgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggNmVlYmQwYi4uMjEzMTIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC00MCw2ICs0MCw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYy10MTBkaWYuaD4KKworI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTQ4LDggKzUxLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KIAotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLQorI2luY2x1ZGUgInNkLmgiCiAjaW5jbHVkZSAic2NzaV9sb2dnaW5nLmgiCiAKICNkZWZpbmUgU0NTSV9ERUJVR19WRVJTSU9OICIxLjgxIgpAQCAtOTUsNiArOTcsMTAgQEAKICNkZWZpbmUgREVGX0ZBS0VfUlcJMAogI2RlZmluZSBERUZfVlBEX1VTRV9IT1NUTk8gMQogI2RlZmluZSBERUZfU0VDVE9SX1NJWkUgNTEyCisjZGVmaW5lIERFRl9ESVggMAorI2RlZmluZSBERUZfRElGIDAKKyNkZWZpbmUgREVGX0dVQVJEIDAKKyNkZWZpbmUgREVGX0FUTyAxCiAKIC8qIGJpdCBtYXNrIHZhbHVlcyBmb3Igc2NzaV9kZWJ1Z19vcHRzICovCiAjZGVmaW5lIFNDU0lfREVCVUdfT1BUX05PSVNFICAgMQpAQCAtMTAyLDYgKzEwOCw4IEBACiAjZGVmaW5lIFNDU0lfREVCVUdfT1BUX1RJTUVPVVQgICA0CiAjZGVmaW5lIFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgICA4CiAjZGVmaW5lIFNDU0lfREVCVUdfT1BUX1RSQU5TUE9SVF9FUlIgICAxNgorI2RlZmluZSBTQ1NJX0RFQlVHX09QVF9ESUZfRVJSICAgMzIKKyNkZWZpbmUgU0NTSV9ERUJVR19PUFRfRElYX0VSUiAgIDY0CiAvKiBXaGVuICJldmVyeV9udGgiID4gMCB0aGVuIG1vZHVsbyAiZXZlcnlfbnRoIiBjb21tYW5kczoKICAqICAgLSBhIG5vIHJlc3BvbnNlIGlzIHNpbXVsYXRlZCBpZiBTQ1NJX0RFQlVHX09QVF9USU1FT1VUIGlzIHNldAogICogICAtIGEgUkVDT1ZFUkVEX0VSUk9SIGlzIHNpbXVsYXRlZCBvbiBzdWNjZXNzZnVsIHJlYWQgYW5kIHdyaXRlCkBAIC0xNDQsNiArMTUyLDEwIEBACiBzdGF0aWMgaW50IHNjc2lfZGVidWdfZmFrZV9ydyA9IERFRl9GQUtFX1JXOwogc3RhdGljIGludCBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vID0gREVGX1ZQRF9VU0VfSE9TVE5POwogc3RhdGljIGludCBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplID0gREVGX1NFQ1RPUl9TSVpFOworc3RhdGljIGludCBzY3NpX2RlYnVnX2RpeCA9IERFRl9ESVg7CitzdGF0aWMgaW50IHNjc2lfZGVidWdfZGlmID0gREVGX0RJRjsKK3N0YXRpYyBpbnQgc2NzaV9kZWJ1Z19ndWFyZCA9IERFRl9HVUFSRDsKK3N0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hdG8gPSBERUZfQVRPOwogCiBzdGF0aWMgaW50IHNjc2lfZGVidWdfY21uZF9jb3VudCA9IDA7CiAKQEAgLTIwNCwxMSArMjE2LDE1IEBACiBzdGF0aWMgc3RydWN0IHNkZWJ1Z19xdWV1ZWRfY21kIHF1ZXVlZF9hcnJbU0NTSV9ERUJVR19DQU5RVUVVRV07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICogZmFrZV9zdG9yZXA7CS8qIHJhbWRpc2sgc3RvcmFnZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRpZl9zdG9yZXA7CS8qIHByb3RlY3Rpb24gaW5mbyAqLwogCiBzdGF0aWMgaW50IG51bV9hYm9ydHMgPSAwOwogc3RhdGljIGludCBudW1fZGV2X3Jlc2V0cyA9IDA7CiBzdGF0aWMgaW50IG51bV9idXNfcmVzZXRzID0gMDsKIHN0YXRpYyBpbnQgbnVtX2hvc3RfcmVzZXRzID0gMDsKK3N0YXRpYyBpbnQgZGl4X3dyaXRlczsKK3N0YXRpYyBpbnQgZGl4X3JlYWRzOworc3RhdGljIGludCBkaWZfZXJyb3JzOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHF1ZXVlZF9hcnJfbG9jayk7CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhhdG9taWNfcncpOwpAQCAtMjE3LDYgKzIzMywxMSBAQAogCiBzdGF0aWMgc3RydWN0IGJ1c190eXBlIHBzZXVkb19sbGRfYnVzOwogCitzdGF0aWMgaW5saW5lIHNlY3Rvcl90IGRpZl9vZmZzZXQoc2VjdG9yX3Qgc2VjdG9yKQoreworCXJldHVybiBzZWN0b3IgPDwgMzsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNkZWJ1Z19kcml2ZXJmc19kcml2ZXIgPSB7CiAJLm5hbWUgCQk9IHNkZWJ1Z19wcm9jX25hbWUsCiAJLmJ1cwkJPSAmcHNldWRvX2xsZF9idXMsCkBAIC0yMjUsNiArMjQ2LDkgQEAKIHN0YXRpYyBjb25zdCBpbnQgY2hlY2tfY29uZGl0aW9uX3Jlc3VsdCA9CiAJCShEUklWRVJfU0VOU0UgPDwgMjQpIHwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCitzdGF0aWMgY29uc3QgaW50IGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdCA9CisJKERSSVZFUl9TRU5TRSA8PCAyNCkgfCAoRElEX0FCT1JUIDw8IDE2KSB8IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwogc3RhdGljIHVuc2lnbmVkIGNoYXIgY3RybF9tX3BnW10gPSB7MHhhLCAxMCwgMiwgMCwgMCwgMCwgMCwgMCwKIAkJCQkgICAgMCwgMCwgMHgyLCAweDRifTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGllY19tX3BnW10gPSB7MHgxYywgMHhhLCAweDA4LCAwLCAwLCAwLCAwLCAwLApAQCAtNzI2LDcgKzc1MCwxMiBAQAogCQl9IGVsc2UgaWYgKDB4ODYgPT0gY21kWzJdKSB7IC8qIGV4dGVuZGVkIGlucXVpcnkgKi8KIAkJCWFyclsxXSA9IGNtZFsyXTsJLypzYW5pdHkgKi8KIAkJCWFyclszXSA9IDB4M2M7CS8qIG51bWJlciBvZiBmb2xsb3dpbmcgZW50cmllcyAqLwotCQkJYXJyWzRdID0gMHgwOyAgIC8qIG5vIHByb3RlY3Rpb24gc3R1ZmYgKi8KKwkJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikKKwkJCQlhcnJbNF0gPSAweDQ7CS8qIFNQVDogR1JEX0NISzoxICovCisJCQllbHNlIGlmIChzY3NpX2RlYnVnX2RpZikKKwkJCQlhcnJbNF0gPSAweDU7ICAgLyogU1BUOiBHUkRfQ0hLOjEsIFJFRl9DSEs6MSAqLworCQkJZWxzZQorCQkJCWFycls0XSA9IDB4MDsgICAvKiBubyBwcm90ZWN0aW9uIHN0dWZmICovCiAJCQlhcnJbNV0gPSAweDc7ICAgLyogaGVhZCBvZiBxLCBvcmRlcmVkICsgc2ltcGxlIHEncyAqLwogCQl9IGVsc2UgaWYgKDB4ODcgPT0gY21kWzJdKSB7IC8qIG1vZGUgcGFnZSBwb2xpY3kgKi8KIAkJCWFyclsxXSA9IGNtZFsyXTsJLypzYW5pdHkgKi8KQEAgLTc2Nyw2ICs3OTYsNyBAQAogCWFyclsyXSA9IHNjc2lfZGVidWdfc2NzaV9sZXZlbDsKIAlhcnJbM10gPSAyOyAgICAvKiByZXNwb25zZV9kYXRhX2Zvcm1hdD09MiAqLwogCWFycls0XSA9IFNERUJVR19MT05HX0lOUV9TWiAtIDU7CisJYXJyWzVdID0gc2NzaV9kZWJ1Z19kaWYgPyAxIDogMDsgLyogUFJPVEVDVCBiaXQgKi8KIAlpZiAoMCA9PSBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vKQogCQlhcnJbNV0gPSAweDEwOyAvKiBjbGFpbTogaW1wbGljaXQgVEdQUyAqLwogCWFycls2XSA9IDB4MTA7IC8qIGNsYWltOiBNdWx0aVAgKi8KQEAgLTkxNSw2ICs5NDUsMTIgQEAKIAlhcnJbOV0gPSAoc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSA+PiAxNikgJiAweGZmOwogCWFyclsxMF0gPSAoc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSA+PiA4KSAmIDB4ZmY7CiAJYXJyWzExXSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemUgJiAweGZmOworCisJaWYgKHNjc2lfZGVidWdfZGlmKSB7CisJCWFyclsxMl0gPSAoc2NzaV9kZWJ1Z19kaWYgLSAxKSA8PCAxOyAvKiBQX1RZUEUgKi8KKwkJYXJyWzEyXSB8PSAxOyAvKiBQUk9UX0VOICovCisJfQorCiAJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLAogCQkJCSAgICBtaW4oYWxsb2NfbGVuLCBTREVCVUdfUkVBRENBUDE2X0FSUl9TWikpOwogfQpAQCAtMTA2Niw2ICsxMTAyLDEwIEBACiAJCWN0cmxfbV9wZ1syXSB8PSAweDQ7CiAJZWxzZQogCQljdHJsX21fcGdbMl0gJj0gfjB4NDsKKworCWlmIChzY3NpX2RlYnVnX2F0bykKKwkJY3RybF9tX3BnWzVdIHw9IDB4ODA7IC8qIEFUTz0xICovCisKIAltZW1jcHkocCwgY3RybF9tX3BnLCBzaXplb2YoY3RybF9tX3BnKSk7CiAJaWYgKDEgPT0gcGNvbnRyb2wpCiAJCW1lbWNweShwICsgMiwgY2hfY3RybF9tX3BnLCBzaXplb2YoY2hfY3RybF9tX3BnKSk7CkBAIC0xNTM2LDYgKzE1NzYsODcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHByb3RfdmVyaWZ5X3JlYWQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHNlY3Rvcl90IHN0YXJ0X3NlYywKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgcmVzaWQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2dsOworCXN0cnVjdCBzZF9kaWZfdHVwbGUgKnNkdDsKKwlzZWN0b3JfdCBzZWN0b3I7CisJc2VjdG9yX3QgdG1wX3NlYyA9IHN0YXJ0X3NlYzsKKwl2b2lkICpwYWRkcjsKKworCXN0YXJ0X3NlYyA9IGRvX2Rpdih0bXBfc2VjLCBzZGVidWdfc3RvcmVfc2VjdG9ycyk7CisKKwlzZHQgPSAoc3RydWN0IHNkX2RpZl90dXBsZSAqKShkaWZfc3RvcmVwICsgZGlmX29mZnNldChzdGFydF9zZWMpKTsKKworCWZvciAoaSA9IDAgOyBpIDwgc2VjdG9ycyA7IGkrKykgeworCQl1MTYgY3N1bTsKKworCQlpZiAoc2R0W2ldLmFwcF90YWcgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJc2VjdG9yID0gc3RhcnRfc2VjICsgaTsKKworCQlzd2l0Y2ggKHNjc2lfZGVidWdfZ3VhcmQpIHsKKwkJY2FzZSAxOgorCQkJY3N1bSA9IGlwX2NvbXB1dGVfY3N1bShmYWtlX3N0b3JlcCArCisJCQkJCSAgICAgICBzZWN0b3IgKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplLAorCQkJCQkgICAgICAgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJY3N1bSA9IGNyY190MTBkaWYoZmFrZV9zdG9yZXAgKworCQkJCQkgIHNlY3RvciAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsCisJCQkJCSAgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJCQljc3VtID0gY3B1X3RvX2JlMTYoY3N1bSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisKKwkJaWYgKHNkdFtpXS5ndWFyZF90YWcgIT0gY3N1bSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogR1VBUkQgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHUiIFwKKwkJCSAgICAgICAiIHJjdmQgMHglMDR4LCBkYXRhIDB4JTA0eFxuIiwgX19mdW5jX18sCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpc2VjdG9yLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KHNkdFtpXS5ndWFyZF90YWcpLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KGNzdW0pKTsKKwkJCWRpZl9lcnJvcnMrKzsKKwkJCXJldHVybiAweDAxOworCQl9CisKKwkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCSAgICBiZTMyX3RvX2NwdShzZHRbaV0ucmVmX3RhZykgIT0gKHNlY3RvciAmIDB4ZmZmZmZmZmYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCisJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXNlY3Rvcik7CisJCQlkaWZfZXJyb3JzKys7CisJCQlyZXR1cm4gMHgwMzsKKwkJfQorCX0KKworCXJlc2lkID0gc2VjdG9ycyAqIDg7IC8qIEJ5dGVzIG9mIHByb3RlY3Rpb24gZGF0YSB0byBjb3B5IGludG8gc2dsICovCisJc2VjdG9yID0gc3RhcnRfc2VjOworCisJc2NzaV9mb3JfZWFjaF9wcm90X3NnKFNDcG50LCBwc2dsLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpLCBpKSB7CisJCWludCBsZW4gPSBtaW4ocHNnbC0+bGVuZ3RoLCByZXNpZCk7CisKKwkJcGFkZHIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHBzZ2wpLCBLTV9JUlEwKSArIHBzZ2wtPm9mZnNldDsKKwkJbWVtY3B5KHBhZGRyLCBkaWZfc3RvcmVwICsgZGlmX29mZnNldChzZWN0b3IpLCBsZW4pOworCisJCXNlY3RvciArPSBsZW4gPj4gMzsKKwkJaWYgKHNlY3RvciA+PSBzZGVidWdfc3RvcmVfc2VjdG9ycykgeworCQkJLyogRm9yY2Ugd3JhcCAqLworCQkJdG1wX3NlYyA9IHNlY3RvcjsKKwkJCXNlY3RvciA9IGRvX2Rpdih0bXBfc2VjLCBzZGVidWdfc3RvcmVfc2VjdG9ycyk7CisJCX0KKwkJcmVzaWQgLT0gbGVuOworCQlrdW5tYXBfYXRvbWljKHBhZGRyLCBLTV9JUlEwKTsKKwl9CisKKwlkaXhfcmVhZHMrKzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJlc3BfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKIAkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKQEAgLTE1NjMsMTIgKzE2ODQsMTYyIEBACiAJCX0KIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQorCisJLyogRElYICsgVDEwIERJRiAqLworCWlmIChzY3NpX2RlYnVnX2RpeCAmJiBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKSB7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3JlYWQoU0NwbnQsIGxiYSwgbnVtKTsKKworCQlpZiAocHJvdF9yZXQpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCBwcm90X3JldCk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9CisJfQorCiAJcmVhZF9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKFNDcG50LCBkZXZpcCwgbGJhLCBudW0sIDApOwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIGR1bXBfc2VjdG9yKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaSwgajsKKworCXByaW50ayhLRVJOX0VSUiAiPj4+IFNlY3RvciBEdW1wIDw8PFxuIik7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGxlbiA7IGkgKz0gMTYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlMDRkOiAiLCBpKTsKKworCQlmb3IgKGogPSAwIDsgaiA8IDE2IDsgaisrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGMgPSBidWZbaStqXTsKKwkJCWlmIChjID49IDB4MjAgJiYgYyA8IDB4N2UpCisJCQkJcHJpbnRrKCIgJWMgIiwgYnVmW2kral0pOworCQkJZWxzZQorCQkJCXByaW50aygiJTAyeCAiLCBidWZbaStqXSk7CisJCX0KKworCQlwcmludGsoIlxuIik7CisJfQorfQorCitzdGF0aWMgaW50IHByb3RfdmVyaWZ5X3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCisJCQkgICAgIHVuc2lnbmVkIGludCBzZWN0b3JzKQoreworCWludCBpLCBqLCByZXQ7CisJc3RydWN0IHNkX2RpZl90dXBsZSAqc2R0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHNnbCA9IHNjc2lfc2dsaXN0KFNDcG50KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZ2wgPSBzY3NpX3Byb3Rfc2dsaXN0KFNDcG50KTsKKwl2b2lkICpkYWRkciwgKnBhZGRyOworCXNlY3Rvcl90IHRtcF9zZWMgPSBzdGFydF9zZWM7CisJc2VjdG9yX3Qgc2VjdG9yOworCWludCBwcGFnZV9vZmZzZXQ7CisJdW5zaWduZWQgc2hvcnQgY3N1bTsKKworCXNlY3RvciA9IGRvX2Rpdih0bXBfc2VjLCBzZGVidWdfc3RvcmVfc2VjdG9ycyk7CisKKwlpZiAoKChTQ3BudC0+Y21uZFsxXSA+PiA1KSAmIDcpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaV9kZWJ1ZzogV1JQUk9URUNUICE9IDFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlCVUdfT04oc2NzaV9zZ19jb3VudChTQ3BudCkgPT0gMCk7CisJQlVHX09OKHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkgPT0gMCk7CisKKwlwYWRkciA9IGttYXBfYXRvbWljKHNnX3BhZ2UocHNnbCksIEtNX0lSUTEpICsgcHNnbC0+b2Zmc2V0OworCXBwYWdlX29mZnNldCA9IDA7CisKKwkvKiBGb3IgZWFjaCBkYXRhIHBhZ2UgKi8KKwlzY3NpX2Zvcl9lYWNoX3NnKFNDcG50LCBkc2dsLCBzY3NpX3NnX2NvdW50KFNDcG50KSwgaSkgeworCQlkYWRkciA9IGttYXBfYXRvbWljKHNnX3BhZ2UoZHNnbCksIEtNX0lSUTApICsgZHNnbC0+b2Zmc2V0OworCisJCS8qIEZvciBlYWNoIHNlY3Rvci1zaXplZCBjaHVuayBpbiBkYXRhIHBhZ2UgKi8KKwkJZm9yIChqID0gMCA7IGogPCBkc2dsLT5sZW5ndGggOyBqICs9IHNjc2lfZGVidWdfc2VjdG9yX3NpemUpIHsKKworCQkJLyogSWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudAorCQkJICogcHJvdGVjdGlvbiBwYWdlIGFkdmFuY2UgdG8gdGhlIG5leHQgb25lCisJCQkgKi8KKwkJCWlmIChwcGFnZV9vZmZzZXQgPj0gcHNnbC0+bGVuZ3RoKSB7CisJCQkJa3VubWFwX2F0b21pYyhwYWRkciwgS01fSVJRMSk7CisJCQkJcHNnbCA9IHNnX25leHQocHNnbCk7CisJCQkJQlVHX09OKHBzZ2wgPT0gTlVMTCk7CisJCQkJcGFkZHIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHBzZ2wpLCBLTV9JUlExKQorCQkJCQkrIHBzZ2wtPm9mZnNldDsKKwkJCQlwcGFnZV9vZmZzZXQgPSAwOworCQkJfQorCisJCQlzZHQgPSBwYWRkciArIHBwYWdlX29mZnNldDsKKworCQkJc3dpdGNoIChzY3NpX2RlYnVnX2d1YXJkKSB7CisJCQljYXNlIDE6CisJCQkJY3N1bSA9IGlwX2NvbXB1dGVfY3N1bShkYWRkciwKKwkJCQkJCSAgICAgICBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQljc3VtID0gY3B1X3RvX2JlMTYoY3JjX3QxMGRpZihkYWRkciwKKwkJCQkJCSAgICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJQlVHKCk7CisJCQkJcmV0ID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKHNkdC0+Z3VhcmRfdGFnICE9IGNzdW0pIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBHVUFSRCBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdSAiIFwKKwkJCQkgICAgICAgInJjdmQgMHglMDR4LCBjYWxjdWxhdGVkIDB4JTA0eFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXNlY3RvciwKKwkJCQkgICAgICAgYmUxNl90b19jcHUoc2R0LT5ndWFyZF90YWcpLAorCQkJCSAgICAgICBiZTE2X3RvX2NwdShjc3VtKSk7CisJCQkJcmV0ID0gMHgwMTsKKwkJCQlkdW1wX3NlY3RvcihkYWRkciwgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWlmIChzY3NpX2RlYnVnX2RpZiAhPSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTiAmJgorCQkJICAgIGJlMzJfdG9fY3B1KHNkdC0+cmVmX3RhZykKKwkJCSAgICAhPSAoc3RhcnRfc2VjICYgMHhmZmZmZmZmZikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOworCQkJCXJldCA9IDB4MDM7CisJCQkJZHVtcF9zZWN0b3IoZGFkZHIsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQkvKiBXb3VsZCBiZSBncmVhdCB0byBjb3B5IHRoaXMgaW4gYmlnZ2VyCisJCQkgKiBjaHVua3MuICBIb3dldmVyLCBmb3IgdGhlIHNha2Ugb2YKKwkJCSAqIGNvcnJlY3RuZXNzIHdlIG5lZWQgdG8gdmVyaWZ5IGVhY2ggc2VjdG9yCisJCQkgKiBiZWZvcmUgd3JpdGluZyBpdCB0byAic3RhYmxlIiBzdG9yYWdlCisJCQkgKi8KKwkJCW1lbWNweShkaWZfc3RvcmVwICsgZGlmX29mZnNldChzZWN0b3IpLCBzZHQsIDgpOworCisJCQlzZWN0b3IrKzsKKworCQkJaWYgKHNlY3RvciA9PSBzZGVidWdfc3RvcmVfc2VjdG9ycykKKwkJCQlzZWN0b3IgPSAwOwkvKiBGb3JjZSB3cmFwICovCisKKwkJCXN0YXJ0X3NlYysrOworCQkJZGFkZHIgKz0gc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZTsKKwkJCXBwYWdlX29mZnNldCArPSBzaXplb2Yoc3RydWN0IHNkX2RpZl90dXBsZSk7CisJCX0KKworCQlrdW5tYXBfYXRvbWljKGRhZGRyLCBLTV9JUlEwKTsKKwl9CisKKwlrdW5tYXBfYXRvbWljKHBhZGRyLCBLTV9JUlExKTsKKworCWRpeF93cml0ZXMrKzsKKworCXJldHVybiAwOworCitvdXQ6CisJZGlmX2Vycm9ycysrOworCWt1bm1hcF9hdG9taWMoZGFkZHIsIEtNX0lSUTApOworCWt1bm1hcF9hdG9taWMocGFkZHIsIEtNX0lSUTEpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgcmVzcF93cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKIAkJICAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCiB7CkBAIC0xNTc5LDYgKzE4NTAsMTYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyogRElYICsgVDEwIERJRiAqLworCWlmIChzY3NpX2RlYnVnX2RpeCAmJiBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKSB7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3dyaXRlKFNDcG50LCBsYmEsIG51bSk7CisKKwkJaWYgKHByb3RfcmV0KSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOworCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfQorCX0KKwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGRldmlwLCBsYmEsIG51bSwgMSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19ydywgaWZsYWdzKTsKQEAgLTIwOTUsNiArMjM3NiwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHZwZF91c2VfaG9zdG5vLCBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vLCBpbnQsCiAJCSAgIFNfSVJVR08gfCBTX0lXVVNSKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChzZWN0b3Jfc2l6ZSwgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkaXgsIHNjc2lfZGVidWdfZGl4LCBpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX25hbWVkKGRpZiwgc2NzaV9kZWJ1Z19kaWYsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZ3VhcmQsIHNjc2lfZGVidWdfZ3VhcmQsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYXRvLCBzY3NpX2RlYnVnX2F0bywgaW50LCBTX0lSVUdPKTsKIAogTU9EVUxFX0FVVEhPUigiRXJpYyBZb3VuZ2RhbGUgKyBEb3VnbGFzIEdpbGJlcnQiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0NTSSBkZWJ1ZyBhZGFwdGVyIGRyaXZlciIpOwpAQCAtMjExNyw3ICsyNDAyLDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHZpcnR1YWxfZ2IsICJ2aXJ0dWFsIGdpZ2FieXRlIHNpemUgKGRlZj0wIC0+IHVzZSBkZXZfc2l6ZV9tYikiKTsKIE1PRFVMRV9QQVJNX0RFU0ModnBkX3VzZV9ob3N0bm8sICIwIC0+IGRldiBpZHMgaWdub3JlIGhvc3RubyAoZGVmPTEgLT4gdW5pcXVlIGRldiBpZHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHNlY3Rvcl9zaXplLCAiaGFyZHdhcmUgc2VjdG9yIHNpemUgaW4gYnl0ZXMgKGRlZj01MTIpIik7Ci0KK01PRFVMRV9QQVJNX0RFU0MoZGl4LCAiZGF0YSBpbnRlZ3JpdHkgZXh0ZW5zaW9ucyBtYXNrIChkZWY9MCkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlmLCAiZGF0YSBpbnRlZ3JpdHkgZmllbGQgdHlwZTogMC0zIChkZWY9MCkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZ3VhcmQsICJwcm90ZWN0aW9uIGNoZWNrc3VtOiAwPWNyYywgMT1pcCAoZGVmPTApIik7CitNT0RVTEVfUEFSTV9ERVNDKGF0bywgImFwcGxpY2F0aW9uIHRhZyBvd25lcnNoaXA6IDA9ZGlzayAxPWhvc3QgKGRlZj0xKSIpOwogCiBzdGF0aWMgY2hhciBzZGVidWdfaW5mb1syNTZdOwogCkBAIC0yMTY0LDE0ICsyNDUyLDE0IEBACiAJICAgICJkZWxheT0lZCwgbWF4X2x1bnM9JWQsIHNjc2lfbGV2ZWw9JWRcbiIKIAkgICAgInNlY3Rvcl9zaXplPSVkIGJ5dGVzLCBjeWxpbmRlcnM9JWQsIGhlYWRzPSVkLCBzZWN0b3JzPSVkXG4iCiAJICAgICJudW1iZXIgb2YgYWJvcnRzPSVkLCBkZXZpY2VfcmVzZXQ9JWQsIGJ1c19yZXNldHM9JWQsICIKLQkgICAgImhvc3RfcmVzZXRzPSVkXG4iLAorCSAgICAiaG9zdF9yZXNldHM9JWRcbmRpeF9yZWFkcz0lZCBkaXhfd3JpdGVzPSVkIGRpZl9lcnJvcnM9JWRcbiIsCiAJICAgIFNDU0lfREVCVUdfVkVSU0lPTiwgc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUsIHNjc2lfZGVidWdfbnVtX3RndHMsCiAJICAgIHNjc2lfZGVidWdfZGV2X3NpemVfbWIsIHNjc2lfZGVidWdfb3B0cywgc2NzaV9kZWJ1Z19ldmVyeV9udGgsCiAJICAgIHNjc2lfZGVidWdfY21uZF9jb3VudCwgc2NzaV9kZWJ1Z19kZWxheSwKIAkgICAgc2NzaV9kZWJ1Z19tYXhfbHVucywgc2NzaV9kZWJ1Z19zY3NpX2xldmVsLAogCSAgICBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplLCBzZGVidWdfY3lsaW5kZXJzX3Blciwgc2RlYnVnX2hlYWRzLAogCSAgICBzZGVidWdfc2VjdG9yc19wZXIsIG51bV9hYm9ydHMsIG51bV9kZXZfcmVzZXRzLCBudW1fYnVzX3Jlc2V0cywKLQkgICAgbnVtX2hvc3RfcmVzZXRzKTsKKwkgICAgbnVtX2hvc3RfcmVzZXRzLCBkaXhfcmVhZHMsIGRpeF93cml0ZXMsIGRpZl9lcnJvcnMpOwogCWlmIChwb3MgPCBvZmZzZXQpIHsKIAkJbGVuID0gMDsKIAkJYmVnaW4gPSBwb3M7CkBAIC0yNDUyLDYgKzI3NDAsMzEgQEAKIH0KIERSSVZFUl9BVFRSKHNlY3Rvcl9zaXplLCBTX0lSVUdPLCBzZGVidWdfc2VjdG9yX3NpemVfc2hvdywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNkZWJ1Z19kaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGRwLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBzY3NpX2RlYnVnX2RpeCk7Cit9CitEUklWRVJfQVRUUihkaXgsIFNfSVJVR08sIHNkZWJ1Z19kaXhfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNkZWJ1Z19kaWZfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGRwLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBzY3NpX2RlYnVnX2RpZik7Cit9CitEUklWRVJfQVRUUihkaWYsIFNfSVJVR08sIHNkZWJ1Z19kaWZfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNkZWJ1Z19ndWFyZF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNjc2lfZGVidWdfZ3VhcmQpOworfQorRFJJVkVSX0FUVFIoZ3VhcmQsIFNfSVJVR08sIHNkZWJ1Z19ndWFyZF9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2RlYnVnX2F0b19zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNjc2lfZGVidWdfYXRvKTsKK30KK0RSSVZFUl9BVFRSKGF0bywgU19JUlVHTywgc2RlYnVnX2F0b19zaG93LCBOVUxMKTsKKworCiAvKiBOb3RlOiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNyZWF0ZXMgYXR0cmlidXRlIGZpbGVzIGluIHRoZQogICAgL3N5cy9idXMvcHNldWRvL2RyaXZlcnMvc2NzaV9kZWJ1ZyBkaXJlY3RvcnkuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlc2UKICAgIGZpbGVzIChvdmVyIHRob3NlIGZvdW5kIGluIHRoZSAvc3lzL21vZHVsZS9zY3NpX2RlYnVnL3BhcmFtZXRlcnMKQEAgLTI0NzgsMTEgKzI3OTEsMTkgQEAKIAlyZXQgfD0gZHJpdmVyX2NyZWF0ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmlydHVhbF9nYik7CiAJcmV0IHw9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX3ZwZF91c2VfaG9zdG5vKTsKIAlyZXQgfD0gZHJpdmVyX2NyZWF0ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfc2VjdG9yX3NpemUpOworCXJldCB8PSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9kaXgpOworCXJldCB8PSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9kaWYpOworCXJldCB8PSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9ndWFyZCk7CisJcmV0IHw9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX2F0byk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZG9fcmVtb3ZlX2RyaXZlcmZzX2ZpbGVzKHZvaWQpCiB7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfYXRvKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9ndWFyZCk7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGlmKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9kaXgpOwogCWRyaXZlcl9yZW1vdmVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX3NlY3Rvcl9zaXplKTsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl92cGRfdXNlX2hvc3Rubyk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmlydHVhbF9nYik7CkBAIC0yNTI2LDExICsyODQ3LDMzIEBACiAJY2FzZSA0MDk2OgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogaW52YWxpZCBzZWN0b3Jfc2l6ZSAldVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGludmFsaWQgc2VjdG9yX3NpemUgJWRcbiIsCiAJCSAgICAgICBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJc3dpdGNoIChzY3NpX2RlYnVnX2RpZikgeworCisJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKKwljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgorCWNhc2UgU0RfRElGX1RZUEUzX1BST1RFQ1RJT046CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGRpZiBtdXN0IGJlIDAsIDEgb3IgM1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzY3NpX2RlYnVnX2d1YXJkID4gMSkgeworCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZ3VhcmQgbXVzdCBiZSAwIG9yIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2NzaV9kZWJ1Z19hdG8gPiAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBhdG8gbXVzdCBiZSAwIG9yIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiA8IDEpCiAJCXNjc2lfZGVidWdfZGV2X3NpemVfbWIgPSAxOyAgLyogZm9yY2UgbWluaW11bSAxIE1CIHJhbWRpc2sgKi8KIAlzeiA9ICh1bnNpZ25lZCBsb25nKXNjc2lfZGVidWdfZGV2X3NpemVfbWIgKiAxMDQ4NTc2OwpAQCAtMjU2Myw2ICsyOTA2LDI0IEBACiAJaWYgKHNjc2lfZGVidWdfbnVtX3BhcnRzID4gMCkKIAkJc2RlYnVnX2J1aWxkX3BhcnRzKGZha2Vfc3RvcmVwLCBzeik7CiAKKwlpZiAoc2NzaV9kZWJ1Z19kaWYpIHsKKwkJaW50IGRpZl9zaXplOworCisJCWRpZl9zaXplID0gc2RlYnVnX3N0b3JlX3NlY3RvcnMgKiBzaXplb2Yoc3RydWN0IHNkX2RpZl90dXBsZSk7CisJCWRpZl9zdG9yZXAgPSB2bWFsbG9jKGRpZl9zaXplKTsKKworCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZGlmX3N0b3JlcCAldSBieXRlcyBAICVwXG4iLAorCQkgICAgICAgZGlmX3NpemUsIGRpZl9zdG9yZXApOworCisJCWlmIChkaWZfc3RvcmVwID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBvdXQgb2YgbWVtLiAoRElYKVxuIik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX3ZtOworCQl9CisKKwkJbWVtc2V0KGRpZl9zdG9yZXAsIDB4ZmYsIGRpZl9zaXplKTsKKwl9CisKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnBzZXVkb19wcmltYXJ5KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2RlYnVnOiBkZXZpY2VfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLApAQCAtMjYxNSw2ICsyOTc2LDggQEAKIGRldl91bnJlZzoKIAlkZXZpY2VfdW5yZWdpc3RlcigmcHNldWRvX3ByaW1hcnkpOwogZnJlZV92bToKKwlpZiAoZGlmX3N0b3JlcCkKKwkJdmZyZWUoZGlmX3N0b3JlcCk7CiAJdmZyZWUoZmFrZV9zdG9yZXApOwogCiAJcmV0dXJuIHJldDsKQEAgLTI2MzIsNiArMjk5NSw5IEBACiAJYnVzX3VucmVnaXN0ZXIoJnBzZXVkb19sbGRfYnVzKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmcHNldWRvX3ByaW1hcnkpOwogCisJaWYgKGRpZl9zdG9yZXApCisJCXZmcmVlKGRpZl9zdG9yZXApOworCiAJdmZyZWUoZmFrZV9zdG9yZXApOwogfQogCkBAIC0yNzMyLDYgKzMwOTgsOCBAQAogCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwID0gTlVMTDsKIAlpbnQgaW5qX3JlY292ZXJlZCA9IDA7CiAJaW50IGlual90cmFuc3BvcnQgPSAwOworCWludCBpbmpfZGlmID0gMDsKKwlpbnQgaW5qX2RpeCA9IDA7CiAJaW50IGRlbGF5X292ZXJyaWRlID0gMDsKIAogCXNjc2lfc2V0X3Jlc2lkKFNDcG50LCAwKTsKQEAgLTI3NjksNiArMzEzNywxMCBAQAogCQkJaW5qX3JlY292ZXJlZCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KIAkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfVFJBTlNQT1JUX0VSUiAmIHNjc2lfZGVidWdfb3B0cykKIAkJCWlual90cmFuc3BvcnQgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCisJCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJRl9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCisJCQlpbmpfZGlmID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLworCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESVhfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQorCQkJaW5qX2RpeCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KIAl9CiAKIAlpZiAoZGV2aXAtPndsdW4pIHsKQEAgLTI4NzAsNiArMzI0MiwxMiBAQAogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBBQk9SVEVEX0NPTU1BTkQsCiAJCQkJCVRSQU5TUE9SVF9QUk9CTEVNLCBBQ0tfTkFLX1RPKTsKIAkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoaW5qX2RpZiAmJiAoMCA9PSBlcnJzdHMpKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7CisJCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoaW5qX2RpeCAmJiAoMCA9PSBlcnJzdHMpKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7CisJCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSRVBPUlRfTFVOUzoJLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KQEAgLTI4OTQsNiArMzI3MiwxMiBAQAogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCiAJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CiAJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGlual9kaWYgJiYgKDAgPT0gZXJyc3RzKSkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIDEpOworCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGlual9kaXggJiYgKDAgPT0gZXJyc3RzKSkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOworCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgTU9ERV9TRU5TRToKQEAgLTI5ODIsNiArMzM2Niw3IEBACiAgICAgICAgIGludCBlcnJvciA9IDA7CiAgICAgICAgIHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7CiAgICAgICAgIHN0cnVjdCBTY3NpX0hvc3QgKmhwbnQ7CisJaW50IGhvc3RfcHJvdDsKIAogCXNkYmdfaG9zdCA9IHRvX3NkZWJ1Z19ob3N0KGRldik7CiAKQEAgLTMwMDAsNiArMzM4NSw1MCBAQAogCQlocG50LT5tYXhfaWQgPSBzY3NpX2RlYnVnX251bV90Z3RzOwogCWhwbnQtPm1heF9sdW4gPSBTQU0yX1dMVU5fUkVQT1JUX0xVTlM7CS8qID0gc2NzaV9kZWJ1Z19tYXhfbHVuczsgKi8KIAorCWhvc3RfcHJvdCA9IDA7CisKKwlzd2l0Y2ggKHNjc2lfZGVidWdfZGlmKSB7CisKKwljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgorCQlob3N0X3Byb3QgPSBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTjsKKwkJaWYgKHNjc2lfZGVidWdfZGl4KQorCQkJaG9zdF9wcm90IHw9IFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OOworCQlicmVhazsKKworCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046CisJCWhvc3RfcHJvdCA9IFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OOworCQlpZiAoc2NzaV9kZWJ1Z19kaXgpCisJCQlob3N0X3Byb3QgfD0gU0hPU1RfRElYX1RZUEUyX1BST1RFQ1RJT047CisJCWJyZWFrOworCisJY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKKwkJaG9zdF9wcm90ID0gU0hPU1RfRElGX1RZUEUzX1BST1RFQ1RJT047CisJCWlmIChzY3NpX2RlYnVnX2RpeCkKKwkJCWhvc3RfcHJvdCB8PSBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoc2NzaV9kZWJ1Z19kaXgpCisJCQlob3N0X3Byb3QgfD0gU0hPU1RfRElYX1RZUEUwX1BST1RFQ1RJT047CisJCWJyZWFrOworCX0KKworCXNjc2lfaG9zdF9zZXRfcHJvdChocG50LCBob3N0X3Byb3QpOworCisJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogaG9zdCBwcm90ZWN0aW9uJXMlcyVzJXMlcyVzJXNcbiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTikgPyAiIERJRjEiIDogIiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESUZfVFlQRTJfUFJPVEVDVElPTikgPyAiIERJRjIiIDogIiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTikgPyAiIERJRjMiIDogIiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESVhfVFlQRTBfUFJPVEVDVElPTikgPyAiIERJWDAiIDogIiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESVhfVFlQRTFfUFJPVEVDVElPTikgPyAiIERJWDEiIDogIiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESVhfVFlQRTJfUFJPVEVDVElPTikgPyAiIERJWDIiIDogIiIsCisJICAgICAgIChob3N0X3Byb3QgJiBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTikgPyAiIERJWDMiIDogIiIpOworCisJaWYgKHNjc2lfZGVidWdfZ3VhcmQgPT0gMSkKKwkJc2NzaV9ob3N0X3NldF9ndWFyZChocG50LCBTSE9TVF9ESVhfR1VBUkRfSVApOworCWVsc2UKKwkJc2NzaV9ob3N0X3NldF9ndWFyZChocG50LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKKwogICAgICAgICBlcnJvciA9IHNjc2lfYWRkX2hvc3QoaHBudCwgJnNkYmdfaG9zdC0+ZGV2KTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IGFkNmExMzcuLjBjMmM3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMTQ0MSw2ICsxNDQxLDExIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBlaF9sb2NrX2Rvb3JfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBpbnQgdXB0b2RhdGUpCit7CisJX19ibGtfcHV0X3JlcXVlc3QocmVxLT5xLCByZXEpOworfQorCiAvKioKICAqIHNjc2lfZWhfbG9ja19kb29yIC0gUHJldmVudCBtZWRpdW0gcmVtb3ZhbCBmb3IgdGhlIHNwZWNpZmllZCBkZXZpY2UKICAqIEBzZGV2OglTQ1NJIGRldmljZSB0byBwcmV2ZW50IG1lZGl1bSByZW1vdmFsCkBAIC0xNDYzLDIwICsxNDY4LDI5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNjc2lfZWhfbG9ja19kb29yKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQl1bnNpZ25lZCBjaGFyIGNtbmRbTUFYX0NPTU1BTkRfU0laRV07CisJc3RydWN0IHJlcXVlc3QgKnJlcTsKIAotCWNtbmRbMF0gPSBBTExPV19NRURJVU1fUkVNT1ZBTDsKLQljbW5kWzFdID0gMDsKLQljbW5kWzJdID0gMDsKLQljbW5kWzNdID0gMDsKLQljbW5kWzRdID0gU0NTSV9SRU1PVkFMX1BSRVZFTlQ7Ci0JY21uZFs1XSA9IDA7CisJcmVxID0gYmxrX2dldF9yZXF1ZXN0KHNkZXYtPnJlcXVlc3RfcXVldWUsIFJFQUQsIEdGUF9LRVJORUwpOworCWlmICghcmVxKQorCQlyZXR1cm47CiAKLQlzY3NpX2V4ZWN1dGVfYXN5bmMoc2RldiwgY21uZCwgNiwgRE1BX05PTkUsIE5VTEwsIDAsIDAsIDEwICogSFosCi0JCQkgICA1LCBOVUxMLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXEtPmNtZFswXSA9IEFMTE9XX01FRElVTV9SRU1PVkFMOworCXJlcS0+Y21kWzFdID0gMDsKKwlyZXEtPmNtZFsyXSA9IDA7CisJcmVxLT5jbWRbM10gPSAwOworCXJlcS0+Y21kWzRdID0gU0NTSV9SRU1PVkFMX1BSRVZFTlQ7CisJcmVxLT5jbWRbNV0gPSAwOworCisJcmVxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKHJlcS0+Y21kWzBdKTsKKworCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CisJcmVxLT50aW1lb3V0ID0gMTAgKiBIWjsKKwlyZXEtPnJldHJpZXMgPSA1OworCisJYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHJlcS0+cSwgTlVMTCwgcmVxLCAxLCBlaF9sb2NrX2Rvb3JfZG9uZSk7CiB9CiAKLQogLyoqCiAgKiBzY3NpX3Jlc3RhcnRfb3BlcmF0aW9ucyAtIHJlc3RhcnQgaW8gb3BlcmF0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgKiBAc2hvc3Q6CUhvc3Qgd2UgYXJlIHJlc3RhcnRpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGI4MmZmZDkuLjRiMTNlMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0yNzcsMTk2ICsyNzcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzY3NpX2V4ZWN1dGVfcmVxKTsKIAotc3RydWN0IHNjc2lfaW9fY29udGV4dCB7Ci0Jdm9pZCAqZGF0YTsKLQl2b2lkICgqZG9uZSkodm9pZCAqZGF0YSwgY2hhciAqc2Vuc2UsIGludCByZXN1bHQsIGludCByZXNpZCk7Ci0JY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwotfTsKLQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzY3NpX2lvX2NvbnRleHRfY2FjaGU7Ci0KLXN0YXRpYyB2b2lkIHNjc2lfZW5kX2FzeW5jKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCB1cHRvZGF0ZSkKLXsKLQlzdHJ1Y3Qgc2NzaV9pb19jb250ZXh0ICpzaW9jID0gcmVxLT5lbmRfaW9fZGF0YTsKLQotCWlmIChzaW9jLT5kb25lKQotCQlzaW9jLT5kb25lKHNpb2MtPmRhdGEsIHNpb2MtPnNlbnNlLCByZXEtPmVycm9ycywgcmVxLT5kYXRhX2xlbik7Ci0KLQlrbWVtX2NhY2hlX2ZyZWUoc2NzaV9pb19jb250ZXh0X2NhY2hlLCBzaW9jKTsKLQlfX2Jsa19wdXRfcmVxdWVzdChyZXEtPnEsIHJlcSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9tZXJnZV9iaW8oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKLQotCWJpby0+YmlfZmxhZ3MgJj0gfigxIDw8IEJJT19TRUdfVkFMSUQpOwotCWlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCi0JCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXKTsKLQlibGtfcXVldWVfYm91bmNlKHEsICZiaW8pOwotCi0JcmV0dXJuIGJsa19ycV9hcHBlbmRfYmlvKHEsIHJxLCBiaW8pOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2JpX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKQotewotCWJpb19wdXQoYmlvKTsKLX0KLQotLyoqCi0gKiBzY3NpX3JlcV9tYXBfc2cgLSBtYXAgYSBzY2F0dGVybGlzdCBpbnRvIGEgcmVxdWVzdAotICogQHJxOgkJcmVxdWVzdCB0byBmaWxsCi0gKiBAc2dsOglzY2F0dGVybGlzdAotICogQG5zZWdzOgludW1iZXIgb2YgZWxlbWVudHMKLSAqIEBidWZmbGVuOglsZW4gb2YgYnVmZmVyCi0gKiBAZ2ZwOgltZW1vcnkgYWxsb2NhdGlvbiBmbGFncwotICoKLSAqIHNjc2lfcmVxX21hcF9zZyBtYXBzIGEgc2NhdHRlcmxpc3QgaW50byBhIHJlcXVlc3Qgc28gdGhhdCB0aGUKLSAqIHJlcXVlc3QgY2FuIGJlIHNlbnQgdG8gdGhlIGJsb2NrIGxheWVyLiBXZSBkbyBub3QgdHJ1c3QgdGhlIHNjYXR0ZXJsaXN0Ci0gKiBzZW50IHRvIHVzZSwgYXMgc29tZSBVTERzIHVzZSB0aGF0IHN0cnVjdCB0byBvbmx5IG9yZ2FuaXplIHRoZSBwYWdlcy4KLSAqLwotc3RhdGljIGludCBzY3NpX3JlcV9tYXBfc2coc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCSAgIGludCBuc2VncywgdW5zaWduZWQgYnVmZmxlbiwgZ2ZwX3QgZ2ZwKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7Ci0JaW50IG5yX3BhZ2VzID0gKGJ1ZmZsZW4gKyBzZ2xbMF0ub2Zmc2V0ICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSBidWZmbGVuLCBsZW4sIGJ5dGVzLCBvZmY7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwotCWludCBpLCBlcnIsIG5yX3ZlY3MgPSAwOwotCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbnNlZ3MsIGkpIHsKLQkJcGFnZSA9IHNnX3BhZ2Uoc2cpOwotCQlvZmYgPSBzZy0+b2Zmc2V0OwotCQlsZW4gPSBzZy0+bGVuZ3RoOwotCi0JCXdoaWxlIChsZW4gPiAwICYmIGRhdGFfbGVuID4gMCkgewotCQkJLyoKLQkJCSAqIHNnIHNlbmRzIGEgc2NhdHRlcmxpc3QgdGhhdCBpcyBsYXJnZXIgdGhhbgotCQkJICogdGhlIGRhdGFfbGVuIGl0IHdhbnRzIHRyYW5zZmVycmVkIGZvciBjZXJ0YWluCi0JCQkgKiBJTyBzaXplcwotCQkJICovCi0JCQlieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmYpOwotCQkJYnl0ZXMgPSBtaW4oYnl0ZXMsIGRhdGFfbGVuKTsKLQotCQkJaWYgKCFiaW8pIHsKLQkJCQlucl92ZWNzID0gbWluX3QoaW50LCBCSU9fTUFYX1BBR0VTLCBucl9wYWdlcyk7Ci0JCQkJbnJfcGFnZXMgLT0gbnJfdmVjczsKLQotCQkJCWJpbyA9IGJpb19hbGxvYyhnZnAsIG5yX3ZlY3MpOwotCQkJCWlmICghYmlvKSB7Ci0JCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gZnJlZV9iaW9zOwotCQkJCX0KLQkJCQliaW8tPmJpX2VuZF9pbyA9IHNjc2lfYmlfZW5kaW87Ci0JCQl9Ci0KLQkJCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlLCBieXRlcywgb2ZmKSAhPQotCQkJICAgIGJ5dGVzKSB7Ci0JCQkJYmlvX3B1dChiaW8pOwotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBmcmVlX2Jpb3M7Ci0JCQl9Ci0KLQkJCWlmIChiaW8tPmJpX3ZjbnQgPj0gbnJfdmVjcykgewotCQkJCWVyciA9IHNjc2lfbWVyZ2VfYmlvKHJxLCBiaW8pOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JCQkJCWdvdG8gZnJlZV9iaW9zOwotCQkJCX0KLQkJCQliaW8gPSBOVUxMOwotCQkJfQotCi0JCQlwYWdlKys7Ci0JCQlsZW4gLT0gYnl0ZXM7Ci0JCQlkYXRhX2xlbiAtPWJ5dGVzOwotCQkJb2ZmID0gMDsKLQkJfQotCX0KLQotCXJxLT5idWZmZXIgPSBycS0+ZGF0YSA9IE5VTEw7Ci0JcnEtPmRhdGFfbGVuID0gYnVmZmxlbjsKLQlyZXR1cm4gMDsKLQotZnJlZV9iaW9zOgotCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkgewotCQlycS0+YmlvID0gYmlvLT5iaV9uZXh0OwotCQkvKgotCQkgKiBjYWxsIGVuZGlvIGluc3RlYWQgb2YgYmlvX3B1dCBpbmNhc2UgaXQgd2FzIGJvdW5jZWQKLQkJICovCi0JCWJpb19lbmRpbyhiaW8sIDApOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgotICogc2NzaV9leGVjdXRlX2FzeW5jIC0gaW5zZXJ0IHJlcXVlc3QKLSAqIEBzZGV2OglzY3NpIGRldmljZQotICogQGNtZDoJc2NzaSBjb21tYW5kCi0gKiBAY21kX2xlbjoJbGVuZ3RoIG9mIHNjc2kgY2RiCi0gKiBAZGF0YV9kaXJlY3Rpb246IERNQV9UT19ERVZJQ0UsIERNQV9GUk9NX0RFVklDRSwgb3IgRE1BX05PTkUKLSAqIEBidWZmZXI6CWRhdGEgYnVmZmVyICh0aGlzIGNhbiBiZSBhIGtlcm5lbCBidWZmZXIgb3Igc2NhdHRlcmxpc3QpCi0gKiBAYnVmZmxlbjoJbGVuIG9mIGJ1ZmZlcgotICogQHVzZV9zZzoJaWYgYnVmZmVyIGlzIGEgc2NhdHRlcmxpc3QgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCi0gKiBAdGltZW91dDoJcmVxdWVzdCB0aW1lb3V0IGluIHNlY29uZHMKLSAqIEByZXRyaWVzOgludW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcmVxdWVzdAotICogQHByaXZkYXRhOglkYXRhIHBhc3NlZCB0byBkb25lKCkKLSAqIEBkb25lOgljYWxsYmFjayBmdW5jdGlvbiB3aGVuIGRvbmUKLSAqIEBnZnA6CW1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCi0gKi8KLWludCBzY3NpX2V4ZWN1dGVfYXN5bmMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjbWQsCi0JCSAgICAgICBpbnQgY21kX2xlbiwgaW50IGRhdGFfZGlyZWN0aW9uLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sCi0JCSAgICAgICBpbnQgdXNlX3NnLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsIHZvaWQgKnByaXZkYXRhLAotCQkgICAgICAgdm9pZCAoKmRvbmUpKHZvaWQgKiwgY2hhciAqLCBpbnQsIGludCksIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwotCXN0cnVjdCBzY3NpX2lvX2NvbnRleHQgKnNpb2M7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHdyaXRlID0gKGRhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpOwotCi0Jc2lvYyA9IGttZW1fY2FjaGVfemFsbG9jKHNjc2lfaW9fY29udGV4dF9jYWNoZSwgZ2ZwKTsKLQlpZiAoIXNpb2MpCi0JCXJldHVybiBEUklWRVJfRVJST1IgPDwgMjQ7Ci0KLQlyZXEgPSBibGtfZ2V0X3JlcXVlc3Qoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgd3JpdGUsIGdmcCk7Ci0JaWYgKCFyZXEpCi0JCWdvdG8gZnJlZV9zZW5zZTsKLQlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwotCi0JaWYgKHVzZV9zZykKLQkJZXJyID0gc2NzaV9yZXFfbWFwX3NnKHJlcSwgYnVmZmVyLCB1c2Vfc2csIGJ1ZmZsZW4sIGdmcCk7Ci0JZWxzZSBpZiAoYnVmZmxlbikKLQkJZXJyID0gYmxrX3JxX21hcF9rZXJuKHJlcS0+cSwgcmVxLCBidWZmZXIsIGJ1ZmZsZW4sIGdmcCk7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIGZyZWVfcmVxOwotCi0JcmVxLT5jbWRfbGVuID0gY21kX2xlbjsKLQltZW1zZXQocmVxLT5jbWQsIDAsIEJMS19NQVhfQ0RCKTsgLyogQVRBUEkgaGF0ZXMgZ2FyYmFnZSBhZnRlciBDREIgKi8KLQltZW1jcHkocmVxLT5jbWQsIGNtZCwgcmVxLT5jbWRfbGVuKTsKLQlyZXEtPnNlbnNlID0gc2lvYy0+c2Vuc2U7Ci0JcmVxLT5zZW5zZV9sZW4gPSAwOwotCXJlcS0+dGltZW91dCA9IHRpbWVvdXQ7Ci0JcmVxLT5yZXRyaWVzID0gcmV0cmllczsKLQlyZXEtPmVuZF9pb19kYXRhID0gc2lvYzsKLQotCXNpb2MtPmRhdGEgPSBwcml2ZGF0YTsKLQlzaW9jLT5kb25lID0gZG9uZTsKLQotCWJsa19leGVjdXRlX3JxX25vd2FpdChyZXEtPnEsIE5VTEwsIHJlcSwgMSwgc2NzaV9lbmRfYXN5bmMpOwotCXJldHVybiAwOwotCi1mcmVlX3JlcToKLQlibGtfcHV0X3JlcXVlc3QocmVxKTsKLWZyZWVfc2Vuc2U6Ci0Ja21lbV9jYWNoZV9mcmVlKHNjc2lfaW9fY29udGV4dF9jYWNoZSwgc2lvYyk7Ci0JcmV0dXJuIERSSVZFUl9FUlJPUiA8PCAyNDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZXhlY3V0ZV9hc3luYyk7Ci0KIC8qCiAgKiBGdW5jdGlvbjogICAgc2NzaV9pbml0X2NtZF9lcnJoKCkKICAqCkBAIC0xOTIwLDIwICsxNzMwLDEyIEBACiB7CiAJaW50IGk7CiAKLQlzY3NpX2lvX2NvbnRleHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic2NzaV9pb19jb250ZXh0IiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzY3NpX2lvX2NvbnRleHQpLAotCQkJCQkwLCAwLCBOVUxMKTsKLQlpZiAoIXNjc2lfaW9fY29udGV4dF9jYWNoZSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNDU0k6IGNhbid0IGluaXQgc2NzaSBpbyBjb250ZXh0IGNhY2hlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJc2NzaV9zZGJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic2NzaV9kYXRhX2J1ZmZlciIsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciksCiAJCQkJCSAgIDAsIDAsIE5VTEwpOwogCWlmICghc2NzaV9zZGJfY2FjaGUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTQ1NJOiBjYW4ndCBpbml0IHNjc2kgc2RiIGNhY2hlXG4iKTsKLQkJZ290byBjbGVhbnVwX2lvX2NvbnRleHQ7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBTR19NRU1QT09MX05SOyBpKyspIHsKQEAgLTE5NjgsOCArMTc3MCw2IEBACiAJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koc2dwLT5zbGFiKTsKIAl9CiAJa21lbV9jYWNoZV9kZXN0cm95KHNjc2lfc2RiX2NhY2hlKTsKLWNsZWFudXBfaW9fY29udGV4dDoKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koc2NzaV9pb19jb250ZXh0X2NhY2hlKTsKIAogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMTk3OCw3ICsxNzc4LDYgQEAKIHsKIAlpbnQgaTsKIAotCWttZW1fY2FjaGVfZGVzdHJveShzY3NpX2lvX2NvbnRleHRfY2FjaGUpOwogCWttZW1fY2FjaGVfZGVzdHJveShzY3NpX3NkYl9jYWNoZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0dfTUVNUE9PTF9OUjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggOGY0ZGUyMC4uYTE0ZDI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtNzk3LDYgKzc5Nyw3IEBACiAJY2FzZSBUWVBFX0VOQ0xPU1VSRToKIAljYXNlIFRZUEVfQ09NTToKIAljYXNlIFRZUEVfUkFJRDoKKwljYXNlIFRZUEVfT1NEOgogCQlzZGV2LT53cml0ZWFibGUgPSAxOwogCQlicmVhazsKIAljYXNlIFRZUEVfUk9NOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZGE2MzgwMi4uZmE0NzExZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC0xMDQzLDcgKzEwNDMsNiBAQAogLyoqCiAgKiBzY3NpX3N5c2ZzX2FkZF9ob3N0IC0gYWRkIHNjc2kgaG9zdCB0byBzdWJzeXN0ZW0KICAqIEBzaG9zdDogICAgIHNjc2kgaG9zdCBzdHJ1Y3QgdG8gYWRkIHRvIHN1YnN5c3RlbQotICogQGRldjogICAgICAgcGFyZW50IHN0cnVjdCBkZXZpY2UgcG9pbnRlcgogICoqLwogaW50IHNjc2lfc3lzZnNfYWRkX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDVmNzc0MTcuLmExNTJmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC05NSw3ICs5NSw3IEBACiAJeyBGQ19QT1JUVFlQRV9OUE9SVCwJIk5Qb3J0IChmYWJyaWMgdmlhIHBvaW50LXRvLXBvaW50KSIgfSwKIAl7IEZDX1BPUlRUWVBFX05MUE9SVCwJIk5MUG9ydCAoZmFicmljIHZpYSBsb29wKSIgfSwKIAl7IEZDX1BPUlRUWVBFX0xQT1JULAkiTFBvcnQgKHByaXZhdGUgbG9vcCkiIH0sCi0JeyBGQ19QT1JUVFlQRV9QVFAsCSJQb2ludC1Uby1Qb2ludCAoZGlyZWN0IG5wb3J0IGNvbm5lY3Rpb24iIH0sCisJeyBGQ19QT1JUVFlQRV9QVFAsCSJQb2ludC1Uby1Qb2ludCAoZGlyZWN0IG5wb3J0IGNvbm5lY3Rpb24pIiB9LAogCXsgRkNfUE9SVFRZUEVfTlBJViwJCSJOUElWIFZQT1JUIiB9LAogfTsKIGZjX2VudW1fbmFtZV9zZWFyY2gocG9ydF90eXBlLCBmY19wb3J0X3R5cGUsIGZjX3BvcnRfdHlwZV9uYW1lcykKQEAgLTUzMywxMiArNTMzLDggQEAKIAlldmVudC0+ZXZlbnRfY29kZSA9IGV2ZW50X2NvZGU7CiAJZXZlbnQtPmV2ZW50X2RhdGEgPSBldmVudF9kYXRhOwogCi0JZXJyID0gbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyICYmIChlcnIgIT0gLUVTUkNIKSkJLyogZmlsdGVyIG5vIHJlY2lwaWVudCBlcnJvcnMgKi8KLQkJLyogbmxtc2dfbXVsdGljYXN0IGFscmVhZHkga2ZyZWVfc2tiJ2QgKi8KLQkJZ290byBzZW5kX2ZhaWw7Ci0KKwlubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKKwkJCUdGUF9LRVJORUwpOwogCXJldHVybjsKIAogc2VuZF9mYWlsX3NrYjoKQEAgLTYwNywxMiArNjAzLDggQEAKIAlldmVudC0+ZXZlbnRfY29kZSA9IEZDSF9FVlRfVkVORE9SX1VOSVFVRTsKIAltZW1jcHkoJmV2ZW50LT5ldmVudF9kYXRhLCBkYXRhX2J1ZiwgZGF0YV9sZW4pOwogCi0JZXJyID0gbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyICYmIChlcnIgIT0gLUVTUkNIKSkJLyogZmlsdGVyIG5vIHJlY2lwaWVudCBlcnJvcnMgKi8KLQkJLyogbmxtc2dfbXVsdGljYXN0IGFscmVhZHkga2ZyZWVfc2tiJ2QgKi8KLQkJZ290byBzZW5kX3ZlbmRvcl9mYWlsOwotCisJbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCisJCQlHRlBfS0VSTkVMKTsKIAlyZXR1cm47CiAKIHNlbmRfdmVuZG9yX2ZhaWxfc2tiOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwppbmRleCA3NWM5Mjk3Li4wOTQ3OTU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTI0NiwzMCArMjQ2LDEzIEBACiAJbWVtc2V0KGlob3N0LCAwLCBzaXplb2YoKmlob3N0KSk7CiAJYXRvbWljX3NldCgmaWhvc3QtPm5yX3NjYW5zLCAwKTsKIAltdXRleF9pbml0KCZpaG9zdC0+bXV0ZXgpOwotCi0Jc25wcmludGYoaWhvc3QtPnNjYW5fd29ya3FfbmFtZSwgc2l6ZW9mKGlob3N0LT5zY2FuX3dvcmtxX25hbWUpLAotCQkgImlzY3NpX3NjYW5fJWQiLCBzaG9zdC0+aG9zdF9ubyk7Ci0JaWhvc3QtPnNjYW5fd29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJCWlob3N0LT5zY2FuX3dvcmtxX25hbWUpOwotCWlmICghaWhvc3QtPnNjYW5fd29ya3EpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlzY3NpX3JlbW92ZV9ob3N0KHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlICpjZGV2KQotewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7Ci0Jc3RydWN0IGlzY3NpX2Nsc19ob3N0ICppaG9zdCA9IHNob3N0LT5zaG9zdF9kYXRhOwotCi0JZGVzdHJveV93b3JrcXVldWUoaWhvc3QtPnNjYW5fd29ya3EpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1MoaXNjc2lfaG9zdF9jbGFzcywKIAkJCSAgICAgICAiaXNjc2lfaG9zdCIsCiAJCQkgICAgICAgaXNjc2lfc2V0dXBfaG9zdCwKLQkJCSAgICAgICBpc2NzaV9yZW1vdmVfaG9zdCwKKwkJCSAgICAgICBOVUxMLAogCQkJICAgICAgIE5VTEwpOwogCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1MoaXNjc2lfc2Vzc2lvbl9jbGFzcywKQEAgLTU2OCw3ICs1NTEsNyBAQAogCSAqIHNjYW5uaW5nIGZyb20gdXNlcnNwYWNlKS4KIAkgKi8KIAlpZiAoc2hvc3QtPmhvc3R0LT5zY2FuX2ZpbmlzaGVkKSB7Ci0JCWlmIChxdWV1ZV93b3JrKGlob3N0LT5zY2FuX3dvcmtxLCAmc2Vzc2lvbi0+c2Nhbl93b3JrKSkKKwkJaWYgKHNjc2lfcXVldWVfd29yayhzaG9zdCwgJnNlc3Npb24tPnNjYW5fd29yaykpCiAJCQlhdG9taWNfaW5jKCZpaG9zdC0+bnJfc2NhbnMpOwogCX0KIH0KQEAgLTYzNiwxNCArNjE5LDYgQEAKIAlpc2NzaV9zZXNzaW9uX2V2ZW50KHNlc3Npb24sIElTQ1NJX0tFVkVOVF9VTkJJTkRfU0VTU0lPTik7CiB9CiAKLXN0YXRpYyBpbnQgaXNjc2lfdW5iaW5kX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQotewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKLQlzdHJ1Y3QgaXNjc2lfY2xzX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7Ci0KLQlyZXR1cm4gcXVldWVfd29yayhpaG9zdC0+c2Nhbl93b3JrcSwgJnNlc3Npb24tPnVuYmluZF93b3JrKTsKLX0KLQogc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKIGlzY3NpX2FsbG9jX3Nlc3Npb24oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJICAgIGludCBkZF9zaXplKQpAQCAtNzk2LDcgKzc3MSw2IEBACiB2b2lkIGlzY3NpX3JlbW92ZV9zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7Ci0Jc3RydWN0IGlzY3NpX2Nsc19ob3N0ICppaG9zdCA9IHNob3N0LT5zaG9zdF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtODIxLDcgKzc5NSw3IEBACiAKIAlzY3NpX3RhcmdldF91bmJsb2NrKCZzZXNzaW9uLT5kZXYpOwogCS8qIGZsdXNoIHJ1bm5pbmcgc2NhbnMgdGhlbiBkZWxldGUgZGV2aWNlcyAqLwotCWZsdXNoX3dvcmtxdWV1ZShpaG9zdC0+c2Nhbl93b3JrcSk7CisJc2NzaV9mbHVzaF93b3JrKHNob3N0KTsKIAlfX2lzY3NpX3VuYmluZF9zZXNzaW9uKCZzZXNzaW9uLT51bmJpbmRfd29yayk7CiAKIAkvKiBodyBpc2NzaSBtYXkgbm90IGhhdmUgcmVtb3ZlZCBhbGwgY29ubmVjdGlvbnMgZnJvbSBzZXNzaW9uICovCkBAIC05NjYsMTUgKzk0MCw3IEBACiBzdGF0aWMgaW50CiBpc2NzaV9icm9hZGNhc3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcCkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IG5ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCAxLCBnZnApOwotCWlmIChyYyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogY2FuIG5vdCBicm9hZGNhc3Qgc2tiICglZClcbiIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgZ2ZwKTsKIH0KIAogc3RhdGljIGludApAQCAtMTIwNyw3ICsxMTczLDcgQEAKIAkgKiB0aGUgdXNlciBhbmQgd2hlbiB0aGUgZGFlbW9uIGlzIHJlc3RhcnRlZCBpdCB3aWxsIGhhbmRsZSBpdAogCSAqLwogCXJjID0gaXNjc2lfYnJvYWRjYXN0X3NrYihza2IsIEdGUF9LRVJORUwpOwotCWlmIChyYyA8IDApCisJaWYgKHJjID09IC1FU1JDSCkKIAkJaXNjc2lfY2xzX3Nlc3Npb25fcHJpbnRrKEtFUk5fRVJSLCBzZXNzaW9uLAogCQkJCQkgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mIHNlc3Npb24gIgogCQkJCQkgImV2ZW50ICV1LiBDaGVjayBpc2NzaSBkYWVtb25cbiIsCkBAIC0xMjIzLDE0ICsxMTg5LDE1IEBACiB7CiAJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gcHJpdi0+aXNjc2lfdHJhbnNwb3J0OwogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbjsKLQl1aW50MzJfdCBob3N0X25vOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCiAJc2Vzc2lvbiA9IHRyYW5zcG9ydC0+Y3JlYXRlX3Nlc3Npb24oZXAsIGNtZHNfbWF4LCBxdWV1ZV9kZXB0aCwKLQkJCQkJICAgIGluaXRpYWxfY21kc24sICZob3N0X25vKTsKKwkJCQkJICAgIGluaXRpYWxfY21kc24pOwogCWlmICghc2Vzc2lvbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlldi0+ci5jX3Nlc3Npb25fcmV0Lmhvc3Rfbm8gPSBob3N0X25vOworCXNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKKwlldi0+ci5jX3Nlc3Npb25fcmV0Lmhvc3Rfbm8gPSBzaG9zdC0+aG9zdF9ubzsKIAlldi0+ci5jX3Nlc3Npb25fcmV0LnNpZCA9IHNlc3Npb24tPnNpZDsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NDcsNyArMTQxNCw4IEBACiAJY2FzZSBJU0NTSV9VRVZFTlRfVU5CSU5EX1NFU1NJT046CiAJCXNlc3Npb24gPSBpc2NzaV9zZXNzaW9uX2xvb2t1cChldi0+dS5kX3Nlc3Npb24uc2lkKTsKIAkJaWYgKHNlc3Npb24pCi0JCQlpc2NzaV91bmJpbmRfc2Vzc2lvbihzZXNzaW9uKTsKKwkJCXNjc2lfcXVldWVfd29yayhpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24pLAorCQkJCQkmc2Vzc2lvbi0+dW5iaW5kX3dvcmspOwogCQllbHNlCiAJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTE4MDksOCArMTc3Nyw3IEBACiAJcHJpdi0+ZGFlbW9uX3BpZCA9IC0xOwogCXByaXYtPmlzY3NpX3RyYW5zcG9ydCA9IHR0OwogCXByaXYtPnQudXNlcl9zY2FuID0gaXNjc2lfdXNlcl9zY2FuOwotCWlmICghKHR0LT5jYXBzICYgQ0FQX0RBVEFfUEFUSF9PRkZMT0FEKSkKLQkJcHJpdi0+dC5jcmVhdGVfd29ya19xdWV1ZSA9IDE7CisJcHJpdi0+dC5jcmVhdGVfd29ya19xdWV1ZSA9IDE7CiAKIAlwcml2LT5kZXYuY2xhc3MgPSAmaXNjc2lfdHJhbnNwb3J0X2NsYXNzOwogCWRldl9zZXRfbmFtZSgmcHJpdi0+ZGV2LCAiJXMiLCB0dC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDQ5NzBhZTQuLmFlYWI1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0xMjczLDQyICsxMjczLDEyNiBAQAogCXNka3AtPmNhcGFjaXR5ID0gMDsKIH0KIAotLyoKLSAqIHJlYWQgZGlzayBjYXBhY2l0eQotICovCi1zdGF0aWMgdm9pZAotc2RfcmVhZF9jYXBhY2l0eShzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCByZWFkX2NhcGFjaXR5X2Vycm9yKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLAorCQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkciwgaW50IHNlbnNlX3ZhbGlkLAorCQkJaW50IHRoZV9yZXN1bHQpCit7CisJc2RfcHJpbnRfcmVzdWx0KHNka3AsIHRoZV9yZXN1bHQpOworCWlmIChkcml2ZXJfYnl0ZSh0aGVfcmVzdWx0KSAmIERSSVZFUl9TRU5TRSkKKwkJc2RfcHJpbnRfc2Vuc2VfaGRyKHNka3AsIHNzaGRyKTsKKwllbHNlCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlNlbnNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKworCS8qCisJICogU2V0IGRpcnR5IGJpdCBmb3IgcmVtb3ZhYmxlIGRldmljZXMgaWYgbm90IHJlYWR5IC0KKwkgKiBzb21ldGltZXMgZHJpdmVzIHdpbGwgbm90IHJlcG9ydCB0aGlzIHByb3Blcmx5LgorCSAqLworCWlmIChzZHAtPnJlbW92YWJsZSAmJgorCSAgICBzZW5zZV92YWxpZCAmJiBzc2hkci0+c2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkKKwkJc2RwLT5jaGFuZ2VkID0gMTsKKworCS8qCisJICogV2UgdXNlZCB0byBzZXQgbWVkaWFfcHJlc2VudCB0byAwIGhlcmUgdG8gaW5kaWNhdGUgbm8gbWVkaWEKKwkgKiBpbiB0aGUgZHJpdmUsIGJ1dCBzb21lIGRyaXZlcyBmYWlsIHJlYWQgY2FwYWNpdHkgZXZlbiB3aXRoCisJICogbWVkaWEgcHJlc2VudCwgc28gd2UgY2FuJ3QgZG8gdGhhdC4KKwkgKi8KKwlzZGtwLT5jYXBhY2l0eSA9IDA7IC8qIHVua25vd24gbWFwcGVkIHRvIHplcm8gLSBhcyB1c3VhbCAqLworfQorCisjZGVmaW5lIFJDMTZfTEVOIDMyCisjaWYgUkMxNl9MRU4gPiBTRF9CVUZfU0laRQorI2Vycm9yIFJDMTZfTEVOIG11c3Qgbm90IGJlIG1vcmUgdGhhbiBTRF9CVUZfU0laRQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcmVhZF9jYXBhY2l0eV8xNihzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCwKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKIHsKIAl1bnNpZ25lZCBjaGFyIGNtZFsxNl07Ci0JaW50IHRoZV9yZXN1bHQsIHJldHJpZXM7Ci0JaW50IHNlY3Rvcl9zaXplID0gMDsKLQkvKiBGb3JjZSBSRUFEIENBUEFDSVRZKDE2KSB3aGVuIFBST1RFQ1Q9MSAqLwotCWludCBsb25ncmMgPSBzY3NpX2RldmljZV9wcm90ZWN0aW9uKHNka3AtPmRldmljZSkgPyAxIDogMDsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CiAJaW50IHNlbnNlX3ZhbGlkID0gMDsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCA9IHNka3AtPmRldmljZTsKKwlpbnQgdGhlX3Jlc3VsdDsKKwlpbnQgcmV0cmllcyA9IDM7CisJdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKKwl1bnNpZ25lZCBzZWN0b3Jfc2l6ZTsKIAotcmVwZWF0OgotCXJldHJpZXMgPSAzOwogCWRvIHsKLQkJaWYgKGxvbmdyYykgewotCQkJbWVtc2V0KCh2b2lkICopIGNtZCwgMCwgMTYpOwotCQkJY21kWzBdID0gU0VSVklDRV9BQ1RJT05fSU47Ci0JCQljbWRbMV0gPSBTQUlfUkVBRF9DQVBBQ0lUWV8xNjsKLQkJCWNtZFsxM10gPSAxMzsKLQkJCW1lbXNldCgodm9pZCAqKSBidWZmZXIsIDAsIDEzKTsKLQkJfSBlbHNlIHsKLQkJCWNtZFswXSA9IFJFQURfQ0FQQUNJVFk7Ci0JCQltZW1zZXQoKHZvaWQgKikgJmNtZFsxXSwgMCwgOSk7Ci0JCQltZW1zZXQoKHZvaWQgKikgYnVmZmVyLCAwLCA4KTsKLQkJfQotCQkKKwkJbWVtc2V0KGNtZCwgMCwgMTYpOworCQljbWRbMF0gPSBTRVJWSUNFX0FDVElPTl9JTjsKKwkJY21kWzFdID0gU0FJX1JFQURfQ0FQQUNJVFlfMTY7CisJCWNtZFsxM10gPSBSQzE2X0xFTjsKKwkJbWVtc2V0KGJ1ZmZlciwgMCwgUkMxNl9MRU4pOworCiAJCXRoZV9yZXN1bHQgPSBzY3NpX2V4ZWN1dGVfcmVxKHNkcCwgY21kLCBETUFfRlJPTV9ERVZJQ0UsCi0JCQkJCSAgICAgIGJ1ZmZlciwgbG9uZ3JjID8gMTMgOiA4LCAmc3NoZHIsCi0JCQkJCSAgICAgIFNEX1RJTUVPVVQsIFNEX01BWF9SRVRSSUVTLCBOVUxMKTsKKwkJCQkJYnVmZmVyLCBSQzE2X0xFTiwgJnNzaGRyLAorCQkJCQlTRF9USU1FT1VULCBTRF9NQVhfUkVUUklFUywgTlVMTCk7CiAKIAkJaWYgKG1lZGlhX25vdF9wcmVzZW50KHNka3AsICZzc2hkcikpCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlpZiAodGhlX3Jlc3VsdCkgeworCQkJc2Vuc2VfdmFsaWQgPSBzY3NpX3NlbnNlX3ZhbGlkKCZzc2hkcik7CisJCQlpZiAoc2Vuc2VfdmFsaWQgJiYKKwkJCSAgICBzc2hkci5zZW5zZV9rZXkgPT0gSUxMRUdBTF9SRVFVRVNUICYmCisJCQkgICAgKHNzaGRyLmFzYyA9PSAweDIwIHx8IHNzaGRyLmFzYyA9PSAweDI0KSAmJgorCQkJICAgIHNzaGRyLmFzY3EgPT0gMHgwMCkKKwkJCQkvKiBJbnZhbGlkIENvbW1hbmQgT3BlcmF0aW9uIENvZGUgb3IKKwkJCQkgKiBJbnZhbGlkIEZpZWxkIGluIENEQiwganVzdCByZXRyeQorCQkJCSAqIHNpbGVudGx5IHdpdGggUkMxMCAqLworCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldHJpZXMtLTsKKworCX0gd2hpbGUgKHRoZV9yZXN1bHQgJiYgcmV0cmllcyk7CisKKwlpZiAodGhlX3Jlc3VsdCkgeworCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJSRUFEIENBUEFDSVRZKDE2KSBmYWlsZWRcbiIpOworCQlyZWFkX2NhcGFjaXR5X2Vycm9yKHNka3AsIHNkcCwgJnNzaGRyLCBzZW5zZV92YWxpZCwgdGhlX3Jlc3VsdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNlY3Rvcl9zaXplID0JKGJ1ZmZlcls4XSA8PCAyNCkgfCAoYnVmZmVyWzldIDw8IDE2KSB8CisJCQkoYnVmZmVyWzEwXSA8PCA4KSB8IGJ1ZmZlclsxMV07CisJbGJhID0gICgoKHU2NClidWZmZXJbMF0gPDwgNTYpIHwgKCh1NjQpYnVmZmVyWzFdIDw8IDQ4KSB8CisJCSgodTY0KWJ1ZmZlclsyXSA8PCA0MCkgfCAoKHU2NClidWZmZXJbM10gPDwgMzIpIHwKKwkJKCh1NjQpYnVmZmVyWzRdIDw8IDI0KSB8ICgodTY0KWJ1ZmZlcls1XSA8PCAxNikgfAorCQkoKHU2NClidWZmZXJbNl0gPDwgOCkgfCAodTY0KWJ1ZmZlcls3XSk7CisKKwlzZF9yZWFkX3Byb3RlY3Rpb25fdHlwZShzZGtwLCBidWZmZXIpOworCisJaWYgKChzaXplb2Yoc2RrcC0+Y2FwYWNpdHkpID09IDQpICYmIChsYmEgPj0gMHhmZmZmZmZmZlVMTCkpIHsKKwkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiVG9vIGJpZyBmb3IgdGhpcyBrZXJuZWwuIFVzZSBhICIKKwkJCSJrZXJuZWwgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBsYXJnZSBibG9jayAiCisJCQkiZGV2aWNlcy5cbiIpOworCQlzZGtwLT5jYXBhY2l0eSA9IDA7CisJCXJldHVybiAtRU9WRVJGTE9XOworCX0KKworCXNka3AtPmNhcGFjaXR5ID0gbGJhICsgMTsKKwlyZXR1cm4gc2VjdG9yX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jYXBhY2l0eV8xMChzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCwKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBjaGFyIGNtZFsxNl07CisJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCWludCBzZW5zZV92YWxpZCA9IDA7CisJaW50IHRoZV9yZXN1bHQ7CisJaW50IHJldHJpZXMgPSAzOworCXNlY3Rvcl90IGxiYTsKKwl1bnNpZ25lZCBzZWN0b3Jfc2l6ZTsKKworCWRvIHsKKwkJY21kWzBdID0gUkVBRF9DQVBBQ0lUWTsKKwkJbWVtc2V0KCZjbWRbMV0sIDAsIDkpOworCQltZW1zZXQoYnVmZmVyLCAwLCA4KTsKKworCQl0aGVfcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShzZHAsIGNtZCwgRE1BX0ZST01fREVWSUNFLAorCQkJCQlidWZmZXIsIDgsICZzc2hkciwKKwkJCQkJU0RfVElNRU9VVCwgU0RfTUFYX1JFVFJJRVMsIE5VTEwpOworCisJCWlmIChtZWRpYV9ub3RfcHJlc2VudChzZGtwLCAmc3NoZHIpKQorCQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkJaWYgKHRoZV9yZXN1bHQpCiAJCQlzZW5zZV92YWxpZCA9IHNjc2lfc2Vuc2VfdmFsaWQoJnNzaGRyKTsKQEAgLTEzMTYsODUgKzE0MDAsOTYgQEAKIAogCX0gd2hpbGUgKHRoZV9yZXN1bHQgJiYgcmV0cmllcyk7CiAKLQlpZiAodGhlX3Jlc3VsdCAmJiAhbG9uZ3JjKSB7CisJaWYgKHRoZV9yZXN1bHQpIHsKIAkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiUkVBRCBDQVBBQ0lUWSBmYWlsZWRcbiIpOwotCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgdGhlX3Jlc3VsdCk7Ci0JCWlmIChkcml2ZXJfYnl0ZSh0aGVfcmVzdWx0KSAmIERSSVZFUl9TRU5TRSkKLQkJCXNkX3ByaW50X3NlbnNlX2hkcihzZGtwLCAmc3NoZHIpOwotCQllbHNlCi0JCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJTZW5zZSBub3QgYXZhaWxhYmxlLlxuIik7CisJCXJlYWRfY2FwYWNpdHlfZXJyb3Ioc2RrcCwgc2RwLCAmc3NoZHIsIHNlbnNlX3ZhbGlkLCB0aGVfcmVzdWx0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JCS8qIFNldCBkaXJ0eSBiaXQgZm9yIHJlbW92YWJsZSBkZXZpY2VzIGlmIG5vdCByZWFkeSAtCi0JCSAqIHNvbWV0aW1lcyBkcml2ZXMgd2lsbCBub3QgcmVwb3J0IHRoaXMgcHJvcGVybHkuICovCi0JCWlmIChzZHAtPnJlbW92YWJsZSAmJgotCQkgICAgc2Vuc2VfdmFsaWQgJiYgc3NoZHIuc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkKLQkJCXNkcC0+Y2hhbmdlZCA9IDE7CisJc2VjdG9yX3NpemUgPQkoYnVmZmVyWzRdIDw8IDI0KSB8IChidWZmZXJbNV0gPDwgMTYpIHwKKwkJCShidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107CisJbGJhID0JKGJ1ZmZlclswXSA8PCAyNCkgfCAoYnVmZmVyWzFdIDw8IDE2KSB8CisJCShidWZmZXJbMl0gPDwgOCkgfCBidWZmZXJbM107CiAKLQkJLyogRWl0aGVyIG5vIG1lZGlhIGFyZSBwcmVzZW50IGJ1dCB0aGUgZHJpdmUgZGlkbid0IHRlbGwgdXMsCi0JCSAgIG9yIHRoZXkgYXJlIHByZXNlbnQgYnV0IHRoZSByZWFkIGNhcGFjaXR5IGNvbW1hbmQgZmFpbHMgKi8KLQkJLyogc2RrcC0+bWVkaWFfcHJlc2VudCA9IDA7IC0tIG5vdCBhbHdheXMgY29ycmVjdCAqLwotCQlzZGtwLT5jYXBhY2l0eSA9IDA7IC8qIHVua25vd24gbWFwcGVkIHRvIHplcm8gLSBhcyB1c3VhbCAqLworCWlmICgoc2l6ZW9mKHNka3AtPmNhcGFjaXR5KSA9PSA0KSAmJiAobGJhID09IDB4ZmZmZmZmZmYpKSB7CisJCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgIlRvbyBiaWcgZm9yIHRoaXMga2VybmVsLiBVc2UgYSAiCisJCQkia2VybmVsIGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgbGFyZ2UgYmxvY2sgIgorCQkJImRldmljZXMuXG4iKTsKKwkJc2RrcC0+Y2FwYWNpdHkgPSAwOworCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwl9CiAKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAodGhlX3Jlc3VsdCAmJiBsb25ncmMpIHsKLQkJLyogUkVBRCBDQVBBQ0lUWSgxNikgaGFzIGJlZW4gZmFpbGVkICovCi0JCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlJFQUQgQ0FQQUNJVFkoMTYpIGZhaWxlZFxuIik7Ci0JCXNkX3ByaW50X3Jlc3VsdChzZGtwLCB0aGVfcmVzdWx0KTsKLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiVXNlIDB4ZmZmZmZmZmYgYXMgZGV2aWNlIHNpemVcbiIpOworCXNka3AtPmNhcGFjaXR5ID0gbGJhICsgMTsKKwlyZXR1cm4gc2VjdG9yX3NpemU7Cit9CiAKLQkJc2RrcC0+Y2FwYWNpdHkgPSAxICsgKHNlY3Rvcl90KSAweGZmZmZmZmZmOwkJCi0JCWdvdG8gZ290X2RhdGE7Ci0JfQkKLQkKLQlpZiAoIWxvbmdyYykgewotCQlzZWN0b3Jfc2l6ZSA9IChidWZmZXJbNF0gPDwgMjQpIHwKLQkJCShidWZmZXJbNV0gPDwgMTYpIHwgKGJ1ZmZlcls2XSA8PCA4KSB8IGJ1ZmZlcls3XTsKLQkJaWYgKGJ1ZmZlclswXSA9PSAweGZmICYmIGJ1ZmZlclsxXSA9PSAweGZmICYmCi0JCSAgICBidWZmZXJbMl0gPT0gMHhmZiAmJiBidWZmZXJbM10gPT0gMHhmZikgewotCQkJaWYoc2l6ZW9mKHNka3AtPmNhcGFjaXR5KSA+IDQpIHsKLQkJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJWZXJ5IGJpZyBkZXZpY2UuICIKLQkJCQkJICAiVHJ5aW5nIHRvIHVzZSBSRUFEIENBUEFDSVRZKDE2KS5cbiIpOwotCQkJCWxvbmdyYyA9IDE7Ci0JCQkJZ290byByZXBlYXQ7Ci0JCQl9Ci0JCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJUb28gYmlnIGZvciB0aGlzIGtlcm5lbC4gVXNlICIKLQkJCQkgICJhIGtlcm5lbCBjb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIGxhcmdlICIKLQkJCQkgICJibG9jayBkZXZpY2VzLlxuIik7Ci0JCQlzZGtwLT5jYXBhY2l0eSA9IDA7CitzdGF0aWMgaW50IHNkX3RyeV9yYzE2X2ZpcnN0KHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQoreworCWlmIChzZHAtPnNjc2lfbGV2ZWwgPiBTQ1NJX1NQQ18yKQorCQlyZXR1cm4gMTsKKwlpZiAoc2NzaV9kZXZpY2VfcHJvdGVjdGlvbihzZHApKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlYWQgZGlzayBjYXBhY2l0eQorICovCitzdGF0aWMgdm9pZAorc2RfcmVhZF9jYXBhY2l0eShzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJaW50IHNlY3Rvcl9zaXplOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOworCXNlY3Rvcl90IG9sZF9jYXBhY2l0eSA9IHNka3AtPmNhcGFjaXR5OworCisJaWYgKHNkX3RyeV9yYzE2X2ZpcnN0KHNkcCkpIHsKKwkJc2VjdG9yX3NpemUgPSByZWFkX2NhcGFjaXR5XzE2KHNka3AsIHNkcCwgYnVmZmVyKTsKKwkJaWYgKHNlY3Rvcl9zaXplID09IC1FT1ZFUkZMT1cpCiAJCQlnb3RvIGdvdF9kYXRhOworCQlpZiAoc2VjdG9yX3NpemUgPT0gLUVOT0RFVikKKwkJCXJldHVybjsKKwkJaWYgKHNlY3Rvcl9zaXplIDwgMCkKKwkJCXNlY3Rvcl9zaXplID0gcmVhZF9jYXBhY2l0eV8xMChzZGtwLCBzZHAsIGJ1ZmZlcik7CisJCWlmIChzZWN0b3Jfc2l6ZSA8IDApCisJCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJc2VjdG9yX3NpemUgPSByZWFkX2NhcGFjaXR5XzEwKHNka3AsIHNkcCwgYnVmZmVyKTsKKwkJaWYgKHNlY3Rvcl9zaXplID09IC1FT1ZFUkZMT1cpCisJCQlnb3RvIGdvdF9kYXRhOworCQlpZiAoc2VjdG9yX3NpemUgPCAwKQorCQkJcmV0dXJuOworCQlpZiAoKHNpemVvZihzZGtwLT5jYXBhY2l0eSkgPiA0KSAmJgorCQkgICAgKHNka3AtPmNhcGFjaXR5ID4gMHhmZmZmZmZmZlVMTCkpIHsKKwkJCWludCBvbGRfc2VjdG9yX3NpemUgPSBzZWN0b3Jfc2l6ZTsKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlZlcnkgYmlnIGRldmljZS4gIgorCQkJCQkiVHJ5aW5nIHRvIHVzZSBSRUFEIENBUEFDSVRZKDE2KS5cbiIpOworCQkJc2VjdG9yX3NpemUgPSByZWFkX2NhcGFjaXR5XzE2KHNka3AsIHNkcCwgYnVmZmVyKTsKKwkJCWlmIChzZWN0b3Jfc2l6ZSA8IDApIHsKKwkJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkJCSJVc2luZyAweGZmZmZmZmZmIGFzIGRldmljZSBzaXplXG4iKTsKKwkJCQlzZGtwLT5jYXBhY2l0eSA9IDEgKyAoc2VjdG9yX3QpIDB4ZmZmZmZmZmY7CisJCQkJc2VjdG9yX3NpemUgPSBvbGRfc2VjdG9yX3NpemU7CisJCQkJZ290byBnb3RfZGF0YTsKKwkJCX0KIAkJfQotCQlzZGtwLT5jYXBhY2l0eSA9IDEgKyAoKChzZWN0b3JfdClidWZmZXJbMF0gPDwgMjQpIHwKLQkJCShidWZmZXJbMV0gPDwgMTYpIHwKLQkJCShidWZmZXJbMl0gPDwgOCkgfAotCQkJYnVmZmVyWzNdKTsJCQkKLQl9IGVsc2UgewotCQlzZGtwLT5jYXBhY2l0eSA9IDEgKyAoKCh1NjQpYnVmZmVyWzBdIDw8IDU2KSB8Ci0JCQkoKHU2NClidWZmZXJbMV0gPDwgNDgpIHwKLQkJCSgodTY0KWJ1ZmZlclsyXSA8PCA0MCkgfAotCQkJKCh1NjQpYnVmZmVyWzNdIDw8IDMyKSB8Ci0JCQkoKHNlY3Rvcl90KWJ1ZmZlcls0XSA8PCAyNCkgfAotCQkJKChzZWN0b3JfdClidWZmZXJbNV0gPDwgMTYpIHwKLQkJCSgoc2VjdG9yX3QpYnVmZmVyWzZdIDw8IDgpICB8Ci0JCQkoc2VjdG9yX3QpYnVmZmVyWzddKTsKLQkJCQotCQlzZWN0b3Jfc2l6ZSA9IChidWZmZXJbOF0gPDwgMjQpIHwKLQkJCShidWZmZXJbOV0gPDwgMTYpIHwgKGJ1ZmZlclsxMF0gPDwgOCkgfCBidWZmZXJbMTFdOworCX0KIAotCQlzZF9yZWFkX3Byb3RlY3Rpb25fdHlwZShzZGtwLCBidWZmZXIpOwotCX0JCi0KLQkvKiBTb21lIGRldmljZXMgcmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycywgbm90IHRoZQotCSAqIGhpZ2hlc3Qgc2VjdG9yIG51bWJlci4gIE1ha2UgdGhlIG5lY2Vzc2FyeSBhZGp1c3RtZW50LiAqLwotCWlmIChzZHAtPmZpeF9jYXBhY2l0eSkgeworCS8qIFNvbWUgZGV2aWNlcyBhcmUga25vd24gdG8gcmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgYmxvY2tzLAorCSAqIG5vdCB0aGUgaGlnaGVzdCBibG9jayBudW1iZXIuICBTb21lIGRldmljZXMgaGF2ZSB2ZXJzaW9ucworCSAqIHdoaWNoIGRvIHRoaXMgYW5kIG90aGVycyB3aGljaCBkbyBub3QuICBTb21lIGRldmljZXMgd2UgbWlnaHQKKwkgKiBzdXNwZWN0IG9mIGRvaW5nIHRoaXMgYnV0IHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4uCisJICoKKwkgKiBJZiB3ZSBrbm93IHRoZSByZXBvcnRlZCBjYXBhY2l0eSBpcyB3cm9uZywgZGVjcmVtZW50IGl0LiAgSWYKKwkgKiB3ZSBjYW4gb25seSBndWVzcywgdGhlbiBhc3N1bWUgdGhlIG51bWJlciBvZiBibG9ja3MgaXMgZXZlbgorCSAqICh1c3VhbGx5IHRydWUgYnV0IG5vdCBhbHdheXMpIGFuZCBlcnIgb24gdGhlIHNpZGUgb2YgbG93ZXJpbmcKKwkgKiB0aGUgY2FwYWNpdHkuCisJICovCisJaWYgKHNkcC0+Zml4X2NhcGFjaXR5IHx8CisJICAgIChzZHAtPmd1ZXNzX2NhcGFjaXR5ICYmIChzZGtwLT5jYXBhY2l0eSAmIDB4MDEpKSkgeworCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiQWRqdXN0aW5nIHRoZSBzZWN0b3IgY291bnQgIgorCQkJCSJmcm9tIGl0cyByZXBvcnRlZCB2YWx1ZTogJWxsdVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBzZGtwLT5jYXBhY2l0eSk7CiAJCS0tc2RrcC0+Y2FwYWNpdHk7Ci0KLQkvKiBTb21lIGRldmljZXMgaGF2ZSB2ZXJzaW9uIHdoaWNoIHJlcG9ydCB0aGUgY29ycmVjdCBzaXplcwotCSAqIGFuZCBvdGhlcnMgd2hpY2ggZG8gbm90LiBXZSBndWVzcyBzaXplIGFjY29yZGluZyB0byBhIGhldXJpc3RpYwotCSAqIGFuZCBlcnIgb24gdGhlIHNpZGUgb2YgbG93ZXJpbmcgdGhlIGNhcGFjaXR5LiAqLwotCX0gZWxzZSB7Ci0JCWlmIChzZHAtPmd1ZXNzX2NhcGFjaXR5KQotCQkJaWYgKHNka3AtPmNhcGFjaXR5ICYgMHgwMSkgLyogb2RkIHNpemVzIGFyZSBvZGQgKi8KLQkJCQktLXNka3AtPmNhcGFjaXR5OwogCX0KIAogZ290X2RhdGE6CkBAIC0xNDM3LDEwICsxNTMyLDExIEBACiAJCXN0cmluZ19nZXRfc2l6ZShzeiwgU1RSSU5HX1VOSVRTXzEwLCBjYXBfc3RyXzEwLAogCQkJCXNpemVvZihjYXBfc3RyXzEwKSk7CiAKLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAotCQkJICAiJWxsdSAlZC1ieXRlIGhhcmR3YXJlIHNlY3RvcnM6ICglcy8lcylcbiIsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpc2RrcC0+Y2FwYWNpdHksCi0JCQkgIHNlY3Rvcl9zaXplLCBjYXBfc3RyXzEwLCBjYXBfc3RyXzIpOworCQlpZiAoc2RrcC0+Zmlyc3Rfc2NhbiB8fCBvbGRfY2FwYWNpdHkgIT0gc2RrcC0+Y2FwYWNpdHkpCisJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkJICAiJWxsdSAlZC1ieXRlIGhhcmR3YXJlIHNlY3RvcnM6ICglcy8lcylcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXNka3AtPmNhcGFjaXR5LAorCQkJCSAgc2VjdG9yX3NpemUsIGNhcF9zdHJfMTAsIGNhcF9zdHJfMik7CiAJfQogCiAJLyogUmVzY2FsZSBjYXBhY2l0eSB0byA1MTItYnl0ZSB1bml0cyAqLwpAQCAtMTQ3Nyw2ICsxNTczLDcgQEAKIAlpbnQgcmVzOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOwogCXN0cnVjdCBzY3NpX21vZGVfZGF0YSBkYXRhOworCWludCBvbGRfd3AgPSBzZGtwLT53cml0ZV9wcm90OwogCiAJc2V0X2Rpc2tfcm8oc2RrcC0+ZGlzaywgMCk7CiAJaWYgKHNkcC0+c2tpcF9tc19wYWdlXzNmKSB7CkBAIC0xNTE3LDExICsxNjE0LDEzIEBACiAJfSBlbHNlIHsKIAkJc2RrcC0+d3JpdGVfcHJvdCA9ICgoZGF0YS5kZXZpY2Vfc3BlY2lmaWMgJiAweDgwKSAhPSAwKTsKIAkJc2V0X2Rpc2tfcm8oc2RrcC0+ZGlzaywgc2RrcC0+d3JpdGVfcHJvdCk7Ci0JCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIldyaXRlIFByb3RlY3QgaXMgJXNcbiIsCi0JCQkgIHNka3AtPndyaXRlX3Byb3QgPyAib24iIDogIm9mZiIpOwotCQlzZF9wcmludGsoS0VSTl9ERUJVRywgc2RrcCwKLQkJCSAgIk1vZGUgU2Vuc2U6ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQkgIGJ1ZmZlclswXSwgYnVmZmVyWzFdLCBidWZmZXJbMl0sIGJ1ZmZlclszXSk7CisJCWlmIChzZGtwLT5maXJzdF9zY2FuIHx8IG9sZF93cCAhPSBzZGtwLT53cml0ZV9wcm90KSB7CisJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJXcml0ZSBQcm90ZWN0IGlzICVzXG4iLAorCQkJCSAgc2RrcC0+d3JpdGVfcHJvdCA/ICJvbiIgOiAib2ZmIik7CisJCQlzZF9wcmludGsoS0VSTl9ERUJVRywgc2RrcCwKKwkJCQkgICJNb2RlIFNlbnNlOiAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJCSAgYnVmZmVyWzBdLCBidWZmZXJbMV0sIGJ1ZmZlclsyXSwgYnVmZmVyWzNdKTsKKwkJfQogCX0KIH0KIApAQCAtMTUzOSw2ICsxNjM4LDkgQEAKIAlpbnQgbW9kZXBhZ2U7CiAJc3RydWN0IHNjc2lfbW9kZV9kYXRhIGRhdGE7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCWludCBvbGRfd2NlID0gc2RrcC0+V0NFOworCWludCBvbGRfcmNkID0gc2RrcC0+UkNEOworCWludCBvbGRfZHBvZnVhID0gc2RrcC0+RFBPRlVBOwogCiAJaWYgKHNkcC0+c2tpcF9tc19wYWdlXzgpCiAJCWdvdG8gZGVmYXVsdHM7CkBAIC0xNjEwLDEyICsxNzEyLDE0IEBACiAJCQlzZGtwLT5EUE9GVUEgPSAwOwogCQl9CiAKLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAotCQkgICAgICAgIldyaXRlIGNhY2hlOiAlcywgcmVhZCBjYWNoZTogJXMsICVzXG4iLAotCQkgICAgICAgc2RrcC0+V0NFID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJICAgICAgIHNka3AtPlJDRCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIsCi0JCSAgICAgICBzZGtwLT5EUE9GVUEgPyAic3VwcG9ydHMgRFBPIGFuZCBGVUEiCi0JCSAgICAgICA6ICJkb2Vzbid0IHN1cHBvcnQgRFBPIG9yIEZVQSIpOworCQlpZiAoc2RrcC0+Zmlyc3Rfc2NhbiB8fCBvbGRfd2NlICE9IHNka3AtPldDRSB8fAorCQkgICAgb2xkX3JjZCAhPSBzZGtwLT5SQ0QgfHwgb2xkX2Rwb2Z1YSAhPSBzZGtwLT5EUE9GVUEpCisJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkJICAiV3JpdGUgY2FjaGU6ICVzLCByZWFkIGNhY2hlOiAlcywgJXNcbiIsCisJCQkJICBzZGtwLT5XQ0UgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAorCQkJCSAgc2RrcC0+UkNEID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJCQkgIHNka3AtPkRQT0ZVQSA/ICJzdXBwb3J0cyBEUE8gYW5kIEZVQSIKKwkJCQkgIDogImRvZXNuJ3Qgc3VwcG9ydCBEUE8gb3IgRlVBIik7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTE3MTEsMTUgKzE4MTUsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBkZWZhdWx0cywgdW50aWwgdGhlIGRldmljZSB0ZWxscyB1cyBvdGhlcndpc2UgKi8KLQlzZHAtPnNlY3Rvcl9zaXplID0gNTEyOwotCXNka3AtPmNhcGFjaXR5ID0gMDsKLQlzZGtwLT5tZWRpYV9wcmVzZW50ID0gMTsKLQlzZGtwLT53cml0ZV9wcm90ID0gMDsKLQlzZGtwLT5XQ0UgPSAwOwotCXNka3AtPlJDRCA9IDA7Ci0Jc2RrcC0+QVRPID0gMDsKLQogCXNkX3NwaW51cF9kaXNrKHNka3ApOwogCiAJLyoKQEAgLTE3MzMsNiArMTgyOCw4IEBACiAJCXNkX3JlYWRfYXBwX3RhZ19vd24oc2RrcCwgYnVmZmVyKTsKIAl9CiAKKwlzZGtwLT5maXJzdF9zY2FuID0gMDsKKwogCS8qCiAJICogV2Ugbm93IGhhdmUgYWxsIGNhY2hlIHJlbGF0ZWQgaW5mbywgZGV0ZXJtaW5lIGhvdyB3ZSBkZWFsCiAJICogd2l0aCBvcmRlcmVkIHJlcXVlc3RzLiAgTm90ZSB0aGF0IGFzIHRoZSBjdXJyZW50IFNDU0kKQEAgLTE4NDMsNiArMTk0MCwxNiBAQAogCWdkLT5wcml2YXRlX2RhdGEgPSAmc2RrcC0+ZHJpdmVyOwogCWdkLT5xdWV1ZSA9IHNka3AtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsKIAorCS8qIGRlZmF1bHRzLCB1bnRpbCB0aGUgZGV2aWNlIHRlbGxzIHVzIG90aGVyd2lzZSAqLworCXNkcC0+c2VjdG9yX3NpemUgPSA1MTI7CisJc2RrcC0+Y2FwYWNpdHkgPSAwOworCXNka3AtPm1lZGlhX3ByZXNlbnQgPSAxOworCXNka3AtPndyaXRlX3Byb3QgPSAwOworCXNka3AtPldDRSA9IDA7CisJc2RrcC0+UkNEID0gMDsKKwlzZGtwLT5BVE8gPSAwOworCXNka3AtPmZpcnN0X3NjYW4gPSAxOworCiAJc2RfcmV2YWxpZGF0ZV9kaXNrKGdkKTsKIAogCWJsa19xdWV1ZV9wcmVwX3JxKHNkcC0+cmVxdWVzdF9xdWV1ZSwgc2RfcHJlcF9mbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDc1NjM4ZTcuLjcwODc3OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC01Myw2ICs1Myw3IEBACiAJdW5zaWduZWQJV0NFIDogMTsJLyogc3RhdGUgb2YgZGlzayBXQ0UgYml0ICovCiAJdW5zaWduZWQJUkNEIDogMTsJLyogc3RhdGUgb2YgZGlzayBSQ0QgYml0LCB1bnVzZWQgKi8KIAl1bnNpZ25lZAlEUE9GVUEgOiAxOwkvKiBzdGF0ZSBvZiBkaXNrIERQT0ZVQSBiaXQgKi8KKwl1bnNpZ25lZAlmaXJzdF9zY2FuIDogMTsKIH07CiAjZGVmaW5lIHRvX3Njc2lfZGlzayhvYmopIGNvbnRhaW5lcl9vZihvYmosc3RydWN0IHNjc2lfZGlzayxkZXYpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZXMuYyBiL2RyaXZlcnMvc2NzaS9zZXMuYwppbmRleCBlOTQ2ZTA1Li5jOTE0NmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2VzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Nlcy5jCkBAIC0zNDUsNDQgKzM0NSwyMSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFZQRF9JTlFVSVJZX1NJWkUgMzYKLQogc3RhdGljIHZvaWQgc2VzX21hdGNoX3RvX2VuY2xvc3VyZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwKIAkJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0ga21hbGxvYyhWUERfSU5RVUlSWV9TSVpFLCBHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CiAJdW5zaWduZWQgY2hhciAqZGVzYzsKLQl1MTYgdnBkX2xlbjsKKwl1bnNpZ25lZCBpbnQgdnBkX2xlbjsKIAlzdHJ1Y3QgZWZkIGVmZCA9IHsKIAkJLmFkZHIgPSAwLAogCX07Ci0JdW5zaWduZWQgY2hhciBjbWRbXSA9IHsKLQkJSU5RVUlSWSwKLQkJMSwKLQkJMHg4MywKLQkJVlBEX0lOUVVJUllfU0laRSA+PiA4LAotCQlWUERfSU5RVUlSWV9TSVpFICYgMHhmZiwKLQkJMAotCX07CiAKKwlidWYgPSBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCi0JaWYgKHNjc2lfZXhlY3V0ZV9yZXEoc2RldiwgY21kLCBETUFfRlJPTV9ERVZJQ0UsIGJ1ZiwKLQkJCSAgICAgVlBEX0lOUVVJUllfU0laRSwgTlVMTCwgU0VTX1RJTUVPVVQsIFNFU19SRVRSSUVTLAotCQkJICAgICBOVUxMKSkKLQkJZ290byBmcmVlOwotCi0JdnBkX2xlbiA9IChidWZbMl0gPDwgOCkgKyBidWZbM107Ci0Ja2ZyZWUoYnVmKTsKLQlidWYgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm47Ci0JY21kWzNdID0gdnBkX2xlbiA+PiA4OwotCWNtZFs0XSA9IHZwZF9sZW4gJiAweGZmOwotCWlmIChzY3NpX2V4ZWN1dGVfcmVxKHNkZXYsIGNtZCwgRE1BX0ZST01fREVWSUNFLCBidWYsCi0JCQkgICAgIHZwZF9sZW4sIE5VTEwsIFNFU19USU1FT1VULCBTRVNfUkVUUklFUywgTlVMTCkpCi0JCWdvdG8gZnJlZTsKKwl2cGRfbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKIAogCWRlc2MgPSBidWYgKyA0OwogCXdoaWxlIChkZXNjIDwgYnVmICsgdnBkX2xlbikgewpAQCAtMzkzLDcgKzM3MCw3IEBACiAJCXU4IHR5cGUgPSBkZXNjWzFdICYgMHgwZjsKIAkJdTggbGVuID0gZGVzY1szXTsKIAotCQlpZiAocGl2ICYmIGNvZGVfc2V0ID09IDEgJiYgYXNzb2MgPT0gMSAmJiBjb2RlX3NldCA9PSAxCisJCWlmIChwaXYgJiYgY29kZV9zZXQgPT0gMSAmJiBhc3NvYyA9PSAxCiAJCSAgICAmJiBwcm90byA9PSBTQ1NJX1BST1RPQ09MX1NBUyAmJiB0eXBlID09IDMgJiYgbGVuID09IDgpCiAJCQllZmQuYWRkciA9ICh1NjQpZGVzY1s0XSA8PCA1NiB8CiAJCQkJKHU2NClkZXNjWzVdIDw8IDQ4IHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNTE2OTI1ZC4uZmZjODc4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTk4LDcgKzk4LDYgQEAKIHN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaOwogCiAjZGVmaW5lIFNHX1NFQ1RPUl9TWiA1MTIKLSNkZWZpbmUgU0dfU0VDVE9SX01TSyAoU0dfU0VDVE9SX1NaIC0gMSkKIAogc3RhdGljIGludCBzZ19hZGQoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICopOwogc3RhdGljIHZvaWQgc2dfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKQEAgLTEzNywxMCArMTM2LDExIEBACiAJdm9sYXRpbGUgY2hhciBkb25lOwkvKiAwLT5iZWZvcmUgYmgsIDEtPmJlZm9yZSByZWFkLCAyLT5yZWFkICovCiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgZXhlY3V0ZV93b3JrIGV3OwogfSBTZ19yZXF1ZXN0OwogCiB0eXBlZGVmIHN0cnVjdCBzZ19mZCB7CQkvKiBob2xkcyB0aGUgc3RhdGUgb2YgYSBmaWxlIGRlc2NyaXB0b3IgKi8KLQlzdHJ1Y3Qgc2dfZmQgKm5leHRmcDsJLyogTlVMTCB3aGVuIGxhc3Qgb3BlbmVkIGZkIG9uIHRoaXMgZGV2aWNlICovCisJc3RydWN0IGxpc3RfaGVhZCBzZmRfc2libGluZ3M7CiAJc3RydWN0IHNnX2RldmljZSAqcGFyZW50ZHA7CS8qIG93bmluZyBkZXZpY2UgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7CS8qIHF1ZXVlIHJlYWQgdW50aWwgY29tbWFuZCBkb25lICovCiAJcndsb2NrX3QgcnFfbGlzdF9sb2NrOwkvKiBwcm90ZWN0IGFjY2VzcyB0byBsaXN0IGluIHJlcV9hcnIgKi8KQEAgLTE1OCw2ICsxNTgsOCBAQAogCWNoYXIgbmV4dF9jbWRfbGVuOwkvKiAwIC0+IGF1dG9tYXRpYyAoZGVmKSwgPjAgLT4gdXNlIG9uIG5leHQgd3JpdGUoKSAqLwogCWNoYXIga2VlcF9vcnBoYW47CS8qIDAgLT4gZHJvcCBvcnBoYW4gKGRlZiksIDEgLT4ga2VlcCBmb3IgcmVhZCgpICovCiAJY2hhciBtbWFwX2NhbGxlZDsJLyogMCAtPiBtbWFwKCkgbmV2ZXIgY2FsbGVkIG9uIHRoaXMgZmQgKi8KKwlzdHJ1Y3Qga3JlZiBmX3JlZjsKKwlzdHJ1Y3QgZXhlY3V0ZV93b3JrIGV3OwogfSBTZ19mZDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2dfZGV2aWNlIHsgLyogaG9sZHMgdGhlIHN0YXRlIG9mIGVhY2ggc2NzaSBnZW5lcmljIGRldmljZSAqLwpAQCAtMTY1LDI3ICsxNjcsMjUgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvX2V4Y2xfd2FpdDsJLyogcXVldWUgb3BlbigpIHdoZW4gT19FWENMIGluIHVzZSAqLwogCWludCBzZ190YWJsZXNpemU7CS8qIGFkYXB0ZXIncyBtYXggc2NhdHRlci1nYXRoZXIgdGFibGUgc2l6ZSAqLwogCXUzMiBpbmRleDsJCS8qIGRldmljZSBpbmRleCBudW1iZXIgKi8KLQlTZ19mZCAqaGVhZGZwOwkJLyogZmlyc3Qgb3BlbiBmZCBiZWxvbmdpbmcgdG8gdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNmZHM7CiAJdm9sYXRpbGUgY2hhciBkZXRhY2hlZDsJLyogMC0+YXR0YWNoZWQsIDEtPmRldGFjaGVkIHBlbmRpbmcgcmVtb3ZhbCAqLwogCXZvbGF0aWxlIGNoYXIgZXhjbHVkZTsJLyogb3BlbmVkIGZvciBleGNsdXNpdmUgYWNjZXNzICovCiAJY2hhciBzZ2RlYnVnOwkJLyogMC0+b2ZmLCAxLT5zZW5zZSwgOS0+ZHVtcCBkZXYsIDEwLT4gYWxsIGRldnMgKi8KIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAlzdHJ1Y3QgY2RldiAqIGNkZXY7CS8qIGNoYXJfZGV2IFtzeXNmczogL3N5cy9jZGV2L21ham9yL3NnPG4+XSAqLworCXN0cnVjdCBrcmVmIGRfcmVmOwogfSBTZ19kZXZpY2U7CiAKLXN0YXRpYyBpbnQgc2dfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBtb2RlKTsKIC8qIHRhc2tsZXQgb3Igc29mdCBpcnEgY2FsbGJhY2sgKi8KIHN0YXRpYyB2b2lkIHNnX3JxX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCB1cHRvZGF0ZSk7CiBzdGF0aWMgaW50IHNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZCk7CiBzdGF0aWMgdm9pZCBzZ19maW5pc2hfcmVtX3JlcShTZ19yZXF1ZXN0ICogc3JwKTsKIHN0YXRpYyBpbnQgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpOwotc3RhdGljIGludCBzZ19idWlsZF9zZ2F0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIGNvbnN0IFNnX2ZkICogc2ZwLAotCQkJIGludCB0YWJsZXNpemUpOwogc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCSAgIFNnX3JlcXVlc3QgKiBzcnApOwogc3RhdGljIHNzaXplX3Qgc2dfbmV3X3dyaXRlKFNnX2ZkICpzZnAsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgYmxvY2tpbmcsCi0JCQlpbnQgcmVhZF9vbmx5LCBTZ19yZXF1ZXN0ICoqb19zcnApOworCQkJaW50IHJlYWRfb25seSwgaW50IHNnX2lvX293bmVkLCBTZ19yZXF1ZXN0ICoqb19zcnApOwogc3RhdGljIGludCBzZ19jb21tb25fd3JpdGUoU2dfZmQgKiBzZnAsIFNnX3JlcXVlc3QgKiBzcnAsCiAJCQkgICB1bnNpZ25lZCBjaGFyICpjbW5kLCBpbnQgdGltZW91dCwgaW50IGJsb2NraW5nKTsKIHN0YXRpYyBpbnQgc2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpOwpAQCAtMTk0LDE2ICsxOTQsMTMgQEAKIHN0YXRpYyB2b2lkIHNnX2xpbmtfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgU2dfcmVxdWVzdCAqIHNycCwgaW50IHNpemUpOwogc3RhdGljIHZvaWQgc2dfdW5saW5rX3Jlc2VydmUoU2dfZmQgKiBzZnAsIFNnX3JlcXVlc3QgKiBzcnApOwogc3RhdGljIFNnX2ZkICpzZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcCwgaW50IGRldik7Ci1zdGF0aWMgaW50IHNnX3JlbW92ZV9zZnAoU2dfZGV2aWNlICogc2RwLCBTZ19mZCAqIHNmcCk7Ci1zdGF0aWMgdm9pZCBfX3NnX3JlbW92ZV9zZnAoU2dfZGV2aWNlICogc2RwLCBTZ19mZCAqIHNmcCk7CitzdGF0aWMgdm9pZCBzZ19yZW1vdmVfc2ZwKHN0cnVjdCBrcmVmICopOwogc3RhdGljIFNnX3JlcXVlc3QgKnNnX2dldF9ycV9tYXJrKFNnX2ZkICogc2ZwLCBpbnQgcGFja19pZCk7CiBzdGF0aWMgU2dfcmVxdWVzdCAqc2dfYWRkX3JlcXVlc3QoU2dfZmQgKiBzZnApOwogc3RhdGljIGludCBzZ19yZW1vdmVfcmVxdWVzdChTZ19mZCAqIHNmcCwgU2dfcmVxdWVzdCAqIHNycCk7CiBzdGF0aWMgaW50IHNnX3Jlc19pbl91c2UoU2dfZmQgKiBzZnApOwogc3RhdGljIFNnX2RldmljZSAqc2dfZ2V0X2RldihpbnQgZGV2KTsKLSNpZmRlZiBDT05GSUdfU0NTSV9QUk9DX0ZTCi1zdGF0aWMgaW50IHNnX2xhc3RfZGV2KHZvaWQpOwotI2VuZGlmCitzdGF0aWMgdm9pZCBzZ19wdXRfZGV2KFNnX2RldmljZSAqc2RwKTsKIAogI2RlZmluZSBTWl9TR19IRUFERVIgc2l6ZW9mKHN0cnVjdCBzZ19oZWFkZXIpCiAjZGVmaW5lIFNaX1NHX0lPX0hEUiBzaXplb2Yoc2dfaW9faGRyX3QpCkBAIC0yMzcsMjIgKzIzNCwxNyBAQAogCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19vcGVuOiBkZXY9JWQsIGZsYWdzPTB4JXhcbiIsIGRldiwgZmxhZ3MpKTsKIAlzZHAgPSBzZ19nZXRfZGV2KGRldik7Ci0JaWYgKCghc2RwKSB8fCAoIXNkcC0+ZGV2aWNlKSkgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCWlmIChzZHAtPmRldGFjaGVkKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKElTX0VSUihzZHApKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoc2RwKTsKKwkJc2RwID0gTlVMTDsKKwkJZ290byBzZ19wdXQ7CiAJfQogCiAJLyogVGhpcyBkcml2ZXIncyBtb2R1bGUgY291bnQgYnVtcGVkIGJ5IGZvcHNfZ2V0IGluIDxsaW51eC9mcy5oPiAqLwogCS8qIFByZXZlbnQgdGhlIGRldmljZSBkcml2ZXIgZnJvbSB2YW5pc2hpbmcgd2hpbGUgd2Ugc2xlZXAgKi8KIAlyZXR2YWwgPSBzY3NpX2RldmljZV9nZXQoc2RwLT5kZXZpY2UpOwotCWlmIChyZXR2YWwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KKwlpZiAocmV0dmFsKQorCQlnb3RvIHNnX3B1dDsKIAogCWlmICghKChmbGFncyAmIE9fTk9OQkxPQ0spIHx8CiAJICAgICAgc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkcC0+ZGV2aWNlKSkpIHsKQEAgLTI2NiwxMyArMjU4LDEzIEBACiAJCQlyZXR2YWwgPSAtRVBFUk07IC8qIENhbid0IGxvY2sgaXQgd2l0aCByZWFkIG9ubHkgYWNjZXNzICovCiAJCQlnb3RvIGVycm9yX291dDsKIAkJfQotCQlpZiAoc2RwLT5oZWFkZnAgJiYgKGZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZzZHAtPnNmZHMpICYmIChmbGFncyAmIE9fTk9OQkxPQ0spKSB7CiAJCQlyZXR2YWwgPSAtRUJVU1k7CiAJCQlnb3RvIGVycm9yX291dDsKIAkJfQogCQlyZXMgPSAwOwogCQlfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZHAtPm9fZXhjbF93YWl0LAotCQkJKChzZHAtPmhlYWRmcCB8fCBzZHAtPmV4Y2x1ZGUpID8gMCA6IChzZHAtPmV4Y2x1ZGUgPSAxKSksIHJlcyk7CisJCQkJCSAgICgoIWxpc3RfZW1wdHkoJnNkcC0+c2ZkcykgfHwgc2RwLT5leGNsdWRlKSA/IDAgOiAoc2RwLT5leGNsdWRlID0gMSkpLCByZXMpOwogCQlpZiAocmVzKSB7CiAJCQlyZXR2YWwgPSByZXM7CS8qIC1FUkVTVEFSVFNZUyBiZWNhdXNlIHNpZ25hbCBoaXQgcHJvY2VzcyAqLwogCQkJZ290byBlcnJvcl9vdXQ7CkBAIC0yOTQsNyArMjg2LDcgQEAKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQotCWlmICghc2RwLT5oZWFkZnApIHsJLyogbm8gZXhpc3Rpbmcgb3BlbnMgb24gdGhpcyBkZXZpY2UgKi8KKwlpZiAobGlzdF9lbXB0eSgmc2RwLT5zZmRzKSkgewkvKiBubyBleGlzdGluZyBvcGVucyBvbiB0aGlzIGRldmljZSAqLwogCQlzZHAtPnNnZGVidWcgPSAwOwogCQlxID0gc2RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWU7CiAJCXNkcC0+c2dfdGFibGVzaXplID0gbWluKHEtPm1heF9od19zZWdtZW50cywKQEAgLTMwMywxNiArMjk1LDIwIEBACiAJaWYgKChzZnAgPSBzZ19hZGRfc2ZwKHNkcCwgZGV2KSkpCiAJCWZpbHAtPnByaXZhdGVfZGF0YSA9IHNmcDsKIAllbHNlIHsKLQkJaWYgKGZsYWdzICYgT19FWENMKQorCQlpZiAoZmxhZ3MgJiBPX0VYQ0wpIHsKIAkJCXNkcC0+ZXhjbHVkZSA9IDA7CS8qIHVuZG8gaWYgZXJyb3IgKi8KKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2RwLT5vX2V4Y2xfd2FpdCk7CisJCX0KIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gMDsKLQotICAgICAgZXJyb3Jfb3V0OgotCXNjc2lfZGV2aWNlX3B1dChzZHAtPmRldmljZSk7CisJcmV0dmFsID0gMDsKK2Vycm9yX291dDoKKwlpZiAocmV0dmFsKQorCQlzY3NpX2RldmljZV9wdXQoc2RwLT5kZXZpY2UpOworc2dfcHV0OgorCWlmIChzZHApCisJCXNnX3B1dF9kZXYoc2RwKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTMyNywxMyArMzIzLDEzIEBACiAJaWYgKCghKHNmcCA9IChTZ19mZCAqKSBmaWxwLT5wcml2YXRlX2RhdGEpKSB8fCAoIShzZHAgPSBzZnAtPnBhcmVudGRwKSkpCiAJCXJldHVybiAtRU5YSU87CiAJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX3JlbGVhc2U6ICVzXG4iLCBzZHAtPmRpc2stPmRpc2tfbmFtZSkpOwotCWlmICgwID09IHNnX3JlbW92ZV9zZnAoc2RwLCBzZnApKSB7CS8qIFJldHVybnMgMSB3aGVuIHNkcCBnb25lICovCi0JCWlmICghc2RwLT5kZXRhY2hlZCkgewotCQkJc2NzaV9kZXZpY2VfcHV0KHNkcC0+ZGV2aWNlKTsKLQkJfQotCQlzZHAtPmV4Y2x1ZGUgPSAwOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNkcC0+b19leGNsX3dhaXQpOwotCX0KKworCXNmcC0+Y2xvc2VkID0gMTsKKworCXNkcC0+ZXhjbHVkZSA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZHAtPm9fZXhjbF93YWl0KTsKKworCWtyZWZfcHV0KCZzZnAtPmZfcmVmLCBzZ19yZW1vdmVfc2ZwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTU3LDcgKzU1Myw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCWJsb2NraW5nID0gIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiAJaWYgKG9sZF9oZHIucmVwbHlfbGVuIDwgMCkKLQkJcmV0dXJuIHNnX25ld193cml0ZShzZnAsIGZpbHAsIGJ1ZiwgY291bnQsIGJsb2NraW5nLCAwLCBOVUxMKTsKKwkJcmV0dXJuIHNnX25ld193cml0ZShzZnAsIGZpbHAsIGJ1ZiwgY291bnQsCisJCQkJICAgIGJsb2NraW5nLCAwLCAwLCBOVUxMKTsKIAlpZiAoY291bnQgPCAoU1pfU0dfSEVBREVSICsgNikpCiAJCXJldHVybiAtRUlPOwkvKiBUaGUgbWluaW11bSBzY3NpIGNvbW1hbmQgbGVuZ3RoIGlzIDYgYnl0ZXMuICovCiAKQEAgLTYzOCw3ICs2MzUsNyBAQAogCiBzdGF0aWMgc3NpemVfdAogc2dfbmV3X3dyaXRlKFNnX2ZkICpzZnAsIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkgc2l6ZV90IGNvdW50LCBpbnQgYmxvY2tpbmcsIGludCByZWFkX29ubHksCisJCSBzaXplX3QgY291bnQsIGludCBibG9ja2luZywgaW50IHJlYWRfb25seSwgaW50IHNnX2lvX293bmVkLAogCQkgU2dfcmVxdWVzdCAqKm9fc3JwKQogewogCWludCBrOwpAQCAtNjU4LDYgKzY1NSw3IEBACiAJCVNDU0lfTE9HX1RJTUVPVVQoMSwgcHJpbnRrKCJzZ19uZXdfd3JpdGU6IHF1ZXVlIGZ1bGxcbiIpKTsKIAkJcmV0dXJuIC1FRE9NOwogCX0KKwlzcnAtPnNnX2lvX293bmVkID0gc2dfaW9fb3duZWQ7CiAJaHAgPSAmc3JwLT5oZWFkZXI7CiAJaWYgKF9fY29weV9mcm9tX3VzZXIoaHAsIGJ1ZiwgU1pfU0dfSU9fSERSKSkgewogCQlzZ19yZW1vdmVfcmVxdWVzdChzZnAsIHNycCk7CkBAIC03NTUsMjQgKzc1MywxMyBAQAogCWhwLT5kdXJhdGlvbiA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CiAKIAlzcnAtPnJxLT50aW1lb3V0ID0gdGltZW91dDsKKwlrcmVmX2dldCgmc2ZwLT5mX3JlZik7IC8qIHNnX3JxX2VuZF9pbygpIGRvZXMga3JlZl9wdXQoKS4gKi8KIAlibGtfZXhlY3V0ZV9ycV9ub3dhaXQoc2RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWUsIHNkcC0+ZGlzaywKIAkJCSAgICAgIHNycC0+cnEsIDEsIHNnX3JxX2VuZF9pbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXNnX3NycF9kb25lKFNnX3JlcXVlc3QgKnNycCwgU2dfZmQgKnNmcCkKLXsKLQl1bnNpZ25lZCBsb25nIGlmbGFnczsKLQlpbnQgZG9uZTsKLQotCXJlYWRfbG9ja19pcnFzYXZlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQlkb25lID0gc3JwLT5kb25lOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOwotCXJldHVybiBkb25lOwotfQotCi1zdGF0aWMgaW50CiBzZ19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkgdW5zaWduZWQgaW50IGNtZF9pbiwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC04MDQsMjcgKzc5MSwyNiBAQAogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJcmVzdWx0ID0KIAkJCSAgICBzZ19uZXdfd3JpdGUoc2ZwLCBmaWxwLCBwLCBTWl9TR19JT19IRFIsCi0JCQkJCSBibG9ja2luZywgcmVhZF9vbmx5LCAmc3JwKTsKKwkJCQkJIGJsb2NraW5nLCByZWFkX29ubHksIDEsICZzcnApOwogCQkJaWYgKHJlc3VsdCA8IDApCiAJCQkJcmV0dXJuIHJlc3VsdDsKLQkJCXNycC0+c2dfaW9fb3duZWQgPSAxOwogCQkJd2hpbGUgKDEpIHsKIAkJCQlyZXN1bHQgPSAwOwkvKiBmb2xsb3dpbmcgbWFjcm8gdG8gYmVhdCByYWNlIGNvbmRpdGlvbiAqLwogCQkJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNmcC0+cmVhZF93YWl0LAotCQkJCQkoc2RwLT5kZXRhY2hlZCB8fCBzZnAtPmNsb3NlZCB8fCBzZ19zcnBfZG9uZShzcnAsIHNmcCkpLAotCQkJCQkJCSAgIHJlc3VsdCk7CisJCQkJCShzcnAtPmRvbmUgfHwgc2RwLT5kZXRhY2hlZCksCisJCQkJCXJlc3VsdCk7CiAJCQkJaWYgKHNkcC0+ZGV0YWNoZWQpCiAJCQkJCXJldHVybiAtRU5PREVWOwotCQkJCWlmIChzZnAtPmNsb3NlZCkKLQkJCQkJcmV0dXJuIDA7CS8qIHJlcXVlc3QgcGFja2V0IGRyb3BwZWQgYWxyZWFkeSAqLwotCQkJCWlmICgwID09IHJlc3VsdCkKKwkJCQl3cml0ZV9sb2NrX2lycSgmc2ZwLT5ycV9saXN0X2xvY2spOworCQkJCWlmIChzcnAtPmRvbmUpIHsKKwkJCQkJc3JwLT5kb25lID0gMjsKKwkJCQkJd3JpdGVfdW5sb2NrX2lycSgmc2ZwLT5ycV9saXN0X2xvY2spOwogCQkJCQlicmVhazsKKwkJCQl9CiAJCQkJc3JwLT5vcnBoYW4gPSAxOworCQkJCXdyaXRlX3VubG9ja19pcnEoJnNmcC0+cnFfbGlzdF9sb2NrKTsKIAkJCQlyZXR1cm4gcmVzdWx0OwkvKiAtRVJFU1RBUlRTWVMgYmVjYXVzZSBzaWduYWwgaGl0IHByb2Nlc3MgKi8KIAkJCX0KLQkJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2ZwLT5ycV9saXN0X2xvY2ssIGlmbGFncyk7Ci0JCQlzcnAtPmRvbmUgPSAyOwotCQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOwogCQkJcmVzdWx0ID0gc2dfbmV3X3JlYWQoc2ZwLCBwLCBTWl9TR19JT19IRFIsIHNycCk7CiAJCQlyZXR1cm4gKHJlc3VsdCA8IDApID8gcmVzdWx0IDogMDsKIAkJfQpAQCAtMTE1NCw3ICsxMTQwLDYgQEAKIHN0YXRpYyBpbnQKIHNnX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgbW9kZSkKIHsKLQlpbnQgcmV0dmFsOwogCVNnX2RldmljZSAqc2RwOwogCVNnX2ZkICpzZnA7CiAKQEAgLTExNjMsOCArMTE0OCw3IEBACiAJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX2Zhc3luYzogJXMsIG1vZGU9JWRcbiIsCiAJCQkJICAgc2RwLT5kaXNrLT5kaXNrX25hbWUsIG1vZGUpKTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG1vZGUsICZzZnAtPmFzeW5jX3FwKTsKLQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgbW9kZSwgJnNmcC0+YXN5bmNfcXApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjQwLDYgKzEyMjQsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2dfcnFfZW5kX2lvX3VzZXJjb250ZXh0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2dfcmVxdWVzdCAqc3JwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZ19yZXF1ZXN0LCBldy53b3JrKTsKKwlzdHJ1Y3Qgc2dfZmQgKnNmcCA9IHNycC0+cGFyZW50ZnA7CisKKwlzZ19maW5pc2hfcmVtX3JlcShzcnApOworCWtyZWZfcHV0KCZzZnAtPmZfcmVmLCBzZ19yZW1vdmVfc2ZwKTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgYSAiYm90dG9tIGhhbGYiIGhhbmRsZXIgdGhhdCBpcyBjYWxsZWQgYnkgdGhlIG1pZAogICogbGV2ZWwgd2hlbiBhIGNvbW1hbmQgaXMgY29tcGxldGVkIChvciBoYXMgZmFpbGVkKS4KQEAgLTEyNDcsMjQgKzEyNDAsMjMgQEAKIHN0YXRpYyB2b2lkIHNnX3JxX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCB1cHRvZGF0ZSkKIHsKIAlzdHJ1Y3Qgc2dfcmVxdWVzdCAqc3JwID0gcnEtPmVuZF9pb19kYXRhOwotCVNnX2RldmljZSAqc2RwID0gTlVMTDsKKwlTZ19kZXZpY2UgKnNkcDsKIAlTZ19mZCAqc2ZwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXVuc2lnbmVkIGludCBtczsKIAljaGFyICpzZW5zZTsKLQlpbnQgcmVzdWx0LCByZXNpZDsKKwlpbnQgcmVzdWx0LCByZXNpZCwgZG9uZSA9IDE7CiAKLQlpZiAoTlVMTCA9PSBzcnApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZ19jbWRfZG9uZTogTlVMTCByZXF1ZXN0XG4iKTsKKwlpZiAoV0FSTl9PTihzcnAtPmRvbmUgIT0gMCkpCiAJCXJldHVybjsKLQl9CisKIAlzZnAgPSBzcnAtPnBhcmVudGZwOwotCWlmIChzZnApCi0JCXNkcCA9IHNmcC0+cGFyZW50ZHA7Ci0JaWYgKChOVUxMID09IHNkcCkgfHwgc2RwLT5kZXRhY2hlZCkgewotCQlwcmludGsoS0VSTl9JTkZPICJzZ19jbWRfZG9uZTogZGV2aWNlIGRldGFjaGVkXG4iKTsKKwlpZiAoV0FSTl9PTihzZnAgPT0gTlVMTCkpCiAJCXJldHVybjsKLQl9CisKKwlzZHAgPSBzZnAtPnBhcmVudGRwOworCWlmICh1bmxpa2VseShzZHAtPmRldGFjaGVkKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2dfcnFfZW5kX2lvOiBkZXZpY2UgZGV0YWNoZWRcbiIpOwogCiAJc2Vuc2UgPSBycS0+c2Vuc2U7CiAJcmVzdWx0ID0gcnEtPmVycm9yczsKQEAgLTEzMDMsMzMgKzEyOTUsMjUgQEAKIAl9CiAJLyogUmVseSBvbiB3cml0ZSBwaGFzZSB0byBjbGVhbiBvdXQgc3JwIHN0YXR1cyB2YWx1ZXMsIHNvIG5vICJlbHNlIiAqLwogCi0JaWYgKHNmcC0+Y2xvc2VkKSB7CS8qIHdob29wcyB0aGlzIGZkIGFscmVhZHkgcmVsZWFzZWQsIGNsZWFudXAgKi8KLQkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX2NtZF9kb25lOiBhbHJlYWR5IGNsb3NlZCwgZnJlZWluZyAuLi5cbiIpKTsKLQkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKLQkJc3JwID0gTlVMTDsKLQkJaWYgKE5VTEwgPT0gc2ZwLT5oZWFkcnApIHsKLQkJCVNDU0lfTE9HX1RJTUVPVVQoMSwgcHJpbnRrKCJzZ19jbWRfZG9uZTogYWxyZWFkeSBjbG9zZWQsIGZpbmFsIGNsZWFudXBcbiIpKTsKLQkJCWlmICgwID09IHNnX3JlbW92ZV9zZnAoc2RwLCBzZnApKSB7CS8qIGRldmljZSBzdGlsbCBwcmVzZW50ICovCi0JCQkJc2NzaV9kZXZpY2VfcHV0KHNkcC0+ZGV2aWNlKTsKLQkJCX0KLQkJCXNmcCA9IE5VTEw7Ci0JCX0KLQl9IGVsc2UgaWYgKHNycCAmJiBzcnAtPm9ycGhhbikgeworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2ZwLT5ycV9saXN0X2xvY2ssIGlmbGFncyk7CisJaWYgKHVubGlrZWx5KHNycC0+b3JwaGFuKSkgewogCQlpZiAoc2ZwLT5rZWVwX29ycGhhbikKIAkJCXNycC0+c2dfaW9fb3duZWQgPSAwOwotCQllbHNlIHsKLQkJCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7Ci0JCQlzcnAgPSBOVUxMOwotCQl9CisJCWVsc2UKKwkJCWRvbmUgPSAwOwogCX0KLQlpZiAoc2ZwICYmIHNycCkgewotCQkvKiBOb3cgd2FrZSB1cCBhbnkgc2dfcmVhZCgpIHRoYXQgaXMgd2FpdGluZyBmb3IgdGhpcyBwYWNrZXQuICovCi0JCWtpbGxfZmFzeW5jKCZzZnAtPmFzeW5jX3FwLCBTSUdQT0xMLCBQT0xMX0lOKTsKLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQkJc3JwLT5kb25lID0gMTsKKwlzcnAtPmRvbmUgPSBkb25lOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKKworCWlmIChsaWtlbHkoZG9uZSkpIHsKKwkJLyogTm93IHdha2UgdXAgYW55IHNnX3JlYWQoKSB0aGF0IGlzIHdhaXRpbmcgZm9yIHRoaXMKKwkJICogcGFja2V0LgorCQkgKi8KIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZnAtPnJlYWRfd2FpdCk7Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQl9CisJCWtpbGxfZmFzeW5jKCZzZnAtPmFzeW5jX3FwLCBTSUdQT0xMLCBQT0xMX0lOKTsKKwkJa3JlZl9wdXQoJnNmcC0+Zl9yZWYsIHNnX3JlbW92ZV9zZnApOworCX0gZWxzZQorCQlleGVjdXRlX2luX3Byb2Nlc3NfY29udGV4dChzZ19ycV9lbmRfaW9fdXNlcmNvbnRleHQsICZzcnAtPmV3KTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKQEAgLTEzNjQsMTcgKzEzNDgsMTggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAia21hbGxvYyBTZ19kZXZpY2UgZmFpbHVyZVxuIik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KLQllcnJvciA9IC1FTk9NRU07CisKIAlpZiAoIWlkcl9wcmVfZ2V0KCZzZ19pbmRleF9pZHIsIEdGUF9LRVJORUwpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlkciBleHBhbnNpb24gU2dfZGV2aWNlIGZhaWx1cmVcbiIpOworCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKLQllcnJvciA9IGlkcl9nZXRfbmV3KCZzZ19pbmRleF9pZHIsIHNkcCwgJmspOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwogCisJZXJyb3IgPSBpZHJfZ2V0X25ldygmc2dfaW5kZXhfaWRyLCBzZHAsICZrKTsKIAlpZiAoZXJyb3IpIHsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlkciBhbGxvY2F0aW9uIFNnX2RldmljZSBmYWlsdXJlOiAlZFxuIiwKIAkJICAgICAgIGVycm9yKTsKIAkJZ290byBvdXQ7CkBAIC0xMzg4LDkgKzEzNzMsMTMgQEAKIAlkaXNrLT5maXJzdF9taW5vciA9IGs7CiAJc2RwLT5kaXNrID0gZGlzazsKIAlzZHAtPmRldmljZSA9IHNjc2lkcDsKKwlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZmRzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPm9fZXhjbF93YWl0KTsKIAlzZHAtPnNnX3RhYmxlc2l6ZSA9IG1pbihxLT5tYXhfaHdfc2VnbWVudHMsIHEtPm1heF9waHlzX3NlZ21lbnRzKTsKIAlzZHAtPmluZGV4ID0gazsKKwlrcmVmX2luaXQoJnNkcC0+ZF9yZWYpOworCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAKIAllcnJvciA9IDA7CiAgb3V0OgpAQCAtMTQwMSw2ICsxMzkwLDggQEAKIAlyZXR1cm4gc2RwOwogCiAgb3ZlcmZsb3c6CisJaWRyX3JlbW92ZSgmc2dfaW5kZXhfaWRyLCBrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKIAlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNjc2lkcCwKIAkJICAgICJVbmFibGUgdG8gYXR0YWNoIHNnIGRldmljZSB0eXBlPSVkLCBtaW5vciAiCiAJCSAgICAibnVtYmVyIGV4Y2VlZHMgJWRcbiIsIHNjc2lkcC0+dHlwZSwgU0dfTUFYX0RFVlMgLSAxKTsKQEAgLTE0ODgsNDkgKzE0NzksNDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkCi1zZ19yZW1vdmUoc3RydWN0IGRldmljZSAqY2xfZGV2LCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbF9pbnRmKQorc3RhdGljIHZvaWQgc2dfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHNnX2RldmljZSAqc2RwID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzZ19kZXZpY2UsIGRfcmVmKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogQ0FVVElPTiEgIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGNhbiBzdGlsbCBiZSBmb3VuZCB2aWEgaWRyX2ZpbmQoKQorCSAqIGV2ZW4gdGhvdWdoIHRoZSByZWZjb3VudCBpcyAwLiAgVGhlcmVmb3JlLCBkbyBpZHJfcmVtb3ZlKCkgQkVGT1JFCisJICogYW55IG90aGVyIGNsZWFudXAuCisJICovCisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGZsYWdzKTsKKwlpZHJfcmVtb3ZlKCZzZ19pbmRleF9pZHIsIHNkcC0+aW5kZXgpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBmbGFncyk7CisKKwlTQ1NJX0xPR19USU1FT1VUKDMsCisJCXByaW50aygic2dfZGV2aWNlX2Rlc3Ryb3k6ICVzXG4iLAorCQkJc2RwLT5kaXNrLT5kaXNrX25hbWUpKTsKKworCXB1dF9kaXNrKHNkcC0+ZGlzayk7CisJa2ZyZWUoc2RwKTsKK30KKworc3RhdGljIHZvaWQgc2dfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmNsX2Rldiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2xfaW50ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkcCA9IHRvX3Njc2lfZGV2aWNlKGNsX2Rldi0+cGFyZW50KTsKIAlTZ19kZXZpY2UgKnNkcCA9IGRldl9nZXRfZHJ2ZGF0YShjbF9kZXYpOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCVNnX2ZkICpzZnA7Ci0JU2dfZmQgKnRzZnA7Ci0JU2dfcmVxdWVzdCAqc3JwOwotCVNnX3JlcXVlc3QgKnRzcnA7Ci0JaW50IGRlbGF5OwogCi0JaWYgKCFzZHApCisJaWYgKCFzZHAgfHwgc2RwLT5kZXRhY2hlZCkKIAkJcmV0dXJuOwogCi0JZGVsYXkgPSAwOworCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19yZW1vdmU6ICVzXG4iLCBzZHAtPmRpc2stPmRpc2tfbmFtZSkpOworCisJLyogTmVlZCBhIHdyaXRlIGxvY2sgdG8gc2V0IHNkcC0+ZGV0YWNoZWQuICovCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCWlmIChzZHAtPmhlYWRmcCkgewotCQlzZHAtPmRldGFjaGVkID0gMTsKLQkJZm9yIChzZnAgPSBzZHAtPmhlYWRmcDsgc2ZwOyBzZnAgPSB0c2ZwKSB7Ci0JCQl0c2ZwID0gc2ZwLT5uZXh0ZnA7Ci0JCQlmb3IgKHNycCA9IHNmcC0+aGVhZHJwOyBzcnA7IHNycCA9IHRzcnApIHsKLQkJCQl0c3JwID0gc3JwLT5uZXh0cnA7Ci0JCQkJaWYgKHNmcC0+Y2xvc2VkIHx8ICgwID09IHNnX3NycF9kb25lKHNycCwgc2ZwKSkpCi0JCQkJCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7Ci0JCQl9Ci0JCQlpZiAoc2ZwLT5jbG9zZWQpIHsKLQkJCQlzY3NpX2RldmljZV9wdXQoc2RwLT5kZXZpY2UpOwotCQkJCV9fc2dfcmVtb3ZlX3NmcChzZHAsIHNmcCk7Ci0JCQl9IGVsc2UgewotCQkJCWRlbGF5ID0gMTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNmcC0+cmVhZF93YWl0KTsKLQkJCQlraWxsX2Zhc3luYygmc2ZwLT5hc3luY19xcCwgU0lHUE9MTCwKLQkJCQkJICAgIFBPTExfSFVQKTsKLQkJCX0KLQkJfQotCQlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfcmVtb3ZlOiBkZXY9JWQsIGRpcnR5XG4iLCBzZHAtPmluZGV4KSk7Ci0JCWlmIChOVUxMID09IHNkcC0+aGVhZGZwKSB7Ci0JCQlpZHJfcmVtb3ZlKCZzZ19pbmRleF9pZHIsIHNkcC0+aW5kZXgpOwotCQl9Ci0JfSBlbHNlIHsJLyogbm90aGluZyBhY3RpdmUsIHNpbXBsZSBjYXNlICovCi0JCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19yZW1vdmU6IGRldj0lZFxuIiwgc2RwLT5pbmRleCkpOwotCQlpZHJfcmVtb3ZlKCZzZ19pbmRleF9pZHIsIHNkcC0+aW5kZXgpOworCXNkcC0+ZGV0YWNoZWQgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2ZwLCAmc2RwLT5zZmRzLCBzZmRfc2libGluZ3MpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZnAtPnJlYWRfd2FpdCk7CisJCWtpbGxfZmFzeW5jKCZzZnAtPmFzeW5jX3FwLCBTSUdQT0xMLCBQT0xMX0hVUCk7CiAJfQogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwogCkBAIC0xNTM4LDEzICsxNTI2LDggQEAKIAlkZXZpY2VfZGVzdHJveShzZ19zeXNmc19jbGFzcywgTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCBzZHAtPmluZGV4KSk7CiAJY2Rldl9kZWwoc2RwLT5jZGV2KTsKIAlzZHAtPmNkZXYgPSBOVUxMOwotCXB1dF9kaXNrKHNkcC0+ZGlzayk7Ci0Jc2RwLT5kaXNrID0gTlVMTDsKLQlpZiAoTlVMTCA9PSBzZHAtPmhlYWRmcCkKLQkJa2ZyZWUoc2RwKTsKIAotCWlmIChkZWxheSkKLQkJbXNsZWVwKDEwKTsJLyogZGlydHkgZGV0YWNoIHNvIGRlbGF5IGRldmljZSBkZXN0cnVjdGlvbiAqLworCXNnX3B1dF9kZXYoc2RwKTsKIH0KIAogbW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKQEAgLTE3MzgsOCArMTcyMSw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCWlmICgwID09IGJsa19zaXplKQogCQkrK2Jsa19zaXplOwkvKiBkb24ndCBrbm93IHdoeSAqLwotLyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi8KLQlibGtfc2l6ZSA9IChibGtfc2l6ZSArIFNHX1NFQ1RPUl9NU0spICYgKH5TR19TRUNUT1JfTVNLKTsKKwkvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqLworCWJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7CiAJU0NTSV9MT0dfVElNRU9VVCg0LCBwcmludGsoInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXG4iLAogCQkJCSAgIGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTsKIApAQCAtMTk0MSwyMiArMTkyNCw2IEBACiAJcmV0dXJuIHJlc3A7CiB9CiAKLSNpZmRlZiBDT05GSUdfU0NTSV9QUk9DX0ZTCi1zdGF0aWMgU2dfcmVxdWVzdCAqCi1zZ19nZXRfbnRoX3JlcXVlc3QoU2dfZmQgKiBzZnAsIGludCBudGgpCi17Ci0JU2dfcmVxdWVzdCAqcmVzcDsKLQl1bnNpZ25lZCBsb25nIGlmbGFnczsKLQlpbnQgazsKLQotCXJlYWRfbG9ja19pcnFzYXZlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQlmb3IgKGsgPSAwLCByZXNwID0gc2ZwLT5oZWFkcnA7IHJlc3AgJiYgKGsgPCBudGgpOwotCSAgICAgKytrLCByZXNwID0gcmVzcC0+bmV4dHJwKSA7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc2ZwLT5ycV9saXN0X2xvY2ssIGlmbGFncyk7Ci0JcmV0dXJuIHJlc3A7Ci19Ci0jZW5kaWYKLQogLyogYWx3YXlzIGFkZHMgdG8gZW5kIG9mIGxpc3QgKi8KIHN0YXRpYyBTZ19yZXF1ZXN0ICoKIHNnX2FkZF9yZXF1ZXN0KFNnX2ZkICogc2ZwKQpAQCAtMjAzMiwyMiArMTk5OSw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotI2lmZGVmIENPTkZJR19TQ1NJX1BST0NfRlMKLXN0YXRpYyBTZ19mZCAqCi1zZ19nZXRfbnRoX3NmcChTZ19kZXZpY2UgKiBzZHAsIGludCBudGgpCi17Ci0JU2dfZmQgKnJlc3A7Ci0JdW5zaWduZWQgbG9uZyBpZmxhZ3M7Ci0JaW50IGs7Ci0KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKLQlmb3IgKGsgPSAwLCByZXNwID0gc2RwLT5oZWFkZnA7IHJlc3AgJiYgKGsgPCBudGgpOwotCSAgICAgKytrLCByZXNwID0gcmVzcC0+bmV4dGZwKSA7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKLQlyZXR1cm4gcmVzcDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgU2dfZmQgKgogc2dfYWRkX3NmcChTZ19kZXZpY2UgKiBzZHAsIGludCBkZXYpCiB7CkBAIC0yMDYyLDYgKzIwMTMsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNmcC0+cmVhZF93YWl0KTsKIAlyd2xvY2tfaW5pdCgmc2ZwLT5ycV9saXN0X2xvY2spOwogCisJa3JlZl9pbml0KCZzZnAtPmZfcmVmKTsKIAlzZnAtPnRpbWVvdXQgPSBTR19ERUZBVUxUX1RJTUVPVVQ7CiAJc2ZwLT50aW1lb3V0X3VzZXIgPSBTR19ERUZBVUxUX1RJTUVPVVRfVVNFUjsKIAlzZnAtPmZvcmNlX3BhY2tpZCA9IFNHX0RFRl9GT1JDRV9QQUNLX0lEOwpAQCAtMjA3MSwxNCArMjAyMyw3IEBACiAJc2ZwLT5rZWVwX29ycGhhbiA9IFNHX0RFRl9LRUVQX09SUEhBTjsKIAlzZnAtPnBhcmVudGRwID0gc2RwOwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKLQlpZiAoIXNkcC0+aGVhZGZwKQotCQlzZHAtPmhlYWRmcCA9IHNmcDsKLQllbHNlIHsJCQkvKiBhZGQgdG8gdGFpbCBvZiBleGlzdGluZyBsaXN0ICovCi0JCVNnX2ZkICpwZnAgPSBzZHAtPmhlYWRmcDsKLQkJd2hpbGUgKHBmcC0+bmV4dGZwKQotCQkJcGZwID0gcGZwLT5uZXh0ZnA7Ci0JCXBmcC0+bmV4dGZwID0gc2ZwOwotCX0KKwlsaXN0X2FkZF90YWlsKCZzZnAtPnNmZF9zaWJsaW5ncywgJnNkcC0+c2Zkcyk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX2FkZF9zZnA6IHNmcD0weCVwXG4iLCBzZnApKTsKIAlpZiAodW5saWtlbHkoc2dfYmlnX2J1ZmYgIT0gZGVmX3Jlc2VydmVkX3NpemUpKQpAQCAtMjA4OSw3NSArMjAzNCw1MiBAQAogCXNnX2J1aWxkX3Jlc2VydmUoc2ZwLCBidWZmbGVuKTsKIAlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfYWRkX3NmcDogICBidWZmbGVuPSVkLCBrX3VzZV9zZz0lZFxuIiwKIAkJCSAgIHNmcC0+cmVzZXJ2ZS5idWZmbGVuLCBzZnAtPnJlc2VydmUua191c2Vfc2cpKTsKKworCWtyZWZfZ2V0KCZzZHAtPmRfcmVmKTsKKwlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCXJldHVybiBzZnA7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX3NnX3JlbW92ZV9zZnAoU2dfZGV2aWNlICogc2RwLCBTZ19mZCAqIHNmcCkKK3N0YXRpYyB2b2lkIHNnX3JlbW92ZV9zZnBfdXNlcmNvbnRleHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCVNnX2ZkICpmcDsKLQlTZ19mZCAqcHJldl9mcDsKKwlzdHJ1Y3Qgc2dfZmQgKnNmcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2dfZmQsIGV3LndvcmspOworCXN0cnVjdCBzZ19kZXZpY2UgKnNkcCA9IHNmcC0+cGFyZW50ZHA7CiAKLQlwcmV2X2ZwID0gc2RwLT5oZWFkZnA7Ci0JaWYgKHNmcCA9PSBwcmV2X2ZwKQotCQlzZHAtPmhlYWRmcCA9IHByZXZfZnAtPm5leHRmcDsKLQllbHNlIHsKLQkJd2hpbGUgKChmcCA9IHByZXZfZnAtPm5leHRmcCkpIHsKLQkJCWlmIChzZnAgPT0gZnApIHsKLQkJCQlwcmV2X2ZwLT5uZXh0ZnAgPSBmcC0+bmV4dGZwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcHJldl9mcCA9IGZwOwotCQl9Ci0JfQorCS8qIENsZWFudXAgYW55IHJlc3BvbnNlcyB3aGljaCB3ZXJlIG5ldmVyIHJlYWQoKS4gKi8KKwl3aGlsZSAoc2ZwLT5oZWFkcnApCisJCXNnX2ZpbmlzaF9yZW1fcmVxKHNmcC0+aGVhZHJwKTsKKwogCWlmIChzZnAtPnJlc2VydmUuYnVmZmxlbiA+IDApIHsKLQkJU0NTSV9MT0dfVElNRU9VVCg2LCAKLQkJCXByaW50aygiX19zZ19yZW1vdmVfc2ZwOiAgICBidWZmbGVuPSVkLCBrX3VzZV9zZz0lZFxuIiwKLQkJCShpbnQpIHNmcC0+cmVzZXJ2ZS5idWZmbGVuLCAoaW50KSBzZnAtPnJlc2VydmUua191c2Vfc2cpKTsKKwkJU0NTSV9MT0dfVElNRU9VVCg2LAorCQkJcHJpbnRrKCJzZ19yZW1vdmVfc2ZwOiAgICBidWZmbGVuPSVkLCBrX3VzZV9zZz0lZFxuIiwKKwkJCQkoaW50KSBzZnAtPnJlc2VydmUuYnVmZmxlbiwKKwkJCQkoaW50KSBzZnAtPnJlc2VydmUua191c2Vfc2cpKTsKIAkJc2dfcmVtb3ZlX3NjYXQoJnNmcC0+cmVzZXJ2ZSk7CiAJfQotCXNmcC0+cGFyZW50ZHAgPSBOVUxMOwotCVNDU0lfTE9HX1RJTUVPVVQoNiwgcHJpbnRrKCJfX3NnX3JlbW92ZV9zZnA6ICAgIHNmcD0weCVwXG4iLCBzZnApKTsKKworCVNDU0lfTE9HX1RJTUVPVVQoNiwKKwkJcHJpbnRrKCJzZ19yZW1vdmVfc2ZwOiAlcywgc2ZwPTB4JXBcbiIsCisJCQlzZHAtPmRpc2stPmRpc2tfbmFtZSwKKwkJCXNmcCkpOwogCWtmcmVlKHNmcCk7CisKKwlzY3NpX2RldmljZV9wdXQoc2RwLT5kZXZpY2UpOworCXNnX3B1dF9kZXYoc2RwKTsKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIAotLyogUmV0dXJucyAwIGluIG5vcm1hbCBjYXNlLCAxIHdoZW4gZGV0YWNoZWQgYW5kIHNkcCBvYmplY3QgcmVtb3ZlZCAqLwotc3RhdGljIGludAotc2dfcmVtb3ZlX3NmcChTZ19kZXZpY2UgKiBzZHAsIFNnX2ZkICogc2ZwKQorc3RhdGljIHZvaWQgc2dfcmVtb3ZlX3NmcChzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlTZ19yZXF1ZXN0ICpzcnA7Ci0JU2dfcmVxdWVzdCAqdHNycDsKLQlpbnQgZGlydHkgPSAwOwotCWludCByZXMgPSAwOworCXN0cnVjdCBzZ19mZCAqc2ZwID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzZ19mZCwgZl9yZWYpOworCXN0cnVjdCBzZ19kZXZpY2UgKnNkcCA9IHNmcC0+cGFyZW50ZHA7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAKLQlmb3IgKHNycCA9IHNmcC0+aGVhZHJwOyBzcnA7IHNycCA9IHRzcnApIHsKLQkJdHNycCA9IHNycC0+bmV4dHJwOwotCQlpZiAoc2dfc3JwX2RvbmUoc3JwLCBzZnApKQotCQkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKLQkJZWxzZQotCQkJKytkaXJ0eTsKLQl9Ci0JaWYgKDAgPT0gZGlydHkpIHsKLQkJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOworCWxpc3RfZGVsKCZzZnAtPnNmZF9zaWJsaW5ncyk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZHAtPm9fZXhjbF93YWl0KTsKIAotCQl3cml0ZV9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7Ci0JCV9fc2dfcmVtb3ZlX3NmcChzZHAsIHNmcCk7Ci0JCWlmIChzZHAtPmRldGFjaGVkICYmIChOVUxMID09IHNkcC0+aGVhZGZwKSkgewotCQkJaWRyX3JlbW92ZSgmc2dfaW5kZXhfaWRyLCBzZHAtPmluZGV4KTsKLQkJCWtmcmVlKHNkcCk7Ci0JCQlyZXMgPSAxOwotCQl9Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCS8qIE1PRF9JTkMncyB0byBpbmhpYml0IHVubG9hZGluZyBzZyBhbmQgYXNzb2NpYXRlZCBhZGFwdGVyIGRyaXZlciAqLwotCQkvKiBvbmx5IGJ1bXAgdGhlIGFjY2Vzc19jb3VudCBpZiB3ZSBhY3R1YWxseSBzdWNjZWVkZWQgaW4KLQkJICogdGhyb3dpbmcgYW5vdGhlciBjb3VudGVyIG9uIHRoZSBob3N0IG1vZHVsZSAqLwotCQlzY3NpX2RldmljZV9nZXQoc2RwLT5kZXZpY2UpOwkvKiBYWFg6IHJldHZhbCBpZ25vcmVkPyAqLwkKLQkJc2ZwLT5jbG9zZWQgPSAxOwkvKiBmbGFnIGRpcnR5IHN0YXRlIG9uIHRoaXMgZmQgKi8KLQkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX3JlbW92ZV9zZnA6IHdvcnJpc29tZSwgJWQgd3JpdGVzIHBlbmRpbmdcbiIsCi0JCQkJICBkaXJ0eSkpOwotCX0KLQlyZXR1cm4gcmVzOworCWV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0KHNnX3JlbW92ZV9zZnBfdXNlcmNvbnRleHQsICZzZnAtPmV3KTsKIH0KIAogc3RhdGljIGludApAQCAtMjE5OSwxOSArMjEyMSwzOCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBTZ19kZXZpY2UgKgotc2dfZ2V0X2RldihpbnQgZGV2KQorLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBzZ19pbmRleF9sb2NrIGhlbGQgKi8KK3N0YXRpYyBTZ19kZXZpY2UgKnNnX2xvb2t1cF9kZXYoaW50IGRldikKIHsKLQlTZ19kZXZpY2UgKnNkcDsKLQl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwlyZXR1cm4gaWRyX2ZpbmQoJnNnX2luZGV4X2lkciwgZGV2KTsKK30KIAotCXJlYWRfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCXNkcCA9IGlkcl9maW5kKCZzZ19pbmRleF9pZHIsIGRldik7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKK3N0YXRpYyBTZ19kZXZpY2UgKnNnX2dldF9kZXYoaW50IGRldikKK3sKKwlzdHJ1Y3Qgc2dfZGV2aWNlICpzZHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBmbGFncyk7CisJc2RwID0gc2dfbG9va3VwX2RldihkZXYpOworCWlmICghc2RwKQorCQlzZHAgPSBFUlJfUFRSKC1FTlhJTyk7CisJZWxzZSBpZiAoc2RwLT5kZXRhY2hlZCkgeworCQkvKiBJZiBzZHAtPmRldGFjaGVkLCB0aGVuIHRoZSByZWZjb3VudCBtYXkgYWxyZWFkeSBiZSAwLCBpbgorCQkgKiB3aGljaCBjYXNlIGl0IHdvdWxkIGJlIGEgYnVnIHRvIGRvIGtyZWZfZ2V0KCkuCisJCSAqLworCQlzZHAgPSBFUlJfUFRSKC1FTk9ERVYpOworCX0gZWxzZQorCQlrcmVmX2dldCgmc2RwLT5kX3JlZik7CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHNkcDsKIH0KIAorc3RhdGljIHZvaWQgc2dfcHV0X2RldihzdHJ1Y3Qgc2dfZGV2aWNlICpzZHApCit7CisJa3JlZl9wdXQoJnNkcC0+ZF9yZWYsIHNnX2RldmljZV9kZXN0cm95KTsKK30KKwogI2lmZGVmIENPTkZJR19TQ1NJX1BST0NfRlMKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2dfcHJvY19zZ3AgPSBOVUxMOwpAQCAtMjQ2OCw4ICsyNDA5LDEwIEBACiAJc3RydWN0IHNnX3Byb2NfZGV2aXRlciAqIGl0ID0gKHN0cnVjdCBzZ19wcm9jX2Rldml0ZXIgKikgdjsKIAlTZ19kZXZpY2UgKnNkcDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkcDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAotCXNkcCA9IGl0ID8gc2dfZ2V0X2RldihpdC0+aW5kZXgpIDogTlVMTDsKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKKwlzZHAgPSBpdCA/IHNnX2xvb2t1cF9kZXYoaXQtPmluZGV4KSA6IE5VTEw7CiAJaWYgKHNkcCAmJiAoc2NzaWRwID0gc2RwLT5kZXZpY2UpICYmICghc2RwLT5kZXRhY2hlZCkpCiAJCXNlcV9wcmludGYocywgIiVkXHQlZFx0JWRcdCVkXHQlZFx0JWRcdCVkXHQlZFx0JWRcbiIsCiAJCQkgICAgICBzY3NpZHAtPmhvc3QtPmhvc3Rfbm8sIHNjc2lkcC0+Y2hhbm5lbCwKQEAgLTI0ODAsNiArMjQyMyw3IEBACiAJCQkgICAgICAoaW50KSBzY3NpX2RldmljZV9vbmxpbmUoc2NzaWRwKSk7CiAJZWxzZQogCQlzZXFfcHJpbnRmKHMsICItMVx0LTFcdC0xXHQtMVx0LTFcdC0xXHQtMVx0LTFcdC0xXG4iKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDkzLDE2ICsyNDM3LDIwIEBACiAJc3RydWN0IHNnX3Byb2NfZGV2aXRlciAqIGl0ID0gKHN0cnVjdCBzZ19wcm9jX2Rldml0ZXIgKikgdjsKIAlTZ19kZXZpY2UgKnNkcDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkcDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAotCXNkcCA9IGl0ID8gc2dfZ2V0X2RldihpdC0+aW5kZXgpIDogTlVMTDsKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKKwlzZHAgPSBpdCA/IHNnX2xvb2t1cF9kZXYoaXQtPmluZGV4KSA6IE5VTEw7CiAJaWYgKHNkcCAmJiAoc2NzaWRwID0gc2RwLT5kZXZpY2UpICYmICghc2RwLT5kZXRhY2hlZCkpCiAJCXNlcV9wcmludGYocywgIiU4LjhzXHQlMTYuMTZzXHQlNC40c1xuIiwKIAkJCSAgIHNjc2lkcC0+dmVuZG9yLCBzY3NpZHAtPm1vZGVsLCBzY3NpZHAtPnJldik7CiAJZWxzZQogCQlzZXFfcHJpbnRmKHMsICI8bm8gYWN0aXZlIGRldmljZT5cbiIpOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKKy8qIG11c3QgYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgc2dfaW5kZXhfbG9jayAqLwogc3RhdGljIHZvaWQgc2dfcHJvY19kZWJ1Z19oZWxwZXIoc3RydWN0IHNlcV9maWxlICpzLCBTZ19kZXZpY2UgKiBzZHApCiB7CiAJaW50IGssIG0sIG5ld19pbnRlcmZhY2UsIGJsZW4sIHVzZzsKQEAgLTI1MTIsOSArMjQ2MCwxMiBAQAogCWNvbnN0IGNoYXIgKiBjcDsKIAl1bnNpZ25lZCBpbnQgbXM7CiAKLQlmb3IgKGsgPSAwOyAoZnAgPSBzZ19nZXRfbnRoX3NmcChzZHAsIGspKTsgKytrKSB7CisJayA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmcCwgJnNkcC0+c2Zkcywgc2ZkX3NpYmxpbmdzKSB7CisJCWsrKzsKKwkJcmVhZF9sb2NrKCZmcC0+cnFfbGlzdF9sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJCXNlcV9wcmludGYocywgIiAgIEZEKCVkKTogdGltZW91dD0lZG1zIGJ1ZmZsZW49JWQgIgotCQkJICAgIihyZXMpc2dhdD0lZCBsb3dfZG1hPSVkXG4iLCBrICsgMSwKKwkJCSAgICIocmVzKXNnYXQ9JWQgbG93X2RtYT0lZFxuIiwgaywKIAkJCSAgIGppZmZpZXNfdG9fbXNlY3MoZnAtPnRpbWVvdXQpLAogCQkJICAgZnAtPnJlc2VydmUuYnVmZmxlbiwKIAkJCSAgIChpbnQpIGZwLT5yZXNlcnZlLmtfdXNlX3NnLApAQCAtMjUyMiw3ICsyNDczLDkgQEAKIAkJc2VxX3ByaW50ZihzLCAiICAgY21kX3E9JWQgZl9wYWNraWQ9JWQga19vcnBoYW49JWQgY2xvc2VkPSVkXG4iLAogCQkJICAgKGludCkgZnAtPmNtZF9xLCAoaW50KSBmcC0+Zm9yY2VfcGFja2lkLAogCQkJICAgKGludCkgZnAtPmtlZXBfb3JwaGFuLCAoaW50KSBmcC0+Y2xvc2VkKTsKLQkJZm9yIChtID0gMDsgKHNycCA9IHNnX2dldF9udGhfcmVxdWVzdChmcCwgbSkpOyArK20pIHsKKwkJZm9yIChtID0gMCwgc3JwID0gZnAtPmhlYWRycDsKKwkJCQlzcnAgIT0gTlVMTDsKKwkJCQkrK20sIHNycCA9IHNycC0+bmV4dHJwKSB7CiAJCQlocCA9ICZzcnAtPmhlYWRlcjsKIAkJCW5ld19pbnRlcmZhY2UgPSAoaHAtPmludGVyZmFjZV9pZCA9PSAnXDAnKSA/IDAgOiAxOwogCQkJaWYgKHNycC0+cmVzX3VzZWQpIHsKQEAgLTI1NTksNiArMjUxMiw3IEBACiAJCX0KIAkJaWYgKDAgPT0gbSkKIAkJCXNlcV9wcmludGYocywgIiAgICAgTm8gcmVxdWVzdHMgYWN0aXZlXG4iKTsKKwkJcmVhZF91bmxvY2soJmZwLT5ycV9saXN0X2xvY2spOwogCX0KIH0KIApAQCAtMjU3MSwzOSArMjUyNSwzNCBAQAogewogCXN0cnVjdCBzZ19wcm9jX2Rldml0ZXIgKiBpdCA9IChzdHJ1Y3Qgc2dfcHJvY19kZXZpdGVyICopIHY7CiAJU2dfZGV2aWNlICpzZHA7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAKIAlpZiAoaXQgJiYgKDAgPT0gaXQtPmluZGV4KSkgewogCQlzZXFfcHJpbnRmKHMsICJtYXhfYWN0aXZlX2RldmljZT0lZChvcmlnaW4gMSlcbiIsCiAJCQkgICAoaW50KWl0LT5tYXgpOwogCQlzZXFfcHJpbnRmKHMsICIgZGVmX3Jlc2VydmVkX3NpemU9JWRcbiIsIHNnX2JpZ19idWZmKTsKIAl9Ci0Jc2RwID0gaXQgPyBzZ19nZXRfZGV2KGl0LT5pbmRleCkgOiBOVUxMOwotCWlmIChzZHApIHsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOworCXNkcCA9IGl0ID8gc2dfbG9va3VwX2RldihpdC0+aW5kZXgpIDogTlVMTDsKKwlpZiAoc2RwICYmICFsaXN0X2VtcHR5KCZzZHAtPnNmZHMpKSB7CiAJCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRwID0gc2RwLT5kZXZpY2U7CiAKLQkJaWYgKE5VTEwgPT0gc2NzaWRwKSB7Ci0JCQlzZXFfcHJpbnRmKHMsICJkZXZpY2UgJWQgZGV0YWNoZWQgPz9cbiIsIAotCQkJCSAgIChpbnQpaXQtPmluZGV4KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHNnX2dldF9udGhfc2ZwKHNkcCwgMCkpIHsKLQkJCXNlcV9wcmludGYocywgIiA+Pj4gZGV2aWNlPSVzICIsCi0JCQkJc2RwLT5kaXNrLT5kaXNrX25hbWUpOwotCQkJaWYgKHNkcC0+ZGV0YWNoZWQpCi0JCQkJc2VxX3ByaW50ZihzLCAiZGV0YWNoZWQgcGVuZGluZyBjbG9zZSAiKTsKLQkJCWVsc2UKLQkJCQlzZXFfcHJpbnRmCi0JCQkJICAgIChzLCAic2NzaSVkIGNoYW49JWQgaWQ9JWQgbHVuPSVkICAgZW09JWQiLAotCQkJCSAgICAgc2NzaWRwLT5ob3N0LT5ob3N0X25vLAotCQkJCSAgICAgc2NzaWRwLT5jaGFubmVsLCBzY3NpZHAtPmlkLAotCQkJCSAgICAgc2NzaWRwLT5sdW4sCi0JCQkJICAgICBzY3NpZHAtPmhvc3QtPmhvc3R0LT5lbXVsYXRlZCk7Ci0JCQlzZXFfcHJpbnRmKHMsICIgc2dfdGFibGVzaXplPSVkIGV4Y2w9JWRcbiIsCi0JCQkJICAgc2RwLT5zZ190YWJsZXNpemUsIHNkcC0+ZXhjbHVkZSk7Ci0JCX0KKwkJc2VxX3ByaW50ZihzLCAiID4+PiBkZXZpY2U9JXMgIiwgc2RwLT5kaXNrLT5kaXNrX25hbWUpOworCQlpZiAoc2RwLT5kZXRhY2hlZCkKKwkJCXNlcV9wcmludGYocywgImRldGFjaGVkIHBlbmRpbmcgY2xvc2UgIik7CisJCWVsc2UKKwkJCXNlcV9wcmludGYKKwkJCSAgICAocywgInNjc2klZCBjaGFuPSVkIGlkPSVkIGx1bj0lZCAgIGVtPSVkIiwKKwkJCSAgICAgc2NzaWRwLT5ob3N0LT5ob3N0X25vLAorCQkJICAgICBzY3NpZHAtPmNoYW5uZWwsIHNjc2lkcC0+aWQsCisJCQkgICAgIHNjc2lkcC0+bHVuLAorCQkJICAgICBzY3NpZHAtPmhvc3QtPmhvc3R0LT5lbXVsYXRlZCk7CisJCXNlcV9wcmludGYocywgIiBzZ190YWJsZXNpemU9JWQgZXhjbD0lZFxuIiwKKwkJCSAgIHNkcC0+c2dfdGFibGVzaXplLCBzZHAtPmV4Y2x1ZGUpOwogCQlzZ19wcm9jX2RlYnVnX2hlbHBlcihzLCBzZHApOwogCX0KKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGM2ZjE5ZWUuLmViMjRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0zNzQsOSArMzc0LDkgQEAKIAlpZiAoIWRlYnVnZ2luZykgeyAvKiBBYm5vcm1hbCBjb25kaXRpb25zIGZvciB0YXBlICovCiAJCWlmICghY21kc3RhdHAtPmhhdmVfc2Vuc2UpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFcnJvciAleCAoc3VnZy4gYnQgMHgleCwgZHJpdmVyIGJ0IDB4JXgsIGhvc3QgYnQgMHgleCkuXG4iLAotCQkJICAgICAgIG5hbWUsIHJlc3VsdCwgc3VnZ2VzdGlvbihyZXN1bHQpLAotCQkJICAgICAgIGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBEUklWRVJfTUFTSywgaG9zdF9ieXRlKHJlc3VsdCkpOworCQkJICAgICAgICIlczogRXJyb3IgJXggKGRyaXZlciBidCAweCV4LCBob3N0IGJ0IDB4JXgpLlxuIiwKKwkJCSAgICAgICBuYW1lLCByZXN1bHQsIGRyaXZlcl9ieXRlKHJlc3VsdCksCisJCQkgICAgICAgaG9zdF9ieXRlKHJlc3VsdCkpOwogCQllbHNlIGlmIChjbWRzdGF0cC0+aGF2ZV9zZW5zZSAmJgogCQkJIHNjb2RlICE9IE5PX1NFTlNFICYmCiAJCQkgc2NvZGUgIT0gUkVDT1ZFUkVEX0VSUk9SICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3RleC5jIGIvZHJpdmVycy9zY3NpL3N0ZXguYwppbmRleCBhM2ExOGFkLi40N2I2MTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RleC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3VwZXJUcmFrIEVYIFNlcmllcyBTdG9yYWdlIENvbnRyb2xsZXIgZHJpdmVyIGZvciBMaW51eAogICoKLSAqCUNvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBQcm9taXNlIFRlY2hub2xvZ3kgSW5jLgorICoJQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgUHJvbWlzZSBUZWNobm9sb2d5IEluYy4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJzdGV4IgotI2RlZmluZSBTVF9EUklWRVJfVkVSU0lPTiAiMy42LjAwMDAuMSIKLSNkZWZpbmUgU1RfVkVSX01BSk9SIAkJMworI2RlZmluZSBTVF9EUklWRVJfVkVSU0lPTiAiNC42LjAwMDAuMSIKKyNkZWZpbmUgU1RfVkVSX01BSk9SIAkJNAogI2RlZmluZSBTVF9WRVJfTUlOT1IgCQk2CiAjZGVmaW5lIFNUX09FTSAJCQkwCiAjZGVmaW5lIFNUX0JVSUxEX1ZFUiAJCTEKQEAgLTEwMyw3ICsxMDMsNyBAQAogCU1VX1JFUV9DT1VOVAkJCQk9IChNVV9NQVhfUkVRVUVTVCArIDEpLAogCU1VX1NUQVRVU19DT1VOVAkJCQk9IChNVV9NQVhfUkVRVUVTVCArIDEpLAogCi0JU1RFWF9DREJfTEVOR1RICQkJCT0gTUFYX0NPTU1BTkRfU0laRSwKKwlTVEVYX0NEQl9MRU5HVEgJCQkJPSAxNiwKIAlSRVFfVkFSSUFCTEVfTEVOCQkJPSAxMDI0LAogCVNUQVRVU19WQVJfTEVOCQkJCT0gMTI4LAogCVNUX0NBTl9RVUVVRQkJCQk9IE1VX01BWF9SRVFVRVNULApAQCAtMTE0LDE1ICsxMTQsMTkgQEAKIAlTR19DRl9FT1QJCQkJPSAweDgwLAkvKiBlbmQgb2YgdGFibGUgKi8KIAlTR19DRl82NEIJCQkJPSAweDQwLAkvKiA2NCBiaXQgaXRlbSAqLwogCVNHX0NGX0hPU1QJCQkJPSAweDIwLAkvKiBzZyBpbiBob3N0IG1lbW9yeSAqLworCU1TR19EQVRBX0RJUl9ORAkJCQk9IDAsCisJTVNHX0RBVEFfRElSX0lOCQkJCT0gMSwKKwlNU0dfREFUQV9ESVJfT1VUCQkJPSAyLAogCiAJc3Rfc2hhc3RhCQkJCT0gMCwKIAlzdF92c2MJCQkJCT0gMSwKIAlzdF92c2MxCQkJCQk9IDIsCiAJc3RfeW9zZW1pdGUJCQkJPSAzLAorCXN0X3NlcQkJCQkJPSA0LAogCiAJUEFTU1RIUlVfUkVRX1RZUEUJCQk9IDB4MDAwMDAwMDEsCiAJUEFTU1RIUlVfUkVRX05PX1dBS0VVUAkJCT0gMHgwMDAwMDEwMCwKLQlTVF9JTlRFUk5BTF9USU1FT1VUCQkJPSAzMCwKKwlTVF9JTlRFUk5BTF9USU1FT1VUCQkJPSAxODAsCiAKIAlTVF9UT19DTUQJCQkJPSAwLAogCVNUX0ZST01fQ01ECQkJCT0gMSwKQEAgLTE1MiwzNSArMTU2LDYgQEAKIAlTVF9BRERJVElPTkFMX01FTQkJCT0gMHgyMDAwMDAsCiB9OwogCi0vKiBTQ1NJIGlucXVpcnkgZGF0YSAqLwotdHlwZWRlZiBzdHJ1Y3Qgc3RfaW5xIHsKLQl1OCBEZXZpY2VUeXBlCQkJOjU7Ci0JdTggRGV2aWNlVHlwZVF1YWxpZmllcgkJOjM7Ci0JdTggRGV2aWNlVHlwZU1vZGlmaWVyCQk6NzsKLQl1OCBSZW1vdmFibGVNZWRpYQkJOjE7Ci0JdTggVmVyc2lvbnM7Ci0JdTggUmVzcG9uc2VEYXRhRm9ybWF0CQk6NDsKLQl1OCBIaVN1cHBvcnQJCQk6MTsKLQl1OCBOb3JtQUNBCQkJOjE7Ci0JdTggUmVzZXJ2ZWRCaXQJCQk6MTsKLQl1OCBBRVJDCQkJCToxOwotCXU4IEFkZGl0aW9uYWxMZW5ndGg7Ci0JdTggUmVzZXJ2ZWRbMl07Ci0JdTggU29mdFJlc2V0CQkJOjE7Ci0JdTggQ29tbWFuZFF1ZXVlCQkJOjE7Ci0JdTggUmVzZXJ2ZWQyCQkJOjE7Ci0JdTggTGlua2VkQ29tbWFuZHMJCToxOwotCXU4IFN5bmNocm9ub3VzCQkJOjE7Ci0JdTggV2lkZTE2Qml0CQkJOjE7Ci0JdTggV2lkZTMyQml0CQkJOjE7Ci0JdTggUmVsYXRpdmVBZGRyZXNzaW5nCQk6MTsKLQl1OCBWZW5kb3JJZFs4XTsKLQl1OCBQcm9kdWN0SWRbMTZdOwotCXU4IFByb2R1Y3RSZXZpc2lvbkxldmVsWzRdOwotCXU4IFZlbmRvclNwZWNpZmljWzIwXTsKLQl1OCBSZXNlcnZlZDNbNDBdOwotfSBTVF9JTlE7Ci0KIHN0cnVjdCBzdF9zZ2l0ZW0gewogCXU4IGN0cmw7CS8qIFNHX0NGX3h4eCAqLwogCXU4IHJlc2VydmVkWzNdOwpAQCAtMjIyLDcgKzE5Nyw3IEBACiAJdTggdGFyZ2V0OwogCXU4IHRhc2tfYXR0cjsKIAl1OCB0YXNrX21hbmFnZTsKLQl1OCBwcmRfZW50cnk7CisJdTggZGF0YV9kaXI7CiAJdTggcGF5bG9hZF9zejsJCS8qIHBheWxvYWQgc2l6ZSBpbiA0LWJ5dGUsIG5vdCB1c2VkICovCiAJdTggY2RiW1NURVhfQ0RCX0xFTkdUSF07CiAJdTggdmFyaWFibGVbUkVRX1ZBUklBQkxFX0xFTl07CkBAIC0yODQsNyArMjU5LDcgQEAKICNkZWZpbmUgTVVfUkVRX0JVRkZFUl9TSVpFCShNVV9SRVFfQ09VTlQgKiBzaXplb2Yoc3RydWN0IHJlcV9tc2cpKQogI2RlZmluZSBNVV9TVEFUVVNfQlVGRkVSX1NJWkUJKE1VX1NUQVRVU19DT1VOVCAqIHNpemVvZihzdHJ1Y3Qgc3RhdHVzX21zZykpCiAjZGVmaW5lIE1VX0JVRkZFUl9TSVpFCQkoTVVfUkVRX0JVRkZFUl9TSVpFICsgTVVfU1RBVFVTX0JVRkZFUl9TSVpFKQotI2RlZmluZSBTVEVYX0VYVFJBX1NJWkUJCW1heChzaXplb2Yoc3RydWN0IHN0X2ZyYW1lKSwgc2l6ZW9mKFNUX0lOUSkpCisjZGVmaW5lIFNURVhfRVhUUkFfU0laRQkJc2l6ZW9mKHN0cnVjdCBzdF9mcmFtZSkKICNkZWZpbmUgU1RFWF9CVUZGRVJfU0laRQkoTVVfQlVGRkVSX1NJWkUgKyBTVEVYX0VYVFJBX1NJWkUpCiAKIHN0cnVjdCBzdF9jY2IgewpAQCAtMzQ2LDggKzMyMSw4IEBACiBzdGF0aWMgdm9pZCBzdGV4X2dldHRpbWUoX19sZTMyICp0aW1lKQogewogCXN0cnVjdCB0aW1ldmFsIHR2OwotCWRvX2dldHRpbWVvZmRheSgmdHYpOwogCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CiAJKnRpbWUgPSBjcHVfdG9fbGUzMih0di50dl9zZWMgJiAweGZmZmZmZmZmKTsKIAkqKHRpbWUgKyAxKSA9IGNwdV90b19sZTMyKCh0di50dl9zZWMgPj4gMTYpID4+IDE2KTsKIH0KQEAgLTM2OCw3ICszNDMsNyBAQAogewogCWNtZC0+cmVzdWx0ID0gKERSSVZFUl9TRU5TRSA8PCAyNCkgfCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAKLQkvKiAiSW52YWxpZCBmaWVsZCBpbiBjYmQiICovCisJLyogIkludmFsaWQgZmllbGQgaW4gY2RiIiAqLwogCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDAsIGNtZC0+c2Vuc2VfYnVmZmVyLCBJTExFR0FMX1JFUVVFU1QsIDB4MjQsCiAJCQkJMHgwKTsKIAlkb25lKGNtZCk7CkBAIC00OTcsNiArNDcyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaWQsbHVuOwogCXN0cnVjdCByZXFfbXNnICpyZXE7CiAJdTE2IHRhZzsKKwogCWhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlpZCA9IGNtZC0+ZGV2aWNlLT5pZDsKIAlsdW4gPSBjbWQtPmRldmljZS0+bHVuOwpAQCAtNTA4LDYgKzQ4NCw3IEBACiAJCXN0YXRpYyBjaGFyIG1zMTBfY2FjaGluZ19wYWdlWzEyXSA9CiAJCQl7IDAsIDB4MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDB4OCwgMHhhLCAweDQsIDAgfTsKIAkJdW5zaWduZWQgY2hhciBwYWdlOworCiAJCXBhZ2UgPSBjbWQtPmNtbmRbMl0gJiAweDNmOwogCQlpZiAocGFnZSA9PSAweDggfHwgcGFnZSA9PSAweDNmKSB7CiAJCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY21kLCBtczEwX2NhY2hpbmdfcGFnZSwKQEAgLTU1MSw2ICs1MjgsNyBAQAogCQlpZiAoY21kLT5jbW5kWzFdID09IFBBU1NUSFJVX0dFVF9EUlZWRVIpIHsKIAkJCXN0cnVjdCBzdF9kcnZ2ZXIgdmVyOwogCQkJc2l6ZV90IGNwX2xlbiA9IHNpemVvZih2ZXIpOworCiAJCQl2ZXIubWFqb3IgPSBTVF9WRVJfTUFKT1I7CiAJCQl2ZXIubWlub3IgPSBTVF9WRVJfTUlOT1I7CiAJCQl2ZXIub2VtID0gU1RfT0VNOwpAQCAtNTg0LDYgKzU2MiwxMyBAQAogCS8qIGNkYiAqLwogCW1lbWNweShyZXEtPmNkYiwgY21kLT5jbW5kLCBTVEVYX0NEQl9MRU5HVEgpOwogCisJaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQorCQlyZXEtPmRhdGFfZGlyID0gTVNHX0RBVEFfRElSX0lOOworCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJcmVxLT5kYXRhX2RpciA9IE1TR19EQVRBX0RJUl9PVVQ7CisJZWxzZQorCQlyZXEtPmRhdGFfZGlyID0gTVNHX0RBVEFfRElSX05EOworCiAJaGJhLT5jY2JbdGFnXS5jbWQgPSBjbWQ7CiAJaGJhLT5jY2JbdGFnXS5zZW5zZV9idWZmbGVuID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwogCWhiYS0+Y2NiW3RhZ10uc2Vuc2VfYnVmZmVyID0gY21kLT5zZW5zZV9idWZmZXI7CkBAIC02NDIsNiArNjI3LDcgQEAKIAlzdHJ1Y3Qgc3RhdHVzX21zZyAqcmVzcCwgdW5zaWduZWQgaW50IHZhcmlhYmxlKQogewogCXNpemVfdCBjb3VudCA9IHZhcmlhYmxlOworCiAJaWYgKHJlc3AtPnNjc2lfc3RhdHVzICE9IFNBTV9TVEFUX0dPT0QpIHsKIAkJaWYgKGNjYi0+c2Vuc2VfYnVmZmVyICE9IE5VTEwpCiAJCQltZW1jcHkoY2NiLT5zZW5zZV9idWZmZXIsIHJlc3AtPnZhcmlhYmxlLApAQCAtNjYxLDI0ICs2NDcsNiBAQAogCQlyZXNwLT5zY3NpX3N0YXR1cyAhPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKIAkJc2NzaV9zZXRfcmVzaWQoY2NiLT5jbWQsIHNjc2lfYnVmZmxlbihjY2ItPmNtZCkgLQogCQkJbGUzMl90b19jcHUoKihfX2xlMzIgKikmcmVzcC0+dmFyaWFibGVbMF0pKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChyZXNwLT5zcmJfc3RhdHVzICE9IDApCi0JCXJldHVybjsKLQotCS8qIGRldGVybWluZSBpbnF1aXJ5IGNvbW1hbmQgc3RhdHVzIGJ5IERldmljZVR5cGVRdWFsaWZpZXIgKi8KLQlpZiAoY2NiLT5jbWQtPmNtbmRbMF0gPT0gSU5RVUlSWSAmJgotCQlyZXNwLT5zY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9HT09EKSB7Ci0JCVNUX0lOUSAqaW5xX2RhdGE7Ci0KLQkJc2NzaV9zZ19jb3B5X3RvX2J1ZmZlcihjY2ItPmNtZCwgaGJhLT5jb3B5X2J1ZmZlciwKLQkJCQkgICAgICAgU1RFWF9FWFRSQV9TSVpFKTsKLQkJaW5xX2RhdGEgPSAoU1RfSU5RICopaGJhLT5jb3B5X2J1ZmZlcjsKLQkJaWYgKGlucV9kYXRhLT5EZXZpY2VUeXBlUXVhbGlmaWVyICE9IDApCi0JCQljY2ItPnNyYl9zdGF0dXMgPSBTUkJfU1RBVFVTX1NFTEVDVElPTl9USU1FT1VUOwotCQllbHNlCi0JCQljY2ItPnNyYl9zdGF0dXMgPSBTUkJfU1RBVFVTX1NVQ0NFU1M7CiAJfQogfQogCkBAIC03NDYsNiArNzE0LDcgQEAKIAkJCQlzdGV4X2NvcHlfZGF0YShjY2IsIHJlc3AsIHNpemUpOwogCQl9CiAKKwkJY2NiLT5yZXEgPSBOVUxMOwogCQljY2ItPnNyYl9zdGF0dXMgPSByZXNwLT5zcmJfc3RhdHVzOwogCQljY2ItPnNjc2lfc3RhdHVzID0gcmVzcC0+c2NzaV9zdGF0dXM7CiAKQEAgLTk4Myw2ICs5NTIsNyBAQAogCXN0cnVjdCBzdF9oYmEgKmhiYTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgYmVmb3JlOworCiAJaGJhID0gKHN0cnVjdCBzdF9oYmEgKikgJmNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKQEAgLTEwNjcsNiArMTAzNyw3IEBACiBzdGF0aWMgaW50IHN0ZXhfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICogcGRldikKIHsKIAlpbnQgcmV0OworCiAJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKQogCQkmJiAhcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKIAkJcmV0dXJuIDA7CkBAIC0xMTI0LDkgKzEwOTUsOSBAQAogCX0KIAogCWhiYS0+Y2FyZHR5cGUgPSAodW5zaWduZWQgaW50KSBpZC0+ZHJpdmVyX2RhdGE7Ci0JaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3RfdnNjICYmIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmKSA9PSAweDEpCisJaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3RfdnNjICYmIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMSkpCiAJCWhiYS0+Y2FyZHR5cGUgPSBzdF92c2MxOwotCWhiYS0+ZG1hX3NpemUgPSAoaGJhLT5jYXJkdHlwZSA9PSBzdF92c2MxKSA/CisJaGJhLT5kbWFfc2l6ZSA9IChoYmEtPmNhcmR0eXBlID09IHN0X3ZzYzEgfHwgaGJhLT5jYXJkdHlwZSA9PSBzdF9zZXEpID8KIAkJKFNURVhfQlVGRkVSX1NJWkUgKyBTVF9BRERJVElPTkFMX01FTSkgOiAoU1RFWF9CVUZGRVJfU0laRSk7CiAJaGJhLT5kbWFfbWVtID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCiAJCWhiYS0+ZG1hX3NpemUsICZoYmEtPmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOwpAQCAtMTE0NiwxMCArMTExNywxMCBAQAogCQlob3N0LT5tYXhfbHVuID0gODsKIAkJaG9zdC0+bWF4X2lkID0gMTYgKyAxOwogCX0gZWxzZSBpZiAoaGJhLT5jYXJkdHlwZSA9PSBzdF95b3NlbWl0ZSkgewotCQlob3N0LT5tYXhfbHVuID0gMTI4OworCQlob3N0LT5tYXhfbHVuID0gMjU2OwogCQlob3N0LT5tYXhfaWQgPSAxICsgMTsKIAl9IGVsc2UgewotCQkvKiBzdF92c2MgYW5kIHN0X3ZzYzEgKi8KKwkJLyogc3RfdnNjICwgc3RfdnNjMSBhbmQgc3Rfc2VxICovCiAJCWhvc3QtPm1heF9sdW4gPSAxOwogCQlob3N0LT5tYXhfaWQgPSAxMjggKyAxOwogCX0KQEAgLTEyOTksMTggKzEyNzAsMTAgQEAKIAl7IDB4MTA1YSwgMHg3MjUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzdF92c2MgfSwKIAogCS8qIHN0X3lvc2VtaXRlICovCi0JeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgMHg0NjAwLCAwLCAwLAotCQlzdF95b3NlbWl0ZSB9LCAvKiBTdXBlclRyYWsgRVg0NjUwICovCi0JeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgMHg0NjEwLCAwLCAwLAotCQlzdF95b3NlbWl0ZSB9LCAvKiBTdXBlclRyYWsgRVg0NjUwbyAqLwotCXsgMHgxMDVhLCAweDg2NTAsIFBDSV9BTllfSUQsIDB4ODYwMCwgMCwgMCwKLQkJc3RfeW9zZW1pdGUgfSwgLyogU3VwZXJUcmFrIEVYODY1MEVMICovCi0JeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgMHg4NjAxLCAwLCAwLAotCQlzdF95b3NlbWl0ZSB9LCAvKiBTdXBlclRyYWsgRVg4NjUwICovCi0JeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgMHg4NjAyLCAwLCAwLAotCQlzdF95b3NlbWl0ZSB9LCAvKiBTdXBlclRyYWsgRVg4NjU0ICovCi0JeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKLQkJc3RfeW9zZW1pdGUgfSwgLyogZ2VuZXJpYyBzdF95b3NlbWl0ZSAqLworCXsgMHgxMDVhLCAweDg2NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHN0X3lvc2VtaXRlIH0sCisKKwkvKiBzdF9zZXEgKi8KKwl7IDB4MTA1YSwgMHgzMzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzdF9zZXEgfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc3RleF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKaW5kZXggZjRlNmNkZS4uMjNlNzgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKQEAgLTc5Miw5ICs3OTIsOSBAQAogCiAJLyoKIAkgKiAgU2VsZWN0IHF1ZXVlIGRlcHRoIGZyb20gZHJpdmVyIHNldHVwLgotCSAqICBEb25ub3QgdXNlIG1vcmUgdGhhbiBjb25maWd1cmVkIGJ5IHVzZXIuCi0JICogIFVzZSBhdCBsZWFzdCAyLgotCSAqICBEb25ub3QgdXNlIG1vcmUgdGhhbiBvdXIgbWF4aW11bS4KKwkgKiAgRG8gbm90IHVzZSBtb3JlIHRoYW4gY29uZmlndXJlZCBieSB1c2VyLgorCSAqICBVc2UgYXQgbGVhc3QgMS4KKwkgKiAgRG8gbm90IHVzZSBtb3JlIHRoYW4gb3VyIG1heGltdW0uCiAJICovCiAJcmVxdGFncyA9IHN5bV9kcml2ZXJfc2V0dXAubWF4X3RhZzsKIAlpZiAocmVxdGFncyA+IHRwLT51c3J0YWdzKQpAQCAtODAzLDcgKzgwMyw3IEBACiAJCXJlcXRhZ3MgPSAwOwogCWlmIChyZXF0YWdzID4gU1lNX0NPTkZfTUFYX1RBRykKIAkJcmVxdGFncyA9IFNZTV9DT05GX01BWF9UQUc7Ci0JZGVwdGhfdG9fdXNlID0gcmVxdGFncyA/IHJlcXRhZ3MgOiAyOworCWRlcHRoX3RvX3VzZSA9IHJlcXRhZ3MgPyByZXF0YWdzIDogMTsKIAlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAogCQkJCXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPyBNU0dfU0lNUExFX1RBRyA6IDAsCiAJCQkJZGVwdGhfdG9fdXNlKTsKQEAgLTEyMzYsMTQgKzEyMzYsMjkgQEAKICNlbmRpZiAvKiBTWU1fTElOVVhfUFJPQ19JTkZPX1NVUFBPUlQgKi8KIAogLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGNsYWltZWQgYnkgc3ltX2lvbWFwX2RldmljZSgpLiAgTm90ZSB0aGF0CisgKiBzeW1fZnJlZV9yZXNvdXJjZXMoKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgY2FsbGluZworICogc3ltX2F0dGFjaCgpLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQKK3N5bV9pb3VubWFwX2RldmljZShzdHJ1Y3Qgc3ltX2RldmljZSAqZGV2aWNlKQoreworCWlmIChkZXZpY2UtPnMuaW9hZGRyKQorCQlwY2lfaW91bm1hcChkZXZpY2UtPnBkZXYsIGRldmljZS0+cy5pb2FkZHIpOworCWlmIChkZXZpY2UtPnMucmFtYWRkcikKKwkJcGNpX2lvdW5tYXAoZGV2aWNlLT5wZGV2LCBkZXZpY2UtPnMucmFtYWRkcik7Cit9CisKKy8qCiAgKglGcmVlIGNvbnRyb2xsZXIgcmVzb3VyY2VzLgogICovCi1zdGF0aWMgdm9pZCBzeW1fZnJlZV9yZXNvdXJjZXMoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIHN5bV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlpbnQgZG9fZnJlZV9pcnEpCiB7CiAJLyoKIAkgKiAgRnJlZSBPL1Mgc3BlY2lmaWMgcmVzb3VyY2VzLgogCSAqLwotCWlmIChwZGV2LT5pcnEpCisJaWYgKGRvX2ZyZWVfaXJxKQogCQlmcmVlX2lycShwZGV2LT5pcnEsIG5wLT5zLmhvc3QpOwogCWlmIChucC0+cy5pb2FkZHIpCiAJCXBjaV9pb3VubWFwKHBkZXYsIG5wLT5zLmlvYWRkcik7CkBAIC0xMjcxLDEwICsxMjg2LDExIEBACiB7CiAJc3RydWN0IHN5bV9kYXRhICpzeW1fZGF0YTsKIAlzdHJ1Y3Qgc3ltX2hjYiAqbnAgPSBOVUxMOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cGRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzeW1fZncgKmZ3OworCWludCBkb19mcmVlX2lycSA9IDA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJzeW0lZDogPCVzPiByZXYgMHgleCBhdCBwY2kgJXMgaXJxICV1XG4iLAogCQl1bml0LCBkZXYtPmNoaXAubmFtZSwgcGRldi0+cmV2aXNpb24sIHBjaV9uYW1lKHBkZXYpLApAQCAtMTI4NSwxMSArMTMwMSwxMSBAQAogCSAqLwogCWZ3ID0gc3ltX2ZpbmRfZmlybXdhcmUoJmRldi0+Y2hpcCk7CiAJaWYgKCFmdykKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKIAogCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKHRwbnQsIHNpemVvZigqc3ltX2RhdGEpKTsKIAlpZiAoIXNob3N0KQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBhdHRhY2hfZmFpbGVkOwogCXN5bV9kYXRhID0gc2hvc3RfcHJpdihzaG9zdCk7CiAKIAkvKgpAQCAtMTMxOSw2ICsxMzM1LDEwIEBACiAJbnAtPm1heG9mZnMJPSBkZXYtPmNoaXAub2Zmc2V0X21heDsKIAlucC0+bWF4YnVyc3QJPSBkZXYtPmNoaXAuYnVyc3RfbWF4OwogCW5wLT5teWFkZHIJPSBkZXYtPmhvc3RfaWQ7CisJbnAtPm1taW9fYmEJPSAodTMyKWRldi0+bW1pb19iYXNlOworCW5wLT5yYW1fYmEJPSAodTMyKWRldi0+cmFtX2Jhc2U7CisJbnAtPnMuaW9hZGRyCT0gZGV2LT5zLmlvYWRkcjsKKwlucC0+cy5yYW1hZGRyCT0gZGV2LT5zLnJhbWFkZHI7CiAKIAkvKgogCSAqICBFZGl0IGl0cyBuYW1lLgpAQCAtMTMzNCwyMiArMTM1NCw2IEBACiAJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKIAl9CiAKLQkvKgotCSAqICBUcnkgdG8gbWFwIHRoZSBjb250cm9sbGVyIGNoaXAgdG8KLQkgKiAgdmlydHVhbCBhbmQgcGh5c2ljYWwgbWVtb3J5LgotCSAqLwotCW5wLT5tbWlvX2JhID0gKHUzMilkZXYtPm1taW9fYmFzZTsKLQlucC0+cy5pb2FkZHIJPSBkZXYtPnMuaW9hZGRyOwotCW5wLT5zLnJhbWFkZHIJPSBkZXYtPnMucmFtYWRkcjsKLQotCS8qCi0JICogIE1hcCBvbi1jaGlwIFJBTSBpZiBwcmVzZW50IGFuZCBzdXBwb3J0ZWQuCi0JICovCi0JaWYgKCEobnAtPmZlYXR1cmVzICYgRkVfUkFNKSkKLQkJZGV2LT5yYW1fYmFzZSA9IDA7Ci0JaWYgKGRldi0+cmFtX2Jhc2UpCi0JCW5wLT5yYW1fYmEgPSAodTMyKWRldi0+cmFtX2Jhc2U7Ci0KIAlpZiAoc3ltX2hjYl9hdHRhY2goc2hvc3QsIGZ3LCBkZXYtPm52cmFtKSkKIAkJZ290byBhdHRhY2hfZmFpbGVkOwogCkBAIC0xMzY0LDYgKzEzNjgsNyBAQAogCQkJc3ltX25hbWUobnApLCBwZGV2LT5pcnEpOwogCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CiAJfQorCWRvX2ZyZWVfaXJxID0gMTsKIAogCS8qCiAJICogIEFmdGVyIFNDU0kgZGV2aWNlcyBoYXZlIGJlZW4gb3BlbmVkLCB3ZSBjYW5ub3QKQEAgLTE0MTYsMTIgKzE0MjEsMTMgQEAKIAkJICAgIlRFUk1JTkFUSU9OLCBERVZJQ0UgUE9XRVIgZXRjLiFcbiIsIHN5bV9uYW1lKG5wKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAgYXR0YWNoX2ZhaWxlZDoKLQlpZiAoIXNob3N0KQotCQlyZXR1cm4gTlVMTDsKLQlwcmludGZfaW5mbygiJXM6IGdpdmluZyB1cCAuLi5cbiIsIHN5bV9uYW1lKG5wKSk7CisJcHJpbnRmX2luZm8oInN5bSVkOiBnaXZpbmcgdXAgLi4uXG4iLCB1bml0KTsKIAlpZiAobnApCi0JCXN5bV9mcmVlX3Jlc291cmNlcyhucCwgcGRldik7Ci0Jc2NzaV9ob3N0X3B1dChzaG9zdCk7CisJCXN5bV9mcmVlX3Jlc291cmNlcyhucCwgcGRldiwgZG9fZnJlZV9pcnEpOworCWVsc2UKKwkJc3ltX2lvdW5tYXBfZGV2aWNlKGRldik7CisJaWYgKHNob3N0KQorCQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKIAogCXJldHVybiBOVUxMOwogIH0KQEAgLTE1NTAsMzAgKzE1NTYsMjggQEAKIH0KIAogLyoKLSAqICBSZWFkIGFuZCBjaGVjayB0aGUgUENJIGNvbmZpZ3VyYXRpb24gZm9yIGFueSBkZXRlY3RlZCBOQ1IgCi0gKiAgYm9hcmRzIGFuZCBzYXZlIGRhdGEgZm9yIGF0dGFjaGluZyBhZnRlciBhbGwgYm9hcmRzIGhhdmUgCi0gKiAgYmVlbiBkZXRlY3RlZC4KKyAqIE1hcCBIQkEgcmVnaXN0ZXJzIGFuZCBvbi1jaGlwIFNSQU0gKGlmIHByZXNlbnQpLgogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQKLXN5bV9pbml0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHN5bV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzeW1faW9tYXBfZGV2aWNlKHN0cnVjdCBzeW1fZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IGkgPSAyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2aWNlLT5wZGV2OwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiBidXNfYWRkcjsKLQotCWRldmljZS0+aG9zdF9pZCA9IFNZTV9TRVRVUF9IT1NUX0lEOwotCWRldmljZS0+cGRldiA9IHBkZXY7CisJaW50IGkgPSAyOwogCiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMocGRldiwgJmJ1c19hZGRyLCAmcGRldi0+cmVzb3VyY2VbMV0pOwogCWRldmljZS0+bW1pb19iYXNlID0gYnVzX2FkZHIuc3RhcnQ7CiAKLQkvKgotCSAqIElmIHRoZSBCQVIgaXMgNjQtYml0LCByZXNvdXJjZSAyIHdpbGwgYmUgb2NjdXBpZWQgYnkgdGhlCi0JICogdXBwZXIgMzIgYml0cwotCSAqLwotCWlmICghcGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MpCi0JCWkrKzsKLQlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYnVzX2FkZHIsICZwZGV2LT5yZXNvdXJjZVtpXSk7Ci0JZGV2aWNlLT5yYW1fYmFzZSA9IGJ1c19hZGRyLnN0YXJ0OworCWlmIChkZXZpY2UtPmNoaXAuZmVhdHVyZXMgJiBGRV9SQU0pIHsKKwkJLyoKKwkJICogSWYgdGhlIEJBUiBpcyA2NC1iaXQsIHJlc291cmNlIDIgd2lsbCBiZSBvY2N1cGllZCBieSB0aGUKKwkJICogdXBwZXIgMzIgYml0cworCQkgKi8KKwkJaWYgKCFwZGV2LT5yZXNvdXJjZVtpXS5mbGFncykKKwkJCWkrKzsKKwkJcGNpYmlvc19yZXNvdXJjZV90b19idXMocGRldiwgJmJ1c19hZGRyLCAmcGRldi0+cmVzb3VyY2VbaV0pOworCQlkZXZpY2UtPnJhbV9iYXNlID0gYnVzX2FkZHIuc3RhcnQ7CisJfQogCiAjaWZkZWYgQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU8KIAlpZiAoZGV2aWNlLT5tbWlvX2Jhc2UpCkBAIC0xNTgzLDkgKzE1ODcsMjEgQEAKIAlpZiAoIWRldmljZS0+cy5pb2FkZHIpCiAJCWRldmljZS0+cy5pb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwKIAkJCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCWlmIChkZXZpY2UtPnJhbV9iYXNlKQorCWlmICghZGV2aWNlLT5zLmlvYWRkcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgbWFwIHJlZ2lzdGVyczsgZ2l2aW5nIHVwLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoZGV2aWNlLT5yYW1fYmFzZSkgewogCQlkZXZpY2UtPnMucmFtYWRkciA9IHBjaV9pb21hcChwZGV2LCBpLAogCQkJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSk7CisJCWlmICghZGV2aWNlLT5zLnJhbWFkZHIpIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJImNvdWxkIG5vdCBtYXAgU1JBTTsgY29udGludWluZyBhbnl3YXkuXG4iKTsKKwkJCWRldmljZS0+cmFtX2Jhc2UgPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xNjU5LDcgKzE2NzUsOCBAQAogCXVkZWxheSgxMCk7CiAJT1VUQihucCwgbmNfaXN0YXQsIDApOwogCi0Jc3ltX2ZyZWVfcmVzb3VyY2VzKG5wLCBwZGV2KTsKKwlzeW1fZnJlZV9yZXNvdXJjZXMobnAsIHBkZXYsIDEpOworCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xNjk2LDkgKzE3MTMsMTMgQEAKIAlzdHJ1Y3Qgc3ltX2RldmljZSBzeW1fZGV2OwogCXN0cnVjdCBzeW1fbnZyYW0gbnZyYW07CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJaW50IGRvX2lvdW5tYXAgPSAwOworCWludCBkb19kaXNhYmxlX2RldmljZSA9IDE7CiAKIAltZW1zZXQoJnN5bV9kZXYsIDAsIHNpemVvZihzeW1fZGV2KSk7CiAJbWVtc2V0KCZudnJhbSwgMCwgc2l6ZW9mKG52cmFtKSk7CisJc3ltX2Rldi5wZGV2ID0gcGRldjsKKwlzeW1fZGV2Lmhvc3RfaWQgPSBTWU1fU0VUVVBfSE9TVF9JRDsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJZ290byBsZWF2ZTsKQEAgLTE3MDgsMTIgKzE3MjksMTcgQEAKIAlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBOQU1FNTNDOFhYKSkKIAkJZ290byBkaXNhYmxlOwogCi0Jc3ltX2luaXRfZGV2aWNlKHBkZXYsICZzeW1fZGV2KTsKIAlpZiAoc3ltX2NoZWNrX3N1cHBvcnRlZCgmc3ltX2RldikpCiAJCWdvdG8gZnJlZTsKIAotCWlmIChzeW1fY2hlY2tfcmFpZCgmc3ltX2RldikpCi0JCWdvdG8gbGVhdmU7CS8qIERvbid0IGRpc2FibGUgdGhlIGRldmljZSAqLworCWlmIChzeW1faW9tYXBfZGV2aWNlKCZzeW1fZGV2KSkKKwkJZ290byBmcmVlOworCWRvX2lvdW5tYXAgPSAxOworCisJaWYgKHN5bV9jaGVja19yYWlkKCZzeW1fZGV2KSkgeworCQlkb19kaXNhYmxlX2RldmljZSA9IDA7CS8qIERvbid0IGRpc2FibGUgdGhlIGRldmljZSAqLworCQlnb3RvIGZyZWU7CisJfQogCiAJaWYgKHN5bV9zZXRfd29ya2Fyb3VuZHMoJnN5bV9kZXYpKQogCQlnb3RvIGZyZWU7CkBAIC0xNzIyLDYgKzE3NDgsNyBAQAogCiAJc3ltX2dldF9udnJhbSgmc3ltX2RldiwgJm52cmFtKTsKIAorCWRvX2lvdW5tYXAgPSAwOyAvKiBEb24ndCBzeW1faW91bm1hcF9kZXZpY2UoKSBhZnRlciBzeW1fYXR0YWNoKCkuICovCiAJc2hvc3QgPSBzeW1fYXR0YWNoKCZzeW0yX3RlbXBsYXRlLCBhdHRhY2hfY291bnQsICZzeW1fZGV2KTsKIAlpZiAoIXNob3N0KQogCQlnb3RvIGZyZWU7CkBAIC0xNzM3LDkgKzE3NjQsMTIgQEAKICBkZXRhY2g6CiAJc3ltX2RldGFjaChwY2lfZ2V0X2RydmRhdGEocGRldiksIHBkZXYpOwogIGZyZWU6CisJaWYgKGRvX2lvdW5tYXApCisJCXN5bV9pb3VubWFwX2RldmljZSgmc3ltX2Rldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKICBkaXNhYmxlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZG9fZGlzYWJsZV9kZXZpY2UpCisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKICBsZWF2ZToKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTE3NDksNyArMTc3OSw2IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KHNob3N0KTsKLQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKIAlzeW1fZGV0YWNoKHNob3N0LCBwZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKaW5kZXggOThkZjE2NS4uY2NlYTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKQEAgLTE0MzMsMTMgKzE0MzMsMTIgQEAKIAkgKiBNYW55IGRldmljZXMgaW1wbGVtZW50IFBQUiBpbiBhIGJ1Z2d5IHdheSwgc28gb25seSB1c2UgaXQgaWYgd2UKIAkgKiByZWFsbHkgd2FudCB0by4KIAkgKi8KLQlpZiAoZ29hbC0+b2Zmc2V0ICYmCi0JICAgIChnb2FsLT5pdSB8fCBnb2FsLT5kdCB8fCBnb2FsLT5xYXMgfHwgKGdvYWwtPnBlcmlvZCA8IDB4YSkpKSB7CisJaWYgKGdvYWwtPnJlbmVnbyA9PSBOU19QUFIgfHwgKGdvYWwtPm9mZnNldCAmJgorCSAgICAoZ29hbC0+aXUgfHwgZ29hbC0+ZHQgfHwgZ29hbC0+cWFzIHx8IChnb2FsLT5wZXJpb2QgPCAweGEpKSkpIHsKIAkJbmVnbyA9IE5TX1BQUjsKLQl9IGVsc2UgaWYgKHNwaV93aWR0aChzdGFyZ2V0KSAhPSBnb2FsLT53aWR0aCkgeworCX0gZWxzZSBpZiAoZ29hbC0+cmVuZWdvID09IE5TX1dJREUgfHwgZ29hbC0+d2lkdGgpIHsKIAkJbmVnbyA9IE5TX1dJREU7Ci0JfSBlbHNlIGlmIChzcGlfcGVyaW9kKHN0YXJnZXQpICE9IGdvYWwtPnBlcmlvZCB8fAotCQkgICBzcGlfb2Zmc2V0KHN0YXJnZXQpICE9IGdvYWwtPm9mZnNldCkgeworCX0gZWxzZSBpZiAoZ29hbC0+cmVuZWdvID09IE5TX1NZTkMgfHwgZ29hbC0+b2Zmc2V0KSB7CiAJCW5lZ28gPSBOU19TWU5DOwogCX0gZWxzZSB7CiAJCWdvYWwtPmNoZWNrX25lZ28gPSAwOwpAQCAtMjA0MCw2ICsyMDM5LDI5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzeW1fYW5ub3VuY2VfdHJhbnNmZXJfcmF0ZShzdHJ1Y3Qgc3ltX3RjYiAqdHApCit7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHAtPnN0YXJnZXQ7CisKKwlpZiAodHAtPnRwcmludC5wZXJpb2QgIT0gc3BpX3BlcmlvZChzdGFyZ2V0KSB8fAorCSAgICB0cC0+dHByaW50Lm9mZnNldCAhPSBzcGlfb2Zmc2V0KHN0YXJnZXQpIHx8CisJICAgIHRwLT50cHJpbnQud2lkdGggIT0gc3BpX3dpZHRoKHN0YXJnZXQpIHx8CisJICAgIHRwLT50cHJpbnQuaXUgIT0gc3BpX2l1KHN0YXJnZXQpIHx8CisJICAgIHRwLT50cHJpbnQuZHQgIT0gc3BpX2R0KHN0YXJnZXQpIHx8CisJICAgIHRwLT50cHJpbnQucWFzICE9IHNwaV9xYXMoc3RhcmdldCkgfHwKKwkgICAgIXRwLT50cHJpbnQuY2hlY2tfbmVnbykgeworCQl0cC0+dHByaW50LnBlcmlvZCA9IHNwaV9wZXJpb2Qoc3RhcmdldCk7CisJCXRwLT50cHJpbnQub2Zmc2V0ID0gc3BpX29mZnNldChzdGFyZ2V0KTsKKwkJdHAtPnRwcmludC53aWR0aCA9IHNwaV93aWR0aChzdGFyZ2V0KTsKKwkJdHAtPnRwcmludC5pdSA9IHNwaV9pdShzdGFyZ2V0KTsKKwkJdHAtPnRwcmludC5kdCA9IHNwaV9kdChzdGFyZ2V0KTsKKwkJdHAtPnRwcmludC5xYXMgPSBzcGlfcWFzKHN0YXJnZXQpOworCQl0cC0+dHByaW50LmNoZWNrX25lZ28gPSAxOworCisJCXNwaV9kaXNwbGF5X3hmZXJfYWdyZWVtZW50KHN0YXJnZXQpOworCX0KK30KKwogLyoKICAqICBXZSByZWNlaXZlZCBhIFdEVFIuCiAgKiAgTGV0IGV2ZXJ5dGhpbmcgYmUgYXdhcmUgb2YgdGhlIGNoYW5nZXMuCkBAIC0yMDQ5LDExICsyMDcxLDEzIEBACiAJc3RydWN0IHN5bV90Y2IgKnRwID0gJm5wLT50YXJnZXRbdGFyZ2V0XTsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cC0+c3RhcmdldDsKIAotCWlmIChzcGlfd2lkdGgoc3RhcmdldCkgPT0gd2lkZSkKLQkJcmV0dXJuOwotCiAJc3ltX3NldHRyYW5zKG5wLCB0YXJnZXQsIDAsIDAsIDAsIHdpZGUsIDAsIDApOwogCisJaWYgKHdpZGUpCisJCXRwLT50Z29hbC5yZW5lZ28gPSBOU19XSURFOworCWVsc2UKKwkJdHAtPnRnb2FsLnJlbmVnbyA9IDA7CisJdHAtPnRnb2FsLmNoZWNrX25lZ28gPSAwOwogCXRwLT50Z29hbC53aWR0aCA9IHdpZGU7CiAJc3BpX29mZnNldChzdGFyZ2V0KSA9IDA7CiAJc3BpX3BlcmlvZChzdGFyZ2V0KSA9IDA7CkBAIC0yMDYzLDcgKzIwODcsNyBAQAogCXNwaV9xYXMoc3RhcmdldCkgPSAwOwogCiAJaWYgKHN5bV92ZXJib3NlID49IDMpCi0JCXNwaV9kaXNwbGF5X3hmZXJfYWdyZWVtZW50KHN0YXJnZXQpOworCQlzeW1fYW5ub3VuY2VfdHJhbnNmZXJfcmF0ZSh0cCk7CiB9CiAKIC8qCkBAIC0yMDgwLDYgKzIxMDQsMTIgQEAKIAogCXN5bV9zZXR0cmFucyhucCwgdGFyZ2V0LCAwLCBvZnMsIHBlciwgd2lkZSwgZGl2LCBmYWspOwogCisJaWYgKHdpZGUpCisJCXRwLT50Z29hbC5yZW5lZ28gPSBOU19XSURFOworCWVsc2UgaWYgKG9mcykKKwkJdHAtPnRnb2FsLnJlbmVnbyA9IE5TX1NZTkM7CisJZWxzZQorCQl0cC0+dGdvYWwucmVuZWdvID0gMDsKIAlzcGlfcGVyaW9kKHN0YXJnZXQpID0gcGVyOwogCXNwaV9vZmZzZXQoc3RhcmdldCkgPSBvZnM7CiAJc3BpX2l1KHN0YXJnZXQpID0gc3BpX2R0KHN0YXJnZXQpID0gc3BpX3FhcyhzdGFyZ2V0KSA9IDA7CkBAIC0yMDkwLDcgKzIxMjAsNyBAQAogCQl0cC0+dGdvYWwuY2hlY2tfbmVnbyA9IDA7CiAJfQogCi0Jc3BpX2Rpc3BsYXlfeGZlcl9hZ3JlZW1lbnQoc3RhcmdldCk7CisJc3ltX2Fubm91bmNlX3RyYW5zZmVyX3JhdGUodHApOwogfQogCiAvKgpAQCAtMjEwNiw2ICsyMTM2LDEwIEBACiAKIAlzeW1fc2V0dHJhbnMobnAsIHRhcmdldCwgb3B0cywgb2ZzLCBwZXIsIHdpZGUsIGRpdiwgZmFrKTsKIAorCWlmICh3aWRlIHx8IG9mcykKKwkJdHAtPnRnb2FsLnJlbmVnbyA9IE5TX1BQUjsKKwllbHNlCisJCXRwLT50Z29hbC5yZW5lZ28gPSAwOwogCXNwaV93aWR0aChzdGFyZ2V0KSA9IHRwLT50Z29hbC53aWR0aCA9IHdpZGU7CiAJc3BpX3BlcmlvZChzdGFyZ2V0KSA9IHRwLT50Z29hbC5wZXJpb2QgPSBwZXI7CiAJc3BpX29mZnNldChzdGFyZ2V0KSA9IHRwLT50Z29hbC5vZmZzZXQgPSBvZnM7CkBAIC0yMTE0LDcgKzIxNDgsNyBAQAogCXNwaV9xYXMoc3RhcmdldCkgPSB0cC0+dGdvYWwucWFzID0gISEob3B0cyAmIFBQUl9PUFRfUUFTKTsKIAl0cC0+dGdvYWwuY2hlY2tfbmVnbyA9IDA7CiAKLQlzcGlfZGlzcGxheV94ZmVyX2FncmVlbWVudChzdGFyZ2V0KTsKKwlzeW1fYW5ub3VuY2VfdHJhbnNmZXJfcmF0ZSh0cCk7CiB9CiAKIC8qCkBAIC0zNTE2LDYgKzM1NTAsNyBAQAogCQkJc3BpX2R0KHN0YXJnZXQpID0gMDsKIAkJCXNwaV9xYXMoc3RhcmdldCkgPSAwOwogCQkJdHAtPnRnb2FsLmNoZWNrX25lZ28gPSAxOworCQkJdHAtPnRnb2FsLnJlbmVnbyA9IDA7CiAJCX0KIAogCQkvKgpAQCAtNTEzNSw5ICs1MTcwLDE0IEBACiAJLyoKIAkgKiAgQnVpbGQgYSBuZWdvdGlhdGlvbiBtZXNzYWdlIGlmIG5lZWRlZC4KIAkgKiAgKG5lZ29fc3RhdHVzIGlzIGZpbGxlZCBieSBzeW1fcHJlcGFyZV9uZWdvKCkpCisJICoKKwkgKiAgQWx3YXlzIG5lZ290aWF0ZSBvbiBJTlFVSVJZIGFuZCBSRVFVRVNUIFNFTlNFLgorCSAqCiAJICovCiAJY3AtPm5lZ29fc3RhdHVzID0gMDsKLQlpZiAodHAtPnRnb2FsLmNoZWNrX25lZ28gJiYgIXRwLT5uZWdvX2NwICYmIGxwKSB7CisJaWYgKCh0cC0+dGdvYWwuY2hlY2tfbmVnbyB8fAorCSAgICAgY21kLT5jbW5kWzBdID09IElOUVVJUlkgfHwgY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpICYmCisJICAgICF0cC0+bmVnb19jcCAmJiBscCkgewogCQltc2dsZW4gKz0gc3ltX3ByZXBhcmVfbmVnbyhucCwgY3AsIG1zZ3B0ciArIG1zZ2xlbik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oCmluZGV4IGFkMDc4ODAuLjYxZDI4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oCkBAIC0zNTQsNiArMzU0LDcgQEAKIAl1bnNpZ25lZCBpbnQgZHQ6MTsKIAl1bnNpZ25lZCBpbnQgcWFzOjE7CiAJdW5zaWduZWQgaW50IGNoZWNrX25lZ286MTsKKwl1bnNpZ25lZCBpbnQgcmVuZWdvOjI7CiB9OwogCiAvKgpAQCAtNDE5LDYgKzQyMCw5IEBACiAJLyogVHJhbnNmZXIgZ29hbCAqLwogCXN0cnVjdCBzeW1fdHJhbnMgdGdvYWw7CiAKKwkvKiBMYXN0IHByaW50ZWQgdHJhbnNmZXIgc3BlZWQgKi8KKwlzdHJ1Y3Qgc3ltX3RyYW5zIHRwcmludDsKKwogCS8qCiAJICogS2VlcCB0cmFjayBvZiB0aGUgQ0NCIHVzZWQgZm9yIHRoZSBuZWdvdGlhdGlvbiBpbiBvcmRlcgogCSAqIHRvIGVuc3VyZSB0aGF0IG9ubHkgMSBuZWdvdGlhdGlvbiBpcyBxdWV1ZWQgYXQgYSB0aW1lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggZjMxYzY2OS4uY2I2ZDg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC0xNCw4ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDdkN2Y1NzYuLjliZTExYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtNjI4LDcgKzYyOCw3IEBACiAKIGNvbmZpZyBTRVJJQUxfUFhBCiAJYm9vbCAiUFhBIHNlcmlhbCBwb3J0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9QWEEKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBIHx8IEFSQ0hfTU1QCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBtYWNoaW5lIGJhc2VkIG9uIGFuIEludGVsIFhTY2FsZSBQWEEyeHggQ1BVIHlvdQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKaW5kZXggNDU5ZjM0Mi4uODBlNzY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCkBAIC0zOCw5ICszOCw5IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IGE1MDk1NDYuLjlmNDYwYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCXNwb3J0LT50aW1lci5mdW5jdGlvbiA9IGlteF90aW1lb3V0OwogCXNwb3J0LT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKXNwb3J0OwogCi0Jc3BvcnQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVhcnRfY2xrIik7CisJc3BvcnQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVhcnQiKTsKIAlpZiAoSVNfRVJSKHNwb3J0LT5jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoc3BvcnQtPmNsayk7CiAJCWdvdG8gdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IGY2ZTNiODYuLmE0OGE4YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC00MywxMyArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBzdHJ1Y3QgdWFydF9weGFfcG9ydCB7CiAJc3RydWN0IHVhcnRfcG9ydCAgICAgICAgcG9ydDsKQEAgLTQ5MSw3ICs0ODUsNyBAQAogCSAqIEVuc3VyZSB0aGUgcG9ydCB3aWxsIGJlIGVuYWJsZWQuCiAJICogVGhpcyBpcyByZXF1aXJlZCBlc3BlY2lhbGx5IGZvciBzZXJpYWwgY29uc29sZS4KIAkgKi8KLQl1cC0+aWVyIHw9IElFUl9VVUU7CisJdXAtPmllciB8PSBVQVJUX0lFUl9VVUU7CiAKIAkvKgogCSAqIFVwZGF0ZSB0aGUgcGVyLXBvcnQgdGltZW91dC4KQEAgLTc4NCwxOSArNzc4LDE1IEBACiAJc3BvcnQtPnBvcnQuZmxhZ3MgPSBVUEZfSU9SRU1BUCB8IFVQRl9CT09UX0FVVE9DT05GOwogCXNwb3J0LT5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoc3BvcnQtPmNsayk7CiAKLQkvKgotCSAqIElzIGl0IHdvcnRoIGtlZXBpbmcgdGhpcz8KLQkgKi8KLQlpZiAobW1yZXMtPnN0YXJ0ID09IF9fUFJFRyhGRlVBUlQpKQotCQlzcG9ydC0+bmFtZSA9ICJGRlVBUlQiOwotCWVsc2UgaWYgKG1tcmVzLT5zdGFydCA9PSBfX1BSRUcoQlRVQVJUKSkKLQkJc3BvcnQtPm5hbWUgPSAiQlRVQVJUIjsKLQllbHNlIGlmIChtbXJlcy0+c3RhcnQgPT0gX19QUkVHKFNUVUFSVCkpCi0JCXNwb3J0LT5uYW1lID0gIlNUVUFSVCI7Ci0JZWxzZSBpZiAobW1yZXMtPnN0YXJ0ID09IF9fUFJFRyhIV1VBUlQpKQotCQlzcG9ydC0+bmFtZSA9ICJIV1VBUlQiOwotCWVsc2UKKwlzd2l0Y2ggKGRldi0+aWQpIHsKKwljYXNlIDA6IHNwb3J0LT5uYW1lID0gIkZGVUFSVCI7IGJyZWFrOworCWNhc2UgMTogc3BvcnQtPm5hbWUgPSAiQlRVQVJUIjsgYnJlYWs7CisJY2FzZSAyOiBzcG9ydC0+bmFtZSA9ICJTVFVBUlQiOyBicmVhazsKKwljYXNlIDM6IHNwb3J0LT5uYW1lID0gIkhXVUFSVCI7IGJyZWFrOworCWRlZmF1bHQ6CiAJCXNwb3J0LT5uYW1lID0gIj8/PyI7CisJCWJyZWFrOworCX0KIAogCXNwb3J0LT5wb3J0Lm1lbWJhc2UgPSBpb3JlbWFwKG1tcmVzLT5zdGFydCwgbW1yZXMtPmVuZCAtIG1tcmVzLT5zdGFydCArIDEpOwogCWlmICghc3BvcnQtPnBvcnQubWVtYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCBiMjRhMjVlLi45NDUzMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDU1N2I1NGEuLmRiZjUzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAl9IHdoaWxlICghKHN0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpKTsKIAogCXNjaV9pbihwb3J0LCBTQ3hTUik7ICAgICAgICAgICAgLyogRHVtbXkgcmVhZCAqLwotCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkpOworCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkgJiB+U0N4U1JfVEVORChwb3J0KSk7CiAJc2NpX291dChwb3J0LCBTQ3hURFIsIGMpOwogfQogI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgfHwgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwpAQCAtMjYzLDYgKzI2Myw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CkBAIC0yODQsNyArMjg1LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmKTsKQEAgLTEwOTUsNiArMTA5Nyw3IEBACiAJCQkJIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2VyaWFsX2NvbnNvbGVfcG9ydC0+cG9ydDsKKwl1bnNpZ25lZCBzaG9ydCBiaXRzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTExMDMsNiArMTEwNiwxMSBAQAogCiAJCXNjaV9wb2xsX3B1dF9jaGFyKHBvcnQsICpzKyspOwogCX0KKworCS8qIHdhaXQgdW50aWwgZmlmbyBpcyBlbXB0eSBhbmQgbGFzdCBiaXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgKi8KKwliaXRzID0gU0N4U1JfVER4RShwb3J0KSB8IFNDeFNSX1RFTkQocG9ydCk7CisJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNlcmlhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggMDIyZTg5Zi4uZDBhYTgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQogI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgpAQCAtMTI2LDcgKzEyNiw4IEBACiAjIGRlZmluZSBTQ1NQVFIxCTB4ZmZlMTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDSUZfT1JFUgkweDAwMDEJCS8qIE92ZXJydW4gZXJyb3IgYml0ICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpCTB4M2EJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjIGRlZmluZSBTQ1NQVFIwCTB4ZmZlYTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjEJMHhmZmViMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTUFRSMgkweGZmZWMwMDI0CS8qIDE2IGJpdCBTQ0lGICovCkBAIC0xODIsNiArMTgzLDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSAgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKICNkZWZpbmUgU0NJX0NUUkxfRkxBR1NfUkVJRSAweDA4IC8qIDc3NTAgU0NJRiAqLwogI2Vsc2UKQEAgLTQxMyw3ICs0MTUsOCBAQAogU0NJRl9GTlMoU0NGQ1IsICAgICAgICAgICAgICAgICAgICAgIDB4MGMsICA4LCAweDE4LCAxNikKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogU0NJRl9GTlMoU0NGRFIsCQkJICAgICAweDBlLCAxNiwgMHgxQywgMTYpCiBTQ0lGX0ZOUyhTQ1RGRFIsCQkgICAgIDB4MGUsIDE2LCAweDFDLCAxNikKIFNDSUZfRk5TKFNDUkZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MjAsIDE2KQpAQCAtNjQ0LDcgKzY0Nyw4IEBACiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWEwMDAwKQpAQCAtNzQ2LDcgKzc1MCw4IEBACiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKGNsaysxNipicHMpLygxNipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggNDVhMjk5Zi4uZTA5ZDNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xNDM4LDEyICsxNDM4LDEyIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtleWJvYXJkIGF0IE1NSU8gMHglbGx4IChpcnEgPSAlZCkgIgogCQkgICAgICAgImlzIGEgJXNcbiIsCi0JCSAgICAgICBvcC0+ZGV2LmJ1c19pZCwKKwkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzBdLnBvcnQubWFwYmFzZSwKIAkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFswXS5wb3J0KSk7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb3VzZSBhdCBNTUlPIDB4JWxseCAoaXJxID0gJWQpICIKIAkJICAgICAgICJpcyBhICVzXG4iLAotCQkgICAgICAgb3AtPmRldi5idXNfaWQsCisJCSAgICAgICBkZXZfbmFtZSgmb3AtPmRldiksCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB1cFsxXS5wb3J0Lm1hcGJhc2UsCiAJCSAgICAgICBvcC0+aXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMV0ucG9ydCkpOwogCQlrYm1faW5zdCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCA1OGQyNGM1Li4yMjY5ZmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtNTY4LDYgKzU2OCwxMCBAQAogCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQogCQlwcmltYXJ5ID0gMTsKIAorCWlmICghZGF0YVswXSAmJiAhZGF0YVsxXSkKKwkJcHJfd2FybmluZygiaW50YzogbWlzc2luZyB1bmlxdWUgaXJxIG1hc2sgZm9yICIKKwkJCSAgICJpcnEgJWQgKHZlY3QgMHglMDR4KVxuIiwgaXJxLCBpcnEyZXZ0KGlycSkpOworCiAJZGF0YVswXSA9IGRhdGFbMF0gPyBkYXRhWzBdIDogaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAJZGF0YVsxXSA9IGRhdGFbMV0gPyBkYXRhWzFdIDogaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAKQEAgLTY0MSw2ICs2NDUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmludGNfZXZ0MmlycV90YWJsZTsKKwordW5zaWduZWQgaW50IGludGNfZXZ0MmlycSh1bnNpZ25lZCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBpcnEgPSBldnQyaXJxKHZlY3Rvcik7CisKKwlpZiAoaW50Y19ldnQyaXJxX3RhYmxlICYmIGludGNfZXZ0MmlycV90YWJsZVtpcnFdKQorCQlpcnEgPSBpbnRjX2V2dDJpcnFfdGFibGVbaXJxXTsKKworCXJldHVybiBpcnE7Cit9CiAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewpAQCAtNzA1LDggKzcyMCw0MCBAQAogCiAJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLwogCisJLyoga2VlcCB0aGUgZmlyc3QgdmVjdG9yIG9ubHkgaWYgc2FtZSBlbnVtIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CiAJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKwkJaW50IGZpcnN0X2lycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CisKKwkJaWYgKCF2ZWN0LT5lbnVtX2lkKQorCQkJY29udGludWU7CisKKwkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKKwkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisKKwkJCWlmICh2ZWN0LT5lbnVtX2lkICE9IHZlY3QyLT5lbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKQorCQkJCWludGNfZXZ0MmlycV90YWJsZSA9IGFsbG9jX2Jvb3RtZW0oTlJfSVJRUyk7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKSB7CisJCQkJcHJfd2FybmluZygiaW50YzogY2Fubm90IGFsbG9jYXRlIGV2dDJpcnEhXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaW50Y19ldnQyaXJxX3RhYmxlW2V2dDJpcnEodmVjdDItPnZlY3QpXSA9IGZpcnN0X2lycTsKKwkJfQorCX0KKworCS8qIHJlZ2lzdGVyIHRoZSB2ZWN0b3JzIG9uZSBieSBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKworCQlpZiAoIXZlY3QtPmVudW1faWQpCisJCQljb250aW51ZTsKIAogCQlpbnRjX3JlZ2lzdGVyX2lycShkZXNjLCBkLCB2ZWN0LT5lbnVtX2lkLCBldnQyaXJxKHZlY3QtPnZlY3QpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKaW5kZXggNjNmMGRlMi4uOTNjMjBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCisrKyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKICAqIENvcmUgbWFwbGUgYnVzIGZ1bmN0aW9uYWxpdHkKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFkcmlhbiBNY01lbmFtaW4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEFkcmlhbiBNY01lbmFtaW4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA4IFBhdWwgTXVuZHQKLSAqCi0gKiBCYXNlZCBvbiAyLjQgY29kZSBieToKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgWUFFR0FTSEkgVGFrZXNoaQorICogIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDEgWUFFR0FTSEkgVGFrZXNoaQogICogIENvcHlyaWdodCAoQykgMjAwMSBNLiBSLiBCcm93bgotICogIENvcHlyaWdodCAoQykgMjAwMSBQYXVsIE11bmR0Ci0gKgotICogYW5kIG90aGVycy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMzIsNyArMjYsNyBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNhc2ljLmg+CiAKLU1PRFVMRV9BVVRIT1IoIllhZWdhc2hpIFRha2VzaGksIFBhdWwgTXVuZHQsIE0uIFIuIEJyb3duLCBBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hcGxlIGJ1cyBkcml2ZXIgZm9yIERyZWFtY2FzdCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7U0VHQSwgRHJlYW1jYXN0L01hcGxlfX0iKTsKQEAgLTQ5LDcgKzQzLDcgQEAKIC8qIG11dGV4IHRvIHByb3RlY3QgcXVldWUgb2Ygd2FpdGluZyBwYWNrZXRzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1hcGxlX3dsaXN0X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiBzdGF0aWMgc3RydWN0IGRldmljZSBtYXBsZV9idXM7CiBzdGF0aWMgaW50IHN1YmRldmljZV9tYXBbTUFQTEVfUE9SVFNdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKm1hcGxlX3NlbmRidWYsICptYXBsZV9zZW5kcHRyLCAqbWFwbGVfbGFzdHB0cjsKQEAgLTYyLDggKzU2LDkgQEAKIAlpbnQgdW5pdDsKIH07CiAKLXN0YXRpYyBib29sIGNoZWNrZWRbNF07Ci1zdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzWzRdOworc3RhdGljIGJvb2wgY2hlY2tlZFtNQVBMRV9QT1JUU107CitzdGF0aWMgYm9vbCBlbXB0eVtNQVBMRV9QT1JUU107CitzdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzW01BUExFX1BPUlRTXTsKIAogLyoqCiAgKiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIG1hcGxlIGRyaXZlcgpAQCAtOTcsMTIgKzkyLDIwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9kcml2ZXJfdW5yZWdpc3Rlcik7CiAKIC8qIHNldCBoYXJkd2FyZSByZWdpc3RlcnMgdG8gZW5hYmxlIG5leHQgcm91bmQgb2YgZG1hICovCi1zdGF0aWMgdm9pZCBtYXBsZWJ1c19kbWFfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG1hcGxlX2RtYV9yZXNldCh2b2lkKQogewogCWN0cmxfb3V0bChNQVBMRV9NQUdJQywgTUFQTEVfUkVTRVQpOwogCS8qIHNldCB0cmlnIHR5cGUgdG8gMCBmb3Igc29mdHdhcmUgdHJpZ2dlciwgMSBmb3IgaGFyZHdhcmUgKFZCTEFOSykgKi8KIAljdHJsX291dGwoMSwgTUFQTEVfVFJJR1RZUEUpOwotCWN0cmxfb3V0bChNQVBMRV8yTUJQUyB8IE1BUExFX1RJTUVPVVQoNTAwMDApLCBNQVBMRV9TUEVFRCk7CisJLyoKKwkqIE1hcGxlIHN5c3RlbSByZWdpc3RlcgorCSogYml0cyAzMSAtIDE2CXRpbWVvdXQgaW4gdW5pdHMgb2YgMjBuc2VjCisJKiBiaXQgMTIJaGFyZCB0cmlnZ2VyIC0gc2V0IDAgdG8ga2VlcCByZXNwb25kaW5nIHRvIFZCTEFOSworCSogYml0cyA5IC0gOAlzZXQgMDAgZm9yIDIgTWJwcywgMDEgZm9yIDEgTWJwcworCSogYml0cyAzIC0gMAlkZWxheSAoaW4gMS4zbXMpIGJldHdlZW4gVkJMQU5LIGFuZCBzdGFydCBvZiBETUEKKwkqIG1heCBkZWxheSBpcyAxMQorCSovCisJY3RybF9vdXRsKE1BUExFXzJNQlBTIHwgTUFQTEVfVElNRU9VVCgweEZGRkYpLCBNQVBMRV9TUEVFRCk7CiAJY3RybF9vdXRsKFBIWVNBRERSKG1hcGxlX3NlbmRidWYpLCBNQVBMRV9ETUFBRERSKTsKIAljdHJsX291dGwoMSwgTUFQTEVfRU5BQkxFKTsKIH0KQEAgLTEzNCwyMSArMTM3LDE2IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKLQlpZiAoIWRldikKLQkJcmV0dXJuOworCiAJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOwogCW1xID0gbWRldi0+bXE7Ci0JaWYgKG1xKSB7Ci0JCWlmIChtcS0+cmVjdmJ1ZmRjc3ApCi0JCQlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmZGNzcCk7Ci0JCWtmcmVlKG1xKTsKLQkJbXEgPSBOVUxMOwotCX0KKwlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmKTsKKwlrZnJlZShtcSk7CiAJa2ZyZWUobWRldik7CiB9CiAKIC8qKgotICogbWFwbGVfYWRkX3BhY2tldCAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKKyAqIG1hcGxlX2FkZF9wYWNrZXQgLSBhZGQgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIG1hcGxlIGJ1cyBxdWV1ZQogICogQG1kZXY6IG1hcGxlIGRldmljZQogICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBvbiBkZXZpY2UgYmVpbmcgcXVlcmllZAogICogQGNvbW1hbmQ6IG1hcGxlIGNvbW1hbmQgdG8gYWRkCkBAIC0xNTgsMjMgKzE1NiwxMiBAQAogaW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLCB1MzIgY29tbWFuZCwKIAlzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCWludCBsb2NraW5nLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCXZvaWQgKnNlbmRidWYgPSBOVUxMOwogCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JLyogYm91bmNlIGlmIGRldmljZSBhbHJlYWR5IGxvY2tlZCAqLwotCWxvY2tpbmcgPSBtdXRleF9pc19sb2NrZWQoJm1kZXYtPm1xLT5tdXRleCk7Ci0JaWYgKGxvY2tpbmcpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCiAJaWYgKGxlbmd0aCkgewotCQlzZW5kYnVmID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwkJc2VuZGJ1ZiA9IGt6YWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xODcsODQgKzE3NCwzNiBAQAogCQltZW1jcHkoc2VuZGJ1ZiArIDQsIGRhdGEsIChsZW5ndGggLSAxKSAqIDQpOwogCW1kZXYtPm1xLT5zZW5kYnVmID0gc2VuZGJ1ZjsKIAotCWxpc3RfYWRkKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKLW91dDoKKwltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKIAltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOworb3V0OgogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9hZGRfcGFja2V0KTsKIAotLyoqCi0gKiBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKLSAqIEBtZGV2OiBtYXBsZSBkZXZpY2UKLSAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gZGV2aWNlIGJlaW5nIHF1ZXJpZWQKLSAqIEBjb21tYW5kOiBtYXBsZSBjb21tYW5kIHRvIGFkZAotICogQGxlbmd0aDogbGVuZ3RoIG9mIGNvbW1hbmQgc3RyaW5nIChpbiAzMiBiaXQgd29yZHMpCi0gKiBAZGF0YTogcmVtYWluZGVyIG9mIGNvbW1hbmQgc3RyaW5nCi0gKgotICogU2FtZSBhcyBtYXBsZV9hZGRfcGFja2V0KCksIGJ1dCB3YWl0cyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lIGZyZWUuCi0gKi8KLWludCBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCi0JdTMyIGNvbW1hbmQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxvY2tpbmcsIHJldCA9IDA7Ci0Jdm9pZCAqc2VuZGJ1ZiA9IE5VTEw7Ci0KLQlsb2NraW5nID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtZGV2LT5tcS0+bXV0ZXgpOwotCWlmIChsb2NraW5nKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChsZW5ndGgpIHsKLQkJc2VuZGJ1ZiA9IGttYWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCSgoX19iZTMyICopc2VuZGJ1ZilbMF0gPSBjcHVfdG9fYmUzMihmdW5jdGlvbik7Ci0JfQotCi0JbWRldi0+bXEtPmNvbW1hbmQgPSBjb21tYW5kOwotCW1kZXYtPm1xLT5sZW5ndGggPSBsZW5ndGg7Ci0JaWYgKGxlbmd0aCA+IDEpCi0JCW1lbWNweShzZW5kYnVmICsgNCwgZGF0YSwgKGxlbmd0aCAtIDEpICogNCk7Ci0JbWRldi0+bXEtPnNlbmRidWYgPSBzZW5kYnVmOwotCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKTsKLQogc3RhdGljIHN0cnVjdCBtYXBsZXEgKm1hcGxlX2FsbG9jcShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewogCXN0cnVjdCBtYXBsZXEgKm1xOwogCi0JbXEgPSBrbWFsbG9jKHNpemVvZigqbXEpLCBHRlBfS0VSTkVMKTsKKwltcSA9IGt6YWxsb2Moc2l6ZW9mKCptcSksIEdGUF9LRVJORUwpOwogCWlmICghbXEpCiAJCWdvdG8gZmFpbGVkX25vbWVtOwogCisJSU5JVF9MSVNUX0hFQUQoJm1xLT5saXN0KTsKIAltcS0+ZGV2ID0gbWRldjsKLQltcS0+cmVjdmJ1ZmRjc3AgPSBrbWVtX2NhY2hlX3phbGxvYyhtYXBsZV9xdWV1ZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JbXEtPnJlY3ZidWYgPSAodm9pZCAqKSBQMlNFR0FERFIobXEtPnJlY3ZidWZkY3NwKTsKKwltcS0+cmVjdmJ1ZiA9IGttZW1fY2FjaGVfemFsbG9jKG1hcGxlX3F1ZXVlX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1xLT5yZWN2YnVmKQogCQlnb3RvIGZhaWxlZF9wMjsKLQkvKgotCSAqIG1vc3QgZGV2aWNlcyBkbyBub3QgbmVlZCB0aGUgbXV0ZXggLSBidXQKLQkgKiBhbnl0aGluZyB0aGF0IGluamVjdHMgYmxvY2sgcmVhZHMgb3Igd3JpdGVzCi0JICogd2lsbCByZWx5IG9uIGl0Ci0JICovCi0JbXV0ZXhfaW5pdCgmbXEtPm11dGV4KTsKKwltcS0+cmVjdmJ1Zi0+YnVmID0gJigobXEtPnJlY3ZidWYtPmJ1ZngpWzBdKTsKIAogCXJldHVybiBtcTsKIAogZmFpbGVkX3AyOgogCWtmcmVlKG1xKTsKIGZhaWxlZF9ub21lbToKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgKCVkLCAlZClcbiIsCisJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzIsMTIgKzIxMSwxNiBAQAogewogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CiAKKwkvKiB6ZXJvIHRoaXMgb3V0IHRvIGF2b2lkIGtvYmogc3Vic3lzdGVtCisJKiB0aGlua2luZyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgKi8KKwogCW1kZXYgPSBremFsbG9jKHNpemVvZigqbWRldiksIEdGUF9LRVJORUwpOwogCWlmICghbWRldikKIAkJcmV0dXJuIE5VTEw7CiAKIAltZGV2LT5wb3J0ID0gcG9ydDsKIAltZGV2LT51bml0ID0gdW5pdDsKKwogCW1kZXYtPm1xID0gbWFwbGVfYWxsb2NxKG1kZXYpOwogCiAJaWYgKCFtZGV2LT5tcSkgewpAQCAtMjg2LDE5ICsyMjksMTQgQEAKIAl9CiAJbWRldi0+ZGV2LmJ1cyA9ICZtYXBsZV9idXNfdHlwZTsKIAltZGV2LT5kZXYucGFyZW50ID0gJm1hcGxlX2J1czsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGV2LT5tYXBsZV93YWl0KTsKIAlyZXR1cm4gbWRldjsKIH0KIAogc3RhdGljIHZvaWQgbWFwbGVfZnJlZV9kZXYoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKLQlpZiAoIW1kZXYpCi0JCXJldHVybjsKLQlpZiAobWRldi0+bXEpIHsKLQkJaWYgKG1kZXYtPm1xLT5yZWN2YnVmZGNzcCkKLQkJCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwKLQkJCQltZGV2LT5tcS0+cmVjdmJ1ZmRjc3ApOwotCQlrZnJlZShtZGV2LT5tcSk7Ci0JfQorCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbWRldi0+bXEtPnJlY3ZidWYpOworCWtmcmVlKG1kZXYtPm1xKTsKIAlrZnJlZShtZGV2KTsKIH0KIApAQCAtMzIwLDcgKzI1OCw3IEBACiAJbWFwbGVfbGFzdHB0ciA9IG1hcGxlX3NlbmRwdHI7CiAKIAkqbWFwbGVfc2VuZHB0cisrID0gKHBvcnQgPDwgMTYpIHwgbGVuIHwgMHg4MDAwMDAwMDsKLQkqbWFwbGVfc2VuZHB0cisrID0gUEhZU0FERFIobXEtPnJlY3ZidWYpOworCSptYXBsZV9zZW5kcHRyKysgPSBQSFlTQUREUihtcS0+cmVjdmJ1Zi0+YnVmKTsKIAkqbWFwbGVfc2VuZHB0cisrID0KIAkgICAgbXEtPmNvbW1hbmQgfCAodG8gPDwgOCkgfCAoZnJvbSA8PCAxNikgfCAobGVuIDw8IDI0KTsKIAl3aGlsZSAobGVuLS0gPiAwKQpAQCAtMzMzLDIwICsyNzEsMjggQEAKIAlpbnQgaSwgbWFwbGVfcGFja2V0cyA9IDA7CiAJc3RydWN0IG1hcGxlcSAqbXEsICpubXE7CiAKKwlpZiAoIW1hcGxlX2RtYV9kb25lKCkpCisJCXJldHVybjsKKworCS8qIGRpc2FibGUgRE1BICovCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CisKIAlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKLQkJcmV0dXJuOworCQlnb3RvIGZpbmlzaDsKKwogCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpIHsKKwlpZiAobGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpKSB7CiAJCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBmaW5pc2g7CiAJfQotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CisKIAltYXBsZV9sYXN0cHRyID0gbWFwbGVfc2VuZGJ1ZjsKIAltYXBsZV9zZW5kcHRyID0gbWFwbGVfc2VuZGJ1ZjsKLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfd2FpdHEsIGxpc3QpIHsKIAkJbWFwbGVfYnVpbGRfYmxvY2sobXEpOwotCQlsaXN0X21vdmUoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOworCQlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOwogCQlpZiAobWFwbGVfcGFja2V0cysrID4gTUFQTEVfTUFYUEFDS0VUUykKIAkJCWJyZWFrOwogCX0KQEAgLTM1NiwxMCArMzAyLDEzIEBACiAJCQlkbWFfY2FjaGVfc3luYygwLCBtYXBsZV9zZW5kYnVmICsgaSAqIFBBR0VfU0laRSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CiAJfQorCitmaW5pc2g6CisJbWFwbGVfZG1hX3Jlc2V0KCk7CiB9CiAKIC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgZHJpdmVyIHJlZ2lzdGVyZWQgbGlrZWx5IHRvIG1hdGNoIHRoaXMgZGV2aWNlICovCi1zdGF0aWMgaW50IGNoZWNrX21hdGNoaW5nX21hcGxlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBtYXBsZV9jaGVja19tYXRjaGluZ19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKIAkJCQkJdm9pZCAqZGV2cHRyKQogewogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1hcGxlX2RydjsKQEAgLTM3NCwxMCArMzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFwbGVfZGV0YWNoX2RyaXZlcihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmICghbWRldikKLQkJcmV0dXJuOwogCWRldmljZV91bnJlZ2lzdGVyKCZtZGV2LT5kZXYpOwotCW1kZXYgPSBOVUxMOwogfQogCiAvKiBwcm9jZXNzIGluaXRpYWwgTUFQTEVfQ09NTUFORF9ERVZJTkZPIGZvciBlYWNoIGRldmljZSBvciBwb3J0ICovCkBAIC0zODUsOSArMzMxLDkgQEAKIHsKIAljaGFyICpwLCAqcmVjdmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZ1bmN0aW9uOwotCWludCBtYXRjaGVkLCByZXR2YWw7CisJaW50IG1hdGNoZWQsIGVycm9yOwogCi0JcmVjdmJ1ZiA9IG1kZXYtPm1xLT5yZWN2YnVmOworCXJlY3ZidWYgPSBtZGV2LT5tcS0+cmVjdmJ1Zi0+YnVmOwogCS8qIGNvcHkgdGhlIGRhdGEgYXMgaW5kaXZpZHVhbCBlbGVtZW50cyBpbgogCSogY2FzZSBvZiBtZW1vcnkgb3B0aW1pc2F0aW9uICovCiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uLCByZWN2YnVmICsgNCwgNCk7CkBAIC0zOTUsNyArMzQxLDYgQEAKIAltZW1jcHkoJm1kZXYtPmRldmluZm8uYXJlYV9jb2RlLCByZWN2YnVmICsgMjAsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5jb25uZWN0b3JfZGlyZWN0aW9uLCByZWN2YnVmICsgMjEsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X25hbWVbMF0sIHJlY3ZidWYgKyAyMiwgMzApOwotCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X2xpY2VuY2VbMF0sIHJlY3ZidWYgKyA1MiwgNjApOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5zdGFuZGJ5X3Bvd2VyLCByZWN2YnVmICsgMTEyLCAyKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8ubWF4X3Bvd2VyLCByZWN2YnVmICsgMTE0LCAyKTsKIAltZW1jcHkobWRldi0+cHJvZHVjdF9uYW1lLCBtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbmFtZSwgMzApOwpAQCAtNDE0LDQzICszNTksMzkgQEAKIAkJZWxzZQogCQkJYnJlYWs7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBkZXZpY2UgZGV0ZWN0ZWQ6ICVzXG4iLAotCQltZGV2LT5wcm9kdWN0X25hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZTogJXNcbiIsIG1kZXYtPnByb2R1Y3RfbGljZW5jZSk7Ci0KIAlmdW5jdGlvbiA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pOwogCisJZGV2X2luZm8oJm1kZXYtPmRldiwgImRldGVjdGVkICVzOiBmdW5jdGlvbiAweCVsWDogYXQgKCVkLCAlZClcbiIsCisJCW1kZXYtPnByb2R1Y3RfbmFtZSwgZnVuY3Rpb24sIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCiAJaWYgKGZ1bmN0aW9uID4gMHgyMDApIHsKIAkJLyogRG8gdGhpcyBzaWxlbnRseSAtIGFzIG5vdCBhIHJlYWwgZGV2aWNlICovCiAJCWZ1bmN0aW9uID0gMDsKLQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CisJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIk1hcGxlIGJ1cyBhdCAoJWQsICVkKTogRnVuY3Rpb24gMHglbFhcbiIsCi0JCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBmdW5jdGlvbik7Ci0KIAkJbWF0Y2hlZCA9CiAJCQlidXNfZm9yX2VhY2hfZHJ2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgbWRldiwKLQkJCQljaGVja19tYXRjaGluZ19tYXBsZV9kcml2ZXIpOworCQkJCW1hcGxlX2NoZWNrX21hdGNoaW5nX2RyaXZlcik7CiAKIAkJaWYgKG1hdGNoZWQgPT0gMCkgewogCQkJLyogRHJpdmVyIGRvZXMgbm90IGV4aXN0IHlldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJObyBtYXBsZSBkcml2ZXIgZm91bmQuXG4iKTsKLQkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV9kdW1teV9kcml2ZXI7CisJCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAibm8gZHJpdmVyIGZvdW5kXG4iKTsKKwkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiAJCX0KLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCi0JCQltZGV2LT51bml0LCBmdW5jdGlvbik7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCisJCQkgICAgIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKIAl9CisKIAltZGV2LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCW1kZXYtPmRldi5yZWxlYXNlID0gJm1hcGxlX3JlbGVhc2VfZGV2aWNlOwotCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJIk1hcGxlIGJ1czogQXR0ZW1wdCB0byByZWdpc3RlciBkZXZpY2UiCi0JCSIgKCV4LCAleCkgZmFpbGVkLlxuIiwKLQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisKKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwllcnJvciA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oJm1kZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBkZXZpY2UgYXQiCisJCQkiICglZCwgJWQpLCB3aXRoIGVycm9yIDB4JVhcbiIsIG1kZXYtPnVuaXQsCisJCQltZGV2LT5wb3J0LCBlcnJvcik7CiAJCW1hcGxlX2ZyZWVfZGV2KG1kZXYpOwogCQltZGV2ID0gTlVMTDsKIAkJcmV0dXJuOwpAQCAtNDYyLDcgKzQwMyw3IEBACiAgKiBwb3J0IGFuZCB1bml0IHRoZW4gcmV0dXJuIDEgLSBhbGxvd3MgaWRlbnRpZmljYXRpb24KICAqIG9mIHdoaWNoIGRldmljZXMgbmVlZCB0byBiZSBhdHRhY2hlZCBvciBkZXRhY2hlZAogICovCi1zdGF0aWMgaW50IGRldGFjaF9tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQorc3RhdGljIGludCBjaGVja19tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQogewogCXN0cnVjdCBtYXBsZV9kZXZpY2Vfc3BlY2lmeSAqZHM7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKQEAgLTQ3NywyMSArNDE4LDI1IEBACiBzdGF0aWMgaW50IHNldHVwX21hcGxlX2NvbW1hbmRzKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqaWdub3JlZCkKIHsKIAlpbnQgYWRkOwotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlX2RldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOwotCi0JaWYgKChtYXBsZV9kZXYtPmludGVydmFsID4gMCkKLQkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9kZXYtPndoZW4pKSB7Ci0JCS8qIGJvdW5jZSBpZiB3ZSBjYW5ub3QgbG9jayAqLwotCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1hcGxlX2RldiwKLQkJCWJlMzJfdG9fY3B1KG1hcGxlX2Rldi0+ZGV2aW5mby5mdW5jdGlvbiksCisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOworCWlmIChtZGV2LT5pbnRlcnZhbCA+IDAgJiYgYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAgJiYKKwkJdGltZV9hZnRlcihqaWZmaWVzLCBtZGV2LT53aGVuKSkgeworCQkvKiBib3VuY2UgaWYgd2UgY2Fubm90IGFkZCAqLworCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsCisJCQliZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKSwKIAkJCU1BUExFX0NPTU1BTkRfR0VUQ09ORCwgMSwgTlVMTCk7CiAJCWlmICghYWRkKQotCQkJbWFwbGVfZGV2LT53aGVuID0gamlmZmllcyArIG1hcGxlX2Rldi0+aW50ZXJ2YWw7CisJCQltZGV2LT53aGVuID0gamlmZmllcyArIG1kZXYtPmludGVydmFsOwogCX0gZWxzZSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKLQkJCS8qIFRoaXMgd2lsbCBhbHNvIGJvdW5jZSAqLwotCQkJbWFwbGVfYWRkX3BhY2tldChtYXBsZV9kZXYsIDAsCi0JCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCS8qIEVuc3VyZSB3ZSBkb24ndCBoYXZlIGJsb2NrIHJlYWRzIGFuZCBkZXZpbmZvCisJCQkqIGNhbGxzIGludGVyZmVyaW5nIHdpdGggb25lIGFub3RoZXIgLSBzbyBmbGFnIHRoZQorCQkJKiBkZXZpY2UgYXMgYnVzeSAqLworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwKSB7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLAorCQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSwyOSArNDQ0LDUwIEBACiAvKiBWQkxBTksgYm90dG9tIGhhbGYgLSBpbXBsZW1lbnRlZCB2aWEgd29ya3F1ZXVlICovCiBzdGF0aWMgdm9pZCBtYXBsZV92YmxhbmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpCisJaW50IHgsIGxvY2tpbmc7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKworCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKIAkJcmV0dXJuOwogCiAJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKKwkJZ290byBmaW5pc2g7CisKKwkvKgorCSogU2V0IHVwIGVzc2VudGlhbCBjb21tYW5kcyAtIHRvIGZldGNoIGRhdGEgYW5kCisJKiBjaGVjayBkZXZpY2VzIGFyZSBzdGlsbCBwcmVzZW50CisJKi8KIAlidXNfZm9yX2VhY2hfZGV2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgTlVMTCwKLQkJCSBzZXR1cF9tYXBsZV9jb21tYW5kcyk7CisJCXNldHVwX21hcGxlX2NvbW1hbmRzKTsKIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9wbnBfdGltZSkpIHsKKwkJLyoKKwkJKiBTY2FuIHRoZSBlbXB0eSBwb3J0cyAtIGJ1cyBpcyBmbGFrZXkgYW5kIG1heSBoYXZlCisJCSogbWlzLXJlcG9ydGVkIGVtcHR5bmVzcworCQkqLworCQlmb3IgKHggPSAwOyB4IDwgTUFQTEVfUE9SVFM7IHgrKykgeworCQkJaWYgKGNoZWNrZWRbeF0gJiYgZW1wdHlbeF0pIHsKKwkJCQltZGV2ID0gYmFzZXVuaXRzW3hdOworCQkJCWlmICghbWRldikKKwkJCQkJYnJlYWs7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbG9ja2luZyA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwKKwkJCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCQlpZiAoIWxvY2tpbmcpCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwogCQltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBNQVBMRV9QTlBfSU5URVJWQUw7Ci0KLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSAmJiBsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkJbWFwbGVfc2VuZCgpOwotCX0gZWxzZSB7Ci0JCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CiAJfQogCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7CitmaW5pc2g6CisJbWFwbGVfc2VuZCgpOwogfQogCi0vKiBoYW5kbGUgZGV2aWNlcyBhZGRlZCB2aWEgaG90cGx1Z3MgLSBwbGFjaW5nIHRoZW0gb24gcXVldWUgZm9yIERFVklORk8qLworLyogaGFuZGxlIGRldmljZXMgYWRkZWQgdmlhIGhvdHBsdWdzIC0gcGxhY2luZyB0aGVtIG9uIHF1ZXVlIGZvciBERVZJTkZPICovCiBzdGF0aWMgdm9pZCBtYXBsZV9tYXBfc3VidW5pdHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgaW50IHN1Ym1hc2spCiB7CiAJaW50IHJldHZhbCwgaywgZGV2Y2hlY2s7CkBAIC01MzMsNyArNDk5LDcgQEAKIAkJZHMudW5pdCA9IGsgKyAxOwogCQlyZXR2YWwgPQogCQkgICAgYnVzX2Zvcl9lYWNoX2RldigmbWFwbGVfYnVzX3R5cGUsIE5VTEwsICZkcywKLQkJCQkgICAgIGRldGFjaF9tYXBsZV9kZXZpY2UpOworCQkJCSAgICAgY2hlY2tfbWFwbGVfZGV2aWNlKTsKIAkJaWYgKHJldHZhbCkgewogCQkJc3VibWFzayA9IHN1Ym1hc2sgPj4gMTsKIAkJCWNvbnRpbnVlOwpAQCAtNTQzLDYgKzUwOSw3IEBACiAJCQltZGV2X2FkZCA9IG1hcGxlX2FsbG9jX2RldihtZGV2LT5wb3J0LCBrICsgMSk7CiAJCQlpZiAoIW1kZXZfYWRkKQogCQkJCXJldHVybjsKKwkJCWF0b21pY19zZXQoJm1kZXZfYWRkLT5idXN5LCAxKTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldl9hZGQsIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywKIAkJCQkwLCBOVUxMKTsKIAkJCS8qIG1hcmsgdGhhdCB3ZSBhcmUgY2hlY2tpbmcgc3ViIGRldmljZXMgKi8KQEAgLTU2NCwyNyArNTMxLDQ1IEBACiB9CiAKIC8qIGhhbmRsZSBlbXB0eSBwb3J0IG9yIGhvdHBsdWcgcmVtb3ZhbCAqLwotc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LAotCQkJCXN0cnVjdCBtYXBsZXEgKm1xKQorc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmIChtZGV2LT51bml0ICE9IDApIHsKLQkJbGlzdF9kZWwoJm1xLT5saXN0KTsKLQkJbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzIGRldmljZSBkZXRhY2hpbmcgYXQgKCVkLCAlZClcbiIsCi0JCSAgICAgICBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7CisKKwlpZiAobGlrZWx5KG1kZXYtPnVuaXQgIT0gMCkpIHsKKwkJLyoKKwkJKiBCbG9jayBkZXZpY2VzIHBsYXkgdXAKKwkJKiBhbmQgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGV5IGhhdmUKKwkJKiBiZWVuIHJlbW92ZWQgZXZlbiB3aGVuIHN0aWxsIGluIHBsYWNlIG9yCisJCSogdHJpcCB0aGUgbXRkIGxheWVyIHdoZW4gdGhleSBoYXZlCisJCSogcmVhbGx5IGdvbmUgLSB0aGlzIGNvZGUgdHJhcHMgdGhhdCBldmVudHVhbGl0eQorCQkqIGFuZCBlbnN1cmVzIHdlIGFyZW4ndCBvdmVybG9hZGVkIHdpdGggdXNlbGVzcworCQkqIGVycm9yIG1lc3NhZ2VzCisJCSovCisJCWlmIChtZGV2LT5jYW5fdW5sb2FkKSB7CisJCQlpZiAoIW1kZXYtPmNhbl91bmxvYWQobWRldikpIHsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAyKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAiZGV0YWNoaW5nIGRldmljZSBhdCAoJWQsICVkKVxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCQltYXBsZV9kZXRhY2hfZHJpdmVyKG1kZXYpOwogCQlyZXR1cm47Ci0JfQotCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKLQkJaWYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpIHsKLQkJCWNoZWNrZWRbbWRldi0+cG9ydF0gPSB0cnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbWFwbGUgZGV2aWNlcyBhdHRhY2hlZCIKLQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCX0gZWxzZSB7CisJCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKKwkJCWlmIChjaGVja2VkW21kZXYtPnBvcnRdID09IGZhbHNlKSB7CisJCQkJY2hlY2tlZFttZGV2LT5wb3J0XSA9IHRydWU7CisJCQkJZW1wdHlbbWRldi0+cG9ydF0gPSB0cnVlOworCQkJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJubyBkZXZpY2VzIgorCQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCQkJfQorCQkJcmV0dXJuOwogCQl9Ci0JCXJldHVybjsKIAl9Ci0JbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOworCS8qIFNvbWUgaGFyZHdhcmUgZGV2aWNlcyBnZW5lcmF0ZSBmYWxzZSBkZXRhY2ggbWVzc2FnZXMgb24gdW5pdCAwICovCisJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiB9CiAKIC8qIHByZXByb2Nlc3MgaG90cGx1Z3Mgb3Igc2NhbnMgKi8KQEAgLTU5OSw4ICs1ODQsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChtZGV2LT51bml0ICE9IDApCiAJCQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwkJCWlmIChtZGV2LT51bml0ID09IDApIHsKKwkJCQllbXB0eVttZGV2LT5wb3J0XSA9IGZhbHNlOworCQkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCQl9CiAJCX0KLQkJcmV0dXJuOwogCX0KIAlpZiAobWRldi0+dW5pdCA9PSAwKSB7CiAJCXN1Ym1hc2sgPSByZWN2YnVmWzJdICYgMHgxRjsKQEAgLTYxMSw2ICs1OTksMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1ZikKK3sKKwlpZiAobWRldi0+ZmlsZWVycl9oYW5kbGVyKSB7CisJCW1kZXYtPmZpbGVlcnJfaGFuZGxlcihtZGV2LCByZWN2YnVmKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiZGV2aWNlIGF0ICglZCwgJWQpIHJlcG9ydHMiCisJCQkiZmlsZSBlcnJvciAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LAorCQkJKChpbnQgKilyZWN2YnVmKVsxXSk7Cit9CisKIHN0YXRpYyB2b2lkIG1hcGxlX3BvcnRfcmVzY2FuKHZvaWQpCiB7CiAJaW50IGk7CkBAIC02MjEsMTIgKzYyMCw2IEBACiAJCWlmIChjaGVja2VkW2ldID09IGZhbHNlKSB7CiAJCQlmdWxsc2NhbiA9IDA7CiAJCQltZGV2ID0gYmFzZXVuaXRzW2ldOwotCQkJLyoKLQkJCSAqICB0ZXN0IGxvY2sgaW4gY2FzZSBzY2FuIGhhcyBmYWlsZWQKLQkJCSAqICBidXQgZGV2aWNlIGlzIHN0aWxsIGxvY2tlZAotCQkJICovCi0JCQlpZiAobXV0ZXhfaXNfbG9ja2VkKCZtZGV2LT5tcS0+bXV0ZXgpKQotCQkJCW11dGV4X3VubG9jaygmbWRldi0+bXEtPm11dGV4KTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLAogCQkJCTAsIE5VTEwpOwogCQl9CkBAIC02MzcsNyArNjMwLDcgQEAKIHN0YXRpYyB2b2lkIG1hcGxlX2RtYV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbWFwbGVxICptcSwgKm5tcTsKLQlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAljaGFyICpyZWN2YnVmOwogCWVudW0gbWFwbGVfY29kZSBjb2RlOwogCkBAIC02NDYsNDMgKzYzOSw1NiBAQAogCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOwogCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfc2VudHEsIGxpc3QpIHsKLQkJCXJlY3ZidWYgPSBtcS0+cmVjdmJ1ZjsKKwkJCW1kZXYgPSBtcS0+ZGV2OworCQkJcmVjdmJ1ZiA9IG1xLT5yZWN2YnVmLT5idWY7CisJCQlkbWFfY2FjaGVfc3luYygmbWRldi0+ZGV2LCByZWN2YnVmLCAweDQwMCwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJY29kZSA9IHJlY3ZidWZbMF07Ci0JCQlkZXYgPSBtcS0+ZGV2OwogCQkJa2ZyZWUobXEtPnNlbmRidWYpOwotCQkJbXV0ZXhfdW5sb2NrKCZtcS0+bXV0ZXgpOwogCQkJbGlzdF9kZWxfaW5pdCgmbXEtPmxpc3QpOwotCiAJCQlzd2l0Y2ggKGNvZGUpIHsKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfTk9ORToKLQkJCQltYXBsZV9yZXNwb25zZV9ub25lKGRldiwgbXEpOworCQkJCW1hcGxlX3Jlc3BvbnNlX25vbmUobWRldik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfREVWSU5GTzoKLQkJCQltYXBsZV9yZXNwb25zZV9kZXZpbmZvKGRldiwgcmVjdmJ1Zik7CisJCQkJbWFwbGVfcmVzcG9uc2VfZGV2aW5mbyhtZGV2LCByZWN2YnVmKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9EQVRBVFJGOgotCQkJCWlmIChkZXYtPmNhbGxiYWNrKQotCQkJCQlkZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlpZiAobWRldi0+Y2FsbGJhY2spCisJCQkJCW1kZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9GSUxFRVJSOgorCQkJCW1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIobWRldiwgcmVjdmJ1Zik7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUdBSU46CiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0JBRENNRDoKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQkFERlVOQzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgbm9uLWZhdGFsIGVycm9yIDB4JVhcbiIsCi0JCQkJICAgICAgIGNvZGUpOworCQkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJub24tZmF0YWwgZXJyb3IiCisJCQkJCSIgMHglWCBhdCAoJWQsICVkKVxuIiwgY29kZSwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUxMSU5GTzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgLSBleHRlbmRlZCBkZXZpY2UgaW5mb3JtYXRpb24iCi0JCQkJCSIgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiZXh0ZW5kZWQiCisJCQkJIiBkZXZpY2UgaW5mb3JtYXRpb24gcmVxdWVzdCBmb3IgKCVkLCAlZCkiCisJCQkJIiBidXQgY2FsbCBpcyBub3Qgc3VwcG9ydGVkXG4iLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX09LOgorCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNjk5LDIwICs3MDUsMTkgQEAKIAkJaWYgKCFmdWxsc2NhbikKIAkJCW1hcGxlX3BvcnRfcmVzY2FuKCk7CiAJCS8qIG1hcmsgdGhhdCB3ZSBoYXZlIGJlZW4gdGhyb3VnaCB0aGUgZmlyc3Qgc2NhbiAqLwotCQlpZiAoc3RhcnRlZCA9PSAwKQotCQkJc3RhcnRlZCA9IDE7CisJCXN0YXJ0ZWQgPSAxOwogCX0KLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKKwltYXBsZV9zZW5kKCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZWJ1c19kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZV9kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAkvKiBMb2FkIGV2ZXJ5dGhpbmcgaW50byB0aGUgYm90dG9tIGhhbGYgKi8KIAlzY2hlZHVsZV93b3JrKCZtYXBsZV9kbWFfcHJvY2Vzcyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVidXNfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc2NoZWR1bGVfd29yaygmbWFwbGVfdmJsYW5rX3Byb2Nlc3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTcyMCwxNCArNzI1LDE0IEBACiAKIHN0YXRpYyBpbnQgbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcih2b2lkKQogewotCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlYnVzX2RtYV9pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlX2RtYV9pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UpOwogfQogCiBzdGF0aWMgaW50IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIodm9pZCkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfVlNZTkMsIG1hcGxlYnVzX3ZibGFua19pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIFZCTEFOSyIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9WU1lOQywgbWFwbGVfdmJsYW5rX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgVkJMQU5LIiwgJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFwbGVfZ2V0X2RtYV9idWZmZXIodm9pZCkKQEAgLTc0MCw3ICs3NDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hdGNoX21hcGxlX2J1c19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2cHRyLAorc3RhdGljIGludCBtYXBsZV9tYXRjaF9idXNfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnZwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RyaXZlciAqbWFwbGVfZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRydnB0cik7CkBAIC03NjUsMjIgKzc3MCwyNCBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UgPSB7CiAJLmRydiA9IHsKLQkJLm5hbWUgPSAibWFwbGVfZHVtbXlfZHJpdmVyIiwKKwkJLm5hbWUgPSAibWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlIiwKIAkJLmJ1cyA9ICZtYXBsZV9idXNfdHlwZSwKIAl9LAogfTsKLQorLyoKKyAqIG1hcGxlX2J1c190eXBlIC0gY29yZSBtYXBsZSBidXMgc3RydWN0dXJlCisgKi8KIHN0cnVjdCBidXNfdHlwZSBtYXBsZV9idXNfdHlwZSA9IHsKIAkubmFtZSA9ICJtYXBsZSIsCi0JLm1hdGNoID0gbWF0Y2hfbWFwbGVfYnVzX2RyaXZlciwKKwkubWF0Y2ggPSBtYXBsZV9tYXRjaF9idXNfZHJpdmVyLAogCS51ZXZlbnQgPSBtYXBsZV9idXNfdWV2ZW50LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2J1c190eXBlKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2UgbWFwbGVfYnVzID0gewotCS5idXNfaWQgPSAibWFwbGUiLAorCS5pbml0X25hbWUgPSAibWFwbGUiLAogCS5yZWxlYXNlID0gbWFwbGVfYnVzX3JlbGVhc2UsCiB9OwogCkBAIC03ODgsNyArNzk1LDggQEAKIHsKIAlpbnQgcmV0dmFsLCBpOwogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXZbTUFQTEVfUE9SVFNdOwotCWN0cmxfb3V0bCgwLCBNQVBMRV9TVEFURSk7CisKKwljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWFwbGVfYnVzKTsKIAlpZiAocmV0dmFsKQpAQCAtNzk4LDM2ICs4MDYsMzMgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfZGV2aWNlOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZtYXBsZV9kdW1teV9kcml2ZXIuZHJ2KTsKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZS5kcnYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gY2xlYW51cF9idXM7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1hcGxlIGJ1cyBkbWEgKi8KIAlyZXR2YWwgPSBtYXBsZV9nZXRfZG1hX2J1ZmZlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1czogRmFpbGVkIHRvIGFsbG9jYXRlIE1hcGxlIERNQSBidWZmZXJzXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXJzXG4iKTsKIAkJZ290byBjbGVhbnVwX2Jhc2ljOwogCX0KIAogCS8qIHNldCB1cCBETUEgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlyZXR2YWwgPSBtYXBsZV9zZXRfZG1hX2ludGVycnVwdF9oYW5kbGVyKCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gZ3JhYiBtYXBsZSBETUEgSVJRXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiYnVzIGZhaWxlZCB0byBncmFiIG1hcGxlICIKKwkJCSJETUEgSVJRXG4iKTsKIAkJZ290byBjbGVhbnVwX2RtYTsKIAl9CiAKIAkvKiBzZXQgdXAgVkJMQU5LIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gbWFwbGVfc2V0X3ZibGFua19pbnRlcnJ1cHRfaGFuZGxlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gZ3JhYiBWQkxBTksgSVJRXG4iKTsKKwkJZGV2X2VycigmbWFwbGVfYnVzLCAiYnVzIGZhaWxlZCB0byBncmFiIFZCTEFOSyBJUlFcbiIpOwogCQlnb3RvIGNsZWFudXBfaXJxOwogCX0KIAotCW1hcGxlX3F1ZXVlX2NhY2hlID0KLQkgICAga21lbV9jYWNoZV9jcmVhdGUoIm1hcGxlX3F1ZXVlX2NhY2hlIiwgMHg0MDAsIDAsCi0JCQkgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCW1hcGxlX3F1ZXVlX2NhY2hlID0gS01FTV9DQUNIRShtYXBsZV9idWZmZXIsIFNMQUJfSFdDQUNIRV9BTElHTik7CiAKIAlpZiAoIW1hcGxlX3F1ZXVlX2NhY2hlKQogCQlnb3RvIGNsZWFudXBfYm90aGlycXM7CkBAIC04MzgsMjMgKzg0MywyMyBAQAogCS8qIHNldHVwIG1hcGxlIHBvcnRzICovCiAJZm9yIChpID0gMDsgaSA8IE1BUExFX1BPUlRTOyBpKyspIHsKIAkJY2hlY2tlZFtpXSA9IGZhbHNlOworCQllbXB0eVtpXSA9IGZhbHNlOwogCQltZGV2W2ldID0gbWFwbGVfYWxsb2NfZGV2KGksIDApOwotCQliYXNldW5pdHNbaV0gPSBtZGV2W2ldOwogCQlpZiAoIW1kZXZbaV0pIHsKIAkJCXdoaWxlIChpLS0gPiAwKQogCQkJCW1hcGxlX2ZyZWVfZGV2KG1kZXZbaV0pOwogCQkJZ290byBjbGVhbnVwX2NhY2hlOwogCQl9CisJCWJhc2V1bml0c1tpXSA9IG1kZXZbaV07CisJCWF0b21pY19zZXQoJm1kZXZbaV0tPmJ1c3ksIDEpOwogCQltYXBsZV9hZGRfcGFja2V0KG1kZXZbaV0sIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CiAJCXN1YmRldmljZV9tYXBbaV0gPSAwOwogCX0KIAotCS8qIHNldHVwIG1hcGxlYnVzIGhhcmR3YXJlICovCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7Ci0JLyogaW5pdGlhbCBkZXRlY3Rpb24gKi8KKwltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBIWjsKKwkvKiBwcmVwYXJlIGluaXRpYWwgcXVldWUgKi8KIAltYXBsZV9zZW5kKCk7Ci0JbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1cyBjb3JlIG5vdyByZWdpc3RlcmVkLlxuIik7CisJZGV2X2luZm8oJm1hcGxlX2J1cywgImJ1cyBjb3JlIG5vdyByZWdpc3RlcmVkXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC04NzEsNyArODc2LDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBtYXBsZV9zZW5kYnVmLCBNQVBMRV9ETUFfUEFHRVMpOwogCiBjbGVhbnVwX2Jhc2ljOgotCWRyaXZlcl91bnJlZ2lzdGVyKCZtYXBsZV9kdW1teV9kcml2ZXIuZHJ2KTsKKwlkcml2ZXJfdW5yZWdpc3RlcigmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlLmRydik7CiAKIGNsZWFudXBfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZtYXBsZV9idXNfdHlwZSk7CkBAIC04ODAsNyArODg1LDcgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWFwbGVfYnVzKTsKIAogY2xlYW51cDoKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJNYXBsZSBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIC8qIFB1c2ggaW5pdCB0byBsYXRlciB0byBlbnN1cmUgaGFyZHdhcmUgZ2V0cyBkZXRlY3RlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYyBiL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKaW5kZXggNGQwMjgyYi4uMmQ5ZTdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYworKysgYi9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCkBAIC0yMiw3ICsyMiw3IEBACiBzdGF0aWMgaW50IHN1cGVyaHl3YXlfZGV2aWNlczsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2Ugc3VwZXJoeXdheV9idXNfZGV2aWNlID0gewotCS5idXNfaWQgPSAic3VwZXJoeXdheSIsCisJLmluaXRfbmFtZSA9ICJzdXBlcmh5d2F5IiwKIH07CiAKIHN0YXRpYyB2b2lkIHN1cGVyaHl3YXlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtODMsNyArODMsNyBAQAogCWRldi0+aWQuaWQJCT0gZGV2LT52Y3IubW9kX2lkOwogCiAJc3ByaW50ZihkZXYtPm5hbWUsICJTdXBlckh5d2F5IGRldmljZSAlMDR4IiwgZGV2LT5pZC5pZCk7Ci0Jc3ByaW50ZihkZXYtPmRldi5idXNfaWQsICIlMDJ4Iiwgc3VwZXJoeXdheV9kZXZpY2VzKTsKKwlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTAyeCIsIHN1cGVyaHl3YXlfZGV2aWNlcyk7CiAKIAlzdXBlcmh5d2F5X2RldmljZXMrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwppbmRleCA1NmZmM2U2Li4xMmU0NDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3BpID0gbXNnLT5zcGk7CiAKIAlkZXZfZGJnKG1hc3Rlci0+ZGV2LnBhcmVudCwgInN0YXJ0IG1lc3NhZ2UgJXAgZm9yICVzXG4iLAotCQkJbXNnLCBzcGktPmRldi5idXNfaWQpOworCQkJbXNnLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAogCS8qIHNlbGVjdCBjaGlwIGlmIGl0J3Mgbm90IHN0aWxsIGFjdGl2ZSAqLwogCWlmIChhcy0+c3RheSkgewpAQCAtNjI3LDcgKzYyNyw3IEBACiAJCWlmICghYXNkKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5wY3NfcGluLCBzcGktPmRldi5idXNfaWQpOworCQlyZXQgPSBncGlvX3JlcXVlc3QobnBjc19waW4sIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlpZiAocmV0KSB7CiAJCQlrZnJlZShhc2QpOwogCQkJcmV0dXJuIHJldDsKQEAgLTY2OCw3ICs2NjgsNyBAQAogCWFzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAKIAlkZXZfZGJnKGNvbnRyb2xsZXIsICJuZXcgbWVzc2FnZSAlcCBzdWJtaXR0ZWQgZm9yICVzXG4iLAotCQkJbXNnLCBzcGktPmRldi5idXNfaWQpOworCQkJbXNnLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAogCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZtc2ctPnRyYW5zZmVycykpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMyw3ICs4MDMsNyBAQAogCWFzLT5jbGsgPSBjbGs7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWVsX3NwaV9pbnRlcnJ1cHQsIDAsCi0JCQlwZGV2LT5kZXYuYnVzX2lkLCBtYXN0ZXIpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIG1hc3Rlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5tYXBfcmVnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwppbmRleCAzYjk3ODAzLi42OGM3N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm1wcy0+cXVldWUpOwogCiAJbXBzLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJbWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAobXBzLT53b3JrcXVldWUgPT0gTlVMTCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZnJlZV9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwppbmRleCA0NTRhMjcxLi5kNmQwYzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxLAotCQkJcGRldi0+ZGV2LmJ1c19pZCkpIHsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gZXJyMTsKIAl9CkBAIC0xMDIxLDEzICsxMDIxLDEzIEBACiAJc3Bpbl9sb2NrX2luaXQoJm1jc3BpLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbWNzcGktPm1zZ19xdWV1ZSk7CiAKLQltY3NwaS0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWNzcGlfaWNrIik7CisJbWNzcGktPmljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwogCWlmIChJU19FUlIobWNzcGktPmljaykpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IG1jc3BpX2lja1xuIik7CiAJCXN0YXR1cyA9IFBUUl9FUlIobWNzcGktPmljayk7CiAJCWdvdG8gZXJyMWE7CiAJfQotCW1jc3BpLT5mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtY3NwaV9mY2siKTsKKwltY3NwaS0+ZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihtY3NwaS0+ZmNrKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgbWNzcGlfZmNrXG4iKTsKIAkJc3RhdHVzID0gUFRSX0VSUihtY3NwaS0+ZmNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwppbmRleCBiYWI2ZmYwLi5mZThiOWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogI2lmZGVmCVZFUkJPU0UKIAkJCXByX2RlYnVnKCIlczogd3JpdGUtJWQgPSUwNHhcbiIsCi0JCQkJCXNwaS0+ZGV2LmJ1c19pZCwgYml0cywgdmFsKTsKKwkJCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgYml0cywgdmFsKTsKICNlbmRpZgogCQkJaWYgKHdhaXRfdXdpcmVfY3NyX2ZsYWcoQ1NSQiwgMCwgMCkpCiAJCQkJZ290byBlaW87CkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJCXN0YXR1cyArPSBieXRlczsKICNpZmRlZglWRVJCT1NFCiAJCQlwcl9kZWJ1ZygiJXM6IHJlYWQtJWQgPSUwNHhcbiIsCi0JCQkJCXNwaS0+ZGV2LmJ1c19pZCwgYml0cywgdmFsKTsKKwkJCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgYml0cywgdmFsKTsKICNlbmRpZgogCiAJCX0KQEAgLTMzMSw3ICszMzEsNyBAQAogCXV3aXJlID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAKIAlpZiAoc3BpLT5jaGlwX3NlbGVjdCA+IDMpIHsKLQkJcHJfZGVidWcoIiVzOiBjcyVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJcHJfZGVidWcoIiVzOiBjcyVkP1xuIiwgZGV2X25hbWUoJnNwaS0+ZGV2KSwgc3BpLT5jaGlwX3NlbGVjdCk7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJYml0cyA9IDg7CiAKIAlpZiAoYml0cyA+IDE2KSB7Ci0JCXByX2RlYnVnKCIlczogd29yZHNpemUgJWQ/XG4iLCBzcGktPmRldi5idXNfaWQsIGJpdHMpOworCQlwcl9kZWJ1ZygiJXM6IHdvcmRzaXplICVkP1xuIiwgZGV2X25hbWUoJnNwaS0+ZGV2KSwgYml0cyk7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0zNzgsNyArMzc4LDcgQEAKIAkJaHogPSB0LT5zcGVlZF9oejsKIAogCWlmICghaHopIHsKLQkJcHJfZGVidWcoIiVzOiB6ZXJvIHNwZWVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkKTsKKwkJcHJfZGVidWcoIiVzOiB6ZXJvIHNwZWVkP1xuIiwgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC00MDYsNyArNDA2LDcgQEAKIAl9CiAJaWYgKGRpdjFfaWR4ID09IDQpIHsKIAkJcHJfZGVidWcoIiVzOiBsb3dlc3QgY2xvY2sgJWxkLCBuZWVkICVkXG4iLAotCQkJc3BpLT5kZXYuYnVzX2lkLCByYXRlIC8gMTAgLyA4LCBoeik7CisJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCByYXRlIC8gMTAgLyA4LCBoeik7CiAJCXN0YXR1cyA9IC1FRE9NOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNTA2LDExICs1MDYsMTIgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCB1d2lyZSk7CiAKLQl1d2lyZS0+Y2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhcm14b3JfY2siKTsKLQlpZiAoIXV3aXJlLT5jayB8fCBJU19FUlIodXdpcmUtPmNrKSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBtcHVfeG9yX2NsayA/XG4iKTsKKwl1d2lyZS0+Y2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKHV3aXJlLT5jaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUih1d2lyZS0+Y2spOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBmdW5jdGlvbmFsIGNsb2NrP1xuIik7CiAJCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gc3RhdHVzOwogCX0KIAljbGtfZW5hYmxlKHV3aXJlLT5jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jIGIvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKaW5kZXggMDE0YmVjYi4uYzhiMGJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSwKLQkJCQlwZGV2LT5kZXYuYnVzX2lkKSkgeworCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBkMGZjNGNhLi4zM2ZjZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNzcC5oPgogI2luY2x1ZGUgPG1hY2gvc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CkBAIC0xMzMzLDcgKzEzMzEsNyBAQAogCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7CiAJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNDYyLDcgKzE0NjAsNyBAQAogCQlkcnZfZGF0YS0+bWFza19zciA9IFNTU1JfVElOVCB8IFNTU1JfUkZTIHwgU1NTUl9URlMgfCBTU1NSX1JPUjsKIAl9CiAKLQlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2X25hbWUoZGV2KSwgZHJ2X2RhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgSVJRICVkXG4iLCBzc3AtPmlycSk7CiAJCWdvdG8gb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCmluZGV4IDdmZWEzY2YuLjM0MTBiMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwpAQCAtMTE2MCw4ICsxMTYwLDggQEAKIAogCS8qIGluaXQgbWVzc2FnZXMgd29ya3F1ZXVlICovCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7Ci0JZHJ2X2RhdGEtPndvcmtxdWV1ZSA9Ci0JICAgIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwppbmRleCBmNWVkOTcyLi5kMjg2NmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3BpLT5jb250cm9sbGVyX3N0YXRlKSB7Ci0JCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChjcywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJaWYgKHN0YXR1cykKIAkJCXJldHVybiBzdGF0dXM7CiAJCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDI2OWE1NWUuLjA0ODBkOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogCiAJSU5JVF9XT1JLKCZkcnZfZGF0YS0+d29yaywgcHVtcF9tZXNzYWdlcyk7CiAJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQkJCWRldl9uYW1lKGRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNTI1LDcgKzE1MjUsOCBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9ub19pcnFyZXM7CiAJfQotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3BpX2ludCwgSVJRRl9ESVNBQkxFRCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwaV9pbnQsIElSUUZfRElTQUJMRUQsCisJCQkgICAgIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIGNhbm5vdCBnZXQgSVJRICglZClcbiIsIHN0YXR1cyk7CiAJCWdvdG8gZXJyX25vX2lycXJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCmluZGV4IGFjMGUzZTQuLjQ0YTJiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwpAQCAtNjM3LDcgKzYzNyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm1wYzgzeHhfc3BpLT5xdWV1ZSk7CiAKIAltcGM4M3h4X3NwaS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCW1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKG1wYzgzeHhfc3BpLT53b3JrcXVldWUgPT0gTlVMTCkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZnJlZV9pcnE7CkBAIC02NDksNyArNjQ5LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIiVzOiBNUEM4M3h4IFNQSSBDb250cm9sbGVyIGRyaXZlciBhdCAweCVwIChpcnEgPSAlZClcbiIsCi0JICAgICAgIGRldi0+ZGV2LmJ1c19pZCwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOworCSAgICAgICBkZXZfbmFtZSgmZGV2LT5kZXYpLCBtcGM4M3h4X3NwaS0+YmFzZSwgbXBjODN4eF9zcGktPmlycSk7CiAKIAlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwppbmRleCAyMjk2ZjM3Li4yOWNiYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKQEAgLTQwNCw3ICs0MDQsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdDsKIAotCWMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwljLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAoIWMtPndvcmtxdWV1ZSkKIAkJZ290byBleGl0X2J1c3k7CiAJYy0+bGFzdF9jaGlwc2VsZWN0ID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9LY29uZmlnIGIvZHJpdmVycy9zc2IvS2NvbmZpZwppbmRleCBiMWI5NDdlLi41NDBhMjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3NiL0tjb25maWcKQEAgLTUzLDExICs1MywxMSBAQAogCiBjb25maWcgU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEUKIAlib29sCi0JZGVwZW5kcyBvbiBTU0IgJiYgKFBDTUNJQSA9IHkgfHwgUENNQ0lBID0gU1NCKSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFNTQiAmJiAoUENNQ0lBID0geSB8fCBQQ01DSUEgPSBTU0IpCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTU0JfUENNQ0lBSE9TVAotCWJvb2wgIlN1cHBvcnQgZm9yIFNTQiBvbiBQQ01DSUEtYnVzIGhvc3QgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiU3VwcG9ydCBmb3IgU1NCIG9uIFBDTUNJQS1idXMgaG9zdCIKIAlkZXBlbmRzIG9uIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFCiAJc2VsZWN0IFNTQl9TUFJPTQogCWhlbHAKQEAgLTEwNywxNCArMTA3LDE0IEBACiAJICBJZiB1bnN1cmUsIHNheSBZCiAKIGNvbmZpZyBTU0JfUENJQ09SRV9IT1NUTU9ERQotCWJvb2wgIkhvc3Rtb2RlIHN1cHBvcnQgZm9yIFNTQiBQQ0kgY29yZSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNTQl9EUklWRVJfUENJQ09SRSAmJiBTU0JfRFJJVkVSX01JUFMgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiSG9zdG1vZGUgc3VwcG9ydCBmb3IgU1NCIFBDSSBjb3JlIgorCWRlcGVuZHMgb24gU1NCX0RSSVZFUl9QQ0lDT1JFICYmIFNTQl9EUklWRVJfTUlQUwogCWhlbHAKIAkgIFBDSWNvcmUgaG9zdG1vZGUgb3BlcmF0aW9uIChleHRlcm5hbCBQQ0kgYnVzKS4KIAogY29uZmlnIFNTQl9EUklWRVJfTUlQUwotCWJvb2wgIlNTQiBCcm9hZGNvbSBNSVBTIGNvcmUgZHJpdmVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU1NCICYmIE1JUFMgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiU1NCIEJyb2FkY29tIE1JUFMgY29yZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBTU0IgJiYgTUlQUwogCXNlbGVjdCBTU0JfU0VSSUFMCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgU29uaWNzIFNpbGljb24gQmFja3BsYW5lIGF0dGFjaGVkCkBAIC0xMjksOCArMTI5LDggQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFNTQl9EUklWRVJfRVhUSUYKLQlib29sICJTU0IgQnJvYWRjb20gRVhUSUYgY29yZSBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTU0JfRFJJVkVSX01JUFMgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiU1NCIEJyb2FkY29tIEVYVElGIGNvcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gU1NCX0RSSVZFUl9NSVBTCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgU29uaWNzIFNpbGljb24gQmFja3BsYW5lIGF0dGFjaGVkCiAJICBCcm9hZGNvbSBFWFRJRiBjb3JlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvTWFrZWZpbGUgYi9kcml2ZXJzL3NzYi9NYWtlZmlsZQppbmRleCA2ZjI1NWU5Li5jZmJiNzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NzYi9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIAogIyBidWlsdC1pbiBkcml2ZXJzCiBzc2IteQkJCQkJKz0gZHJpdmVyX2NoaXBjb21tb24ubworc3NiLXkJCQkJCSs9IGRyaXZlcl9jaGlwY29tbW9uX3BtdS5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9NSVBTKQkJKz0gZHJpdmVyX21pcHNjb3JlLm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX0VYVElGKQkJKz0gZHJpdmVyX2V4dGlmLm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUpCSs9IGRyaXZlcl9wY2ljb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMgYi9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jCmluZGV4IDJkMjdkNmQuLmVmOWM2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMKKysrIGIvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYwpAQCAtMTgsOSArMTgsMTEgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGI0M19wY2lfYnJpZGdlX3RibFtdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMDEpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwNikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzA3KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxMikgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE1KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTgpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxOSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzIwKSB9LApAQCAtMjksNiArMzEsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyOCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI5KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMmIpIH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiNDNfcGNpX2JyaWRnZV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKaW5kZXggNTcxZjRmZC4uOTY4MTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCkBAIC0yNiwxOSArMjYsNiBAQAogfTsKIAogCi1zdGF0aWMgaW5saW5lIHUzMiBjaGlwY29fcmVhZDMyKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCi0JCQkJdTE2IG9mZnNldCkKLXsKLQlyZXR1cm4gc3NiX3JlYWQzMihjYy0+ZGV2LCBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNvX3dyaXRlMzIoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKLQkJCQkgIHUxNiBvZmZzZXQsCi0JCQkJICB1MzIgdmFsdWUpCi17Ci0Jc3NiX3dyaXRlMzIoY2MtPmRldiwgb2Zmc2V0LCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTMyIGNoaXBjb193cml0ZTMyX21hc2tlZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MTYgb2Zmc2V0LAogCQkJCQl1MzIgbWFzaywgdTMyIHZhbHVlKQogewpAQCAtMjQ2LDYgKzIzMyw3IEBACiB7CiAJaWYgKCFjYy0+ZGV2KQogCQlyZXR1cm47IC8qIFdlIGRvbid0IGhhdmUgYSBDaGlwQ29tbW9uICovCisJc3NiX3BtdV9pbml0KGNjKTsKIAljaGlwY29fcG93ZXJjb250cm9sX2luaXQoY2MpOwogCXNzYl9jaGlwY29fc2V0X2Nsb2NrbW9kZShjYywgU1NCX0NMS01PREVfRkFTVCk7CiAJY2FsY19mYXN0X3Bvd2VydXBfZGVsYXkoY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFkZGVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTAsMCArMSw1MDggQEAKKy8qCisgKiBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyAqIEJyb2FkY29tIENoaXBDb21tb24gUG93ZXIgTWFuYWdlbWVudCBVbml0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5LCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICogQ29weXJpZ2h0IDIwMDcsIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiLmg+CisjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9yZWdzLmg+CisjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJzc2JfcHJpdmF0ZS5oIgorCitzdGF0aWMgdTMyIHNzYl9jaGlwY29fcGxsX3JlYWQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG9mZnNldCkKK3sKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTExDVExfQUREUiwgb2Zmc2V0KTsKKwlyZXR1cm4gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTExDVExfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9jaGlwY29fcGxsX3dyaXRlKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCisJCQkJIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTExDVExfQUREUiwgb2Zmc2V0KTsKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTExDVExfREFUQSwgdmFsdWUpOworfQorCitzdHJ1Y3QgcG11MF9wbGx0YWJfZW50cnkgeworCXUxNiBmcmVxOwkvKiBDcnlzdGFsIGZyZXF1ZW5jeSBpbiBrSHouKi8KKwl1OCB4ZjsJCS8qIENyeXN0YWwgZnJlcXVlbmN5IHZhbHVlIGZvciBQTVUgY29udHJvbCAqLworCXU4IHdiX2ludDsKKwl1MzIgd2JfZnJhYzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11MF9wbGx0YWJfZW50cnkgcG11MF9wbGx0YWJbXSA9IHsKKwl7IC5mcmVxID0gMTIwMDAsIC54ZiA9ICAxLCAud2JfaW50ID0gNzMsIC53Yl9mcmFjID0gMzQ5NTI1LCB9LAorCXsgLmZyZXEgPSAxMzAwMCwgLnhmID0gIDIsIC53Yl9pbnQgPSA2NywgLndiX2ZyYWMgPSA3MjU5MzcsIH0sCisJeyAuZnJlcSA9IDE0NDAwLCAueGYgPSAgMywgLndiX2ludCA9IDYxLCAud2JfZnJhYyA9IDExNjUwOCwgfSwKKwl7IC5mcmVxID0gMTUzNjAsIC54ZiA9ICA0LCAud2JfaW50ID0gNTcsIC53Yl9mcmFjID0gMzA1ODM0LCB9LAorCXsgLmZyZXEgPSAxNjIwMCwgLnhmID0gIDUsIC53Yl9pbnQgPSA1NCwgLndiX2ZyYWMgPSAzMzY1NzksIH0sCisJeyAuZnJlcSA9IDE2ODAwLCAueGYgPSAgNiwgLndiX2ludCA9IDUyLCAud2JfZnJhYyA9IDM5OTQ1NywgfSwKKwl7IC5mcmVxID0gMTkyMDAsIC54ZiA9ICA3LCAud2JfaW50ID0gNDUsIC53Yl9mcmFjID0gODczODEzLCB9LAorCXsgLmZyZXEgPSAxOTgwMCwgLnhmID0gIDgsIC53Yl9pbnQgPSA0NCwgLndiX2ZyYWMgPSA0NjYwMzMsIH0sCisJeyAuZnJlcSA9IDIwMDAwLCAueGYgPSAgOSwgLndiX2ludCA9IDQ0LCAud2JfZnJhYyA9IDAsICAgICAgfSwKKwl7IC5mcmVxID0gMjUwMDAsIC54ZiA9IDEwLCAud2JfaW50ID0gNzAsIC53Yl9mcmFjID0gNDE5NDMwLCB9LAorCXsgLmZyZXEgPSAyNjAwMCwgLnhmID0gMTEsIC53Yl9pbnQgPSA2NywgLndiX2ZyYWMgPSA3MjU5MzcsIH0sCisJeyAuZnJlcSA9IDMwMDAwLCAueGYgPSAxMiwgLndiX2ludCA9IDU4LCAud2JfZnJhYyA9IDY5OTA1MCwgfSwKKwl7IC5mcmVxID0gMzg0MDAsIC54ZiA9IDEzLCAud2JfaW50ID0gNDUsIC53Yl9mcmFjID0gODczODEzLCB9LAorCXsgLmZyZXEgPSA0MDAwMCwgLnhmID0gMTQsIC53Yl9pbnQgPSA0NSwgLndiX2ZyYWMgPSAwLCAgICAgIH0sCit9OworI2RlZmluZSBTU0JfUE1VMF9ERUZBVUxUX1hUQUxGUkVRCTIwMDAwCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11MF9wbGx0YWJfZW50cnkgKiBwbXUwX3BsbHRhYl9maW5kX2VudHJ5KHUzMiBjcnlzdGFsZnJlcSkKK3sKKwljb25zdCBzdHJ1Y3QgcG11MF9wbGx0YWJfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXUwX3BsbHRhYik7IGkrKykgeworCQllID0gJnBtdTBfcGxsdGFiW2ldOworCQlpZiAoZS0+ZnJlcSA9PSBjcnlzdGFsZnJlcSkKKwkJCXJldHVybiBlOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBUdW5lIHRoZSBQTEwgdG8gdGhlIGNyeXN0YWwgc3BlZWQuIGNyeXN0YWxmcmVxIGlzIGluIGtIei4gKi8KK3N0YXRpYyB2b2lkIHNzYl9wbXUwX3BsbGluaXRfcjAoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKKwkJCQl1MzIgY3J5c3RhbGZyZXEpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwljb25zdCBzdHJ1Y3QgcG11MF9wbGx0YWJfZW50cnkgKmUgPSBOVUxMOworCXUzMiBwbXVjdGwsIHRtcCwgcGxsY3RsOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg1MzU0KSAmJiAhY3J5c3RhbGZyZXEpIHsKKwkJLyogVGhlIDUzNTQgY3J5c3RhbCBmcmVxIGlzIDI1TUh6ICovCisJCWNyeXN0YWxmcmVxID0gMjUwMDA7CisJfQorCWlmIChjcnlzdGFsZnJlcSkKKwkJZSA9IHBtdTBfcGxsdGFiX2ZpbmRfZW50cnkoY3J5c3RhbGZyZXEpOworCWlmICghZSkKKwkJZSA9IHBtdTBfcGxsdGFiX2ZpbmRfZW50cnkoU1NCX1BNVTBfREVGQVVMVF9YVEFMRlJFUSk7CisJQlVHX09OKCFlKTsKKwljcnlzdGFsZnJlcSA9IGUtPmZyZXE7CisJY2MtPnBtdS5jcnlzdGFsZnJlcSA9IGUtPmZyZXE7CisKKwkvKiBDaGVjayBpZiB0aGUgUExMIGFscmVhZHkgaXMgcHJvZ3JhbW1lZCB0byB0aGlzIGZyZXF1ZW5jeS4gKi8KKwlwbXVjdGwgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwpOworCWlmICgoKHBtdWN0bCAmIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUSkgPj4gU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUKSA9PSBlLT54ZikgeworCQkvKiBXZSdyZSBhbHJlYWR5IHRoZXJlLi4uICovCisJCXJldHVybjsKKwl9CisKKwlzc2JfcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByb2dyYW1taW5nIFBMTCB0byAldS4lMDN1IE1IelxuIiwKKwkJICAgKGNyeXN0YWxmcmVxIC8gMTAwMCksIChjcnlzdGFsZnJlcSAlIDEwMDApKTsKKworCS8qIEZpcnN0IHR1cm4gdGhlIFBMTCBvZmYuICovCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMyODoKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSywKKwkJCSAgICAgIH4oMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVKSk7CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01BWFJFU19NU0ssCisJCQkgICAgICB+KDEgPDwgU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVSkpOworCQlicmVhazsKKwljYXNlIDB4NTM1NDoKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSywKKwkJCSAgICAgIH4oMSA8PCBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX1BVKSk7CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01BWFJFU19NU0ssCisJCQkgICAgICB+KDEgPDwgU1NCX1BNVVJFU181MzU0X0JCX1BMTF9QVSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9CisJZm9yIChpID0gMTUwMDsgaTsgaS0tKSB7CisJCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0xLQ1RMU1QpOworCQlpZiAoISh0bXAgJiBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DTEtDVExTVCk7CisJaWYgKHRtcCAmIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUKQorCQlzc2JfcHJpbnRrKEtFUk5fRU1FUkcgUEZYICJGYWlsZWQgdG8gdHVybiB0aGUgUExMIG9mZiFcbiIpOworCisJLyogU2V0IFBESVYgaW4gUExMIGNvbnRyb2wgMC4gKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMF9QTExDVEwwKTsKKwlpZiAoY3J5c3RhbGZyZXEgPj0gU1NCX1BNVTBfUExMQ1RMMF9QRElWX0ZSRVEpCisJCXBsbGN0bCB8PSBTU0JfUE1VMF9QTExDVEwwX1BESVZfTVNLOworCWVsc2UKKwkJcGxsY3RsICY9IH5TU0JfUE1VMF9QTExDVEwwX1BESVZfTVNLOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMF9QTExDVEwwLCBwbGxjdGwpOworCisJLyogU2V0IFdJTEQgaW4gUExMIGNvbnRyb2wgMS4gKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMF9QTExDVEwxKTsKKwlwbGxjdGwgJj0gflNTQl9QTVUwX1BMTENUTDFfU1RPUE1PRDsKKwlwbGxjdGwgJj0gfihTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TSyB8IFNTQl9QTVUwX1BMTENUTDFfV0lMRF9GTVNLKTsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+d2JfaW50IDw8IFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLX1NISUZUKSAmIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLOworCXBsbGN0bCB8PSAoKHUzMillLT53Yl9mcmFjIDw8IFNTQl9QTVUwX1BMTENUTDFfV0lMRF9GTVNLX1NISUZUKSAmIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9GTVNLOworCWlmIChlLT53Yl9mcmFjID09IDApCisJCXBsbGN0bCB8PSBTU0JfUE1VMF9QTExDVEwxX1NUT1BNT0Q7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUwX1BMTENUTDEsIHBsbGN0bCk7CisKKwkvKiBTZXQgV0lMRCBpbiBQTEwgY29udHJvbCAyLiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUwX1BMTENUTDIpOworCXBsbGN0bCAmPSB+U1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISTsKKwlwbGxjdGwgfD0gKCgodTMyKWUtPndiX2ludCA+PiA0KSA8PCBTU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJX1NISUZUKSAmIFNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSEk7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUwX1BMTENUTDIsIHBsbGN0bCk7CisKKwkvKiBTZXQgdGhlIGNyeXN0YWxmcmVxdWVuY3kgYW5kIHRoZSBkaXZpc29yLiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJcG11Y3RsICY9IH5TU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVjsKKwlwbXVjdGwgfD0gKCgoY3J5c3RhbGZyZXEgKyAxMjcpIC8gMTI4IC0gMSkgPDwgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVZfU0hJRlQpCisJCQkmIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWOworCXBtdWN0bCAmPSB+U1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVROworCXBtdWN0bCB8PSAoKHUzMillLT54ZiA8PCBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVROworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsIHBtdWN0bCk7Cit9CisKK3N0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSB7CisJdTE2IGZyZXE7CS8qIENyeXN0YWwgZnJlcXVlbmN5IGluIGtIei4qLworCXU4IHhmOwkJLyogQ3J5c3RhbCBmcmVxdWVuY3kgdmFsdWUgZm9yIFBNVSBjb250cm9sICovCisJdTggbmRpdl9pbnQ7CisJdTMyIG5kaXZfZnJhYzsKKwl1OCBwMWRpdjsKKwl1OCBwMmRpdjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgcG11MV9wbGx0YWJbXSA9IHsKKwl7IC5mcmVxID0gMTIwMDAsIC54ZiA9ICAxLCAucDFkaXYgPSAzLCAucDJkaXYgPSAyMiwgLm5kaXZfaW50ID0gIDB4OSwgLm5kaXZfZnJhYyA9IDB4RkZGRkVGLCB9LAorCXsgLmZyZXEgPSAxMzAwMCwgLnhmID0gIDIsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICA2LCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMHg0ODM0ODMsIH0sCisJeyAuZnJlcSA9IDE0NDAwLCAueGYgPSAgMywgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTAsIC5uZGl2X2ludCA9ICAweGEsIC5uZGl2X2ZyYWMgPSAweDFDNzFDNywgfSwKKwl7IC5mcmVxID0gMTUzNjAsIC54ZiA9ICA0LCAucDFkaXYgPSAxLCAucDJkaXYgPSAgNSwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDB4NzU1NTU1LCB9LAorCXsgLmZyZXEgPSAxNjIwMCwgLnhmID0gIDUsIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDEwLCAubmRpdl9pbnQgPSAgMHg1LCAubmRpdl9mcmFjID0gMHg2RTlFMDYsIH0sCisJeyAuZnJlcSA9IDE2ODAwLCAueGYgPSAgNiwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTAsIC5uZGl2X2ludCA9ICAweDUsIC5uZGl2X2ZyYWMgPSAweDNDRjNDRiwgfSwKKwl7IC5mcmVxID0gMTkyMDAsIC54ZiA9ICA3LCAucDFkaXYgPSAxLCAucDJkaXYgPSAgOSwgLm5kaXZfaW50ID0gIDB4NSwgLm5kaXZfZnJhYyA9IDB4MTdCNDI1LCB9LAorCXsgLmZyZXEgPSAxOTgwMCwgLnhmID0gIDgsIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDExLCAubmRpdl9pbnQgPSAgMHg0LCAubmRpdl9mcmFjID0gMHhBNTdFQiwgIH0sCisJeyAuZnJlcSA9IDIwMDAwLCAueGYgPSAgOSwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTEsIC5uZGl2X2ludCA9ICAweDQsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMjQwMDAsIC54ZiA9IDEwLCAucDFkaXYgPSAzLCAucDJkaXYgPSAxMSwgLm5kaXZfaW50ID0gIDB4YSwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorCXsgLmZyZXEgPSAyNTAwMCwgLnhmID0gMTEsIC5wMWRpdiA9IDUsIC5wMmRpdiA9IDE2LCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDI2MDAwLCAueGYgPSAxMiwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDIsIC5uZGl2X2ludCA9IDB4MTAsIC5uZGl2X2ZyYWMgPSAweEVDNEVDNCwgfSwKKwl7IC5mcmVxID0gMzAwMDAsIC54ZiA9IDEzLCAucDFkaXYgPSAzLCAucDJkaXYgPSAgOCwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorCXsgLmZyZXEgPSAzODQwMCwgLnhmID0gMTQsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICA1LCAubmRpdl9pbnQgPSAgMHg0LCAubmRpdl9mcmFjID0gMHg5NTU1NTUsIH0sCisJeyAuZnJlcSA9IDQwMDAwLCAueGYgPSAxNSwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDIsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKK307CisKKyNkZWZpbmUgU1NCX1BNVTFfREVGQVVMVF9YVEFMRlJFUQkxNTM2MAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5ICogcG11MV9wbGx0YWJfZmluZF9lbnRyeSh1MzIgY3J5c3RhbGZyZXEpCit7CisJY29uc3Qgc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG11MV9wbGx0YWIpOyBpKyspIHsKKwkJZSA9ICZwbXUxX3BsbHRhYltpXTsKKwkJaWYgKGUtPmZyZXEgPT0gY3J5c3RhbGZyZXEpCisJCQlyZXR1cm4gZTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVHVuZSB0aGUgUExMIHRvIHRoZSBjcnlzdGFsIHNwZWVkLiBjcnlzdGFsZnJlcSBpcyBpbiBrSHouICovCitzdGF0aWMgdm9pZCBzc2JfcG11MV9wbGxpbml0X3IwKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCisJCQkJdTMyIGNyeXN0YWxmcmVxKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJY29uc3Qgc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5ICplID0gTlVMTDsKKwl1MzIgYnVmZmVyX3N0cmVuZ3RoID0gMDsKKwl1MzIgdG1wLCBwbGxjdGwsIHBtdWN0bDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChidXMtPmNoaXBfaWQgPT0gMHg0MzEyKSB7CisJCS8qIFdlIGRvIG5vdCB0b3VjaCB0aGUgQkNNNDMxMiBQTEwgYW5kIGFzc3VtZQorCQkgKiB0aGUgZGVmYXVsdCBjcnlzdGFsIHNldHRpbmdzIHdvcmsgb3V0LW9mLXRoZS1ib3guICovCisJCWNjLT5wbXUuY3J5c3RhbGZyZXEgPSAyMDAwMDsKKwkJcmV0dXJuOworCX0KKworCWlmIChjcnlzdGFsZnJlcSkKKwkJZSA9IHBtdTFfcGxsdGFiX2ZpbmRfZW50cnkoY3J5c3RhbGZyZXEpOworCWlmICghZSkKKwkJZSA9IHBtdTFfcGxsdGFiX2ZpbmRfZW50cnkoU1NCX1BNVTFfREVGQVVMVF9YVEFMRlJFUSk7CisJQlVHX09OKCFlKTsKKwljcnlzdGFsZnJlcSA9IGUtPmZyZXE7CisJY2MtPnBtdS5jcnlzdGFsZnJlcSA9IGUtPmZyZXE7CisKKwkvKiBDaGVjayBpZiB0aGUgUExMIGFscmVhZHkgaXMgcHJvZ3JhbW1lZCB0byB0aGlzIGZyZXF1ZW5jeS4gKi8KKwlwbXVjdGwgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwpOworCWlmICgoKHBtdWN0bCAmIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUSkgPj4gU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUKSA9PSBlLT54ZikgeworCQkvKiBXZSdyZSBhbHJlYWR5IHRoZXJlLi4uICovCisJCXJldHVybjsKKwl9CisKKwlzc2JfcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByb2dyYW1taW5nIFBMTCB0byAldS4lMDN1IE1IelxuIiwKKwkJICAgKGNyeXN0YWxmcmVxIC8gMTAwMCksIChjcnlzdGFsZnJlcSAlIDEwMDApKTsKKworCS8qIEZpcnN0IHR1cm4gdGhlIFBMTCBvZmYuICovCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMyNToKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSywKKwkJCSAgICAgIH4oKDEgPDwgU1NCX1BNVVJFU180MzI1X0JCUExMX1BXUlNXX1BVKSB8CisJCQkJKDEgPDwgU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMKSkpOworCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLLAorCQkJICAgICAgfigoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQkJQTExfUFdSU1dfUFUpIHwKKwkJCQkoMSA8PCBTU0JfUE1VUkVTXzQzMjVfSFRfQVZBSUwpKSk7CisJCS8qIEFkanVzdCB0aGUgQkJQTEwgdG8gMiBvbiBhbGwgY2hhbm5lbHMgbGF0ZXIuICovCisJCWJ1ZmZlcl9zdHJlbmd0aCA9IDB4MjIyMjIyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9CisJZm9yIChpID0gMTUwMDsgaTsgaS0tKSB7CisJCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0xLQ1RMU1QpOworCQlpZiAoISh0bXAgJiBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DTEtDVExTVCk7CisJaWYgKHRtcCAmIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUKQorCQlzc2JfcHJpbnRrKEtFUk5fRU1FUkcgUEZYICJGYWlsZWQgdG8gdHVybiB0aGUgUExMIG9mZiFcbiIpOworCisJLyogU2V0IHAxZGl2IGFuZCBwMmRpdi4gKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMV9QTExDVEwwKTsKKwlwbGxjdGwgJj0gfihTU0JfUE1VMV9QTExDVEwwX1AxRElWIHwgU1NCX1BNVTFfUExMQ1RMMF9QMkRJVik7CisJcGxsY3RsIHw9ICgodTMyKWUtPnAxZGl2IDw8IFNTQl9QTVUxX1BMTENUTDBfUDFESVZfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMF9QMURJVjsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+cDJkaXYgPDwgU1NCX1BNVTFfUExMQ1RMMF9QMkRJVl9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwwX1AyRElWOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMV9QTExDVEwwLCBwbGxjdGwpOworCisJLyogU2V0IG5kaXYgaW50IGFuZCBuZGl2IG1vZGUgKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMV9QTExDVEwyKTsKKwlwbGxjdGwgJj0gfihTU0JfUE1VMV9QTExDVEwyX05ESVZJTlQgfCBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFKTsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+bmRpdl9pbnQgPDwgU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVDsKKwlwbGxjdGwgfD0gKDEgPDwgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERV9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMV9QTExDVEwyLCBwbGxjdGwpOworCisJLyogU2V0IG5kaXYgZnJhYyAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDMpOworCXBsbGN0bCAmPSB+U1NCX1BNVTFfUExMQ1RMM19ORElWRlJBQzsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+bmRpdl9mcmFjIDw8IFNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUNfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMM19ORElWRlJBQzsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTFfUExMQ1RMMywgcGxsY3RsKTsKKworCS8qIENoYW5nZSB0aGUgZHJpdmUgc3RyZW5ndGgsIGlmIHJlcXVpcmVkLiAqLworCWlmIChidWZmZXJfc3RyZW5ndGgpIHsKKwkJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMNSk7CisJCXBsbGN0bCAmPSB+U1NCX1BNVTFfUExMQ1RMNV9DTEtEUlY7CisJCXBsbGN0bCB8PSAoYnVmZmVyX3N0cmVuZ3RoIDw8IFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWOworCQlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTFfUExMQ1RMNSwgcGxsY3RsKTsKKwl9CisKKwkvKiBUdW5lIHRoZSBjcnlzdGFsZnJlcSBhbmQgdGhlIGRpdmlzb3IuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlwbXVjdGwgJj0gfihTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJViB8IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUSk7CisJcG11Y3RsIHw9ICgoKCh1MzIpZS0+ZnJlcSArIDEyNykgLyAxMjggLSAxKSA8PCBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVl9TSElGVCkKKwkJCSYgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVY7CisJcG11Y3RsIHw9ICgodTMyKWUtPnhmIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVE7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwgcG11Y3RsKTsKK30KKworc3RhdGljIHZvaWQgc3NiX3BtdV9wbGxfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJdTMyIGNyeXN0YWxmcmVxID0gMDsgLyogaW4ga0h6LiAwID0ga2VlcCBkZWZhdWx0IGZyZXEuICovCisKKwlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1NTQikgeworCQkvKiBUT0RPOiBUaGUgdXNlciBtYXkgb3ZlcnJpZGUgdGhlIGNyeXN0YWwgZnJlcXVlbmN5LiAqLworCX0KKworCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CisJY2FzZSAweDQzMTI6CisJY2FzZSAweDQzMjU6CisJCXNzYl9wbXUxX3BsbGluaXRfcjAoY2MsIGNyeXN0YWxmcmVxKTsKKwkJYnJlYWs7CisJY2FzZSAweDQzMjg6CisJY2FzZSAweDUzNTQ6CisJCXNzYl9wbXUwX3BsbGluaXRfcjAoY2MsIGNyeXN0YWxmcmVxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSAgICJFUlJPUjogUExMIGluaXQgdW5rbm93biBmb3IgZGV2aWNlICUwNFhcbiIsCisJCQkgICBidXMtPmNoaXBfaWQpOworCX0KK30KKworc3RydWN0IHBtdV9yZXNfdXBkb3duX3RhYl9lbnRyeSB7CisJdTggcmVzb3VyY2U7CS8qIFRoZSByZXNvdXJjZSBudW1iZXIgKi8KKwl1MTYgdXBkb3duOwkvKiBUaGUgdXBkb3duIHZhbHVlICovCit9OworCitlbnVtIHBtdV9yZXNfZGVwZW5kX3RhYl90YXNrIHsKKwlQTVVfUkVTX0RFUF9TRVQgPSAxLAorCVBNVV9SRVNfREVQX0FERCwKKwlQTVVfUkVTX0RFUF9SRU1PVkUsCit9OworCitzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5IHsKKwl1OCByZXNvdXJjZTsJLyogVGhlIHJlc291cmNlIG51bWJlciAqLworCXU4IHRhc2s7CS8qIFNFVCB8IEFERCB8IFJFTU9WRSAqLworCXUzMiBkZXBlbmQ7CS8qIFRoZSBkZXBlbmQgbWFzayAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcmVzX3VwZG93bl90YWJfZW50cnkgcG11X3Jlc191cGRvd25fdGFiXzQzMjhhMFtdID0geworCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0VYVF9TV0lUQ0hFUl9QV00sCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX1BXTSwJCS51cGRvd24gPSAweDFGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfQlVSU1QsCS51cGRvd24gPSAweDAxMEYsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfRVhUX1NXSVRDSEVSX0JVUlNULAkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0lMUF9SRVFVRVNULAkJLnVwZG93biA9IDB4MDIwMiwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SQURJT19TV0lUQ0hFUl9QV00sCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fU1dJVENIRVJfQlVSU1QsCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUk9NX1NXSVRDSCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUEFfUkVGX0xETywJCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fTERPLAkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9BRkVfTERPLAkJCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUExMX0xETywJCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JHX0ZJTFRCWVAsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1RYX0ZJTFRCWVAsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JYX0ZJTFRCWVAsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1hUQUxfUFUsCQkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9YVEFMX0VOLAkJCS51cGRvd24gPSAweEEwMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX0ZJTFRCWVAsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JGX1BMTF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfUFUsCQkudXBkb3duID0gMHgwNzAxLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcmVzX2RlcGVuZF90YWJfZW50cnkgcG11X3Jlc19kZXBlbmRfdGFiXzQzMjhhMFtdID0geworCXsKKwkJLyogQWRqdXN0IElMUCBSZXF1ZXN0IHRvIGF2b2lkIGZvcmNpbmcgRVhUL0JCIGludG8gYnVyc3QgbW9kZS4gKi8KKwkJLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0lMUF9SRVFVRVNULAorCQkudGFzayA9IFBNVV9SRVNfREVQX1NFVCwKKwkJLmRlcGVuZCA9ICgoMSA8PCBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTSkgfAorCQkJICAgKDEgPDwgU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX1BXTSkpLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfdXBkb3duX3RhYl9lbnRyeSBwbXVfcmVzX3VwZG93bl90YWJfNDMyNWEwW10gPSB7CisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjVfWFRBTF9QVSwJCQkudXBkb3duID0gMHgxNTAxLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcmVzX2RlcGVuZF90YWJfZW50cnkgcG11X3Jlc19kZXBlbmRfdGFiXzQzMjVhMFtdID0geworCXsKKwkJLyogQWRqdXN0IEhULUF2YWlsYWJsZSBkZXBlbmRlbmNpZXMuICovCisJCS5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTCwKKwkJLnRhc2sgPSBQTVVfUkVTX0RFUF9BREQsCisJCS5kZXBlbmQgPSAoKDEgPDwgU1NCX1BNVVJFU180MzI1X1JYX1BXUlNXX1BVKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfVFhfUFdSU1dfUFUpIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9MT0dFTl9QV1JTV19QVSkgfAorCQkJICAgKDEgPDwgU1NCX1BNVVJFU180MzI1X0FGRV9QV1JTV19QVSkpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBzc2JfcG11X3Jlc291cmNlc19pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwl1MzIgbWluX21zayA9IDAsIG1heF9tc2sgPSAwOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBwbXVfcmVzX3VwZG93bl90YWJfZW50cnkgKnVwZG93bl90YWIgPSBOVUxMOworCXVuc2lnbmVkIGludCB1cGRvd25fdGFiX3NpemU7CisJY29uc3Qgc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSAqZGVwZW5kX3RhYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGRlcGVuZF90YWJfc2l6ZTsKKworCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CisJY2FzZSAweDQzMTI6CisJCS8qIFdlIGtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3M6CisJCSAqIG1pbl9tc2sgPSAweENCQgorCQkgKiBtYXhfbXNrID0gMHg3RkZGRgorCQkgKi8KKwkJYnJlYWs7CisJY2FzZSAweDQzMjU6CisJCS8qIFBvd2VyIE9UUCBkb3duIGxhdGVyLiAqLworCQltaW5fbXNrID0gKDEgPDwgU1NCX1BNVVJFU180MzI1X0NCVUNLX0JVUlNUKSB8CisJCQkgICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9MTkxETzJfUFUpOworCQlpZiAoY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DSElQU1RBVCkgJgorCQkgICAgU1NCX0NISVBDT19DSFNUXzQzMjVfUE1VVE9QXzJCKQorCQkJbWluX21zayB8PSAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQ0xET19DQlVDS19CVVJTVCk7CisJCS8qIFRoZSBQTEwgbWF5IHR1cm4gb24sIGlmIGl0IGRlY2lkZXMgc28uICovCisJCW1heF9tc2sgPSAweEZGRkZGOworCQl1cGRvd25fdGFiID0gcG11X3Jlc191cGRvd25fdGFiXzQzMjVhMDsKKwkJdXBkb3duX3RhYl9zaXplID0gQVJSQVlfU0laRShwbXVfcmVzX3VwZG93bl90YWJfNDMyNWEwKTsKKwkJZGVwZW5kX3RhYiA9IHBtdV9yZXNfZGVwZW5kX3RhYl80MzI1YTA7CisJCWRlcGVuZF90YWJfc2l6ZSA9IEFSUkFZX1NJWkUocG11X3Jlc19kZXBlbmRfdGFiXzQzMjVhMCk7CisJCWJyZWFrOworCWNhc2UgMHg0MzI4OgorCQltaW5fbXNrID0gKDEgPDwgU1NCX1BNVVJFU180MzI4X0VYVF9TV0lUQ0hFUl9QV00pIHwKKwkJCSAgKDEgPDwgU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX1BXTSkgfAorCQkJICAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfWFRBTF9FTik7CisJCS8qIFRoZSBQTEwgbWF5IHR1cm4gb24sIGlmIGl0IGRlY2lkZXMgc28uICovCisJCW1heF9tc2sgPSAweEZGRkZGOworCQl1cGRvd25fdGFiID0gcG11X3Jlc191cGRvd25fdGFiXzQzMjhhMDsKKwkJdXBkb3duX3RhYl9zaXplID0gQVJSQVlfU0laRShwbXVfcmVzX3VwZG93bl90YWJfNDMyOGEwKTsKKwkJZGVwZW5kX3RhYiA9IHBtdV9yZXNfZGVwZW5kX3RhYl80MzI4YTA7CisJCWRlcGVuZF90YWJfc2l6ZSA9IEFSUkFZX1NJWkUocG11X3Jlc19kZXBlbmRfdGFiXzQzMjhhMCk7CisJCWJyZWFrOworCWNhc2UgMHg1MzU0OgorCQkvKiBUaGUgUExMIG1heSB0dXJuIG9uLCBpZiBpdCBkZWNpZGVzIHNvLiAqLworCQltYXhfbXNrID0gMHhGRkZGRjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSAgICJFUlJPUjogUE1VIHJlc291cmNlIGNvbmZpZyB1bmtub3duIGZvciBkZXZpY2UgJTA0WFxuIiwKKwkJCSAgIGJ1cy0+Y2hpcF9pZCk7CisJfQorCisJaWYgKHVwZG93bl90YWIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVwZG93bl90YWJfc2l6ZTsgaSsrKSB7CisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX1RBQlNFTCwKKwkJCQkgICAgICAgdXBkb3duX3RhYltpXS5yZXNvdXJjZSk7CisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX1VQRE5UTSwKKwkJCQkgICAgICAgdXBkb3duX3RhYltpXS51cGRvd24pOworCQl9CisJfQorCWlmIChkZXBlbmRfdGFiKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXBlbmRfdGFiX3NpemU7IGkrKykgeworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19UQUJTRUwsCisJCQkJICAgICAgIGRlcGVuZF90YWJbaV0ucmVzb3VyY2UpOworCQkJc3dpdGNoIChkZXBlbmRfdGFiW2ldLnRhc2spIHsKKwkJCWNhc2UgUE1VX1JFU19ERVBfU0VUOgorCQkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfREVQTVNLLAorCQkJCQkgICAgICAgZGVwZW5kX3RhYltpXS5kZXBlbmQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQTVVfUkVTX0RFUF9BREQ6CisJCQkJY2hpcGNvX3NldDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfREVQTVNLLAorCQkJCQkgICAgIGRlcGVuZF90YWJbaV0uZGVwZW5kKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUE1VX1JFU19ERVBfUkVNT1ZFOgorCQkJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0ssCisJCQkJCSAgICAgIH4oZGVwZW5kX3RhYltpXS5kZXBlbmQpKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJU1NCX1dBUk5fT04oMSk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZXQgdGhlIHJlc291cmNlIG1hc2tzLiAqLworCWlmIChtaW5fbXNrKQorCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSywgbWluX21zayk7CisJaWYgKG1heF9tc2spCisJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLLCBtYXhfbXNrKTsKK30KKwordm9pZCBzc2JfcG11X2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCXUzMiBwbXVjYXA7CisKKwlpZiAoIShjYy0+Y2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKSkKKwkJcmV0dXJuOworCisJcG11Y2FwID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ0FQKTsKKwljYy0+cG11LnJldiA9IChwbXVjYXAgJiBTU0JfQ0hJUENPX1BNVV9DQVBfUkVWSVNJT04pOworCisJc3NiX2RwcmludGsoS0VSTl9ERUJVRyBQRlggIkZvdW5kIHJldiAldSBQTVUgKGNhcGFiaWxpdGllcyAweCUwOFgpXG4iLAorCQkgICAgY2MtPnBtdS5yZXYsIHBtdWNhcCk7CisKKwlpZiAoY2MtPnBtdS5yZXYgPj0gMSkgeworCQlpZiAoKGJ1cy0+Y2hpcF9pZCA9PSAweDQzMjUpICYmIChidXMtPmNoaXBfcmV2IDwgMikpIHsKKwkJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwKKwkJCQkgICAgICB+U1NCX0NISVBDT19QTVVfQ1RMX05PSUxQT05XKTsKKwkJfSBlbHNlIHsKKwkJCWNoaXBjb19zZXQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLAorCQkJCSAgICAgU1NCX0NISVBDT19QTVVfQ1RMX05PSUxQT05XKTsKKwkJfQorCX0KKwlzc2JfcG11X3BsbF9pbml0KGNjKTsKKwlzc2JfcG11X3Jlc291cmNlc19pbml0KGNjKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjaS5jIGIvZHJpdmVycy9zc2IvcGNpLmMKaW5kZXggZDVjZGUwNS4uNDBlYTQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNpLmMKKysrIGIvZHJpdmVycy9zc2IvcGNpLmMKQEAgLTQ2Nyw2ICs0NjcsNTEgQEAKIAkvKiBUT0RPIC0gZ2V0IHJlbWFpbmluZyByZXYgNCBzdHVmZiBuZWVkZWQgKi8KIH0KIAorc3RhdGljIHZvaWQgc3Byb21fZXh0cmFjdF9yOChzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQsIGNvbnN0IHUxNiAqaW4pCit7CisJaW50IGk7CisJdTE2IHY7CisKKwkvKiBleHRyYWN0IHRoZSBNQUMgYWRkcmVzcyAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdiA9IGluW1NQT0ZGKFNTQl9TUFJPTTFfSUwwTUFDKSArIGldOworCQkqKCgoX19iZTE2ICopb3V0LT5pbDBtYWMpICsgaSkgPSBjcHVfdG9fYmUxNih2KTsKKwl9CisJU1BFWChjb3VudHJ5X2NvZGUsIFNTQl9TUFJPTThfQ0NPREUsIDB4RkZGRiwgMCk7CisJU1BFWChib2FyZGZsYWdzX2xvLCBTU0JfU1BST004X0JGTExPLCAweEZGRkYsIDApOworCVNQRVgoYm9hcmRmbGFnc19oaSwgU1NCX1NQUk9NOF9CRkxISSwgMHhGRkZGLCAwKTsKKwlTUEVYKGFudF9hdmFpbGFibGVfYSwgU1NCX1NQUk9NOF9BTlRBVkFJTCwgU1NCX1NQUk9NOF9BTlRBVkFJTF9BLAorCSAgICAgU1NCX1NQUk9NOF9BTlRBVkFJTF9BX1NISUZUKTsKKwlTUEVYKGFudF9hdmFpbGFibGVfYmcsIFNTQl9TUFJPTThfQU5UQVZBSUwsIFNTQl9TUFJPTThfQU5UQVZBSUxfQkcsCisJICAgICBTU0JfU1BST004X0FOVEFWQUlMX0JHX1NISUZUKTsKKwlTUEVYKG1heHB3cl9iZywgU1NCX1NQUk9NOF9NQVhQX0JHLCBTU0JfU1BST004X01BWFBfQkdfTUFTSywgMCk7CisJU1BFWChpdHNzaV9iZywgU1NCX1NQUk9NOF9NQVhQX0JHLCBTU0JfU1BST004X0lUU1NJX0JHLAorCSAgICAgU1NCX1NQUk9NOF9JVFNTSV9CR19TSElGVCk7CisJU1BFWChtYXhwd3JfYSwgU1NCX1NQUk9NOF9NQVhQX0EsIFNTQl9TUFJPTThfTUFYUF9BX01BU0ssIDApOworCVNQRVgoaXRzc2lfYSwgU1NCX1NQUk9NOF9NQVhQX0EsIFNTQl9TUFJPTThfSVRTU0lfQSwKKwkgICAgIFNTQl9TUFJPTThfSVRTU0lfQV9TSElGVCk7CisJU1BFWChncGlvMCwgU1NCX1NQUk9NOF9HUElPQSwgU1NCX1NQUk9NOF9HUElPQV9QMCwgMCk7CisJU1BFWChncGlvMSwgU1NCX1NQUk9NOF9HUElPQSwgU1NCX1NQUk9NOF9HUElPQV9QMSwKKwkgICAgIFNTQl9TUFJPTThfR1BJT0FfUDFfU0hJRlQpOworCVNQRVgoZ3BpbzIsIFNTQl9TUFJPTThfR1BJT0IsIFNTQl9TUFJPTThfR1BJT0JfUDIsIDApOworCVNQRVgoZ3BpbzMsIFNTQl9TUFJPTThfR1BJT0IsIFNTQl9TUFJPTThfR1BJT0JfUDMsCisJICAgICBTU0JfU1BST004X0dQSU9CX1AzX1NISUZUKTsKKworCS8qIEV4dHJhY3QgdGhlIGFudGVubmEgZ2FpbiB2YWx1ZXMuICovCisJU1BFWChhbnRlbm5hX2dhaW4uZ2h6MjQuYTAsIFNTQl9TUFJPTThfQUdBSU4wMSwKKwkgICAgIFNTQl9TUFJPTThfQUdBSU4wLCBTU0JfU1BST004X0FHQUlOMF9TSElGVCk7CisJU1BFWChhbnRlbm5hX2dhaW4uZ2h6MjQuYTEsIFNTQl9TUFJPTThfQUdBSU4wMSwKKwkgICAgIFNTQl9TUFJPTThfQUdBSU4xLCBTU0JfU1BST004X0FHQUlOMV9TSElGVCk7CisJU1BFWChhbnRlbm5hX2dhaW4uZ2h6MjQuYTIsIFNTQl9TUFJPTThfQUdBSU4yMywKKwkgICAgIFNTQl9TUFJPTThfQUdBSU4yLCBTU0JfU1BST004X0FHQUlOMl9TSElGVCk7CisJU1BFWChhbnRlbm5hX2dhaW4uZ2h6MjQuYTMsIFNTQl9TUFJPTThfQUdBSU4yMywKKwkgICAgIFNTQl9TUFJPTThfQUdBSU4zLCBTU0JfU1BST004X0FHQUlOM19TSElGVCk7CisJbWVtY3B5KCZvdXQtPmFudGVubmFfZ2Fpbi5naHo1LCAmb3V0LT5hbnRlbm5hX2dhaW4uZ2h6MjQsCisJICAgICAgIHNpemVvZihvdXQtPmFudGVubmFfZ2Fpbi5naHo1KSk7CisKKwkvKiBUT0RPIC0gZ2V0IHJlbWFpbmluZyByZXYgOCBzdHVmZiBuZWVkZWQgKi8KK30KKwogc3RhdGljIGludCBzcHJvbV9leHRyYWN0KHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCwKIAkJCSBjb25zdCB1MTYgKmluLCB1MTYgc2l6ZSkKIHsKQEAgLTQ4NywxNSArNTMyLDI1IEBACiAJCW91dC0+cmV2aXNpb24gPSA0OwogCQlzcHJvbV9leHRyYWN0X3I0NShvdXQsIGluKTsKIAl9IGVsc2UgewotCQlpZiAob3V0LT5yZXZpc2lvbiA9PSAwKQotCQkJZ290byB1bnN1cHBvcnRlZDsKLQkJaWYgKG91dC0+cmV2aXNpb24gPj0gMSAmJiBvdXQtPnJldmlzaW9uIDw9IDMpIHsKKwkJc3dpdGNoIChvdXQtPnJldmlzaW9uKSB7CisJCWNhc2UgMToKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlzcHJvbV9leHRyYWN0X3IxMjMob3V0LCBpbik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCQlzcHJvbV9leHRyYWN0X3I0NShvdXQsIGluKTsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQlzcHJvbV9leHRyYWN0X3I4KG91dCwgaW4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVuc3VwcG9ydGVkIFNQUk9NIgorCQkJCSAgICIgIHJldmlzaW9uICVkIGRldGVjdGVkLiBXaWxsIGV4dHJhY3QiCisJCQkJICAgIiB2MVxuIiwgb3V0LT5yZXZpc2lvbik7CiAJCQlzcHJvbV9leHRyYWN0X3IxMjMob3V0LCBpbik7CiAJCX0KLQkJaWYgKG91dC0+cmV2aXNpb24gPT0gNCB8fCBvdXQtPnJldmlzaW9uID09IDUpCi0JCQlzcHJvbV9leHRyYWN0X3I0NShvdXQsIGluKTsKLQkJaWYgKG91dC0+cmV2aXNpb24gPiA1KQotCQkJZ290byB1bnN1cHBvcnRlZDsKIAl9CiAKIAlpZiAob3V0LT5ib2FyZGZsYWdzX2xvID09IDB4RkZGRikKQEAgLTUwNCwxNiArNTU5LDEyIEBACiAJCW91dC0+Ym9hcmRmbGFnc19oaSA9IDA7ICAvKiBwZXIgc3BlY3MgKi8KIAogCXJldHVybiAwOwotdW5zdXBwb3J0ZWQ6Ci0Jc3NiX3ByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbnN1cHBvcnRlZCBTUFJPTSByZXZpc2lvbiAlZCAiCi0JCSAgICJkZXRlY3RlZC4gV2lsbCBleHRyYWN0IHYxXG4iLCBvdXQtPnJldmlzaW9uKTsKLQlzcHJvbV9leHRyYWN0X3IxMjMob3V0LCBpbik7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3NiX3BjaV9zcHJvbV9nZXQoc3RydWN0IHNzYl9idXMgKmJ1cywKIAkJCSAgICAgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pCiB7CisJY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqZmFsbGJhY2s7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJdTE2ICpidWY7CiAKQEAgLTUzMywxMiArNTg0LDIzIEBACiAJCWJ1cy0+c3Byb21fc2l6ZSA9IFNTQl9TUFJPTVNJWkVfV09SRFNfUjQ7CiAJCXNwcm9tX2RvX3JlYWQoYnVzLCBidWYpOwogCQllcnIgPSBzcHJvbV9jaGVja19jcmMoYnVmLCBidXMtPnNwcm9tX3NpemUpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyKSB7CisJCQkvKiBBbGwgQ1JDIGF0dGVtcHRzIGZhaWxlZC4KKwkJCSAqIE1heWJlIHRoZXJlIGlzIG5vIFNQUk9NIG9uIHRoZSBkZXZpY2U/CisJCQkgKiBJZiB3ZSBoYXZlIGEgZmFsbGJhY2ssIHVzZSB0aGF0LiAqLworCQkJZmFsbGJhY2sgPSBzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKCk7CisJCQlpZiAoZmFsbGJhY2spIHsKKwkJCQltZW1jcHkoc3Byb20sIGZhbGxiYWNrLCBzaXplb2YoKnNwcm9tKSk7CisJCQkJZXJyID0gMDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQogCQkJc3NiX3ByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXQVJOSU5HOiBJbnZhbGlkIgogCQkJCSAgICIgU1BST00gQ1JDIChjb3JydXB0IFNQUk9NKVxuIik7CisJCX0KIAl9CiAJZXJyID0gc3Byb21fZXh0cmFjdChidXMsIHNwcm9tLCBidWYsIGJ1cy0+c3Byb21fc2l6ZSk7CiAKK291dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCmluZGV4IDM2NjhlZGIuLjg5NDMwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMKKysrIGIvZHJpdmVycy9zc2Ivc3Byb20uYwpAQCAtMTQsNiArMTQsOSBAQAogI2luY2x1ZGUgInNzYl9wcml2YXRlLmgiCiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrX3Nwcm9tOworCisKIHN0YXRpYyBpbnQgc3Byb20yaGV4KGNvbnN0IHUxNiAqc3Byb20sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAJCSAgICAgc2l6ZV90IHNwcm9tX3NpemVfd29yZHMpCiB7CkBAIC0xMzEsMyArMTM0LDM2IEBACiAJCXJldHVybiByZXM7CiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQorCisvKioKKyAqIHNzYl9hcmNoX3NldF9mYWxsYmFja19zcHJvbSAtIFNldCBhIGZhbGxiYWNrIFNQUk9NIGZvciB1c2UgaWYgbm8gU1BST00gaXMgZm91bmQuCisgKgorICogQHNwcm9tOiBUaGUgU1BST00gZGF0YSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIuCisgKgorICogV2l0aCB0aGlzIGZ1bmN0aW9uIHRoZSBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb24gbWF5IHJlZ2lzdGVyIGEgZmFsbGJhY2sKKyAqIFNQUk9NIGRhdGEgc3RydWN0dXJlLiBUaGUgZmFsbGJhY2sgaXMgb25seSB1c2VkIGZvciBQQ0kgYmFzZWQgU1NCIGRldmljZXMsCisgKiB3aGVyZSBubyB2YWxpZCBTUFJPTSBjYW4gYmUgZm91bmQgaW4gdGhlIHNoYWRvdyByZWdpc3RlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHdlaXJkIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGEgaGFsZi1hc3NlZCBTU0IgZGV2aWNlCisgKiBoYXJkd2lyZWQgdG8gdGhlaXIgUENJIGJ1cy4KKyAqCisgKiBOb3RlIHRoYXQgaXQgZG9lcyBvbmx5IHdvcmsgd2l0aCBQQ0kgYXR0YWNoZWQgU1NCIGRldmljZXMuIFBDTUNJQSBkZXZpY2VzIGN1cnJlbnRseQorICogZG9uJ3QgdXNlIHRoaXMgZmFsbGJhY2suCisgKiBBcmNoaXRlY3R1cmVzIG11c3QgcHJvdmlkZSB0aGUgU1BST00gZm9yIG5hdGl2ZSBTU0IgZGV2aWNlcyBhbnl3YXksCisgKiBzbyB0aGUgZmFsbGJhY2sgYWxzbyBpc24ndCB1c2VkIGZvciBuYXRpdmUgZGV2aWNlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYXJjaGl0ZWN0dXJlIGNvZGUsIG9ubHkuIFNvIGl0IGlzIG5vdCBleHBvcnRlZC4KKyAqLworaW50IHNzYl9hcmNoX3NldF9mYWxsYmFja19zcHJvbShjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzcHJvbSkKK3sKKwlpZiAoZmFsbGJhY2tfc3Byb20pCisJCXJldHVybiAtRUVYSVNUOworCWZhbGxiYWNrX3Nwcm9tID0gc3Byb207CisKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3NiX2dldF9mYWxsYmFja19zcHJvbSh2b2lkKQoreworCXJldHVybiBmYWxsYmFja19zcHJvbTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmggYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCmluZGV4IGViYzMyZDguLjU3ZmE0ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJICAgICBpbnQgKCpzcHJvbV9jaGVja19jcmMpKGNvbnN0IHUxNiAqc3Byb20sIHNpemVfdCBzaXplKSwKIAkJCSAgICAgaW50ICgqc3Byb21fd3JpdGUpKHN0cnVjdCBzc2JfYnVzICpidXMsIGNvbnN0IHUxNiAqc3Byb20pKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHZvaWQpOwogCiAKIC8qIGNvcmUuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwppbmRleCBhN2RlNDAxLi5jZDE5YmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwpAQCAtMjQ4LDEwICsyNDgsMTEgQEAKIAlzcGluX2xvY2tfaW5pdCgmZ29zbmQtPmxvY2spOwogCWdvc25kLT5od19wdHIgPSBnb3NuZC0+d19pZHggPSBnb3NuZC0+YXZhaWwgPSAwOwogCWdvc25kLT5jYXB0dXJpbmcgPSAwOwotCWdvc25kLT5jYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoZ29zbmQtPmNhcmQgPT0gTlVMTCkgeworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZnb3NuZC0+Y2FyZCk7CisJaWYgKHJldCA8IDApIHsKIAkJa2ZyZWUoZ29zbmQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gc25kX2RldmljZV9uZXcoZ29zbmQtPmNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgZ28sCiAJCQkmZ283MDA3X3NuZF9kZXZpY2Vfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGMvdGMuYyBiL2RyaXZlcnMvdGMvdGMuYwppbmRleCBmNzdmNjJhLi5lNWJkNDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RjL3RjLmMKKysrIGIvZHJpdmVycy90Yy90Yy5jCkBAIC04Niw3ICs4Niw3IEBACiAJCQkgICAgICAgc2xvdCk7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJc3ByaW50Zih0ZGV2LT5kZXYuYnVzX2lkLCAidGMleCIsIHNsb3QpOworCQlkZXZfc2V0X25hbWUoJnRkZXYtPmRldiwgInRjJXgiLCBzbG90KTsKIAkJdGRldi0+YnVzID0gdGJ1czsKIAkJdGRldi0+ZGV2LnBhcmVudCA9ICZ0YnVzLT5kZXY7CiAJCXRkZXYtPmRldi5idXMgPSAmdGNfYnVzX3R5cGU7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJdGRldi0+dmVuZG9yWzhdID0gMDsKIAkJdGRldi0+bmFtZVs4XSA9IDA7CiAKLQkJcHJfaW5mbygiJXM6ICVzICVzICVzXG4iLCB0ZGV2LT5kZXYuYnVzX2lkLCB0ZGV2LT52ZW5kb3IsCisJCXByX2luZm8oIiVzOiAlcyAlcyAlc1xuIiwgZGV2X25hbWUoJnRkZXYtPmRldiksIHRkZXYtPnZlbmRvciwKIAkJCXRkZXYtPm5hbWUsIHRkZXYtPmZpcm13YXJlKTsKIAogCQlkZXZzaXplID0gcmVhZGIobW9kdWxlICsgb2Zmc2V0ICsgVENfU0xPVF9TSVpFKTsKQEAgLTExOCw3ICsxMTgsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHByb3ZpZGUgc2xvdCBzcGFjZSAiCiAJCQkgICAgICAgIiglZE1pQiByZXF1aXJlZCwgdXAgdG8gJWRNaUIgc3VwcG9ydGVkKVxuIiwKLQkJCSAgICAgICB0ZGV2LT5kZXYuYnVzX2lkLCBkZXZzaXplID4+IDIwLAorCQkJICAgICAgIGRldl9uYW1lKCZ0ZGV2LT5kZXYpLCBkZXZzaXplID4+IDIwLAogCQkJICAgICAgIG1heChzbG90c2l6ZSwgZXh0c2xvdHNpemUpID4+IDIwKTsKIAkJCWtmcmVlKHRkZXYpOwogCQkJZ290byBvdXRfZXJyOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCXJldHVybiAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJnRjX2J1cy5kZXZpY2VzKTsKLQlzdHJjcHkodGNfYnVzLmRldi5idXNfaWQsICJ0YyIpOworCWRldl9zZXRfbmFtZSgmdGNfYnVzLmRldiwgInRjIik7CiAJZGV2aWNlX3JlZ2lzdGVyKCZ0Y19idXMuZGV2KTsKIAogCWlmICh0Y19idXMuaW5mby5zbG90X3NpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL0tjb25maWcgYi9kcml2ZXJzL3Vpby9LY29uZmlnCmluZGV4IDA0Yjk1NGMuLjdmODY1MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL0tjb25maWcKKysrIGIvZHJpdmVycy91aW8vS2NvbmZpZwpAQCAtNTgsNiArNTgsMjQgQEAKIAogCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX3NteC4KIAorY29uZmlnIFVJT19BRUMKKwl0cmlzdGF0ZSAiQUVDIHZpZGVvIHRpbWVzdGFtcCBkZXZpY2UiCisJZGVwZW5kcyBvbiBQQ0kKKwlkZWZhdWx0IG4KKwloZWxwCisKKwkgIFVJTyBkcml2ZXIgZm9yIHRoZSBBZHJpZW5uZSBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiBQQ0kgdGltZQorCSAgY29kZSBkZXZpY2UuCisKKwkgIFRoaXMgZGV2aWNlIGRpZmZlcnMgZnJvbSBvdGhlciBVSU8gZGV2aWNlcyBzaW5jZSBpdCB1c2VzIEkvTworCSAgcG9ydHMgaW5zdGVhZCBvZiBtZW1vcnkgbWFwcGVkIEkvTy4gSW4gb3JkZXIgdG8gbWFrZSBpdAorCSAgcG9zc2libGUgZm9yIFVJTyB0byB3b3JrIHdpdGggdGhpcyBkZXZpY2UgYSB1dGlsaXR5LCB1aW9wb3J0LAorCSAgY2FuIGJlIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgdGhlIHBvcnRzOgorCisJICAgIGdpdCBjbG9uZSBnaXQ6Ly9pZnVwLm9yZy9waGlsaXBzL3Vpb3BvcnQuZ2l0CisKKwkgIElmIHlvdSBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHVpb19hZWMuCisKIGNvbmZpZyBVSU9fU0VSQ09TMwogCXRyaXN0YXRlICJBdXRvbWF0YSBTZXJjb3MgSUlJIFBDSSBjYXJkIGRyaXZlciIKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL01ha2VmaWxlIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKaW5kZXggZTY5NTU4MS4uNWMyNTg2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKQEAgLTMsNCArMyw1IEBACiBvYmotJChDT05GSUdfVUlPX1BEUlYpCSs9IHVpb19wZHJ2Lm8KIG9iai0kKENPTkZJR19VSU9fUERSVl9HRU5JUlEpCSs9IHVpb19wZHJ2X2dlbmlycS5vCiBvYmotJChDT05GSUdfVUlPX1NNWCkJKz0gdWlvX3NteC5vCitvYmotJChDT05GSUdfVUlPX0FFQykJKz0gdWlvX2FlYy5vCiBvYmotJChDT05GSUdfVUlPX1NFUkNPUzMpCSs9IHVpb19zZXJjb3MzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpby5jIGIvZHJpdmVycy91aW8vdWlvLmMKaW5kZXggNGNhODVhMS4uMDNlZmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvLmMKKysrIGIvZHJpdmVycy91aW8vdWlvLmMKQEAgLTYxLDYgKzYxLDE0IEBACiB9OwogI2RlZmluZSB0b19tYXAobWFwKSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgdWlvX21hcCwga29iaikKIAorc3RhdGljIHNzaXplX3QgbWFwX25hbWVfc2hvdyhzdHJ1Y3QgdWlvX21lbSAqbWVtLCBjaGFyICpidWYpCit7CisJaWYgKHVubGlrZWx5KCFtZW0tPm5hbWUpKQorCQltZW0tPm5hbWUgPSAiIjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtZW0tPm5hbWUpOworfQorCiBzdGF0aWMgc3NpemVfdCBtYXBfYWRkcl9zaG93KHN0cnVjdCB1aW9fbWVtICptZW0sIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgbWVtLT5hZGRyKTsKQEAgLTgyLDYgKzkwLDggQEAKIAlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCB1aW9fbWVtICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWFwX3N5c2ZzX2VudHJ5IG5hbWVfYXR0cmlidXRlID0KKwlfX0FUVFIobmFtZSwgU19JUlVHTywgbWFwX25hbWVfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IG1hcF9zeXNmc19lbnRyeSBhZGRyX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGFkZHIsIFNfSVJVR08sIG1hcF9hZGRyX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBtYXBfc3lzZnNfZW50cnkgc2l6ZV9hdHRyaWJ1dGUgPQpAQCAtOTAsNiArMTAwLDcgQEAKIAlfX0FUVFIob2Zmc2V0LCBTX0lSVUdPLCBtYXBfb2Zmc2V0X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbXSA9IHsKKwkmbmFtZV9hdHRyaWJ1dGUuYXR0ciwKIAkmYWRkcl9hdHRyaWJ1dGUuYXR0ciwKIAkmc2l6ZV9hdHRyaWJ1dGUuYXR0ciwKIAkmb2Zmc2V0X2F0dHJpYnV0ZS5hdHRyLApAQCAtMTMzLDYgKzE0NCwxNCBAQAogfTsKICNkZWZpbmUgdG9fcG9ydGlvKHBvcnRpbykgY29udGFpbmVyX29mKHBvcnRpbywgc3RydWN0IHVpb19wb3J0aW8sIGtvYmopCiAKK3N0YXRpYyBzc2l6ZV90IHBvcnRpb19uYW1lX3Nob3coc3RydWN0IHVpb19wb3J0ICpwb3J0LCBjaGFyICpidWYpCit7CisJaWYgKHVubGlrZWx5KCFwb3J0LT5uYW1lKSkKKwkJcG9ydC0+bmFtZSA9ICIiOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHBvcnQtPm5hbWUpOworfQorCiBzdGF0aWMgc3NpemVfdCBwb3J0aW9fc3RhcnRfc2hvdyhzdHJ1Y3QgdWlvX3BvcnQgKnBvcnQsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgcG9ydC0+c3RhcnQpOwpAQCAtMTU5LDYgKzE3OCw4IEBACiAJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgdWlvX3BvcnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAorc3RhdGljIHN0cnVjdCBwb3J0aW9fc3lzZnNfZW50cnkgcG9ydGlvX25hbWVfYXR0cmlidXRlID0KKwlfX0FUVFIobmFtZSwgU19JUlVHTywgcG9ydGlvX25hbWVfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IHBvcnRpb19zeXNmc19lbnRyeSBwb3J0aW9fc3RhcnRfYXR0cmlidXRlID0KIAlfX0FUVFIoc3RhcnQsIFNfSVJVR08sIHBvcnRpb19zdGFydF9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgcG9ydGlvX3N5c2ZzX2VudHJ5IHBvcnRpb19zaXplX2F0dHJpYnV0ZSA9CkBAIC0xNjcsNiArMTg4LDcgQEAKIAlfX0FUVFIocG9ydHR5cGUsIFNfSVJVR08sIHBvcnRpb19wb3J0dHlwZV9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRpb19hdHRyc1tdID0geworCSZwb3J0aW9fbmFtZV9hdHRyaWJ1dGUuYXR0ciwKIAkmcG9ydGlvX3N0YXJ0X2F0dHJpYnV0ZS5hdHRyLAogCSZwb3J0aW9fc2l6ZV9hdHRyaWJ1dGUuYXR0ciwKIAkmcG9ydGlvX3BvcnR0eXBlX2F0dHJpYnV0ZS5hdHRyLApAQCAtNjg2LDcgKzcwOCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmVxdWVzdGVkX3BhZ2VzID0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKLQlhY3R1YWxfcGFnZXMgPSAoaWRldi0+aW5mby0+bWVtW21pXS5zaXplICsgUEFHRV9TSVpFIC0xKSA+PiBQQUdFX1NISUZUOworCWFjdHVhbF9wYWdlcyA9ICgoaWRldi0+aW5mby0+bWVtW21pXS5hZGRyICYgflBBR0VfTUFTSykKKwkJCSsgaWRldi0+aW5mby0+bWVtW21pXS5zaXplICsgUEFHRV9TSVpFIC0xKSA+PiBQQUdFX1NISUZUOwogCWlmIChyZXF1ZXN0ZWRfcGFnZXMgPiBhY3R1YWxfcGFnZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fYWVjLmMgYi9kcml2ZXJzL3Vpby91aW9fYWVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4MzBlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19hZWMuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIHVpb19hZWMuYyAtLSBzaW1wbGUgZHJpdmVyIGZvciBBZHJpZW5uZSBFbGVjdHJvbmljcyBDb3JwIHRpbWUgY29kZSBQQ0kgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEJyYW5kb24gUGhpbGlwcyA8YnJhbmRvbkBpZnVwLm9yZz4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiAgIFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FFQyAweGFlY2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRUNfVklUQ0xUQyAweDYyNTAKKworI2RlZmluZSBJTlRfRU5BQkxFX0FERFIJCTB4RkMKKyNkZWZpbmUgSU5UX0VOQUJMRQkJMHgxMAorI2RlZmluZSBJTlRfRElTQUJMRQkJMHgwCisKKyNkZWZpbmUgSU5UX01BU0tfQUREUgkJMHgyRQorI2RlZmluZSBJTlRfTUFTS19BTEwJCTB4M0YKKworI2RlZmluZSBJTlRBX0RSVlJfQUREUgkJMHhGRQorI2RlZmluZSBJTlRBX0VOQUJMRURfRkxBRwkweDA4CisjZGVmaW5lIElOVEFfRkxBRwkJMHgwMQorCisjZGVmaW5lIE1BSUxCT1gJCQkweDBGCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BRUMsIFBDSV9ERVZJQ0VfSURfQUVDX1ZJVENMVEMpLCB9LAorCXsgMCwgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpZHMpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgYWVjdGNfaXJxKGludCBpcnEsIHN0cnVjdCB1aW9faW5mbyAqZGV2X2luZm8pCit7CisJdm9pZCBfX2lvbWVtICppbnRfZmxhZyA9IGRldl9pbmZvLT5wcml2ICsgSU5UQV9EUlZSX0FERFI7CisJdW5zaWduZWQgY2hhciBzdGF0dXMgPSBpb3JlYWQ4KGludF9mbGFnKTsKKworCisJaWYgKChzdGF0dXMgJiBJTlRBX0VOQUJMRURfRkxBRykgJiYgKHN0YXR1cyAmIElOVEFfRkxBRykpIHsKKwkJLyogYXBwbGljYXRpb24gd3JpdGVzIDB4MDAgdG8gMHgyRiB0byBnZXQgbmV4dCBpbnRlcnJ1cHQgKi8KKwkJc3RhdHVzID0gaW9yZWFkOChkZXZfaW5mby0+cHJpdiArIE1BSUxCT1gpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgdm9pZCBwcmludF9ib2FyZF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdWlvX2luZm8gKmkpCit7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlBDSS1UQyBib2FyZCB2ZW5kb3I6ICV4JXggbnVtYmVyOiAleCV4IgorCQkiIHJldmlzaW9uOiAlYyVjXG4iLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAxKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMCksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDMpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAyKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwNiksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDcpKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm87CisJaW50IHJldDsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWlvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImFlY3RjIikpCisJCWdvdG8gb3V0X2Rpc2FibGU7CisKKwlpbmZvLT5uYW1lID0gImFlY3RjIjsKKwlpbmZvLT5wb3J0WzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWlmICghaW5mby0+cG9ydFswXS5zdGFydCkKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlpbmZvLT5wcml2ID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghaW5mby0+cHJpdikKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlpbmZvLT5wb3J0WzBdLnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWluZm8tPnBvcnRbMF0ucG9ydHR5cGUgPSBVSU9fUE9SVF9HUElPOworCisJaW5mby0+dmVyc2lvbiA9ICIwLjAuMSI7CisJaW5mby0+aXJxID0gcGRldi0+aXJxOworCWluZm8tPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCWluZm8tPmhhbmRsZXIgPSBhZWN0Y19pcnE7CisKKwlwcmludF9ib2FyZF9kYXRhKHBkZXYsIGluZm8pOworCXJldCA9IHVpb19yZWdpc3Rlcl9kZXZpY2UoJnBkZXYtPmRldiwgaW5mbyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5tYXA7CisKKwlpb3dyaXRlMzIoSU5UX0VOQUJMRSwgaW5mby0+cHJpdiArIElOVF9FTkFCTEVfQUREUik7CisJaW93cml0ZTgoSU5UX01BU0tfQUxMLCBpbmZvLT5wcml2ICsgSU5UX01BU0tfQUREUik7CisJaWYgKCEoaW9yZWFkOChpbmZvLT5wcml2ICsgSU5UQV9EUlZSX0FERFIpCisJCQkmIElOVEFfRU5BQkxFRF9GTEFHKSkKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWVjdGM6IGludGVycnVwdHMgbm90IGVuYWJsZWRcbiIpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOworCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlwY2lfaW91bm1hcChwZGV2LCBpbmZvLT5wcml2KTsKK291dF9yZWxlYXNlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitvdXRfZnJlZToKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCB1aW9faW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGU4KElOVF9ESVNBQkxFLCBpbmZvLT5wcml2ICsgSU5UX01BU0tfQUREUik7CisJaW93cml0ZTMyKElOVF9ESVNBQkxFLCBpbmZvLT5wcml2ICsgSU5UX0VOQUJMRV9BRERSKTsKKwkvKiByZWFkIG1haWxib3ggdG8gZW5zdXJlIGJvYXJkIGRyb3BzIGlycSAqLworCWlvcmVhZDgoaW5mby0+cHJpdiArIE1BSUxCT1gpOworCisJdWlvX3VucmVnaXN0ZXJfZGV2aWNlKGluZm8pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGluZm8tPnByaXYpOworCisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2lfZHJpdmVyID0geworCS5uYW1lID0gImFlY3RjIiwKKwkuaWRfdGFibGUgPSBpZHMsCisJLnByb2JlID0gcHJvYmUsCisJLnJlbW92ZSA9IHJlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFlY3RjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZWN0Y19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChhZWN0Y19pbml0KTsKK21vZHVsZV9leGl0KGFlY3RjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggODNiYWJiMC4uYzZjODE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC00Nyw2ICs0Nyw3IEBACiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzcyMAogCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3MjEKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzYzCisJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc4NgogCSMgbW9yZToKIAlkZWZhdWx0IFBDSQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IGIyY2ViNGEuLjg5Mjk5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfVVNCX1UxMzJfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX0hXQV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX0lTUDE3NjBfSENEKQkrPSBob3N0LwogCiBvYmotJChDT05GSUdfVVNCX0M2N1gwMF9IQ0QpCSs9IGM2N3gwMC8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggM2YzZWUxMy4uZDI3NDdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC04ODAsMTYgKzg4MCwxOSBAQAogCQlpZiAocmMgPD0gMCkKIAkJCWJyZWFrOwogCi0JCWlmICh1c2JscC0+ZmxhZ3MgJiBMUF9BQk9SVCkgewotCQkJaWYgKHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyg1MDAwKSkgPT0gMCkgeworCQlpZiAoc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDE1MDApKSA9PSAwKSB7CisJCQlpZiAodXNibHAtPmZsYWdzICYgTFBfQUJPUlQpIHsKIAkJCQllcnIgPSB1c2JscF9jaGVja19zdGF0dXModXNibHAsIGVycik7CiAJCQkJaWYgKGVyciA9PSAxKSB7CS8qIFBhcGVyIG91dCAqLwogCQkJCQlyYyA9IC1FTk9TUEM7CiAJCQkJCWJyZWFrOwogCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogUHJvZCB0aGUgcHJpbnRlciwgR2VudG9vIzI1MTIzNy4gKi8KKwkJCQltdXRleF9sb2NrKCZ1c2JscC0+bXV0KTsKKwkJCQl1c2JscF9yZWFkX3N0YXR1cyh1c2JscCwgdXNibHAtPnN0YXR1c2J1Zik7CisJCQkJbXV0ZXhfdW5sb2NrKCZ1c2JscC0+bXV0KTsKIAkJCX0KLQkJfSBlbHNlIHsKLQkJCXNjaGVkdWxlKCk7CiAJCX0KIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKaW5kZXggNmVjMzgxNy4uNzNjMTA4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCX0KIAogCS8qIHRoaXMgaXNuJ3QgY2hlY2tpbmcgZm9yIGlsbGVnYWwgdmFsdWVzICovCi0Jc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZGVzYykpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CiAJCXR5cGUgPSAiQ3RybCI7CiAJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgCS8qIHVmcmFtZXMgcGVyIE5BSyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IDY1ODVmNTIuLmRmM2M1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAjZGVmaW5lCU1BWF9VU0JGU19CVUZGRVJfU0laRQkxNjM4NAogCi1zdGF0aWMgaW5saW5lIGludCBjb25uZWN0ZWQoc3RydWN0IGRldl9zdGF0ZSAqcHMpCitzdGF0aWMgaW50IGNvbm5lY3RlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKIAlyZXR1cm4gKCFsaXN0X2VtcHR5KCZwcy0+bGlzdCkgJiYKIAkJCXBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAlrZnJlZShhcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3luY19uZXdwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCitzdGF0aWMgdm9pZCBhc3luY19uZXdwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCiB7CiAJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSBhcy0+cHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3luY19yZW1vdmVwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCitzdGF0aWMgdm9pZCBhc3luY19yZW1vdmVwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCiB7CiAJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSBhcy0+cHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFzeW5jICphc3luY19nZXRjb21wbGV0ZWQoc3RydWN0IGRldl9zdGF0ZSAqcHMpCitzdGF0aWMgc3RydWN0IGFzeW5jICphc3luY19nZXRjb21wbGV0ZWQoc3RydWN0IGRldl9zdGF0ZSAqcHMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYXN5bmMgKmFzID0gTlVMTDsKQEAgLTI4Myw3ICsyODMsNyBAQAogCXJldHVybiBhczsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldHBlbmRpbmcoc3RydWN0IGRldl9zdGF0ZSAqcHMsCitzdGF0aWMgc3RydWN0IGFzeW5jICphc3luY19nZXRwZW5kaW5nKHN0cnVjdCBkZXZfc3RhdGUgKnBzLAogCQkJCQkgICAgIHZvaWQgX191c2VyICp1c2VydXJiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAogc3RhdGljIHZvaWQgc25vb3BfdXJiKHN0cnVjdCB1cmIgKnVyYiwgdm9pZCBfX3VzZXIgKnVzZXJ1cmIpCiB7Ci0JaW50IGo7CisJdW5zaWduZWQgajsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKIAlpZiAoIXVzYmZzX3Nub29wKQpAQCAtMzExLDkgKzMxMSw5IEBACiAJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJkaXJlY3Rpb249JXNcbiIsCiAJCQl1c2JfdXJiX2Rpcl9pbih1cmIpID8gIklOIiA6ICJPVVQiKTsKIAlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVzZXJ1cmI9JXBcbiIsIHVzZXJ1cmIpOwotCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0lZFxuIiwKKwlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9JXVcbiIsCiAJCSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiYWN0dWFsX2xlbmd0aD0lZFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImFjdHVhbF9sZW5ndGg9JXVcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJkYXRhOiAiKTsKIAlmb3IgKGogPSAwOyBqIDwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOyArK2opCiAJCXByaW50aygiJTAyeCAiLCBkYXRhW2pdKTsKQEAgLTM3Niw3ICszNzYsNyBAQAogCWRlc3Ryb3lfYXN5bmMocHMsICZoaXRsaXN0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfYWxsX2FzeW5jKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIHZvaWQgZGVzdHJveV9hbGxfYXN5bmMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCiB7CiAJZGVzdHJveV9hc3luYyhwcywgJnBzLT5hc3luY19wZW5kaW5nKTsKIH0KQEAgLTUyNSw3ICs1MjUsOCBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTCisJaWYgKHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQKKwkgJiYgcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0FERFJFU1MKIAkgJiYgcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCWlmIChVU0JfVFlQRV9WRU5ET1IgPT0gKFVTQl9UWVBFX01BU0sgJiByZXF1ZXN0dHlwZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggZTE3MTBmMi4uNDBkZWUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtNjYsNyArNjYsNyBAQAogCXN0cnVjdCBlcF9kZXZpY2UgKmVwID0gdG9fZXBfZGV2aWNlKGRldik7CiAJY2hhciAqdHlwZSA9ICJ1bmtub3duIjsKIAotCXN3aXRjaCAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShlcC0+ZGVzYykpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CiAJCXR5cGUgPSAiQ29udHJvbCI7CiAJCWJyZWFrOwpAQCAtOTQsNyArOTQsNyBAQAogCiAJaW4gPSAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKTsKIAotCXN3aXRjaCAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShlcC0+ZGVzYykpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CiAJCWlmIChlcC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KIAkJCWludGVydmFsID0gZXAtPmRlc2MtPmJJbnRlcnZhbDsKQEAgLTEzMSwxMCArMTMxLDkgQEAKIAlzdHJ1Y3QgZXBfZGV2aWNlICplcCA9IHRvX2VwX2RldmljZShkZXYpOwogCWNoYXIgKmRpcmVjdGlvbjsKIAotCWlmICgoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbChlcC0+ZGVzYykpCiAJCWRpcmVjdGlvbiA9ICJib3RoIjsKLQllbHNlIGlmIChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJZWxzZSBpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcC0+ZGVzYykpCiAJCWRpcmVjdGlvbiA9ICJpbiI7CiAJZWxzZQogCQlkaXJlY3Rpb24gPSAib3V0IjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDNjNzExZGI1Li44MWZhODUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTI3OSw5ICsyNzksOSBAQAogICogaGVscGVyIHJvdXRpbmUgZm9yIHJldHVybmluZyBzdHJpbmcgZGVzY3JpcHRvcnMgaW4gVVRGLTE2TEUKICAqIGlucHV0IGNhbiBhY3R1YWxseSBiZSBJU08tODg1OS0xOyBBU0NJSSBpcyBpdHMgNy1iaXQgc3Vic2V0CiAgKi8KLXN0YXRpYyBpbnQgYXNjaWkydXRmIChjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQorc3RhdGljIHVuc2lnbmVkIGFzY2lpMnV0ZihjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQogewotCWludCByZXR2YWw7CisJdW5zaWduZWQgcmV0dmFsOwogCiAJZm9yIChyZXR2YWwgPSAwOyAqcyAmJiB1dGZtYXggPiAxOyB1dGZtYXggLT0gMiwgcmV0dmFsICs9IDIpIHsKIAkJKnV0ZisrID0gKnMrKzsKQEAgLTMwNCwxOSArMzA0LDE1IEBACiAgKiBQcm9kdWNlcyBlaXRoZXIgYSBtYW51ZmFjdHVyZXIsIHByb2R1Y3Qgb3Igc2VyaWFsIG51bWJlciBzdHJpbmcgZm9yIHRoZQogICogdmlydHVhbCByb290IGh1YiBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbnQgcmhfc3RyaW5nICgKLQlpbnQJCWlkLAotCXN0cnVjdCB1c2JfaGNkCSpoY2QsCi0JdTgJCSpkYXRhLAotCWludAkJbGVuCi0pIHsKK3N0YXRpYyB1bnNpZ25lZCByaF9zdHJpbmcoaW50IGlkLCBzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1OCAqZGF0YSwgdW5zaWduZWQgbGVuKQorewogCWNoYXIgYnVmIFsxMDBdOwogCiAJLy8gbGFuZ3VhZ2UgaWRzCiAJaWYgKGlkID09IDApIHsKIAkJYnVmWzBdID0gNDsgICAgYnVmWzFdID0gMzsJLyogNCBieXRlcyBzdHJpbmcgZGF0YSAqLwogCQlidWZbMl0gPSAweDA5OyBidWZbM10gPSAweDA0OwkvKiBNU0ZULXNwZWFrIGZvciAiZW4tdXMiICovCi0JCWxlbiA9IG1pbiAobGVuLCA0KTsKKwkJbGVuID0gbWluX3QodW5zaWduZWQsIGxlbiwgNCk7CiAJCW1lbWNweSAoZGF0YSwgYnVmLCBsZW4pOwogCQlyZXR1cm4gbGVuOwogCkBAIC0zMzIsMTAgKzMyOCw3IEBACiAJfSBlbHNlIGlmIChpZCA9PSAzKSB7CiAJCXNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICIlcyAlcyAlcyIsIGluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLAogCQkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsIGhjZC0+ZHJpdmVyLT5kZXNjcmlwdGlvbik7Ci0KLQkvLyB1bnN1cHBvcnRlZCBJRHMgLS0+ICJwcm90b2NvbCBzdGFsbCIKLQl9IGVsc2UKLQkJcmV0dXJuIC1FUElQRTsKKwl9CiAKIAlzd2l0Y2ggKGxlbikgewkJLyogQWxsIGNhc2VzIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CkBAIC0zNjAsOSArMzUzLDggQEAKIAl1OAkJdGJ1ZiBbc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKV0KIAkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpOwogCWNvbnN0IHU4CSpidWZwID0gdGJ1ZjsKLQlpbnQJCWxlbiA9IDA7CisJdW5zaWduZWQJbGVuID0gMDsKIAlpbnQJCXN0YXR1czsKLQlpbnQJCW47CiAJdTgJCXBhdGNoX3dha2V1cCA9IDA7CiAJdTgJCXBhdGNoX3Byb3RvY29sID0gMDsKIApAQCAtNDU2LDEwICs0NDgsMTEgQEAKIAkJCQlwYXRjaF93YWtldXAgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0RUX1NUUklORyA8PCA4OgotCQkJbiA9IHJoX3N0cmluZyAod1ZhbHVlICYgMHhmZiwgaGNkLCB1YnVmLCB3TGVuZ3RoKTsKLQkJCWlmIChuIDwgMCkKKwkJCWlmICgod1ZhbHVlICYgMHhmZikgPCA0KQorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IHJoX3N0cmluZyh3VmFsdWUgJiAweGZmLAorCQkJCQkJaGNkLCB1YnVmLCB3TGVuZ3RoKTsKKwkJCWVsc2UgLyogdW5zdXBwb3J0ZWQgSURzIC0tPiAicHJvdG9jb2wgc3RhbGwiICovCiAJCQkJZ290byBlcnJvcjsKLQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG47CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CkBAIC02MjksNyArNjIyLDcgQEAKIHsKIAlpbnQJCXJldHZhbDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwotCWludAkJbGVuID0gMSArICh1cmItPmRldi0+bWF4Y2hpbGQgLyA4KTsKKwl1bnNpZ25lZAlsZW4gPSAxICsgKHVyYi0+ZGV2LT5tYXhjaGlsZCAvIDgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogCWlmIChoY2QtPnN0YXR1c191cmIgfHwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgbGVuKSB7CkBAIC05MDEsNyArODk0LDcgQEAKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAotCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJdXNiX2Rldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOwogCWlmIChyZXR2YWwgIT0gc2l6ZW9mIHVzYl9kZXYtPmRlc2NyaXB0b3IpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBjZDUwZDg2Li5iZTg2YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTM5Miw3ICszOTIsNyBAQAogewogCXN0cnVjdCB1c2JfaHViICpodWIgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCWludCBpOworCXVuc2lnbmVkIGk7CiAJdW5zaWduZWQgbG9uZyBiaXRzOwogCiAJc3dpdGNoIChzdGF0dXMpIHsKQEAgLTEzMDUsNiArMTMwNSw3IEBACiAJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXRfZGV2aWNlX3N0YXRlKTsKIAogLyoKICAqIFdVU0IgZGV2aWNlcyBhcmUgc2ltcGxlOiB0aGV5IGhhdmUgbm8gaHVicyBiZWhpbmQsIHNvIHRoZSBtYXBwaW5nCkBAIC0yNDcxLDIwICsyNDcyLDIwIEBACiAJICovCiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgkvKiBmaXhlZCBhdCA1MTIgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMik7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNTEyKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIGZpeGVkIGF0IDY0ICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgkJLyogOCwgMTYsIDMyLCBvciA2NCAqLwogCQkvKiB0byBkZXRlcm1pbmUgdGhlIGVwMCBtYXhwYWNrZXQgc2l6ZSwgdHJ5IHRvIHJlYWQKIAkJICogdGhlIGRldmljZSBkZXNjcmlwdG9yIHRvIGdldCBiTWF4UGFja2V0U2l6ZTAgYW5kCiAJCSAqIHRoZW4gY29ycmVjdCBvdXIgaW5pdGlhbCBndWVzcy4KIAkJICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9MT1c6CQkvKiBmaXhlZCBhdCA4ICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig4KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBmYWlsOwpAQCAtMzM5MiwxMCArMzM5MywxMCBAQAogCQl1ZGV2LT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsJLyogZm9yIGRpc2Nvbm5lY3QoKSBjYWxscyAqLwogCQlnb3RvIHJlX2VudW1lcmF0ZTsKICAgCX0KLSAgCisKKwkvKiBSZXN0b3JlIHRoZSBkZXZpY2UncyBwcmV2aW91cyBjb25maWd1cmF0aW9uICovCiAJaWYgKCF1ZGV2LT5hY3Rjb25maWcpCiAJCWdvdG8gZG9uZTsKLQogCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLCAwLAogCQkJdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIDAsCkBAIC0zNDA4LDE2ICszNDA5LDI1IEBACiAgIAl9CiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOwogCisJLyogUHV0IGludGVyZmFjZXMgYmFjayBpbnRvIHRoZSBzYW1lIGFsdHNldHRpbmdzIGFzIGJlZm9yZS4KKwkgKiBEb24ndCBib3RoZXIgdG8gc2VuZCB0aGUgU2V0LUludGVyZmFjZSByZXF1ZXN0IGZvciBpbnRlcmZhY2VzCisJICogdGhhdCB3ZXJlIGFscmVhZHkgaW4gYWx0c2V0dGluZyAwOyBiZXNpZGVzIGJlaW5nIHVubmVjZXNzYXJ5LAorCSAqIG1hbnkgZGV2aWNlcyBjYW4ndCBoYW5kbGUgaXQuICBJbnN0ZWFkIGp1c3QgcmVzZXQgdGhlIGhvc3Qtc2lkZQorCSAqIGVuZHBvaW50IHN0YXRlLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOwogCi0JCS8qIHNldF9pbnRlcmZhY2UgcmVzZXRzIGhvc3Qgc2lkZSB0b2dnbGUgZXZlbgotCQkgKiBmb3IgYWx0c2V0dGluZyB6ZXJvLiAgdGhlIGludGVyZmFjZSBtYXkgaGF2ZSBubyBkcml2ZXIuCi0JCSAqLwogCQlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwotCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAotCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAoZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcgPT0gMCkgeworCQkJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKHVkZXYsIGludGYsIHRydWUpOworCQkJdXNiX2VuYWJsZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgdHJ1ZSk7CisJCQlyZXQgPSAwOworCQl9IGVsc2UgeworCQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgZGVzYy0+YkludGVyZmFjZU51bWJlciwKKwkJCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQl9CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzdG9yZSBpbnRlcmZhY2UgJWQgIgogCQkJCSJhbHRzZXR0aW5nICVkIChlcnJvcj0lZClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDQ5ZTdmNTYuLjMwYTA2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC01OSw3ICs1OSw3IEBACiAJCXJldHZhbCA9IChjdHguc3RhdHVzID09IC1FTk9FTlQgPyAtRVRJTUVET1VUIDogY3R4LnN0YXR1cyk7CiAKIAkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKLQkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZFxuIiwKKwkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0ldS8ldVxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sCiAJCQl1c2JfZW5kcG9pbnRfbnVtKCZ1cmItPmVwLT5kZXNjKSwKIAkJCXVzYl91cmJfZGlyX2luKHVyYikgPyAiaW4iIDogIm91dCIsCkBAIC04MDQsMTggKzgwNCwxNiBAQAogCQkJZGV2X2VycigmZGV2LT5kZXYsCiAJCQkJInN0cmluZyBkZXNjcmlwdG9yIDAgcmVhZCBlcnJvcjogJWRcbiIsCiAJCQkJZXJyKTsKLQkJCWdvdG8gZXJyb3V0OwogCQl9IGVsc2UgaWYgKGVyciA8IDQpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAic3RyaW5nIGRlc2NyaXB0b3IgMCB0b28gc2hvcnRcbiIpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3V0OwogCQl9IGVsc2UgewotCQkJZGV2LT5oYXZlX2xhbmdpZCA9IDE7CiAJCQlkZXYtPnN0cmluZ19sYW5naWQgPSB0YnVmWzJdIHwgKHRidWZbM10gPDwgOCk7CiAJCQkvKiBhbHdheXMgdXNlIHRoZSBmaXJzdCBsYW5naWQgbGlzdGVkICovCiAJCQlkZXZfZGJnKCZkZXYtPmRldiwgImRlZmF1bHQgbGFuZ3VhZ2UgMHglMDR4XG4iLAogCQkJCWRldi0+c3RyaW5nX2xhbmdpZCk7CiAJCX0KKworCQlkZXYtPmhhdmVfbGFuZ2lkID0gMTsKIAl9CiAKIAllcnIgPSB1c2Jfc3RyaW5nX3N1YihkZXYsIGRldi0+c3RyaW5nX2xhbmdpZCwgaW5kZXgsIHRidWYpOwpAQCAtMTcxOSw3ICsxNzE3LDggQEAKIAl9CiAJa2ZyZWUobmV3X2ludGVyZmFjZXMpOwogCi0JaWYgKGNwLT5zdHJpbmcgPT0gTlVMTCkKKwlpZiAoY3AtPnN0cmluZyA9PSBOVUxMICYmCisJCQkhKGRldi0+cXVpcmtzICYgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MpKQogCQljcC0+c3RyaW5nID0gdXNiX2NhY2hlX3N0cmluZyhkZXYsIGNwLT5kZXNjLmlDb25maWd1cmF0aW9uKTsKIAogCS8qIE5vdyB0aGF0IGFsbCB0aGUgaW50ZXJmYWNlcyBhcmUgc2V0IHVwLCByZWdpc3RlciB0aGVtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwppbmRleCBjMDcwYjM0Li5hYjkzOTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKQEAgLTU0LDYgKzU0LDEwIEBACiAJeyBVU0JfREVWSUNFKDB4MDYzOCwgMHgwYTEzKSwgLmRyaXZlcl9pbmZvID0KIAkgIFVTQl9RVUlSS19TVFJJTkdfRkVUQ0hfMjU1IH0sCiAKKwkvKiBTYWl0ZWsgQ3lib3JnIEdvbGQgSm95c3RpY2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNmEzLCAweDAwMDYpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIE0tU3lzdGVtcyBGbGFzaCBEaXNrIFBpb25lZXJzICovCiAJeyBVU0JfREVWSUNFKDB4MDhlYywgMHgxMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNGNjMjQ1Ni4uYzY2Nzg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KICNpbmNsdWRlICJ1c2IuaCIKIAogLyogQWN0aXZlIGNvbmZpZ3VyYXRpb24gZmllbGRzICovCkBAIC04MTMsNyArODE0LDggQEAKIAlpZiAoaW50Zi0+c3lzZnNfZmlsZXNfY3JlYXRlZCB8fCBpbnRmLT51bnJlZ2lzdGVyaW5nKQogCQlyZXR1cm4gMDsKIAotCWlmIChhbHQtPnN0cmluZyA9PSBOVUxMKQorCWlmIChhbHQtPnN0cmluZyA9PSBOVUxMICYmCisJCQkhKHVkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTKSkKIAkJYWx0LT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIGFsdC0+ZGVzYy5pSW50ZXJmYWNlKTsKIAlpZiAoYWx0LT5zdHJpbmcpCiAJCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IDU4YmM1ZTMuLjMzNzYwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJaWYgKCF1cmIgfHwgdXJiLT5oY3ByaXYgfHwgIXVyYi0+Y29tcGxldGUpCiAJCXJldHVybiAtRUlOVkFMOwogCWRldiA9IHVyYi0+ZGV2OwotCWlmICgoIWRldikgfHwgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfREVGQVVMVCkpCisJaWYgKCghZGV2KSB8fCAoZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEZvciBub3csIGdldCB0aGUgZW5kcG9pbnQgZnJvbSB0aGUgcGlwZS4gIEV2ZW50dWFsbHkgZHJpdmVycwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJfQogCiAJLyogdGhlIEkvTyBidWZmZXIgbXVzdCBiZSBtYXBwZWQvdW5tYXBwZWQsIGV4Y2VwdCB3aGVuIGxlbmd0aD0wICovCi0JaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IDApCisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IElOVF9NQVgpCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBlNTVmZWY1Li43NzBiM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjU0LDYgKzI1NCw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyN1gKIAlib29sZWFuICJQWEEgMjd4IgogCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgUFhBMjd4CisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKIAloZWxwCiAJICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwppbmRleCBhYmY4MTkyLi44MjZmM2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQlkbWFfZGVzYy0+c3RhdHVzID0gQU1EX0FEREJJVFMoZG1hX2Rlc2MtPnN0YXR1cywKIAkJCQkJCVVEQ19ETUFfU1RQX1NUU19CU19IT1NUX0JVU1ksCiAJCQkJCQlVRENfRE1BX1NUUF9TVFNfQlMpOwotCQlkbWFfZGVzYy0+YnVmcHRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihETUFfRE9OVF9VU0UpOworCQlkbWFfZGVzYy0+YnVmcHRyID0gY3B1X3RvX2xlMzIoRE1BX0RPTlRfVVNFKTsKIAkJcmVxLT50ZF9kYXRhID0gZG1hX2Rlc2M7CiAJCXJlcS0+dGRfZGF0YV9sYXN0ID0gTlVMTDsKIAkJcmVxLT5jaGFpbl9sZW4gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwppbmRleCA2NWIwM2UzLi5jMjJmYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0gMCwKIAkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKLQkud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KSwKKwkud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCksCiAJLyogRklYTUU6IEkgaGF2ZSBubyBpZGVhIHdoYXQgdG8gcHV0IGhlcmUgKi8KIAkuYkludGVydmFsID0gMSwKIH07CkBAIC0xMjA3LDIxICsxMjA3LDIxIEBACiAvKiBBdm9pZCBvdmVybHkgbG9uZyBleHByZXNzaW9ucyAqLwogc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVfaXNfZGV2X3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpCisJaWYgKGNycS0+d1ZhbHVlID09IGNwdV90b19sZTE2KFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVfaXNfZGV2X3Rlc3RfbW9kZShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcnEpCiB7Ci0JaWYgKGNycS0+d1ZhbHVlID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9URVNUX01PREUpKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfREVWSUNFX1RFU1RfTU9ERSkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVfaXNfZXBfaGFsdChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcnEpCiB7Ci0JaWYgKGNycS0+d1ZhbHVlID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0VORFBPSU5UX0hBTFQpKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfRU5EUE9JTlRfSEFMVCkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEyMzksNyArMTIzOSw3IEBACiAJCQlzdGF0dXMgPSBjcHVfdG9fbGUxNih1ZGMtPmRldnN0YXR1cyk7CiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUKIAkJCQk9PSAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKSB7Ci0JCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApOworCQkJc3RhdHVzID0gY3B1X3RvX2xlMTYoMCk7CiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUKIAkJCQk9PSAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkpIHsKIAkJCXN0cnVjdCB1c2JhX2VwICp0YXJnZXQ7CkBAIC0xMjUwLDEyICsxMjUwLDEyIEBACiAKIAkJCXN0YXR1cyA9IDA7CiAJCQlpZiAoaXNfc3RhbGxlZCh1ZGMsIHRhcmdldCkpCi0JCQkJc3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CisJCQkJc3RhdHVzIHw9IGNwdV90b19sZTE2KDEpOwogCQl9IGVsc2UKIAkJCWdvdG8gZGVsZWdhdGU7CiAKIAkJLyogV3JpdGUgZGlyZWN0bHkgdG8gdGhlIEZJRk8uIE5vIHF1ZXVlaW5nIGlzIGRvbmUuICovCi0JCWlmIChjcnEtPndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihzaXplb2Yoc3RhdHVzKSkpCisJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0YXR1cykpKQogCQkJZ290byBzdGFsbDsKIAkJZXAtPnN0YXRlID0gREFUQV9TVEFHRV9JTjsKIAkJX19yYXdfd3JpdGV3KHN0YXR1cywgZXAtPmZpZm8pOwpAQCAtMTI3NCw3ICsxMjc0LDcgQEAKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKIAkJCXN0cnVjdCB1c2JhX2VwICp0YXJnZXQ7CiAKLQkJCWlmIChjcnEtPndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKQorCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKQogCQkJCQl8fCAhZmVhdHVyZV9pc19lcF9oYWx0KGNycSkpCiAJCQkJZ290byBzdGFsbDsKIAkJCXRhcmdldCA9IGdldF9lcF9ieV9hZGRyKHVkYywgbGUxNl90b19jcHUoY3JxLT53SW5kZXgpKTsKQEAgLTEzMDgsNyArMTMwOCw3IEBACiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwogCi0JCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkKKwkJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkKIAkJCQkJfHwgIWZlYXR1cmVfaXNfZXBfaGFsdChjcnEpKQogCQkJCWdvdG8gc3RhbGw7CiAKQEAgLTE1MTQsNyArMTUxNCw3IEBACiAJCQkgKi8KIAkJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfSU47CiAJCX0gZWxzZSB7Ci0JCQlpZiAoY3JxLmNycS53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpCisJCQlpZiAoY3JxLmNycS53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApKQogCQkJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfT1VUOwogCQkJZWxzZQogCQkJCWVwLT5zdGF0ZSA9IFNUQVRVU19TVEFHRV9JTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCmluZGV4IDU0OTViMTcuLjkyODEzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwpAQCAtNjYsNyArNjYsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCkBAIC03NCw4ICs3NCw4IEBACiAJLyogLmJNYXhQYWNrZXRTaXplMCA9IGYoaGFyZHdhcmUpICovCiAKIAkvKiBWZW5kb3IgYW5kIHByb2R1Y3QgaWQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMuICAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENEQ19WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0RDX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoQ0RDX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoQ0RDX1BST0RVQ1RfTlVNKSwKIAkvKiAuYmNkRGV2aWNlID0gZihoYXJkd2FyZSkgKi8KIAkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KIAkvKiAuaVByb2R1Y3QgPSBEWU5BTUlDICovCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJCQlnYWRnZXQtPm5hbWUsCiAJCQkJY2RjX2NvbmZpZ19kcml2ZXIubGFiZWwpOwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwppbmRleCBiZWJmOTExLi4yMmM2NTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNjI2LDcgKzI2MjUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKIAl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwogCi0Jc3RyY3B5KHVkYy0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKwlkZXZfc2V0X25hbWUoJnVkYy0+Z2FkZ2V0LmRldiwgImdhZGdldCIpOwogCXVkYy0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IGRldi0+ZG1hX21hc2s7CiAJdWRjLT5nYWRnZXQuZGV2LnBhcmVudCAgID0gZGV2OwogCXVkYy0+Z2FkZ2V0LmRldi5yZWxlYXNlICA9IHVkY19yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDVkMTFjMjkuLjU5ZTg1MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTE0OSwxNiArMTQ5LDE3IEBACiBpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCiB7CiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CiAJaW50CQkJCXN0YXR1cyA9IDA7CiAKLQlzcGluX2xvY2soJmNkZXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoY2Rldi0+ZGVhY3RpdmF0aW9ucyA9PSAwKQogCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKIAlpZiAoc3RhdHVzID09IDApCiAJCWNkZXYtPmRlYWN0aXZhdGlvbnMrKzsKIAotCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZGV2LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTAxMyw3ICsxMDE0LDcgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKIAlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKIAotCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgYW5kIGRldmljZSBsZXZlbAorCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgbGV2ZWwKIAkgKiBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3M/CiAJICovCiAJREJHKGNkZXYsICJzdXNwZW5kXG4iKTsKQEAgLTEwMjMsNiArMTAyNCw4IEBACiAJCQkJZi0+c3VzcGVuZChmKTsKIAkJfQogCX0KKwlpZiAoY29tcG9zaXRlLT5zdXNwZW5kKQorCQljb21wb3NpdGUtPnN1c3BlbmQoY2Rldik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDMxLDEwICsxMDM0LDEyIEBACiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CiAKLQkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGFuZCBkZXZpY2UgbGV2ZWwKKwkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGxldmVsCiAJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPwogCSAqLwogCURCRyhjZGV2LCAicmVzdW1lXG4iKTsKKwlpZiAoY29tcG9zaXRlLT5yZXN1bWUpCisJCWNvbXBvc2l0ZS0+cmVzdW1lKGNkZXYpOwogCWlmIChjZGV2LT5jb25maWcpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmY2Rldi0+Y29uZmlnLT5mdW5jdGlvbnMsIGxpc3QpIHsKIAkJCWlmIChmLT5yZXN1bWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggOTA2NDY5Ni4uYTU2YjI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAkJCQkJfQogCQkJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMSkKIAkJCQkJCWJ1ZiBbMV0gPSAwOwotCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW4gKDIsCisJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1pbl90KHUzMiwgMiwKIAkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAJCQkJCXZhbHVlID0gMDsKIAkJCQkJc3RhdHVzID0gMDsKQEAgLTE2MjYsNyArMTYyNiw3IEBACiAJCWh1Yl9kZXNjcmlwdG9yICgoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOwogCQlicmVhazsKIAljYXNlIEdldEh1YlN0YXR1czoKLQkJKihfX2xlMzIgKikgYnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSooX19sZTMyICopIGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRQb3J0U3RhdHVzOgogCQlpZiAod0luZGV4ICE9IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwppbmRleCBhMzZiMTE3Li5jZDA5MTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJLyogQk9USDogICJoaWdoIGJhbmR3aWR0aCIgd29ya3Mgb25seSBhdCBoaWdoIHNwZWVkICovCi0JCWlmICgoZGVzYy0+d01heFBhY2tldFNpemUgJiBfX2NvbnN0YW50X2NwdV90b19sZTE2KDM8PDExKSkpIHsKKwkJaWYgKChkZXNjLT53TWF4UGFja2V0U2l6ZSAmIGNwdV90b19sZTE2KDM8PDExKSkpIHsKIAkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCiAJCQkJcmV0dXJuIDA7CiAJCQkvKiBjb25maWd1cmUgeW91ciBoYXJkd2FyZSB3aXRoIGVub3VnaCBidWZmZXJpbmchISAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwppbmRleCAzNzI1MmQwLi5kMDA2ZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYgKDB4MDIwMCksCiAKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLApAQCAtMTY3LDggKzE2Nyw4IEBACiAJICogd2Ugc3VwcG9ydC4gIChBcyBkb2VzIGJOdW1Db25maWd1cmF0aW9ucy4pICBUaGVzZSB2YWx1ZXMgY2FuCiAJICogYWxzbyBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLgogCSAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChDRENfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChDRENfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNiAoQ0RDX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCiAJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWV0aF9jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKaW5kZXggYzFkMzRkZi4uNzk1Mzk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZihhY21faGVhZGVyX2Rlc2MpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvcgpAQCAtMTU5LDcgKzE1OSw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKIAkuYkludGVydmFsID0JCTEgPDwgR1NfTE9HMl9OT1RJRllfSU5URVJWQUwsCiB9OwogCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAogCS5iSW50ZXJ2YWwgPQkJR1NfTE9HMl9OT1RJRllfSU5URVJWQUwrNCwKIH07CiAKQEAgLTIwNSwxNCArMjA1LDE0IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGFjbV9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmFjbV9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCmluZGV4IDRhZTU3OTkuLmVjZjViZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKIAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIGVjbV91bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xNDgsOSArMTQ4LDkgQEAKIAogCS8qIHRoaXMgZGVzY3JpcHRvciBhY3R1YWxseSBhZGRzIHZhbHVlLCBzdXJwcmlzZSEgKi8KIAkvKiAuaU1BQ0FkZHJlc3MgPSBEWU5BTUlDICovCi0JLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JX19jb25zdGFudF9jcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLwotCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAotCS53TnVtYmVyTUNGaWx0ZXJzID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSwKKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQljcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQljcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CWNwdV90b19sZTE2KDApLAogCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKIH07CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKQEAgLTIzNiw3ICsyMzYsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNTQsNyArMjU0LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmVjbV9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwppbmRleCA4YWZmZTFkLi5lYjZkZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc2lua19kZXNjID0gewpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19sb29wYmFja19kZXNjc1tdID0gewpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKiBsb29wYmFja19hZGQgLSBhZGQgYSBsb29wYmFjayB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZpY2UKICAqIEBjZGV2OiB0aGUgZGV2aWNlIHRvIHN1cHBvcnQgdGhlIGxvb3BiYWNrIGNvbmZpZ3VyYXRpb24KICAqLwotaW50IF9faW5pdCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoraW50IF9faW5pdCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpCiB7CiAJaW50IGlkOwogCkBAIC0zNzIsNiArMzcyLDEwIEBACiAJbG9vcGJhY2tfaW50Zi5pSW50ZXJmYWNlID0gaWQ7CiAJbG9vcGJhY2tfZHJpdmVyLmlDb25maWd1cmF0aW9uID0gaWQ7CiAKKwkvKiBzdXBwb3J0IGF1dG9yZXN1bWUgZm9yIHJlbW90ZSB3YWtldXAgdGVzdGluZyAqLworCWlmIChhdXRvcmVzdW1lKQorCQlzb3VyY2VzaW5rX2RyaXZlci5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCiAJLyogc3VwcG9ydCBPVEcgc3lzdGVtcyAqLwogCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKIAkJbG9vcGJhY2tfZHJpdmVyLmRlc2NyaXB0b3JzID0gb3RnX2Rlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKaW5kZXggMzhhYTg5Ni4uNDZkNjI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX2hlYWRlcl9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEyMCksCisJLmJjZENEQwkJCT0gY3B1X3RvX2xlMTYoMHgwMTIwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIG9iZXhfY2RjX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2Rlc2MpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX09CRVhfVFlQRSwKLQkuYmNkVmVyc2lvbgkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCisJLmJjZFZlcnNpb24JCT0gY3B1X3RvX2xlMTYoMHgwMTAwKSwKIH07CiAKIC8qIEhpZ2gtU3BlZWQgU3VwcG9ydCAqLwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZQkJPSBjcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2hzX2VwX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZQkJPSBjcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKaW5kZXggYzA5MTZjNy4uYzFhYmViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgcG5faGVhZGVyX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjCkBAIC04Nyw3ICs4Nyw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIHBuX3Bob25ldF9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX1BIT05FVF9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDE1MDUpLCAvKiA/Pz8gKi8KKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MTUwNSksIC8qID8/PyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfcG5fZnVuY3Rpb25bXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCmluZGV4IDNhOGJiNTMuLjMyNzlhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgY2FsbF9tZ210X2Rlc2NyaXB0b3IgX19pbml0ZGF0YSA9IHsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCiB9OwogCkBAIC0yMzAsNyArMjMwLDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQyArIDQsCiB9Owogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yMzksNyArMjM5LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmV0aF9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CkBAIC00MzcsNyArNDM3LDcgQEAKIAkJREJHKGNkZXYsICJybmRpcyByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAogCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKIAkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKLQkJcmVxLT56ZXJvID0gMDsKKwkJcmVxLT56ZXJvID0gKHZhbHVlIDwgd19sZW5ndGgpOwogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwogCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHZhbHVlIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKaW5kZXggZmU1Njc0ZGIuLmRiMGFhOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCkBAIC04OSwxNCArODksMTQgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3Nlcl9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzZXJfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGRjODRkMjYuLmJmZmU5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU5LDcgKzU5LDYgQEAKIAogCXN0cnVjdCB1c2JfZXAJCSppbl9lcDsKIAlzdHJ1Y3QgdXNiX2VwCQkqb3V0X2VwOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlc3VtZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZfc291cmNlc2luayAqZnVuY190b19zcyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQpAQCAtNjcsMTAgKzY2LDYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX3NvdXJjZXNpbmssIGZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGF1dG9yZXN1bWU7Ci1tb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7Ci0KIHN0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuOwogbW9kdWxlX3BhcmFtKHBhdHRlcm4sIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwYXR0ZXJuLCAiMCA9IGFsbCB6ZXJvZXMsIDEgPSBtb2Q2MyAiKTsKQEAgLTExOCw3ICsxMTMsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3NpbmtfZGVzYyA9IHsKQEAgLTEyNiw3ICsxMjEsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfc291cmNlX3NpbmtfZGVzY3NbXSA9IHsKQEAgLTE1NSwyMSArMTUwLDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgc291cmNlc2lua19hdXRvcmVzdW1lKHVuc2lnbmVkIGxvbmcgX2MpCi17Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gKHZvaWQgKilfYzsKLQlzdHJ1Y3QgdXNiX2dhZGdldAkqZyA9IGNkZXYtPmdhZGdldDsKLQotCS8qIE5vcm1hbGx5IHRoZSBob3N0IHdvdWxkIGJlIHdva2VuIHVwIGZvciBzb21ldGhpbmcKLQkgKiBtb3JlIHNpZ25pZmljYW50IHRoYW4ganVzdCBhIHRpbWVyIGZpcmluZzsgbGlrZWx5Ci0JICogYmVjYXVzZSBvZiBzb21lIGRpcmVjdCB1c2VyIHJlcXVlc3QuCi0JICovCi0JaWYgKGctPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7Ci0JCWludCBzdGF0dXMgPSB1c2JfZ2FkZ2V0X3dha2V1cChnKTsKLQkJREJHKGNkZXYsICIlcyAtLT4gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwotCX0KLX0KLQogc3RhdGljIGludCBfX2luaXQKIHNvdXJjZXNpbmtfYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCiB7CkBAIC0xOTgsOSArMTc4LDYgQEAKIAkJZ290byBhdXRvY29uZl9mYWlsOwogCXNzLT5vdXRfZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KIAotCXNldHVwX3RpbWVyKCZzcy0+cmVzdW1lLCBzb3VyY2VzaW5rX2F1dG9yZXN1bWUsCi0JCQkodW5zaWduZWQgbG9uZykgYy0+Y2Rldik7Ci0KIAkvKiBzdXBwb3J0IGhpZ2ggc3BlZWQgaGFyZHdhcmUgKi8KIAlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CiAJCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQpAQCAtMzU5LDcgKzMzNiw2IEBACiAKIAljZGV2ID0gc3MtPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldjsKIAlkaXNhYmxlX2VuZHBvaW50cyhjZGV2LCBzcy0+aW5fZXAsIHNzLT5vdXRfZXApOwotCWRlbF90aW1lcigmc3MtPnJlc3VtZSk7CiAJVkRCRyhjZGV2LCAiJXMgZGlzYWJsZWRcbiIsIHNzLT5mdW5jdGlvbi5uYW1lKTsKIH0KIApAQCAtNDI2LDMwICs0MDIsNiBAQAogCWRpc2FibGVfc291cmNlX3Npbmsoc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX3N1c3BlbmQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKLXsKLQlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OwotCi0JaWYgKGNkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCi0JCXJldHVybjsKLQotCWlmIChhdXRvcmVzdW1lKSB7Ci0JCW1vZF90aW1lcigmc3MtPnJlc3VtZSwgamlmZmllcyArIChIWiAqIGF1dG9yZXN1bWUpKTsKLQkJREJHKGNkZXYsICJzdXNwZW5kLCB3YWtldXAgaW4gJWQgc2Vjb25kc1xuIiwgYXV0b3Jlc3VtZSk7Ci0JfSBlbHNlCi0JCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgc291cmNlc2lua19yZXN1bWUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKLXsKLQlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OwotCi0JREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCWRlbF90aW1lcigmc3MtPnJlc3VtZSk7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IHNvdXJjZXNpbmtfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQpAQCAtNDY3LDggKzQxOSw2IEBACiAJc3MtPmZ1bmN0aW9uLnVuYmluZCA9IHNvdXJjZXNpbmtfdW5iaW5kOwogCXNzLT5mdW5jdGlvbi5zZXRfYWx0ID0gc291cmNlc2lua19zZXRfYWx0OwogCXNzLT5mdW5jdGlvbi5kaXNhYmxlID0gc291cmNlc2lua19kaXNhYmxlOwotCXNzLT5mdW5jdGlvbi5zdXNwZW5kID0gc291cmNlc2lua19zdXNwZW5kOwotCXNzLT5mdW5jdGlvbi5yZXN1bWUgPSBzb3VyY2VzaW5rX3Jlc3VtZTsKIAogCXN0YXR1cyA9IHVzYl9hZGRfZnVuY3Rpb24oYywgJnNzLT5mdW5jdGlvbik7CiAJaWYgKHN0YXR1cykKQEAgLTU1OSw3ICs1MDksNyBAQAogICogc291cmNlc2lua19hZGQgLSBhZGQgYSBzb3VyY2Uvc2luayB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZpY2UKICAqIEBjZGV2OiB0aGUgZGV2aWNlIHRvIHN1cHBvcnQgdGhlIGNvbmZpZ3VyYXRpb24KICAqLwotaW50IF9faW5pdCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitpbnQgX19pbml0IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKQogewogCWludCBpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwppbmRleCBmZTE4MzI4Li5hOWM5OGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfbWRsbV9kZXNjIG1kbG1fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTE2LDcgKzExNiw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfTURMTV9UWVBFLAogCi0JLmJjZFZlcnNpb24gPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS5iY2RWZXJzaW9uID0JCWNwdV90b19sZTE2KDB4MDEwMCksCiAJLmJHVUlEID0gewogCQkweDVkLCAweDM0LCAweGNmLCAweDY2LCAweDExLCAweDE4LCAweDExLCAweGQ2LAogCQkweGEyLCAweDFhLCAweDAwLCAweDAxLCAweDAyLCAweGNhLCAweDlhLCAweDdmLApAQCAtMTQ0LDkgKzE0NCw5IEBACiAKIAkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCiAJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLwotCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KLQkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQljcHVfdG9fbGUxNigwKSwKIAkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCiB9OwogCkBAIC0xODYsNyArMTg2LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zdWJzZXRfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZXRoX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCAxYWI5ZGFjLi41YzAzMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC04NDcsMTMgKzg0NywxMyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCiAJLyogVGhlIG5leHQgdGhyZWUgdmFsdWVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKLQkuYmNkRGV2aWNlID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhmZmZmKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9JRCksCisJLmJjZERldmljZSA9CQljcHVfdG9fbGUxNigweGZmZmYpLAogCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKQEAgLTkyNiw3ICs5MjYsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoMiksCiAJLmJJbnRlcnZhbCA9CQkzMiwJLy8gZnJhbWVzIC0+IDMyIG1zCiB9OwogCkBAIC05NTQsNyArOTU0LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLApAQCAtOTY3LDcgKzk2Nyw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX291dF9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogCS5iSW50ZXJ2YWwgPQkJMSwJLy8gTkFLIGV2ZXJ5IDEgdWZyYW1lCiB9OwogCkBAIC05ODgsNyArOTg4LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfaW50cl9pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNigyKSwKIAkuYkludGVydmFsID0JCTksCS8vIDIqKig5LTEpID0gMjU2IHVmcmFtZXMgLT4gMzIgbXMKIH07CiAKQEAgLTE3MTEsNyArMTcxMSw5IEBACiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX1BST1RFQ1RFRDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXNwaW5fbG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyAmPSB+T19TWU5DOwkvLyBEZWZhdWx0IGlzIG5vdCB0byB3YWl0CisJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAogCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKIAkgKiBub3QgdG9vIGJpZyAqLwpAQCAtMTcyOCw4ICsxNzMwLDExIEBACiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChmc2ctPmNtbmRbMV0gJiAweDA4KQkvLyBGVUEKKwkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpIHsJLy8gRlVBCisJCQlzcGluX2xvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAkJCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyB8PSBPX1NZTkM7CisJCQlzcGluX3VubG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOworCQl9CiAJfQogCWlmIChsYmEgPj0gY3VybHVuLT5udW1fc2VjdG9ycykgewogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwpAQCAtMjY0Niw3ICsyNjUxLDcgQEAKIAkJc3RydWN0IGJ1bGtfY3Nfd3JhcAkqY3N3ID0gYmgtPmJ1ZjsKIAogCQkvKiBTdG9yZSBhbmQgc2VuZCB0aGUgQnVsay1vbmx5IENTVyAqLwotCQljc3ctPlNpZ25hdHVyZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVVNCX0JVTEtfQ1NfU0lHKTsKKwkJY3N3LT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOwogCQljc3ctPlRhZyA9IGZzZy0+dGFnOwogCQljc3ctPlJlc2lkdWUgPSBjcHVfdG9fbGUzMihmc2ctPnJlc2lkdWUpOwogCQljc3ctPlN0YXR1cyA9IHN0YXR1czsKQEAgLTMwODksNyArMzA5NCw3IEBACiAKIAkvKiBJcyB0aGUgQ0JXIHZhbGlkPyAqLwogCWlmIChyZXEtPmFjdHVhbCAhPSBVU0JfQlVMS19DQl9XUkFQX0xFTiB8fAotCQkJY2J3LT5TaWduYXR1cmUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCWNidy0+U2lnbmF0dXJlICE9IGNwdV90b19sZTMyKAogCQkJCVVTQl9CVUxLX0NCX1NJRykpIHsKIAkJREJHKGZzZywgImludmFsaWQgQ0JXOiBsZW4gJXUgc2lnIDB4JXhcbiIsCiAJCQkJcmVxLT5hY3R1YWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKaW5kZXggZDhkOWE1Mi4uOWQ3Yjk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwpAQCAtMTgwMiw3ICsxODAyLDggQEAKIAogb3V0OgogCWlmIChyZXR2YWwpCi0JCXByaW50aygiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAorCQkgICAgICAgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CkBAIC0xODQ3LDcgKzE4NDgsOCBAQAogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CiAJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CiAKLQlwcmludGsoInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCisJICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTI0NTUsNyArMjQ1Nyw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7Ci0JcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKIH0KIAogbW9kdWxlX2V4aXQodWRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCmluZGV4IGRkMmYxNmEuLmU4NGIzYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKQEAgLTE5LDcgKzE5LDcgQEAKIAkJc3RydWN0IHVzYl9lcCAqaW4sIHN0cnVjdCB1c2JfZXAgKm91dCk7CiAKIC8qIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgbGlua3VwICovCi1pbnQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKLWludCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKK2ludCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSk7CitpbnQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKTsKIAogI2VuZGlmIC8qIF9fR19aRVJPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggNjBkM2Y5ZS4uYjkzMTJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTE5OSwxMCArMTk5LDEwIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfREVWSUNFX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCkBAIC0yNDEsOCArMjQxLDggQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCi0JLmJjZEFEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSksCisJLmJjZEFEQyA9CQljcHVfdG9fbGUxNigweDAxMDApLAorCS53VG90YWxMZW5ndGggPQkJY3B1X3RvX2xlMTYoVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpKSwKIAkuYkluQ29sbGVjdGlvbiA9CTEsCiAJLmJhSW50ZXJmYWNlTnIgPSB7CiAJCVswXSA9CQlHTUlESV9NU19JTlRFUkZBQ0UsCkBAIC0yNjUsOCArMjY1LDggQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfTVNfSEVBREVSX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCi0JLmJjZE1TQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9EVF9NU19IRUFERVJfU0laRQorCS5iY2RNU0MgPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkud1RvdGFsTGVuZ3RoID0JCWNwdV90b19sZTE2KFVTQl9EVF9NU19IRUFERVJfU0laRQogCQkJCSsgMipVU0JfRFRfTUlESV9JTl9TSVpFCiAJCQkJKyAyKlVTQl9EVF9NSURJX09VVF9TSVpFKDEpKSwKIH07CkBAIC0xMDk5LDEwICsxMDk5LDkgQEAKIAkJLmRldl9mcmVlID0gZ21pZGlfc25kX2ZyZWUsCiAJfTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7Ci0JCUVSUk9SKGRldiwgInNuZF9jYXJkX25ldyBmYWlsZWRcbiIpOwotCQllcnIgPSAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJRVJST1IoZGV2LCAic25kX2NhcmRfY3JlYXRlIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAJZGV2LT5jYXJkID0gY2FyZDsKQEAgLTEyMjcsNyArMTIyNiw3IEBACiAJCSAqLwogCQlwcl93YXJuaW5nKCIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAogCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOwotCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4OTk5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKaW5kZXggNjM0MTljNC4uZGUwMTBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKQEAgLTE0NzIsNyArMTQ3Miw3IEBACiAJCQkJLyogYWN0aXZlIGVuZHBvaW50ICovCiAJCQkJaWYgKHRtcCA+IDMgfHwgKCFkZXYtPmVwW3RtcF0uZGVzYyAmJiB0bXAgIT0gMCkpCiAJCQkJCWdvdG8gc3RhbGw7Ci0JCQkJaWYgKGN0cmwud0luZGV4ICYgX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJCQlpZiAoY3RybC53SW5kZXggJiBjcHVfdG9fbGUxNigKIAkJCQkJCVVTQl9ESVJfSU4pKSB7CiAJCQkJCWlmICghZGV2LT5lcFt0bXBdLmlzX2luKQogCQkJCQkJZ290byBzdGFsbDsKQEAgLTE0ODAsNyArMTQ4MCw3IEBACiAJCQkJCWlmIChkZXYtPmVwW3RtcF0uaXNfaW4pCiAJCQkJCQlnb3RvIHN0YWxsOwogCQkJCX0KLQkJCQlpZiAoY3RybC53VmFsdWUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJCQlpZiAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoCiAJCQkJCQlVU0JfRU5EUE9JTlRfSEFMVCkpCiAJCQkJCWdvdG8gc3RhbGw7CiAJCQkJaWYgKHRtcCkKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiAJCQkJcmV0dXJuOwogCQkJY2FzZSBVU0JfUkVDSVBfREVWSUNFOgogCQkJCS8qIGRldmljZSByZW1vdGUgd2FrZXVwOiBhbHdheXMgY2xlYXIgKi8KLQkJCQlpZiAoY3RybC53VmFsdWUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKSkKKwkJCQlpZiAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoMSkpCiAJCQkJCWdvdG8gc3RhbGw7CiAJCQkJVkRCRyhkZXYsICJjbGVhciBkZXYgcmVtb3RlIHdha2V1cFxuIik7CiAJCQkJZ290byBzdWNjZWVkOwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAKIAlkZXYtPnJlcV9jb25maWcgPSAoY3RybC5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OCiAJCQkJJiYgY3RybC5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSk7CiAJaWYgKHVubGlrZWx5KGRldi0+cmVxX2NvbmZpZykpCi0JCWRldi0+Y29uZmlndXJlZCA9IChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApKTsKKwkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IGNwdV90b19sZTE2KDApKTsKIAogCS8qIGRlbGVnYXRlIGV2ZXJ5dGhpbmcgdG8gdGhlIGdhZGdldCBkcml2ZXIuCiAJICogaXQgbWF5IHJlc3BvbmQgYWZ0ZXIgdGhpcyBpcnEgaGFuZGxlciByZXR1cm5zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKaW5kZXggNzdjNWQwYS4uMTY4NjU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCWRyaXZlci91c2IvZ2FkZ2V0L2lteF91ZGMuYwogICoKLSAqCUNvcHlyaWdodCAoQykgMjAwNSBNaWtlIExlZShlZW1pa2VAZ21haWwuY29tKQorICoJQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgTGVlIDxlZW1pa2VAZ21haWwuY29tPgogICoJQ29weXJpZ2h0IChDKSAyMDA4IERhcml1cyBBdWd1bGlzIDxhdWd1bGlzLmRhcml1c0BnbWFpbC5jb20+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CkBAIC01MSw3ICs1Miw4IEBACiB2b2lkIGlteF91ZGNfZW5hYmxlKHN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYikKIHsKIAlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0ZFX0VOQSB8IENUUkxfQUZFX0VOQSwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfRkVfRU5BIHwgQ1RSTF9BRkVfRU5BLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKIH0KIApAQCAtMTI2LDcgKzEyOCw4IEBACiAJCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CiAJCQkJX19yYXdfd3JpdGViKGVwX2NvbmZbal0sCiAJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfRERBVCk7Ci0JCQkJZG8ge30gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfREFEUikKKwkJCQlkbyB7fSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZQorCQkJCQkJCQkrIFVTQl9EQURSKQogCQkJCQkmIERBRFJfQlNZKTsKIAkJCX0KIAkJfQpAQCAtMTgzLDcgKzE4Niw4IEBACiAJCXRlbXAgPSAoRVBfRElSKGlteF9lcCkgPDwgNykgfCAobWF4IDw8IDUpCiAJCQl8IChpbXhfZXAtPmJtQXR0cmlidXRlcyA8PCAzKTsKIAkJX19yYXdfd3JpdGVsKHRlbXAsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7Ci0JCV9fcmF3X3dyaXRlbCh0ZW1wIHwgRVBTVEFUX0ZMVVNILCBpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpOworCQlfX3Jhd193cml0ZWwodGVtcCB8IEVQU1RBVF9GTFVTSCwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7CiAJCURfSU5JKGlteF91c2ItPmRldiwgIjwlcz4gZXAlZF9zdGF0ICUwOHhcbiIsIF9fZnVuY19fLCBpLAogCQkJX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKSk7CiAJfQpAQCAtMjc4LDE1ICsyODIsMTggQEAKIAlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBpbXhfZXAtPmlteF91c2I7CiAJaW50IHRlbXAsIGk7CiAKLQlEX0VSUihpbXhfdXNiLT5kZXYsICI8JXM+IEZvcmNlZCBzdGFsbCBvbiAlc1xuIiwgX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CisJRF9FUlIoaW14X3VzYi0+ZGV2LAorCQkiPCVzPiBGb3JjZWQgc3RhbGwgb24gJXNcbiIsIF9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOwogCiAJaW14X2ZsdXNoKGlteF9lcCk7CiAKIAkvKiBTcGVjaWFsIGNhcmUgZm9yIGVwMCAqLwotCWlmIChFUF9OTyhpbXhfZXApKSB7CisJaWYgKCFFUF9OTyhpbXhfZXApKSB7CiAJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiB8IENUUkxfQ01ERVJST1IsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCWRvIHsgfSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKSAmIENUUkxfQ01ET1ZFUik7CisJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSIHwgQ1RSTF9DTURFUlJPUiwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CisJCWRvIHsgfSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKQorCQkJCQkJJiBDVFJMX0NNRE9WRVIpOwogCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAkJX19yYXdfd3JpdGVsKHRlbXAgJiB+Q1RSTF9DTURFUlJPUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAl9CkBAIC0yOTYsMTIgKzMwMywxMyBAQAogCQkJaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpICsrKSB7Ci0JCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKIAkJCWlmICghKHRlbXAgJiBFUFNUQVRfU1RBTEwpKQogCSAJCQlicmVhazsKIAkgCQl1ZGVsYXkoMjApOwogCSAJfQotCQlpZiAoaSA9PSA1MCkKKwkJaWYgKGkgPT0gMTAwKQogCQkJRF9FUlIoaW14X3VzYi0+ZGV2LCAiPCVzPiBOb24gZmluaXNoZWQgc3RhbGwgb24gJXNcbiIsCiAJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CiAJfQpAQCAtMzI1LDcgKzMzMyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXN0YXRpYyB2b2lkIGVwX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXBfYWRkX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJCQlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKIHsKIAlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybjsKQEAgLTMzNCw3ICszNDMsOCBAQAogCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZpbXhfZXAtPnF1ZXVlKTsKIH0KIAotc3RhdGljIHZvaWQgZXBfZGVsX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9kZWxfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQogewogCWlmICh1bmxpa2VseSghcmVxKSkKIAkJcmV0dXJuOwpAQCAtMzQzLDcgKzM1Myw4IEBACiAJcmVxLT5pbl91c2UgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQorc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKIHsKIAllcF9kZWxfcmVxdWVzdChpbXhfZXAsIHJlcSk7CiAKQEAgLTQ5NCw3ICs1MDUsOCBAQAogCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUsIHJlcSwKIAkJCQljb21wbGV0ZWQgPyAiY29tcGxldGVkIiA6ICJub3QgY29tcGxldGVkIik7CiAJCQlpZiAoIUVQX05PKGlteF9lcCkpCi0JCQkJZXAwX2NoZ19zdGF0KF9fZnVuY19fLCBpbXhfZXAtPmlteF91c2IsIEVQMF9JRExFKTsKKwkJCQllcDBfY2hnX3N0YXQoX19mdW5jX18sCisJCQkJCQlpbXhfZXAtPmlteF91c2IsIEVQMF9JRExFKTsKIAkJfQogCX0KIApAQCAtNTM5LDEwICs1NTEsOSBAQAogCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghbGlzdF9lbXB0eSgmaW14X2VwLT5xdWV1ZSkpCisJaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkgewogCQlyZXEgPSBsaXN0X2VudHJ5KGlteF9lcC0+cXVldWUubmV4dCwgc3RydWN0IGlteF9yZXF1ZXN0LCBxdWV1ZSk7CiAKLQlpZiAocmVxKSB7CiAJCXN3aXRjaCAoaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSkgewogCiAJCWNhc2UgRVAwX0lOX0RBVEFfUEhBU0U6CQkJLyogR0VUX0RFU0NSSVBUT1IgKi8KQEAgLTU2MSw2ICs1NzIsMTAgQEAKIAkJfQogCX0KIAorCWVsc2UKKwkJRF9FUlIoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IG5vIHJlcXVlc3Qgb24gJXNcbiIsCisJCQkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4Myw3ICs1OTgsOCBAQAogCQkJCSI8JXM+IG5vIHNldHVwIHBhY2tldCByZWNlaXZlZFxuIiwgX19mdW5jX18pOwogCQkJZ290byBzdGFsbDsKIAkJfQotCQl1LndvcmRbaV0gPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsJVVNCX0VQX0ZEQVQoRVBfTk8oaW14X2VwKSkpOworCQl1LndvcmRbaV0gPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9GREFUKEVQX05PKGlteF9lcCkpKTsKIAl9CiAKIAl0ZW1wID0gaW14X2VwX2VtcHR5KGlteF9lcCk7CkBAIC03NTksNyArNzc1LDcgQEAKIAkqLwogCWlmIChpbXhfdXNiLT5zZXRfY29uZmlnICYmICFFUF9OTyhpbXhfZXApKSB7CiAJCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlEX0VQWChpbXhfdXNiLT5kZXYsCisJCURfRVJSKGlteF91c2ItPmRldiwKIAkJCSI8JXM+IGdhZGdldCByZXBseSBzZXQgY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTc3OSwyOCArNzk1LDI5IEBACiAJCXJldHVybiAtRVNIVVRET1dOOwogCX0KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQogCS8qIERlYnVnICovCiAJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBlcCVkICVzIHJlcXVlc3QgZm9yIFslZF0gYnl0ZXNcbiIsCiAJCV9fZnVuY19fLCBFUF9OTyhpbXhfZXApLAotCQkoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUgPT0gRVAwX0lOX0RBVEFfUEhBU0UpCi0JCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkgPyAiSU4iIDogIk9VVCIsIHVzYl9yZXEtPmxlbmd0aCk7CisJCSgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZQorCQkJCQkJCT09IEVQMF9JTl9EQVRBX1BIQVNFKQorCQl8fCAoRVBfTk8oaW14X2VwKSAmJiBFUF9ESVIoaW14X2VwKSkpCisJCQkJCT8gIklOIiA6ICJPVVQiLCB1c2JfcmVxLT5sZW5ndGgpOwogCWR1bXBfcmVxKF9fZnVuY19fLCBpbXhfZXAsIHVzYl9yZXEpOwogCiAJaWYgKGlteF9lcC0+c3RvcHBlZCkgewogCQl1c2JfcmVxLT5zdGF0dXMgPSAtRVNIVVRET1dOOwotCQlyZXQgPSAtRVNIVVRET1dOOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCiAJaWYgKHJlcS0+aW5fdXNlKSB7CiAJCURfRVJSKGlteF91c2ItPmRldiwKIAkJCSI8JXM+IHJlZnVzaW5nIHRvIHF1ZXVlIHJlcSAlcCAoYWxyZWFkeSBxdWV1ZWQpXG4iLAogCQkJX19mdW5jX18sIHJlcSk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAl9CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKIAl1c2JfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJdXNiX3JlcS0+YWN0dWFsID0gMDsKIApAQCAtODEwLDcgKzgyNyw3IEBACiAJCXJldCA9IGhhbmRsZV9lcDAoaW14X2VwKTsKIAllbHNlCiAJCXJldCA9IGhhbmRsZV9lcChpbXhfZXApOwotb3V0OgorCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CkBAIC05OTcsNzEgKzEwMTQsMzIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldikKKy8qCisgKiBDYWxsZWQgd2hlbiB0aW1lciBleHBpcmVzLgorICogVGltZXIgaXMgc3RhcnRlZCB3aGVuIENGR19DSEcgaXMgcmVjZWl2ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9jb25maWcodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGRldjsKKwlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSAodm9pZCAqKWRhdGE7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCB1OwogCWludCB0ZW1wLCBjZmcsIGludGYsIGFsdDsKLQlpbnQgaW50ciA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CiAKLQlpZiAoaW50ciAmIChJTlRSX1dBS0VVUCB8IElOVFJfU1VTUEVORCB8IElOVFJfUkVTVU1FIHwgSU5UUl9SRVNFVF9TVEFSVAotCQkJfCBJTlRSX1JFU0VUX1NUT1AgfCBJTlRSX0NGR19DSEcpKSB7Ci0JCQkJZHVtcF9pbnRyKF9fZnVuY19fLCBpbnRyLCBpbXhfdXNiLT5kZXYpOwotCQkJCWR1bXBfdXNiX3N0YXQoX19mdW5jX18sIGlteF91c2IpOwotCX0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JaWYgKCFpbXhfdXNiLT5kcml2ZXIpIHsKLQkJLyppbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7Ki8KLQkJZ290byBlbmRfaXJxOwotCX0KKwl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9TVEFUKTsKKwljZmcgID0gKHRlbXAgJiBTVEFUX0NGRykgPj4gNTsKKwlpbnRmID0gKHRlbXAgJiBTVEFUX0lOVEYpID4+IDM7CisJYWx0ICA9ICB0ZW1wICYgU1RBVF9BTFRTRVQ7CiAKLQlpZiAoaW50ciAmIElOVFJfV0FLRVVQKSB7Ci0JCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KLQkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSkKLQkJCQlpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSgmaW14X3VzYi0+Z2FkZ2V0KTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwotCX0KKwlEX1JFUShpbXhfdXNiLT5kZXYsCisJCSI8JXM+IG9yaWcgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWQgLyAiCisJCSJyZXEgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWRcbiIsCisJCV9fZnVuY19fLCBpbXhfdXNiLT5jZmcsIGlteF91c2ItPmludGYsIGlteF91c2ItPmFsdCwKKwkJY2ZnLCBpbnRmLCBhbHQpOwogCi0JaWYgKGludHIgJiBJTlRSX1NVU1BFTkQpIHsKLQkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgotCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+c3VzcGVuZCkKLQkJCQlpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQoJmlteF91c2ItPmdhZGdldCk7Ci0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKLQl9CisJaWYgKGNmZyA9PSAxIHx8IGNmZyA9PSAyKSB7CiAKLQlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RBUlQpIHsKLQkJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7Ci0JCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGlteF91c2ItPmRyaXZlcik7Ci0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKLQl9Ci0KLQlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RPUCkKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Ci0KLQlpZiAoaW50ciAmIElOVFJfQ0ZHX0NIRykgewotCQlfX3Jhd193cml0ZWwoSU5UUl9DRkdfQ0hHLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwotCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9TVEFUKTsKLQkJY2ZnICA9ICh0ZW1wICYgU1RBVF9DRkcpID4+IDU7Ci0JCWludGYgPSAodGVtcCAmIFNUQVRfSU5URikgPj4gMzsKLQkJYWx0ICA9ICB0ZW1wICYgU1RBVF9BTFRTRVQ7Ci0KLQkJRF9SRVEoaW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gb3JpZyBjb25maWcgQz0lZCwgST0lZCwgQT0lZCAvICIKLQkJCSJyZXEgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWRcbiIsCi0JCQlfX2Z1bmNfXywgaW14X3VzYi0+Y2ZnLCBpbXhfdXNiLT5pbnRmLCBpbXhfdXNiLT5hbHQsCi0JCQljZmcsIGludGYsIGFsdCk7Ci0KLQkJaWYgKGNmZyAhPSAxICYmIGNmZyAhPSAyKQotCQkJZ290byBlbmRfaXJxOwotCi0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCi0JCS8qIENvbmZpZyBzZXR1cCAqLwogCQlpZiAoaW14X3VzYi0+Y2ZnICE9IGNmZykgewotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgY29uZmlnIHN0YXJ0XG4iLF9fZnVuY19fKTsKIAkJCXUuYlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOwogCQkJdS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVCB8CiAJCQkJCVVTQl9UWVBFX1NUQU5EQVJEIHwKQEAgLTEwNzAsMTQgKzEwNDgsMTAgQEAKIAkJCXUud0luZGV4ID0gMDsKIAkJCXUud0xlbmd0aCA9IDA7CiAJCQlpbXhfdXNiLT5jZmcgPSBjZmc7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKIAkJCWlteF91c2ItPmRyaXZlci0+c2V0dXAoJmlteF91c2ItPmdhZGdldCwgJnUpOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBjb25maWcgZG9uZVxuIixfX2Z1bmNfXyk7CiAKIAkJfQogCQlpZiAoaW14X3VzYi0+aW50ZiAhPSBpbnRmIHx8IGlteF91c2ItPmFsdCAhPSBhbHQpIHsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGludGVyZmFjZSBzdGFydFxuIixfX2Z1bmNfXyk7CiAJCQl1LmJSZXF1ZXN0ID0gVVNCX1JFUV9TRVRfSU5URVJGQUNFOwogCQkJdS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVCB8CiAJCQkJCSAgVVNCX1RZUEVfU1RBTkRBUkQgfApAQCAtMTA4NywyMCArMTA2MSw5MiBAQAogCQkJdS53TGVuZ3RoID0gMDsKIAkJCWlteF91c2ItPmludGYgPSBpbnRmOwogCQkJaW14X3VzYi0+YWx0ID0gYWx0OwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDE7CiAJCQlpbXhfdXNiLT5kcml2ZXItPnNldHVwKCZpbXhfdXNiLT5nYWRnZXQsICZ1KTsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgaW50ZXJmYWNlIGRvbmVcbiIsX19mdW5jX18pOwogCQl9CiAJfQogCisJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdWRjX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKKwlpbnQgdGVtcDsKKworCWlmIChpbnRyICYgKElOVFJfV0FLRVVQIHwgSU5UUl9TVVNQRU5EIHwgSU5UUl9SRVNVTUUgfCBJTlRSX1JFU0VUX1NUQVJUCisJCQl8IElOVFJfUkVTRVRfU1RPUCB8IElOVFJfQ0ZHX0NIRykpIHsKKwkJCQlkdW1wX2ludHIoX19mdW5jX18sIGludHIsIGlteF91c2ItPmRldik7CisJCQkJZHVtcF91c2Jfc3RhdChfX2Z1bmNfXywgaW14X3VzYik7CisJfQorCisJaWYgKCFpbXhfdXNiLT5kcml2ZXIpCisJCWdvdG8gZW5kX2lycTsKKwogCWlmIChpbnRyICYgSU5UUl9TT0YpIHsKKwkJLyogQ29weSBmcm9tIEZyZWVzY2FsZSBCU1AuCisJCSAgIFdlIG11c3QgZW5hYmxlIFNPRiBpbnRyIGFuZCBzZXQgQ01ET1ZFUi4KKwkJICAgRGF0YXNoZWV0IGRvbid0IHNwZWNpZml5IHRoaXMgYWN0aW9uLCBidXQgaXQKKwkJICAgaXMgZG9uZSBpbiBGcmVlc2NhbGUgQlNQLCBzbyBqdXN0IGNvcHkgaXQuCisJCSovCiAJCWlmIChpbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSURMRSkgewogCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwkJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAkJfQogCX0KIAorCWlmIChpbnRyICYgSU5UUl9DRkdfQ0hHKSB7CisJCS8qIEEgd29ya2Fyb3VuZCBvZiBzZXJpb3VzIElNWCBVREMgYnVnLgorCQkgICBIYW5kbGluZyBvZiBDRkdfQ0hHIHNob3VsZCBiZSBkZWxheWVkIGZvciBzb21lIHRpbWUsIGJlY2F1c2UKKwkJICAgSU1YIGRvZXMgbm90IE5BQ0sgdGhlIGhvc3Qgd2hlbiBDRkdfQ0hHIGludGVycnVwdCBpcyBwZW5kaW5nLgorCQkgICBUaGVyZSBpcyBubyB0aW1lIHRvIGhhbmRsZSBjdXJyZW50IENGR19DSEcKKwkJICAgaWYgbmV4dCBDRkdfQ0hHIG9yIFNFVFVQIHBhY2tlZCBpcyBzZW5kIGltbWVkaWF0ZWx5LgorCQkgICBXZSBoYXZlIHRvIGNsZWFyIENGR19DSEcsIHN0YXJ0IHRoZSB0aW1lciBhbmQKKwkJICAgTkFDSyB0aGUgaG9zdCBieSBzZXR0aW5nIENUUkxfQ01ET1ZFUgorCQkgICBpZiBpdCBzZW5kcyBhbnkgU0VUVVAgcGFja2V0LgorCQkgICBXaGVuIHRpbWVyIGV4cGlyZXMsIGhhbmRsZXIgaXMgY2FsbGVkIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uCisJCSAgIGNoYW5nZXMuIFdoaWxlIENGR19DSEcgaXMgbm90IGhhbmRsZWQgKHNldF9jb25maWc9MSksCisJCSAgIHdlIG11c3QgTkFDSyB0aGUgaG9zdCB0byBldmVyeSBTRVRVUCBwYWNrZWQuCisJCSAgIFRoaXMgZGVsYXkgcHJldmVudHMgZnJvbSBnb2luZyBvdXQgb2Ygc3luYyB3aXRoIGhvc3QuCisJCSAqLworCQlfX3Jhd193cml0ZWwoSU5UUl9DRkdfQ0hHLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKKwkJbW9kX3RpbWVyKCZpbXhfdXNiLT50aW1lciwgamlmZmllcyArIDUpOworCQlnb3RvIGVuZF9pcnE7CisJfQorCisJaWYgKGludHIgJiBJTlRSX1dBS0VVUCkgeworCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOCisJCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUpCisJCQkJaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUoJmlteF91c2ItPmdhZGdldCk7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJfQorCisJaWYgKGludHIgJiBJTlRSX1NVU1BFTkQpIHsKKwkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgorCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+c3VzcGVuZCkKKwkJCQlpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQoJmlteF91c2ItPmdhZGdldCk7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJfQorCisJaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUQVJUKSB7CisJCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCQl1ZGNfc3RvcF9hY3Rpdml0eShpbXhfdXNiLCBpbXhfdXNiLT5kcml2ZXIpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKwkJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCX0KKworCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVE9QKQorCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwogZW5kX2lycToKIAlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMTA5LDYgKzExNTUsNyBAQAogc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfY3RybF9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGRldjsKKwlzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwID0gJmlteF91c2ItPmlteF9lcFswXTsKIAlpbnQgaW50ciA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUigwKSk7CiAKIAlkdW1wX2VwX2ludHIoX19mdW5jX18sIDAsIGludHIsIGlteF91c2ItPmRldik7CkBAIC0xMTE4LDE2ICsxMTY1LDE1IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQkvKiBERVZSRVEgSVJRIGhhcyBoaWdoZXN0IHByaW9yaXR5ICovCisJLyogREVWUkVRIGhhcyBoaWdoZXN0IHByaW9yaXR5ICovCiAJaWYgKGludHIgJiAoRVBJTlRSX0RFVlJFUSB8IEVQSU5UUl9NREVWUkVRKSkKIAkJaGFuZGxlX2VwMF9kZXZyZXEoaW14X3VzYik7CiAJLyogU2VlbSBpLk1YIGlzIG1pc3NpbmcgRU9GIGludGVycnVwdCBzb21ldGltZXMuCi0JICogVGhlcmVmb3JlIHdlIG1vbml0b3IgYm90aCBFT0YgYW5kIEZJRk9fRU1QVFkgaW50ZXJydXBzCi0JICogd2hlbiB0cmFuc21pdGluZywgYW5kIGJvdGggRU9GIGFuZCBGSUZPX0ZVTEwgd2hlbgotCSAqIHJlY2VpdmluZyBkYXRhLgorCSAqIFRoZXJlZm9yZSB3ZSBkb24ndCBtb25pdG9yIEVPRi4KKwkgKiBXZSBjYWxsIGhhbmRsZV9lcDAoKSBvbmx5IGlmIGEgcmVxdWVzdCBpcyBxdWV1ZWQgZm9yIGVwMC4KIAkgKi8KLQllbHNlIGlmIChpbnRyICYgKEVQSU5UUl9FT0YgfCBFUElOVFJfRklGT19FTVBUWSB8IEVQSU5UUl9GSUZPX0ZVTEwpKQotCQloYW5kbGVfZXAwKCZpbXhfdXNiLT5pbXhfZXBbMF0pOworCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkKKwkJaGFuZGxlX2VwMChpbXhfZXApOwogCiAJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUigwKSk7CiAKQEAgLTExODYsOCArMTIzMiw4IEBACiAJCS5lcDAJCT0gJmNvbnRyb2xsZXIuaW14X2VwWzBdLmVwLAogCQkubmFtZQkJPSBkcml2ZXJfbmFtZSwKIAkJLmRldiA9IHsKLQkJCSAuYnVzX2lkCT0gImdhZGdldCIsCi0JCSB9LAorCQkJLmluaXRfbmFtZQk9ICJnYWRnZXQiLAorCQl9LAogCX0sCiAKIAkuaW14X2VwWzBdID0gewpAQCAtMTMxOCw2ICsxMzY0LDcgQEAKIAogCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGRyaXZlcik7CiAJaW14X3VkY19kaXNhYmxlKGlteF91c2IpOworCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOwogCiAJZHJpdmVyLT51bmJpbmQoJmlteF91c2ItPmdhZGdldCk7CiAJaW14X3VzYi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwpAQCAtMTQzNSw2ICsxNDgyLDEwIEBACiAJdXNiX2luaXRfZGF0YShpbXhfdXNiKTsKIAlpbXhfdWRjX2luaXQoaW14X3VzYik7CiAKKwlpbml0X3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJaW14X3VzYi0+dGltZXIuZnVuY3Rpb24gPSBoYW5kbGVfY29uZmlnOworCWlteF91c2ItPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbXhfdXNiOworCiAJcmV0dXJuIDA7CiAKIGZhaWwzOgpAQCAtMTQ1Nyw2ICsxNTA4LDcgQEAKIAlpbnQgaTsKIAogCWlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsKKwlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJTVhfVVNCX05CX0VQICsgMTsgaSsrKQogCQlmcmVlX2lycShpbXhfdXNiLT51c2JkX2ludFtpXSwgaW14X3VzYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaAppbmRleCA4NTAwNzY5Li5iNDhhZDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKQEAgLTIzLDcgKzIzLDggQEAKIC8qIEhlbHBlciBtYWNyb3MgKi8KICNkZWZpbmUgRVBfTk8oZXApCSgoZXAtPmJFbmRwb2ludEFkZHJlc3MpICYgflVTQl9ESVJfSU4pIC8qIElOOjEsIE9VVDowICovCiAjZGVmaW5lIEVQX0RJUihlcCkJKChlcC0+YkVuZHBvaW50QWRkcmVzcykgJiBVU0JfRElSX0lOID8gMSA6IDApCi0jZGVmaW5lIGlycV90b19lcChpcnEpCSgoKGlycSkgPj0gVVNCRF9JTlQwKSB8fCAoKGlycSkgPD0gVVNCRF9JTlQ2KSA/ICgoaXJxKSAtIFVTQkRfSU5UMCkgOiAoVVNCRF9JTlQ2KSkgLypzaG91bGQgbm90IGhhcHBlbiovCisjZGVmaW5lIGlycV90b19lcChpcnEpCSgoKGlycSkgPj0gVVNCRF9JTlQwKSB8fCAoKGlycSkgPD0gVVNCRF9JTlQ2KSBcCisJCT8gKChpcnEpIC0gVVNCRF9JTlQwKSA6IChVU0JEX0lOVDYpKSAvKnNob3VsZCBub3QgaGFwcGVuKi8KICNkZWZpbmUgZXBfdG9faXJxKGVwKQkoRVBfTk8oKGVwKSkgKyBVU0JEX0lOVDApCiAjZGVmaW5lIElNWF9VU0JfTkJfRVAJNgogCkBAIC01OCw2ICs1OSw3IEBACiAJc3RydWN0IGRldmljZQkJCQkqZGV2OwogCXN0cnVjdCBpbXhfZXBfc3RydWN0CQkJaW14X2VwW0lNWF9VU0JfTkJfRVBdOwogCXN0cnVjdCBjbGsJCQkJKmNsazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJCXRpbWVyOwogCWVudW0gZXAwX3N0YXRlCQkJCWVwMHN0YXRlOwogCXN0cnVjdCByZXNvdXJjZQkJCQkqcmVzOwogCXZvaWQgX19pb21lbQkJCQkqYmFzZTsKQEAgLTg4LDggKzkwLDggQEAKICNkZWZpbmUgIFVTQl9FUF9GREFUMyh4KQkoMHgzRiArICh4KjB4MzApKSAvKiBVU0IgRklGTyBkYXRhICovCiAjZGVmaW5lICBVU0JfRVBfRlNUQVQoeCkJKDB4NDAgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gc3RhdHVzICovCiAjZGVmaW5lICBVU0JfRVBfRkNUUkwoeCkJKDB4NDQgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gY29udHJvbCAqLwotI2RlZmluZSAgVVNCX0VQX0xSRlAoeCkJCSgweDQ4ICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHJlYWQgZnJhbWUgcG9pbnRlciAqLwotI2RlZmluZSAgVVNCX0VQX0xXRlAoeCkJCSgweDRDICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHdyaXRlIGZyYW1lIHBvaW50ZXIgKi8KKyNkZWZpbmUgIFVTQl9FUF9MUkZQKHgpCQkoMHg0OCArICh4KjB4MzApKSAvKiBVU0IgbGFzdCByZCBmLiBwb2ludGVyICovCisjZGVmaW5lICBVU0JfRVBfTFdGUCh4KQkJKDB4NEMgKyAoeCoweDMwKSkgLyogVVNCIGxhc3Qgd3IgZi4gcG9pbnRlciAqLwogI2RlZmluZSAgVVNCX0VQX0ZBTFJNKHgpCSgweDUwICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGFsYXJtICovCiAjZGVmaW5lICBVU0JfRVBfRlJEUCh4KQkJKDB4NTQgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gcmVhZCBwb2ludGVyICovCiAjZGVmaW5lICBVU0JfRVBfRldSUCh4KQkJKDB4NTggKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gd3JpdGUgcG9pbnRlciAqLwpAQCAtMTcwLDcgKzE3Miw3IEBACiAvKiAjZGVmaW5lIERFQlVHX0lSUSAqLwogLyogI2RlZmluZSBERUJVR19FUElSUSAqLwogLyogI2RlZmluZSBERUJVR19EVU1QICovCi0jZGVmaW5lIERFQlVHX0VSUgorLyogI2RlZmluZSBERUJVR19FUlIgKi8KIAogI2lmZGVmIERFQlVHX1JFUQogCSNkZWZpbmUgRF9SRVEoZGV2LCBhcmdzLi4uKQlkZXZfZGJnKGRldiwgIyMgYXJncykKQEAgLTIyOCw3ICsyMzAsOCBAQAogI2VuZGlmIC8qIERFQlVHX0lSUSAqLwogCiAjaWZkZWYgREVCVUdfRVBJUlEKLQlzdGF0aWMgdm9pZCBkdW1wX2VwX2ludHIoY29uc3QgY2hhciAqbGFiZWwsIGludCBuciwgaW50IGlycXJlZywgc3RydWN0IGRldmljZSAqZGV2KQorCXN0YXRpYyB2b2lkIGR1bXBfZXBfaW50cihjb25zdCBjaGFyICpsYWJlbCwgaW50IG5yLCBpbnQgaXJxcmVnLAorCQkJCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKIAl7CiAJCWRldl9kYmcoZGV2LCAiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBuciwKIAkJCShpcnFyZWcgJiBFUElOVFJfRklGT19GVUxMKSA/ICIgZnVsbCIgOiAiIiwKQEAgLTI0Niw3ICsyNDksOCBAQAogI2VuZGlmIC8qIERFQlVHX0lSUSAqLwogCiAjaWZkZWYgREVCVUdfRFVNUAotCXN0YXRpYyB2b2lkIGR1bXBfdXNiX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYikKKwlzdGF0aWMgdm9pZCBkdW1wX3VzYl9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCQkJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQogCXsKIAkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOwogCkBAIC0yNTksMTIgKzI2MywxNSBAQAogCQkJKHRlbXAgJiBTVEFUX0FMVFNFVCkpOwogCX0KIAotCXN0YXRpYyB2b2lkIGR1bXBfZXBfc3RhdChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCkKKwlzdGF0aWMgdm9pZCBkdW1wX2VwX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsCisJCQkJCQlzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwKQogCXsKLQkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUihFUF9OTyhpbXhfZXApKSk7CisJCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9JTlRSKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19GVUxMKSA/ICIgZnVsbCIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRU1QVFkpID8gIiBmZW1wdHkiIDogIiIsCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0VSUk9SKSA/ICIgZmVyciIgOiAiIiwKQEAgLTI3NSwxOCArMjgyLDIyIEBACiAJCQkodGVtcCAmIEVQSU5UUl9ERVZSRVEpID8gIiBkZXZyZXEiIDogIiIsCiAJCQkodGVtcCAmIEVQSU5UUl9FT1QpID8gIiBlb3QiIDogIiIpOwogCi0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX1NUQVQ9WyVzJXMgYmNvdW50PSVkXVxuIiwgbGFiZWwsIEVQX05PKGlteF9lcCksCisJCQkiPCVzPiBFUCVkX1NUQVQ9WyVzJXMgYmNvdW50PSVkXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBFUFNUQVRfU0lQKSA/ICIgc2lwIiA6ICIiLAogCQkJKHRlbXAgJiBFUFNUQVRfU1RBTEwpID8gIiBzdGFsbCIgOiAiIiwKIAkJCSh0ZW1wICYgRVBTVEFUX0JDT1VOVCkgPj4gMTYpOwogCi0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UgKyBVU0JfRVBfRlNUQVQoRVBfTk8oaW14X2VwKSkpOworCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9GU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfRlNUQVQ9WyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIEVQX05PKGlteF9lcCksCisJCQkiPCVzPiBFUCVkX0ZTVEFUPVslcyVzJXMlcyVzJXMlc11cbiIsCisJCQlsYWJlbCwgRVBfTk8oaW14X2VwKSwKIAkJCSh0ZW1wICYgRlNUQVRfRVJSKSA/ICIgZmVyciIgOiAiIiwKIAkJCSh0ZW1wICYgRlNUQVRfVUYpID8gIiBmdW5kZXIiIDogIiIsCiAJCQkodGVtcCAmIEZTVEFUX09GKSA/ICIgZm92ZXIiIDogIiIsCkBAIC0yOTYsMTkgKzMwNywyMyBAQAogCQkJKHRlbXAgJiBGU1RBVF9FTVBUWSkgPyAiIGZlbXB0eSIgOiAiIik7CiAJfQogCi0Jc3RhdGljIHZvaWQgZHVtcF9yZXEoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQorCXN0YXRpYyB2b2lkIGR1bXBfcmVxKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQogCXsKIAkJaW50IGk7CiAKIAkJaWYgKCFyZXEgfHwgIXJlcS0+YnVmKSB7Ci0JCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiByZXEgb3IgcmVxIGJ1ZiBpcyBmcmVlXG4iLCBsYWJlbCk7CisJCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAorCQkJCQkiPCVzPiByZXEgb3IgcmVxIGJ1ZiBpcyBmcmVlXG4iLCBsYWJlbCk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUgPT0gRVAwX0lOX0RBVEFfUEhBU0UpCisJCWlmICgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZQorCQkJPT0gRVAwX0lOX0RBVEFfUEhBU0UpCiAJCQl8fCAoRVBfTk8oaW14X2VwKSAmJiBFUF9ESVIoaW14X2VwKSkpIHsKIAotCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gcmVxdWVzdCBkdW1wIDwiLCBsYWJlbCk7CisJCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAorCQkJCQkJIjwlcz4gcmVxdWVzdCBkdW1wIDwiLCBsYWJlbCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5sZW5ndGg7IGkrKykKIAkJCQlwcmludGsoIiUwMngtIiwgKigodTggKilyZXEtPmJ1ZiArIGkpKTsKIAkJCXByaW50aygiPlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IDMxN2I0OGYuLmQyMDkzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0xMzM0LDcgKzEzMzQsNyBAQAogCiAJcXVhbC5iTGVuZ3RoID0gc2l6ZW9mIHF1YWw7CiAJcXVhbC5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjsKLQlxdWFsLmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisJcXVhbC5iY2RVU0IgPSBjcHVfdG9fbGUxNiAoMHgwMjAwKTsKIAogCWRlc2MgPSBkZXYtPmRldjsKIAlxdWFsLmJEZXZpY2VDbGFzcyA9IGRlc2MtPmJEZXZpY2VDbGFzczsKQEAgLTE5MDgsNyArMTkwOCw3IEBACiAJCQl8fCBkZXYtPmRldi0+Yk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCiAJCWdvdG8gZmFpbDsKIAlkZXYtPmRldi0+Yk51bUNvbmZpZ3VyYXRpb25zID0gMTsKLQlkZXYtPmRldi0+YmNkVVNCID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKTsKKwlkZXYtPmRldi0+YmNkVVNCID0gY3B1X3RvX2xlMTYgKDB4MDIwMCk7CiAKIAkvKiB0cmlnZ2VycyBnYWRnZXRmc19iaW5kKCk7IHRoZW4gd2UgY2FuIGVudW1lcmF0ZS4gKi8KIAlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwppbmRleCBkNTU0YjA4Li42Y2QzZDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwpAQCAtNDMyLDggKzQzMiw4IEBACiAJZGV2aWNlX2FkZCgmZGV2LT5nYWRnZXQuZGV2KTsKIAlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJmRldi0+Z2FkZ2V0KTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50aygiJXM6IGJpbmQgdG8gZHJpdmVyICVzIC0tPiBlcnJvciAlZFxuIiwgZGV2LT5nYWRnZXQubmFtZSwKLQkJICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsCisJCSAgICAgICBkZXYtPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOwogCQlkZXZpY2VfZGVsKCZkZXYtPmdhZGdldC5kZXYpOwogCiAJCWRldi0+ZHJpdmVyID0gMDsKQEAgLTQ0NSw4ICs0NDUsOCBAQAogCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCiAJICogTk9URTogIHRoaXMgc2hvdWxkbid0IHBvd2VyIHVwIHVudGlsIGxhdGVyLgogCSAqLwotCXByaW50aygiJXM6IHJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkZXYtPmdhZGdldC5uYW1lLAotCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCisJICAgICAgIGRldi0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJdWRjX2VuYWJsZShkZXYpOwogCkBAIC01ODEsNyArNTgxLDggQEAKIAkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCiAJCQkgKi8KIAkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKLQkJCQlwcmludGsoIiVzIG92ZXJmbG93ICVkXG4iLCBlcC0+ZXAubmFtZSwgY291bnQpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIG92ZXJmbG93ICVkXG4iLAorCQkJCSAgICAgICBlcC0+ZXAubmFtZSwgY291bnQpOwogCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKIAkJfSBlbHNlIHsKIAkJCSpidWYrKyA9IGJ5dGU7CkBAIC04MzEsNyArODMyLDggQEAKIAkJCQkJCSAgICAgICBxdWV1ZSk7CiAKIAkJCQlpZiAoIXJlcSkgewotCQkJCQlwcmludGsoIiVzOiBOVUxMIFJFUSAlZFxuIiwKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAgICAgIiVzOiBOVUxMIFJFUSAlZFxuIiwKIAkJCQkJICAgICAgIF9fZnVuY19fLCBlcF9pZHgpOwogCQkJCQlmbHVzaChlcCk7CiAJCQkJCWJyZWFrOwpAQCAtODQ0LDcgKzg0Niw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBUaHJvdyBwYWNrZXQgYXdheS4uICovCi0JCXByaW50aygiJXM6IE5vIGRlc2NyaXB0b3I/IT9cbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIGRlc2NyaXB0b3I/IT9cbiIsIF9fZnVuY19fKTsKIAkJZmx1c2goZXApOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDEyYzZkODMuLjk0OThiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMTQyLDggKzE0Miw4IEBACiAKICNpbmNsdWRlICJuZXQyMjgwLmgiCiAKLSNkZWZpbmUgdmFsaWRfYml0CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgVkFMSURfQklUKQotI2RlZmluZSBkbWFfZG9uZV9pZQlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpCisjZGVmaW5lIHZhbGlkX2JpdAljcHVfdG9fbGUzMiAoMSA8PCBWQUxJRF9CSVQpCisjZGVmaW5lIGRtYV9kb25lX2llCWNwdV90b19sZTMyICgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQyNSw3ICs0MjUsNyBAQAogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCi0JCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFhZGRyID0gY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOwogCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOwogCQlyZXEtPnRkID0gdGQ7CiAJfQpAQCAtNzc1LDcgKzc3NSw3IEBACiAJZmlsbF9kbWFfZGVzYyAoZXAsIHJlcSwgMSk7CiAKIAlpZiAoIXVzZV9kbWFfY2hhaW5pbmcpCi0JCXJlcS0+dGQtPmRtYWNvdW50IHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRU5EX09GX0NIQUlOKTsKKwkJcmVxLT50ZC0+ZG1hY291bnQgfD0gY3B1X3RvX2xlMzIgKDEgPDwgRU5EX09GX0NIQUlOKTsKIAogCXN0YXJ0X3F1ZXVlIChlcCwgdG1wLCByZXEtPnRkX2RtYSk7CiB9CkBAIC0yNDA3LDkgKzI0MDcsOSBAQAogCiAJCQlpZiAocmVhZGwgKCZlLT5yZWdzLT5lcF9yc3ApCiAJCQkJCSYgKDEgPDwgU0VUX0VORFBPSU5UX0hBTFQpKQotCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQkJCXN0YXR1cyA9IGNwdV90b19sZTMyICgxKTsKIAkJCWVsc2UKLQkJCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCQlzdGF0dXMgPSBjcHVfdG9fbGUzMiAoMCk7CiAKIAkJCS8qIGRvbid0IGJvdGhlciB3aXRoIGEgcmVxdWVzdCBvYmplY3QhICovCiAJCQl3cml0ZWwgKDAsICZkZXYtPmVwcmVncyBbMF0uZXBfaXJxZW5iKTsKQEAgLTI2NjcsNyArMjY2Nyw3IEBACiAJCQkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCiAJCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CiAJCQkJZG1hY291bnQgPSByZXEtPnRkLT5kbWFjb3VudDsKLQkJCQlkbWFjb3VudCAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJCQlkbWFjb3VudCAmPSBjcHVfdG9fbGUzMiAoCiAJCQkJCQkoMSA8PCBWQUxJRF9CSVQpCiAJCQkJCQl8IERNQV9CWVRFX0NPVU5UX01BU0spOwogCQkJCWlmIChkbWFjb3VudCAmJiAoZG1hY291bnQgJiB2YWxpZF9iaXQpID09IDApCkBAIC0yODgxLDcgKzI4ODEsNyBAQAogCQkJZ290byBkb25lOwogCQl9CiAJCXRkLT5kbWFjb3VudCA9IDA7CS8qIG5vdCBWQUxJRCAqLwotCQl0ZC0+ZG1hYWRkciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOworCQl0ZC0+ZG1hYWRkciA9IGNwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKIAkJdGQtPmRtYWRlc2MgPSB0ZC0+ZG1hYWRkcjsKIAkJZGV2LT5lcCBbaV0uZHVtbXkgPSB0ZDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCA1YTMwMzRmLi4yOTUwMDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTIyNSwxMiArMjI1LDEyIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCiAJLmJEZXZpY2VQcm90b2NvbCA9CTAsCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKSwKIAkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCiAJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULAogCS5pU2VyaWFsTnVtYmVyID0JU1RSSU5HX1NFUklBTE5VTSwKQEAgLTI5OSwyMCArMjk5LDIwIEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKQogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lcF9vdXRfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMikKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvciBkZXZfcXVhbGlmaWVyID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUFJJTlRFUiwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMQogfTsKQEAgLTE0MDYsMTYgKzE0MDYsMTYgQEAKIAkJCWdhZGdldC0+bmFtZSk7CiAJCS8qIHVucmVjb2duaXplZCwgYnV0IHNhZmUgdW5sZXNzIGJ1bGsgaXMgUkVBTExZIHF1aXJreSAqLwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweEZGRkYpOworCQkJY3B1X3RvX2xlMTYoMHhGRkZGKTsKIAl9CiAJc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSwgIiVzICVzIHdpdGggJXMiLAogCQlpbml0X3V0c25hbWUoKS0+c3lzbmFtZSwgaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCWdhZGdldC0+bmFtZSk7CiAKIAlkZXZpY2VfZGVzYy5pZFZlbmRvciA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKTsKKwkJY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKTsKIAlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pOworCQljcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKTsKIAogCS8qIHN1cHBvcnQgb3B0aW9uYWwgdmVuZG9yL2Rpc3RybyBjdXN0b21pemF0aW9uICovCiAJaWYgKGlkVmVuZG9yKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCA5OTBmNDBmLi44Y2M2NzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTI3OCw3ICsyNzksNyBAQAogCQlnb3RvIGVycl9xdWV1ZXM7CiAJZXBzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZXBzdGF0ZSIsIDA0MDAsIHJvb3QsIHVkYywKIAkJCSZlcHNfZGJnX2ZvcHMpOwotCWlmICghcXVldWVzKQorCWlmICghZXBzKQogCQlnb3RvIGVycl9lcHM7CiAKIAl1ZGMtPmRlYnVnZnNfcm9vdCA9IHJvb3Q7CkBAIC03NDcsMTMgKzc0OCwxMyBAQAogfQogCiAvKioKLSAqIGVwX2VuZF9vdXRfcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IGluIHJlcXVlc3QKKyAqIGVwX2VuZF9vdXRfcmVxIC0gRW5kcyBlbmRwb2ludCBPVVQgcmVxdWVzdAogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBlbmRwb2ludCBpbiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgorICogRW5kcyBlbmRwb2ludCBPVVQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KICAqLwogc3RhdGljIHZvaWQgZXBfZW5kX291dF9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewpAQCAtNzYyLDEzICs3NjMsMTMgQEAKIH0KIAogLyoqCi0gKiBlcDBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgaW4gcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQorICogZXAwX2VuZF9vdXRfcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IE9VVCByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgaW4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKKyAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBPVVQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKICAqIGNvbnRyb2wgZW5kcG9pbnQgaW50byBpZGxlIHN0YXRlCiAgKi8KIHN0YXRpYyB2b2lkIGVwMF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCkBAIC03NzksMTMgKzc4MCwxMyBAQAogfQogCiAvKioKLSAqIGVwX2VuZF9pbl9yZXEgLSBFbmRzIGVuZHBvaW50IG91dCByZXF1ZXN0CisgKiBlcF9lbmRfaW5fcmVxIC0gRW5kcyBlbmRwb2ludCBJTiByZXF1ZXN0CiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGVuZHBvaW50IG91dCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgorICogRW5kcyBlbmRwb2ludCBJTiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgogICovCiBzdGF0aWMgdm9pZCBlcF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKQEAgLTc5NCwyMCArNzk1LDE4IEBACiB9CiAKIC8qKgotICogZXAwX2VuZF9pbl9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgb3V0IHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKKyAqIGVwMF9lbmRfaW5fcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IElOIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBvdXQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKKyAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBJTiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cwogICogY29udHJvbCBlbmRwb2ludCBpbnRvIHN0YXR1cyBzdGF0ZQogICovCiBzdGF0aWMgdm9pZCBlcDBfZW5kX2luX3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IHB4YV91ZGMgKnVkYyA9IGVwLT5kZXY7Ci0KLQlzZXRfZXAwc3RhdGUodWRjLCBJTl9TVEFUVVNfU1RBR0UpOworCXNldF9lcDBzdGF0ZShlcC0+ZGV2LCBJTl9TVEFUVVNfU1RBR0UpOwogCWVwX2VuZF9pbl9yZXEoZXAsIHJlcSk7CiB9CiAKQEAgLTExNjcsNyArMTE2Niw3IEBACiAJCQkJZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKIAkJCX0gZWxzZSB7CiAJCQkJZXBfZXJyKGVwLCAiZ290IGEgcmVxdWVzdCBvZiAlZCBieXRlcyB3aGlsZSIKLQkJCQkJImluIHN0YXRlIFdBVElfQUNLX1NFVF9DT05GX0lOVEVSRlxuIiwKKwkJCQkJImluIHN0YXRlIFdBSVRfQUNLX1NFVF9DT05GX0lOVEVSRlxuIiwKIAkJCQkJbGVuZ3RoKTsKIAkJCQllcF9kZWxfcmVxdWVzdChlcCwgcmVxKTsKIAkJCQlyYyA9IC1FTDJITFQ7CkBAIC0xMjEzLDMwICsxMjEyLDI2IEBACiAJc3RydWN0IHVkY191c2JfZXAJKnVkY191c2JfZXA7CiAJc3RydWN0IHB4YTI3eF9yZXF1ZXN0CSpyZXE7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JaW50CQkJcmM7CisJaW50CQkJcmMgPSAtRUlOVkFMOwogCiAJaWYgKCFfZXApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmM7CiAJdWRjX3VzYl9lcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCB1ZGNfdXNiX2VwLCB1c2JfZXApOwogCWVwID0gdWRjX3VzYl9lcC0+cHhhX2VwOwogCWlmICghZXAgfHwgaXNfZXAwKGVwKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwogCiAJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKLQkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpIHsKKwkJCXJlcV9kb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwkJCXJjID0gMDsKIAkJCWJyZWFrOworCQl9CiAJfQogCi0JcmMgPSAtRUlOVkFMOwotCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkKLQkJZ290byBvdXQ7Ci0KLQlyYyA9IDA7Ci0JcmVxX2RvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOwotb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTQ3MSw2ICsxNDY2LDMyIEBACiAJLmZpZm9fZmx1c2gJPSBweGFfZXBfZmlmb19mbHVzaCwKIH07CiAKKy8qKgorICogZHBsdXNfcHVsbHVwIC0gQ29ubmVjdCBvciBkaXNjb25uZWN0IHB1bGx1cCByZXNpc3RvciB0byBEKyBwaW4KKyAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIEBvbjogMCBpZiBkaXNjb25uZWN0IHB1bGx1cCByZXNpc3RvciwgMSBvdGhlcndpc2UKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIEhhbmRsZSBEKyBwdWxsdXAgcmVzaXN0b3IsIG1ha2UgdGhlIGRldmljZSB2aXNpYmxlIHRvIHRoZSB1c2IgYnVzLCBhbmQKKyAqIGRlY2xhcmUgaXQgYXMgYSBmdWxsIHNwZWVkIHVzYiBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZHBsdXNfcHVsbHVwKHN0cnVjdCBweGFfdWRjICp1ZGMsIGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCkpCisJCQlncGlvX3NldF92YWx1ZSh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwLAorCQkJCSAgICAgICAhdWRjLT5tYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZCk7CisJCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQorCQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9DT05ORUNUKTsKKwl9IGVsc2UgeworCQlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXAsCisJCQkJICAgICAgIHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXBfaW52ZXJ0ZWQpOworCQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCk7CisJfQorCXVkYy0+cHVsbHVwX29uID0gb247Cit9CiAKIC8qKgogICogcHhhX3VkY19nZXRfZnJhbWUgLSBSZXR1cm5zIHVzYiBmcmFtZSBudW1iZXIKQEAgLTE1MDAsMjEgKzE1MjEsMTQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CitzdGF0aWMgdm9pZCB1ZGNfZGlzYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKKworLyoqCisgKiBzaG91bGRfZW5hYmxlX3VkYyAtIFRlbGxzIGlmIFVEQyBzaG91bGQgYmUgZW5hYmxlZAorICogQHVkYzogdWRjIGRldmljZQorICogQ29udGV4dDogYW55CisgKgorICogVGhlIFVEQyBzaG91bGQgYmUgZW5hYmxlZCBpZiA6CisKKyAqICAtIHRoZSBwdWxsdXAgcmVzaXN0b3IgaXMgY29ubmVjdGVkCisgKiAgLSBhbmQgYSBnYWRnZXQgZHJpdmVyIGlzIGJvdW5kCisgKiAgLSBhbmQgdmJ1cyBpcyBzZW5zZWQgKG9yIG5vIHZidXMgc2Vuc2UgaXMgYXZhaWxhYmxlKQorICoKKyAqIFJldHVybnMgMSBpZiBVREMgc2hvdWxkIGJlIGVuYWJsZWQsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgc2hvdWxkX2VuYWJsZV91ZGMoc3RydWN0IHB4YV91ZGMgKnVkYykKK3sKKwlpbnQgcHV0X29uOworCisJcHV0X29uID0gKCh1ZGMtPnB1bGx1cF9vbikgJiYgKHVkYy0+ZHJpdmVyKSk7CisJcHV0X29uICY9ICgodWRjLT52YnVzX3NlbnNlZCkgfHwgKCF1ZGMtPnRyYW5zY2VpdmVyKSk7CisJcmV0dXJuIHB1dF9vbjsKK30KKworLyoqCisgKiBzaG91bGRfZGlzYWJsZV91ZGMgLSBUZWxscyBpZiBVREMgc2hvdWxkIGJlIGRpc2FibGVkCisgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBUaGUgVURDIHNob3VsZCBiZSBkaXNhYmxlZCBpZiA6CisgKiAgLSB0aGUgcHVsbHVwIHJlc2lzdG9yIGlzIG5vdCBjb25uZWN0ZWQKKyAqICAtIG9yIG5vIGdhZGdldCBkcml2ZXIgaXMgYm91bmQKKyAqICAtIG9yIG5vIHZidXMgaXMgc2Vuc2VkICh3aGVuIHZidXMgc2VzaW5nIGlzIGF2YWlsYWJsZSkKKyAqCisgKiBSZXR1cm5zIDEgaWYgVURDIHNob3VsZCBiZSBkaXNhYmxlZAorICovCitzdGF0aWMgaW50IHNob3VsZF9kaXNhYmxlX3VkYyhzdHJ1Y3QgcHhhX3VkYyAqdWRjKQoreworCWludCBwdXRfb2ZmOworCisJcHV0X29mZiA9ICgoIXVkYy0+cHVsbHVwX29uKSB8fCAoIXVkYy0+ZHJpdmVyKSk7CisJcHV0X29mZiB8PSAoKCF1ZGMtPnZidXNfc2Vuc2VkKSAmJiAodWRjLT50cmFuc2NlaXZlcikpOworCXJldHVybiBwdXRfb2ZmOworfQorCisvKioKKyAqIHB4YV91ZGNfcHVsbHVwIC0gT2ZmZXIgbWFudWFsIEQrIHB1bGx1cCBjb250cm9sCisgKiBAX2dhZGdldDogdXNiIGdhZGdldCB1c2luZyB0aGUgY29udHJvbAorICogQGlzX2FjdGl2ZTogMCBpZiBkaXNjb25uZWN0LCBlbHNlIGNvbm5lY3QgRCsgcHVsbHVwIHJlc2lzdG9yCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXR1cm5zIDAgaWYgT0ssIC1FT1BOT1RTVVBQIGlmIHVkYyBkcml2ZXIgZG9lc24ndCBoYW5kbGUgRCsgcHVsbHVwCisgKi8KK3N0YXRpYyBpbnQgcHhhX3VkY19wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHRvX2dhZGdldF91ZGMoX2dhZGdldCk7CisKKwlpZiAoIWdwaW9faXNfdmFsaWQodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCkgJiYgIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWRwbHVzX3B1bGx1cCh1ZGMsIGlzX2FjdGl2ZSk7CisKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOworCWlmIChzaG91bGRfZGlzYWJsZV91ZGModWRjKSkKKwkJdWRjX2Rpc2FibGUodWRjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworCisvKioKKyAqIHB4YV91ZGNfdmJ1c19zZXNzaW9uIC0gQ2FsbGVkIGJ5IGV4dGVybmFsIHRyYW5zY2VpdmVyIHRvIGVuYWJsZS9kaXNhYmxlIHVkYworICogQF9nYWRnZXQ6IHVzYiBnYWRnZXQKKyAqIEBpc19hY3RpdmU6IDAgaWYgc2hvdWxkIGRpc2FibGUgdGhlIHVkYywgMSBpZiBzaG91bGQgZW5hYmxlCisgKgorICogRW5hYmxlcyB0aGUgdWRjLCBhbmQgb3B0aW9ubmFseSBhY3RpdmF0ZXMgRCsgcHVsbHVwIHJlc2lzdG9yLiBPciBkaXNhYmxlcyB0aGUKKyAqIHVkYywgYW5kIGRlYWN0aXZhdGVzIEQrIHB1bGx1cCByZXNpc3Rvci4KKyAqCisgKiBSZXR1cm5zIDAKKyAqLworc3RhdGljIGludCBweGFfdWRjX3ZidXNfc2Vzc2lvbihzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gdG9fZ2FkZ2V0X3VkYyhfZ2FkZ2V0KTsKKworCXVkYy0+dmJ1c19zZW5zZWQgPSBpc19hY3RpdmU7CisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKKwlpZiAoc2hvdWxkX2Rpc2FibGVfdWRjKHVkYykpCisJCXVkY19kaXNhYmxlKHVkYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBweGFfdWRjX3ZidXNfZHJhdyAtIENhbGxlZCBieSBnYWRnZXQgZHJpdmVyIGFmdGVyIFNFVF9DT05GSUdVUkFUSU9OIGNvbXBsZXRlZAorICogQF9nYWRnZXQ6IHVzYiBnYWRnZXQKKyAqIEBtQTogY3VycmVudCBkcmF3bgorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIENhbGxlZCBhZnRlciBhIGNvbmZpZ3VyYXRpb24gd2FzIGNob3NlbiBieSBhIFVTQiBob3N0LCB0byBpbmZvcm0gaG93IG11Y2gKKyAqIGN1cnJlbnQgY2FuIGJlIGRyYXduIGJ5IHRoZSBkZXZpY2UgZnJvbSBWQnVzIGxpbmUuCisgKgorICogUmV0dXJucyAwIG9yIC1FT1BOT1RTVVBQIGlmIG5vIHRyYW5zY2VpdmVyIGlzIGhhbmRsaW5nIHRoZSB1ZGMKKyAqLworc3RhdGljIGludCBweGFfdWRjX3ZidXNfZHJhdyhzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgdW5zaWduZWQgbUEpCit7CisJc3RydWN0IHB4YV91ZGMgKnVkYzsKKworCXVkYyA9IHRvX2dhZGdldF91ZGMoX2dhZGdldCk7CisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCXJldHVybiBvdGdfc2V0X3Bvd2VyKHVkYy0+dHJhbnNjZWl2ZXIsIG1BKTsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcHhhX3VkY19vcHMgPSB7CiAJLmdldF9mcmFtZQk9IHB4YV91ZGNfZ2V0X2ZyYW1lLAogCS53YWtldXAJCT0gcHhhX3VkY193YWtldXAsCi0JLyogY3VycmVudCB2ZXJzaW9ucyBtdXN0IGFsd2F5cyBiZSBzZWxmLXBvd2VyZWQgKi8KKwkucHVsbHVwCQk9IHB4YV91ZGNfcHVsbHVwLAorCS52YnVzX3Nlc3Npb24JPSBweGFfdWRjX3ZidXNfc2Vzc2lvbiwKKwkudmJ1c19kcmF3CT0gcHhhX3VkY192YnVzX2RyYXcsCiB9OwogCiAvKioKICAqIHVkY19kaXNhYmxlIC0gZGlzYWJsZSB1ZGMgZGV2aWNlIGNvbnRyb2xsZXIKICAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIENvbnRleHQ6IGFueQogICoKICAqIERpc2FibGVzIHRoZSB1ZGMgZGV2aWNlIDogZGlzYWJsZXMgY2xvY2tzLCB1ZGMgaW50ZXJydXB0cywgY29udHJvbCBlbmRwb2ludAogICogaW50ZXJydXB0cy4KICAqLwogc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YV91ZGMgKnVkYykKIHsKKwlpZiAoIXVkYy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjAsIDApOwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IxLCAwKTsKIApAQCAtMTUyMyw4ICsxNjY4LDggQEAKIAogCWVwMF9pZGxlKHVkYyk7CiAJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKLQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKLQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUKTsKKworCXVkYy0+ZW5hYmxlZCA9IDA7CiB9CiAKIC8qKgpAQCAtMTU1NSwxMCArMTcwMCw5IEBACiAJfQogCiAJLyogVVNCIGVuZHBvaW50cyBpbml0ICovCi0JZm9yIChpID0gMDsgaSA8IE5SX1VTQl9FTkRQT0lOVFM7IGkrKykKLQkJaWYgKGkgIT0gMCkKLQkJCWxpc3RfYWRkX3RhaWwoJmRldi0+dWRjX3VzYl9lcFtpXS51c2JfZXAuZXBfbGlzdCwKLQkJCQkJJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWZvciAoaSA9IDE7IGkgPCBOUl9VU0JfRU5EUE9JTlRTOyBpKyspCisJCWxpc3RfYWRkX3RhaWwoJmRldi0+dWRjX3VzYl9lcFtpXS51c2JfZXAuZXBfbGlzdCwKKwkJCQkmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CiB9CiAKIC8qKgpAQCAtMTU3MCw2ICsxNzE0LDkgQEAKICAqLwogc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKQogeworCWlmICh1ZGMtPmVuYWJsZWQpCisJCXJldHVybjsKKwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IwLCAwKTsKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMSwgMCk7CiAJdWRjX2NsZWFyX21hc2tfVURDQ1IodWRjLCBVRENDUl9VREUpOwpAQCAtMTU5OCw5ICsxNzQ1LDcgQEAKIAkvKiBlbmFibGUgZXAwIGlycXMgKi8KIAlwaW9faXJxX2VuYWJsZSgmdWRjLT5weGFfZXBbMF0pOwogCi0JZGV2X2luZm8odWRjLT5kZXYsICJVREMgY29ubmVjdGluZ1xuIik7Ci0JaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCi0JCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfQ09OTkVDVCk7CisJdWRjLT5lbmFibGVkID0gMTsKIH0KIAogLyoqCkBAIC0xNjEyLDYgKzE3NTcsOSBAQAogICogdXNiIHRyYWZmaWMgZm9sbG93cyB1bnRpbCBhIGRpc2Nvbm5lY3QgaXMgcmVwb3J0ZWQuICBUaGVuIGEgaG9zdCBtYXkgY29ubmVjdAogICogYWdhaW4sIG9yIHRoZSBkcml2ZXIgbWlnaHQgZ2V0IHVuYm91bmQuCiAgKgorICogTm90ZSB0aGF0IHRoZSB1ZGMgaXMgbm90IGF1dG9tYXRpY2FsbHkgZW5hYmxlZC4gQ2hlY2sgZnVuY3Rpb24KKyAqIHNob3VsZF9lbmFibGVfdWRjKCkuCisgKgogICogUmV0dXJucyAwIGlmIG5vIGVycm9yLCAtRUlOVkFMLCAtRU5PREVWLCAtRUJVU1kgb3RoZXJ3aXNlCiAgKi8KIGludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKQEAgLTE2MzAsNiArMTc3OCw3IEBACiAJLyogZmlyc3QgaG9vayB1cCB0aGUgZHJpdmVyIC4uLiAqLwogCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJZHBsdXNfcHVsbHVwKHVkYywgMSk7CiAKIAlyZXR2YWwgPSBkZXZpY2VfYWRkKCZ1ZGMtPmdhZGdldC5kZXYpOwogCWlmIChyZXR2YWwpIHsKQEAgLTE2NDUsOSArMTc5NCwyMSBAQAogCWRldl9kYmcodWRjLT5kZXYsICJyZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKIAkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKLQl1ZGNfZW5hYmxlKHVkYyk7CisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpIHsKKwkJcmV0dmFsID0gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsICZ1ZGMtPmdhZGdldCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIodWRjLT5kZXYsICJjYW4ndCBiaW5kIHRvIHRyYW5zY2VpdmVyXG4iKTsKKwkJCWdvdG8gdHJhbnNjZWl2ZXJfZmFpbDsKKwkJfQorCX0KKworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CiAJcmV0dXJuIDA7CiAKK3RyYW5zY2VpdmVyX2ZhaWw6CisJaWYgKGRyaXZlci0+dW5iaW5kKQorCQlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOwogYmluZF9mYWlsOgogCWRldmljZV9kZWwoJnVkYy0+Z2FkZ2V0LmRldik7CiBhZGRfZmFpbDoKQEAgLTE2OTksMTQgKzE4NjAsMTcgQEAKIAogCXN0b3BfYWN0aXZpdHkodWRjLCBkcml2ZXIpOwogCXVkY19kaXNhYmxlKHVkYyk7CisJZHBsdXNfcHVsbHVwKHVkYywgMCk7CiAKIAlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOwogCXVkYy0+ZHJpdmVyID0gTlVMTDsKIAogCWRldmljZV9kZWwoJnVkYy0+Z2FkZ2V0LmRldik7Ci0KIAlkZXZfaW5mbyh1ZGMtPmRldiwgInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCiAJCSBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlyZXR1cm4gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsIE5VTEwpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE4MjMsMTQgKzE5ODcsMTQgQEAKIAlzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QJKnJlcSA9IE5VTEw7CiAJaW50CQkJY29tcGxldGVkID0gMDsKIAorCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCBxdWV1ZSk7CisKIAl1ZGNjc3IwID0gdWRjX2VwX3JlYWRsKGVwLCBVRENDU1IpOwogCWVwX2RiZyhlcCwgInN0YXRlPSVzLCByZXE9JXAsIHVkY2NzcjA9MHglMDN4LCB1ZGNiY3I9JWQsIGlycV9tc2s9JXhcbiIsCiAJCUVQMF9TVE5BTUUodWRjKSwgcmVxLCB1ZGNjc3IwLCB1ZGNfZXBfcmVhZGwoZXAsIFVEQ0JDUiksCiAJCShmaWZvX2lycSA8PCAxIHwgb3BjX2lycSkpOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQotCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QsIHF1ZXVlKTsKLQogCWlmICh1ZGNjc3IwICYgVURDQ1NSMF9TU1QpIHsKIAkJZXBfZGJnKGVwLCAiY2xlYXJpbmcgc3RhbGwgc3RhdHVzXG4iKTsKIAkJbnVrZShlcCwgLUVQSVBFKTsKQEAgLTIyMTIsNyArMjM3Niw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlICpyZWdzOwogCXN0cnVjdCBweGFfdWRjICp1ZGMgPSAmbWVtb3J5OwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDAsIGdwaW87CiAKIAlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlZ3MpCkBAIC0yMjIzLDYgKzIzODcsMjAgQEAKIAogCXVkYy0+ZGV2ID0gJnBkZXYtPmRldjsKIAl1ZGMtPm1hY2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1ZGMtPnRyYW5zY2VpdmVyID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCisJZ3BpbyA9IHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXA7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKKwkJcmV0dmFsID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJVU0IgRCsgcHVsbHVwIik7CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLAorCQkJCSAgICAgICB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkKTsKKwl9CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCByZXF1ZXN0IGdwaW8gJWQgOiAlZFxuIiwKKwkJCWdwaW8sIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJdWRjLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIodWRjLT5jbGspKSB7CkBAIC0yMjQwLDYgKzI0MTgsNyBAQAogCWRldmljZV9pbml0aWFsaXplKCZ1ZGMtPmdhZGdldC5kZXYpOwogCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCXVkYy0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IE5VTEw7CisJdWRjLT52YnVzX3NlbnNlZCA9IDA7CiAKIAl0aGVfY29udHJvbGxlciA9IHVkYzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB1ZGMpOwpAQCAtMjI3MywxNCArMjQ1MiwyMSBAQAogc3RhdGljIGludCBfX2V4aXQgcHhhX3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoX2Rldik7CisJaW50IGdwaW8gPSB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwOwogCiAJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcih1ZGMtPmRyaXZlcik7CiAJZnJlZV9pcnEodWRjLT5pcnEsIHVkYyk7CiAJcHhhX2NsZWFudXBfZGVidWdmcyh1ZGMpOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW8pKQorCQlncGlvX2ZyZWUoZ3Bpbyk7CiAKKwlvdGdfcHV0X3RyYW5zY2VpdmVyKHVkYy0+dHJhbnNjZWl2ZXIpOworCisJdWRjLT50cmFuc2NlaXZlciA9IE5VTEw7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCWNsa19wdXQodWRjLT5jbGspOworCWlvdW5tYXAodWRjLT5yZWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMxOSw2ICsyNTA1LDggQEAKIAl9CiAKIAl1ZGNfZGlzYWJsZSh1ZGMpOworCXVkYy0+cHVsbHVwX3Jlc3VtZSA9IHVkYy0+cHVsbHVwX29uOworCWRwbHVzX3B1bGx1cCh1ZGMsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQ2LDcgKzI1MzQsOSBAQAogCQkJCWVwLT51ZGNjc3JfdmFsdWUsIGVwLT51ZGNjcl92YWx1ZSk7CiAJfQogCi0JdWRjX2VuYWJsZSh1ZGMpOworCWRwbHVzX3B1bGx1cCh1ZGMsIHVkYy0+cHVsbHVwX3Jlc3VtZSk7CisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKIAkvKgogCSAqIFdlIGRvIG5vdCBoYW5kbGUgT1RHIHlldC4KIAkgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKaW5kZXggMWQxYjc5MzYuLmRiNTgxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KIAogLyoKICAqIFJlZ2lzdGVyIGRlZmluaXRpb25zCkBAIC00MjEsMTAgKzQyMiwxNCBAQAogICogQGRyaXZlcjogYm91bmQgZ2FkZ2V0ICh6ZXJvLCBnX2V0aGVyLCBnX2ZpbGVfc3RvcmFnZSwgLi4uKQogICogQGRldjogZGV2aWNlCiAgKiBAbWFjaDogbWFjaGluZSBpbmZvLCB1c2VkIHRvIGFjdGl2YXRlIHNwZWNpZmljIEdQSU8KKyAqIEB0cmFuc2NlaXZlcjogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgdG8gaGFuZGxlIHZidXMgc2Vuc2UgYW5kIEQrIHB1bGx1cAogICogQGVwMHN0YXRlOiBjb250cm9sIGVuZHBvaW50IHN0YXRlIG1hY2hpbmUgc3RhdGUKICAqIEBzdGF0czogc3RhdGlzdGljcyBvbiB1ZGMgdXNhZ2UKICAqIEB1ZGNfdXNiX2VwOiBhcnJheSBvZiB1c2IgZW5kcG9pbnRzIG9mZmVyZWQgYnkgdGhlIGdhZGdldAogICogQHB4YV9lcDogYXJyYXkgb2YgcHhhIGF2YWlsYWJsZSBlbmRwb2ludHMKKyAqIEBlbmFibGVkOiBVREMgd2FzIGVuYWJsZWQgYnkgYSBwcmV2aW91cyB1ZGNfZW5hYmxlKCkKKyAqIEBwdWxsdXBfb246IGlmIHB1bGx1cCByZXNpc3RvciBjb25uZWN0ZWQgdG8gRCsgcGluCisgKiBAcHVsbHVwX3Jlc3VtZTogaWYgcHVsbHVwIHJlc2lzdG9yIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gRCsgcGluIG9uIHJlc3VtZQogICogQGNvbmZpZzogVURDIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAgKiBAbGFzdF9pbnRlcmZhY2U6IFVEQyBpbnRlcmZhY2Ugb2YgdGhlIGxhc3QgU0VUX0lOVEVSRkFDRSBob3N0IHJlcXVlc3QKICAqIEBsYXN0X2FsdGVybmF0ZTogVURDIGFsdHNldHRpbmcgb2YgdGhlIGxhc3QgU0VUX0lOVEVSRkFDRSBob3N0IHJlcXVlc3QKQEAgLTQ0Myw2ICs0NDgsNyBAQAogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkJKmRyaXZlcjsKIAlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CiAJc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvCQkqbWFjaDsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCQkJKnRyYW5zY2VpdmVyOwogCiAJZW51bSBlcDBfc3RhdGUJCQkJZXAwc3RhdGU7CiAJc3RydWN0IHVkY19zdGF0cwkJCXN0YXRzOwpAQCAtNDUwLDYgKzQ1NiwxMCBAQAogCXN0cnVjdCB1ZGNfdXNiX2VwCQkJdWRjX3VzYl9lcFtOUl9VU0JfRU5EUE9JTlRTXTsKIAlzdHJ1Y3QgcHhhX2VwCQkJCXB4YV9lcFtOUl9QWEFfRU5EUE9JTlRTXTsKIAorCXVuc2lnbmVkCQkJCWVuYWJsZWQ6MTsKKwl1bnNpZ25lZAkJCQlwdWxsdXBfb246MTsKKwl1bnNpZ25lZAkJCQlwdWxsdXBfcmVzdW1lOjE7CisJdW5zaWduZWQJCQkJdmJ1c19zZW5zZWQ6MTsKIAl1bnNpZ25lZAkJCQljb25maWc6MjsKIAl1bnNpZ25lZAkJCQlsYXN0X2ludGVyZmFjZTozOwogCXVuc2lnbmVkCQkJCWxhc3RfYWx0ZXJuYXRlOjM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCmluZGV4IDhjMjZmNWUuLjJiNDY2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgcm5kaXNfcGFyYW1zIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtSTkRJU19NQVhfQ09ORklHU107CiAKIC8qIERyaXZlciBWZXJzaW9uICovCi1zdGF0aWMgY29uc3QgX19sZTMyIHJuZGlzX2RyaXZlcl92ZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CitzdGF0aWMgY29uc3QgX19sZTMyIHJuZGlzX2RyaXZlcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIgKDEpOwogCiAvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCiBzdGF0aWMgcm5kaXNfcmVzcF90ICpybmRpc19hZGRfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTMyIGxlbmd0aCk7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAlpbnQJCQlpLCBjb3VudDsKIAlybmRpc19xdWVyeV9jbXBsdF90eXBlCSpyZXNwOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJKnN0YXRzOworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCSpzdGF0czsKIAogCWlmICghcikgcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKQEAgLTE5MCwxMyArMTkwLDEwIEBACiAKIAkvKiByZXNwb25zZSBnb2VzIGhlcmUsIHJpZ2h0IGFmdGVyIHRoZSBoZWFkZXIgKi8KIAlvdXRidWYgPSAoX19sZTMyICopICZyZXNwWzFdOwotCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDE2KTsKIAogCW5ldCA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zW2NvbmZpZ05yXS5kZXY7Ci0JaWYgKG5ldC0+Z2V0X3N0YXRzKQotCQlzdGF0cyA9IG5ldC0+Z2V0X3N0YXRzKG5ldCk7Ci0JZWxzZQotCQlzdGF0cyA9IE5VTEw7CisJc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKG5ldCk7CiAKIAlzd2l0Y2ggKE9JRCkgewogCkBAIC0yMjEsNyArMjE4LDcgQEAKIAkJICogcmVkZGl0ZSBlcmdvIHF1YWUgc3VudCBDYWVzYXJpcyBDYWVzYXJpCiAJCSAqIGV0IHF1YWUgc3VudCBEZWkgRGVvIQogCQkgKi8KLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMjU2LDcgKzI1Myw3IEBACiAJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTElOS19TUEVFRFxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQogCQkJCT09IE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVEKQotCQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJZWxzZQogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgKIAkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnNwZWVkKTsKQEAgLTMxNyw3ICszMTQsNyBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU6CiAJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUk5ESVNfTUFYX1RPVEFMX1NJWkUpOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoUk5ESVNfTUFYX1RPVEFMX1NJWkUpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMzMyLDcgKzMyOSw3IEBACiAKIAljYXNlIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTM0Miw3ICszMzksNyBAQAogCSAqLwogCWNhc2UgT0lEX0dFTl9NQUNfT1BUSU9OUzoJCS8qIGZyb20gV2luTUUgKi8KIAkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoCiAJCQkgIE5ESVNfTUFDX09QVElPTl9SRUNFSVZFX1NFUklBTElaRUQKIAkJCXwgTkRJU19NQUNfT1BUSU9OX0ZVTExfRFVQTEVYKTsKIAkJcmV0dmFsID0gMDsKQEAgLTQzMSw3ICs0MjgsNyBAQAogCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NVUxUSUNBU1RfTElTVFxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4RTAwMDAwMDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDB4RTAwMDAwMDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtNDM5LDcgKzQzNiw3IEBACiAJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC00NjEsMTQgKzQ1OCwxNCBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTjoKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUzoKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlNcbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtNTcyLDI0ICs1NjksMjQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19pbml0X2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyICgKIAkJCVJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICg1Mik7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICg1Mik7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KLQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JcmVzcC0+TWFqb3JWZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfTUFKT1JfVkVSU0lPTik7Ci0JcmVzcC0+TWlub3JWZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfTUlOT1JfVkVSU0lPTik7Ci0JcmVzcC0+RGV2aWNlRmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19ERl9DT05ORUNUSU9OTEVTUyk7Ci0JcmVzcC0+TWVkaXVtID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfTUVESVVNXzgwMl8zKTsKLQlyZXNwLT5NYXhQYWNrZXRzUGVyVHJhbnNmZXIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPk1ham9yVmVyc2lvbiA9IGNwdV90b19sZTMyIChSTkRJU19NQUpPUl9WRVJTSU9OKTsKKwlyZXNwLT5NaW5vclZlcnNpb24gPSBjcHVfdG9fbGUzMiAoUk5ESVNfTUlOT1JfVkVSU0lPTik7CisJcmVzcC0+RGV2aWNlRmxhZ3MgPSBjcHVfdG9fbGUzMiAoUk5ESVNfREZfQ09OTkVDVElPTkxFU1MpOworCXJlc3AtPk1lZGl1bSA9IGNwdV90b19sZTMyIChSTkRJU19NRURJVU1fODAyXzMpOworCXJlc3AtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IGNwdV90b19sZTMyICgxKTsKIAlyZXNwLT5NYXhUcmFuc2ZlclNpemUgPSBjcHVfdG9fbGUzMiAoCiAJCSAgcGFyYW1zLT5kZXYtPm10dQogCQkrIHNpemVvZiAoc3RydWN0IGV0aGhkcikKIAkJKyBzaXplb2YgKHN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUpCiAJCSsgMjIpOwotCXJlc3AtPlBhY2tldEFsaWdubWVudEZhY3RvciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCXJlc3AtPkFGTGlzdE9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCXJlc3AtPkFGTGlzdFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwlyZXNwLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSBjcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0T2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPkFGTGlzdFNpemUgPSBjcHVfdG9fbGUzMiAoMCk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTYxNyw3ICs2MTQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCiAKIAlpZiAoZ2VuX25kaXNfcXVlcnlfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksCkBAIC02MjYsMTMgKzYyMywxMyBAQAogCQkJbGUzMl90b19jcHUoYnVmLT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCksCiAJCQlyKSkgewogCQkvKiBPSUQgbm90IHN1cHBvcnRlZCAqLwotCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKAogCQkJCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKLQkJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKHNpemVvZiAqcmVzcCk7Ci0JCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7Ci0JCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoc2l6ZW9mICpyZXNwKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPSBjcHVfdG9fbGUzMiAoMCk7CisJCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDApOwogCX0gZWxzZQotCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTY2NSwxNCArNjYyLDE0IEBACiAJcHJfZGVidWcoIlxuIik7CiAjZW5kaWYKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfU0VUX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgxNik7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KIAlpZiAoZ2VuX25kaXNfc2V0X3Jlc3AgKGNvbmZpZ05yLCBsZTMyX3RvX2NwdSAoYnVmLT5PSUQpLAogCQkJKCh1OCAqKSBidWYpICsgOCArIEJ1Zk9mZnNldCwgQnVmTGVuZ3RoLCByKSkKLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOworCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOwogCWVsc2UKLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC02ODksMTEgKzY4NiwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX3Jlc2V0X2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKLQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAJLyogcmVzZW50IGluZm9ybWF0aW9uICovCi0JcmVzcC0+QWRkcmVzc2luZ1Jlc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJcmVzcC0+QWRkcmVzc2luZ1Jlc2V0ID0gY3B1X3RvX2xlMzIgKDEpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC03MTMsMTEgKzcxMCwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX2tlZXBhbGl2ZV9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoCiAJCQlSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgxNik7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KLQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNzQyLDEyICs3MzksMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyICgKIAkJCVJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgyMCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgyMCk7CiAJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKHN0YXR1cyk7Ci0JcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7Ci0JcmVzcC0+U3RhdHVzQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPlN0YXR1c0J1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgwKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtOTYzLDkgKzk2MCw5IEBACiAJCXJldHVybjsKIAloZWFkZXIgPSAodm9pZCAqKSBza2JfcHVzaCAoc2tiLCBzaXplb2YgKmhlYWRlcik7CiAJbWVtc2V0IChoZWFkZXIsIDAsIHNpemVvZiAqaGVhZGVyKTsKLQloZWFkZXItPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihSRU1PVEVfTkRJU19QQUNLRVRfTVNHKTsKKwloZWFkZXItPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRyk7CiAJaGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCWhlYWRlci0+RGF0YU9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDM2KTsKKwloZWFkZXItPkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMzYpOwogCWhlYWRlci0+RGF0YUxlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuIC0gc2l6ZW9mICpoZWFkZXIpOwogfQogCkBAIC0xMDI5LDcgKzEwMjYsNyBAQAogCV9fbGUzMgkJKnRtcCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAogCS8qIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGVuZ3RoICovCi0JaWYgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRykKKwlpZiAoY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRykKIAkJCSE9IGdldF91bmFsaWduZWQodG1wKyspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl0bXArKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwppbmRleCAzNzg3OWFmLi5mNDZhNjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCkBAIC04NywxMiArODcsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLyogLmJEZXZpY2VDbGFzcyA9IGYodXNlX2FjbSkgKi8KIAkuYkRldmljZVN1YkNsYXNzID0JMCwKIAkuYkRldmljZVByb3RvY29sID0JMCwKIAkvKiAuYk1heFBhY2tldFNpemUwID0gZihoYXJkd2FyZSkgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRU5ET1JfSUQpLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihHU19WRU5ET1JfSUQpLAogCS8qIC5pZFByb2R1Y3QgPQlmKHVzZV9hY20pICovCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJcHJfd2FybmluZygiZ3NfYmluZDogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAogCQkJZ2FkZ2V0LT5uYW1lKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCAweDAwOTkpOwogCX0KIAogCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKQEAgLTI1NSwxOSArMjU1LDE5IEBACiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAyOwogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQ09NTTsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19QUk9EVUNUX0lEKTsKKwkJCQljcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIGlmICh1c2Vfb2JleCkgewogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgT0JFWCBjb25maWciOwogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMzsKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOworCQkJY3B1X3RvX2xlMTYoR1NfQ0RDX09CRVhfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIHsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiR2VuZXJpYyBTZXJpYWwgY29uZmlnIjsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDE7CiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOworCQkJCWNwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOwogCX0KIAlzdHJpbmdzX2RldltTVFJJTkdfREVTQ1JJUFRJT05fSURYXS5zID0gc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKaW5kZXggNTNkNTkyOC4uMGE0ZDk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKQEAgLTEwOTIsNyArMTA5Miw3IEBACiAJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKIAlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwOwogCi0JY29kaW5nLmR3RFRFUmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOTYwMCk7CisJY29kaW5nLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKDk2MDApOwogCWNvZGluZy5iQ2hhckZvcm1hdCA9IDg7CiAJY29kaW5nLmJQYXJpdHlUeXBlID0gVVNCX0NEQ19OT19QQVJJVFk7CiAJY29kaW5nLmJEYXRhQml0cyA9IFVTQl9DRENfMV9TVE9QX0JJVFM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCAzNjFkOTY1Li4yZDc3MjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTEwMiwyMiArMTAyLDMyIEBACiAjaWZuZGVmCUNPTkZJR19VU0JfWkVST19ITlBURVNUCiAjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MDUyNQkJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhhNGEwCQkvKiBMaW51eC1VU0IgIkdhZGdldCBaZXJvIiAqLworI2RlZmluZSBERUZBVUxUX0FVVE9SRVNVTUUJMAogI2Vsc2UKICNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgxYTBhCQkvKiBPVEcgdGVzdCBkZXZpY2UgSURzICovCiAjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGJhZGQKKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVTVU1FCTUKICNlbmRpZgogCisvKiBJZiB0aGUgb3B0aW9uYWwgImF1dG9yZXN1bWUiIG1vZGUgaXMgZW5hYmxlZCwgaXQgcHJvdmlkZXMgZ29vZAorICogZnVuY3Rpb25hbCBjb3ZlcmFnZSBmb3IgdGhlICJVU0JDViIgdGVzdCBoYXJuZXNzIGZyb20gVVNCLUlGLgorICogSXQncyBhbHdheXMgc2V0IGlmIE9URyBtb2RlIGlzIGVuYWJsZWQuCisgKi8KK3Vuc2lnbmVkIGF1dG9yZXN1bWUgPSBERUZBVUxUX0FVVE9SRVNVTUU7Cittb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19WRU5ET1JfU1BFQywKIAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMiwKIH07CiAKQEAgLTIxMiw2ICsyMjIsNDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0CWF1dG9yZXN1bWVfdGltZXI7CisKK3N0YXRpYyB2b2lkIHplcm9fYXV0b3Jlc3VtZSh1bnNpZ25lZCBsb25nIF9jKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9ICh2b2lkICopX2M7CisJc3RydWN0IHVzYl9nYWRnZXQJCSpnID0gY2Rldi0+Z2FkZ2V0OworCisJLyogdW5jb25maWd1cmVkIGRldmljZXMgY2FuJ3QgaXNzdWUgd2FrZXVwcyAqLworCWlmICghY2Rldi0+Y29uZmlnKQorCQlyZXR1cm47CisKKwkvKiBOb3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCisJICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmc7IGxpa2VseQorCSAqIGJlY2F1c2Ugb2Ygc29tZSBkaXJlY3QgdXNlciByZXF1ZXN0LgorCSAqLworCWlmIChnLT5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgeworCQlpbnQgc3RhdHVzID0gdXNiX2dhZGdldF93YWtldXAoZyk7CisJCUlORk8oY2RldiwgIiVzIC0tPiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB6ZXJvX3N1c3BlbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWlmIChjZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm47CisKKwlpZiAoYXV0b3Jlc3VtZSkgeworCQltb2RfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7CisJCURCRyhjZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOworCX0gZWxzZQorCQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIHplcm9fcmVzdW1lKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGVsX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIGludCBfX2luaXQgemVyb19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpbnQJCQlnY251bTsKQEAgLTIzOSwxNyArMjkwLDE5IEBACiAJc3RyaW5nc19kZXZbU1RSSU5HX1NFUklBTF9JRFhdLmlkID0gaWQ7CiAJZGV2aWNlX2Rlc2MuaVNlcmlhbE51bWJlciA9IGlkOwogCisJc2V0dXBfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIsIHplcm9fYXV0b3Jlc3VtZSwgKHVuc2lnbmVkIGxvbmcpIGNkZXYpOworCiAJLyogUmVnaXN0ZXIgcHJpbWFyeSwgdGhlbiBzZWNvbmRhcnkgY29uZmlndXJhdGlvbi4gIE5vdGUgdGhhdAogCSAqIFNIMyBvbmx5IGFsbG93cyBvbmUgY29uZmlnLi4uCiAJICovCiAJaWYgKGxvb3BkZWZhdWx0KSB7Ci0JCWxvb3BiYWNrX2FkZChjZGV2KTsKKwkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCi0JCQlzb3VyY2VzaW5rX2FkZChjZGV2KTsKKwkJCXNvdXJjZXNpbmtfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJfSBlbHNlIHsKLQkJc291cmNlc2lua19hZGQoY2Rldik7CisJCXNvdXJjZXNpbmtfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCi0JCQlsb29wYmFja19hZGQoY2Rldik7CisJCQlsb29wYmFja19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAl9CiAKIAlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKQEAgLTI2NSw3ICszMTgsNyBAQAogCQkgKi8KIAkJcHJfd2FybmluZygiJXM6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCWxvbmduYW1lLCBnYWRnZXQtPm5hbWUpOwotCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4OTk5OSk7CiAJfQogCiAKQEAgLTI3OCwxMSArMzMxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgemVyb191bmJpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZhdXRvcmVzdW1lX3RpbWVyKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciB6ZXJvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiemVybyIsCiAJLmRldgkJPSAmZGV2aWNlX2Rlc2MsCiAJLnN0cmluZ3MJPSBkZXZfc3RyaW5ncywKIAkuYmluZAkJPSB6ZXJvX2JpbmQsCisJLnVuYmluZAkJPSB6ZXJvX3VuYmluZCwKKwkuc3VzcGVuZAk9IHplcm9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHplcm9fcmVzdW1lLAogfTsKIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyYzYzYmZiLi44NDU0NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0yNCwxMCArMjQsNyBAQAogCSAgVGhlIEVuaGFuY2VkIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKEVIQ0kpIGlzIHN0YW5kYXJkIGZvciBVU0IgMi4wCiAJICAiaGlnaCBzcGVlZCIgKDQ4MCBNYml0L3NlYywgNjAgTWJ5dGUvc2VjKSBob3N0IGNvbnRyb2xsZXIgaGFyZHdhcmUuCiAJICBJZiB5b3VyIFVTQiBob3N0IGNvbnRyb2xsZXIgc3VwcG9ydHMgVVNCIDIuMCwgeW91IHdpbGwgbGlrZWx5IHdhbnQgdG8KLQkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIAotCSAgdGhlIHByaW1hcnkgaW1wbGVtZW50YXRpb24gb2YgRUhDSSBpcyBhIGNoaXAgZnJvbSBORUMsIHdpZGVseSBhdmFpbGFibGUKLQkgIGluIGFkZC1vbiBQQ0kgY2FyZHMsIGJ1dCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIHRoZSB3b3JrcyBmcm9tIG90aGVyIAotCSAgdmVuZG9ycyBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KKwkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuCiAKIAkgIEVIQ0kgY29udHJvbGxlcnMgYXJlIHBhY2thZ2VkIHdpdGggImNvbXBhbmlvbiIgaG9zdCBjb250cm9sbGVycyAoT0hDSQogCSAgb3IgVUhDSSkgdG8gaGFuZGxlIFVTQiAxLjEgZGV2aWNlcyBjb25uZWN0ZWQgdG8gcm9vdCBodWIgcG9ydHMuICBQb3J0cwpAQCAtMTIzLDcgKzEyMCw3IEBACiAKIGNvbmZpZyBVU0JfSVNQMTc2MF9IQ0QKIAl0cmlzdGF0ZSAiSVNQIDE3NjAgSENEIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMICYmIChQQ0kgfHwgUFBDX09GKQorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFRoZSBJU1AxNzYwIGNoaXAgaXMgYSBVU0IgMi4wIGhvc3QgY29udHJvbGxlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IGU1NTFiYjMuLmYyNjE4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTExMCw2ICsxMTAsNDIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQKK3RpbWVyX2FjdGlvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGVudW0gZWhjaV90aW1lcl9hY3Rpb24gYWN0aW9uKQoreworCS8qIERvbid0IG92ZXJyaWRlIHRpbWVvdXRzIHdoaWNoIHNocmluayBvciAobGF0ZXIpIGRpc2FibGUKKwkgKiB0aGUgYXN5bmMgcmluZzsganVzdCB0aGUgSS9PIHdhdGNoZG9nLiAgTm90ZSB0aGF0IGlmIGEKKwkgKiBTSFJJTksgd2VyZSBwZW5kaW5nLCBPRkYgd291bGQgbmV2ZXIgYmUgcmVxdWVzdGVkLgorCSAqLworCWlmICh0aW1lcl9wZW5kaW5nKCZlaGNpLT53YXRjaGRvZykKKwkJCSYmICgoQklUKFRJTUVSX0FTWU5DX1NIUklOSykgfCBCSVQoVElNRVJfQVNZTkNfT0ZGKSkKKwkJCQkmIGVoY2ktPmFjdGlvbnMpKQorCQlyZXR1cm47CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucykpIHsKKwkJdW5zaWduZWQgbG9uZyB0OworCisJCXN3aXRjaCAoYWN0aW9uKSB7CisJCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6CisJCQl0ID0gRUhDSV9JT19KSUZGSUVTOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgorCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKKwkJCWJyZWFrOworCQkvKiBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzogKi8KKwkJZGVmYXVsdDoKKwkJCS8qIGFkZCBhIGppZmZpZSBzaW5jZSB3ZSBzeW5jaCBhZ2FpbnN0IHRoZQorCQkJICogOCBLSHogdWZyYW1lIGNvdW50ZXIuCisJCQkgKi8KKwkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKKwkJCWJyZWFrOworCQl9CisJCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qCiAgKiBoYW5kc2hha2UgLSBzcGluIHJlYWRpbmcgaGMgdW50aWwgaGFuZHNoYWtlIGNvbXBsZXRlcyBvciBmYWlscwogICogQHB0cjogYWRkcmVzcyBvZiBoYyByZWdpc3RlciB0byBiZSByZWFkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwppbmRleCBlY2M5YjY2Li4xOTc2YjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKQEAgLTMzMywxMiArMzMzLDQwIEBACiAJCXRva2VuID0gaGMzMl90b19jcHUoZWhjaSwgcXRkLT5od190b2tlbik7CiAKIAkJLyogYWx3YXlzIGNsZWFuIHVwIHF0ZHMgdGhlIGhjIGRlLWFjdGl2YXRlZCAqLworIHJldHJ5X3hhY3RlcnI6CiAJCWlmICgodG9rZW4gJiBRVERfU1RTX0FDVElWRSkgPT0gMCkgewogCiAJCQkvKiBvbiBTVEFMTCwgZXJyb3IsIGFuZCBzaG9ydCByZWFkcyB0aGlzIHVyYiBtdXN0CiAJCQkgKiBjb21wbGV0ZSBhbmQgYWxsIGl0cyBxdGRzIG11c3QgYmUgcmVjeWNsZWQuCiAJCQkgKi8KIAkJCWlmICgodG9rZW4gJiBRVERfU1RTX0hBTFQpICE9IDApIHsKKworCQkJCS8qIHJldHJ5IHRyYW5zYWN0aW9uIGVycm9ycyB1bnRpbCB3ZQorCQkJCSAqIHJlYWNoIHRoZSBzb2Z0d2FyZSB4YWN0ZXJyIGxpbWl0CisJCQkJICovCisJCQkJaWYgKCh0b2tlbiAmIFFURF9TVFNfWEFDVCkgJiYKKwkJCQkJCVFURF9DRVJSKHRva2VuKSA9PSAwICYmCisJCQkJCQktLXFoLT54YWN0ZXJycyA+IDAgJiYKKwkJCQkJCSF1cmItPnVubGlua2VkKSB7CisJCQkJCWVoY2lfZGJnKGVoY2ksCisJImRldGVjdGVkIFhhY3RFcnIgbGVuICV6dS8lenUgcmV0cnkgJWRcbiIsCisJcXRkLT5sZW5ndGggLSBRVERfTEVOR1RIKHRva2VuKSwgcXRkLT5sZW5ndGgsCisJUUhfWEFDVEVSUl9NQVggLSBxaC0+eGFjdGVycnMpOworCisJCQkJCS8qIHJlc2V0IHRoZSB0b2tlbiBpbiB0aGUgcXRkIGFuZCB0aGUKKwkJCQkJICogcWggb3ZlcmxheSAod2hpY2ggc3RpbGwgY29udGFpbnMKKwkJCQkJICogdGhlIHF0ZCkgc28gdGhhdCB3ZSBwaWNrIHVwIGZyb20KKwkJCQkJICogd2hlcmUgd2UgbGVmdCBvZmYKKwkJCQkJICovCisJCQkJCXRva2VuICY9IH5RVERfU1RTX0hBTFQ7CisJCQkJCXRva2VuIHw9IFFURF9TVFNfQUNUSVZFIHwKKwkJCQkJCQkoRUhDSV9UVU5FX0NFUlIgPDwgMTApOworCQkJCQlxdGQtPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwKKwkJCQkJCQl0b2tlbik7CisJCQkJCXdtYigpOworCQkJCQlxaC0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLCB0b2tlbik7CisJCQkJCWdvdG8gcmV0cnlfeGFjdGVycjsKKwkJCQl9CiAJCQkJc3RvcHBlZCA9IDE7CiAKIAkJCS8qIG1hZ2ljIGR1bW15IGZvciBzb21lIHNob3J0IHJlYWRzOyBxaCB3b24ndCBhZHZhbmNlLgpAQCAtNDIxLDYgKzQ0OSw5IEBACiAJCS8qIHJlbW92ZSBxdGQ7IGl0J3MgcmVjeWNsZWQgYWZ0ZXIgcG9zc2libGUgdXJiIGNvbXBsZXRpb24gKi8KIAkJbGlzdF9kZWwgKCZxdGQtPnF0ZF9saXN0KTsKIAkJbGFzdCA9IHF0ZDsKKworCQkvKiByZWluaXQgdGhlIHhhY3RlcnIgY291bnRlciBmb3IgdGhlIG5leHQgcXRkICovCisJCXFoLT54YWN0ZXJycyA9IFFIX1hBQ1RFUlJfTUFYOwogCX0KIAogCS8qIGxhc3QgdXJiJ3MgY29tcGxldGlvbiBtaWdodCBzdGlsbCBuZWVkIGNhbGxpbmcgKi8KQEAgLTg2Miw2ICs4OTMsNyBAQAogCWhlYWQtPnFoX25leHQucWggPSBxaDsKIAloZWFkLT5od19uZXh0ID0gZG1hOwogCisJcWgtPnhhY3RlcnJzID0gUUhfWEFDVEVSUl9NQVg7CiAJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfTElOS0VEOwogCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggMWQwYjQ5ZS4uYWRhNWQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTU2Myw3ICs1NjMsNyBAQAogCS8vICAgYW5kIHRoaXMgcWggaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHVmcmFtZQogCS8vICAgKGFuZCBvdmVybGF5IHRva2VuIFNwbGl0WHN0YXRlIGlzIGZhbHNlPykKIAkvLyBUSEVOCi0JLy8gICBxaC0+aHdfaW5mbzEgfD0gX19jb25zdGFudF9jcHVfdG9faGMzMigxIDw8IDcgLyogImlnbm9yZSIgKi8pOworCS8vICAgcWgtPmh3X2luZm8xIHw9IGNwdV90b19oYzMyKDEgPDwgNyAvKiAiaWdub3JlIiAqLyk7CiAKIAkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLwogCWlmICgocGVyaW9kID0gcWgtPnBlcmlvZCkgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKaW5kZXggMjYyYjAwYy4uNmNmZjE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTE5MCw0MCArMTkwLDYgQEAKIAljbGVhcl9iaXQgKGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRpbWVyX2FjdGlvbiAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBlbnVtIGVoY2lfdGltZXJfYWN0aW9uIGFjdGlvbikKLXsKLQkvKiBEb24ndCBvdmVycmlkZSB0aW1lb3V0cyB3aGljaCBzaHJpbmsgb3IgKGxhdGVyKSBkaXNhYmxlCi0JICogdGhlIGFzeW5jIHJpbmc7IGp1c3QgdGhlIEkvTyB3YXRjaGRvZy4gIE5vdGUgdGhhdCBpZiBhCi0JICogU0hSSU5LIHdlcmUgcGVuZGluZywgT0ZGIHdvdWxkIG5ldmVyIGJlIHJlcXVlc3RlZC4KLQkgKi8KLQlpZiAodGltZXJfcGVuZGluZygmZWhjaS0+d2F0Y2hkb2cpCi0JCQkmJiAoKEJJVChUSU1FUl9BU1lOQ19TSFJJTkspIHwgQklUKFRJTUVSX0FTWU5DX09GRikpCi0JCQkJJiBlaGNpLT5hY3Rpb25zKSkKLQkJcmV0dXJuOwotCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgewotCQl1bnNpZ25lZCBsb25nIHQ7Ci0KLQkJc3dpdGNoIChhY3Rpb24pIHsKLQkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKLQkJCXQgPSBFSENJX0lPX0pJRkZJRVM7Ci0JCQlicmVhazsKLQkJY2FzZSBUSU1FUl9BU1lOQ19PRkY6Ci0JCQl0ID0gRUhDSV9BU1lOQ19KSUZGSUVTOwotCQkJYnJlYWs7Ci0JCS8vIGNhc2UgVElNRVJfQVNZTkNfU0hSSU5LOgotCQlkZWZhdWx0OgotCQkJLyogYWRkIGEgamlmZmllIHNpbmNlIHdlIHN5bmNoIGFnYWluc3QgdGhlCi0JCQkgKiA4IEtIeiB1ZnJhbWUgY291bnRlci4KLQkJCSAqLwotCQkJdCA9IERJVl9ST1VORF9VUChFSENJX1NIUklOS19GUkFNRVMgKiBIWiwgMTAwMCkgKyAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgdCArIGppZmZpZXMpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZnJlZV9jYWNoZWRfaXRkX2xpc3Qoc3RydWN0IGVoY2lfaGNkICplaGNpKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI4Nyw3ICsyNTMsNyBAQAogCiAvKgogICogTm93IHRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgbm90IGNvbnZlcnRlZCB1c2luZyB0aGUKLSAqIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKSBtYWNybyBhbnltb3JlLCBzaW5jZSB3ZSBoYXZlIHRvIHN1cHBvcnQKKyAqIGNwdV90b19sZTMyKCkgbWFjcm8gYW55bW9yZSwgc2luY2Ugd2UgaGF2ZSB0byBzdXBwb3J0CiAgKiAiZHluYW1pYyIgc3dpdGNoaW5nIGJldHdlZW4gYmUgYW5kIGxlIHN1cHBvcnQsIHNvIHRoYXQgdGhlIGRyaXZlcgogICogY2FuIGJlIHVzZWQgb24gb25lIHN5c3RlbSB3aXRoIFNvQyBFSENJIGNvbnRyb2xsZXIgdXNpbmcgYmlnLWVuZGlhbgogICogZGVzY3JpcHRvcnMgYXMgd2VsbCBhcyBhIG5vcm1hbCBsaXR0bGUtZW5kaWFuIFBDSSBFSENJIGNvbnRyb2xsZXIuCkBAIC0zNzYsNiArMzQyLDkgQEAKICNkZWZpbmUJUUhfU1RBVEVfVU5MSU5LX1dBSVQJNAkJLyogTElOS0VEIGFuZCBvbiByZWNsYWltIHEgKi8KICNkZWZpbmUJUUhfU1RBVEVfQ09NUExFVElORwk1CQkvKiBkb24ndCB0b3VjaCB0b2tlbi5IQUxUICovCiAKKwl1OAkJCXhhY3RlcnJzOwkvKiBYYWN0RXJyIHJldHJ5IGNvdW50ZXIgKi8KKyNkZWZpbmUJUUhfWEFDVEVSUl9NQVgJCTMyCQkvKiBYYWN0RXJyIHJldHJ5IGxpbWl0ICovCisKIAkvKiBwZXJpb2RpYyBzY2hlZHVsZSBpbmZvICovCiAJdTgJCQl1c2VjczsJCS8qIGludHIgYmFuZHdpZHRoICovCiAJdTgJCQlnYXBfdWY7CQkvKiB1ZnJhbWVzIHNwbGl0L2NzcGxpdCBnYXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYwppbmRleCAzNGUxNGVkLi5lYThhNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBmaGNpX3RvX2hjZChmaGNpKS0+c2VsZi5jb250cm9sbGVyOwogCi0JZmhjaS0+ZGZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2LT5idXNfaWQsIE5VTEwpOworCWZoY2ktPmRmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKGRldiksIE5VTEwpOwogCWlmICghZmhjaS0+ZGZzX3Jvb3QpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCmluZGV4IGJhNjIyY2MuLjA5NTE4MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKQEAgLTU4Myw3ICs1ODMsNyBAQAogCWlmIChzcHJvcCAmJiBzdHJjbXAoc3Byb3AsICJob3N0IikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmZoY2lfZHJpdmVyLCBkZXYsIGRldi0+YnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZmhjaV9kcml2ZXIsIGRldiwgZGV2X25hbWUoZGV2KSk7CiAJaWYgKCFoY2QpIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgY3JlYXRlIGhjZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJCQl9CiAJCX0KIAotCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgZGV2LT5idXNfaWQpOworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgZGV2X25hbWUoZGV2KSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyAlZCIsIGkpOwogCQkJZ290byBlcnJfZ3Bpb3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jIGIvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYwppbmRleCA4NTgyMjM2Li5jYmYzMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKQEAgLTQ2NCw4ICs0NjQsNyBAQAogCQkJcG9ydF9pZHggPDwgOCB8IGlmYWNlX25vLAogCQkJa2V5ZCwga2V5ZF9sZW4sIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CiAKLQltZW1zZXQoa2V5ZCwgMCwgc2l6ZW9mKCprZXlkKSk7CS8qIGNsZWFyIGtleXMgZXRjLiAqLwotCWtmcmVlKGtleWQpOworCWt6ZnJlZShrZXlkKTsgLyogY2xlYXIga2V5cyBldGMuICovCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IDRkZGEzMWIuLmEyYjMwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlicmVhazsKIAljYXNlIFBJUEVfSU5URVJSVVBUOgogCQl1cmItPmludGVydmFsID0gZXAtPnBlcmlvZDsKLQkJZXAtPmxlbmd0aCA9IG1pbigoaW50KWVwLT5tYXhwYWNrZXQsCisJCWVwLT5sZW5ndGggPSBtaW5fdCh1MzIsIGVwLT5tYXhwYWNrZXQsCiAJCQkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAKIAkJLyogdXJiIHN1Ym1pdHRlZCBmb3IgYWxyZWFkeSBleGlzdGluZyBlbmRwb2ludCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAppbmRleCBhYTIxMWJhLi4xMmRiOTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaApAQCAtNTYzLDcgKzU2Myw3IEBACiAqLwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcHRkKHN0cnVjdCBwdGQgKnB0ZCkKIHsKLQlwcmludGsoInRkOiAleCAlZCVjJWQgJWQsJWQsJWQgICV4ICV4JXgleFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZDogJXggJWQlYyVkICVkLCVkLCVkICAleCAleCV4JXhcbiIsCiAJICAgICAgIFBURF9HRVRfQ0MocHRkKSwgUFREX0dFVF9GQShwdGQpLAogCSAgICAgICBQVERfRElSX1NUUihwdGQpLCBQVERfR0VUX0VQKHB0ZCksCiAJICAgICAgIFBURF9HRVRfQ09VTlQocHRkKSwgUFREX0dFVF9MRU4ocHRkKSwgUFREX0dFVF9NUFMocHRkKSwKQEAgLTU3Niw3ICs1NzYsNyBAQAogCWludCBrOwogCiAJaWYgKFBURF9HRVRfRElSKHB0ZCkgIT0gUFREX0RJUl9JTiAmJiBQVERfR0VUX0xFTihwdGQpKSB7Ci0JCXByaW50aygiLT4gIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIi0+ICIpOwogCQlmb3IgKGsgPSAwOyBrIDwgUFREX0dFVF9MRU4ocHRkKTsgKytrKQogCQkJcHJpbnRrKCIlMDJ4ICIsICgodTggKikgYnVmKVtrXSk7CiAJCXByaW50aygiXG4iKTsKQEAgLTU4OCwxMyArNTg4LDEzIEBACiAJaW50IGs7CiAKIAlpZiAoUFREX0dFVF9ESVIocHRkKSA9PSBQVERfRElSX0lOICYmIFBURF9HRVRfQ09VTlQocHRkKSkgewotCQlwcmludGsoIjwtICIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICI8LSAiKTsKIAkJZm9yIChrID0gMDsgayA8IFBURF9HRVRfQ09VTlQocHRkKTsgKytrKQogCQkJcHJpbnRrKCIlMDJ4ICIsICgodTggKikgYnVmKVtrXSk7CiAJCXByaW50aygiXG4iKTsKIAl9CiAJaWYgKFBURF9HRVRfTEFTVChwdGQpKQotCQlwcmludGsoIi1cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICItXG4iKTsKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwppbmRleCBiODk5ZjFhLi5jZDA3ZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCkBAIC02NDQsNyArNjQ0LDcgQEAKIAogCWlmICh1cmItPmRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpIHsKIAkJLyogc3BsaXQgKi8KLQkJcHRkLT5kdzUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MWMpOworCQlwdGQtPmR3NSA9IGNwdV90b19sZTMyKDB4MWMpOwogCiAJCWlmIChxaC0+cGVyaW9kID49IDMyKQogCQkJcGVyaW9kID0gcWgtPnBlcmlvZCAvIDI7CkBAIC04MTksNiArODE5LDEzIEBACiAJdTMyIGF0bF9yZWdzLCBwYXlsb2FkOwogCXUzMiBidWZmc3RhdHVzOwogCisJLyoKKwkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGVucXVldWUKKwkgKiBhIGZvbGxvdy11cCBwYWNrZXQsIHRoZSBTS0lQIHJlZ2lzdGVyIGdldHMgd3JpdHRlbiBhbmQgcmVhZCBiYWNrCisJICogYWxtb3N0IGltbWVkaWF0ZWx5LiBXaXRoIElTUDE3NjEsIHRoaXMgcmVnaXN0ZXIgcmVxdWlyZXMgYSBkZWxheSBvZgorCSAqIDE5NW5zIGJldHdlZW4gYSB3cml0ZSBhbmQgc3Vic2VxdWVudCByZWFkIChzZWUgc2VjdGlvbiAxNS4xLjEuMykuCisJICovCisJbmRlbGF5KDE5NSk7CiAJc2tpcF9tYXAgPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX0FUTF9QVERfU0tJUE1BUF9SRUcpOwogCiAJQlVHX09OKCFza2lwX21hcCk7CkBAIC04NTMsNiArODYwLDEzIEBACiAJdTMyIGludF9yZWdzLCBwYXlsb2FkOwogCXUzMiBidWZmc3RhdHVzOwogCisJLyoKKwkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGVucXVldWUKKwkgKiBhIGZvbGxvdy11cCBwYWNrZXQsIHRoZSBTS0lQIHJlZ2lzdGVyIGdldHMgd3JpdHRlbiBhbmQgcmVhZCBiYWNrCisJICogYWxtb3N0IGltbWVkaWF0ZWx5LiBXaXRoIElTUDE3NjEsIHRoaXMgcmVnaXN0ZXIgcmVxdWlyZXMgYSBkZWxheSBvZgorCSAqIDE5NW5zIGJldHdlZW4gYSB3cml0ZSBhbmQgc3Vic2VxdWVudCByZWFkIChzZWUgc2VjdGlvbiAxNS4xLjEuMykuCisJICovCisJbmRlbGF5KDE5NSk7CiAJc2tpcF9tYXAgPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX0lOVF9QVERfU0tJUE1BUF9SRUcpOwogCiAJQlVHX09OKCFza2lwX21hcCk7CkBAIC0xMDU0LDcgKzEwNjgsNyBAQAogCQkJcHJpdl93cml0ZV9jb3B5KHByaXYsICh1MzIgKikmcHRkLCB1c2JfaGNkLT5yZWdzICsKIAkJCQkJYXRsX3JlZ3MsIHNpemVvZihwdGQpKTsKIAotCQkJcHRkLmR3MCB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFBURF9WQUxJRCk7CisJCQlwdGQuZHcwIHw9IGNwdV90b19sZTMyKFBURF9WQUxJRCk7CiAJCQlwcml2X3dyaXRlX2NvcHkocHJpdiwgKHUzMiAqKSZwdGQsIHVzYl9oY2QtPnJlZ3MgKwogCQkJCQlhdGxfcmVncywgc2l6ZW9mKHB0ZCkpOwogCkBAIC0yMjM1LDkgKzIyNDksMTAgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocWhfY2FjaGVwKTsKIH0KIAotc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIodTY0IHJlc19zdGFydCwgdTY0IHJlc19sZW4sIGludCBpcnEsCi0JCXU2NCBpcnFmbGFncywgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAotCQl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpCitzdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3RlcihwaHlzX2FkZHJfdCByZXNfc3RhcnQsIHJlc291cmNlX3NpemVfdCByZXNfbGVuLAorCQkJCSBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCisJCQkJIHVuc2lnbmVkIGludCBkZXZmbGFncykKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaAppbmRleCBhOWRhZWE1Li40NjJmNDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCkBAIC0yLDkgKzIsMTAgQEAKICNkZWZpbmUgX0lTUDE3NjBfSENEX0hfCiAKIC8qIGV4cG9ydHMgZm9yIGlmICovCi1zdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3Rlcih1NjQgcmVzX3N0YXJ0LCB1NjQgcmVzX2xlbiwgaW50IGlycSwKLQkJdTY0IGlycWZsYWdzLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCi0JCXVuc2lnbmVkIGludCBkZXZmbGFncyk7CitzdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3RlcihwaHlzX2FkZHJfdCByZXNfc3RhcnQsIHJlc291cmNlX3NpemVfdCByZXNfbGVuLAorCQkJCSBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCisJCQkJIHVuc2lnbmVkIGludCBkZXZmbGFncyk7CiBpbnQgaW5pdF9rbWVtX29uY2Uodm9pZCk7CiB2b2lkIGRlaW5pdF9rbWVtX2NhY2hlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCmluZGV4IDRjZjdjYTQuLjNmYTNhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKICNpbmNsdWRlICJpc3AxNzYwLWhjZC5oIgpAQCAtMzAwLDM5ICszMDEsMTAxIEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlzcDE3NjBfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzOworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3JlczsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRDsKKworCW1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtX3JlcykgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBNZW1vcnkgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwltZW1fc2l6ZSA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplLCAiaXNwMTc2MCIpKSB7CisJCXByX3dhcm5pbmcoImlzcDE3NjA6IENhbm5vdCByZXNlcnZlIHRoZSBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxX3JlcykgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBJUlEgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpcnFmbGFncyB8PSBpcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCisJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUsIGlycV9yZXMtPnN0YXJ0LAorCQkJICAgICAgIGlycWZsYWdzLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgMCk7CisJaWYgKElTX0VSUihoY2QpKSB7CisJCXByX3dhcm5pbmcoImlzcDE3NjA6IEZhaWxlZCB0byByZWdpc3RlciB0aGUgSENEIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlwcl9pbmZvKCJJU1AxNzYwIFVTQiBkZXZpY2UgaW5pdGlhbGlzZWRcbiIpOworCXJldHVybiByZXQ7CisKK2NsZWFudXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaXNwMTc2MF9wbGF0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwltZW1fc2l6ZSA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNwMTc2MF9wbGF0X2RyaXZlciA9IHsKKwkucHJvYmUJPSBpc3AxNzYwX3BsYXRfcHJvYmUsCisJLnJlbW92ZQk9IGlzcDE3NjBfcGxhdF9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiaXNwMTc2MCIsCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGlzcDE3NjBfaW5pdCh2b2lkKQogewotCWludCByZXQ7CisJaW50IHJldCwgYW55X3JldCA9IC1FTk9ERVY7CiAKIAlpbml0X2ttZW1fb25jZSgpOwogCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc3AxNzYwX3BsYXRfZHJpdmVyKTsKKwlpZiAoIXJldCkKKwkJYW55X3JldCA9IDA7CiAjaWZkZWYgQ09ORklHX1BQQ19PRgogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXNwMTc2MF9vZl9kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJZGVpbml0X2ttZW1fY2FjaGUoKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSQogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlzcDE3NjFfcGNpX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJZ290byB1bnJlZ19vZjsKKwlpZiAoIXJldCkKKwkJYW55X3JldCA9IDA7CiAjZW5kaWYKLQlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX1BDSQotdW5yZWdfb2Y6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX09GCi0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlzcDE3NjBfb2ZfZHJpdmVyKTsKLSNlbmRpZgotCWRlaW5pdF9rbWVtX2NhY2hlKCk7Ci0JcmV0dXJuIHJldDsKKwlpZiAoYW55X3JldCkKKwkJZGVpbml0X2ttZW1fY2FjaGUoKTsKKwlyZXR1cm4gYW55X3JldDsKIH0KIG1vZHVsZV9pbml0KGlzcDE3NjBfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpc3AxNzYwX2V4aXQodm9pZCkKIHsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXNwMTc2MF9wbGF0X2RyaXZlcik7CiAjaWZkZWYgQ09ORklHX1BQQ19PRgogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpc3AxNzYwX29mX2RyaXZlcik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwppbmRleCBmYjMwNTVmLi43Y2Y3NGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrICp1c2JfaG9zdF9jbG9jazsKIAogc3RhdGljIHZvaWQgZXA5M3h4X3N0YXJ0X2hjKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA1Y2Y1ZjFlLi4yNWRiNzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC05OTcsNyArOTk3LDcgQEAKICNkZWZpbmUgU0ExMTExX0RSSVZFUgkJb2hjaV9oY2Rfc2ExMTExX2RyaXZlcgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9TM0MyNDEwCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TM0MyNDEwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzY0WFgpCiAjaW5jbHVkZSAib2hjaS1zM2MyNDEwLmMiCiAjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIKICNlbmRpZgpAQCAtMTA0OSw3ICsxMDQ5LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjaW5jbHVkZSAib2hjaS1zaC5jIgogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCW9oY2lfaGNkX3NoX2RyaXZlcgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBmNDZhZjdhLi5hNjhhZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTIxLDkgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvdXNiLWNvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAKICNkZWZpbmUgdmFsaWRfcG9ydChpZHgpICgoaWR4KSA9PSAxIHx8IChpZHgpID09IDIpCiAKQEAgLTM3Miw3ICszNzAsNyBAQAogCiAJdXNiX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXNiLWJ1cy1ob3N0Iik7CiAJaWYgKElTX0VSUih1c2JfY2xrKSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWhvc3QgY2xvY2tcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWJ1cy1ob3N0IGNsb2NrXG4iKTsKIAkJcmV0dmFsID0gLUVOT0VOVDsKIAkJZ290byBlcnJfY2xrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCmluZGV4IDc1NTQ4ZjcuLjVhYzQ4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwpAQCAtODQ1LDE0ICs4NDUsMTQgQEAKIAkJaXNfb3V0ID0gIShxdGQtPmh3X3Rva2VuICYgY3B1X3RvX2xlMzIoMSA8PCA4KSk7CiAJCWVwbnVtID0gKGxlMzJfdG9fY3B1cCgmcWgtPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CiAJCWlmICh1bmxpa2VseSghdXNiX2dldHRvZ2dsZShxaC0+ZGV2LCBlcG51bSwgaXNfb3V0KSkpIHsKLQkJCXFoLT5od190b2tlbiAmPSB+X19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfVE9HR0xFKTsKKwkJCXFoLT5od190b2tlbiAmPSB+Y3B1X3RvX2xlMzIoUVREX1RPR0dMRSk7CiAJCQl1c2Jfc2V0dG9nZ2xlKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDEpOwogCQl9CiAJfQogCiAJLyogSEMgbXVzdCBzZWUgbGF0ZXN0IHF0ZCBhbmQgcWggZGF0YSBiZWZvcmUgd2UgY2xlYXIgQUNUSVZFK0hBTFQgKi8KIAl3bWIoKTsKLQlxaC0+aHdfdG9rZW4gJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfVE9HR0xFIHwgUVREX1NUU19QSU5HKTsKKwlxaC0+aHdfdG9rZW4gJj0gY3B1X3RvX2xlMzIoUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7CiB9CiAKIC8qIElmIGl0IHdlcmVuJ3QgZm9yIGEgY29tbW9uIHNpbGljb24gcXVpcmsgKHdyaXRpbmcgdGhlIGR1bW15IGludG8gdGhlIHFoCkBAIC05MzcsNyArOTM3LDcgQEAKIAkJc3RydWN0IGVoY2lfcWgJKnFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OwogCiAJCS8qIFMtbWFzayBpbiBhIFFIIG1lYW5zIGl0J3MgYW4gaW50ZXJydXB0IHVyYiAqLwotCQlpZiAoKHFoLT5od19pbmZvMiAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spKSAhPSAwKSB7CisJCWlmICgocWgtPmh3X2luZm8yICYgY3B1X3RvX2xlMzIoUUhfU01BU0spKSAhPSAwKSB7CiAKIAkJCS8qIC4uLiB1cGRhdGUgaGMtd2lkZSBwZXJpb2RpYyBzdGF0cyAoZm9yIHVzYmZzKSAqLwogCQkJb3h1X3RvX2hjZChveHUpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOwpAQCAtOTgxLDcgKzk4MSw3IEBACiBzdGF0aWMgdm9pZCBpbnRyX2Rlc2NoZWR1bGUoc3RydWN0IG94dV9oY2QgKm94dSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIHN0YXRpYyBpbnQgcWhfc2NoZWR1bGUoc3RydWN0IG94dV9oY2QgKm94dSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIAotI2RlZmluZSBIQUxUX0JJVCBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9TVFNfSEFMVCkKKyNkZWZpbmUgSEFMVF9CSVQgY3B1X3RvX2xlMzIoUVREX1NUU19IQUxUKQogCiAvKiBQcm9jZXNzIGFuZCBmcmVlIGNvbXBsZXRlZCBxdGRzIGZvciBhIHFoLCByZXR1cm5pbmcgVVJCcyB0byBkcml2ZXJzLgogICogQ2hhc2VzIHVwIHRvIHFoLT5od19jdXJyZW50LiAgUmV0dXJucyBudW1iZXIgb2YgY29tcGxldGlvbnMgY2FsbGVkLApAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAkJCS8qIHNob3VsZCBiZSByYXJlIGZvciBwZXJpb2RpYyB0cmFuc2ZlcnMsCiAJCQkgKiBleGNlcHQgbWF5YmUgaGlnaCBiYW5kd2lkdGggLi4uCiAJCQkgKi8KLQkJCWlmICgoX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSykKKwkJCWlmICgoY3B1X3RvX2xlMzIoUUhfU01BU0spCiAJCQkJCSYgcWgtPmh3X2luZm8yKSAhPSAwKSB7CiAJCQkJaW50cl9kZXNjaGVkdWxlKG94dSwgcWgpOwogCQkJCSh2b2lkKSBxaF9zY2hlZHVsZShveHUsIHFoKTsKQEAgLTEzNTAsNyArMTM1MCw3IEBACiAJfQogCiAJLyogYnkgZGVmYXVsdCwgZW5hYmxlIGludGVycnVwdCBvbiB1cmIgY29tcGxldGlvbiAqLwotCQlxdGQtPmh3X3Rva2VuIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX0lPQyk7CisJCXF0ZC0+aHdfdG9rZW4gfD0gY3B1X3RvX2xlMzIoUVREX0lPQyk7CiAJcmV0dXJuIGhlYWQ7CiAKIGNsZWFudXA6CkBAIC0xNTM5LDcgKzE1MzksNyBAQAogCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KIH0KIAotI2RlZmluZQlRSF9BRERSX01BU0sJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDdmKQorI2RlZmluZQlRSF9BRERSX01BU0sJY3B1X3RvX2xlMzIoMHg3ZikKIAogLyoKICAqIEZvciBjb250cm9sL2J1bGsvaW50ZXJydXB0LCByZXR1cm4gUUggd2l0aCB0aGVzZSBURHMgYXBwZW5kZWQuCkBAIC0yMDEyLDcgKzIwMTIsNyBAQAogCSAqICAgYW5kIHRoaXMgcWggaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHVmcmFtZQogCSAqICAgKGFuZCBvdmVybGF5IHRva2VuIFNwbGl0WHN0YXRlIGlzIGZhbHNlPykKIAkgKiBUSEVOCi0JICogICBxaC0+aHdfaW5mbzEgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMigxIDw8IDcgImlnbm9yZSIpOworCSAqICAgcWgtPmh3X2luZm8xIHw9IGNwdV90b19sZTMyKDEgPDwgNyAiaWdub3JlIik7CiAJICovCiAKIAkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLwpAQCAtMjA1Nyw3ICsyMDU3LDcgQEAKIAkgKiBhY3RpdmUgaGlnaCBzcGVlZCBxdWV1ZXMgbWF5IG5lZWQgYmlnZ2VyIGRlbGF5cy4uLgogCSAqLwogCWlmIChsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpCi0JCXx8IChfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX0NNQVNLKSAmIHFoLT5od19pbmZvMikgIT0gMCkKKwkJfHwgKGNwdV90b19sZTMyKFFIX0NNQVNLKSAmIHFoLT5od19pbmZvMikgIT0gMCkKIAkJd2FpdCA9IDI7CiAJZWxzZQogCQl3YWl0ID0gNTU7CS8qIHdvcnN0IGNhc2U6IDMgKiAxMDI0ICovCkBAIC0yMTgzLDEwICsyMTgzLDEwIEBACiAJCXFoLT5zdGFydCA9IGZyYW1lOwogCiAJCS8qIHJlc2V0IFMtZnJhbWUgYW5kIChtYXliZSkgQy1mcmFtZSBtYXNrcyAqLwotCQlxaC0+aHdfaW5mbzIgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMih+KFFIX0NNQVNLIHwgUUhfU01BU0spKTsKKwkJcWgtPmh3X2luZm8yICY9IGNwdV90b19sZTMyKH4oUUhfQ01BU0sgfCBRSF9TTUFTSykpOwogCQlxaC0+aHdfaW5mbzIgfD0gcWgtPnBlcmlvZAogCQkJPyBjcHVfdG9fbGUzMigxIDw8IHVmcmFtZSkKLQkJCTogX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSyk7CisJCQk6IGNwdV90b19sZTMyKFFIX1NNQVNLKTsKIAkJcWgtPmh3X2luZm8yIHw9IGNfbWFzazsKIAl9IGVsc2UKIAkJb3h1X2RiZyhveHUsICJyZXVzZWQgcWggJXAgc2NoZWR1bGVcbiIsIHFoKTsKQEAgLTI2ODQsNyArMjY4NCw3IEBACiAJb3h1LT51cmJfbGVuID0gMDsKIAogCS8qIEZJTVhFICovCi0JaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrID0gMFVMOworCWhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzayA9IE5VTEw7CiAKIAlpZiAob3h1LT5pc19vdGcpIHsKIAkJb3h1LT5jYXBzID0gaGNkLT5yZWdzICsgT1hVX09UR19DQVBfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oCmluZGV4IDg5MTBlMjcuLjFjMjE2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmgKQEAgLTIzNSwyMSArMjM1LDIxIEBACiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOwogCiAvKiBtYXNrIE5ha0NudCtUIGluIHFoLT5od19hbHRfbmV4dCAqLwotI2RlZmluZSBRVERfTUFTSyBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHgxZikKKyNkZWZpbmUgUVREX01BU0sgY3B1X3RvX2xlMzIgKH4weDFmKQogCiAjZGVmaW5lIElTX1NIT1JUX1JFQUQodG9rZW4pIChRVERfTEVOR1RIKHRva2VuKSAhPSAwICYmIFFURF9QSUQodG9rZW4pID09IDEpCiAKIC8qIFR5cGUgdGFnIGZyb20ge3FoLCBpdGQsIHNpdGQsIGZzdG59LT5od19uZXh0ICovCi0jZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKSkKKyNkZWZpbmUgUV9ORVhUX1RZUEUoZG1hKSAoKGRtYSkgJiBjcHVfdG9fbGUzMiAoMyA8PCAxKSkKIAogLyogdmFsdWVzIGZvciB0aGF0IHR5cGUgdGFnICovCi0jZGVmaW5lIFFfVFlQRV9RSAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9RSAljcHVfdG9fbGUzMiAoMSA8PCAxKQogCiAvKiBuZXh0IGFzeW5jIHF1ZXVlIGVudHJ5LCBvciBwb2ludGVyIHRvIGludGVycnVwdC9wZXJpb2RpYyBRSCAqLwogI2RlZmluZQlRSF9ORVhUKGRtYSkJKGNwdV90b19sZTMyKCgodTMyKWRtYSkmfjB4MDFmKXxRX1RZUEVfUUgpCiAKIC8qIGZvciBwZXJpb2RpYy9hc3luYyBzY2hlZHVsZXMgYW5kIHF0ZCBsaXN0cywgbWFyayBlbmQgb2YgbGlzdCAqLwotI2RlZmluZQlFSENJX0xJU1RfRU5ECV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KKyNkZWZpbmUJRUhDSV9MSVNUX0VORAljcHVfdG9fbGUzMigxKSAvKiAibnVsbCBwb2ludGVyIiB0byBodyAqLwogCiAvKgogICogRW50cmllcyBpbiBwZXJpb2RpYyBzaGFkb3cgdGFibGUgYXJlIHBvaW50ZXJzIHRvIG9uZSBvZiBmb3VyIGtpbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IDc1YjY5ODQuLjAzM2MyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkgKi8KIAloY2NfcGFyYW1zID0gcmVhZGwoYmFzZSArIEVIQ0lfSENDX1BBUkFNUyk7CiAJb2Zmc2V0ID0gKGhjY19wYXJhbXMgPj4gOCkgJiAweGZmOwotCXdoaWxlIChvZmZzZXQgJiYgY291bnQtLSkgeworCXdoaWxlIChvZmZzZXQgJiYgLS1jb3VudCkgewogCQl1MzIJCWNhcDsKIAkJaW50CQltc2VjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCAzMTkwNDEyLi5mMTYyNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTY2MCw5ICs2NjAsOSBAQAogCXUxNiBhcnJheVtSOEE2NjU5N19NQVhfTlVNX1BJUEVdLCBpID0gMCwgbWluOwogCiAJbWVtc2V0KGFycmF5LCAwLCBzaXplb2YoYXJyYXkpKTsKLQlzd2l0Y2ggKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXApKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgotCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJCWFycmF5W2krK10gPSA0OwogCQllbHNlIHsKIAkJCWFycmF5W2krK10gPSAzOwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6Ci0JCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgeworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpIHsKIAkJCWFycmF5W2krK10gPSA2OwogCQkJYXJyYXlbaSsrXSA9IDc7CiAJCQlhcnJheVtpKytdID0gODsKQEAgLTY3OCw3ICs2NzgsNyBAQAogCQkJYXJyYXlbaSsrXSA9IDk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKLQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCQlhcnJheVtpKytdID0gMjsKIAkJZWxzZQogCQkJYXJyYXlbaSsrXSA9IDE7CkBAIC05MjgsMTAgKzkyOCw5IEBACiAKIAlpbmZvLnBpcGVudW0gPSBnZXRfZW1wdHlfcGlwZW51bShyOGE2NjU5NywgZXApOwogCWluZm8uYWRkcmVzcyA9IGdldF91cmJfdG9fcjhhNjY1OTdfYWRkcihyOGE2NjU5NywgdXJiKTsKLQlpbmZvLmVwbnVtID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJaW5mby5lcG51bSA9IHVzYl9lbmRwb2ludF9udW0oZXApOwogCWluZm8ubWF4cGFja2V0ID0gbGUxNl90b19jcHUoZXAtPndNYXhQYWNrZXRTaXplKTsKLQlpbmZvLnR5cGUgPSBnZXRfcjhhNjY1OTdfdHlwZShlcC0+Ym1BdHRyaWJ1dGVzCi0JCQkJICAgICAgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJaW5mby50eXBlID0gZ2V0X3I4YTY2NTk3X3R5cGUodXNiX2VuZHBvaW50X3R5cGUoZXApKTsKIAlpbmZvLmJ1Zm51bSA9IGdldF9idWZudW0oaW5mby5waXBlbnVtKTsKIAlpbmZvLmJ1Zl9ic2l6ZSA9IGdldF9idWZfYnNpemUoaW5mby5waXBlbnVtKTsKIAlpZiAoaW5mby50eXBlID09IFI4QTY2NTk3X0JVTEspIHsKQEAgLTk0MSw3ICs5NDAsNyBAQAogCQlpbmZvLmludGVydmFsID0gZ2V0X2ludGVydmFsKHVyYiwgZXAtPmJJbnRlcnZhbCk7CiAJCWluZm8udGltZXJfaW50ZXJ2YWwgPSBnZXRfdGltZXJfaW50ZXJ2YWwodXJiLCBlcC0+YkludGVydmFsKTsKIAl9Ci0JaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJaW5mby5kaXJfaW4gPSAxOwogCWVsc2UKIAkJaW5mby5kaXJfaW4gPSAwOwpAQCAtMTAxNCw2ICsxMDEzLDkgQEAKIAogCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7CisKKwlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCisJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkICovCkBAIC0xMzk1LDcgKzEzOTcsNyBAQAogCQkJICAgKGludCl1cmItPmlzb19mcmFtZV9kZXNjW3RkLT5pc29fY250XS5sZW5ndGgpOwogCX0gZWxzZSB7CiAJCWJ1ZiA9ICh1MTYgKikodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQlzaXplID0gbWluKChpbnQpYnVmc2l6ZSwKKwkJc2l6ZSA9IG1pbl90KHUzMiwgYnVmc2l6ZSwKIAkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCkBAIC0xNjE1LDYgKzE2MTcsMTEgQEAKIAkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIERUQ0hFLCBJTlRFTkIyKTsKIAkJCXI4YTY2NTk3X3VzYl9kaXNjb25uZWN0KHI4YTY2NTk3LCAxKTsKIAkJfQorCQlpZiAobWFzazIgJiBCQ0hHKSB7CisJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkJDSEcsIElOVFNUUzIpOworCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgQkNIR0UsIElOVEVOQjIpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJCX0KIAl9CiAKIAlpZiAobWFzazEpIHsKQEAgLTE2MzAsNiArMTYzNywxMiBAQAogCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgRFRDSEUsIElOVEVOQjEpOwogCQkJcjhhNjY1OTdfdXNiX2Rpc2Nvbm5lY3QocjhhNjY1OTcsIDApOwogCQl9CisJCWlmIChtYXNrMSAmIEJDSEcpIHsKKwkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QkNIRywgSU5UU1RTMSk7CisJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBCQ0hHRSwgSU5URU5CMSk7CisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwkJfQorCiAJCWlmIChtYXNrMSAmIFNJR04pIHsKIAkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+U0lHTiwgSU5UU1RTMSk7CiAJCQlzdGF0dXMgPSBnZXRfdXJiX2Vycm9yKHI4YTY2NTk3LCAwKTsKQEAgLTIxNDEsNyArMjE1NCw3IEBACiAKIAkJc3dpdGNoICh3VmFsdWUpIHsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKLQkJCXJoLT5wb3J0ICY9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQkJcmgtPnBvcnQgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgogCQkJYnJlYWs7CkBAIC0yMjEzLDYgKzIyMjYsNjggQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUE0pCitzdGF0aWMgaW50IHI4YTY2NTk3X2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NyA9IGhjZF90b19yOGE2NjU5NyhoY2QpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBSOEE2NjU5N19NQVhfUk9PVF9IVUI7IHBvcnQrKykgeworCQlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKKwkJdW5zaWduZWQgbG9uZyBkdnN0Y3RyX3JlZyA9IGdldF9kdnN0Y3RyX3JlZyhwb3J0KTsKKworCQlpZiAoIShyaC0+cG9ydCAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFKSkpCisJCQljb250aW51ZTsKKworCQlkYmcoInN1c3BlbmQgcG9ydCA9ICVkIiwgcG9ydCk7CisJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIFVBQ1QsIGR2c3RjdHJfcmVnKTsJLyogc3VzcGVuZCAqLworCQlyaC0+cG9ydCB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORDsKKworCQlpZiAocmgtPmRldi0+dWRldi0+ZG9fcmVtb3RlX3dha2V1cCkgeworCQkJbXNsZWVwKDMpOwkvKiB3YWl0aW5nIGxhc3QgU09GICovCisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBSV1VQRSwgZHZzdGN0cl9yZWcpOworCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5CQ0hHLCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBCQ0hHRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCQl9CisJfQorCisJcjhhNjY1OTctPmJ1c19zdXNwZW5kZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjhhNjY1OTdfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcgPSBoY2RfdG9fcjhhNjY1OTcoaGNkKTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisJCXVuc2lnbmVkIGxvbmcgZHZzdGN0cl9yZWcgPSBnZXRfZHZzdGN0cl9yZWcocG9ydCk7CisKKwkJaWYgKCEocmgtPnBvcnQgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSkKKwkJCWNvbnRpbnVlOworCisJCWRiZygicmVzdW1lIHBvcnQgPSAlZCIsIHBvcnQpOworCQlyaC0+cG9ydCAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJcmgtPnBvcnQgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDsKKwkJcjhhNjY1OTdfbWRmeShyOGE2NjU5NywgUkVTVU1FLCBSRVNVTUUgfCBVQUNULCBkdnN0Y3RyX3JlZyk7CisJCW1zbGVlcCg1MCk7CisJCXI4YTY2NTk3X21kZnkocjhhNjY1OTcsIFVBQ1QsIFJFU1VNRSB8IFVBQ1QsIGR2c3RjdHJfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorI2Vsc2UKKyNkZWZpbmUJcjhhNjY1OTdfYnVzX3N1c3BlbmQJTlVMTAorI2RlZmluZQlyOGE2NjU5N19idXNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGhjX2RyaXZlciByOGE2NjU5N19oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAogCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCByOGE2NjU5NyksCkBAIC0yMjQzLDE2ICsyMzE4LDM5IEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CXI4YTY2NTk3X2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJcjhhNjY1OTdfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kID0JCXI4YTY2NTk3X2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCXI4YTY2NTk3X2J1c19yZXN1bWUsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pCiBzdGF0aWMgaW50IHI4YTY2NTk3X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCXN0cnVjdCByOGE2NjU5NwkJKnI4YTY2NTk3ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWRpc2FibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisKKwkJcmgtPnBvcnQgPSAweDAwMDAwMDAwOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHI4YTY2NTk3X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCByOGE2NjU5NwkJKnI4YTY2NTk3ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwllbmFibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwogCXJldHVybiAwOwogfQogI2Vsc2UJLyogaWYgZGVmaW5lZChDT05GSUdfUE0pICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmggYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmgKaW5kZXggZWNhY2RlNC4uZjQ5MjA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaApAQCAtNTA0LDYgKzUwNCw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGNoaWxkX2Nvbm5lY3RfbWFwWzRdOworCisJdW5zaWduZWQgYnVzX3N1c3BlbmRlZDoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcjhhNjY1OTcgKmhjZF90b19yOGE2NjU5NyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggZTEwNmU5ZC4uYTk0OTI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOwogCiAJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9IT1NUQ1RMUkVHLCBjb250cm9sKTsKLQllcC0+bGVuZ3RoID0gbWluKChpbnQpbGVuLAorCWVwLT5sZW5ndGggPSBtaW5fdCh1MzIsIGxlbiwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJUEFDS0VUKCJJTiVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAogCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApLCBlcCwgbGVuKTsKQEAgLTI1NSw3ICsyNTUsNyBAQAogCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXByZWZldGNoKGJ1Zik7CiAKLQlsZW4gPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCWxlbiA9IG1pbl90KHUzMiwgZXAtPm1heHBhY2tldCwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAlpZiAoIShjb250cm9sICYgU0wxMUhfSENUTE1BU0tfSVNPQ0gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCmluZGV4IDIwY2M1OGIuLmU1MmI5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCkBAIC0xMTgsNyArMTE4LDkgQEAKIAl9CiAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyVzIiwgcHR5cGUsICh1cmJwLT5mc2JyID8gIiBGU0JSIiA6ICIiKSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiIEFjdGxlbj0lZCIsIHVyYnAtPnVyYi0+YWN0dWFsX2xlbmd0aCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiIEFjdGxlbj0lZCVzIiwgdXJicC0+dXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJKHVyYnAtPnFoLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgPworCQkJCSItOCIgOiAiIikpOwogCiAJaWYgKHVyYnAtPnVyYi0+dW5saW5rZWQpCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIiBVbmxpbmtlZD0lZCIsIHVyYnAtPnVyYi0+dW5saW5rZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCmluZGV4IDdkMDFjNTYuLjI2YmQxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTczLDExICs3MywxMSBAQAogI2RlZmluZSAgIFVTQkxFR1NVUF9SV0MJCTB4OGYwMAkvKiB0aGUgUi9XQyBiaXRzICovCiAjZGVmaW5lICAgVVNCTEVHU1VQX1JPCQkweDUwNDAJLyogUi9PIGFuZCByZXNlcnZlZCBiaXRzICovCiAKLSNkZWZpbmUgVUhDSV9QVFJfQklUUwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMEYpCi0jZGVmaW5lIFVIQ0lfUFRSX1RFUk0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAxKQotI2RlZmluZSBVSENJX1BUUl9RSAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDIpCi0jZGVmaW5lIFVIQ0lfUFRSX0RFUFRICQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwNCkKLSNkZWZpbmUgVUhDSV9QVFJfQlJFQURUSAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMCkKKyNkZWZpbmUgVUhDSV9QVFJfQklUUwkJY3B1X3RvX2xlMzIoMHgwMDBGKQorI2RlZmluZSBVSENJX1BUUl9URVJNCQljcHVfdG9fbGUzMigweDAwMDEpCisjZGVmaW5lIFVIQ0lfUFRSX1FICQljcHVfdG9fbGUzMigweDAwMDIpCisjZGVmaW5lIFVIQ0lfUFRSX0RFUFRICQljcHVfdG9fbGUzMigweDAwMDQpCisjZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJY3B1X3RvX2xlMzIoMHgwMDAwKQogCiAjZGVmaW5lIFVIQ0lfTlVNRlJBTUVTCQkxMDI0CS8qIGluIHRoZSBmcmFtZSBsaXN0IFthcnJheV0gKi8KICNkZWZpbmUgVUhDSV9NQVhfU09GX05VTUJFUgkyMDQ3CS8qIGluIGFuIFNPRiBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCmluZGV4IDU2MzFkODkuLjNlNTgwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJCS8qIE90aGVyd2lzZSBhbGwgdGhlIHRvZ2dsZXMgaW4gdGhlIFVSQiBoYXZlIHRvIGJlIHN3aXRjaGVkICovCiAJCX0gZWxzZSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewotCQkJCXRkLT50b2tlbiBePSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJCXRkLT50b2tlbiBePSBjcHVfdG9fbGUzMigKIAkJCQkJCQlURF9UT0tFTl9UT0dHTEUpOwogCQkJCXRvZ2dsZSBePSAxOwogCQkJfQpAQCAtODgzLDcgKzg4Myw3IEBACiAKIAl1aGNpX2ZpbGxfdGQodGQsIDAsIFVTQl9QSURfT1VUIHwgdWhjaV9leHBsZW4oMCksIDApOwogCXdtYigpOwotCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOworCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKIAlxaC0+ZHVtbXlfdGQgPSB0ZDsKIAogCS8qIExvdy1zcGVlZCB0cmFuc2ZlcnMgZ2V0IGEgZGlmZmVyZW50IHF1ZXVlLCBhbmQgd29uJ3QgaG9nIHRoZSBidXMuCkBAIC04OTksOCArODk5LDYgQEAKIAl9CiAJaWYgKHFoLT5zdGF0ZSAhPSBRSF9TVEFURV9BQ1RJVkUpCiAJCXFoLT5za2VsID0gc2tlbDsKLQotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IC04OwkvKiBBY2NvdW50IGZvciB0aGUgU0VUVVAgcGFja2V0ICovCiAJcmV0dXJuIDA7CiAKIG5vbWVtOgpAQCAtMTAwMyw3ICsxMDAxLDcgQEAKIAkgKiBmYXN0IHNpZGUgYnV0IG5vdCBlbm91Z2ggdG8ganVzdGlmeSBkZWxheWluZyBhbiBpbnRlcnJ1cHQKIAkgKiBtb3JlIHRoYW4gMiBvciAzIFVSQnMsIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBVUkJfTk9fSU5URVJSVVBUCiAJICogZmxhZyBzZXR0aW5nLiAqLwotCXRkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiAKIAkvKgogCSAqIEJ1aWxkIHRoZSBuZXcgZHVtbXkgVEQgYW5kIGFjdGl2YXRlIHRoZSBvbGQgb25lCkBAIC0xMDE1LDcgKzEwMTMsNyBAQAogCiAJdWhjaV9maWxsX3RkKHRkLCAwLCBVU0JfUElEX09VVCB8IHVoY2lfZXhwbGVuKDApLCAwKTsKIAl3bWIoKTsKLQlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKKwlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CiAJcWgtPmR1bW15X3RkID0gdGQ7CiAKIAl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCkBAIC0xMzE3LDcgKzEzMTUsNyBAQAogCX0KIAogCS8qIFNldCB0aGUgaW50ZXJydXB0LW9uLWNvbXBsZXRpb24gZmxhZyBvbiB0aGUgbGFzdCBwYWNrZXQuICovCi0JdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwl0ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKIAogCS8qIEFkZCB0aGUgVERzIHRvIHRoZSBmcmFtZSBsaXN0ICovCiAJZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOwpAQCAtMTQ5NCwxMSArMTQ5MiwxMCBAQAogCiAJaWYgKHFoLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKIAotCQkvKiB1cmItPmFjdHVhbF9sZW5ndGggPCAwIG1lYW5zIHRoZSBzZXR1cCB0cmFuc2FjdGlvbiBkaWRuJ3QKLQkJICogY29tcGxldGUgc3VjY2Vzc2Z1bGx5LiAgRWl0aGVyIGl0IGZhaWxlZCBvciB0aGUgVVJCIHdhcwotCQkgKiB1bmxpbmtlZCBmaXJzdC4gIFJlZ2FyZGxlc3MsIGRvbid0IGNvbmZ1c2UgcGVvcGxlIHdpdGggYQotCQkgKiBuZWdhdGl2ZSBsZW5ndGguICovCi0JCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1heCh1cmItPmFjdHVhbF9sZW5ndGgsIDApOworCQkvKiBTdWJ0cmFjdCBvZmYgdGhlIGxlbmd0aCBvZiB0aGUgU0VUVVAgcGFja2V0IGZyb20KKwkJICogdXJiLT5hY3R1YWxfbGVuZ3RoLgorCQkgKi8KKwkJdXJiLT5hY3R1YWxfbGVuZ3RoIC09IG1pbl90KHUzMiwgOCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CiAKIAkvKiBXaGVuIGdpdmluZyBiYWNrIHRoZSBmaXJzdCBVUkIgaW4gYW4gSXNvY2hyb25vdXMgcXVldWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDk3MmYyMGIuLmVjYTM1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9CTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0JMHgwMSwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig4KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4MiwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAzLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDgpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDAzLAogCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDIsCi0JCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDY0KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMjE4LDcgKzIxOCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4NCwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig2NCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwppbmRleCBlNDYzZGI1Li5hNjhkOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC0xMzUsNDUgKzEzNSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeXRoZXJtLgogCi1jb25maWcgVVNCX1BISURHRVQKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRzIGRyaXZlcnMiCi0JZGVwZW5kcyBvbiBVU0IKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgdmFyaW91cyBkcml2ZXJzIGZvciBkZXZpY2VzIGZyb20KLQkgIFBoaWRnZXRzIGluYy4KLQotY29uZmlnIFVTQl9QSElER0VUS0lUCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFBoaWRnZXRJbnRlcmZhY2VLaXQgVVNCIGRldmljZQotCSAgZnJvbSBQaGlkZ2V0cyBJbmMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRraXQuCi0KLWNvbmZpZyBVU0JfUEhJREdFVE1PVE9SQ09OVFJPTAotCXRyaXN0YXRlICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0TW90b3JDb250cm9sIFVTQiBkZXZpY2UKLQkgIGZyb20gUGhpZGdldHMgSW5jLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0bW90b3Jjb250cm9sLgotCi1jb25maWcgVVNCX1BISURHRVRTRVJWTwotCXRyaXN0YXRlICJVU0IgUGhpZGdldFNlcnZvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhbiAxIG9yIDQgTW90b3IgUGhpZGdldFNlcnZvIAotCSAgc2Vydm8gY29udHJvbGxlciB2ZXJzaW9uIDIuMCBvciAzLjAuCi0KLQkgIFBoaWRnZXRzIEluYy4gaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cucGhpZGdldHMuY29tLz4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRzZXJ2by4KLQogY29uZmlnIFVTQl9JRE1PVVNFCiAJdHJpc3RhdGUgIlNpZW1lbnMgSUQgVVNCIE1vdXNlIEZpbmdlcnByaW50IHNlbnNvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQppbmRleCAxMzM0ZjdiLi4wODI2YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTE4LDEwICsxOCw2IEBACiBvYmotJChDT05GSUdfVVNCX0xEKQkJKz0gbGR1c2Iubwogb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSB1c2JsZWQubwogb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IGxlZ291c2J0b3dlci5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVQpCSs9IHBoaWRnZXQubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUS0lUKQkrPSBwaGlkZ2V0a2l0Lm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVE1PVE9SQ09OVFJPTCkJKz0gcGhpZGdldG1vdG9yY29udHJvbC5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVRTRVJWTykJKz0gcGhpZGdldHNlcnZvLm8KIG9iai0kKENPTkZJR19VU0JfUklPNTAwKQkrPSByaW81MDAubwogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCiBvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKQkrPSB0cmFuY2V2aWJyYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwppbmRleCA3OWE3NjY4Li45ZDA2NzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKQEAgLTE1NjgsNyArMTU2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQorICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgyIHwgKGVkIDw8IDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ19sZW5ndGggPT0gMCkgewpAQCAtMTcwMiw3ICsxNzAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWRkcmVzcyA8PCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSBtaW4oMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSBtaW5fdCh1MzIsIDEwMjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7CkBAIC0xNzY2LDcgKzE3NjYsNyBAQAogICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmZ0ZGktPnUxMzJfbG9jayk7CiAgICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOwogICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNWVkMzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRzIGNsYXNzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotc3RydWN0IGNsYXNzICpwaGlkZ2V0X2NsYXNzOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3BoaWRnZXQodm9pZCkKLXsKLQlwaGlkZ2V0X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAicGhpZGdldCIpOwotCi0JaWYgKElTX0VSUihwaGlkZ2V0X2NsYXNzKSkKLQkJcmV0dXJuIFBUUl9FUlIocGhpZGdldF9jbGFzcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcGhpZGdldCh2b2lkKQotewotCWNsYXNzX2Rlc3Ryb3kocGhpZGdldF9jbGFzcyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHBoaWRnZXRfY2xhc3MpOwotCi1tb2R1bGVfaW5pdChpbml0X3BoaWRnZXQpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9waGlkZ2V0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQ29udGFpbmVyIG1vZHVsZSBmb3IgcGhpZGdldCBjbGFzcyIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaCBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDAxMTkwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0cyBjbGFzcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLWV4dGVybiBzdHJ1Y3QgY2xhc3MgKnBoaWRnZXRfY2xhc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzhlMGE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQwICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldEludGVyZmFjZUtpdCBkcml2ZXIgMS4wCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGFuaWVsIFNhYWtlcyA8ZGFuaWVsQHNhYWtlcy5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBVU0IgUGhpZGdldEludGVyZmFjZUtpdC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAicGhpZGdldC5oIgotCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgotI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgRHJpdmVyIgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDA0CTB4MDA0MAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAxNjE2CTB4MDA0NAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OAkweDAwNDUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwNDcJMHgwMDUxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDg4CTB4MDA1MwotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfV0lTRUdST1VQCQkweDA5MjUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODQJMHg4MjAxCi0KLSNkZWZpbmUgTUFYX0lOVEVSRkFDRVMJCQkxNgotCi0jZGVmaW5lIFVSQl9JTlRfU0laRQkJCTgKLQotc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgewotCWludCBzZW5zb3JzOwotCWludCBpbnB1dHM7Ci0JaW50IG91dHB1dHM7Ci0JaW50IGhhc19sY2Q7Ci0JaW50IGFtbmVzaWFjOwotfTsKLQotI2RlZmluZSBpZmtpdChfc2Vuc29ycywgX2lucHV0cywgX291dHB1dHMsIF9sY2QsIF9hbW5lc2lhYykJCVwKLXsJCQkJCQkJCQlcCi0JLnNlbnNvcnMJPSBfc2Vuc29ycywJCQkJCVwKLQkuaW5wdXRzCQk9IF9pbnB1dHMsCQkJCQlcCi0JLm91dHB1dHMJPSBfb3V0cHV0cywJCQkJCVwKLQkuaGFzX2xjZAk9IF9sY2QsCQkJCQkJXAotCS5hbW5lc2lhYwk9IF9hbW5lc2lhYwkJCQkJXAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzAwNCA9IGlma2l0KDAsIDAsIDQsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzg4OG4gPSBpZmtpdCg4LCA4LCA4LCAwLCAxKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF84ODhvID0gaWZraXQoOCwgOCwgOCwgMCwgMCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDQ3ID0gaWZraXQoMCwgNCwgNywgMSwgMCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfODg0ID0gaWZraXQoOCwgOCwgNCwgMCwgMCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDg4ID0gaWZraXQoMCwgOCwgOCwgMSwgMCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDE2MTYgPSBpZmtpdCgwLCAxNiwgMTYsIDAsIDApOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87Ci0KLXN0cnVjdCBpbnRlcmZhY2VraXQgewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwotCXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICppZmtpdDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBvdXRwdXRzOwotCWludCBkZXZfbm87Ci0JdTggaW5wdXRzW01BWF9JTlRFUkZBQ0VTXTsKLQl1MTYgc2Vuc29yc1tNQVhfSU5URVJGQUNFU107Ci0JdTggbGNkX2ZpbGVzX29uOwotCi0Jc3RydWN0IHVyYiAqaXJxOwotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JZG1hX2FkZHJfdCBkYXRhX2RtYTsKLQotCXN0cnVjdCBkZWxheWVkX3dvcmsgZG9fbm90aWZ5OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgZG9fcmVzdWJtaXQ7Ci0JdW5zaWduZWQgbG9uZyBpbnB1dF9ldmVudHM7Ci0JdW5zaWduZWQgbG9uZyBzZW5zb3JfZXZlbnRzOwotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAwNCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDA0fSwKLQl7VVNCX0RFVklDRV9WRVIoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCwgMCwgMHg4MTQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4OG99LAotCXtVU0JfREVWSUNFX1ZFUihVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg4LCAweDA4MTUsIDB4ZmZmZiksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg4bn0sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA0NyksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDQ3fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDg4KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wODh9LAotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMTYxNiksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDE2MTZ9LAotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4NCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg0fSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgc2V0X291dHB1dHMoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0KQotewotCXU4ICpidWZmZXI7Ci0JaW50IHJldHZhbDsKLQotCWJ1ZmZlciA9IGt6YWxsb2MoNCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWJ1ZmZlclswXSA9ICh1OClraXQtPm91dHB1dHM7Ci0JYnVmZmVyWzFdID0gKHU4KShraXQtPm91dHB1dHMgPj4gOCk7Ci0KLQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgInNlbmRpbmcgZGF0YTogMHglMDR4XG4iLCAodTE2KWtpdC0+b3V0cHV0cyk7Ci0KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAotCQkJIHVzYl9zbmRjdHJscGlwZShraXQtPnVkZXYsIDApLAotCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDQsIDIwMDApOwotCi0JaWYgKHJldHZhbCAhPSA0KQotCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgCi0JCQkJcmV0dmFsKTsKLQlrZnJlZShidWZmZXIpOwotCi0JaWYgKGtpdC0+aWZraXQtPmFtbmVzaWFjKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fcmVzdWJtaXQsIEhaIC8gMik7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2hhbmdlX3N0cmluZyhzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQsIGNvbnN0IGNoYXIgKmRpc3BsYXksIHVuc2lnbmVkIGNoYXIgcm93KQotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQl1bnNpZ25lZCBjaGFyICpmb3JtX2J1ZmZlcjsKLQlpbnQgcmV0dmFsID0gLUVOT01FTTsKLQlpbnQgaSxqLCBsZW4sIGJ1Zl9wdHI7Ci0JCi0JYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKLQlmb3JtX2J1ZmZlciA9IGttYWxsb2MoMzAsIEdGUF9LRVJORUwpOwotCWlmICgoIWJ1ZmZlcikgfHwgKCFmb3JtX2J1ZmZlcikpIHsKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJZ290byBleGl0OwotCX0KLQotCWxlbiA9IHN0cmxlbihkaXNwbGF5KTsKLQlpZiAobGVuID4gMjApCi0JCWxlbiA9IDIwOwotCi0JZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJTZXR0aW5nIExDRCBsaW5lICVkIHRvICVzXG4iLCByb3csIGRpc3BsYXkpOwotCi0JZm9ybV9idWZmZXJbMF0gPSByb3cgKiAweDQwICsgMHg4MDsKLQlmb3JtX2J1ZmZlclsxXSA9IDB4MDI7Ci0JYnVmX3B0ciA9IDI7Ci0JZm9yIChpID0gMDsgaTxsZW47IGkrKykKLQkJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IGRpc3BsYXlbaV07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKDIwIC0gbGVuKTsgaSsrKQotCQlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gMHgyMDsKLQlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gMHgwMTsKLQlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gcm93ICogMHg0MCArIDB4ODAgKyBzdHJsZW4oZGlzcGxheSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmX3B0cjsgaSArPSA3KSB7Ci0JCWlmICgoYnVmX3B0ciAtIGkpID4gNykKLQkJCWxlbiA9IDc7Ci0JCWVsc2UKLQkJCWxlbiA9IChidWZfcHRyIC0gaSk7Ci0JCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKLQkJCWJ1ZmZlcltqXSA9IGZvcm1fYnVmZmVyW2kgKyBqXTsKLQkJYnVmZmVyWzddID0gbGVuOwotCi0JCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCi0JCQkJIHVzYl9zbmRjdHJscGlwZShraXQtPnVkZXYsIDApLAotCQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA4LCAyMDAwKTsKLQkJaWYgKHJldHZhbCA8IDApCi0JCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmV0dmFsID0gMDsKLWV4aXQ6Ci0Ja2ZyZWUoYnVmZmVyKTsKLQlrZnJlZShmb3JtX2J1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0jZGVmaW5lIHNldF9sY2RfbGluZShudW1iZXIpCVwKLXN0YXRpYyBzc2l6ZV90IGxjZF9saW5lXyMjbnVtYmVyKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCWNoYW5nZV9zdHJpbmcoa2l0LCBidWYsIG51bWJlciAtIDEpOwkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgbGNkX2xpbmVfYXR0cihudW1iZXIpCQkJCQkJXAotCV9fQVRUUihsY2RfbGluZV8jI251bWJlciwgU19JV1VHTywgTlVMTCwgbGNkX2xpbmVfIyNudW1iZXIpCi0KLXNldF9sY2RfbGluZSgxKTsKLXNldF9sY2RfbGluZSgyKTsKLQotc3RhdGljIHNzaXplX3Qgc2V0X2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JCi0JYnVmZmVyID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGVkKSA8IDEpIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQlpZiAoZW5hYmxlZCkKLQkJYnVmZmVyWzBdID0gMHgwMTsKLQlidWZmZXJbN10gPSAweDExOwotCi0JZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJTZXR0aW5nIGJhY2tsaWdodCB0byAlc1xuIiwgZW5hYmxlZCA/ICJvbiIgOiAib2ZmIik7Ci0JCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKLQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA4LCAyMDAwKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBleGl0OwotCi0JcmV0dmFsID0gY291bnQ7Ci1leGl0OgotCWtmcmVlKGJ1ZmZlcik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9sY2RfbGluZV9hdHRyc1tdID0gewotCWxjZF9saW5lX2F0dHIoMSksCi0JbGNkX2xpbmVfYXR0cigyKSwKLQlfX0FUVFIoYmFja2xpZ2h0LCBTX0lXVUdPLCBOVUxMLCBzZXRfYmFja2xpZ2h0KQotfTsKLQotc3RhdGljIHZvaWQgcmVtb3ZlX2xjZF9maWxlcyhzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoa2l0LT5sY2RfZmlsZXNfb24pIHsKLQkJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJSZW1vdmluZyBsY2QgZmlsZXNcbiIpOwotCi0JCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2xjZF9saW5lX2F0dHJzKTsgaSsrKQotCQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2xjZF9saW5lX2F0dHJzW2ldKTsKLQl9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGVuYWJsZV9sY2RfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IGVuYWJsZTsKLQlpbnQgaSwgcmM7Ci0JCi0JaWYgKGtpdC0+aWZraXQtPmhhc19sY2QgPT0gMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZSkgPCAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChlbmFibGUpIHsKLQkJaWYgKCFraXQtPmxjZF9maWxlc19vbikgewotCQkJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJBZGRpbmcgbGNkIGZpbGVzXG4iKTsKLQkJCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2xjZF9saW5lX2F0dHJzKTsgaSsrKSB7Ci0JCQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsCi0JCQkJCSZkZXZfbGNkX2xpbmVfYXR0cnNbaV0pOwotCQkJCWlmIChyYykKLQkJCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlraXQtPmxjZF9maWxlc19vbiA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoa2l0LT5sY2RfZmlsZXNfb24pIHsKLQkJCXJlbW92ZV9sY2RfZmlsZXMoa2l0KTsKLQkJCWtpdC0+bGNkX2ZpbGVzX29uID0gMDsKLQkJfQotCX0KLQkKLQlyZXR1cm4gY291bnQ7Ci1vdXQ6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9sY2RfbGluZV9hdHRyc1tpXSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihsY2QsIFNfSVdVR08sIE5VTEwsIGVuYWJsZV9sY2RfZmlsZXMpOwotCi1zdGF0aWMgdm9pZCBpbnRlcmZhY2VraXRfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSB1cmItPmNvbnRleHQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyID0ga2l0LT5kYXRhOwotCWludCBpLCBsZXZlbCwgc2Vuc29yOwotCWludCByZXR2YWw7Ci0JaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQlyZXR1cm47Ci0JLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCi0JZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWdvdG8gcmVzdWJtaXQ7Ci0JfQotCi0JLyogZGlnaXRhbCBpbnB1dHMgKi8KLQlpZiAoa2l0LT5pZmtpdC0+aW5wdXRzID09IDE2KSB7Ci0JCWZvciAoaT0wOyBpIDwgODsgaSsrKSB7Ci0JCQlsZXZlbCA9IChidWZmZXJbMF0gPj4gaSkgJiAxOwotCQkJaWYgKGtpdC0+aW5wdXRzW2ldICE9IGxldmVsKSB7Ci0JCQkJa2l0LT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KGksICZraXQtPmlucHV0X2V2ZW50cyk7Ci0JCQl9Ci0JCQlsZXZlbCA9IChidWZmZXJbMV0gPj4gaSkgJiAxOwotCQkJaWYgKGtpdC0+aW5wdXRzWzggKyBpXSAhPSBsZXZlbCkgewotCQkJCWtpdC0+aW5wdXRzWzggKyBpXSA9IGxldmVsOwotCQkJCXNldF9iaXQoOCArIGksICZraXQtPmlucHV0X2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JZWxzZSBpZiAoa2l0LT5pZmtpdC0+aW5wdXRzID09IDgpIHsKLQkJZm9yIChpPTA7IGkgPCA4OyBpKyspIHsKLQkJCWxldmVsID0gKGJ1ZmZlclsxXSA+PiBpKSAmIDE7Ci0JCQlpZiAoa2l0LT5pbnB1dHNbaV0gIT0gbGV2ZWwpIHsKLQkJCQlraXQtPmlucHV0c1tpXSA9IGxldmVsOwotCQkJCXNldF9iaXQoaSwgJmtpdC0+aW5wdXRfZXZlbnRzKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIGFuYWxvZyBpbnB1dHMgKi8KLQlpZiAoa2l0LT5pZmtpdC0+c2Vuc29ycykgewotCQlzZW5zb3IgPSAoYnVmZmVyWzBdICYgMSkgPyA0IDogMDsKLQotCQlsZXZlbCA9IGJ1ZmZlclsyXSArIChidWZmZXJbM10gJiAweDBmKSAqIDI1NjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls0XSArIChidWZmZXJbM10gJiAweGYwKSAqIDE2OwotCQlpZiAobGV2ZWwgIT0ga2l0LT5zZW5zb3JzW3NlbnNvcl0pIHsKLQkJCWtpdC0+c2Vuc29yc1tzZW5zb3JdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KHNlbnNvciwgJmtpdC0+c2Vuc29yX2V2ZW50cyk7Ci0JCX0KLQkJc2Vuc29yKys7Ci0JCWxldmVsID0gYnVmZmVyWzVdICsgKGJ1ZmZlcls2XSAmIDB4MGYpICogMjU2OwotCQlpZiAobGV2ZWwgIT0ga2l0LT5zZW5zb3JzW3NlbnNvcl0pIHsKLQkJCWtpdC0+c2Vuc29yc1tzZW5zb3JdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KHNlbnNvciwgJmtpdC0+c2Vuc29yX2V2ZW50cyk7Ci0JCX0KLQkJc2Vuc29yKys7Ci0JCWxldmVsID0gYnVmZmVyWzddICsgKGJ1ZmZlcls2XSAmIDB4ZjApICogMTY7Ci0JCWlmIChsZXZlbCAhPSBraXQtPnNlbnNvcnNbc2Vuc29yXSkgewotCQkJa2l0LT5zZW5zb3JzW3NlbnNvcl0gPSBsZXZlbDsKLQkJCXNldF9iaXQoc2Vuc29yLCAma2l0LT5zZW5zb3JfZXZlbnRzKTsKLQkJfQotCX0KLQotCWlmIChraXQtPmlucHV0X2V2ZW50cyB8fCBraXQtPnNlbnNvcl9ldmVudHMpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygma2l0LT5kb19ub3RpZnksIDApOwotCi1yZXN1Ym1pdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpCi0JCWVycigiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW50ZXJmYWNla2l0MCwgcmV0dmFsICVkIiwKLQkJCWtpdC0+dWRldi0+YnVzLT5idXNfbmFtZSwKLQkJCWtpdC0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGludGVyZmFjZWtpdCwgZG9fbm90aWZ5LndvcmspOwotCWludCBpOwotCWNoYXIgc3lzZnNfZmlsZVs4XTsKLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPmlucHV0czsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJmtpdC0+aW5wdXRfZXZlbnRzKSkgewotCQkJc3ByaW50ZihzeXNmc19maWxlLCAiaW5wdXQlZCIsIGkgKyAxKTsKLQkJCXN5c2ZzX25vdGlmeSgma2l0LT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+c2Vuc29yczsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJmtpdC0+c2Vuc29yX2V2ZW50cykpIHsKLQkJCXNwcmludGYoc3lzZnNfZmlsZSwgInNlbnNvciVkIiwgaSArIDEpOwotCQkJc3lzZnNfbm90aWZ5KCZraXQtPmRldi0+a29iaiwgTlVMTCwgc3lzZnNfZmlsZSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3Jlc3VibWl0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGludGVyZmFjZWtpdCwgZG9fcmVzdWJtaXQud29yayk7Ci0Jc2V0X291dHB1dHMoa2l0KTsKLX0KLQotI2RlZmluZSBzaG93X3NldF9vdXRwdXQodmFsdWUpCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQlpbnQgZW5hYmxlOwkJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlKSA8IDEpCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChlbmFibGUpCQkJCQkJCVwKLQkJc2V0X2JpdCh2YWx1ZSAtIDEsICZraXQtPm91dHB1dHMpOwkJCVwKLQllbHNlCQkJCQkJCQlcCi0JCWNsZWFyX2JpdCh2YWx1ZSAtIDEsICZraXQtPm91dHB1dHMpOyAJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dmFsID0gc2V0X291dHB1dHMoa2l0KTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgISF0ZXN0X2JpdCh2YWx1ZSAtIDEsICZraXQtPm91dHB1dHMpKTtcCi19Ci0KLSNkZWZpbmUgb3V0cHV0X2F0dHIodmFsdWUpCQkJCQkJXAotCV9fQVRUUihvdXRwdXQjI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQlcCi0JCXNob3dfb3V0cHV0IyN2YWx1ZSwgc2V0X291dHB1dCMjdmFsdWUpCi0KLXNob3dfc2V0X291dHB1dCgxKTsKLXNob3dfc2V0X291dHB1dCgyKTsKLXNob3dfc2V0X291dHB1dCgzKTsKLXNob3dfc2V0X291dHB1dCg0KTsKLXNob3dfc2V0X291dHB1dCg1KTsKLXNob3dfc2V0X291dHB1dCg2KTsKLXNob3dfc2V0X291dHB1dCg3KTsKLXNob3dfc2V0X291dHB1dCg4KTsKLXNob3dfc2V0X291dHB1dCg5KTsKLXNob3dfc2V0X291dHB1dCgxMCk7Ci1zaG93X3NldF9vdXRwdXQoMTEpOwotc2hvd19zZXRfb3V0cHV0KDEyKTsKLXNob3dfc2V0X291dHB1dCgxMyk7Ci1zaG93X3NldF9vdXRwdXQoMTQpOwotc2hvd19zZXRfb3V0cHV0KDE1KTsKLXNob3dfc2V0X291dHB1dCgxNik7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfb3V0cHV0X2F0dHJzW10gPSB7Ci0Jb3V0cHV0X2F0dHIoMSksIG91dHB1dF9hdHRyKDIpLCBvdXRwdXRfYXR0cigzKSwgb3V0cHV0X2F0dHIoNCksCi0Jb3V0cHV0X2F0dHIoNSksIG91dHB1dF9hdHRyKDYpLCBvdXRwdXRfYXR0cig3KSwgb3V0cHV0X2F0dHIoOCksCi0Jb3V0cHV0X2F0dHIoOSksIG91dHB1dF9hdHRyKDEwKSwgb3V0cHV0X2F0dHIoMTEpLCBvdXRwdXRfYXR0cigxMiksCi0Jb3V0cHV0X2F0dHIoMTMpLCBvdXRwdXRfYXR0cigxNCksIG91dHB1dF9hdHRyKDE1KSwgb3V0cHV0X2F0dHIoMTYpCi19OwotCi0jZGVmaW5lIHNob3dfaW5wdXQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5wdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGludClraXQtPmlucHV0c1t2YWx1ZSAtIDFdKTsJXAotfQotCi0jZGVmaW5lIGlucHV0X2F0dHIodmFsdWUpCQkJCQkJXAotCV9fQVRUUihpbnB1dCMjdmFsdWUsIFNfSVJVR08sIHNob3dfaW5wdXQjI3ZhbHVlLCBOVUxMKQotCi1zaG93X2lucHV0KDEpOwotc2hvd19pbnB1dCgyKTsKLXNob3dfaW5wdXQoMyk7Ci1zaG93X2lucHV0KDQpOwotc2hvd19pbnB1dCg1KTsKLXNob3dfaW5wdXQoNik7Ci1zaG93X2lucHV0KDcpOwotc2hvd19pbnB1dCg4KTsKLXNob3dfaW5wdXQoOSk7Ci1zaG93X2lucHV0KDEwKTsKLXNob3dfaW5wdXQoMTEpOwotc2hvd19pbnB1dCgxMik7Ci1zaG93X2lucHV0KDEzKTsKLXNob3dfaW5wdXQoMTQpOwotc2hvd19pbnB1dCgxNSk7Ci1zaG93X2lucHV0KDE2KTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9pbnB1dF9hdHRyc1tdID0gewotCWlucHV0X2F0dHIoMSksIGlucHV0X2F0dHIoMiksIGlucHV0X2F0dHIoMyksIGlucHV0X2F0dHIoNCksCi0JaW5wdXRfYXR0cig1KSwgaW5wdXRfYXR0cig2KSwgaW5wdXRfYXR0cig3KSwgaW5wdXRfYXR0cig4KSwKLQlpbnB1dF9hdHRyKDkpLCBpbnB1dF9hdHRyKDEwKSwgaW5wdXRfYXR0cigxMSksIGlucHV0X2F0dHIoMTIpLAotCWlucHV0X2F0dHIoMTMpLCBpbnB1dF9hdHRyKDE0KSwgaW5wdXRfYXR0cigxNSksIGlucHV0X2F0dHIoMTYpCi19OwotCi0jZGVmaW5lIHNob3dfc2Vuc29yKHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X3NlbnNvciMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpa2l0LT5zZW5zb3JzW3ZhbHVlIC0gMV0pOwlcCi19Ci0KLSNkZWZpbmUgc2Vuc29yX2F0dHIodmFsdWUpCQkJCQkJXAotCV9fQVRUUihzZW5zb3IjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X3NlbnNvciMjdmFsdWUsIE5VTEwpCi0KLXNob3dfc2Vuc29yKDEpOwotc2hvd19zZW5zb3IoMik7Ci1zaG93X3NlbnNvcigzKTsKLXNob3dfc2Vuc29yKDQpOwotc2hvd19zZW5zb3IoNSk7Ci1zaG93X3NlbnNvcig2KTsKLXNob3dfc2Vuc29yKDcpOwotc2hvd19zZW5zb3IoOCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfc2Vuc29yX2F0dHJzW10gPSB7Ci0Jc2Vuc29yX2F0dHIoMSksIHNlbnNvcl9hdHRyKDIpLCBzZW5zb3JfYXR0cigzKSwgc2Vuc29yX2F0dHIoNCksCi0Jc2Vuc29yX2F0dHIoNSksIHNlbnNvcl9hdHRyKDYpLCBzZW5zb3JfYXR0cig3KSwgc2Vuc29yX2F0dHIoOCkKLX07Ci0KLXN0YXRpYyBpbnQgaW50ZXJmYWNla2l0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0OwotCXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICppZmtpdDsKLQlpbnQgcGlwZSwgbWF4cCwgcmMgPSAtRU5PTUVNOwotCWludCBiaXQsIHZhbHVlLCBpOwotCi0JaWZraXQgPSAoc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgKilpZC0+ZHJpdmVyX2luZm87Ci0JaWYgKCFpZmtpdCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7Ci0JaWYgKCF1c2JfZW5kcG9pbnRfZGlyX2luKGVuZHBvaW50KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JLyoKLQkgKiBibUF0dHJpYnV0ZXMKLQkgKi8KLQlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7Ci0JCi0Ja2l0ID0ga3phbGxvYyhzaXplb2YoKmtpdCksIEdGUF9LRVJORUwpOwotCWlmICgha2l0KQotCQlnb3RvIG91dDsKLQotCWtpdC0+ZGV2X25vID0gLTE7Ci0Ja2l0LT5pZmtpdCA9IGlma2l0OwotCWtpdC0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBVUkJfSU5UX1NJWkUsIEdGUF9BVE9NSUMsICZraXQtPmRhdGFfZG1hKTsKLQlpZiAoIWtpdC0+ZGF0YSkKLQkJZ290byBvdXQ7Ci0KLQlraXQtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFraXQtPmlycSkKLQkJZ290byBvdXQ7Ci0KLQlraXQtPnVkZXYgPSB1c2JfZ2V0X2RldihkZXYpOwotCWtpdC0+aW50ZiA9IGludGY7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmtpdC0+ZG9fbm90aWZ5LCBkb19ub3RpZnkpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZraXQtPmRvX3Jlc3VibWl0LCBkb19yZXN1Ym1pdCk7Ci0JdXNiX2ZpbGxfaW50X3VyYihraXQtPmlycSwga2l0LT51ZGV2LCBwaXBlLCBraXQtPmRhdGEsCi0JCQltYXhwID4gVVJCX0lOVF9TSVpFID8gVVJCX0lOVF9TSVpFIDogbWF4cCwKLQkJCWludGVyZmFjZWtpdF9pcnEsIGtpdCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7Ci0Ja2l0LT5pcnEtPnRyYW5zZmVyX2RtYSA9IGtpdC0+ZGF0YV9kbWE7Ci0Ja2l0LT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraXQpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBiaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlc3RfYW5kX3NldF9iaXQoYml0LCAmZGV2aWNlX25vKTsKLSAgICAgICAgfSB3aGlsZSh2YWx1ZSk7Ci0gICAgICAgIGtpdC0+ZGV2X25vID0gYml0OwotCi0Ja2l0LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZraXQtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJIGtpdCwgImludGVyZmFjZWtpdCVkIiwga2l0LT5kZXZfbm8pOwotICAgICAgICBpZiAoSVNfRVJSKGtpdC0+ZGV2KSkgewotICAgICAgICAgICAgICAgIHJjID0gUFRSX0VSUihraXQtPmRldik7Ci0gICAgICAgICAgICAgICAga2l0LT5kZXYgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLQlpZiAodXNiX3N1Ym1pdF91cmIoa2l0LT5pcnEsIEdGUF9LRVJORUwpKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpPTA7IGk8aWZraXQtPm91dHB1dHM7IGkrKyApIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfb3V0cHV0X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQyOwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5pbnB1dHM7IGkrKyApIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDM7Ci0JfQotCi0JZm9yIChpPTA7IGk8aWZraXQtPnNlbnNvcnM7IGkrKyApIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfc2Vuc29yX2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQ0OwotCX0KLQotCWlmIChpZmtpdC0+aGFzX2xjZCkgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwgJmRldl9hdHRyX2xjZCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0NDsKLQotCX0KLQotCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCAlZC8lZC8lZCBhdHRhY2hlZFxuIiwKLQkJCWlma2l0LT5zZW5zb3JzLCBpZmtpdC0+aW5wdXRzLCBpZmtpdC0+b3V0cHV0cyk7Ci0KLQlyZXR1cm4gMDsKLQotb3V0NDoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7Ci0KLQlpID0gaWZraXQtPmlucHV0czsKLW91dDM6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9pbnB1dF9hdHRyc1tpXSk7Ci0KLQlpID0gaWZraXQtPm91dHB1dHM7Ci1vdXQyOgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfb3V0cHV0X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAoa2l0KSB7Ci0JCXVzYl9mcmVlX3VyYihraXQtPmlycSk7Ci0JCWlmIChraXQtPmRhdGEpCi0JCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBVUkJfSU5UX1NJWkUsIGtpdC0+ZGF0YSwga2l0LT5kYXRhX2RtYSk7Ci0JCWlmIChraXQtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKGtpdC0+ZGV2KTsKLQkJaWYgKGtpdC0+ZGV2X25vID49IDApCi0JCQljbGVhcl9iaXQoa2l0LT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKGtpdCk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlcmZhY2VraXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdDsKLQlpbnQgaTsKLQotCWtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0JaWYgKCFraXQpCi0JCXJldHVybjsKLQotCXVzYl9raWxsX3VyYihraXQtPmlycSk7Ci0JdXNiX2ZyZWVfdXJiKGtpdC0+aXJxKTsKLQl1c2JfYnVmZmVyX2ZyZWUoa2l0LT51ZGV2LCBVUkJfSU5UX1NJWkUsIGtpdC0+ZGF0YSwga2l0LT5kYXRhX2RtYSk7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrKCZraXQtPmRvX25vdGlmeSk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygma2l0LT5kb19yZXN1Ym1pdCk7Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5vdXRwdXRzOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9vdXRwdXRfYXR0cnNbaV0pOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+aW5wdXRzOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9pbnB1dF9hdHRyc1tpXSk7Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5zZW5zb3JzOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9zZW5zb3JfYXR0cnNbaV0pOwotCi0JaWYgKGtpdC0+aWZraXQtPmhhc19sY2QpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2F0dHJfbGNkKTsKLQkJcmVtb3ZlX2xjZF9maWxlcyhraXQpOwotCX0KLQotCWRldmljZV91bnJlZ2lzdGVyKGtpdC0+ZGV2KTsKLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0ICVkLyVkLyVkIGRldGFjaGVkXG4iLAotCQlraXQtPmlma2l0LT5zZW5zb3JzLCBraXQtPmlma2l0LT5pbnB1dHMsIGtpdC0+aWZraXQtPm91dHB1dHMpOwotCi0JdXNiX3B1dF9kZXYoa2l0LT51ZGV2KTsKLQljbGVhcl9iaXQoa2l0LT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0Ja2ZyZWUoa2l0KTsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGludGVyZmFjZWtpdF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAicGhpZGdldGtpdCIsCi0JLnByb2JlID0gaW50ZXJmYWNla2l0X3Byb2JlLAotCS5kaXNjb25uZWN0ID0gaW50ZXJmYWNla2l0X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gaWRfdGFibGUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGludGVyZmFjZWtpdF9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmludGVyZmFjZWtpdF9kcml2ZXIpOwotCWlmIChyZXR2YWwpCi0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpbnRlcmZhY2VraXRfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZpbnRlcmZhY2VraXRfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaW50ZXJmYWNla2l0X2luaXQpOwotbW9kdWxlX2V4aXQoaW50ZXJmYWNla2l0X2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDg4YjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjUgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0IE1vdG9yQ29udHJvbCBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJwaGlkZ2V0LmgiCi0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBEcml2ZXIiCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HTEFCCQkweDA2YzIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NT1RPUkNPTlRST0wJMHgwMDU4Ci0KLSNkZWZpbmUgVVJCX0lOVF9TSVpFCQkJOAotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87Ci0KLXN0cnVjdCBtb3RvcmNvbnRyb2wgewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlpbnQgZGV2X25vOwotCXU4IGlucHV0c1s0XTsKLQlzOCBkZXNpcmVkX3NwZWVkWzJdOwotCXM4IHNwZWVkWzJdOwotCXMxNiBfY3VycmVudFsyXTsKLQlzOCBhY2NlbGVyYXRpb25bMl07Ci0Jc3RydWN0IHVyYiAqaXJxOwotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JZG1hX2FkZHJfdCBkYXRhX2RtYTsKLQotCXN0cnVjdCBkZWxheWVkX3dvcmsgZG9fbm90aWZ5OwotCXVuc2lnbmVkIGxvbmcgaW5wdXRfZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgc3BlZWRfZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgZXhjZWVkX2V2ZW50czsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfTU9UT1JDT05UUk9MKSB9LAotCXt9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RhdGljIGludCBzZXRfbW90b3Ioc3RydWN0IG1vdG9yY29udHJvbCAqbWMsIGludCBtb3RvcikKLXsKLQl1OCAqYnVmZmVyOwotCWludCBzcGVlZCwgc3BlZWQyLCBhY2NlbGVyYXRpb247Ci0JaW50IHJldHZhbDsKLQotCWJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2VycigmbWMtPmludGYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlhY2NlbGVyYXRpb24gPSBtYy0+YWNjZWxlcmF0aW9uW21vdG9yXSAqIDEwOwotCS8qIC0xMjcgPD0gc3BlZWQgPD0gMTI3ICovCi0Jc3BlZWQgPSAobWMtPmRlc2lyZWRfc3BlZWRbbW90b3JdICogMTI3KSAvIDEwMDsKLQkvKiAtMHg3MzAwIDw9IHNwZWVkMiA8PSAweDczMDAgKi8KLQlzcGVlZDIgPSAobWMtPmRlc2lyZWRfc3BlZWRbbW90b3JdICogMjMwICogMTI4KSAvIDEwMDsKLQotCWJ1ZmZlclswXSA9IG1vdG9yOwotCWJ1ZmZlclsxXSA9IHNwZWVkOwotCWJ1ZmZlclsyXSA9IGFjY2VsZXJhdGlvbiA+PiA4OwotCWJ1ZmZlclszXSA9IGFjY2VsZXJhdGlvbjsKLQlidWZmZXJbNF0gPSBzcGVlZDIgPj4gODsKLQlidWZmZXJbNV0gPSBzcGVlZDI7Ci0KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cobWMtPnVkZXYsCi0JCQkgdXNiX3NuZGN0cmxwaXBlKG1jLT51ZGV2LCAwKSwKLQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA4LCAyMDAwKTsKLQotCWlmIChyZXR2YWwgIT0gOCkKLQkJZGV2X2VycigmbWMtPmludGYtPmRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwKLQkJCQlyZXR2YWwpOwotCWtmcmVlKGJ1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vdG9yY29udHJvbF9pcnEoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IG1jLT5kYXRhOwotCWludCBpLCBsZXZlbDsKLQlpbnQgcmV0dmFsOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czs7Ci0KLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCi0JCWJyZWFrOwotCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLwotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCXJldHVybjsKLQkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KLQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJZ290byByZXN1Ym1pdDsKLQl9Ci0KLQkvKiBkaWdpdGFsIGlucHV0cyAqLwotCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQlsZXZlbCA9IChidWZmZXJbMF0gPj4gaSkgJiAxOwotCQlpZiAobWMtPmlucHV0c1tpXSAhPSBsZXZlbCkgewotCQkJbWMtPmlucHV0c1tpXSA9IGxldmVsOwotCQkJc2V0X2JpdChpLCAmbWMtPmlucHV0X2V2ZW50cyk7Ci0JCX0KLQl9Ci0KLQkvKiBtb3RvciBzcGVlZCAqLwotCWlmIChidWZmZXJbMl0gPT0gMCkgewotCQlmb3IgKGk9MDsgaTwyOyBpKyspIHsKLQkJbGV2ZWwgPSAoKHM4KWJ1ZmZlcls0K2ldKSAqIDEwMCAvIDEyNzsKLQkJCWlmIChtYy0+c3BlZWRbaV0gIT0gbGV2ZWwpIHsKLQkJCQltYy0+c3BlZWRbaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KGksICZtYy0+c3BlZWRfZXZlbnRzKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWludCBpbmRleCA9IGJ1ZmZlclszXSAmIDE7Ci0KLQkJbGV2ZWwgPSAoKHM4KWJ1ZmZlcls0XSA8PCA4KSB8IGJ1ZmZlcls1XTsKLQkJbGV2ZWwgPSBsZXZlbCAqIDEwMCAvIDI5NDQwOwotCQlpZiAobWMtPnNwZWVkW2luZGV4XSAhPSBsZXZlbCkgewotCQkJbWMtPnNwZWVkW2luZGV4XSA9IGxldmVsOwotCQkJc2V0X2JpdChpbmRleCwgJm1jLT5zcGVlZF9ldmVudHMpOwotCQl9Ci0KLQkJbGV2ZWwgPSAoKHM4KWJ1ZmZlcls2XSA8PCA4KSB8IGJ1ZmZlcls3XTsKLQkJbWMtPl9jdXJyZW50W2luZGV4XSA9IGxldmVsICogMTAwIC8gMTU3MjsKLQl9Ci0KLQlpZiAoYnVmZmVyWzFdICYgMSkKLQkJc2V0X2JpdCgwLCAmbWMtPmV4Y2VlZF9ldmVudHMpOwotCi0JaWYgKGJ1ZmZlclsxXSAmIDIpCi0JCXNldF9iaXQoMSwgJm1jLT5leGNlZWRfZXZlbnRzKTsKLQotCWlmIChtYy0+aW5wdXRfZXZlbnRzIHx8IG1jLT5leGNlZWRfZXZlbnRzIHx8IG1jLT5zcGVlZF9ldmVudHMpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWMtPmRvX25vdGlmeSwgMCk7Ci0KLXJlc3VibWl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldHZhbCkKLQkJZGV2X2VycigmbWMtPmludGYtPmRldiwKLQkJCSJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9tb3RvcmNvbnRyb2wwLCByZXR2YWwgJWRcbiIsCi0JCQltYy0+dWRldi0+YnVzLT5idXNfbmFtZSwKLQkJCW1jLT51ZGV2LT5kZXZwYXRoLCByZXR2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBkb19ub3RpZnkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtb3RvcmNvbnRyb2wsIGRvX25vdGlmeS53b3JrKTsKLQlpbnQgaTsKLQljaGFyIHN5c2ZzX2ZpbGVbOF07Ci0KLQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCAmbWMtPmlucHV0X2V2ZW50cykpIHsKLQkJCXNwcmludGYoc3lzZnNfZmlsZSwgImlucHV0JWQiLCBpKTsKLQkJCXN5c2ZzX25vdGlmeSgmbWMtPmRldi0+a29iaiwgTlVMTCwgc3lzZnNfZmlsZSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGk9MDsgaTwyOyBpKyspIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCAmbWMtPnNwZWVkX2V2ZW50cykpIHsKLQkJCXNwcmludGYoc3lzZnNfZmlsZSwgInNwZWVkJWQiLCBpKTsKLQkJCXN5c2ZzX25vdGlmeSgmbWMtPmRldi0+a29iaiwgTlVMTCwgc3lzZnNfZmlsZSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGk9MDsgaTwyOyBpKyspIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCAmbWMtPmV4Y2VlZF9ldmVudHMpKQotCQkJZGV2X3dhcm4oJm1jLT5pbnRmLT5kZXYsCi0JCQkJIm1vdG9yICMlZCBleGNlZWRzIDEuNSBBbXAgY3VycmVudCBsaW1pdFxuIiwgaSk7Ci0JfQotfQotCi0jZGVmaW5lIHNob3dfc2V0X3NwZWVkKHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X3NwZWVkIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQlpbnQgc3BlZWQ7CQkJCQkJCVwKLQlpbnQgcmV0dmFsOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZzcGVlZCkgPCAxKQkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc3BlZWQgPCAtMTAwIHx8IHNwZWVkID4gMTAwKQkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQltYy0+ZGVzaXJlZF9zcGVlZFt2YWx1ZV0gPSBzcGVlZDsJCQkJXAotCQkJCQkJCQkJXAotCXJldHZhbCA9IHNldF9tb3RvcihtYywgdmFsdWUpOwkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBjb3VudDsJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X3NwZWVkIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbWMtPnNwZWVkW3ZhbHVlXSk7CQkJXAotfQotCi0jZGVmaW5lIHNwZWVkX2F0dHIodmFsdWUpIAkJCQkJCVwKLQlfX0FUVFIoc3BlZWQjI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgCQkJXAotCQlzaG93X3NwZWVkIyN2YWx1ZSwgc2V0X3NwZWVkIyN2YWx1ZSkKLQotc2hvd19zZXRfc3BlZWQoMCk7Ci1zaG93X3NldF9zcGVlZCgxKTsKLQotI2RlZmluZSBzaG93X3NldF9hY2NlbGVyYXRpb24odmFsdWUpCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfYWNjZWxlcmF0aW9uIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQlpbnQgYWNjZWxlcmF0aW9uOwkJCQkJCVwKLQlpbnQgcmV0dmFsOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZhY2NlbGVyYXRpb24pIDwgMSkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoYWNjZWxlcmF0aW9uIDwgMCB8fCBhY2NlbGVyYXRpb24gPiAxMDApCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbWMtPmFjY2VsZXJhdGlvblt2YWx1ZV0gPSBhY2NlbGVyYXRpb247CQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR2YWwgPSBzZXRfbW90b3IobWMsIHZhbHVlKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19hY2NlbGVyYXRpb24jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJIAlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCQkJY2hhciAqYnVmKQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBtYy0+YWNjZWxlcmF0aW9uW3ZhbHVlXSk7CQlcCi19Ci0KLSNkZWZpbmUgYWNjZWxlcmF0aW9uX2F0dHIodmFsdWUpCVwKLQlfX0FUVFIoYWNjZWxlcmF0aW9uIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAotCQlzaG93X2FjY2VsZXJhdGlvbiMjdmFsdWUsIHNldF9hY2NlbGVyYXRpb24jI3ZhbHVlKQotCi1zaG93X3NldF9hY2NlbGVyYXRpb24oMCk7Ci1zaG93X3NldF9hY2NlbGVyYXRpb24oMSk7Ci0KLSNkZWZpbmUgc2hvd19jdXJyZW50KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2N1cnJlbnQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkbUFcbiIsIChpbnQpbWMtPl9jdXJyZW50W3ZhbHVlXSk7CVwKLX0KLQotI2RlZmluZSBjdXJyZW50X2F0dHIodmFsdWUpCVwKLQlfX0FUVFIoY3VycmVudCMjdmFsdWUsIFNfSVJVR08sIHNob3dfY3VycmVudCMjdmFsdWUsIE5VTEwpCi0KLXNob3dfY3VycmVudCgwKTsKLXNob3dfY3VycmVudCgxKTsKLQotI2RlZmluZSBzaG93X2lucHV0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2lucHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGludCltYy0+aW5wdXRzW3ZhbHVlXSk7CQlcCi19Ci0KLSNkZWZpbmUgaW5wdXRfYXR0cih2YWx1ZSkJXAotCV9fQVRUUihpbnB1dCMjdmFsdWUsIFNfSVJVR08sIHNob3dfaW5wdXQjI3ZhbHVlLCBOVUxMKQotCi1zaG93X2lucHV0KDApOwotc2hvd19pbnB1dCgxKTsKLXNob3dfaW5wdXQoMik7Ci1zaG93X2lucHV0KDMpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJzW10gPSB7Ci0JaW5wdXRfYXR0cigwKSwKLQlpbnB1dF9hdHRyKDEpLAotCWlucHV0X2F0dHIoMiksCi0JaW5wdXRfYXR0cigzKSwKLQlzcGVlZF9hdHRyKDApLAotCXNwZWVkX2F0dHIoMSksCi0JYWNjZWxlcmF0aW9uX2F0dHIoMCksCi0JYWNjZWxlcmF0aW9uX2F0dHIoMSksCi0JY3VycmVudF9hdHRyKDApLAotCWN1cnJlbnRfYXR0cigxKQotfTsKLQotc3RhdGljIGludCBtb3RvcmNvbnRyb2xfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYzsKLQlpbnQgcGlwZSwgbWF4cCwgcmMgPSAtRU5PTUVNOwotCWludCBiaXQsIHZhbHVlLCBpOwotCi0JaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOwotCWlmICghdXNiX2VuZHBvaW50X2Rpcl9pbihlbmRwb2ludCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkgKiBibUF0dHJpYnV0ZXMKLQkgKi8KLQlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7Ci0KLQltYyA9IGt6YWxsb2Moc2l6ZW9mKCptYyksIEdGUF9LRVJORUwpOwotCWlmICghbWMpCi0JCWdvdG8gb3V0OwotCi0JbWMtPmRldl9ubyA9IC0xOwotCW1jLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFVSQl9JTlRfU0laRSwgR0ZQX0FUT01JQywgJm1jLT5kYXRhX2RtYSk7Ci0JaWYgKCFtYy0+ZGF0YSkKLQkJZ290byBvdXQ7Ci0KLQltYy0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1jLT5pcnEpCi0JCWdvdG8gb3V0OwotCi0JbWMtPnVkZXYgPSB1c2JfZ2V0X2RldihkZXYpOwotCW1jLT5pbnRmID0gaW50ZjsKLQltYy0+YWNjZWxlcmF0aW9uWzBdID0gbWMtPmFjY2VsZXJhdGlvblsxXSA9IDEwOwotCUlOSVRfREVMQVlFRF9XT1JLKCZtYy0+ZG9fbm90aWZ5LCBkb19ub3RpZnkpOwotCXVzYl9maWxsX2ludF91cmIobWMtPmlycSwgbWMtPnVkZXYsIHBpcGUsIG1jLT5kYXRhLAotCQkJbWF4cCA+IFVSQl9JTlRfU0laRSA/IFVSQl9JTlRfU0laRSA6IG1heHAsCi0JCQltb3RvcmNvbnRyb2xfaXJxLCBtYywgZW5kcG9pbnQtPmJJbnRlcnZhbCk7Ci0JbWMtPmlycS0+dHJhbnNmZXJfZG1hID0gbWMtPmRhdGFfZG1hOwotCW1jLT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtYyk7Ci0KLQlkbyB7Ci0JCWJpdCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmRldmljZV9ubywgc2l6ZW9mKGRldmljZV9ubykpOwotCQl2YWx1ZSA9IHRlc3RfYW5kX3NldF9iaXQoYml0LCAmZGV2aWNlX25vKTsKLQl9IHdoaWxlKHZhbHVlKTsKLQltYy0+ZGV2X25vID0gYml0OwotCi0JbWMtPmRldiA9IGRldmljZV9jcmVhdGUocGhpZGdldF9jbGFzcywgJm1jLT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLCBtYywKLQkJCQkibW90b3Jjb250cm9sJWQiLCBtYy0+ZGV2X25vKTsKLQlpZiAoSVNfRVJSKG1jLT5kZXYpKSB7Ci0JCXJjID0gUFRSX0VSUihtYy0+ZGV2KTsKLQkJbWMtPmRldiA9IE5VTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh1c2Jfc3VibWl0X3VyYihtYy0+aXJxLCBHRlBfS0VSTkVMKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2F0dHJzKTsgaSsrKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKG1jLT5kZXYsICZkZXZfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDI7Ci0JfQotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBQaGlkZ2V0TW90b3JDb250cm9sIGF0dGFjaGVkXG4iKTsKLQotCXJldHVybiAwOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKG1jLT5kZXYsICZkZXZfYXR0cnNbaV0pOwotb3V0OgotCWlmIChtYykgewotCQl1c2JfZnJlZV91cmIobWMtPmlycSk7Ci0JCWlmIChtYy0+ZGF0YSkKLQkJCXVzYl9idWZmZXJfZnJlZShkZXYsIFVSQl9JTlRfU0laRSwgbWMtPmRhdGEsIG1jLT5kYXRhX2RtYSk7Ci0JCWlmIChtYy0+ZGV2KQotCQkJZGV2aWNlX3VucmVnaXN0ZXIobWMtPmRldik7Ci0JCWlmIChtYy0+ZGV2X25vID49IDApCi0JCQljbGVhcl9iaXQobWMtPmRldl9ubywgJmRldmljZV9ubyk7Ci0KLQkJa2ZyZWUobWMpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgbW90b3Jjb250cm9sX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYzsKLQlpbnQgaTsKLQotCW1jID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQlpZiAoIW1jKQotCQlyZXR1cm47Ci0KLQl1c2Jfa2lsbF91cmIobWMtPmlycSk7Ci0JdXNiX2ZyZWVfdXJiKG1jLT5pcnEpOwotCXVzYl9idWZmZXJfZnJlZShtYy0+dWRldiwgVVJCX0lOVF9TSVpFLCBtYy0+ZGF0YSwgbWMtPmRhdGFfZG1hKTsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1jLT5kb19ub3RpZnkpOwotCi0JZm9yIChpPTA7IGk8QVJSQVlfU0laRShkZXZfYXR0cnMpOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLQotCWRldmljZV91bnJlZ2lzdGVyKG1jLT5kZXYpOwotCi0JdXNiX3B1dF9kZXYobWMtPnVkZXYpOwotCWNsZWFyX2JpdChtYy0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQlrZnJlZShtYyk7Ci0KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBkZXRhY2hlZFxuIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtb3RvcmNvbnRyb2xfZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRtb3RvcmNvbnRyb2wiLAotCS5wcm9iZSA9IG1vdG9yY29udHJvbF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IG1vdG9yY29udHJvbF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtb3RvcmNvbnRyb2xfaW5pdCh2b2lkKQotewotCWludCByZXR2YWwgPSAwOwotCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZtb3RvcmNvbnRyb2xfZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbW90b3Jjb250cm9sX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmbW90b3Jjb250cm9sX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KG1vdG9yY29udHJvbF9pbml0KTsKLW1vZHVsZV9leGl0KG1vdG9yY29udHJvbF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVmNmZlMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldFNlcnZvIGRyaXZlciAxLjAKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBVU0IgUGhpZGdldFNlcnZvIHZlcnNpb24gMi4wIGFuZCAzLjAgc2Vydm8gCi0gKiBjb250cm9sbGVycyBhdmFpbGFibGUgYXQ6IGh0dHA6Ly93d3cucGhpZGdldHMuY29tLyAKLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnB1dCBhczogZGVncmVlcy5taW51dGVzCi0gKgotICogQ0FVVElPTjogR2VuZXJhbGx5IHlvdSBzaG91bGQgdXNlIDAgPCBkZWdyZWVzIDwgMTgwIGFzIGFueXRoaW5nIGVsc2UKLSAqIGlzIHByb2JhYmx5IGJleW9uZCB0aGUgcmFuZ2Ugb2YgeW91ciBzZXJ2byBhbmQgbWF5IGRhbWFnZSBpdC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAicGhpZGdldC5oIgotCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgotI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRTZXJ2byBEcml2ZXIiCi0KLSNkZWZpbmUgVkVORE9SX0lEX0dMQUIJCQkJMHgwNmMyCi0jZGVmaW5lIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19RVUFECTB4MDAzOAotI2RlZmluZSBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fVU5JCQkweDAwMzkKLQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQCQkJMHgwOTI1Ci0jZGVmaW5lIFZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1FVQUQJMHg4MTAxCi0jZGVmaW5lIFZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1VOSQkweDgxMDQKLQotI2RlZmluZSBTRVJWT19WRVJTSU9OXzMwCQkJMHgwMQotI2RlZmluZSBTRVJWT19DT1VOVF9RVUFECQkJMHgwMgotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX0dMQUIsIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19RVUFEKSwgCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX1ZFUlNJT05fMzAgfCBTRVJWT19DT1VOVF9RVUFEIAotCX0sCi0JewotCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9HTEFCLCBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fVU5JKSwKLQkJLmRyaXZlcl9pbmZvID0gU0VSVk9fVkVSU0lPTl8zMCAKLQl9LAotCXsKLQkJVVNCX0RFVklDRShWRU5ET1JfSURfV0lTRUdST1VQLCAKLQkJCQlWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19RVUFEKSwKLQkJLmRyaXZlcl9pbmZvID0gU0VSVk9fQ09VTlRfUVVBRCAKLQl9LAotCXsKLQkJVVNCX0RFVklDRShWRU5ET1JfSURfV0lTRUdST1VQLCAKLQkJCQlWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19VTkkpLAotCQkuZHJpdmVyX2luZm8gPSAwCi0JfSwKLQl7fQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RhdGljIGludCB1bnNpZ25lZCBsb25nIGRldmljZV9ubzsKLQotc3RydWN0IHBoaWRnZXRfc2Vydm8gewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlpbnQgZGV2X25vOwotCXVsb25nIHR5cGU7Ci0JaW50IHB1bHNlWzRdOwotCWludCBkZWdyZWVzWzRdOwotCWludCBtaW51dGVzWzRdOwotfTsKLQotc3RhdGljIGludAotY2hhbmdlX3Bvc2l0aW9uX3YzMChzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8sIGludCBzZXJ2b19ubywgaW50IGRlZ3JlZXMsIAotCQkJCQkJCQlpbnQgbWludXRlcykKLXsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQotCWlmIChkZWdyZWVzIDwgLTIzIHx8IGRlZ3JlZXMgPiAzNjIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmZmVyID0ga21hbGxvYyg2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyKCZzZXJ2by0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLAotCQkJX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIHB1bHNlID0gMCAtIDQwOTUKLQkgKiBhbmdsZSA9IDAgLSAxODAgZGVncmVlcwotCSAqCi0JICogcHVsc2UgPSBhbmdsZSAqIDEwLjYgKyAyNDMuOAkKLQkgKi8KLQlzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dID0gKChkZWdyZWVzKjYwICsgbWludXRlcykqMTA2ICsgMjQzOCo2MCkvNjAwOwkKLQlzZXJ2by0+ZGVncmVlc1tzZXJ2b19ub109IGRlZ3JlZXM7Ci0Jc2Vydm8tPm1pbnV0ZXNbc2Vydm9fbm9dPSBtaW51dGVzOwkKLQotCS8qIAotCSAqIFRoZSBQaGlkZ2V0U2Vydm8gdjMuMCBpcyBjb250cm9sbGVkIGJ5IHNlbmRpbmcgNiBieXRlcywKLQkgKiA0ICogMTIgYml0cyBmb3IgZWFjaCBzZXJ2by4KLQkgKgotCSAqIGxvdyA9IGxvd2VyIDggYml0cyBwdWxzZQotCSAqIGhpZ2ggPSBoaWdoZXIgNCBiaXRzIHB1bHNlCi0JICoKLQkgKiBvZmZzZXQgICAgIGJpdHMKLQkgKiArLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIHwgMCB8ICAgICAgbG93IDAgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKLQkgKiB8IDEgfCBoaWdoIDEgfCBoaWdoIDAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCAyIHwgICAgICBsb3cgMSAgICAgIHwKLQkgKiArLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIHwgMyB8ICAgICAgbG93IDIgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKLQkgKiB8IDQgfCBoaWdoIDMgfCBoaWdoIDIgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCA1IHwgICAgICBsb3cgMyAgICAgIHwKLQkgKiArLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCSAqLwotCi0JYnVmZmVyWzBdID0gc2Vydm8tPnB1bHNlWzBdICYgMHhmZjsKLQlidWZmZXJbMV0gPSAoc2Vydm8tPnB1bHNlWzBdID4+IDggJiAweDBmKQotCSAgICB8IChzZXJ2by0+cHVsc2VbMV0gPj4gNCAmIDB4ZjApOwotCWJ1ZmZlclsyXSA9IHNlcnZvLT5wdWxzZVsxXSAmIDB4ZmY7Ci0JYnVmZmVyWzNdID0gc2Vydm8tPnB1bHNlWzJdICYgMHhmZjsKLQlidWZmZXJbNF0gPSAoc2Vydm8tPnB1bHNlWzJdID4+IDggJiAweDBmKQotCSAgICB8IChzZXJ2by0+cHVsc2VbM10gPj4gNCAmIDB4ZjApOwotCWJ1ZmZlcls1XSA9IHNlcnZvLT5wdWxzZVszXSAmIDB4ZmY7Ci0KLQlkZXZfZGJnKCZzZXJ2by0+dWRldi0+ZGV2LAotCQkiZGF0YTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCWJ1ZmZlclswXSwgYnVmZmVyWzFdLCBidWZmZXJbMl0sCi0JCWJ1ZmZlclszXSwgYnVmZmVyWzRdLCBidWZmZXJbNV0pOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcnZvLT51ZGV2LAotCQkJCSB1c2Jfc25kY3RybHBpcGUoc2Vydm8tPnVkZXYsIDApLAotCQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA2LCAyMDAwKTsKLQotCWtmcmVlKGJ1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50Ci1jaGFuZ2VfcG9zaXRpb25fdjIwKHN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2bywgaW50IHNlcnZvX25vLCBpbnQgZGVncmVlcywKLQkJCQkJCQkJaW50IG1pbnV0ZXMpCi17Ci0JaW50IHJldHZhbDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0KLQlpZiAoZGVncmVlcyA8IC0yMyB8fCBkZWdyZWVzID4gMjc4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigmc2Vydm8tPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiBhbmdsZSA9IDAgLSAxODAgZGVncmVlcwotCSAqIHB1bHNlID0gYW5nbGUgKyAyMwotCSAqLwotCXNlcnZvLT5wdWxzZVtzZXJ2b19ub109IGRlZ3JlZXMgKyAyMzsKLQlzZXJ2by0+ZGVncmVlc1tzZXJ2b19ub109IGRlZ3JlZXM7Ci0Jc2Vydm8tPm1pbnV0ZXNbc2Vydm9fbm9dPSAwOwotCi0JLyoKLQkgKiBUaGUgUGhpZGdldFNlcnZvIHYyLjAgaXMgY29udHJvbGxlZCBieSBzZW5kaW5nIHR3byBieXRlcy4gVGhlCi0JICogZmlyc3QgYnl0ZSBpcyB0aGUgc2Vydm8gbnVtYmVyIHhvcidlZCB3aXRoIDI6Ci0JICoKLQkgKiBzZXJ2byAwID0gMgotCSAqIHNlcnZvIDEgPSAzCi0JICogc2Vydm8gMiA9IDAKLQkgKiBzZXJ2byAzID0gMQotCSAqCi0JICogVGhlIHNlY29uZCBieXRlIGlzIHRoZSBwb3NpdGlvbi4KLQkgKi8KLQotCWJ1ZmZlclswXSA9IHNlcnZvX25vIF4gMjsKLQlidWZmZXJbMV0gPSBzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dOwotCi0JZGV2X2RiZygmc2Vydm8tPnVkZXYtPmRldiwgImRhdGE6ICUwMnggJTAyeFxuIiwgYnVmZmVyWzBdLCBidWZmZXJbMV0pOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcnZvLT51ZGV2LAotCQkJCSB1c2Jfc25kY3RybHBpcGUoc2Vydm8tPnVkZXYsIDApLAotCQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCAyLCAyMDAwKTsKLQotCWtmcmVlKGJ1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0jZGVmaW5lIHNob3dfc2V0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfc2Vydm8jI3ZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0JaW50IGRlZ3JlZXMsIG1pbnV0ZXMsIHJldHZhbDsJCQkJCVwKLQlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQkJCQkJCQkJCVwKLQltaW51dGVzID0gMDsJCQkJCQkJXAotCS8qIG11c3QgYXQgbGVhc3QgY29udmVydCBkZWdyZWVzICovCQkJCVwKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkLiVkIiwgJmRlZ3JlZXMsICZtaW51dGVzKSA8IDEpIHsJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSAJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNlcnZvLT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCkJCQkJXAotCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjMwKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKLQkJCQkJCQltaW51dGVzKTsJXAotCWVsc2UgCQkJCQkJCQlcCi0JCXJldHZhbCA9IGNoYW5nZV9wb3NpdGlvbl92MjAoc2Vydm8sIHZhbHVlLCBkZWdyZWVzLCAJXAotCQkJCQkJCW1pbnV0ZXMpOwlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiBjb3VudDsJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfc2Vydm8jI3ZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpIAkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAyZFxuIiwgc2Vydm8tPmRlZ3JlZXNbdmFsdWVdLAkJXAotCQkJCXNlcnZvLT5taW51dGVzW3ZhbHVlXSk7CQkJXAotfQotCi0jZGVmaW5lIHNlcnZvX2F0dHIodmFsdWUpCQkJCQkJXAotCV9fQVRUUihzZXJ2byMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCQlcCi0JCXNob3dfc2Vydm8jI3ZhbHVlLCBzZXRfc2Vydm8jI3ZhbHVlKQotc2hvd19zZXQoMCk7Ci1zaG93X3NldCgxKTsKLXNob3dfc2V0KDIpOwotc2hvd19zZXQoMyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cnNbXSA9IHsKLQlzZXJ2b19hdHRyKDApLCBzZXJ2b19hdHRyKDEpLCBzZXJ2b19hdHRyKDIpLCBzZXJ2b19hdHRyKDMpCi19OwotCi1zdGF0aWMgaW50Ci1zZXJ2b19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7Ci0Jc3RydWN0IHBoaWRnZXRfc2Vydm8gKmRldjsKLQlpbnQgYml0LCB2YWx1ZSwgcmM7Ci0JaW50IHNlcnZvX2NvdW50LCBpOwotCi0JZGV2ID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBwaGlkZ2V0X3NlcnZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7Ci0JZGV2LT50eXBlID0gaWQtPmRyaXZlcl9pbmZvOwotCWRldi0+ZGV2X25vID0gLTE7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGJpdCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmRldmljZV9ubywgc2l6ZW9mKGRldmljZV9ubykpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gdGVzdF9hbmRfc2V0X2JpdChiaXQsICZkZXZpY2Vfbm8pOwotICAgICAgICB9IHdoaWxlICh2YWx1ZSk7Ci0JZGV2LT5kZXZfbm8gPSBiaXQ7Ci0KLQlkZXYtPmRldiA9IGRldmljZV9jcmVhdGUocGhpZGdldF9jbGFzcywgJmRldi0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwKLQkJCQkgZGV2LCAic2Vydm8lZCIsIGRldi0+ZGV2X25vKTsKLQlpZiAoSVNfRVJSKGRldi0+ZGV2KSkgewotCQlyYyA9IFBUUl9FUlIoZGV2LT5kZXYpOwotCQlkZXYtPmRldiA9IE5VTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNlcnZvX2NvdW50ID0gZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCA/IDQgOiAxOwotCi0JZm9yIChpPTA7IGk8c2Vydm9fY291bnQ7IGkrKykgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0MjsKLQl9Ci0KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgJWQtTW90b3IgUGhpZGdldFNlcnZvIHYlZC4wIGF0dGFjaGVkXG4iLAotCQlzZXJ2b19jb3VudCwgZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCA/IDMgOiAyKTsKLQotCWlmICghKGRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApKQotCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCi0JCQkgIldBUk5JTkc6IHYyLjAgbm90IHRlc3RlZCEgUGxlYXNlIHJlcG9ydCBpZiBpdCB3b3Jrcy5cbiIpOwotCi0JcmV0dXJuIDA7Ci1vdXQyOgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOwotb3V0OgotCWlmIChkZXYpIHsKLQkJaWYgKGRldi0+ZGV2KQotCQkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2LT5kZXYpOwotCQlpZiAoZGV2LT5kZXZfbm8gPj0gMCkKLQkJCWNsZWFyX2JpdChkZXYtPmRldl9ubywgJmRldmljZV9ubyk7Ci0KLQkJa2ZyZWUoZGV2KTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXJ2b19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IHBoaWRnZXRfc2Vydm8gKmRldjsKLQlpbnQgc2Vydm9fY291bnQsIGk7Ci0KLQlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQotCXNlcnZvX2NvdW50ID0gZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCA/IDQgOiAxOwotCi0JZm9yIChpPTA7IGk8c2Vydm9fY291bnQ7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldi0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLQotCWRldmljZV91bnJlZ2lzdGVyKGRldi0+ZGV2KTsKLQl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBkZXRhY2hlZFxuIiwKLQkJc2Vydm9fY291bnQsIGRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7Ci0KLQljbGVhcl9iaXQoZGV2LT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCWtmcmVlKGRldik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXJ2b19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAicGhpZGdldHNlcnZvIiwKLQkucHJvYmUgPSBzZXJ2b19wcm9iZSwKLQkuZGlzY29ubmVjdCA9IHNlcnZvX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gaWRfdGFibGUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1waGlkZ2V0X3NlcnZvX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOwotCWlmIChyZXR2YWwpCi0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotcGhpZGdldF9zZXJ2b19leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJnNlcnZvX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHBoaWRnZXRfc2Vydm9faW5pdCk7Ci1tb2R1bGVfZXhpdChwaGlkZ2V0X3NlcnZvX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCmluZGV4IDRjZjI3YzcuLmY4ZDkwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwpAQCAtMzcsMTAgKzM3LDEzIEBACiAjZGVmaW5lIE1PTl9JT0NYX0dFVCAgIF9JT1coTU9OX0lPQ19NQUdJQywgNiwgc3RydWN0IG1vbl9iaW5fZ2V0KQogI2RlZmluZSBNT05fSU9DWF9NRkVUQ0ggX0lPV1IoTU9OX0lPQ19NQUdJQywgNywgc3RydWN0IG1vbl9iaW5fbWZldGNoKQogI2RlZmluZSBNT05fSU9DSF9NRkxVU0ggX0lPKE1PTl9JT0NfTUFHSUMsIDgpCisvKiAjOSB3YXMgTU9OX0lPQ1RfU0VUQVBJICovCisjZGVmaW5lIE1PTl9JT0NYX0dFVFggICBfSU9XKE1PTl9JT0NfTUFHSUMsIDEwLCBzdHJ1Y3QgbW9uX2Jpbl9nZXQpCiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjZGVmaW5lIE1PTl9JT0NYX0dFVDMyIF9JT1coTU9OX0lPQ19NQUdJQywgNiwgc3RydWN0IG1vbl9iaW5fZ2V0MzIpCiAjZGVmaW5lIE1PTl9JT0NYX01GRVRDSDMyIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fYmluX21mZXRjaDMyKQorI2RlZmluZSBNT05fSU9DWF9HRVRYMzIgICBfSU9XKE1PTl9JT0NfTUFHSUMsIDEwLCBzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikKICNlbmRpZgogCiAvKgpAQCAtOTIsNyArOTUsMjkgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCBsZW5fdXJiOwkvKiBMZW5ndGggb2YgZGF0YSAoc3VibWl0dGVkIG9yIGFjdHVhbCkgKi8KIAl1bnNpZ25lZCBpbnQgbGVuX2NhcDsJLyogRGVsaXZlcmVkIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgc2V0dXBbU0VUVVBfTEVOXTsJLyogT25seSBmb3IgQ29udHJvbCBTLXR5cGUgKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgc2V0dXBbU0VUVVBfTEVOXTsJLyogT25seSBmb3IgQ29udHJvbCBTLXR5cGUgKi8KKwkJc3RydWN0IGlzb19yZWMgeworCQkJaW50IGVycm9yX2NvdW50OworCQkJaW50IG51bWRlc2M7CisJCX0gaXNvOworCX0gczsKKwlpbnQgaW50ZXJ2YWw7CisJaW50IHN0YXJ0X2ZyYW1lOworCXVuc2lnbmVkIGludCB4ZmVyX2ZsYWdzOworCXVuc2lnbmVkIGludCBuZGVzYzsJLyogQWN0dWFsIG51bWJlciBvZiBJU08gZGVzY3JpcHRvcnMgKi8KK307CisKKy8qCisgKiBJU08gdmVjdG9yLCBwYWNrZWQgaW50byB0aGUgaGVhZCBvZiBkYXRhIHN0cmVhbS4KKyAqIFRoaXMgaGFzIHRvIHRha2UgMTYgYnl0ZXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVuZCBvZiBidWZmZXIKKyAqIHdyYXAgaXMgbm90IGhhcHBlbmluZyBpbiB0aGUgbWlkZGxlIG9mIGEgZGVzY3JpcHRvci4KKyAqLworc3RydWN0IG1vbl9iaW5faXNvZGVzYyB7CisJaW50ICAgICAgICAgIGlzb19zdGF0dXM7CisJdW5zaWduZWQgaW50IGlzb19vZmY7CisJdW5zaWduZWQgaW50IGlzb19sZW47CisJdTMyIF9wYWQ7CiB9OwogCiAvKiBwZXIgZmlsZSBzdGF0aXN0aWMgKi8KQEAgLTEwMiw3ICsxMjcsNyBAQAogfTsKIAogc3RydWN0IG1vbl9iaW5fZ2V0IHsKLQlzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHI7CS8qIE9ubHkgNDggYnl0ZXMsIG5vdCA2NC4gKi8KKwlzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHI7CS8qIENhbiBiZSA0OCBieXRlcyBvciA2NC4gKi8KIAl2b2lkIF9fdXNlciAqZGF0YTsKIAlzaXplX3QgYWxsb2M7CQkvKiBMZW5ndGggb2YgZGF0YSAoY2FuIGJlIHplcm8pICovCiB9OwpAQCAtMTMxLDYgKzE1NiwxMSBAQAogI2RlZmluZSBQS1RfQUxJR04gICA2NAogI2RlZmluZSBQS1RfU0laRSAgICA2NAogCisjZGVmaW5lIFBLVF9TWl9BUEkwIDQ4CS8qIEFQSSAwICgyLjYuMjApIHNpemUgKi8KKyNkZWZpbmUgUEtUX1NaX0FQSTEgNjQJLyogQVBJIDEgc2l6ZTogZXh0cmEgZmllbGRzICovCisKKyNkZWZpbmUgSVNPREVTQ19NQVggICAxMjgJLyogU2FtZSBudW1iZXIgYXMgdXNiZnMgYWxsb3dzLCAyMDQ4IGJ5dGVzLiAqLworCiAvKiBtYXggbnVtYmVyIG9mIFVTQiBidXMgc3VwcG9ydGVkICovCiAjZGVmaW5lIE1PTl9CSU5fTUFYX01JTk9SIDEyOAogCkBAIC0zNjAsMTIgKzM5MCw4IEBACiAgICAgY29uc3Qgc3RydWN0IHVyYiAqdXJiLCBjaGFyIGV2X3R5cGUpCiB7CiAKLQlpZiAoIXVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnVyYi0+ZXAtPmRlc2MpIHx8IGV2X3R5cGUgIT0gJ1MnKQotCQlyZXR1cm4gJy0nOwotCiAJaWYgKHVyYi0+c2V0dXBfcGFja2V0ID09IE5VTEwpCiAJCXJldHVybiAnWic7Ci0KIAltZW1jcHkoc2V0dXBiLCB1cmItPnNldHVwX3BhY2tldCwgU0VUVVBfTEVOKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM4Nyw2ICs0MTMsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbW9uX2Jpbl9nZXRfaXNvZGVzYyhjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAorICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCB1cmIgKnVyYiwgY2hhciBldl90eXBlLCB1bnNpZ25lZCBpbnQgbmRlc2MpCit7CisJc3RydWN0IG1vbl9iaW5faXNvZGVzYyAqZHA7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZwOworCisJZnAgPSB1cmItPmlzb19mcmFtZV9kZXNjOworCXdoaWxlIChuZGVzYy0tICE9IDApIHsKKwkJZHAgPSAoc3RydWN0IG1vbl9iaW5faXNvZGVzYyAqKQorCQkgICAgKHJwLT5iX3ZlY1tvZmZzZXQgLyBDSFVOS19TSVpFXS5wdHIgKyBvZmZzZXQgJSBDSFVOS19TSVpFKTsKKwkJZHAtPmlzb19zdGF0dXMgPSBmcC0+c3RhdHVzOworCQlkcC0+aXNvX29mZiA9IGZwLT5vZmZzZXQ7CisJCWRwLT5pc29fbGVuID0gKGV2X3R5cGUgPT0gJ1MnKSA/IGZwLT5sZW5ndGggOiBmcC0+YWN0dWFsX2xlbmd0aDsKKwkJZHAtPl9wYWQgPSAwOworCQlpZiAoKG9mZnNldCArPSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faXNvZGVzYykpID49IHJwLT5iX3NpemUpCisJCQlvZmZzZXQgPSAwOworCQlmcCsrOworCX0KK30KKwogc3RhdGljIHZvaWQgbW9uX2Jpbl9ldmVudChzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLCBzdHJ1Y3QgdXJiICp1cmIsCiAgICAgY2hhciBldl90eXBlLCBpbnQgc3RhdHVzKQogewpAQCAtMzk2LDYgKzQ0Miw3IEBACiAJdW5zaWduZWQgaW50IHVyYl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBuZGVzYywgbGVuZGVzYzsKIAl1bnNpZ25lZCBjaGFyIGRpcjsKIAlzdHJ1Y3QgbW9uX2Jpbl9oZHIgKmVwOwogCWNoYXIgZGF0YV90YWcgPSAwOwpAQCAtNDA3LDYgKzQ1NCwxOSBAQAogCS8qCiAJICogRmluZCB0aGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoLCB0aGVuIGFsbG9jYXRlIHNwYWNlLgogCSAqLworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkpIHsKKwkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPCAwKSB7CisJCQluZGVzYyA9IDA7CisJCX0gZWxzZSBpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA+PSBJU09ERVNDX01BWCkgeworCQkJbmRlc2MgPSBJU09ERVNDX01BWDsKKwkJfSBlbHNlIHsKKwkJCW5kZXNjID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwkJfQorCX0gZWxzZSB7CisJCW5kZXNjID0gMDsKKwl9CisJbGVuZGVzYyA9IG5kZXNjKnNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjKTsKKwogCXVyYl9sZW5ndGggPSAoZXZfdHlwZSA9PSAnUycpID8KIAkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDogdXJiLT5hY3R1YWxfbGVuZ3RoOwogCWxlbmd0aCA9IHVyYl9sZW5ndGg7CkBAIC00MjksMTAgKzQ4OSwxMiBAQAogCQlkaXIgPSAwOwogCX0KIAotCWlmIChycC0+bW1hcF9hY3RpdmUpCi0JCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2NfY29udGlndW91cyhycCwgbGVuZ3RoICsgUEtUX1NJWkUpOwotCWVsc2UKLQkJb2Zmc2V0ID0gbW9uX2J1ZmZfYXJlYV9hbGxvYyhycCwgbGVuZ3RoICsgUEtUX1NJWkUpOworCWlmIChycC0+bW1hcF9hY3RpdmUpIHsKKwkJb2Zmc2V0ID0gbW9uX2J1ZmZfYXJlYV9hbGxvY19jb250aWd1b3VzKHJwLAorCQkJCQkJIGxlbmd0aCArIFBLVF9TSVpFICsgbGVuZGVzYyk7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gbW9uX2J1ZmZfYXJlYV9hbGxvYyhycCwgbGVuZ3RoICsgUEtUX1NJWkUgKyBsZW5kZXNjKTsKKwl9CiAJaWYgKG9mZnNldCA9PSB+MCkgewogCQlycC0+Y250X2xvc3QrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnAtPmJfbG9jaywgZmxhZ3MpOwpAQCAtNDU2LDkgKzUxOCwzMSBAQAogCWVwLT50c191c2VjID0gdHMudHZfdXNlYzsKIAllcC0+c3RhdHVzID0gc3RhdHVzOwogCWVwLT5sZW5fdXJiID0gdXJiX2xlbmd0aDsKLQllcC0+bGVuX2NhcCA9IGxlbmd0aDsKKwllcC0+bGVuX2NhcCA9IGxlbmd0aCArIGxlbmRlc2M7CisJZXAtPnhmZXJfZmxhZ3MgPSB1cmItPnRyYW5zZmVyX2ZsYWdzOwogCi0JZXAtPmZsYWdfc2V0dXAgPSBtb25fYmluX2dldF9zZXR1cChlcC0+c2V0dXAsIHVyYiwgZXZfdHlwZSk7CisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpKSB7CisJCWVwLT5pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJfSBlbHNlIGlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkpIHsKKwkJZXAtPmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwkJZXAtPnN0YXJ0X2ZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKKwkJZXAtPnMuaXNvLmVycm9yX2NvdW50ID0gdXJiLT5lcnJvcl9jb3VudDsKKwkJZXAtPnMuaXNvLm51bWRlc2MgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCX0KKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKGVwZCkgJiYgZXZfdHlwZSA9PSAnUycpIHsKKwkJZXAtPmZsYWdfc2V0dXAgPSBtb25fYmluX2dldF9zZXR1cChlcC0+cy5zZXR1cCwgdXJiLCBldl90eXBlKTsKKwl9IGVsc2UgeworCQllcC0+ZmxhZ19zZXR1cCA9ICctJzsKKwl9CisKKwlpZiAobmRlc2MgIT0gMCkgeworCQllcC0+bmRlc2MgPSBuZGVzYzsKKwkJbW9uX2Jpbl9nZXRfaXNvZGVzYyhycCwgb2Zmc2V0LCB1cmIsIGV2X3R5cGUsIG5kZXNjKTsKKwkJaWYgKChvZmZzZXQgKz0gbGVuZGVzYykgPj0gcnAtPmJfc2l6ZSkKKwkJCW9mZnNldCAtPSBycC0+Yl9zaXplOworCX0KKwogCWlmIChsZW5ndGggIT0gMCkgewogCQllcC0+ZmxhZ19kYXRhID0gbW9uX2Jpbl9nZXRfZGF0YShycCwgb2Zmc2V0LCB1cmIsIGxlbmd0aCk7CiAJCWlmIChlcC0+ZmxhZ19kYXRhICE9IDApIHsJLyogWWVzLCBpdCdzIDB4MDAsIG5vdCAnMCcgKi8KQEAgLTU5Miw3ICs2NzYsOCBAQAogICogUmV0dXJucyB6ZXJvIG9yIGVycm9yLgogICovCiBzdGF0aWMgaW50IG1vbl9iaW5fZ2V0X2V2ZW50KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAotICAgIHN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkciwgdm9pZCBfX3VzZXIgKmRhdGEsIHVuc2lnbmVkIGludCBuYnl0ZXMpCisgICAgc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyLCB1bnNpZ25lZCBpbnQgaGRyYnl0ZXMsCisgICAgdm9pZCBfX3VzZXIgKmRhdGEsIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbW9uX2Jpbl9oZHIgKmVwOwpAQCAtNjA5LDcgKzY5NCw3IEBACiAKIAllcCA9IE1PTl9PRkYySERSKHJwLCBycC0+Yl9vdXQpOwogCi0JaWYgKGNvcHlfdG9fdXNlcihoZHIsIGVwLCBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSkpIHsKKwlpZiAoY29weV90b191c2VyKGhkciwgZXAsIGhkcmJ5dGVzKSkgewogCQltdXRleF91bmxvY2soJnJwLT5mZXRjaF9sb2NrKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtNjU3LDYgKzc0Miw3IEBACiAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGhkcmJ5dGVzID0gUEtUX1NaX0FQSTA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbW9uX2Jpbl9oZHIgKmVwOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CkBAIC02NzQsOCArNzYwLDggQEAKIAogCWVwID0gTU9OX09GRjJIRFIocnAsIHJwLT5iX291dCk7CiAKLQlpZiAocnAtPmJfcmVhZCA8IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpKSB7Ci0JCXN0ZXBfbGVuID0gbWluKG5ieXRlcywgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikgLSBycC0+Yl9yZWFkKTsKKwlpZiAocnAtPmJfcmVhZCA8IGhkcmJ5dGVzKSB7CisJCXN0ZXBfbGVuID0gbWluKG5ieXRlcywgKHNpemVfdCkoaGRyYnl0ZXMgLSBycC0+Yl9yZWFkKSk7CiAJCXB0ciA9ICgoY2hhciAqKWVwKSArIHJwLT5iX3JlYWQ7CiAJCWlmIChzdGVwX2xlbiAmJiBjb3B5X3RvX3VzZXIoYnVmLCBwdHIsIHN0ZXBfbGVuKSkgewogCQkJbXV0ZXhfdW5sb2NrKCZycC0+ZmV0Y2hfbG9jayk7CkBAIC02ODcsMTMgKzc3MywxMyBAQAogCQlkb25lICs9IHN0ZXBfbGVuOwogCX0KIAotCWlmIChycC0+Yl9yZWFkID49IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpKSB7CisJaWYgKHJwLT5iX3JlYWQgPj0gaGRyYnl0ZXMpIHsKIAkJc3RlcF9sZW4gPSBlcC0+bGVuX2NhcDsKLQkJc3RlcF9sZW4gLT0gcnAtPmJfcmVhZCAtIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpOworCQlzdGVwX2xlbiAtPSBycC0+Yl9yZWFkIC0gaGRyYnl0ZXM7CiAJCWlmIChzdGVwX2xlbiA+IG5ieXRlcykKIAkJCXN0ZXBfbGVuID0gbmJ5dGVzOwogCQlvZmZzZXQgPSBycC0+Yl9vdXQgKyBQS1RfU0laRTsKLQkJb2Zmc2V0ICs9IHJwLT5iX3JlYWQgLSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKTsKKwkJb2Zmc2V0ICs9IHJwLT5iX3JlYWQgLSBoZHJieXRlczsKIAkJaWYgKG9mZnNldCA+PSBycC0+Yl9zaXplKQogCQkJb2Zmc2V0IC09IHJwLT5iX3NpemU7CiAJCWlmIChjb3B5X2Zyb21fYnVmKHJwLCBvZmZzZXQsIGJ1Ziwgc3RlcF9sZW4pKSB7CkBAIC03MDksNyArNzk1LDcgQEAKIAkvKgogCSAqIENoZWNrIGlmIHdob2xlIHBhY2tldCB3YXMgcmVhZCwgYW5kIGlmIHNvLCBqdW1wIHRvIHRoZSBuZXh0IG9uZS4KIAkgKi8KLQlpZiAocnAtPmJfcmVhZCA+PSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSArIGVwLT5sZW5fY2FwKSB7CisJaWYgKHJwLT5iX3JlYWQgPj0gaGRyYnl0ZXMgKyBlcC0+bGVuX2NhcCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnAtPmJfbG9jaywgZmxhZ3MpOwogCQltb25fYnVmZl9hcmVhX2ZyZWUocnAsIFBLVF9TSVpFICsgZXAtPmxlbl9jYXApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycC0+Yl9sb2NrLCBmbGFncyk7CkBAIC05MDgsNiArOTk0LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE1PTl9JT0NYX0dFVDoKKwljYXNlIE1PTl9JT0NYX0dFVFg6CiAJCXsKIAkJc3RydWN0IG1vbl9iaW5fZ2V0IGdldGI7CiAKQEAgLTkxNyw4ICsxMDA0LDkgQEAKIAogCQlpZiAoZ2V0Yi5hbGxvYyA+IDB4MTAwMDAwMDApCS8qIFdhbnQgdG8gY2FzdCB0byB1MzIgKi8KIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwKLQkJCSAgZ2V0Yi5oZHIsIGdldGIuZGF0YSwgKHVuc2lnbmVkIGludClnZXRiLmFsbG9jKTsKKwkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsIGdldGIuaGRyLAorCQkgICAgKGNtZCA9PSBNT05fSU9DWF9HRVQpPyBQS1RfU1pfQVBJMDogUEtUX1NaX0FQSTEsCisJCSAgICBnZXRiLmRhdGEsICh1bnNpZ25lZCBpbnQpZ2V0Yi5hbGxvYyk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTk4NCwxNiArMTA3MiwxOCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAotCWNhc2UgTU9OX0lPQ1hfR0VUMzI6IHsKKwljYXNlIE1PTl9JT0NYX0dFVDMyOgorCWNhc2UgTU9OX0lPQ1hfR0VUWDMyOgorCQl7CiAJCXN0cnVjdCBtb25fYmluX2dldDMyIGdldGI7CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRiLCAodm9pZCBfX3VzZXIgKilhcmcsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1vbl9iaW5fZ2V0MzIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLAotCQkgICAgY29tcGF0X3B0cihnZXRiLmhkcjMyKSwgY29tcGF0X3B0cihnZXRiLmRhdGEzMiksCi0JCSAgICBnZXRiLmFsbG9jMzIpOworCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwgY29tcGF0X3B0cihnZXRiLmhkcjMyKSwKKwkJICAgIChjbWQgPT0gTU9OX0lPQ1hfR0VUMzIpPyBQS1RfU1pfQVBJMDogUEtUX1NaX0FQSTEsCisJCSAgICBjb21wYXRfcHRyKGdldGIuZGF0YTMyKSwgZ2V0Yi5hbGxvYzMyKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggOTk4NWRiMC4uYjY2ZTg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtMjAsOCArMjAsOCBAQAogCSAgaXQncyBiZWluZyB1c2VkIHdpdGgsIGluY2x1ZGluZyB0aGUgVVNCIHBlcmlwaGVyYWwgcm9sZSwKIAkgIG9yIHRoZSBVU0IgaG9zdCByb2xlLCBvciBib3RoLgogCi0JICBUZXhhcyBJbnN0cnVtZW50cyBwYXJ0cyB1c2luZyB0aGlzIElQIGluY2x1ZGUgRGFWaW5jaSA2NDR4LAotCSAgT01BUCAyNDN4LCBPTUFQIDM0M3gsIGFuZCBUVVNCIDYwMTAuCisJICBUZXhhcyBJbnN0cnVtZW50cyBmYW1pbGlpZXMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIERhVmluY2kKKwkgICgzNXgsIDY0NHggLi4uKSwgT01BUCAyNDN4LCBPTUFQIDMsIGFuZCBUVVNCIDYwMTAuCiAKIAkgIEFuYWxvZyBEZXZpY2VzIHBhcnRzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBCbGFja2ZpbiBCRjU0eCwKIAkgIEJGNTI1IGFuZCBCRjUyNy4KQEAgLTQwLDcgKzQwLDcgQEAKIAlkZWZhdWx0IHkgaWYgKEJGNTR4ICYmICFCRjU0NCkKIAlkZWZhdWx0IHkgaWYgKEJGNTJ4ICYmICFCRjUyMiAmJiAhQkY1MjMpCiAKLWNvbW1lbnQgIkRhVmluY2kgNjQ0eCBVU0Igc3VwcG9ydCIKK2NvbW1lbnQgIkRhVmluY2kgMzV4IGFuZCA2NDR4IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0kKIAogY29tbWVudCAiT01BUCAyNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCmluZGV4IDJkYzc2MDYuLjEwZDExYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCkBAIC00OCw2ICs0OCw5IEBACiAjaW5jbHVkZSAiY3BwaV9kbWEuaCIKIAogCisjZGVmaW5lIFVTQl9QSFlfQ1RSTAlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpCisjZGVmaW5lIERNMzU1X0RFRVBTTEVFUAlJT19BRERSRVNTKERNMzU1X0RFRVBTTEVFUF9QQUREUikKKwogLyogUkVWSVNJVCAoUE0pIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtlZXAgdGhlIFBIWSBpbiBsb3cgcG93ZXIgbW9kZSBtb3N0CiAgKiBvZiB0aGUgdGltZSAoMjQgTUhaIG9zY2lsbGF0b3IgYW5kIFBMTCBvZmYsIGV0YykgYnkgc2V0dGluZyBQT1dFUi5EMAogICogYW5kLCB3aGVuIGluIGhvc3QgbW9kZSwgYXV0b3N1c3BlbmRpbmcgaWRsZSByb290IHBvcnRzLi4uIFBIWVBMTE9OCkBAIC01NiwyMCArNTksMjYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHBoeV9vbih2b2lkKQogewotCS8qIHN0YXJ0IHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIFBMTCAqLwotCV9fcmF3X3dyaXRlbChVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTiwKLQkJCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKTsKLQl3aGlsZSAoKF9fcmF3X3JlYWRsKCh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpCi0JCQkmIFVTQlBIWV9QSFlDTEtHRCkgPT0gMCkKKwl1MzIJcGh5X2N0cmwgPSBfX3Jhd19yZWFkbChVU0JfUEhZX0NUUkwpOworCisJLyogcG93ZXIgZXZlcnl0aGluZyB1cDsgc3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMICovCisJcGh5X2N0cmwgJj0gfihVU0JQSFlfT1NDUERXTiB8IFVTQlBIWV9PVEdQRFdOIHwgVVNCUEhZX1BIWVBEV04pOworCXBoeV9jdHJsIHw9IFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OOworCV9fcmF3X3dyaXRlbChwaHlfY3RybCwgVVNCX1BIWV9DVFJMKTsKKworCS8qIHdhaXQgZm9yIFBMTCB0byBsb2NrIGJlZm9yZSBwcm9jZWVkaW5nICovCisJd2hpbGUgKChfX3Jhd19yZWFkbChVU0JfUEhZX0NUUkwpICYgVVNCUEhZX1BIWUNMS0dEKSA9PSAwKQogCQljcHVfcmVsYXgoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBoeV9vZmYodm9pZCkKIHsKLQkvKiBwb3dlcmRvd24gdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgb3NjaWxsYXRvciAqLwotCV9fcmF3X3dyaXRlbChVU0JQSFlfT1NDUERXTiB8IFVTQlBIWV9QSFlQRFdOLCAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpOworCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkvKiBwb3dlcmRvd24gdGhlIG9uLWNoaXAgUEhZLCBpdHMgUExMLCBhbmQgdGhlIE9URyBibG9jayAqLworCXBoeV9jdHJsICY9IH4oVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT04pOworCXBoeV9jdHJsIHw9IFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX09UR1BEV04gfCBVU0JQSFlfUEhZUERXTjsKKwlfX3Jhd193cml0ZWwocGh5X2N0cmwsIFVTQl9QSFlfQ1RSTCk7CiB9CiAKIHN0YXRpYyBpbnQgZG1hX29mZiA9IDE7CkBAIC0xMjYsMTAgKzEzNSw2IEBACiB9CiAKIAotLyogUkVWSVNJVCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIERhVmluY2kgY2FuIHN1cHBvcnQgZnVsbCBPVEcuICAqLwotCi1zdGF0aWMgaW50IHZidXNfc3RhdGUgPSAtMTsKLQogI2lmZGVmIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRAogI2RlZmluZQlwb3J0c3RhdGUoc3RtdCkJCXN0bXQKICNlbHNlCkBAIC0xMzcsMTAgKzE0MiwxOSBAQAogI2VuZGlmCiAKIAotLyogVkJVUyBTV0lUQ0hJTkcgSVMgQk9BUkQtU1BFQ0lGSUMgKi8KKy8qCisgKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAuLi4gYXQgbGVhc3QgZm9yIHRoZSBETTY0NDYgRVZNLAorICogd2hpY2ggZG9lc24ndCB3aXJlIERSVlZCVVMgdG8gdGhlIEZFVCB0aGF0IHN3aXRjaGVzIGl0LiAgVW5jbGVhcgorICogaWYgdGhhdCdzIGEgcHJvYmxlbSB3aXRoIHRoZSBETTY0NDYgY2hpcCBvciBqdXN0IHdpdGggdGhhdCBib2FyZC4KKyAqCisgKiBJbiBlaXRoZXIgY2FzZSwgdGhlIERNMzU1IEVWTSBhdXRvbWF0ZXMgRFJWVkJVUyB0aGUgbm9ybWFsIHdheSwKKyAqIHdoZW4gSjEwIGlzIG91dCwgYW5kIFRJIGRvY3VtZW50cyBpdCBhcyBoYW5kbGluZyBPVEcuCisgKi8KIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAKK3N0YXRpYyBpbnQgdmJ1c19zdGF0ZSA9IC0xOworCiAvKiBJMkMgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIHN5bmNocm9ub3VzLCBhbmQgcmVxdWlyZSBhIHRhc2sgY29udGV4dC4KICAqIFdpdGggdW5sb2FkZWQgc3lzdGVtcywgdXNpbmcgdGhlIHNoYXJlZCB3b3JrcXVldWUgc2VlbXMgdG8gc3VmZmljZQogICogdG8gc2F0aXNmeSB0aGUgMTAwbXNlYyBBX1dBSVRfVlJJU0UgdGltZW91dC4uLgpAQCAtMTUwLDEyICsxNjQsMTIgQEAKIAlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChHUElPX25WQlVTX0RSViwgdmJ1c19zdGF0ZSk7CiAJdmJ1c19zdGF0ZSA9ICF2YnVzX3N0YXRlOwogfQotc3RhdGljIERFQ0xBUkVfV09SSyhldm1fdmJ1c193b3JrLCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyk7CiAKICNlbmRpZgkvKiBFVk0gKi8KIAogc3RhdGljIHZvaWQgZGF2aW5jaV9zb3VyY2VfcG93ZXIoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbiwgaW50IGltbWVkaWF0ZSkKIHsKKyNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCWlmIChpc19vbikKIAkJaXNfb24gPSAxOwogCkBAIC0xNjMsMTYgKzE3NywxNyBAQAogCQlyZXR1cm47CiAJdmJ1c19zdGF0ZSA9ICFpc19vbjsJCS8qIDAvMSB2cyAiLTEgPT0gdW5rbm93bi9pbml0IiAqLwogCi0jaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAlpZiAobWFjaGluZV9pc19kYXZpbmNpX2V2bSgpKSB7CisJCXN0YXRpYyBERUNMQVJFX1dPUksoZXZtX3ZidXNfd29yaywgZXZtX2RlZmVycmVkX2RydnZidXMpOworCiAJCWlmIChpbW1lZGlhdGUpCiAJCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChHUElPX25WQlVTX0RSViwgdmJ1c19zdGF0ZSk7CiAJCWVsc2UKIAkJCXNjaGVkdWxlX3dvcmsoJmV2bV92YnVzX3dvcmspOwogCX0KLSNlbmRpZgogCWlmIChpbW1lZGlhdGUpCiAJCXZidXNfc3RhdGUgPSBpc19vbjsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NldF92YnVzKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24pCkBAIC0zOTEsNiArNDA2LDE3IEBACiAJbXVzYi0+Ym9hcmRfc2V0X3ZidXMgPSBkYXZpbmNpX3NldF92YnVzOwogCWRhdmluY2lfc291cmNlX3Bvd2VyKG11c2IsIDAsIDEpOwogCisJLyogZG0zNTUgRVZNIHN3YXBzIEQrL0QtIGZvciBzaWduYWwgaW50ZWdyaXR5LCBhbmQKKwkgKiBpcyBjbG9ja2VkIGZyb20gdGhlIG1haW4gMjQgTUh6IGNyeXN0YWwuCisJICovCisJaWYgKG1hY2hpbmVfaXNfZGF2aW5jaV9kbTM1NV9ldm0oKSkgeworCQl1MzIJcGh5X2N0cmwgPSBfX3Jhd19yZWFkbChVU0JfUEhZX0NUUkwpOworCisJCXBoeV9jdHJsICY9IH4oMyA8PCA5KTsKKwkJcGh5X2N0cmwgfD0gVVNCUEhZX0RBVEFQT0w7CisJCV9fcmF3X3dyaXRlbChwaHlfY3RybCwgVVNCX1BIWV9DVFJMKTsKKwl9CisKIAkvKiByZXNldCB0aGUgY29udHJvbGxlciAqLwogCW11c2Jfd3JpdGVsKHRpYmFzZSwgREFWSU5DSV9VU0JfQ1RSTF9SRUcsIDB4MSk7CiAKQEAgLTQwMSw4ICs0MjcsNyBAQAogCiAJLyogTk9URTogIGlycXMgYXJlIGluIG1peGVkIG1vZGUsIG5vdCBieXBhc3MgdG8gcHVyZS1tdXNiICovCiAJcHJfZGVidWcoIkRhVmluY2kgT1RHIHJldmlzaW9uICUwOHggcGh5ICUwM3ggY29udHJvbCAlMDJ4XG4iLAotCQlyZXZpc2lvbiwgX19yYXdfcmVhZGwoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSksCisJCXJldmlzaW9uLCBfX3Jhd19yZWFkbChVU0JfUEhZX0NUUkwpLAogCQltdXNiX3JlYWRiKHRpYmFzZSwgREFWSU5DSV9VU0JfQ1RSTF9SRUcpKTsKIAogCW11c2ItPmlzciA9IGRhdmluY2lfaW50ZXJydXB0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmggYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuaAppbmRleCA3ZmI2MjM4Li4wNDZjODQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuaApAQCAtMTUsMTQgKzE1LDIxIEBACiAgKi8KIAogLyogSW50ZWdyYXRlZCBoaWdoc3BlZWQvb3RnIFBIWSAqLwotI2RlZmluZQlVU0JQSFlfQ1RMX1BBRERSCShEQVZJTkNJX1NZU1RFTV9NT0RVTEVfQkFTRSArIDB4MzQpCi0jZGVmaW5lCVVTQlBIWV9QSFlDTEtHRAkJKDEgPDwgOCkKLSNkZWZpbmUJVVNCUEhZX1NFU05ERU4JCSgxIDw8IDcpCS8qIHYoc2Vzc19lbmQpIGNvbXBhcmF0b3IgKi8KLSNkZWZpbmUJVVNCUEhZX1ZCRFRDVEVOCQkoMSA8PCA2KQkvKiB2KGJ1cykgY29tcGFyYXRvciAqLwotI2RlZmluZQlVU0JQSFlfUEhZUExMT04JCSgxIDw8IDQpCS8qIG92ZXJyaWRlIHBsbCBzdXNwZW5kICovCi0jZGVmaW5lCVVTQlBIWV9DTEtPMVNFTAkJKDEgPDwgMykKLSNkZWZpbmUJVVNCUEhZX09TQ1BEV04JCSgxIDw8IDIpCi0jZGVmaW5lCVVTQlBIWV9QSFlQRFdOCQkoMSA8PCAwKQorI2RlZmluZSBVU0JQSFlfQ1RMX1BBRERSCShEQVZJTkNJX1NZU1RFTV9NT0RVTEVfQkFTRSArIDB4MzQpCisjZGVmaW5lIFVTQlBIWV9EQVRBUE9MCQlCSVQoMTEpCS8qIChkbTM1NSkgc3dpdGNoIEQrL0QtICovCisjZGVmaW5lIFVTQlBIWV9QSFlDTEtHRAkJQklUKDgpCisjZGVmaW5lIFVTQlBIWV9TRVNOREVOCQlCSVQoNykJLyogdihzZXNzX2VuZCkgY29tcGFyYXRvciAqLworI2RlZmluZSBVU0JQSFlfVkJEVENURU4JCUJJVCg2KQkvKiB2KGJ1cykgY29tcGFyYXRvciAqLworI2RlZmluZSBVU0JQSFlfVkJVU1NFTlMJCUJJVCg1KQkvKiAoZG0zNTUscm8pIGlzIHZidXMgPiAwLjVWICovCisjZGVmaW5lIFVTQlBIWV9QSFlQTExPTgkJQklUKDQpCS8qIG92ZXJyaWRlIHBsbCBzdXNwZW5kICovCisjZGVmaW5lIFVTQlBIWV9DTEtPMVNFTAkJQklUKDMpCisjZGVmaW5lIFVTQlBIWV9PU0NQRFdOCQlCSVQoMikKKyNkZWZpbmUgVVNCUEhZX09UR1BEV04JCUJJVCgxKQorI2RlZmluZSBVU0JQSFlfUEhZUERXTgkJQklUKDApCisKKyNkZWZpbmUgRE0zNTVfREVFUFNMRUVQX1BBRERSCShEQVZJTkNJX1NZU1RFTV9NT0RVTEVfQkFTRSArIDB4NDgpCisjZGVmaW5lIERSVlZCVVNfRk9SQ0UJCUJJVCgyKQorI2RlZmluZSBEUlZWQlVTX09WRVJSSURFCUJJVCgxKQogCiAvKiBGb3Igbm93IGluY2x1ZGUgdXNiIE9URyBtb2R1bGUgcmVnaXN0ZXJzIGhlcmUgKi8KICNkZWZpbmUgREFWSU5DSV9VU0JfVkVSU0lPTl9SRUcJCTB4MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IGFmNzdlNDYuLjMzOGNkMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtNzY5LDcgKzc2OSw3IEBACiAJCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoKIAkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKG11c2JfdG9faGNkKG11c2IpKTsKIAkJCW11c2Jfcm9vdF9kaXNjb25uZWN0KG11c2IpOwotCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDApCisJCQlpZiAobXVzYi0+YV93YWl0X2Jjb24gIT0gMCAmJiBpc19vdGdfZW5hYmxlZChtdXNiKSkKIAkJCQltdXNiX3BsYXRmb3JtX3RyeV9pZGxlKG11c2IsIGppZmZpZXMKIAkJCQkJKyBtc2Vjc190b19qaWZmaWVzKG11c2ItPmFfd2FpdF9iY29uKSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCmluZGV4IDYzMDk0NmEuLmVmYjM5YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaApAQCAtMzMxLDcgKzMzMSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAljb250cm9sOwkvKiBvZiBtdXNiX3FoICovCiAJc3RydWN0IGxpc3RfaGVhZAlpbl9idWxrOwkvKiBvZiBtdXNiX3FoICovCiAJc3RydWN0IGxpc3RfaGVhZAlvdXRfYnVsazsJLyogb2YgbXVzYl9xaCAqLwotCXN0cnVjdCBtdXNiX3FoCQkqcGVyaW9kaWNbMzJdOwkvKiB0cmVlIG9mIGludGVycnVwdCtpc28gKi8KICNlbmRpZgogCiAJLyogY2FsbGVkIHdpdGggSVJRcyBibG9ja2VkOyBPTi9ub256ZXJvIGltcGxpZXMgc3RhcnRpbmcgYSBzZXNzaW9uLApAQCAtNDc5LDEwICs0NzgsMTEgQEAKIHN0YXRpYyBpbmxpbmUgaW50IG11c2JfcmVhZF9maWZvc2l6ZShzdHJ1Y3QgbXVzYiAqbXVzYiwKIAkJc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1OCBlcG51bSkKIHsKKwl2b2lkICptYmFzZSA9IG11c2ItPm1yZWdzOwogCXU4IHJlZyA9IDA7CiAKIAkvKiByZWFkIGZyb20gY29yZSB1c2luZyBpbmRleGVkIG1vZGVsICovCi0JcmVnID0gbXVzYl9yZWFkYihod19lcC0+cmVncywgMHgxMCArIE1VU0JfRklGT1NJWkUpOworCXJlZyA9IG11c2JfcmVhZGIobWJhc2UsIE1VU0JfRVBfT0ZGU0VUKGVwbnVtLCBNVVNCX0ZJRk9TSVpFKSk7CiAJLyogMCdzIHJldHVybmVkIHdoZW4gbm8gbW9yZSBlbmRwb2ludHMgKi8KIAlpZiAoIXJlZykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01MDksNiArNTA5LDcgQEAKIHsKIAltdXNiLT5lbmRwb2ludHNbMF0ubWF4X3BhY2tldF9zel90eCA9IE1VU0JfRVAwX0ZJRk9TSVpFOwogCW11c2ItPmVuZHBvaW50c1swXS5tYXhfcGFja2V0X3N6X3J4ID0gTVVTQl9FUDBfRklGT1NJWkU7CisJbXVzYi0+ZW5kcG9pbnRzWzBdLmlzX3NoYXJlZF9maWZvID0gdHJ1ZTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQkxBQ0tGSU4gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNmRiYmQwNy4uNDk5YzQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC02NCwxMSArNjQsOCBAQAogICoKICAqIC0gRE1BIChNZW50b3IvT01BUCkgLi4uaGFzIGF0IGxlYXN0IHRvZ2dsZSB1cGRhdGUgcHJvYmxlbXMKICAqCi0gKiAtIFN0aWxsIG5vIHRyYWZmaWMgc2NoZWR1bGluZyBjb2RlIHRvIG1ha2UgTkFLaW5nIGZvciBidWxrIG9yIGNvbnRyb2wKLSAqICAgdHJhbnNmZXJzIHVuYWJsZSB0byBzdGFydmUgb3RoZXIgcmVxdWVzdHM7IG9yIHRvIG1ha2UgZWZmaWNpZW50IHVzZQotICogICBvZiBoYXJkd2FyZSB3aXRoIHBlcmlvZGljIHRyYW5zZmVycy4gIChOb3RlIHRoYXQgbmV0d29yayBkcml2ZXJzCi0gKiAgIGNvbW1vbmx5IHBvc3QgYnVsayByZWFkcyB0aGF0IHN0YXkgcGVuZGluZyBmb3IgYSBsb25nIHRpbWU7IHRoZXNlCi0gKiAgIHdvdWxkIG1ha2UgdmVyeSB2aXNpYmxlIHRyb3VibGUuKQorICogLSBbMjMtZmViLTIwMDldIG1pbmltYWwgdHJhZmZpYyBzY2hlZHVsaW5nIHRvIGF2b2lkIGJ1bGsgUlggcGFja2V0CisgKiAgIHN0YXJ2YXRpb24gLi4uIG5vdGhpbmcgeWV0IGZvciBUWCwgaW50ZXJydXB0LCBvciBidWxrLgogICoKICAqIC0gTm90IHRlc3RlZCB3aXRoIEhOUCwgYnV0IHNvbWUgU1JQIHBhdGhzIHNlZW0gdG8gYmVoYXZlLgogICoKQEAgLTg4LDExICs4NSw4IEBACiAgKgogICogQ09OVFJPTCB0cmFuc2ZlcnMgYWxsIGdvIHRocm91Z2ggZXAwLiAgQlVMSyBvbmVzIGdvIHRocm91Z2ggZGVkaWNhdGVkIElOCiAgKiBhbmQgT1VUIGVuZHBvaW50cyAuLi4gaGFyZHdhcmUgaXMgZGVkaWNhdGVkIGZvciB0aG9zZSAiYXN5bmMiIHF1ZXVlKHMpLgotICoKICAqIChZZXMsIGJ1bGsgX2NvdWxkXyB1c2UgbW9yZSBvZiB0aGUgZW5kcG9pbnRzIHRoYW4gdGhhdCwgYW5kIHdvdWxkIGV2ZW4KLSAqIGJlbmVmaXQgZnJvbSBpdCAuLi4gb25lIHJlbW90ZSBkZXZpY2UgbWF5IGVhc2lseSBiZSBOQUtpbmcgd2hpbGUgb3RoZXJzCi0gKiBuZWVkIHRvIHBlcmZvcm0gdHJhbnNmZXJzIGluIHRoYXQgc2FtZSBkaXJlY3Rpb24uICBUaGUgc2FtZSB0aGluZyBjb3VsZAotICogYmUgZG9uZSBpbiBzb2Z0d2FyZSB0aG91Z2gsIGFzc3VtaW5nIGRtYSBjb29wZXJhdGVzLikKKyAqIGJlbmVmaXQgZnJvbSBpdC4pCiAgKgogICogSU5URVJVUFBUIGFuZCBJU09DSFJPTk9VUyB0cmFuc2ZlcnMgYXJlIHNjaGVkdWxlZCB0byB0aGUgb3RoZXIgZW5kcG9pbnRzLgogICogU28gZmFyIHRoYXQgc2NoZWR1bGluZyBpcyBib3RoIGR1bWIgYW5kIG9wdGltaXN0aWM6ICB0aGUgZW5kcG9pbnQgd2lsbCBiZQpAQCAtMjAxLDggKzE5NSw5IEBACiAJCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoOwogCQlicmVhazsKIAlkZWZhdWx0OgkJLyogYnVsaywgaW50ZXJydXB0ICovCi0JCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCS8qIGFjdHVhbF9sZW5ndGggbWF5IGJlIG5vbnplcm8gb24gcmV0cnkgcGF0aHMgKi8KKwkJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisJCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aDsKIAl9CiAKIAlEQkcoNCwgInFoICVwIHVyYiAlcCBkZXYlZCBlcCVkJXMlcywgaHdfZXAgJWQsICVwLyVkXG4iLApAQCAtMzk1LDcgKzM5MCw2IEBACiAJCQkgKiBkZS1hbGxvY2F0ZWQgaWYgaXQncyB0cmFja2VkIGFuZCBhbGxvY2F0ZWQ7CiAJCQkgKiBhbmQgd2hlcmUgd2UnZCB1cGRhdGUgdGhlIHNjaGVkdWxlIHRyZWUuLi4KIAkJCSAqLwotCQkJbXVzYi0+cGVyaW9kaWNbZXAtPmVwbnVtXSA9IE5VTEw7CiAJCQlrZnJlZShxaCk7CiAJCQlxaCA9IE5VTEw7CiAJCQlicmVhazsKQEAgLTEwNDUsNyArMTAzOSw4IEBACiAKIAkJLyogTk9URTogIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCiAJCSAqIGNvbnRyb2wgdHJhbnNmZXIsIGlmIGFub3RoZXIgb25lIGlzIHF1ZXVlZCwgc28gdGhhdAotCQkgKiBlcDAgaXMgbW9yZSBsaWtlbHkgdG8gc3RheSBidXN5LgorCQkgKiBlcDAgaXMgbW9yZSBsaWtlbHkgdG8gc3RheSBidXN5LiAgVGhhdCdzIGFscmVhZHkgZG9uZQorCQkgKiBmb3IgYnVsayBSWCB0cmFuc2ZlcnMuCiAJCSAqCiAJCSAqIGlmIChxaC0+cmluZy5uZXh0ICE9ICZtdXNiLT5jb250cm9sKSwgdGhlbgogCQkgKiB3ZSBoYXZlIGEgY2FuZGlkYXRlLi4uIE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvcgpAQCAtMTE5Nyw2ICsxMTkyLDcgQEAKIAkJLyogTk9URTogIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCiAJCSAqIHRyYW5zZmVyLCBpZiB0aGVyZSdzIHNvbWUgb3RoZXIgKG5vbnBlcmlvZGljKSB0eCB1cmIKIAkJICogdGhhdCBjb3VsZCB1c2UgdGhpcyBmaWZvLiAgKGRtYSBjb21wbGljYXRlcyBpdC4uLikKKwkJICogVGhhdCdzIGFscmVhZHkgZG9uZSBmb3IgYnVsayBSWCB0cmFuc2ZlcnMuCiAJCSAqCiAJCSAqIGlmIChidWxrICYmIHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPm91dF9idWxrKSwgdGhlbgogCQkgKiB3ZSBoYXZlIGEgY2FuZGlkYXRlLi4uIE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvcgpAQCAtMTM1OCw2ICsxMzU0LDUwIEBACiAKICNlbmRpZgogCisvKiBTY2hlZHVsZSBuZXh0IFFIIGZyb20gbXVzYi0+aW5fYnVsayBhbmQgbW92ZSB0aGUgY3VycmVudCBxaCB0bworICogdGhlIGVuZDsgYXZvaWRzIHN0YXJ2YXRpb24gZm9yIG90aGVyIGVuZHBvaW50cy4KKyAqLworc3RhdGljIHZvaWQgbXVzYl9idWxrX3J4X25ha190aW1lb3V0KHN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9od19lcCAqZXApCit7CisJc3RydWN0IGRtYV9jaGFubmVsCSpkbWE7CisJc3RydWN0IHVyYgkJKnVyYjsKKwl2b2lkIF9faW9tZW0JCSptYmFzZSA9IG11c2ItPm1yZWdzOworCXZvaWQgX19pb21lbQkJKmVwaW8gPSBlcC0+cmVnczsKKwlzdHJ1Y3QgbXVzYl9xaAkJKmN1cl9xaCwgKm5leHRfcWg7CisJdTE2CQkJcnhfY3NyOworCisJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwLT5lcG51bSk7CisJZG1hID0gaXNfZG1hX2NhcGFibGUoKSA/IGVwLT5yeF9jaGFubmVsIDogTlVMTDsKKworCS8qIGNsZWFyIG5hayB0aW1lb3V0IGJpdCAqLworCXJ4X2NzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENTUik7CisJcnhfY3NyIHw9IE1VU0JfUlhDU1JfSF9XWkNfQklUUzsKKwlyeF9jc3IgJj0gfk1VU0JfUlhDU1JfREFUQUVSUk9SOworCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsIHJ4X2Nzcik7CisKKwljdXJfcWggPSBmaXJzdF9xaCgmbXVzYi0+aW5fYnVsayk7CisJaWYgKGN1cl9xaCkgeworCQl1cmIgPSBuZXh0X3VyYihjdXJfcWgpOworCQlpZiAoZG1hX2NoYW5uZWxfc3RhdHVzKGRtYSkgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKKwkJCWRtYS0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0NPUkVfQUJPUlQ7CisJCQltdXNiLT5kbWFfY29udHJvbGxlci0+Y2hhbm5lbF9hYm9ydChkbWEpOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGRtYS0+YWN0dWFsX2xlbjsKKwkJCWRtYS0+YWN0dWFsX2xlbiA9IDBMOworCQl9CisJCW11c2Jfc2F2ZV90b2dnbGUoZXAsIDEsIHVyYik7CisKKwkJLyogbW92ZSBjdXJfcWggdG8gZW5kIG9mIHF1ZXVlICovCisJCWxpc3RfbW92ZV90YWlsKCZjdXJfcWgtPnJpbmcsICZtdXNiLT5pbl9idWxrKTsKKworCQkvKiBnZXQgdGhlIG5leHQgcWggZnJvbSBtdXNiLT5pbl9idWxrICovCisJCW5leHRfcWggPSBmaXJzdF9xaCgmbXVzYi0+aW5fYnVsayk7CisKKwkJLyogc2V0IHJ4X3JlaW5pdCBhbmQgc2NoZWR1bGUgdGhlIG5leHQgcWggKi8KKwkJZXAtPnJ4X3JlaW5pdCA9IDE7CisJCW11c2Jfc3RhcnRfdXJiKG11c2IsIDEsIG5leHRfcWgpOworCX0KK30KKwogLyoKICAqIFNlcnZpY2UgYW4gUlggaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gSU4gZW5kcG9pbnQ7IGRvY3MgY292ZXIgYnVsaywgaXNvLAogICogYW5kIGhpZ2gtYmFuZHdpZHRoIElOIHRyYW5zZmVyIGNhc2VzLgpAQCAtMTQyMSwxOCArMTQ2MSwyNiBAQAogCX0gZWxzZSBpZiAocnhfY3NyICYgTVVTQl9SWENTUl9EQVRBRVJST1IpIHsKIAogCQlpZiAoVVNCX0VORFBPSU5UX1hGRVJfSVNPQyAhPSBxaC0+dHlwZSkgewotCQkJLyogTk9URSB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQotCQkJICogdHJhbnNmZXIsIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciAobm9ucGVyaW9kaWMpIHJ4IHVyYgotCQkJICogdGhhdCBjb3VsZCB1c2UgdGhpcyBmaWZvLiAgKGRtYSBjb21wbGljYXRlcyBpdC4uLikKLQkJCSAqCi0JCQkgKiBpZiAoYnVsayAmJiBxaC0+cmluZy5uZXh0ICE9ICZtdXNiLT5pbl9idWxrKSwgdGhlbgotCQkJICogd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IKLQkJCSAqLwogCQkJREJHKDYsICJSWCBlbmQgJWQgTkFLIHRpbWVvdXRcbiIsIGVwbnVtKTsKKworCQkJLyogTk9URTogTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yLCBzbyB3ZSB3YW50IHRvCisJCQkgKiBjb250aW51ZS4gIEV4Y2VwdCAuLi4gaWYgdGhlcmUncyBhIHJlcXVlc3QgZm9yCisJCQkgKiBhbm90aGVyIFFILCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHN0YXJ2aW5nIGl0LgorCQkJICoKKwkJCSAqIERldmljZXMgbGlrZSBFdGhlcm5ldCBhbmQgc2VyaWFsIGFkYXB0ZXJzIGtlZXAKKwkJCSAqIHJlYWRzIHBvc3RlZCBhdCBhbGwgdGltZXMsIHdoaWNoIHdpbGwgc3RhcnZlCisJCQkgKiBvdGhlciBkZXZpY2VzIHdpdGhvdXQgdGhpcyBsb2dpYy4KKwkJCSAqLworCQkJaWYgKHVzYl9waXBlYnVsayh1cmItPnBpcGUpCisJCQkJCSYmIHFoLT5tdXggPT0gMQorCQkJCQkmJiAhbGlzdF9pc19zaW5ndWxhcigmbXVzYi0+aW5fYnVsaykpIHsKKwkJCQltdXNiX2J1bGtfcnhfbmFrX3RpbWVvdXQobXVzYiwgaHdfZXApOworCQkJCXJldHVybjsKKwkJCX0KIAkJCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcG51bSk7Ci0JCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLAotCQkJCQlNVVNCX1JYQ1NSX0hfV1pDX0JJVFMKLQkJCQkJfCBNVVNCX1JYQ1NSX0hfUkVRUEtUKTsKKwkJCXJ4X2NzciB8PSBNVVNCX1JYQ1NSX0hfV1pDX0JJVFM7CisJCQlyeF9jc3IgJj0gfk1VU0JfUlhDU1JfREFUQUVSUk9SOworCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgcnhfY3NyKTsKIAogCQkJZ290byBmaW5pc2g7CiAJCX0gZWxzZSB7CkBAIC0xNzExLDMxICsxNzU5LDI3IEBACiAKIAkvKiBlbHNlLCBwZXJpb2RpYyB0cmFuc2ZlcnMgZ2V0IG11eGVkIHRvIG90aGVyIGVuZHBvaW50cyAqLwogCi0JLyogRklYTUUgdGhpcyBkb2Vzbid0IGNvbnNpZGVyIGRpcmVjdGlvbiwgc28gaXQgY2FuIG9ubHkKLQkgKiB3b3JrIGZvciBvbmUgaGFsZiBvZiB0aGUgZW5kcG9pbnQgaGFyZHdhcmUsIGFuZCBhc3N1bWVzCi0JICogdGhlIHByZXZpb3VzIGNhc2VzIGhhbmRsZWQgYWxsIG5vbi1zaGFyZWQgZW5kcG9pbnRzLi4uCi0JICovCi0KLQkvKiB3ZSBrbm93IHRoaXMgcWggaGFzbid0IGJlZW4gc2NoZWR1bGVkLCBzbyBhbGwgd2UgbmVlZCB0byBkbworCS8qCisJICogV2Uga25vdyB0aGlzIHFoIGhhc24ndCBiZWVuIHNjaGVkdWxlZCwgc28gYWxsIHdlIG5lZWQgdG8gZG8KIAkgKiBpcyBjaG9vc2Ugd2hpY2ggaGFyZHdhcmUgZW5kcG9pbnQgdG8gcHV0IGl0IG9uIC4uLgogCSAqCiAJICogUkVWSVNJVCB3aGF0IHdlIHJlYWxseSB3YW50IGhlcmUgaXMgYSByZWd1bGFyIHNjaGVkdWxlIHRyZWUKLQkgKiBsaWtlIGUuZy4gT0hDSSB1c2VzLCBidXQgZm9yIG5vdyBtdXNiLT5wZXJpb2RpYyBpcyBqdXN0IGFuCi0JICogYXJyYXkgb2YgdGhlIF9zaW5nbGVfIGxvZ2ljYWwgZW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIGEKLQkgKiBnaXZlbiBwaHlzaWNhbCBvbmUgKGlkZW50aXR5IG1hcHBpbmcgbG9naWNhbC0+cGh5c2ljYWwpLgotCSAqCi0JICogdGhhdCBzaW1wbGlzdGljIGFwcHJvYWNoIG1ha2VzIFRUIHNjaGVkdWxpbmcgYSBsb3Qgc2ltcGxlcjsKLQkgKiB0aGVyZSBpcyBub25lLCBhbmQgdGh1cyBub25lIG9mIGl0cyBjb21wbGV4aXR5Li4uCisJICogbGlrZSBlLmcuIE9IQ0kgdXNlcy4KIAkgKi8KIAliZXN0X2RpZmYgPSA0MDk2OwogCWJlc3RfZW5kID0gLTE7CiAKLQlmb3IgKGVwbnVtID0gMTsgZXBudW0gPCBtdXNiLT5ucl9lbmRwb2ludHM7IGVwbnVtKyspIHsKKwlmb3IgKGVwbnVtID0gMSwgaHdfZXAgPSBtdXNiLT5lbmRwb2ludHMgKyAxOworCQkJZXBudW0gPCBtdXNiLT5ucl9lbmRwb2ludHM7CisJCQllcG51bSsrLCBod19lcCsrKSB7CiAJCWludAlkaWZmOwogCi0JCWlmIChtdXNiLT5wZXJpb2RpY1tlcG51bV0pCisJCWlmIChpc19pbiB8fCBod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKKwkJCWlmIChod19lcC0+aW5fcWggICE9IE5VTEwpCisJCQkJY29udGludWU7CisJCX0gZWxzZQlpZiAoaHdfZXAtPm91dF9xaCAhPSBOVUxMKQogCQkJY29udGludWU7Ci0JCWh3X2VwID0gJm11c2ItPmVuZHBvaW50c1tlcG51bV07CisKIAkJaWYgKGh3X2VwID09IG11c2ItPmJ1bGtfZXApCiAJCQljb250aW51ZTsKIApAQCAtMTc1Niw2ICsxODAwLDE3IEBACiAJCQloZWFkID0gJm11c2ItPmluX2J1bGs7CiAJCWVsc2UKIAkJCWhlYWQgPSAmbXVzYi0+b3V0X2J1bGs7CisKKwkJLyogRW5hYmxlIGJ1bGsgUlggTkFLIHRpbWVvdXQgc2NoZW1lIHdoZW4gYnVsayByZXF1ZXN0cyBhcmUKKwkJICogbXVsdGlwbGV4ZWQuICBUaGlzIHNjaGVtZSBkb2VuJ3Qgd29yayBpbiBoaWdoIHNwZWVkIHRvIGZ1bGwKKwkJICogc3BlZWQgc2NlbmFyaW8gYXMgTkFLIGludGVycnVwdHMgYXJlIG5vdCBjb21pbmcgZnJvbSBhCisJCSAqIGZ1bGwgc3BlZWQgZGV2aWNlIGNvbm5lY3RlZCB0byBhIGhpZ2ggc3BlZWQgZGV2aWNlLgorCQkgKiBOQUsgdGltZW91dCBpbnRlcnZhbCBpcyA4ICgxMjggdWZyYW1lIG9yIDE2bXMpIGZvciBIUyBhbmQKKwkJICogNCAoOCBmcmFtZSBvciA4bXMpIGZvciBGUyBkZXZpY2UuCisJCSAqLworCQlpZiAoaXNfaW4gJiYgcWgtPmRldikKKwkJCXFoLT5pbnR2X3JlZyA9CisJCQkJKFVTQl9TUEVFRF9ISUdIID09IHFoLT5kZXYtPnNwZWVkKSA/IDggOiA0OwogCQlnb3RvIHN1Y2Nlc3M7CiAJfSBlbHNlIGlmIChiZXN0X2VuZCA8IDApIHsKIAkJcmV0dXJuIC1FTk9TUEM7CkBAIC0xNzY0LDcgKzE4MTksNiBAQAogCWlkbGUgPSAxOwogCXFoLT5tdXggPSAwOwogCWh3X2VwID0gbXVzYi0+ZW5kcG9pbnRzICsgYmVzdF9lbmQ7Ci0JbXVzYi0+cGVyaW9kaWNbYmVzdF9lbmRdID0gcWg7CiAJREJHKDQsICJxaCAlcCBwZXJpb2RpYyBzbG90ICVkXG4iLCBxaCwgYmVzdF9lbmQpOwogc3VjY2VzczoKIAlpZiAoaGVhZCkgewpAQCAtMTg4OCwxMyArMTk0MiwxMSBAQAogCQkgKgogCQkgKiBUaGUgZG93bnNpZGUgb2YgZGlzYWJsaW5nIHRoaXMgaXMgdGhhdCB0cmFuc2ZlciBzY2hlZHVsaW5nCiAJCSAqIGdldHMgVkVSWSB1bmZhaXIgZm9yIG5vbnBlcmlvZGljIHRyYW5zZmVyczsgYSBtaXNiZWhhdmluZwotCQkgKiBwZXJpcGhlcmFsIGNvdWxkIG1ha2UgdGhhdCBodXJ0LiAgT3IgZm9yIHJlYWRzLCBvbmUgdGhhdCdzCi0JCSAqIHBlcmZlY3RseSBub3JtYWw6ICBuZXR3b3JrIGFuZCBvdGhlciBkcml2ZXJzIGtlZXAgcmVhZHMKLQkJICogcG9zdGVkIGF0IGFsbCB0aW1lcywgaGF2aW5nIG9uZSBwZW5kaW5nIGZvciBhIHdlZWsgc2hvdWxkCi0JCSAqIGJlIHBlcmZlY3RseSBzYWZlLgorCQkgKiBwZXJpcGhlcmFsIGNvdWxkIG1ha2UgdGhhdCBodXJ0LiAgVGhhdCdzIHBlcmZlY3RseSBub3JtYWwKKwkJICogZm9yIHJlYWRzIGZyb20gbmV0d29yayBvciBzZXJpYWwgYWRhcHRlcnMgLi4uIHNvIHdlIGhhdmUKKwkJICogcGFydGlhbCBOQUtsaW1pdCBzdXBwb3J0IGZvciBidWxrIFJYLgogCQkgKgotCQkgKiBUaGUgdXBzaWRlIG9mIGRpc2FibGluZyBpdCBpcyBhdm9pZG5nIHRyYW5zZmVyIHNjaGVkdWxpbmcKLQkJICogY29kZSB0byBwdXQgdGhpcyBhc2lkZSBmb3Igd2hpbGUuCisJCSAqIFRoZSB1cHNpZGUgb2YgZGlzYWJsaW5nIGl0IGlzIHNpbXBsZXIgdHJhbnNmZXIgc2NoZWR1bGluZy4KIAkJICovCiAJCWludGVydmFsID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYwppbmRleCBlMGU5Y2U1Li5iZjY3N2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCQlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CiAJCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CiAJCWRlc2MtPmJOYnJQb3J0cyA9IDE7Ci0JCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gY3B1X3RvX2xlMTYoCiAJCQkJICAweDAwMDEJLyogcGVyLXBvcnQgcG93ZXIgc3dpdGNoaW5nICovCiAJCQkJfCAweDAwMTAJLyogbm8gb3ZlcmN1cnJlbnQgcmVwb3J0aW5nICovCiAJCQkJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKaW5kZXggZWU1NWI0NC4uYWE4ODRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKQEAgLTQzLDcgKzQzLDcgQEAKIAogY29uZmlnIFRXTDQwMzBfVVNCCiAJdHJpc3RhdGUgIlRXTDQwMzAgVVNCIFRyYW5zY2VpdmVyIERyaXZlciIKLQlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRQorCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFICYmIFJFR1VMQVRPUl9UV0w0MDMwCiAJc2VsZWN0IFVTQl9PVEdfVVRJTFMKIAloZWxwCiAJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRoZSBVU0IgT1RHIHRyYW5zY2VpdmVyIG9uIFRXTDQwMzAKQEAgLTUxLDQgKzUxLDEyIEBACiAJICBUaGlzIHRyYW5zY2VpdmVyIHN1cHBvcnRzIGhpZ2ggYW5kIGZ1bGwgc3BlZWQgZGV2aWNlcyBwbHVzLAogCSAgaW4gaG9zdCBtb2RlLCBsb3cgc3BlZWQuCiAKK2NvbmZpZyBOT1BfVVNCX1hDRUlWCisJdHJpc3RhdGUgIk5PUCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCisJaGVscAorCSB0aGlzIGRyaXZlciBpcyB0byBiZSB1c2VkIGJ5IGFsbCB0aGUgdXNiIHRyYW5zY2VpdmVyIHdoaWNoIGFyZSBlaXRoZXIKKwkgYnVpbHQtaW4gd2l0aCB1c2IgaXAgb3Igd2hpY2ggYXJlIGF1dG9ub21vdXMgYW5kIGRvZXNuJ3QgcmVxdWlyZSBhbnkKKwkgcGh5IHByb2dyYW1taW5nIHN1Y2ggYXMgSVNQMXgwNCBldGMuCisKIGVuZGlmICMgVVNCIHx8IE9URwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCmluZGV4IGQ3M2M3Y2YuLjIwODE2NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBvYmotJChDT05GSUdfVVNCX0dQSU9fVkJVUykJKz0gZ3Bpb192YnVzLm8KIG9iai0kKENPTkZJR19JU1AxMzAxX09NQVApCSs9IGlzcDEzMDFfb21hcC5vCiBvYmotJChDT05GSUdfVFdMNDAzMF9VU0IpCSs9IHR3bDQwMzAtdXNiLm8KK29iai0kKENPTkZJR19OT1BfVVNCX1hDRUlWKQkrPSBub3AtdXNiLXhjZWl2Lm8KIAogY2NmbGFncy0kKENPTkZJR19VU0JfREVCVUcpCSs9IC1EREVCVUcKIGNjZmxhZ3MtJChDT05GSUdfVVNCX0dBREdFVF9ERUJVRykgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jIGIvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCmluZGV4IDYzYTYwMzYuLjFjMjZjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIApAQCAtMzQsNiArMzUsNyBAQAogCXN0cnVjdCByZWd1bGF0b3IgICAgICAgKnZidXNfZHJhdzsKIAlpbnQJCQl2YnVzX2RyYXdfZW5hYmxlZDsKIAl1bnNpZ25lZAkJbUE7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiB9OwogCiAKQEAgLTc2LDI0ICs3OCwyNiBAQAogCWdwaW9fdmJ1cy0+bUEgPSBtQTsKIH0KIAotLyogVkJVUyBjaGFuZ2UgSVJRIGhhbmRsZXIgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBncGlvX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlzX3ZidXNfcG93ZXJlZChzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRhdGE7Ci0Jc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGdwaW9fdmJ1c19kYXRhICpncGlvX3ZidXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgZ3BpbywgdmJ1czsKKwlpbnQgdmJ1czsKIAogCXZidXMgPSBncGlvX2dldF92YWx1ZShwZGF0YS0+Z3Bpb192YnVzKTsKIAlpZiAocGRhdGEtPmdwaW9fdmJ1c19pbnZlcnRlZCkKIAkJdmJ1cyA9ICF2YnVzOwogCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAiVkJVUyAlcyAoZ2FkZ2V0OiAlcylcbiIsCi0JCXZidXMgPyAic3VwcGxpZWQiIDogImluYWN0aXZlIiwKLQkJZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0ID8gZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0LT5uYW1lIDogIm5vbmUiKTsKKwlyZXR1cm4gdmJ1czsKK30KKworc3RhdGljIHZvaWQgZ3Bpb192YnVzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBncGlvX3ZidXNfZGF0YSAqZ3Bpb192YnVzID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBncGlvX3ZidXNfZGF0YSwgd29yayk7CisJc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gKnBkYXRhID0gZ3Bpb192YnVzLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IGdwaW87CiAKIAlpZiAoIWdwaW9fdmJ1cy0+b3RnLmdhZGdldCkKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQlyZXR1cm47CiAKIAkvKiBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIHdoaWNoIG1hbmFnZSB0aGUgcHVsbHVwIHRoZW1zZWx2ZXMgd29uJ3QgaGF2ZQogCSAqIGdwaW9fcHVsbHVwIGNvbmZpZ3VyZWQgaGVyZS4gIElmIGl0J3MgY29uZmlndXJlZCBoZXJlLCB3ZSdsbCBkbyB3aGF0CkBAIC0xMDEsNyArMTA1LDcgQEAKIAkgKiB0aGF0IG1heSBjb21wbGljYXRlIHVzYl9nYWRnZXRfeyxkaXN9Y29ubmVjdCgpIHN1cHBvcnQuCiAJICovCiAJZ3BpbyA9IHBkYXRhLT5ncGlvX3B1bGx1cDsKLQlpZiAodmJ1cykgeworCWlmIChpc192YnVzX3Bvd2VyZWQocGRhdGEpKSB7CiAJCWdwaW9fdmJ1cy0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDsKIAkJdXNiX2dhZGdldF92YnVzX2Nvbm5lY3QoZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KTsKIApAQCAtMTIxLDYgKzEyNSwyMSBAQAogCQl1c2JfZ2FkZ2V0X3ZidXNfZGlzY29ubmVjdChncGlvX3ZidXMtPm90Zy5nYWRnZXQpOwogCQlncGlvX3ZidXMtPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9CX0lETEU7CiAJfQorfQorCisvKiBWQlVTIGNoYW5nZSBJUlEgaGFuZGxlciAqLworc3RhdGljIGlycXJldHVybl90IGdwaW9fdmJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEgKmdwaW9fdmJ1cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiVkJVUyAlcyAoZ2FkZ2V0OiAlcylcbiIsCisJCWlzX3ZidXNfcG93ZXJlZChwZGF0YSkgPyAic3VwcGxpZWQiIDogImluYWN0aXZlIiwKKwkJZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0ID8gZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0LT5uYW1lIDogIm5vbmUiKTsKKworCWlmIChncGlvX3ZidXMtPm90Zy5nYWRnZXQpCisJCXNjaGVkdWxlX3dvcmsoJmdwaW9fdmJ1cy0+d29yayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yNTcsNiArMjc2LDcgQEAKIAkJCWlycSwgZXJyKTsKIAkJZ290byBlcnJfaXJxOwogCX0KKwlJTklUX1dPUksoJmdwaW9fdmJ1cy0+d29yaywgZ3Bpb192YnVzX3dvcmspOwogCiAJLyogb25seSBhY3RpdmUgd2hlbiBhIGdhZGdldCBpcyByZWdpc3RlcmVkICovCiAJZXJyID0gb3RnX3NldF90cmFuc2NlaXZlcigmZ3Bpb192YnVzLT5vdGcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5MzNmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCisgKgorICogTk9QIFVTQiB0cmFuc2NlaXZlciBmb3IgYWxsIFVTQiB0cmFuc2NlaXZlciB3aGljaCBhcmUgZWl0aGVyIGJ1aWx0LWluCisgKiBpbnRvIFVTQiBJUCBvciB3aGljaCBhcmUgbW9zdGx5IGF1dG9ub21vdXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBBamF5IEt1bWFyIEd1cHRhIDxhamF5Lmd1cHRhQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBDdXJyZW50IHN0YXR1czoKKyAqIAl0aGlzIGlzIHRvIGFkZCAibm9wIiB0cmFuc2NlaXZlciBmb3IgYWxsIHRob3NlIHBoeSB3aGljaCBpcworICogCWF1dG9ub21vdXMgc3VjaCBhcyBpc3AxNTA0IGV0Yy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisKK3N0cnVjdCBub3BfdXNiX3hjZWl2IHsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCW90ZzsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworfTsKKworc3RhdGljIHU2NCBub3BfeGNlaXZfZG1hbWFzayA9IERNQV8zMkJJVF9NQVNLOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3BfeGNlaXZfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJub3BfdXNiX3hjZWl2IiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZub3BfeGNlaXZfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfMzJCSVRfTUFTSywKKwkJLnBsYXRmb3JtX2RhdGEgICAgICAgICAgPSBOVUxMLAorCX0sCit9OworCit2b2lkIHVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIodm9pZCkKK3sKKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZub3BfeGNlaXZfZGV2aWNlKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgdXNiIG5vcCB0cmFuc2NlaXZlclxuIik7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJm5vcF94Y2Vpdl9kZXZpY2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBub3BfdXNiX3hjZWl2ICp4Y2Vpdl90b19ub3Aoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHgsIHN0cnVjdCBub3BfdXNiX3hjZWl2LCBvdGcpOworfQorCitzdGF0aWMgaW50IG5vcF9zZXRfc3VzcGVuZChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCBpbnQgc3VzcGVuZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3Bfc2V0X3BlcmlwaGVyYWwoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwKKwkJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiAqbm9wOworCisJaWYgKCF4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5vcCA9IHhjZWl2X3RvX25vcCh4KTsKKworCWlmICghZ2FkZ2V0KSB7CisJCW5vcC0+b3RnLmdhZGdldCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW5vcC0+b3RnLmdhZGdldCA9IGdhZGdldDsKKwlub3AtPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9CX0lETEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm9wX3NldF9ob3N0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsIHN0cnVjdCB1c2JfYnVzICpob3N0KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3A7CisKKwlpZiAoIXgpCisJCXJldHVybiAtRU5PREVWOworCisJbm9wID0geGNlaXZfdG9fbm9wKHgpOworCisJaWYgKCFob3N0KSB7CisJCW5vcC0+b3RnLmhvc3QgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlub3AtPm90Zy5ob3N0ID0gaG9zdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbm9wX3VzYl94Y2Vpdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2CSpub3A7CisJaW50IGVycjsKKworCW5vcCA9IGt6YWxsb2Moc2l6ZW9mICpub3AsIEdGUF9LRVJORUwpOworCWlmICghbm9wKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5vcC0+ZGV2CQk9ICZwZGV2LT5kZXY7CisJbm9wLT5vdGcuZGV2CQk9IG5vcC0+ZGV2OworCW5vcC0+b3RnLmxhYmVsCQk9ICJub3AteGNlaXYiOworCW5vcC0+b3RnLnN0YXRlCQk9IE9UR19TVEFURV9VTkRFRklORUQ7CisJbm9wLT5vdGcuc2V0X2hvc3QJPSBub3Bfc2V0X2hvc3Q7CisJbm9wLT5vdGcuc2V0X3BlcmlwaGVyYWwJPSBub3Bfc2V0X3BlcmlwaGVyYWw7CisJbm9wLT5vdGcuc2V0X3N1c3BlbmQJPSBub3Bfc2V0X3N1c3BlbmQ7CisKKwllcnIgPSBvdGdfc2V0X3RyYW5zY2VpdmVyKCZub3AtPm90Zyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciB0cmFuc2NlaXZlciwgZXJyOiAlZFxuIiwKKwkJCWVycik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBub3ApOworCisJcmV0dXJuIDA7CitleGl0OgorCWtmcmVlKG5vcCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbm9wX3VzYl94Y2Vpdl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiAqbm9wID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlvdGdfc2V0X3RyYW5zY2VpdmVyKE5VTEwpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUobm9wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBub3BfdXNiX3hjZWl2X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbm9wX3VzYl94Y2Vpdl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG5vcF91c2JfeGNlaXZfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibm9wX3VzYl94Y2VpdiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBub3BfdXNiX3hjZWl2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZub3BfdXNiX3hjZWl2X2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwobm9wX3VzYl94Y2Vpdl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG5vcF91c2JfeGNlaXZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZub3BfdXNiX3hjZWl2X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChub3BfdXNiX3hjZWl2X2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm5vcF91c2JfeGNlaXYiKTsKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIEluYyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOT1AgVVNCIFRyYW5zY2VpdmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYwppbmRleCA0MTZlNDQxLi5kOTQ3OGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYwpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKIAogLyogUmVnaXN0ZXIgZGVmaW5lcyAqLwpAQCAtMjQ2LDYgKzI0OCwxMSBAQAogCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJb3RnOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAKKwkvKiBUV0w0MDMwIGludGVybmFsIFVTQiByZWd1bGF0b3Igc3VwcGxpZXMgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yCSp1c2IxdjU7CisJc3RydWN0IHJlZ3VsYXRvcgkqdXNiMXY4OworCXN0cnVjdCByZWd1bGF0b3IJKnVzYjN2MTsKKwogCS8qIGZvciB2YnVzIHJlcG9ydGluZyB3aXRoIGlycXMgZGlzYWJsZWQgKi8KIAlzcGlubG9ja190CQlsb2NrOwogCkBAIC00MzQsNiArNDQxLDE4IEBACiAKIAlwd3IgPSB0d2w0MDMwX3VzYl9yZWFkKHR3bCwgUEhZX1BXUl9DVFJMKTsKIAlpZiAob24pIHsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjN2MSk7CisJCXJlZ3VsYXRvcl9lbmFibGUodHdsLT51c2IxdjgpOworCQkvKgorCQkgKiBEaXNhYmxpbmcgdXNiM3YxIHJlZ3VsYXRvciAoPSB3cml0aW5nIDAgdG8gVlVTQjNWMV9ERVZfR1JQCisJCSAqIGluIHR3bDQwMzApIHJlc2V0cyB0aGUgVlVTQl9ERURJQ0FURUQyIHJlZ2lzdGVyLiBUaGlzIHJlc2V0CisJCSAqIGVuYWJsZXMgVlVTQjNWMV9TTEVFUCBiaXQgdGhhdCByZW1hcHMgdXNiM3YxIEFDVElWRSBzdGF0ZSB0bworCQkgKiBTTEVFUC4gV2Ugd29yayBhcm91bmQgdGhpcyBieSBjbGVhcmluZyB0aGUgYml0IGFmdGVyIHVzdjN2MQorCQkgKiBpcyByZS1hY3RpdmF0ZWQuIFRoaXMgZW5zdXJlcyB0aGF0IFZVU0IzVjEgaXMgcmVhbGx5IGFjdGl2ZS4KKwkJICovCisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLAorCQkJCQkJCVZVU0JfREVESUNBVEVEMik7CisJCXJlZ3VsYXRvcl9lbmFibGUodHdsLT51c2IxdjUpOwogCQlwd3IgJj0gflBIWV9QV1JfUEhZUFdEOwogCQlXQVJOX09OKHR3bDQwMzBfdXNiX3dyaXRlX3ZlcmlmeSh0d2wsIFBIWV9QV1JfQ1RSTCwgcHdyKSA8IDApOwogCQl0d2w0MDMwX3VzYl93cml0ZSh0d2wsIFBIWV9DTEtfQ1RSTCwKQEAgLTQ0Myw2ICs0NjIsOSBAQAogCX0gZWxzZSAgewogCQlwd3IgfD0gUEhZX1BXUl9QSFlQV0Q7CiAJCVdBUk5fT04odHdsNDAzMF91c2Jfd3JpdGVfdmVyaWZ5KHR3bCwgUEhZX1BXUl9DVFJMLCBwd3IpIDwgMCk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiMXY1KTsKKwkJcmVndWxhdG9yX2Rpc2FibGUodHdsLT51c2IxdjgpOworCQlyZWd1bGF0b3JfZGlzYWJsZSh0d2wtPnVzYjN2MSk7CiAJfQogfQogCkBAIC00NjgsNyArNDkwLDcgQEAKIAl0d2wtPmFzbGVlcCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHR3bDQwMzBfdXNiX2xkb19pbml0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQorc3RhdGljIGludCB0d2w0MDMwX3VzYl9sZG9faW5pdChzdHJ1Y3QgdHdsNDAzMF91c2IgKnR3bCkKIHsKIAkvKiBFbmFibGUgd3JpdGluZyB0byBwb3dlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMHhDMCwgUFJPVEVDVF9LRVkpOwpAQCAtNDgwLDIwICs1MDIsNDUgQEAKIAkvKiBpbnB1dCB0byBWVVNCM1YxIExETyBpcyBmcm9tIFZCQVQsIG5vdCBWQlVTICovCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4MTQsIFZVU0JfREVESUNBVEVEMSk7CiAKLQkvKiB0dXJuIG9uIDMuMVYgcmVndWxhdG9yICovCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4MjAsIFZVU0IzVjFfREVWX0dSUCk7CisJLyogSW5pdGlhbGl6ZSAzLjFWIHJlZ3VsYXRvciAqLworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCM1YxX0RFVl9HUlApOworCisJdHdsLT51c2IzdjEgPSByZWd1bGF0b3JfZ2V0KHR3bC0+ZGV2LCAidXNiM3YxIik7CisJaWYgKElTX0VSUih0d2wtPnVzYjN2MSkpCisJCXJldHVybiAtRU5PREVWOworCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IzVjFfVFlQRSk7CiAKLQkvKiB0dXJuIG9uIDEuNVYgcmVndWxhdG9yICovCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4MjAsIFZVU0IxVjVfREVWX0dSUCk7CisJLyogSW5pdGlhbGl6ZSAxLjVWIHJlZ3VsYXRvciAqLworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY1X0RFVl9HUlApOworCisJdHdsLT51c2IxdjUgPSByZWd1bGF0b3JfZ2V0KHR3bC0+ZGV2LCAidXNiMXY1Iik7CisJaWYgKElTX0VSUih0d2wtPnVzYjF2NSkpCisJCWdvdG8gZmFpbDE7CisKIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWNV9UWVBFKTsKIAotCS8qIHR1cm4gb24gMS44ViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjFWOF9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDEuOFYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjhfREVWX0dSUCk7CisKKwl0d2wtPnVzYjF2OCA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IxdjgiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiMXY4KSkKKwkJZ290byBmYWlsMjsKKwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY4X1RZUEUpOwogCiAJLyogZGlzYWJsZSBhY2Nlc3MgdG8gcG93ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIDAsIFBST1RFQ1RfS0VZKTsKKworCXJldHVybiAwOworCitmYWlsMjoKKwlyZWd1bGF0b3JfcHV0KHR3bC0+dXNiMXY1KTsKKwl0d2wtPnVzYjF2NSA9IE5VTEw7CitmYWlsMToKKwlyZWd1bGF0b3JfcHV0KHR3bC0+dXNiM3YxKTsKKwl0d2wtPnVzYjN2MSA9IE5VTEw7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHR3bDQwMzBfdXNiX3ZidXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC01OTgsNyArNjQ1LDcgQEAKIHsKIAlzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdHdsNDAzMF91c2IJKnR3bDsKLQlpbnQJCQlzdGF0dXM7CisJaW50CQkJc3RhdHVzLCBlcnI7CiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgInBsYXRmb3JtX2RhdGEgbm90IGF2YWlsYWJsZVxuIik7CkBAIC02MjIsNyArNjY5LDEyIEBACiAJLyogaW5pdCBzcGlubG9jayBmb3Igd29ya3F1ZXVlICovCiAJc3Bpbl9sb2NrX2luaXQoJnR3bC0+bG9jayk7CiAKLQl0d2w0MDMwX3VzYl9sZG9faW5pdCh0d2wpOworCWVyciA9IHR3bDQwMzBfdXNiX2xkb19pbml0KHR3bCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJsZG8gaW5pdCBmYWlsZWRcbiIpOworCQlrZnJlZSh0d2wpOworCQlyZXR1cm4gZXJyOworCX0KIAlvdGdfc2V0X3RyYW5zY2VpdmVyKCZ0d2wtPm90Zyk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0d2wpOwpAQCAtNjg4LDYgKzc0MCw5IEBACiAJdHdsNDAzMF91c2JfY2xlYXJfYml0cyh0d2wsIFBPV0VSX0NUUkwsIFBPV0VSX0NUUkxfT1RHX0VOQUIpOwogCiAJdHdsNDAzMF9waHlfcG93ZXIodHdsLCAwKTsKKwlyZWd1bGF0b3JfcHV0KHR3bC0+dXNiMXY1KTsKKwlyZWd1bGF0b3JfcHV0KHR3bC0+dXNiMXY4KTsKKwlyZWd1bGF0b3JfcHV0KHR3bC0+dXNiM3YxKTsKIAogCWtmcmVlKHR3bCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggYjM2MWYwNS4uYTY1ZjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTExNiwxNCArMTE2LDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkaWdpX2FjY2VsZXBvcnQuCiAKLWNvbmZpZyBVU0JfU0VSSUFMX0NQMjEwMQotCXRyaXN0YXRlICJVU0IgQ1AyMTAxIFVBUlQgQnJpZGdlIENvbnRyb2xsZXIiCitjb25maWcgVVNCX1NFUklBTF9DUDIxMFgKKwl0cmlzdGF0ZSAiVVNCIENQMjEweCBmYW1pbHkgb2YgVUFSVCBCcmlkZ2UgQ29udHJvbGxlcnMiCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBDUDIxMDEvQ1AyMTAyIGJhc2VkIFVTQiB0byBSUzIzMgotCSAgY29udmVydGVyLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBDUDIxMDEvQ1AyMTAyL0NQMjEwMyBiYXNlZCBVU0IKKwkgIHRvIFJTMjMyIGNvbnZlcnRlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNwMjEwMS4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjcDIxMHguCiAKIGNvbmZpZyBVU0JfU0VSSUFMX0NZUFJFU1NfTTgKIAl0cmlzdGF0ZSAiVVNCIEN5cHJlc3MgTTggVVNCIFNlcmlhbCBEcml2ZXIiCkBAIC00NzIsNiArNDcyLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdGk2ODU4LgogCitjb25maWcgVVNCX1NFUklBTF9RVUFMQ09NTQorCXRyaXN0YXRlICJVU0IgUXVhbGNvbW0gU2VyaWFsIG1vZGVtIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBRdWFsY29tbSBVU0IgbW9kZW0gZGV2aWNlLiAgVGhlc2UgYXJlCisJICB1c3VhbGx5IHdpcmVsZXNzIGNlbGx1bGFyIG1vZGVtcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWNzZXJpYWwuCisKIGNvbmZpZyBVU0JfU0VSSUFMX1NQQ1A4WDUKIAl0cmlzdGF0ZSAiVVNCIFNQQ1A4eDUgVVNCIFRvIFNlcmlhbCBEcml2ZXIiCiAJaGVscApAQCAtNTE1LDYgKzUyNCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2llcnJhLgogCitjb25maWcgVVNCX1NFUklBTF9TWU1CT0wKKwl0cmlzdGF0ZSAiVVNCIFN5bWJvbCBCYXJjb2RlIGRyaXZlciAoc2VyaWFsIG1vZGUpIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgU3ltYm9sIFVTQiBCYXJjb2RlIGRldmljZQorCSAgaW4gc2VyaWFsIGVtdWxhdGlvbiBtb2RlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeW1ib2xzZXJpYWwuCisKIGNvbmZpZyBVU0JfU0VSSUFMX1RJCiAJdHJpc3RhdGUgIlVTQiBUSSAzNDEwLzUwNTIgU2VyaWFsIERyaXZlciIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKaW5kZXggYjc1YmU5MS4uNjY2MTliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNikJCSs9IGFyazMxMTYubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOKQkJCSs9IGJlbGtpbl9zYS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DSDM0MSkJCQkrPSBjaDM0MS5vCi1vYmotJChDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEpCQkJKz0gY3AyMTAxLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwWCkJCQkrPSBjcDIxMHgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLKQkJKz0gY3liZXJqYWNrLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTgpCQkrPSBjeXByZXNzX204Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0RFQlVHKQkJCSs9IHVzYl9kZWJ1Zy5vCkBAIC00NSwxMCArNDUsMTIgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX09QVElPTikJCQkrPSBvcHRpb24ubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCkJCSs9IG90aTY4NTgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKQkJCSs9IHBsMjMwMy5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSkJCSs9IHFjc2VyaWFsLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NBRkUpCQkJKz0gc2FmZV9zZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkpCQkrPSBzaWVtZW5zX21waS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUykJCSs9IHNpZXJyYS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1KQkJKz0gc3BjcDh4NS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9TWU1CT0wpCQkJKz0gc3ltYm9sc2VyaWFsLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1RJKQkJCSs9IHRpX3VzYl8zNDEwXzUwNTIubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVklTT1IpCQkJKz0gdmlzb3Iubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUKQkJKz0gd2hpdGVoZWF0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKaW5kZXggZjYxZTNjYS4uYWI0Y2MyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDcsIEZyYW5rIEEgS2luZ3N3b29kIDxmcmFua0BraW5nc3dvb2QtY29uc3VsdGluZy5jby51az4KKyAqIENvcHlyaWdodCAyMDA3LCBXZXJuZXIgQ29ybmVsaXVzIDx3ZXJuZXJAY29ybmVsaXVzLWNvbnN1bHQuZGU+CisgKiBDb3B5cmlnaHQgMjAwOSwgQm9yaXMgSGFqZHVrIDxib3Jpc0BoYWpkdWsub3JnPgogICoKICAqIGNoMzQxLmMgaW1wbGVtZW50cyBhIHNlcmlhbCBwb3J0IGRyaXZlciBmb3IgdGhlIFdpbmNoaXBoZWFkIENIMzQxLgogICoKQEAgLTIxLDkgKzIzLDM5IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogCi0jZGVmaW5lIERFRkFVTFRfQkFVRF9SQVRFIDI0MDAKKyNkZWZpbmUgREVGQVVMVF9CQVVEX1JBVEUgOTYwMAogI2RlZmluZSBERUZBVUxUX1RJTUVPVVQgICAxMDAwCiAKKy8qIGZsYWdzIGZvciBJTy1CaXRzICovCisjZGVmaW5lIENIMzQxX0JJVF9SVFMgKDEgPDwgNikKKyNkZWZpbmUgQ0gzNDFfQklUX0RUUiAoMSA8PCA1KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogaW50ZXJydXB0IHBpcGUgZGVmaW5pdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBhbHdheXMgNCBpbnRlcnJ1cHQgYnl0ZXMgKi8KKy8qIGZpcnN0IGlycSBieXRlIG5vcm1hbGx5IDB4MDggKi8KKy8qIHNlY29uZCBpcnEgYnl0ZSBiYXNlIDB4N2QgKyBiZWxvdyAqLworLyogdGhpcmQgaXJxIGJ5dGUgYmFzZSAweDk0ICsgYmVsb3cgKi8KKy8qIGZvdXJ0aCBpcnEgYnl0ZSBub3JtYWxseSAweGVlICovCisKKy8qIHNlY29uZCBpbnRlcnJ1cHQgYnl0ZSAqLworI2RlZmluZSBDSDM0MV9NVUxUX1NUQVQgMHgwNCAvKiBtdWx0aXBsZSBzdGF0dXMgc2luY2UgbGFzdCBpbnRlcnJ1cHQgZXZlbnQgKi8KKworLyogc3RhdHVzIHJldHVybmVkIGluIHRoaXJkIGludGVycnVwdCBhbnN3ZXIgYnl0ZSwgaW52ZXJ0ZWQgaW4gZGF0YQorICAgZnJvbSBpcnEgKi8KKyNkZWZpbmUgQ0gzNDFfQklUX0NUUyAweDAxCisjZGVmaW5lIENIMzQxX0JJVF9EU1IgMHgwMgorI2RlZmluZSBDSDM0MV9CSVRfUkkgIDB4MDQKKyNkZWZpbmUgQ0gzNDFfQklUX0RDRCAweDA4CisjZGVmaW5lIENIMzQxX0JJVFNfTU9ERU1fU1RBVCAweDBmIC8qIGFsbCBiaXRzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYmF1ZHJhdGUgY2FsY3VsYXRpb24gZmFjdG9yICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0gzNDFfQkFVREJBU0VfRkFDVE9SIDE1MzI2MjA4MDAKKyNkZWZpbmUgQ0gzNDFfQkFVREJBU0VfRElWTUFYIDMKKwogc3RhdGljIGludCBkZWJ1ZzsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewpAQCAtMzQsOSArNjYsMTIgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKIHN0cnVjdCBjaDM0MV9wcml2YXRlIHsKLQl1bnNpZ25lZCBiYXVkX3JhdGU7Ci0JdTggZHRyOwotCXU4IHJ0czsKKwlzcGlubG9ja190IGxvY2s7IC8qIGFjY2VzcyBsb2NrICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIHdhaXQgcXVldWUgZm9yIG1vZGVtIHN0YXR1cyAqLworCXVuc2lnbmVkIGJhdWRfcmF0ZTsgLyogc2V0IGJhdWQgcmF0ZSAqLworCXU4IGxpbmVfY29udHJvbDsgLyogc2V0IGxpbmUgY29udHJvbCB2YWx1ZSBSVFMvRFRSICovCisJdTggbGluZV9zdGF0dXM7IC8qIGFjdGl2ZSBzdGF0dXMgb2YgbW9kZW0gY29udHJvbCBpbnB1dHMgKi8KKwl1OCBtdWx0aV9zdGF0dXNfY2hhbmdlOyAvKiBzdGF0dXMgY2hhbmdlZCBtdWx0aXBsZSBzaW5jZSBsYXN0IGNhbGwgKi8KIH07CiAKIHN0YXRpYyBpbnQgY2gzNDFfY29udHJvbF9vdXQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggcmVxdWVzdCwKQEAgLTcyLDM3ICsxMDcsMjggQEAKIHsKIAlzaG9ydCBhLCBiOwogCWludCByOworCXVuc2lnbmVkIGxvbmcgZmFjdG9yOworCXNob3J0IGRpdmlzb3I7CiAKIAlkYmcoImNoMzQxX3NldF9iYXVkcmF0ZSglZCkiLCBwcml2LT5iYXVkX3JhdGUpOwotCXN3aXRjaCAocHJpdi0+YmF1ZF9yYXRlKSB7Ci0JY2FzZSAyNDAwOgotCQlhID0gMHhkOTAxOwotCQliID0gMHgwMDM4OwotCQlicmVhazsKLQljYXNlIDQ4MDA6Ci0JCWEgPSAweDY0MDI7Ci0JCWIgPSAweDAwMWY7Ci0JCWJyZWFrOwotCWNhc2UgOTYwMDoKLQkJYSA9IDB4YjIwMjsKLQkJYiA9IDB4MDAxMzsKLQkJYnJlYWs7Ci0JY2FzZSAxOTIwMDoKLQkJYSA9IDB4ZDkwMjsKLQkJYiA9IDB4MDAwZDsKLQkJYnJlYWs7Ci0JY2FzZSAzODQwMDoKLQkJYSA9IDB4NjQwMzsKLQkJYiA9IDB4MDAwYTsKLQkJYnJlYWs7Ci0JY2FzZSAxMTUyMDA6Ci0JCWEgPSAweGNjMDM7Ci0JCWIgPSAweDAwMDg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisKKwlpZiAoIXByaXYtPmJhdWRfcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJZmFjdG9yID0gKENIMzQxX0JBVURCQVNFX0ZBQ1RPUiAvIHByaXYtPmJhdWRfcmF0ZSk7CisJZGl2aXNvciA9IENIMzQxX0JBVURCQVNFX0RJVk1BWDsKKworCXdoaWxlICgoZmFjdG9yID4gMHhmZmYwKSAmJiBkaXZpc29yKSB7CisJCWZhY3RvciA+Pj0gMzsKKwkJZGl2aXNvci0tOwogCX0KIAorCWlmIChmYWN0b3IgPiAweGZmZjApCisJCXJldHVybiAtRUlOVkFMOworCisJZmFjdG9yID0gMHgxMDAwMCAtIGZhY3RvcjsKKwlhID0gKGZhY3RvciAmIDB4ZmYwMCkgfCBkaXZpc29yOworCWIgPSBmYWN0b3IgJiAweGZmOworCiAJciA9IGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHg5YSwgMHgxMzEyLCBhKTsKIAlpZiAoIXIpCiAJCXIgPSBjaDM0MV9jb250cm9sX291dChkZXYsIDB4OWEsIDB4MGYyYywgYik7CkBAIC0xMTAsMTkgKzEzNiwxOCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IGNoMzQxX3NldF9oYW5kc2hha2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBpbnQgY2gzNDFfc2V0X2hhbmRzaGFrZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCBjb250cm9sKQogewotCWRiZygiY2gzNDFfc2V0X2hhbmRzaGFrZSglZCwlZCkiLCBwcml2LT5kdHIsIHByaXYtPnJ0cyk7Ci0JcmV0dXJuIGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHhhNCwKLQkJfigocHJpdi0+ZHRyPzE8PDU6MCl8KHByaXYtPnJ0cz8xPDw2OjApKSwgMCk7CisJZGJnKCJjaDM0MV9zZXRfaGFuZHNoYWtlKDB4JTAyeCkiLCBjb250cm9sKTsKKwlyZXR1cm4gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweGE0LCB+Y29udHJvbCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgY2gzNDFfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQorc3RhdGljIGludCBjaDM0MV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2KQogewogCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgcjsKIAljb25zdCB1bnNpZ25lZCBzaXplID0gODsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCJjaDM0MV9nZXRfc3RhdHVzKCkiKTsKIApAQCAtMTM0LDEwICsxNTksMTUgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCi0JLyogTm90IGhhdmluZyB0aGUgZGF0YXNoZWV0IGZvciB0aGUgQ0gzNDEsIHdlIGlnbm9yZSB0aGUgYnl0ZXMgcmV0dXJuZWQKLQkgKiBmcm9tIHRoZSBkZXZpY2UuIFJldHVybiBlcnJvciBpZiB0aGUgZGV2aWNlIGRpZCBub3QgcmVzcG9uZCBpbiB0aW1lLgotCSAqLwotCXIgPSAwOworCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0YXR1cyBpZiBhdmFpbGFibGUgKi8KKwlpZiAociA9PSAyKSB7CisJCXIgPSAwOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX3N0YXR1cyA9ICh+KCpidWZmZXIpKSAmIENIMzQxX0JJVFNfTU9ERU1fU1RBVDsKKwkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJciA9IC1FUFJPVE87CiAKIG91dDoJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gcjsKQEAgLTE4MCw3ICsyMTAsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4cGVjdCAweGZmIDB4ZWUgKi8KLQlyID0gY2gzNDFfZ2V0X3N0YXR1cyhkZXYpOworCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldiwgcHJpdik7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMTkyLDEyICsyMjIsMTIgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCi0JciA9IGNoMzQxX3NldF9oYW5kc2hha2UoZGV2LCBwcml2KTsKKwlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShkZXYsIHByaXYtPmxpbmVfY29udHJvbCk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAogCS8qIGV4cGVjdCAweDlmIDB4ZWUgKi8KLQlyID0gY2gzNDFfZ2V0X3N0YXR1cyhkZXYpOworCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldiwgcHJpdik7CiAKIG91dDoJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gcjsKQEAgLTIxNiw5ICsyNDYsMTAgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAlwcml2LT5iYXVkX3JhdGUgPSBERUZBVUxUX0JBVURfUkFURTsKLQlwcml2LT5kdHIgPSAxOwotCXByaXYtPnJ0cyA9IDE7CisJcHJpdi0+bGluZV9jb250cm9sID0gQ0gzNDFfQklUX1JUUyB8IENIMzQxX0JJVF9EVFI7CiAKIAlyID0gY2gzNDFfY29uZmlndXJlKHNlcmlhbC0+ZGV2LCBwcml2KTsKIAlpZiAociA8IDApCkBAIC0yMzEsNiArMjYyLDM1IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIGNoMzQxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY19jZmxhZzsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCWRiZygiJXMgLSBzaHV0dGluZyBkb3duIHVyYnMiLCBfX2Z1bmNfXyk7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisKKwlpZiAodHR5KSB7CisJCWNfY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCWlmIChjX2NmbGFnICYgSFVQQ0wpIHsKKwkJCS8qIGRyb3AgRFRSIGFuZCBSVFMgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlwcml2LT5saW5lX2NvbnRyb2wgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJY2gzNDFfc2V0X2hhbmRzaGFrZShwb3J0LT5zZXJpYWwtPmRldiwgMCk7CisJCX0KKwl9CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7Cit9CisKKwogLyogb3BlbiB0aGlzIGRldmljZSwgc2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLwogc3RhdGljIGludCBjaDM0MV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJc3RydWN0IGZpbGUgKmZpbHApCkBAIC0yNDIsMTQgKzMwMiwxMyBAQAogCWRiZygiY2gzNDFfb3BlbigpIik7CiAKIAlwcml2LT5iYXVkX3JhdGUgPSBERUZBVUxUX0JBVURfUkFURTsKLQlwcml2LT5kdHIgPSAxOwotCXByaXYtPnJ0cyA9IDE7CisJcHJpdi0+bGluZV9jb250cm9sID0gQ0gzNDFfQklUX1JUUyB8IENIMzQxX0JJVF9EVFI7CiAKIAlyID0gY2gzNDFfY29uZmlndXJlKHNlcmlhbC0+ZGV2LCBwcml2KTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShzZXJpYWwtPmRldiwgcHJpdik7CisJciA9IGNoMzQxX3NldF9oYW5kc2hha2Uoc2VyaWFsLT5kZXYsIHByaXYtPmxpbmVfY29udHJvbCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCkBAIC0yNTcsNiArMzE2LDE2IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCisJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fZnVuY19fKTsKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCIKKwkJCSIgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJY2gzNDFfY2xvc2UodHR5LCBwb3J0LCBOVUxMKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCiAJciA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCwgZmlscCk7CiAKIG91dDoJcmV0dXJuIHI7CkBAIC0yNzAsNDYgKzMzOSwyMjQgQEAKIHsKIAlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBiYXVkX3JhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiY2gzNDFfc2V0X3Rlcm1pb3MoKSIpOwogCisJaWYgKCF0dHkgfHwgIXR0eS0+dGVybWlvcykKKwkJcmV0dXJuOworCiAJYmF1ZF9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAotCXN3aXRjaCAoYmF1ZF9yYXRlKSB7Ci0JY2FzZSAyNDAwOgotCWNhc2UgNDgwMDoKLQljYXNlIDk2MDA6Ci0JY2FzZSAxOTIwMDoKLQljYXNlIDM4NDAwOgotCWNhc2UgMTE1MjAwOgotCQlwcml2LT5iYXVkX3JhdGUgPSBiYXVkX3JhdGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRiZygiUmF0ZSAlZCBub3Qgc3VwcG9ydGVkLCB1c2luZyAlZCIsCi0JCQliYXVkX3JhdGUsIERFRkFVTFRfQkFVRF9SQVRFKTsKLQkJcHJpdi0+YmF1ZF9yYXRlID0gREVGQVVMVF9CQVVEX1JBVEU7CisJcHJpdi0+YmF1ZF9yYXRlID0gYmF1ZF9yYXRlOworCisJaWYgKGJhdWRfcmF0ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gKENIMzQxX0JJVF9EVFIgfCBDSDM0MV9CSVRfUlRTKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQljaDM0MV9zZXRfYmF1ZHJhdGUocG9ydC0+c2VyaWFsLT5kZXYsIHByaXYpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+KENIMzQxX0JJVF9EVFIgfCBDSDM0MV9CSVRfUlRTKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCX0KIAotCWNoMzQxX3NldF9iYXVkcmF0ZShwb3J0LT5zZXJpYWwtPmRldiwgcHJpdik7CisJY2gzNDFfc2V0X2hhbmRzaGFrZShwb3J0LT5zZXJpYWwtPmRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAogCS8qIFVuaW1wbGVtZW50ZWQ6CiAJICogKGNmbGFnICYgQ1NJWkUpIDogZGF0YSBiaXRzIFs1LCA4XQogCSAqIChjZmxhZyAmIFBBUkVOQikgOiBwYXJpdHkge05PTkUsIEVWRU4sIE9ERH0KIAkgKiAoY2ZsYWcgJiBDU1RPUEIpIDogc3RvcCBiaXRzIFsxLCAyXQogCSAqLworfQogCi0JIC8qIENvcHkgYmFjayB0aGUgb2xkIGhhcmR3YXJlIHNldHRpbmdzICovCi0JIHR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7Ci0JIC8qIEFuZCByZS1lbmNvZGUgd2l0aCB0aGUgbmV3IGJhdWQgKi8KLQkgdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkX3JhdGUsIGJhdWRfcmF0ZSk7CitzdGF0aWMgaW50IGNoMzQxX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBjb250cm9sOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ0gzNDFfQklUX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ0gzNDFfQklUX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q0gzNDFfQklUX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q0gzNDFfQklUX0RUUjsKKwljb250cm9sID0gcHJpdi0+bGluZV9jb250cm9sOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCBjb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgY2gzNDFfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzICglZCkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCSAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaWYgKGFjdHVhbF9sZW5ndGggPj0gNCkgeworCQlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX3N0YXR1cyA9ICh+KGRhdGFbMl0pKSAmIENIMzQxX0JJVFNfTU9ERU1fU1RBVDsKKwkJaWYgKChkYXRhWzFdICYgQ0gzNDFfTVVMVF9TVEFUKSkKKwkJCXByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2UgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCX0KKworZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKK30KKworc3RhdGljIGludCB3YWl0X21vZGVtX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGFyZykKK3sKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHByZXZzdGF0dXM7CisJdTggc3RhdHVzOworCXU4IGNoYW5nZWQ7CisJdTggbXVsdGlfY2hhbmdlID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJldnN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCXByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2UgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlICghbXVsdGlfY2hhbmdlKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCQltdWx0aV9jaGFuZ2UgPSBwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJY2hhbmdlZCA9IHByZXZzdGF0dXMgXiBzdGF0dXM7CisKKwkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9SSSkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfRFNSKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9EQ0QpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX0NUUykpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwcmV2c3RhdHVzID0gc3RhdHVzOworCX0KKworCXJldHVybiAwOworfQorCisvKnN0YXRpYyBpbnQgY2gzNDFfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsKi8KK3N0YXRpYyBpbnQgY2gzNDFfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlkYmcoIiVzICglZCkgY21kID0gMHglMDR4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUlXQUlUOgorCQlkYmcoIiVzICglZCkgVElPQ01JV0FJVCIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIHdhaXRfbW9kZW1faW5mbyhwb3J0LCBhcmcpOworCisJZGVmYXVsdDoKKwkJZGJnKCIlcyBub3Qgc3VwcG9ydGVkID0gMHglMDR4IiwgX19mdW5jX18sIGNtZCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgY2gzNDFfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBtY3I7CisJdTggc3RhdHVzOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlkYmcoIiVzICglZCkiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbWNyID0gcHJpdi0+bGluZV9jb250cm9sOworCXN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJlc3VsdCA9ICgobWNyICYgQ0gzNDFfQklUX0RUUikJCT8gVElPQ01fRFRSIDogMCkKKwkJICB8ICgobWNyICYgQ0gzNDFfQklUX1JUUykJPyBUSU9DTV9SVFMgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfQ1RTKQk/IFRJT0NNX0NUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9EU1IpCT8gVElPQ01fRFNSIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX1JJKQk/IFRJT0NNX1JJICA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9EQ0QpCT8gVElPQ01fQ0QgIDogMCk7CisKKwlkYmcoIiVzIC0gcmVzdWx0ID0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIGludCBjaDM0MV9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IE5VTEw7CisJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXY7CisKKwlzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKworCS8qcmVjb25maWd1cmUgY2gzNDEgc2VyaWFsIHBvcnQgYWZ0ZXIgYnVzLXJlc2V0Ki8KKwljaDM0MV9jb25maWd1cmUoZGV2LCBwcml2KTsKKworCXVzYl9zZXJpYWxfcmVzdW1lKGludGYpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDM0MV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImNoMzQxIiwKIAkucHJvYmUJCT0gdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuc3VzcGVuZAk9IHVzYl9zZXJpYWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHVzYl9zZXJpYWxfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUJPSBjaDM0MV9yZXNldF9yZXN1bWUsCiAJLmlkX3RhYmxlCT0gaWRfdGFibGUsCiAJLm5vX2R5bmFtaWNfaWQJPSAxLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9CTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGNoMzQxX2RldmljZSA9IHsKQEAgLTMxNywxMiArNTY0LDE3IEBACiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9ICJjaDM0MS11YXJ0IiwKIAl9LAotCS5pZF90YWJsZSAgICAgICAgID0gaWRfdGFibGUsCi0JLnVzYl9kcml2ZXIgICAgICAgPSAmY2gzNDFfZHJpdmVyLAotCS5udW1fcG9ydHMgICAgICAgID0gMSwKLQkub3BlbiAgICAgICAgICAgICA9IGNoMzQxX29wZW4sCi0JLnNldF90ZXJtaW9zICAgICAgPSBjaDM0MV9zZXRfdGVybWlvcywKLQkuYXR0YWNoICAgICAgICAgICA9IGNoMzQxX2F0dGFjaCwKKwkuaWRfdGFibGUgICAgICAgICAgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciAgICAgICAgPSAmY2gzNDFfZHJpdmVyLAorCS5udW1fcG9ydHMgICAgICAgICA9IDEsCisJLm9wZW4gICAgICAgICAgICAgID0gY2gzNDFfb3BlbiwKKwkuY2xvc2UgICAgICAgICAgICAgPSBjaDM0MV9jbG9zZSwKKwkuaW9jdGwgICAgICAgICAgICAgPSBjaDM0MV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgICAgICAgPSBjaDM0MV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQgICAgICAgICAgPSBjaDM0MV90aW9jbWdldCwKKwkudGlvY21zZXQgICAgICAgICAgPSBjaDM0MV90aW9jbXNldCwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPSBjaDM0MV9yZWFkX2ludF9jYWxsYmFjaywKKwkuYXR0YWNoICAgICAgICAgICAgPSBjaDM0MV9hdHRhY2gsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjaDM0MV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNDA4MmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzgxICswLDAgQEAKLS8qCi0gKiBTaWxpY29uIExhYm9yYXRvcmllcyBDUDIxMDEvQ1AyMTAyIFVTQiB0byBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQ3JhaWcgU2hlbGxleSAoY3JhaWdAbWljcm90cm9uLm9yZy51aykKLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCi0gKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFN1cHBvcnQgdG8gc2V0IGZsb3cgY29udHJvbCBsaW5lIGxldmVscyB1c2luZyBUSU9DTUdFVCBhbmQgVElPQ01TRVQKLSAqIHRoYW5rcyB0byBLYXJsIEhpcmFtb3RvIGthcmxAaGlyYW1vdG8ub3JnLiBSVFNDVFMgaGFyZHdhcmUgZmxvdwotICogY29udHJvbCB0aGFua3MgdG8gTXVuaXIgTmFzc2FyIG5hc3Nhcm11QHJlYWwtdGltZS5jb20KLSAqCi0gKiBPdXRzdGFuZGluZyBJc3N1ZXM6Ci0gKiAgQnVmZmVycyBhcmUgbm90IGZsdXNoZWQgd2hlbiB0aGUgcG9ydCBpcyBvcGVuZWQuCi0gKiAgTXVsdGlwbGUgY2FsbHMgdG8gd3JpdGUoKSBtYXkgZmFpbCB3aXRoICJSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgotCi0vKgotICogVmVyc2lvbiBJbmZvcm1hdGlvbgotICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wNyIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlNpbGljb24gTGFicyBDUDIxMDEvQ1AyMTAyIFJTMjMyIHNlcmlhbCBhZGFwdG9yIGRyaXZlciIKLQotLyoKLSAqIEZ1bmN0aW9uIFByb3RvdHlwZXMKLSAqLwotc3RhdGljIGludCBjcDIxMDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCi0JCQkJCQkJc3RydWN0IGZpbGUgKik7Ci1zdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwotc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKLQkJCQkJCQlzdHJ1Y3QgZmlsZSopOwotc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICopOwotc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKLQkJCQkJCQlzdHJ1Y3Qga3Rlcm1pb3MqKTsKLXN0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICopOwotc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKLQkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwotc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKLQotCi1zdGF0aWMgaW50IGRlYnVnOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwNjZBKSB9LCAvKiBBS1RBS09NIEFDRS0xMDAxIGNhYmxlICovCi0JeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhFMDAwKSB9LCAvKiBQaXJlbGxpIEJyb2FkYmFuZCBTLnAuQSwgRFAtTDEwIFNJUC9HU00gTW9iaWxlICovCi0JeyBVU0JfREVWSUNFKDB4MDhlNiwgMHg1NTAxKSB9LCAvKiBHZW1hbHRvIFByb3gtUFUvQ1UgY29udGFjdGxlc3Mgc21hcnRjYXJkIHJlYWRlciAqLwotCXsgVVNCX0RFVklDRSgweDBGQ0YsIDB4MTAwMykgfSwgLyogRHluYXN0cmVhbSBBTlQgZGV2ZWxvcG1lbnQgYm9hcmQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwRkNGLCAweDEwMDQpIH0sIC8qIER5bmFzdHJlYW0gQU5UMlVTQiAqLwotCXsgVVNCX0RFVklDRSgweDBGQ0YsIDB4MTAwNikgfSwgLyogRHluYXN0cmVhbSBBTlQgZGV2ZWxvcG1lbnQgYm9hcmQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEE2LCAweEFBMjYpIH0sIC8qIEtub2NrLW9mZiBEQ1UtMTEgY2FibGUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEFCLCAweDEwQzUpIH0sIC8qIFNpZW1lbnMgTUM2MCBDYWJsZSAqLwotCXsgVVNCX0RFVklDRSgweDEwQjUsIDB4QUM3MCkgfSwgLyogTm9raWEgQ0EtNDIgVVNCICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDBBKSB9LCAvKiBTUE9SVGlkZW50IEJTTTctRC1VU0IgbWFpbiBzdGF0aW9uICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDNCKSB9LCAvKiBQb2xvbHUgVVNCLXNlcmlhbCBjb252ZXJ0ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwNTMpIH0sIC8qIEVuZm9yYSBFREcxMjI4ICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDU0KSB9LCAvKiBFbmZvcmEgR1NNMjIyOCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODA2NikgfSwgLyogQXJndXNzb2Z0IEluLVN5c3RlbSBQcm9ncmFtbWVyICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDdBKSB9LCAvKiBDcnVtYjEyOCBib2FyZCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODBDQSkgfSwgLyogRGVncmVlIENvbnRyb2xzIEluYyAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODBERCkgfSwgLyogVHJhY2llbnQgUkZJRCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODBGNikgfSwgLyogU3V1bnRvIHNwb3J0cyBpbnN0cnVtZW50ICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTE1KSB9LCAvKiBBcnlnb24gTkZDL01pZmFyZSBSZWFkZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0QpIH0sIC8qIEJ1cm5zaWRlIFRlbGVjb20gRGVza21vYmlsZSAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUdibGFzdGVyIFAmUCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QikgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUd0YWxrICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTVFKSB9LCAvKiBIZWxpY29tbSBJUC1MaW5rIDEyMjAtRFZNICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTlGKSB9LCAvKiBNSlMgVVNCIFRvc2xpbmsgU3dpdGNoZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQTYpIH0sIC8qIFRoaW5rT3B0aWNzIFdhdkl0ICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUFDKSB9LCAvKiBNU0QgRGFzaCBIYXdrICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUM4KSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBCYWJ5LUpUQUcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxRTIpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEJhYnktTElOICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUU3KSB9LCAvKiBBZXJvY29tbSBSYWRpbyAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjJCKSB9LCAvKiBNb2RlbSBFREdFKEdTTSkgQ29tYW5kZXIgMiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI2QikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4sIEZhc3R0cmF4IEdQUyBkZW1vc3RyYXRpb24gbW9kdWxlICovCi0JeyBVU0JfREVWSUNFKDB4MTBjNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzQTgpIH0sIC8qIEFtYmVyIFdpcmVsZXNzIEFNQjI1NjAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEYwMDEpIH0sIC8qIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIFVTQnNjb3BlNTAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEYwMDIpIH0sIC8qIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIFVTQndhdmUxMiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwMykgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCcHVsc2UxMDAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEYwMDQpIH0sIC8qIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIFVTQmNvdW50NTAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM1LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBNb2JpRGF0YSBHUFJTIFVTQiBNb2RlbSAqLwotCXsgVVNCX0RFVklDRSgweDEzQUQsIDB4OTk5OSkgfSwgLyogQmFsdGVjaCBjYXJkIHJlYWRlciAqLwotCXsgVVNCX0RFVklDRSgweDE2NkEsIDB4MDMwMykgfSwgLyogQ2xpcHNhbCA1NTAwUENVIEMtQnVzIFVTQiBpbnRlcmZhY2UgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNkQ2LCAweDAwMDEpIH0sIC8qIEphYmxvdHJvbiBzZXJpYWwgaW50ZXJmYWNlICovCi0JeyBVU0JfREVWSUNFKDB4MThFRiwgMHhFMDBGKSB9LCAvKiBFTFYgVVNCLUkyQy1JbnRlcmZhY2UgKi8KLQl7IH0gLyogVGVybWluYXRpbmcgRW50cnkgKi8KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjcDIxMDFfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjcDIxMDEiLAotCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAotCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAotCS5pZF90YWJsZQk9IGlkX3RhYmxlLAotCS5ub19keW5hbWljX2lkCT0gCTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGNwMjEwMV9kZXZpY2UgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0JVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gCSJjcDIxMDEiLAotCX0sCi0JLnVzYl9kcml2ZXIJCT0gJmNwMjEwMV9kcml2ZXIsCi0JLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAotCS5udW1fcG9ydHMJCT0gMSwKLQkub3BlbgkJCT0gY3AyMTAxX29wZW4sCi0JLmNsb3NlCQkJPSBjcDIxMDFfY2xvc2UsCi0JLmJyZWFrX2N0bAkJPSBjcDIxMDFfYnJlYWtfY3RsLAotCS5zZXRfdGVybWlvcwkJPSBjcDIxMDFfc2V0X3Rlcm1pb3MsCi0JLnRpb2NtZ2V0IAkJPSBjcDIxMDFfdGlvY21nZXQsCi0JLnRpb2Ntc2V0CQk9IGNwMjEwMV90aW9jbXNldCwKLQkuYXR0YWNoCQkJPSBjcDIxMDFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gY3AyMTAxX3NodXRkb3duLAotfTsKLQotLyogQ29uZmlnIHJlcXVlc3QgdHlwZXMgKi8KLSNkZWZpbmUgUkVRVFlQRV9IT1NUX1RPX0RFVklDRQkweDQxCi0jZGVmaW5lIFJFUVRZUEVfREVWSUNFX1RPX0hPU1QJMHhjMQotCi0vKiBDb25maWcgU0VUIHJlcXVlc3RzLiBUbyBHRVQsIGFkZCAxIHRvIHRoZSByZXF1ZXN0IG51bWJlciAqLwotI2RlZmluZSBDUDIxMDFfVUFSVCAJCTB4MDAJLyogRW5hYmxlIC8gRGlzYWJsZSAqLwotI2RlZmluZSBDUDIxMDFfQkFVRFJBVEUJCTB4MDEJLyogKEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWRyYXRlKSAqLwotI2RlZmluZSBDUDIxMDFfQklUUwkJMHgwMwkvKiAweCgwKShkYXRhYml0cykocGFyaXR5KShzdG9wYml0cykgKi8KLSNkZWZpbmUgQ1AyMTAxX0JSRUFLCQkweDA1CS8qIE9uIC8gT2ZmICovCi0jZGVmaW5lIENQMjEwMV9DT05UUk9MCQkweDA3CS8qIEZsb3cgY29udHJvbCBsaW5lIHN0YXRlcyAqLwotI2RlZmluZSBDUDIxMDFfTU9ERU1DVEwJCTB4MTMJLyogTW9kZW0gY29udHJvbHMgKi8KLSNkZWZpbmUgQ1AyMTAxX0NPTkZJR182CQkweDE5CS8qIDYgYnl0ZXMgb2YgY29uZmlnIGRhdGEgPz8/ICovCi0KLS8qIENQMjEwMV9VQVJUICovCi0jZGVmaW5lIFVBUlRfRU5BQkxFCQkweDAwMDEKLSNkZWZpbmUgVUFSVF9ESVNBQkxFCQkweDAwMDAKLQotLyogQ1AyMTAxX0JBVURSQVRFICovCi0jZGVmaW5lIEJBVURfUkFURV9HRU5fRlJFUQkweDM4NDAwMAotCi0vKiBDUDIxMDFfQklUUyAqLwotI2RlZmluZSBCSVRTX0RBVEFfTUFTSwkJMFgwZjAwCi0jZGVmaW5lIEJJVFNfREFUQV81CQkwWDA1MDAKLSNkZWZpbmUgQklUU19EQVRBXzYJCTBYMDYwMAotI2RlZmluZSBCSVRTX0RBVEFfNwkJMFgwNzAwCi0jZGVmaW5lIEJJVFNfREFUQV84CQkwWDA4MDAKLSNkZWZpbmUgQklUU19EQVRBXzkJCTBYMDkwMAotCi0jZGVmaW5lIEJJVFNfUEFSSVRZX01BU0sJMHgwMGYwCi0jZGVmaW5lIEJJVFNfUEFSSVRZX05PTkUJMHgwMDAwCi0jZGVmaW5lIEJJVFNfUEFSSVRZX09ERAkJMHgwMDEwCi0jZGVmaW5lIEJJVFNfUEFSSVRZX0VWRU4JMHgwMDIwCi0jZGVmaW5lIEJJVFNfUEFSSVRZX01BUksJMHgwMDMwCi0jZGVmaW5lIEJJVFNfUEFSSVRZX1NQQUNFCTB4MDA0MAotCi0jZGVmaW5lIEJJVFNfU1RPUF9NQVNLCQkweDAwMGYKLSNkZWZpbmUgQklUU19TVE9QXzEJCTB4MDAwMAotI2RlZmluZSBCSVRTX1NUT1BfMV81CQkweDAwMDEKLSNkZWZpbmUgQklUU19TVE9QXzIJCTB4MDAwMgotCi0vKiBDUDIxMDFfQlJFQUsgKi8KLSNkZWZpbmUgQlJFQUtfT04JCTB4MDAwMAotI2RlZmluZSBCUkVBS19PRkYJCTB4MDAwMQotCi0vKiBDUDIxMDFfQ09OVFJPTCAqLwotI2RlZmluZSBDT05UUk9MX0RUUgkJMHgwMDAxCi0jZGVmaW5lIENPTlRST0xfUlRTCQkweDAwMDIKLSNkZWZpbmUgQ09OVFJPTF9DVFMJCTB4MDAxMAotI2RlZmluZSBDT05UUk9MX0RTUgkJMHgwMDIwCi0jZGVmaW5lIENPTlRST0xfUklORwkJMHgwMDQwCi0jZGVmaW5lIENPTlRST0xfRENECQkweDAwODAKLSNkZWZpbmUgQ09OVFJPTF9XUklURV9EVFIJMHgwMTAwCi0jZGVmaW5lIENPTlRST0xfV1JJVEVfUlRTCTB4MDIwMAotCi0vKgotICogY3AyMTAxX2dldF9jb25maWcKLSAqIFJlYWRzIGZyb20gdGhlIENQMjEwMSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogJ3NpemUnIGlzIHNwZWNpZmllZCBpbiBieXRlcy4KLSAqICdkYXRhJyBpcyBhIHBvaW50ZXIgdG8gYSBwcmUtYWxsb2NhdGVkIGFycmF5IG9mIGludGVnZXJzIGxhcmdlCi0gKiBlbm91Z2ggdG8gaG9sZCAnc2l6ZScgYnl0ZXMgKHdpdGggNCBieXRlcyB0byBlYWNoIGludGVnZXIpCi0gKi8KLXN0YXRpYyBpbnQgY3AyMTAxX2dldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTggcmVxdWVzdCwKLQkJdW5zaWduZWQgaW50ICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCV9fbGUzMiAqYnVmOwotCWludCByZXN1bHQsIGksIGxlbmd0aDsKLQotCS8qIE51bWJlciBvZiBpbnRlZ2VycyByZXF1aXJlZCB0byBjb250YWluIHRoZSBhcnJheSAqLwotCWxlbmd0aCA9ICgoKHNpemUgLSAxKSB8IDMpICsgMSkvNDsKLQotCWJ1ZiA9IGtjYWxsb2MobGVuZ3RoLCBzaXplb2YoX19sZTMyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBGb3IgZ2V0IHJlcXVlc3RzLCB0aGUgcmVxdWVzdCBudW1iZXIgbXVzdCBiZSBpbmNyZW1lbnRlZCAqLwotCXJlcXVlc3QrKzsKLQotCS8qIElzc3VlIHRoZSByZXF1ZXN0LCBhdHRlbXB0aW5nIHRvIHJlYWQgJ3NpemUnIGJ5dGVzICovCi0JcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJCXJlcXVlc3QsIFJFUVRZUEVfREVWSUNFX1RPX0hPU1QsIDB4MDAwMCwKLQkJCQkwLCBidWYsIHNpemUsIDMwMCk7Ci0KLQkvKiBDb252ZXJ0IGRhdGEgaW50byBhbiBhcnJheSBvZiBpbnRlZ2VycyAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLQkJZGF0YVtpXSA9IGxlMzJfdG9fY3B1KGJ1ZltpXSk7Ci0KLQlrZnJlZShidWYpOwotCi0JaWYgKHJlc3VsdCAhPSBzaXplKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIHNlbmQgY29uZmlnIHJlcXVlc3QsICIKLQkJCQkicmVxdWVzdD0weCV4IHNpemU9JWQgcmVzdWx0PSVkXG4iLAotCQkJCV9fZnVuY19fLCByZXF1ZXN0LCBzaXplLCByZXN1bHQpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNwMjEwMV9zZXRfY29uZmlnCi0gKiBXcml0ZXMgdG8gdGhlIENQMjEwMSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogVmFsdWVzIGxlc3MgdGhhbiAxNiBiaXRzIHdpZGUgYXJlIHNlbnQgZGlyZWN0bHkKLSAqICdzaXplJyBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMuCi0gKi8KLXN0YXRpYyBpbnQgY3AyMTAxX3NldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTggcmVxdWVzdCwKLQkJdW5zaWduZWQgaW50ICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCV9fbGUzMiAqYnVmOwotCWludCByZXN1bHQsIGksIGxlbmd0aDsKLQotCS8qIE51bWJlciBvZiBpbnRlZ2VycyByZXF1aXJlZCB0byBjb250YWluIHRoZSBhcnJheSAqLwotCWxlbmd0aCA9ICgoKHNpemUgLSAxKSB8IDMpICsgMSkvNDsKLQotCWJ1ZiA9IGttYWxsb2MobGVuZ3RoICogc2l6ZW9mKF9fbGUzMiksIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsCi0JCQkJX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBBcnJheSBvZiBpbnRlZ2VycyBpbnRvIGJ5dGVzICovCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotCQlidWZbaV0gPSBjcHVfdG9fbGUzMihkYXRhW2ldKTsKLQotCWlmIChzaXplID4gMikgewotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCAweDAwMDAsCi0JCQkJMCwgYnVmLCBzaXplLCAzMDApOwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJCXJlcXVlc3QsIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UsIGRhdGFbMF0sCi0JCQkJMCwgTlVMTCwgMCwgMzAwKTsKLQl9Ci0KLQlrZnJlZShidWYpOwotCi0JaWYgKChzaXplID4gMiAmJiByZXN1bHQgIT0gc2l6ZSkgfHwgcmVzdWx0IDwgMCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIHJlcXVlc3QsICIKLQkJCQkicmVxdWVzdD0weCV4IHNpemU9JWQgcmVzdWx0PSVkXG4iLAotCQkJCV9fZnVuY19fLCByZXF1ZXN0LCBzaXplLCByZXN1bHQpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9Ci0KLQkvKiBTaW5nbGUgZGF0YSB2YWx1ZSAqLwotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCBkYXRhWzBdLAotCQkJMCwgTlVMTCwgMCwgMzAwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZQotICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhbGxpbmcgY3AyMTAxX3NldF9jb25maWcgb24gc2luZ2xlIGRhdGEgdmFsdWVzCi0gKiB3aXRob3V0IHJlcXVpcmluZyBhbiBpbnRlZ2VyIHBvaW50ZXIKLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCXU4IHJlcXVlc3QsIHVuc2lnbmVkIGludCBkYXRhKQotewotCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCByZXF1ZXN0LCAmZGF0YSwgMik7Ci19Ci0KLXN0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCWludCByZXN1bHQ7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfVUFSVCwgVUFSVF9FTkFCTEUpKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIGVuYWJsZSBVQVJUXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCi0JLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KLQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCi0JCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQlzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaywKLQkJCXBvcnQpOwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzdWx0KSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgIgotCQkJCSJlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyogQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLwotCWNwMjEwMV9nZXRfdGVybWlvcyh0dHkpOwotCi0JLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLwotCWNwMjEwMV90aW9jbXNldCh0dHksIE5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmIChzZXJpYWwtPmRldikgewotCQkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCi0JCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkKLQkJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOwotCQlpZiAoc2VyaWFsLT5udW1fYnVsa19pbikKLQkJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCS8qIHNodXRkb3duIG91ciB1cmJzICovCi0JZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fZnVuY19fKTsKLQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKLQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCi0JbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKLQlpZiAoIXBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKQotCQljcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX1VBUlQsIFVBUlRfRElTQUJMRSk7Ci0JbXV0ZXhfdW5sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOwotfQotCi0vKgotICogY3AyMTAxX2dldF90ZXJtaW9zCi0gKiBSZWFkcyB0aGUgYmF1ZCByYXRlLCBkYXRhIGJpdHMsIHBhcml0eSwgc3RvcCBiaXRzIGFuZCBmbG93IGNvbnRyb2wgbW9kZQotICogZnJvbSB0aGUgZGV2aWNlLCBjb3JyZWN0cyBhbnkgdW5zdXBwb3J0ZWQgdmFsdWVzLCBhbmQgY29uZmlndXJlcyB0aGUKLSAqIHRlcm1pb3Mgc3RydWN0dXJlIHRvIHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UKLSAqLwotc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGludCBjZmxhZywgbW9kZW1fY3RsWzRdOwotCXVuc2lnbmVkIGludCBiYXVkOwotCXVuc2lnbmVkIGludCBiaXRzOwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwgJmJhdWQsIDIpOwotCS8qIENvbnZlcnQgdG8gYmF1ZHJhdGUgKi8KLQlpZiAoYmF1ZCkKLQkJYmF1ZCA9IEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQ7Ci0KLQlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7Ci0KLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwotCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCi0JY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQljZmxhZyAmPSB+Q1NJWkU7Ci0Jc3dpdGNoIChiaXRzICYgQklUU19EQVRBX01BU0spIHsKLQljYXNlIEJJVFNfREFUQV81OgotCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNSIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1M1OwotCQlicmVhazsKLQljYXNlIEJJVFNfREFUQV82OgotCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1M2OwotCQlicmVhazsKLQljYXNlIEJJVFNfREFUQV83OgotCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNyIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1M3OwotCQlicmVhazsKLQljYXNlIEJJVFNfREFUQV84OgotCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1M4OwotCQlicmVhazsKLQljYXNlIEJJVFNfREFUQV85OgotCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSAobm90IHN1cHBvcnRlZCwgdXNpbmcgOCBkYXRhIGJpdHMpIiwKLQkJCQkJCQkJX19mdW5jX18pOwotCQljZmxhZyB8PSBDUzg7Ci0JCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOwotCQliaXRzIHw9IEJJVFNfREFUQV84OwotCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gVW5rbm93biBudW1iZXIgb2YgZGF0YSBiaXRzLCB1c2luZyA4IiwgX19mdW5jX18pOwotCQljZmxhZyB8PSBDUzg7Ci0JCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOwotCQliaXRzIHw9IEJJVFNfREFUQV84OwotCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGJpdHMgJiBCSVRTX1BBUklUWV9NQVNLKSB7Ci0JY2FzZSBCSVRTX1BBUklUWV9OT05FOgotCQlkYmcoIiVzIC0gcGFyaXR5ID0gTk9ORSIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgJj0gflBBUkVOQjsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX1BBUklUWV9PREQ6Ci0JCWRiZygiJXMgLSBwYXJpdHkgPSBPREQiLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnIHw9IChQQVJFTkJ8UEFST0REKTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX1BBUklUWV9FVkVOOgotCQlkYmcoIiVzIC0gcGFyaXR5ID0gRVZFTiIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgJj0gflBBUk9ERDsKLQkJY2ZsYWcgfD0gUEFSRU5COwotCQlicmVhazsKLQljYXNlIEJJVFNfUEFSSVRZX01BUks6Ci0JCWRiZygiJXMgLSBwYXJpdHkgPSBNQVJLIChub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmcgcGFyaXR5KSIsCi0JCQkJX19mdW5jX18pOwotCQljZmxhZyAmPSB+UEFSRU5COwotCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOwotCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQlicmVhazsKLQljYXNlIEJJVFNfUEFSSVRZX1NQQUNFOgotCQlkYmcoIiVzIC0gcGFyaXR5ID0gU1BBQ0UgKG5vdCBzdXBwb3J0ZWQsIGRpc2FibGluZyBwYXJpdHkpIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWNmbGFnICY9IH5QQVJFTkI7Ci0JCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7Ci0JCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBVbmtub3duIHBhcml0eSBtb2RlLCBkaXNhYmxpbmcgcGFyaXR5IiwgX19mdW5jX18pOwotCQljZmxhZyAmPSB+UEFSRU5COwotCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOwotCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQlicmVhazsKLQl9Ci0KLQljZmxhZyAmPSB+Q1NUT1BCOwotCXN3aXRjaCAoYml0cyAmIEJJVFNfU1RPUF9NQVNLKSB7Ci0JY2FzZSBCSVRTX1NUT1BfMToKLQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7Ci0JCWJyZWFrOwotCWNhc2UgQklUU19TVE9QXzFfNToKLQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEuNSAobm90IHN1cHBvcnRlZCwgdXNpbmcgMSBzdG9wIGJpdCkiLAotCQkJCQkJCQlfX2Z1bmNfXyk7Ci0JCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOwotCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQlicmVhazsKLQljYXNlIEJJVFNfU1RPUF8yOgotCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1NUT1BCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gVW5rbm93biBudW1iZXIgb2Ygc3RvcCBiaXRzLCB1c2luZyAxIHN0b3AgYml0IiwKLQkJCQkJCQkJX19mdW5jX18pOwotCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYnJlYWs7Ci0JfQotCi0JY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX01PREVNQ1RMLCBtb2RlbV9jdGwsIDE2KTsKLQlpZiAobW9kZW1fY3RsWzBdICYgMHgwMDA4KSB7Ci0JCWRiZygiJXMgLSBmbG93IGNvbnRyb2wgPSBDUlRTQ1RTIiwgX19mdW5jX18pOwotCQljZmxhZyB8PSBDUlRTQ1RTOwotCX0gZWxzZSB7Ci0JCWRiZygiJXMgLSBmbG93IGNvbnRyb2wgPSBOT05FIiwgX19mdW5jX18pOwotCQljZmxhZyAmPSB+Q1JUU0NUUzsKLQl9Ci0KLQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKLX0KLQotc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCi17Ci0JdW5zaWduZWQgaW50IGNmbGFnLCBvbGRfY2ZsYWc7Ci0JdW5zaWduZWQgaW50IGJhdWQgPSAwLCBiaXRzOwotCXVuc2lnbmVkIGludCBtb2RlbV9jdGxbNF07Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JaWYgKCF0dHkpCi0JCXJldHVybjsKLQotCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOwotCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwotCi0JLyogSWYgdGhlIGJhdWQgcmF0ZSBpcyB0byBiZSB1cGRhdGVkKi8KLQlpZiAoYmF1ZCAhPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpKSB7Ci0JCXN3aXRjaCAoYmF1ZCkgewotCQljYXNlIDA6Ci0JCWNhc2UgNjAwOgotCQljYXNlIDEyMDA6Ci0JCWNhc2UgMTgwMDoKLQkJY2FzZSAyNDAwOgotCQljYXNlIDQ4MDA6Ci0JCWNhc2UgNzIwMDoKLQkJY2FzZSA5NjAwOgotCQljYXNlIDE0NDAwOgotCQljYXNlIDE5MjAwOgotCQljYXNlIDI4ODAwOgotCQljYXNlIDM4NDAwOgotCQljYXNlIDU1ODU0OgotCQljYXNlIDU3NjAwOgotCQljYXNlIDExNTIwMDoKLQkJY2FzZSAxMjcxMTc6Ci0JCWNhc2UgMjMwNDAwOgotCQljYXNlIDQ2MDgwMDoKLQkJY2FzZSA5MjE2MDA6Ci0JCWNhc2UgMzY4NjQwMDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYmF1ZCA9IDk2MDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChiYXVkKSB7Ci0JCQlkYmcoIiVzIC0gU2V0dGluZyBiYXVkIHJhdGUgdG8gJWQgYmF1ZCIsIF9fZnVuY19fLAotCQkJCQliYXVkKTsKLQkJCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAotCQkJCQkJKEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQpKSkgewotCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkJhdWQgcmF0ZSByZXF1ZXN0ZWQgbm90ICIKLQkJCQkJCSJzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKLQkJCQliYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBSZXBvcnQgYmFjayB0aGUgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLwotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7Ci0KLQkvKiBJZiB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyBpcyB0byBiZSB1cGRhdGVkICovCi0JaWYgKChjZmxhZyAmIENTSVpFKSAhPSAob2xkX2NmbGFnICYgQ1NJWkUpKSB7Ci0JCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOwotCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKLQkJY2FzZSBDUzU6Ci0JCQliaXRzIHw9IEJJVFNfREFUQV81OwotCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJY2FzZSBDUzY6Ci0JCQliaXRzIHw9IEJJVFNfREFUQV82OwotCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJY2FzZSBDUzc6Ci0JCQliaXRzIHw9IEJJVFNfREFUQV83OwotCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJY2FzZSBDUzg6Ci0JCQliaXRzIHw9IEJJVFNfREFUQV84OwotCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJLypjYXNlIENTOToKLQkJCWJpdHMgfD0gQklUU19EQVRBXzk7Ci0JCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSIsIF9fZnVuY19fKTsKLQkJCWJyZWFrOyovCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKLQkJCQkJInN1cHBvcnQgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVlc3RlZCwiCi0JCQkJCSIgdXNpbmcgOCBiaXQgbW9kZVxuIik7Ci0JCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKLQkJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKLQl9Ci0KLQlpZiAoKGNmbGFnICYgKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnICYgKFBBUkVOQnxQQVJPREQpKSkgewotCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOwotCQlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKLQkJCWlmIChjZmxhZyAmIFBBUk9ERCkgewotCQkJCWJpdHMgfD0gQklUU19QQVJJVFlfT0REOwotCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBPREQiLCBfX2Z1bmNfXyk7Ci0JCQl9IGVsc2UgewotCQkJCWJpdHMgfD0gQklUU19QQVJJVFlfRVZFTjsKLQkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gRVZFTiIsIF9fZnVuY19fKTsKLQkJCX0KLQkJfQotCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlBhcml0eSBtb2RlIG5vdCBzdXBwb3J0ZWQgIgotCQkJCQkiYnkgZGV2aWNlXG4iKTsKLQl9Ci0KLQlpZiAoKGNmbGFnICYgQ1NUT1BCKSAhPSAob2xkX2NmbGFnICYgQ1NUT1BCKSkgewotCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKLQkJaWYgKGNmbGFnICYgQ1NUT1BCKSB7Ci0JCQliaXRzIHw9IEJJVFNfU1RPUF8yOwotCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7Ci0JCX0gZWxzZSB7Ci0JCQliaXRzIHw9IEJJVFNfU1RPUF8xOwotCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7Ci0JCX0KLQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJOdW1iZXIgb2Ygc3RvcCBiaXRzIHJlcXVlc3RlZCAiCi0JCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7Ci0JfQotCi0JaWYgKChjZmxhZyAmIENSVFNDVFMpICE9IChvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkgewotCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfTU9ERU1DVEwsIG1vZGVtX2N0bCwgMTYpOwotCQlkYmcoIiVzIC0gcmVhZCBtb2RlbSBjb250cm9scyA9IDB4JS40eCAweCUuNHggMHglLjR4IDB4JS40eCIsCi0JCQkJX19mdW5jX18sIG1vZGVtX2N0bFswXSwgbW9kZW1fY3RsWzFdLAotCQkJCW1vZGVtX2N0bFsyXSwgbW9kZW1fY3RsWzNdKTsKLQotCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCQltb2RlbV9jdGxbMF0gJj0gfjB4N0I7Ci0JCQltb2RlbV9jdGxbMF0gfD0gMHgwOTsKLQkJCW1vZGVtX2N0bFsxXSA9IDB4ODA7Ci0JCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gQ1JUU0NUUyIsIF9fZnVuY19fKTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVtX2N0bFswXSAmPSB+MHg3QjsKLQkJCW1vZGVtX2N0bFswXSB8PSAweDAxOwotCQkJbW9kZW1fY3RsWzFdIHw9IDB4NDA7Ci0JCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gTk9ORSIsIF9fZnVuY19fKTsKLQkJfQotCi0JCWRiZygiJXMgLSB3cml0ZSBtb2RlbSBjb250cm9scyA9IDB4JS40eCAweCUuNHggMHglLjR4IDB4JS40eCIsCi0JCQkJX19mdW5jX18sIG1vZGVtX2N0bFswXSwgbW9kZW1fY3RsWzFdLAotCQkJCW1vZGVtX2N0bFsyXSwgbW9kZW1fY3RsWzNdKTsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX01PREVNQ1RMLCBtb2RlbV9jdGwsIDE2KTsKLQl9Ci0KLX0KLQotc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IGNvbnRyb2wgPSAwOwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmIChzZXQgJiBUSU9DTV9SVFMpIHsKLQkJY29udHJvbCB8PSBDT05UUk9MX1JUUzsKLQkJY29udHJvbCB8PSBDT05UUk9MX1dSSVRFX1JUUzsKLQl9Ci0JaWYgKHNldCAmIFRJT0NNX0RUUikgewotCQljb250cm9sIHw9IENPTlRST0xfRFRSOwotCQljb250cm9sIHw9IENPTlRST0xfV1JJVEVfRFRSOwotCX0KLQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKLQkJY29udHJvbCAmPSB+Q09OVFJPTF9SVFM7Ci0JCWNvbnRyb2wgfD0gQ09OVFJPTF9XUklURV9SVFM7Ci0JfQotCWlmIChjbGVhciAmIFRJT0NNX0RUUikgewotCQljb250cm9sICY9IH5DT05UUk9MX0RUUjsKLQkJY29udHJvbCB8PSBDT05UUk9MX1dSSVRFX0RUUjsKLQl9Ci0KLQlkYmcoIiVzIC0gY29udHJvbCA9IDB4JS40eCIsIF9fZnVuY19fLCBjb250cm9sKTsKLQotCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQ09OVFJPTCwgJmNvbnRyb2wsIDIpOwotCi19Ci0KLXN0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgY29udHJvbDsKLQlpbnQgcmVzdWx0OwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9DT05UUk9MLCAmY29udHJvbCwgMSk7Ci0KLQlyZXN1bHQgPSAoKGNvbnRyb2wgJiBDT05UUk9MX0RUUikgPyBUSU9DTV9EVFIgOiAwKQotCQl8KChjb250cm9sICYgQ09OVFJPTF9SVFMpID8gVElPQ01fUlRTIDogMCkKLQkJfCgoY29udHJvbCAmIENPTlRST0xfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCi0JCXwoKGNvbnRyb2wgJiBDT05UUk9MX0RTUikgPyBUSU9DTV9EU1IgOiAwKQotCQl8KChjb250cm9sICYgQ09OVFJPTF9SSU5HKT8gVElPQ01fUkkgIDogMCkKLQkJfCgoY29udHJvbCAmIENPTlRST0xfRENEKSA/IFRJT0NNX0NEICA6IDApOwotCi0JZGJnKCIlcyAtIGNvbnRyb2wgPSAweCUuMngiLCBfX2Z1bmNfXywgY29udHJvbCk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IHN0YXRlOwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlpZiAoYnJlYWtfc3RhdGUgPT0gMCkKLQkJc3RhdGUgPSBCUkVBS19PRkY7Ci0JZWxzZQotCQlzdGF0ZSA9IEJSRUFLX09OOwotCWRiZygiJXMgLSB0dXJuaW5nIGJyZWFrICVzIiwgX19mdW5jX18sCi0JCQlzdGF0ZSA9PSBCUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOwotCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CUkVBSywgJnN0YXRlLCAyKTsKLX0KLQotc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQotewotCS8qIENQMjEwMSBidWZmZXJzIGJlaGF2ZSBzdHJhbmdlbHkgdW5sZXNzIGRldmljZSBpcyByZXNldCAqLwotCXVzYl9yZXNldF9kZXZpY2Uoc2VyaWFsLT5kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjcDIxMDFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKLXsKLQlpbnQgaTsKLQotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0KLQkvKiBTdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCi0JZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpCi0JCWNwMjEwMV9jbGVhbnVwKHNlcmlhbC0+cG9ydFtpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNwMjEwMV9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmNwMjEwMV9kZXZpY2UpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7IC8qIEZhaWxlZCB0byByZWdpc3RlciAqLwotCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZjcDIxMDFfZHJpdmVyKTsKLQlpZiAocmV0dmFsKSB7Ci0JCS8qIEZhaWxlZCB0byByZWdpc3RlciAqLwotCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmNwMjEwMV9kZXZpY2UpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCS8qIFN1Y2Nlc3MgKi8KLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCi0JICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY3AyMTAxX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmY3AyMTAxX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKLX0KLQotbW9kdWxlX2luaXQoY3AyMTAxX2luaXQpOwotbW9kdWxlX2V4aXQoY3AyMTAxX2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ1MTMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0wLDAgKzEsODIyIEBACisvKgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMgQ1AyMTAxL0NQMjEwMiBVU0IgdG8gUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IENyYWlnIFNoZWxsZXkgKGNyYWlnQG1pY3JvdHJvbi5vcmcudWspCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTdXBwb3J0IHRvIHNldCBmbG93IGNvbnRyb2wgbGluZSBsZXZlbHMgdXNpbmcgVElPQ01HRVQgYW5kIFRJT0NNU0VUCisgKiB0aGFua3MgdG8gS2FybCBIaXJhbW90byBrYXJsQGhpcmFtb3RvLm9yZy4gUlRTQ1RTIGhhcmR3YXJlIGZsb3cKKyAqIGNvbnRyb2wgdGhhbmtzIHRvIE11bmlyIE5hc3NhciBuYXNzYXJtdUByZWFsLXRpbWUuY29tCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDgiCisjZGVmaW5lIERSSVZFUl9ERVNDICJTaWxpY29uIExhYnMgQ1AyMTAxL0NQMjEwMiBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIiCisKKy8qCisgKiBGdW5jdGlvbiBQcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAorCQkJCQkJCXN0cnVjdCBmaWxlICopOworc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCisJCQkJCQkJc3RydWN0IGZpbGUqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqLAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBpbnQgKmNmbGFncCwgdW5zaWduZWQgaW50ICpiYXVkcCk7CitzdGF0aWMgdm9pZCBjcDIxMDFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAorCQkJCQkJCXN0cnVjdCBrdGVybWlvcyopOworc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqLAorCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitzdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICosCisJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50KTsKK3N0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKik7CisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDA2NkEpIH0sIC8qIEFLVEFLT00gQUNFLTEwMDEgY2FibGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweEUwMDApIH0sIC8qIFBpcmVsbGkgQnJvYWRiYW5kIFMucC5BLCBEUC1MMTAgU0lQL0dTTSBNb2JpbGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOGU2LCAweDU1MDEpIH0sIC8qIEdlbWFsdG8gUHJveC1QVS9DVSBjb250YWN0bGVzcyBzbWFydGNhcmQgcmVhZGVyICovCisJeyBVU0JfREVWSUNFKDB4MEZDRiwgMHgxMDAzKSB9LCAvKiBEeW5hc3RyZWFtIEFOVCBkZXZlbG9wbWVudCBib2FyZCAqLworCXsgVVNCX0RFVklDRSgweDBGQ0YsIDB4MTAwNCkgfSwgLyogRHluYXN0cmVhbSBBTlQyVVNCICovCisJeyBVU0JfREVWSUNFKDB4MEZDRiwgMHgxMDA2KSB9LCAvKiBEeW5hc3RyZWFtIEFOVCBkZXZlbG9wbWVudCBib2FyZCAqLworCXsgVVNCX0RFVklDRSgweDEwQTYsIDB4QUEyNikgfSwgLyogS25vY2stb2ZmIERDVS0xMSBjYWJsZSAqLworCXsgVVNCX0RFVklDRSgweDEwQUIsIDB4MTBDNSkgfSwgLyogU2llbWVucyBNQzYwIENhYmxlICovCisJeyBVU0JfREVWSUNFKDB4MTBCNSwgMHhBQzcwKSB9LCAvKiBOb2tpYSBDQS00MiBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwMEEpIH0sIC8qIFNQT1JUaWRlbnQgQlNNNy1ELVVTQiBtYWluIHN0YXRpb24gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwM0IpIH0sIC8qIFBvbG9sdSBVU0Itc2VyaWFsIGNvbnZlcnRlciAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODA1MykgfSwgLyogRW5mb3JhIEVERzEyMjggKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwNTQpIH0sIC8qIEVuZm9yYSBHU00yMjI4ICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDY2KSB9LCAvKiBBcmd1c3NvZnQgSW4tU3lzdGVtIFByb2dyYW1tZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwN0EpIH0sIC8qIENydW1iMTI4IGJvYXJkICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MENBKSB9LCAvKiBEZWdyZWUgQ29udHJvbHMgSW5jICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MEREKSB9LCAvKiBUcmFjaWVudCBSRklEICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MEY2KSB9LCAvKiBTdXVudG8gc3BvcnRzIGluc3RydW1lbnQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxMTUpIH0sIC8qIEFyeWdvbiBORkMvTWlmYXJlIFJlYWRlciAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODEzRCkgfSwgLyogQnVybnNpZGUgVGVsZWNvbSBEZXNrbW9iaWxlICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTRBKSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIFJJR2JsYXN0ZXIgUCZQICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTRCKSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIFJJR3RhbGsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNUUpIH0sIC8qIEhlbGljb21tIElQLUxpbmsgMTIyMC1EVk0gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxOUYpIH0sIC8qIE1KUyBVU0IgVG9zbGluayBTd2l0Y2hlciAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFBNikgfSwgLyogVGhpbmtPcHRpY3MgV2F2SXQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQUMpIH0sIC8qIE1TRCBEYXNoIEhhd2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQzgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEJhYnktSlRBRyAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFFMikgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgQmFieS1MSU4gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxRTcpIH0sIC8qIEFlcm9jb21tIFJhZGlvICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjE4KSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBIQVJQLTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyMkIpIH0sIC8qIE1vZGVtIEVER0UoR1NNKSBDb21hbmRlciAyICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjZCKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiwgRmFzdHRyYXggR1BTIGRlbW9zdHJhdGlvbiBtb2R1bGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMGM0LCAweDgyOTMpIH0sIC8qIFRlbGVnZXN5cyBFVFJYMlVTQiAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODM0MSkgfSwgLyogU2llbWVucyBNQzM1UFUgR1BSUyBNb2RlbSAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNBOCkgfSwgLyogQW1iZXIgV2lyZWxlc3MgQU1CMjU2MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQ2RSkgfSwgLyogQkVJIFVTQiBTZW5zb3IgSW50ZXJmYWNlIChWQ1ApICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAxKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0JzY29wZTUwICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAyKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0J3YXZlMTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEYwMDMpIH0sIC8qIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIFVTQnB1bHNlMTAwICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDA0KSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0Jjb3VudDUwICovCisJeyBVU0JfREVWSUNFKDB4MTBDNSwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgTW9iaURhdGEgR1BSUyBVU0IgTW9kZW0gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM0FELCAweDk5OTkpIH0sIC8qIEJhbHRlY2ggY2FyZCByZWFkZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjZBLCAweDAzMDMpIH0sIC8qIENsaXBzYWwgNTUwMFBDVSBDLUJ1cyBVU0IgaW50ZXJmYWNlICovCisJeyBVU0JfREVWSUNFKDB4MTZENiwgMHgwMDAxKSB9LCAvKiBKYWJsb3Ryb24gc2VyaWFsIGludGVyZmFjZSAqLworCXsgVVNCX0RFVklDRSgweDE4RUYsIDB4RTAwRikgfSwgLyogRUxWIFVTQi1JMkMtSW50ZXJmYWNlICovCisJeyB9IC8qIFRlcm1pbmF0aW5nIEVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3AyMTAxX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiY3AyMTAxIiwKKwkucHJvYmUJCT0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZAk9IAkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjcDIxMDFfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9IAkiY3AyMTAxIiwKKwl9LAorCS51c2JfZHJpdmVyCQk9ICZjcDIxMDFfZHJpdmVyLAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkubnVtX3BvcnRzCQk9IDEsCisJLm9wZW4JCQk9IGNwMjEwMV9vcGVuLAorCS5jbG9zZQkJCT0gY3AyMTAxX2Nsb3NlLAorCS5icmVha19jdGwJCT0gY3AyMTAxX2JyZWFrX2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gY3AyMTAxX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCAJCT0gY3AyMTAxX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBjcDIxMDFfdGlvY21zZXQsCisJLmF0dGFjaAkJCT0gY3AyMTAxX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGNwMjEwMV9zaHV0ZG93biwKK307CisKKy8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCisjZGVmaW5lIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UJMHg0MQorI2RlZmluZSBSRVFUWVBFX0RFVklDRV9UT19IT1NUCTB4YzEKKworLyogQ29uZmlnIFNFVCByZXF1ZXN0cy4gVG8gR0VULCBhZGQgMSB0byB0aGUgcmVxdWVzdCBudW1iZXIgKi8KKyNkZWZpbmUgQ1AyMTAxX1VBUlQgCQkweDAwCS8qIEVuYWJsZSAvIERpc2FibGUgKi8KKyNkZWZpbmUgQ1AyMTAxX0JBVURSQVRFCQkweDAxCS8qIChCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkcmF0ZSkgKi8KKyNkZWZpbmUgQ1AyMTAxX0JJVFMJCTB4MDMJLyogMHgoMCkoZGF0YWJpdHMpKHBhcml0eSkoc3RvcGJpdHMpICovCisjZGVmaW5lIENQMjEwMV9CUkVBSwkJMHgwNQkvKiBPbiAvIE9mZiAqLworI2RlZmluZSBDUDIxMDFfQ09OVFJPTAkJMHgwNwkvKiBGbG93IGNvbnRyb2wgbGluZSBzdGF0ZXMgKi8KKyNkZWZpbmUgQ1AyMTAxX01PREVNQ1RMCQkweDEzCS8qIE1vZGVtIGNvbnRyb2xzICovCisjZGVmaW5lIENQMjEwMV9DT05GSUdfNgkJMHgxOQkvKiA2IGJ5dGVzIG9mIGNvbmZpZyBkYXRhID8/PyAqLworCisvKiBDUDIxMDFfVUFSVCAqLworI2RlZmluZSBVQVJUX0VOQUJMRQkJMHgwMDAxCisjZGVmaW5lIFVBUlRfRElTQUJMRQkJMHgwMDAwCisKKy8qIENQMjEwMV9CQVVEUkFURSAqLworI2RlZmluZSBCQVVEX1JBVEVfR0VOX0ZSRVEJMHgzODQwMDAKKworLyogQ1AyMTAxX0JJVFMgKi8KKyNkZWZpbmUgQklUU19EQVRBX01BU0sJCTBYMGYwMAorI2RlZmluZSBCSVRTX0RBVEFfNQkJMFgwNTAwCisjZGVmaW5lIEJJVFNfREFUQV82CQkwWDA2MDAKKyNkZWZpbmUgQklUU19EQVRBXzcJCTBYMDcwMAorI2RlZmluZSBCSVRTX0RBVEFfOAkJMFgwODAwCisjZGVmaW5lIEJJVFNfREFUQV85CQkwWDA5MDAKKworI2RlZmluZSBCSVRTX1BBUklUWV9NQVNLCTB4MDBmMAorI2RlZmluZSBCSVRTX1BBUklUWV9OT05FCTB4MDAwMAorI2RlZmluZSBCSVRTX1BBUklUWV9PREQJCTB4MDAxMAorI2RlZmluZSBCSVRTX1BBUklUWV9FVkVOCTB4MDAyMAorI2RlZmluZSBCSVRTX1BBUklUWV9NQVJLCTB4MDAzMAorI2RlZmluZSBCSVRTX1BBUklUWV9TUEFDRQkweDAwNDAKKworI2RlZmluZSBCSVRTX1NUT1BfTUFTSwkJMHgwMDBmCisjZGVmaW5lIEJJVFNfU1RPUF8xCQkweDAwMDAKKyNkZWZpbmUgQklUU19TVE9QXzFfNQkJMHgwMDAxCisjZGVmaW5lIEJJVFNfU1RPUF8yCQkweDAwMDIKKworLyogQ1AyMTAxX0JSRUFLICovCisjZGVmaW5lIEJSRUFLX09OCQkweDAwMDAKKyNkZWZpbmUgQlJFQUtfT0ZGCQkweDAwMDEKKworLyogQ1AyMTAxX0NPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9EVFIJCTB4MDAwMQorI2RlZmluZSBDT05UUk9MX1JUUwkJMHgwMDAyCisjZGVmaW5lIENPTlRST0xfQ1RTCQkweDAwMTAKKyNkZWZpbmUgQ09OVFJPTF9EU1IJCTB4MDAyMAorI2RlZmluZSBDT05UUk9MX1JJTkcJCTB4MDA0MAorI2RlZmluZSBDT05UUk9MX0RDRAkJMHgwMDgwCisjZGVmaW5lIENPTlRST0xfV1JJVEVfRFRSCTB4MDEwMAorI2RlZmluZSBDT05UUk9MX1dSSVRFX1JUUwkweDAyMDAKKworLyoKKyAqIGNwMjEwMV9nZXRfY29uZmlnCisgKiBSZWFkcyBmcm9tIHRoZSBDUDIxMDEgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqICdzaXplJyBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMuCisgKiAnZGF0YScgaXMgYSBwb2ludGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBhcnJheSBvZiBpbnRlZ2VycyBsYXJnZQorICogZW5vdWdoIHRvIGhvbGQgJ3NpemUnIGJ5dGVzICh3aXRoIDQgYnl0ZXMgdG8gZWFjaCBpbnRlZ2VyKQorICovCitzdGF0aWMgaW50IGNwMjEwMV9nZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHU4IHJlcXVlc3QsCisJCXVuc2lnbmVkIGludCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlfX2xlMzIgKmJ1ZjsKKwlpbnQgcmVzdWx0LCBpLCBsZW5ndGg7CisKKwkvKiBOdW1iZXIgb2YgaW50ZWdlcnMgcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgYXJyYXkgKi8KKwlsZW5ndGggPSAoKChzaXplIC0gMSkgfCAzKSArIDEpLzQ7CisKKwlidWYgPSBrY2FsbG9jKGxlbmd0aCwgc2l6ZW9mKF9fbGUzMiksIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogRm9yIGdldCByZXF1ZXN0cywgdGhlIHJlcXVlc3QgbnVtYmVyIG11c3QgYmUgaW5jcmVtZW50ZWQgKi8KKwlyZXF1ZXN0Kys7CisKKwkvKiBJc3N1ZSB0aGUgcmVxdWVzdCwgYXR0ZW1wdGluZyB0byByZWFkICdzaXplJyBieXRlcyAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQlyZXF1ZXN0LCBSRVFUWVBFX0RFVklDRV9UT19IT1NULCAweDAwMDAsCisJCQkJMCwgYnVmLCBzaXplLCAzMDApOworCisJLyogQ29udmVydCBkYXRhIGludG8gYW4gYXJyYXkgb2YgaW50ZWdlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisJCWRhdGFbaV0gPSBsZTMyX3RvX2NwdShidWZbaV0pOworCisJa2ZyZWUoYnVmKTsKKworCWlmIChyZXN1bHQgIT0gc2l6ZSkgeworCQlkYmcoIiVzIC0gVW5hYmxlIHRvIHNlbmQgY29uZmlnIHJlcXVlc3QsICIKKwkJCQkicmVxdWVzdD0weCV4IHNpemU9JWQgcmVzdWx0PSVkXG4iLAorCQkJCV9fZnVuY19fLCByZXF1ZXN0LCBzaXplLCByZXN1bHQpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNwMjEwMV9zZXRfY29uZmlnCisgKiBXcml0ZXMgdG8gdGhlIENQMjEwMSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogVmFsdWVzIGxlc3MgdGhhbiAxNiBiaXRzIHdpZGUgYXJlIHNlbnQgZGlyZWN0bHkKKyAqICdzaXplJyBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMuCisgKi8KK3N0YXRpYyBpbnQgY3AyMTAxX3NldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTggcmVxdWVzdCwKKwkJdW5zaWduZWQgaW50ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCV9fbGUzMiAqYnVmOworCWludCByZXN1bHQsIGksIGxlbmd0aDsKKworCS8qIE51bWJlciBvZiBpbnRlZ2VycyByZXF1aXJlZCB0byBjb250YWluIHRoZSBhcnJheSAqLworCWxlbmd0aCA9ICgoKHNpemUgLSAxKSB8IDMpICsgMSkvNDsKKworCWJ1ZiA9IGttYWxsb2MobGVuZ3RoICogc2l6ZW9mKF9fbGUzMiksIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBcnJheSBvZiBpbnRlZ2VycyBpbnRvIGJ5dGVzICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorCQlidWZbaV0gPSBjcHVfdG9fbGUzMihkYXRhW2ldKTsKKworCWlmIChzaXplID4gMikgeworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCAweDAwMDAsCisJCQkJMCwgYnVmLCBzaXplLCAzMDApOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCXJlcXVlc3QsIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UsIGRhdGFbMF0sCisJCQkJMCwgTlVMTCwgMCwgMzAwKTsKKwl9CisKKwlrZnJlZShidWYpOworCisJaWYgKChzaXplID4gMiAmJiByZXN1bHQgIT0gc2l6ZSkgfHwgcmVzdWx0IDwgMCkgeworCQlkYmcoIiVzIC0gVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCwgIgorCQkJCSJyZXF1ZXN0PTB4JXggc2l6ZT0lZCByZXN1bHQ9JWRcbiIsCisJCQkJX19mdW5jX18sIHJlcXVlc3QsIHNpemUsIHJlc3VsdCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCS8qIFNpbmdsZSBkYXRhIHZhbHVlICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCXJlcXVlc3QsIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UsIGRhdGFbMF0sCisJCQkwLCBOVUxMLCAwLCAzMDApOworCXJldHVybiAwOworfQorCisvKgorICogY3AyMTAxX3NldF9jb25maWdfc2luZ2xlCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY2FsbGluZyBjcDIxMDFfc2V0X2NvbmZpZyBvbiBzaW5nbGUgZGF0YSB2YWx1ZXMKKyAqIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGludGVnZXIgcG9pbnRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJdTggcmVxdWVzdCwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIHJlcXVlc3QsICZkYXRhLCAyKTsKK30KKworLyoKKyAqIGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZQorICogUXVhbnRpc2VzIHRoZSBiYXVkIHJhdGUgYXMgcGVyIEFOMjA1IFRhYmxlIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodW5zaWduZWQgaW50IGJhdWQpIHsKKwlpZiAgICAgIChiYXVkIDw9IDU2KSAgICAgICBiYXVkID0gMDsKKwllbHNlIGlmIChiYXVkIDw9IDMwMCkgICAgICBiYXVkID0gMzAwOworCWVsc2UgaWYgKGJhdWQgPD0gNjAwKSAgICAgIGJhdWQgPSA2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjAwKSAgICAgYmF1ZCA9IDEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxODAwKSAgICAgYmF1ZCA9IDE4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDAwKSAgICAgYmF1ZCA9IDI0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0MDAwKSAgICAgYmF1ZCA9IDQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0ODAzKSAgICAgYmF1ZCA9IDQ4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3MjA3KSAgICAgYmF1ZCA9IDcyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA5NjEyKSAgICAgYmF1ZCA9IDk2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDQyOCkgICAgYmF1ZCA9IDE0NDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTYwNjIpICAgIGJhdWQgPSAxNjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE5MjUwKSAgICBiYXVkID0gMTkyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyODkxMikgICAgYmF1ZCA9IDI4ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMzg2MDEpICAgIGJhdWQgPSAzODQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDUxNTU4KSAgICBiYXVkID0gNTEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjI4MCkgICAgYmF1ZCA9IDU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTgwNTMpICAgIGJhdWQgPSA1NzYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY0MTExKSAgICBiYXVkID0gNjQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3NzYwOCkgICAgYmF1ZCA9IDc2ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTE3MDI4KSAgIGJhdWQgPSAxMTUyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjkzNDcpICAgYmF1ZCA9IDEyODAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE1Njg2OCkgICBiYXVkID0gMTUzNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjM3ODMyKSAgIGJhdWQgPSAyMzA0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNTQyMzQpICAgYmF1ZCA9IDI1MDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI3MzA2NikgICBiYXVkID0gMjU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDkxNTIwKSAgIGJhdWQgPSA0NjA4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjcxMzgpICAgYmF1ZCA9IDUwMDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY3MDI1NCkgICBiYXVkID0gNTc2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTA1MzI1NykgIGJhdWQgPSA5MjE2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDc0NTYwKSAgYmF1ZCA9IDEyMjg4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDU3NjAwKSAgYmF1ZCA9IDE4NDMyMDA7CisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgYmF1ZCA9IDM2ODY0MDA7CisJcmV0dXJuIGJhdWQ7Cit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfVUFSVCwgVUFSVF9FTkFCTEUpKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIGVuYWJsZSBVQVJUXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaywKKwkJCXBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgIgorCQkJCSJlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLworCWNwMjEwMV9nZXRfdGVybWlvcyh0dHksIHBvcnQpOworCisJLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLworCWNwMjEwMV90aW9jbXNldF9wb3J0KHR0eSA/IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGEKKwkJCTogcG9ydCwKKwkJTlVMTCwgVElPQ01fRFRSIHwgVElPQ01fUlRTLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwkJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCWlmIChzZXJpYWwtPm51bV9idWxrX2luKQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwlkYmcoIiVzIC0gc2h1dHRpbmcgZG93biB1cmJzIiwgX19mdW5jX18pOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisKKwltdXRleF9sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOworCWlmICghcG9ydC0+c2VyaWFsLT5kaXNjb25uZWN0ZWQpCisJCWNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfVUFSVCwgVUFSVF9ESVNBQkxFKTsKKwltdXRleF91bmxvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7Cit9CisKKy8qCisgKiBjcDIxMDFfZ2V0X3Rlcm1pb3MKKyAqIFJlYWRzIHRoZSBiYXVkIHJhdGUsIGRhdGEgYml0cywgcGFyaXR5LCBzdG9wIGJpdHMgYW5kIGZsb3cgY29udHJvbCBtb2RlCisgKiBmcm9tIHRoZSBkZXZpY2UsIGNvcnJlY3RzIGFueSB1bnN1cHBvcnRlZCB2YWx1ZXMsIGFuZCBjb25maWd1cmVzIHRoZQorICogdGVybWlvcyBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhlIGRldmljZQorICovCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCBiYXVkOworCisJaWYgKHR0eSkgeworCQljcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydCh0dHktPmRyaXZlcl9kYXRhLAorCQkJJnR0eS0+dGVybWlvcy0+Y19jZmxhZywgJmJhdWQpOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOworCX0KKworCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJCWNmbGFnID0gMDsKKwkJY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQocG9ydCwgJmNmbGFnLCAmYmF1ZCk7CisJfQorfQorCisvKgorICogY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQKKyAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIGNwMjEwMV9nZXRfdGVybWlvcyB3aGljaCBhbHdheXMgdXNlcyBhICZ1c2Jfc2VyaWFsX3BvcnQuCisgKi8KK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApCit7CisJdW5zaWduZWQgaW50IGNmbGFnLCBtb2RlbV9jdGxbNF07CisJdW5zaWduZWQgaW50IGJhdWQ7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JBVURSQVRFLCAmYmF1ZCwgMik7CisJLyogQ29udmVydCB0byBiYXVkcmF0ZSAqLworCWlmIChiYXVkKQorCQliYXVkID0gY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlKChCQVVEX1JBVEVfR0VOX0ZSRVEgKyBiYXVkLzIpLyBiYXVkKTsKKworCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fZnVuY19fLCBiYXVkKTsKKwkqYmF1ZHAgPSBiYXVkOworCisJY2ZsYWcgPSAqY2ZsYWdwOworCisJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwljZmxhZyAmPSB+Q1NJWkU7CisJc3dpdGNoIChiaXRzICYgQklUU19EQVRBX01BU0spIHsKKwljYXNlIEJJVFNfREFUQV81OgorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNSIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1M1OworCQlicmVhazsKKwljYXNlIEJJVFNfREFUQV82OgorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1M2OworCQlicmVhazsKKwljYXNlIEJJVFNfREFUQV83OgorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNyIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1M3OworCQlicmVhazsKKwljYXNlIEJJVFNfREFUQV84OgorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1M4OworCQlicmVhazsKKwljYXNlIEJJVFNfREFUQV85OgorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSAobm90IHN1cHBvcnRlZCwgdXNpbmcgOCBkYXRhIGJpdHMpIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQljZmxhZyB8PSBDUzg7CisJCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOworCQliaXRzIHw9IEJJVFNfREFUQV84OworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gVW5rbm93biBudW1iZXIgb2YgZGF0YSBiaXRzLCB1c2luZyA4IiwgX19mdW5jX18pOworCQljZmxhZyB8PSBDUzg7CisJCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOworCQliaXRzIHw9IEJJVFNfREFUQV84OworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGJpdHMgJiBCSVRTX1BBUklUWV9NQVNLKSB7CisJY2FzZSBCSVRTX1BBUklUWV9OT05FOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gTk9ORSIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1BBUklUWV9PREQ6CisJCWRiZygiJXMgLSBwYXJpdHkgPSBPREQiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IChQQVJFTkJ8UEFST0REKTsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1BBUklUWV9FVkVOOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gRVZFTiIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gflBBUk9ERDsKKwkJY2ZsYWcgfD0gUEFSRU5COworCQlicmVhazsKKwljYXNlIEJJVFNfUEFSSVRZX01BUks6CisJCWRiZygiJXMgLSBwYXJpdHkgPSBNQVJLIChub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmcgcGFyaXR5KSIsCisJCQkJX19mdW5jX18pOworCQljZmxhZyAmPSB+UEFSRU5COworCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwljYXNlIEJJVFNfUEFSSVRZX1NQQUNFOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gU1BBQ0UgKG5vdCBzdXBwb3J0ZWQsIGRpc2FibGluZyBwYXJpdHkpIiwKKwkJCQlfX2Z1bmNfXyk7CisJCWNmbGFnICY9IH5QQVJFTkI7CisJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7CisJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBVbmtub3duIHBhcml0eSBtb2RlLCBkaXNhYmxpbmcgcGFyaXR5IiwgX19mdW5jX18pOworCQljZmxhZyAmPSB+UEFSRU5COworCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwl9CisKKwljZmxhZyAmPSB+Q1NUT1BCOworCXN3aXRjaCAoYml0cyAmIEJJVFNfU1RPUF9NQVNLKSB7CisJY2FzZSBCSVRTX1NUT1BfMToKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWNhc2UgQklUU19TVE9QXzFfNToKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEuNSAobm90IHN1cHBvcnRlZCwgdXNpbmcgMSBzdG9wIGJpdCkiLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwljYXNlIEJJVFNfU1RPUF8yOgorCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1NUT1BCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gVW5rbm93biBudW1iZXIgb2Ygc3RvcCBiaXRzLCB1c2luZyAxIHN0b3AgYml0IiwKKwkJCQkJCQkJX19mdW5jX18pOworCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJfQorCisJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX01PREVNQ1RMLCBtb2RlbV9jdGwsIDE2KTsKKwlpZiAobW9kZW1fY3RsWzBdICYgMHgwMDA4KSB7CisJCWRiZygiJXMgLSBmbG93IGNvbnRyb2wgPSBDUlRTQ1RTIiwgX19mdW5jX18pOworCQljZmxhZyB8PSBDUlRTQ1RTOworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBmbG93IGNvbnRyb2wgPSBOT05FIiwgX19mdW5jX18pOworCQljZmxhZyAmPSB+Q1JUU0NUUzsKKwl9CisKKwkqY2ZsYWdwID0gY2ZsYWc7Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXVuc2lnbmVkIGludCBjZmxhZywgb2xkX2NmbGFnOworCXVuc2lnbmVkIGludCBiYXVkID0gMCwgYml0czsKKwl1bnNpZ25lZCBpbnQgbW9kZW1fY3RsWzRdOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKKwliYXVkID0gY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlKHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSkpOworCisJLyogSWYgdGhlIGJhdWQgcmF0ZSBpcyB0byBiZSB1cGRhdGVkKi8KKwlpZiAoYmF1ZCAhPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpICYmIGJhdWQgIT0gMCkgeworCQlkYmcoIiVzIC0gU2V0dGluZyBiYXVkIHJhdGUgdG8gJWQgYmF1ZCIsIF9fZnVuY19fLAorCQkJCWJhdWQpOworCQlpZiAoY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHBvcnQsIENQMjEwMV9CQVVEUkFURSwKKwkJCQkJKChCQVVEX1JBVEVfR0VOX0ZSRVEgKyBiYXVkLzIpIC8gYmF1ZCkpKSB7CisJCQlkYmcoIkJhdWQgcmF0ZSByZXF1ZXN0ZWQgbm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCQkJYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcyk7CisJCX0KKwl9CisJLyogUmVwb3J0IGJhY2sgdGhlIHJlc3VsdGluZyBiYXVkIHJhdGUgKi8KKwl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOworCisJLyogSWYgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgaXMgdG8gYmUgdXBkYXRlZCAqLworCWlmICgoY2ZsYWcgJiBDU0laRSkgIT0gKG9sZF9jZmxhZyAmIENTSVpFKSkgeworCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfNTsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfNjsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgQ1M3OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfNzsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCWNhc2UgQ1M4OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCS8qY2FzZSBDUzk6CisJCQliaXRzIHw9IEJJVFNfREFUQV85OworCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkiLCBfX2Z1bmNfXyk7CisJCQlicmVhazsqLworCQlkZWZhdWx0OgorCQkJZGJnKCJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKKwkJCQkJInN1cHBvcnQgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVlc3RlZCwiCisJCQkJCSIgdXNpbmcgOCBiaXQgbW9kZVxuIik7CisJCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKKwkJCWRiZygiTnVtYmVyIG9mIGRhdGEgYml0cyByZXF1ZXN0ZWQgIgorCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCX0KKworCWlmICgoY2ZsYWcgJiAoUEFSRU5CfFBBUk9ERCkpICE9IChvbGRfY2ZsYWcgJiAoUEFSRU5CfFBBUk9ERCkpKSB7CisJCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7CisJCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQkJYml0cyB8PSBCSVRTX1BBUklUWV9PREQ7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IE9ERCIsIF9fZnVuY19fKTsKKwkJCX0gZWxzZSB7CisJCQkJYml0cyB8PSBCSVRTX1BBUklUWV9FVkVOOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBFVkVOIiwgX19mdW5jX18pOworCQkJfQorCQl9CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpKQorCQkJZGJnKCJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKKwkJCQkJImJ5IGRldmljZVxuIik7CisJfQorCisJaWYgKChjZmxhZyAmIENTVE9QQikgIT0gKG9sZF9jZmxhZyAmIENTVE9QQikpIHsKKwkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7CisJCWlmIChjZmxhZyAmIENTVE9QQikgeworCQkJYml0cyB8PSBCSVRTX1NUT1BfMjsKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19mdW5jX18pOworCQl9IGVsc2UgeworCQkJYml0cyB8PSBCSVRTX1NUT1BfMTsKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOworCQl9CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpKQorCQkJZGJnKCJOdW1iZXIgb2Ygc3RvcCBiaXRzIHJlcXVlc3RlZCAiCisJCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJfQorCisJaWYgKChjZmxhZyAmIENSVFNDVFMpICE9IChvbGRfY2ZsYWcgJiBDUlRTQ1RTKSkgeworCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfTU9ERU1DVEwsIG1vZGVtX2N0bCwgMTYpOworCQlkYmcoIiVzIC0gcmVhZCBtb2RlbSBjb250cm9scyA9IDB4JS40eCAweCUuNHggMHglLjR4IDB4JS40eCIsCisJCQkJX19mdW5jX18sIG1vZGVtX2N0bFswXSwgbW9kZW1fY3RsWzFdLAorCQkJCW1vZGVtX2N0bFsyXSwgbW9kZW1fY3RsWzNdKTsKKworCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCQltb2RlbV9jdGxbMF0gJj0gfjB4N0I7CisJCQltb2RlbV9jdGxbMF0gfD0gMHgwOTsKKwkJCW1vZGVtX2N0bFsxXSA9IDB4ODA7CisJCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gQ1JUU0NUUyIsIF9fZnVuY19fKTsKKwkJfSBlbHNlIHsKKwkJCW1vZGVtX2N0bFswXSAmPSB+MHg3QjsKKwkJCW1vZGVtX2N0bFswXSB8PSAweDAxOworCQkJbW9kZW1fY3RsWzFdIHw9IDB4NDA7CisJCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gTk9ORSIsIF9fZnVuY19fKTsKKwkJfQorCisJCWRiZygiJXMgLSB3cml0ZSBtb2RlbSBjb250cm9scyA9IDB4JS40eCAweCUuNHggMHglLjR4IDB4JS40eCIsCisJCQkJX19mdW5jX18sIG1vZGVtX2N0bFswXSwgbW9kZW1fY3RsWzFdLAorCQkJCW1vZGVtX2N0bFsyXSwgbW9kZW1fY3RsWzNdKTsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX01PREVNQ1RMLCBtb2RlbV9jdGwsIDE2KTsKKwl9CisKK30KKworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIGNwMjEwMV90aW9jbXNldF9wb3J0KHBvcnQsIGZpbGUsIHNldCwgY2xlYXIpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJdW5zaWduZWQgaW50IGNvbnRyb2wgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpIHsKKwkJY29udHJvbCB8PSBDT05UUk9MX1JUUzsKKwkJY29udHJvbCB8PSBDT05UUk9MX1dSSVRFX1JUUzsKKwl9CisJaWYgKHNldCAmIFRJT0NNX0RUUikgeworCQljb250cm9sIHw9IENPTlRST0xfRFRSOworCQljb250cm9sIHw9IENPTlRST0xfV1JJVEVfRFRSOworCX0KKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKKwkJY29udHJvbCAmPSB+Q09OVFJPTF9SVFM7CisJCWNvbnRyb2wgfD0gQ09OVFJPTF9XUklURV9SVFM7CisJfQorCWlmIChjbGVhciAmIFRJT0NNX0RUUikgeworCQljb250cm9sICY9IH5DT05UUk9MX0RUUjsKKwkJY29udHJvbCB8PSBDT05UUk9MX1dSSVRFX0RUUjsKKwl9CisKKwlkYmcoIiVzIC0gY29udHJvbCA9IDB4JS40eCIsIF9fZnVuY19fLCBjb250cm9sKTsKKworCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQ09OVFJPTCwgJmNvbnRyb2wsIDIpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgaW50IGNvbnRyb2w7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQ09OVFJPTCwgJmNvbnRyb2wsIDEpOworCisJcmVzdWx0ID0gKChjb250cm9sICYgQ09OVFJPTF9EVFIpID8gVElPQ01fRFRSIDogMCkKKwkJfCgoY29udHJvbCAmIENPTlRST0xfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCXwoKGNvbnRyb2wgJiBDT05UUk9MX0NUUykgPyBUSU9DTV9DVFMgOiAwKQorCQl8KChjb250cm9sICYgQ09OVFJPTF9EU1IpID8gVElPQ01fRFNSIDogMCkKKwkJfCgoY29udHJvbCAmIENPTlRST0xfUklORyk/IFRJT0NNX1JJICA6IDApCisJCXwoKGNvbnRyb2wgJiBDT05UUk9MX0RDRCkgPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSBjb250cm9sID0gMHglLjJ4IiwgX19mdW5jX18sIGNvbnRyb2wpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBzdGF0ZTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJaWYgKGJyZWFrX3N0YXRlID09IDApCisJCXN0YXRlID0gQlJFQUtfT0ZGOworCWVsc2UKKwkJc3RhdGUgPSBCUkVBS19PTjsKKwlkYmcoIiVzIC0gdHVybmluZyBicmVhayAlcyIsIF9fZnVuY19fLAorCQkJc3RhdGUgPT0gQlJFQUtfT0ZGID8gIm9mZiIgOiAib24iKTsKKwljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQlJFQUssICZzdGF0ZSwgMik7Cit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwkvKiBDUDIxMDEgYnVmZmVycyBiZWhhdmUgc3RyYW5nZWx5IHVubGVzcyBkZXZpY2UgaXMgcmVzZXQgKi8KKwl1c2JfcmVzZXRfZGV2aWNlKHNlcmlhbC0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJLyogU3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQljcDIxMDFfY2xlYW51cChzZXJpYWwtPnBvcnRbaV0pOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjcDIxMDFfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOyAvKiBGYWlsZWQgdG8gcmVnaXN0ZXIgKi8KKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmY3AyMTAxX2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQkvKiBGYWlsZWQgdG8gcmVnaXN0ZXIgKi8KKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBTdWNjZXNzICovCisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNwMjEwMV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmNwMjEwMV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3AyMTAxX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGNwMjEwMV9pbml0KTsKK21vZHVsZV9leGl0KGNwMjEwMV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGFlODRjMzIuLmRjYzg3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xOTM4LDE4ICsxOTM4LDE2IEBACiAJCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LwogCQkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKIAkJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLwotCQlpZiAocHJpdiAhPSBOVUxMKSB7Ci0JCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCi0JCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKLQkJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7Ci0JCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0KLQkJCQkJbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwotCQkJCXByaXYtPnByZXZfc3RhdHVzID0gbmV3X3N0YXR1czsKLQkJCX0KKwkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgorCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKKwkJaWYgKG5ld19zdGF0dXMgIT0gcHJpdi0+cHJldl9zdGF0dXMpIHsKKwkJCXByaXYtPmRpZmZfc3RhdHVzIHw9CisJCQkJbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7CiAJCX0KIAotCQlsZW5ndGggPSBtaW4oUEtUU1osIHVyYi0+YWN0dWFsX2xlbmd0aC1wYWNrZXRfb2Zmc2V0KS0yOworCQlsZW5ndGggPSBtaW5fdCh1MzIsIFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKIAkJaWYgKGxlbmd0aCA8IDApIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAogCQkJCV9fZnVuY19fLCBsZW5ndGgrMik7CkBAIC0yMjk0LDExICsyMjkyLDggQEAKIAkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAogCQkJICAgMCwgMCwKIAkJCSAgIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCi0JCQkgICAgcmV0KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWJyZWFrOwogCWNhc2UgRlQ4VTIzMkFNOgogCWNhc2UgRlQyMzJCTToKQEAgLTIzMTMsMTUgKzIzMDgsMTEgQEAKIAkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAwLCBwcml2LT5pbnRlcmZhY2UsCiAJCQkJICAgYnVmLCAyLCBXRFJfVElNRU9VVCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkYmcoIiVzIENvdWxkIG5vdCBnZXQgbW9kZW0gc3RhdHVzIG9mIGRldmljZSAtIGVycjogJWQiLCBfX2Z1bmNfXywKLQkJCSAgICByZXQpOworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwogCX0KIAogCXJldHVybiAgKGJ1ZlswXSAmIEZURElfU0lPX0RTUl9NQVNLID8gVElPQ01fRFNSIDogMCkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggODE0OTA5Zi4uOWQ1N2NhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0xNzcsMTQgKzE3Nyw2IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlpbnQgaSwgYyA9IDAsIHI7CiAKLSNpZmRlZiBDT05GSUdfUE0KLQkvKgotCSAqIElmIHRoaXMgaXMgYW4gYXV0b3Jlc3VtZSwgZG9uJ3Qgc3VibWl0IFVSQnMuCi0JICogVGhleSB3aWxsIGJlIHN1Ym1pdHRlZCBpbiB0aGUgb3BlbiBmdW5jdGlvbiBpbnN0ZWFkLgotCSAqLwotCWlmIChzZXJpYWwtPmRldi0+YXV0b19wbSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBwb3J0LT5yZWFkX3VyYikgewpAQCAtMTk2LDYgKzE4OCw3IEBACiAKIAlyZXR1cm4gYyA/IC1FSU8gOiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZSk7CiAKIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDEzMmJlNzQuLmVmOTIwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNzgsNiArNzgsNyBAQAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgaXBhcV9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkIGlwYXFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKQEAgLTU3MiwxNSArNTczLDEwIEBACiAJLmRlc2NyaXB0aW9uID0JCSJQb2NrZXRQQyBQREEiLAogCS51c2JfZHJpdmVyID0gCQkmaXBhcV9kcml2ZXIsCiAJLmlkX3RhYmxlID0JCWlwYXFfaWRfdGFibGUsCi0JLyoKLQkgKiBzb21lIGRldmljZXMgaGF2ZSBhbiBleHRyYSBlbmRwb2ludCwgd2hpY2gKLQkgKiBtdXN0IGJlIGlnbm9yZWQgYXMgaXQgd291bGQgbWFrZSB0aGUgY29yZQotCSAqIGNyZWF0ZSBhIHNlY29uZCBwb3J0IHdoaWNoIG9vcHNlcyB3aGVuIHVzZWQKLQkgKi8KLQkubnVtX3BvcnRzID0JCTEsCiAJLm9wZW4gPQkJCWlwYXFfb3BlbiwKIAkuY2xvc2UgPQkJaXBhcV9jbG9zZSwKIAkuYXR0YWNoID0JCWlwYXFfc3RhcnR1cCwKKwkuY2FsY19udW1fcG9ydHMgPQlpcGFxX2NhbGNfbnVtX3BvcnRzLAogCS5zaHV0ZG93biA9CQlpcGFxX3NodXRkb3duLAogCS53cml0ZSA9CQlpcGFxX3dyaXRlLAogCS53cml0ZV9yb29tID0JCWlwYXFfd3JpdGVfcm9vbSwKQEAgLTk1NiwxNCArOTUyLDQ5IEBACiB9CiAKIAorc3RhdGljIGludCBpcGFxX2NhbGNfbnVtX3BvcnRzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJLyoKKwkgKiBzb21lIGRldmljZXMgaGF2ZSAzIGVuZHBvaW50cywgdGhlIDNyZCBvZiB3aGljaAorCSAqIG11c3QgYmUgaWdub3JlZCBhcyBpdCB3b3VsZCBtYWtlIHRoZSBjb3JlCisJICogY3JlYXRlIGEgc2Vjb25kIHBvcnQgd2hpY2ggb29wc2VzIHdoZW4gdXNlZAorCSAqLworCWludCBpcGFxX251bV9wb3J0cyA9IDE7CisKKwlkYmcoIiVzIC0gbnVtYmVyb2ZlbmRwb2ludHM6ICVkIiwgX19GVU5DVElPTl9fLAorCQkoaW50KXNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKworCS8qCisJICogYSBmZXcgZGV2aWNlcyBoYXZlIDQgZW5kcG9pbnRzLCBzZWVtaW5nbHkgWWFrdW1hIGRldmljZXMsCisJICogYW5kIHdlIG5lZWQgdGhlIHNlY29uZCBwYWlyLCBzbyBsZXQgdGhlbSBoYXZlIDIgcG9ydHMKKwkgKgorCSAqIFRPRE86IGNhbiB3ZSBkcm9wIHBvcnQgMSA/CisJICovCisJaWYgKHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzID4gMykgeworCQlpcGFxX251bV9wb3J0cyA9IDI7CisJfQorCisJcmV0dXJuIGlwYXFfbnVtX3BvcnRzOworfQorCisKIHN0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKKwkJLyoKKwkJICogRklYTUU6IEhQIGlQYXEgcngzNzE1LCBwb3NzaWJseSBvdGhlcnMsIGhhdmUgMSBjb25maWcgdGhhdAorCQkgKiBpcyBsYWJlbGVkIGFzIDIKKwkJICovCisKIAkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsCiAJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisKKwlkYmcoIiVzIC0gaVBBUSBtb2R1bGUgY29uZmlndXJlZCBmb3IgJWQgcG9ydHMiLAorCQlfX0ZVTkNUSU9OX18sIHNlcmlhbC0+bnVtX3BvcnRzKTsKKwogCXJldHVybiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbihzZXJpYWwtPmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCmluZGV4IDk4NzhjMGYuLjAwZGFhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAl9IGVsc2UgewogCQlkZXZfd2Fybigmc2VyaWFsLT5pbnRlcmZhY2UtPmRldiwKIAkJCSAidW5zdXBwb3J0ZWQgZW5kcG9pbnQgdHlwZSAleFxuIiwKLQkJCSBlcF9kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJCQkgdXNiX2VuZHBvaW50X3R5cGUoZXBfZGVzYykpOwogCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKaW5kZXggY2VhMzI2Zi4uODM5NTgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIE9wdGljb24gVVNCIGJhcmNvZGUgdG8gc2VyaWFsIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5vdmVsbCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDA5IE5vdmVsbCBJbmMuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KQEAgLTQwLDggKzQxLDEyIEBACiAJYm9vbCB0aHJvdHRsZWQ7CiAJYm9vbCBhY3R1YWxseV90aHJvdHRsZWQ7CiAJYm9vbCBydHM7CisJaW50IG91dHN0YW5kaW5nX3VyYnM7CiB9OwogCisvKiBtYXggbnVtYmVyIG9mIHdyaXRlIHVyYnMgaW4gZmxpZ2h0ICovCisjZGVmaW5lIFVSQl9VUFBFUl9MSU1JVAk0CisKIHN0YXRpYyB2b2lkIG9wdGljb25fYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVyYi0+Y29udGV4dDsKQEAgLTEwNiw3ICsxMTEsNiBAQAogCQkJCQlwcml2LT5ydHMgPSBmYWxzZTsKIAkJCQllbHNlCiAJCQkJCXByaXYtPnJ0cyA9IHRydWU7Ci0JCQkJLyogRklYTUUgY2hhbmdlIHRoZSBSVFMgbGV2ZWwgKi8KIAkJCX0gZWxzZSB7CiAJCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCiAJCQkJIlVua25vd24gZGF0YSBwYWNrZXQgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlOiIKQEAgLTE4OCw2ICsxOTIsMTIwIEBACiAJdXNiX2tpbGxfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIpOwogfQogCitzdGF0aWMgdm9pZCBvcHRpY29uX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCS0tcHJpdi0+b3V0c3RhbmRpbmdfdXJiczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2VyaWFsX3BvcnRfc29mdGludChwcml2LT5wb3J0KTsKK30KKworc3RhdGljIGludCBvcHRpY29uX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKwlwcml2LT5vdXRzdGFuZGluZ191cmJzKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJYnVmZmVyID0ga21hbGxvYyhjb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCWNvdW50ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9ub19idWZmZXI7CisJfQorCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVyYikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJubyBtb3JlIGZyZWUgdXJic1xuIik7CisJCWNvdW50ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9ub191cmI7CisJfQorCisJbWVtY3B5KGJ1ZmZlciwgYnVmLCBjb3VudCk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgYnVmZmVyKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICBidWZmZXIsIGNvdW50LCBvcHRpY29uX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHByaXYpOworCisJLyogc2VuZCBpdCBkb3duIHRoZSBwaXBlICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJICAgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCWNvdW50ID0gc3RhdHVzOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKKwkgKiByZWFsbHkgZnJlZSBpdCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQgKi8KKwl1c2JfZnJlZV91cmIodXJiKTsKKworCXJldHVybiBjb3VudDsKK2Vycm9yOgorCXVzYl9mcmVlX3VyYih1cmIpOworZXJyb3Jfbm9fdXJiOgorCWtmcmVlKGJ1ZmZlcik7CitlcnJvcl9ub19idWZmZXI6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwktLXByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBvcHRpY29uX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyoKKwkgKiBXZSByZWFsbHkgY2FuIHRha2UgYWxtb3N0IGFueXRoaW5nIHRoZSB1c2VyIHRocm93cyBhdCB1cworCSAqIGJ1dCBsZXQncyBwaWNrIGEgbmljZSBiaWcgbnVtYmVyIHRvIHRlbGwgdGhlIHR0eQorCSAqIGxheWVyIHRoYXQgd2UgaGF2ZSBsb3RzIG9mIGZyZWUgc3BhY2UsIHVubGVzcyB3ZSBkb24ndC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUICogMiAvIDMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMjA0ODsKK30KKwogc3RhdGljIHZvaWQgb3B0aWNvbl90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwpAQCAtMjIzLDYgKzM0MSw2NyBAQAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCitzdGF0aWMgaW50IG9wdGljb25fdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPnJ0cykKKwkJcmVzdWx0ID0gVElPQ01fUlRTOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYsCisJCQkgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnRtcCwgMHgwMCwgc2l6ZW9mKHRtcCkpOworCisJLyogZmFrZSBlbXVsYXRlIGEgMTY1NTAgdWFydCB0byBtYWtlIHVzZXJzcGFjZSBjb2RlIGhhcHB5ICovCisJdG1wLnR5cGUJCT0gUE9SVF8xNjU1MEE7CisJdG1wLmxpbmUJCT0gcHJpdi0+c2VyaWFsLT5taW5vcjsKKwl0bXAucG9ydAkJPSAwOworCXRtcC5pcnEJCQk9IDA7CisJdG1wLmZsYWdzCQk9IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJROworCXRtcC54bWl0X2ZpZm9fc2l6ZQk9IDEwMjQ7CisJdG1wLmJhdWRfYmFzZQkJPSA5NjAwOworCXRtcC5jbG9zZV9kZWxheQkJPSA1KkhaOworCXRtcC5jbG9zaW5nX3dhaXQJPSAzMCpIWjsKKworCWlmIChjb3B5X3RvX3VzZXIoc2VyaWFsLCAmdG1wLCBzaXplb2YoKnNlcmlhbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpY29uX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kID0gMHgleCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ0dTRVJJQUw6CisJCXJldHVybiBnZXRfc2VyaWFsX2luZm8ocHJpdiwKKwkJCQkgICAgICAgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKwogc3RhdGljIGludCBvcHRpY29uX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2OwpAQCAtMzA2LDExICs0ODUsMzcgQEAKIAl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CiB9CiAKK3N0YXRpYyBpbnQgb3B0aWNvbl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJdXNiX2tpbGxfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGljb25fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlpbnQgcmVzdWx0OworCisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCWlmIChwb3J0LT5wb3J0LmNvdW50KQorCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5idWxrX3JlYWRfdXJiLCBHRlBfTk9JTyk7CisJZWxzZQorCQlyZXN1bHQgPSAwOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvcHRpY29uX2RyaXZlciA9IHsKIAkubmFtZSA9CQkib3B0aWNvbiIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CW9wdGljb25fc3VzcGVuZCwKKwkucmVzdW1lID0Jb3B0aWNvbl9yZXN1bWUsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CkBAIC0zMjYsOSArNTMxLDEzIEBACiAJLmF0dGFjaCA9CQlvcHRpY29uX3N0YXJ0dXAsCiAJLm9wZW4gPQkJCW9wdGljb25fb3BlbiwKIAkuY2xvc2UgPQkJb3B0aWNvbl9jbG9zZSwKKwkud3JpdGUgPQkJb3B0aWNvbl93cml0ZSwKKwkud3JpdGVfcm9vbSA9IAkJb3B0aWNvbl93cml0ZV9yb29tLAogCS5zaHV0ZG93biA9CQlvcHRpY29uX3NodXRkb3duLAogCS50aHJvdHRsZSA9IAkJb3B0aWNvbl90aHJvdHRsZSwKIAkudW50aHJvdHRsZSA9CQlvcHRpY29uX3VudGhyb3R0bGUsCisJLmlvY3RsID0JCW9wdGljb25faW9jdGwsCisJLnRpb2NtZ2V0ID0JCW9wdGljb25fdGlvY21nZXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvcHRpY29uX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA2MWViZGRjNC4uZDU2MGMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNjIsNiArNjIsOCBAQAogc3RhdGljIGludCAgb3B0aW9uX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiBzdGF0aWMgaW50ICBvcHRpb25fc2VuZF9zZXR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIG9wdGlvbl9zdXNwZW5kKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgIG9wdGlvbl9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiAKIC8qIFZlbmRvciBhbmQgcHJvZHVjdCBJRHMgKi8KICNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JRAkJCTB4MEFGMApAQCAtNTIzLDYgKzUyNSw4IEBACiAJLm5hbWUgICAgICAgPSAib3B0aW9uIiwKIAkucHJvYmUgICAgICA9IHVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgICAgPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKIAkuaWRfdGFibGUgICA9IG9wdGlvbl9pZHMsCiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CkBAIC01NTEsNiArNTU1LDggQEAKIAkuYXR0YWNoICAgICAgICAgICAgPSBvcHRpb25fc3RhcnR1cCwKIAkuc2h1dGRvd24gICAgICAgICAgPSBvcHRpb25fc2h1dGRvd24sCiAJLnJlYWRfaW50X2NhbGxiYWNrID0gb3B0aW9uX2luc3RhdF9jYWxsYmFjaywKKwkuc3VzcGVuZCAgICAgICAgICAgPSBvcHRpb25fc3VzcGVuZCwKKwkucmVzdW1lICAgICAgICAgICAgPSBvcHRpb25fcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKQEAgLTgyMSwxMCArODI3LDEwIEBACiAJCQkJcmVxX3BrdC0+YlJlcXVlc3RUeXBlLCByZXFfcGt0LT5iUmVxdWVzdCk7CiAJCX0KIAl9IGVsc2UKLQkJZGJnKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZXJyKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KLQlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKKwlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04gJiYgc3RhdHVzICE9IC1FTk9FTlQpIHsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKQEAgLTg0Myw3ICs4NDksNiBAQAogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQogCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7IGkrKykgewogCQl0aGlzX3VyYiA9IHBvcnRkYXRhLT5vdXRfdXJic1tpXTsKIAkJaWYgKHRoaXNfdXJiICYmICF0ZXN0X2JpdChpLCAmcG9ydGRhdGEtPm91dF9idXN5KSkKQEAgLTExMDUsMTQgKzExMTAsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgb3B0aW9uX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKLQogCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwpAQCAtMTEyMiw2ICsxMTI1LDE3IEBACiAJCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7IGorKykKIAkJCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+b3V0X3VyYnNbal0pOwogCX0KK30KKworc3RhdGljIHZvaWQgb3B0aW9uX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGksIGo7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJc3RvcF9yZWFkX3dyaXRlX3VyYnMoc2VyaWFsKTsKIAogCS8qIE5vdyBmcmVlIHRoZW0gKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewpAQCAtMTE1Miw2ICsxMTY2LDY2IEBACiAJfQogfQogCitzdGF0aWMgaW50IG9wdGlvbl9zdXNwZW5kKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCWRiZygiJXMgZW50ZXJlZCIsIF9fZnVuY19fKTsKKwlzdG9wX3JlYWRfd3JpdGVfdXJicyhzZXJpYWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3Jlc3VtZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBlcnIsIGksIGo7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCisJZGJnKCIlcyBlbnRlcmVkIiwgX19mdW5jX18pOworCS8qIGdldCB0aGUgaW50ZXJydXB0IFVSQnMgcmVzdWJtaXR0ZWQgdW5jb25kaXRpb25hbGx5ICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CisJCQlkYmcoIiVzOiBObyBpbnRlcnJ1cHQgVVJCIGZvciBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX05PSU8pOworCQlkYmcoIlN1Ym1pdHRlZCBpbnRlcnJ1cHQgVVJCIGZvciBwb3J0ICVkIChyZXN1bHQgJWQpIiwgaSwgZXJyKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXM6IEVycm9yICVkIGZvciBpbnRlcnJ1cHQgVVJCIG9mIHBvcnQlZCIsCisJCQkJIF9fZnVuY19fLCBlcnIsIGkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCS8qIHdhbGsgYWxsIHBvcnRzICovCisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisKKwkJLyogc2tpcCBjbG9zZWQgcG9ydHMgKi8KKwkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7CisJCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKKwkJCXVyYiA9IHBvcnRkYXRhLT5pbl91cmJzW2pdOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfTk9JTyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQkJCWVycigiJXM6IEVycm9yICVkIGZvciBidWxrIFVSQiAlZCIsCisJCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCX0KKwlyZXR1cm4gMDsKK30KKwogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDZiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIFF1YWxjb21tIFNlcmlhbCBVU0IgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDA4IFFVQUxDT01NIEluY29ycG9yYXRlZC4KKyAqCUNvcHlyaWdodCAoYykgMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoJQ29weXJpZ2h0IChjKSAyMDA5IE5vdmVsbCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlF1YWxjb21tIEluYyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlF1YWxjb21tIFVTQiBTZXJpYWwgZHJpdmVyIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMSl9LAkvKiBBY2VyIEdvYmkgUURMIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjEyKX0sCS8qIEFjZXIgR29iaSBNb2RlbSBEZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZjAsIDB4MWYxZCl9LAkvKiBIUCB1bjI0MDAgR29iaSBNb2RlbSBEZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZjAsIDB4MjAxZCl9LAkvKiBIUCB1bjI0MDAgR29iaSBRREwgRGV2aWNlICovCisJeyB9CQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHFjZHJpdmVyID0geworCS5uYW1lCQkJPSAicWNzZXJpYWwiLAorCS5wcm9iZQkJCT0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdAkJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS5zdXNwZW5kCQk9IHVzYl9zZXJpYWxfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQJPSB0cnVlLAorfTsKKworc3RhdGljIGludCBxY3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwlfX3U4IG5pbnRmOworCV9fdTggaWZudW07CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJbmludGYgPSBzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOworCWRiZygiTnVtIEludGVyZmFjZXMgPSAlZCIsIG5pbnRmKTsKKwlpZm51bSA9IHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWRiZygiVGhpcyBJbnRlcmZhY2UgPSAlZCIsIGlmbnVtKTsKKworCXN3aXRjaCAobmludGYpIHsKKwljYXNlIDE6CisJCS8qIFFETCBtb2RlICovCisJCWlmIChzZXJpYWwtPmludGVyZmFjZS0+bnVtX2FsdHNldHRpbmcgPT0gMikgeworCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZjsKKworCQkJaW50ZiA9ICZzZXJpYWwtPmludGVyZmFjZS0+YWx0c2V0dGluZ1sxXTsKKwkJCWlmIChpbnRmLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gMikgeworCQkJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigmaW50Zi0+ZW5kcG9pbnRbMF0uZGVzYykgJiYKKwkJCQkgICAgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KCZpbnRmLT5lbmRwb2ludFsxXS5kZXNjKSkgeworCQkJCQlkYmcoIlFETCBwb3J0IGZvdW5kIik7CisJCQkJCXJldHZhbCA9IHVzYl9zZXRfaW50ZXJmYWNlKHNlcmlhbC0+ZGV2LCBpZm51bSwgMSk7CisJCQkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkJCSJDb3VsZCBub3Qgc2V0IGludGVyZmFjZSwgZXJyb3IgJWRcbiIsCisJCQkJCQkJcmV0dmFsKTsKKwkJCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHJldHZhbDsKKwkJCQl9CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCS8qIENvbXBvc2l0ZSBtb2RlICovCisJCWlmIChpZm51bSA9PSAyKSB7CisJCQlkYmcoIk1vZGVtIHBvcnQgZm91bmQiKTsKKwkJCXJldHZhbCA9IHVzYl9zZXRfaW50ZXJmYWNlKHNlcmlhbC0+ZGV2LCBpZm51bSwgMCk7CisJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCSJDb3VsZCBub3Qgc2V0IGludGVyZmFjZSwgZXJyb3IgJWRcbiIsCisJCQkJCXJldHZhbCk7CisJCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCX0KKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJInVua25vd24gbnVtYmVyIG9mIGludGVyZmFjZXM6ICVkXG4iLCBuaW50Zik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgcWNkZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyICAgICA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgICAgID0gInFjc2VyaWFsIiwKKwl9LAorCS5kZXNjcmlwdGlvbiAgICAgICAgID0gIlF1YWxjb21tIFVTQiBtb2RlbSIsCisJLmlkX3RhYmxlICAgICAgICAgICAgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciAgICAgICAgICA9ICZxY2RyaXZlciwKKwkubnVtX3BvcnRzICAgICAgICAgICA9IDEsCisJLnByb2JlICAgICAgICAgICAgICAgPSBxY3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcWNpbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnFjZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZxY2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnFjZGV2aWNlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFjZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZxY2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZxY2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHFjaW5pdCk7Cittb2R1bGVfZXhpdChxY2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjNjYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogU3ltYm9sIFVTQiBiYXJjb2RlIHRvIHNlcmlhbCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb3ZlbGwgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNWUwLCAweDA2MDApIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBzeW1ib2xfcHJpdmF0ZSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGNoYXIgKmludF9idWZmZXI7CisJc3RydWN0IHVyYiAqaW50X3VyYjsKKwlpbnQgYnVmZmVyX3NpemU7CisJdTggYkludGVydmFsOworCXU4IGludF9hZGRyZXNzOworCXNwaW5sb2NrX3QgbG9jazsJLyogcHJvdGVjdHMgdGhlIGZvbGxvd2luZyBmbGFncyAqLworCWJvb2wgdGhyb3R0bGVkOworCWJvb2wgYWN0dWFsbHlfdGhyb3R0bGVkOworCWJvb2wgcnRzOworfTsKKworc3RhdGljIHZvaWQgc3ltYm9sX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgcmVzdWx0OworCWludCBhdmFpbGFibGVfcm9vbSA9IDA7CisJaW50IGRhdGFfbGVuZ3RoOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJICAgICAgZGF0YSk7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMSkgeworCQlkYXRhX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIDE7CisKKwkJLyoKKwkJICogRGF0YSBmcm9tIHRoZSBkZXZpY2UgY29tZXMgd2l0aCBhIDEgYnl0ZSBoZWFkZXI6CisJCSAqCisJCSAqIDxzaXplIG9mIGRhdGE+ZGF0YS4uLgorCQkgKiAJVGhpcyBpcyByZWFsIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgdHR5IGxheWVyCisJCSAqIHdlIHByZXR0eSBtdWNoIGp1c3QgaWdub3JlIHRoZSBzaXplIGFuZCBzZW5kIGV2ZXJ5dGhpbmcKKwkJICogZWxzZSB0byB0aGUgdHR5IGxheWVyLgorCQkgKi8KKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWF2YWlsYWJsZV9yb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LAorCQkJCQkJCWRhdGFfbGVuZ3RoKTsKKwkJCWlmIChhdmFpbGFibGVfcm9vbSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCAmZGF0YVsxXSwKKwkJCQkJCSAgICAgICBhdmFpbGFibGVfcm9vbSk7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAorCQkJIkltcHJvcGVyIGFtbW91bnQgb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UsICIKKwkJCSIlZCBieXRlcyIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJfQorCitleGl0OgorCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgaWYgd2Ugc2hvdWxkICovCisJaWYgKCFwcml2LT50aHJvdHRsZWQpIHsKKwkJdXNiX2ZpbGxfaW50X3VyYihwcml2LT5pbnRfdXJiLCBwcml2LT51ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LAorCQkJCSAJCXByaXYtPmludF9hZGRyZXNzKSwKKwkJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJICAgICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCX0gZWxzZQorCQlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKK30KKworc3RhdGljIGludCBzeW1ib2xfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKKwlwcml2LT5wb3J0ID0gcG9ydDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIEZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YQorCSAqIHRocm91Z2gsIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZQorCSAqIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuCisJICovCisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2ludF91cmIocHJpdi0+aW50X3VyYiwgcHJpdi0+dWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LCBwcml2LT5pbnRfYWRkcmVzcyksCisJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkgc3ltYm9sX2ludF9jYWxsYmFjaywgcHJpdiwgcHJpdi0+YkludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwl1c2Jfa2lsbF91cmIocHJpdi0+aW50X3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlwcml2LT5pbnRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qCisJICogUmlnaHQgbm93IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1hbmRzCisJICogbW9zdCB1c2Vyc3BhY2UgdG9vbHMgd2FudCB0byBzZWUgZm9yIHRoaXMgZHJpdmVyLAorCSAqIHNvIGp1c3QgbG9nIHRoZSB0aGluZ3MuCisJICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NTRVJHRVRMU1I6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DU0VSR0VUTFNSXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DR1NFUklBTDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NHU0VSSUFMXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTUlXQUlUOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ01JV0FJVFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DR0lDT1VOVFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfaW5mbyhkZXYsICIlczogdW5rbm93biAoJWQpXG4iLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBzeW1ib2xfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qIFRPRE8gKi8KKwkvKiBwcm9iYWJseSBqdXN0IG5lZWQgdG8gc2hhZG93IHdoYXRldmVyIHdhcyBzZW50IHRvIHVzIGhlcmUgKi8KKwlkZXZfaW5mbyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bWJvbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcG9ydC0+ZGV2OworCisJLyogVE9ETyAqLworCS8qIHByb2JhYmx5IGp1c3QgbmVlZCB0byBzaGFkb3cgd2hhdGV2ZXIgd2FzIHNlbnQgdG8gdXMgaGVyZSAqLworCWRldl9pbmZvKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlib29sIGludF9pbl9mb3VuZCA9IGZhbHNlOworCisJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5zZXJpYWwgPSBzZXJpYWw7CisJcHJpdi0+cG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlwcml2LT51ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkvKiBmaW5kIG91ciBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlpbnRmID0gc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGludGYtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisKKwkJZW5kcG9pbnQgPSAmaW50Zi0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKKwkJCWNvbnRpbnVlOworCisJCXByaXYtPmludF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPmludF91cmIpIHsKKwkJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXByaXYtPmJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSAqIDI7CisJCXByaXYtPmludF9idWZmZXIgPSBrbWFsbG9jKHByaXYtPmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5pbnRfYnVmZmVyKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwcml2LT5pbnRfYWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQlwcml2LT5iSW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOworCisJCS8qIHNldCB1cCBvdXIgaW50IHVyYiAqLworCQl1c2JfZmlsbF9pbnRfdXJiKHByaXYtPmludF91cmIsIHByaXYtPnVkZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKHByaXYtPnVkZXYsCisJCQkJIAkJZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSBwcml2LT5pbnRfYnVmZmVyLCBwcml2LT5idWZmZXJfc2l6ZSwKKwkJCQkgc3ltYm9sX2ludF9jYWxsYmFjaywgcHJpdiwgcHJpdi0+YkludGVydmFsKTsKKworCQlpbnRfaW5fZm91bmQgPSB0cnVlOworCQlicmVhazsKKwkJfQorCisJaWYgKCFpbnRfaW5fZm91bmQpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LAorCQkJIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgcHJpdik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXVzYl9mcmVlX3VyYihwcml2LT5pbnRfdXJiKTsKKwlrZnJlZShwcml2LT5pbnRfYnVmZmVyKTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJdXNiX2tpbGxfdXJiKHByaXYtPmludF91cmIpOworCXVzYl9mcmVlX3VyYihwcml2LT5pbnRfdXJiKTsKKwlrZnJlZShwcml2LT5pbnRfYnVmZmVyKTsKKwlrZnJlZShwcml2KTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzeW1ib2xfZHJpdmVyID0geworCS5uYW1lID0JCQkic3ltYm9sIiwKKwkucHJvYmUgPQkJdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHN5bWJvbF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJzeW1ib2wiLAorCX0sCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0gCQkmc3ltYm9sX2RyaXZlciwKKwkubnVtX3BvcnRzID0JCTEsCisJLmF0dGFjaCA9CQlzeW1ib2xfc3RhcnR1cCwKKwkub3BlbiA9CQkJc3ltYm9sX29wZW4sCisJLmNsb3NlID0JCXN5bWJvbF9jbG9zZSwKKwkuc2h1dGRvd24gPQkJc3ltYm9sX3NodXRkb3duLAorCS50aHJvdHRsZSA9IAkJc3ltYm9sX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXN5bWJvbF91bnRocm90dGxlLAorCS5pb2N0bCA9IAkJc3ltYm9sX2lvY3RsLAorCS50aW9jbWdldCA9IAkJc3ltYm9sX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9IAkJc3ltYm9sX3Rpb2Ntc2V0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3ltYm9sX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmc3ltYm9sX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnN5bWJvbF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3ltYm9sX2RldmljZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN5bWJvbF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnN5bWJvbF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3ltYm9sX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHN5bWJvbF9pbml0KTsKK21vZHVsZV9leGl0KHN5bWJvbF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IGNmY2ZkNWEuLjc0MmE1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMjA0LDYgKzIwNCwxMSBAQAogCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CiAJfQogCisJaWYgKHBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKKwl9CisKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwb3J0LT5tdXRleCkpIHsKIAkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CkBAIC0xMDY3LDYgKzEwNzIsOCBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIHIgPSAwOwogCisJc2VyaWFsLT5zdXNwZW5kaW5nID0gMTsKKwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCWlmIChwb3J0KQpAQCAtMTA4MywxMCArMTA5MCwxNSBAQAogaW50IHVzYl9zZXJpYWxfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBydjsKIAorCXNlcmlhbC0+c3VzcGVuZGluZyA9IDA7CiAJaWYgKHNlcmlhbC0+dHlwZS0+cmVzdW1lKQotCQlyZXR1cm4gc2VyaWFsLT50eXBlLT5yZXN1bWUoc2VyaWFsKTsKLQlyZXR1cm4gMDsKKwkJcnYgPSBzZXJpYWwtPnR5cGUtPnJlc3VtZShzZXJpYWwpOworCWVsc2UKKwkJcnYgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKHNlcmlhbCk7CisKKwlyZXR1cm4gcnY7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9zZXJpYWxfcmVzdW1lKTsKIApAQCAtMTIyMiw3ICsxMjM0LDYgQEAKIAlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgcmVhZF9idWxrX2NhbGxiYWNrKTsKIAlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgd3JpdGVfYnVsa19jYWxsYmFjayk7CiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHNodXRkb3duKTsKLQlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgcmVzdW1lKTsKIH0KIAogaW50IHVzYl9zZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcml2ZXIpCkBAIC0xMjMwLDYgKzEyNDEsOSBAQAogCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KIAlpbnQgcmV0dmFsOwogCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWZpeHVwX2dlbmVyaWMoZHJpdmVyKTsKIAogCWlmICghZHJpdmVyLT5kZXNjcmlwdGlvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwppbmRleCA5ZGY2ODg3Li44YTM3MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCkBAIC0yLDggKzIsOCBAQAogIyBVU0IgU3RvcmFnZSBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCi1jb21tZW50ICJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyIKLWNvbW1lbnQgInNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uIgorY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSIKK2NvbW1lbnQgImFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvIgogCWRlcGVuZHMgb24gVVNCCiAKIGNvbmZpZyBVU0JfU1RPUkFHRQpAQCAtMzIsMjEgKzMyLDI1IEBACiAJICB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcy4KIAogY29uZmlnIFVTQl9TVE9SQUdFX0RBVEFGQUIKLQlib29sICJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnQiCisJdHJpc3RhdGUgIkRhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgY2VydGFpbiBEYXRhZmFiIENvbXBhY3RGbGFzaCByZWFkZXJzLgogCSAgRGF0YWZhYiBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5kYXRhZmFidXNhLmNvbS8+LgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtZGF0YWZhYi4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0ZSRUVDT00KLQlib29sICJGcmVlY29tIFVTQi9BVEFQSSBCcmlkZ2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBGcmVlY29tIFVTQiB0byBJREUvQVRBUEkgYWRhcHRvci4KIAkgIEZyZWVjb20gaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8+LgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtZnJlZWNvbS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMAotCWJvb2wgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBVU0IgTWFzcyBTdG9yZSBkZXZpY2VzIGJhc2VkCkBAIC02MSw4ICs2NSwxMCBAQAogCSAgLSBDeVEndmUgQ1E4MDYwQSBDRFJXIGRyaXZlCiAJICAtIFBsYW5leCBlWHRyZW1lIERyaXZlIFJYLTI1SFUgVVNCLUlERSBjYWJsZSAobm90IG1vZGVsIFJYLTI1VSkKIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWlzZDIwMC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX1VTQkFUCi0JYm9vbCAiVVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgc3RvcmFnZSBkZXZpY2VzCkBAIC04MiwzMCArODgsMzggQEAKIAkgIC0gUkNBIExZUkEgTVAzIHBvcnRhYmxlCiAJICAtIFNhbmRpc2sgSW1hZ2VNYXRlIFNERFItMDViCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy11c2JhdC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX1NERFIwOQotCWJvb2wgIlNhbkRpc2sgU0REUi0wOSAoYW5kIG90aGVyIFNtYXJ0TWVkaWEsIGluY2x1ZGluZyBEUENNKSBzdXBwb3J0IgorCXRyaXN0YXRlICJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBTYW5kaXNrIFNERFItMDkKIAkgIFNtYXJ0TWVkaWEgcmVhZGVyIGluIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4KIAkgIEFsc28gd29ya3MgZm9yIHRoZSBNaWNyb3RlY2ggWmlvISBDb21wYWN0Rmxhc2gvU21hcnRNZWRpYSByZWFkZXIuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1zZGRyMDkuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9TRERSNTUKLQlib29sICJTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSBzdXBwb3J0IgorCXRyaXN0YXRlICJTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFNhbmRpc2sgU0REUi01NQogCSAgU21hcnRNZWRpYSByZWFkZXIgaW4gdGhlIFVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtc2RkcjU1LgorCiBjb25maWcgVVNCX1NUT1JBR0VfSlVNUFNIT1QKLQlib29sICJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlciIKKwl0cmlzdGF0ZSAiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXIiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgTGV4YXIgSnVtcHNob3QKIAkgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREEKLQlib29sICJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnQiCisJdHJpc3RhdGUgIk9seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBPbHltcHVzIE1BVVNCLTEwCkBAIC0xMTQsOCArMTI4LDEwIEBACiAJICBUaGVzZSBkZXZpY2VzIGFyZSBiYXNlZCBvbiB0aGUgQWxhdWRhIGNoaXAgYW5kIHN1cHBvcnQgYm90aAogCSAgWEQgYW5kIFNtYXJ0TWVkaWEgY2FyZHMuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSAotCWJvb2wgIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlcyIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBPbmVUb3VjaCBCdXR0b24gb24gTWF4dG9yIEhhcmQgRHJpdmVzIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAlkZXBlbmRzIG9uIElOUFVUPXkgfHwgSU5QVVQ9VVNCX1NUT1JBR0UKIAloZWxwCkBAIC0xMjcsOCArMTQzLDEwIEBACiAJICB0aGlzIGlucHV0IGluIGFueSBrZXliaW5kaW5nIHNvZnR3YXJlLiAoZS5nLiBnbm9tZSdzIGtleWJvYXJkIHNob3J0LQogCSAgY3V0cykKIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLW9uZXRvdWNoLgorCiBjb25maWcgVVNCX1NUT1JBR0VfS0FSTUEKLQlib29sICJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyIgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFJpbyBLYXJtYQpAQCAtMTM5LDggKzE1NywxMCBAQAogCSAgb24gdGhlIHJlc3VsdGluZyBzY3NpIGRldmljZSBub2RlIHJldHVybnMgdGhlIEthcm1hIHRvIG5vcm1hbAogCSAgb3BlcmF0aW9uLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMta2FybWEuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0JYm9vbCAiU0FUIGVtdWxhdGlvbiBvbiBDeXByZXNzIFVTQi9BVEEgQnJpZGdlIHdpdGggQVRBQ0IiCisJdHJpc3RhdGUgIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKQEAgLTE1MCw2ICsxNzAsOCBAQAogCSAgSWYgeW91IHNheSBubyBoZXJlIHlvdXIgZGV2aWNlIHdpbGwgc3RpbGwgd29yayB3aXRoIHRoZSBzdGFuZGFyZCB1c2IKIAkgIG1hc3Mgc3RvcmFnZSBjbGFzcy4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWN5cHJlc3MuCisKIGNvbmZpZyBVU0JfTElCVVNVQUwKIAlib29sICJUaGUgc2hhcmVkIHRhYmxlIG9mIGNvbW1vbiAob3IgdXN1YWwpIHN0b3JhZ2UgZGV2aWNlcyIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKaW5kZXggYjMyMDY5My4uNWJlNTRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCkBAIC0xMCwyMSArMTAsMzYgQEAKIG9iai0kKENPTkZJR19VU0JfU1RPUkFHRSkJKz0gdXNiLXN0b3JhZ2UubwogCiB1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpCSs9IGRlYnVnLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkJKz0gc2h1dHRsZV91c2JhdC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KQkrPSBzZGRyMDkubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gc2RkcjU1Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKQkrPSBmcmVlY29tLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IGlzZDIwMC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gZGF0YWZhYi5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IGp1bXBzaG90Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpCSs9IGFsYXVkYS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpCSs9IG9uZXRvdWNoLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkJKz0ga2FybWEubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpICs9IGN5cHJlc3NfYXRhY2IubwogCiB1c2Itc3RvcmFnZS1vYmpzIDo9CXNjc2lnbHVlLm8gcHJvdG9jb2wubyB0cmFuc3BvcnQubyB1c2IubyBcCiAJCQlpbml0aWFsaXplcnMubyBzaWVycmFfbXMubyBvcHRpb25fbXMubyAkKHVzYi1zdG9yYWdlLW9iai15KQogCi1pZm5lcSAoJChDT05GSUdfVVNCX0xJQlVTVUFMKSwpCi0Jb2JqLSQoQ09ORklHX1VTQikJKz0gbGlidXN1YWwubworaWZlcSAoJChDT05GSUdfVVNCX0xJQlVTVUFMKSwpCisJdXNiLXN0b3JhZ2Utb2JqcwkrPSB1c3VhbC10YWJsZXMubworZWxzZQorCW9iai0kKENPTkZJR19VU0IpCSs9IGxpYnVzdWFsLm8gdXN1YWwtdGFibGVzLm8KIGVuZGlmCisKK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpCSs9IHVtcy1hbGF1ZGEubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpICs9IHVtcy1jeXByZXNzLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCKQkrPSB1bXMtZGF0YWZhYi5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkJKz0gdW1zLWZyZWVjb20ubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkJKz0gdW1zLWlzZDIwMC5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IHVtcy1qdW1wc2hvdC5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpCQkrPSB1bXMta2FybWEubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKQkrPSB1bXMtb25ldG91Y2gubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkJKz0gdW1zLXNkZHIwOS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KQkrPSB1bXMtc2RkcjU1Lm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkJCSs9IHVtcy11c2JhdC5vCisKK3Vtcy1hbGF1ZGEtb2JqcwkJOj0gYWxhdWRhLm8KK3Vtcy1jeXByZXNzLW9ianMJOj0gY3lwcmVzc19hdGFjYi5vCit1bXMtZGF0YWZhYi1vYmpzCTo9IGRhdGFmYWIubwordW1zLWZyZWVjb20tb2Jqcwk6PSBmcmVlY29tLm8KK3Vtcy1pc2QyMDAtb2JqcwkJOj0gaXNkMjAwLm8KK3Vtcy1qdW1wc2hvdC1vYmpzCTo9IGp1bXBzaG90Lm8KK3Vtcy1rYXJtYS1vYmpzCQk6PSBrYXJtYS5vCit1bXMtb25ldG91Y2gtb2Jqcwk6PSBvbmV0b3VjaC5vCit1bXMtc2RkcjA5LW9ianMJCTo9IHNkZHIwOS5vCit1bXMtc2RkcjU1LW9ianMJCTo9IHNkZHI1NS5vCit1bXMtdXNiYXQtb2JqcwkJOj0gc2h1dHRsZV91c2JhdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwppbmRleCA4ZDM3MTFhLi42N2VkYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKQEAgLTMxLDYgKzMxLDggQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMzksNyArNDEsNzkgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiYWxhdWRhLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogU3RhdHVzIGJ5dGVzCisgKi8KKyNkZWZpbmUgQUxBVURBX1NUQVRVU19FUlJPUgkJMHgwMQorI2RlZmluZSBBTEFVREFfU1RBVFVTX1JFQURZCQkweDQwCisKKy8qCisgKiBDb250cm9sIG9wY29kZXMgKGZvciByZXF1ZXN0IGZpZWxkKQorICovCisjZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU1RBVFVTCTB4MDgKKyNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TVEFUVVMJMHg5OAorI2RlZmluZSBBTEFVREFfQUNLX1hEX01FRElBX0NIQU5HRQkweDBhCisjZGVmaW5lIEFMQVVEQV9BQ0tfU01fTUVESUFfQ0hBTkdFCTB4OWEKKyNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TSUcJCTB4ODYKKyNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TSUcJCTB4OTYKKworLyoKKyAqIEJ1bGsgY29tbWFuZCBpZGVudGl0eSAoYnl0ZSAwKQorICovCisjZGVmaW5lIEFMQVVEQV9CVUxLX0NNRAkJCTB4NDAKKworLyoKKyAqIEJ1bGsgb3Bjb2RlcyAoYnl0ZSAxKQorICovCisjZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9SRURVX0RBVEEJMHg4NQorI2RlZmluZSBBTEFVREFfQlVMS19SRUFEX0JMT0NLCQkweDk0CisjZGVmaW5lIEFMQVVEQV9CVUxLX0VSQVNFX0JMT0NLCQkweGEzCisjZGVmaW5lIEFMQVVEQV9CVUxLX1dSSVRFX0JMT0NLCQkweGI0CisjZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9TVEFUVVMyCQkweGI3CisjZGVmaW5lIEFMQVVEQV9CVUxLX1JFU0VUX01FRElBCQkweGUwCisKKy8qCisgKiBQb3J0IHRvIG9wZXJhdGUgb24gKGJ5dGUgOCkKKyAqLworI2RlZmluZSBBTEFVREFfUE9SVF9YRAkJCTB4MDAKKyNkZWZpbmUgQUxBVURBX1BPUlRfU00JCQkweDAxCisKKy8qCisgKiBMQkEgYW5kIFBCQSBhcmUgdW5zaWduZWQgaW50cy4gU3BlY2lhbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgVU5ERUYgICAgMHhmZmZmCisjZGVmaW5lIFNQQVJFICAgIDB4ZmZmZQorI2RlZmluZSBVTlVTQUJMRSAweGZmZmQKKworc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwkJLyogdG90YWwgbWVkaWEgc2l6ZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBwYWdlc2l6ZTsJCS8qIHBhZ2Ugc2l6ZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBibG9ja3NpemU7CQkvKiBudW1iZXIgb2YgcGFnZXMgcGVyIGJsb2NrICovCisJdW5zaWduZWQgaW50IHV6b25lc2l6ZTsJCS8qIG51bWJlciBvZiB1c2FibGUgYmxvY2tzIHBlciB6b25lICovCisJdW5zaWduZWQgaW50IHpvbmVzaXplOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgem9uZSAqLworCXVuc2lnbmVkIGludCBibG9ja21hc2s7CQkvKiBtYXNrIHRvIGdldCBwYWdlIGZyb20gYWRkcmVzcyAqLworCisJdW5zaWduZWQgY2hhciBwYWdlc2hpZnQ7CisJdW5zaWduZWQgY2hhciBibG9ja3NoaWZ0OworCXVuc2lnbmVkIGNoYXIgem9uZXNoaWZ0OworCisJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCisJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCit9OworCitzdHJ1Y3QgYWxhdWRhX2luZm8geworCXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdOworCWludCB3cl9lcDsJCQkvKiBlbmRwb2ludCB0byB3cml0ZSBkYXRhIG91dCBvZiAqLworCisJdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCiAjZGVmaW5lIExTQl9vZihzKSAoKHMpJjB4RkYpCkBAIC01Miw2ICsxMjYsNDggQEAKICNkZWZpbmUgUEJBX0hJKHBiYSkgKHBiYSA+PiAzKQogI2RlZmluZSBQQkFfWk9ORShwYmEpIChwYmEgPj4gMTEpCiAKK3N0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBhbGF1ZGFfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWxhdWRhX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGFsYXVkYV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfYWxhdWRhLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogLyoKICAqIE1lZGlhIGhhbmRsaW5nCiAgKi8KQEAgLTMwNyw3ICs0MjMsOCBAQAogCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKIAltZWRpYV9pbmZvID0gYWxhdWRhX2NhcmRfZmluZF9pZChkYXRhWzFdKTsKIAlpZiAobWVkaWFfaW5mbyA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX2luaXRfbWVkaWE6IFVucmVjb2duaXNlZCBtZWRpYSBzaWduYXR1cmU6ICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAiCiAJCQkiJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKIAkJCWRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwpAQCAtNTE4LDcgKzYzNSw4IEBACiAKIAkJLyogY2hlY2sgZXZlbiBwYXJpdHkgKi8KIAkJaWYgKHBhcml0eVtkYXRhWzZdIF4gZGF0YVs3XV0pIHsKLQkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImFsYXVkYV9yZWFkX21hcDogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgogCQkJICAgICAgICIgKCUwMlggJTAyWClcbiIsIGksIGRhdGFbNl0sIGRhdGFbN10pOwogCQkJcGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwogCQkJY29udGludWU7CkBAIC01MzgsMTMgKzY1NiwxNiBAQAogCQkgKi8KIAogCQlpZiAobGJhX29mZnNldCA+PSB1em9uZXNpemUpIHsKLQkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImFsYXVkYV9yZWFkX21hcDogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAogCQkJICAgICAgIGxiYV9yZWFsLCBibG9ja251bSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChsYmFfdG9fcGJhW2xiYV9vZmZzZXRdICE9IFVOREVGKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImFsYXVkYV9yZWFkX21hcDogIgorCQkJICAgICAgICJMQkEgJWQgc2VlbiBmb3IgUEJBICVkIGFuZCAlZFxuIiwKIAkJCSAgICAgICBsYmFfcmVhbCwgbGJhX3RvX3BiYVtsYmFfb2Zmc2V0XSwgYmxvY2tudW0pOwogCQkJY29udGludWU7CiAJCX0KQEAgLTcxMiwxMyArODMzLDE1IEBACiAJaWYgKHBiYSA9PSAxKSB7CiAJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCiAJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLwotCQlwcmludGsoImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiYWxhdWRhX3dyaXRlX2xiYTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIAl9CiAKIAluZXdfcGJhID0gYWxhdWRhX2ZpbmRfdW51c2VkX3BiYSgmTUVESUFfSU5GTyh1cyksIHpvbmUpOwogCWlmICghbmV3X3BiYSkgewotCQlwcmludGsoImFsYXVkYV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImFsYXVkYV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTgxOCw3ICs5NDEsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUpICogKHBhZ2VzaXplICsgNjQpOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsYXVkYV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIApAQCAtOTExLDcgKzEwMzQsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUpICogcGFnZXNpemU7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTkyMSw3ICsxMDQ0LDcgQEAKIAkgKi8KIAlibG9ja2J1ZmZlciA9IGttYWxsb2MoKHBhZ2VzaXplICsgNjQpICogYmxvY2tzaXplLCBHRlBfTk9JTyk7CiAJaWYgKGJsb2NrYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJa2ZyZWUoYnVmZmVyKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CkBAIC05OTEsNyArMTExNCw3IEBACiAvKgogICogSW5pdGlhbGl6ZSBhbGF1ZGFfaW5mbyBzdHJ1Y3QgYW5kIGZpbmQgdGhlIGRhdGEtd3JpdGUgZW5kcG9pbnQKICAqLwotaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nID0gdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmc7CkBAIC0xMDEzLDcgKzExMzYsNyBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJjOwogCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtPmV4dHJhOwpAQCAtMTEyMSwzICsxMjQ0LDQ4IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgYWxhdWRhX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gYWxhdWRhX3VzYl9pZHMpICsgYWxhdWRhX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOworCXVzLT50cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMTsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1hbGF1ZGEiLAorCS5wcm9iZSA9CWFsYXVkYV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlhbGF1ZGFfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxhdWRhX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZhbGF1ZGFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsYXVkYV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFsYXVkYV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbGF1ZGFfaW5pdCk7Cittb2R1bGVfZXhpdChhbGF1ZGFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwMGY4Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgIChjKSAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Ci0gKgotICogU2VlIGFsYXVkYS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9BTEFVREFfSAotI2RlZmluZSBfVVNCX0FMQVVEQV9ICi0KLS8qCi0gKiBTdGF0dXMgYnl0ZXMKLSAqLwotI2RlZmluZSBBTEFVREFfU1RBVFVTX0VSUk9SCQkweDAxCi0jZGVmaW5lIEFMQVVEQV9TVEFUVVNfUkVBRFkJCTB4NDAKLQotLyoKLSAqIENvbnRyb2wgb3Bjb2RlcyAoZm9yIHJlcXVlc3QgZmllbGQpCi0gKi8KLSNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TVEFUVVMJMHgwOAotI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NUQVRVUwkweDk4Ci0jZGVmaW5lIEFMQVVEQV9BQ0tfWERfTUVESUFfQ0hBTkdFCTB4MGEKLSNkZWZpbmUgQUxBVURBX0FDS19TTV9NRURJQV9DSEFOR0UJMHg5YQotI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NJRwkJMHg4NgotI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NJRwkJMHg5NgotCi0vKgotICogQnVsayBjb21tYW5kIGlkZW50aXR5IChieXRlIDApCi0gKi8KLSNkZWZpbmUgQUxBVURBX0JVTEtfQ01ECQkJMHg0MAotCi0vKgotICogQnVsayBvcGNvZGVzIChieXRlIDEpCi0gKi8KLSNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1JFRFVfREFUQQkweDg1Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX1JFQURfQkxPQ0sJCTB4OTQKLSNkZWZpbmUgQUxBVURBX0JVTEtfRVJBU0VfQkxPQ0sJCTB4YTMKLSNkZWZpbmUgQUxBVURBX0JVTEtfV1JJVEVfQkxPQ0sJCTB4YjQKLSNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1NUQVRVUzIJCTB4YjcKLSNkZWZpbmUgQUxBVURBX0JVTEtfUkVTRVRfTUVESUEJCTB4ZTAKLQotLyoKLSAqIFBvcnQgdG8gb3BlcmF0ZSBvbiAoYnl0ZSA4KQotICovCi0jZGVmaW5lIEFMQVVEQV9QT1JUX1hECQkJMHgwMAotI2RlZmluZSBBTEFVREFfUE9SVF9TTQkJCTB4MDEKLQotLyoKLSAqIExCQSBhbmQgUEJBIGFyZSB1bnNpZ25lZCBpbnRzLiBTcGVjaWFsIHZhbHVlcy4KLSAqLwotI2RlZmluZSBVTkRFRiAgICAweGZmZmYKLSNkZWZpbmUgU1BBUkUgICAgMHhmZmZlCi0jZGVmaW5lIFVOVVNBQkxFIDB4ZmZmZAotCi1pbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTsKLWludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwkJLyogdG90YWwgbWVkaWEgc2l6ZSBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBwYWdlc2l6ZTsJCS8qIHBhZ2Ugc2l6ZSBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBibG9ja3NpemU7CQkvKiBudW1iZXIgb2YgcGFnZXMgcGVyIGJsb2NrICovCi0JdW5zaWduZWQgaW50IHV6b25lc2l6ZTsJCS8qIG51bWJlciBvZiB1c2FibGUgYmxvY2tzIHBlciB6b25lICovCi0JdW5zaWduZWQgaW50IHpvbmVzaXplOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgem9uZSAqLwotCXVuc2lnbmVkIGludCBibG9ja21hc2s7CQkvKiBtYXNrIHRvIGdldCBwYWdlIGZyb20gYWRkcmVzcyAqLwotCi0JdW5zaWduZWQgY2hhciBwYWdlc2hpZnQ7Ci0JdW5zaWduZWQgY2hhciBibG9ja3NoaWZ0OwotCXVuc2lnbmVkIGNoYXIgem9uZXNoaWZ0OwotCi0JdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCi0JdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCi19OwotCi1zdHJ1Y3QgYWxhdWRhX2luZm8gewotCXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdOwotCWludCB3cl9lcDsJCQkvKiBlbmRwb2ludCB0byB3cml0ZSBkYXRhIG91dCBvZiAqLwotCi0JdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwotfTsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMKaW5kZXggODk4ZTY3ZC4uYzg0NDcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgpAQCAtMjksNiArMzAsNDkgQEAKICNpbmNsdWRlICJzY3NpZ2x1ZS5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK01PRFVMRV9ERVNDUklQVElPTigiU0FUIHN1cHBvcnQgZm9yIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2VzIHdpdGggQVRBQ0IiKTsKK01PRFVMRV9BVVRIT1IoIk1hdHRoaWV1IENhc3RldCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGN5cHJlc3NfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGN5cHJlc3NfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgY3lwcmVzc191bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfY3lwcmVzcy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIC8qCiAgKiBBVEFDQiBpcyBhIHByb3RvY29sIHVzZWQgb24gY3lwcmVzcyB1c2I8LT5hdGEgYnJpZGdlIHRvCiAgKiBzZW5kIHJhdyBBVEEgY29tbWFuZCBvdmVyIG1hc3Mgc3RvcmFnZQpAQCAtMzYsNyArODAsNyBAQAogICogTW9yZSBpbmZvIHRoYXQgYmUgZm91bmQgb24gY3k3YzY4MzEwXzgucGRmIGFuZCBjeTdjNjgzMDBjXzgucGRmCiAgKiBkYXRhc2hlZXQgZnJvbSBjeXByZXNzLmNvbS4KICAqLwotdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKIApAQCAtMTMzLDE5ICsxNzcsMTggQEAKIAogCQkvKiBidWlsZCB0aGUgY29tbWFuZCBmb3IKIAkJICogcmVhZGluZyB0aGUgQVRBIHJlZ2lzdGVycyAqLwotCQlzY3NpX2VoX3ByZXBfY21uZChzcmIsICZzZXMsIE5VTEwsIDAsIDApOwotCQlzcmItPnNkYi5sZW5ndGggPSBzaXplb2YocmVncyk7Ci0JCXNnX2luaXRfb25lKCZzZXMuc2Vuc2Vfc2dsLCByZWdzLCBzcmItPnNkYi5sZW5ndGgpOwotCQlzcmItPnNkYi50YWJsZS5zZ2wgPSAmc2VzLnNlbnNlX3NnbDsKLQkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKLQkJc3JiLT5zZGIudGFibGUubmVudHMgPSAxOworCQlzY3NpX2VoX3ByZXBfY21uZChzcmIsICZzZXMsIE5VTEwsIDAsIHNpemVvZihyZWdzKSk7CisKIAkJLyogd2UgdXNlIHRoZSBzYW1lIGNvbW1hbmQgYXMgYmVmb3JlLCBidXQgd2Ugc2V0CiAJCSAqIHRoZSByZWFkIHRhc2tmaWxlIGJpdCwgZm9yIG5vdCBleGVjdXRpbmcgYXRhY2IgY29tbWFuZCwKIAkJICogYnV0IHJlYWRpbmcgcmVnaXN0ZXIgc2VsZWN0ZWQgaW4gc3JiLT5jbW5kWzRdCiAJCSAqLworCQlzcmItPmNtZF9sZW4gPSAxNjsKKwkJc3JiLT5jbW5kID0gc2VzLmNtbmQ7CiAJCXNyYi0+Y21uZFsyXSA9IDE7CiAKIAkJdXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kKHNyYiwgdXMpOworCQltZW1jcHkocmVncywgc3JiLT5zZW5zZV9idWZmZXIsIHNpemVvZihyZWdzKSk7CiAJCXRtcF9yZXN1bHQgPSBzcmItPnJlc3VsdDsKIAkJc2NzaV9laF9yZXN0b3JlX2NtbmQoc3JiLCAmc2VzKTsKIAkJLyogd2UgZmFpbCB0byBnZXQgcmVnaXN0ZXJzLCByZXBvcnQgaW52YWxpZCBjb21tYW5kICovCkBAIC0xNjIsOCArMjA1LDggQEAKIAogCQkvKiBYWFggd2Ugc2hvdWxkIGdlbmVyYXRlIHNrLCBhc2MsIGFzY3EgZnJvbSBzdGF0dXMgYW5kIGVycm9yCiAJCSAqIHJlZ3MKLQkJICogKHNlZSAxMS4xIEVycm9yIHRyYW5zbGF0aW9uIK0gQVRBIGRldmljZSBlcnJvciB0byBTQ1NJIGVycm9yIG1hcCkKLQkJICogYW5kIGF0YV90b19zZW5zZV9lcnJvciBmcm9tIGxpYmF0YS4KKwkJICogKHNlZSAxMS4xIEVycm9yIHRyYW5zbGF0aW9uIEFUQSBkZXZpY2UgZXJyb3IgdG8gU0NTSSBlcnJvcgorCQkgKiAgbWFwLCBhbmQgYXRhX3RvX3NlbnNlX2Vycm9yIGZyb20gbGliYXRhLikKIAkJICovCiAKIAkJLyogU2Vuc2UgZGF0YSBpcyBjdXJyZW50IGFuZCBmb3JtYXQgaXMgZGVzY3JpcHRvci4gKi8KQEAgLTE5OCwzICsyNDEsNDggQEAKIAlpZiAoc3JiLT5jbW5kWzBdID09IEFUQV8xMikKIAkJc3JiLT5jbWRfbGVuID0gMTI7CiB9CisKKworc3RhdGljIGludCBjeXByZXNzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gY3lwcmVzc191c2JfaWRzKSArIGN5cHJlc3NfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kgd2l0aCBDeXByZXNzIEFUQUNCIjsKKwl1cy0+cHJvdG9faGFuZGxlciA9IGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2g7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeXByZXNzX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWN5cHJlc3MiLAorCS5wcm9iZSA9CWN5cHJlc3NfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JY3lwcmVzc191c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjeXByZXNzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeXByZXNzX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjeXByZXNzX2luaXQpOworbW9kdWxlX2V4aXQoY3lwcmVzc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYWRhODkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogU3VwcG9ydCBmb3IgZW11bGF0aW5nIFNBVCAoYXRhIHBhc3MgdGhyb3VnaCkgb24gZGV2aWNlcyBiYXNlZAotICogICAgICAgb24gdGhlIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2Ugc3VwcG9ydGluZyBBVEFDQi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWF0dGhpZXUgQ2FzdGV0IChjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcikKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCmluZGV4IDE3ZjFhZTIuLjJiNmU1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCkBAIC00OSw2ICs0OSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC01OCwxMiArNTksNjUgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiZGF0YWZhYi5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkppbW1pZSBNYXlmaWVsZCA8bWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKwlzaWduZWQgY2hhcglsdW47CQkvKiB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycyAqLworCisJLyogdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQgKi8KKwl1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCit9OwogCiBzdGF0aWMgaW50IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCQkJIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8pOwogCiAKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGRhdGFmYWJfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRhdGFmYWJfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgZGF0YWZhYl91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGF0YWZhYi5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIHN0YXRpYyBpbmxpbmUgaW50CiBkYXRhZmFiX2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKIAlpZiAobGVuID09IDApCkBAIC01MDAsNyArNTU0LDcgQEAKIAogLy8gVHJhbnNwb3J0IGZvciB0aGUgRGF0YWZhYiBNRENGRS1CCiAvLwotaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbzsKIAlpbnQgcmM7CkBAIC02NjUsMyArNzE5LDQ5IEBACiAJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CisKK3N0YXRpYyBpbnQgZGF0YWZhYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGRhdGFmYWJfdXNiX2lkcykgKyBkYXRhZmFiX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKKwl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGF0YWZhYl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1kYXRhZmFiIiwKKwkucHJvYmUgPQlkYXRhZmFiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWRhdGFmYWJfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGF0YWZhYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZGF0YWZhYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF0YWZhYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmRhdGFmYWJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGF0YWZhYl9pbml0KTsKK21vZHVsZV9leGl0KGRhdGFmYWJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmUzZjI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyogRHJpdmVyIGZvciBEYXRhZmFiIE1EQ0ZFLUIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK2RhdGFmYWJAc2Fja2hlYWRzLm9yZykKLSAqCi0gKiBTZWUgZGF0YWZhYi5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICi0jZGVmaW5lIF9VU0JfREFUQUZBQl9NRENGRV9CX0gKLQotZXh0ZXJuIGludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBkYXRhZmFiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOwkvLyB0b3RhbCBzZWN0b3IgY291bnQKLQl1bnNpZ25lZCBsb25nICAgc3NpemU7CQkvLyBzZWN0b3Igc2l6ZSBpbiBieXRlcwotCXNpZ25lZCBjaGFyCWx1bjsJCS8vIHVzZWQgZm9yIGR1YWwtc2xvdCByZWFkZXJzCi0JCi0JLy8gdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQKLQl1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7CS8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKaW5kZXggNzNhYzcyNi4uNTRjYzk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqIChodHRwOi8vd3d3LmZyZWVjb20uZGUvKQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogCkBAIC0zMyw3ICszNCwxMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJmcmVlY29tLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvciIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKIHN0YXRpYyB2b2lkIHBkdW1wICh2b2lkICosIGludCk7CkBAIC0xMDMsNiArMTA3LDQ3IEBACiAjZGVmaW5lIEZDTV9QQUNLRVRfTEVOR1RICQk2NAogI2RlZmluZSBGQ01fU1RBVFVTX1BBQ0tFVF9MRU5HVEgJNAogCitzdGF0aWMgaW50IGluaXRfZnJlZWNvbShzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGZyZWVjb21fdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2ZyZWVjb20uaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGZyZWVjb21fdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgZnJlZWNvbV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCiBzdGF0aWMgaW50CiBmcmVlY29tX3JlYWRkYXRhIChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cywKIAkJdW5zaWduZWQgaW50IGlwaXBlLCB1bnNpZ25lZCBpbnQgb3BpcGUsIGludCBjb3VudCkKQEAgLTE3Myw3ICsyMTgsNyBAQAogICogVHJhbnNwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IuCiAgKgogICovCi1pbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBmcmVlY29tX2NiX3dyYXAgKmZjYjsKIAlzdHJ1Y3QgZnJlZWNvbV9zdGF0dXMgICpmc3Q7CkBAIC0zNzcsOCArNDIyLDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludAotZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfZnJlZWNvbShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAljaGFyICpidWZmZXIgPSB1cy0+aW9idWY7CkBAIC00MTcsNyArNDYxLDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJcHJpbnRrIChLRVJOX0NSSVQgImZyZWVjb20gcmVzZXQgY2FsbGVkXG4iKTsKIApAQCAtNDc5LDMgKzUyMyw0OCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgZnJlZWNvbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGZyZWVjb21fdXNiX2lkcykgKyBmcmVlY29tX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7CisJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZyZWVjb21fZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtZnJlZWNvbSIsCisJLnByb2JlID0JZnJlZWNvbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlmcmVlY29tX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZyZWVjb21faW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmZyZWVjb21fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZyZWVjb21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZmcmVlY29tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGZyZWVjb21faW5pdCk7Cittb2R1bGVfZXhpdChmcmVlY29tX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkMGZlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIERyaXZlciBmb3IgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IKLSAqCi0gKiBGcmVlY29tIHYwLjE6Ci0gKgotICogRmlyc3QgcmVsZWFzZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBEYXZpZCBCcm93biA8dXNiLXN0b3JhZ2VAZGF2aWRiLm9yZz4KLSAqCi0gKiBTZWUgZnJlZWNvbS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfRlJFRUNPTV9VU0JfSAotI2RlZmluZSBfRlJFRUNPTV9VU0JfSAotCi1leHRlcm4gaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBmcmVlY29tX2luaXQgKHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggMzgzYWJmMi4uODgyYzU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC00NCw2ICs0NCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgpAQCAtNTcsNyArNTgsNTMgQEAKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAic2NzaWdsdWUuaCIKLSNpbmNsdWRlICJpc2QyMDAuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMiKTsKK01PRFVMRV9BVVRIT1IoIkJq9nJuIFN0ZW5iZXJnIDxiam9ybkBoYXh4LnNlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGlzZDIwMF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfaXNkMjAwLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpc2QyMDBfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIFVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgaXNkMjAwX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9pc2QyMDAuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKIAogCiAvKiBUaW1lb3V0IGRlZmluZXMgKGluIFNlY29uZHMpICovCkBAIC0xNTE4LDcgKzE1NjUsNyBAQAogICogSW5pdGlhbGl6YXRpb24gZm9yIHRoZSBJU0QyMDAgCiAgKi8KIAotaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJVVNfREVCVUdQKCJJU0QyMDAgSW5pdGlhbGl6YXRpb24uLi5cbiIpOwogCkBAIC0xNTQ5LDcgKzE1OTYsNyBAQAogICoKICAqLwogCi12b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMSwgb3JpZ19idWZmbGVuOwogCXVuaW9uIGF0YV9jZGIgYXRhQ2RiOwpAQCAtMTU3MCwzICsxNjE3LDQ3IEBACiAKIAlpc2QyMDBfc3JiX3NldF9idWZmbGVuKHNyYiwgb3JpZ19idWZmbGVuKTsKIH0KKworc3RhdGljIGludCBpc2QyMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBpc2QyMDBfdXNiX2lkcykgKyBpc2QyMDBfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT5wcm90b2NvbF9uYW1lID0gIklTRDIwMCBBVEEvQVRBUEkiOworCXVzLT5wcm90b19oYW5kbGVyID0gaXNkMjAwX2F0YV9jb21tYW5kOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXNkMjAwX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWlzZDIwMCIsCisJLnByb2JlID0JaXNkMjAwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWlzZDIwMF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2QyMDBfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmlzZDIwMF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNkMjAwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmaXNkMjAwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlzZDIwMF9pbml0KTsKK21vZHVsZV9leGl0KGlzZDIwMF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTM1ZjRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiBIZWFkZXIgRmlsZSBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQwotICoKLSAqIEZpcnN0IHJlbGVhc2UKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiAoc3VwcG9ydEBpbi1zeXN0ZW0uY29tKQotICoKLSAqIFNlZSBpc2QyMDAuYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfSVNEMjAwX0gKLSNkZWZpbmUgX1VTQl9JU0QyMDBfSAotCi1leHRlcm4gdm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKaW5kZXggZGY2N2YxMy4uMWM2OTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpAQCAtNDYsNiArNDYsNyBAQAogICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTU1LDkgKzU2LDYxIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImp1bXBzaG90LmgiCiAKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIExleGFyIFwiSnVtcHNob3RcIiBDb21wYWN0IEZsYXNoIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiSmltbWllIE1heWZpZWxkIDxtYXlmaWVsZCt1c2JAc2Fja2hlYWRzLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQganVtcHNob3RfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBqdW1wc2hvdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBqdW1wc2hvdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCitzdHJ1Y3QganVtcHNob3RfaW5mbyB7CisgICB1bnNpZ25lZCBsb25nICAgc2VjdG9yczsgICAgIC8qIHRvdGFsIHNlY3RvciBjb3VudCAqLworICAgdW5zaWduZWQgbG9uZyAgIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCisgICAvKiB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldCAqLworICAgdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisgICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CisKIHN0YXRpYyBpbmxpbmUgaW50IGp1bXBzaG90X2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCkBAIC00MjksNyArNDgyLDcgQEAKIAogLy8gVHJhbnNwb3J0IGZvciB0aGUgTGV4YXIgJ0p1bXBzaG90JwogLy8KLWludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm87CiAJaW50IHJjOwpAQCAtNTkyLDMgKzY0NSw0OSBAQAogCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQorCitzdGF0aWMgaW50IGp1bXBzaG90X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0ganVtcHNob3RfdXNiX2lkcykgKyBqdW1wc2hvdF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOworCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIganVtcHNob3RfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtanVtcHNob3QiLAorCS5wcm9iZSA9CWp1bXBzaG90X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWp1bXBzaG90X3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp1bXBzaG90X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZqdW1wc2hvdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQganVtcHNob3RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZqdW1wc2hvdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChqdW1wc2hvdF9pbml0KTsKK21vZHVsZV9leGl0KGp1bXBzaG90X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWJhYzlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIERyaXZlciBmb3IgTGV4YXIgIkp1bXBzaG90IiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrdXNiQHNhY2toZWFkcy5vcmcpCi0gKgotICogU2VlIGp1bXBzaG90LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfSlVNUFNIT1RfSAotI2RlZmluZSBfVVNCX0pVTVBTSE9UX0gKLQotZXh0ZXJuIGludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QganVtcHNob3RfaW5mbyB7Ci0gICB1bnNpZ25lZCBsb25nICAgc2VjdG9yczsgICAgIC8vIHRvdGFsIHNlY3RvciBjb3VudAotICAgdW5zaWduZWQgbG9uZyAgIHNzaXplOyAgICAgICAvLyBzZWN0b3Igc2l6ZSBpbiBieXRlcwotIAotICAgLy8gdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQKLSAgIHVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7Ci0gICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOyAgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7ICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYwppbmRleCAwZDc5YWU1Li43OTUzZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jCkBAIC0xOCw2ICsxOCw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTI1LDcgKzI3LDEwIEBACiAjaW5jbHVkZSAidXNiLmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJrYXJtYS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUmlvIEthcm1hIik7CitNT0RVTEVfQVVUSE9SKCJCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4sIEtlaXRoIEJlbm5ldHQgPGtlaXRoQG1jcy5zdC1hbmQuYWMudWs+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgUklPX1BSRUZJWCAiUklPUFx4MDAiCiAjZGVmaW5lIFJJT19QUkVGSVhfTEVOIDUKQEAgLTM2LDEzICs0MSw1MyBAQAogI2RlZmluZSBSSU9fTEVBVkVfU1RPUkFHRSAweDIKICNkZWZpbmUgUklPX1JFU0VUIDB4QwogCi1leHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEgKik7Ci0KIHN0cnVjdCBrYXJtYV9kYXRhIHsKIAlpbnQgaW5fc3RvcmFnZTsKIAljaGFyICpyZWN2OwogfTsKIAorc3RhdGljIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGthcm1hX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9rYXJtYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwga2FybWFfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYga2FybWFfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2thcm1hLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogLyoKICAqIFNlbmQgY29tbWFuZHMgdG8gUmlvIEthcm1hLgogICoKQEAgLTEwNCw3ICsxNDksNyBAQAogICogVHJhcCBTVEFSVF9TVE9QIGFuZCBSRUFEXzEwIHRvIGxlYXZlL3JlLWVudGVyIHN0b3JhZ2UgbW9kZS4KICAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwcm9wYWdhdGVkIHRvIHRoZSBub3JtYWwgYnVsayBsYXllci4KICAqLwotaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qga2FybWFfZGF0YSAqZGF0YSA9IChzdHJ1Y3Qga2FybWFfZGF0YSAqKSB1cy0+ZXh0cmE7CkBAIC0xMzMsNyArMTc4LDcgQEAKIAlrZnJlZShkYXRhLT5yZWN2KTsKIH0KIAotaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGthcm1hX2RhdGEpLCBHRlBfTk9JTyk7CkBAIC0xNTMsMyArMTk4LDQ4IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCBrYXJtYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGthcm1hX3VzYl9pZHMpICsga2FybWFfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7CisJdXMtPnRyYW5zcG9ydCA9IHJpb19rYXJtYV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrYXJtYV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1rYXJtYSIsCisJLnByb2JlID0Ja2FybWFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0Ja2FybWFfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQga2FybWFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmthcm1hX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrYXJtYV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmthcm1hX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGthcm1hX2luaXQpOworbW9kdWxlX2V4aXQoa2FybWFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjA5NzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9LQVJNQV9VU0JfSAotI2RlZmluZSBfS0FSTUFfVVNCX0gKLQotZXh0ZXJuIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCByaW9fa2FybWFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKaW5kZXggZjk3MGIyNy4uZmUzZmZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYwpAQCAtMzgsMzcgKzM4LDYgQEAKIHN0YXRpYyBpbnQgdXN1X3Byb2JlX3RocmVhZCh2b2lkICphcmcpOwogCiAvKgotICogVGhlIHRhYmxlLgotICovCi0jZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKLQkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKLQkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKLXsgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sYmNkRGV2aWNlTWF4KSwgXAotICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQotCi0jZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKLQkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKLXsgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKLSAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9Ci0KLSNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoteyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAotICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQotCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0jCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgotCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotI3VuZGVmIFVTVUFMX0RFVgotI3VuZGVmIFVOVVNVQUxfREVWCi0jdW5kZWYgQ09NUExJQU5UX0RFVgotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHN0b3JhZ2VfdXNiX2lkcyk7Ci0KLS8qCiAgKiBAdHlwZTogdGhlIG1vZHVsZSB0eXBlIGFzIGFuIGludGVnZXIKICAqLwogdm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpCkBAIC0xNjcsNyArMTM2LDcgQEAKIAkubmFtZSA9CQkibGlidXN1YWwiLAogCS5wcm9iZSA9CXVzdV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzdV9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXN0b3JhZ2VfdXNiX2lkcywKKwkuaWRfdGFibGUgPQl1c2Jfc3RvcmFnZV91c2JfaWRzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwppbmRleCBjN2JmODk1Li4zODAyMzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCkBAIC0zNSw5ICszNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogI2luY2x1ZGUgInVzYi5oIgotI2luY2x1ZGUgIm9uZXRvdWNoLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXh0b3IgVVNCIE9uZVRvdWNoIGhhcmQgZHJpdmUgYnV0dG9uIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgT05FVE9VQ0hfUEtUX0xFTiAgICAgICAgMHgwMgorI2RlZmluZSBPTkVUT1VDSF9CVVRUT04gICAgICAgICBLRVlfUFJPRzEKKworc3RhdGljIGludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcyk7CiBzdGF0aWMgdm9pZCBvbmV0b3VjaF9yZWxlYXNlX2lucHV0KHZvaWQgKm9uZXRvdWNoXyk7CiAKIHN0cnVjdCB1c2Jfb25ldG91Y2ggewpAQCAtNTIsNiArNTksNDYgQEAKIAl1bnNpZ25lZCBpbnQgaXNfb3BlbjoxOwogfTsKIAorCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBvbmV0b3VjaF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfb25ldG91Y2guaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9uZXRvdWNoX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IG9uZXRvdWNoX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIHN0YXRpYyB2b2lkIHVzYl9vbmV0b3VjaF9pcnEoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfb25ldG91Y2ggKm9uZXRvdWNoID0gdXJiLT5jb250ZXh0OwpAQCAtMTI3LDcgKzE3NCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLWludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcykKK3N0YXRpYyBpbnQgb25ldG91Y2hfY29ubmVjdF9pbnB1dChzdHJ1Y3QgdXNfZGF0YSAqc3MpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzcy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwpAQCAtMjM2LDMgKzI4Myw0NiBAQAogCQkJCW9uZXRvdWNoLT5kYXRhLCBvbmV0b3VjaC0+ZGF0YV9kbWEpOwogCX0KIH0KKworc3RhdGljIGludCBvbmV0b3VjaF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIG9uZXRvdWNoX3VzYl9pZHMpICsgb25ldG91Y2hfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFVzZSBkZWZhdWx0IHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG9uZXRvdWNoX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLW9uZXRvdWNoIiwKKwkucHJvYmUgPQlvbmV0b3VjaF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlvbmV0b3VjaF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbmV0b3VjaF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmb25ldG91Y2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9uZXRvdWNoX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmb25ldG91Y2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob25ldG91Y2hfaW5pdCk7Cittb2R1bGVfZXhpdChvbmV0b3VjaF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjN2FhOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX09ORVRPVUNIX0hfCi0jZGVmaW5lIF9PTkVUT1VDSF9IXwotCi0jZGVmaW5lIE9ORVRPVUNIX1BLVF9MRU4gICAgICAgIDB4MDIKLSNkZWZpbmUgT05FVE9VQ0hfQlVUVE9OICAgICAgICAgS0VZX1BST0cxCi0KLWludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCmluZGV4IGJlNDQxZDguLmZjMzEwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKQEAgLTEyMSw2ICsxMjEsNyBAQAogCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLwogCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIGJ1ZmZlciBhY2Nlc3Mgcm91dGluZXMKQEAgLTE5OSw2ICsyMDAsNyBAQAogCS8qIFJldHVybiB0aGUgYW1vdW50IGFjdHVhbGx5IHRyYW5zZmVycmVkICovCiAJcmV0dXJuIGNudDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1Zik7CiAKIC8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKICAqIFNDU0kgcmVzaWR1ZS4KQEAgLTIxNSwzICsyMTcsNCBAQAogCWlmIChidWZsZW4gPCBzY3NpX2J1ZmZsZW4oc3JiKSkKIAkJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIGJ1Zmxlbik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zZXRfeGZlcl9idWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCmluZGV4IDcyN2M1MDYuLjRjYTNiNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKQEAgLTEzNSw2ICsxMzUsMTIgQEAKIAkJaWYgKHNkZXYtPnJlcXVlc3RfcXVldWUtPm1heF9zZWN0b3JzID4gbWF4X3NlY3RvcnMpCiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICAgbWF4X3NlY3RvcnMpOworCX0gZWxzZSBpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKKwkJLyogVGFwZXMgbmVlZCBtdWNoIGhpZ2hlciBtYXhfc2VjdG9yIGxpbWl0cywgc28ganVzdAorCQkgKiByYWlzZSBpdCB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSAoNCBHQiAvIDUxMikgYW5kCisJCSAqIGxldCB0aGUgcXVldWUgc2VnbWVudCBzaXplIHNvcnQgb3V0IHRoZSByZWFsIGxpbWl0LgorCQkgKi8KKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDB4N0ZGRkZGKTsKIAl9CiAKIAkvKiBTb21lIFVTQiBob3N0IGNvbnRyb2xsZXJzIGNhbid0IGRvIERNQTsgdGhleSBoYXZlIHRvIHVzZSBQSU8uCkBAIC01NjMsNCArNTY5LDQgQEAKIAlbN10JPSAweDBhLAkJCSAgICAvKiBhZGRpdGlvbmFsIGxlbmd0aCAqLwogCVsxMl0JPSAweDI0CQkJICAgIC8qIEludmFsaWQgRmllbGQgaW4gQ0RCICovCiB9OwotCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCmluZGV4IDUzMWFlNWMuLmFiNWY5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpAQCAtNDEsNiArNDEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTEsNyArNTIsNTMgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic2RkcjA5LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJpZXMgQnJvdXdlciA8YWViQGN3aS5ubD4sIFJvYmVydCBCYXJ1Y2ggPGF1dG9waGlsZUBzdGFyYmFuZC5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKK3N0YXRpYyBpbnQgdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBzZGRyMDlfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc2RkcjA5X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHNkZHIwOV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCiAKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCkBAIC03MjMsNyArNzcwLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTgzOCw3ICs4ODUsOCBAQAogCWlmIChwYmEgPT0gVU5ERUYpIHsKIAkJcGJhID0gc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShpbmZvLCBsYmEpOwogCQlpZiAoIXBiYSkgewotCQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IGxiYTsKQEAgLTg0OSw3ICs4OTcsNyBAQAogCWlmIChwYmEgPT0gMSkgewogCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgogCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KLQkJcHJpbnRrKCJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTk1NCw3ICsxMDAyLDcgQEAKIAlibG9ja2xlbiA9IChwYWdlbGVuIDw8IGluZm8tPmJsb2Nrc2hpZnQpOwogCWJsb2NrYnVmZmVyID0ga21hbGxvYyhibG9ja2xlbiwgR0ZQX05PSU8pOwogCWlmICghYmxvY2tidWZmZXIpIHsKLQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC05NjUsNyArMTAxMyw3IEBACiAJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlrZnJlZShibG9ja2J1ZmZlcik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTExMTIsNyArMTE2MCw3IEBACiAKIAlpZiAocmVzdWx0KSB7CiAJCVVTX0RFQlVHUCgiUmVzdWx0IG9mIHJlYWRfZGV2aWNlSUQgaXMgJWRcbiIsIHJlc3VsdCk7Ci0JCXByaW50aygic2RkcjA5OiBjb3VsZCBub3QgcmVhZCBjYXJkIGluZm9cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IGNvdWxkIG5vdCByZWFkIGNhcmQgaW5mb1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTE1Myw3ICsxMjAxLDcgQEAKIAkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCiAJCQkiLCBXUCIpOwogCi0JcHJpbnRrKCIlc1xuIiwgYmx1cmJ0eHQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzXG4iLCBibHVyYnR4dCk7CiAKIAlyZXR1cm4gY2FyZGluZm87CiB9CkBAIC0xMTg0LDcgKzEyMzIsNyBAQAogCWFsbG9jX2xlbiA9IChhbGxvY19ibG9ja3MgPDwgQ09OVFJPTF9TSElGVCk7CiAJYnVmZmVyID0ga21hbGxvYyhhbGxvY19sZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXN1bHQgPSAtMTsKIAkJZ290byBkb25lOwogCX0KQEAgLTExOTgsNyArMTI0Niw3IEBACiAJaW5mby0+cGJhX3RvX2xiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CiAKIAlpZiAoaW5mby0+bGJhX3RvX3BiYSA9PSBOVUxMIHx8IGluZm8tPnBiYV90b19sYmEgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTIzOCw3ICsxMjg2LDggQEAKIAkJCWlmIChwdHJbal0gIT0gMCkKIAkJCQlnb3RvIG5vbno7CiAJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKLQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nXG4iLCBpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZ1xuIiwKKwkJICAgICAgIGkpOwogCQljb250aW51ZTsKIAogCW5vbno6CkBAIC0xMjUxLDcgKzEzMDAsOCBAQAogCW5vbmZmOgogCQkvKiBub3JtYWwgUEJBcyBzdGFydCB3aXRoIHNpeCBGRnMgKi8KIAkJaWYgKGogPCA2KSB7Ci0JCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmc6ICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgogCQkJICAgICAgICJyZXNlcnZlZCBhcmVhID0gJTAyWCUwMlglMDJYJTAyWCAiCiAJCQkgICAgICAgImRhdGEgc3RhdHVzICUwMlggYmxvY2sgc3RhdHVzICUwMlhcbiIsCiAJCQkgICAgICAgaSwgcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdLApAQCAtMTI2MSw3ICsxMzExLDggQEAKIAkJfQogCiAJCWlmICgocHRyWzZdID4+IDQpICE9IDB4MDEpIHsKLQkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIGludmFsaWQgYWRkcmVzcyBmaWVsZCAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogUEJBICVkIGhhcyBpbnZhbGlkIGFkZHJlc3MgZmllbGQgIgogCQkJICAgICAgICIlMDJYJTAyWC8lMDJYJTAyWFxuIiwKIAkJCSAgICAgICBpLCBwdHJbNl0sIHB0cls3XSwgcHRyWzExXSwgcHRyWzEyXSk7CiAJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CkBAIC0xMjcwLDcgKzEzMjEsOCBAQAogCiAJCS8qIGNoZWNrIGV2ZW4gcGFyaXR5ICovCiAJCWlmIChwYXJpdHlbcHRyWzZdIF4gcHRyWzddXSkgewotCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCiAJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgcHRyWzZdLCBwdHJbN10pOwogCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwogCQkJY29udGludWU7CkBAIC0xMjg5LDcgKzEzNDEsOCBAQAogCQkgKi8KIAogCQlpZiAobGJhID49IDEwMDApIHsKLQkJCXByaW50aygic2RkcjA5OiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAogCQkJICAgICAgIGxiYSwgaSk7CiAJCQlnb3RvIHBvc3NpYmx5X2VyYXNlOwogCQl9CkBAIC0xMjk3LDcgKzEzNTAsOCBAQAogCQlsYmEgKz0gMTAwMCooaS8weDQwMCk7CiAKIAkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhXSAhPSBVTkRFRikgewotCQkJcHJpbnRrKCJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAogCQkJICAgICAgIGxiYSwgaW5mby0+bGJhX3RvX3BiYVtsYmFdLCBpKTsKIAkJCWdvdG8gcG9zc2libHlfZXJhc2U7CiAJCX0KQEAgLTEzOTksNyArMTQ1Myw3IEBACiAgKiB1bnVzdWFsIGRldmljZXMgbGlzdCBidXQgY2FsbGVkIGZyb20gaGVyZSB0aGVuIExVTiAwIG9mIHRoZSBjb21ibyByZWFkZXIKICAqIGlzIG5vdCByZWNvZ25pemVkLiBCdXQgSSBkbyBub3Qga25vdyB3aGF0IHByZWNpc2VseSB0aGVzZSBjYWxscyBkby4KICAqLwotaW50CitzdGF0aWMgaW50CiB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykgewogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzLT5pb2J1ZjsKQEAgLTE0NDksNyArMTUwMyw3IEBACiAvKgogICogVHJhbnNwb3J0IGZvciB0aGUgTWljcm90ZWNoIERQQ00tVVNCCiAgKi8KLWludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldDsKIApAQCAtMTQ5MSw3ICsxNTQ1LDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItMDkKICAqLwotaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgc2Vuc2VrZXkgPSAwLCBzZW5zZWNvZGUgPSAwOwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhdmVmYWtlc2Vuc2UgPSAwOwpAQCAtMTY5MCw3ICsxNzQ0LDYwIEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIHNkZHIwOSBzdWJkcml2ZXIKICAqLwotaW50CitzdGF0aWMgaW50CiB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKIAlyZXR1cm4gc2RkcjA5X2NvbW1vbl9pbml0KHVzKTsKIH0KKworc3RhdGljIGludCBzZGRyMDlfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBzZGRyMDlfdXNiX2lkcykgKyBzZGRyMDlfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfRFBDTV9VU0IpIHsKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wvQnVsay1FVVNCL1NERFIwOSI7CisJCXVzLT50cmFuc3BvcnQgPSBkcGNtX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJfSBlbHNlIHsKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkVVU0IvU0REUjA5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IHNkZHIwOV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAwOworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkZHIwOV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1zZGRyMDkiLAorCS5wcm9iZSA9CXNkZHIwOV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlzZGRyMDlfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RkcjA5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZGRyMDlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkZHIwOV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkZHIwOV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGRyMDlfaW5pdCk7Cittb2R1bGVfZXhpdChzZGRyMDlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwMTE3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQotICogICAoYykgMjAwMiBBbmRyaWVzIEJyb3V3ZXIgKGFlYkBjd2kubmwpCi0gKgotICogU2VlIHNkZHIwOS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAotI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAotCi0vKiBTYW5kaXNrIFNERFItMDkgc3R1ZmYgKi8KLQotZXh0ZXJuIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotLyogTWljcm90ZWNoIERQQ00tVVNCIHN0dWZmICovCi0KLWV4dGVybiBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKaW5kZXggMGQ4ZGY3NS4uNDRkZmVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTMzLDcgKzM0LDQ4IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInNkZHI1NS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJTaW1vbiBNdW50b24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgc2RkcjU1X3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyNTUuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNkZHI1NV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBzZGRyNTVfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgogCiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQpAQCAtNTEzLDcgKzU1NSw4IEBACiB9CiAKIAotaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKK3N0YXRpYyBpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzAzLDcgKzc0Niw5IEBACiAJCQogCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmEgKyB6b25lICogMTAwMF0gIT0gTk9UX0FMTE9DQVRFRCAmJgogCQkgICAgIWluZm8tPmZvcmNlX3JlYWRfb25seSkgewotCQkJcHJpbnRrKCJzZGRyNTU6IG1hcCBpbmNvbnNpc3RlbmN5IGF0IExCQSAlMDRYXG4iLCBsYmEgKyB6b25lICogMTAwMCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHI1NTogbWFwIGluY29uc2lzdGVuY3kgYXQgTEJBICUwNFhcbiIsCisJCQkgICAgICAgbGJhICsgem9uZSAqIDEwMDApOwogCQkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMTsKIAkJfQogCkBAIC03MzIsNyArNzc3LDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItNTUKICAqLwotaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbnF1aXJ5X3Jlc3BvbnNlWzhdID0gewpAQCAtOTI5LDMgKzk3NCw0OSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOyAvLyBGSVhNRTogc2Vuc2UgYnVmZmVyPwogfQogCisKK3N0YXRpYyBpbnQgc2RkcjU1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gc2RkcjU1X3VzYl9pZHMpICsgc2RkcjU1X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU0REUjU1IjsKKwl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkZHI1NV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1zZGRyNTUiLAorCS5wcm9iZSA9CXNkZHI1NV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlzZGRyNTVfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RkcjU1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZGRyNTVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkZHI1NV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkZHI1NV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGRyNTVfaW5pdCk7Cittb2R1bGVfZXhpdChzZGRyNTVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgxNWEwNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAyIFNpbW9uIE11bnRvbgotICoKLSAqIFNlZSBzZGRyNTUuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX0VVU0JfU0REUjU1X0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX0VVU0JfU0REUjU1X0gKLQotLyogU2FuZGlzayBTRERSLTU1IHN0dWZmICovCi0KLWV4dGVybiBpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKaW5kZXggYWU2ZDY0ODEuLmI2MmEyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC00Miw2ICs0Miw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiAKQEAgLTUyLDcgKzUzLDEwMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPiwgUm9iZXJ0IEJhcnVjaCA8YXV0b3BoaWxlQHN0YXJiYW5kLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKKyNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCisKKyNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKKyNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKKyNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCisjZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAorCisvKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0CisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNworCisvKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKKyNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKKyNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgorCisvKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQorI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAorCisvKiBRdWFsaWZpZXIgYml0cyAqLworI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLworI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLworCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKKworLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLworCisvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLworCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLworI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KKworLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLworI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KKworLyogVVNCQVQgRmVhdHVyZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4CisjZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAorI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKKworc3RydWN0IHVzYmF0X2luZm8geworCWludCBkZXZpY2V0eXBlOworCisJLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhMU0IsTVNCKSAoICgodTE2KShMU0IpKSB8ICggKCh1MTYpKE1TQikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNjMsNiArMTU3LDQ4IEBACiBzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CiAKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiYXRfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JhdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c2JhdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKwogLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBIHJlYWQvd3JpdGUgc2VjdG9ycyBjb21tYW5kCiAgKiBVc2UgY21kPTB4MjAgZm9yIHJlYWQsIGNtZD0weDMwIGZvciB3cml0ZQpAQCAtMTY4NCwzNyArMTgyMCw2MSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCi1pbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfSFA4MjAwKTsKIH0KIAotCi1pbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfRkxBU0gpOwogfQogCi1pbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHVzYmF0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gaW5pdF91c2JhdCh1cywgMCk7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHVzYmF0X3VzYl9pZHMpICsgdXNiYXRfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFRoZSBhY3R1YWwgdHJhbnNwb3J0IHdpbGwgYmUgZGV0ZXJtaW5lZCBsYXRlciBieSB0aGUKKwkgKiBpbml0aWFsaXphdGlvbiByb3V0aW5lOyB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4KKwkgKi8KKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU2h1dHRsZSBVU0JBVCI7CisJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogRGVmYXVsdCB0cmFuc3BvcnQgZnVuY3Rpb24uIEF0dGVtcHRzIHRvIGRldGVjdCB3aGljaCB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHNob3VsZCBiZSBjYWxsZWQsIG1ha2VzIGl0IHRoZSBuZXcgZGVmYXVsdCwgYW5kIGNhbGxzIGl0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gT3VyIHVzYmF0X2luaXQoKSBmdW5jdGlvbiBkZXRlY3RzIHRoZQotICogZGV2aWNlIHR5cGUgYW5kIGNoYW5nZXMgdGhlIHVzLT50cmFuc3BvcnQgcHRyIHRvIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHJlbGV2YW50IHRvIHRoZSBkZXZpY2UuCi0gKiBIb3dldmVyLCB3ZSdsbCBzdXBwb3J0IHRoaXMgaW1wb3NzaWJsZSg/KSBjYXNlIGFueXdheS4KLSAqLwotaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JhdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy11c2JhdCIsCisJLnByb2JlID0JdXNiYXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiYXRfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiYXRfaW5pdCh2b2lkKQogewotCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvKikgKHVzLT5leHRyYSk7Ci0KLQlpZiAodXNiYXRfc2V0X3RyYW5zcG9ydCh1cywgaW5mbywgMCkpCi0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0KLQlyZXR1cm4gdXMtPnRyYW5zcG9ydChzcmIsIHVzKTsJCisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKIH0KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmF0X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiYXRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JhdF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmZjNDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCi0gKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Ci0gKgotICogU2VlIHNodXR0bGVfdXNiYXQuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX1VTQkFUX0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX1VTQkFUX0gKLQotLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLwotI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKLSNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCi0KLSNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKLSNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKLSNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCi0jZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAotCi0vKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAotI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKLSNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0Ci0jZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNwotCi0vKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KLSNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKLSNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKLSNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgotCi0vKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQotI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAotCi0vKiBRdWFsaWZpZXIgYml0cyAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLwotCi0vKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKLQotLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKLQotLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLwotCi0vKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLwotCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCi0jZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCi0jZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLwotI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KLQotLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KLQotLyogVVNCQVQgRmVhdHVyZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4Ci0jZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAotI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCi0jZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKLQotZXh0ZXJuIGludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgdXNiYXRfaW5mbyB7Ci0JaW50IGRldmljZXR5cGU7Ci0KLQkvKiBVc2VkIGZvciBGbGFzaCByZWFkZXJzIG9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIHNlY3RvcnM7ICAgICAvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLwotCi0JdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCi0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBmYjY1ZDIyMS4uNDlhZWRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAkJc3RhdHVzID0gdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXJldHVybiBzdGF0dXM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jb250cm9sX21zZyk7CiAKIC8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHVzYl9jbGVhcl9oYWx0KCkgdGhhdCBhbGxvd3MgZWFybHkgdGVybWluYXRpb24gYW5kCiAgKiBkb2Vzbid0IHJlYWQgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgLS0gdGhpcyBpcyBiZWNhdXNlIHNvbWUgZGV2aWNlcwpAQCAtMjU0LDYgKzI1NSw3IEBACiAJVVNfREVCVUdQKCIlczogcmVzdWx0ID0gJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jbGVhcl9oYWx0KTsKIAogCiAvKgpAQCAtMzUyLDYgKzM1NCw3IEBACiAJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBzaXplLCByZXN1bHQsCiAJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfY3RybF90cmFuc2Zlcik7CiAKIC8qCiAgKiBSZWNlaXZlIG9uZSBpbnRlcnJ1cHQgYnVmZmVyLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKQEAgLTQwNyw2ICs0MTAsNyBAQAogCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsIAogCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKTsKIAogLyoKICAqIFRyYW5zZmVyIGEgc2NhdHRlci1nYXRoZXIgbGlzdCB2aWEgYnVsayB0cmFuc2ZlcgpAQCAtNDc0LDYgKzQ3OCw3IEBACiAJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIHBhcnRpYWwpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9idWxrX3NyYik7CiAKIC8qCiAgKiBUcmFuc2ZlciBhbiBlbnRpcmUgU0NTSSBjb21tYW5kJ3Mgd29ydGggb2YgZGF0YSBwYXlsb2FkIG92ZXIgdGhlIGJ1bGsKQEAgLTUwOSw2ICs1MTQsNyBAQAogCQkqcmVzaWR1YWwgPSBsZW5ndGhfbGVmdDsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVHJhbnNwb3J0IHJvdXRpbmVzCkBAIC03ODEsNyArNzg3LDcgQEAKIAkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KIAlpZiAoKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgfHwgc3JiLT5zZW5zZV9idWZmZXJbMl0gPT0gMCkgJiYKIAkJCXNjc2lfYnVmZmxlbihzcmIpIC0gc2NzaV9nZXRfcmVzaWQoc3JiKSA8IHNyYi0+dW5kZXJmbG93KQotCQlzcmItPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpIHwgKFNVR0dFU1RfUkVUUlkgPDwgMjQpOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKIAogCWxhc3Rfc2VjdG9yX2hhY2tzKHVzLCBzcmIpOwogCXJldHVybjsKQEAgLTk0MCw2ICs5NDYsNyBAQAogCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCBwaXBlKTsKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0NCX3RyYW5zcG9ydCk7CiAKIC8qCiAgKiBCdWxrIG9ubHkgdHJhbnNwb3J0CkBAIC0xMTU2LDYgKzExNjMsNyBAQAogCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvLCB3ZSdyZSBpbiB0cm91YmxlICovCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZXNldCByb3V0aW5lcwpAQCAtMTIzMCw2ICsxMjM4LDcgQEAKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIHVzLT5pb2J1ZiwgQ0JfUkVTRVRfQ01EX1NJWkUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQ0JfcmVzZXQpOwogCiAvKiBUaGlzIGlzc3VlcyBhIEJ1bGstb25seSBSZXNldCB0byB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uLCBpbmNsdWRpbmcKICAqIGNsZWFyaW5nIHRoZSBzdWJzZXF1ZW50IGVuZHBvaW50IGhhbHRzIHRoYXQgbWF5IG9jY3VyLgpAQCAtMTI0Miw2ICsxMjUxLDcgQEAKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIE5VTEwsIDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQnVsa19yZXNldCk7CiAKIC8qIElzc3VlIGEgVVNCIHBvcnQgcmVzZXQgdG8gdGhlIGRldmljZS4gIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZAogICogdXMtPmRldl9tdXRleC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQxMmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA1ODQsIDB4MDAwOCwgMHgwMTAyLCAweDAxMDIsCisJCSJGdWppZmlsbSIsCisJCSJEUEMtUjEgKEFsYXVkYSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCisJCSJPbHltcHVzIiwKKwkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZTZkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKQEAgLTAsMCArMSwzNCBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIGRldmljZXMgYmFzZWQgb24gdGhlIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2UKKyAqCXdpdGggc3VwcG9ydCBmb3IgQVRBQ0IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCX01PRFVMRSkKKworLyogQ1k3QzY4MzAwIDogc3VwcG9ydCBhdGFjYiAqLworVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMCwgMHgwMDAwLCAweDk5OTksCisJCSJDeXByZXNzIiwKKwkJIkN5cHJlc3MgQVQyTFAiLAorCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKy8qIENZN0M2ODMxMCA6IHN1cHBvcnQgYXRhY2IgYW5kIGF0YWNiMiAqLworVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMSwgMHgwMDAwLCAweDk5OTksCisJCSJDeXByZXNzIiwKKwkJIkN5cHJlc3MgSVNELTMwMExQIiwKKwkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RhdGFmYWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI5OGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RhdGFmYWIuaApAQCAtMCwwICsxLDk4IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQl9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAorCQkiRGF0YWZhYiIsCisJCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgRGF0YWZhYi1iYXNlZCBkZXZpY2VzIG1heSBvciBtYXkgbm90IHdvcmsKKyAqIHVzaW5nIHRoZSBjdXJyZW50IGRyaXZlci4uLnRoZSAweGZmZmYgaXMgYXJiaXRyYXJ5IHNpbmNlIEkKKyAqIGRvbid0IGtub3cgd2hhdCBkZXZpY2UgdmVyc2lvbnMgZXhpc3QgZm9yIHRoZXNlIGd1eXMuCisgKgorICogVGhlIDB4YTAwMyBhbmQgMHhhMDA0IGRldmljZXMgaW4gcGFydGljdWxhciBJJ20gY3VyaW91cyBhYm91dC4KKyAqIEknbSB0b2xkIHRoZXkgZXhpc3QgYnV0IHNvIGZhciBub2JvZHkgaGFzIGNvbWUgZm9yd2FyZCB0byBzYXkgdGhhdAorICogdGhleSB3b3JrIHdpdGggdGhpcyBkcml2ZXIuICBHaXZlbiB0aGUgc3VjY2VzcyB3ZSd2ZSBoYWQgZ2V0dGluZworICogb3RoZXIgRGF0YWZhYi1iYXNlZCBjYXJkcyBvcGVyYXRpb25hbCB3aXRoIHRoaXMgZHJpdmVyLCBJJ3ZlIGRlY2lkZWQKKyAqIHRvIGxlYXZlIHRoZXNlIHR3byBkZXZpY2VzIGluIHRoZSBsaXN0LgorICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDEsIDB4MDAwMCwgMHhmZmZmLAorCQkiU0lJRy9EYXRhZmFiIiwKKwkJIlNJSUcvRGF0YWZhYiBNZW1vcnkgU3RpY2srQ0YgUmVhZGVyL1dyaXRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKiBSZXBvcnRlZCBieSBKb3NlZiBSZWlzaW5nZXIgPGpvc2VmLnJlaXNpbmdlckBuZXRjb2xvZ25lLmRlPiAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAyLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJNRDIvTUQzIERpc2sgZW5jbG9zdXJlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA0LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDUsIDB4MDAwMCwgMHhmZmZmLAorCQkiUE5ZL0RhdGFmYWIiLAorCQkiUE5ZL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCisJCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCisJCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKiBSZXBvcnRlZCBieSBGZWxpeCBNb2VsbGVyIDxmZWxpeEBkZXJrbGVja3MuZGU+CisgKiBpbiBHZXJtYW55IHRoaXMgaXMgc29sZCBieSBIYW1hIHdpdGggdGhlIHByb2R1Y3RudW1iZXIgNDY5NTIKKyAqIGFzICJEdWFsU2xvdCBDb21wYWN0Rmxhc2goVE0pICYgTVN0aWNrIERyaXZlIFVTQiIKKyAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwYiwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhRmFiIFN5c3RlbXMgSW5jLiIsCisJCSJVU0IgQ0YrTVMiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIkNGIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGNmZGU3NGEuLjFjMWY2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtNTMsNiArNTMsMTEgQEAKICAqIGFzIG9wcG9zZWQgdG8gZGV2aWNlcyB0aGF0IGRvIHNvbWV0aGluZyBzdHJhbmdlbHkgb3Igd3JvbmdseS4KICAqLwogCisjaWYgIWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgJiYgXAorCQkhZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5X01PRFVMRSkKKyNkZWZpbmUgTk9fU0REUjA5CisjZW5kaWYKKwogLyogcGF0Y2ggc3VibWl0dGVkIGJ5IFZpdmlhbiBCcmVnaWVyIDxWaXZpYW4uQnJlZ2llckBpbWFnLmZyPgogICovCiBVTlVTVUFMX0RFViggIDB4MDNlYiwgMHgyMDAyLCAweDAxMDAsIDB4MDEwMCwKQEAgLTgwLDE4ICs4NSw2IEBACiAJCSJDRC1Xcml0ZXIrIiwKIAkJVVNfU0NfODA3MCwgVVNfUFJfQ0IsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMjA3LCAweDAwMDEsIDB4MDAwMSwKLQkJIkhQIiwKLQkJIkNELVdyaXRlcisgODIwMGUiLAotCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCi0KLVVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAzMDcsIDB4MDAwMSwgMHgwMDAxLAotCQkiSFAiLAotCQkiQ0QtV3JpdGVyKyBDRC00ZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBCZW4gRWZyb3MgPGJlbkBwYy1kb2N0b3IuY29tPiAqLwogVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDcwYywgMHgwMDAwLCAweDAwMDAsCiAJCSJIUCIsCkBAIC0yNDYsMTIgKzIzOSw3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKLQkJIk1pY3JvdGVjaCIsCi0JCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKLSNlbHNlCisjaWZkZWYgTk9fU0REUjA5CiBVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKIAkJIk1pY3JvdGVjaCIsCiAJCSJDYW1lcmFNYXRlIiwKQEAgLTI4OCwxMyArMjc2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PVF9MT0NLQUJMRSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi1VTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKLQkJIlJpbyIsCi0JCSJSaW8gS2FybWEiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFRhbWFzIEtlcmVjc2VuIDxrZXJlY3NlbkBiaWdmb290LmNvbT4KICAqIE9idmlvdXNseSB0aGUgUFJPTSBoYXMgbm90IGJlZW4gY3VzdG9taXplZCBieSB0aGUgVkFSOwogICogdGhlIFZlbmRvciBhbmQgUHJvZHVjdCBzdHJpbmcgZGVzY3JpcHRvcnMgYXJlOgpAQCAtMzc1LDIyICszNTYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9NQVhfU0VDVE9SU19NSU4pLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IKLS8qIENZN0M2ODMwMCA6IHN1cHBvcnQgYXRhY2IgKi8KLVVOVVNVQUxfREVWKCAgMHgwNGI0LCAweDY4MzAsIDB4MDAwMCwgMHg5OTk5LAotCQkiQ3lwcmVzcyIsCi0JCSJDeXByZXNzIEFUMkxQIiwKLQkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCTApLAotCi0vKiBDWTdDNjgzMTAgOiBzdXBwb3J0IGF0YWNiIGFuZCBhdGFjYjIgKi8KLVVOVVNVQUxfREVWKCAgMHgwNGI0LCAweDY4MzEsIDB4MDAwMCwgMHg5OTk5LAotCQkiQ3lwcmVzcyIsCi0JCSJDeXByZXNzIElTRC0zMDBMUCIsCi0JCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLAotCQkwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBTaW1vbiBMZXZpdHQgPHNpbW9uQHdoYXR0Zi5jb20+CiAgKiBUaGlzIGVudHJ5IG5lZWRzIFN1YiBhbmQgUHJvdG8gZmllbGRzICovCiBVTlVTVUFMX0RFViggIDB4MDRiOCwgMHgwNjAxLCAweDAxMDAsIDB4MDEwMCwKQEAgLTQ2NywyMCArNDMyLDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwMywgMHgwMDAwLCAweDk5OTksCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSMDkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotCi0vKiBUaGlzIGVudHJ5IGlzIGZyb20gQW5kcmllcy5Ccm91d2VyQGN3aS5ubCAqLwotVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCi0JCSJTQ00gTWljcm9zeXN0ZW1zIiwKLQkJImVVU0IgU21hcnRNZWRpYSAvIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQsCi0JCTApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAogCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCiAJCSJlVVNCIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKQEAgLTUzNSwxNCArNDg3LDYgQEAKIAkJIkNELVJXIERldmljZSIsCiAJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAotVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MTAxMCwgMHgwMDAwLCAweDk5OTksCi0JCSJTaHV0dGxlL1NDTSIsCi0JCSJVU0JBVC0wMiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAotCQlVU19GTF9TSU5HTEVfTFVOKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBEbWl0cnkgS2hseXN0b3YgPGFkbWluaW11c0BnbWFpbC5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDRlOCwgMHg1MDdjLCAweDAyMjAsIDB4MDIyMCwKIAkJIlNhbXN1bmciLApAQCAtNjQ1LDE0ICs1ODksNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYiwgMHgwMTAwLCAweDAxMTAsCi0JCSJTb255IiwKLQkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZywgPG9saEBzdXNlLmRlPiBTdVNFIEJ1Z3ppbGxhICM0OTA0OSAqLwogVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYywgMHgwNTAxLCAweDIwMDAsCiAJCSJTb255IiwKQEAgLTc0OSwxMyArNjg1LDYgQEAKIAkJIlNpbGljb24gTWVkaWEgUi9XIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotVU5VU1VBTF9ERVYoICAweDA1ODQsIDB4MDAwOCwgMHgwMTAyLCAweDAxMDIsCi0JCSJGdWppZmlsbSIsCi0JCSJEUEMtUjEgKEFsYXVkYSkiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFJURSA8cmFzemlsa2lAeWFuZGV4LnJ1PiAqLwogVU5VU1VBTF9ERVYoICAweDA1OGYsIDB4NjM4NywgMHgwMTQxLCAweDAxNDEsCiAJCSJKZXRGbGFzaCIsCkBAIC03OTgsMzIgKzcyNyw2IEBACiAJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCiAJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAwMzEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlVTQi9JREUgQnJpZGdlIChBVEEvQVRBUEkpIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDMwMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHg1NzAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJVU0IgU3RvcmFnZSBBZGFwdGVyIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgU3ZlbiBBbmRlcnNvbiA8c3Zlbi1saW51eEBhbmRlcnNvbi5kZT4KICAqIFRoZXJlIGFyZSBhdCBsZWFzdCBmb3VyIFByb2R1Y3RJRHMgdXNlZCBmb3IgaVBvZHMsIHNvIEkgYWRkZWQgMHgxMjAyIGFuZAogICogMHgxMjA0LiBUaGV5IGp1c3QgbmVlZCB0aGUgVVNfRkxfRklYX0NBUEFDSVRZLiBBcyB0aGUgYmNkRGV2aWNlIGFwcGVhcnMKQEAgLTg3NywxNCArNzgwLDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9wdGlvbl9tc19pbml0LAogCQkwKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCi0JCSJMZXhhciIsCi0JCSJKdW1wc2hvdCBVU0IgQ0YgUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfSlVNUFNIT1QsIE5VTEwsCi0JCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBCbGFrZSBNYXRoZW55IDxibWF0aGVueUBwdXJkdWUuZWR1PiAqLwogVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4YjAwMiwgMHgwMDAwLCAweDAxMTMsCiAJCSJMZXhhciIsCkBAIC05MzUsMTQgKzgzMCw2IEBACiAJCSJGbG9wcHkgRHJpdmUiLAogCQlVU19TQ19VRkksIFVTX1BSX0NCLCBOVUxMLCAwICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDY2YiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwKLQkJIk9seW1wdXMiLAotCQkiQ2FtZWRpYSBNQVVTQi0yIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAotCQkwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBEYXJzZW4gTHUgPGRhcnNlbkBtaWNyby5lZS5udGh1LmVkdS50dz4gKi8KIFVOVVNVQUxfREVWKCAweDA2NmYsIDB4ODAwMCwgMHgwMDAxLCAweDAwMDEsCiAJCSJTaWdtYVRlbCIsCkBAIC0xMDQzLDM1ICs5MzAsMTIgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFItMDViIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLSNlbmRpZgotCiBVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKIAkJIlNhbmRpc2siLAogCQkiSW1hZ2VNYXRlIFNERFItMTIiLAogCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSLTA5IiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAotCQkwKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLVVOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjMDEsIDB4MDAwMCwgMHg5OTk5LAotCQkiRnJlZWNvbSIsCi0JCSJVU0ItSURFIiwKLQkJVVNfU0NfUUlDLCBVU19QUl9GUkVFQ09NLCBmcmVlY29tX2luaXQsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEVlcm8gVm9sb3RpbmVuIDxlZXJvQHBpbmctdmlpbmkub3JnPiAqLwogVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmNjZCwgMHgwMDAwLCAweDk5OTksCiAJCSJGcmVlY29tIFRlY2hub2xvZ2llcyIsCkBAIC0xMDkxLDEyICs5NTUsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMTEwNCwxMDggKzk2Myw2IEBACiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCi0JCSJPbHltcHVzIiwKLQkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDAgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAotCQkiRGF0YWZhYiIsCi0JCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIERhdGFmYWItYmFzZWQgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrCi0gKiB1c2luZyB0aGUgY3VycmVudCBkcml2ZXIuLi50aGUgMHhmZmZmIGlzIGFyYml0cmFyeSBzaW5jZSBJCi0gKiBkb24ndCBrbm93IHdoYXQgZGV2aWNlIHZlcnNpb25zIGV4aXN0IGZvciB0aGVzZSBndXlzLgotICoKLSAqIFRoZSAweGEwMDMgYW5kIDB4YTAwNCBkZXZpY2VzIGluIHBhcnRpY3VsYXIgSSdtIGN1cmlvdXMgYWJvdXQuCi0gKiBJJ20gdG9sZCB0aGV5IGV4aXN0IGJ1dCBzbyBmYXIgbm9ib2R5IGhhcyBjb21lIGZvcndhcmQgdG8gc2F5IHRoYXQKLSAqIHRoZXkgd29yayB3aXRoIHRoaXMgZHJpdmVyLiAgR2l2ZW4gdGhlIHN1Y2Nlc3Mgd2UndmUgaGFkIGdldHRpbmcKLSAqIG90aGVyIERhdGFmYWItYmFzZWQgY2FyZHMgb3BlcmF0aW9uYWwgd2l0aCB0aGlzIGRyaXZlciwgSSd2ZSBkZWNpZGVkCi0gKiB0byBsZWF2ZSB0aGVzZSB0d28gZGV2aWNlcyBpbiB0aGUgbGlzdC4KLSAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAxLCAweDAwMDAsIDB4ZmZmZiwKLQkJIlNJSUcvRGF0YWZhYiIsCi0JCSJTSUlHL0RhdGFmYWIgTWVtb3J5IFN0aWNrK0NGIFJlYWRlci9Xcml0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLS8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYi9Vbmtub3duIiwKLQkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNCwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCi0JCSJQTlkvRGF0YWZhYiIsCi0JCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCi0JCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKLQkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotI2VuZGlmCi0JCQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLS8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIkRhdGFmYWIiLAotCQkiTURTTS1CIHJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfRklYX0lOUVVJUlkgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLS8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCi0JCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLS8qIFNNIHBhcnQgLSBhZWIgPEFuZHJpZXMuQnJvdXdlckBjd2kubmw+ICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCi0JCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotLyogUmVwb3J0ZWQgYnkgRmVsaXggTW9lbGxlciA8ZmVsaXhAZGVya2xlY2tzLmRlPgotICogaW4gR2VybWFueSB0aGlzIGlzIHNvbGQgYnkgSGFtYSB3aXRoIHRoZSBwcm9kdWN0bnVtYmVyIDQ2OTUyCi0gKiBhcyAiRHVhbFNsb3QgQ29tcGFjdEZsYXNoKFRNKSAmIE1TdGljayBEcml2ZSBVU0IiCi0gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMGIsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YUZhYiBTeXN0ZW1zIEluYy4iLAotCQkiVVNCIENGK01TIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi0jZW5kaWYKLQogLyogRGF0YWZhYiBLRUNGLVVTQiAvIFNhZ2F0ZWsgRENTLUNGIC8gU2ltcGxldGVjaCBGbGFzaGxpbmsgVUNGLTEwMAogICogT25seSByZXZpc2lvbiAxLjEzIHRlc3RlZCAoc2FtZSBmb3IgYWxsIG9mIHRoZSBhYm92ZSBkZXZpY2VzLAogICogYmFzZWQgb24gdGhlIERhdGFmYWIgREYtVUctMDcgY2hpcCkuICBOZWVkZWQgZm9yIFVTX0ZMX0ZJWF9JTlFVSVJZLgpAQCAtMTQwOSwyOSArMTE2Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TQU5FX1NFTlNFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi1VTlVTVUFMX0RFViggIDB4MGJmNiwgMHhhMDAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkFUSSIsCi0JCSJVU0IgQ2FibGUgMjA1IiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLVVOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCi0JCSJBY29tZGF0YSIsCi0JCSJDRiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLVVOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCi0JCSJBY29tZGF0YSIsCi0JCSJTTSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KIFVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDczMTAsIDB4MDAwMCwgMHg5OTk5LAogCQkiTWF4dG9yIiwKIAkJIlVTQiB0byBTQVRBIiwKQEAgLTE0NDgsMjMgKzExODIsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0vKiBTdWJtaXR0ZWQgYnk6IE5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PgotICogTmVlZGVkIGZvciBPbmVUb3VjaCBleHRlbnNpb24gdG8gdXNiLXN0b3JhZ2UKLSAqCi0gKi8KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gKLQlVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDAwLCAweDAwMDAsIDB4OTk5OSwKLQkJCSJNYXh0b3IiLAotCQkJIk9uZVRvdWNoIEV4dGVybmFsIEhhcmRkcml2ZSIsCi0JCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKLQkJCTApLAotCVVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMTAsIDB4MDAwMCwgMHg5OTk5LAotCQkJIk1heHRvciIsCi0JCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKLQkJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAotCQkJMCksCi0jZW5kaWYKLQogLyogU3VibWl0dGVkIGJ5IEpvcmlzIFN0cnV5dmUgPGpvcmlzQHN0cnV5dmUuYmU+ICovCiBVTlVTVUFMX0RFViggMHgwZDk2LCAweDQxMGEsIDB4MDAwMSwgMHhmZmZmLAogCQkiTWVkaW9uIiwKQEAgLTIxMTcsMTQgKzE4MzQsNiBAQAogCQkiTWljcm8gTWluaSAxR0IiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgVVNfRkxfTk9UX0xPQ0tBQkxFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci1VTlVTVUFMX0RFViggIDB4NTVhYSwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwgCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSNTUiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4pLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEFuZHJldyBTaW1tb25zIDxhbmRyZXcuc2ltbW9uc0BnbWFpbC5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4ZWQwNiwgMHg0NTAwLCAweDAwMDEsIDB4MDAwMSwKIAkJIkRhdGFTdG9yIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTg2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCisJCSJGcmVlY29tIiwKKwkJIlVTQi1JREUiLAorCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGluaXRfZnJlZWNvbSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk5ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDBfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKKwkJIlNvbnkiLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiQVRJIiwKKwkJIlVTQiBDYWJsZSAyMDUiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2p1bXBzaG90LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTU0OWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2p1bXBzaG90LmgKQEAgLTAsMCArMSwyNyBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBMZXhhciAiSnVtcHNob3QiIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCisJCSJMZXhhciIsCisJCSJKdW1wc2hvdCBVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfSlVNUFNIT1QsIE5VTEwsCisJCVVTX0ZMX05FRURfT1ZFUlJJREUpLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfa2FybWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmFlM2EwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKQEAgLTAsMCArMSwyNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBSaW8gS2FybWEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKKwkJIlJpbyIsCisJCSJSaW8gS2FybWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkzMDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBNYXh0b3IgT25lVG91Y2ggVVNCIGhhcmQgZHJpdmUncyBidXR0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0hfTU9EVUxFKQorCisvKiBTdWJtaXR0ZWQgYnk6IE5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PgorICogTmVlZGVkIGZvciBPbmVUb3VjaCBleHRlbnNpb24gdG8gdXNiLXN0b3JhZ2UKKyAqLworVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAwMCwgMHgwMDAwLCAweDk5OTksCisJCSJNYXh0b3IiLAorCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDEwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApAQCAtMCwwICsxLDU2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUjA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworLyogVGhpcyBlbnRyeSBpcyBmcm9tIEFuZHJpZXMuQnJvdXdlckBjd2kubmwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAorCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCisJCSJlVVNCIFNtYXJ0TWVkaWEgLyBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA2NmIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCisJCSJPbHltcHVzIiwKKwkJIkNhbWVkaWEgTUFVU0ItMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4MWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTVfTU9EVUxFKQorCisvKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJEYXRhZmFiIiwKKwkJIk1EU00tQiByZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIlNNIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsCisJCSJIUCIsCisJCSJDRC1Xcml0ZXIrIDgyMDBlIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMzA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgQ0QtNGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2h1dHRsZS9TQ00iLAorCQkiVVNCQVQtMDIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCA0YmVjZjQ5Li44MDYwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CiAgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCi0gKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKiAgIChjKSAyMDAzLTIwMDkgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKICAqCiAgKiBJbml0aWFsIHdvcmsgYnk6CiAgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQpAQCAtNjYsMzkgKzY2LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0jaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotI2luY2x1ZGUgInNkZHIwOS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotI2luY2x1ZGUgInNkZHI1NS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLSNpbmNsdWRlICJmcmVlY29tLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0jaW5jbHVkZSAiaXNkMjAwLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotI2luY2x1ZGUgImRhdGFmYWIuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotI2luY2x1ZGUgImp1bXBzaG90LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gKLSNpbmNsdWRlICJvbmV0b3VjaC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotI2luY2x1ZGUgImFsYXVkYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0jaW5jbHVkZSAia2FybWEuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0jaW5jbHVkZSAiY3lwcmVzc19hdGFjYi5oIgotI2VuZGlmCiAjaW5jbHVkZSAic2llcnJhX21zLmgiCiAjaW5jbHVkZSAib3B0aW9uX21zLmgiCiAKQEAgLTExOCwzNiArODUsOCBAQAogCiAvKgogICogVGhlIGVudHJpZXMgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kLCBsaW5lIGZvciBsaW5lLAotICogd2l0aCB0aGUgZW50cmllcyBvZiB1c191bnVzdWFsX2Rldl9saXN0W10uCisgKiB3aXRoIHRoZSBlbnRyaWVzIGluIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSwgZGVmaW5lZCBpbiB1c3VhbC10YWJsZXMuYy4KICAqLwotI2lmbmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCi0KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVglVTlVTVUFMX0RFVgotCi0jZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKLXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKLSAgLmRyaXZlcl9pbmZvID0gKFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0KLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0jdW5kZWYgVVNVQUxfREVWCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCi0KLS8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGV2aWNlcyB3ZSByZWNvZ25pemUsIGFsb25nIHdpdGggdGhlaXIgZmxhZyBkYXRhICovCiAKIC8qIFRoZSB2ZW5kb3IgbmFtZSBzaG91bGQgYmUga2VwdCBhdCBlaWdodCBjaGFyYWN0ZXJzIG9yIGxlc3MsIGFuZAogICogdGhlIHByb2R1Y3QgbmFtZSBzaG91bGQgYmUga2VwdCBhdCAxNiBjaGFyYWN0ZXJzIG9yIGxlc3MuIElmIGEgZGV2aWNlCkBAIC0xNzksMTggKzExOCwxNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHVzX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKICMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiIAotIwl1bmRlZiBVTlVTVUFMX0RFVgotIwl1bmRlZiBDT01QTElBTlRfREVWCi0jCXVuZGVmIFVTVUFMX0RFVgotCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IE5VTEwgfQorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKwogCiAjaWZkZWYgQ09ORklHX1BNCS8qIE1pbmltYWwgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMDcsOCArMTQ1LDkgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc3VzcGVuZCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIyMSw4ICsxNjAsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXN1bWUpOwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMzUsNiArMTc1LDcgQEAKIAkgKiB0aGUgZGV2aWNlICovCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXNldF9yZXN1bWUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKQEAgLTI0Myw3ICsxODQsNyBAQAogICogYSBVU0IgcG9ydCByZXNldCwgd2hldGhlciBmcm9tIHRoaXMgZHJpdmVyIG9yIGEgZGlmZmVyZW50IG9uZS4KICAqLwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNTMsOCArMTk0LDkgQEAKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3ByZV9yZXNldCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjY5LDYgKzIxMSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Bvc3RfcmVzZXQpOwogCiAvKgogICogZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlIHRha2VzIGFuIHVuc2lnbmVkIGNoYXIgYXJyYXkgKHdoaWNoIG11c3QKQEAgLTMxMSw2ICsyNTQsNyBAQAogCiAJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbGxfaW5xdWlyeV9yZXNwb25zZSk7CiAKIHN0YXRpYyBpbnQgdXNiX3N0b3JfY29udHJvbF90aHJlYWQodm9pZCAqIF9fdXMpCiB7CkBAIC01NTEsMjAgKzQ5NSwxMyBAQAogCQkJdmlkLCBwaWQsIGYpOwogfQogCi0vKiBGaW5kIGFuIHVudXN1YWxfZGV2IGRlc2NyaXB0b3IgKGFsd2F5cyBzdWNjZWVkcyBpbiB0aGUgY3VycmVudCBjb2RlKSAqLwotc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiAqZmluZF91bnVzdWFsKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsKLQlyZXR1cm4gJnVzX3VudXN1YWxfZGV2X2xpc3RbaWRfaW5kZXhdOwotfQotCiAvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLAorCQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2MgPQogCQkmdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0Jc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldiA9IGZpbmRfdW51c3VhbChpZCk7CiAKIAkvKiBTdG9yZSB0aGUgZW50cmllcyAqLwogCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OwpAQCAtNjI5LDcgKzU2Niw3IEBACiB9CiAKIC8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+cHJvdG9jb2wpIHsKIAljYXNlIFVTX1BSX0NCOgpAQCAtNjUxLDEwMCArNTg4LDExIEBACiAJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydDsKIAkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0JY2FzZSBVU19QUl9VU0JBVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNodXR0bGUgVVNCQVQiOwotCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLQljYXNlIFVTX1BSX0VVU0JfU0REUjA5OgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0JY2FzZSBVU19QUl9TRERSNTU6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KLQljYXNlIFVTX1BSX0RQQ01fVVNCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCi0JY2FzZSBVU19QUl9GUkVFQ09NOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0JY2FzZSBVU19QUl9EQVRBRkFCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0JY2FzZSBVU19QUl9KVU1QU0hPVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotCWNhc2UgVVNfUFJfQUxBVURBOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQotCWNhc2UgVVNfUFJfS0FSTUE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSByaW9fa2FybWFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7Ci0KLQkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLwotCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKLQkJdXMtPm1heF9sdW4gPSAwOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfcHJvdG9jb2woc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN3aXRjaCAodXMtPnN1YmNsYXNzKSB7CiAJY2FzZSBVU19TQ19SQkM6CkBAIC03NzksMjYgKzYyNyw3IEBACiAJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CiAJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotCWNhc2UgVVNfU0NfSVNEMjAwOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWNhc2UgVVNfU0NfQ1lQX0FUQUNCOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7Ci0JCXVzLT5wcm90b19oYW5kbGVyID0gY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHBpcGUgc2V0dGluZ3MgKi8KQEAgLTg0NiwxMiArNjc1LDEyIEBACiAJdXMtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAl1cy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXMtPnB1c2JfZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAJaWYgKGVwX2ludCkgewogCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCi0JCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQkJdXNiX2VuZHBvaW50X251bShlcF9pbnQpKTsKIAkJdXMtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMTIsMTcgKzg0MSwxNSBAQAogfQogCiAKLS8qIFByb2JlIHRvIHNlZSBpZiB3ZSBjYW4gZHJpdmUgYSBuZXdseS1jb25uZWN0ZWQgVVNCIGRldmljZSAqLwotc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKy8qIEZpcnN0IHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXM7CiAJaW50IHJlc3VsdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwotCi0JaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSkKLQkJcmV0dXJuIC1FTlhJTzsKIAogCVVTX0RFQlVHUCgiVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZGV0ZWN0ZWRcbiIpOwogCkBAIC0xMDQxLDcgKzg2OCw3IEBACiAJICogQWxsb3cgMTYtYnl0ZSBDREJzIGFuZCB0aHVzID4gMlRCCiAJICovCiAJaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKLQl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJKnB1cyA9IHVzID0gaG9zdF90b191cyhob3N0KTsKIAltZW1zZXQodXMsIDAsIHNpemVvZihzdHJ1Y3QgdXNfZGF0YSkpOwogCW11dGV4X2luaXQoJih1cy0+ZGV2X211dGV4KSk7CiAJaW5pdF9jb21wbGV0aW9uKCZ1cy0+Y21uZF9yZWFkeSk7CkBAIC0xMDU0LDI0ICs4ODEsNDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKIAotCS8qCi0JICogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzCi0JICoKLQkgKiBpZF9pbmRleCBpcyBjYWxjdWxhdGVkIGluIHRoZSBkZWNsYXJhdGlvbiB0byBiZSB0aGUgaW5kZXggbnVtYmVyCi0JICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQotCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCi0JICovCi0JcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCk7CisJLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzICovCisJcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCwgdW51c3VhbF9kZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyogR2V0IHRoZSB0cmFuc3BvcnQsIHByb3RvY29sLCBhbmQgcGlwZSBzZXR0aW5ncyAqLwotCXJlc3VsdCA9IGdldF90cmFuc3BvcnQodXMpOwotCWlmIChyZXN1bHQpCisJLyogR2V0IHN0YW5kYXJkIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgc2V0dGluZ3MgKi8KKwlnZXRfdHJhbnNwb3J0KHVzKTsKKwlnZXRfcHJvdG9jb2wodXMpOworCisJLyogR2l2ZSB0aGUgY2FsbGVyIGEgY2hhbmNlIHRvIGZpbGwgaW4gc3BlY2lhbGl6ZWQgdHJhbnNwb3J0CisJICogb3IgcHJvdG9jb2wgc2V0dGluZ3MuCisJICovCisJcmV0dXJuIDA7CisKK0JhZERldmljZToKKwlVU19ERUJVR1AoInN0b3JhZ2VfcHJvYmUoKSBmYWlsZWRcbiIpOworCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMSk7CisKKy8qIFNlY29uZCBwYXJ0IG9mIGdlbmVyYWwgVVNCIG1hc3Mtc3RvcmFnZSBwcm9iaW5nICovCitpbnQgdXNiX3N0b3JfcHJvYmUyKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOworCWludCByZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgaGF2ZSBib3RoIGJlZW4gc2V0ICovCisJaWYgKCF1cy0+dHJhbnNwb3J0IHx8ICF1cy0+cHJvdG9faGFuZGxlcikgeworCQlyZXN1bHQgPSAtRU5YSU87CiAJCWdvdG8gQmFkRGV2aWNlOwotCXJlc3VsdCA9IGdldF9wcm90b2NvbCh1cyk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBCYWREZXZpY2U7CisJfQorCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKwlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCisJCXVzLT5tYXhfbHVuID0gMDsKKworCS8qIEZpbmQgdGhlIGVuZHBvaW50cyBhbmQgY2FsY3VsYXRlIHBpcGUgdmFsdWVzICovCiAJcmVzdWx0ID0gZ2V0X3BpcGVzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKQEAgLTEwODAsNyArOTI5LDcgQEAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KHVzX3RvX2hvc3QodXMpLCAmdXMtPnB1c2JfaW50Zi0+ZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKIAkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOwpAQCAtMTEwOCw5ICs5NTcsMTAgQEAKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9wcm9iZTIpOwogCi0vKiBIYW5kbGUgYSBkaXNjb25uZWN0IGV2ZW50IGZyb20gdGhlIFVTQiBjb3JlICovCi1zdGF0aWMgdm9pZCBzdG9yYWdlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCisvKiBIYW5kbGUgYSBVU0IgbWFzcy1zdG9yYWdlIGRpc2Nvbm5lY3QgKi8KK3ZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCkBAIC0xMTE4LDYgKzk2OCw0MiBAQAogCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfZGlzY29ubmVjdCk7CisKKy8qIFRoZSBtYWluIHByb2JlIHJvdXRpbmUgZm9yIHN0YW5kYXJkIGRldmljZXMgKi8KK3N0YXRpYyBpbnQgc3RvcmFnZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwkvKgorCSAqIElmIGxpYnVzdWFsIGlzIGNvbmZpZ3VyZWQsIGxldCBpdCBkZWNpZGUgd2hldGhlciBhIHN0YW5kYXJkCisJICogZGV2aWNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHVzYi1zdG9yYWdlIG9yIGJ5IHViLgorCSAqIElmIHRoZSBkZXZpY2UgaXNuJ3Qgc3RhbmRhcmQgKGlzIGhhbmRsZWQgYnkgYSBzdWJkcml2ZXIKKwkgKiBtb2R1bGUpIHRoZW4gZG9uJ3QgYWNjZXB0IGl0LgorCSAqLworCWlmICh1c2JfdXN1YWxfY2hlY2tfdHlwZShpZCwgVVNCX1VTX1RZUEVfU1RPUikgfHwKKwkJCXVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKGludGYpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyoKKwkgKiBDYWxsIHRoZSBnZW5lcmFsIHByb2JlIHByb2NlZHVyZXMuCisJICoKKwkgKiBUaGUgdW51c3VhbF9kZXZfbGlzdCBhcnJheSBpcyBwYXJhbGxlbCB0byB0aGUgdXNiX3N0b3JhZ2VfdXNiX2lkcworCSAqIHRhYmxlLCBzbyB3ZSB1c2UgdGhlIGluZGV4IG9mIHRoZSBpZCBlbnRyeSB0byBmaW5kIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgdW51c3VhbF9kZXZzIGVudHJ5LgorCSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gdXNiX3N0b3JhZ2VfdXNiX2lkcykgKyB1c191bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTm8gc3BlY2lhbCB0cmFuc3BvcnQgb3IgcHJvdG9jb2wgc2V0dGluZ3MgaW4gdGhlIG1haW4gbW9kdWxlICovCisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgpAQCAtMTEyNiwxNSArMTAxMiwxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAogCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPQlzdG9yYWdlX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXN0b3JhZ2VfcmVzdW1lLAotCS5yZXNldF9yZXN1bWUgPQlzdG9yYWdlX3Jlc2V0X3Jlc3VtZSwKLSNlbmRpZgotCS5wcmVfcmVzZXQgPQlzdG9yYWdlX3ByZV9yZXNldCwKLQkucG9zdF9yZXNldCA9CXN0b3JhZ2VfcG9zdF9yZXNldCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiX3N0b3JhZ2VfdXNiX2lkcywKIAkuc29mdF91bmJpbmQgPQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggNjVlNjc0ZS4uMjYwOWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC0xNzcsNCArMTc3LDI1IEBACiAjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAKKy8qIEdlbmVyYWwgcm91dGluZXMgcHJvdmlkZWQgYnkgdGhlIHVzYi1zdG9yYWdlIHN0YW5kYXJkIGNvcmUgKi8KKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworI2Vsc2UKKyNkZWZpbmUgdXNiX3N0b3Jfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc3VtZQkJTlVMTAorI2RlZmluZSB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICogVXN1YWwgVGFibGVzIEZpbGUgZm9yIHVzYi1zdG9yYWdlIGFuZCBsaWJ1c3VhbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfdXN1YWwuaD4KKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCisjZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9CisKKyNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAorICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3RvcmFnZV91c2JfaWRzKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBDT01QTElBTlRfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzIHRvIGlnbm9yZQorICovCitzdHJ1Y3QgaWdub3JlX2VudHJ5IHsKKwl1MTYJdmlkLCBwaWQsIGJjZG1pbiwgYmNkbWF4OworfTsKKworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAorewkJCQkJXAorCS52aWQJPSBpZF92ZW5kb3IsCQlcCisJLnBpZCAJPSBpZF9wcm9kdWN0LAkJXAorCS5iY2RtaW4JPSBiY2REZXZpY2VNaW4sCQlcCisJLmJjZG1heCA9IGJjZERldmljZU1heCwJCVwKK30KKworc3RhdGljIHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKworLyogUmV0dXJuIGFuIGVycm9yIGlmIGEgZGV2aWNlIGlzIGluIHRoZSBpZ25vcmVfaWRzIGxpc3QgKi8KK2ludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bnNpZ25lZCB2aWQsIHBpZCwgYmNkOworCXN0cnVjdCBpZ25vcmVfZW50cnkgKnA7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl2aWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJYmNkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJZm9yIChwID0gaWdub3JlX2lkczsgcC0+dmlkOyArK3ApIHsKKwkJaWYgKHAtPnZpZCA9PSB2aWQgJiYgcC0+cGlkID09IHBpZCAmJgorCQkJCXAtPmJjZG1pbiA8PSBiY2QgJiYgcC0+YmNkbWF4ID49IGJjZCkKKwkJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBiZTc2MDg0Li42MGJhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtNDEwLDcgKzQxMCw5IEBACiAJfQogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBTa2VsZXRvbiBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQlNrZWwtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCSAiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00NDEsNyArNDQzLDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOwogCi0JaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBTa2VsZXRvbiAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2tlbF9kcmF3X2Rvd24oc3RydWN0IHVzYl9za2VsICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKaW5kZXggMTMzNWNiZS4uMjVlYWU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpAQCAtNjM4LDggKzYzOCw3IEBACiAJdXNiX3B1dF9pbnRmKGlmYWNlKTsKIAlrZnJlZShjYmFmLT5idWZmZXIpOwogCS8qIHBhcmFub2lhOiBjbGVhbiB1cCBjcnlwdG8ga2V5cyAqLwotCW1lbXNldChjYmFmLCAwLCBzaXplb2YoKmNiYWYpKTsKLQlrZnJlZShjYmFmKTsKKwlremZyZWUoY2JhZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYmFmX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggOGUxODE0MS4uZjBhYWMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtODg5LDYgKzg4OSw4IEBACiAJaWYgKHVzYl9kZXYtPnd1c2IgPT0gMCB8fCB1c2JfZGV2LT5kZXZudW0gPT0gMSkKIAkJcmV0dXJuOwkJLyogc2tpcCBub24gd3VzYiBhbmQgd3VzYiBSSHMgKi8KIAorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpOworCiAJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOwogCWlmICh3dXNiaGMgPT0gTlVMTCkKIAkJZ290byBlcnJvcl9ub2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGY0YWEyOGUuLjgxMThkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgMCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYWRkcjA7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCiAJLyogU2V0IG5ldyAoYXV0aGVudGljYXRlZCkgYWRkcmVzcy4gKi8KQEAgLTMyNyw2ICszMjgsNyBAQAogCXJlc3VsdCA9IHd1c2Jfc2V0X2Rldl9hZGRyKHd1c2JoYywgd3VzYl9kZXYsIG5ld19hZGRyZXNzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyOworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKIAl1c2JfZXAwX3JlaW5pdCh1c2JfZGV2KTsKIAl1c2JfZGV2LT5hdXRoZW50aWNhdGVkID0gMTsKIGVycm9yX2FkZHI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZmIxOTgwMy4uNDFjMjdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAKIGNvbmZpZyBGQl9JTVgKIAl0cmlzdGF0ZSAiTW90b3JvbGEgaS5NWCBMQ0Qgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCICYmIEFSTSAmJiBBUkNIX0lNWAorCWRlcGVuZHMgb24gRkIgJiYgKEFSQ0hfSU1YIHx8IEFSQ0hfTVgyKQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKQEAgLTIxMjAsMTYgKzIxMjAsMzAgQEAKIAkgIHRoZSBib290bG9hZGVyLgogCiBjb25maWcgRkJfTVgzCi0gICAgICAgdHJpc3RhdGUgIk1YMyBGcmFtZWJ1ZmZlciBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gRkIgJiYgTVgzX0lQVQotICAgICAgIHNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKLSAgICAgICBzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCi0gICAgICAgc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLSAgICAgICBkZWZhdWx0IHkKLSAgICAgICBoZWxwCi0gICAgICAgICBUaGlzIGlzIGEgZnJhbWVidWZmZXIgZGV2aWNlIGZvciB0aGUgaS5NWDMxIExDRCBDb250cm9sbGVyLiBTbwotICAgICAgICAgZmFyIG9ubHkgc3luY2hyb25vdXMgZGlzcGxheXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IHBsYW4gdG8gdXNlCi0gICAgICAgICBhbiBMQ0QgZGlzcGxheSB3aXRoIHlvdXIgaS5NWDMxIHN5c3RlbSwgc2F5IFkgaGVyZS4KKwl0cmlzdGF0ZSAiTVgzIEZyYW1lYnVmZmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBNWDNfSVBVCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgaXMgYSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBpLk1YMzEgTENEIENvbnRyb2xsZXIuIFNvCisJICBmYXIgb25seSBzeW5jaHJvbm91cyBkaXNwbGF5cyBhcmUgc3VwcG9ydGVkLiBJZiB5b3UgcGxhbiB0byB1c2UKKwkgIGFuIExDRCBkaXNwbGF5IHdpdGggeW91ciBpLk1YMzEgc3lzdGVtLCBzYXkgWSBoZXJlLgorCitjb25maWcgRkJfQlJPQURTSEVFVAorCXRyaXN0YXRlICJFLUluayBCcm9hZHNoZWV0L0Vwc29uIFMxRDEzNTIxIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCCisJc2VsZWN0IEZCX1NZU19GSUxMUkVDVAorCXNlbGVjdCBGQl9TWVNfQ09QWUFSRUEKKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TWVNfRk9QUworCXNlbGVjdCBGQl9ERUZFUlJFRF9JTworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEUtSW5rIEJyb2Fkc2hlZXQKKwkgIGNvbnRyb2xsZXIuIFRoZSByZWxlYXNlIG5hbWUgZm9yIHRoaXMgZGV2aWNlIHdhcyBFcHNvbiBTMUQxMzUyMQorCSAgYW5kIGNvdWxkIGFsc28gaGF2ZSBiZWVuIGNhbGxlZCBieSBvdGhlciBuYW1lcyB3aGVuIGNvdXBsZWQgd2l0aAorCSAgYSBicmlkZ2UgYWRhcHRlci4KIAogc291cmNlICJkcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggMmE5OThjYS4uYmIyNjVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC0xMDYsNiArMTA2LDcgQEAKIG9iai0kKENPTkZJR19GQl9QTUFHQl9CKQkgICs9IHBtYWdiLWItZmIubwogb2JqLSQoQ09ORklHX0ZCX01BWElORSkJCSAgKz0gbWF4aW5lZmIubwogb2JqLSQoQ09ORklHX0ZCX01FVFJPTk9NRSkgICAgICAgICs9IG1ldHJvbm9tZWZiLm8KK29iai0kKENPTkZJR19GQl9CUk9BRFNIRUVUKSAgICAgICArPSBicm9hZHNoZWV0ZmIubwogb2JqLSQoQ09ORklHX0ZCX1MxRDEzWFhYKQkgICs9IHMxZDEzeHh4ZmIubwogb2JqLSQoQ09ORklHX0ZCX1NINzc2MCkJCSAgKz0gc2g3NzYwZmIubwogb2JqLSQoQ09ORklHX0ZCX0lNWCkgICAgICAgICAgICAgICs9IGlteGZiLm8KQEAgLTEzMiw3ICsxMzMsNyBAQAogb2JqLSQoQ09ORklHX0ZCX09GKSAgICAgICAgICAgICAgICs9IG9mZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGNTRYX0xRMDQzKQkgICs9IGJmNTR4LWxxMDQzZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGSU5fVDM1ME1DUUIpCSAgKz0gYmZpbi10MzUwbWNxYi1mYi5vCi1vYmotJChDT05GSUdfRkJfTVgzKSAgICAgICAgICAgICAgKz0gbXgzZmIubworb2JqLSQoQ09ORklHX0ZCX01YMykJCSAgKz0gbXgzZmIubwogCiAjIHRoZSB0ZXN0IGZyYW1lYnVmZmVyIGlzIGxhc3QKIG9iai0kKENPTkZJR19GQl9WSVJUVUFMKSAgICAgICAgICArPSB2ZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwppbmRleCA2MWMzZDNmLi42OTk1ZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwpAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKaW5kZXggNjJiZDQ0NC4uMzc4ZjI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKIC8qIEFVMTEwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTExMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3NfcmVzOwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAKIAlmYmRldi0+cGFuZWwgPSAma25vd25fbGNkX3BhbmVsc1tkcnZfaW5mby5wYW5lbF9pZHhdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKWZiZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopZmJkZXYpOwogCiAJLyogQWxsb2NhdGUgcmVnaW9uIGZvciBvdXIgcmVnaXN0ZXJzIGFuZCBtYXAgdGhlbSAqLwogCWlmICghKHJlZ3NfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLApAQCAtNTgzLDE5ICs1ODMsMTkgQEAKIAkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+aW5mby5jbWFwKTsKIAl9CiAJa2ZyZWUoZmJkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlmYmRldiA9IChzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKIAlhdTExMDBmYl9mYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgJmZiZGV2LT5pbmZvKTsKQEAgLTYyMCw5ICs2MjAsOSBAQAogc3RhdGljIHUzMiBzeXNfY2xrc3JjOwogc3RhdGljIHN0cnVjdCBhdTExMDBmYl9yZWdzIGZicmVnczsKIAotaW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NDEsOSArNjQxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NjMsMTAgKzY2MywxMSBAQAogI2RlZmluZSBhdTExMDBmYl9kcnZfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMTAwZmJfZHJ2X3Byb2JlLAogICAgICAgICAucmVtb3ZlCQk9IGF1MTEwMGZiX2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBhdTExMDBmYl9kcnZfc3VzcGVuZCwKQEAgLTc1MywxMiArNzU0LDEyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCBhdTExMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiAKIAlrZnJlZShkcnZfaW5mby5vcHRfbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggMDNlNTdlZi4uMGQ5NmYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTYyMiw3ICsxNjIyLDcgQEAKIAogLyogQVUxMjAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJCS8qIEFsbG9jYXRlIHRoZSBmcmFtZWJ1ZmZlciB0byB0aGUgbWF4aW11bSBzY3JlZW4gc2l6ZSAqLwogCQlmYmRldi0+ZmJfbGVuID0gKHdpbi0+d1twbGFuZV0ueHJlcyAqIHdpbi0+d1twbGFuZV0ueXJlcyAqIGJwcCkgLyA4OwogCi0JCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZGV2LAorCQlmYmRldi0+ZmJfbWVtID0gZG1hX2FsbG9jX25vbmNvaGVyZW50KCZkZXYtPmRldiwKIAkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCSZmYmRldi0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7CiAJCWlmICghZmJkZXYtPmZiX21lbSkgewpAQCAtMTcxNSw3ICsxNzE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKIAlpbnQgcGxhbmU7CkBAIC0xNzMzLDcgKzE3MzMsOCBAQAogCQkvKiBDbGVhbiB1cCBhbGwgcHJvYmUgZGF0YSAqLwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7CiAJCWlmIChmYmRldi0+ZmJfbWVtKQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoZGV2LCBQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAorCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAorCQkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7CiAJCWlmIChmYmRldi0+ZmJfaW5mby5jbWFwLmxlbiAhPSAwKQogCQkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+ZmJfaW5mby5jbWFwKTsKQEAgLTE3NDcsMjIgKzE3NDgsMjQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMGZiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWxjZCIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MTIwMGZiX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IGF1MTIwMGZiX2Rydl9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xOTA2LDEyICsxOTA5LDEyIEBACiAJCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIgbG9hZGVkLlxuIik7CiAJI2VuZGlmCiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTEyMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MTIwMGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5Y2I5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKQEAgLTAsMCArMSw1NjggQEAKKy8qCisgKiBicm9hZHNoZWV0ZmIuYyAtLSBGQiBkcml2ZXIgZm9yIEUtSW5rIEJyb2Fkc2hlZXQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSmF5YSBLdW1hcgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIExheW91dCBpcyBiYXNlZCBvbiBza2VsZXRvbmZiLmMgYnkgSmFtZXMgU2ltbW9ucyBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIHdyaXR0ZW4gdG8gYmUgdXNlZCB3aXRoIHRoZSBCcm9hZHNoZWV0IGRpc3BsYXkgY29udHJvbGxlci4KKyAqCisgKiBJdCBpcyBpbnRlbmRlZCB0byBiZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQuIEEgYm9hcmQgc3BlY2lmaWMgZHJpdmVyCisgKiBtdXN0IGJlIHVzZWQgdG8gcGVyZm9ybSBhbGwgdGhlIHBoeXNpY2FsIElPIGludGVyYWN0aW9ucy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPHZpZGVvL2Jyb2Fkc2hlZXRmYi5oPgorCisvKiBEaXNwbGF5IHNwZWNpZmljIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERQWV9XIDgwMAorI2RlZmluZSBEUFlfSCA2MDAKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBicm9hZHNoZWV0ZmJfZml4IF9fZGV2aW5pdGRhdGEgPSB7CisJLmlkID0JCSJicm9hZHNoZWV0ZmIiLAorCS50eXBlID0JCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0JRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUiwKKwkueHBhbnN0ZXAgPQkwLAorCS55cGFuc3RlcCA9CTAsCisJLnl3cmFwc3RlcCA9CTAsCisJLmxpbmVfbGVuZ3RoID0JRFBZX1csCisJLmFjY2VsID0JRkJfQUNDRUxfTk9ORSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gYnJvYWRzaGVldGZiX3ZhciBfX2RldmluaXRkYXRhID0geworCS54cmVzCQk9IERQWV9XLAorCS55cmVzCQk9IERQWV9ILAorCS54cmVzX3ZpcnR1YWwJPSBEUFlfVywKKwkueXJlc192aXJ0dWFsCT0gRFBZX0gsCisJLmJpdHNfcGVyX3BpeGVsCT0gOCwKKwkuZ3JheXNjYWxlCT0gMSwKKwkucmVkID0JCXsgMCwgNCwgMCB9LAorCS5ncmVlbiA9CXsgMCwgNCwgMCB9LAorCS5ibHVlID0JCXsgMCwgNCwgMCB9LAorCS50cmFuc3AgPQl7IDAsIDAsIDAgfSwKK307CisKKy8qIG1haW4gYnJvYWRzaGVldGZiIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMCk7CisJcGFyLT5ib2FyZC0+c2V0X2hkYihwYXIsIGRhdGEpOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfaXNzdWVfY21kKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMCk7CisJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIGRhdGEpOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3Moc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGNtZCwKKwkJCQkJaW50IGFyZ2MsIHUxNiAqYXJndikKK3sKKwlpbnQgaTsKKworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIGNtZCk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCWJyb2Fkc2hlZXRfaXNzdWVfZGF0YShwYXIsIGFyZ3ZbaV0pOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfYnVyc3Rfd3JpdGUoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgaW50IHNpemUsCisJCQkJCXUxNiAqZGF0YSkKK3sKKwlpbnQgaTsKKwl1MTYgdG1wOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfV1IsIDApOworCQl0bXAgPSAoZGF0YVtpXSAmIDB4MEYpIDw8IDQ7CisJCXRtcCB8PSAoZGF0YVtpXSAmIDB4MEYwMCkgPDwgNDsKKwkJcGFyLT5ib2FyZC0+c2V0X2hkYihwYXIsIHRtcCk7CisJCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMSk7CisJfQorCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKK30KKworc3RhdGljIHUxNiBicm9hZHNoZWV0X2dldF9kYXRhKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJdTE2IHJlczsKKwkvKiB3YWl0IGZvciByZWFkeSB0byBnbyBoaS4gKGxvIGlzIGJ1c3kpICovCisJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CisKKwkvKiBjcyBsbywgZGMgbG8gZm9yIGNtZCwgd2UgbG8gZm9yIGVhY2ggZGF0YSwgZGIgYXMgdXN1YWwgKi8KKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMCk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAwKTsKKworCXJlcyA9IHBhci0+Ym9hcmQtPmdldF9oZGIocGFyKTsKKworCS8qIHN0cm9iZSB3ciAqLworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfd3JpdGVfcmVnKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiByZWcsCisJCQkJCXUxNiBkYXRhKQoreworCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGdvIGhpLiAobG8gaXMgYnVzeSkgKi8KKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKKworCS8qIGNzIGxvLCBkYyBsbyBmb3IgY21kLCB3ZSBsbyBmb3IgZWFjaCBkYXRhLCBkYiBhcyB1c3VhbCAqLworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMCk7CisKKwlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIEJTX0NNRF9XUl9SRUcpOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAxKTsKKworCWJyb2Fkc2hlZXRfaXNzdWVfZGF0YShwYXIsIHJlZyk7CisJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgZGF0YSk7CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDEpOworfQorCitzdGF0aWMgdTE2IGJyb2Fkc2hlZXRfcmVhZF9yZWcoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IHJlZykKK3sKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIHJlZyk7CisJbXNsZWVwKDEwMCk7CisJcmV0dXJuIGJyb2Fkc2hlZXRfZ2V0X2RhdGEocGFyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJyb2Fkc2hlZXRfaW5pdF9kaXNwbGF5KHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJdTE2IGFyZ3NbNV07CisKKwlhcmdzWzBdID0gRFBZX1c7CisJYXJnc1sxXSA9IERQWV9IOworCWFyZ3NbMl0gPSAoMTAwIHwgKDEgPDwgOCkgfCAoMSA8PCA5KSk7IC8qIHNkY2ZnICovCisJYXJnc1szXSA9IDI7IC8qIGdkcnYgY2ZnICovCisJYXJnc1s0XSA9ICg0IHwgKDEgPDwgNykpOyAvKiBsdXQgaW5kZXggZm9ybWF0ICovCisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfSU5JVF9EU1BFX0NGRywgNSwgYXJncyk7CisKKwkvKiBkaWQgdGhlIGNvbnRyb2xsZXIgcmVhbGx5IHNldCBpdD8gKi8KKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9JTklUX0RTUEVfQ0ZHLCA1LCBhcmdzKTsKKworCWFyZ3NbMF0gPSA0OyAvKiBmc3luYyBsZW4gKi8KKwlhcmdzWzFdID0gKDEwIDw8IDgpIHwgNDsgLyogZmVuZC9mYmVnaW4gbGVuICovCisJYXJnc1syXSA9IDEwOyAvKiBsaW5lIHN5bmMgbGVuICovCisJYXJnc1szXSA9ICgxMDAgPDwgOCkgfCA0OyAvKiBsaW5lIGVuZC9iZWdpbiBsZW4gKi8KKwlhcmdzWzRdID0gNjsgLyogcGl4ZWwgY2xvY2sgY2ZnICovCisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfSU5JVF9EU1BFX1RNRywgNSwgYXJncyk7CisKKwkvKiBzZXR1cCB3YXZlZm9ybSAqLworCWFyZ3NbMF0gPSAweDg4NjsKKwlhcmdzWzFdID0gMDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9SRF9XRk1fSU5GTywgMiwgYXJncyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9VUERfR0RSVl9DTFIpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX1RSRyk7CisKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MzMwLCAweDg0KTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9UUkcpOworCisJYXJnc1swXSA9ICgweDMgPDwgNCk7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfTERfSU1HLCAxLCBhcmdzKTsKKworCWFyZ3NbMF0gPSAweDE1NDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9XUl9SRUcsIDEsIGFyZ3MpOworCisJYnJvYWRzaGVldF9idXJzdF93cml0ZShwYXIsIERQWV9XKkRQWV9ILzIsCisJCQkJKHUxNiAqKSBwYXItPmluZm8tPnNjcmVlbl9iYXNlKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0xEX0lNR19FTkQpOworCisJYXJnc1swXSA9IDB4NDMwMDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9VUERfRlVMTCwgMSwgYXJncyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfVFJHKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9GUkVORCk7CisKKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJyb2Fkc2hlZXRfaW5pdChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0lOSVRfU1lTX1JVTik7CisJLyogdGhlIGNvbnRyb2xsZXIgbmVlZHMgYSBzZWNvbmQgKi8KKwltc2xlZXAoMTAwMCk7CisJYnJvYWRzaGVldF9pbml0X2Rpc3BsYXkocGFyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2RweV91cGRhdGVfcGFnZXMoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwKKwkJCQkJCXUxNiB5MSwgdTE2IHkyKQoreworCXUxNiBhcmdzWzVdOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcGFyLT5pbmZvLT5zY3JlZW5fYmFzZTsKKworCS8qIHkxIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IHNvIGRyb3AgdGhlIGxvd2VyIGJpdHMgKi8KKwl5MSAmPSAweEZGRkM7CisJLyogeTIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgLCBidXQgLSAxIHNvIHVwIHRoZSBsb3dlciBiaXRzICovCisJeTIgfD0gMHgwMDAzOworCisJYXJnc1swXSA9IDB4MyA8PCA0OworCWFyZ3NbMV0gPSAwOworCWFyZ3NbMl0gPSB5MTsKKwlhcmdzWzNdID0gY3B1X3RvX2xlMTYocGFyLT5pbmZvLT52YXIueHJlcyk7CisJYXJnc1s0XSA9IHkyOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX0xEX0lNR19BUkVBLCA1LCBhcmdzKTsKKworCWFyZ3NbMF0gPSAweDE1NDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9XUl9SRUcsIDEsIGFyZ3MpOworCisJYnVmICs9IHkxICogcGFyLT5pbmZvLT52YXIueHJlczsKKwlicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHBhciwgKCgxICsgeTIgLSB5MSkgKiBwYXItPmluZm8tPnZhci54cmVzKS8yLAorCQkJCSh1MTYgKikgYnVmKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0xEX0lNR19FTkQpOworCisJYXJnc1swXSA9IDB4NDMwMDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9VUERfRlVMTCwgMSwgYXJncyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfVFJHKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9GUkVORCk7CisKKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKKworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCXUxNiBhcmdzWzVdOworCisJYXJnc1swXSA9IDB4MyA8PCA0OworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX0xEX0lNRywgMSwgYXJncyk7CisKKwlhcmdzWzBdID0gMHgxNTQ7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfV1JfUkVHLCAxLCBhcmdzKTsKKwlicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHBhciwgRFBZX1cqRFBZX0gvMiwKKwkJCQkodTE2ICopIHBhci0+aW5mby0+c2NyZWVuX2Jhc2UpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfTERfSU1HX0VORCk7CisKKwlhcmdzWzBdID0gMHg0MzAwOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1VQRF9GVUxMLCAxLCBhcmdzKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9UUkcpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX0ZSRU5EKTsKKworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCit9CisKKy8qIHRoaXMgaXMgY2FsbGVkIGJhY2sgZnJvbSB0aGUgZGVmZXJyZWQgaW8gd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfZHB5X2RlZmVycmVkX2lvKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQoreworCXUxNiB5MSA9IDAsIGggPSAwOworCWludCBwcmV2X2luZGV4ID0gLTE7CisJc3RydWN0IHBhZ2UgKmN1cjsKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOworCWludCBoX2luYzsKKwl1MTYgeXJlcyA9IGluZm8tPnZhci55cmVzOworCXUxNiB4cmVzID0gaW5mby0+dmFyLnhyZXM7CisKKwkvKiBoZWlnaHQgaW5jcmVtZW50IGlzIGZpeGVkIHBlciBwYWdlICovCisJaF9pbmMgPSBESVZfUk9VTkRfVVAoUEFHRV9TSVpFICwgeHJlcyk7CisKKwkvKiB3YWxrIHRoZSB3cml0dGVuIHBhZ2UgbGlzdCBhbmQgc3dpenpsZSB0aGUgZGF0YSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmZmJkZWZpby0+cGFnZWxpc3QsIGxydSkgeworCQlpZiAocHJldl9pbmRleCA8IDApIHsKKwkJCS8qIGp1c3Qgc3RhcnRpbmcgc28gYXNzaWduIGZpcnN0IHBhZ2UgKi8KKwkJCXkxID0gKGN1ci0+aW5kZXggPDwgUEFHRV9TSElGVCkgLyB4cmVzOworCQkJaCA9IGhfaW5jOworCQl9IGVsc2UgaWYgKChwcmV2X2luZGV4ICsgMSkgPT0gY3VyLT5pbmRleCkgeworCQkJLyogdGhpcyBwYWdlIGlzIGNvbnNlY3V0aXZlIHNvIGluY3JlYXNlIG91ciBoZWlnaHQgKi8KKwkJCWggKz0gaF9pbmM7CisJCX0gZWxzZSB7CisJCQkvKiBwYWdlIG5vdCBjb25zZWN1dGl2ZSwgaXNzdWUgcHJldmlvdXMgdXBkYXRlIGZpcnN0ICovCisJCQlicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZV9wYWdlcyhpbmZvLT5wYXIsIHkxLCB5MSArIGgpOworCQkJLyogc3RhcnQgb3ZlciB3aXRoIG91ciBub24gY29uc2VjdXRpdmUgcGFnZSAqLworCQkJeTEgPSAoY3VyLT5pbmRleCA8PCBQQUdFX1NISUZUKSAvIHhyZXM7CisJCQloID0gaF9pbmM7CisJCX0KKwkJcHJldl9pbmRleCA9IGN1ci0+aW5kZXg7CisJfQorCisJLyogaWYgd2Ugc3RpbGwgaGF2ZSBhbnkgcGFnZXMgdG8gdXBkYXRlIHdlIGRvIHNvIG5vdyAqLworCWlmIChoID49IHlyZXMpIHsKKwkJLyogaXRzIGEgZnVsbCBzY3JlZW4gdXBkYXRlLCBqdXN0IGRvIGl0ICovCisJCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKGluZm8tPnBhcik7CisJfSBlbHNlIHsKKwkJYnJvYWRzaGVldGZiX2RweV91cGRhdGVfcGFnZXMoaW5mby0+cGFyLCB5MSwKKwkJCQkJCW1pbigodTE2KSAoeTEgKyBoKSwgeXJlcykpOworCX0KK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJc3lzX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCisJYnJvYWRzaGVldGZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJc3lzX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJYnJvYWRzaGVldGZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlzeXNfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKHBhcik7Cit9CisKKy8qCisgKiB0aGlzIGlzIHRoZSBzbG93IHBhdGggZnJvbSB1c2Vyc3BhY2UuIHRoZXkgY2FuIHNlZWsgYW5kIHdyaXRlIHRvCisgKiB0aGUgZmIuIGl0J3MgaW5lZmZpY2llbnQgdG8gZG8gYW55dGhpbmcgbGVzcyB0aGFuIGEgZnVsbCBzY3JlZW4gZHJhdworICovCitzdGF0aWMgc3NpemVfdCBicm9hZHNoZWV0ZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKwl2b2lkICpkc3Q7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID4gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChjb3VudCA+IHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVGQklHOworCQljb3VudCA9IHRvdGFsX3NpemU7CisJfQorCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRU5PU1BDOworCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisJfQorCisJZHN0ID0gKHZvaWQgKikoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkc3QsIGJ1ZiwgY291bnQpKQorCQllcnIgPSAtRUZBVUxUOworCisJaWYgICghZXJyKQorCQkqcHBvcyArPSBjb3VudDsKKworCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKHBhcik7CisKKwlyZXR1cm4gKGVycikgPyBlcnIgOiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgYnJvYWRzaGVldGZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX3JlYWQgICAgICAgID0gZmJfc3lzX3JlYWQsCisJLmZiX3dyaXRlCT0gYnJvYWRzaGVldGZiX3dyaXRlLAorCS5mYl9maWxscmVjdAk9IGJyb2Fkc2hlZXRmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBicm9hZHNoZWV0ZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IGJyb2Fkc2hlZXRmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgc3RydWN0IGZiX2RlZmVycmVkX2lvIGJyb2Fkc2hlZXRmYl9kZWZpbyA9IHsKKwkuZGVsYXkJCT0gSFovNCwKKwkuZGVmZXJyZWRfaW8JPSBicm9hZHNoZWV0ZmJfZHB5X2RlZmVycmVkX2lvLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYnJvYWRzaGVldGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYnJvYWRzaGVldF9ib2FyZCAqYm9hcmQ7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IHZpZGVvbWVtb3J5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyICp2aWRlb21lbW9yeTsKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyOworCWludCBpOworCisJLyogcGljayB1cCBib2FyZCBzcGVjaWZpYyByb3V0aW5lcyAqLworCWJvYXJkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIWJvYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHRyeSB0byBjb3VudCBkZXZpY2Ugc3BlY2lmaWMgZHJpdmVyLCBpZiBjYW4ndCwgcGxhdGZvcm0gcmVjYWxscyAqLworCWlmICghdHJ5X21vZHVsZV9nZXQoYm9hcmQtPm93bmVyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyKSwgJmRldi0+ZGV2KTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZXJyOworCisJdmlkZW9tZW1vcnlzaXplID0gKERQWV9XKkRQWV9IKTsKKwl2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQorCQlnb3RvIGVycl9mYl9yZWw7CisKKwltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyICopdmlkZW9tZW1vcnk7CisJaW5mby0+ZmJvcHMgPSAmYnJvYWRzaGVldGZiX29wczsKKworCWluZm8tPnZhciA9IGJyb2Fkc2hlZXRmYl92YXI7CisJaW5mby0+Zml4ID0gYnJvYWRzaGVldGZiX2ZpeDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSB2aWRlb21lbW9yeXNpemU7CisJcGFyID0gaW5mby0+cGFyOworCXBhci0+aW5mbyA9IGluZm87CisJcGFyLT5ib2FyZCA9IGJvYXJkOworCXBhci0+d3JpdGVfcmVnID0gYnJvYWRzaGVldF93cml0ZV9yZWc7CisJcGFyLT5yZWFkX3JlZyA9IGJyb2Fkc2hlZXRfcmVhZF9yZWc7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0cSk7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisKKwlpbmZvLT5mYmRlZmlvID0gJmJyb2Fkc2hlZXRmYl9kZWZpbzsKKwlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOworCisJcmV0dmFsID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMTYsIDApOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9ybWFwXG4iKTsKKwkJZ290byBlcnJfdmZyZWU7CisJfQorCisJLyogc2V0IGNtYXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJaW5mby0+Y21hcC5yZWRbaV0gPSAoKCgyKmkpKzEpKigweEZGRkYpKS8zMjsKKwltZW1jcHkoaW5mby0+Y21hcC5ncmVlbiwgaW5mby0+Y21hcC5yZWQsIHNpemVvZih1MTYpKjE2KTsKKwltZW1jcHkoaW5mby0+Y21hcC5ibHVlLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqMTYpOworCisJcmV0dmFsID0gcGFyLT5ib2FyZC0+c2V0dXBfaXJxKGluZm8pOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycl9jbWFwOworCisJLyogdGhpcyBpbml0cyB0aGUgZHB5ICovCisJcmV0dmFsID0gYm9hcmQtPmluaXQocGFyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlicm9hZHNoZWV0X2luaXQocGFyKTsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiZmIlZDogQnJvYWRzaGVldCBmcmFtZSBidWZmZXIsIHVzaW5nICVkSyBvZiB2aWRlbyBtZW1vcnlcbiIsCisJICAgICAgIGluZm8tPm5vZGUsIHZpZGVvbWVtb3J5c2l6ZSA+PiAxMCk7CisKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJYm9hcmQtPmNsZWFudXAocGFyKTsKK2Vycl9jbWFwOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CitlcnJfdmZyZWU6CisJdmZyZWUodmlkZW9tZW1vcnkpOworZXJyX2ZiX3JlbDoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworZXJyOgorCW1vZHVsZV9wdXQoYm9hcmQtPm93bmVyKTsKKwlyZXR1cm4gcmV0dmFsOworCit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJyb2Fkc2hlZXRmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoaW5mbyk7CisJCXBhci0+Ym9hcmQtPmNsZWFudXAocGFyKTsKKwkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwkJdmZyZWUoKHZvaWQgKilpbmZvLT5zY3JlZW5fYmFzZSk7CisJCW1vZHVsZV9wdXQocGFyLT5ib2FyZC0+b3duZXIpOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnJvYWRzaGVldGZiX2RyaXZlciA9IHsKKwkucHJvYmUJPSBicm9hZHNoZWV0ZmJfcHJvYmUsCisJLnJlbW92ZSA9IGJyb2Fkc2hlZXRmYl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImJyb2Fkc2hlZXRmYiIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJyb2Fkc2hlZXRmYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYnJvYWRzaGVldGZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBicm9hZHNoZWV0ZmJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZicm9hZHNoZWV0ZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYnJvYWRzaGVldGZiX2luaXQpOworbW9kdWxlX2V4aXQoYnJvYWRzaGVldGZiX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImZiZGV2IGRyaXZlciBmb3IgQnJvYWRzaGVldCBjb250cm9sbGVyIik7CitNT0RVTEVfQVVUSE9SKCJKYXlhIEt1bWFyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggN2E5ZTQyZS4uODNjNWNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwpAQCAtNDYsOCArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMTQyNSw3ICsxNDI1LDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX1NIQVJLCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9mcmFtZWJ1ZmZlci5oPgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjeWJlcnByb192bF9wcm9iZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGQ1OGM2OGMuLjE1YTBlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqCWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awogICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0yNyw5ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogCiAjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgogCkBAIC00NCw3ICs0NSwxMiBAQAogCiAjZGVmaW5lIExDRENfU0laRQkweDA0CiAjZGVmaW5lIFNJWkVfWE1BWCh4KQkoKCgoeCkgPj4gNCkgJiAweDNmKSA8PCAyMCkKKworI2lmZGVmIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBTSVpFX1lNQVgoeSkJKCh5KSAmIDB4MWZmKQorI2Vsc2UKKyNkZWZpbmUgU0laRV9ZTUFYKHkpCSgoeSkgJiAweDNmZikKKyNlbmRpZgogCiAjZGVmaW5lIExDRENfVlBXCTB4MDgKICNkZWZpbmUgVlBXX1ZQVyh4KQkoKHgpICYgMHgzZmYpCkBAIC01NCw3ICs2MCwxMiBAQAogI2RlZmluZSBDUE9TX0NDMAkoMTw8MzApCiAjZGVmaW5lIENQT1NfT1AJCSgxPDwyOCkKICNkZWZpbmUgQ1BPU19DWFAoeCkJKCgoeCkgJiAzZmYpIDw8IDE2KQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIENQT1NfQ1lQKHkpCSgoeSkgJiAweDFmZikKKyNlbHNlCisjZGVmaW5lIENQT1NfQ1lQKHkpCSgoeSkgJiAweDNmZikKKyNlbmRpZgogCiAjZGVmaW5lIExDRENfTENXSEIJMHgxMAogI2RlZmluZSBMQ1dIQl9CS19FTgkoMTw8MzEpCkBAIC02Myw5ICs3NCwxNiBAQAogI2RlZmluZSBMQ1dIQl9CRCh4KQkoKHgpICYgMHhmZikKIAogI2RlZmluZSBMQ0RDX0xDSENDCTB4MTQKKworI2lmZGVmIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBMQ0hDQ19DVVJfQ09MX1IocikgKCgocikgJiAweDFmKSA8PCAxMSkKICNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9HKGcpICgoKGcpICYgMHgzZikgPDwgNSkKICNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9CKGIpICgoYikgJiAweDFmKQorI2Vsc2UKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9SKHIpICgoKHIpICYgMHgzZikgPDwgMTIpCisjZGVmaW5lIExDSENDX0NVUl9DT0xfRyhnKSAoKChnKSAmIDB4M2YpIDw8IDYpCisjZGVmaW5lIExDSENDX0NVUl9DT0xfQihiKSAoKGIpICYgMHgzZikKKyNlbmRpZgogCiAjZGVmaW5lIExDRENfUENSCTB4MTgKIApAQCAtOTIsNyArMTEwLDEzIEBACiAvKiBiaXQgZmllbGRzIGluIGlteGZiLmggKi8KIAogI2RlZmluZSBMQ0RDX1JNQ1IJMHgzNAorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIFJNQ1JfTENEQ19FTgkoMTw8MSkKKyNlbHNlCisjZGVmaW5lIFJNQ1JfTENEQ19FTgkwCisjZW5kaWYKKwogI2RlZmluZSBSTUNSX1NFTEZfUkVGCSgxPDwwKQogCiAjZGVmaW5lIExDRENfTENESUNSCTB4MzgKQEAgLTExOSw2ICsxNDMsNyBAQAogc3RydWN0IGlteGZiX2luZm8gewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICpwZGV2OwogCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJc3RydWN0IGNsawkJKmNsazsKIAogCXVfaW50CQkJbWF4X2JwcDsKIAl1X2ludAkJCW1heF94cmVzOwpAQCAtMTU5LDYgKzE4NCwxNyBAQAogI2RlZmluZSBNSU5fWFJFUwk2NAogI2RlZmluZSBNSU5fWVJFUwk2NAogCisvKiBBY3R1YWxseSB0aGlzIHJlYWxseSBpcyAxOGJpdCBzdXBwb3J0LCB0aGUgbG93ZXN0IDIgYml0cyBvZiBlYWNoIGNvbG91cgorICogYXJlIHVudXNlZCBpbiBoYXJkd2FyZS4gV2UgY2xhaW0gdG8gaGF2ZSAyNGJpdCBzdXBwb3J0IHRvIG1ha2Ugc29mdHdhcmUKKyAqIGxpa2UgWCB3b3JrLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IDE4Yml0LgorICovCitzdGF0aWMgc3RydWN0IGlteGZiX3JnYiBkZWZfcmdiXzE4ID0geworCS5yZWQJPSB7Lm9mZnNldCA9IDE2LCAubGVuZ3RoID0gOCx9LAorCS5ncmVlbgk9IHsub2Zmc2V0ID0gOCwgLmxlbmd0aCA9IDgsfSwKKwkuYmx1ZQk9IHsub2Zmc2V0ID0gMCwgLmxlbmd0aCA9IDgsfSwKKwkudHJhbnNwID0gey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gMCx9LAorfTsKKwogc3RhdGljIHN0cnVjdCBpbXhmYl9yZ2IgZGVmX3JnYl8xNl90ZnQgPSB7CiAJLnJlZAk9IHsub2Zmc2V0ID0gMTEsIC5sZW5ndGggPSA1LH0sCiAJLmdyZWVuCT0gey5vZmZzZXQgPSA1LCAubGVuZ3RoID0gNix9LApAQCAtMjg2LDkgKzMyMiwxMiBAQAogCiAJcHJfZGVidWcoInZhci0+Yml0c19wZXJfcGl4ZWw9JWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJCXJnYiA9ICZkZWZfcmdiXzE4OworCQlicmVhazsKIAljYXNlIDE2OgogCWRlZmF1bHQ6Ci0JCWlmIChyZWFkbChmYmktPnJlZ3MgKyBMQ0RDX1BDUikgJiBQQ1JfVEZUKQorCQlpZiAoZmJpLT5wY3IgJiBQQ1JfVEZUKQogCQkJcmdiID0gJmRlZl9yZ2JfMTZfdGZ0OwogCQllbHNlCiAJCQlyZ2IgPSAmZGVmX3JnYl8xNl9zdG47CkBAIC0zMjcsOSArMzY2LDcgQEAKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKIAotCXByX2RlYnVnKCJzZXRfcGFyXG4iKTsKLQotCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2KQorCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2IHx8IHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMzIpCiAJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCWVsc2UgaWYgKCFmYmktPmNtYXBfc3RhdGljKQogCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwpAQCAtMzU0LDEwICszOTEsNiBAQAogewogCXByX2RlYnVnKCJFbmFibGluZyBMQ0QgY29udHJvbGxlclxuIik7CiAKLQkvKiBpbml0aWFsaXplIExDREMgKi8KLQl3cml0ZWwocmVhZGwoZmJpLT5yZWdzICsgTENEQ19STUNSKSAmIH5STUNSX0xDRENfRU4sCi0JCWZiaS0+cmVncyArIExDRENfUk1DUik7CS8qIGp1c3QgdG8gYmUgc2FmZS4uLiAqLwotCiAJd3JpdGVsKGZiaS0+c2NyZWVuX2RtYSwgZmJpLT5yZWdzICsgTENEQ19TU0EpOwogCiAJLyogcGh5c2ljYWwgc2NyZWVuIHN0YXJ0IGFkZHJlc3MJICAgICovCkBAIC0zNzMsNiArNDA2LDggQEAKIAogCXdyaXRlbChSTUNSX0xDRENfRU4sIGZiaS0+cmVncyArIExDRENfUk1DUik7CiAKKwljbGtfZW5hYmxlKGZiaS0+Y2xrKTsKKwogCWlmIChmYmktPmJhY2tsaWdodF9wb3dlcikKIAkJZmJpLT5iYWNrbGlnaHRfcG93ZXIoMSk7CiAJaWYgKGZiaS0+bGNkX3Bvd2VyKQpAQCAtMzg4LDYgKzQyMyw4IEBACiAJaWYgKGZiaS0+bGNkX3Bvd2VyKQogCQlmYmktPmxjZF9wb3dlcigwKTsKIAorCWNsa19kaXNhYmxlKGZiaS0+Y2xrKTsKKwogCXdyaXRlbCgwLCBmYmktPnJlZ3MgKyBMQ0RDX1JNQ1IpOwogfQogCkBAIC00MzEsNiArNDY4LDkgQEAKIHN0YXRpYyBpbnQgaW14ZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCBwY3IsIGxjZF9jbGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwogCXByX2RlYnVnKCJ2YXI6IHhyZXM9JWQgaHNsZW49JWQgbG09JWQgcm09JWRcbiIsCiAJCXZhci0+eHJlcywgdmFyLT5oc3luY19sZW4sCiAJCXZhci0+bGVmdF9tYXJnaW4sIHZhci0+cmlnaHRfbWFyZ2luKTsKQEAgLTQ2NSw5ICs1MDUsOSBAQAogCQkJaW5mby0+Zml4LmlkLCB2YXItPmxvd2VyX21hcmdpbik7CiAjZW5kaWYKIAotCXdyaXRlbChIQ1JfSF9XSURUSCh2YXItPmhzeW5jX2xlbikgfAotCQlIQ1JfSF9XQUlUXzEodmFyLT5yaWdodF9tYXJnaW4pIHwKLQkJSENSX0hfV0FJVF8yKHZhci0+bGVmdF9tYXJnaW4pLAorCXdyaXRlbChIQ1JfSF9XSURUSCh2YXItPmhzeW5jX2xlbiAtIDEpIHwKKwkJSENSX0hfV0FJVF8xKHZhci0+cmlnaHRfbWFyZ2luIC0gMSkgfAorCQlIQ1JfSF9XQUlUXzIodmFyLT5sZWZ0X21hcmdpbiAtIDMpLAogCQlmYmktPnJlZ3MgKyBMQ0RDX0hDUik7CiAKIAl3cml0ZWwoVkNSX1ZfV0lEVEgodmFyLT52c3luY19sZW4pIHwKQEAgLTQ3Nyw3ICs1MTcsMjMgQEAKIAogCXdyaXRlbChTSVpFX1hNQVgodmFyLT54cmVzKSB8IFNJWkVfWU1BWCh2YXItPnlyZXMpLAogCQkJZmJpLT5yZWdzICsgTENEQ19TSVpFKTsKLQl3cml0ZWwoZmJpLT5wY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKKworCWxjZF9jbGsgPSBjbGtfZ2V0X3JhdGUoZmJpLT5jbGspOworCXRtcCA9IHZhci0+cGl4Y2xvY2sgKiAodW5zaWduZWQgbG9uZyBsb25nKWxjZF9jbGs7CisJZG9fZGl2KHRtcCwgMTAwMDAwMCk7CisJaWYgKGRvX2Rpdih0bXAsIDEwMDAwMDApID4gNTAwMDAwKQorCQl0bXArKzsKKwlwY3IgPSAodW5zaWduZWQgaW50KXRtcDsKKwlpZiAoLS1wY3IgPiAweDNGKSB7CisJCXBjciA9IDB4M0Y7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk11c3QgbGltaXQgcGl4ZWwgY2xvY2sgdG8gJXVIelxuIiwKKwkJCQlsY2RfY2xrIC8gcGNyKTsKKwl9CisKKwkvKiBhZGQgc3luYyBwb2xhcml0aWVzICovCisJcGNyIHw9IGZiaS0+cGNyICYgfjB4M0Y7CisKKwl3cml0ZWwocGNyLCBmYmktPnJlZ3MgKyBMQ0RDX1BDUik7CiAJd3JpdGVsKGZiaS0+cHdtciwgZmJpLT5yZWdzICsgTENEQ19QV01SKTsKIAl3cml0ZWwoZmJpLT5sc2NyMSwgZmJpLT5yZWdzICsgTENEQ19MU0NSMSk7CiAJd3JpdGVsKGZiaS0+ZG1hY3IsIGZiaS0+cmVncyArIExDRENfRE1BQ1IpOwpAQCAtNjE5LDYgKzY3NSwxMyBAQAogCQlnb3RvIGZhaWxlZF9yZXE7CiAJfQogCisJZmJpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZmJpLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZmJpLT5jbGspOzsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZmFpbGVkX2dldGNsb2NrOworCX0KKwogCWZiaS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmJpLT5yZWdzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIkNhbm5vdCBtYXAgZnJhbWUgYnVmZmVyIHJlZ2lzdGVyc1xuIik7CkBAIC02NTAsNiArNzEzLDEyIEBACiAJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZmJpLT5zY3JlZW5fZG1hOwogCX0KIAorCWlmIChwZGF0YS0+aW5pdCkgeworCQlyZXQgPSBwZGF0YS0+aW5pdChmYmktPnBkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWRfcGxhdGZvcm1faW5pdDsKKwl9CisKIAkvKgogCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG91ciBjb2xvdXIgYml0ZmllbGQKIAkgKiBkZXNjcmlwdG9ycyBhcmUgY29ycmVjdGx5IGluaXRpYWxpc2VkLgpAQCAtNjc0LDEwICs3NDMsMTUgQEAKIGZhaWxlZF9yZWdpc3RlcjoKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogZmFpbGVkX2NtYXA6CisJaWYgKHBkYXRhLT5leGl0KQorCQlwZGF0YS0+ZXhpdChmYmktPnBkZXYpOworZmFpbGVkX3BsYXRmb3JtX2luaXQ6CiAJaWYgKCFwZGF0YS0+Zml4ZWRfc2NyZWVuX2NwdSkKIAkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCiAJCQlmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKKwljbGtfcHV0KGZiaS0+Y2xrKTsKK2ZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKQEAgLTY5MSw2ICs3NjUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBpbXhmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTcwMSwxMiArNzc2LDE5IEBACiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEtPmV4aXQpCisJCXBkYXRhLT5leGl0KGZiaS0+cGRldik7CisKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJaW91bm1hcChmYmktPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwljbGtfZGlzYWJsZShmYmktPmNsayk7CisJY2xrX3B1dChmYmktPmNsayk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teDNmYi5jIGIvZHJpdmVycy92aWRlby9teDNmYi5jCmluZGV4IDhhNzVkMDUuLmZhMWE1MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKQEAgLTM0LDI0MCArMzQsMjQwIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBNWDNGQl9OQU1FICAgICAgICAgICAgICJteDNfc2RjX2ZiIgorI2RlZmluZSBNWDNGQl9OQU1FCQkibXgzX3NkY19mYiIKIAotI2RlZmluZSBNWDNGQl9SRUdfT0ZGU0VUICAgICAgIDB4QjQKKyNkZWZpbmUgTVgzRkJfUkVHX09GRlNFVAkweEI0CiAKIC8qIFNEQyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgU0RDX0NPTV9DT05GICAgICAgICAgICAoMHhCNCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19HV19DVFJMICAgICAgICAgICAgKDB4QjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfRkdfUE9TICAgICAgICAgICAgICgweEJDIC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0JHX1BPUyAgICAgICAgICAgICAoMHhDMCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19DVVJfUE9TICAgICAgICAgICAgKDB4QzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfUFdNX0NUUkwgICAgICAgICAgICgweEM4IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0NVUl9NQVAgICAgICAgICAgICAoMHhDQyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19IT1JfQ09ORiAgICAgICAgICAgKDB4RDAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfVkVSX0NPTkYgICAgICAgICAgICgweEQ0IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX1NIQVJQX0NPTkZfMSAgICAgICAoMHhEOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19TSEFSUF9DT05GXzIgICAgICAgKDB4REMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfQ09NX0NPTkYJCSgweEI0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX0dXX0NUUkwJCSgweEI4IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX0ZHX1BPUwkJKDB4QkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfQkdfUE9TCQkoMHhDMCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19DVVJfUE9TCQkoMHhDNCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19QV01fQ1RSTAkJKDB4QzggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfQ1VSX01BUAkJKDB4Q0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfSE9SX0NPTkYJCSgweEQwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX1ZFUl9DT05GCQkoMHhENCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19TSEFSUF9DT05GXzEJKDB4RDggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfU0hBUlBfQ09ORl8yCSgweERDIC0gTVgzRkJfUkVHX09GRlNFVCkKIAogLyogUmVnaXN0ZXIgYml0cyAqLwotI2RlZmluZSBTRENfQ09NX1RGVF9DT0xPUiAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBTRENfQ09NX0ZHX0VOICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBTRENfQ09NX0dXU0VMICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBTRENfQ09NX0dMQl9BICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBTRENfQ09NX0tFWV9DT0xPUl9HICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBTRENfQ09NX0JHX0VOICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBTRENfQ09NX1NIQVJQICAgICAgICAgIDB4MDAwMDEwMDBVTAorI2RlZmluZSBTRENfQ09NX1RGVF9DT0xPUgkweDAwMDAwMDAxVUwKKyNkZWZpbmUgU0RDX0NPTV9GR19FTgkJMHgwMDAwMDAxMFVMCisjZGVmaW5lIFNEQ19DT01fR1dTRUwJCTB4MDAwMDAwMjBVTAorI2RlZmluZSBTRENfQ09NX0dMQl9BCQkweDAwMDAwMDQwVUwKKyNkZWZpbmUgU0RDX0NPTV9LRVlfQ09MT1JfRwkweDAwMDAwMDgwVUwKKyNkZWZpbmUgU0RDX0NPTV9CR19FTgkJMHgwMDAwMDIwMFVMCisjZGVmaW5lIFNEQ19DT01fU0hBUlAJCTB4MDAwMDEwMDBVTAogCi0jZGVmaW5lIFNEQ19WX1NZTkNfV0lEVEhfTCAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIFNEQ19WX1NZTkNfV0lEVEhfTAkweDAwMDAwMDAxVUwKIAogLyogRGlzcGxheSBJbnRlcmZhY2UgcmVnaXN0ZXJzICovCi0jZGVmaW5lIERJX0RJU1BfSUZfQ09ORiAgICAgICAgICAgICAgICAoMHgwMTI0IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgRElfRElTUF9TSUdfUE9MICAgICAgICAgICAgICAgICgweDAxMjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9TRVJfRElTUDFfQ09ORiAgICAgICgweDAxMkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9TRVJfRElTUDJfQ09ORiAgICAgICgweDAxMzAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9IU1BfQ0xLX1BFUiAgICAgICAgICgweDAxMzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMSAgICgweDAxMzggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMiAgICgweDAxM0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMyAgICgweDAxNDAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMSAgICgweDAxNDQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMiAgICgweDAxNDggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMyAgICgweDAxNEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMSAgICgweDAxNTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMiAgICgweDAxNTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMyAgICgweDAxNTggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQM19USU1FX0NPTkYgICAgICgweDAxNUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9EQjBfTUFQICAgICAgICgweDAxNjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9EQjFfTUFQICAgICAgICgweDAxNjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9EQjJfTUFQICAgICAgICgweDAxNjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9DQjBfTUFQICAgICAgICgweDAxNkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9DQjFfTUFQICAgICAgICgweDAxNzAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9DQjJfTUFQICAgICAgICgweDAxNzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9EQjBfTUFQICAgICAgICgweDAxNzggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9EQjFfTUFQICAgICAgICgweDAxN0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9EQjJfTUFQICAgICAgICgweDAxODAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9DQjBfTUFQICAgICAgICgweDAxODQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9DQjFfTUFQICAgICAgICgweDAxODggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9DQjJfTUFQICAgICAgICgweDAxOEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9EQjBfTUFQICAgICAgICgweDAxOTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9EQjFfTUFQICAgICAgICgweDAxOTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9EQjJfTUFQICAgICAgICgweDAxOTggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9DQjBfTUFQICAgICAgICgweDAxOUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9DQjFfTUFQICAgICAgICgweDAxQTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9DQjJfTUFQICAgICAgICgweDAxQTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQM19CMF9NQVAgICAgICAgICAgICAgICAgKDB4MDFBOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AzX0IxX01BUCAgICAgICAgICAgICAgICAoMHgwMUFDIC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgRElfRElTUDNfQjJfTUFQICAgICAgICAgICAgICAgICgweDAxQjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX0FDQ19DQyAgICAgICAgICgweDAxQjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX0xMQV9DT05GICAgICAgICgweDAxQjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX0xMQV9EQVRBICAgICAgICgweDAxQkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQX0lGX0NPTkYJCSgweDAxMjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQX1NJR19QT0wJCSgweDAxMjggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9TRVJfRElTUDFfQ09ORgkoMHgwMTJDIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfU0VSX0RJU1AyX0NPTkYJKDB4MDEzMCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0hTUF9DTEtfUEVSCQkoMHgwMTM0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDBfVElNRV9DT05GXzEJKDB4MDEzOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX1RJTUVfQ09ORl8yCSgweDAxM0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMwkoMHgwMTQwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDFfVElNRV9DT05GXzEJKDB4MDE0NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX1RJTUVfQ09ORl8yCSgweDAxNDggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMwkoMHgwMTRDIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDJfVElNRV9DT05GXzEJKDB4MDE1MCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX1RJTUVfQ09ORl8yCSgweDAxNTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMwkoMHgwMTU4IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDNfVElNRV9DT05GCSgweDAxNUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9EQjBfTUFQCSgweDAxNjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9EQjFfTUFQCSgweDAxNjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9EQjJfTUFQCSgweDAxNjggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9DQjBfTUFQCSgweDAxNkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9DQjFfTUFQCSgweDAxNzAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9DQjJfTUFQCSgweDAxNzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9EQjBfTUFQCSgweDAxNzggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9EQjFfTUFQCSgweDAxN0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9EQjJfTUFQCSgweDAxODAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9DQjBfTUFQCSgweDAxODQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9DQjFfTUFQCSgweDAxODggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9DQjJfTUFQCSgweDAxOEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9EQjBfTUFQCSgweDAxOTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9EQjFfTUFQCSgweDAxOTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9EQjJfTUFQCSgweDAxOTggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9DQjBfTUFQCSgweDAxOUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9DQjFfTUFQCSgweDAxQTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9DQjJfTUFQCSgweDAxQTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19CMF9NQVAJCSgweDAxQTggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19CMV9NQVAJCSgweDAxQUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19CMl9NQVAJCSgweDAxQjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQX0FDQ19DQwkJKDB4MDFCNCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfTExBX0NPTkYJKDB4MDFCOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfTExBX0RBVEEJKDB4MDFCQyAtIE1YM0ZCX1JFR19PRkZTRVQpCiAKIC8qIERJX0RJU1BfU0lHX1BPTCBiaXRzICovCi0jZGVmaW5lIERJX0QzX1ZTWU5DX1BPTF9TSElGVCAgICAgICAgICAyOAotI2RlZmluZSBESV9EM19IU1lOQ19QT0xfU0hJRlQgICAgICAgICAgMjcKLSNkZWZpbmUgRElfRDNfRFJEWV9TSEFSUF9QT0xfU0hJRlQgICAgIDI2Ci0jZGVmaW5lIERJX0QzX0NMS19QT0xfU0hJRlQgICAgICAgICAgICAyNQotI2RlZmluZSBESV9EM19EQVRBX1BPTF9TSElGVCAgICAgICAgICAgMjQKKyNkZWZpbmUgRElfRDNfVlNZTkNfUE9MX1NISUZUCQkyOAorI2RlZmluZSBESV9EM19IU1lOQ19QT0xfU0hJRlQJCTI3CisjZGVmaW5lIERJX0QzX0RSRFlfU0hBUlBfUE9MX1NISUZUCTI2CisjZGVmaW5lIERJX0QzX0NMS19QT0xfU0hJRlQJCTI1CisjZGVmaW5lIERJX0QzX0RBVEFfUE9MX1NISUZUCQkyNAogCiAvKiBESV9ESVNQX0lGX0NPTkYgYml0cyAqLwotI2RlZmluZSBESV9EM19DTEtfSURMRV9TSElGVCAgICAgICAgICAgMjYKLSNkZWZpbmUgRElfRDNfQ0xLX1NFTF9TSElGVCAgICAgICAgICAgIDI1Ci0jZGVmaW5lIERJX0QzX0RBVEFNU0tfU0hJRlQgICAgICAgICAgICAyNAorI2RlZmluZSBESV9EM19DTEtfSURMRV9TSElGVAkJMjYKKyNkZWZpbmUgRElfRDNfQ0xLX1NFTF9TSElGVAkJMjUKKyNkZWZpbmUgRElfRDNfREFUQU1TS19TSElGVAkJMjQKIAogZW51bSBpcHVfcGFuZWwgewotICAgICAgIElQVV9QQU5FTF9TSEFSUF9URlQsCi0gICAgICAgSVBVX1BBTkVMX1RGVCwKKwlJUFVfUEFORUxfU0hBUlBfVEZULAorCUlQVV9QQU5FTF9URlQsCiB9OwogCiBzdHJ1Y3QgaXB1X2RpX3NpZ25hbF9jZmcgewotICAgICAgIHVuc2lnbmVkIGRhdGFtYXNrX2VuOjE7Ci0gICAgICAgdW5zaWduZWQgY2xrc2VsX2VuOjE7Ci0gICAgICAgdW5zaWduZWQgY2xraWRsZV9lbjoxOwotICAgICAgIHVuc2lnbmVkIGRhdGFfcG9sOjE7ICAgIC8qIHRydWUgPSBpbnZlcnRlZCAqLwotICAgICAgIHVuc2lnbmVkIGNsa19wb2w6MTsgICAgIC8qIHRydWUgPSByaXNpbmcgZWRnZSAqLwotICAgICAgIHVuc2lnbmVkIGVuYWJsZV9wb2w6MTsKLSAgICAgICB1bnNpZ25lZCBIc3luY19wb2w6MTsgICAvKiB0cnVlID0gYWN0aXZlIGhpZ2ggKi8KLSAgICAgICB1bnNpZ25lZCBWc3luY19wb2w6MTsKKwl1bnNpZ25lZCBkYXRhbWFza19lbjoxOworCXVuc2lnbmVkIGNsa3NlbF9lbjoxOworCXVuc2lnbmVkIGNsa2lkbGVfZW46MTsKKwl1bnNpZ25lZCBkYXRhX3BvbDoxOwkvKiB0cnVlID0gaW52ZXJ0ZWQgKi8KKwl1bnNpZ25lZCBjbGtfcG9sOjE7CS8qIHRydWUgPSByaXNpbmcgZWRnZSAqLworCXVuc2lnbmVkIGVuYWJsZV9wb2w6MTsKKwl1bnNpZ25lZCBIc3luY19wb2w6MTsJLyogdHJ1ZSA9IGFjdGl2ZSBoaWdoICovCisJdW5zaWduZWQgVnN5bmNfcG9sOjE7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBteDNmYl9tb2RlZGJbXSA9IHsKLSAgICAgICB7Ci0gICAgICAgICAgICAgICAvKiAyNDB4MzIwIEAgNjAgSHogKi8KLSAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJTaGFycC1RVkdBIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDYwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gMjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMzIwLAotICAgICAgICAgICAgICAgLnBpeGNsb2NrICAgICAgID0gMTg1OTI1LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gOSwKLSAgICAgICAgICAgICAgIC5yaWdodF9tYXJnaW4gICA9IDE2LAotICAgICAgICAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gNywKLSAgICAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDksCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19TSEFSUF9NT0RFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZCX1NZTkNfQ0xLX0lOVkVSVCB8IEZCX1NZTkNfREFUQV9JTlZFUlQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkJfU1lOQ19DTEtfSURMRV9FTiwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIC8qIDI0MHgzMyBAIDYwIEh6ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiU2hhcnAtQ0xJIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDYwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gMjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMzMsCi0gICAgICAgICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAxODU5MjUsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSA5LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gMTYsCi0gICAgICAgICAgICAgICAudXBwZXJfbWFyZ2luICAgPSA3LAotICAgICAgICAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gOSArIDI4NywKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDEsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1NIQVJQX01PREUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19EQVRBX0lOVkVSVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQl9TWU5DX0NMS19JRExFX0VOLAotICAgICAgICAgICAgICAgLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgICAgICAgIC5mbGFnICAgICAgICAgICA9IDAsCi0gICAgICAgfSwgewotICAgICAgICAgICAgICAgLyogNjQweDQ4MCBAIDYwIEh6ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiTkVDLVZHQSIsCi0gICAgICAgICAgICAgICAucmVmcmVzaCAgICAgICAgPSA2MCwKLSAgICAgICAgICAgICAgIC54cmVzICAgICAgICAgICA9IDY0MCwKLSAgICAgICAgICAgICAgIC55cmVzICAgICAgICAgICA9IDQ4MCwKLSAgICAgICAgICAgICAgIC5waXhjbG9jayAgICAgICA9IDM4MjU1LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gMTQ0LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gMCwKLSAgICAgICAgICAgICAgIC51cHBlcl9tYXJnaW4gICA9IDM0LAotICAgICAgICAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gNDAsCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfT0VfQUNUX0hJR0gsCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiBOVFNDIFRWIG91dHB1dCAqLwotICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRWLU5UU0MiLAotICAgICAgICAgICAgICAgLnJlZnJlc2ggICAgICAgID0gNjAsCi0gICAgICAgICAgICAgICAueHJlcyAgICAgICAgICAgPSA2NDAsCi0gICAgICAgICAgICAgICAueXJlcyAgICAgICAgICAgPSA0ODAsCi0gICAgICAgICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAzNzUzOCwKLSAgICAgICAgICAgICAgIC5sZWZ0X21hcmdpbiAgICA9IDM4LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gODU4IC0gNjQwIC0gMzggLSAzLAotICAgICAgICAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gMzYsCi0gICAgICAgICAgICAgICAubG93ZXJfbWFyZ2luICAgPSA1MTggLSA0ODAgLSAzNiAtIDEsCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSAzLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IDAsCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiBQQUwgVFYgb3V0cHV0ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiVFYtUEFMIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDUwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gNjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gNDgwLAotICAgICAgICAgICAgICAgLnBpeGNsb2NrICAgICAgID0gMzc1MzgsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSAzOCwKLSAgICAgICAgICAgICAgIC5yaWdodF9tYXJnaW4gICA9IDk2MCAtIDY0MCAtIDM4IC0gMzIsCi0gICAgICAgICAgICAgICAudXBwZXJfbWFyZ2luICAgPSAzMiwKLSAgICAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDU1NSAtIDQ4MCAtIDMyIC0gMywKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDMyLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMywKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IDAsCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiBUViBvdXRwdXQgVkdBIG1vZGUsIDY0MHg0ODAgQCA2NSBIeiAqLwotICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRWLVZHQSIsCi0gICAgICAgICAgICAgICAucmVmcmVzaCAgICAgICAgPSA2MCwKLSAgICAgICAgICAgICAgIC54cmVzICAgICAgICAgICA9IDY0MCwKLSAgICAgICAgICAgICAgIC55cmVzICAgICAgICAgICA9IDQ4MCwKLSAgICAgICAgICAgICAgIC5waXhjbG9jayAgICAgICA9IDQwNTc0LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gMzUsCi0gICAgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSA0NSwKLSAgICAgICAgICAgICAgIC51cHBlcl9tYXJnaW4gICA9IDksCi0gICAgICAgICAgICAgICAubG93ZXJfbWFyZ2luICAgPSAxLAotICAgICAgICAgICAgICAgLmhzeW5jX2xlbiAgICAgID0gNDYsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSA1LAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gMCwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sCisJeworCQkvKiAyNDB4MzIwIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIlNoYXJwLVFWR0EiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSAyNDAsCisJCS55cmVzCQk9IDMyMCwKKwkJLnBpeGNsb2NrCT0gMTg1OTI1LAorCQkubGVmdF9tYXJnaW4JPSA5LAorCQkucmlnaHRfbWFyZ2luCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkubG93ZXJfbWFyZ2luCT0gOSwKKwkJLmhzeW5jX2xlbgk9IDEsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfU0hBUlBfTU9ERSB8CisJCQkJICBGQl9TWU5DX0NMS19JTlZFUlQgfCBGQl9TWU5DX0RBVEFfSU5WRVJUIHwKKwkJCQkgIEZCX1NZTkNfQ0xLX0lETEVfRU4sCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogMjQweDMzIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIlNoYXJwLUNMSSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzMsCisJCS5waXhjbG9jawk9IDE4NTkyNSwKKwkJLmxlZnRfbWFyZ2luCT0gOSwKKwkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJLmxvd2VyX21hcmdpbgk9IDkgKyAyODcsCisJCS5oc3luY19sZW4JPSAxLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1NIQVJQX01PREUgfAorCQkJCSAgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19EQVRBX0lOVkVSVCB8CisJCQkJICBGQl9TWU5DX0NMS19JRExFX0VOLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LCB7CisJCS8qIDY0MHg0ODAgQCA2MCBIeiAqLworCQkubmFtZQkJPSAiTkVDLVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSAzODI1NSwKKwkJLmxlZnRfbWFyZ2luCT0gMTQ0LAorCQkucmlnaHRfbWFyZ2luCT0gMCwKKwkJLnVwcGVyX21hcmdpbgk9IDM0LAorCQkubG93ZXJfbWFyZ2luCT0gNDAsCisJCS5oc3luY19sZW4JPSAxLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUIHwgRkJfU1lOQ19PRV9BQ1RfSElHSCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgeworCQkvKiBOVFNDIFRWIG91dHB1dCAqLworCQkubmFtZQkJPSAiVFYtTlRTQyIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSAzNzUzOCwKKwkJLmxlZnRfbWFyZ2luCT0gMzgsCisJCS5yaWdodF9tYXJnaW4JPSA4NTggLSA2NDAgLSAzOCAtIDMsCisJCS51cHBlcl9tYXJnaW4JPSAzNiwKKwkJLmxvd2VyX21hcmdpbgk9IDUxOCAtIDQ4MCAtIDM2IC0gMSwKKwkJLmhzeW5jX2xlbgk9IDMsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LCB7CisJCS8qIFBBTCBUViBvdXRwdXQgKi8KKwkJLm5hbWUJCT0gIlRWLVBBTCIsCisJCS5yZWZyZXNoCT0gNTAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSAzNzUzOCwKKwkJLmxlZnRfbWFyZ2luCT0gMzgsCisJCS5yaWdodF9tYXJnaW4JPSA5NjAgLSA2NDAgLSAzOCAtIDMyLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSA1NTUgLSA0ODAgLSAzMiAtIDMsCisJCS5oc3luY19sZW4JPSAzMiwKKwkJLnZzeW5jX2xlbgk9IDMsCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogVFYgb3V0cHV0IFZHQSBtb2RlLCA2NDB4NDgwIEAgNjUgSHogKi8KKwkJLm5hbWUJCT0gIlRWLVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSA0MDU3NCwKKwkJLmxlZnRfbWFyZ2luCT0gMzUsCisJCS5yaWdodF9tYXJnaW4JPSA0NSwKKwkJLnVwcGVyX21hcmdpbgk9IDksCisJCS5sb3dlcl9tYXJnaW4JPSAxLAorCQkuaHN5bmNfbGVuCT0gNDYsCisJCS52c3luY19sZW4JPSA1LAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LAogfTsKIAogc3RydWN0IG14M2ZiX2RhdGEgewotICAgICAgIHN0cnVjdCBmYl9pbmZvICAgICAgICAgICpmYmk7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgYmFja2xpZ2h0X2xldmVsOwotICAgICAgIHZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdfYmFzZTsKLSAgICAgICBzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOwotICAgICAgIHN0cnVjdCBkZXZpY2UgICAgICAgICAgICpkZXY7CisJc3RydWN0IGZiX2luZm8JCSpmYmk7CisJaW50CQkJYmFja2xpZ2h0X2xldmVsOworCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGRldmljZQkJKmRldjsKIAotICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGhfc3RhcnRfd2lkdGg7Ci0gICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgdl9zdGFydF93aWR0aDsKKwl1aW50MzJfdAkJaF9zdGFydF93aWR0aDsKKwl1aW50MzJfdAkJdl9zdGFydF93aWR0aDsKIH07CiAKIHN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAgICAgICAqbXgzZmI7Ci0gICAgICAgZW51bSBpcHVfY2hhbm5lbCAgICAgICAgaWQ7CisJc3RydWN0IG14M2ZiX2RhdGEJKm14M2ZiOworCWVudW0gaXB1X2NoYW5uZWwJaWQ7CiB9OwogCiAvKiBNWDMgc3BlY2lmaWMgZnJhbWVidWZmZXIgaW5mb3JtYXRpb24uICovCiBzdHJ1Y3QgbXgzZmJfaW5mbyB7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFuazsKLSAgICAgICBlbnVtIGlwdV9jaGFubmVsICAgICAgICAgICAgICAgIGlwdV9jaDsKLSAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9pcHVfYnVmOworCWludAkJCQlibGFuazsKKwllbnVtIGlwdV9jaGFubmVsCQlpcHVfY2g7CisJdWludDMyX3QJCQljdXJfaXB1X2J1ZjsKIAotICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvX3BhbGV0dGVbMTZdOworCXUzMgkJCQlwc2V1ZG9fcGFsZXR0ZVsxNl07CiAKLSAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiAgICAgICAgICAgICAgIGZsaXBfY21wbDsKLSAgICAgICBzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIG11dGV4OyAgLyogUHJvdGVjdHMgZmItb3BzICovCi0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgICAgICAgICAgICAgICAqbXgzZmI7Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgICAgICAgICAgICAqaWRtYWNfY2hhbm5lbDsKLSAgICAgICBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgICp0eGQ7Ci0gICAgICAgZG1hX2Nvb2tpZV90ICAgICAgICAgICAgICAgICAgICBjb29raWU7Ci0gICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgICAgICAgICBzZ1syXTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJZmxpcF9jbXBsOworCXN0cnVjdCBtdXRleAkJCW11dGV4OwkvKiBQcm90ZWN0cyBmYi1vcHMgKi8KKwlzdHJ1Y3QgbXgzZmJfZGF0YQkJKm14M2ZiOworCXN0cnVjdCBpZG1hY19jaGFubmVsCQkqaWRtYWNfY2hhbm5lbDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKnR4ZDsKKwlkbWFfY29va2llX3QJCQljb29raWU7CisJc3RydWN0IHNjYXR0ZXJsaXN0CQlzZ1syXTsKIAotICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYzsgICAvKiBwcmVzZXJ2ZSB2YXItPnN5bmMgZmxhZ3MgKi8KKwl1MzIJCQkJc3luYzsJLyogcHJlc2VydmUgdmFyLT5zeW5jIGZsYWdzICovCiB9OwogCiBzdGF0aWMgdm9pZCBteDNmYl9kbWFfZG9uZSh2b2lkICopOwpAQCAtMjc4LDM4OSArMjc4LDM4OSBAQAogCiBzdGF0aWMgdTMyIG14M2ZiX3JlYWRfcmVnKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0gICAgICAgcmV0dXJuIF9fcmF3X3JlYWRsKG14M2ZiLT5yZWdfYmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG14M2ZiLT5yZWdfYmFzZSArIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG14M2ZiX3dyaXRlX3JlZyhzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0gICAgICAgX19yYXdfd3JpdGVsKHZhbHVlLCBteDNmYi0+cmVnX2Jhc2UgKyByZWcpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgbXgzZmItPnJlZ19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGNvbnN0IHVpbnQzMl90IGRpX21hcHBpbmdzW10gPSB7Ci0gICAgICAgMHgxNjAwQUFBQSwgMHgwMEUwNTU1NSwgMHgwMDA3MDAwMCwgMywgIC8qIFJHQjg4OCAqLwotICAgICAgIDB4MDAwNTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAxMTAwMEYsIDEsICAvKiBSR0I2NjYgKi8KLSAgICAgICAweDAwMTEwMDBGLCAweDAwMEIwMDBGLCAweDAwMDUwMDBGLCAxLCAgLyogQkdSNjY2ICovCi0gICAgICAgMHgwMDA0MDAzRiwgMHgwMDBBMDAwRiwgMHgwMDBGMDAzRiwgMSAgIC8qIFJHQjU2NSAqLworCTB4MTYwMEFBQUEsIDB4MDBFMDU1NTUsIDB4MDAwNzAwMDAsIDMsCS8qIFJHQjg4OCAqLworCTB4MDAwNTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAxMTAwMEYsIDEsCS8qIFJHQjY2NiAqLworCTB4MDAxMTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAwNTAwMEYsIDEsCS8qIEJHUjY2NiAqLworCTB4MDAwNDAwM0YsIDB4MDAwQTAwMEYsIDB4MDAwRjAwM0YsIDEJLyogUkdCNTY1ICovCiB9OwogCiBzdGF0aWMgdm9pZCBzZGNfZmJfaW5pdChzdHJ1Y3QgbXgzZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7Ci0gICAgICAgdWludDMyX3QgcmVnOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7CisJdWludDMyX3QgcmVnOwogCi0gICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fQkdfRU4sIFNEQ19DT01fQ09ORik7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgfCBTRENfQ09NX0JHX0VOLCBTRENfQ09NX0NPTkYpOwogfQogCiAvKiBSZXR1cm5zIGVuYWJsZWQgZmxhZyBiZWZvcmUgdW5pbml0ICovCiBzdGF0aWMgdWludDMyX3Qgc2RjX2ZiX3VuaW5pdChzdHJ1Y3QgbXgzZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7Ci0gICAgICAgdWludDMyX3QgcmVnOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7CisJdWludDMyX3QgcmVnOwogCi0gICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyAmIH5TRENfQ09NX0JHX0VOLCBTRENfQ09NX0NPTkYpOworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnICYgflNEQ19DT01fQkdfRU4sIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICByZXR1cm4gcmVnICYgU0RDX0NPTV9CR19FTjsKKwlyZXR1cm4gcmVnICYgU0RDX0NPTV9CR19FTjsKIH0KIAogc3RhdGljIHZvaWQgc2RjX2VuYWJsZV9jaGFubmVsKHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOwotICAgICAgIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19mYmktPmlkbWFjX2NoYW5uZWw7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpkbWFfY2hhbiA9ICZpY2hhbi0+ZG1hX2NoYW47Ci0gICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICBkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19mYmktPmlkbWFjX2NoYW5uZWw7CisJc3RydWN0IGRtYV9jaGFuICpkbWFfY2hhbiA9ICZpY2hhbi0+ZG1hX2NoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbWFfY29va2llX3QgY29va2llOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAibXgzZmJpICVwLCBkZXNjICVwLCBzZyAlcFxuIiwgbXgzX2ZiaSwKLSAgICAgICAgICAgICAgIHRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKSwgdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLT5zZyk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAibXgzZmJpICVwLCBkZXNjICVwLCBzZyAlcFxuIiwgbXgzX2ZiaSwKKwkJdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLCB0b190eF9kZXNjKG14M19mYmktPnR4ZCktPnNnKTsKIAotICAgICAgIC8qIFRoaXMgZW5hYmxlcyB0aGUgY2hhbm5lbCAqLwotICAgICAgIGlmIChteDNfZmJpLT5jb29raWUgPCAwKSB7Ci0gICAgICAgICAgICAgICBteDNfZmJpLT50eGQgPSBkbWFfY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhkbWFfY2hhbiwKLSAgICAgICAgICAgICAgICAgICAgICZteDNfZmJpLT5zZ1swXSwgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUKTsKLSAgICAgICAgICAgICAgIGlmICghbXgzX2ZiaS0+dHhkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIobXgzZmItPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBkZXNjcmlwdG9yIG9uICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jaGFuLT5jaGFuX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgfQorCS8qIFRoaXMgZW5hYmxlcyB0aGUgY2hhbm5lbCAqLworCWlmIChteDNfZmJpLT5jb29raWUgPCAwKSB7CisJCW14M19mYmktPnR4ZCA9IGRtYV9jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGRtYV9jaGFuLAorCQkgICAgICAmbXgzX2ZiaS0+c2dbMF0sIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7CisJCWlmICghbXgzX2ZiaS0+dHhkKSB7CisJCQlkZXZfZXJyKG14M2ZiLT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgZGVzY3JpcHRvciBvbiAlZFxuIiwKKwkJCQlkbWFfY2hhbi0+Y2hhbl9pZCk7CisJCQlyZXR1cm47CisJCX0KIAotICAgICAgICAgICAgICAgbXgzX2ZiaS0+dHhkLT5jYWxsYmFja19wYXJhbSAgICA9IG14M19mYmktPnR4ZDsKLSAgICAgICAgICAgICAgIG14M19mYmktPnR4ZC0+Y2FsbGJhY2sgICAgICAgICAgPSBteDNmYl9kbWFfZG9uZTsKKwkJbXgzX2ZiaS0+dHhkLT5jYWxsYmFja19wYXJhbQk9IG14M19mYmktPnR4ZDsKKwkJbXgzX2ZiaS0+dHhkLT5jYWxsYmFjawkJPSBteDNmYl9kbWFfZG9uZTsKIAotICAgICAgICAgICAgICAgY29va2llID0gbXgzX2ZiaS0+dHhkLT50eF9zdWJtaXQobXgzX2ZiaS0+dHhkKTsKLSAgICAgICAgICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIiVkOiBTdWJtaXQgJXAgIyVkIFslY11cbiIsIF9fTElORV9fLAotICAgICAgICAgICAgICAgICAgICAgIG14M19mYmktPnR4ZCwgY29va2llLCBsaXN0X2VtcHR5KCZpY2hhbi0+cXVldWUpID8gJy0nIDogJysnKTsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgaWYgKCFteDNfZmJpLT50eGQgfHwgIW14M19mYmktPnR4ZC0+dHhfc3VibWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIobXgzZmItPmRldiwgIkNhbm5vdCBlbmFibGUgY2hhbm5lbCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfY2hhbi0+Y2hhbl9pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgIH0KKwkJY29va2llID0gbXgzX2ZiaS0+dHhkLT50eF9zdWJtaXQobXgzX2ZiaS0+dHhkKTsKKwkJZGV2X2RiZyhteDNmYi0+ZGV2LCAiJWQ6IFN1Ym1pdCAlcCAjJWQgWyVjXVxuIiwgX19MSU5FX18sCisJCSAgICAgICBteDNfZmJpLT50eGQsIGNvb2tpZSwgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJfSBlbHNlIHsKKwkJaWYgKCFteDNfZmJpLT50eGQgfHwgIW14M19mYmktPnR4ZC0+dHhfc3VibWl0KSB7CisJCQlkZXZfZXJyKG14M2ZiLT5kZXYsICJDYW5ub3QgZW5hYmxlIGNoYW5uZWwgJWRcbiIsCisJCQkJZG1hX2NoYW4tPmNoYW5faWQpOworCQkJcmV0dXJuOworCQl9CiAKLSAgICAgICAgICAgICAgIC8qIEp1c3QgcmUtYWN0aXZhdGUgdGhlIHNhbWUgYnVmZmVyICovCi0gICAgICAgICAgICAgICBkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7Ci0gICAgICAgICAgICAgICBjb29raWUgPSBteDNfZmJpLT5jb29raWU7Ci0gICAgICAgICAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICIlZDogUmUtc3VibWl0ICVwICMlZCBbJWNdXG4iLCBfX0xJTkVfXywKLSAgICAgICAgICAgICAgICAgICAgICBteDNfZmJpLT50eGQsIGNvb2tpZSwgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7Ci0gICAgICAgfQorCQkvKiBKdXN0IHJlLWFjdGl2YXRlIHRoZSBzYW1lIGJ1ZmZlciAqLworCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7CisJCWNvb2tpZSA9IG14M19mYmktPmNvb2tpZTsKKwkJZGV2X2RiZyhteDNmYi0+ZGV2LCAiJWQ6IFJlLXN1Ym1pdCAlcCAjJWQgWyVjXVxuIiwgX19MSU5FX18sCisJCSAgICAgICBteDNfZmJpLT50eGQsIGNvb2tpZSwgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJfQogCi0gICAgICAgaWYgKGNvb2tpZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgICAgIHNkY19mYl9pbml0KG14M19mYmkpOwotICAgICAgICAgICAgICAgbXgzX2ZiaS0+Y29va2llID0gY29va2llOwotICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKLSAgICAgICB9CisJaWYgKGNvb2tpZSA+PSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgZmxhZ3MpOworCQlzZGNfZmJfaW5pdChteDNfZmJpKTsKKwkJbXgzX2ZiaS0+Y29va2llID0gY29va2llOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgZmxhZ3MpOworCX0KIAotICAgICAgIC8qCi0gICAgICAgICogQXR0ZW50aW9uISBXaXRob3V0IHRoaXMgbXNsZWVwIHRoZSBjaGFubmVsIGtlZXBzIGdlbmVyYXRpbmcKLSAgICAgICAgKiBpbnRlcnJ1cHRzLiBOZXh0IHNkY19zZXRfYnJpZ2h0bmVzcygpIGlzIGdvaW5nIHRvIGJlIGNhbGxlZAotICAgICAgICAqIGZyb20gbXgzZmJfYmxhbmsoKS4KLSAgICAgICAgKi8KLSAgICAgICBtc2xlZXAoMik7CisJLyoKKwkgKiBBdHRlbnRpb24hIFdpdGhvdXQgdGhpcyBtc2xlZXAgdGhlIGNoYW5uZWwga2VlcHMgZ2VuZXJhdGluZworCSAqIGludGVycnVwdHMuIE5leHQgc2RjX3NldF9icmlnaHRuZXNzKCkgaXMgZ29pbmcgdG8gYmUgY2FsbGVkCisJICogZnJvbSBteDNmYl9ibGFuaygpLgorCSAqLworCW1zbGVlcCgyKTsKIH0KIAogc3RhdGljIHZvaWQgc2RjX2Rpc2FibGVfY2hhbm5lbChzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSkKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKLSAgICAgICB1aW50MzJfdCBlbmFibGVkOwotICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7CisJdWludDMyX3QgZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CiAKLSAgICAgICBlbmFibGVkID0gc2RjX2ZiX3VuaW5pdChteDNfZmJpKTsKKwllbmFibGVkID0gc2RjX2ZiX3VuaW5pdChteDNfZmJpKTsKIAotICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKIAotICAgICAgIG14M19mYmktPnR4ZC0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfdGVybWluYXRlX2FsbChteDNfZmJpLT50eGQtPmNoYW4pOwotICAgICAgIG14M19mYmktPnR4ZCA9IE5VTEw7Ci0gICAgICAgbXgzX2ZiaS0+Y29va2llID0gLUVJTlZBTDsKKwlteDNfZmJpLT50eGQtPmNoYW4tPmRldmljZS0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwobXgzX2ZiaS0+dHhkLT5jaGFuKTsKKwlteDNfZmJpLT50eGQgPSBOVUxMOworCW14M19mYmktPmNvb2tpZSA9IC1FSU5WQUw7CiB9CiAKIC8qKgogICogc2RjX3NldF93aW5kb3dfcG9zKCkgLSBzZXQgd2luZG93IHBvc2l0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHBsYW5lLgotICogQG14M2ZiOiAgICAgbXgzZmIgY29udGV4dC4KLSAqIEBjaGFubmVsOiAgIElQVSBETUFDIGNoYW5uZWwgSUQuCi0gKiBAeF9wb3M6ICAgICBYIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lciB0byBwbGFjZSB3aW5kb3cgYXQuCi0gKiBAeV9wb3M6ICAgICBZIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lciB0byBwbGFjZSB3aW5kb3cgYXQuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQG14M2ZiOglteDNmYiBjb250ZXh0LgorICogQGNoYW5uZWw6CUlQVSBETUFDIGNoYW5uZWwgSUQuCisgKiBAeF9wb3M6CVggY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgdG9wIGxlZnQgY29ybmVyIHRvIHBsYWNlIHdpbmRvdyBhdC4KKyAqIEB5X3BvczoJWSBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGVmdCBjb3JuZXIgdG8gcGxhY2Ugd2luZG93IGF0LgorICogQHJldHVybjoJMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBzZGNfc2V0X3dpbmRvd19wb3Moc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgeF9wb3MsIGludDE2X3QgeV9wb3MpCisJCQkgICAgICBpbnQxNl90IHhfcG9zLCBpbnQxNl90IHlfcG9zKQogewotICAgICAgIHhfcG9zICs9IG14M2ZiLT5oX3N0YXJ0X3dpZHRoOwotICAgICAgIHlfcG9zICs9IG14M2ZiLT52X3N0YXJ0X3dpZHRoOworCXhfcG9zICs9IG14M2ZiLT5oX3N0YXJ0X3dpZHRoOworCXlfcG9zICs9IG14M2ZiLT52X3N0YXJ0X3dpZHRoOwogCi0gICAgICAgaWYgKGNoYW5uZWwgIT0gSURNQUNfU0RDXzApCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hhbm5lbCAhPSBJRE1BQ19TRENfMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsICh4X3BvcyA8PCAxNikgfCB5X3BvcywgU0RDX0JHX1BPUyk7Ci0gICAgICAgcmV0dXJuIDA7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAoeF9wb3MgPDwgMTYpIHwgeV9wb3MsIFNEQ19CR19QT1MpOworCXJldHVybiAwOwogfQogCiAvKioKICAqIHNkY19pbml0X3BhbmVsKCkgLSBpbml0aWFsaXplIGEgc3luY2hyb25vdXMgTENEIHBhbmVsLgotICogQG14M2ZiOiAgICAgICAgICAgICBteDNmYiBjb250ZXh0LgotICogQHBhbmVsOiAgICAgICAgICAgICBwYW5lbCB0eXBlLgotICogQHBpeGVsX2NsazogICAgICAgICBkZXNpcmVkIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KLSAqIEB3aWR0aDogICAgICAgICAgICAgd2lkdGggb2YgcGFuZWwgaW4gcGl4ZWxzLgotICogQGhlaWdodDogICAgICAgICAgICBoZWlnaHQgb2YgcGFuZWwgaW4gcGl4ZWxzLgotICogQHBpeGVsX2ZtdDogICAgICAgICBwaXhlbCBmb3JtYXQgb2YgYnVmZmVyIGFzIEZPVVJDQyBBU0NJSSBjb2RlLgotICogQGhfc3RhcnRfd2lkdGg6ICAgICBudW1iZXIgb2YgcGl4ZWwgY2xvY2tzIGJldHdlZW4gdGhlIEhTWU5DIHNpZ25hbCBwdWxzZQotICogICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHN0YXJ0IG9mIHZhbGlkIGRhdGEuCi0gKiBAaF9zeW5jX3dpZHRoOiAgICAgIHdpZHRoIG9mIHRoZSBIU1lOQyBzaWduYWwgaW4gdW5pdHMgb2YgcGl4ZWwgY2xvY2tzLgotICogQGhfZW5kX3dpZHRoOiAgICAgICBudW1iZXIgb2YgcGl4ZWwgY2xvY2tzIGJldHdlZW4gdGhlIGVuZCBvZiB2YWxpZCBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgSFNZTkMgc2lnbmFsIGZvciBuZXh0IGxpbmUuCi0gKiBAdl9zdGFydF93aWR0aDogICAgIG51bWJlciBvZiBsaW5lcyBiZXR3ZWVuIHRoZSBWU1lOQyBzaWduYWwgcHVsc2UgYW5kIHRoZQotICogICAgICAgICAgICAgICAgICAgICBzdGFydCBvZiB2YWxpZCBkYXRhLgotICogQHZfc3luY193aWR0aDogICAgICB3aWR0aCBvZiB0aGUgVlNZTkMgc2lnbmFsIGluIHVuaXRzIG9mIGxpbmVzCi0gKiBAdl9lbmRfd2lkdGg6ICAgICAgIG51bWJlciBvZiBsaW5lcyBiZXR3ZWVuIHRoZSBlbmQgb2YgdmFsaWQgZGF0YSBhbmQgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgIFZTWU5DIHNpZ25hbCBmb3IgbmV4dCBmcmFtZS4KLSAqIEBzaWc6ICAgICAgICAgICAgICAgYml0ZmllbGQgb2Ygc2lnbmFsIHBvbGFyaXRpZXMgZm9yIExDRCBpbnRlcmZhY2UuCi0gKiBAcmV0dXJuOiAgICAgICAgICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAbXgzZmI6CQlteDNmYiBjb250ZXh0LgorICogQHBhbmVsOgkJcGFuZWwgdHlwZS4KKyAqIEBwaXhlbF9jbGs6CQlkZXNpcmVkIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqIEB3aWR0aDoJCXdpZHRoIG9mIHBhbmVsIGluIHBpeGVscy4KKyAqIEBoZWlnaHQ6CQloZWlnaHQgb2YgcGFuZWwgaW4gcGl4ZWxzLgorICogQHBpeGVsX2ZtdDoJCXBpeGVsIGZvcm1hdCBvZiBidWZmZXIgYXMgRk9VUkNDIEFTQ0lJIGNvZGUuCisgKiBAaF9zdGFydF93aWR0aDoJbnVtYmVyIG9mIHBpeGVsIGNsb2NrcyBiZXR3ZWVuIHRoZSBIU1lOQyBzaWduYWwgcHVsc2UKKyAqCQkJYW5kIHRoZSBzdGFydCBvZiB2YWxpZCBkYXRhLgorICogQGhfc3luY193aWR0aDoJd2lkdGggb2YgdGhlIEhTWU5DIHNpZ25hbCBpbiB1bml0cyBvZiBwaXhlbCBjbG9ja3MuCisgKiBAaF9lbmRfd2lkdGg6CW51bWJlciBvZiBwaXhlbCBjbG9ja3MgYmV0d2VlbiB0aGUgZW5kIG9mIHZhbGlkIGRhdGEKKyAqCQkJYW5kIHRoZSBIU1lOQyBzaWduYWwgZm9yIG5leHQgbGluZS4KKyAqIEB2X3N0YXJ0X3dpZHRoOgludW1iZXIgb2YgbGluZXMgYmV0d2VlbiB0aGUgVlNZTkMgc2lnbmFsIHB1bHNlIGFuZCB0aGUKKyAqCQkJc3RhcnQgb2YgdmFsaWQgZGF0YS4KKyAqIEB2X3N5bmNfd2lkdGg6CXdpZHRoIG9mIHRoZSBWU1lOQyBzaWduYWwgaW4gdW5pdHMgb2YgbGluZXMKKyAqIEB2X2VuZF93aWR0aDoJbnVtYmVyIG9mIGxpbmVzIGJldHdlZW4gdGhlIGVuZCBvZiB2YWxpZCBkYXRhIGFuZCB0aGUKKyAqCQkJVlNZTkMgc2lnbmFsIGZvciBuZXh0IGZyYW1lLgorICogQHNpZzoJCWJpdGZpZWxkIG9mIHNpZ25hbCBwb2xhcml0aWVzIGZvciBMQ0QgaW50ZXJmYWNlLgorICogQHJldHVybjoJCTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgc2RjX2luaXRfcGFuZWwoc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCBlbnVtIGlwdV9wYW5lbCBwYW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbF9jbGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgd2lkdGgsIHVpbnQxNl90IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBpeGVsX2ZtdCBwaXhlbF9mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgaF9zdGFydF93aWR0aCwgdWludDE2X3QgaF9zeW5jX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGhfZW5kX3dpZHRoLCB1aW50MTZfdCB2X3N0YXJ0X3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHZfc3luY193aWR0aCwgdWludDE2X3Qgdl9lbmRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlwdV9kaV9zaWduYWxfY2ZnIHNpZykKKwkJCSAgdWludDMyX3QgcGl4ZWxfY2xrLAorCQkJICB1aW50MTZfdCB3aWR0aCwgdWludDE2X3QgaGVpZ2h0LAorCQkJICBlbnVtIHBpeGVsX2ZtdCBwaXhlbF9mbXQsCisJCQkgIHVpbnQxNl90IGhfc3RhcnRfd2lkdGgsIHVpbnQxNl90IGhfc3luY193aWR0aCwKKwkJCSAgdWludDE2X3QgaF9lbmRfd2lkdGgsIHVpbnQxNl90IHZfc3RhcnRfd2lkdGgsCisJCQkgIHVpbnQxNl90IHZfc3luY193aWR0aCwgdWludDE2X3Qgdl9lbmRfd2lkdGgsCisJCQkgIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWcpCiB7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwotICAgICAgIHVpbnQzMl90IHJlZzsKLSAgICAgICB1aW50MzJfdCBvbGRfY29uZjsKLSAgICAgICB1aW50MzJfdCBkaXY7Ci0gICAgICAgc3RydWN0IGNsayAqaXB1X2NsazsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdWludDMyX3QgcmVnOworCXVpbnQzMl90IG9sZF9jb25mOworCXVpbnQzMl90IGRpdjsKKwlzdHJ1Y3QgY2xrICppcHVfY2xrOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAicGFuZWwgc2l6ZSA9ICVkIHggJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJwYW5lbCBzaXplID0gJWQgeCAlZCIsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgICAgaWYgKHZfc3luY193aWR0aCA9PSAwIHx8IGhfc3luY193aWR0aCA9PSAwKQotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZfc3luY193aWR0aCA9PSAwIHx8IGhfc3luY193aWR0aCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIC8qIEluaXQgcGFuZWwgc2l6ZSBhbmQgYmxhbmtpbmcgcGVyaW9kcyAqLwotICAgICAgIHJlZyA9ICgodWludDMyX3QpIChoX3N5bmNfd2lkdGggLSAxKSA8PCAyNikgfAotICAgICAgICAgICAgICAgKCh1aW50MzJfdCkgKHdpZHRoICsgaF9zdGFydF93aWR0aCArIGhfZW5kX3dpZHRoIC0gMSkgPDwgMTYpOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnLCBTRENfSE9SX0NPTkYpOworCS8qIEluaXQgcGFuZWwgc2l6ZSBhbmQgYmxhbmtpbmcgcGVyaW9kcyAqLworCXJlZyA9ICgodWludDMyX3QpIChoX3N5bmNfd2lkdGggLSAxKSA8PCAyNikgfAorCQkoKHVpbnQzMl90KSAod2lkdGggKyBoX3N0YXJ0X3dpZHRoICsgaF9lbmRfd2lkdGggLSAxKSA8PCAxNik7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcsIFNEQ19IT1JfQ09ORik7CiAKICNpZmRlZiBERUJVRwotICAgICAgIHByaW50ayhLRVJOX0NPTlQgIiBob3JfY29uZiAleCwiLCByZWcpOworCXByaW50ayhLRVJOX0NPTlQgIiBob3JfY29uZiAleCwiLCByZWcpOwogI2VuZGlmCiAKLSAgICAgICByZWcgPSAoKHVpbnQzMl90KSAodl9zeW5jX3dpZHRoIC0gMSkgPDwgMjYpIHwgU0RDX1ZfU1lOQ19XSURUSF9MIHwKLSAgICAgICAgICAgKCh1aW50MzJfdCkgKGhlaWdodCArIHZfc3RhcnRfd2lkdGggKyB2X2VuZF93aWR0aCAtIDEpIDw8IDE2KTsKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZywgU0RDX1ZFUl9DT05GKTsKKwlyZWcgPSAoKHVpbnQzMl90KSAodl9zeW5jX3dpZHRoIC0gMSkgPDwgMjYpIHwgU0RDX1ZfU1lOQ19XSURUSF9MIHwKKwkgICAgKCh1aW50MzJfdCkgKGhlaWdodCArIHZfc3RhcnRfd2lkdGggKyB2X2VuZF93aWR0aCAtIDEpIDw8IDE2KTsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZywgU0RDX1ZFUl9DT05GKTsKIAogI2lmZGVmIERFQlVHCi0gICAgICAgcHJpbnRrKEtFUk5fQ09OVCAiIHZlcl9jb25mICV4XG4iLCByZWcpOworCXByaW50ayhLRVJOX0NPTlQgIiB2ZXJfY29uZiAleFxuIiwgcmVnKTsKICNlbmRpZgogCi0gICAgICAgbXgzZmItPmhfc3RhcnRfd2lkdGggPSBoX3N0YXJ0X3dpZHRoOwotICAgICAgIG14M2ZiLT52X3N0YXJ0X3dpZHRoID0gdl9zdGFydF93aWR0aDsKKwlteDNmYi0+aF9zdGFydF93aWR0aCA9IGhfc3RhcnRfd2lkdGg7CisJbXgzZmItPnZfc3RhcnRfd2lkdGggPSB2X3N0YXJ0X3dpZHRoOwogCi0gICAgICAgc3dpdGNoIChwYW5lbCkgewotICAgICAgIGNhc2UgSVBVX1BBTkVMX1NIQVJQX1RGVDoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMEZEMDEwMkwsIFNEQ19TSEFSUF9DT05GXzEpOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAwRjUwMEY0TCwgU0RDX1NIQVJQX0NPTkZfMik7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIFNEQ19DT01fU0hBUlAgfCBTRENfQ09NX1RGVF9DT0xPUiwgU0RDX0NPTV9DT05GKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgSVBVX1BBTkVMX1RGVDoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgU0RDX0NPTV9URlRfQ09MT1IsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgfQorCXN3aXRjaCAocGFuZWwpIHsKKwljYXNlIElQVV9QQU5FTF9TSEFSUF9URlQ6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMEZEMDEwMkwsIFNEQ19TSEFSUF9DT05GXzEpOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDBGNTAwRjRMLCBTRENfU0hBUlBfQ09ORl8yKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBTRENfQ09NX1NIQVJQIHwgU0RDX0NPTV9URlRfQ09MT1IsIFNEQ19DT01fQ09ORik7CisJCWJyZWFrOworCWNhc2UgSVBVX1BBTkVMX1RGVDoKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBTRENfQ09NX1RGVF9DT0xPUiwgU0RDX0NPTV9DT05GKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0gICAgICAgLyogSW5pdCBjbG9ja2luZyAqLworCS8qIEluaXQgY2xvY2tpbmcgKi8KIAotICAgICAgIC8qCi0gICAgICAgICogQ2FsY3VsYXRlIGRpdmlkZXI6IGZyYWN0aW9uYWwgcGFydCBpcyA0IGJpdHMgc28gc2ltcGx5IG11bHRpcGxlIGJ5Ci0gICAgICAgICogMjQgdG8gZ2V0IGZyYWN0aW9uYWwgcGFydCwgYXMgbG9uZyBhcyB3ZSBzdGF5IHVuZGVyIH4yNTBNSHogYW5kIG9uCi0gICAgICAgICogaS5NWDMxIGl0IChIU1BfQ0xLKSBpcyA8PSAxNzhNSHouIEN1cnJlbnRseSAxMjguMjY3TUh6Ci0gICAgICAgICovCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAicGl4ZWwgY2xrID0gJWRcbiIsIHBpeGVsX2Nsayk7CisJLyoKKwkgKiBDYWxjdWxhdGUgZGl2aWRlcjogZnJhY3Rpb25hbCBwYXJ0IGlzIDQgYml0cyBzbyBzaW1wbHkgbXVsdGlwbGUgYnkKKwkgKiAyXjQgdG8gZ2V0IGZyYWN0aW9uYWwgcGFydCwgYXMgbG9uZyBhcyB3ZSBzdGF5IHVuZGVyIH4yNTBNSHogYW5kIG9uCisJICogaS5NWDMxIGl0IChIU1BfQ0xLKSBpcyA8PSAxNzhNSHouIEN1cnJlbnRseSAxMjguMjY3TUh6CisJICovCisJZGV2X2RiZyhteDNmYi0+ZGV2LCAicGl4ZWwgY2xrID0gJWRcbiIsIHBpeGVsX2Nsayk7CiAKLSAgICAgICBpcHVfY2xrID0gY2xrX2dldChteDNmYi0+ZGV2LCAiaXB1X2NsayIpOwotICAgICAgIGRpdiA9IGNsa19nZXRfcmF0ZShpcHVfY2xrKSAqIDE2IC8gcGl4ZWxfY2xrOwotICAgICAgIGNsa19wdXQoaXB1X2Nsayk7CisJaXB1X2NsayA9IGNsa19nZXQobXgzZmItPmRldiwgTlVMTCk7CisJZGl2ID0gY2xrX2dldF9yYXRlKGlwdV9jbGspICogMTYgLyBwaXhlbF9jbGs7CisJY2xrX3B1dChpcHVfY2xrKTsKIAotICAgICAgIGlmIChkaXYgPCAweDQwKSB7ICAgICAgIC8qIERpdmlkZXIgbGVzcyB0aGFuIDQgKi8KLSAgICAgICAgICAgICAgIGRldl9kYmcobXgzZmItPmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgIkluaXRQYW5lbCgpIC0gUGl4ZWwgY2xvY2sgZGl2aWRlciBsZXNzIHRoYW4gNFxuIik7Ci0gICAgICAgICAgICAgICBkaXYgPSAweDQwOwotICAgICAgIH0KKwlpZiAoZGl2IDwgMHg0MCkgewkvKiBEaXZpZGVyIGxlc3MgdGhhbiA0ICovCisJCWRldl9kYmcobXgzZmItPmRldiwKKwkJCSJJbml0UGFuZWwoKSAtIFBpeGVsIGNsb2NrIGRpdmlkZXIgbGVzcyB0aGFuIDRcbiIpOworCQlkaXYgPSAweDQwOworCX0KIAotICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKIAotICAgICAgIC8qCi0gICAgICAgICogRElTUDNfSUZfQ0xLX0RPV05fV1IgaXMgaGFsZiB0aGUgZGl2aWRlciB2YWx1ZSBhbmQgMiBmcmFjdGlvbiBiaXRzCi0gICAgICAgICogZmV3ZXIuIFN1YnRyYWN0IDEgZXh0cmEgZnJvbSBESVNQM19JRl9DTEtfRE9XTl9XUiBiYXNlZCBvbiB0aW1pbmcKLSAgICAgICAgKiBkZWJ1Zy4gRElTUDNfSUZfQ0xLX1VQX1dSIGlzIDAKLSAgICAgICAgKi8KLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsICgoKGRpdiAvIDgpIC0gMSkgPDwgMjIpIHwgZGl2LCBESV9ESVNQM19USU1FX0NPTkYpOworCS8qCisJICogRElTUDNfSUZfQ0xLX0RPV05fV1IgaXMgaGFsZiB0aGUgZGl2aWRlciB2YWx1ZSBhbmQgMiBmcmFjdGlvbiBiaXRzCisJICogZmV3ZXIuIFN1YnRyYWN0IDEgZXh0cmEgZnJvbSBESVNQM19JRl9DTEtfRE9XTl9XUiBiYXNlZCBvbiB0aW1pbmcKKwkgKiBkZWJ1Zy4gRElTUDNfSUZfQ0xLX1VQX1dSIGlzIDAKKwkgKi8KKwlteDNmYl93cml0ZV9yZWcobXgzZmIsICgoKGRpdiAvIDgpIC0gMSkgPDwgMjIpIHwgZGl2LCBESV9ESVNQM19USU1FX0NPTkYpOwogCi0gICAgICAgLyogREkgc2V0dGluZ3MgKi8KLSAgICAgICBvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0lGX0NPTkYpICYgMHg3OEZGRkZGRjsKLSAgICAgICBvbGRfY29uZiB8PSBzaWcuZGF0YW1hc2tfZW4gPDwgRElfRDNfREFUQU1TS19TSElGVCB8Ci0gICAgICAgICAgIHNpZy5jbGtzZWxfZW4gPDwgRElfRDNfQ0xLX1NFTF9TSElGVCB8Ci0gICAgICAgICAgIHNpZy5jbGtpZGxlX2VuIDw8IERJX0QzX0NMS19JRExFX1NISUZUOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfSUZfQ09ORik7CisJLyogREkgc2V0dGluZ3MgKi8KKwlvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0lGX0NPTkYpICYgMHg3OEZGRkZGRjsKKwlvbGRfY29uZiB8PSBzaWcuZGF0YW1hc2tfZW4gPDwgRElfRDNfREFUQU1TS19TSElGVCB8CisJICAgIHNpZy5jbGtzZWxfZW4gPDwgRElfRDNfQ0xLX1NFTF9TSElGVCB8CisJICAgIHNpZy5jbGtpZGxlX2VuIDw8IERJX0QzX0NMS19JRExFX1NISUZUOworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfSUZfQ09ORik7CiAKLSAgICAgICBvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX1NJR19QT0wpICYgMHhFMEZGRkZGRjsKLSAgICAgICBvbGRfY29uZiB8PSBzaWcuZGF0YV9wb2wgPDwgRElfRDNfREFUQV9QT0xfU0hJRlQgfAotICAgICAgICAgICBzaWcuY2xrX3BvbCA8PCBESV9EM19DTEtfUE9MX1NISUZUIHwKLSAgICAgICAgICAgc2lnLmVuYWJsZV9wb2wgPDwgRElfRDNfRFJEWV9TSEFSUF9QT0xfU0hJRlQgfAotICAgICAgICAgICBzaWcuSHN5bmNfcG9sIDw8IERJX0QzX0hTWU5DX1BPTF9TSElGVCB8Ci0gICAgICAgICAgIHNpZy5Wc3luY19wb2wgPDwgRElfRDNfVlNZTkNfUE9MX1NISUZUOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfU0lHX1BPTCk7CisJb2xkX2NvbmYgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9TSUdfUE9MKSAmIDB4RTBGRkZGRkY7CisJb2xkX2NvbmYgfD0gc2lnLmRhdGFfcG9sIDw8IERJX0QzX0RBVEFfUE9MX1NISUZUIHwKKwkgICAgc2lnLmNsa19wb2wgPDwgRElfRDNfQ0xLX1BPTF9TSElGVCB8CisJICAgIHNpZy5lbmFibGVfcG9sIDw8IERJX0QzX0RSRFlfU0hBUlBfUE9MX1NISUZUIHwKKwkgICAgc2lnLkhzeW5jX3BvbCA8PCBESV9EM19IU1lOQ19QT0xfU0hJRlQgfAorCSAgICBzaWcuVnN5bmNfcG9sIDw8IERJX0QzX1ZTWU5DX1BPTF9TSElGVDsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIG9sZF9jb25mLCBESV9ESVNQX1NJR19QT0wpOwogCi0gICAgICAgc3dpdGNoIChwaXhlbF9mbXQpIHsKLSAgICAgICBjYXNlIElQVV9QSVhfRk1UX1JHQjI0OgotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1swXSwgRElfRElTUDNfQjBfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMV0sIERJX0RJU1AzX0IxX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzJdLCBESV9ESVNQM19CMl9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpX21hcHBpbmdzWzNdIC0gMSkgPDwgMTIpLCBESV9ESVNQX0FDQ19DQyk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIElQVV9QSVhfRk1UX1JHQjY2NjoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNF0sIERJX0RJU1AzX0IwX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzVdLCBESV9ESVNQM19CMV9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s2XSwgRElfRElTUDNfQjJfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaV9tYXBwaW5nc1s3XSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBJUFVfUElYX0ZNVF9CR1I2NjY6Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzhdLCBESV9ESVNQM19CMF9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s5XSwgRElfRElTUDNfQjFfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTBdLCBESV9ESVNQM19CMl9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpX21hcHBpbmdzWzExXSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTJdLCBESV9ESVNQM19CMF9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxM10sIERJX0RJU1AzX0IxX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzE0XSwgRElfRElTUDNfQjJfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaV9tYXBwaW5nc1sxNV0gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KKwlzd2l0Y2ggKHBpeGVsX2ZtdCkgeworCWNhc2UgSVBVX1BJWF9GTVRfUkdCMjQ6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMF0sIERJX0RJU1AzX0IwX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMV0sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMl0sIERJX0RJU1AzX0IyX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8CisJCQkgICAgICgoZGlfbWFwcGluZ3NbM10gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKKwkJYnJlYWs7CisJY2FzZSBJUFVfUElYX0ZNVF9SR0I2NjY6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNF0sIERJX0RJU1AzX0IwX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNV0sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNl0sIERJX0RJU1AzX0IyX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8CisJCQkgICAgICgoZGlfbWFwcGluZ3NbN10gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKKwkJYnJlYWs7CisJY2FzZSBJUFVfUElYX0ZNVF9CR1I2NjY6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbOF0sIERJX0RJU1AzX0IwX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbOV0sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTBdLCBESV9ESVNQM19CMl9NQVApOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0FDQ19DQykgfAorCQkJICAgICAoKGRpX21hcHBpbmdzWzExXSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzEyXSwgRElfRElTUDNfQjBfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxM10sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTRdLCBESV9ESVNQM19CMl9NQVApOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0FDQ19DQykgfAorCQkJICAgICAoKGRpX21hcHBpbmdzWzE1XSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOworCQlicmVhazsKKwl9CiAKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9JRl9DT05GID0gMHglMDhYXG4iLAotICAgICAgICAgICAgICAgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfSUZfQ09ORikpOwotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIkRJX0RJU1BfU0lHX1BPTCA9IDB4JTA4WFxuIiwKLSAgICAgICAgICAgICAgIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX1NJR19QT0wpKTsKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJESV9ESVNQM19USU1FX0NPTkYgPSAweCUwOFhcbiIsCi0gICAgICAgICAgICAgICBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUDNfVElNRV9DT05GKSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9JRl9DT05GID0gMHglMDhYXG4iLAorCQlteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9JRl9DT05GKSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9TSUdfUE9MID0gMHglMDhYXG4iLAorCQlteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9TSUdfUE9MKSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUDNfVElNRV9DT05GID0gMHglMDhYXG4iLAorCQlteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUDNfVElNRV9DT05GKSk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBzZGNfc2V0X2NvbG9yX2tleSgpIC0gc2V0IHRoZSB0cmFuc3BhcmVudCBjb2xvciBrZXkgZm9yIFNEQyBncmFwaGljIHBsYW5lLgotICogQG14M2ZiOiAgICAgbXgzZmIgY29udGV4dC4KLSAqIEBjaGFubmVsOiAgIElQVSBETUFDIGNoYW5uZWwgSUQuCi0gKiBAZW5hYmxlOiAgICBib29sZWFuIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIGtleWwuCi0gKiBAY29sb3Jfa2V5OiAyNC1iaXQgUkdCIGNvbG9yIHRvIHVzZSBhcyB0cmFuc3BhcmVudCBjb2xvciBrZXkuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQG14M2ZiOglteDNmYiBjb250ZXh0LgorICogQGNoYW5uZWw6CUlQVSBETUFDIGNoYW5uZWwgSUQuCisgKiBAZW5hYmxlOglib29sZWFuIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIGtleWwuCisgKiBAY29sb3Jfa2V5OgkyNC1iaXQgUkdCIGNvbG9yIHRvIHVzZSBhcyB0cmFuc3BhcmVudCBjb2xvciBrZXkuCisgKiBAcmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IHNkY19zZXRfY29sb3Jfa2V5KHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlLCB1aW50MzJfdCBjb2xvcl9rZXkpCisJCQkgICAgIGJvb2wgZW5hYmxlLCB1aW50MzJfdCBjb2xvcl9rZXkpCiB7Ci0gICAgICAgdWludDMyX3QgcmVnLCBzZGNfY29uZjsKLSAgICAgICB1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdWludDMyX3QgcmVnLCBzZGNfY29uZjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKLSAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CiAKLSAgICAgICBzZGNfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOwotICAgICAgIGlmIChjaGFubmVsID09IElETUFDX1NEQ18wKQotICAgICAgICAgICAgICAgc2RjX2NvbmYgJj0gflNEQ19DT01fR1dTRUw7Ci0gICAgICAgZWxzZQotICAgICAgICAgICAgICAgc2RjX2NvbmYgfD0gU0RDX0NPTV9HV1NFTDsKKwlzZGNfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOworCWlmIChjaGFubmVsID09IElETUFDX1NEQ18wKQorCQlzZGNfY29uZiAmPSB+U0RDX0NPTV9HV1NFTDsKKwllbHNlCisJCXNkY19jb25mIHw9IFNEQ19DT01fR1dTRUw7CiAKLSAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICAgICByZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0dXX0NUUkwpICYgMHhGRjAwMDAwMEw7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IChjb2xvcl9rZXkgJiAweDAwRkZGRkZGTCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RDX0dXX0NUUkwpOworCWlmIChlbmFibGUpIHsKKwkJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19HV19DVFJMKSAmIDB4RkYwMDAwMDBMOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IChjb2xvcl9rZXkgJiAweDAwRkZGRkZGTCksCisJCQkgICAgIFNEQ19HV19DVFJMKTsKIAotICAgICAgICAgICAgICAgc2RjX2NvbmYgfD0gU0RDX0NPTV9LRVlfQ09MT1JfRzsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgc2RjX2NvbmYgJj0gflNEQ19DT01fS0VZX0NPTE9SX0c7Ci0gICAgICAgfQotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgc2RjX2NvbmYsIFNEQ19DT01fQ09ORik7CisJCXNkY19jb25mIHw9IFNEQ19DT01fS0VZX0NPTE9SX0c7CisJfSBlbHNlIHsKKwkJc2RjX2NvbmYgJj0gflNEQ19DT01fS0VZX0NPTE9SX0c7CisJfQorCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgc2RjX2NvbmYsIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogc2RjX3NldF9nbG9iYWxfYWxwaGEoKSAtIHNldCBnbG9iYWwgYWxwaGEgYmxlbmRpbmcgbW9kZXMuCi0gKiBAbXgzZmI6ICAgICBteDNmYiBjb250ZXh0LgotICogQGVuYWJsZTogICAgYm9vbGVhbiB0byBlbmFibGUgb3IgZGlzYWJsZSBnbG9iYWwgYWxwaGEgYmxlbmRpbmcuIElmIGRpc2FibGVkLAotICogICAgICAgICAgICAgcGVyIHBpeGVsIGJsZW5kaW5nIGlzIHVzZWQuCi0gKiBAYWxwaGE6ICAgICBnbG9iYWwgYWxwaGEgdmFsdWUuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQG14M2ZiOglteDNmYiBjb250ZXh0LgorICogQGVuYWJsZToJYm9vbGVhbiB0byBlbmFibGUgb3IgZGlzYWJsZSBnbG9iYWwgYWxwaGEgYmxlbmRpbmcuIElmIGRpc2FibGVkLAorICoJCXBlciBwaXhlbCBibGVuZGluZyBpcyB1c2VkLgorICogQGFscGhhOglnbG9iYWwgYWxwaGEgdmFsdWUuCisgKiBAcmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IHNkY19zZXRfZ2xvYmFsX2FscGhhKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgYm9vbCBlbmFibGUsIHVpbnQ4X3QgYWxwaGEpCiB7Ci0gICAgICAgdWludDMyX3QgcmVnOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1aW50MzJfdCByZWc7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCi0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgaWYgKGVuYWJsZSkgewotICAgICAgICAgICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19HV19DVFJMKSAmIDB4MDBGRkZGRkZMOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgfCAoKHVpbnQzMl90KSBhbHBoYSA8PCAyNCksIFNEQ19HV19DVFJMKTsKKwlpZiAoZW5hYmxlKSB7CisJCXJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfR1dfQ1RSTCkgJiAweDAwRkZGRkZGTDsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgfCAoKHVpbnQzMl90KSBhbHBoYSA8PCAyNCksIFNEQ19HV19DVFJMKTsKIAotICAgICAgICAgICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fR0xCX0EsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgIHJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgJiB+U0RDX0NPTV9HTEJfQSwgU0RDX0NPTV9DT05GKTsKLSAgICAgICB9CisJCXJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fR0xCX0EsIFNEQ19DT01fQ09ORik7CisJfSBlbHNlIHsKKwkJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnICYgflNEQ19DT01fR0xCX0EsIFNEQ19DT01fQ09ORik7CisJfQogCi0gICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZGNfc2V0X2JyaWdodG5lc3Moc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCB1aW50OF90IHZhbHVlKQogewotICAgICAgIC8qIFRoaXMgbWlnaHQgYmUgYm9hcmQtc3BlY2lmaWMgKi8KLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDMwMDAwMDBVTCB8IHZhbHVlIDw8IDE2LCBTRENfUFdNX0NUUkwpOwotICAgICAgIHJldHVybjsKKwkvKiBUaGlzIG1pZ2h0IGJlIGJvYXJkLXNwZWNpZmljICovCisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAzMDAwMDAwVUwgfCB2YWx1ZSA8PCAxNiwgU0RDX1BXTV9DVFJMKTsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB1aW50MzJfdCBicHBfdG9fcGl4Zm10KGludCBicHApCiB7Ci0gICAgICAgdWludDMyX3QgcGl4Zm10ID0gMDsKLSAgICAgICBzd2l0Y2ggKGJwcCkgewotICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICAgICBwaXhmbXQgPSBJUFVfUElYX0ZNVF9CR1IyNDsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgMzI6Ci0gICAgICAgICAgICAgICBwaXhmbXQgPSBJUFVfUElYX0ZNVF9CR1IzMjsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgICAgICBwaXhmbXQgPSBJUFVfUElYX0ZNVF9SR0I1NjU7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIHBpeGZtdDsKKwl1aW50MzJfdCBwaXhmbXQgPSAwOworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSAyNDoKKwkJcGl4Zm10ID0gSVBVX1BJWF9GTVRfQkdSMjQ7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXBpeGZtdCA9IElQVV9QSVhfRk1UX0JHUjMyOworCQlicmVhazsKKwljYXNlIDE2OgorCQlwaXhmbXQgPSBJUFVfUElYX0ZNVF9SR0I1NjU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcGl4Zm10OwogfQogCiBzdGF0aWMgaW50IG14M2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmZiaSk7CkBAIC02NjksMzAwICs2NjksMzAwIEBACiAKIC8qKgogICogbXgzZmJfc2V0X2ZpeCgpIC0gc2V0IGZpeGVkIGZyYW1lYnVmZmVyIHBhcmFtZXRlcnMgZnJvbSB2YXJpYWJsZSBzZXR0aW5ncy4KLSAqIEBpbmZvOiAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIKLSAqIEByZXR1cm46ICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAaW5mbzoJZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgorICogQHJldHVybjoJMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBteDNmYl9zZXRfZml4KHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7Ci0gICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CisJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CiAKLSAgICAgICBzdHJuY3B5KGZpeC0+aWQsICJESVNQMyBCRyIsIDgpOworCXN0cm5jcHkoZml4LT5pZCwgIkRJU1AzIEJHIiwgOCk7CiAKLSAgICAgICBmaXgtPmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlmaXgtPmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAotICAgICAgIGZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLSAgICAgICBmaXgtPmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKLSAgICAgICBmaXgtPnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0gICAgICAgZml4LT54cGFuc3RlcCA9IDE7Ci0gICAgICAgZml4LT55cGFuc3RlcCA9IDE7CisJZml4LT50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWZpeC0+YWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWZpeC0+dmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlmaXgtPnhwYW5zdGVwID0gMTsKKwlmaXgtPnlwYW5zdGVwID0gMTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBteDNmYl9kbWFfZG9uZSh2b2lkICphcmcpCiB7Ci0gICAgICAgc3RydWN0IGlkbWFjX3R4X2Rlc2MgKnR4X2Rlc2MgPSB0b190eF9kZXNjKGFyZyk7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuID0gdHhfZGVzYy0+dHhkLmNoYW47Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFubmVsID0gdG9faWRtYWNfY2hhbihjaGFuKTsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBpY2hhbm5lbC0+Y2xpZW50OwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gbXgzZmItPmZiaS0+cGFyOworCXN0cnVjdCBpZG1hY190eF9kZXNjICp0eF9kZXNjID0gdG9fdHhfZGVzYyhhcmcpOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHR4X2Rlc2MtPnR4ZC5jaGFuOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbm5lbCA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gaWNoYW5uZWwtPmNsaWVudDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IG14M2ZiLT5mYmktPnBhcjsKIAotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgImlycSAlZCBjYWxsYmFja1xuIiwgaWNoYW5uZWwtPmVvZl9pcnEpOworCWRldl9kYmcobXgzZmItPmRldiwgImlycSAlZCBjYWxsYmFja1xuIiwgaWNoYW5uZWwtPmVvZl9pcnEpOwogCi0gICAgICAgLyogV2Ugb25seSBuZWVkIG9uZSBpbnRlcnJ1cHQsIGl0IHdpbGwgYmUgcmUtZW5hYmxlZCBhcyBuZWVkZWQgKi8KLSAgICAgICBkaXNhYmxlX2lycShpY2hhbm5lbC0+ZW9mX2lycSk7CisJLyogV2Ugb25seSBuZWVkIG9uZSBpbnRlcnJ1cHQsIGl0IHdpbGwgYmUgcmUtZW5hYmxlZCBhcyBuZWVkZWQgKi8KKwlkaXNhYmxlX2lycShpY2hhbm5lbC0+ZW9mX2lycSk7CiAKLSAgICAgICBjb21wbGV0ZSgmbXgzX2ZiaS0+ZmxpcF9jbXBsKTsKKwljb21wbGV0ZSgmbXgzX2ZiaS0+ZmxpcF9jbXBsKTsKIH0KIAogLyoqCiAgKiBteDNmYl9zZXRfcGFyKCkgLSBzZXQgZnJhbWVidWZmZXIgcGFyYW1ldGVycyBhbmQgY2hhbmdlIHRoZSBvcGVyYXRpbmcgbW9kZS4KLSAqIEBmYmk6ICAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQGZiaToJZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlci4KKyAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHUzMiBtZW1fbGVuOwotICAgICAgIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnOwotICAgICAgIGVudW0gaXB1X3BhbmVsIG1vZGUgPSBJUFVfUEFORUxfVEZUOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbDsKLSAgICAgICBzdHJ1Y3QgaWRtYWNfdmlkZW9fcGFyYW0gKnZpZGVvID0gJmljaGFuLT5wYXJhbXMudmlkZW87Ci0gICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IG14M19mYmktPnNnOwotICAgICAgIHNpemVfdCBzY3JlZW5fc2l6ZTsKKwl1MzIgbWVtX2xlbjsKKwlzdHJ1Y3QgaXB1X2RpX3NpZ25hbF9jZmcgc2lnX2NmZzsKKwllbnVtIGlwdV9wYW5lbCBtb2RlID0gSVBVX1BBTkVMX1RGVDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19mYmktPmlkbWFjX2NoYW5uZWw7CisJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBteDNfZmJpLT5zZzsKKwlzaXplX3Qgc2NyZWVuX3NpemU7CiAKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICIlcyBbJWNdXG4iLCBfX2Z1bmNfXywgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiJXMgWyVjXVxuIiwgX19mdW5jX18sIGxpc3RfZW1wdHkoJmljaGFuLT5xdWV1ZSkgPyAnLScgOiAnKycpOwogCi0gICAgICAgbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIC8qIFRvdGFsIGNsZWFudXAgKi8KLSAgICAgICBpZiAobXgzX2ZiaS0+dHhkKQotICAgICAgICAgICAgICAgc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKKwkvKiBUb3RhbCBjbGVhbnVwICovCisJaWYgKG14M19mYmktPnR4ZCkKKwkJc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKIAotICAgICAgIG14M2ZiX3NldF9maXgoZmJpKTsKKwlteDNmYl9zZXRfZml4KGZiaSk7CiAKLSAgICAgICBtZW1fbGVuID0gZmJpLT52YXIueXJlc192aXJ0dWFsICogZmJpLT5maXgubGluZV9sZW5ndGg7Ci0gICAgICAgaWYgKG1lbV9sZW4gPiBmYmktPmZpeC5zbWVtX2xlbikgewotICAgICAgICAgICAgICAgaWYgKGZiaS0+Zml4LnNtZW1fc3RhcnQpCi0gICAgICAgICAgICAgICAgICAgICAgIG14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmkpOworCW1lbV9sZW4gPSBmYmktPnZhci55cmVzX3ZpcnR1YWwgKiBmYmktPmZpeC5saW5lX2xlbmd0aDsKKwlpZiAobWVtX2xlbiA+IGZiaS0+Zml4LnNtZW1fbGVuKSB7CisJCWlmIChmYmktPmZpeC5zbWVtX3N0YXJ0KQorCQkJbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CiAKLSAgICAgICAgICAgICAgIGZiaS0+Zml4LnNtZW1fbGVuID0gbWVtX2xlbjsKLSAgICAgICAgICAgICAgIGlmIChteDNmYl9tYXBfdmlkZW9fbWVtb3J5KGZiaSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICB9CisJCWZiaS0+Zml4LnNtZW1fbGVuID0gbWVtX2xlbjsKKwkJaWYgKG14M2ZiX21hcF92aWRlb19tZW1vcnkoZmJpKSA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKLSAgICAgICBzY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoICogZmJpLT52YXIueXJlczsKKwlzY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoICogZmJpLT52YXIueXJlczsKIAotICAgICAgIHNnX2luaXRfdGFibGUoJnNnWzBdLCAxKTsKLSAgICAgICBzZ19pbml0X3RhYmxlKCZzZ1sxXSwgMSk7CisJc2dfaW5pdF90YWJsZSgmc2dbMF0sIDEpOworCXNnX2luaXRfdGFibGUoJnNnWzFdLCAxKTsKIAotICAgICAgIHNnX2RtYV9hZGRyZXNzKCZzZ1swXSkgID0gZmJpLT5maXguc21lbV9zdGFydDsKLSAgICAgICBzZ19zZXRfcGFnZSgmc2dbMF0sIHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9iYXNlKSwKLSAgICAgICAgICAgICAgICAgICBmYmktPmZpeC5zbWVtX2xlbiwKLSAgICAgICAgICAgICAgICAgICBvZmZzZXRfaW5fcGFnZShmYmktPnNjcmVlbl9iYXNlKSk7CisJc2dfZG1hX2FkZHJlc3MoJnNnWzBdKQk9IGZiaS0+Zml4LnNtZW1fc3RhcnQ7CisJc2dfc2V0X3BhZ2UoJnNnWzBdLCB2aXJ0X3RvX3BhZ2UoZmJpLT5zY3JlZW5fYmFzZSksCisJCSAgICBmYmktPmZpeC5zbWVtX2xlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGZiaS0+c2NyZWVuX2Jhc2UpKTsKIAotICAgICAgIGlmIChteDNfZmJpLT5pcHVfY2ggPT0gSURNQUNfU0RDXzApIHsKLSAgICAgICAgICAgICAgIG1lbXNldCgmc2lnX2NmZywgMCwgc2l6ZW9mKHNpZ19jZmcpKTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuSHN5bmNfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKQotICAgICAgICAgICAgICAgICAgICAgICBzaWdfY2ZnLlZzeW5jX3BvbCA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX0lOVkVSVCkKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5jbGtfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19EQVRBX0lOVkVSVCkKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5kYXRhX3BvbCA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfT0VfQUNUX0hJR0gpCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuZW5hYmxlX3BvbCA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX0lETEVfRU4pCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuY2xraWRsZV9lbiA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX1NFTF9FTikKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5jbGtzZWxfZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX1NIQVJQX01PREUpCi0gICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBJUFVfUEFORUxfU0hBUlBfVEZUOworCWlmIChteDNfZmJpLT5pcHVfY2ggPT0gSURNQUNfU0RDXzApIHsKKwkJbWVtc2V0KCZzaWdfY2ZnLCAwLCBzaXplb2Yoc2lnX2NmZykpOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQorCQkJc2lnX2NmZy5Ic3luY19wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkKKwkJCXNpZ19jZmcuVnN5bmNfcG9sID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0NMS19JTlZFUlQpCisJCQlzaWdfY2ZnLmNsa19wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfREFUQV9JTlZFUlQpCisJCQlzaWdfY2ZnLmRhdGFfcG9sID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX09FX0FDVF9ISUdIKQorCQkJc2lnX2NmZy5lbmFibGVfcG9sID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0NMS19JRExFX0VOKQorCQkJc2lnX2NmZy5jbGtpZGxlX2VuID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0NMS19TRUxfRU4pCisJCQlzaWdfY2ZnLmNsa3NlbF9lbiA9IHRydWU7CisJCWlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19TSEFSUF9NT0RFKQorCQkJbW9kZSA9IElQVV9QQU5FTF9TSEFSUF9URlQ7CiAKLSAgICAgICAgICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJwaXhjbG9jayA9ICV1bCBIelxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHUzMikgKFBJQ09TMktIWihmYmktPnZhci5waXhjbG9jaykgKiAxMDAwVUwpKTsKKwkJZGV2X2RiZyhmYmktPmRldmljZSwgInBpeGNsb2NrID0gJXVsIEh6XG4iLAorCQkJKHUzMikgKFBJQ09TMktIWihmYmktPnZhci5waXhjbG9jaykgKiAxMDAwVUwpKTsKIAotICAgICAgICAgICAgICAgaWYgKHNkY19pbml0X3BhbmVsKG14M2ZiLCBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQSUNPUzJLSFooZmJpLT52YXIucGl4Y2xvY2spKSAqIDEwMDBVTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci54cmVzLCBmYmktPnZhci55cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19TV0FQX1JHQikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVV9QSVhfRk1UX0JHUjY2NiA6IElQVV9QSVhfRk1UX1JHQjY2NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5sZWZ0X21hcmdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5oc3luY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT52YXIucmlnaHRfbWFyZ2luICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5oc3luY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT52YXIudXBwZXJfbWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLnZzeW5jX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5sb3dlcl9tYXJnaW4gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLnZzeW5jX2xlbiwgc2lnX2NmZykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihmYmktPmRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXgzZmI6IEVycm9yIGluaXRpYWxpemluZyBwYW5lbC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICB9CisJCWlmIChzZGNfaW5pdF9wYW5lbChteDNmYiwgbW9kZSwKKwkJCQkgICAoUElDT1MyS0haKGZiaS0+dmFyLnBpeGNsb2NrKSkgKiAxMDAwVUwsCisJCQkJICAgZmJpLT52YXIueHJlcywgZmJpLT52YXIueXJlcywKKwkJCQkgICAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfU1dBUF9SR0IpID8KKwkJCQkgICBJUFVfUElYX0ZNVF9CR1I2NjYgOiBJUFVfUElYX0ZNVF9SR0I2NjYsCisJCQkJICAgZmJpLT52YXIubGVmdF9tYXJnaW4sCisJCQkJICAgZmJpLT52YXIuaHN5bmNfbGVuLAorCQkJCSAgIGZiaS0+dmFyLnJpZ2h0X21hcmdpbiArCisJCQkJICAgZmJpLT52YXIuaHN5bmNfbGVuLAorCQkJCSAgIGZiaS0+dmFyLnVwcGVyX21hcmdpbiwKKwkJCQkgICBmYmktPnZhci52c3luY19sZW4sCisJCQkJICAgZmJpLT52YXIubG93ZXJfbWFyZ2luICsKKwkJCQkgICBmYmktPnZhci52c3luY19sZW4sIHNpZ19jZmcpICE9IDApIHsKKwkJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQkJZGV2X2VycihmYmktPmRldmljZSwKKwkJCQkibXgzZmI6IEVycm9yIGluaXRpYWxpemluZyBwYW5lbC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CiAKLSAgICAgICBzZGNfc2V0X3dpbmRvd19wb3MobXgzZmIsIG14M19mYmktPmlwdV9jaCwgMCwgMCk7CisJc2RjX3NldF93aW5kb3dfcG9zKG14M2ZiLCBteDNfZmJpLT5pcHVfY2gsIDAsIDApOwogCi0gICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYgICAgPSAwOworCW14M19mYmktPmN1cl9pcHVfYnVmCT0gMDsKIAotICAgICAgIHZpZGVvLT5vdXRfcGl4ZWxfZm10ICAgID0gYnBwX3RvX3BpeGZtdChmYmktPnZhci5iaXRzX3Blcl9waXhlbCk7Ci0gICAgICAgdmlkZW8tPm91dF93aWR0aCAgICAgICAgPSBmYmktPnZhci54cmVzOwotICAgICAgIHZpZGVvLT5vdXRfaGVpZ2h0ICAgICAgID0gZmJpLT52YXIueXJlczsKLSAgICAgICB2aWRlby0+b3V0X3N0cmlkZSAgICAgICA9IGZiaS0+dmFyLnhyZXNfdmlydHVhbDsKKwl2aWRlby0+b3V0X3BpeGVsX2ZtdAk9IGJwcF90b19waXhmbXQoZmJpLT52YXIuYml0c19wZXJfcGl4ZWwpOworCXZpZGVvLT5vdXRfd2lkdGgJPSBmYmktPnZhci54cmVzOworCXZpZGVvLT5vdXRfaGVpZ2h0CT0gZmJpLT52YXIueXJlczsKKwl2aWRlby0+b3V0X3N0cmlkZQk9IGZiaS0+dmFyLnhyZXNfdmlydHVhbDsKIAotICAgICAgIGlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKQotICAgICAgICAgICAgICAgc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOworCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKQorCQlzZGNfZW5hYmxlX2NoYW5uZWwobXgzX2ZiaSk7CiAKLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKioKICAqIG14M2ZiX2NoZWNrX3ZhcigpIC0gY2hlY2sgYW5kIGFkanVzdCBmcmFtZWJ1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXJzLgotICogQHZhcjogICAgICAgZnJhbWVidWZmZXIgdmFyaWFibGUgcGFyYW1ldGVycwotICogQGZiaTogICAgICAgZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgorICogQHZhcjoJZnJhbWVidWZmZXIgdmFyaWFibGUgcGFyYW1ldGVycworICogQGZiaToJZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgogICovCiBzdGF0aWMgaW50IG14M2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOwotICAgICAgIHUzMiB2dG90YWw7Ci0gICAgICAgdTMyIGh0b3RhbDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXUzMiB2dG90YWw7CisJdTMyIGh0b3RhbDsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOwogCi0gICAgICAgaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQotICAgICAgICAgICAgICAgdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7Ci0gICAgICAgaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQotICAgICAgICAgICAgICAgdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisJaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQorCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCisJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwogCi0gICAgICAgaWYgKCh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDMyKSAmJiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAyNCkgJiYKLSAgICAgICAgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMTYpKQotICAgICAgICAgICAgICAgdmFyLT5iaXRzX3Blcl9waXhlbCA9IGRlZmF1bHRfYnBwOworCWlmICgodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAzMikgJiYgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMjQpICYmCisJICAgICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDE2KSkKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IGRlZmF1bHRfYnBwOwogCi0gICAgICAgc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0gICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgIHZhci0+cmVkLmxlbmd0aCA9IDU7Ci0gICAgICAgICAgICAgICB2YXItPnJlZC5vZmZzZXQgPSAxMTsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm1zYl9yaWdodCA9IDA7CisJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAxNjoKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ibHVlLmxlbmd0aCA9IDU7Ci0gICAgICAgICAgICAgICB2YXItPmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIDI0OgotICAgICAgICAgICAgICAgdmFyLT5yZWQubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm9mZnNldCA9IDE2OwotICAgICAgICAgICAgICAgdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICB2YXItPmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIDMyOgotICAgICAgICAgICAgICAgdmFyLT5yZWQubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm9mZnNldCA9IDE2OwotICAgICAgICAgICAgICAgdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICB2YXItPmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3Aub2Zmc2V0ID0gMjQ7Ci0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQorCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJfQogCi0gICAgICAgaWYgKHZhci0+cGl4Y2xvY2sgPCAxMDAwKSB7Ci0gICAgICAgICAgICAgICBodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuICsKLSAgICAgICAgICAgICAgICAgICB2YXItPmxlZnRfbWFyZ2luOwotICAgICAgICAgICAgICAgdnRvdGFsID0gdmFyLT55cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbiArCi0gICAgICAgICAgICAgICAgICAgdmFyLT51cHBlcl9tYXJnaW47Ci0gICAgICAgICAgICAgICB2YXItPnBpeGNsb2NrID0gKHZ0b3RhbCAqIGh0b3RhbCAqIDZVTCkgLyAxMDBVTDsKLSAgICAgICAgICAgICAgIHZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1ModmFyLT5waXhjbG9jayk7Ci0gICAgICAgICAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAicGl4Y2xvY2sgc2V0IGZvciA2MEh6IHJlZnJlc2ggPSAldSBwc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5waXhjbG9jayk7Ci0gICAgICAgfQorCWlmICh2YXItPnBpeGNsb2NrIDwgMTAwMCkgeworCQlodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuICsKKwkJICAgIHZhci0+bGVmdF9tYXJnaW47CisJCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+bG93ZXJfbWFyZ2luICsgdmFyLT52c3luY19sZW4gKworCQkgICAgdmFyLT51cHBlcl9tYXJnaW47CisJCXZhci0+cGl4Y2xvY2sgPSAodnRvdGFsICogaHRvdGFsICogNlVMKSAvIDEwMFVMOworCQl2YXItPnBpeGNsb2NrID0gS0haMlBJQ09TKHZhci0+cGl4Y2xvY2spOworCQlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAicGl4Y2xvY2sgc2V0IGZvciA2MEh6IHJlZnJlc2ggPSAldSBwc1xuIiwKKwkJCXZhci0+cGl4Y2xvY2spOworCX0KIAotICAgICAgIHZhci0+aGVpZ2h0ID0gLTE7Ci0gICAgICAgdmFyLT53aWR0aCA9IC0xOwotICAgICAgIHZhci0+Z3JheXNjYWxlID0gMDsKKwl2YXItPmhlaWdodCA9IC0xOworCXZhci0+d2lkdGggPSAtMTsKKwl2YXItPmdyYXlzY2FsZSA9IDA7CiAKLSAgICAgICAvKiBQcmVzZXJ2ZSBzeW5jIGZsYWdzICovCi0gICAgICAgdmFyLT5zeW5jIHw9IG14M19mYmktPnN5bmM7Ci0gICAgICAgbXgzX2ZiaS0+c3luYyB8PSB2YXItPnN5bmM7CisJLyogUHJlc2VydmUgc3luYyBmbGFncyAqLworCXZhci0+c3luYyB8PSBteDNfZmJpLT5zeW5jOworCW14M19mYmktPnN5bmMgfD0gdmFyLT5zeW5jOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgY2hhbl90b19maWVsZCh1bnNpZ25lZCBpbnQgY2hhbiwgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKIHsKLSAgICAgICBjaGFuICY9IDB4ZmZmZjsKLSAgICAgICBjaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7Ci0gICAgICAgcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKIH0KIAogc3RhdGljIGludCBteDNmYl9zZXRjb2xyZWcodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICpmYmkpCisJCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgdW5zaWduZWQgaW50IHRyYW5zLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgdTMyIHZhbDsKLSAgICAgICBpbnQgcmV0ID0gMTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXUzMiB2YWw7CisJaW50IHJldCA9IDE7CiAKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJXNcbiIsIF9fZnVuY19fKTsKIAotICAgICAgIG11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICAvKgotICAgICAgICAqIElmIGdyZXlzY2FsZSBpcyB0cnVlLCB0aGVuIHdlIGNvbnZlcnQgdGhlIFJHQiB2YWx1ZQotICAgICAgICAqIHRvIGdyZXlzY2FsZSBubyBtYXR0ZXIgd2hhdCB2aXN1YWwgd2UgYXJlIHVzaW5nLgotICAgICAgICAqLwotICAgICAgIGlmIChmYmktPnZhci5ncmF5c2NhbGUpCi0gICAgICAgICAgICAgICByZWQgPSBncmVlbiA9IGJsdWUgPSAoMTk1OTUgKiByZWQgKyAzODQ3MCAqIGdyZWVuICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NDcxICogYmx1ZSkgPj4gMTY7Ci0gICAgICAgc3dpdGNoIChmYmktPmZpeC52aXN1YWwpIHsKLSAgICAgICBjYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6Ci0gICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICogMTYtYml0IFRydWUgQ29sb3VyLiAgV2UgZW5jb2RlIHRoZSBSR0IgdmFsdWUKLSAgICAgICAgICAgICAgICAqIGFjY29yZGluZyB0byB0aGUgUkdCIGJpdGZpZWxkIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICBpZiAocmVnbm8gPCAxNikgewotICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnBhbCA9IGZiaS0+cHNldWRvX3BhbGV0dGU7CisJbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCS8qCisJICogSWYgZ3JleXNjYWxlIGlzIHRydWUsIHRoZW4gd2UgY29udmVydCB0aGUgUkdCIHZhbHVlCisJICogdG8gZ3JleXNjYWxlIG5vIG1hdHRlciB3aGF0IHZpc3VhbCB3ZSBhcmUgdXNpbmcuCisJICovCisJaWYgKGZiaS0+dmFyLmdyYXlzY2FsZSkKKwkJcmVkID0gZ3JlZW4gPSBibHVlID0gKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbiArCisJCQkJICAgICAgNzQ3MSAqIGJsdWUpID4+IDE2OworCXN3aXRjaCAoZmJpLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQkvKgorCQkgKiAxNi1iaXQgVHJ1ZSBDb2xvdXIuICBXZSBlbmNvZGUgdGhlIFJHQiB2YWx1ZQorCQkgKiBhY2NvcmRpbmcgdG8gdGhlIFJHQiBiaXRmaWVsZCBpbmZvcm1hdGlvbi4KKwkJICovCisJCWlmIChyZWdubyA8IDE2KSB7CisJCQl1MzIgKnBhbCA9IGZiaS0+cHNldWRvX3BhbGV0dGU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2hhbl90b19maWVsZChyZWQsICZmYmktPnZhci5yZWQpOwotICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmZiaS0+dmFyLmdyZWVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJmZiaS0+dmFyLmJsdWUpOworCQkJdmFsID0gY2hhbl90b19maWVsZChyZWQsICZmYmktPnZhci5yZWQpOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sICZmYmktPnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmZmJpLT52YXIuYmx1ZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgcGFsW3JlZ25vXSA9IHZhbDsKKwkJCXBhbFtyZWdub10gPSB2YWw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGJyZWFrOworCQkJcmV0ID0gMDsKKwkJfQorCQlicmVhazsKIAotICAgICAgIGNhc2UgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjoKLSAgICAgICBjYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwljYXNlIEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1I6CisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIHJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC05NzAsMTUyICs5NzAsMTUyIEBACiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKKwlzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgImJsYW5rID0gJWRcbiIsIGJsYW5rKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiYmxhbmsgPSAlZFxuIiwgYmxhbmspOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IGJsYW5rKQotICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJaWYgKG14M19mYmktPmJsYW5rID09IGJsYW5rKQorCQlyZXR1cm4gMDsKIAotICAgICAgIG11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICBteDNfZmJpLT5ibGFuayA9IGJsYW5rOworCW11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKKwlteDNfZmJpLT5ibGFuayA9IGJsYW5rOwogCi0gICAgICAgc3dpdGNoIChibGFuaykgewotICAgICAgIGNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotICAgICAgIGNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLSAgICAgICBjYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0gICAgICAgY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0gICAgICAgICAgICAgICBzZGNfZGlzYWJsZV9jaGFubmVsKG14M19mYmkpOwotICAgICAgICAgICAgICAgc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCAwKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgRkJfQkxBTktfVU5CTEFOSzoKLSAgICAgICAgICAgICAgIHNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKLSAgICAgICAgICAgICAgIHNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgbXgzZmItPmJhY2tsaWdodF9sZXZlbCk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJc3dpdGNoIChibGFuaykgeworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCXNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7CisJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMCk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOworCQlzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIG14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwpOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBteDNmYl9wYW5fZGlzcGxheSgpIC0gcGFuIG9yIHdyYXAgdGhlIGRpc3BsYXkKLSAqIEB2YXI6ICAgICAgIHZhcmlhYmxlIHNjcmVlbiBidWZmZXIgaW5mb3JtYXRpb24uCi0gKiBAaW5mbzogICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyLgorICogQHZhcjoJdmFyaWFibGUgc2NyZWVuIGJ1ZmZlciBpbmZvcm1hdGlvbi4KKyAqIEBpbmZvOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyLgogICoKICAqIFdlIGxvb2sgb25seSBhdCB4b2Zmc2V0LCB5b2Zmc2V0IGFuZCB0aGUgRkJfVk1PREVfWVdSQVAgZmxhZwogICovCiBzdGF0aWMgaW50IG14M2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYl9pbmZvICpmYmkpCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKLSAgICAgICB1MzIgeV9ib3R0b207Ci0gICAgICAgdW5zaWduZWQgbG9uZyBiYXNlOwotICAgICAgIG9mZl90IG9mZnNldDsKLSAgICAgICBkbWFfY29va2llX3QgY29va2llOwotICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBteDNfZmJpLT5zZzsKLSAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOwotICAgICAgIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkOwotICAgICAgIGludCByZXQ7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKKwl1MzIgeV9ib3R0b207CisJdW5zaWduZWQgbG9uZyBiYXNlOworCW9mZl90IG9mZnNldDsKKwlkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBteDNfZmJpLT5zZzsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkOworCWludCByZXQ7CiAKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJXMgWyVjXVxuIiwgX19mdW5jX18sCi0gICAgICAgICAgICAgICBsaXN0X2VtcHR5KCZteDNfZmJpLT5pZG1hY19jaGFubmVsLT5xdWV1ZSkgPyAnLScgOiAnKycpOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlcyBbJWNdXG4iLCBfX2Z1bmNfXywKKwkJbGlzdF9lbXB0eSgmbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+cXVldWUpID8gJy0nIDogJysnKTsKIAotICAgICAgIGlmICh2YXItPnhvZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAieCBwYW5uaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgfQorCWlmICh2YXItPnhvZmZzZXQgPiAwKSB7CisJCWRldl9kYmcoZmJpLT5kZXZpY2UsICJ4IHBhbm5pbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgICAgIGlmIChmYmktPnZhci54b2Zmc2V0ID09IHZhci0+eG9mZnNldCAmJgotICAgICAgICAgICBmYmktPnZhci55b2Zmc2V0ID09IHZhci0+eW9mZnNldCkKLSAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KKwlpZiAoZmJpLT52YXIueG9mZnNldCA9PSB2YXItPnhvZmZzZXQgJiYKKwkgICAgZmJpLT52YXIueW9mZnNldCA9PSB2YXItPnlvZmZzZXQpCisJCXJldHVybiAwOwkvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KIAotICAgICAgIHlfYm90dG9tID0gdmFyLT55b2Zmc2V0OworCXlfYm90dG9tID0gdmFyLT55b2Zmc2V0OwogCi0gICAgICAgaWYgKCEodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKSkKLSAgICAgICAgICAgICAgIHlfYm90dG9tICs9IHZhci0+eXJlczsKKwlpZiAoISh2YXItPnZtb2RlICYgRkJfVk1PREVfWVdSQVApKQorCQl5X2JvdHRvbSArPSB2YXItPnlyZXM7CiAKLSAgICAgICBpZiAoeV9ib3R0b20gPiBmYmktPnZhci55cmVzX3ZpcnR1YWwpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoeV9ib3R0b20gPiBmYmktPnZhci55cmVzX3ZpcnR1YWwpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgICAgbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIG9mZnNldCA9ICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldCkgKgotICAgICAgICAgICAgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKLSAgICAgICBiYXNlID0gZmJpLT5maXguc21lbV9zdGFydCArIG9mZnNldDsKKwlvZmZzZXQgPSAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwgKyB2YXItPnhvZmZzZXQpICoKKwkJKHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKKwliYXNlID0gZmJpLT5maXguc21lbV9zdGFydCArIG9mZnNldDsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGluZyBTREMgQkcgYnVmICVkIGFkZHJlc3M9MHglMDhsWFxuIiwKLSAgICAgICAgICAgICAgIG14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiVXBkYXRpbmcgU0RDIEJHIGJ1ZiAlZCBhZGRyZXNzPTB4JTA4bFhcbiIsCisJCW14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKIAotICAgICAgIC8qCi0gICAgICAgICogV2UgZW5hYmxlIHRoZSBFbmQgb2YgRnJhbWUgaW50ZXJydXB0LCB3aGljaCB3aWxsIGZyZWUgYSB0eC1kZXNjcmlwdG9yLAotICAgICAgICAqIHdoaWNoIHdlIHdpbGwgbmVlZCBmb3IgdGhlIG5leHQgZGV2aWNlX3ByZXBfc2xhdmVfc2coKS4gVGhlCi0gICAgICAgICogSVJRLWhhbmRsZXIgd2lsbCBkaXNhYmxlIHRoZSBJUlEgYWdhaW4uCi0gICAgICAgICovCi0gICAgICAgaW5pdF9jb21wbGV0aW9uKCZteDNfZmJpLT5mbGlwX2NtcGwpOwotICAgICAgIGVuYWJsZV9pcnEobXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+ZW9mX2lycSk7CisJLyoKKwkgKiBXZSBlbmFibGUgdGhlIEVuZCBvZiBGcmFtZSBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgZnJlZSBhIHR4LWRlc2NyaXB0b3IsCisJICogd2hpY2ggd2Ugd2lsbCBuZWVkIGZvciB0aGUgbmV4dCBkZXZpY2VfcHJlcF9zbGF2ZV9zZygpLiBUaGUKKwkgKiBJUlEtaGFuZGxlciB3aWxsIGRpc2FibGUgdGhlIElSUSBhZ2Fpbi4KKwkgKi8KKwlpbml0X2NvbXBsZXRpb24oJm14M19mYmktPmZsaXBfY21wbCk7CisJZW5hYmxlX2lycShteDNfZmJpLT5pZG1hY19jaGFubmVsLT5lb2ZfaXJxKTsKIAotICAgICAgIHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbXgzX2ZiaS0+ZmxpcF9jbXBsLCBIWiAvIDEwKTsKLSAgICAgICBpZiAocmV0IDw9IDApIHsKLSAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgZGV2X2luZm8oZmJpLT5kZXZpY2UsICJQYW5uaW5nIGZhaWxlZCBkdWUgdG8gJXNcbiIsIHJldCA8IDAgPwotICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIgaW50ZXJydXB0IiA6ICJ0aW1lb3V0Iik7Ci0gICAgICAgICAgICAgICByZXR1cm4gcmV0ID8gOiAtRVRJTUVET1VUOwotICAgICAgIH0KKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm14M19mYmktPmZsaXBfY21wbCwgSFogLyAxMCk7CisJaWYgKHJldCA8PSAwKSB7CisJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQlkZXZfaW5mbyhmYmktPmRldmljZSwgIlBhbm5pbmcgZmFpbGVkIGR1ZSB0byAlc1xuIiwgcmV0IDwgMCA/CisJCQkgInVzZXIgaW50ZXJydXB0IiA6ICJ0aW1lb3V0Iik7CisJCXJldHVybiByZXQgPyA6IC1FVElNRURPVVQ7CisJfQogCi0gICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYgPSAhbXgzX2ZiaS0+Y3VyX2lwdV9idWY7CisJbXgzX2ZiaS0+Y3VyX2lwdV9idWYgPSAhbXgzX2ZiaS0+Y3VyX2lwdV9idWY7CiAKLSAgICAgICBzZ19kbWFfYWRkcmVzcygmc2dbbXgzX2ZiaS0+Y3VyX2lwdV9idWZdKSA9IGJhc2U7Ci0gICAgICAgc2dfc2V0X3BhZ2UoJnNnW214M19mYmktPmN1cl9pcHVfYnVmXSwKLSAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX3BhZ2UoZmJpLT5zY3JlZW5fYmFzZSArIG9mZnNldCksIGZiaS0+Zml4LnNtZW1fbGVuLAotICAgICAgICAgICAgICAgICAgIG9mZnNldF9pbl9wYWdlKGZiaS0+c2NyZWVuX2Jhc2UgKyBvZmZzZXQpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2dbbXgzX2ZiaS0+Y3VyX2lwdV9idWZdKSA9IGJhc2U7CisJc2dfc2V0X3BhZ2UoJnNnW214M19mYmktPmN1cl9pcHVfYnVmXSwKKwkJICAgIHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9iYXNlICsgb2Zmc2V0KSwgZmJpLT5maXguc21lbV9sZW4sCisJCSAgICBvZmZzZXRfaW5fcGFnZShmYmktPnNjcmVlbl9iYXNlICsgb2Zmc2V0KSk7CiAKLSAgICAgICB0eGQgPSBkbWFfY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhkbWFfY2hhbiwgc2cgKwotICAgICAgICAgICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7Ci0gICAgICAgaWYgKCF0eGQpIHsKLSAgICAgICAgICAgICAgIGRldl9lcnIoZmJpLT5kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBwcmVwYXJpbmcgYSBETUEgdHJhbnNhY3Rpb24gZGVzY3JpcHRvci5cbiIpOwotICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7Ci0gICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICB9CisJdHhkID0gZG1hX2NoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coZG1hX2NoYW4sIHNnICsKKwkJbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7CisJaWYgKCF0eGQpIHsKKwkJZGV2X2VycihmYmktPmRldmljZSwKKwkJCSJFcnJvciBwcmVwYXJpbmcgYSBETUEgdHJhbnNhY3Rpb24gZGVzY3JpcHRvci5cbiIpOworCQltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQogCi0gICAgICAgdHhkLT5jYWxsYmFja19wYXJhbSAgICAgPSB0eGQ7Ci0gICAgICAgdHhkLT5jYWxsYmFjayAgICAgICAgICAgPSBteDNmYl9kbWFfZG9uZTsKKwl0eGQtPmNhbGxiYWNrX3BhcmFtCT0gdHhkOworCXR4ZC0+Y2FsbGJhY2sJCT0gbXgzZmJfZG1hX2RvbmU7CiAKLSAgICAgICAvKgotICAgICAgICAqIEVtdWxhdGUgb3JpZ2luYWwgbXgzZmIgYmVoYXZpb3VyOiBlYWNoIG5ldyBjYWxsIHRvIGlkbWFjX3R4X3N1Ym1pdCgpCi0gICAgICAgICogc2hvdWxkIHN3aXRjaCB0byBhbm90aGVyIGJ1ZmZlcgotICAgICAgICAqLwotICAgICAgIGNvb2tpZSA9IHR4ZC0+dHhfc3VibWl0KHR4ZCk7Ci0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgIiVkOiBTdWJtaXQgJXAgIyVkXG4iLCBfX0xJTkVfXywgdHhkLCBjb29raWUpOwotICAgICAgIGlmIChjb29raWUgPCAwKSB7Ci0gICAgICAgICAgICAgICBkZXZfZXJyKGZiaS0+ZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgdXBkYXRpbmcgU0RDIGJ1ZiAlZCB0byBhZGRyZXNzPTB4JTA4bFhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIG14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKLSAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgfQorCS8qCisJICogRW11bGF0ZSBvcmlnaW5hbCBteDNmYiBiZWhhdmlvdXI6IGVhY2ggbmV3IGNhbGwgdG8gaWRtYWNfdHhfc3VibWl0KCkKKwkgKiBzaG91bGQgc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyCisJICovCisJY29va2llID0gdHhkLT50eF9zdWJtaXQodHhkKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJWQ6IFN1Ym1pdCAlcCAjJWRcbiIsIF9fTElORV9fLCB0eGQsIGNvb2tpZSk7CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJZGV2X2VycihmYmktPmRldmljZSwKKwkJCSJFcnJvciB1cGRhdGluZyBTREMgYnVmICVkIHRvIGFkZHJlc3M9MHglMDhsWFxuIiwKKwkJCW14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKKwkJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KIAotICAgICAgIGlmIChteDNfZmJpLT50eGQpCi0gICAgICAgICAgICAgICBhc3luY190eF9hY2sobXgzX2ZiaS0+dHhkKTsKLSAgICAgICBteDNfZmJpLT50eGQgPSB0eGQ7CisJaWYgKG14M19mYmktPnR4ZCkKKwkJYXN5bmNfdHhfYWNrKG14M19mYmktPnR4ZCk7CisJbXgzX2ZiaS0+dHhkID0gdHhkOwogCi0gICAgICAgZmJpLT52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKLSAgICAgICBmYmktPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OworCWZiaS0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7CisJZmJpLT52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKIAotICAgICAgIGlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfWVdSQVApCi0gICAgICAgICAgICAgICBmYmktPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsKLSAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBmYmktPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ZV1JBUCkKKwkJZmJpLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7CisJZWxzZQorCQlmYmktPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CiAKLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGUgY29tcGxldGVcbiIpOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGUgY29tcGxldGVcbiIpOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMTI0LDE1ICsxMTI0LDE1IEBACiAgKiBibGl0dGluZywgcmVjdGFuZ2xlIGZpbGxpbmcsIGNvcHkgcmVnaW9ucyBhbmQgY3Vyc29yIGRlZmluaXRpb24uCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIG14M2ZiX29wcyA9IHsKLSAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKLSAgICAgICAuZmJfc2V0X3BhciA9IG14M2ZiX3NldF9wYXIsCi0gICAgICAgLmZiX2NoZWNrX3ZhciA9IG14M2ZiX2NoZWNrX3ZhciwKLSAgICAgICAuZmJfc2V0Y29scmVnID0gbXgzZmJfc2V0Y29scmVnLAotICAgICAgIC5mYl9wYW5fZGlzcGxheSA9IG14M2ZiX3Bhbl9kaXNwbGF5LAotICAgICAgIC5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKLSAgICAgICAuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCi0gICAgICAgLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0gICAgICAgLmZiX2JsYW5rID0gbXgzZmJfYmxhbmssCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX3NldF9wYXIgPSBteDNmYl9zZXRfcGFyLAorCS5mYl9jaGVja192YXIgPSBteDNmYl9jaGVja192YXIsCisJLmZiX3NldGNvbHJlZyA9IG14M2ZiX3NldGNvbHJlZywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBteDNmYl9wYW5fZGlzcGxheSwKKwkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9ibGFuayA9IG14M2ZiX2JsYW5rLAogfTsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMTE0NiwxOSArMTE0NiwxOSBAQAogICovCiBzdGF0aWMgaW50IG14M2ZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOwogCi0gICAgICAgYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotICAgICAgIGZiX3NldF9zdXNwZW5kKGRydl9kYXRhLT5mYmksIDEpOwotICAgICAgIHJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZmJfc2V0X3N1c3BlbmQoZHJ2X2RhdGEtPmZiaSwgMSk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKLSAgICAgICAgICAgICAgIHNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7Ci0gICAgICAgICAgICAgICBzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIDApOworCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKSB7CisJCXNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7CisJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMCk7CiAKLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIDA7CisJfQorCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTE2NiwxOSArMTE2NiwxOSBAQAogICovCiBzdGF0aWMgaW50IG14M2ZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKLSAgICAgICAgICAgICAgIHNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKLSAgICAgICAgICAgICAgIHNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgZHJ2X2RhdGEtPmJhY2tsaWdodF9sZXZlbCk7Ci0gICAgICAgfQorCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKSB7CisJCXNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKKwkJc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCBkcnZfZGF0YS0+YmFja2xpZ2h0X2xldmVsKTsKKwl9CiAKLSAgICAgICBhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0gICAgICAgZmJfc2V0X3N1c3BlbmQoZHJ2X2RhdGEtPmZiaSwgMCk7Ci0gICAgICAgcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlmYl9zZXRfc3VzcGVuZChkcnZfZGF0YS0+ZmJpLCAwKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIG14M2ZiX3N1c3BlbmQgICBOVUxMCkBAIC0xMTkxLDggKzExOTEsOCBAQAogCiAvKioKICAqIG14M2ZiX21hcF92aWRlb19tZW1vcnkoKSAtIGFsbG9jYXRlcyB0aGUgRFJBTSBtZW1vcnkgZm9yIHRoZSBmcmFtZSBidWZmZXIuCi0gKiBAZmJpOiAgICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCi0gKiBAcmV0dXJuOiAgICBFcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCisgKiBAZmJpOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCisgKiBAcmV0dXJuOglFcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCiAgKgogICogVGhpcyBidWZmZXIgaXMgcmVtYXBwZWQgaW50byBhIG5vbi1jYWNoZWQsIG5vbi1idWZmZXJlZCwgbWVtb3J5IHJlZ2lvbiB0bwogICogYWxsb3cgcGFsZXR0ZSBhbmQgcGl4ZWwgd3JpdGVzIHRvIG9jY3VyIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLiBPbmNlIHRoaXMKQEAgLTEyMDEsMzQ5ICsxMjAxLDM0OSBAQAogICovCiBzdGF0aWMgaW50IG14M2ZiX21hcF92aWRlb19tZW1vcnkoc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBpbnQgcmV0dmFsID0gMDsKLSAgICAgICBkbWFfYWRkcl90IGFkZHI7CisJaW50IHJldHZhbCA9IDA7CisJZG1hX2FkZHJfdCBhZGRyOwogCi0gICAgICAgZmJpLT5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZmJpLT5kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT5maXguc21lbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHIsIEdGUF9ETUEpOworCWZiaS0+c2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGZiaS0+ZGV2aWNlLAorCQkJCQkJICBmYmktPmZpeC5zbWVtX2xlbiwKKwkJCQkJCSAgJmFkZHIsIEdGUF9ETUEpOwogCi0gICAgICAgaWYgKCFmYmktPnNjcmVlbl9iYXNlKSB7Ci0gICAgICAgICAgICAgICBkZXZfZXJyKGZiaS0+ZGV2aWNlLCAiQ2Fubm90IGFsbG9jYXRlICV1IGJ5dGVzIGZyYW1lYnVmZmVyIG1lbW9yeVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgZmJpLT5maXguc21lbV9sZW4pOwotICAgICAgICAgICAgICAgcmV0dmFsID0gLUVCVVNZOwotICAgICAgICAgICAgICAgZ290byBlcnIwOwotICAgICAgIH0KKwlpZiAoIWZiaS0+c2NyZWVuX2Jhc2UpIHsKKwkJZGV2X2VycihmYmktPmRldmljZSwgIkNhbm5vdCBhbGxvY2F0ZSAldSBieXRlcyBmcmFtZWJ1ZmZlciBtZW1vcnlcbiIsCisJCQlmYmktPmZpeC5zbWVtX2xlbik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIwOworCX0KIAotICAgICAgIGZiaS0+Zml4LnNtZW1fc3RhcnQgPSBhZGRyOworCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBhZGRyOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgImFsbG9jYXRlZCBmYiBAIHA9MHglMDh4LCB2PTB4JXAsIHNpemU9JWQuXG4iLAotICAgICAgICAgICAgICAgKHVpbnQzMl90KSBmYmktPmZpeC5zbWVtX3N0YXJ0LCBmYmktPnNjcmVlbl9iYXNlLCBmYmktPmZpeC5zbWVtX2xlbik7CisJZGV2X2RiZyhmYmktPmRldmljZSwgImFsbG9jYXRlZCBmYiBAIHA9MHglMDh4LCB2PTB4JXAsIHNpemU9JWQuXG4iLAorCQkodWludDMyX3QpIGZiaS0+Zml4LnNtZW1fc3RhcnQsIGZiaS0+c2NyZWVuX2Jhc2UsIGZiaS0+Zml4LnNtZW1fbGVuKTsKIAotICAgICAgIGZiaS0+c2NyZWVuX3NpemUgPSBmYmktPmZpeC5zbWVtX2xlbjsKKwlmYmktPnNjcmVlbl9zaXplID0gZmJpLT5maXguc21lbV9sZW47CiAKLSAgICAgICAvKiBDbGVhciB0aGUgc2NyZWVuICovCi0gICAgICAgbWVtc2V0KChjaGFyICopZmJpLT5zY3JlZW5fYmFzZSwgMCwgZmJpLT5maXguc21lbV9sZW4pOworCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8KKwltZW1zZXQoKGNoYXIgKilmYmktPnNjcmVlbl9iYXNlLCAwLCBmYmktPmZpeC5zbWVtX2xlbik7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogZXJyMDoKLSAgICAgICBmYmktPmZpeC5zbWVtX2xlbiA9IDA7Ci0gICAgICAgZmJpLT5maXguc21lbV9zdGFydCA9IDA7Ci0gICAgICAgZmJpLT5zY3JlZW5fYmFzZSA9IE5VTEw7Ci0gICAgICAgcmV0dXJuIHJldHZhbDsKKwlmYmktPmZpeC5zbWVtX2xlbiA9IDA7CisJZmJpLT5maXguc21lbV9zdGFydCA9IDA7CisJZmJpLT5zY3JlZW5fYmFzZSA9IE5VTEw7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCiAgKiBteDNmYl91bm1hcF92aWRlb19tZW1vcnkoKSAtIGRlLWFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBtZW1vcnkuCi0gKiBAZmJpOiAgICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCi0gKiBAcmV0dXJuOiAgICBlcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCisgKiBAZmJpOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCisgKiBAcmV0dXJuOgllcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGZiaS0+ZGV2aWNlLCBmYmktPmZpeC5zbWVtX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT5zY3JlZW5fYmFzZSwgZmJpLT5maXguc21lbV9zdGFydCk7CisJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGZiaS0+ZGV2aWNlLCBmYmktPmZpeC5zbWVtX2xlbiwKKwkJCSAgICAgIGZiaS0+c2NyZWVuX2Jhc2UsIGZiaS0+Zml4LnNtZW1fc3RhcnQpOwogCi0gICAgICAgZmJpLT5zY3JlZW5fYmFzZSA9IDA7Ci0gICAgICAgZmJpLT5maXguc21lbV9zdGFydCA9IDA7Ci0gICAgICAgZmJpLT5maXguc21lbV9sZW4gPSAwOwotICAgICAgIHJldHVybiAwOworCWZiaS0+c2NyZWVuX2Jhc2UgPSAwOworCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSAwOworCWZiaS0+Zml4LnNtZW1fbGVuID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBteDNmYl9pbml0X2ZiaW5mbygpIC0gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBvYmplY3QuCi0gKiBAcmV0dXJuOiAgICBpbml0aWFsaXplZCBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuOglpbml0aWFsaXplZCBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqbXgzZmJfaW5pdF9mYmluZm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZmJfb3BzICpvcHMpCiB7Ci0gICAgICAgc3RydWN0IGZiX2luZm8gKmZiaTsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzZmJpOwotICAgICAgIGludCByZXQ7CisJc3RydWN0IGZiX2luZm8gKmZiaTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzZmJpOworCWludCByZXQ7CiAKLSAgICAgICAvKiBBbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGZiIHN0cnVjdHVyZSAqLwotICAgICAgIGZiaSA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgbXgzZmJfaW5mbyksIGRldik7Ci0gICAgICAgaWYgKCFmYmkpCi0gICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwkvKiBBbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGZiIHN0cnVjdHVyZSAqLworCWZiaSA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgbXgzZmJfaW5mbyksIGRldik7CisJaWYgKCFmYmkpCisJCXJldHVybiBOVUxMOwogCi0gICAgICAgbXgzZmJpICAgICAgICAgICAgICAgICAgPSBmYmktPnBhcjsKLSAgICAgICBteDNmYmktPmNvb2tpZSAgICAgICAgICA9IC1FSU5WQUw7Ci0gICAgICAgbXgzZmJpLT5jdXJfaXB1X2J1ZiAgICAgPSAwOworCW14M2ZiaQkJCT0gZmJpLT5wYXI7CisJbXgzZmJpLT5jb29raWUJCT0gLUVJTlZBTDsKKwlteDNmYmktPmN1cl9pcHVfYnVmCT0gMDsKIAotICAgICAgIGZiaS0+dmFyLmFjdGl2YXRlICAgICAgID0gRkJfQUNUSVZBVEVfTk9XOworCWZiaS0+dmFyLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XOwogCi0gICAgICAgZmJpLT5mYm9wcyAgICAgICAgICAgICAgPSBvcHM7Ci0gICAgICAgZmJpLT5mbGFncyAgICAgICAgICAgICAgPSBGQklORk9fRkxBR19ERUZBVUxUOwotICAgICAgIGZiaS0+cHNldWRvX3BhbGV0dGUgICAgID0gbXgzZmJpLT5wc2V1ZG9fcGFsZXR0ZTsKKwlmYmktPmZib3BzCQk9IG9wczsKKwlmYmktPmZsYWdzCQk9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisJZmJpLT5wc2V1ZG9fcGFsZXR0ZQk9IG14M2ZiaS0+cHNldWRvX3BhbGV0dGU7CiAKLSAgICAgICBtdXRleF9pbml0KCZteDNmYmktPm11dGV4KTsKKwltdXRleF9pbml0KCZteDNmYmktPm11dGV4KTsKIAotICAgICAgIC8qIEFsbG9jYXRlIGNvbG9ybWFwICovCi0gICAgICAgcmV0ID0gZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCAxNiwgMCk7Ci0gICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKLSAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgIH0KKwkvKiBBbGxvY2F0ZSBjb2xvcm1hcCAqLworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgMTYsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0gICAgICAgcmV0dXJuIGZiaTsKKwlyZXR1cm4gZmJpOwogfQogCiBzdGF0aWMgaW50IGluaXRfZmJfY2hhbihzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbikKIHsKLSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBteDNmYi0+ZGV2OwotICAgICAgIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhICpteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLSAgICAgICBjb25zdCBjaGFyICpuYW1lID0gbXgzZmJfcGRhdGEtPm5hbWU7Ci0gICAgICAgdW5zaWduZWQgaW50IGlycTsKLSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNmYmk7Ci0gICAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKLSAgICAgICBpbnQgcmV0LCBudW1fbW9kZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXgzZmItPmRldjsKKwlzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSAqbXgzZmJfcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJY29uc3QgY2hhciAqbmFtZSA9IG14M2ZiX3BkYXRhLT5uYW1lOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGZiX2luZm8gKmZiaTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzZmJpOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisJaW50IHJldCwgbnVtX21vZGVzOwogCi0gICAgICAgaWNoYW4tPmNsaWVudCA9IG14M2ZiOwotICAgICAgIGlycSA9IGljaGFuLT5lb2ZfaXJxOworCWljaGFuLT5jbGllbnQgPSBteDNmYjsKKwlpcnEgPSBpY2hhbi0+ZW9mX2lycTsKIAotICAgICAgIGlmIChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCAhPSBJRE1BQ19TRENfMCkKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmIChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCAhPSBJRE1BQ19TRENfMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBmYmkgPSBteDNmYl9pbml0X2ZiaW5mbyhkZXYsICZteDNmYl9vcHMpOwotICAgICAgIGlmICghZmJpKQotICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJZmJpID0gbXgzZmJfaW5pdF9mYmluZm8oZGV2LCAmbXgzZmJfb3BzKTsKKwlpZiAoIWZiaSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLSAgICAgICBpZiAoIWZiX21vZGUpCi0gICAgICAgICAgICAgICBmYl9tb2RlID0gbmFtZTsKKwlpZiAoIWZiX21vZGUpCisJCWZiX21vZGUgPSBuYW1lOwogCi0gICAgICAgaWYgKCFmYl9tb2RlKSB7Ci0gICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgZ290byBlbW9kZTsKLSAgICAgICB9CisJaWYgKCFmYl9tb2RlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZW1vZGU7CisJfQogCi0gICAgICAgaWYgKG14M2ZiX3BkYXRhLT5tb2RlICYmIG14M2ZiX3BkYXRhLT5udW1fbW9kZXMpIHsKLSAgICAgICAgICAgICAgIG1vZGUgPSBteDNmYl9wZGF0YS0+bW9kZTsKLSAgICAgICAgICAgICAgIG51bV9tb2RlcyA9IG14M2ZiX3BkYXRhLT5udW1fbW9kZXM7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgIG1vZGUgPSBteDNmYl9tb2RlZGI7Ci0gICAgICAgICAgICAgICBudW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14M2ZiX21vZGVkYik7Ci0gICAgICAgfQorCWlmIChteDNmYl9wZGF0YS0+bW9kZSAmJiBteDNmYl9wZGF0YS0+bnVtX21vZGVzKSB7CisJCW1vZGUgPSBteDNmYl9wZGF0YS0+bW9kZTsKKwkJbnVtX21vZGVzID0gbXgzZmJfcGRhdGEtPm51bV9tb2RlczsKKwl9IGVsc2UgeworCQltb2RlID0gbXgzZmJfbW9kZWRiOworCQludW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14M2ZiX21vZGVkYik7CisJfQogCi0gICAgICAgaWYgKCFmYl9maW5kX21vZGUoJmZiaS0+dmFyLCBmYmksIGZiX21vZGUsIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbnVtX21vZGVzLCBOVUxMLCBkZWZhdWx0X2JwcCkpIHsKLSAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgIGdvdG8gZW1vZGU7Ci0gICAgICAgfQorCWlmICghZmJfZmluZF9tb2RlKCZmYmktPnZhciwgZmJpLCBmYl9tb2RlLCBtb2RlLAorCQkJICBudW1fbW9kZXMsIE5VTEwsIGRlZmF1bHRfYnBwKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZW1vZGU7CisJfQogCi0gICAgICAgZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KG1vZGUsIG51bV9tb2RlcywgJmZiaS0+bW9kZWxpc3QpOworCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdChtb2RlLCBudW1fbW9kZXMsICZmYmktPm1vZGVsaXN0KTsKIAotICAgICAgIC8qIERlZmF1bHQgWSB2aXJ0dWFsIHNpemUgaXMgMnggcGFuZWwgc2l6ZSAqLwotICAgICAgIGZiaS0+dmFyLnlyZXNfdmlydHVhbCA9IGZiaS0+dmFyLnlyZXMgKiAyOworCS8qIERlZmF1bHQgWSB2aXJ0dWFsIHNpemUgaXMgMnggcGFuZWwgc2l6ZSAqLworCWZiaS0+dmFyLnlyZXNfdmlydHVhbCA9IGZiaS0+dmFyLnlyZXMgKiAyOwogCi0gICAgICAgbXgzZmItPmZiaSA9IGZiaTsKKwlteDNmYi0+ZmJpID0gZmJpOwogCi0gICAgICAgLyogc2V0IERpc3BsYXkgSW50ZXJmYWNlIGNsb2NrIHBlcmlvZCAqLwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMDEwMDAxMEwsIERJX0hTUF9DTEtfUEVSKTsKLSAgICAgICAvKiBNaWdodCBuZWVkIHRvIHRyaWdnZXIgSFNQIGNsb2NrIGNoYW5nZSAtIHNlZSA0NC4zLjMuOC41ICovCisJLyogc2V0IERpc3BsYXkgSW50ZXJmYWNlIGNsb2NrIHBlcmlvZCAqLworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMDEwMDAxMEwsIERJX0hTUF9DTEtfUEVSKTsKKwkvKiBNaWdodCBuZWVkIHRvIHRyaWdnZXIgSFNQIGNsb2NrIGNoYW5nZSAtIHNlZSA0NC4zLjMuOC41ICovCiAKLSAgICAgICBzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIDI1NSk7Ci0gICAgICAgc2RjX3NldF9nbG9iYWxfYWxwaGEobXgzZmIsIHRydWUsIDB4RkYpOwotICAgICAgIHNkY19zZXRfY29sb3Jfa2V5KG14M2ZiLCBJRE1BQ19TRENfMCwgZmFsc2UsIDApOworCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMjU1KTsKKwlzZGNfc2V0X2dsb2JhbF9hbHBoYShteDNmYiwgdHJ1ZSwgMHhGRik7CisJc2RjX3NldF9jb2xvcl9rZXkobXgzZmIsIElETUFDX1NEQ18wLCBmYWxzZSwgMCk7CiAKLSAgICAgICBteDNmYmkgICAgICAgICAgICAgICAgICA9IGZiaS0+cGFyOwotICAgICAgIG14M2ZiaS0+aWRtYWNfY2hhbm5lbCAgID0gaWNoYW47Ci0gICAgICAgbXgzZmJpLT5pcHVfY2ggICAgICAgICAgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKLSAgICAgICBteDNmYmktPm14M2ZiICAgICAgICAgICA9IG14M2ZiOwotICAgICAgIG14M2ZiaS0+YmxhbmsgICAgICAgICAgID0gRkJfQkxBTktfTk9STUFMOworCW14M2ZiaQkJCT0gZmJpLT5wYXI7CisJbXgzZmJpLT5pZG1hY19jaGFubmVsCT0gaWNoYW47CisJbXgzZmJpLT5pcHVfY2gJCT0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CisJbXgzZmJpLT5teDNmYgkJPSBteDNmYjsKKwlteDNmYmktPmJsYW5rCQk9IEZCX0JMQU5LX05PUk1BTDsKIAotICAgICAgIGluaXRfY29tcGxldGlvbigmbXgzZmJpLT5mbGlwX2NtcGwpOwotICAgICAgIGRpc2FibGVfaXJxKGljaGFuLT5lb2ZfaXJxKTsKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJkaXNhYmxpbmcgaXJxICVkXG4iLCBpY2hhbi0+ZW9mX2lycSk7Ci0gICAgICAgcmV0ID0gbXgzZmJfc2V0X3BhcihmYmkpOwotICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgZ290byBlc2V0cGFyOworCWluaXRfY29tcGxldGlvbigmbXgzZmJpLT5mbGlwX2NtcGwpOworCWRpc2FibGVfaXJxKGljaGFuLT5lb2ZfaXJxKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJkaXNhYmxpbmcgaXJxICVkXG4iLCBpY2hhbi0+ZW9mX2lycSk7CisJcmV0ID0gbXgzZmJfc2V0X3BhcihmYmkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVzZXRwYXI7CiAKLSAgICAgICBteDNmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBmYmkpOworCW14M2ZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiaSk7CiAKLSAgICAgICBkZXZfaW5mbyhkZXYsICJteDNmYjogZmIgcmVnaXN0ZXJlZCwgdXNpbmcgbW9kZSAlc1xuIiwgZmJfbW9kZSk7CisJZGV2X2luZm8oZGV2LCAibXgzZmI6IGZiIHJlZ2lzdGVyZWQsIHVzaW5nIG1vZGUgJXNcbiIsIGZiX21vZGUpOwogCi0gICAgICAgcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpKTsKLSAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgICAgIGdvdG8gZXJmYjsKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVyZmI7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogZXJmYjoKIGVzZXRwYXI6CiBlbW9kZToKLSAgICAgICBmYl9kZWFsbG9jX2NtYXAoJmZiaS0+Y21hcCk7Ci0gICAgICAgZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOworCWZiX2RlYWxsb2NfY21hcCgmZmJpLT5jbWFwKTsKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7CiAKLSAgICAgICByZXR1cm4gcmV0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBib29sIGNoYW5fZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqYXJnKQogewotICAgICAgIHN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0ICpycSA9IGFyZzsKLSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0gICAgICAgc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgKm14M2ZiX3BkYXRhOworCXN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0ICpycSA9IGFyZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgKm14M2ZiX3BkYXRhOwogCi0gICAgICAgaWYgKCFycSkKLSAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwlpZiAoIXJxKQorCQlyZXR1cm4gZmFsc2U7CiAKLSAgICAgICBkZXYgPSBycS0+bXgzZmItPmRldjsKLSAgICAgICBteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlkZXYgPSBycS0+bXgzZmItPmRldjsKKwlteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAotICAgICAgIHJldHVybiBycS0+aWQgPT0gY2hhbi0+Y2hhbl9pZCAmJgotICAgICAgICAgICAgICAgbXgzZmJfcGRhdGEtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXY7CisJcmV0dXJuIHJxLT5pZCA9PSBjaGFuLT5jaGFuX2lkICYmCisJCW14M2ZiX3BkYXRhLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2OwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX2ZiaShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIG14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmkpOworCW14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmkpOwogCi0gICAgICAgZmJfZGVhbGxvY19jbWFwKCZmYmktPmNtYXApOworCWZiX2RlYWxsb2NfY21hcCgmZmJpLT5jbWFwKTsKIAotICAgICAgIHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpKTsKLSAgICAgICBmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmkpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKIH0KIAogc3RhdGljIGludCBteDNmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0gICAgICAgaW50IHJldDsKLSAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnNkY19yZWc7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiOwotICAgICAgIGRtYV9jYXBfbWFza190IG1hc2s7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuOwotICAgICAgIHN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHJxOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnNkY19yZWc7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiOworCWRtYV9jYXBfbWFza190IG1hc2s7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHJxOwogCi0gICAgICAgLyoKLSAgICAgICAgKiBEaXNwbGF5IEludGVyZmFjZSAoREkpIGFuZCBTeW5jaHJvbm91cyBEaXNwbGF5IENvbnRyb2xsZXIgKFNEQykKLSAgICAgICAgKiByZWdpc3RlcnMKLSAgICAgICAgKi8KLSAgICAgICBzZGNfcmVnID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLSAgICAgICBpZiAoIXNkY19yZWcpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIERpc3BsYXkgSW50ZXJmYWNlIChESSkgYW5kIFN5bmNocm9ub3VzIERpc3BsYXkgQ29udHJvbGxlciAoU0RDKQorCSAqIHJlZ2lzdGVycworCSAqLworCXNkY19yZWcgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghc2RjX3JlZykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBteDNmYiA9IGt6YWxsb2Moc2l6ZW9mKCpteDNmYiksIEdGUF9LRVJORUwpOwotICAgICAgIGlmICghbXgzZmIpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKwlteDNmYiA9IGt6YWxsb2Moc2l6ZW9mKCpteDNmYiksIEdGUF9LRVJORUwpOworCWlmICghbXgzZmIpCisJCXJldHVybiAtRU5PTUVNOwogCi0gICAgICAgc3Bpbl9sb2NrX2luaXQoJm14M2ZiLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbXgzZmItPmxvY2spOwogCi0gICAgICAgbXgzZmItPnJlZ19iYXNlID0gaW9yZW1hcChzZGNfcmVnLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZGNfcmVnKSk7Ci0gICAgICAgaWYgKCFteDNmYi0+cmVnX2Jhc2UpIHsKLSAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07Ci0gICAgICAgICAgICAgICBnb3RvIGVyZW1hcDsKLSAgICAgICB9CisJbXgzZmItPnJlZ19iYXNlID0gaW9yZW1hcChzZGNfcmVnLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZGNfcmVnKSk7CisJaWYgKCFteDNmYi0+cmVnX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcmVtYXA7CisJfQogCi0gICAgICAgcHJfZGVidWcoIlJlbWFwcGVkICV4IHRvICV4IGF0ICVwXG4iLCBzZGNfcmVnLT5zdGFydCwgc2RjX3JlZy0+ZW5kLAotICAgICAgICAgICAgICAgIG14M2ZiLT5yZWdfYmFzZSk7CisJcHJfZGVidWcoIlJlbWFwcGVkICV4IHRvICV4IGF0ICVwXG4iLCBzZGNfcmVnLT5zdGFydCwgc2RjX3JlZy0+ZW5kLAorCQkgbXgzZmItPnJlZ19iYXNlKTsKIAotICAgICAgIC8qIElETUFDIGludGVyZmFjZSAqLwotICAgICAgIGRtYWVuZ2luZV9nZXQoKTsKKwkvKiBJRE1BQyBpbnRlcmZhY2UgKi8KKwlkbWFlbmdpbmVfZ2V0KCk7CiAKLSAgICAgICBteDNmYi0+ZGV2ID0gZGV2OwotICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG14M2ZiKTsKKwlteDNmYi0+ZGV2ID0gZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG14M2ZiKTsKIAotICAgICAgIHJxLm14M2ZiID0gbXgzZmI7CisJcnEubXgzZmIgPSBteDNmYjsKIAotICAgICAgIGRtYV9jYXBfemVybyhtYXNrKTsKLSAgICAgICBkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwotICAgICAgIGRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtYXNrKTsKLSAgICAgICBycS5pZCA9IElETUFDX1NEQ18wOwotICAgICAgIGNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOwotICAgICAgIGlmICghY2hhbikgewotICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwotICAgICAgICAgICAgICAgZ290byBlcnNkYzA7Ci0gICAgICAgfQorCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtYXNrKTsKKwlycS5pZCA9IElETUFDX1NEQ18wOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOworCWlmICghY2hhbikgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJzZGMwOworCX0KIAotICAgICAgIHJldCA9IGluaXRfZmJfY2hhbihteDNmYiwgdG9faWRtYWNfY2hhbihjaGFuKSk7Ci0gICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICAgICBnb3RvIGVpc2RjMDsKKwlyZXQgPSBpbml0X2ZiX2NoYW4obXgzZmIsIHRvX2lkbWFjX2NoYW4oY2hhbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVpc2RjMDsKIAotICAgICAgIG14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwgPSAyNTU7CisJbXgzZmItPmJhY2tsaWdodF9sZXZlbCA9IDI1NTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiBlaXNkYzA6Ci0gICAgICAgZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOwogZXJzZGMwOgotICAgICAgIGRtYWVuZ2luZV9wdXQoKTsKLSAgICAgICBpb3VubWFwKG14M2ZiLT5yZWdfYmFzZSk7CisJZG1hZW5naW5lX3B1dCgpOworCWlvdW5tYXAobXgzZmItPnJlZ19iYXNlKTsKIGVyZW1hcDoKLSAgICAgICBrZnJlZShteDNmYik7Ci0gICAgICAgZGV2X2VycihkZXYsICJteDNmYjogZmFpbGVkIHRvIHJlZ2lzdGVyIGZiXG4iKTsKLSAgICAgICByZXR1cm4gcmV0OworCWtmcmVlKG14M2ZiKTsKKwlkZXZfZXJyKGRldiwgIm14M2ZiOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZmJcbiIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXgzZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotICAgICAgIHN0cnVjdCBmYl9pbmZvICpmYmkgPSBteDNmYi0+ZmJpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmZiaSA9IG14M2ZiLT5mYmk7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CiAKLSAgICAgICBjaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOwotICAgICAgIHJlbGVhc2VfZmJpKGZiaSk7CisJY2hhbiA9ICZteDNfZmJpLT5pZG1hY19jaGFubmVsLT5kbWFfY2hhbjsKKwlyZWxlYXNlX2ZiaShmYmkpOwogCi0gICAgICAgZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKLSAgICAgICBkbWFlbmdpbmVfcHV0KCk7CisJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwlkbWFlbmdpbmVfcHV0KCk7CiAKLSAgICAgICBpb3VubWFwKG14M2ZiLT5yZWdfYmFzZSk7Ci0gICAgICAga2ZyZWUobXgzZmIpOwotICAgICAgIHJldHVybiAwOworCWlvdW5tYXAobXgzZmItPnJlZ19iYXNlKTsKKwlrZnJlZShteDNmYik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14M2ZiX2RyaXZlciA9IHsKLSAgICAgICAuZHJpdmVyID0gewotICAgICAgICAgICAgICAgICAgLm5hbWUgPSBNWDNGQl9OQU1FLAotICAgICAgIH0sCi0gICAgICAgLnByb2JlID0gbXgzZmJfcHJvYmUsCi0gICAgICAgLnJlbW92ZSA9IG14M2ZiX3JlbW92ZSwKLSAgICAgICAuc3VzcGVuZCA9IG14M2ZiX3N1c3BlbmQsCi0gICAgICAgLnJlc3VtZSA9IG14M2ZiX3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IE1YM0ZCX05BTUUsCisJfSwKKwkucHJvYmUgPSBteDNmYl9wcm9iZSwKKwkucmVtb3ZlID0gbXgzZmJfcmVtb3ZlLAorCS5zdXNwZW5kID0gbXgzZmJfc3VzcGVuZCwKKwkucmVzdW1lID0gbXgzZmJfcmVzdW1lLAogfTsKIAogLyoKICAqIFBhcnNlIHVzZXIgc3BlY2lmaWVkIG9wdGlvbnMgKGB2aWRlbz1teDNmYjonKQogICogZXhhbXBsZToKLSAqICAgICB2aWRlbz1teDNmYjpicHA9MTYKKyAqIAl2aWRlbz1teDNmYjpicHA9MTYKICAqLwogc3RhdGljIGludCBteDNmYl9zZXR1cCh2b2lkKQogewogI2lmbmRlZiBNT0RVTEUKLSAgICAgICBjaGFyICpvcHQsICpvcHRpb25zID0gTlVMTDsKKwljaGFyICpvcHQsICpvcHRpb25zID0gTlVMTDsKIAotICAgICAgIGlmIChmYl9nZXRfb3B0aW9ucygibXgzZmIiLCAmb3B0aW9ucykpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwlpZiAoZmJfZ2V0X29wdGlvbnMoIm14M2ZiIiwgJm9wdGlvbnMpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotICAgICAgIGlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCi0gICAgICAgICAgICAgICByZXR1cm4gMDsKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKIAotICAgICAgIHdoaWxlICgob3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICBpZiAoISpvcHQpCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKG9wdCwgImJwcD0iLCA0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9icHAgPSBzaW1wbGVfc3RydG91bChvcHQgKyA0LCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgZmJfbW9kZSA9IG9wdDsKLSAgICAgICB9CisJd2hpbGUgKChvcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqb3B0KQorCQkJY29udGludWU7CisJCWlmICghc3RybmNtcChvcHQsICJicHA9IiwgNCkpCisJCQlkZWZhdWx0X2JwcCA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDQsIE5VTEwsIDApOworCQllbHNlCisJCQlmYl9tb2RlID0gb3B0OworCX0KICNlbmRpZgogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG14M2ZiX2luaXQodm9pZCkKIHsKLSAgICAgICBpbnQgcmV0ID0gbXgzZmJfc2V0dXAoKTsKKwlpbnQgcmV0ID0gbXgzZmJfc2V0dXAoKTsKIAotICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotICAgICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzZmJfZHJpdmVyKTsKLSAgICAgICByZXR1cm4gcmV0OworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzZmJfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXgzZmJfZXhpdCh2b2lkKQogewotICAgICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteDNmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteDNmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChteDNmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKaW5kZXggM2EzZjgwZi4uMDU3M2VjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcG1hZ2JhZmJfcGFyKSwgZGV2KTsKIAlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgbWFwXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KQEAgLTE3Myw4ICsxNzMsOSBAQAogCS8qIFJlcXVlc3QgdGhlIEkvTyBNRU0gcmVzb3VyY2UuICAqLwogCXN0YXJ0ID0gdGRldi0+cmVzb3VyY2Uuc3RhcnQ7CiAJbGVuID0gdGRldi0+cmVzb3VyY2UuZW5kIC0gc3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldi0+YnVzX2lkKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsIGRldi0+YnVzX2lkKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXZfbmFtZShkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsCisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9jbWFwOwogCX0KQEAgLTE4Myw3ICsxODQsNyBAQAogCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gc3RhcnQ7CiAJcGFyLT5tbWlvID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwogCWlmICghcGFyLT5tbWlvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXguc21lbV9zdGFydCwKIAkJCQkJICAgIGluZm8tPmZpeC5zbWVtX2xlbik7CiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9tbWlvX21hcDsKIAl9CkBAIC0yMDUsMTQgKzIwNiwxNCBAQAogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQlnb3RvIGVycl9zbWVtX21hcDsKIAl9CiAKIAlnZXRfZGV2aWNlKGRldik7CiAKIAlwcl9pbmZvKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIGF0ICVzXG4iLAotCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldi0+YnVzX2lkKTsKKwkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXZfbmFtZShkZXYpKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCmluZGV4IDliODA1OTcuLjk4NzQ4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAogCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHBtYWdiYmZiX3BhciksIGRldik7CiAJaWYgKCFpbmZvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIGNvbG9yIG1hcFxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvYzsKIAl9CkBAIC0yODAsOCArMjgwLDkgQEAKIAkvKiBSZXF1ZXN0IHRoZSBJL08gTUVNIHJlc291cmNlLiAgKi8KIAlzdGFydCA9IHRkZXYtPnJlc291cmNlLnN0YXJ0OwogCWxlbiA9IHRkZXYtPnJlc291cmNlLmVuZCAtIHN0YXJ0ICsgMTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXYtPmJ1c19pZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLCBkZXYtPmJ1c19pZCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLAorCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnJfY21hcDsKIAl9CkBAIC0yOTAsNyArMjkxLDcgQEAKIAlpbmZvLT5maXgubW1pb19zdGFydCA9IHN0YXJ0OwogCXBhci0+bW1pbyA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAlpZiAoIXBhci0+bW1pbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAJfQpAQCAtMzAxLDcgKzMwMiw3IEBACiAJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBzdGFydCArIFBNQUdCX0JfRkJNRU07CiAJcGFyLT5zbWVtID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOwogCWlmICghcGFyLT5zbWVtKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX21taW9fbWFwOwogCX0KQEAgLTMxNiw3ICszMTcsNyBAQAogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQlnb3RvIGVycl9zbWVtX21hcDsKIAl9CiAKQEAgLTMyOCw3ICszMjksNyBAQAogCQkgcGFyLT5vc2MxIC8gMTAwMCwgcGFyLT5vc2MxICUgMTAwMCk7CiAKIAlwcl9pbmZvKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIGF0ICVzXG4iLAotCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldi0+YnVzX2lkKTsKKwkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXZfbmFtZShkZXYpKTsKIAlwcl9pbmZvKCJmYiVkOiBPc2MwOiAlcywgT3NjMTogJXMsIE9zYyV1IHNlbGVjdGVkXG4iLAogCQlpbmZvLT5ub2RlLCBmcmVxMCwgcGFyLT5vc2MxID8gZnJlcTEgOiAiZGlzYWJsZWQiLAogCQlwYXItPm9zYzEgIT0gMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKaW5kZXggODdmODI2ZS4uZTAwYzFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwpAQCAtMTIxMyw3ICsxMjEzLDcgQEAKIAlkZXYtPmNvcmUuZHJpdmVyX2RhdGEgPSBpbmZvOwogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAiJXMgJXMsIHVzaW5nICV1IEtpQiBvZiB2aWRlbyBtZW1vcnlcbiIsCi0JCSBkZXZfZHJpdmVyX3N0cmluZyhpbmZvLT5kZXYpLCBpbmZvLT5kZXYtPmJ1c19pZCwKKwkJIGRldl9kcml2ZXJfc3RyaW5nKGluZm8tPmRldiksIGRldl9uYW1lKGluZm8tPmRldiksCiAJCSBpbmZvLT5maXguc21lbV9sZW4gPj4gMTApOwogCiAJdGFzayA9IGt0aHJlYWRfcnVuKHBzM2ZiZCwgaW5mbywgREVWSUNFX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggMGEwZmQ0OC4uNTNmOGYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC02MSw3ICs2MSw3IEBACiAjaW5jbHVkZSA8bWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmg+CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CkBAIC0xODgsNyArMTg4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHB2cjJmYl9tYXA7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hkbWEgPSBQVlIyX0NBU0NBREVfQ0hBTjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMmRtYSA9IE9OQ0hJUF9OUl9ETUFfQ0hBTk5FTFM7CiAjZW5kaWYKQEAgLTIwNyw3ICsyMDcsNyBAQAogc3RhdGljIGludCBwdnIyX2luaXRfY2FibGUodm9pZCk7CiBzdGF0aWMgaW50IHB2cjJfZ2V0X3BhcmFtKGNvbnN0IHN0cnVjdCBwdnIyX3BhcmFtcyAqcCwgY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsLCBpbnQgc2l6ZSk7Ci0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHNzaXplX3QgcHZyMmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwogI2VuZGlmCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkuZmJfYmxhbmsJPSBwdnIyZmJfYmxhbmssCiAJLmZiX2NoZWNrX3Zhcgk9IHB2cjJmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSBwdnIyZmJfc2V0X3BhciwKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJLmZiX3dyaXRlCT0gcHZyMmZiX3dyaXRlLAogI2VuZGlmCiAJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LApAQCAtNjcxLDcgKzY3MSw3IEBACiAJcmV0dXJuIGNhYmxlX3R5cGU7CiB9CiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgc3NpemVfdCBwdnIyZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTc0Myw3ICs3NDMsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU0hfRE1BICovCisjZW5kaWYgLyogQ09ORklHX1BWUjJfRE1BICovCiAKIC8qKgogICogcHZyMmZiX2NvbW1vbl9pbml0CkBAIC04OTMsNyArODkzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJaWYgKHJlcXVlc3RfZG1hKHB2cjJkbWEsICJwdnIyIikgIT0gMCkgewogCQlmcmVlX2lycShIV19FVkVOVF9WU1lOQywgMCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC05MTUsNyArOTE1LDcgQEAKIAl9CiAKIAlmcmVlX2lycShIV19FVkVOVF9WU1lOQywgMCk7Ci0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogCWZyZWVfZG1hKHB2cjJkbWEpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggMjU1MmI5Zi4uODRmNjMyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvYml0ZmllbGQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAKQEAgLTg4MywxMCArODgyLDIxIEBACiAJaW5pdF9jb21wbGV0aW9uKCZvZmItPmJyYW5jaF9kb25lKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcHhhZmJfb3ZlcmxheV9zdXBwb3J0ZWQodm9pZCkKK3sKKwlpZiAoY3B1X2lzX3B4YTI3eCgpIHx8IGNwdV9pc19weGEzeHgoKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgcHhhZmJfb3ZlcmxheV9pbml0KHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCiB7CiAJaW50IGksIHJldDsKIAorCWlmICghcHhhZmJfb3ZlcmxheV9zdXBwb3J0ZWQoKSkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWluaXRfcHhhZmJfb3ZlcmxheShmYmksICZmYmktPm92ZXJsYXlbaV0sIGkpOwogCQlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5vdmVybGF5W2ldLmZiKTsKQEAgLTkwOSw2ICs5MTksOSBAQAogewogCWludCBpOwogCisJaWYgKCFweGFmYl9vdmVybGF5X3N1cHBvcnRlZCgpKQorCQlyZXR1cm47CisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmktPm92ZXJsYXlbaV0uZmIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKaW5kZXggNzljZjBiMTkuLmIwYjQ1MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtMTAxNyw2ICsxMDE3LDEwIEBACiAKIAlzM2MyNDEwZmJfaW5pdF9yZWdpc3RlcnMoZmJpbmZvKTsKIAorCS8qIHJlLWFjdGl2YXRlIG91ciBkaXNwbGF5IGFmdGVyIHJlc3VtZSAqLworCXMzYzI0MTBmYl9hY3RpdmF0ZV92YXIoZmJpbmZvKTsKKwlzM2MyNDEwZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgZmJpbmZvKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKaW5kZXggMDc2Zjk0Ni4uZmFkNThjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwpAQCAtMTc2LDkgKzE3Niw5IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2Fzc2FiZXQuaD4KICNpbmNsdWRlIDxtYWNoL3NoYW5ub24uaD4KQEAgLTI1MSwyMiArMjUxLDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCi1zdGF0aWMgc3RydWN0IHNhMTEwMGZiX21hY2hfaW5mbyBoMzgwMF9pbmZvIF9faW5pdGRhdGEgPSB7Ci0JLnBpeGNsb2NrCT0gMTc0NzU3LCAJLmJwcAkJPSAxNiwKLQkueHJlcwkJPSAzMjAsCQkueXJlcwkJPSAyNDAsCi0KLQkuaHN5bmNfbGVuCT0gMywJCS52c3luY19sZW4JPSAzLAotCS5sZWZ0X21hcmdpbgk9IDEyLAkJLnVwcGVyX21hcmdpbgk9IDEwLAotCS5yaWdodF9tYXJnaW4JPSAxNywJCS5sb3dlcl9tYXJnaW4JPSAxLAotCi0JLmNtYXBfc3RhdGljCT0gMSwKLQotCS5sY2NyMAkJPSBMQ0NSMF9Db2xvciB8IExDQ1IwX1NuZ2wgfCBMQ0NSMF9BY3QsCi0JLmxjY3IzCQk9IExDQ1IzX091dEVuSCB8IExDQ1IzX1BpeFJzRWRnIHwgTENDUjNfQUNCc0RpdigyKSwKLX07Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TQTExMDBfSDM2MDAKIHN0YXRpYyBzdHJ1Y3Qgc2ExMTAwZmJfbWFjaF9pbmZvIGgzNjAwX2luZm8gX19pbml0ZGF0YSA9IHsKIAkucGl4Y2xvY2sJPSAxNzQ3NTcsIAkuYnBwCQk9IDE2LApAQCAtNDMyLDExICs0MTYsNiBAQAogCQlmYmktPnJnYltSR0JfMTZdID0gJmgzNjAwX3JnYl8xNjsKIAl9CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzODAwCi0JaWYgKG1hY2hpbmVfaXNfaDM4MDAoKSkgewotCQlpbmYgPSAmaDM4MDBfaW5mbzsKLQl9Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfU0ExMTAwX0NPTExJRQogCWlmIChtYWNoaW5lX2lzX2NvbGxpZSgpKSB7CiAJCWluZiA9ICZjb2xsaWVfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggMmM1ZDA2OS4uOTJlYTBhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTMzLDYgKzMzLDggQEAKIAlzdHJ1Y3QgZmJfaW5mbyBpbmZvOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKIAlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gZGVmaW87CisJdW5zaWduZWQgbG9uZyBmcmFtZV9lbmQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfZW5kX3dhaXQ7CiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CkBAIC0yMjYsNyArMjI4LDEwIEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfbW9iaWxlX2xjZGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaDsKIAl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgaXNfc3ViOworCWludCBrOwogCiAJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCiAJdG1wID0gbGNkY19yZWFkKHByaXYsIF9MRElOVFIpOwpAQCAtMjM0LDggKzIzOSwyNCBAQAogCXRtcCB8PSAweDAwMDAwMGZmIF4gTERJTlRSX0ZTOyAvKiBzdGF0dXMgaW4gbG93IDggKi8KIAlsY2RjX3dyaXRlKHByaXYsIF9MRElOVFIsIHRtcCk7CiAKLQkvKiBkaXNhYmxlIGNsb2NrcyAqLwotCXNoX21vYmlsZV9sY2RjX2Nsa19vZmYocHJpdik7CisJLyogZmlndXJlIG91dCBpZiB0aGlzIGludGVycnVwdCBpcyBmb3IgbWFpbiBvciBzdWIgbGNkICovCisJaXNfc3ViID0gKGxjZGNfcmVhZChwcml2LCBfTERTUikgJiAoMSA8PCAxMCkpID8gMSA6IDA7CisKKwkvKiB3YWtlIHVwIGNoYW5uZWwgYW5kIGRpc2FibGUgY2xvY2tzKi8KKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShwcml2LT5jaCk7IGsrKykgeworCQljaCA9ICZwcml2LT5jaFtrXTsKKworCQlpZiAoIWNoLT5lbmFibGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX3N1YiA9PSBsY2RjX2NoYW5faXNfc3VibGNkKGNoKSkgeworCQkJY2gtPmZyYW1lX2VuZCA9IDE7CisJCQl3YWtlX3VwKCZjaC0+ZnJhbWVfZW5kX3dhaXQpOworCisJCQlzaF9tb2JpbGVfbGNkY19jbGtfb2ZmKHByaXYpOworCQl9CisJfQorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00NDgsMTggKzQ2OSwyNyBAQAogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcJKmJvYXJkX2NmZzsKIAlpbnQgazsKIAotCS8qIHRlbGwgdGhlIGJvYXJkIGNvZGUgdG8gZGlzYWJsZSB0aGUgcGFuZWwgKi8KKwkvKiBjbGVhbiB1cCBkZWZlcnJlZCBpbyBhbmQgYXNrIGJvYXJkIGNvZGUgdG8gZGlzYWJsZSBwYW5lbCAqLwogCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CiAJCWNoID0gJnByaXYtPmNoW2tdOworCisJCS8qIGRlZmVycmVkIGlvIG1vZGU6CisJCSAqIGZsdXNoIGZyYW1lLCBhbmQgd2FpdCBmb3IgZnJhbWUgZW5kIGludGVycnVwdAorCQkgKiBjbGVhbiB1cCBkZWZlcnJlZCBpbyBhbmQgZW5hYmxlIGNsb2NrCisJCSAqLworCQlpZiAoY2gtPmluZm8uZmJkZWZpbykgeworCQkJY2gtPmZyYW1lX2VuZCA9IDA7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoLT5pbmZvLmRlZmVycmVkX3dvcmssIDApOworCQkJd2FpdF9ldmVudChjaC0+ZnJhbWVfZW5kX3dhaXQsIGNoLT5mcmFtZV9lbmQpOworCQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgmY2gtPmluZm8pOworCQkJY2gtPmluZm8uZmJkZWZpbyA9IE5VTEw7CisJCQlzaF9tb2JpbGVfbGNkY19jbGtfb24ocHJpdik7CisJCX0KKwogCQlib2FyZF9jZmcgPSAmY2gtPmNmZy5ib2FyZF9jZmc7CiAJCWlmIChib2FyZF9jZmctPmRpc3BsYXlfb2ZmKQogCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29mZihib2FyZF9jZmctPmJvYXJkX2RhdGEpOwogCi0JCS8qIGNsZWFudXAgZGVmZXJyZWQgaW8gaWYgZW5hYmxlZCAqLwotCQlpZiAoY2gtPmluZm8uZmJkZWZpbykgewotCQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgmY2gtPmluZm8pOwotCQkJY2gtPmluZm8uZmJkZWZpbyA9IE5VTEw7Ci0JCX0KIAl9CiAKIAkvKiBzdG9wIHRoZSBsY2RjICovCkBAIC02NTIsNiArNjgyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJc2hfbW9iaWxlX2xjZGNfc3RvcChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc2hfbW9iaWxlX2xjZGNfc3RhcnQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfbW9iaWxlX2xjZGNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX21vYmlsZV9sY2RjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNoX21vYmlsZV9sY2RjX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tb2JpbGVfbGNkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNjg3LDcgKzczNyw3IEBACiAJfQogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShpLCBzaF9tb2JpbGVfbGNkY19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgcGRldi0+ZGV2LmJ1c19pZCwgcHJpdik7CisJCQkgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIHByaXYpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBpcnFcbiIpOwogCQlnb3RvIGVycjE7CkBAIC03MDcsNiArNzU3LDcgQEAKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlXG4iKTsKIAkJCWdvdG8gZXJyMTsKIAkJfQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5jaFtpXS5mcmFtZV9lbmRfd2FpdCk7CiAKIAkJc3dpdGNoIChwZGF0YS0+Y2hbaV0uY2hhbikgewogCQljYXNlIExDRENfQ0hBTl9NQUlOTENEOgpAQCAtODYwLDYgKzkxMSw3IEBACiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJzaF9tb2JpbGVfbGNkY19mYiIsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBtCQk9ICZzaF9tb2JpbGVfbGNkY19kZXZfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IHNoX21vYmlsZV9sY2RjX3Byb2JlLAogCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2xjZGNfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKaW5kZXggN2JhZjJkZC4uYTFlYjA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90bWlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCkBAIC03NTEsNyArNzUxLDcgQEAKIAl9CiAKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsICZ0bWlvZmJfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJCQlkZXYtPmRldi5idXNfaWQsIGluZm8pOworCQkJCQlkZXZfbmFtZSgmZGV2LT5kZXYpLCBpbmZvKTsKIAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwppbmRleCA2YzJkMzdmLi43NGFlNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwpAQCAtMjA0LDggKzIwNCwxMSBAQAogCQl9IGVsc2UgewogCQkJdjg2ZF9zdGFydGVkID0gMTsKIAkJCWVyciA9IGNuX25ldGxpbmtfc2VuZChtLCAwLCBnZnBfYW55KCkpOworCQkJaWYgKGVyciA9PSAtRU5PQlVGUykKKwkJCQllcnIgPSAwOwogCQl9Ci0JfQorCX0gZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKQorCQllcnIgPSAwOwogCiAJaWYgKCFlcnIgJiYgISh0YXNrLT50LmZsYWdzICYgVEZfRVhJVCkpCiAJCWVyciA9ICF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQodGFzay0+ZG9uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYwppbmRleCBiOWQ3NGQwLi42NTI0NGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvbXhjX3cxLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL214Y193MS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlpZiAoIW1kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3dpcmVfY2xrIik7CisJbWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3dpcmUiKTsKIAlpZiAoIW1kZXYtPmNsaykgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGZhaWxlZF9jbGs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCmluZGV4IGM5NzM4ODkuLmE3ZTNiNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jCkBAIC01OTAsOCArNTkwLDggQEAKIAl9CiAKIAkvKiBnZXQgaW50ZXJmYWNlICYgZnVuY3Rpb25hbCBjbG9jayBvYmplY3RzICovCi0JaGRxX2RhdGEtPmhkcV9pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJoZHFfaWNrIik7Ci0JaGRxX2RhdGEtPmhkcV9mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJoZHFfZmNrIik7CisJaGRxX2RhdGEtPmhkcV9pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwloZHFfZGF0YS0+aGRxX2ZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCiAJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykgfHwgSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgSERRIGNsb2NrIG9iamVjdHNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDMyNWMxMGYuLjU1ZjY0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTk0MCwyMSArOTQwLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdkdC4KIAotY29uZmlnIFdEVF81MDEKLQlib29sICJXRFQ1MDEgZmVhdHVyZXMiCi0JZGVwZW5kcyBvbiBXRFQKLQloZWxwCi0JICBTYXlpbmcgWSBoZXJlIGFuZCBjcmVhdGluZyBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgL2Rldi90ZW1wZXJhdHVyZQotCSAgd2l0aCBtYWpvciBudW1iZXIgMTAgYW5kIG1pbm9yIG51bWJlciAxMzEgKCJtYW4gbWtub2QiKSB3aWxsIGdpdmUKLQkgIHlvdSBhIHRoZXJtb21ldGVyIGluc2lkZSB5b3VyIGNvbXB1dGVyOiByZWFkaW5nIGZyb20KLQkgIC9kZXYvdGVtcGVyYXR1cmUgeWllbGRzIG9uZSBieXRlLCB0aGUgdGVtcGVyYXR1cmUgaW4gZGVncmVlcwotCSAgRmFocmVuaGVpdC4gVGhpcyB3b3JrcyBvbmx5IGlmIHlvdSBoYXZlIGEgV0RUNTAxUCB3YXRjaGRvZyBib2FyZAotCSAgaW5zdGFsbGVkLgotCi0JICBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIEZhbiBUYWNob21ldGVyIG9uIHRoZSBXRFQ1MDFQLCB0aGVuIHlvdQotCSAgY2FuIGRvIHRoaXMgdmlhIHRoZSB0YWNob21ldGVyIHBhcmFtZXRlci4gT25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEKLQkgIGZhbiB0YWNob21ldGVyIGFjdHVhbGx5IHNldCB1cC4KLQogIwogIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKaW5kZXggM2U1N2FhNC4uNGQxOGM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJQWNxdWlyZSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIgV2F0Y2hkb2cgVGltZXIgZHJpdmVyCiAgKgotICogICAgICBCYXNlZCBvbiB3ZHQuYy4gT3JpZ2luYWwgY29weXJpZ2h0IG1lc3NhZ2VzOgorICoJQmFzZWQgb24gd2R0LmMuIE9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCkBAIC0xNyw5ICsxNyw5IEBACiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgotICogICAgICAxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAotICogICAgICAgICAgQ2FuJ3QgYWRkIHRpbWVvdXQgLSBkcml2ZXIgZG9lc24ndCBhbGxvdyBjaGFuZ2luZyB2YWx1ZQorICoJMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICoJICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisgKgkgICAgQ2FuJ3QgYWRkIHRpbWVvdXQgLSBkcml2ZXIgZG9lc24ndCBhbGxvdyBjaGFuZ2luZyB2YWx1ZQogICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYwppbmRleCBhMWQ3ODU2Li44MjRkMDc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCkBAIC0xMzgsNyArMTM4LDkgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7Ci0JCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9NQUdJQ0NMT1NFLAorCQkub3B0aW9ucyA9IFdESU9GX0tFRVBBTElWRVBJTkcgfAorCQkJICAgV0RJT0ZfU0VUVElNRU9VVCB8CisJCQkgICBXRElPRl9NQUdJQ0NMT1NFLAogCQkuZmlybXdhcmVfdmVyc2lvbiA9IDEsCiAJCS5pZGVudGl0eSA9IFdBVENIRE9HX05BTUUsCiAJfTsKQEAgLTI1OSw3ICsyNjEsOCBAQAogCQlnb3RvIHVucmVnX3N0b3A7CiAJfQogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAoYWR2d2R0X3NldF9oZWFydGJlYXQodGltZW91dCkpIHsKIAkJYWR2d2R0X3NldF9oZWFydGJlYXQoV0FUQ0hET0dfVElNRU9VVCk7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYwppbmRleCAyYTc2OTBlLi45MzdhODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhbGlfcGNpLCAweENDLCAmdmFsKTsKIAl2YWwgJj0gfjB4M0Y7CS8qIE1hc2sgY291bnQgKi8KLQl2YWwgfD0gKDE8PDI1KSB8IGFsaV90aW1lb3V0X2JpdHM7CisJdmFsIHw9ICgxIDw8IDI1KSB8IGFsaV90aW1lb3V0X2JpdHM7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhbGlfcGNpLCAweENDLCB2YWwpOwogCiAJc3Bpbl91bmxvY2soJmFsaV9sb2NrKTsKQEAgLTc5LDggKzc5LDggQEAKIAlzcGluX2xvY2soJmFsaV9sb2NrKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhbGlfcGNpLCAweENDLCAmdmFsKTsKLQl2YWwgJj0gfjB4M0Y7CS8qIE1hc2sgY291bnQgdG8gemVybyAoZGlzYWJsZWQpICovCi0JdmFsICY9IH4oMTw8MjUpOy8qIGFuZCBmb3Igc2FmZXR5IG1hc2sgdGhlIHJlc2V0IGVuYWJsZSAqLworCXZhbCAmPSB+MHgzRjsJCS8qIE1hc2sgY291bnQgdG8gemVybyAoZGlzYWJsZWQpICovCisJdmFsICY9IH4oMSA8PCAyNSk7CS8qIGFuZCBmb3Igc2FmZXR5IG1hc2sgdGhlIHJlc2V0IGVuYWJsZSAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgdmFsKTsKIAogCXNwaW5fdW5sb2NrKCZhbGlfbG9jayk7CkBAIC04OSw3ICs4OSw3IEBACiAvKgogICoJYWxpX2tlZXBhbGl2ZQktCXNlbmQgYSBrZWVwYWxpdmUgdG8gdGhlIHdhdGNoZG9nCiAgKgotICogICAgICBTZW5kIGEga2VlcGFsaXZlIHRvIHRoZSB0aW1lciAoYWN0dWFsbHkgd2UgcmVzdGFydCB0aGUgdGltZXIpLgorICoJU2VuZCBhIGtlZXBhbGl2ZSB0byB0aGUgdGltZXIgKGFjdHVhbGx5IHdlIHJlc3RhcnQgdGhlIHRpbWVyKS4KICAqLwogCiBzdGF0aWMgdm9pZCBhbGlfa2VlcGFsaXZlKHZvaWQpCkBAIC0xMDksMTEgKzEwOSwxMSBAQAogCWlmICh0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZSBpZiAodCA8IDYwKQotCQlhbGlfdGltZW91dF9iaXRzID0gdHwoMTw8Nik7CisJCWFsaV90aW1lb3V0X2JpdHMgPSB0fCgxIDw8IDYpOwogCWVsc2UgaWYgKHQgPCAzNjAwKQotCQlhbGlfdGltZW91dF9iaXRzID0gKHQvNjApfCgxPDw3KTsKKwkJYWxpX3RpbWVvdXRfYml0cyA9ICh0IC8gNjApfCgxIDw8IDcpOwogCWVsc2UgaWYgKHQgPCAxODAwMCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9ICh0LzMwMCl8KDE8PDYpfCgxPDw3KTsKKwkJYWxpX3RpbWVvdXRfYml0cyA9ICh0IC8gMzAwKXwoMSA8PCA2KXwoMSA8PCA3KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMzgsNyArMTM4LDcgQEAKICAqLwogCiBzdGF0aWMgc3NpemVfdCBhbGlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAotCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQorCQkJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewogCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KIAlpZiAobGVuKSB7CkBAIC0zNDgsOSArMzQ4LDkgQEAKIAkvKiBUaW1lciBiaXRzICovCiAJd2RvZyAmPSB+MHgzRjsKIAkvKiBJc3N1ZWQgZXZlbnRzICovCi0Jd2RvZyAmPSB+KCgxPDwyNyl8KDE8PDI2KXwoMTw8MjUpfCgxPDwyNCkpOworCXdkb2cgJj0gfigoMSA8PCAyNyl8KDEgPDwgMjYpfCgxIDw8IDI1KXwoMSA8PCAyNCkpOwogCS8qIE5vIG1vbml0b3IgYml0cyAqLwotCXdkb2cgJj0gfigoMTw8MTYpfCgxPDwxMyl8KDE8PDEyKXwoMTw8MTEpfCgxPDwxMCl8KDE8PDkpKTsKKwl3ZG9nICY9IH4oKDEgPDwgMTYpfCgxIDw8IDEzKXwoMSA8PCAxMil8KDEgPDwgMTEpfCgxIDw8IDEwKXwoMSA8PCA5KSk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4Q0MsIHdkb2cpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYwppbmRleCBhMDQ1ZWY4Li45MGY5OGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKQEAgLTM1NSw3ICszNTUsOCBAQAogCWFsaW03MTAxX3BtdSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEsCiAJCU5VTEwpOwogCWlmICghYWxpbTcxMDFfcG11KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJBTGkgTTcxMDEgUE1VIG5vdCBwcmVzZW50IC0gV0RUIG5vdCBzZXRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIkFMaSBNNzEwMSBQTVUgbm90IHByZXNlbnQgLSBXRFQgbm90IHNldFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0zOTksNyArNDAwLDggQEAKIAogCXJjID0gbWlzY19yZWdpc3Rlcigmd2R0X21pc2NkZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJd2R0X21pc2NkZXYubWlub3IsIHJjKTsKIAkJZ290byBlcnJfb3V0X3JlYm9vdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYwppbmRleCBhNTZhYzg0Li40MzViMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogICogUGF0IHRoZSB3YXRjaGRvZyB3aGVuZXZlciBkZXZpY2UgaXMgd3JpdHRlbiB0by4KICAqLwogc3RhdGljIHNzaXplX3QgYXQ5MV93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sCi0gICAgICBsb2ZmX3QgKnBwb3MpCisJCQkJCQkJCWxvZmZfdCAqcHBvcykKIHsKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvY3B3ZC5jCmluZGV4IDA4NGRmZTkuLjQxMDcwZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvY3B3ZC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvY3B3ZC5jCkBAIC0xLDEzICsxLDEzIEBACiAvKiBjcHdkLmMgLSBkcml2ZXIgaW1wbGVtZW50YXRpb24gZm9yIGhhcmR3YXJlIHdhdGNoZG9nCiAgKiB0aW1lcnMgZm91bmQgb24gU3VuIE1pY3Jvc3lzdGVtcyBDUDE0MDAgYW5kIENQMTUwMCBib2FyZHMuCiAgKgotICogVGhpcyBkZXZpY2Ugc3VwcG9ydHMgYm90aCB0aGUgZ2VuZXJpYyBMaW51eCB3YXRjaGRvZyAKKyAqIFRoaXMgZGV2aWNlIHN1cHBvcnRzIGJvdGggdGhlIGdlbmVyaWMgTGludXggd2F0Y2hkb2cKICAqIGludGVyZmFjZSBhbmQgU29sYXJpcy1jb21wYXRpYmxlIGlvY3RscyBhcyBiZXN0IGl0IGlzCiAgKiBhYmxlLgogICoKICAqIE5PVEU6IAlDUDE0MDAgc3lzdGVtcyBhcHBlYXIgdG8gaGF2ZSBhIGRlZmVjdGl2ZSBpbnRyX21hc2sKICAqIAkJCXJlZ2lzdGVyIG9uIHRoZSBQTEQsIHByZXZlbnRpbmcgdGhlIGRpc2FibGluZyBvZgotICogCQkJdGltZXIgaW50ZXJydXB0cy4gIFdlIHVzZSBhIHRpbWVyIHRvIHBlcmlvZGljYWxseSAKKyAqIAkJCXRpbWVyIGludGVycnVwdHMuICBXZSB1c2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkKICAqIAkJCXJlc2V0ICdzdG9wcGVkJyB3YXRjaGRvZ3Mgb24gYWZmZWN0ZWQgcGxhdGZvcm1zLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMCBFcmljIEJyb3dlciAoZWJyb3dlckB1c2EubmV0KQpAQCAtMjgsMTAgKzI4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KICNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KIAogI2RlZmluZSBEUklWRVJfTkFNRQkiY3B3ZCIKQEAgLTQzLDggKzQyLDggQEAKICNkZWZpbmUgV0RfQkxJTUlUCTB4RkZGRgogCiAjZGVmaW5lIFdEMF9NSU5PUgkyMTIKLSNkZWZpbmUgV0QxX01JTk9SCTIxMwkKLSNkZWZpbmUgV0QyX01JTk9SCTIxNAkKKyNkZWZpbmUgV0QxX01JTk9SCTIxMworI2RlZmluZSBXRDJfTUlOT1IJMjE0CiAKIC8qIEludGVybmFsIGRyaXZlciBkZWZpbml0aW9ucy4gICovCiAjZGVmaW5lIFdEMF9JRAkJCTAKQEAgLTkxLDE2ICs5MCwxNiBAQAogCiBzdGF0aWMgc3RydWN0IGNwd2QgKmNwd2RfZGV2aWNlOwogCi0vKiBTdW4gdXNlcyBBbHRlcmEgUExEIEVQRjg4MjBBVEMxNDQtNCAKKy8qIFN1biB1c2VzIEFsdGVyYSBQTEQgRVBGODgyMEFUQzE0NC00CiAgKiBwcm92aWRpbmcgdGhyZWUgaGFyZHdhcmUgd2F0Y2hkb2dzOgogICoKLSAqIAkxKSBSSUMgLSBzZW5kcyBhbiBpbnRlcnJ1cHQgd2hlbiB0cmlnZ2VyZWQKLSAqIAkyKSBYSVIgLSBhc3NlcnRzIFhJUl9CX1JFU0VUIHdoZW4gdHJpZ2dlcmVkLCByZXNldHMgQ1BVCi0gKiAJMykgUE9SIC0gYXNzZXJ0cyBQT1JfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVSwgYmFja3BsYW5lLCBib2FyZAorICogMSkgUklDIC0gc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gdHJpZ2dlcmVkCisgKiAyKSBYSVIgLSBhc3NlcnRzIFhJUl9CX1JFU0VUIHdoZW4gdHJpZ2dlcmVkLCByZXNldHMgQ1BVCisgKiAzKSBQT1IgLSBhc3NlcnRzIFBPUl9CX1JFU0VUIHdoZW4gdHJpZ2dlcmVkLCByZXNldHMgQ1BVLCBiYWNrcGxhbmUsIGJvYXJkCiAgKgogICoqKiBUaW1lciByZWdpc3RlciBibG9jayBkZWZpbml0aW9uIChzdHJ1Y3Qgd2RfdGltZXJfcmVnYmxrKQogICoKLSAqIGRjbnRyIGFuZCBsaW1pdCByZWdpc3RlcnMgKGhhbGZ3b3JkIGFjY2Vzcyk6ICAgICAgCisgKiBkY250ciBhbmQgbGltaXQgcmVnaXN0ZXJzIChoYWxmd29yZCBhY2Nlc3MpOgogICogLS0tLS0tLS0tLS0tLS0tLS0tLQogICogfCAxNSB8IC4uLnwgMSB8IDAgfAogICogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA4LDcgKzEwNyw4IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBkY250ciAtIAlDdXJyZW50IDE2LWJpdCBkb3duY291bnRlciB2YWx1ZS4KICAqIAkJCVdoZW4gZG93bmNvdW50ZXIgcmVhY2hlcyAnMCcgd2F0Y2hkb2cgZXhwaXJlcy4KLSAqIAkJCVJlYWRpbmcgdGhpcyByZWdpc3RlciByZXNldHMgZG93bmNvdW50ZXIgd2l0aCAnbGltaXQnIHZhbHVlLgorICogCQkJUmVhZGluZyB0aGlzIHJlZ2lzdGVyIHJlc2V0cyBkb3duY291bnRlciB3aXRoCisgKiAJCQknbGltaXQnIHZhbHVlLgogICogbGltaXQgLSAJMTYtYml0IGNvdW50ZG93biB2YWx1ZSBpbiAxLzEwdGggc2Vjb25kIGluY3JlbWVudHMuCiAgKiAJCQlXcml0aW5nIHRoaXMgcmVnaXN0ZXIgYmVnaW5zIGNvdW50ZG93biB3aXRoIGlucHV0IHZhbHVlLgogICogCQkJUmVhZGluZyBmcm9tIHRoaXMgcmVnaXN0ZXIgZG9lcyBub3QgYWZmZWN0IGNvdW50ZXIuCkBAIC0xNTgsMTEgKzE1OCwxMSBAQAogc3RhdGljIGludCB3ZDFfdGltZW91dCA9IDA7CiBzdGF0aWMgaW50IHdkMl90aW1lb3V0ID0gMDsKIAotbW9kdWxlX3BhcmFtCSh3ZDBfdGltZW91dCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh3ZDBfdGltZW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mod2QwX3RpbWVvdXQsICJEZWZhdWx0IHdhdGNoZG9nMCB0aW1lb3V0IGluIDEvMTBzZWNzIik7Ci1tb2R1bGVfcGFyYW0gCSh3ZDFfdGltZW91dCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh3ZDFfdGltZW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mod2QxX3RpbWVvdXQsICJEZWZhdWx0IHdhdGNoZG9nMSB0aW1lb3V0IGluIDEvMTBzZWNzIik7Ci1tb2R1bGVfcGFyYW0gCSh3ZDJfdGltZW91dCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh3ZDJfdGltZW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mod2QyX3RpbWVvdXQsICJEZWZhdWx0IHdhdGNoZG9nMiB0aW1lb3V0IGluIDEvMTBzZWNzIik7CiAKIE1PRFVMRV9BVVRIT1IoIkVyaWMgQnJvd2VyIDxlYnJvd2VyQHVzYS5uZXQ+Iik7CkBAIC0yMDEsOSArMjAxLDkgQEAKIHN0YXRpYyB2b2lkIGNwd2RfdG9nZ2xlaW50cihzdHJ1Y3QgY3B3ZCAqcCwgaW50IGluZGV4LCBpbnQgZW5hYmxlKQogewogCXVuc2lnbmVkIGNoYXIgY3VycmVncyA9IGNwd2RfcmVhZGIocC0+cmVncyArIFBMRF9JTUFTSyk7Ci0JdW5zaWduZWQgY2hhciBzZXRyZWdzID0gCi0JCShpbmRleCA9PSAtMSkgPyAKLQkJKFdEMF9JTlRSX01BU0sgfCBXRDFfSU5UUl9NQVNLIHwgV0QyX0lOVFJfTUFTSykgOiAKKwl1bnNpZ25lZCBjaGFyIHNldHJlZ3MgPQorCQkoaW5kZXggPT0gLTEpID8KKwkJKFdEMF9JTlRSX01BU0sgfCBXRDFfSU5UUl9NQVNLIHwgV0QyX0lOVFJfTUFTSykgOgogCQkocC0+ZGV2c1tpbmRleF0uaW50cl9tYXNrKTsKIAogCWlmIChlbmFibGUgPT0gV0RfSU5UUl9PTikKQEAgLTMwMywyNCArMzAzLDI0IEBACiAJdW5zaWduZWQgY2hhciByZXQgID0gV0RfU1RPUFBFRDsKIAogCS8qIGRldGVybWluZSBTVE9QUEVEICovCi0JaWYgKCFzdGF0KSAKKwlpZiAoIXN0YXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBkZXRlcm1pbmUgRVhQSVJFRCB2cyBGUkVFUlVOIHZzIFJVTk5JTkcgKi8KIAllbHNlIGlmIChXRF9TX0VYUElSRUQgJiBzdGF0KSB7CiAJCXJldCA9IFdEX0VYUElSRUQ7Ci0JfSBlbHNlIGlmKFdEX1NfUlVOTklORyAmIHN0YXQpIHsKKwl9IGVsc2UgaWYgKFdEX1NfUlVOTklORyAmIHN0YXQpIHsKIAkJaWYgKGludHIgJiBwLT5kZXZzW2luZGV4XS5pbnRyX21hc2spIHsKIAkJCXJldCA9IFdEX0ZSRUVSVU47CiAJCX0gZWxzZSB7CiAJCQkvKiBGdWRnZSBXRF9FWFBJUkVEIHN0YXR1cyBmb3IgZGVmZWN0aXZlIENQMTQwMC0tCi0JCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nIAotCQkJICogCUFORCBicm9rZW5zdG9wIGlzIHNldCAKKwkJCSAqIElGIHRpbWVyIGlzIHJ1bm5pbmcKKwkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQKIAkJCSAqIAlBTkQgYW4gaW50ZXJydXB0IGhhcyBiZWVuIHNlcnZpY2VkCiAJCQkgKiB3ZSBhcmUgV0RfRVhQSVJFRC4KIAkJCSAqCi0JCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nIAotCQkJICogCUFORCBicm9rZW5zdG9wIGlzIHNldCAKKwkJCSAqIElGIHRpbWVyIGlzIHJ1bm5pbmcKKwkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQKIAkJCSAqIAlBTkQgbm8gaW50ZXJydXB0IGhhcyBiZWVuIHNlcnZpY2VkCiAJCQkgKiB3ZSBhcmUgV0RfRlJFRVJVTi4KIAkJCSAqLwpAQCAtMzI5LDcgKzMyOSw4IEBACiAJCQkJaWYgKHAtPmRldnNbaW5kZXhdLnJ1bnN0YXR1cyAmIFdEX1NUQVRfU1ZDRCkgewogCQkJCQlyZXQgPSBXRF9FWFBJUkVEOwogCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIHdlIGNvdWxkIGFzIHdlbGwgcHJldGVuZCB3ZSBhcmUgZXhwaXJlZCAqLworCQkJCQkvKiB3ZSBjb3VsZCBhcyB3ZWxsIHByZXRlbmQKKwkJCQkJICogd2UgYXJlIGV4cGlyZWQgKi8KIAkJCQkJcmV0ID0gV0RfRlJFRVJVTjsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtMzQyLDcgKzM0Myw3IEBACiAJaWYgKHAtPmRldnNbaW5kZXhdLnJ1bnN0YXR1cyAmIFdEX1NUQVRfU1ZDRCkKIAkJcmV0IHw9IFdEX1NFUlZJQ0VEOwogCi0JcmV0dXJuKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGNwd2RfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTM2NywyMiArMzY4LDIyIEBACiAJc3RydWN0IGNwd2QgKnAgPSBjcHdkX2RldmljZTsKIAogCWxvY2tfa2VybmVsKCk7Ci0Jc3dpdGNoKGltaW5vcihpbm9kZSkpIHsKLQkJY2FzZSBXRDBfTUlOT1I6Ci0JCWNhc2UgV0QxX01JTk9SOgotCQljYXNlIFdEMl9NSU5PUjoKLQkJCWJyZWFrOworCXN3aXRjaCAoaW1pbm9yKGlub2RlKSkgeworCWNhc2UgV0QwX01JTk9SOgorCWNhc2UgV0QxX01JTk9SOgorCWNhc2UgV0QyX01JTk9SOgorCQlicmVhazsKIAotCQlkZWZhdWx0OgotCQkJdW5sb2NrX2tlcm5lbCgpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJZGVmYXVsdDoKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBSZWdpc3RlciBJUlEgb24gZmlyc3Qgb3BlbiBvZiBkZXZpY2UgKi8KIAlpZiAoIXAtPmluaXRpYWxpemVkKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShwLT5pcnEsICZjcHdkX2ludGVycnVwdCwgCisJCWlmIChyZXF1ZXN0X2lycShwLT5pcnEsICZjcHdkX2ludGVycnVwdCwKIAkJCQlJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIHApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLCAKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBJUlEgJWRcbiIsCiAJCQkJcC0+aXJxKTsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC00MDAsOCArNDAxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjcHdkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCAKLQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBjcHdkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfU0VUVElNRU9VVCwKQEAgLTQwOSw2ICs0MDksNyBAQAogCQkuaWRlbnRpdHkJCT0gRFJJVkVSX05BTUUsCiAJfTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgaW5kZXggPSBpbWlub3IoaW5vZGUpIC0gV0QwX01JTk9SOwogCXN0cnVjdCBjcHdkICpwID0gY3B3ZF9kZXZpY2U7CiAJaW50IHNldG9wdCA9IDA7CkBAIC00NDIsNyArNDQzLDcgQEAKIAkJCWNwd2Rfc3RhcnR0aW1lcihwLCBpbmRleCk7CiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQkKKwkJfQogCQlicmVhazsKIAogCS8qIFNvbGFyaXMtY29tcGF0aWJsZSBJT0NUTHMgKi8KQEAgLTQ1OCw3ICs0NTksNyBAQAogCiAJY2FzZSBXSU9DU1RPUDoKIAkJaWYgKHAtPmVuYWJsZWQpCi0JCQlyZXR1cm4oLUVJTlZBTCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQljcHdkX3N0b3B0aW1lcihwLCBpbmRleCk7CiAJCWJyZWFrOwpAQCAtNDgxLDcgKzQ4Miw3IEBACiAJY2FzZSBXSU9DU1RPUDoKIAljYXNlIFdJT0NHU1RBVDoKIAkJbG9ja19rZXJuZWwoKTsKLQkJcnZhbCA9IGNwd2RfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCQlydmFsID0gY3B3ZF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKQEAgLTQ5Myw3ICs0OTQsNyBAQAogCXJldHVybiBydmFsOwogfQogCi1zdGF0aWMgc3NpemVfdCBjcHdkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCAKK3N0YXRpYyBzc2l6ZV90IGNwd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtNTA4LDIwICs1MDksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B3ZF9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKK3N0YXRpYyBzc2l6ZV90IGNwd2RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3B3ZF9mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5pb2N0bCA9CWNwd2RfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bCA9CWNwd2RfY29tcGF0X2lvY3RsLAotCS5vcGVuID0JCWNwd2Rfb3BlbiwKLQkud3JpdGUgPQljcHdkX3dyaXRlLAotCS5yZWFkID0JCWNwd2RfcmVhZCwKLQkucmVsZWFzZSA9CWNwd2RfcmVsZWFzZSwKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLnVubG9ja2VkX2lvY3RsID0JY3B3ZF9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0JCWNwd2RfY29tcGF0X2lvY3RsLAorCS5vcGVuID0JCQljcHdkX29wZW4sCisJLndyaXRlID0JCWNwd2Rfd3JpdGUsCisJLnJlYWQgPQkJCWNwd2RfcmVhZCwKKwkucmVsZWFzZSA9CQljcHdkX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjcHdkX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCmluZGV4IDJlMTM2MDIuLmM1MWQwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2RlZmluZSBNT0RVTEVfTkFNRSAiREFWSU5DSS1XRFQ6ICIKIApAQCAtNzUsOSArNzUsOSBAQAogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKIAkvKiBwdXQgd2F0Y2hkb2cgaW4gc2VydmljZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTAsIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVEwLCB3ZHRfYmFzZSArIFdEVENSKTsKIAkvKiBwdXQgd2F0Y2hkb2cgaW4gYWN0aXZlIHN0YXRlICovCi0JZGF2aW5jaV93cml0ZWwoV0RLRVlfU0VRMSwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTEsIHdkdF9iYXNlICsgV0RUQ1IpOwogCiAJc3Bpbl91bmxvY2soJmlvX2xvY2spOwogfQpAQCAtOTAsMjkgKzkwLDI5IEBACiAJc3Bpbl9sb2NrKCZpb19sb2NrKTsKIAogCS8qIGRpc2FibGUsIGludGVybmFsIGNsb2NrIHNvdXJjZSAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVENSKTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUQ1IpOwogCS8qIHJlc2V0IHRpbWVyLCBzZXQgbW9kZSB0byA2NC1iaXQgd2F0Y2hkb2csIGFuZCB1bnJlc2V0ICovCi0JZGF2aW5jaV93cml0ZWwoMCwgd2R0X2Jhc2UgKyBUR0NSKTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUR0NSKTsKIAl0Z2NyID0gVElNTU9ERV82NEJJVF9XRE9HIHwgVElNMTJSU19VTlJFU0VUIHwgVElNMzRSU19VTlJFU0VUOwotCWRhdmluY2lfd3JpdGVsKHRnY3IsIHdkdF9iYXNlICsgVEdDUik7CisJaW93cml0ZTMyKHRnY3IsIHdkdF9iYXNlICsgVEdDUik7CiAJLyogY2xlYXIgY291bnRlciByZWdzICovCi0JZGF2aW5jaV93cml0ZWwoMCwgd2R0X2Jhc2UgKyBUSU0xMik7Ci0JZGF2aW5jaV93cml0ZWwoMCwgd2R0X2Jhc2UgKyBUSU0zNCk7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVElNMTIpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRJTTM0KTsKIAkvKiBzZXQgdGltZW91dCBwZXJpb2QgKi8KIAl0aW1lcl9tYXJnaW4gPSAoKCh1NjQpaGVhcnRiZWF0ICogQ0xPQ0tfVElDS19SQVRFKSAmIDB4ZmZmZmZmZmYpOwotCWRhdmluY2lfd3JpdGVsKHRpbWVyX21hcmdpbiwgd2R0X2Jhc2UgKyBQUkQxMik7CisJaW93cml0ZTMyKHRpbWVyX21hcmdpbiwgd2R0X2Jhc2UgKyBQUkQxMik7CiAJdGltZXJfbWFyZ2luID0gKCgodTY0KWhlYXJ0YmVhdCAqIENMT0NLX1RJQ0tfUkFURSkgPj4gMzIpOwotCWRhdmluY2lfd3JpdGVsKHRpbWVyX21hcmdpbiwgd2R0X2Jhc2UgKyBQUkQzNCk7CisJaW93cml0ZTMyKHRpbWVyX21hcmdpbiwgd2R0X2Jhc2UgKyBQUkQzNCk7CiAJLyogZW5hYmxlIHJ1biBjb250aW51b3VzbHkgKi8KLQlkYXZpbmNpX3dyaXRlbChFTkFNT0RFMTJfUEVSSU9ESUMsIHdkdF9iYXNlICsgVENSKTsKKwlpb3dyaXRlMzIoRU5BTU9ERTEyX1BFUklPRElDLCB3ZHRfYmFzZSArIFRDUik7CiAJLyogT25jZSB0aGUgV0RUIGlzIGluIHByZS1hY3RpdmUgc3RhdGUgd3JpdGUgdG8KIAkgKiBUSU0xMiwgVElNMzQsIFBSRDEyLCBQUkQzNCwgVENSLCBUR0NSLCBXRFRDUiBhcmUKIAkgKiB3cml0ZSBwcm90ZWN0ZWQgKGV4Y2VwdCBmb3IgdGhlIFdES0VZIGZpZWxkKQogCSAqLwogCS8qIHB1dCB3YXRjaGRvZyBpbiBwcmUtYWN0aXZlIHN0YXRlICovCi0JZGF2aW5jaV93cml0ZWwoV0RLRVlfU0VRMCB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVEwIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CiAJLyogcHV0IHdhdGNoZG9nIGluIGFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTEgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMSB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOwogCiAJc3Bpbl91bmxvY2soJmlvX2xvY2spOwogfQpAQCAtMTk3LDE3ICsxOTcsMTYgQEAKIHsKIAlpbnQgcmV0ID0gMCwgc2l6ZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCiAJaWYgKGhlYXJ0YmVhdCA8IDEgfHwgaGVhcnRiZWF0ID4gTUFYX0hFQVJUQkVBVCkKIAkJaGVhcnRiZWF0ID0gREVGQVVMVF9IRUFSVEJFQVQ7CiAKLQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FCi0JCSJEYVZpbmNpIFdhdGNoZG9nIFRpbWVyOiBoZWFydGJlYXQgJWQgc2VjXG4iLCBoZWFydGJlYXQpOworCWRldl9pbmZvKGRldiwgImhlYXJ0YmVhdCAlZCBzZWNcbiIsIGhlYXJ0YmVhdCk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FCi0JCQkiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb24gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTIxNSwyMCArMjE0LDI2IEBACiAJd2R0X21lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKIAogCWlmICh3ZHRfbWVtID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRSAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0Jd2R0X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopKHJlcy0+c3RhcnQpOworCisJd2R0X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOworCWlmICghd2R0X2Jhc2UpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZkYXZpbmNpX3dkdF9taXNjZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgTU9EVUxFX05BTUUgImNhbm5vdCByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lzdGVyIG1pc2MgZGV2aWNlXG4iKTsKIAkJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKIAkJa2ZyZWUod2R0X21lbSk7CiAJfSBlbHNlIHsKIAkJc2V0X2JpdChXRFRfREVWSUNFX0lOSVRFRCwgJndkdF9zdGF0dXMpOwogCX0KIAorCWlvdW5tYXAod2R0X2Jhc2UpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwppbmRleCBhMTcxZmM2Li45YWRkMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCkBAIC04LDE5ICs4LDE5IEBACiAgKglCYXNlZCBvbiB3ZHQuYy4KICAqCU9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKICAqCi0gKiAgICAgIChjKSBDb3B5cmlnaHQgMTk5Ni0xOTk3IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAorICoJKGMpIENvcHlyaWdodCAxOTk2LTE5OTcgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgIE5laXRoZXIgQWxhbiBDb3ggbm9yIEN5bXJ1TmV0IEx0ZC4gYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlCi0gKiAgICAgIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAotICogICAgICAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKglOZWl0aGVyIEFsYW4gQ294IG5vciBDeW1ydU5ldCBMdGQuIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQorICoJd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkCisgKgkiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDE5OTUgICAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4qCisgKgkoYykgQ29weXJpZ2h0IDE5OTUgICAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4qCiAgKi8KIAogLyogQ2hhbmdlbG9nOgpAQCAtMzcsNyArMzcsNyBAQAogICoJYWRkIGV4cGVjdF9jbG9zZSBzdXBwb3J0CiAgKgogICogMjAwMi4wNS4zMCAtIEpvZWwgQmVja2VyIDxqb2VsLmJlY2tlckBvcmFjbGUuY29tPgotICogCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KKyAqCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KICAqLwogCiAvKgpAQCAtMTUxLDcgKzE1MSw3IEBACiAJaWYgKGlycSA9PSAwKQogCQlwcmludGsoS0VSTl9JTkZPICI6IGludGVycnVwdCBkaXNhYmxlZFxuIik7CiAKLQlldXJ3ZHRfd3JpdGVfcmVnKFdEVF9USU1FUl9DRkcsIGlycTw8NCk7CisJZXVyd2R0X3dyaXRlX3JlZyhXRFRfVElNRVJfQ0ZHLCBpcnEgPDwgNCk7CiAKIAlldXJ3ZHRfd3JpdGVfcmVnKFdEVF9VTklUX1NFTCwgV0RUX1VOSVRfU0VDUyk7CS8qIHdlIHVzZSBzZWNvbmRzICovCiAJZXVyd2R0X3NldF90aW1lb3V0KDApOwkvKiB0aGUgZGVmYXVsdCB0aW1lb3V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKaW5kZXggNjc5OWE2ZC4uOWFjZjAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwpAQCAtMzQsMTEgKzM0LDE1IEBACiAKIHN0YXRpYyBpbnQgdGltZW91dCA9IFdBVENIRE9HX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIldhdGNoZG9nIHRpbWVvdXQgaW4gc2Vjb25kcy4gMTw9IHRpbWVvdXQgPD0xMzEsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfVElNRU9VVCkgIi4iKTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwKKwkiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzLiAxPD0gdGltZW91dCA8PTEzMSwgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIuIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LAorCSJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdlb2Rld2R0X3BsYXRmb3JtX2RldmljZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdkdF9mbGFnczsKQEAgLTI2OSw3ICsyNzMsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSVl9OQU1FLCAtMSwgTlVMTCwgMCk7CisJZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwKKwkJCQkJCQkJLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIoZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlKSkgewogCQlyZXQgPSBQVFJfRVJSKGdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSk7CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCmluZGV4IDc2M2MxZWEuLjZjZjE1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNkZWZpbmUgUENJX0JJT1MzMl9QQVJBR1JBUEhfTEVOCTE2CiAjZGVmaW5lIFBDSV9ST01fQkFTRTEJCQkweDAwMEYwMDAwCiAjZGVmaW5lIFJPTV9TSVpFCQkJMHgxMDAwMAorI2RlZmluZSBIUFdEVF9WRVJTSU9OCQkJIjEuMDEiCiAKIHN0cnVjdCBiaW9zMzJfc2VydmljZV9kaXIgewogCXUzMiBzaWduYXR1cmU7CkBAIC0xMzAsMTcgKzEzMSwxNCBAQAogc3RhdGljIHN0cnVjdCBjbW5fcmVnaXN0ZXJzIGNtbl9yZWdzOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB3ZHRfZGV2aWNlc1tdID0gewotCXsKLQkgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfQ09NUEFRLAotCSAuZGV2aWNlID0gMHhCMjAzLAotCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKLQkgLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCi0JfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DT01QQVEsIDB4QjIwMykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMzA2KSB9LAogCXswfSwJCQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBocHdkdF9kZXZpY2VzKTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBhc21pbmxpbmVfY2FsbChzdHJ1Y3QgY21uX3JlZ2lzdGVycyAqcGk4NlJlZ3MsIHVuc2lnbmVkIGxvbmcgKnBSb21FbnRyeSk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIGFzbWlubGluZV9jYWxsKHN0cnVjdCBjbW5fcmVnaXN0ZXJzICpwaTg2UmVncywKKwkJCQkJCXVuc2lnbmVkIGxvbmcgKnBSb21FbnRyeSk7CiAKICNpZm5kZWYgQ09ORklHX1g4Nl82NAogLyogLS0zMiBCaXQgQmlvcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjA1LDcgKzYwMyw3IEBACiAvKgogICoJS2VybmVsIGludGVyZmFjZXMKICAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHB3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwd2R0X2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIAkud3JpdGUgPSBocHdkdF93cml0ZSwKQEAgLTcwNCwxMCArNzAyLDExIEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTwotCQkiaHAgV2F0Y2hkb2cgVGltZXIgRHJpdmVyOiAxLjAwIgorCQkiaHAgV2F0Y2hkb2cgVGltZXIgRHJpdmVyOiAlcyIKIAkJIiwgdGltZXIgbWFyZ2luOiAlZCBzZWNvbmRzIChub3dheW91dD0lZCkiCiAJCSIsIGFsbG93IGtlcm5lbCBkdW1wOiAlcyAoZGVmYXVsdCA9IDAvT0ZGKS5cbiIsCi0JCXNvZnRfbWFyZ2luLCBub3dheW91dCwgKGFsbG93X2tkdW1wID09IDApID8gIk9GRiIgOiAiT04iKTsKKwkJSFBXRFRfVkVSU0lPTiwgc29mdF9tYXJnaW4sIG5vd2F5b3V0LAorCQkoYWxsb3dfa2R1bXAgPT0gMCkgPyAiT0ZGIiA6ICJPTiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTc1Nyw2ICs3NTYsNyBAQAogTU9EVUxFX0FVVEhPUigiVG9tIE1pbmdhcmVsbGkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaHAgd2F0Y2hkb2cgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihIUFdEVF9WRVJTSU9OKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKIAogbW9kdWxlX3BhcmFtKHNvZnRfbWFyZ2luLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jIGIvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCmluZGV4IDc0Zjk1MWMuLjJkYmU4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqCiAgKglUaGUgdGltZXIgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBJL08gY29udHJvbGxlciBodWJzOgogICoJKFNlZSB0aGUgaW50ZWwgZG9jdW1lbnRhdGlvbiBvbiBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS4pCi0gKgk2MzAwRVNCIGNoaXAgOiBkb2N1bWVudCBudW1iZXIgMzAwNjQxLTAwMworICoJNjMwMEVTQiBjaGlwIDogZG9jdW1lbnQgbnVtYmVyIDMwMDY0MS0wMDQKICAqCiAgKiAgMjAwNFlZWlogUm9zcyBCaXJvCiAgKglJbml0aWFsIHZlcnNpb24gMC4wMQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBFU0JfVkVSU0lPTiAiMC4wMyIKKyNkZWZpbmUgRVNCX1ZFUlNJT04gIjAuMDQiCiAjZGVmaW5lIEVTQl9NT0RVTEVfTkFNRSAiaTYzMDBFU0IgdGltZXIiCiAjZGVmaW5lIEVTQl9EUklWRVJfTkFNRSBFU0JfTU9EVUxFX05BTUUgIiwgdiIgRVNCX1ZFUlNJT04KICNkZWZpbmUgUEZYIEVTQl9NT0RVTEVfTkFNRSAiOiAiCkBAIC04MSw2ICs4MSw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmVzYl9wY2k7CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgdHJpZ2dlcmVkOyAvKiBUaGUgc3RhdHVzIG9mIHRoZSB3YXRjaGRvZyB1cG9uIGJvb3QgKi8KIHN0YXRpYyBjaGFyIGVzYl9leHBlY3RfY2xvc2U7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZXNiX3BsYXRmb3JtX2RldmljZTsKIAogLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KIC8qIDMwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAoMSA8IGhlYXJ0YmVhdCA8IDIqMTAyMykgKi8KQEAgLTExNCwxMyArMTE1LDE4IEBACiAJd3JpdGViKEVTQl9VTkxPQ0syLCBFU0JfUkVMT0FEX1JFRyk7CiB9CiAKLXN0YXRpYyB2b2lkIGVzYl90aW1lcl9zdGFydCh2b2lkKQorc3RhdGljIGludCBlc2JfdGltZXJfc3RhcnQodm9pZCkKIHsKIAl1OCB2YWw7CiAKKwlzcGluX2xvY2soJmVzYl9sb2NrKTsKKwllc2JfdW5sb2NrX3JlZ2lzdGVycygpOworCXdyaXRldyhFU0JfV0RUX1JFTE9BRCwgRVNCX1JFTE9BRF9SRUcpOwogCS8qIEVuYWJsZSBvciBFbmFibGUgKyBMb2NrPyAqLwogCXZhbCA9IDB4MDIgfCAobm93YXlvdXQgPyAweDAxIDogMHgwMCk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGVzYl9wY2ksIEVTQl9MT0NLX1JFRywgdmFsKTsKKwlzcGluX3VubG9jaygmZXNiX2xvY2spOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGVzYl90aW1lcl9zdG9wKHZvaWQpCkBAIC0yMDcsNyArMjEzLDYgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIFJlbG9hZCBhbmQgYWN0aXZhdGUgdGltZXIgKi8KLQllc2JfdGltZXJfa2VlcGFsaXZlKCk7CiAJZXNiX3RpbWVyX3N0YXJ0KCk7CiAKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CkBAIC0yNDAsNyArMjQ1LDggQEAKIAkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLwogCQkJZXNiX2V4cGVjdF9jbG9zZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTI5Miw3ICsyOTgsNiBAQAogCQl9CiAKIAkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgewotCQkJZXNiX3RpbWVyX2tlZXBhbGl2ZSgpOwogCQkJZXNiX3RpbWVyX3N0YXJ0KCk7CiAJCQlyZXR2YWwgPSAwOwogCQl9CkBAIC0zMTksMTkgKzMyNCw2IEBACiB9CiAKIC8qCi0gKiAgICAgIE5vdGlmeSBzeXN0ZW0KLSAqLwotCi1zdGF0aWMgaW50IGVzYl9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKLQkJCQkJdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCi17Ci0JaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKLQkJZXNiX3RpbWVyX3N0b3AoKTsJLyogVHVybiB0aGUgV0RUIG9mZiAqLwotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi0vKgogICogICAgICBLZXJuZWwgSW50ZXJmYWNlcwogICovCiAKQEAgLTM1MCwxMCArMzQyLDYgQEAKIAkuZm9wcyA9ICZlc2JfZm9wcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXNiX25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gZXNiX25vdGlmeV9zeXMsCi19OwotCiAvKgogICogRGF0YSBmb3IgUENJIGRyaXZlciBpbnRlcmZhY2UKICAqCkBAIC0zNzIsNyArMzYwLDcgQEAKICAqICAgICAgSW5pdCAmIGV4aXQgcm91dGluZXMKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBfX2luaXQgZXNiX2dldGRldmljZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgX19kZXZpbml0IGVzYl9nZXRkZXZpY2Uodm9pZCkKIHsKIAl1OCB2YWwxOwogCXVuc2lnbmVkIHNob3J0IHZhbDI7CkBAIC00NDMsNyArNDMxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgd2F0Y2hkb2dfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgZXNiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwogCkBAIC00NTksMTkgKzQ0NywxMyBAQAogCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDE8aGVhcnRiZWF0PDIwNDYsIHVzaW5nICVkXG4iLAogCQkJCQkJCQloZWFydGJlYXQpOwogCX0KLQlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVzYl9ub3RpZmllcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLCByZXQpOwotCQlnb3RvIGVycl91bm1hcDsKLQl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZlc2JfbWlzY2Rldik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCQkJCQlXQVRDSERPR19NSU5PUiwgcmV0KTsKLQkJZ290byBlcnJfbm90aWZpZXI7CisJCWdvdG8gZXJyX3VubWFwOwogCX0KIAllc2JfdGltZXJfc3RvcCgpOwogCXByaW50ayhLRVJOX0lORk8gUEZYCkBAIC00NzksOCArNDYxLDYgQEAKIAkJCQkJCUJBU0VBRERSLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKIAlyZXR1cm4gMDsKIAotZXJyX25vdGlmaWVyOgotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwogZXJyX3VubWFwOgogCWlvdW5tYXAoQkFTRUFERFIpOwogLyogZXJyX3JlbGVhc2U6ICovCkBAIC00OTIsNyArNDcyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgd2F0Y2hkb2dfY2xlYW51cCh2b2lkKQorc3RhdGljIGludCBfX2RldmV4aXQgZXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLyogU3RvcCB0aGUgdGltZXIgYmVmb3JlIHdlIGxlYXZlICovCiAJaWYgKCFub3dheW91dCkKQEAgLTUwMCwxMSArNDgwLDU4IEBACiAKIAkvKiBEZXJlZ2lzdGVyICovCiAJbWlzY19kZXJlZ2lzdGVyKCZlc2JfbWlzY2Rldik7Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVzYl9ub3RpZmllcik7CiAJaW91bm1hcChCQVNFQUREUik7CiAJcGNpX3JlbGVhc2VfcmVnaW9uKGVzYl9wY2ksIDApOwogCXBjaV9kaXNhYmxlX2RldmljZShlc2JfcGNpKTsKIAlwY2lfZGV2X3B1dChlc2JfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXNiX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwllc2JfdGltZXJfc3RvcCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlc2JfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSAgICAgICAgICA9IGVzYl9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChlc2JfcmVtb3ZlKSwKKwkuc2h1dGRvd24gICAgICAgPSBlc2Jfc2h1dGRvd24sCisJLmRyaXZlciAgICAgICAgID0geworCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJCS5uYW1lICAgPSBFU0JfTU9EVUxFX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkludGVsIDYzMDBFU0IgV2F0Y2hEb2cgVGltZXIgRHJpdmVyIHYlc1xuIiwKKwkJRVNCX1ZFUlNJT04pOworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc2JfcGxhdGZvcm1fZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXNiX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRVNCX01PRFVMRV9OQU1FLAorCQkJCQkJCQktMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihlc2JfcGxhdGZvcm1fZGV2aWNlKSkgeworCQllcnIgPSBQVFJfRVJSKGVzYl9wbGF0Zm9ybV9kZXZpY2UpOworCQlnb3RvIHVucmVnX3BsYXRmb3JtX2RyaXZlcjsKKwl9CisKKwlyZXR1cm4gMDsKKwordW5yZWdfcGxhdGZvcm1fZHJpdmVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlc2JfcGxhdGZvcm1fZHJpdmVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2F0Y2hkb2dfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGVzYl9wbGF0Zm9ybV9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlc2JfcGxhdGZvcm1fZHJpdmVyKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2F0Y2hkb2cgTW9kdWxlIFVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KHdhdGNoZG9nX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYwppbmRleCBkODI2NGFkLi5kM2MwZjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYwpAQCAtNDcsNyArNDcsOCBAQAogCiBzdGF0aWMgaW50IHZlbmRvcnN1cHBvcnQ7CiBtb2R1bGVfcGFyYW0odmVuZG9yc3VwcG9ydCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModmVuZG9yc3VwcG9ydCwgImlUQ08gdmVuZG9yIHNwZWNpZmljIHN1cHBvcnQgbW9kZSwgZGVmYXVsdD0wIChub25lKSwgMT1TdXBlck1pY3JvIFBlbnQzLCAyPVN1cGVyTWljcm8gUGVudDQrIik7CitNT0RVTEVfUEFSTV9ERVNDKHZlbmRvcnN1cHBvcnQsICJpVENPIHZlbmRvciBzcGVjaWZpYyBzdXBwb3J0IG1vZGUsIGRlZmF1bHQ9IgorCQkJIjAgKG5vbmUpLCAxPVN1cGVyTWljcm8gUGVudDMsIDI9U3VwZXJNaWNybyBQZW50NCsiKTsKIAogLyoKICAqCVZlbmRvciBTcGVjaWZpYyBTdXBwb3J0CkBAIC0zMDUsNyArMzA2LDggQEAKIG1vZHVsZV9pbml0KGlUQ09fdmVuZG9yX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGlUQ09fdmVuZG9yX2V4aXRfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4sIFIuIFNlcmV0bnkgPGxrcGF0Y2hlc0BwYXlwYy5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiwgIgorCQkiUi4gU2VyZXRueSA8bGtwYXRjaGVzQHBheXBjLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgVENPIFZlbmRvciBTcGVjaWZpYyBXYXRjaERvZyBUaW1lciBEcml2ZXIgU3VwcG9ydCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCmluZGV4IDM1MjMzNDkuLjY0ODI1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKQEAgLTI3Myw3ICsyNzMsOSBAQAogI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMzAJLyogMzAgc2VjIGRlZmF1bHQgaGVhcnRiZWF0ICovCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsgIC8qIGluIHNlY29uZHMgKi8KIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMjxoZWFydGJlYXQ8MzkgKFRDTyB2MSkgb3IgNjEzIChUQ08gdjIpLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDI8aGVhcnRiZWF0PDM5IChUQ08gdjEpIG9yIDYxMyAoVENPIHYyKSwgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwpAQCAtMzQ2LDcgKzM0OCw4IEBACiAJLyogZGlzYWJsZSBjaGlwc2V0J3MgTk9fUkVCT09UIGJpdCAqLwogCWlmIChpVENPX3dkdF91bnNldF9OT19SRUJPT1RfYml0KCkpIHsKIAkJc3Bpbl91bmxvY2soJmlUQ09fd2R0X3ByaXZhdGUuaW9fbG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTY2OSw3ICs2NzIsOCBAQAogCiAJLyogQ2hlY2sgY2hpcHNldCdzIE5PX1JFQk9PVCBiaXQgKi8KIAlpZiAoaVRDT193ZHRfdW5zZXRfTk9fUkVCT09UX2JpdCgpICYmIGlUQ09fdmVuZG9yX2NoZWNrX25vcmVib290X29uKCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCByZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsICIKKwkJCQkJInJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CiAJCXJldCA9IC1FTk9ERVY7CS8qIENhbm5vdCByZXNldCBOT19SRUJPT1QgYml0ICovCiAJCWdvdG8gb3V0OwogCX0KQEAgLTcxNiw4ICs3MjAsOSBAQAogCSAgIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmIChpVENPX3dkdF9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCkpIHsKIAkJaVRDT193ZHRfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19IRUFSVEJFQVQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMiA8IGhlYXJ0YmVhdCA8IDM5IChUQ08gdjEpIG9yIDYxMyAoVENPIHYyKSwgdXNpbmcgJWRcbiIsCi0JCQkJCQkJaGVhcnRiZWF0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAyIDwgaGVhcnRiZWF0IDwgMzkgKFRDTyB2MSkgIgorCQkJCSJvciA2MTMgKFRDTyB2MiksIHVzaW5nICVkXG4iLCBoZWFydGJlYXQpOwogCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmlUQ09fd2R0X21pc2NkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCmluZGV4IGFmYjhhZjMuLmNjMTMzYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKQEAgLTE4OCw4ICsxODgsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19vdXRiKGludCB2YWwsIGludCByZWcpCiB7Ci0gICAgICAgb3V0YihyZWcsIFJFRyk7Ci0gICAgICAgb3V0Yih2YWwsIFZBTCk7CisJb3V0YihyZWcsIFJFRyk7CisJb3V0Yih2YWwsIFZBTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN1cGVyaW9faW53KGludCByZWcpCkBAIC0yMDQsMTAgKzIwNCwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19vdXR3KGludCB2YWwsIGludCByZWcpCiB7Ci0gICAgICAgb3V0YihyZWcrKywgUkVHKTsKLSAgICAgICBvdXRiKHZhbCA+PiA4LCBWQUwpOwotICAgICAgIG91dGIocmVnLCBSRUcpOwotICAgICAgIG91dGIodmFsLCBWQUwpOworCW91dGIocmVnKyssIFJFRyk7CisJb3V0Yih2YWwgPj4gOCwgVkFMKTsKKwlvdXRiKHJlZywgUkVHKTsKKwlvdXRiKHZhbCwgVkFMKTsKIH0KIAogLyogd2F0Y2hkb2cgdGltZXIgaGFuZGxpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYwppbmRleCBkYjkxODkyLi40NjVmZTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCkBAIC05LDggKzksOCBAQAogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAKIAotI2RlZmluZSBHUFRfTU9ERV9XRFQJCSgxPDwxNSkKLSNkZWZpbmUgR1BUX01PREVfQ0UJCSgxPDwxMikKKyNkZWZpbmUgR1BUX01PREVfV0RUCQkoMSA8PCAxNSkKKyNkZWZpbmUgR1BUX01PREVfQ0UJCSgxIDw8IDEyKQogI2RlZmluZSBHUFRfTU9ERV9NU19USU1FUgkoMHg0KQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggMTEzMGFkNi4uMTUxMmFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTUsNyArNSw3IEBACiAgKgogICoJQmFzZWQgb24gdGhlIFNvZnREb2cgZHJpdmVyOgogICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAotICogCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKaW5kZXggM2FjY2U2Mi4uNTM5YjZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCkBAIC01LDcgKzUsNyBAQAogICoJCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy40Zy1zeXN0ZW1zLmJpegogICoKLSAqIAkoQykgQ29weXJpZ2h0IDIwMDcgT3BlbldydC5vcmcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CisgKgkoQykgQ29weXJpZ2h0IDIwMDcgT3BlbldydC5vcmcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKgogICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKaW5kZXggMmYyY2U3NC4uYWE1YWQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwpAQCAtNjAsOSArNjAsOCBAQAogCXZvaWQgX19pb21lbSAgICAqYmFzZTsgICAgICAgICAgLyogcGh5c2ljYWwgKi8KIAlzdHJ1Y3QgZGV2aWNlICAgKmRldjsKIAlpbnQgICAgICAgICAgICAgb21hcF93ZHRfdXNlcnM7Ci0Jc3RydWN0IGNsayAgICAgICphcm13ZHRfY2s7Ci0Jc3RydWN0IGNsayAgICAgICptcHVfd2R0X2ljazsKLQlzdHJ1Y3QgY2xrICAgICAgKm1wdV93ZHRfZmNrOworCXN0cnVjdCBjbGsgICAgICAqaWNrOworCXN0cnVjdCBjbGsgICAgICAqZmNrOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwogCXN0cnVjdCBtaXNjZGV2aWNlIG9tYXBfd2R0X21pc2NkZXY7CiB9OwpAQCAtMTQ2LDEzICsxNDUsOCBAQAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDEsICh1bnNpZ25lZCBsb25nICopJih3ZGV2LT5vbWFwX3dkdF91c2VycykpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQljbGtfZW5hYmxlKHdkZXYtPmFybXdkdF9jayk7CS8qIEVuYWJsZSB0aGUgY2xvY2sgKi8KLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewotCQljbGtfZW5hYmxlKHdkZXYtPm1wdV93ZHRfaWNrKTsgICAgLyogRW5hYmxlIHRoZSBpbnRlcmZhY2UgY2xvY2sgKi8KLQkJY2xrX2VuYWJsZSh3ZGV2LT5tcHVfd2R0X2Zjayk7ICAgIC8qIEVuYWJsZSB0aGUgZnVuY3Rpb25hbCBjbG9jayAqLwotCX0KKwljbGtfZW5hYmxlKHdkZXYtPmljayk7ICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJmYWNlIGNsb2NrICovCisJY2xrX2VuYWJsZSh3ZGV2LT5mY2spOyAgICAvKiBFbmFibGUgdGhlIGZ1bmN0aW9uYWwgY2xvY2sgKi8KIAogCS8qIGluaXRpYWxpemUgcHJlc2NhbGVyICovCiAJd2hpbGUgKF9fcmF3X3JlYWRsKGJhc2UgKyBPTUFQX1dBVENIRE9HX1dQUykgJiAweDAxKQpAQCAtMTgxLDEzICsxNzUsOCBAQAogCiAJb21hcF93ZHRfZGlzYWJsZSh3ZGV2KTsKIAotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJY2xrX2Rpc2FibGUod2Rldi0+YXJtd2R0X2NrKTsJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewotCQljbGtfZGlzYWJsZSh3ZGV2LT5tcHVfd2R0X2ljayk7CS8qIERpc2FibGUgdGhlIGNsb2NrICovCi0JCWNsa19kaXNhYmxlKHdkZXYtPm1wdV93ZHRfZmNrKTsJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KLQl9CisJY2xrX2Rpc2FibGUod2Rldi0+aWNrKTsKKwljbGtfZGlzYWJsZSh3ZGV2LT5mY2spOwogI2Vsc2UKIAlwcmludGsoS0VSTl9DUklUICJvbWFwX3dkdDogVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIVxuIik7CiAjZW5kaWYKQEAgLTMwMyw0NCArMjkyLDE5IEBACiAJd2Rldi0+b21hcF93ZHRfdXNlcnMgPSAwOwogCXdkZXYtPm1lbSA9IG1lbTsKIAotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQl3ZGV2LT5hcm13ZHRfY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhcm13ZHRfY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5hcm13ZHRfY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHdkZXYtPmFybXdkdF9jayk7Ci0JCQl3ZGV2LT5hcm13ZHRfY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9CisJd2Rldi0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CisJaWYgKElTX0VSUih3ZGV2LT5pY2spKSB7CisJCXJldCA9IFBUUl9FUlIod2Rldi0+aWNrKTsKKwkJd2Rldi0+aWNrID0gTlVMTDsKKwkJZ290byBlcnJfY2xrOworCX0KKwl3ZGV2LT5mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKHdkZXYtPmZjaykpIHsKKwkJcmV0ID0gUFRSX0VSUih3ZGV2LT5mY2spOworCQl3ZGV2LT5mY2sgPSBOVUxMOworCQlnb3RvIGVycl9jbGs7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXdkZXYtPm1wdV93ZHRfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibXB1X3dkdF9pY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ljaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9pY2spOwotCQkJd2Rldi0+bXB1X3dkdF9pY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JCXdkZXYtPm1wdV93ZHRfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibXB1X3dkdF9mY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ZjaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9mY2spOwotCQkJd2Rldi0+bXB1X3dkdF9mY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JfQotCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXdkZXYtPm1wdV93ZHRfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2R0Ml9pY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ljaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9pY2spOwotCQkJd2Rldi0+bXB1X3dkdF9pY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JCXdkZXYtPm1wdV93ZHRfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2R0Ml9mY2siKTsKLQkJaWYgKElTX0VSUih3ZGV2LT5tcHVfd2R0X2ZjaykpIHsKLQkJCXJldCA9IFBUUl9FUlIod2Rldi0+bXB1X3dkdF9mY2spOwotCQkJd2Rldi0+bXB1X3dkdF9mY2sgPSBOVUxMOwotCQkJZ290byBlcnJfY2xrOwotCQl9Ci0JfQogCXdkZXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghd2Rldi0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzgwLDEyICszNDQsMTAgQEAKIAl3ZGV2LT5iYXNlID0gTlVMTDsKIAogZXJyX2NsazoKLQlpZiAod2Rldi0+YXJtd2R0X2NrKQotCQljbGtfcHV0KHdkZXYtPmFybXdkdF9jayk7Ci0JaWYgKHdkZXYtPm1wdV93ZHRfaWNrKQotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfaWNrKTsKLQlpZiAod2Rldi0+bXB1X3dkdF9mY2spCi0JCWNsa19wdXQod2Rldi0+bXB1X3dkdF9mY2spOworCWlmICh3ZGV2LT5pY2spCisJCWNsa19wdXQod2Rldi0+aWNrKTsKKwlpZiAod2Rldi0+ZmNrKQorCQljbGtfcHV0KHdkZXYtPmZjayk7CiAJa2ZyZWUod2Rldik7CiAKIGVycl9remFsbG9jOgpAQCAtNDE3LDIwICszNzksOCBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWlmICh3ZGV2LT5hcm13ZHRfY2spIHsKLQkJY2xrX3B1dCh3ZGV2LT5hcm13ZHRfY2spOwotCQl3ZGV2LT5hcm13ZHRfY2sgPSBOVUxMOwotCX0KLQotCWlmICh3ZGV2LT5tcHVfd2R0X2ljaykgewotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfaWNrKTsKLQkJd2Rldi0+bXB1X3dkdF9pY2sgPSBOVUxMOwotCX0KLQotCWlmICh3ZGV2LT5tcHVfd2R0X2ZjaykgewotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfZmNrKTsKLQkJd2Rldi0+bXB1X3dkdF9mY2sgPSBOVUxMOwotCX0KKwljbGtfcHV0KHdkZXYtPmljayk7CisJY2xrX3B1dCh3ZGV2LT5mY2spOwogCWlvdW5tYXAod2Rldi0+YmFzZSk7CiAKIAlrZnJlZSh3ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYwppbmRleCBiNjRhZTFhLi5lODE0NDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCkBAIC0xNiwxMSArMTYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb241eF93ZHQuaD4KIAogLyoKICAqIFdhdGNoZG9nIHRpbWVyIGJsb2NrIHJlZ2lzdGVycy4KQEAgLTI5LDEzICszMSwxNCBAQAogI2RlZmluZSAgV0RUX0VOCQkJMHgwMDEwCiAjZGVmaW5lIFdEVF9WQUwJCQkoVElNRVJfVklSVF9CQVNFICsgMHgwMDI0KQogCi0jZGVmaW5lIE9SSU9ONVhfVENMSwkJMTY2NjY2NjY3Ci0jZGVmaW5lIFdEVF9NQVhfRFVSQVRJT04JKDB4ZmZmZmZmZmYgLyBPUklPTjVYX1RDTEspCisjZGVmaW5lIFdEVF9NQVhfQ1lDTEVfQ09VTlQJMHhmZmZmZmZmZgogI2RlZmluZSBXRFRfSU5fVVNFCQkwCiAjZGVmaW5lIFdEVF9PS19UT19DTE9TRQkJMQogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Ci1zdGF0aWMgaW50IGhlYXJ0YmVhdCA9ICBXRFRfTUFYX0RVUkFUSU9OOwkvKiAoc2Vjb25kcykgKi8KK3N0YXRpYyBpbnQgaGVhcnRiZWF0ID0gLTE7CQkvKiBtb2R1bGUgcGFyYW1ldGVyIChzZWNvbmRzKSAqLworc3RhdGljIHVuc2lnbmVkIGludCB3ZHRfbWF4X2R1cmF0aW9uOwkvKiAoc2Vjb25kcykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2R0X3RjbGs7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfc3RhdHVzOwogc3RhdGljIHNwaW5sb2NrX3Qgd2R0X2xvY2s7CiAKQEAgLTQ2LDcgKzQ5LDcgQEAKIAlzcGluX2xvY2soJndkdF9sb2NrKTsKIAogCS8qIFNldCB3YXRjaGRvZyBkdXJhdGlvbiAqLwotCXdyaXRlbChPUklPTjVYX1RDTEsgKiBoZWFydGJlYXQsIFdEVF9WQUwpOworCXdyaXRlbCh3ZHRfdGNsayAqIGhlYXJ0YmVhdCwgV0RUX1ZBTCk7CiAKIAkvKiBDbGVhciB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgKi8KIAlyZWcgPSByZWFkbChCUklER0VfQ0FVU0UpOwpAQCAtODgsNyArOTEsNyBAQAogc3RhdGljIGludCBvcmlvbjV4X3dkdF9nZXRfdGltZWxlZnQoaW50ICp0aW1lX2xlZnQpCiB7CiAJc3Bpbl9sb2NrKCZ3ZHRfbG9jayk7Ci0JKnRpbWVfbGVmdCA9IHJlYWRsKFdEVF9WQUwpIC8gT1JJT041WF9UQ0xLOworCSp0aW1lX2xlZnQgPSByZWFkbChXRFRfVkFMKSAvIHdkdF90Y2xrOwogCXNwaW5fdW5sb2NrKCZ3ZHRfbG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgsNyArMTYxLDcgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWlmICh0aW1lIDw9IDAgfHwgdGltZSA+IFdEVF9NQVhfRFVSQVRJT04pIHsKKwkJaWYgKHRpbWUgPD0gMCB8fCB0aW1lID4gd2R0X21heF9kdXJhdGlvbikgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMTAsMjMgKzIxMyw2OSBAQAogCS5mb3BzCQk9ICZvcmlvbjV4X3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgb3Jpb241eF93ZHRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgb3Jpb241eF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb3Jpb241eF93ZHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKHBkYXRhKSB7CisJCXdkdF90Y2xrID0gcGRhdGEtPnRjbGs7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJPcmlvbjV4IFdhdGNoZG9nIG1pc3NlcyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50KQorCQlyZXR1cm4gLUVCVVNZOworCW9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXdkdF9tYXhfZHVyYXRpb24gPSBXRFRfTUFYX0NZQ0xFX0NPVU5UIC8gd2R0X3RjbGs7CisJaWYgKGhlYXJ0YmVhdCA8PSAwIHx8IGhlYXJ0YmVhdCA+IHdkdF9tYXhfZHVyYXRpb24pCisJCWhlYXJ0YmVhdCA9IHdkdF9tYXhfZHVyYXRpb247CisKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiT3Jpb241eCBXYXRjaGRvZyBUaW1lcjogSW5pdGlhbCB0aW1lb3V0ICVkIHNlYyVzXG4iLAorCQkJCWhlYXJ0YmVhdCwgbm93YXlvdXQgPyAiLCBub3dheW91dCIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9yaW9uNXhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaW5pdCgmd2R0X2xvY2spOworCWlmICh0ZXN0X2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cykpIHsKKwkJd2R0X2Rpc2FibGUoKTsKKwkJY2xlYXJfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKTsKKwl9CiAKLQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKLQlpZiAocmV0ID09IDApCi0JCXByaW50aygiT3Jpb241eCBXYXRjaGRvZyBUaW1lcjogaGVhcnRiZWF0ICVkIHNlY1xuIiwKLQkJCQkJCQkJaGVhcnRiZWF0KTsKKwlyZXQgPSBtaXNjX2RlcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCWlmICghcmV0KQorCQlvcmlvbjV4X3dkdF9taXNjZGV2LnBhcmVudCA9IE5VTEw7CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvcmlvbjV4X3dkdF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9yaW9uNXhfd2R0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpb241eF93ZHRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIm9yaW9uNXhfd2R0IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb3Jpb241eF93ZHRfaW5pdCh2b2lkKQoreworCXNwaW5fbG9ja19pbml0KCZ3ZHRfbG9jayk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb3Jpb241eF93ZHRfZHJpdmVyKTsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IG9yaW9uNXhfd2R0X2V4aXQodm9pZCkKIHsKLQltaXNjX2RlcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvcmlvbjV4X3dkdF9pbml0KTsKQEAgLTIzNiw4ICsyODUsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPcmlvbjV4IFByb2Nlc3NvciBXYXRjaGRvZyIpOwogCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcyAoZGVmYXVsdCBpcyAiCi0JCQkJCV9fTU9EVUxFX1NUUklORyhXRFRfTUFYX0RVUkFUSU9OKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcyIpOwogCiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKaW5kZXggNDg0YzIxNS4uMWEyYjkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYwpAQCAtNTM2LDcgKzUzNiw4IEBACiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwYzg3NDEzX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CiAJCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwYzg3NDEzX25vdGlmaWVyKTsKIAkJcmV0dXJuIHJldDsKQEAgLTU3NCw3ICs1NzUsOCBAQAogbW9kdWxlX2luaXQocGM4NzQxM19pbml0KTsKIG1vZHVsZV9leGl0KHBjODc0MTNfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIlN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4sIE1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwiKTsKK01PRFVMRV9BVVRIT1IoIlN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4sICIKKwkJIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUEM4NzQxMyBXRFQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKaW5kZXggOWUxMzMxYS4uYWE5NTEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKQEAgLTI0LDI1ICsyNCwyNSBAQAogICoJCXZlcnNpb24gcmVwb3J0aW5nLiAgQWRkZWQgcmVhZCByb3V0aW5lIGZvciB0ZW1wZXJhdHVyZS4KICAqCQlSZW1vdmVkIHNvbWUgZXh0cmEgZGVmaW5lcywgYWRkZWQgYW4gYXV0b2RldGVjdCBSZXZpc2lvbgogICoJCXJvdXRpbmUuCi0gKiA5NjEwMDYgICAgICAgUmV2aXNlZCBzb21lIGRvY3VtZW50YXRpb24sIGZpeGVkIHNvbWUgY29zbWV0aWMgYnVncy4gIE1hZGUKLSAqICAgICAgICAgICAgICBkcml2ZXJzIHRvIHBhbmljIHRoZSBzeXN0ZW0gaWYgaXQncyBvdmVyaGVhdGluZyBhdCBib290dXAuCisgKiA5NjEwMDYJUmV2aXNlZCBzb21lIGRvY3VtZW50YXRpb24sIGZpeGVkIHNvbWUgY29zbWV0aWMgYnVncy4gIE1hZGUKKyAqCQlkcml2ZXJzIHRvIHBhbmljIHRoZSBzeXN0ZW0gaWYgaXQncyBvdmVyaGVhdGluZyBhdCBib290dXAuCiAgKiA5NjExMTgJQ2hhbmdlZCBzb21lIHZlcmJpYWdlIG9uIHNvbWUgb2YgdGhlIG91dHB1dCwgdGlkaWVkIHVwCiAgKgkJY29kZSBiaXRzLCBhbmQgYWRkZWQgY29tcGF0aWJpbGl0eSB0byAyLjEueC4KLSAqIDk3MDkxMiAgICAgICBFbmFibGVkIGJvYXJkIG9uIG9wZW4gYW5kIGRpc2FibGUgb24gY2xvc2UuCisgKiA5NzA5MTIJRW5hYmxlZCBib2FyZCBvbiBvcGVuIGFuZCBkaXNhYmxlIG9uIGNsb3NlLgogICogOTcxMTA3CVRvb2sgYWNjb3VudCBvZiByZWNlbnQgVkZTIGNoYW5nZXMgKGJyb2tlIHJlYWQpLgotICogOTcxMjEwICAgICAgIERpc2FibGUgYm9hcmQgb24gaW5pdGlhbGlzYXRpb24gaW4gY2FzZSBib2FyZCBhbHJlYWR5IHRpY2tpbmcuCi0gKiA5NzEyMjIgICAgICAgQ2hhbmdlZCBvcGVuL2Nsb3NlIGZvciB0ZW1wZXJhdHVyZSBoYW5kbGluZwotICogICAgICAgICAgICAgIE1pY2hhZWwgTWVza2VzIDxtZXNrZXNAZGViaWFuLm9yZz4uCi0gKiA5ODAxMTIgICAgICAgVXNlZCBtaW5vciBudW1iZXJzIGZyb20gaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKLSAqIDk5MDQwMyAgICAgICBDbGVhciByZXNldCBzdGF0dXMgYWZ0ZXIgcmVhZGluZyBjb250cm9sIHN0YXR1cyByZWdpc3RlciBpbgotICogICAgICAgICAgICAgIHBjd2Rfc2hvd3ByZXZzdGF0ZSgpLiBbTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+XQorICogOTcxMjEwCURpc2FibGUgYm9hcmQgb24gaW5pdGlhbGlzYXRpb24gaW4gY2FzZSBib2FyZCBhbHJlYWR5IHRpY2tpbmcuCisgKiA5NzEyMjIJQ2hhbmdlZCBvcGVuL2Nsb3NlIGZvciB0ZW1wZXJhdHVyZSBoYW5kbGluZworICoJCU1pY2hhZWwgTWVza2VzIDxtZXNrZXNAZGViaWFuLm9yZz4uCisgKiA5ODAxMTIJVXNlZCBtaW5vciBudW1iZXJzIGZyb20gaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKKyAqIDk5MDQwMwlDbGVhciByZXNldCBzdGF0dXMgYWZ0ZXIgcmVhZGluZyBjb250cm9sIHN0YXR1cyByZWdpc3RlciBpbgorICoJCXBjd2Rfc2hvd3ByZXZzdGF0ZSgpLiBbTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+XQogICogOTkwNjA1CU1hZGUgY2hhbmdlcyB0byBjb2RlIHRvIHN1cHBvcnQgRmlybXdhcmUgMS4yMmEsIGFkZGVkCiAgKgkJZmFpcmx5IHVzZWxlc3MgcHJvYyBlbnRyeS4KICAqIDk5MDYxMAlyZW1vdmVkIHNhaWQgdXNlbGVzcyBwcm9jIGNvZGUgZm9yIHRoZSBtZXJnZSA8YWxhbj4KICAqIDAwMDQwMwlSZW1vdmVkIGxhc3QgdHJhY2VzIG9mIHByb2MgY29kZS4gPGRhdmVqPgogICogMDExMjE0CUFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUKICAqCQlDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgICAgIEFkZGVkIHRpbWVvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0CisgKgkJQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKICAqLwogCiAvKgpAQCAtNzYsOCArNzYsNyBAQAogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiSVNBLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKVxuIgotI2RlZmluZSBXRF9WRVIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIikiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICJcbiIKIAogLyoKICAqIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IFBDV0RfUkVWSVNJT05fQiB3YXMgcmVtb3ZlZCBiZWNhdXNlIEEgYW5kIEIKQEAgLTIwMCw3ICsxOTksOSBAQAogI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDIgPD0gaGVhcnRiZWF0IDw9IDcyMDAgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDIgPD0gaGVhcnRiZWF0IDw9IDcyMDAgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CkBAIC0yMzksNyArMjQwLDggQEAKIAl9CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yIGNtZD0weCUwMng6IHBvcnQwPTB4JTAyeCBsYXN0X3BvcnQwPTB4JTAyeFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgIgorCQkJImNtZD0weCUwMng6IHBvcnQwPTB4JTAyeCBsYXN0X3BvcnQwPTB4JTAyeFxuIiwKIAkJCWNtZCwgcG9ydDAsIGxhc3RfcG9ydDApOwogCiAJcmV0dXJuIHBvcnQwOwpAQCAtMzM5LDEwICszNDEsMTIgQEAKIAkJCQkJCQlwY3dkX3ByaXZhdGUuaW9fYWRkcik7CiAJZWxzZSBpZiAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQykgewogCQlwY3dkX2dldF9maXJtd2FyZSgpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQykgZGV0ZWN0ZWQgYXQgcG9ydCAweCUwNHggKEZpcm13YXJlIHZlcnNpb246ICVzKVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIklTQS1QQyBXYXRjaGRvZyAoUkVWLkMpIGRldGVjdGVkIGF0IHBvcnQgIgorCQkJIjB4JTA0eCAoRmlybXdhcmUgdmVyc2lvbjogJXMpXG4iLAogCQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIsIHBjd2RfcHJpdmF0ZS5md192ZXJfc3RyKTsKIAkJb3B0aW9uX3N3aXRjaGVzID0gcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6ICIKKwkJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQkJb3B0aW9uX3N3aXRjaGVzLAogCQkJKChvcHRpb25fc3dpdGNoZXMgJiAweDEwKSA/ICJPTiIgOiAiT0ZGIiksCiAJCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CkBAIC0zNTgsNyArMzYyLDggQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRlbXBlcmF0dXJlIE9wdGlvbiBEZXRlY3RlZFxuIik7CiAKIAlpZiAocGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfQ0FSRFJFU0VUKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJldmlvdXMgcmVib290IHdhcyBjYXVzZWQgYnkgdGhlIGNhcmRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIlByZXZpb3VzIHJlYm9vdCB3YXMgY2F1c2VkIGJ5IHRoZSBjYXJkXG4iKTsKIAogCWlmIChwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9PVkVSSEVBVCkgewogCQlwcmludGsoS0VSTl9FTUVSRyBQRlgKQEAgLTg3MSw3ICs4NzYsNyBAQAogCWNhcmRzX2ZvdW5kKys7CiAJaWYgKGNhcmRzX2ZvdW5kID09IDEpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJ2JXMgS2VuIEhvbGxpcyAoa2VuamlAYml0Z2F0ZS5jb20pXG4iLAotCQkJCQkJCQlXRF9WRVIpOworCQkJCQkJCVdBVENIRE9HX1ZFUlNJT04pOwogCiAJaWYgKGNhcmRzX2ZvdW5kID4gMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIDEgZGV2aWNlXG4iKTsKQEAgLTEwMjYsNyArMTAzMSw4IEBACiBtb2R1bGVfaW5pdChwY3dkX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KHBjd2RfY2xlYW51cF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJLZW4gSG9sbGlzIDxrZW5qaUBiaXRnYXRlLmNvbT4sIFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Iik7CitNT0RVTEVfQVVUSE9SKCJLZW4gSG9sbGlzIDxrZW5qaUBiaXRnYXRlLmNvbT4sICIKKwkJIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJlcmtzaGlyZSBJU0EtUEMgV2F0Y2hkb2cgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihXQVRDSERPR19WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYwppbmRleCA1ZDc2NDIyLi42OThmNTFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYwpAQCAtMjQsNyArMjQsOCBAQAogICoJQSBiZWxscyBhbmQgd2hpc3RsZXMgZHJpdmVyIGlzIGF2YWlsYWJsZSBmcm9tOgogICoJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL3dpbS9wY3dkL3Bjd2RfcGNpLwogICoKLSAqCU1vcmUgaW5mbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5iZXJrcHJvZC5jb20vIG9yIGh0dHA6Ly93d3cucGN3YXRjaGRvZy5jb20vCisgKglNb3JlIGluZm8gYXZhaWxhYmxlIGF0CisgKglodHRwOi8vd3d3LmJlcmtwcm9kLmNvbS8gb3IgaHR0cDovL3d3dy5wY3dhdGNoZG9nLmNvbS8KICAqLwogCiAvKgpAQCAtNTEsMTEgKzUyLDEwIEBACiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBXQVRDSERPR19WRVJTSU9OICIxLjAzIgotI2RlZmluZSBXQVRDSERPR19EQVRFICIyMSBKYW4gMjAwNyIKICNkZWZpbmUgV0FUQ0hET0dfRFJJVkVSX05BTUUgIlBDSS1QQyBXYXRjaGRvZyIKICNkZWZpbmUgV0FUQ0hET0dfTkFNRSAicGN3ZF9wY2kiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpXG4iCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICJcbiIKIAogLyogU3R1ZmYgZm9yIHRoZSBQQ0kgSUQncyAgKi8KICNpZm5kZWYgUENJX1ZFTkRPUl9JRF9RVUlDS0xPR0lDCkBAIC03Niw3ICs3Niw4IEBACiAjZGVmaW5lIFdEX1BDSV9UVFJQCQkweDA0CS8qIFRlbXBlcmF0dXJlIFRyaXAgc3RhdHVzICovCiAjZGVmaW5lIFdEX1BDSV9STDJBCQkweDA4CS8qIFJlbGF5IDIgQWN0aXZlICovCiAjZGVmaW5lIFdEX1BDSV9STDFBCQkweDEwCS8qIFJlbGF5IDEgQWN0aXZlICovCi0jZGVmaW5lIFdEX1BDSV9SMkRTCQkweDQwCS8qIFJlbGF5IDIgRGlzYWJsZSBUZW1wZXJhdHVyZS10cmlwL3Jlc2V0ICovCisjZGVmaW5lIFdEX1BDSV9SMkRTCQkweDQwCS8qIFJlbGF5IDIgRGlzYWJsZSBUZW1wZXJhdHVyZS10cmlwIC8KKwkJCQkJCQkJCXJlc2V0ICovCiAjZGVmaW5lIFdEX1BDSV9STFkyCQkweDgwCS8qIEFjdGl2YXRlIFJlbGF5IDIgb24gdGhlIGJvYXJkICovCiAvKiBQb3J0IDIgOiBDb250cm9sIFN0YXR1cyAjMiAqLwogI2RlZmluZSBXRF9QQ0lfV0RJUwkJMHgxMAkvKiBXYXRjaGRvZyBEaXNhYmxlICovCkBAIC0xMTQsMTIgKzExNSwxOCBAQAogc3RhdGljIGludCB0ZW1wX3BhbmljOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNfYWN0aXZlOwogc3RhdGljIGNoYXIgZXhwZWN0X3JlbGVhc2U7Ci1zdGF0aWMgc3RydWN0IHsJCQkJLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggUENJLVBDIHdhdGNoZG9nIGNhcmQgKi8KLQlpbnQgc3VwcG9ydHNfdGVtcDsJCS8qIFdldGhlciBvciBub3QgdGhlIGNhcmQgaGFzIGEgdGVtcGVyYXR1cmUgZGV2aWNlICovCi0JaW50IGJvb3Rfc3RhdHVzOwkJLyogVGhlIGNhcmQncyBib290IHN0YXR1cyAqLwotCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsJCS8qIFRoZSBjYXJkcyBJL08gYWRkcmVzcyAqLwotCXNwaW5sb2NrX3QgaW9fbG9jazsJCS8qIHRoZSBsb2NrIGZvciBpbyBvcGVyYXRpb25zICovCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CQkvKiB0aGUgUENJLWRldmljZSAqLworLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggUENJLVBDIHdhdGNoZG9nIGNhcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCS8qIFdldGhlciBvciBub3QgdGhlIGNhcmQgaGFzIGEgdGVtcGVyYXR1cmUgZGV2aWNlICovCisJaW50IHN1cHBvcnRzX3RlbXA7CisJLyogVGhlIGNhcmQncyBib290IHN0YXR1cyAqLworCWludCBib290X3N0YXR1czsKKwkvKiBUaGUgY2FyZHMgSS9PIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CisJLyogdGhlIGxvY2sgZm9yIGlvIG9wZXJhdGlvbnMgKi8KKwlzcGlubG9ja190IGlvX2xvY2s7CisJLyogdGhlIFBDSS1kZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIH0gcGNpcGN3ZF9wcml2YXRlOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtMTMwLDE0ICsxMzcsMTggQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMD1RdWlldCwgMT1WZXJib3NlLCAyPURlYnVnIChkZWZhdWx0PTApIik7CiAKLSNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPSBkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCisjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0KKwkJCQkJCWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogLyoKICAqCUludGVybmFsIGZ1bmN0aW9ucwpAQCAtMTQ4LDggKzE1OSw4IEBACiAJaW50IGdvdF9yZXNwb25zZSwgY291bnQ7CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAic2VuZGluZyBmb2xsb3dpbmcgZGF0YSBjbWQ9MHglMDJ4IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKLQkJY21kLCAqbXNiLCAqbHNiKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhICIKKwkJImNtZD0weCUwMnggbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLCBjbWQsICptc2IsICpsc2IpOwogCiAJc3Bpbl9sb2NrKCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAJLyogSWYgYSBjb21tYW5kIHJlcXVpcmVzIGRhdGEgaXQgc2hvdWxkIGJlIHdyaXR0ZW4gZmlyc3QuCkBAIC0xNjYsMTcgKzE3NywyMCBAQAogCSAqIHRoZSBXUlNQIGJpdCBpbiBwb3J0IDIgYW5kIGdpdmUgaXQgYSBtYXguIHRpbWVvdXQgb2YKIAkgKiBQQ0lfQ09NTUFORF9USU1FT1VUIHRvIHByb2Nlc3MgKi8KIAlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgV0RfUENJX1dSU1A7Ci0JZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFBDSV9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsgY291bnQrKykgeworCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBQQ0lfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7CisJCQkJCQkJCWNvdW50KyspIHsKIAkJbWRlbGF5KDEpOwogCQlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgV0RfUENJX1dSU1A7CiAJfQogCiAJaWYgKGRlYnVnID49IERFQlVHKSB7CiAJCWlmIChnb3RfcmVzcG9uc2UpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAidGltZSB0byBwcm9jZXNzIGNvbW1hbmQgd2FzOiAlZCBtc1xuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJCSJ0aW1lIHRvIHByb2Nlc3MgY29tbWFuZCB3YXM6ICVkIG1zXG4iLAogCQkJCWNvdW50KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiY2FyZCBkaWQgbm90IHJlc3BvbmQgb24gY29tbWFuZCFcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkJImNhcmQgZGlkIG5vdCByZXNwb25kIG9uIGNvbW1hbmQhXG4iKTsKIAkJfQogCX0KIApAQCAtMTg5LDcgKzIwMyw4IEBACiAJCWluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgNik7CiAKIAkJaWYgKGRlYnVnID49IERFQlVHKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgY21kPTB4JTAyeDogbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgIgorCQkJCSJjbWQ9MHglMDJ4OiBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCiAJCQkJY21kLCAqbXNiLCAqbHNiKTsKIAl9CiAKQEAgLTIxOCw3ICsyMzMsOCBAQAogCWNoYXIgZndfdmVyX3N0clsyMF07CQkvKiBUaGUgY2FyZHMgZmlybXdhcmUgdmVyc2lvbiAqLwogCWludCBvcHRpb25fc3dpdGNoZXM7CiAKLQlnb3RfZndfcmV2ID0gc2VuZF9jb21tYW5kKENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CisJZ290X2Z3X3JldiA9IHNlbmRfY29tbWFuZChDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sICZmd19yZXZfbWFqb3IsCisJCQkJCQkJCSZmd19yZXZfbWlub3IpOwogCWlmIChnb3RfZndfcmV2KQogCQlzcHJpbnRmKGZ3X3Zlcl9zdHIsICIldS4lMDJ1IiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3IpOwogCWVsc2UKQEAgLTIyNywyMyArMjQzLDI3IEBACiAJLyogR2V0IHN3aXRjaCBzZXR0aW5ncyAqLwogCW9wdGlvbl9zd2l0Y2hlcyA9IHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kIGNhcmQgYXQgcG9ydCAweCUwNHggKEZpcm13YXJlOiAlcykgJXMgdGVtcCBvcHRpb25cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kIGNhcmQgYXQgcG9ydCAiCisJCSIweCUwNHggKEZpcm13YXJlOiAlcykgJXMgdGVtcCBvcHRpb25cbiIsCiAJCShpbnQpIHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyLCBmd192ZXJfc3RyLAogCQkocGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXAgPyAid2l0aCIgOiAid2l0aG91dCIpKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkiVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKIAkJb3B0aW9uX3N3aXRjaGVzLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOwogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX0NBUkRSRVNFVCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByZXZpb3VzIHJlc2V0IHdhcyBjYXVzZWQgYnkgdGhlIFdhdGNoZG9nIGNhcmRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIlByZXZpb3VzIHJlc2V0IHdhcyBjYXVzZWQgYnkgdGhlIFdhdGNoZG9nIGNhcmRcbiIpOwogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX09WRVJIRUFUKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ2FyZCBzZW5zZWQgYSBDUFUgT3ZlcmhlYXRcbiIpOwogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTm8gcHJldmlvdXMgdHJpcCBkZXRlY3RlZCAtIENvbGQgYm9vdCBvciByZXNldFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiTm8gcHJldmlvdXMgdHJpcCBkZXRlY3RlZCAtIENvbGQgYm9vdCBvciByZXNldFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgcGNpcGN3ZF9zdGFydCh2b2lkKQpAQCAtMjgzLDcgKzMwMyw4IEBACiAJc3Bpbl91bmxvY2soJnBjaXBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAogCWlmICghKHN0YXRfcmVnICYgV0RfUENJX1dESVMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM2NCw3ICszODUsOCBAQAogCX0KIAogCS8qIGNsZWFyIHRyaXAgc3RhdHVzICYgTEVEIGFuZCBrZWVwIG1vZGUgb2YgcmVsYXkgMiAqLwotCW91dGJfcCgoY29udHJvbF9zdGF0dXMgJiBXRF9QQ0lfUjJEUykgfCBXRF9QQ0lfV1RSUCwgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKKwlvdXRiX3AoKGNvbnRyb2xfc3RhdHVzICYgV0RfUENJX1IyRFMpIHwgV0RfUENJX1dUUlAsCisJCQkJCQlwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOwogCiAJLyogY2xlYXIgcmVzZXQgY291bnRlciAqLwogCW1zYiA9IDA7CkBAIC00MzcsNyArNDU5LDggQEAKIAkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLwogCQkJZXhwZWN0X3JlbGVhc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC01MzEsNyArNTU0LDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmIChwY2lwY3dkX3NldF9oZWFydGJlYXQobmV3X2hlYXJ0YmVhdCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXBjaXBjd2Rfa2VlcGFsaXZlKCk7CiAJCS8qIEZhbGwgKi8KQEAgLTU2MCw3ICs1ODMsOCBAQAogCS8qIC9kZXYvd2F0Y2hkb2cgY2FuIG9ubHkgYmUgb3BlbmVkIG9uY2UgKi8KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmaXNfYWN0aXZlKSkgewogCQlpZiAoZGVidWcgPj0gVkVSQk9TRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gb3BlbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UuXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiQXR0ZW1wdCB0byBvcGVuIGFscmVhZHkgb3BlbmVkIGRldmljZS5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNTc4LDcgKzYwMiw4IEBACiAJaWYgKGV4cGVjdF9yZWxlYXNlID09IDQyKSB7CiAJCXBjaXBjd2Rfc3RvcCgpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgUEZYICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKIAkJcGNpcGN3ZF9rZWVwYWxpdmUoKTsKIAl9CiAJZXhwZWN0X3JlbGVhc2UgPSAwOwpAQCAtNjIxLDcgKzY0Niw4IEBACiAgKglOb3RpZnkgc3lzdGVtCiAgKi8KIAotc3RhdGljIGludCBwY2lwY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3N0YXRpYyBpbnQgcGNpcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAorCQkJCQkJCQl2b2lkICp1bnVzZWQpCiB7CiAJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKIAkJcGNpcGN3ZF9zdG9wKCk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KQEAgLTcyMiwzNCArNzQ4LDM4IEBACiAKIAkvKiBJZiBoZWFydGJlYXQgPSAwIHRoZW4gd2UgdXNlIHRoZSBoZWFydGJlYXQgZnJvbSB0aGUgZGlwLXN3aXRjaGVzICovCiAJaWYgKGhlYXJ0YmVhdCA9PSAwKQotCQloZWFydGJlYXQgPSBoZWFydGJlYXRfdGJsWyhwY2lwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKSAmIDB4MDcpXTsKKwkJaGVhcnRiZWF0ID0KKwkJCWhlYXJ0YmVhdF90YmxbKHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpICYgMHgwNyldOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAocGNpcGN3ZF9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCkpIHsKIAkJcGNpcGN3ZF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX0hFQVJUQkVBVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAogCQkJV0FUQ0hET0dfSEVBUlRCRUFUKTsKIAl9CiAKIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjaXBjd2Rfbm90aWZpZXIpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAotCQkJcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsIHJldCk7CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXApIHsKIAkJcmV0ID0gbWlzY19yZWdpc3RlcigmcGNpcGN3ZF90ZW1wX21pc2NkZXYpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAotCQkJCVRFTVBfTUlOT1IsIHJldCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiAiCisJCQkJIm1pbm9yPSVkIChlcnI9JWQpXG4iLCBURU1QX01JTk9SLCByZXQpOwogCQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfcmVib290OwogCQl9CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcGNpcGN3ZF9taXNjZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXQpOwogCQlnb3RvIGVycl9vdXRfbWlzY19kZXJlZ2lzdGVyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwppbmRleCBhZmIwODk2Li4wNTJmZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCkBAIC01MSwxMiArNTEsMTEgQEAKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCiAjdW5kZWYgZGJnCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIFBGWCBmb3JtYXQgIlxuIiAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0KKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIFBGWCBmb3JtYXQgIlxuIiAsICMjIGFyZyk7IH0gd2hpbGUgKDApCiAKIC8qIE1vZHVsZSBhbmQgVmVyc2lvbiBJbmZvcm1hdGlvbiAqLwogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wMiIKLSNkZWZpbmUgRFJJVkVSX0RBVEUgIjIxIEphbiAyMDA3IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkJlcmtzaGlyZSBVU0ItUEMgV2F0Y2hkb2cgZHJpdmVyIgogI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgpAQCAtNzMsMTQgKzcyLDE4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKIAotI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9IGRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPQorCQkJCQkJZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIC8qIFRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQncyBmb3IgdGhlIFVTQi1QQyBXYXRjaGRvZyBjYXJkICovCiAjZGVmaW5lIFVTQl9QQ1dEX1ZFTkRPUl9JRAkweDBjOTgKQEAgLTkxLDIwICs5NCwyMSBAQAogCXsgVVNCX0RFVklDRShVU0JfUENXRF9WRU5ET1JfSUQsIFVTQl9QQ1dEX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX3Bjd2RfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9wY3dkX3RhYmxlKTsKIAogLyogYWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24gbWF4LiB0aW1lIHRvIHByb2Nlc3MgYSBjb21tYW5kIGZvciB0aGUgVVNCCiAgKiB3YXRjaGRvZyBjYXJkIGlzIDEwMCBvciAyMDAgbXMsIHNvIHdlIGdpdmUgaXQgMjUwIG1zIHRvIGRvIGl0J3Mgam9iICovCiAjZGVmaW5lIFVTQl9DT01NQU5EX1RJTUVPVVQJMjUwCiAKIC8qIFdhdGNoZG9nJ3MgaW50ZXJuYWwgY29tbWFuZHMgKi8KLSNkZWZpbmUgQ01EX1JFQURfVEVNUAkJCTB4MDIJLyogUmVhZCBUZW1wZXJhdHVyZTsgUmUtdHJpZ2dlciBXYXRjaGRvZyAqLworI2RlZmluZSBDTURfUkVBRF9URU1QCQkJMHgwMgkvKiBSZWFkIFRlbXBlcmF0dXJlOworCQkJCQkJCVJlLXRyaWdnZXIgV2F0Y2hkb2cgKi8KICNkZWZpbmUgQ01EX1RSSUdHRVIJCQlDTURfUkVBRF9URU1QCiAjZGVmaW5lIENNRF9HRVRfU1RBVFVTCQkJMHgwNAkvKiBHZXQgU3RhdHVzIEluZm9ybWF0aW9uICovCiAjZGVmaW5lIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTgkweDA4CS8qIEdldCBGaXJtd2FyZSBWZXJzaW9uICovCiAjZGVmaW5lIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUwkweDBjCS8qIEdldCBEaXAgU3dpdGNoIFNldHRpbmdzICovCiAjZGVmaW5lIENNRF9SRUFEX1dBVENIRE9HX1RJTUVPVVQJMHgxOAkvKiBSZWFkIEN1cnJlbnQgV2F0Y2hkb2cgVGltZSAqLwotI2RlZmluZSBDTURfV1JJVEVfV0FUQ0hET0dfVElNRU9VVAkweDE5CS8qIFdyaXRlIEN1cnJlbnQgV2F0Y2hkb2cgVGltZSAqLworI2RlZmluZSBDTURfV1JJVEVfV0FUQ0hET0dfVElNRU9VVAkweDE5CS8qIFdyaXRlIEN1cnJlbnQgV2F0Y2hkb2dUaW1lICovCiAjZGVmaW5lIENNRF9FTkFCTEVfV0FUQ0hET0cJCTB4MzAJLyogRW5hYmxlIC8gRGlzYWJsZSBXYXRjaGRvZyAqLwogI2RlZmluZSBDTURfRElTQUJMRV9XQVRDSERPRwkJQ01EX0VOQUJMRV9XQVRDSERPRwogCkBAIC0xMjksMjMgKzEzMywzNiBAQAogCiAvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLwogc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwkJCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwkvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwogCi0JdW5zaWduZWQgaW50CQlpbnRlcmZhY2VfbnVtYmVyOwkvKiB0aGUgaW50ZXJmYWNlIG51bWJlciB1c2VkIGZvciBjbWQncyAqLworCS8qIHRoZSBpbnRlcmZhY2UgbnVtYmVyIHVzZWQgZm9yIGNtZCdzICovCisJdW5zaWduZWQgaW50CQlpbnRlcmZhY2VfbnVtYmVyOwogCi0JdW5zaWduZWQgY2hhcgkJKmludHJfYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB0byBpbnRyIGRhdGEgKi8KLQlkbWFfYWRkcl90CQlpbnRyX2RtYTsJCS8qIHRoZSBkbWEgYWRkcmVzcyBmb3IgdGhlIGludHIgYnVmZmVyICovCi0Jc2l6ZV90CQkJaW50cl9zaXplOwkJLyogdGhlIHNpemUgb2YgdGhlIGludHIgYnVmZmVyICovCi0Jc3RydWN0IHVyYgkJKmludHJfdXJiOwkJLyogdGhlIHVyYiB1c2VkIGZvciB0aGUgaW50ciBwaXBlICovCisJLyogdGhlIGJ1ZmZlciB0byBpbnRyIGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyCQkqaW50cl9idWZmZXI7CisJLyogdGhlIGRtYSBhZGRyZXNzIGZvciB0aGUgaW50ciBidWZmZXIgKi8KKwlkbWFfYWRkcl90CQlpbnRyX2RtYTsKKwkvKiB0aGUgc2l6ZSBvZiB0aGUgaW50ciBidWZmZXIgKi8KKwlzaXplX3QJCQlpbnRyX3NpemU7CisJLyogdGhlIHVyYiB1c2VkIGZvciB0aGUgaW50ciBwaXBlICovCisJc3RydWN0IHVyYgkJKmludHJfdXJiOwogCi0JdW5zaWduZWQgY2hhcgkJY21kX2NvbW1hbmQ7CQkvKiBUaGUgY29tbWFuZCB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9tc2I7CQkvKiBUaGUgZGF0YSBNU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbHNiOwkJLyogVGhlIGRhdGEgTFNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCWF0b21pY190CQljbWRfcmVjZWl2ZWQ7CQkvKiB0cnVlIGlmIHdlIHJlY2VpdmVkIGEgcmVwb3J0IGFmdGVyIGEgY29tbWFuZCAqLworCS8qIFRoZSBjb21tYW5kIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9jb21tYW5kOworCS8qIFRoZSBkYXRhIE1TQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9tc2I7CisJLyogVGhlIGRhdGEgTFNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX2xzYjsKKwkvKiB0cnVlIGlmIHdlIHJlY2VpdmVkIGEgcmVwb3J0IGFmdGVyIGEgY29tbWFuZCAqLworCWF0b21pY190CQljbWRfcmVjZWl2ZWQ7CiAKLQlpbnQJCQlleGlzdHM7CQkJLyogV2V0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGV4aXN0cyAqLwotCXN0cnVjdCBtdXRleAkJbXR4OwkJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJLyogV2V0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGV4aXN0cyAqLworCWludAkJCWV4aXN0czsKKwkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBtdXRleAkJbXR4OwogfTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2RfZGV2aWNlOwogCkBAIC0xNTMsNyArMTcwLDggQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoZGlzY29ubmVjdF9tdXRleCk7CiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCB1c2JfcGN3ZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCkBAIC0xNjcsNyArMTg1LDggQEAKIAogc3RhdGljIHZvaWQgdXNiX3Bjd2RfaW50cl9kb25lKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QgPSAoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkID0KKwkJCQkoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKil1cmItPmNvbnRleHQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzYl9wY3dkLT5pbnRyX2J1ZmZlcjsKIAlpbnQgcmV0dmFsOwogCkBAIC0xNzgsMTEgKzE5NywxMyBAQAogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FU0hVVERPV046CiAJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sCisJCQkJCQkJCXVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwogCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCQkJCQkJCXVyYi0+c3RhdHVzKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CiAKQEAgLTE5OSwyMiArMjIwLDIzIEBACiByZXN1Ym1pdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IHJlc3VibWl0IGludHIsIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKLQkJCXJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IHJlc3VibWl0IGludHIsICIKKwkJCSJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsIHJldHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgdW5zaWduZWQgY2hhciBjbWQsCi0JdW5zaWduZWQgY2hhciAqbXNiLCB1bnNpZ25lZCBjaGFyICpsc2IpCitzdGF0aWMgaW50IHVzYl9wY3dkX3NlbmRfY29tbWFuZChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsCisJCXVuc2lnbmVkIGNoYXIgY21kLCB1bnNpZ25lZCBjaGFyICptc2IsIHVuc2lnbmVkIGNoYXIgKmxzYikKIHsKIAlpbnQgZ290X3Jlc3BvbnNlLCBjb3VudDsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls2XTsKIAotCS8qIFdlIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIGlmIHRoZSBVU0IgUENXRCBkZXZpY2UgZG9lcyBub3QgZXhpc3QgKi8KKwkvKiBXZSB3aWxsIG5vdCBzZW5kIGFueSBjb21tYW5kcyBpZiB0aGUgVVNCIFBDV0QgZGV2aWNlIGRvZXMKKwkgKiBub3QgZXhpc3QgKi8KIAlpZiAoKCF1c2JfcGN3ZCkgfHwgKCF1c2JfcGN3ZC0+ZXhpc3RzKSkKIAkJcmV0dXJuIC0xOwogCi0JLyogVGhlIFVTQiBQQyBXYXRjaGRvZyB1c2VzIGEgNiBieXRlIHJlcG9ydCBmb3JtYXQuIFRoZSBib2FyZCBjdXJyZW50bHkgdXNlcwotCSAqIG9ubHkgMyBvZiB0aGUgc2l4IGJ5dGVzIG9mIHRoZSByZXBvcnQuICovCisJLyogVGhlIFVTQiBQQyBXYXRjaGRvZyB1c2VzIGEgNiBieXRlIHJlcG9ydCBmb3JtYXQuCisJICogVGhlIGJvYXJkIGN1cnJlbnRseSB1c2VzIG9ubHkgMyBvZiB0aGUgc2l4IGJ5dGVzIG9mIHRoZSByZXBvcnQuICovCiAJYnVmWzBdID0gY21kOwkJCS8qIEJ5dGUgMCA9IENNRCAqLwogCWJ1ZlsxXSA9ICptc2I7CQkJLyogQnl0ZSAxID0gRGF0YSBNU0IgKi8KIAlidWZbMl0gPSAqbHNiOwkJCS8qIEJ5dGUgMiA9IERhdGEgTFNCICovCkBAIC0yMjksMTIgKzI1MSwxNCBAQAogCQkJSElEX1JFUV9TRVRfUkVQT1JULCBISURfRFRfUkVQT1JULAogCQkJMHgwMjAwLCB1c2JfcGN3ZC0+aW50ZXJmYWNlX251bWJlciwgYnVmLCBzaXplb2YoYnVmKSwKIAkJCVVTQl9DT01NQU5EX1RJTUVPVVQpICE9IHNpemVvZihidWYpKSB7Ci0JCWRiZygidXNiX3Bjd2Rfc2VuZF9jb21tYW5kOiBlcnJvciBpbiB1c2JfY29udHJvbF9tc2cgZm9yIGNtZCAweCV4IDB4JXggMHgleFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKKwkJZGJnKCJ1c2JfcGN3ZF9zZW5kX2NvbW1hbmQ6IGVycm9yIGluIHVzYl9jb250cm9sX21zZyBmb3IgIgorCQkJCSJjbWQgMHgleCAweCV4IDB4JXhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CiAJfQogCS8qIHdhaXQgdGlsbCB0aGUgdXNiIGNhcmQgcHJvY2Vzc2VkIHRoZSBjb21tYW5kLAogCSAqIHdpdGggYSBtYXguIHRpbWVvdXQgb2YgVVNCX0NPTU1BTkRfVElNRU9VVCAqLwogCWdvdF9yZXNwb25zZSA9IDA7Ci0JZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFVTQl9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsgY291bnQrKykgeworCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBVU0JfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7CisJCQkJCQkJCWNvdW50KyspIHsKIAkJbWRlbGF5KDEpOwogCQlpZiAoYXRvbWljX3JlYWQoJnVzYl9wY3dkLT5jbWRfcmVjZWl2ZWQpKQogCQkJZ290X3Jlc3BvbnNlID0gMTsKQEAgLTI1NiwxMCArMjgwLDEyIEBACiAJaW50IHJldHZhbDsKIAogCS8qIEVuYWJsZSBXYXRjaGRvZyAqLwotCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0VOQUJMRV9XQVRDSERPRywgJm1zYiwgJmxzYik7CisJcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRU5BQkxFX1dBVENIRE9HLAorCQkJCQkJCQkmbXNiLCAmbHNiKTsKIAogCWlmICgocmV0dmFsID09IDApIHx8IChsc2IgPT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGVuYWJsZSBhdHRlbXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZW5hYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNzMsMTAgKzI5OSwxMiBAQAogCWludCByZXR2YWw7CiAKIAkvKiBEaXNhYmxlIFdhdGNoZG9nICovCi0JcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRElTQUJMRV9XQVRDSERPRywgJm1zYiwgJmxzYik7CisJcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRElTQUJMRV9XQVRDSERPRywKKwkJCQkJCQkJJm1zYiwgJmxzYik7CiAKIAlpZiAoKHJldHZhbCA9PSAwKSB8fCAobHNiICE9IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMwOCw3ICszMzYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIGludCAqdGVtcGVyYXR1cmUpCitzdGF0aWMgaW50IHVzYl9wY3dkX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsCisJCQkJCQkJaW50ICp0ZW1wZXJhdHVyZSkKIHsKIAl1bnNpZ25lZCBjaGFyIG1zYiwgbHNiOwogCkBAIC0zMjMsNyArMzUyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGltZWxlZnQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCBpbnQgKnRpbWVfbGVmdCkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RpbWVsZWZ0KHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJCQkJCQkJaW50ICp0aW1lX2xlZnQpCiB7CiAJdW5zaWduZWQgY2hhciBtc2IsIGxzYjsKIApAQCAtMzQxLDcgKzM3MSw3IEBACiAgKi8KIAogc3RhdGljIHNzaXplX3QgdXNiX3Bjd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAotCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQorCQkJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewogCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KIAlpZiAobGVuKSB7CkBAIC0zNTIsNyArMzgyLDggQEAKIAkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLwogCQkJZXhwZWN0X3JlbGVhc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC00MzEsNyArNDYyLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICh1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkX2RldmljZSwgbmV3X2hlYXJ0YmVhdCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXVzYl9wY3dkX2tlZXBhbGl2ZSh1c2JfcGN3ZF9kZXZpY2UpOwogCQkvKiBGYWxsICovCkBAIC00NzUsNyArNTA2LDggQEAKIAlpZiAoZXhwZWN0X3JlbGVhc2UgPT0gNDIpIHsKIAkJdXNiX3Bjd2Rfc3RvcCh1c2JfcGN3ZF9kZXZpY2UpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgUEZYICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKIAkJdXNiX3Bjd2Rfa2VlcGFsaXZlKHVzYl9wY3dkX2RldmljZSk7CiAJfQogCWV4cGVjdF9yZWxlYXNlID0gMDsKQEAgLTUxNSw3ICs1NDcsOCBAQAogICoJTm90aWZ5IHN5c3RlbQogICovCiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQorc3RhdGljIGludCB1c2JfcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAorCQkJCQkJCQl2b2lkICp1bnVzZWQpCiB7CiAJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKIAkJdXNiX3Bjd2Rfc3RvcCh1c2JfcGN3ZF9kZXZpY2UpOwkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCkBAIC01NzgsNyArNjExLDggQEAKICAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCiAgKgl0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgogICovCi1zdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwpAQCAtNjAyLDE2ICs2MzYsMTUgQEAKIAogCS8qIGNoZWNrIG91dCB0aGF0IHdlIGhhdmUgYSBISUQgZGV2aWNlICovCiAJaWYgKCEoaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0hJRCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhlIGRldmljZSBpc24ndCBhIEh1bWFuIEludGVyZmFjZSBEZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiVGhlIGRldmljZSBpc24ndCBhIEh1bWFuIEludGVyZmFjZSBEZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50OiBpdCBoYXMgdG8gYmUgSW50ZXJydXB0ICYgSU4gKi8KIAllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFswXS5kZXNjOwogCi0JaWYgKCEoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKLQkgICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpKSB7CisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkgewogCQkvKiB3ZSBkaWRuJ3QgZmluZCBhIEludGVycnVwdCBlbmRwb2ludCB3aXRoIGRpcmVjdGlvbiBJTiAqLwogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG4ndCBmaW5kIGFuIElOVFIgJiBJTiBlbmRwb2ludFxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNjM0LDEwICs2NjcsMTIgQEAKIAl1c2JfcGN3ZC0+dWRldiA9IHVkZXY7CiAJdXNiX3Bjd2QtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAl1c2JfcGN3ZC0+aW50ZXJmYWNlX251bWJlciA9IGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQl1c2JfcGN3ZC0+aW50cl9zaXplID0gKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiA4ID8gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6IDgpOworCXVzYl9wY3dkLT5pbnRyX3NpemUgPSAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA+IDggPworCQkJCWxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgOiA4KTsKIAogCS8qIHNldCB1cCB0aGUgbWVtb3J5IGJ1ZmZlcidzICovCi0JdXNiX3Bjd2QtPmludHJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCB1c2JfcGN3ZC0+aW50cl9zaXplLCBHRlBfQVRPTUlDLCAmdXNiX3Bjd2QtPmludHJfZG1hKTsKKwl1c2JfcGN3ZC0+aW50cl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHVzYl9wY3dkLT5pbnRyX3NpemUsCisJCQkJCUdGUF9BVE9NSUMsICZ1c2JfcGN3ZC0+aW50cl9kbWEpOwogCWlmICghdXNiX3Bjd2QtPmludHJfYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIk91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtNjcxLDcgKzcwNiw4IEBACiAJdXNiX3Bjd2Rfc3RvcCh1c2JfcGN3ZCk7CiAKIAkvKiBHZXQgdGhlIEZpcm13YXJlIFZlcnNpb24gKi8KLQlnb3RfZndfcmV2ID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sICZmd19yZXZfbWFqb3IsICZmd19yZXZfbWlub3IpOworCWdvdF9md19yZXYgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwKKwkJCQkJCSZmd19yZXZfbWFqb3IsICZmd19yZXZfbWlub3IpOwogCWlmIChnb3RfZndfcmV2KQogCQlzcHJpbnRmKGZ3X3Zlcl9zdHIsICIldS4lMDJ1IiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3IpOwogCWVsc2UKQEAgLTY4MSw5ICs3MTcsMTEgQEAKIAkJZndfdmVyX3N0cik7CiAKIAkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCi0JdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0RJUF9TV0lUQ0hfU0VUVElOR1MsICZkdW1teSwgJm9wdGlvbl9zd2l0Y2hlcyk7CisJdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0RJUF9TV0lUQ0hfU0VUVElOR1MsICZkdW1teSwKKwkJCQkJCQkmb3B0aW9uX3N3aXRjaGVzKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkiVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKIAkJb3B0aW9uX3N3aXRjaGVzLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOwpAQCAtNjkyLDMwICs3MzAsMzUgQEAKIAlpZiAoaGVhcnRiZWF0ID09IDApCiAJCWhlYXJ0YmVhdCA9IGhlYXJ0YmVhdF90YmxbKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDcpXTsKIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2QsIGhlYXJ0YmVhdCkpIHsKIAkJdXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZCwgV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCiAJCQlXQVRDSERPR19IRUFSVEJFQVQpOwogCX0KIAogCXJldHZhbCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmdXNiX3Bjd2Rfbm90aWZpZXIpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKIAkJCXJldHZhbCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJcmV0dmFsID0gbWlzY19yZWdpc3RlcigmdXNiX3Bjd2RfdGVtcGVyYXR1cmVfbWlzY2Rldik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlURU1QX01JTk9SLCByZXR2YWwpOwogCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9yZWJvb3Q7CiAJfQogCiAJcmV0dmFsID0gbWlzY19yZWdpc3RlcigmdXNiX3Bjd2RfbWlzY2Rldik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0dmFsKTsKIAkJZ290byBlcnJfb3V0X21pc2NfZGVyZWdpc3RlcjsKIAl9CkBAIC04MDEsNyArODQ0LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCBEUklWRVJfREVTQyAiIHYiIERSSVZFUl9WRVJTSU9OICIgKCIgRFJJVkVSX0RBVEUgIilcbiIpOworCXByaW50ayhLRVJOX0lORk8gUEZYIERSSVZFUl9ERVNDICIgdiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwppbmRleCA2ZDlmM2Q0Li42NDEzNTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCkBAIC01NCwyMiArNTQsMjIgQEAKIAogLyogV0RUSU1fQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgQ09VTlRfRU5BQiAgICAgMQotI2RlZmluZSBSRVNFVF9DT1VOVCAgICAoMTw8MSkKLSNkZWZpbmUgREVCVUdfRU4gICAgICAgKDE8PDIpCisjZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxIDw8IDEpCisjZGVmaW5lIERFQlVHX0VOICAgICAgICgxIDw8IDIpCiAKIC8qIFdEVElNX01DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBNUjBfSU5UICAgICAgICAxCiAjdW5kZWYgIFJFU0VUX0NPVU5UMAotI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MikKLSNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCi0jZGVmaW5lIE1fUkVTMSAgICAgICAgICgxPDwzKQotI2RlZmluZSBNX1JFUzIgICAgICAgICAoMTw8NCkKLSNkZWZpbmUgUkVTRlJDMSAgICAgICAgKDE8PDUpCi0jZGVmaW5lIFJFU0ZSQzIgICAgICAgICgxPDw2KQorI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMSA8PCAyKQorI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMSA8PCAyKQorI2RlZmluZSBNX1JFUzEgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBNX1JFUzIgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBSRVNGUkMxICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBSRVNGUkMyICAgICAgICAoMSA8PCA2KQogCiAvKiBXRFRJTV9FTVIgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIEVYVF9NQVRDSDAgICAgICAxCi0jZGVmaW5lIE1BVENIX09VVFBVVF9ISUdIICgyPDw0KQkvKmEgTUFUQ0hfQ1RSTCBzZXR0aW5nICovCisjZGVmaW5lIE1BVENIX09VVFBVVF9ISUdIICgyIDw8IDQpCS8qYSBNQVRDSF9DVFJMIHNldHRpbmcgKi8KIAogLyogV0RUSU1fUkVTIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBXRE9HX1JFU0VUICAgICAgMQkvKiByZWFkIG9ubHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYwppbmRleCBmMzU1M2ZhLi5mNmNjY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCkBAIC0xNywyNyArMTcsMjkgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JCS8qIEZvciBtb2R1bGUgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgkJLyogRm9yIG5ldyBtb2R1bGVwYXJhbSdzICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIEZvciBzdGFuZGFyZCB0eXBlcyAobGlrZSBzaXplX3QpICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JCS8qIEZvciB0aGUgLUVOT0RFVi8uLi4gdmFsdWVzICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CQkvKiBGb3IgcHJpbnRrL3BhbmljLy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkJLyogRm9yIGZpbGUgb3BlcmF0aW9ucyAqLworI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4JCS8qIEZvciBNT0RVTEVfQUxJQVNfTUlTQ0RFVgorCQkJCQkJCShXQVRDSERPR19NSU5PUikgKi8KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgkJLyogRm9yIHRoZSB3YXRjaGRvZyBzcGVjaWZpYyBpdGVtcyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCQkvKiBGb3IgX19pbml0L19fZXhpdC8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4JLyogRm9yIHBsYXRmb3JtX2RyaXZlciBmcmFtZXdvcmsgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkJLyogRm9yIHNwaW5fbG9jay9zcGluX3VubG9jay8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CQkvKiBGb3IgY29weV90b191c2VyL3B1dF91c2VyLy4uLiAqLwogCi0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2ludGVnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9pbnRlZy5oPgkvKiBGb3IgdGhlIFdhdGNoZG9nIHJlZ2lzdGVycyAqLwogCi0jZGVmaW5lIFZFUlNJT04gIjAuNCIKKyNkZWZpbmUgUEZYIEtCVUlMRF9NT0ROQU1FICI6ICIKKworI2RlZmluZSBWRVJTSU9OICIxLjAiCiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgaW51c2U7CisJc3BpbmxvY2tfdCBpb19sb2NrOwogfSByYzMyNDM0X3dkdF9kZXZpY2U7CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWcgX19pb21lbSAqd2R0X3JlZzsKQEAgLTU4LDYgKzYwLDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCAyMAogCiBzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IHZhbHVlLCBpbiBzZWNvbmRzIChkZWZhdWx0PSIKKwkJV0FUQ0hET0dfVElNRU9VVCAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CkBAIC02OCwxMCArNzMsMjkgQEAKICNkZWZpbmUgU0VUX0JJVFMoYWRkciwgb3IsIG5hbmQpIFwKIAl3cml0ZWwoKHJlYWRsKCZhZGRyKSB8IG9yKSAmIH5uYW5kLCAmYWRkcikKIAorc3RhdGljIGludCByYzMyNDM0X3dkdF9zZXQoaW50IG5ld190aW1lb3V0KQoreworCWludCBtYXhfdG8gPSBXVENPTVAyU0VDKCh1MzIpLTEpOworCisJaWYgKG5ld190aW1lb3V0IDwgMCB8fCBuZXdfdGltZW91dCA+IG1heF90bykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCisJCQltYXhfdG8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdGltZW91dCA9IG5ld190aW1lb3V0OworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXdyaXRlbChTRUMyV1RDT01QKHRpbWVvdXQpLCAmd2R0X3JlZy0+d3Rjb21wYXJlKTsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3N0YXJ0KHZvaWQpCiB7CiAJdTMyIG9yLCBuYW5kOwogCisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKIAkvKiB6ZXJvIHRoZSBjb3VudGVyIGJlZm9yZSBlbmFibGluZyAqLwogCXdyaXRlbCgwLCAmd2R0X3JlZy0+d3Rjb3VudCk7CiAKQEAgLTg1LDM4ICsxMDksMzUgQEAKIAogCVNFVF9CSVRTKHdkdF9yZWctPmVycmNzLCBvciwgbmFuZCk7CiAKKwkvKiBzZXQgdGhlIHRpbWVvdXQgKGVpdGhlciBkZWZhdWx0IG9yIGJhc2VkIG9uIG1vZHVsZSBwYXJhbSkgKi8KKwlyYzMyNDM0X3dkdF9zZXQodGltZW91dCk7CisKIAkvKiByZXNldCBXVEMgdGltZW91dCBiaXQgYW5kIGVuYWJsZSBXRFQgKi8KIAluYW5kID0gMSA8PCBSQzMyNDM0X1dUQ19UTzsKIAlvciA9IDEgPDwgUkMzMjQzNF9XVENfRU47CiAKIAlTRVRfQklUUyh3ZHRfcmVnLT53dGMsIG9yLCBuYW5kKTsKKworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlN0YXJ0ZWQgd2F0Y2hkb2cgdGltZXIuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc3RvcCh2b2lkKQogeworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCiAJLyogRGlzYWJsZSBXRFQgKi8KIAlTRVRfQklUUyh3ZHRfcmVnLT53dGMsIDAsIDEgPDwgUkMzMjQzNF9XVENfRU4pOwotfQogCi1zdGF0aWMgaW50IHJjMzI0MzRfd2R0X3NldChpbnQgbmV3X3RpbWVvdXQpCi17Ci0JaW50IG1heF90byA9IFdUQ09NUDJTRUMoKHUzMiktMSk7Ci0KLQlpZiAobmV3X3RpbWVvdXQgPCAwIHx8IG5ld190aW1lb3V0ID4gbWF4X3RvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJIjogdGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLAotCQkJbWF4X3RvKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXRpbWVvdXQgPSBuZXdfdGltZW91dDsKLQl3cml0ZWwoU0VDMldUQ09NUCh0aW1lb3V0KSwgJndkdF9yZWctPnd0Y29tcGFyZSk7Ci0KLQlyZXR1cm4gMDsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXByaW50ayhLRVJOX0lORk8gUEZYICJTdG9wcGVkIHdhdGNoZG9nIHRpbWVyLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3Bpbmcodm9pZCkKIHsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKIAl3cml0ZWwoMCwgJndkdF9yZWctPnd0Y291bnQpOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcmMzMjQzNF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEzNywxMSArMTU4LDEwIEBACiB7CiAJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikgewogCQlyYzMyNDM0X3dkdF9zdG9wKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogZGlzYWJsaW5nIHdhdGNoZG9nIHRpbWVyXG4iKTsKIAkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBLQlVJTERfTU9ETkFNRQotCQkJIjogZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuIFdEVCB3aWxsIG5vdCBzdG9wICFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJImRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5LiBXRFQgd2lsbCBub3Qgc3RvcCFcbiIpOwogCQlyYzMyNDM0X3dkdF9waW5nKCk7CiAJfQogCWNsZWFyX2JpdCgwLCAmcmMzMjQzNF93ZHRfZGV2aWNlLmludXNlKTsKQEAgLTE4NSw4ICsyMDUsOSBAQAogCQkuaWRlbnRpdHkgPQkJIlJDMzI0MzRfV0RUIFdhdGNoZG9nIiwKIAl9OwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBXRElPQ19LRUVQQUxJVkU6Ci0JCXJjMzI0MzRfd2R0X3BpbmcoKTsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIAljYXNlIFdESU9DX0dFVFNUQVRVUzoKIAljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CkBAIC0xOTQsMTAgKzIxNSw2IEBACiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZhbHVlLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7Ci0JY2FzZSBXRElPQ19HRVRTVVBQT1JUOgotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7CiAJY2FzZSBXRElPQ19TRVRPUFRJT05TOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmdwLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIxMiw2ICsyMjksOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCXJjMzI0MzRfd2R0X3BpbmcoKTsKKwkJYnJlYWs7CiAJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ld190aW1lb3V0LCBhcmdwLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIyNyw3ICsyNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYzMyNDM0X3dkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmMzMjQzNF93ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IHJjMzI0MzRfd2R0X3dyaXRlLApAQCAtMjQyLDggKzI2Miw4IEBACiAJLmZvcHMJPSAmcmMzMjQzNF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9fZGV2aW5pdGRhdGEgPSBLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKLQkJIjogV2F0Y2hkb2cgVGltZXIgdmVyc2lvbiAiIFZFUlNJT04gIiwgdGltZXIgbWFyZ2luOiAlZCBzZWNcbiI7CitzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2RldmluaXRkYXRhID0gS0VSTl9JTkZPIFBGWAorCQkiV2F0Y2hkb2cgVGltZXIgdmVyc2lvbiAiIFZFUlNJT04gIiwgdGltZXIgbWFyZ2luOiAlZCBzZWNcbiI7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHJjMzI0MzRfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0yNTIsMjIgKzI3MiwzMyBAQAogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJyYjUzMl93ZHRfcmVzIik7CiAJaWYgKCFyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZXRyaWV2ZSByZXNvdXJjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmV0cmlldmUgcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJd2R0X3JlZyA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQpOwogCWlmICghd2R0X3JlZykgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmVtYXAgSS9PIHJlc291cmNlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZW1hcCBJL08gcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCisJLyogTWFrZSBzdXJlIHRoZSB3YXRjaGRvZyBpcyBub3QgcnVubmluZyAqLworCXJjMzI0MzRfd2R0X3N0b3AoKTsKKworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZTsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwlpZiAocmMzMjQzNF93ZHRfc2V0KHRpbWVvdXQpKSB7CisJCXJjMzI0MzRfd2R0X3NldChXQVRDSERPR19USU1FT1VUKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJ0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKKwkJCVdUQ09NUDJTRUMoKHUzMiktMSkpOworCX0KKwogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnJjMzI0MzRfd2R0X21pc2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZWdpc3RlciB3YXRjaGRvZyBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVnaXN0ZXIgd2F0Y2hkb2cgZGV2aWNlXG4iKTsKIAkJZ290byB1bm1hcDsKIAl9CiAKQEAgLTI4NywyMiArMzE4LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJjMzI0MzRfd2R0ID0gewotCS5wcm9iZQk9IHJjMzI0MzRfd2R0X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChyYzMyNDM0X3dkdF9yZW1vdmUpLAotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lID0gInJjMzI0MzRfd2R0IiwKK3N0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmMzMjQzNF93ZHRfc3RvcCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByYzMyNDM0X3dkdF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHJjMzI0MzRfd2R0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocmMzMjQzNF93ZHRfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSByYzMyNDM0X3dkdF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJCS5uYW1lID0gInJjMzI0MzRfd2R0IiwKIAl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByYzMyNDM0X3dkdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmMzMjQzNF93ZHQpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJjMzI0MzRfd2R0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByYzMyNDM0X3dkdF9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJjMzI0MzRfd2R0KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmMzMjQzNF93ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocmMzMjQzNF93ZHRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3JkYzMyMXhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3JkYzMyMXhfd2R0LmMKaW5kZXggYmY5MjgwMi4uMzZlMjIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yZGMzMjF4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmRjMzIxeF93ZHQuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vcmRjMzIxeF9kZWZzLmg+CiAKICNkZWZpbmUgUkRDX1dEVF9NQVNLCTB4ODAwMDAwMDAgLyogTWFzayAqLwogI2RlZmluZSBSRENfV0RUX0VOCTB4MDA4MDAwMDAgLyogRW5hYmxlIGJpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCmluZGV4IDA5Y2IxODMuLjFlOGYwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKQEAgLTE0LDkgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAKIC8qIFJJTyB1c2VzIHRoZSBOYXRTZW1pIFN1cGVyIEkvTyBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljYWwgZGV2aWNlCkBAIC04Niw4ICs4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmlvd2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHJpb3dkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfU0VUVElNRU9VVCwKQEAgLTE0Nyw3ICsxNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCByaW93ZCAqcCA9IHJpb3dkX2RldmljZTsKIApAQCAtMTYwLDEyICsxNTksMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmlvd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkubGxzZWVrID0Jbm9fbGxzZWVrLAotCS5pb2N0bCA9CXJpb3dkX2lvY3RsLAotCS5vcGVuID0JCXJpb3dkX29wZW4sCi0JLndyaXRlID0Jcmlvd2Rfd3JpdGUsCi0JLnJlbGVhc2UgPQlyaW93ZF9yZWxlYXNlLAorCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0JCW5vX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwgPQlyaW93ZF9pb2N0bCwKKwkub3BlbiA9CQkJcmlvd2Rfb3BlbiwKKwkud3JpdGUgPQkJcmlvd2Rfd3JpdGUsCisJLnJlbGVhc2UgPQkJcmlvd2RfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSByaW93ZF9taXNjZGV2ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCmluZGV4IGYxYWUzNzI5Li5jY2UxOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JtOWtfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCkBAIC01OSw4ICs1OSw4IEBACiBzdGF0aWMgaW50IHdkdF9ncGlfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLAogCQkJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKIAogc3RhdGljIGNvbnN0IGNoYXIgd2R0X2dwaV9uYW1lW10gPSAid2R0X2dwaSI7CkBAIC0zNDYsMTAgKzM0Niw5IEBACiB9CiAKIC8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2KQogewogCWludCByZXM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkdiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWNvbnN0IHN0cnVjdCByZXNvdXJjZQogCQkqIGNvbnN0IHJyID0gd2R0X2dwaV9nZXRfcmVzb3VyY2UocGR2LCBXRFRfUkVTT1VSQ0VfUkVHUywKIAkJCQkJCSAgSU9SRVNPVVJDRV9NRU0pLApAQCAtMzc0LDcgKzM3Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXM7CiAKQEAgLTM4NywxNSArMzg2LDEzIEBACiAKIAogLyogRGV2aWNlIGRyaXZlciBpbml0ICYgZXhpdCAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdkdF9ncGlfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIHdkdF9ncGlfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3Z3RfZ3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSB3ZHRfZ3BpX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSB3ZHRfZ3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3Aod2R0X2dwaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IE5VTEwsCi0JLnN1c3BlbmQJPSBOVUxMLAotCS5yZXN1bWUJCT0gTlVMTCwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTQwMywxMiArNDAwLDEyIEBACiAJYXRvbWljX3NldCgmb3BlbmNudCwgMSk7CiAJaWYgKHRpbWVvdXQgPiBNQVhfVElNRU9VVF9TRUNPTkRTKQogCQl0aW1lb3V0ID0gTUFYX1RJTUVPVVRfU0VDT05EUzsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2dwaV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQod2R0X2dwaV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCmluZGV4IGUxOWI0NTcuLmVlMWNhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCVdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIFNBMTF4MC9QWEEyeHgKICAqCi0gKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMCBPbGVnIERyb2tpbiA8Z3JlZW5AY3JpbWVhLmVkdT4KLSAqICAgICAgICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKgkoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CisgKgkgICAgQmFzZWQgb24gU29mdERvZyBkcml2ZXIgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMCAgICAgICAgICAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CiAgKgotICogICAgICAyNy8xMS8yMDAwIEluaXRpYWwgcmVsZWFzZQorICoJMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX1BYQQotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtb3N0Lmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMKaW5kZXggMzI2NmRhYWFlLi5kMWMzOTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKgk2MHh4IFNpbmdsZSBCb2FyZCBDb21wdXRlciBXYXRjaGRvZyBUaW1lciBkcml2ZXIgZm9yIExpbnV4IDIuMi54CiAgKgotICogICAgICBCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3guCisgKglCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3guCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjODM2MC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKaW5kZXggYWU3NGY2Yi4uYjZlNjc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKQEAgLTQsMTIgKzQsMTIgQEAKICAqCShjKSBDb3B5cmlnaHQgMjAwNSBXZWJjb24sIEluYy4KICAqCiAgKglCYXNlZCBvbiBpYjcwMHdkdC5jLCB3aGljaCBpcyBiYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYyB3aGljaCBpcyBiYXNlZAotICogICAgICBvbiBhY3F1aXJld2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCisgKglvbiBhY3F1aXJld2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAxIENoYXJsZXMgSG93ZXMgPGNob3dlc0B2c29sLm5ldD4KICAqCi0gKiAgICAgIEJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFjcXVpcmV3ZHQuYyB3aGljaAotICogICAgICAgaXMgYmFzZWQgb24gd2R0LmMuCisgKglCYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhY3F1aXJld2R0LmMgd2hpY2gKKyAqCWlzIGJhc2VkIG9uIHdkdC5jLgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMC0yMDAxIE1hcmVrIE1pY2hhbGtpZXdpY3ogPG1hcmVrbUBsaW51eC5vcmcucGw+CiAgKgpAQCAtMzAsOSArMzAsOSBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKLSAqICAgICAgMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0gKiAgICAgICAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKKyAqCTE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqCSAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKyAqCSAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYwppbmRleCAwNjU1M2RlLi5lNDY3ZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYwpAQCAtMzUsNyArMzUsOCBAQAogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogI2RlZmluZSBFUFhDM19XQVRDSERPR19DVExfUkVHIDB4MWVlIC8qIHdyaXRlIDEgdG8gZW5hYmxlLCAwIHRvIGRpc2FibGUgKi8KICNkZWZpbmUgRVBYQzNfV0FUQ0hET0dfUEVUX1JFRyAweDFlZiAvKiB3cml0ZSBhbnl0aGluZyB0byBwZXQgb25jZSBlbmFibGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYwppbmRleCAyM2RhM2NjLi5iNWUxOWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNkZWZpbmUgVUFSVDJfSVJRCTB4MDQJLyogU2VyaWFsMSAqLwogLyogNSAtNyBhcmUgcmVzZXJ2ZWQgKi8KIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBQRlggU0MxMjAwX01PRFVMRV9WRVI7CitzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gUEZYIFNDMTIwMF9NT0RVTEVfVkVSOwogc3RhdGljIGludCB0aW1lb3V0ID0gMTsKIHN0YXRpYyBpbnQgaW8gPSAtMTsKIHN0YXRpYyBpbnQgaW9fbGVuID0gMjsJCS8qIGZvciBub24gcGx1ZyBhbmQgcGxheSAqLwpAQCAtMzkyLDcgKzM5Miw3IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50aygiJXNcbiIsIGJhbm5lcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIGJhbm5lcik7CiAKICNpZiBkZWZpbmVkIENPTkZJR19QTlAKIAlpZiAoaXNhcG5wKSB7CkBAIC00NzcsNiArNDc3LDcgQEAKIG1vZHVsZV9leGl0KHNjMTIwMHdkdF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiWndhbmUgTXdhaWthbWJvIDx6d2FuZUBjb21tZmlyZXNlcnZpY2VzLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDcvUEM5NzMwNyB3YXRjaGRvZyBjb21wb25lbnQiKTsKK01PRFVMRV9ERVNDUklQVElPTigKKwkiRHJpdmVyIGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDcvUEM5NzMwNyB3YXRjaGRvZyBjb21wb25lbnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jCmluZGV4IGEyYjZjMTAuLjUyYjYzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKglBTUQgRWxhbiBTQzUyMCBwcm9jZXNzb3IgV2F0Y2hkb2cgVGltZXIgZHJpdmVyCiAgKgotICogICAgICBCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3gsCi0gKiAgICAgICAgICAgYW5kIHNiYzYweHh3ZHQuYyBieSBKYWtvYiBPZXN0ZXJnYWFyZCA8amFrb2JAdW50aG91Z2h0Lm5ldD4KKyAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCwKKyAqCSAgICAgYW5kIHNiYzYweHh3ZHQuYyBieSBKYWtvYiBPZXN0ZXJnYWFyZCA8amFrb2JAdW50aG91Z2h0Lm5ldD4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqCVRoZSBhdXRob3JzIGRvIE5PVCBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUgd2FycmFudHkgZm9yCiAgKglhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZCAiQVMtSVMiIGluCi0gKiAgICAgIHRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgorICoJdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAxICAgIFNjb3R0IEplbm5pbmdzIDxsaW51eGRyaXZlcnNAb3JvLm5ldD4KICAqICAgICAgICAgICA5LzI3IC0gMjAwMSAgICAgIFtJbml0aWFsIHJlbGVhc2VdCkBAIC00MzgsNiArNDM4LDcgQEAKIG1vZHVsZV9leGl0KHNjNTIwX3dkdF91bmxvYWQpOwogCiBNT0RVTEVfQVVUSE9SKCJTY290dCBhbmQgQmlsbCBKZW5uaW5ncyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHdhdGNoZG9nIHRpbWVyIGluIEFNRCBcIkVsYW5cIiBTQzUyMCB1UHJvY2Vzc29yIik7CitNT0RVTEVfREVTQ1JJUFRJT04oCisJIkRyaXZlciBmb3Igd2F0Y2hkb2cgdGltZXIgaW4gQU1EIFwiRWxhblwiIFNDNTIwIHVQcm9jZXNzb3IiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwppbmRleCAyZTU2Y2FkLi44YTFmMGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCkBAIC0yLDcgKzIsNyBAQAogICoJU01zQyAzN0I3ODcgV2F0Y2hkb2cgVGltZXIgZHJpdmVyIGZvciBMaW51eCAyLjYueC54CiAgKgogICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+Ci0gKiAgICAgICBhbmQgc29tZSBvdGhlciBleGlzdGluZyBkcml2ZXJzCisgKglhbmQgc29tZSBvdGhlciBleGlzdGluZyBkcml2ZXJzCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTExLDcgKzExLDcgQEAKICAqCiAgKglUaGUgYXV0aG9ycyBkbyBOT1QgYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlIHdhcnJhbnR5IGZvcgogICoJYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQgIkFTLUlTIiBpbgotICogICAgICB0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KKyAqCXRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgogICoKICAqCShDKSBDb3B5cmlnaHQgMjAwMy0yMDA2ICBTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+CiAgKgpAQCAtMjIsMTkgKzIyLDE5IEBACiAgKgogICogIFRoZW9yeSBvZiBvcGVyYXRpb246CiAgKgotICogICAgICBBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbgotICogICAgICByZXNldCB0aGUgY29tcHV0ZXIgc3lzdGVtIGluIGNhc2Ugb2YgYSBzb2Z0d2FyZSBmYXVsdC4KLSAqICAgICAgWW91IHByb2JhYmx5IGtuZXcgdGhhdCBhbHJlYWR5LgorICoJQSBXYXRjaGRvZyBUaW1lciAoV0RUKSBpcyBhIGhhcmR3YXJlIGNpcmN1aXQgdGhhdCBjYW4KKyAqCXJlc2V0IHRoZSBjb21wdXRlciBzeXN0ZW0gaW4gY2FzZSBvZiBhIHNvZnR3YXJlIGZhdWx0LgorICoJWW91IHByb2JhYmx5IGtuZXcgdGhhdCBhbHJlYWR5LgogICoKLSAqICAgICAgVXN1YWxseSBhIHVzZXJzcGFjZSBkYWVtb24gd2lsbCBub3RpZnkgdGhlIGtlcm5lbCBXRFQgZHJpdmVyCi0gKiAgICAgIHZpYSB0aGUgL2Rldi93YXRjaGRvZyBzcGVjaWFsIGRldmljZSBmaWxlIHRoYXQgdXNlcnNwYWNlIGlzCi0gKiAgICAgIHN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbgotICogICAgICBvY2N1cnMsIHRoZSBkcml2ZXIgd2lsbCB1c3VhbGx5IHRlbGwgdGhlIGhhcmR3YXJlIHdhdGNoZG9nCi0gKiAgICAgIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciwgYW5kIHRoYXQgdGhlIHdhdGNoZG9nIHNob3VsZCB3YWl0Ci0gKiAgICAgIGZvciB5ZXQgYW5vdGhlciBsaXR0bGUgd2hpbGUgdG8gcmVzZXQgdGhlIHN5c3RlbS4KLSAqICAgICAgSWYgdXNlcnNwYWNlIGZhaWxzIChSQU0gZXJyb3IsIGtlcm5lbCBidWcsIHdoYXRldmVyKSwgdGhlCi0gKiAgICAgIG5vdGlmaWNhdGlvbnMgY2Vhc2UgdG8gb2NjdXIsIGFuZCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2lsbAotICogICAgICByZXNldCB0aGUgc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCisgKglVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIFdEVCBkcml2ZXIKKyAqCXZpYSB0aGUgL2Rldi93YXRjaGRvZyBzcGVjaWFsIGRldmljZSBmaWxlIHRoYXQgdXNlcnNwYWNlIGlzCisgKglzdGlsbCBhbGl2ZSwgYXQgcmVndWxhciBpbnRlcnZhbHMuICBXaGVuIHN1Y2ggYSBub3RpZmljYXRpb24KKyAqCW9jY3VycywgdGhlIGRyaXZlciB3aWxsIHVzdWFsbHkgdGVsbCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cKKyAqCXRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciwgYW5kIHRoYXQgdGhlIHdhdGNoZG9nIHNob3VsZCB3YWl0CisgKglmb3IgeWV0IGFub3RoZXIgbGl0dGxlIHdoaWxlIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCisgKglJZiB1c2Vyc3BhY2UgZmFpbHMgKFJBTSBlcnJvciwga2VybmVsIGJ1Zywgd2hhdGV2ZXIpLCB0aGUKKyAqCW5vdGlmaWNhdGlvbnMgY2Vhc2UgdG8gb2NjdXIsIGFuZCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2lsbAorICoJcmVzZXQgdGhlIHN5c3RlbSAoY2F1c2luZyBhIHJlYm9vdCkgYWZ0ZXIgdGhlIHRpbWVvdXQgb2NjdXJzLgogICoKICAqIENyZWF0ZSBkZXZpY2Ugd2l0aDoKICAqICBta25vZCAvZGV2L3dhdGNoZG9nIGMgMTAgMTMwCkBAIC00ODUsNyArNDg1LDcgQEAKIAljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCW5ld190aW1lb3V0ID0gdGltZW91dDsKIAkJaWYgKHVuaXQgPT0gVU5JVF9NSU5VVEUpCi0JCQkgIG5ld190aW1lb3V0ICo9IDYwOworCQkJbmV3X3RpbWVvdXQgKj0gNjA7CiAJCXJldHVybiBwdXRfdXNlcihuZXdfdGltZW91dCwgdWFyZy5pKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc29mdGRvZy5jIGIvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKaW5kZXggNzIwNGY5Ni4uZWJjYzljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKQEAgLTEsNyArMSw4IEBACiAvKgogICoJU29mdERvZwkwLjA3OglBIFNvZnR3YXJlIFdhdGNoZG9nIERldmljZQogICoKLSAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKKyAqCQkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTMyLDcgKzMzLDcgQEAKICAqCUFkZGVkIFdESU9DX0dFVFRJTUVPVVQgYW5kIFdESU9DX1NFVFRJTU9VVC4KICAqCiAgKiAgMjAwMjA1MzAgSm9lbCBCZWNrZXIgPGpvZWwuYmVja2VyQG9yYWNsZS5jb20+Ci0gKiAgCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KKyAqCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYwppbmRleCAzYzdhYTQxLi5hOWM3ZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKQEAgLTQ2Miw2ICs0NjIsNyBAQAogbW9kdWxlX2V4aXQod2R0X2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sIFNhbXVlbCBUYXJkaWV1IDxzYW1AcmZjMTE0OS5uZXQ+Iik7CitNT0RVTEVfQVVUSE9SKCJNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sICIKKwkJIlNhbXVlbCBUYXJkaWV1IDxzYW1AcmZjMTE0OS5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInc4MzY5N2hmL2hnIFdEVCBkcml2ZXIiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCmluZGV4IGFkYThhZDguLjg4M2I1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYwpAQCAtMiw3ICsyLDcgQEAKICAqCXc4MzY5N3VnL3VmIFdEVCBkcml2ZXIKICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDggRmxlbW1pbmcgRnJhbnNlbiA8ZmZAbnJ2aXNzaW5nLm5ldD4KLSAqICAgICAgICAgICAgICByZXVzZWQgb3JpZ2luYWwgY29kZSB0byBzdXBvcHJ0IHc4MzY5N3VnL3VmLgorICoJCXJldXNlZCBvcmlnaW5hbCBjb2RlIHRvIHN1cHBvcnQgdzgzNjk3dWcvdWYuCiAgKgogICoJQmFzZWQgb24gdzgzNjI3aGZfd2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWR2YW50ZWNod2R0LmMKICAqCXdoaWNoIGlzIGJhc2VkIG9uIHdkdC5jLgpAQCAtNzksNyArNzksNyBAQAogCQkJCQkJCShzYW1lIGFzIEVGRVIpICovCiAjZGVmaW5lIFdEVF9FRkRSIChXRFRfRUZJUisxKSAvKiBFeHRlbmRlZCBGdW5jdGlvbiBEYXRhIFJlZ2lzdGVyICovCiAKLXN0YXRpYyB2b2lkIHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQorc3RhdGljIGludCB3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAJdW5zaWduZWQgY2hhciB2ZXJzaW9uOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBXODM2OTdVRy9VRiBjb3VsZCBiZSBmb3VuZFxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJb3V0Yl9wKDB4MDcsIFdEVF9FRkVSKTsgLyogcG9pbnQgdG8gbG9naWNhbCBkZXZpY2UgbnVtYmVyIHJlZyAqLwpAQCAtMTEwLDYgKzExMCw4IEBACiAJb3V0Yl9wKDB4MzAsIFdEVF9FRkVSKTsgLyogc2VsZWN0IENSMzAgKi8KIAljID0gaW5iX3AoV0RUX0VGRFIpOwogCW91dGJfcChjIHx8IDB4MDEsIFdEVF9FRkRSKTsgLyogc2V0IGJpdCAwIHRvIGFjdGl2YXRlIEdQSU8yICovCisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdzgzNjk3dWdfdW5zZWxlY3Rfd2RfcmVnaXN0ZXIodm9pZCkKQEAgLTExNywxMSArMTE5LDE0IEBACiAJb3V0Yl9wKDB4QUEsIFdEVF9FRkVSKTsgLyogTGVhdmUgZXh0ZW5kZWQgZnVuY3Rpb24gbW9kZSAqLwogfQogCi1zdGF0aWMgdm9pZCB3ODM2OTd1Z19pbml0KHZvaWQpCitzdGF0aWMgaW50IHc4MzY5N3VnX2luaXQodm9pZCkKIHsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgdDsKIAotCXc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpOworCXJldCA9IHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKIAogCW91dGJfcCgweEY2LCBXRFRfRUZFUik7IC8qIFNlbGVjdCBDUkY2ICovCiAJdCA9IGluYl9wKFdEVF9FRkRSKTsgICAgLyogcmVhZCBDUkY2ICovCkBAIC0xMzcsMTMgKzE0MiwxNSBAQAogCW91dGJfcCh0LCBXRFRfRUZEUik7ICAgIC8qIFdyaXRlIGJhY2sgdG8gQ1JGNSAqLwogCiAJdzgzNjk3dWdfdW5zZWxlY3Rfd2RfcmVnaXN0ZXIoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd2R0X2N0cmwoaW50IHRpbWVvdXQpCiB7CiAJc3Bpbl9sb2NrKCZpb19sb2NrKTsKIAotCXc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpOworCWlmICh3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIoKSA8IDApCisJCXJldHVybjsKIAogCW91dGJfcCgweEY0LCBXRFRfRUZFUik7ICAgIC8qIFNlbGVjdCBDUkY0ICovCiAJb3V0Yl9wKHRpbWVvdXQsIFdEVF9FRkRSKTsgLyogV3JpdGUgVGltZW91dCBjb3VudGVyIHRvIENSRjQgKi8KQEAgLTM0Nyw3ICszNTQsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3ODM2OTd1Z19pbml0KCk7CisJcmV0ID0gdzgzNjk3dWdfaW5pdCgpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byB1bnJlZ19yZWdpb25zOwogCiAJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogCWlmIChyZXQgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCmluZGV4IDI1MjVkYTUuLjA1NjAxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHdkdF9zZXRfdGltZW91dChuZXdfdGltZW91dCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXdkdF9rZWVwYWxpdmUoKTsKIAkJLyogRmFsbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaCBiL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmgKaW5kZXggZGIzNDg1My4uMGUzYTQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCkBAIC0xMSw5ICsxMSw5IEBACiAgKgogICoJaHR0cDovL3d3dy5jeW1ydS5uZXQKICAqCi0gKglUaGlzIGRyaXZlciBpcyBwcm92aWRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZAotICoJaGVyZWluIGJ5IHJlZmVyZW5jZS4gVGhlIGRyaXZlciBpcyBwcm92aWRlZCB3aXRob3V0IHdhcnJhbnR5IG9yCi0gKglzdXBwb3J0LgorICoJVGhpcyBkcml2ZXIgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICoJaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuIFRoZSBkcml2ZXIgaXMgcHJvdmlkZWQgd2l0aG91dAorICoJd2FycmFudHkgb3Igc3VwcG9ydC4KICAqCiAgKglSZWxlYXNlIDAuMDQuCiAgKgpAQCAtMzksMTMgKzM5LDEzIEBACiAvKiBwcm9ncmFtbWFibGUgb3V0cHV0czogKi8KICNkZWZpbmUgV0RUX1BST0dPVVQJCShpbysxNSkJLyogd3I9ZW5hYmxlLCByZD1kaXNhYmxlICovCiAKLQkJCQkJCQkJLyogRkFOIDUwMSA1MDAgKi8KLSNkZWZpbmUgV0RDX1NSX1dDQ1IJCTEJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICBYICAqLwotI2RlZmluZSBXRENfU1JfVEdPT0QJCTIJCQkJLyogIFggICBYICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX0lTT0kwCQk0CQkJCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9JU0lJMQkJOAkJCQkvKiAgWCAgIFggICBYICAqLwotI2RlZmluZSBXRENfU1JfRkFOR09PRAkJMTYJCQkJLyogIFggICAtICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX1BTVU9WRVIJCTMyCS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX1BTVVVORFIJCTY0CS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX0lSUQkJMTI4CS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgWCAgKi8KKwkJCQkJCQkgLyogRkFOIDUwMSA1MDAgKi8KKyNkZWZpbmUgV0RDX1NSX1dDQ1IJCTEJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICBYICAqLworI2RlZmluZSBXRENfU1JfVEdPT0QJCTIJCQkgLyogIFggICBYICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX0lTT0kwCQk0CQkJIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9JU0lJMQkJOAkJCSAvKiAgWCAgIFggICBYICAqLworI2RlZmluZSBXRENfU1JfRkFOR09PRAkJMTYJCQkgLyogIFggICAtICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX1BTVU9WRVIJCTMyCS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX1BTVVVORFIJCTY0CS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX0lSUQkJMTI4CS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgWCAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKaW5kZXggZWRkYjkxOC4uM2JiZWZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqCUluZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlIFdEVDUwMC81MDEgZHJpdmVyCisgKglJbmR1c3RyaWFsIENvbXB1dGVyIFNvdXJjZSBXRFQ1MDEgZHJpdmVyCiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk2LTE5OTcgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCkBAIC04MiwxNCArODIsMTYgQEAKIG1vZHVsZV9wYXJhbShpcnEsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIldEVCBpcnEgKGRlZmF1bHQ9MTEpIik7CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyogU3VwcG9ydCBmb3IgdGhlIEZhbiBUYWNob21ldGVyIG9uIHRoZSBXRFQ1MDEtUCAqLwogc3RhdGljIGludCB0YWNob21ldGVyOwotCiBtb2R1bGVfcGFyYW0odGFjaG9tZXRlciwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGFjaG9tZXRlciwKIAkJIldEVDUwMS1QIEZhbiBUYWNob21ldGVyIHN1cHBvcnQgKDA9ZGlzYWJsZSwgZGVmYXVsdD0wKSIpOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisKK3N0YXRpYyBpbnQgdHlwZSA9IDUwMDsKK21vZHVsZV9wYXJhbSh0eXBlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0eXBlLAorCQkiV0RUNTAxLVAgQ2FyZCB0eXBlICg1MDAgb3IgNTAxICwgZGVmYXVsdD01MDApIik7CiAKIC8qCiAgKglQcm9ncmFtbWluZyBzdXBwb3J0CkBAIC0xNTgsNyArMTYwLDcgQEAKICAqCXJlbG9hZGluZyB0aGUgY2FzY2FkZSBjb3VudGVyLgogICovCiAKLXN0YXRpYyBpbnQgd2R0X3Bpbmcodm9pZCkKK3N0YXRpYyB2b2lkIHdkdF9waW5nKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKQEAgLTE2OSw3ICsxNzEsNiBAQAogCXdkdF9jdHJfbG9hZCgxLCB3ZF9oZWFydGJlYXQpOwkvKiBIZWFydGJlYXQgKi8KIAlvdXRiX3AoMCwgV0RUX0RDKTsJCS8qIEVuYWJsZSB3YXRjaGRvZyAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTkzLDcgKzE5NCw2IEBACiAKIC8qKgogICoJd2R0X2dldF9zdGF0dXM6Ci0gKglAc3RhdHVzOgkJdGhlIG5ldyBzdGF0dXMuCiAgKgogICoJRXh0cmFjdCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gYSBXRFQgd2F0Y2hkb2cgZGV2aWNlLiBUaGVyZSBhcmUKICAqCXNldmVyYWwgYm9hcmQgdmFyaWFudHMgc28gd2UgaGF2ZSB0byBrbm93IHdoaWNoIGJpdHMgYXJlIHZhbGlkLiBTb21lCkBAIC0yMDIsMzYgKzIwMiwzNSBAQAogICoJd2UgdGhlbiBtYXAgdGhlIGJpdHMgb250byB0aGUgc3RhdHVzIGlvY3RsIGZsYWdzLgogICovCiAKLXN0YXRpYyBpbnQgd2R0X2dldF9zdGF0dXMoaW50ICpzdGF0dXMpCitzdGF0aWMgaW50IHdkdF9nZXRfc3RhdHVzKHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBuZXdfc3RhdHVzOworCWludCBzdGF0dXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKIAluZXdfc3RhdHVzID0gaW5iX3AoV0RUX1NSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCi0JKnN0YXR1cyA9IDA7CiAJaWYgKG5ld19zdGF0dXMgJiBXRENfU1JfSVNPSTApCi0JCSpzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMTsKKwkJc3RhdHVzIHw9IFdESU9GX0VYVEVSTjE7CiAJaWYgKG5ld19zdGF0dXMgJiBXRENfU1JfSVNJSTEpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMjsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfVEdPT0QpKQotCQkqc3RhdHVzIHw9IFdESU9GX09WRVJIRUFUOwotCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfUE9XRVJPVkVSOwotCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfUE9XRVJVTkRFUjsKLQlpZiAodGFjaG9tZXRlcikgewotCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQotCQkJKnN0YXR1cyB8PSBXRElPRl9GQU5GQVVMVDsKKwkJc3RhdHVzIHw9IFdESU9GX0VYVEVSTjI7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfVEdPT0QpKQorCQkJc3RhdHVzIHw9IFdESU9GX09WRVJIRUFUOworCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQorCQkJc3RhdHVzIHw9IFdESU9GX1BPV0VST1ZFUjsKKwkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKKwkJCXN0YXR1cyB8PSBXRElPRl9QT1dFUlVOREVSOworCQlpZiAodGFjaG9tZXRlcikgeworCQkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9GQU5HT09EKSkKKwkJCQlzdGF0dXMgfD0gV0RJT0ZfRkFORkFVTFQ7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3RhdHVzOwogfQogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKIC8qKgogICoJd2R0X2dldF90ZW1wZXJhdHVyZToKICAqCkBAIC0yMzksNyArMjM4LDcgQEAKICAqCWZhcmVuaGVpdC4gSXQgd2FzIGRlc2lnbmVkIGJ5IGFuIGltcGVyaWFsIG1lYXN1cmVtZW50IGx1ZGRpdGUuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfZ2V0X3RlbXBlcmF0dXJlKGludCAqdGVtcGVyYXR1cmUpCitzdGF0aWMgaW50IHdkdF9nZXRfdGVtcGVyYXR1cmUodm9pZCkKIHsKIAl1bnNpZ25lZCBzaG9ydCBjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNDcsMTAgKzI0NiwxOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCWMgPSBpbmJfcChXRFRfUlQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7Ci0JKnRlbXBlcmF0dXJlID0gKGMgKiAxMSAvIDE1KSArIDc7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIChjICogMTEgLyAxNSkgKyA3OwogfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisKK3N0YXRpYyB2b2lkIHdkdF9kZWNvZGVfNTAxKGludCBzdGF0dXMpCit7CisJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1RHT09EKSkKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiT3ZlcmhlYXQgYWxhcm0uKCVkKVxuIiwgaW5iX3AoV0RUX1JUKSk7CisJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQorCQlwcmludGsoS0VSTl9DUklUICJQU1Ugb3ZlciB2b2x0YWdlLlxuIik7CisJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQorCQlwcmludGsoS0VSTl9DUklUICJQU1UgdW5kZXIgdm9sdGFnZS5cbiIpOworfQogCiAvKioKICAqCXdkdF9pbnRlcnJ1cHQ6CkBAIC0yNzUsMTggKzI4MiwxMyBAQAogCiAJcHJpbnRrKEtFUk5fQ1JJVCAiV0RUIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWYgKCEoc3RhdHVzICYgV0RDX1NSX1RHT09EKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiT3ZlcmhlYXQgYWxhcm0uKCVkKVxuIiwgaW5iX3AoV0RUX1JUKSk7Ci0JaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQotCQlwcmludGsoS0VSTl9DUklUICJQU1Ugb3ZlciB2b2x0YWdlLlxuIik7Ci0JaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQotCQlwcmludGsoS0VSTl9DUklUICJQU1UgdW5kZXIgdm9sdGFnZS5cbiIpOwotCWlmICh0YWNob21ldGVyKSB7Ci0JCWlmICghKHN0YXR1cyAmIFdEQ19TUl9GQU5HT09EKSkKLQkJCXByaW50ayhLRVJOX0NSSVQgIlBvc3NpYmxlIGZhbiBmYXVsdC5cbiIpOworCWlmICh0eXBlID09IDUwMSkgeworCQl3ZHRfZGVjb2RlXzUwMShzdGF0dXMpOworCQlpZiAodGFjaG9tZXRlcikgeworCQkJaWYgKCEoc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQorCQkJCXByaW50ayhLRVJOX0NSSVQgIlBvc3NpYmxlIGZhbiBmYXVsdC5cbiIpOworCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1dDQ1IpKSB7CiAjaWZkZWYgU09GVFdBUkVfUkVCT09UCiAjaWZkZWYgT05MWV9URVNUSU5HCkBAIC0zNjYsMTcgKzM2OCwxOCBAQAogCiAJLyogQWRkIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBjYXJkIHdlIGhhdmUgKi8KIAlpZGVudC5vcHRpb25zIHw9IChXRElPRl9FWFRFUk4xfFdESU9GX0VYVEVSTjIpOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWRlbnQub3B0aW9ucyB8PSAoV0RJT0ZfT1ZFUkhFQVR8V0RJT0ZfUE9XRVJVTkRFUnxXRElPRl9QT1dFUk9WRVIpOwotCWlmICh0YWNob21ldGVyKQotCQlpZGVudC5vcHRpb25zIHw9IFdESU9GX0ZBTkZBVUxUOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCWlkZW50Lm9wdGlvbnMgfD0gKFdESU9GX09WRVJIRUFUfFdESU9GX1BPV0VSVU5ERVJ8CisJCQkJCQkJV0RJT0ZfUE9XRVJPVkVSKTsKKwkJaWYgKHRhY2hvbWV0ZXIpCisJCQlpZGVudC5vcHRpb25zIHw9IFdESU9GX0ZBTkZBVUxUOworCX0KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgogCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkgPyAtRUZBVUxUIDogMDsKIAljYXNlIFdESU9DX0dFVFNUQVRVUzoKLQkJd2R0X2dldF9zdGF0dXMoJnN0YXR1cyk7CisJCXN0YXR1cyA9IHdkdF9nZXRfc3RhdHVzKCk7CiAJCXJldHVybiBwdXRfdXNlcihzdGF0dXMsIHApOwogCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKIAkJcmV0dXJuIHB1dF91c2VyKDAsIHApOwpAQCAtNDQ2LDcgKzQ0OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyoqCiAgKgl3ZHRfdGVtcF9yZWFkOgogICoJQGZpbGU6IGZpbGUgaGFuZGxlIHRvIHRoZSB3YXRjaGRvZyBib2FyZApAQCAtNDYxLDEwICs0NjMsNyBAQAogc3RhdGljIHNzaXplX3Qgd2R0X3RlbXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwdHIpCiB7Ci0JaW50IHRlbXBlcmF0dXJlOwotCi0JaWYgKHdkdF9nZXRfdGVtcGVyYXR1cmUoJnRlbXBlcmF0dXJlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaW50IHRlbXBlcmF0dXJlID0gd2R0X2dldF90ZW1wZXJhdHVyZSgpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsICZ0ZW1wZXJhdHVyZSwgMSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNDk3LDcgKzQ5Niw2IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogLyoqCiAgKglub3RpZnlfc3lzOgpAQCAtNTM5LDcgKzUzNyw2IEBACiAJLmZvcHMJPSAmd2R0X2ZvcHMsCiB9OwogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF90ZW1wX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApAQCAtNTUzLDcgKzU1MCw2IEBACiAJLm5hbWUJPSAidGVtcGVyYXR1cmUiLAogCS5mb3BzCT0gJndkdF90ZW1wX2ZvcHMsCiB9OwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAKIC8qCiAgKglUaGUgV0RUIGNhcmQgbmVlZHMgdG8gbGVhcm4gYWJvdXQgc29mdCBzaHV0ZG93bnMgaW4gb3JkZXIgdG8KQEAgLTU3Nyw5ICs1NzMsOCBAQAogc3RhdGljIHZvaWQgX19leGl0IHdkdF9leGl0KHZvaWQpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQltaXNjX2RlcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKwlpZiAodHlwZSA9PSA1MDEpCisJCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKIAlmcmVlX2lycShpcnEsIE5VTEwpOwogCXJlbGVhc2VfcmVnaW9uKGlvLCA4KTsKQEAgLTU5NywxMiArNTkyLDE3IEBACiB7CiAJaW50IHJldDsKIAorCWlmICh0eXBlICE9IDUwMCAmJiB0eXBlICE9IDUwMSkgeworCQlwcmludGsoS0VSTl9FUlIgIndkdDogdW5rbm93biBjYXJkIHR5cGUgJyVkJy5cbiIsIHR5cGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2U7CiAJICAgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHdkdF9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCkpIHsKIAkJd2R0X3NldF9oZWFydGJlYXQoV0RfVElNTyk7Ci0JCXByaW50ayhLRVJOX0lORk8gIndkdDogaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMCA8IGhlYXJ0YmVhdCA8IDY1NTM2LCB1c2luZyAlZFxuIiwKLQkJCVdEX1RJTU8pOworCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IGhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlICIKKwkJCSIwIDwgaGVhcnRiZWF0IDwgNjU1MzYsIHVzaW5nICVkXG4iLCBXRF9USU1PKTsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCA4LCAid2R0NTAxcCIpKSB7CkBAIC02MjUsMTUgKzYyNSwxNCBAQAogCQlnb3RvIG91dGlycTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJ3ZHQ6IGNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAotCQkJCQkJCVRFTVBfTUlOT1IsIHJldCk7Ci0JCWdvdG8gb3V0cmJ0OworCWlmICh0eXBlID09IDUwMSkgeworCQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIndkdDogY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgIgorCQkJCSJvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwgVEVNUF9NSU5PUiwgcmV0KTsKKwkJCWdvdG8gb3V0cmJ0OworCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7CiAJaWYgKHJldCkgewpAQCAtNjQzLDI4ICs2NDIsMjUgQEAKIAkJZ290byBvdXRtaXNjOwogCX0KIAotCXJldCA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiV0RUNTAwLzUwMS1QIGRyaXZlciAwLjEwIGF0IDB4JTA0eCAoSW50ZXJydXB0ICVkKS4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAorCXByaW50ayhLRVJOX0lORk8gIldEVDUwMC81MDEtUCBkcml2ZXIgMC4xMCAiCisJCSJhdCAweCUwNHggKEludGVycnVwdCAlZCkuIGhlYXJ0YmVhdD0lZCBzZWMgKG5vd2F5b3V0PSVkKVxuIiwKIAkJaW8sIGlycSwgaGVhcnRiZWF0LCBub3dheW91dCk7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IEZhbiBUYWNob21ldGVyIGlzICVzXG4iLAorCWlmICh0eXBlID09IDUwMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBGYW4gVGFjaG9tZXRlciBpcyAlc1xuIiwKIAkJCQkodGFjaG9tZXRlciA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpKTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogb3V0bWlzYzoKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKKwlpZiAodHlwZSA9PSA1MDEpCisJCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKIG91dHJidDoKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogb3V0aXJxOgogCWZyZWVfaXJxKGlycSwgTlVMTCk7CiBvdXRyZWc6CiAJcmVsZWFzZV9yZWdpb24oaW8sIDgpOwotCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIG1vZHVsZV9pbml0KHdkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCmluZGV4IDYwZTI4ZDQuLjkwZWY3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAod2R0OTc3X3NldF90aW1lb3V0KG5ld190aW1lb3V0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJd2R0OTc3X2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IGViMGRmZGUuLjMwOTYzYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0yNiw5ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vc3luY19iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgpAQCAtNTAsMzYgKzUyLDU1IEBACiAvKiBJUlEgPC0+IElQSSBtYXBwaW5nICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBpcGlfdG9faXJxW1hFTl9OUl9JUElTXSkgPSB7WzAgLi4uIFhFTl9OUl9JUElTLTFdID0gLTF9OwogCi0vKiBQYWNrZWQgSVJRIGluZm9ybWF0aW9uOiBiaW5kaW5nIHR5cGUsIHN1Yi10eXBlIGluZGV4LCBhbmQgZXZlbnQgY2hhbm5lbC4gKi8KLXN0cnVjdCBwYWNrZWRfaXJxCi17Ci0JdW5zaWduZWQgc2hvcnQgZXZ0Y2huOwotCXVuc2lnbmVkIGNoYXIgaW5kZXg7Ci0JdW5zaWduZWQgY2hhciB0eXBlOwotfTsKLQotc3RhdGljIHN0cnVjdCBwYWNrZWRfaXJxIGlycV9pbmZvW05SX0lSUVNdOwotCi0vKiBCaW5kaW5nIHR5cGVzLiAqLwotZW51bSB7Ci0JSVJRVF9VTkJPVU5ELAorLyogSW50ZXJydXB0IHR5cGVzLiAqLworZW51bSB4ZW5faXJxX3R5cGUgeworCUlSUVRfVU5CT1VORCA9IDAsCiAJSVJRVF9QSVJRLAogCUlSUVRfVklSUSwKIAlJUlFUX0lQSSwKIAlJUlFUX0VWVENITgogfTsKIAotLyogQ29udmVuaWVudCBzaG9ydGhhbmQgZm9yIHBhY2tlZCByZXByZXNlbnRhdGlvbiBvZiBhbiB1bmJvdW5kIElSUS4gKi8KLSNkZWZpbmUgSVJRX1VOQk9VTkQJbWtfaXJxX2luZm8oSVJRVF9VTkJPVU5ELCAwLCAwKQorLyoKKyAqIFBhY2tlZCBJUlEgaW5mb3JtYXRpb246CisgKiB0eXBlIC0gZW51bSB4ZW5faXJxX3R5cGUKKyAqIGV2ZW50IGNoYW5uZWwgLSBpcnEtPmV2ZW50IGNoYW5uZWwgbWFwcGluZworICogY3B1IC0gY3B1IHRoaXMgZXZlbnQgY2hhbm5lbCBpcyBib3VuZCB0bworICogaW5kZXggLSB0eXBlLXNwZWNpZmljIGluZm9ybWF0aW9uOgorICogICAgUElSUSAtIHZlY3Rvciwgd2l0aCBNU0IgYmVpbmcgIm5lZWRzIEVJTyIKKyAqICAgIFZJUlEgLSB2aXJxIG51bWJlcgorICogICAgSVBJIC0gSVBJIHZlY3RvcgorICogICAgRVZUQ0hOIC0KKyAqLworc3RydWN0IGlycV9pbmZvCit7CisJZW51bSB4ZW5faXJxX3R5cGUgdHlwZTsJLyogdHlwZSAqLworCXVuc2lnbmVkIHNob3J0IGV2dGNobjsJLyogZXZlbnQgY2hhbm5lbCAqLworCXVuc2lnbmVkIHNob3J0IGNwdTsJLyogY3B1IGJvdW5kICovCisKKwl1bmlvbiB7CisJCXVuc2lnbmVkIHNob3J0IHZpcnE7CisJCWVudW0gaXBpX3ZlY3RvciBpcGk7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBzaG9ydCBnc2k7CisJCQl1bnNpZ25lZCBzaG9ydCB2ZWN0b3I7CisJCX0gcGlycTsKKwl9IHU7Cit9OworCitzdGF0aWMgc3RydWN0IGlycV9pbmZvIGlycV9pbmZvW05SX0lSUVNdOwogCiBzdGF0aWMgaW50IGV2dGNobl90b19pcnFbTlJfRVZFTlRfQ0hBTk5FTFNdID0gewogCVswIC4uLiBOUl9FVkVOVF9DSEFOTkVMUy0xXSA9IC0xCiB9Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2V2dGNobl9tYXNrW05SX0NQVVNdW05SX0VWRU5UX0NIQU5ORUxTL0JJVFNfUEVSX0xPTkddOwotc3RhdGljIHU4IGNwdV9ldnRjaG5bTlJfRVZFTlRfQ0hBTk5FTFNdOwotCi0vKiBSZWZlcmVuY2UgY291bnRzIGZvciBiaW5kaW5ncyB0byBJUlFzLiAqLwotc3RhdGljIGludCBpcnFfYmluZGNvdW50W05SX0lSUVNdOworc3RydWN0IGNwdV9ldnRjaG5fcyB7CisJdW5zaWduZWQgbG9uZyBiaXRzW05SX0VWRU5UX0NIQU5ORUxTL0JJVFNfUEVSX0xPTkddOworfTsKK3N0YXRpYyBzdHJ1Y3QgY3B1X2V2dGNobl9zICpjcHVfZXZ0Y2huX21hc2tfcDsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqY3B1X2V2dGNobl9tYXNrKGludCBjcHUpCit7CisJcmV0dXJuIGNwdV9ldnRjaG5fbWFza19wW2NwdV0uYml0czsKK30KIAogLyogWGVuIHdpbGwgbmV2ZXIgYWxsb2NhdGUgcG9ydCB6ZXJvIGZvciBhbnkgcHVycG9zZS4gKi8KICNkZWZpbmUgVkFMSURfRVZUQ0hOKGNobikJKChjaG4pICE9IDApCkBAIC04NywyNyArMTA4LDEwOCBAQAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4ZW5fZHluYW1pY19jaGlwOwogCiAvKiBDb25zdHJ1Y3RvciBmb3IgcGFja2VkIElSUSBpbmZvcm1hdGlvbi4gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhY2tlZF9pcnEgbWtfaXJxX2luZm8odTMyIHR5cGUsIHUzMiBpbmRleCwgdTMyIGV2dGNobikKK3N0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gbWtfdW5ib3VuZF9pbmZvKHZvaWQpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgcGFja2VkX2lycSkgeyBldnRjaG4sIGluZGV4LCB0eXBlIH07CisJcmV0dXJuIChzdHJ1Y3QgaXJxX2luZm8pIHsgLnR5cGUgPSBJUlFUX1VOQk9VTkQgfTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaW5mbyBta19ldnRjaG5faW5mbyh1bnNpZ25lZCBzaG9ydCBldnRjaG4pCit7CisJcmV0dXJuIChzdHJ1Y3QgaXJxX2luZm8pIHsgLnR5cGUgPSBJUlFUX0VWVENITiwgLmV2dGNobiA9IGV2dGNobiwKKwkJCS5jcHUgPSAwIH07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gbWtfaXBpX2luZm8odW5zaWduZWQgc2hvcnQgZXZ0Y2huLCBlbnVtIGlwaV92ZWN0b3IgaXBpKQoreworCXJldHVybiAoc3RydWN0IGlycV9pbmZvKSB7IC50eXBlID0gSVJRVF9JUEksIC5ldnRjaG4gPSBldnRjaG4sCisJCQkuY3B1ID0gMCwgLnUuaXBpID0gaXBpIH07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gbWtfdmlycV9pbmZvKHVuc2lnbmVkIHNob3J0IGV2dGNobiwgdW5zaWduZWQgc2hvcnQgdmlycSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcnFfaW5mbykgeyAudHlwZSA9IElSUVRfVklSUSwgLmV2dGNobiA9IGV2dGNobiwKKwkJCS5jcHUgPSAwLCAudS52aXJxID0gdmlycSB9OworfQorCitzdGF0aWMgc3RydWN0IGlycV9pbmZvIG1rX3BpcnFfaW5mbyh1bnNpZ25lZCBzaG9ydCBldnRjaG4sCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IGdzaSwgdW5zaWduZWQgc2hvcnQgdmVjdG9yKQoreworCXJldHVybiAoc3RydWN0IGlycV9pbmZvKSB7IC50eXBlID0gSVJRVF9QSVJRLCAuZXZ0Y2huID0gZXZ0Y2huLAorCQkJLmNwdSA9IDAsIC51LnBpcnEgPSB7IC5nc2kgPSBnc2ksIC52ZWN0b3IgPSB2ZWN0b3IgfSB9OwogfQogCiAvKgogICogQWNjZXNzb3JzIGZvciBwYWNrZWQgSVJRIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBldnRjaG5fZnJvbV9pcnEoaW50IGlycSkKK3N0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gKmluZm9fZm9yX2lycSh1bnNpZ25lZCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9pbmZvW2lycV0uZXZ0Y2huOworCXJldHVybiAmaXJxX2luZm9baXJxXTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW5kZXhfZnJvbV9pcnEoaW50IGlycSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZ0Y2huX2Zyb21faXJxKHVuc2lnbmVkIGlycSkKIHsKLQlyZXR1cm4gaXJxX2luZm9baXJxXS5pbmRleDsKKwlyZXR1cm4gaW5mb19mb3JfaXJxKGlycSktPmV2dGNobjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdHlwZV9mcm9tX2lycShpbnQgaXJxKQorc3RhdGljIGVudW0gaXBpX3ZlY3RvciBpcGlfZnJvbV9pcnEodW5zaWduZWQgaXJxKQogewotCXJldHVybiBpcnFfaW5mb1tpcnFdLnR5cGU7CisJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CisKKwlCVUdfT04oaW5mbyA9PSBOVUxMKTsKKwlCVUdfT04oaW5mby0+dHlwZSAhPSBJUlFUX0lQSSk7CisKKwlyZXR1cm4gaW5mby0+dS5pcGk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB2aXJxX2Zyb21faXJxKHVuc2lnbmVkIGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2luZm8gKmluZm8gPSBpbmZvX2Zvcl9pcnEoaXJxKTsKKworCUJVR19PTihpbmZvID09IE5VTEwpOworCUJVR19PTihpbmZvLT50eXBlICE9IElSUVRfVklSUSk7CisKKwlyZXR1cm4gaW5mby0+dS52aXJxOworfQorCitzdGF0aWMgdW5zaWduZWQgZ3NpX2Zyb21faXJxKHVuc2lnbmVkIGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2luZm8gKmluZm8gPSBpbmZvX2Zvcl9pcnEoaXJxKTsKKworCUJVR19PTihpbmZvID09IE5VTEwpOworCUJVR19PTihpbmZvLT50eXBlICE9IElSUVRfUElSUSk7CisKKwlyZXR1cm4gaW5mby0+dS5waXJxLmdzaTsKK30KKworc3RhdGljIHVuc2lnbmVkIHZlY3Rvcl9mcm9tX2lycSh1bnNpZ25lZCBpcnEpCit7CisJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CisKKwlCVUdfT04oaW5mbyA9PSBOVUxMKTsKKwlCVUdfT04oaW5mby0+dHlwZSAhPSBJUlFUX1BJUlEpOworCisJcmV0dXJuIGluZm8tPnUucGlycS52ZWN0b3I7Cit9CisKK3N0YXRpYyBlbnVtIHhlbl9pcnFfdHlwZSB0eXBlX2Zyb21faXJxKHVuc2lnbmVkIGlycSkKK3sKKwlyZXR1cm4gaW5mb19mb3JfaXJxKGlycSktPnR5cGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjcHVfZnJvbV9pcnEodW5zaWduZWQgaXJxKQoreworCXJldHVybiBpbmZvX2Zvcl9pcnEoaXJxKS0+Y3B1OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNwdV9mcm9tX2V2dGNobih1bnNpZ25lZCBpbnQgZXZ0Y2huKQoreworCWludCBpcnEgPSBldnRjaG5fdG9faXJxW2V2dGNobl07CisJdW5zaWduZWQgcmV0ID0gMDsKKworCWlmIChpcnEgIT0gLTEpCisJCXJldCA9IGNwdV9mcm9tX2lycShpcnEpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFjdGl2ZV9ldnRjaG5zKHVuc2lnbmVkIGludCBjcHUsCkBAIC0xMTUsNyArMjE3LDcgQEAKIAkJCQkJICAgdW5zaWduZWQgaW50IGlkeCkKIHsKIAlyZXR1cm4gKHNoLT5ldnRjaG5fcGVuZGluZ1tpZHhdICYKLQkJY3B1X2V2dGNobl9tYXNrW2NwdV1baWR4XSAmCisJCWNwdV9ldnRjaG5fbWFzayhjcHUpW2lkeF0gJgogCQl+c2gtPmV2dGNobl9tYXNrW2lkeF0pOwogfQogCkBAIC0xMjUsMTMgKzIyNywxMyBAQAogCiAJQlVHX09OKGlycSA9PSAtMSk7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlycV90b19kZXNjKGlycSktPmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwljcHVtYXNrX2NvcHkoaXJxX3RvX2Rlc2MoaXJxKS0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAjZW5kaWYKIAotCV9fY2xlYXJfYml0KGNobiwgY3B1X2V2dGNobl9tYXNrW2NwdV9ldnRjaG5bY2huXV0pOwotCV9fc2V0X2JpdChjaG4sIGNwdV9ldnRjaG5fbWFza1tjcHVdKTsKKwlfX2NsZWFyX2JpdChjaG4sIGNwdV9ldnRjaG5fbWFzayhjcHVfZnJvbV9pcnEoaXJxKSkpOworCV9fc2V0X2JpdChjaG4sIGNwdV9ldnRjaG5fbWFzayhjcHUpKTsKIAotCWNwdV9ldnRjaG5bY2huXSA9IGNwdTsKKwlpcnFfaW5mb1tpcnFdLmNwdSA9IGNwdTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9ldnRjaG5fY3B1X2JpbmRpbmdzKHZvaWQpCkBAIC0xNDIsMTcgKzI0NCwxMSBAQAogCiAJLyogQnkgZGVmYXVsdCBhbGwgZXZlbnQgY2hhbm5lbHMgbm90aWZ5IENQVSMwLiAqLwogCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKLQkJZGVzYy0+YWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwkJY3B1bWFza19jb3B5KGRlc2MtPmFmZmluaXR5LCBjcHVtYXNrX29mKDApKTsKIAl9CiAjZW5kaWYKIAotCW1lbXNldChjcHVfZXZ0Y2huLCAwLCBzaXplb2YoY3B1X2V2dGNobikpOwotCW1lbXNldChjcHVfZXZ0Y2huX21hc2tbMF0sIH4wLCBzaXplb2YoY3B1X2V2dGNobl9tYXNrWzBdKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9mcm9tX2V2dGNobih1bnNpZ25lZCBpbnQgZXZ0Y2huKQotewotCXJldHVybiBjcHVfZXZ0Y2huW2V2dGNobl07CisJbWVtc2V0KGNwdV9ldnRjaG5fbWFzaygwKSwgfjAsIHNpemVvZihjcHVfZXZ0Y2huX21hc2soMCkpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2V2dGNobihpbnQgcG9ydCkKQEAgLTIzMiw5ICszMjgsOCBAQAogCWludCBpcnE7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCi0JLyogT25seSBhbGxvY2F0ZSBmcm9tIGR5bmlycSByYW5nZSAqLwogCWZvciAoaXJxID0gMDsgaXJxIDwgbnJfaXJxczsgaXJxKyspCi0JCWlmIChpcnFfYmluZGNvdW50W2lycV0gPT0gMCkKKwkJaWYgKGlycV9pbmZvW2lycV0udHlwZSA9PSBJUlFUX1VOQk9VTkQpCiAJCQlicmVhazsKIAogCWlmIChpcnEgPT0gbnJfaXJxcykKQEAgLTI0NCw2ICszMzksOCBAQAogCWlmIChXQVJOX09OKGRlc2MgPT0gTlVMTCkpCiAJCXJldHVybiAtMTsKIAorCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKKwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTI1OCwxNiArMzU1LDEzIEBACiAJaWYgKGlycSA9PSAtMSkgewogCQlpcnEgPSBmaW5kX3VuYm91bmRfaXJxKCk7CiAKLQkJZHluYW1pY19pcnFfaW5pdChpcnEpOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fZHluYW1pY19jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAiZXZlbnQiKTsKIAogCQlldnRjaG5fdG9faXJxW2V2dGNobl0gPSBpcnE7Ci0JCWlycV9pbmZvW2lycV0gPSBta19pcnFfaW5mbyhJUlFUX0VWVENITiwgMCwgZXZ0Y2huKTsKKwkJaXJxX2luZm9baXJxXSA9IG1rX2V2dGNobl9pbmZvKGV2dGNobik7CiAJfQogCi0JaXJxX2JpbmRjb3VudFtpcnFdKys7Ci0KIAlzcGluX3VubG9jaygmaXJxX21hcHBpbmdfdXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGlycTsKQEAgLTI4MiwxMiArMzc2LDEyIEBACiAJc3Bpbl9sb2NrKCZpcnFfbWFwcGluZ191cGRhdGVfbG9jayk7CiAKIAlpcnEgPSBwZXJfY3B1KGlwaV90b19pcnEsIGNwdSlbaXBpXTsKKwogCWlmIChpcnEgPT0gLTEpIHsKIAkJaXJxID0gZmluZF91bmJvdW5kX2lycSgpOwogCQlpZiAoaXJxIDwgMCkKIAkJCWdvdG8gb3V0OwogCi0JCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX2R5bmFtaWNfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImlwaSIpOwogCkBAIC0yOTgsMTUgKzM5MiwxMiBAQAogCQlldnRjaG4gPSBiaW5kX2lwaS5wb3J0OwogCiAJCWV2dGNobl90b19pcnFbZXZ0Y2huXSA9IGlycTsKLQkJaXJxX2luZm9baXJxXSA9IG1rX2lycV9pbmZvKElSUVRfSVBJLCBpcGksIGV2dGNobik7Ci0KKwkJaXJxX2luZm9baXJxXSA9IG1rX2lwaV9pbmZvKGV2dGNobiwgaXBpKTsKIAkJcGVyX2NwdShpcGlfdG9faXJxLCBjcHUpW2lwaV0gPSBpcnE7CiAKIAkJYmluZF9ldnRjaG5fdG9fY3B1KGV2dGNobiwgY3B1KTsKIAl9CiAKLQlpcnFfYmluZGNvdW50W2lycV0rKzsKLQogIG91dDoKIAlzcGluX3VubG9jaygmaXJxX21hcHBpbmdfdXBkYXRlX2xvY2spOwogCXJldHVybiBpcnE7CkBAIC0zMzIsMjAgKzQyMywxNyBAQAogCiAJCWlycSA9IGZpbmRfdW5ib3VuZF9pcnEoKTsKIAotCQlkeW5hbWljX2lycV9pbml0KGlycSk7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnhlbl9keW5hbWljX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJ2aXJxIik7CiAKIAkJZXZ0Y2huX3RvX2lycVtldnRjaG5dID0gaXJxOwotCQlpcnFfaW5mb1tpcnFdID0gbWtfaXJxX2luZm8oSVJRVF9WSVJRLCB2aXJxLCBldnRjaG4pOworCQlpcnFfaW5mb1tpcnFdID0gbWtfdmlycV9pbmZvKGV2dGNobiwgdmlycSk7CiAKIAkJcGVyX2NwdSh2aXJxX3RvX2lycSwgY3B1KVt2aXJxXSA9IGlycTsKIAogCQliaW5kX2V2dGNobl90b19jcHUoZXZ0Y2huLCBjcHUpOwogCX0KIAotCWlycV9iaW5kY291bnRbaXJxXSsrOwotCiAJc3Bpbl91bmxvY2soJmlycV9tYXBwaW5nX3VwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBpcnE7CkBAIC0zNTgsNyArNDQ2LDcgQEAKIAogCXNwaW5fbG9jaygmaXJxX21hcHBpbmdfdXBkYXRlX2xvY2spOwogCi0JaWYgKCgtLWlycV9iaW5kY291bnRbaXJxXSA9PSAwKSAmJiBWQUxJRF9FVlRDSE4oZXZ0Y2huKSkgeworCWlmIChWQUxJRF9FVlRDSE4oZXZ0Y2huKSkgewogCQljbG9zZS5wb3J0ID0gZXZ0Y2huOwogCQlpZiAoSFlQRVJWSVNPUl9ldmVudF9jaGFubmVsX29wKEVWVENITk9QX2Nsb3NlLCAmY2xvc2UpICE9IDApCiAJCQlCVUcoKTsKQEAgLTM2NiwxMSArNDU0LDExIEBACiAJCXN3aXRjaCAodHlwZV9mcm9tX2lycShpcnEpKSB7CiAJCWNhc2UgSVJRVF9WSVJROgogCQkJcGVyX2NwdSh2aXJxX3RvX2lycSwgY3B1X2Zyb21fZXZ0Y2huKGV2dGNobikpCi0JCQkJW2luZGV4X2Zyb21faXJxKGlycSldID0gLTE7CisJCQkJW3ZpcnFfZnJvbV9pcnEoaXJxKV0gPSAtMTsKIAkJCWJyZWFrOwogCQljYXNlIElSUVRfSVBJOgogCQkJcGVyX2NwdShpcGlfdG9faXJxLCBjcHVfZnJvbV9ldnRjaG4oZXZ0Y2huKSkKLQkJCQlbaW5kZXhfZnJvbV9pcnEoaXJxKV0gPSAtMTsKKwkJCQlbaXBpX2Zyb21faXJxKGlycSldID0gLTE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtMzgwLDcgKzQ2OCw3IEBACiAJCWJpbmRfZXZ0Y2huX3RvX2NwdShldnRjaG4sIDApOwogCiAJCWV2dGNobl90b19pcnFbZXZ0Y2huXSA9IC0xOwotCQlpcnFfaW5mb1tpcnFdID0gSVJRX1VOQk9VTkQ7CisJCWlycV9pbmZvW2lycV0gPSBta191bmJvdW5kX2luZm8oKTsKIAogCQlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7CiAJfQpAQCAtNDk4LDggKzU4Niw4IEBACiAJZm9yKGkgPSAwOyBpIDwgTlJfRVZFTlRfQ0hBTk5FTFM7IGkrKykgewogCQlpZiAoc3luY190ZXN0X2JpdChpLCBzaC0+ZXZ0Y2huX3BlbmRpbmcpKSB7CiAJCQlwcmludGsoIiAgJWQ6IGV2ZW50ICVkIC0+IGlycSAlZFxuIiwKLQkJCQljcHVfZXZ0Y2huW2ldLCBpLAotCQkJCWV2dGNobl90b19pcnFbaV0pOworCQkJICAgICAgIGNwdV9mcm9tX2V2dGNobihpKSwgaSwKKwkJCSAgICAgICBldnRjaG5fdG9faXJxW2ldKTsKIAkJfQogCX0KIApAQCAtNTA4LDcgKzU5Niw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0KIC8qCiAgKiBTZWFyY2ggdGhlIENQVXMgcGVuZGluZyBldmVudHMgYml0bWFza3MuICBGb3IgZWFjaCBvbmUgZm91bmQsIG1hcAogICogdGhlIGV2ZW50IG51bWJlciB0byBhbiBpcnEsIGFuZCBmZWVkIGl0IGludG8gZG9fSVJRKCkgZm9yCkBAIC01MjEsMTEgKzYwOCwxNSBAQAogdm9pZCB4ZW5fZXZ0Y2huX2RvX3VwY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAlzdHJ1Y3Qgc2hhcmVkX2luZm8gKnMgPSBIWVBFUlZJU09SX3NoYXJlZF9pbmZvOwogCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IF9fZ2V0X2NwdV92YXIoeGVuX3ZjcHUpOwogCXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgbmVzdGluZ19jb3VudCk7CiAgCXVuc2lnbmVkIGNvdW50OwogCisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisKIAlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgcGVuZGluZ193b3JkczsKIApAQCAtNTUwLDcgKzY0MSw3IEBACiAJCQkJaW50IGlycSA9IGV2dGNobl90b19pcnFbcG9ydF07CiAKIAkJCQlpZiAoaXJxICE9IC0xKQotCQkJCQl4ZW5fZG9fSVJRKGlycSwgcmVncyk7CisJCQkJCWhhbmRsZV9pcnEoaXJxLCByZWdzKTsKIAkJCX0KIAkJfQogCkBAIC01NjEsMTIgKzY1MiwxNyBAQAogCX0gd2hpbGUoY291bnQgIT0gMSk7CiAKIG91dDoKKwlpcnFfZXhpdCgpOworCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CisKIAlwdXRfY3B1KCk7CiB9CiAKIC8qIFJlYmluZCBhIG5ldyBldmVudCBjaGFubmVsIHRvIGFuIGV4aXN0aW5nIGlycS4gKi8KIHZvaWQgcmViaW5kX2V2dGNobl9pcnEoaW50IGV2dGNobiwgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2luZm8gKmluZm8gPSBpbmZvX2Zvcl9pcnEoaXJxKTsKKwogCS8qIE1ha2Ugc3VyZSB0aGUgaXJxIGlzIG1hc2tlZCwgc2luY2UgdGhlIG5ldyBldmVudCBjaGFubmVsCiAJICAgd2lsbCBhbHNvIGJlIG1hc2tlZC4gKi8KIAlkaXNhYmxlX2lycShpcnEpOwpAQCAtNTc2LDExICs2NzIsMTEgQEAKIAkvKiBBZnRlciByZXN1bWUgdGhlIGlycTwtPmV2dGNobiBtYXBwaW5ncyBhcmUgYWxsIGNsZWFyZWQgb3V0ICovCiAJQlVHX09OKGV2dGNobl90b19pcnFbZXZ0Y2huXSAhPSAtMSk7CiAJLyogRXhwZWN0IGlycSB0byBoYXZlIGJlZW4gYm91bmQgYmVmb3JlLAotCSAgIHNvIHRoZSBiaW5kY291bnQgc2hvdWxkIGJlIG5vbi0wICovCi0JQlVHX09OKGlycV9iaW5kY291bnRbaXJxXSA9PSAwKTsKKwkgICBzbyB0aGVyZSBzaG91bGQgYmUgYSBwcm9wZXIgdHlwZSAqLworCUJVR19PTihpbmZvLT50eXBlID09IElSUVRfVU5CT1VORCk7CiAKIAlldnRjaG5fdG9faXJxW2V2dGNobl0gPSBpcnE7Ci0JaXJxX2luZm9baXJxXSA9IG1rX2lycV9pbmZvKElSUVRfRVZUQ0hOLCAwLCBldnRjaG4pOworCWlycV9pbmZvW2lycV0gPSBta19ldnRjaG5faW5mbyhldnRjaG4pOwogCiAJc3Bpbl91bmxvY2soJmlycV9tYXBwaW5nX3VwZGF0ZV9sb2NrKTsKIApAQCAtNjkwLDggKzc4Niw3IEBACiAJCWlmICgoaXJxID0gcGVyX2NwdSh2aXJxX3RvX2lycSwgY3B1KVt2aXJxXSkgPT0gLTEpCiAJCQljb250aW51ZTsKIAotCQlCVUdfT04oaXJxX2luZm9baXJxXS50eXBlICE9IElSUVRfVklSUSk7Ci0JCUJVR19PTihpcnFfaW5mb1tpcnFdLmluZGV4ICE9IHZpcnEpOworCQlCVUdfT04odmlycV9mcm9tX2lycShpcnEpICE9IHZpcnEpOwogCiAJCS8qIEdldCBhIG5ldyBiaW5kaW5nIGZyb20gWGVuLiAqLwogCQliaW5kX3ZpcnEudmlycSA9IHZpcnE7CkBAIC03MDMsNyArNzk4LDcgQEAKIAogCQkvKiBSZWNvcmQgdGhlIG5ldyBtYXBwaW5nLiAqLwogCQlldnRjaG5fdG9faXJxW2V2dGNobl0gPSBpcnE7Ci0JCWlycV9pbmZvW2lycV0gPSBta19pcnFfaW5mbyhJUlFUX1ZJUlEsIHZpcnEsIGV2dGNobik7CisJCWlycV9pbmZvW2lycV0gPSBta192aXJxX2luZm8oZXZ0Y2huLCB2aXJxKTsKIAkJYmluZF9ldnRjaG5fdG9fY3B1KGV2dGNobiwgY3B1KTsKIAogCQkvKiBSZWFkeSBmb3IgdXNlLiAqLwpAQCAtNzIwLDggKzgxNSw3IEBACiAJCWlmICgoaXJxID0gcGVyX2NwdShpcGlfdG9faXJxLCBjcHUpW2lwaV0pID09IC0xKQogCQkJY29udGludWU7CiAKLQkJQlVHX09OKGlycV9pbmZvW2lycV0udHlwZSAhPSBJUlFUX0lQSSk7Ci0JCUJVR19PTihpcnFfaW5mb1tpcnFdLmluZGV4ICE9IGlwaSk7CisJCUJVR19PTihpcGlfZnJvbV9pcnEoaXJxKSAhPSBpcGkpOwogCiAJCS8qIEdldCBhIG5ldyBiaW5kaW5nIGZyb20gWGVuLiAqLwogCQliaW5kX2lwaS52Y3B1ID0gY3B1OwpAQCAtNzMyLDcgKzgyNiw3IEBACiAKIAkJLyogUmVjb3JkIHRoZSBuZXcgbWFwcGluZy4gKi8KIAkJZXZ0Y2huX3RvX2lycVtldnRjaG5dID0gaXJxOwotCQlpcnFfaW5mb1tpcnFdID0gbWtfaXJxX2luZm8oSVJRVF9JUEksIGlwaSwgZXZ0Y2huKTsKKwkJaXJxX2luZm9baXJxXSA9IG1rX2lwaV9pbmZvKGV2dGNobiwgaXBpKTsKIAkJYmluZF9ldnRjaG5fdG9fY3B1KGV2dGNobiwgY3B1KTsKIAogCQkvKiBSZWFkeSBmb3IgdXNlLiAqLwpAQCAtODEyLDggKzkwNiwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhlbl9keW5hbWljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAieGVuLWR5biIsCisKKwkuZGlzYWJsZQk9IGRpc2FibGVfZHluaXJxLAogCS5tYXNrCQk9IGRpc2FibGVfZHluaXJxLAogCS51bm1hc2sJCT0gZW5hYmxlX2R5bmlycSwKKwogCS5hY2sJCT0gYWNrX2R5bmlycSwKIAkuc2V0X2FmZmluaXR5CT0gc2V0X2FmZmluaXR5X2lycSwKIAkucmV0cmlnZ2VyCT0gcmV0cmlnZ2VyX2R5bmlycSwKQEAgLTgyMiw2ICs5MTksMTAgQEAKIHZvaWQgX19pbml0IHhlbl9pbml0X0lSUSh2b2lkKQogewogCWludCBpOworCXNpemVfdCBzaXplID0gbnJfY3B1X2lkcyAqIHNpemVvZihzdHJ1Y3QgY3B1X2V2dGNobl9zKTsKKworCWNwdV9ldnRjaG5fbWFza19wID0gYWxsb2NfYm9vdG1lbShzaXplKTsKKwlCVUdfT04oY3B1X2V2dGNobl9tYXNrX3AgPT0gTlVMTCk7CiAKIAlpbml0X2V2dGNobl9jcHVfYmluZGluZ3MoKTsKIApAQCAtODI5LDkgKzkzMCw1IEBACiAJZm9yIChpID0gMDsgaSA8IE5SX0VWRU5UX0NIQU5ORUxTOyBpKyspCiAJCW1hc2tfZXZ0Y2huKGkpOwogCi0JLyogRHluYW1pYyBJUlEgc3BhY2UgaXMgY3VycmVudGx5IHVuYm91bmQuIFplcm8gdGhlIHJlZmNudHMuICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykKLQkJaXJxX2JpbmRjb3VudFtpXSA9IDA7Ci0KIAlpcnFfY3R4X2luaXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggNTY4OTJhMS4uM2NjZDM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS8qIFhYWCB1c2Ugbm9ybWFsIGRldmljZSB0cmVlPyAqLwogCXhlbmJ1c19zdXNwZW5kKCk7CiAKLQllcnIgPSBzdG9wX21hY2hpbmUoeGVuX3N1c3BlbmQsICZjYW5jZWxsZWQsICZjcHVtYXNrX29mX2NwdSgwKSk7CisJZXJyID0gc3RvcF9tYWNoaW5lKHhlbl9zdXNwZW5kLCAmY2FuY2VsbGVkLCBjcHVtYXNrX29mKDApKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHN0YXJ0IHhlbl9zdXNwZW5kOiAlZFxuIiwgZXJyKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3pvcnJvL3pvcnJvLmMgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKaW5kZXggYTE1ODVkNi4uZDQ1ZmIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy96b3Jyby96b3Jyby5jCisrKyBiL2RyaXZlcnMvem9ycm8vem9ycm8uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBab3JybyBidXMgKi8KICAgICBJTklUX0xJU1RfSEVBRCgmem9ycm9fYnVzLmRldmljZXMpOwotICAgIHN0cmNweSh6b3Jyb19idXMuZGV2LmJ1c19pZCwgInpvcnJvIik7CisgICAgZGV2X3NldF9uYW1lKCZ6b3Jyb19idXMuZGV2LCAiem9ycm8iKTsKICAgICBlcnJvciA9IGRldmljZV9yZWdpc3Rlcigmem9ycm9fYnVzLmRldik7CiAgICAgaWYgKGVycm9yKSB7CiAJcHJfZXJyKCJab3JybzogRXJyb3IgcmVnaXN0ZXJpbmcgem9ycm9fYnVzXG4iKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCWlmIChyZXF1ZXN0X3Jlc291cmNlKHpvcnJvX2ZpbmRfcGFyZW50X3Jlc291cmNlKHopLCAmei0+cmVzb3VyY2UpKQogCSAgICBwcl9lcnIoIlpvcnJvOiBBZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiBkZXZpY2UgJXMgJXBSXG4iLAogCQkgICB6LT5uYW1lLCAmei0+cmVzb3VyY2UpOwotCXNwcmludGYoei0+ZGV2LmJ1c19pZCwgIiUwMngiLCBpKTsKKwlkZXZfc2V0X25hbWUoJnotPmRldiwgIiUwMngiLCBpKTsKIAl6LT5kZXYucGFyZW50ID0gJnpvcnJvX2J1cy5kZXY7CiAJei0+ZGV2LmJ1cyA9ICZ6b3Jyb19idXNfdHlwZTsKIAllcnJvciA9IGRldmljZV9yZWdpc3Rlcigmei0+ZGV2KTsKZGlmZiAtLWdpdCBhL2Zpcm13YXJlLzNjb20vdHlwaG9vbi5iaW4uaWhleCBiL2Zpcm13YXJlLzNjb20vdHlwaG9vbi5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2E4M2JlCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvM2NvbS90eXBob29uLmJpbi5paGV4CkBAIC0wLDAgKzEsMjgxOSBAQAorOjEwMDAwMDAwNTQ1OTUwNDg0RjRGNEUwMDAyMDAwMDAwMDkwMDAwMDBCNAorOjEwMDAxMDAwMDAwMEZGRkZDQjk5QjFENDRDQjhEMDRCMzIwMkQ0RUVFNAorOjEwMDAyMDAwNzM3RTBCMTM5QkMwQUVGNDQwMDEwMDAwRThGQzAwMDA5RgorOjEwMDAzMDAwMDAwMEZGRkYzOTAwMDBFQTA1MDAwMEVBMDQwMDAwRUFDMgorOjEwMDA0MDAwMDMwMDAwRUEwMjAwMDBFQTAxMDAwMEVBMzIwMjAwRUFDRQorOjEwMDA1MDAwQzUxNDAwRUEwNzAwMkRFOTBFMDBBMEUxMDAxMDBGRTEzMQorOjEwMDA2MDAwRDAyMDlGRTUxMkZGMkZFMUZFRkZGRkVBMDEwMDgwRTBCNAorOjEwMDA3MDAwMDQyMDgxRTQwMTAwNTBFMUZDRkZGRjFBMEVGMEEwRTEzMgorOjEwMDA4MDAwMDBBMEEwRTEwRUIwQTBFMTAwMDBBMEUzQTgxMDlGRTU1MQorOjEwMDA5MDAwMDAwMDgxRTVBNDEwOUZFNTAwMDA4MUU1MDExNkEwRTNDMgorOjEwMDBBMDAwMDAwMDkxRTUwMTAwODBFMzAwMDA4MUU1RDcwMEEwRTNCNgorOjEwMDBCMDAwMDBGMDIxRTE4OEQwOUZFNURCMDBBMEUzMDBGMDIxRTEyMgorOjEwMDBDMDAwN0NEMDlGRTVEMjAwQTBFMzAwRjAyMUUxNzREMDlGRTU1MQorOjEwMDBEMDAwRDEwMEEwRTMwMEYwMjFFMTZDRDA5RkU1OUIxNDAwRUI4MAorOjEwMDBFMDAwRDMwMEEwRTMwMEYwMjFFMTYwRDA5RkU1NjAwMDlGRTUzMAorOjEwMDBGMDAwNjAxMDlGRTU2MDIwOUZFNURCRkZGRkVCNUMwMDlGRTU2NAorOjEwMDEwMDAwNUMxMDlGRTUwMDIwQTBFM0Q3RkZGRkVCNTQwMDlGRTVDNAorOjEwMDExMDAwNTQxMDlGRTVENEZGRkZFQjBBMDBBMEUxMEJGMEEwRTEzMworOjEwMDEyMDAwRDMxMEEwRTMwMUYwMjFFMUQ0RkZGRkVCM0NBMDlGRTU1OQorOjEwMDEzMDAwMUFGRjJGRTFDNkZGRkZFQTE1MjFGRkZGMEMwMDEwMDA5OAorOjEwMDE0MDAwMUMwMDEwMDAzQzM4MDA4MEZDMzcwMDgwRkMzRjAwODAyMQorOjEwMDE1MDAwN0MzNDAwODA4MDBGMDAwMDgwMzAwMDgwQURERUFEREU5QQorOjEwMDE2MDAwQjBCQjAwMDAyNEFCMjA0MDQ4MjkwMDAwMjgwNTAwODBENworOjEwMDE3MDAwQkRCQTIxNDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBBOQorOjEwMDE4MDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwNTg1NzAwMDBDMgorOjEwMDE5MDAwODY0QjAwMDA2MDAxRkZGRkIwQjUwNzFDMTI0RDAwMjQyNAorOjEwMDFBMDAwMjg2ODAwMjgxRUQwMzgxQzEwNDkwNEYwN0JGRDI5NjhGRgorOjEwMDFCMDAwQzA0NjA4NjAwMDI4MTVEMDM4MDEwRDQ5NDAxODE5MjNBMQorOjEwMDFDMDAwREIwMUMwMTg0MTZCODAyOTBDRDIwMTMxNDE2MzI4NjhFMgorOjEwMDFEMDAwQzE2OUMwNDYyOTYwMzkwNzQxNjAwNDYyQzc2MkIwQkM4QQorOjEwMDFFMDAwMDhCQzE4NDcyMDFDRkFFN0U4MTcwMDgwRUUwNTAwMDA1RAorOjEwMDFGMDAwQTAxQzAwODAwMjQ5MEE2OEMwNDZDMjYxMDg2MDcwNDdCRQorOjEwMDIwMDAwRTgxNzAwODA3MDQ3MDAwMDcwNDcwMDAwNzA0NzAwMDA0QQorOjEwMDIxMDAwMDAwMDBGRTEwMDEwQTBFMUMwMTA4MUUzMDFGMDIxRTEzNgorOjEwMDIyMDAwMUVGRjJGRTEwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTE5MgorOjEwMDIzMDAwQzAwMDgwRTMwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTE4QworOjEwMDI0MDAwQzAwMEMwRTMwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTEzQworOjEwMDI1MDAwNDAwMDgwRTMwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTFFQworOjEwMDI2MDAwODAwMDEwRTM4MDAwODBFMzAwRjAyMUUxMDAwMDAwMTIzNAorOjEwMDI3MDAwMUVGRjJGRTEwMDAwNTBFMzAwMDAwRkUxODAwMEMwMTNEQgorOjEwMDI4MDAwMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxODAwMEMwRTMzQworOjEwMDI5MDAwMDBGMDIxRTExRUZGMkZFMTkxMDAwMEUwMUVGRjJGRTFBMQorOjEwMDJBMDAwMDEyMDgwRTAwMTAwODBFMDFFRkYyRkUxODBCNTA4NEZCMworOjEwMDJCMDAwNjQyODA0RDM2NDIwMzg2MzAwMjBDMDQzMDNFMDM4NjMxQgorOjEwMDJDMDAwMDQ0OTA1RjAwMUZCNzg2M0I4NjM4MEJDMDhCQzE4NDc5QgorOjEwMDJEMDAwNjgwRTAwODA4ODEzMDAwMDgwQjQxMDRCMDAyMjFGNkI1MgorOjEwMDJFMDAwNjQyRjAzRDIwOTY4MDk2ODQ5MDgwMkQyMTAxQzgwQkMzNworOjEwMDJGMDAwNzA0NzE5MUNEQjZCNEY2QkJCNDIwNUQyNDA2ODAwMDQ5MgorOjEwMDMwMDAwMDAwQzE4MThDODYzRjFFNzQxNjgwNTRCMTk0MzQxNjBCOAorOjEwMDMxMDAwMDQ0OEMxNkIwMTMxQzE2MzAyMjBFOEU3NjgwRTAwODAyOAorOjEwMDMyMDAwMDAwMDAwODAwQzJCMDA4MDkwQjUwNzFDMTU0QzAwMjBBRAorOjEwMDMzMDAwMjE2QjY0MjkwQkQyQjk2RTQ5MDgwOEQzMjE2Q0EyNkJEQQorOjEwMDM0MDAwOTE0MjA3RDJGQTFEMzkzMjUyOEI4OTE4MjE2NDkwQkMzMAorOjEwMDM1MDAwMDhCQzE4NDc3ODZBMzk2QkMwNDY0ODYyMzg2QjAyRjBBRgorOjEwMDM2MDAwMkRGRTM4MUMwMkYwRThGQTAxMjBCQjIzMUIwMUUxMTgyNgorOjEwMDM3MDAwQzg3MzA1NDkwQTZDMTIxODBBNjQwNDQ5OEE2RDEyMTg3OAorOjEwMDM4MDAwOEE2NUU0RTc2ODBFMDA4MDBDMkIwMDgwQTQyQTAwODBCOAorOjEwMDM5MDAwODBCNDBBNDhDMDZEMDIyMzE4NDAwOTRBMDAyMTAwMjg5MQorOjEwMDNBMDAwMDNEMEQxNjMxMTY0ODBCQzcwNDcwNjQ4MDc2ODdCMUM4QQorOjEwMDNCMDAwMDM2MDBBMkZGN0QzMDE2MEYzRTcwMDAwQTQyQTAwODA0RQorOjEwMDNDMDAwNjgwRTAwODBFMDAxMDA4MDcwNDcwMjA0MTIwQzAwMENFRgorOjEwMDNEMDAwMTAxODBBMDQxMjBDMDkwQzUxMTgwODE4MDEwQzA1RDA0OQorOjEwMDNFMDAwMDEwNDA5MEMwMDBDMDgxODAxMENGOUQxMDAwNDAwMENFMAorOjEwMDNGMDAwNzA0NzgwQjQwMDIyMDAyOTE4RDA0RjA4N0IxRTAwMkZDMAorOjEwMDQwMDAwMDZEMDA3ODhCQTE4MDIzMDFGMUMwMTNCMDAyRkY4RDExNAorOjEwMDQxMDAwNDkwODAzRDMwMDg4MDAwNjAwMEU4MjE4MTAwQzA1RDA4RQorOjEwMDQyMDAwMTAwNDAwMEMxMTBDNDIxODEwMENGOUQxMTAwNDAwMEMyRgorOjEwMDQzMDAwODBCQzcwNDc4MEI1ODM4OUM3ODlGQjE4MDc4QUZCMTg4MQorOjEwMDQ0MDAwNDc4QUZCMTg0MDdBMDAwMkM3MTgzODBDMDVEMDM4MDREOAorOjEwMDQ1MDAwMDAwQzNCMENDNzE4MzgwQ0Y5RDEwODFDMTExQ0ZGRjcxNQorOjEwMDQ2MDAwQzhGRjAxMUMzODFDRkZGN0IwRkY4MEJDMDhCQzE4NDc1MAorOjEwMDQ3MDAwOTBCNTAyMjM4MjY4MUE0MDAwMjcwMDJBMEZEMDBBNEE0QQorOjEwMDQ4MDAwOTM2OTAxMzM5MzYxMEE2ODhCNjg5QTE4MDA2ODFDMTg5NQorOjEwMDQ5MDAwNTc4MTA5NjkxMDFDRkZGN0FDRkZDMDQzNjA4MTM4MUMwRAorOjEwMDRBMDAwOTBCQzA4QkMxODQ3MDAwMDBDMkIwMDgwOTBCNTA0MjNCQQorOjEwMDRCMDAwODI2ODFBNDAwMDI3MDAyQTExRDA0QTY4NTIwOTBFRDNEOAorOjEwMDRDMDAwMDk0QTEzNkEwMTMzMTM2MkNCNjgwMjY4OUMxODAxMjMzRQorOjEwMDREMDAwOUIwNzA4M0ExQTQzMTI2ODAwRjAyRUY4MjA4MjM4MUM1NQorOjEwMDRFMDAwOTBCQzA4QkMxODQ3MDAwMDBDMkIwMDgwOTBCNTgwMjNGRQorOjEwMDRGMDAwODI2ODFBNDAwMDI0MDAyQTE1RDA0QTY4OTIwOTEyRDM1MworOjEwMDUwMDAwMEI0QUQzNjkwMTMzRDM2MUNCNjgwMjY4OUYxODAxMjM3QQorOjEwMDUxMDAwOUIwNzA4M0ExQTQzMTI2ODAwRjAwRUY4MDAyODAwRDEzMQorOjEwMDUyMDAwMDQ0OEMwNDZGODgwMjAxQzkwQkMwOEJDMTg0NzAwMDA1NgorOjEwMDUzMDAwMEMyQjAwODBGRkZGMDAwMEIwQjUxNDFDMDUxQzBGMUMyNQorOjEwMDU0MDAwMzg2OUI5Njg0MTE4Mzg2OEZGRjc1M0ZGQzA0MzAxMDRBMAorOjEwMDU1MDAwMDkwQzIwMUNGRkY3MzlGRjA0MUNCODY4Nzk2OTQwMThBMgorOjEwMDU2MDAwNjk2ODg4NDIwQ0QyMkE2ODEyMTgwOTFBMTAxQzAwRjAxNworOjEwMDU3MDAwMDVGOUMwNDMwMTA0MDkwQzIwMUNGRkY3MjZGRjA0MUNFOQorOjEwMDU4MDAwRTA0MzAwMDQwMDBDQjBCQzA4QkMxODQ3ODBCNTA3MUM1MQorOjEwMDU5MDAwQjg2QkMwMDgxQUQzQjg2QUY5NkI0MDE4Nzk2QzAwRjBEMAorOjEwMDVBMDAwRURGOEMwNDMwMTA0MDkwQzBBNDgwN0QwMjAyM0I5NjlCQgorOjEwMDVCMDAwMTk0M0I5NjEwMTZCMDEzMTAxNjMwN0UwRkYyMzAxMzM4NgorOjEwMDVDMDAwQjk2OTE5NDNCOTYxNDE2QTAxMzE0MTYyMDAyMDgwQkNCNworOjEwMDVEMDAwMDhCQzE4NDcwQzJCMDA4MDgwQjUwNzFDQjg2QjQxMDk3QworOjEwMDVFMDAwMUNEM0MwMDgxQUQzRjgxRDM5MzAwMDdCMDYyODE1RDE1QQorOjEwMDVGMDAwMzgxQzAwRjA1M0Y4MDExQzBBNDgwN0QwNDAyM0I5NjlBMQorOjEwMDYwMDAwMTk0M0I5NjE4MTZCMDEzMTgxNjMwN0UwMDEyMzlCMDJDQQorOjEwMDYxMDAwQjk2OTE5NDNCOTYxQzE2QTAxMzFDMTYyMDAyMDgwQkM2NgorOjEwMDYyMDAwMDhCQzE4NDcwQzJCMDA4MEIwQjUwNzFDQjg2QjgxMDlCQgorOjEwMDYzMDAwMkNEM0MwMDgyQUQzRjgxRDM5MzAwMDdCMTEyODI1RDFDRQorOjEwMDY0MDAwQjg2QTM5NkM0MDE4MDEyMzlCMDcwNjMwMTg0MzAwNjhDQworOjEwMDY1MDAwMDUwNDJEMEMwRjRDMTFEMDM4MUMwMEYwMUZGODAwMjg5OQorOjEwMDY2MDAwMENEMEE4NDIwMkQxMEM0Qjk4NDIwN0QwODAyM0I4NjkyNQorOjEwMDY3MDAwMTg0M0I4NjE2MDZCMDEzMDYwNjMwN0UwMDEyMzVCMDJERgorOjEwMDY4MDAwQjg2OTE4NDNCODYxQTA2QTAxMzBBMDYyMDAyMEIwQkMwQworOjEwMDY5MDAwMDhCQzE4NDcwQzJCMDA4MEZGRkYwMDAwRjBCNUZGQjAyRQorOjEwMDZBMDAwOTlCMDA0MUNFMDZCNjE2QzA5MTgwM0FBODUxOEEzNkE1MQorOjEwMDZCMDAwMDAyMDhBMDgwMTMyOTc5MjA3RDA4MjAwOUY1ODAzQUUyQgorOjEwMDZDMDAwQjc1MDk3OUEwMTMwODI0MkY3RDg2MDZBMDEyMzlCMDc5RQorOjEwMDZEMDAwMDQzMDE4NDMwMDY4QzA0NjAyOTAwMkFGM0Y4ODAzQTg2OAorOjEwMDZFMDAwRkZGNzg3RkVDMDQzMDEwNDA5MEMzODFDRkZGNzZERkVCRAorOjEwMDZGMDAwMDcxQ0UwNkJBMTZDNDAxODYxNkEwMTIzOUIwNzA4MzE1RAorOjEwMDcwMDAwMTk0MzA5NjhDMDQ2MDE5MTAxQTkwOTg4MDEzMTg4NDI0RAorOjEwMDcxMDAwMENEMkEyNkExMjE4MDkxQTEwMUMwMEYwMkZGOEMwNDM1QworOjEwMDcyMDAwMDEwNDA5MEMzODFDRkZGNzUwRkUwNzFDQTg4OUU5ODk1MQorOjEwMDczMDAwMDgxODI5OEEwODE4Njk4QTA4MTg2OTdBMDkwMjA4MThBNQorOjEwMDc0MDAwQTE2QzYyNkM4OTFBMEEwNDEyMEMxMTAyMTIwQTExNDM3QworOjEwMDc1MDAwMDkwNDA5MEMwOTE4MDgwQzA1RDAwODA0MDAwQzA5MEM0MAorOjEwMDc2MDAwNDExODA4MENGOUQxMzgxQ0ZGRjcyRkZFQzA0MzAwMDRENAorOjEwMDc3MDAwMDAwQzdGQjAxOUIwRjBCQzA4QkMxODQ3QjBCNDAwMjIyMAorOjEwMDc4MDAwMDAyOTJFRDA4MzA3OUIwRkRDMDA0NzE4MDQyNUVGMUJBMAorOjEwMDc5MDAwQkYwN0JGMEZGRjAwODAwODgwMDA1OTE4MDMzMTg5MDg4OAorOjEwMDdBMDAwNEQxRTAyQzhFMTQwQTE0MDZCMUUwMDJEMDlEMDBDMDQ3MworOjEwMDdCMDAwMjQwQ0EyMTgwOTBDOEExODAyQzgxQzFDMDEzQjAwMkMyRQorOjEwMDdDMDAwRjVEMUI5NDAwODFDRjg0MDAxMDQwOTBDODkxODAwMEM0NworOjEwMDdEMDAwNDIxODEwMEMwNUQwMTAwNDAwMEMxMTBDNDIxODEwMEMxQgorOjEwMDdFMDAwRjlEMTEwMDQwMDBDQjBCQzcwNDcwMDAwOTBCNDAwMjA5OAorOjEwMDdGMDAwMDEyNzExNDk0MjAwMTIxOEQyMDA1MzE4OUM2ODAxMjNBNgorOjEwMDgwMDAwOUIwNzIzNDMxQjY4MUIwMzFCMEI4QTU4MTIwMzEyMEIwNQorOjEwMDgxMDAwOTM0MjBDRDEwMTMwMDQyOEVDRDMwODQ4QzA2QTAxMDM4QworOjEwMDgyMDAwMDkwQjA3NDgwMDZGMDAwMzAwMEI4MTQyMDJEMDM4MUNGRgorOjEwMDgzMDAwOTBCQzcwNDcwMDIwRkJFN0E4MDMwMDgwMDA0MDE0NDBGNAorOjEwMDg0MDAwNjgwRTAwODA5OEI0MTQ0QUMwNDYwMDkyODMwMDEzNDg5MgorOjEwMDg1MDAwQzA1ODA3MDMzRjBCMTI0OEMwNTgwMjAzMTIwQjExNDgzRgorOjEwMDg2MDAwQzA1ODAwMDMwMDBCMTA0Q0U0NTgwMTIzOUIwNzIzNDM5RQorOjEwMDg3MDAwMUI2ODlCMDBDQzAwMDEyMTk4NDIwMUQxMDgxQzA5RTBCMworOjEwMDg4MDAwOTg0MjAzRDkxMDFBREExQjgwMTgwMEUwMTgxQTg0NDIyMworOjEwMDg5MDAwRjREMzAwMjA5OEJDNzA0NzU1NTU1NTU1MjAwNDAwODA2RQorOjEwMDhBMDAwMjgwNDAwODAwODA0MDA4MDE4MDQwMDgwODBCNDEzMDQyOQorOjEwMDhCMDAwMDBEMDAxM0E4MDAwMEIxQzEzNDkwRjU4QzA0NjNCNjAyMgorOjEwMDhDMDAwMEI1OEMwNDY1QTYwMEE1ODA4MzIxMDRCMUI1ODlBNDJCRgorOjEwMDhEMDAwMDFEMzBGNEExMjU4MEY0QjFGNTgwMTIzOUIwNzNCNDM2QworOjEwMDhFMDAwMUI2ODlCMDAxNzAzM0YwQjlGNDIwNkQxMEE0OEMxNjg1MworOjEwMDhGMDAwMDEzMUMxNjAwMTIwODBCQzcwNDcwODRCMUI1OEMwNDZDNQorOjEwMDkwMDAwMUE2MDBBNTAwMDIwRjZFNzA4MDQwMDgwMjgwNDAwODBERQorOjEwMDkxMDAwMjAwNDAwODAxODA0MDA4MEEwODIyMDQwMTAwNDAwODA4MQorOjEwMDkyMDAwRkY1RjJERTk0OEZFRkZFQjAxQjZBMEUzMDFCMThCRTJDQQorOjEwMDkzMDAwMDI4QUEwRTMwMTdBQTBFMzAxQTlBMEUzMDE1NkEwRTNBMworOjEwMDk0MDAwQzg2MDlGRTVDODkwOUZFNTE0NDA5QkU1MDAwMDU0RTMxNAorOjEwMDk1MDAwMkMwMDAwMEEwMzBBMTRFMzExMDAwMDBBMEMwMDk2RTVCQgorOjEwMDk2MDAwMDAwMDUwRTMyMTAwMDAwQTAxMEExNEUzMDUwMDAwMEExOAorOjEwMDk3MDAwMUMwMDk2RTUwMTBBQzBFMzFDMDA4NkU1MUMwMDg1RTUyNQorOjEwMDk4MDAwMTQ3MDg1RTUwNjAwMDBFQTAyMEExNEUzMDQwMDAwMEE3OAorOjEwMDk5MDAwMUMwMDk2RTUwMjBBQzBFMzFDMDA4NkU1MUMwMDg1RTUwNAorOjEwMDlBMDAwMTQ4MDg1RTUwMTA5MTRFMzA0MDAwMDBBMUMwMDk2RTVBMworOjEwMDlCMDAwMDEwOUMwRTMxQzAwODZFNTFDMDA4NUU1MTRBMDg1RTU1RgorOjEwMDlDMDAwMDIwMDE0RTM0MDAwMDAxQjAxMDAxNEUzNTQwMDAwMUI2QworOjEwMDlEMDAwMDIwQjE0RTM2NzAwMDAxQjAxMEIxNEUzMjAwMDAwMUI1MworOjEwMDlFMDAwMTgwMDk5RTUwMTAwODBFMjE4MDA4OUU1RDVGRkZGRUFDQgorOjEwMDlGMDAwMUMwMDk2RTUwMTBBQzBFMzFDMDA4NkU1MUMwMDg1RTVBNQorOjEwMEEwMDAwMTQ3MDg1RTVFMUZGRkZFQUZGNUZCREU4MDRGMDVFRTJGOAorOjEwMEExMDAwNjgwRTAwODAwODgzMjA0MDEwMTAxRkU1MTQzMDkxRTUxNworOjEwMEEyMDAwMDAyMEMzRTExNDIwODFFNTAxMTZBMEUzMEMyMDgxRTUzQworOjEwMEEzMDAwMEIxMkEwRTMwMDAwODFFNTE4MTA5RkU1QjAyNEQxRTE3RQorOjEwMEE0MDAwMDEyMDgyRTJCMDI0QzFFMTNDMjA5MUU1MDAwMDgyRTE3NgorOjEwMEE1MDAwM0MwMDgxRTUxRUZGMkZFMUEwODIyMDQwRkZGRkZGRUE1RQorOjEwMEE2MDAwRkVGRkZGRUEwMTBCQTBFMzAxMTZBMEUzMTQwMDgxRTVGRAorOjEwMEE3MDAwMDAxQTgxRTEyNDIwOTFFNTcwMDAxRkU1MDAwMDAwMDBDQworOjEwMEE4MDAwMjQyMDgwRTUyODEwOTFFNTAwMDAwMDAwMjgxMDgwRTU3MgorOjEwMEE5MDAwMkMyMDkwRTUwMTIwODJFMjJDMjA4MEU1M0YwMDAxRTIzRAorOjEwMEFBMDAwM0YwMDUwRTMxRUZGMkYxMTE4MDA5RkU1MDAxMDkwRTU1NgorOjEwMEFCMDAwMDExMDgxRTIwMDEwODBFNTAyMThBMEUzMEIwMkEwRTMyMAorOjEwMEFDMDAwMDAxMDgwRTUxRUZGMkZFMTMwMDQwMDgwMDEwNkEwRTM0NgorOjEwMEFEMDAwMDEwMTgwRTIwMDEwOTBFNTAxMDgxMUUzMEIxMEEwRTM5MgorOjEwMEFFMDAwMDIxOTgxRTIwNTAwMDAxQTAwMjA5MEU1NDIyOEIwRTFEOQorOjEwMEFGMDAwMDUwMDAwMUEwMDAwOTBFNTAyMEMxMEUzMDIwMDAwMEE1NQorOjEwMEIwMDAwMDYwN0EwRTM0QzExODBFNTAzMDAwMEVBMEMwMDlGRTUxNgorOjEwMEIxMDAwMDAwMDAwMDA0MDEwODBFNUZGRkZGRkVBRkVGRkZGRUE1MworOjEwMEIyMDAwMDAwMDAwODAwMTA2QTBFMzAxMDE4MEUyMDAxMDkwRTVEMgorOjEwMEIzMDAwMDEwODExRTMwQzEwQTBFMzAyMTk4MUUyMDUwMDAwMUE3QworOjEwMEI0MDAwMDAyMDkwRTU0MjI4QjBFMTA1MDAwMDFBMDAwMDkwRTU4MQorOjEwMEI1MDAwMDIwQzEwRTMwMjAwMDAwQTA2MDdBMEUzNEMxMTgwRTUzNgorOjEwMEI2MDAwMDMwMDAwRUE0QzAwMUZFNTAwMDAwMDAwNDAxMDgwRTU5MworOjEwMEI3MDAwRkZGRkZGRUFGRUZGRkZFQTAyMUJBMEUzMDEwNkEwRTM3RQorOjEwMEI4MDAwMTQxMDgwRTUxRUZGMkZFMTgwMjExRkU1MTQzMDkyRTU0RgorOjEwMEI5MDAwMDAwMDAwMDAwMDMwODBFNTFDMDA5MkU1MDAwMDAwMDAyRAorOjEwMEJBMDAwMDAwMDgxRTUwMDEwQTBFMzE0MTA4MkU1MDEwNkEwRTMzNworOjEwMEJCMDAwMUMxMDgyRTUwQzEwODBFNTFDMTA5MkU1MDAwMDAwMDA3RQorOjEwMEJDMDAwMUMxMDgwRTUxRUZGMkZFMUMwMjExRkU1MDAwMDAwMDA4MgorOjEwMEJEMDAwMUMxMDgyRTUwMTE2QTBFMzE0MDA4MkU1MEMwMDgxRTVGQgorOjEwMEJFMDAwMUMwMDkyRTUwMDAwMDAwMDFDMDA4MUU1MUVGRjJGRTFDMworOjEwMEJGMDAwODBCNTBGMUMzODFDMDBGMDE3RjgwMDI4MDJEMDM4MUNGNAorOjEwMEMwMDAwMDBGMDkyRjgwMDIwODBCQzA4QkMxODQ3ODBCNTBGMUM4QgorOjEwMEMxMDAwMzgxQzAwRjAwOUY4MDAyODAyRDAzODFDMDBGMDg0RjhENQorOjEwMEMyMDAwMDAyMDgwQkMwOEJDMTg0N0YwQjQwNzY4M0E3OEQyMDdBNworOjEwMEMzMDAwRDIwRjAwMjQwMDJBMDNEMEZGMjIwMTMyNDI2MDAwRTBEQworOjEwMEM0MDAwNDQ2MDNBN0I3QjdCMUIwMjFBNDM4MTJBMDhEMTAxMjMzMworOjEwMEM1MDAwNUIwMjQyNjgxQTQzNDI2MDA0MjJCRjE4ODI2MDAwRTBDRgorOjEwMEM2MDAwODQ2MDNBN0I3QjdCMUIwMjFBNDMwODJBMDZEMTA2MjM0OQorOjEwMEM3MDAwNDE2ODE5NDM0MTYwODE2ODBFMzEzQ0UwQzEyM0RCMDBDQgorOjEwMEM4MDAwOUE0MjAzRDE0MTY4MjQ0QjE5NDMzRUUwMjM0QjlBNDJEOAorOjEwMEM5MDAwMDREMTAxMjMxQjAzNDE2ODE5NDMzNkUwMTMwMjEyMEFGMQorOjEwMENBMDAwMTIwNjEyMEUxQTQzMTIwNDEyMEMyRTNBMUM0QjlBNDJEMAorOjEwMENCMDAwMkREODAxMjU0MjY4MTU0MzQ1NjBCQTdCRkI3QjFCMDI5QQorOjEwMENDMDAwMUE0MzE4NEI5QTQyMjJEMUZCMUQwOTMzNDRDQjlCMDc5MAorOjEwMENEMDAwREIwRURBNDA1QjQyMjAzMzlFNDAxNjQzMDMyRTE4RDFEMAorOjEwMENFMDAwMzk3RDdCN0QxQjAyMTk0MzA4MjkwN0QxMDQyMTI5NDM0MworOjEwMENGMDAwNDE2MDgxNjgxNjMxODE2MDAxMjEwQUUwQzEyM0RCMDA3NworOjEwMEQwMDAwOTk0MjA0RDEwMTIxODkwMzI5NDM0MTYwMDBFMDg0NjBCNAorOjEwMEQxMDAwMDAyMTA4MUNGMEJDNzA0NzAyNDAwMDAwODE4MDAwMDBFOAorOjEwMEQyMDAwQUUwNTAwMDBBQUFBMDAwMDgwQjQ0MjY4RDEwODNGRDNGMworOjEwMEQzMDAwMDE2ODgzNjg1OTE4MDIzOThGNzgzRjA3M0YwRjA1MkZFNAorOjEwMEQ0MDAwMDNEMURBMUQwRDMyQzI2MDA1RTBCRjAwREIxOUMzNjBCQworOjEwMEQ1MDAwMDgyMzFBNDM0MjYwOEE3ODEyMDcxMjBGOTIwMDAyNjEzOAorOjEwMEQ2MDAwMEE3OTRCNzkxQjAyMUE0MzEzMDIxMjBBMTIwNjEyMEU1OQorOjEwMEQ3MDAwMUE0MzEyMDQxMjBDNDI2MUNBN0EwNjJBMDNEMTEwMjNDNAorOjEwMEQ4MDAwNDI2ODFBNDMxMEUwMTEyQTAzRDEyMDIzNDI2ODFBNDMxMworOjEwMEQ5MDAwMEFFMDMzMkEwM0QxNDAyMzQyNjgxQTQzMDRFMDMyMkE4RQorOjEwMERBMDAwMDNEMTgwMjM0MjY4MUE0MzQyNjBDOTdBQzA0NjAxNzY2MworOjEwMERCMDAwODBCQzcwNDcwQTc4QzA0NjAyNjA0Qjc4MUIwMjFBNDMxOQorOjEwMERDMDAwMDI2MDhCNzgxQjA0MUE0MzAyNjBDOTc4MDkwNjExNDMzQworOjEwMEREMDAwMDE2MDcwNDc4MEI1MDcxQzQ4Njg4MDA5MjZEM0I4NkE0RgorOjEwMERFMDAwQzk2ODQwMTgwMTIzOUIwNzAyMzAxODQzMDA2ODAwMDRCQgorOjEwMERGMDAwMDAwQzExMjM5QjAyOTg0MjE4RDE3ODZBMzk2QkMwNDZDNworOjEwMEUwMDAwNDg2MjM4NkIwMkYwREFGODM4MUMwMUYwOTVGRDAxMjBEOQorOjEwMEUxMDAwMDc0OUMwNDZDODczMDc0OTRBNkMxMjE4NEE2NDA2NDkxNAorOjEwMEUyMDAwOEE2RDEyMTg4QTY1ODBCQzA4QkMxODQ3MDAyMEZBRTc1MgorOjEwMEUzMDAwMTgxQTAwODAwQzJCMDA4MEE0MkEwMDgwODEwNzE5RDA4QQorOjEwMEU0MDAwODAwODgwMDAwMTIzOUIwNzAxMUQxODQzMDA2ODE5NDM5NworOjEwMEU1MDAwMDk2ODAyMDIxMjBFMTIwNjAwMEFGRjIzMUIwNDE4NDA0MgorOjEwMEU2MDAwMTA0MzBBMEExMjA2MTIwRTEwNDMwOTAyMUIwQTE5NDAwNworOjEwMEU3MDAwMDg0MzcwNDcwMTIzOUIwNzE4NDMwMDY4MDEwNjAyMDJEQworOjEwMEU4MDAwRkYyMzFCMDQxQTQwMTE0MzAyMEExQjBBMUE0MDExNDM5NAorOjEwMEU5MDAwMDAwRTA4NDNFREU3MDAwMEYwQjUwNDIzODE2QjE5NDAxNAorOjEwMEVBMDAwMDAyMjAwMjk0NkQwQzcxRDM5MzczOTdCMzMyOTAxRDBBQworOjEwMEVCMDAwMzIyOTNGRDEwMTZCQzA0NjRBNjVDNDFEMkQzNENEMUQ3QQorOjEwMEVDMDAwMkQzNTAwMjI5MzAwRTY1OEMwNDZFRTUwMDEzMjA3MkEyNQorOjEwMEVEMDAwRjhEMzgyNkFDMDQ2NEE2MzgyNkFDMDQ2OEE2MjdBOEJDNQorOjEwMEVFMDAwQ0IxRDM5MzM1QTgzNDA2QUMwNDY0ODYyMTI0ODAxMjdGNQorOjEwMEVGMDAwNDI2ODAwMkExMEQxQzI2ODAwMkExM0QxNDI2OTAwMkEzMAorOjEwMEYwMDAwMEREMTAxNjFDMTYwMDE2QTAyMjkwMkQzMjAzMDA3NzE0RAorOjEwMEYxMDAwMENFMDAwRjAxM0Y4MDlFMEMyNjgwMDJBMDJEMTAxNjE3OAorOjEwMEYyMDAwQzE2MDAzRTAwMjY5QzA0NjUxNjUwMTYxMzgxQ0YwQkMzNAorOjEwMEYzMDAwMDhCQzE4NDcxMDFDRkFFNzZDMDYwMDgwODBCNTFFNDlGMworOjEwMEY0MDAwMDAyMkNCNjgwMDJCMzREMEM4MURGOTMwODM2MkNCNjhGNworOjEwMEY1MDAwOUI2QUMwNDZDMzYyQ0Y2OTdCMDBERjE5N0YwMjE3NEJEMworOjEwMEY2MDAwRkYxOEZGMzc2NTM3ODM2MzA3NjNDQjFERkYzMzVBMzNBMQorOjEwMEY3MDAwMUE3MkNCNjkwMDJCMDFEMENBNjEwMUUwMDEyM0NCNjE1OQorOjEwMEY4MDAwMEYxQ0M5Njg0OTZBMDk4OTAxMzE0MTYzRjgxREZGMzBBNgorOjEwMEY5MDAwM0EzMDQyNjAwMjgyODI2MEMyNjAzODFDMDBGMENFRkFCMQorOjEwMEZBMDAwMzg2QTAxMzAzODYyMzgxQzAwRjAwQUY4ODBCQzA4QkM4RQorOjEwMEZCMDAwMTg0NzEwMUNGQUU3MDAwMDZDMDYwMDgwQUNBQjIwNDAxQworOjEwMEZDMDAwRjBCNTA3MUNGOTFERjkzMTg4NkFDMjFEMkQzMjAxMjNDNQorOjEwMEZEMDAwOUIwNzA4MzIxQTQzQzg2QTEyNjgxMjA0MTIwQzgwMTg2MAorOjEwMEZFMDAwODI3OUMzNzkxQjAyMUE0MzEzMDIxMjBBMTIwNjEyMEVFNworOjEwMEZGMDAwMUE0MzEyMDQxMjBDMDIzODkyMDQ5MjBDMDAyNjI1NEQ1QQorOjEwMTAwMDAwRUMxREZGMzQzQTM0MDAyQTA0RDAyMDhBMDEyMzlCMDJDRAorOjEwMTAxMDAwMTg0MzJCRTAwMTIzOUIwN0MyMUQwRDMyMUE0MzEyNjhBRgorOjEwMTAyMDAwMTIwNDEyMzAxODQzMDA2ODAwMDQwMDBDMTA0MzAzMUMyMworOjEwMTAzMDAwRjgxREZGMzA0QTMwODI3OEM4NkIxOTFDMDJGMDAyRjhBNAorOjEwMTA0MDAwMDAyODA0REEyMDhBRkYyMzAxMzMxODQzMEVFMEY5MUQzQgorOjEwMTA1MDAwRkYzMTNBMzEwODYwMDEwNDA5MEMzODFDMDBGMDFDRjgxQgorOjEwMTA2MDAwMDAyODE0RDEyMDhBMDEyMzVCMDIxODQzMjA4MjIxOEFBMAorOjEwMTA3MDAwMzgxQzAwRjBBMkZCRTg2ODAxMjM5QjA3NTQzMDE4NDM5QQorOjEwMTA4MDAwMDA2OEMwNDZFODYwMzAxQ0YwQkMwOEJDMTg0NzAxMjA2RQorOjEwMTA5MDAwRkFFNzAwMDA2QzA2MDA4MEY4QjUwNzFDRkMxREY5MzQ2NworOjEwMTBBMDAwQTA2QkE2NkFDNTFEMEQzNTM4NDhDMDZBNEIwMDU5MTg5QgorOjEwMTBCMDAwNDkwMTQyMTgwMTIwODAwNzEwNDMwMDY4MDAwNDAwMEMxOQorOjEwMTBDMDAwMDA5MDAxMjM5QjA3RDAxRDA1MzAxODQzMDA2ODM4MUM5MQorOjEwMTBEMDAwMjkxQzAwRjBDMkZBQTg4ODQxMDcwMUQwMDAyMDUxRTA4NQorOjEwMTBFMDAwMjk4OTA5MTg2MDZCODE0MkY4RDg2OTg5RUE4ODg5MThDQQorOjEwMTBGMDAwODE0MkYzRDgwMDk4MDEyODI1RDFFMDZBRjE2QjQwMThBRAorOjEwMTEwMDAwNzE2Q0ZBMURDRDMyMDFGMDMzRjlGQTFERkYzMjNBMzIxQgorOjEwMTExMDAwRTA2QTUxNjk0MDE4QzMxRDAzMzMwMDIwODEwMDVFNTgwNgorOjEwMTEyMDAwQzkxOUZGMzEwMTMxNEU2MTAxMzAwNDI4RjZEM0UwNkE1QworOjEwMTEzMDAwNTE2OTQwMThDMTFEMDUzMTAwMjAwMDIyNDMwMENBNTJFOAorOjEwMTE0MDAwMDEzMDA2MjhGQUQzMjkxQzExNEEwMDIwRkZGN0FFRkIxNAorOjEwMTE1MDAwMDEyMjUyMDQ2MDZCMDI0MzAxMjAyMTZCRkZGN0E2RkJDMgorOjEwMTE2MDAwMDEyMjUyMDQ2MDZCMDI0MzAwMjBFMTZBRkZGNzlFRkJGQworOjEwMTE3MDAwQTE2QjA4NEEwMTIwRkZGNzk5RkIwMzIwMDY0OUMwNDZFRQorOjEwMTE4MDAwNDg2MjAxMjBGOEJDMDhCQzE4NDcwMDAwNEMyQTAwODBDNworOjEwMTE5MDAwNTQwMDAzMDAxNDAwMEYwMDZDMDcwMDgwRjBCNThEQjAwMAorOjEwMTFBMDAwMDAyMEI1NEFENTFERjkzNTY4NjIwMTIwMDAwNUIzNDkxNAorOjEwMTFCMDAwQzA0NjA4NjBBODZBQzQxRDJEMzRCMTQ4QzA2QUQ3MUQ1NgorOjEwMTFDMDAwRkYzNzNBMzczOTY4NEIwMDU5MTg0OTAxNDAxODAxMjM1NQorOjEwMTFEMDAwOUIwN0MxMUQwNTMxMTk0MzA5NjgwODMwMTg0MzAwNjg5MQorOjEwMTFFMDAwQzA0NjA5OTBGRjIzMUIwMjE4NDAwMDBBMEE5MDBBOTg4MworOjEwMTFGMDAwQTQ0RTAxMjg1OUQxMjg2QkEyNjg4MDE4QTI0QTIxNjlGRgorOjEwMTIwMDAwMDkwNDA5MEMwMUYwMjZGOTI4NkI3OTY5NDAxOEMxMUQwMQorOjEwMTIxMDAwMDUzMTAwMjA4MjAwOTg0QkQzMThGRjMzMDEzMzVCNjlGRQorOjEwMTIyMDAwQzA0NjhCNTAwMTMwMDQyOEY0RDMwMDIwMzExQzgyMDBDQQorOjEwMTIzMDAwNTYxODAxMjM5QjA3MzM0MzFCNjgwNEFFQjM1MDAxMzA5QgorOjEwMTI0MDAwMDMyOEY0RDMwMDIwMDg5MDkwNDk0MjAwOEI1QUIyNUFFOAorOjEwMTI1MDAwOTM0MjEzRDA4RTQ4QzE4OTAxMzFDMTgxQjg2ODAwMjhGQQorOjEwMTI2MDAwMDNEMTM4OEExMDIzMTg0MzcxRTAzODhBNDAyMzE4NDM4OQorOjEwMTI3MDAwNkRFMDAwRjAxMUY5MDFGMDY3RkZGNUUwMDEzMDA2Mjg5QworOjEwMTI4MDAwRTNEMzA4OTgwMDI4MENEMUI4Njg0MTFDQjk2MDAwMjg0NQorOjEwMTI5MDAwMDNEMTM4OEEwMTIzMTg0MzAyRTAzODhBMDQyMzE4NDMxMworOjEwMTJBMDAwMzg4Mjc4NjgwMTMwNzg2MDYyRTAwQTk4MDIyODVGRDE1RAorOjEwMTJCMDAwMDk5ODQwMEM3M0QzMDEyMzlCMDdFMDFEMDEzMDE4NDNBQworOjEwMTJDMDAwMDA2OEUxMUQwRDMxMTk0MzA5Njg0MDE4MEMzODAwMDQwRAorOjEwMTJEMDAwMDAwQzAwMjE4QTAwNkI0QkQ2MTgwMTIzOUIwNzMzNDM3NworOjEwMTJFMDAwMUI2ODA0QUVCMzUwMDEzMTAzMjlGM0QzMDAyMTgzMUVFMAorOjEwMTJGMDAwMEM5MzY4NEExNjZCQzA0NjBCOTY4QTAwMEM5QjlCMTg5MQorOjEwMTMwMDAwMEI5RTlFMTkwMTIzOUIwNzMzNDMxQjY4NkU0NkIzNTAwNworOjEwMTMxMDAwMDEzMTA0MjlGMUQzNjk0NjhCMUMwNzkzMDAyMTA4OTEwMAorOjEwMTMyMDAwMDRBRTRBMDAwNzlCOUI1QUIyNUE5MzQyMTFEMDU4NDhDOAorOjEwMTMzMDAwQzE4OTAxMzFDMTgxRjg2ODQxMUNGOTYwMDAyODAzRDFERAorOjEwMTM0MDAwMzg4QTIwMjMxODQzMDJFMDM4OEE4MDIzMTg0MzM4ODJFMQorOjEwMTM1MDAwOEZFNzAxMzEwNjI5RTREMzA4OTkwMDI5MEREMUY5NjhGNgorOjEwMTM2MDAwNEExQ0ZBNjAwMDI5MDREMTM5OEEwMjIzMTk0MzAzRTA5OAorOjEwMTM3MDAwMENFMDM5OEEwODIzMTk0MzM5ODIyOTZCMDgxODAxMjNBNAorOjEwMTM4MDAwOUIwNzAxMzgxODQzMDA2OEMwNDYyMDc2MDEyMzlCMDc1RAorOjEwMTM5MDAwRTAxRDExMzAxODQzMDA2ODAxMDYwOTBFMDBFMDE5RTA1NQorOjEwMTNBMDAwMzU0ODJBNkJDMDQ2RUE2MjA0Mjk0RkQxMDEyMUM2MUQ4NworOjEwMTNCMDAwRkYzNjVBMzYzMTcyMEE5OTAyMjkxRUQxMDk5OTA5MEU0RgorOjEwMTNDMDAwNDkwNjFBRDFFMTFEMDUzMTE5NDMwOTY4MDkwNjA5MEVCQworOjEwMTNEMDAwMDgzOTFBRTAwMTIzOUIwN0UwMUQwMTMwMTg0MzAwNjgxQgorOjEwMTNFMDAwRTExRDBEMzExOTQzMDk2ODQwMTgwMDA0MDAwQ0Y5NjgyQgorOjEwMTNGMDAwNEExQ0ZBNjAwMDI5QkNEMUI2RTcwMTIzOUIwN0UxMUQxNgorOjEwMTQwMDAwMDUzMTE5NDMwOTY4MDkwNjA5MEVBMTYwRTg2QUMwNDY1QQorOjEwMTQxMDAwMjA2MDIwMUNGRkY3ODhGQzIwN0UzMzI4MDFEMDMyMjg3MgorOjEwMTQyMDAwMTFEMTAxMjExNDRDQzA0NkY5NjBCOTYwMjAxQzAwRjBCNAorOjEwMTQzMDAwODVGODI4NkJBOTZBQzA0Njg4NjIyMDFDRkZGN0MwRkRBQQorOjEwMTQ0MDAwMDAyODExRDEwRUUwMDAyMDMwNzIxMUUwMzMyOTAxRDBDNAorOjEwMTQ1MDAwMzIyOTBERDEwNzFDMDBGMDcxRjgzODFDRkZGN0IwRkRFMAorOjEwMTQ2MDAwMDAyODAxRDEwMUYwNzBGRTBEQjBGMEJDMDhCQzE4NDc5NworOjEwMTQ3MDAwMDBGMDEyRjhGNkU3MDAwMDZDMDYwMDgwMDAwMDAwQjBGMworOjEwMTQ4MDAwNEMyQTAwODBBQ0FCMjA0MDQwMDcwMDgwODIwNzAwODBERgorOjEwMTQ5MDAwMEMyQjAwODA2QzA3MDA4MEYwQjUyNTQ4NDE2ODAxMzFCNQorOjEwMTRBMDAwNDE2MDI0NEZGOTFERjkzMTAwMjQ4ODZBRkE2OEMwNDY2QQorOjEwMTRCMDAwOTQ2MTA0MjJGQjY4QzA0NkRBNjAxMDIyRkI2OEMwNDZEMworOjEwMTRDMDAwOUE2MUZBMURGRjMyNUEzMjEzN0ExQjRBMDAyQjBCRDA1NQorOjEwMTREMDAwMTU4QTJFMEEzNjAyMzMyMzJCNDA5QjAwMUU0M0NDMjM1MQorOjEwMTRFMDAwMkI0MDlCMDgzMzQzMTM4MjEyOEFGQjY4QzA0NkRBODM4MQorOjEwMTRGMDAwNEE2QkZCNjhDMDQ2REE4MTBBNkJDMDQ2ODI2MkM0NjJFRQorOjEwMTUwMDAwQzMxRDM5MzM0QTZCQzA0NjVBODMwNDIzMDI2ODFBNDMwOQorOjEwMTUxMDAwMDI2MDg4NkEwMUYwMzJGQUY4NjgwMTIzOUIwNzU0MzBCMAorOjEwMTUyMDAwMTg0MzAwNjhDMDQ2Rjg2MEYwQkMwOEJDMTg0NzAwMDBDQgorOjEwMTUzMDAwMEMyQjAwODA2QzA2MDA4MEFDMDcwMDgwODBCNUMxMURCQworOjEwMTU0MDAwRjkzMThBNkEwMTIzOUIwN0QxMUQ0NTMxMTk0MzA5Njg4NgorOjEwMTU1MDAwMEIwNjFCMEUwMTI3QzExREZGMzE0QTMxMzMyQjA1RDE2QworOjEwMTU2MDAwOEI3MDAxMUMxMDFDMDBGMDBGRjgwNkUwMzIyQjA4RDEyNAorOjEwMTU3MDAwOEI3MDAxMUMxMDFDMDBGMDNDRjgzODFDODBCQzA4QkNBRgorOjEwMTU4MDAwMTg0NzAwMjA4ODcwRjlFNzkwQjRDQTFERjkzMjMzMjc1NAorOjEwMTU5MDAwQ0MxREZGMzQ0QTM0RDM2QUMwNDZBNzcwRkYzMTQxMzFCNQorOjEwMTVBMDAwMDc2Q0MwNDY0RjYxRkIxODM5MUM5RjFFMDEyMzlCMDcyNworOjEwMTVCMDAwRkMxQzIzNDMxQjY4MUIwNjFCMEU5QjAwMUIwNDFCMENGRgorOjEwMTVDMDAwQzkxODA4MzEwMTY0MDEyMzlCMDdCOTFDMTk0MzA5NjgzNAorOjEwMTVEMDAwMzQzMDAxNzZGODFEMDEzMDE4NDMwMDY4MDAwNEI5MUQ0RAorOjEwMTVFMDAwMTk0M0QwNjMwOTY4MDkwNDA5MEMwODQzRDA2MzkwQkMwRgorOjEwMTVGMDAwNzA0N0IwQjVDQTFERjkzMkM1MUQyRDM1MzIyMENGMUQzQgorOjEwMTYwMDAwRkYzNzRBMzdEMzZBQzA0NkI4NzBDQzFERkYzNDNBMzQyRQorOjEwMTYxMDAwRTg2OEMwNDY2MDYxMTAzMEU4NjA2MDY5QzAxODg3MUVFNQorOjEwMTYyMDAwMDEyMzlCMDczODFEMTg0MzAwNjgwMDA0QjkxQzE5NDNBNworOjEwMTYzMDAwRDA2MzA5NjgwOTA0MDkwQzA4NDNEMDYzRjgxRDAzMzAxRQorOjEwMTY0MDAwRkZGN0ZDRkIyMDYyRjgxRDA3MzBGRkY3RjdGQjYwNjIzNQorOjEwMTY1MDAwMDAyMDI4NzZCMEJDMDhCQzE4NDdGN0I1ODFCMDAxOThDNworOjEwMTY2MDAwQzcxREY5MzdCODZBMDEyMzlCMDdENDFEMDUzNDIzNDNFRQorOjEwMTY3MDAwMUM2OEZGMjNGRTMzMjM0MDdGNkIzRjA0M0I0MzBCNjAxQQorOjEwMTY4MDAwMzQzMDFDMUM4MDIzMjM0MDAxOUZGRjM3NDEzNzAwMkIzRgorOjEwMTY5MDAwM0NEMDBDMjMwMDkzMDAyMzlEMDBBRTE4MzY2OTZEMThEMgorOjEwMTZBMDAwNkU2MTAxMzMwNTJCRjdEMzAwMjM5RDAwQUUxODc2NkFENworOjEwMTZCMDAwNkQxOEFFNjIwMTMzMDUyQkY3RDMwMTlCRkYzMzUxMzMxNQorOjEwMTZDMDAwOUI3ODMzMkIwRUQxMDEyMzlCMDdDNTFEMDEzNTJCNDM3RQorOjEwMTZEMDAwMUI2OEMwNDY0QjgxMDEyMzlCMDdDNTFEMEQzNTJCNDM1RAorOjEwMTZFMDAwMUI2ODE2RTA3QjY5QzA0NjRCODEwMTIzOUIwN0M1MUQyMworOjEwMTZGMDAwMEQzNTJCNDMxQjY4N0Q2OTVEMUIwMTIzOUIwN0M2MURCMAorOjEwMTcwMDAwMDEzNjMzNDMxQjY4RUIxODBDM0IwMkUwMDAyMzAwOTNDNworOjEwMTcxMDAwNEI4MUNCODA2MzA5NDlEMzAxMjM5QjA3QzQxRDA1MzQ0QQorOjEwMTcyMDAwMjM0MzFCNjhDMDQ2MEI4MTAxMjM5QjA3QzQxRDBEMzQ1NgorOjEwMTczMDAwMjM0MzFCNjgwQzg5MUIxQjAwOUMxQzFCMDEyMzlCMDc1QworOjEwMTc0MDAwMDgzMDE4NDMwMDY4MjAxODg4ODAzODZBMDQwRUZGMjM4OAorOjEwMTc1MDAwMUIwNDAzNDAxQjBBMUM0M0ZGMjMxQjAyMDM0MDFCMDIwNAorOjEwMTc2MDAwMjM0MzAwMDYxODQzQzg2MDc4NkEwNzBFRkYyMzFCMDQ1MgorOjEwMTc3MDAwMDM0MDFCMEExRjQzRkYyMzFCMDIwMzQwMUIwMjNCNDM4MgorOjEwMTc4MDAwMDAwNjE4NDMwODYxRDA2QkMwNDZDODYzOTA2QkMwNDYyMgorOjEwMTc5MDAwMDg2NDUwNkNDMDQ2NDg2NDEwNkNDMDQ2ODg2NEQwNkNDNQorOjEwMTdBMDAwQzA0NkM4NjQ5MDZDQzA0NjA4NjUwMkUwMDAyMzBCODEwNworOjEwMTdCMDAwOEI4MDA0QjBGMEJDMDhCQzE4NDcwMEI1MEY0QTkzODk3MQorOjEwMTdDMDAwMDEzMzkzODFDMjFERjkzMjA0MjM5MDZBQzA0NkMzNjA3RAorOjEwMTdEMDAwMTAyMzgzNjFDQjBBMDFEMzE4MjM4MzYxQzE4MzUxNkIyQQorOjEwMTdFMDAwQzA0NkMxODE1MTZCQzIxRDM5MzI1MTgzMDQyMzAxNjg0NworOjEwMTdGMDAwMTk0MzAxNjAwMUYwQzJGODA4QkMxODQ3MEMyQjAwODBBNworOjEwMTgwMDAwQjBCNTFCNEMyMDZBMDIyODFCRDIwMDIwRTcxRDE5MzdGNworOjEwMTgxMDAwMzg3MUUxNjhFMDFERjkzMDAwMjkxNUQwNDI2QTAwMkFDQworOjEwMTgyMDAwMTJEMTAxMjUwQUUwRkZGNzg5RkIwMDI4MDlEMTIwNkFCRgorOjEwMTgzMDAwMDIyODAwRDMzRDcxRTA2ODAwMjgwMkQwMzg3OTAwMjhFMgorOjEwMTg0MDAwRjFEMEIwQkMwOEJDMTg0NzQwNkEwMDI4RjlEMTAwMjk4MworOjEwMTg1MDAwRjdEMTYwNjkwMDI4MDREMDA2NDgwMDY4MDNGMEE4RkNBRQorOjEwMTg2MDAwRUZFNzYwNjgwMDI4RUNEMDAwRjA1QUY4RTlFNzAwMDBFNAorOjEwMTg3MDAwNkMwNjAwODAzNDA0MDA4MEIwQjUwNzFDMjAyM0I4NjhEMworOjEwMTg4MDAwMTg0MDAxMjQwMDI1MDAyODBCRDEzODZBMDAyODAzRDExNAorOjEwMTg5MDAwMjgxQ0IwQkMwOEJDMTg0NzFGNDgwMTZFMDEzMTAxNjYwNgorOjEwMThBMDAwMDNFMDQ4NjhDNDIzMTg0MDAzRDEzODZBMDBGMDBDRkNGOAorOjEwMThCMDAwMkZFMDM4MUMwMEYwMUNGQzM4MUMwMEYwN0JGQUI4NjhFNAorOjEwMThDMDAwQzAwODAyRDMzODZBMDBGMEQxRkJCODY4Mzk2QUMwNDY1NAorOjEwMThEMDAwODg2MDM4NkFDMDQ2QzU2MDEwNDg0MTY4MDAyOTExRDE0NworOjEwMThFMDAwQzE2ODAwMjkwOUQxNDE2OTAwMjkwNkQxMzk2QUMwNDY3OQorOjEwMThGMDAwODE2MDQxNjAwMEYwMTRGODBCRTAzOTZBQzA0NjgxNjBGNQorOjEwMTkwMDAwNDE2MDA2RTAzOTZBODI2OEMwNDZEMTYwMzk2QUMwNDZFMworOjEwMTkxMDAwODE2MDIwMUNCREU3MDAwMEE0MkEwMDgwNkMwNjAwODBDNgorOjEwMTkyMDAwOTBCNTBCNEM2NzY4MDAyRjBGRDAzODFDMDBGMDEyRjhGMAorOjEwMTkzMDAwMDAyODBBRDE2MDY4QzA2OEMwNDY2MDYwMzgxQzAwRjBBQQorOjEwMTk0MDAwQzNGQjAwMjA5MEJDMDhCQzE4NDcwMTIwRkFFNzAwMDA0OAorOjEwMTk1MDAwNkMwNjAwODBGMEI1MDcxQ0ZFMUQ0OTM2MzA3ODQwMDA0QgorOjEwMTk2MDAwQzAxOTg1OEIzMzRDMzQ0QjlENDIzQ0QwMzgxQzIxMUMxNAorOjEwMTk3MDAwMkExQzAwRjAxREY5MzE0ODgwNkE1ODIxNjk0MzQwMTgzQgorOjEwMTk4MDAwMDEyMzlCMDcxODQzMDA2ODAwMDQwMDBDMkM0RDAxMjgxQworOjEwMTk5MDAwMUFEMTMwNzhDMDE5QzExRDE5MzEwODdBM0E2ODgwMThGNworOjEwMTlBMDAwMDk3QkVBMUQyMTMyMDBGMEUzRkMzMDc4QzAxOTIwMzBCOQorOjEwMTlCMDAwMDA3OTM5Njg0MDE4QzExRDA1MzEwMDIwMDAyMzQyMDAxQworOjEwMTlDMDAwOEI1MjAxMzAwNjI4RkFEM0EwODg0MTA3MEJEMTIxODkxOAorOjEwMTlEMDAwMDkxODc4NjgwMDA0MDAwQzgxNDIwNEQ4NjE4OUUyODgwMworOjEwMTlFMDAwODkxODgxNDIwM0Q5MDAyMEYwQkMwOEJDMTg0NzIxMUM4QgorOjEwMTlGMDAwMTQ0QTAwMjBGRUY3NUFGRjAxMjI1MjA0Nzg2ODAyNDM3RAorOjEwMUEwMDAwMDEyMDM5NjhGRUY3NTJGRjAxMjI1MjA0Nzg2ODAyNDMzMAorOjEwMUExMDAwMDAyMDM5NjhGRUY3NEFGRjBCNDkwQzRBMDEyMEZFRjcwNworOjEwMUEyMDAwNDVGRjAxMjBFOTFEMTkzMTQ4NzEwMjIxRUExREY5MzJGMworOjEwMUEzMDAwNTE2MkQ5RTcyOEFDMjA0MEZGRkYwMDAwNEMyQTAwODAwQgorOjEwMUE0MDAwNkMwNjAwODA1NDAwMDMwMDE0QUMyMDQwMTQwMDA3MDAxMgorOjEwMUE1MDAwRjBCNTgzQjAwMDIxNEY0OEMyMURGOTMyNTE2MjAxMjExNworOjEwMUE2MDAwQzkwNDRENEFDMDQ2MTE2MEMxMUQxOTMxNDk3OTAwMjk4OAorOjEwMUE3MDAwMDREMTRBNDgwMDY4MDNGMDlCRkI4N0UwNDU0ODQ3Njg2QgorOjEwMUE4MDAwRkMxRDQ5MzQyMTc4NDgwMEMwMTk4MDhCNDQ0QTkyNkE3MQorOjEwMUE5MDAwNTgyMzU4NDMxNTE4MDEyMzlCMDdFQTFEMDUzMjFBNDNBMgorOjEwMUFBMDAwMTI2ODA4MzUyQjQzMUQ2OEZGMjMxQjAyMkI0MDFCMEFCRAorOjEwMUFCMDAwM0M0RDAxMkIyNEQxQzgxOUMxMUQxOTMxMDg3QTNBNjg0RgorOjEwMUFDMDAwODAxODM5NEEwOTdCMDBGMEM1RkMyMDc4QzAxOTIwMzAwNQorOjEwMUFEMDAwMDA3OTM5Njg0MTE4MDAyMDgyMDA1MzE5OUI2RTZFNDZDOAorOjEwMUFFMDAwQjM1MDAxMzAwMzI4RjdEM0NBMUQwNTMyNjk0NjAwMjBFMAorOjEwMUFGMDAwNDMwMENENUFDMDQ2RDU1MjAxMzAwNjI4RjhEMzJERTAxOAorOjEwMUIwMDAwMDIyQjJCRDExMTBBMjlEMzAwMjE4QTAwNTMxOTlCNkU3NQorOjEwMUIxMDAwNkU0NkIzNTAwMTMxMDMyOUY3RDMyMTc4NDkwMEM5MTkyMgorOjEwMUIyMDAwMDk4RjNBNjg4QjE4NkE0NjAwMjE0RDAwNTY1QkMwNDYwMworOjEwMUIzMDAwNUU1MzAxMzEwNjI5RjhEMzE5NDk4QTZBMTMxODFBNkRDMAorOjEwMUI0MDAwMDA5RDU1NDAxOTRBRDY2ODc1NDAxRDY1ODk2QTA4MTg3OAorOjEwMUI1MDAwNDE2RDAyOUI1OTQwOTI2OTUxNDA0MTY1MjA3ODQxMUU3OAorOjEwMUI2MDAwMjE3MDAwMjgwREQwMzgxQ0ZGRjdGNEZFMDAyODBERDE5RAorOjEwMUI3MDAwMDg0QTUwNjhDMDY4QzA0NjUwNjAzODFDMDBGMEE0RkE5QgorOjEwMUI4MDAwMDJFMDM4MUMwMEYwNzNGQTAxRjBERUZBMDNCMEYwQkM5QQorOjEwMUI5MDAwMDhCQzE4NDc2QzA2MDA4MDAwMDAwMEIwMzgwNDAwODBDNAorOjEwMUJBMDAwNEMyQTAwODBBQ0FCMjA0MDk0MDYwMDgwMDg4MzIwNDA4MworOjEwMUJCMDAwRjBCNTgyQjA2OTRCOUY2QTU4MjM1QTQzQkExOEMzMURDNworOjEwMUJDMDAwNDkzMzFGNzgwMTIzOUIwN0Q0MUQwMTM0MjM0MzFENjgyQgorOjEwMUJEMDAwNDM2ODFDMDQwMTIzOUIwN0Q2MUQwNTM2MzM0MzFCNjg0RAorOjEwMUJFMDAwMUM0MzQyMjMxQzQzMEM2MEZGMjYzNjAyMkU0MDAxMjM3NworOjEwMUJGMDAwNUIwMjlFNDI3NEQxNkIwQzJCRDNDMzE5MjAzMzFCNzkyQgorOjEwMUMwMDAwQzA0NjRCODE3QjAwMUIxODFCOEY0Qzg5MUIxQkNCODA1NAorOjEwMUMxMDAwMDAyNEE2MDAwMTk2QjMxOERFMUQwOTM2MDEyMzlCMDc5OAorOjEwMUMyMDAwMzM0MzFCNjgwMTlFNzYxODczNjEwMTM0MDUyQ0YwRDM5MQorOjEwMUMzMDAwMDAyNEE2MDAwMDk2QjMxOERFMUQxRDM2MDEyMzlCMDc2NQorOjEwMUM0MDAwMzM0MzFCNjgwMDlFNzYxOEIzNjIwMTM0MDUyQ0YwRDMzMQorOjEwMUM1MDAwMDZFMDAwMjM0QjgxQ0I4MDQwMjM5QzQzMEM2MDIzMUM3NworOjEwMUM2MDAwNkIwRTRBRDNDMzE5MjAzMzFCNzkxMDMzMEI4MTdCMDBEMQorOjEwMUM3MDAwMUIxODFCOEYwRjg5REIxQjhCODAwMTIzOUIwN0Q0MUQzNworOjEwMUM4MDAwMzUzNDIzNDMxQjY4QzA0NkNCNjMwMTIzOUIwN0Q0MUQxNworOjEwMUM5MDAwMzEzNDIzNDMxQjY4QzA0NjBCNjRBQjBFMjFEMjAxMjNCMQorOjEwMUNBMDAwOUIwN0Q0MUQzRDM0MjM0MzFCNjhDMDQ2NEI2NDAxMjM2RQorOjEwMUNCMDAwOUIwN0Q0MUQzOTM0MjM0MzFCNjhDMDQ2OEI2NDAxMjMyMgorOjEwMUNDMDAwOUIwN0Q0MUQ0NTM0MjM0MzFCNjhDMDQ2Q0I2NDAxMjNDNgorOjEwMUNEMDAwOUIwN0Q0MUQ0MTM0MjM0MzFCNjhDMDQ2MEI2NTAwRTBCRAorOjEwMUNFMDAwMEZFMEZCMUYwMTNCMUIwNDFCMEMwNzY4RkYxODAzNjk3NworOjEwMUNGMDAwMDgxQzM5MUMwMEYwMzRGODJDRTAwMDIzMEI4MThCODA4OQorOjEwMUQwMDAwMjhFMDAwMjM4QjgwMEI4MUMzMTkyMDMzMUI3QUMwNDY0NworOjEwMUQxMDAwNEI4MTdCMDAxODE4MDA4RUMwNDZDODgwMDAyMDg3MDBDOQorOjEwMUQyMDAwQkIxOERDMUQwOTM0MDEyMzlCMDcyMzQzMUI2ODdGMTg2NAorOjEwMUQzMDAwN0I2MTAxMzAwNTI4RjJEMzAwMjA4NzAwQkIxOERDMUQzMQorOjEwMUQ0MDAwMUQzNDAxMjM5QjA3MjM0MzFCNjg3RjE4QkI2MjAxMzBBRQorOjEwMUQ1MDAwMDUyOEYyRDMwMkIwRjBCQzA4QkMxODQ3NEMyQTAwODAxQQorOjEwMUQ2MDAwODBCNDFGMUMzQjBDMThEMjE3NkQxMTRCQzA0NkRGNjBBRQorOjEwMUQ3MDAwNTI2REMwNDYxQTYxQzc2MDFBNjlDMDQ2MDI2MUQ4NjhEMAorOjEwMUQ4MDAwQzA0NjA4ODBEODY4MDAwQzQ4ODAxODY5QzA0Njg4ODAyMgorOjEwMUQ5MDAwMTg2OTAwMENDODgwODBCQzcwNDc0QTg4MTIwNDBCODgwMAorOjEwMURBMDAwMUE0M0MyNjA4QTg4Qzk4ODA5MDQxMTQzMDE2MUYyRTdCNQorOjEwMURCMDAwMkMwNzAwODBGMUI1ODhCMDAwMjIwODk4MDA2QTA4OUJDMworOjEwMURDMDAwOTk2ODQ5MEEwMkQzMDEyN0ZGMDMwMEUwMDAyNzAzOEIyQgorOjEwMUREMDAwMDAyQjE5RDBBMzQ5ODk2QTFDMUM1ODIzNjM0M0M5MThENgorOjEwMURFMDAwMDEyMzlCMDc1ODM5MTk0MzA5NjgwOTA0MDkwQzAyMjk4MgorOjEwMURGMDAwMDJEMTA4MjMxRjQzMDdFMDQxOEIwMDI5MDJEMDBDMjNBNgorOjEwMUUwMDAwMUY0MzAxRTAwNDIzMUY0MzgzOEEwMDJCMThEMDk1NDkwOAorOjEwMUUxMDAwODk2QTFDMUM1ODIzNjM0M0M5MTgwMTIzOUIwNzU4MzkzRQorOjEwMUUyMDAwMTk0MzA5NjgwOTA0MDkwQzAyMjkwMUQxMEY0MzA3RTA4RAorOjEwMUUzMDAwQzE4QTAwMjkwMkQwMDMyMzFGNDMwMUUwMDEyMzFGNDM2RAorOjEwMUU0MDAwQzExRDM5MzEwNzkxNEI4OTBDODkxQzE5MjQwNDI0MENCQworOjEwMUU1MDAwMDg5RDJENjhDMDQ2MDE5NUM5ODg3RDA4MUFEMzFBMUNCMworOjEwMUU2MDAwQzMxRDE5MzMxQTcyMDc5QTkyODlDMDQ2MUE3MzA3OUFDQQorOjEwMUU3MDAwMTI4OUMwNDYwMjg2MDQ4NzgyOEEwMTNBODI4MzAxMjIzRgorOjEwMUU4MDAwMTk3MTA4OUIxQjY4NUIxODVCNzg5QjAwMUIwNDFCMEM3QgorOjEwMUU5MDAwMDgzMzU5MThCQjA4NDdEMzA3OUI1Qjg5ODUxODA2OTVGQgorOjEwMUVBMDAwMjAzNTJCNzIwNzlCOUI4OUMwNDYyQjczMDc5QjFCODk5MAorOjEwMUVCMDAwMkUxQzU1MDAyRDE4MDU5NTJCODYwMDJBMDFEMEMzOEFBQgorOjEwMUVDMDAwMDBFMDgzOEEwMTNCMDU5REMwNDZBQjgzMzE3MTY1NEJDMQorOjEwMUVEMDAwOUQ2QTA1OUI5RThCNTgyMzczNDNFQjE4REQxRDAxMzVDRQorOjEwMUVFMDAwMDEyMzlCMDcyQjQzMUQ2ODJCMEU1QjA2MDFEMTA4MzE5NAorOjEwMUVGMDAwMDBFMDEwMzE4MTIzNUIwMjFENDA5RDQyMDNEMUUzMUZBRQorOjEwMUYwMDAwMDUzQjFDMDQyNDBDMDU5QkMwNDYxQzg3MDg5QjFCNjhEMgorOjEwMUYxMDAwMUIxOTEwM0I5QjdCMDY5RDQwMzUyQjcwMkI3ODAyMzNBMQorOjEwMUYyMDAwRTMxQTFDMDQyNDBDMDEzMkJCMDg5QjA3NkREMDgzMThGNAorOjEwMUYzMDAwMjAzMzA0OTMxOTcyMDE5QjVEMTgwMTIzOUIwNzJCNDNFNworOjEwMUY0MDAwMUI2ODFCMDcxQjBGOUIwMDA0OUVDMDQ2MzM3MzAwOTU0NAorOjEwMUY1MDAwMkI3ODFCMDcxQjBGOUIwMDA0OURDMDQ2MkI3MzAwOUQxNQorOjEwMUY2MDAwRUI3OEFENzgxQjAyMUQ0MzJCMDIyRDBBMkQwNjJEMEU5QQorOjEwMUY3MDAwMkI0MzU1MDAyRDE4MkI4NjA0OUJDMDQ2NTk3MjA0OUI5OQorOjEwMUY4MDAwMUI3QjJFMUMwNDlEQzA0NjZCNzMzMzhFQzA0NjczODYyQworOjEwMUY5MDAwMDA5RDJCNzgxQjA3MUIwRjlCMDAxQjA0MUIwQzU5MTg2MworOjEwMUZBMDAwMDQyNTNENDAwRUQwMzQ4NzAzOEIwMTNCQjM4MzEzMUNDMworOjEwMUZCMDAwMUIxODIwMzMxOTcxMDE5QjVCMTg1Qjc4OUIwMDU5MTgyMworOjEwMUZDMDAwMDgzMTAxMzIzQjA5MzdEMzAwMkQwMUQwNDM4QjAwRTBBQgorOjEwMUZEMDAwMDM4QjU1MDAyRDE4MDEzQkFCODM4MzE4MDM5MzIwMzNFQgorOjEwMUZFMDAwMTk3MTIwNEI5RDZBNTMwMDFCMTgwMjkzOUU4QjU4MjMzNgorOjEwMUZGMDAwNzM0M0VCMThERDFEMDEzNTAxMjM5QjA3MkI0MzFENjgzRgorOjEwMjAwMDAwMkIwRTVCMDYwMkQxMDgzMTAxRTAxNUUwMTAzMTgxMjM2RgorOjEwMjAxMDAwNUIwMjFENDA5RDQyMDNEMUUzMUYwNTNCMUMwNDI0MENDMQorOjEwMjAyMDAwMDI5QkMwNDYxQzg3MDg5QjFCNjgxQjE5MTAzQjlCN0JBRgorOjEwMjAzMDAwMDM5QzQwMzQyMzcwMDEzMjA3OUJDMDQ2RDk4MDUxMUU1NworOjEwMjA0MDAwQzMxRDQ5MzMxOTcwMDc2MTA0MkEwNkQyMDY0OTUzMDA5QgorOjEwMjA1MDAwMUIxODk5ODMwMTMyMDQyQUY5RDMwOUIwRjBCQzA4QkNEQgorOjEwMjA2MDAwMTg0NzAwMDA0QzJBMDA4MEZGRkYwMDAwNzA0NzgwQjUzMQorOjEwMjA3MDAwOENCMDA3MUMxMjQ4MDE2ODAxMzEwMTYwMzg2OEMwNDYwNQorOjEwMjA4MDAwMDA5MDc4NjhDMDQ2MDE5MEI4NjhDMDQ2MDI5MDBENDgzQworOjEwMjA5MDAwNDE2OEM5NjhDMDQ2NDE2MDM4MUMwMEYwNEZGOEI4NjgxNAorOjEwMjBBMDAwNDAwOTA2RDMxMDIzMDI5ODE4NDMwMjkwNjg0NjAyRjBCNAorOjEwMjBCMDAwRTFGRjY4NDYwMkYwOUFGRTBDQjA4MEJDMDhCQzE4NDdFRAorOjEwMjBDMDAwMEMyQjAwODA2QzA2MDA4MDAwQjU4Q0IwMDE2OEMwNDYwNworOjEwMjBEMDAwMDA5MTQxNjgwNTRCMTk0MzAxOTEwMEYwMkZGODY4NDZDMworOjEwMjBFMDAwMDJGMDg0RkUwQ0IwMDhCQzE4NDcwMDAwMDAwMDAwQTBGRAorOjEwMjBGMDAwMDI2QTAzNjhDMDQ2MTM2MDQwNjhDMDQ2NTA2MDQwMzJDMAorOjEwMjEwMDAwNDg2OEMwNDY5MDgwQzg2OEMwNDZEMDgwNDg2OUMwNDZDQworOjEwMjExMDAwMTA4MTg4NjhDMDQ2NTA4MTA4N0VDMDQ2OTA3MzA4Njk2NworOjEwMjEyMDAwQzA0NjkwODE3MDQ3MDQ0OTA4NjgwMDI4MDBEMTcwNDc3NAorOjEwMjEzMDAwQzI2OEMwNDYwQTYwRkFFNzZDMDYwMDgwMDI0OTBBNjg3NQorOjEwMjE0MDAwQzA0NkMyNjAwODYwNzA0NzZDMDYwMDgwQjBCNDAwMjJEMAorOjEwMjE1MDAwMTI0RjdDN0YwMTM0N0M3NzAzMjNGQzFEMTkzNDM4NjJENQorOjEwMjE2MDAwNzk2MjIzNzIwRTRDMjU2ODZCMEMwNUQyMjM2ODFCMEMxOAorOjEwMjE3MDAwMTBEMTI0NjhBMzBBMEREMzAxMjMwQTRGQzA0NkZCNjI4NQorOjEwMjE4MDAwMDk0RjBBNEJDMDQ2REY2MDk5NjA1ODYwMTAxQzE4NjAwOAorOjEwMjE5MDAwMDEzMkZCRTcxMDFDMzg2NDAxMzJGQkU3MDAwMDAwODBDRAorOjEwMjFBMDAwMDAwMDEwNDBDMDAwMTgwMDAyODEwMDAwNDAwMTE4MDAyQgorOjEwMjFCMDAwRjBCNTQ3NEYzODY4NDc0RTQ3NEQwNzIzNUIwMkVDMTg5MAorOjEwMjFDMDAwMDAyODFERDEyMDZCMDEzMDIwNjM0NDQ5QzA0NjA4NjBCRgorOjEwMjFEMDAwNDM0ODQxNjkwMDI5MTNEMEMxMUQ2OTMxMDk3QjAwMjk5OQorOjEwMjFFMDAwMEVEMDAxMjM5QjA3MDE2RDE5NDMwOTY4QzA0NjgxNjEyOAorOjEwMjFGMDAwQzI2OTkxNDIwNEQwRjE2QzAxMzFGMTY0MDFGMDUwRkVFQQorOjEwMjIwMDAwMzg2ODAxMjgxN0QxMzc0ODQxNjkwMDI5MTNEMEMxMUQwQQorOjEwMjIxMDAwNjkzMTA5N0IwMDI5MEVEMDAxMjM5QjA3MDE2RDE5NDMwOQorOjEwMjIyMDAwMDk2OEMwNDY4MTYxQzI2OTkxNDIwNEQwRjE2QzAxMzFGNAorOjEwMjIzMDAwRjE2NDAxRjAzNUZFMzg2ODAyMjgyRkQxQkIyMzFCMDE2MQorOjEwMjI0MDAwRUUxODcwN0IwMDI4MDNEMDAwMjA3MDczMDBGMDRBRkQ2OAorOjEwMjI1MDAwMzA3QjAwMjgwMkQwNzg2ODAyRjBBQUZGMUIyM0RCMDE0NAorOjEwMjI2MDAwRTgxOEMwOEIwNDI2MDY0MEUwNkFCMDQyMTREMEY4NjgzMworOjEwMjI3MDAwMDEzMEY4NjAxOTI4MTFEMzFCNDgwMTdCMDAyOTBERDFDQQorOjEwMjI4MDAwRkYzMDQxMzA0MDc4MDAyODA4RDFCODY4MDJGMDkwRkY1NAorOjEwMjI5MDAwMDAyMEY4NjBFNjYyMDFFMDAwMjBGODYwMzg2ODAzMjg1QQorOjEwMjJBMDAwMEJEMUVDMUQ3OTM0RTA2QjgwMDgwMkQzMDIyMDAyRjBFMAorOjEwMjJCMDAwMDdGQzAyMjNFMDZCOTg0M0UwNjMzODY4MDEzMDM4NjAyNAorOjEwMjJDMDAwMDMyODAxRDkwMDIwMzg2MEYwQkMwOEJDMTg0NzAwMDA4MgorOjEwMjJEMDAwM0MwNDAwODBBMDgyMjA0MDY4MEUwMDgwNDAwMTE4MDA2RAorOjEwMjJFMDAwNjQyRDAwODBFNDJDMDA4MDI4MDUwMDgwQjBCNDFENDhENworOjEwMjJGMDAwODQ4QTFENEExMzhBQzExRDA5MzEwMTI3OUM0MjAzRDFEQQorOjEwMjMwMDAwNDM4QTU0OEFBMzQyMTBEMDBCNzgwMDJCMEREMDRCNzgwRgorOjEwMjMxMDAwMDAyQjBBRDA0NDhCOTM4QTlDNDIwNERDMTM0QkMwNDZBQQorOjEwMjMyMDAwNUY2MDk3ODIwMUUwMDEzMzkzODJDMzhCNUMxQ0M0ODM5RQorOjEwMjMzMDAwODQ4QkEzNDIwRURCODQ4QTA1OEIwMDIzQUM0MjA1REEzMgorOjEwMjM0MDAwNDQ4QUM1OEFBQzQyMDFEQTRCNzAwMEUwNEY3MDQzODI4OAorOjEwMjM1MDAwODM4MkMzODM0MThBQzA0NjUxODI4MDhBQzA0NjEwODJFQworOjEwMjM2MDAwQjBCQzcwNDdFODBFMDA4MDNDMDQwMDgwNDAwMTE4MDBCQgorOjEwMjM3MDAwRjdCNTkxQjA2QjQ2ODQxRTEyOTkxNDI5MUFEOTAwMjAyMgorOjEwMjM4MDAwODEwMDY3NThDMDQ2NTc1MDAxMzAwMDA2MDAwRTEwMjhFMworOjEwMjM5MDAwRjZEMzAwMjEwNTIwODcwMEQ2NTk0RjFDM0QwNjJEMEU4RgorOjEwMjNBMDAwMEYxQ0JGMDBERTUxMjkxQzAxMzAwMDA2MDAwRTEwMjg1MgorOjEwMjNCMDAwRjFEMzA5RTAwMDIwODEwMDYzNThDMDQ2NTM1MDAxMzAzQQorOjEwMjNDMDAwMDAwNjAwMEUwNjI4RjZEMzAwMjBFMDcwMjA3MjYwNzIyRQorOjEwMjNEMDAwQTA3MjIwNzM2MDczMTI5OTE0MjkzN0Q5Njk0NjhFMUMzNAorOjEwMjNFMDAwOTE3ODA5MDcwOTBGODkwMDE0MzkwRDA2MkQxNjAwMjc2OQorOjEwMjNGMDAwMDAyRDFCRERGMDE5MTBBOTAwRjAzREY4MDAyODBFRDBDQgorOjEwMjQwMDAwMDAyMDEwQTkwOTc4MDAyOTA5REQwMDIyMzkxODcyNTQyQQorOjEwMjQxMDAwMDEzMDAwMDYwMDBFMTBBOTA5Nzg4ODQyRjZEQjEwQThFQQorOjEwMjQyMDAwMDA3ODM4MTgwNzA2M0YwRUFGNDJFM0RCNjg0NkUyMUQyRQorOjEwMjQzMDAwMEQzMjAwMjFBQjA4NUYxQzA4RDA4QjAwQzQ1OEMwNDY4OQorOjEwMjQ0MDAwRDQ1MDAxMzEwOTA2MDkwRThGNDJGNkQ4MTRCMEYwQkMwMQorOjEwMjQ1MDAwMDhCQzE4NDc5MEI0ODcxRTAwMjA4OTA4NEIxQzA4RDA4MAorOjEwMjQ2MDAwODEwMDU0NThDMDQ2N0M1MDAxMzAwMDA2MDAwRTgzNDI2MworOjEwMjQ3MDAwRjZEODkwQkM3MDQ3ODBCNDAyNzhEMjA2RDIwRTAwMjMwMgorOjEwMjQ4MDAwMDEyNzAxMkEwMURDMEY3MDExRTA0MDc4QzA0NjA4NzA3NgorOjEwMjQ5MDAwMTQyQTA0RDEwODQ4MDE3QTAxMzEwMTcyMDdFMDAyMkFBNgorOjEwMjRBMDAwMDVEMDA1MkEwM0QwMDYyQTAxRDAxNTJBMDJEMTE4MUMwRQorOjEwMjRCMDAwODBCQzcwNDczODFDRkJFN0UwODIyMDQwMDBCNTBGNDgyNQorOjEwMjRDMDAwMDEyMzFCMDY0MTY5OTk0MzFBMDk0MTYxRDE2MDAwMjEyQQorOjEwMjREMDAwQTEyMjUyMDM5MTYxMTkxQzA5NEFDMDQ2MTE2MDFCMjNCNQorOjEwMjRFMDAwREIwMUMwMTg4MDY5MDAyODAzRDAwMkYwNjFGRTA4QkMzRgorOjEwMjRGMDAwMTg0NzA0NDg0MTg4MDEzMTQxODBGOEU3NjgwRTAwODBBMAorOjEwMjUwMDAwMDAwMDAwQjBFMDgyMjA0MDcwNDcwMDAwRjBCNTg2QjBDNworOjEwMjUxMDAwOTU0QUQwNjhENzFENzkzNzAxMjgwOUQxMzg4OTAwMjgxNAorOjEwMjUyMDAwMDZEMUQwNkYwMjIzMDE2ODk5NDMwMTYwMTQyMDM4ODFERAorOjEwMjUzMDAwOEU0QzYxNkE4RTQ4QzM2QjU5MThDMTYzQTA2QTE5MjMxNworOjEwMjU0MDAwREIwMUQ0MThBMDYyMjE2QTA5MDMwOTBCODE0MjA1RDE3RAorOjEwMjU1MDAwMDEyMDQwMDQ4NzQ5QzA0NjA4NjBGM0UwQkI4QTU4MUM0QworOjEwMjU2MDAwQjg4MjNEOEIwMTIwMDAyMUFCNDIwNERCRDMxRDg5MzNBRgorOjEwMjU3MDAwNTg3MEI5ODJGOTgzMzMyMzlCMDFEMzE4MDU5MzVCNjlBMworOjEwMjU4MDAwMEYyQjczRDIwMDIxN0M0RkMwNDYzOTYxMjE2QThBNjhDMworOjEwMjU5MDAwMTIwNDEyMEM0QjY4MUUwQzM2MDRGRDFGMDkzRDAwMkU2MAorOjEwMjVBMDAwMDVEMTNCMkEwM0QzMDEyM0RCMDI5QTQyMDFEOUE4NzM0OAorOjEwMjVCMDAwQzhFMDAxMjM5QjA3MDgzMTE5NDMwOTY4QzA0NjAzOTEwRAorOjEwMjVDMDAwMDNBOTA5ODgwMTMxMDkwNDA5MEM3OTgyNDkwOTA1MzFGNworOjEwMjVEMDAwMDkwNjA5MEU2OTRFQzA0NjAyOTY2OTQ4NDM2QUMwNDYxQworOjEwMjVFMDAwMDE5MzgzNkFDMDQ2MDA5M0MyMUQxMTMyODA2OTAwMDNDMworOjEwMjVGMDAwMDAwQjkyNjhCMzA3MUE0MzEyNjg5MDQyMDFEMTAxMjA4MAorOjEwMjYwMDAwMERFMDkwNDIwNUQ5MDA5QjE4MUEwMTlCRDIxQTgyMTgzRQorOjEwMjYxMDAwMDBFMDEyMUEwMTIwMDkwMTkxNDIwMEQzMDAyMDAxMjg5NAorOjEwMjYyMDAwNjVEMTUxNDkyMDY5MDAyODYyRDAwNTk5NDg2OTAxMzA3NworOjEwMjYzMDAwNDg2MTAyMjAyMTZBQzA0NjA4NjAwMEYwQTdGQzc4NjM2OAorOjEwMjY0MDAwQkU2MDQ5NDkyMjZBQTM2QkQzMTg2NjZCQjM0MjAwRDlCNgorOjEwMjY1MDAwMjI2QkMwNDZCQTYyQkE2QTBDMzJGQTYyMDAyMkZBNjE5MAorOjEwMjY2MDAwMDNBQTUyODhEMjA5MDNEMzAxMjIwMEUwN0JFMDAwRTBGNAorOjEwMjY3MDAwMDAyMjdBNjA3QTY4QzA0NjAyNjA3ODhBNDE0RTYwMjhGQgorOjEwMjY4MDAwMDREQ0IwODM3ODhBQzA0NkYwODMwOEUwNjAyMEIwODMyMQorOjEwMjY5MDAwNzk4QUY4NkE0MjE4NjM2QjlBNDIwM0Q4RjE4MzAwMjI2MAorOjEwMjZBMDAwM0E2MzA1RTAyMTZCQzA0NjM5NjM2MTZCMDgxQUYwODMxOQorOjEwMjZCMDAwMkQ0OTc4NkI0MjY4QzA0NkJBNjA4MjY4QzA0NkZBNjBBRAorOjEwMjZDMDAwMDI2OUMwNDY3QTYxNDA2OUMwNDZCODYxMkU0QkM4MTg5RAorOjEwMjZEMDAwMDQ5MDAwRjAzN0Y5MDQ5ODAwRjA4OEY4MDBGMEY2RkE1QQorOjEwMjZFMDAwNzg4QUYxOEI4ODQyMDREMUY5NkEwODE4MDRFMDM4RTA0RQorOjEwMjZGMDAwMzJFMDNBNkIxMDE4NDAxQTgxMDcwMkQwODAwODgwMDAzRgorOjEwMjcwMDAwMDQzMDYxNkIwOTFBQTI2QjkxNDIwMEQyMjA2QkMwNDY2MworOjEwMjcxMDAwMjA2MkU4N0IwMDI4MDhEMDAwMjJFQTczMDU5OTQ4NjkwNgorOjEwMjcyMDAwMDEzODQ4NjE3ODZCMDBGMDczRkExODQ4ODA2QTgwMDZCNworOjEwMjczMDAwODAwRTAxMjgwQUQxMjA2QTAwMDMwMDBCMEI0Q0ExNkEwRAorOjEwMjc0MDAwODg0MjAzRDAwNkIwRjBCQzA4QkMxODQ3MDEyMDQwMDQwMgorOjEwMjc1MDAwMDg0OUMwNDYwODYwMDZFMEUwNjgwMDI4MDFEMDAwRjBBMworOjEwMjc2MDAwQjVGQTAxMjBBODczRURFNzY4MEUwMDgwMDA0MDE0NDAyMAorOjEwMjc3MDAwQTQyQTAwODAwMDAwMDBCMDI4MUEwMDgwNTU1NTU1NTU0NQorOjEwMjc4MDAwQTgwMzAwODA2ODFBMDA4MEM0MEIwMDAwMDAwMDEwNDBGRAorOjEwMjc5MDAwODBCNTA3MUM3ODZBNDA4OUZGMjEwMTMxMDE0MDEwNDg0QgorOjEwMjdBMDAwMDJEMTgxNkMwMTMxODE2NDc5NkE0OTg5NDkwQjAyRDI3NQorOjEwMjdCMDAwNDE2QzAxMzE0MTY0MEI0ODQxNkEwMTMxNDE2Mjc4NkFFMAorOjEwMjdDMDAwMzk2QkMwNDY0ODYyMzg2QjAwRjBGOEZCMzgxQzAwRjBFQgorOjEwMjdEMDAwQjNGODAxMjAwNDQ5QzA0NkM4NzM4MEJDMDhCQzE4NDc0MAorOjEwMjdFMDAwQTQyQTAwODBBMDgyMjA0MDE4MUEwMDgwRjhCNTA3MUM5NworOjEwMjdGMDAwMDAyMkY5MUQ2MTMxMEQxQzc4NkFDMDQ2MDA5MDQwODlBNQorOjEwMjgwMDAwMDMwQzAxRDI0MDBBMDNEMjM4MUNGRkY3QzFGRjY3RTA3NgorOjEwMjgxMDAwMzU0OEMwNkIwMDA5MUZEMzA4Nzg0MDA4MUNEMjAwMjAzRgorOjEwMjgyMDAwNDMwMENDNUEzMTRFOUUxOTMzMjM5QjAxRjMxODFCODg2OQorOjEwMjgzMDAwOUM0MjBFRDBCODY5Mzk2QkMwNDY4ODYxRjg2ODM5NkIyNAorOjEwMjg0MDAwQzA0NkM4NjAzODFDMDBGMDI3RjkzODFDMDBGMDc0Rjg0NgorOjEwMjg1MDAwNDZFMDAxMzAwMzI4RTNEQjAyMjA0MzAwNUMxOEU0ODhGMworOjEwMjg2MDAwMjI0RTlFMTkzMzIzOUIwMUYzMTgxQjg4OUM0MjAzRDFFRgorOjEwMjg3MDAwMDEyMzAxMzhEODQyRjBEQzAxMjNEODQyQzREMDFCNEVEQQorOjEwMjg4MDAwMEIyMzFCMDJGMDE4NDA2OTAwMjgyNEQwN0Q2MzAwOThCOAorOjEwMjg5MDAwNDA4OTAwMEMxRkQyMDAyNDJEMjM5QjAxRjAxOEMwNkIyRgorOjEwMjhBMDAwMzUxQzAwMjgxN0QwRkUxRDJEMzZBMjAwNTIxOTJEMjNFRAorOjEwMjhCMDAwOUIwMUQyMThEMjZCMzgxQzMxMUMwMkYwN0JGQzAxMjgyMgorOjEwMjhDMDAwMEVEMDAxMzRBMDAwNDAxOTJEMjM5QjAxQzAxOEMwNkIwRAorOjEwMjhEMDAwMDAyOEVBRDEwMUUwMDEyQTAyRDAzODFDMDBGMDA4RjhGMworOjEwMjhFMDAwRjhCQzA4QkMxODQ3MDAwMEU4MUEwMDgwNjgwRTAwODA5OQorOjEwMjhGMDAwODBCNTA3MUNCODY5Mzk2QkMwNDY4ODYxRjg2ODM5NkJDOAorOjEwMjkwMDAwQzA0NkM4NjA3ODZBNDA4OTAxMEMwRUQyNDAwQTBDRDNEOAorOjEwMjkxMDAwMzg2ODQwMDgwMkQzMzgxQzAyRjAwQ0ZDMzgxQzAwRjA2OAorOjEwMjkyMDAwQkJGODM4MUMwMEYwMDhGODAyRTAzODFDRkZGNzMwRkY1NQorOjEwMjkzMDAwMDEyMDgwQkMwOEJDMTg0NzAxMjEwMDZCNDA2QUMwNDZEQQorOjEwMjk0MDAwMDE2MDcwNDdCMEI0QzExRDM5MzEwOThCODkwODA5MDQ5MQorOjEwMjk1MDAwMDkwQzg0NkFDMjFENjEzMjAwMjAwMDI5MENERDg3MDA0OQorOjEwMjk2MDAwM0QxOTAxMjM5QjA3MkI0MzFCNjhDMDQ2RDM1MTAxMzBGRgorOjEwMjk3MDAwMDAwNDAwMEM4ODQyRjJEQkIwQkM3MDQ3RjBCNUEwQjA5OAorOjEwMjk4MDAwMDEyMzlCMDdDMTFEMjEzMTE5NDMwOTY4QzA0NjBCOTFFMgorOjEwMjk5MDAwQzExRDUzMzExOTQzMUY5MTA5NjgwMUFGRkExRDM5MzIyNgorOjEwMjlBMDAwMUU5MjE3QUI1OTgwM0E0OTAxMjM5QjA3MEE2QTEzNDNDOQorOjEwMjlCMDAwQ0MxRDExMzQ4OTY5MDkwMzA5MEIyMjY5RTU2OEMwNDZGOQorOjEwMjlDMDAwMUQ5NUZDMUQzOTM0NjQ4QjY0MDkwNTM0MjQwNjI0MEVERQorOjEwMjlEMDAwMUM5NDU2MUExQjk2MUM5QzJFNEFDMDQ2MDA5MjAxMjYzNworOjEwMjlFMDAwMUQ5RDFBNjg5MTQyMDFEMTMyMUMwQkUwOTE0MjAzRDkxRQorOjEwMjlGMDAwNTIxQjFCOUVCNTE4MDBFMDU1MUEwMTIyMjQwMUFDNDI1RgorOjEwMkEwMDAwMDBEMzAwMjIwMTJBRTZEMTkxMDcwMTQzMDk2OEMwNDY5QworOjEwMkExMDAwMzk2MDkzMDcwMTFEMTk0MzA5NjhDMDQ2Nzk2MEMxMUREQgorOjEwMkEyMDAwMDEzMTE5NDMwOTY4QzA0NkI5NjAxRjk5MDk2ODFFOUFBNworOjEwMkEzMDAwQzA0NjUxODNDMTFEMUQzMTE5NDMwOTY4QzA0NjM4NjMyMgorOjEwMkE0MDAwNzk2MkMxMUQxMTMxMTk0MzA5NjhDMDQ2Qjk2MUMxMURDMAorOjEwMkE1MDAwMDUzMTE5NDMwOTY4QzA0NkY5NjBDMTFEMTczMTE5NDM5MgorOjEwMkE2MDAwMDk2OEMwNDZGOTgzMEUzMDE4NDMwMDY4QzA0NkY4ODFGMworOjEwMkE3MDAwMzg2ODQwMDgwMkQzMzgxQzAyRjA1Q0ZCMzgxQzAwRjBCOAorOjEwMkE4MDAwMEJGODM4MUNGRkY3NThGRjIwQjBGMEJDMDhCQzE4NDcwMworOjEwMkE5MDAwQTgwMzAwODA1NTU1NTU1NUY4QjUwNzFDRjgxRDM5MzA2OQorOjEwMkFBMDAwNDE4QjM5NEE5MTQyMDBERDQyODM0MjhCQzA0NjAwOTJGRAorOjEwMkFCMDAwMDEyMDNBMUQwNkNBQkI2QTAyRjAwRUZGMzM0QUMwNDYyNworOjEwMkFDMDAwMDA5MjMzNEUzMDZBMzM0Q0UxNkQ0MTE4Mzg2QkMzMURCMAorOjEwMkFEMDAwMDUzMzAxMjA3MjZBMDJGMEZCRkVFMDZEMTgzMDAwMjUxQworOjEwMkFFMDAwQjE2QTgxNDIwMUQ4RTU2NTAwRTBFMDY1MkYyMzlCMDFEMgorOjEwMkFGMDAwMjAxQ0UxNkRFNDE4MjI2ODkyMDAyNzRCQzA0Njk5NTBEMworOjEwMkIwMDAwMjY0OEMxNkI0QTA4MDVEMzQ5MDg0OTAwQzE2MzAxMjAyMgorOjEwMkIxMDAwMDFGMEQ2RkYyMjRBMUY0OEMxMUQ4OTMxMEI3ODAwMkJENgorOjEwMkIyMDAwMDJEMDQ5NzgwMDI5MDBEMTFFNEFDMDQ2MDA5MjIwNjg5MAorOjEwMkIzMDAwODAwMDE5NEJDMzE4MDVDRUMxMUQxMTMxMDEyMDAyRjBEMAorOjEwMkI0MDAwQzdGRTE0NDgyMTY4MDEzMTIxNjAxNzI5MDBEMzI1NjA5MAorOjEwMkI1MDAwMzk2QkMwNDYwRDY1Nzk2QTNBNkJDMDQ2NTE2MjMzMjNDMgorOjEwMkI2MDAwOUIwMUMwMTg4MTY4MDAyOTAzRDEzOTZCQzA0NjgxNjA4MAorOjEwMkI3MDAwMDRFMDM5NkJDMjY4QzA0NjExNjUzOTZCQzA0NkMxNjA1QworOjEwMkI4MDAwRjhCQzA4QkMxODQ3MDAwMEVBMDUwMDAwMTgwMDE0MDI1MQorOjEwMkI5MDAwN0MyOTAwODA2ODBFMDA4MDQ0ODIyMDQwRTgwRTAwODA3RQorOjEwMkJBMDAwMDQwMDAwMDIwNDAwMDAwM0YwQjUxMTRFRkYyNTAxMzVCQQorOjEwMkJCMDAwMTA0RkMwNDYzNTYwNzg2OTAxMzg3ODYxQkM2ODAwMkNEOAorOjEwMkJDMDAwMTBEMDIwNkRDMDQ2Qjg2MDIwMUMwMEYwMjFGODIwMUNGOQorOjEwMkJEMDAwMDBGMDA0RkEwODQ4ODA2QTAwMEMwMDA3RTlEMUYwQkM1NAorOjEwMkJFMDAwMDhCQzE4NDcwNTQ4QzE3OTAxMzFDMTcxRjdFNzAwMDBGOQorOjEwMkJGMDAwMDAwMDAwQjAyODFCMDA4MDAwMDAxMDQwQTA4MjIwNDA5MAorOjEwMkMwMDAwMDEyMDgwMDMwMTQ5QzA0NjA4NjA3MDQ3MDAwMDAwQjAwMQorOjEwMkMxMDAwOTBCNTA3MUMzODY4QzAwODA5RDMxRDQ4MDE2QTAxMzlGRQorOjEwMkMyMDAwMDE2MjIwMzAwMDc5MDAyODAxRDBGRUY3RTlGRDAxMjM4MAorOjEwMkMzMDAwOUIwN0Y4MUQxRDMwMTg0MzAwNjgxNjRDNjE2QTgxNDJERAorOjEwMkM0MDAwMjFEMTAxMUMxOTQzMDk2ODA5MDQwOTBDMDEyOTFBRDE3MQorOjEwMkM1MDAwMDBGMDIyRjg2MDYyNjA2QTIxNkE4ODQyMDVEMDAxMjE5MgorOjEwMkM2MDAwODkwNzAxNDMwOTY4MDkwNEYyRDA1MTIxODkwMzYyNkE4NgorOjEwMkM3MDAwMjM2QjlBNDIwMkQxNjA2QkEyNkI4MDFBMDQzOEM4NjA0MQorOjEwMkM4MDAwOTBCQzA4QkMxODQ3MDAyMDc5NkFDMDQ2MDg2MEY3RTc4NgorOjEwMkM5MDAwNkMwNjAwODBFODFBMDA4MDAxMjM5QjA3QzExRDAxMzFFQQorOjEwMkNBMDAwMTk0MzA5NjgwOTA0MDkwQzA4MTgwRDMwODEwNzAyRDA3RQorOjEwMkNCMDAwODAwODgwMDAwNDMwMDQ0OThBNkIxMjE4NEI2QjlBNDJEQQorOjEwMkNDMDAwMDBEOTA4NkI3MDQ3MDAwMEU4MUEwMDgwMDBCNTA0NDg3RQorOjEwMkNEMDAwQzA2ODEwMjgwMUQzMDBGMDA1RjgwOEJDMTg0NzAwMDBCMAorOjEwMkNFMDAwRTgxQTAwODA4OEI1MEM0RjM4NzkwMDI4MTFEMTBCNDlCQgorOjEwMkNGMDAwMTAyMDAyRjBGNUZEMDAyODBCRDAwMTIwMzg3MTA4NEFBMQorOjEwMkQwMDAwQzA0NjAwOTIwNzQ4NDI2ODA3NEIwMTY4MDAyMDAyRjA2NQorOjEwMkQxMDAwREZGRDg4QkMwOEJDMTg0N0Y4MUEwMDgwRjUyQ0ZGRkZCRgorOjEwMkQyMDAwMTAwMDM1MDI3QzI5MDA4MDQ0ODAyMDQwOTBCNTAxMjBBRAorOjEwMkQzMDAwNDAwMjEwNDlDMDQ2MDg2MDBGNEYxMDIxRjgxRDNEMzA3OQorOjEwMkQ0MDAwMDJGMDRDRkMxOTIzREIwMUZDMThFMDY4MDAyODAxRDBEQworOjEwMkQ1MDAwMDBGMDE0RjgwMDIwQzkyMzFCMDFGOTE4MDg3MUUwNjg3RAorOjEwMkQ2MDAwMTAyODA0RDMwMTIwQkIyMzFCMDFGOTE4NDg3MzkwQkMyMQorOjEwMkQ3MDAwMDhCQzE4NDcwMDAwMDBCMDY4MEUwMDgwRjhCNTM3NDg1RQorOjEwMkQ4MDAwMTkyM0RCMDFDMTE4Qzk2ODM1NEQxMDI5MDBEOTEwMjE1QworOjEwMkQ5MDAwNjk2MjMyNDhDMTZDMDA2RTgxNDIwN0Q5MDgxQTA3MDk3RQorOjEwMkRBMDAwMDAyNDY4NkFCODQyMTJEMjA3MUMxMEUwODE0MjJBRDI3RAorOjEwMkRCMDAwMkM0QTUyNkIxMDFBMDcwOTY4NkFCODQyMDVEOTBDMDlFNworOjEwMkRDMDAwMzkxOTg4NDIwM0QyQzQxQjAxRTAwMDI0MDcxQzNFMTlCNAorOjEwMkREMDAwMzAwMTI1NDkwMkYwODRGRDAwMjgzREQwMjM0ODAwMkMxNQorOjEwMkRFMDAwMUFEMTFFNDkzQTAxNkY2MjA5NkU4QzE4MUQ0RDZCNkIyQQorOjEwMkRGMDAwQTM0MjAwRDhFNDFBMUU0QjFBNDMwMDkyRUE2QTUxMTgwMworOjEwMkUwMDAwMkE2QjAzMUMyMEUwMUI0ODAxNkIwMTMxMDE2MzAwMjA4OQorOjEwMkUxMDAwNjg2MkY4QkMwOEJDMTg0NzEwNDkyNDAxM0YwMTExMjIyMAorOjEwMkUyMDAwNTIwNTNBNDM2RTYyMDA5MjBFNERFQTZBMDk2RTUxMThERAorOjEwMkUzMDAwMDMxQzA2MUMwMDIwMkE2QjAyRjA0QUZEMEM0QTIyNDNBOAorOjEwMkU0MDAwMDA5MkJCMTlFOTZBMkE2QjAwMjAwMkYwNDFGRDAzNDg5OQorOjEwMkU1MDAwQzA0NjA0NjYwMEYwMTBGODAxMjBEQUU3NjgwRTAwODAzMgorOjEwMkU2MDAwMjgxQjAwODA3QzI5MDA4MDVEMkVGRkZGNDQ4MDIwNDBDRAorOjEwMkU3MDAwMDAwMDM2MDJBMDgyMjA0MDA0NDgwMTZFMDQ0QTgwMzBERgorOjEwMkU4MDAwRDE2MDAyMjNDMTZCMTk0M0MxNjM3MDQ3NjgwRTAwODA5MworOjEwMkU5MDAwOTBFRTIwNDBGMEI1ODRCMDAxMjA4MDAyMUM0OUMwNDY2RAorOjEwMkVBMDAwMDg2MDAwMjcxQjRFMzMyMzlCMDFGNTE4Njg2QTAwMjgzMQorOjEwMkVCMDAwMUREOTE5NEM2ODQ2MTAyMTAyRjA5MEZCNjg0NjAwRjBCRAorOjEwMkVDMDAwMzNGODAwMjgwNEQwMTU0OTQ4NjkwMTMwNDg2MTBBRTAwOAorOjEwMkVEMDAwMTM0OTYwN0IwMTMwNjA3Mzg4NzkwMTMwODg3MTExNDgzMworOjEwMkVFMDAwMDA2ODAyRjA2NUY5Njg2QTAxMzdCODQyRTJEOEJCMjM4RQorOjEwMkVGMDAwMUIwMUYwMTg4MTdCMDAyOTAzRDAwMDIxODE3M0ZGRjdBQgorOjEwMkYwMDAwMDVGQkZGRjdFM0ZFMDRCMEYwQkMwOEJDMTg0NzAwMDA2NworOjEwMkYxMDAwMDAwMDAwQjA2ODBFMDA4MEIwODIyMDQwMDg4MzIwNDA4RQorOjEwMkYyMDAwQTA4MjIwNDA1ODA0MDA4MDkwQjQxNzRGMTkyM0RCMDE4MQorOjEwMkYzMDAwRjkxODAwMjJDQjY4MDAyQjIzRDAwMTNCQ0I2MDMzMjM1MAorOjEwMkY0MDAwOUIwMUZGMThCQjY5MUM2REMwNDZCQzYxMDQ2OEMwNDY4QworOjEwMkY1MDAwNUM2MDQ0NjhDMDQ2OUM2MDg0NjhDMDQ2MUM2MUMwNjg3MAorOjEwMkY2MDAwQzA0NjU4NjExQTY1MDg2OTQyMUMwQTYxMDAyODAzRDBFRQorOjEwMkY3MDAwMzg2QUMwNDYwMzY1MDBFMEZCNjEzQjYyMTgxQzkwQkNFOAorOjEwMkY4MDAwNzA0NzEwMUNGQkU3MDAwMDY4MEUwMDgwMEE0QTMzMjNEQworOjEwMkY5MDAwOUIwMUQxMThDODY5MTkyM0RCMDFEMjE4MTM2OTAwMkJEMgorOjEwMkZBMDAwMDZEMDAxM0IxMzYxQ0E2OTEyNkRDMDQ2Q0E2MTcwNDcwMQorOjEwMkZCMDAwMDAyMTExNjFGQkU3MDAwMDY4MEUwMDgwMDY0QTExNjlEQworOjEwMkZDMDAwNEIxQzEzNjE0MDMyMDAyOTAxRDBEMTY5MDBFMDAwMjE3RgorOjEwMkZEMDAwMDE2NUQwNjE3MDQ3MDAwMEU4MUEwMDgwMDY0QUQxNjg5OAorOjEwMkZFMDAwNEIxQ0QzNjA0MDMyMDAyOTAxRDA5MTY5MDBFMDAwMjFFMAorOjEwMkZGMDAwMDE2NTkwNjE3MDQ3MDAwMEU4MUEwMDgwOTBCNDAwMjFEQworOjEwMzAwMDAwMEY0QTk3ODk5MjZBNEIwMDFCMTg5QjhBMDAyQjEyRDA5QgorOjEwMzAxMDAwQkI0MjEwREMxQzFDNTgyMzYzNDNEMzE4REMxRjQ5M0MwMworOjEwMzAyMDAwMDEyMzlCMDcyMzQzMUI2ODFCMDYxQjBFMDMyQjAyRDBBNworOjEwMzAzMDAwMDAyMDkwQkM3MDQ3MDEzMTA0MjlFNEQzMDEyMEY4RTc1NworOjEwMzA0MDAwNEMyQTAwODBGN0I1ODZCMDNENEEwNzFDRDE2OThGNDBGNQorOjEwMzA1MDAwMDMxQzE0NkFFMzQwNUY0MDA3OUU4RTQwNzc0MENGNDBEOAorOjEwMzA2MDAwOTQ2OUMwNDYwNTk0MDMxQ0EzNDAwMDI1MTQ2OUMwNDYxQQorOjEwMzA3MDAwMDQ5NDAwMkM1REQ5MUMxQzMyNEUyNjQzOTQ2OUU2NDAxMgorOjEwMzA4MDAwMzMxQzAzOTY1MzZBQzA0NjAyOTNEMjZBQzA0NjAxOTIyQgorOjEwMzA5MDAwQkIwMDAyOUFEMjU4MTMxQzA1OUNFMzQwMDM5Q0EzNDIzOAorOjEwMzBBMDAwM0VEMThBNDBDQTQwMTQxQzYzMDAxQjE5NUIwMTAxOUE3RgorOjEwMzBCMDAwRDIxODAxMjM5QjA3RDYxRDAxMzYzMzQzMUI2ODFCMDYxQworOjEwMzBDMDAwMUIwRTAzMkIyQ0QxMDEyMzlCMDdENjFENTEzNjMzNDNGNgorOjEwMzBEMDAwMUI2ODA3OUUxRTQwMDA5NjAxMjM5QjA3RDYxRDQ5MzY5QworOjEwMzBFMDAwMzM0MzFCNjg4MzQyMUJEMTAxMjM5QjA3RDYxRDREMzZGQQorOjEwMzBGMDAwMzM0MzFCNjgwMDlFQjM0MjEyRDEwMTIzOUIwNzFBNDMzRQorOjEwMzEwMDAwMTI2ODEyMDQxMjBDMDg5QjMyMkIwNEQxMDIyQTA3RDEzOAorOjEwMzExMDAwMjAwNDAwMTQwRkUwMDg5QjMzMkIwMUQxMDEyQUY3RDBDMworOjEwMzEyMDAwMDQ5QTAxMzc5NzQyMDBEMzAwMjcwNDlBMDEzNUFBNDIzNgorOjEwMzEzMDAwQUVEODAwMjBDMDQzMDlCMEYwQkMwOEJDMTg0NzAwMDA1RQorOjEwMzE0MDAwNEMyQTAwODAwMDAwMDA4MEYwQjUyNzRENjg2OTAwMjhGNworOjEwMzE1MDAwMDZEMDI2NDgwMDY4MDJGMDJCRjhGMEJDMDhCQzE4NDdERgorOjEwMzE2MDAwMjM0QzAwMjZBMDY4MjM0RjAwMjgxNkQwMEZFMDI4NkFDMQorOjEwMzE3MDAwMDIyODAyRDMwMTIwMzg3MTBGRTBBNjYwRkRGN0RFRkVDMQorOjEwMzE4MDAwMDAyOEVBRDEyODZBMDIyODAxRDMwMTIwMzg3MUU4NjhCMgorOjEwMzE5MDAwMDAyODAyRDAzODc5MDAyOEU5RDA2ODY4MDAyODFCRDBDMAorOjEwMzFBMDAwMDEyMEEwNjBGRUY3QkNGQjAwMjhENkQxNjg2ODAwMjg4QgorOjEwMzFCMDAwRjZEMTExRTAwMDI4RDBEMTI4NkEwMjI4MDJEMzAxMjBEQworOjEwMzFDMDAwMzg3MUNBRTdBNjYwRkRGN0I5RkUwMDI4QzVEMTI4NkFBNAorOjEwMzFEMDAwMDIyODAxRDMwMTIwMzg3MUU4NjgwMDI4QkREMDM4Nzk3MQorOjEwMzFFMDAwMDAyOEU3RDBCOUU3MDAwMDZDMDYwMDgwNUMwNDAwODA4RQorOjEwMzFGMDAwNEMyQTAwODA4QzA2MDA4MDcwNDcwMDAwNzA0NzAwMDA1OQorOjEwMzIwMDAwNzA0NzAwMDA5MEI1NDAyMDFENDlDMDQ2MDg2MDAxRjA5RAorOjEwMzIxMDAwOURGQzAzMjMxQjA3NDE2ODE5NDAwQzBGNjEwMTA5MUIyQQorOjEwMzIyMDAwODkwMDE4NEE4RjE4MDEyMTM5ODA4MTZBQzA0Njc5NjU2MgorOjEwMzIzMDAwNDE2QUMwNDY3OTY3Qjk2Q0ZBNkM4OTE4Qjk2NDAwMjE5MworOjEwMzI0MDAwRjk2NEJBNkIzQjZERDIxOEJBNjMzOTY1NDI2QTIwMzJCMQorOjEwMzI1MDAwNTE3MTc5NkQ3QTZGRDI2REMwNDYxMTYwRkNGN0NBRkY2QgorOjEwMzI2MDAwMjAwMTA5NDk0MDE4MTkyM0RCMDFDMDE4NDE2QjAxMzlCRAorOjEwMzI3MDAwNDE2Mzc4NkYwMUYwQzZGQjkwQkMwOEJDMTg0NzAwMDBBMgorOjEwMzI4MDAwMDAwMDAwQjA1QzJCMDA4MEEwMUMwMDgwRjBCNTQwMjA0NgorOjEwMzI5MDAwMTI0OUMwNDYwODYwMDFGMDU5RkMwNzFDNDA2ODAzMjMyRQorOjEwMzJBMDAwMUIwNzE4NDAwNjBGNzAwMTgwMUI4MDAwMEM0OTQ0MTg1MgorOjEwMzJCMDAwQjg2QUMwNDY2MDY1Nzg2QUMwNDY2MDY3ODA2RjA1MUQ2MQorOjEwMzJDMDAwRTU2M0I5NjkyODFDMDJGMDg5RjkzODFDMjExQzMyMUNGRAorOjEwMzJEMDAwMkIxQzAwRjAyMEY4RjBCQzA4QkMxODQ3MDAwMDAwQjAyMAorOjEwMzJFMDAwNUMyQjAwODBGMEI1NEI2RjlCNkYxRjFEQ0Y2MzA1Njg5MworOjEwMzJGMDAwMDAyMzg0NjlBNDA4MDhEMDlDMDAyRTU5QzA0NjNFNTE4MgorOjEwMzMwMDAwODQ2OUE0MDgwMTMzOUM0MkY2RDgzQjFDMDBGMDAzRjgwMgorOjEwMzMxMDAwRjBCQzA4QkMxODQ3RkZCNTgxQjAwNDFDMUQxQzBGMUM3NQorOjEwMzMyMDAwNDY0ODAxNjkwMTMxMDE2MUY5MUQ1MTMxQkQ2NTAwOTFDNgorOjEwMzMzMDAwMjAxQ0ZERjc1REZDRjg2RDQwMDkzNkQyQjg2RDA2N0JBOAorOjEwMzM0MDAwNDM3QjFCMDIxRTQzMTcyMTQ5MDIwMTczMEIwQTQzNzM3RgorOjEwMzM1MDAwMDA5OTIwMUNGREY3NENGQ0I4NkRDMDQ2MDY3MzMzMEE3QgorOjEwMzM2MDAwNDM3M0Y4NkQ0MDA5MjBEMjYwNjgwMTA0MDkwQzAzOTg4QQorOjEwMzM3MDAwMDFGMENDRkM2MDY4MzI0QjE4NDM2MDYwMjAxQzAxRjAwNworOjEwMzM4MDAwMzVGRDAwMjU3RDYwQkQ2MDNENjQ3RDY0MjAxQ0ZDRjczQgorOjEwMzM5MDAwMzFGRjM4ODg0MDIzMTg0MzM4ODA3RDYyMjk0OEMwNDY3MQorOjEwMzNBMDAwQjg2MjM4MUMwMEYwQTBGQjQ0RTAyMDY4MDEyMzlCMDdCMgorOjEwMzNCMDAwMDgzODE4NDMwMDY4QzA0Njc4NjQ2MDY4MDIwNDEyMEMzQworOjEwMzNDMDAwNzg2RTAxMjZDMTFEMEQzMThBNDIwMkQyM0E2NDA4MUM3MgorOjEwMzNEMDAwMEVFMDQxMTk4OTg5RjAyMzE5NDAwOTA5ODkwMDQwMTgzNAorOjEwMzNFMDAwRjg2MEY5NjE2MTY4MDkwNDA5MEM4MTQyMTZEMjM5NjRGOAorOjEwMzNGMDAwNjM2ODE5MDQwOTBDNDAxQTAzMzA4MDA4ODIwMEEwNjEzOAorOjEwMzQwMDAwMjA2ODA5MTg5QjE4NjM2MEMzMUYwNTNCMzgxQzAwRjAzNworOjEwMzQxMDAwQjZGQTdFODAyMDFDMDBGMEJGRkIwQkUwQjk2ODA4MUFFQQorOjEwMzQyMDAwMDAyNTc4NjJCRDYyMzgxQzAwRjAzQ0ZDMjAxQzM5MUM3MQorOjEwMzQzMDAwMDBGMDY0RjgwNUIwRjBCQzA4QkMxODQ3MEMyQjAwODAwNQorOjEwMzQ0MDAwMDAwMDAwODAwMTAwMDBDMEYwQjUwNDFDMEYxQzM4NkNBNworOjEwMzQ1MDAwRjk2QjBEMTgyMTY4NDExODAwMjBBMjY5MDAyQTBCRDlDOAorOjEwMzQ2MDAwODIwMDU2MTgwMTIzOUIwNzMzNDMxQjY4QzA0NkFCNTBBQworOjEwMzQ3MDAwQTI2OTAxMzA4MjQyRjNEODc4NkVGOTZCMDkxODg5ODkwNAorOjEwMzQ4MDAwRjAyMzE5NDAwOTA5ODkwMDQwMThGODYwRjk2MTIwNjhBMworOjEwMzQ5MDAwMDEyMzlCMDcwODM4MTg0MzAxNjg3ODZDRkNGNzk1RkZGNworOjEwMzRBMDAwNzg2NDYwNjgwMTA0MDkwQ0Y4Njg4MTQyMTlEMjM5NjRCMworOjEwMzRCMDAwNjM2ODE5MDQwOTBDNDAxQTAzMzA4MDA4ODIwMEEwNjE3NworOjEwMzRDMDAwMjA2ODA5MTg5QjE4NjM2MEMzMUYwNTNCMzgxQzAwRjA3NworOjEwMzREMDAwNTZGQTAxMjA3ODgwMjAxQzAwRjA1RUZCRjBCQzA4QkM4RQorOjEwMzRFMDAwMTg0N0I5NjgwODFBNzg2MjAwMjBCODYyMzgxQzAwRjBFMgorOjEwMzRGMDAwRDlGQjIwMUMzOTFDMDBGMDAxRjhFRkU3RjBCNTg0QjBDRgorOjEwMzUwMDAwMDQxQzBGMUM4RTQ4NDE2OTAxMzE0MTYxMDMyMDAwMDdGMgorOjEwMzUxMDAwNjE2ODA4NDAwNjBGMEEwNDEyMEMyMDY4MTExOEZCNjg0NQorOjEwMzUyMDAwRDIxQTdCNjg5RDFBQzMxRjA1M0IzODFDMkExQzAwRjA2OQorOjEwMzUzMDAwMjZGQTAwMjA3ODgwMjAxQzAwRjAyRUZCNjA2ODQwMTlERAorOjEwMzU0MDAwMDEwNDA5MEM2MDYwMzAxQzAxRjBFMEZCN0Q0RTBCMjM5MAorOjEwMzU1MDAwMUIwMkYwMTgwMDY5MDAyODE5RDAwMDI1MkQyMzlCMDFCQgorOjEwMzU2MDAwRjAxOEMwNjgwMDI4MTJEMEFBMDA5MjE5MkQyMzlCMDFFMAorOjEwMzU3MDAwRDIxOEQyNjgyMDFDMzkxQzAxRjAxQ0ZFMDEzNUE4MDBBRAorOjEwMzU4MDAwODAxOTJEMjM5QjAxQzAxOEMwNjgwMDI4RUNEMUY4NkI2RQorOjEwMzU5MDAwMDExRjhBMUNGQTYzRkE2ODdENkMwMEYwQkJGOUMwNDMxNgorOjEwMzVBMDAwMDEwNDA5MEMyODFDRkNGNzEwRkYwMzkwRjk2QjNBNkUxQworOjEwMzVCMDAwOEUxODIwNjgxMjE4MDE5MjdBNkU4RDE4MTExODAyOTFENworOjEwMzVDMDAwQzgxRDA5MzBFMDYwQjE4ODA4MDIwOTBBMDkwNjA5MEUyMQorOjEwMzVEMDAwMDg0MzAwMDQwMDBDNzg2MTY4NjgwMTBFRkYyMjEyMDRBMQorOjEwMzVFMDAwMDI0MDEyMEExMTQzRkYyMjEyMDIwMjQwMTIwMjExNDM0QQorOjEwMzVGMDAwMDAwNjA4NDMzODYxQTg4OTA5MjMxQjAyMTg0MEI4NjFGNgorOjEwMzYwMDAwQTg4OTk4NDNBODgxQTg4OTAyOTlDMDQ2ODg4MTAwMjA4QQorOjEwMzYxMDAwNzA4MEIwODA3MDgxNjg2MDI4ODJCOTZFMzAxQ0ZDRjdDMQorOjEwMzYyMDAwRThGRTM4ODZGQTY5MzAxQzI5MUNGQ0Y3MDNGRjc4ODYwRgorOjEwMzYzMDAwM0Q4RTc4OEUwMzk5RkNGN0M4RkUwMDkwNjA2ODAwMDQwOAorOjEwMzY0MDAwMDAwQzM5NkU0MTFBMDkwNDA5MEM3QTZFODIxQTEzMDRBRgorOjEwMzY1MDAwMUIwQzFBMDIxQjBBMUE0MzE2MDQzNjBDQkE2ODgyNDI2MworOjEwMzY2MDAwMDFEMjAwMjAwMEUwMTAxQUI4NjAwODAyMDkxMjA5MDYxMQorOjEwMzY3MDAwMDkwRTA4NDMwMTA0MDkwQzAxOThDMDQ2NDE4MDI4MUMyQQorOjEwMzY4MDAwRkNGN0EzRkUwNTFDMDA5ODMxMUNGQ0Y3OUVGRTA2MUNFRgorOjEwMzY5MDAwNzg2OTAwMDQwMDBDMDEwMjAwMEEwODQzMDEwNDA5MENDNworOjEwMzZBMDAwMDE5OEMwNDY4MTgwMjgxQ0ZDRjc4RkZFNzk2OTAxMzFBMgorOjEwMzZCMDAwQzA0Mzc5NjEwMTlBQzA0NjUwODEzODY5MDEwRUZGMjJFQQorOjEwMzZDMDAwMTIwNDAyNDAxMjBBMTE0M0ZGMjIxMjAyMDI0MDEyMDJBNworOjEwMzZEMDAwMTE0MzAwMDYwMTQzMzAxQ0ZDRjc3N0ZFMzk2OTdBNjgxNAorOjEwMzZFMDAwODkxODM5NjFCOTY4MDAyOTA5RDEwMjk5ODk4OUJBNjlBQgorOjEwMzZGMDAwMTE0MzAyOUFDMDQ2OTE4MUI5NjlGQ0Y3NjZGRTIwODJBNworOjEwMzcwMDAwMDAyMDYwODJGODZENDEwODE2RDM4MDBBMEFEMzYwNjhGMQorOjEwMzcxMDAwMTAzODAxMDQwOTBDMDgwMjA5MEEwODQzMjE2OEMwNDY1MAorOjEwMzcyMDAwMDg4MjA5RTA2MDY4MEMzODAxMDQwOTBDMDgwMjA5MEFFMworOjEwMzczMDAwMDg0MzIxNjhDMDQ2ODg4MTA0QjBGMEJDMDhCQzE4NDcyMworOjEwMzc0MDAwMEMyQjAwODA2ODBFMDA4MEYxQjU4NEIwNkU0RDI4NjlBNgorOjEwMzc1MDAwMDEyMjA0OTk4QTQwOTA0MzI4NjEwNDk4NDMwMTE4MUE3MQorOjEwMzc2MDAwODAwMDE2MUM2OTQ5NDQxOEUwNkJDMDQ2MDA5MEEwNjhCMAorOjEwMzc3MDAwMDAyODAxRDEwMDI2MjZFMDY1NDg0MTY5MDEzMTQxNjFGOAorOjEwMzc4MDAwMDQ5OEZDRjcwOUZEMDcxQzAzRDEyODY5MzA0MzI4NjEyMAorOjEwMzc5MDAwQjVFMEEwNjg2NTY4QTg0MjAwRDIwNTFDQTE2Q0E5NDJFQQorOjEwMzdBMDAwMTZEMjQwMUE2MjZBMTAxQTAwMjY2MDYyQTY2MEE2NjJFQgorOjEwMzdCMDAwMjA4ODQ4MjMxODQzMjA4MDBEMUMwOUQxMzgxQ0ZDRjdCMQorOjEwMzdDMDAwMTlGRDAzMjA2MDgwNjY2MDIwMUMwMEYwOERGOTk2RTBGMgorOjEwMzdEMDAwRTE2ODM4NjgwOTE4QzMxRjA1M0IyMDFDMDIzOTJBMUMwMAorOjEwMzdFMDAwMDBGMENERjgzODFDMDBGMEQ3RjlFMDY4NDYxOTc4Njg4OQorOjEwMzdGMDAwMzA0Mzc4NjAwNDk4MzExQzAxRjA4OEZBMjE2RTAwOThGQgorOjEwMzgwMDAwMDgxODAxOTA3MDFBMDAwNDAwMEM2MTZFNzExQTBBMDQwNQorOjEwMzgxMDAwMTIwQzExMDIxMjBBMTE0MzA5MDQwOTBDMDI5MTAxMDI0RgorOjEwMzgyMDAwMDAwQTA4NDMwMTA0MDkwQzAxOThDMDQ2NDE4MDIwOEUxQgorOjEwMzgzMDAwRkNGN0NCRkQwNjFDNjA4RTAyOTlGQ0Y3QzZGRDAzOTBEOQorOjEwMzg0MDAwNjA2OTAxMDQwOTBDMDgwMjA5MEEwODQzMDEwNDA5MEMxMworOjEwMzg1MDAwMDE5OEMwNDY4MTgwMzAxQ0ZDRjdCN0ZENjE2OTAxMzFEOQorOjEwMzg2MDAwQzA0MzYxNjEwMTk5QzA0NjQ4ODE2MDZFMDA5OTQ2MTg2NQorOjEwMzg3MDAwMjA2OTAxMEVGRjIyMTIwNDAyNDAxMjBBMTE0M0ZGMjJBNgorOjEwMzg4MDAwMTIwMjAyNDAxMjAyMTE0MzAwMDYwMTQzNzE2MDAzOThDNAorOjEwMzg5MDAwRkNGNzlCRkQyMTY5NDkxOTIxNjFBMTY4NDkxQkExNjBDMQorOjEwMzhBMDAwMDZEMUIxODlBMjY5MTE0M0IxODFBMTY5RkNGNzhERkRFRgorOjEwMzhCMDAwMzg4MjYxNkUzODY4MDkxODBFMzFGOTYwRTI2ODAwOTk0MworOjEwMzhDMDAwMDQzODAwRjA0Q0Y4MDIyMDc4ODJFMDZENDEwODE2RDNFRAorOjEwMzhEMDAwODAwQTBBRDM3ODY4MTAzODAxMDQwOTBDMDgwMjA5MEEyMgorOjEwMzhFMDAwMDg0MzM5NjhDMDQ2Qzg4MTA5RTA3ODY4MEMzODAxMDQ4QgorOjEwMzhGMDAwMDkwQzA4MDIwOTBBMDg0MzM5NjhDMDQ2NDg4MTA1QjAyNgorOjEwMzkwMDAwRjBCQzA4QkMxODQ3MDAwMEQwMkMwMDgwNUMyQjAwODA2NQorOjEwMzkxMDAwMEMyQjAwODBGN0I1MDMxQzBGMUMwMDIwMUM2ODI2MDQyQworOjEwMzkyMDAwMzExQzFEMURGQ0Y3NTFGRDQwQzcwMjlBRDExQzg5MDhBRQorOjEwMzkzMDAwMDEzOTRBMUUwMjkyMDAyOTBERDAyMTBDMTBDRDIyMDQxQgorOjEwMzk0MDAwMEE0MzExMUMxNjFDRkNGNzQwRkQ0MEM3MDI5OTRBMUU5MQorOjEwMzk1MDAwMDI5MjAwMjlGMUQxMDNCMEYwQkMwOEJDMTg0NzgwMDhERQorOjEwMzk2MDAwODAwMDg5MDg4OTAwMDMzMjkzMDg1QTFFMDAyQjA1RDA3NQorOjEwMzk3MDAwMDhDOTA4QzAxMzFDMDEzQTAwMkJGOUQxNzA0N0ZGQjVFNAorOjEwMzk4MDAwODZCMDE3MUMwMDI2MDY5ODgwNkNDMDFCMDY5OUMwNDY5RQorOjEwMzk5MDAwODg2NDAxMjBDMDA1MDY5OTg5NkJDMDQ2MDE5MTA2OTk4QgorOjEwMzlBMDAwNEM2QjY3RTAyMTY4QzA0NjAyOTE2MTY4QzA0NjAzOTE5NAorOjEwMzlCMDAwQTE2OEMwNDYwNDkxMDJBOTQ5ODhCOTQyMDhEMjAyQUQ2MworOjEwMzlDMDAwNkQ4ODAyQTk0OTg4N0YxQTAwMjEwMkFCNTk4MDE5RTA0RAorOjEwMzlEMDAwMDJBOTQ5ODhDOTFCMDJBQjU5ODAzRDFDMDAyNzAxMjE1RgorOjEwMzlFMDAwNDkwNjA3OUI5QTA3OTIwRjBERDBFQjA2REIwRTA4RDAxNQorOjEwMzlGMDAwMUUyQjA4RDMxRTJCMDJEMTAzMkEwNEQxMDFFMDAyMkE3OAorOjEwM0EwMDAwMDFEMzAxMjYwMDIxMjk0MzAxNDMwQTFDMDA5MTAwMjAxMworOjEwM0ExMDAwMDM5OTA0OUEwNzlCMDFGMDVCRkYwNzk5NDkxOTA3OTFFNQorOjEwM0EyMDAwMDAyRTBBRDAxRDRBQzA0NjAwOTIxRDQ4MDE2RDQyNkQwRAorOjEwM0EzMDAwMDAyMDA3OUIwMUYwNENGRjAwMjYwMkE4NDA4ODAwMjhDOAorOjEwM0E0MDAwMENEMDAzOTg0MDE5MDM5MDAyOThDMDQ2MjA2MDAzOTg1OAorOjEwM0E1MDAwQzA0NjYwNjAwNDk4QzA0NkEwNjAwM0UwMDE5ODAxMzg0OQorOjEwM0E2MDAwMDE5MDEwMzQwNjk4QzA0NjQ0NjMwMTk4MDY5OUMwNDZGOAorOjEwM0E3MDAwODg2MzAwMjAwMDJGMDJEMDAxOTkwMDI5OTJEMTA5NEFDMQorOjEwM0E4MDAwQzA0NjAwOTIwNjQ4MDE2RDQyNkQwMDIwMDk5QjAxRjA3RQorOjEwM0E5MDAwMUZGRjBBQjBGMEJDMDhCQzE4NDcwMDAwMDEwMDAwMDI3QworOjEwM0FBMDAwN0MyOTAwODAwNDAwNTMwMjkwQjUwQzFDMDcxQzM4Njg2OAorOjEwM0FCMDAwMDEyMzlCMDcwODM4MTg0MzAxNjgzODhBRkNGNzg1RkMwNgorOjEwM0FDMDAwQzA0M0Y5NjhDMDQ2MDg4MDc4OEEzOTY4MDgxQTM4NjBBNworOjEwM0FEMDAwMzgxQzAxRjA4QkY5MzgxQ0ZDRjc4Q0ZCMjAxQ0ZGRjcxRAorOjEwM0FFMDAwMzNGRTkwQkMwOEJDMTg0NzgwQjUwMTg4OEEwOTIxRDNGMQorOjEwM0FGMDAwQ0EwOTFGRDI4QTA4MUREMzAwMjEwMTgwNDE4MDQ3NkY2NworOjEwM0IwMDAwNDA2REZBMUQxOTMyNTE3MUZBNkRDMDQ2MTA2MDNBNkU1RgorOjEwM0IxMDAwQzA0NjEwNjAwQzQ4QzA0NjgxNjNDMTZCNDkwODQ5MDAyQgorOjEwM0IyMDAwQzE2MzAxMjAwMEYwQ0NGRjM4MUMwMEYwNkJGRjgwQkNBQgorOjEwM0IzMDAwMDhCQzE4NDc4MDIzMTk0MzAxODAwMTg4NDkwOUY2RDIzRgorOjEwM0I0MDAwMDBGMEIwRjhGM0U3MDAwMEU4MEUwMDgwRjBCNTA3MUNDNQorOjEwM0I1MDAwMTAxQzBEMUMwMDI0NUUxRTAwMkIxOUQwMDE2OEMwNDZFRAorOjEwM0I2MDAwMzk2MDQxODgwQzE5NDE2OEMwNDY3OTYwODE2OEMwNDY1NworOjEwM0I3MDAwQjk2MEMxNjhDMDQ2Rjk2MDEwMzAxMDM3RTk2QTgxNDIwNworOjEwM0I4MDAwMDJEODI4MUMwMEYwRUNGRjMxMUMwMTNFMDAyOUU1RDFEMQorOjEwM0I5MDAwMjAxQ0YwQkMwOEJDMTg0NzAwMjFDMTYxMDU0OTBBNjgxNworOjEwM0JBMDAwMDAyQTAxRDEwODYwMDJFMDRBNjhDMDQ2RDA2MTQ4NjAzRQorOjEwM0JCMDAwNzA0NzAwMDBEMDJDMDA4MDAzNDkwODY4MDAyODAyRDAxQworOjEwM0JDMDAwQzI2OUMwNDYwQTYwNzA0N0QwMkMwMDgwMDAyMTgxNjcxRQorOjEwM0JEMDAwMDU0OThBNjgwMDJBMDFEMTg4NjAwMkUwQ0E2OEMwNDZBNworOjEwM0JFMDAwOTA2N0M4NjA3MDQ3MDAwMEQwMkMwMDgwMDM0OTg4Njg0NworOjEwM0JGMDAwMDAyODAyRDA4MjZGQzA0NjhBNjA3MDQ3RDAyQzAwODBCNworOjEwM0MwMDAwMDBCNTgwMjAxMzQ5QzA0NjA4NjBGRkY3RDVGRjAwMjhBMworOjEwM0MxMDAwMUJEMDAzMjMxQjA3NDE2ODE5NDAwQTBGNTEwMTg5MUE2MQorOjEwM0MyMDAwODkwMDBENEJDOTE4NEI4ODAwMkIwNEQxMTExQ0ZGRjdEQworOjEwM0MzMDAwM0JGRjA4QkMxODQ3MDEyQjAyRDFGRkY3MDVGQ0Y4RTc1MgorOjEwM0M0MDAwMDIyQkY2RDFGRkY3NEVGQkYzRTcwNDQ4MDE2RDAxMzE3QgorOjEwM0M1MDAwMDE2NUVFRTcwMDAwMDBCMDVDMkIwMDgwQTA4MjIwNDBGMAorOjEwM0M2MDAwMDBCNTIwMjAwRDQ5QzA0NjA4NjBGRkY3QkZGRjAwMjhCRgorOjEwM0M3MDAwMEVEMDAxODgyMDIzMTk0MzAxODAwMTg4MTAyMzk5NDMyNQorOjEwM0M4MDAwMDE4MDAxODgwOTBBMDFEM0ZGRjcyRUZGMDhCQzE4NDdGRAorOjEwM0M5MDAwMDM0ODAxNkQwMTMxMDE2NUY4RTcwMDAwMDAwMDAwQjA0NAorOjEwM0NBMDAwQTA4MjIwNDA5OEI1MDcxQzIyNDhDMDQ2MDA5MDIyNDhCOAorOjEwM0NCMDAwQzMxRDQxMzM0MTZEODI2RDgwNkMwMDAzMDAwQjlDNjgxNQorOjEwM0NDMDAwMDEyMzlCMDcyMzQzMUI2ODk4NDIwMEQxMENFMDk4NDJENAorOjEwM0NEMDAwMDNEOTEwMUE1OTFBNDExODAwRTAxOTFBMDEyMDEwMjlBNQorOjEwM0NFMDAwMDBEODAwMjAwMDI4MUZEMDc4NkFGOTZBQzA0NjA4NjAxMgorOjEwM0NGMDAwQjg2QUY5NkFDMDQ2NDg2MDEwNEFDMDQ2MDA5MkZCNkEzQQorOjEwM0QwMDAwMEY0ODQyNkQwMzIwMzk2QTAxRjBFMkZEMzg4ODEwMjMyNAorOjEwM0QxMDAwMTg0MzM4ODAzODg4NDAyMzk4NDMzODgwMzgxQ0ZGRjc5MAorOjEwM0QyMDAwNTVGRjk4QkMwOEJDMTg0NzM4ODg0MDIzMTg0MzM4ODA5MgorOjEwM0QzMDAwRjdFNzAwMDA1NTU1NTU1NUE4MDMwMDgwMDgwMDExMDIwQgorOjEwM0Q0MDAwN0MyOTAwODBCMEI1NDAyMDJDNDlDMDQ2MDg2MDAwRjBCNgorOjEwM0Q1MDAwRkRGRTA3MUM0MDY4MDMyMzFCMDcxODQwMDUwRjY4MDE4MAorOjEwM0Q2MDAwNDAxQjgwMDAyNjQ5NDQxODIwODgwMjIzMTg0MzIwODBFNQorOjEwM0Q3MDAwMjA4ODQxMDgzNEQzNDAwODQwMDAyMDgwQTA2Q0UxNkNDQQorOjEwM0Q4MDAwNDAxOEEwNjQwMDIwRTA2NEExNkIyMjZEODkxOEExNjMzMworOjEwM0Q5MDAwMjA2NUI4NkFDMDQ2NjA2NTAzMjMxQjA3Nzg2ODE4NDAzMQorOjEwM0RBMDAwNzg2MDYxNjgzNjMxOTQyOTA0RDgzODIzMTg0Mzc4NjBFNAorOjEwM0RCMDAwMzgyMDAzRTA5NDIzMTg0Mzc4NjA5NDIwQjg2MTM5Njg3MAorOjEwM0RDMDAwNzg2ODAyMDQxMjBDMjAxQ0NCMUYwNTNCRkZGN0Q3RkRCRgorOjEwM0REMDAwMDIyMDYwODAzODFDRkZGN0RGRkVCMEJDMDhCQzE4NDcyQgorOjEwM0RFMDAwMzgxQ0ZDRjcwN0ZBMjgwMTA2NDk0MDE4MTkyM0RCMDFBMworOjEwM0RGMDAwQzAxODQxNkIwMTM5NDE2M0VGRTcwMDAwMDAwMDAwQjBEQgorOjEwM0UwMDAwNUMyQjAwODBBMDFDMDA4MDkwQjUwMDI3MEY0QzBERTBCQgorOjEwM0UxMDAwNDI2QjAxM0E0MjYzMDAyQTA1REMwMjZCQzA0NjQyNjNGMgorOjEwM0UyMDAwQzA2QTAxRjBDNkY5MDEzNzBCMkYwN0QyMzgwMTAwMTkxQgorOjEwM0UzMDAwMzMyMzlCMDFDMDE4ODE2QTAwMjlFOUQxMDEyMDQwMDY4MworOjEwM0U0MDAwMDM0OUMwNDYwODYwOTBCQzA4QkMxODQ3NjgwRTAwODA1MworOjEwM0U1MDAwMDAwMDAwQjAxMDQ4QzE2ODAxMzFDMTYwMEY0OUM4Njg1NgorOjEwM0U2MDAwMDEyODE3RDFDODFENzkzMDAyODkwMDJBMTJEMDAxM0FFMQorOjEwM0U3MDAwMDI4MTAyODkwMDJBMEREMTQyODkwMDJBMDhEMUM5NkYyNgorOjEwM0U4MDAwMDIyMzBBNjgxQTQzMEE2MDA0MjEwMTgxMDEyMTAwRTAyQgorOjEwM0U5MDAwMDAyMTQxODE3MDQ3MDAwMDA4ODMyMDQwNjgwRTAwODBBNworOjEwM0VBMDAwQjBCNTA3MUMwMTIzRjgxRDY5MzAwMzczMUU0OEMyMURGRAorOjEwM0VCMDAwNzkzMjU0OEE2MTFDNTE4MkQ1OEEwMDIxQUM0MjA0REJEQworOjEwM0VDMDAwQzQxRDg5MzQ2MzcwNTE4MkQxODMwMTIzOUIwNzNBNkRFRAorOjEwM0VEMDAwMUE0MzEyNjhDMDQ2QkE2MUZCNjk5QTQyMDZEMUY4NkM2RgorOjEwM0VFMDAwMTI0OUMwNDYwODYwQjBCQzA4QkMxODQ3Nzk2MTQxNjlGNgorOjEwM0VGMDAwRkE2QzkxNDM0MTYxMDEyMDAwMDVDMTYwMzg2OTAyMjhENAorOjEwM0YwMDAwRjFEMEI4NjlGOTY5NDExQTAxRDU3ODZENDExODM4MUNBQQorOjEwM0YxMDAwMDBGMDBFRjhGOTY5MDkxOEY5NjE3ODZEODE0MkUyRDM3MQorOjEwM0YyMDAwMDgxQUY4NjFERkU3MDAwMDY4MEUwMDgwMDAwMDAwQjBBQQorOjEwM0YzMDAwRjhCNTA0MUMwRjFDRkYyMzIxMzM5RjQyMDFEOUZGMjczMgorOjEwM0Y0MDAwMjEzN0UxNkUzODFDMDFGMENCRkMyRDREMDAyODEzRDEzOAorOjEwM0Y1MDAwRTAxRDQ5MzAwMTdBMDEyMzE5NDMwMTcyMjk0QUMwNDYwNAorOjEwM0Y2MDAwMDA5MjI5NDgwMTZENDI2RDAwMjAyQjFDMDFGMEIwRkMyRAorOjEwM0Y3MDAwMDAyMEY4QkMwOEJDMTg0NzIwNjkwMTMwMjA2MTIzNDlBMworOjEwM0Y4MDAwQzgxREI5MzAwMjZCOTIwMDUxMThDMDMxMEY2MTAxNkIyRQorOjEwM0Y5MDAwMDEzMTg5MDc4OTBGMDE2MzIwNkJDMjE5NjE2RDhBNDI2MworOjEwM0ZBMDAwMDNEODIzMjIxMjA1M0E0MzA1RTAwOTFBN0UxQTA3RDFFNQorOjEwM0ZCMDAwMjMyMjEyMDUwQTQzMDA5MjYxNkUwOTE4QTI2RTEwRTBENgorOjEwM0ZDMDAwMTEyMjUyMDUwQTQzMDA5MjYxNkUwOTE4MDAyMEEyNkU2OAorOjEwM0ZEMDAwMkIxQzAxRjA3REZDMjMyMjEyMDUzMjQzMDA5MjYxNkVGRQorOjEwM0ZFMDAwQTI2RTAwMjAyQjFDMDFGMDczRkMyMDZCQzAxOTAwMDk4RAorOjEwM0ZGMDAwMDAwMTYxNkQ4MTQyMDBEODQwMUEyMDYzMzgxQ0I4RTc4NworOjEwNDAwMDAwNDQ4MDIwNDAwNDAwMUIwMjdDMjkwMDgwNjgwRTAwODA1MAorOjEwNDAxMDAwODBCNTAxMjBDMDAzMEQ0OUMwNDYwODYwMEM0OUM4MUQ4OQorOjEwNDAyMDAwNDkzMDAyN0EwMDI3MDAyQTAzRDAwNzcyMDgxQ0ZGRjdFNAorOjEwNDAzMDAwMzdGRjA4NDlDODFENDkzMDAyN0EwMDJBMDNEMDA3NzJBOQorOjEwNDA0MDAwMDgxQ0ZGRjcyREZGODBCQzA4QkMxODQ3MDAwMDAwQjAxQgorOjEwNDA1MDAwNjQyRDAwODBFNDJDMDA4MDkwQjUwNzFDMTAyMDE4NDlDNgorOjEwNDA2MDAwQzA0NjA4NjBGODY4MDEzMEY4NjAxNjQ4QzQxREI5MzRDRAorOjEwNDA3MDAwNjE2Qjg5MDAwOTE4QzAzMTA5Njk3QTY4OTIwMEQyMTkwOAorOjEwNDA4MDAwNTE2NDYxNkI4OTAwMDgxOEMwMzAwMTY5Nzg2ODgwMDA0QworOjEwNDA5MDAwQzAxOUMwNkIwMUYwQTJGQTAxMjM3ODY4NTg0MDc4NjAxQgorOjEwNDBBMDAwNjA2QjAxMzA4MDA3ODAwRjYwNjNGODFEMTkzMDQwNzkyNAorOjEwNDBCMDAwMDAyODAyRDEzODFDMDBGMDA3Rjg5MEJDMDhCQzE4NDc1MworOjEwNDBDMDAwMDAwMDAwQjA2ODBFMDA4MDkwQjUwNzFDMzk0OEMwNjgzOQorOjEwNDBEMDAwMDAyODA1RDBCODZBQzA2ODgwMDkwMUQzMDIyMDAwRTAzQQorOjEwNDBFMDAwNzg2RkZDRjc1OUY4MDQxQzA2RDEwMTIwRjkxRDE5MzEyRAorOjEwNDBGMDAwMDg3MTkwQkMwOEJDMTg0N0Y4NkMyRjQ5QzA0NjA4NjA4RQorOjEwNDEwMDAwQkE2QTM4MUMyMTFDMDBGMDU5Rjg2NzYyMDAyODAzRDFGNAorOjEwNDExMDAwMjAxQzAwRjAwQkZERUNFN0Y5NkQwOTY4MDkxODA5MDk4RQorOjEwNDEyMDAwMDkwMTdBNkQ4QTQyMDBEODg5MUFBMTYyQjk2ODg5MDBBQQorOjEwNDEzMDAwQzkxOTRBNkMwMDJBMDdEMDRBNkMxMjFBNEE2NDgwMDhDRQorOjEwNDE0MDAwODAwMEI5NkEwODE4Qjg2MjM4NjhCOTZBODAwMEMwMTk3NgorOjEwNDE1MDAwNDI2QjkxNDIwRUQzMDAyMTQxNjRCODZBMzk2ODg5MDBFQworOjEwNDE2MDAwQzkxOTQ5NkI0MDFBQjg2MkI5Njg4OTAwQzkxOUM5NkI4NQorOjEwNDE3MDAwNDAxOEI4NjJCODY4ODEwMEM5MTk0OTZDMDAyOUI4RDFFMworOjEwNDE4MDAwQjk2QUZBNkI5MTQyQjREMDNBNkM5MTQyQjFEMDAxMjMzMgorOjEwNDE5MDAwNTg0MEI4NjA4MDAwQzAxOUMwNkJDMDQ2Qjg2MkY4Njg2QgorOjEwNDFBMDAwMDAyODAxRDAwMTM4Rjg2MDM4NjkwMDI4QTFEMDAxMzgxMgorOjEwNDFCMDAwMzg2MTlFRTc2ODE5MDA4MDAwMDAwMEIwRjdCNTkwQjA0NAorOjEwNDFDMDAwMDQxQzBEMUMwMDIwMDU5MDAyOTAwMDIyMDE5MkY5NDg2OQorOjEwNDFEMDAwQzA2QUMwNDZBODYxQTA2ODgxMDAwOTE5NDk2QkMwNDY0MQorOjEwNDFFMDAwMjA2MEUxNjIxMjlBRDA2OEMwNDZBODYwMTI5QTUxNzhBNQorOjEwNDFGMDAwQzA0NjBDOTFGMDQ4QzA0NjAzOTBENzFEMDkzN0UwNkFDRAorOjEwNDIwMDAwQzExQjA5MDlFMzFEMTkzMzBDOUFDMDQ2MEY5M0VCNEJGMAorOjEwNDIxMDAwQzA0NjBFOTM5MTQyMDFEM0I4NDIyMUQ4RTE2ODAyMjlFOQorOjEwNDIyMDAwMUVEMjAxMjAwRjk5QzA0NjQ4NzEwMDIwMDM5OTAxRjA2OQorOjEwNDIzMDAwNTdGQjAwMjgwM0QxMEU5QkQ4NkIwMTMwRDg2MzAxMjBCNworOjEwNDI0MDAwODAwNjAwMjc2ODYwQUY2MURENEFDMDQ2MDA5MkRENDgwNQorOjEwNDI1MDAwMDE2RDQyNkREQzRCMDAyMDAxRjAzQUZCMzgxQzVDRTM0MQorOjEwNDI2MDAwQjg0MjAzRDgyMDFDMDBGMDdCRkMwNzFDRDc0OEMwNjg2QworOjEwNDI3MDAwMDAyODY0RDAzODc4NDAwNzQwMEYwMzI4NjBEMTA1OThBMworOjEwNDI4MDAwMDEzMDAwMDYwMDBFMDU5MDM4NzhGMDIzMTg0MDU4RDExMAorOjEwNDI5MDAwRTA2QUMwMUIwMDA5MEM5OTg4NDIwMkQyRTA2ODAyMjgzQgorOjEwNDJBMDAwMDVEM0NCNDk4ODY4MDBGMDgzRkYwNjFDMDZEMTAzOUIyOQorOjEwNDJCMDAwMjgxQzM5MUMyMjFDMDBGMDhCRkMxNkUxMkU2MkY4NjhDOQorOjEwNDJDMDAwMDAyODBERDBCODg5MDAyODAzRDBDMTQ5Qzk2ODAwRjA4MgorOjEwNDJEMDAwNzBGRkY4ODkwMDI4MDNEMEJENDlDOTY4MDBGMDY5RkY2NAorOjEwNDJFMDAwN0E2OEMwNDY3MjYxQjk2OEMwNDZCMTYxMzAxQ0I4NDk4RAorOjEwNDJGMDAwMDk2ODAwRjA1RUZGMDAyODE3RDEzMDFDQjQ0OTQ5NjhGNgorOjEwNDMwMDAwMDBGMDU3RkYxMDM3RTA2QUI4NDIwM0Q4MjAxQzAwRjBENQorOjEwNDMxMDAwMjdGQzA3MUM2ODY4QUY0QjE4NDM2ODYwMDAyMEE4NjE0MQorOjEwNDMyMDAwQUMyM0E4Njg5ODQzQTg2MEIwRTBBODY5QTgyODAxRDI4NworOjEwNDMzMDAwQTgyMEE4NjExMDM3RTA2QUI4NDI2Q0Q4OUNFMEE1RTBEQworOjEwNDM0MDAwQTRFMDEwMjg2OEQxMDMyMzFCMDc2ODY4MTg0MDAxMEZGOAorOjEwNDM1MDAwNDgwMTQwMUE4MDAwQTA0QTgyMTgwMTkyNzg4ODQyMEJENgorOjEwNDM2MDAwMzFEMzgyMEIyRkQzOUQ0OEMwNDYwMzkwMDIyMDAxOUE3RgorOjEwNDM3MDAwQzA0NjEwODA3ODg4MDAwNTAwMEQwMTlBQzA0NjUwNjA0NAorOjEwNDM4MDAwQjg2ODAxOUFDMDQ2OTA2MDc4NjgwMTlBQzA0NjEwNjI4OQorOjEwNDM5MDAwMDAyMDAxOUFDMDQ2OTA2NDAxOUFDMDQ2OTA2Mzg4MDI0QQorOjEwNDNBMDAwOEY0OTQwMTgwMTlBQzA0NjUwNjMwMTlBNTA2ODM2MzBEMAorOjEwNDNCMDAwOTQyODAxRDgzODIwMDBFMDk0MjBBODYxMTAzN0UwNkFFMgorOjEwNDNDMDAwQjg0MjI4RDg1OEUwN0E4ODkyMEIwM0QzODU0OEMwNDY3MworOjEwNDNEMDAwMDM5MDIzRTAwMTIyMTIwMzAyNDA4MzRCMUREMDAzOTM3QworOjEwNDNFMDAwMDAwNTAwMEQwMTlBQzA0NjUwNjBCODY4MDE5QUMwNDZBOQorOjEwNDNGMDAwOTA2MDc4NjgwMTlBQzA0NjEwNjIwMDIwMDE5QUMwNDYxOQorOjEwNDQwMDAwOTA2NDAxOUFDMDQ2OTA2Mzg4MDI3NTQ5NDAxODAxOUFFOQorOjEwNDQxMDAwQzA0NjUwNjMwMkUwMzNFMDJBRTAwMzkzMDEyMDBGOTk4NQorOjEwNDQyMDAwQzA0NjQ4NzExMjlBNTA3ODA1OTk0MzFBMEI5MzEwMzc3OQorOjEwNDQzMDAwRTA2QUI4NDIwM0Q4MjAxQzAwRjA5MkZCMDcxQzAxOUFFNgorOjEwNDQ0MDAwNTA2QjkxNkIwOTAxNDAxODBCOUIyMTFDM0ExQ0ZGRjcyNAorOjEwNDQ1MDAwN0RGQjAxOUFDMDQ2RDA2NDAxOUEwQjlCQzA0NjEzNjU1MAorOjEwNDQ2MDAwMDEyMzVCMDY2ODY4MTg0MzY4NjAwMDIwQTg2MTBERTBCRQorOjEwNDQ3MDAwMTAzN0UwNkFCODQyMDNEODIwMUMwMEYwNzFGQjA3MUMxQgorOjEwNDQ4MDAwMzg3ODQwMDc0MDBGMDMyODAwRDFGOEU2QTg2OTAzOTk1RgorOjEwNDQ5MDAwMDFGMDI2RkEwMDI4MkFEMTM4MUMyMTFDMDBGMDc5RkJGMworOjEwNDRBMDAwQTg2ODgwMDkwNEQzMzAxQzQ5NDk0OTY4MDBGMDgxRkU5RQorOjEwNDRCMDAwNDE0OTAwMjAwMUYwMTRGQTAwMjgwNEQxMEU5QkQ4NkI2QQorOjEwNDRDMDAwMDEzMEQ4NjMxMUUwMDEyMDBGOTlDMDQ2NDg3MTgwMDY4MQorOjEwNDREMDAwMDAyNzY4NjBBRjYxM0E0QUMwNDYwMDkyMzk0ODAxNkREMgorOjEwNDRFMDAwNDI2RDM5NEIwMDIwMDFGMEYzRjkwMDIwMTVFMjA1OThFOAorOjEwNDRGMDAwMEM5OTA4MUEwMDA0MDAwQzBDOTAwQjkwMEM5ODAwMjhFMgorOjEwNDUwMDAwMDNEMDAxMjAwRjk5QzA0NjQ4NzEyODY4QzA0NjA0OTAyNgorOjEwNDUxMDAwMDAyNjAwMjAwODkwMDAyMjBBOTIwQzk4MDEzODBEOTA4NQorOjEwNDUyMDAwQTNFMDc4ODg4QTFCMTIwNDEyMEM5MDQyMDVERDA3OTJFMgorOjEwNDUzMDAwODAxQTAwMDQwMDBDMDg5MDAwRTAwNzkwMDg5ODAwMjhGQQorOjEwNDU0MDAwMDdEMTBEOTgwQTlBOTA0MjA3REQwNzk4MzAxODg4NDJFMworOjEwNDU1MDAwMDNEODAxMjA0MDA1MDY5MDFDRTAxMTIwNDAwNTA2OTA3QworOjEwNDU2MDAwQTg2ODhDMjMxODQwMDJEMTIwNDhDMDQ2MDY5MEIxMDdBNQorOjEwNDU3MDAwODkwRjBGRDAwNzk4QzAwNkMwMEUwOEQwMUUyODA5REI4RgorOjEwNDU4MDAwMUUyODAyRDEwMzI5MDVEMTAxRTAwMjI5MDJEMzAxMjAwRQorOjEwNDU5MDAwMDI5MERFRTcwQTlBMDAyQTA0RDEwMTIzREIwNTA2OTg3RgorOjEwNDVBMDAwMTg0MzA2OTAwNzk4MDY5OTA4NDMwMjFDMDA5MDA0OTg0NworOjEwNDVCMDAwODMxOTFERTBFODBFMDA4MDAxNDlGRkZGMjgwRjAwODBFRAorOjEwNDVDMDAwMDQwMDEyMDI3QzI5MDA4MDQ0ODAyMDQwNjgxOTAwODA4OQorOjEwNDVEMDAwNjAwNDAwODAwMDAwMDA4MDVDMkIwMDgwNTUzMkZGRkZFQgorOjEwNDVFMDAwQUM1RTIxNDAwRDNERkZGRkNEMzFGRkZGMDAwMDMyMDJFOAorOjEwNDVGMDAwMDAyMDNBMUQwNkNBMDFGMDZCRjkwNzk4MzYxODAyOTg5OAorOjEwNDYwMDAwMDAyODE2RDBBODY4OEMyMzE4NDAwNEQxMDkyMzVCMDQyNQorOjEwNDYxMDAwMDY5ODE4NDMwNjkwMDY5OEMyNEEwMjQzMDA5MjA0OThFRQorOjEwNDYyMDAwODMxOUMxNDgwMTZENDI2RDAwMjAwMUYwNTFGOTAwMjA0RAorOjEwNDYzMDAwMDI5MDA4OTgwMDI4MEJEMTBCOUIwMTNCMEI5MzEwMzc3RAorOjEwNDY0MDAwRTA2QUI4NDIwQ0Q4MjAxQzAwRjA4QUZBMDcxQzA3RTA4OAorOjEwNDY1MDAwNzg2ODA3OUE4MDE4Nzg2MDc4ODgwNzlBODAxQTc4ODAzNgorOjEwNDY2MDAwMEE5QTUwMUMwMjA0MTIwQzBBOTIwQzk4MEE5QTgyNDI2RQorOjEwNDY3MDAwMDNEQUE5NjlCMTQyMDBEOTUzRTdBODY5QjA0MjZCRDEwNgorOjEwNDY4MDAwQTg2ODAxMDk2OUQyMDg5QTAwMkE1NkQwMEM5OTBBOUE5QQorOjEwNDY5MDAwOEE0MjNFREJCMTA3ODkwRjBDRDAwODlBRDIwNkQyMEVBRgorOjEwNDZBMDAwMEJEMDFFMkEwNkRCMUUyQTAyRDEwMzI5MDVEMDAxRTAwOQorOjEwNDZCMDAwMDIyOTAyRDIwMjk5MDAyOTIxRDAwODlBQzA0NjAwOTIwQworOjEwNDZDMDAwMDQ5ODgzMTkwMDIwM0ExRDA2Q0EwMUYwMDFGOTA4OThFMAorOjEwNDZEMDAwMzYxOEE4Njg4QzIzMTg0MDAyRDAwMTIwNDAwNjAwRTA1QworOjEwNDZFMDAwOTI0ODAxMjIwMjQzMDA5MjA0OTg4MzE5OEU0ODAxNkQ3QQorOjEwNDZGMDAwNDI2RDAwMjAwMUYwRUNGODAwMjAwMjkwMTVFMDhDMjNDMAorOjEwNDcwMDAwMTg0MDAyRDAwMTIwNDAwNjAwRTA4ODQ4MDg5QTAyNDM4MQorOjEwNDcxMDAwMDBFMDA4OUFDMDQ2MDA5MjA0OTg4MzE5MDAyMDNBMUREMAorOjEwNDcyMDAwMDZDQTAxRjBENUY4MDg5ODM2MTgxMDM3RTA2QUI4NDI4MgorOjEwNDczMDAwMDNEODIwMUMwMEYwMTRGQTA3MUM2ODY4ODAwRTZCRDJBNgorOjEwNDc0MDAwMEE5OEMwNDYwOTkwMEM5OTg4NDI1Q0RBMEQ5ODA5OTkzQworOjEwNDc1MDAwODg0MjAzRDA3QTg4MUVFMDVGRTA1RUUwNzg4ODAxMjIxQworOjEwNDc2MDAwNTIwNjAyNDNBOTY4OEMyMzE5NDAwMkQxMDkyMzVCMDQzNQorOjEwNDc3MDAwMUE0M0IxMDc4OTBGMEVEMEMzMDZEQjBFMDhEMDFFMkJEQgorOjEwNDc4MDAwMDlEQjFFMkIwMkQxMDMyOTA1RDEwMUUwMDIyOTAyRDM0NgorOjEwNDc5MDAwMDEyMTAyOTEwMjFDMDk5ODAwMjgwMkQxMDEyM0RCMDVBNgorOjEwNDdBMDAwMUE0MzAwOTIwNDk4ODMxOTAwMjAzQTFEMDZDQTAxRjBBQQorOjEwNDdCMDAwOEZGODc4ODg4NjE5MTAzNzAyOTgwMDI4MTREMEE4NjhENgorOjEwNDdDMDAwOEMyMzE4NDAwMkQwMDEyMDQwMDYwMEUwNTc0ODAxMjIwNworOjEwNDdEMDAwMDI0MzAwOTIwNDk4ODMxOTUzNDgwMTZENDI2RDAwMjBGMgorOjEwNDdFMDAwMDFGMDc2RjgwMDIwMDI5MEUwNkFCODQyMDNEODIwMUM1RAorOjEwNDdGMDAwMDBGMEI2RjkwNzFDMDk5ODAxMzAwMDA0MDAwQzA5OTA3QworOjEwNDgwMDAwMEM5OTg4NDJBMkRCNjg2ODMwNDMwMTA0MDkwQzY4NjA5NworOjEwNDgxMDAwRTg2QTAwRjA3QkZBMjhFMDI3RTBBODY4MDAwOTE0RDNEMgorOjEwNDgyMDAwNjg2ODgwMEUxNUQyMDE5QTAwMkExMkQwMDE5QTUwNkI0NgorOjEwNDgzMDAwMEI5QjIxMUMzQTFDRkZGNzg5RjkwMTlBQzA0NjkwNjQzMgorOjEwNDg0MDAwMDE5QTBCOUJDMDQ2OTM2MzAzRTBFODZBMzExQzAwRjBCOQorOjEwNDg1MDAwNURGQTY4NjgzMDQzNjg2MEE4NjlCMDQyMDVEOTAwMDQxMQorOjEwNDg2MDAwMDAwQzgwMUIwMEYwRUVGOUFFNjFBODY4OEMyMzE4NDBBNAorOjEwNDg3MDAwMEJEMDJGNEFDMDQ2MDA5MjA0OThDMzFGMDUzQjJBNDgxQworOjEwNDg4MDAwMDE2RDQyNkQwMDIwMDFGMDIzRjgwMTIzOUIwNzIwNkQ4QworOjEwNDg5MDAwMTg0MzAwNjhDMDQ2QTA2MUUxNjk4MTQyMTJEMDIyNjlENAorOjEwNDhBMDAwMDIyQTBGRDI0MTFBMDFENTYwNkQ0MTE4MjAxQ0ZGRjc3MgorOjEwNDhCMDAwM0ZGQkUxNjk0MDE4RTA2MTYxNkQ4ODQyMjREMzQwMUFGMgorOjEwNDhDMDAwRTA2MTIxRTA4MTQyMUZEMTIwNjkwMjI4MUNEMjAxMjAzMQorOjEwNDhEMDAwNjA2MTE4NDg0MTY5RTI2QzBBNDM0MjYxODE2OUUzNkM5NgorOjEwNDhFMDAwOTk0MzgxNjEwMTIxMDkwNUNBNjA4MDY5QzA0NjA4NjE1OAorOjEwNDhGMDAwOEIwMjIwNkQxODQzMDA2OEMwNDZBMDYxRTE2OTgxNDJDNworOjEwNDkwMDAwMDJEMDIwMUNGRkY3Q0NGQTI4MUMwMEYwMEZGOTBDOThGRAorOjEwNDkxMDAwMDU5OTQwMTgwMDAxMTAzMDY4NjExM0IwRjBCQzA4QkM2NAorOjEwNDkyMDAwMTg0NzAwMDAwMTAwMDAwMjdDMjkwMDgwMDAwMDEyMDJFQworOjEwNDkzMDAwMDQwMDUyMDI2ODBFMDA4MEYwQjU0MDIwMkQ0OUMwNDZBOAorOjEwNDk0MDAwMDg2MDAwRjAwM0Y5MDcxQzgxNjk0NDZBQTA2RjAwRjA1OQorOjEwNDk1MDAwNDVGRTAwMjBFMTFEMTkzMTQ4NzE3OTY4QzkwRTA5RDM1RgorOjEwNDk2MDAwRjg2QTAwMDEyNDQ5NDAxODI0NEJDMDE4MDE2ODAxMzkzNQorOjEwNDk3MDAwMDE2MDM2RTBFMTZEMDk2ODIyNkVDMDQ2MTE2MDIwNEU4QworOjEwNDk4MDAwRjUxRDc5MzUwMTIzRTk2QjE5NDNFOTYzQjk2QUUyNkRENQorOjEwNDk5MDAwQzA0NjExNjBCOTZBMjI2RUMwNDYxMTYwNjE2OTAwMjk4MworOjEwNDlBMDAwMDREMUE5NkIwMTMxQTk2MzA4MjkwN0QzQTg2MzAxMjBBOQorOjEwNDlCMDAwMDBGMDg2RjhFODZCNDAwODQwMDBFODYzNzg2ODgxMEVGNAorOjEwNDlDMDAwMEZEMjBCMjMxQjAyRjExOEM5NjgwMDI5MDZEMDAwMDg3QQorOjEwNDlEMDAwMDREMjIwMUMzOTFDMDBGMDQzRjgwMkUwMzgxQzAwRjAxRgorOjEwNDlFMDAwMDVGQTM4MUNGQkY3MDZGQzIwMUMwMEYwMEJGOEYwQkNBNQorOjEwNDlGMDAwMDhCQzE4NDcwMDAwMDBCMEEwMUMwMDgwQjQwQzAwMDBFOAorOjEwNEEwMDAwNjgwRTAwODA4MEI1MDcxQ0Y4MUQxOTMwMDE3OTAwMjk1NworOjEwNEExMDAwMDREMDAwMjEwMTcxMzgxQ0ZGRjc1NkZCRjg2ODAyMjgwQQorOjEwNEEyMDAwMEREMEI4Njg4MDAwQzIxOTUwNkMwMDI4MTFEMEI4NkE0NworOjEwNEEzMDAwNDE3ODA5MDExMDMxNTI2QjEwMUE4ODQyMDVEMzM4MUM5NQorOjEwNEE0MDAwRkZGNzQyRkI4MEJDMDhCQzE4NDczODFDRkZGNzI4RkE2OAorOjEwNEE1MDAwRjhFNzc4Njg4MDAwQzAxOUMwNkJDMDQ2Qjg2MkYxRTcxQgorOjEwNEE2MDAwQjBCNTg3QjAwRjFDODA2RkMwNDYwMDkwMDAyNDEzNEQ3NgorOjEwNEE3MDAwMEIyMzFCMDJFODE4ODA2OTAwMjgxN0QwNjk0NkEyMDBBMgorOjEwNEE4MDAwNTIxOTBCMjMxQjAyRDIxODkyNjkzODFDMDBGMDkyRkJCQQorOjEwNEE5MDAwMDAyODA5RDEwMTM0QTAwMDQwMTkwQjIzMUIwMkMwMThDMworOjEwNEFBMDAwODA2OTAwMjhFQUQxMDFFMDAxMjgwMkQwMzgxQzAwRjAxQQorOjEwNEFCMDAwOURGOTA3QjBCMEJDMDhCQzE4NDcwMDAwNjgwRTAwODAyNAorOjEwNEFDMDAwQjhCNUMyMDdEMjBGMTY0QzE2NDkwMUQwMDgyMjA4RTAyQgorOjEwNEFEMDAwODIwODA1RDMwQzIyQTQxODBCNjhERjFEMTUzNzAzRTBFQworOjEwNEFFMDAwMUMyMjBCNjhERjFEMDkzNzBGNEIxRDc4MDAyRDEzRDBEQQorOjEwNEFGMDAwNUI3ODAwMkIxMEQwMDEyMzVCMDYxQTQzMDAyODAxRDFGQworOjEwNEIwMDAwNUIwODFBNDMwMDkyNEE2ODAxMjAzOTFDMjMxQzAwRjBGQworOjEwNEIxMDAwREZGRUI4QkMwOEJDMTg0NzAzMjMxQjA2MUE0M0YxRTdBNQorOjEwNEIyMDAwOTBFRTIwNDA3QzI5MDA4MEY4MEUwMDgwMDAyMUMxNjFCOQorOjEwNEIzMDAwMDU0OThBNjgwMDJBMDFEMTg4NjAwMkUwQ0E2OEMwNDYzNworOjEwNEI0MDAwRDA2MUM4NjA3MDQ3MDAwMDI4MEYwMDgwMDM0OTg4Njg2MgorOjEwNEI1MDAwMDAyODAyRDBDMjY5QzA0NjhBNjA3MDQ3MjgwRjAwODBEMgorOjEwNEI2MDAwMDExQzAxMjM4ODY4NTg0MDg4NjBDQTY4MDEzQUNBNjBGRAorOjEwNEI3MDAwMEE2OTAxM0E4MDAwMEE2MTQyMThEMDZCNTM2QkMwNDY0MworOjEwNEI4MDAwQ0I2MjBCNjg5QjAwNTkxODQ5NkM1MzZDQzkxODUxNjQ2RgorOjEwNEI5MDAwNzA0NzhBNjg5MjAwNTIxOEQzNkI4MzQyMTdEMUQwMUQ5OAorOjEwNEJBMDAwM0QzMDBBNjg5MjAwNTIxODUyNkMwMzY4OUExQTAyNjBFQgorOjEwNEJCMDAwMDEyMzg4Njg1ODQwODg2MENBNjgwMTMyQ0E2MDBBNjk1RgorOjEwNEJDMDAwMDEzMjgwMDA0MDE4MEE2MTQwNkJDMDQ2Qzg2MjcwNDdERAorOjEwNEJEMDAwQjhCNTA0MUMxRDFDMTcxQzA4MUMzOTFDRkZGN0Q5RkY5NQorOjEwNEJFMDAwMDAyMDI5MUMwMEYwN0NGRTAxMjBGOTFEMTkzMTQ4NzFCQworOjEwNEJGMDAwODAwNjYwNjAwMDIwQTA2MTA2NEFDMDQ2MDA5MjA2NDgxOAorOjEwNEMwMDAwMDE2RDQyNkQwNTRCMDAyMDAwRjA2MkZFQjhCQzA4QkM4RgorOjEwNEMxMDAwMTg0NzAwMDAwNDAwMTIwMjdDMjkwMDgwNDQ4MDIwNDBENAorOjEwNEMyMDAwMDY0OTBBNjgxMDE4MDg2MDAxMjM1QjAyOTg0MjAzRDlGQworOjEwNEMzMDAwMDM0OTBBNzkwMTMyMEE3MTcwNDcwMDAwRTQyRDAwODBBRgorOjEwNEM0MDAwQTA4MjIwNDA4MDA4ODAwMDA2NDkwQTY4MTAxODA4NjA4OQorOjEwNEM1MDAwMDEyMzVCMDI5ODQyMDNEOTAzNDkwQTc5MDEzMjBBNzFBMAorOjEwNEM2MDAwNzA0NzAwMDBFNDJEMDA4MEEwODIyMDQwMDMzMDgwMDhCRgorOjEwNEM3MDAwODAwMDA2NDkwQTY4MTAxODA4NjAwMTIzNUIwMjk4NDIwOAorOjEwNEM4MDAwMDNEOTAzNDkwQTc5MDEzMjBBNzE3MDQ3RTQyRDAwODA4MworOjEwNEM5MDAwQTA4MjIwNDAwMjQ4NDE3OTAxMzE0MTcxNzA0NzAwMDBGMworOjEwNENBMDAwQTA4MjIwNDA5MEI0ODIwMDE3NEI5QTU4OEIwNzAyRDAwNAorOjEwNENCMDAwODkwODBCMUQwMUUwODkwOENCMUMxMTY5RDc2ODEyNENDQgorOjEwNENDMDAwODAwMDIwNTg0MDY4Qjk0MjAzRDE4MTQyMTlEOTExNjg0NworOjEwNENEMDAwMTdFMDAwMjRCOTQyMDlEOTgxNDIxMkQ5MTE2ODc4MUEyMworOjEwNENFMDAwMDBENTAzMzA4MDEwOTg0MjBCRDgwN0UwODE0MjA1RDhFOAorOjEwNENGMDAwNzgxQTAwRDUwMzMwODAxMDk4NDIwMkQ4MjAxQzkwQkM0RQorOjEwNEQwMDAwNzA0N0M4MUQwNTMwRkFFNzcwMDQwMDgwODBCNTgwMDA0OAorOjEwNEQxMDAwMEY0QTE3NTg4ODA3MDJEMDg4MDgwNDMwMDFFMDg4MDgzNQorOjEwNEQyMDAwMDMzMDM5Njk3QTY4OTE0MjA5RDkzOTY4QzA0NjM5NjFENgorOjEwNEQzMDAwRjk2ODdBNjg5MTQyMDJEOTM5NjhDMDQ2Rjk2MDgxMDAwMQorOjEwNEQ0MDAwMzg2OTAwRjBEMUZEMzg2MTgwQkMwOEJDMTg0NzAwMDAwQworOjEwNEQ1MDAwNzAwNDAwODA5MEI1MDMyMTA5MDcwMTQwMEMwRjAxMDQ4NQorOjEwNEQ2MDAwMDkwQzAxMjI5MjA3MDI0MEEzMDAxQzRGRkY1ODg5MDczQgorOjEwNEQ3MDAwODkwRjAwMDQwMDBDODAwODAwMjkwMEQwMDEzMDAwMkFBRgorOjEwNEQ4MDAwMDFEMDAyMzAwMEUwMDMzMEY5Njg3QTY4OTE0MjAyRDkxQworOjEwNEQ5MDAwMzk2OEMwNDZGOTYwODEwMEY4NjgwMEYwQTVGREY4NjA0OAorOjEwNERBMDAwMEY0ODAwNjkwMDI4MDVEMDAxMjBBMDQwMDJEMDIwMUMzNworOjEwNERCMDAwRkVGN0NBRkMwQjQ5QzgxRDE5MzAwMzc5MDAyMjAwMkJFRAorOjEwNERDMDAwMDVEMTA5NDlDODFEMTkzMDAzNzkwMDJCMDNEMDAyNzFBMAorOjEwNEREMDAwMDgxQ0ZGRjc3OUY5OTBCQzA4QkMxODQ3NzAwNDAwODBFNAorOjEwNERFMDAwRDAyQzAwODA2NDJEMDA4MEU0MkMwMDgwQjBCNTJCNDlDRAorOjEwNERGMDAwMDk3OTAwMjkwM0QxNDE2ODI5NEIxOTQzNDE2MDgxNjgzMQorOjEwNEUwMDAwNDkwODAyRDMwOTIxMDkwNDAxRTAwRDIxMDkwNDBDQzg1NQorOjEwNEUxMDAwMDgzODE5NDM4NzY4QkIwQTAzRDM0MzY4NUIwODAwRDM4QgorOjEwNEUyMDAwMDEzMTQwNjgwMzIzMUIwNzE4NDAwNzBGRjgwMDFENEM5MQorOjEwNEUzMDAwMDAxOTIzNjhDMDE4NTAzMDAwNzkwMTI4MTBEMTYwNjgyQgorOjEwNEU0MDAwMDEyODBERDAxMDFDMDBGMDcxRjgzODAxMDAxOTE5MjM0OQorOjEwNEU1MDAwREIwMUMwMTg0MTZCMDEzOTQxNjNCMEJDMDhCQzE4NDc4NQorOjEwNEU2MDAwMzgwMTAwMTkxOTIzREIwMUMwMTgwMzZCNUQxQzA1NjNCMQorOjEwNEU3MDAwQkQwMjJEMTlEQjAwRUIxODgwMzMxOTYzREE2MjgxNkJGOAorOjEwNEU4MDAwMDEzMTgxNjMwMTIxQjk0MDIyNjgxMTQzMjE2MDAxNkIyNgorOjEwNEU5MDAwODAyOUUyRDMwMDIxMDE2M0RGRTcwMDAwMjgwRjAwODBCMgorOjEwNEVBMDAwMDAwMDAwODBBMDFDMDA4MEYwQjUxRjRFNzA2ODAwMjgzNAorOjEwNEVCMDAwMzZEMTAwMjRCMTY4NDgxQ0M5MDA4OTE5QjA2MDMyNjgzNQorOjEwNEVDMDAwODkxODYwMzEwRDdCMDgyODAwRDNCNDYwMjgwMTgwMTk0RgorOjEwNEVEMDAwMTkyM0RCMDFDMDE4ODc2QjAwMkYyMUQwQzE2QTRCMUMzRQorOjEwNEVFMDAwQUEwMjkyMTlDOTAwNTExODgwMzFDMzYyQ0E2QTA5NkJCQgorOjEwNEVGMDAwMDEzRjg3NjM4MDJCMDBEM0M0NjIwMDJGMDZEMTAxMjdCNgorOjEwNEYwMDAwQUY0MDNCMUNEQjQzMzc2ODNCNDAzMzYwNDM2QjAxM0JBNgorOjEwNEYxMDAwNDM2MzEwMUMzNzFDMDBGMDA5Rjg3ODY4MDAyOEM5RDBEQQorOjEwNEYyMDAwRjBCQzA4QkMxODQ3MDAwMEEwMUMwMDgwRjBCNUNEMEZGNQorOjEwNEYzMDAwRUQwNzAxMjQwMDI3MkU0QjJFNEEwMDJEMUREMEQ4NkFFNAorOjEwNEY0MDAwMDEzMEQ4NjIxMDFDNTI2OTAwMkExMkQwMDI2OTUzMUMyOQorOjEwNEY1MDAwOTIwMDEyMTgwMzYxOTE2MTQxNjkwMTMxNDE2MTAyNjk1NgorOjEwNEY2MDAwMEYyQTAwRDMwNzYxMEYyOTAwRDM0NDYwRjBCQzA4QkNBRQorOjEwNEY3MDAwMTg0NzA4MUNGRkY3RUVGRUY4RTcxNTY5NkUxQ0FEMDAzOAorOjEwNEY4MDAwQUQxODE2NjFBOTYxNTU2OTAxMzU1NTYxMTY2OTBGMkU3NQorOjEwNEY5MDAwMDBEMzE3NjEwRjJEMDBEMzU0NjA4QzAyQTQwQTE2NEY2MgorOjEwNEZBMDAwM0E2RkZENjhGOTFENzkzMTAxMkQwQ0QxREI2RDVCMDg3RAorOjEwNEZCMDAwMDlEMzBCODkwMDJCMDZEMUZENkYwMzNCMkU2ODMzNDBDQworOjEwNEZDMDAwMkI2MDE0MjMwQjgxMTA2MDgwMDc4MDBBMjA0MzAzMDRBOAorOjEwNEZEMDAwMDBEMDAxMzg1MDYwMDk2QTA4MzI5MTQyMDBEODA3NEE2RgorOjEwNEZFMDAwMDAwRDAyRDM1MTIwODAwMzgyNjEzQTY3QkVFNzAwMDBDMgorOjEwNEZGMDAwQTQyQTAwODBBMDFDMDA4MDY4MEUwMDgwMjRBNzIwNDAwNgorOjEwNTAwMDAwQjBCNTAwMjgwNEQxMDEyMEMwMDUxNjQ5QzA0NjA4NjA4QgorOjEwNTAxMDAwMTU0QzAwMjU2NzY5MDAyRjE2RDBFMDY4NDExQzgwMDAwMAorOjEwNTAyMDAwMDAxOUUxNjA4MDY5MDEzRkZGRjc5NEZFRTA2ODBGMjhGNgorOjEwNTAzMDAwMDBEM0U1NjBFMDY4ODAwMDAwMTk4MDY5MDAwODAxRDNCMgorOjEwNTA0MDAwMDAyRkVBRDE2NzYxMDNFMDA4NDgwMTZEMDEzMTAxNjU3NQorOjEwNTA1MDAwNjU2MDIwNjgwMDI4MDFEMEZGRjcyNkZGQjBCQzA4QkNCRgorOjEwNTA2MDAwMTg0NzAwMDAwMDAwMDBCMEEwMUMwMDgwQTA4MjIwNDA3MworOjEwNTA3MDAwMDAyMDcwNDdCMEI0MTAyMzgyNjgxMzQwMDAyMTAwMkIzOQorOjEwNTA4MDAwMTVEMDBDNEIxQTQwMTIwMTgxMjQxNDQzMDI2ODE1Njg5NAorOjEwNTA5MDAwMTMxRDgwQ0IxQjY4MDQzQTAyNjAyMEMyODBDMjA4QzI4NAorOjEwNTBBMDAwMTQ2MDQyNjgwMTIzOUIwNzA0MzIxQTQzNDI2MDA4MUNDMworOjEwNTBCMDAwQjBCQzcwNDcwMEYwRkYwRkYwQjQ4MjY4NTMwOTM0RDNERQorOjEwNTBDMDAwMUI0QjFBNDAxMjAxODEyNjE2NDMwMzY4MUQ2ODFGMURFMQorOjEwNTBEMDAwMTBDRjNGNjgwNDNCMDM2MDIwQzMxMEMzODBDMzFFNjAzMQorOjEwNTBFMDAwNDM2ODFGMUQwMTIzOUIwNzNCNDM0MzYwQ0I2QjE4MUY4NQorOjEwNTBGMDAwQzg2MzgwQ0I4MEMwMUM2ODFGMUQwMzFEMDQ2MDM4MUM2MgorOjEwNTEwMDAwM0Y2OEMwNDYxRjYwMUYxRDQzNjgxQzA0MjQwQzgxMjM5OAorOjEwNTExMDAwMjM0MzNCNjA0MDY4MDAwQzAwMDQxMDQzNzg2MDA4NkUzNQorOjEwNTEyMDAwMDQzMDA4NjY0ODZFMDQzMDQ4NjYwMDIwRjBCQzcwNDdDMgorOjEwNTEzMDAwMDBGMEZGMEY4MEI0ODE2QTAxMjM5QjA3Q0ExRDA1MzI2RQorOjEwNTE0MDAwMUE0MzEyNjhDRjFEMDEzNzNCNDMxQjY4QzA0NkNCNjAzMgorOjEwNTE1MDAwMDEyMzlCMDcwRjFEM0I0MzFCNjhDMDQ2OEI2MDAxMjM0NworOjEwNTE2MDAwOUIwNzBCNDMxQjY4MENDMTAyNjIwMTZCQzA0NjBBNjJCRAorOjEwNTE3MDAwMDQyMzgxNjkxOTQzODE2MTAyNkJDMDQ2OTE2MTgxNkE5MAorOjEwNTE4MDAwMDQzMTgxNjIwMjZCQzA0NjkxNjJDMTFEMzkzMTRBOEI4NAorOjEwNTE5MDAwMDQzQTRBODM0OThCMDI2QjQwMzI1MTgzQzE4OTA0MzlGNgorOjEwNTFBMDAwQzE4MUMxNjgwMDZCQzA0NkMxNjAwMDIwODBCQzcwNDdFRgorOjEwNTFCMDAwMDA0NzA4NDcxMDQ3MTg0NzIwNDcyODQ3MzA0NzM4NDdENworOjEwNTFDMDAwMzA0MDJERTkwQ0MwOURFNTBDNDhBMEUxMjQ0OEIwRTEzOQorOjEwNTFEMDAwMUUwMDAwMEEwMUMwNENFMjE4NDBBMEUzNjQ1MTlGRTVBNAorOjEwNTFFMDAwOTQ1MDIwRTAwMDUwOTBFNTE0NDA5MEU1MDAzMDg1RTVCMworOjEwNTFGMDAwMDRDMDg1RTUwODEwODVFNTBDMjA4NUU1MTAxMDkwRTVENAorOjEwNTIwMDAwMTA1MDg1RTIwMTAwNTVFMTBDNTA5MDU1MDQwMDU1RTEyNQorOjEwNTIxMDAwMDUwMDAwMEEwNDEwOTBFNTAwNTA4MEU1MDA1MDgxRTU4QgorOjEwNTIyMDAwMDAwMEEwRTMzMDQwQkRFODFFRkYyRkUxMDAzMDkzRTUxMQorOjEwNTIzMDAwMDgyMDkwRTUwMTMxODNFMzAyMzY4M0UzMDMwMDU1RTE2MgorOjEwNTI0MDAwMTQzMDgwRTVGMkZGRkYxQTAxMDBBMEUzRjRGRkZGRUE0QgorOjEwNTI1MDAwMDEwNjFDRTNGMUZGRkYwQUVDMTA5RkU1MDJDNkNDRTM1OAorOjEwNTI2MDAwNTQyMDkxRTVFNDMwOUZFNTUwMTA5MUU1RDlGRkZGRUEyNQorOjEwNTI3MDAwRjA0NzJERTkyMEMwOURFNTBDNjhBMEUxMjY2OEIwRTE2QgorOjEwNTI4MDAwMjUwMDAwMEExODQwQTBFM0I4NTA5RkU1OTQwMDAwRTAxNAorOjEwNTI5MDAwMDUwMDgwRTAwODQwOTBFNTA0ODA5MEU1MDA3MEEwRTMwMAorOjEwNTJBMDAwMUZDMEEwRTMwMkM0OENFMzAwNTA5MEU1MTA5MDkwRTU4RAorOjEwNTJCMDAwMTRBMDkwRTUwMDMwODVFNTA0QzA4NUU1MDgxMDg1RTU3QgorOjEwNTJDMDAwMEMyMDg1RTUxMDUwODVFMjA5MDA1NUUxMEM1MDkwNTUwMQorOjEwNTJEMDAwMEEwMDU1RTExNTAwMDAwQTAzNzAxN0UyMjAxMDgxRTI3MAorOjEwNTJFMDAwMjAzMDgzRTIwQTAwMDAwQTAwNjA5NkUyMDE3MDg3RTI0MworOjEwNTJGMDAwMDkwMDAwMEEyMDYwNDZFMjIwMDA1NkUzRUNGRkZGQ0FFNgorOjEwNTMwMDAwMDA3MEEwRTMwMUMwNDZFMjAyQzQ4Q0UzMDA2MEEwRTNBOQorOjEwNTMxMDAwRTdGRkZGRUEwMDUwODhFNUYyRkZGRkVBMDAxMEEwRTM5NAorOjEwNTMyMDAwMDA1MDgwRTUwMTAwQTBFMUYwNDdCREU4MUVGRjJGRTEzRAorOjEwNTMzMDAwMDBBMDk0RTUwQTAwNTVFMTE0QTA4MEU1RTVGRkZGMUFGRQorOjEwNTM0MDAwMDExMEEwRTNGNUZGRkZFQUE4MDMwMDgwN0MyOTAwODA5QworOjEwNTM1MDAwMDA4MDIwNDA2ODgyOUZFNTBCOTJBMEUzNjRBMjlGRTU1NQorOjEwNTM2MDAwNThCMDlBRTUwRUYwQTBFMTU0QjA5QUU1MUVGRjJGRTE4NworOjEwNTM3MDAwM0Y0MDJERTkwMDAwNEZFMTFGMDAwMEUyMTIwMDUwRTMyMgorOjEwNTM4MDAwNTQwMDAwMEEwMDAwMEZFMTgwMDBDMEUzMDBGMDIxRTFCQQorOjEwNTM5MDAwMDQ1MEEwRTMwMDQwOTlFNTA5MDAwMEVBMDIwMDE0RTM4QworOjEwNTNBMDAwNTMwMDAwMUI4MDAwMTRFMzU5MDAwMDFCMjAwMDE0RTM4RAorOjEwNTNCMDAwNTkwMDAwMUIwMjA3MTRFMzU5MDAwMDFCMDEwNjE0RTMwNworOjEwNTNDMDAwNTkwMDAwMUIwODAwMTRFMzQ1MDAwMDFCMDIwNTE0RTMwQworOjEwNTNEMDAwNEEwMDAwMUIwMjA4MTRFMzRCMDAwMDFCRTUwRTE0RTMxNworOjEwNTNFMDAwMDcwMDAwMEEwNDIwOThFNTBDMTA5OEU1MDQzMDUyRTIwQQorOjEwNTNGMDAwM0MzMEEwQjMwNDMwODhFNTAyMDA5MUU3MEZFMEEwRTE2MworOjEwNTQwMDAwMTBGRjJGRTEwMTUwNTVFMjAzMDAwMDBBMDA0MDk5RTUyQQorOjEwNTQxMDAwMEMwMDlBRTUwMDAwMTRFMTFCRkYyRjExMDgwMDlBRTUyQgorOjEwNTQyMDAwMDAwMDE0RTEwQjAwMDAwQTAxMEMxNEUzOTgwMTlGMTUyMQorOjEwNTQzMDAwMEZFMEEwMTExMEZGMkYxMTAyMDQxNEUzOEMwMTlGMTUzRgorOjEwNTQ0MDAwMEZFMEEwMTExMEZGMkYxMTAxMDkxNEUzODAwMTlGMTUzNworOjEwNTQ1MDAwMEZFMEEwMTExMEZGMkYxMTA0MDA5QUU1MDAwMDE0RTFFNQorOjEwNTQ2MDAwMTYwMDAwMEE1NEUwOEZFMjA0MDAxNEUzNDAwMDlBMTU4RAorOjEwNTQ3MDAwMTBGRjJGMTEwMjBBMTRFMzQ0MDA5QTE1MTBGRjJGMTE5OAorOjEwNTQ4MDAwMDIwOTE0RTM0ODAwOUExNTEwRkYyRjExMDEwMjE0RTNEQQorOjEwNTQ5MDAwNEMwMDlBMTUxMEZGMkYxMTAxMDQxNEUzNTAwMDlBMTVDNworOjEwNTRBMDAwMTBGRjJGMTEwMTBBMTRFMzIxMDAwMDFCMDIwMDE0RTM3NgorOjEwNTRCMDAwMEUwMDAwMUIxMDAwOUFFNTAwMDAxNEUxMUMwMDAwMUIwOAorOjEwNTRDMDAwMDA0MDk5RTUwNDUwQTBFMzAwNDA5NEUyMUJGRjJGMTEzNworOjEwNTREMDAwM0Y0MEJERTgwNEYwNUVFMkMwMDA4MEUzMDBGMDYxRTExRgorOjEwNTRFMDAwRkFGRkZGRUExODAwOUFFNTFDMTA5QUU1MTFGRjJGRTE3OAorOjEwNTRGMDAwNTRCMDlBRTUxQzEwOUFFNTE0MDA5QUU1MTFGRjJGRTFDQgorOjEwNTUwMDAwMjAxMDlBRTUwMDAwQTBFMzExRkYyRkUxMjQxMDlBRTU5NgorOjEwNTUxMDAwMTFGRjJGRTEyODEwOUFFNTExRkYyRkUxMkMxMDlBRTVEOQorOjEwNTUyMDAwMTFGRjJGRTEzMDEwOUFFNTExRkYyRkUxMzQxMDlBRTVCOQorOjEwNTUzMDAwMTFGRjJGRTFGRUZGRkZFQTM4RTA5QUU1M0MxMDlBRTUwMworOjEwNTU0MDAwMTgwMDlBRTUxMUZGMkZFMTM4RTA5QUU1M0MxMDlBRTU0MgorOjEwNTU1MDAwMTQwMDlBRTUxMUZGMkZFMTY0MjA5RkU1MDAzMDkyRTVFOQorOjEwNTU2MDAwMDAzMDUzRTAwQTAwMDBCQTAwMzA4MkU1MEMwMDkyRTVGQQorOjEwNTU3MDAwMDgzMDkyRTUwMDEwOTFFMjAzMDAwMDBBMDMxMDgwRTc3MgorOjEwNTU4MDAwMDQzMDUzRTIzQzMwQTBCMzA4MzA4MkU1MDEwMEEwRTNEMAorOjEwNTU5MDAwMUVGRjJGRTEzQzEwOUZFNTAwMDA5MUU1MDEwMDgwRTIzNQorOjEwNTVBMDAwMDAwMDgxRTUwMDAwQTBFM0Y4RkZGRkVBMTAwMDlGRTU5RQorOjEwNTVCMDAwMDgxMDkwRTUwNDEwNTFFMjNDMTBBMEIzMDgxMDgwRTVGQgorOjEwNTVDMDAwMUVGRjJGRTFFNDJEMDA4MENDMDQwMDgwNzEyQkZGRkYzMworOjEwNTVEMDAwRDEzREZGRkZDOTJCRkZGRkEwODIyMDQwQzkxQzg5MDhENQorOjEwNTVFMDAwODkwMDAxMjM4NTRBNUIwNzE4NDMxMzY4NUIxODEzNjAyMQorOjEwNTVGMDAwMDAxRjgxQTM1QjFBMTg0NzA0MjBBMEU1MDQyMEEwRTU0MgorOjEwNTYwMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVGNgorOjEwNTYxMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVFNgorOjEwNTYyMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVENgorOjEwNTYzMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVDNgorOjEwNTY0MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVCNgorOjEwNTY1MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVBNgorOjEwNTY2MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU5NgorOjEwNTY3MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU4NgorOjEwNTY4MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU3NgorOjEwNTY5MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU2NgorOjEwNTZBMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU1NgorOjEwNTZCMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU0NgorOjEwNTZDMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUzNgorOjEwNTZEMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUyNgorOjEwNTZFMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUxNgorOjEwNTZGMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNgorOjEwNTcwMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVGNQorOjEwNTcxMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVFNQorOjEwNTcyMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVENQorOjEwNTczMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVDNQorOjEwNTc0MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVCNQorOjEwNTc1MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVBNQorOjEwNTc2MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU5NQorOjEwNTc3MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU4NQorOjEwNTc4MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU3NQorOjEwNTc5MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU2NQorOjEwNTdBMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU1NQorOjEwNTdCMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU0NQorOjEwNTdDMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUzNQorOjEwNTdEMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUyNQorOjEwNTdFMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUxNQorOjEwNTdGMDAwMDQyMEEwRTUwNDIwQTBFNTFFRkYyRkUxRTQyRDAwODA5OQorOjEwNTgwMDAwOTgwMDlGRTU5ODEwOUZFNTAxMjA0MEUwOTQzMDlGRTVDNworOjEwNTgxMDAwMDAwMDkxRTUwMzAwNTBFMTAzMDAwMDFBMDQxMDgxRTI0QQorOjEwNTgyMDAwMDQyMDUyRTIwMDAwMDAwQUY4RkZGRkVBNzgwMDlGRTUzQQorOjEwNTgzMDAwMDAyMDgwRTU3NDAwOUZFNTc0MTA5RkU1MDEyMDQwRTBBMgorOjEwNTg0MDAwNjAzMDlGRTUwMDAwOTFFNTAzMDA1MEUxMDMwMDAwMUE3RAorOjEwNTg1MDAwMDQxMDgxRTIwNDIwNTJFMjAwMDAwMDBBRjhGRkZGRUE4RgorOjEwNTg2MDAwNTAwMDlGRTUwMDIwODBFNTRDMDA5RkU1NEMxMDlGRTUyRgorOjEwNTg3MDAwMDEyMDQwRTAyQzMwOUZFNTAwMDA5MUU1MDMwMDUwRTE1RAorOjEwNTg4MDAwMDMwMDAwMUEwNDEwODFFMjA0MjA1MkUyMDAwMDAwMEEyMgorOjEwNTg5MDAwRjhGRkZGRUEyODAwOUZFNTAwMjA4MEU1MUVGRjJGRTFDQQorOjEwNThBMDAwN0MzNDAwODA4MDMwMDA4MEFEREVBRERFQzAwNDAwODAzRQorOjEwNThCMDAwRkMzNzAwODA4MDM0MDA4MEM0MDQwMDgwRkMzRjAwODBGRQorOjEwNThDMDAwNDAzODAwODBDODA0MDA4MDc4NDcwMDAwNzFFQUZGRUE5MQorOjEwNThEMDAwNzg0NzAwMDAzOUZFRkZFQTc4NDcwMDAwNjNGRUZGRUFFMAorOjEwNThFMDAwNzg0NzAwMDAxQkZGRkZFQTc4NDcwMDAwNkJFQUZGRUFGOQorOjEwNThGMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDgwMjgwNDAwMDBGRQorOjEwNTkwMDAwRjgzRDAwMDAwMDAxMDA4MDAwRkYwMDAwMDAwMDAwMDBFMgorOjEwNTkxMDAwQjkwQkZGRkYwMDAwMDAwMEQ1MEJGRkZGMDNGRjA2NTQ4QgorOjEwNTkyMDAwMDMwMDAwMDA3NTA0RkZGRjAwMDAwMDAwQTEwNUZGRkY1OQorOjEwNTkzMDAwMDRGRjA3NTQwMzAwMDAwMEI1MDRGRkZGMDAwMDAwMDA0RgorOjEwNTk0MDAwRjEwNUZGRkYwNUZGMDU1NDAzMDAwMDAwMzkwNEZGRkZDOAorOjEwNTk1MDAwMDAwMDAwMDA1NTA1RkZGRjAxRkYwNDAwMDMwMDAwMDBFOAorOjEwNTk2MDAwNDExOEZGRkYwMDAwMDAwMDYxMEVGRkZGMDJGRjAyMDg2OAorOjEwNTk3MDAwMDAwMDAwMDBBMTAyRkZGRjAwMDAwMDAwRjEwMkZGRkY5NQorOjEwNTk4MDAwRkZGRjAxNDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTk5MDAwOUQwREZGRkYwNjAwRkYwMDAwMDAwMDAwM0Q1MEZGRkZDRgorOjEwNTlBMDAwODE1MEZGRkYwMDAwMDAwMEZGRkZGRjAwMDAwMDAwMDAyQgorOjEwNTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGMDBFQQorOjEwNTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwNTlEMDAwRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgwNTAwODBFQQorOjEwNTlGMDAwMTE3NTIxNDAxQjc1MjE0MDMxNzUyMTQwNDk3NTIxNDBBOQorOjEwNUEwMDAwNTU3NTIxNDA2Mzc1MjE0MDdENzUyMTQwQTk3NTIxNDA2MAorOjEwNUExMDAwNkQ3NjIxNDBDNTc2MjE0MEQzNzYyMTQwREQ3NjIxNDA0OAorOjEwNUEyMDAwRTc3NjIxNDA5OTc3MjE0MEE3NzcyMTQwQjU3NzIxNDAzQgorOjEwNUEzMDAwNjE3ODIxNDA1RjdDMjE0MEU5N0MyMTQwODk3RDIxNDBDMworOjEwNUE0MDAwQkQ3RTIxNDBDOTdFMjE0MDI5N0YyMTQwOEQ3RjIxNDA5QworOjEwNUE1MDAwQjk3RjIxNDBERDdGMjE0MDFEODAyMTQwNDU4MDIxNDBDQworOjEwNUE2MDAwOEQ4MDIxNDA5RDgwMjE0MEM1ODAyMTQwRDU4MDIxNDBFRQorOjEwNUE3MDAwMUQ4MTIxNDA1QjgxMjE0MEIxODEyMTQwMTE4MjIxNDA2MworOjEwNUE4MDAwMUI4MjIxNDAxRjgyMjE0MDhEODIyMTQwRDk4MjIxNDBFQQorOjEwNUE5MDAwMzE4MzIxNDA2RDgzMjE0MEQxODMyMTQwMDk4NDIxNDBGRAorOjEwNUFBMDAwMTk4NDIxNDA1MTg0MjE0MDYxODQyMTQwNzU4NDIxNDAyMgorOjEwNUFCMDAwOUQ4NDIxNDBBNzg0MjE0MEIxODQyMTQwMTU4NTIxNDA0NworOjEwNUFDMDAwNDU4NTIxNDA1MTg1MjE0MEM1ODUyMTQwQ0Y4NTIxNDAxNAorOjEwNUFEMDAwRDk4NTIxNDBFMzg1MjE0MEVEODUyMTQwRjc4NTIxNDA4RQorOjEwNUFFMDAwMDE4NjIxNDAwQjg2MjE0MDE1ODYyMTQwMDE4OTIxNDBGNQorOjEwNUFGMDAwMUY4NjIxNDAyOTg2MjE0MDMzODYyMTQwM0Q4NjIxNDA1MgorOjEwNUIwMDAwNjU4NjIxNDA2Rjg2MjE0MEQxODYyMTQwREI4NjIxNDA3OQorOjEwNUIxMDAwRTU4NjIxNDBFRjg2MjE0MEY5ODYyMTQwOUQ3NDIxNDA5MQorOjEwNUIyMDAwMDM4NzIxNDA2OTg3MjE0MEI1ODcyMTQwRjk4NzIxNDBCQgorOjEwNUIzMDAwMDk4ODIxNDA5RDc0MjE0MDU1ODgyMTQwNTk4ODIxNDA4MQorOjEwNUI0MDAwNUQ4ODIxNDBCNTg4MjE0MEREODgyMTQwRTk4ODIxNDBEOQorOjEwNUI1MDAwRUQ4ODIxNDBGMTg4MjE0MEY1ODgyMTQwRjk4ODIxNDBENQorOjEwNUI2MDAwRkQ4ODIxNDAyRDg1MjE0MDg5ODUyMTQwOUQ3NDIxNDA1QgorOjEwNUI3MDAwOUQ3NDIxNDAwRDg5MjE0MDlENzQyMTQwRTE3NDIxNDA5NAorOjEwNUI4MDAwOUQ3NDIxNDA5RDc0MjE0MDlENzQyMTQwOUQ3NDIxNDA0RAorOjEwNUI5MDAwOUQ3NDIxNDA5RDc0MjE0MDZCNzgyMTQwRjU3QjIxNDAwQworOjEwNUJBMDAwMzE3QzIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwNUJCMDAwMDAwMDAwMDA1QzAxMTg0MDU4MDExODQwMjRBMzIwNDA1OAorOjEwNUJDMDAwMjRBNzIwNDAwMDAwMDAwMDAwMDAwMDAwNkMwMTE4NDBFNQorOjEwNUJEMDAwNjgwMTE4NDAyNDgzMjA0MDI0QTMyMDQwMDAwMDAwMDBENgorOjEwNUJFMDAwMDAwMDAwMDA3QzAxMTg0MDc4MDExODQwMDAwMDAwMDAwRgorOjEwNUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMwMTE4NDBDMAorOjEwNUMwMDAwODgwMTE4NDAyNEE5MjA0MDI0QUIyMDQwMDAwMDAwMDA1NworOjEwNUMxMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAxMjAwMTgwMDEyMDA0MAorOjEwNUMyMDAwMEMwMDEyMDAxQzAwMTIwMDI0QTgyMDQwQTRBODIwNDA1MAorOjEwNUMzMDAwQTRBODIwNDAyNEE5MjA0MDAwMDAwMDAwRDFBODIxNDBCMQorOjEwNUM0MDAwMkRBQTIxNDAwMDAwMDAwMDg5NzAyMTQwQzlBMTIxNDBGNworOjEwNUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDA0MworOjEwNUM2MDAwNTc4OTIxNDBEMUE4MjE0MEM1MkZGRkZGMDUyMUZGRkYwMworOjEwNUM3MDAwRUYyMEZGRkY1OUE3MjE0MDM0MkUwMDgwNDgyRTAwODBERQorOjEwNUM4MDAwNUMyRTAwODAzMDMzM0EzMTMxM0EzMTMxMDAzMDM3MkZEOQorOjEwNUM5MDAwMzIzMzJGMzAzMTAwMzAzMDMwMzAzMTM1MzYzOTAwNDMzNworOjEwNUNBMDAwNkY3MDc5NzI2OTY3Njg3NDIwMjg2MzI5MjAzMjMwMzBGOAorOjEwNUNCMDAwMzEyMDMzNDM2RjZEMjA0MzZGNzI3MDZGNzI2MTc0Njk2RQorOjEwNUNDMDAwNkY2RTBBMDAwODEwMDAwMzAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNUNEMDAwMDAwMDAwMDA4QzUzRkZGRjI3RjA3REZEMDAwMTAwMDI1MworOjEwNUNFMDAwREEwRTgyMDAwMTQwNjQwNDY0MkQwMDgwRTQyQzAwODAwMAorOjEwNUNGMDAwNjkzRUZGRkZDOTRGRkZGRkQ1MjRGRkZGQzkzQkZGRkZGMAorOjEwNUQwMDAwMjkzQ0ZGRkYxOTFBRkZGRjY1MTFGRkZGQ0M1M0ZGRkY2RQorOjEwNUQxMDAwMjE0MEZGRkY4OTcwMjE0MDQ5NzIyMTQwRDkzRkZGRkY5OAorOjEwNUQyMDAwMjE5QTIxNDA4NTI0RkZGRjY0NTNGRkZGOEM1M0ZGRkYxRQorOjEwNUQzMDAwMDAwMDAwMDBGRkZGMDAwMDgwMzAwMDgwMDAwMDAwMDAzNQorOjEwNUQ0MDAwRkZGRjAwMDAwMDAwMjA0MEIwNTAwMDAwN0IwRTAwMDA2QworOjEwNUQ1MDAwMDA2RTIxNDAwMDAwMDAwMDAwMDAwMDAwRUQ4OTIxNDA5RAorOjEwNUQ2MDAwOEI4OTIxNDBBNThDMjE0MDA1OEQyMTQwQ0Q4RDIxNDA3RQorOjEwNUQ3MDAwOEI4QjIxNDBBOThFMjE0MDE1OEYyMTQwNjk4QjIxNDBCQQorOjEwNUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwNUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwNURBMDAwMDAwMDAwMDA1OUJEMjE0MEMxQkQyMTQwMkRCRTIxNDA1MQorOjEwNURCMDAwMDAyMDBBNEEwQjIzMUIwMkQxMTgyRDIzOUIwMUQzMTg2NAorOjEwNURDMDAwODg2MUQ4NjBEODYzODAzMkM4NjAwODYxNDg2MUQwNjI1OQorOjEwNUREMDAwMDM0OEMwNDY0ODYwODg2MDcwNDcwMDAwNjgwRTAwODAzNQorOjEwNURFMDAwRkUwMzAwMDBGMEI1ODRCMDBDMUMwNTFDMDAyMzAwOTNEQQorOjEwNURGMDAwRkZGN0RFRkY2ODQ5MEIyMzFCMDJDRjE4Nzg2ODI4NDBBNQorOjEwNUUwMDAwMDAyMkY4NjAzQTYxQkE2ODIyNDA3QTYxMEMxQzQxMDlBQworOjEwNUUxMDAwMDNEMjUxMDkwMUQyODAwQTAyRDM2MDQ4MDBGMEMyRjhDRgorOjEwNUUyMDAwMDEyMEY5Njg0OTA5MDNEMjc5Njk0OTA5MDBEMjAwMjBBMworOjEwNUUzMDAwMDAwNjAwMEUwM0YwRDRGQUY4NjgwMDI4NzBEMDAwMjNBMgorOjEwNUU0MDAwMDI5MzAxOTM1NDRBMDEyMzE4NDNGODYwMDAyMEQ1MURBMgorOjEwNUU1MDAwNzkzNTAzOTUwMTI0MDAyMTRGNERGQTY4MjI0MDM5RDA0RAorOjEwNUU2MDAwOEEwMDUyMTg5MjAwNEU0QjlCNUMxRTFDODM0MjA0RDA0OQorOjEwNUU3MDAwNEI0QkQzMTg1Qjc4ODM0MjJDRDE0OTRCRDIxOEQzNzg0MworOjEwNUU4MDAwMDM5REVENkFBQjQyMDJEOTAzOURDMDQ2RUI2MjUzNjhBNQorOjEwNUU5MDAwNUIwODAxRDMwMTIzMDA5Mzg2NDIwQUQxOTU2ODAyOUJENworOjEwNUVBMDAwNUUxQzAyOTY5QjAwM0M0RTlFMTkwQjIzMUIwMkYzMThBRQorOjEwNUVCMDAwOUQ2MTUzNzg4MzQyMEREMUQyNjgwMTlCNUQxQzAxOTU5MQorOjEwNUVDMDAwOUIwMDM1NEQ1RDE5MkQyMzlCMDFFQjE4REE2MDNBNjk3MworOjEwNUVEMDAwMDEzMjNBNjE2NDAwMDEzMTBCMjlCREQzMDEzMDA5MjgzOAorOjEwNUVFMDAwQjhEMzAwMjAwMjlCOTkwMDJCNEE4OTE4MEIyMzFCMDI3MAorOjEwNUVGMDAwQzkxODg4NjEwMTlCOTkwMDg5MTgyRDIzOUIwMUM5MTgzNQorOjEwNUYwMDAwQzg2MDAwOUIwMDJCMENEMTgxMDA4OTE4MEIyMzFCMDI1OQorOjEwNUYxMDAwQzkxOENCNjlDMDQ2OEI2MTAxMzAwQjI4RjREMzA4RTA2NworOjEwNUYyMDAwMDdFMDAzOURFODZBMzAyODAzRDIzMDIwMDM5REMwNDY3NQorOjEwNUYzMDAwRTg2MjE5NEE3ODY5MDAyODJBRDAwMDIxMDEyMzE4NDMxMQorOjEwNUY0MDAwNzg2MTAwMjAwMTI0MDAyMjEzNEU3QjY5MjM0MDEwRDA4OQorOjEwNUY1MDAwOTMwMDlCMTg5QjAwMTI0RDVCMTk5RDc4ODU0MjA4RDFEOAorOjEwNUY2MDAwMUQ2OTBCMUM5QjAwOUUxOTJEMjM5QjAxRjMxOERENjNGQgorOjEwNUY3MDAwMDEzMTY0MDAwMTMyMEIyQUU2RDMwMTMwMDkyOEUxRDM1NAorOjEwNUY4MDAwMDAyMDg5MDAwNDRBODkxODJEMjM5QjAxQzkxOEM4NjM4MQorOjEwNUY5MDAwMDRCMEYwQkMwOEJDMTg0NzY4MEUwMDgwMzA1M0ZGRkYwNworOjEwNUZBMDAwMDAwMTAwODAwMDQ3MDg0NzEwNDcxODQ3Nzg0N0MwNDY1RgorOjEwNUZCMDAwMThDMDlGRTUxQ0ZGMkZFMTc4NDdDMDQ2MTBDMDlGRTU0MQorOjEwNUZDMDAwMUNGRjJGRTE3ODQ3QzA0NjA4QzA5RkU1MUNGRjJGRTE2QQorOjEwNUZEMDAwMzg1MkZGRkY4ODUxRkZGRkQ1QjAyMTQwRjBCNTA0MjBCMworOjEwNUZFMDAwMUE0OTAxMjUwODYwMUE0RkJCMjMxQjAxRjgxODA1NzNENQorOjEwNUZGMDAwMTg0ODQxNkIyQzA1MDAyMDdBNkUxNzRCOEE0MjFERDA0MQorOjEwNjAwMDAwMTk3QjAwMjkxN0QxRDkxREZGMzEzQTMxNDk3ODFFMUM1RgorOjEwNjAxMDAwMDAyOTEwRDFCMDYwMTAyMDcwNjAxMDRBMTA0OUZGRjdCRAorOjEwNjAyMDAwQzNGRjAwMjgwN0QwMzU3MzA0MjNCODY5MTg0M0I4NjE0QgorOjEwNjAzMDAwMjA2MTAwRjAxN0Y4RjBCQzA4QkMxODQ3MTg3MzA0MjM1RgorOjEwNjA0MDAwQjg2OTk4NDNCODYxMjA2MUY1RTcwMDAwMDAwMDAwQjAyRQorOjEwNjA1MDAwNjgwRTAwODAwMDAxMTg0MDI4MDUwMDgwMjA1NUZGRkZEMQorOjEwNjA2MDAwN0Q3MTIxNDBGOEI1MTU0RjM5NkMxNTQ4NDA2RTBDMUFGQQorOjEwNjA3MDAwMTQ0RTcxNjgxNDREQTE0MjA2RDgxNDRBMEE0MzAwOTI4NgorOjEwNjA4MDAwQjk2QjA5MThGQTZCMTFFMDExMjI1MjA1MjI0MzAwOTJGNAorOjEwNjA5MDAwQjk2QjA5MTgwMDIwRkE2QjJCMUNGRkY3OERGRjcwNjg5NQorOjEwNjBBMDAwMDAxQjBBNEEwMjQzMDA5MkI5NkJGQTZCMDAyMDJCMUNCQQorOjEwNjBCMDAwRkZGNzgyRkZGOEJDMDhCQzE4NDcwMDAwN0MyOTAwODA2RAorOjEwNjBDMDAwNjgwRTAwODAyODA1MDA4MDQ0ODAyMDQwMDAwMDM3MDJEMAorOjEwNjBEMDAwRjBCNTJCNEZCODY4Nzk2OEMwMTkyMDMwMjk0QUZGRjcwRQorOjEwNjBFMDAwNjNGRjAxMjBDMDAyMjg0OUMwNDYwODYwQjk2ODM4MUMxNworOjEwNjBGMDAwMjY0RDAwMjQyNjRFRUYxRDc5MzcwMDI5MzFEMTMxNjgxNQorOjEwNjEwMDAwMEE3ODEyMEEwM0QyMDQ3M0YwQkMwOEJDMTg0NzQ5NzgxNQorOjEwNjExMDAwMDAyOTBDRDEwNTFDNDA2ODAwRjAzRUY5MzA2ODAwRjAwMQorOjEwNjEyMDAwNjdGODAwMjgyNkQxMkM3M0ZGRjc1OEZGMjJFMDA5MDFGOQorOjEwNjEzMDAwMDcxQzQxNjAwODFDMTc0QTE3NDlGRkY3MzVGRjAwMjg2NAorOjEwNjE0MDAwMDdEMTNDNzMwNDIzQTg2OTk4NDM5OTA0QTg2MTA4NjFBNgorOjEwNjE1MDAwREFFNzEwMjAwMEYwMjBGOTEwMjBCODYwRkZGNzgyRkY4NgorOjEwNjE2MDAwRDJFNzA1MUM0MDY4MDBGMDE3RjkzMDY4MDBGMDQwRjhFRAorOjEwNjE3MDAwMDAyOEQ4RDAwMjIzRjg2QjE4NDNGODYzQzRFNzAwMDA2NgorOjEwNjE4MDAwMjgwNTAwODBBNTU1RkZGRjAwMDAwMEIwNjgwRTAwODBDNAorOjEwNjE5MDAwRTQwMTAwODAyMDU1RkZGRjdENzEyMTQwOTBCNTAxMjA3MgorOjEwNjFBMDAwNDAwMzEwNDkwMDI3MDg2MDBGNENFMDFERkYzMDNBMzBEMworOjEwNjFCMDAwNDc3MEUwNjk4MDAwMDAxOTAwNjkwMEYwRDdGOEUwNjlENQorOjEwNjFDMDAwMDAyODAxRDBFNzYxMDFFMDAxMjBFMDYxMDc0ODAyMjNENworOjEwNjFEMDAwQzE2QjE5NDNDMTYzMjc3M0ZGRjcwMEZGOTBCQzA4QkM3NAorOjEwNjFFMDAwMTg0NzAwMDAwMDAwMDBCMDI4MDUwMDgwRTgwRTAwODA3RAorOjEwNjFGMDAwODBCNTg0QjAwNzFDNzg4ODZEMjgwM0RCMzgxQzAwRjA1QworOjEwNjIwMDAwRjdGODE3RTA4MDAwMEQ0OTA5NTgzODFDRkZGN0NCRkU1RQorOjEwNjIxMDAwMDAyODBGRDEzOTc4QzkwOTBDRDM2OTQ2MzgxQzAwRjAyMQorOjEwNjIyMDAwQ0ZGODY4NDYwMDIxMDBGMDBCRjgwMDI4MDFEMTAxMjBDQQorOjEwNjIzMDAwMDBFMDAwMjAwNEIwODBCQzA4QkMxODQ3RTgwMTAwODBFMgorOjEwNjI0MDAwRjBCNTgyQjAwMjFDNDE0QkREMURGRjM1M0EzNTJGNzg4OQorOjEwNjI1MDAwMDAyRjAxRDAwMDI3MDBFMDAxMjcyRjcwMkY3OEZCMDBDRQorOjEwNjI2MDAwREIxOTVCMDEzQTRGREMxOTQwNzgwMDAxQzcxRDA5Mzc4MworOjEwNjI3MDAwMDAyMDgzMDBENjU4QzA0NkU2NTAwMTMwMDQyOEY4RDNFOQorOjEwNjI4MDAwMDAyOTBGRDAwMDIyQkIwODAxOTM4MzQyMEJEOTEzMUNCNQorOjEwNjI5MDAwOUIwMENCNTg4NjAwQTM1MTAxOUIwMTMwMDEzMjgzNDIwMQorOjEwNjJBMDAwRjVEODAwRTAxMDI3MkI0ODAyNkQ4MDZFMkE0OTgyNDIwMworOjEwNjJCMDAwMDNEODgyMUFDQjZDOUExQTAwRTAxMjFBQkE0MjA1RDg5NworOjEwNjJDMDAwMjY0ODgxNkIwMTMxODE2MzAxMjAzN0UwQzMxOUNBNkMxNAorOjEwNjJEMDAwOTM0MjA4RDgyMjRBM0E0MzAwOTIwQTFDNDk2QzA5MTg5MgorOjEwNjJFMDAwOTI2QzIzMUMxMkUwMTYxQTAwOTYxQjQ5NDk2QzA5MTg3RgorOjEwNjJGMDAwMTk0ODgyNkMwMzIwMjMxQ0ZGRjc1RUZFQjgxQjE4NEE2NgorOjEwNjMwMDAwMDI0MzAwOTJBMzE5MTQ0ODgyNkM0MTZDMDMyMEZGRjdFQQorOjEwNjMxMDAwNTNGRTAxMjAwRDQ5QzA0NjY4NzA4QTY5OTIwMDUyMThFOAorOjEwNjMyMDAwMTc2MThBNjkwMDJBMDJEMDAwMjc4RjYxMDBFMDg4NjEyNgorOjEwNjMzMDAwMEM0ODAyMjNDMTZCMTk0M0MxNjMwMDIwMDEyNzBBNDk5RAorOjEwNjM0MDAwQzA0NjRGNzMwMkIwRjBCQzA4QkMxODQ3MjgwNTAwODA1NworOjEwNjM1MDAwNTBCQTIwNDA2ODBFMDA4MDdDMjkwMDgwQTA4MjIwNDAzNgorOjEwNjM2MDAwMDAwMDE5MDJFODBFMDA4MDE4MUEwMDgwMDc0OThBNkVBMgorOjEwNjM3MDAwMTAxODA3NEFEMjZDMTMwNDFCMEM4MzQyMDBEODgwMUFGMQorOjEwNjM4MDAwODg2Njg4NkUwMzQ5QzA0NjQ4NjE3MDQ3NjgwRTAwODA4MQorOjEwNjM5MDAwN0MyOTAwODA5MEVFMjA0MDA2NDk0QTZFMTAxODA2NEE3QgorOjEwNjNBMDAwMTI2QzgyNDIwMEQ4ODAxQTQ4NjY0ODZFMDM0OUMwNDY4MworOjEwNjNCMDAwMDg2MTcwNDc2ODBFMDA4MDdDMjkwMDgwOTBFRTIwNDBDNAorOjEwNjNDMDAwMDUyMjBBNjA4Mjg4QzA0NjhBODAwMDIyNEE3MDQwODg3RQorOjEwNjNEMDAwQzA0NjQ4ODBDQTgwOEE2MENBNjA3MDQ3MDUyMjAyNjA1MQorOjEwNjNFMDAwMDAyMjgyODA0MjcwNDE4MEMyODA4MjYwQzI2MDcwNDcxOQorOjEwNjNGMDAwODBCNTg0QjAwNzFDMEU0ODQxNkIwMTMxNDE2MzY5NDY4QQorOjEwNjQwMDAwMzgxQ0ZGRjdEREZGMzg2OEMwNDYwMDkwNDUyMDAwQUIyMAorOjEwNjQxMDAwMTg3MDAxMjdERjgwNjg0NjAwMjFGRkY3MTFGRjAwMjg3MAorOjEwNjQyMDAwMDFEMTM4MUMwMEUwMDAyMDA0QjA4MEJDMDhCQzE4NDczMworOjEwNjQzMDAwQTA4MjIwNDAwMEI1ODRCMEMxODgwOTRBQzA0NjkxODEzRAorOjEwNjQ0MDAwNjk0NkZGRjdCREZGMDEyMDQwMDIwMUFCNTg4MDY4NDY1NgorOjEwNjQ1MDAwMDAyMUZGRjdGNUZFMDEyMDA0QjAwOEJDMTg0NzAwMDAzQQorOjEwNjQ2MDAwRTgwRTAwODAwMEI1RkZGN0MzRkYwOEJDMTg0NzAxMjAwNQorOjEwNjQ3MDAwMDM0OUMwNDYwODcxQTEyMTQ5MDM4ODYwMDAyMDcwNDc4NAorOjEwNjQ4MDAwMjgwRjAwODAwMDIwMDQ0OUMwNDYwODcxRkYyMUExMjI4NgorOjEwNjQ5MDAwNTIwMzAxMzE5MTYwNzA0NzI4MEYwMDgwMDIyMEExMjEzMgorOjEwNjRBMDAwNDkwMzg4NjAwMDIwNzA0NzAxMjA0MDAyQTEyMTQ5MDM3MAorOjEwNjRCMDAwODg2MDAwMjA3MDQ3QzA4OEMwMDZDMDBFQTEyMTQ5MDMzMworOjEwNjRDMDAwNDg2MTAyNDlDMDQ2Qzg2MzAwMjA3MDQ3RTgxQTAwODA0RQorOjEwNjREMDAwODBCNTg0QjAwODQ5MEY2QjY5NDZGRkY3NzFGRkY4MDY3NQorOjEwNjRFMDAwQzAwRTAxQUI1ODgwNjg0NjAwMjFGRkY3QTlGRTAxMjBDRAorOjEwNjRGMDAwMDRCMDgwQkMwOEJDMTg0NzgwMDAxNDQwODBCNTg1QjA0QgorOjEwNjUwMDAwMDcxQzY5NDYzODFDRkZGNzVCRkZGODg4MDRBOTAzRjBGNQorOjEwNjUxMDAwQzlGRjAxQUI1ODgwMDFBODQwODgwMDI4MEZEMDAxQTgwRQorOjEwNjUyMDAwNDA4ODgwMDgwMzM4ODAwODAxMzAwNDNCNTg3MDA0OTg4NAorOjEwNjUzMDAwMDE2OEMwNDYwMjkxNDA2OEMwNDYwMzkwMDVFMDAwQTg4QgorOjEwNjU0MDAwMDA3ODQwMjMxODQzMDBBQjE4NzAwNDk4QzExRDAxMzEzNgorOjEwNjU1MDAwNjg0NkZGRjc3NUZFMDEyMDA1QjA4MEJDMDhCQzE4NDdFRgorOjEwNjU2MDAwOTBCNTg0QjAxNDRGMzk3QjAwMjkyMEQxRjkxREZGMzEzQgorOjEwNjU3MDAwM0EzMTQ5NzgwMDI5MUFEMTEwNDkwNTIyMDA5MjA4MjI5RgorOjEwNjU4MDAwMDBBQjVBODA5ODgwMDYyMDAwQUI1ODcwMDAyNERDODA1NQorOjEwNjU5MDAwMDg2OEMwNDYwMjkwNDg2OEMwNDYwMzkwMDEyMDM4NzNERQorOjEwNjVBMDAwNjg0NjA4MzFGRkY3NENGRTAwMjgwMEQwM0M3MzA0QjA2OQorOjEwNjVCMDAwOTBCQzA4QkMxODQ3MDAwMDI4MDUwMDgwQTQyQTAwODA3MQorOjEwNjVDMDAwOTBCNTg0QjAwNzFDNjk0NjM4MUNGRkY3RjlGRUJBNjgxRAorOjEwNjVEMDAwMEQ0QzBFNDgwMDJBMDVEMTBENDlGRkY3RTRGQzAwMjhCOAorOjEwNjVFMDAwMENEQTA1RTBCOTg4MEI0QkZGRjdERkZDMDAyODA1REE3MQorOjEwNjVGMDAwMDFBQjVDODA2ODQ2MDAyMUZGRjcyMkZFMDAyMDA0QjA1QQorOjEwNjYwMDAwOTBCQzA4QkMxODQ3MDAwMEZGRkYwMDAwMEQ3NjIxNDAzOQorOjEwNjYxMDAwQzFCRDIxNDA1OUJEMjE0MDAwQjVDMDg4MDNGMDJFRkYwNworOjEwNjYyMDAwMDAyMDA4QkMxODQ3MDBCNUZGRjdFMkZFMDhCQzE4NDc3OQorOjEwNjYzMDAwMDBCNUZGRjdEREZFMDhCQzE4NDcwMEI1MDExQzAyMjBCRAorOjEwNjY0MDAwMDBGMDAyRjgwOEJDMTg0N0IwQjVDNkIwMDcxQzA4MUMxQgorOjEwNjY1MDAwNjk0NkZGRjdCNUZFMjE0OEZGRjdBNEZDMDQxQzIwNEE1OQorOjEwNjY2MDAwMDAyMTM4MUNGRkY3QTBGQzAwMjgyN0QwMDRBOTFENEFGMAorOjEwNjY3MDAwMzgxQ0ZGRjc5OUZDMDRBODAwMjMwMTJGMDZEMTBDQUFBRgorOjEwNjY4MDAwMDIzMjAwMjExMzYwMDEzMTEwMjlGQkQzMDE2ODA0Mjk3MworOjEwNjY5MDAwMDREOTg5MDgwMzM5ODkwODAxMzEwMEUwMTkxQzAwQUJDRAorOjEwNjZBMDAwNTk3MDA2QTkwOTc4QzA0NkQ5ODAwMDY4QzA0NjAyOTA5MgorOjEwNjZCMDAwMDc5OEMwNDYwMzkwMDQzMzA4QUQwMkUwNDUyMDAwQUJDNAorOjEwNjZDMDAwMTg3MDA5NDkyMDFDRkZGNzZFRkM2ODQ2MjkxQ0ZGRjc2QgorOjEwNjZEMDAwQjdGRDAxMjA0NkIwQjBCQzA4QkMxODQ3MjQwMkZGRkYzQworOjEwNjZFMDAwNTlCMTIxNDA5REFGMjE0MDNDMDJGRkZGMDBCNTAxMUM4NAorOjEwNjZGMDAwMDIyMDAwRjAxMEY4MDhCQzE4NDcwMEI1MDExQzAxMjA2QQorOjEwNjcwMDAwRkZGN0EyRkYwOEJDMTg0NzAwQjUwMTFDMDEyMDAwRjBFQworOjEwNjcxMDAwMDJGODA4QkMxODQ3RjBCNUM3QjAwNDFDMEYxQzM4MUNBMQorOjEwNjcyMDAwMDFBOUZGRjc0REZFMjE0OEZGRjczQ0ZDMDA5MDc4Nzg2NworOjEwNjczMDAwMDAwMUJBNjgwNDMwRkMyQTI1RDhGRjIzMDkzMzk4NDJBNworOjEwNjc0MDAwMjFEODE5MkMxRkQ4RkQ4OEY4NjhDMDQ2MDU5MEY5MUQ3RQorOjEwNjc1MDAwMDkzMTA2QUIwMDIwN0U3ODAwMkUwRERENDBDOTQwQzMxNAorOjEwNjc2MDAwNDBDOTQwQzM0MEM5NDBDMzQwQzk0MEMzMDEzMDAwMDREMAorOjEwNjc3MDAwMDAwQzdFNzg4NjQyRjFEQzIwMUMwNUE5MkIxQ0ZGRjc1QgorOjEwNjc4MDAwMjFGQzAwMjgwNUQwMDFBODAwNzg0MDIzMTg0MzAxQUI2NAorOjEwNjc5MDAwMTg3MDA3NDkwMDk4RkZGNzA2RkMwMDIxMDFBOEZGRjdEMQorOjEwNjdBMDAwNEZGRDAxMjA0N0IwRjBCQzA4QkMxODQ3MjQwMkZGRkY5MgorOjEwNjdCMDAwM0MwMkZGRkYwMEI1RkZGNzFCRkUwOEJDMTg0N0YwQjUxMQorOjEwNjdDMDAwQzZCMDA3MUNGQzg4MjU0RDY4NjgwMTMwNjk0NjY4NjBDMgorOjEwNjdEMDAwMzgxQ0ZGRjdGNUZEMTAyQzA4RDMwMEE4MDA3ODQwMjNFMworOjEwNjdFMDAwMTg0MzAwQUIxODcwMDIyMEQ4ODAxN0UwNzg3ODgyMDAzOAorOjEwNjdGMDAwRkIxRDA5MzMwMDIwQjk2ODAwMkExNUQ5NDBDQjBGMUNCNgorOjEwNjgwMDAwMDEzMUJFNDIwREQwMDBBQTEyNzg0MDIzMUE0MzAwQUJEQQorOjEwNjgxMDAwMUE3MDA0MjJEQTgwMDI5MDAzOTEwNDMzNjg0NjAwMjE0MgorOjEwNjgyMDAwMTVFMDAxMzA5MDQyRTlEMzAwQUI1QzcwMDI5NDY5NjhENgorOjEwNjgzMDAwQzA0NjAzOTFBMjAwMDAyMDEwMzMwMDJBMDVEOTBGMUM4NgorOjEwNjg0MDAwODBDMzAxMzAwMTMxOTA0MkY5RDM2ODQ2MDRBOUZGRjdCMworOjEwNjg1MDAwRjdGQzAxMjA0NkIwRjBCQzA4QkMxODQ3OUMwMzAwODA0MAorOjEwNjg2MDAwOTBCNDIzNDgwMDY4MDEyMTQyMDkwMEQzMDAyMTAwMjc4OQorOjEwNjg3MDAwM0ExQzQzMEIwMEQyMDIyMjExNDMxRTRBMjAyNEQzNjg0MworOjEwNjg4MDAwMDEyQjJFRDE4MDBBMDBEMjAwMjQwQzQzMjAxQzFCMjM5NAorOjEwNjg5MDAwREIwMUQxMTg4OThCMDkwQjAwRDIwNDI3Mzg0M0QxNkY1MworOjEwNjhBMDAwMDk2ODA5MEEwN0QyRDExRDc5MzEwOTY4MDk2ODA5MEFGRQorOjEwNjhCMDAwMDFEMzA4MjMxODQzRTMyMzFCMDFEMTE4ODk3OTAzMjk0NQorOjEwNjhDMDAwMDJEMUZGMjMwMTMzMTg0MzBCNDkwOTZBMTAyMjRCMEFGNgorOjEwNjhEMDAwMDBEMjAwMjIxMDQzODkwNzg5MEY4OTAxMDg0MzkwQkMyOAorOjEwNjhFMDAwNzA0NzQwMEMwMEQyMDAyNDBDNDMyMDFDRUNFNzAwMDA1MQorOjEwNjhGMDAwMDAwMDEwNDA2ODBFMDA4MEMwMDAxODQwRjBCNTNBNEMwRgorOjEwNjkwMDAwMjAxQzA0RjAwN0ZBMzk0OEUzMjMxQjAxQzcxOEI5NzlBMgorOjEwNjkxMDAwMzc0RUM1MUQ3OTM1MDYyOTYyRDIwMkEzNUI1QzVCMDA0OAorOjEwNjkyMDAwOUY0NDAwMUMwMzBFMUUzNzRFNTUwMTIwQjg3MTAwMjBGNQorOjEwNjkzMDAwQjA2MEZGRjc5NUZGMDUyMzk4NDMwMEYwNkZGODBDRTA3NworOjEwNjk0MDAwRkZGNzhFRkZDMDA4MDZEM0IwNjg0MTFDQjE2MDBBMjg2QgorOjEwNjk1MDAwMDNEOTA0MjAwMEUwMDIyMEI4NzE2NDIyMjAxQzJCRTAzRgorOjEwNjk2MDAwMDYxQ0MwNkY4MDIzMDE2ODE5NDMwMTYwMDMyMEI4NzFDMQorOjEwNjk3MDAwMjAxQzIwNEEwMDIxMDRGMDk5RjlGMDZGMDQyMzAxNjhEQgorOjEwNjk4MDAwOTk0MzAxNjAyODY4MDE2ODE5NDMwMTYwRjBCQzA4QkNBNAorOjEwNjk5MDAwMTg0NzA1MjFCOTcxMjk2ODA0MjMwQTY4OUE0MzBBNjBENworOjEwNjlBMDAwQzA2RjAxNjgxOTQzMDE2MEZGRjc1QUZGMDgyMzE4NDNCRAorOjEwNjlCMDAwMDBGMDM0RjgyMDFDMTA0QTAwMjEwNEYwNzdGOUU1RTdENAorOjEwNjlDMDAwRkZGNzRFRkYwNDIzMTg0MzAwRjAyOEY4REVFNzAwMjAwRAorOjEwNjlEMDAwMjk2ODYwMjMwQTY4OUE0MzBBNjBGRkY3RTNGQUQ1RTc1QgorOjEwNjlFMDAwMDYyMEI4NzFEMkU3MDAwMEE5NzkyMTQwNjgwRTAwODAyNgorOjEwNjlGMDAwOUMwMzAwODAzMDc1MDAwMDEwMjcwMDAwMDBCNTAwMjBDNworOjEwNkEwMDAwMDQ0OUMwNDY4ODcxMDQ0ODAxMjIwMDIxMDRGMDRFRjk2RgorOjEwNkExMDAwMDhCQzE4NDc5ODFDMDA4MEE5NzkyMTQwOTBCNTA3MUMzNAorOjEwNkEyMDAwMzE0ODAwNjg3OTA4MDNEMzEwMjMwMTFDOTk0MzAxRTAyMQorOjEwNkEzMDAwMTAyMTAxNDMyRDRDRTI2ODAxMkEwNUQxMjI3OTAwMkE1OAorOjEwNkE0MDAwMDJEMDAxMjM5QjAyMTk0MzgxNDIwMkQwMDEyMDAwMDU5QworOjEwNkE1MDAwMDE2MEUwNjgwMTI4MjBEMTFCMjNEQjAxRTAxODgwOEI1NgorOjEwNkE2MDAwRjkwODA0RDMwMTIzREIwMjAxMUM5OTQzMDFFMDAxMjE1MQorOjEwNkE3MDAwQzkwMjgxNDIwMkQwMDAyMDAyRjAxQUZCMzgwOTA3RDM3NAorOjEwNkE4MDAwRTA2RjgwMjMwMTY4OTk0MzAxNjBFMDE4MDA2ODAwRTAyRQorOjEwNkE5MDAwRTA2RjgwMjMwMTY4MTk0MzAxNjAxNTQ4MDE2QTc4MDk5NQorOjEwNkFBMDAwMDNEM0ZGMjAwMTMwMDg0MzAzRTBGRjIzMDgxQzAxMzMxOAorOjEwNkFCMDAwOTg0MzgwMDg4MDAwQkEwOTkyMDc5MjBGMTA0Mzg4NDJEOQorOjEwNkFDMDAwMDJEMDBDNDlDMDQ2MDg2MkUxNjgwMTI5MDhEMTc5MEE2MAorOjEwNkFEMDAwMDZEM0ZGMjMwNDMzMTg0MDAzMjgwMUQxRkZGNzhFRkZBQworOjEwNkFFMDAwOTBCQzA4QkMxODQ3MDAwMDAwMDAxMDQwNjgwRTAwODBGMQorOjEwNkFGMDAwQzAwMDE4NDBDMDAwMTgwMDgwQjVGRkY3QjFGRTgwMDk0MworOjEwNkIwMDAwMUJEMjBGNDhFMzIzMUIwMUMxMTg0QTc5MDAyQTE0RDE3NAorOjEwNkIxMDAwMDEyMjRBNzEwMDI3ODAzMDAwNjg2MDIzMDE2ODk5NDM5MAorOjEwNkIyMDAwMDE2MDA4NDgwNkUwMDIyMDAyRjA4Q0ZDMDcyMDAyRjAxOQorOjEwNkIzMDAwNUJGQzM4MUNGRkY3MzZGQUY1RTc4MEJDMDhCQzE4NDc0OQorOjEwNkI0MDAwNjgwRTAwODBGNDAxRkZGRjAwQjU4NEIwNjk0NkZGRjdDRQorOjEwNkI1MDAwMzdGQ0ZGRjc4NUZFMDFBQjU4ODAwODQ4MDA2OEMwNDY0NworOjEwNkI2MDAwMDI5MDA3NDgwMDZBQzA0NjAzOTA2ODQ2MDAyMUZGRjc3QworOjEwNkI3MDAwNjdGQjAxMjAwNEIwMDhCQzE4NDcwMDAwMDAwMDEwNDA2QgorOjEwNkI4MDAwQzAwMDE4NDA4MEI1ODRCMDA3MUM2OTQ2MzgxQ0ZGRjc2OAorOjEwNkI5MDAwMTdGQ0Y4ODhGRkY3NDJGRkZGRjc2MkZFMDFBQjU4ODA1MQorOjEwNkJBMDAwNjg0NjAwMjFGRkY3NENGQjAxMjAwNEIwODBCQzA4QkMwNAorOjEwNkJCMDAwMTg0N0IwQjVDNkIwQzc4ODY5NDZGRkY3MDFGQzAxMjQ4NQorOjEwNkJDMDAwMUE0QjlGNDIwQUQ5MDBBODAwNzg0MDIzMTg0MzAwQUIxMworOjEwNkJEMDAwMTg3MDAyMjBEODgwNjg0NjAwMjEyMEUwMTQ0OEZGRjc5MgorOjEwNkJFMDAwRTFGOTA1MUMxMzRBMzgxQzA0QTlGRkY3RERGOTEyNDkyNQorOjEwNkJGMDAwMjgxQ0ZGRjdEOEY5MDEyRjA2RDEwQ0E5MDAyMDAwMjI4QworOjEwNkMwMDAwMEE2MDAxMzAxMDI4RkJEMzEwMjAwMEFCNTg3MDA0OThBNAorOjEwNkMxMDAwQzA0NjAyOTAwNTk4QzA0NjAzOTA2ODQ2MDZBOUZGRjc1MworOjEwNkMyMDAwMEZGQjIwMUM0NkIwQjBCQzA4QkMxODQ3RkYwMTAwMDA5OQorOjEwNkMzMDAwMjQwMkZGRkY5REFGMjE0MDNDMDJGRkZGRjBCNUM2QjAyQworOjEwNkM0MDAwMDcxQzY5NDYzODFDRkZGN0JCRkJGQzg4Nzg3ODAxMjVEOAorOjEwNkM1MDAwMTAyODAxRDExOTJDMDlEOTAwQTgwMDc4NDAyMzE4NDMyNQorOjEwNkM2MDAwMDBBQjE4NzAwMjIwRDg4MDA0MzMyN0UwQjg2OEMwNDYxMworOjEwNkM3MDAwMDQ5MEY4NjhDMDQ2MDU5MDA2QUFGQjFEMDkzMzAwMjE2MAorOjEwNkM4MDAwNzg3ODAwMjgwREREMDAyMDQwQ0I0MEMyMDEzMDAwMDRBMAorOjEwNkM5MDAwMDAwQzA0MjhGOERCNDgxQzAxMDQwOTBDNzg3ODg4NDJCMQorOjEwNkNBMDAwRjFEQzBCNDhGRkY3N0VGOTA3MUMwQTRBMjAxQzA0QTlGNworOjEwNkNCMDAwRkZGNzdBRjkwODQ5MzgxQ0ZGRjc3NUY5Njg0NjAwMjE5MworOjEwNkNDMDAwRkZGN0JFRkEyODFDNDZCMEYwQkMwOEJDMTg0NzAwMDAwRAorOjEwNkNEMDAwMjQwMkZGRkZDNUFGMjE0MDNDMDJGRkZGRjBCNTg0QjBBNgorOjEwNkNFMDAwMDQxQzAwMjdFNjg4QTI2ODQ3NDkwODc5MDAyODA4RDBENAorOjEwNkNGMDAwMDAyRTAxRDAwMTJFMDFEMTAxMjcwMUUwMDQyRTAwRDE4OAorOjEwNkQwMDAwMDMyNjAxMjU0MTQ4MDUyRTY2RDIwMkEzOUI1RDVCMDA0OAorOjEwNkQxMDAwOUY0NDAwMUMwMzA2MDgwQzEwMDAwNTgwMDAyMzAzRTBCQworOjEwNkQyMDAwMDU4MDA1RTAwMDIzMDM4MDQzODAwNkUwMDAyMzAzODAwNAorOjEwNkQzMDAwNDU4MDAyRTBGRjIzMDEzMzAzODBDQjFENzkzMzlFODkxOAorOjEwNkQ0MDAwMDEyMzVCMDI5RTQyMDJEQkQyMDdEMjBGMDBFMDAxMjI0OAorOjEwNkQ1MDAwNkQyMzVCMDFDOTE4ODk4OEZGMjNFMTMzOTk0MzAxMjMxRgorOjEwNkQ2MDAwMTk0MzA2ODhGRjMzOUU0MjBERDFGRjIwRTEzMDA4NDNDRQorOjEwNkQ3MDAwMDAyQTA0RDEwMTIzOUIwMjk4NDMwMTFDMjBFMDAxMjEzOQorOjEwNkQ4MDAwODkwMjAxNDMxQ0UwMDEyRTBBRDE0MDg4MDEyODA0RDE2OAorOjEwNkQ5MDAwNjAyMzE5NDMwMDJBMTNEMDBDRTAyMDIzMTk0MzBGRTA4RAorOjEwNkRBMDAwMDAyRTBERDE0MDg4MDEyODA4RDFGRjIzODEzMzE5NDNEQgorOjEwNkRCMDAwMDAyQTA1RDAwMTIzOUIwMjE5NDMwMUUwODAyMzE5NDNENworOjEwNkRDMDAwMDQyMDAyRjA3NUY5MDkyMTQ5MDIwMDIwMDJGMDcwRjk0RgorOjEwNkREMDAwMDAyRjAyRDEwMDIwMTJFMEZGRTc2OTQ2MjAxQ0ZGRjdEOAorOjEwNkRFMDAwRUZGQTAwQTgwMDc4NDAyMzE4NDMwMEFCMTg3MDAyMjA4NworOjEwNkRGMDAwRDg4MDY4NDYwMDIxMDQzM0ZGRjcyMkZBMjgxQzA0QjAyQgorOjEwNkUwMDAwRjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwODgxQzAwODA5OQorOjEwNkUxMDAwQzA4ODUxMjE4OTAzMDg2MjAwMjA3MDQ3ODBCNTE2NEY1MQorOjEwNkUyMDAwRjg2ODAxMjgwN0QxMzcyMzlCMDFGODE4NDA4QTgwMjE5MAorOjEwNkUzMDAwMDE0MzFCMjAwN0UwNkQyMzVCMDFGODE4ODA4QjAxMjFDMworOjEwNkU0MDAwNDkwMzAxNDMxMDIwMDJGMDMzRjkwMTIwNzEyMzVCMDE1MworOjEwNkU1MDAwRjkxODA4ODA0ODgwMUIyM0RCMDFGODE4ODA4QjAxMjM3OAorOjEwNkU2MDAwMUIwMzk4NDM0MTIxMDkwMjAxNDMwMDIwMDJGMDIwRjk0RAorOjEwNkU3MDAwMDAyMDgwQkMwOEJDMTg0NzY4MEUwMDgwODBCNTE3NEYwMgorOjEwNkU4MDAwRjg2ODAxMjgwOEQxMzcyMzlCMDFGODE4NDA4QTgwMjMyRAorOjEwNkU5MDAwOTg0MzAxMUMxQjIwMDhFMDZEMjM1QjAxRjgxODgwOEJEMAorOjEwNkVBMDAwMDEyMzVCMDM5ODQzMDExQzEwMjAwMkYwMDFGOUZGMjAyRAorOjEwNkVCMDAwNzEyMzVCMDFGOTE4MDEzMDA4ODAxQjIzREIwMUY4MThFRQorOjEwNkVDMDAwODA4QjQxMjMxQjAyOTg0MzA5MjE0OTAyMDE0MzAwMjA4MgorOjEwNkVEMDAwMDJGMEVFRjgwMDIwODBCQzA4QkMxODQ3NjgwRTAwODA2NQorOjEwNkVFMDAwODBCNTg0QjAwODQ5Q0Y2QTY5NDZGRkY3NjlGQUI4MDVFQQorOjEwNkVGMDAwODAwRDAxQUI1ODgwNjg0NjAwMjFGRkY3QTFGOTAxMjAwMQorOjEwNkYwMDAwMDRCMDgwQkMwOEJDMTg0NzQwMDAxNDQwQzA4ODlGMjNEMAorOjEwNkYxMDAwMTg0MDA1NDlDOTZBMUIyMzVCMDExOTQwMDg0MzAzNDkwRQorOjEwNkYyMDAwQzA0NkM4NjIwMDIwNzA0NzQwMDAxNDQwNDAwMDE0MDA3MgorOjEwNkYzMDAwODBCNTg0QjAwRDQ5MEY2QTAxMkYwMUQxRkYwMzA3RTAyRQorOjEwNkY0MDAwMDIyRjAxRDEzRjAzMDNFMDAwMkYwMUQxMDEyN0ZGMDJFRgorOjEwNkY1MDAwNjk0NkZGRjczNUZBMDFBQjVGODA2ODQ2MDAyMUZGRjcwRAorOjEwNkY2MDAwNkZGOTAxMjAwNEIwODBCQzA4QkMxODQ3MDAyMDE0NDAxMQorOjEwNkY3MDAwQzI4OEExMjA0MDAzMDAyMTAxMjM1QjAzOUE0MjAxRDE3MgorOjEwNkY4MDAwMDIyMjA0RTAwMTIzREIwMzlBNDIwMkQxMDEyMjAyNjJDMQorOjEwNkY5MDAwMDBFMDAxNjIwODFDNzA0NzkwQjU4NEIwMDcxQzAyRjA0NQorOjEwNkZBMDAwOUZGODY5NDYwNDFDMzgxQ0ZGRjcwQUZBMDFBQjVDODBBNQorOjEwNkZCMDAwMDk0RkY4NkRDMDQ2MDI5MDY4NDYwMDIxRkZGNzQwRjk3RQorOjEwNkZDMDAwRjg2REMwMDdDMDBGMDU0OUMwNDZDODYyMDEyMDA0QjA3MworOjEwNkZEMDAwOTBCQzA4QkMxODQ3MDAwMEE0MkEwMDgwNjgxQzAwODBGMAorOjEwNkZFMDAwQzA4ODAyNDlDMDQ2NDg2MTAwMjA3MDQ3ODAwMDE0MDBGNAorOjEwNkZGMDAwMDBCNTg0QjA2OTQ2RkZGN0UzRjkwNjQ4QzA2ODAxQUIwNQorOjEwNzAwMDAwNTg4MDY4NDYwMDIxRkZGNzFCRjkwMTIwMDRCMDA4QkMzNgorOjEwNzAxMDAwMTg0NzAwMDA4MDAwMTQ0MEMwODgwMjQ5QzA0NkM4NjA3QworOjEwNzAyMDAwMDAyMDcwNDc4MDAwMTQwMDgwQjU4NEIwNjk0Njg3NjhFRQorOjEwNzAzMDAwRkZGN0M2RjkyMDJGMDdEMjc4MDAwQzQ5NDAxODFCMjMxMAorOjEwNzA0MDAwREIwMUMwMTg4MDhCMDZFMDAwQTgwMDc4NDAyMzE4NDNCRAorOjEwNzA1MDAwMDBBQjE4NzAwMjIwMDFBQjU4ODA2ODQ2MDAyMUZGRjc5MgorOjEwNzA2MDAwRUZGODAxMjAwNEIwODBCQzA4QkMxODQ3NjgwRTAwODAwRgorOjEwNzA3MDAwMDBCNTg0QjBDMTg4ODI2ODIwMkEwNEQyMTAxQzAyRjBCNgorOjEwNzA4MDAwMTdGODAwMjAxMEUwNjk0NkZGRjc5QUY5MDBBODAwNzg4OQorOjEwNzA5MDAwNDAyMzE4NDMwMEFCMTg3MDAyMjBEODgwNjg0NjAwMjFCNgorOjEwNzBBMDAwMDQzM0ZGRjdDREY4MDEyMDA0QjAwOEJDMTg0NzkwQjVCMQorOjEwNzBCMDAwODRCMEM3ODg2OTQ2RkZGNzgzRjkxMDQ4RkVGNzcyRkY2RQorOjEwNzBDMDAwMDIyMDM5MUMwMkYwRjJGRjAwMjgwNkQwMDIyMDM5MUNGMQorOjEwNzBEMDAwMDJGMDM2RkYwMUFCNTg4MDAyRTA0NTIwMDBBQjE4NzA4QgorOjEwNzBFMDAwMDc0OTIwMUNGRUY3NUZGRjY4NDYwMDIxRkZGN0E4Rjg1QworOjEwNzBGMDAwMDEyMDA0QjA5MEJDMDhCQzE4NDcwMDAwMjQwMkZGRkYyOAorOjEwNzEwMDAwM0MwMkZGRkZCMEI1ODRCMEM3ODg2OTQ2ODQ2OEZGRjdDQQorOjEwNzExMDAwNTdGOTEwNDhGRUY3NDZGRjBGNEEwMjIwMzkxQ0ZFRjdDOAorOjEwNzEyMDAwNDNGRjAwMjgwNkQwMEQ0QjAyMjAzOTFDMjIxQ0ZFRjcxRAorOjEwNzEzMDAwM0NGRjAyRTA0NTIwMDBBQjE4NzAwOTQ5MjgxQ0ZFRjcwRgorOjEwNzE0MDAwMzJGRjY4NDYwMDIxRkZGNzdCRjgwMTIwMDRCMEIwQkM5NQorOjEwNzE1MDAwMDhCQzE4NDcyNDAyRkZGRjU5QjEyMTQwNTlCMDIxNDAxMworOjEwNzE2MDAwM0MwMkZGRkYwMEI1RkZGNzQzRjkwOEJDMTg0NzAwMjBCOQorOjEwNzE3MDAwNzA0NzgwQjRDMjg4MTk0QkExMjE0OTAzMDAyQTAzRDE2QQorOjEwNzE4MDAwMTg2QjEwMjM5ODQzMDRFMDAxMkEwNEQxMTg2QjEwMjNENAorOjEwNzE5MDAwMTg0MzQ4NjExRkUwMDIyQTFERDFDMjY4ODc2ODAwMjA5OQorOjEwNzFBMDAwM0IxQ0MzNDBEQjA3REIwRjlCMDIwMzQzMEI2MTAxMzAzOQorOjEwNzFCMDAwMDAwNDAwMEMyMDI4RjNEQjAwMjAxMzFDQzM0MERCMDc3NQorOjEwNzFDMDAwREIwRjlCMDJDNzFEMTkzNzNCNDMwQjYxMDEzMDAwMDRFNQorOjEwNzFEMDAwMDAwQzIwMjhGMURCMDAyMDgwQkM3MDQ3ODAwMDE0NDBBOAorOjEwNzFFMDAwODBCNEMyODg4MTY4MTAwMjEyMEExMDQzMDIwNDEyMEM5MworOjEwNzFGMDAwMEM0OEMwNDYwMjYwMEM0QkMwNDYxQTgwMEEwQzE3MDJBRAorOjEwNzIwMDAwMTIxMjNBNDMxMjA0MTIwQzQyNjA1QTgwMDkwNDA5MEMwQgorOjEwNzIxMDAwMEEwMjA5MEExMTQzMDkwNDA5MEM4MTYwOTk4MDAwMjBCRgorOjEwNzIyMDAwODBCQzcwNDc0MDAwMTQwMDI4MUIwMDgwQjBCNTg0QjBCQgorOjEwNzIzMDAwMTM0OTBBNjgxMjA0MTIwQzEzMDIxMjEyMTM0MzRBNjgwQgorOjEwNzI0MDAwMTIwNDEyMEMxRjFDMTMwMjEyMTIxMzQzODk2ODA5MDQ0MgorOjEwNzI1MDAwMDkwQzBBMDIwOTEyMTE0MzBDMDQyNDBDNjk0NjFEMUM3NgorOjEwNzI2MDAwRkZGN0FFRjgwMUFCNUY4MDI4MDQyMDQzMDI5MDY4NDYyOAorOjEwNzI3MDAwMDAyMUZFRjdFNUZGMDEyMDA0QjBCMEJDMDhCQzE4NDdCMAorOjEwNzI4MDAwNDAwMDE0NDBDMTg4ODI2ODA4MDIwOTBBMDg0MzAwMDRDQgorOjEwNzI5MDAwMDAwQzBBNDlDMDQ2Qzg2MDEwMEMwMzAyMDAxMjE4NDNEMworOjEwNzJBMDAwMDAwNDAwMEMwODYxMTAwNDAwMEMwMjAyMDAwQTEwNDNFNAorOjEwNzJCMDAwMDAwNDAwMEM0ODYxMDAyMDcwNDcwMDAwNDAwMDE0MDBFQQorOjEwNzJDMDAwOTBCNTg0QjAxNjRCRDk2ODA5MDQwOTBDMEEwMjA5MTI1QQorOjEwNzJEMDAwMTE0MzFBNjkxMjA0MTIwQzE3MDIxMjEyM0E0MzVCNjkyNQorOjEwNzJFMDAwMUIwNDFCMEMxRjAyMUIxMjNCNDMxRjA0M0YwQzA1MjNGNgorOjEwNzJGMDAwMDA5Mzg0ODgwMUFCMUM4MDAwMjQwNDNCNUM3MDQwODhCMAorOjEwNzMwMDAwMDBBQjU4ODBEOTgwMTAwNDM4NDMwMjkwMDM5NDY4NDYzQgorOjEwNzMxMDAwMDAyMUZFRjc5NUZGMDEyMDA0QjA5MEJDMDhCQzE4NDc3RgorOjEwNzMyMDAwNDAwMDE0NDAwMEI1ODRCMDBCNDk4QTZBMDUyMTAwOTFFMQorOjEwNzMzMDAwODE4ODAxQUIxOTgwMDAyMTA0M0I1OTcwNDA4ODAwQUI2MworOjEwNzM0MDAwNTg4MERBODAwMjkxMDM5MTY4NDZGRUY3NzlGRjAxMjBBOAorOjEwNzM1MDAwMDRCMDA4QkMxODQ3MDAwMEMwMDAxNDQwQzA4ODAyNDlBRgorOjEwNzM2MDAwQzA0Njg4NjIwMDIwNzA0N0MwMDAxNDAwMDBCNTg0QjA5OQorOjEwNzM3MDAwMEI0OTBBNkEwNTIxMDA5MTgxODgwMUFCMTk4MDAwMjExRgorOjEwNzM4MDAwMDQzQjU5NzA0MDg4MDBBQjU4ODBEQTgwMDI5MTAzOTEyOQorOjEwNzM5MDAwNjg0NkZFRjc1NUZGMDEyMDA0QjAwOEJDMTg0NzAwMDBGRQorOjEwNzNBMDAwQzAwMDE0NDBDMDg4MDI0OUMwNDYwODYyMDAyMDcwNDdFRgorOjEwNzNCMDAwQzAwMDE0MDAwMEI1QzA4ODAyNDlGRUY3RjRGRDAwMjBBQgorOjEwNzNDMDAwMDhCQzE4NDc3NTAyRkZGRjAwQjU4NEIwNjk0NkZFRjc5OAorOjEwNzNEMDAwRjdGRjA2NDgwMDZCMDFBQjU4ODA2ODQ2MDAyMUZFRjdCNgorOjEwNzNFMDAwMkZGRjAxMjAwNEIwMDhCQzE4NDcwMDAwNjgwRTAwODA4MQorOjEwNzNGMDAwMDBCNUZFRjdGREZGMDhCQzE4NDcwMEI1RkVGN0Y4RkYyMworOjEwNzQwMDAwMDhCQzE4NDcwMEI1RkVGN0YzRkYwOEJDMTg0NzgwQjU2NQorOjEwNzQxMDAwMDcxQzEwNDhGRUY3QzZGRDAxMjA0MDAyQTEyMTQ5MDNDOAorOjEwNzQyMDAwODg2MDAwMjEwQzQ4QzA0NjAxNzEwQzQ4MDI2ODUyMEM2QgorOjEwNzQzMDAwMDVEMjAyNjgxMjBDMDZEMTAwNjg4MDBBMDNEMzA4NDhGRQorOjEwNzQ0MDAwQzA0NkM3NjAwMkUwMDc0OEMwNDYwNzY0MDgxQzgwQkMwRAorOjEwNzQ1MDAwMDhCQzE4NDdENTk0MjE0MDI4MEYwMDgwMDAwMDEwNDAzOAorOjEwNzQ2MDAwNDAwMTE4MDAwMDAwMDA4MDAwQjUwMTIwMDM0OUMwNDYxQgorOjEwNzQ3MDAwMDg3MjEyMjBGRkY3Q0JGRjA4QkMxODQ3ODgxQzAwODA1OQorOjEwNzQ4MDAwMDBCNTAxMjAwMzQ5QzA0NjQ4NzIxNTIwRkZGN0JGRkYzMQorOjEwNzQ5MDAwMDhCQzE4NDc4ODFDMDA4MDAwQjUwMUYwRjlGRjAxMjBFNgorOjEwNzRBMDAwMDhCQzE4NDc4MEI1ODRCMDA3MUNGODg4MDJGMEZFRjhDNQorOjEwNzRCMDAwMDAyODBDRDE2OTQ2MzgxQ0ZFRjc4MkZGMDY0ODAxQUI1NAorOjEwNzRDMDAwNTg4MDY4NDYwMDIxRkVGN0JCRkUwMTIwMDBFMDAwMjA0NgorOjEwNzREMDAwMDRCMDgwQkMwOEJDMTg0N0ZGRkYwMDAwODBCNTg0QjAzMgorOjEwNzRFMDAwNjk0NkZFRjc2REZGMDEyNzAxQUI1RjgwMDk0ODgxODk3RQorOjEwNzRGMDAwMDkwNEMyODkxMTQzMDI5MTgxODgwOTA0QzA4ODA4NDNBNAorOjEwNzUwMDAwMDM5MDY4NDYwMDIxRkVGNzlCRkUzODFDMDRCMDgwQkM0NworOjEwNzUxMDAwMDhCQzE4NDc0QzJBMDA4MDAwQjVGRUY3NjlGRjA4QkM3QworOjEwNzUyMDAwMTg0NzAwQjVGRUY3NjRGRjA4QkMxODQ3MDBCNUZFRjcyMgorOjEwNzUzMDAwNUZGRjA4QkMxODQ3MDBCNUZFRjc1QUZGMDhCQzE4NDdBNAorOjEwNzU0MDAwMDBCNUZFRjc1NUZGMDhCQzE4NDcwMEI1RkVGNzUwRkYyMQorOjEwNzU1MDAwMDhCQzE4NDcwMEI1RkVGNzRCRkYwOEJDMTg0NzAwQjUzQworOjEwNzU2MDAwRkVGNzQ2RkYwOEJDMTg0NzAwQjVGRUY3NDFGRjA4QkMxMAorOjEwNzU3MDAwMTg0NzAwQjVGRUY3M0NGRjA4QkMxODQ3MDBCNUZFRjdGQQorOjEwNzU4MDAwMzdGRjA4QkMxODQ3MDBCNUZFRjczMkZGMDhCQzE4NDdBNAorOjEwNzU5MDAwMDBCNThDQjAwOEE5RkVGNzEzRkY2OTQ2MDhBODAyRjBGMQorOjEwNzVBMDAwQTlGRjAyMjAwOEFCNTg3MDY5NDYwOEE4RkVGNzQ4RkVGQworOjEwNzVCMDAwMDEyMDBDQjAwOEJDMTg0NzAwQjVGRUY3MTlGRjA4QkM0NQorOjEwNzVDMDAwMTg0NzkwQjU4NEIwMDcxQzY5NDYzODFDRkVGN0Y4RkVEMgorOjEwNzVEMDAwRkE4ODEyNDkwMTI0QzgxRDg5MzAwMDJBMEZEMDA0NzA4RQorOjEwNzVFMDAwNDQ3MEI4NjgwMDBDODAzMUM4ODJCODY4QzA0NjA4ODMwRgorOjEwNzVGMDAwRjg2ODAwMEM0ODgzRjg2OEMwNDY4ODgzMDJFMDAwMjFFMAorOjEwNzYwMDAwMDE3MDQxNzAwNjQ4MDFBQjU4ODA2ODQ2MDAyMUZFRjdDMgorOjEwNzYxMDAwMTdGRTIwMUMwNEIwOTBCQzA4QkMxODQ3NjgwRTAwODAwMAorOjEwNzYyMDAwRkZGRjAwMDAwMEI1RkVGN0UzRkUwOEJDMTg0NzAwQjVGOQorOjEwNzYzMDAwRkVGN0RFRkUwOEJDMTg0NzAwQjVGRUY3RDlGRTA4QkMxMQorOjEwNzY0MDAwMTg0NzAwQjVGRUY3RDRGRTA4QkMxODQ3MDBCNUZFRjc5MgorOjEwNzY1MDAwQ0ZGRTA4QkMxODQ3OTBCNTg0QjAwNzFDNjk0NjM4MUM5QgorOjEwNzY2MDAwRkVGN0FFRkVGODg4MDMyNEU0MDQwNDQzMDMyM0RCMDQ5RQorOjEwNzY3MDAwOUM0MjAyRDMwRjRCOUM0MjA2RDkwRjQ4MDFBQjU4ODA2NQorOjEwNzY4MDAwNjg0NjAwMjFGRUY3RENGRDAxMjA4MDA3MjA0MzAwNjhFQQorOjEwNzY5MDAwMDAyMTAwQUI1OTcwRkE4OEMwNDZEQTgwMDI5MDAzOTE0RAorOjEwNzZBMDAwNjg0NjA0MzNGRUY3Q0NGRDAxMjAwNEIwOTBCQzA4QkM1MgorOjEwNzZCMDAwMTg0NzAwMDBFMDAwMTgwMEZGRkYwMDAwODBCNTg0QjAwQworOjEwNzZDMDAwMDcxQzY5NDYzODFDRkVGNzdCRkVGODg4MDMyM0RCMDRBMQorOjEwNzZEMDAwMTg0Mzk4NDIwMkQzMEE0Qjk4NDIwOEQ5MDk0ODAxQUI5MworOjEwNzZFMDAwNTg4MDY4NDYwMDIxRkVGN0FCRkQwMTIwMDNFMEI5NjgzMQorOjEwNzZGMDAwQzA0NjAxNjAwMDIwMDRCMDgwQkMwOEJDMTg0NzAwMDBGMAorOjEwNzcwMDAwRTAwMDE4MDBGRkZGMDAwMDgwQjU4NkIwMDJBOUZFRjc3OAorOjEwNzcxMDAwNTdGRTAxMjcwMkFCNUY3MDAwMjBEODgwMEE0ODQxNjhGRAorOjEwNzcyMDAwQzA0NjA0OTE4MTY4QzA0NjA1OTFDMTY4QzA0NjAwOTE3OQorOjEwNzczMDAwNDA2OUMwNDYwMTkwNjk0NjAyQThGRUY3ODFGRDM4MUNFOQorOjEwNzc0MDAwMDZCMDgwQkMwOEJDMTg0NzY4MTkwMDgwMDBCNUMxNjg0NQorOjEwNzc1MDAwODA2OEZFRjc0N0ZCMDAyMDA4QkMxODQ3MDAyMDcwNDdGMAorOjEwNzc2MDAwOTBCNTg0QjAwNDFDMEYxQzY4NDY1MDIxRkVGNzM2RkUwRAorOjEwNzc3MDAwMDFBQjVDODAwMjk3Njg0NjAwMjFGRUY3NjFGRDA0QjAxMgorOjEwNzc4MDAwOTBCQzA4QkMxODQ3ODBCNTg0QjAwNzFDNjg0NjUxMjFERQorOjEwNzc5MDAwRkVGNzI0RkUwMUFCNUY4MDY4NDYwMDIxRkVGNzUwRkQzNgorOjEwNzdBMDAwMDRCMDgwQkMwOEJDMTg0NzAwMjA3MDQ3MDAyMDcwNDcxOAorOjEwNzdCMDAwOTBCNTg0QjAwMDI3MTI0OTA5NjgxMjRBMTI2QjEwMjM1MQorOjEwNzdDMDAwMUE0MDAxMjQwMDJBMDBEMDAxMjc4QTBDMDNEMzNBMDQ2RQorOjEwNzdEMDAwMTIwQzAyMjcxNzQzQzkwQzAzRDMzOTA0MDkwQzA0MjdFMAorOjEwNzdFMDAwMEY0MzY5NDZGRUY3RUNGRDAxQUI1RjgwNjg0NjAwMjE2MAorOjEwNzdGMDAwRkVGNzI2RkQyMDFDMDRCMDkwQkMwOEJDMTg0NzAwMDAxMgorOjEwNzgwMDAwMDAwMDEwNDBDMDAwMTg0MDAwQjU4NEIwNjk0NkZFRjc4MworOjEwNzgxMDAwRDdGRDA2NDhDMDZEMDFBQjU4ODA2ODQ2MDAyMUZFRjdEMQorOjEwNzgyMDAwMEZGRDAxMjAwNEIwMDhCQzE4NDcwMDAwQTQyQTAwODAwNgorOjEwNzgzMDAwMDBCNUZFRjdEREZEMDhCQzE4NDc3MDQ3MDAyMDcwNDcxMworOjEwNzg0MDAwMDAyMDcwNDcwMDIwNzA0NzAwMjA3MDQ3MDAyMDcwNDdEQworOjEwNzg1MDAwMDAyMDcwNDcwMEI1RkVGN0NCRkQwOEJDMTg0NzAwMDBCQworOjEwNzg2MDAwODBCNTg1QjAwMUE5RkVGN0FCRkQwMDIwMDFBQjU4NzBEMworOjEwNzg3MDAwMEM0OUM5NjgwMTI3MDEyOTAyRDEwMzk3MDQ5NzAxRTA0NworOjEwNzg4MDAwMDM5NzA0OTA2ODQ2MDFGMDMzRkQwMkFCMDA5OEMwNDZCMAorOjEwNzg5MDAwNTg4MDAwMjEwMUE4RkVGN0QzRkMzODFDMDVCMDgwQkMzRAorOjEwNzhBMDAwMDhCQzE4NDc2ODBFMDA4MDcwNDcwNDQ5MDAyMDAwMjI3OQorOjEwNzhCMDAwMEE3MDAxMzAwMTMxNjgyOEZBRDM3MDQ3QTA4MjIwNDA1NQorOjEwNzhDMDAwMDAyMjg4NDIwM0QzNDAxQTAxMzI4ODQyRkJEMjEwMUNBNgorOjEwNzhEMDAwNzA0Nzg4NDIwMkQzNDAxQTg4NDJGQ0QyNzA0NzkwQjQ2NQorOjEwNzhFMDAwMDExQ0ZGMjcwNDI5MjdEQTAwMjAxNDRBNDMwMDFCMTgzMworOjEwNzhGMDAwREIwMEQ0NTg2MzBDMUFEMjRCMDA1OTE4QzkwMDU3NThGMgorOjEwNzkwMDAwNDMwMDFCMThEQjAwRDc1MDg5MTg5QTE4NEY2OEMwNDZFRgorOjEwNzkxMDAwNTc2MDhCNjhDMDQ2OTM2MDBCNjlDMDQ2MTM2MTRCNjkyMgorOjEwNzkyMDAwQzA0NjUzNjFDOTY4QzA0NkQxNjA5MEJDNzA0NzAxMzAwMQorOjEwNzkzMDAwMDAwNjAwMEUwNDI4RDlEQjM4MUNGNkU3NDBBQjIwNDBENworOjEwNzk0MDAwRjdCNUM0QjAwNDFDMDAyMDQ2OUExMTIxMTE0MDZFRDAzNgorOjEwNzk1MDAwMDAyNzc5MDBDOTE5QzkwMDU3NEE1MTU4NDkwQzAzRDI2OAorOjEwNzk2MDAwMDEzMDAwMDYwMDBFMDRFMDc5MUMwRjA2M0YwRTA0MkZDNAorOjEwNzk3MDAwRUZEQjAwMjg1QkQwMDAyNjAwMjIwMDkyNDAyMzAwMjE4QworOjEwNzk4MDAwMDAyMDAyQUEwMEYwODhGQTA0QTkwMDIwODIwMDhBNTg4OAorOjEwNzk5MDAwMTIwNjEyMEVBMjQyMDNEMTcyMUMxNjA2MzYwRTA0RTAyNQorOjEwNzlBMDAwMDEzMDAwMDYwMDBFMTAyOEYwREIwMDJFM0REMDA0MkMyNAorOjEwNzlCMDAwM0VEMTgwMDAwODU4NDAwMTgwMEQwMDIyMDA5MjEwMjMyMworOjEwNzlDMDAwMDAyMTAyQUEwMEYwNjhGQTAwMjEwMTkxMDJBODA1OTk5RAorOjEwNzlEMDAwNDkwQzg5MDUyOUQwQzE2ODBBMDYxMjBFNDU5QjlBNDJCNgorOjEwNzlFMDAwMTFEMUMwNjg0MDAxODYwRDAwMjIwMDkyMEMyMzAwMjFCNQorOjEwNzlGMDAwMzAxQzAyQUEwMEYwNTBGQTAxOTkwMjlENDgxQzAxMDZCMQorOjEwN0EwMDAwMDkwRTAxOTEwRUUwNDgwMTg2MEQwMDIyMDA5MjEwMjMxQworOjEwN0ExMDAwMDAyMTMwMUMwMkFBMDBGMDNGRkEwMkE4MDU5OTQ5MEM4NworOjEwN0EyMDAwODkwNUQ4RDEwMTk5MDAyOTBGRDFGRjIwM0RFMDQwRTAyMAorOjEwN0EzMDAwODAwMDA4NTg0MDAxODYwRDAwMjIwMDkyMEMyMzAwMjE4RQorOjEwN0E0MDAwMzAxQzAyQUEwMEYwMjhGQTAyOUQwMTIwMDAwNDQ2OUE4OAorOjEwN0E1MDAwMTA0Mzc5MDBDOTE5QzkwMDE3NEFDMDQ2NTA1MDMwMUM1QworOjEwN0E2MDAwOEUxODcwNjAxMDIwMDQyQzAwRDAwQzIwMDQxQ0IwNjAxNAorOjEwN0E3MDAwMDAyMDIwMjE0NjlBMTE0MDIwMjkwMEQwMjgxQzMwNjE4NgorOjEwN0E4MDAwMjgxOUZGMjFGRjMwMDgzMDA5MzFGRkY3MTlGRjQzMDFBMgorOjEwN0E5MDAwMTgxOEMwMDAwMDFCNzA2MTAwMjA1MDIxNDY5QTExNDA0OAorOjEwN0FBMDAwNTAyOTAwRDEyODFDRjA2MDM4MUM0N0IwRjBCQzA4QkMzRAorOjEwN0FCMDAwMTg0N0ZGMjBGOUU3MDAwMDQwQUIyMDQwODBCNDAwMjNDNgorOjEwN0FDMDAwMDAyMjAwMjkwNkQ5ODc1QzdCNDAxQjA2MUIwRTAxMzI3MQorOjEwN0FEMDAwOEE0MkY4RDNEODQzMDAwNjAwMEU4MEJDNzA0N0YwQjU0OAorOjEwN0FFMDAwQzZCMDA0MjgwN0RBNDEwMDA5MThDOTAwNDU5MTQxNEE4NworOjEwN0FGMDAwNTE1ODRCMEMwMkQyMDAyMEMwNDM3NkUwMDEyMzVCMDRCNgorOjEwN0IwMDAwMTk0MDQzMDAxODE4QzAwMDNBNEExNDE4MDAyOTYxRDBERgorOjEwN0IxMDAwMDAyMTAyOTEyMDY5QTE2ODQ1MTgzMEQwRkYyMTY4MUUxQworOjEwN0IyMDAwMDkzMUZGRjdDREZFNjE2ODQwMTgwMTkwMDE5ODgxNDI0QworOjEwN0IzMDAwMDJEMUE2NjhBRjFCMDlFMDAwMjZGRjIxMjgxQzA5MzFFRAorOjEwN0I0MDAwRkZGN0M3RkUwNzFDMDFEMUZGMjcwOTM3MDAyMjAwOTI2QgorOjEwN0I1MDAwMDE5ODMxMUMwM0FBM0IxQzAwRjA5RUY5MDNBODM5MUNCNAorOjEwN0I2MDAwRkZGN0FDRkZDMDQzMDI5OTQ4NDAwMTA2MDkwRTAyOTE5RAorOjEwN0I3MDAwRUQxQkEwNjhBODQyMDBEMTAwMjUwMDJEQ0VEODAyOTlBNworOjEwN0I4MDAwQ0Y0MzAwMjIwMDkyMEMyMzAwMjE2MDY4MDNBQTAwRjA3QQorOjEwN0I5MDAwODNGOTIwNjlDMDQ2MDM5MDA1OTgwMDBBMDAwMjM5MDY1RgorOjEwN0JBMDAwMDkwRTA4NDMwNTkwRkYyMzFCMDI5ODQzMDU5MDBDMjEwMgorOjEwN0JCMDAwMDNBOEZGRjc4M0ZGRkYyMzFCMDIwNTk5OTk0MzAwMDZFMworOjEwN0JDMDAwMDAwRTAwMDIwODQzMDU5MDBDMjMwMDIxNjA2ODAzQUEwMAorOjEwN0JEMDAwMDBGMENBRjkwMDIwNDU5OTA2NEFDMDQ2NTA1MEMxNDNGQQorOjEwN0JFMDAwNjE2MEExNjBFMTYwMjE2MTYxNjE0NkIwRjBCQzA4QkNFOAorOjEwN0JGMDAwMTg0NzAwMDA0MEFCMjA0MEIwQjQ0QzQyMDAyOTAwREJFNQorOjEwN0MwMDAwMEMxQzAwMjdGRjQzMDQyODIxREExMjRENDMwMDE4MThFQQorOjEwN0MxMDAwQzAwMDQwMTkwMTJBMDVEMDAyMkEwOUQwMDMyQTE2RDEzMgorOjEwN0MyMDAwMDE2OTBCRTAwMDI5MTJEQjAyNjk4QTQyMEZEMzA1RTBFQgorOjEwN0MzMDAwMDAyOTA3REFDMTY4QTE0MjA5RDMwOTFCQzE2MEMwNjhFNQorOjEwN0M0MDAwQjBCQzcwNDdDMTY4MDkxOTAyNjk5MTQyRjZEOTM4MUM2NQorOjEwN0M1MDAwRjZFNzAwMDA0MEFCMjA0MEYwQjU4NEIwMTcxQzBEMUNDNworOjEwN0M2MDAwMDAyMTAyOTE0MjAwMTIxOEQyMDAyQzQ5OEI1ODFCMDZBOQorOjEwN0M3MDAwMUIwRTAxOTMwMDIzREI0MzA0MjgwMkRBMDE5ODQwMDgxRAorOjEwN0M4MDAwMDFEMjE4MUM0NkUwNTQxOEUwNjhDMjE5MjE2OThBNDJFMgorOjEwN0M5MDAwMDBEOTBGMUEwMDJGM0NEOUEwNjhFMTY4NDAxOEZGMjFENQorOjEwN0NBMDAwMDkzMUZGRjcwREZFNjE2ODQ2MThBMDY4RTE2ODQwMThDOQorOjEwN0NCMDAwRkYyMTA5MzFGRkY3MERGRUMyMTlGRjIxMDkzMThBNDI2OAorOjEwN0NDMDAwMTREOTAxOUFDMDQ2MDA5MjBCMUEwMzkzMDExQzMwMUM3MAorOjEwN0NEMDAwMkExQzAwRjBFMUY4RTA2ODAzOUJDMDE4RTA2MDAzOUJGOQorOjEwN0NFMDAwNUQxOUZGMUEwMjk4MTgxODAyOTAxMEUwMDE5QUMwNDYxOAorOjEwN0NGMDAwMDA5MjAxMUMzMDFDMkExQzNCMUMwMEYwQ0RGOEUwNjhFRgorOjEwN0QwMDAwQzAxOUVEMTlFMDYwMDI5OEMwMTkwMjkwMDAyNzAwMkZGOQorOjEwN0QxMDAwQzJEODAyOTgwNEIwRjBCQzA4QkMxODQ3NDBBQjIwNDA2MQorOjEwN0QyMDAwRjBCNTgzQjAxNzFDMEQxQzAwMjEwMTkxNDIwMDEyMTgwMAorOjEwN0QzMDAwRDIwMDAyOTIzMDQ5OEE1ODEyMDYxMjBFMDAyNEU0NDNGRgorOjEwN0Q0MDAwMDQyODAxREE1MDA5MDFEMjIwMUM1MUUwMDI5QTU0MTg4QgorOjEwN0Q1MDAwRTA2OEMyMTk2MDY5ODI0MjAxRDkyMjY5ODcxQTAwMkYzRQorOjEwN0Q2MDAwNDVEOTI1NEVBMDY4RTE2ODQwMThGRjIxMDkzMUZGRjc4OQorOjEwN0Q3MDAwQTdGRDYxNjg0MDE4MDA5MEEwNjhFMTY4NDAxOEZGMjFFNQorOjEwN0Q4MDAwMDkzMUZGRjdBNkZEMDI5QUIxNTgwMTIzNUIwNDE5NDM5QworOjEwN0Q5MDAwQjE1MEMxMTlGRjIyMDkzMjkxNDIxM0Q5MTMxQTAxMUNBMworOjEwN0RBMDAwMDA5ODJBMUMxRTFDMDBGMERGRjhFMDY4ODAxOTc1MTk4NQorOjEwN0RCMDAwRTA2MDIxNjk4ODQyMDBEOTIwNjFCRjFCMDE5ODMwMTgxQQorOjEwN0RDMDAwMDE5MDEyRTAwMTFDMDA5RTMwMUMyQTFDM0IxQzAwRjA5QworOjEwN0REMDAwQ0JGOEUwNjhDMDE5RUQxOUUwNjAyMTY5ODg0MjAwRDk0QworOjEwN0RFMDAwMjA2MTAxOThDMDE5MDE5MDAwMjcwMDJGQjlEODAxOTg4RgorOjEwN0RGMDAwMDNCMEYwQkMwOEJDMTg0NzQwQUIyMDQwQjBCNUMzQjBERQorOjEwN0UwMDAwMEMxQzAwMjdGQTQzMDQyODA2REE0MTAwMDkxOEM5MDBBRgorOjEwN0UxMDAwMTQ0ODQ1NTg2QjBDMDREMjEwMUM0M0IwQjBCQzA4QkNDRAorOjEwN0UyMDAwMTg0NzYyMDkxQkQzMDAyMjAwOTIwODE4NDA2ODBDMjNFRgorOjEwN0UzMDAwMDAyMTAxQUEwMEYwMzBGODExMkMwREQwMTIyQzBERDAyOQorOjEwN0U0MDAwMTMyQzA1RDAxNDJDMEFEMTAzOTgwMDA0MDcwRTA2RTA2OQorOjEwN0U1MDAwMDM5ODA3MDYzRjBFMDJFMDAxOUYwMEUwMDI5RjM4MUNENgorOjEwN0U2MDAwREJFNzAwMDA0MEFCMjA0MDAzNDkwMDIwMDAyMjBBNTQxOQorOjEwN0U3MDAwMDEzMDYwMjhGQkQzNzA0NzQwQUIyMDQwMDBCNTAyRjBEMgorOjEwN0U4MDAwNkZGQTU3MjAwMkYwQ0NGOTAyRjA0MEY5MDAwQUZCRDM1OAorOjEwN0U5MDAwMDJGMDRFRkEwOEJDMTg0N0YwQjU4MkIwMDc5RDE0MUNEQQorOjEwN0VBMDAwMUYxQzMwNEFEMjZGMjAyMzE2Njg5RTQzMTY2MDMzMUM3NQorOjEwN0VCMDAwRkYyMjAxMzIyQTQwNDAwMjA4NDMwNTBBMDYxQzAwMEMzQQorOjEwN0VDMDAwMDE5MDAwMkEyMEQwMDJGMDRCRkE1MzIwMDJGMEE4RjlDQQorOjEwN0VEMDAwMDE5OEMwNDYwMDkwMDJGMEEzRjkyODFDMDJGMEEwRjkxNgorOjEwN0VFMDAwMzAxQzAyRjA5REY5MDJGMDIzRkFGRkY3QzdGRjAyRjAwMQorOjEwN0VGMDAwMzdGQTU0MjAwMkYwOTRGOTAwOTgwMkYwOTFGOTI4MUMwNgorOjEwN0YwMDAwMDJGMDhFRjkzMDFDMTRFMDAyRjAyQUZBNTIyMDAyRjAzRQorOjEwN0YxMDAwODdGOTAxOTgwMkYwODRGOTI4MUMwMkYwODFGOTMwMUNERAorOjEwN0YyMDAwMDJGMDdFRjkwMDIwMDJGMDdCRjkwMDIwMDJGMDc4RjlERgorOjEwN0YzMDAwMDAyMDAyRjA3NUY5MDAyMDAyRjA3MkY5MDAyRjA1RDkzNworOjEwN0Y0MDAwMDJGMEU0RjgyMDcwMDEzNDAxM0ZGOUQxMDJGMEYwRjlCOQorOjEwN0Y1MDAwMDQ0QUQwNkYyMDIzMDE2ODE5NDMwMTYwMDJCMEYwQkNDRAorOjEwN0Y2MDAwMDhCQzE4NDc2ODBFMDA4MEYwQjU4MkIwMTQxQzFGMUNCNgorOjEwN0Y3MDAwNDIwMjBBNDMxNTFDMDEyODU0RDAyQzQ5Qzg2RjIwMjMwMworOjEwN0Y4MDAwMDI2ODlBNDMwMjYwQzg2RjQwMjMwMTY4MTk0MzAxNjA4OAorOjEwN0Y5MDAwMDJGMEU2Rjk1MzIwMDJGMDQzRjkyODBDMDYxQzAyRjAyNworOjEwN0ZBMDAwM0ZGOTI4MEEwMTkwMDA5MDAyRjAzQUY5MjgxQzAyRjBFQgorOjEwN0ZCMDAwMzdGOTAyRjBCREY5RkZGNzYxRkYwMkYwRDFGOTg0MjAzMworOjEwN0ZDMDAwMDJGMDJFRjkzMDFDMDJGMDJCRjkwMDk4MDJGMDI4Rjk4QgorOjEwN0ZEMDAwMjgxQzAyRjAyNUY5MDAyRjA1RDkyMDc4MDEzNDAyRjA4MQorOjEwN0ZFMDAwMUZGOTAxM0ZGOUQxMDJGMEEzRjkwMkYwQjlGOTgzMjA5QQorOjEwN0ZGMDAwMDJGMDE2RjkzMDFDMDJGMDEzRjkwMTk4MDJGMDEwRjlBMgorOjEwODAwMDAwMjgxQzAyRjAwREY5MDJGMDkzRjlGRkY3MzdGRjA3NDkzQQorOjEwODAxMDAwQzg2RjQwMjMwMjY4OUE0MzAyNjBDODZGMjAyMzAxNjgzQQorOjEwODAyMDAwMTk0MzAxNjAwMkIwRjBCQzA4QkMxODQ3NjgwRTAwODAxQworOjEwODAzMDAwNzA0NzAwMDA4MEI1MDFGMDhGRjgwNjRGQzA0NkY4NjAyOQorOjEwODA0MDAwMDFGMEYyRjg3ODgwMDFGMEIxRjgzODcxODBCQzA4QkMxQQorOjEwODA1MDAwMTg0NzAwMDA2ODBFMDA4MDAwQjUwMUYwMDVGOTAyNDlEQworOjEwODA2MDAwQzA0NjA4ODAwOEJDMTg0NzY4MEUwMDgwMEI0OEMxNjhFRAorOjEwODA3MDAwMDEyOTExRDFDMTZGMDIyMzBBNjgxQTQzMEE2MEMxNkYzNgorOjEwODA4MDAwODAyMzBBNjgxQTQzMEE2MEMxMTgwODY4ODIyMzAyNjhCQworOjEwODA5MDAwMUE0MzAyNjAwMDIwMDg4MTcwNDcwMDAwNjgwRTAwODBDQgorOjEwODBBMDAwRjBCNDRBNDlDQTFEOUQzMjAwMjAwMDI3ODMwMEQ3NTBGMgorOjEwODBCMDAwMDEzMDE3MjhGQUQzNDY0QzAwMjA4MjAwQTc1MDAxMzAyNworOjEwODBDMDAwMjAyOEZBRDM0MzRBMDAyMDgzMDBENzUwMDEzMDIwMjhDQgorOjEwODBEMDAwRkFEM0E3NjE5NzYxNEY2NThGNjUzRjREQzA0NjJGNjAwQQorOjEwODBFMDAwNkY2MEFGNjBBRjYxRUY2MDJGNjE2RjYxMDAyMEMxMDAxMgorOjEwODBGMDAwMDkxODQ5MDEzNTRCQzkxODg2MDBDQjFERjkzMzM0NEM5QQorOjEwODEwMDAwMzQxOUUzNjMxMTIzNUIwMUNCMTg2MzYzMEQyMzlCMDFENworOjEwODExMDAwQ0IxOEI0MThFMzYzMjMyMzVCMDFDOTE4NjE2MzAxMzBGMgorOjEwODEyMDAwMDIyOEU0REIyOTQ4QzExREY5MzEyOTRDQzA0NkExNjI2RgorOjEwODEzMDAwNjE2QjBEMjM5QjAxRTE2MkMxMTg5MTYyNTE2QkMwNDZENgorOjEwODE0MDAwRDE2MjA4MjFFMTY0MjU0OUMwNDYyMTY1MjQ0OTBCNjlCMworOjEwODE1MDAwQzA0NjYzNjVDMzFENEQzM0UzNjUyNTY2OEI2OEMwNDYyNQorOjEwODE2MDAwNjM2NkNCNjhDMDQ2QTM2NjFFNEJDMDQ2RTM2NjI3NjdCRQorOjEwODE3MDAwMEIyM0RCMDFDMzE4QTM2NzY3NjcwMTI2RTMxRDY5MzM3RgorOjEwODE4MDAwNjY2MUU3NjExRjczMDIyM0QzNjQxNzRCQzA0NjEzNjUxMgorOjEwODE5MDAwQ0I2OUMwNDY1MzY1QzMxRDUxMzNEMzY1MkIxRDEzNjY5MAorOjEwODFBMDAwNEI2OUMwNDY1MzY2ODk2OUMwNDY5MTY2MEY0OUMwNDYwRgorOjEwODFCMDAwRDE2NjE2NjcwRjIzREIwMUMwMTg5MDY3NTY2N0Q3NjEzOQorOjEwODFDMDAwRDAxRDY5MzA1NjYxMDc3M0YwQkM3MDQ3NjgwRTAwODA5RgorOjEwODFEMDAwRTQyQzAwODA2NDJEMDA4MDkwRUUyMDQwMzAwMTE4MDBENworOjEwODFFMDAwN0MyOTAwODAwMDU1RkZGRjM4MDExODAwMTA1NUZGRkY2MworOjEwODFGMDAwOTBCNDAwMjExRTRBQkIyMzFCMDFENzE4Rjk3MzE5MjMyMQorOjEwODIwMDAwREIwMUQwMTgwMTI0Q0QyMzFCMDFEMzE4QzE2MTFDNzBFMAorOjEwODIxMDAwMzMyMzlCMDFEMzE4OTk2MEI5NzM1OTYxMkYyMzlCMDFCNAorOjEwODIyMDAwRDMxODE5NjAxMzRCNTEyN0JGMDMwMzYzM0I2MDg0Njk2NAorOjEwODIzMDAwRTQxODQ0NjMwNDNDN0M2MDAxMjRFNDAyODQ2MzBFNEMzMworOjEwODI0MDAwQzA0NkJDNjAwNDZCQzA0NjQ0NjI4NDY5RTQxODBCNEJCMgorOjEwODI1MDAwRTMxOEZCNjAwMzZCQzA0NjgzNjI0MzZBQzA0NjAzNjI1NworOjEwODI2MDAwQzE2MzUxNjQ5MTY0RDE2NUQxNjY5MEJDNzA0NzAwMDBEMAorOjEwODI3MDAwNjgwRTAwODAwMDAwMjA0MEZDMDcwMDAwRkNGN0ZGRkZCNAorOjEwODI4MDAwOTBCNDAwMjIxQjQ5QzkyMzFCMDFDODE4MDI3MTAxMjBBOAorOjEwODI5MDAwQkIyMzFCMDFDQjE4NTg3MzE3NDgwMzFDMDAyN0RDMUQ5OAorOjEwODJBMDAwQzEzNDFDNjUyMzFDMDEzNzNGMkZGOEQzMUE2NTE5MjNFRAorOjEwODJCMDAwREIwMUNGMTgzMzIzOUIwMUNCMTgzQTYxOTg2MTQwMjAzMgorOjEwODJDMDAwRjg2MERBNjExQTYyQ0E2NDBBNjYwQzQ4QzA0NkMyNjA4NQorOjEwODJEMDAwMEI0ODAwNkJDMDA2QzAwRUY4NjMwQTQ4MDE2OEMwNDYzMAorOjEwODJFMDAwMTk4MDQxNjhDMDQ2NTk4MDgwNjhDMDQ2OTg4MDkwQkMxQgorOjEwODJGMDAwNzA0NzAwMDA2ODBFMDA4MDkwQkMyMDQwOTBFRTIwNDA0NworOjEwODMwMDAwODAwMDE0NDA0MDAwMTQ0MDAwMjAwQTQ5QzA0NjA4NzMxMQorOjEwODMxMDAwQ0IxREZGMzMzQTMzODg2MUM4NjExODcwMDY0QUMwNDZFNgorOjEwODMyMDAwMTA2NTUwNjY5MDY2MDg3MDU4NzBCQjIzMUIwMUQxMTgwOQorOjEwODMzMDAwMDg3MzcwNDcyODA1MDA4MDY4MEUwMDgwRjBCNDJGNDk0QworOjEwODM0MDAwMkY0QUMwNDYxMTYxMDEyMzlCMDJDODE4NTA2MTJENDg3NQorOjEwODM1MDAwQzA0NjEwNjJEQjAwQzMxODUzNjIwMDIzMTM2MzUzNjNFQgorOjEwODM2MDAwMjk0QTJBNEZENDFERkYzNEZBMzQxNEM3MDgzRjNCNjExMQorOjEwODM3MDAwMUMxRjdDNjEyNjRGQzA0NjM5NjBCODYxNzk2MUY4NjI4NAorOjEwODM4MDAwM0I2MzdCNjRCQTY0RkE2NTIyNEZGRTFERjkzNjIyNERDOQorOjEwODM5MDAwRUMxRDc5MzQyNjYyNTEyNkI2MDMzNzYxMjQ2QUMwNDY0MworOjEwODNBMDAwNzQ2MTJGNjcxRDREMDkyNzdGMDRFQzFENzUzNDdDNjBCNworOjEwODNCMDAwM0Q2MDFCNENDMDQ2M0M2MUU2MUQ3NTM2N0U2MTE5NEYyMQorOjEwODNDMDAwQzA0NjdDNjAzRDYwMEYxQzAwMjFGRjI0MDEzNDFEMUM1MQorOjEwODNEMDAwOEIwMEZENTAwMTMxQTE0MkZBRDMwMTFDMDAyMDAxMjc3RQorOjEwODNFMDAwRkYwMjgzMDBDRDUwMDEzMEI4NDJGQUQzMDAyMDgxMDA1MworOjEwODNGMDAwNTU1MDAxMzA4MDI4RkFEM0YwQkM3MDQ3MjRBMzIwNDBBOAorOjEwODQwMDAwNDAwMTE4MDAyNDgzMjA0MDI0QTkyMDQwODAwMTE4MDA0NgorOjEwODQxMDAwQTgwMzAwODAyNEE3MjA0MDY4MEUwMDgwMjRBODIwNDBFNAorOjEwODQyMDAwQTRBODIwNDAwODA0MDA4MEI4QjUyQzQ4RkRGN0JBRkQ4OAorOjEwODQzMDAwMDEyMDJCNDkwQTY4NTIwQzA2RDIwQTY4MTIwQzAyRDE5QworOjEwODQ0MDAwMEE2ODkyMEEwMEQyMDAyMDA0MDYyNDBFMjU0QUQ3MUQ4RAorOjEwODQ1MDAwMEQzNzAwMjMwMDIwOUQwMDc4NTEwMTMzMDQyQkZBRDNGRgorOjEwODQ2MDAwMDEyNzNGMDU1MDYxRjg2MEQwNjFGODYxMDAyM0RCNDNDQworOjEwODQ3MDAwOTM2MTNCNjExMzYyM0I2MjAwMjcxQjRCOEQ2OEMwNDZEMgorOjEwODQ4MDAwMDA5NThENjlDMDQ2MDA5NTAwMkMwQkQwREQ2QkMwNDY3MQorOjEwODQ5MDAwMDA5NTlENkJDMDQ2MDA5NTVENkJDMDQ2MDA5NTFENkJCOQorOjEwODRBMDAwQzA0NjAwOTUwMTM3NDAyRkU4RDMwMDI3NkM0NjAxMjNEMgorOjEwODRCMDAwNUIwNzFDNDMwMUUwMjA2MDAxMzcwRDY4MkIwOTAyRDJFNQorOjEwODRDMDAwODAyRkY4RDMwMUUwODAyRjAzRDMwODQ5NEI2RTAxMzM4RQorOjEwODREMDAwNEI2NkQwNjJCOEJDMDhCQzE4NDcwMDAwRjQwMUZGRkYyRgorOjEwODRFMDAwMDAwMDEwNDA2ODBFMDA4MDAwMDExODQwQTA4MjIwNDA2QgorOjEwODRGMDAwOTBCNDAwMjEwRTRGMEY0QTAwMjA0QzAxNjQxQUE0MDBEMgorOjEwODUwMDAwQTMxODU4NjA5ODYwMTg2NDU4NjQxMDUzNTg4MENDMDBDMQorOjEwODUxMDAwRTQxOTk4NjdEQzYyMDEzMTAzMjlFRUQzMDY0OUMwNDZBRAorOjEwODUyMDAwMDg2MDQ4NjA4ODYwQzg2MDA4NjE5MEJDNzA0NzAwMDBCRgorOjEwODUzMDAwQUM2NjIxNDA1QzJCMDA4MEQwMkMwMDgwNjQyMTA1NDg3MworOjEwODU0MDAwQzA0NjAxNjMwMDIxQzk0MzQxNjM4MTYzMDAyMUMxNjNDNworOjEwODU1MDAwMDE2NDcwNDc2ODBFMDA4MDgwQjQwMTIwNDAwMjBBNDkxRgorOjEwODU2MDAwQzA0NjA4NjAzQzIwNDg2MDg4NjAwODQ4QzA0NkM4NjAzMworOjEwODU3MDAwMDAyMDA3NEE4NzAwQ0I2OEMwNDZEQTUxMDEzMDEwMjgzNgorOjEwODU4MDAwRjhEMzgwQkM3MDQ3MDAwMEU0MkQwMDgwRjQyRDAwODBGQgorOjEwODU5MDAwNUQ0Q0ZGRkYxMjQ5MTM0ODY3MjM5QjAxQ0ExODA2QzBCMAorOjEwODVBMDAwMDgzODExNEJDQTE4QzE2MDgyNjAwMTYxMEY0OTEwNDgzOAorOjEwODVCMDAwQTcyMzlCMDFDQTE4MDZDMDA4MzgwRTRCQ0ExOEMxNjAxMQorOjEwODVDMDAwODI2MDAxNjEwQzQ4MEQ0OTY3MjM5QjAxQzIxODA1QzFGNworOjEwODVEMDAwMDgzOTA1NEJDMjE4Qzg2MDhBNjAwODYxNzA0NzAwMDBGRQorOjEwODVFMDAwQUMxRTIxNDA0ODJFMDA4MEZDMUYwMDAwQUNFRTIwNDA1NQorOjEwODVGMDAwMzQyRTAwODBGQzJGMDAwMEFDM0UyMTQwNUMyRTAwODAxOQorOjEwODYwMDAwOTBCNDAwMjE0MDRDMDAyMDBBMDExMjE5MTkyM0RCMDEwQgorOjEwODYxMDAwRDIxOEQwNjIxMDYzNTA2MzkwNjMwMTMxMDMyOUYzRDMwMQorOjEwODYyMDAwM0E0OUMwNDYwODYzNDg2Mzg4NjMyMDYwMDEyMUUzMUQxRQorOjEwODYzMDAwNTkzMzYwNjAxOTcxMTg3Mjk4NzE5ODcyNTk3MTU4NzIzMworOjEwODY0MDAwRDg3MUQ4NzJFMjFENDkzMjExNzMxOTcwOTA3Mzk4NzAwNQorOjEwODY1MDAwNTE3MzU5NzBEMDczRDg3MDExNzExMTcyOTA3MTkwNzJGQQorOjEwODY2MDAwNTA3MTUwNzJEMDcxRDA3MjE4NzMwMjIyRTcxRDY5MzdCMQorOjEwODY3MDAwM0E3MDk5NzNCQTcwNTg3Mzc4NzBEODczRjg3MDM5NzEwQQorOjEwODY4MDAwM0E3MkI5NzFCOTcyNzg3MTdBNzJGOTcxRjk3MjM5NzM5MworOjEwODY5MDAwRTMxRDc5MzMxQTcwQjk3Mzk5NzA3ODczNUE3MEY5NzM0RQorOjEwODZBMDAwRDk3MDFBNzExQTcyOTk3MTlBNzI1ODcxNUE3MkQ5NzE3NQorOjEwODZCMDAwREE3MjE5NzNFNzFEODkzNzNBNzA5OTczQjk3MDU4NzM3NAorOjEwODZDMDAwN0E3MEQ5NzNGOTcwMzk3MTNBNzJCOTcxQjk3Mjc4NzE3NworOjEwODZEMDAwN0E3MkY5NzFGOTcyM0E3M0UzMUQ5OTMzMUE3MEI5NzNBQQorOjEwODZFMDAwOUE3MDc4NzM1QTcwRjk3M0RBNzAxOTcxMUE3Mjk5NzFGNQorOjEwODZGMDAwOTk3MjU4NzE1QTcyRDk3MUQ5NzIyMDYxRTA2MDYwNjFDMworOjEwODcwMDAwQTA2MDkwQkM3MDQ3MDAwMEEwMUMwMDgwRTgxOTAwODBBOQorOjEwODcxMDAwODEyMDAwMDIwMTQ5QzA0Njg4NjI3MDQ3QzAwMDE0MDBGMQorOjEwODcyMDAwMDk0OTBBNEJDODE4MDQzQkM5MTgwODYwMDAyMUMyMUQzQQorOjEwODczMDAwMjkzMkMyNjExMDFDMDEzMTA4MjlGOEQzQzExRjI5MzkxRgorOjEwODc0MDAwMDAyMEM4NjE3MDQ3MDAwMDY4MEUwMDgwODQwOTAwMDBBNgorOjEwODc1MDAwMDY0ODA3NDlDMDQ2MDg4MDQ4ODAwMDIwODg4MEM4ODBCNQorOjEwODc2MDAwODg2MDA0NDlDMDQ2NDg2MTg4NjE3MDQ3RkZGRjAwMDA4NworOjEwODc3MDAwNEMyQTAwODA2QzA2MDA4MDAwMjEwNjQ4QzIxRDE5MzI3OAorOjEwODc4MDAwQzE2MDAxNjFDMTYxMDE2MjExNzFGRjMwMDEzMDQxNjI1QworOjEwODc5MDAwNzA0NzAwMDA2QzA2MDA4MDA5NDgwQTRCQzA0NjE4NjAwQworOjEwODdBMDAwMDAyMUMyMUQ0RDMyQzI2MDEwMUMwMTMxMTQyOUY4RDNDMgorOjEwODdCMDAwQzExRjREMzkwMDIwQzg2MDU4NjA5ODYwNzA0NzAwMDBBNAorOjEwODdDMDAwRDgwNzAwODA2QzA2MDA4MDAwQjUwQjQ5MEI0OEZERjcwOAorOjEwODdEMDAwRUFGQjBCNDgwMDZBMDEyM0RCMDM5ODQzMDk0OUMwNDZDMgorOjEwODdFMDAwMDg2MjA5NDhDMTY4MDEyOTA0RDFDMDZGODAyMzAxNjg2QgorOjEwODdGMDAwMTk0MzAxNjAwOEJDMTg0N0MxQkQyMTQwNzU5ODIxNDA0QworOjEwODgwMDAwQzAwMDE4NDBDMDAwMTgwMDY4MEUwMDgwMDBCNTBGNDg3NgorOjEwODgxMDAwQzE2ODAxMjkwNEQxQzA2RjgwMjMwMTY4OTk0MzAxNjBCOAorOjEwODgyMDAwMEI0QjBDNDgwQzRBMDAyMUZERjdCRkZCMEI0ODQxOEQ1OAorOjEwODgzMDAwMDEzMTQxODUwMDIxQzE4NTA5NDgwMDZBMDEyM0RCMDMxQworOjEwODg0MDAwMTg0MzA4NDlDMDQ2MDg2MjA4QkMxODQ3NjgwRTAwODBGMworOjEwODg1MDAwNTlCRDIxNDA3NTk4MjE0MEI4MEIwMDAwMDAwMDAwODBGMAorOjEwODg2MDAwQzAwMDE4NDBDMDAwMTgwMEYwQjUxQjRDMTAyNkUwNjg4RQorOjEwODg3MDAwMDEyODA4RDE2MDg4MDAyODA1RDEyMDc5MDAyODAyRDE3QworOjEwODg4MDAwMTkyMEEwNjcwMEUwQTY2NzAwMjAwNzIzNUIwMkU1MTgxNworOjEwODg5MDAwQzE0M0U4NjE2OTYyNTkwOEExMjc3RjAzNzk2MDBGMjEwQworOjEwODhBMDAwNzk2MEUxMURCOTMxMDg3MTAxMjBCODYwNDAwMkI4NjBGQgorOjEwODhCMDAwMDBGMDRDRkEwMEYwRjBGQTA0MjBCODYwMDcyMDc4NjE2QworOjEwODhDMDAwN0U2MDFCMjNEQjAxRTAxOEMwOEIwNDIzMTg0MEU4NjJBNAorOjEwODhEMDAwRjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwOTBCNDAyMUM3MQorOjEwODhFMDAwMDAyMEZGMjMwMTMzOUE0MjA4RDAwMTI5MDBEMTAxMjA0MgorOjEwODhGMDAwMDAyQTAxRDEwMjIzMTg0MzkwQkM3MDQ3MUI0QUQ3Njg1NQorOjEwODkwMDAwMUE0QjE5NzkxQzFDMzcyMzlCMDFFMzE4MDEyRjBERDEzOQorOjEwODkxMDAwNTc4ODAwMkYwQUQxMDAyOTBBRDE1OThCMEEwOTAwRDNBMAorOjEwODkyMDAwMDIyMDQ5MDlFOEQzMDEyMzE4NDNFNUU3MDAyOTAzRDBEMQorOjEwODkzMDAwOTg4QTgwMDc4MDBGREZFNzZEMjM1QjAxRDExODhBODg1MgorOjEwODk0MDAwRkYyNzAxMzcxNzQwMEE0OUM5ODgwM0QwNEIwQTAxRDNEMgorOjEwODk1MDAwMDMyMEQxRTcxMzBBMDNEMzBCMEEwMUQzMDIyMENCRTc4QworOjEwODk2MDAwRDIwOUM5RDNDOTA5QzdEMzAxMjBDNUU3NjgwRTAwODA2MQorOjEwODk3MDAwMDgxQzAwODBGMEI1QzFCMDAxMjAwMDA3NTI0OUMwNDY3NAorOjEwODk4MDAwMDg2MDUyNDg0MjY5NDAwREExMjE0OTAzNDg2MDUwNDg5RgorOjEwODk5MDAwQzA2QTUwNEIxODQzMDAyMTAzMDMxQjBCNEU0QzI3NkYzQQorOjEwODlBMDAwM0QwMzJEMEJFNzFENzkzN0FCNDIxQ0QwRTMxRDc5MzMxNgorOjEwODlCMDAwMUI2QUMwNDY0MDkzMDEyMzlCMDcwMzQzMUI2OENDMDBGRQorOjEwODlDMDAwNkU0NjMzNTEwMTIzOUIwNzA2MUQzMzQzMUI2ODZDNDRERAorOjEwODlEMDAwNjM2MDA4MzAwMTMxNDA5QjgzNDIwMEQ4M0Y0ODAzMDM2NQorOjEwODlFMDAwMUIwQkFCNDJFN0QxMDAyMDAxMjMxQjAzMTM0MDNDNEM3RgorOjEwODlGMDAwMDNEMDYzNkEwMTMzNjM2MjA5RTAxMzBCMDNEMzIzNkE3NAorOjEwOEEwMDAwMDEzMzIzNjIwM0UwMzc0QjVDNkQwMTM0NUM2NTAwMjk2MAorOjEwOEExMDAwMDlEMDAzMUNEQzAwMjMxQzZCNDQ1QzY4MDEzMDIzMEQ2RgorOjEwOEEyMDAwMDFEMjg4NDJGNUQxMzA0QzI1Njg2QjBDMDVEMjIzNjgwMQorOjEwOEEzMDAwMUIwQzA4RDEyNDY4QTMwQTA1RDMyMDI0MkI0QkMwNDY2NQorOjEwOEE0MDAwNUM2MjAwMjQ1QzYyMjU0QjIzNEM1MTI2QjYwMzIzNjdFRAorOjEwOEE1MDAwMzM2MTNENkFDMDQ2NzU2MTAyMjVBMTI2NzYwMzc1NjBDMworOjEwOEE2MDAwMDEyNUI1NjBFNjFEQjkzNjM1NzE4ODQyMjFEMDI1MUMzNworOjEwOEE3MDAwQzMwMDZDNDZFNDU4MkU2RjZCNDQzNDYwNUI2ODJDNkYwNworOjEwOEE4MDAwQzA0NjYzNjAyQjZGMDgzMzJCNjczQzZBQTM0MjAyRDM1NgorOjEwOEE5MDAwMTI0QkMwNDYyQjY3MDMxQ0RCMDA2QjQ0NUM2ODAxMzA0MworOjEwOEFBMDAwMjMwRDA0RDM1MTI0QTQwMzJCNkZDMDQ2QTM2MTg4NDIzNQorOjEwOEFCMDAwREVEMTEwMEIwM0QzMEU0OTAxMjBGREY3NzRGQTQxQjA0QgorOjEwOEFDMDAwRjBCQzA4QkMxODQ3MDAwMDAwMDAwMEIwMDAwMTE0NDBEMgorOjEwOEFEMDAwMDA0MDE0NDAwMDAwMjA0MDY4MEUwMDgwMjRBNzIwNDA4MQorOjEwOEFFMDAwQTQyQTAwODBBMDgyMjA0MDAwMDAxMDQwQzAwMDE4MDA4RQorOjEwOEFGMDAwQzk0RkZGRkZGMEI0MDAyMTAwMjMwNzIyMDYyNDQ3NEY4RgorOjEwOEIwMDAwQzA0NjNDNjEzQTYxMDEzMzIwMkJGOUQzMDQyNTNENjExNQorOjEwOEIxMDAwMDUyMzNCNjEzQzYxM0E2MTNDNjEzQTYxM0Q2MTNCNjFFNworOjEwOEIyMDAwM0Y0REFCNkZERTA4MDIyMzFFNDAwNDIzMzM0MzNCNjFGRAorOjEwOEIzMDAwMDUyMzMzNDMzQjYxQUI2RjlFMDgwMjIzMUU0MDA0MjM5MQorOjEwOEI0MDAwMzM0MzNCNjEwNTIzMzM0MzNCNjFBQjZGNUUwODAyMjMzNAorOjEwOEI1MDAwMUU0MDA0MjMzMzQzM0I2MTA1MjMzMzQzM0I2MTAyMjMxRgorOjEwOEI2MDAwQUU2RjFFNDAwNDIzMzM0MzNCNjEwNTIzMzM0MzNCNjExNworOjEwOEI3MDAwQUI2RjVEMDAwMjIzMUQ0MDA0MjMyQjQzM0I2MTA1MjNBMworOjEwOEI4MDAwMkI0MzNCNjFDNTA4MDIyMzFENDAwNDIzMkI0MzNCNjE1QgorOjEwOEI5MDAwMDUyMzJCNDMzQjYxODUwODAyMjMxRDQwMDQyMzJCNDNGRgorOjEwOEJBMDAwM0I2MTA1MjMyQjQzM0I2MTQ1MDgwMjIzMUQ0MDA0MjMwMQorOjEwOEJCMDAwMkI0MzNCNjEwNTIzMkI0MzNCNjEwMjI1MDU0MDA0MjNFNgorOjEwOEJDMDAwMkI0MzNCNjEwNTIzMkI0MzNCNjE0MDAwMDIyMzE4NDBBQworOjEwOEJEMDAwMDQyMzAzNDMzQjYxMDUyMzE4NDMzODYxMDAyNTNENjFBRAorOjEwOEJFMDAwMDEyMzNCNjEzRDYxM0I2MTAwMjAzRDYxMEQ0QjFCNjlGMQorOjEwOEJGMDAwNDkwMDFFMUMwMjIzMzM0MDE5NDMwMTIzM0I2MTAxMzAwRAorOjEwOEMwMDAwMTAyOEYyRDMwMjIwMzg2MTAzMjAzODYxM0M2MTNBNjFCOAorOjEwOEMxMDAwM0M2MTNBNjEzODYxNDgwOEYwQkM3MDQ3ODAwMDE0MDAzQworOjEwOEMyMDAwNjgwRTAwODA4MDAwMTQ0MEYwQjQwMDI0MDcyMzA2Mjc1QgorOjEwOEMzMDAwNDQ0QUMwNDYxNzYxMTM2MTAxMzQyMDJDRjlEMzA0MjYzRAorOjEwOEM0MDAwMTY2MTA1MjQxNDYxMTc2MTA3MjMxMzYxMTY2MTE0NjEwRAorOjEwOEM1MDAwMTc2MTEzNjEzQzRCOUI2RkREMDgwMjIzMUQ0MDJCMUNFOQorOjEwOEM2MDAwMzM0MzEzNjEyNTQzMTU2MTM3NEI5QjZGOUQwODAyMjNFNgorOjEwOEM3MDAwMUQ0MDJCMUMzMzQzMTM2MTI1NDMxNTYxMzI0QjlCNkYwMQorOjEwOEM4MDAwNUQwODAyMjMxRDQwMkIxQzMzNDMxMzYxMjU0MzE1NjFFRQorOjEwOEM5MDAwMkQ0QjlENkYwMjIzMUQ0MDJCMUMzMzQzMTM2MTI1NDMzNQorOjEwOENBMDAwMTU2MTI5NEI5QjZGNUQwMDAyMjMxRDQwMkIxQzMzNDMzNAorOjEwOENCMDAwMTM2MTI1NDMxNTYxQzUwODAyMjMxRDQwMkIxQzMzNDM1NgorOjEwOENDMDAwMTM2MTI1NDMxNTYxODUwODAyMjMxRDQwMkIxQzMzNDM4NgorOjEwOENEMDAwMTM2MTI1NDMxNTYxNDUwODAyMjMxRDQwMkIxQzMzNDNCNgorOjEwOENFMDAwMTM2MTI1NDMxNTYxMDIyNTA1NDAyQjFDMzM0MzEzNjE5NQorOjEwOENGMDAwMjU0MzE1NjE0MDAwMDIyMzE4NDAwMzFDMzM0MzEzNjFEMAorOjEwOEQwMDAwMjA0MzEwNjExNzYxMDcyMzEzNjExNjYxMTQ2MTRDMDA0MQorOjEwOEQxMDAwMDAyMDBGMjEyNTFDQ0Q0MDAyMjMxRDQwMDQyMzJCNDM5RQorOjEwOEQyMDAwMTM2MTA1MjMyQjQzMTM2MTAxMzAwMTM5MTAyOEYxRDM1RQorOjEwOEQzMDAwMTc2MTA3MjMxMzYxMTc2MTEzNjEwMzIwMTA2MUYwQkNGMQorOjEwOEQ0MDAwNzA0NzAwMDA4MDAwMTQwMDY4MEUwMDgwRjBCNTRGNERBMQorOjEwOEQ1MDAwMDgyMTAyMjAyQTFDRkRGNzI3Rjk0RDRDNzEyMzVCMDFFNQorOjEwOEQ2MDAwRTcxODM4ODAxQTIxMDIyMDJBMUNGREY3MURGOTc4ODBBNworOjEwOEQ3MDAwMjA3OTAwMjgwQkQwMDAyMDM4ODBFMDY4MDEyODEwRDEyRAorOjEwOEQ4MDAwNDQ0ODAwNjgwMTIzOUIwMjE4NDM5OTAyMDg2MEUwNjg4OAorOjEwOEQ5MDAwMDEyODA2RDE2MDg4MDAyODAzRDFGOTIxMTIyMEZGRjdBRAorOjEwOERBMDAwNDNGRjAxMjFDOTAzMDAyMEZGRjczRUZGMDAyNTdEMjY3OAorOjEwOERCMDAwRjYwMDAwRTAwMTM1MDAyMEZGRjc5Q0ZFMDAwQzAxRDMxNworOjEwOERDMDAwQjU0MkY3RDMwMDI1MDVFMDAzMjEwOTAzMDAyMEZGRjc5MgorOjEwOEREMDAwMkJGRjAxMzUwMDIwRkZGNzhERkU0MDBCMDFEMkI1NDI3RAorOjEwOERFMDAwRjJEMzA0MjBGRkY3ODZGRUZGMjNFMTMzOTg0MzAxMjFFRAorOjEwOERGMDAwMDE0MzM4ODhGRjIzMDEzMzk4NDIwM0QxMkYyMzVCMDFCRAorOjEwOEUwMDAwMTk0MzE2RTAwMTI4MDlEMTc4ODgwMTI4MDNEMTIzMjNDQQorOjEwOEUxMDAwNUIwMTE5NDMwREUwMjAyMzE5NDMwQUUwMDAyODA4RDEyMworOjEwOEUyMDAwNzg4ODAxMjgwM0QxMEIyM0RCMDExOTQzMDFFMDgwMjM1QgorOjEwOEUzMDAwMTk0MzA0MjBGRkY3RjhGRTA5MjE0OTAyMDAyMEZGRjczQgorOjEwOEU0MDAwRjNGRUUwNjgwMDI4MENEMTAwMjExQjIwRkZGN0VDRkVBOAorOjEwOEU1MDAwMUEyMEZGRjc0RkZFMDEyMUM5MDMwMTQzMUEyMEZGRjczMworOjEwOEU2MDAwRTNGRTAwMjcwM0UwMDgyRjAxRDMwRjJGMDhEOTM4MUM5OQorOjEwOEU3MDAwRkZGNzQwRkU3OTAwMDkxOTFCMjNEQjAxQzkxODg4ODMxRAorOjEwOEU4MDAwMDEzNzIwMkZFRkQzRjBCQzA4QkMxODQ3RURBRjIxNDBDRAorOjEwOEU5MDAwNjgwRTAwODAwMDAwMTA0MDgxQjAxMzQ4MDE2OEMwNDY5MQorOjEwOEVBMDAwMDA5MTQxNjhDMDQ2MDA5MTgxNjhDMDQ2MDA5MUMxNjg0OAorOjEwOEVCMDAwQzA0NjAwOTEwMTY5QzA0NjAwOTE0MTY5QzA0NjAwOTFEOQorOjEwOEVDMDAwODE2OUMwNDYwMDkxQzE2OUMwNDYwMDkxMDE2QUMwNDZFRgorOjEwOEVEMDAwMDA5MTQxNkFDMDQ2MDA5MTgxNkFDMDQ2MDA5MUMwNkExMworOjEwOEVFMDAwQzA0NjAwOTAwMUIwNzA0NzAwMDgxNDQwRjBCNTgzQjA1MAorOjEwOEVGMDAwNjg0RDFCMjNEQjAxRUYxOEY4OEIwNDIyMDI0MDAyOTIxRAorOjEwOEYwMDAwNzEyMzVCMDFFODE4MDE4OEMwNDYwMTkxNDA4OEMwNDY4MgorOjEwOEYxMDAwMDA5MDAwMjQwM0UwMDgyQzAxRDMwRjJDMDhEOTIwMUM1QQorOjEwOEYyMDAwRkZGN0U4RkQ2MTAwNDkxOTFCMjNEQjAxQzkxODg4ODM5RAorOjEwOEYzMDAwMDEzNDIwMkNFRkQzNTg0Q0UwNjkwMDI4MTVEMDU3NEU0RgorOjEwOEY0MDAwMjAyNTAxM0Q1MzQ5RTA2OTMwNDAwQkQwNjgwMDQwMThBRQorOjEwOEY1MDAwMzcyMzlCMDFDMDE4ODE4QjI4MUNGRkY3NjVGRUUwNjk1MQorOjEwOEY2MDAwQjA0M0UwNjE3NjA4MDAyREVCRDEwMTIwRkZGN0MyRkQ5MAorOjEwOEY3MDAwNDg0OUMwNDZGODgzRjg4QkMyMDgyNUQzQ0E2ODAxMkEzRAorOjEwOEY4MDAwMTNEMTBBNzkwMDJBMUZEMTQ5ODgwMDI5MUNEMTAxOTlERgorOjEwOEY5MDAwNDM0QTAwMjkwNUQwMDEyOTE2RDE1MThCQzkwODEzRDJBMworOjEwOEZBMDAwMEZFMDUxOEIwOTA5MEZEMjBCRTAwQTc5MDAyQTBCRDE4RgorOjEwOEZCMDAwNkQyMzVCMDFDOTE4OEE4OEM5ODgxMTQwNDkwOTA5MDdDRQorOjEwOEZDMDAwMDJEMTA0MjM5ODQzRjg4M0Y4OEIwNDIxMDE0MDAyOUFDQworOjEwOEZEMDAwMUZEMEI5OEI0QTBCMjdEMzgwMDkyNUQzRkYyMzAxOThEMworOjEwOEZFMDAwMDEzMzk4NDIyMEQwMDAyNTAwOTgwMTI4MDBEMTA1MDJDNQorOjEwOEZGMDAwMDE5ODAwMjgwMkQxMDEyMzVCMDMxRDQzQTk0MjEzRDAyRAorOjEwOTAwMDAwMDAyMDI5MUNGRkY3MTBGRUJEODMwMDIwQzA0MzYwNjJEMgorOjEwOTAxMDAwMEFFMEI4OEI0MDBCMDdEMjA5MjE0OTAyMDAyMEZGRjc3NAorOjEwOTAyMDAwMDNGRTA5MjA0MDAyQjg4M0Y4OEJDMDA4MkREMzFENDhFOQorOjEwOTAzMDAwQzc2QTAxOTgwMDk5RkZGNzUxRkNDMjA3RDIwRjFBNDk3RAorOjEwOTA0MDAwMDNEMDA0MjNDRDZEMkI0MzAzRTAwNDIzQ0Q2RDlENDM1QQorOjEwOTA1MDAwMkIxQ0NCNjU4MzA4MDNEMzAyMjNDRDZEMkI0MzAzRTA4OAorOjEwOTA2MDAwMDIyM0NENkQ5RDQzMkIxQ0NCNjU2MTZBODE0MjBDRDBFMAorOjEwOTA3MDAwNjA2MjBFNDgwMDJBMDNEMEZGMjEyMTMxMzk0MzAzRTAwQQorOjEwOTA4MDAwRkYyMzIxMzM5RjQzMzkxQ0MxNjIwM0IwRjBCQzA4QkNFRAorOjEwOTA5MDAwMTg0NzAwMDA2ODBFMDA4MDY4MUMwMDgwMDAwMDAwODBGNworOjEwOTBBMDAwMjgxQzAwODA0MDAwMTQ0MEE0MkEwMDgwNDAwMDE0MDBDNgorOjEwOTBCMDAwOTBCNDAxMjIyMDI4MEZEMjQzMDAwRjFDMDc0OTVDMThFRQorOjEwOTBDMDAwMzcyMzlCMDFFMzE4OUY4MzgyNDAwNzIzNUIwMkM5MTg2MworOjEwOTBEMDAwMTAxQ0NBNjkxMDQzQzg2MTkwQkM3MDQ3NjgwRTAwODBCQworOjEwOTBFMDAwMEI0ODQwNjkwQjQ5Qzk4QjA0MjIwQTQwMEE0OTA2RDA0MworOjEwOTBGMDAwMDEyM0RCMDI5ODQzMDEyM0NBNkQxQTQzMDVFMDAxMjNEMworOjEwOTEwMDAwREIwMjE4NDNDQTZENTIwODUyMDBDQTY1NzA0NzAwMDA1RQorOjEwOTExMDAwODAwMDE0NDBFODFCMDA4MEE0MkEwMDgwMDBCNTg0QjBDMQorOjEwOTEyMDAwRkZGN0RFRkYwMTFDMDUyMDAwOTAwMDIwMDFBQjE4ODAzNgorOjEwOTEzMDAwMDQzQjU4NzAxQjIyMDBBQjVBODBEOTgwMDU0OUM5NkQ4OQorOjEwOTE0MDAwQzA0NjAyOTEwMzkwNjg0NjAwMjFGREY3NzlGODA0QjAwQgorOjEwOTE1MDAwMDhCQzE4NDdBNDJBMDA4MDBGNDgwMTY4NDkwQzA1RDJCMgorOjEwOTE2MDAwMDE2ODA5MEMwNkQxMDA2ODgwMEEwM0QzMEI0ODAwNjgyNworOjEwOTE3MDAwMDAwQzAxRTAwQTQ4ODA2QzAwMDQwMDBDMDk0Qjk4NDI4NgorOjEwOTE4MDAwMDVEMDAyMzM5ODQyMDJEMDA3NEI5ODQyMDFEMTAxMjAwQQorOjEwOTE5MDAwNzA0NzAwMjBGQ0U3MDAwMDAwMDAxMDQwMDAwMDE4NDA2RAorOjEwOTFBMDAwMDAwMDAwODAwNDk5MDAwMDA3OTkwMDAwOTBCNDAxMjQ5OQorOjEwOTFCMDAwMjExQzE4NDgwMjY4NTIwQzA2RDIwMjY4MTIwQzAyRDExNworOjEwOTFDMDAwMDA2ODgwMEEwMEQyMDAyMTA5MDYwOTBFMTI0RjEzNEFENgorOjEwOTFEMDAwMDJEMDM4NjgwMDBDMDBFMDkwNkMwMDA0MDAwQzEwNEJDQQorOjEwOTFFMDAwOTg0MjA4RDAwMjMzOTg0MjA1RDAwRTRCOTg0MjAyRDBFNAorOjEwOTFGMDAwMDIzQjk4NDIwQ0QxMDAyOTAyRDBGODZBMDAwQzAwRTAzMgorOjEwOTIwMDAwRDA2QzQwMEEwMEQyMDAyNDIwMDYwMDBFOTBCQzcwNDdBQgorOjEwOTIxMDAwMDAyMEZCRTcwMDAwMTA0MDAwMDAxODQwMDAwMDAwODAyNAorOjEwOTIyMDAwMDQ5OTAwMDAwNzk5MDAwMDBDNDgwMTY4NDkwQzA1RDIxOAorOjEwOTIzMDAwMDE2ODA5MEMwNUQxMDA2ODgwMEEwMkQzMDg0ODgwNjhEQgorOjEwOTI0MDAwMDFFMDA4NDg0MDZDMDAwNDAwMEMwMDIxMDMyODAzRDAxMgorOjEwOTI1MDAwNDAwODAxRDMwMTIwNzA0NzA4MUNGQ0U3MDAwMDEwNDBDMworOjEwOTI2MDAwMDAwMDE4NDAwMDAwMDA4MEYwQjUwMTI3MUE0QzI1Njg2NgorOjEwOTI3MDAwRkZGNzcyRkYwMzFDMTk0QTAyMjEwMTI2MTg0ODAxMkIyRgorOjEwOTI4MDAwMUJEMUNCMDQxRTYwNTUyMzAzNjAwMDIzNDM2MDA2Njg5NgorOjEwOTI5MDAwNTUyRTFCRDFBQTI2MDY2MDQzNjAwMzY4QUEyQjE1RDE2MAorOjEwOTJBMDAwMDkyMzAzNjAwNTIzMEY0RkMwNDYzQjYwMDMyMzBFNEY4NQorOjEwOTJCMDAwQzA0NjNCNjAxMTYwMDc2ODA4RTAwODIzMjM2MDA0MjM3MAorOjEwOTJDMDAwMEE0RkMwNDYzQjYwMTE2MDA2NjAyNzY4QzA0NjI1NjBCMworOjEwOTJEMDAwMzgxQ0YwQkMwOEJDMTg0NzAwMDAyMDQwMDAwMDI0NDBBNworOjEwOTJFMDAwMDAwMDIyNDAwMDAwMkE0MDAwMDAyNjQwMDAwMDI4NDBFNAorOjEwOTJGMDAwODBCNTA3MUNGRkY3MzBGRjAxMjgwNUQxMTk0ODAwNjgyOQorOjEwOTMwMDAwMTk0OTQ5NkIwODQwMjJFMDE4NDgwMTY4NDkwQzA1RDIwOAorOjEwOTMxMDAwMDE2ODA5MEMwNkQxMDA2ODgwMEEwM0QzMTQ0ODAwNjg2QworOjEwOTMyMDAwMDAwQzAxRTAxMzQ4ODA2QzAwMDQwMDBDMTI0QkMwMThDNAorOjEwOTMzMDAwMDgyODBCRDIwMUEzMUI1QzVCMDA5RjQ0MDUwMzA3MDNCNQorOjEwOTM0MDAwMDcwNzA1MDMwMzIwMDJFMDAxMjAwMEUwMDAyMDAxMjFCRgorOjEwOTM1MDAwMzg2MDgwMDcwMEQxMDAyMTA4MDYwMDBFODBCQzA4QkNFMAorOjEwOTM2MDAwMTg0NzAwMDAzNDZFMjE0MDAwMDAxMTQwMDAwMDEwNDBGQQorOjEwOTM3MDAwMDAwMDE4NDAwMDAwMDA4MEZFNjZGRkZGRjBCNTgyQjBEQworOjEwOTM4MDAwMDcxQzAxMjAwMTkwRkZGN0U3RkUwMTI4MTNEMTM4MkZCOQorOjEwOTM5MDAwMDFEMEE4MkYwN0QxMDAyNkY2NDMzNDFDQTgyRjAyRDFGNAorOjEwOTNBMDAwMzAxQzAwOTYzNTFDMTEyMDAwMDQwNjYyNDQ2Mjg1NjI2MAorOjEwOTNCMDAwMDA5OUMwNDZDMTYyMDAyMTA4NDhDMDQ2MDE2MDM4MkZBQworOjEwOTNDMDAwMDFEMEE4MkYwNUQxMDEyMTAxNjBBODJGMDFEMTAzMjFDRgorOjEwOTNEMDAwMDE2MDAxOTgwMkIwRjBCQzA4QkMxODQ3MzQ2RTIxNDAwRgorOjEwOTNFMDAwNzA0NzAwMDA3MDQ3MDAwMDkwQjUwNzFDMTI0QzIxNjhDMAorOjEwOTNGMDAwMTI0ODgxNDIwQkQwMDAyMzIxMUNFMjFEQzEzMjAwRTA0MworOjEwOTQwMDAwMDhDMTkxNDJGQ0QzMjA2MEM4MjBBMDgwNjc3MjM4MDE1NworOjEwOTQxMDAwMDBGMDE4RjgyNzcyMEE0OEMwNDZFMDYwMDkyRjAwREIwOAorOjEwOTQyMDAwMDAyN0UwMTkwMTdEMDEzMTAxNzVFMDg4MDEzMEUwODBGRAorOjEwOTQzMDAwMDEyMDkwQkMwOEJDMTg0NzAwMDAwMDgwRUVGRkMwRDA5RgorOjEwOTQ0MDAwMDgxMDAwMDM4MEI0MDg0QUQxMUQ4OTMxMEI3QTIwMkIwMworOjEwOTQ1MDAwMDFEMzAwMjMwQjcyMDcxQzA4N0E0MzFDMEI3MjgwMTg3RgorOjEwOTQ2MDAwOTAzMDQ3NzI4MEJDNzA0NzAwMDAwMDgwMDc0OTAxMjI5RAorOjEwOTQ3MDAwMTIwNDA4NjgwMjQwMDEyMDAwMkEwNkQxMEE2ODEyMEM3MgorOjEwOTQ4MDAwMDJEMTA5Njg4OTBBMDBEMjAwMjA3MDQ3MDAwMDEwNDAwQworOjEwOTQ5MDAwOTBCNTA3MUMwOTRDMzgxQzIxMUNGQ0Y3OTFGRjM4MUNBNworOjEwOTRBMDAwMDBGMDBFRjgwMTIzRDg0MjAxRDEwMDBDRTA4MDAwMjEyOQorOjEwOTRCMDAwMjAxQ0ZDRjdDNUZFOTBCQzA4QkMxODQ3QzQ2NjIxNDBDMAorOjEwOTRDMDAwRjhCNTA3MUM3OTdBNzY0ODAwMjM3NjRDMDEyOTVERDFERQorOjEwOTREMDAwQTI4OEMwNDYwMDkyQTE4OThBNDI3NERBRkE3QTAwMkFFOAorOjEwOTRFMDAwMTVEMDdBNkMwMDJBMTJEMDhBNDIxMEQ4MDA5QTUxMUNFQQorOjEwOTRGMDAwQTE4MEExODhDMDQ2NDE4MTc4NkM2QjRFQzA0NkYwODA0NworOjEwOTUwMDAwQTA2QTU4MjM3OTZDNTk0MzQwMThDMTFBMjhFMDIyODg3MAorOjEwOTUxMDAwMDEzMjEyMDQxMjBDMjI4MDhBNDIwMERCMjM4MDAwMjJENgorOjEwOTUyMDAwMDAyOTY5REQ1RjRDQTQ2QTVFNEIxRDg4NTgyMzZCNDM5QworOjEwOTUzMDAwRTMxOERFMUQwMTM2MDEyMzlCMDczMzQzMUI2ODFCMDYxRQorOjEwOTU0MDAwMTVEMTU4NDkwMDlBMDEzMjhBODA4QTg4QzA0NjQyODFFMgorOjEwOTU1MDAwMDg4ODAxMzA1NDRFQzA0NkYwODA1ODIwNjg0MzIxMThENgorOjEwOTU2MDAwMzgxQzAwRjAzOUZCRjA4ODAwMDQwMDE0OTVFMDRENEJFNgorOjEwOTU3MDAwMDEzNTJEMDQyRDBDMUQ4MDhENDIwMURCMDAyNTFEODA0MQorOjEwOTU4MDAwMDEzMjEyMDQxMjE0OTE0MkNFREM4MUUwRTE4OEUyODlCQQorOjEwOTU5MDAwOTE0MjE4REFGOTdBMDAyOTJGRDA3OTZDNDkwNDQ5MENFNAorOjEwOTVBMDAwNzk2NDJBRDBFMjg5OTE0MjI3RDhFMTg4MDEzMUUxODBBQgorOjEwOTVCMDAwRTE4OEMwNDY4MTgxMDEyM0RCMDM3ODZDMTg0MzNBNEU3MQorOjEwOTVDMDAwQzA0NkYwODAwMEUwNjNFMEUwNkE3OTZDNEIwMDU5MTgxNworOjEwOTVEMDAwNDkwMTQwMThDMTFGNTkzOTM4MUMwMEYwMEZGQkUwNkFERgorOjEwOTVFMDAwNzk2QzRBMDA1MjE4NTIwMTgwMTgwMTM5MDkwNDA5MEM5QgorOjEwOTVGMDAwNjAzODAwRjA4OUZCQjZFNzRBRTA2MTg4MDEzMTA5MDQ3MAorOjEwOTYwMDAwMDkwQzYxODBFMjg5OTE0MjAwREI2MzgwMDAyMTAwMkExRAorOjEwOTYxMDAwM0VERDI0NENFNDZBMjM0QjVEODg2QjAwNUIxOTVCMDFFMworOjEwOTYyMDAwRTMxOERFMUQwMTM2MDEyMzlCMDczMzQzMUI2ODFCMDYyRAorOjEwOTYzMDAwMjBEMTFDNEVGMTg4MDEzMUYxODBGMTg4QzA0NjgxODEzMgorOjEwOTY0MDAwNzA4ODAxMjNEQjAzMDEzMDE4NDMxNzQ5QzA0NkM4ODBFNgorOjEwOTY1MDAwNjgwMDQwMTk0MDAxMjExODM4MUMwMEYwQ0ZGQTcxODhDOQorOjEwOTY2MDAwNEEwMDUyMTg1MjAxRjA2QTgwMTgwMEYwNERGQjBFNDk3MgorOjEwOTY3MDAwQzg4ODc5RTcwQjRCMDEzNTJEMDQyRDBDNUQ4MDk1NDI5MAorOjEwOTY4MDAwMDFEQjAwMjU1RDgwMDEzMTA5MDQwOTE0OEE0MkMyREMzNgorOjEwOTY5MDAwMDE4OTAxMzEwMTgxMDAyMEMwNDNGOEJDMDhCQzE4NDc5MgorOjEwOTZBMDAwNEMyQjAwODA0QzJBMDA4MEM0NjYyMTQwRjBCNDA2MUM3QworOjEwOTZCMDAwMDEyM0RCMDMzMzQwMDEyNDQ0NEYwMDIwNDQ0QTQ1NEQzRAorOjEwOTZDMDAwRDExRDM5MzEwMDJCNDFEMEUzMDNGMzFBNzNEMEVFODk1OQorOjEwOTZEMDAwOUU0MjcxRDNFRTg4MDAyRTZERDBFRDZBNUUxRTczMDAzRgorOjEwOTZFMDAwOUIxOTVCMDFFRDE4QUU2ODM2MDYzNjBFMDMyRTAyRDBDQworOjEwOTZGMDAwQ0U4OTAxMzZDRTgxNDAzNUFEOEJBRDAwMzU0RTc2NkFEMAorOjEwOTcwMDAwQzA0NjcwNTE1NTg5MDEzNTU1ODEzMjRFRjI2QUQyMThFMgorOjEwOTcxMDAwOTA2MEYyNkFEMjE4OTA2M0YyNkFEMjE4RDA2M0YyNkE0QgorOjEwOTcyMDAwRDIxODEwNjRGMjZBRDIxODUwNjRGMjZBRDIxODkwNjRBNworOjEwOTczMDAwRjI2QUQyMThEMDY0RjA4ODAxMzhGMDgwRjA4OEMwNDYxMAorOjEwOTc0MDAwODg4MTI0NDkwMDI4MzlEMTRGODAzN0UwMDAyRTM4RDk0QworOjEwOTc1MDAwQUI4OUIzNDIzMEQzQUI4ODAwMkIyQ0QwNTM4OTAxMzM3MworOjEwOTc2MDAwNTM4MTJBMUNBRDZBNTgyMzAxM0U3MzQzRUQxOEFFNjgzRAorOjEwOTc3MDAwMzYwNjM2MEUwMzJFMDJEMENFODkwMTM2Q0U4MUE4NjA4MQorOjEwOTc4MDAwOTU2QUVEMThBODYzOTU2QUVEMThFODYzOTU2QUVEMTg3NworOjEwOTc5MDAwMjg2NDk1NkFFRDE4Njg2NDk1NkFFRDE4QTg2NDk1NkE1RQorOjEwOTdBMDAwRUIxOEQ4NjQ5MDg4MDEzODkwODA5MDg4QzA0NjQ4ODEzMgorOjEwOTdCMDAwMDAyODAzRDEwMUUwMDRFMDAzRTAxNzgwMjAxQ0YwQkM4NgorOjEwOTdDMDAwNzA0N0NBODkwMTMyQ0E4MUY5RTcwMDAwRkZGRjAwMDAzMworOjEwOTdEMDAwMEMyQjAwODA0QzJBMDA4MDAwQjUwMDIxNDE2MDEwNDkwQworOjEwOTdFMDAwNEE2ODAwMkExMEQxQ0E2ODAwMkEwNEQwQ0ExRDE5MzI1QQorOjEwOTdGMDAwMTI3OTAwMkEwOEQwNEE2OTAwMkEwQkQxODg2MTQ4NjE5MQorOjEwOTgwMDAwMDBGMDEwRjgwOEJDMTg0NzRBNjkwMDJBMDJEMTg4NjFBNAorOjEwOTgxMDAwNDg2MUY3RTc4QTY5QzA0NjUwNjA4ODYxRjJFNzAwMDA1NgorOjEwOTgyMDAwNkMwNjAwODBCMEI1MkE0ODQwNjkwMDI4NENEMDA4MjI1OAorOjEwOTgzMDAwQzE2ODBBNDAwMDI3Mjc0QkQ5MURCOTMxMDAyQTExRDAzMQorOjEwOTg0MDAwMDQyMjI1NENDMDQ2MEM2MTI0NENDMDQ2NEM2MjI0NEM3QQorOjEwOTg1MDAwQzA0NjhDNjIyMzRDQzA0NkNDNjIyMzRDQzA0NjBDNjM4RAorOjEwOTg2MDAwNEY2MzEyRTAwNTIyMjE0Q0MwNDYwQzYxMjA0Q0MwNDZEQgorOjEwOTg3MDAwNEM2MjIwNENDMDQ2OEM2MjFGNENDMDQ2Q0M2MjFGNENEMAorOjEwOTg4MDAwQzA0NjBDNjMxRTRDQzA0NjRDNjM0MDI0Q0M4MjRGODNDMAorOjEwOTg5MDAwMUM0RjAwMjEwMDJBMENEOThDMDAwNTE5NkQ2QTdENDBFRgorOjEwOThBMDAwRTQxOEZGMzQwMTM0NjU2MjAxMzE5MTQyRjREMzEwMjk4OAorOjEwOThCMDAwMDdEMjhBMDBEMjE4RkYzMjAxMzI1NzYyMDEzMTEwMjlEMworOjEwOThDMDAwRjdEMzExNDkwMEYwMjJGOEIwQkMwOEJDMTg0NzAwMDBEQgorOjEwOThEMDAwNkMwNjAwODBBQ0FCMjA0MDI4MDE0MDAwMDEyMzQ1NjdBNgorOjEwOThFMDAwODlBQkNERUZGRURDQkE5ODc2NTQzMjEwMjAwMTQwMDBFRgorOjEwOThGMDAwNjc0NTIzMDFFRkNEQUI4OTk4QkFEQ0ZFMTAzMjU0NzY3MAorOjEwOTkwMDAwQzNEMkUxRjAzNjM2MzYzNjMwODAyMDQwQjBCNTBGMUM3OQorOjEwOTkxMDAwMTU0REU5MURDOTMxMTU0QzIzMUMxNTRBMDAyMEZDRjdEMworOjEwOTkyMDAwNDRGQkU5MURGRjMxMUUzMTIzMUMwRDFDMTE0QTAxMjA4RgorOjEwOTkzMDAwRkNGNzNCRkIyOTFDMjMxQzBFNEEwMDIwRkNGNzM1RkJERgorOjEwOTk0MDAwMzkxQzIzMUMwQzRBMDEyMEZDRjcyRkZCMDAyMTBCNDg3QgorOjEwOTk1MDAwQzIxRDE5MzI1MTcxMDEyMUZGMzAwMTMwNDE2MjA4MUNEMgorOjEwOTk2MDAwQjBCQzA4QkMxODQ3MDAwMEFDQUIyMDQwNzUwOEZGRkYzNgorOjEwOTk3MDAwMjgwMDAzMDA0MDAwMDIwMDE0MDAwNzAwNkMwNjAwODA2RAorOjEwOTk4MDAwRjBCNTM3NEE1MDY5MDEyMzlCMDcwODMwMTg0MzAwNjgzNworOjEwOTk5MDAwMDEwNjA5MEUzMzRCMDEyOTQ5RDExRjY4MTkxQzMyNEJBRQorOjEwOTlBMDAwOUY0MjA0RDFGRkY3M0VGRkYwQkMwOEJDMTg0NzAwMjNEQworOjEwOTlCMDAwOUYwMENDNTk1NTY5RUYxOTNDNjEwMTMzMDUyQkY3RDM1MgorOjEwOTlDMDAwMDAwQTAwMDIwMjIzMTg0MzUzNjlDMDQ2OTg2MDUwNjk5OAorOjEwOTlEMDAwMDgyM0MyNjgxMzQwMjU0RkZBMURCOTMyMDAyQjAyRDA2QworOjEwOTlFMDAwMDQyMzIzNEMwMUUwMDUyMzIyNENDMDQ2MTQ2MTQwMjQ4QgorOjEwOTlGMDAwRDQ4MjAwMjQ1NDgzMjA0QzAwMjIwMDJCMENEOTk1MDBFMworOjEwOUEwMDAwNDYxOTc2NkE2NjQwRUQxOUZGMzUwMTM1NkU2MjAxMzJGRQorOjEwOUExMDAwOUE0MkY0RDMxMDJBMDdEMjkzMDBEQjE5RkYzMzAxMzNBMworOjEwOUEyMDAwNUM2MjAxMzIxMDJBRjdEM0ZGRjc3MEZGQkNFNzAwMjExOAorOjEwOUEzMDAwOEYwMERDNTk1NTY5RUYxOTdDNjIwMTMxMDUyOUY3RDM5NAorOjEwOUE0MDAwMDAwQTAwMDIwMzIzMTg0MzUxNjlDMDQ2ODg2MDUwNjkyOAorOjEwOUE1MDAwNDA2OEMwNDY1MDYxMDk0OEZDRjdBNEZBQTRFNzAwMDAzQQorOjEwOUE2MDAwNkMwNjAwODAzMDgwMjA0MDY3NDUyMzAxQUNBQjIwNDA2RAorOjEwOUE3MDAwMjgwMTQwMDAyMDAxNDAwMDVDNUM1QzVDMTEzMUZGRkY2QworOjEwOUE4MDAwRjBCNTA3MUMzQjQ4M0M0QzA4MjEyMDYwQTE4MDAwMjAxOQorOjEwOUE5MDAwMjA4MUUxODA2MDgxMzk0OEMwNDZFMDYwMzg0OEMwNDY5NgorOjEwOUFBMDAwMjA2MTM4NDhDMDQ2NjA2MTM3NDhDMDQ2QTA2MTM3NDhFOQorOjEwOUFCMDAwQzA0NkUwNjEzNjQ4QzA0NjIwNjIzNjQ4QzA0NjYwNjIxMworOjEwOUFDMDAwMzU0OEMwNDZBMDYyMzU0OEMwNDZFMDYyMzQ0OEMwNDZDQQorOjEwOUFEMDAwMjA2MzM0NDhDMDQ2NjA2MzMzNDhDMDQ2QTA2MzMzNDhCRgorOjEwOUFFMDAwQzA0NkUwNjMzMjQ4QzA0NjIwNjQzMjQ4QzA0NjYwNjRFNQorOjEwOUFGMDAwMzE0OEMwNDZBMDY0MzE0OEMwNDZFMDY0MzA0OEMwNDZBMgorOjEwOUIwMDAwMjA2NTMwNDlDODY4MDIwNDg5Njk0QTQwRTMxRDc5MzNGOQorOjEwOUIxMDAwMDkwNEM5NDNDMDQzNDg0MEUxMURCOTMxREE2MzA4NjAxNAorOjEwOUIyMDAwMjk0RDIxMUMyQjFDMjk0QTAwMjBGQ0Y3M0VGQTI4NEEwQgorOjEwOUIzMDAwRTExREI1MzEwMTIwMkIxQzBFMUNGQ0Y3MzZGQTI0NEExRQorOjEwOUI0MDAwMDAyMDMxMUMyQjFDRkNGNzMwRkFFMTFENEQzMTJCMUM4MQorOjEwOUI1MDAwMjA0QTAxMjBGQ0Y3MjlGQUUwMUQ1RDMwMDE2ODAwMjk0OAorOjEwOUI2MDAwRkNEMDYwNkRDMDQ2Mzg2NTIwNkVDMDQ2Nzg2NUYwQkM5QworOjEwOUI3MDAwMDhCQzE4NDc4MDAwMDgwMDhDQjkyMDQwODE4MTQ4QkQ4RQorOjEwOUI4MDAwNzk1NjIzOEM5MzBDODI5NTFEMEUxMkNGOUIzQkMwRTkxNgorOjEwOUI5MDAwRTY1NTdDODI5OUY2NzgwMkQxRDcyNTczNzI4QzMzMTAwMgorOjEwOUJBMDAwRjcwM0YxNDI2QzlCNEFBNzgyOEUyM0E5OTBCMTgyOEU2MworOjEwOUJCMDAwREMzRkZCMjkwMDYyMjI0NTg4MkJGMTg1MTI2MUQxNzNCRAorOjEwOUJDMDAwNkVCMTExMTYwODgzMjA0MDc1MDhGRkZGNTQwMDAzMDA5MgorOjEwOUJEMDAwMDgwMDAyMDAxNDAwMDMwMDgwQjUwRjFDMzkxQzAwRjBCRgorOjEwOUJFMDAwMzNGODM4MUNGRkY3NENGRjAzNDgwMTg5MDEzMTAxODEyQworOjEwOUJGMDAwODBCQzA4QkMxODQ3MDAwMDBDMkIwMDgwOTBCNTA0MUNFQQorOjEwOUMwMDAwMEYxQzIwMUMzOTFDMDBGMDFGRjhFMDY4MDEwRUZGMjIxOQorOjEwOUMxMDAwMTIwNDAyNDAxMjBBMTE0M0ZGMjIxMjAyMDI0MDEyMDJGMQorOjEwOUMyMDAwMTE0MzAwMDYwODQzMzg2NTIwNjlDMDQ2Nzg2NTYwNjlCRAorOjEwOUMzMDAwQzA0NkI4NjUwMzQ4MDE4OTAxMzEwMTgxOTBCQzA4QkM2OAorOjEwOUM0MDAwMTg0NzAwMDAwQzJCMDA4MDkwQjUwMDIyOTMwMDFGMThDRAorOjEwOUM1MDAwQkY2OTVCMTg1RjYyMDEzMjA1MkFGN0QzMDc3QUZCMDhGOAorOjEwOUM2MDAwMDNEMzAwMjM5MjAwNTIxODEzNjIwNzZCQzA0NjhGNjMyMAorOjEwOUM3MDAwQzc2QUMwNDZDRjYzODc2QkMwNDYwRjY0NDc2QkMwNDY1OAorOjEwOUM4MDAwNEY2NDA3NkNDMDQ2OEY2NEMyNkJDMDQ2Q0E2NEMyODgwQQorOjEwOUM5MDAwQzA0NjBBODA4MjdBMTIwNjAzN0ExQjA0MUE0M0MzODhEQworOjEwOUNBMDAwMUIwMjFBNDM0MzdBREIwNzFBNDM4QTYwMTcxQzgzN0EyNAorOjEwOUNCMDAwNUEwODA1RDMxNDIyMUMxQ0EzMDgwMkQyMTUyMjAwRTA2NgorOjEwOUNDMDAwMDAyMjAwN0E0MzA4MTBEM0MwMDgwMkQzODgyMDEwNDMzMgorOjEwOUNEMDAwMDFFMDgwMjAxMDQzM0EwQTEyMDIwMTIzMUE0M0M4NjBBRgorOjEwOUNFMDAwOEE2MDA4MUNGRkY3NzhGRDA1RTAzODBBMDAwMjAzMjNBQworOjEwOUNGMDAwMTg0Mzg4NjBDQTYwMDM0ODAxODkwMTMxMDE4MTkwQkMyMgorOjEwOUQwMDAwMDhCQzE4NDcwQzJCMDA4MEYwQjQwMjZEMTQ0QzE1MUNENQorOjEwOUQxMDAwRTc2OUJENDAxMzFDMjY2QUYzNDA1RDQwMkUxQzQ1NkQ2QgorOjEwOUQyMDAwQkQ0MDZFNDAyQjFDMzUxQ0ZENDAyRjFDQkIwMDY1NkFERQorOjEwOUQzMDAwRUI1ODAwMkIwOEQwMjM2OTAxMzc5RjQyMDBEMzAwMjczRQorOjEwOUQ0MDAwQkUwMEFFNTkwMDJFRjdEMUE0NjlBMjQwMTE0MzA1NEJDNQorOjEwOUQ1MDAwMTk0M0JBMDBBOTUwNDAzMDg3ODNGMEJDNzA0NzAwMDAxNworOjEwOUQ2MDAwNEMyQTAwODAwMDAwMDA4MDgwQjQwMDIyMDAyMzAwMjlEQgorOjEwOUQ3MDAwMDVEOTA3Nzg3QTQwMDEzMDAxMzM4QjQyRjlEM0QwNDNCQgorOjEwOUQ4MDAwMDAwNjAwMEU4MEJDNzA0N0YwQjUwNzFDMDAyNEZGMjZCQgorOjEwOUQ5MDAwMDkzNjIwMUMwMEYwOUFGODAwRjBCOEY5MDUxQzAwRjAxNAorOjEwOURBMDAwQzdGQTNENzAyODFDMDEzNzAxMzRCNDQyRjFEM0YwQkMyRQorOjEwOURCMDAwMDhCQzE4NDc4MEI1MDBGMDkzRjgwMEYwQTdGOTA3MUMxRAorOjEwOURDMDAwMDBGMEI2RkEzODBBRjZEMzgwQkMwOEJDMTg0N0YzQjVFMQorOjEwOUREMDAwODJCMDAyOTg0MTAyNTMyMDAwRjA2NEY4MDBGMEE4RkEyMworOjEwOURFMDAwRkZGN0U4RkYwMDI0MDAyMDAxOTAyRTIwMDA5MDAwMjVCRQorOjEwOURGMDAwMDAyNzAyOTgwMTI4MDREMTAwOTg4NDQyMDFEMzAwMjY0QworOjEwOUUwMDAwMDlFMDAxOTg0MTFDMDE5MTAwRjA2MEY4MDBGMDdFRjkzMgorOjEwOUUxMDAwMDYxQzAwRjA4REZBRjgwMDg2NDAzNTQzMDEzNDAxMzcwNgorOjEwOUUyMDAwMDQyRkU2RDMwMzk5MjBDMTAzOTFGRjIzMDkzMzlDNDJGOQorOjEwOUUzMDAwREREMzA0QjBGMEJDMDhCQzE4NDdGMEI1MDQxQzBGMUNGRgorOjEwOUU0MDAwMDEyQzJBRDAxNjQ4QzA2RjQwMjMwMTY4MTk0MzAxNjBENQorOjEwOUU1MDAwMDAyNjIwQ0ZCMTAwODQyMDAwRjAyNEY4MjgxQzAwRjA1OAorOjEwOUU2MDAwREZGOTI4MEEwMEYwRENGOTI4MEMwMEYwRDlGOTI4MEVGNworOjEwOUU3MDAwMDBGMEQ2RjkwMEYwNUNGQTAxMzY0MjJFRTlEMzYxMDIxNworOjEwOUU4MDAwODMyMDAwRjAwRkY4MDBGMDUzRkFGRkY3OTNGRjA0NDgyNworOjEwOUU5MDAwQzA2RjQwMjMwMTY4OTk0MzAxNjBGMEJDMDhCQzE4NDdCQgorOjEwOUVBMDAwNjgwRTAwODA5MEI1MDQxQzBGMUMwMEYwNTlGQTIwMUNBRAorOjEwOUVCMDAwMDBGMEI2RjkzODBDMDBGMEIzRjkzODBBMDBGMEIwRjk0OAorOjEwOUVDMDAwMzgxQzAwRjBBREY5OTBCQzA4QkMxODQ3MDBCNTAxMUM2NworOjEwOUVEMDAwNTQyMEZGRjdFN0ZGMDAyMDAwRjBBMkY5MDhCQzE4NDc2NAorOjEwOUVFMDAwMDBCNTAwRjAzREZBNTcyMDAwRjA5QUY5MDhCQzE4NDc3OQorOjEwOUVGMDAwOTBCNTA4NEZGQTZGMjAyMzE0Njg5QzQzMTQ2MDIzMUMwQworOjEwOUYwMDAwRkZGNzY1RkZGODZGMjAyMzAxNjgxOTQzMDE2MDkwQkNEQgorOjEwOUYxMDAwMDhCQzE4NDc2ODBFMDA4MDkwQjUwODRGRkE2RjIwMjNFMAorOjEwOUYyMDAwMTQ2ODlDNDMxNDYwMjMxQ0ZGRjc4N0ZGRjg2RjIwMjNGRAorOjEwOUYzMDAwMDE2ODE5NDMwMTYwOTBCQzA4QkMxODQ3NjgwRTAwODA5NgorOjEwOUY0MDAwRjBCNTA0MUMwRjFDMTg0RUYwNkYyMDIzMDE2ODk5NDNENAorOjEwOUY1MDAwMDE2MDYxMDI1MzIwRkZGN0E1RkYwMEYwRTlGOUZGRjc2OAorOjEwOUY2MDAwMjlGRkY4MUQwNTMwMDEyQzAzRDEyMjJGMDFEMzAwMjczMgorOjEwOUY3MDAwMEZFMDQ0MUNGRkY3QUFGRjAwRjBDOEY4MDcxQzAwRjAzMAorOjEwOUY4MDAwRDdGOTIwMUNGRkY3QTJGRjAwRjBDMEY4MDUxQzAwRjA3NQorOjEwOUY5MDAwQ0ZGOUYwNkYyMDIzMDE2ODE5NDMwMTYwMjgwMjM4NDM4QworOjEwOUZBMDAwRjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwRjBCNUMyQjBENQorOjEwOUZCMDAwMTQxQzBEMUMwNzFDMDEyRjJGRDA3OTAyMTk0RUYwNkZCNQorOjEwOUZDMDAwMjAyMzAyNjg5QTQzMDI2MDUzMjBGRkY3NkJGRjAwRjBFMgorOjEwOUZEMDAwQUZGOUZGRjdFRkZFNjg0NkZGRjdENkZFNkE0NkU4MURDOQorOjEwOUZFMDAwMDUzMDE0NTQyMTBBNjg0NDQxNzA2ODQ2MDA5OTBDMzBDOQorOjEwOUZGMDAwRkZGN0JBRkUwMkFCMTg3MDAwMjA1ODcwNjg0NjBDMjFCQgorOjEwQTAwMDAwRkZGN0IyRkUwMkFCNTg3MDY5NDYzODFDRkZGNzE1RkYyOAorOjEwQTAxMDAwRjA2RjIwMjMwMTY4MTk0MzAxNjA0MkIwRjBCQzA4QkMxNgorOjEwQTAyMDAwMTg0NzAwMDA2ODBFMDA4MEZGQjVDMkIwMDcxQzAxMkY2MgorOjEwQTAzMDAwMDFEMTAxMjAzNkUwNkI0NjAwMjBDNDQzMTBDMzAxMzAzQgorOjEwQTA0MDAwNDIyOEZCRDM2ODQ2MEMzMDAzMUMwMDI0MDAyQTBBRDk5RQorOjEwQTA1MDAwMEU4OEMwNDYwNjcwMEU4ODM2MTI0NjcwMDIzMDAyMzFGNQorOjEwQTA2MDAwMDIzNDk0NDJGNEQzMDA5MjE4MUMxMTFDRkZGNzdDRkVCQQorOjEwQTA3MDAwMDQxQzAwMjAwMTkwMDJBQjFDNzA1ODcwOUQ3MDY4NDY1MworOjEwQTA4MDAwMEMyMUZGRjc3MUZFMDJBQjU4NzA0NTlCMUQwNjJEMEU4QgorOjEwQTA5MDAwQUM0MjAzRDE2OTQ2MzgxQ0ZGRjczRUZGMDEyMEFDNDJCOQorOjEwQTBBMDAwMDBEMTAwMjA0NkIwRjBCQzA4QkMxODQ3QjBCNUMyQjAyMworOjEwQTBCMDAwMEYxQzQxMDIxNDRDRTA2RjIwMjMwMjY4OUE0MzAyNjA5NworOjEwQTBDMDAwNTMyMEZGRjdFRkZFMDBGMDMzRjlGRkY3NzNGRTY4NDYwOQorOjEwQTBEMDAwRkZGNzVBRkVFMDZGMjAyMzAxNjgxOTQzMDJBRDAxNjBDQgorOjEwQTBFMDAwNkQ3ODAwMjQwMkFCNUM3MDY4NDYwQzIxRkZGNzNDRkVFMworOjEwQTBGMDAwQTg0MjAyRDEwMDk4ODc0MjAxRDMyMDFDMDBFMDAxMjAzMQorOjEwQTEwMDAwNDJCMEIwQkMwOEJDMTg0NzY4MEUwMDgwRkM0NjYwNDdFRgorOjEwQTExMDAwMDAwMEEwRTNCNDIyOUZFNUI0MzI5RkU1MDExMEEwRTM2NAorOjEwQTEyMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTUzNworOjEwQTEzMDAwMDAxMDgyRTUwMDEwOTNFNTgxMDM4MEUxMDExMEEwRTNBNworOjEwQTE0MDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTUxNworOjEwQTE1MDAwMDAxMDgyRTUwMDEwOTNFNTAxMDM4MEUxMDExMEEwRTMwNworOjEwQTE2MDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTVGNworOjEwQTE3MDAwMDAxMDgyRTUwMDEwOTNFNTgxMDI4MEUxMDExMEEwRTM2OAorOjEwQTE4MDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTVENworOjEwQTE5MDAwMDAxMDgyRTUwMDEwOTNFNTAxMDI4MEUxMDExMEEwRTNDOAorOjEwQTFBMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTVCNworOjEwQTFCMDAwMDAxMDgyRTUwMDEwOTNFNTgxMDE4MEUxMDExMEEwRTMyOQorOjEwQTFDMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTU5NworOjEwQTFEMDAwMDAxMDgyRTUwMDEwOTNFNTAxMDE4MEUxMDExMEEwRTM4OQorOjEwQTFFMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTU3NworOjEwQTFGMDAwMDAxMDgyRTUwMDEwOTNFNTgxMDA4MEUxMDExMEEwRTNFQQorOjEwQTIwMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTU1NgorOjEwQTIxMDAwMDAxMDgyRTUwMDEwOTNFNTAxMDA4MEUxMUVGRjJGRTFCMAorOjEwQTIyMDAwRkM0NjYwNDdBNDIxOUZFNUE4MzE5RkU1QTAxM0EwRTE2QgorOjEwQTIzMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyNAorOjEwQTI0MDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MjAxM0EwRTFEOQorOjEwQTI1MDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTUwNAorOjEwQTI2MDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1QTAxMkEwRTEzQQorOjEwQTI3MDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTVFNAorOjEwQTI4MDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MjAxMkEwRTE5QQorOjEwQTI5MDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTVDNAorOjEwQTJBMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1QTAxMUEwRTFGQgorOjEwQTJCMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBNAorOjEwQTJDMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MjAxMUEwRTE1QgorOjEwQTJEMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTU4NAorOjEwQTJFMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1QTAxMEEwRTFCQworOjEwQTJGMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTU2NAorOjEwQTMwMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTEzQgorOjEwQTMxMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTU0MworOjEwQTMyMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MUVGRjJGRTE3RgorOjEwQTMzMDAwRkM0NjYwNDdBMDMwOUZFNTAxMTBBMEUzMDAxMDgzRTVENAorOjEwQTM0MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUyRAorOjEwQTM1MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MUVGRjJGRTE2OAorOjEwQTM2MDAwRkM0NjYwNDc3MDMwOUZFNTAwMTBBMEUzMDAxMDgzRTVENQorOjEwQTM3MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTVGRAorOjEwQTM4MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MUVGRjJGRTEzOAorOjEwQTM5MDAwRkM0NjYwNDczNDIwOUZFNTNDMzA5RkU1MDAxMEEwRTM3OQorOjEwQTNBMDAwMDAxMDgyRTUwMDEwODJFNTAxMTBBMEUzMDAxMDgzRTVCMworOjEwQTNCMDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTVCRAorOjEwQTNDMDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MUVGRjJGRTFGOAorOjEwQTNEMDAwRjgwMDE4NDAwNDAxMTg0MDAwMDExODQwRkMwMDE4NDAyMworOjEwQTNFMDAwODBCNTAwRjAwQ0Y4MDAyNzM4MUMwMEYwNDdGODc4MUMwNgorOjEwQTNGMDAwMDcwNDNGMEMwQzJGRjdERDgwQkMwOEJDMTg0NzFENDgzNAorOjEwQTQwMDAwMDI2ODFENDk4QjY5RDIxODAyNjAwMjY2OEE2QTQzNjgzNQorOjEwQTQxMDAwOUIxODQzNjA5MzQyMDJEMjgyNjgwMTMyODI2MEMyNjgxNAorOjEwQTQyMDAwMEI2QUQyMThDMjYwNDI2OUNCNjhEMjE4NDI2MUMyNjkxNQorOjEwQTQzMDAwOEI2OEQyMThDMjYxMDI2OTBCNjlEMjE4MDI2MTgyNjkwNQorOjEwQTQ0MDAwMEI2OEQyMTg4MjYxMDI2QkNCNjlEMjE4MDI2MzRBNkEyOAorOjEwQTQ1MDAwNDM2QjlCMTg0MzYzOTM0MjAyRDI4MjZCMDEzMjgyNjM0NworOjEwQTQ2MDAwQzI2QjRCNjlEMjE4QzI2MzAyNkNDOTZBNTExODAxNjQ4RAorOjEwQTQ3MDAwNzA0NzAwMDBBNDJBMDA4MDAwMDgxNDQwODhCNTY5NDY4RgorOjEwQTQ4MDAwMDBGMDE3Rjg4MTA4MEFEMDAwMjAwMDI5MDdEOTAwMjIxRgorOjEwQTQ5MDAwODMwMDAwOUZDMDQ2RkE1MDAxMzA4ODQyRjhEMzg4QkM0MAorOjEwQTRBMDAwMDhCQzE4NDcwMEI1MDBGMDA0RjgwMDA0MDAwQzA4QkMxNAorOjEwQTRCMDAwMTg0NzAwMjIwMDI4MEFEMDAxMjgwQUQwMDIyODBDRDAxMAorOjEwQTRDMDAwMDMyODAyRDEwNzQ4MUMyMjA4NjAxMDFDNzA0NzA2NDg2OAorOjEwQTREMDAwMDRFMDA2NDg1MDIyMDg2MEY3RTcwNTQ4NjgyMjA4NjA1MworOjEwQTRFMDAwRjNFNzAwMDAwODgzMjA0MEE0MkEwMDgwMEMyQjAwODBBMgorOjEwQTRGMDAwQTA4MjIwNDA4MEI0MDMyMkMyODAxNTRBQzA0NjgyNjBGOAorOjEwQTUwMDAwMTQ0QTEyODgwMTMyQzI2MDAwMjAxMzRBMTM1Q0MwNDYwQworOjEwQTUxMDAwMEI3MDAxMzAwMTMxMDgyOEY4RDMyMDIyMEE3MDAxMzE3NAorOjEwQTUyMDAwMDAyMDBFNEIxRjVDQzA0NjBGNzAwMTMwMDEzMTA4MjgxRgorOjEwQTUzMDAwRjhEMzBBNzAwMTMxMDAyMDA5NEExMzVDQzA0NjBCNzA0MQorOjEwQTU0MDAwMDEzMDAxMzEwODI4RjhEMzAwMjAwODcwODBCQzcwNDcyMgorOjEwQTU1MDAwMDgxMDAwMDM2ODBFMDA4MDdDMDQwMDgwODUwNDAwODBFMQorOjEwQTU2MDAwOEUwNDAwODAwMEI1MDEyMzBBNDhDMTFEODkzMTRCNzA1QgorOjEwQTU3MDAwMDAyMjBBNzA2NDIxODAzMEMxODIwMTgzNDM4MzdEMjFERgorOjEwQTU4MDAwQzkwMDgxODNDMjgzMDQ0ODAxMjIwMDIxMDBGMDhFRkJCMAorOjEwQTU5MDAwMDhCQzE4NDc2ODBFMDA4MEI1MjJGRkZGMDBCNUZGRjcyMgorOjEwQTVBMDAwRTFGRjEzNDgwMjIyMDAyMTAwRjA4MEZCMDEyM0Q4NDI4MgorOjEwQTVCMDAwMEFEMTEwNDhDMTFEMzkzMUNBODgwMTMyQ0E4MDgxNzk1NworOjEwQTVDMDAwMDEzMTgxNzFGREY3NzBGOTBCNDhDMDY4MDEyODA1RDE5MAorOjEwQTVEMDAwMEE0ODdEMjJEMjAwMDAyMTAwRjA2OEZCMDg0OEZCRjcwMgorOjEwQTVFMDAwRTFGQzA4NDgyODIyMDAyMTAwRjA2MEZCMDhCQzE4NDc2NQorOjEwQTVGMDAwNzkyMUZGRkZBMDgyMjA0MDY4MEUwMDgwQTU3QjIxNDBDQQorOjEwQTYwMDAwOTUyQ0ZGRkY1OTAzRkZGRjAwQjUxMDIwMEY0OUMwNDZFRQorOjEwQTYxMDAwMDg2MDBGNEEwRjQ4NjQyMUZCRjdDNkZDMEU0ODAxMjI3MAorOjEwQTYyMDAwMTIwNDAxNjgwQTQwMDgyMTAwMkEwNUQxMDI2ODEyMENCMAorOjEwQTYzMDAwMDdEMTAwNjg4MDBBMDREMzA4NDhDMDQ2QzE2MDA4QkMzRQorOjEwQTY0MDAwMTg0NzA3NDhDMDQ2MDE2NEY5RTcwMDAwMDAwMDAwQjA2MQorOjEwQTY1MDAwQTU1NUZGRkY3QzI5MDA4MDAwMDAxMDQwNDAwMTE4MDAzNAorOjEwQTY2MDAwMDAwMDAwODBGOEI1Mjc0ODAxMjIxMjA0MDE2ODBBNDA2MgorOjEwQTY3MDAwMDcyMTAwMkEwNUQxMDI2ODEyMEMwNkQxMDA2ODgwMEE2MQorOjEwQTY4MDAwMDNEMzIxNDhDMDQ2QzE2MDAyRTAyMDQ4QzA0NjAxNjRBRgorOjEwQTY5MDAwMUY0OEZCRjc4N0ZDMUY0OEMxNkJGRjI5RkNEMTgxNkI2QQorOjEwQTZBMDAwNDI2QjE2MUMwRjFDMUM0QzEwMjM2MDY5MTg0MzYwNjEyMAorOjEwQTZCMDAwQTE2OTk5NDMxRDA0QTE2MUU4NjBBMDY5QzA0NjI4NjFCMQorOjEwQTZDMDAwMTY0QTE3NDk2NDIwRkJGNzZGRkMxNjRBQzA0NjAwOTJGMQorOjEwQTZEMDAwMTU0QjAwMjAzOTFDMzIxQ0ZCRjc2RUZDMTM0OEMxNjg3NworOjEwQTZFMDAwMDgyOUZDRDExMjQ4RkJGNzVERkMxMDIzNjA2OTk4NDNGMAorOjEwQTZGMDAwNjA2MUU4NjAwMTIwRTMyMzFCMDFFMTE4Qzg3MUY4QkMyOAorOjEwQTcwMDAwMDhCQzE4NDcwMDAwMTA0MDQwMDExODAwMDAwMDAwODBGRAorOjEwQTcxMDAwMDQwMkZGRkYwMDAxMTg0MDY4MEUwMDgwMjA1NUZGRkY3MworOjEwQTcyMDAwQjVCNjIxNDA2NDAwMzAwMjQ0ODAyMDQwNDAwMTE4NDAwQQorOjEwQTczMDAwRjQwMUZGRkYwMEI1RkRGNzAxRkYwNjQ4RkJGNzMyRkMwRgorOjEwQTc0MDAwRkRGN0Q2RkVGRUY3MDRGOEZFRjcxNkY4RkVGNzI0RjgzQworOjEwQTc1MDAwMDhCQzE4NDc5MTAzRkZGRjkwQjVGREY3NkJGQzM0NEYyMQorOjEwQTc2MDAwMDAyNEY5NjhGODFENzkzMDAxMjkwRkQxMzE0OUMwNDYxQworOjEwQTc3MDAwRjk2NzMxNDlDMDQ2MDE2MDMwNDlDMDQ2MEM2MDRDNjAwMQorOjEwQTc4MDAwOEM2MENDNjAwQzYxNEM2MThDNjEwNEUwRjkxRDdEMzEwMgorOjEwQTc5MDAwRjk2NzEyQzAwODM4MDA2ODYwMjMwMTY4MTk0MzAxNjAzNgorOjEwQTdBMDAwRjg2RjIwMjMwMTY4MTk0MzAxNjBGODZGNDAyMzAxNjhBNgorOjEwQTdCMDAwOTk0MzAxNjAwMEYwNTRGOEZERjc0RUZDMDBGMDVFRjk5QgorOjEwQTdDMDAwRkRGNzczRjhGRkY3MENGRUZERjcyRUZFRkRGN0I2RkQ2MworOjEwQTdEMDAwRkRGN0MyRkVGREY3NTRGREZERjcwQUZERkRGNzk0RkQwMAorOjEwQTdFMDAwMDBGMDFBRkFGREY3OUNGRkZERjcwQUZGRkRGN0QyRkUxNQorOjEwQTdGMDAwRkRGNzNDRkNGQkY3RENGQUZGRjc5Q0ZGNzEyMzVCMDFFNAorOjEwQTgwMDAwRjgxODA0NzI0NDcyMDcyMzVCMDJGODE4MDQ2M0Y4NjhBRQorOjEwQTgxMDAwMDEyODAyRDFBODIwRkVGN0IxRkQwOTQ4QzA0NjQ0NjJENAorOjEwQTgyMDAwMDBGMDE4RkEwNzQ4RkJGN0JERkI5MEJDMDhCQzE4NDdCRQorOjEwQTgzMDAwNjgwRTAwODAwMDAxMTE0MDA0MDExMTQwMDAwMTExMDA2OAorOjEwQTg0MDAwQzAwMDE4MDAxNThGMjE0MDAwQjUwNDQ4RkJGN0FBRkI5MworOjEwQTg1MDAwRkRGNzVFRkZGREY3MjRGQzA4QkMxODQ3MTU5OTIxNDA2MQorOjEwQTg2MDAwRkEyMTAzNDhDMDQ2NDE2MjQwMjE0MTYyNzA0NzAwMDAxRQorOjEwQTg3MDAwQzAwMDE4MDAwNzQ4NDE2OTA3NEIxOTQzNDE2MTgyNjlDQworOjEwQTg4MDAwOUE0MzgyNjEwMTIyMTIwNUQxNjA4MDY5QzA0NjEwNjEzRAorOjEwQTg5MDAwNzA0NzAwMDA2ODBFMDA4MEZFQUY5QTEwMDBCNTAyNDhCNQorOjEwQThBMDAwRkJGNzgwRkIwOEJDMTg0N0M4NTdGRkZGRjBCNTI0NENFNgorOjEwQThCMDAwMDEyMTA5MDQyMDY4MDE0MDA5MjAyMjRFMjI0RDAwMjk2RgorOjEwQThDMDAwMDVEMTIxNjgwOTBDMDREMTIxNjg4OTBBMDFEM0YwNjBGRgorOjEwQThEMDAwMDBFMDI4NjQxRDQ4RkJGNzY1RkIxRDRGMUQ0OTg4Njk5MgorOjEwQThFMDAwMDEzMDg4NjEzODdBMDAyODAyRDE3ODdBMDAyODFGRDA5OAorOjEwQThGMDAwMTk0OEZCRjc1N0ZCMTk0OEZCRjc1NEZCMDAyOEZBRDExRQorOjEwQTkwMDAwMzg3QTAwMjgwMkQwMTY0OEZCRjc0Q0ZCMDEyMTA5MDRENQorOjEwQTkxMDAwMjA2ODAxNDAxNDIwMDAyOTA1RDEyMTY4MDkwQzA0RDFDOAorOjEwQTkyMDAwMjE2ODg5MEEwMUQzRjA2MDAxRTAyODY0RkZFN0ZFRTdBRgorOjEwQTkzMDAwRkZGNzY1RkQwQjQ4RkJGNzM1RkJGRkY3QUZGRkNERTdGMgorOjEwQTk0MDAwMDAwMDEwNDA0MDAxMTgwMDAwMDAwMDgwMDQwMkZGRkZEQQorOjEwQTk1MDAwODgxQzAwODAwODgzMjA0MEY0MDFGRkZGQjUwN0ZGRkYzQgorOjEwQTk2MDAwMDAwMEZGRkY5OTlGMjE0MDAwMjAwNzRBMDEyMTA5MDVBRgorOjEwQTk3MDAwNTA2MUM4NjBEMDYxQzg2MTAzMjNEQjA0MDM0QTAxMjEzMAorOjEwQTk4MDAwRDE2MzU4NjBGQ0U3MDAwMDY4MEUwMDgwQzAwMDE4MDAyQQorOjEwQTk5MDAwODBCNUMwQjAwMTIyMDAyMTBBMjBGQ0Y3RDFGRjA3MUNCRQorOjEwQTlBMDAwRkYyRjI4RDA2OTQ2RkYyMjM4MUMwMTMyRkRGNzU0RjlFOQorOjEwQTlCMDAwRkYyMzAxMzM5ODQyMUJEMTBEOTgwMDA5MThEMzM4MUM4RQorOjEwQTlDMDAwRkRGNzhERjgwRTQ5MDEyMjEyMDQwODY4MDI0MDBENDg3NworOjEwQTlEMDAwMDVEMTBBNjgxMjBDMDZEMTA5Njg4OTBBMDNEMzBBNDkwRAorOjEwQTlFMDAwQzA0NkM4NjAwMkUwMDk0OUMwNDYwODY0RkZGN0JDRkZFMgorOjEwQTlGMDAwMzgxQ0ZERjc3NEY4NDBCMDgwQkMwOEJDMTg0NzAwMDA1NAorOjEwQUEwMDAwMDAwMDEwNDAwNzgwMDAwMDQwMDExODAwMDAwMDAwODA5NgorOjEwQUExMDAwMDBCNTE3NDkwMTIyMTIwNDA4NjgwMjQwMDYyMDAwMkFFNgorOjEwQUEyMDAwMDVEMTBBNjgxMjBDMDZEMTA5Njg4OTBBMDNEMzExNDlCNQorOjEwQUEzMDAwQzA0NkM4NjAwMkUwMTA0OUMwNDYwODY0MDMyMEZFRjcyMworOjEwQUE0MDAwRDNGQ0ZCRjcwREZGMDEyMzE4NDNGQkY3RTdGRkZGRjdFQworOjEwQUE1MDAwODNGRUZGRjc5REZGRkZGNzA1RkVGRkY3RjVGRUZGRjcwQgorOjEwQUE2MDAwMDlGRkZGRjc5QkZERkZGNzIxRkYwOEJDMTg0NzAwMDAxNworOjEwQUE3MDAwMDAwMDEwNDA0MDAxMTgwMDAwMDAwMDgwRjBCNDQ2NEE3OQorOjEwQUE4MDAwMDEyMUM5MDM0NTREMTkyM0RCMDFFQzE4QTE2MTI4ODg3OAorOjEwQUE5MDAwNDAwNDQzNEJDMDE4ODcxQTA0MjBBRjYwNDE0RUMwNDZBMworOjEwQUFBMDAwQjA2MTA4MjBDODIzNDM0M0JCNDIyMUQ5NDEwMDNENEUzOQorOjEwQUFCMDAwQzA0NjMxNjFCNjY5MjAyMzlCMUIzQTRFQzA0NkYzNjEwNAorOjEwQUFDMDAwMTAzQjMzNjI4QjAwRkYxQTQwMDg4MTQyMTdEM0I4MjMzMgorOjEwQUFEMDAwNDM0M0JCNDIwOEQ5NDExRTMyNEJDMDQ2OTk4MUQ5ODFCQworOjEwQUFFMDAwNDAwMDAyMzg1ODYxMEFFMDAxMzA4MTQyRUZEMjA2RTBBRQorOjEwQUFGMDAwMkM0RUIzNjkwMTMzQjM2MTQwMDA4ODQyRDJEOTJBNDk1MAorOjEwQUIwMDAwMDAyMEEzNjk5QjA4MDdEMDI4NEI4NzAwQ0I1MUE3Njk3OQorOjEwQUIxMDAwQkYwODAxMzA4NzQyRjhEODIyNDlDMDQ2OEE2MjhDODkzMgorOjEwQUIyMDAwNTgyMDYwNDM4NzE4MDAyMDAwMjIwMDJDMEFERDU4MjM5QgorOjEwQUIzMDAwNDM0MzhDNkFFMzE4MDEzMDAwMDQwMDBDOUE2MDhCODk0RgorOjEwQUI0MDAwODM0MkY0RENDRjYyQ0M4OTYwMDAwMDE5NDAwMUM3MTk1MAorOjEwQUI1MDAwMDAyMDAwMkMwQkRENDMwMDFCMTg1QjAxQ0M2QUUzMThCRQorOjEwQUI2MDAwMDEzMDAwMDQwMDBDOUE2MENCODk4MzQyRjNEQzRGNjIxMQorOjEwQUI3MDAwMDAyMDBCNjkwMDJCMDdEOTg3MDA0QjZBQzA0NkRBNTFDOQorOjEwQUI4MDAwMEI2OTAxMzA4MzQyRjdEODQ5NkE4MDAwMDgxODA0MzhGRAorOjEwQUI5MDAwMjg2MUYwQkM3MDQ3MDAwMEIwQkUyMTQwNjgwRTAwODAwNAorOjEwQUJBMDAwMDAwMDIwNDA0QzJBMDA4MDAwMDAyMDQwMDBBRERFMDA2NAorOjEwQUJCMDAwMEE0ODAxMjMxQjA2NDE2OTk5NDMxQTA5NDE2MUQxNjA4MgorOjEwQUJDMDAwMDAyMUExMjI1MjAzOTE2MTFCMjNEQjAxQzAxODgxNjE4NgorOjEwQUJEMDAwMDEyMDAwMDY1OTA1MDg2MDcwNDcwMDAwNjgwRTAwODBEQgorOjEwQUJFMDAwODBCNDAyMUMwQjQ4MUIyM0RCMDFDMzE4OUE2MTAxMjNBQworOjEwQUJGMDAwMUIwNjQyNjkxQTQzNDI2MTg3Njk5RjQzMDEyMzFCMDU3MworOjEwQUMwMDAwODc2MURBNjA4MDY5QzA0NjE4NjFBMTIwNDAwMzgxNjFENAorOjEwQUMxMDAwODBCQzcwNDc2ODBFMDA4MDgwQjVGRkY3QzlGRjAwMjAzOAorOjEwQUMyMDAwMDBGMDIwRjgwMDIwMDk0OTAwMjIwMzAxNUYxODMzMjNCNworOjEwQUMzMDAwOUIwMUZCMTg5QTYyMDEzMDBCMjhGNkQzMDQ0ODAxMjJDRAorOjEwQUM0MDAwMDAyMTAwRjAzM0Y4ODBCQzA4QkMxODQ3NjgwRTAwODA3MworOjEwQUM1MDAwMUQzRUZGRkYwMEI1MDI0ODAwRjAwNEY4MDhCQzE4NDc4RAorOjEwQUM2MDAwQTg2MTAwMDA4MEI0MDEyMjEyMDUwRjRCQTEyMTQ5MDMwNQorOjEwQUM3MDAwMDAyODBFRDBDODYxMTgxQzU5Njk1MzAxMTk0MzQxNjE1RAorOjEwQUM4MDAwODc2OTlGNDM4NzYxRDE2MDgwNjlDMDQ2MTA2MTgwQkMzRAorOjEwQUM5MDAwNzA0NzE4MUM1RjY5MDEyMzVCMDY5RjQzNDc2MUQ3NjBCQgorOjEwQUNBMDAwMDAyMEM4NjFGM0U3MDAwMDY4MEUwMDgwQjBCNDA3MUMwNAorOjEwQUNCMDAwMDAyMDE3NEMwMzAxMUQxOTMzMjM5QjAxRUIxODlENkFEQgorOjEwQUNDMDAwQkQ0MjA1RDExRDZCOTU0MjAyRDFEQjZBOEI0MjFDRDA3RgorOjEwQUNEMDAwMDEzMDBCMjhFRUQzMDAyMDAzMDExRDE5MzMyMzlCMDEwMworOjEwQUNFMDAwRUIxODlCNkEwMDJCMDlEMTAzMDExQzE5MzMyMzlCMDEyQworOjEwQUNGMDAwRTMxODFBNjNEOTYyNUE2MzlGNjIwMkUwMDEzMDBCMjg5RAorOjEwQUQwMDAwRUFEMzBCMjgwMUQxMDAyMEMwNDNCMEJDNzA0NzAwMDAzQgorOjEwQUQxMDAwNjgwRTAwODA5MEI0MDExQzAwMjIwMTIwMTY0RjAxRTA1MworOjEwQUQyMDAwMDAyQTA3RDEwMzAxREMxOTMzMjM5QjAxRTMxODlCNjkzNworOjEwQUQzMDAwOEI0MjExRDEwMjAxRDIxOTMzMjM5QjAxRDIxODkzNkE5RAorOjEwQUQ0MDAwQzA0NjkzNjFEMzZBQzA0NkQzNjExMzZCQzA0NjEzNjI5OQorOjEwQUQ1MDAwNTM2QkMwNDY1MzYyMDEyMjAxMzAwQjI4RTBEMzA3NEJFRQorOjEwQUQ2MDAwMDAyQTAyRDE5QTY4OEE0MjAzRDEwMDIxOTk2MDkwQkNERQorOjEwQUQ3MDAwNzA0NzAwMjBDMDQzRkFFNzY4MEUwMDgwRTgxQjAwODA5RgorOjEwQUQ4MDAwMEIyODE3REEwQzQ5MDEyMzVCMDY4QTY5MTM0MzAxMjI1OQorOjEwQUQ5MDAwMTIwNThCNjExMzYxMDAwMTQwMTgzMzIzOUIwMUMwMTgxOQorOjEwQURBMDAwMDM2QkMwNDY0MzYzNTMwMTg4Njk5ODQzODg2MTEwNjEwRgorOjEwQURCMDAwMDEyMDcwNDcwMDIwRkNFNzY4MEUwMDgwOTBCNDA4NEEyQworOjEwQURDMDAwRDA2OTAwMjEwNzRGRDM2OTgzNDIwMkQ5RkMxQTIwMThBOQorOjEwQUREMDAwMDBFMEMwMUEwOTE4MTgxQ0I5NDJGNEQ5OTBCQzcwNDc5OQorOjEwQURFMDAwMDAyMDE0NDBBODYxMDAwMDkwQjUwNzFDMDAyNDAwMkYyQgorOjEwQURGMDAwMDREM0ZGRjdFM0ZGMDEzNEJDNDJGQUQ5OTBCQzA4QkM4RQorOjA0QUUwMDAwMTg0NzAwMDBFRgorOjAwMDAwMDAxRkYKKy8qIHZlciAwMy4wMDEuMDA4ICovCisvKgorICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCisgKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKKyAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKKyAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCisgKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKKyAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KKyAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggNDY2MTA2Zi4uYzZhZjYxYiAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTM1LDcgKzM1LDcgQEAKIGZ3LXNoaXBwZWQtJChDT05GSUdfQ09NUFVUT05FKSArPSBpbnRlbGxpcG9ydDIuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0NIRUxTSU9fVDMpICs9IGN4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4gXAogCQkJCSAgIGN4Z2IzL3QzY19wc3JhbS0xLjEuMC5iaW4gXAotCQkJCSAgIGN4Z2IzL3QzZnctNy4wLjAuYmluCisJCQkJICAgY3hnYjMvdDNmdy03LjEuMC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRFZCX1RUVVNCX0JVREdFVCkgKz0gdHR1c2ItYnVkZ2V0L2RzcGJvb3Rjb2RlLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19FMTAwKSArPSBlMTAwL2QxMDFtX3Vjb2RlLmJpbiBlMTAwL2QxMDFzX3Vjb2RlLmJpbiBcCiAJCQkgICAgIGUxMDAvZDEwMmVfdWNvZGUuYmluCkBAIC00OSw4ICs0OSwxMCBAQAogCQkJCSAgICAgc2IxNi9pbWFfYWRwY21fY2FwdHVyZS5jc3AKIGZ3LXNoaXBwZWQtJChDT05GSUdfU05EX1lNRlBDSSkgKz0geWFtYWhhL2RzMV9jdHJsLmZ3IHlhbWFoYS9kczFfZHNwLmZ3IFwKIAkJCQkgICB5YW1haGEvZHMxZV9jdHJsLmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX1RFSFVUSSkgKz0gdGVodXRpL2JkeC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfVElHT04zKSArPSB0aWdvbi90ZzMuYmluIHRpZ29uL3RnM190c28uYmluIFwKIAkJCSAgICAgICB0aWdvbi90ZzNfdHNvNS5iaW4KK2Z3LXNoaXBwZWQtJChDT05GSUdfVFlQSE9PTikgKz0gM2NvbS90eXBob29uLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19VU0JfREFCVVNCKSArPSBkYWJ1c2IvZmlybXdhcmUuZncgZGFidXNiL2JpdHN0cmVhbS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfVVNCX0VNSTI2KSArPSBlbWkyNi9sb2FkZXIuZncgZW1pMjYvZmlybXdhcmUuZncgXAogCQkJCSAgZW1pMjYvYml0c3RyZWFtLmZ3CmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggNTI0MTEzZi4uMDBiNmUzYyAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIEZpbGU6IGN4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4uaWhleAogRmlsZTogY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbi5paGV4Ci1maWxlOiBjeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4CitmaWxlOiBjeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4CiAKIExpY2Vuc2U6IEdQTHYyIG9yIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UsIG5vIHNvdXJjZSB2aXNpYmxlCiAKQEAgLTQzNSwzICs0MzUsNjEgQEAKICBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0uCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogVEVIVVRJIC0gVGVodXRpIE5ldHdvcmtzIDEwRyBFdGhlcm5ldAorCitGaWxlOiB0ZWh1dGkvYmR4LmJpbgorCitMaWNlbmNlOgorCisgQ29weXJpZ2h0IChDKSAyMDA3IFRlaHV0aSBOZXR3b3JrcyBMdGQuCisKKyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyBhY2NvbXBhbnlpbmcgaXQuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogVFlQSE9PTiAtIDNjcjk5MCBzZXJpZXMgVHlwaG9vbgorCitGaWxlOiAzY29tL3R5cGhvb24uYmluCisKK0xpY2VuY2U6CisvKgorICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCisgKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKKyAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKKyAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCisgKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKKyAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KKyAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCisgKi8KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4wLjAuYmluLmloZXggYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjYxMTc5Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4wLjAuYmluLmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxODgxICswLDAgQEAKLToxMDAwMDAwMDYwMDA3NDAwMjAwMzgwMDAyMDAzNzAwMDAwMDAxMDAwRDYKLToxMDAwMTAwMDAwMDAyMDAwRTEwMDAyODQwMDA3MDAwMEUxMDAwMjg4RTcKLToxMDAwMjAwMDAwMDEwMDAwRTAwMDAwMDBFMDAwMDBBMDAxMDAwMDAwNkUKLToxMDAwMzAwMDQ0NDQ0NDQwRTMwMDAxODMyMDAyMDAwMDIwMDFFMDAwMkEKLToxMDAwNDAwMDIwMDFGRjEwMUZGRkQwMDAxRkZGQzAwMEUzMDAwNDNDOTEKLToxMDAwNTAwMDAyMDAwMDAwMjAwMDY5NTQxRkZGQzU4MDIwMDA2OTlDMzkKLToxMDAwNjAwMDFGRkZDNTg0MjAwMDY5REMxRkZGQzU4ODIwMDA2QTUwN0YKLToxMDAwNzAwMDFGRkZDNThDMjAwMDAzQzBDMDAwMDBFNDMxMDBFQTMxM0UKLToxMDAwODAwMDAwQTEzMTAwQTAzMTAzMDIwMDAyRUQzMDZFMkEwNTAwMEMKLToxMDAwOTAwMEVEMzEwMDAyMDAwMjE2MDAxMkZGREJDMDMwMTRGRkRBNUYKLToxMDAwQTAwMEQzMEZEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzNDcKLToxMDAwQjAwMDBGRDMwRkQzMEYxMkZGRDUyMzBBMDAyNDBBMDBEMzBGNEEKLToxMDAwQzAwMEQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDMwRkQzMjcKLToxMDAwRDAwMDBGRDMwRjE0RkZDRTAzNDIxRjE0RkZDQjAzNDIxRjEyOTYKLToxMDAwRTAwMEZGQ0NDMDMwMkQzNzMwMkQzNzM0MkQzNzM4MkQzNzNDRUQKLToxMDAwRjAwMDIzM0QwMTcyMzNFRDAwMDIwMDEyRkZDNEMwMzAyRjM3RTAKLToxMDAxMDAwMDAwMkYzNzEwMkYzNzIwMkYzNzMwMjMzRDAxNzIzM0VENkEKLToxMDAxMTAwMDAwMDIwMDEyRkZCRUMwMzAyNzM3MDAyNzM3MTAyNzM3RjQKLToxMDAxMjAwMDIwMjczNzMwMjMzRDAxNzIzM0VEMDMwMjAwMTJGRkI5NUYKLToxMDAxMzAwMDEzRkZCQTBDMDIwMDkzMjAxMkZGQjkxM0ZGQjkwQzAyOEYKLToxMDAxNDAwMDAwOTMyMDEyRkZCOEMwMzE5MzIwODIyMDEyRkZCNzEzMTIKLToxMDAxNTAwMEZGQjc5MzIwMTJGRkI3MTVGRkIzMTZGRkI2QzAzMEQ3MTUKLToxMDAxNjAwMDIwMDU2NjAxNjAwMDFCMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMDAxNzAwMDA0MzYwNTAwMDIwMEQzMEZEMzBGNzUzMTE0MDc0NzE0NUUKLToxMDAxODAwMDA1MzMwQzA3MDQ0Mzc2MzFFNjA0MzYwNTc1MzlFRDAwNzYKLToxMDAxOTAwMDAyMDAxMkZGQTcxNUZGQTNDMDMwRDcyMDYwMDAwNjAwQTEKLToxMDAxQTAwMDA3NDcxNDA1MzMwQzA3MDQ0MzA0M0UwNTc1MzlGMDAzNzMKLToxMDAxQjAwMDAyMDAxMkZGQTFDMDMwMTRGRkExRDMwRkQzMEZEMzBGNDEKLToxMDAxQzAwMDkzNDBCNDQ0NzI0OUYyRDMwRkQzMEZEMzBGMTRGRjlCNjMKLToxMDAxRDAwMDgzNDAxNEZGOUI4MzQwMTJGRjlCMjMwQTAwMTRGRjlBNjUKLToxMDAxRTAwMEQzMEZEMzBGRDMwRjkzNDBCNDQ0NzI0OUYyRDMwRkQzM0MKLToxMDAxRjAwMDBGRDMwRjE0RkY5NTgzNDAxMkZGOTVDQTIwODMyMDg0RUMKLToxMDAyMDAwMDIxODUyMkJDMjI3NDNCMTA4NjUwQjQ1NTk2MzBCNDMzRkQKLToxMDAyMTAwMDc0MzNGNDYzRkZFNjAwMDAwMDY1M0ZFMDY1NUZERDEyQzQKLToxMDAyMjAwMEZGN0NDMDMwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDQ0YKLToxMDAyMzAwMDIzM0QwMTcyMzNFRDAzMDIwMDAwMDIwMDEyRkY3QUMwNzkKLToxMDAyNDAwMDMyMDMyRTA1MDMwMjAwMTJGRjc4MTNGRjgxOTMyMEMwQjIKLToxMDAyNTAwMDExMDE0OTMxMDA0ODMxMDEwMjAwQzAwMDE0RkY3RTA0NDEKLToxMDAyNjAwMEQyMzExNUZGN0Q5NDUwMTRGRjdEMDREMzMxMTVGRjdDRUUKLToxMDAyNzAwMDk0NTAxNEZGN0MwNEQ0MzExNUZGN0MyNDU2MDAxNEZGRTUKLToxMDAyODAwMDdCMDRENTMxMTVGRjdCMjQ1NjAwMTBGRjdBMDMwMDAwNTQKLToxMDAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMDAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMDAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMDAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMDAzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMDAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMDAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMDAzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMDAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMDAzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMDAzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMDAzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMDAzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMDAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMDA0MjAwMDYzRkZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwQTEKLToxMDA0NDAwMDFGRkMwMDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwQUIKLToxMDA0NTAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEUzMDAwNUM4MDYKLToxMDA0NjAwMDFGRkZDMDAwMUZGRkMwMDBFMzAwMDVDODFGRkZDMDAwNDIKLToxMDA0NzAwMDFGRkZDMDE4RTMwMDA1QzgxRkZGQzAxODFGRkZDMDE4RUEKLToxMDA0ODAwMEUzMDAwNUUwMUZGRkMwMTgxRkZGQzI4OEUzMDAwNUUwN0UKLToxMDA0OTAwMDFGRkZDMjg4MUZGRkMyODhFMzAwMDg1MDFGRkZDMjkwRTEKLToxMDA0QTAwMDFGRkZDNTdDRTMwMDA4NTAyMDAwMDAwMDIwMDAwMTZBMDcKLToxMDA0QjAwMEUzMDAwQjNDMjAwMDAxODAyMDAwMDE4MEUzMDAwQ0E4MzkKLToxMDA0QzAwMDIwMDAwMjAwMjAwMDAyMDNFMzAwMENBODIwMDAwMjFDMTAKLToxMDA0RDAwMDIwMDAwMjIwRTMwMDBDQUMyMDAwMDIyMDIwMDAwMjI2QjUKLToxMDA0RTAwMEUzMDAwQ0IwMjAwMDAyM0MyMDAwMDI0MEUzMDAwQ0I4MDYKLToxMDA0RjAwMDIwMDAwMjQwMjAwMDAyNDlFMzAwMENCQzIwMDAwMjRDMTYKLToxMDA1MDAwMDIwMDAwMjUwRTMwMDBDQzgyMDAwMDI1MDIwMDAwMjU5RDUKLToxMDA1MTAwMEUzMDAwQ0NDMjAwMDAyNUMyMDAwMDI2MEUzMDAwQ0Q4NTkKLToxMDA1MjAwMDIwMDAwMjYwMjAwMDAyNjlFMzAwMENEQzIwMDAwMjZDNjUKLToxMDA1MzAwMDIwMDAwMjcwRTMwMDBDRTgyMDAwMDI3MDIwMDAwMjc5MjUKLToxMDA1NDAwMEUzMDAwQ0VDMjAwMDAyOEMyMDAwMDI4Q0UzMDAwQ0Y4OEQKLToxMDA1NTAwMDIwMDAwMjkwMjAwMDAyOTNFMzAwMENGODIwMDAwMkFDN0YKLToxMDA1NjAwMDIwMDAwMkIwRTMwMDBDRkMyMDAwMDJEMDIwMDAwMkYyQzgKLToxMDA1NzAwMEUzMDAwRDAwMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDI0RDEKLToxMDA1ODAwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQyNDIwMDAwM0IwREUKLToxMDA1OTAwMDIwMDAwM0IwRTMwMDBEMjQyMDAwMDNCMDIwMDAwM0IwQ0UKLToxMDA1QTAwMEUzMDAwRDI0MjAwMDAzQjAyMDAwNkI3NEUzMDAwRDI0NTEKLToxMDA1QjAwMDIwMDA2Qjc0MjAwMDZCNzRFMzAwNzRFODAwMDAwMDAwRkUKLToxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMDFGRkMwMDAwRjUKLToxMDA1RDAwMDFGRkZDNTgwMUZGRkM2NzAyMDAwNkI3ODIwMDA2Qjc4NUUKLToxMDA1RTAwMERFRkZGRTAwMDAwMDA4MENERUFEQkVFRjFGRkZDMjkwNzQKLToxMDA1RjAwMDFGRkNGRTAwMUZGRkMwODQxRkZGQzVDMDMwMDAwMDAwQUQKLToxMDA2MDAwMDAwM0ZGRkZGODA0MDAwMDAxMDAwMDAwMDA4MEZGRkZGQzgKLToxMDA2MTAwMDFGRkZDMjVEMDAwRkZGRkY4MDRGRkZGRjgwMDAwMDAwNDMKLToxMDA2MjAwMDAwMDAwODgwQjAwMDAwMDU2MDUwMDAwMDYwMDAwMDAwN0QKLToxMDA2MzAwMDQwMDAwMDExMzUwMDAwMDA0MTAwMDAwMDEwMDAwMDAxRTIKLToxMDA2NDAwMDIwMDAwMDAwMDAwMDEwMDA3RkZGRkZGRjQwMDAwMDAwQkUKLToxMDA2NTAwMDA1MDAwMDAwODAwMDAwMTkwNDAwMDAwMDAwMDAwODAwRjAKLToxMDA2NjAwMDEwMDAwMDA1ODA2MDAwMDA3MDAwMDAwMDIwMDAwMDA5RkMKLToxMDA2NzAwMDAwMUZGODAwODAwMDAwMUVBMDAwMDAwMEY4MDAwMDAwMkQKLToxMDA2ODAwMDA4MDAwMDAwMDdGRkZGRkYxODAwMDAwMDAxMDA4MDAxQzQKLToxMDA2OTAwMDQyMDAwMDAwMUZGRkMyMEQxRkZGQzBDQzAwMDEwMDgwMDAKLToxMDA2QTAwMDYwNDAwMDAwMUEwMDAwMDAwQzAwMDAwMDAwMDAzMDAwNTQKLToxMDA2QjAwMDYwMDAwODAwODAwMDAwMUMwMDAxMDAwMDgwMDAwMDFBOUIKLToxMDA2QzAwMDgwMDAwMDE4RkMwMDAwMDA4MDAwMDAwMTAwMDA0MDAwRDUKLToxMDA2RDAwMDgwMDAwNDAwMDMwMDAwMDA1MDAwMDAwM0ZGRkZCRkZGODQKLToxMDA2RTAwMDAwMDAwRkZGMUZGRkMzOTBGRkZGRjAwMDAwMDAxNkQwQjcKLToxMDA2RjAwMDAwMDBGRkY3QTUwMDAwMDAxRkZGQzRBMDFGRkZDNDUxQUEKLToxMDA3MDAwMDAwMDEwMDA4MDAwMDBCMjAyMDJGRkY4MDFGRkZDNDQ1QzAKLToxMDA3MTAwMDAwMDAyQzAwRkZGRUZGRjgwMEZGRkZGRjFGRkZDNTY4NzEKLToxMDA3MjAwMDAwMDAyMDAwRkZGRkRGRkYwMDAwRkZFRjAxMDAxMTAwQ0QKLToxMDA3MzAwMDFGRkZDNDYxMUZGRkMzQzIxRkZGQzQxMDFGRkZDNTkwNkUKLToxMDA3NDAwMEZGRkZFRkZGMDAwMEZGRkIxRkZGQkU5MEZGRkZGN0ZGNjMKLToxMDA3NTAwMDFGRkZDMDU0MDAwMEZGRkQwMDAxRkJEMDFGRkZDNUIwMEMKLToxMDA3NjAwMDFGRkZDNjYwMUZGRkM1OTFFMEZGRkUwMDAwMDA4MDAwNzQKLToxMDA3NzAwMDFGRkZDNTJDMUZGRkM1QjQxRkZGQzA1ODFGRkZDNEQwRUIKLToxMDA3ODAwMDFGRkNGRkQ4MDAwMTAwODFFMTAwMDYwMDAwMDAyNzEwRDcKLToxMDA3OTAwMDFGRkNGRTMwMUZGQ0ZFNzBFMTAwMDIwMDFGRkZDNTI4OTkKLToxMDA3QTAwMDFGRkZDNTQwMDAwM0QwOTAxRkZGQzU1NDJCNTA2MzgwMkUKLToxMDA3QjAwMDJCNTA3OTgwMkI1MDkwODAyQjUwQTY4MDFGRkZDNDU5NUUKLToxMDA3QzAwMDAxMDAxMTBGMjAyRkZFMDAyMDMwMDA4MDIwMkZGRjAwOUQKLToxMDA3RDAwMDAwMDBGRkZGMDAwMUZGRjgyQjUwQjIwMDJCNTBCMjA4QzEKLToxMDA3RTAwMDAwMDEwMDEwMkI1MEIxODAyQjUwQjI4MDJCNTBCQTAwNkEKLToxMDA3RjAwMDAwMDEwMDExMkI1MEJEMjgyQjUwQkM4MDJCNTBCREEwRjgKLToxMDA4MDAwMDIwMzAwMDAwREZGRkZFMDA1MDAwMDAwMjAwQzAwMDAwQUEKLToxMDA4MTAwMDAyMDAwMDAwRkZGRkY3RjQxRkZGQzA1QzAwMEZGODAwQUMKLToxMDA4MjAwMDA0NDAwMDAwMDAxMDAwMDAwQzQwMDAwMDFDNDAwMDAwQ0MKLToxMDA4MzAwMEUwMDAwMEEwMUZGRkM1MzAxRkZEMDAwODFGRkZDNTQ0REEKLToxMDA4NDAwMDFGRkZDNTU4MUZGRkM1NkNFMTAwMDY5MEUxMDAwNkVDRDQKLToxMDA4NTAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDA4NjAwMDIwMTAwMDQwMjAxMDAwNDAyMDEwMDA0MDIwMTQwMDgwODQKLToxMDA4NzAwMDIwMEMwMDAwMjAwQzAwMDAyMDBDMDAwMDIwMTAwMDQwODQKLToxMDA4ODAwMDIwMTQwMDgwMjAxNDAwODAyMDE0MDA4MDIwMTgwMEMwNTQKLToxMDA4OTAwMDIwMUMwMTAwMjAxQzAxMDAyMDFDMDEwMDIwMjAwMTQwMjAKLToxMDA4QTAwMDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMDIwMUMwMTAwMjMKLToxMDA4QjAwMDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMDIwMUMwMTAwMTMKLToxMDA4QzAwMDIwMjAwMTQwMjAyMDAxNDAyMDIwMDE0MDIwMjAwOTQwMUMKLToxMDA4RDAwMDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MDIwMjQwOTgwQjAKLToxMDA4RTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMTQKLToxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMDA5MDAwMDIwMDA1MjU0MjAwMDUxMjQyMDAwNTI1NDIwMDA1MjU0MDAKLToxMDA5MTAwMDIwMDA1MDYwMjAwMDUwNjAyMDAwNTA2MDIwMDA0RTk0NjUKLToxMDA5MjAwMDIwMDA0RTk0MjAwMDRFOEMyMDAwNERGQzIwMDA0Q0EwNTYKLToxMDA5MzAwMDIwMDA0QTg4MjAwMDQ4ODgwMDAwMDAwMDAwMDAwMDAwRDUKLToxMDA5NDAwMDIwMDA1MjI0MjAwMDUwRjAyMDAwNTE5NDIwMDA1MTk0QTcKLToxMDA5NTAwMDIwMDA0RjM4MjAwMDRGMzgyMDAwNEYzODIwMDA0RjM4RkIKLToxMDA5NjAwMDIwMDA0RjM4MjAwMDRFODQyMDAwNEYzODIwMDA0QkM0MTgKLToxMDA5NzAwMDIwMDA0QTNDMjAwMDQ4MzgwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDA5ODAwMDIwMDAwQjcwMjAwMDM4NEMyMDAwMDRDMDIwMDA0NDJDQjQKLToxMDA5OTAwMDIwMDAwQjY4MjAwMDNGNDAyMDAwMDNGMDIwMDA0M0VDQzMKLToxMDA5QTAwMDIwMDA0ODE0MjAwMDNDNTAyMDAwM0I2QzIwMDAzN0M4MzkKLToxMDA5QjAwMDIwMDAzNjU0MjAwMDMzQ0MyMDAwMkVGODIwMDAzOUNDMDMKLToxMDA5QzAwMDIwMDAyQjVDMjAwMDI3OTQyMDAwNjQ4QzIwMDAyMzIwMzIKLToxMDA5RDAwMDIwMDAyMDA0MjAwMDFGQjgyMDAwMUNBNDIwMDAxN0IwMTUKLToxMDA5RTAwMDIwMDAxNEYwMjAwMDBEOEMyMDAwMEJCNDIwMDAxMEJDNUYKLToxMDA5RjAwMDIwMDAxMkEwMjAwMDQxMzAyMDAwM0MwNDIwMDAwQjc4OTEKLToxMDBBMDAwMDIwMDAwNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMDBBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMDBBODAwMDAwMDAwMDAwMzI2NDAwMDAwMDAwMDAwMDMyNjQwMDAwM0EKLToxMDBBOTAwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwMzYKLToxMDBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMDBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwRjYKLToxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMDBCMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMDBCMTAwMDAwMDAwMDAwMDA0MzIzODAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUM5NDAxQzQKLToxMDBCNDAwMDVEOTQwMjVFOTQwMzVGOTQwMDQzMDAwMDAwMDAwMDAwODcKLToxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUM5MDAxODgKLToxMDBCODAwMDVEOTAwMjVFOTAwMzVGOTAwMDUzMDAwMDAwMDAwMDAwNDMKLToxMDBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMDBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUM5NDAwMDUKLToxMDBCQzAwMDFEOTAwMTlEOTQwMjlFOTQwMzlGOTQwNDA4OTQwNTA5MkUKLToxMDBCRDAwMDk0MDYwQTk0MDcwQjk0MDA0MzAwMDAwMDAwMDAwMDAwRjQKLToxMDBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMDBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUM5MDAxQzgKLToxMDBDMDAwMDlEOTAwMjlFOTAwNzFEOTAwMzlGOTAwNDc4OTAwNTc5MTcKLToxMDBDMTAwMDkwMDY3QTkwMDc3QjkwMDA1MzAwMDAwMDAwMDAwMDAwQ0YKLToxMDBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMDBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREM5NDAwNDQKLToxMDBDNDAwMDFEOTAwMUREOTQwMkRFOTQwM0RGOTQwNDA0OTQwNTA1RjUKLToxMDBDNTAwMDk0MDYwNjk0MDcwNzk0MDgwODk0MDkwOTk0MEEwQTk0Q0MKLToxMDBDNjAwMDBCMEI5NDAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREM5MDAxMDcKLToxMDBDODAwMEREOTAwMkRFOTAwQjFEOTAwM0RGOTAwNEI0OTAwNUI1NUIKLToxMDBDOTAwMDkwMDZCNjkwMDdCNzkwMDhCODkwMDlCOTkwMEFCQTkwMzQKLToxMDBDQTAwMDBCQkI5MDAwNTMwMDAwMDA2M0ZGRkMwMDIwMDA2OTMwODQKLToxMDBDQjAwMDEwRkZGRjBBMDAwMDAwMDAyMDAwNjk1NDAwRDIzMTEwMkMKLToxMDBDQzAwMEZGRkUwQTAwMDAwMDAwMDAyMDAwNjk5QzAwRDMzMTEwRTQKLToxMDBDRDAwMEZGRkUwQTAwMDAwMDAwMDAyMDAwNjlEQzAwRDQzMTEwOTMKLToxMDBDRTAwMEZGRkUwQTAwMDAwMDAwMDAyMDAwNkE1MDAwRDUzMTEwMEQKLToxMDBDRjAwMEZGRkUwQTAwMDAwMDAwMDA2M0ZGRkMwMEUwMDAwMEEwMEYKLToxMDBEMDAwMDEyRkZGNzgyMjAwMjgyNTdDODIxNjNGRkZDMTJGRkYzMTMKLToxMDBEMTAwMDAzRTgzMDA0RUUzMDA1QzAzMDkzMjA5NDIxOTUyMjYzMUYKLToxMDBEMjAwMEZGRkMwMDAwMUZGRkQwMDAwMDA0MDAyMDFGRkZDNTgwNTMKLToxMDBEMzAwMDFGRkZDNjcwMjAwQTAwMTFGRkZCMTNGRkZCMDNFNjMxMDMKLToxMDBENDAwMDAxMDIwMDE2RkZGQTE3RkZGQUQzMEY3NzZCMDY5MDYwQzcKLToxMDBENTAwMEI0NjY3NzYzRjg1NDE1MjY1NDE5RDkwRjE0MDA2M0ZGNEQKLToxMDBENjAwMEY5MDAwMDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNkMwMDgKLToxMDBENzAwMEM3MUFFRjA2MEQ0OTExRDgzMEQ3MjAxQkVGMDVCQzIyNEEKLToxMDBEODAwMDg1NzJBQjc2ODM3MTA1NDUwQjk1NzIwOTMzMEMyMzc2MUEKLToxMDBEOTAwMDAxNzIzQjA1MjMzRDA4MjM3NjAxQTM5RDE5RUVGRTdEREMKLToxMDBEQTAwMDYzMjZDMDIxQzBFMDAzMkUzODBFMEU0MkM4RUUyOUE2RUQKLToxMDBEQjAwMDdFNkQ0QTA1MDA4MDg4MDAzMDhDODI3MUQxMEZDMEYwQjIKLToxMDBEQzAwMDA4MkYzODdGQzBFQTYzRkZFNDkyMTAwMzdGMENBQkZGNkIKLToxMDBERDAwMDBGM0QxMkRCODAyRURDMTAwRTRFMzZDMDIxQzA1MDAzQkEKLToxMDBERTAwMDI1MzgyMjEyMDAwNTA1NDJDQjUwMjlBNjdFNkRFQTA1NjIKLToxMDBERjAwMDAwQjA4ODAwMzA4Q0JDNzZDMDUwQThGM0MwODEwNjg1NTYKLToxMDBFMDAwMDM4MDUwNTQyQ0E1MTI5QTY3RTBENDgwQ0QzMEY2RDhBQkMKLToxMDBFMTAwMDA1MDAzMDg4MDAyMDhDODI3MUQxMEYwMEMwNjFDMDUwNjUKLToxMDBFMjAwMDA4NjUzODc1QzBDNjYzRkZDMEMwQjAwMzhCMzg3QkMwOEYKLToxMDBFMzAwMEQ3NjNGRkQxNkMxMDEyMTZFRUQ4MkEyMjFFMkUyMjFENjcKLToxMDBFNDAwMEMwRDA3QUUxMUIyQ0EwMDBEN0EwMjhDQ0U5NjQ4MTQ4NEYKLToxMDBFNTAwMDI5Q0NFODY0OTM0MUMxQjk3QkMxMjU2OUNDMUI2MDAwRjIKLToxMDBFNjAwMDIyMkNEMDAwRDdEMDI4Q0NFOTY0ODE1NDI5Q0NFODY0NjYKLToxMDBFNzAwMDkzQkFDMUI5N0JDMTA5NjhDQzA5QzAyMEQxMEYwMDAwNjkKLToxMDBFODAwMDAwMkQyNTAyOEMzMkMwOTAwQzZGNTA2NUY1ODYyOTI0MDgKLToxMDBFOTAwMDY3MDkwODQ3NjU4NTgyQjQ0OTI3MjAwQzE4RUVDMDBDMDUKLToxMDBFQTAwMDdGMTFBOEZGMjhGMjg2REI3MDc4OTMwMjYwMDU1NDE5NDEKLToxMDBFQjAwMEVFQkMwOTc5MEEyOTkyQTM2ODkwMDgyODIyMDAwOTg4QzMKLToxMDBFQzAwMDBDNjU4NTNGMjlGMjg1NjQ5NTM5MjkxNjFBNjU1NTYzQTUKLToxMDBFRDAwMDdBRTEwNERCQTA2MDAwMDFDMEIwMjIxNjFCOERCNDEyQzEKLToxMDBFRTAwMEVFQjEwRDg4MTQ4MjI0MEQwRDQ3QTgyMjE4RUVBRjA5MkIKLToxMDBFRjAwMEREMTAwODIyMDI5MjkwMThFRUFEMTJFRUFFMDhDODAxODUKLToxMDBGMDAwMDBEODgwMjAyNDIwMjFERUVBQTkyOTEwRDg4MDI5ODkyNkIKLToxMDBGMTAwMDIyQjAyMzJEQjAyMjA0MjgxMDA2REQxMDAyNDIxMjA4NTAKLToxMDBGMjAwMEREMDIyOEIwMjEwNzIyMTAwQzg4MTAwMjg4MDIwRDg4RUIKLToxMDBGMzAwMDAyMTJFRUExOEQzMzAyREQwMTgyMzQwRDg4MDI5ODkzRjYKLToxMDBGNDAwMDkyQjk5Mjk0OERCNTgyMzk5RDk1ODhCNjhEMzg5ODk2RDAKLToxMDBGNTAwMDg4Qjc5Mjk5OUQ5ODk4OTdDMEQwMjhGMjg1MTJFRTk3RkQKLToxMDBGNjAwMDA4NDgwQkEyNzIyRDI0Q0YyOEY2ODUyMjEyMUI2NTU0NDcKLToxMDBGNzAwMERFN0FFMTA0REJBMDYwMDAwMUMwQjA2NEJFRkIyQ0IwRUYKLToxMDBGODAwMDA3MjhCMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwREUKLToxMDBGOTAwMDAwREJBMDY1QUZFNzYzRkVFMDJFQTAwMzJCMjA2N0Q5M0UKLToxMDBGQTAwMEUwRDRFMDY1QjFBQjhCMzIwQkZDNTA2NEM0QjIxOEVFRjgKLToxMDBGQjAwMDg0OEYyQTA4QjgwMTA4RkYwQzY0RjJDREMwOTI2MDAxNEEKLToxMDBGQzAwMDhBMkFEMDAzMjkyMDY3RDRBMDY1OTRDOThCMzIwQkZDRjAKLToxMDBGRDAwMDUwNjRDNDhDMUZFRTdCOEUyQTBGQkYwMTdGRTlEQzhDMkUKLToxMDBGRTAwMDMzMENFODUwNjQ4NEI0QzBCMDBDQTUxMThGNTkyQjE2OTMKLToxMDBGRjAwMDEyOEE1NzhFNTgyQTE2MTFEQkUwQUFGQTdGQUIwMUIxOEMKLToxMDEwMDAwMEVCNzVDRTU5OUUxRjg5Mzc5NTFDQUY5ODk4MUQ3OThCMkIKLToxMDEwMTAwMDA4MjUxNjBDMjlFQzAxMjkxNjBGOUExNjhBMUQ4NTFGMjIKLToxMDEwMjAwMDJBMTYxOTJBMEEwMDdCRTMwQTdCRTkwNTJCMTIwNjdGQTAKLToxMDEwMzAwMEJCMDFDMEExNjVBNDY5OEIzNUMwQTBDMDgwNzhFMzA0NjIKLToxMDEwNDAwMDY0RTNCNUMwQTE2NUE0NTg4OTFDMjkxNjE3MEM0QTU0M0QKLToxMDEwNTAwMDJBMTYxNkJDQUEyQTE2MTg2MDAwQUYwMDAwMDA4ODM3QUUKLToxMDEwNjAwMDg5MzYyODE2MTQyOTE2MTUwOEY4MEMwOUU5MEMyOTE2RDIKLToxMDEwNzAwMDEzOTgxRTc4RkIwNzI4MTIxM0IwODgyODE2MTM4OTFFQjAKLToxMDEwODAwMDlBMTg5RjE3MkExMjEzQzBGMDI5MTYxOTdCRTMwQzdCQkMKLToxMDEwOTAwMEU5MDc4RTE3MkIxMjA4N0VCQjAxQzBGMTY1RjQwNkMwNkMKLToxMDEwQTAwMEIwMkYxMjE5ODgzNTJFMTIxMjk4MTkyODEyMTFBQUVFOTMKLToxMDEwQjAwMEFGOEY3OEZCMDIyRUVDMDE5RjEzOEYxOTlGMTJDMEYwQTcKLToxMDEwQzAwMDdCRTMwQzdFQjkwNzg5MTMyODEyMDI3OThCMDFDMEYxRUEKLToxMDEwRDAwMDY1RjNEMjI1MTYxNzI5MTIxNTBDNEY1NEMwRTEyRjE2QUYKLToxMDEwRTAwMDE2QkNGRjJGMTYxODAwRjEwNDAwRUUxQTJGMTIxNEIwRDAKLToxMDEwRjAwMEVFMEVGODEzMDk4ODAxMEZFRTAxMkYxMjE5QThBQUFFRkYKLToxMDExMDAwMEZFN0ZFQjAxQjFBQUQ1QTAyRTE2MTkyQjEyMTlEQTUwQzkKLToxMDExMTAwMDJDMTIxODU4MThEM0MwRDBDMDkwMkUxMjE5MDc0ODBBQTQKLToxMDExMjAwMDJDMTIxOERBQjA4RjM0QzBCMUFBRkYwMEMxMDQyQTEyMDEKLToxMDExMzAwMDE2MkY4NjE2MkMxMjE3MDBCQjFBQjBCQjBFQkUwMTlFQ0UKLToxMDExNDAwMEM5MEJGQjEzMDVCQjAxOUJDODJBNzQxMDI5MjQ2NzI5MEUKLToxMDExNTAwMDcwMDM4RTc1QjE5RjJGNzQwM0IwRUUwRTRFMEM2NUVEQ0IKLToxMDExNjAwMDE4MjgyMDY3MkQyNTAyNjU4MzEzMkEyMjFFMjkyMjFEOTcKLToxMDExNzAwMDdBOTEwNERCQTA2MDAwMDFDMEIwNjRCQ0ZDMkNCMDA3MTUKLToxMDExODAwMDI4QjAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwRTMKLToxMDExOTAwMERCQTA2NUFGRTc2M0ZDRTE4OUFBQjE5OTY1OTA5NDg5MEEKLToxMDExQTAwMDM0MUJFRTA4OTlBQTg4MzMxRkVFMDIwODQ4NTQyOEE0N0QKLToxMDExQjAwMDJDOEUyQThDMzIwRkVFMDIwQkNCMDE3RUI5NjQwQzRCQzUKLToxMDExQzAwMDUxNkZCMjVFOEIzMzc1QjY1OTJDQTAxMzBCRUU1MTBFRDYKLToxMDExRDAwMENFMDEwRTBFNDEwQzBDNDE3RUM5NDcyRkEwMTJCMEZGNkMKLToxMDExRTAwMDY1RjJERDhFMzc4Q0E4OEIzNjhGQTk3Q0IzMDc3QkM5NUYKLToxMDExRjAwMDAyN0VGQjAxQzBEMUNFRDk4ODM1RERCMDBFOEUwODc4RDUKLToxMDEyMDAwMEVCMDFCMUJEODlBN0RBQzAwRjlCMDg3OUJCMDIyQUNDREMKLToxMDEyMTAwMDAxRENCMEMwQjA3REEzMDc3QUQ5MDI3Q0VCMDFDMEIxN0MKLToxMDEyMjAwMDY0QjE2M0MwOTEyOTI0NjdDMDIwRDEwRjAwOEJEQUIxNkIKLToxMDEyMzAwMEJCNjRCMEMwMkMyMDY3MkQyNTAyNjVDMjI4MURFRERDRTMKLToxMDEyNDAwMDhDMzIxRkVERTEwRENEMDEwRkREMEM2NUQxQzEwQzRGQ0UKLToxMDEyNTAwMDUxNkZGMjAyNjAwMUI4QzA5MDI5MjQ2NzA5MDg0NzY1MDAKLToxMDEyNjAwMDgyMEY3QUUxMDREQkEwNjAwMDAxQzBCMDY0QkMwQTJDRUMKLToxMDEyNzAwMEIwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCQkIKLToxMDEyODAwMDgwMDBEQkEwNjVBRkU3NjNGQkVGOEMzMzBDRTk1MDY0QjMKLToxMDEyOTAwMDkyMDkwQ0VGMTFBRkFGMkYxNjE3OEVGODg1RjdEQkUwMzAKLToxMDEyQTAwMDhGRjkyNTE2MTBBNUY1N0Y1QjAyMkJFQzAxMENBODUwRDkKLToxMDEyQjAwMDY1ODBERDg4MzdEQUUwQUY4OTI5MTYwQTc4OUIwMjJBMzMKLToxMDEyQzAwMEVDMDE5NTE0ODkxQUQ1QTAyOTE2MTkyQTBBMDA3QkUzODYKLToxMDEyRDAwMDBBN0JFOTA1MkIxMjA0N0ZCQjAxQzBBMTY1QTFDMThCNkMKLToxMDEyRTAwMDM1QzBBMEMwODA3OEUzMDQ2NEUxMDRDMEExNjRBRDVDQjMKLToxMDEyRjAwMDYwMDFBRDAwMDA4RTM0MTlFREIzOUVEQThDMzMxQkVEMjYKLToxMDEzMDAwMEFDMEM0QzU0MkNENDJDOEEyQThDMzIwQkFBMDIwOUM5NUUKLToxMDEzMTAwMDAxMEE5OTBDNjU5RjBCMEM0RjUxNkVGMjAyNjNGRjAyOUMKLToxMDEzMjAwMDhCMzMwQkE4NTA2NDhFRkEyOUQwMTMwQkVBNTEwQTlBMUEKLToxMDEzMzAwMDAxMEEwQTQxMDkwOTQxMEE5OTBDNjU5RUU1MkJEMDEyNjAKLToxMDEzNDAwMEIwQkI2NUIxODhDMEEwOEUzNzhDRDgyQjMyMDYyRkQyQTcKLToxMDEzNTAwMDA5N0NCMzA3N0JDOTAyN0VGQjAxQzBBMTY1QUVDMzg4Q0YKLToxMDEzNjAwMDM1RDNCMEFFOEU3OEVCMDFCMUIzODlEN0RBQzBBRjlCN0QKLToxMDEzNzAwMDc5QkIwMUIxQ0FEQ0IwQzBCMDczQTMwNzdBMzkwMjdDNzMKLToxMDEzODAwMEVCMDFDMEIxNjVCRTlCQzA5MDI5MjQ2N0MwMjBEMTBGN0UKLToxMDEzOTAwMDAwOEEzNjg4MzcyQTE2MTUyODE2MTQwQUVBMEMwOEY4MjcKLToxMDEzQTAwMDBDOTgxQjc4RkIwMUIwQUE5RjE1OEYxQjJGMTYxOTJGQzUKLToxMDEzQjAwMDBBMDA3QkUzMEE3QkU5MDUyODEyMDU3ODVCMDFDMEYxOEUKLToxMDEzQzAwMDY1RjBFMkFBREU4QjM1MkYxMjE5MjkxMjEwQzA1MEFGM0EKLToxMDEzRDAwMDlGNzlGQjAxQjFFRTlGMTFDMEYwNzVFMzBBN0U1OTA1QkMKLToxMDEzRTAwMDI4MTIwMTc4QkIwMUMwRjE2NEZDRUE2MDAwQjcwMDAwN0MKLToxMDEzRjAwMDdGQjMwMjYzRkVGNjYzRkVGMTdGQjMwMjYzRkM0NTYzRDUKLToxMDE0MDAwMEZDNDAwMDAwNjQ1MEE0REEyMDU4MTVDOEMwMjBEMTBGNTkKLToxMDE0MTAwMEMwOTE2M0ZFNDNDMDkxNjNGQTczREEyMERCNzBDMEQxRTAKLToxMDE0MjAwMDJFMEE4MEMwOUEyOTI0NjgyQzcwMDc1ODE0QjhEMkEwQkMKLToxMDE0MzAwMEQxMEYwMDAwMTlFRDY2MDM0ODBCOTgxMDA4OEIwMjA5QzQKLToxMDE0NDAwMDI5MDg3OTgzMDIyQjhERjgyOTEyMUE2M0ZBOEIwMDAwODAKLToxMDE0NTAwMDJBMkM3NERCNDA1ODBFNDQyRTIyMUQyQTIyMUU2M0ZCQzgKLToxMDE0NjAwMDBGQzA5MTYzRkNFNTAyMkEwMjU4MDI0QzBBQTIwMjA2NTAKLToxMDE0NzAwMDAwMDAwMjJBMDI1ODAyNDkwQUEyMDIwNjAwMDBEQjcwOUMKLToxMDE0ODAwMERBMjBDMEQxMkUwQTgwQzBDRTJDMjQ2ODJDNzAwNzU4RDgKLToxMDE0OTAwMDE0OUZDMDIwRDEwRkQ5QTA2M0ZDQjYwMEMwOTQ2M0ZDOTgKLToxMDE0QTAwMEFBQzA5NjYzRkNBNUMwOTY2M0ZDQTAwMDJBMkM3NERCM0UKLToxMDE0QjAwMDMwREM0MDVCRkUyRUMyRDAyREE0MDAyQjIwMEM2M0ZGM0QKLToxMDE0QzAwMDQ1OEYzNThFQTc3RkVCMDI2M0ZFQkI2M0ZENTQ4OTM1RTQKLToxMDE0RDAwMDg4RDc3OThCMDI2M0ZFQUU2M0ZENDcwMDZDMTAwNEMwQjEKLToxMDE0RTAwMDIwRDEwRjAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDJCMTEKLToxMDE0RjAwMDIyMUUyODIyMURDMEEwQzA5NDI5MjQwNjJBMjUwMjdCNzIKLToxMDE1MDAwMDg5MDFEQkEwQzlCOTEzRUQyNERBMjAyOEIwMDAyQ0IwODIKLToxMDE1MTAwMDA3MDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGOEUKLToxMDE1MjAwMEU3QzAyMEQxMEYwMDAwMDA2QzEwMDYwMjI2MDIyOTIwMUYKLToxMDE1MzAwMDA2QzBFMDY4OTgwNTI4OUNGOTY1ODEyMDJBNjEwMjE3OTkKLToxMDE1NDAwMEVEMTcwQTBBNEM2NUEwRjAyQjcyOUUxQUVEMTM2RkI4QzYKLToxMDE1NTAwMDAyNjAwMEY0MkFBMjI2NjhBMDA5OEI2MEQzMEYwQUJCQTAKLToxMDE1NjAwMDBDNjVCMEU0MkE3MjlENjRBMERFMkI2MDBDMENCQzExRUIKLToxMDE1NzAwMDA3Q0MwODJEQzI4NjZGRDkwMjYwMDBENzFERUQwOTBEN0EKLToxMDE1ODAwMEJEMEEyREQyQTM2OEQwMDc4RjYwMERGRjBDNjVGMEMzOTQKLToxMDE1OTAwMDIyQzI4NUMwRjA2NDIwQkIxREVEMEU2ODQzNEQxOEVEREUKLToxMDE1QTAwMDBEOEM2QjA4Q0MwMjlDMjA4QTYwMDhBQTExMERBQTAyM0YKLToxMDE1QjAwMDlBMjE4OTZBOTkyNDg4MzI5ODI1MkM2MTA0MDhDQzExRDMKLToxMDE1QzAwMDlDMjcxQ0VDRkUwQ0JBMTFBN0FBMjlBMjg1QUNCQzJGNDMKLToxMDE1RDAwMEM0Q0YyOTlDMjgyOUE2ODVDODVBMkE2Qzc0REI0MDU4OTgKLToxMDE1RTAwMDBERTJEMkEwRDEwRkQyRTBEMTBGMDAwMDI4OUNGOTY0MDcKLToxMDE1RjAwMDgwOTEyQzYwNjY4OTMxQjFDQzBDMEM0NzJDNjQ2NjZGRUQKLToxMDE2MDAwMEM2Njk3MDlFNjYxQUVDRjQ4QzMwODk2QjBDOEM0MDBCQUEKLToxMDE2MTAwMENDMTAwQzk5MDIwQTk5MDI5OTIwODg2MDA4ODgxMTBENTMKLToxMDE2MjAwMDg4MDI5ODIxOEMzMzlDMjM4QTMyOUEyMjg5NkE5OTI0RDEKLToxMDE2MzAwMDg4MzQ5ODI1NjNGRjgyMDAwMENDNTdEQTYwREIzMERDMDkKLToxMDE2NDAwMDQwNTgxNEE3QzAyMEQxMEYwMERBNjBDMEI2NTgxNTM3MzMKLToxMDE2NTAwMDYzRkZFNTAwREE2MDU4MTUzNTYzRkZEQzAwREEyMERCNTQKLToxMDE2NjAwMDMwREM0MERENTA1ODE1QjdEMkEwRDEwRjlFMTAyQjYxNTEKLToxMDE2NzAwMDA0NTgxM0M4MURFQ0Q3OEUxMDJCNjAwQ0MwRjAyRjY0REIKLToxMDE2ODAwMDY2NjNGRjgwMjk2MTIzQzA4ODc5ODMwMjYzRkY3NTJFMUEKLToxMDE2OTAwMDE2MDAyQzYwNjYyQjYxMDQyQ0NDMDEwQzBDNDcyQzY0Q0EKLToxMDE2QTAwMDY2NTgxM0JDMURFQ0NCOEUxMDJCNjAwQ0MwRjAyRjY0NjEKLToxMDE2QjAwMDY2NjNGRjUwNkMxMDA0QzBCN0MwQTExNkVDQzgxNUVDRUYKLToxMDE2QzAwMEJBRDcyMEQ4NDBCODIyQzA0MDA1MzUwMjk2NzE5NTcwMkYKLToxMDE2RDAwMDAyQTQzODA0MDQ0MkM5NEIxQUVDQUQxOUVDQUUyOUE2OTkKLToxMDE2RTAwMDdFQzE0MEQzMEY2RDRBMDUwMDgwODgwMDIwOEMyMjBBRkQKLToxMDE2RjAwMDg4QTI3MkQxMEZDMDUwMDhBNTM4NzVCMEUzNjNGRkQ3MzgKLToxMDE3MDAwMDZDMTAwODkzMTQ5NDEyMjkyMDA2NjU1MjcwQzA3MTY4RjkKLToxMDE3MTAwMDk4MDUyQTlDRjk2NUEyODAxNkVDQTEyOTIxMDI4QTE0NTkKLToxMDE3MjAwMDA5MDk0QzY1OTBDNzhBQTAwQTZBNTEyQUFDRkQ2NUEwRDgKLToxMDE3MzAwMEJDQ0M1RkRCMzBEQTIwOEMxMjU4MTQ2OUMwNTE5QTE0OEIKLToxMDE3NDAwMEM3QkY5QkE5OEUxNDJFRTIwOTY4RTA2MDJGNjI5RTFEMjAKLToxMDE3NTAwMEVDOTI2RkY4MDI2MDAwODEyREQyMjY2OEQwMDUyRjIyMEUKLToxMDE3NjAwMDAwN0RGOTc1MkM2MjlEQzc5MDY0QzA2RDlDMTE4QTE0MzAKLToxMDE3NzAwMDJCMjAwQzJBQTAyMDBDQkQxMUE2REQwQTRGMTRCRkE4RjcKLToxMDE3ODAwMDA5ODgwMTI5RDI4NkFGODgyODhDMDk3OThCNTUxRkVDRUUKLToxMDE3OTAwMDg0MEZCRjBBMkZGMkEzNjhGMDA1MjgyMjAwN0Y4OTQzMzcKLToxMDE3QTAwMDI5RDI4NUQ0OTA2NTkwNzc2MDAwM0QwMDAwMkIyMDBDRjUKLToxMDE3QjAwMDFGRUM3QzBDQkQxMUE2REQyOUQyODYwRkJGMEE2RTk2RTgKLToxMDE3QzAwMDEwMkZGMkEzNjhGMDA0ODgyMDdGODkwNTI5RDI4NTY1NEYKLToxMDE3RDAwMDkxNTVEQTIwNTgxNEQ1NjAwMDEzREEyMEMwQjY1ODE0OTkKLToxMDE3RTAwMEQzNjAwMDA5QzA5MDYzRkZCOURBMjA1ODE0RDA4OTE0N0YKLToxMDE3RjAwMDg5OTEwOUZFNTA2NTUxQ0M4QzEyOEQxNERBMjBEQkQwMTIKLToxMDE4MDAwMDhERDA5RTEwMEQ2RDUxNTgxMzQxOUExNDY0QTFGMEM3RUMKLToxMDE4MTAwMDVGOEZBMTk1QTlDMDUxMEYwRjQ3OUYxMjYzRkVGQjAwNzgKLToxMDE4MjAwMEMwOTFDMEYxMjgyMDA2MkMyMDY2Mjg4Q0Y5QTdDQzBDOEEKLToxMDE4MzAwMDBDNDcyQzI0NjY2RkM2MDg4RDE0OEREMTcwREUwMUMwNTQKLToxMDE4NDAwMDkwREQ5MDY0ODE0MUM5RDI4QTExMkIyMTA0NTgxMzUxMzMKLToxMDE4NTAwMDhBMTRDMEIwMkIyNDY2OEVBOTJBQTAyMEMxNzAxQ0VDNkIKLToxMDE4NjAwMDVCMEUyODE0MTVFQzUwOEUxNDg1NTZBQzJDOUMxMzJFNTAKLToxMDE4NzAwMEVDMjhBODU1RERFMDdDRTMwMjJERURGOEQzRDAwQTc3MDMKLToxMDE4ODAwMDM2REE0MERCNTBEQzMwNUJGRjhCRDRBMDJFMjAwQ0I0NkEKLToxMDE4OTAwMDU1MjkwQTg4QzBDMDFCRUM0OTBDRUYxMUE2RkYyOEYyOUQKLToxMDE4QTAwMDg1QUJFRTJDRTRDRkE5ODgyOEY2ODUyOTBBODA4ODEzMTkKLToxMDE4QjAwMEE5MzNERDMwODkxNDc4MzMwMjJEM0RGODI4OTAyMEQzRTgKLToxMDE4QzAwMEQwMDc4ODBDQzE3MDA4MDg0NzI4OTQyMDA4NzczNjY1MkYKLToxMDE4RDAwMDdGQUU4OTE0MTNFQzQzODk5MEMwRDQ3Nzk3M0QxOEVDMDAKLToxMDE4RTAwMDQxQzFCQTI3MjEwNDg1MTQwOTlDNDAwNkNDMTE4NjUzQjYKLToxMDE4RjAwMDA0NzcxMTg1NTIwQzc3MDIwQjc3MDJDMEMwOThBMDlEMjcKLToxMDE5MDAwMEExOEQyQjlDQTU5N0E0OTZBNzk1QTYwM0REMDI5REEyNjkKLToxMDE5MTAwMDJCRjI4NTJDRTRDRjJCQkMyMDJCRjY4NTJBMkM3NDhCNDQKLToxMDE5MjAwMDEyNTgwRDExRDJBMEQxMEYyODIwM0RDMEUwN0M4Nzc3M0UKLToxMDE5MzAwMDJFMjQ2NzBFMEE0NzY1QTA3MzE4RUMyQjhGMjAxQ0VDMzEKLToxMDE5NDAwMDE5OEUxNDhDQzQ4RUU0MDhGRjExMDhGRjAyMEU4RTE0NDkKLToxMDE5NTAwMEFFQ0MxRUVDMjY5RjkxMEVDQzAyOUM5MEMwODAxRUVDNUIKLToxMDE5NjAwMDI0MkMyMTAyMUFFQzE2MkZEMjg1QUFCQUI4RkYyRkQ2NDIKLToxMDE5NzAwMDg1MEVDQzAyMjhBNENGMkMyNTAyQzAyMEQxMEY4NzE0QkQKLToxMDE5ODAwMDg3NzAwNzA3NDc2M0ZEODYyODIxMjNDMDk5Nzk4QjAyNUEKLToxMDE5OTAwMDYzRkVCMkRERjA2M0ZFQUQwMERBMjBEQjMwOEMxMkRERDkKLToxMDE5QTAwMDUwNTgxNEU4RDJBMEQxMEZDMEUxNjNGRjgyOEIxNDhDOTEKLToxMDE5QjAwMDEyREQ1MEMwQUEyRTBBODAyQTI0NjhEQTIwNTgxMzUzNTgKLToxMDE5QzAwMEQyQTBEMTBGMDA3MDk2NTUyQjYyOUU2RUI4NTMxREVCQkUKLToxMDE5RDAwMEYyMkREMjI2NjhEMDA0OEUyMDdERTk0NTJBNjI5RENCNjcKLToxMDE5RTAwMEFGMkIyMTA0MkMyMDY2NTgxMkVCQzA5MDI5MjQ2NjgyNkMKLToxMDE5RjAwMDE0MThFQzAwOEYyMTA4RkYwMTlGMjFDMDIwRDEwRjAwOTcKLToxMDFBMDAwMDhCMTBDOUI4OENBMDBDNkM1MUNDQ0M4RTI0MUZFQkVFODMKLToxMDFBMTAwMDhERTE5RTE0MEZERDAyOURFMTg4MTA2NThGQTlDMDIwMjUKLToxMDFBMjAwMEQxMEZEQTIwQzBCNjU4MTQ0MUMwMjBEMTBGMDAwMDAwRjkKLToxMDFBMzAwMDZDMTAwNkMwRDAyQTIxMDI5NDExNzVBNzBFODkzNDdGM0MKLToxMDFBNDAwMDk3MDk4QjM1N0ZCRjA0MkQyNTAyREFEMDBBMEM0QzY1MkYKLToxMDFBNTAwMEMxN0IxNkVCRDIxRkVCRDAyODYyOUVDMEVBNzhFMzAyNkUKLToxMDFBNjAwMDYwMDE4MTI5RjIyNjY4OTAwNzhBMjAwOUFBMEM2NUExRTUKLToxMDFBNzAwMDczMkE2MjlEREVBMDY0QTE3MDJCMjAwQ0MwNzAwQ0JDODgKLToxMDFBODAwMDExMDZDQzA4MjlDMjg2MjgwQTBDNzk4MzAyNjAwMTRDMTEKLToxMDFBOTAwMDE5RUJDNDA5QjkwQTI5OTJBMzY4OTAwNzg4MjAwOTg4MUMKLToxMDFBQTAwMDBDNjU4MTM4MjRDMjg1MUNFQkM2NjQ0MTJGODkzMTA5M0QKLToxMDFBQjAwMDhCMTQwQ0JCMDE2RkIxMUQyQzIwNjY5RTEwQjFDQzBDOTkKLToxMDFBQzAwMDBDNDcyQzI0NjY2RUM2MDI2MDAxMzQwOUZFNTA2NUUxQTUKLToxMDFBRDAwMDJFOEExMDJBQUMxODg5MzRDMEU0N0Y5NzM2MTdFQkM3REEKLToxMDFBRTAwMEMwODIxQkVCQzU4QzM1OUU0MTlCNDA4QjIwOTg0NTlENDkKLToxMDFBRjAwMDQ0MThFQkMzMDdCQjAyOUI0MjBDMDc0MDBGNzcxMTk4QjkKLToxMDFCMDAwMDQzOTc0N0Q3RTA3RkM3MEIyQzIxMDIyODRBMDAwOENDMTcKLToxMDFCMTAwMDAyMkMyNTAyN0U5NzA0OEIzNjJCMjUyMjdEOTcwNDhDODAKLToxMDFCMjAwMDM3MkMyNTIxN0M5NzNBMEFBQjAyMkMwQTAxQzA4MDBBODcKLToxMDFCMzAwMEM4MzgyQTNDMjAwODA4NDI2NDgwODIxQ0VCOTQxOUVCQzgKLToxMDFCNDAwMDk1MjlDNjdFMDBBMDg4MDBCMDhDMDBBMDg4MDBCMDhDQ0IKLToxMDFCNTAwMDAwQTA4ODAwQjA4QzI4NjI5RDJERjRBMjI4OEMxODI4NDMKLToxMDFCNjAwMDY2OUQ4OTMwNzc5NzM1MUZFQjlGOEMzMzg4MzIwNDdCRDUKLToxMDFCNzAwMDBCMkEyMTA0QjQ3NzA0QUExMTlFQjE5RkIwOEYyQjlEMkMKLToxMDFCODAwMEI1OThCNjlDQjcxOEVCOTYwOTlDNDAwNkNDMTEwQ0FBRTgKLToxMDFCOTAwMDAyMDhGRjAyOUZCMkMxQ0MwQ0FBMDI5QUI0Qzk3NzJBRUMKLToxMDFCQTAwMDIwMEMxQkVCODYwQ0E5MTFBNjk5Mjg5Mjg1QUJBQTJEQjcKLToxMDFCQjAwMEE0Q0YwODc4MEIyODk2ODVDRjU4QzAyMEQxMEZDMDg3QjYKLToxMDFCQzAwMEMwOTAwQUM5Mzg3OTg4MDI2M0ZGNzg2M0ZGNkNDQzU3RUMKLToxMDFCRDAwMERBMjBEQjMwOEMxMTU4MTM0MkMwMjBEMTBGREEyMDU4QTQKLToxMDFCRTAwMDEzRDM2M0ZGRThDMEEwNjNGRTg5REEyMEMwQjY1ODEzQTAKLToxMDFCRjAwMENGNjNGRkQ5MkEyQzc0OEIxMTU4MEM1QkQyQTBEMTBGNjQKLToxMDFDMDAwMDhBMTAyQjIxMDQ1ODEyNjMxRkVCNjRDMEQwMkQyNDY2NjgKLToxMDFDMTAwMDYzRkVCRDAwNkMxMDA2RDYyMDE5RUI1RjFFRUI2MTI4MzkKLToxMDFDMjAwMDYxMDIxN0VCNUUwODA4NEM2NTgwNUY4QTMwMEE2QTUxRDIKLToxMDFDMzAwMDY5QTM1NzJCNzI5RTZFQjgzRjJBOTIyNjY4QTAwNDhDMjcKLToxMDFDNDAwMDYwN0FDOTM0MkE3MjlEMkM0Q0ZFQ0FBQjJCNjAwQ0I2NEMKLToxMDFDNTAwMDRGMENCRDExQTdERDI4RDI4NjBFQkUwQTc4RkIyNjlDNEMKLToxMDFDNjAwMDExMkVFMkEzMkMxNjAwNjhFMDA1MkY2MjAwN0VGOTE1MDQKLToxMDFDNzAwMDIyRDI4NUNGMjU2MDAwMEQwMERBNjBDMEI2NTgxM0FCQzQKLToxMDFDODAwMEM4NUE2MDAxMEYwMERBNjA1ODEzQTg2NTUxMDZEQzQwOUQKLToxMDFDOTAwMERCMzA4RDMwREE2MDBENkQ1MTU4MTIxQ0QzQTA2NEEwN0EKLToxMDFDQTAwMEYzODRBMUMwNTEwNDA0NDc2M0ZGNkQwMEMwQjAyQzYwRjEKLToxMDFDQjAwMDY2ODkzMUIxQ0MwQzBDNDcyQzY0NjY2RkM2MDI3MDk2RjUKLToxMDFDQzAwMDBBMkI2MTA0NTgxMjMzQzBCMDJCNjQ2NjY1NTBCNDJBRTUKLToxMDFDRDAwMDNDMTBDMEU3REMyMEMwRDFDMEYwMDJERjM4MEYwRjQyNUIKLToxMDFDRTAwMDY0RjA5MDE5RUIyQTE4RUIyQjI4OTY3RThEMTA2RERBOTQKLToxMDFDRjAwMDA1MDBBMDg4MDBDMDhDQzBBMDg5MzAxREVCM0E3Nzk3MDIKLToxMDFEMDAwMDUzODgzMjhDMTA4RjMzMDJDRTBCQzAyNDkyRTEyMjYxQjMKLToxMDFEMTAwMDA0OURFMDA0MjIxMThENkI5QkU1OUZFNzk4RTYxRkVCODUKLToxMDFEMjAwMDMwMDk5ODQwMDY4ODExMDgyMjAyMEZERDAyQzE4RDlERkUKLToxMDFEMzAwMEUyMDgyMjAyOTJFNEI0QzIyRTYwMEMxRkVCMjAwQ0U4RjEKLToxMDFENDAwMDExQTc4ODJDODI4NUFGRUUwQzIyMEIyQkU0Q0YyMjg2QzQKLToxMDFENTAwMDg1RDJBMEQxMEYyODYwMENEMkEwOEMxMTE5RUIxODBDRTEKLToxMDFENjAwMDhEMTFBN0REMkVEMjg1QTk4ODJCODRDRjBFQ0MwQjJDMEMKLToxMDFENzAwMEQ2ODVEMTBGQzBGMDBBREYzODdGRTgwMjYzRkY2QzYzQkQKLToxMDFEODAwMEZGNjAwMDAwMkE2Qzc0QzBCMkRDMjBERDQwNTgxMjExRTQKLToxMDFEOTAwMEMwQjA2M0ZGNjNDMDIwRDEwRjAwMDAwMDZDMTAwNDJDQTIKLToxMDFEQTAwMDIyMUQyQTIyMUVDMDQ5RDMyMDI5MzAwNjI0MzQ2OEMwQUYKLToxMDFEQjAwMDQwN0FDMTA1RERBMDYwMDAwMjAwQzBEMDZFOTczOEMwMzcKLToxMDFEQzAwMDhGMkUwQTgwMkIzMDE0QzA5NjI5MzQwNjBFQkIwMjJFQUIKLToxMDFERDAwMDMxMDIyQjM0MTQ3RTgwMDQyNDM1MDJERTQwN0FDMTBFOTkKLToxMDFERTAwMEM4QUJEQkQwREEzMDJDMEEwMDU4MEE3OTJFMzEwMjBFNEIKLToxMDFERjAwMDBGNENDOEZFQzAyMEQxMEY2ODk1RjgyODMxMDIwODA4QTIKLToxMDFFMDAwMDRDNjU4RkVGMUFFQUU2MUNFQUU0MkJBMjlFQzA5QTdCOEYKLToxMDFFMTAwMDlCNDYyQkMyMjY2OEIwMDQ4RDMwN0JEOTNCMjlBMjlERkUKLToxMDFFMjAwMEMwRTNDQjkzOTQ5MDFCRUFGNzJEMzEwNDlCOTYwOEREMTkKLToxMDFFMzAwMDExMEVERDAyOUQ5NzlEOTEyNEM0QTIxMkVBRjMyRjMxNjkKLToxMDFFNDAwMDAyMjhBMjlEQzBFNTJFMzQwNjI4OEMzMDI4QTY5RDAyQ0IKLToxMDFFNTAwMEZGMDIyRjM1MDJDMDIwRDEwRkRBMzBDMEI2NTgxMzMzM0QKLToxMDFFNjAwMEMwMjBEMTBGNkMxMDA2MkEyMDA2OTQxMTY4QTgwNTI4RkUKLToxMDFFNzAwMEFDRjk2NTgyNEYyOTIxMDIwOTA5NEM2NTkyMDZDQzVGQjUKLToxMDFFODAwMERCMzBEQTIwOEMxMTU4MTI5NkMwNTFEM0EwQzdBRjlBMUMKLToxMDFFOTAwMDNBQzBFMDE5RUFDMzFERUFDOTFBRUFDMjhGM0ExNkVBNDMKLToxMDFFQTAwMEJGQjFGQjY0QjEzNTJDNjI5RTZGQzgwMjYwMDFFOTI3QTcKLToxMDFFQjAwMERDMzMyNzcyMjY2ODcwMDc4ODIwMDc4ODBDNjU4MUQ4NzQKLToxMDFFQzAwMDI0NjI5REMwNzY2NDQxRDAyQjIwMEMwQ0JDMTFBNkNDQTIKLToxMDFFRDAwMDI4QzI4NkMwOUU3ODkzMDI2MDAxQzgxOUVBQjEwOUI5ODgKLToxMDFFRTAwMDBBMjk5MkEzOTQxMDY4OTAwNzg4MjAwOTg4MEM2NTgxQkMKLToxMDFFRjAwMEIyMjRDMjg1NjQ0MUFDMjkyMDA2Mjk5Q0Y5NjQ5MURGOTMKLToxMDFGMDAwMDJDMjA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyOUQKLToxMDFGMTAwMDYwMDE5ODA5Rjg1MDY1ODE5MjFBRUFBMzhDMzYxOUVBOTMKLToxMDFGMjAwMEExMEM4ODE0ODk5NDBDMEM0NzA5Q0MxMEE4OTkwQTk5MjMKLToxMDFGMzAwMDAyMThFQUI2MkEyMTA0OTk0MDk4NDE4ODJBMTlFQUI0N0QKLToxMDFGNDAwMDBDODgwMjA5ODgwMjk4NDIyODMwMkMyQzMwMTMyOTMwNDIKLToxMDFGNTAwMDEyMDRDQzEwMDY5OTEwMEM4ODEwOUY0NDA4QTgwMjBDOUIKLToxMDFGNjAwMDk5MDIwOTg4MDI5ODQzOEYzNzlGNDU4QzM4OUM0Njg5OEYKLToxMDFGNzAwMDM5QzBGMTk5NDcxOUVBQTc4ODM1OUY0Qjk4NDgwODg4RDYKLToxMDFGODAwMDE0MDk4ODAyOTg0QThGMzAxOEVBOTc3N0Y3MzJDMDc0OUMKLToxMDFGOTAwMDg5MzI4QzMzOTg0Qzk3NEQwRjk3NDA4ODJCMkU0NjExRTEKLToxMDFGQTAwMDA2NzcxMTJDNDYxMzI5NDYxMjA0QUMxMTE5RUE4RDA3NDUKLToxMDFGQjAwMENDMDJDMTc5MDk4ODAyOTg0RTA3Q0MwMjJDNDYxMEMwODkKLToxMDFGQzAwMDdBQURCQzBDQkExMUE2QUEyOUEyODUyRUM0Q0YwOTc5NzQKLToxMDFGRDAwMDBCMjlBNjg1NjU1MEZDQzAyMEQxMEYwMDJCMjAwQzBDQ0UKLToxMDFGRTAwMEJDMTEwNkNDMDgyRkMyODYwOUI5MEE2RkY5MDI2MDAxM0MKLToxMDFGRjAwMDFFMjk5MkEzNjg5MDA4MkYyMjAwMDlGRjBDNjVGMTBGOUIKLToxMDIwMDAwMDJGQzI4NTY0RjEwOTI4MjAzRDA4Mjg0MDY0ODA4NDg0MUIKLToxMDIwMTAwMDM1MDQ4NDE0NjQ0MDdDODVBNTc0NTM3Nzg0MzYwNDg0MjUKLToxMDIwMjAwMDE0NjQ0MDZGNzQ1MzZDMjkzMDEzQzA4Qzc5ODg2NEMwNzkKLToxMDIwMzAwMDkwMjkyNDY3MDkwODQ3NjU4MEREODgyMDg5QTQ4NDM1QjQKLToxMDIwNDAwMDFBRUE2QjA0ODQxNEE0OTQwQTQ0MDI5NEYwMTRFQTY2MTUKLToxMDIwNTAwMDA4ODgxMTA0ODgwMjk4RjE4NDM2OThGMzA0ODQxNEE0NDMKLToxMDIwNjAwMDk5MEE5OTAyOTlGMjFBRUE2MjI5MjEwMjI0QzI4NUFEREQKLToxMDIwNzAwMEI4MkU4NENGMjQ0QzEwMjRDNjg1MEE5OTAyMjkyNTAyNDMKLToxMDIwODAwMEMwMjBEMTBGMDBDQzU3REEyMERCMzA4QzExNTgxMjE0NEQKLToxMDIwOTAwMEMwMjBEMTBGQzA5MTYzRkY5N0RBMjBDMEI2NTgxMkEzQjkKLToxMDIwQTAwMDYzRkZFMTAwREEyMDU4MTJBMTYzRkZEODhBMTAyQjIxQzgKLToxMDIwQjAwMDA0NTgxMTM4MURFQTQyMkIyMDBDQzBFMDJFMjQ2NjhGRjQKLToxMDIwQzAwMDNBNjNGRTU0MDBEQTIwREIzMERDNDBERDUwNTgxMzFENEIKLToxMDIwRDAwMEQyQTBEMTBGMkEyQzc0OEIxMTU4MEIyM0QyQTBEMTBGNzAKLToxMDIwRTAwMDI5MjEyM0MwODg3OTgzMDI2M0ZFMkQyQTEyMDAyQzIwMjcKLToxMDIwRjAwMDY2MkIyMTA0MkNDQzAxMEMwQzQ3MkMyNDY2NTgxMTI1OEUKLToxMDIxMDAwMDFERUEyRjJCMjAwQ0MwRTAyRTI0NjY4RjNBNjNGRTA4QjgKLToxMDIxMTAwMERBMjA1ODEyODY2M0ZGNkNEQTIwNUJGRjIwRDJBMEQxNTAKLToxMDIxMjAwMDBGMDAwMDAwNkMxMDBBOTUxNkMwNjFDMUIwRDk0MDJBOUEKLToxMDIxMzAwMDIwM0RDMDQwMEJBQTAxMEE2NDM4MkEyMDA2MjkxNjA3NTAKLToxMDIxNDAwMDY4QTgwNTJDQUNGOTY1QzMzQjFERUExNkM4NDQyRjEyREMKLToxMDIxNTAwMDA2NjRGMjlCMjYyMTAyMUVFQTEyOTYxNDA2MDY0QzY1QkUKLToxMDIxNjAwMDYyREUxNUVBMEU2NDQwQ0Y4QTM1MjkzMDAzOUExNTBBREIKLToxMDIxNzAwMDk5MEM2NDkwQzIyQzIwMEM4QjE1OUMxMjBDQ0MxMUE1RDAKLToxMDIxODAwMENDOUMxMzJDQzI4NkI0QkI3Q0IzMDI2MDAyQ0U4RjEyRUYKLToxMDIxOTAwMDBFRkUwQTJFRTJBMzY4RTAwODI2MjIwMDBFNjYwQzY1RjkKLToxMDIxQTAwMDYyQkE4ODEzMjg4Mjg1NjQ4MkIyODkxNTY0OTA1RURBRTcKLToxMDIxQjAwMDgwRDkzMDhDMjAxRUVBMEMxRkVBMEQxREU5RkE4QjE1MjAKLToxMDIxQzAwMDhERDRENEIwN0ZCNzE4Qjg4QTI5M0MxMDg1MzYwOEM2OUMKLToxMDIxRDAwMDExMEU2NjAyOTY4MTA1ODUxNEE1RDUwRjU1MDI5NTgwQ0UKLToxMDIxRTAwMDA0MTgxNDZEODkyNzg4OTYwOENCMTEwODg4MTQwRUJCMzMKLToxMDIxRjAwMDAyQThEODI5OUMyMDBGODgwMjlCQTE5OEEwODg5MjlCQjYKLToxMDIyMDAwMEEzMDg4ODE0QThEODBGODgwMjk4QTIyQUFDMTBDMEQwQkUKLToxMDIyMTAwMDhBMTUxRkU5RUE4RTEyMTlFOUY2OEIxMzg4MTQyQ0IyN0QKLToxMDIyMjAwMDg1MDk4ODAyQUZFRTBDQUEwQjJERTRDRjJBQjY4NTI4Q0IKLToxMDIyMzAwMDI1MDJDMDIwRDEwRjAwMDAyNjUyOUUxOEU5RDc2RjY4RjIKLToxMDIyNDAwMDAyNjAwMjBEMjg4MjI2Njg4MDA5ODkyMEQzMEYwODk5MzAKLToxMDIyNTAwMDBDNjU5MUZEMkE1MjlEQzBGRDlBMTE2NEExRjMyQjIwQkIKLToxMDIyNjAwMDBDQzFDQTBDQjgxMTA1ODgwODJEODI4NjBFQkUwQTdERTUKLToxMDIyNzAwMEMzMDI2MDAyMEEyRUUyQTM2OEUwMDgyNjIyMDAwRTY2NkUKLToxMDIyODAwMDBDNjU2MUZCMjg4Mjg1REU4MDY0ODIwNzI5MjAwNjk4MjAKLToxMDIyOTAwMDEwMjk5Q0Y5NjQ5MjA0MkMyMDY2ODgzMUIxQ0MwQzBDNzYKLToxMDIyQTAwMDQ3MkMyNDY2NkVDNjAyNjAwMUJEMDhGRDUwNjVEMUI3OUIKLToxMDIyQjAwMDE3RTlEQTFDRTlCRDE5RTlDNDJBMjEwNDhCMkQyODMwNUQKLToxMDIyQzAwMDEwMkQyMTFEMEM4ODEwMEJEQjA5MEE4ODAyMDk4ODAyRDkKLToxMDIyRDAwMDBDQkIwMjY0NDE1NTg5MTA5QjkwOTc5MTk4OTI4NDM1NkMKLToxMDIyRTAwMEQ5RTA2NDQwNkZENzMwREI0MEQ4MzA3RjQ3MTUyNzNDQkEKLToxMDIyRjAwMDEwQkNFOTI2MzIxNjhDMzk5NkU2OUNFNzhBMzcyODNDRDIKLToxMDIzMDAwMDA0MkFFNjA4MEIxMzE0NjQzMDRBMkE4MjE2ODY3OTlBNDYKLToxMDIzMTAwMDk2OTY5NzhDNzc4QTdEOUM5ODJCODIxNzJDN0MyMDlBOTYKLToxMDIzMjAwMDlBMkE5QzE4OUI5OTg2N0JCMDNCMjk4QzA4NkRCOTIxMTEKLToxMDIzMzAwMDhCQzk5NkE1MjY5MjE2MkFBQzE4Qjg5OTlCQTE5NkEwOEYKLToxMDIzNDAwMDhCQzc4NkNEOUJBMjJCOTIxNTk2QTQ5QkEzODZDQjJDRTQKLToxMDIzNTAwMENDMjAyNkE2MDVDMDM0NkI0NDIwMDQzQjBDMDQ0ODA5NUQKLToxMDIzNjAwMDBFODgwQTdGQjcwNUMwOTA5OTg4QkM4OEMwOTAwQjFBNjgKLToxMDIzNzAwMDEyNkRBQTA2OTk4ODk5OEIyODhDMTgxQ0U5QTgxQkU5NkMKLToxMDIzODAwMEE4MTZFOTlEQjFERDJBMjExQzIzRTYxMzBEMEQ0RjI2NjkKLToxMDIzOTAwMEU2MTIyRDI1MURDMDYwODcyMDdEQTkwN0MwRDAyODBBMjAKLToxMDIzQTAwMDAwMjgyNTFEMjZFNjE3MkNFNjE2MkJFNjE1MDVEODExNjQKLToxMDIzQjAwMDFBRTk5MzI4RTYxODBBN0EwMjJBRTYxNDI5MjAwNjI5M0YKLToxMDIzQzAwMDlDRjk2NDkxMDYyQTIwMENDMDkwMUJFOTdDMENBRDExOEQKLToxMDIzRDAwMEE1REQyQ0QyODVBQkFBQzBCMDI5QTRDRjBDRkMwQjJDNTgKLToxMDIzRTAwMEQ2ODVEQTIwOEMxNzJEMTIwNjU4MTEwREQyQTBEMTBGRTgKLToxMDIzRjAwMDhBMzU2RkE1NDZEODMwOEJENTZEQTkwQzhBODYwQThBOTYKLToxMDI0MDAwMDE0Q0JBNzdBQjMzNTI4OEMxMEMwODAyODI0NjcwODBCMUEKLToxMDI0MTAwMDQ3NjVCMTFDREEyMERCMzA4QzE3NTgxMTMxRDNBMEMwQ0UKLToxMDI0MjAwMEMxQzBEMDJEQTQwMzlDMTY2M0ZEMjgwMDg2MzY2NDYxQ0MKLToxMDI0MzAwMDE2ODkxMDlCOTA5NzkxOTg5MjYzRkVBMUMwODE2M0ZGQ0IKLToxMDI0NDAwMEM5OEExNkNDQTdEQTIwREIzMDhDMTc1ODExMjVDMDIwOUEKLToxMDI0NTAwMEQxMEZEQTIwQzBCNjU4MTFCNTYzRkZFNDAwREEyMDhCNDMKLToxMDI0NjAwMDEyNTgxMUIyNjNGRkQ5MDA5RjE4OUUxOThBMTEyQjIxQUYKLToxMDI0NzAwMDA0NTgxMDQ4OEUxOThGMThDMEIwMkIyNDY2NjNGRTJGQTUKLToxMDI0ODAwMEMwODA2M0ZFMDFEQTIwREIzMDhDMTdERDUwNTgxMjJEM0UKLToxMDI0OTAwMEQyQTBEMTBGREEyMDU4MTFBNTYzRkZBNDJEMjEyM0MwQUIKLToxMDI0QTAwMEM4N0RDMzAyNjNGRTA4OUYxODhBMTEyQjIxMDQyQzIwQ0IKLToxMDI0QjAwMDY2OTgxOUIxQ0MwQzBDNDcyQzI0NjY1ODEwMzY4RTE5MkUKLToxMDI0QzAwMDhGMThDMEQwMkQyNDY2NjNGREU1MDAwMDI2MjEyM0IwQkYKLToxMDI0RDAwMDY2MDYwNjRGMjYyNTIzNjU2RUVBMjgyMDZBN0Y4NzA1NTMKLToxMDI0RTAwMDA4Mjk0MTY0OTBGREMwRDAxQkU5M0YxOUU5NEUyNjIwMjAKLToxMDI0RjAwMDA3MjNFNjFCQjE2NjA5N0EwMjJCRTYxQTI4MjAwQTJENkIKLToxMDI1MDAwMEU2MUQyQUU2MUUwOTg4MDIyOEU2MUM4ODI2MDYwNjQ3REMKLToxMDI1MTAwMDI4RTYyMDhCMjgyNkU1M0UyQkU2MjEyRDI0MDcyQzIwQkIKLToxMDI1MjAwMDA2MkEyMDY0MkNDQ0ZENjRDMDlEQjRGRjYzRkU5NTAwOTgKLToxMDI1MzAwMDAwREIzMERBMjA4RDE2QzBDRTJFMEE4MDJDMjQ2ODhDNjkKLToxMDI1NDAwMDE3NTgxMDcyRDJBMEQxMEY4RTEwMjYzMjE2MUZFOTE1MUYKLToxMDI1NTAwMDA2MjYxNDhGRjYyQkU2MTI5N0UxMjdFNjEzMjhFNjE0RDkKLToxMDI1NjAwMEE2RkYwQ0ZGMDI5RkUwQzFGNjJFRUM0ODI2RUNDMDY0RUIKLToxMDI1NzAwMDZENkI4NDM1QzA4MDY0NEREQkQ5RTBEQzMwREJFMEREQTEKLToxMDI1ODAwMDMwQjE4ODE0RTkyOTg2Qzk4QUM4Mjc5REZGMkNDQzEwNTAKLToxMDI1OTAwMDI5OUMxMDJBNzYzMjJBNzYzMDA0NjQwMTFBRTkyNDI0MTAKLToxMDI1QTAwMDc2MzFBQTQ0MjQ3NjMzMkFEMjE2MTdFOTIxOUFCNjA3M0YKLToxMDI1QjAwMDY2MDE5NkI3ODRDM0JDQkI5NEI1ODQzNUI0REQ3NDgzMUYKLToxMDI1QzAwMEJGMkQyMTFENjNGRDhEMDA2NEFGNUUxREU4RjYyQzIwM0MKLToxMDI1RDAwMDE2OEREMjBBQ0MwQzAwRDEwNDAwQ0MxQUFDQkM5QzI5QkMKLToxMDI1RTAwMDYzRkY0NjAwMkIyMTA0NkVCODIyMkMyMDY2QjhDQzBDNjkKLToxMDI1RjAwMDBDNDcyQzI0NjZDOUM0OUYxODlFMTk4QTExNTgwRkU1RjAKLToxMDI2MDAwMDhFMTk4RjE4QzAzNDg3MjBDMEQwMkQyNDY2QzA2ODI2NEMKLToxMDI2MTAwMDI0MDY2M0ZFRDAwMDAwMDA2QzEwMDgyOTIwMDYyODlDQzgKLToxMDI2MjAwMEY4NjU4MkMzMjkyMTAyQzBBQTA5MDk0QzY1OTBFNjJCRUUKLToxMDI2MzAwMDIwMEMxNkU4REEwQ0JDMTFBNkNDMkVDMjg2QzFEMjdFQzQKLToxMDI2NDAwMEQzMDI2MDAyOEUxOUU4RDYwOUI5MEEyOTkyQTMyQTE2ODQKLToxMDI2NTAwMDAyNjg5MDA3OEEyMDA5QUEwQzY1QTI3NzI5QzI4NTY0QkUKLToxMDI2NjAwMDkyNzEyQjYyOUUxQUU4Q0M2RkI4MDI2MDAyNkUyQUEyQTkKLToxMDI2NzAwMDI2MjkxNjAxNjhBMDA4MkIyMjAwMEFCQjBDNjVCMjVDNTMKLToxMDI2ODAwMDI5NjI5REMxOEM2NDkyNTQyQTIxMjAwQTgwNjA5OTEwOEQKLToxMDI2OTAwMDJDMjAzQ0M3RUYwMDBGM0UwMTBCM0VCMUJEMEZEQjM5RDQKLToxMDI2QTAwMDBCQkIwOThGMjYwREJEMTEyRERDMUMwRDBENDEwRURENjAKLToxMDI2QjAwMDAzOEUyN0IxREQwRDBENDEwRkVFMEMwREJCMEIyQkJDQjYKLToxMDI2QzAwMDFDMEJCNzAyN0VDNzFDMkMyMTI1N0JDQjE2MkQxQUZDQjgKLToxMDI2RDAwMDBDQkEwQzBEQTE2MDAwMDkzRTAxMDczRUIxNzgwOTg3RDQKLToxMDI2RTAwMDM5MEI3NzBBNzdFQjAyNjAwMjA2MkIyMTIzMjgyMTIxODAKLToxMDI2RjAwMEIxQkIwQjBCNEYyQjI1MjM3QjhCMjlCMEJEMkQyNTIzODUKLToxMDI3MDAwMEM4NTVEQTIwREIzMDU4MEZGMDI5MjEwMkNDOTZDMEU4RkEKLToxMDI3MTAwMDBFOUUwMjJFMjUwMkNDNTdEQTIwREIzMERDNDA1ODEwMEEKLToxMDI3MjAwMDcwQzAyMEQxMEYyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMDUKLToxMDI3MzAwMDI0NjY2RUM2MDI2MDAxQ0YwOUZENTA2NUQxQzkyRjBBMUIKLToxMDI3NDAwMDAxMjgzMDExMjkyMjE0NjQ4MDExMkEyMjFCMDkwQzQ0MEIKLToxMDI3NTAwMDAwQzEwNDAwRkIxQTBCQUEwMjJBMjYxQjJEMzAxMEMwNTAKLToxMDI3NjAwMEEwQzBFMDg4MzAxQkU4OEY5NDEzOTUxNDI0MEEwMTI1M0IKLToxMDI3NzAwMDIwM0MyQkIwMjIwODhDMTQ3Nzg3MDRDMEYxMEJGQTM4NjgKLToxMDI3ODAwMEMwRjJDMDg0MDg1ODAxMEY1RjAxMEY0RTM4MDUzNTQwNzQKLToxMDI3OTAwMDA3RUUxMEMwRjAwODRGMzgwOEZGMTAwRkVFMDIyOERDREIKLToxMDI3QTAwMEZFQzBGMDA4NEYzODg0MkIwQkE4MTAwQUZGMTAyQTIxMTYKLToxMDI3QjAwMDIwMEY4ODAyMEU4ODAyMDg0NDAyMThFODlFOEYxMTA4MzQKLToxMDI3QzAwMDQ0MDIyODIxMjUwQTJBMTQwODI4MTQwNDg4MTEwQTg4OUEKLToxMDI3RDAwMDAyMkEyMTA0OTRGMDhFMjAwNEQ0MTAwOEVFMTEwNEVFOTUKLToxMDI3RTAwMDAyQzA0QTA0RUUwMjlFRjE4NDJBMDhBRTExMEVERTAyRjcKLToxMDI3RjAwMDk0RjQwQTU0MTEwRTQ0MDIwNTU1MTAwQzFFNDA5NEY3MkYKLToxMDI4MDAwMDA3RUUxMDBFNTUwMjA4NTUwMkMwODE5NUY2ODQzM0MwQkMKLToxMDI4MTAwMDUwOTRGM0IxOTQ4RTMyOTVGODk4Rjk5RUYyQzA4MEMxMkQKLToxMDI4MjAwMEVDMjQyNjE0OThGQjlFRjU5OUZBODUzODk1RkM4NDNBOTkKLToxMDI4MzAwMDk0RkQ4RTNCOUVGRTg4Mzk5OEZGODUzNTI1RjYxMDg0RTEKLToxMDI4NDAwMDM2ODUxNDI0RjYxMThFMzc4NDEzMkVGNjEyQzBFMDY0RjgKLToxMDI4NTAwMEIwNDk4OTMwNzc5NzQ0MkIzMDEwODgzMzhDMTExRkU4QUEKLToxMDI4NjAwMDYxOEQzMjJGQzYxNEMwRjQyRkM2MTU4RjJCMkVDNjE5QkEKLToxMDI4NzAwMDJEQzYxQTI4QzYxQjA0QUQxMTA5OTg0MDA2ODgxMTA4RjgKLToxMDI4ODAwMEREMDIwREJCMDIxOEU4NTZDMUQwMERCQjAyMDhGRjAyRTUKLToxMDI4OTAwMDJGQzYxNjJCQzYxODI4MEEwRTI4MTYwMjJCMjAwQzg4QzUKLToxMDI4QTAwMDEyMUNFODQ2MENCOTExQTY5OTJBOTI4NUFDQkIyRUI0MkQKLToxMDI4QjAwMENGMEE4ODBCMjg5Njg1Qzk3MThCMjY4QTI5MDdCQjA4MDEKLToxMDI4QzAwMDJCMjYwNjBCQUEwQzBBMEE0ODJBMjUyNTY1NTA0OEMwNjMKLToxMDI4RDAwMDIwRDEwRjAwREEyMDU4MTA5NTYzRkUzOTAwREEyMEMwQUQKLToxMDI4RTAwMEI2NTgxMDkyNjNGRTJFMDA2ODk3MzhDMDIwRDEwRjAwQjIKLToxMDI4RjAwMDAwREEyMERCNzA1ODEwNEZDMEMwQzBEMTBBREEzOTBBQTQKLToxMDI5MDAwMERDMzg2NUNERTQ2M0ZFMEQ4QTEwMkIyMTA0NTgwRjIxQkQKLToxMDI5MTAwMEMwRTAyRTI0NjY2M0ZFMjVEQjQwMkEyQzc0NTgwOTEyODEKLToxMDI5MjAwMEQyQTBEMTBGREEyMDU4MEYyNjYzRkNGNzZDMTAwNEMwMzgKLToxMDI5MzAwMDIwRDEwRjAwNkMxMDA0MjcwQTgwMUNFODNGMURFODNGREYKLToxMDI5NDAwMDFBRTgxNzBDMjkxMUFBOTkyQTJDRkMyQjkyODUwREFBOUEKLToxMDI5NTAwMDAyOUNCMTlBQjBDMDUxMTNFODNDMjg5Mjg1MTZFODM4MjEKLToxMDI5NjAwMDE0RTgzOUE2MjYwNDI0MEFCODg4Mjg5Njg1MjM0NjkxQjcKLToxMDI5NzAwMEE3NjYyNTY0OUZEMTBGMDA2QzEwMEFENjMwMjgzMDEwNEUKLToxMDI5ODAwMDI5MjAwNjI4OENGOTY0ODI5NzY4OTgwQjJBOUNGOTY1OUYKLToxMDI5OTAwMEExQjIwMjJBMDI1ODBGMEE4OTM3MUJFODAyQzg5MTY0QzMKLToxMDI5QTAwMDUyMEUyQTIxMDIwQTBDNEM2NUMyNTU4RDMwMTlFN0ZCRTQKLToxMDI5QjAwMDc0RDcwNTJFMjEyMzY1RTI5QTJGOTI5RTFBRTdGNzZGQUUKLToxMDI5QzAwMEY4MDI2MDAyNTAyQUEyMjY2OEEwMDgyQzIyMDAwQUNDMzUKLToxMDI5RDAwMDBDNjVDMjQxMkE5MjlENjRBMjNCOUExNTFGRTdGMThEQjYKLToxMDI5RTAwMDY3QzFFNkM4REQyQjYyMDYxOEU3RUY2NEIwMDUyODgwRjIKLToxMDI5RjAwMDIxN0I4QjQzMkIyMDBDMThFN0U5MENCQzExQThDQzI5QjgKLToxMDJBMDAwMEMyODY3OUVCNDYwRkJFMEEyRUUyQTM2OEUwMDUyRjIyQUMKLToxMDJBMTAwMDAwN0VGOTM3MkNDMjg1OUMxODY0QzIyRjJCMjEyRjg3OEEKLToxMDJBMjAwMDY2MEI3QjM2MEI3OTBDNkY5RDI2NkVEMjQ2MkMyMDNEQjMKLToxMDJBMzAwMDdCQzc0MENFNTU2MDAwMUUyQTIwMENDMUIyOEMyMDU4QTYKLToxMDJBNDAwMDEwNkY5QTE4NjRBMjQxOEQ2NzYzRkZDRkMwQzA2M0ZGMDcKLToxMDJBNTAwMEM1RDdCMDYzRkZEMzAwQzBFMDYwMDAwMjJFNjAwMzBFNTQKLToxMDJBNjAwMERCMEM2RUIyMEVEQzcwMENFQTExQUE2QTJBQUMyMDU4OUMKLToxMDJBNzAwMDAxOThEN0EwREEyMERCNzBDMUM4MkQyMTIwNTgxMDE1OEQKLToxMDJBODAwMDhDMjY4QjI3OUExNjBDQkIwQzdBQjMzNDhGMTg4OTYzNkIKLToxMDJBOTAwMDk5RjM4ODYyOThGMjhFNjU5RUY4MkQ2MDEwOEExODlERDEKLToxMDJBQTAwMDE3NjhENzI5QzBEMDlEQTkyQzIyMTgyQjIyMTM5Q0FCQzQKLToxMDJBQjAwMDlCQUE5N0E1OEU2NjdFNzMwMjYwMDA5N0NGNTg2MDAwMzAKLToxMDJBQzAwMDFGREEyMDhCMTY1ODBGREI2NUExMzU2M0ZGQkRDMDgxNkYKLToxMDJBRDAwMEMwOTA4RjE4QzBBMjlBRjk5OUZCOThGQTk3RjU2M0ZGRjYKLToxMDJBRTAwMEQyREIzMERBMjBEQzQwNTgwRjdFQzA1MUQ2QTBDMEMwMDcKLToxMDJBRjAwMDJCQTAxMDJDQTQwMzlCMTcyQzEyMDgwMjJBMDIwNjZCOTEKLToxMDJCMDAwMDAyREY3MDJENjAwMzhFMTc5RDE0OUUxMDBDREQxMUMwMjYKLToxMDJCMTAwMEUwQUQ2RDJEREMyMDU4MDExNzhDMTQ4QjE2QUNBQzJDNUQKLToxMDJCMjAwMDY0MDM4QTI2ODkyOUFCQUEwQTk5MEM5QTI2ODg2NjA5MjEKLToxMDJCMzAwMDA5NDgyOTI1MjUwNzg4MEM5ODY2MkYyMjE4QTdGRjJGRkEKLToxMDJCNDAwMDI2MTg2M0ZFOTZEQTIwREIzMERDNDBERDUwNTgxMDdEMUQKLToxMDJCNTAwMEQyQTBEMTBGQzAzMDJDMjA2Njg5NjFCMUNDMEMwQzQ3QkIKLToxMDJCNjAwMDJDMjQ2NjZFQzYwMjYwMDBDRUMwMzAwOUZENTA2NUQwRDAKLToxMDJCNzAwMEM2OEU2NzY0RTA2OTY0NzA2NkRCNjA4QzE4REY3MERBQUIKLToxMDJCODAwMDIwMkQ2MDAzOEUxNzBDREQxMTlFMTBBRDZEMkREQzIwMDUKLToxMDJCOTAwMDFFRTdBNzU4MDBGODIzMjYxOERBMjA4QjE2REM0MDJGRjIKLToxMDJCQTAwMDIyMTNERDUwQjFGRjJGMjYxMzU4MEYxREQyQTBEMTBGRDUKLToxMDJCQjAwMDAwMjgyMDNEMDg0ODQwNjU4REU3NkY5NTNFREEzMDhENEUKLToxMDJCQzAwMEI1NkQ5OTBDOENBODBDOEMxNENBQ0Y3Q0QzMkQyQUFDNzMKLToxMDJCRDAwMDEwQzA5MDI5MjQ2NzA5MEQ0NzY0RERDNTYwMDA4RTAwOTAKLToxMDJCRTAwMDJDMTIwODA2NkIwMjJENkMyMDA3N0YwMjhFMTdEQTIwNEMKLToxMDJCRjAwMDlFMTAxRUU3OEU1ODAwN0M2M0ZGOUEwMEMwOTE2M0ZGMTEKLToxMDJDMDAwMEQxNjU1MDgwREEyMERCNjBEQzQwNTgwRjM1QzAyMEMwMzEKLToxMDJDMTAwMEYwMkZBNDAzRDEwRkRBMjBDMEI2NTgwRkM0NjNGRkUwMzEKLToxMDJDMjAwMDAwNkY5NTAyNjNGRDcwREEyMERCMzBEQzQwREQ1MEM0QkMKLToxMDJDMzAwMEUwNTgwRUI2RDJBMEQxMEY4QTE1MkIyMTA0NTgwRTU1OUMKLToxMDJDNDAwMDIzMjQ2NjI4NjAxMDk4MTc2M0ZGMjUwMERBMjA1ODBGQTgKLToxMDJDNTAwMEI3NjNGRkFDQzg1OERCMzBEQTIwNTgwRTlCMkEyMTAyM0MKLToxMDJDNjAwMDY1QUY5REMwOTQwOUE5MDIyOTI1MDI2M0ZGOTJEQjMwNUMKLToxMDJDNzAwMERDNDBERDUwQzBBMzJFMEE4MDJBMjQ2OERBMjA1ODBFREEKLToxMDJDODAwMEEzRDJBMEQxMEZDMDIwRDEwRkRBMjAyQjIwMEM1ODBGRDcKLToxMDJDOTAwMEMwNjNGRjZDNkMxMDA0MjgyMDA2QzA2MjI4OENGODY1QTUKLToxMDJDQTAwMDgxMjVDMDUwQzdERjJCMjIxQkMwRTEyQTIwNkIyOTIxQzAKLToxMDJDQjAwMDIzMDBBMTA0QjA5OTI5MjUyM0IxQUEwMEVDMUEwQkM0NjIKLToxMDJDQzAwMDAxMEEwQTQ0MkEyNDZCMDRFNDM5MERDQzAzMENCQjAxMkQKLToxMDJDRDAwMDJCMjYxQjY0NDA2OTI5MjAwQzFCRTczMDBDOUExMTBCMzIKLToxMDJDRTAwMEFBMDgyRkEyODYxQkU3MkU2RkY5MDI2MDAwQjYwQjlCODUKLToxMDJDRjAwMDBBMkJCMkEzNjhCMDA4MkMyMjAwMEJDQzBDNjVDMEE0MzAKLToxMDJEMDAwMDJCQTI4NTFDRTc1MjY0QjA5Qjg4MkIyRjIxMDQwQzg4RDIKLToxMDJEMTAwMDAyOThCMDg0MjBDMDg1MDg0NDExMDg0NDAyOTRCMTg0MEMKLToxMDJEMjAwMDJBMDhGRjExOTRCNDhFMzQ5RkI3OUVCNUMwNDAxREU3QUEKLToxMDJEMzAwMDIzMkVBMjg1MEQ5RDA4MkVFQzI4MkVBNjg1MjVENENGMDYKLToxMDJENDAwMDI5MjEwMjA5MDk0QzY4OTQxQTY4OTgyMEM5NDAyQTIxNEYKLToxMDJENTAwMDAyNjVBMDBCMkEyMjFFMkIyMjFEN0FCMTAyNjVBMDc5RTIKLToxMDJENjAwMEMwMjBEMTBGMkMyMTIzNjVDRkRFNjAwMDA4MkUyMTIxNDkKLToxMDJENzAwMDJEMjEyMzdFREJENTJCMjIxRTJGMjIxRDI1MjUwMjdCMTQKLToxMDJEODAwMEY5MDFDMEIwNjRCRkM0MTNFNzA0MkNCMDA3MjhCMDAwMzkKLToxMDJEOTAwMERBMjAwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QjIKLToxMDJEQTAwMEFGRTc2M0ZGQTYyQTJDNzRDMEIwMkMwQTAyNTgwRDhEMjEKLToxMDJEQjAwMDFDRTcyODlDQTA4QjIwMDhCQjExMDZCQjAyOUJBMTg5QTUKLToxMDJEQzAwMDM0OTlBMjYzRkY3OTAwMDAyNjI0NjhEQTIwREIzMERDMjYKLToxMDJERDAwMDQwREQ1MDU4MEZEQ0QyQTBEMTBGREEyMDJCMjAwQzU4NDgKLToxMDJERTAwMDBGNTNDMDIwRDEwRjAwMDA2QzEwMDYwNzNEMTRDMDgwQTcKLToxMDJERjAwMERDMzBEQjQwREEyMEMwNDdDMDIxMjNCQzMwMDMyODM4NTgKLToxMDJFMDAwMDA4MDg0Mjc3NDAwMjJEREMwMTY0ODE1NzFFRTZFMDE5NzQKLToxMDJFMTAwMEU2RTEyOUU2N0U2RERBMDUwMDUwODgwMDMwOENDMEUwREUKLToxMDJFMjAwMEMwMjAyNUEwM0MxNEU2REZCNkQzOEZDMEMwRDAwRjg3RUEKLToxMDJFMzAwMDE0MjQ0MDIyMEY4OTQwOTQxMDc3RjcwNEMwODEwNDgyNDMKLToxMDJFNDAwMDM4QzBGMTBCMjgxMEMwNDRDMDIyMDQ1NDAxMDRGRDM4REUKLToxMDJFNTAwMDAyNTIwMTAyRkUzODA4REQxMDgyMUMwN0VFMTAwRTZFRDEKLToxMDJFNjAwMDAyMEVERDAyMjQyQ0ZFQzBFMDA0RkUzODBBRUUxMDBFMzUKLToxMDJFNzAwMDg4MDIwRDg4MDI4REFCMUVFNkNGMDhEODAyMEU4ODAyQUMKLToxMDJFODAwMDk4QjBDMEU4MDQyODEwMEU1RTAxODRBMDI1QTEyNTA4OTIKLToxMDJFOTAwMDQ0MTEwODQ0MDIwNTI1MTQwNDU1MTEwNDM0MDJDMDgxNkMKLToxMDJFQTAwMDBFOEUzOTk0QjE4RkFBODQxMDlGQjQ3NTY2MEEyNkExM0MKLToxMDJFQjAwMDFGQzBGMjA2MjYxNDYwMDAwNzI2QTEyMEMwRjIwNjI2RDUKLToxMDJFQzAwMDE0MDU2NTAyMEY3NzAxMDc4NzM5MDVFNjEwMDc3ODEwQUEKLToxMDJFRDAwMDA4NjYwMjA2NTUwMjk1QjYyNUExMDQwQUU2MTEwODU4QUYKLToxMDJFRTAwMDExMDgyODAyMDg2NjAyOTZCN0MwNjA2NDQwNTY2NDkwRDQKLToxMDJFRjAwMDUzMDY3RTExQzBGNDg5QzI4OEMzMEIzNDBCOTY0NTk4RTMKLToxMDJGMDAwMDQ3OTk0NjE4RTZCNzlGNDEwNDU5MTEwRTk5MDIxRkU2RUEKLToxMDJGMTAwMEI1MDIwRTQ3MDhEODAyOUY0MDk4NDIwRTk5MDJCNDM4NzUKLToxMDJGMjAwMEMxRTAwRTk5MDI5OTQ0MkZBMDBDMENGOTExMTRFNkEzRUMKLToxMDJGMzAwMDFFRTY5QkE0RkZBRTk5MkU5Mjg1MjZGNENGMEU4ODBCMzkKLToxMDJGNDAwMDI4OTY4NUQxMEYyQkEwMEMwQ0JFMTExQ0U2OUMxRkU2MDkKLToxMDJGNTAwMDkzQUNCQkFGRUUyREUyODUyNkI0Q0YwRDNEMEIyREU2MzUKLToxMDJGNjAwMDg1RDEwRjAwQzA4MDA1MjgzODc4NDgwMjYzRkVBNTYzMkMKLToxMDJGNzAwMEZFOTkwMDAwNkMxMDA2QzBCMEMwQTZDMEMwNjU3MEYwMUQKLToxMDJGODAwMDg4MzBDMDMwMDg4NzE0MDg4ODQwNjU4MEQzQzBFMEMwMEUKLToxMDJGOTAwMDkxQzBENEMwODIyNTIwM0MwQjNGMTA5NzEyODMxQ0MwRTcKLToxMDJGQTAwMDcwMDg1ODAxMEQ1RDAxMDg5NzM4QzA4MDBCOTgzODA3RUMKLToxMDJGQjAwMDc3MTAwNDg4MTAwODY4MDIwODc3MDJDMDgwMEQ5ODM4REUKLToxMDJGQzAwMDJEM0NGRTA4ODgxMDBEOUUzODhEMkIwQUVFMTAwOEVFNjEKLToxMDJGRDAwMDAyMDdFRTAyMENCODEwMEZERDAyMDUzQjQwMEVERDAyQzkKLToxMDJGRTAwMDlENDA4OTIwMDQzRDEwMDg5OTExMEQ5OTAyMkQyMTA0NUUKLToxMDJGRjAwMDA5QTkwMjA4REQxMTk5NDE4NzJBMDVCOTEwMEQzRDAyODIKLToxMDMwMDAwMDBBQkIxMTBEQkIwMjA4NzcwMjk3NDQyODIxMjU4NzEyQkQKLToxMDMwMTAwMDA4MjgxNDA0ODgxMTA3MUU0MDA3RUUxMDBFOTkwMjc1NDcKLToxMDMwMjAwMDY2MDkyNjIxMUYwNjI2MTQ2MDAwMDYwMDI2MjEyMDA2QjgKLToxMDMwMzAwMDI2MTQwODY4MDI5QjQ3MDk4ODAyOTg0NjI5MjAwQ0QyNkEKLToxMDMwNDAwMEMwQzA4MDBDOUUxMTFCRTY1RDFGRTY1NEFCOTlBRkVFMkQKLToxMDMwNTAwMDJERTI4NTI4OTRDRjBEQUQwQjJERTY4NUQxMEYwMDAwMTQKLToxMDMwNjAwMDAwMUZFNjUwMkZGMDIyQzAzMDY1RkYyMEMwMzE2M0ZGMDMKLToxMDMwNzAwMDFCREQ0MDhFNTFDQUUwMEU3ODM2OTgxMDA4NzcwQ0IyRUUKLToxMDMwODAwMEFBQjFCQjhGNTAyRERDMTA5OEQ5OUZEODg5NTM4RjUyOEQKLToxMDMwOTAwMDk5MTE5OURCOUZEQTdFODMwQUIxQ0MyNTVDMTBDOTc4M0YKLToxMDMwQTAwMDYzRkZDRjAwODgxMDhEMTEwOEU3MEM5NzUxQUQ4REQ3QzUKLToxMDMwQjAwMEYwNzhEQjAxQjFGNzlENTM5NzUyODgzMEMwMzAwODg3MTQKLToxMDMwQzAwMDE0MDg4ODQwNjQ4RUM1NjVCRkExNjNGRjkzMDAwMDAwQUIKLToxMDMwRDAwMDZDMTAwNEQ3MjBCMDNBODgyMEMwMzA4MjIxQ0FBMTc0NzUKLToxMDMwRTAwMDJCMUYyOTcyMDQ2RDA4MEZDOTgxQzk5Mjg1NzVCMTMzRjAKLToxMDMwRjAwMEEyNTI3QTNCMEM3NDJCMDk2M0ZGRTkwMDAwNjQ5RkVCM0EKLToxMDMxMDAwMEQxMEZEMjQwRDEwRjAwMDA2QzEwMDhENjMwQzA3MDk1OUUKLToxMDMxMTAwMDE1REE0MDhFMzkxNEU2MjM5QTE0NjRFMDAyNjQ1MUY4RkIKLToxMDMxMjAwMDI5MjAwNjJBOUNGODY1QTI1QjJBMjEwMjBBMEI0QzY1MUQKLToxMDMxMzAwMEIyMUIyQzMyMDAxNUU2MTk3NEM3MDUyRDIxMjM2NUQzNjcKLToxMDMxNDAwMDIwMkU1MjlFMUFFNjE1NkZFODAyNjAwMjE3MkFBMjI2NjgKLToxMDMxNTAwMDY4QTAwODJCMjIwMDBBQkIwQzY1QjIwODJFNTI5RDFERTgKLToxMDMxNjAwMEU2MTA2NEUxRkY4QjM4NjRCMjI5OUUxNkM4QkM4RDY5RjUKLToxMDMxNzAwMDFFRTYwRDY0RDAwNTJFRTAyMTdCRUI0OTJFMjAwQzE4QjUKLToxMDMxODAwMEU2MDcwQ0VGMTFBOEZGMjlGMjg2QzE4Njc5OEI0QTE3NTIKLToxMDMxOTAwMEU2MDQwN0U3MEEyNzcyQTM2ODcwMDQ4ODIwNzc4OTM5NTQKLToxMDMxQTAwMDI1RjI4NTY0NTI5RTI3MjEyRTA3QjczNjA3QjkwQzZGOEEKLToxMDMxQjAwMDlEMDFEN0IwODk2OTZFOTI0MjI4MjAzRDdCODczQzhBNjkKLToxMDMxQzAwMDE1Q0RBRjYwMDAxOEMxQjI4QzIwMkEyMDBDNTgwRThCOTAKLToxMDMxRDAwMEQ1QTA2NEEyQTg4QjY4NjNGRkNCQzA1MDYzRkZDM0MwQjcKLToxMDMxRTAwMEUwNjAwMDAyMkU2MDAzMEU5QjBDNkVCMjBFREM3MDBDRDEKLToxMDMxRjAwMEVBMTFBQTZBMkFBQzI4NUJGRkI2RDdBMERBMjBEQjcwRjYKLToxMDMyMDAwMEMxQzQyRDIxMUY1ODBFMzM4QzI2OEIyN0Q0QTAwQ0JCOTQKLToxMDMyMTAwMDBDN0FCMzI1OEE2M0MwOTA5QTUzODg2Mjk5NTg5ODUyNjEKLToxMDMyMjAwMDhGNjU5RjU5OEU2NzlFNUI4RDY2OTc1NTlENUE4QjY4RkIKLToxMDMyMzAwMDdCN0I3NDhCMTVDRUIzNjAwMDBEREEyMERCNDA1ODBEMUMKLToxMDMyNDAwMEZENjVBMTA5NjNGRkNDMDBEQTIwREIzMDhDMTQ1ODBEM0EKLToxMDMyNTAwMEE0RDZBMEMwQzBDMEQxOUQxNTJDQTQwM0RBMjBEQjYwODkKLToxMDMyNjAwMERGNzBEQzUwQzBFMDI1NjAwMzlFMTAxRUU1RTYwQzVEQkIKLToxMDMyNzAwMDExQUQ2RDJEREMyODVCRkYzRjhFNjZBNUE4OEY2NzI4RkEKLToxMDMyODAwMDY0MDNBRjdGNzdGQjAxQjFFRTlFNjY5RjY3OEQyNjhDNEUKLToxMDMyOTAwMDI5QTRERDBEQ0MwQzlEMjY4QjY4MEMwQzQ4MkMyNTI1MTMKLToxMDMyQTAwMDA3QkIwQzlCNjg2M0ZFQzMyQzIwNjY4OTYxQjFDQzBDMDQKLToxMDMyQjAwMDBDNDcyQzI0NjY2RUM2MDI2MDAwQjQwOUZENTA2NUQwMzAKLToxMDMyQzAwMEFFQ0JCQjhFNjlDQkU3REI2MERDNTBERjcwREEyMDFFNTMKLToxMDMyRDAwMEU1RTEyRDYwMDNDMDgwOTgxMDBDREQxMUFENkQyRERDOTMKLToxMDMyRTAwMDI4NUJGRjI0OEIxNUM4NEY4QTI2ODkyOUE0QUE5QTI2MTEKLToxMDMyRjAwMDBBOTkwQzA5MDk0ODI5MjUyNTY1QjEzQkMwMjBEMTBGNDEKLToxMDMzMDAwMERCNjAyRDZDMjhERjcwREEyMEMwQzAxRUU1RDI5QzEwNzcKLToxMDMzMTAwMERDNTA1QkZFQjU2M0ZGQ0IwMDJEMjAzRDBENEQ0MDY1QkQKLToxMDMzMjAwMERERkQ2RkU1MjJEQTMwOEY0NTZERTkwQzhFQUEwRThFMzkKLToxMDMzMzAwMDE0QzlFMzdFRjMxMTJBQUMxMEMwOTAyOTI0NjcwOTBGNDkKLToxMDMzNDAwMDQ3NjRGRERCNjAwMTQxMDBDMDkxNjNGRkVEMDA4ODE1MUIKLToxMDMzNTAwMDY1ODE0Q0RBMjBEQjYwOEMxNDU4MEQ2MUMwMjBDMDkwNzAKLToxMDMzNjAwMDI5QTQwM0QxMEZEQTIwQzBCNjU4MERGMDYzRkZERTAwQTgKLToxMDMzNzAwMDhBMTYyQjIxMDQ1ODBDODdDMEEwMkEyNDY2OEI2ODYzMDgKLToxMDMzODAwMEZGM0UwMDAwMDAyQjlDRjk2NUIwQzVEQTIwNTgwQzhDN0MKLToxMDMzOTAwMDYzRkQ5NTAwMkIyMDBDMENCQTExQTVBQTJGQTI4NkMxQTMKLToxMDMzQTAwMEMyN0ZDMzAyNjAwMEZDMERCOTBBMjk5MkEzNjg5MDA3OEUKLToxMDMzQjAwMDhDMjAwOUNDMEM2NUMwRUIyNkEyODU2NDYwRTUyQzIwMkUKLToxMDMzQzAwMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RkM2MDI3MDk2MEUKLToxMDMzRDAwMDBBREFFMDJCMjEwNDU4MEM2RjI3MjQ2Njg5MzA3Nzk3OEUKLToxMDMzRTAwMDRCMThFNTdGMURFNTgwOEEzMjhCMzNDMEY0MkMyMTA0MTUKLToxMDMzRjAwMDA5OUU0MDA2RUUxMTA0Q0MxMTBFQ0MwMjlGNjFDMUUwODMKLToxMDM0MDAwMDBFQ0MwMjlENjA4RjJCOUE2NjlCNjc5QzY0OTc2NTA4MjMKLToxMDM0MTAwMEZGMDI5RjYyMkYyMDBDMThFNTY5MENGRTExQTVFRTJEMEUKLToxMDM0MjAwMEUyODVBOEZGMjdGNENGMkREQzIwMkRFNjg1OEYxNTY1REEKLToxMDM0MzAwMEYwOTFDMDIwRDEwRjAwMDAyQTJDNzQ4QjE0NTgwNjRBM0EKLToxMDM0NDAwMEQyQTBEMTBGMDBEQTIwREJFMDU4MERCODYzRkVGRTAwRjkKLToxMDM0NTAwMDAwREEyMERCMzA4QzE0OEQxNTU4MEUzQUQyQTBEMTBGMzMKLToxMDM0NjAwMDAwMDA4ODE1Qzg4OERBMjBEQjMwNTgwQzk3MkEyMTAyMjIKLToxMDM0NzAwMDY1QUVEQUMwOTQwOUE5MDIyOTI1MDI2M0ZFQ0ZEQTIwREQKLToxMDM0ODAwMDJCMjAwQzU4MERDMzYzRkVDNDI3MjQ2OERBMjBEQjMwRTAKLToxMDM0OTAwMDJDMTIwNDJEMTIwNTJFMEE4MDU4MEM5QzYzRkM4MDAwMEYKLToxMDM0QTAwMEMwMjBEMTBGREEyMDU4MERBMThBMTVDREExREEyMDAzNTIKLToxMDM0QjAwMDNCMDIyQzEyMDQ1ODBEMEEyN0E0MDNDMDIwRDEwRjAwOTAKLToxMDM0QzAwMEMwMjBEMTBGMkEyQzc0OEIxNDU4MDYyN0QyQTBEMTBGRkMKLToxMDM0RDAwMDZDMTAwRTI4MjEwMjk0MTAwODA4NEM2NTgzNUUxRkU1Q0QKLToxMDM0RTAwMDJGMjlGMjlFNkY5ODAyNjAwMzYyMURFNTJCMjlEMjI2RDgKLToxMDM0RjAwMDY4OTAwODJBMjIwMDA5QUEwQzY1QTM1MDJDRjI5RDY0NEEKLToxMDM1MDAwMEMzNEEyQjIwMEMwQ0I2MTFBRjY2Mjg2Mjg2QzFFQzc4M0EKLToxMDM1MTAwMEUzMDI2MDAzNDIxOUU1MjIwOUI5MEEyOTkyQTM2ODkwREYKLToxMDM1MjAwMDA3OEEyMDA5QUEwQzY1QTMyRTI0NjI4NTY0NDMyOEMwNUIKLToxMDM1MzAwMEUxMkEzMTA5QzA3MDI3MjQ2Njg5MzU5QTEyOTkyQTg4QjAKLToxMDM1NDAwMDM2OTkxMzk4MkI4OTM3OTgxNDk5MkM4ODM4OTkxNTA4MkYKLToxMDM1NTAwMDU4MTQ5ODE2OTgyRDg5MzkyQTI1MDQyRTI1MUQyOTI1QjkKLToxMDM1NjAwMDFDMjgzMDI4QzA5MjI4MjQzQzJBMzAyOTA4MDg0Nzk4NzMKLToxMDM1NzAwMDE3MDk4OTAxMkEyNDNEMkEzMTE1OTkxODBBMDk0MTA5OTgKLToxMDM1ODAwMEE5MEMyOTlDRUMyOTI1MUY3RTg3MTkyRDJBMDAwREEwNDYKLToxMDM1OTAwMDYwMDAwODNFMDEwQTNFQjFBRDA4REEzOTBFQUExMTBBRjAKLToxMDM1QTAwMDk5MEMyOTI1MUYyNzIxMUYxOEU1MkMwNzgxNjAwMTA4ODgKLToxMDM1QjAwMDNFMDAwRDNFQjE4QTBEQTgzOTJEOUNGQzJEMjUyMEMxNjEKLToxMDM1QzAwMDkwMDk4ODM2MDhERDFDMDg3NzFDODkzRDhBM0MyRTI2MjgKLToxMDM1RDAwMDEzMkUyNjE0MkUyNjE1MkUyNDZCMjkyNTIyMkEyNTIxNkEKLToxMDM1RTAwMDI4MjAxNEMwQTAyNzI1MkUyRDI1MkYwODA4NDMyRDIxODMKLToxMDM1RjAwMDFDMjgyNDE0QzA3MDI3MjUyNDI3MjUyNTI3MjUyQzI3OUYKLToxMDM2MDAwMDI2MTgyNzI2MUIyNzI0NjcyNzI0NjgyOTMyMTEyNzI1RjcKLToxMDM2MTAwMDIzOTkxOTZFRDIxNTZEMDgwQUIxQUEwMEExMDQwMEU5MTgKLToxMDM2MjAwMDFBN0Q5QjA1NjNGRkVFMDAwMDAwODkxOTFERTRGREMwQjMKLToxMDM2MzAwMEUwQzA3MjlCMUQ4ODEzOTUxQjlGMUY5QzFFOTYxQzFDMkYKLToxMDM2NDAwMEU1MDgyNjIwM0RDMEYwMDYwNTQwMDhEQjE0MDc2NjAxQUEKLToxMDM2NTAwMDBEODgxMEMwNzEwNTdFMzgwNjdGMzg4NTEyMEJGRjEwNkIKLToxMDM2NjAwMDE2RTRFNjBBRUUxMDk2NDAwRkVFMDIwRDU1MTFCMEFGQ0IKLToxMDM2NzAwMDA5RkYxMTBGRUUwMjFGRTRGOTA4NTUwMjBGRUUwMkMwMTgKLToxMDM2ODAwMEY0OUY0MThBMjA5RjQ5OTY0ODlDNEI5QjRFOUQ0MzlFQTgKLToxMDM2OTAwMDQ2OEQxNjFFRTREQThCMTVDN0NGOUM0RDlDNEM5QzQ1N0QKLToxMDM2QTAwMDlDNDQwQkQ4MTQwRUFFMDIwREJCMTA5RTRBOUU0MjA4REQKLToxMDM2QjAwMDU1MDI5NTRGMEQxODE0MTVFNENEMEQ4ODExMDU4ODAyOUIKLToxMDM2QzAwMDk4NDcxOEU0RTg4NTI2MkU0NjEyMkU0NjFBMkU0NjIyRTIKLToxMDM2RDAwMDI2NDYxMDI2NDYxODI2NDYyMDJGNDYxMTJGNDYxOTJGMUIKLToxMDM2RTAwMDQ2MjEyODQ2MjQyODQ2MjYyQzQ2MTQyQzQ2MTU5NTExOUEKLToxMDM2RjAwMDhDMTcxOEU0REQwNTA1NDg4RjE4MDU1NTExMDkwNjQ4OTMKLToxMDM3MDAwMDI4NDYxMzg5MTQwRTY2MTEwNjU1MDIwRjdGMzkwQzNFQTgKLToxMDM3MTAwMDQwMDJFRTEwMTdFNEQ2MEQ5OTExMEMyNjQwMEY2NjExRTkKLToxMDM3MjAwMDBCOTkwMjBDMEM0MDhCMUQwMUNDMTAwNkZGMDIyNzQ2QTIKLToxMDM3MzAwMDFCMjk0NjE2QzA3MDI5MzExNjE2RTRDRDBFQ0MwMjA1QTEKLToxMDM3NDAwMEZGMDIxRUU0OUMxNUU0Q0IyRjQ2MTcyNjQ2MUNDMEYwNTIKLToxMDM3NTAwMDg2MUMyRjQ2MUQyRjQ2MUYyRjQ2MjcyNTQ2MjMwRUNDOUQKLToxMDM3NjAwMDAyODUxQjJDNDYxRTFFRTRDNDFDRTQ4RThGMUY4Q0M3RDIKLToxMDM3NzAwMDJFNDYyNUFEQ0MyODIwMDYyOTI0NkEyNDMxMTc5QzJERkQKLToxMDM3ODAwMDI0MjUyMzhDMUVDQzgxMjcyNDA3QzBENzdGOTcxODhFMzEKLToxMDM3OTAwMDExMDkyODQxOUUyOTY0ODA4RTY0NDA5OEMwOTgwOTQ5ODcKLToxMDM3QTAwMDM2MkQyNDA2NjAwMDBCMDA2NDQwNzVDMDk4MDk0OTM2MjgKLToxMDM3QjAwMDJEMjQwNjAxQzQwNDJEMEFBMDJFMjEwNDI4NjI4NTA4QTgKLToxMDM3QzAwMEVFMTFBRDg4Mjg2Njg1ODYzRjg0M0UyRDMyMTAwNjQ4NkUKLToxMDM3RDAwMDE4OThDMzAwQzQwNDA2NDYxODE4RTQ3ODA0QzQ1MzAwQkIKLToxMDM3RTAwMDY2MTEwNkREMDJBOEI4Mjc4NENGOURDNDA5MDY0RTk2NEYKLToxMDM3RjAwMEM1MURFNEEzMDVBNjExMDY0NDAyMTZFNEEwOURDMDA2NUIKLToxMDM4MDAwMDQ0MDI5NEMyQzA0MzA0RUUwMjlFQzExNEU0NjMyNkYyNTMKLToxMDM4MTAwMDlEMjc0NEEyMjY2QzE4MjZGNjlENjU1MDQyQzAyMEQxRjMKLToxMDM4MjAwMDBGQzA5MDYzRkY4OTAwMDA2NTRGNzBDMDk4QzBFODJFRkMKLToxMDM4MzAwMDI0MDY2M0ZGN0QyRDI0MDZDMDkwNjNGRjc1Q0M1N0RBMDQKLToxMDM4NDAwMDIwREIzMDhDMTA1ODBDMjZDMDIwRDEwRjAwREEyMEMwQUQKLToxMDM4NTAwMEI2NTgwQ0I2NjNGRkU1MDBEQTIwNTgwQ0I0NjNGRkRDMDEKLToxMDM4NjAwMDJBMkM3NDhCMTA1ODA1NDBEMkEwRDEwRjZDMTAwNjI4NUEKLToxMDM4NzAwMDIwMDY4QTMzNkY4MjAyNjAwMTYxQzA1MDEzRTQ0NzI5MzkKLToxMDM4ODAwMDIxMDIxNkU0NDY2OTkyMDQyNTI1MDJEOTUwMkMyMDE1MDAKLToxMDM4OTAwMDlBMjgxNEU0NDQ4RjI2MjcyMDBCMEFGRTBDMDQ3NzA5OEIKLToxMDM4QTAwMDJCNzExQzY0RTEzOThFNDI4RDQzNkZCQzAyNjAwMTZGNDUKLToxMDM4QjAwMDAwRTEwNEIwQzgwMDg4MUEwOEE4MDgwOEQ4MDI5ODI3QjAKLToxMDM4QzAwMDJCMjAwNjY4QjMyRUNFOTcyQjIyMUUyQzIyMUQwMTExMTEKLToxMDM4RDAwMDAyN0JDOTAxQzBCMDY0QjAxNzJDQjAwNzI4QjAwMERBNzEKLToxMDM4RTAwMDIwMDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGODIKLToxMDM4RjAwMEU3QzAyMEQxMEYyRDIwNjQ2NERGQ0E4QjI5QzBGMTBCRjMKLToxMDM5MDAwMEFCMEM2NkJGQzAyQjIwMEMwQ0JDMTFBNkNDMjhDMjg2MDkKLToxMDM5MTAwMDJFMEEwODc4RUI2MTFFRTQyMjBFQkUwQTJFRTJBMzY4OEUKLToxMDM5MjAwMEUwMDUyODIyMDA3RTg5NEYyOUMyODUxRUU0MkU2NDkwN0UKLToxMDM5MzAwMDQ2MUZFNDNDOUU5MEMwODQ5ODkxMjgyMDBBOTU5MzBGREUKLToxMDM5NDAwMDg4MDI5ODkyOEUyMDBGRUUwMjlFOTQyRjIwMDc4ODI2RTAKLToxMDM5NTAwMDJGOTUwQTk4OTY5QTk3MkUyMDA2MjUyNDA3NjhFMzQzMDgKLToxMDM5NjAwMDI5MjEwMjFBRTQxNjJEQzI4NUFBQkEyRERDMjAyREM2MDMKLToxMDM5NzAwMDg1MjVBNENGNjNGRjRFMDAyQjIwNjVDQkJEQzBDMjJDOTQKLToxMDM5ODAwMDI0NjVDOUY2MDVFNDMxMDAwMjAwMkU2MjgyMUZFNDFFQTAKLToxMDM5OTAwMDJENDEwMjBGRUUwMjJFNjY4MjBERTQzMTI5MjEwMjYzRDEKLToxMDM5QTAwMEZGMjMwMDAwNjRERkI4ODk0MjI4MjAxNjAwOTEwNDBEMkYKLToxMDM5QjAwMDg4MEMwMDg4MUFBOEE4OTgyOTYzRkZBMzhDMjAyRDMyQjAKLToxMDM5QzAwMDIxQjFDQzlDRDAyQjMyMjEyQTMyMjNCNEJCMkIzNjIxRkYKLToxMDM5RDAwMDdCQTlBOTJEMzIyMjJEMzYyMTYzRkZBMEMwMjBEMTBGNTMKLToxMDM5RTAwMDlGMjcyNTI0MTVBQ0I4Mjg3NTFDMkIyMDA2QzBDMTJFOTYKLToxMDM5RjAwMEJDRkU2NEUwQUI2OEI3NzcyREJDRkQ2NURFQzcyRDIwNEIKLToxMDNBMDAwMDY0QzBGMDY0RDA4NjhFMjkwRUFFMEM2NkUwODlDMEYxRTkKLToxMDNBMTAwMDI4MjA1QTI4OENGRTA4Q0YzODY1RkVFODYzRkY1ODAwM0UKLToxMDNBMjAwMDAwRTAwNDkzMTBDMDgxMEFGMzBDMDM4MzM5Qzc4RjA4QTgKLToxMDNBMzAwMEQ4MDMwOEE4MDEwOEY4MEMwODA4MTlBODMzMDNDODBDMTMKLToxMDNBNDAwMEE4QjgyODc1MUMwMzBCNDcyQjI0MTU4MzEwQ0JCNzAwOEYKLToxMDNBNTAwMEUxMDRCMEJDMDBDQzFBQUNBQzBDREMwMjlDMjc2NTlFMjcKLToxMDNBNjAwMDVFQzBCMjBCOTkwMjA5MDk0RjI5MjUwMjYzRkU1MDAwN0UKLToxMDNBNzAwMDJEMjA2QTBEMkQ0MTY1REY3RURBMjBDMEIwNTgwQzcyMTIKLToxMDNBODAwMDY0QUYxOEMwRjE2M0ZFRUY5RjI3NjNGRkQwMkUyMjFGQTMKLToxMDNBOTAwMDY1RUUzMjYzRkY3OTAwMDAyODIyMUY2NThFMjc2M0ZGRTEKLToxMDNBQTAwMDZFMjUyNDA2MjUyNTAyQzA5MDYzRkUxOTZDMTAwNjY1NUMKLToxMDNBQjAwMDcxMzMyQjRDMThDMEM3MjkzQzE4QzBBMUMwODAwOUE4N0QKLToxMDNBQzAwMDM4MDgwODQyNjQ4MTEwMUNFM0IxMUFFM0IyMkFDNjdFQUEKLToxMDNBRDAwMDJBNUNGREQzMEY2REFBMDUwMEIwODgwMDkwOEM4ODQwNDkKLToxMDNBRTAwMEMwQTAwODg5NDcxRkUzREIwOTBCNDcwODRDNTAwODBEQUQKLToxMDNBRjAwMDUzMDRERDEwQjRDQzA0Q0MxMDBENUQwMjlEMzEwQ0JCMjEKLToxMDNCMDAwMDAyOUIzMDg4NDM4RTIwOTgzNTBGRUUwMjlFMzI4RDI2MjAKLToxMDNCMTAwMEQ4NTBBNkREOUQyNjhFNDBDMDkwMEU1RTUwNjRFMDk3ODIKLToxMDNCMjAwMDFDRTNDMTFFRTNCMDAzOEIwQkMwRjQ5RkIxOUVCMDJEMEMKLToxMDNCMzAwMDIwMEE5OUIzMENERDAyOURCMjhGMjAwQ0ZGMDI5RkI0QzYKLToxMDNCNDAwMDhFMjYyRDIwMDc5RUI2OEMyODJEQjUwQTlDQjcyOTI0RDkKLToxMDNCNTAwMDA3MkYyMDA2MkIyMDY0NjlGMzM5Q0JCNjFERTM5MjIzOEYKLToxMDNCNjAwMDIwMTY4REQyMEIzMzBDMDBEMTA0MDAzMzFBQTNDM0I0M0EKLToxMDNCNzAwMDhEOTMyOTIyMjAwQzEzRTM5MTFGRTM4ODBDMkUxMUFGQTMKLToxMDNCODAwMEVFQTMyMjI5MjRDRjJGRTI4NUQyQTAwRkREMEIyREU2NTQKLToxMDNCOTAwMDg1RDEwRjAwQjQ4QzJFMjAwQzBDRUIxMTFGRTM4ODFENzcKLToxMDNCQTAwMEUzN0ZBRkVFQURCQjIyQjI4NTI5RTRDRjAyQzIwQjIyODgKLToxMDNCQjAwMEI2ODVEMkEwRDEwRjAwMDAyRTIwMEMwQ0VCMTExRkUzMTQKLToxMDNCQzAwMDdGMUNFMzc2QUZFRUFDQkIyMkIyODUyOUU0Q0YwMjgyNDQKLToxMDNCRDAwMDBCMjJCNjg1RDJBMEQxMEZDMEQwMEJBRDM4N0RDODAyNjQKLToxMDNCRTAwMDYzRkVFQzYzRkVFMDhFNDAyNzJDNzQ3QkVFMTJEQTcwRUQKLToxMDNCRjAwMEMwQjMyQzNDMThERDUwNTgwQTc3QzA5MDg4NDA2M0ZFNTMKLToxMDNDMDAwMEUzMDY2RTAyMDIyQTAyMDMzQjAyREM0MERENTA1ODAwNEMKLToxMDNDMTAwMDA0OUExMERCNTBEQTcwNTgwNDU0ODgxMDYzRkVGNjAwRTIKLToxMDNDMjAwMDZDMTAwODJFM0MxOEMwQTA5MjE2MUZFMzY4OEM0MEFGQTEKLToxMDNDMzAwMDJGMEM4QzQ3QzAyMzA0Q0IwQkREQjA3RkIzMDIyREJEMEUKLToxMDNDNDAwMEY4RDlEMEMwQjA3NUMzMDI2MDAwOEQ5RjE0NkQwODRGQzUKLToxMDNDNTAwMDhEOTAwRDZEMzZBREFBMEQ2NjBDMEVCNzBCMEVCRjBBMUEKLToxMDNDNjAwMDlERjBCODc3Qjg5RkQ4RjAwMDgwODgwMDcwOEM5NzExQ0QKLToxMDNDNzAwMDg3OTA5ODEwOTcxNTY4QjEyQUIyMjI3N0QzMkQ4ODkxMzIKLToxMDNDODAwMEMwRDBDQjhGOTg5MDI3OUMxMDAwNzA4ODk3MTIwMEYwQkUKLToxMDNDOTAwMDhDOUYxMzlEOTE2NDYwQTBDMDgxMDhCQjAzNzVDQjM4RDUKLToxMDNDQTAwMDYzRkZBOTAwQjEyMjJFRUMxODYzRkZDRTg1OTIwRDc3MzkKLToxMDNDQjAwMDBDODY5Mzk3OTBBNkQ2N0Q2QjAxQjE1NTk1OTI5NjkzRkQKLToxMDNDQzAwMDg5NDI2MDAwMTdCM0NDMjk5QzE4ODgxNEREOTA3ODkzNDIKLToxMDNDRDAwMDAyMkQ5REY4RDlEMDYzRkZCQjg5NDJEQTkwODUxNjBDN0UKLToxMDNDRTAwMDBENDcyRDQ0MDIxQkUzNjc5MjMxOUIzMDg2NDM3QTkxNDYKLToxMDNDRjAwMDI2MUJFMzU4MUVFMzY1ODk1MDBFNjYwMTk2MzUwQjk5MjUKLToxMDNEMDAwMDAyOTkzMjg4NDIwQTg4MEM5ODQyODc1NkE3QTc5NzU2OEMKLToxMDNEMTAwMDhGNDRBRkFGOUY0NEQxMEYxQkUzNEY4OTUwOTYzNTBCQjMKLToxMDNEMjAwMDk5MDI5OTMyODg0MjBBODgwQzk4NDI4NzU2QTdBNzk3MjkKLToxMDNEMzAwMDU2OEY0NEFGQUY5RjQ0RDEwRjg5NDI2M0ZGOUUwMDAwNkUKLToxMDNENDAwMDZDMTAwNjFGRTM1MjkzMTBENjMwODgzMEMwOTEwODYzODAKLToxMDNENTAwMDUxMDgwODQ3MDU5ODM4OTgxMTI4MjEwMjI5M0NGRDA4ODgKLToxMDNENjAwMDA4NEM2NTgxNTc2NTkxNTQyQTYyMDMwQTJCNTA2NUIxNEUKLToxMDNENzAwMDdFMEE2ODE0MkUwQUZGN0NBNjBBMkMyMDVBQ0NDNDJENzkKLToxMDNEODAwMDBBMDIyRDI0NUE3OEUwMDI2MDAyMDg4QTI4ODkyNjE4M0YKLToxMDNEOTAwMEUzNDAwQTk5MEM2NTkyMDMyRTIwMEIxQ0UzM0YwOEVFQ0EKLToxMDNEQTAwMDBCMkVFRDAxMkRFMDMyMkVFMDMzMDhERDExMEVERDAyODkKLToxMDNEQjAwMDFFRTMzOUFGREQwRUREMDEwRENDMzcyRDIwMEM4OTYwRkYKLToxMDNEQzAwMEMxRTA3Qjk2MjMxQUUyRjc4QjYyMkFBMDIxOUMxMjdCMkEKLToxMDNERDAwMEEzMTZEQUQwQzFCMDBCNEIzN0I0QkI4QzIwNTgwQjg3N0QKLToxMDNERTAwMDhDMTJEQkEwQ0VBQjYwMDFCRjBFNEUzNzFCRTJFQzBDOTkKLToxMDNERjAwMERBMTFBQkFBMjhBMjg2QjhFRTc4RUIzNTFFRTJFOTBFRkUKLToxMDNFMDAwMERFMEEyRUUyQTM2OEUwMDQ4ODIwN0U4OTI0MkJBMjg1QTYKLToxMDNFMTAwMDY0QjBBMjg3NjJERTcwMEM3OTM2OUIxMzg4MjY4RDI3RUEKLToxMDNFMjAwMDA5N0EwQzA4REQwQzZGQUQwRTc3RDMxMDdFN0I2OTYwQ0MKLToxMDNFMzAwMDAwMUZDMEIwNjNGRkQ4MDBENzkwNjNGRkVCOUMxMkRBN0QKLToxMDNFNDAwMDIwREI3MDU4MEFGQzhCMTM4QzEyNjVBMDZGOEU2MjdFOEIKLToxMDNFNTAwMDdCNDY5QzEyOUIxM0NDNUZEQTIwOEIxMDA0NEMwMjU4REIKLToxMDNFNjAwMDBBQTBENkEwOEIxMzI1MEEwMURFNzBEQTIwREM2MEREMDMKLToxMDNFNzAwMDQwNUJGRjZCOEMxMkQ5QTAyRDIwMENDMEUwMUJFMkM3NjkKLToxMDNFODAwMDE3RTJDRjBDREExMUE3RDdBQkFBMkJBMjg1MkU3NENGREQKLToxMDNFOTAwMDBCOTkwQjI5QTY4NTYzRkYyNERBMjBEQzYwREQ0MERFNjgKLToxMDNFQTAwMDcwODkxMTI4MjAwN0RGNTBBOTg4MjgyNDA3NUJGRUZGQUUKLToxMDNFQjAwMEQyQTBEMTBGMDAwMERCRDBEQTIwNTgwQjFDNjU1MEYzRTQKLToxMDNFQzAwMDJBMjAxNDBBM0E0MDY1QTBFRURCNjBEQzQwREQzMERBREYKLToxMDNFRDAwMDIwNTgwOThFMUZFMkVFRDZBMDY0QTBENzg0QTE4M0EwNEIKLToxMDNFRTAwMDA0MDQ0NzAzMDU0Nzk1MTEwMzYzNTFDMDUxNjNGRTY4RkQKLToxMDNFRjAwMDJDMjAwNjI4Q0NGRDY0ODBBODY4QzcwNEMwOTMyOTI0MjAKLToxMDNGMDAwMDA2QzBDMThFNjQxOUUyQTc5RTI2OUUyOTlFMjg4OTkyMkEKLToxMDNGMTAwMDlFMjcwMDkxMDQwMENDMUEwMDkwMDRCMEM4OEQ2NTA4NUIKLToxMDNGMjAwMEVFMDFBRUNDMEQwRTVFMDFFRTExQUVDQ0IwQ0MyRTBBODEKLToxMDNGMzAwMEZFMEMwQzE5MEVDQzM2QzBFMjBDMEM0NzBFQ0MzNzJDMDQKLToxMDNGNDAwMDI0MTZDMEIwMkIyNDA3MkMyMDA2MUJFMjlGMEEwRTQ1MjYKLToxMDNGNTAwMDBEMDg0MjI4MjQwQjJFMjQwQUI0ODkyOTI0MEM3REI4OEMKLToxMDNGNjAwMDVBMjkyMDE2MEE1RDUyQjA5RTBFREQzNjJEMjQ2NDJCOTAKLToxMDNGNzAwMENDRkQ2NUJERkIwRDBDNDc2NENERjUxREUyOEE4ODI4OUMKLToxMDNGODAwMDhERDIwQzlCMEMwMEQxMDQwMEJCMUFBQjg4OTgyOTYzMUUKLToxMDNGOTAwMEZEREUwMDAwMUNFMkI5NjNGRTIwMDAwMDFDRTJBRjYzRkUKLToxMDNGQTAwMEZFMTg4RDY1NjNGRkEyMDAwMERBMjAyQjIwMEM1ODBBNTIKLToxMDNGQjAwMEY4NjQ1RjBCQzAyMEQxMEZDMDIwRDEwRkMwOTNDMEUzQzUKLToxMDNGQzAwMDJFMjQxNjYzRkY5RDAwMDA2QzEwMDRDMDYwMTdFMjcyN0YKLToxMDNGRDAwMDFERTI3NUMzODEyOTMxMDEyQTMwMDgyOTI0MEE3OEExRkMKLToxMDNGRTAwMDA4QzNCMjdCQTE3MkQyNjBEMTBGQzBDMTY1NTA1MTI2MDcKLToxMDNGRjAwMDI1MDIyQUQwMjAyRjIwMEIyOTBBRkIyQjIwMTQyRTIwNEIKLToxMDQwMDAwMDE1MjYyNDE1MDlCQjAxMERGRjA5MjhGMTFDMkIyNDE0Q0EKLToxMDQwMTAwMEE4RUUyRUY1MUM2NEEwQjUyQjIyMUUyODIyMUQwMTExMkUKLToxMDQwMjAwMDAyN0I4OTAxREI2MDY0QjAxNzJDQjAwNzI4QjAwMERBOEUKLToxMDQwMzAwMDIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGMjYKLToxMDQwNDAwMEU3REIzMERDNDBERDUwREEyMDU4MDBEODI5MjEwMjA5QjYKLToxMDQwNTAwMDBCNENDQUIyRDJBMEQxMEYwMENDNUEyQzMwMDg3QkMxNzUKLToxMDQwNjAwMDM3MkVEMDIwNjRFMDJEMDIyQTAyMDMzQjAyREM0MEREMjMKLToxMDQwNzAwMDUwNTgwMENFRDJBMEQxMEYyQjIwMTRCMEJCMkIyNDE0NEIKLToxMDQwODAwMDBCMEY0MTY0RjA4MjdDQjdDQUMwQzEwQzlDMDIyQzI1ODYKLToxMDQwOTAwMDAyRDJBMEQxMEZDMDIwRDEwRjJFMjAwNjY5RTJDMTJGN0QKLToxMDQwQTAwMDIxMDIwRjBGNEM2OUYxQjgyNjI0MDYyNjI1MDIyQjIyODcKLToxMDQwQjAwMDFFMjgyMjFEMkEyMDBCMjkyMDE1MERBQTA5MkNBMTFDMUYKLToxMDQwQzAwMDI2MjQxNUFDOTkyOUE1MUM3QjgxNEE2MDAwNDlCMEJCMDgKLToxMDQwRDAwMDJCMjQxNDBCMEQ0MUNCRDY3Q0I3MDIyQzI1MDIyQjIyQUUKLToxMDQwRTAwMDFFMkUyMjFEN0JFOTAyMkIwQTAwNjRCMDE3MkNCMDA3OUMKLToxMDQwRjAwMDI4QjAwMERBMjAwNzg4MEEyODgyNENDMEQxMEI4MDAwNDMKLToxMDQxMDAwMERCQTA2NUFGRTdDMDIwRDEwRjI2MjQwNkQyQTBEMTBGRDcKLToxMDQxMTAwMDI2MjQwNjYzRkZDN0RCNjAxREUyMjM2NEJGNDIyQ0IwODgKLToxMDQxMjAwMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMEIKLToxMDQxMzAwMDAwREJBMDY1QUZFNzFERTIxQjYzRkYyNDZDMTAwNDI4QzEKLToxMDQxNDAwMDIwMDZDMDY0NkY4NTY0Q0E1QjI5MjAxNDdEOTcyNkRBMzcKLToxMDQxNTAwMDIwREIzMERDNDAwNTVEMDI1ODAwMTkyOTIxMDIwOTBBRTQKLToxMDQxNjAwMDRDQzhBM0MwMjBEMTBGMDBDMEIxMEI5QjAyMkIyNTAyNkQKLToxMDQxNzAwMEMwMjBEMTBGMDAwMDAyMkEwMjAzM0IwMjJDMEEwMTU4ODIKLToxMDQxODAwMDAwQzlDOUFBREEyMERCMzBEQzQwNTgwOUQ1MjlBMDExQzIKLToxMDQxOTAwMEQzQTA3RTk3MDgyQzBBRkQwQzlDMDEyQ0E0MTFDMDUxQzEKLToxMDQxQTAwMDJEMjAxNDA2REQwMjJEMjQxNDYzRkZBMkRBMjBEQjMwNUIKLToxMDQxQjAwMERDNDBERDUwQzBFMDU4MDk1NUQyQTBEMTBGMDAwMDAwMEUKLToxMDQxQzAwMDZDMTAwNjE2RTFGNjFDRTFGNjY1NTEzQkMwRTExN0UxMDMKLToxMDQxRDAwMEYyMjgyMTAyOEIyMDA4MDg0QzY1ODA3QzI5MzIwMDA5RDYKLToxMDQxRTAwMDY5NTE2OTkzNzMyQTYyOUU2RUE4NDgyQTcyMjY2OEEwNTQKLToxMDQxRjAwMDAyN0FCOTNGMkE2MjlEQjQ0RkNCQTcyQjIwMEMwQ0JEOEQKLToxMDQyMDAwMDExMDZERDA4MjhEMjg2NzhGQjE1MENCRjBBMkZGMkEzMTEKLToxMDQyMTAwMDY4RjAwNDg4MjA3Rjg5MDcyREQyODVEMzBGNjVEMDYwOTAKLToxMDQyMjAwMDJBMjEwNDE5RTIxRUQzMEY3QTlCMUREQTIwNTgwODUzNjUKLToxMDQyMzAwMDYwMDAyNTAwMkMyMTA0MUJFMjE5N0NCQjE0REEyMEMwOEQKLToxMDQyNDAwMEI2NTgwODRFQzk1NDYwMDBFRkRBMjA1ODBBMzg2MDAwQUEKLToxMDQyNTAwMDA3MDBEQTIwQzBCNjU4MEEzNTY1NTBEQ0RDNDBEQjMwOTgKLToxMDQyNjAwMDhEMzBEQTIwMEQ2RDUxNTgwOEE5RDNBMDY0QTBDOTFDNjcKLToxMDQyNzAwMEUxQ0NDMDUxODRBMThFQTAwNDA0NDcwRTBFNDc2M0ZGMTkKLToxMDQyODAwMDRGMkIyMTA0QzA4Qzg5MzFDMDcwREY3MDA5Rjk1MDA5QUYKLToxMDQyOTAwMDhGMzg2RUI4MTcyQzIwNjZBRUNDMEMwQzQ3MkMyNDY2RDkKLToxMDQyQTAwMDdDRkIwOTlEMTA1ODA4QkI4RDEwMjcyNDY2OTREMTFFRjUKLToxMDQyQjAwMEUxRDJCOERDOUVEMDY1NTA1NkMwRDdCODNBQzBCMUMwODQKLToxMDQyQzAwMEYwMENCRjM4MEYwRjQyQ0JGMTE5RTFCMDE4RTFCMjI4NjIKLToxMDQyRDAwMDk2N0VCMDRCRDMwRjZEQkEwNTAwQTA4ODAwQzA4QzJDMjEKLToxMDQyRTAwMDIwMENDMDIwMURFMUI2MENDRjExQTZGRjJFRjI4NUFEMkIKLToxMDQyRjAwMENDMjdDNENGMEU0RTBCMkVGNjg1RDEwRkMwODAwQUI4NDYKLToxMDQzMDAwMDM4NzhEMENENjNGRkMxMDA4RTMwMEUwRTQ3NjNGRUJERkUKLToxMDQzMTAwMDJBMkM3NDJCMEEwMTA0NEQwMjU4MDhBRTJGMjAwQzEyQ0YKLToxMDQzMjAwMEUxQTcwQ0Y5MTFBNjk5Mjg5Mjg1QTJGRjI3RjRDRkQyMTQKLToxMDQzMzAwMEEwMDg0ODBCMjg5Njg1RDEwRkMwMjBEMTBGMDAwMDAwOUYKLToxMDQzNDAwMDZDMTAwNEMwNjBDQjU1REIzMERDNDAwNTVEMDIwMjJBRjYKLToxMDQzNTAwMDAyNUJGRjlCMjkyMTAyMDkwODRDQzg4MkQyQTBEMTBGMjEKLToxMDQzNjAwMDJCMjAxNEIwQkIyQjI0MTQwQjBDNDFDQkM1N0RCN0VCMTkKLToxMDQzNzAwMEMwQzEwQzlDMDIyQzI1MDJEMkEwRDEwRjAwMDAwMjJBNDEKLToxMDQzODAwMDAyMDMzQjAyMDY2QzAyQzBEMEM3RjcyRTIwMTQyODMxNkUKLToxMDQzOTAwMDAxMjYyNTAyMjgyNDBBMEZFRTAxMkUyNDE0NTgwMTBDQjAKLToxMDQzQTAwMDYzRkZBMzAwMjYyNDA2RDJBMEQxMEYwMDZDMTAwNjI4QkMKLToxMDQzQjAwMDIxMDJENjIwMDgwODRDNjU4MDk5MkIyMDBDMTJFMTc3NDkKLToxMDQzQzAwMDBDQjgxMUEyODgyQTgyODZCNTQ5N0E5MzAyNjAwMDkzQkMKLToxMDQzRDAwMDE5RTE3NDA5QjkwQTI5OTJBMzY4OTAwODJBNjIwMDA5QjAKLToxMDQzRTAwMEFBMEM2NUEwN0UyODgyODUxQ0UxN0Y2NDgwNzU5QzgwNzQKLToxMDQzRjAwMEI4ODdCMTRCOUI4MTlCMTA2NTUwNzJDMEE3RDk3MDI4QkMKLToxMDQ0MDAwMDBBMDFDMEQwMDc4RDM4MEQwRDQyQ0JEQjFGRTE2MDFFQzUKLToxMDQ0MTAwMEUxNjEyRUY2N0VEODMwRDMwRjZENEEwNTAwODA4ODAwMEEKLToxMDQ0MjAwMDkwOENDMDgwMkYzMDA4MkY3NDAwMjk2MDBDMUFFMTYzMzMKLToxMDQ0MzAwMDBDOUQxMUEyREQyQ0QyODVDMDIwQUE5OTIyOTRDRjBDMEMKLToxMDQ0NDAwMEJDMEIyQ0Q2ODVEMjgwRDEwRkMwRTAwMzhFMzg3RUEwNjUKLToxMDQ0NTAwMEMzNjNGRkI3Q0M1ODJBNkM3NERCMzBEQzQwNTgwN0UxRUIKLToxMDQ0NjAwMEMwMjBEMTBGREE2MDU4MDlCMTYzRkZFNzAwMDBERDQwREEKLToxMDQ0NzAwMDg1MTAyQTZDNzRDMEIwREM3MDU4MDg1NjJGMzAwODJGOTUKLToxMDQ0ODAwMDc0MDAyODYwMENDMEYwMEM4QjExQTJCQjI5QjI4NTEyRkQKLToxMDQ0OTAwMEUxNEIwOTU5MEJBMjgyMkYyNENGMjlCNjg1RDJBMEQxOTYKLToxMDQ0QTAwMDBGMDAwMDAwNkMxMDA0MjkyMDE0MjgyMDA2QjE5OTI5NUYKLToxMDQ0QjAwMDI0MTQ2ODgxMjRDMEFGMkMwQTAxMkIyMTAyMkMyNDA2NkQKLToxMDQ0QzAwMDdCQTAwNEMwRDAyRDI1MDIwMjJBMDIwMzNCMDIwNDRDMkIKLToxMDQ0RDAwMDAyQzBEMDU4MDBCRkQyQTBEMTBGQzAyMEQxMEYwMDAwMjEKLToxMDQ0RTAwMDZDMTAwNDI5MzEwMUMyQjQyOTI0MEEyQTMwMTFDMjgzNzQKLToxMDQ0RjAwMDc4QTE2QzdCQTE2OTY0NTA0NzJDMjAwNkMwNjg2RkM1MDkKLToxMDQ1MDAwMDYyQ0E1NzJEMjAxNDdDRDcyMkRBMjBEQjMwREM0MERENTQKLToxMDQ1MTAwMDUwNUJGRkE2MjkyMTAyMDkwRTRDQzhFMkMwMjBEMTBGMzIKLToxMDQ1MjAwMEMwRjEwRjlGMDIyRjI1MDJDMDIwRDEwRkRBMjBEQjMwMEYKLToxMDQ1MzAwMEMwQzA1QkZGREMyODIwMTQwNjg4MDIyODI0MTQ2M0ZGMTcKLToxMDQ1NDAwMEM3MjkyMDE1MUJFMTE4MkEyMDBCQzBDMDlDMjQwQkFBRTgKLToxMDQ1NTAwMDA5MkJBMTFDMkMyNDE1QUI5OTI5QTUxQzYzRkY5OTAwREMKLToxMDQ1NjAwMEMwMjBEMTBGREEyMERCMzBEQzQwREQ1MEMwRTA1ODA4M0QKLToxMDQ1NzAwMDY3RDJBMEQxMEYwMDAwMDA2QzEwMDRDQjU1MTNFMTEzREIKLToxMDQ1ODAwMDI1MjIxRjBENDYxMTA2NTUwQ0EzMjMyNjIyMUUyNTI2ODMKLToxMDQ1OTAwMDFGMDY0NDBCMjQyNjFFNzM0QjFEQzg1MkQyNDBEMTBGNTgKLToxMDQ1QTAwMDI4MEE4MEMwNDAyNDI2MUZBODI4MjgyNjFFMjgyNjFENDkKLToxMDQ1QjAwMEQyNDBEMTBGQzAyMEQxMEYyNDRERjgyNDI2MUU2M0ZGMTYKLToxMDQ1QzAwMEQ4MDAwMDAwNkMxMDA0MjgyMDA2RDYyMDZFODUwMjYwRkEKLToxMDQ1RDAwMDAwREUxN0UwRjIxREUwRjkxOUUwRjJDMEMxQzAyMDJBQTgKLToxMDQ1RTAwMDhDRkM2NEExMzIyQjYxMDJCNDRFMEIwQjRDNjVCMEE4NUQKLToxMDQ1RjAwMDJCNjAwQzJBNjIwMDBDQjgxMTA3ODgwODJGODI4NjA5RUMKLToxMDQ2MDAwMEI5MEE3RkUzMDI2MDAwOUYyOTkyQTM2ODkwMDUwOUFBNzYKLToxMDQ2MTAwMDBDNjVBMDkzMjg4Mjg1NjQ4MDhEQjg4OTFCRTBGNzk0OEYKLToxMDQ2MjAwMDgxOUI4MDY1NTE0REMwQjdCODM4QzBBMUMwRTAwOUFFQ0MKLToxMDQ2MzAwMDM4MEUwRTQyNjRFMDQ4MUFFMEQ1MUZFMEQ2MkZBNjdFNjEKLToxMDQ2NDAwMEIwNEE2REFBMDUwMDgwODgwMDkwOENDMEEwMkU2MDBDMzYKLToxMDQ2NTAwMDBDRTgxMUE3ODgyRjgyODVBREVFMEY0RjBCMkY4Njg1QjIKLToxMDQ2NjAwMDJCNjAwNjIyRTRDRjY4QjEyQTI5NjAxNUMwQjJDOTlBMkUKLToxMDQ2NzAwMEQyQTAyRDYxMDIyQjY0MDYwQ0REMDIyRDY1MDJEMTBGNDQKLToxMDQ2ODAwMEMwRTAwOEFFMzg3RUIwQjc2M0ZGQUIwMDIyNjQwNkQyNEMKLToxMDQ2OTAwMEEwRDEwRjAwRDJBMEQxMEYwMENDNTdEQTYwREIzMERDMDQKLToxMDQ2QTAwMDQwNTgwODhGQzAyMEQxMEZEQTYwNTgwOTIwNjNGRkU4MTYKLToxMDQ2QjAwMDAwMjgyMjFFMjkyMjFENzg5OTAyMjgwQTAwQzE3NkMxRUQKLToxMDQ2QzAwMEMxQzFEMjFCRTBDMkMxMjRBQjZCNjQ4MDQzNzg5MTQwNkUKLToxMDQ2RDAwMDJBODAwMDBDQUYwQzY0RjBBRTBEQUUwQzY0RTBBODAyQjIKLToxMDQ2RTAwMEFGMEM2NEYwQTIwN0FFMEM2NEUwOUMyRkFDRTg2NEYwNjEKLToxMDQ2RjAwMDk2MkVBQ0U3NjRFMDkwMkZBQ0U2NjRGMDhBMkE4MDA3M0YKLToxMDQ3MDAwMDA4QTgwQjA4OEEwMjdCODMwMjJBOERGOEQ4QTA2NUFGMUYKLToxMDQ3MTAwMEJCQzA5MDYwMDA3MzAwMDAyQjYwMEMwQ0I4MTFBNzg4MjAKLToxMDQ3MjAwMDJFODI4NjZFRTg3OTA5QkEwQTJBQTJBMzY4QTAwNDhFQUUKLToxMDQ3MzAwMDYwN0FFOTZCMkE4Mjg1NjRBMDY1MUZFMEFBQzBFMzJFMzcKLToxMDQ3NDAwMDY0MDY5RUExOUZBMDFGRTBENjJFNjAwQTkyQTMwRkVFRTIKLToxMDQ3NTAwMDAyOUVBMjhFNjAwRkVFMDI5RUE0MkY2MDE0N0FGRjQ3ODUKLToxMDQ3NjAwMDIyQTQxNzJGODI4NUFEQkUyMkU0Q0YyRkZDMTgyRjg2RkUKLToxMDQ3NzAwMDg1NjNGRTcwMkE2Qzc0QzBCMURDOTBERDQwNTgwNzk1RUIKLToxMDQ3ODAwMDFERTA4RkMwQzE2M0ZFQzREOUEwREE2MERCMzBEQzQwMUQKLToxMDQ3OTAwMERENTBDMkYwQzFFMDA5RkUzOTU4MDdEQ0QyQTBEMTBGQ0MKLToxMDQ3QTAwMERBNjA1ODA4RTI2M0ZFRjAyQ0E0MTcyOTgyODUwREJFNUEKLToxMDQ3QjAwMDA4MjJFNENGMjk5QzE4Mjk4Njg1NjQ1MDBDMkE2Qzc0NDEKLToxMDQ3QzAwMDA0NEIwMjU4MDE2OUQyQTBEMTBGQzAyMEQxMEYwMDAwQzQKLToxMDQ3RDAwMDZDMTAwNjJCMjIxRTI4MjIxRDkzMTA3Qjg5MDFDMEIwNkQKLToxMDQ3RTAwMEMwQzlDMDNCQzFGMjA0MDY0MDFERTA3OEMwRTJDMDc0RkQKLToxMDQ3RjAwMDA3NDcwMTBFNEUwMUFEMkQ5RTExQzA0MDJFMEExNDY0RDQKLToxMDQ4MDAwMEIwNkU2RDA4NDQyODIyMUQ3QjgxNjUyQUIwMDA3RUExMTAKLToxMDQ4MTAwMDNCN0ZBMTQ3N0I1MTIwN0NBMTQ5NjhBOTE3NjhBQTE0NTYKLToxMDQ4MjAwMDczQTExMUMwOUY3OUExMENDMThCNzhBMTA3QzFBRTI5REEKLToxMDQ4MzAwMDBBMUUyOUI0MDA3Q0ExMkIyQUIwMDcwQkFCMEJEQUIwRkYKLToxMDQ4NDAwMDdEQjMwMjJBQkRGOERCQTBDQUE1NjNGRkI0MjhCMDEwNkYKLToxMDQ4NTAwMDg5MTE2OTg3QkI2NDlGQjg2M0ZGREMwMDY0N0ZCNDYzMjAKLToxMDQ4NjAwMEZGRDUwMDAwNjQ2RkQwQzA0MUMxQUUyQUI0MDA2M0ZGMjEKLToxMDQ4NzAwMEM2MkIyMTAyQ0VCRTJBMjIxRDJCMjIxRTdBQjEyQThDRTMKLToxMDQ4ODAwMDEwN0NCMTIxN0FCOTAxQzBCMEM5QjkxM0UwNDNEQTIwNzQKLToxMDQ4OTAwMDI4QjAwMDJDQjAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwQjYKLToxMDQ4QTAwMDAwREJBMDY1QUZFN0QyNDBEMTBGODkxMDY1OUZENDYzQ0MKLToxMDQ4QjAwMEZGRjMwMDAwNkMxMDA4QzA3MDY0NTE3MThGMzAyOTIxMjMKLToxMDQ4QzAwMDAyMEYwRjQ3MTZFMDM2MDkwQzRDNjVDMDhGOEQzMDBENzYKLToxMDQ4RDAwMDZFNTE2OEUzMDI2MDAwODQyODYyOUUxQUUwMkY2RTg4QTEKLToxMDQ4RTAwMDUyMkFBMjI2NjhBMDA0OEIyMDdBQjk0NzJBNjI5REIwN0EKLToxMDQ4RjAwMDRFQ0JBRjlBMTAyQjIwMEM5RTExMENCQzExQTZDQzI5Q0MKLToxMDQ5MDAwMEMyODZCNzQ4Nzk4QjQxMTdFMDI2MDdCNzBBMjc3MkEzRkEKLToxMDQ5MTAwMDY4NzAwNDg4MjA3Nzg5MzAyQ0MyODU5QzEyRDdDMDY1QzYKLToxMDQ5MjAwMEMwNjIyQzIxMDQxQUUwNUQ3Q0FCMjJEQTIwNTgwNjkzODkKLToxMDQ5MzAwMDYwMDAyOTAwMkUyMTA0MURFMDU5N0VEQjE4REEyMEMwMUEKLToxMDQ5NDAwMEI2NTgwNjhFQzk1ODYwMDE1NkMwQzA2M0ZGQ0NEQTIwNDUKLToxMDQ5NTAwMDU4MDg3NjYwMDAwNkRBMjBDMEI2NTgwODc0NjU1MTNGRTIKLToxMDQ5NjAwMERDNDBEQjMwOEQzMERBMjAwRDZENTE1ODA2RThEM0EwRTUKLToxMDQ5NzAwMDY0QTEyQ0MwNTEyOTIxMDI4NEExOEZBMDA0MDQ0NzBGRjcKLToxMDQ5ODAwMDBGNDc2M0ZGNDEyQjIxMDRDMDhDODkzMUMwQTAwOUY5NzYKLToxMDQ5OTAwMDUwMDk4QTM4NkVCODFFMkMyMDY2QUZDQzBDMEM0NzJDMDAKLToxMDQ5QTAwMDI0NjY3Q0FCMTA5RTE0MkExMjAwNTgwNkZBOEUxNEMwOUUKLToxMDQ5QjAwMEQwMkQyNDY2OEQzMEMwOTIxQkUwMTBDMUY4N0ZENjBDM0MKLToxMDQ5QzAwMDg3MTI5QjcwMjk3NjAxMkY3NDA4Mjc3QzEwNjU1MEI3RDkKLToxMDQ5RDAwMEI4M0FDMEQ3REM3MEMwNTFDMDgwMDc1ODM4MDgwODQyQzgKLToxMDQ5RTAwMDY0ODA3OTFEREZFQTE5REZFQjI5RDY3RTZBNDIwQUQzOUIKLToxMDQ5RjAwMDBGNkRFOTA1MDBBMDg4MDBDMDhDQzBBMDg4MzBDMDkyNkYKLToxMDRBMDAwMDdGODYzODA3RTgwQjJGODQwODlCODA5OTgxQjRFODJDQjcKLToxMDRBMTAwMDIwMENDMDkwMURERkVBMENDMzExQTYzMzIyMzI4NUFERjUKLToxMDRBMjAwMENDMDI4MjBCMjlDNENGMjIzNjg1RDJBMEQxMEY4QTMwODYKLToxMDRBMzAwMEMwRjE3RUFFMzIyOTIxMDI2M0ZFODgwMDJDMjAwQzhFNEMKLToxMDRBNDAwMDExQzBCMDFEREZERTBDQ0YxMUE2RkYyMkYyODVBRENDNjgKLToxMDRBNTAwMDJCQzRDRjAyRUUwQjJFRjY4NUQyQTBEMTBGQzA4MDBBNTgKLToxMDRBNjAwMDU4Mzg3OEQwODY2M0ZGN0E5RjEzREIzMERBMjBDMEMxRDQKLToxMDRBNzAwMERENzA1QkZGNTcyOTIxMDI4RjEzMkE5Q0ZFNjVBRTQzMzAKLToxMDRBODAwMDI3MjUwMkMwOTA2M0ZFM0I5RTE0MkEyQzc0QzBCMURDMjMKLToxMDRBOTAwMDcwREQ0MDU4MDZEMDhFMTQxQkRGRDhDMUY4NjNGRjVCNzEKLToxMDRBQTAwMEMwMjBEMTBGNkMxMDA2MjgyMTAyMTZERkJDMDgwODRDNkMKLToxMDRBQjAwMDY1ODIxNTI5NjI5RTZGOTgwMjYwMDIxQzE5REZCNzI5NzIKLToxMDRBQzAwMDkyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMjBCMjc2MjlEOEUKLToxMDRBRDAwMEMwQ0M2NDcyMDMyQjIxMDQ4RTMxQzBBMEREQTAwRUZFNzkKLToxMDRBRTAwMDUwMEVDRDM4NkVCODExMkMyMDY2MkNDQzAxMEMwQzQ3MjIKLToxMDRBRjAwMDJDMjQ2NjdDREIwMjYwMDFFQUMwQzEyOTMwMDgxQkRGODAKLToxMDRCMDAwMEE5NjQ5MDk3MkYwQUZGQzBEM0IwOUU2NEUwRkQ2ODkyMUQKLToxMDRCMTAwMDBFNjQ1MDgzMkEyQzc0REI0MDU4MDA5M0QyQTBEMTBGMkUKLToxMDRCMjAwMDJCMjAwQzI3MjEwNDBDQkMxMUE2Q0MyOUMyODYyODBBRjQKLToxMDRCMzAwMDA4Nzk4MzAyNjAwMUI5MTlERjlBMDlCOTBBMjk5MkEzOTkKLToxMDRCNDAwMDY4OTAwODJFMjIwMDA5RUUwQzY1RTFBNDJFQzI4NTY0NEYKLToxMDRCNTAwMEUxOUUyNjIwMDcxM0RGQTM2RTdCMDI2MDAxOUExN0RGMTgKLToxMDRCNjAwMDlBMUZERkEzMTlERkQwQzBEMjI4MjAwQTkzRTA5REUxNkQKLToxMDRCNzAwMEE5NjkwRjg4MDI5OEUyMkY5MDgwMkE5NDgwQjFGRjA3REMKLToxMDRCODAwMEZGMDI5RkUzMUVERjhFMkZDMjg1QUVCRTBGREYwQjJGMEQKLToxMDRCOTAwMEM2ODUyQUU0Q0Y2NTVGN0JDMDIwRDEwRjJGMzAxMDI5NTYKLToxMDRCQTAwMDMwMTEyRTMwMTMwMDk5MzIwMEVEMzI2NEYwRUUyQTMwQ0QKLToxMDRCQjAwMDE0MUZERkJEMDBBQTMyNzhFRjA1MEY5RTA5MkRFNDdGOTgKLToxMDRCQzAwMDFFREZCQjY2QTAwNTBGOTgwOTJBODQ4MEI0QTcxOERGRjIKLToxMDRCRDAwMEI4Qzc2RjAwOTEwNEFFOUVEREUwMDBBRjFBMDBDMzFBQTMKLToxMDRCRTAwMDZFRTEwNTJEQjIwMDBERUQwQzFFREZCMjA4RDgxQzA2REIKLToxMDRCRjAwMDMzMDNBRTg4MkE4NDhCMkVCMDJFMjc4NDhDMDNFRTAxREIKLToxMDRDMDAwMDBGRUUwMjJFQjQyRTU4MDE4RjYzRkYwNDI5MzEwODI5QkMKLToxMDRDMTAwMDI1MDQyODMwMTQyRTMxMDlCMDg4NjQ4MEEzMkUyNDBBN0MKLToxMDRDMjAwMEMwODEyRTMwMTYyQ0I0MjMyRTI0MEJCNEVGMkYyNDBDNkQKLToxMDRDMzAwMDhDMzc4QjM2MjkyNTA0REVCMERGQzAwRjhGMzkwRThFRkUKLToxMDRDNDAwMDM5MEZFRTAyNjRFRUM5MDg5RjExMDFDNDA0OEQzODBDQkYKLToxMDRDNTAwMEI4MTgwMEM0MDQwQ0JFMTgwMEVFMTEwRUREMDJDMEUzNEIKLToxMDRDNjAwMDBFRkYwMjFFREY4NzlGNzE5RTcwMUVERjg0OEYyMDk4Q0IKLToxMDRDNzAwMDczOUQ3NDA1RkYxMTBCQ0Q1M0MxODA5ODc1MEZERDAyMzQKLToxMDRDODAwMDBFREQwMjlENzIyQTI0NjYxRURGNDQyRjYyOUQyQUU0RjcKLToxMDRDOTAwMEEyMkZGQzE4MkY2NjlENjNGRTc2MDAwMDAwMkYzMDEyQjUKLToxMDRDQTAwMDFCREY4NjAwRkEzMjc4RkYwNTBCOTgwQjJBODQ3RjY2OUIKLToxMDRDQjAwMEQwMDUwQjlBMEIyREE0ODAyQTMwMTEwMEFBMzI2M0ZGNzUKLToxMDRDQzAwMDQ0MkYyNDBBOUUyQjYzRkY1NkNDNTdEQTIwREIzMERDQkUKLToxMDRDRDAwMDQwNTgwNzAzQzAyMEQxMEYwMERBMjBDMEI2NTgwNzkzMTAKLToxMDRDRTAwMDYzRkZFNTAwREE3MDU4MDYyQkMwQTAyQTI0NjY2M0ZFMzUKLToxMDRDRjAwMDA3REEyMDU4MDc4RTYzRkZDRkIxNjkyODIwMEE4NjIwODMKLToxMDREMDAwMDA5MDk0Nzk5MTEyOTI0MDc5ODEwN0Y4MTI2OTNFMDI3RTQKLToxMDREMTAwMEU1MEE5QUUzODgxMDlERTExOURGNjI4RDExMDk2RjAyOUYKLToxMDREMjAwMDlGRTQyREU0MTYwOTg4MDJDMEQzOThFMjJBMjQwNzYzODEKLToxMDREMzAwMEZFNTEwMDAwMUZERjJCMDg2OTExODgxMThEMkI5M0UwQjUKLToxMDRENDAwMDA5ODgwMkMwOUY5OEU1MEZERDAyMDQ3ODExOURFMkMwM0EKLToxMDRENTAwMEY0OUZFMUMwRDQwOTg4MDI5OEU0NjNGRkNFMDAwMDAwMEMKLToxMDRENjAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQ4NTIxMEQzODExODcKLToxMDRENzAwMDE0REYwODg2MjJBNDI0MDg2NjBDOTYyMjA1MzMwQjkzQzAKLToxMDREODAwMDIxNzQzQjEzQzg2MkQyMzBEMTBGQzAzMEJDMjk5OTIxQTUKLToxMDREOTAwMDk5MjA5MzIyRDIzMEQxMEYyMzNERjg5MzIxNjNGRkUzNzIKLToxMDREQTAwMDZDMTAwQUQ2MjA5NDE4MTdERUZERDkzMEI4Mzg5ODE5M0YKLToxMDREQjAwMDk5MTQ2NTUyNTJDMEUxRDJFMDJFNjEwMjFEREVGQTBFNTYKLToxMDREQzAwMDBFNEM2NUUxNjM4RjMwOEUxOTBGNkY1MTJGRkNGRDY1MUUKLToxMDRERDAwMEYxNTY4RUUxMjlEMDIzMEU4RjUwNzdFNjZCOEYxODFFODcKLToxMDRERTAwMERGMzdCMEZGMEZGNDExMEYxRjE0NjU5MENFMThERjM0QkEKLToxMDRERjAwMDhDNjBBOENDQzBCMTE5REVFODI4NjAwQjA5Q0MwQjBEODMKLToxMDRFMDAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBRjUKLToxMDRFMTAwMDM4MUJERjJBMENBOTBBMjk5Mjk0N0I5QjAyNjAwMDhDMjQKLToxMDRFMjAwMDJCNjAwQzk0MTYwQ0JEMTFBN0REMjlEMjg2Qjg0ODc5RTkKLToxMDRFMzAwMDgzMDI2MDAwRDIxOURFREEwOUI4MEEyODgyQTM5ODE3MjMKLToxMDRFNDAwMDY4ODAwMjYwMDBBMzYwMDBBNTFBREYxRTg0MTgwQUVFQzUKLToxMDRFNTAwMDAxQ0E5ODFCREVEMThDMTkyQkIwMDA4Q0MwNkVCMzEzMjUKLToxMDRFNjAwMDFEREVDRTBDMUM1MjBEQ0MwQjJEQzI5NUMwQTE3RURCREQKLToxMDRFNzAwMEFFNjAwMDM4MEMwQzUzNjAwMDA5MDAwMDAwMThERjEwMTEKLToxMDRFODAwMDhDNjBBOENDQzBCMTE5REVDNDI4NjAwQjA5Q0MwQjBEMTYKLToxMDRFOTAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBNjUKLToxMDRFQTAwMDM4MENBOTBBMjk5Mjk0N0U5MzAyNjNGRjcyREE2MEMwREIKLToxMDRFQjAwMEJBNTgwNzFFNjQ1MDc0NjAwMjY2MDAwMDFBREVCNzhDOTAKLToxMDRFQzAwMDE5MkFBMDAwOENDMDZFQTMxQTE4REVCMzBDMUM1MjA4NUQKLToxMDRFRDAwMENDMEIxOERFRkEyQkMyOTVDMEExNzhCMzAyNjNGRjNGNUEKLToxMDRFRTAwMDYzRkZDOTAwMEMwQzUzNjNGRjA5ODk2MDc4OTkxODI5ODYKLToxMDRFRjAwMEQyODVDOTkyMkI3MjlFMURERUE4NkVCODI0MkREMjI2QjMKLToxMDRGMDAwMDk5MTM2OUQwMEM2MDAwMEVEQTYwNTgwNzA4NjAwMDE4MjkKLToxMDRGMTAwMDAwMDA4ODYwN0Q4OTBBOUExQTI5NzI5RDlDMTI5OTE1NTEKLToxMDRGMjAwMENGOTREQTYwQzBCNjU4MDcwMTY1NTFGNDhEMTQ4QzE4MUYKLToxMDRGMzAwMERCRDA4REQwREE2MDBENkQ1MTU4MDU3NEQzQTA5QTE0NzIKLToxMDRGNDAwMDY0QTFERDgyQTA4NUExQjhBRjlGMTkwNTA1NDcwMjAyQzMKLToxMDRGNTAwMDQ3OTUxOEMwNTE2M0ZFNjAyQjYxMDRDMDhDODkzMUMwMzUKLToxMDRGNjAwMEEwMDlGOTUwMDk4QTM4NkVCODFGMkM2MDY2QTJDQzBDRDMKLToxMDRGNzAwMDBDNDcyQzY0NjY3Q0FCMTE5RjExOUUxQjhBMTU1ODA1NEIKLToxMDRGODAwMDg1OEUxQjhGMTFDMEEwMkE2NDY2OUYxMTY0RjBFMTg5OTEKLToxMDRGOTAwMDEzODgxOURFRjA2REU5MTcyRjgxMDMwMDkwOERBRUZFQTYKLToxMDRGQTAwMDAwODA4ODlGOTIwMDkwOEMwMDgwODhCODk5MDA5MDhDMzcKLToxMDRGQjAwMDY1NTE0RThBMTA4NTFBOEIzMDFGREU4QTg4MTIyOTYwNEYKLToxMDRGQzAwMDA3MDg1ODBBMkM4Mjk0MkQ2MTA0MEVDQzBDMkM4Njk0NzAKLToxMDRGRDAwMDZGREIzQzFDREVCNEFDOUMyOUMwODAwQjVENTBBMjk5RjkKLToxMDRGRTAwMDA5MDk0NzI5QzQ4MDY1RDBEQTJFNjAwQ0MwRDAxRkRFQzUKLToxMDRGRjAwMDczMENFODExQTc4ODIyODI4NUFGRUUwMjQyMEIyREU0RTQKLToxMDUwMDAwMENGMjI4Njg1RDJBMEQxMEY4RTMwMEUwRTQ3NjNGREE2MkIKLToxMDUwMTAwMEEyOUMwQzBDNDcyQzY0MDc3QUI2Q0Q4QjYwMkU2MDBBREMKLToxMDUwMjAwMDI4MEFGRjA4RTgwQzY0ODEwRTE4REU5RDgzMTY4MjEzOUYKLToxMDUwMzAwMEIzMzkwMjMzMEIyQzM0MTYyRDM1MEFDMDIzOTIzMTlGMUQKLToxMDUwNDAwMDMwQzAyMDkyMzMwOEIyMDIwOEU4MDI5MjM0OTgzMkMwOEQKLToxMDUwNTAwMDgwMkI2MDBDMjg2NDA3RDJBMDFDREU1ODBDQkUxMUE3NjAKLToxMDUwNjAwMEVFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQjJERTY4NUQxOEUKLToxMDUwNzAwMDBGOEIxODg4MTM4RDMwQjg4QzBEOEY0NzBENDk1MEI0QTUKLToxMDUwODAwMDk5MDQ5OTEwMEQwRDVGMDRERDEwMDlGRjAyOUY4MDBEM0EKLToxMDUwOTAwMEJCMDI5QjgxNjU1MDhEODUxQUI4M0FDMEYxQzA4MDBDNjcKLToxMDUwQTAwMEY4MzgwODA4NDI2NDgwNkIxQkRFMzkxOURFM0EyOUI2RUQKLToxMDUwQjAwMDdFOEQxOEIwREQ2RERBMDUwMEEwODgwMEMwOENDMEEwMjAKLToxMDUwQzAwMDYzRkVGMzAwMURERTRCMjg2MDBBODIxMzhCMTZDMEUwREUKLToxMDUwRDAwMDJFQzQ4MDAyQjIwQjBEODgwMkIyQkI5OTIzOUYyMEMwNjAKLToxMDUwRTAwMEQyOTgyMjlEMjEyMjYwMEMwQzJEMTFBN0REMjhEMjg1OUIKLToxMDUwRjAwMDA4QkIwQjE4REUzMjJCRDY4NUE4MjIyRTI0Q0ZEMkEwRDcKLToxMDUxMDAwMEQxMEY5RTFCODUxQTJBNkM3NDhCMTg1QkZGMTc4RTFCQTAKLToxMDUxMTAwMDYzRkVBMzAwQzA4N0MwOTAwQUY5Mzg3OTgwOTI2M0ZGQ0MKLToxMDUxMjAwMDg2QzAyMEQxMEY5RTFCMkE2Qzc0QzBCMThEMTg1ODA1MDMKLToxMDUxMzAwMDI5OEUxQjg1MUE2M0ZFN0U4ODZCODIxMzg5MTYwOEJFMzIKLToxMDUxNDAwMDExMEVDRTAyMDI5MjBCOUUyNUI0OTkxRURFMjU5RjIwRTEKLToxMDUxNTAwMDBFODgwMjk4MjJDMEVGMDREODExMEU4ODAyOTgyNEMwNEQKLToxMDUxNjAwMEU0OUUyMUMwODBEMkEwMkI2MDBDMjg2NDA3MUNERTEzQjMKLToxMDUxNzAwMDBDQkUxMUE3RUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCNjQKLToxMDUxODAwMDJERTY4NUQxMEYwMDAwMDA2QzEwMDRDMDIwRDEwRjAwNjcKLToxMDUxOTAwMDZDMTAwNDg2MzNDMDcxQzAzMDYwMDAwMUIxMzMwMDMxM0YKLToxMDUxQTAwMDA0MDA3NDFBMDQ2MjAxNzQ2MEYxRDEwRjZDMTAwNDAyREYKLToxMDUxQjAwMDJBMDIwMzNCMDI1QkZGRjYxRERERkIxQkRFNDNDNzlGOUMKLToxMDUxQzAwMDg4QjAwOUE5MDMwOThBMDE5QUIwMkJEMTAyNzk4MDFCMDIKLToxMDUxRDAwMDFDRERGM0MwRTAwRUU0MzEwMDAyMDAyQUMyODIxRERFQjUKLToxMDUxRTAwMDNCMERBQTAyMkFDNjgyMEJFNDMxRDEwRkMxRjAwRkJGREEKLToxMDUxRjAwMDAyMEYwRjRGMkZENTAyMEZFNDMxRDEwRjZDMTAwNDEyQTQKLToxMDUyMDAwMERERTkxQURERTZDMEMwMENFNDMxMDAwMjAwMjlBMjgyMEIKLToxMDUyMTAwMDE4REUzMTFCREUyRjI2MjEwMjBCOTkwMTA4NjYwMTI5QjkKLToxMDUyMjAwMEE2ODIyNjI1MDIwNkU0MzExNERFMkMxNURFMjcyMzZBMjkKLToxMDUyMzAwMDkwMjMyNjEyODU1MDI0MjYxMTI1MjYxMzIyMkM0MEQxOTYKLToxMDUyNDAwMDBGMDAwMDAwNkMxMDA4MTZERTI1MkIwQTY0MkMxQUI0MUYKLToxMDUyNTAwMDE3RERENTFEREREMTE4REUyMjBGMkUxMTBEMkExMUIyNUEKLToxMDUyNjAwMEU5MEVFRTExQThBODBFOTkxMUFEQUFBNzk5QTdFRTlFNzYKLToxMDUyNzAwMDE2OTkxMUFDQUE5QTE1MkM4MEZGMkE4MEZFMjg4RDAxNjAKLToxMDUyODAwMDI5ODAwMTA4QUExMTI4ODAwMDBDQUEwMjA4ODgxMTA5QTcKLToxMDUyOTAwMDg4MDIwOEFBMUNCODg4MjgxNjAwNTgwODVEMjk3MTE2Q0IKLToxMDUyQTAwMDlBMTIyOTE2MDM4QTE1OEIxMjJBQTA4MDBCQUEyODhCMjIKLToxMDUyQjAwMDEwNTgwODU3RDQ3MDhDMTY4QjEzMTVERTBBMEJBQjI4QzgKLToxMDUyQzAwMDIzNUM0MTlCMTQyQkM2MjgyQzMwODA3MkM5MTU4QzE0OEEKLToxMDUyRDAwMDJBNTBDMDJCM0EyMDBDQUEyODU4MDg0REMwRDEwQUREMEMKLToxMDUyRTAwMDM3MkQ0NTQwQjQ0NEIyNTVCMjMzNzYzOURBQjI3NzhGQjAKLToxMDUyRjAwMDExOEUxNjg4MTVCNEVFQjE4ODk4MTU5RTE2N0ZFOUE0MTQKLToxMDUzMDAwMEQxMEYwMDAwNkMxMDA0QzAyMUQxMEYwMDZDMTAwNkMwM0EKLToxMDUzMTAwMDcwMUFEREEyMUVEREFEMUREREIzMUNEREI1MUJERDlFRUIKLToxMDUzMjAwMDEzRERFMTIyMEEwODE4REQ5RjE0RERFRjI4ODAyRTI0MEEKLToxMDUzMzAwMDQwMDAyODE2MDA2RDJBNzBBMzQ5Mjg5MDgwQzBGMTY0QUYKLToxMDUzNDAwMDgwNTk4NTEwMDA0MTA0QzA2MTAwNjYxQTA2NTUwMTA1QTgKLToxMDUzNTAwMEY1MzkwQzU2MTEwQTY2MDgyRjYyOTY2RUY3NEQwQjVGRjEKLToxMDUzNjAwMDBBMkZGMjI0NjhGMDA4MTJEREQxMDI0MjA4NzJGOTNCREMKLToxMDUzNzAwMDIzNjI5NTBDNDIwMkNCMzQ5MjMyQzBGMjlEMzA5RjMxQjEKLToxMDUzODAwMDBFOEYwMjlGMzMyMzYyOTVBQjUyMkYwQTAwMkY5NDgwMTkKLToxMDUzOTAwMDJGMjRBMDIzM0MxMDIzNjY5NTEzRERDMkIxNzcxMkREQzQKLToxMDUzQTAwMEQyQjE0NDA0MDQ0MjI0MjQwMEQxMEYwMEQxMEZEMTBGMDQKLToxMDUzQjAwMDZDMTAwNDFBREQ3OTJBQTAwMDU4MDIxQjVCRkZEMzAyOEYKLToxMDUzQzAwMDJBMDIwMzNCMDI1QkZGQ0YxQkRENzdDMEM0MjlCMTAyNzkKLToxMDUzRDAwMEM4QUMwQzlDMDIwQzBDNEYyQ0I1MDIwQ0U0MzFEMTBGNjQKLToxMDUzRTAwMDFFREQ2RkMwODAwOEU0MzEwMDAyMDAyREUyODIxRkRENjcKLToxMDUzRjAwMDgwMEZERDAyMkRFNjgyMDlFNDMxRDEwRjZDMTAwNDE1MTcKLToxMDU0MDAwMERENjcxNkRENjhDMDIwMDJFNDMxMDAwMjAwMjQ1MjgyMEMKLToxMDU0MTAwMDIyNjEwMjczNEYwNjAyRTQzMUMwMjBEMTBGMThEREI0QkYKLToxMDU0MjAwMDE5RERCMzA4MjgwMTA5NDkwMTI5NTY4MjI4NjUwMjA4QjcKLToxMDU0MzAwMEU0MzExM0REQTkyMjZDNzAyMzY2MUREMTBGMDAwMDAwM0EKLToxMDU0NDAwMDZDMTAwNDI5MjAwNjI4OUNGOTY0ODBBMDJBOUNGRDY1MjQKLToxMDU0NTAwMEEwOTY4QTI4OEQyNjJGMEEwODdBRDkwNDJCMjIxRkM4RTUKLToxMDU0NjAwMEJEMkMyMDY0NjRDMDgxMkUyMjA5MEVBRTBDNjZFMDc4NEIKLToxMDU0NzAwMDJCMjAwQzFFREQ0QTBDQkMxMUFFQ0MyOEMyODYxOURERDcKLToxMDU0ODAwMDQ4NzhGMzAyNjAwMEE5MDlCOTBBMjk5MkEzNjg5MDA4MzQKLToxMDU0OTAwMDJFMjIwMDA5RUUwQzY1RTA5NzI5QzI4NTFGREQ1MjY0QkIKLToxMDU0QTAwMDkwOEU5RjkwQzBFNDFGREQ1RjlFOTEyODIwMEFDMEUwOEYKLToxMDU0QjAwMDlFOTMwRjg4MDI5ODkyODgyMDBGODgwMjk4OTQyRjIwM0MKLToxMDU0QzAwMDA3OUE5NzlEOTYyRjk1MEEyRTI0MDcyODIwMDYyOTIwQjMKLToxMDU0RDAwMDY0Njg4MzJGMjhDMjg1MTJERDM5Mjg4QzIwQTJCMjJFNjEKLToxMDU0RTAwMDI0Q0YyOEM2ODVDMDIwRDEwRkMwMjBEMTBGMkEyMDZBMjIKLToxMDU0RjAwMDBBMkE0MTY1QUY1NURBMjBDMEIwNTgwNUQzNjRBRkU4MzkKLToxMDU1MDAwMEMwMjFEMTBGNjQ5RkNDMUZERDI3MkQyMDE2OEZGMjA5RkIKLToxMDU1MTAwMEREMEMwMEYxMDQwMEREMUFBREFEOUQyOTI4QzI4NTEyMTUKLToxMDU1MjAwMEREMjcyODhDMjBBMkIyMkUyNENGMjhDNjg1QzAyMEQxMEEKLToxMDU1MzAwMDBGQzAyMUQxMEYwMDAwMDA2QzEwMDQyNjBBMDAxQkRERjMKLToxMDU1NDAwMDZEMTVERDE4MjgyMDY1MTdERDE1Mjg4Q0ZFNjQ4MDk0MDQKLToxMDU1NTAwMDBDNEQxMUFEQkQyQ0QyRjUyQkQyRjQyQTUxMDI3Q0IxRTkKLToxMDU1NjAwMDQyMkE1MTAyQjRCQjJFRDJGNzJCRDZGNDdCRTkwNTJCOEQKLToxMDU1NzAwMEQyRjYyQkQ2RjQ3Q0I5MkIyOUQyRjYyOUQ2RjUyOUQ2MkEKLToxMDU1ODAwMEY0MDZFNDMxMDAwMjAwMkY3MjgyQzc5RjAwNDEwNEMwN0MKLToxMDU1OTAwMDgxMDA4ODFBMDk4ODAzMDhGRjAxMkY3NjgyMEFFNDMxMDYKLToxMDU1QTAwMDYwMDAwMDAwMjYyNDY1MkJEMkY0OEU1QTJDRDJGNUIwNzAKLToxMDU1QjAwMEVFOUU1QTdCQ0IxNjI5RDJGNjJGRDJGNzBDQjgwQzA5RTcKLToxMDU1QzAwMEZGMEMwOEZGMEMwRjJGMTRDOEY5NjAwMDJGMEJDRDBDMzcKLToxMDU1RDAwMDBEMkQxNENFRDZDMEUyMEVBRTAyMEUwRTRGMkU1NTAyODkKLToxMDU1RTAwMDBFRTQzMUQxMEZEQjMwREEyMDVCRkY5NTFCREQ0MjY0MjYKLToxMDU1RjAwMEFGNUQyQTUxMDIwQzREMTFBREJENjNGRkE5MDZFNDMxMjgKLToxMDU2MDAwMDAwMDIwMDJFNzI4MjFGREQwMDBGRUUwMjJFNzY4MjBBNEIKLToxMDU2MTAwMEU0MzFEMTBGNkMxMDA0MTZEQ0UxMTVEQ0UyQzAzMDAzN0MKLToxMDU2MjAwMEU0MzEwMDAyMDAyNDYyODI3NDQ3MjExOEREMzM4NzVBNzYKLToxMDU2MzAwMDA4NDgwMTI4NjY4MkNENzMxOUREMzEwQzJBMTFBQTk5MTgKLToxMDU2NDAwMDIyOTI4MzI5OTI4NDcyOTEwMzgyMjBDQzI5MkI1MTAyQzkKLToxMDU2NTAwMDBCRTQzMUMwMjBEMTBGMDAxRkREMkEyRTUxMDIwRkVFQzYKLToxMDU2NjAwMDAxMkU1NTAyMEVFNDMxQjAyREIxN0M5QzVBMjI1QzYwQjMKLToxMDU2NzAwMDA4REQxMTJENTYxOUQxMEY2QzEwMEExQURDQzcxRERDN0MKLToxMDU2ODAwMEM5MjNBMDAwMTlERDIwNkYzMzc5MUNERDA3QzAyODE1NjAKLToxMDU2OTAwMEREMUYxRUREMUQyQjFDMTBENEIwODNFMDAwNTA4Njk1NEQKLToxMDU2QTAwMDEwMDA0MDhBOTQxODZEMkE0RjBGMzUxMTBDMzQwOTI0Q0MKLToxMDU2QjAwMDQwODAwQTU2MEEyODYyOTQwRDU1MDkyRjUxNDAwRjQ0MjQKLToxMDU2QzAwMDExMEI0NDBBMDg5NzBDMEY3NzM2OEY0MDBGNzczNjIyNUMKLToxMDU2RDAwMDUxNDEwN0ZGMEM5RjQwQTg3NzJGNjI5NTI3NjY5NDBGRDIKLToxMDU2RTAwMDk4MEMwMjg4MzY4NzQxMDc4ODM2QjEzMzA4NzcwQ0FGQUIKLToxMDU2RjAwMDhGMkY2Njk1OTc0MTAzMDM0MkIxMzgwODA4NDI5OEUwMUUKLToxMDU3MDAwMEQxMEYwMDAwMUNERDAzMTRERDAzQkZDNTI0NDJCNTY0QzYKLToxMDU3MTAwMDMwNTVDMDkxQzBEMDE2REQwMDA0ODg0MzJCQzAwMEMwQjYKLToxMDU3MjAwMDQwNkQzOTNFMDA0MTA0MDA5NzFBNzc4MDE2MkZBMjk1RUMKLToxMDU3MzAwMDhFNTBBRkVFMkVFRDIwMDZFRTM2OUU1MDJEQTY5NTYwRDMKLToxMDU3NDAwMDAwMUEwMDAwNzdCMDA5ODM1MDlENTAyM0E2OTU2MDAwOTEKLToxMDU3NTAwMDAyMjNBMjk1MjIzRDIwMDYyMjM2MjJBNjk1QjE0NEI0MEEKLToxMDU3NjAwMDU1QjhBQTI4QzQwMEQxMEYwNDg4NDMyOEM0MDBEMTBGMUIKLToxMDU3NzAwMDZDMTAwNDE1RENFQTEzRENFQUMwNDAwNEU0MzEwMDAyREEKLToxMDU3ODAwMDAwODg1MENCODE1QkZGQkMxQ0RDRTcwQzJEMTFBRENDM0QKLToxMDU3OTAwMDJCQzI4MjJBQzI4Mzk0NTA3QkFCMTQyRUMyODQyOUMyQUUKLToxMDU3QTAwMDg1MEFCRDBDMEU5OTBDMEQ5OTBDMDkyOTE0NjAwMDA1OTEKLToxMDU3QjAwMDBCQTkwQzA5MjkxNDk5MzAxNURDN0IyQTUxMDIwQUU0NDMKLToxMDU3QzAwMDMxMkEyQ0ZDNTgwMDQ5MkIzMjAwMUVEQzc0MkJCQ0ZGMDQKLToxMDU3RDAwMDJCMzYwMENDQjVDOEEzRDJBMEQxMEYwMEQyQTAwNEU0RDAKLToxMDU3RTAwMDMxMDAwMjAwMkRFMjgyMkM1MTAyMkZCQUZGMEZERDAxQTEKLToxMDU3RjAwMDJERTY4MjBDRTQzMUQxMEY2QzEwMDREMTBGMDAwMDAwQjMKLToxMDU4MDAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQxM0RDQzdDMEQxOTEKLToxMDU4MTAwMDAzMjMwOTIzMzE4REMwQTA2RjM0MDI2MDAwODkxQkRDOTMKLToxMDU4MjAwMDYxQzdDRjE4RENDMDBDMjkxMUE5ODgyNjgyODMyNTgyODQKLToxMDU4MzAwMDgyMTlEQzVBNzY1MTQ0Mjc1MjAwMkU4Mjg1MjU1QzA0NTkKLToxMDU4NDAwMDI1ODY4Mjc1RTkwNTI1ODI4NDI1ODY4Mjc2NTk1NDI2MjcKLToxMDU4NTAwMDgyODRENTYwMjY4NjgyMjY4NjgzMEFFNDMxMDAwMjAwOEYKLToxMDU4NjAwMDIzOTI4MjJGQjEwMjAwMjEwNDAwRDQxQTBDNDQwMzA0QjUKLToxMDU4NzAwMDMzMDEyMzk2ODIwRkU0MzE2MDAwMDIwMEQ3QTA3NjU5RUQKLToxMDU4ODAwMDIyMEFFNDMxMDAwMjAwMkU5MjgyMDAyMTA0MjhCMTAyOTMKLToxMDU4OTAwMDAwREYxQTBDRkYwMzBGRUUwMTJFOTY4MjA4RTQzMUQyQ0UKLToxMDU4QTAwMDcwRDEwRjAwRDI3MEQxMEZDMDIwRDEwRjZDMTAwNERCNkIKLToxMDU4QjAwMDMwODYyMDE1REMzOTI4MEEwMDI4MjUwMkRBMjAyOEIwOTUKLToxMDU4QzAwMDAwMkNCMDA3MDU4ODBBMjg4MjRDMkQwQTAxMEI4MDAwQTUKLToxMDU4RDAwMERCQTA2NUFGRTYxQURDMzIwQTRBMEEyOUEyQTNDN0JGRDkKLToxMDU4RTAwMDc2OTEwMUQxMEYyQkE2QTNEMTBGMDAwMDZDMTAwNEMwM0MKLToxMDU4RjAwMEQxQzdDRjFCREMyQ0MwQTAxOERDMjgwQzI5MTFBOTg4MkIKLToxMDU5MDAwMDg3ODU4NTg0MTlEQzI2Nzc1MTc5ODY1MDhFODdCNDU1MzIKLToxMDU5MTAwMDk1ODQ3NUU5MDM4NTg2OTU4NDc3NTk2QzhGODY5Rjg1NzQKLToxMDU5MjAwMDlGODQwQUU0MzEwMDAyMDAyMzkyODJCNDJFMDBFMTA0MzUKLToxMDU5MzAwMDJGQjEwMjAwRDQxQTBDNDQwMzA0MzMwMTIzOTY4MjBGQzIKLToxMDU5NDAwMEU0MzEwQUU0MzEwMDAyMDAyMzkyODIwMEQ0MUEwQzQ0QUMKLToxMDU5NTAwMDAzMDQzMzAxMjM5NjgyMEZFNDMxRDI2MEQxMEYwMDAwOUIKLToxMDU5NjAwMDBBRTQzMTAwMDIwMDIzOTI4MkI0MjgwMDgxMDQyMkIxQUIKLToxMDU5NzAwMDAyMDBENDFBMEM0NDAzMDQzMzAxMjM5NjgyMDJFNDMxNUEKLToxMDU5ODAwMEQyQTBEMTBGRDZBMDc3NTFENkQyNjBEMTBGMDAwMDAwOUYKLToxMDU5OTAwMDZDMTAwNDI3MEE4MDFDREMyODFEREMyODFBREMwMDBDOTMKLToxMDU5QTAwMDI5MTFBQTk5MkEyQ0ZDMkI5Mjg1MERBQTAyOUNCMTlBNDYKLToxMDU5QjAwMEIwQzA1MTEzREMyNTI4OTI4NTE2REMyMTE0REMyMkE2MDgKLToxMDU5QzAwMDI2MDQyNDBBQjg4ODI4OTY4NTIzNDY5MUE3NjYyNTY0NkMKLToxMDU5RDAwMDlGRDEwRjAwNkMxMDA0MTlEQzU1MEMyQTExQTlBOTg5NUMKLToxMDU5RTAwMDkwQzQ4NDc5OEI3NjFCREM0NUFCQUMyQUMyODMyQ0MyNzUKLToxMDU5RjAwMDg0N0FDMTY4OEFBMDJCQkMzMEQzQTA2NEEwNUUwQjJCMzQKLToxMDVBMDAwMDBBMkNCMkEzMTlEQzBGNjhDMDA3MUREQzQ5RDMwRjdEMzcKLToxMDVBMTAwMEM5NEFBOTI5Mjk5RDAxMjk5MDFGNjg5MTMyNzBBNjAzQkUKLToxMDVBMjAwMEQzQTBDQTlFNjg5MjEwQzdBRjJBQjZBMzJBMkNGQzVCRUIKLToxMDVBMzAwMEZGQUZEMjMwRDEwRjAwMDAxM0RCRUYwM0EzMDE4QzMxOTUKLToxMDVBNDAwMDFEREJFMDBDOEMxNDBEQ0MwMTJDQjZBMzYzRkZEQzAwMzUKLToxMDVBNTAwMEMwMjBEMTBGREEyMDVCRkZDRUMwMjBEMTBGQzAyMEQxRjMKLToxMDVBNjAwMDBGMDAwMDAwNkMxMDA0REIzMEMwRDAxOURCQ0JEQTIwNTMKLToxMDVBNzAwMDI4MzAwMDIyMzAwNzA4NDgxMjA5ODgwQTI4ODI0Q0RDQTYKLToxMDVBODAwMDIwMEI4MDAwMUJEQkM2MEM0QTExQUJBQTI5QTI4NDA5OUIKLToxMDVBOTAwMDI5MEIyOUE2ODREMTBGMDA2QzEwMDRDMDQxMThEQkJGNkMKLToxMDVBQTAwMDE3REJDMTBDMjYxMUE3MjcyNzcwMzBBODY2MjU2Mjg2NTAKLToxMDVBQjAwMDAwNzEwNEEzNTUwMDQ0MUE3NTQxNDgyMjYyODQxNURCMjUKLToxMDVBQzAwMEUyMDIzMjBCQzkyMjg4MjExN0RCQkUwODg0MTQwNzQ0ODYKLToxMDVBRDAwMDAxNzU0OTA1QzgzNEMwMjBEMTBGRDEwRjFEREMxNUMwOTgKLToxMDVBRTAwMEIyOEUyMDFGREJBRDBFMEU0M0FGRUMwRkVFMEEyQkM0QkYKLToxMDVBRjAwMEEwMkRFNjI0QzAyMDJBNjI4NDA4MDk0NzBBOTkwQjI5QjAKLToxMDVCMDAwMDY2ODREMTBGQzAyMEQxMEY2QzEwMDREQjMwQzBEMDE4RDgKLToxMDVCMTAwMERCQTJEQTIwMjUzMDAwMjIzMDA3MDg1ODBBMjg4MjRDMDAKLToxMDVCMjAwMERDMjAwQjgwMDA4OTMxNzA5RTEyMUJEQjlDMEM0QTExMUIKLToxMDVCMzAwMEFCQUEyOUEyODQwOTI5MEIyOUE2ODREMTBGMDlDOTUyMkQKLToxMDVCNDAwMDY4NTMyNjAwOTEwNDE4REI5N0MwQTEyRjgxMTIwMEFBODgKLToxMDVCNTAwMDFBMEFGRjAyMkY4NTEyMUVEQjkxMEM0RDExQUVERDJDQUYKLToxMDVCNjAwMEQyODQwQzJDMEIyQ0Q2ODREMTBGQzA4MTFGREI4RUI4QjUKLToxMDVCNzAwMDlBMEEwQTQ3MDBBMTA0MkVGMTEyMDA4ODFBMDhFRTAyQzAKLToxMDVCODAwMDJFRjUxMjFEREI4NjBDNEMxMUFEQ0MyQkMyODQwQjJCRDkKLToxMDVCOTAwMDBCMkJDNjg0RDEwRjAwMDA2QzEwMDREQjMwQzBEMDE5NzEKLToxMDVCQTAwMERCN0VEQTIwMjgzMDAwMjIzMDA3MDk4ODBBMjg4MjRDNjAKLToxMDVCQjAwMERDMjAwQjgwMDAxQ0RCNzkwQzRCMTFBQ0JCMkFCMjg0QkYKLToxMDVCQzAwMDBBMkEwQjJBQjY4NEQxMEY2QzEwMDRDMDQxMThEQjczNkIKLToxMDVCRDAwMDE2REI3NTBDMjcxMUE2MjYyNjYwMzBBODcyMjUyMjg2QjIKLToxMDVCRTAwMDAwNjEwNEEzNTUwMDQ0MUE3NTQxMDgyMjIyODQwMjMyNDAKLToxMDVCRjAwMDBCRDEwRjAwQzAyMEQxMEY2QzEwMDQxNURCQ0UwMjQ5NzEKLToxMDVDMDAwMDE0Mjk1NjExMjQ1MjEyQzA3MzAyMDg0MzBGODgxMTAwNDAKLToxMDVDMTAwMDgxMDQwMDM2MUFDNzhGMDA3NzFBMDg3NzAzMDc0NDAxRkEKLToxMDVDMjAwMDA2NDQwMjI0NTYxMkQxMEY2QzEwMDZDMEIwNkUyMzAyMzcKLToxMDVDMzAwMDYwMDBBMjY0MjA5RDg1MTAxM0RCQUExNkRCQkVDMDQwNjUKLToxMDVDNDAwMEE2QkEyQkEyQUUwQjE5NDE2NDkwNUU2ODkxNTU2ODkyN0EKLToxMDVDNTAwMDRBNjg5MzM3MjkzMEZGMjgzMEZFMkFBMkFBMDg4ODExMDMKLToxMDVDNjAwMDBBMEE0RDJBQUNGMjA5ODgwMjc1ODk0NDJCM0QwMTI5QTQKLToxMDVDNzAwMEIwMDAyQkIwMDEwODk5MTEwQjk5MDI3QTk5MzJCODMzMTAKLToxMDVDODAwMDJCMkEwMEIxNDQ3MjQ5Qjc2MDAwNDgwMDdGQkYwNTE1NTgKLToxMDVDOTAwMERCQUE2M0ZGQkUyNTNBRTg2M0ZGQjgwMDI1M0FFODYzNTQKLToxMDVDQTAwMEZGQjEwMDAwMjUwQTY0NjNGRkE5QzA1QTYzRkZBNDAwODYKLToxMDVDQjAwMDAwNzA1RjA4MjUzNEZGMDU4QzE0MkMzNEZFNzBBRjBCODgKLToxMDVDQzAwMDBBOEQxNDJFM0QwMTJBRTQwMTJERTQwMERBNDA1QkZEMkIKLToxMDVDRDAwMDVENjNGRkE5RDEwRkQxMEY2QzEwMDQxQURCMzIxOURCMDEKLToxMDVDRTAwMDJGMUNEQjk2MUJEQjk3QzA4MEMwNzE2MDAwMEQwMDAwOEQKLToxMDVDRjAwMDAwMjJBNDMwQjFBQTI5OUMxMDdCOTE1RjI2OTI4Njc5NUMKLToxMDVEMDAwMEMyMTVDMDIwNkU2MkU5NkQwODBBQjEyMjAwMjEwNDAwQUMKLToxMDVEMTAwMDc0MUE3NjRCREI2M0ZGRUUyMjkyODUwRDYzMTEwMzI1MjcKLToxMDVEMjAwMDE0NjQ1RkNGRDY1MDAzMkQ0MzZERDkwMzk4MjBCNDIyNUQKLToxMDVEMzAwMDA2NDQxNDZENDkyMjk4MjA5ODIxOTgyMjk4MjM5ODI0OEIKLToxMDVENDAwMDk4MjU5ODI2OTgyNzk4Mjg5ODI5OTgyQTk4MkI5ODJDNEYKLToxMDVENTAwMDk4MkQ5ODJFOTgyRjIyMkM0MDYzRkY5NzFFREIxMDI3M0EKLToxMDVENjAwMEU2ODAyN0U2ODFEMTBGMDA2QzEwMDRDMDYyQzA0MTEyQUEKLToxMDVENzAwMERCMEQxM0RCNzQyMzMyMkQxQURCMDgxOURCNkUyQUEwMkUKLToxMDVEODAwMDAwMjk5MkFFNkVBMzAyNjAwMDkxMjhBQ0ZFMDkwRDQwN0UKLToxMDVEOTAwMDJDMUFDMkMyQkQwRENCMzkyQjI1MTY2NDgwODk1QkZGM0UKLToxMDVEQTAwMEEyMTVEQjY5MUFEQjE0MkIzQUU4MEEzQTAxNTgwNTk4NjgKLToxMDVEQjAwMDJCMjExNjBBQkIyOEQzQTAyQjU2MDA1ODA1QUY4QjUwQjkKLToxMDVEQzAwMDBBQkIwODJBMEEwMDU4MDVBRTE1REI2MDJEMjEwMjJDRkIKLToxMDVERDAwMDNBRTgwQzNDMjgwNEREMDIyRDI1MDI5QzUwNTgwNUE2MEIKLToxMDVERTAwMDhCNTBBQUJCQzBBMTU4MDVBNjFDREI1OTJEMjEwMjBDNjMKLToxMDVERjAwMDNDMjgwNkREMDIxM0RCNTcyRDI1MDI5QzMwNTgwNTlFRkEKLToxMDVFMDAwMDhCMzBBQUJCQzBBMjU4MDU5RTJBMjEwMkMwQjQwQkFBOUYKLToxMDVFMTAwMDAyMEEwQTRGMkEyNTAyNTgwNUIyRDEwRjI0MjQyM0MzQUYKLToxMDVFMjAwMENDMkMyNTE2NjNGRjc2MDAxOERCNEYxQ0RCNEIxOURCRUYKLToxMDVFMzAwMDRDMUJEQjRBMTdEQjFGODUyMDJFMEFGRDFGREI0QjJENzkKLToxMDVFNDAwMDIwMkUyNEY0N0EyNEY0N0UyNEY0ODIwRUREMDEyNEY0M0UKLToxMDVFNTAwMDg2MkUwQUY3MDc1NTI4MDZERDAyQzA3NTBFREQwMTA1RkUKLToxMDVFNjAwMDA1MDZBQjVCQTk1OUMwRThBQzVDMjRDNEFCMEVERDAyRUYKLToxMDVFNzAwMDI3QzRBQzJFMEFERkE4NTUyN0I0RUMwRUREMDEyNEI0RUMKLToxMDVFODAwMEVCQzJFMDI3OTQyQzBFREQwMjI0OTQyQjJFMEE4MDBEMDkKLToxMDVFOTAwMDBENDYyNzU0NkMyNDU0NkIwRUREMDIyRDI0MkU2M0ZFMTgKLToxMDVFQTAwMEZDMDAwMDAwNkMxMDA0QzNBMEMwQjM1QkZGNTNDMDRBRTkKLToxMDVFQjAwMDEyREIyMUMzODAyODI2MTYyNDI2MTdDM0ExQzBCMzVCOUEKLToxMDVFQzAwMEZGNEVDMDNDQzNBMTJBMjYxNjE5REFCNjI5OTAyMDIzMUEKLToxMDVFRDAwMDI2MTc2NDkwOEYyQTBBMzIyQjBBMDE1QkZGNDdDM0EyNjAKLToxMDVFRTAwMDJCMEEwMTVCRkY0NUMzQjIyQjI2MTYyMzI2MTdDMkFGMzAKLToxMDVFRjAwMEMwQjE1QkZGNDFDMkZGMkYyNjE2QzBFRTJFMjYxN0MyOEYKLToxMDVGMDAwMEQyMkQyNjE2QzBDODJDMjYxNzI0MjYxMTJBMjIxMkM3RTUKLToxMDVGMTAwMEIzMEJBQTAxQzBCNDBCQUEwMjJBMjYxMjI5MEFBMTI5OEUKLToxMDVGMjAwMDI2MTZDMTgyMjgyNjE3QzBCMzJCMjYxMTJFMjIxMjFGMzcKLToxMDVGMzAwMERBQ0EwRkVFMDIyRTI2MTJDM0Q2MkQyNjE2MkEwQUEyODAKLToxMDVGNDAwMEMxQzMyQzI2MTc1QkZGMkMyQzBBQTIyQzI2MTZDMUI1MjgKLToxMDVGNTAwMDJCMjYxN0MyQUIyQTI2MTZDMDk3MjkyNjE3MThEQjAzNTMKLToxMDVGNjAwMDI4MjYxMEQxMEZDM0EyQzBCMzVCRkYyMzYzRkY2RTAwQ0UKLToxMDVGNzAwMDZDMTAwNDFDREFDRTFCREFCQjE4REFGRDE3REFGRTE2MzkKLToxMDVGODAwMERBRkUxNURBRkVDMEUwQzBENDE0REFDQTFGREE4NjIyQkYKLToxMDVGOTAwMDBBMDgyRkYyMDA2RDJBMzZEQUMwRDlDMDdDNUIwMjBGRTYKLToxMDVGQTAwMEM5MEMxQ0RBQzMwQzlDMjhBOEMzQTZDMjJBMzY4MDJBQjYKLToxMDVGQjAwMDI1ODRBNEMyQTdDQzJEMjQ4QzJCMjQ4QTJCMjQ4NzJFQTUKLToxMDVGQzAwMDI0OEJCMUJCMkUzNjlGMkMzNjlFMkMzNjlEQjFBQzFDM0IKLToxMDVGRDAwMERBQTUxQkRBRUJDMDI4NkQyQTMzREFDMEQ5QzA3QzVCQTYKLToxMDVGRTAwMDAyMEZDOTBDMUNEQUIzMEM5QzI4QThDM0E2QzIyQTM2MUYKLToxMDVGRjAwMDgwMkIyNTg0QTRDMkIxQkJBN0NDMkQyNDhDMkUyNDhCNEUKLToxMDYwMDAwMDJBMjQ4QTJFMzY5RjJDMzY5RTJDMzY5REIxQUNDMDc5MjAKLToxMDYwMTAwMDE5REFBMzFCREFERTEzREFEQjFBREFEQjE4REFERDE0OUQKLToxMDYwMjAwMERBQTQxNkRBREMwNEY0MjgxMkRBREMwNDY2MEMwNDA1QkYKLToxMDYwMzAwMDA2QTI1MkE4NThBQTVBQTM1MzlCMzAyOUE1MDAyNzg0MjgKLToxMDYwNDAwMDhBQzA5MUMwQTUyQTg0OEMyOTg0OEIxN0RBRDUxOERBRTYKLToxMDYwNTAwMEQzQTc1NzI2MzYxRDI2MzYxRTJFMzYxRjE2REFEMjEzMjQKLToxMDYwNjAwMERBRDJBNjU1MDQzMzBDMjgyNkM4MkU3NTAwMkQ1NEFDNjAKLToxMDYwNzAwMDJFNTRBQjJFNTRBQTIzMjZFNjIzMjZFNTJFMjZFN0QxNUUKLToxMDYwODAwMDBGMDAwMDAwNkMxMDA2MTNEQUFGMTdEQUFBMjQ3MjNENzUKLToxMDYwOTAwMDIyMzI5MzdGMkYwQjZEMDgwNTI4MzI5MzdGOEYwMjYzODYKLToxMDYwQTAwMEZGRjNDMEM0QzBCMDFFREEzRkMwNjFEOTQwMDk2OTM5RUUKLToxMDYwQjAwMDI5RTQyMDZFNDQwMUQ2QjBDMzI4REZCMDI2RTQyMjA2Q0UKLToxMDYwQzAwMDJGMzkyRkU0MjFDMDUwMUZEQUI5MTlEQUFBMTZEQUFCM0EKLToxMDYwRDAwMDE4REE3OTk0MTAyQTcyNDU4REUwMTdEQUE1OUQxMTFEMDIKLToxMDYwRTAwMERBQjQ2REE5NEJENDUwMjU1QzAzN0E1QjE4REU1MDc1ODkKLToxMDYwRjAwMDZCMDUyRTEyMDEwRTVFMEMxMkRBNkUwMkUyMjgwMTExRkYKLToxMDYxMDAwMDAyQUYyMjIyRDY4MUQ1NDAxM0RBNkE3NDZCMDUyNTEyQkMKLToxMDYxMTAwMDAxMDU0NTBDMDM1MzI4QjE0NUE4M0VBOTMyQTczMzIyRjcKLToxMDYxMjAwMDM2OUQyMjM2OUUyNDM2ODAyQjM2OUYyQkU0OEIyQ0U0MjIKLToxMDYxMzAwMDhDMTREQTg0MjQ0MjREQzAzMDA0MTQxNEM4NEM2RDA4MDkKLToxMDYxNDAwMDA2QjEzMzA0MTQxNEM4NDI2M0ZGRjIwMDE2REExM0M0MTQKLToxMDYxNTAwMDQwQzE1ODAwMzEwNDFBREExM0MwQjE5M0EyMDBCQjFBMkYKLToxMDYxNjAwMEIwQkI5QkEzMThEQTc4Mjk4MjREMjM4MjRFMjg4MjUzMzQKLToxMDYxNzAwMDdBODcxQzJDNjQwMDhDMTA2RkM0NDgxRURBMEEwNDNEMTgKLToxMDYxODAwMDBDMkRFNTFDMkZFMTFEMkRFNTFBMkZFNTFCRDEwRjAwNkQKLToxMDYxOTAwMEMwNzIxMkRBNjg4MjIwN0UyN0RCMDMwMzRGMjc2NDAwNzcKLToxMDYxQTAwMDg4MTBDMDYxNkY4NDMwQzBBMDAzMTkxNDBBNTQzOTFBRDIKLToxMDYxQjAwMEQ5RkQwNDk5MEMyOUE1MUMyOUE1MUQyOUE1MUEyOUE1RDUKLToxMDYxQzAwMDFCRDEwRjAwMUNEOUY4MDUzQjBDMkJDNTFDMkRDMTFEODQKLToxMDYxRDAwMDJCQzUxQTJEQzUxQkQxMEYwNjU0MzkwMzFFMTQwNEVFMEUKLToxMDYxRTAwMDBDMkVBNTFDMkVBNTFEMkVBNTFBMkVBNTFCRDEwRjAwMDkKLToxMDYxRjAwMDZDMTAwODFBRDlFQzE0REE0RjEzREE1MkM3MkZDMDUwQkEKLToxMDYyMDAwMDE2REE2QzI1NjZBODI1NjZBOTI1NjZBQTI1NjZBQjIyM0UKLToxMDYyMTAwMDM2MjkyQjQyNDUxOURBMTNEODEwMUNEQTY2QzBENDlERjIKLToxMDYyMjAwMDExOUMxMDAwODA4OTBCOTkwQzk5QTAyODE2MDI1QkZGMjUKLToxMDYyMzAwMDk1MkEzMkUzMUZEOURDMEE1QTE0OUFGNDI5MzJFNEIxQzAKLToxMDYyNDAwMDk5MDk1OTE0MEE5OTBDOTlGNTI4MzJFNTA4NTgxNDk4QjcKLToxMDYyNTAwMEY2MkUzMkNEMEU1RTE0MkVGNjA3NUJGRjQ1NUJGRjExNjYKLToxMDYyNjAwMDIyNDYzQjFDRDlEMDJBQzEwMkMxQjAwQkFBMDIxQkRBQkMKLToxMDYyNzAwMDJBMEEwQTRGMkFDNTAyMkI0NjNBNTgwNDk5NUJGRUJBRUQKLToxMDYyODAwMDVCRkU5NUMwQjA4NjEzMTdEOUM1MjUzNjJEQzc0RUMwMDUKLToxMDYyOTAwMDMwOTQxNEMwNTAxNEQ5Q0E2MDAwNDMwMDAwN0Y5RjBGOEYKLToxMDYyQTAwMEIxNTUwOTE5MTQ2NTlGRjRDMDUwMEFBOTAyN0ZBN0VGRTAKLToxMDYyQjAwMDE4RDlCQURBNTAwODU4MEEyODgyMkMyQjBBMDAwQjgwMDkKLToxMDYyQzAwMDAwMDA1MTA0RDJBMEMwOTFDN0FGMDA5OTFBMEE5OTAzRTcKLToxMDYyRDAwMDI5MTYwNENFMzM2NDIwNjNEMzIwMkIyMDA3RDY1MDhDOUMKLToxMDYyRTAwMDE0MkE3MjgyN0NBODVDMThEOUFDMDg1ODBBMjg4MjJDMUYKLToxMDYyRjAwMERBNTAwQjgwMDBEMkEwNjQzRkRBOEEzMTBBOEExNDA0OTMKLToxMDYzMDAwMEFBMDFDODJBMkIyMjAxMEI4QjE0MDRCQjAxN0FCOTQwQzUKLToxMDYzMTAwMEREQTA2RUExMDgxREQ5QTMyREQyMDAwREFEMENEQjMwODAKLToxMDYzMjAwMERDNjAxQUQ5RTMxOEQ5OUMwQURBMjgwODY4MEExRERBNTEKLToxMDYzMzAwMDFGMjg4MjNDQURBQTBCODAwMDY1MkY5QkQzMjBDMEIwRTQKLToxMDYzNDAwMDYzRkY5QjAwQ0E1Q0IxNTUwMDUwMDQwQTA5MTk2M0ZGNDIKLToxMDYzNTAwMDRCRENCMDZFQjEwOTFDRDk5MzhDQzBEMzBGMENCQzBDQjQKLToxMDYzNjAwMDFERDlENDFFREExMjBEQ0QyOEFFREQxRURBMTEyREU2QjAKLToxMDYzNzAwMDgxNjNGRjlCN0ZBN0NFNjNGRjZDMDAwMDZDMTAwNDFCNDIKLToxMDYzODAwMEQ5ODcyNzIyMUVDMDgwMDhFNDMxMDAwMjAwMkFCMjgyODkKLToxMDYzOTAwMDE5RDk4NTAwMzEwNEMwNjEwMDY2MUEyOTkxMDIwQTZBODAKLToxMDYzQTAwMDAyMkFCNjgyMDlFNDMxMTVEOURGMEMzODExQTg1MzI4MjYKLToxMDYzQjAwMDMyODIyNDMyODQyQThDRkM3ODQxMTAyOTIxMDIyQTM2MjgKLToxMDYzQzAwMDgyOTdBMDA5NjkwMjI5MjUwMkQxMEYwMDJCMjEwMjJDRjYKLToxMDYzRDAwMDMyODUwQjZCMDIyQ0NDRkMyQzM2ODI5N0MwMkIyNTAyMEQKLToxMDYzRTAwMEQxMEYwMDAwNkMxMDA2QzBDNzFCRDk2ODFBRDk2QTBERkUKLToxMDYzRjAwMDRFMTFENzIwODgyMDg1MjJEOTgwMDU0NTBCMDI4MjBDQkEKLToxMDY0MDAwMDk1NzIyMjJDRjRDODM0NkYyRTAyNjAwMEFCMUZEOTYwNDUKLToxMDY0MTAwMEE5RTJBRjdENzJEMzM0QzkzREMwMjEyRjBBMDAwOTJGRjQKLToxMDY0MjAwMDM4MEYwRjQyQzlGOTJBQjY3RTZENEEwNTAwMzA4ODAwNDAKLToxMDY0MzAwMDkwOEMyMjcyMDAwMkUyMDg3MkQxNzQ5MjcwRDI4MEQxRTQKLToxMDY0NDAwMDBGQzA1MDAzMjUzODc1QzBERjYzRkZEOTA5N0QwQ0FGM0QKLToxMDY0NTAwMEREMERFRTBDNjQzMDRFRDIzMDBEM0YxMjk2MTEyRjE2MkEKLToxMDY0NjAwMDAwMkZGQzEwMEY0RjM2MjYwQTAxMjUwQTAwMDk2NTM4NTcKLToxMDY0NzAwMDA1MDU0MjY0NTA3MTJBQjY3RTZERkEwNTAwMjA4ODAwMzkKLToxMDY0ODAwMDkwOENDMDUwQTNEMjg5MTAyMzdDMEMwOTQ0MEMyOTBBOUIKLToxMDY0OTAwMDAxMDM5NTM4MDUwNTQyNjQ1MDVBMkFCNjdFNkQ0QTA1QjcKLToxMDY0QTAwMDAwMjA4ODAwMzA4Q0QyODBBN0VBQkNBQTlBNzBEMTBGNTUKLToxMDY0QjAwMEQyODBCQzdCOUI3MEQxMEYwMDAyM0YxNEMxRDBEMjMwODAKLToxMDY0QzAwMDBGREQwQzBENEQzNjI5OEQwOEMwRjEyNTBBMDAwOUY1QTgKLToxMDY0RDAwMDM4MDUwNTQyQ0E1ODJBQjY3RTZEREEwNTAwMjA4ODAwQzQKLToxMDY0RTAwMDkwOEM4OTcwNjNGRjI1MDBDMDYxQzA1MDAzNjUzODc1Q0EKLToxMDY0RjAwMEMwODY2M0ZGODBDMEQwMDI5RDM4N0RDMDlGNjNGRjk5MzYKLToxMDY1MDAwMEMwNTAwM0Y1Mzg3NUMwRDA2M0ZGQ0EwMDZDMTAwNEQ2QzQKLToxMDY1MTAwMDIwNjg1MjBGNjk1MzI0REEyMERCMzBEQzQwNTgwMEYwNDkKLToxMDY1MjAwMEQyQTBEMTBGREEyMERCMzBEQzQwNTgwMEVEOUEyNDI0RDEKLToxMDY1MzAwMDI0MEVDMDIxMjI2NDBGQzAyMEQxMEYwMEI4M0JCMDRDMDQKLToxMDY1NDAwMDJBMkM3NDg5MjQyRDIwMEUyRTIwMEZBNEREQjFFRTJFQ0UKLToxMDY1NTAwMDI0MEZCMEREMkQyNDBFMjg5MDA3MkQ5MDAzQTQ4OEIwQzEKLToxMDY1NjAwMDg4QjFERDJEOTQwMzI4OTQwNzVCRkY5RTY5NTExREMwRkYKLToxMDY1NzAwMEUwODIyNDJBNjAwRjE4RDk5MDJBMjQwMzI5NjAwRThGMDQKLToxMDY1ODAwMDIwMjkyNDA3MDhGRjAyOUYyMDlFNjREMTBGQzAyMEQxM0MKLToxMDY1OTAwMDBGMDAwMDAwNkMxMDA0OTQyMzE5RDk4OEMwQjMwODNBODYKLToxMDY1QTAwMDExMEJBQTAyOTkyMDE5RDhGRDlBMjEyODkyOUQxNkQ4N0MKLToxMDY1QjAwMEZBQzA1MDI1NjRBMjI4OEMxODI4OTY5REQxMEYwMDAwOUYKLToxMDY1QzAwMDZDMTAwNDI4MjA2NkMwMzgyMzI0MDZCNzg4MjgyNDY2NjcKLToxMDY1RDAwMEQxMEYwMDAwNkMxMDA2MDM1QTBDMEQzNjExMEQ1QzExMjIKLToxMDY1RTAwMEQ4MjA4QjIyODIyMTBDQkIwQzA2NTUwRjlCODIwMjMyRDUKLToxMDY1RjAwMDBCOTI4MTEzRDhFN0Q5MjBBMzhGNjQ1MDUzMUNEOEUzQTIKLToxMDY2MDAwMEMwRDcxQkQ4RTRBMjU2QzBFMTI5MEEwMDA0RTkzODA5MjIKLToxMDY2MTAwMDA5NDI3NkYzNEEwNDQzMDJDOTlFMkJDNjdFNkRBQTA1NDEKLToxMDY2MjAwMDAwMjA4ODAwMzA4Qzg5ODFBOTU5MDlGQTBDNjRBMDc5NkUKLToxMDY2MzAwMDk5ODE4QTgyQzhBREQyOTBEMTBGQzA2MDAyRTYzODc2QzcKLToxMDY2NDAwMEQwREE2M0ZGRDRDMDIwQkM4OTk5ODE5OTgwOTI4MkQxMkQKLToxMDY2NTAwMDBGN0YyMzA0MjkyREY4OTk4MTY1QkZEOTYzRkZFNTAwRDkKLToxMDY2NjAwMDAyOEYwQ0EzRkYwRjMzMTI5MzEwMDNBQTBDRDM0MENCNUQKLToxMDY2NzAwMDlFMkJDNjdFODYxMDZENkEwNTAwMjA4ODAwMzA4Q0JDN0IKLToxMDY2ODAwMDgyMjkwQTAwMDRGMzA4MjQwQTAxMDM0OTM4MDkwOTQyNEYKLToxMDY2OTAwMENBOTgyQkM2N0U2REFBMDUwMDIwODgwMDMwOEMwRjU5NDEKLToxMDY2QTAwMDBDQTk4OUJDOTk5OTgxNjNGRjg3QkM4OTk5ODE2M0ZGOTMKLToxMDY2QjAwMDgwQzA2MDAyRTYzODc2RDBCQTYzRkZCNEMwNzAwMjQ3OEIKLToxMDY2QzAwMDM4NzdEMEQwNjNGRkNBMDA2QzEwMDQxNEQ4QzBDMTUyMTAKLToxMDY2RDAwMEE0MjRDOTNFMjgyMjFENzM4MTE5MjkyMTAyQ0Q5MzJBQTEKLToxMDY2RTAwMDMwMDA3NUE5MTJEQTIwREIzMDJDMzAwN0MwRDI1ODAxRjcKLToxMDY2RjAwMEM0NjUzRkRGRDEwRjAwMDAyQjMwMDcwM0JCMEJEQUIwQkUKLToxMDY3MDAwMDc0QjMwMjJBQkRGOEQzQTA2M0ZGQzYwMDZDMTAwNDI5M0QKLToxMDY3MTAwMDIwMDZDMDcwNkU5NzQxMjkyMTAyQzA4RjJBMjAxNEMwMjQKLToxMDY3MjAwMEI2MkIyNDA2MDZBQTAyMkEyNDE0Nzk4MDAyMjcyNTAyMDEKLToxMDY3MzAwMDJBMjIxRTJDMjIxRDdBQzEwRUM4QUJEQTIwREIzMDJDOTcKLToxMDY3NDAwMDBBMDAwMzNEMDI1QkY4MjI2NDUwNzUyRDIxMDIwRDBERjUKLToxMDY3NTAwMDRDQzlEM0MwMjBEMTBGMDAwMDJFOUNGQjY0RTA4MjJGRDcKLToxMDY3NjAwMDIxMDIwRjBGNEM2NUYwOTExQUQ4OEQxQ0Q4OEIyOUEyRUQKLToxMDY3NzAwMDlFQzA4QTc5OEI1RDJCQzIyNjY4QjAwNDhEMjA3QkQ5QTAKLToxMDY3ODAwMDUyMjlBMjlEQzBGMzY0OTA0QTk3OTAxREQ4OUUyRTIxNTUKLToxMDY3OTAwMDA0OUQ5NjA4RUUxMTBGRUUwMjlFOTc5RTkxMjdDNEEyQ0IKLToxMDY3QTAwMDE4RDg5QTJGMjEwMjJCQTI5REMwRTUyRTI0MDYyQkJDQkYKLToxMDY3QjAwMDMwMDhGRjAyMkJBNjlEMkYyNTAyQzAyMEQxMEYwMDAwMUMKLToxMDY3QzAwMDAwMkYzMDAwNjhGOTM4REEyMERCMzBEQzQwNTgwMDQ0MTQKLToxMDY3RDAwMDYzRkY3NzAwMDIyQTAyMkIwQTA2NTgwMEQ0MjIwQTAwMUYKLToxMDY3RTAwMEQxMEY2NTUwMTAyODMwMDA2ODg5MjQwMjJBMDIwMzNCMkIKLToxMDY3RjAwMDAyREM0MDU4MDAzQkMwMjBEMTBGRDI3MEQxMEYwMDAwMDYKLToxMDY4MDAwMDJBMkM3NDAzM0IwMjA0NEMwMjVCRkVGNjYzRkYzQjAwNDAKLToxMDY4MTAwMERCMzBEQzQwMkEyQzc0NUJGRUYzQzAyMEQxMEYwMDAwN0IKLToxMDY4MjAwMDZDMTAwNEM4M0Y4OTI2ODgyOUEzOTk5OTI2MDk4ODBDRTkKLToxMDY4MzAwMDA4MDg0ODI4MjUyNUNDNTJDMDIwRDEwRkRCNDAyQTJDM0YKLToxMDY4NDAwMDc0NUJGOTQ5RDJBMEQxMEY2QzEwMDREODIwRDczMDgyRTQKLToxMDY4NTAwMDIyMEQ0NTExMDUyMjBDOTI4MjY0MjA3NDA3NDIwQjEzMEQKLToxMDY4NjAwMEQ4NENENDIwQTM4MzczMjMwMjI0MkRGODg1ODA3NDUxM0YKLToxMDY4NzAwMDRDQkM4MkMwOTA2RDA4MTYwMDQwODgwMDcwOEM3NzM5M0YKLToxMDY4ODAwMDAzRDcyMEMwOTE4NjgwNzQzOTAxRDQyMDc0NjEwMjYzREIKLToxMDY4OTAwMEZGRTJDQTk4QzA5N0MwNDExQkQ4Q0FDMEEwMEI4QjBDOUUKLToxMDY4QTAwMDBCNEEzODBBMEE0MkM5QUExREQ4MzkxQ0Q4M0EyQ0Q2MzQKLToxMDY4QjAwMDdFQzE0MEQzMEY2RDRBMDUwMDIwODgwMDMwOEM5NzgwNDAKLToxMDY4QzAwMEQyNzBEMTBGQkM4RkMwRTAwRjRFMzg3RTkwRTI2M0ZGRDQKLToxMDY4RDAwMEQ2QkM4MjkyODE5MjgwQzAyMDkyODJEMTBGMDAwMDAwQUIKLToxMDY4RTAwMDZDMTAwNkMwRDcxQ0Q4MjkxQkQ4MkIwRDQ5MTFENzIwRjYKLToxMDY4RjAwMDJBMjIxRjI4MjIxRDBBNEEwQkQyODAwNzg2MEMyQTc2REMKLToxMDY5MDAwMDFGMjY2QzgwQzgzNDZGNkUwMjYwMDBEMDJGMEE4MDFBNzgKLToxMDY5MTAwMEQ4MkZBMjlFQUE3QTdFQTMzRkM5M0ZDMEUxQzA1MDAyRjEKLToxMDY5MjAwMEU1MzgwNTA1NDJDQTU1MkJDNjdFREIyMEQzMEY2RDRBREMKLToxMDY5MzAwMDA1MDAzMDg4MDBCMDhDMkU3MjFEQUU5RTBFQTUwQzY0MzIKLToxMDY5NDAwMDUwOEFEMjgwMkU3NjFEQzA5MTI5ODQwM0QxMEZDMDUwNjkKLToxMDY5NTAwMDAzRTUzODc1RDBEMzYzRkZDRDE1RDgxQzAyN0UwQ0E1OTYKLToxMDY5NjAwMEVFNjQzMDU1REEzMDBFMzUxMjk2MTI5NTExMjU1QzEwMTIKLToxMDY5NzAwMDA1NDUzNkMwNjE5NTEwQzA1MDAyNjUzODA1MDU0MjY0NzIKLToxMDY5ODAwMDUwODkyQkM2N0U4NTEwRDMwRjZENUEwNTAwQTA4ODAwNTQKLToxMDY5OTAwMDIwOENDMEExQTNFMkMwNTAyM0ZBODAwMzczMEMwM0E1OEUKLToxMDY5QTAwMDM4QUY3MzA1MDU0MjY0NTA3MjJCQzY3RTg1MTEwNTQ1Q0MKLToxMDY5QjAwMDBDNkQ1QTA1MDAyMDg4MDAzMDhDRDI4MEMwQTEwRTlCM0YKLToxMDY5QzAwMDBDQUI3QkFGQkIyQjc2MUQyQTg0MDNEMTBGRDI4MEMwQ0EKLToxMDY5RDAwMEMxQUY3RDJENzYxRDJDODQwM0QxMEYwMDAwMDYzRjE0MUUKLToxMDY5RTAwMEMxRTBEMjMwMEZFRTBDMEU0RTM2MkE4RDA4QzBGMTI1RDQKLToxMDY5RjAwMDBBMDAwQUY1MzgwNTA1NDJDQTVDMkJDNjdFNkRFQTA1MTkKLToxMDZBMDAwMDAwMjA4ODAwQTA4QzIyNzIxRDYzRkVGRkMwNjFDMDUwNzAKLToxMDZBMTAwMDAzNjUzODc1RDgwMjYzRkY2QjYzRkY2NUMwNTAwMkE1M0MKLToxMDZBMjAwMDM4NzVEMDg3NjNGRjgxMDBDMDYwMDNGNjM4NzZEMENDMUMKLToxMDZBMzAwMDYzRkZDNjAwNkMxMDA0MkEyMDE1MjkyMDE2MTREN0Q5MkMKLToxMDZBNDAwMDBBOTkwQ0NCOUQyRTIwMEIwNEVEMDkyQkQxMUMwOUJDRkYKLToxMDZBNTAwMDM2QUNBQTBDQkIwQzJCRDUxQzBBMEE0NzJBMjQxNUNCMzIKLToxMDZBNjAwMEExOEI0MzhGMjg4OTQyQjBBODAwOTEwNDAwODgxQUE4RkUKLToxMDZBNzAwMEZGMEZCQjAyOUIyNzhGMjYwRkI4MEM3ODNCMUFDMDIwNTQKLToxMDZBODAwMEQxMEYwMDAwMjkyMTAyQzBBMjBBOTkwMjI5MjUwMkMwQzMKLToxMDZBOTAwMDIxRDEwRjAwOEIyNzYzRkZEQzJCRDExQzBDQUEwQzBBMjEKLToxMDZBQTAwMDBBNDcyQTI0MTVBQ0JCMkJENTFDQzlBRThCNDM4QzI4QjYKLToxMDZBQjAwMDhGNDJCMEFEMDBGMTA0MDBERDFBQURDQzBDQkIwMjlCREYKLToxMDZBQzAwMDI3REEyMEI3RUI1ODAwMTlDMDIxRDEwRjlGMjc2M0ZGQTkKLToxMDZBRDAwMEVGMDAwMDAwNkMxMDA0MjgyMDNDNjQzMDQ3MDUzMDYwNTMKLToxMDZBRTAwMDAwMDczRTAxMDUzRUIxNTYwNzY1MzkwNTQ5MjhDNzdGQjUKLToxMDZBRjAwMEE5MzMwMzA2NDEwNzY2MDNCMTY2MDYwNjQxQTYzMzdFNDUKLToxMDZCMDAwMDg3MUUyMjIxMjUyOTFBRkM3MzJCMTUwMjM4MEMwOTgxQjYKLToxMDZCMTAwMDYwMDAwNjNFMDEwMjNFQjEyNDA2NDIzOTAzMjIwQUQxM0EKLToxMDZCMjAwMDBGRDIzMEQxMEZDMDUxNjNGRkMwMDAwMDZDMTAwNDFEQTQKLToxMDZCMzAwMEQ3OUIyNzIyMUVDMDgwMDhFNDMxMDAwMjAwMkNEMjgyOUQKLToxMDZCNDAwMDFCRDc5OTAwMzEwNEMwNjEwMDY2MUEyQkIxMDIwQzZDOEUKLToxMDZCNTAwMDAyMkNENjgyMEJFNDMxMTlEODFCMEMzQTExQUE5MzI4QzcKLToxMDZCNjAwMDMyODI5NzgwMjUzMjgyMjQzMjg0QjQ1NTI1MzY4Mjc1NEMKLToxMDZCNzAwMDQxMEEyOTIxMDIwOTY5MDIyOTI1MDJEMTBGMkEyMTAyOEQKLToxMDZCODAwMDJCMzI4MzBBNkEwMjJCMzY4MjJBMjUwMkQxMEYwMDAwOUIKLToxMDZCOTAwMDZDMTAwNDFERDc4MjE5RDc4QzI3MjIxRUMwODAwOTc3NUMKLToxMDZCQTAwMDAyMDhFNDMxMDAwMjAwMkNEMjgyMUJENzdFMDAzMTA0OUYKLToxMDZCQjAwMEMwNjEwMDY2MUEyQkIxMDIwQzZDMDIyQ0Q2ODIwQkU0NjkKLToxMDZCQzAwMDMxMTlEODAwMEMzQTExQUE5MzI4MzI4Mjk3ODAyNTMyQzUKLToxMDZCRDAwMDgyMjQzMjg0QjQ1NTI1MzY4Mjc1NDEwQjJBMjEwMjBBNUIKLToxMDZCRTAwMDZBMDIyQTI1MDJEMTBGMDAyQjIxMDIyQzMyODMwQjZCNjMKLToxMDZCRjAwMDAyMkMzNjgyMkIyNTAyRDEwRjAwMDAwMDZDMTAwNDFCRTIKLToxMDZDMDAwMEQ3NjcwQzJBMTFBQkFBMjlBMjg2QjQzODc5OEIyMjFCMkMKLToxMDZDMTAwMEQ3NjQxOUQ3OEIwQjJCMEEyQkIyQTMwOTI5MDg2OEIwQUMKLToxMDZDMjAwMDAyNzRCOTBEMjk5RDAxMjk5MDFGNkU5MjA4MjJBMjg1MzgKLToxMDZDMzAwMEQxMEZDMDIwRDEwRkM4OTJDMDIwRDEwRkRBMjA1QkVGNTYKLToxMDZDNDAwMDNEQzAyMEQxMEYwMDAwMDA2QzEwMDQxNEQ3NTQyODQyMUUKLToxMDZDNTAwMDlFMTlENzUxNkY4ODAyNjAwMEI5Mjk5MjI2Njg5MDA3NjMKLToxMDZDNjAwMDhBMjAwOUFBMEM2NUEwQUIyQTQyOURDMERDNjRBMEEzQkYKLToxMDZDNzAwMDJCMjAwQzE5RDc0QjBDQkMxMUE0Q0MyRUMyODYwOUI5MDEKLToxMDZDODAwMDBBN0VEMzAyNjAwMDk5Mjk5MkEzNjg5MDA3OEQyMDA5OUIKLToxMDZDOTAwMEREMEM2NUQwOEIyNUMyODU2NDUwODUyRDIxMDRDMDMwNjQKLToxMDZDQTAwMDZFRDgwRDJDMjA2NkI4Q0MwQzBDNDcyQzI0NjY2NUMwMjEKLToxMDZDQjAwMDdBMUFENzUyMUNENzVCMURENzQ4MUVENzRGQzA4NDk4NkQKLToxMDZDQzAwMDUxOUU1MDg5MjA5RDU2OUQ1NDkzNTc5MzU1OUM1MzBBMkQKLToxMDZDRDAwMDk5MDIxQ0Q3QkQxQUQ3NjQ5OTUyOEYyNjk5NUE5ODU5OTAKLToxMDZDRTAwMDlFNTg5MzVFOUM1RDkzNUM5QTVCMEYwRDQ4MDVERDExODkKLToxMDZDRjAwMDlENUZDMEQ4MUVENzMyMENCOTExQTQ5OTI4OTI4NUFFRDkKLToxMDZEMDAwMEJFMjNFNENGMjg4QzQwMjg5Njg1OUYyOTJEMjQwNkMwRDkKLToxMDZEMTAwMDIwRDEwRjAwQ0EzMkRBMjBDMEI2NUJGRjg0QzcyRkQxNjIKLToxMDZEMjAwMDBGQzkzOURBMjA1QkZGODFDNzJGRDEwRkRCRDA1QkZFQTMKLToxMDZEMzAwMDE5MjMyNDY2MkIyMDBDNjNGRjc2QzcyRkQxMEZDNzJGOTIKLToxMDZENDAwMEQxMEYwMDAwNkMxMDA0Qzg1QjI5MjAwNjY4OTQxQzY4RjEKLToxMDZENTAwMDk2MDdDMDIwRDEwRkMwMjBEMTBGREEyMERCMzBEQzQwRjUKLToxMDZENjAwMERENTAyRTBBMDA1QkZFNjlEMkEwRDEwRjJFMjAwQzE4MzgKLToxMDZENzAwMEQ3MEIwQ0VGMTFBOEZGMjlGMjg2QzA4ODc5OEI3NTFBMDIKLToxMDZEODAwMEQ3MDgwQUVBMEEyQUEyQTM2OEEwMDQ4QjIwN0FCOTY0NjkKLToxMDZEOTAwMDIzRjI4NTY0MzA1RTFDRDcxMjJBMEE4MDJEMjA2ODI5RDAKLToxMDZEQTAwMDIwNjcyODIxMDQwQjk5MTEwNDg4MTEwOTg4MDIwOERENDUKLToxMDZEQjAwMDAyQzA5NDI4NEExMDA4REQwMjE4RDcwQTk5MzE5ODMwODkKLToxMDZEQzAwMDhCMkI5QTM3OUQzNDBDQkIwMjlCMzJDMEMwOUMzNTlDRTgKLToxMDZERDAwMDM2MkEyQzc0REI0MEMwRDMxOEQ2RjkyOUYyODVBOEVFRTgKLToxMDZERTAwMDI5OUMyMDI5RjY4NTJDRTRDRjJEMjQwNkRENDA1QkZENkYKLToxMDZERjAwMEY5RDJBMEQxMEZEQTIwREJFMDVCRkY0Q0MwMjBEMTBGMkQKLToxMDZFMDAwMDZDMTAwQUQ2MzAyQTIwMDY5NDEwMjhBQ0Y4NjU4M0ZGNEYKLToxMDZFMTAwMDJCMjEyMjI3MEEwMjJBMjEyNENDNTcyQUFDMDEwQTBBNTQKLToxMDZFMjAwMDRGMkEyNTI0N0FCQjAyNjAwM0Y3MkMyMTAyMkEyMDBDNkEKLToxMDZFMzAwMDBDMEM0QzY1QzM4RTJFMjIxNThEMzJDMEYxMEVERDBDNkMKLToxMDZFNDAwMDY1RDQwNDg4MzgxRUQ2RDU2NDgzRTE4RjM3QzBDOEMwQTYKLToxMDZFNTAwMDk2MEZDOTM5OTkxNEI0OUI5QjExMEQ5OTExOTkxM0M5QjcKLToxMDZFNjAwMEZCMTlENkQwMjk5MDIxN0Y5MzEzOEIxNDhDMjA1QkZGQzQKLToxMDZFNzAwMDYzMUVENkNBRERBMDY0QTQxQzhGNjc2MDAwMjk4QzExMzQKLToxMDZFODAwMDBDQUQxMUFFREQyOEQyODYwQUFCMDI3OENCNjIxQUQ2RTEKLToxMDZFOTAwMEM0MEFCQTBBMkFBMkEzNjhBMDA1MkMyMjAwN0FDOTUwMDMKLToxMDZFQTAwMDJBRDI4NUREQTA2NEEzRDcyOTIxMkUwOUY5MzYyQTIwMEMKLToxMDZFQjAwMDNDMDlGODBDNkY4RDNFRDdGMENCN0YyODIxMUYwODcwNUUKLToxMDZFQzAwMDYwMDEwQjNFMDAwNDNFQjFCQzA0Q0IzOUM3NEYwQkJCODUKLToxMDZFRDAwMDBBMDdCQjBBMEIwQzQxMDRDQzAzQjFDQzBDMEM0MUFDMkYKLToxMDZFRTAwMEJCRDRCMEMwQzI3Q0EwNEMyQTIxMjU3QkFCNDY2MDAwM0QKLToxMDZFRjAwMDJDQzBBMDYzRkZBQ0Q3OTA2M0ZGQkQwMEMwOTJDNzRGMEEKLToxMDZGMDAwMDJDN0MxNDBDMEI0MTA0QkIwM0IxQkIwQjBCNDFBQjc0QzkKLToxMDZGMTAwMDI0NEMxNDc5QTAxRTJBMjEyNTc0QUIxOEFDQkIyNDFBNkEKLToxMDZGMjAwMEZDMEFCQzBDMDRDMTYwMDAwOTNFMDEwNDNFQjE0ODA5RTIKLToxMDZGMzAwMDg0MzkwQjQ0MEE4OTI2ODgyNzA5ODgwQzc0ODMxREMwNkMKLToxMDZGNDAwMDgwOThEODhDNjQ5Q0Q5OEI2NjhBNjU5QkRCOUFEQTk3OEIKLToxMDZGNTAwMEQ1N0Y3MzAyNjAwMTNBQ0U1RTYwMDAxNjAwOUQxNURBOUYKLToxMDZGNjAwMDIwREI0MDVCRkVCNDhEMTUxRUQ2OEQ2NUEyNTY4RjY3NjMKLToxMDZGNzAwMDYzRkZDQjlEMTVEQTIwREIzMDhDMTA1QkZFNTk4RDE1M0QKLToxMDZGODAwMDFFRDY4N0MwNTFENkEwOEZBN0MwQzA4QTY4OTdERDlBNDkKLToxMDZGOTAwMERDODg2OTg5NkE5OERFOTlERjhCNkE4QTY5QUI3Qjc3QkUKLToxMDZGQTAwMEJCMDIyQUFDMDE5QjZBOUE2OTg4NjBDMEEwMDg4QjE0NTYKLToxMDZGQjAwMDc3ODcwMUMwQTFDMDkwMjgyMDNDOTQxNzk1MTg5MzE2OUMKLToxMDZGQzAwMEMwNTBDMDMxQzA0NDA0ODQwMTA0MzkzODA4OTkxMEMwNEQKLToxMDZGRDAwMDQyMDQ4NDAxMDQzNTM4MDgzODQwODMyQjBCQTQxMDA3ODEKLToxMDZGRTAwMDU1MTAyQTIxMUYwOTU1MDIwNTQ0MDIwQjE5NDAwQTJBOEYKLToxMDZGRjAwMDE0MDc5OTEwMDU4NTEwMDQzMzAyMEE4ODExMTRENkYzN0EKLToxMDcwMDAwMDA5NTUwMjI5MjEwNDA0MzMwMjA4OTkxMTA5ODgwMkMwOTQKLToxMDcwMTAwMDkyMDk4ODAyMjkyMTI1OTNEMDA5MjkxNDA0OTkxMTBBN0IKLToxMDcwMjAwMDk5MDIwOTU1MDI4QTIwODkxNDA4QUExMTBBOTkwMjFBOUMKLToxMDcwMzAwMEQ2NkYxNEQ2RTcwQTk5MDI5OUQxODMyQTk1RDY5OEQ3QTQKLToxMDcwNDAwMDg1MTgwNDMzMDI5M0Q0ODQxNzgzMTY4QTY1OEQ2NkFBNDMKLToxMDcwNTAwMENBQUQ3RDc3REIwMUIxQUEwN0ZGMEM5QTY1OUQ2Njg4RjIKLToxMDcwNjAwMDI2OEMyOUE0ODgwOENDMEM5ODI2MEMwQzQ4MkMyNTI1QTUKLToxMDcwNzAwMDlGNjcyQTIwMENDMEMwMUJENjUxMENBOTExQUU5OUFCM0EKLToxMDcwODAwMEFCMjg5Mjg1MkNCNENGOEIxM0FCODgyODk2ODU2M0ZERjMKLToxMDcwOTAwMENEMDBDMDkxQzBGMEMwQjJDMEM0ODg2MDIzMjAzQzk4MkQKLToxMDcwQTAwMDEyMEMzQzAxMEIzQTAxMDg4ODE0MEI4ODAxMEE5RjM4MjYKLToxMDcwQjAwMDA3RkYxMDA4OTgzOUMwQTAwQzlBMzgwNzg4MTAwOEFBNTIKLToxMDcwQzAwMDEwMEFGRjAyQzBBODBBMzMwMTAzOTMzOTJBMjEwNDI5QjgKLToxMDcwRDAwMDIxMjUwNTNDMTAwOENDMDIwQTMzMTEwOEFBMTEwOTI5MDAKLToxMDcwRTAwMDE0MDNBQTAyMDQ5OTExMEJBQTAyMkIyMTFGODMxNDBCNkIKLToxMDcwRjAwMDJCMTQwQjk5MDIwQzk5MDI4QjIwMUNENjNDMDhCQjExNTcKLToxMDcxMDAwMDAzQkIwMjBDQkIwMjgzMkE4QzJCNjQ3MDg0ODg2ODk3QjMKLToxMDcxMTAwMEREOThEQzg3Njk4ODZBOTdERTk4REY4ODEyQzA3MDc3MEYKLToxMDcxMjAwMDg3MDFDMDcxOUJEMTk5RDYwQjc4MTA5QUQ3MTdENkE5MzEKLToxMDcxMzAwMDA4RjgwMjA4QzgwMjA3ODgwMjE3RDZBNTk4RDAwNzM3QjIKLToxMDcxNDAwMDAyOTdENDI4MjAwQzI5NUNGRTJCMjEyNEMwRjAxQUQ2RUIKLToxMDcxNTAwMDFCMEM4RDExQUVERDJDRDI4NUFBODgyRjg0Q0Y4RjEzMDYKLToxMDcxNjAwMEIwQkJBRkNDMkNENjg1MkEyMjE1MkIyNTI0QjFBQTJBNTgKLToxMDcxNzAwMDI2MTU2NDkwRENDODRGOEMyNjhCMjlBNENDOUMyNjBDNDkKLToxMDcxODAwMEJCMEMwQjBCNDgyQjI1MjU2NTUwRThDMDIwRDEwRjAwMDgKLToxMDcxOTAwMDAwMDBDMDcwOUJEMTk5RDY5QUQ3ODgxMjkzRDQ3Nzg3NzQKLToxMDcxQTAwMDBFMThENjAwOTIxQTI4ODAyMkMwMjEwODI3Mzg4MjFBODkKLToxMDcxQjAwMDE4RDY4QTBCNzMxMDAzRjMwMjAzQzMwMjA4MzMwMjkzMzkKLToxMDcxQzAwMEQwNjNGRjdFMDBDQzU3REEyMERCNjA4QzEwNUJGREM0RkYKLToxMDcxRDAwMDI5MjEwMjY4OTgwNjY4OTQwM0MwMjBEMTBGMkIyMjFFMzMKLToxMDcxRTAwMEMwOTAyODIyMUQyOTI1MDI3Qjg5MDFDMEIwNjRCRkU4MTgKLToxMDcxRjAwMDEzRDVFQTJDQjAwNzI4QjAwMERBMjAwMzg4MEEyODgyQzkKLToxMDcyMDAwMDRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZGQ0EwMDAwNzQKLToxMDcyMTAwMDY4QTc3NURBMjBEQjMwREM0MERENTA1QkZFQ0FEMkEwMDcKLToxMDcyMjAwMEQxMEZDMUZEQzE5RDI5MjUyQzYwMDAwMzAwMkYyNTJDMDUKLToxMDcyMzAwMDJGMjQ2NzI3MjQ2OERBMjBEQjMwOEMxMERENTAyRTBBREIKLToxMDcyNDAwMDgwNUJGRDMyRDJBMEQxMEZDMUY4QzFBODJBMjUyQzYzRTIKLToxMDcyNTAwMEZGRERDODRGOEMyNjhCMjlBNENDOUMyNjBDQkIwQzBCQzUKLToxMDcyNjAwMDBCNDgyQjI1MjUyQTJDNzREQjYwMkMxMjAwNUJGRDc2NDUKLToxMDcyNzAwMEQyQTBEMTBGMkEyQzc0OEIxMDVCRjZCQkQyQTBEMTBGRjkKLToxMDcyODAwMERBMjA1QkZFMkE2M0ZGM0MwMERBMjBDMEIxNUJGRTZFQjEKLToxMDcyOTAwMDY1QUYzMTYzRkI3OURBMjAyQjIwMEM1QkZFM0Q2M0ZGODkKLToxMDcyQTAwMDIzMDAwMDAwMTJENjRFODIyMDAyODI1N0M4MjE2M0ZGQkQKLToxMDcyQjAwMEZDMTJENjRBMDNFODMwMDRFRTMwMDVCMTMwOTMyMDk0MzYKLToxMDcyQzAwMDIxOTUyMjYzRkZGQzAwMDAxMEQ2NDY5MTAwOTIwMTkzQTUKLToxMDcyRDAwMDAyOTQwMzExRDYxRDgyMTAwMUVBMzBBMjExMDFGMDMxOEYKLToxMDcyRTAwMEMwNDAwNEU0MTYwMDAyMDAxMUQ2M0Y4MjEwMjM0QTAwNzkKLToxMDcyRjAwMDAzMjIwMjkyMTAxMUQ2MDlDMDIxOTIxMDA0RTQzMTg0QjUKLToxMDczMDAwMDAzODMwMjgyMDE4MTAwMDBEMjMwMDEyMzAwMDAwMDAwQ0IKLToxMDczMTAwMDEwRDYzNjkxMDA5MjAxOTMwMjk0MDMxMUQ2MEM4MjEwN0MKLToxMDczMjAwMDAxRUEzMEEyMTEwMUYxMzFDMDQwMDRFNDE2MDAwMjAwNkMKLToxMDczMzAwMDExRDYyRDgyMTAxM0Q1QjQwMzIyMDI5MjEwMDRFNDMxMjkKLToxMDczNDAwMDg0MDM4MzAyODIwMTgxMDAwMEQzMzAwMTMzMDAwMDAwRjYKLToxMDczNTAwMDEwRDYyNzkxMDA4MTAxNjUxMDQ5ODEwMjY1MTA0NDgxOTIKLToxMDczNjAwMDAzQ0YxRjkyMDE5MzAyOTQwMzExRDVGQTgyMTAwMUVBMTAKLToxMDczNzAwMDMwQTIxMTAxRjIzMUMwNDAwNEU0MTYwMDAyMDAxMUQ2MUYKLToxMDczODAwMDE5ODIxMDEzRDU5QjAzMjIwMjkyMTAwNEU0MzE4NDAzNjYKLToxMDczOTAwMDgzMDI4MjAxQzAxMDkxMDM5MTAyOTEwMTgxMDAwMEQ0MDcKLToxMDczQTAwMDMwMDE0MzAwMTJENUNBQzAzMDI4Mzc0MDI4Mzc0NDI4NUUKLToxMDczQjAwMDM3NDgyODM3NEMyMzNEMDE3MjMzRUQwMzAyMDA2M0ZGNDkKLToxMDczQzAwMEZDMDAwMDAwMTBENjBCOTEwMDkyMDE5MzAyOTQwMzExNkYKLToxMDczRDAwMEQ2MDk4MjEwOTIxMDExRDVCQzgzMTAwMzIyMDI5MjEwOUMKLToxMDczRTAwMDExRDYwNjEyRDVDRDkyMTBDMDQwMDRFNDE2MDAwMjAwNUEKLToxMDczRjAwMDExRDVGRDgyMTAxM0Q1QjUwMzIyMDI5MjEwMDRFNDMxOTkKLToxMDc0MDAwMDg0MDM4MzAyODIwMTgxMDAwMEQ1MzAwMTUzMDAwMDAwMTMKLToxMDc0MTAwMDZDMTAwMjZFMzIyRkQ2MjAwNTZGMDQwNDNGMDQ3NDVCOUIKLToxMDc0MjAwMDJBMDU0NDBDMDA0MTA0MDAzMzFBMjIwQTAwNkQ0OTBENUMKLToxMDc0MzAwMDczNjMwNDAzNjYwQ0IxMjIwRjIyMTEwMzEzMTQ3MzYzRTgKLToxMDc0NDAwMDAyMjIyQzAxRDEwRkM4M0JEMTBGMDAwMDczNjMwQ0MwODYKLToxMDc0NTAwMDIxRDEwRjAwMDAwMDAwMDA0NDQ5NTYzMEMwMjBEMTBGNTgKLToxMDc0NjAwMDZDMTAwMjAwNDAwNDZCNEMwNzAzMjMxODAyMDIxOUQxNzAKLToxMDc0NzAwMDBGMDIwMzE5QzAyMEQxMEY2QzEwMDIwMkVBMzBEMTBGQTUKLToxMDc0ODAwMDZDMTAwMkNDMjUwM0YwMzE2MDAwMEYwMDZGMjIwNTAzNjEKLToxMDc0OTAwMEYxMzE2MDAwMDU2RjIzMDUwM0YyMzEwMDAyMDBEMTBGQzYKLToxMDc0QTAwMDZDMTAwMkNDMjUwMkYwMzBEMTBGMDAwMDZGMjIwNDAyRDQKLToxMDc0QjAwMEYxMzBEMTBGNkYyMzA0MDJGMjMwRDEwRkMwMjBEMTBGNzEKLToxMDc0QzAwMDZDMTAwMjIyMEEyMDIzMEEwMDZEMjgwRTI4Mzc0MDI4NUIKLToxMDc0RDAwMDM3NDQyODM3NDgyODM3NEMyMzNEMDEwMzAyMDBEMTBGOTkKLToxMDc0RTAwMDZDMTAwMjAyRTQzMUQxMEYwQTAwNDM2ODY1NkM3MzY5QzUKLToxMDc0RjAwMDZGMjA0NjU3MjA0NDQ1NDI1NTQ3M0QzMDIwMjg0Mjc1NkQKLToxMDc1MDAwMDY5NkM3NDIwNTQ3NTY1MjA0MTc1NjcyMDMxMzIyMDMwRDQKLToxMDc1MTAwMDM5M0EzNDMzM0EzMDM0MjA1MDQ0NTQyMDMyMzAzMDM4MDEKLToxMDc1MjAwMDIwNkY2RTIwNjY2NTZDNjk3ODJFNjE3MzY5NjM2NDY1OEYKLToxMDc1MzAwMDczNjk2NzZFNjU3MjczMkU2MzZGNkQzQTJGNjg2RjZEMzYKLToxMDc1NDAwMDY1MkY2NjY1NkM2OTc4MkY3NzJGNjY3NzVGMzYyRTMwRUEKLToxMDc1NTAwMDI5MkMyMDU2NjU3MjczNjk2RjZFMjA1NDMzNzg3ODIwMTkKLToxMDc1NjAwMDMwMzAzNzJFMzAzMDJFMzAzMDIwMkQyMDMxMzAzMDM3MzMKLTowQzc1NzAwMDMwMzAzMDMwMTAwNzAwMDBDQzQ0QTBENkIyCi06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xLjAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0MmY3NQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xLjAuYmluLmloZXgKQEAgLTAsMCArMSwxODg1IEBACis6MTAwMDAwMDA2MDAwNzQwMDIwMDM4MDAwMjAwMzcwMDAwMDAwMTAwMEQ2Cis6MTAwMDEwMDAwMDAwMjAwMEUxMDAwMjg0MDAwNzAwMDBFMTAwMDI4OEU3Cis6MTAwMDIwMDAwMDAxMDAwMEUwMDAwMDAwRTAwMDAwQTAwMTAwMDAwMDZFCis6MTAwMDMwMDA0NDQ0NDQ0MEUzMDAwMTgzMjAwMjAwMDAyMDAxRTAwMDJBCis6MTAwMDQwMDAyMDAxRkYxMDFGRkZEMDAwMUZGRkMwMDBFMzAwMDQzQzkxCis6MTAwMDUwMDAwMjAwMDAwMDIwMDA2OTg4MUZGRkMyOTAyMDAwNjlEMEM0Cis6MTAwMDYwMDAxRkZGQzI5NDIwMDA2QTEwMUZGRkMyOTgyMDAwNkE4NEZDCis6MTAwMDcwMDAxRkZGQzI5QzIwMDAwM0MwQzAwMDAwRTQzMTAwRUEzMTMxCis6MTAwMDgwMDAwMEExMzEwMEEwMzEwMzAyMDAwMkVEMzA2RTJBMDUwMDBDCis6MTAwMDkwMDBFRDMxMDAwMjAwMDIxNjAwMTJGRkRCQzAzMDE0RkZEQTVGCis6MTAwMEEwMDBEMzBGRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzQ3Cis6MTAwMEIwMDAwRkQzMEZEMzBGMTJGRkQ1MjMwQTAwMjQwQTAwRDMwRjRBCis6MTAwMEMwMDBEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzMEZEMzI3Cis6MTAwMEQwMDAwRkQzMEYxNEZGQ0UwMzQyMUYxNEZGQ0IwMzQyMUYxMjk2Cis6MTAwMEUwMDBGRkNDQzAzMDJEMzczMDJEMzczNDJEMzczODJEMzczQ0VECis6MTAwMEYwMDAyMzNEMDE3MjMzRUQwMDAyMDAxMkZGQzRDMDMwMkYzN0UwCis6MTAwMTAwMDAwMDJGMzcxMDJGMzcyMDJGMzczMDIzM0QwMTcyMzNFRDZBCis6MTAwMTEwMDAwMDAyMDAxMkZGQkVDMDMwMjczNzAwMjczNzEwMjczN0Y0Cis6MTAwMTIwMDAyMDI3MzczMDIzM0QwMTcyMzNFRDAzMDIwMDEyRkZCOTVGCis6MTAwMTMwMDAxM0ZGQkEwQzAyMDA5MzIwMTJGRkI5MTNGRkI5MEMwMjhGCis6MTAwMTQwMDAwMDkzMjAxMkZGQjhDMDMxOTMyMDgyMjAxMkZGQjcxMzEyCis6MTAwMTUwMDBGRkI3OTMyMDEyRkZCNzE1RkZCMzE2RkZCNkMwMzBENzE1Cis6MTAwMTYwMDAyMDA1NjYwMTYwMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwMTcwMDAwNDM2MDUwMDAyMDBEMzBGRDMwRjA1MzMwQzZFM0IxNDc5Cis6MTAwMTgwMDAwNzQ3MTQwNzA0NDM3NjMxRTYwNDM2MDUwNTMzMEM2RjQwCis6MTAwMTkwMDAzQkVEMDAwMjAwMTJGRkE2MTVGRkEzMjMwQTAwRDcyMEEzCis6MTAwMUEwMDAwNzA0NDMwNDNFMDUwNTMzMEMwNzQ3MTQ2RjNCRjAwMzc3Cis6MTAwMUIwMDAwMjAwMTJGRkExQzAzMDE0RkZBMUQzMEZEMzBGRDMwRjQxCis6MTAwMUMwMDA5MzQwQjQ0NDcyNDlGMkQzMEZEMzBGRDMwRjE0RkY5QjYzCis6MTAwMUQwMDA4MzQwMTRGRjlCODM0MDEyRkY5QjIzMEEwMDE0RkY5QTY1Cis6MTAwMUUwMDBEMzBGRDMwRkQzMEY5MzQwQjQ0NDcyNDlGMkQzMEZEMzNDCis6MTAwMUYwMDAwRkQzMEYxNEZGOTU4MzQwMTJGRjk1QzkyRjgzMjA4NERFCis6MTAwMjAwMDAyMTg1MjJCQzIyNzQzQjBGODY1MEI0NTU5NjMwQjQzM0ZFCis6MTAwMjEwMDA3NDMzRjQ2M0ZGRTYwMDAwNjUzRkUxNjU1RkRFMTJGRkMzCis6MTAwMjIwMDA3QzIzMEEwMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzkxCis6MTAwMjMwMDAyMzNEMDE3MjMzRUQwMzAyMDAwMDAyMDAxMkZGN0FDMDc5Cis6MTAwMjQwMDAzMjAzMkUwNTAzMDIwMDEyRkY3ODEzRkY4MTkzMjBDMEIyCis6MTAwMjUwMDAxMTAxNDkzMTAwNDgzMTAxMDIwMEMwMDAxNEZGN0UwNDQxCis6MTAwMjYwMDBEMjMxMTVGRjdEOTQ1MDE0RkY3RDA0RDMzMTE1RkY3Q0VFCis6MTAwMjcwMDA5NDUwMTRGRjdDMDRENDMxMTVGRjdDMjQ1NjAwMTRGRkU1Cis6MTAwMjgwMDA3QjA0RDUzMTE1RkY3QjI0NTYwMDEwRkY3QTAzMDAwMDU0Cis6MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAwMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAwMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAwMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAwM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAwM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAwM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTAwNDIwMDA2M0ZGRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMEExCis6MTAwNDQwMDAxRkZDMDAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEFCCis6MTAwNDUwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBFMzAwMDVDODA2Cis6MTAwNDYwMDAxRkZGQzAwMDFGRkZDMDAwRTMwMDA1QzgxRkZGQzAwMDQyCis6MTAwNDcwMDAxRkZGQzAxOEUzMDAwNUM4MUZGRkMwMTgxRkZGQzAxOEVBCis6MTAwNDgwMDBFMzAwMDVFMDFGRkZDMDE4MUZGRkMyOENFMzAwMDVFMDdBCis6MTAwNDkwMDAxRkZGQzI4QzFGRkZDMjhDRTMwMDA4NTQxRkZGQzI5MEQ1Cis6MTAwNEEwMDAxRkZGQzU4Q0UzMDAwODU0MjAwMDAwMDAyMDAwMDE2QUYzCis6MTAwNEIwMDBFMzAwMEI1MDIwMDAwMTgwMjAwMDAxODBFMzAwMENCQzExCis6MTAwNEMwMDAyMDAwMDIwMDIwMDAwMjAzRTMwMDBDQkMyMDAwMDIxQ0ZDCis6MTAwNEQwMDAyMDAwMDIyMEUzMDAwQ0MwMjAwMDAyMjAyMDAwMDIyNkExCis6MTAwNEUwMDBFMzAwMENDNDIwMDAwMjNDMjAwMDAyNDBFMzAwMENDQ0RFCis6MTAwNEYwMDAyMDAwMDI0MDIwMDAwMjQ5RTMwMDBDRDAyMDAwMDI0QzAyCis6MTAwNTAwMDAyMDAwMDI1MEUzMDAwQ0RDMjAwMDAyNTAyMDAwMDI1OUMxCis6MTAwNTEwMDBFMzAwMENFMDIwMDAwMjVDMjAwMDAyNjBFMzAwMENFQzMxCis6MTAwNTIwMDAyMDAwMDI2MDIwMDAwMjY5RTMwMDBDRjAyMDAwMDI2QzUxCis6MTAwNTMwMDAyMDAwMDI3MEUzMDAwQ0ZDMjAwMDAyNzAyMDAwMDI3OTExCis6MTAwNTQwMDBFMzAwMEQwMDIwMDAwMjhDMjAwMDAyOENFMzAwMEQwQzYzCis6MTAwNTUwMDAyMDAwMDI5MDIwMDAwMjkzRTMwMDBEMEMyMDAwMDJBQzZBCis6MTAwNTYwMDAyMDAwMDJCMEUzMDAwRDEwMjAwMDAyRDAyMDAwMDJGMkIzCis6MTAwNTcwMDBFMzAwMEQxNDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQzOEE5Cis6MTAwNTgwMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMzgyMDAwMDNCMENBCis6MTAwNTkwMDAyMDAwMDNCMEUzMDAwRDM4MjAwMDAzQjAyMDAwMDNCMEJBCis6MTAwNUEwMDBFMzAwMEQzODIwMDAwM0IwMjAwMDZCQThFMzAwMEQzOEY1Cis6MTAwNUIwMDAyMDAwNkJBODIwMDA2QkE4RTMwMDc1MzAwMDAwMDAwMDRECis6MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDAxRkZDMDAwMEY1Cis6MTAwNUQwMDAxRkZGQzU5MDFGRkZDNjcwMjAwMDZCQTgyMDAwNkJBOEVFCis6MTAwNUUwMDBERUZGRkUwMDAwMDAwODBDREVBREJFRUYxRkZGQzJBMDY0Cis6MTAwNUYwMDAxRkZDRkUwMDFGRkZDMDk0MUZGRkM1QzAzMDAwMDAwMDlECis6MTAwNjAwMDAwMDNGRkZGRjgwNDAwMDAwMTAwMDAwMDAwODBGRkZGRkM4Cis6MTAwNjEwMDAxRkZGQzI2RDAwMEZGRkZGODA0RkZGRkY4MDAwMDAwMDMzCis6MTAwNjIwMDAwMDAwMDg4MEIwMDAwMDA1NjA1MDAwMDA2MDAwMDAwMDdECis6MTAwNjMwMDA0MDAwMDAxMTM1MDAwMDAwNDEwMDAwMDAxMDAwMDAwMUUyCis6MTAwNjQwMDAyMDAwMDAwMDAwMDAxMDAwN0ZGRkZGRkY0MDAwMDAwMEJFCis6MTAwNjUwMDAwNTAwMDAwMDgwMDAwMDE5MDQwMDAwMDAwMDAwMDgwMEYwCis6MTAwNjYwMDAxMDAwMDAwNTgwNjAwMDAwNzAwMDAwMDAyMDAwMDAwOUZDCis6MTAwNjcwMDAwMDFGRjgwMDgwMDAwMDFFQTAwMDAwMDBGODAwMDAwMDJECis6MTAwNjgwMDAwN0ZGRkZGRjA4MDAwMDAwMTgwMDAwMDAwMTAwODAwMUM0Cis6MTAwNjkwMDA0MjAwMDAwMDFGRkZDMjFEMUZGRkMwREMwMDAxMDA4MEUwCis6MTAwNkEwMDA2MDQwMDAwMDFBMDAwMDAwMEMwMDAwMDAwMDAwMzAwMDU0Cis6MTAwNkIwMDA2MDAwMDgwMDgwMDAwMDFDMDAwMTAwMDA4MDAwMDAxQTlCCis6MTAwNkMwMDA4MDAwMDAxOEZDMDAwMDAwODAwMDAwMDEwMDAwNDAwMEQ1Cis6MTAwNkQwMDAwMzAwMDAwMDgwMDAwNDAwNTAwMDAwMDNGRkZGQkZGRjg0Cis6MTAwNkUwMDAxRkZGQzNENDAwMDAwRkZGRkZGRkYwMDAwMDAwMTZEMDczCis6MTAwNkYwMDAwMDAwRkZGN0E1MDAwMDAwMUZGRkM0QjAxRkZGQzQ2MThBCis6MTAwNzAwMDAwMDAxMDAwODAwMDAwQjIwMjAyRkZGODAxRkZGQzQ1NUIwCis6MTAwNzEwMDAwMDAwMkMwMEZGRkVGRkY4MDBGRkZGRkYxRkZGQzU3ODYxCis6MTAwNzIwMDAwMDAwMjAwMEZGRkZERkZGMDAwMEZGRUYwMTAwMTEwMENECis6MTAwNzMwMDAxRkZGQzNEMjFGRkZDNTkwRkZGRkVGRkYwMDAwRkZGQkFECis6MTAwNzQwMDAxRkZGQzYzMDFGRkZCRUEwRkZGRkY3RkYxRkZGQzA2NEUzCis6MTAwNzUwMDAwMDAwRkZGRDFGRkZDNjIwMDAwMUZCRDAxRkZGQzVCMDNBCis6MTAwNzYwMDAxRkZGQzY2MDFGRkZDNTkxRTBGRkZFMDAxRkZGQzVBMDcxCis6MTAwNzcwMDAwMDAwODAwMDFGRkZDNTNDMUZGRkM1QjQxRkZGQzA2OEZECis6MTAwNzgwMDAxRkZGQzREMDFGRkNGRkQ4MDAwMTAwODFFMTAwMDYwMDVDCis6MTAwNzkwMDAwMDAwMjcxMDFGRkNGRTMwMUZGQ0ZFNzBFMTAwMDIwMDZECis6MTAwN0EwMDAxRkZGQzUzODFGRkZDNTUwMDAwM0QwOTAxRkZGQzU2NDUxCis6MTAwN0IwMDAyQjUwNjM4MDJCNTA3OTgwMkI1MDkwODAyQjUwQTY4MDNCCis6MTAwN0MwMDAxRkZGQzQ2OTAxMDAxMTBGMjAyRkZFMDAyMDMwMDA4MEEwCis6MTAwN0QwMDAyMDJGRkYwMDAwMDBGRkZGMDAwMUZGRjgyQjUwQjIwMEE4Cis6MTAwN0UwMDAyQjUwQjIwODAwMDEwMDEwMkI1MEIxODAyQjUwQjI4MDZBCis6MTAwN0YwMDAyQjUwQkEwMDAwMDEwMDExMkI1MEJEMjgyQjUwQkM4MDlCCis6MTAwODAwMDAyQjUwQkRBMDIwMzAwMDAwREZGRkZFMDA1MDAwMDAwMjkyCis6MTAwODEwMDAwMEMwMDAwMDAyMDAwMDAwRkZGRkY3RjQxRkZGQzA2Q0UzCis6MTAwODIwMDAwMDBGRjgwMDA0NDAwMDAwMDAxMDAwMDAwQzQwMDAwMDIxCis6MTAwODMwMDAxQzQwMDAwMEUwMDAwMEEwMUZGRkM1NDAxRkZEMDAwODk1Cis6MTAwODQwMDAxRkZGQzU1NDFGRkZDNTY4MUZGRkM1N0NFMTAwMDY5MDUwCis6MTAwODUwMDBFMTAwMDZFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAwODYwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAwODcwMDAwMDAwMDAwMDIwMTAwMDQwMjAxMDAwNDAyMDEwMDA0MDI4Cis6MTAwODgwMDAyMDE0MDA4MDIwMEMwMDAwMjAwQzAwMDAyMDBDMDAwMDMwCis6MTAwODkwMDAyMDEwMDA0MDIwMTQwMDgwMjAxNDAwODAyMDE0MDA4MENDCis6MTAwOEEwMDAyMDE4MDBDMDIwMUMwMTAwMjAxQzAxMDAyMDFDMDEwMDk5Cis6MTAwOEIwMDAyMDIwMDE0MDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMENGCis6MTAwOEMwMDAyMDFDMDEwMDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMDAzCis6MTAwOEQwMDAyMDFDMDEwMDIwMjAwMTQwMjAyMDAxNDAyMDIwMDE0MDU4Cis6MTAwOEUwMDAyMDIwMDk0MDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MEU0Cis6MTAwOEYwMDAyMDI0MDk4MEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM3Cis6MTAwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTAwOTEwMDAwMDAwMDAwMDIwMDA1MkZDMjAwMDUxQ0MyMDAwNTJGQ0JFCis6MTAwOTIwMDAyMDAwNTJGQzIwMDA1MTA4MjAwMDUxMDgyMDAwNTEwOEVFCis6MTAwOTMwMDAyMDAwNEY0ODIwMDA0RjQ4MjAwMDRGNDAyMDAwNEVBQzgwCis6MTAwOTQwMDAyMDAwNEQ1NDIwMDA0QjM0MjAwMDQ5MDgwMDAwMDAwMEQ2Cis6MTAwOTUwMDAwMDAwMDAwMDIwMDA1MkNDMjAwMDUxOTgyMDAwNTIzQ0EyCis6MTAwOTYwMDAyMDAwNTIzQzIwMDA0RkYwMjAwMDRGRjAyMDAwNEZGMEJDCis6MTAwOTcwMDAyMDAwNEZGMDIwMDA0RkYwMjAwMDRGMzgyMDAwNEZGMEIzCis6MTAwOTgwMDAyMDAwNEM3NDIwMDA0QUU0MjAwMDQ4QjQwMDAwMDAwMDFECis6MTAwOTkwMDAwMDAwMDAwMDIwMDAwQkUwMjAwMDM4QkMyMDAwMDRDMDU0Cis6MTAwOUEwMDAyMDAwNDRBODIwMDAwQkQ4MjAwMDNGQjQyMDAwMDNGMDEyCis6MTAwOUIwMDAyMDAwNDQ2ODIwMDA0ODkwMjAwMDNDQzQyMDAwM0JFMDE4Cis6MTAwOUMwMDAyMDAwMzgzODIwMDAzNkM0MjAwMDM0MzQyMDAwMkY5NDEyCis6MTAwOUQwMDAyMDAwM0EzQzIwMDAyQkY0MjAwMDI4MjgyMDAwNjUzNDE5Cis6MTAwOUUwMDAyMDAwMjNCNDIwMDAyMDk0MjAwMDIwNDAyMDAwMUQyQzUzCis6MTAwOUYwMDAyMDAwMTg0MDIwMDAxNTcwMjAwMDBERUMyMDAwMEMyNDcxCis6MTAwQTAwMDAyMDAwMTEzNDIwMDAxMzIwMjAwMDQxQUMyMDAwM0M3ODRECis6MTAwQTEwMDAyMDAwMEJFODIwMDAwNEMwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTAwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMzI2NDAwMDAwMDAwMDAwMEMwCis6MTAwQUEwMDAzMjY0MDAwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDU4Cis6MTAwQUIwMDA2NDAwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMEU2Cis6MTAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAwQjEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MzIzODAwMDAwMDAwMERGCis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAwQjUwMDAwMDVDOTQwMTVEOTQwMjVFOTQwMzVGOTQwMDQzMDAwMDg2Cis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAwQjkwMDAwMDVDOTAwMTVEOTAwMjVFOTAwMzVGOTAwMDUzMDAwMDQ2Cis6MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAwQkQwMDAwMDlDOTQwMDFEOTAwMTlEOTQwMjlFOTQwMzlGOTQwNDk4Cis6MTAwQkUwMDAwODk0MDUwOTk0MDYwQTk0MDcwQjk0MDA0MzAwMDAwMDNBCis6MTAwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAwQzEwMDAwMDlDOTAwMTlEOTAwMjlFOTAwNzFEOTAwMzlGOTAwNDYwCis6MTAwQzIwMDA3ODkwMDU3OTkwMDY3QTkwMDc3QjkwMDA1MzAwMDAwMDM5Cis6MTAwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTAwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTAwQzUwMDAwMERDOTQwMDFEOTAwMUREOTQwMkRFOTQwM0RGOTQwNDE3Cis6MTAwQzYwMDAwNDk0MDUwNTk0MDYwNjk0MDcwNzk0MDgwODk0MDkwOTU2Cis6MTAwQzcwMDA5NDBBMEE5NDBCMEI5NDAwNDMwMDAwMDAwMDAwMDAwMDRCCis6MTAwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAwQzkwMDAwMERDOTAwMUREOTAwMkRFOTAwQjFEOTAwM0RGOTAwNERDCis6MTAwQ0EwMDBCNDkwMDVCNTkwMDZCNjkwMDdCNzkwMDhCODkwMDlCOTBBCis6MTAwQ0IwMDA5MDBBQkE5MDBCQkI5MDAwNTMwMDAwMDA2M0ZGRkMwMDQ5Cis6MTAwQ0MwMDAyMDAwNjk2NDEwRkZGRjBBMDAwMDAwMDAyMDAwNjk4ODBFCis6MTAwQ0QwMDAwMEQyMzExMEZGRkUwQTAwMDAwMDAwMDAyMDAwNjlEMEExCis6MTAwQ0UwMDAwMEQzMzExMEZGRkUwQTAwMDAwMDAwMDAyMDAwNkExMDRGCis6MTAwQ0YwMDAwMEQ0MzExMEZGRkUwQTAwMDAwMDAwMDAyMDAwNkE4NENBCis6MTAwRDAwMDAwMEQ1MzExMEZGRkUwQTAwMDAwMDAwMDA2M0ZGRkMwMDY4Cis6MTAwRDEwMDBFMDAwMDBBMDEyRkZGNzgyMjAwMjgyNTdDODIxNjNGRjgzCis6MTAwRDIwMDBGQzEyRkZGMzAzRTgzMDA0RUUzMDA1QzAzMDkzMjA5NDRBCis6MTAwRDMwMDAyMTk1MjI2M0ZGRkMwMDAwMUZGRkQwMDAwMDA0MDAyMDZCCis6MTAwRDQwMDAxRkZGQzU5MDFGRkZDNjcwMjAwQTAwMTFGRkZCMTNGRjk1Cis6MTAwRDUwMDBGQjAzRTYzMTAxMDIwMDE2RkZGQTE3RkZGQUQzMEY3NzAzCis6MTAwRDYwMDA2QjA2OTA2MEI0NjY3NzYzRjg1NDE1NTA1NDE5RTYwRjFCCis6MTAwRDcwMDAxNDAwNjNGRkY5MDAwMDAwNkMxMDA0QzAyMEQxMEYwMEM0Cis6MTAwRDgwMDA2QzEwMDRDMEM3MUFFRjA2RDgzMEJDMkJENzIwODU3MjcwCis6MTAwRDkwMDAwRDQyMTE4MzcxMDU0NTBCOTU3MjAyMzMwQzIzNzYwMUM4Cis6MTAwREEwMDA3QjNCMDQyMzNEMDg5MzcxQTMyRDEyRUVGRTE5RUVGRTRBCis6MTAwREIwMDBBMjc2N0Q2MzJDMkUwQTAwMDg4MjAyMjgwQTAxMDM4RTg3Cis6MTAwREMwMDAzODBFMEU0MkM4RUUyOUE2N0U2RDRBMDUwMDIwODgwMDI2Cis6MTAwREQwMDAzMDhDODI3MUQxMEZDMEYwMDI4RjM4N0ZDMEVBNjNGRjgwCis6MTAwREUwMDBFNDAwQzBGMUMwNTAwMzdFMENBMkVFMEUzRDEyMDg4MjVBCis6MTAwREYwMDAwMjAzRjUzODA1MDU0MkNCNTcyOUE2N0UyRkRDMTAwRkRDCis6MTAwRTAwMDA0RjM2NkRGQTA1MDAyMDg4MDAzMDhDQkM3NUMwMzAwODY0Cis6MTAwRTEwMDBFMjA4MjgwQTAxMDU4MzM4MDMwMzQyQzkzRTI5QTY3RTU5Cis6MTAwRTIwMDAwRDQ4MENEMzBGNkQ4QTA1MDAyMDg4MDBCMDhDODI3MUFDCis6MTAwRTMwMDBEMTBGQzA1MDA4RjUzODc1QzBDMTYzRkZCQkMwNjAwMjU4Cis6MTAwRTQwMDA4NjM4NzZDMERBNjNGRkQ0NkMxMDEyMTZFRUQ4QzFGODdCCis6MTAwRTUwMDBDMUU3MkIyMjFFMkMyMjFEQzBEMDdCQzEyRjI5MjAwNkNBCis6MTAwRTYwMDBEN0IwMjk5Q0ZBQ0M1NzI4MjA3MDI4OENGRjI4MjQ3MEYyCis6MTAwRTcwMDA2NDkxNUMyQUIwMDAwRUE4MEM2NDgxNjcwRkE5MEM2NDExCis6MTAwRTgwMDA5MkIzQzFFOTdFQTEzOTY5QUMyRjYwMDAzNjI5MjAwNkYyCis6MTAwRTkwMDBEN0QwMjk5Q0ZBQ0M1NzI4MjA3MDI4OENGRjI4MjQ3MEEyCis6MTAwRUEwMDA2NDkxMzUyQUQwMDAwRUE4MEM2NDgxNjQwRkE5MEM2NEVCCis6MTAwRUIwMDA5MzFCQzFFOTdFQTEwOTY4QUMwOUMwMjBEMTBGMDAwMEQ1Cis6MTAwRUMwMDAwMDJEMjUwMjhBMzJDMDkwMEE2RjUwNjVGNUFEMjkyNEE1Cis6MTAwRUQwMDA2NzA5MDg0NzY1ODVBOTJGMjAwQzE4RUVCNTBDRkUxMThGCis6MTAwRUUwMDBBOEVFMjhFMjg2QjQ0OTc4OTMwMjYwMDU3QTE5RUVCMTNCCis6MTAwRUYwMDAwOUY5MEEyOTkyQTM2ODkwMDc4ODIwMDk4ODBDNjU4NTVBCis6MTAwRjAwMDA2NjI3RTI4NTY0NzU2MDY1NTU4RTdCQzEwNEQ5QjA2MDQzCis6MTAwRjEwMDAwMDAxQzA5MDhCOTQxQ0VFQTgwQjg4MTQ4Q0M0MEIwQkEyCis6MTAwRjIwMDA0N0E4Q0MxOEVFQTYwOUJCMTAwOENDMDI5QzcwMThFRTlFCis6MTAwRjMwMDBBNDFDRUVBNTA4QTgwMTBCODgwMjBDNEMwMjFCRUVBMTE0Cis6MTAwRjQwMDA5QzcxMEI4ODAyOTg3MjJDOTAyMzJCOTAyMjA0QzgxMDVECis6MTAwRjUwMDAwNkJCMTAwQzRDMTIwOEJCMDIyODkwMjEwN0NDMTAwQ0M5Cis6MTAwRjYwMDA4ODEwMEM4ODAyMEI4ODAyMUNFRTk5OEIzMzBDQkIwMTk1Cis6MTAwRjcwMDA4QzM0MEI4ODAyOTg3MzlDOTk5Qzc0OEI5NThDMzk5QjRDCis6MTAwRjgwMDA3NTg4OTY4QjM4OTg3Njg4OTc5Qzc5OUI3ODk4NzcxQzhCCis6MTAwRjkwMDBFRTkwMjhFMjg1MENGQzA4MkRDNENGMDg0ODBCMjhFNjBCCis6MTAwRkEwMDA4NTY1NTUwQjJCMjIxRTJEMjIxRDdCRDkwMjJCMEEwMDk1Cis6MTAwRkIwMDA2NEJGMDYyQ0IwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjExCis6MTAwRkMwMDA0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRUVCMDAwMEY3Cis6MTAwRkQwMDAyOTIwNzA2NTlFOUM2MDA0RTQyQTIwNzA2NUFFQzM2MDgxCis6MTAwRkUwMDAwNERCMDAwMDJFQjAwMzJDMjA2N0Q0RTA2NUMxMDU4QTI1Cis6MTAwRkYwMDAzMjhDMzMwQUZGNTAwQzQ1NTRCQzU1NjRGNEU2MTlFRUFDCis6MTAxMDAwMDA3NTg4MkEwOUE5MDEwOTg4MEM2NDgyMUJDMDkyNjAwMEI2Cis6MTAxMDEwMDBERDJFRDAwMzJBMjA2N0Q0RTA2NUEwRDg4QTMyOEIzMzM2Cis6MTAxMDIwMDAwQUZDNTAwQjQ1NTRCQzU1NjRDNEI5MTlFRTZBODgyQUIxCis6MTAxMDMwMDAwOUE5MDE3OTg5RDUwQkVBNTA2NEE0REQwQ0VFMTFDMDMxCis6MTAxMDQwMDBGMDJGMTYxMzJFMTYxNjhBRTc4Q0U4MkExNjEyOEVFOTUwCis6MTAxMDUwMDBERkMwQUFFQTdFQUIwMUIxQ0YwQkE4NTA2NTgzNDI4OEZFCis6MTAxMDYwMDAzN0RCQzBBRTg5OTkxRTc4OUIwMjJCQ0MwMTJCMTYxQjU3Cis6MTAxMDcwMDAyOTEyMEUyQjBBMDAyOTE2MUE3RkMzMDc3RkM5MDI3RTg4Cis6MTAxMDgwMDBBQjAxQzBCMTY1QjQ5ODhCMzUyRjBBMDAyQTBBMDA3QUVCCis6MTAxMDkwMDBDMzA1NjRDM0M3MkYwQTAxNjVGNDg0MkIxMjE2MkIxNkVGCis6MTAxMEEwMDAxOTAwNTEwNEMwQzEwMENDMUEyQ0NDRkYyQzE2MTcwQzBGCis6MTAxMEIwMDBGQzEzMkMxNjE4MkIxMjFBMkExMjFCREM1MDU4MThGQTgzCis6MTAxMEMwMDBDMEQwQzA5MDJFNUNGNDJDMTIxNzI4MTIxODJGMTIxQkJGCis6MTAxMEQwMDAyQTEyMUEwOEZGMDEwQ0FBMDE4ODM0MDc0QzBBQUI4QkFDCis6MTAxMEUwMDAyODEyMTkyQkM2MTYyRjg2MDgyQTg2MDkyRTc0MTAyOTU1Cis6MTAxMEYwMDAyNDY3MkU3MDAzODk3NUIxRUEyQTc0MDNCMDk5MDk0OUVGCis6MTAxMTAwMDAwQzY1OURCNTJCMjA2NzJEMjUwMjY1QjNGNDJCMjIxRTlGCis6MTAxMTEwMDAyQzIyMUQ3QkM5MDFDMEIwNjRCRDlFMkNCMDA3MjhCMDM1Cis6MTAxMTIwMDAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMEEwCis6MTAxMTMwMDA2NUFGRTc2M0ZEODM4OUJBQjE5OTY1OTA5Nzg4MzQxQ0UwCis6MTAxMTQwMDBFRTI2OThCQThGMzMxRUVFMUYwRjRGNTQyRkI0MkM4REZFCis6MTAxMTUwMDAyQThBMzIwRUREMDIwQ0FDMDE3REM5NjYwQTQ5NTE2RjQ0Cis6MTAxMTYwMDA5MjYwOEEzMzc1QTY1QjJDQjAxMzBBRUQ1MTBEQ0QwMTQ4Cis6MTAxMTcwMDAwRDBENDEwQzBDNDE3REM5NDkyRUIwMTJCMEVFNjVFMzU2Cis6MTAxMTgwMDBDMkMwRDA4RTM3OENCODhBMzY4RkI5N0NBMzA3N0FDOTkzCis6MTAxMTkwMDAwMjdFRkIwMUMwRDFDRUQ5ODgzNTBBQUQwMjBFOEUwODgxCis6MTAxMUEwMDA3OEVCMDIyREFDMDE4OUI3REFDMEFGOUI3OUJCMDFCMUY2Cis6MTAxMUIwMDBDQURDQjBDMEIwN0RBMzA3N0FEOTAyN0NFQjAxQzBCMTE0Cis6MTAxMUMwMDA2NEIxNURDMDkxMjkyNDY3QzAyMEQxMEYwMDAwOEFEQTg0Cis6MTAxMUQwMDBCMUFBNjRBMEJDMkUyMDY3MkQyNTAyNjVFMzBCMUZFRDhDCis6MTAxMUUwMDBGOThBMzIxOEVERkUwRkFGMDEwOEZGMEM2NUYyODYwQThFCis6MTAxMUYwMDA0ODUxNkY4MjAyNjAwMjdEQzA5MDI5MjQ2NzA5MEE0NzI2Cis6MTAxMjAwMDA2NUEyRjI3QkM5MDFDMEIwNjRCQ0FFMkNCMDA3MjhCMEE3Cis6MTAxMjEwMDAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMEFGCis6MTAxMjIwMDA2NUFGRTc2M0ZDOTMwMDAwMENFOTUwNjQ5MkVCMENFRkIwCis6MTAxMjMwMDAxMUMwODAyODE2MTFBRkJGMkYxNjE5OEVGODhCRjdEQTYwCis6MTAxMjQwMDBFMDhGRjkyQjE2MTBBQkZCN0ZCQjAxQjFFQTBDQTg1MDY1Cis6MTAxMjUwMDA2NTgwRDY4ODM3RENFMEFGODk5OTFDNzg5QjAyMkNFQzNFCis6MTAxMjYwMDAwMTJDMTYxQjI5MTIwQzJDMEEwMDI5MTYxQTdBRTMwN0U2Cis6MTAxMjcwMDA3QUU5MDI3RkJCMDFDMEMxNjVDMkE0OEIzNTJDMEEwMDhDCis6MTAxMjgwMDAyQTBBMDA3QUUzMDU2NEUxQ0EyQzBBMDE2NENFMTE2MERGCis6MTAxMjkwMDAwMjhEODgzNDFCRUREMTk4REE4RjMzMUVFRENBMEY0RkMzCis6MTAxMkEwMDA1NDJGRDQyQzhDMkE4QTMyMEVDQzAyMEJBQjAxMENCQkVGCis6MTAxMkIwMDAwQzY1QkYwRTBBNDk1MTZFOTIwMjYzRkYwNThBMzMwQTFDCis6MTAxMkMwMDBBQjUwNjRCRUZEMkNEMDEzMEFFRTUxMEVDRTAxMEUwRUIzCis6MTAxMkQwMDA0MTBDMEM0MTBFQ0MwQzY1Q0VFODJGRDAxMkIwRkY2NTRFCis6MTAxMkUwMDBGMjZFQzBCMDhFMzc4Q0Q4OEEzNjJGRDIwOTdDQTMwNzE1Cis6MTAxMkYwMDA3QUM5MDI3RUZCMDFDMEIxNjVCRUM3ODgzNURCQTBBRUVFCis6MTAxMzAwMDA4RTc4RUIwMUIxQUI4OUQ3REFDMEFGOUQ3OURCMDFCMTQzCis6MTAxMzEwMDBDQUMwQzA3QkEzMDc3QUI5MDI3REVCMDFDMEMxNjVDRTBDCis6MTAxMzIwMDBBMUMwOTAyOTI0NjdDMDIwRDEwRjg4Mzc4QzM2OTgxNDJCCis6MTAxMzMwMDAwQ0U5MEMyOTE2MTQwOEY4MEM5ODFENzhGQjA3MjgxMkU0Cis6MTAxMzQwMDAxNEIwODgyODE2MTQ4OTFEOUYxNTlCMTZDMEYwMkIxMjA3Cis6MTAxMzUwMDAxNDI5MTYxQTJCMTYxQjhCMTQ3QUUzMEI3QUU5MDY4OENDCis6MTAxMzYwMDAxNThFMTY3OEVCMDFDMEYxNjVGMUI5MjkxMjFBMkYxMjBBCis6MTAxMzcwMDAxMThBMzUyRTEyMUI5QTFBQUZFRTJGMTIxMEMwQTBBRjkxCis6MTAxMzgwMDA5Rjc5RkIwMUIxRUU5RjExODgxQUMwRjA5ODEwN0FFM0EzCis6MTAxMzkwMDAwQTdFQTkwNTJBMTIwMTdBOEIwMUMwRjE2NEYwODE2MEVFCis6MTAxM0EwMDAwMTgyODkzNjhCMzc5OTE3MEJFODBDOTgxRjA5QzkwQ0Y1Cis6MTAxM0IwMDAyOTE2MTU3OEVCMDcyODEyMTVCMDg4MjgxNjE1RDlDMEZDCis6MTAxM0MwMDA5QTE5OUUxODhBMUYyRTEyMTUyQTE2MUEyRTE2MUJEQTIzCis6MTAxM0QwMDBDMEMwRTA4QzE3N0Y5MzBCN0ZBOTA2ODgxODhGMTk3OEZGCis6MTAxM0UwMDBGQjAxQzBFMTY1RTEzRDI5MTIxQTJGMTIxMzhBMzUyRTQ3Cis6MTAxM0YwMDAxMjFCOUExQkFGRUUyRjEyMTJDMEEwQUY5Rjc5RkIwMUY4Cis6MTAxNDAwMDBCMUVFOUYxMzg4MUJDMEYwOTgxMjdBRTMwQTdFQTkwNUZCCis6MTAxNDEwMDAyQTEyMDM3QThCMDFDMEYxNjVGMTA5MkUxMjE2MkUxNkRECis6MTAxNDIwMDAxOTJBMTIxQjAwNTEwNEMwRTEwMEVFMUFCMEVFMkUxNjZDCis6MTAxNDMwMDAxNzBFRkYxMzJGMTYxODBGQ0MwMUFDQUEyRjEyMUEwRTdECis6MTAxNDQwMDBCQzAxQUNGQzdGQ0IwMUIxQUEyQTE2MUIyQzE2MUE2Mzc3Cis6MTAxNDUwMDBGQzYyMDAwMDdGQjMwMjYzRkUzMTYzRkUyQjdFQjMwMkE5Cis6MTAxNDYwMDA2M0ZDMzQ2M0ZDMkUwMDAwNjQ1MEMwREEyMERCRjA1OENCCis6MTAxNDcwMDAxNURFQzAyMEQxMEZDMDkxNjNGRDdFMDBDMDkxNjNGQURDCis6MTAxNDgwMDA0Q0RBMjBEQjcwQzBEMTJFMEE4MEMwOUEyOTI0NjgyQzQ3Cis6MTAxNDkwMDA3MDA3NTgxNENFRDJBMEQxMEYwMzRDMEIxOEVENTFEQkJFCis6MTAxNEEwMDBDMEE4Mjg3OEMzMDIyQkNERjhEOUIwNjNGQTY1MDAwMDM0Cis6MTAxNEIwMDAyQTJDNzREQjQwNTgwRTUwNjNGQUU4MDAwMDAwMkQyNUZBCis6MTAxNEMwMDAwMjdCQzkwMUMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQUE1Cis6MTAxNEQwMDAyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkIzCis6MTAxNEUwMDBFN0MwMjBEMTBGQzA5MTYzRkMwNDAyMkEwMjU4MDI1MEM5Cis6MTAxNEYwMDAwQUEyMDIwNjAwMDAwMjJBMDI1ODAyNEQwQUEyMDIwNkFGCis6MTAxNTAwMDAwMDAwREI3MERBMjBDMEQxMkUwQTgwQzA5RTI5MjQ2ODNBCis6MTAxNTEwMDAyQzcwMDc1ODE0QUVDMDIwRDEwRkMwOTQ2M0ZCQ0YwMENECis6MTAxNTIwMDBDMDk2NjNGQkM5QzA5NjYzRkJDNDAwMDAyQTJDNzREQjIxCis6MTAxNTMwMDAzMERDNDA1QkZFMTNEQkEwQzJBMDJBQjQwMDJGMjAwQ0RECis6MTAxNTQwMDA2M0ZGMjcwMDhEMzU4Q0I3N0RDQjAyNjNGREQyNjNGQzMyCis6MTAxNTUwMDA3MThGMzU4RUQ3N0ZFQjAyNjNGREM1NjNGQzY0MDAwMDlECis6MTAxNTYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0QzAyMEQxMEYwMEZCCis6MTAxNTcwMDA2QzEwMDQyQjIyMUUyODIyMURDMEEwQzA5NDI5MjQwNjEyCis6MTAxNTgwMDAyQTI1MDI3Qjg5MDFEQkEwQzlCOTEzRUQwOERBMjAyOERFCis6MTAxNTkwMDBCMDAwMkNCMDA3MDM4ODBBMjg4MjRDQzBEMTBCODAwMDExCis6MTAxNUEwMDBEQkEwNjVBRkU3QzAyMEQxMEYwMDAwMDA2QzEwMDQyOTVDCis6MTAxNUIwMDAyMDA2MkEyMTAyNjg5ODA1Mjg5Q0Y5NjU4MTFBMEEwQUUyCis6MTAxNUMwMDA0QzY1QTBGMDE2RUNGQjJCNjI5RTFBRUNGODZGQjgwMjhCCis6MTAxNUQwMDA2MDAwRjEyQUEyMjY2OEEwMDc4QjIwMEFCQjBDNjVCMDI4Cis6MTAxNUUwMDBFMzJBNjI5RDY0QTBERDJCMjAwQzBDQkMxMUE2Q0MyRDNGCis6MTAxNUYwMDBDMjg2NkZEOTAyNjAwMEQ3MURFQ0VGMERCRDBBMkREMjU3Cis6MTAxNjAwMDBBMzY4RDAwNzhFMjAwREVFMEM2NUUwQzMyN0MyODVDMDBECis6MTAxNjEwMDBFMDY0NzBCQjFERUNGNDY4NDM0RDFDRUNGMzhBMkIwQ0FBCis6MTAxNjIwMDBBQTAyOUE3MDg5MjAwODk5MTEwRDk5MDI5OTcxODgyQTQ1Cis6MTAxNjMwMDA5ODc0OEYzMjlGNzUyODIxMDQwODg4MTE5ODc3MThFQ0M4Cis6MTAxNjQwMDBFNDBDQkYxMUE2RkYyREYyODVBOEI4MkU4NENGMkREQ0E3Cis6MTAxNjUwMDAyODJERjY4NUM4NUEyQTJDNzREQjQwNTgwREU3RDJBMEY1Cis6MTAxNjYwMDBEMTBGQzAyMEQxMEYwMDAwMkM5Q0Y5NjRDMDhEMkMyMDFDCis6MTAxNjcwMDA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NkZDNjY5NzA5RTBDCis6MTAxNjgwMDA2NjE4RUNEQTg5MzA4RjJCMDk4OTQwMEI5OTEwMDlGRjE1Cis6MTAxNjkwMDAwMjA4RkYwMjlGNzA4QzIwMDhDQzExMERDQzAyOUM3MUI3Cis6MTAxNkEwMDA4QTMzOUE3Mzg5MzI5OTcyODgyQTk4NzQ4RjM0OUY3NTE1Cis6MTAxNkIwMDA2M0ZGODIwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTRCOERFCis6MTAxNkMwMDBDMDIwRDEwRjAwREEyMEMwQjY1ODE1NDc2M0ZGRTUwMEVGCis6MTAxNkQwMDBEQTIwNTgxNTQ1NjNGRkRDMDBEQTIwREIzMERDNDBERDIyCis6MTAxNkUwMDA1MDU4MTVDN0QyQTBEMTBGMkIyMTA0NTgxM0RBMURFQzg2Cis6MTAxNkYwMDBCRDJCMjAwQ0MwRTAyRTI0NjY2M0ZGODQyRjIxMjNDMDY1Cis6MTAxNzAwMDBDODdGQzMwMjYzRkY3OTJDMjA2NjJCMjEwNEIxQ0MwQzY3Cis6MTAxNzEwMDAwQzQ3MkMyNDY2NTgxM0NGMURFQ0IzMkIyMDBDQzBFMEQzCis6MTAxNzIwMDAyRTI0NjY2M0ZGNUEwMDAwNkMxMDA0QzBCN0MwQTExNkQ3Cis6MTAxNzMwMDBFQ0IwMTVFQ0EyRDcyMEQ4NDBCODIyQzA0MDA1MzUwMjQ1Cis6MTAxNzQwMDA5NjcxOTU3MDAyQTQzODA0MDQ0MkM5NEIxQUVDOTUxOTlECis6MTAxNzUwMDBFQzk2MjlBNjdFQzE0MEQzMEY2RDRBMDUwMDgwODgwMDEzCis6MTAxNzYwMDAyMDhDMjIwQTg4QTI3MkQxMEZDMDUwMDhBNTM4NzVCMDBCCis6MTAxNzcwMDBFMzYzRkZENzZDMTAwODkzMTQ5NDEyMjkyMDA2NjU1Mjc2Cis6MTAxNzgwMDA4OEMwNzE2ODk4MDUyQTlDRjk2NUEyOTgxNkVDODkyOTg5Cis6MTAxNzkwMDAyMTAyOEExNDA5MDk0QzY1OTBDNzhBQTAwQTZBNTEyQTU1Cis6MTAxN0EwMDBBQ0ZENjVBMEJDQ0M1RkRCMzBEQTIwOEMxMjU4MTQ3QzE5Cis6MTAxN0IwMDBDMDUxOUExNEM3QkY5QkE5OEUxNDJFRTIwOTY4RTA2MDNECis6MTAxN0MwMDAyRjYyOUUxREVDN0E2RkY4MDI2MDAwODEyREQyMjY2ODkwCis6MTAxN0QwMDBEMDA1MkYyMjAwN0RGOTc1MkM2MjlEQzc5MDY0QzA2REU1Cis6MTAxN0UwMDA5QzExOEExNDJCMjAwQzJBQTAyMDBDQkQxMUE2REQwQTA2Cis6MTAxN0YwMDA0RjE0QkZBODA5ODgwMTI5RDI4NkFGODgyODhDMDk3OTlGCis6MTAxODAwMDA4QjU1MUZFQzZDMEZCRjBBMkZGMkEzNjhGMDA1MjgyMjNFCis6MTAxODEwMDAwMDdGODk0MzI5RDI4NUQ0OTA2NTkwNzc2MDAwM0QwMDkwCis6MTAxODIwMDAwMDJCMjAwQzFGRUM2NDBDQkQxMUE2REQyOUQyODYwRjA1Cis6MTAxODMwMDBCRjBBNkU5NjEwMkZGMkEzNjhGMDA0ODgyMDdGODkwNUY2Cis6MTAxODQwMDAyOUQyODU2NTkxNjVEQTIwNTgxNEU3NjAwMDEzREEyMDAzCis6MTAxODUwMDBDMEI2NTgxNEU1NjAwMDA5QzA5MDYzRkZCOURBMjA1ODlCCis6MTAxODYwMDAxNEUyODkxNDg5OTEwOUZFNTA2NTUxRTQ4QzEyOEQxNDlCCis6MTAxODcwMDBEQTIwREJEMDhERDA5RTEwMEQ2RDUxNTgxMzU0OUExNDgwCis6MTAxODgwMDA2NEEyMDhDNzVGOEZBMTk1QTlDMDUxMEYwRjQ3OUYxMjhGCis6MTAxODkwMDA2M0ZFRkIwMEMwOTFDMEYxMjgyMDA2MkMyMDY2Mjg4QzM2Cis6MTAxOEEwMDBGOUE3Q0MwQzBDNDcyQzI0NjY2RkM2MDg4RDE0OEREMTdCCis6MTAxOEIwMDA3MERFMDFDMDkwREQ5MDY0ODE1OUM5RDMyQTEyMDEyQkRBCis6MTAxOEMwMDAyMTA0NTgxMzY0OEExNEMwQjAyQjI0NjY4RUE5MkFBMDYwCis6MTAxOEQwMDAyMDBFMjgxNDFDRUM0MzhEMTQxNUVDMzdDMTcwMEE3N0M4Cis6MTAxOEUwMDAzNjg1NTYyRERDMjhBQzJDOUMxM0RFRDBBODU1N0NEMzM1Cis6MTAxOEYwMDAwMjJFRERGOEQzRTBEQTQwMDU1QjAyREMzMDVCRkY4QUM0Cis6MTAxOTAwMDBENEEwMjgyMDBDQjQ1NUMwRDAyQjBBODgyRjBBODAwQ0Y0Cis6MTAxOTEwMDA4QzExQTZDQzI5QzI4NUFGM0ZBQjk5MjlDNjg1MUNFQzlBCis6MTAxOTIwMDAyQ0RFRjBBQzg4MkQ4NENGMjgxMjAzMjkxMjA0NzhGMzIyCis6MTAxOTMwMDAwMjJFRkRGODI4OTAyMEQzRTAwNzg4MENDMTcwMDgwODFCCis6MTAxOTQwMDA0NzI4OTQyMDA4NzczNjY1N0ZBQjg5MTQxM0VDMkE4OUUxCis6MTAxOTUwMDA5MEMwRjQ3Nzk3NDkxQkVDMjhDMUNBMjgyMTA0ODUxNDRDCis6MTAxOTYwMDAwOTlFNDAwNkVFMTE4NzUzMDQ4ODExODU1MjBFODgwMkE1Cis6MTAxOTcwMDAwQzg4MDI5QkEwOUZBMThGMkI5REE1OThBNDk3QTc5NTRCCis6MTAxOTgwMDBBNjAzRkYwMjlGQTIyQzIwMEMxRUVDMTFBRUNFMENDQ0E1Cis6MTAxOTkwMDAxMTA2Q0MwODJCQzI4NTJERTRDRjJCQkMyMDJCQzY4NThECis6MTAxOUEwMDAyQTJDNzQ4QjEyNTgwRDE0RDJBMEQxMEYyODIwM0RDMEMwCis6MTAxOUIwMDBFMDdDODc3RjJFMjQ2NzBFMEE0NzY1QTA3QjFBRUMwRjE4Cis6MTAxOUMwMDA4ODIwMUVFQkZEOEYxNDhFRTQ4RkY0MDg4ODExMEE4ODlFCis6MTAxOUQwMDAwMjBGOEYxNEFGRUUxRkVDMEE5ODkxMEZFRTAyOUU5MDRCCis6MTAxOUUwMDAxRUVDMDlDMDgwMUFFQkZBMkNEMjg1QUFCQUI4Q0MyODEyCis6MTAxOUYwMDBBNENGMkNENjg1MkMyMTAyMkYyMDcwMEVDQzAyQjFGRjUzCis6MTAxQTAwMDAyRjI0NzAyQzI1MDJDMDIwRDEwRjg3MTQ4NzcwMDcwNzYwCis6MTAxQTEwMDA0NzYzRkQ2RTI4MjEyM0MwOTk3OThCMDI2M0ZFOUFERDBFCis6MTAxQTIwMDBGMDYzRkU5NTAwREEyMERCMzA4QzEyREQ1MDU4MTRGNEEwCis6MTAxQTMwMDBEMkEwRDEwRkMwRTE2M0ZGN0E4QjE0OEMxMkRENTBDMEFECis6MTAxQTQwMDBBQTJFMEE4MDJBMjQ2OERBMjA1ODEzNjBEMkEwRDEwRjY3Cis6MTAxQTUwMDAwMDcwOTY1NTJCNjI5RTZFQjg1MzFERUJENDJERDIyNjg2Cis6MTAxQTYwMDA2OEQwMDQ4RTIwN0RFOTQ1MkE2MjlEQ0JBRjJCMjEwNEVFCis6MTAxQTcwMDAyQzIwNjY1ODEyRjhDMDkwMjkyNDY2ODIxNDE4RUJFMkQ0Cis6MTAxQTgwMDA4RjIxMDhGRjAxOUYyMUMwMjBEMTBGMDA4QjEwQzlCODAyCis6MTAxQTkwMDA4Q0EwMEM2QzUxQ0NDQzhFMjQxRkVCRDA4REUxOUUxNDBECis6MTAxQUEwMDAwRkREMDI5REUxODgxMDY1OEZBOUMwMjBEMTBGREEyMERCCis6MTAxQUIwMDBDMEI2NTgxNDREQzAyMEQxMEYwMDAwMDA2QzEwMDYyOThDCis6MTAxQUMwMDAyMTAyQzBEMDc1OTcxMDJBMzIwNDdGQTcwQThCMzU3Rjc4Cis6MTAxQUQwMDBCRjA1MkQyNTAyMEREOTAyMDkwQzRDNjVDMTgyMTZFQkZDCis6MTAxQUUwMDBCNDFFRUJCMjI4NjI5RUMwRkE3OEYzMDI2MDAxODgyOTI2Cis6MTAxQUYwMDBFMjI2Njg5MDA3OEEyMDA5QUEwQzY1QTE3QTJBNjI5RENECis6MTAxQjAwMDBERkEwNjRBMTc3MkIyMDBDMENCQzExQTZDQzI5QzI4NkM3Cis6MTAxQjEwMDBDMDhDNzk4MzAyNjAwMTU3MTlFQkE3MDlCOTBBMjk5MjkxCis6MTAxQjIwMDBBMzY4OTAwNzg4MjAwOTg4MEM2NTgxNDMyN0MyODUxQzFCCis6MTAxQjMwMDBFQkE5NjQ3MTNBODkzMTA5OEIxNDBDQkIwMTZGQjExRDlCCis6MTAxQjQwMDAyQzIwNjY5RjEwQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjZDCis6MTAxQjUwMDA2MDAxNDAwOUZGNTA2NUYxM0E4QTEwMkFBQzE4ODkzNEI3Cis6MTAxQjYwMDBDMEM0N0Y5NzNDMThFQkFBMUJFQkE5OEYzNTlDNzE5QkQ3Cis6MTAxQjcwMDA3MDhCMjA5RDc0MDhCQjAyOUI3MkMwODI5ODc1MUJFQjEyCis6MTAxQjgwMDBBNTBGMDg0MDlCNzMwRjg4MTE5ODc3N0ZGNzBCMkYyMUMzCis6MTAxQjkwMDAwMjI4NEEwMDA4RkYwMjJGMjUwMkMwQjQ2MDAwMDQwMDlBCis6MTAxQkEwMDAwMDAwQzBCMDdFOTcwNDhGMzYyRjI1MjI3RDk3MDQ4OEQxCis6MTAxQkIwMDAzNzI4MjUyMTdDOTczNkMwRjFDMDkwMEFGOTM4MkYzQzkwCis6MTAxQkMwMDAyMDA5MDk0MjY0OTA4NjE5RUI3NjE4RUI3NzI4OTY3RUY3Cis6MTAxQkQwMDAwMEYwODgwMEEwOEMwMEYwODgwMEEwOEMwMEYwODgwMDQ1Cis6MTAxQkUwMDBBMDhDMkE2MjlEMkRFNEEyMkFBQzE4MkE2NjlEODkzMDE5Cis6MTAxQkYwMDA3Nzk3Mzg4RjMzOEEzMjE4RUI4MDA3QkUwQjJDMjEwNDdECis6MTAxQzAwMDBCNEJCMDRDQzExOThFMEMwODQ5OEUxODgyQjlERTU5QTgwCis6MTAxQzEwMDBFNjlGRTcxQUVCNzgwOTlGNDAwNkZGMTEwRkNDMDIwQUY2Cis6MTAxQzIwMDA4ODAyOThFMkMxRkMwRkNDMDIyQ0U2MDRDOUI4MkMyMDMzCis6MTAxQzMwMDAwQzFFRUI2NzBDQ0ExMUFFQ0MwNkFBMDgyOUEyODUyRDkyCis6MTAxQzQwMDBDNENGMDlCOTBCMjlBNjg1Q0Y1Q0MwMjBEMTBGQzA4MUI0Cis6MTAxQzUwMDBDMDkwMEY4OTM4QzA4Nzc5ODgwMjYzRkY3MjYzRkY2NjdFCis6MTAxQzYwMDAwMENDNTdEQTIwREIzMERDNDA1ODEzNERDMDIwRDEwRkI4Cis6MTAxQzcwMDBEQTIwNTgxM0RENjNGRkU4QzBBMDYzRkU4MkRBMjBDMERCCis6MTAxQzgwMDBCNjU4MTNEOTYzRkZEOTAwREI0MDJBMkM3NDU4MEM1QTdDCis6MTAxQzkwMDBEMkEwRDEwRjhBMTAyQjIxMDQ1ODEyNkUxRUVCNDRDMDIzCis6MTAxQ0EwMDBEMDJEMjQ2NjYzRkVCMTAwNkMxMDA2RDYyMDE5RUIzRkUwCis6MTAxQ0IwMDAxRUVCNDEyODYxMDIxN0VCM0UwODA4NEM2NTgwNUY4QUU1Cis6MTAxQ0MwMDAzMDBBNkE1MTY5QTM1NzJCNzI5RTZFQjgzRjJBOTIyNjNBCis6MTAxQ0QwMDA2OEEwMDQ4QzYwN0FDOTM0MkE3MjlEMkM0Q0ZFQ0FBQjcxCis6MTAxQ0UwMDAyQjYwMENCNjRGMENCRDExQTdERDI4RDI4NjBFQkUwQUE0Cis6MTAxQ0YwMDA3OEZCMjY5QzExMkVFMkEzMkMxNjAwNjhFMDA1MkY2MkNCCis6MTAxRDAwMDAwMDdFRjkxNTIyRDI4NUNGMjU2MDAwMEQwMERBNjBDMDczCis6MTAxRDEwMDBCNjU4MTNCNUM4NUE2MDAxMEYwMERBNjA1ODEzQjI2NTlGCis6MTAxRDIwMDA1MTA2REM0MERCMzA4RDMwREE2MDBENkQ1MTU4MTIyN0UyCis6MTAxRDMwMDBEM0EwNjRBMEYzODRBMUMwNTEwNDA0NDc2M0ZGNkQwMEU1Cis6MTAxRDQwMDBDMEIwMkM2MDY2ODkzMUIxQ0MwQzBDNDcyQzY0NjY2RjM2Cis6MTAxRDUwMDBDNjAyNzA5NjBBMkI2MTA0NTgxMjNFQzBCMDJCNjQ2NjBFCis6MTAxRDYwMDA2NTUwQjQyQTNDMTBDMEU3REMyMEMwRDFDMEYwMDJERkNGCis6MTAxRDcwMDAzODBGMEY0MjY0RjA5MDE5RUIwQTE4RUIwQjI4OTY3RThGCis6MTAxRDgwMDA4RDEwNkREQTA1MDBBMDg4MDBDMDhDQzBBMDg5MzAxREMwCis6MTAxRDkwMDBFQjFBNzc5NzUzODgzMjhDMTA4RjMzMDJDRTBCQzAyNDA2Cis6MTAxREEwMDA5MkUxMjI2MTA0OURFMDA0MjIxMThENkI5QkU1OUZFNzg3Cis6MTAxREIwMDA5OEU2MUZFQjEwMDk5ODQwMDY4ODExMDgyMjAyMEZEREYzCis6MTAxREMwMDAwMkMxOEQ5REUyMDgyMjAyOTJFNEI0QzIyRTYwMEMxRjczCis6MTAxREQwMDBFQjAwMENFODExQTc4ODJDODI4NUFGRUUwQzIyMEIyQkIwCis6MTAxREUwMDBFNENGMjI4Njg1RDJBMEQxMEYyODYwMENEMkEwOEMxMTFFCis6MTAxREYwMDAxOUVBRjgwQzhEMTFBOTg4QTdERDJFRDI4NTJCODRDRjg2Cis6MTAxRTAwMDAwRUNDMEIyQ0Q2ODVEMTBGQzBGMDBBREYzODdGRTgwMjRDCis6MTAxRTEwMDA2M0ZGNkM2M0ZGNjAwMDAwMkE2Qzc0QzBCMkRDMjBERERECis6MTAxRTIwMDA0MDU4MTIxQ0MwQjA2M0ZGNjNDMDIwRDEwRjAwMDAwMEY3Cis6MTAxRTMwMDA2QzEwMDQyQzIyMUQyQTIyMUVDMDQ5RDMyMDI5MzAwNkYyCis6MTAxRTQwMDAyNDM0NjhDMDQwN0FDMTA1RERBMDYwMDAwMjAwQzBEMDIzCis6MTAxRTUwMDA2RTk3MzhDMDhGMkUwQTgwMkIzMDE0QzA5NjI5MzQwNjE2Cis6MTAxRTYwMDAwRUJCMDIyRTMxMDIyQjM0MTQ3RTgwMDQyNDM1MDJERTk4Cis6MTAxRTcwMDA0MDdBQzEwRUM4QUJEQkQwREEzMDJDMEEwMDU4MEE3NkEzCis6MTAxRTgwMDAyRTMxMDIwRTBGNENDOEZFQzAyMEQxMEY2ODk1RjgyOEU1Cis6MTAxRTkwMDAzMTAyMDgwODRDNjU4RkVGMUFFQUM2MUNFQUM0MkJBMjZGCis6MTAxRUEwMDA5RUMwOUE3QjlCNDYyQkMyMjY2OEIwMDQ4RDMwN0JEOTlFCis6MTAxRUIwMDAzQjI5QTI5REMwRTNDQjkzOTQ5MDFCRUFENzJEMzEwNDFDCis6MTAxRUMwMDA5Qjk2MDhERDExMEVERDAyOUQ5NzlEOTExMkVBRDRDMDBDCis6MTAxRUQwMDBFNTI0QzRBMjJFMzQwNjJGMzEwMjI4QTI5RDAyRkYwMjVGCis6MTAxRUUwMDAyODhDMzAyOEE2OUQyRjM1MDJDMDIwRDEwRkRBMzBDMEIzCis6MTAxRUYwMDBCNjU4MTMzREMwMjBEMTBGNkMxMDA2MjkyMDA2Njg5OEYzCis6MTAxRjAwMDAwNTI4OUNGOTY1ODI1RDI5MjEwMjA5MDk0QzY1OTIxMDFBCis6MTAxRjEwMDBDRDUxREIzMERBMjAwNDRDMDI1ODEyQTFDMDUxRDNBMEJECis6MTAxRjIwMDBDN0FGMkEzNjBBQzBFMDE5RUFBMzFERUFBOTFGRUFBMjMwCis6MTAxRjMwMDA4QTNBMTZFQTlGQjFBQzY0QzEzNTI4NjI5RTZGODgwMjY2Cis6MTAxRjQwMDA2MDAxRjEyOURDMzMyOTkyMjY2ODkwMDc4QjIwMDlCQkI4Cis6MTAxRjUwMDAwQzY1QjFFMDI3NjI5REMwOEU2NDcxRDgyQjIwMEMwQ0ZCCis6MTAxRjYwMDBCQzExQTZDQzI5QzI4Njc5ODMwMjYwMDFEMjE5RUE5MUZDCis6MTAxRjcwMDAwOUI5MEEyOTkyQTM5NzEwNjg5MDA4MjgyMjAwMDk4OEI1Cis6MTAxRjgwMDAwQzY1ODFCQjI3QzI4NTY0NzFCNTI5MjAwNjI5OUNGOTlGCis6MTAxRjkwMDA2NDkxRUMyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjYyCis6MTAxRkEwMDA2RUM2MDI2MDAxQTEwOUY4NTA2NTgxOUI4ODM2ODlGNEVDCis6MTAxRkIwMDAwODhDMTRBQzk5MUNFQTgxMEM5OTAyMkMyMTA0OTk3MEFDCis6MTAxRkMwMDAxOUVBOTgwODA4NDc5OTcxODkyQTA5ODgxMDA4OTkwMjFFCis6MTAxRkQwMDAxOEVBOTUwODk5MDI5OTcyMjgzMDEzMjkzMDEyMDQ4ODVBCis6MTAxRkUwMDAxMDA2OTkxMDA4OTkwMjI4MzAyQzlBNzQwQzg4MTAwODUxCis6MTAxRkYwMDBDODAyMDk4ODAyOTg3Mzg5Mzc5OTc1ODgzODk4NzY4QTUzCis6MTAyMDAwMDAzOUMwODE5QTc3MUFFQTg4ODkzNTk4N0I5OTc4MDk4OTQ1Cis6MTAyMDEwMDAxNDBBOTkwMjk5N0E4QTMwODkzMjc3QTczNjE4RUE3NkIzCis6MTAyMDIwMDA4RjMzOTg3Q0MwODQ5ODdEODgyQjJFNzYxMTI5NzYxMjY4Cis6MTAyMDMwMDAyRjc2MTMxOUVBNzAwQTlGNDAwNkZGMTEwNENBMTEwOThFCis6MTAyMDQwMDA4ODAyMEZBQTAyOTg3RUMxRjkwRkFBMDIyQTc2MTBDMDUwCis6MTAyMDUwMDBBQTYwMDAwMUMwQTZBREJGMENCQzExQTZDQzI5QzI4NUU4Cis6MTAyMDYwMDAyRUY0Q0YwOUE5MEIyOUM2ODU2NTUxMDdDMDIwRDEwRkQxCis6MTAyMDcwMDAyQjIwMEMwQ0JDMTEwNkNDMDgyOEMyODYwOUI5MEE2RkFCCis6MTAyMDgwMDA4OTAyNjAwMTJFMjk5MkEzNjg5MDA4MkEyMjAwMDlBQUQ5Cis6MTAyMDkwMDAwQzY1QTExRjJBQzI4NTY0QTExOTI4MjAzRDA4Mjg0MDhCCis6MTAyMEEwMDA2NDgwOEM4NDM1MDQ4NDE0NjQ0MDg0ODVGNTc0NTM3RjgzCis6MTAyMEIwMDA4NDM2MDQ4NDE0NjQ0MDc3NzQ1Mzc0MjkzMDEzQzA4Q0JDCis6MTAyMEMwMDA3OTg4NkNDMDkwMjkyNDY3MDkwODQ3NjU4MEVEODgyMENECis6MTAyMEQwMDA4OUY0ODQzNTFGRUE0QjA0ODQxNEE0OTQwRjQ0MDI5NEI5Cis6MTAyMEUwMDBBMDE0RUE0NjA4ODgxMTA0ODgwMjk4QTE4NDM2OThBM0FGCis6MTAyMEYwMDAwNDg0MTRBNDk5MEY5OTAyOTlBMjE5RUE0MkFEQjQyODU0Cis6MTAyMTAwMDBDMjg1MkU0NENGMjg4QzEwMjhDNjg1MjgyMTAyMkYyMDc2Cis6MTAyMTEwMDA3MDA5ODgwMkIyRkYyRjI0NzAyODI1MDJDMDIwRDEwRjM5Cis6MTAyMTIwMDAwMENDNTdEQTIwREIzMERDNDA1ODEyMURDMDIwRDEwRjI0Cis6MTAyMTMwMDBDMDkxNjNGRjhGREEyMEMwQjY1ODEyQUI2M0ZGRTEwMDk1Cis6MTAyMTQwMDBEQTIwNTgxMkE5NjNGRkQ4OEExMDJCMjEwNDU4MTE0MUI0Cis6MTAyMTUwMDAxREVBMjAxRkVBMTkyQjIwMENDMEUwMkUyNDY2OEEzQUMzCis6MTAyMTYwMDA2M0ZFNDgwMDAwREEyMERCMzBEQzQwREQ1MDU4MTMyNEU5Cis6MTAyMTcwMDBEMkEwRDEwRjJBMkM3NERCNDA1ODBCMUZEMkEwRDEwRjU0Cis6MTAyMTgwMDAyOTIxMjNDMDg4Nzk4MzAyNjNGRTIwMkExMjAwMkMyMDkzCis6MTAyMTkwMDA2NjJCMjEwNDJDQ0MwMTBDMEM0NzJDMjQ2NjU4MTEyREU1Cis6MTAyMUEwMDAxREVBMEMxRkVBMDUyQjIwMENDMEUwMkUyNDY2OEEzQTlCCis6MTAyMUIwMDA2M0ZERjgwMERBMjA1ODEyOEM2M0ZGNjREQTIwNUJGRkJECis6MTAyMUMwMDAxQ0QyQTBEMTBGMDAwMDAwNkMxMDA4OTUxNUMwNjFDMTkxCis6MTAyMUQwMDBCMEQ5NDAyQTIwM0RDMDQwMEJBQTAxMEE2NDM4MkEyMDA5Cis6MTAyMUUwMDAwNjI5MTYwNjY4QTgwNTJDQUNGOTY1QzMzQjFERTlGMjYzCis6MTAyMUYwMDA2NDQwMDUyRjEyMDU2NEYyOUMyNjIxMDIxRUU5RUUwNkJBCis6MTAyMjAwMDAwNjRDNjU2MkUzMTVFOUVBNjQ0MEQ5OEEzNTI5MzAwMzUyCis6MTAyMjEwMDA5QTE0MEE5OTBDNjQ5MENDMkMyMDBDOEIxNDlDMTEwQ0YxCis6MTAyMjIwMDBDQzExQTVDQzlDMTIyQ0MyODZCNEJCN0NCMzAyNjAwMjNDCis6MTAyMjMwMDBEMzhGMTEwRUZFMEEyRUUyQTM2OEUwMDk4NjIwRDMwRjg5Cis6MTAyMjQwMDAwRTY2MEM2NTYyQkU4ODEyMjg4Mjg1NjQ4MkI2ODkxNDg3Cis6MTAyMjUwMDA2NDkwNUVEQTgwRDkzMDhDMjAxRUU5RTgxRkU5RTkxRDIwCis6MTAyMjYwMDBFOUQ2OEIxNDhERDRENEIwN0ZCNzE4Qjg4QTI5M0MxMDI2Cis6MTAyMjcwMDA4NTM2MDhDNjExMEU2NjAyOTY4MTA1ODUxNEE1RDUwRjEwCis6MTAyMjgwMDA1NTAyOTU4MDA0MTgxNDZEODkyNzg4OTYwOENCMTEwODhCCis6MTAyMjkwMDA4ODE0MEVCQjAyQThEODI5OUMyMDBGODgwMjlCQTE5ODA1Cis6MTAyMkEwMDBBMDg4OTI5QkEzMDg4ODE0QThEODBGODgwMjk4QTIyQTE1Cis6MTAyMkIwMDBBQzEwMTlFOUQ0QzBDMDhGMTQxRUU5QzU4NjEyOEQxMTY3Cis6MTAyMkMwMDAyODYyODVBRUREMDhGRjBCMkNENENGMjgyMTAyMkY2NkIzCis6MTAyMkQwMDA4NThCMzUyQTIwNzAwOTg4MDJBQkFBMjgyNTAyMkEyNDdBCis6MTAyMkUwMDA3MEMwMjBEMTBGMjk1MjlFMThFOUIxNkY5ODAyNjAwMjg4Cis6MTAyMkYwMDAwODI4ODIyNjY4ODAwODI5MjIwMDA4OTkwQzY1OTFGOTJGCis6MTAyMzAwMDAyQTUyOURDMUNBOUExMzY0QTFFRjJCMjAwQzI2MjAwNkU1Cis6MTAyMzEwMDAwQ0I4MTFBNTg4MkQ4Mjg2MEVCRTBBN0RDMzAyNjAwMjBDCis6MTAyMzIwMDAwMjJFRTJBMzY4RTAwODJGMjIwMDBFRkYwQzY1RjFGM0Y1Cis6MTAyMzMwMDAyODgyODVERTgwNjQ4MUZGOTgxMDI2NkNGOTY0NjFGRjM1Cis6MTAyMzQwMDAyQzIwNjY4ODMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjVBCis6MTAyMzUwMDA2MDAxQkMwOEZENTA2NUQxQjYxN0U5QjQxOUU5OTgxQUI3Cis6MTAyMzYwMDBFOTlGMkMyMTA0OEIyRDI4MzAxMDJGMjExRDBDODgxMDYzCis6MTAyMzcwMDAwQkZCMDkwQzg4MDIwQTg4MDIwOUJCMDI2NDQxNTI4OURFCis6MTAyMzgwMDAxMEMwNEQ5QjkwOTc5MTk4OTI4RDM1RDlFMDY0RDA2Qzk4Cis6MTAyMzkwMDBENzMwREJEMEQ4MzA3RkQ3MTMyNzNDMTBCQ0U5MjYzMkFBCis6MTAyM0EwMDAxNjhDMzk5NkU2OUNFNzhBMzdCNDM4OUFFODBCMTMxNEYyCis6MTAyM0IwMDA2NDMwNDkyQTgyMTY4Njc5OUE5Njk2OTc4Qzc3OEE3RDE4Cis6MTAyM0MwMDA5Qzk4MkI4MjE3MkM3QzIwOUE5QTJBOUMxODlCOTk4NjgxCis6MTAyM0QwMDA3QkIwM0JCODg5NkRCOTIxOEJDOTk2QTUyNjkyMTYyQTg4Cis6MTAyM0UwMDBBQzE4Qjg5OTlCQTE5NkEwOEJDNzg2Q0Q5QkEyMkI5MkM3Cis6MTAyM0YwMDAxNTk2QTQ5QkEzODZDQjJDQ0MyMDI2QTYwNUMwMzQ2QkI3Cis6MTAyNDAwMDBENDIwMEQzQjBDMEREODA5MEU4ODBBN0ZCNzA1QzA5MDZCCis6MTAyNDEwMDA5OTg4QkM4OEMwOTAwQjFBMTI2REFBMDY5OTg4OTk4QjZFCis6MTAyNDIwMDAyODhDMThDMEQwMUJFOTgzMUNFOTgyMTZFOTc4QjFGRjFCCis6MTAyNDMwMDAyQTIxMUMyM0U2MTMwRjBGNEYyNkU2MTIyRjI1MUQ3RjlFCis6MTAyNDQwMDBBOTA2QzBGMEMwODAyODI1MUQwNUY2MTExQUU5NzE4Rjc0Cis6MTAyNDUwMDAyMDJCRTYxNTJDRTYxNjJERTYxNzI2RTYxODBBRkEwMkJBCis6MTAyNDYwMDAyQUU2MTQyOTIwMDYyOTlDRjk2NDkwRkYyOTIwMEM4RDY2Cis6MTAyNDcwMDAxNUMwODAxQUU5NTcwQzlDMTFBQTk5QTVDQ0RBMjAyQjFCCis6MTAyNDgwMDBDMjg1Mjg5NENGMEI0QjBCMkJDNjg1QzBCMDhDMTY1ODM5Cis6MTAyNDkwMDAxMTE0RDJBMEQxMEY4QTM1NkZBNTQ4RDgzMDhCRDU2REQ1Cis6MTAyNEEwMDBBOTBDOEE4NjBBOEExNENCQTk3QUIzMzcyODhDMTBDMDYzCis6MTAyNEIwMDA4MDI4MjQ2NzA4MEI0NzY1QjExMkRBMjBEQjMwMkMxMjI0Cis6MTAyNEMwMDAwNjU4MTEzN0QzQTBDMEMxQzBEMDJEQTQwMzlDMTU2M0ZBCis6MTAyNEQwMDBGRDI2ODYzNjY0NjEwQzg5MTBDMDREOUI5MDk3OTE5OEJCCis6MTAyNEUwMDA5MjYzRkVBNEMwODE2M0ZGQzc4QTE1Q0NBN0RBMjBEQjA0Cis6MTAyNEYwMDAzMDhDMTY1ODExMkJDMDIwRDEwRkRBMjBDMEI2NTgxMURECis6MTAyNTAwMDBCQTYzRkZFNDAwREEyMDhCMTE1ODExQjc2M0ZGRDkwMERBCis6MTAyNTEwMDA5RTE3OEExMzJCMjEwNDU4MTA0RjhFMTdDMEIwMkIyNEZFCis6MTAyNTIwMDA2NjYzRkUzNEMwODA2M0ZFMDlEQTIwREIzMDhDMTZERDgyCis6MTAyNTMwMDA1MDU4MTIzM0QyQTBEMTBGREEyMDU4MTFBQjYzRkZBODQ0Cis6MTAyNTQwMDAyRDIxMjNDMEM4N0RDMzAyNjNGRTBEOEExMzJCMjEwNEY1Cis6MTAyNTUwMDAyQzIwNjY5ODE3QjFDQzBDMEM0NzJDMjQ2NjU4MTAzREUzCis6MTAyNTYwMDA4RTE3QzBEMDJEMjQ2NjYzRkRFRTAwMDAyNjIxMjNCMDE3Cis6MTAyNTcwMDA2NjA2MDY0RjI2MjUyMzY1NkVGMTI4MjA2QTdGODcwNUFCCis6MTAyNTgwMDAwODI5NDE2NDkwQTVDMEQwMUJFOTFDMTlFOTJCMjYyMDFECis6MTAyNTkwMDAwNzIzRTYxQkIxNjYwOUZBMDIyQkU2MUEyODIwMEEyRDRBCis6MTAyNUEwMDBFNjFEMkFFNjFFMDk4ODAyMjhFNjFDODgyNjA2MDY0NzNDCis6MTAyNUIwMDAyOEU2MjAyQjIyMDgyNkU1M0UyQkU2MjEyRDI0MDcyQzk5Cis6MTAyNUMwMDAyMDA2MkEyMDY0NjhDMzQ3QjQ0NDYzRkU5RURCMzBEQUU5Cis6MTAyNUQwMDAyMDhEMTVDMENFMkUwQTgwMkMyNDY4OEMxNjU4MTA3QkI2Cis6MTAyNUUwMDBEMkEwRDEwRjhFMTAyQTMyMTYxNkU4RjMwQTJBMTQ4NkNBCis6MTAyNUYwMDA2NjJCRTYxMjk3RTEyN0U2MTMyOEU2MTRBQTY2MDk2NjE5Cis6MTAyNjAwMDAwMjk2RTAyRUVDNDg2OUVENTBDMTQ2NjNGRDdBMDAwMDY5Cis6MTAyNjEwMDA2NEFGQjQxOUU4RTkyODIwMTY4OTkyMEE4ODBDMDA5MTYxCis6MTAyNjIwMDAwNDAwODgxQUE4Qjg5ODI5NjNGRjlDMDAyQjIxMDQ2RTI3Cis6MTAyNjMwMDBCODFFMkMyMDY2QjhDQzBDMEM0NzJDMjQ2NkM5QzA5RTUyCis6MTAyNjQwMDAxNzhBMTM1ODEwMDQ4RTE3QzAzNDhGMjBDMEQwMkQyNDQxCis6MTAyNjUwMDA2NkMwNjgyNjI0MDY2M0ZGMkMwMDhEMzVDMDgwNjREMEQ4Cis6MTAyNjYwMDA0QUQ5RTBEQzMwREJFMERGMzAxQUU4RjRCMTg4QjRGRkFGCis6MTAyNjcwMDAxN0U4RjQ4NkM5MjQ5REZGOERDODJDQ0MxMDJENDYzMDU4Cis6MTAyNjgwMDAwNzY3MDEyRDQ2MzIwQTY2MDExREU4RUUyNjQ2MzFBRDg4Cis6MTAyNjkwMDA2RDJENDYzMzI2RjIxNTk3Qjc5NkI2ODRDM0JDQkI5NDBFCis6MTAyNkEwMDBCNThEMzUyOTlDMTA3RDgzQzIyRjIxMURDMTQ2NjNGRDQ4Cis6MTAyNkIwMDA0QjAwMDAwMDZDMTAwNjI5MjAwNjI4OUNGODY1ODJDMzk4Cis6MTAyNkMwMDAyOTIxMDIyQjIwMEMwOTA5NEM2NTkwRTExNkU4QjkwQzcwCis6MTAyNkQwMDBCQTExQTZBQTJEQTI4NjJDMEExMjdEQzMwMjYwMDI5MDBFCis6MTAyNkUwMDAxOUU4QjUwOUI5MEEyOTkyQTM2ODkwMDc4QzIwMDlDQzhBCis6MTAyNkYwMDAwQzY1QzI3QzI5QTI4NTY0OTI3NjJENjI5RTFBRThBQjk1Cis6MTAyNzAwMDA2RkQ4MDI2MDAyNzIyQUEyMjYyOTE2MDE2OEEwMDgyQjNGCis6MTAyNzEwMDAyMjAwMEFCQjBDNjVCMjYwMjk2MjlEQzE4QzY0OTI1ODhDCis6MTAyNzIwMDAyQTIxMjAwQTgwNjA5OTEwMkMyMDNDQzdFRjAwMEYzRTIwCis6MTAyNzMwMDAwMTBCM0VCMUJEMEZEQjM5MEJCQjA5OEYyNjBEQkQxMTVGCis6MTAyNzQwMDAyRERDMUMwRDBENDEwRUREMDM4RTI3QjFERDBEMEQ0MTdECis6MTAyNzUwMDAwRkVFMEMwREJCMEIyQkJDMUMwQkI3MDI3RUM3MUMyQzQ5Cis6MTAyNzYwMDAyMTI1N0JDQjE2MkQxQUZDMENCQTBDMERBMTYwMDAwOTlCCis6MTAyNzcwMDAzRTAxMDczRUIxNzgwOTg3MzkwQjc3MEE3N0VCMDI2MDkzCis6MTAyNzgwMDAwMjBBMkMyMTIzMjgyMTIxQjFDQzBDMEM0RjJDMjUyMzBCCis6MTAyNzkwMDA3QzhCMjlCMENEMkQyNTIzQzg1NURBMjBEQjMwNTgwRjhFCis6MTAyN0EwMDBGQTI5MjEwMkNDOTZDMEU4MEU5RTAyMkUyNTAyQ0M1N0IzCis6MTAyN0IwMDBEQTIwREIzMERDNDA1ODEwN0FDMDIwRDEwRjJDMjA2NkE0Cis6MTAyN0MwMDA4OTMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjYwMDFEMzUzCis6MTAyN0QwMDAwOUZENTA2NUQxQ0QyRjBBMDEyRTMwMTEyOTIyMTQ2NDM0Cis6MTAyN0UwMDBFMDExMjgyMjFCMDkwQzQ0MDBDMTA0MDBGQTFBMEE4OENGCis6MTAyN0YwMDAwMjI4MjYxQjJFMzAxMEMwQTBDMEIwODgzMDFDRTg2RTA2Cis6MTAyODAwMDA5NDEyOTUxM0MwNDEyNTIwM0MyQ0MwMjIwODhEMTQ3N0NBCis6MTAyODEwMDA4NzA1MkYwQTAxMENGQTM4QzBGMkMwODQwODU4MDEwRjRFCis6MTAyODIwMDA1RjAxMEY0QjM4MDUzNTQwMDdCQjEwQzBGMDA4NEYzODJCCis6MTAyODMwMDAwOEZGMTAwRkJCMDIyOEVDRkVDMEYwMDg0RjM4ODQyQkI1Cis6MTAyODQwMDAwQkE4MTAwQUZGMTAyQTIxMjAwRjg4MDIwQjg4MDIwODBCCis6MTAyODUwMDA0NDAyMThFODdEOEYxMTA4NDQwMjI4MjEyNTBBMkExNDExCis6MTAyODYwMDAwODI4MTQwNDg4MTEwQTg4MDIyQTIxMDQ5NEYwOEIyMDc1Cis6MTAyODcwMDAwNEU0MTAwOEJCMTEwNEJCMDJDMDRBMDRCQjAyOUJGMTc0Cis6MTAyODgwMDA4NDJBMDhBQjExMEJFQjAyOTRGNDBBNTQxMTBCNDQwMjk2Cis6MTAyODkwMDAwNTU1MTAwRDFCNDA5NEY3MDdCQjEwMEI1NTAyMDg1NTRBCis6MTAyOEEwMDAwMkMwODE5NUY2ODQzM0MwNTA5NEYzQjE5NDhCMzI5NTc1Cis6MTAyOEIwMDBGODk4Rjk5QkYyQzA4MEMxQkMyNDI2MTQ5OEZCOUJGNUM0Cis6MTAyOEMwMDA5OUZBODUzODk1RkM4NDNBOTRGRDhCM0I5QkZFODgzOUI4Cis6MTAyOEQwMDA5OEZGODUzNTI1RjYxMDg0MzY4NTEzMjRGNjExOEIzNzNECis6MTAyOEUwMDA4NDEyMkJGNjEyQzBCMDY0QzA4MTg5MzA3Nzk3NDY4RDcwCis6MTAyOEYwMDAzMjg4MzMyRTMwMTA4RjExMUNFODQwMDk5OTQwMDY5OTE4Cis6MTAyOTAwMDAxMTJDRjYxNEMwQzQyQ0Y2MTU4QzJCMkRGNjFBMjhGNkIzCis6MTAyOTEwMDAxQjJCRjYxOTA0QTgxMTA5ODgwMjA4RUUwMjE5RTgzNUU0Cis6MTAyOTIwMDBDMTgwMDhFRTAyMDlDOTAyMjlGNjE2MkVGNjE4QzA5RUNCCis6MTAyOTMwMDA2MDAwMDQwMDAwMDBDMDlBMkYyMDBDMThFODI1MENGRTRGCis6MTAyOTQwMDAxMUE4RkZBNkVFMkRFMjg1MkJGNENGMEQ5RDBCMkRFNkYxCis6MTAyOTUwMDA4NUM4N0Y4QTI2ODkyOUE3QUE5QTI2MEE5OTBDMDkwOTc3Cis6MTAyOTYwMDA0ODI5MjUyNTY1NTA0Q0MwMjBEMTBGMDBDMDlBNjNGRjJGCis6MTAyOTcwMDBDNkRBMjA1ODEwOUQ2M0ZFMzREQTIwQzBCNjU4MTA5QThCCis6MTAyOTgwMDA2M0ZFMkEwMDY4OTczOEMwMjBEMTBGMDAwMERBMjBEQkYwCis6MTAyOTkwMDA3MDU4MTA1N0MwQjBDMEMxMEFDQTM5MEFDQjM4NjVCRERCCis6MTAyOUEwMDBFMDYzRkUwOThBMTAyQjIxMDQ1ODBGMkFDMEIwMkIyNEEzCis6MTAyOUIwMDA2NjYzRkUyMURCNDAyQTJDNzQ1ODA5MEZEMkEwRDEwRjg4Cis6MTAyOUMwMDBEQTIwNTgwRjJGNjNGQ0Y3NkMxMDA0QzAyMEQxMEYwMEUxCis6MTAyOUQwMDA2QzEwMDQyOTBBODAxRUU4MUQxRkU4MUQxQ0U3RjUwQzc5Cis6MTAyOUUwMDAyQjExQUNCQjJDMkNGQzJEQjI4NTBGQ0MwMjlFRDE5Q0E0Cis6MTAyOUYwMDBEMEMwNTFDMDcwMTNFODE5MTRFODE4MThFODE2MkFCMkFDCis6MTAyQTAwMDA4NUE4MjgwNDI0MEEyMzQ2OTFBOTg2QjhBQTJBQjY4NTRGCis6MTAyQTEwMDBBOTg4Mjc4NDlGMjU2NDlGRDEwRjAwMDA2QzEwMEFENkQ3Cis6MTAyQTIwMDAzMDI4MzAxMDI5MjAwNjI4OENGOTY0ODI5QjY4OTgwQjg2Cis6MTAyQTMwMDAyQTlDRjk2NUExQjIwMjJBMDI1ODBGMTE4OTM3MUJFN0I3Cis6MTAyQTQwMDBERUM4OTE2NDUyMEUyQTIxMDIwQTBDNEM2NUMyNTg4REQwCis6MTAyQTUwMDAzMDE5RTdENzc0RDcwNTJFMjEyMzY1RTI5RTJGOTI5RTY5Cis6MTAyQTYwMDAxQUU3RDM2RkY4MDI2MDAyNTMyQUEyMjY2OEEwMDgyQzQ2Cis6MTAyQTcwMDAyMjAwMEFDQzBDNjVDMjQ0MkE5MjlENjRBMjNFOUExNTlCCis6MTAyQTgwMDAxRkU3Q0Q4RDY3QzFFNjY0RDAwRTJCNjIwNjE4RTdDQTNBCis6MTAyQTkwMDA2NEIwMDUyODgwMjE3QjhCNDIyQjIwMEMxOEU3QzUwQ0U1Cis6MTAyQUEwMDBCQzExQThDQzI5QzI4Njc5RUI0NTBGQkUwQTJFRTJBMzQxCis6MTAyQUIwMDA2OEUwMDQ4RjIwN0VGOTM3MkNDMjg1OUMxODY0QzIzM0VECis6MTAyQUMwMDAyQjIxMkY4NzY2MEI3QjM2MEI3OTBDNkY5RDI2NkVEMkUwCis6MTAyQUQwMDA0NjJDMjAzRDdCQzc0MENFNTU2MDAwMUUyQTIwMENDMUVECis6MTAyQUUwMDBCMjhDMjA1ODEwNzU5QTE4NjRBMjQ1OEQ2NzYzRkZDRjg5Cis6MTAyQUYwMDBDMEMwNjNGRkM1RDdCMDYzRkZEMzAwQzBFMDYwMDAwMjcxCis6MTAyQjAwMDAyRTYwMDMwRURCMEM2RUIyMEVEQzcwMENFQTExQUE2QUFBCis6MTAyQjEwMDAyQUFDMjA1ODAxOTlEN0EwREEyMERCNzBDMUM4MkQyMTNBCis6MTAyQjIwMDAyMDU4MTAxQjhDMjY4QjI3OUExNjBDQkIwQzdBQjMzNEJBCis6MTAyQjMwMDA4RjE4ODk2Mzk5RjM4ODYyOThGMjhFNjU5RUY4MkQ2MEVDCis6MTAyQjQwMDAxMDhBMTg5RDE3NjhENzI5QzBEMDlEQTkyQzIyMTgyQjUwCis6MTAyQjUwMDAyMjEzOUNBQjlCQUE5N0E1OEU2NjdFNzMwMjYwMDA5NzlBCis6MTAyQjYwMDBDRjU4NjAwMDFGREEyMDhCMTY1ODBGRTE2NUExMzg2MzNCCis6MTAyQjcwMDBGRkJEQzA4MUMwOTA4RjE4QzBBMjlBRjk5OUZCOThGQTQ2Cis6MTAyQjgwMDA5N0Y1NjNGRkQyREIzMERBMjBEQzQwNTgwRjg1QzA1MTY3Cis6MTAyQjkwMDBENkEwQzBDMDJCQTAxMDJDQTQwMzlCMTcyQzEyMDgwMjk3Cis6MTAyQkEwMDAyQTAyMDY2QjAyREY3MDJENjAwMzhFMTc5RDE0OUUxMEEzCis6MTAyQkIwMDAwQ0REMTFDMEUwQUQ2RDJEREMyMDU4MDExODhDMTQ4QjlDCis6MTAyQkMwMDAxNkFDQUMyQzY0MDM4QTI2ODkyOUFCQUEwQTk5MEM5QTA0Cis6MTAyQkQwMDAyNjg4NjYwOTA5NDgyOTI1MjUwNzg4MEM5ODY2MkYyMjJBCis6MTAyQkUwMDAxOEE3RkYyRjI2MTg2M0ZFOTZEQTIwREIzMERDNDBEREM1Cis6MTAyQkYwMDA1MDU4MTA4M0QyQTBEMTBGQzAzMDJDMjA2Njg5NjFCMTBCCis6MTAyQzAwMDBDQzBDMEM0NzJDMjQ2NjZFQzYwMjYwMDBEMkMwMzAwOTgyCis6MTAyQzEwMDBGRDUwNjVEMENBOEU2NzY0RTA2OTY0NzA2NkRCNjA4Q0M1Cis6MTAyQzIwMDAxOERGNzBEQTIwMkQ2MDAzOEUxNzBDREQxMTlFMTBBREI5Cis6MTAyQzMwMDA2RDJEREMyMDFFRTc4NDU4MDBGOTIzMjYxOERBMjA4QjNFCis6MTAyQzQwMDAxNkRDNDAyRjIyMTNERDUwQjFGRjJGMjYxMzU4MEYyNDFFCis6MTAyQzUwMDBEMkEwRDEwRjAwMjgyMDNEMDg0ODQwNjU4REU3NkY5NTMwCis6MTAyQzYwMDAzRURBMzA4REI1NkQ5OTBDOENBODBDOEMxNENBQ0Y3Q0QzCis6MTAyQzcwMDBEMzJEMkFBQzEwQzA5MDI5MjQ2NzA5MEQ0NzY0RERDNTA3Cis6MTAyQzgwMDA2MDAwOTIwMDJDMTIwODA2NkIwMjJENkMyMDA3N0YwMjU4Cis6MTAyQzkwMDA4RTE3REEyMDlFMTAxRUU3NkI1ODAwN0Q2M0ZGOUEwMEE2Cis6MTAyQ0EwMDBDMDkxNjNGRkQxMDAwMDAwNjU1MDgxREEyMERCNjBEQzU5Cis6MTAyQ0IwMDA0MDU4MEYzQkMwMjBDMEYwMkZBNDAzRDEwRkRBMjBDMDMyCis6MTAyQ0MwMDBCNjU4MEZDOTYzRkZFMDAwMDA2Rjk1MDI2M0ZENkNEQTMwCis6MTAyQ0QwMDAyMERCMzBEQzQwREQ1MEM0RTA1ODBFQkNEMkEwRDEwRjY4Cis6MTAyQ0UwMDA4QTE1MkIyMTA0NTgwRTVCMjMyNDY2Mjg2MDEwOTgxNzQwCis6MTAyQ0YwMDA2M0ZGMjEwMERBMjA1ODBGQkM2M0ZGQUJDODU4REIzMEZDCis6MTAyRDAwMDBEQTIwNTgwRUExMkEyMTAyNjVBRjlDQzA5NDA5QTkwMkJECis6MTAyRDEwMDAyOTI1MDI2M0ZGOTFEQjMwREM0MERENTBDMEEzMkUwQTgxCis6MTAyRDIwMDA4MDJBMjQ2OERBMjA1ODBFQTlEMkEwRDEwRkMwMjBEMTYxCis6MTAyRDMwMDAwRkRBMjAyQjIwMEM1ODBGQzU2M0ZGNkI2QzEwMDQyODkyCis6MTAyRDQwMDAyMDA2QzA2MjI4OENGODY1ODEyNUMwNTBDN0RGMkIyMjgxCis6MTAyRDUwMDAxQkMwRTEyQTIwNkIyOTIxMjMwMEExMDRCMDk5MjkyNTU5Cis6MTAyRDYwMDAyM0IxQUEwMEVDMUEwQkM0MDEwQTBBNDQyQTI0NkIwNEZBCis6MTAyRDcwMDBFNDM5MERDQzAzMENCQjAxMkIyNjFCNjQ0MDY5MjkyMEQwCis6MTAyRDgwMDAwQzFCRTcwQjBDOUExMTBCQUEwODJGQTI4NjFCRTcwOTU0Cis6MTAyRDkwMDA2RkY5MDI2MDAwQjYwQjlCMEEyQkIyQTM2OEIwMDgyQzM3Cis6MTAyREEwMDAyMjAwMEJDQzBDNjVDMEE0MkJBMjg1MURFNzJENjRCMEJFCis6MTAyREIwMDA5QjhDMkIyNDIxMDQwRENDMDI5Q0IwODgyMEMwQzUwODFDCis6MTAyREMwMDA4ODExMEM4ODAyOThCMTg4MkEwODQ0MTE5OEI0OEYzNDZECis6MTAyREQwMDA5NEI3OUZCNUMwNDAxRUU2RkUyREEyODUwRTlFMDgyNTI1Cis6MTAyREUwMDBFNENGMkREQzI4MkRBNjg1MjkyMTAyMDkwOTRDNjg5NDAxCis6MTAyREYwMDAxQTY4OTgyMEM5NDAyQTIxMDI2NUEwMEIyQTIyMUUyQjlFCis6MTAyRTAwMDAyMjFEN0FCMTAyNjVBMDc5QzAyMEQxMEYyQzIxMjM2NTQzCis6MTAyRTEwMDBDRkRFNjAwMDA4MkUyMTIxMkQyMTIzN0VEQkQ1MkIyMjQxCis6MTAyRTIwMDAxRTJGMjIxRDI1MjUwMjdCRjkwMUMwQjA2NEJGQzQxM0VCCis6MTAyRTMwMDBFNkRGMkNCMDA3MjhCMDAwREEyMDAzODgwQTI4ODI0QzhECis6MTAyRTQwMDBDMEQxMEI4MDAwREJBMDY1QUZFNzYzRkZBNjJBMkM3NDFFCis6MTAyRTUwMDBDMEIwMkMwQTAyNTgwRDk1MUNFNzAzOUNBMDhCMjAwOERCCis6MTAyRTYwMDBCQjExMDZCQjAyOUJBMTg5MzQ5OUEyNjNGRjc5MDAwMEM0Cis6MTAyRTcwMDAyNjI0NjhEQTIwREIzMERDNDBERDUwNTgwRkUxRDJBMDk4Cis6MTAyRTgwMDBEMTBGREEyMDJCMjAwQzU4MEY1OEMwMjBEMTBGMDAwMDkyCis6MTAyRTkwMDA2QzEwMDYwNzNEMTRDMDgwREMzMERCNDBEQTIwQzA0N0YwCis6MTAyRUEwMDBDMDIxMjNCQzMwMDMyODM4MDgwODQyNzc0MDAxQjFERDM3Cis6MTAyRUIwMDA2NDgxNUExRUU2QkIxOUU2QkMyOUU2N0VEMzBGNkREQUEzCis6MTAyRUMwMDAwNTAwNTA4ODAwMzA4Q0MwRTBDMDIwMjVBMDNDMTRFNkVFCis6MTAyRUQwMDBCQUI2RDM4RkMwQzBEMDBGODcxNDI0NDAyMjBGODk0MEM4Cis6MTAyRUUwMDA5NDEwNzdGNzA0QzA4MTA0ODIzOEMwRjEwQjI4MTBDMDE5Cis6MTAyRUYwMDA0NEMwMjIwNDU0MDEwNEZEMzgwMjUyMDEwMkZFMzgwODg1Cis6MTAyRjAwMDBERDEwODIxQzA3RUUxMDBFNkUwMjBFREQwMjI0MkNGRTc4Cis6MTAyRjEwMDBDMEUwMDRGRTM4MEFFRTEwMEU4ODAyMEQ4ODAyOERBQjY4Cis6MTAyRjIwMDAxRUU2QUEwOEQ4MDIwRTg4MDI5OEIwQzBFODA0MjgxMDRECis6MTAyRjMwMDAwRTVFMDE4NEEwMjVBMTI1MDg0NDExMDg0NDAyMDUyNTQwCis6MTAyRjQwMDAxNDA0NTUxMTA0MzQwMkMwODEwRThFMzk5NEIxOEZBQTM1Cis6MTAyRjUwMDA4NDEwOUZCNDc1NjYwQzI2QTExRkMwRjIwNjI2MTQ2MDZCCis6MTAyRjYwMDAwMDA5MDAwMDI2QTEyMEMwRjIwNjI2MTQwNTY1MDIwRjA0Cis6MTAyRjcwMDA3NzAxMDc4NzM5MDVFNjEwMDc3ODEwMDg2NjAyMDY1NUJECis6MTAyRjgwMDAwMjk1QjYyNUExMDQwQUU2MTEwODU4MTEwODI4MDIwODdFCis6MTAyRjkwMDA2NjAyOTZCN0MwNjA2NDQwNTY2NDkwNTMwNjdFMTFDMEM2Cis6MTAyRkEwMDBGNDg5QzI4OEMzMEIzNDBCOTY0NTk4NDc5OTQ2MThFNkI2Cis6MTAyRkIwMDA5MTlGNDEwNDU5MTEwRTk5MDIxRkU2OEYwMjBFNDcwODk2Cis6MTAyRkMwMDBEODAyOTg0MjBFOTkwMjlGNDBDMUUwMEU5OTAyOTk0NDlFCis6MTAyRkQwMDAyRkEwMENCNDM4MENGOTExMTRFNjdFMUVFNjc1QTRGRjgwCis6MTAyRkUwMDBBRTk5MkU5Mjg1MjZGNENGMEU4ODBCMjg5Njg1RDEwRkE4Cis6MTAyRkYwMDAyQkEwMEMxRkU2NkYxQ0U2NzYwQ0JFMTFBQ0JCQUZFRTJGCis6MTAzMDAwMDAyREUyODUyNkI0Q0YwRDNEMEIyREU2ODVEMTBGQzA4MDc2Cis6MTAzMDEwMDAwNTI4Mzg3ODQ4MDI2M0ZFQTI2M0ZFOTY2QzEwMDZDMDRECis6MTAzMDIwMDBDMDY1NzBGMTg4MzBDMDMwMDg4NzE0Nzc4NzEyQzBCMDRGCis6MTAzMDMwMDBDMEE2MTlFNjYxMjk5MDIyQzAzMENDOTdDMDMxNjAwMDRCCis6MTAzMDQwMDAwM0MwQjBDMEE2QzBFMEMwOTFDMEQ0QzA4MjI1MjAzQzVGCis6MTAzMDUwMDAwQjNGMTA5NzEyODMxQ0MwNzAwODU4MDEwRDVEMDEwOENBCis6MTAzMDYwMDA5NzM4QzA4MDBCOTgzODA3NzcxMDA0ODgxMDA4NjgwMkRBCis6MTAzMDcwMDAwODc3MDJDMDgwMEQ5ODM4MkQzQ0ZFMDg4ODEwMEQ5RTAwCis6MTAzMDgwMDAzODhEMkIwQUVFMTAwOEVFMDIwN0VFMDIwQ0I4MTAwRjc2Cis6MTAzMDkwMDBERDAyMDUzQjQwMEVERDAyOUQ0MDg5MjAwNDNEMTAwODA1Cis6MTAzMEEwMDA5OTExMEQ5OTAyMkQyMTA0MDlBOTAyMDhERDExOTk0MUY4Cis6MTAzMEIwMDA4NzJBMDVCOTEwMEQzRDAyMEFCQjExMERCQjAyMDg3NzI2Cis6MTAzMEMwMDAwMjk3NDQyODIxMjU4NzEyMDgyODE0MDQ4ODExMDcxRTE2Cis6MTAzMEQwMDA0MDA3RUUxMDBFOTkwMjc1NjYwOTI2MjExRjA2MjYxNDc4Cis6MTAzMEUwMDA2MDAwMDYwMDI2MjEyMDA2MjYxNDA4NjgwMjlCNDcwOTc2Cis6MTAzMEYwMDA4ODAyOTg0NjI5MjAwQ0QyQzBDMDgwMEM5RTExMUJFNjg1Cis6MTAzMTAwMDAzNDFGRTYyQkFCOTlBRkVFMkRFMjg1Mjg5NENGMERBREExCis6MTAzMTEwMDAwQjJERTY4NUQxMEZERDQwQzBBNkMwQjA4RTUxQ0FFMEIwCis6MTAzMTIwMDBCMkFBQjFCQjJEREMxMDhGNTAwRTc4MzY5ODEwMDg3N0ZDCis6MTAzMTMwMDAwQzlGRDg5OEQ5ODk1MzhGNTI5OTExOTlEQjlGREE3RUM5Cis6MTAzMTQwMDA4MzA5QjFDQzI1NUMxMEM5Nzc2M0ZGQ0Y4ODEwOEQxMTNFCis6MTAzMTUwMDAwOEU3MEM5NzUxQUQ4REQ3RjA3OERCMDFCMUY3OUQ1MzlGCis6MTAzMTYwMDA5NzUyODgzMEMwMzAwODg3MTQwODg4NDA2NDhFRDU2NTJGCis6MTAzMTcwMDBCRUM5NjNGRUJDMDAwMDAwNkMxMDA0RDcyMEIwM0E4OEMyCis6MTAzMTgwMDAyMEMwMzA4MjIxQ0FBMDc0MkIxRTI5NzIwNDZEMDgwRjQyCis6MTAzMTkwMDBDOTgwQzk5MTg1NzVCMTMzQTI1MjdBM0IwQjc0MkIwODUzCis6MTAzMUEwMDA2M0ZGRTkwMDY0OUZFQ0QxMEZEMjQwRDEwRjAwMDAwMDEzCis6MTAzMUIwMDA2QzEwMDhENjMwQzA3MDk1MTVEQTQwOEUzOTE0RTVGRUQzCis6MTAzMUMwMDA5QTE0NjRFMDAyNjQ1MUZDMjkyMDA2MkE5Q0Y4NjVBMjQ2Cis6MTAzMUQwMDA1RjJBMjEwMjBBMEI0QzY1QjIxRjJDMzIwMDE1RTVGNDYwCis6MTAzMUUwMDA3NEM3MDUyRDIxMjM2NUQzMjQyRTUyOUUxQUU1RjA2RjU2Cis6MTAzMUYwMDBFODAyNjAwMjFCMkFBMjI2NjhBMDA4MkIyMjAwMEFCQjU0Cis6MTAzMjAwMDAwQzY1QjIwQzJFNTI5RDFERTVFQjY0RTIwMzhCMzg2NDE1Cis6MTAzMjEwMDBCMjJEOUUxNkM4QkM4RDY5MUVFNUU4NjREMDA1MkVFMDZGCis6MTAzMjIwMDAyMTdCRUI0OTJFMjAwQzE4RTVFMjBDRUYxMUE4RkYyOUI5Cis6MTAzMjMwMDBGMjg2QzE4Njc5OEI0QTE3RTVERjA3RTcwQTI3NzJBMzcyCis6MTAzMjQwMDA2ODcwMDQ4ODIwNzc4OTM5MjVGMjg1NjQ1MkEyMjcyMTg1Cis6MTAzMjUwMDAyRTA3QjczNjA3QjkwQzZGOUQwMUQ3QjA4OTY5NkU5MkZBCis6MTAzMjYwMDA0MjI4MjAzRDdCODczQzhBMTVDREFGNjAwMDE4QzFCMjUzCis6MTAzMjcwMDA4QzIwMkEyMDBDNTgwRTkwRDVBMDY0QTJBQzhCNjg2M0Q5Cis6MTAzMjgwMDBGRkNCQzA1MDYzRkZDM0MwRTA2MDAwMDIyRTYwMDMwRTlFCis6MTAzMjkwMDA5QjBDNkVCMjBFREM3MDBDRUExMUFBNkEyQUFDMjg1Qjk5Cis6MTAzMkEwMDBGRkI2RDdBMERBMjBEQjcwQzFDNDJEMjExRjU4MEUzODFECis6MTAzMkIwMDA4QzI2OEIyN0Q0QTAwQ0JCMEM3QUIzMjU4QTYzQzA5MEQ0Cis6MTAzMkMwMDA5QTUzODg2Mjk5NTg5ODUyOEY2NTlGNTk4RTY3OUU1QjcyCis6MTAzMkQwMDA4RDY2OTc1NTlENUE4QjY4N0I3Qjc0OEIxNUNFQjM2MDNBCis6MTAzMkUwMDAwMDBEREEyMERCNDA1ODBFMDI2NUExMEQ2M0ZGQ0MwMDEzCis6MTAzMkYwMDBEQTIwREIzMDhDMTQ1ODBEQUFENkEwQzBDMEMwRDE5REY2Cis6MTAzMzAwMDAxNTJDQTQwM0RBMjBEQjYwREY3MERDNTBDMEUwMjU2MDAwCis6MTAzMzEwMDAwMzlFMTAxRUU1QzEwQzVEMTFBRDZEMkREQzI4NUJGRjE5Cis6MTAzMzIwMDAzRjhFNjZBNUE4OEY2NzI4NjQwM0FGN0Y3N0ZCMDFCMTQ2Cis6MTAzMzMwMDBFRTlFNjY5RjY3OEQyNjhDMjlBNEREMERDQzBDOUQyNjA0Cis6MTAzMzQwMDA4QjY4MEMwQzQ4MkMyNTI1MDdCQjBDOUI2ODYzRkVDM0JGCis6MTAzMzUwMDAyQzIwNjY4OTYxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjA5Cis6MTAzMzYwMDA2MDAwQjgwOUZENTA2NUQwQjJDQkJGOEU2OUNCRUJEQkY2Cis6MTAzMzcwMDA2MERDNTBERjcwREEyMDFFRTVCQzJENjAwM0MwODA5ODUxCis6MTAzMzgwMDAxMDBDREQxMUFENkQyRERDMjg1QkZGMjQ4QjE1Qzk0MkJGCis6MTAzMzkwMDA4QTI2MjkyMjA5MDRBQTA4MkEyNjA2MEE5OTBDMDkwOTVDCis6MTAzM0EwMDA0ODI5MjUyNTY1QjEzQ0MwMjBEMTBGMDBEQjYwMkQ2QzdDCis6MTAzM0IwMDAyOERGNzBEQTIwQzBDMDFFRTVBQzlDMTBEQzUwNUJGRTNDCis6MTAzM0MwMDBCNDYzRkZDNzAwMkQyMDNEMEQ0RDQwNjVEREY5NkZFNTZECis6MTAzM0QwMDAyMkRBMzA4RjQ1NkRFOTBDOEVBQTBFOEUxNEM5RTM3RTc5Cis6MTAzM0UwMDBGMzExMkFBQzEwQzA5MDI5MjQ2NzA5MEY0NzY0RkRENzU4Cis6MTAzM0YwMDA2MDAxNDEwMEMwOTE2M0ZGRUQwMDg4MTU2NTgxNENEQUUyCis6MTAzNDAwMDAyMERCNjA4QzE0NTgwRDY2QzAyMEMwOTAyOUE0MDNEMTI1Cis6MTAzNDEwMDAwRkRBMjBDMEI2NTgwREY0NjNGRkRFMDA4QTE2MkIyMUE4Cis6MTAzNDIwMDAwNDU4MEM4Q0MwQTAyQTI0NjY4QjY4NjNGRjNBMDAwMDA1Cis6MTAzNDMwMDAwMDJCOUNGOTY1QjBDNURBMjA1ODBDOTE2M0ZEOTEwMDEyCis6MTAzNDQwMDAyQjIwMEMwQ0JBMTFBNUFBMkZBMjg2QzFDMjdGQzMwMkUxCis6MTAzNDUwMDA2MDAwRkMwREI5MEEyOTkyQTM2ODkwMDc4QzIwMDlDQzYyCis6MTAzNDYwMDAwQzY1QzBFQjI2QTI4NTY0NjBFNTJDMjA2Njg5MzFCMTJECis6MTAzNDcwMDBDQzBDMEM0NzJDMjQ2NjZGQzYwMjcwOTYwQURBRTAyQjNGCis6MTAzNDgwMDAyMTA0NTgwQzc0MjcyNDY2ODkzMDc3OTc0QjE4RTU1OTI2Cis6MTAzNDkwMDAxREU1NUE4QTMyOEIzM0MwRjQyQzIxMDQwOTlFNDAwNjY0Cis6MTAzNEEwMDBFRTExMDRDQzExMEVDQzAyOUY2MUMxRTAwRUNDMDI5RDQ2Cis6MTAzNEIwMDA2MDhGMkI5QTY2OUI2NzlDNjQ5NzY1MDhGRjAyOUY2MkVBCis6MTAzNEMwMDAyRjIwMEMxOEU1NDMwQ0ZFMTFBNUVFMkRFMjg1QThGRjc4Cis6MTAzNEQwMDAyN0Y0Q0YyRERDMjAyREU2ODU4RjE1NjVGMDkxQzAyMEQ3Cis6MTAzNEUwMDBEMTBGMDAwMDJBMkM3NDhCMTQ1ODA2NDNEMkEwRDEwRkEwCis6MTAzNEYwMDAwMERBMjBEQkUwNTgwREJDNjNGRUZFMDAwMERBMjBEQkMyCis6MTAzNTAwMDAzMDhDMTQ4RDE1NTgwRTNFRDJBMEQxMEYwMDAwODgxNUI2Cis6MTAzNTEwMDBDODg4REEyMERCMzA1ODBDOUMyQTIxMDI2NUFFREFDMDVDCis6MTAzNTIwMDA5NDA5QTkwMjI5MjUwMjYzRkVDRkRBMjAyQjIwMEM1ODJBCis6MTAzNTMwMDAwREM3NjNGRUM0MjcyNDY4REEyMERCMzAyQzEyMDQyRDZCCis6MTAzNTQwMDAxMjA1MkUwQTgwNTgwQ0ExNjNGQzdDMDBDMDIwRDEwRjBDCis6MTAzNTUwMDBEQTIwNTgwREE1OEExNUNEQTFEQTIwMDMzQjAyMkMxMkUyCis6MTAzNTYwMDAwNDU4MEQwRjI3QTQwM0MwMjBEMTBGMDBDMDIwRDEwRjk1Cis6MTAzNTcwMDAyQTJDNzQ4QjE0NTgwNjIwRDJBMEQxMEY2QzEwMEMyODYyCis6MTAzNTgwMDAyMTAyOTQxMDA4MDg0QzY1ODM2MjFGRTUwOTI5RjI5RTA4Cis6MTAzNTkwMDA2Rjk4MDI2MDAzNjYxREU1MDUyOUQyMjY2ODkwMDgyQTA3Cis6MTAzNUEwMDAyMjAwMDlBQTBDNjVBMzU0MkNGMjlENjRDMzRFMkIyMDYzCis6MTAzNUIwMDAwQzBDQjYxMUFGNjYyODYyODZDMUVDNzhFMzAyNjAwMzlBCis6MTAzNUMwMDA0NjE5RTRGQzA5QjkwQTI5OTJBMzY4OTAwNzhBMjAwOUUwCis6MTAzNUQwMDBBQTBDNjVBMzMyMjQ2Mjg1NjQ0MzJDQzBFMTJBMzEwOTE4Cis6MTAzNUUwMDBDMDcwMjcyNDY2ODkzNTlBMTE5OTJBODgzNjk5MTI5OENECis6MTAzNUYwMDAyQjg5Mzc5ODEzOTkyQzg4Mzg5OTE0MDg1ODE0OTgxNUUyCis6MTAzNjAwMDA5ODJEODkzOTJBMjUwNDJFMjUxRDI5MjUxQzI4MzAyODg2Cis6MTAzNjEwMDBDMDkyMjgyNDNDMkEzMDI5MDgwODQ3OTgxNjA5ODkwMUI1Cis6MTAzNjIwMDAyQTI0M0QyQTMxMTU5OTE3MEEwOTQxMDlBOTBDMjk5QzE4Cis6MTAzNjMwMDBFQzI5MjUxRjdFODcxOTJEMkEwMDBEQTA2MDAwMDgzRTY5Cis6MTAzNjQwMDAwMTBBM0VCMUFEMDhEQTM5MEVBQTExMEE5OTBDMjkyNUYyCis6MTAzNjUwMDAxRjJBMjExRjE4RTUwNjBBODE2MEMxRDA5NDFBOTUxQjA0Cis6MTAzNjYwMDAwMTA4M0UwMDA1M0VCMTg0MDU0ODM5ODQzQzI1OUNGQzk4Cis6MTAzNjcwMDAwRDg4MzYyOTIwMTQwOEFBMUM4RDNEMjcyNjE4MkUyNkQxCis6MTAzNjgwMDAxMzJFMjYxNDJFMjYxNTI3MjYxQjJFMjQ2QjI3MjQ2NzdGCis6MTAzNjkwMDAyNzI0NjgwODU4MUMwOTA5NDMyOTI0MTQyOTMyMTEyQUFGCis6MTAzNkEwMDAyNTJFMjgyNTJGMjcyNTI0MjcyNTI1MjcyNTJDMjcyNUE2Cis6MTAzNkIwMDAyMzI1MjUyMDI0MjUyMTJEMjUyMjg0MUEyRDIxMUM4NTEyCis6MTAzNkMwMDAxQjZGRDIwMjYwMDIwOUMwQTA5OTE4NkQwODBBQjFBQTQ2Cis6MTAzNkQwMDAwMEExMDQwMEU5MUE3RDlCMDI2M0ZGRUU4OTE4QzA4MEY3Cis6MTAzNkUwMDBDMEUxQzA3MEMwRDI5QjFEOTUxQjk2MUM5QzFFMTZFNEE5Cis6MTAzNkYwMDBEMTJDMjAzRDE1RTRFMDBDMEI0MDBEQ0MwMTBCRTczODNDCis6MTAzNzAwMDAxREU0QzMwQTc3MTAwQ0U4MzgwQjg4MTBDMEM0OUM0MTM0Cis6MTAzNzEwMDAwODc3MDI5RDQwQjBBODA5ODgxMThCMjA5QzQ5OUQ0OERDCis6MTAzNzIwMDA5NTRCOTY0MzA4NzcwMjg2MTQxOEU0RDExNUU0QjkwODNFCis6MTAzNzMwMDA3NzAyMDVCQjAyOUI0QTlCNDI5NzQ2ODgxMjg3MTEwODc1Cis6MTAzNzQwMDBEQTE0OUE0RTBEODgxMDBENzcxMTA4NzcwMjFBRTRBQzNFCis6MTAzNzUwMDAwNkQ4MTQwRDY2MTAwODc3MDI5NzRGQzc4Rjk4NEQ5OEJBCis6MTAzNzYwMDA0Qzk4NDU4NzE1OTg0NDA3MTUxNDBENTUxMTBBNTUwMkI0Cis6MTAzNzcwMDA5NTQ3MTVFNEMxOEEyNjJENDYxMDJENDYxODJENDYyMDYyCis6MTAzNzgwMDAyQzQ2MTEyQzQ2MTkyQzQ2MjEyQjQ2MTIyQjQ2MUEyODYyCis6MTAzNzkwMDA0NjE0Mjg0NjE1MkI0NjIyODgxNjI1NDYyNDI1NDYyNkZCCis6MTAzN0EwMDA4QjE3MEEwQzQ4MDkwRDQ4ODUxMzBFREQxMTA1Q0MxMTQ1Cis6MTAzN0IwMDAwODM5NDAwQkVCMzkwMjk5MTAxRUU0QjAwRENDMDIwRDE0Cis6MTAzN0MwMDA1NTExMDgyRDQwMDY1NTAyMkU0NjEzMTZFNDdCMEZEREQ5Cis6MTAzN0QwMDAxMTI1NDYxNjA4MDg0MDg1MUIwMTg4MTAwREJCMDI4NjdFCis6MTAzN0UwMDA2NzFERTRBNzA5ODgwMjBDQkIwMjE5RTQ3NzFDRTRBNTU1Cis6MTAzN0YwMDAyQjQ2MTcyRDQ2MUJBNzY2MUJFNEE0QzA3MDJDNDYxQzQ1Cis6MTAzODAwMDAwOTg4MDI4QzFFMjg0NjFFMkI0NjIzQzA5MDhCMUQyOTNBCis6MTAzODEwMDA0NjFEMjk0NjFGMThFNDlEMjk0NjI3Mjg0NjI1MjkzMTlCCis6MTAzODIwMDAxNjJFMjAwNjI5MjQ2QTI0MzExNzk2MkQyNDI1MjM4NjU2Cis6MTAzODMwMDAxQ0NDRTEyNzI0MDdDMEQ3MDkwRTQwNjRFMDgyOUEyOUY2Cis6MTAzODQwMDAwOTI4NDE2NDgwOTE2NDQwOUIyRDI0MDZDMDk4MDk0OTUxCis6MTAzODUwMDAzNjI4MEFBMDI0NjI4NTAxQzQwNEE4NDQyODIxMDQyNDJGCis6MTAzODYwMDA2Njg1MDg4ODExOEUzRjhBM0UyRDMyMTAwRUE0MTgwMEZFCis6MTAzODcwMDBDNDA0MEVBRTE4MDBFRTExMEFDQTUzMEVERDAyQzBFM0Y2Cis6MTAzODgwMDAwRTg4MDI5OEMxMUVFNDgyMDkwODRFOUVDMDhFMjA5NEM0Cis6MTAzODkwMDBDMzk4QzU5REM0MThFNDRFMURFNDdGMDVFRTExMEVBQTIxCis6MTAzOEEwMDAwMjBEQUEwMkE4QjgyNzg0Q0Y5QUMyMUVFNDQwMjRGMkNGCis6MTAzOEIwMDA5RDI3RTRBMjI0NEMxODI0RjY5RDY1NTA1MkMwMjBEMUM3Cis6MTAzOEMwMDAwRjJEMjQwNkMwQTBDMDk4MDk0OTM2MDRBOTM4NjNGRjBCCis6MTAzOEQwMDA3RkMwQTA2M0ZFMDcwMDAwNjU0RjZEQzA5OEMwQTgyQTk2Cis6MTAzOEUwMDAyNDA2NjNGRjZCMkQyNDA2QzA5MDYzRkY2M0NDNTdEQTc4Cis6MTAzOEYwMDAyMERCMzA4QzEwNTgwQzJBQzAyMEQxMEYwMERBMjBDMEY5Cis6MTAzOTAwMDBCNjU4MENCOTYzRkZFNTAwREEyMDU4MENCNzYzRkZEQzRBCis6MTAzOTEwMDAyQTJDNzQ4QjEwNTgwNTM4RDJBMEQxMEY2QzEwMDYyOEIxCis6MTAzOTIwMDAyMDA2OEEzMzZGODIwMjYwMDE2MUMwNTAxM0U0MjAyOUFGCis6MTAzOTMwMDAyMTAyMTZFNDFGNjk5MjA0MjUyNTAyRDk1MDJDMjAxNTc2Cis6MTAzOTQwMDA5QTI4MTRFNDFEOEYyNjI3MjAwQjBBRkUwQzA0NzcwOTAxCis6MTAzOTUwMDAyQjcxMUM2NEUxMzk4RTQyOEQ0MzZGQkMwMjYwMDE2Rjk0Cis6MTAzOTYwMDAwMEUxMDRCMEM4MDA4ODFBMDhBODA4MDhEODAyOTgyN0ZGCis6MTAzOTcwMDAyQjIwMDY2OEIzMkVDRTk3MkIyMjFFMkMyMjFEMDExMTYwCis6MTAzOTgwMDAwMjdCQzkwMUMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQUMwCis6MTAzOTkwMDAyMDAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkQxCis6MTAzOUEwMDBFN0MwMjBEMTBGMkQyMDY0NjRERkNBOEIyOUMwRjEwQjQyCis6MTAzOUIwMDBBQjBDNjZCRkMwMkIyMDBDMENCQzExQTZDQzI4QzI4NjU5Cis6MTAzOUMwMDAyRTBBMDg3OEVCNjExRUUzRkIwRUJFMEEyRUUyQTM2ODA2Cis6MTAzOUQwMDBFMDA1MjgyMjAwN0U4OTRGMjlDMjg1MUVFNDA3NjQ5MEY1Cis6MTAzOUUwMDA0NjFGRTQxNTlFOTBDMDg0OTg5MTI4MjAwQTk1OTMwRjU1Cis6MTAzOUYwMDA4ODAyOTg5MjhFMjAwRkVFMDI5RTk0MkYyMDA3ODgyNjMwCis6MTAzQTAwMDAyRjk1MEE5ODk2OUE5NzJFMjAwNjI1MjQwNzY4RTM0MzU3Cis6MTAzQTEwMDAyOTIxMDIyQUMyODUxREUzRUUyQUFDMjBBREJEMjVENEEyCis6MTAzQTIwMDBDRjJBQzY4NTYzRkY0RTAwMkUyMDY1Q0JFREMwODIyOENECis6MTAzQTMwMDAyNDY1QzlGNjA1RTQzMTAwMDIwMDJBNjI4MjFCRTNGNzFGCis6MTAzQTQwMDAyOTQxMDIwQkFBMDIyQTY2ODIwOUU0MzEyOTIxMDI2Mzc0Cis6MTAzQTUwMDBGRjIzMDAwMDY0REZCODhGNDIyRTIwMTYwMEYxMDQwRDEyCis6MTAzQTYwMDBFRTBDMDBFRTFBQUVBRTlFMjk2M0ZGQTM4QTIwMkIzMjI1Cis6MTAzQTcwMDAyMUIxQUE5QUIwMjkzMjIxMjgzMjIzQjQ5OTI5MzYyMUJBCis6MTAzQTgwMDA3OTg5QTkyQjMyMjIyQjM2MjE2M0ZGQTBDMDIwRDEwRkM4Cis6MTAzQTkwMDA5RjI3MjUyNDE1QUNCODI4NzUxQzJCMjAwNkMwQzEyRUU1Cis6MTAzQUEwMDBCQ0ZFNjRFMEFCNjhCNzc3MkRCQ0ZENjVERUM3MkQyMDlBCis6MTAzQUIwMDA2NEMwRjA2NEQwODY4RTI5MEVBRTBDNjZFMDg5QzBGMTM5Cis6MTAzQUMwMDAyODIwNUEyODhDRkUwOENGMzg2NUZFRTg2M0ZGNTgwMDhFCis6MTAzQUQwMDAwMEUwMDQ5MzEwQzA4MTBBRjMwQzAzODMzOUM3OEYwOEY4Cis6MTAzQUUwMDBEODAzMDhBODAxMDhGODBDMDgwODE5QTgzMzAzQzgwQzYzCis6MTAzQUYwMDBBOEI4Mjg3NTFDMDMwQjQ3MkIyNDE1ODMxMENCQjcwMERGCis6MTAzQjAwMDBFMTA0QjBCQzAwQ0MxQUFDQUMwQ0RDMDI5QzI3NjU5RTc2Cis6MTAzQjEwMDA1RUMwQjIwQjk5MDIwOTA5NEYyOTI1MDI2M0ZFNTAwMENECis6MTAzQjIwMDAyRDIwNkEwRDJENDE2NURGN0VEQTIwQzBCMDU4MEM3NTVFCis6MTAzQjMwMDA2NEFGMThDMEYxNjNGRUVGOUYyNzYzRkZEMDJFMjIxRkYyCis6MTAzQjQwMDA2NUVFMzI2M0ZGNzkwMDAwMjgyMjFGNjU4RTI3NjNGRjMwCis6MTAzQjUwMDA2RTI1MjQwNjI1MjUwMkMwOTA2M0ZFMTk2QzEwMDY2NUFCCis6MTAzQjYwMDA3MTMzMkI0QzE4QzBDNzI5M0MxOEMwQTFDMDgwMDlBOENDCis6MTAzQjcwMDAzODA4MDg0MjY0ODExMDFDRTM4QTFBRTM4QjJBQzY3RTQ3Cis6MTAzQjgwMDAyQTVDRkREMzBGNkRBQTA1MDBCMDg4MDA5MDhDODk0MDk3Cis6MTAzQjkwMDBDMEEwMDk4ODQ3MUZFM0I0MDgwQjQ3MDk0QzUwMDkwRDIyCis6MTAzQkEwMDA1MzA0REQxMEI0Q0MwNENDMTAwRDVEMDI5RDMxMENCQjcwCis6MTAzQkIwMDAwMjlCMzA4ODQzOEUyMDk4MzUwRkVFMDI5RTMyOEQyNjcwCis6MTAzQkMwMDBEODUwQTZERDlEMjY4RTQwQzA5MDBFNUU1MDY0RTA5N0QyCis6MTAzQkQwMDAxQ0UzOUExRUUzODkwMzhCMEJDMEY0OUZCMTlFQjAyREFBCis6MTAzQkUwMDAyMDBBOTlCMzBDREQwMjlEQjI4RjIwMENGRjAyOUZCNDE2Cis6MTAzQkYwMDA4RTI2MkQyMDA3OUVCNjhDMjgyREI1MEE5Q0I3MjkyNDI5Cis6MTAzQzAwMDAwNzJGMjAwNjJCMjA2NDY5RjMzOUNCQjYxREUzNkIyMzA1Cis6MTAzQzEwMDAyMDE2OEREMjBCMzMwQzAwRDEwNDAwMzMxQUI0OERBM0JGCis6MTAzQzIwMDBDMzkzMjkyMjIwMEMxM0UzNkExRkUzNjEwQzJFMTFBRjBBCis6MTAzQzMwMDBFRUEzMjIyOTI0Q0YyRkUyODVEMkEwMEZERDBCMkRFNkEzCis6MTAzQzQwMDA4NUQxMEYwMDJFMjAwQ0I0OEMwQ0VCMTExRkUzNjExREVECis6MTAzQzUwMDBFMzU4QUZFRUFEQkIyMkIyODUyOUU0Q0YwMkMyMEIyMkZFCis6MTAzQzYwMDBCNjg1RDJBMEQxMEYwMDAwMkUyMDBDMUNFMzUxMUZFMzFCCis6MTAzQzcwMDA1ODBDRUIxMUFGRUVBQ0JCMjJCMjg1MjlFNENGMDI4MjI3Cis6MTAzQzgwMDAwQjIyQjY4NUQyQTBEMTBGQzBEMDBCQUQzODdEQzgwMkIzCis6MTAzQzkwMDA2M0ZFRUM2M0ZFRTA4RTQwMjcyQzc0N0JFRTEyREE3MDNDCis6MTAzQ0EwMDBDMEIzMkMzQzE4REQ1MDU4MEE3Qjg5NDBDMDgwNjNGRUFECis6MTAzQ0IwMDBFM0RFNjBEQTIwREIzMERDNDBERDUwNTgwMDA1OUExMDhFCis6MTAzQ0MwMDBEQjUwMDc3QTAyNTgwNDRDODgxMDYzRkVGODAwMDAwMEFECis6MTAzQ0QwMDA2QzEwMDY5MjEyMUVFMzQyOEM0MEFFMkQwQzhDNDcyRUM3Cis6MTAzQ0UwMDAzQzE4MDRDQTBCRDlBMDdEQTMwMjI5QURGODc1QzMwMjA0Cis6MTAzQ0YwMDA2MDAwODRDMEIwQzAyM0MwQTA5RDEwNkQwODQ0Qjg5RjcwCis6MTAzRDAwMDAwRUI4MEE4RDkwMEVCNzBCQjg3NzBENkQzNkFEQUE5RDIzCis6MTAzRDEwMDA4MDBENjYwQ0Q4RjAwMDgwODgwMDcwOEM4NzkwNjhCMUE4Cis6MTAzRDIwMDAyNEIyMjI3N0QzMjc4ODkxQzBEMENCODc5ODkwMjc5QzQ0Cis6MTAzRDMwMDAxMDAwNzA4ODAwRjA4QzlEOTFDQjZGQzA4MTA4QkIwMzkwCis6MTAzRDQwMDA3NUNCMzY2M0ZGQjRCMTIyMkVFQzE4NjNGRkQ0ODU5Mjk1Cis6MTAzRDUwMDAwRDc3MEM4NjkzOTc5MEE2RDY3RDZCMDFCMTU1OTY5M0ZGCis6MTAzRDYwMDA5NTkyNjAwMDE2QjNDQzJEOUMxODg4MTBEOUQwNzhEM0NBCis6MTAzRDcwMDBDNzI5RERGODYzRkZDMTAwQzAyMzhBNDIxQkUzNDcwMDY3Cis6MTAzRDgwMDBDRDMyMkQ0NDAyOUIzMDkyMzE4OTQyODU0Mzc5QTEwNTgxCis6MTAzRDkwMDAxRUUzNDMwRTU1MDE4NzEyMUJFMzM0ODk3MDk1MzUwQkUyCis6MTAzREEwMDA5OTAyOTkzMjg4NDIwQTg4MEM5ODQyODY3NkE2QTY5NjhECis6MTAzREIwMDA3NjhGNDRBRkFGOUY0NEQxMEYwMDAwMDA2QzEwMDg5MzgyCis6MTAzREMwMDAxMUQ2MzA4ODMwQzA5MTA4NjM1MTA4MDg0NzA1OTgzOEVCCis6MTAzREQwMDA5ODEyMjgyMTAyMjkzQ0ZEMDgwODRDNjU4MTY1NjU5MUVGCis6MTAzREUwMDA2MjhBNjMwQTJCNTA2NUIxOEIwQTZGMTQyRTBBRkY3QzFFCis6MTAzREYwMDBBNjBBMkMyMDVBQ0NDNDJEMEEwMjJEMjQ1QTdGRTAwMjk4Cis6MTAzRTAwMDA2MDAyMTU4OTI4ODgyNjFGRTMyNjA5ODgwQzY1ODIwRjIxCis6MTAzRTEwMDAyRTIwMEIwRkVFMEIyREUwRkUyRUUwRkYwOEREMTEwRTI1Cis6MTAzRTIwMDBERDAyMUVFMzIwQUVERDFFRTMyMDFDRTMyMDBFREQwMURCCis6MTAzRTMwMDAwRENDMzdDMTgwMDg0ODM3Qjg4REI0ODg5ODEwODk2MDk4Cis6MTAzRTQwMDAxQUUyREU3Qjk2MjE4QjYyMkFBMDIxOUMxNDdCQTMxN0E5Cis6MTAzRTUwMDA5RDEzMkEyMDBDOEIxMDhDMjA1ODBCOTc4QzE0OEQxM0RCCis6MTAzRTYwMDBEQkEwQ0VBQzYwMDFDNDAwMkUyMDBDMUJFMkQxMENFQTFBCis6MTAzRTcwMDAxMTBCQUEwODJCQTI4NjFGRTJDRjdCREIzQjBGRUYwQUI4Cis6MTAzRTgwMDAyRkYyQTM2OEYwMDUyODIyMDA3Rjg5MkMyQkEyODU2NERECis6MTAzRTkwMDBCMEFBODc2Mjg4MjZERTcwMEM3OTM2MDk3QTBDNkZBRDdECis6MTAzRUEwMDAxQzhGMjc5QjE1MDhGRjBDNzdGMzE5N0U3QjcyOUQxM0RGCis6MTAzRUIwMDA5QzE0OUIxNUNGNTY2MDAwMjVDMEIwNjNGRkQwRDc5MEVGCis6MTAzRUMwMDA2M0ZGREQwMDAwOUQxMzlDMTREQTIwREI3MDU4MEIwOEEzCis6MTAzRUQwMDA4QjE1OEMxNDhEMTM2NUEwNkE4RTYyNjNGRkNDMDBEQTlCCis6MTAzRUUwMDAyMDhCMTFEQzQwNTgwQUFFRDZBMDhCMTVDMDUxREU3MDc1Cis6MTAzRUYwMDBEQTIwREM2MERENDA1QkZGNzY4RDEzOEMxNEQ5QTAyRUI4Cis6MTAzRjAwMDAyMDBDMUJFMkFCMUZFMkIyMENFQTExQUZFRkMwRTBBQjNBCis6MTAzRjEwMDBBQTJCQTI4NTJFRjRDRjBCOTkwQjI5QTY4NTYzRkYxRDMyCis6MTAzRjIwMDAwMERBMjBEQzYwREQ0MERFNzA4OTEyMjgyMDA3REY1MEQ3Cis6MTAzRjMwMDBBOTg4MjgyNDA3NUJGRjA5RDJBMEQxMEYwMERCRTBEQUIzCis6MTAzRjQwMDAyMDU4MEIyOTY1NTBFRjJBMjAxNDBBM0E0MDY1QTBFQjRGCis6MTAzRjUwMDBEQjYwREM0MEREMzAwMjJBMDI1ODA5OUNENkEwNjRBMDU4Cis6MTAzRjYwMDBENTg0QTE4M0EwMDQwNDQ3MDMwNTQ3OTUxMjAzNjM1MTM4Cis6MTAzRjcwMDBDMDUxNjNGRTVDMkMyMDA2RDMwRjI4Q0NGRDY0ODBBNUM1Cis6MTAzRjgwMDA2OEM3MDRDMDkzMjkyNDA2MkMyMDA2QzBCMThENjQxRjg1Cis6MTAzRjkwMDBFMjhBOUQyNzlEMjg5RDI5OEZGMjlEMjYwMEYxMDQwMDJECis6MTAzRkEwMDBCQjFBMDBGMDA0QjBCRTBFREQwMUMwRjBBREJCOEQ2NUU0Cis6MTAzRkIwMDAyRjI0MDcwRDBFNUUwMUVFMTFBRUJCMkUwQUZFQjBCQjI0Cis6MTAzRkMwMDAwQjBCMTkwRUJCMzZDMEUyMEIwQjQ3MEVCQjM3MkIyNDc1Cis6MTAzRkQwMDAxNjE4RTI4MjBBMDk0NTBEMEI0MjJCMjQwQjI5MjQwQUVDCis6MTAzRkUwMDBCNEJFMkUyNDBDN0Q4ODU3MjkyMDE2MkZDQ0ZEQjA5RDAxCis6MTAzRkYwMDAwQTVDNTIwRENDMzYyQzI0NjQ2NUZERUMwQzBDNDc2NDM1Cis6MTA0MDAwMDBDREU2MThFMjZEOEUyODg4ODIwQzlGMEMwMDgxMDQwMDlBCis6MTA0MDEwMDBGRjFBQUZFRTlFMjk2M0ZEQ0YxQ0UyOUM2M0ZFMTMwMEU2Cis6MTA0MDIwMDAxQ0UyOTM2M0ZFMEM4RDY1NjNGRkE1MDBEQTIwMkIyMDU0Cis6MTA0MDMwMDAwQzU4MEIwNjY0NUYwRkMwMjBEMTBGMDBDMDIwRDEwRkI5Cis6MTA0MDQwMDBDMDkzMjkyNDE2QzA5MzYzRkZBMDAwMDA2QzEwMDRDMDI1Cis6MTA0MDUwMDA2MDE3RTI1NjFERTI1OUMzODEyOTMxMDEyQTMwMDgyOTJGCis6MTA0MDYwMDAyNDBBNzhBMTA4QzNCMjdCQTE3MkQyNjBEMTBGQzBDMTZCCis6MTA0MDcwMDA2NTUwNTEyNjI1MDIyQUQwMjAyRjIwMEIyOTBBRkIyQjIwCis6MTA0MDgwMDAyMDE0MkUyMDE1MjYyNDE1MDlCQjAxMERGRjA5MjhGMTQ3Cis6MTA0MDkwMDAxQzJCMjQxNEE4RUUyRUY1MUM2NEEwQjUyQjIyMUUyODgwCis6MTA0MEEwMDAyMjFEMDExMTAyN0I4OTAxREI2MDY0QjAxNzJDQjAwNzZGCis6MTA0MEIwMDAyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMDgzCis6MTA0MEMwMDBEQkEwNjVBRkU3REIzMERDNDBERDUwREEyMDU4MDBEOEZDCis6MTA0MEQwMDAyOTIxMDIwOTBCNENDQUIyRDJBMEQxMEYwMENDNUEyQzE0Cis6MTA0MEUwMDAzMDA4N0JDMTM3MkVEMDIwNjRFMDJEMDIyQTAyMDMzQjJBCis6MTA0MEYwMDAwMkRDNDBERDUwNTgwMENFRDJBMEQxMEYyQjIwMTRCMEVFCis6MTA0MTAwMDBCQjJCMjQxNDBCMEY0MTY0RjA4MjdDQjdDQUMwQzEwQ0Q2Cis6MTA0MTEwMDA5QzAyMkMyNTAyRDJBMEQxMEZDMDIwRDEwRjJFMjAwNjQ4Cis6MTA0MTIwMDA2OUUyQzEyRjIxMDIwRjBGNEM2OUYxQjgyNjI0MDYyNjNGCis6MTA0MTMwMDAyNTAyMkIyMjFFMjgyMjFEMkEyMDBCMjkyMDE1MERBQTFDCis6MTA0MTQwMDAwOTJDQTExQzI2MjQxNUFDOTkyOUE1MUM3QjgxNEE2MDQ5Cis6MTA0MTUwMDAwMDQ5QjBCQjJCMjQxNDBCMEQ0MUNCRDY3Q0I3MDIyQ0VECis6MTA0MTYwMDAyNTAyMkIyMjFFMkUyMjFEN0JFOTAyMkIwQTAwNjRCMEExCis6MTA0MTcwMDAxNzJDQjAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDMDI0Cis6MTA0MTgwMDBEMTBCODAwMERCQTA2NUFGRTdDMDIwRDEwRjI2MjQwNjRECis6MTA0MTkwMDBEMkEwRDEwRjI2MjQwNjYzRkZDN0RCNjAxREUyMDc2NEFGCis6MTA0MUEwMDBCRjQyMkNCMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0NBCis6MTA0MUIwMDBDMEQxMEI4MDAwREJBMDY1QUZFNzFERTFGRjYzRkYyNEVBCis6MTA0MUMwMDA2QzEwMDQyODIwMDZDMDY0NkY4NTY0Q0E1QjI5MjAxNDIzCis6MTA0MUQwMDA3RDk3MjZEQTIwREIzMERDNDAwNTVEMDI1ODAwMTkyOTg2Cis6MTA0MUUwMDAyMTAyMDkwQTRDQzhBM0MwMjBEMTBGMDBDMEIxMEI5QjBCCis6MTA0MUYwMDAwMjJCMjUwMkMwMjBEMTBGMDAwMDAyMkEwMjAzM0IwMjNECis6MTA0MjAwMDAyQzBBMDE1ODAwQ0FDOUFBREEyMERCMzBEQzQwNTgwOTYwCis6MTA0MjEwMDBFNDI5QTAxMUQzQTA3RTk3MDgyQzBBRkQwQzlDMDEyQzQ4Cis6MTA0MjIwMDBBNDExQzA1MTJEMjAxNDA2REQwMjJEMjQxNDYzRkZBMjE5Cis6MTA0MjMwMDBEQTIwREIzMERDNDBERDUwQzBFMDU4MDk2NEQyQTBEMTg4Cis6MTA0MjQwMDAwRjAwMDAwMDZDMTAwNjE2RTFEQTFDRTFEQTY1NTEzQjQ0Cis6MTA0MjUwMDBDMEUxMTdFMUQ2MjgyMTAyOEIyMDA4MDg0QzY1ODA3QjNECis6MTA0MjYwMDAyOTMyMDAwOTY5NTE2OTkzNzIyQTYyOUU2RUE4NDgyQTEwCis6MTA0MjcwMDA3MjI2NjhBMDAyN0FCOTNGMkE2MjlEQjQ0RkNCQTcyQjYxCis6MTA0MjgwMDAyMDBDMENCRDExMDZERDA4MjhEMjg2NzhGQjE1MENCRjZBCis6MTA0MjkwMDAwQTJGRjJBMzY4RjAwNDg4MjA3Rjg5MDcyREQyODVEM0U2Cis6MTA0MkEwMDAwRjY1RDA2MDJBMjEwNDE5RTIwMkQzMEY3QTlCMUREQTMwCis6MTA0MkIwMDAyMDU4MDg2NDYwMDAyNDAwMkMyMTA0MUJFMUZEN0NCQjE1Cis6MTA0MkMwMDAxM0RBMjBDMEI2NTgwODVGQzk1MzYwMDBFRkRBMjA1OEVGCis6MTA0MkQwMDAwQTQ2NjAwMDA2REEyMEMwQjY1ODBBNDM2NTUwREREQ0E1Cis6MTA0MkUwMDA0MERCMzA4RDMwREEyMDBENkQ1MTU4MDhCOEQzQTA2NDEyCis6MTA0MkYwMDBBMENBMUNFMUIwQzA1MTg0QTE4RUEwMDQwNDQ3MEUwRUQ4Cis6MTA0MzAwMDA0NzYzRkY1MDAwMkIyMTA0QzA4Qzg5MzFDMDcwREY3MERGCis6MTA0MzEwMDAwOUY5NTAwOThGMzg2RUI4MTcyQzIwNjZBRUNDMEMwQ0ZBCis6MTA0MzIwMDA0NzJDMjQ2NjdDRkIwOTlEMTA1ODA4Q0E4RDEwMjcyNDUxCis6MTA0MzMwMDA2Njk0RDExRUUxQjZCOERDOUVEMDY1NTA1NkMwRDdCOEExCis6MTA0MzQwMDAzQUMwQjFDMEYwMENCRjM4MEYwRjQyQ0JGMTE5RTE5NDY1Cis6MTA0MzUwMDAxOEUxOTYyODk2N0VCMDRCRDMwRjZEQkEwNTAwQTA4ODYxCis6MTA0MzYwMDAwMEMwOEMyQzIwMENDMDIwMURFMTlBMENDRjExQTZGRkEwCis6MTA0MzcwMDAyRUYyODVBRENDMjdDNENGMEU0RTBCMkVGNjg1RDEwRjc1Cis6MTA0MzgwMDBDMDgwMEFCODM4NzhEMENENjNGRkMxMDA4RTMwMEUwRUUxCis6MTA0MzkwMDA0NzYzRkVCRDJBMkM3NDJCMEEwMTA0NEQwMjU4MDhCRDQ4Cis6MTA0M0EwMDAyRjIwMEMxMkUxOEIwQ0Y5MTFBNjk5QTJGRjI3RjRDRjU0Cis6MTA0M0IwMDAyODkyODVEMkEwMDg0ODBCMjg5Njg1RDEwRkMwMjBEMTFECis6MTA0M0MwMDAwRjAwMDAwMDZDMTAwNEMwNjBDQjU1REIzMERDNDAwNUYyCis6MTA0M0QwMDA1RDAyMDIyQTAyNUJGRjlCMjkyMTAyMDkwODRDQzg4MjY4Cis6MTA0M0UwMDBEMkEwRDEwRjJCMjAxNEIwQkIyQjI0MTQwQjBDNDFDQjJCCis6MTA0M0YwMDBDNTdEQjdFQkMwQzEwQzlDMDIyQzI1MDJEMkEwRDEwRjA5Cis6MTA0NDAwMDAwMDAwMDIyQTAyMDMzQjAyMDY2QzAyQzBEMEM3RjcyRTRFCis6MTA0NDEwMDAyMDE0MjgzMTAxMjYyNTAyMjgyNDBBMEZFRTAxMkUyNDFCCis6MTA0NDIwMDAxNDU4MDEwRDYzRkZBMzAwMjYyNDA2RDJBMEQxMEYwMDZCCis6MTA0NDMwMDA2QzEwMDYyODIxMDJENjIwMDgwODRDNjU4MDlEMkIyMDkwCis6MTA0NDQwMDAwQzEyRTE1QjBDQjgxMUEyODgyQTgyODZCNTQ5N0E5M0Q2Cis6MTA0NDUwMDAwMjYwMDA5NzE5RTE1ODA5QjkwQTI5OTJBMzY4OTAwOEU3Cis6MTA0NDYwMDAyQTYyMDAwOUFBMEM2NUEwODIyODgyODUxQ0UxNjM2NDg3Cis6MTA0NDcwMDA4MDc5OUM4MEI4ODdCMTRCOUI4MTlCMTA2NTUwNzRDMDNDCis6MTA0NDgwMDBBN0Q5NzAyODBBMDFDMEQwMDc4RDM4MEQwRDQyQ0JERUE4Cis6MTA0NDkwMDAxRkUxNDQxRUUxNDUyRUY2N0VEODMwRDMwRjZENEEwNTRDCis6MTA0NEEwMDAwMDgwODgwMDkwOEMyRTMwMDhDMEEwMDBFRTMyMkU3NDYwCis6MTA0NEIwMDAwMDI4NjAwQzE5RTE0NzBDOEQxMUEyRERBOTg4QzAyMEVECis6MTA0NEMwMDAyQ0QyODUyMjg0Q0ZEMkEwMENCQzBCMkNENjg1RDEwRjQ4Cis6MTA0NEQwMDBDMEYwMDM4RjM4N0ZBMEMwNjNGRkI0MDBDQzU4MkE2Q0IzCis6MTA0NEUwMDA3NERCMzBEQzQwNTgwN0YxQzAyMEQxMEZEQTYwNTgwOTg2Cis6MTA0NEYwMDBCRTYzRkZFN0RENDAyQTZDNzRDMEIwREM3MDU4MDg2NTBECis6MTA0NTAwMDAyRTMwMDg4QjEwMDBFRTMyMkU3NDAwMjg2MDBDMTlFMTVBCis6MTA0NTEwMDAzMDBDOEQxMUEyRERBOTg4QzAyMDJDRDI4NTIyODRDRjM5Cis6MTA0NTIwMDBEMkEwMENCQzBCMkNENjg1RDEwRjAwMDA2QzEwMDQyOTM2Cis6MTA0NTMwMDAyMDE0MjgyMDA2QjE5OTI5MjQxNDY4ODEyNEMwQUYyQ0E2Cis6MTA0NTQwMDAwQTAxMkIyMTAyMkMyNDA2N0JBMDA0QzBEMDJEMjUwMkI5Cis6MTA0NTUwMDAwMjJBMDIwMzNCMDIwNDRDMDJDMEQwNTgwMEJGRDJBMDgyCis6MTA0NTYwMDBEMTBGQzAyMEQxMEYwMDAwNkMxMDA0MjkzMTAxQzJCNDVBCis6MTA0NTcwMDAyOTI0MEEyQTMwMTFDMjgzNzhBMTZDN0JBMTY5NjQ1MDc2Cis6MTA0NTgwMDA0NzJDMjAwNkMwNjg2RkM1NjJDQTU3MkQyMDE0N0NEN0ZGCis6MTA0NTkwMDAyMkRBMjBEQjMwREM0MERENTA1QkZGQTUyOTIxMDIwOTU3Cis6MTA0NUEwMDAwRTRDQzhFMkMwMjBEMTBGQzBGMTBGOUYwMjJGMjUwMjkwCis6MTA0NUIwMDBDMDIwRDEwRkRBMjBEQjMwQzBDMDVCRkZEQzI4MjAxNDI0Cis6MTA0NUMwMDAwNjg4MDIyODI0MTQ2M0ZGQzcyOTIwMTUxQkUwRkIyQTU0Cis6MTA0NUQwMDAyMDBCQzBDMDlDMjQwQkFBMDkyQkExMUMyQzI0MTVBQkJBCis6MTA0NUUwMDA5OTI5QTUxQzYzRkY5OTAwQzAyMEQxMEZEQTIwREIzMDg4Cis6MTA0NUYwMDBEQzQwREQ1MEMwRTA1ODA4NzVEMkEwRDEwRjAwMDAwMEFCCis6MTA0NjAwMDA2QzEwMDRDQjU1MTNFMEY2MjUyMjFGMEQ0NjExMDY1NUZDCis6MTA0NjEwMDAwQ0EzMjMyNjIyMUUyNTI2MUYwNjQ0MEIyNDI2MUU3M0M4Cis6MTA0NjIwMDA0QjFEQzg1MkQyNDBEMTBGMjgwQTgwQzA0MDI0MjYxRkZCCis6MTA0NjMwMDBBODI4MjgyNjFFMjgyNjFERDI0MEQxMEZDMDIwRDEwRjIxCis6MTA0NjQwMDAyNDRERjgyNDI2MUU2M0ZGRDgwMDAwMDA2QzEwMDQyOEI3Cis6MTA0NjUwMDAyMDA2RDYyMDZFODUwMjYwMDBERTE3RTBENTFERTBEQzY2Cis6MTA0NjYwMDAxOUUwRDVDMEMxQzAyMDJBOENGQzY0QTEzMjJCNjEwMkE0Cis6MTA0NjcwMDBCNDRFMEIwQjRDNjVCMEE4MkI2MDBDMkE2MjAwMENCODMyCis6MTA0NjgwMDAxMTA3ODgwODJGODI4NjA5QjkwQTdGRTMwMjYwMDA5RjFDCis6MTA0NjkwMDAyOTkyQTM2ODkwMDUwOUFBMEM2NUEwOTMyODgyODU2NEQ1Cis6MTA0NkEwMDA4MDhEQjg4OTFCRTBEQTk0ODE5QjgwNjU1MTREQzBCNzNECis6MTA0NkIwMDBCODM4QzBBMUMwRTAwOUFFMzgwRTBFNDI2NEUwNDgxQTE2Cis6MTA0NkMwMDBFMEI4MUZFMEI5MkZBNjdFQjA0QTZEQUEwNTAwODA4ODI5Cis6MTA0NkQwMDAwMDkwOENDMEEwMkU2MDBDMENFODExQTc4ODJGODI4NTVBCis6MTA0NkUwMDBBREVFMEY0RjBCMkY4Njg1MkI2MDA2MjJFNENGNjhCMTBECis6MTA0NkYwMDAyQTI5NjAxNUMwQjJDOTlBRDJBMDJENjEwMjJCNjQwNjg2Cis6MTA0NzAwMDAwQ0REMDIyRDY1MDJEMTBGQzBFMDA4QUUzODdFQjBCN0Q3Cis6MTA0NzEwMDA2M0ZGQUIwMDIyNjQwNkQyQTBEMTBGMDBEMkEwRDEwRjVDCis6MTA0NzIwMDAwMENDNTdEQTYwREIzMERDNDA1ODA4OURDMDIwRDEwRjQ4Cis6MTA0NzMwMDBEQTYwNTgwOTJENjNGRkU4MDAyODIyMUUyOTIyMUQ3ODFGCis6MTA0NzQwMDA5OTAyMjgwQTAwQzE3NkMxQzFDMUQyMUJFMEE1QzEyNENCCis6MTA0NzUwMDBBQjZCNjQ4MDQzNzg5MTQwMkE4MDAwMENBRjBDNjRGMDBFCis6MTA0NzYwMDBBRTBEQUUwQzY0RTBBODAyQUYwQzY0RjBBMjA3QUUwQzc0Cis6MTA0NzcwMDA2NEUwOUMyRkFDRTg2NEYwOTYyRUFDRTc2NEUwOTAyRkU4Cis6MTA0NzgwMDBBQ0U2NjRGMDhBMkE4MDA3MDhBODBCMDg4QTAyN0I4M0JCCis6MTA0NzkwMDAwMjJBOERGOEQ4QTA2NUFGQkJDMDkwNjAwMDczMDAwMEZFCis6MTA0N0EwMDAyQjYwMEMwQ0I4MTFBNzg4MkU4Mjg2NkVFODc5MDlCQUE2Cis6MTA0N0IwMDAwQTJBQTJBMzY4QTAwNDhFNjA3QUU5NkIyQTgyODU2NDIzCis6MTA0N0MwMDBBMDY1MUZFMDhEQzBFMzJFNjQwNjlFQTE5RkEwMUZFMEEwCis6MTA0N0QwMDBCOTJFNjAwQTkyQTMwRkVFMDI5RUEyOEU2MDBGRUUwMjI3Cis6MTA0N0UwMDA5RUE0MkY2MDE0N0FGRjQ3MjJBNDE3QURCRTJGODI4NUE2Cis6MTA0N0YwMDAyMkU0Q0YyRkZDMTgyRjg2ODU2M0ZFNzAyQTZDNzRDMENDCis6MTA0ODAwMDBCMURDOTBERDQwNTgwN0EzMURFMDcyQzBDMTYzRkVDNDU3Cis6MTA0ODEwMDBEOUEwREE2MERCMzBEQzQwREQ1MEMyRjBDMUUwMDlGRTM3Cis6MTA0ODIwMDAzOTU4MDdFQUQyQTBEMTBGREE2MDU4MDhFRjYzRkVGMERBCis6MTA0ODMwMDAyQ0E0MTcwREJFMDgyOTgyODUyMkU0Q0YyOTlDMTgyOUIzCis6MTA0ODQwMDA4Njg1NjQ1MDBDMkE2Qzc0MDQ0QjAyNTgwMTZCRDJBMDBDCis6MTA0ODUwMDBEMTBGQzAyMEQxMEYwMDAwNkMxMDA2MkIyMjFFMjgyMjgxCis6MTA0ODYwMDAxRDkzMTA3Qjg5MDFDMEIwQzBDOUMwM0JDMUYyMDQwNkQyCis6MTA0ODcwMDA0MDFERTA1QkMwRTJDMDc0MDc0NzAxMEU0RTAxQUQyRDQ0Cis6MTA0ODgwMDA5RTExQzA0MDJFMEExNDY0QjA2RTZEMDg0NDI4MjIxRDhCCis6MTA0ODkwMDA3QjgxNjUyQUIwMDA3RUExM0I3RkExNDc3QjUxMjA3Q0I0Cis6MTA0OEEwMDBBMTQ5NjhBOTE3NjhBQTE0NzNBMTExQzA5Rjc5QTEwQzI2Cis6MTA0OEIwMDBDMThCNzhBMTA3QzFBRTI5MEExRTI5QjQwMDdDQTEyQkE3Cis6MTA0OEMwMDAyQUIwMDcwQkFCMEJEQUIwN0RCMzAyMkFCREY4REJBMDMwCis6MTA0OEQwMDBDQUE1NjNGRkI0MjhCMDEwODkxMTY5ODdCQjY0OUZCODZCCis6MTA0OEUwMDA2M0ZGREMwMDY0N0ZCNDYzRkZENTAwMDA2NDZGRDBDMDU5Cis6MTA0OEYwMDA0MUMxQUUyQUI0MDA2M0ZGQzYyQjIxMDJDRUJFMkEyMkRDCis6MTA0OTAwMDAxRDJCMjIxRTdBQjEyQThDMTA3Q0IxMjE3QUI5MDFDMEVDCis6MTA0OTEwMDBCMEM5QjkxM0UwMjZEQTIwMjhCMDAwMkNCMDA3MDM4ODBDCis6MTA0OTIwMDAwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3RDI0MEUzCis6MTA0OTMwMDBEMTBGODkxMDY1OUZENDYzRkZGMzAwMDA2QzEwMDhDMDhECis6MTA0OTQwMDBEMEM4NTk4QzMwMjkyMTAyMEMwQzQ3NjAwMDBDOEUzMEU1Cis6MTA0OTUwMDAwRTFFNTA2NUUxOUUyOTIxMDJDMEMxMTZFMDE1MDkwQjBCCis6MTA0OTYwMDA0QzY1QjA5MDhBMzAwQTZFNTE2OEUzMDI2MDAwODUyRjcyCis6MTA0OTcwMDA2MjlFMUJFMDBFNkVGODUzMkJCMjI2NjhCMDA1MkUyMjA1Cis6MTA0OTgwMDAwMDdCRTk0NzI3NjI5REI3NDhDQjdGOTcxMDJCMjAwQzBGCis6MTA0OTkwMDBCMDRFMENCRjExQTZGRjI5RjI4NjlFMTI3OThCNDExN0VCCis6MTA0OUEwMDBFMDA1MDdCNzBBMjc3MkEzNjg3MDA0ODgyMDc3ODkzMDZBCis6MTA0OUIwMDAyOUYyODVERjkwRDc5MDY1OTA2NTJBMjEwNDE5RTAzQ0EzCis6MTA0OUMwMDA3QTlCMjJEQTIwNTgwNjlGNjAwMDI5MDAyQzIxMDQxQkM0Cis6MTA0OUQwMDBFMDM4N0NCQjE4REEyMEMwQjY1ODA2OUFDOTU4NjAwMTg2Cis6MTA0OUUwMDA0Q0MwOTA2M0ZGQ0NEQTIwNTgwODdGNjAwMDA2REEyMEM0Cis6MTA0OUYwMDBDMEI2NTgwODdENjU1MTM1REM0MERCMzA4RDMwREEyMDlCCis6MTA0QTAwMDAwRDZENTE1ODA2RjJDMEQwRDNBMDY0QTEyMDI5MjEwMjE3Cis6MTA0QTEwMDBDMDUxODRBMThDQTAwNDA0NDcwQzBDNDc2M0ZGM0UwMEU2Cis6MTA0QTIwMDBDMDlDODgzMURCRDAwOEY4NTAwODlCMzgyODIxMDQ5OEI2Cis6MTA0QTMwMDAxMTZFODgyMzI4MjA2NkFDOEMwQzBDNDcyQzI0NjY3Q0Q1Cis6MTA0QTQwMDBCQjE1OUYxMzlFMTQ4QTEwOEIxMTU4MDcwMjhFMTQ4RjZBCis6MTA0QTUwMDAxM0MwRDAyRDI0NjY4QTMwQzA5MkMxQzgxQkRGRUM3RjAyCis6MTA0QTYwMDBBNjA5OUJGMDk5RjEyQ0Y0MDgyN0ZDMTA2NTUwQTRCODE2Cis6MTA0QTcwMDAzQURGNzBDMDUxQzA4MDA3NTgzODA4MDg0MjY0ODA2NzI4Cis6MTA0QTgwMDAxOERGQzgxOURGQzkyOTg2N0U2QTQyMEFEMzBGNkRFOThCCis6MTA0QTkwMDAwNTAwQTA4ODAwRjA4Q0MwQTA4OTMwQjRFMzdGOTYyODgwCis6MTA0QUEwMDBDMEYyMDdFOTBCMkM5NDA4OUI5MDlGOTEyRjIwMEMxMkM5Cis6MTA0QUIwMDBERkM4MENGODExQTY4ODI5ODI4NUEyRkYyREY0Q0ZEMjc5Cis6MTA0QUMwMDBBMDA5MzMwQjIzODY4NUQxMEYyMjIwMEM4OTEyMThERjExCis6MTA0QUQwMDBDMDBDMkIxMUE2QkJBODIyMkQyNENGMkNCMjg1RDJBMEFFCis6MTA0QUUwMDAwQzk5MEIyOUI2ODVEMTBGQzA4N0MwOTAwQTU5Mzg3OTI3Cis6MTA0QUYwMDA4MDk2NjNGRjhBREIzMERBMjBDMEMxQzBEMDVCRkY1NkVFCis6MTA0QjAwMDAyOTIxMDJDMEQwMkE5Q0ZFNjVBRTREMkQyNTAyQzA5MDAxCis6MTA0QjEwMDA2M0ZFNDUwMDlFMTQyQTJDNzRDMEIxREM3MERENDA1ODQxCis6MTA0QjIwMDAwNkREOEUxNEMwRDAxQkRGQjlDMUM4NjNGRjZBQzAyMDg4Cis6MTA0QjMwMDBEMTBGMDAwMDZDMTAwNjI4MjEwMjE2REY5RDA4MDg0Q0RBCis6MTA0QjQwMDA2NTgyMTkyOTYyOUU2Rjk4MDI2MDAyMjAxOURGOTgyOUY4Cis6MTA0QjUwMDA5MjI2Njg5MDA3OEEyMDA5QUEwQzY1QTIwRjI3NjI5REY5Cis6MTA0QjYwMDBDMENDNjQ3MjA3MkIyMTA0OEUzMUMwQTBEREEwMEVGRUU0Cis6MTA0QjcwMDA1MDBFQ0QzODZFQjgxMDJDMjA2NkIxQ0MwQzBDNDcyQ0UyCis6MTA0QjgwMDAyNDY2N0NEQjAyNjAwMUVGQzBDMTI5MzAwODFCREY4QThDCis6MTA0QjkwMDA2NDkwOUMyRjBBRkZDMEQzQjA5RTY0RTEwMjY4OTIxMzE4Cis6MTA0QkEwMDA2NDUwODgyQTJDNzQwNDRCMDI1ODAwOTMwQUEyMDIwNjBGCis6MTA0QkIwMDAwMDAwMDAwMDJCMjAwQzI3MjEwNDBDQkMxMUE2Q0MyOURFCis6MTA0QkMwMDBDMjg2MjgwQTA4Nzk4MzAyNjAwMUI5MTlERjdBMDlCOTE3Cis6MTA0QkQwMDAwQTI5OTJBMzY4OTAwODJFMjIwMDA5RUUwQzY1RTFBNDMwCis6MTA0QkUwMDAyRUMyODU2NEUxOUUyNjIwMDcxM0RGODM2RTdCMDI2MDYwCis6MTA0QkYwMDAwMTlBMTdERjdBMUZERjgzMTlERkIwQzBEMjI4MjAwQTlECis6MTA0QzAwMDA5M0UwOURFMUE5NjkwRjg4MDI5OEUyMkY5MDgwMkE5NDkxCis6MTA0QzEwMDA4MEIxRkYwN0ZGMDI5RkUzMkVDMjg1MUZERjZEMEVERTBFCis6MTA0QzIwMDAwQkFGQkYyQUY0Q0YyRUM2ODU2NTVGNzZDMDIwRDEwRkFCCis6MTA0QzMwMDAyODMwMTAyOTMwMTEyRTMwMTMwMDk5MzIwMEVEMzI2NEUzCis6MTA0QzQwMDA4MEVFMkEzMDE0MUZERjlEMDBBQTMyNzhFRjA1MEY5RUY4Cis6MTA0QzUwMDAwOTJERTQ3RjFFREY5QjY2QTAwNTBGOTgwOTJBODQ4MDNBCis6MTA0QzYwMDBCNEE3MThERjk4Qzc2RjAwOTEwNEFFOUVEREUwMDBBRkQ3Cis6MTA0QzcwMDAxQTAwQzMxQTZFRTEwNTJEQjIwMDBERUQwQzFFREY5Mjc1Cis6MTA0QzgwMDAwOEQ4MUMwNjMzMDNBRTg4MkE4NDhCMkVCMDJFMjc4NEM2Cis6MTA0QzkwMDA4QzAzRUUwMTBGRUUwMjJFQjQyRTU4MDE4RjYzRkVGRjNGCis6MTA0Q0EwMDAyOTMxMDgyOTI1MDQyODMwMTQyRTMxMDlCMDg4NjQ4MDYwCis6MTA0Q0IwMDBBMzJFMjQwQUMwODEyRTMwMTYyQ0I0MjMyRTI0MEJCNDJDCis6MTA0Q0MwMDBFRjJGMjQwQzhDMzc4QjM2MjkyNTA0REVCMERGQzAwQzg3Cis6MTA0Q0QwMDA4RjM5MEI4RTM5MEZFRTAyNjRFRUM0MDg5RjExMDFDNEE4Cis6MTA0Q0UwMDAwNDhEMzgwQ0I4MTgwMEM0MDQwQ0JFMTgwMEVFMTEwRTY4Cis6MTA0Q0YwMDBERDAyQzBFMzBFRkYwMjFFREY2NjlGNzE5RTcwMUVERkE1Cis6MTA0RDAwMDA2NThGMjA5ODczOUQ3NDA1RkYxMTBCQ0Q1M0MxODA5ODVBCis6MTA0RDEwMDA3NTBGREQwMjBFREQwMjlENzIxRURGMjQyQTI0NjYyRjMwCis6MTA0RDIwMDA2MjlEMkFFNEEyMkZGQzE4MkY2NjlENjNGRTcxMDAwMDhECis6MTA0RDMwMDAwMDJGMzAxMjFCREY2NjAwRkEzMjc4RkYwNTBCOTgwQjRDCis6MTA0RDQwMDAyQTg0N0Y2NkQwMDUwQjlBMEIyREE0ODAyQTMwMTEwMDhGCis6MTA0RDUwMDBBQTMyNjNGRjQ0MkYyNDBBOUUyQjYzRkY1NkNDNTdEQUY2Cis6MTA0RDYwMDAyMERCMzBEQzQwNTgwNzBFQzAyMEQxMEYwMERBMjBDMDE1Cis6MTA0RDcwMDBCNjU4MDc5RDYzRkZFNTAwREE3MDU4MDYzNkMwQTAyQUQyCis6MTA0RDgwMDAyNDY2NjNGRTAyREEyMDU4MDc5ODYzRkZDRkIxNjkyOEQyCis6MTA0RDkwMDAyMDBBODYyMDA5MDk0Nzk5MTEyOTI0MDc5ODEwN0Y4MTQ0Cis6MTA0REEwMDAyNjkzRTAyN0U1MEE5QUUzODgxMDlERTExOURGNDI4REZBCis6MTA0REIwMDAxMTA5NkYwMjlGRTQyREU0MTYwOTg4MDJDMEQzOThFMjFFCis6MTA0REMwMDAyQTI0MDc2M0ZFNTEwMDAwMURERjBCMDg2ODExOEYxMUI0Cis6MTA0REQwMDA4OTJCOTNFMDA4RkYwMkMwOEY5RkU1MEQ5OTAyOTlFMkFECis6MTA0REUwMDAwNDdGMTFDMEQ0OURFMTA4RkYwMjlGRTQ2M0ZGRDAwMDVGCis6MTA0REYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0ODUyMTBEMzgxMUY3Cis6MTA0RTAwMDAxNERFRTk4NjIyQTQyNDA4NjYwQzk2MjIwNTMzMEI5MzRGCis6MTA0RTEwMDAyMTc0M0IxM0M4NjJEMjMwRDEwRkMwMzBCQzI5OTkyMTE0Cis6MTA0RTIwMDA5OTIwOTMyMkQyMzBEMTBGMjMzREY4OTMyMTYzRkZFM0UxCis6MTA0RTMwMDA2QzEwMEFENjIwOTQxODE3REVERUQ5MzBCODM4OTgxOUNECis6MTA0RTQwMDA5OTE0NjU1MjUyQzBFMUQyRTAyRTYxMDIxRERFREIwRUU0Cis6MTA0RTUwMDAwRTRDNjVFMTYyOEYzMDhFMTkwRjZGNTEyRkZDRkQ2NThFCis6MTA0RTYwMDBGMTU1OEVFMTI5RDAyMzBFOEY1MDc3RTY2QjhGMTgxRUY3Cis6MTA0RTcwMDBERjE4QjBGRjBGRjQxMTBGMUYxNDY1OTBDRTE4REYxNTY3Cis6MTA0RTgwMDA4QzYwQThDQ0MwQjExOURFQzkyODYwMEIwOUNDMEIwRDExCis6MTA0RTkwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQTY1Cis6MTA0RUEwMDAzODFCREYwQjBDQTkwQTI5OTI5NDdCOUIwMjYwMDA4Q0IzCis6MTA0RUIwMDAyQjYwMEM5NDE2MENCRDExQTdERDI5RDI4NkI4NDg3OTU5Cis6MTA0RUMwMDA4MzAyNjAwMEQyMTlERUJCMDlCODBBMjg4MkEzOTgxN0IyCis6MTA0RUQwMDA2ODgwMDI2MDAwQTM2MDAwQTUxQURFRkY4NDE4MEFFRTU1Cis6MTA0RUUwMDAwMUNBOTgxQkRFQjI4QzE5MkJCMDAwOENDMDZFQjMxM0I0Cis6MTA0RUYwMDAxRERFQUYwQzFDNTIwRENDMEIyREMyOTVDMEExN0VEQjZDCis6MTA0RjAwMDBBRTYwMDAzODBDMEM1MzYwMDAwOTAwMDAwMDE4REVGMUEwCis6MTA0RjEwMDA4QzYwQThDQ0MwQjExOURFQTUyODYwMEIwOUNDMEIwREE0Cis6MTA0RjIwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQUQ0Cis6MTA0RjMwMDAzODBDQTkwQTI5OTI5NDdFOTMwMjYzRkY3MkRBNjBDMDRBCis6MTA0RjQwMDBCQTU4MDcyOTY0NTA3MzYwMDI2NjAwMDAxQURFOTg4QzE0Cis6MTA0RjUwMDAxOTJBQTAwMDhDQzA2RUEzMUExOERFOTQwQzFDNTIwOEVCCis6MTA0RjYwMDBDQzBCMThERURCMkJDMjk1QzBBMTc4QjMwMjYzRkYzRkU4Cis6MTA0RjcwMDA2M0ZGQzkwMDBDMEM1MzYzRkYwOTg5NjA3ODk5MTgyOUY1Cis6MTA0RjgwMDBEMjg1Qzk5MjJCNzI5RTFEREU4OTZFQjgyMzJERDIyNjQyCis6MTA0RjkwMDA5OTEzNjlEMDBCNjAwMDBEREE2MDU4MDcxMzYwMDAxNzkxCis6MTA0RkEwMDAwMDg4NjA3RDg5MEE5QTFBMjk3MjlEOUMxMjk5MTVDRkYyCis6MTA0RkIwMDA5NURBNjBDMEI2NTgwNzBDNjU1MUY1OEQxNDhDMThEQjc2Cis6MTA0RkMwMDBEMDhERDAwNjZBMDIwRDZENTE1ODA1ODBEM0EwOUExNDc5Cis6MTA0RkQwMDA2NEExREQ4MkEwODVBMUI4QUY5RjE5MDUwNTQ3MDIwMjMzCis6MTA0RkUwMDA0Nzk1MThDMDUxNjNGRTYwMkI2MTA0QzA4Qzg5MzFDMEE1Cis6MTA0RkYwMDBBMDA5Rjk1MDA5OEEzODZFQjgxRjJDNjA2NkEyQ0MwQzQzCis6MTA1MDAwMDAwQzQ3MkM2NDY2N0NBQjExOUYxMTlFMUI4QTE1NTgwNUJBCis6MTA1MDEwMDA5MThFMUI4RjExQzBBMDJBNjQ2NjlGMTE2NEYwRTEyOTU0Cis6MTA1MDIwMDAxMjAzMjgxMjA5NkRGOTE3MkY4MTAzMDA5MDhEQUVGRTJGCis6MTA1MDMwMDAwMDgwODg5RjkyMDA5MDhDMDA4MDg4Qjg5OTAwOTA4Q0E2Cis6MTA1MDQwMDA2NTUxNEU4QTEwODUxQThCMzAxRkRFNkI4ODEyMjk2MERECis6MTA1MDUwMDAwNzA4NTgwQTJDODI5NDJENjEwNDBFQ0MwQzJDODY5NERGCis6MTA1MDYwMDA2RkRCM0MxQ0RFOTVBQzlDMjlDMDgwMEI1RDUwQTI5OTg3Cis6MTA1MDcwMDAwOTA5NDcyOUM0ODA2NUQwREEyRTYwMENDMEQwMUZERTM0Cis6MTA1MDgwMDA1NDBDRTgxMUFGRUVBNzg4MjI4Mjg1MkRFNENGMDI0MkFFCis6MTA1MDkwMDAwQjIyODY4NUQyQTBEMTBGOEUzMDBFMEU0NzYzRkRBNjVGCis6MTA1MEEwMDBBMjlDMEMwQzQ3MkM2NDA3N0FCNkNEOEI2MDJFNjAwQTRDCis6MTA1MEIwMDAyODBBRkYwOEU4MEM2NDgxMEUxOERFN0U4MzE2ODIxMzJFCis6MTA1MEMwMDBCMzM5MDIzMzBCMkMzNDE2MkQzNTBBQzAyMzkyMzE5RjhECis6MTA1MEQwMDAzMEMwMjA5MjMzMDhCMjAyMDhFODAyOTIzNDk4MzJDMEZECis6MTA1MEUwMDA4MDI4NjQwNzJCNjAwQ0QyQTAxQ0RFMzkwQ0JFMTFBN0VGCis6MTA1MEYwMDBFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEIyREU2ODVEMUZFCis6MTA1MTAwMDAwRjhCMTg4ODEzOEQzMEI4OEMwRDhGNDcwRDQ5NTBCNDE0Cis6MTA1MTEwMDA5OTA0OTkxMDBEMEQ1RjA0REQxMDA5RkYwMjlGODAwREE5Cis6MTA1MTIwMDBCQjAyOUI4MTY1NTA4RDg1MUFCODNBQzBGMUMwODAwQ0Q2Cis6MTA1MTMwMDBGODM4MDgwODQyNjQ4MDZCMUJERTFBMTlERTFCMjlCNjlBCis6MTA1MTQwMDA3RThEMThCMERENkREQTA1MDBBMDg4MDBDMDhDQzBBMDhGCis6MTA1MTUwMDA2M0ZFRjMwMDgyMTM4QjE2MURERTJCMjg2MDBBQzBFMDZECis6MTA1MTYwMDAyRUM0ODAwRDg4MDIwMkIyMEI5OTIzOUYyMEMwRDI5OEQyCis6MTA1MTcwMDAyMjlEMjEyMjYwMENCMkJCMEMyRDExQTdERDI4RDI4NTA3Cis6MTA1MTgwMDAwOEJCMEIxOERFMTMyQkQ2ODVBODIyMkUyNENGRDJBMDY1Cis6MTA1MTkwMDBEMTBGOUUxQjg1MUEyQTZDNzQ4QjE4NUJGRjE3OEUxQjEwCis6MTA1MUEwMDA2M0ZFQTMwMEMwODdDMDkwMEFGOTM4Nzk4MDkyNjNGRjNDCis6MTA1MUIwMDA4NkMwMjBEMTBGOUUxQjJBNkM3NEMwQjE4RDE4NTgwNTczCis6MTA1MUMwMDAzNThFMUI4NTFBNjNGRTdFODg2QjgyMTM4OTE2MDhCRTk2Cis6MTA1MUQwMDAxMTBFQ0UwMjAyOTIwQjlFMjVCNDk5MUVERTA2OUYyMDcwCis6MTA1MUUwMDAwRTg4MDI5ODIyQzBFRjA0RDgxMTBFODgwMjk4MjRDMEJECis6MTA1MUYwMDBFNDlFMjFDMDgwRDJBMDJCNjAwQzI4NjQwNzFDRERGNDQzCis6MTA1MjAwMDAwQ0JFMTFBN0VFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQkQzCis6MTA1MjEwMDAyREU2ODVEMTBGMDAwMDAwNkMxMDA0QzAyMEQxMEYwMEQ2Cis6MTA1MjIwMDA2QzEwMDQ4NjMzQzA3MUMwMzA2MDAwMDFCMTMzMDAzMUFFCis6MTA1MjMwMDAwNDAwNzQxQTA0NjIwMTc0NjBGMUQxMEY2QzEwMDQwMjRFCis6MTA1MjQwMDAyQTAyMDMzQjAyNUJGRkY2MUNERERDMUJERTI0Qzc5RjRBCis6MTA1MjUwMDA4OEIwMDlBOTAzMDk4QTAxOUFCMDc5ODAxRUMwRjAwRkFECis6MTA1MjYwMDBFNDMxMUREREQzMDAwMjAwMkJEMjgyMUVERTFEMkFDMUQ3Cis6MTA1MjcwMDAwMjBFQkIwMjJCRDY4MjBBRTQzMUQxMEYyOEMxMDJDMTMzCis6MTA1MjgwMDA5MDA5ODgwMjA4MDg0RjI4QzUwMjA4RTQzMUQxMEYwMEIwCis6MTA1MjkwMDA2QzEwMDRDMEMwMENFNDMxMTJEREM4MUFEREM1MDAwMjc4Cis6MTA1MkEwMDAwMDI5QTI4MjE4REUxMTFCREUwRjI2MjEwMjBCOTkwMUI0Cis6MTA1MkIwMDAwODY2MDEyOUE2ODIyNjI1MDIwNkU0MzExNERFMEMxNUIzCis6MTA1MkMwMDBERTA3MjM2QTkwMjMyNjEyODU1MDI0MjYxMTI1MjYxM0YzCis6MTA1MkQwMDAyMjJDNDBEMTBGMDAwMDAwNkMxMDA4RDYxMDJCMEE2NDVECis6MTA1MkUwMDAyOTFBQjQxQUREQjIwRDIzMTExQ0REQjMwRjI1MTFCODM0Cis6MTA1MkYwMDAxODk4MTMwRTU1MTExOERERkVBQzU1QTgzOEFBMzMyQzlBCis6MTA1MzAwMDA4MEZGMkE4MEZFQTkzMzI4OEQwMTI5ODAwMTA4QUExMTc3Cis6MTA1MzEwMDAyODgwMDAwQ0FBMDIwODg4MTEwOTg4MDIwOEFBMUMyODAzCis6MTA1MzIwMDA4QzA4MjgxNjA0NTgwODRDMTREREE0MEFBNzAyMjQ0MTRFCis6MTA1MzMwMDAxNjJBMzA4MDJCMTIwNDA3QUEyODU4MDg0N0IxMzM4QjRECis6MTA1MzQwMDAxM0I0NTU5QTYwMDRBQzI4QjQ2NjJDNTYyNzdCNjlFMEU4Cis6MTA1MzUwMDAxNkREREI5NDEyQzA1MEMwRDAxN0REOTc5RDE1RDM3MEI5Cis6MTA1MzYwMDBENDEwMkY2MDgwMkU2MDgyOUYxNjlFMTc4ODE2NzI4OTM3Cis6MTA1MzcwMDAxQThEMTI4QzQwMkE2MDdGMERDQzI4MkIzQTIwMENBQTYzCis6MTA1MzgwMDAyODU4MDgzNUMwQjEwQUJFMzcyRTM1NDA4RjE3NzJGOTNDCis6MTA1MzkwMDAxQThEMTI4QzQwMkE2MDgxMERDQzI4MkIzQTIwMENBQTQxCis6MTA1M0EwMDAyODU4MDgyREMwQjEwQUJFMzcyRTM1NDJCMjMzQjQ0NDU2Cis6MTA1M0IwMDBCMTU1Njk1MkI2QjQ2NkMwNTA4RjE1Qjg3N0QzNzBCMjg0Cis6MTA1M0MwMDBGRjlGMTU2RUY4OTlEMTBGNkMxMDA0QzAyMUQxMEYwMDBBCis6MTA1M0QwMDA2QzEwMDQyNzBBMDAxQ0RENzYxRkREODcxRUREOEExRDg4Cis6MTA1M0UwMDBERDczMUFEREI1MUJEREMzQzAyODI0QjAwMDZEMkE3NTNFCis6MTA1M0YwMDBBQTQ4Mjg4MDgwQzA5MTY0ODA2MTAwNDEwNDE1REQ2RTU4Cis6MTA1NDAwMDBDMDMxMjU1MDJFMDAzNjFBMDY1NTAxMDU5NTM5MEM1NjI3Cis6MTA1NDEwMDAxMTBDNjYwODI5NjI5NjZFOTc0RDBENTkwQTI5OTIyNDNGCis6MTA1NDIwMDA2ODkwMDgxMkREQTcwMjQyMDg3Mjk5M0IyMzYyOTUxMjI4Cis6MTA1NDMwMDBERDZCQ0IzNDlGMzAwMjgyMDIwRTQ0MDJDMDkyOTkzMTYwCis6MTA1NDQwMDA5NDMyOTIzM0FENTIyNDYyOTVDMDkwMjQ0QzEwMjQ2NjVECis6MTA1NDUwMDA5NTI0QjAwMDI5MjRBMEFBNDIyOTI0ODBCMTc3QjE0NDIwCis6MTA1NDYwMDAwNDA0NDIyNEI0MDBEMTBGRDEwRkQxMEY2QzEwMDQxQUUwCis6MTA1NDcwMDBERDRGMkFBMDAwNTgwMjFDNUJGRkQ1MDIyQTAyMDMzQjI1Cis6MTA1NDgwMDAwMjVCRkZEMTFCREQ0REM5QTEyQ0IxMDJDMEQ0MERDQ0Y0Cis6MTA1NDkwMDAwMjBDMEM0RjJDQjUwMjBDRTQzMUQxMEZDMEEwMEFFNDcxCis6MTA1NEEwMDAzMTE4REQ0MzAwMDIwMDJGODI4MjE5REQ1NjJFQjEwMjMxCis6MTA1NEIwMDAwOUZGMDIyRjg2ODIwRUU0MzFEMTBGMDA2QzEwMDRDMDY4Cis6MTA1NEMwMDAyMDAyRTQzMTE0REQzRDE2REQzQTAwMDIwMDIyNjI4MjQyCis6MTA1NEQwMDAyMzQxMDI3MzJGMDYwM0U0MzFDMDIwRDEwRjE5REQ4NzY5Cis6MTA1NEUwMDAxQUREODYyODQxMDIwQTJBMDEwOTg4MDEyQTY2ODIyOEQzCis6MTA1NEYwMDA0NTAyMDhFNDMxMTVERDdEMTJERDgyMjU0NjFERDEwRjAwCis6MTA1NTAwMDA2QzEwMDQyOTIwMDYyODlDRjk2NDgwQTAyQTlDRkQ2NTYzCis6MTA1NTEwMDBBMDk2OEEyODhEMjYyRjBBMDg3QUQ5MDQyQjIyMUZDODI0Cis6MTA1NTIwMDBCRDJDMjA2NDY0QzA4MTJFMjIwOTBFQUUwQzY2RTA3ODhBCis6MTA1NTMwMDAyQjIwMEMxRUREMUYwQ0JDMTFBRUNDMjhDMjg2MTlERDQxCis6MTA1NTQwMDAxRDc4RjMwMjYwMDBBRDA5QjkwQTI5OTJBMzY4OTAwODlBCis6MTA1NTUwMDAyRTIyMDAwOUVFMEM2NUUwOUIyOUMyODUxRkREMjc2NDIxCis6MTA1NTYwMDA5MDkyOUY5MEMwRTQxRkREMzQ5RTkxMjgyMDBBQzBFMEY1Cis6MTA1NTcwMDA5RTkzMEY4ODAyOTg5Mjg4MjAwRjg4MDI5ODk0MkYyMDdCCis6MTA1NTgwMDAwNzlBOTc5RDk2MkY5NTBBMkUyNDA3MjgyMDA2MjkyMEYyCis6MTA1NTkwMDA2NDY4ODMzMzI4QzI4NTEyREQwRTI4OEMyMEEyQjIyRUM3Cis6MTA1NUEwMDAyNENGMjhDNjg1QzAyMEQxMEZDMDIwRDEwRjJBMjA2QTYxCis6MTA1NUIwMDAwMTExMDIwQTJBNDE2NUFGNTJEQTIwQzBCMDU4MDVEMTY0Cis6MTA1NUMwMDA2NEFGRTVDMDIxRDEwRjAwNjQ5RkM4MUZEQ0ZCMkQyMDE0Cis6MTA1NUQwMDAxNjhGRjIwOUREMEMwMEYxMDQwMEREMUFBREFEOUQyOTM2Cis6MTA1NUUwMDAxMkRDRkMyOEMyODVBMkIyMkUyNENGMjg4QzIwMjhDNjJCCis6MTA1NUYwMDA4NUMwMjBEMTBGQzAyMUQxMEYwMDAwMDA2QzEwMDQyNkZGCis6MTA1NjAwMDAwQTAwMUJERDQwMTVEQ0VDMjgyMDY1MTdEQ0U5Mjg4QzNFCis6MTA1NjEwMDBGRTY0ODA5NDBDNEQxMTBEQkQwODJDRDJGNTJCRDJGNEY0Cis6MTA1NjIwMDAyRUQyRjc3Q0IxM0RCNEJCMkJENkY0N0JFOTA1MkJEMjRGCis6MTA1NjMwMDBGNjJCRDZGNDdDQjkyQzJBRDJGNjJBRDZGNTJBRDZGNDQzCis6MTA1NjQwMDAwNkU0MzEwMDAyMDAyODcyODIyQUZBRkYwMDQxMDQyOTkwCis6MTA1NjUwMDAwQTAxMkY1MTAyMDA5OTFBMEE5OTAzMDk4ODAxMjg3NjM0Cis6MTA1NjYwMDA4MjBGRTQzMTI2MjQ2NTJCRDJGNDhFNUEyQ0QyRjVCMDY5Cis6MTA1NjcwMDBFRTlFNUE3QkNCMTYyOUQyRjYyRkQyRjcwQ0I4MEMwOTI2Cis6MTA1NjgwMDBGRjBDMDhGRjBDMEYyRjE0QzhGOTYwMDAzMjBCQ0EwQzc2Cis6MTA1NjkwMDAwQTJBMTRDRUE5MkI1MTAyQzBDMjBDQkIwMjBCMEI0RjFECis6MTA1NkEwMDAyQjU1MDIwQkU0MzFEMTBGMDBEQjMwREEyMDVCRkY5NDg1Cis6MTA1NkIwMDAxQkREMTU2NEFGNUQwQzREMTFBREJENjNGRkE4MDAwMDhGCis6MTA1NkMwMDAwNkU0MzEwMDAyMDAyRjcyODIxOERDRDQyRTUxMDIwODQ5Cis6MTA1NkQwMDBGRjAyMkY3NjgyMEVFNDMxRDEwRjAwMDA2QzEwMDRDMDVGCis6MTA1NkUwMDAzMDAzRTQzMTE2RENCMzE1RENCNDAwMDIwMDI0NjI4MjFFCis6MTA1NkYwMDA3NDQ3MjExOEREMDU4NzVBMDg0ODAxMjg2NjgyQ0Q3MzUyCis6MTA1NzAwMDAxOUREMDMwQzJBMTFBQTk5MjI5MjgzMjk5Mjg0NzI5MTlECis6MTA1NzEwMDAwMzgyMjBDQzI5MkI1MTAyMEJFNDMxQzAyMEQxMEYwMDkxCis6MTA1NzIwMDAxRkRDRkMyRTUxMDIwRkVFMDEyRTU1MDIwRUU0MzFCMEFCCis6MTA1NzMwMDAyREIxN0M5QzVBMTJEQ0Y3MDhERDExMkQ1NjE5RDEwRkMyCis6MTA1NzQwMDA2QzEwMDYxQkRDOUExRURDOUMyMkIwMDAxQURDRjM2Rjg2Cis6MTA1NzUwMDAyMzcyMUREQ0RBQzA0ODE4RENGMjFGRENGMERDMTBENTQ3Cis6MTA1NzYwMDBDMDgzRjAwMDgwODYwMDUwOEE2RDRBNEYwRjM1MTEwREJFCis6MTA1NzcwMDAzNDA5MjQ0MDgwMEI1NjBBMjk2Mjk0QjEzMzBFNTUwOTJFCis6MTA1NzgwMDAyMjUxNDAwRjQ0MTEwQzQ0MEE4NzQwMDlBODBDMDI4ODlBCis6MTA1NzkwMDAzNjIyNTE0MTA3ODgzNjA4NzcwQ0E4OTkyOTY2OTQ5N0Q0Cis6MTA1N0EwMDA0MDI5NjI5NTg3NDEwOUE4MEMwMjg4MzYwNzg4MzYwODg3Cis6MTA1N0IwMDA3NzBDQTg5OTI5NjY5NTk3NDEwMzAzNDJCMTM4MDgwOEU4Cis6MTA1N0MwMDA0Mjk4RjBEMTBGMUNEQ0Q3MTNEQ0Q4MjdCMDAwMjMzMjZECis6MTA1N0QwMDBCNTY0NzA1N0MwOTFDMEQwMTZEQ0Q2MTVEQ0Q0QzA0MDdCCis6MTA1N0UwMDAyQUMwMDAwMzg4NDMyOEM0MDA2RDc5M0MwMDQxMDRCMUZECis6MTA1N0YwMDA0NDAwOTcxQTc3ODAxNDhFNTAyRkIyOTUyREI2OTVBRjJFCis6MTA1ODAwMDBFRTJFRUQyMDA2RUUzNjlFNTA2MDAwMTg3N0EwMDk4MzNDCis6MTA1ODEwMDA1MDlENTAyM0I2OTU2MDAwMDIyM0IyOTUyMjNEMjAwNjhDCis6MTA1ODIwMDAyMjM2MjJCNjk1QjQ1NUI4QkJEMTBGMDAwMzg4NDMyODYxCis6MTA1ODMwMDBDNDAwRDEwRjZDMTAwNEMwNDAwNEU0MzExNURDQkUwMDdDCis6MTA1ODQwMDAwMjAwODg1MDEzRENCRENCODE1QkZGQkQxQ0RDQkMwQ0FGCis6MTA1ODUwMDAyRDExQURDQzJCQzI4MjJBQzI4Mzk0NTA3QkFCMTQyRTY3Cis6MTA1ODYwMDBDMjg0MjlDMjg1MEFCRDBDMEU5OTBDMEQ5OTBDMDkyOTE4Cis6MTA1ODcwMDAxNDYwMDAwNTBCQTkwQzA5MjkxNDk5MzAxNURDNEYyQTc2Cis6MTA1ODgwMDA1MTAyMEFFNDMxMkEyQ0ZDNTgwMDRCMkIzMjAwMEFBMkE4Cis6MTA1ODkwMDAwMjJCQkNGRjlCMzBDQ0I2QzhBNEQyQTBEMTBGMDAwMDE1Cis6MTA1OEEwMDAwNEU0MzExRURDNDMwMDAyMDAyREUyODIyRkJBRkYyQ0ZCCis6MTA1OEIwMDA1MTAyMEZERDAxMkRFNjgyMENFNDMxRDEwRjAwMDAwMDEyCis6MTA1OEMwMDA2QzEwMDREMTBGMDAwMDAwNkMxMDA0QzAyMEQxMEYwMDM4Cis6MTA1OEQwMDA2QzEwMDQxM0RDOUJDMEQxMDMyMzA5MjMzMThEQzBBMEJECis6MTA1OEUwMDA2RjM0MDI2MDAwOEQxOURDMzIxQkRDMzMxN0RDOTQwQzQyCis6MTA1OEYwMDAyODExQTg3NzI2NzI4MzI1NzI4MjJDRkFGRjc2NTE0N0U5Cis6MTA1OTAwMDA4ODUwMkU3Mjg1MjU1QzA0MjU3NjgyNzVFOTA1MjU3MkZFCis6MTA1OTEwMDA4NDI1NzY4Mjc2NTkyOTJFNzI4NDJFNzY4MjJFNzY4MzdECis6MTA1OTIwMDAwQUU0MzEwMDAyMDAyMzkyODIwMDIxMDQyRkIxMDIwMDE4Cis6MTA1OTMwMDBENjFBMEM2NjAzMDYzMzAxMjM5NjgyMEZFNDMxMjY3MkQxCis6MTA1OTQwMDA4MzI1NzI4MjYwMDAwMjAwRDhBMDc2NTkyMjBBRTQzMUQxCis6MTA1OTUwMDAwMDAyMDAyMzkyODIwMDIxMDQwMEQyMUEyRkIxMDIwQzBGCis6MTA1OTYwMDAyMjAzMDIzMjAxMjI5NjgyMEZFNDMxRDI4MEQxMEYwMDRECis6MTA1OTcwMDBEMjgwRDEwRkMwMjBEMTBGNkMxMDA0REIzMDg2MjAxNUVGCis6MTA1OTgwMDBEQzBCMjgwQTAwMjgyNTAyREEyMDI4QjAwMDJDQjAwN0ZBCis6MTA1OTkwMDAwNTg4MEEyODgyNEMyRDBBMDEwQjgwMDBEQkEwNjVBRjI4Cis6MTA1OUEwMDBFNjFBREMwNDBBNEEwQTI5QTJBM0M3QkY3NjkxMDFEMUVDCis6MTA1OUIwMDAwRjJCQTZBM0QxMEYwMDAwNkMxMDA0QzBEMUM3Q0YxQkMyCis6MTA1OUMwMDBEQkZFMTlEQkZCMTdEQkY5MEMyODExQTg3Nzg2NzU4NTQwCis6MTA1OUQwMDA3NEMwQTA3NjUxNjI4ODUwOEU3N0I0NTU5NTc0NzVFOTdECis6MTA1OUUwMDAwMzg1NzY5NTc0NzY1OTI3OEY3NjlGNzU5Rjc0MEFFNEEwCis6MTA1OUYwMDAzMTAwMDIwMDIzOTI4MkI0MkUyRkIxMDIwMEUxMDQwMDk0Cis6MTA1QTAwMDBENjFBMEM2NjAzMDYzMzAxMjM5NjgyMEZFNDMxODY3NTlECis6MTA1QTEwMDA4Mzc0NzYzOTI4MEFFNDMxMDAwMjAwMkU5MjgyQjQyMjdGCis6MTA1QTIwMDAwMDIxMDQyNEIxMDIwMERGMUEwQ0ZGMDMwRkVFMDEyRTQ3Cis6MTA1QTMwMDA5NjgyMDRFNDMxRDI4MEQxMEZEOEEwNzY1MUQ2RDI4MDlDCis6MTA1QTQwMDBEMTBGMDAwMDZDMTAwNDI5MEE4MDFFREMwMDFGREMwMDRFCis6MTA1QTUwMDAxQ0RCRDgwQzJCMTFBQ0JCMkMyQ0ZDMkRCMjg1MEZDQzM1Cis6MTA1QTYwMDAwMjlFRDE5Q0QwQzA1MUMwNzAxM0RCRkMxNERCRkIxODJDCis6MTA1QTcwMDBEQkY5MkFCMjg1QTgyODA0MjQwQTIzNDY5MUE5ODZCODBFCis6MTA1QTgwMDBBQTJBQjY4NUE5ODgyNzg0OUYyNTY0OUZEMTBGMDAwMDg0Cis6MTA1QTkwMDA2QzEwMDQxOURDMkMwQzJBMTFBOUE5ODk5MEM0ODQ3OUYyCis6MTA1QUEwMDA4Qjc2MUJEQzFBQUJBQzJBQzI4MzJDQzI4NDdBQzE2ODA5Cis6MTA1QUIwMDA4QUEwMkJCQzMwRDNBMDY0QTA1RTBCMkIwQTJDQjJBMzBGCis6MTA1QUMwMDAxOURCRTU2OEMwMDcxRERDMjBEMzBGN0RDOTRBQTkyOTcxCis6MTA1QUQwMDAyOTlEMDEyOTkwMUY2ODkxMzI3MEE2MDNEM0EwQ0E5RTA4Cis6MTA1QUUwMDA2ODkyMTBDN0FGMkFCNkEzMkEyQ0ZDNUJGRkIzRDIzMDUyCis6MTA1QUYwMDBEMTBGMDAwMDEzREJDNTAzQTMwMThDMzExRERCQjYwQ0Y1Cis6MTA1QjAwMDA4QzE0MERDQzAxMkNCNkEzNjNGRkRDMDBDMDIwRDEwRjk4Cis6MTA1QjEwMDBEQTIwNUJGRkNDQzAyMEQxMEZDMDIwRDEwRjAwMDAwMEU1Cis6MTA1QjIwMDA2QzEwMDREQjMwQzBEMDE5REJBMURBMjAyODMwMDAyMjUxCis6MTA1QjMwMDAzMDA3MDg0ODEyMDk4ODBBMjg4MjRDREMyMDBCODAwMEI0Cis6MTA1QjQwMDAxQkRCOUMwQzRBMTFBQkFBMjlBMjg0MDkyOTBCMjlBNkFDCis6MTA1QjUwMDA4NEQxMEYwMDZDMTAwNEMwNDExOERCOTUxN0RCOTcwQzQzCis6MTA1QjYwMDAyNjExQTcyNzI3NzAzMEE4NjYyNTYyODYwMDcxMDRBMzM2Cis6MTA1QjcwMDA1NTAwNDQxQTc1NDE0ODIyNjI4NDE1REJCODAyMzIwQjg1Cis6MTA1QjgwMDBDOTIyODgyMTE3REI5NDA4ODQxNDA3NDQwMTc1NDkwNTRDCis6MTA1QjkwMDBDODM0QzAyMEQxMEZEMTBGMDgwOTQ3MUREQkVCQzBCMkJDCis6MTA1QkEwMDA4RTIwMUZEQjgyMEUwRTQzQUZFQzJCQzRBMDBGRUUwQTNCCis6MTA1QkIwMDAyREU2MjQyQTYyODRDMDIwMEE5OTBCMjk2Njg0RDEwRjFECis6MTA1QkMwMDBDMDIwRDEwRjZDMTAwNERCMzBDMEQwMThEQjc4REEyMDk1Cis6MTA1QkQwMDAyNTMwMDAyMjMwMDcwODU4MEEyODgyNENEQzIwMEI4MDMwCis6MTA1QkUwMDAwMDg5MzE3MDlFMTIxQkRCNzIwQzRBMTFBQkFBMjlBMkVDCis6MTA1QkYwMDA4NDA5MjkwQjI5QTY4NEQxMEYwOUM5NTI2ODUzMjYwMEFDCis6MTA1QzAwMDA5MTA0MThEQjZEQzBBMTJGODExMjAwQUExQTBBRkYwMkFECis6MTA1QzEwMDAyRjg1MTIxRURCNjcwQzREMTFBRUREMkNEMjg0MEMyQ0FGCis6MTA1QzIwMDAwQjJDRDY4NEQxMEZDMDgxMUZEQjY0Qjg5QTBBMEE0N0I3Cis6MTA1QzMwMDAyRUYxMTIwMEExMDQwMDg4MUEwOEVFMDIyRUY1MTIxREEyCis6MTA1QzQwMDBEQjVDMEM0QzExQURDQzJCQzI4NDBCMkIwQjJCQzY4NDE0Cis6MTA1QzUwMDBEMTBGMDAwMDZDMTAwNERCMzBDMEQwMTlEQjU0REEyMDA3Cis6MTA1QzYwMDAyODMwMDAyMjMwMDcwOTg4MEEyODgyNENEQzIwMEI4MDZCCis6MTA1QzcwMDAwMDFDREI0RjBDNEIxMUFDQkIyQUIyODQwQTJBMEIyQTQ2Cis6MTA1QzgwMDBCNjg0RDEwRjZDMTAwNEMwNDExOERCNDkxNkRCNEIwQ0Y1Cis6MTA1QzkwMDAyNzExQTYyNjI2NjAzMEE4NzIyNTIyODYwMDYxMDRBMzVCCis6MTA1Q0EwMDA1NTAwNDQxQTc1NDEwODIyMjI4NDAyMzIwQkQxMEYwMDlDCis6MTA1Q0IwMDBDMDIwRDEwRjZDMTAwNDE1REJBNTAyNDkxNDI5NTYxMTIwCis6MTA1Q0MwMDAyNDUyMTIwMjA4NDMwRjg4MTFDMDczMDA4MTA0MDAzNjY5Cis6MTA1Q0QwMDAxQTAwODEwNEM3OEYwMDc3MUEwODc3MDMwNzQ0MDEwNjZBCis6MTA1Q0UwMDA0NDAyMjQ1NjEyRDEwRjAwNkMxMDA2NkUyMzAyNjAwMDhECis6MTA1Q0YwMDBBQzY0MjBBN0MwQTA4NTEwMTNEQjdFMTZEQjk0QzA0MEU3Cis6MTA1RDAwMDBBNkFBMkJBMkFFMEIxOTQxNjQ5MDY2Njg5MTVENjg5MkI5Cis6MTA1RDEwMDA1MjY4OTMzQzJBQTJBQTI4M0M3RjI4OEM3RjBBMEE0RDBECis6MTA1RDIwMDAyOTgwMDEyODgwMDAyQUFDRjIwODg4MTEwOTg4MDI3NUIwCis6MTA1RDMwMDA4OTQ2MkIzRDAxMjlCMDAwMkJCMDAxMDg5OTExMEI5OTIwCis6MTA1RDQwMDAwMjdBOTkzNEI4MzMyQTJBMDBCMTQ0NzI0OUIxNjAwMDBBCis6MTA1RDUwMDA0QTdGQkYwNzE1REI3RjYzRkZCOTAwMDAyNTNBRTg2MzgwCis6MTA1RDYwMDBGRkIxMDAwMDI1M0FFODYzRkZBOTAwMDAyNTBBNjQ2MzNCCis6MTA1RDcwMDBGRkExQzA1QTYzRkY5QzAwMDA3MDVGMDgyNTM0RkYwNTM3Cis6MTA1RDgwMDA4QzE0MkMzNEZFNzBBRjBCMEE4RDE0MkUzRDAxMkFFNEM2Cis6MTA1RDkwMDAwMTJERTQwMERBNDA1QkZENTA2M0ZGQTdEMTBGRDEwRjY2Cis6MTA1REEwMDA2QzEwMDQxQURCMDUxOURCMDIxQ0RCNkExQkRCNkJDMDAxCis6MTA1REIwMDA4MEMwNzE2MDAwMEQwMDAwMDAyMkE0MzBCMUFBMjk5Q0FGCis6MTA1REMwMDAxMDdCOTE1RjI2OTI4Njc5QzIxNTZFNjI2MkMwMjA2RDRCCis6MTA1REQwMDAwODBBQjEyMjAwMjEwNDAwNzQxQTc2NEJEQjYzRkZFRTNGCis6MTA1REUwMDAyMjkyODUwRDYzMTEwMzI1MTQ2NDVGQ0ZENjUwMDMyREQ1Cis6MTA1REYwMDA0MzZERDkwMzk4MjBCNDIyMDY0NDE0NkQ0OTIyOTgyMDlCCis6MTA1RTAwMDA5ODIxOTgyMjk4MjM5ODI0OTgyNTk4MjY5ODI3OTgyOEFFCis6MTA1RTEwMDA5ODI5OTgyQTk4MkI5ODJDOTgyRDk4MkU5ODJGMjIyQ0Q4Cis6MTA1RTIwMDA0MDYzRkY5NzFFREFFMzI3RTY4MDI3RTY4MUQxMEYwMDYzCis6MTA1RTMwMDBDMDIwNjNGRjgzMDAwMDAwNkMxMDA0QzA2MkMwNDExMkU4Cis6MTA1RTQwMDBEQURFMUFEQURBMTNEQjQ1MkFBMDAwMjMzMjJEMTlEQjU5Cis6MTA1RTUwMDAzRjJCQUNGRTI5OTJBRTZFQTMwMjYwMDA4RTA5MEU0MDZECis6MTA1RTYwMDAyRDFBQzJDMkNEMEVEQzM5MkMyNTE2NjRCMDg5NUJGRjE5Cis6MTA1RTcwMDA5RTE1REIzQjFBREFFNTJCM0FFODBBM0EwMTU4MDU3NjFCCis6MTA1RTgwMDAyQjIxMTYwQUJCMjhEM0EwMkI1NjAwNTgwNThEOEI1MDBBCis6MTA1RTkwMDAwQUJCMDgyQTBBMDA1ODA1OEMxNURCMzIyRDIxMDIyQzdBCis6MTA1RUEwMDAzQUU4MEMzQzI4MDRERDAyMkQyNTAyOUM1MDU4MDU4NDVDCis6MTA1RUIwMDA4QjUwQUFCQkMwQTE1ODA1ODQxQ0RCMkIyRDIxMDIwQ0UyCis6MTA1RUMwMDAzQzI4MDZERDAyMTNEQjI5MkQyNTAyOUMzMDU4MDU3Qzc5Cis6MTA1RUQwMDA4QjMwQUFCQkMwQTI1ODA1N0MyQTIxMDJDMEI0MEJBQUYxCis6MTA1RUUwMDAwMjBBMEE0RjJBMjUwMjU4MDU5MEQxMEYyNDI0MjNDMzAxCis6MTA1RUYwMDBDQzJDMjUxNjYzRkY3NjAwMThEQjIxMUNEQjFEMTlEQjdCCis6MTA1RjAwMDAxRTFCREIxQzE3REFGMDg1MjAyRTBBRkQxRkRCMUQyRDYyCis6MTA1RjEwMDAyMDJFMjRGNDdBMjRGNDdFMjRGNDgyMEVERDAxMjRGNDZECis6MTA1RjIwMDA4NjJFMEFGNzA3NTUyODA2REQwMkMwNzUwRUREMDEwNTJECis6MTA1RjMwMDAwNTA2QUI1QkE5NTlDMEU4QUM1QzI0QzRBQjBFREQwMjFFCis6MTA1RjQwMDAyN0M0QUMyRTBBREZBODU1MjdCNEVDMEVERDAxMjRCNDFCCis6MTA1RjUwMDBFQkMyRTAyNzk0MkMwRUREMDIyNDk0MkIyRTBBODAwRDM4Cis6MTA1RjYwMDAwRDQ2Mjc1NDZDMjQ1NDZCMEVERDAyMkQyNDJFNjNGRTQ3Cis6MTA1RjcwMDBGQzAwMDAwMDZDMTAwNDJBMEEzMDJCMEEwMzVCRkY0RDYyCis6MTA1RjgwMDAxMkRBRjNDMzkwMjkyNjE2QzNBMUMwQjNDMDhBMjgyNjBCCis6MTA1RjkwMDAxNzVCRkY0OEMwM0NDM0IxMkIyNjE2MUFEQTg3MkFBMDJDCis6MTA1RkEwMDAyMDIzMjYxNzY0QTA3OUMzQTJDMEIxNUJGRjQyQzNBMjFECis6MTA1RkIwMDBDMEIxNUJGRjQwQzNDMjJDMjYxNkMyQUZDMEIxMjMyNkJFCis6MTA1RkMwMDAxNzVCRkYzQ0MyOEYyODI2MTZDMEZFMkYyNjE3QzJFMkExCis6MTA1RkQwMDAyRTI2MTYyQTBBQTFDMEIxQzBEODJEMjYxNzVCRkYzNTgwCis6MTA1RkUwMDAyQTBBQTEyQTI2MTZDM0E2QzBCM0MxOTIyOTI2MTc1Qjg2Cis6MTA1RkYwMDBGRjMxQzNDNjJDMjYxNkMxQjMyQTBBQTIyQjI2MTdDMDBFCis6MTA2MDAwMDBCMzVCRkYyQzI5MEFBMjI5MjYxNkMxODUyODI2MTdDMkIwCis6MTA2MDEwMDBGQjJGMjYxNkMwRTcyRTI2MTcxRERBREEyRDI2MTBEMTAzCis6MTA2MDIwMDAwRkMzQTJDMEIzNUJGRjIzNjNGRjgyMDA2QzEwMDQxQzhDCis6MTA2MDMwMDBEQUE0MUJEQTkxMThEQUQ0MTdEQUQ1MTZEQUQ1MTVEQTFDCis6MTA2MDQwMDBENUMwRTBDMEQ0MTREQUEwMUZEQTVDQzAyODhGRjA2RDkwCis6MTA2MDUwMDAyQTM2REFDMEQ5QzA3QzVCMDIwRkM5MEMxQ0RBOUEwQzU0Cis6MTA2MDYwMDA5QzI4QThDM0E2QzIyQTM2ODAyQTI1ODRBNEMyQTdDQzBECis6MTA2MDcwMDAyRDI0OEMyQjI0OEEyQjI0ODcyRTI0OEJCMUJCMkUzNkU3Cis6MTA2MDgwMDA5RjJDMzY5RTJDMzY5REIxQUMxQ0RBN0IxQkRBQzNDMDJDCis6MTA2MDkwMDAyODZEMkEzM0RBQzBEOUMwN0M1QjAyMEZDOTBDMUNEQTI4Cis6MTA2MEEwMDA4OTBDOUMyOEE4QzNBNkMyMkEzNjgwMkIyNTg0QTRDMkFBCis6MTA2MEIwMDBCMUJCQTdDQzJEMjQ4QzJFMjQ4QjJBMjQ4QTJFMzY5RjZDCis6MTA2MEMwMDAyQzM2OUUyQzM2OURCMUFDQzA3OTE5REE3OTFCREFCNTI1Cis6MTA2MEQwMDAxM0RBQjMxQURBQjMxOERBQjQxNERBN0ExNkRBQjQwNEMzCis6MTA2MEUwMDBGNDI4MTJEQUIzMDQ2NjBDMDQwNTA2QTI1MkE4NThBQUQyCis6MTA2MEYwMDA1QUEzNTM5QjMwMjlBNTAwMjc4NDhBQzA5MUMwQTUyQUEyCis6MTA2MTAwMDA4NDhDMjk4NDhCMTdEQUFDMThEQUFCQTc1NzI2MzYxRDk2Cis6MTA2MTEwMDAyNjM2MUUyRTM2MUYxNkRBQTkxM0RBQTlBNjU1MDQzMzIxCis6MTA2MTIwMDAwQzI4MjZDODJFNzUwMDJENTRBQzJFNTRBQjJFNTRBQTI0Cis6MTA2MTMwMDAyMzI2RTYyMzI2RTUyRTI2RTdEMTBGMDA2QzEwMDYxMzUyCis6MTA2MTQwMDBEQTg3MTdEQTgyMjQ3MjNEMjIzMjkzN0YyRjBCNkQwODkzCis6MTA2MTUwMDAwNTI4MzI5MzdGOEYwMjYzRkZGM0MwQzRDMEIwMUFEQTAwCis6MTA2MTYwMDAxNkMwNTFEOTQwMDQ1OTM5MjlBNDIwNkU0NDAyMEJCNUY4Cis6MTA2MTcwMDAwMkMzMjgxRURBMTFEREIwMjVFNDIyMDUyRDM5MkRFNEY1Cis6MTA2MTgwMDAyMUMwNTAxRURBOTAxOURBODAxOERBODAxNkRBODIxREUyCis6MTA2MTkwMDBEQThFOTQxMDJBNzI0NTE3REE0QzZEQTk0QkQ0NTBCMzlECis6MTA2MUEwMDA1NTdBNUIxN0RGNTA3NTZCMDcxRkRBMDM4RkYwMEY1RkFGCis6MTA2MUIwMDAwQzEyREE0NDAyRjIyOEFFMjIyMkQ2ODFENTQwMTNEQTNDCis6MTA2MUMwMDA0MTc0NkIwNzE1RDlGRDg1NTAwNTQ1MEMwMzUzMjhCMTYzCis6MTA2MUQwMDA0NUE3M0ZBODMyQTkzMzIyMzY5RDIyMzY5RTI0MzY4MDE5Cis6MTA2MUUwMDAyQjM2OUYyQkY0OEIyQ0Y0OEMxNERBNUMyNDQyNERDMDlDCis6MTA2MUYwMDAzMDA0MTQxNEM4NEM2RDA4MDZCMTMzMDQxNDE0Qzg0MjlBCis6MTA2MjAwMDA2M0ZGRjIwMDE1RDlFQUM0NDAwMDMxMDQxQUQ5RUJDMDhCCis6MTA2MjEwMDBEMTkzQTIwMEREMUFDMTM4QjBERDlEQTMxOERBNTAyQjRFCis6MTA2MjIwMDA4MjREMjk4MjRFMjlBNTFDMjg4MjUzN0E4NzFFMkM1NDIwCis6MTA2MjMwMDAwMDhFMTA2RkU0NUQxMkQ5RTAyRjIxMUQyMzIxMUMyRjQ5Cis6MTA2MjQwMDAyNTFCMDQzMzBDMjMyNTFDMjMyNTFBRDEwRkMwNjIxOEVCCis6MTA2MjUwMDBEQTNGODg4MDdFODdEOTg5MTAyNjU0MDA2Rjk0MTkxQkY1Cis6MTA2MjYwMDBEOUQ2MkFCMTFDMEExQTE0MDRBQTBDMkFCNTFDMkFCNUJDCis6MTA2MjcwMDAxRDJBQjUxQTJBQjUxQkQxMEYxQkQ5Q0YyQUIxMUMwQTZBCis6MTA2MjgwMDAxQTE0MDNBQTBDMkFCNTFDMkFCNTFEMkFCNTFBMkFCNTU4Cis6MTA2MjkwMDAxQkQxMEYwMDFDRDlDOTJCQzExRDJEQzExQzJCQzUxQjI3Cis6MTA2MkEwMDAwM0REMEMyREM1MUMyREM1MUFEMTBGMDA2QzEwMDYxOTZECis6MTA2MkIwMDBEOUMyMTREQTI2MTJEQTI5MTVEQTQ0QzczRkMwRTAyRTEzCis6MTA2MkMwMDA1NkE4MkU1NkE5MkU1NkFBMkU1NkFCMjMyNjI5MThEOUUzCis6MTA2MkQwMDBFQURCMTAxQ0RBM0VDMEQ0MkE0MjQ1MkQxNjAxOUMxMDgwCis6MTA2MkUwMDAwMEIwODkwQTg4MEMyODk2MDA1QkZGOTQyQjIyRTMxOEUzCis6MTA2MkYwMDBEOUIyMEI1QjE0OUI4NDJBMjJFNDhCODRCMUFBMEE1QTdDCis6MTA2MzAwMDAxNDBCQUEwQzlBODUyOTIyRTUwOTU5MTQ5OTg2MkYyMjgzCis6MTA2MzEwMDBDRDBGNUYxNDlGODc1QkZGNDU1QkZGMTYyMzQ2M0JDMTk0Cis6MTA2MzIwMDBCMDFERDlBNTFDREEwMzJBRDEwMjJDNDYzQTBCQUEwMkM5Cis6MTA2MzMwMDAwQTBBNEYyQUQ1MDI1ODA0N0M1QkZFQkY1QkZFOThDMDU4Cis6MTA2MzQwMDA1MEMwQjAxNkQ5OUIxNEQ5QTMxN0RBMTJDMEMwQzczRUVCCis6MTA2MzUwMDA5MzEyMkMyNjJEQzAzMDYwMDA0MzAwMDAwMDdGOUYwRjU5Cis6MTA2MzYwMDBCMTU1MDkxOTE0NjU5RkY0QzA1MDBBQTkwMjdGQTdFRjFGCis6MTA2MzcwMDAxOEQ5OEZEQTUwMDg1ODBBMjg4MjJDMkIwQTAwMEI4MDczCis6MTA2MzgwMDAwMDAwNTEwNEQyQTBDMDkxQzdBRjAwOTkxQTBBOTkwMzI2Cis6MTA2MzkwMDA5OTEyQ0UzMzY0MjA2N0QzMjAyQjIwMDc5NTEzOEMxMkRCCis6MTA2M0EwMDAyQTYyODI3Q0E4NUYxOEQ5ODEwODU4MEEyODgyMkNEQUQwCis6MTA2M0IwMDA1MDBCODAwMEQyQTA2NDNGREE4QTMxMEE4QTE0MDRBQTAyCis6MTA2M0MwMDAwMUM4Mjk4QjIxMEI4QjE0MDRCQjAxN0JBOTQ1RERBMERGCis6MTA2M0QwMDA3QTdCMDgxREQ5NzkyREQyMDAwREFEMENEQjMwMTlEOThGCis6MTA2M0UwMDA3MzFBRDlCODI4MTIwMzBBREEyODA4OEMwMjFERDlGNUM1Cis6MTA2M0YwMDAwOTg4MEEyODgyM0MwREFBMDgwQjgwMDA2NTJGOTdEM0Q0Cis6MTA2NDAwMDAyMEMwQjA2M0ZGOTdDQjUzQjE1NTAwNTAwNDBBMDkxOTVGCis6MTA2NDEwMDA2M0ZGNDkwMERBQjA3QjdCMDcxQUQ5Njc4QUEwMEFCQTAyCis6MTA2NDIwMDAwQzFCRDlBODhDMzEwQkFCMjgwQzhBMTQxQ0Q5RTZBQ0Y4Cis6MTA2NDMwMDBCQjFDRDlFNTA0QUEwMTJCQzY4MTYzRkY5MDdGQTdDN0M3Cis6MTA2NDQwMDA2M0ZGNjIwMDZDMTAwNDI3MjIxRUMwODAwOEU0MzExQjI5Cis6MTA2NDUwMDBEOTU4MDAwMjAwMkFCMjgyMTlEOTU4MDAzMTA0QzA2MTBCCis6MTA2NDYwMDAwMDY2MUEyOTkxMDIwQTZBMDIyQUI2ODIwOUU0MzExNUU1Cis6MTA2NDcwMDBEOUIzMEMzODExQTg1MzI4MzI4MjI0MzI4NDJBOENGQ0Q4Cis6MTA2NDgwMDA3ODQxMTAyOTIxMDIyQTM2ODI5N0EwMDk2OTAyMjkyNTFDCis6MTA2NDkwMDAwMkQxMEYwMDJCMjEwMjJDMzI4NTBCNkIwMjJDQ0NGQzdECis6MTA2NEEwMDAyQzM2ODI5N0MwMkIyNTAyRDEwRjAwMDA2QzEwMDRDMDNGCis6MTA2NEIwMDBFNzFERDkzQjFDRDkzRDBENDkxMUQ3MjA4QjIyOEEyMERECis6MTA2NEMwMDAwQjRCMEJEMkEwMDdBODBDOUI3MjI4OENGNEM4MzQ2RjFFCis6MTA2NEQwMDA4RTAyNjAwMEEyMUZEOTMzQTI5OEFGN0I3OEIzMzRDOTczCis6MTA2NEUwMDAzREMwODFDMEYwMDI4RjM4MEYwRjQyQzlGQTJDRDY3RTEyCis6MTA2NEYwMDBENTIwNkQ0QTA1MDAzMDg4MDA1MDhDODg3MDA4OTgwOEI3Cis6MTA2NTAwMDA3OEIxNkNEMkEwOTg3MEQxMEZDMEYwMDM4RjM4N0ZFMEMzCis6MTA2NTEwMDBERTYzRkZEODAyN0IwQ0FGQkIwQjk5MEM2NDMwNDZEODBFCis6MTA2NTIwMDAzMEMwRjFDMDUwMDJGNTM4MDUwNTQyNjQ1MDc5MkNENkQwCis6MTA2NTMwMDA3RTBCMzYxMjJGNkMxMDBGNEYzNjZERkEwNTAwODA4OEQ3Cis6MTA2NTQwMDAwMDIwOEMwNjQ0MENDMDgxMjUwQTAwMDNCMjA4MjM3QzdECis6MTA2NTUwMDAwQzAzODUzODA1MDU0MjY0NTA1OTJDRDY3RTZENEEwNURBCis6MTA2NTYwMDAwMDIwODgwMDMwOENEMkEwQTc5OEJDODg5ODcwRDEwRkVBCis6MTA2NTcwMDBEMkEwQkM3OTk5NzBEMTBGRDIzMDJCQUQwOEMwRjFDMDM4Cis6MTA2NTgwMDA1MDBCRjUzODA1MDU0MkNCNTUyQ0Q2N0UwODNGMTRDMTdCCis6MTA2NTkwMDA2MDBGNjYwQzA2NDYzNkQzMEY2RDZBMDUwMDIwODgwMDMyCis6MTA2NUEwMDBCMDhDODI3MDYzRkYyRDAwQzA1MDAzRjUzODc1RTA4MDE5Cis6MTA2NUIwMDA2M0ZGN0EwMEMwNjAwMjg2Mzg3NkUwQTA2M0ZGOUEwMDJECis6MTA2NUMwMDBDMDUwMDNGNTM4NzVFMEMzNjNGRkJEMDA2QzEwMDRENkZFCis6MTA2NUQwMDAyMDY4NTIwRjY5NTMyNERBMjBEQjMwREM0MDU4MDBGMDg5Cis6MTA2NUUwMDBEMkEwRDEwRkRBMjBEQjMwREM0MDU4MDBFRDlBMjQyNDExCis6MTA2NUYwMDAyNDBFQzAyMTIyNjQwRkMwMjBEMTBGMDBCODNCQjA0QzQ0Cis6MTA2NjAwMDAyQTJDNzQ4OTI0MkQyMDBFMkUyMDBGQTREREIxRUUyRTBECis6MTA2NjEwMDAyNDBGQjBERDJEMjQwRTI4OTAwNzJEOTAwM0E0ODhCMDAwCis6MTA2NjIwMDA4OEIxREQyRDk0MDMyODk0MDc1QkZGQTA2OTUxMURDMDNDCis6MTA2NjMwMDBFMDgyMjQyQTYwMEYxOEQ5NjYyQTI0MDMyOTYwMEU4RjZECis6MTA2NjQwMDAyMDI5MjQwNzA4RkYwMjlGMjA5RTY0RDEwRkMwMjBEMTdCCis6MTA2NjUwMDAwRjAwMDAwMDZDMTAwNDk0MjMxOUQ5NUVDMEIzMDgzQUVGCis6MTA2NjYwMDAxMTBCQUEwMjk5MjAxOUQ4RDI5QTIxMTZEOEQwQzA1MDVECis6MTA2NjcwMDAyODkyOUQyNTY0QTIyODhDMTgyODk2OUREMTBGMDAwMDkxCis6MTA2NjgwMDA2QzEwMDQyODIwNjZDMDM4MjMyNDA2Qjc4ODI4MjQ2NkE2Cis6MTA2NjkwMDBEMTBGMDAwMDZDMTAwNjAzNUEwQzBEMzYxMTBENUMxMTYxCis6MTA2NkEwMDBEODIwOEIyMjgyMjEwQ0JCMEMwNjU1MEY5QjgyMDIzMjE0Cis6MTA2NkIwMDAwQjkyODExM0Q4QkNEOTIwQTM4RjY0NTA1MzFDRDhCODM3Cis6MTA2NkMwMDBDMEQ3MUJEOEI5QTI1NkMwRTEyOTBBMDAwNEU5MzgwOThECis6MTA2NkQwMDAwOTQyNzZGMzRBMDQ0MzAyQzk5RTJCQzY3RTZEQUEwNTgxCis6MTA2NkUwMDAwMDIwODgwMDMwOEM4OTgxQTk1OTA5RkEwQzY0QTA3OUFFCis6MTA2NkYwMDA5OTgxOEE4MkM4QUREMjkwRDEwRkMwNjAwMkU2Mzg3NjA3Cis6MTA2NzAwMDBEMERBNjNGRkQ0QzAyMEJDODk5OTgxOTk4MDkyODJEMTZDCis6MTA2NzEwMDAwRjdGMjMwNDI5MkRGODk5ODE2NUJGRDk2M0ZGRTUwMDE4Cis6MTA2NzIwMDAwMjhGMENBM0ZGMEYzMzEyOTMxMDAzQUEwQ0QzNDBDQjlDCis6MTA2NzMwMDA5RTJCQzY3RTg2MTA2RDZBMDUwMDIwODgwMDMwOENCQ0JBCis6MTA2NzQwMDA4MjI5MEEwMDA0RjMwODI0MEEwMTAzNDkzODA5MDk0MjhFCis6MTA2NzUwMDBDQTk4MkJDNjdFNkRBQTA1MDAyMDg4MDAzMDhDMEY1OTgwCis6MTA2NzYwMDAwQ0E5ODlCQzk5OTk4MTYzRkY4N0JDODk5OTgxNjNGRkQyCis6MTA2NzcwMDA4MEMwNjAwMkU2Mzg3NkQwQkE2M0ZGQjRDMDcwMDI0N0NBCis6MTA2NzgwMDAzODc3RDBEMDYzRkZDQTAwNkMxMDA0MTREODk1QzE1MjdBCis6MTA2NzkwMDBBNDI0Q0EzMDI4MjIxRDczODExQjI5MjEwMkNEOTUyQUU5Cis6MTA2N0EwMDAzMDAwNzVBOTEyREEyMDAzM0IwMjJDMzAwNzJEMEEwMkIzCis6MTA2N0IwMDA1ODAxQzI2NTNGREREMTBGMkIzMDA3MDNCQjBCREFCMEE4Cis6MTA2N0MwMDA3NEIzMDIyQUJERjhEM0EwNjNGRkM2MDA2QzEwMDQyOTdECis6MTA2N0QwMDAyMDA2QzA3MDZFOTc0MTI5MjEwMkMwOEYyQTIwMTRDMDY0Cis6MTA2N0UwMDBCNjJCMjQwNjA2QUEwMjJBMjQxNDc5ODAwMjI3MjUwMjQxCis6MTA2N0YwMDAyQTIyMUUyQzIyMUQ3QUMxMEVDOEFCREEyMERCMzAyQ0Q3Cis6MTA2ODAwMDAwQTAwMDMzRDAyNUJGODE0NjQ1MDc1MkQyMTAyMEQwRDQyCis6MTA2ODEwMDA0Q0M5RDNDMDIwRDEwRjAwMDAyRTlDRkI2NEUwODIyRjE2Cis6MTA2ODIwMDAyMTAyMEYwRjRDNjVGMDkxMUFEODYyMUNEODYwMjlBMjgyCis6MTA2ODMwMDA5RUMwOEE3OThCNUQyQkMyMjY2OEIwMDQ4RDIwN0JEOURGCis6MTA2ODQwMDA1MjI5QTI5REMwRjM2NDkwNEE5NzkwMUREODczMkUyMUJGCis6MTA2ODUwMDAwNDlEOTYwOEVFMTEwRkVFMDI5RTk3OUU5MTE4RDg2RjM4Cis6MTA2ODYwMDBDMEU1MjdDNEEyMkUyNDA2MkJBMjlEMkYyMTAyMkJCQ0ZCCis6MTA2ODcwMDAzMDA4RkYwMjJGMjUwMjJCQTY5REMwMjBEMTBGMDAwMDVCCis6MTA2ODgwMDAwMDJGMzAwMDY4RjkzOERBMjBEQjMwREM0MDU4MDA0NDUzCis6MTA2ODkwMDA2M0ZGNzcwMDAyMkEwMjJCMEEwNjU4MDBEMzIyMEEwMDVGCis6MTA2OEEwMDBEMTBGNjU1MDEwMjgzMDAwNjg4OTI0MDIyQTAyMDMzQjZBCis6MTA2OEIwMDAwMkRDNDA1ODAwM0JDMDIwRDEwRkQyNzBEMTBGMDAwMDQ1Cis6MTA2OEMwMDAyQTJDNzQwMzNCMDIwNDRDMDI1QkZFRjg2M0ZGM0IwMDdFCis6MTA2OEQwMDBEQjMwREM0MDJBMkM3NDVCRkVGNUMwMjBEMTBGMDAwMEI5Cis6MTA2OEUwMDA2QzEwMDRDODNGODkyNjg4MjlBMzk5OTkyNjA5ODgwQzI5Cis6MTA2OEYwMDAwODA4NDgyODI1MjVDQzUyQzAyMEQxMEZEQjQwMkEyQzdGCis6MTA2OTAwMDA3NDVCRjkzREQyQTBEMTBGNkMxMDA0RDgyMEQ3MzA4MjJGCis6MTA2OTEwMDAyMjBENDUxMTA1MjIwQzkyODI2NDIwNzQwNzQyMEIxMzRDCis6MTA2OTIwMDBEODIxRDQyMEEzODM3MzIzMDIyNDJERjg4NTgwNzQ1MUE5Cis6MTA2OTMwMDA0Q0JDODJDMDkwNkQwODE2MDA0MDg4MDA3MDhDNzczOTdFCis6MTA2OTQwMDAwM0Q3MjBDMDkxODY4MDc0MzkwMUQ0MjA3NDYxMDI2MzFBCis6MTA2OTUwMDBGRkUyQ0E5OEMwOTdDMDQxMUJEOEEwQzBBMDBCOEIwQzA3Cis6MTA2OTYwMDAwQjRBMzgwQTBBNDJDOUFBMUREODBFMUNEODBGMkNENkM5Cis6MTA2OTcwMDA3RUMxNDBEMzBGNkQ0QTA1MDAyMDg4MDAzMDhDOTc4MDdGCis6MTA2OTgwMDBEMjcwRDEwRkJDOEZDMEUwMEY0RTM4N0U5MEUyNjNGRjEzCis6MTA2OTkwMDBENkJDODI5MjgxOTI4MEMwMjA5MjgyRDEwRjAwMDAwMEVBCis6MTA2OUEwMDA2QzEwMDZDMEQ3MUNEN0ZFMUJEODAwMEQ0OTExRDcyMDhDCis6MTA2OUIwMDAyRTIyMUYyODIyMUQwRTRFMEJEMjgwMDc4QTBDMkU3NjA3Cis6MTA2OUMwMDAxRjJBQUM4MEM4MzQ2RkFFMDI2MDAwQ0IyRjBBODAxQTM5Cis6MTA2OUQwMDBEODA0QTI5RUFBN0E3RUEzM0ZDOTNGQzBFMUMwNTAwMjVDCis6MTA2OUUwMDBFNTM4MDUwNTQyQ0E1NTJCQzY3RURCMjBEMzBGNkQ0QTFDCis6MTA2OUYwMDAwNTAwMzA4ODAwQjA4QzJFNzIxREFFOUUwRUE1MEM2NDcyCis6MTA2QTAwMDA1MDg2RDI4MDJFNzYxREMwOTEyOTg0MDNEMTBGQzA1MEFDCis6MTA2QTEwMDAwM0U1Mzg3NUQwRDM2M0ZGQ0QxNUQ3RjEwMjdFMENBNTAxCis6MTA2QTIwMDBFRTY0MzA1MUMwQTEyNTBBMDAwMkE1MzgwMzNBMDIwNUUwCis6MTA2QTMwMDAwNTQyNjQ1MDkyMkJDNjdFMEUzNTEyOTUxMDI1NUMxMENGCis6MTA2QTQwMDAwNTQ1MzZEMzBGNkQ1QTA1MDBBMDg4MDAyMDhDQzBBMUUzCis6MTA2QTUwMDBBM0UyQzA1MDIzRkE4MDAzNzMwQzAzQTUzOEFGNzMwNTdCCis6MTA2QTYwMDAwNTQyNjQ1MDcyMkJDNjdFODUxMDA1NDUwQzZENUEwNTkzCis6MTA2QTcwMDAwMDIwODgwMDMwOENEMjgwQzBBMTBFOUIwQ0FCN0JBRjc1Cis6MTA2QTgwMDBCQjJCNzYxRDJBODQwM0QxMEZEMjgwQzBDMUFGN0QyREQwCis6MTA2QTkwMDA3NjFEMkM4NDAzRDEwRjAwRDIzMDJFOEQwOEMwRjFDMDlBCis6MTA2QUEwMDA1MDBFRjUzODA1MDU0MkNCNTkyQkM2N0UwQTNGMTRDMTVFCis6MTA2QUIwMDA2MDBGNjYwQzA2NDYzNkQzMEY2RDZBMDUwMDIwODgwMDBECis6MTA2QUMwMDBFMDhDMjI3MjFENjNGRjAzQzA2MUMwNTAwMzY1Mzg3NUZFCis6MTA2QUQwMDBEODAyNjNGRjYyNjNGRjVDQzA1MDAyQTUzODc1RDA4NzlGCis6MTA2QUUwMDA2M0ZGODEwMEMwNjAwM0Y2Mzg3NkQwQkY2M0ZGQjkwMDUyCis6MTA2QUYwMDA2QzEwMDQyQTIwMTUyOTIwMTYxNEQ3QUYwQTk5MENDQjQ0Cis6MTA2QjAwMDA5RDJFMjAwQjA0RUQwOTJCRDExQzhGMjgwOUJDMzZBQzFGCis6MTA2QjEwMDBBQTBDQkIwQzJCRDUxQzBBMEE0NzJBMjQxNUNBQUY4QjFBCis6MTA2QjIwMDA0Mzg5NDJCMEE4MDA5MTA0MDA4ODFBQThGRjBGQkIwMjU1Cis6MTA2QjMwMDA5QjI3OEYyNjBGQjgwQzc4M0IxQUMwMjBEMTBGMDAwMDdFCis6MTA2QjQwMDAyOTIxMDJDMEEyMEE5OTAyMjkyNTAyQzAyMUQxMEYwMEUxCis6MTA2QjUwMDA4QjI3NjNGRkRDMkJEMTFDMENBQTBDMEEwQTQ3MkEyNEMyCis6MTA2QjYwMDAxNUFDQkIyQkQ1MUNDOUFFOEI0MzhDMjg4RjQyQjBBRDY2Cis6MTA2QjcwMDAwMEYxMDQwMEREMUFBRENDMENCQjAyOUIyN0RBMjBCNzc0Cis6MTA2QjgwMDBFQjU4MDAxOUMwMjFEMTBGOUYyNzYzRkZFRjAwMDAwMEQxCis6MTA2QjkwMDA2QzEwMDQyODIwM0M2NDMwNDcwNTMwNjAwMDA3M0UwMTNCCis6MTA2QkEwMDAwNTNFQjE1NjA3NjUzOTA1NDkyOEM3N0ZBOTMzMDMwNjU1Cis6MTA2QkIwMDA0MTA3NjYwM0IxNjYwNjA2NDFBNjMzN0U4NzFFMjIyMTgxCis6MTA2QkMwMDAyNTI5MUFGQzczMkIxNTAyMzgwQzA5ODE2MDAwMDYzRTNBCis6MTA2QkQwMDAwMTAyM0VCMTI0MDY0MjM5MDMyMjBBRDEwRkQyMzBEMTNDCis6MTA2QkUwMDAwRkMwNTE2M0ZGQzAwMDAwNkMxMDA0MjcyMjFFQzA4MDNDCis6MTA2QkYwMDAwOEU0MzExREQ3NkYwMDAyMDAyQ0QyODIxQkQ3NkYwMDMyCis6MTA2QzAwMDAzMTA0QzA2MTAwNjYxQTJCQjEwMjBDNkMwMjJDRDY4MkQyCis6MTA2QzEwMDAwQkU0MzExOUQ3RjIwQzNBMTFBQTkzMjgzMjgyOTc4MEVCCis6MTA2QzIwMDAyNTMyODIyNDMyODRCNDU1MjUzNjgyNzU0MTBBMjkyMUMxCis6MTA2QzMwMDAwMjA5NjkwMjI5MjUwMkQxMEYyQTIxMDIyQjMyODMwQTc3Cis6MTA2QzQwMDA2QTAyMkIzNjgyMkEyNTAyRDEwRjAwMDA2QzEwMDQxOTJCCis6MTA2QzUwMDBENzYzMjcyMjFFQzA4MDA5NzcwMjA4RTQzMTFERDc1NDZDCis6MTA2QzYwMDAwMDAyMDAyQ0QyODIxQkQ3NTQwMDMxMDRDMDYxMDA2NkEwCis6MTA2QzcwMDAxQTJCQjEwMjBDNkMwMjJDRDY4MjBCRTQzMTE5RDdENzM3Cis6MTA2QzgwMDAwQzNBMTFBQTkzMjgzMjgyOTc4MDI1MzI4MjI0MzI4NENBCis6MTA2QzkwMDBCNDU1MjUzNjgyNzU0MTBCMkEyMTAyMEE2QTAyMkEyNTNCCis6MTA2Q0EwMDAwMkQxMEYwMDJCMjEwMjJDMzI4MzBCNkIwMjJDMzY4Mjc3Cis6MTA2Q0IwMDAyQjI1MDJEMTBGMDAwMDAwNkMxMDA0MUJENzNEMEMyQUJECis6MTA2Q0MwMDAxMUFCQUEyOUEyODZCNDM4Nzk4QjIyMUJENzNBMTlEN0RGCis6MTA2Q0QwMDA2MTBCMkIwQTJCQjJBMzA5MjkwODY4QjAwMjc0QjkwRDA1Cis6MTA2Q0UwMDAyOTlEMDEyOTkwMUY2RTkyMDgyMkEyODVEMTBGQzAyMEY0Cis6MTA2Q0YwMDBEMTBGQzg5MkMwMjBEMTBGREEyMDVCRUYzNUMwMjBEMTcwCis6MTA2RDAwMDAwRjAwMDAwMDZDMTAwNDE0RDcyQTI4NDI5RTE5RDcyN0MwCis6MTA2RDEwMDA2Rjg4MDI2MDAwQkEyOTkyMjY2ODkwMDc4QTIwMDlBQTIzCis6MTA2RDIwMDAwQzY1QTBBQzJBNDI5REMwREM2NEEwQTQyQjIwMEMxOUU5Cis6MTA2RDMwMDBENzIxMENCQzExQTRDQzJFQzI4NjA5QjkwQTdFRDMwMjdECis6MTA2RDQwMDA2MDAwOUEyOTkyQTM2ODkwMDc4RDIwMDlERDBDNjVEMDE4Cis6MTA2RDUwMDA4QzI1QzI4NTY0NTA4NjJEMjEwNEMwMzA2RUQ4MEQyQzQwCis6MTA2RDYwMDAyMDY2QjhDQzBDMEM0NzJDMjQ2NjY1QzA3QjFDRDc5Q0Q1Cis6MTA2RDcwMDAxOEQ3MjgxQUQ3MUUxOUQ3MkYxREQ3MjRDMEU0OUU1MTIzCis6MTA2RDgwMDA5RDUwOEYyMDkzNTc5MzU1OTk1MzlBNTY5QTU0MDhGRkM0Cis6MTA2RDkwMDAwMjFBRDczQTlGNTI4ODI2OUY1QTlFNTk5RDU4OTM1RTUxCis6MTA2REEwMDA5QzVEOTM1QzlBNUIwODA4NDgwNTg4MTE5ODVGQzBEODgxCis6MTA2REIwMDAxRkQ3MDgwQ0I5MTFBNDk5Mjg5Mjg1QUZCRjIzRjRDRjJGCis6MTA2REMwMDAyODhDNDAyODk2ODU4RTI2MkQyNDA2OUUyOUMwMjBEMTA5Cis6MTA2REQwMDAwRkNBMzNEQTIwQzBCNjVCRkY4NEM3MkZEMTBGQzkzQTgwCis6MTA2REUwMDBEQTIwNUJGRjgxQzcyRkQxMEZEQkQwNUJGRTFBMjMyNDkzCis6MTA2REYwMDA2NjJCMjAwQzYzRkY3NTAwQzcyRkQxMEZDNzJGRDEwRjUzCis6MTA2RTAwMDA2QzEwMDRDODVCMjkyMDA2Njg5NDFDNjg5NjA3QzAyMDkzCis6MTA2RTEwMDBEMTBGQzAyMEQxMEZEQTIwREIzMERDNDBERDUwMkUwQTRDCis6MTA2RTIwMDAwMDVCRkU2QUQyQTBEMTBGMkUyMDBDMThENkUxMENFRjI5Cis6MTA2RTMwMDAxMUE4RkYyOUYyODZDMDg4Nzk4Qjc1MUFENkRFMEFFQTc2Cis6MTA2RTQwMDAwQTJBQTJBMzY4QTAwNDhCMjA3QUI5NjQyM0YyODU2NDdECis6MTA2RTUwMDAzMDVFMUNENkU4MkEwQTgwMkQyMDY4MjkyMDY3MjgyMTY4Cis6MTA2RTYwMDAwNDBCOTkxMTA0ODgxMTA5ODgwMjA4REQwMkMwOTQyOEQ2Cis6MTA2RTcwMDA0QTEwMDhERDAyMThENkUwOTkzMTk4MzA4QjJCOUEzN0VBCis6MTA2RTgwMDA5RDM0MENCQjAyOUIzMkMwQzA5QzM1OUMzNjJBMkM3NEFFCis6MTA2RTkwMDBEQjQwQzBEMzE4RDZDRjI5RjI4NUE4RUUyOTlDMjAyQzQwCis6MTA2RUEwMDBFNENGMjlGNjg1MkQyNDA2REQ0MDVCRkRGQUQyQTBEMTgyCis6MTA2RUIwMDAwRkRBMjBEQkUwNUJGRjRDQzAyMEQxMEY2QzEwMEFENjRDCis6MTA2RUMwMDAzMDJBMjAwNjk0MTEyOEFDRjg2NTgzODcyQjIxMjJDMDM0Cis6MTA2RUQwMDBGMjJBMjEyNDY1NTAwODJBQUMwMTBBMEE0RjJBMjUyNEU3Cis6MTA2RUUwMDA3QUJCMDI2MDAzN0YyQzIxMDIwQzBDNEM2NUMzMTkyRTY3Cis6MTA2RUYwMDAyMjE1OEQzMkMwOTEwRUREMEM2NUQzOTA4ODM4MUVENkQ4Cis6MTA2RjAwMDBBQzY0ODM2QjhDMzdDMEI4QzA5NjBDQjkzOTk5MTRCNDkzCis6MTA2RjEwMDA5QTlBMTIwRDk5MTE5OTEzOEY2NzE4RDZBN0M5RkIyODUxCis6MTA2RjIwMDA4MDIxN0Y4MzE2OEIxNDJDMjIwMDJBMjAwQzVCRkY2MkE5Cis6MTA2RjMwMDBENEEwNjRBM0E4OEY2NzYwMDAyODAwMDAyQjIwMEM4OUQwCis6MTA2RjQwMDAxMjBDQkExMUFFQUEyQ0EyODYxREQ2OUE3QzlCM0UwREJECis6MTA2RjUwMDBCRDBBMkREMkEzNjhEMDA0ODgyMDdEODkzMDI0QTI4NTYzCis6MTA2RjYwMDA2NDQzNjQyNzIxMkUwN0Y3MzYwN0Y5MEM2RjlEMDFENzdDCis6MTA2RjcwMDBGMERBMjBEQjcwQzFDNDJEMjExRjVCRkYwNTg5MjY4ODU0Cis6MTA2RjgwMDAyN0REQTAwOTg4MEM3QThCMTc5QTEwNjAwMDA2QzA0MDk0Cis6MTA2RjkwMDA2M0ZGQ0MwMDAwREEyMDhCMTA1QkZFRDU4RDEwNjVBMjVDCis6MTA2RkEwMDA2N0MwRTA5RTQ4OEM2NDlDNDk4QjY1OEE2NjlCNEE5QUMwCis6MTA2RkIwMDA0Qjk3NDU4RjY3N0Y3MzAyNjAwMTIwQ0Q1MjlEMTBEQTk5Cis6MTA2RkMwMDAyMERCMzAyQzEyMDE1QkZFNzY4RDEwQzA1MUQ2QTA4RkQ1Cis6MTA2RkQwMDBBN0MwQzA4QTY4OTc0RDlBNEM4ODY5ODk2QTk4NEU5OTZCCis6MTA2RkUwMDA0RjhFNkE4QTY5QUU3RTc3RUIwMUIxQUE5RTZBOUE2OTcyCis6MTA2RkYwMDA4QjYwQzBBMDBCOEUxNDc3QjcwMUMwQTFDMDkxQzA4NDc0Cis6MTA3MDAwMDA5MzE1OUQxNzk1MTZDMEQwMjUyMDNDQzAzMDA4NTgwMTE3Cis6MTA3MDEwMDAwODkzMzhDMDgyMDgzMzEwMDg1QjAxMDUzNTQwMEI5RDhBCis6MTA3MDIwMDAzODA3REQxMDBCQUIxMDBFMTk0MDJBMjExRjA3OTkxMEVECis6MTA3MDMwMDAwM0REMDIwREJCMDIwNTUzMTAwOTMzMDIwQTU1MTEyOTY1Cis6MTA3MDQwMDAyMTI1MEEyQTE0MDkyOTE0MDQ5OTExMEE5OTAyMDkzM0RECis6MTA3MDUwMDAwMjhBMkIyOTIxMDQwQkFBMDIxQkQ2RTIwODk5MTEwOUU2Cis6MTA3MDYwMDA1NTAyMDg1NTAyMEJBQTAyOUE0MDg5MjA4ODE0MDg5OUYzCis6MTA3MDcwMDAxMTA5ODgwMjE5RDY2MzFERDZEQzA5ODgwMjk4NDE4QjU0Cis6MTA3MDgwMDAyQTkzNDY5NTQ3ODMxNTBEQkIwMjg1MTY4RDE3OUI0NEExCis6MTA3MDkwMDA4QTY1ODk2NkFBQ0FBOTdDNzdDQjAxQjFBQTA3RkIwQ0NECis6MTA3MEEwMDA5QzY2OUE2NTg4MjY4RTI5QUQ4Nzk3MjYwN0VFMEMwRTdBCis6MTA3MEIwMDAwRTQ4MkUyNTI1OUI2NzJCMjAwQzg3MTMxRUQ2M0QwQ0QyCis6MTA3MEMwMDBCOTExQUU5OTI4OTI4NUE3ODgyODk2ODUxN0Q2NDFDMDEwCis6MTA3MEQwMDA5MEE3QkIyOUI0Q0Y4NzE4NjNGRTNDMDA4QzYwQzBFMDRBCis6MTA3MEUwMDBDMDkxQzBGMEMwMzRDMEI4MkEyMTA0MjgyMDNDMDhBQUFFCis6MTA3MEYwMDAxMTBCOEIwMTAzODMwMTAzOUYzODBCOUIzOUMwMzIwOEFFCis6MTA3MTAwMDBGRjEwMDM4ODAxMDg5RTM4MEM4ODE0MDdFRTEwMEZFRTVDCis6MTA3MTEwMDAwMjAzODgwMTA4OTgzOTA1QkYxMDI5MjExRjBBQkIxMUY1Cis6MTA3MTIwMDAwNzg4MTAwOEZGMDIwQkFBMDIxOEQ2MzUwOTI5MTQwMzk0Cis6MTA3MTMwMDBBQTAyMkIyMTI1ODMyMDBCMkIxNDA0QkIxMTA4MzMxMTI5Cis6MTA3MTQwMDAwRkJCMDIwQjk5MDI4QjE0OEYyQTBCMzMwMjA4MzMwMkY4Cis6MTA3MTUwMDA4QjJCNjQ3MDg2ODg2ODk3NEQ5ODRDODc2OTg4NkE5M0YyCis6MTA3MTYwMDA0MTk5NDY5NzRFOTg0RkMwNzA3N0M3MDFDMDcxOUE0N0IyCis6MTA3MTcwMDAxOEQ2OUUwQjdDMTAwQ0VDMDIwOEY4MDI5ODQ0MThENjI2Cis6MTA3MTgwMDA5QjBDQkMwMjA4Q0MwMjlDNDAyQTIwMEMyOTVDRkVDMDRGCis6MTA3MTkwMDA4MDFGRDYwNzFDRDYwRjBDQUUxMTJCMjEyNEFDQUFBRjMyCis6MTA3MUEwMDBFRUIwQkI4RjEzMkNFMjg1MjhBNENGQUZDQzJDRTY4NUE0Cis6MTA3MUIwMDAyQTIyMTUyQjI1MjRCMUFBMkEyNjE1NjQ5MERCQzlEMkQwCis6MTA3MUMwMDA4RjI2MkUyMjA5MERGRjA4MkYyNjA2MEZFRTBDMEUwRTFECis6MTA3MUQwMDA0ODJFMjUyNTY1NTBFNEMwMjBEMTBGMDBDMDcwOTM0MTkyCis6MTA3MUUwMDA5RjQ0OTk0NjlBNDc3N0M3MEExQ0Q1RjMyQ0MwMjJDMDAyCis6MTA3MUYwMDA4MTBDODczODFDRDY3RjBCNzgxMDA4RTgwMjA4QjgwMjhCCis6MTA3MjAwMDAwQzg4MDI5ODQwNjNGRjgwMDBDQzU3REEyMERCNjA4QzRBCis6MTA3MjEwMDAxMTVCRkRFMzI5MjEwMjY4OTgwNjY4OTQwM0MwMjBEMTIwCis6MTA3MjIwMDAwRjJCMjIxRUMwQTAyOTIyMUQyQTI1MDI3Qjk5MDFDMEY2Cis6MTA3MjMwMDBCMDY0QkZFODEzRDVERTJDQjAwNzI4QjAwMERBMjAwMzE1Cis6MTA3MjQwMDA4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0MxCis6MTA3MjUwMDBGRkNBMDAwMDY4QTc3OURBMjBEQjMwREM0MERENTA1QjM0Cis6MTA3MjYwMDBGRUU4RDJBMEQxMEZDMTZEQzE5RDI5MjUyQzYwMDAwNDdDCis6MTA3MjcwMDAyOTI1MkNENjkwMjYyNDY3MkYyNDY4REEyMERCMzA4QzMxCis6MTA3MjgwMDAxMURENTAyRTBBODA1QkZENTFEMkEwRDEwRkMxNjhDMTIzCis6MTA3MjkwMDBBODJBMjUyQzYzRkZERDAwMDAwMEM4REY4QzI2OEIyOTdGCis6MTA3MkEwMDBBRENDOUMyNjBDQkIwQzBCMEI0ODJCMjUyNTJBMkM3NDMzCis6MTA3MkIwMDBEQjYwMkMxMjAxNUJGRDk0RDJBMEQxMEYyQTJDNzQ4QkMxCis6MTA3MkMwMDAxMTVCRjZDREQyQTBEMTBGREEyMDVCRkU0NzYzRkYzODA5Cis6MTA3MkQwMDAwMERBMjBDMEIxNUJGRThCNjVBRjJENjNGQkVEREEyMEQ5Cis6MTA3MkUwMDAyQjIwMEM1QkZFNUE2M0ZGMUYwMDAwMDAxMkQ2NDI4MjY3Cis6MTA3MkYwMDAyMDAyODI1N0M4MjE2M0ZGRkMxMkQ2M0UwM0U4MzAwNDA3Cis6MTA3MzAwMDBFRTMwMDVCMTMwOTMyMDk0MjE5NTIyNjNGRkZDMDAwMEZDCis6MTA3MzEwMDAxMEQ2M0E5MTAwOTIwMTkzMDI5NDAzMTFENjExODIxMDczCis6MTA3MzIwMDAwMUVBMzBBMjExMDFGMDMxQzA0MDA0RTQxNjAwMDIwMDZECis6MTA3MzMwMDAxMUQ2MzM4MjEwMjM0QTAwMDMyMjAyOTIxMDExRDVGRDg4Cis6MTA3MzQwMDBDMDIxOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDAwMDkxCis6MTA3MzUwMDBEMjMwMDEyMzAwMDAwMDAwMTBENjJBOTEwMDkyMDE5MzQwCis6MTA3MzYwMDAwMjk0MDMxMUQ2MDA4MjEwMDFFQTMwQTIxMTAxRjEzMTFBCis6MTA3MzcwMDBDMDQwMDRFNDE2MDAwMjAwMTFENjIxODIxMDEzRDVBN0U0Cis6MTA3MzgwMDAwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDBCCis6MTA3MzkwMDAwMEQzMzAwMTMzMDAwMDAwMTBENjFCOTEwMDgxMDE2NTNECis6MTA3M0EwMDAxMDQ5ODEwMjY1MTA0NDgxMDNDRjFGOTIwMTkzMDI5NDFBCis6MTA3M0IwMDAwMzExRDVFRTgyMTAwMUVBMzBBMjExMDFGMjMxQzA0MDcyCis6MTA3M0MwMDAwNEU0MTYwMDAyMDAxMUQ2MEQ4MjEwMTNENThFMDMyMjlDCis6MTA3M0QwMDAwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDFDMDEwOTEwM0ZECis6MTA3M0UwMDA5MTAyOTEwMTgxMDAwMEQ0MzAwMTQzMDAxMkQ1QkRDMDRCCis6MTA3M0YwMDAzMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzIzM0QwMTY4Cis6MTA3NDAwMDA3MjMzRUQwMzAyMDA2M0ZGRkMwMDAwMDAxMEQ1RkY5MTEyCis6MTA3NDEwMDAwMDkyMDE5MzAyOTQwMzExRDVGRDgyMTA5MjEwMTFENUIwCis6MTA3NDIwMDBBRjgzMTAwMzIyMDI5MjEwMTFENUZBMTJENUMxOTIxMDI3Cis6MTA3NDMwMDBDMDQwMDRFNDE2MDAwMjAwMTFENUYxODIxMDEzRDVBODUzCis6MTA3NDQwMDAwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDRBCis6MTA3NDUwMDAwMEQ1MzAwMTUzMDAwMDAwNkMxMDAyNkUzMjJGRDYyMDkwCis6MTA3NDYwMDAwNTZGMDQwNDNGMDQ3NDVCMkEwNTQ0MEMwMDQxMDQwMENBCis6MTA3NDcwMDAzMzFBMjIwQTAwNkQ0OTBENzM2MzA0MDM2NjBDQjEyMkFFCis6MTA3NDgwMDAwRjIyMTEwMzEzMTQ3MzYzMDIyMjJDMDFEMTBGQzgzQjg2Cis6MTA3NDkwMDBEMTBGMDAwMDczNjMwQ0MwMjFEMTBGMDAwMDAwMDAwMDY5Cis6MTA3NEEwMDA0NDQ5NTYzMEMwMjBEMTBGNkMxMDAyMDA0MDA0NkI0QzkwCis6MTA3NEIwMDAwNzAzMjMxODAyMDIxOUQxMEYwMjAzMTlDMDIwRDEwRkFDCis6MTA3NEMwMDA2QzEwMDIwMkVBMzBEMTBGNkMxMDAyQ0MyNTAzRjAzMUFGCis6MTA3NEQwMDA2MDAwMEYwMDZGMjIwNTAzRjEzMTYwMDAwNTZGMjMwNTg2Cis6MTA3NEUwMDAwM0YyMzEwMDAyMDBEMTBGNkMxMDAyQ0MyNTAyRjAzMDAzCis6MTA3NEYwMDBEMTBGMDAwMDZGMjIwNDAyRjEzMEQxMEY2RjIzMDQwMjdDCis6MTA3NTAwMDBGMjMwRDEwRkMwMjBEMTBGNkMxMDAyMjIwQTIwMjMwQUMyCis6MTA3NTEwMDAwMDZEMjgwRTI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzM0Cis6MTA3NTIwMDAyMzNEMDEwMzAyMDBEMTBGNkMxMDAyMDJFNDMxRDEwRkEwCis6MTA3NTMwMDAwQTAwMDAwMDQzNjg2NTZDNzM2OTZGMjA0NjU3MjA0NDU5Cis6MTA3NTQwMDA0NTQyNTU0NzNEMzAyMDI4NDI3NTY5NkM3NDIwNTc2NTg3Cis6MTA3NTUwMDA2NDIwNEY2Mzc0MjAyMDM4MjAzMTM1M0EzNTMwM0EzNTc1Cis6MTA3NTYwMDAzMDIwNTA0NDU0MjAzMjMwMzAzODIwNkY2RTIwNjM2QzBECis6MTA3NTcwMDA2NTZGNzA2MTc0NzI2MTNBMkY2ODZGNkQ2NTJGNjY2NTEzCis6MTA3NTgwMDA2QzY5NzgyRjc3MkY2Njc3NUYzNzJFMzAyOTJDMjA1NjNECis6MTA3NTkwMDA2NTcyNzM2OTZGNkUyMDU0MzM3ODc4MjAzMDMwMzcyRURGCis6MTA3NUEwMDAzMDMxMkUzMDMwMjAyRDIwMzEzMDMwMzczMDMxMzAzMEY2Cis6MDg3NUIwMDAxMDA3MDEwMDZGNEVGOEJCNEIKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS90ZWh1dGkvYmR4LmJpbi5paGV4IGIvZmlybXdhcmUvdGVodXRpL2JkeC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI5ZTRjCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvdGVodXRpL2JkeC5iaW4uaWhleApAQCAtMCwwICsxLDI2NzggQEAKKzoxMDAwMDAwMDAyMDAwRjAwMDA4MDcxNDAyRDAwMDAwMDAwMDAwMEMwQzEKKzoxMDAwMTAwMDAyMDAwRjAwMDE4MDcxMDAyRDAwMDAwMDAwMDA4MEMwNzAKKzoxMDAwMjAwMDAyMDAwRjAwMDI4MDcxMDAyRDAwMDAwMDAwMDAwMEMxREUKKzoxMDAwMzAwMDAyMDAwRjAwMDM4MDcxMDAyRDAwMDAwMDAwMDA4MEMxNEQKKzoxMDAwNDAwMDAyMDAwRjAwMDQ4MDcxMDAyRDAwMDAwMDAwMDAwMEMyQkIKKzoxMDAwNTAwMDAyMDAwRjAwMDU4MDcxMDAyRDAwMDAwMDAwMDA4MEMyMkEKKzoxMDAwNjAwMDAyMDAwRjAwMDY4MDcxMDAyRDAwMDAwMDAwMDAwMEMzOTgKKzoxMDAwNzAwMDAyMDAwRjAwMDc4MDcxMDAyRDAwMDAwMDAwMDA4MEMzMDcKKzoxMDAwODAwMDAyMDAwRjAwMDg4MDcxMDAyRDAwMDAwMDAwMDAwMEM0NzUKKzoxMDAwOTAwMDAyMDAwRjAwMDk4MDcxMDAyRDAwMDAwMDAwMDA4MEM0RTQKKzoxMDAwQTAwMDAyMDAwRjAwMEE4MDcxMDAyRDAwMDAwMDAwMDAwMEM1NTIKKzoxMDAwQjAwMDAyMDAwRjAwMEI4MDcxMDAyRDAwMDAwMDAwMDA4MEM1QzEKKzoxMDAwQzAwMDAyMDAwRjAwMEM4MDcxMDAyRDAwMDAwMDAwMDAwMEM2MkYKKzoxMDAwRDAwMDAyMDAwRjAwMEQ4MDcxMDAyRDAwMDAwMDAwMDA4MEM2OUUKKzoxMDAwRTAwMDAyMDAwRjAwMEU4MDcxMDAyRDAwMDAwMDAwMDAwMEM3MEMKKzoxMDAwRjAwMDAyMDAwRjAwMEY4MDcxMDAyRDAwMDAwMDAwMDA4MEM3N0IKKzoxMDAxMDAwMDAyMDAwRjAwMTA4MDcxMDAyRDAwMDAwMDAwMDAwMEM4RTgKKzoxMDAxMTAwMDAyMDAwRjAwMTE4MDcxMDAyRDAwMDAwMDAwMDA4MEM4NTcKKzoxMDAxMjAwMDAyMDAwRjAwMTI4MDcxMDAyRDAwMDAwMDAwMDAwMEM5QzUKKzoxMDAxMzAwMDAyMDAwRjAwMTM4MDcxMDAyRDAwMDAwMDAwMDA4MEM5MzQKKzoxMDAxNDAwMDAyMDAwRjAwMTQ4MDcxMDAyRDAwMDAwMDAwMDAwMENBQTIKKzoxMDAxNTAwMDAyMDAwRjAwMTU4MDcxMDAyRDAwMDAwMDAwMDA4MENBMTEKKzoxMDAxNjAwMDAyMDAwRjAwMTY4MDcxMDAyRDAwMDAwMDAwMDAwMENCN0YKKzoxMDAxNzAwMDAyMDAwRjAwMTc4MDcxMDAyRDAwMDAwMDAwMDA4MENCRUUKKzoxMDAxODAwMDAyMDAwRjAwMTg4MDcxMDAyRDAwMDAwMDAwMDAwMENDNUMKKzoxMDAxOTAwMDAyMDAwRjAwMTk4MDcxMDAyRDAwMDAwMDAwMDA4MENDQ0IKKzoxMDAxQTAwMDAyMDAwRjAwMUE4MDcxMDAyRDAwMDAwMDAwMDAwMENEMzkKKzoxMDAxQjAwMDAyMDAwRjAwMUI4MDcxMDAyRDAwMDAwMDAwMDA4MENEQTgKKzoxMDAxQzAwMDAyMDAwRjAwMUM4MDcxMDAyRDAwMDAwMDAwMDAwMENFMTYKKzoxMDAxRDAwMDAyMDAwRjAwMUQ4MDcxMDAyRDAwMDAwMDAwMDA4MENFODUKKzoxMDAxRTAwMDAyMDAwRjAwMUU4MDcxMDAyRDAwMDAwMDAwMDAwMENGRjMKKzoxMDAxRjAwMDAyMDAwRjAwMUY4MDcxMDAyRDAwMDAwMDAwMDA4MENGNjIKKzoxMDAyMDAwMDAyMDAwRjAwMjA4MDcxMDAyRDAwMDAwMDAwMDAwMEQwQ0YKKzoxMDAyMTAwMDAyMDAwRjAwMjE4MDcxMDAyRDAwMDAwMDAwMDA4MEQwM0UKKzoxMDAyMjAwMDAyMDAwRjAwMjI4MDcxMDAyRDAwMDAwMDAwMDAwMEQxQUMKKzoxMDAyMzAwMDAyMDAwRjAwMjM4MDcxMDAyRDAwMDAwMDAwMDA4MEQxMUIKKzoxMDAyNDAwMDAyMDAwRjAwMjQ4MDcxMDAyRDAwMDAwMDAwMDAwMEQyODkKKzoxMDAyNTAwMDAyMDAwRjAwMjU4MDcxMDAyRDAwMDAwMDAwMDA4MEQyRjgKKzoxMDAyNjAwMDAyMDAwRjAwMjY4MDcxMDAyRDAwMDAwMDAwMDAwMEQzNjYKKzoxMDAyNzAwMDAyMDAwRjAwMjc4MDcxMDAyRDAwMDAwMDAwMDA4MEQzRDUKKzoxMDAyODAwMDAyMDAwRjAwMjg4MDcxMDAyRDAwMDAwMDAwMDAwMEQ0NDMKKzoxMDAyOTAwMDAyMDAwRjAwMjk4MDcxMDAyRDAwMDAwMDAwMDA4MEQ0QjIKKzoxMDAyQTAwMDAyMDAwRjAwMkE4MDcxMDAyRDAwMDAwMDAwMDAwMEQ1MjAKKzoxMDAyQjAwMDAyMDAwRjAwMkI4MDcxMDAyRDAwMDAwMDAwMDA4MEQ1OEYKKzoxMDAyQzAwMDAyMDAwRjAwMkM4MDcxMDAyRDAwMDAwMDAwMDAwMEQ2RkQKKzoxMDAyRDAwMDAyMDAwRjAwMkQ4MDcxMDAyRDAwMDAwMDAwMDA4MEQ2NkMKKzoxMDAyRTAwMDAyMDAwRjAwMkU4MDcxMDAyRDAwMDAwMDAwMDAwMEQ3REEKKzoxMDAyRjAwMDAyMDAwRjAwMkY4MDcxMDAyRDAwMDAwMDAwMDA4MEQ3NDkKKzoxMDAzMDAwMDAyMDAwRjAwMzA4MDcxMDAyRDAwMDAwMDAwMDAwMEQ4QjYKKzoxMDAzMTAwMDAyMDAwRjAwMzE4MDcxMDAyRDAwMDAwMDAwMDA4MEQ4MjUKKzoxMDAzMjAwMDAyMDAwRjAwMzI4MDcxMDAyRDAwMDAwMDAwMDAwMEQ5OTMKKzoxMDAzMzAwMDAyMDAwRjAwMzM4MDcxMDAyRDAwMDAwMDAwMDA4MEQ5MDIKKzoxMDAzNDAwMDAyMDAwRjAwMzQ4MDcxMDAyRDAwMDAwMDAwMDAwMERBNzAKKzoxMDAzNTAwMDAyMDAwRjAwMzU4MDcxMDAyRDAwMDAwMDAwMDA4MERBREYKKzoxMDAzNjAwMDAyMDAwRjAwMzY4MDcxMDAyRDAwMDAwMDAwMDAwMERCNEQKKzoxMDAzNzAwMDAyMDAwRjAwMzc4MDcxMDAyRDAwMDAwMDAwMDA4MERCQkMKKzoxMDAzODAwMDAyMDAwRjAwMzg4MDcxMDA3QjAwMDAwMDAwODA2MERERkIKKzoxMDAzOTAwMDAyMDAwRjAwMzk4MDcxMDAyRDAwMDAwMDAwMDAwMEREMTgKKzoxMDAzQTAwMDAyMDAwRjAwM0E4MDcxMDAyRDAwMDAwMDAwMDA4MERCODkKKzoxMDAzQjAwMDAyMDAwRjAwM0I4MDcxMDAyRDAwMDAwMDAwMDAwMERERjYKKzoxMDAzQzAwMDAyMDAwRjAwM0M4MDcxMDAyRDAwMDAwMDAwMDAwMERERTUKKzoxMDAzRDAwMDAyMDAwRjAwM0Q4MDcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDAzRTAwMDAyMDAwRjAwM0U4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDAzRjAwMDAyMDAwRjAwM0Y4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDA0MDAwMDAyMDAwRjAwNDA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMDA0MTAwMDAyMDAwRjAwNDE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA0MjAwMDAyMDAwRjAwNDI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDA0MzAwMDAyMDAwRjAwNDM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA0NDAwMDAyMDAwRjAwNDQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDA0NTAwMDAyMDAwRjAwNDU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDA0NjAwMDAyMDAwRjAwNDY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDA0NzAwMDAyMDAwRjAwNDc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDA0ODAwMDAyMDAwRjAwNDg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDA0OTAwMDAyMDAwRjAwNDk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDA0QTAwMDAyMDAwRjAwNEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDA0QjAwMDAyMDAwRjAwNEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDA0QzAwMDAyMDAwRjAwNEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDA0RDAwMDAyMDAwRjAwNEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA0RTAwMDAyMDAwRjAwNEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDA0RjAwMDAyMDAwRjAwNEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDA1MDAwMDAyMDAwRjAwNTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA1MTAwMDAyMDAwRjAwNTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDA1MjAwMDAyMDAwRjAwNTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA1MzAwMDAyMDAwRjAwNTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDA1NDAwMDAyMDAwRjAwNTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDA1NTAwMDAyMDAwRjAwNTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDA1NjAwMDAyMDAwRjAwNTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDA1NzAwMDAyMDAwRjAwNTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDA1ODAwMDAyMDAwRjAwNTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDA1OTAwMDAyMDAwRjAwNTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDA1QTAwMDAyMDAwRjAwNUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDA1QjAwMDAyMDAwRjAwNUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDA1QzAwMDAyMDAwRjAwNUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA1RDAwMDAyMDAwRjAwNUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDA1RTAwMDAyMDAwRjAwNUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDA1RjAwMDAyMDAwRjAwNUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDA2MDAwMDAyMDAwRjAwNjA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDA2MTAwMDAyMDAwRjAwNjE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA2MjAwMDAyMDAwRjAwNjI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDA2MzAwMDAyMDAwRjAwNjM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDA2NDAwMDAyMDAwRjAwNjQ4MDcxMDAyRDAwMDAwMDAwMDAwMERCM0MKKzoxMDA2NTAwMDAyMDAwRjAwNjU4MDcxMDAzRjAwMDAwMDA0MDEwMEREMTIKKzoxMDA2NjAwMDAyMDAwRjAwNjY4MDcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDA2NzAwMDAyMDAwRjAwNjc4MDcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDA2ODAwMDAyMDAwRjAwNjg4MDcxMDAzRjAwMDAwMDA0MDgwMERERDgKKzoxMDA2OTAwMDAyMDAwRjAwNjk4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA2QTAwMDAyMDAwRjAwNkE4MDcxMDAzRjAwMDAwMDA0MzAwMEREOEUKKzoxMDA2QjAwMDAyMDAwRjAwNkI4MDcxMDAzRjAwMDAwMDAxMDAxOEREOTgKKzoxMDA2QzAwMDAyMDAwRjAwNkM4MDcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDA2RDAwMDAyMDAwRjAwNkQ4MDcxMDAzRjAwMDAwMDA0MDAwMEREOEIKKzoxMDA2RTAwMDAyMDAwRjAwNkU4MDcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDA2RjAwMDAyMDAwRjAwNkY4MDcxMDAzRjAwMDAwMDA0M0QwMEREMkMKKzoxMDA3MDAwMDAyMDAwRjAwNzA4MDcxMDAzRjAwMDAwMDAxMDAxOERENDIKKzoxMDA3MTAwMDAyMDAwRjAwNzE4MDcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDA3MjAwMDAyMDAwRjAwNzI4MDcxMDAzRjAwMDAwMDA0MDcwMEREMkUKKzoxMDA3MzAwMDAyMDAwRjAwNzM4MDcxMDA2OTAwMDAwMDdBM0QwMERENDcKKzoxMDA3NDAwMDAyMDAwRjAwNzQ4MDcxMDAzRjAwMDAwMDg0MjgwMERENkIKKzoxMDA3NTAwMDAyMDAwRjAwNzU4MDcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDA3NjAwMDAyMDAwRjAwNzY4MDcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDA3NzAwMDAyMDAwRjAwNzc4MDcxMDAzRjAwMDAwMDA0MzcwMEREQTkKKzoxMDA3ODAwMDAyMDAwRjAwNzg4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA3OTAwMDAyMDAwRjAwNzk4MDcxMDAzRjAwMDAwMDA0MjkwMEREOTUKKzoxMDA3QTAwMDAyMDAwRjAwN0E4MDcxMDAzRjAwMDAwMDAxMDAxOEREOTgKKzoxMDA3QjAwMDAyMDAwRjAwN0I4MDcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDA3QzAwMDAyMDAwRjAwN0M4MDcxMDAzRjAwMDAwMDA0QUEwNEREREQKKzoxMDA3RDAwMDAyMDAwRjAwN0Q4MDcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDA3RTAwMDAyMDAwRjAwN0U4MDcxMDAzRjAwMDAwMDA0MjgwMERENDEKKzoxMDA3RjAwMDAyMDAwRjAwN0Y4MDcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDA4MDAwMDAyMDAwRjAwODA4MDcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDA4MTAwMDAyMDAwRjAwODE4MDcxMDAzRjAwMDAwMDA0MzEwMEREMDQKKzoxMDA4MjAwMDAyMDAwRjAwODI4MDcxMDA2OTAwMDAwMDdBM0QwMERENDcKKzoxMDA4MzAwMDAyMDAwRjAwODM4MDcxMDAzRjAwMDAwMDg0MkIwMERENjgKKzoxMDA4NDAwMDAyMDAwRjAwODQ4MDcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDA4NTAwMDAyMDAwRjAwODU4MDcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDA4NjAwMDAyMDAwRjAwODY4MDcxMDAzRjAwMDAwMDA0RTQwMURERkIKKzoxMDA4NzAwMDAyMDAwRjAwODc4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA4ODAwMDAyMDAwRjAwODg4MDcxMDAzRjAwMDAwMDg0MDA4MEQ3QzQKKzoxMDA4OTAwMDAyMDAwRjAwODk4MDcxMDAzRjAwMDAwMDAxMDA5OEQ3MUUKKzoxMDA4QTAwMDAyMDAwRjAwOEE4MDcxMDA1OTAwMDAwMEVGMzc4MEQ3RTYKKzoxMDA4QjAwMDAyMDAwRjAwOEI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3ODgKKzoxMDA4QzAwMDAyMDAwRjAwOEM4MDcxMDAzRDAwMDAwMDZGMDA4MEY3NzcKKzoxMDA4RDAwMDAyMDAwRjAwOEQ4MDcxMDAzRDAwMDAwMDZGMDA4MEY3NjYKKzoxMDA4RTAwMDAyMDAwRjAwOEU4MDcxMDAyRDAwMDAwMDdGMDJENkQ3MUQKKzoxMDA4RjAwMDAyMDAwRjAwOEY4MDcxMDAxODAwMDAwMDgxMDBGRjE3QjgKKzoxMDA5MDAwMDAyMDAwRjAwOTA4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MzIKKzoxMDA5MTAwMDAyMDAwRjAwOTE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjEKKzoxMDA5MjAwMDAyMDAwRjAwOTI4MDcxMDAyRDAwMDAwMEI4MDBEOEQ3OUYKKzoxMDA5MzAwMDAyMDAwRjAwOTM4MDcxMDAxODAwMDAwMDgxMDBFQjE3ODcKKzoxMDA5NDAwMDAyMDAwRjAwOTQ4MDcxMDAzRjAwMDAwMDA0MjkwMEREQzgKKzoxMDA5NTAwMDAyMDAwRjAwOTU4MDcxMDAzRjAwMDAwMDAxMDAxOEREQ0IKKzoxMDA5NjAwMDAyMDAwRjAwOTY4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA5NzAwMDAyMDAwRjAwOTc4MDcxMDAzRjAwMDAwMDg0QUEwNEREOTAKKzoxMDA5ODAwMDAyMDAwRjAwOTg4MDcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDA5OTAwMDAyMDAwRjAwOTk4MDcxMDAzRjAwMDAwMDA0MkIwMERENzEKKzoxMDA5QTAwMDAyMDAwRjAwOUE4MDcxMDAzRjAwMDAwMDAxMDAxOERENzYKKzoxMDA5QjAwMDAyMDAwRjAwOUI4MDcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDA5QzAwMDAyMDAwRjAwOUM4MDcxMDAzRjAwMDAwMDA0MDAwMERENjkKKzoxMDA5RDAwMDAyMDAwRjAwOUQ4MDcxMDA2OTAwMDAwMDdBM0QwMEREN0IKKzoxMDA5RTAwMDAyMDAwRjAwOUU4MDcxMDAzRjAwMDAwMDg0MjkwMEREOUUKKzoxMDA5RjAwMDAyMDAwRjAwOUY4MDcxMDAzRjAwMDAwMDAxMDAxOEREMjEKKzoxMDBBMDAwMDAyMDAwRjAwQTA4MDcxMDA2OTAwMDAwMDdBM0QwMERENDcKKzoxMDBBMTAwMDAyMDAwRjAwQTE4MDcxMDAzRjAwMDAwMDA0MDAwMEREMTMKKzoxMDBBMjAwMDAyMDAwRjAwQTI4MDcxMDA2OTAwMDAwMDdBM0QwMEREMjUKKzoxMDBBMzAwMDAyMDAwRjAwQTM4MDcxMDAzRjAwMDAwMDA0MkEwMEREQzcKKzoxMDBBNDAwMDAyMDAwRjAwQTQ4MDcxMDAzRjAwMDAwMDAxMDAxOEREQ0IKKzoxMDBBNTAwMDAyMDAwRjAwQTU4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDBBNjAwMDAyMDAwRjAwQTY4MDcxMDAzRjAwMDAwMDg0OTEwMEREQUQKKzoxMDBBNzAwMDAyMDAwRjAwQTc4MDcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDBBODAwMDAyMDAwRjAwQTg4MDcxMDAzRjAwMDAwMDg0MTk4MEQ2OEEKKzoxMDBBOTAwMDAyMDAwRjAwQTk4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2MTUKKzoxMDBBQTAwMDAyMDAwRjAwQUE4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2MjIKKzoxMDBBQjAwMDAyMDAwRjAwQUI4MDcxMDAxODAwMDAwMDgxMDBGRjM3QkEKKzoxMDBBQzAwMDAyMDAwRjAwQUM4MDcxMDAzRjAwMDAwMDA0MkIwMEREMkQKKzoxMDBBRDAwMDAyMDAwRjAwQUQ4MDcxMDAzRjAwMDAwMDAxMDAxOEREMzIKKzoxMDBBRTAwMDAyMDAwRjAwQUU4MDcxMDA2OTAwMDAwMDdBM0QwMERENTkKKzoxMDBBRjAwMDAyMDAwRjAwQUY4MDcxMDAzRjAwMDAwMDA0MDAwMEREMjUKKzoxMDBCMDAwMDAyMDAwRjAwQjA4MDcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDBCMTAwMDAyMDAwRjAwQjE4MDcxMDAzRjAwMDAwMDg0MkEwMERENTgKKzoxMDBCMjAwMDAyMDAwRjAwQjI4MDcxMDAzRjAwMDAwMDAxMDAxOEREREMKKzoxMDBCMzAwMDAyMDAwRjAwQjM4MDcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDBCNDAwMDAyMDAwRjAwQjQ4MDcxMDAzRjAwMDAwMDA0MDAwMEREQ0YKKzoxMDBCNTAwMDAyMDAwRjAwQjU4MDcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDBCNjAwMDAyMDAwRjAwQjY4MDcxMDAzRjAwMDAwMDg0MEM4MEQ2QTgKKzoxMDBCNzAwMDAyMDAwRjAwQjc4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2MjYKKzoxMDBCODAwMDAyMDAwRjAwQjg4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2MzMKKzoxMDBCOTAwMDAyMDAwRjAwQjk4MDcxMDAxODAwMDAwMDgxMDBGRjM3Q0IKKzoxMDBCQTAwMDAyMDAwRjAwQkE4MDcxMDAzRjAwMDAwMDg0MkEwMEREQkYKKzoxMDBCQjAwMDAyMDAwRjAwQkI4MDcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDBCQzAwMDAyMDAwRjAwQkM4MDcxMDA2OTAwMDAwMDdBM0QwMERENkEKKzoxMDBCRDAwMDAyMDAwRjAwQkQ4MDcxMDAzRjAwMDAwMDA0MDAwMEREMzYKKzoxMDBCRTAwMDAyMDAwRjAwQkU4MDcxMDA2OTAwMDAwMDdBM0QwMERENDgKKzoxMDBCRjAwMDAyMDAwRjAwQkY4MDcxMDAzRjAwMDAwMDg0MEY4MEQ2MEMKKzoxMDBDMDAwMDAyMDAwRjAwQzA4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2OEMKKzoxMDBDMTAwMDAyMDAwRjAwQzE4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2OTkKKzoxMDBDMjAwMDAyMDAwRjAwQzI4MDcxMDAxODAwMDAwMDgxMDBGRjM3MzEKKzoxMDBDMzAwMDAyMDAwRjAwQzM4MDcxMDAzRjAwMDAwMDA0MkEwMEREQTUKKzoxMDBDNDAwMDAyMDAwRjAwQzQ4MDcxMDAzRjAwMDAwMDAxMDAxOEREQTkKKzoxMDBDNTAwMDAyMDAwRjAwQzU4MDcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDBDNjAwMDAyMDAwRjAwQzY4MDcxMDAzRjAwMDAwMDg0MTEwMEREMEIKKzoxMDBDNzAwMDAyMDAwRjAwQzc4MDcxMDA2OTAwMDAwMDdBM0QwMEREQUUKKzoxMDBDODAwMDAyMDAwRjAwQzg4MDcxMDAzRjAwMDAwMDg0MjgwMERERDIKKzoxMDBDOTAwMDAyMDAwRjAwQzk4MDcxMDAzRjAwMDAwMDAxMDAxOERENTQKKzoxMDBDQTAwMDAyMDAwRjAwQ0E4MDcxMDA2OTAwMDAwMDdBM0QwMEREN0IKKzoxMDBDQjAwMDAyMDAwRjAwQ0I4MDcxMDAzRjAwMDAwMDg0MzcwMEREOTAKKzoxMDBDQzAwMDAyMDAwRjAwQ0M4MDcxMDA2OTAwMDAwMDdBM0QwMERENTkKKzoxMDBDRDAwMDAyMDAwRjAwQ0Q4MDcxMDAyRDAwMDAwMDAwMDA4MEQzQzUKKzoxMDBDRTAwMDAyMDAwRjAwQ0U4MDcxMDAzRjAwMDAwMDgwMzcwMEQyNkMKKzoxMDBDRjAwMDAyMDAwRjAwQ0Y4MDcxMDAzRjAwMDAwMDA0MDQ4MEQxOEIKKzoxMDBEMDAwMDAyMDAwRjAwRDA4MDcxMDAzRjAwMDAwMDAxMDA4NEQxN0MKKzoxMDBEMTAwMDAyMDAwRjAwRDE4MDcxMDA2OTAwMDAwMDc2M0IwMEREMDkKKzoxMDBEMjAwMDAyMDAwRjAwRDI4MDcxMDA2OTAwMDAwMDc2M0IwMERERjgKKzoxMDBEMzAwMDAyMDAwRjAwRDM4MDcxMDA2OTAwMDAwMDc2M0IwMERERTcKKzoxMDBENDAwMDAyMDAwRjAwRDQ4MDcxMDAzRjAwMDAwMDg0RkY3RkQxQkIKKzoxMDBENTAwMDAyMDAwRjAwRDU4MDcxMDAzRjAwMDAwMDgxRkY3RkQxQUQKKzoxMDBENjAwMDAyMDAwRjAwRDY4MDcxMDA2OTAwMDAwMDc2M0IwMEREQjQKKzoxMDBENzAwMDAyMDAwRjAwRDc4MDcxMDA2OTAwMDAwMDc2M0IwMEREQTMKKzoxMDBEODAwMDAyMDAwRjAwRDg4MDcxMDA2OTAwMDAwMDc2M0IwMEREOTIKKzoxMDBEOTAwMDAyMDAwRjAwRDk4MDcxMDA2OTAwMDAwMDc2M0IwMEREODEKKzoxMDBEQTAwMDAyMDAwRjAwREE4MDcxMDA2OTAwMDAwMDc2M0IwMERENzAKKzoxMDBEQjAwMDAyMDAwRjAwREI4MDcxMDA2OTAwMDAwMDc2M0IwMERENUYKKzoxMDBEQzAwMDAyMDAwRjAwREM4MDcxMDAzRjAwMDAwMDg0MDc4MEQ2MjUKKzoxMDBERDAwMDAyMDAwRjAwREQ4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2OUUKKzoxMDBERTAwMDAyMDAwRjAwREU4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2QUIKKzoxMDBERjAwMDAyMDAwRjAwREY4MDcxMDAxODAwMDAwMDgxMDBGRjM3NDMKKzoxMDBFMDAwMDAyMDAwRjAwRTA4MDcxMDA0OTAwMDAwMDYzM0IwMEREM0MKKzoxMDBFMTAwMDAyMDAwRjAwRTE4MDcxMDA1OTAwMDAwMDc2M0IwMEREMDgKKzoxMDBFMjAwMDAyMDAwRjAwRTI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QkIKKzoxMDBFMzAwMDAyMDAwRjAwRTM4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDBFNDAwMDAyMDAwRjAwRTQ4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OTkKKzoxMDBFNTAwMDAyMDAwRjAwRTU4MDcxMDAyRDAwMDAwMDdGMDIwNkREMUEKKzoxMDBFNjAwMDAyMDAwRjAwRTY4MDcxMDAxODAwMDAwMDdBM0Q3RjFEMkYKKzoxMDBFNzAwMDAyMDAwRjAwRTc4MDcxMDA0NTAwMDAwMDM5MzEwMERERkQKKzoxMDBFODAwMDAyMDAwRjAwRTg4MDcxMDA5NDAwMDAwMDNCMzEwQjAwNkQKKzoxMDBFOTAwMDAyMDAwRjAwRTk4MDcxMDA5NDAwMDAwMDNEMzEwOTAwNUMKKzoxMDBFQTAwMDAyMDAwRjAwRUE4MDcxMDA5NDAwMDAwMDNGMzEwNzAwNEIKKzoxMDBFQjAwMDAyMDAwRjAwRUI4MDcxMDA5NDAwMDAwMDc2M0IwNTAwRkIKKzoxMDBFQzAwMDAyMDAwRjAwRUM4MDcxMDAwOTAwMDAwMDdBM0RFREMxQzYKKzoxMDBFRDAwMDAyMDAwRjAwRUQ4MDcxMDAzRjAwMDAwMDgwQjcwMEQyREIKKzoxMDBFRTAwMDAyMDAwRjAwRUU4MDcxMDAzRjAwMDAwMDg0MjgwMERENEEKKzoxMDBFRjAwMDAyMDAwRjAwRUY4MDcxMDAzRjAwMDAwMDAxMDAxOEREQ0MKKzoxMDBGMDAwMDAyMDAwRjAwRjA4MDcxMDA2OTAwMDAwMDY0MzIwMEREMTMKKzoxMDBGMTAwMDAyMDAwRjAwRjE4MDcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDBGMjAwMDAyMDAwRjAwRjI4MDcxMDAzRjAwMDAwMDg0MDc4MEQ2QUQKKzoxMDBGMzAwMDAyMDAwRjAwRjM4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2MjYKKzoxMDBGNDAwMDAyMDAwRjAwRjQ4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2MzMKKzoxMDBGNTAwMDAyMDAwRjAwRjU4MDcxMDAxODAwMDAwMDgxMDBGRjM3Q0IKKzoxMDBGNjAwMDAyMDAwRjAwRjY4MDcxMDA0OTAwMDAwMDYzM0IwMEREQzUKKzoxMDBGNzAwMDAyMDAwRjAwRjc4MDcxMDA1OTAwMDAwMDc2M0IwMEREOTEKKzoxMDBGODAwMDAyMDAwRjAwRjg4MDcxMDAzRDAwMDAwMDZGMDA4MEY3NDQKKzoxMDBGOTAwMDAyMDAwRjAwRjk4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MzMKKzoxMDBGQTAwMDAyMDAwRjAwRkE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjIKKzoxMDBGQjAwMDAyMDAwRjAwRkI4MDcxMDAyRDAwMDAwMDdGMDIwNkREQTMKKzoxMDBGQzAwMDAyMDAwRjAwRkM4MDcxMDAxODAwMDAwMDdBM0Q3RjFEQjgKKzoxMDBGRDAwMDAyMDAwRjAwRkQ4MDcxMDA0NTAwMDAwMDNBMzEwMEREODUKKzoxMDBGRTAwMDAyMDAwRjAwRkU4MDcxMDAxODAwMDAwMDc2M0IyRDFERUUKKzoxMDBGRjAwMDAyMDAwRjAwRkY4MDcxMDA0NTAwMDAwMDNDMzEwMERENjEKKzoxMDEwMDAwMDAyMDAwRjAwMDA4MTcxMDAxODAwMDAwMDc2M0IxMzFERTQKKzoxMDEwMTAwMDAyMDAwRjAwMDE4MTcxMDA0NTAwMDAwMDNFMzEwMEREM0IKKzoxMDEwMjAwMDAyMDAwRjAwMDI4MTcxMDAxODAwMDAwMDc2M0IxQjFEQkEKKzoxMDEwMzAwMDAyMDAwRjAwMDM4MTcxMDAzRjAwMDAwMDA0MzAwMERENUEKKzoxMDEwNDAwMDAyMDAwRjAwMDQ4MTcxMDAzRjAwMDAwMDAxMDAxOERENjQKKzoxMDEwNTAwMDAyMDAwRjAwMDU4MTcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDEwNjAwMDAyMDAwRjAwMDY4MTcxMDAzRjAwMDAwMDA0MDEwMERENTYKKzoxMDEwNzAwMDAyMDAwRjAwMDc4MTcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDEwODAwMDAyMDAwRjAwMDg4MTcxMDAwOTAwMDAwMDdBM0QyREM1QTMKKzoxMDEwOTAwMDAyMDAwRjAwMDk4MTcxMDAyOTAwMDAwMDY0MDAwMUQyRTQKKzoxMDEwQTAwMDAyMDAwRjAwMEE4MTcxMDAzRjAwMDAwMDg0MjgwMERENkIKKzoxMDEwQjAwMDAyMDAwRjAwMEI4MTcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDEwQzAwMDAyMDAwRjAwMEM4MTcxMDA2OTAwMDAwMDY0MzIwMEREMzUKKzoxMDEwRDAwMDAyMDAwRjAwMEQ4MTcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDEwRTAwMDAyMDAwRjAwMEU4MTcxMDAwOTAwMDAwMDdBM0QyOUMyNDQKKzoxMDEwRjAwMDAyMDAwRjAwMEY4MTcxMDAyOTAwMDAwMDY0MDAwMEQyN0YKKzoxMDExMDAwMDAyMDAwRjAwMTA4MTcxMDAzRjAwMDAwMDg0MjgwMEREMDQKKzoxMDExMTAwMDAyMDAwRjAwMTE4MTcxMDAzRjAwMDAwMDAxMDAxOEREODYKKzoxMDExMjAwMDAyMDAwRjAwMTI4MTcxMDA2OTAwMDAwMDY0MzIwMEREQ0UKKzoxMDExMzAwMDAyMDAwRjAwMTM4MTcxMDA2OTAwMDAwMDdBM0QwMEREOUMKKzoxMDExNDAwMDAyMDAwRjAwMTQ4MTcxMDA0OTAwMDAwMDYzM0IwMEREQzQKKzoxMDExNTAwMDAyMDAwRjAwMTU4MTcxMDA1OTAwMDAwMDc2M0IwMEREOTAKKzoxMDExNjAwMDAyMDAwRjAwMTY4MTcxMDAzRDAwMDAwMDZGMDA4MEY3NDMKKzoxMDExNzAwMDAyMDAwRjAwMTc4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MzIKKzoxMDExODAwMDAyMDAwRjAwMTg4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MjEKKzoxMDExOTAwMDAyMDAwRjAwMTk4MTcxMDAyRDAwMDAwMDdGMDIwNkREQTIKKzoxMDExQTAwMDAyMDAwRjAwMUE4MTcxMDAxODAwMDAwMDdBM0Q3RjFEQjcKKzoxMDExQjAwMDAyMDAwRjAwMUI4MTcxMDA0NTAwMDAwMDNBMzEwMEREODQKKzoxMDExQzAwMDAyMDAwRjAwMUM4MTcxMDAxODAwMDAwMDc2M0IwRjFEMEIKKzoxMDExRDAwMDAyMDAwRjAwMUQ4MTcxMDAzRjAwMDAwMDA0MzAwMEREOUYKKzoxMDExRTAwMDAyMDAwRjAwMUU4MTcxMDAzRjAwMDAwMDAxMDAxOEREQTkKKzoxMDExRjAwMDAyMDAwRjAwMUY4MTcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDEyMDAwMDAyMDAwRjAwMjA4MTcxMDAzRjAwMDAwMDA0MDEwMEREOUEKKzoxMDEyMTAwMDAyMDAwRjAwMjE4MTcxMDA2OTAwMDAwMDdBM0QwMEREQUQKKzoxMDEyMjAwMDAyMDAwRjAwMjI4MTcxMDAwOTAwMDAwMDdBM0QyREM1RTcKKzoxMDEyMzAwMDAyMDAwRjAwMjM4MTcxMDAyRDAwMDAwMDgyMDAwOEQxMDAKKzoxMDEyNDAwMDAyMDAwRjAwMjQ4MTcxMDAwODAwMDAwMDdBM0RDMzIzRDIKKzoxMDEyNTAwMDAyMDAwRjAwMjU4MTcxMDA0OTAwMDAwMDBBM0IwMEQ2MDIKKzoxMDEyNjAwMDAyMDAwRjAwMjY4MTcxMDAzRjAwMDAwMDA0MDAwMEQzM0YKKzoxMDEyNzAwMDAyMDAwRjAwMjc4MTcxMDAzRjAwMDAwMDAxMDAwNEQzMkQKKzoxMDEyODAwMDAyMDAwRjAwMjg4MTcxMDAyRjAwMDAwMDg1NDA4MUQ2RTgKKzoxMDEyOTAwMDAyMDAwRjAwMjk4MTcxMDAzRjAwMDAwMDg0RkZGRkQ0OEQKKzoxMDEyQTAwMDAyMDAwRjAwMkE4MTcxMDAzRjAwMDAwMDgxMDc4MEQ0RjYKKzoxMDEyQjAwMDAyMDAwRjAwMkI4MTcxMDAzRjAwMDAwMDg0RkZGRkQxNkUKKzoxMDEyQzAwMDAyMDAwRjAwMkM4MTcxMDAzRjAwMDAwMDAxMDA4MEQxNUUKKzoxMDEyRDAwMDAyMDAwRjAwMkQ4MTcxMDA0OTAwMDAwMDY2MzYwMEREMUMKKzoxMDEyRTAwMDAyMDAwRjAwMkU4MTcxMDA2OTAwMDAwMDc2M0IwMERERDYKKzoxMDEyRjAwMDAyMDAwRjAwMkY4MTcxMDA2OTAwMDAwMDc2M0IwMEREQzUKKzoxMDEzMDAwMDAyMDAwRjAwMzA4MTcxMDA2OTAwMDAwMDc2M0IwMEREQjMKKzoxMDEzMTAwMDAyMDAwRjAwMzE4MTcxMDA2OTAwMDAwMDY5M0IwMEREQUYKKzoxMDEzMjAwMDAyMDAwRjAwMzI4MTcxMDA2OTAwMDAwMDc2M0IwMEREOTEKKzoxMDEzMzAwMDAyMDAwRjAwMzM4MTcxMDA2OTAwMDAwMDc2M0IwMEREODAKKzoxMDEzNDAwMDAyMDAwRjAwMzQ4MTcxMDA2OTAwMDAwMDc2M0IwMERENkYKKzoxMDEzNTAwMDAyMDAwRjAwMzU4MTcxMDA2OTAwMDAwMDY5M0IwMERENkIKKzoxMDEzNjAwMDAyMDAwRjAwMzY4MTcxMDA2MTAwMDAwMDZDMDQwMEY2N0QKKzoxMDEzNzAwMDAyMDAwRjAwMzc4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QkIKKzoxMDEzODAwMDAyMDAwRjAwMzg4MTcxMDAxODAwMDAwMDgxMDA2QjNERTEKKzoxMDEzOTAwMDAyMDAwRjAwMzk4MTcxMDA0OTAwMDAwMDhCMDUwMEQ2NjIKKzoxMDEzQTAwMDAyMDAwRjAwM0E4MTcxMDAyRjAwMDAwMDA2MDE4MUQ2NzMKKzoxMDEzQjAwMDAyMDAwRjAwM0I4MTcxMDAyRDAwMDAwMDAwMDAwMEQyRjAKKzoxMDEzQzAwMDAyMDAwRjAwM0M4MTcxMDAyMTAwMDAwMEU0MDAwMEQyMDcKKzoxMDEzRDAwMDAyMDAwRjAwM0Q4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDEzRTAwMDAyMDAwRjAwM0U4MTcxMDAyRDAwMDAwMDdGMDEwNkREMkMKKzoxMDEzRjAwMDAyMDAwRjAwM0Y4MTcxMDAxODAwMDAwMDdBM0Q3RjFENDAKKzoxMDE0MDAwMDAyMDAwRjAwNDA4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RDYKKzoxMDE0MTAwMDAyMDAwRjAwNDE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MkQKKzoxMDE0MjAwMDAyMDAwRjAwNDI4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MUMKKzoxMDE0MzAwMDAyMDAwRjAwNDM4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4RkYKKzoxMDE0NDAwMDAyMDAwRjAwNDQ4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2RTEKKzoxMDE0NTAwMDAyMDAwRjAwNDU4MTcxMDAyRDAwMDAwMDAwMDAwMEQxNDYKKzoxMDE0NjAwMDAyMDAwRjAwNDY4MTcxMDA0OTAwMDAwMEU0MzM3QUQxODgKKzoxMDE0NzAwMDAyMDAwRjAwNDc4MTcxMDAyRjAwMDAwMDYyMDE3MUQxNEUKKzoxMDE0ODAwMDAyMDAwRjAwNDg4MTcxMDAyRjAwMDAwMDYyMDE2MUQxNEQKKzoxMDE0OTAwMDAyMDAwRjAwNDk4MTcxMDA0OTAwMDAwMEUzMzM0MEQxOTAKKzoxMDE0QTAwMDAyMDAwRjAwNEE4MTcxMDAzRDAwMDAwMDZGMDA4MEY3Q0MKKzoxMDE0QjAwMDAyMDAwRjAwNEI4MTcxMDAyRDAwMDAwMDdGMDEwNkRENEUKKzoxMDE0QzAwMDAyMDAwRjAwNEM4MTcxMDAxODAwMDAwMDdBM0Q3RjFENjIKKzoxMDE0RDAwMDAyMDAwRjAwNEQ4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RjkKKzoxMDE0RTAwMDAyMDAwRjAwNEU4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4NTAKKzoxMDE0RjAwMDAyMDAwRjAwNEY4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4QzYKKzoxMDE1MDAwMDAyMDAwRjAwNTA4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MjEKKzoxMDE1MTAwMDAyMDAwRjAwNTE4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2MDMKKzoxMDE1MjAwMDAyMDAwRjAwNTI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3NDMKKzoxMDE1MzAwMDAyMDAwRjAwNTM4MTcxMDAyRDAwMDAwMDdGMDEwNkREQzUKKzoxMDE1NDAwMDAyMDAwRjAwNTQ4MTcxMDAxODAwMDAwMDdBM0Q3RjFERDkKKzoxMDE1NTAwMDAyMDAwRjAwNTU4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4NzAKKzoxMDE1NjAwMDAyMDAwRjAwNTY4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4QzcKKzoxMDE1NzAwMDAyMDAwRjAwNTc4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4QjYKKzoxMDE1ODAwMDAyMDAwRjAwNTg4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4OTkKKzoxMDE1OTAwMDAyMDAwRjAwNTk4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2N0IKKzoxMDE1QTAwMDAyMDAwRjAwNUE4MTcxMDAyRDAwMDAwMDAwMDAwMEQxRTAKKzoxMDE1QjAwMDAyMDAwRjAwNUI4MTcxMDAyRDAwMDAwMEU0MDc2Q0QxNzgKKzoxMDE1QzAwMDAyMDAwRjAwNUM4MTcxMDA0OTAwMDAwMEUzMzM0MEQxNEMKKzoxMDE1RDAwMDAyMDAwRjAwNUQ4MTcxMDAzRDAwMDAwMDZGMDA4MEY3ODgKKzoxMDE1RTAwMDAyMDAwRjAwNUU4MTcxMDAyRDAwMDAwMDdGMDEwNkREMEEKKzoxMDE1RjAwMDAyMDAwRjAwNUY4MTcxMDAxODAwMDAwMDdBM0Q3RjFEMUUKKzoxMDE2MDAwMDAyMDAwRjAwNjA4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4QjQKKzoxMDE2MTAwMDAyMDAwRjAwNjE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MEIKKzoxMDE2MjAwMDAyMDAwRjAwNjI4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4ODEKKzoxMDE2MzAwMDAyMDAwRjAwNjM4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4REQKKzoxMDE2NDAwMDAyMDAwRjAwNjQ4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2QkYKKzoxMDE2NTAwMDAyMDAwRjAwNjU4MTcxMDAzRDAwMDAwMDZGMDA4MEY3RkYKKzoxMDE2NjAwMDAyMDAwRjAwNjY4MTcxMDAyRDAwMDAwMDdGMDEwNkREODEKKzoxMDE2NzAwMDAyMDAwRjAwNjc4MTcxMDAxODAwMDAwMDdBM0Q3RjFEOTUKKzoxMDE2ODAwMDAyMDAwRjAwNjg4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4MkMKKzoxMDE2OTAwMDAyMDAwRjAwNjk4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4ODMKKzoxMDE2QTAwMDAyMDAwRjAwNkE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4NzIKKzoxMDE2QjAwMDAyMDAwRjAwNkI4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4NTUKKzoxMDE2QzAwMDAyMDAwRjAwNkM4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2MzcKKzoxMDE2RDAwMDAyMDAwRjAwNkQ4MTcxMDAyRDAwMDAwMDAwMDAwMEQxOUMKKzoxMDE2RTAwMDAyMDAwRjAwNkU4MTcxMDA0OTAwMDAwMEU0MzM3OEQxRTAKKzoxMDE2RjAwMDAyMDAwRjAwNkY4MTcxMDAyRjAwMDAwMDYyMDE3MUQxQTQKKzoxMDE3MDAwMDAyMDAwRjAwNzA4MTcxMDAyRjAwMDAwMDYyMDE2MUQxQTIKKzoxMDE3MTAwMDAyMDAwRjAwNzE4MTcxMDA0OTAwMDAwMEUzMzM0MEQxRTUKKzoxMDE3MjAwMDAyMDAwRjAwNzI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MjEKKzoxMDE3MzAwMDAyMDAwRjAwNzM4MTcxMDAyRDAwMDAwMDdGMDEwNkREQTMKKzoxMDE3NDAwMDAyMDAwRjAwNzQ4MTcxMDAxODAwMDAwMDdBM0Q3RjFEQjcKKzoxMDE3NTAwMDAyMDAwRjAwNzU4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4NEUKKzoxMDE3NjAwMDAyMDAwRjAwNzY4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4QTUKKzoxMDE3NzAwMDAyMDAwRjAwNzc4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4MUIKKzoxMDE3ODAwMDAyMDAwRjAwNzg4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4NzcKKzoxMDE3OTAwMDAyMDAwRjAwNzk4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2NTkKKzoxMDE3QTAwMDAyMDAwRjAwN0E4MTcxMDAzRDAwMDAwMDZGMDA4MEY3OTkKKzoxMDE3QjAwMDAyMDAwRjAwN0I4MTcxMDAyRDAwMDAwMDdGMDEwNkREMUIKKzoxMDE3QzAwMDAyMDAwRjAwN0M4MTcxMDAxODAwMDAwMDdBM0Q3RjFEMkYKKzoxMDE3RDAwMDAyMDAwRjAwN0Q4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4QzYKKzoxMDE3RTAwMDAyMDAwRjAwN0U4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MUQKKzoxMDE3RjAwMDAyMDAwRjAwN0Y4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MEMKKzoxMDE4MDAwMDAyMDAwRjAwODA4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4RUUKKzoxMDE4MTAwMDAyMDAwRjAwODE4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2RDAKKzoxMDE4MjAwMDAyMDAwRjAwODI4MTcxMDAyRDAwMDAwMDAwMDAwMEQxMzUKKzoxMDE4MzAwMDAyMDAwRjAwODM4MTcxMDAyRDAwMDAwMEU0MDc2OEQxRDEKKzoxMDE4NDAwMDAyMDAwRjAwODQ4MTcxMDA0OTAwMDAwMEUzMzM0MEQxQTEKKzoxMDE4NTAwMDAyMDAwRjAwODU4MTcxMDAzRDAwMDAwMDZGMDA4MEY3REQKKzoxMDE4NjAwMDAyMDAwRjAwODY4MTcxMDAyRDAwMDAwMDdGMDEwNkRENUYKKzoxMDE4NzAwMDAyMDAwRjAwODc4MTcxMDAxODAwMDAwMDdBM0Q3RjFENzMKKzoxMDE4ODAwMDAyMDAwRjAwODg4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4MEEKKzoxMDE4OTAwMDAyMDAwRjAwODk4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4NjEKKzoxMDE4QTAwMDAyMDAwRjAwOEE4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4RDcKKzoxMDE4QjAwMDAyMDAwRjAwOEI4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MzMKKzoxMDE4QzAwMDAyMDAwRjAwOEM4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2MTUKKzoxMDE4RDAwMDAyMDAwRjAwOEQ4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MDAKKzoxMDE4RTAwMDAyMDAwRjAwOEU4MTcxMDAwODAwMDAwMDgxMDA3OTIyNDMKKzoxMDE4RjAwMDAyMDAwRjAwOEY4MTcxMDA0OTAwMDAwMDBDMDYwMEQ2MjUKKzoxMDE5MDAwMDAyMDAwRjAwOTA4MTcxMDAyRjAwMDAwMDA2MDE4MUQ2QjcKKzoxMDE5MTAwMDAyMDAwRjAwOTE4MTcxMDAzRjAwMDAwMDAyMDA4MEQ0OUUKKzoxMDE5MjAwMDAyMDAwRjAwOTI4MTcxMDAzRjAwMDAwMDg0MDA4MEQ0MEIKKzoxMDE5MzAwMDAyMDAwRjAwOTM4MTcxMDAzRjAwMDAwMDAyMDEwMEQ1RkEKKzoxMDE5NDAwMDAyMDAwRjAwOTQ4MTcxMDAzRjAwMDAwMDg0MDEwMEQ1NjcKKzoxMDE5NTAwMDAyMDAwRjAwOTU4MTcxMDAzRjAwMDAwMDAyMDI4MEQ1NTcKKzoxMDE5NjAwMDAyMDAwRjAwOTY4MTcxMDAzRjAwMDAwMDA0MDI4MEQ1NDQKKzoxMDE5NzAwMDAyMDAwRjAwOTc4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDE5ODAwMDAyMDAwRjAwOTg4MTcxMDAyRDAwMDAwMDdGMDEwNkREMkMKKzoxMDE5OTAwMDAyMDAwRjAwOTk4MTcxMDAxODAwMDAwMDdBM0Q3RjFENDAKKzoxMDE5QTAwMDAyMDAwRjAwOUE4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RDcKKzoxMDE5QjAwMDAyMDAwRjAwOUI4MTcxMDA2OTAwMDAwMEU5MzQwMEQ4MkIKKzoxMDE5QzAwMDAyMDAwRjAwOUM4MTcxMDA2OTAwMDAwMDZBMzUwMEQ4OTgKKzoxMDE5RDAwMDAyMDAwRjAwOUQ4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MDAKKzoxMDE5RTAwMDAyMDAwRjAwOUU4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2RTIKKzoxMDE5RjAwMDAyMDAwRjAwOUY4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0OTEKKzoxMDFBMDAwMDAyMDAwRjAwQTA4MTcxMDA0MTAwMDAwMDZCMzUwMEQ1N0QKKzoxMDFBMTAwMDAyMDAwRjAwQTE4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QUEKKzoxMDFBMjAwMDAyMDAwRjAwQTI4MTcxMDAxODAwMDAwMDgxMDBFQjM3NTYKKzoxMDFBMzAwMDAyMDAwRjAwQTM4MTcxMDA0OTAwMDAwMDBEM0IwMEQ2OTkKKzoxMDFBNDAwMDAyMDAwRjAwQTQ4MTcxMDA0OTAwMDAwMDA3M0I4MEQ2MEUKKzoxMDFBNTAwMDAyMDAwRjAwQTU4MTcxMDAyRDAwMDAwMDAwMDAwMEQxRTAKKzoxMDFBNjAwMDAyMDAwRjAwQTY4MTcxMDA0OTAwMDAwMDY2MzYwMEREMEIKKzoxMDFBNzAwMDAyMDAwRjAwQTc4MTcxMDA2OTAwMDAwMDc2M0IwMEREQzUKKzoxMDFBODAwMDAyMDAwRjAwQTg4MTcxMDA2OTAwMDAwMDc2M0IwMEREQjQKKzoxMDFBOTAwMDAyMDAwRjAwQTk4MTcxMDA2OTAwMDAwMDc2M0IwMEREQTMKKzoxMDFBQTAwMDAyMDAwRjAwQUE4MTcxMDA2OTAwMDAwMDc2M0IwMEREOTIKKzoxMDFBQjAwMDAyMDAwRjAwQUI4MTcxMDA2OTAwMDAwMDc2M0IwMEREODEKKzoxMDFBQzAwMDAyMDAwRjAwQUM4MTcxMDA2OTAwMDAwMDc2M0IwMERENzAKKzoxMDFBRDAwMDAyMDAwRjAwQUQ4MTcxMDA2OTAwMDAwMDc2M0IwMERENUYKKzoxMDFBRTAwMDAyMDAwRjAwQUU4MTcxMDA2OTAwMDAwMDc2M0IwMERENEUKKzoxMDFBRjAwMDAyMDAwRjAwQUY4MTcxMDA2MTAwMDAwMDZDMDQwMEY2NkQKKzoxMDFCMDAwMDAyMDAwRjAwQjA4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QUEKKzoxMDFCMTAwMDAyMDAwRjAwQjE4MTcxMDAxODAwMDAwMDgxMDBFQjM3NTYKKzoxMDFCMjAwMDAyMDAwRjAwQjI4MTcxMDA0OTAwMDAwMDBFM0IwMEQ2OTgKKzoxMDFCMzAwMDAyMDAwRjAwQjM4MTcxMDA0OTAwMDAwMDA4M0I4MEQ2MEQKKzoxMDFCNDAwMDAyMDAwRjAwQjQ4MTcxMDA0OTAwMDAwMDA5M0I4MEQ1RkMKKzoxMDFCNTAwMDAyMDAwRjAwQjU4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDFCNjAwMDAyMDAwRjAwQjY4MTcxMDAyRDAwMDAwMDdGMDEwNkREMkMKKzoxMDFCNzAwMDAyMDAwRjAwQjc4MTcxMDAxODAwMDAwMDdBM0Q3RjFENDAKKzoxMDFCODAwMDAyMDAwRjAwQjg4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RDcKKzoxMDFCOTAwMDAyMDAwRjAwQjk4MTcxMDA2OTAwMDAwMEVCMzUwMEQ4MjgKKzoxMDFCQTAwMDAyMDAwRjAwQkE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MUQKKzoxMDFCQjAwMDAyMDAwRjAwQkI4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MDAKKzoxMDFCQzAwMDAyMDAwRjAwQkM4MTcxMDA0MTAwMDAwMEVDMDcwMEQ2NEMKKzoxMDFCRDAwMDAyMDAwRjAwQkQ4MTcxMDA0MTAwMDAwMDZCMDg4MEQ1M0MKKzoxMDFCRTAwMDAyMDAwRjAwQkU4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QkMKKzoxMDFCRjAwMDAyMDAwRjAwQkY4MTcxMDAxODAwMDAwMDgxMDBFRDM3NjYKKzoxMDFDMDAwMDAyMDAwRjAwQzA4MTcxMDAzRjAwMDAwMDgwRkZGRkQ0ODAKKzoxMDFDMTAwMDAyMDAwRjAwQzE4MTcxMDAzRjAwMDAwMDA0MDAwMkQ1RTYKKzoxMDFDMjAwMDAyMDAwRjAwQzI4MTcxMDAzRjAwMDAwMDAxMDAxOEQ1QzIKKzoxMDFDMzAwMDAyMDAwRjAwQzM4MTcxMDA0OTAwMDAwMDZBM0IwMEREMTMKKzoxMDFDNDAwMDAyMDAwRjAwQzQ4MTcxMDA2OTAwMDAwMDY5M0IwMERERTMKKzoxMDFDNTAwMDAyMDAwRjAwQzU4MTcxMDA2OTAwMDAwMDY5M0IwMERERDIKKzoxMDFDNjAwMDAyMDAwRjAwQzY4MTcxMDAyMTAwMDAwMEVBMDAwMEQ1Q0IKKzoxMDFDNzAwMDAyMDAwRjAwQzc4MTcxMDA0OTAwMDAwMDZBM0IwRUREQzEKKzoxMDFDODAwMDAyMDAwRjAwQzg4MTcxMDAzNTAwMDAwMDdBMDAwNEQxMDUKKzoxMDFDOTAwMDAyMDAwRjAwQzk4MTcxMDAxODAwMDAwMDgxMDBGNTM3QjMKKzoxMDFDQTAwMDAyMDAwRjAwQ0E4MTcxMDAzRjAwMDAwMDgwRkZGRkQ0RDYKKzoxMDFDQjAwMDAyMDAwRjAwQ0I4MTcxMDAzRjAwMDAwMDA0MDAwNEQ1M0EKKzoxMDFDQzAwMDAyMDAwRjAwQ0M4MTcxMDAzRjAwMDAwMDAxMDAxOEQ1MTgKKzoxMDFDRDAwMDAyMDAwRjAwQ0Q4MTcxMDA2OTAwMDAwMDY5M0IwMERENEEKKzoxMDFDRTAwMDAyMDAwRjAwQ0U4MTcxMDA2OTAwMDAwMDY5M0IwMEREMzkKKzoxMDFDRjAwMDAyMDAwRjAwQ0Y4MTcxMDA0OTAwMDAwMDZBM0IwMERENDcKKzoxMDFEMDAwMDAyMDAwRjAwRDA4MTcxMDA1MTAwMDAwMEVBMDAwMEY1RDAKKzoxMDFEMTAwMDAyMDAwRjAwRDE4MTcxMDAzRDAwMDAwMDZGMDA4MEY3Q0MKKzoxMDFEMjAwMDAyMDAwRjAwRDI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QkIKKzoxMDFEMzAwMDAyMDAwRjAwRDM4MTcxMDA0OTAwMDAwMDZBM0IwRURERjQKKzoxMDFENDAwMDAyMDAwRjAwRDQ4MTcxMDAzNTAwMDAwMDdBODAwNEQxQjgKKzoxMDFENTAwMDAyMDAwRjAwRDU4MTcxMDAxODAwMDAwMDgxMDBGNTM3RTYKKzoxMDFENjAwMDAyMDAwRjAwRDY4MTcxMDAzRjAwMDAwMDA0N0Y3RkM3OTIKKzoxMDFENzAwMDAyMDAwRjAwRDc4MTcxMDAzRjAwMDAwMDAxN0Y3RkM3ODQKKzoxMDFEODAwMDAyMDAwRjAwRDg4MTcxMDAzRjAwMDAwMDAwNDA4MEQ2QTMKKzoxMDFEOTAwMDAyMDAwRjAwRDk4MTcxMDAzRjAwMDAwMDAwQzAwM0QxOTQKKzoxMDFEQTAwMDAyMDAwRjAwREE4MTcxMDAyNTAwMDAwMEUyMDAyMERFNTEKKzoxMDFEQjAwMDAyMDAwRjAwREI4MTcxMDA0OTAwMDAwMDRFMjc4MERFMjkKKzoxMDFEQzAwMDAyMDAwRjAwREM4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MTEKKzoxMDFERDAwMDAyMDAwRjAwREQ4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MDAKKzoxMDFERTAwMDAyMDAwRjAwREU4MTcxMDAzNTAwMDAwMEUyMDAwMEQxMkEKKzoxMDFERjAwMDAyMDAwRjAwREY4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2ODkKKzoxMDFFMDAwMDAyMDAwRjAwRTA4MTcxMDAxODAwMDAwMDgxMDBGNTM3MkEKKzoxMDFFMTAwMDAyMDAwRjAwRTE4MTcxMDAzRjAwMDAwMDA0MzAwMEREOEUKKzoxMDFFMjAwMDAyMDAwRjAwRTI4MTcxMDAzRjAwMDAwMDAxMDAxOEREOTgKKzoxMDFFMzAwMDAyMDAwRjAwRTM4MTcxMDA2OTAwMDAwMDNBMUQwMEREMUYKKzoxMDFFNDAwMDAyMDAwRjAwRTQ4MTcxMDA2OTAwMDAwMDdBM0QwMEREQUUKKzoxMDFFNTAwMDAyMDAwRjAwRTU4MTcxMDA3RDAwMDAwMDEzQTc2MEM3M0MKKzoxMDFFNjAwMDAyMDAwRjAwRTY4MTcxMDAzMTAwMDAwMDQxMDA4MEMwRDcKKzoxMDFFNzAwMDAyMDAwRjAwRTc4MTcxMDAzMTAwMDAwMDQ4MDAwMEM0M0IKKzoxMDFFODAwMDAyMDAwRjAwRTg4MTcxMDAzMTAwMDAwMDQ1MDA4MEMyQUYKKzoxMDFFOTAwMDAyMDAwRjAwRTk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDFFQTAwMDAyMDAwRjAwRUE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDFFQjAwMDAyMDAwRjAwRUI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDFFQzAwMDAyMDAwRjAwRUM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDFFRDAwMDAyMDAwRjAwRUQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDFFRTAwMDAyMDAwRjAwRUU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDFFRjAwMDAyMDAwRjAwRUY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDFGMDAwMDAyMDAwRjAwRjA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDFGMTAwMDAyMDAwRjAwRjE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDFGMjAwMDAyMDAwRjAwRjI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDFGMzAwMDAyMDAwRjAwRjM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDFGNDAwMDAyMDAwRjAwRjQ4MTcxMDAyRDAwMDAwMDAwMDAwMERCOTIKKzoxMDFGNTAwMDAyMDAwRjAwRjU4MTcxMDAzRjAwMDAwMDA0MzAwMEREMzkKKzoxMDFGNjAwMDAyMDAwRjAwRjY4MTcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDFGNzAwMDAyMDAwRjAwRjc4MTcxMDA2OTAwMDAwMDdBM0QwMERENkEKKzoxMDFGODAwMDAyMDAwRjAwRjg4MTcxMDAzRjAwMDAwMDA0MDAwMEREMzYKKzoxMDFGOTAwMDAyMDAwRjAwRjk4MTcxMDA2OTAwMDAwMDdBM0QwMERENDgKKzoxMDFGQTAwMDAyMDAwRjAwRkE4MTcxMDAyRDAwMDAwMDAwMDA4MEQzQjQKKzoxMDFGQjAwMDAyMDAwRjAwRkI4MTcxMDAzRjAwMDAwMDA0MDQwMERERkYKKzoxMDFGQzAwMDAyMDAwRjAwRkM4MTcxMDAzRjAwMDAwMDAxMDAxOEREREQKKzoxMDFGRDAwMDAyMDAwRjAwRkQ4MTcxMDA2OTAwMDAwMDE0MEEwMEREOUQKKzoxMDFGRTAwMDAyMDAwRjAwRkU4MTcxMDA2OTAwMDAwMDdBM0QwMERERjMKKzoxMDFGRjAwMDAyMDAwRjAwRkY4MTcxMDA0OTAwMDAwMDk0MzMwNEQxRkEKKzoxMDIwMDAwMDAyMDAwRjAwMDA4MjcxMDAzRjAwMDAwMDg0MDQwMEREMjgKKzoxMDIwMTAwMDAyMDAwRjAwMDE4MjcxMDAzRjAwMDAwMDAxMDAxOEREODYKKzoxMDIwMjAwMDAyMDAwRjAwMDI4MjcxMDA2OTAwMDAwMDYyMzEwMERERDEKKzoxMDIwMzAwMDAyMDAwRjAwMDM4MjcxMDA2OTAwMDAwMDdBM0QwMEREOUMKKzoxMDIwNDAwMDAyMDAwRjAwMDQ4MjcxMDAzRjAwMDAwMDA0MDUwMERENjMKKzoxMDIwNTAwMDAyMDAwRjAwMDU4MjcxMDAzRjAwMDAwMDAxMDAxOERENDIKKzoxMDIwNjAwMDAyMDAwRjAwMDY4MjcxMDA2OTAwMDAwMDk1MEEwMEREODEKKzoxMDIwNzAwMDAyMDAwRjAwMDc4MjcxMDA2OTAwMDAwMDdBM0QwMERENTgKKzoxMDIwODAwMDAyMDAwRjAwMDg4MjcxMDA0OTAwMDAwMDk1MzMwNEQxNUUKKzoxMDIwOTAwMDAyMDAwRjAwMDk4MjcxMDAzRjAwMDAwMDg0MDUwMEREOEUKKzoxMDIwQTAwMDAyMDAwRjAwMEE4MjcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDIwQjAwMDAyMDAwRjAwMEI4MjcxMDA2OTAwMDAwMDYyMzEwMEREMzgKKzoxMDIwQzAwMDAyMDAwRjAwMEM4MjcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDIwRDAwMDAyMDAwRjAwMEQ4MjcxMDAzRjAwMDAwMDA0MDYwMEREQzkKKzoxMDIwRTAwMDAyMDAwRjAwMEU4MjcxMDAzRjAwMDAwMDAxMDAxOEREQTkKKzoxMDIwRjAwMDAyMDAwRjAwMEY4MjcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDIxMDAwMDAyMDAwRjAwMTA4MjcxMDAzRjAwMDAwMDg0MDAwMEREMUIKKzoxMDIxMTAwMDAyMDAwRjAwMTE4MjcxMDA2OTAwMDAwMDdBM0QwMEREQUQKKzoxMDIxMjAwMDAyMDAwRjAwMTI4MjcxMDAzRjAwMDAwMDA0MDAwMERENzkKKzoxMDIxMzAwMDAyMDAwRjAwMTM4MjcxMDAzRjAwMDAwMDAxMDAxOERENTMKKzoxMDIxNDAwMDAyMDAwRjAwMTQ4MjcxMDA2OTAwMDAwMDE2MEIwMEREMTAKKzoxMDIxNTAwMDAyMDAwRjAwMTU4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDIxNjAwMDAyMDAwRjAwMTY4MjcxMDAzRjAwMDAwMDA0MTAwMEREMjUKKzoxMDIxNzAwMDAyMDAwRjAwMTc4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDIxODAwMDAyMDAwRjAwMTg4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDIxOTAwMDAyMDAwRjAwMTk4MjcxMDAzRjAwMDAwMDA0MDAwMEREMDIKKzoxMDIxQTAwMDAyMDAwRjAwMUE4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDIxQjAwMDAyMDAwRjAwMUI4MjcxMDAzRjAwMDAwMDg0MTAwMERENTAKKzoxMDIxQzAwMDAyMDAwRjAwMUM4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDIxRDAwMDAyMDAwRjAwMUQ4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDIxRTAwMDAyMDAwRjAwMUU4MjcxMDAzRjAwMDAwMDA0ODAwMUREMkMKKzoxMDIxRjAwMDAyMDAwRjAwMUY4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDIyMDAwMDAyMDAwRjAwMjA4MjcxMDAzRjAwMDAwMDA0MTEwMERENzkKKzoxMDIyMTAwMDAyMDAwRjAwMjE4MjcxMDAzRjAwMDAwMDAxMDAxOERENjQKKzoxMDIyMjAwMDAyMDAwRjAwMjI4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDIyMzAwMDAyMDAwRjAwMjM4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDIyNDAwMDAyMDAwRjAwMjQ4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDIyNTAwMDAyMDAwRjAwMjU4MjcxMDAzRjAwMDAwMDg0MTEwMEREQTQKKzoxMDIyNjAwMDAyMDAwRjAwMjY4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDIyNzAwMDAyMDAwRjAwMjc4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDIyODAwMDAyMDAwRjAwMjg4MjcxMDAzRjAwMDAwMDA0MDAxNkRERUMKKzoxMDIyOTAwMDAyMDAwRjAwMjk4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDIyQTAwMDAyMDAwRjAwMkE4MjcxMDAzRjAwMDAwMDA0MTIwMEREQ0UKKzoxMDIyQjAwMDAyMDAwRjAwMkI4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDIyQzAwMDAyMDAwRjAwMkM4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDIyRDAwMDAyMDAwRjAwMkQ4MjcxMDAzRjAwMDAwMDA0MDAwMEREQUQKKzoxMDIyRTAwMDAyMDAwRjAwMkU4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDIyRjAwMDAyMDAwRjAwMkY4MjcxMDAzRjAwMDAwMDg0MTIwMERERjkKKzoxMDIzMDAwMDAyMDAwRjAwMzA4MjcxMDAzRjAwMDAwMDAxMDAxOERENjQKKzoxMDIzMTAwMDAyMDAwRjAwMzE4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDIzMjAwMDAyMDAwRjAwMzI4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDIzMzAwMDAyMDAwRjAwMzM4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDIzNDAwMDAyMDAwRjAwMzQ4MjcxMDAzRjAwMDAwMDA0MTMwMEREMjIKKzoxMDIzNTAwMDAyMDAwRjAwMzU4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDIzNjAwMDAyMDAwRjAwMzY4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDIzNzAwMDAyMDAwRjAwMzc4MjcxMDAzRjAwMDAwMDA0MDAwMEREMDIKKzoxMDIzODAwMDAyMDAwRjAwMzg4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDIzOTAwMDAyMDAwRjAwMzk4MjcxMDAzRjAwMDAwMDg0MTMwMERENEQKKzoxMDIzQTAwMDAyMDAwRjAwM0E4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDIzQjAwMDAyMDAwRjAwM0I4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDIzQzAwMDAyMDAwRjAwM0M4MjcxMDAzRjAwMDAwMDA0MDAwNUREQTgKKzoxMDIzRDAwMDAyMDAwRjAwM0Q4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDIzRTAwMDAyMDAwRjAwM0U4MjcxMDAzRjAwMDAwMDA0MjAwMERENkIKKzoxMDIzRjAwMDAyMDAwRjAwM0Y4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI0MDAwMDAyMDAwRjAwNDA4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDI0MTAwMDAyMDAwRjAwNDE4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDI0MjAwMDAyMDAwRjAwNDI4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDI0MzAwMDAyMDAwRjAwNDM4MjcxMDAzRjAwMDAwMDg0MjAwMEREOTUKKzoxMDI0NDAwMDAyMDAwRjAwNDQ4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDI0NTAwMDAyMDAwRjAwNDU4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI0NjAwMDAyMDAwRjAwNDY4MjcxMDAzRjAwMDAwMDA0OTAwMURENzEKKzoxMDI0NzAwMDAyMDAwRjAwNDc4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDI0ODAwMDAyMDAwRjAwNDg4MjcxMDAzRjAwMDAwMDA0MjEwMEREQkYKKzoxMDI0OTAwMDAyMDAwRjAwNDk4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI0QTAwMDAyMDAwRjAwNEE4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI0QjAwMDAyMDAwRjAwNEI4MjcxMDAzRjAwMDAwMDg0MDAwMEREMkQKKzoxMDI0QzAwMDAyMDAwRjAwNEM4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDI0RDAwMDAyMDAwRjAwNEQ4MjcxMDAzRjAwMDAwMDg0MjEwMERERUEKKzoxMDI0RTAwMDAyMDAwRjAwNEU4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI0RjAwMDAyMDAwRjAwNEY4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEMKKzoxMDI1MDAwMDAyMDAwRjAwNTA4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDI1MTAwMDAyMDAwRjAwNTE4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDI1MjAwMDAyMDAwRjAwNTI4MjcxMDAzRjAwMDAwMDA0MjIwMEREMTMKKzoxMDI1MzAwMDAyMDAwRjAwNTM4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDI1NDAwMDAyMDAwRjAwNTQ4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI1NTAwMDAyMDAwRjAwNTU4MjcxMDAzRjAwMDAwMDg0MDIwMEREODAKKzoxMDI1NjAwMDAyMDAwRjAwNTY4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDI1NzAwMDAyMDAwRjAwNTc4MjcxMDAzRjAwMDAwMDg0MjIwMEREM0UKKzoxMDI1ODAwMDAyMDAwRjAwNTg4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI1OTAwMDAyMDAwRjAwNTk4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI1QTAwMDAyMDAwRjAwNUE4MjcxMDAzRjAwMDAwMDA0MDAwMEREQUQKKzoxMDI1QjAwMDAyMDAwRjAwNUI4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDI1QzAwMDAyMDAwRjAwNUM4MjcxMDAzRjAwMDAwMDA0MjMwMERENjgKKzoxMDI1RDAwMDAyMDAwRjAwNUQ4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI1RTAwMDAyMDAwRjAwNUU4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEMKKzoxMDI1RjAwMDAyMDAwRjAwNUY4MjcxMDAzRjAwMDAwMDA0MDAwMERENTgKKzoxMDI2MDAwMDAyMDAwRjAwNjA4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDI2MTAwMDAyMDAwRjAwNjE4MjcxMDAzRjAwMDAwMDA0MTgwMEREMUQKKzoxMDI2MjAwMDAyMDAwRjAwNjI4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDI2MzAwMDAyMDAwRjAwNjM4MjcxMDA2OTAwMDAwMDk3MEIwMERENEIKKzoxMDI2NDAwMDAyMDAwRjAwNjQ4MjcxMDA2OTAwMDAwMDdBM0QwMEREMjUKKzoxMDI2NTAwMDAyMDAwRjAwNjU4MjcxMDA0OTAwMDAwMDk3MzMwNEQxMjkKKzoxMDI2NjAwMDAyMDAwRjAwNjY4MjcxMDAzRjAwMDAwMDg0MTgwMERENDgKKzoxMDI2NzAwMDAyMDAwRjAwNjc4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI2ODAwMDAyMDAwRjAwNjg4MjcxMDA2OTAwMDAwMDYyMzEwMEREMDUKKzoxMDI2OTAwMDAyMDAwRjAwNjk4MjcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDI2QTAwMDAyMDAwRjAwNkE4MjcxMDAzRjAwMDAwMDA0MTkwMEREODMKKzoxMDI2QjAwMDAyMDAwRjAwNkI4MjcxMDAzRjAwMDAwMDAxMDAxOERENzYKKzoxMDI2QzAwMDAyMDAwRjAwNkM4MjcxMDA2OTAwMDAwMDE4MEMwMEREMzAKKzoxMDI2RDAwMDAyMDAwRjAwNkQ4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEMKKzoxMDI2RTAwMDAyMDAwRjAwNkU4MjcxMDA0OTAwMDAwMDk4MzMwNEQxOEYKKzoxMDI2RjAwMDAyMDAwRjAwNkY4MjcxMDAzRjAwMDAwMDg0MTkwMEREQUUKKzoxMDI3MDAwMDAyMDAwRjAwNzA4MjcxMDAzRjAwMDAwMDAxMDAxOEREMjAKKzoxMDI3MTAwMDAyMDAwRjAwNzE4MjcxMDA2OTAwMDAwMDYyMzEwMERENkIKKzoxMDI3MjAwMDAyMDAwRjAwNzI4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI3MzAwMDAyMDAwRjAwNzM4MjcxMDAzRjAwMDAwMDA0MUEwMERERTgKKzoxMDI3NDAwMDAyMDAwRjAwNzQ4MjcxMDAzRjAwMDAwMDAxMDAxOEREREMKKzoxMDI3NTAwMDAyMDAwRjAwNzU4MjcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDI3NjAwMDAyMDAwRjAwNzY4MjcxMDAzRjAwMDAwMDA0MDAwMEREQ0YKKzoxMDI3NzAwMDAyMDAwRjAwNzc4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI3ODAwMDAyMDAwRjAwNzg4MjcxMDAzRjAwMDAwMDg0MUEwMEREMTMKKzoxMDI3OTAwMDAyMDAwRjAwNzk4MjcxMDAzRjAwMDAwMDAxMDAxOEREODcKKzoxMDI3QTAwMDAyMDAwRjAwN0E4MjcxMDA2OTAwMDAwMDE2MEIwMERENDQKKzoxMDI3QjAwMDAyMDAwRjAwN0I4MjcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDI3QzAwMDAyMDAwRjAwN0M4MjcxMDAzRjAwMDAwMDA0MUMwMERENEQKKzoxMDI3RDAwMDAyMDAwRjAwN0Q4MjcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDI3RTAwMDAyMDAwRjAwN0U4MjcxMDA2OTAwMDAwMDk5MEMwMEREN0MKKzoxMDI3RjAwMDAyMDAwRjAwN0Y4MjcxMDA2OTAwMDAwMDdBM0QwMERENTkKKzoxMDI4MDAwMDAyMDAwRjAwODA4MjcxMDAzRjAwMDAwMDg0MUMwMEREODgKKzoxMDI4MTAwMDAyMDAwRjAwODE4MjcxMDAzRjAwMDAwMDAxMDAxOERERkUKKzoxMDI4MjAwMDAyMDAwRjAwODI4MjcxMDA2OTAwMDAwMDFBMEQwMEREQjUKKzoxMDI4MzAwMDAyMDAwRjAwODM4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDI4NDAwMDAyMDAwRjAwODQ4MjcxMDAzRjAwMDAwMDA0MUQwMEREQzMKKzoxMDI4NTAwMDAyMDAwRjAwODU4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI4NjAwMDAyMDAwRjAwODY4MjcxMDA2OTAwMDAwMDlCMEQwMERERjAKKzoxMDI4NzAwMDAyMDAwRjAwODc4MjcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDI4ODAwMDAyMDAwRjAwODg4MjcxMDA0OTAwMDAwMDlCMzMwNEQxRDAKKzoxMDI4OTAwMDAyMDAwRjAwODk4MjcxMDAzRjAwMDAwMDg0MUQwMERERUUKKzoxMDI4QTAwMDAyMDAwRjAwOEE4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI4QjAwMDAyMDAwRjAwOEI4MjcxMDA2OTAwMDAwMDYyMzEwMEREQjAKKzoxMDI4QzAwMDAyMDAwRjAwOEM4MjcxMDA2OTAwMDAwMDdBM0QwMEREN0IKKzoxMDI4RDAwMDAyMDAwRjAwOEQ4MjcxMDAzRjAwMDAwMDA0MUUwMEREMjkKKzoxMDI4RTAwMDAyMDAwRjAwOEU4MjcxMDAzRjAwMDAwMDAxMDAxOEREMjEKKzoxMDI4RjAwMDAyMDAwRjAwOEY4MjcxMDA2OTAwMDAwMDFDMEUwMERERDUKKzoxMDI5MDAwMDAyMDAwRjAwOTA4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI5MTAwMDAyMDAwRjAwOTE4MjcxMDAzRjAwMDAwMDA0MDEwMEREMDEKKzoxMDI5MjAwMDAyMDAwRjAwOTI4MjcxMDAzRjAwMDAwMDAxMDAxOEREREMKKzoxMDI5MzAwMDAyMDAwRjAwOTM4MjcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDI5NDAwMDAyMDAwRjAwOTQ4MjcxMDAzRjAwMDAwMDA0MEYwMEREQzAKKzoxMDI5NTAwMDAyMDAwRjAwOTU4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI5NjAwMDAyMDAwRjAwOTY4MjcxMDA3RDAwMDAwMDEzQTc2MEM3NkYKKzoxMDI5NzAwMDAyMDAwRjAwOTc4MjcxMDAzMTAwMDAwMDQxMDA4MEMwMEEKKzoxMDI5ODAwMDAyMDAwRjAwOTg4MjcxMDAzMTAwMDAwMDQ4MDAwMEM0NkUKKzoxMDI5OTAwMDAyMDAwRjAwOTk4MjcxMDAzMTAwMDAwMDQ1MDA4MEMyRTIKKzoxMDI5QTAwMDAyMDAwRjAwOUE4MjcxMDAzMTAwMDAwMDZEMDA4MEQ2OTUKKzoxMDI5QjAwMDBGMDAwRjAwNjQwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDI5QzAwMDAwMDAwMDAwNDAwMDAwMDAwMDAxMDAwMDAwMDQwMDAwQzIKKzoxMDI5RDAwMDY0MDAwMDAwNTQwMDAwMDAwMDAwMDAwMDAwMjQwMDAwMUIKKzoxMDI5RTAwMDAwMjgwMDAwMDAwNDAwMDA4MDI4MDAwMDgwMDEwMDAwOTIKKzoxMDI5RjAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDJBMDAwMDUxMDAwMDAwN0QwMTAwMDAwODAwMDAwMDUxMDAwMDAwOUUKKzoxMDJBMTAwMDVEMDAwMDAwMDAwMDAwMDAwOTAwMDAwMDAwNTAwMDAwMDAKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwRjAwMEYwMEY0MDE3MDAwMjMKKzoxMDJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwNTYKKzoxMDJBNDAwMDAwMDEwMDAwMDAwNDAwMDA2NDAwMDAwMDU0MDAwMDAwQzkKKzoxMDJBNTAwMDAwMDAwMDAwMDAyNDAwMDAwMDI4MDAwMDAwMDQwMDAwMjYKKzoxMDJBNjAwMDgwMjgwMDAwODAwMTAwMDAwMzAwMDAwMDAwMDAwMDAwM0EKKzoxMDJBNzAwMDAwMDAwMDAwMDAwMDAwMDA1MTAwMDAwMDdEMDEwMDAwODcKKzoxMDJBODAwMDA4MDAwMDAwNTEwMDAwMDA1RDAwMDAwMDAwMDAwMDAwOTAKKzoxMDJBOTAwMDA5MDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDJBQTAwMDAyMDAwRjAwMDAwMDcwMDAwMTAwMDAwMDAwMDAwMDAwQTQKKzoxMDJBQjAwMDAyMDAwRjAwMDAwMDcwMDAwMTAwMDAwMDAwMDAwMDAwOTQKKzoxMDJBQzAwMDAyMDAwRjAwMDA4MDcxMDAyNTAwMDAwMDAyMDAwRURERjIKKzoxMDJBRDAwMDAyMDAwRjAwMDE4MDcxMDAwNDAwMDAwMDc2M0JEMTAxNkMKKzoxMDJBRTAwMDAyMDAwRjAwMDI4MDcxMDAyNTAwMDAwMDgyMDAwRURENTAKKzoxMDJBRjAwMDAyMDAwRjAwMDM4MDcxMDAwNDAwMDAwMDc2M0I4OTAyOTEKKzoxMDJCMDAwMDAyMDAwRjAwMDQ4MDcxMDAyNTAwMDAwMDAyMDEwRUREQUMKKzoxMDJCMTAwMDAyMDAwRjAwMDU4MDcxMDAwNDAwMDAwMDc2M0I4NTAyNzIKKzoxMDJCMjAwMDAyMDAwRjAwMDY4MDcxMDAyNTAwMDAwMDgyMDEwRUREMEEKKzoxMDJCMzAwMDAyMDAwRjAwMDc4MDcxMDAwNDAwMDAwMDc2M0JGRDAzRDcKKzoxMDJCNDAwMDAyMDAwRjAwMDg4MDcxMDAwOTAwMDAwMDc2M0I4MUNGNzEKKzoxMDJCNTAwMDAyMDAwRjAwMDk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJCNjAwMDAyMDAwRjAwMEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJCNzAwMDAyMDAwRjAwMEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJCODAwMDAyMDAwRjAwMEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJCOTAwMDAyMDAwRjAwMEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJCQTAwMDAyMDAwRjAwMEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJCQjAwMDAyMDAwRjAwMEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJCQzAwMDAyMDAwRjAwMTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJCRDAwMDAyMDAwRjAwMTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJCRTAwMDAyMDAwRjAwMTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJCRjAwMDAyMDAwRjAwMTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJDMDAwMDAyMDAwRjAwMTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDJDMTAwMDAyMDAwRjAwMTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDJDMjAwMDAyMDAwRjAwMTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDJDMzAwMDAyMDAwRjAwMTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJDNDAwMDAyMDAwRjAwMTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJDNTAwMDAyMDAwRjAwMTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJDNjAwMDAyMDAwRjAwMUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJDNzAwMDAyMDAwRjAwMUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJDODAwMDAyMDAwRjAwMUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJDOTAwMDAyMDAwRjAwMUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJDQTAwMDAyMDAwRjAwMUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJDQjAwMDAyMDAwRjAwMUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJDQzAwMDAyMDAwRjAwMjA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJDRDAwMDAyMDAwRjAwMjE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJDRTAwMDAyMDAwRjAwMjI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJDRjAwMDAyMDAwRjAwMjM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDJEMDAwMDAyMDAwRjAwMjQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDJEMTAwMDAyMDAwRjAwMjU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDJEMjAwMDAyMDAwRjAwMjY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJEMzAwMDAyMDAwRjAwMjc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJENDAwMDAyMDAwRjAwMjg4MDcxMDA0OTAwMDAwMDAwM0IwMEMwMTUKKzoxMDJENTAwMDAyMDAwRjAwMjk4MDcxMDA0OTAwMDAwMDAyM0I4MEMwODIKKzoxMDJENjAwMDAyMDAwRjAwMkE4MDcxMDA0OTAwMDAwMDAzM0IwMEMxRUYKKzoxMDJENzAwMDAyMDAwRjAwMkI4MDcxMDA0OTAwMDAwMDA0M0I4MEMxNUQKKzoxMDJEODAwMDAyMDAwRjAwMkM4MDcxMDAyOTAwMDAwMDc2MDA2MERGMzcKKzoxMDJEOTAwMDAyMDAwRjAwMkQ4MDcxMDA0OTAwMDAwMDdEM0I0NERGRTAKKzoxMDJEQTAwMDAyMDAwRjAwMkU4MDcxMDA3OTAwMDAwMDc2OTA2MEZEMTcKKzoxMDJEQjAwMDAyMDAwRjAwMkY4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QkYKKzoxMDJEQzAwMDAyMDAwRjAwMzA4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QUUKKzoxMDJERDAwMDAyMDAwRjAwMzE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OUQKKzoxMDJERTAwMDAyMDAwRjAwMzI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OEMKKzoxMDJERjAwMDAyMDAwRjAwMzM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDJFMDAwMDAyMDAwRjAwMzQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDJFMTAwMDAyMDAwRjAwMzU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJFMjAwMDAyMDAwRjAwMzY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJFMzAwMDAyMDAwRjAwMzc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJFNDAwMDAyMDAwRjAwMzg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJFNTAwMDAyMDAwRjAwMzk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJFNjAwMDAyMDAwRjAwM0E4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJFNzAwMDAyMDAwRjAwM0I4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJFODAwMDAyMDAwRjAwM0M4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJFOTAwMDAyMDAwRjAwM0Q4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJFQTAwMDAyMDAwRjAwM0U4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJFQjAwMDAyMDAwRjAwM0Y4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJFQzAwMDAyMDAwRjAwNDA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJFRDAwMDAyMDAwRjAwNDE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDJFRTAwMDAyMDAwRjAwNDI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDJFRjAwMDAyMDAwRjAwNDM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDJGMDAwMDAyMDAwRjAwNDQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJGMTAwMDAyMDAwRjAwNDU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJGMjAwMDAyMDAwRjAwNDY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJGMzAwMDAyMDAwRjAwNDc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJGNDAwMDAyMDAwRjAwNDg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJGNTAwMDAyMDAwRjAwNDk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJGNjAwMDAyMDAwRjAwNEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJGNzAwMDAyMDAwRjAwNEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJGODAwMDAyMDAwRjAwNEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJGOTAwMDAyMDAwRjAwNEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJGQTAwMDAyMDAwRjAwNEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJGQjAwMDAyMDAwRjAwNEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJGQzAwMDAyMDAwRjAwNTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDJGRDAwMDAyMDAwRjAwNTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDJGRTAwMDAyMDAwRjAwNTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDJGRjAwMDAyMDAwRjAwNTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDMwMDAwMDAyMDAwRjAwNTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDMwMTAwMDAyMDAwRjAwNTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDMwMjAwMDAyMDAwRjAwNTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDMwMzAwMDAyMDAwRjAwNTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDMwNDAwMDAyMDAwRjAwNTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDMwNTAwMDAyMDAwRjAwNTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDMwNjAwMDAyMDAwRjAwNUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDMwNzAwMDAyMDAwRjAwNUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDMwODAwMDAyMDAwRjAwNUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDMwOTAwMDAyMDAwRjAwNUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDMwQTAwMDAyMDAwRjAwNUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDMwQjAwMDAyMDAwRjAwNUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDMwQzAwMDAyMDAwRjAwNjA4MDcxMDAzRjAwMDAwMDAzMDAwMERGN0QKKzoxMDMwRDAwMDAyMDAwRjAwNjE4MDcxMDAyRDAwMDAwMDgxMEZFMEREMTMKKzoxMDMwRTAwMDAyMDAwRjAwNjI4MDcxMDAzRjAwMDAwMDgzMDI4MERENUIKKzoxMDMwRjAwMDAyMDAwRjAwNjM4MDcxMDAyRDAwMDAwMDgwMDEwNEREREMKKzoxMDMxMDAwMDAyMDAwRjAwNjQ4MDcxMDA3RDAwMDAwMDgwMDAxNUZENEEKKzoxMDMxMTAwMDAyMDAwRjAwNjU4MDcxMDA3QTAwMDAwMDc2M0IyMDEwRUQKKzoxMDMxMjAwMDAyMDAwRjAwNjY4MDcxMDA3QTAwMDAwMDc2N0IyMDMwN0MKKzoxMDMxMzAwMDAyMDAwRjAwNjc4MDcxMDAyMTAwMDAwMDYwMDAyNEQwQjEKKzoxMDMxNDAwMDAyMDAwRjAwNjg4MDcxMDAzRjAwMDAwMDA0MDEwMERERjQKKzoxMDMxNTAwMDAyMDAwRjAwNjk4MDcxMDAzRjAwMDAwMDgxMDI0MEREMjUKKzoxMDMxNjAwMDAyMDAwRjAwNkE4MDcxMDA3OTAwMDAwMDAzQkIzMUREQUUKKzoxMDMxNzAwMDAyMDAwRjAwNkI4MDcxMDA3OTAwMDAwMDA0RkIzMURENUMKKzoxMDMxODAwMDAyMDAwRjAwNkM4MDcxMDA3OTAwMDAwMDc2QkIzMUREMTkKKzoxMDMxOTAwMDAyMDAwRjAwNkQ4MDcxMDA3OTAwMDAwMDc2RkIzMUREQzgKKzoxMDMxQTAwMDAyMDAwRjAwNkU4MDcxMDA3OTAwMDAwMDAxMDEyMUZEMTYKKzoxMDMxQjAwMDAyMDAwRjAwNkY4MDcxMDA3RDAwMDAwMDgxNDAyQkZEMzgKKzoxMDMxQzAwMDAyMDAwRjAwNzA4MDcxMDA0MDAwMDAwMDAyMzAwMDNEREUKKzoxMDMxRDAwMDAyMDAwRjAwNzE4MDcxMDA0ODAwMDAwMDAyM0IwMDFEREEKKzoxMDMxRTAwMDAyMDAwRjAwNzI4MDcxMDA3OTAwMDAwMDc2N0IyMUREMDMKKzoxMDMxRjAwMDAyMDAwRjAwNzM4MDcxMDAyRDAwMDAwMDdGMDUwNEREQzgKKzoxMDMyMDAwMDAyMDAwRjAwNzQ4MDcxMDAxODAwMDAwMDc2M0I3RjNEQzMKKzoxMDMyMTAwMDAyMDAwRjAwNzU4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MTQKKzoxMDMyMjAwMDAyMDAwRjAwNzY4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MDMKKzoxMDMyMzAwMDAyMDAwRjAwNzc4MDcxMDAzRDAwMDAwMDZGMDA4MEY3RjIKKzoxMDMyNDAwMDAyMDAwRjAwNzg4MDcxMDAyMTAwMDAwMDc2MUYzN0UzMzQKKzoxMDMyNTAwMDAyMDAwRjAwNzk4MDcxMDA0OTAwMDAwMDc5M0IwMEREMTkKKzoxMDMyNjAwMDAyMDAwRjAwN0E4MDcxMDA3OTAwMDAwMDc2QkIyMUREM0EKKzoxMDMyNzAwMDAyMDAwRjAwN0I4MDcxMDA0OTAwMDAwMDc5M0IwMERERjcKKzoxMDMyODAwMDAyMDAwRjAwN0M4MDcxMDA3OTAwMDAwMDc2QkIyMUREMTgKKzoxMDMyOTAwMDAyMDAwRjAwN0Q4MDcxMDA0OTAwMDAwMDc5M0IwMERERDUKKzoxMDMyQTAwMDAyMDAwRjAwN0U4MDcxMDA3OTAwMDAwMDc2QkIyMURERjYKKzoxMDMyQjAwMDAyMDAwRjAwN0Y4MDcxMDA3OTAwMDAwMDc2OTA2MEZEQjEKKzoxMDMyQzAwMDAyMDAwRjAwODA4MDcxMDA3OTAwMDAwMDc2RkIyMUREOTQKKzoxMDMyRDAwMDAyMDAwRjAwODE4MDcxMDAzRjAwMDAwMDgzMDAwMERGQ0EKKzoxMDMyRTAwMDAyMDAwRjAwODI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MzcKKzoxMDMyRjAwMDAyMDAwRjAwODM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDMzMDAwMDAyMDAwRjAwODQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDMzMTAwMDAyMDAwRjAwODU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDMzMjAwMDAyMDAwRjAwODY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDMzMzAwMDAyMDAwRjAwODc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDMzNDAwMDAyMDAwRjAwODg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDMzNTAwMDAyMDAwRjAwODk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDMzNjAwMDAyMDAwRjAwOEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDMzNzAwMDAyMDAwRjAwOEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDMzODAwMDAyMDAwRjAwOEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDMzOTAwMDAyMDAwRjAwOEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDMzQTAwMDAyMDAwRjAwOEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDMzQjAwMDAyMDAwRjAwOEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDMzQzAwMDAyMDAwRjAwOTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDMzRDAwMDAyMDAwRjAwOTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMzRTAwMDAyMDAwRjAwOTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDMzRjAwMDAyMDAwRjAwOTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDM0MDAwMDAyMDAwRjAwOTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDM0MTAwMDAyMDAwRjAwOTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDM0MjAwMDAyMDAwRjAwOTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDM0MzAwMDAyMDAwRjAwOTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDM0NDAwMDAyMDAwRjAwOTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDM0NTAwMDAyMDAwRjAwOTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDM0NjAwMDAyMDAwRjAwOUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDM0NzAwMDAyMDAwRjAwOUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDM0ODAwMDAyMDAwRjAwOUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDM0OTAwMDAyMDAwRjAwOUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDM0QTAwMDAyMDAwRjAwOUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDM0QjAwMDAyMDAwRjAwOUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDM0QzAwMDAyMDAwRjAwQTA4MDcxMDAyRDAwMDAwMDAzMDgwOEQwNEEKKzoxMDM0RDAwMDAyMDAwRjAwQTE4MDcxMDAwODAwMDAwMDc2RkJCNTIxRkEKKzoxMDM0RTAwMDAyMDAwRjAwQTI4MDcxMDA3OTAwMDAwMDgxMDAwMURENjAKKzoxMDM0RjAwMDAyMDAwRjAwQTM4MDcxMDA3OTAwMDAwMDAyODEwMURENEQKKzoxMDM1MDAwMDAyMDAwRjAwQTQ4MDcxMDA3RDAwMDAwMDgzODAwMUZEOTcKKzoxMDM1MTAwMDAyMDAwRjAwQTU4MDcxMDA3OTAwMDAwMDc2M0I5MEQwN0EKKzoxMDM1MjAwMDAyMDAwRjAwQTY4MDcxMDA0OTAwMDAwMDdBM0I1OEQwQ0QKKzoxMDM1MzAwMDAyMDAwRjAwQTc4MDcxMDA0OTAwMDAwMDAwM0IwNEQyODgKKzoxMDM1NDAwMDAyMDAwRjAwQTg4MDcxMDAzRDAwMDAwMDAzMDA0MERENzQKKzoxMDM1NTAwMDAyMDAwRjAwQTk4MDcxMDAyNDAwMDAwMDY0MDIwMDMyMDQKKzoxMDM1NjAwMDAyMDAwRjAwQUE4MDcxMDAzRDAwMDAwMDAzRjg3RkREMUIKKzoxMDM1NzAwMDAyMDAwRjAwQUI4MDcxMDAyOTAwMDAwMDdBMDEyMEQwMEEKKzoxMDM1ODAwMDAyMDAwRjAwQUM4MDcxMDA0OTAwMDAwMDBFM0JBNEQwODcKKzoxMDM1OTAwMDAyMDAwRjAwQUQ4MDcxMDAyRDAwMDAwMEZGNDIwNEREMkQKKzoxMDM1QTAwMDAyMDAwRjAwQUU4MDcxMDAxODAwMDAwMDc2M0I3RjNERTYKKzoxMDM1QjAwMDAyMDAwRjAwQUY4MDcxMDAyRDAwMDAwMDgyMDAwNkREQzgKKzoxMDM1QzAwMDAyMDAwRjAwQjA4MDcxMDAzODAwMDAwMEUwMDEwMDMwMDAKKzoxMDM1RDAwMDAyMDAwRjAwQjE4MDcxMDAzOTAwMDAwMDYwMDEwMEQwQ0UKKzoxMDM1RTAwMDAyMDAwRjAwQjI4MDcxMDA3OTAwMDAwMDdDM0JCMUQxNzUKKzoxMDM1RjAwMDAyMDAwRjAwQjM4MDcxMDAyRDAwMDAwMEUzMEZFMEREM0EKKzoxMDM2MDAwMDAyMDAwRjAwQjQ4MDcxMDA0OTAwMDAwMEU0MzA4MEQwNTcKKzoxMDM2MTAwMDAyMDAwRjAwQjU4MDcxMDA3OTAwMDAwMDdDN0IzMURENzUKKzoxMDM2MjAwMDAyMDAwRjAwQjY4MDcxMDA3OTAwMDAwMDdDM0IzMUREQTQKKzoxMDM2MzAwMDAyMDAwRjAwQjc4MDcxMDA3RDAwMDAwMDgyNDAzN0ZENUUKKzoxMDM2NDAwMDAyMDAwRjAwQjg4MDcxMDAwODAwMDAwMDc2M0I3RDAxODkKKzoxMDM2NTAwMDAyMDAwRjAwQjk4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OEMKKzoxMDM2NjAwMDAyMDAwRjAwQkE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3N0IKKzoxMDM2NzAwMDAyMDAwRjAwQkI4MDcxMDA0OTAwMDAwMDg3MDMwMEREREQKKzoxMDM2ODAwMDAyMDAwRjAwQkM4MDcxMDA3OTAwMDAwMDA4MDQzMURERTkKKzoxMDM2OTAwMDAyMDAwRjAwQkQ4MDcxMDA3OTAwMDAwMDdBN0QzMURERUQKKzoxMDM2QTAwMDAyMDAwRjAwQkU4MDcxMDA0OTAwMDAwMDdDM0IwMEQzODcKKzoxMDM2QjAwMDAyMDAwRjAwQkY4MDcxMDA3OTAwMDAwMDdDQkI4MUQzNDUKKzoxMDM2QzAwMDAyMDAwRjAwQzA4MDcxMDA3RjAwMDAwMDdDQjIwMUQxQjkKKzoxMDM2RDAwMDAyMDAwRjAwQzE4MDcxMDA0ODAwMDAwMDY0MzIwMDUxRjgKKzoxMDM2RTAwMDAyMDAwRjAwQzI4MDcxMDAzRDAwMDAwMDAzMDA0MEREQjkKKzoxMDM2RjAwMDAyMDAwRjAwQzM4MDcxMDAwODAwMDAwMDYyMzE5NTAxRDQKKzoxMDM3MDAwMDAyMDAwRjAwQzQ4MDcxMDAyMTAwMDAwMDY2MDYwMEQzOTMKKzoxMDM3MTAwMDAyMDAwRjAwQzU4MDcxMDAyMDAwMDAwMEU3MDA4MDUzMDgKKzoxMDM3MjAwMDAyMDAwRjAwQzY4MDcxMDAzRjAwMDAwMDAwMDgwMEREQUQKKzoxMDM3MzAwMDAyMDAwRjAwQzc4MDcxMDA3OTAwMDAwMDY2QjMwMURENTAKKzoxMDM3NDAwMDAyMDAwRjAwQzg4MDcxMDA3OTAwMDAwMEU3QjMwMUREQkUKKzoxMDM3NTAwMDAyMDAwRjAwQzk4MDcxMDA3NTAwMDAwMDYyODYwMUYxNEYKKzoxMDM3NjAwMDAyMDAwRjAwQ0E4MDcxMDA3NTAwMDAwMDY0QjEwMUQyMzAKKzoxMDM3NzAwMDAyMDAwRjAwQ0I4MDcxMDA3ODAwMDAwMDc2N0IwMDFERjYKKzoxMDM3ODAwMDAyMDAwRjAwQ0M4MDcxMDAyNTAwMDAwMEUzMDEwMEREODUKKzoxMDM3OTAwMDAyMDAwRjAwQ0Q4MDcxMDAwODAwMDAwMDYyMzFCMTAxMEQKKzoxMDM3QTAwMDAyMDAwRjAwQ0U4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjYKKzoxMDM3QjAwMDAyMDAwRjAwQ0Y4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MTUKKzoxMDM3QzAwMDAyMDAwRjAwRDA4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MDQKKzoxMDM3RDAwMDAyMDAwRjAwRDE4MDcxMDAyMTAwMDAwMDYzOUYzN0UzRDkKKzoxMDM3RTAwMDAyMDAwRjAwRDI4MDcxMDA0OTAwMDAwMDdDM0IwMEQzMzIKKzoxMDM3RjAwMDAyMDAwRjAwRDM4MDcxMDA3OTAwMDAwMDdDQkI4MUQzRjAKKzoxMDM4MDAwMDAyMDAwRjAwRDQ4MDcxMDA3RjAwMDAwMDdDQjIwMUQxNjMKKzoxMDM4MTAwMDAyMDAwRjAwRDU4MDcxMDA0ODAwMDAwMDY0MzIwMDUxQTIKKzoxMDM4MjAwMDAyMDAwRjAwRDY4MDcxMDA3NTAwMDAwMDY0QjEwMUQyNjMKKzoxMDM4MzAwMDAyMDAwRjAwRDc4MDcxMDA3ODAwMDAwMDc2N0IwMDFEMjkKKzoxMDM4NDAwMDAyMDAwRjAwRDg4MDcxMDAzRjAwMDAwMDA0MDAwMEREN0UKKzoxMDM4NTAwMDAyMDAwRjAwRDk4MDcxMDA3OTAwMDAwMDgxQzAwMURERjUKKzoxMDM4NjAwMDAyMDAwRjAwREE4MDcxMDA3OTAwMDAwMDc2OTA2MEZEQTAKKzoxMDM4NzAwMDAyMDAwRjAwREI4MDcxMDAyRDAwMDAwMDAzMDgwOERENEUKKzoxMDM4ODAwMDAyMDAwRjAwREM4MDcxMDA3ODAwMDAwMDgxQzAwMTNENjMKKzoxMDM4OTAwMDAyMDAwRjAwREQ4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjYKKzoxMDM4QTAwMDAyMDAwRjAwREU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDM4QjAwMDAyMDAwRjAwREY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDM4QzAwMDAyMDAwRjAwRTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDM4RDAwMDAyMDAwRjAwRTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDM4RTAwMDAyMDAwRjAwRTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDM4RjAwMDAyMDAwRjAwRTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDM5MDAwMDAyMDAwRjAwRTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDM5MTAwMDAyMDAwRjAwRTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDM5MjAwMDAyMDAwRjAwRTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDM5MzAwMDAyMDAwRjAwRTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDM5NDAwMDAyMDAwRjAwRTg4MDcxMDA0OTAwMDAwMDAzM0I4RUQxQTcKKzoxMDM5NTAwMDAyMDAwRjAwRTk4MDcxMDAyRjAwMDAwMEUzMDA4MUQxMTgKKzoxMDM5NjAwMDAyMDAwRjAwRUE4MDcxMDAzRjAwMDAwMDAzMTg4MEQxQzAKKzoxMDM5NzAwMDAyMDAwRjAwRUI4MDcxMDA0OTAwMDAwMDAzM0IwNEQxRkUKKzoxMDM5ODAwMDAyMDAwRjAwRUM4MDcxMDAzRjAwMDAwMDAzMDI4MEREQTgKKzoxMDM5OTAwMDAyMDAwRjAwRUQ4MDcxMDA0OTAwMDAwMDAyM0IwNEQyREMKKzoxMDM5QTAwMDAyMDAwRjAwRUU4MDcxMDA0OTAwMDAwMDAwM0I4NEQyNEQKKzoxMDM5QjAwMDAyMDAwRjAwRUY4MDcxMDAyNTAwMDAwMEUyMDAwMEREMzIKKzoxMDM5QzAwMDAyMDAwRjAwRjA4MDcxMDA5NDAwMDAwMDYyNDExMzAwQkIKKzoxMDM5RDAwMDAyMDAwRjAwRjE4MDcxMDA5NDAwMDAwMDYyNDMwQjAwQjAKKzoxMDM5RTAwMDAyMDAwRjAwRjI4MDcxMDA5NDAwMDAwMEUyNDgxNTAwMTAKKzoxMDM5RjAwMDAyMDAwRjAwRjM4MDcxMDA5NDAwMDAwMDYyNDkxQjAwNzgKKzoxMDNBMDAwMDAyMDAwRjAwRjQ4MDcxMDA5NDAwMDAwMDc2NDAyRjAwNDcKKzoxMDNBMTAwMDAyMDAwRjAwRjU4MDcxMDAwOTAwMDAwMDdBM0Q4MUNGOUYKKzoxMDNBMjAwMDAyMDAwRjAwRjY4MDcxMDAxRDAwMDAwMEU1ODAyQkZERjQKKzoxMDNBMzAwMDAyMDAwRjAwRjc4MDcxMDAzMDAwMDAwMDYzODA4MzMxQzYKKzoxMDNBNDAwMDAyMDAwRjAwRjg4MDcxMDAzMDAwMDAwMDYzODA4MjExRDYKKzoxMDNBNTAwMDAyMDAwRjAwRjk4MDcxMDAxRDAwMDAwMEU1ODAyNUZEQzcKKzoxMDNBNjAwMDAyMDAwRjAwRkE4MDcxMDAzMDAwMDAwMDYzMDA4MzMxMTMKKzoxMDNBNzAwMDAyMDAwRjAwRkI4MDcxMDAzMDAwMDAwMDYzMDA4MjExMjMKKzoxMDNBODAwMDAyMDAwRjAwRkM4MDcxMDAyRjAwMDAwMEUzMDA4MUQxRDQKKzoxMDNBOTAwMDAyMDAwRjAwRkQ4MDcxMDAxRDAwMDAwMEU1ODAwOUZEOUYKKzoxMDNBQTAwMDAyMDAwRjAwRkU4MDcxMDAzMDAwMDAwMDYzRDM4MzMxRkMKKzoxMDNBQjAwMDAyMDAwRjAwRkY4MDcxMDAzMDAwMDAwMDYzRDI4MzExMEMKKzoxMDNBQzAwMDAyMDAwRjAwMDA4MTcxMDAyRjAwMDAwMEUzMDA4MUQxOEYKKzoxMDNBRDAwMDAyMDAwRjAwMDE4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QzgKKzoxMDNBRTAwMDAyMDAwRjAwMDI4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2M0IKKzoxMDNBRjAwMDAyMDAwRjAwMDM4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2NDgKKzoxMDNCMDAwMDAyMDAwRjAwMDQ4MTcxMDAxODAwMDAwMDgxMDBGRjM3REYKKzoxMDNCMTAwMDAyMDAwRjAwMDU4MTcxMDAyNTAwMDAwMDY0MDIwMEQyNDAKKzoxMDNCMjAwMDAyMDAwRjAwMDY4MTcxMDAxODAwMDAwMDdBRkQ3NzdEMDkKKzoxMDNCMzAwMDAyMDAwRjAwMDc4MTcxMDA0OTAwMDAwMDYzM0IyMERFOTYKKzoxMDNCNDAwMDAyMDAwRjAwMDg4MTcxMDA0OTAwMDAwMDc5M0I4MERFMEYKKzoxMDNCNTAwMDAyMDAwRjAwMDk4MTcxMDAyMTAwMDAwMEUzMDA4MEQxMDQKKzoxMDNCNjAwMDAyMDAwRjAwMEE4MTcxMDAwOTAwMDAwMDdBM0Q4MUNGMzgKKzoxMDNCNzAwMDAyMDAwRjAwMEI4MTcxMDA0OTAwMDAwMEUzMzEwMERERkQKKzoxMDNCODAwMDAyMDAwRjAwMEM4MTcxMDA2OTAwMDAwMDc4M0IwRUREMUYKKzoxMDNCOTAwMDAyMDAwRjAwMEQ4MTcxMDA2MTAwMDAwMDc2M0IwMEREMjYKKzoxMDNCQTAwMDAyMDAwRjAwMEU4MTcxMDAzRjAwMDAwMDg0MDEwMERENjMKKzoxMDNCQjAwMDAyMDAwRjAwMEY4MTcxMDAzRjAwMDAwMDAxMDAwMERERDYKKzoxMDNCQzAwMDAyMDAwRjAwMTA4MTcxMDAzNTAwMDAwMEZBMDAwMERERDYKKzoxMDNCRDAwMDAyMDAwRjAwMTE4MTcxMDAxODAwMDAwMDc2M0I3RjNCNEUKKzoxMDNCRTAwMDAyMDAwRjAwMTI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3OUQKKzoxMDNCRjAwMDAyMDAwRjAwMTM4MTcxMDAzRDAwMDAwMDZGMDA4MEY3OEMKKzoxMDNDMDAwMDAyMDAwRjAwMTQ4MTcxMDAzRDAwMDAwMDZGMDA4MEY3N0EKKzoxMDNDMTAwMDAyMDAwRjAwMTU4MTcxMDAyMTAwMDAwMEUzMDA4MEQxMzcKKzoxMDNDMjAwMDAyMDAwRjAwMTY4MTcxMDA2OTAwMDAwMDc5M0IwNEREN0QKKzoxMDNDMzAwMDAyMDAwRjAwMTc4MTcxMDA2MTAwMDAwMEUzMDA4MEYxQjUKKzoxMDNDNDAwMDAyMDAwRjAwMTg4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2M0YKKzoxMDNDNTAwMDAyMDAwRjAwMTk4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2QjIKKzoxMDNDNjAwMDAyMDAwRjAwMUE4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QkYKKzoxMDNDNzAwMDAyMDAwRjAwMUI4MTcxMDAxODAwMDAwMDgxMDBGRjM3NTcKKzoxMDNDODAwMDAyMDAwRjAwMUM4MTcxMDAyNTAwMDAwMDY0MDIwMEQyQjgKKzoxMDNDOTAwMDAyMDAwRjAwMUQ4MTcxMDA5ODAwMDAwMDc2QkI1RDYwN0UKKzoxMDNDQTAwMDAyMDAwRjAwMUU4MTcxMDAwOTAwMDAwMDdBM0Q4MUNGRTMKKzoxMDNDQjAwMDAyMDAwRjAwMUY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNDQzAwMDAyMDAwRjAwMjA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDNDRDAwMDAyMDAwRjAwMjE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDNDRTAwMDAyMDAwRjAwMjI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDNDRjAwMDAyMDAwRjAwMjM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDNEMDAwMDAyMDAwRjAwMjQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDNEMTAwMDAyMDAwRjAwMjU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDNEMjAwMDAyMDAwRjAwMjY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDNEMzAwMDAyMDAwRjAwMjc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDNENDAwMDAyMDAwRjAwMjg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDNENTAwMDAyMDAwRjAwMjk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNENjAwMDAyMDAwRjAwMkE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDNENzAwMDAyMDAwRjAwMkI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDNEODAwMDAyMDAwRjAwMkM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNEOTAwMDAyMDAwRjAwMkQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNEQTAwMDAyMDAwRjAwMkU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNEQjAwMDAyMDAwRjAwMkY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDNEQzAwMDAyMDAwRjAwMzA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDNERDAwMDAyMDAwRjAwMzE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDNERTAwMDAyMDAwRjAwMzI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDNERjAwMDAyMDAwRjAwMzM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDNFMDAwMDAyMDAwRjAwMzQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDNFMTAwMDAyMDAwRjAwMzU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDNFMjAwMDAyMDAwRjAwMzY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDNFMzAwMDAyMDAwRjAwMzc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDNFNDAwMDAyMDAwRjAwMzg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNFNTAwMDAyMDAwRjAwMzk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDNFNjAwMDAyMDAwRjAwM0E4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDNFNzAwMDAyMDAwRjAwM0I4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNFODAwMDAyMDAwRjAwM0M4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNFOTAwMDAyMDAwRjAwM0Q4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNFQTAwMDAyMDAwRjAwM0U4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDNFQjAwMDAyMDAwRjAwM0Y4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDNFQzAwMDAyMDAwRjAwNDA4MTcxMDA0OTAwMDAwMDAxM0IwOEQ0NEUKKzoxMDNFRDAwMDAyMDAwRjAwNDE4MTcxMDAwOTAwMDAwMDdBM0Q4QkMyOTEKKzoxMDNFRTAwMDAyMDAwRjAwNDI4MTcxMDAzRjAwMDAwMDgwMDMwMEQ0RjcKKzoxMDNFRjAwMDAyMDAwRjAwNDM4MTcxMDAwOTAwMDAwMDdBM0Q4QkMyNkYKKzoxMDNGMDAwMDAyMDAwRjAwNDQ4MTcxMDA0OTAwMDAwMDAzM0IwRUQ0MDEKKzoxMDNGMTAwMDAyMDAwRjAwNDU4MTcxMDAzRjAwMDAwMDAwMDA0MkQ2MDIKKzoxMDNGMjAwMDAyMDAwRjAwNDY4MTcxMDAyRjAwMDAwMDgwNDA4MUQyMDYKKzoxMDNGMzAwMDAyMDAwRjAwNDc4MTcxMDAyRDAwMDAwMDY1MDM4NEQyNEMKKzoxMDNGNDAwMDAyMDAwRjAwNDg4MTcxMDAzRjAwMDAwMDgwMDA4MEQ2MTEKKzoxMDNGNTAwMDAyMDAwRjAwNDk4MTcxMDAzRjAwMDAwMDA0MDAwNERERjEKKzoxMDNGNjAwMDAyMDAwRjAwNEE4MTcxMDAzRjAwMDAwMDAxMDAxOEREQ0YKKzoxMDNGNzAwMDAyMDAwRjAwNEI4MTcxMDA2OTAwMDAwMDZEM0IwMEREMDUKKzoxMDNGODAwMDAyMDAwRjAwNEM4MTcxMDA2OTAwMDAwMDZEM0IwMERERjQKKzoxMDNGOTAwMDAyMDAwRjAwNEQ4MTcxMDAzMTAwMDAwMDY1RDIwM0QzOTMKKzoxMDNGQTAwMDAyMDAwRjAwNEU4MTcxMDA0OTAwMDAwMDY2M0I0MERFQjgKKzoxMDNGQjAwMDAyMDAwRjAwNEY4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2OTUKKzoxMDNGQzAwMDAyMDAwRjAwNTA4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2MDgKKzoxMDNGRDAwMDAyMDAwRjAwNTE4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MTUKKzoxMDNGRTAwMDAyMDAwRjAwNTI4MTcxMDAxODAwMDAwMDgxMDBGRjM3QUQKKzoxMDNGRjAwMDAyMDAwRjAwNTM4MTcxMDA0OTAwMDAwMDdFM0I4MEQ1MTQKKzoxMDQwMDAwMDAyMDAwRjAwNTQ4MTcxMDAyMTAwMDAwMEU2MDA0MERFMzQKKzoxMDQwMTAwMDAyMDAwRjAwNTU4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2MkUKKzoxMDQwMjAwMDAyMDAwRjAwNTY4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2QTEKKzoxMDQwMzAwMDAyMDAwRjAwNTc4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QUUKKzoxMDQwNDAwMDAyMDAwRjAwNTg4MTcxMDAxODAwMDAwMDgxMDBGRjM3NDYKKzoxMDQwNTAwMDAyMDAwRjAwNTk4MTcxMDA0OTAwMDAwMDdFM0IwMEQ1MkQKKzoxMDQwNjAwMDAyMDAwRjAwNUE4MTcxMDA3OTAwMDAwMDc2M0IwMURERUIKKzoxMDQwNzAwMDAyMDAwRjAwNUI4MTcxMDAyRDAwMDAwMDdGNDAwNEREMTUKKzoxMDQwODAwMDAyMDAwRjAwNUM4MTcxMDAxODAwMDAwMDc2M0I3RjNENEMKKzoxMDQwOTAwMDAyMDAwRjAwNUQ4MTcxMDA3OTAwMDAwMDc2QkIwMUREMzgKKzoxMDQwQTAwMDAyMDAwRjAwNUU4MTcxMDA3NTAwMDAwMEU4ODAwMUZERDQKKzoxMDQwQjAwMDAyMDAwRjAwNUY4MTcxMDA5NDAwMDAwMDY4NDExNTAwNEMKKzoxMDQwQzAwMDAyMDAwRjAwNjA4MTcxMDA5NDAwMDAwMEU4NDQyNTAwQTgKKzoxMDQwRDAwMDAyMDAwRjAwNjE4MTcxMDA5NDAwMDAwMEU4NDEyMzAwOUMKKzoxMDQwRTAwMDAyMDAwRjAwNjI4MTcxMDA5NDAwMDAwMDY4NDUxNzAwMTMKKzoxMDQwRjAwMDAyMDAwRjAwNjM4MTcxMDA5NDAwMDAwMDY4NDIxNTAwMDcKKzoxMDQxMDAwMDAyMDAwRjAwNjQ4MTcxMDA5NDAwMDAwMEU4NDIyNzAwNjMKKzoxMDQxMTAwMDAyMDAwRjAwNjU4MTcxMDA5NDAwMDAwMDY4NDMyRDAwQ0IKKzoxMDQxMjAwMDAyMDAwRjAwNjY4MTcxMDA5NDAwMDAwMDY4NDQyRDAwQjkKKzoxMDQxMzAwMDAyMDAwRjAwNjc4MTcxMDA5NDAwMDAwMEU4NDMzMzAwMjMKKzoxMDQxNDAwMDAyMDAwRjAwNjg4MTcxMDAwNDAwMDAwMDc2M0I5NzAzQjUKKzoxMDQxNTAwMDAyMDAwRjAwNjk4MTcxMDAwRDAwMDAwMDY1QzEwREUzRDAKKzoxMDQxNjAwMDAyMDAwRjAwNkE4MTcxMDAzMDAwMDAwMDc2MDAwMzMyMDcKKzoxMDQxNzAwMDAyMDAwRjAwNkI4MTcxMDAzMDAwMDAwMDc2MDAwMjEyMTcKKzoxMDQxODAwMDAyMDAwRjAwNkM4MTcxMDAzRjAwMDAwMDAwMDA4MEQ0MkQKKzoxMDQxOTAwMDAyMDAwRjAwNkQ4MTcxMDAzRjAwMDAwMDAwODA4MEQxOUYKKzoxMDQxQTAwMDAyMDAwRjAwNkU4MTcxMDAwRDAwMDAwMDY1QzEzRkUzNDkKKzoxMDQxQjAwMDAyMDAwRjAwNkY4MTcxMDAzMDAwMDAwMDc2NjAwNDMyNTEKKzoxMDQxQzAwMDAyMDAwRjAwNzA4MTcxMDAzMDAwMDAwMDc2NDAwNDEyODAKKzoxMDQxRDAwMDAyMDAwRjAwNzE4MTcxMDAzRjAwMDAwMDAwODA4MkQ0NTYKKzoxMDQxRTAwMDAyMDAwRjAwNzI4MTcxMDAzRjAwMDAwMDAwODA4MEQxNEEKKzoxMDQxRjAwMDAyMDAwRjAwNzM4MTcxMDAwRDAwMDAwMDY1QzEzRkUzRjQKKzoxMDQyMDAwMDAyMDAwRjAwNzQ4MTcxMDAzMDAwMDAwMDc2MjAwNDMyM0IKKzoxMDQyMTAwMDAyMDAwRjAwNzU4MTcxMDAzMDAwMDAwMDc2MDAwNDEyNkEKKzoxMDQyMjAwMDAyMDAwRjAwNzY4MTcxMDAzRjAwMDAwMDAwMDA4MkQ0ODAKKzoxMDQyMzAwMDAyMDAwRjAwNzc4MTcxMDAwRDAwMDAwMDY1QzE2M0UzOEIKKzoxMDQyNDAwMDAyMDAwRjAwNzg4MTcxMDAzMDAwMDAwMDc2MjAwMzMyRjgKKzoxMDQyNTAwMDAyMDAwRjAwNzk4MTcxMDAzMDAwMDAwMDc2MDAwMzEyMjcKKzoxMDQyNjAwMDAyMDAwRjAwN0E4MTcxMDAzRjAwMDAwMDAwMDA4M0Q0M0IKKzoxMDQyNzAwMDAyMDAwRjAwN0I4MTcxMDA0OTAwMDAwMDc2M0I4MEQyNzQKKzoxMDQyODAwMDAyMDAwRjAwN0M4MTcxMDAwRDAwMDAwMDY1QzEwREUzOEMKKzoxMDQyOTAwMDAyMDAwRjAwN0Q4MTcxMDAzMDAwMDAwMDc2ODAwMzMyNDMKKzoxMDQyQTAwMDAyMDAwRjAwN0U4MTcxMDAzMDAwMDAwMDc2ODAwMjEyNTMKKzoxMDQyQjAwMDAyMDAwRjAwN0Y4MTcxMDAzRjAwMDAwMDAwMDA4MUQ0RTgKKzoxMDQyQzAwMDAyMDAwRjAwODA4MTcxMDAzRjAwMDAwMDAwMDAwMkQ2NTQKKzoxMDQyRDAwMDAyMDAwRjAwODE4MTcxMDAzRjAwMDAwMDAwMDA4MUQxQzkKKzoxMDQyRTAwMDAyMDAwRjAwODI4MTcxMDAwRDAwMDAwMDY1QzEzRkUzRjQKKzoxMDQyRjAwMDAyMDAwRjAwODM4MTcxMDAzMDAwMDAwMDc2MjAwNDMyM0MKKzoxMDQzMDAwMDAyMDAwRjAwODQ4MTcxMDAzMDAwMDAwMDc2MDAwNDEyNkEKKzoxMDQzMTAwMDAyMDAwRjAwODU4MTcxMDAzRjAwMDAwMDAwMDA4MkQ0ODAKKzoxMDQzMjAwMDAyMDAwRjAwODY4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0NTAKKzoxMDQzMzAwMDAyMDAwRjAwODc4MTcxMDA3OTAwMDAwMDZBQkIwMURENzcKKzoxMDQzNDAwMDAyMDAwRjAwODg4MTcxMDA3OTAwMDAwMDc2QkIwMURENUEKKzoxMDQzNTAwMDAyMDAwRjAwODk4MTcxMDAzRjAwMDAwMDAzMTgwMEQyQTUKKzoxMDQzNjAwMDAyMDAwRjAwOEE4MTcxMDAzRjAwMDAwMDAwMDA4MUQxMkYKKzoxMDQzNzAwMDAyMDAwRjAwOEI4MTcxMDA3NTAwMDAwMDYzODAwMUZENTkKKzoxMDQzODAwMDAyMDAwRjAwOEM4MTcxMDA5ODAwMDAwMDY0M0I2OTgwN0UKKzoxMDQzOTAwMDAyMDAwRjAwOEQ4MTcxMDA1MTAwMDAwMEU0MDAwMEYyNjYKKzoxMDQzQTAwMDAyMDAwRjAwOEU4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2NjIKKzoxMDQzQjAwMDAyMDAwRjAwOEY4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2RDUKKzoxMDQzQzAwMDAyMDAwRjAwOTA4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2RTIKKzoxMDQzRDAwMDAyMDAwRjAwOTE4MTcxMDAxODAwMDAwMDgxMDBGRjM3N0EKKzoxMDQzRTAwMDAyMDAwRjAwOTI4MTcxMDAyRDAwMDAwMDdGNDAwNERENkIKKzoxMDQzRjAwMDAyMDAwRjAwOTM4MTcxMDAxODAwMDAwMDc2M0I3RjNEQTIKKzoxMDQ0MDAwMDAyMDAwRjAwOTQ4MTcxMDA0OTAwMDAwMDM4M0JDMEQzQzYKKzoxMDQ0MTAwMDAyMDAwRjAwOTU4MTcxMDA0OTAwMDAwMDY0M0IwMEREM0YKKzoxMDQ0MjAwMDAyMDAwRjAwOTY4MTcxMDA1MTAwMDAwMEU0MDAwMEYyQ0MKKzoxMDQ0MzAwMDAyMDAwRjAwOTc4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QzgKKzoxMDQ0NDAwMDAyMDAwRjAwOTg4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2M0IKKzoxMDQ0NTAwMDAyMDAwRjAwOTk4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2NDgKKzoxMDQ0NjAwMDAyMDAwRjAwOUE4MTcxMDAxODAwMDAwMDgxMDBGRjM3RTAKKzoxMDQ0NzAwMDAyMDAwRjAwOUI4MTcxMDA0OTAwMDAwMDM4M0JBMEQzNkYKKzoxMDQ0ODAwMDAyMDAwRjAwOUM4MTcxMDAxOTAwMDAwMDc2QkI2MUREMDUKKzoxMDQ0OTAwMDAyMDAwRjAwOUQ4MTcxMDA0OTAwMDAwMDY3M0IwMEREQjQKKzoxMDQ0QTAwMDAyMDAwRjAwOUU4MTcxMDA3NTAwMDAwMDYzODI4MUYxOUYKKzoxMDQ0QjAwMDAyMDAwRjAwOUY4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0QTYKKzoxMDQ0QzAwMDAyMDAwRjAwQTA4MTcxMDA3OTAwMDAwMDZBQkIwMUREQ0QKKzoxMDQ0RDAwMDAyMDAwRjAwQTE4MTcxMDA3OTAwMDAwMDc2QkIwMUREQjAKKzoxMDQ0RTAwMDAyMDAwRjAwQTI4MTcxMDAzRjAwMDAwMDAzMTgwMEQyRkIKKzoxMDQ0RjAwMDAyMDAwRjAwQTM4MTcxMDAzRjAwMDAwMDAwODA4MEQxMDYKKzoxMDQ1MDAwMDAyMDAwRjAwQTQ4MTcxMDA3NTAwMDAwMDYzODAwMUZEQUUKKzoxMDQ1MTAwMDAyMDAwRjAwQTU4MTcxMDA5ODAwMDAwMDY0M0IzNzgwMDUKKzoxMDQ1MjAwMDAyMDAwRjAwQTY4MTcxMDA1MTAwMDAwMEU0MDAwMEYyQkIKKzoxMDQ1MzAwMDAyMDAwRjAwQTc4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QjcKKzoxMDQ1NDAwMDAyMDAwRjAwQTg4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2MkEKKzoxMDQ1NTAwMDAyMDAwRjAwQTk4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MzcKKzoxMDQ1NjAwMDAyMDAwRjAwQUE4MTcxMDAxODAwMDAwMDgxMDBGRjM3Q0YKKzoxMDQ1NzAwMDAyMDAwRjAwQUI4MTcxMDAyRDAwMDAwMDdGNDAwNEREQzAKKzoxMDQ1ODAwMDAyMDAwRjAwQUM4MTcxMDAxODAwMDAwMDc2M0I3RjNERjcKKzoxMDQ1OTAwMDAyMDAwRjAwQUQ4MTcxMDA0OTAwMDAwMDM4M0I4MEQzNUMKKzoxMDQ1QTAwMDAyMDAwRjAwQUU4MTcxMDAxOTAwMDAwMDc2QkI2RkREQzQKKzoxMDQ1QjAwMDAyMDAwRjAwQUY4MTcxMDA0OTAwMDAwMDY3M0IwMEREODEKKzoxMDQ1QzAwMDAyMDAwRjAwQjA4MTcxMDA3NTAwMDAwMDYzODI4MUYxNkMKKzoxMDQ1RDAwMDAyMDAwRjAwQjE4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0NzMKKzoxMDQ1RTAwMDAyMDAwRjAwQjI4MTcxMDA3OTAwMDAwMDZBQkIwMUREOUEKKzoxMDQ1RjAwMDAyMDAwRjAwQjM4MTcxMDA3OTAwMDAwMDYzQkIwMUREOTAKKzoxMDQ2MDAwMDAyMDAwRjAwQjQ4MTcxMDA3NTAwMDAwMDYzODAwMUZEOUQKKzoxMDQ2MTAwMDAyMDAwRjAwQjU4MTcxMDA5ODAwMDAwMDY0M0IxNzgwMTQKKzoxMDQ2MjAwMDAyMDAwRjAwQjY4MTcxMDA0OTAwMDAwMDY0M0I0MERFQ0IKKzoxMDQ2MzAwMDAyMDAwRjAwQjc4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QTYKKzoxMDQ2NDAwMDAyMDAwRjAwQjg4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2MTkKKzoxMDQ2NTAwMDAyMDAwRjAwQjk4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MjYKKzoxMDQ2NjAwMDAyMDAwRjAwQkE4MTcxMDAxODAwMDAwMDgxMDBGRjM3QkUKKzoxMDQ2NzAwMDAyMDAwRjAwQkI4MTcxMDAyRDAwMDAwMDdGNDAwNEREQUYKKzoxMDQ2ODAwMDAyMDAwRjAwQkM4MTcxMDAxODAwMDAwMDc2M0I3RjNERTYKKzoxMDQ2OTAwMDAyMDAwRjAwQkQ4MTcxMDAyMTAwMDAwMEU0MDAwMEQyODMKKzoxMDQ2QTAwMDAyMDAwRjAwQkU4MTcxMDAxOTAwMDAwMDdFN0JFRkQzNzUKKzoxMDQ2QjAwMDAyMDAwRjAwQkY4MTcxMDA3NTAwMDAwMDYzODI4MUYxNkMKKzoxMDQ2QzAwMDAyMDAwRjAwQzA4MTcxMDAzRjAwMDAwMDAwMDA4MEQ2OTIKKzoxMDQ2RDAwMDAyMDAwRjAwQzE4MTcxMDAzRjAwMDAwMDA0MDAwNERERjIKKzoxMDQ2RTAwMDAyMDAwRjAwQzI4MTcxMDAzRjAwMDAwMDAxMDAxOERERDAKKzoxMDQ2RjAwMDAyMDAwRjAwQzM4MTcxMDA2OTAwMDAwMDZEM0IwMEREMDYKKzoxMDQ3MDAwMDAyMDAwRjAwQzQ4MTcxMDA2OTAwMDAwMDZEM0IwMERERjQKKzoxMDQ3MTAwMDAyMDAwRjAwQzU4MTcxMDAzRjAwMDAwMDAwMDAwMEREQjUKKzoxMDQ3MjAwMDAyMDAwRjAwQzY4MTcxMDAyRDAwMDAwMDgwMDE1NERERTEKKzoxMDQ3MzAwMDAyMDAwRjAwQzc4MTcxMDA3OTAwMDAwMDc2ODBFMEYzNkQKKzoxMDQ3NDAwMDAyMDAwRjAwQzg4MTcxMDA0OTAwMDAwMDdBMzYwMEQ2Q0YKKzoxMDQ3NTAwMDAyMDAwRjAwQzk4MTcxMDA3OTAwMDAwMDc2RkIwMUREQzUKKzoxMDQ3NjAwMDAyMDAwRjAwQ0E4MTcxMDAzRDAwMDAwMDZGMDA4MEY3NTkKKzoxMDQ3NzAwMDAyMDAwRjAwQ0I4MTcxMDA0OTAwMDAwMDAzM0IwMEREMDcKKzoxMDQ3ODAwMDAyMDAwRjAwQ0M4MTcxMDA1OTAwMDAwMDc2M0IwMEZENTMKKzoxMDQ3OTAwMDAyMDAwRjAwQ0Q4MTcxMDAzRjAwMDAwMDAzMUM4MEREOEUKKzoxMDQ3QTAwMDAyMDAwRjAwQ0U4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MTUKKzoxMDQ3QjAwMDAyMDAwRjAwQ0Y4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MDQKKzoxMDQ3QzAwMDAyMDAwRjAwRDA4MTcxMDAzRDAwMDAwMDZGMDA4MEY3RjMKKzoxMDQ3RDAwMDAyMDAwRjAwRDE4MTcxMDAyRDAwMDAwMDdGMDIwNkRENzQKKzoxMDQ3RTAwMDAyMDAwRjAwRDI4MTcxMDAxODAwMDAwMDdBM0Q3RjFEODkKKzoxMDQ3RjAwMDAyMDAwRjAwRDM4MTcxMDAzMTAwMDAwMDZCODg4M0Q0NjgKKzoxMDQ4MDAwMDAyMDAwRjAwRDQ4MTcxMDA3OTAwMDAwMDZBQkIwMURENTUKKzoxMDQ4MTAwMDAyMDAwRjAwRDU4MTcxMDA3OTAwMDAwMDc2OTA4MUYxQ0YKKzoxMDQ4MjAwMDAyMDAwRjAwRDY4MTcxMDA3NTAwMDAwMDYzODAwMUZENTkKKzoxMDQ4MzAwMDAyMDAwRjAwRDc4MTcxMDA5ODAwMDAwMDc2QkI1MzgwMDIKKzoxMDQ4NDAwMDAyMDAwRjAwRDg4MTcxMDAxOTAwMDAwMDc5N0I3RkREMjQKKzoxMDQ4NTAwMDAyMDAwRjAwRDk4MTcxMDA3NTAwMDAwMDYzODI4MUYxQjAKKzoxMDQ4NjAwMDAyMDAwRjAwREE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDQ4NzAwMDAyMDAwRjAwREI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDQ4ODAwMDAyMDAwRjAwREM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQ4OTAwMDAyMDAwRjAwREQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDQ4QTAwMDAyMDAwRjAwREU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDQ4QjAwMDAyMDAwRjAwREY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDQ4QzAwMDAyMDAwRjAwRTA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDQ4RDAwMDAyMDAwRjAwRTE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDQ4RTAwMDAyMDAwRjAwRTI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDQ4RjAwMDAyMDAwRjAwRTM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDQ5MDAwMDAyMDAwRjAwRTQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDQ5MTAwMDAyMDAwRjAwRTU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDQ5MjAwMDAyMDAwRjAwRTY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDQ5MzAwMDAyMDAwRjAwRTc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDQ5NDAwMDAyMDAwRjAwRTg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDQ5NTAwMDAyMDAwRjAwRTk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDQ5NjAwMDAyMDAwRjAwRUE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDQ5NzAwMDAyMDAwRjAwRUI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQ5ODAwMDAyMDAwRjAwRUM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDQ5OTAwMDAyMDAwRjAwRUQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDQ5QTAwMDAyMDAwRjAwRUU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDQ5QjAwMDAyMDAwRjAwRUY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDQ5QzAwMDAyMDAwRjAwRjA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDQ5RDAwMDAyMDAwRjAwRjE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDQ5RTAwMDAyMDAwRjAwRjI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDQ5RjAwMDAyMDAwRjAwRjM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDRBMDAwMDAyMDAwRjAwRjQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRBMTAwMDAyMDAwRjAwRjU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRBMjAwMDAyMDAwRjAwRjY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRBMzAwMDAyMDAwRjAwRjc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRBNDAwMDAyMDAwRjAwRjg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDRBNTAwMDAyMDAwRjAwRjk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDRBNjAwMDAyMDAwRjAwRkE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDRBNzAwMDAyMDAwRjAwRkI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDRBODAwMDAyMDAwRjAwRkM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDRBOTAwMDAyMDAwRjAwRkQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDRBQTAwMDAyMDAwRjAwRkU4MTcxMDAzRjAwMDAwMDAzMDI4MERENjQKKzoxMDRBQjAwMDAyMDAwRjAwRkY4MTcxMDA0OTAwMDAwMDAyM0I4NEQxMTkKKzoxMDRBQzAwMDAyMDAwRjAwMDA4MjcxMDA0OTAwMDAwMDAzM0IwMEREN0UKKzoxMDRBRDAwMDAyMDAwRjAwMDE4MjcxMDA2OTAwMDAwMDdBM0IwMERERDYKKzoxMDRBRTAwMDAyMDAwRjAwMDI4MjcxMDA0OTAwMDAwMDc5M0IwMERERTYKKzoxMDRBRjAwMDAyMDAwRjAwMDM4MjcxMDA2NTAwMDAwMDYzMDI4MEYxNzQKKzoxMDRCMDAwMDAyMDAwRjAwMDQ4MjcxMDAxODAwMDAwMDc2M0I3RDdEREEKKzoxMDRCMTAwMDAyMDAwRjAwMDU4MjcxMDAwOTAwMDAwMDdBM0Q4MUNGN0MKKzoxMDRCMjAwMDAyMDAwRjAwMDY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDRCMzAwMDAyMDAwRjAwMDc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDRCNDAwMDAyMDAwRjAwMDg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRCNTAwMDAyMDAwRjAwMDk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRCNjAwMDAyMDAwRjAwMEE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRCNzAwMDAyMDAwRjAwMEI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRCODAwMDAyMDAwRjAwMEM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRCOTAwMDAyMDAwRjAwMEQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRCQTAwMDAyMDAwRjAwMEU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRCQjAwMDAyMDAwRjAwMEY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRCQzAwMDAyMDAwRjAwMTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRCRDAwMDAyMDAwRjAwMTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRCRTAwMDAyMDAwRjAwMTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRCRjAwMDAyMDAwRjAwMTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRDMDAwMDAyMDAwRjAwMTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDRDMTAwMDAyMDAwRjAwMTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDRDMjAwMDAyMDAwRjAwMTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDRDMzAwMDAyMDAwRjAwMTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRDNDAwMDAyMDAwRjAwMTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRDNTAwMDAyMDAwRjAwMTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRDNjAwMDAyMDAwRjAwMUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRDNzAwMDAyMDAwRjAwMUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRDODAwMDAyMDAwRjAwMUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRDOTAwMDAyMDAwRjAwMUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRDQTAwMDAyMDAwRjAwMUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRDQjAwMDAyMDAwRjAwMUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRDQzAwMDAyMDAwRjAwMjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRDRDAwMDAyMDAwRjAwMjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRDRTAwMDAyMDAwRjAwMjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRDRjAwMDAyMDAwRjAwMjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDREMDAwMDAyMDAwRjAwMjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDREMTAwMDAyMDAwRjAwMjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDREMjAwMDAyMDAwRjAwMjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDREMzAwMDAyMDAwRjAwMjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRENDAwMDAyMDAwRjAwMjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRENTAwMDAyMDAwRjAwMjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRENjAwMDAyMDAwRjAwMkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRENzAwMDAyMDAwRjAwMkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDREODAwMDAyMDAwRjAwMkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDREOTAwMDAyMDAwRjAwMkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDREQTAwMDAyMDAwRjAwMkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDREQjAwMDAyMDAwRjAwMkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDREQzAwMDAyMDAwRjAwMzA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRERDAwMDAyMDAwRjAwMzE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRERTAwMDAyMDAwRjAwMzI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRERjAwMDAyMDAwRjAwMzM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRFMDAwMDAyMDAwRjAwMzQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDRFMTAwMDAyMDAwRjAwMzU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRFMjAwMDAyMDAwRjAwMzY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRFMzAwMDAyMDAwRjAwMzc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRFNDAwMDAyMDAwRjAwMzg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRFNTAwMDAyMDAwRjAwMzk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRFNjAwMDAyMDAwRjAwM0E4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRFNzAwMDAyMDAwRjAwM0I4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRFODAwMDAyMDAwRjAwM0M4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRFOTAwMDAyMDAwRjAwM0Q4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRFQTAwMDAyMDAwRjAwM0U4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRFQjAwMDAyMDAwRjAwM0Y4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRFQzAwMDAyMDAwRjAwNDA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRFRDAwMDAyMDAwRjAwNDE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRFRTAwMDAyMDAwRjAwNDI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRFRjAwMDAyMDAwRjAwNDM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDRGMDAwMDAyMDAwRjAwNDQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRGMTAwMDAyMDAwRjAwNDU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRGMjAwMDAyMDAwRjAwNDY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRGMzAwMDAyMDAwRjAwNDc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRGNDAwMDAyMDAwRjAwNDg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRGNTAwMDAyMDAwRjAwNDk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRGNjAwMDAyMDAwRjAwNEE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRGNzAwMDAyMDAwRjAwNEI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRGODAwMDAyMDAwRjAwNEM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRGOTAwMDAyMDAwRjAwNEQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRGQTAwMDAyMDAwRjAwNEU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRGQjAwMDAyMDAwRjAwNEY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRGQzAwMDAyMDAwRjAwNTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRGRDAwMDAyMDAwRjAwNTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRGRTAwMDAyMDAwRjAwNTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDRGRjAwMDAyMDAwRjAwNTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUwMDAwMDAyMDAwRjAwNTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDUwMTAwMDAyMDAwRjAwNTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDUwMjAwMDAyMDAwRjAwNTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDUwMzAwMDAyMDAwRjAwNTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUwNDAwMDAyMDAwRjAwNTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUwNTAwMDAyMDAwRjAwNTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUwNjAwMDAyMDAwRjAwNUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUwNzAwMDAyMDAwRjAwNUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUwODAwMDAyMDAwRjAwNUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwOTAwMDAyMDAwRjAwNUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUwQTAwMDAyMDAwRjAwNUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUwQjAwMDAyMDAwRjAwNUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUwQzAwMDAyMDAwRjAwNjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUwRDAwMDAyMDAwRjAwNjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUwRTAwMDAyMDAwRjAwNjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUwRjAwMDAyMDAwRjAwNjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUxMDAwMDAyMDAwRjAwNjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDUxMTAwMDAyMDAwRjAwNjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDUxMjAwMDAyMDAwRjAwNjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUxMzAwMDAyMDAwRjAwNjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUxNDAwMDAyMDAwRjAwNjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUxNTAwMDAyMDAwRjAwNjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUxNjAwMDAyMDAwRjAwNkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUxNzAwMDAyMDAwRjAwNkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUxODAwMDAyMDAwRjAwNkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUxOTAwMDAyMDAwRjAwNkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUxQTAwMDAyMDAwRjAwNkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUxQjAwMDAyMDAwRjAwNkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUxQzAwMDAyMDAwRjAwNzA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUxRDAwMDAyMDAwRjAwNzE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUxRTAwMDAyMDAwRjAwNzI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUxRjAwMDAyMDAwRjAwNzM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDUyMDAwMDAyMDAwRjAwNzQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDUyMTAwMDAyMDAwRjAwNzU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUyMjAwMDAyMDAwRjAwNzY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUyMzAwMDAyMDAwRjAwNzc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUyNDAwMDAyMDAwRjAwNzg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUyNTAwMDAyMDAwRjAwNzk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUyNjAwMDAyMDAwRjAwN0E4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUyNzAwMDAyMDAwRjAwN0I4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyODAwMDAyMDAwRjAwN0M4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyOTAwMDAyMDAwRjAwN0Q4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUyQTAwMDAyMDAwRjAwN0U4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUyQjAwMDAyMDAwRjAwN0Y4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUyQzAwMDAyMDAwRjAwODA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUyRDAwMDAyMDAwRjAwODE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUyRTAwMDAyMDAwRjAwODI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDUyRjAwMDAyMDAwRjAwODM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDUzMDAwMDAyMDAwRjAwODQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUzMTAwMDAyMDAwRjAwODU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUzMjAwMDAyMDAwRjAwODY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUzMzAwMDAyMDAwRjAwODc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUzNDAwMDAyMDAwRjAwODg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUzNTAwMDAyMDAwRjAwODk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUzNjAwMDAyMDAwRjAwOEE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUzNzAwMDAyMDAwRjAwOEI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUzODAwMDAyMDAwRjAwOEM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUzOTAwMDAyMDAwRjAwOEQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUzQTAwMDAyMDAwRjAwOEU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUzQjAwMDAyMDAwRjAwOEY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUzQzAwMDAyMDAwRjAwOTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUzRDAwMDAyMDAwRjAwOTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDUzRTAwMDAyMDAwRjAwOTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDUzRjAwMDAyMDAwRjAwOTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU0MDAwMDAyMDAwRjAwOTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDU0MTAwMDAyMDAwRjAwOTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDU0MjAwMDAyMDAwRjAwOTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDU0MzAwMDAyMDAwRjAwOTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU0NDAwMDAyMDAwRjAwOTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU0NTAwMDAyMDAwRjAwOTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU0NjAwMDAyMDAwRjAwOUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU0NzAwMDAyMDAwRjAwOUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU0ODAwMDAyMDAwRjAwOUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU0OTAwMDAyMDAwRjAwOUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU0QTAwMDAyMDAwRjAwOUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU0QjAwMDAyMDAwRjAwOUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU0QzAwMDAyMDAwRjAwQTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU0RDAwMDAyMDAwRjAwQTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU0RTAwMDAyMDAwRjAwQTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU0RjAwMDAyMDAwRjAwQTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU1MDAwMDAyMDAwRjAwQTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDU1MTAwMDAyMDAwRjAwQTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDU1MjAwMDAyMDAwRjAwQTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU1MzAwMDAyMDAwRjAwQTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU1NDAwMDAyMDAwRjAwQTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU1NTAwMDAyMDAwRjAwQTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU1NjAwMDAyMDAwRjAwQUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU1NzAwMDAyMDAwRjAwQUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU1ODAwMDAyMDAwRjAwQUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU1OTAwMDAyMDAwRjAwQUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU1QTAwMDAyMDAwRjAwQUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU1QjAwMDAyMDAwRjAwQUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU1QzAwMDAyMDAwRjAwQjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU1RDAwMDAyMDAwRjAwQjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU1RTAwMDAyMDAwRjAwQjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU1RjAwMDAyMDAwRjAwQjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU2MDAwMDAyMDAwRjAwQjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDU2MTAwMDAyMDAwRjAwQjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU2MjAwMDAyMDAwRjAwQjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU2MzAwMDAyMDAwRjAwQjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU2NDAwMDAyMDAwRjAwQjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU2NTAwMDAyMDAwRjAwQjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU2NjAwMDAyMDAwRjAwQkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU2NzAwMDAyMDAwRjAwQkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU2ODAwMDAyMDAwRjAwQkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU2OTAwMDAyMDAwRjAwQkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU2QTAwMDAyMDAwRjAwQkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU2QjAwMDAyMDAwRjAwQkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU2QzAwMDAyMDAwRjAwQzA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU2RDAwMDAyMDAwRjAwQzE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU2RTAwMDAyMDAwRjAwQzI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU2RjAwMDAyMDAwRjAwQzM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU3MDAwMDAyMDAwRjAwQzQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU3MTAwMDAyMDAwRjAwQzU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU3MjAwMDAyMDAwRjAwQzY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU3MzAwMDAyMDAwRjAwQzc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU3NDAwMDAyMDAwRjAwQzg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU3NTAwMDAyMDAwRjAwQzk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU3NjAwMDAyMDAwRjAwQ0E4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU3NzAwMDAyMDAwRjAwQ0I4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU3ODAwMDAyMDAwRjAwQ0M4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU3OTAwMDAyMDAwRjAwQ0Q4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU3QTAwMDAyMDAwRjAwQ0U4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU3QjAwMDAyMDAwRjAwQ0Y4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU3QzAwMDAyMDAwRjAwRDA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU3RDAwMDAyMDAwRjAwRDE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU3RTAwMDAyMDAwRjAwRDI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU3RjAwMDAyMDAwRjAwRDM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDU4MDAwMDAyMDAwRjAwRDQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU4MTAwMDAyMDAwRjAwRDU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU4MjAwMDAyMDAwRjAwRDY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU4MzAwMDAyMDAwRjAwRDc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU4NDAwMDAyMDAwRjAwRDg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU4NTAwMDAyMDAwRjAwRDk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU4NjAwMDAyMDAwRjAwREE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU4NzAwMDAyMDAwRjAwREI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU4ODAwMDAyMDAwRjAwREM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU4OTAwMDAyMDAwRjAwREQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU4QTAwMDAyMDAwRjAwREU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU4QjAwMDAyMDAwRjAwREY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU4QzAwMDAyMDAwRjAwRTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU4RDAwMDAyMDAwRjAwRTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU4RTAwMDAyMDAwRjAwRTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDU4RjAwMDAyMDAwRjAwRTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDU5MDAwMDAyMDAwRjAwRTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU5MTAwMDAyMDAwRjAwRTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU5MjAwMDAyMDAwRjAwRTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU5MzAwMDAyMDAwRjAwRTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU5NDAwMDAyMDAwRjAwRTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU5NTAwMDAyMDAwRjAwRTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU5NjAwMDAyMDAwRjAwRUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU5NzAwMDAyMDAwRjAwRUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU5ODAwMDAyMDAwRjAwRUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU5OTAwMDAyMDAwRjAwRUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU5QTAwMDAyMDAwRjAwRUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU5QjAwMDAyMDAwRjAwRUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU5QzAwMDAyMDAwRjAwRjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU5RDAwMDAyMDAwRjAwRjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDU5RTAwMDAyMDAwRjAwRjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDU5RjAwMDAyMDAwRjAwRjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDVBMDAwMDAyMDAwRjAwRjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVBMTAwMDAyMDAwRjAwRjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVBMjAwMDAyMDAwRjAwRjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVBMzAwMDAyMDAwRjAwRjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVBNDAwMDAyMDAwRjAwRjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDVBNTAwMDAyMDAwRjAwRjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDVBNjAwMDAyMDAwRjAwRkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDVBNzAwMDAyMDAwRjAwRkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDVBODAwMDAyMDAwRjAwRkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDVBOTAwMDAyMDAwRjAwRkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDVBQTAwMDAyMDAwRjAwRkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDVBQjAwMDAyMDAwRjAwRkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDVBQzAwMDAyMDAwRjAwMDA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVBRDAwMDAyMDAwRjAwMDE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVBRTAwMDAyMDAwRjAwMDI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVBRjAwMDAyMDAwRjAwMDM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVCMDAwMDAyMDAwRjAwMDQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDVCMTAwMDAyMDAwRjAwMDU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDVCMjAwMDAyMDAwRjAwMDY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDVCMzAwMDAyMDAwRjAwMDc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVCNDAwMDAyMDAwRjAwMDg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVCNTAwMDAyMDAwRjAwMDk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVCNjAwMDAyMDAwRjAwMEE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVCNzAwMDAyMDAwRjAwMEI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVCODAwMDAyMDAwRjAwMEM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVCOTAwMDAyMDAwRjAwMEQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVCQTAwMDAyMDAwRjAwMEU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVCQjAwMDAyMDAwRjAwMEY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVCQzAwMDAyMDAwRjAwMTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVCRDAwMDAyMDAwRjAwMTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVCRTAwMDAyMDAwRjAwMTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVCRjAwMDAyMDAwRjAwMTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVDMDAwMDAyMDAwRjAwMTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDVDMTAwMDAyMDAwRjAwMTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDVDMjAwMDAyMDAwRjAwMTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVDMzAwMDAyMDAwRjAwMTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVDNDAwMDAyMDAwRjAwMTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVDNTAwMDAyMDAwRjAwMTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVDNjAwMDAyMDAwRjAwMUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVDNzAwMDAyMDAwRjAwMUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVDODAwMDAyMDAwRjAwMUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVDOTAwMDAyMDAwRjAwMUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVDQTAwMDAyMDAwRjAwMUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVDQjAwMDAyMDAwRjAwMUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVDQzAwMDAyMDAwRjAwMjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVDRDAwMDAyMDAwRjAwMjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVDRTAwMDAyMDAwRjAwMjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVDRjAwMDAyMDAwRjAwMjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVEMDAwMDAyMDAwRjAwMjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDVEMTAwMDAyMDAwRjAwMjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVEMjAwMDAyMDAwRjAwMjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVEMzAwMDAyMDAwRjAwMjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVENDAwMDAyMDAwRjAwMjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVENTAwMDAyMDAwRjAwMjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVENjAwMDAyMDAwRjAwMkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVENzAwMDAyMDAwRjAwMkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVEODAwMDAyMDAwRjAwMkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVEOTAwMDAyMDAwRjAwMkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVEQTAwMDAyMDAwRjAwMkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVEQjAwMDAyMDAwRjAwMkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVEQzAwMDAyMDAwRjAwMzA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVERDAwMDAyMDAwRjAwMzE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVERTAwMDAyMDAwRjAwMzI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVERjAwMDAyMDAwRjAwMzM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVFMDAwMDAyMDAwRjAwMzQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVFMTAwMDAyMDAwRjAwMzU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVFMjAwMDAyMDAwRjAwMzY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVFMzAwMDAyMDAwRjAwMzc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVFNDAwMDAyMDAwRjAwMzg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVFNTAwMDAyMDAwRjAwMzk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVFNjAwMDAyMDAwRjAwM0E4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVFNzAwMDAyMDAwRjAwM0I4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVFODAwMDAyMDAwRjAwM0M4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVFOTAwMDAyMDAwRjAwM0Q4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVFQTAwMDAyMDAwRjAwM0U4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVFQjAwMDAyMDAwRjAwM0Y4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVFQzAwMDAyMDAwRjAwNDA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVFRDAwMDAyMDAwRjAwNDE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVFRTAwMDAyMDAwRjAwNDI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVFRjAwMDAyMDAwRjAwNDM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDVGMDAwMDAyMDAwRjAwNDQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVGMTAwMDAyMDAwRjAwNDU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVGMjAwMDAyMDAwRjAwNDY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVGMzAwMDAyMDAwRjAwNDc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVGNDAwMDAyMDAwRjAwNDg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVGNTAwMDAyMDAwRjAwNDk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVGNjAwMDAyMDAwRjAwNEE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVGNzAwMDAyMDAwRjAwNEI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVGODAwMDAyMDAwRjAwNEM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVGOTAwMDAyMDAwRjAwNEQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVGQTAwMDAyMDAwRjAwNEU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVGQjAwMDAyMDAwRjAwNEY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVGQzAwMDAyMDAwRjAwNTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVGRDAwMDAyMDAwRjAwNTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVGRTAwMDAyMDAwRjAwNTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDVGRjAwMDAyMDAwRjAwNTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYwMDAwMDAyMDAwRjAwNTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDYwMTAwMDAyMDAwRjAwNTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDYwMjAwMDAyMDAwRjAwNTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDYwMzAwMDAyMDAwRjAwNTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYwNDAwMDAyMDAwRjAwNTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYwNTAwMDAyMDAwRjAwNTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYwNjAwMDAyMDAwRjAwNUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYwNzAwMDAyMDAwRjAwNUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYwODAwMDAyMDAwRjAwNUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYwOTAwMDAyMDAwRjAwNUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYwQTAwMDAyMDAwRjAwNUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYwQjAwMDAyMDAwRjAwNUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYwQzAwMDAyMDAwRjAwNjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYwRDAwMDAyMDAwRjAwNjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYwRTAwMDAyMDAwRjAwNjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYwRjAwMDAyMDAwRjAwNjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYxMDAwMDAyMDAwRjAwNjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDYxMTAwMDAyMDAwRjAwNjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDYxMjAwMDAyMDAwRjAwNjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYxMzAwMDAyMDAwRjAwNjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYxNDAwMDAyMDAwRjAwNjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYxNTAwMDAyMDAwRjAwNjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYxNjAwMDAyMDAwRjAwNkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYxNzAwMDAyMDAwRjAwNkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYxODAwMDAyMDAwRjAwNkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYxOTAwMDAyMDAwRjAwNkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYxQTAwMDAyMDAwRjAwNkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYxQjAwMDAyMDAwRjAwNkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYxQzAwMDAyMDAwRjAwNzA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYxRDAwMDAyMDAwRjAwNzE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYxRTAwMDAyMDAwRjAwNzI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYxRjAwMDAyMDAwRjAwNzM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDYyMDAwMDAyMDAwRjAwNzQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDYyMTAwMDAyMDAwRjAwNzU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYyMjAwMDAyMDAwRjAwNzY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYyMzAwMDAyMDAwRjAwNzc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYyNDAwMDAyMDAwRjAwNzg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYyNTAwMDAyMDAwRjAwNzk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYyNjAwMDAyMDAwRjAwN0E4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYyNzAwMDAyMDAwRjAwN0I4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYyODAwMDAyMDAwRjAwN0M4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYyOTAwMDAyMDAwRjAwN0Q4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYyQTAwMDAyMDAwRjAwN0U4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYyQjAwMDAyMDAwRjAwN0Y4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYyQzAwMDAyMDAwRjAwODA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYyRDAwMDAyMDAwRjAwODE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYyRTAwMDAyMDAwRjAwODI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDYyRjAwMDAyMDAwRjAwODM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDYzMDAwMDAyMDAwRjAwODQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYzMTAwMDAyMDAwRjAwODU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYzMjAwMDAyMDAwRjAwODY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYzMzAwMDAyMDAwRjAwODc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYzNDAwMDAyMDAwRjAwODg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYzNTAwMDAyMDAwRjAwODk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYzNjAwMDAyMDAwRjAwOEE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYzNzAwMDAyMDAwRjAwOEI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYzODAwMDAyMDAwRjAwOEM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYzOTAwMDAyMDAwRjAwOEQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYzQTAwMDAyMDAwRjAwOEU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYzQjAwMDAyMDAwRjAwOEY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYzQzAwMDAyMDAwRjAwOTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYzRDAwMDAyMDAwRjAwOTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDYzRTAwMDAyMDAwRjAwOTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDYzRjAwMDAyMDAwRjAwOTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY0MDAwMDAyMDAwRjAwOTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDY0MTAwMDAyMDAwRjAwOTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDY0MjAwMDAyMDAwRjAwOTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDY0MzAwMDAyMDAwRjAwOTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY0NDAwMDAyMDAwRjAwOTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY0NTAwMDAyMDAwRjAwOTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY0NjAwMDAyMDAwRjAwOUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY0NzAwMDAyMDAwRjAwOUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY0ODAwMDAyMDAwRjAwOUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY0OTAwMDAyMDAwRjAwOUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY0QTAwMDAyMDAwRjAwOUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY0QjAwMDAyMDAwRjAwOUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY0QzAwMDAyMDAwRjAwQTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY0RDAwMDAyMDAwRjAwQTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY0RTAwMDAyMDAwRjAwQTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY0RjAwMDAyMDAwRjAwQTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY1MDAwMDAyMDAwRjAwQTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDY1MTAwMDAyMDAwRjAwQTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDY1MjAwMDAyMDAwRjAwQTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY1MzAwMDAyMDAwRjAwQTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY1NDAwMDAyMDAwRjAwQTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY1NTAwMDAyMDAwRjAwQTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY1NjAwMDAyMDAwRjAwQUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY1NzAwMDAyMDAwRjAwQUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY1ODAwMDAyMDAwRjAwQUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY1OTAwMDAyMDAwRjAwQUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY1QTAwMDAyMDAwRjAwQUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY1QjAwMDAyMDAwRjAwQUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY1QzAwMDAyMDAwRjAwQjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY1RDAwMDAyMDAwRjAwQjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY1RTAwMDAyMDAwRjAwQjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY1RjAwMDAyMDAwRjAwQjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY2MDAwMDAyMDAwRjAwQjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDY2MTAwMDAyMDAwRjAwQjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY2MjAwMDAyMDAwRjAwQjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY2MzAwMDAyMDAwRjAwQjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY2NDAwMDAyMDAwRjAwQjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY2NTAwMDAyMDAwRjAwQjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY2NjAwMDAyMDAwRjAwQkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY2NzAwMDAyMDAwRjAwQkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY2ODAwMDAyMDAwRjAwQkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY2OTAwMDAyMDAwRjAwQkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY2QTAwMDAyMDAwRjAwQkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY2QjAwMDAyMDAwRjAwQkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY2QzAwMDAyMDAwRjAwQzA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY2RDAwMDAyMDAwRjAwQzE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY2RTAwMDAyMDAwRjAwQzI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY2RjAwMDAyMDAwRjAwQzM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY3MDAwMDAyMDAwRjAwQzQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY3MTAwMDAyMDAwRjAwQzU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY3MjAwMDAyMDAwRjAwQzY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY3MzAwMDAyMDAwRjAwQzc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY3NDAwMDAyMDAwRjAwQzg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY3NTAwMDAyMDAwRjAwQzk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY3NjAwMDAyMDAwRjAwQ0E4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY3NzAwMDAyMDAwRjAwQ0I4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY3ODAwMDAyMDAwRjAwQ0M4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY3OTAwMDAyMDAwRjAwQ0Q4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY3QTAwMDAyMDAwRjAwQ0U4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY3QjAwMDAyMDAwRjAwQ0Y4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY3QzAwMDAyMDAwRjAwRDA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY3RDAwMDAyMDAwRjAwRDE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY3RTAwMDAyMDAwRjAwRDI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY3RjAwMDAyMDAwRjAwRDM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDY4MDAwMDAyMDAwRjAwRDQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY4MTAwMDAyMDAwRjAwRDU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY4MjAwMDAyMDAwRjAwRDY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY4MzAwMDAyMDAwRjAwRDc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY4NDAwMDAyMDAwRjAwRDg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY4NTAwMDAyMDAwRjAwRDk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY4NjAwMDAyMDAwRjAwREE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY4NzAwMDAyMDAwRjAwREI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY4ODAwMDAyMDAwRjAwREM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY4OTAwMDAyMDAwRjAwREQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY4QTAwMDAyMDAwRjAwREU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY4QjAwMDAyMDAwRjAwREY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY4QzAwMDAyMDAwRjAwRTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY4RDAwMDAyMDAwRjAwRTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY4RTAwMDAyMDAwRjAwRTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDY4RjAwMDAyMDAwRjAwRTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDY5MDAwMDAyMDAwRjAwRTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY5MTAwMDAyMDAwRjAwRTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY5MjAwMDAyMDAwRjAwRTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY5MzAwMDAyMDAwRjAwRTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY5NDAwMDAyMDAwRjAwRTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY5NTAwMDAyMDAwRjAwRTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY5NjAwMDAyMDAwRjAwRUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY5NzAwMDAyMDAwRjAwRUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY5ODAwMDAyMDAwRjAwRUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY5OTAwMDAyMDAwRjAwRUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY5QTAwMDAyMDAwRjAwRUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY5QjAwMDAyMDAwRjAwRUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY5QzAwMDAyMDAwRjAwRjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY5RDAwMDAyMDAwRjAwRjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDY5RTAwMDAyMDAwRjAwRjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDY5RjAwMDAyMDAwRjAwRjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDZBMDAwMDAyMDAwRjAwRjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZBMTAwMDAyMDAwRjAwRjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZBMjAwMDAyMDAwRjAwRjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZBMzAwMDAyMDAwRjAwRjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZBNDAwMDAyMDAwRjAwRjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDZBNTAwMDAyMDAwRjAwRjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDZBNjAwMDAyMDAwRjAwRkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDZBNzAwMDAyMDAwRjAwRkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDZBODAwMDAyMDAwRjAwRkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDZBOTAwMDAyMDAwRjAwRkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDZBQTAwMDAyMDAwRjAwRkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDZBQjAwMDAyMDAwRjAwRkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDZBQzAwMDAyMDAwRjAwMDA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZBRDAwMDAyMDAwRjAwMDE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZBRTAwMDAyMDAwRjAwMDI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZBRjAwMDAyMDAwRjAwMDM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZCMDAwMDAyMDAwRjAwMDQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDZCMTAwMDAyMDAwRjAwMDU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDZCMjAwMDAyMDAwRjAwMDY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDZCMzAwMDAyMDAwRjAwMDc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZCNDAwMDAyMDAwRjAwMDg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZCNTAwMDAyMDAwRjAwMDk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZCNjAwMDAyMDAwRjAwMEE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZCNzAwMDAyMDAwRjAwMEI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZCODAwMDAyMDAwRjAwMEM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZCOTAwMDAyMDAwRjAwMEQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZCQTAwMDAyMDAwRjAwMEU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZCQjAwMDAyMDAwRjAwMEY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZCQzAwMDAyMDAwRjAwMTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZCRDAwMDAyMDAwRjAwMTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZCRTAwMDAyMDAwRjAwMTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZCRjAwMDAyMDAwRjAwMTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZDMDAwMDAyMDAwRjAwMTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDZDMTAwMDAyMDAwRjAwMTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDZDMjAwMDAyMDAwRjAwMTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZDMzAwMDAyMDAwRjAwMTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZDNDAwMDAyMDAwRjAwMTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZDNTAwMDAyMDAwRjAwMTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZDNjAwMDAyMDAwRjAwMUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZDNzAwMDAyMDAwRjAwMUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZDODAwMDAyMDAwRjAwMUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZDOTAwMDAyMDAwRjAwMUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZDQTAwMDAyMDAwRjAwMUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZDQjAwMDAyMDAwRjAwMUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZDQzAwMDAyMDAwRjAwMjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZDRDAwMDAyMDAwRjAwMjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZDRTAwMDAyMDAwRjAwMjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZDRjAwMDAyMDAwRjAwMjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZEMDAwMDAyMDAwRjAwMjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDZEMTAwMDAyMDAwRjAwMjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZEMjAwMDAyMDAwRjAwMjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZEMzAwMDAyMDAwRjAwMjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZENDAwMDAyMDAwRjAwMjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZENTAwMDAyMDAwRjAwMjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZENjAwMDAyMDAwRjAwMkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZENzAwMDAyMDAwRjAwMkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZEODAwMDAyMDAwRjAwMkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZEOTAwMDAyMDAwRjAwMkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZEQTAwMDAyMDAwRjAwMkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZEQjAwMDAyMDAwRjAwMkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZEQzAwMDAyMDAwRjAwMzA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZERDAwMDAyMDAwRjAwMzE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZERTAwMDAyMDAwRjAwMzI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZERjAwMDAyMDAwRjAwMzM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZFMDAwMDAyMDAwRjAwMzQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZFMTAwMDAyMDAwRjAwMzU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZFMjAwMDAyMDAwRjAwMzY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZFMzAwMDAyMDAwRjAwMzc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZFNDAwMDAyMDAwRjAwMzg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZFNTAwMDAyMDAwRjAwMzk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZFNjAwMDAyMDAwRjAwM0E4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZFNzAwMDAyMDAwRjAwM0I4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZFODAwMDAyMDAwRjAwM0M4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZFOTAwMDAyMDAwRjAwM0Q4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZFQTAwMDAyMDAwRjAwM0U4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZFQjAwMDAyMDAwRjAwM0Y4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZFQzAwMDAyMDAwRjAwNDA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZFRDAwMDAyMDAwRjAwNDE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZFRTAwMDAyMDAwRjAwNDI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZFRjAwMDAyMDAwRjAwNDM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDZGMDAwMDAyMDAwRjAwNDQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZGMTAwMDAyMDAwRjAwNDU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZGMjAwMDAyMDAwRjAwNDY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZGMzAwMDAyMDAwRjAwNDc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZGNDAwMDAyMDAwRjAwNDg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZGNTAwMDAyMDAwRjAwNDk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZGNjAwMDAyMDAwRjAwNEE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZGNzAwMDAyMDAwRjAwNEI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZGODAwMDAyMDAwRjAwNEM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZGOTAwMDAyMDAwRjAwNEQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZGQTAwMDAyMDAwRjAwNEU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZGQjAwMDAyMDAwRjAwNEY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZGQzAwMDAyMDAwRjAwNTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZGRDAwMDAyMDAwRjAwNTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZGRTAwMDAyMDAwRjAwNTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDZGRjAwMDAyMDAwRjAwNTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcwMDAwMDAyMDAwRjAwNTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDcwMTAwMDAyMDAwRjAwNTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDcwMjAwMDAyMDAwRjAwNTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDcwMzAwMDAyMDAwRjAwNTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDcwNDAwMDAyMDAwRjAwNTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDcwNTAwMDAyMDAwRjAwNTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDcwNjAwMDAyMDAwRjAwNUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDcwNzAwMDAyMDAwRjAwNUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDcwODAwMDAyMDAwRjAwNUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDcwOTAwMDAyMDAwRjAwNUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDcwQTAwMDAyMDAwRjAwNUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDcwQjAwMDAyMDAwRjAwNUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDcwQzAwMDAyMDAwRjAwNjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDcwRDAwMDAyMDAwRjAwNjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDcwRTAwMDAyMDAwRjAwNjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcwRjAwMDAyMDAwRjAwNjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDcxMDAwMDAyMDAwRjAwNjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDcxMTAwMDAyMDAwRjAwNjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDcxMjAwMDAyMDAwRjAwNjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDcxMzAwMDAyMDAwRjAwNjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDcxNDAwMDAyMDAwRjAwNjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDcxNTAwMDAyMDAwRjAwNjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDcxNjAwMDAyMDAwRjAwNkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDcxNzAwMDAyMDAwRjAwNkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDcxODAwMDAyMDAwRjAwNkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDcxOTAwMDAyMDAwRjAwNkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDcxQTAwMDAyMDAwRjAwNkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDcxQjAwMDAyMDAwRjAwNkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDcxQzAwMDAyMDAwRjAwNzA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDcxRDAwMDAyMDAwRjAwNzE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcxRTAwMDAyMDAwRjAwNzI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDcxRjAwMDAyMDAwRjAwNzM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDcyMDAwMDAyMDAwRjAwNzQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDcyMTAwMDAyMDAwRjAwNzU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDcyMjAwMDAyMDAwRjAwNzY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDcyMzAwMDAyMDAwRjAwNzc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDcyNDAwMDAyMDAwRjAwNzg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDcyNTAwMDAyMDAwRjAwNzk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDcyNjAwMDAyMDAwRjAwN0E4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDcyNzAwMDAyMDAwRjAwN0I4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDcyODAwMDAyMDAwRjAwN0M4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDcyOTAwMDAyMDAwRjAwN0Q4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDcyQTAwMDAyMDAwRjAwN0U4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDcyQjAwMDAyMDAwRjAwN0Y4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDcyQzAwMDAyMDAwRjAwODA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcyRDAwMDAyMDAwRjAwODE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDcyRTAwMDAyMDAwRjAwODI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDcyRjAwMDAyMDAwRjAwODM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDczMDAwMDAyMDAwRjAwODQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDczMTAwMDAyMDAwRjAwODU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDczMjAwMDAyMDAwRjAwODY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDczMzAwMDAyMDAwRjAwODc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDczNDAwMDAyMDAwRjAwODg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDczNTAwMDAyMDAwRjAwODk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDczNjAwMDAyMDAwRjAwOEE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDczNzAwMDAyMDAwRjAwOEI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDczODAwMDAyMDAwRjAwOEM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDczOTAwMDAyMDAwRjAwOEQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDczQTAwMDAyMDAwRjAwOEU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDczQjAwMDAyMDAwRjAwOEY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDczQzAwMDAyMDAwRjAwOTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDczRDAwMDAyMDAwRjAwOTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDczRTAwMDAyMDAwRjAwOTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDczRjAwMDAyMDAwRjAwOTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc0MDAwMDAyMDAwRjAwOTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDc0MTAwMDAyMDAwRjAwOTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDc0MjAwMDAyMDAwRjAwOTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDc0MzAwMDAyMDAwRjAwOTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc0NDAwMDAyMDAwRjAwOTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc0NTAwMDAyMDAwRjAwOTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc0NjAwMDAyMDAwRjAwOUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc0NzAwMDAyMDAwRjAwOUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc0ODAwMDAyMDAwRjAwOUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc0OTAwMDAyMDAwRjAwOUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc0QTAwMDAyMDAwRjAwOUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc0QjAwMDAyMDAwRjAwOUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc0QzAwMDAyMDAwRjAwQTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc0RDAwMDAyMDAwRjAwQTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc0RTAwMDAyMDAwRjAwQTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc0RjAwMDAyMDAwRjAwQTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc1MDAwMDAyMDAwRjAwQTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDc1MTAwMDAyMDAwRjAwQTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDc1MjAwMDAyMDAwRjAwQTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc1MzAwMDAyMDAwRjAwQTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc1NDAwMDAyMDAwRjAwQTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc1NTAwMDAyMDAwRjAwQTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc1NjAwMDAyMDAwRjAwQUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc1NzAwMDAyMDAwRjAwQUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc1ODAwMDAyMDAwRjAwQUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc1OTAwMDAyMDAwRjAwQUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc1QTAwMDAyMDAwRjAwQUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc1QjAwMDAyMDAwRjAwQUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc1QzAwMDAyMDAwRjAwQjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc1RDAwMDAyMDAwRjAwQjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc1RTAwMDAyMDAwRjAwQjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc1RjAwMDAyMDAwRjAwQjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc2MDAwMDAyMDAwRjAwQjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDc2MTAwMDAyMDAwRjAwQjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc2MjAwMDAyMDAwRjAwQjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc2MzAwMDAyMDAwRjAwQjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc2NDAwMDAyMDAwRjAwQjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc2NTAwMDAyMDAwRjAwQjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc2NjAwMDAyMDAwRjAwQkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc2NzAwMDAyMDAwRjAwQkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc2ODAwMDAyMDAwRjAwQkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc2OTAwMDAyMDAwRjAwQkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc2QTAwMDAyMDAwRjAwQkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc2QjAwMDAyMDAwRjAwQkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc2QzAwMDAyMDAwRjAwQzA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc2RDAwMDAyMDAwRjAwQzE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc2RTAwMDAyMDAwRjAwQzI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc2RjAwMDAyMDAwRjAwQzM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc3MDAwMDAyMDAwRjAwQzQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc3MTAwMDAyMDAwRjAwQzU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc3MjAwMDAyMDAwRjAwQzY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc3MzAwMDAyMDAwRjAwQzc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc3NDAwMDAyMDAwRjAwQzg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc3NTAwMDAyMDAwRjAwQzk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc3NjAwMDAyMDAwRjAwQ0E4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc3NzAwMDAyMDAwRjAwQ0I4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc3ODAwMDAyMDAwRjAwQ0M4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc3OTAwMDAyMDAwRjAwQ0Q4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc3QTAwMDAyMDAwRjAwQ0U4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc3QjAwMDAyMDAwRjAwQ0Y4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc3QzAwMDAyMDAwRjAwRDA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc3RDAwMDAyMDAwRjAwRDE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc3RTAwMDAyMDAwRjAwRDI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc3RjAwMDAyMDAwRjAwRDM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDc4MDAwMDAyMDAwRjAwRDQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc4MTAwMDAyMDAwRjAwRDU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc4MjAwMDAyMDAwRjAwRDY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc4MzAwMDAyMDAwRjAwRDc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc4NDAwMDAyMDAwRjAwRDg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc4NTAwMDAyMDAwRjAwRDk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc4NjAwMDAyMDAwRjAwREE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc4NzAwMDAyMDAwRjAwREI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc4ODAwMDAyMDAwRjAwREM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc4OTAwMDAyMDAwRjAwREQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc4QTAwMDAyMDAwRjAwREU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc4QjAwMDAyMDAwRjAwREY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc4QzAwMDAyMDAwRjAwRTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc4RDAwMDAyMDAwRjAwRTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc4RTAwMDAyMDAwRjAwRTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDc4RjAwMDAyMDAwRjAwRTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDc5MDAwMDAyMDAwRjAwRTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc5MTAwMDAyMDAwRjAwRTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc5MjAwMDAyMDAwRjAwRTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc5MzAwMDAyMDAwRjAwRTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc5NDAwMDAyMDAwRjAwRTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc5NTAwMDAyMDAwRjAwRTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc5NjAwMDAyMDAwRjAwRUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc5NzAwMDAyMDAwRjAwRUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc5ODAwMDAyMDAwRjAwRUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc5OTAwMDAyMDAwRjAwRUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc5QTAwMDAyMDAwRjAwRUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc5QjAwMDAyMDAwRjAwRUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc5QzAwMDAyMDAwRjAwRjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc5RDAwMDAyMDAwRjAwRjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDc5RTAwMDAyMDAwRjAwRjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDc5RjAwMDAyMDAwRjAwRjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDdBMDAwMDAyMDAwRjAwRjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdBMTAwMDAyMDAwRjAwRjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdBMjAwMDAyMDAwRjAwRjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdBMzAwMDAyMDAwRjAwRjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdBNDAwMDAyMDAwRjAwRjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDdBNTAwMDAyMDAwRjAwRjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDdBNjAwMDAyMDAwRjAwRkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDdBNzAwMDAyMDAwRjAwRkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDdBODAwMDAyMDAwRjAwRkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDdBOTAwMDAyMDAwRjAwRkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDdBQTAwMDAyMDAwRjAwRkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDdBQjAwMDAyMDAwRjAwRkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDdBQzAwMDAyMDAwRjAwMDA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdBRDAwMDAyMDAwRjAwMDE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdBRTAwMDAyMDAwRjAwMDI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdBRjAwMDAyMDAwRjAwMDM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdCMDAwMDAyMDAwRjAwMDQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDdCMTAwMDAyMDAwRjAwMDU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDdCMjAwMDAyMDAwRjAwMDY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDdCMzAwMDAyMDAwRjAwMDc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdCNDAwMDAyMDAwRjAwMDg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdCNTAwMDAyMDAwRjAwMDk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdCNjAwMDAyMDAwRjAwMEE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdCNzAwMDAyMDAwRjAwMEI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdCODAwMDAyMDAwRjAwMEM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdCOTAwMDAyMDAwRjAwMEQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdCQTAwMDAyMDAwRjAwMEU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdCQjAwMDAyMDAwRjAwMEY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdCQzAwMDAyMDAwRjAwMTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdCRDAwMDAyMDAwRjAwMTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdCRTAwMDAyMDAwRjAwMTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdCRjAwMDAyMDAwRjAwMTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdDMDAwMDAyMDAwRjAwMTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDdDMTAwMDAyMDAwRjAwMTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDdDMjAwMDAyMDAwRjAwMTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdDMzAwMDAyMDAwRjAwMTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdDNDAwMDAyMDAwRjAwMTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdDNTAwMDAyMDAwRjAwMTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdDNjAwMDAyMDAwRjAwMUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdDNzAwMDAyMDAwRjAwMUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdDODAwMDAyMDAwRjAwMUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdDOTAwMDAyMDAwRjAwMUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdDQTAwMDAyMDAwRjAwMUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdDQjAwMDAyMDAwRjAwMUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdDQzAwMDAyMDAwRjAwMjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdDRDAwMDAyMDAwRjAwMjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdDRTAwMDAyMDAwRjAwMjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdDRjAwMDAyMDAwRjAwMjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdEMDAwMDAyMDAwRjAwMjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDdEMTAwMDAyMDAwRjAwMjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdEMjAwMDAyMDAwRjAwMjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdEMzAwMDAyMDAwRjAwMjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdENDAwMDAyMDAwRjAwMjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdENTAwMDAyMDAwRjAwMjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdENjAwMDAyMDAwRjAwMkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdENzAwMDAyMDAwRjAwMkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdEODAwMDAyMDAwRjAwMkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdEOTAwMDAyMDAwRjAwMkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdEQTAwMDAyMDAwRjAwMkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdEQjAwMDAyMDAwRjAwMkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdEQzAwMDAyMDAwRjAwMzA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdERDAwMDAyMDAwRjAwMzE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdERTAwMDAyMDAwRjAwMzI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdERjAwMDAyMDAwRjAwMzM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdFMDAwMDAyMDAwRjAwMzQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdFMTAwMDAyMDAwRjAwMzU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdFMjAwMDAyMDAwRjAwMzY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdFMzAwMDAyMDAwRjAwMzc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdFNDAwMDAyMDAwRjAwMzg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdFNTAwMDAyMDAwRjAwMzk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdFNjAwMDAyMDAwRjAwM0E4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdFNzAwMDAyMDAwRjAwM0I4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdFODAwMDAyMDAwRjAwM0M4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdFOTAwMDAyMDAwRjAwM0Q4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdFQTAwMDAyMDAwRjAwM0U4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdFQjAwMDAyMDAwRjAwM0Y4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdFQzAwMDAyMDAwRjAwNDA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdFRDAwMDAyMDAwRjAwNDE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdFRTAwMDAyMDAwRjAwNDI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdFRjAwMDAyMDAwRjAwNDM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDdGMDAwMDAyMDAwRjAwNDQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdGMTAwMDAyMDAwRjAwNDU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdGMjAwMDAyMDAwRjAwNDY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdGMzAwMDAyMDAwRjAwNDc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdGNDAwMDAyMDAwRjAwNDg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdGNTAwMDAyMDAwRjAwNDk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdGNjAwMDAyMDAwRjAwNEE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdGNzAwMDAyMDAwRjAwNEI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdGODAwMDAyMDAwRjAwNEM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdGOTAwMDAyMDAwRjAwNEQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdGQTAwMDAyMDAwRjAwNEU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdGQjAwMDAyMDAwRjAwNEY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdGQzAwMDAyMDAwRjAwNTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdGRDAwMDAyMDAwRjAwNTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdGRTAwMDAyMDAwRjAwNTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDdGRjAwMDAyMDAwRjAwNTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgwMDAwMDAyMDAwRjAwNTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDgwMTAwMDAyMDAwRjAwNTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDgwMjAwMDAyMDAwRjAwNTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDgwMzAwMDAyMDAwRjAwNTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgwNDAwMDAyMDAwRjAwNTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgwNTAwMDAyMDAwRjAwNTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgwNjAwMDAyMDAwRjAwNUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgwNzAwMDAyMDAwRjAwNUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgwODAwMDAyMDAwRjAwNUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgwOTAwMDAyMDAwRjAwNUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgwQTAwMDAyMDAwRjAwNUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgwQjAwMDAyMDAwRjAwNUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgwQzAwMDAyMDAwRjAwNjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgwRDAwMDAyMDAwRjAwNjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgwRTAwMDAyMDAwRjAwNjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgwRjAwMDAyMDAwRjAwNjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgxMDAwMDAyMDAwRjAwNjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDgxMTAwMDAyMDAwRjAwNjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDgxMjAwMDAyMDAwRjAwNjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgxMzAwMDAyMDAwRjAwNjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgxNDAwMDAyMDAwRjAwNjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgxNTAwMDAyMDAwRjAwNjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgxNjAwMDAyMDAwRjAwNkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgxNzAwMDAyMDAwRjAwNkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgxODAwMDAyMDAwRjAwNkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgxOTAwMDAyMDAwRjAwNkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgxQTAwMDAyMDAwRjAwNkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgxQjAwMDAyMDAwRjAwNkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgxQzAwMDAyMDAwRjAwNzA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgxRDAwMDAyMDAwRjAwNzE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgxRTAwMDAyMDAwRjAwNzI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgxRjAwMDAyMDAwRjAwNzM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDgyMDAwMDAyMDAwRjAwNzQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDgyMTAwMDAyMDAwRjAwNzU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgyMjAwMDAyMDAwRjAwNzY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgyMzAwMDAyMDAwRjAwNzc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgyNDAwMDAyMDAwRjAwNzg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgyNTAwMDAyMDAwRjAwNzk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgyNjAwMDAyMDAwRjAwN0E4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgyNzAwMDAyMDAwRjAwN0I4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgyODAwMDAyMDAwRjAwN0M4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgyOTAwMDAyMDAwRjAwN0Q4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgyQTAwMDAyMDAwRjAwN0U4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgyQjAwMDAyMDAwRjAwN0Y4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgyQzAwMDAyMDAwRjAwODA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgyRDAwMDAyMDAwRjAwODE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgyRTAwMDAyMDAwRjAwODI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDgyRjAwMDAyMDAwRjAwODM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDgzMDAwMDAyMDAwRjAwODQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgzMTAwMDAyMDAwRjAwODU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgzMjAwMDAyMDAwRjAwODY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgzMzAwMDAyMDAwRjAwODc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgzNDAwMDAyMDAwRjAwODg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgzNTAwMDAyMDAwRjAwODk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgzNjAwMDAyMDAwRjAwOEE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgzNzAwMDAyMDAwRjAwOEI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgzODAwMDAyMDAwRjAwOEM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgzOTAwMDAyMDAwRjAwOEQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgzQTAwMDAyMDAwRjAwOEU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgzQjAwMDAyMDAwRjAwOEY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgzQzAwMDAyMDAwRjAwOTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgzRDAwMDAyMDAwRjAwOTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDgzRTAwMDAyMDAwRjAwOTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDgzRjAwMDAyMDAwRjAwOTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg0MDAwMDAyMDAwRjAwOTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDg0MTAwMDAyMDAwRjAwOTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDg0MjAwMDAyMDAwRjAwOTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDg0MzAwMDAyMDAwRjAwOTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg0NDAwMDAyMDAwRjAwOTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg0NTAwMDAyMDAwRjAwOTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg0NjAwMDAyMDAwRjAwOUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg0NzAwMDAyMDAwRjAwOUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg0ODAwMDAyMDAwRjAwOUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg0OTAwMDAyMDAwRjAwOUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg0QTAwMDAyMDAwRjAwOUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg0QjAwMDAyMDAwRjAwOUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg0QzAwMDAyMDAwRjAwQTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg0RDAwMDAyMDAwRjAwQTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg0RTAwMDAyMDAwRjAwQTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg0RjAwMDAyMDAwRjAwQTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg1MDAwMDAyMDAwRjAwQTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDg1MTAwMDAyMDAwRjAwQTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDg1MjAwMDAyMDAwRjAwQTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg1MzAwMDAyMDAwRjAwQTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg1NDAwMDAyMDAwRjAwQTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg1NTAwMDAyMDAwRjAwQTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg1NjAwMDAyMDAwRjAwQUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg1NzAwMDAyMDAwRjAwQUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg1ODAwMDAyMDAwRjAwQUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg1OTAwMDAyMDAwRjAwQUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg1QTAwMDAyMDAwRjAwQUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg1QjAwMDAyMDAwRjAwQUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg1QzAwMDAyMDAwRjAwQjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg1RDAwMDAyMDAwRjAwQjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg1RTAwMDAyMDAwRjAwQjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg1RjAwMDAyMDAwRjAwQjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg2MDAwMDAyMDAwRjAwQjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDg2MTAwMDAyMDAwRjAwQjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg2MjAwMDAyMDAwRjAwQjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg2MzAwMDAyMDAwRjAwQjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg2NDAwMDAyMDAwRjAwQjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg2NTAwMDAyMDAwRjAwQjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg2NjAwMDAyMDAwRjAwQkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg2NzAwMDAyMDAwRjAwQkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg2ODAwMDAyMDAwRjAwQkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg2OTAwMDAyMDAwRjAwQkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg2QTAwMDAyMDAwRjAwQkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg2QjAwMDAyMDAwRjAwQkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg2QzAwMDAyMDAwRjAwQzA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg2RDAwMDAyMDAwRjAwQzE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg2RTAwMDAyMDAwRjAwQzI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg2RjAwMDAyMDAwRjAwQzM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg3MDAwMDAyMDAwRjAwQzQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg3MTAwMDAyMDAwRjAwQzU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg3MjAwMDAyMDAwRjAwQzY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg3MzAwMDAyMDAwRjAwQzc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg3NDAwMDAyMDAwRjAwQzg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg3NTAwMDAyMDAwRjAwQzk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg3NjAwMDAyMDAwRjAwQ0E4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg3NzAwMDAyMDAwRjAwQ0I4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg3ODAwMDAyMDAwRjAwQ0M4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg3OTAwMDAyMDAwRjAwQ0Q4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg3QTAwMDAyMDAwRjAwQ0U4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg3QjAwMDAyMDAwRjAwQ0Y4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg3QzAwMDAyMDAwRjAwRDA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg3RDAwMDAyMDAwRjAwRDE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg3RTAwMDAyMDAwRjAwRDI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg3RjAwMDAyMDAwRjAwRDM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDg4MDAwMDAyMDAwRjAwRDQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg4MTAwMDAyMDAwRjAwRDU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg4MjAwMDAyMDAwRjAwRDY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg4MzAwMDAyMDAwRjAwRDc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg4NDAwMDAyMDAwRjAwRDg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg4NTAwMDAyMDAwRjAwRDk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg4NjAwMDAyMDAwRjAwREE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg4NzAwMDAyMDAwRjAwREI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg4ODAwMDAyMDAwRjAwREM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg4OTAwMDAyMDAwRjAwREQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg4QTAwMDAyMDAwRjAwREU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg4QjAwMDAyMDAwRjAwREY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg4QzAwMDAyMDAwRjAwRTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg4RDAwMDAyMDAwRjAwRTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg4RTAwMDAyMDAwRjAwRTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDg4RjAwMDAyMDAwRjAwRTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDg5MDAwMDAyMDAwRjAwRTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg5MTAwMDAyMDAwRjAwRTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg5MjAwMDAyMDAwRjAwRTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg5MzAwMDAyMDAwRjAwRTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg5NDAwMDAyMDAwRjAwRTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg5NTAwMDAyMDAwRjAwRTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg5NjAwMDAyMDAwRjAwRUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg5NzAwMDAyMDAwRjAwRUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg5ODAwMDAyMDAwRjAwRUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg5OTAwMDAyMDAwRjAwRUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg5QTAwMDAyMDAwRjAwRUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg5QjAwMDAyMDAwRjAwRUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg5QzAwMDAyMDAwRjAwRjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg5RDAwMDAyMDAwRjAwRjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDg5RTAwMDAyMDAwRjAwRjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDg5RjAwMDAyMDAwRjAwRjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDhBMDAwMDAyMDAwRjAwRjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhBMTAwMDAyMDAwRjAwRjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhBMjAwMDAyMDAwRjAwRjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhBMzAwMDAyMDAwRjAwRjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhBNDAwMDAyMDAwRjAwRjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDhBNTAwMDAyMDAwRjAwRjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDhBNjAwMDAyMDAwRjAwRkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDhBNzAwMDAyMDAwRjAwRkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDhBODAwMDAyMDAwRjAwRkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDhBOTAwMDAyMDAwRjAwRkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDhBQTAwMDAyMDAwRjAwRkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDhBQjAwMDAyMDAwRjAwRkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDhBQzAwMDAyMDAwRjAwMDA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhBRDAwMDAyMDAwRjAwMDE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhBRTAwMDAyMDAwRjAwMDI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhBRjAwMDAyMDAwRjAwMDM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhCMDAwMDAyMDAwRjAwMDQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDhCMTAwMDAyMDAwRjAwMDU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDhCMjAwMDAyMDAwRjAwMDY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDhCMzAwMDAyMDAwRjAwMDc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhCNDAwMDAyMDAwRjAwMDg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhCNTAwMDAyMDAwRjAwMDk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhCNjAwMDAyMDAwRjAwMEE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhCNzAwMDAyMDAwRjAwMEI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhCODAwMDAyMDAwRjAwMEM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhCOTAwMDAyMDAwRjAwMEQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhCQTAwMDAyMDAwRjAwMEU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhCQjAwMDAyMDAwRjAwMEY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhCQzAwMDAyMDAwRjAwMTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhCRDAwMDAyMDAwRjAwMTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhCRTAwMDAyMDAwRjAwMTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhCRjAwMDAyMDAwRjAwMTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhDMDAwMDAyMDAwRjAwMTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDhDMTAwMDAyMDAwRjAwMTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDhDMjAwMDAyMDAwRjAwMTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhDMzAwMDAyMDAwRjAwMTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhDNDAwMDAyMDAwRjAwMTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhDNTAwMDAyMDAwRjAwMTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhDNjAwMDAyMDAwRjAwMUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhDNzAwMDAyMDAwRjAwMUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhDODAwMDAyMDAwRjAwMUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhDOTAwMDAyMDAwRjAwMUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhDQTAwMDAyMDAwRjAwMUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhDQjAwMDAyMDAwRjAwMUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhDQzAwMDAyMDAwRjAwMjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhDRDAwMDAyMDAwRjAwMjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhDRTAwMDAyMDAwRjAwMjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhDRjAwMDAyMDAwRjAwMjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhEMDAwMDAyMDAwRjAwMjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDhEMTAwMDAyMDAwRjAwMjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhEMjAwMDAyMDAwRjAwMjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhEMzAwMDAyMDAwRjAwMjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhENDAwMDAyMDAwRjAwMjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhENTAwMDAyMDAwRjAwMjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhENjAwMDAyMDAwRjAwMkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhENzAwMDAyMDAwRjAwMkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhEODAwMDAyMDAwRjAwMkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhEOTAwMDAyMDAwRjAwMkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhEQTAwMDAyMDAwRjAwMkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhEQjAwMDAyMDAwRjAwMkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhEQzAwMDAyMDAwRjAwMzA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhERDAwMDAyMDAwRjAwMzE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhERTAwMDAyMDAwRjAwMzI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhERjAwMDAyMDAwRjAwMzM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhFMDAwMDAyMDAwRjAwMzQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhFMTAwMDAyMDAwRjAwMzU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhFMjAwMDAyMDAwRjAwMzY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhFMzAwMDAyMDAwRjAwMzc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhFNDAwMDAyMDAwRjAwMzg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhFNTAwMDAyMDAwRjAwMzk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhFNjAwMDAyMDAwRjAwM0E4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhFNzAwMDAyMDAwRjAwM0I4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhFODAwMDAyMDAwRjAwM0M4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhFOTAwMDAyMDAwRjAwM0Q4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhFQTAwMDAyMDAwRjAwM0U4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhFQjAwMDAyMDAwRjAwM0Y4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhFQzAwMDAyMDAwRjAwNDA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhFRDAwMDAyMDAwRjAwNDE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhFRTAwMDAyMDAwRjAwNDI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhFRjAwMDAyMDAwRjAwNDM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDhGMDAwMDAyMDAwRjAwNDQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhGMTAwMDAyMDAwRjAwNDU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhGMjAwMDAyMDAwRjAwNDY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhGMzAwMDAyMDAwRjAwNDc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhGNDAwMDAyMDAwRjAwNDg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhGNTAwMDAyMDAwRjAwNDk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhGNjAwMDAyMDAwRjAwNEE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhGNzAwMDAyMDAwRjAwNEI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhGODAwMDAyMDAwRjAwNEM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhGOTAwMDAyMDAwRjAwNEQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhGQTAwMDAyMDAwRjAwNEU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhGQjAwMDAyMDAwRjAwNEY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhGQzAwMDAyMDAwRjAwNTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhGRDAwMDAyMDAwRjAwNTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhGRTAwMDAyMDAwRjAwNTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDhGRjAwMDAyMDAwRjAwNTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkwMDAwMDAyMDAwRjAwNTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDkwMTAwMDAyMDAwRjAwNTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDkwMjAwMDAyMDAwRjAwNTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDkwMzAwMDAyMDAwRjAwNTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkwNDAwMDAyMDAwRjAwNTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkwNTAwMDAyMDAwRjAwNTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkwNjAwMDAyMDAwRjAwNUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkwNzAwMDAyMDAwRjAwNUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkwODAwMDAyMDAwRjAwNUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkwOTAwMDAyMDAwRjAwNUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkwQTAwMDAyMDAwRjAwNUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkwQjAwMDAyMDAwRjAwNUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkwQzAwMDAyMDAwRjAwNjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkwRDAwMDAyMDAwRjAwNjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkwRTAwMDAyMDAwRjAwNjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkwRjAwMDAyMDAwRjAwNjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkxMDAwMDAyMDAwRjAwNjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDkxMTAwMDAyMDAwRjAwNjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDkxMjAwMDAyMDAwRjAwNjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkxMzAwMDAyMDAwRjAwNjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkxNDAwMDAyMDAwRjAwNjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkxNTAwMDAyMDAwRjAwNjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkxNjAwMDAyMDAwRjAwNkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkxNzAwMDAyMDAwRjAwNkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkxODAwMDAyMDAwRjAwNkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkxOTAwMDAyMDAwRjAwNkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkxQTAwMDAyMDAwRjAwNkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkxQjAwMDAyMDAwRjAwNkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkxQzAwMDAyMDAwRjAwNzA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkxRDAwMDAyMDAwRjAwNzE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkxRTAwMDAyMDAwRjAwNzI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkxRjAwMDAyMDAwRjAwNzM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDkyMDAwMDAyMDAwRjAwNzQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDkyMTAwMDAyMDAwRjAwNzU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkyMjAwMDAyMDAwRjAwNzY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkyMzAwMDAyMDAwRjAwNzc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkyNDAwMDAyMDAwRjAwNzg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkyNTAwMDAyMDAwRjAwNzk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkyNjAwMDAyMDAwRjAwN0E4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkyNzAwMDAyMDAwRjAwN0I4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkyODAwMDAyMDAwRjAwN0M4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkyOTAwMDAyMDAwRjAwN0Q4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkyQTAwMDAyMDAwRjAwN0U4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkyQjAwMDAyMDAwRjAwN0Y4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkyQzAwMDAyMDAwRjAwODA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkyRDAwMDAyMDAwRjAwODE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkyRTAwMDAyMDAwRjAwODI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDkyRjAwMDAyMDAwRjAwODM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDkzMDAwMDAyMDAwRjAwODQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkzMTAwMDAyMDAwRjAwODU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkzMjAwMDAyMDAwRjAwODY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkzMzAwMDAyMDAwRjAwODc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkzNDAwMDAyMDAwRjAwODg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkzNTAwMDAyMDAwRjAwODk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkzNjAwMDAyMDAwRjAwOEE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkzNzAwMDAyMDAwRjAwOEI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkzODAwMDAyMDAwRjAwOEM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkzOTAwMDAyMDAwRjAwOEQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkzQTAwMDAyMDAwRjAwOEU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkzQjAwMDAyMDAwRjAwOEY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkzQzAwMDAyMDAwRjAwOTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkzRDAwMDAyMDAwRjAwOTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDkzRTAwMDAyMDAwRjAwOTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDkzRjAwMDAyMDAwRjAwOTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk0MDAwMDAyMDAwRjAwOTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDk0MTAwMDAyMDAwRjAwOTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDk0MjAwMDAyMDAwRjAwOTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDk0MzAwMDAyMDAwRjAwOTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk0NDAwMDAyMDAwRjAwOTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk0NTAwMDAyMDAwRjAwOTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk0NjAwMDAyMDAwRjAwOUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk0NzAwMDAyMDAwRjAwOUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk0ODAwMDAyMDAwRjAwOUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk0OTAwMDAyMDAwRjAwOUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk0QTAwMDAyMDAwRjAwOUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk0QjAwMDAyMDAwRjAwOUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk0QzAwMDAyMDAwRjAwQTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk0RDAwMDAyMDAwRjAwQTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk0RTAwMDAyMDAwRjAwQTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk0RjAwMDAyMDAwRjAwQTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk1MDAwMDAyMDAwRjAwQTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDk1MTAwMDAyMDAwRjAwQTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDk1MjAwMDAyMDAwRjAwQTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk1MzAwMDAyMDAwRjAwQTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk1NDAwMDAyMDAwRjAwQTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk1NTAwMDAyMDAwRjAwQTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk1NjAwMDAyMDAwRjAwQUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk1NzAwMDAyMDAwRjAwQUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk1ODAwMDAyMDAwRjAwQUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk1OTAwMDAyMDAwRjAwQUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk1QTAwMDAyMDAwRjAwQUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk1QjAwMDAyMDAwRjAwQUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk1QzAwMDAyMDAwRjAwQjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk1RDAwMDAyMDAwRjAwQjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk1RTAwMDAyMDAwRjAwQjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk1RjAwMDAyMDAwRjAwQjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk2MDAwMDAyMDAwRjAwQjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDk2MTAwMDAyMDAwRjAwQjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk2MjAwMDAyMDAwRjAwQjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk2MzAwMDAyMDAwRjAwQjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk2NDAwMDAyMDAwRjAwQjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk2NTAwMDAyMDAwRjAwQjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk2NjAwMDAyMDAwRjAwQkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk2NzAwMDAyMDAwRjAwQkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk2ODAwMDAyMDAwRjAwQkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk2OTAwMDAyMDAwRjAwQkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk2QTAwMDAyMDAwRjAwQkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk2QjAwMDAyMDAwRjAwQkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk2QzAwMDAyMDAwRjAwQzA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk2RDAwMDAyMDAwRjAwQzE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk2RTAwMDAyMDAwRjAwQzI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk2RjAwMDAyMDAwRjAwQzM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk3MDAwMDAyMDAwRjAwQzQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk3MTAwMDAyMDAwRjAwQzU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk3MjAwMDAyMDAwRjAwQzY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk3MzAwMDAyMDAwRjAwQzc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk3NDAwMDAyMDAwRjAwQzg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk3NTAwMDAyMDAwRjAwQzk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk3NjAwMDAyMDAwRjAwQ0E4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk3NzAwMDAyMDAwRjAwQ0I4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk3ODAwMDAyMDAwRjAwQ0M4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk3OTAwMDAyMDAwRjAwQ0Q4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk3QTAwMDAyMDAwRjAwQ0U4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk3QjAwMDAyMDAwRjAwQ0Y4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk3QzAwMDAyMDAwRjAwRDA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk3RDAwMDAyMDAwRjAwRDE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk3RTAwMDAyMDAwRjAwRDI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk3RjAwMDAyMDAwRjAwRDM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDk4MDAwMDAyMDAwRjAwRDQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk4MTAwMDAyMDAwRjAwRDU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk4MjAwMDAyMDAwRjAwRDY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk4MzAwMDAyMDAwRjAwRDc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk4NDAwMDAyMDAwRjAwRDg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk4NTAwMDAyMDAwRjAwRDk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk4NjAwMDAyMDAwRjAwREE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk4NzAwMDAyMDAwRjAwREI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk4ODAwMDAyMDAwRjAwREM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk4OTAwMDAyMDAwRjAwREQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk4QTAwMDAyMDAwRjAwREU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk4QjAwMDAyMDAwRjAwREY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk4QzAwMDAyMDAwRjAwRTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk4RDAwMDAyMDAwRjAwRTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk4RTAwMDAyMDAwRjAwRTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDk4RjAwMDAyMDAwRjAwRTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDk5MDAwMDAyMDAwRjAwRTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk5MTAwMDAyMDAwRjAwRTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk5MjAwMDAyMDAwRjAwRTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk5MzAwMDAyMDAwRjAwRTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk5NDAwMDAyMDAwRjAwRTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk5NTAwMDAyMDAwRjAwRTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk5NjAwMDAyMDAwRjAwRUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk5NzAwMDAyMDAwRjAwRUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk5ODAwMDAyMDAwRjAwRUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk5OTAwMDAyMDAwRjAwRUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk5QTAwMDAyMDAwRjAwRUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk5QjAwMDAyMDAwRjAwRUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk5QzAwMDAyMDAwRjAwRjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk5RDAwMDAyMDAwRjAwRjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDk5RTAwMDAyMDAwRjAwRjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDk5RjAwMDAyMDAwRjAwRjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDlBMDAwMDAyMDAwRjAwRjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlBMTAwMDAyMDAwRjAwRjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlBMjAwMDAyMDAwRjAwRjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlBMzAwMDAyMDAwRjAwRjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlBNDAwMDAyMDAwRjAwRjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDlBNTAwMDAyMDAwRjAwRjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDlBNjAwMDAyMDAwRjAwRkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDlBNzAwMDAyMDAwRjAwRkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDlBODAwMDAyMDAwRjAwRkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDlBOTAwMDAyMDAwRjAwRkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDlBQTAwMDAyMDAwRjAwRkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDlBQjAwMDAyMDAwRjAwRkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDlBQzAwMDAyMDAwRjAwMDA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlBRDAwMDAyMDAwRjAwMDE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlBRTAwMDAyMDAwRjAwMDI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlBRjAwMDAyMDAwRjAwMDM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlCMDAwMDAyMDAwRjAwMDQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDlCMTAwMDAyMDAwRjAwMDU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDlCMjAwMDAyMDAwRjAwMDY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDlCMzAwMDAyMDAwRjAwMDc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlCNDAwMDAyMDAwRjAwMDg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlCNTAwMDAyMDAwRjAwMDk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlCNjAwMDAyMDAwRjAwMEE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlCNzAwMDAyMDAwRjAwMEI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlCODAwMDAyMDAwRjAwMEM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlCOTAwMDAyMDAwRjAwMEQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlCQTAwMDAyMDAwRjAwMEU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlCQjAwMDAyMDAwRjAwMEY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlCQzAwMDAyMDAwRjAwMTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlCRDAwMDAyMDAwRjAwMTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlCRTAwMDAyMDAwRjAwMTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlCRjAwMDAyMDAwRjAwMTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlDMDAwMDAyMDAwRjAwMTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDlDMTAwMDAyMDAwRjAwMTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDlDMjAwMDAyMDAwRjAwMTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlDMzAwMDAyMDAwRjAwMTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlDNDAwMDAyMDAwRjAwMTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlDNTAwMDAyMDAwRjAwMTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlDNjAwMDAyMDAwRjAwMUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlDNzAwMDAyMDAwRjAwMUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlDODAwMDAyMDAwRjAwMUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlDOTAwMDAyMDAwRjAwMUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlDQTAwMDAyMDAwRjAwMUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlDQjAwMDAyMDAwRjAwMUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlDQzAwMDAyMDAwRjAwMjA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlDRDAwMDAyMDAwRjAwMjE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlDRTAwMDAyMDAwRjAwMjI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlDRjAwMDAyMDAwRjAwMjM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlEMDAwMDAyMDAwRjAwMjQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDlEMTAwMDAyMDAwRjAwMjU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlEMjAwMDAyMDAwRjAwMjY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlEMzAwMDAyMDAwRjAwMjc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlENDAwMDAyMDAwRjAwMjg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlENTAwMDAyMDAwRjAwMjk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlENjAwMDAyMDAwRjAwMkE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlENzAwMDAyMDAwRjAwMkI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlEODAwMDAyMDAwRjAwMkM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlEOTAwMDAyMDAwRjAwMkQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlEQTAwMDAyMDAwRjAwMkU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlEQjAwMDAyMDAwRjAwMkY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlEQzAwMDAyMDAwRjAwMzA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlERDAwMDAyMDAwRjAwMzE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlERTAwMDAyMDAwRjAwMzI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlERjAwMDAyMDAwRjAwMzM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlFMDAwMDAyMDAwRjAwMzQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlFMTAwMDAyMDAwRjAwMzU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlFMjAwMDAyMDAwRjAwMzY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlFMzAwMDAyMDAwRjAwMzc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlFNDAwMDAyMDAwRjAwMzg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlFNTAwMDAyMDAwRjAwMzk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlFNjAwMDAyMDAwRjAwM0E4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlFNzAwMDAyMDAwRjAwM0I4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlFODAwMDAyMDAwRjAwM0M4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlFOTAwMDAyMDAwRjAwM0Q4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlFQTAwMDAyMDAwRjAwM0U4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlFQjAwMDAyMDAwRjAwM0Y4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlFQzAwMDAyMDAwRjAwNDA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlFRDAwMDAyMDAwRjAwNDE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlFRTAwMDAyMDAwRjAwNDI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlFRjAwMDAyMDAwRjAwNDM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDlGMDAwMDAyMDAwRjAwNDQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlGMTAwMDAyMDAwRjAwNDU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlGMjAwMDAyMDAwRjAwNDY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlGMzAwMDAyMDAwRjAwNDc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlGNDAwMDAyMDAwRjAwNDg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlGNTAwMDAyMDAwRjAwNDk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlGNjAwMDAyMDAwRjAwNEE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlGNzAwMDAyMDAwRjAwNEI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlGODAwMDAyMDAwRjAwNEM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlGOTAwMDAyMDAwRjAwNEQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlGQTAwMDAyMDAwRjAwNEU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlGQjAwMDAyMDAwRjAwNEY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlGQzAwMDAyMDAwRjAwNTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlGRDAwMDAyMDAwRjAwNTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlGRTAwMDAyMDAwRjAwNTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDlGRjAwMDAyMDAwRjAwNTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEwMDAwMDAyMDAwRjAwNTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMEEwMTAwMDAyMDAwRjAwNTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEEwMjAwMDAyMDAwRjAwNTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEEwMzAwMDAyMDAwRjAwNTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEEwNDAwMDAyMDAwRjAwNTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEEwNTAwMDAyMDAwRjAwNTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEEwNjAwMDAyMDAwRjAwNUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEEwNzAwMDAyMDAwRjAwNUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEEwODAwMDAyMDAwRjAwNUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEEwOTAwMDAyMDAwRjAwNUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEEwQTAwMDAyMDAwRjAwNUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEEwQjAwMDAyMDAwRjAwNUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEEwQzAwMDAyMDAwRjAwNjA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEEwRDAwMDAyMDAwRjAwNjE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEEwRTAwMDAyMDAwRjAwNjI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEwRjAwMDAyMDAwRjAwNjM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEExMDAwMDAyMDAwRjAwNjQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEExMTAwMDAyMDAwRjAwNjU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEExMjAwMDAyMDAwRjAwNjY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEExMzAwMDAyMDAwRjAwNjc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEExNDAwMDAyMDAwRjAwNjg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEExNTAwMDAyMDAwRjAwNjk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEExNjAwMDAyMDAwRjAwNkE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEExNzAwMDAyMDAwRjAwNkI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEExODAwMDAyMDAwRjAwNkM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEExOTAwMDAyMDAwRjAwNkQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEExQTAwMDAyMDAwRjAwNkU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEExQjAwMDAyMDAwRjAwNkY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEExQzAwMDAyMDAwRjAwNzA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEExRDAwMDAyMDAwRjAwNzE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEExRTAwMDAyMDAwRjAwNzI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEExRjAwMDAyMDAwRjAwNzM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEEyMDAwMDAyMDAwRjAwNzQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEEyMTAwMDAyMDAwRjAwNzU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEEyMjAwMDAyMDAwRjAwNzY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEEyMzAwMDAyMDAwRjAwNzc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEEyNDAwMDAyMDAwRjAwNzg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEEyNTAwMDAyMDAwRjAwNzk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEEyNjAwMDAyMDAwRjAwN0E4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEEyNzAwMDAyMDAwRjAwN0I4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEEyODAwMDAyMDAwRjAwN0M4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEEyOTAwMDAyMDAwRjAwN0Q4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEEyQTAwMDAyMDAwRjAwN0U4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEEyQjAwMDAyMDAwRjAwN0Y4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEEyQzAwMDAyMDAwRjAwODA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEyRDAwMDAyMDAwRjAwODE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEEyRTAwMDAyMDAwRjAwODI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEEyRjAwMDAyMDAwRjAwODM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEEzMDAwMDAyMDAwRjAwODQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEEzMTAwMDAyMDAwRjAwODU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEEzMjAwMDAyMDAwRjAwODY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEEzMzAwMDAyMDAwRjAwODc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEEzNDAwMDAyMDAwRjAwODg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEEzNTAwMDAyMDAwRjAwODk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEEzNjAwMDAyMDAwRjAwOEE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEEzNzAwMDAyMDAwRjAwOEI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEEzODAwMDAyMDAwRjAwOEM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEEzOTAwMDAyMDAwRjAwOEQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEEzQTAwMDAyMDAwRjAwOEU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEEzQjAwMDAyMDAwRjAwOEY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEzQzAwMDAyMDAwRjAwOTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEEzRDAwMDAyMDAwRjAwOTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEEzRTAwMDAyMDAwRjAwOTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEEzRjAwMDAyMDAwRjAwOTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEE0MDAwMDAyMDAwRjAwOTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEE0MTAwMDAyMDAwRjAwOTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEE0MjAwMDAyMDAwRjAwOTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEE0MzAwMDAyMDAwRjAwOTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEE0NDAwMDAyMDAwRjAwOTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEE0NTAwMDAyMDAwRjAwOTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE0NjAwMDAyMDAwRjAwOUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE0NzAwMDAyMDAwRjAwOUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE0ODAwMDAyMDAwRjAwOUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE0OTAwMDAyMDAwRjAwOUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEE0QTAwMDAyMDAwRjAwOUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEE0QjAwMDAyMDAwRjAwOUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEE0QzAwMDAyMDAwRjAwQTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEE0RDAwMDAyMDAwRjAwQTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEE0RTAwMDAyMDAwRjAwQTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEE0RjAwMDAyMDAwRjAwQTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEE1MDAwMDAyMDAwRjAwQTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEE1MTAwMDAyMDAwRjAwQTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEE1MjAwMDAyMDAwRjAwQTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEE1MzAwMDAyMDAwRjAwQTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEE1NDAwMDAyMDAwRjAwQTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE1NTAwMDAyMDAwRjAwQTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE1NjAwMDAyMDAwRjAwQUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE1NzAwMDAyMDAwRjAwQUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE1ODAwMDAyMDAwRjAwQUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEE1OTAwMDAyMDAwRjAwQUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEE1QTAwMDAyMDAwRjAwQUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEE1QjAwMDAyMDAwRjAwQUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEE1QzAwMDAyMDAwRjAwQjA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEE1RDAwMDAyMDAwRjAwQjE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEE1RTAwMDAyMDAwRjAwQjI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEE1RjAwMDAyMDAwRjAwQjM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMEE2MDAwMDAyMDAwRjAwQjQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEE2MTAwMDAyMDAwRjAwQjU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEE2MjAwMDAyMDAwRjAwQjY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEE2MzAwMDAyMDAwRjAwQjc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE2NDAwMDAyMDAwRjAwQjg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE2NTAwMDAyMDAwRjAwQjk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE2NjAwMDAyMDAwRjAwQkE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE2NzAwMDAyMDAwRjAwQkI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEE2ODAwMDAyMDAwRjAwQkM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEE2OTAwMDAyMDAwRjAwQkQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEE2QTAwMDAyMDAwRjAwQkU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEE2QjAwMDAyMDAwRjAwQkY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEE2QzAwMDAyMDAwRjAwQzA4NzcxMDA3OTAwMDAwMDc2OTA2MEZERTUKKzoxMEE2RDAwMDAyMDAwRjAwQzE4NzcxMDAzRDAwMDAwMDZGMDA4MEY3OEQKKzoxMEE2RTAwMDAyMDAwRjAwQzI4NzcxMDAzRDAwMDAwMDZGMDA4MEY3N0MKKzoxMEE2RjAwMDAyMDAwRjAwQzM4NzcxMDAzRDAwMDAwMDZGMDA4MEY3NkIKKzoxMEE3MDAwMDAyMDAwRjAwQzQ4NzcxODAzRDAwMDAwMDZGMDA4MEY3RDkKKzowMDAwMDAwMUZGCisvKiBMb2FkaW5nIEZpcm13YXJlICovCisvKiBJTlRfTUVNIFZlciAqLworICogVGVodXRpIE5ldHdvcmtzKFIpIE5ldHdvcmsgRHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZApkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggYzI5NWJhNy4uZjBjN2RlNyAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC00MSw4ICs0MSw4IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB2OWZzX2FkZHJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjlmc19kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19kZW50cnlfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOwogCiBzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlKTsKIGlub190IHY5ZnNfcWlkMmlubyhzdHJ1Y3QgcDlfcWlkICpxaWQpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2RlbnRyeS5jIGIvZnMvOXAvdmZzX2RlbnRyeS5jCmluZGV4IDA2ZGNjN2MuLmQ3NDMyNTIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kZW50cnkuYworKysgYi9mcy85cC92ZnNfZGVudHJ5LmMKQEAgLTEwNCwxMiArMTA0LDEyIEBACiAJfQogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gdjlmc19jYWNoZWRfZGVudHJ5X2RlbGV0ZSwKIAkuZF9yZWxlYXNlID0gdjlmc19kZW50cnlfcmVsZWFzZSwKIH07CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gdjlmc19kZW50cnlfZGVsZXRlLAogCS5kX3JlbGVhc2UgPSB2OWZzX2RlbnRyeV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggOTMyMTJlNC4uNWY4YWI4YSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTE2OCw4ICsxNjgsOSBAQAogCXA5c3RhdF9mcmVlKHN0KTsKIAlrZnJlZShzdCk7CiAKLVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiIHJldHVybiBzaW1wbGUgc2V0IG1vdW50XG4iKTsKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CitQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiBzaW1wbGUgc2V0IG1vdW50LCByZXR1cm4gMFxuIik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJcmV0dXJuIDA7CiAKIHJlbGVhc2Vfc2I6CiAJaWYgKHNiKSB7CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA5Mzk0NWRkLi5jZWY4YjE4IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTU2LDYxICs1Niw3IEBACiAKIHNvdXJjZSAiZnMvbm90aWZ5L0tjb25maWciCiAKLWNvbmZpZyBRVU9UQQotCWJvb2wgIlF1b3RhIHN1cHBvcnQiCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gc2V0IHBlciB1c2VyIGxpbWl0cyBmb3IgZGlzawotCSAgdXNhZ2UgKGFsc28gY2FsbGVkIGRpc2sgcXVvdGFzKS4gQ3VycmVudGx5LCBpdCB3b3JrcyBmb3IgdGhlCi0JICBleHQyLCBleHQzLCBhbmQgcmVpc2VyZnMgZmlsZSBzeXN0ZW0uIGV4dDMgYWxzbyBzdXBwb3J0cyBqb3VybmFsbGVkCi0JICBxdW90YXMgZm9yIHdoaWNoIHlvdSBkb24ndCBuZWVkIHRvIHJ1biBxdW90YWNoZWNrKDgpIGFmdGVyIGFuIHVuY2xlYW4KLQkgIHNodXRkb3duLgotCSAgRm9yIGZ1cnRoZXIgZGV0YWlscywgcmVhZCB0aGUgUXVvdGEgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb20KLQkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4sIG9yIHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkCi0JICB3aXRoIHRoZSBxdW90YSB0b29scy4gUHJvYmFibHkgdGhlIHF1b3RhIHN1cHBvcnQgaXMgb25seSB1c2VmdWwgZm9yCi0JICBtdWx0aSB1c2VyIHN5c3RlbXMuIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBRVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotCWJvb2wgIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gUVVPVEEgJiYgTkVUCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHF1b3RhIHdhcm5pbmdzIChhYm91dCBleGNlZWRpbmcgc29mdGxpbWl0LCByZWFjaGluZwotCSAgaGFyZGxpbWl0LCBldGMuKSB3aWxsIGJlIHJlcG9ydGVkIHRocm91Z2ggbmV0bGluayBpbnRlcmZhY2UuIElmIHVuc3VyZSwKLQkgIHNheSBZLgotCi1jb25maWcgUFJJTlRfUVVPVEFfV0FSTklORwotCWJvb2wgIlByaW50IHF1b3RhIHdhcm5pbmdzIHRvIGNvbnNvbGUgKE9CU09MRVRFKSIKLQlkZXBlbmRzIG9uIFFVT1RBCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHF1b3RhIHdhcm5pbmdzIChhYm91dCBleGNlZWRpbmcgc29mdGxpbWl0LCByZWFjaGluZwotCSAgaGFyZGxpbWl0LCBldGMuKSB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIHByb2Nlc3MnIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgotCSAgTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgY3VycmVudGx5IGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBhd2F5IGluCi0JICBmdXR1cmUuIFBsZWFzZSB1c2Ugbm90aWZpY2F0aW9uIHZpYSBuZXRsaW5rIHNvY2tldCBpbnN0ZWFkLgotCi0jIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxldGVkIHdoZW4gbmVlZGVkLgotY29uZmlnIFFVT1RBX1RSRUUKLQkgdHJpc3RhdGUKLQotY29uZmlnIFFGTVRfVjEKLQl0cmlzdGF0ZSAiT2xkIHF1b3RhIGZvcm1hdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUVVPVEEKLQloZWxwCi0JICBUaGlzIHF1b3RhIGZvcm1hdCB3YXMgKGlzKSB1c2VkIGJ5IGtlcm5lbHMgZWFybGllciB0aGFuIDIuNC4yMi4gSWYKLQkgIHlvdSBoYXZlIHF1b3RhIHdvcmtpbmcgYW5kIHlvdSBkb24ndCB3YW50IHRvIGNvbnZlcnQgdG8gbmV3IHF1b3RhCi0JICBmb3JtYXQgc2F5IFkgaGVyZS4KLQotY29uZmlnIFFGTVRfVjIKLQl0cmlzdGF0ZSAiUXVvdGEgZm9ybWF0IHYyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBRVU9UQQotCXNlbGVjdCBRVU9UQV9UUkVFCi0JaGVscAotCSAgVGhpcyBxdW90YSBmb3JtYXQgYWxsb3dzIHVzaW5nIHF1b3RhcyB3aXRoIDMyLWJpdCBVSURzL0dJRHMuIElmIHlvdQotCSAgbmVlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgc2F5IFkgaGVyZS4KLQotY29uZmlnIFFVT1RBQ1RMCi0JYm9vbAotCWRlcGVuZHMgb24gWEZTX1FVT1RBIHx8IFFVT1RBCi0JZGVmYXVsdCB5Citzb3VyY2UgImZzL3F1b3RhL0tjb25maWciCiAKIHNvdXJjZSAiZnMvYXV0b2ZzL0tjb25maWciCiBzb3VyY2UgImZzL2F1dG9mczQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggZGMyMGRiMy4uNmU4MmEzMCAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTUxLDExICs1MSw3IEBACiBvYmotJChDT05GSUdfTkZTX0NPTU1PTikJKz0gbmZzX2NvbW1vbi8KIG9iai0kKENPTkZJR19HRU5FUklDX0FDTCkJKz0gZ2VuZXJpY19hY2wubwogCi1vYmotJChDT05GSUdfUVVPVEEpCQkrPSBkcXVvdC5vCi1vYmotJChDT05GSUdfUUZNVF9WMSkJCSs9IHF1b3RhX3YxLm8KLW9iai0kKENPTkZJR19RRk1UX1YyKQkJKz0gcXVvdGFfdjIubwotb2JqLSQoQ09ORklHX1FVT1RBX1RSRUUpCSs9IHF1b3RhX3RyZWUubwotb2JqLSQoQ09ORklHX1FVT1RBQ1RMKQkJKz0gcXVvdGEubworb2JqLXkJCQkJKz0gcXVvdGEvCiAKIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcHJvYy8KIG9iai15CQkJCSs9IHBhcnRpdGlvbnMvCmRpZmYgLS1naXQgYS9mcy9hZGZzL2FkZnMuaCBiL2ZzL2FkZnMvYWRmcy5oCmluZGV4IDgzMTE1NzUuLmUwYTg1ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvYWRmcy5oCisrKyBiL2ZzL2FkZnMvYWRmcy5oCkBAIC04Niw3ICs4Niw3IEBACiAvKiBkaXJfKi5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWRmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkZnNfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGFkZnNfZGlyX29wcyBhZGZzX2ZfZGlyX29wczsKIGV4dGVybiBzdHJ1Y3QgYWRmc19kaXJfb3BzIGFkZnNfZnBsdXNfZGlyX29wczsKIApkaWZmIC0tZ2l0IGEvZnMvYWRmcy9kaXIuYyBiL2ZzL2FkZnMvZGlyLmMKaW5kZXggODVhMzBlOS4uZTg2N2NjZiAxMDA2NDQKLS0tIGEvZnMvYWRmcy9kaXIuYworKysgYi9mcy9hZGZzL2Rpci5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWRmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IGFkZnNfaGFzaCwKIAkuZF9jb21wYXJlCT0gYWRmc19jb21wYXJlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggZTllYzkxNS4uMWEyZDVlMyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hZmZzLmgKKysrIGIvZnMvYWZmcy9hZmZzLmgKQEAgLTE5OSw4ICsxOTksNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMJIGFmZnNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX2FvcHNfb2ZzOwogCi1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zCSBhZmZzX2RlbnRyeV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucwkgYWZmc19kZW50cnlfb3BlcmF0aW9uc19pbnRsOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucwkgYWZmc19kZW50cnlfb3BlcmF0aW9uczsKIAogc3RhdGljIGlubGluZSB2b2lkCiBhZmZzX3NldF9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9mcy9hZmZzL2FtaWdhZmZzLmMgYi9mcy9hZmZzL2FtaWdhZmZzLmMKaW5kZXggODA1NTczMC4uN2QwZjBhMyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jCisrKyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwpAQCAtMTc5LDE0ICsxNzksMTggQEAKIAkJYWZmc19sb2NrX2RpcihkaXIpOwogCQlhZmZzX2ZpeF9kY2FjaGUoZGVudHJ5LCBsaW5rX2lubyk7CiAJCXJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2goZGlyLCBsaW5rX2JoKTsKLQkJaWYgKHJldHZhbCkKKwkJaWYgKHJldHZhbCkgeworCQkJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJCQlnb3RvIGRvbmU7CisJCX0KIAkJbWFya19idWZmZXJfZGlydHlfaW5vZGUobGlua19iaCwgaW5vZGUpOwogCiAJCW1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS0+bmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS0+bmFtZSwgMzIpOwogCQlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwotCQlpZiAocmV0dmFsKQorCQlpZiAocmV0dmFsKSB7CisJCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAkJCWdvdG8gZG9uZTsKKwkJfQogCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwogCiAJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IGNmY2YxYjYuLjk2MGQzMzYgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYworKysgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTE5LDEyICsxOSwxMiBAQAogc3RhdGljIGludAkgYWZmc19pbnRsX2hhc2hfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiBzdGF0aWMgaW50ICAgICAgIGFmZnNfaW50bF9jb21wYXJlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZmZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gYWZmc19oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlCT0gYWZmc19jb21wYXJlX2RlbnRyeSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19pbnRsX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZmZzX2ludGxfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfaGFzaAkJPSBhZmZzX2ludGxfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IGFmZnNfaW50bF9jb21wYXJlX2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggOTljZjM5MC4uOWJkNzU3NyAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCisrKyBiL2ZzL2Fmcy9kaXIuYwpAQCAtNjIsNyArNjIsNyBAQAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZzX2ZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhZnNfZF9yZXZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IGFmc19kX2RlbGV0ZSwKIAkuZF9yZWxlYXNlCT0gYWZzX2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2ZzL2Fub25faW5vZGVzLmMgYi9mcy9hbm9uX2lub2Rlcy5jCmluZGV4IDNiYmRiOWQuLjFkZDk2ZDQgMTAwNjQ0Ci0tLSBhL2ZzL2Fub25faW5vZGVzLmMKKysrIGIvZnMvYW5vbl9pbm9kZXMuYwpAQCAtNDgsNyArNDgsNyBAQAogCS5nZXRfc2IJCT0gYW5vbl9pbm9kZWZzX2dldF9zYiwKIAkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKIH07Ci1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFub25faW5vZGVmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYW5vbl9pbm9kZWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZQk9IGFub25faW5vZGVmc19kZWxldGVfZGVudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jCmluZGV4IGY0MzYwMTkuLjlmZTFiMWIgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYworKysgYi9mcy9hdHRyLmMKQEAgLTE3Myw3ICsxNzMsOCBAQAogCQlpZiAoIWVycm9yKSB7CiAJCQlpZiAoKGlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKIAkJCSAgICAoaWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkKLQkJCQllcnJvciA9IERRVU9UX1RSQU5TRkVSKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQkJCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/CisJCQkJCS1FRFFVT1QgOiAwOwogCQkJaWYgKCFlcnJvcikKIAkJCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwogCQl9CmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvcm9vdC5jIGIvZnMvYXV0b2ZzL3Jvb3QuYwppbmRleCA4YWFjYWRlLi40YTE0MDFjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvcm9vdC5jCisrKyBiL2ZzL2F1dG9mcy9yb290LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhdXRvZnNfcmV2YWxpZGF0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCA3MTZlMTJiLi42OWM4MTQyIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAlyZXR1cm4gaW5vOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mczRfc2JfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mczRfc2JfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmVsZWFzZSAgICAgID0gYXV0b2ZzNF9kZW50cnlfcmVsZWFzZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggMmE0MWMyYS4uNzRiMTQ2OSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTM0OSwxMyArMzQ5LDEzIEBACiB9CiAKIC8qIEZvciBkZW50cmllcyBvZiBkaXJlY3RvcmllcyBpbiB0aGUgcm9vdCBkaXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzNF9yb290X2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IGF1dG9mczRfcmV2YWxpZGF0ZSwKIAkuZF9yZWxlYXNlCT0gYXV0b2ZzNF9kZW50cnlfcmVsZWFzZSwKIH07CiAKIC8qIEZvciBvdGhlciBkZW50cmllcyAqLwotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhdXRvZnM0X3JldmFsaWRhdGUsCiAJLmRfcmVsZWFzZQk9IGF1dG9mczRfZGVudHJ5X3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYmlvLWludGVncml0eS5jIGIvZnMvYmlvLWludGVncml0eS5jCmluZGV4IGZlMmIxYWEuLjMxYzQ2YTIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby1pbnRlZ3JpdHkuYworKysgYi9mcy9iaW8taW50ZWdyaXR5LmMKQEAgLTI2LDU1ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJpb19pbnRlZ3JpdHlfc2xhYiBfX3JlYWRfbW9zdGx5Oworc3RhdGljIG1lbXBvb2xfdCAqYmlvX2ludGVncml0eV9wb29sOworc3RhdGljIHN0cnVjdCBiaW9fc2V0ICppbnRlZ3JpdHlfYmlvX3NldDsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2ludGVncml0eWRfd3E7CiAKIC8qKgotICogYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQgLSBBbGxvY2F0ZSBpbnRlZ3JpdHkgcGF5bG9hZCBhbmQgYXR0YWNoIGl0IHRvIGJpbwotICogQGJpbzoJYmlvIHRvIGF0dGFjaCBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8KLSAqIEBnZnBfbWFzazoJTWVtb3J5IGFsbG9jYXRpb24gbWFzawotICogQG5yX3ZlY3M6CU51bWJlciBvZiBpbnRlZ3JpdHkgbWV0YWRhdGEgc2NhdHRlci1nYXRoZXIgZWxlbWVudHMKLSAqIEBiczoJCWJpb19zZXQgdG8gYWxsb2NhdGUgZnJvbQotICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgYmlvIGZvciBhdHRhY2hpbmcgaW50ZWdyaXR5Ci0gKiBtZXRhZGF0YS4gIG5yX3ZlY3Mgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyBjb250YWluaW5nCi0gKiBpbnRlZ3JpdHkgbWV0YWRhdGEgdGhhdCBjYW4gYmUgYXR0YWNoZWQuCi0gKi8KLXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KHN0cnVjdCBiaW8gKmJpbywKLQkJCQkJCQkgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJCQkJIHVuc2lnbmVkIGludCBucl92ZWNzLAotCQkJCQkJCSBzdHJ1Y3QgYmlvX3NldCAqYnMpCi17Ci0Jc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwOwotCXN0cnVjdCBiaW9fdmVjICppdjsKLQl1bnNpZ25lZCBsb25nIGlkeDsKLQotCUJVR19PTihiaW8gPT0gTlVMTCk7Ci0KLQliaXAgPSBtZW1wb29sX2FsbG9jKGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wsIGdmcF9tYXNrKTsKLQlpZiAodW5saWtlbHkoYmlwID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JbWVtc2V0KGJpcCwgMCwgc2l6ZW9mKCpiaXApKTsKLQotCWl2ID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfdmVjcywgJmlkeCwgYnMpOwotCWlmICh1bmxpa2VseShpdiA9PSBOVUxMKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwX3ZlY1xuIiwgX19mdW5jX18pOwotCQltZW1wb29sX2ZyZWUoYmlwLCBicy0+YmlvX2ludGVncml0eV9wb29sKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYmlwLT5iaXBfcG9vbCA9IGlkeDsKLQliaXAtPmJpcF92ZWMgPSBpdjsKLQliaXAtPmJpcF9iaW8gPSBiaW87Ci0JYmlvLT5iaV9pbnRlZ3JpdHkgPSBiaXA7Ci0KLQlyZXR1cm4gYmlwOwotfQotRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldCk7Ci0KLS8qKgogICogYmlvX2ludGVncml0eV9hbGxvYyAtIEFsbG9jYXRlIGludGVncml0eSBwYXlsb2FkIGFuZCBhdHRhY2ggaXQgdG8gYmlvCiAgKiBAYmlvOgliaW8gdG8gYXR0YWNoIGludGVncml0eSBtZXRhZGF0YSB0bwogICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCkBAIC04OCwxOSArNDQsNDQgQEAKIAkJCQkJCSAgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJCQkgIHVuc2lnbmVkIGludCBucl92ZWNzKQogewotCXJldHVybiBiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldChiaW8sIGdmcF9tYXNrLCBucl92ZWNzLCBmc19iaW9fc2V0KTsKKwlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7CisJc3RydWN0IGJpb192ZWMgKml2OworCXVuc2lnbmVkIGxvbmcgaWR4OworCisJQlVHX09OKGJpbyA9PSBOVUxMKTsKKworCWJpcCA9IG1lbXBvb2xfYWxsb2MoYmlvX2ludGVncml0eV9wb29sLCBnZnBfbWFzayk7CisJaWYgKHVubGlrZWx5KGJpcCA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChiaXAsIDAsIHNpemVvZigqYmlwKSk7CisKKwlpdiA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX3ZlY3MsICZpZHgsIGludGVncml0eV9iaW9fc2V0KTsKKwlpZiAodW5saWtlbHkoaXYgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcF92ZWNcbiIsIF9fZnVuY19fKTsKKwkJbWVtcG9vbF9mcmVlKGJpcCwgYmlvX2ludGVncml0eV9wb29sKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYmlwLT5iaXBfcG9vbCA9IGlkeDsKKwliaXAtPmJpcF92ZWMgPSBpdjsKKwliaXAtPmJpcF9iaW8gPSBiaW87CisJYmlvLT5iaV9pbnRlZ3JpdHkgPSBiaXA7CisKKwlyZXR1cm4gYmlwOwogfQogRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2FsbG9jKTsKIAogLyoqCiAgKiBiaW9faW50ZWdyaXR5X2ZyZWUgLSBGcmVlIGJpbyBpbnRlZ3JpdHkgcGF5bG9hZAogICogQGJpbzoJYmlvIGNvbnRhaW5pbmcgYmlwIHRvIGJlIGZyZWVkCi0gKiBAYnM6CQliaW9fc2V0IHRoaXMgYmlvIHdhcyBhbGxvY2F0ZWQgZnJvbQogICoKICAqIERlc2NyaXB0aW9uOiBVc2VkIHRvIGZyZWUgdGhlIGludGVncml0eSBwb3J0aW9uIG9mIGEgYmlvLiBVc3VhbGx5CiAgKiBjYWxsZWQgZnJvbSBiaW9fZnJlZSgpLgogICovCi12b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fc2V0ICpicykKK3ZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXAgPSBiaW8tPmJpX2ludGVncml0eTsKIApAQCAtMTExLDggKzkyLDggQEAKIAkgICAgJiYgYmlwLT5iaXBfYnVmICE9IE5VTEwpCiAJCWtmcmVlKGJpcC0+YmlwX2J1Zik7CiAKLQlidmVjX2ZyZWVfYnMoYnMsIGJpcC0+YmlwX3ZlYywgYmlwLT5iaXBfcG9vbCk7Ci0JbWVtcG9vbF9mcmVlKGJpcCwgYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCk7CisJYnZlY19mcmVlX2JzKGludGVncml0eV9iaW9fc2V0LCBiaXAtPmJpcF92ZWMsIGJpcC0+YmlwX3Bvb2wpOworCW1lbXBvb2xfZnJlZShiaXAsIGJpb19pbnRlZ3JpdHlfcG9vbCk7CiAKIAliaW8tPmJpX2ludGVncml0eSA9IE5VTEw7CiB9CkBAIC02ODYsMTkgKzY2NywxNyBAQAogICogQGJpbzoJTmV3IGJpbwogICogQGJpb19zcmM6CU9yaWdpbmFsIGJpbwogICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCi0gKiBAYnM6CQliaW9fc2V0IHRvIGFsbG9jYXRlIGJpcCBmcm9tCiAgKgogICogRGVzY3JpcHRpb246CUNhbGxlZCB0byBhbGxvY2F0ZSBhIGJpcCB3aGVuIGNsb25pbmcgYSBiaW8KICAqLwotaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLAotCQkJZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBiaW9fc2V0ICpicykKK2ludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwX3NyYyA9IGJpb19zcmMtPmJpX2ludGVncml0eTsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7CiAKIAlCVUdfT04oYmlwX3NyYyA9PSBOVUxMKTsKIAotCWJpcCA9IGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KGJpbywgZ2ZwX21hc2ssIGJpcF9zcmMtPmJpcF92Y250LCBicyk7CisJYmlwID0gYmlvX2ludGVncml0eV9hbGxvYyhiaW8sIGdmcF9tYXNrLCBiaXBfc3JjLT5iaXBfdmNudCk7CiAKIAlpZiAoYmlwID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwpAQCAtNzE0LDM3ICs2OTMsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmlvX2ludGVncml0eV9jbG9uZSk7CiAKLWludCBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShzdHJ1Y3QgYmlvX3NldCAqYnMsIGludCBwb29sX3NpemUpCi17Ci0JYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChwb29sX3NpemUsCi0JCQkJCQkJICBiaW9faW50ZWdyaXR5X3NsYWIpOwotCWlmICghYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKTsKLQotdm9pZCBiaW9zZXRfaW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpb19zZXQgKmJzKQotewotCWlmIChicy0+YmlvX2ludGVncml0eV9wb29sKQotCQltZW1wb29sX2Rlc3Ryb3koYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9pbnRlZ3JpdHlfZnJlZSk7Ci0KLXZvaWQgX19pbml0IGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKHZvaWQpCi17Ci0JYmlvX2ludGVncml0eV9zbGFiID0gS01FTV9DQUNIRShiaW9faW50ZWdyaXR5X3BheWxvYWQsCi0JCQkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW50ZWdyaXR5X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJpb19pbnRlZ3JpdHlfaW5pdCh2b2lkKQogewogCWtpbnRlZ3JpdHlkX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgia2ludGVncml0eWQiKTsKIAogCWlmICgha2ludGVncml0eWRfd3EpCiAJCXBhbmljKCJGYWlsZWQgdG8gY3JlYXRlIGtpbnRlZ3JpdHlkXG4iKTsKIAorCWJpb19pbnRlZ3JpdHlfc2xhYiA9IEtNRU1fQ0FDSEUoYmlvX2ludGVncml0eV9wYXlsb2FkLAorCQkJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyk7CisKKwliaW9faW50ZWdyaXR5X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woQklPX1BPT0xfU0laRSwKKwkJCQkJCSAgICAgIGJpb19pbnRlZ3JpdHlfc2xhYik7CisJaWYgKCFiaW9faW50ZWdyaXR5X3Bvb2wpCisJCXBhbmljKCJiaW9faW50ZWdyaXR5OiBjYW4ndCBhbGxvY2F0ZSBiaXAgcG9vbFxuIik7CisKKwlpbnRlZ3JpdHlfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoQklPX1BPT0xfU0laRSwgMCk7CisJaWYgKCFpbnRlZ3JpdHlfYmlvX3NldCkKKwkJcGFuaWMoImJpb19pbnRlZ3JpdHk6IGNhbid0IGFsbG9jYXRlIGJpb19zZXRcbiIpOworCiAJcmV0dXJuIDA7CiB9Ci1zdWJzeXNfaW5pdGNhbGwoaW50ZWdyaXR5X2luaXQpOworc3Vic3lzX2luaXRjYWxsKGJpb19pbnRlZ3JpdHlfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IGQ0ZjA2MzIuLmEwNDBjZGUgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJYnZlY19mcmVlX2JzKGJzLCBiaW8tPmJpX2lvX3ZlYywgQklPX1BPT0xfSURYKGJpbykpOwogCiAJaWYgKGJpb19pbnRlZ3JpdHkoYmlvKSkKLQkJYmlvX2ludGVncml0eV9mcmVlKGJpbywgYnMpOworCQliaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBmcm9udCBwYWRkaW5nLCBhZGp1c3QgdGhlIGJpbyBwb2ludGVyIGJlZm9yZSBmcmVlaW5nCkBAIC0zMDEsNDggKzMwMSw1MSBAQAogICoqLwogc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Jpb3NldChnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcywgc3RydWN0IGJpb19zZXQgKmJzKQogeworCXN0cnVjdCBiaW9fdmVjICpidmwgPSBOVUxMOwogCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7Ci0Jdm9pZCAqdW5pbml0aWFsaXplZF92YXIocCk7CisJdW5zaWduZWQgbG9uZyBpZHggPSAwOworCXZvaWQgKnAgPSBOVUxMOwogCiAJaWYgKGJzKSB7CiAJCXAgPSBtZW1wb29sX2FsbG9jKGJzLT5iaW9fcG9vbCwgZ2ZwX21hc2spOwotCi0JCWlmIChwKQotCQkJYmlvID0gcCArIGJzLT5mcm9udF9wYWQ7Ci0JfSBlbHNlCisJCWlmICghcCkKKwkJCWdvdG8gZXJyOworCQliaW8gPSBwICsgYnMtPmZyb250X3BhZDsKKwl9IGVsc2UgewogCQliaW8gPSBrbWFsbG9jKHNpemVvZigqYmlvKSwgZ2ZwX21hc2spOwotCi0JaWYgKGxpa2VseShiaW8pKSB7Ci0JCXN0cnVjdCBiaW9fdmVjICpidmwgPSBOVUxMOwotCi0JCWJpb19pbml0KGJpbyk7Ci0JCWlmIChsaWtlbHkobnJfaW92ZWNzKSkgewotCQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihpZHgpOwotCi0JCQlpZiAobnJfaW92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgewotCQkJCWlkeCA9IDA7Ci0JCQkJYnZsID0gYmlvLT5iaV9pbmxpbmVfdmVjczsKLQkJCQlucl9pb3ZlY3MgPSBCSU9fSU5MSU5FX1ZFQ1M7Ci0JCQl9IGVsc2UgewotCQkJCWJ2bCA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX2lvdmVjcywgJmlkeCwKLQkJCQkJCQlicyk7Ci0JCQkJbnJfaW92ZWNzID0gYnZlY19ucl92ZWNzKGlkeCk7Ci0JCQl9Ci0JCQlpZiAodW5saWtlbHkoIWJ2bCkpIHsKLQkJCQlpZiAoYnMpCi0JCQkJCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOwotCQkJCWVsc2UKLQkJCQkJa2ZyZWUoYmlvKTsKLQkJCQliaW8gPSBOVUxMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJYmlvLT5iaV9mbGFncyB8PSBpZHggPDwgQklPX1BPT0xfT0ZGU0VUOwotCQkJYmlvLT5iaV9tYXhfdmVjcyA9IG5yX2lvdmVjczsKLQkJfQotCQliaW8tPmJpX2lvX3ZlYyA9IGJ2bDsKKwkJaWYgKCFiaW8pCisJCQlnb3RvIGVycjsKIAl9Ci1vdXQ6CisKKwliaW9faW5pdChiaW8pOworCisJaWYgKHVubGlrZWx5KCFucl9pb3ZlY3MpKQorCQlnb3RvIG91dF9zZXQ7CisKKwlpZiAobnJfaW92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgeworCQlidmwgPSBiaW8tPmJpX2lubGluZV92ZWNzOworCQlucl9pb3ZlY3MgPSBCSU9fSU5MSU5FX1ZFQ1M7CisJfSBlbHNlIHsKKwkJYnZsID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfaW92ZWNzLCAmaWR4LCBicyk7CisJCWlmICh1bmxpa2VseSghYnZsKSkKKwkJCWdvdG8gZXJyX2ZyZWU7CisKKwkJbnJfaW92ZWNzID0gYnZlY19ucl92ZWNzKGlkeCk7CisJfQorCWJpby0+YmlfZmxhZ3MgfD0gaWR4IDw8IEJJT19QT09MX09GRlNFVDsKKwliaW8tPmJpX21heF92ZWNzID0gbnJfaW92ZWNzOworb3V0X3NldDoKKwliaW8tPmJpX2lvX3ZlYyA9IGJ2bDsKKwogCXJldHVybiBiaW87CisKK2Vycl9mcmVlOgorCWlmIChicykKKwkJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7CisJZWxzZQorCQlrZnJlZShiaW8pOworZXJyOgorCXJldHVybiBOVUxMOwogfQogCiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MpCkBAIC00NjMsNyArNDY2LDcgQEAKIAlpZiAoYmlvX2ludGVncml0eShiaW8pKSB7CiAJCWludCByZXQ7CiAKLQkJcmV0ID0gYmlvX2ludGVncml0eV9jbG9uZShiLCBiaW8sIGdmcF9tYXNrLCBmc19iaW9fc2V0KTsKKwkJcmV0ID0gYmlvX2ludGVncml0eV9jbG9uZShiLCBiaW8sIGdmcF9tYXNrKTsKIAogCQlpZiAocmV0IDwgMCkgewogCQkJYmlvX3B1dChiKTsKQEAgLTE1MjYsNyArMTUyOSw2IEBACiAJaWYgKGJzLT5iaW9fcG9vbCkKIAkJbWVtcG9vbF9kZXN0cm95KGJzLT5iaW9fcG9vbCk7CiAKLQliaW9zZXRfaW50ZWdyaXR5X2ZyZWUoYnMpOwogCWJpb3ZlY19mcmVlX3Bvb2xzKGJzKTsKIAliaW9fcHV0X3NsYWIoYnMpOwogCkBAIC0xNTY3LDkgKzE1NjksNiBAQAogCWlmICghYnMtPmJpb19wb29sKQogCQlnb3RvIGJhZDsKIAotCWlmIChiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShicywgcG9vbF9zaXplKSkKLQkJZ290byBiYWQ7Ci0KIAlpZiAoIWJpb3ZlY19jcmVhdGVfcG9vbHMoYnMsIHBvb2xfc2l6ZSkpCiAJCXJldHVybiBiczsKIApAQCAtMTU4Niw2ICsxNTg1LDEzIEBACiAJCWludCBzaXplOwogCQlzdHJ1Y3QgYmlvdmVjX3NsYWIgKmJ2cyA9IGJ2ZWNfc2xhYnMgKyBpOwogCisjaWZuZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQorCQlpZiAoYnZzLT5ucl92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgeworCQkJYnZzLT5zbGFiID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwogCQlzaXplID0gYnZzLT5ucl92ZWNzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKTsKIAkJYnZzLT5zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoYnZzLT5uYW1lLCBzaXplLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCk7CkBAIC0xNjAwLDcgKzE2MDYsNiBAQAogCWlmICghYmlvX3NsYWJzKQogCQlwYW5pYygiYmlvOiBjYW4ndCBhbGxvY2F0ZSBiaW9zXG4iKTsKIAotCWJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKCk7CiAJYmlvdmVjX2luaXRfc2xhYnMoKTsKIAogCWZzX2Jpb19zZXQgPSBiaW9zZXRfY3JlYXRlKEJJT19QT09MX1NJWkUsIDApOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBiM2MxZWZmLi44YzNjNjg5IDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtMTc0LDYgKzE3NSwxNTEgQEAKIAkJCQlpb3YsIG9mZnNldCwgbnJfc2VncywgYmxrZGV2X2dldF9ibG9ja3MsIE5VTEwpOwogfQogCisvKgorICogV3JpdGUgb3V0IGFuZCB3YWl0IHVwb24gYWxsIHRoZSBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGJsb2NrCisgKiBkZXZpY2UgdmlhIGl0cyBtYXBwaW5nLiAgRG9lcyBub3QgdGFrZSB0aGUgc3VwZXJibG9jayBsb2NrLgorICovCitpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCWludCByZXQgPSAwOworCisJaWYgKGJkZXYpCisJCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc3luY19ibG9ja2Rldik7CisKKy8qCisgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcworICogZGV2aWNlLiAgIEZpbGVzeXN0ZW0gZGF0YSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGJsb2NrCisgKiBkZXZpY2UuICBUYWtlcyB0aGUgc3VwZXJibG9jayBsb2NrLgorICovCitpbnQgZnN5bmNfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBnZXRfc3VwZXIoYmRldik7CisJaWYgKHNiKSB7CisJCWludCByZXMgPSBmc3luY19zdXBlcihzYik7CisJCWRyb3Bfc3VwZXIoc2IpOworCQlyZXR1cm4gcmVzOworCX0KKwlyZXR1cm4gc3luY19ibG9ja2RldihiZGV2KTsKK30KKworLyoqCisgKiBmcmVlemVfYmRldiAgLS0gIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZQorICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIGxvY2sKKyAqCisgKiBUaGlzIHRha2VzIHRoZSBibG9jayBkZXZpY2UgYmRfbW91bnRfc2VtIHRvIG1ha2Ugc3VyZSBubyBuZXcgbW91bnRzCisgKiBoYXBwZW4gb24gYmRldiB1bnRpbCB0aGF3X2JkZXYoKSBpcyBjYWxsZWQuCisgKiBJZiBhIHN1cGVyYmxvY2sgaXMgZm91bmQgb24gdGhpcyBkZXZpY2UsIHdlIHRha2UgdGhlIHNfdW1vdW50IHNlbWFwaG9yZQorICogb24gaXQgdG8gbWFrZSBzdXJlIG5vYm9keSB1bm1vdW50cyB1bnRpbCB0aGUgc25hcHNob3QgY3JlYXRpb24gaXMgZG9uZS4KKyAqIFRoZSByZWZlcmVuY2UgY291bnRlciAoYmRfZnNmcmVlemVfY291bnQpIGd1YXJhbnRlZXMgdGhhdCBvbmx5IHRoZSBsYXN0CisgKiB1bmZyZWV6ZSBwcm9jZXNzIGNhbiB1bmZyZWV6ZSB0aGUgZnJvemVuIGZpbGVzeXN0ZW0gYWN0dWFsbHkgd2hlbiBtdWx0aXBsZQorICogZnJlZXplIHJlcXVlc3RzIGFycml2ZSBzaW11bHRhbmVvdXNseS4gSXQgY291bnRzIHVwIGluIGZyZWV6ZV9iZGV2KCkgYW5kCisgKiBjb3VudCBkb3duIGluIHRoYXdfYmRldigpLiBXaGVuIGl0IGJlY29tZXMgMCwgdGhhd19iZGV2KCkgd2lsbCB1bmZyZWV6ZQorICogYWN0dWFsbHkuCisgKi8KK3N0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWludCBlcnJvciA9IDA7CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJaWYgKGJkZXYtPmJkX2ZzZnJlZXplX2NvdW50ID4gMCkgeworCQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCsrOworCQlzYiA9IGdldF9zdXBlcihiZGV2KTsKKwkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJCXJldHVybiBzYjsKKwl9CisJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKKworCWRvd24oJmJkZXYtPmJkX21vdW50X3NlbSk7CisJc2IgPSBnZXRfc3VwZXIoYmRldik7CisJaWYgKHNiICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9XUklURTsKKwkJc21wX3dtYigpOworCisJCV9fZnN5bmNfc3VwZXIoc2IpOworCisJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9UUkFOUzsKKwkJc21wX3dtYigpOworCisJCXN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CisKKwkJaWYgKHNiLT5zX29wLT5mcmVlemVfZnMpIHsKKwkJCWVycm9yID0gc2ItPnNfb3AtPmZyZWV6ZV9mcyhzYik7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJIlZGUzpGaWxlc3lzdGVtIGZyZWV6ZSBmYWlsZWRcbiIpOworCQkJCXNiLT5zX2Zyb3plbiA9IFNCX1VORlJPWkVOOworCQkJCWRyb3Bfc3VwZXIoc2IpOworCQkJCXVwKCZiZGV2LT5iZF9tb3VudF9zZW0pOworCQkJCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50LS07CisJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCQkJfQorCQl9CisJfQorCisJc3luY19ibG9ja2RldihiZGV2KTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKworCXJldHVybiBzYjsJLyogdGhhd19iZGV2IHJlbGVhc2VzIHMtPnNfdW1vdW50IGFuZCBiZF9tb3VudF9zZW0gKi8KK30KK0VYUE9SVF9TWU1CT0woZnJlZXplX2JkZXYpOworCisvKioKKyAqIHRoYXdfYmRldiAgLS0gdW5sb2NrIGZpbGVzeXN0ZW0KKyAqIEBiZGV2OglibG9ja2RldmljZSB0byB1bmxvY2sKKyAqIEBzYjoJCWFzc29jaWF0ZWQgc3VwZXJibG9jaworICoKKyAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBmcmVlemVfYmRldigpLgorICovCitpbnQgdGhhd19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGVycm9yID0gMDsKKworCW11dGV4X2xvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwlpZiAoIWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50KSB7CisJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudC0tOworCWlmIChiZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCA+IDApIHsKKwkJaWYgKHNiKQorCQkJZHJvcF9zdXBlcihzYik7CisJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2IpIHsKKwkJQlVHX09OKHNiLT5zX2JkZXYgIT0gYmRldik7CisJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkJaWYgKHNiLT5zX29wLT51bmZyZWV6ZV9mcykgeworCQkJCWVycm9yID0gc2ItPnNfb3AtPnVuZnJlZXplX2ZzKHNiKTsKKwkJCQlpZiAoZXJyb3IpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkiVkZTOkZpbGVzeXN0ZW0gdGhhdyBmYWlsZWRcbiIpOworCQkJCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfVFJBTlM7CisJCQkJCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50Kys7CisJCQkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQkJCQlyZXR1cm4gZXJyb3I7CisJCQkJfQorCQkJfQorCQkJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47CisJCQlzbXBfd21iKCk7CisJCQl3YWtlX3VwKCZzYi0+c193YWl0X3VuZnJvemVuKTsKKwkJfQorCQlkcm9wX3N1cGVyKHNiKTsKKwl9CisKKwl1cCgmYmRldi0+YmRfbW91bnRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGhhd19iZGV2KTsKKwogc3RhdGljIGludCBibGtkZXZfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIGJsa2Rldl9nZXRfYmxvY2ssIHdiYyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggM2UxODE3NS4uNmVjODBjMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRocmVzaCA9IDMyICogMTAyNCAqIDEwMjQ7CiAJdHJlZSA9ICZCVFJGU19JKHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlKS0+aW9fdHJlZTsKIAotCWlmIChjdXJyZW50X2lzX3BkZmx1c2goKSB8fCBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQorCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQogCQlyZXR1cm47CiAKIAludW1fZGlydHkgPSBjb3VudF9yYW5nZV9iaXRzKHRyZWUsICZzdGFydCwgKHU2NCktMSwKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggODkxZTFjNy4uYTJmZDc0MyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE2NiwxNTEgKzE2Niw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKLSAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCi0gKi8KLWludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoYmRldikKLQkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2KTsKLQotLyoKLSAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gKiBkZXZpY2UuICAgRmlsZXN5c3RlbSBkYXRhIGFzIHdlbGwgYXMgdGhlIHVuZGVybHlpbmcgYmxvY2sKLSAqIGRldmljZS4gIFRha2VzIHRoZSBzdXBlcmJsb2NrIGxvY2suCi0gKi8KLWludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihiZGV2KTsKLQlpZiAoc2IpIHsKLQkJaW50IHJlcyA9IGZzeW5jX3N1cGVyKHNiKTsKLQkJZHJvcF9zdXBlcihzYik7Ci0JCXJldHVybiByZXM7Ci0JfQotCXJldHVybiBzeW5jX2Jsb2NrZGV2KGJkZXYpOwotfQotCi0vKioKLSAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCi0gKiBAYmRldjoJYmxvY2tkZXZpY2UgdG8gbG9jawotICoKLSAqIFRoaXMgdGFrZXMgdGhlIGJsb2NrIGRldmljZSBiZF9tb3VudF9zZW0gdG8gbWFrZSBzdXJlIG5vIG5ldyBtb3VudHMKLSAqIGhhcHBlbiBvbiBiZGV2IHVudGlsIHRoYXdfYmRldigpIGlzIGNhbGxlZC4KLSAqIElmIGEgc3VwZXJibG9jayBpcyBmb3VuZCBvbiB0aGlzIGRldmljZSwgd2UgdGFrZSB0aGUgc191bW91bnQgc2VtYXBob3JlCi0gKiBvbiBpdCB0byBtYWtlIHN1cmUgbm9ib2R5IHVubW91bnRzIHVudGlsIHRoZSBzbmFwc2hvdCBjcmVhdGlvbiBpcyBkb25lLgotICogVGhlIHJlZmVyZW5jZSBjb3VudGVyIChiZF9mc2ZyZWV6ZV9jb3VudCkgZ3VhcmFudGVlcyB0aGF0IG9ubHkgdGhlIGxhc3QKLSAqIHVuZnJlZXplIHByb2Nlc3MgY2FuIHVuZnJlZXplIHRoZSBmcm96ZW4gZmlsZXN5c3RlbSBhY3R1YWxseSB3aGVuIG11bHRpcGxlCi0gKiBmcmVlemUgcmVxdWVzdHMgYXJyaXZlIHNpbXVsdGFuZW91c2x5LiBJdCBjb3VudHMgdXAgaW4gZnJlZXplX2JkZXYoKSBhbmQKLSAqIGNvdW50IGRvd24gaW4gdGhhd19iZGV2KCkuIFdoZW4gaXQgYmVjb21lcyAwLCB0aGF3X2JkZXYoKSB3aWxsIHVuZnJlZXplCi0gKiBhY3R1YWxseS4KLSAqLwotc3RydWN0IHN1cGVyX2Jsb2NrICpmcmVlemVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IGVycm9yID0gMDsKLQotCW11dGV4X2xvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQlpZiAoYmRldi0+YmRfZnNmcmVlemVfY291bnQgPiAwKSB7Ci0JCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50Kys7Ci0JCXNiID0gZ2V0X3N1cGVyKGJkZXYpOwotCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQkJcmV0dXJuIHNiOwotCX0KLQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCsrOwotCi0JZG93bigmYmRldi0+YmRfbW91bnRfc2VtKTsKLQlzYiA9IGdldF9zdXBlcihiZGV2KTsKLQlpZiAoc2IgJiYgIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKLQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1dSSVRFOwotCQlzbXBfd21iKCk7Ci0KLQkJX19mc3luY19zdXBlcihzYik7Ci0KLQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1RSQU5TOwotCQlzbXBfd21iKCk7Ci0KLQkJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQotCQlpZiAoc2ItPnNfb3AtPmZyZWV6ZV9mcykgewotCQkJZXJyb3IgPSBzYi0+c19vcC0+ZnJlZXplX2ZzKHNiKTsKLQkJCWlmIChlcnJvcikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiVkZTOkZpbGVzeXN0ZW0gZnJlZXplIGZhaWxlZFxuIik7Ci0JCQkJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47Ci0JCQkJZHJvcF9zdXBlcihzYik7Ci0JCQkJdXAoJmJkZXYtPmJkX21vdW50X3NlbSk7Ci0JCQkJYmRldi0+YmRfZnNmcmVlemVfY291bnQtLTsKLQkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQkJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzeW5jX2Jsb2NrZGV2KGJkZXYpOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCi0JcmV0dXJuIHNiOwkvKiB0aGF3X2JkZXYgcmVsZWFzZXMgcy0+c191bW91bnQgYW5kIGJkX21vdW50X3NlbSAqLwotfQotRVhQT1JUX1NZTUJPTChmcmVlemVfYmRldik7Ci0KLS8qKgotICogdGhhd19iZGV2ICAtLSB1bmxvY2sgZmlsZXN5c3RlbQotICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIHVubG9jawotICogQHNiOgkJYXNzb2NpYXRlZCBzdXBlcmJsb2NrCi0gKgotICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGZyZWV6ZV9iZGV2KCkuCi0gKi8KLWludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCi0JbXV0ZXhfbG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCWlmICghYmRldi0+YmRfZnNmcmVlemVfY291bnQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50LS07Ci0JaWYgKGJkZXYtPmJkX2ZzZnJlZXplX2NvdW50ID4gMCkgewotCQlpZiAoc2IpCi0JCQlkcm9wX3N1cGVyKHNiKTsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzYikgewotCQlCVUdfT04oc2ItPnNfYmRldiAhPSBiZGV2KTsKLQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCQlpZiAoc2ItPnNfb3AtPnVuZnJlZXplX2ZzKSB7Ci0JCQkJZXJyb3IgPSBzYi0+c19vcC0+dW5mcmVlemVfZnMoc2IpOwotCQkJCWlmIChlcnJvcikgewotCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJCSJWRlM6RmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxuIik7Ci0JCQkJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9UUkFOUzsKLQkJCQkJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCQkJCXJldHVybiBlcnJvcjsKLQkJCQl9Ci0JCQl9Ci0JCQlzYi0+c19mcm96ZW4gPSBTQl9VTkZST1pFTjsKLQkJCXNtcF93bWIoKTsKLQkJCXdha2VfdXAoJnNiLT5zX3dhaXRfdW5mcm96ZW4pOwotCQl9Ci0JCWRyb3Bfc3VwZXIoc2IpOwotCX0KLQotCXVwKCZiZGV2LT5iZF9tb3VudF9zZW0pOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTCh0aGF3X2JkZXYpOwotCi0vKgogICogVmFyaW91cyBmaWxlc3lzdGVtcyBhcHBlYXIgdG8gd2FudCBfX2ZpbmRfZ2V0X2Jsb2NrIHRvIGJlIG5vbi1ibG9ja2luZy4KICAqIEJ1dCBpdCdzIHRoZSBwYWdlIGxvY2sgd2hpY2ggcHJvdGVjdHMgdGhlIGJ1ZmZlcnMuICBUbyBnZXQgYXJvdW5kIHRoaXMsCiAgKiB3ZSBnZXQgZXhjbHVzaW9uIGZyb20gdHJ5X3RvX2ZyZWVfYnVmZmVycyB3aXRoIHRoZSBibG9ja2RldiBtYXBwaW5nJ3MKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA4NTEzODhmLi42NTk4NDAwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC02LDcgKzYsMTYgQEAKIGFyZSBhdXRoZW50aWNhdGVkIGFzIGd1ZXN0LCBhcyByZWNvbm5lY3Rpb25zLCBpbnZhbGlkYXRpbmcgdGhlIGVhcmxpZXIKIHVzZXIncyBzbWIgc2Vzc2lvbi4gIFRoaXMgZml4IGFsbG93cyBjaWZzIHRvIG1vdW50IG11bHRpcGxlIHRpbWVzIHRvIHRoZQogc2FtZSBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgdXNlcmlkcyB3aXRob3V0IHJpc2tpbmcgaW52YWxpZGF0aW5nIGVhcmxpZXIKLWVzdGFibGlzaGVkIHNlY3VyaXR5IGNvbnRleHRzLgorZXN0YWJsaXNoZWQgc2VjdXJpdHkgY29udGV4dHMuICBmc3luYyBub3cgc2VuZHMgU01CIEZsdXNoIG9wZXJhdGlvbgordG8gYmV0dGVyIGVuc3VyZSB0aGF0IHdlIHdhaXQgZm9yIHNlcnZlciB0byB3cml0ZSBhbGwgb2YgdGhlIGRhdGEgdG8KK3NlcnZlciBkaXNrIChub3QganVzdCB3cml0ZSBpdCBvdmVyIHRoZSBuZXR3b3JrKS4gIEFkZCBuZXcgbW91bnQKK3BhcmFtZXRlciB0byBhbGxvdyB1c2VyIHRvIGRpc2FibGUgc2VuZGluZyB0aGUgKHNsb3cpIFNNQiBmbHVzaCBvbgorZnN5bmMgaWYgZGVzaXJlZCAoZnN5bmMgc3RpbGwgZmx1c2hlcyBhbGwgY2FjaGVkIHdyaXRlIGRhdGEgdG8gdGhlIHNlcnZlcikuCitQb3NpeCBmaWxlIG9wZW4gc3VwcG9ydCBhZGRlZCAodHVybmVkIG9mZiBhZnRlciBvbmUgYXR0ZW1wdCBpZiBzZXJ2ZXIKK2ZhaWxzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHksIGFzIHdpdGggU2FtYmEgc2VydmVyIHZlcnNpb25zIHByaW9yIHRvIDMuMy4yKQorRml4ICJyZWR6b25lIG92ZXJ3cml0dGVuIiBidWcgaW4gY2lmc19wdXRfdGNvbiAoQ0lGU1Rjb24gbWF5IGFsbG9jYXRlIHRvbworbGl0dGxlIG1lbW9yeSBmb3IgdGhlICJuYXRpdmVGaWxlU3lzdGVtIiBmaWVsZCByZXR1cm5lZCBieSB0aGUgc2VydmVyCitkdXJpbmcgbW91bnQpLiAKIAogVmVyc2lvbiAxLjU2CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCAzNDFhOTg5Li42OTk0YTBmIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0xMTgsNiArMTE4LDE4IEBACiAJICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwogCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgQ0lGU19ERlNfVVBDQUxMCisJICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IgorCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKKwkgIGhlbHAKKwkgICAgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0gKERGUykgc3VwcG9ydCBpcyB1c2VkIHRvIGFjY2VzcyBzaGFyZXMKKwkgICAgdHJhbnNwYXJlbnRseSBpbiBhbiBlbnRlcnByaXNlIG5hbWUgc3BhY2UsIGV2ZW4gaWYgdGhlIHNoYXJlCisJICAgIG1vdmVzIHRvIGEgZGlmZmVyZW50IHNlcnZlci4gIFRoaXMgZmVhdHVyZSBhbHNvIGVuYWJsZXMKKwkgICAgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UgaGVscGVyCisJICAgIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KKwkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KKwkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQ0lGU19FWFBFUklNRU5UQUwKIAkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgogCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTApAQCAtMTMxLDEyICsxNDMsMyBAQAogCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQogCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIENJRlNfREZTX1VQQ0FMTAotCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKLQkgIGRlcGVuZHMgb24gS0VZUwotCSAgaGVscAotCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCi0JICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCi0JICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCi0JICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggZGE0NTE1ZS4uMDc0MzQxOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTQ3Miw2ICs0NzIsMTkgQEAKIAkJZXZlbiBpZiB0aGUgY2lmcyBzZXJ2ZXIgd291bGQgc3VwcG9ydCBwb3NpeCBhZHZpc29yeSBsb2Nrcy4KIAkJImZvcmNlbWFuZCIgaXMgYWNjZXB0ZWQgYXMgYSBzaG9ydGVyIGZvcm0gb2YgdGhpcyBtb3VudAogCQlvcHRpb24uCisgbm9zdHJpY3RzeW5jICAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgc2V0LCB3aGVuIGFuIGFwcGxpY2F0aW9uIGRvZXMgYW4KKwkJZnN5bmMgY2FsbCB0aGVuIHRoZSBjaWZzIGNsaWVudCBkb2VzIG5vdCBzZW5kIGFuIFNNQiBGbHVzaAorCQl0byB0aGUgc2VydmVyICh0byBmb3JjZSB0aGUgc2VydmVyIHRvIHdyaXRlIGFsbCBkaXJ0eSBkYXRhCisJCWZvciB0aGlzIGZpbGUgaW1tZWRpYXRlbHkgdG8gZGlzayksIGFsdGhvdWdoIGNpZnMgc3RpbGwgc2VuZHMKKwkJYWxsIGRpcnR5IChjYWNoZWQpIGZpbGUgZGF0YSB0byB0aGUgc2VydmVyIGFuZCB3YWl0cyBmb3IgdGhlCisJCXNlcnZlciB0byByZXNwb25kIHRvIHRoZSB3cml0ZS4gIFNpbmNlIFNNQiBGbHVzaCBjYW4gYmUKKwkJdmVyeSBzbG93LCBhbmQgc29tZSBzZXJ2ZXJzIG1heSBiZSByZWxpYWJsZSBlbm91Z2ggKHRvIHJpc2sKKwkJZGVsYXlpbmcgc2xpZ2h0bHkgZmx1c2hpbmcgdGhlIGRhdGEgdG8gZGlzayBvbiB0aGUgc2VydmVyKSwKKwkJdHVybmluZyBvbiB0aGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yCisJCWFwcGxpY2F0aW9ucyB0aGF0IGZzeW5jIHRvbyBtdWNoLCBhdCBhIHNtYWxsIHJpc2sgb2Ygc2VydmVyCisJCWNyYXNoLiAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgbm90IHNldCwgYnkgZGVmYXVsdCBjaWZzIHdpbGwKKwkJc2VuZCBhbiBTTUIgZmx1c2ggcmVxdWVzdCAoYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UpIG9uIGV2ZXJ5CisJCWZzeW5jIGNhbGwuCiAgbm9kZnMgICAgICAgICAgRGlzYWJsZSBERlMgKGdsb2JhbCBuYW1lIHNwYWNlIHN1cHBvcnQpIGV2ZW4gaWYgdGhlCiAJCXNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGhlbHAgd29yayBhcm91bmQKIAkJYSBwcm9ibGVtIHdpdGggcGFyc2luZyBvZiBERlMgcGF0aHMgd2l0aCBTYW1iYSBzZXJ2ZXIKQEAgLTY5MiwxMyArNzA1LDE0IEBACiBjaWZzLnVwY2FsbCBoZWxwZXIgcHJvZ3JhbSksIGluc3RlYWQgb2YgdXNpbmcgS2VyYmVyb3MsIGlzIHN1ZmZpY2llbnQgZm9yCiBzb21lIHVzZSBjYXNlcy4KIAotRW5hYmxpbmcgREZTIHN1cHBvcnQgKHVzZWQgdG8gYWNjZXNzIHNoYXJlcyB0cmFuc3BhcmVudGx5IGluIGFuIE1TLURGUwotZ2xvYmFsIG5hbWUgc3BhY2UpIHJlcXVpcmVzIHRoYXQgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGJlIGVuYWJsZWQuICBJbgotYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCitERlMgc3VwcG9ydCBhbGxvd3MgdHJhbnNwYXJlbnQgcmVkaXJlY3Rpb24gdG8gc2hhcmVzIGluIGFuIE1TLURGUyBuYW1lIHNwYWNlLgorSW4gYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCiBuYW1lcyB3aGljaCBiZWdpbiB3aXRoIGhvc3QgbmFtZXMgKHJhdGhlciB0aGFuIElQIGFkZHJlc3NlcykgcmVxdWlyZXMKIGEgdXNlciBzcGFjZSBoZWxwZXIgKHN1Y2ggYXMgY2lmcy51cGNhbGwpIHRvIGJlIHByZXNlbnQgaW4gb3JkZXIgdG8KIHRyYW5zbGF0ZSBob3N0IG5hbWVzIHRvIGlwIGFkZHJlc3MsIGFuZCB0aGUgdXNlciBzcGFjZSBoZWxwZXIgbXVzdCBhbHNvCi1iZSBjb25maWd1cmVkIGluIHRoZSBmaWxlIC9ldGMvcmVxdWVzdC1rZXkuY29uZgorYmUgY29uZmlndXJlZCBpbiB0aGUgZmlsZSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYuICBTYW1iYSwgV2luZG93cyBzZXJ2ZXJzIGFuZAorbWFueSBOQVMgYXBwbGlhbmNlcyBzdXBwb3J0IERGUyBhcyBhIHdheSBvZiBjb25zdHJ1Y3RpbmcgYSBnbG9iYWwgbmFtZQorc3BhY2UgdG8gZWFzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGltcHJvdmUgcmVsaWFiaWxpdHkuCiAKIFRvIHVzZSBjaWZzIEtlcmJlcm9zIGFuZCBERlMgc3VwcG9ydCwgdGhlIExpbnV4IGtleXV0aWxzIHBhY2thZ2Ugc2hvdWxkIGJlCiBpbnN0YWxsZWQgYW5kIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCA0OTBlMzRiLi44NzdlNGQ5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtMzQwLDYgKzM0MCw4IEBACiAJCQkJc2VxX3ByaW50ZihtLCAiXG5Xcml0ZXM6ICVkIEJ5dGVzOiAlbGxkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV93cml0ZXMpLAogCQkJCQkobG9uZyBsb25nKSh0Y29uLT5ieXRlc193cml0dGVuKSk7CisJCQkJc2VxX3ByaW50ZihtLCAiXG5GbHVzaGVzOiAlZCIsCisJCQkJCWF0b21pY19yZWFkKCZ0Y29uLT5udW1fZmx1c2hlcykpOwogCQkJCXNlcV9wcmludGYobSwgIlxuTG9ja3M6ICVkIEhhcmRMaW5rczogJWQgIgogCQkJCQkgICAgICAiU3ltbGlua3M6ICVkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV9sb2NrcyksCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA4NWMwYTc0Li41ZmRiZjhhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTEwNCw5ICsxMDQsOSBAQAogCiAKIC8qKgotICogY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKKyAqIGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKICAqIEBzYl9tb3VudGRhdGE6CXBhcmVudC9yb290IERGUyBtb3VudCBvcHRpb25zICh0ZW1wbGF0ZSkKLSAqIEBkZW50cnk6CQlwb2ludCB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW91bnQKKyAqIEBmdWxscGF0aDoJCWZ1bGwgcGF0aCBpbiBVTkMgZm9ybWF0CiAgKiBAcmVmOgkJc2VydmVyJ3MgcmVmZXJyYWwKICAqIEBkZXZuYW1lOgkJcG9pbnRlciBmb3Igc2F2aW5nIGRldmljZSBuYW1lCiAgKgpAQCAtMTE2LDggKzExNiw4IEBACiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIG5ldyBtb3VudCBvcHRpb25zIG9yIEVSUl9QVFIuCiAgKiBDYWxsZXIgaXMgcmVzcG9uY2libGUgZm9yIGZyZWVpbmcgcmV0dW5ybmVkIHZhbHVlIGlmIGl0IGlzIG5vdCBlcnJvci4KICAqLwotc3RhdGljIGNoYXIgKmNvbXBvc2VfbW91bnRfb3B0aW9ucyhjb25zdCBjaGFyICpzYl9tb3VudGRhdGEsCi0JCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorY2hhciAqY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKIAkJCQkgICBjaGFyICoqZGV2bmFtZSkKIHsKQEAgLTEyOCw3ICsxMjgsNiBAQAogCWNoYXIgKnNydklQID0gTlVMTDsKIAljaGFyIHNlcCA9ICcsJzsKIAlpbnQgb2ZmLCBub2ZmOwotCWNoYXIgKmZ1bGxwYXRoOwogCiAJaWYgKHNiX21vdW50ZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTIwMiwxNyArMjAxLDYgQEAKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwogCX0KIAotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyBhIHBhdGggd2l0aCBhIGRvdWJsZSBiYWNrc2xhc2ggcHJlZml4LiBXZQotCSAqIHJlcXVpcmUgYSBzaW5nbGUgYmFja3NsYXNoIGZvciBERlMuIFRlbXBvcmFyaWx5IGluY3JlbWVudCBmdWxscGF0aAotCSAqIHRvIHB1dCBpdCBpbiB0aGUgcHJvcGVyIGZvcm0gYW5kIGRlY3JlbWVudCBiZWZvcmUgZnJlZWluZyBpdC4KLQkgKi8KLQlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQlpZiAoIWZ1bGxwYXRoKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwotCX0KLQkrK2Z1bGxwYXRoOwogCXRrbl9lID0gc3RyY2hyKHRrbl9lICsgMSwgJ1xcJyk7CiAJaWYgKHRrbl9lIHx8IChzdHJsZW4oZnVsbHBhdGgpIC0gcmVmLT5wYXRoX2NvbnN1bWVkKSkgewogCQlzdHJuY2F0KG1vdW50ZGF0YSwgJnNlcCwgMSk7CkBAIC0yMjEsOCArMjA5LDYgQEAKIAkJCXN0cmNhdChtb3VudGRhdGEsIHRrbl9lICsgMSk7CiAJCXN0cmNhdChtb3VudGRhdGEsIGZ1bGxwYXRoICsgcmVmLT5wYXRoX2NvbnN1bWVkKTsKIAl9Ci0JLS1mdWxscGF0aDsKLQlrZnJlZShmdWxscGF0aCk7CiAKIAkvKmNGWUkoMSwoIiVzOiBwYXJlbnQgbW91bnRkYXRhOiAlcyIsIF9fZnVuY19fLHNiX21vdW50ZGF0YSkpOyovCiAJLypjRllJKDEsICgiJXM6IHN1Ym1vdW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXywgbW91bnRkYXRhICkpOyovCkBAIC0yNDUsMTAgKzIzMSwyMCBAQAogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCWNoYXIgKm1vdW50ZGF0YTsKIAljaGFyICpkZXZuYW1lID0gTlVMTDsKKwljaGFyICpmdWxscGF0aDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYik7Ci0JbW91bnRkYXRhID0gY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKLQkJCQkJCWRlbnRyeSwgcmVmLCAmZGV2bmFtZSk7CisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGdpdmVzIHVzIGEgcGF0aCB3aXRoIGEgZG91YmxlIGJhY2tzbGFzaCBwcmVmaXguIFdlCisJICogcmVxdWlyZSBhIHNpbmdsZSBiYWNrc2xhc2ggZm9yIERGUy4KKwkgKi8KKwlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKKwlpZiAoIWZ1bGxwYXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1vdW50ZGF0YSA9IGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKKwkJCWZ1bGxwYXRoICsgMSwgcmVmLCAmZGV2bmFtZSk7CisJa2ZyZWUoZnVsbHBhdGgpOwogCiAJaWYgKElTX0VSUihtb3VudGRhdGEpKQogCQlyZXR1cm4gKHN0cnVjdCB2ZnNtb3VudCAqKW1vdW50ZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19mc19zYi5oIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKaW5kZXggYzRjMzA2Zi4uNDc5Nzc4NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKKysrIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ0lGU19NT1VOVF9PVkVSUl9HSUQgICAgMHg4MDAgLyogb3ZlcnJpZGUgZ2lkIHJldHVybmVkIGZyb20gc2VydmVyICAgICovCiAjZGVmaW5lIENJRlNfTU9VTlRfRFlOUEVSTSAgICAgIDB4MTAwMCAvKiBhbGxvdyBpbi1tZW1vcnkgb25seSBtb2RlIHNldHRpbmcgICAqLwogI2RlZmluZSBDSUZTX01PVU5UX05PUE9TSVhCUkwgICAweDIwMDAgLyogbWFuZGF0b3J5IG5vdCBwb3NpeCBieXRlIHJhbmdlIGxvY2sgKi8KKyNkZWZpbmUgQ0lGU19NT1VOVF9OT1NTWU5DICAgICAgMHg0MDAwIC8qIGRvbid0IGRvIHNsb3cgU01CZmx1c2ggb24gZXZlcnkgc3luYyovCiAKIHN0cnVjdCBjaWZzX3NiX2luZm8gewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CS8qIHByaW1hcnkgbW91bnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDEzZWE1MzIuLjM4NDkxZmQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjA2LDcgKzYwNiw4IEBACiAJCXJldHVybiByYzsKIAl9CiAJc2ItPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgY2lmc19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggMmIxZDI4YS4uNzdlMTkwZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC03OCw4ICs3OCw4IEBACiBleHRlcm4gaW50IGNpZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZGlyZW50cnksIGZpbGxkaXJfdCBmaWxsZGlyKTsKIAogLyogRnVuY3Rpb25zIHJlbGF0ZWQgdG8gZGlyIGVudHJpZXMgKi8KLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19kZW50cnlfb3BzOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2NpX2RlbnRyeV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNpZnNfZGVudHJ5X29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19jaV9kZW50cnlfb3BzOwogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBzeW1saW5rcyAqLwogZXh0ZXJuIHZvaWQgKmNpZnNfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCBlMDA0ZjZkLi45ZmJmNGRmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0yNTQsNiArMjU0LDcgQEAKIAlhdG9taWNfdCBudW1fc21ic19zZW50OwogCWF0b21pY190IG51bV93cml0ZXM7CiAJYXRvbWljX3QgbnVtX3JlYWRzOworCWF0b21pY190IG51bV9mbHVzaGVzOwogCWF0b21pY190IG51bV9vcGxvY2tfYnJrczsKIAlhdG9taWNfdCBudW1fb3BlbnM7CiAJYXRvbWljX3QgbnVtX2Nsb3NlczsKQEAgLTI5OCw2ICsyOTksNyBAQAogCWJvb2wgdW5peF9leHQ6MTsgIC8qIGlmIGZhbHNlIGRpc2FibGUgTGludXggZXh0ZW5zaW9ucyB0byBDSUZTIHByb3RvY29sCiAJCQkJZm9yIHRoaXMgbW91bnQgZXZlbiBpZiBzZXJ2ZXIgd291bGQgc3VwcG9ydCAqLwogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIChvbmx5KSBvbiBsb2NhbCBzeXN0ZW0gbm90IHJlbW90ZSAqLworCWJvb2wgYnJva2VuX3Bvc2l4X29wZW47IC8qIGUuZy4gU2FtYmEgc2VydmVyIHZlcnNpb25zIDwgMy4zLjIsIDMuMi45ICovCiAJYm9vbCBuZWVkX3JlY29ubmVjdDoxOyAvKiBjb25uZWN0aW9uIHJlc2V0LCB0aWQgbm93IGludmFsaWQgKi8KIAkvKiBCQiBhZGQgZmllbGQgZm9yIGJhY2sgcG9pbnRlciB0byBzYiBzdHJ1Y3Qocyk/ICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNGUyZTlmMC4uYjM3MDQ4OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNwZHUuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA4CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgX0NJRlNQRFVfSAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlICJzbWJmc2N0bC5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICiAjZGVmaW5lIExBTk1BTl9QUk9UIDAKQEAgLTM0LDE1ICszNSwxNSBAQAogI2RlZmluZSBQT1NJWF9QUk9UICAoQ0lGU19QUk9UKzEpCiAjZGVmaW5lIEJBRF9QUk9UIDB4RkZGRgogCi0vKiBTTUIgY29tbWFuZCBjb2RlcyAqLwotLyoKLSAqIFNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcworLyogU01CIGNvbW1hbmQgY29kZXM6CisgKiBOb3RlIHNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcwogICogKGllIHdoaWNoIGluY2x1ZGUgbm8gdXNlZnVsIGRhdGEgb3RoZXIgdGhhbiB0aGUgU01CIGVycm9yIGNvZGUgaXRzZWxmKS4KLSAqIEtub3dpbmcgdGhpcyBoZWxwcyBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcworICogVGhpcyBjYW4gYWxsb3cgdXMgdG8gYXZvaWQgcmVzcG9uc2UgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5IGluIHNvbWUgY2FzZXMKICAqLwogI2RlZmluZSBTTUJfQ09NX0NSRUFURV9ESVJFQ1RPUlkgICAgICAweDAwIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9ERUxFVEVfRElSRUNUT1JZICAgICAgMHgwMSAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fQ0xPU0UgICAgICAgICAgICAgICAgIDB4MDQgLyogdHJpdiByZXEvcnNwLCB0aW1lc3RhbXAgaWdub3JlZCAqLworI2RlZmluZSBTTUJfQ09NX0ZMVVNIICAgICAgICAgICAgICAgICAweDA1IC8qIHRyaXYgcmVxL3JzcCAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURSAgICAgICAgICAgICAgICAweDA2IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9SRU5BTUUgICAgICAgICAgICAgICAgMHgwNyAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fUVVFUllfSU5GT1JNQVRJT04gICAgIDB4MDggLyogYWthIGdldGF0dHIgKi8KQEAgLTc5MCw2ICs3OTEsMTIgQEAKIAlfX3UxNiBCeXRlQ291bnQ7CS8qIGJjdCA9IDAgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQ0xPU0VfUlNQOwogCit0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2ZsdXNoX3JlcSB7CisJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAxICovCisJX191MTYgRmlsZUlEOworCV9fdTE2IEJ5dGVDb3VudDsJLyogMCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGTFVTSF9SRVE7CisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fZmluZGNsb3NlX3JlcSB7CiAJc3RydWN0IHNtYl9oZHIgaGRyOyAvKiB3Y3QgPSAxICovCiAJX191MTYgRmlsZUlEOwpAQCAtMTkyNCwxOSArMTkzMSwxOSBAQAogI2RlZmluZSBERlNfVFlQRV9ST09UIDB4MDAwMQogCiAvKiBSZWZlcnJhbCBFbnRyeSBGbGFncyAqLwotI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAKKyNkZWZpbmUgREZTX05BTUVfTElTVF9SRUYgMHgwMjAwIC8qIHNldCBmb3IgZG9tYWluIG9yIERDIHJlZmVycmFsIHJlc3BvbnNlcyAqLworI2RlZmluZSBERlNfVEFSR0VUX1NFVF9CT1VOREFSWSAweDA0MDAgLyogb25seSB2YWxpZCB3aXRoIHZlcnNpb24gNCBkZnMgcmVxICovCiAKLXR5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsKLQlfX2xlMTYgVmVyc2lvbk51bWJlcjsKK3R5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsgLyogdmVyc2lvbiA0IGlzIHNhbWUsICsgb25lIGZsYWcgYml0ICovCisJX19sZTE2IFZlcnNpb25OdW1iZXI7ICAvKiBtdXN0IGJlIDMgb3IgNCAqLwogCV9fbGUxNiBTaXplOwogCV9fbGUxNiBTZXJ2ZXJUeXBlOyAvKiAweDAwMDEgPSByb290IHRhcmdldHM7IDB4MDAwMCA9IGxpbmsgdGFyZ2V0cyAqLwotCV9fbGUxNiBSZWZlcnJhbEVudHJ5RmxhZ3M7IC8qIDB4MDIwMCBiaXQgc2V0IG9ubHkgZm9yIGRvbWFpbgotCQkJCSAgICAgIG9yIERDIHJlZmVycmFsIHJlc3BvbmNlICovCisJX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsKIAlfX2xlMzIgVGltZVRvTGl2ZTsKIAlfX2xlMTYgRGZzUGF0aE9mZnNldDsKIAlfX2xlMTYgRGZzQWx0ZXJuYXRlUGF0aE9mZnNldDsKIAlfX2xlMTYgTmV0d29ya0FkZHJlc3NPZmZzZXQ7IC8qIG9mZnNldCBvZiB0aGUgbGluayB0YXJnZXQgKi8KLQlfX2xlMTYgU2VydmljZVNpdGVHdWlkOworCV9fdTggICBTZXJ2aWNlU2l0ZUd1aWRbMTZdOyAgLyogTUJaLCBpZ25vcmVkICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFJFRkVSUkFMMzsKIAogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbl9nZXRfZGZzX3JlZmVyX3JzcCB7CkBAIC0xOTQ2LDQ4ICsxOTUzLDE1IEBACiAJX191OCBQYWQ7CiAJX19sZTE2IFBhdGhDb25zdW1lZDsKIAlfX2xlMTYgTnVtYmVyT2ZSZWZlcnJhbHM7Ci0JX19sZTE2IERGU0ZsYWdzOwotCV9fdTE2IFBhZDI7CisJX19sZTMyIERGU0ZsYWdzOwogCVJFRkVSUkFMMyByZWZlcnJhbHNbMV07CS8qIGFycmF5IG9mIGxldmVsIDMgZGZzX3JlZmVycmFsIHN0cnVjdHVyZXMgKi8KIAkvKiBmb2xsb3dlZCBieSB0aGUgc3RyaW5ncyBwb2ludGVkIHRvIGJ5IHRoZSByZWZlcnJhbCBzdHJ1Y3R1cmVzICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFRSQU5TQUNUSU9OMl9HRVRfREZTX1JFRkVSX1JTUDsKIAogLyogREZTIEZsYWdzICovCi0jZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMQotI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDIKLQotLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KLS8qCi0gKiBMaXN0IG9mIGlvY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgbG9vayB0byBiZSBvZiBpbnRlcmVzdCB0byByZW1vdGUgY2xpZW50cwotICogbGlrZSB0aGlzIG9uZS4gIE5lZWQgdG8gZG8gc29tZSBleHBlcmltZW50YXRpb24gdG8gbWFrZSBzdXJlIHRoZXkgYWxsIHdvcmsKLSAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKLSAqIHdvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKLSAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCi0gKi8KLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAotI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKLSNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4Ci0jZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQwotI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MKLSNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QwotI2RlZmluZSBGU0NUTF9GSUxFU1lTX0dFVF9TVEFUSVNUSUNTIDB4MDAwOTAwOTAKLSNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0Ci0jZGVmaW5lIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBOAotI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMKLSNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0Ci0jZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOAotI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgIDB4MDAwOTAwRDcKLSNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCCi0jZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERgotI2RlZmluZSBGU0NUTF9SRUFEX1JBV19FTkNSWVBURUQgICAgIDB4MDAwOTAwRTMKLSNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwCi0jZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAotCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMwotI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CisjZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMDAwMDEgLyogYWxsIHRhcmdldHMgYXJlIERGUyByb290cyAqLworI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDAwMDAyIC8qIG5vIGZ1cnRoZXIgcmVmIHJlcXVlc3RzIG5lZWRlZCAqLworI2RlZmluZSBERlNSRUZfVEFSR0VUX0ZBSUxCQUNLICAweDAwMDAwMDA0IC8qIG9ubHkgZm9yIERGUyByZWZlcnJhbCB2ZXJzaW9uIDQgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MDgsOCArMjQ4Miw2IEBACiAJNikgVXNlIG5hbm9zZWNvbmQgdGltZXN0YW1wcyB0aHJvdWdob3V0IGFsbCB0aW1lIGZpZWxkcyBpZgogCSAgIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZsYWcgaXMgc2V0CiAJNykgc2VuZGZpbGUgLSBoYW5kbGUgYmFzZWQgY29weQotCTgpIERpcmVjdCBpL28KLQk5KSBNaXNjIGZjbnRscz8KIAogCXdoYXQgYWJvdXQgZml4aW5nIDY0IGJpdCBhbGlnbm1lbnQKIApAQCAtMjYyOCw3ICsyNjAwLDUgQEAKIAlfX2xlNjQJbW9kZTsgLyogbGlzdCBvZiBhY3R1YWwgYXR0cmlidXRlIGJpdHMgb24gdGhpcyBpbm9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGSUxFX0NIQVRUUl9JTkZPOyAgLyogZXh0IGF0dHJpYnV0ZXMKIAkJCQkJCShjaGF0dHIsIGNoZmxhZ3MpIGxldmVsIDB4MjA2ICovCi0KLSNlbmRpZgotCisjZW5kaWYgCQkJCS8qIFBPU0lYICovCiAjZW5kaWYJCQkJLyogX0NJRlNQRFVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggMDgzZGZjNS4uNDE2NzcxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC00NCw2ICs0NCw5IEBACiBleHRlcm4gY2hhciAqYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGNoYXIgKmNpZnNfYnVpbGRfcGF0aF90b19yb290KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3dpbGRjYXJkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOworZXh0ZXJuIGNoYXIgKmNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKKwkJY29uc3QgY2hhciAqZnVsbHBhdGgsIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKKwkJY2hhciAqKmRldm5hbWUpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCkBAIC05Miw2ICs5NSw5IEBACiBleHRlcm4gX19sZTY0IGNudnJ0RG9zQ2lmc1RtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjbnZydERvc1VuaXhUbShfX3UxNiBkYXRlLCBfX3UxNiB0aW1lKTsKIAorZXh0ZXJuIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCisJCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKKwkJCSAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKIAkJCQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCBpc05ld0lub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0ICppbnVtKTsKQEAgLTI4MSw2ICsyODcsOSBAQAogZXh0ZXJuIGludCBDSUZTU01CQ2xvc2UoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CiAKK2V4dGVybiBpbnQgQ0lGU1NNQkZsdXNoKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisJCQljb25zdCBpbnQgc21iX2ZpbGVfaWQpOworCiBleHRlcm4gaW50IENJRlNTTUJSZWFkKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQljb25zdCBfX3U2NCBsc2VlaywgdW5zaWduZWQgaW50ICpuYnl0ZXMsIGNoYXIgKipidWYsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDkzOWUyZjcuLmJjMDljOTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xOTM0LDYgKzE5MzQsMjcgQEAKIH0KIAogaW50CitDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgaW50IHNtYl9maWxlX2lkKQoreworCWludCByYyA9IDA7CisJRkxVU0hfUkVRICpwU01CID0gTlVMTDsKKwljRllJKDEsICgiSW4gQ0lGU1NNQkZsdXNoIikpOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX0ZMVVNILCAxLCB0Y29uLCAodm9pZCAqKikgJnBTTUIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcFNNQi0+RmlsZUlEID0gKF9fdTE2KSBzbWJfZmlsZV9pZDsKKwlwU01CLT5CeXRlQ291bnQgPSAwOworCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOworCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZmx1c2hlcyk7CisJaWYgKHJjKQorCQljRVJST1IoMSwgKCJTZW5kIGVycm9yIGluIEZsdXNoID0gJWQiLCByYykpOworCisJcmV0dXJuIHJjOworfQorCitpbnQKIENJRlNTTUJSZW5hbWUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAogCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQpAQCAtMjM1Niw4ICsyMzc3LDEwIEBACiAJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW5dID0gMDsJLyogcGFkICovCi0JCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDA0OworCisJCS8qIHByb3RvY29sIHNwZWNpZmllcyBBU0NJSSBidWZmZXIgZm9ybWF0ICgweDA0KSBmb3IgdW5pY29kZSAqLworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAweDA0OworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDFdID0gMHgwMDsgLyogcGFkICovCiAJCW5hbWVfbGVuMiA9CiAJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwKIAkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCBkYTBmNGZmLi4wZGUzYjU2MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTk1LDYgKzk1LDcgQEAKIAlib29sIGxvY2FsX2xlYXNlOjE7IC8qIGNoZWNrIGxlYXNlcyBvbmx5IG9uIGxvY2FsIHN5c3RlbSwgbm90IHJlbW90ZSAqLwogCWJvb2wgbm9ibG9ja3NuZDoxOwogCWJvb2wgbm9hdXRvdHVuZToxOworCWJvb2wgbm9zdHJpY3RzeW5jOjE7IC8qIGRvIG5vdCBmb3JjZSBleHBlbnNpdmUgU01CZmx1c2ggb24gZXZlcnkgc3luYyAqLwogCXVuc2lnbmVkIGludCByc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd3NpemU7CiAJdW5zaWduZWQgaW50IHNvY2tvcHQ7CkBAIC0xMjc0LDYgKzEyNzUsMTAgQEAKIAkJCXZvbC0+aW50ciA9IDA7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImludHIiLCA0KSA9PSAwKSB7CiAJCQl2b2wtPmludHIgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3N0cmljdHN5bmMiLCAxMikgPT0gMCkgeworCQkJdm9sLT5ub3N0cmljdHN5bmMgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzdHJpY3RzeW5jIiwgMTApID09IDApIHsKKwkJCXZvbC0+bm9zdHJpY3RzeW5jID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic2VydmVyaW5vIiwgNykgPT0gMCkgewogCQkJdm9sLT5zZXJ2ZXJfaW5vID0gMTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9zZXJ2ZXJpbm8iLCA5KSA9PSAwKSB7CkBAIC0yMTYwLDYgKzIxNjUsOCBAQAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1VOWF9FTVVMOwogCWlmIChwdm9sdW1lX2luZm8tPm5vYnJsKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX05PX0JSTDsKKwlpZiAocHZvbHVtZV9pbmZvLT5ub3N0cmljdHN5bmMpCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9TU1lOQzsKIAlpZiAocHZvbHVtZV9pbmZvLT5tYW5kX2xvY2spCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9QT1NJWEJSTDsKIAlpZiAocHZvbHVtZV9pbmZvLT5jaWZzX2FjbCkKQEAgLTM2NjcsNyArMzY3NCw3IEBACiAJCQkgICAgQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CiAJCQkJa2ZyZWUodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSk7CiAJCQkJdGNvbi0+bmF0aXZlRmlsZVN5c3RlbSA9Ci0JCQkJICAgIGt6YWxsb2MobGVuZ3RoICsgMiwgR0ZQX0tFUk5FTCk7CisJCQkJICAgIGt6YWxsb2MoMioobGVuZ3RoICsgMSksIEdGUF9LRVJORUwpOwogCQkJCWlmICh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKQogCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoCiAJCQkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggODlmYjcyOC4uMmYzNWNjY2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJcmV0dXJuIGZ1bGxfcGF0aDsKIH0KIAotc3RhdGljIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCitpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAogCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGludCBvZmxhZ3MsCiAJCSAgICBpbnQgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQogewpAQCAtMTg3LDcgKzE4Nyw5IEBACiAJaWYgKCFwaW5vZGUpCiAJCWdvdG8gcG9zaXhfb3Blbl9yZXQ7IC8qIGNhbGxlciBkb2VzIG5vdCBuZWVkIGluZm8gKi8KIAotCSpwaW5vZGUgPSBjaWZzX25ld19pbm9kZShzYiwgJnByZXNwX2RhdGEtPlVuaXF1ZUlkKTsKKwlpZiAoKnBpbm9kZSA9PSBOVUxMKQorCQkqcGlub2RlID0gY2lmc19uZXdfaW5vZGUoc2IsICZwcmVzcF9kYXRhLT5VbmlxdWVJZCk7CisJLyogZWxzZSBhbiBpbm9kZSB3YXMgcGFzc2VkIGluLiBVcGRhdGUgaXRzIGluZm8sIGRvbid0IGNyZWF0ZSBvbmUgKi8KIAogCS8qIFdlIGRvIG5vdCBuZWVkIHRvIGNsb3NlIHRoZSBmaWxlIGlmIG5ld19pbm9kZSBmYWlscyBzaW5jZQogCSAgIHRoZSBjYWxsZXIgd2lsbCByZXRyeSBxcGF0aGluZm8gYXMgbG9uZyBhcyBpbm9kZSBpcyBudWxsICovCkBAIC02OTksNyArNzAxLDcgQEAKIAlyZXR1cm4gcmM7CiB9ICAgICAqLwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19kZW50cnlfb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNpZnNfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gY2lmc19kX3JldmFsaWRhdGUsCiAvKiBkX2RlbGV0ZTogICAgICAgY2lmc19kX2RlbGV0ZSwgICAgICAqLyAvKiBub3QgbmVlZGVkIGV4Y2VwdCBmb3IgZGVidWdnaW5nICovCiB9OwpAQCAtNzM3LDcgKzczOSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2NpX2RlbnRyeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19jaV9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBjaWZzX2RfcmV2YWxpZGF0ZSwKIAkuZF9oYXNoID0gY2lmc19jaV9oYXNoLAogCS5kX2NvbXBhcmUgPSBjaWZzX2NpX2NvbXBhcmUsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IDEyYmI2NTYuLjgxNzQ3YWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC03OCw4ICs3OCwzNiBAQAogCXJldHVybiAoUkVBRF9DT05UUk9MIHwgRklMRV9XUklURV9BVFRSSUJVVEVTIHwgRklMRV9SRUFEX0FUVFJJQlVURVMgfAogCQlGSUxFX1dSSVRFX0VBIHwgRklMRV9BUFBFTkRfREFUQSB8IEZJTEVfV1JJVEVfREFUQSB8CiAJCUZJTEVfUkVBRF9EQVRBKTsKK30KIAorc3RhdGljIGlubGluZSBmbW9kZV90IGNpZnNfcG9zaXhfY29udmVydF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJZm1vZGVfdCBwb3NpeF9mbGFncyA9IDA7CiAKKwlpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkKKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9SRUFEOworCWVsc2UgaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpCisJCXBvc2l4X2ZsYWdzID0gRk1PREVfV1JJVEU7CisJZWxzZSBpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JEV1IpIHsKKwkJLyogR0VORVJJQ19BTEwgaXMgdG9vIG11Y2ggcGVybWlzc2lvbiB0byByZXF1ZXN0CisJCSAgIGNhbiBjYXVzZSB1bm5lY2Vzc2FyeSBhY2Nlc3MgZGVuaWVkIG9uIGNyZWF0ZSAqLworCQkvKiByZXR1cm4gR0VORVJJQ19BTEw7ICovCisJCXBvc2l4X2ZsYWdzID0gRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFOworCX0KKwkvKiBjYW4gbm90IG1hcCBPX0NSRUFUIG9yIE9fRVhDTCBvciBPX1RSVU5DIGZsYWdzIHdoZW4KKwkgICByZW9wZW5pbmcgYSBmaWxlLiAgVGhleSBoYWQgdGhlaXIgZWZmZWN0IG9uIHRoZSBvcmlnaW5hbCBvcGVuICovCisJaWYgKGZsYWdzICYgT19BUFBFTkQpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fQVBQRU5EOworCWlmIChmbGFncyAmIE9fU1lOQykKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19TWU5DOworCWlmIChmbGFncyAmIE9fRElSRUNUT1JZKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX0RJUkVDVE9SWTsKKwlpZiAoZmxhZ3MgJiBPX05PRk9MTE9XKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX05PRk9MTE9XOworCWlmIChmbGFncyAmIE9fRElSRUNUKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX0RJUkVDVDsKKworCXJldHVybiBwb3NpeF9mbGFnczsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY2lmc19nZXRfZGlzcG9zaXRpb24odW5zaWduZWQgaW50IGZsYWdzKQpAQCAtOTcsNiArMTI1LDgwIEBACiB9CiAKIC8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLworc3RhdGljIGlubGluZSBpbnQgY2lmc19wb3NpeF9vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLAorCQkJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLCBpbnQgb3Bsb2NrLCB1MTYgbmV0ZmlkKQoreworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKKy8qCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOyAqLyAgIC8qIEJCIFJFTU9WRU1FIEJCICovCisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwQ2lmc0ZpbGUgPSBjaWZzX2luaXRfcHJpdmF0ZShmaWxlLT5wcml2YXRlX2RhdGEsIGlub2RlLCBmaWxlLCBuZXRmaWQpOworCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmY2lmc19zYi0+dGNvbi0+b3BlbkZpbGVMaXN0KTsKKworCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKHBDaWZzSW5vZGUgPT0gTlVMTCkgeworCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB3YW50IGhhbmRsZXMgd2UgY2FuIHVzZSB0byByZWFkIHdpdGggZmlyc3QKKwkgICBpbiB0aGUgbGlzdCBzbyB3ZSBkbyBub3QgaGF2ZSB0byB3YWxrIHRoZQorCSAgIGxpc3QgdG8gc2VhcmNoIGZvciBvbmUgaW4gd3JpdGVfYmVnaW4gKi8KKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7CisJCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCisJCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwl9IGVsc2UgeworCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwKKwkJCSAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwl9CisKKwlpZiAocENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKSB7CisJCS8qIHdlIGhhdmUgdGhlIGlub2RlIG9wZW4gc29tZXdoZXJlIGVsc2UKKwkJICAgbm8gbmVlZCB0byBkaXNjYXJkIGNhY2hlIGRhdGEgKi8KKwkJZ290byBwc3hfY2xpZW50X2Nhbl9jYWNoZTsKKwl9CisKKwkvKiBCQiBGSVhNRSBuZWVkIHRvIGZpeCB0aGlzIGNoZWNrIHRvIG1vdmUgaXQgZWFybGllciBpbnRvIHBvc2l4X29wZW4KKwkgICBCQiAgZklYIGZvbGxvd2luZyBzZWN0aW9uIEJCIEZJWE1FICovCisKKwkvKiBpZiBub3Qgb3Bsb2NrZWQsIGludmFsaWRhdGUgaW5vZGUgcGFnZXMgaWYgbXRpbWUgb3IgZmlsZQorCSAgIHNpemUgY2hhbmdlZCAqLworLyoJdGVtcCA9IGNpZnNfTlR0aW1lVG9Vbml4KGxlNjRfdG9fY3B1KGJ1Zi0+TGFzdFdyaXRlVGltZSkpOworCWlmICh0aW1lc3BlY19lcXVhbCgmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdGltZSwgJnRlbXApICYmCisJCQkgICAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID09CisJCQkgICAgKGxvZmZfdClsZTY0X3RvX2NwdShidWYtPkVuZE9mRmlsZSkpKSB7CisJCWNGWUkoMSwgKCJpbm9kZSB1bmNoYW5nZWQgb24gc2VydmVyIikpOworCX0gZWxzZSB7CisJCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmcpIHsKKwkJCXJjID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmcpOworCQkJaWYgKHJjICE9IDApCisJCQkJQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT53cml0ZV9iZWhpbmRfcmMgPSByYzsKKwkJfQorCQljRllJKDEsICgiaW52YWxpZGF0aW5nIHJlbW90ZSBpbm9kZSBzaW5jZSBvcGVuIGRldGVjdGVkIGl0ICIKKwkJCSAiY2hhbmdlZCIpKTsKKwkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJfSAqLworCitwc3hfY2xpZW50X2Nhbl9jYWNoZToKKwlpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX0VYQ0xVU0lWRSkgeworCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IHRydWU7CisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CisJCWNGWUkoMSwgKCJFeGNsdXNpdmUgT3Bsb2NrIGdyYW50ZWQgb24gaW5vZGUgJXAiLAorCQkJIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKKwl9IGVsc2UgaWYgKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19SRUFEKQorCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOworCisJLyogd2lsbCBoYXZlIHRvIGNoYW5nZSB0aGUgdW5sb2NrIGlmIHdlIHJlZW5hYmxlIHRoZQorCSAgIGZpbGVtYXBfZmRhdGF3cml0ZSAod2hpY2ggZG9lcyBub3Qgc2VlbSBuZWNlc3NhcnkgKi8KKwl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCXJldHVybiAwOworfQorCisvKiBhbGwgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBpbiBjYWxsZXIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGUsIHN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSwKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiwgaW50ICpvcGxvY2ssIEZJTEVfQUxMX0lORk8gKmJ1ZiwKQEAgLTE2Nyw3ICsyNjksNyBAQAogCWludCByYyA9IC1FQUNDRVM7CiAJaW50IHhpZCwgb3Bsb2NrOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGU7CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwpAQCAtMTgwLDcgKzI4Miw3IEBACiAJeGlkID0gR2V0WGlkKCk7CiAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7Ci0JcFRjb24gPSBjaWZzX3NiLT50Y29uOworCXRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0NSRUFUKSB7CiAJCS8qIHNlYXJjaCBpbm9kZSBmb3IgdGhpcyBmaWxlIGFuZCBmaWxsIGluIGZpbGUtPnByaXZhdGVfZGF0YSAqLwpAQCAtMjIwLDYgKzMyMiw0NSBAQAogCiAJY0ZZSSgxLCAoImlub2RlID0gMHglcCBmaWxlIGZsYWdzIGFyZSAweCV4IGZvciAlcyIsCiAJCSBpbm9kZSwgZmlsZS0+Zl9mbGFncywgZnVsbF9wYXRoKSk7CisKKwlpZiAob3Bsb2NrRW5hYmxlZCkKKwkJb3Bsb2NrID0gUkVRX09QTE9DSzsKKwllbHNlCisJCW9wbG9jayA9IDA7CisKKwlpZiAoIXRjb24tPmJyb2tlbl9wb3NpeF9vcGVuICYmIHRjb24tPnVuaXhfZXh0ICYmCisJICAgICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgorCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCisJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgeworCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJmlub2RlLCBpbm9kZS0+aV9zYiwKKwkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKKwkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWNGWUkoMSwgKCJwb3NpeCBvcGVuIHN1Y2NlZWRlZCIpKTsKKwkJCS8qIG5vIG5lZWQgZm9yIHNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiBzZXR0aW5nIG1vZGUKKwkJCSAgIG9uIHJlYWQgb25seSBmaWxlcyBuZWVkZWQgaGVyZSAqLworCisJCQljaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAorCQkJCQkJICAgICBwQ2lmc0ZpbGUsIG9wbG9jaywgbmV0ZmlkKTsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKChyYyA9PSAtRUlOVkFMKSB8fCAocmMgPT0gLUVPUE5PVFNVUFApKSB7CisJCQlpZiAodGNvbi0+c2VzLT5zZXJ2ZXJOT1MpCisJCQkJY0VSUk9SKDEsICgic2VydmVyICVzIG9mIHR5cGUgJXMgcmV0dXJuZWQiCisJCQkJCSAgICIgdW5leHBlY3RlZCBlcnJvciBvbiBTTUIgcG9zaXggb3BlbiIKKwkJCQkJICAgIiwgZGlzYWJsaW5nIHBvc2l4IG9wZW4gc3VwcG9ydC4iCisJCQkJCSAgICIgQ2hlY2sgaWYgc2VydmVyIHVwZGF0ZSBhdmFpbGFibGUuIiwKKwkJCQkJICAgdGNvbi0+c2VzLT5zZXJ2ZXJOYW1lLAorCQkJCQkgICB0Y29uLT5zZXMtPnNlcnZlck5PUykpOworCQkJdGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gPSB0cnVlOworCQl9IGVsc2UgaWYgKChyYyAhPSAtRUlPKSAmJiAocmMgIT0gLUVSRU1PVEUpICYmCisJCQkgKHJjICE9IC1FT1BOT1RTVVBQKSkgLyogcGF0aCBub3QgZm91bmQgb3IgbmV0IGVyciAqLworCQkJZ290byBvdXQ7CisJCS8qIGVsc2UgZmFsbHRocm91Z2ggdG8gcmV0cnkgb3BlbiB0aGUgb2xkIHdheSBvbiBuZXR3b3JrIGkvbworCQkgICBvciBERlMgZXJyb3JzICovCisJfQorCiAJZGVzaXJlZEFjY2VzcyA9IGNpZnNfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQ4LDExICszODksNiBAQAogCiAJZGlzcG9zaXRpb24gPSBjaWZzX2dldF9kaXNwb3NpdGlvbihmaWxlLT5mX2ZsYWdzKTsKIAotCWlmIChvcGxvY2tFbmFibGVkKQotCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwotCWVsc2UKLQkJb3Bsb2NrID0gMDsKLQogCS8qIEJCIHBhc3MgT19TWU5DIGZsYWcgdGhyb3VnaCBvbiBmaWxlIGF0dHJpYnV0ZXMgLi4gQkIgKi8KIAogCS8qIEFsc28gcmVmcmVzaCBpbm9kZSBieSBwYXNzaW5nIGluIGZpbGVfaW5mbyBidWYgcmV0dXJuZWQgYnkgU01CT3BlbgpAQCAtMjY5LDcgKzQwNSw3IEBACiAJfQogCiAJaWYgKGNpZnNfc2ItPnRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX05UX1NNQlMpCi0JCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKKwkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCiAJCQkgZGVzaXJlZEFjY2VzcywgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIGJ1ZiwKIAkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCiAJCQkJICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMjc4LDcgKzQxNCw3IEBACiAKIAlpZiAocmMgPT0gLUVJTykgewogCQkvKiBPbGQgc2VydmVyLCB0cnkgbGVnYWN5IHN0eWxlIE9wZW5YICovCi0JCXJjID0gU01CTGVnYWN5T3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAorCQlyYyA9IFNNQkxlZ2FjeU9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAogCQkJZGVzaXJlZEFjY2VzcywgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIGJ1ZiwKIAkJCWNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MKIAkJCQkmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTI5NSwxMiArNDMxLDEyIEBACiAJfQogCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7CiAJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZwVGNvbi0+b3BlbkZpbGVMaXN0KTsKKwlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnRjb24tPm9wZW5GaWxlTGlzdCk7CiAKIAlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWlmIChwQ2lmc0lub2RlKSB7CiAJCXJjID0gY2lmc19vcGVuX2lub2RlX2hlbHBlcihpbm9kZSwgZmlsZSwgcENpZnNJbm9kZSwKLQkJCQkJICAgIHBDaWZzRmlsZSwgcFRjb24sCisJCQkJCSAgICBwQ2lmc0ZpbGUsIHRjb24sCiAJCQkJCSAgICAmb3Bsb2NrLCBidWYsIGZ1bGxfcGF0aCwgeGlkKTsKIAl9IGVsc2UgewogCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwpAQCAtMzA5LDcgKzQ0NSw3IEBACiAJaWYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgewogCQkvKiB0aW1lIHRvIHNldCBtb2RlIHdoaWNoIHdlIGNhbiBub3Qgc2V0IGVhcmxpZXIgZHVlIHRvCiAJCSAgIHByb2JsZW1zIGNyZWF0aW5nIG5ldyByZWFkLW9ubHkgZmlsZXMgKi8KLQkJaWYgKHBUY29uLT51bml4X2V4dCkgeworCQlpZiAodGNvbi0+dW5peF9leHQpIHsKIAkJCXN0cnVjdCBjaWZzX3VuaXhfc2V0X2luZm9fYXJncyBhcmdzID0gewogCQkJCS5tb2RlCT0gaW5vZGUtPmlfbW9kZSwKIAkJCQkudWlkCT0gTk9fQ0hBTkdFXzY0LApAQCAtMzE5LDcgKzQ1NSw3IEBACiAJCQkJLm10aW1lCT0gTk9fQ0hBTkdFXzY0LAogCQkJCS5kZXZpY2UJPSAwLAogCQkJfTsKLQkJCUNJRlNTTUJVbml4U2V0SW5mbyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsICZhcmdzLAorCQkJQ0lGU1NNQlVuaXhTZXRJbmZvKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCAmYXJncywKIAkJCQkJICAgIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCQkJICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTM0OSw3ICs0ODUsNyBAQAogCWludCByYyA9IC1FQUNDRVM7CiAJaW50IHhpZCwgb3Bsb2NrOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGU7CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTM4Nyw3ICs1MjMsNyBAQAogCX0KIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKLQlwVGNvbiA9IGNpZnNfc2ItPnRjb247CisJdGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIC8qIGNhbiBub3QgZ3JhYiByZW5hbWUgc2VtIGhlcmUgYmVjYXVzZSB2YXJpb3VzIG9wcywgaW5jbHVkaW5nCiAgICB0aG9zZSB0aGF0IGFscmVhZHkgaGF2ZSB0aGUgcmVuYW1lIHNlbSBjYW4gZW5kIHVwIGNhdXNpbmcgd3JpdGVwYWdlCkBAIC00MDQsMjAgKzU0MCwzNyBAQAogCiAJY0ZZSSgxLCAoImlub2RlID0gMHglcCBmaWxlIGZsYWdzIDB4JXggZm9yICVzIiwKIAkJIGlub2RlLCBmaWxlLT5mX2ZsYWdzLCBmdWxsX3BhdGgpKTsKLQlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCiAJaWYgKG9wbG9ja0VuYWJsZWQpCiAJCW9wbG9jayA9IFJFUV9PUExPQ0s7CiAJZWxzZQogCQlvcGxvY2sgPSAwOwogCisJaWYgKHRjb24tPnVuaXhfZXh0ICYmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgorCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCisJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgeworCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgTlVMTCwgaW5vZGUtPmlfc2IsCisJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCisJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CisJCWlmIChyYyA9PSAwKSB7CisJCQljRllJKDEsICgicG9zaXggcmVvcGVuIHN1Y2NlZWRlZCIpKTsKKwkJCWdvdG8gcmVvcGVuX3N1Y2Nlc3M7CisJCX0KKwkJLyogZmFsbHRocm91Z2ggdG8gcmV0cnkgb3BlbiB0aGUgb2xkIHdheSBvbiBlcnJvcnMsIGVzcGVjaWFsbHkKKwkJICAgaW4gdGhlIHJlY29ubmVjdCBwYXRoIGl0IGlzIGltcG9ydGFudCB0byByZXRyeSBoYXJkICovCisJfQorCisJZGVzaXJlZEFjY2VzcyA9IGNpZnNfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKKwogCS8qIENhbiBub3QgcmVmcmVzaCBpbm9kZSBieSBwYXNzaW5nIGluIGZpbGVfaW5mbyBidWYgdG8gYmUgcmV0dXJuZWQKIAkgICBieSBTTUJPcGVuIGFuZCB0aGVuIGNhbGxpbmcgZ2V0X2lub2RlX2luZm8gd2l0aCByZXR1cm5lZCBidWYKIAkgICBzaW5jZSBmaWxlIG1pZ2h0IGhhdmUgd3JpdGUgYmVoaW5kIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBmbHVzaGVkCiAJICAgYW5kIHNlcnZlciB2ZXJzaW9uIG9mIGZpbGUgc2l6ZSBjYW4gYmUgc3RhbGUuIElmIHdlIGtuZXcgZm9yIHN1cmUKIAkgICB0aGF0IGlub2RlIHdhcyBub3QgZGlydHkgbG9jYWxseSB3ZSBjb3VsZCBkbyB0aGlzICovCiAKLQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sIGRlc2lyZWRBY2Nlc3MsCisJcmMgPSBDSUZTU01CT3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sIGRlc2lyZWRBY2Nlc3MsCiAJCQkgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIE5VTEwsCiAJCQkgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtNDI2LDYgKzU3OSw3IEBACiAJCWNGWUkoMSwgKCJjaWZzX29wZW4gcmV0dXJuZWQgMHgleCIsIHJjKSk7CiAJCWNGWUkoMSwgKCJvcGxvY2s6ICVkIiwgb3Bsb2NrKSk7CiAJfSBlbHNlIHsKK3Jlb3Blbl9zdWNjZXNzOgogCQlwQ2lmc0ZpbGUtPm5ldGZpZCA9IG5ldGZpZDsKIAkJcENpZnNGaWxlLT5pbnZhbGlkSGFuZGxlID0gZmFsc2U7CiAJCXVwKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7CkBAIC00MzksNyArNTkzLDcgQEAKIAkJCSAgIGdvIHRvIHNlcnZlciB0byBnZXQgaW5vZGUgaW5mbyAqLwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gZmFsc2U7CiAJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gZmFsc2U7Ci0JCQkJaWYgKHBUY29uLT51bml4X2V4dCkKKwkJCQlpZiAodGNvbi0+dW5peF9leHQpCiAJCQkJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mb191bml4KCZpbm9kZSwKIAkJCQkJCWZ1bGxfcGF0aCwgaW5vZGUtPmlfc2IsIHhpZCk7CiAJCQkJZWxzZQpAQCAtNDY3LDcgKzYyMSw2IEBACiAJCQljaWZzX3JlbG9ja19maWxlKHBDaWZzRmlsZSk7CiAJCX0KIAl9Ci0KIAlrZnJlZShmdWxsX3BhdGgpOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CkBAIC0xNTIzLDYgKzE2NzYsOSBAQAogewogCWludCB4aWQ7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKnNtYmZpbGUgPQorCQkoc3RydWN0IGNpZnNGaWxlSW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMTUzNCw3ICsxNjkwLDEyIEBACiAJaWYgKHJjID09IDApIHsKIAkJcmMgPSBDSUZTX0koaW5vZGUpLT53cml0ZV9iZWhpbmRfcmM7CiAJCUNJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IDA7CisJCXRjb24gPSBDSUZTX1NCKGlub2RlLT5pX3NiKS0+dGNvbjsKKwkJaWYgKCFyYyAmJiB0Y29uICYmIHNtYmZpbGUgJiYKKwkJICAgIShDSUZTX1NCKGlub2RlLT5pX3NiKS0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PU1NZTkMpKQorCQkJcmMgPSBDSUZTU01CRmx1c2goeGlkLCB0Y29uLCBzbWJmaWxlLT5uZXRmaWQpOwogCX0KKwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggNDY5MGEzNi4uYTg3OTdjYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtNzYzLDYgKzc2Myw5IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCUZJTEVfQkFTSUNfSU5GTwlpbmZvX2J1ZjsKIAorCWlmIChhdHRycyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChhdHRycy0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7CiAJCXNldF90aW1lID0gdHJ1ZTsKIAkJaW5mb19idWYuTGFzdEFjY2Vzc1RpbWUgPQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJmc2N0bC5oIGIvZnMvY2lmcy9zbWJmc2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTZiODkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL3NtYmZzY3RsLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICAgZnMvY2lmcy9zbWJmc2N0bC5oOiBTTUIsIENJRlMsIFNNQjIgRlNDVEwgZGVmaW5pdGlvbnMKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQorICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KKy8qCisgKiBMaXN0IG9mIGlvY3RsL2ZzY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgYXJlIG9yIGNvdWxkIGJlIHVzZWZ1bCBpbiB0aGUKKyAqIGZ1dHVyZSB0byByZW1vdGUgY2xpZW50cyBsaWtlIGNpZnMgb3IgU01CMiBjbGllbnQuICBUaGVyZSBpcyBwcm9iYWJseQorICogYSBzbGlnaHRseSBsYXJnZXIgc2V0IG9mIGZzY3RscyB0aGF0IE5URlMgbG9jYWwgZmlsZXN5c3RlbSBjb3VsZCBoYW5kbGUsCisgKiBpbmNsdWRpbmcgdGhlIHNldmVuIGJlbG93IHRoYXQgd2UgZG8gbm90IGhhdmUgc3RydWN0IGRlZmluaXRpb25zIGZvci4KKyAqIEV2ZW4gd2l0aCBwcm90b2NvbCBkZWZpbml0aW9ucyBmb3IgbW9zdCBvZiB0aGVzZSBub3cgYXZhaWxhYmxlLCB3ZSBzdGlsbAorICogbmVlZCB0byBkbyBzb21lIGV4cGVyaW1lbnRhdGlvbiB0byBpZGVudGlmeSB3aGljaCBhcmUgcHJhY3RpY2FsIHRvIGRvCisgKiByZW1vdGVseS4gIFNvbWUgb2YgdGhlIGZvbGxvd2luZywgc3VjaCBhcyB0aGUgZW5jcnlwdGlvbi9jb21wcmVzc2lvbiBvbmVzCisgKiBjb3VsZCBiZSBpbnZva2VkIGZyb20gdG9vbHMgdmlhIGEgc3BlY2lhbGl6ZWQgaG9vayBpbnRvIHRoZSBWRlMgcmF0aGVyCisgKiB0aGFuIHZpYSB0aGUgc3RhbmRhcmQgdmZzIGVudHJ5IHBvaW50cworICovCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzEgMHgwMDA5MDAwMAorI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8yIDB4MDAwOTAwMDQKKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9CQVRDSF9PUExPQ0sgICAweDAwMDkwMDA4CisjZGVmaW5lIEZTQ1RMX0xPQ0tfVk9MVU1FICAgICAgICAgICAgMHgwMDA5MDAxOAorI2RlZmluZSBGU0NUTF9VTkxPQ0tfVk9MVU1FICAgICAgICAgIDB4MDAwOTAwMUMKKyNkZWZpbmUgRlNDVExfSVNfUEFUSE5BTUVfVkFMSUQgICAgICAweDAwMDkwMDJDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDkwMDNDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfRkFUX0JQQiAgICAgICAgICAweDAwMDkwMDU4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKy8qIFZlcmlmeSB0aGUgbmV4dCBGU0NUTCBudW1iZXIsIHdlIGhhZCBpdCBhcyAweDAwMDkwMDkwIGJlZm9yZSAqLworI2RlZmluZSBGU0NUTF9GSUxFU1lTVEVNX0dFVF9TVEFUUyAgIDB4MDAwOTAwNjAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfTlRGU19WT0xVTUVfREFUQSAgIDB4MDAwOTAwNjQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfUkVUUklFVkFMX1BPSU5URVJTIDB4MDAwOTAwNzMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9JU19WT0xVTUVfRElSVFkgICAgICAgIDB4MDAwOTAwNzggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9BTExPV19FWFRFTkRFRF9EQVNEX0lPIDB4MDAwOTAwODMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9SRVFVRVNUX0ZJTFRFUl9PUExPQ0sgIDB4MDAwOTAwOEMKKyNkZWZpbmUgRlNDVExfRklORF9GSUxFU19CWV9TSUQgICAgICAweDAwMDkwMDhGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRCAgICAgICAgICAweDAwMDkwMDk4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX09CSkVDVF9JRCAgICAgICAgICAweDAwMDkwMDlDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfREVMRVRFX09CSkVDVF9JRCAgICAgICAweDAwMDkwMEEwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfREVMRVRFX1JFUEFSU0VfUE9JTlQgICAweDAwMDkwMEFDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRF9FWFRFTkRFRCAweDAwMDkwMEJDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfQ1JFQVRFX09SX0dFVF9PQkpFQ1RfSUQgMHgwMDA5MDBDMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9TUEFSU0UgICAgICAgICAgICAgMHgwMDA5MDBDNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9FTkNSWVBUSU9OICAgICAgICAgMHgwMDA5MDBENyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0VOQ1JZUFRJT05fRlNDVExfSU8gICAgMHgwMDA5MDBEQiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQURfUkFXX0VOQ1JZUFRFRCAgICAgMHgwMDA5MDBFMyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQURfRklMRV9VU05fREFUQSAgICAgMHgwMDA5MDBFQiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1VTTl9DTE9TRV9SRUNPUkQgMHgwMDA5MDBFRiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NJU19DT1BZRklMRSAgICAgICAgICAgMHgwMDA5MDEwMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQ0FMTF9GSUxFICAgICAgICAgICAgMHgwMDA5MDExNyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX1NQQVJJTkdfSU5GTyAgICAgMHgwMDA5MDEzOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX09OX0RFQUxMT0MgICAgMHgwMDA5MDE5NCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9TSE9SVF9OQU1FX0JFSEFWSU9SIDB4MDAwOTAxQjQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9BTExPQ0FURURfUkFOR0VTIDB4MDAwOTQwQ0YgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfREVGRUNUX01BTkFHRU1FTlQgIDB4MDAwOTgxMzQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TSVNfTElOS19GSUxFUyAgICAgICAgIDB4MDAwOUMxMDQKKyNkZWZpbmUgRlNDVExfUElQRV9QRUVLICAgICAgICAgICAgICAweDAwMTE0MDBDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUElQRV9UUkFOU0NFSVZFICAgICAgICAweDAwMTFDMDE3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKy8qIHN0cmFuZ2UgdGhhdCB0aGUgbnVtYmVyIGZvciB0aGlzIG9wIGlzIG5vdCBzZXF1ZW50aWFsIHdpdGggcHJldmlvdXMgb3AgKi8KKyNkZWZpbmUgRlNDVExfUElQRV9XQUlUICAgICAgICAgICAgICAweDAwMTEwMDE4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfTE1SX0dFVF9MSU5LX1RSQUNLX0lORiAweDAwMTQwMEU4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfTE1SX1NFVF9MSU5LX1RSQUNLX0lORiAweDAwMTQwMEVDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKworI2RlZmluZSBJT19SRVBBUlNFX1RBR19NT1VOVF9QT0lOVCAgIDB4QTAwMDAwMDMKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfSFNNICAgICAgICAgICAweEMwMDAwMDA0CisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX1NJUyAgICAgICAgICAgMHg4MDAwMDAwNwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9kaXIuYyBiL2ZzL2NvZGEvZGlyLmMKaW5kZXggNzViMWZhOS4uNGJiOWQwYSAxMDA2NDQKLS0tIGEvZnMvY29kYS9kaXIuYworKysgYi9mcy9jb2RhL2Rpci5jCkBAIC01OSw3ICs1OSw3IEBACiB9CiAjZGVmaW5lIENPREFfRUlPX0VSUk9SICgodm9pZCAqKSAoY29kYV9yZXR1cm5fRUlPKSkKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb2RhX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY29kYV9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IGNvZGFfZGVudHJ5X3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gY29kYV9kZW50cnlfZGVsZXRlLApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBkMDE0NWNhLi41NWVmZGZlIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMzc4LDYgKzM3OCwzNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoKKyAqIFRoaXMgaXMgYSBjb3B5IG9mIHN5c191c3RhdCwganVzdCBkZWFsaW5nIHdpdGggYSBzdHJ1Y3R1cmUgbGF5b3V0LgorICogR2l2ZW4gaG93IHNpbXBsZSB0aGlzIHN5c2NhbGwgaXMgdGhhdCBhcHBvcmFjaCBpcyBtb3JlIG1haW50YWluYWJsZQorICogdGhhbiB0aGUgdmFyaW91cyBjb252ZXJzaW9uIGhhY2tzLgorICovCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCBjb21wYXRfdXN0YXQgX191c2VyICp1KQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IGNvbXBhdF91c3RhdCB0bXA7CisJc3RydWN0IGtzdGF0ZnMgc2J1ZjsKKwlpbnQgZXJyOworCisJc2IgPSB1c2VyX2dldF9zdXBlcihuZXdfZGVjb2RlX2RldihkZXYpKTsKKwlpZiAoIXNiKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSB2ZnNfc3RhdGZzKHNiLT5zX3Jvb3QsICZzYnVmKTsKKwlkcm9wX3N1cGVyKHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZihzdHJ1Y3QgY29tcGF0X3VzdGF0KSk7CisJdG1wLmZfdGZyZWUgPSBzYnVmLmZfYmZyZWU7CisJdG1wLmZfdGlub2RlID0gc2J1Zi5mX2ZmcmVlOworCWlmIChjb3B5X3RvX3VzZXIodSwgJnRtcCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfdXN0YXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbXBhdF9mbG9jayhzdHJ1Y3QgZmxvY2sgKmtmbCwgc3RydWN0IGNvbXBhdF9mbG9jayBfX3VzZXIgKnVmbCkKIHsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdWZsLCBzaXplb2YoKnVmbCkpIHx8CkBAIC0xMzkyLDIyICsxNDIwLDI4IEBACiB7CiAJc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybTsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpkaXNwbGFjZWQ7CiAJaW50IHJldHZhbDsKIAorCXJldHZhbCA9IHVuc2hhcmVfZmlsZXMoJmRpc3BsYWNlZCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXRfcmV0OworCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtID0ga3phbGxvYyhzaXplb2YoKmJwcm0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJwcm0pCi0JCWdvdG8gb3V0X3JldDsKKwkJZ290byBvdXRfZmlsZXM7CiAKIAlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMTsKIAogCXJldHZhbCA9IC1FTk9NRU07CiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwogCWlmICghYnBybS0+Y3JlZCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0sIGN1cnJlbnQtPmZpbGVzKTsKKwljaGVja191bnNhZmVfZXhlYyhicHJtKTsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CkBAIC0xNDU0LDkgKzE0ODgsMTIgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwogCWZyZWVfYnBybShicHJtKTsKKwlpZiAoZGlzcGxhY2VkKQorCQlwdXRfZmlsZXNfc3RydWN0KGRpc3BsYWNlZCk7CiAJcmV0dXJuIHJldHZhbDsKIAogb3V0OgpAQCAtMTQ3MCwxMSArMTUwNywxNSBAQAogCX0KIAogb3V0X3VubG9jazoKKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAogb3V0X2ZyZWU6CiAJZnJlZV9icHJtKGJwcm0pOwogCitvdXRfZmlsZXM6CisJaWYgKGRpc3BsYWNlZCkKKwkJcmVzZXRfZmlsZXNfc3RydWN0KGRpc3BsYWNlZCk7CiBvdXRfcmV0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQ1ZTU5ZDMuLmZmNzg2NjggMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC01MjIsNiArNTIyLDExIEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgdWlmcjMyLCBzaXplb2YoKnVpZnIzMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmci5pZnJfZGF0YSA9IGNvbXBhdF9wdHIodWlmcjMyLT5pZnJfaWZydS5pZnJ1X2RhdGEpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgdWlmcjMyLCBzaXplb2YoKnVpZnIzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xOTkzLDYgKzE5OTgsOCBAQAogQ09NUEFUSUJMRV9JT0NUTChUVU5HRVRGRUFUVVJFUykKIENPTVBBVElCTEVfSU9DVEwoVFVOU0VUT0ZGTE9BRCkKIENPTVBBVElCTEVfSU9DVEwoVFVOU0VUVFhGSUxURVIpCitDT01QQVRJQkxFX0lPQ1RMKFRVTkdFVFNOREJVRikKK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUU05EQlVGKQogLyogQmlnIFYgKi8KIENPTVBBVElCTEVfSU9DVEwoVlRfU0VUTU9ERSkKIENPTVBBVElCTEVfSU9DVEwoVlRfR0VUTU9ERSkKQEAgLTI1NjYsNiArMjU3Myw3IEBACiBIQU5ETEVfSU9DVEwoU0lPQ0dJRkFERFIsIGRldl9pZnNpb2MpCiBIQU5ETEVfSU9DVEwoU0lPQ1NJRkFERFIsIGRldl9pZnNpb2MpCiBIQU5ETEVfSU9DVEwoU0lPQ1NJRkhXQlJPQURDQVNULCBkZXZfaWZzaW9jKQorSEFORExFX0lPQ1RMKFNJT0NTSFdUU1RBTVAsIGRldl9pZnNpb2MpCiAKIC8qIGlvY3RscyB1c2VkIGJ5IGFwcGxldGFsayBkZHAuYyAqLwogSEFORExFX0lPQ1RMKFNJT0NBVEFMS0RJRkFERFIsIGRldl9pZnNpb2MpCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDhlOTMzNDEuLjA1MzczZGIgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC03Miw3ICs3Miw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY29uZmlnZnNfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY29uZmlnZnNfZGVudHJ5X29wcyA9IHsKIAkuZF9pcHV0CQk9IGNvbmZpZ2ZzX2RfaXB1dCwKIAkvKiBzaW1wbGVfZGVsZXRlX2RlbnRyeSgpIGlzbid0IGV4cG9ydGVkICovCiAJLmRfZGVsZXRlCT0gY29uZmlnZnNfZF9kZWxldGUsCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDA3ZTJkNGEuLjkwYmJkN2UgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xMjQ3LDE1ICsxMjQ3LDE4IEBACiAJc3RydWN0IGRlbnRyeSAqZm91bmQ7CiAJc3RydWN0IGRlbnRyeSAqbmV3OwogCi0JLyogRG9lcyBhIGRlbnRyeSBtYXRjaGluZyB0aGUgbmFtZSBleGlzdCBhbHJlYWR5PyAqLworCS8qCisJICogRmlyc3QgY2hlY2sgaWYgYSBkZW50cnkgbWF0Y2hpbmcgdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMsCisJICogaWYgbm90IGdvIGFoZWFkIGFuZCBjcmVhdGUgaXQgbm93LgorCSAqLwogCWZvdW5kID0gZF9oYXNoX2FuZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCwgbmFtZSk7Ci0JLyogSWYgbm90LCBjcmVhdGUgaXQgbm93IGFuZCByZXR1cm4gKi8KIAlpZiAoIWZvdW5kKSB7CiAJCW5ldyA9IGRfYWxsb2MoZGVudHJ5LT5kX3BhcmVudCwgbmFtZSk7CiAJCWlmICghbmV3KSB7CiAJCQllcnJvciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KKwogCQlmb3VuZCA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBuZXcpOwogCQlpZiAoZm91bmQpIHsKIAkJCWRwdXQobmV3KTsKQEAgLTEyNjMsNjEgKzEyNjYsNDYgQEAKIAkJfQogCQlyZXR1cm4gbmV3OwogCX0KLQkvKiBNYXRjaGluZyBkZW50cnkgZXhpc3RzLCBjaGVjayBpZiBpdCBpcyBuZWdhdGl2ZS4gKi8KKworCS8qCisJICogSWYgYSBtYXRjaGluZyBkZW50cnkgZXhpc3RzLCBhbmQgaXQncyBub3QgbmVnYXRpdmUgdXNlIGl0LgorCSAqCisJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgdG8gYmFsYW5jZSB0aGUgaWdldCgpIGRvbmUKKwkgKiBlYXJsaWVyIG9uLgorCSAqLwogCWlmIChmb3VuZC0+ZF9pbm9kZSkgewogCQlpZiAodW5saWtlbHkoZm91bmQtPmRfaW5vZGUgIT0gaW5vZGUpKSB7CiAJCQkvKiBUaGlzIGNhbid0IGhhcHBlbiBiZWNhdXNlIGJhZCBpbm9kZXMgYXJlIHVuaGFzaGVkLiAqLwogCQkJQlVHX09OKCFpc19iYWRfaW5vZGUoaW5vZGUpKTsKIAkJCUJVR19PTighaXNfYmFkX2lub2RlKGZvdW5kLT5kX2lub2RlKSk7CiAJCX0KLQkJLyoKLQkJICogQWxyZWFkeSBoYXZlIHRoZSBpbm9kZSBhbmQgdGhlIGRlbnRyeSBhdHRhY2hlZCwgZGVjcmVtZW50Ci0JCSAqIHRoZSByZWZlcmVuY2UgY291bnQgdG8gYmFsYW5jZSB0aGUgaWdldCgpIGRvbmUKLQkJICogZWFybGllciBvbi4gIFdlIGZvdW5kIHRoZSBkZW50cnkgdXNpbmcgZF9sb29rdXAoKSBzbyBpdAotCQkgKiBjYW5ub3QgYmUgZGlzY29ubmVjdGVkIGFuZCB0aHVzIHdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5Ci0JCSAqIGFib3V0IGFueSBORlMvZGlzY29ubmVjdGVkbmVzcyBpc3N1ZXMgaGVyZS4KLQkJICovCiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gZm91bmQ7CiAJfQorCiAJLyoKIAkgKiBOZWdhdGl2ZSBkZW50cnk6IGluc3RhbnRpYXRlIGl0IHVubGVzcyB0aGUgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kCi0JICogaGFzIGEgJ2Rpc2Nvbm5lY3RlZCcgZGVudHJ5IChpLmUuIElTX1JPT1QgYW5kIERDQUNIRV9ESVNDT05ORUNURUQpLAotCSAqIGluIHdoaWNoIGNhc2UgZF9tb3ZlKCkgdGhhdCBpbiBwbGFjZSBvZiB0aGUgZm91bmQgZGVudHJ5LgorCSAqIGFscmVhZHkgaGFzIGEgZGVudHJ5LgogCSAqLwotCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkvKiBOb3QgYSBkaXJlY3Rvcnk7IGV2ZXJ5dGhpbmcgaXMgZWFzeS4gKi8KLQkJZF9pbnN0YW50aWF0ZShmb3VuZCwgaW5vZGUpOwotCQlyZXR1cm4gZm91bmQ7Ci0JfQogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKSB7Ci0JCS8qCi0JCSAqIERpcmVjdG9yeSB3aXRob3V0IGEgJ2Rpc2Nvbm5lY3RlZCcgZGVudHJ5OyB3ZSBuZWVkIHRvIGRvCi0JCSAqIGRfaW5zdGFudGlhdGUoKSBieSBoYW5kIGJlY2F1c2UgaXQgdGFrZXMgZGNhY2hlX2xvY2sgd2hpY2gKLQkJICogd2UgYWxyZWFkeSBob2xkLgotCQkgKi8KKwlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgbGlzdF9lbXB0eSgmaW5vZGUtPmlfZGVudHJ5KSkgewogCQlfX2RfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKIAkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShmb3VuZCwgaW5vZGUpOwogCQlyZXR1cm4gZm91bmQ7CiAJfQorCiAJLyoKLQkgKiBEaXJlY3Rvcnkgd2l0aCBhICdkaXNjb25uZWN0ZWQnIGRlbnRyeTsgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZQotCSAqICdkaXNjb25uZWN0ZWQnIGRlbnRyeS4KKwkgKiBJbiBjYXNlIGEgZGlyZWN0b3J5IGFscmVhZHkgaGFzIGEgKGRpc2Nvbm5lY3RlZCkgZW50cnkgZ3JhYiBhCisJICogcmVmZXJlbmNlIHRvIGl0LCBtb3ZlIGl0IGluIHBsYWNlIGFuZCB1c2UgaXQuCiAJICovCiAJbmV3ID0gbGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkubmV4dCwgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7CiAJZGdldF9sb2NrZWQobmV3KTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCS8qIERvIHNlY3VyaXR5IHZvZG9vLiAqLwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKLQkvKiBNb3ZlIG5ldyBpbiBwbGFjZSBvZiBmb3VuZC4gKi8KIAlkX21vdmUobmV3LCBmb3VuZCk7Ci0JLyogQmFsYW5jZSB0aGUgaWdldCgpIHdlIGRpZCBhYm92ZS4gKi8KIAlpcHV0KGlub2RlKTsKLQkvKiBUaHJvdyBhd2F5IGZvdW5kLiAqLwogCWRwdXQoZm91bmQpOwotCS8qIFVzZSBuZXcgYXMgdGhlIGFjdHVhbCBkZW50cnkuICovCiAJcmV0dXJuIG5ldzsKIAogZXJyX291dDoKZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggYmZmNDA1Mi4uNjNhNGE1OSAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTMyMiwxNzcgKzMyMiw4MSBAQAogfQogCiAvKgotICogU2FmZWx5IHBhcnNlIHRoZSBtb3VudCBvcHRpb25zIGluIEBkYXRhIGFuZCB1cGRhdGUgQG9wdHMuCisgKiBkZXZwdHNfZ2V0X3NiKCkKICAqCi0gKiBkZXZwdHMgZW5kcyB1cCBwYXJzaW5nIG9wdGlvbnMgdHdvIHRpbWVzIGR1cmluZyBtb3VudCwgZHVlIHRvIHRoZQotICogdHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBpdCBzdXBwb3J0cy4gVGhlIGZpcnN0IHBhcnNlIG9jY3VycyBpbgotICogZGV2cHRzX2dldF9zYigpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG1vZGUgKHNpbmdsZS1pbnN0YW5jZSBvcgotICogbXVsdGktaW5zdGFuY2UgbW9kZSkuIFRoZSBzZWNvbmQgcGFyc2UgaGFwcGVucyBpbiBkZXZwdHNfcmVtb3VudCgpCi0gKiBvciBuZXdfcHRzX21vdW50KCkgZGVwZW5kaW5nIG9uIHRoZSBtb2RlLgorICogICAgIElmIHRoZSAnLW8gbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiB3YXMgc3BlY2lmaWVkLCBtb3VudCBhIG5ldworICogICAgIChwcml2YXRlKSBpbnN0YW5jZSBvZiBkZXZwdHMuICBQVFlzIGNyZWF0ZWQgaW4gdGhpcyBpbnN0YW5jZSBhcmUKKyAqICAgICBpbmRlcGVuZGVudCBvZiB0aGUgUFRZcyBpbiBvdGhlciBkZXZwdHMgaW5zdGFuY2VzLgogICoKLSAqIFBhcnNpbmcgb2Ygb3B0aW9ucyBtb2RpZmllcyB0aGUgQGRhdGEgbWFraW5nIHN1YnNlcXVlbnQgcGFyc2luZwotICogaW5jb3JyZWN0LiBTbyBtYWtlIGEgbG9jYWwgY29weSBvZiBAZGF0YSBhbmQgcGFyc2UgaXQuCisgKiAgICAgSWYgdGhlICctbyBuZXdpbnN0YW5jZScgb3B0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLCBtb3VudC9yZW1vdW50IHRoZQorICogICAgIGluaXRpYWwga2VybmVsIG1vdW50IG9mIGRldnB0cy4gIFRoaXMgdHlwZSBvZiBtb3VudCBnaXZlcyB0aGUKKyAqICAgICBsZWdhY3ksIHNpbmdsZS1pbnN0YW5jZSBzZW1hbnRpY3MuCiAgKgotICogUmV0dXJuOiAwIE9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IHNhZmVfcGFyc2VfbW91bnRfb3B0aW9ucyh2b2lkICpkYXRhLCBzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHMpCi17Ci0JaW50IHJjOwotCXZvaWQgKmRhdGFjcDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBVc2Uga3N0cmR1cCgpID8gICovCi0JZGF0YWNwID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YWNwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhY3AsIGRhdGEsIFBBR0VfU0laRSk7Ci0JcmMgPSBwYXJzZV9tb3VudF9vcHRpb25zKChjaGFyICopZGF0YWNwLCBQQVJTRV9NT1VOVCwgb3B0cyk7Ci0Ja2ZyZWUoZGF0YWNwKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIE1vdW50IGEgbmV3IChwcml2YXRlKSBpbnN0YW5jZSBvZiBkZXZwdHMuICBQVFlzIGNyZWF0ZWQgaW4gdGhpcwotICogaW5zdGFuY2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBQVFlzIGluIG90aGVyIGRldnB0cyBpbnN0YW5jZXMuCi0gKi8KLXN0YXRpYyBpbnQgbmV3X3B0c19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQl2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpOwotCXN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0czsKLQotCWVyciA9IGdldF9zYl9ub2Rldihmc190eXBlLCBmbGFncywgZGF0YSwgZGV2cHRzX2ZpbGxfc3VwZXIsIG1udCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWZzaSA9IERFVlBUU19TQihtbnQtPm1udF9zYik7Ci0Jb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7Ci0KLQllcnIgPSBwYXJzZV9tb3VudF9vcHRpb25zKGRhdGEsIFBBUlNFX01PVU5ULCBvcHRzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw7Ci0KLQllcnIgPSBta25vZF9wdG14KG1udC0+bW50X3NiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlkcHV0KG1udC0+bW50X3NiLT5zX3Jvb3QpOwotCWRlYWN0aXZhdGVfc3VwZXIobW50LT5tbnRfc2IpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiAnbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiB3YXMgc3BlY2lmaWVkIGluIEBkYXRhLgorICogICAgIFRoZSAnbmV3aW5zdGFuY2UnIG9wdGlvbiBpcyBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBuYW1lc3BhY2UKKyAqICAgICBzZW1hbnRpY3MgaW4gZGV2cHRzIHdoaWxlIHByZXNlcnZpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiB0aGUKKyAqICAgICBjdXJyZW50ICdzaW5nbGUtbmFtZXNwYWNlJyBzZW1hbnRpY3MuIGkuZSBhbGwgbW91bnRzIG9mIGRldnB0cworICogICAgIHdpdGhvdXQgdGhlICduZXdpbnN0YW5jZScgbW91bnQgb3B0aW9uIHNob3VsZCBiaW5kIHRvIHRoZSBpbml0aWFsCisgKiAgICAga2VybmVsIG1vdW50LCBsaWtlIGdldF9zYl9zaW5nbGUoKS4KICAqCi0gKiBSZXR1cm46IC1lcnJubyAgCW9uIGVycm9yIChlZzogaW52YWxpZCBtb3VudCBvcHRpb25zIHNwZWNpZmllZCkKLSAqIAkgOiAxIAkJaWYgJ25ld2luc3RhbmNlJyBtb3VudCBvcHRpb24gd2FzIHNwZWNpZmllZAotICogCSA6IDAgCQlpZiAnbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiB3YXMgTk9UIHNwZWNpZmllZAotICovCi1zdGF0aWMgaW50IGlzX25ld19pbnN0YW5jZV9tb3VudCh2b2lkICpkYXRhKQotewotCWludCByYzsKLQlzdHJ1Y3QgcHRzX21vdW50X29wdHMgb3B0czsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlyYyA9IHNhZmVfcGFyc2VfbW91bnRfb3B0aW9ucyhkYXRhLCAmb3B0cyk7Ci0JaWYgKCFyYykKLQkJcmMgPSBvcHRzLm5ld2luc3RhbmNlOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogZ2V0X2luaXRfcHRzX3NiKCkKKyAqICAgICBNb3VudHMgd2l0aCAnbmV3aW5zdGFuY2UnIG9wdGlvbiBjcmVhdGUgYSBuZXcsIHByaXZhdGUgbmFtZXNwYWNlLgogICoKLSAqICAgICBUaGlzIGludGVyZmFjZSBpcyBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBuYW1lc3BhY2Ugc2VtYW50aWNzIGluCi0gKiAgICAgZGV2cHRzIHdoaWxlIHByZXNlcnZpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiB0aGUgY3VycmVudCAnc2luZ2xlLQotICogICAgIG5hbWVzcGFjZScgc2VtYW50aWNzLiBpLmUgYWxsIG1vdW50cyBvZiBkZXZwdHMgd2l0aG91dCB0aGUgJ25ld2luc3RhbmNlJwotICogICAgIG1vdW50IG9wdGlvbiBzaG91bGQgYmluZCB0byB0aGUgaW5pdGlhbCBrZXJuZWwgbW91bnQsIGxpa2UKLSAqICAgICBnZXRfc2Jfc2luZ2xlKCkuCisgKiAgICAgTk9URToKICAqCi0gKiAgICAgTW91bnRzIHdpdGggJ25ld2luc3RhbmNlJyBvcHRpb24gY3JlYXRlIGEgbmV3IHByaXZhdGUgbmFtZXNwYWNlLgotICoKLSAqICAgICBCdXQgZm9yIHNpbmdsZS1tb3VudCBzZW1hbnRpY3MsIGRldnB0cyBjYW5ub3QgdXNlIGdldF9zYl9zaW5nbGUoKSwKKyAqICAgICBGb3Igc2luZ2xlLW1vdW50IHNlbWFudGljcywgZGV2cHRzIGNhbm5vdCB1c2UgZ2V0X3NiX3NpbmdsZSgpLAogICogICAgIGJlY2F1c2UgZ2V0X3NiX3NpbmdsZSgpL3NnZXQoKSBmaW5kIGFuZCB1c2UgdGhlIHN1cGVyLWJsb2NrIGZyb20KICAqICAgICB0aGUgbW9zdCByZWNlbnQgbW91bnQgb2YgZGV2cHRzLiBCdXQgdGhhdCByZWNlbnQgbW91bnQgbWF5IGJlIGEKICAqICAgICAnbmV3aW5zdGFuY2UnIG1vdW50IGFuZCBnZXRfc2Jfc2luZ2xlKCkgd291bGQgcGljayB0aGUgbmV3aW5zdGFuY2UKICAqICAgICBzdXBlci1ibG9jayBpbnN0ZWFkIG9mIHRoZSBpbml0aWFsIHN1cGVyLWJsb2NrLgotICoKLSAqICAgICBUaGlzIGludGVyZmFjZSBpcyBpZGVudGljYWwgdG8gZ2V0X3NiX3NpbmdsZSgpIGV4Y2VwdCB0aGF0IGl0Ci0gKiAgICAgY29uc2lzdGVudGx5IHNlbGVjdHMgdGhlICdzaW5nbGUtbmFtZXNwYWNlJyBzdXBlcmJsb2NrIGV2ZW4gaW4gdGhlCi0gKiAgICAgcHJlc2VuY2Ugb2YgdGhlIHByaXZhdGUgbmFtZXNwYWNlIChpLmUgJ25ld2luc3RhbmNlJykgc3VwZXItYmxvY2tzLgogICovCi1zdGF0aWMgaW50IGdldF9pbml0X3B0c19zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQl2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3N0YXRpYyBpbnQgZGV2cHRzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7CiAJaW50IGVycm9yOworCXN0cnVjdCBwdHNfbW91bnRfb3B0cyBvcHRzOworCXN0cnVjdCBzdXBlcl9ibG9jayAqczsKIAotCXMgPSBzZ2V0KGZzX3R5cGUsIGNvbXBhcmVfaW5pdF9wdHNfc2IsIHNldF9hbm9uX3N1cGVyLCBOVUxMKTsKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJaWYgKGRhdGEpIHsKKwkJZXJyb3IgPSBwYXJzZV9tb3VudF9vcHRpb25zKGRhdGEsIFBBUlNFX01PVU5ULCAmb3B0cyk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAob3B0cy5uZXdpbnN0YW5jZSkKKwkJcyA9IHNnZXQoZnNfdHlwZSwgTlVMTCwgc2V0X2Fub25fc3VwZXIsIE5VTEwpOworCWVsc2UKKwkJcyA9IHNnZXQoZnNfdHlwZSwgY29tcGFyZV9pbml0X3B0c19zYiwgc2V0X2Fub25fc3VwZXIsIE5VTEwpOworCiAJaWYgKElTX0VSUihzKSkKIAkJcmV0dXJuIFBUUl9FUlIocyk7CiAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQlzLT5zX2ZsYWdzID0gZmxhZ3M7CiAJCWVycm9yID0gZGV2cHRzX2ZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7Ci0JCWlmIChlcnJvcikgewotCQkJdXBfd3JpdGUoJnMtPnNfdW1vdW50KTsKLQkJCWRlYWN0aXZhdGVfc3VwZXIocyk7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdW5kb19zZ2V0OwogCQlzLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsKIAl9Ci0JZG9fcmVtb3VudF9zYihzLCBmbGFncywgZGF0YSwgMCk7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisKKwlzaW1wbGVfc2V0X21udChtbnQsIHMpOworCisJbWVtY3B5KCYoREVWUFRTX1NCKHMpKS0+bW91bnRfb3B0cywgJm9wdHMsIHNpemVvZihvcHRzKSk7CisKKwllcnJvciA9IG1rbm9kX3B0bXgocyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9kcHV0OworCisJcmV0dXJuIDA7CisKK291dF9kcHV0OgorCWRwdXQocy0+c19yb290KTsKKworb3V0X3VuZG9fc2dldDoKKwl1cF93cml0ZSgmcy0+c191bW91bnQpOworCWRlYWN0aXZhdGVfc3VwZXIocyk7CisJcmV0dXJuIGVycm9yOwogfQogCi0vKgotICogTW91bnQgb3IgcmVtb3VudCB0aGUgaW5pdGlhbCBrZXJuZWwgbW91bnQgb2YgZGV2cHRzLiBUaGlzIHR5cGUgb2YKLSAqIG1vdW50IG1haW50YWlucyB0aGUgbGVnYWN5LCBzaW5nbGUtaW5zdGFuY2Ugc2VtYW50aWNzLCB3aGlsZSB0aGUKLSAqIGtlcm5lbCBzdGlsbCBhbGxvd3MgbXVsdGlwbGUtaW5zdGFuY2VzLgotICovCi1zdGF0aWMgaW50IGluaXRfcHRzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCi0JCXZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBnZXRfaW5pdF9wdHNfc2IoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIG1udCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IG1rbm9kX3B0bXgobW50LT5tbnRfc2IpOwotCWlmIChlcnIpIHsKLQkJZHB1dChtbnQtPm1udF9zYi0+c19yb290KTsKLQkJZGVhY3RpdmF0ZV9zdXBlcihtbnQtPm1udF9zYik7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkZXZwdHNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCWludCBuZXc7Ci0KLQluZXcgPSBpc19uZXdfaW5zdGFuY2VfbW91bnQoZGF0YSk7Ci0JaWYgKG5ldyA8IDApCi0JCXJldHVybiBuZXc7Ci0KLQlpZiAobmV3KQotCQlyZXR1cm4gbmV3X3B0c19tb3VudChmc190eXBlLCBmbGFncywgZGF0YSwgbW50KTsKLQotCXJldHVybiBpbml0X3B0c19tb3VudChmc190eXBlLCBmbGFncywgZGF0YSwgbW50KTsKLX0KICNlbHNlCiAvKgogICogVGhpcyBzdXBwb3J0cyBvbmx5IHRoZSBsZWdhY3kgc2luZ2xlLWluc3RhbmNlIHNlbWFudGljcyAobm8KZGlmZiAtLWdpdCBhL2ZzL2RsbS9kaXIuYyBiL2ZzL2RsbS9kaXIuYwppbmRleCA5Mjk2OWY4Li44NThmYmExIDEwMDY0NAotLS0gYS9mcy9kbG0vZGlyLmMKKysrIGIvZnMvZGxtL2Rpci5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogCWJ1Y2tldCA9IGRpcl9oYXNoKGxzLCBuYW1lLCBuYW1lbGVuKTsKIAotCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAogCWRlID0gc2VhcmNoX2J1Y2tldChscywgbmFtZSwgbmFtZWxlbiwgYnVja2V0KTsKIApAQCAtMTczLDcgKzE3Myw3IEBACiAJbGlzdF9kZWwoJmRlLT5saXN0KTsKIAlrZnJlZShkZSk7CiAgb3V0OgotCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiB9CiAKIHZvaWQgZGxtX2Rpcl9jbGVhcihzdHJ1Y3QgZGxtX2xzICpscykKQEAgLTE4NSwxNCArMTg1LDE0IEBACiAJRExNX0FTU0VSVChsaXN0X2VtcHR5KCZscy0+bHNfcmVjb3Zlcl9saXN0KSwgKTsKIAogCWZvciAoaSA9IDA7IGkgPCBscy0+bHNfZGlydGJsX3NpemU7IGkrKykgewotCQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOworCQlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CiAJCWhlYWQgPSAmbHMtPmxzX2RpcnRibFtpXS5saXN0OwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJCWRlID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgZGxtX2RpcmVudHJ5LCBsaXN0KTsKIAkJCWxpc3RfZGVsKCZkZS0+bGlzdCk7CiAJCQlwdXRfZnJlZV9kZShscywgZGUpOwogCQl9Ci0JCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CiAJfQogfQogCkBAIC0zMDcsMTcgKzMwNywxNyBAQAogCiAJYnVja2V0ID0gZGlyX2hhc2gobHMsIG5hbWUsIG5hbWVsZW4pOwogCi0Jd3JpdGVfbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCWRlID0gc2VhcmNoX2J1Y2tldChscywgbmFtZSwgbmFtZWxlbiwgYnVja2V0KTsKIAlpZiAoZGUpIHsKIAkJKnJfbm9kZWlkID0gZGUtPm1hc3Rlcl9ub2RlaWQ7Ci0JCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCQlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCQlpZiAoKnJfbm9kZWlkID09IG5vZGVpZCkKIAkJCXJldHVybiAtRUVYSVNUOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCiAJaWYgKG5hbWVsZW4gPiBETE1fUkVTTkFNRV9NQVhMRU4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzMwLDcgKzMzMCw3IEBACiAJZGUtPmxlbmd0aCA9IG5hbWVsZW47CiAJbWVtY3B5KGRlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAotCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAl0bXAgPSBzZWFyY2hfYnVja2V0KGxzLCBuYW1lLCBuYW1lbGVuLCBidWNrZXQpOwogCWlmICh0bXApIHsKIAkJa2ZyZWUoZGUpOwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmRlLT5saXN0LCAmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxpc3QpOwogCX0KIAkqcl9ub2RlaWQgPSBkZS0+bWFzdGVyX25vZGVpZDsKLQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9kbG0vZGxtX2ludGVybmFsLmggYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKaW5kZXggMDc2ZTg2Zi4uZDAxY2EwYSAxMDA2NDQKLS0tIGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCisrKyBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaApAQCAtOTksNyArOTksNyBAQAogCiBzdHJ1Y3QgZGxtX2RpcnRhYmxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jcndsb2NrX3QJCWxvY2s7CisJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKIHN0cnVjdCBkbG1fcnNidGFibGUgewpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suYyBiL2ZzL2RsbS9sb2NrLmMKaW5kZXggMDFlN2QzOS4uMjA1ZWM5NSAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suYworKysgYi9mcy9kbG0vbG9jay5jCkBAIC04MzUsNyArODM1LDcgQEAKIAkJbGtiLT5sa2Jfd2FpdF9jb3VudCsrOwogCQlob2xkX2xrYihsa2IpOwogCi0JCWxvZ19kZWJ1ZyhscywgImFkZCBvdmVybGFwICV4IGN1ciAlZCBuZXcgJWQgY291bnQgJWQgZmxhZ3MgJXgiLAorCQlsb2dfZGVidWcobHMsICJhZGR3YWl0ICV4IGN1ciAlZCBvdmVybGFwICVkIGNvdW50ICVkIGYgJXgiLAogCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2Jfd2FpdF90eXBlLCBtc3R5cGUsCiAJCQkgIGxrYi0+bGtiX3dhaXRfY291bnQsIGxrYi0+bGtiX2ZsYWdzKTsKIAkJZ290byBvdXQ7CkBAIC04NTEsNyArODUxLDcgQEAKIAlsaXN0X2FkZCgmbGtiLT5sa2Jfd2FpdF9yZXBseSwgJmxzLT5sc193YWl0ZXJzKTsKICBvdXQ6CiAJaWYgKGVycm9yKQotCQlsb2dfZXJyb3IobHMsICJhZGRfdG9fd2FpdGVycyAleCBlcnJvciAlZCBmbGFncyAleCAlZCAlZCAlcyIsCisJCWxvZ19lcnJvcihscywgImFkZHdhaXQgZXJyb3IgJXggJWQgZmxhZ3MgJXggJWQgJWQgJXMiLAogCQkJICBsa2ItPmxrYl9pZCwgZXJyb3IsIGxrYi0+bGtiX2ZsYWdzLCBtc3R5cGUsCiAJCQkgIGxrYi0+bGtiX3dhaXRfdHlwZSwgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKIAltdXRleF91bmxvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKQEAgLTg2MywyMyArODYzLDU1IEBACiAgICByZXF1ZXN0IHJlcGx5IG9uIHRoZSByZXF1ZXN0cXVldWUpIGJldHdlZW4gZGxtX3JlY292ZXJfd2FpdGVyc19wcmUoKSB3aGljaAogICAgc2V0IFJFU0VORCBhbmQgZGxtX3JlY292ZXJfd2FpdGVyc19wb3N0KCkgKi8KIAotc3RhdGljIGludCBfcmVtb3ZlX2Zyb21fd2FpdGVycyhzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgbXN0eXBlKQorc3RhdGljIGludCBfcmVtb3ZlX2Zyb21fd2FpdGVycyhzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgbXN0eXBlLAorCQkJCXN0cnVjdCBkbG1fbWVzc2FnZSAqbXMpCiB7CiAJc3RydWN0IGRsbV9scyAqbHMgPSBsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX2xzOwogCWludCBvdmVybGFwX2RvbmUgPSAwOwogCiAJaWYgKGlzX292ZXJsYXBfdW5sb2NrKGxrYikgJiYgKG1zdHlwZSA9PSBETE1fTVNHX1VOTE9DS19SRVBMWSkpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCB1bmxvY2tfcmVwbHkgb3ZlcmxhcCIsIGxrYi0+bGtiX2lkKTsKIAkJbGtiLT5sa2JfZmxhZ3MgJj0gfkRMTV9JRkxfT1ZFUkxBUF9VTkxPQ0s7CiAJCW92ZXJsYXBfZG9uZSA9IDE7CiAJCWdvdG8gb3V0X2RlbDsKIAl9CiAKIAlpZiAoaXNfb3ZlcmxhcF9jYW5jZWwobGtiKSAmJiAobXN0eXBlID09IERMTV9NU0dfQ0FOQ0VMX1JFUExZKSkgeworCQlsb2dfZGVidWcobHMsICJyZW13YWl0ICV4IGNhbmNlbF9yZXBseSBvdmVybGFwIiwgbGtiLT5sa2JfaWQpOwogCQlsa2ItPmxrYl9mbGFncyAmPSB+RExNX0lGTF9PVkVSTEFQX0NBTkNFTDsKIAkJb3ZlcmxhcF9kb25lID0gMTsKIAkJZ290byBvdXRfZGVsOwogCX0KIAorCS8qIENhbmNlbCBzdGF0ZSB3YXMgcHJlZW1wdGl2ZWx5IGNsZWFyZWQgYnkgYSBzdWNjZXNzZnVsIGNvbnZlcnQsCisJICAgc2VlIG5leHQgY29tbWVudCwgbm90aGluZyB0byBkby4gKi8KKworCWlmICgobXN0eXBlID09IERMTV9NU0dfQ0FOQ0VMX1JFUExZKSAmJgorCSAgICAobGtiLT5sa2Jfd2FpdF90eXBlICE9IERMTV9NU0dfQ0FOQ0VMKSkgeworCQlsb2dfZGVidWcobHMsICJyZW13YWl0ICV4IGNhbmNlbF9yZXBseSB3YWl0X3R5cGUgJWQiLAorCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2Jfd2FpdF90eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFJlbW92ZSBmb3IgdGhlIGNvbnZlcnQgcmVwbHksIGFuZCBwcmVtcHRpdmVseSByZW1vdmUgZm9yIHRoZQorCSAgIGNhbmNlbCByZXBseS4gIEEgY29udmVydCBoYXMgYmVlbiBncmFudGVkIHdoaWxlIHRoZXJlJ3Mgc3RpbGwKKwkgICBhbiBvdXRzdGFuZGluZyBjYW5jZWwgb24gaXQgKHRoZSBjYW5jZWwgaXMgbW9vdCBhbmQgdGhlIHJlc3VsdAorCSAgIGluIHRoZSBjYW5jZWwgcmVwbHkgc2hvdWxkIGJlIDApLiAgV2UgcHJlZW1wdCB0aGUgY2FuY2VsIHJlcGx5CisJICAgYmVjYXVzZSB0aGUgYXBwIGdldHMgdGhlIGNvbnZlcnQgcmVzdWx0IGFuZCB0aGVuIGNhbiBmb2xsb3cgdXAKKwkgICB3aXRoIGFub3RoZXIgb3AsIGxpa2UgY29udmVydC4gIFRoaXMgc3Vic2VxdWVudCBvcCB3b3VsZCBzZWUgdGhlCisJICAgbGluZ2VyaW5nIHN0YXRlIG9mIHRoZSBjYW5jZWwgYW5kIGZhaWwgd2l0aCAtRUJVU1kuICovCisKKwlpZiAoKG1zdHlwZSA9PSBETE1fTVNHX0NPTlZFUlRfUkVQTFkpICYmCisJICAgIChsa2ItPmxrYl93YWl0X3R5cGUgPT0gRExNX01TR19DT05WRVJUKSAmJgorCSAgICBpc19vdmVybGFwX2NhbmNlbChsa2IpICYmIG1zICYmICFtcy0+bV9yZXN1bHQpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCBjb252ZXJ0X3JlcGx5IHphcCBvdmVybGFwX2NhbmNlbCIsCisJCQkgIGxrYi0+bGtiX2lkKTsKKwkJbGtiLT5sa2Jfd2FpdF90eXBlID0gMDsKKwkJbGtiLT5sa2JfZmxhZ3MgJj0gfkRMTV9JRkxfT1ZFUkxBUF9DQU5DRUw7CisJCWxrYi0+bGtiX3dhaXRfY291bnQtLTsKKwkJZ290byBvdXRfZGVsOworCX0KKwogCS8qIE4uQi4gdHlwZSBvZiByZXBseSBtYXkgbm90IGFsd2F5cyBjb3JyZXNwb25kIHRvIHR5cGUgb2Ygb3JpZ2luYWwKIAkgICBtc2cgZHVlIHRvIGxvb2t1cC0+cmVxdWVzdCBvcHRpbWl6YXRpb24sIHZlcmlmeSBvdGhlcnM/ICovCiAKQEAgLTg4OCw4ICs5MjAsOCBAQAogCQlnb3RvIG91dF9kZWw7CiAJfQogCi0JbG9nX2Vycm9yKGxzLCAicmVtb3ZlX2Zyb21fd2FpdGVycyBsa2lkICV4IGZsYWdzICV4IHR5cGVzICVkICVkIiwKLQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfZmxhZ3MsIG1zdHlwZSwgbGtiLT5sa2Jfd2FpdF90eXBlKTsKKwlsb2dfZXJyb3IobHMsICJyZW13YWl0IGVycm9yICV4IHJlcGx5ICVkIGZsYWdzICV4IG5vIHdhaXRfdHlwZSIsCisJCSAgbGtiLT5sa2JfaWQsIG1zdHlwZSwgbGtiLT5sa2JfZmxhZ3MpOwogCXJldHVybiAtMTsKIAogIG91dF9kZWw6CkBAIC04OTksNyArOTMxLDcgQEAKIAkgICB0aGlzIHdvdWxkIGhhcHBlbiAqLwogCiAJaWYgKG92ZXJsYXBfZG9uZSAmJiBsa2ItPmxrYl93YWl0X3R5cGUpIHsKLQkJbG9nX2Vycm9yKGxzLCAicmVtb3ZlX2Zyb21fd2FpdGVycyAleCByZXBseSAlZCBnaXZlIHVwIG9uICVkIiwKKwkJbG9nX2Vycm9yKGxzLCAicmVtd2FpdCBlcnJvciAleCByZXBseSAlZCB3YWl0X3R5cGUgJWQgb3ZlcmxhcCIsCiAJCQkgIGxrYi0+bGtiX2lkLCBtc3R5cGUsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CiAJCWxrYi0+bGtiX3dhaXRfY291bnQtLTsKIAkJbGtiLT5sa2Jfd2FpdF90eXBlID0gMDsKQEAgLTkyMSw3ICs5NTMsNyBAQAogCWludCBlcnJvcjsKIAogCW11dGV4X2xvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKLQllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXN0eXBlKTsKKwllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXN0eXBlLCBOVUxMKTsKIAltdXRleF91bmxvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC05MzYsNyArOTY4LDcgQEAKIAogCWlmIChtcyAhPSAmbHMtPmxzX3N0dWJfbXMpCiAJCW11dGV4X2xvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKLQllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXMtPm1fdHlwZSk7CisJZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zLT5tX3R5cGUsIG1zKTsKIAlpZiAobXMgIT0gJmxzLT5sc19zdHViX21zKQogCQltdXRleF91bmxvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0yMDgzLDYgKzIxMTUsMTEgQEAKIAlsa2ItPmxrYl90aW1lb3V0X2NzID0gYXJncy0+dGltZW91dDsKIAlydiA9IDA7CiAgb3V0OgorCWlmIChydikKKwkJbG9nX2RlYnVnKGxzLCAidmFsaWRhdGVfbG9ja19hcmdzICVkICV4ICV4ICV4ICVkICVkICVzIiwKKwkJCSAgcnYsIGxrYi0+bGtiX2lkLCBsa2ItPmxrYl9mbGFncywgYXJncy0+ZmxhZ3MsCisJCQkgIGxrYi0+bGtiX3N0YXR1cywgbGtiLT5sa2Jfd2FpdF90eXBlLAorCQkJICBsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX25hbWUpOwogCXJldHVybiBydjsKIH0KIApAQCAtMjE0OSw2ICsyMTg2LDEzIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCisJCS8qIHRoZXJlJ3Mgbm90aGluZyB0byBjYW5jZWwgKi8KKwkJaWYgKGxrYi0+bGtiX3N0YXR1cyA9PSBETE1fTEtTVFNfR1JBTlRFRCAmJgorCQkgICAgIWxrYi0+bGtiX3dhaXRfdHlwZSkgeworCQkJcnYgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXN3aXRjaCAobGtiLT5sa2Jfd2FpdF90eXBlKSB7CiAJCWNhc2UgRExNX01TR19MT09LVVA6CiAJCWNhc2UgRExNX01TR19SRVFVRVNUOgpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2tzcGFjZS5jIGIvZnMvZGxtL2xvY2tzcGFjZS5jCmluZGV4IGFhMzJlNWYuLmNkOGUyZGYgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2Nrc3BhY2UuYworKysgYi9mcy9kbG0vbG9ja3NwYWNlLmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCQlnb3RvIG91dF9sa2JmcmVlOwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmxzLT5sc19kaXJ0YmxbaV0ubGlzdCk7Ci0JCXJ3bG9ja19pbml0KCZscy0+bHNfZGlydGJsW2ldLmxvY2spOworCQlzcGluX2xvY2tfaW5pdCgmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmbHMtPmxzX3dhaXRlcnMpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCAxMDNhNWViLi42MDkxMDhhIDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCiAqKiAgQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMjEsNyArMjEsNyBAQAogICoKICAqIENsdXN0ZXIgbm9kZXMgYXJlIHJlZmVycmVkIHRvIGJ5IHRoZWlyIG5vZGVpZHMuIG5vZGVpZHMgYXJlCiAgKiBzaW1wbHkgMzIgYml0IG51bWJlcnMgdG8gdGhlIGxvY2tpbmcgbW9kdWxlIC0gaWYgdGhleSBuZWVkIHRvCi0gKiBiZSBleHBhbmRlZCBmb3IgdGhlIGNsdXN0ZXIgaW5mcmFzdHJ1Y3R1cmUgdGhlbiB0aGF0IGlzIGl0J3MKKyAqIGJlIGV4cGFuZGVkIGZvciB0aGUgY2x1c3RlciBpbmZyYXN0cnVjdHVyZSB0aGVuIHRoYXQgaXMgaXRzCiAgKiByZXNwb25zaWJpbGl0eS4gSXQgaXMgdGhpcyBsYXllcidzCiAgKiByZXNwb25zaWJpbGl0eSB0byByZXNvbHZlIHRoZXNlIGludG8gSVAgYWRkcmVzcyBvcgogICogd2hhdGV2ZXIgaXQgbmVlZHMgZm9yIGludGVyLW5vZGUgY29tbXVuaWNhdGlvbi4KQEAgLTM2LDkgKzM2LDkgQEAKICAqIG9mIGhpZ2ggbG9hZC4gQWxzbywgdGhpcyB3YXksIHRoZSBzZW5kaW5nIHRocmVhZCBjYW4gY29sbGVjdCB0b2dldGhlcgogICogbWVzc2FnZXMgYm91bmQgZm9yIG9uZSBub2RlIGFuZCBzZW5kIHRoZW0gaW4gb25lIGJsb2NrLgogICoKLSAqIGxvd2NvbW1zIHdpbGwgY2hvb3NlIHRvIHVzZSB3aXRoZXIgVENQIG9yIFNDVFAgYXMgaXRzIHRyYW5zcG9ydCBsYXllcgorICogbG93Y29tbXMgd2lsbCBjaG9vc2UgdG8gdXNlIGVpdGhlciBUQ1Agb3IgU0NUUCBhcyBpdHMgdHJhbnNwb3J0IGxheWVyCiAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ3Byb3RvY29sJy4gVGhpcyBzaG91bGQgYmUgc2V0Ci0gKiB0byAwIChkZWZhdWx0KSBmb3IgVENQIG9yIDEgZm9yIFNDVFAuIEl0IHNob3VsZGJlIGNvbmZpZ3VyZWQgdXNpbmcgYQorICogdG8gMCAoZGVmYXVsdCkgZm9yIFRDUCBvciAxIGZvciBTQ1RQLiBJdCBzaG91bGQgYmUgY29uZmlndXJlZCB1c2luZyBhCiAgKiBjbHVzdGVyLXdpZGUgbWVjaGFuaXNtIGFzIGl0IG11c3QgYmUgdGhlIHNhbWUgb24gYWxsIG5vZGVzIG9mIHRoZSBjbHVzdGVyCiAgKiBmb3IgdGhlIERMTSB0byBmdW5jdGlvbi4KICAqCkBAIC00OCwxMSArNDgsMTEgQEAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2N0cC5oPgogI2luY2x1ZGUgPG5ldC9zY3RwL3VzZXIuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogCiAjaW5jbHVkZSAiZGxtX2ludGVybmFsLmgiCiAjaW5jbHVkZSAibG93Y29tbXMuaCIKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2RlZmluZSBORUVERURfUk1FTSAoNCoxMDI0KjEwMjQpCisjZGVmaW5lIENPTk5fSEFTSF9TSVpFIDMyCiAKIHN0cnVjdCBjYnVmIHsKIAl1bnNpZ25lZCBpbnQgYmFzZTsKQEAgLTExNCw2ICsxMTUsNyBAQAogCWludCByZXRyaWVzOwogI2RlZmluZSBNQVhfQ09OTkVDVF9SRVRSSUVTIDMKIAlpbnQgc2N0cF9hc3NvYzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OwogCXN0cnVjdCBjb25uZWN0aW9uICpvdGhlcmNvbjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcndvcms7IC8qIFJlY2VpdmUgd29ya3F1ZXVlICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHN3b3JrOyAvKiBTZW5kIHdvcmtxdWV1ZSAqLwpAQCAtMTM4LDE0ICsxNDAsMzcgQEAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVjdl93b3JrcXVldWU7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlbmRfd29ya3F1ZXVlOwogCi1zdGF0aWMgREVGSU5FX0lEUihjb25uZWN0aW9uc19pZHIpOworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGNvbm5lY3Rpb25faGFzaFtDT05OX0hBU0hfU0laRV07CiBzdGF0aWMgREVGSU5FX01VVEVYKGNvbm5lY3Rpb25zX2xvY2spOwotc3RhdGljIGludCBtYXhfbm9kZWlkOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpjb25fY2FjaGU7CiAKIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVjdl9zb2NrZXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3NlbmRfc29ja2V0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCisKKy8qIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltcGxlIGJlY2F1c2UgbW9zdCBjbHVzdGVycyBoYXZlIHNpbXBsZQorICAgc2VxdWVudGlhbCBub2RlaWRzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBnbyBzdHJhaWdodCB0byBhIGNvbm5lY3Rpb24KKyAgIHN0cnVjdCBpbiB0aGUgYXJyYXkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5vZGVpZF9oYXNoKGludCBub2RlaWQpCit7CisJcmV0dXJuIG5vZGVpZCAmIChDT05OX0hBU0hfU0laRS0xKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25uZWN0aW9uICpfX2ZpbmRfY29uKGludCBub2RlaWQpCit7CisJaW50IHI7CisJc3RydWN0IGhsaXN0X25vZGUgKmg7CisJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKKworCXIgPSBub2RlaWRfaGFzaChub2RlaWQpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29uLCBoLCAmY29ubmVjdGlvbl9oYXNoW3JdLCBsaXN0KSB7CisJCWlmIChjb24tPm5vZGVpZCA9PSBub2RlaWQpCisJCQlyZXR1cm4gY29uOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqIElmICdhbGxvY2F0aW9uJyBpcyB6ZXJvIHRoZW4gd2UgZG9uJ3QgYXR0ZW1wdCB0byBjcmVhdGUgYSBuZXcKICAqIGNvbm5lY3Rpb24gc3RydWN0dXJlIGZvciB0aGlzIG5vZGUuCkBAIC0xNTQsMzEgKzE3OSwxNyBAQAogewogCXN0cnVjdCBjb25uZWN0aW9uICpjb24gPSBOVUxMOwogCWludCByOwotCWludCBuOwogCi0JY29uID0gaWRyX2ZpbmQoJmNvbm5lY3Rpb25zX2lkciwgbm9kZWlkKTsKKwljb24gPSBfX2ZpbmRfY29uKG5vZGVpZCk7CiAJaWYgKGNvbiB8fCAhYWxsb2MpCiAJCXJldHVybiBjb247CiAKLQlyID0gaWRyX3ByZV9nZXQoJmNvbm5lY3Rpb25zX2lkciwgYWxsb2MpOwotCWlmICghcikKLQkJcmV0dXJuIE5VTEw7Ci0KIAljb24gPSBrbWVtX2NhY2hlX3phbGxvYyhjb25fY2FjaGUsIGFsbG9jKTsKIAlpZiAoIWNvbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlyID0gaWRyX2dldF9uZXdfYWJvdmUoJmNvbm5lY3Rpb25zX2lkciwgY29uLCBub2RlaWQsICZuKTsKLQlpZiAocikgewotCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobiAhPSBub2RlaWQpIHsKLQkJaWRyX3JlbW92ZSgmY29ubmVjdGlvbnNfaWRyLCBuKTsKLQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCXIgPSBub2RlaWRfaGFzaChub2RlaWQpOworCWhsaXN0X2FkZF9oZWFkKCZjb24tPmxpc3QsICZjb25uZWN0aW9uX2hhc2hbcl0pOwogCiAJY29uLT5ub2RlaWQgPSBub2RlaWQ7CiAJbXV0ZXhfaW5pdCgmY29uLT5zb2NrX211dGV4KTsKQEAgLTE4OSwxOSArMjAwLDMwIEBACiAKIAkvKiBTZXR1cCBhY3Rpb24gcG9pbnRlcnMgZm9yIGNoaWxkIHNvY2tldHMgKi8KIAlpZiAoY29uLT5ub2RlaWQpIHsKLQkJc3RydWN0IGNvbm5lY3Rpb24gKnplcm9jb24gPSBpZHJfZmluZCgmY29ubmVjdGlvbnNfaWRyLCAwKTsKKwkJc3RydWN0IGNvbm5lY3Rpb24gKnplcm9jb24gPSBfX2ZpbmRfY29uKDApOwogCiAJCWNvbi0+Y29ubmVjdF9hY3Rpb24gPSB6ZXJvY29uLT5jb25uZWN0X2FjdGlvbjsKIAkJaWYgKCFjb24tPnJ4X2FjdGlvbikKIAkJCWNvbi0+cnhfYWN0aW9uID0gemVyb2Nvbi0+cnhfYWN0aW9uOwogCX0KIAotCWlmIChub2RlaWQgPiBtYXhfbm9kZWlkKQotCQltYXhfbm9kZWlkID0gbm9kZWlkOwotCiAJcmV0dXJuIGNvbjsKIH0KIAorLyogTG9vcCByb3VuZCBhbGwgY29ubmVjdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGZvcmVhY2hfY29ubih2b2lkICgqY29ubl9mdW5jKShzdHJ1Y3QgY29ubmVjdGlvbiAqYykpCit7CisJaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKmgsICpuOworCXN0cnVjdCBjb25uZWN0aW9uICpjb247CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09OTl9IQVNIX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbiwgaCwgbiwgJmNvbm5lY3Rpb25faGFzaFtpXSwgbGlzdCl7CisJCQljb25uX2Z1bmMoY29uKTsKKwkJfQorCX0KK30KKwogc3RhdGljIHN0cnVjdCBjb25uZWN0aW9uICpub2RlaWQyY29uKGludCBub2RlaWQsIGdmcF90IGFsbG9jYXRpb24pCiB7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKQEAgLTIxNywxNCArMjM5LDE3IEBACiBzdGF0aWMgc3RydWN0IGNvbm5lY3Rpb24gKmFzc29jMmNvbihpbnQgYXNzb2NfaWQpCiB7CiAJaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKmg7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKIAogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwotCWZvciAoaT0wOyBpPD1tYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoY29uICYmIGNvbi0+c2N0cF9hc3NvYyA9PSBhc3NvY19pZCkgewotCQkJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQkJCXJldHVybiBjb247CisKKwlmb3IgKGkgPSAwIDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29uLCBoLCAmY29ubmVjdGlvbl9oYXNoW2ldLCBsaXN0KSB7CisJCQlpZiAoY29uICYmIGNvbi0+c2N0cF9hc3NvYyA9PSBhc3NvY19pZCkgeworCQkJCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CisJCQkJcmV0dXJuIGNvbjsKKwkJCX0KIAkJfQogCX0KIAltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwpAQCAtMjUwLDggKzI3NSw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqaW42ICA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZhZGRyOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpyZXQ2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgcmV0YWRkcjsKLQkJbWVtY3B5KCZyZXQ2LT5zaW42X2FkZHIsICZpbjYtPnNpbjZfYWRkciwKLQkJICAgICAgIHNpemVvZihpbjYtPnNpbjZfYWRkcikpOworCQlpcHY2X2FkZHJfY29weSgmcmV0Ni0+c2luNl9hZGRyLCAmaW42LT5zaW42X2FkZHIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzc2LDI1ICs0MDAsMjMgQEAKIAkJbG9nX3ByaW50KCJzZW5kIEVPRiB0byBub2RlIGZhaWxlZDogJWQiLCByZXQpOwogfQogCitzdGF0aWMgdm9pZCBzY3RwX2luaXRfZmFpbGVkX2ZvcmVhY2goc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKK3sKKwljb24tPnNjdHBfYXNzb2MgPSAwOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0ZfQ09OTkVDVF9QRU5ESU5HLCAmY29uLT5mbGFncykpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KENGX1dSSVRFX1BFTkRJTkcsICZjb24tPmZsYWdzKSkKKwkJCXF1ZXVlX3dvcmsoc2VuZF93b3JrcXVldWUsICZjb24tPnN3b3JrKTsKKwl9Cit9CisKIC8qIElOSVQgZmFpbGVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIG5vZGUuLi4KICAgIHJlc3RhcnQgSU5JVCBvbiBhbGwgcGVuZGluZyBub2RlcyAqLwogc3RhdGljIHZvaWQgc2N0cF9pbml0X2ZhaWxlZCh2b2lkKQogewotCWludCBpOwotCXN0cnVjdCBjb25uZWN0aW9uICpjb247Ci0KIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQlmb3IgKGk9MTsgaTw9bWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKCFjb24pCi0JCQljb250aW51ZTsKLQkJY29uLT5zY3RwX2Fzc29jID0gMDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZjb24tPmZsYWdzKSkgewotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KENGX1dSSVRFX1BFTkRJTkcsICZjb24tPmZsYWdzKSkgewotCQkJCXF1ZXVlX3dvcmsoc2VuZF93b3JrcXVldWUsICZjb24tPnN3b3JrKTsKLQkJCX0KLQkJfQotCX0KKworCWZvcmVhY2hfY29ubihzY3RwX2luaXRfZmFpbGVkX2ZvcmVhY2gpOworCiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIH0KIApAQCAtMTMxMywxMyArMTMzNSwxMCBAQAogCiBzdGF0aWMgdm9pZCBjbGVhbl9vbmVfd3JpdGVxdWV1ZShzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKKwlzdHJ1Y3Qgd3JpdGVxdWV1ZV9lbnRyeSAqZSwgKnNhZmU7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdGVtcCwgJmNvbi0+d3JpdGVxdWV1ZSkgewotCQlzdHJ1Y3Qgd3JpdGVxdWV1ZV9lbnRyeSAqZSA9Ci0JCQlsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgc2FmZSwgJmNvbi0+d3JpdGVxdWV1ZSwgbGlzdCkgewogCQlsaXN0X2RlbCgmZS0+bGlzdCk7CiAJCWZyZWVfZW50cnkoZSk7CiAJfQpAQCAtMTM2OSwxNCArMTM4OCw3IEBACiAvKiBEaXNjYXJkIGFsbCBlbnRyaWVzIG9uIHRoZSB3cml0ZSBxdWV1ZXMgKi8KIHN0YXRpYyB2b2lkIGNsZWFuX3dyaXRlcXVldWVzKHZvaWQpCiB7Ci0JaW50IG5vZGVpZDsKLQotCWZvciAobm9kZWlkID0gMTsgbm9kZWlkIDw9IG1heF9ub2RlaWQ7IG5vZGVpZCsrKSB7Ci0JCXN0cnVjdCBjb25uZWN0aW9uICpjb24gPSBfX25vZGVpZDJjb24obm9kZWlkLCAwKTsKLQotCQlpZiAoY29uKQotCQkJY2xlYW5fb25lX3dyaXRlcXVldWUoY29uKTsKLQl9CisJZm9yZWFjaF9jb25uKGNsZWFuX29uZV93cml0ZXF1ZXVlKTsKIH0KIAogc3RhdGljIHZvaWQgd29ya19zdG9wKHZvaWQpCkBAIC0xNDA2LDIzICsxNDE4LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHN0b3BfY29ubihzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKQoreworCWNvbi0+ZmxhZ3MgfD0gMHgwRjsKKwlpZiAoY29uLT5zb2NrKQorCQljb24tPnNvY2stPnNrLT5za191c2VyX2RhdGEgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Nvbm4oc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKK3sKKwljbG9zZV9jb25uZWN0aW9uKGNvbiwgdHJ1ZSk7CisJaWYgKGNvbi0+b3RoZXJjb24pCisJCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbi0+b3RoZXJjb24pOworCWhsaXN0X2RlbCgmY29uLT5saXN0KTsKKwlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24pOworfQorCiB2b2lkIGRsbV9sb3djb21tc19zdG9wKHZvaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKLQogCS8qIFNldCBhbGwgdGhlIGZsYWdzIHRvIHByZXZlbnQgYW55CiAJICAgc29ja2V0IGFjdGl2aXR5LgogCSovCiAJbXV0ZXhfbG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8PSBtYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoY29uKSB7Ci0JCQljb24tPmZsYWdzIHw9IDB4MEY7Ci0JCQlpZiAoY29uLT5zb2NrKQotCQkJCWNvbi0+c29jay0+c2stPnNrX3VzZXJfZGF0YSA9IE5VTEw7Ci0JCX0KLQl9CisJZm9yZWFjaF9jb25uKHN0b3BfY29ubik7CiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIAogCXdvcmtfc3RvcCgpOwpAQCAtMTQzMCwyNSArMTQ0OCwyMCBAQAogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwogCWNsZWFuX3dyaXRlcXVldWVzKCk7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IG1heF9ub2RlaWQ7IGkrKykgewotCQljb24gPSBfX25vZGVpZDJjb24oaSwgMCk7Ci0JCWlmIChjb24pIHsKLQkJCWNsb3NlX2Nvbm5lY3Rpb24oY29uLCB0cnVlKTsKLQkJCWlmIChjb24tPm90aGVyY29uKQotCQkJCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbi0+b3RoZXJjb24pOwotCQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKLQkJfQotCX0KLQltYXhfbm9kZWlkID0gMDsKKwlmb3JlYWNoX2Nvbm4oZnJlZV9jb25uKTsKKwogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGNvbl9jYWNoZSk7Ci0JaWRyX2luaXQoJmNvbm5lY3Rpb25zX2lkcik7CiB9CiAKIGludCBkbG1fbG93Y29tbXNfc3RhcnQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAtRUlOVkFMOwogCXN0cnVjdCBjb25uZWN0aW9uICpjb247CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09OTl9IQVNIX1NJWkU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZjb25uZWN0aW9uX2hhc2hbaV0pOwogCiAJaW5pdF9sb2NhbCgpOwogCWlmICghZGxtX2xvY2FsX2NvdW50KSB7CmRpZmYgLS1naXQgYS9mcy9kbG0vdXNlci5jIGIvZnMvZGxtL3VzZXIuYwppbmRleCAwNjUxNDllLi5lYmNlOTk0IDEwMDY0NAotLS0gYS9mcy9kbG0vdXNlci5jCisrKyBiL2ZzL2RsbS91c2VyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQAogCiBzdGF0aWMgdm9pZCBjb21wYXRfaW5wdXQoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0ICprYiwKIAkJCSBzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiAqa2IzMiwKLQkJCSBzaXplX3QgY291bnQpCisJCQkgaW50IG5hbWVsZW4pCiB7CiAJa2ItPnZlcnNpb25bMF0gPSBrYjMyLT52ZXJzaW9uWzBdOwogCWtiLT52ZXJzaW9uWzFdID0ga2IzMi0+dmVyc2lvblsxXTsKQEAgLTk2LDggKzk2LDcgQEAKIAkgICAga2ItPmNtZCA9PSBETE1fVVNFUl9SRU1PVkVfTE9DS1NQQUNFKSB7CiAJCWtiLT5pLmxzcGFjZS5mbGFncyA9IGtiMzItPmkubHNwYWNlLmZsYWdzOwogCQlrYi0+aS5sc3BhY2UubWlub3IgPSBrYjMyLT5pLmxzcGFjZS5taW5vcjsKLQkJbWVtY3B5KGtiLT5pLmxzcGFjZS5uYW1lLCBrYjMyLT5pLmxzcGFjZS5uYW1lLCBjb3VudCAtCi0JCQlvZmZzZXRvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiwgaS5sc3BhY2UubmFtZSkpOworCQltZW1jcHkoa2ItPmkubHNwYWNlLm5hbWUsIGtiMzItPmkubHNwYWNlLm5hbWUsIG5hbWVsZW4pOwogCX0gZWxzZSBpZiAoa2ItPmNtZCA9PSBETE1fVVNFUl9QVVJHRSkgewogCQlrYi0+aS5wdXJnZS5ub2RlaWQgPSBrYjMyLT5pLnB1cmdlLm5vZGVpZDsKIAkJa2ItPmkucHVyZ2UucGlkID0ga2IzMi0+aS5wdXJnZS5waWQ7CkBAIC0xMTUsOCArMTE0LDcgQEAKIAkJa2ItPmkubG9jay5iYXN0YWRkciA9ICh2b2lkICopKGxvbmcpa2IzMi0+aS5sb2NrLmJhc3RhZGRyOwogCQlrYi0+aS5sb2NrLmxrc2IgPSAodm9pZCAqKShsb25nKWtiMzItPmkubG9jay5sa3NiOwogCQltZW1jcHkoa2ItPmkubG9jay5sdmIsIGtiMzItPmkubG9jay5sdmIsIERMTV9VU0VSX0xWQl9MRU4pOwotCQltZW1jcHkoa2ItPmkubG9jay5uYW1lLCBrYjMyLT5pLmxvY2submFtZSwgY291bnQgLQotCQkJb2Zmc2V0b2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIsIGkubG9jay5uYW1lKSk7CisJCW1lbWNweShrYi0+aS5sb2NrLm5hbWUsIGtiMzItPmkubG9jay5uYW1lLCBuYW1lbGVuKTsKIAl9CiB9CiAKQEAgLTUzOSw5ICs1MzcsMTYgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaWYgKCFrYnVmLT5pczY0Yml0KSB7CiAJCXN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyICprMzJidWY7CisJCWludCBuYW1lbGVuID0gMDsKKworCQlpZiAoY291bnQgPiBzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIpKQorCQkJbmFtZWxlbiA9IGNvdW50IC0gc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyKTsKKwogCQlrMzJidWYgPSAoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIgKilrYnVmOwotCQlrYnVmID0ga21hbGxvYyhjb3VudCArIDEgKyAoc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdCkgLQotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMikpLCBHRlBfS0VSTkVMKTsKKworCQkvKiBhZGQgMSBhZnRlciBuYW1lbGVuIHNvIHRoYXQgdGhlIG5hbWUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgKi8KKwkJa2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdCkgKyBuYW1lbGVuICsgMSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFrYnVmKSB7CiAJCQlrZnJlZShrMzJidWYpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC01NDksNyArNTU0LDggQEAKIAogCQlpZiAocHJvYykKIAkJCXNldF9iaXQoRExNX1BST0NfRkxBR1NfQ09NUEFULCAmcHJvYy0+ZmxhZ3MpOwotCQljb21wYXRfaW5wdXQoa2J1ZiwgazMyYnVmLCBjb3VudCArIDEpOworCisJCWNvbXBhdF9pbnB1dChrYnVmLCBrMzJidWYsIG5hbWVsZW4pOwogCQlrZnJlZShrMzJidWYpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZHF1b3QuYyBiL2ZzL2RxdW90LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTNjYWMuLjAwMDAwMDAKLS0tIGEvZnMvZHF1b3QuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MTAgKzAsMCBAQAotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkaXNrcXVvdGEgc3lzdGVtIGZvciB0aGUgTElOVVggb3BlcmF0aW5nIHN5c3RlbS4gUVVPVEEKLSAqIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0Qgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZgotICogY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGdlbmVyaWMgcm91dGluZXMKLSAqIGNhbGxlZCBieSB0aGUgZGlmZmVyZW50IGZpbGVzeXN0ZW1zIG9uIGFsbG9jYXRpb24gb2YgYW4gaW5vZGUgb3IgYmxvY2suCi0gKiBUaGVzZSByb3V0aW5lcyB0YWtlIGNhcmUgb2YgdGhlIGFkbWluaXN0cmF0aW9uIG5lZWRlZCB0byBoYXZlIGEgY29uc2lzdGVudAotICogZGlza3F1b3RhIHRyYWNraW5nIHN5c3RlbS4gVGhlIGlkZWFzIG9mIGJvdGggdXNlciBhbmQgZ3JvdXAgcXVvdGFzIGFyZSBiYXNlZAotICogb24gdGhlIE1lbGJvdXJuZSBxdW90YSBzeXN0ZW0gYXMgdXNlZCBvbiBCU0QgZGVyaXZlZCBzeXN0ZW1zLiBUaGUgaW50ZXJuYWwKLSAqIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIG9uZSBvZiB0aGUgc2V2ZXJhbCB2YXJpYW50cyBvZiB0aGUgTElOVVgKLSAqIGlub2RlLXN1YnN5c3RlbSB3aXRoIGFkZGVkIGNvbXBsZXhpdHkgb2YgdGhlIGRpc2txdW90YSBzeXN0ZW0uCi0gKiAKLSAqIEF1dGhvcjoJTWFyY28gdmFuIFdpZXJpbmdlbiA8bXZ3QHBsYW5ldHMuZWxtLm5ldD4KLSAqCi0gKiBGaXhlczogICBEbWl0cnkgR29yb2RjaGFuaW4gPHBnbWRzZ0BpYmkuY29tPiwgMTEgRmViIDk2Ci0gKgotICoJCVJldmlzZWQgbGlzdCBtYW5hZ2VtZW50IHRvIGF2b2lkIHJhY2VzCi0gKgkJLS0gQmlsbCBIYXdlcywgPHdoYXdlc0BzdGFyLm5ldD4sIDkvOTgKLSAqCi0gKgkJRml4ZWQgcmFjZXMgaW4gZHF1b3RfdHJhbnNmZXIoKSwgZHFnZXQoKSBhbmQgZHF1b3RfYWxsb2NfLi4uKCkuCi0gKgkJQXMgdGhlIGNvbnNlcXVlbmNlIHRoZSBsb2NraW5nIHdhcyBtb3ZlZCBmcm9tIGRxdW90X2RlY3JfLi4uKCksCi0gKgkJZHF1b3RfaW5jcl8uLi4oKSB0byBjYWxsaW5nIGZ1bmN0aW9ucy4KLSAqCQlpbnZhbGlkYXRlX2RxdW90cygpIG5vdyB3cml0ZXMgbW9kaWZpZWQgZHF1b3RzLgotICoJCVNlcmlhbGl6ZWQgcXVvdGFfb2ZmKCkgYW5kIHF1b3RhX29uKCkgZm9yIG1vdW50IHBvaW50LgotICoJCUZpeGVkIGEgZmV3IGJ1Z3MgaW4gZ3Jvd19kcXVvdHMoKS4KLSAqCQlGaXhlZCBkZWFkbG9jayBpbiB3cml0ZV9kcXVvdCgpIC0gd2Ugbm8gbG9uZ2VyIGFjY291bnQgcXVvdGFzIG9uCi0gKgkJcXVvdGEgZmlsZXMKLSAqCQlyZW1vdmVfZHF1b3RfcmVmKCkgbW92ZWQgdG8gaW5vZGUuYyAtIGl0IG5vdyB0cmF2ZXJzZXMgdGhyb3VnaCBpbm9kZXMKLSAqCQlhZGRfZHF1b3RfcmVmKCkgcmVzdGFydHMgYWZ0ZXIgYmxvY2tpbmcKLSAqCQlBZGRlZCBjaGVjayBmb3IgYm9ndXMgdWlkIGFuZCBmaXhlZCBjaGVjayBmb3IgZ3JvdXAgaW4gcXVvdGFjdGwuCi0gKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCBzcG9uc29yZWQgYnkgU3VTRSBDUiwgMTAtMTEvOTkKLSAqCi0gKgkJVXNlZCBzdHJ1Y3QgbGlzdF9oZWFkIGluc3RlYWQgb2Ygb3duIGxpc3Qgc3RydWN0Ci0gKgkJSW52YWxpZGF0aW9uIG9mIHJlZmVyZW5jZWQgZHF1b3RzIGlzIG5vIGxvbmdlciBwb3NzaWJsZQotICoJCUltcHJvdmVkIGZyZWVfZHF1b3RzIGxpc3QgbWFuYWdlbWVudAotICoJCVF1b3RhIGFuZCBpX2Jsb2NrcyBhcmUgbm93IHVwZGF0ZWQgaW4gb25lIHBsYWNlIHRvIGF2b2lkIHJhY2VzCi0gKgkJV2FybmluZ3MgYXJlIG5vdyBkZWxheWVkIHNvIHdlIHdvbid0IGJsb2NrIGluIGNyaXRpY2FsIHNlY3Rpb24KLSAqCQlXcml0ZSB1cGRhdGVkIG5vdCB0byByZXF1aXJlIGRxdW90IGxvY2sKLSAqCQlKYW4gS2FyYSwgPGphY2tAc3VzZS5jej4sIDkvMjAwMAotICoKLSAqCQlBZGRlZCBkeW5hbWljIHF1b3RhIHN0cnVjdHVyZSBhbGxvY2F0aW9uCi0gKgkJSmFuIEthcmEgPGphY2tAc3VzZS5jej4gMTIvMjAwMAotICoKLSAqCQlSZXdyaXR0ZW4gcXVvdGEgaW50ZXJmYWNlLiBJbXBsZW1lbnRlZCBuZXcgcXVvdGEgZm9ybWF0IGFuZAotICoJCWZvcm1hdHMgcmVnaXN0ZXJpbmcuCi0gKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCAyMDAxLDIwMDIKLSAqCi0gKgkJTmV3IFNNUCBsb2NraW5nLgotICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6PiwgMTAvMjAwMgotICoKLSAqCQlBZGRlZCBqb3VybmFsbGVkIHF1b3RhIHN1cHBvcnQsIGZpeCBsb2NrIGludmVyc2lvbiBwcm9ibGVtcwotICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6PiwgMjAwMywyMDA0Ci0gKgotICogKEMpIENvcHlyaWdodCAxOTk0IC0gMTk5NyBNYXJjbyB2YW4gV2llcmluZ2VuIAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW91bnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+IC8qIGZvciBpbm9kZV9sb2NrLCBvZGRseSBlbm91Z2guLiAqLwotI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jZGVmaW5lIF9fRFFVT1RfUEFSQU5PSUEKLQotLyoKLSAqIFRoZXJlIGFyZSB0aHJlZSBxdW90YSBTTVAgbG9ja3MuIGRxX2xpc3RfbG9jayBwcm90ZWN0cyBhbGwgbGlzdHMgd2l0aCBxdW90YXMKLSAqIGFuZCBxdW90YSBmb3JtYXRzLCBkcXN0YXRzIHN0cnVjdHVyZSBjb250YWluaW5nIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGxpc3RzCi0gKiBkcV9kYXRhX2xvY2sgcHJvdGVjdHMgZGF0YSBmcm9tIGRxX2RxYiBhbmQgYWxzbyBtZW1fZHFpbmZvIHN0cnVjdHVyZXMgYW5kCi0gKiBhbHNvIGd1YXJkcyBjb25zaXN0ZW5jeSBvZiBkcXVvdC0+ZHFfZHFiIHdpdGggaW5vZGUtPmlfYmxvY2tzLCBpX2J5dGVzLgotICogaV9ibG9ja3MgYW5kIGlfYnl0ZXMgdXBkYXRlcyBpdHNlbGYgYXJlIGd1YXJkZWQgYnkgaV9sb2NrIGFjcXVpcmVkIGRpcmVjdGx5Ci0gKiBpbiBpbm9kZV9hZGRfYnl0ZXMoKSBhbmQgaW5vZGVfc3ViX2J5dGVzKCkuIGRxX3N0YXRlX2xvY2sgcHJvdGVjdHMKLSAqIG1vZGlmaWNhdGlvbnMgb2YgcXVvdGEgc3RhdGUgKG9uIHF1b3Rhb24gYW5kIHF1b3Rhb2ZmKSBhbmQgcmVhZGVycyB3aG8gY2FyZQotICogYWJvdXQgbGF0ZXN0IHZhbHVlcyB0YWtlIGl0IGFzIHdlbGwuCi0gKgotICogVGhlIHNwaW5sb2NrIG9yZGVyaW5nIGlzIGhlbmNlOiBkcV9kYXRhX2xvY2sgPiBkcV9saXN0X2xvY2sgPiBpX2xvY2ssCi0gKiAgIGRxX2xpc3RfbG9jayA+IGRxX3N0YXRlX2xvY2sKLSAqCi0gKiBOb3RlIHRoYXQgc29tZSB0aGluZ3MgKGVnLiBzYiBwb2ludGVyLCB0eXBlLCBpZCkgZG9lc24ndCBjaGFuZ2UgZHVyaW5nCi0gKiB0aGUgbGlmZSBvZiB0aGUgZHF1b3Qgc3RydWN0dXJlIGFuZCBzbyBuZWVkbid0IHRvIGJlIHByb3RlY3RlZCBieSBhIGxvY2sKLSAqCi0gKiBBbnkgb3BlcmF0aW9uIHdvcmtpbmcgb24gZHF1b3RzIHZpYSBpbm9kZSBwb2ludGVycyBtdXN0IGhvbGQgZHFwdHJfc2VtLiAgSWYKLSAqIG9wZXJhdGlvbiBpcyBqdXN0IHJlYWRpbmcgcG9pbnRlcnMgZnJvbSBpbm9kZSAob3Igbm90IHVzaW5nIHRoZW0gYXQgYWxsKSB0aGUKLSAqIHJlYWQgbG9jayBpcyBlbm91Z2guIElmIHBvaW50ZXJzIGFyZSBhbHRlcmVkIGZ1bmN0aW9uIG11c3QgaG9sZCB3cml0ZSBsb2NrCi0gKiAodGhlc2UgbG9ja2luZyBydWxlcyBhbHNvIGFwcGx5IGZvciBTX05PUVVPVEEgZmxhZyBpbiB0aGUgaW5vZGUgLSBub3RlIHRoYXQKLSAqIGZvciBhbHRlcmluZyB0aGUgZmxhZyBpX211dGV4IGlzIGFsc28gbmVlZGVkKS4KLSAqCi0gKiBFYWNoIGRxdW90IGhhcyBpdHMgZHFfbG9jayBtdXRleC4gTG9ja2VkIGRxdW90cyBtaWdodCBub3QgYmUgcmVmZXJlbmNlZAotICogZnJvbSBpbm9kZXMgKGRxdW90X2FsbG9jX3NwYWNlKCkgYW5kIHN1Y2ggZG9uJ3QgY2hlY2sgdGhlIGRxX2xvY2spLgotICogQ3VycmVudGx5IGRxdW90IGlzIGxvY2tlZCBvbmx5IHdoZW4gaXQgaXMgYmVpbmcgcmVhZCB0byBtZW1vcnkgKG9yIHNwYWNlIGZvcgotICogaXQgaXMgYmVpbmcgYWxsb2NhdGVkKSBvbiB0aGUgZmlyc3QgZHFnZXQoKSBhbmQgd2hlbiBpdCBpcyBiZWluZyByZWxlYXNlZCBvbgotICogdGhlIGxhc3QgZHFwdXQoKS4gVGhlIGFsbG9jYXRpb24gYW5kIHJlbGVhc2Ugb3BhcmF0aW9ucyBhcmUgc2VyaWFsaXplZCBieQotICogdGhlIGRxX2xvY2sgYW5kIGJ5IGNoZWNraW5nIHRoZSB1c2UgY291bnQgaW4gZHF1b3RfcmVsZWFzZSgpLiAgV3JpdGUKLSAqIG9wZXJhdGlvbnMgb24gZHF1b3RzIGRvbid0IGhvbGQgZHFfbG9jayBhcyB0aGV5IGNvcHkgZGF0YSB1bmRlciBkcV9kYXRhX2xvY2sKLSAqIHNwaW5sb2NrIHRvIGludGVybmFsIGJ1ZmZlcnMgYmVmb3JlIHdyaXRpbmcuCi0gKgotICogTG9jayBvcmRlcmluZyAoaW5jbHVkaW5nIHJlbGF0ZWQgVkZTIGxvY2tzKSBpcyB0aGUgZm9sbG93aW5nOgotICogICBpX211dGV4ID4gZHFvbm9mZl9zZW0gPiBqb3VybmFsX2xvY2sgPiBkcXB0cl9zZW0gPiBkcXVvdC0+ZHFfbG9jayA+Ci0gKiAgIGRxaW9fbXV0ZXgKLSAqIFRoZSBsb2NrIG9yZGVyaW5nIG9mIGRxcHRyX3NlbSBpbXBvc2VkIGJ5IHF1b3RhIGNvZGUgaXMgb25seSBkcW9ub2ZmX3NlbSA+Ci0gKiBkcXB0cl9zZW0uIEJ1dCBmaWxlc3lzdGVtIGhhcyB0byBjb3VudCB3aXRoIHRoZSBmYWN0IHRoYXQgZnVuY3Rpb25zIHN1Y2ggYXMKLSAqIGRxdW90X2FsbG9jX3NwYWNlKCkgYWNxdWlyZSBkcXB0cl9zZW0gYW5kIHRoZXkgdXN1YWxseSBoYXZlIHRvIGJlIGNhbGxlZAotICogZnJvbSBpbnNpZGUgYSB0cmFuc2FjdGlvbiB0byBrZWVwIGZpbGVzeXN0ZW0gY29uc2lzdGVuY3kgYWZ0ZXIgYSBjcmFzaC4gQWxzbwotICogZmlsZXN5c3RlbXMgdXN1YWxseSB3YW50IHRvIGRvIHNvbWUgSU8gb24gZHF1b3QgZnJvbSAtPm1hcmtfZGlydHkgd2hpY2ggaXMKLSAqIGNhbGxlZCB3aXRoIGRxcHRyX3NlbSBoZWxkLgotICogaV9tdXRleCBvbiBxdW90YSBmaWxlcyBpcyBzcGVjaWFsIChpdCdzIGJlbG93IGRxaW9fbXV0ZXgpCi0gKi8KLQotc3RhdGljIERFRklORV9TUElOTE9DSyhkcV9saXN0X2xvY2spOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkcV9zdGF0ZV9sb2NrKTsKLURFRklORV9TUElOTE9DSyhkcV9kYXRhX2xvY2spOwotCi1zdGF0aWMgY2hhciAqcXVvdGF0eXBlc1tdID0gSU5JVFFGTkFNRVM7Ci1zdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpxdW90YV9mb3JtYXRzOwkvKiBMaXN0IG9mIHJlZ2lzdGVyZWQgZm9ybWF0cyAqLwotc3RhdGljIHN0cnVjdCBxdW90YV9tb2R1bGVfbmFtZSBtb2R1bGVfbmFtZXNbXSA9IElOSVRfUVVPVEFfTU9EVUxFX05BTUVTOwotCi0vKiBTTEFCIGNhY2hlIGZvciBkcXVvdCBzdHJ1Y3R1cmVzICovCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRxdW90X2NhY2hlcDsKLQotaW50IHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCkKLXsKLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JZm10LT5xZl9uZXh0ID0gcXVvdGFfZm9ybWF0czsKLQlxdW90YV9mb3JtYXRzID0gZm10OwotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCXJldHVybiAwOwotfQotCi12b2lkIHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZm10KQotewotCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqKmFjdHFmOwotCi0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWZvciAoYWN0cWYgPSAmcXVvdGFfZm9ybWF0czsgKmFjdHFmICYmICphY3RxZiAhPSBmbXQ7IGFjdHFmID0gJigqYWN0cWYpLT5xZl9uZXh0KTsKLQlpZiAoKmFjdHFmKQotCQkqYWN0cWYgPSAoKmFjdHFmKS0+cWZfbmV4dDsKLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZmluZF9xdW90YV9mb3JtYXQoaW50IGlkKQotewotCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqYWN0cWY7Ci0KLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JZm9yIChhY3RxZiA9IHF1b3RhX2Zvcm1hdHM7IGFjdHFmICYmIGFjdHFmLT5xZl9mbXRfaWQgIT0gaWQ7IGFjdHFmID0gYWN0cWYtPnFmX25leHQpOwotCWlmICghYWN0cWYgfHwgIXRyeV9tb2R1bGVfZ2V0KGFjdHFmLT5xZl9vd25lcikpIHsKLQkJaW50IHFtOwotCi0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQkKLQkJZm9yIChxbSA9IDA7IG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICYmIG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICE9IGlkOyBxbSsrKTsKLQkJaWYgKCFtb2R1bGVfbmFtZXNbcW1dLnFtX2ZtdF9pZCB8fCByZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZXNbcW1dLnFtX21vZF9uYW1lKSkKLQkJCXJldHVybiBOVUxMOwotCi0JCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJZm9yIChhY3RxZiA9IHF1b3RhX2Zvcm1hdHM7IGFjdHFmICYmIGFjdHFmLT5xZl9mbXRfaWQgIT0gaWQ7IGFjdHFmID0gYWN0cWYtPnFmX25leHQpOwotCQlpZiAoYWN0cWYgJiYgIXRyeV9tb2R1bGVfZ2V0KGFjdHFmLT5xZl9vd25lcikpCi0JCQlhY3RxZiA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCXJldHVybiBhY3RxZjsKLX0KLQotc3RhdGljIHZvaWQgcHV0X3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCkKLXsKLQltb2R1bGVfcHV0KGZtdC0+cWZfb3duZXIpOwotfQotCi0vKgotICogRHF1b3QgTGlzdCBNYW5hZ2VtZW50OgotICogVGhlIHF1b3RhIGNvZGUgdXNlcyB0aHJlZSBsaXN0cyBmb3IgZHF1b3QgbWFuYWdlbWVudDogdGhlIGludXNlX2xpc3QsCi0gKiBmcmVlX2RxdW90cywgYW5kIGRxdW90X2hhc2hbXSBhcnJheS4gQSBzaW5nbGUgZHF1b3Qgc3RydWN0dXJlIG1heSBiZQotICogb24gYWxsIHRocmVlIGxpc3RzLCBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuCi0gKgotICogQWxsIGRxdW90cyBhcmUgcGxhY2VkIHRvIHRoZSBlbmQgb2YgaW51c2VfbGlzdCB3aGVuIGZpcnN0IGNyZWF0ZWQsIGFuZCB0aGlzCi0gKiBsaXN0IGlzIHVzZWQgZm9yIGludmFsaWRhdGUgb3BlcmF0aW9uLCB3aGljaCBtdXN0IGxvb2sgYXQgZXZlcnkgZHF1b3QuCi0gKgotICogVW51c2VkIGRxdW90cyAoZHFfY291bnQgPT0gMCkgYXJlIGFkZGVkIHRvIHRoZSBmcmVlX2RxdW90cyBsaXN0IHdoZW4gZnJlZWQsCi0gKiBhbmQgdGhpcyBsaXN0IGlzIHNlYXJjaGVkIHdoZW5ldmVyIHdlIG5lZWQgYW4gYXZhaWxhYmxlIGRxdW90LiAgRHF1b3RzIGFyZQotICogcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGFzIHNvb24gYXMgdGhleSBhcmUgdXNlZCBhZ2FpbiwgYW5kCi0gKiBkcXN0YXRzLmZyZWVfZHF1b3RzIGdpdmVzIHRoZSBudW1iZXIgb2YgZHF1b3RzIG9uIHRoZSBsaXN0LiBXaGVuCi0gKiBkcXVvdCBpcyBpbnZhbGlkYXRlZCBpdCdzIGNvbXBsZXRlbHkgcmVsZWFzZWQgZnJvbSBtZW1vcnkuCi0gKgotICogRHF1b3RzIHdpdGggYSBzcGVjaWZpYyBpZGVudGl0eSAoZGV2aWNlLCB0eXBlIGFuZCBpZCkgYXJlIHBsYWNlZCBvbgotICogb25lIG9mIHRoZSBkcXVvdF9oYXNoW10gaGFzaCBjaGFpbnMuIFRoZSBwcm92aWRlcyBhbiBlZmZpY2llbnQgc2VhcmNoCi0gKiBtZWNoYW5pc20gdG8gbG9jYXRlIGEgc3BlY2lmaWMgZHF1b3QuCi0gKi8KLQotc3RhdGljIExJU1RfSEVBRChpbnVzZV9saXN0KTsKLXN0YXRpYyBMSVNUX0hFQUQoZnJlZV9kcXVvdHMpOwotc3RhdGljIHVuc2lnbmVkIGludCBkcV9oYXNoX2JpdHMsIGRxX2hhc2hfbWFzazsKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZHF1b3RfaGFzaDsKLQotc3RydWN0IGRxc3RhdHMgZHFzdGF0czsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWhhc2hmbihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JdG1wID0gKCgodW5zaWduZWQgbG9uZylzYj4+TDFfQ0FDSEVfU0hJRlQpIF4gaWQpICogKE1BWFFVT1RBUyAtIHR5cGUpOwotCXJldHVybiAodG1wICsgKHRtcCA+PiBkcV9oYXNoX2JpdHMpKSAmIGRxX2hhc2hfbWFzazsKLX0KLQotLyoKLSAqIEZvbGxvd2luZyBsaXN0IGZ1bmN0aW9ucyBleHBlY3QgZHFfbGlzdF9sb2NrIHRvIGJlIGhlbGQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGluc2VydF9kcXVvdF9oYXNoKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBkcXVvdF9oYXNoICsgaGFzaGZuKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX2lkLCBkcXVvdC0+ZHFfdHlwZSk7Ci0JaGxpc3RfYWRkX2hlYWQoJmRxdW90LT5kcV9oYXNoLCBoZWFkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kcXVvdF9oYXNoKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaGxpc3RfZGVsX2luaXQoJmRxdW90LT5kcV9oYXNoKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHF1b3QgKmZpbmRfZHF1b3QodW5zaWduZWQgaW50IGhhc2hlbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBpZCwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRxdW90ICpkcXVvdDsKLQotCWhsaXN0X2Zvcl9lYWNoIChub2RlLCBkcXVvdF9oYXNoK2hhc2hlbnQpIHsKLQkJZHF1b3QgPSBobGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZHF1b3QsIGRxX2hhc2gpOwotCQlpZiAoZHF1b3QtPmRxX3NiID09IHNiICYmIGRxdW90LT5kcV9pZCA9PSBpZCAmJiBkcXVvdC0+ZHFfdHlwZSA9PSB0eXBlKQotCQkJcmV0dXJuIGRxdW90OwotCX0KLQlyZXR1cm4gTk9EUVVPVDsKLX0KLQotLyogQWRkIGEgZHF1b3QgdG8gdGhlIHRhaWwgb2YgdGhlIGZyZWUgbGlzdCAqLwotc3RhdGljIGlubGluZSB2b2lkIHB1dF9kcXVvdF9sYXN0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JbGlzdF9hZGRfdGFpbCgmZHF1b3QtPmRxX2ZyZWUsICZmcmVlX2RxdW90cyk7Ci0JZHFzdGF0cy5mcmVlX2RxdW90cysrOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2ZyZWVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpZiAobGlzdF9lbXB0eSgmZHF1b3QtPmRxX2ZyZWUpKQotCQlyZXR1cm47Ci0JbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2ZyZWUpOwotCWRxc3RhdHMuZnJlZV9kcXVvdHMtLTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHB1dF9pbnVzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCS8qIFdlIGFkZCB0byB0aGUgYmFjayBvZiBpbnVzZSBsaXN0IHNvIHdlIGRvbid0IGhhdmUgdG8gcmVzdGFydAotCSAqIHdoZW4gdHJhdmVyc2luZyB0aGlzIGxpc3QgYW5kIHdlIGJsb2NrICovCi0JbGlzdF9hZGRfdGFpbCgmZHF1b3QtPmRxX2ludXNlLCAmaW51c2VfbGlzdCk7Ci0JZHFzdGF0cy5hbGxvY2F0ZWRfZHF1b3RzKys7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfaW51c2Uoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlkcXN0YXRzLmFsbG9jYXRlZF9kcXVvdHMtLTsKLQlsaXN0X2RlbCgmZHF1b3QtPmRxX2ludXNlKTsKLX0KLS8qCi0gKiBFbmQgb2YgbGlzdCBmdW5jdGlvbnMgbmVlZGluZyBkcV9saXN0X2xvY2sKLSAqLwotCi1zdGF0aWMgdm9pZCB3YWl0X29uX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JbXV0ZXhfbG9jaygmZHF1b3QtPmRxX2xvY2spOwotCW11dGV4X3VubG9jaygmZHF1b3QtPmRxX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXJldHVybiB0ZXN0X2JpdChEUV9NT0RfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlyZXR1cm4gZHF1b3QtPmRxX3NiLT5kcV9vcC0+bWFya19kaXJ0eShkcXVvdCk7Ci19Ci0KLWludCBkcXVvdF9tYXJrX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWlmICghdGVzdF9hbmRfc2V0X2JpdChEUV9NT0RfQiwgJmRxdW90LT5kcV9mbGFncykpCi0JCWxpc3RfYWRkKCZkcXVvdC0+ZHFfZGlydHksICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT4KLQkJCQlpbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfZGlydHlfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgZHFfbGlzdF9sb2NrICovCi1zdGF0aWMgaW5saW5lIGludCBjbGVhcl9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERRX01PRF9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0JbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2RpcnR5KTsKLQlyZXR1cm4gMTsKLX0KLQotdm9pZCBtYXJrX2luZm9fZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc2V0X2JpdChEUUZfSU5GT19ESVJUWV9CLCAmc2JfZHFvcHQoc2IpLT5pbmZvW3R5cGVdLmRxaV9mbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1hcmtfaW5mb19kaXJ0eSk7Ci0KLS8qCi0gKglSZWFkIGRxdW90IGZyb20gZGlzayBhbmQgYWxsb2Mgc3BhY2UgZm9yIGl0Ci0gKi8KLQotaW50IGRxdW90X2FjcXVpcmUoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgcmV0ID0gMCwgcmV0MiA9IDA7Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKTsKLQotCW11dGV4X2xvY2soJmRxdW90LT5kcV9sb2NrKTsKLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JaWYgKCF0ZXN0X2JpdChEUV9SRUFEX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQotCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVhZF9kcWJsayhkcXVvdCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2lvbG9jazsKLQlzZXRfYml0KERRX1JFQURfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JLyogSW5zdGFudGlhdGUgZHF1b3QgaWYgbmVlZGVkICovCi0JaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykgJiYgIWRxdW90LT5kcV9vZmYpIHsKLQkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPmNvbW1pdF9kcWJsayhkcXVvdCk7Ci0JCS8qIFdyaXRlIHRoZSBpbmZvIGlmIG5lZWRlZCAqLwotCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkKLQkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X2lvbG9jazsKLQkJaWYgKHJldDIgPCAwKSB7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBvdXRfaW9sb2NrOwotCQl9Ci0JfQotCXNldF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotb3V0X2lvbG9jazoKLQltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQltdXRleF91bmxvY2soJmRxdW90LT5kcV9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICoJV3JpdGUgZHF1b3QgdG8gZGlzawotICovCi1pbnQgZHF1b3RfY29tbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaW50IHJldCA9IDAsIHJldDIgPSAwOwotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7Ci0KLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWlmICghY2xlYXJfZHF1b3RfZGlydHkoZHF1b3QpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQlnb3RvIG91dF9zZW07Ci0JfQotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCS8qIEluYWN0aXZlIGRxdW90IGNhbiBiZSBvbmx5IGlmIHRoZXJlIHdhcyBlcnJvciBkdXJpbmcgcmVhZC9pbml0Ci0JICogPT4gd2UgaGF2ZSBiZXR0ZXIgbm90IHdyaXRpbmcgaXQgKi8KLQlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKSB7Ci0JCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5jb21taXRfZHFibGsoZHF1b3QpOwotCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkKLQkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOwotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSByZXQyOwotCX0KLW91dF9zZW06Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqCVJlbGVhc2UgZHF1b3QKLSAqLwotaW50IGRxdW90X3JlbGVhc2Uoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgcmV0ID0gMCwgcmV0MiA9IDA7Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKTsKLQotCW11dGV4X2xvY2soJmRxdW90LT5kcV9sb2NrKTsKLQkvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBub3QgcmFjaW5nIHdpdGggc29tZSBvdGhlciBkcWdldCgpICovCi0JaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpID4gMSkKLQkJZ290byBvdXRfZHFsb2NrOwotCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQlpZiAoZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPnJlbGVhc2VfZHFibGspIHsKLQkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPnJlbGVhc2VfZHFibGsoZHF1b3QpOwotCQkvKiBXcml0ZSB0aGUgaW5mbyAqLwotCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkKLQkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOwotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSByZXQyOwotCX0KLQljbGVhcl9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwotb3V0X2RxbG9jazoKLQltdXRleF91bmxvY2soJmRxdW90LT5kcV9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGRxdW90X2Rlc3Ryb3koc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUoZHF1b3RfY2FjaGVwLCBkcXVvdCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2Rlc3Ryb3kpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fZGVzdHJveV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWRxdW90LT5kcV9zYi0+ZHFfb3AtPmRlc3Ryb3lfZHF1b3QoZHF1b3QpOwotfQotCi0vKiBJbnZhbGlkYXRlIGFsbCBkcXVvdHMgb24gdGhlIGxpc3QuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlcgotICogcXVvdGEgaXMgZGlzYWJsZWQgYW5kIHBvaW50ZXJzIGZyb20gaW5vZGVzIHJlbW92ZWQgc28gdGhlcmUgY2Fubm90IGJlIG5ldwotICogcXVvdGEgdXNlcnMuIFRoZXJlIGNhbiBzdGlsbCBiZSBzb21lIHVzZXJzIG9mIHF1b3RhcyBkdWUgdG8gaW5vZGVzIGJlaW5nCi0gKiBqdXN0IGRlbGV0ZWQgb3IgcHJ1bmVkIGJ5IHBydW5lX2ljYWNoZSgpICh0aG9zZSBhcmUgbm90IGF0dGFjaGVkIHRvIGFueQotICogbGlzdCkgb3IgcGFyYWxsZWwgcXVvdGFjdGwgY2FsbC4gV2UgaGF2ZSB0byB3YWl0IGZvciBzdWNoIHVzZXJzLgotICovCi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2RxdW90cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90LCAqdG1wOwotCi1yZXN0YXJ0OgotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHF1b3QsIHRtcCwgJmludXNlX2xpc3QsIGRxX2ludXNlKSB7Ci0JCWlmIChkcXVvdC0+ZHFfc2IgIT0gc2IpCi0JCQljb250aW51ZTsKLQkJaWYgKGRxdW90LT5kcV90eXBlICE9IHR5cGUpCi0JCQljb250aW51ZTsKLQkJLyogV2FpdCBmb3IgZHF1b3QgdXNlcnMgKi8KLQkJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKSB7Ci0JCQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCQkJYXRvbWljX2luYygmZHF1b3QtPmRxX2NvdW50KTsKLQkJCXByZXBhcmVfdG9fd2FpdCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkLCAmd2FpdCwKLQkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCQkvKiBPbmNlIGRxcHV0KCkgd2FrZXMgdXMgdXAsIHdlIGtub3cgaXQncyB0aW1lIHRvIGZyZWUKLQkJCSAqIHRoZSBkcXVvdC4KLQkJCSAqIElNUE9SVEFOVDogd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZXJlIGlzIGFsd2F5cwotCQkJICogYXQgbW9zdCBvbmUgcHJvY2VzcyB3YWl0aW5nIGZvciBkcXVvdCB0byBmcmVlLgotCQkJICogT3RoZXJ3aXNlIGRxX2NvdW50IHdvdWxkIGJlID4gMSBhbmQgd2Ugd291bGQgbmV2ZXIKLQkJCSAqIHdha2UgdXAuCi0JCQkgKi8KLQkJCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA+IDEpCi0JCQkJc2NoZWR1bGUoKTsKLQkJCWZpbmlzaF93YWl0KCZkcXVvdC0+ZHFfd2FpdF91bnVzZWQsICZ3YWl0KTsKLQkJCWRxcHV0KGRxdW90KTsKLQkJCS8qIEF0IHRoaXMgbW9tZW50IGRxdW90KCkgbmVlZCBub3QgZXhpc3QgKGl0IGNvdWxkIGJlCi0JCQkgKiByZWNsYWltZWQgYnkgcHJ1bmVfZHFjYWNoZSgpLiBIZW5jZSB3ZSBtdXN0Ci0JCQkgKiByZXN0YXJ0LiAqLwotCQkJZ290byByZXN0YXJ0OwotCQl9Ci0JCS8qCi0JCSAqIFF1b3RhIG5vdyBoYXMgbm8gdXNlcnMgYW5kIGl0IGhhcyBiZWVuIHdyaXR0ZW4gb24gbGFzdAotCQkgKiBkcXB1dCgpCi0JCSAqLwotCQlyZW1vdmVfZHF1b3RfaGFzaChkcXVvdCk7Ci0JCXJlbW92ZV9mcmVlX2RxdW90KGRxdW90KTsKLQkJcmVtb3ZlX2ludXNlKGRxdW90KTsKLQkJZG9fZGVzdHJveV9kcXVvdChkcXVvdCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotfQotCi0vKiBDYWxsIGNhbGxiYWNrIGZvciBldmVyeSBhY3RpdmUgZHF1b3Qgb24gZ2l2ZW4gZmlsZXN5c3RlbSAqLwotaW50IGRxdW90X3NjYW5fYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCSAgICAgIGludCAoKmZuKShzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1bnNpZ25lZCBsb25nIHByaXYpLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHByaXYpCi17Ci0Jc3RydWN0IGRxdW90ICpkcXVvdCwgKm9sZF9kcXVvdCA9IE5VTEw7Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRxdW90LCAmaW51c2VfbGlzdCwgZHFfaW51c2UpIHsKLQkJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpCi0JCQljb250aW51ZTsKLQkJaWYgKGRxdW90LT5kcV9zYiAhPSBzYikKLQkJCWNvbnRpbnVlOwotCQkvKiBOb3cgd2UgaGF2ZSBhY3RpdmUgZHF1b3Qgc28gd2UgY2FuIGp1c3QgaW5jcmVhc2UgdXNlIGNvdW50ICovCi0JCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7Ci0JCWRxc3RhdHMubG9va3VwcysrOwotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJZHFwdXQob2xkX2RxdW90KTsKLQkJb2xkX2RxdW90ID0gZHF1b3Q7Ci0JCXJldCA9IGZuKGRxdW90LCBwcml2KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCQkvKiBXZSBhcmUgc2FmZSB0byBjb250aW51ZSBub3cgYmVjYXVzZSBvdXIgZHF1b3QgY291bGQgbm90Ci0JCSAqIGJlIG1vdmVkIG91dCBvZiB0aGUgaW51c2UgbGlzdCB3aGlsZSB3ZSBob2xkIHRoZSByZWZlcmVuY2UgKi8KLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci1vdXQ6Ci0JZHFwdXQob2xkX2RxdW90KTsKLQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHZmc19xdW90YV9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmRpcnR5OwotCXN0cnVjdCBkcXVvdCAqZHF1b3Q7Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwotCWludCBjbnQ7Ci0KLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKLQkJCWNvbnRpbnVlOwotCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JCWRpcnR5ID0gJmRxb3B0LT5pbmZvW2NudF0uZHFpX2RpcnR5X2xpc3Q7Ci0JCXdoaWxlICghbGlzdF9lbXB0eShkaXJ0eSkpIHsKLQkJCWRxdW90ID0gbGlzdF9maXJzdF9lbnRyeShkaXJ0eSwgc3RydWN0IGRxdW90LCBkcV9kaXJ0eSk7Ci0JCQkvKiBEaXJ0eSBhbmQgaW5hY3RpdmUgY2FuIGJlIG9ubHkgYmFkIGRxdW90Li4uICovCi0JCQlpZiAoIXRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgewotCQkJCWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCS8qIE5vdyB3ZSBoYXZlIGFjdGl2ZSBkcXVvdCBmcm9tIHdoaWNoIHNvbWVvbmUgaXMKLSAJCQkgKiBob2xkaW5nIHJlZmVyZW5jZSBzbyB3ZSBjYW4gc2FmZWx5IGp1c3QgaW5jcmVhc2UKLQkJCSAqIHVzZSBjb3VudCAqLwotCQkJYXRvbWljX2luYygmZHF1b3QtPmRxX2NvdW50KTsKLQkJCWRxc3RhdHMubG9va3VwcysrOwotCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCQlzYi0+ZHFfb3AtPndyaXRlX2RxdW90KGRxdW90KTsKLQkJCWRxcHV0KGRxdW90KTsKLQkJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJfQotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQl9Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmICgoY250ID09IHR5cGUgfHwgdHlwZSA9PSAtMSkgJiYgc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KQotCQkgICAgJiYgaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bY250XSkpCi0JCQlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIGNudCk7Ci0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWRxc3RhdHMuc3luY3MrKzsKLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBGcmVlIHVudXNlZCBkcXVvdHMgZnJvbSBjYWNoZSAqLwotc3RhdGljIHZvaWQgcHJ1bmVfZHFjYWNoZShpbnQgY291bnQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90OwotCi0JaGVhZCA9IGZyZWVfZHF1b3RzLnByZXY7Ci0Jd2hpbGUgKGhlYWQgIT0gJmZyZWVfZHF1b3RzICYmIGNvdW50KSB7Ci0JCWRxdW90ID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZHF1b3QsIGRxX2ZyZWUpOwotCQlyZW1vdmVfZHF1b3RfaGFzaChkcXVvdCk7Ci0JCXJlbW92ZV9mcmVlX2RxdW90KGRxdW90KTsKLQkJcmVtb3ZlX2ludXNlKGRxdW90KTsKLQkJZG9fZGVzdHJveV9kcXVvdChkcXVvdCk7Ci0JCWNvdW50LS07Ci0JCWhlYWQgPSBmcmVlX2RxdW90cy5wcmV2OwotCX0KLX0KLQotLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGZyb20ga3N3YXBkIHdoZW4gd2UgdGhpbmsgd2UgbmVlZCBzb21lCi0gKiBtb3JlIG1lbW9yeQotICovCi0KLXN0YXRpYyBpbnQgc2hyaW5rX2RxY2FjaGVfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0JaWYgKG5yKSB7Ci0JCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJcHJ1bmVfZHFjYWNoZShucik7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCX0KLQlyZXR1cm4gKGRxc3RhdHMuZnJlZV9kcXVvdHMgLyAxMDApICogc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZTsKLX0KLQotc3RhdGljIHN0cnVjdCBzaHJpbmtlciBkcWNhY2hlX3Nocmlua2VyID0gewotCS5zaHJpbmsgPSBzaHJpbmtfZHFjYWNoZV9tZW1vcnksCi0JLnNlZWtzID0gREVGQVVMVF9TRUVLUywKLX07Ci0KLS8qCi0gKiBQdXQgcmVmZXJlbmNlIHRvIGRxdW90Ci0gKiBOT1RFOiBJZiB5b3UgY2hhbmdlIHRoaXMgZnVuY3Rpb24gcGxlYXNlIGNoZWNrIHdoZXRoZXIgZHFwdXRfYmxvY2tzKCkgd29ya3MgcmlnaHQuLi4KLSAqLwotdm9pZCBkcXB1dChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWludCByZXQ7Ci0KLQlpZiAoIWRxdW90KQotCQlyZXR1cm47Ci0jaWZkZWYgX19EUVVPVF9QQVJBTk9JQQotCWlmICghYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkpIHsKLQkJcHJpbnRrKCJWRlM6IGRxcHV0OiB0cnlpbmcgdG8gZnJlZSBmcmVlIGRxdW90XG4iKTsKLQkJcHJpbnRrKCJWRlM6IGRldmljZSAlcywgZHF1b3Qgb2YgJXMgJWRcbiIsCi0JCQlkcXVvdC0+ZHFfc2ItPnNfaWQsCi0JCQlxdW90YXR5cGVzW2RxdW90LT5kcV90eXBlXSwKLQkJCWRxdW90LT5kcV9pZCk7Ci0JCUJVRygpOwotCX0KLSNlbmRpZgotCQotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlkcXN0YXRzLmRyb3BzKys7Ci0Jc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci13ZV9zbGVwdDoKLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpID4gMSkgewotCQkvKiBXZSBoYXZlIG1vcmUgdGhhbiBvbmUgdXNlci4uLiBub3RoaW5nIHRvIGRvICovCi0JCWF0b21pY19kZWMoJmRxdW90LT5kcV9jb3VudCk7Ci0JCS8qIFJlbGVhc2luZyBkcXVvdCBkdXJpbmcgcXVvdGFvZmYgcGhhc2U/ICovCi0JCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSAmJgotCQkgICAgYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPT0gMSkKLQkJCXdha2VfdXAoJmRxdW90LT5kcV93YWl0X3VudXNlZCk7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQlyZXR1cm47Ci0JfQotCS8qIE5lZWQgdG8gcmVsZWFzZSBkcXVvdD8gKi8KLQlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmIGRxdW90X2RpcnR5KGRxdW90KSkgewotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJLyogQ29tbWl0IGRxdW90IGJlZm9yZSByZWxlYXNpbmcgKi8KLQkJcmV0ID0gZHF1b3QtPmRxX3NiLT5kcV9vcC0+d3JpdGVfZHF1b3QoZHF1b3QpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGNhbm5vdCB3cml0ZSBxdW90YSBzdHJ1Y3R1cmUgb24gIgotCQkJCSJkZXZpY2UgJXMgKGVycm9yICVkKS4gUXVvdGEgbWF5IGdldCBvdXQgb2YgIgotCQkJCSJzeW5jIVxuIiwgZHF1b3QtPmRxX3NiLT5zX2lkLCByZXQpOwotCQkJLyoKLQkJCSAqIFdlIGNsZWFyIGRpcnR5IGJpdCBhbnl3YXksIHNvIHRoYXQgd2UgYXZvaWQKLQkJCSAqIGluZmluaXRlIGxvb3AgaGVyZQotCQkJICovCi0JCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JCQljbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCk7Ci0JCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJfQotCQlnb3RvIHdlX3NsZXB0OwotCX0KLQkvKiBDbGVhciBmbGFnIGluIGNhc2UgZHF1b3Qgd2FzIGluYWN0aXZlIChzb21ldGhpbmcgYmFkIGhhcHBlbmVkKSAqLwotCWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KTsKLQlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQlkcXVvdC0+ZHFfc2ItPmRxX29wLT5yZWxlYXNlX2RxdW90KGRxdW90KTsKLQkJZ290byB3ZV9zbGVwdDsKLQl9Ci0JYXRvbWljX2RlYygmZHF1b3QtPmRxX2NvdW50KTsKLSNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCi0JLyogc2FuaXR5IGNoZWNrICovCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZkcXVvdC0+ZHFfZnJlZSkpOwotI2VuZGlmCi0JcHV0X2RxdW90X2xhc3QoZHF1b3QpOwotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotfQotCi1zdHJ1Y3QgZHF1b3QgKmRxdW90X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXJldHVybiBrbWVtX2NhY2hlX3phbGxvYyhkcXVvdF9jYWNoZXAsIEdGUF9OT0ZTKTsKLX0KLUVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2MpOwotCi1zdGF0aWMgc3RydWN0IGRxdW90ICpnZXRfZW1wdHlfZHF1b3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGRxdW90ICpkcXVvdDsKLQotCWRxdW90ID0gc2ItPmRxX29wLT5hbGxvY19kcXVvdChzYiwgdHlwZSk7Ci0JaWYoIWRxdW90KQotCQlyZXR1cm4gTk9EUVVPVDsKLQotCW11dGV4X2luaXQoJmRxdW90LT5kcV9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmZHF1b3QtPmRxX2ZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZkcXVvdC0+ZHFfaW51c2UpOwotCUlOSVRfSExJU1RfTk9ERSgmZHF1b3QtPmRxX2hhc2gpOwotCUlOSVRfTElTVF9IRUFEKCZkcXVvdC0+ZHFfZGlydHkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRxdW90LT5kcV93YWl0X3VudXNlZCk7Ci0JZHF1b3QtPmRxX3NiID0gc2I7Ci0JZHF1b3QtPmRxX3R5cGUgPSB0eXBlOwotCWF0b21pY19zZXQoJmRxdW90LT5kcV9jb3VudCwgMSk7Ci0KLQlyZXR1cm4gZHF1b3Q7Ci19Ci0KLS8qCi0gKiBHZXQgcmVmZXJlbmNlIHRvIGRxdW90Ci0gKgotICogTG9ja2luZyBpcyBzbGlnaHRseSB0cmlja3kgaGVyZS4gV2UgYXJlIGd1YXJkZWQgZnJvbSBwYXJhbGxlbCBxdW90YW9mZigpCi0gKiBkZXN0cm95aW5nIG91ciBkcXVvdCBieToKLSAqICAgYSkgY2hlY2tpbmcgZm9yIHF1b3RhIGZsYWdzIHVuZGVyIGRxX2xpc3RfbG9jayBhbmQKLSAqICAgYikgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byBkcXVvdCBiZWZvcmUgd2UgcmVsZWFzZSBkcV9saXN0X2xvY2sKLSAqLwotc3RydWN0IGRxdW90ICpkcWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQotewotCXVuc2lnbmVkIGludCBoYXNoZW50ID0gaGFzaGZuKHNiLCBpZCwgdHlwZSk7Ci0Jc3RydWN0IGRxdW90ICpkcXVvdCA9IE5PRFFVT1QsICplbXB0eSA9IE5PRFFVT1Q7Ci0KLSAgICAgICAgaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKLQkJcmV0dXJuIE5PRFFVT1Q7Ci13ZV9zbGVwdDoKLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0Jc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCWdvdG8gb3V0OwotCX0KLQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7Ci0KLQlpZiAoKGRxdW90ID0gZmluZF9kcXVvdChoYXNoZW50LCBzYiwgaWQsIHR5cGUpKSA9PSBOT0RRVU9UKSB7Ci0JCWlmIChlbXB0eSA9PSBOT0RRVU9UKSB7Ci0JCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJCWlmICgoZW1wdHkgPSBnZXRfZW1wdHlfZHF1b3Qoc2IsIHR5cGUpKSA9PSBOT0RRVU9UKQotCQkJCXNjaGVkdWxlKCk7CS8qIFRyeSB0byB3YWl0IGZvciBhIG1vbWVudC4uLiAqLwotCQkJZ290byB3ZV9zbGVwdDsKLQkJfQotCQlkcXVvdCA9IGVtcHR5OwotCQllbXB0eSA9IE5PRFFVT1Q7Ci0JCWRxdW90LT5kcV9pZCA9IGlkOwotCQkvKiBhbGwgZHF1b3RzIGdvIG9uIHRoZSBpbnVzZV9saXN0ICovCi0JCXB1dF9pbnVzZShkcXVvdCk7Ci0JCS8qIGhhc2ggaXQgZmlyc3Qgc28gaXQgY2FuIGJlIGZvdW5kICovCi0JCWluc2VydF9kcXVvdF9oYXNoKGRxdW90KTsKLQkJZHFzdGF0cy5sb29rdXBzKys7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCX0gZWxzZSB7Ci0JCWlmICghYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkpCi0JCQlyZW1vdmVfZnJlZV9kcXVvdChkcXVvdCk7Ci0JCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7Ci0JCWRxc3RhdHMuY2FjaGVfaGl0cysrOwotCQlkcXN0YXRzLmxvb2t1cHMrKzsKLQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JfQotCS8qIFdhaXQgZm9yIGRxX2xvY2sgLSBhZnRlciB0aGlzIHdlIGtub3cgdGhhdCBlaXRoZXIgZHF1b3RfcmVsZWFzZSgpIGlzIGFscmVhZHkKLQkgKiBmaW5pc2hlZCBvciBpdCB3aWxsIGJlIGNhbmNlbGVkIGR1ZSB0byBkcV9jb3VudCA+IDEgdGVzdCAqLwotCXdhaXRfb25fZHF1b3QoZHF1b3QpOwotCS8qIFJlYWQgdGhlIGRxdW90IGFuZCBpbnN0YW50aWF0ZSBpdCAoZXZlcnl0aGluZyBkb25lIG9ubHkgaWYgbmVlZGVkKSAqLwotCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmIHNiLT5kcV9vcC0+YWNxdWlyZV9kcXVvdChkcXVvdCkgPCAwKSB7Ci0JCWRxcHV0KGRxdW90KTsKLQkJZHF1b3QgPSBOT0RRVU9UOwotCQlnb3RvIG91dDsKLQl9Ci0jaWZkZWYgX19EUVVPVF9QQVJBTk9JQQotCUJVR19PTighZHF1b3QtPmRxX3NiKTsJLyogSGFzIHNvbWVib2R5IGludmFsaWRhdGVkIGVudHJ5IHVuZGVyIHVzPyAqLwotI2VuZGlmCi1vdXQ6Ci0JaWYgKGVtcHR5KQotCQlkb19kZXN0cm95X2RxdW90KGVtcHR5KTsKLQotCXJldHVybiBkcXVvdDsKLX0KLQotc3RhdGljIGludCBkcWluaXRfbmVlZGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCWludCBjbnQ7Ci0KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCXJldHVybiAwOwotCWlmICh0eXBlICE9IC0xKQotCQlyZXR1cm4gaW5vZGUtPmlfZHF1b3RbdHlwZV0gPT0gTk9EUVVPVDsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCi0JCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyByb3V0aW5lIGlzIGd1YXJkZWQgYnkgZHFvbm9mZl9tdXRleCBtdXRleCAqLwotc3RhdGljIHZvaWQgYWRkX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqb2xkX2lub2RlID0gTlVMTDsKLQotCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpKQotCQkJY29udGludWU7Ci0JCWlmICghZHFpbml0X25lZWRlZChpbm9kZSwgdHlwZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRSkpCi0JCQljb250aW51ZTsKLQotCQlfX2lnZXQoaW5vZGUpOwotCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0KLQkJaXB1dChvbGRfaW5vZGUpOwotCQlzYi0+ZHFfb3AtPmluaXRpYWxpemUoaW5vZGUsIHR5cGUpOwotCQkvKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvICdpbm9kZScgc28gaXQgY291bGRuJ3QgaGF2ZSBiZWVuCi0JCSAqIHJlbW92ZWQgZnJvbSBzX2lub2RlcyBsaXN0IHdoaWxlIHdlIGRyb3BwZWQgdGhlIGlub2RlX2xvY2suCi0JCSAqIFdlIGNhbm5vdCBpcHV0IHRoZSBpbm9kZSBub3cgYXMgd2UgY2FuIGJlIGhvbGRpbmcgdGhlIGxhc3QKLQkJICogcmVmZXJlbmNlIGFuZCB3ZSBjYW5ub3QgaXB1dCBpdCB1bmRlciBpbm9kZV9sb2NrLiBTbyB3ZQotCQkgKiBrZWVwIHRoZSByZWZlcmVuY2UgYW5kIGlwdXQgaXQgbGF0ZXIuICovCi0JCW9sZF9pbm9kZSA9IGlub2RlOwotCQlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCX0KLQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0JaXB1dChvbGRfaW5vZGUpOwotfQotCi0vKiBSZXR1cm4gMCBpZiBkcXB1dCgpIHdvbid0IGJsb2NrIChub3RlIHRoYXQgMSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gYmxvY2tpbmcpICovCi1zdGF0aWMgaW5saW5lIGludCBkcXB1dF9ibG9ja3Moc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPD0gMSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlbW92ZSByZWZlcmVuY2VzIHRvIGRxdW90cyBmcm9tIGlub2RlIC0gYWRkIGRxdW90IHRvIGxpc3QgZm9yIGZyZWVpbmcgaWYgbmVlZGVkICovCi0vKiBXZSBjYW4ndCByYWNlIHdpdGggYW55Ym9keSBiZWNhdXNlIHdlIGhvbGQgZHFwdHJfc2VtIGZvciB3cml0aW5nLi4uICovCi1zdGF0aWMgaW50IHJlbW92ZV9pbm9kZV9kcXVvdF9yZWYoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKLXsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90ID0gaW5vZGUtPmlfZHF1b3RbdHlwZV07Ci0KLQlpbm9kZS0+aV9kcXVvdFt0eXBlXSA9IE5PRFFVT1Q7Ci0JaWYgKGRxdW90ICE9IE5PRFFVT1QpIHsKLQkJaWYgKGRxcHV0X2Jsb2NrcyhkcXVvdCkpIHsKLSNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCi0JCQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgIT0gMSkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IEFkZGluZyBkcXVvdCB3aXRoIGRxX2NvdW50ICVkIHRvIGRpc3Bvc2UgbGlzdC5cbiIsIGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKTsKLSNlbmRpZgotCQkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCQkJbGlzdF9hZGQoJmRxdW90LT5kcV9mcmVlLCB0b2ZyZWVfaGVhZCk7CS8qIEFzIGRxdW90IG11c3QgaGF2ZSBjdXJyZW50bHkgdXNlcnMgaXQgY2FuJ3QgYmUgb24gdGhlIGZyZWUgbGlzdC4uLiAqLwotCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQllbHNlCi0JCQlkcXB1dChkcXVvdCk7ICAgLyogV2UgaGF2ZSBndWFyYW50ZWVkIHdlIHdvbid0IGJsb2NrICovCi0JfQotCXJldHVybiAwOwotfQotCi0vKiBGcmVlIGxpc3Qgb2YgZHF1b3RzIC0gY2FsbGVkIGZyb20gaW5vZGUuYyAqLwotLyogZHF1b3RzIGFyZSByZW1vdmVkIGZyb20gaW5vZGVzLCBubyBuZXcgcmVmZXJlbmNlcyBjYW4gYmUgZ290IHNvIHdlIGFyZSB0aGUgb25seSBvbmVzIGhvbGRpbmcgcmVmZXJlbmNlICovCi1zdGF0aWMgdm9pZCBwdXRfZHF1b3RfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICphY3RfaGVhZDsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90OwotCi0JYWN0X2hlYWQgPSB0b2ZyZWVfaGVhZC0+bmV4dDsKLQkvKiBTbyBub3cgd2UgaGF2ZSBkcXVvdHMgb24gdGhlIGxpc3QuLi4gSnVzdCBmcmVlIHRoZW0gKi8KLQl3aGlsZSAoYWN0X2hlYWQgIT0gdG9mcmVlX2hlYWQpIHsKLQkJZHF1b3QgPSBsaXN0X2VudHJ5KGFjdF9oZWFkLCBzdHJ1Y3QgZHF1b3QsIGRxX2ZyZWUpOwotCQlhY3RfaGVhZCA9IGFjdF9oZWFkLT5uZXh0OwotCQlsaXN0X2RlbF9pbml0KCZkcXVvdC0+ZHFfZnJlZSk7CS8qIFJlbW92ZSBkcXVvdCBmcm9tIHRoZSBsaXN0IHNvIHdlIHdvbid0IGhhdmUgcHJvYmxlbXMuLi4gKi8KLQkJZHFwdXQoZHF1b3QpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwKLQkJc3RydWN0IGxpc3RfaGVhZCAqdG9mcmVlX2hlYWQpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmICghSVNfTk9RVU9UQShpbm9kZSkpCi0JCQlyZW1vdmVfaW5vZGVfZHF1b3RfcmVmKGlub2RlLCB0eXBlLCB0b2ZyZWVfaGVhZCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKLX0KLQotLyogR2F0aGVyIGFsbCByZWZlcmVuY2VzIGZyb20gaW5vZGVzIGFuZCBkcm9wIHRoZW0gKi8KLXN0YXRpYyB2b2lkIGRyb3BfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCUxJU1RfSEVBRCh0b2ZyZWVfaGVhZCk7Ci0KLQlpZiAoc2ItPmRxX29wKSB7Ci0JCWRvd25fd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkJcmVtb3ZlX2RxdW90X3JlZihzYiwgdHlwZSwgJnRvZnJlZV9oZWFkKTsKLQkJdXBfd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkJcHV0X2RxdW90X2xpc3QoJnRvZnJlZV9oZWFkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9pbmNyX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKLXsKLQlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgKz0gbnVtYmVyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfaW5jcl9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKLXsKLQlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArPSBudW1iZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9kZWNyX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKLXsKLQlpZiAoc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmxhZ3MgJiBEUVVPVF9ORUdBVElWRV9VU0FHRSB8fAotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgPj0gbnVtYmVyKQotCQlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgLT0gbnVtYmVyOwotCWVsc2UKLQkJZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID0gMDsKLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIDw9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpCi0JCWRxdW90LT5kcV9kcWIuZHFiX2l0aW1lID0gKHRpbWVfdCkgMDsKLQljbGVhcl9iaXQoRFFfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfZGVjcl9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKLXsKLQlpZiAoc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmxhZ3MgJiBEUVVPVF9ORUdBVElWRV9VU0FHRSB8fAotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA+PSBudW1iZXIpCi0JCWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIC09IG51bWJlcjsKLQllbHNlCi0JCWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlID0gMDsKLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPD0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkKLQkJZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgPSAodGltZV90KSAwOwotCWNsZWFyX2JpdChEUV9CTEtTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHdhcm5pbmdfaXNzdWVkKHN0cnVjdCBkcXVvdCAqZHF1b3QsIGNvbnN0IGludCB3YXJudHlwZSkKLXsKLQlpbnQgZmxhZyA9ICh3YXJudHlwZSA9PSBRVU9UQV9OTF9CSEFSRFdBUk4gfHwKLQkJd2FybnR5cGUgPT0gUVVPVEFfTkxfQlNPRlRMT05HV0FSTikgPyBEUV9CTEtTX0IgOgotCQkoKHdhcm50eXBlID09IFFVT1RBX05MX0lIQVJEV0FSTiB8fAotCQl3YXJudHlwZSA9PSBRVU9UQV9OTF9JU09GVExPTkdXQVJOKSA/IERRX0lOT0RFU19CIDogMCk7Ci0KLQlpZiAoIWZsYWcpCi0JCXJldHVybiAwOwotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KGZsYWcsICZkcXVvdC0+ZHFfZmxhZ3MpOwotfQotCi0jaWZkZWYgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcKLXN0YXRpYyBpbnQgZmxhZ19wcmludF93YXJuaW5ncyA9IDE7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5lZWRfcHJpbnRfd2FybmluZyhzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWlmICghZmxhZ19wcmludF93YXJuaW5ncykKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGRxdW90LT5kcV90eXBlKSB7Ci0JCWNhc2UgVVNSUVVPVEE6Ci0JCQlyZXR1cm4gY3VycmVudF9mc3VpZCgpID09IGRxdW90LT5kcV9pZDsKLQkJY2FzZSBHUlBRVU9UQToKLQkJCXJldHVybiBpbl9ncm91cF9wKGRxdW90LT5kcV9pZCk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBQcmludCB3YXJuaW5nIHRvIHVzZXIgd2hpY2ggZXhjZWVkZWQgcXVvdGEgKi8KLXN0YXRpYyB2b2lkIHByaW50X3dhcm5pbmcoc3RydWN0IGRxdW90ICpkcXVvdCwgY29uc3QgaW50IHdhcm50eXBlKQotewotCWNoYXIgKm1zZyA9IE5VTEw7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQotCWlmICh3YXJudHlwZSA9PSBRVU9UQV9OTF9JSEFSREJFTE9XIHx8Ci0JICAgIHdhcm50eXBlID09IFFVT1RBX05MX0lTT0ZUQkVMT1cgfHwKLQkgICAgd2FybnR5cGUgPT0gUVVPVEFfTkxfQkhBUkRCRUxPVyB8fAotCSAgICB3YXJudHlwZSA9PSBRVU9UQV9OTF9CU09GVEJFTE9XIHx8ICFuZWVkX3ByaW50X3dhcm5pbmcoZHF1b3QpKQotCQlyZXR1cm47Ci0KLQl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKLQlpZiAoIXR0eSkKLQkJcmV0dXJuOwotCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgZHF1b3QtPmRxX3NiLT5zX2lkKTsKLQlpZiAod2FybnR5cGUgPT0gUVVPVEFfTkxfSVNPRlRXQVJOIHx8IHdhcm50eXBlID09IFFVT1RBX05MX0JTT0ZUV0FSTikKLQkJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCAiOiB3YXJuaW5nLCAiKTsKLQllbHNlCi0JCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgIjogd3JpdGUgZmFpbGVkLCAiKTsKLQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIHF1b3RhdHlwZXNbZHF1b3QtPmRxX3R5cGVdKTsKLQlzd2l0Y2ggKHdhcm50eXBlKSB7Ci0JCWNhc2UgUVVPVEFfTkxfSUhBUkRXQVJOOgotCQkJbXNnID0gIiBmaWxlIGxpbWl0IHJlYWNoZWQuXHJcbiI7Ci0JCQlicmVhazsKLQkJY2FzZSBRVU9UQV9OTF9JU09GVExPTkdXQVJOOgotCQkJbXNnID0gIiBmaWxlIHF1b3RhIGV4Y2VlZGVkIHRvbyBsb25nLlxyXG4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgUVVPVEFfTkxfSVNPRlRXQVJOOgotCQkJbXNnID0gIiBmaWxlIHF1b3RhIGV4Y2VlZGVkLlxyXG4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgUVVPVEFfTkxfQkhBUkRXQVJOOgotCQkJbXNnID0gIiBibG9jayBsaW1pdCByZWFjaGVkLlxyXG4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgUVVPVEFfTkxfQlNPRlRMT05HV0FSTjoKLQkJCW1zZyA9ICIgYmxvY2sgcXVvdGEgZXhjZWVkZWQgdG9vIGxvbmcuXHJcbiI7Ci0JCQlicmVhazsKLQkJY2FzZSBRVU9UQV9OTF9CU09GVFdBUk46Ci0JCQltc2cgPSAiIGJsb2NrIHF1b3RhIGV4Y2VlZGVkLlxyXG4iOwotCQkJYnJlYWs7Ci0JfQotCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgbXNnKTsKLQl0dHlfa3JlZl9wdXQodHR5KTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCi0KLS8qIE5ldGxpbmsgZmFtaWx5IHN0cnVjdHVyZSBmb3IgcXVvdGEgKi8KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgcXVvdGFfZ2VubF9mYW1pbHkgPSB7Ci0JLmlkID0gR0VOTF9JRF9HRU5FUkFURSwKLQkuaGRyc2l6ZSA9IDAsCi0JLm5hbWUgPSAiVkZTX0RRVU9UIiwKLQkudmVyc2lvbiA9IDEsCi0JLm1heGF0dHIgPSBRVU9UQV9OTF9BX01BWCwKLX07Ci0KLS8qIFNlbmQgd2FybmluZyB0byB1c2Vyc3BhY2UgYWJvdXQgdXNlciB3aGljaCBleGNlZWRlZCBxdW90YSAqLwotc3RhdGljIHZvaWQgc2VuZF93YXJuaW5nKGNvbnN0IHN0cnVjdCBkcXVvdCAqZHF1b3QsIGNvbnN0IGNoYXIgd2FybnR5cGUpCi17Ci0Jc3RhdGljIGF0b21pY190IHNlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXZvaWQgKm1zZ19oZWFkOwotCWludCByZXQ7Ci0JaW50IG1zZ19zaXplID0gNCAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArCi0JCSAgICAgICAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpOwotCi0JLyogV2UgaGF2ZSB0byBhbGxvY2F0ZSB1c2luZyBHRlBfTk9GUyBhcyB3ZSBhcmUgY2FsbGVkIGZyb20gYQotCSAqIGZpbGVzeXN0ZW0gcGVyZm9ybWluZyB3cml0ZSBhbmQgdGh1cyBmdXJ0aGVyIHJlY3Vyc2lvbiBpbnRvCi0JICogdGhlIGZzIHRvIGZyZWUgc29tZSBkYXRhIGNvdWxkIGNhdXNlIGRlYWRsb2Nrcy4gKi8KLQlza2IgPSBnZW5sbXNnX25ldyhtc2dfc2l6ZSwgR0ZQX05PRlMpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICJWRlM6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHNlbmQgcXVvdGEgd2FybmluZy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCW1zZ19oZWFkID0gZ2VubG1zZ19wdXQoc2tiLCAwLCBhdG9taWNfYWRkX3JldHVybigxLCAmc2VxKSwKLQkJCSZxdW90YV9nZW5sX2ZhbWlseSwgMCwgUVVPVEFfTkxfQ19XQVJOSU5HKTsKLQlpZiAoIW1zZ19oZWFkKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICJWRlM6IENhbm5vdCBzdG9yZSBuZXRsaW5rIGhlYWRlciBpbiBxdW90YSB3YXJuaW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX1FUWVBFLCBkcXVvdC0+ZHFfdHlwZSk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91NjQoc2tiLCBRVU9UQV9OTF9BX0VYQ0VTU19JRCwgZHF1b3QtPmRxX2lkKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfV0FSTklORywgd2FybnR5cGUpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9ERVZfTUFKT1IsCi0JCU1BSk9SKGRxdW90LT5kcV9zYi0+c19kZXYpKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfREVWX01JTk9SLAotCQlNSU5PUihkcXVvdC0+ZHFfc2ItPnNfZGV2KSk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91NjQoc2tiLCBRVU9UQV9OTF9BX0NBVVNFRF9JRCwgY3VycmVudF91aWQoKSk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7Ci0KLQlyZXQgPSBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHF1b3RhX2dlbmxfZmFtaWx5LmlkLCBHRlBfTk9GUyk7Ci0JaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FU1JDSCkKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVkZTOiBGYWlsZWQgdG8gc2VuZCBub3RpZmljYXRpb24gbWVzc2FnZTogJWRcbiIsIHJldCk7Ci0JcmV0dXJuOwotYXR0cl9lcnJfb3V0OgotCXByaW50ayhLRVJOX0VSUiAiVkZTOiBOb3QgZW5vdWdoIHNwYWNlIHRvIGNvbXBvc2UgcXVvdGEgbWVzc2FnZSFcbiIpOwotZXJyX291dDoKLQlrZnJlZV9za2Ioc2tiKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfd2FybmluZ3Moc3RydWN0IGRxdW90ICogY29uc3QgKmRxdW90cywgY2hhciAqd2FybnR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspCi0JCWlmIChkcXVvdHNbaV0gIT0gTk9EUVVPVCAmJiB3YXJudHlwZVtpXSAhPSBRVU9UQV9OTF9OT1dBUk4gJiYKLQkJICAgICF3YXJuaW5nX2lzc3VlZChkcXVvdHNbaV0sIHdhcm50eXBlW2ldKSkgewotI2lmZGVmIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HCi0JCQlwcmludF93YXJuaW5nKGRxdW90c1tpXSwgd2FybnR5cGVbaV0pOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCi0JCQlzZW5kX3dhcm5pbmcoZHF1b3RzW2ldLCB3YXJudHlwZVtpXSk7Ci0jZW5kaWYKLQkJfQotfQotCi1zdGF0aWMgaW5saW5lIGNoYXIgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gJnNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdOwotCi0JcmV0dXJuIGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkgJiYKLQkgICAgKGluZm8tPmRxaV9mb3JtYXQtPnFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwgIShpbmZvLT5kcWlfZmxhZ3MgJiBWMV9EUUZfUlNRVUFTSCkpOwotfQotCi0vKiBuZWVkcyBkcV9kYXRhX2xvY2sgKi8KLXN0YXRpYyBpbnQgY2hlY2tfaWRxKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLCBjaGFyICp3YXJudHlwZSkKLXsKLQkqd2FybnR5cGUgPSBRVU9UQV9OTF9OT1dBUk47Ci0JaWYgKCFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkgfHwKLQkgICAgdGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKLQkJcmV0dXJuIFFVT1RBX09LOwotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKLQkgICAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICsgaW5vZGVzKSA+IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKLSAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewotCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JSEFSRFdBUk47Ci0JCXJldHVybiBOT19RVU9UQTsKLQl9Ci0KLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgotCSAgIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgKyBpbm9kZXMpID4gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSAmJiBnZXRfc2Vjb25kcygpID49IGRxdW90LT5kcV9kcWIuZHFiX2l0aW1lICYmCi0gICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKLQkJKndhcm50eXBlID0gUVVPVEFfTkxfSVNPRlRMT05HV0FSTjsKLQkJcmV0dXJuIE5PX1FVT1RBOwotCX0KLQotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmCi0JICAgKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyArIGlub2RlcykgPiBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmCi0JICAgIGRxdW90LT5kcV9kcWIuZHFiX2l0aW1lID09IDApIHsKLQkJKndhcm50eXBlID0gUVVPVEFfTkxfSVNPRlRXQVJOOwotCQlkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSA9IGdldF9zZWNvbmRzKCkgKyBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfaWdyYWNlOwotCX0KLQotCXJldHVybiBRVU9UQV9PSzsKLX0KLQotLyogbmVlZHMgZHFfZGF0YV9sb2NrICovCi1zdGF0aWMgaW50IGNoZWNrX2JkcShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IHNwYWNlLCBpbnQgcHJlYWxsb2MsIGNoYXIgKndhcm50eXBlKQotewotCSp3YXJudHlwZSA9IFFVT1RBX05MX05PV0FSTjsKLQlpZiAoIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSB8fAotCSAgICB0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQotCQlyZXR1cm4gUVVPVEFfT0s7Ci0KLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArIHNwYWNlID4gZHF1b3QtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdCAmJgotICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7Ci0JCWlmICghcHJlYWxsb2MpCi0JCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CSEFSRFdBUk47Ci0JCXJldHVybiBOT19RVU9UQTsKLQl9Ci0KLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArIHNwYWNlID4gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSAmJiBnZXRfc2Vjb25kcygpID49IGRxdW90LT5kcV9kcWIuZHFiX2J0aW1lICYmCi0gICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKLQkJaWYgKCFwcmVhbGxvYykKLQkJCSp3YXJudHlwZSA9IFFVT1RBX05MX0JTT0ZUTE9OR1dBUk47Ci0JCXJldHVybiBOT19RVU9UQTsKLQl9Ci0KLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArIHNwYWNlID4gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSA9PSAwKSB7Ci0JCWlmICghcHJlYWxsb2MpIHsKLQkJCSp3YXJudHlwZSA9IFFVT1RBX05MX0JTT0ZUV0FSTjsKLQkJCWRxdW90LT5kcV9kcWIuZHFiX2J0aW1lID0gZ2V0X3NlY29uZHMoKSArIHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdLmRxaV9iZ3JhY2U7Ci0JCX0KLQkJZWxzZQotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGFsbG93IHByZWFsbG9jYXRpb24gdG8gZXhjZWVkIHNvZnRsaW1pdCBzbyBleGNlZWRpbmcgd2lsbAotCQkJICogYmUgYWx3YXlzIHByaW50ZWQKLQkJCSAqLwotCQkJcmV0dXJuIE5PX1FVT1RBOwotCX0KLQotCXJldHVybiBRVU9UQV9PSzsKLX0KLQotc3RhdGljIGludCBpbmZvX2lkcV9mcmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzKQotewotCWlmICh0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpIHx8Ci0JICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0IHx8Ci0JICAgICFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkpCi0JCXJldHVybiBRVU9UQV9OTF9OT1dBUk47Ci0KLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIC0gaW5vZGVzIDw9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpCi0JCXJldHVybiBRVU9UQV9OTF9JU09GVEJFTE9XOwotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgPj0gZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgLSBpbm9kZXMgPCBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0KQotCQlyZXR1cm4gUVVPVEFfTkxfSUhBUkRCRUxPVzsKLQlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOwotfQotCi1zdGF0aWMgaW50IGluZm9fYmRxX2ZyZWUoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSkKLXsKLQlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSB8fAotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0KQotCQlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOwotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIC0gc3BhY2UgPD0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkKLQkJcmV0dXJuIFFVT1RBX05MX0JTT0ZUQkVMT1c7Ci0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlID49IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgLSBzcGFjZSA8IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQpCi0JCXJldHVybiBRVU9UQV9OTF9CSEFSREJFTE9XOwotCXJldHVybiBRVU9UQV9OTF9OT1dBUk47Ci19Ci0vKgotICoJSW5pdGlhbGl6ZSBxdW90YSBwb2ludGVycyBpbiBpbm9kZQotICoJV2UgZG8gdGhpbmdzIGluIGEgYml0IGNvbXBsaWNhdGVkIHdheSBidXQgYnkgdGhhdCB3ZSBhdm9pZCBjYWxsaW5nCi0gKglkcWdldCgpIGFuZCB0aHVzIGZpbGVzeXN0ZW0gY2FsbGJhY2tzIHVuZGVyIGRxcHRyX3NlbS4KLSAqLwotaW50IGRxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCi17Ci0JdW5zaWduZWQgaW50IGlkID0gMDsKLQlpbnQgY250LCByZXQgPSAwOwotCXN0cnVjdCBkcXVvdCAqZ290W01BWFFVT1RBU10gPSB7IE5PRFFVT1QsIE5PRFFVT1QgfTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0KLQkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQotCS8qIEZpcnN0IGdldCByZWZlcmVuY2VzIHRvIHN0cnVjdHVyZXMgd2UgbWlnaHQgbmVlZC4gKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHR5cGUgIT0gLTEgJiYgY250ICE9IHR5cGUpCi0JCQljb250aW51ZTsKLQkJc3dpdGNoIChjbnQpIHsKLQkJY2FzZSBVU1JRVU9UQToKLQkJCWlkID0gaW5vZGUtPmlfdWlkOwotCQkJYnJlYWs7Ci0JCWNhc2UgR1JQUVVPVEE6Ci0JCQlpZCA9IGlub2RlLT5pX2dpZDsKLQkJCWJyZWFrOwotCQl9Ci0JCWdvdFtjbnRdID0gZHFnZXQoc2IsIGlkLCBjbnQpOwotCX0KLQotCWRvd25fd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkvKiBIYXZpbmcgZHFwdHJfc2VtIHdlIGtub3cgTk9RVU9UQSBmbGFncyBjYW4ndCBiZSBhbHRlcmVkLi4uICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlnb3RvIG91dF9lcnI7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCS8qIEF2b2lkIHJhY2VzIHdpdGggcXVvdGFvZmYoKSAqLwotCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCi0JCQljb250aW51ZTsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gPT0gTk9EUVVPVCkgewotCQkJaW5vZGUtPmlfZHF1b3RbY250XSA9IGdvdFtjbnRdOwotCQkJZ290W2NudF0gPSBOT0RRVU9UOwotCQl9Ci0JfQotb3V0X2VycjoKLQl1cF93cml0ZSgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwotCS8qIERyb3AgdW51c2VkIHJlZmVyZW5jZXMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWRxcHV0KGdvdFtjbnRdKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogCVJlbGVhc2UgYWxsIHF1b3RhcyByZWZlcmVuY2VkIGJ5IGlub2RlCi0gKi8KLWludCBkcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW50IGNudDsKLQlzdHJ1Y3QgZHF1b3QgKnB1dFtNQVhRVU9UQVNdOwotCi0JZG93bl93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlwdXRbY250XSA9IGlub2RlLT5pX2RxdW90W2NudF07Ci0JCWlub2RlLT5pX2RxdW90W2NudF0gPSBOT0RRVU9UOwotCX0KLQl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChwdXRbY250XSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFdyYXBwZXIgdG8gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gcXVvdGEgc3RydWN0dXJlcyBmcm9tIGlub2RlICovCi12b2lkIHZmc19kcV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JLyogSGVyZSB3ZSBjYW4gZ2V0IGFyYml0cmFyeSBpbm9kZSBmcm9tIGNsZWFyX2lub2RlKCkgc28gd2UgaGF2ZQotCSAqIHRvIGJlIGNhcmVmdWwuIE9UT0ggd2UgZG9uJ3QgbmVlZCBsb2NraW5nIGFzIHF1b3RhIG9wZXJhdGlvbnMKLQkgKiBhcmUgYWxsb3dlZCB0byBjaGFuZ2Ugb25seSBhdCBtb3VudCB0aW1lICovCi0JaWYgKCFJU19OT1FVT1RBKGlub2RlKSAmJiBpbm9kZS0+aV9zYiAmJiBpbm9kZS0+aV9zYi0+ZHFfb3AKLQkgICAgJiYgaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKSB7Ci0JCWludCBjbnQ7Ci0JCS8qIFRlc3QgYmVmb3JlIGNhbGxpbmcgdG8gcnVsZSBvdXQgY2FsbHMgZnJvbSBwcm9jIGFuZCBzdWNoCi0gICAgICAgICAgICAgICAgICogd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGJsb2NrLiBOb3RlIHRoYXQgdGhpcyBpcwotCQkgKiBhY3R1YWxseSByZWxpYWJsZSB0ZXN0IGV2ZW4gd2l0aG91dCB0aGUgbG9jayAtIHRoZSBjYWxsZXIKLQkJICogbXVzdCBhc3N1cmUgdGhhdCBub2JvZHkgY2FuIGNvbWUgYWZ0ZXIgdGhlIERRVU9UX0RST1AgYW5kCi0JCSAqIGFkZCBxdW90YSBwb2ludGVycyBiYWNrIGFueXdheSAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSAhPSBOT0RRVU9UKQotCQkJCWJyZWFrOwotCQlpZiAoY250IDwgTUFYUVVPVEFTKQotCQkJaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKLQl9Ci19Ci0KLS8qCi0gKiBGb2xsb3dpbmcgZm91ciBmdW5jdGlvbnMgdXBkYXRlIGlfYmxvY2tzK2lfYnl0ZXMgZmllbGRzIGFuZAotICogcXVvdGEgaW5mb3JtYXRpb24gKHRvZ2V0aGVyIHdpdGggYXBwcm9wcmlhdGUgY2hlY2tzKQotICogTk9URTogV2UgYWJzb2x1dGVseSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgY2FsbGVyIGRpcnRpZXMKLSAqIHRoZSBpbm9kZSAodXN1YWxseSBtYWNyb3MgaW4gcXVvdGFvcHMuaCBjYXJlIGFib3V0IHRoaXMpIGFuZAotICogaG9sZHMgYSBoYW5kbGUgZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgZHF1b3Qgd3JpdGUgYW5kCi0gKiBpbm9kZSB3cml0ZSBnbyBpbnRvIHRoZSBzYW1lIHRyYW5zYWN0aW9uLgotICovCi0KLS8qCi0gKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAotICovCi1pbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQotewotCWludCBjbnQsIHJldCA9IE5PX1FVT1RBOwotCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKLQotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLW91dF9hZGQ6Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLQkJcmV0dXJuIFFVT1RBX09LOwotCX0KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsJLyogTm93IHdlIGNhbiBkbyByZWxpYWJsZSB0ZXN0Li4uICovCi0JCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkJZ290byBvdXRfYWRkOwotCX0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCi0JCQljb250aW51ZTsKLQkJaWYgKGNoZWNrX2JkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm4sIHdhcm50eXBlK2NudCkgPT0gTk9fUVVPVEEpCi0JCQlnb3RvIHdhcm5fcHV0X2FsbDsKLQl9Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCi0JCQljb250aW51ZTsKLQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCX0KLQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Ci0JcmV0ID0gUVVPVEFfT0s7Ci13YXJuX3B1dF9hbGw6Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JaWYgKHJldCA9PSBRVU9UQV9PSykKLQkJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKLQlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwotCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKLSAqLwotaW50IGRxdW90X2FsbG9jX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQotewotCWludCBjbnQsIHJldCA9IE5PX1FVT1RBOwotCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKLQotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCXJldHVybiBRVU9UQV9PSzsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47Ci0JZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkJcmV0dXJuIFFVT1RBX09LOwotCX0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCi0JCQljb250aW51ZTsKLQkJaWYgKGNoZWNrX2lkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm50eXBlK2NudCkgPT0gTk9fUVVPVEEpCi0JCQlnb3RvIHdhcm5fcHV0X2FsbDsKLQl9Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gPT0gTk9EUVVPVCkKLQkJCWNvbnRpbnVlOwotCQlkcXVvdF9pbmNyX2lub2Rlcyhpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCX0KLQlyZXQgPSBRVU9UQV9PSzsKLXdhcm5fcHV0X2FsbDoKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpZiAocmV0ID09IFFVT1RBX09LKQotCQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAotICovCi1pbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKLXsKLQl1bnNpZ25lZCBpbnQgY250OwotCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKLQotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLW91dF9zdWI6Ci0JCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLQkJcmV0dXJuIFFVT1RBX09LOwotCX0KLQotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCS8qIE5vdyByZWNoZWNrIHJlbGlhYmx5IHdoZW4gaG9sZGluZyBkcXB0cl9zZW0gKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlnb3RvIG91dF9zdWI7Ci0JfQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gPT0gTk9EUVVPVCkKLQkJCWNvbnRpbnVlOwotCQl3YXJudHlwZVtjbnRdID0gaW5mb19iZHFfZnJlZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCQlkcXVvdF9kZWNyX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JfQotCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCXJldHVybiBRVU9UQV9PSzsKLX0KLQotLyoKLSAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCi0gKi8KLWludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQotewotCXVuc2lnbmVkIGludCBjbnQ7Ci0JY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwotCi0JLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCi0gICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJcmV0dXJuIFFVT1RBX09LOwotCi0JZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JLyogTm93IHJlY2hlY2sgcmVsaWFibHkgd2hlbiBob2xkaW5nIGRxcHRyX3NlbSAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewotCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCXJldHVybiBRVU9UQV9PSzsKLQl9Ci0Jc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQotCQkJY29udGludWU7Ci0JCXdhcm50eXBlW2NudF0gPSBpbmZvX2lkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JfQotCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7Ci0JZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JcmV0dXJuIFFVT1RBX09LOwotfQotCi0vKgotICogVHJhbnNmZXIgdGhlIG51bWJlciBvZiBpbm9kZSBhbmQgYmxvY2tzIGZyb20gb25lIGRpc2txdW90YSB0byBhbiBvdGhlci4KLSAqCi0gKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAotICogQSB0cmFuc2FjdGlvbiBtdXN0IGJlIHN0YXJ0ZWQgd2hlbiBlbnRlcmluZyB0aGlzIGZ1bmN0aW9uLgotICovCi1pbnQgZHF1b3RfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cikKLXsKLQlxc2l6ZV90IHNwYWNlOwotCXN0cnVjdCBkcXVvdCAqdHJhbnNmZXJfZnJvbVtNQVhRVU9UQVNdOwotCXN0cnVjdCBkcXVvdCAqdHJhbnNmZXJfdG9bTUFYUVVPVEFTXTsKLQlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKLQlpbnQgY2h1aWQgPSBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBpbm9kZS0+aV91aWQgIT0gaWF0dHItPmlhX3VpZCwKLQkgICAgY2hnaWQgPSBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpbm9kZS0+aV9naWQgIT0gaWF0dHItPmlhX2dpZDsKLQljaGFyIHdhcm50eXBlX3RvW01BWFFVT1RBU107Ci0JY2hhciB3YXJudHlwZV9mcm9tX2lub2Rlc1tNQVhRVU9UQVNdLCB3YXJudHlwZV9mcm9tX3NwYWNlW01BWFFVT1RBU107Ci0KLQkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlyZXR1cm4gUVVPVEFfT0s7Ci0JLyogSW5pdGlhbGl6ZSB0aGUgYXJyYXlzICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCXRyYW5zZmVyX2Zyb21bY250XSA9IE5PRFFVT1Q7Ci0JCXRyYW5zZmVyX3RvW2NudF0gPSBOT0RRVU9UOwotCQl3YXJudHlwZV90b1tjbnRdID0gUVVPVEFfTkxfTk9XQVJOOwotCQlzd2l0Y2ggKGNudCkgewotCQkJY2FzZSBVU1JRVU9UQToKLQkJCQlpZiAoIWNodWlkKQotCQkJCQljb250aW51ZTsKLQkJCQl0cmFuc2Zlcl90b1tjbnRdID0gZHFnZXQoaW5vZGUtPmlfc2IsIGlhdHRyLT5pYV91aWQsIGNudCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEdSUFFVT1RBOgotCQkJCWlmICghY2hnaWQpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXRyYW5zZmVyX3RvW2NudF0gPSBkcWdldChpbm9kZS0+aV9zYiwgaWF0dHItPmlhX2dpZCwgY250KTsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkvKiBOb3cgcmVjaGVjayByZWxpYWJseSB3aGVuIGhvbGRpbmcgZHFwdHJfc2VtICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CS8qIEZpbGUgd2l0aG91dCBxdW90YSBhY2NvdW50aW5nPyAqLwotCQl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlnb3RvIHB1dF9hbGw7Ci0JfQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlzcGFjZSA9IGlub2RlX2dldF9ieXRlcyhpbm9kZSk7Ci0JLyogQnVpbGQgdGhlIHRyYW5zZmVyX2Zyb20gbGlzdCBhbmQgY2hlY2sgdGhlIGxpbWl0cyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAodHJhbnNmZXJfdG9bY250XSA9PSBOT0RRVU9UKQotCQkJY29udGludWU7Ci0JCXRyYW5zZmVyX2Zyb21bY250XSA9IGlub2RlLT5pX2RxdW90W2NudF07Ci0JCWlmIChjaGVja19pZHEodHJhbnNmZXJfdG9bY250XSwgMSwgd2FybnR5cGVfdG8gKyBjbnQpID09Ci0JCSAgICBOT19RVU9UQSB8fCBjaGVja19iZHEodHJhbnNmZXJfdG9bY250XSwgc3BhY2UsIDAsCi0JCSAgICB3YXJudHlwZV90byArIGNudCkgPT0gTk9fUVVPVEEpCi0JCQlnb3RvIG92ZXJfcXVvdGE7Ci0JfQotCi0JLyoKLQkgKiBGaW5hbGx5IHBlcmZvcm0gdGhlIG5lZWRlZCB0cmFuc2ZlciBmcm9tIHRyYW5zZmVyX2Zyb20gdG8gdHJhbnNmZXJfdG8KLQkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJLyoKLQkJICogU2tpcCBjaGFuZ2VzIGZvciBzYW1lIHVpZCBvciBnaWQgb3IgZm9yIHR1cm5lZCBvZmYgcXVvdGEtdHlwZS4KLQkJICovCi0JCWlmICh0cmFuc2Zlcl90b1tjbnRdID09IE5PRFFVT1QpCi0JCQljb250aW51ZTsKLQotCQkvKiBEdWUgdG8gSU8gZXJyb3Igd2UgbWlnaHQgbm90IGhhdmUgdHJhbnNmZXJfZnJvbVtdIHN0cnVjdHVyZSAqLwotCQlpZiAodHJhbnNmZXJfZnJvbVtjbnRdKSB7Ci0JCQl3YXJudHlwZV9mcm9tX2lub2Rlc1tjbnRdID0KLQkJCQlpbmZvX2lkcV9mcmVlKHRyYW5zZmVyX2Zyb21bY250XSwgMSk7Ci0JCQl3YXJudHlwZV9mcm9tX3NwYWNlW2NudF0gPQotCQkJCWluZm9fYmRxX2ZyZWUodHJhbnNmZXJfZnJvbVtjbnRdLCBzcGFjZSk7Ci0JCQlkcXVvdF9kZWNyX2lub2Rlcyh0cmFuc2Zlcl9mcm9tW2NudF0sIDEpOwotCQkJZHF1b3RfZGVjcl9zcGFjZSh0cmFuc2Zlcl9mcm9tW2NudF0sIHNwYWNlKTsKLQkJfQotCi0JCWRxdW90X2luY3JfaW5vZGVzKHRyYW5zZmVyX3RvW2NudF0sIDEpOwotCQlkcXVvdF9pbmNyX3NwYWNlKHRyYW5zZmVyX3RvW2NudF0sIHNwYWNlKTsKLQotCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gdHJhbnNmZXJfdG9bY250XTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0cmFuc2Zlcl9mcm9tW2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KHRyYW5zZmVyX2Zyb21bY250XSk7Ci0JCWlmICh0cmFuc2Zlcl90b1tjbnRdKSB7Ci0JCQltYXJrX2RxdW90X2RpcnR5KHRyYW5zZmVyX3RvW2NudF0pOwotCQkJLyogVGhlIHJlZmVyZW5jZSB3ZSBnb3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGlub2RlICovCi0JCQl0cmFuc2Zlcl90b1tjbnRdID0gTk9EUVVPVDsKLQkJfQotCX0KLXdhcm5fcHV0X2FsbDoKLQlmbHVzaF93YXJuaW5ncyh0cmFuc2Zlcl90bywgd2FybnR5cGVfdG8pOwotCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21faW5vZGVzKTsKLQlmbHVzaF93YXJuaW5ncyh0cmFuc2Zlcl9mcm9tLCB3YXJudHlwZV9mcm9tX3NwYWNlKTsKLXB1dF9hbGw6Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWRxcHV0KHRyYW5zZmVyX2Zyb21bY250XSk7Ci0JCWRxcHV0KHRyYW5zZmVyX3RvW2NudF0pOwotCX0KLQlyZXR1cm4gcmV0Owotb3Zlcl9xdW90YToKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCS8qIENsZWFyIGRxdW90IHBvaW50ZXJzIHdlIGRvbid0IHdhbnQgdG8gZHFwdXQoKSAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJdHJhbnNmZXJfZnJvbVtjbnRdID0gTk9EUVVPVDsKLQlyZXQgPSBOT19RVU9UQTsKLQlnb3RvIHdhcm5fcHV0X2FsbDsKLX0KLQotLyogV3JhcHBlciBmb3IgdHJhbnNmZXJyaW5nIG93bmVyc2hpcCBvZiBhbiBpbm9kZSAqLwotaW50IHZmc19kcV90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQotewotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSAmJiAhSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJdmZzX2RxX2luaXQoaW5vZGUpOwotCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT50cmFuc2Zlcihpbm9kZSwgaWF0dHIpID09IE5PX1FVT1RBKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBXcml0ZSBpbmZvIG9mIHF1b3RhIGZpbGUgdG8gZGlzawotICovCi1pbnQgZHF1b3RfY29tbWl0X2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7Ci0KLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JcmV0ID0gZHFvcHQtPm9wc1t0eXBlXS0+d3JpdGVfZmlsZV9pbmZvKHNiLCB0eXBlKTsKLQltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRGVmaW5pdGlvbnMgb2YgZGlza3F1b3RhIG9wZXJhdGlvbnMuCi0gKi8KLXN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGRxdW90X29wZXJhdGlvbnMgPSB7Ci0JLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAotCS5kcm9wCQk9IGRxdW90X2Ryb3AsCi0JLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCi0JLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCi0JLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAotCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKLQkudHJhbnNmZXIJPSBkcXVvdF90cmFuc2ZlciwKLQkud3JpdGVfZHF1b3QJPSBkcXVvdF9jb21taXQsCi0JLmFjcXVpcmVfZHF1b3QJPSBkcXVvdF9hY3F1aXJlLAotCS5yZWxlYXNlX2RxdW90CT0gZHF1b3RfcmVsZWFzZSwKLQkubWFya19kaXJ0eQk9IGRxdW90X21hcmtfZHF1b3RfZGlydHksCi0JLndyaXRlX2luZm8JPSBkcXVvdF9jb21taXRfaW5mbywKLQkuYWxsb2NfZHF1b3QJPSBkcXVvdF9hbGxvYywKLQkuZGVzdHJveV9kcXVvdAk9IGRxdW90X2Rlc3Ryb3ksCi19OwotCi0vKgotICogVHVybiBxdW90YSBvZmYgb24gYSBkZXZpY2UuIHR5cGUgPT0gLTEgPT0+IHF1b3Rhb2ZmIGZvciBhbGwgdHlwZXMgKHVtb3VudCkKLSAqLwotaW50IHZmc19xdW90YV9kaXNhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IGNudCwgcmV0ID0gMDsKLQlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7Ci0Jc3RydWN0IGlub2RlICp0b3B1dGlub2RlW01BWFFVT1RBU107Ci0KLQkvKiBDYW5ub3QgdHVybiBvZmYgdXNhZ2UgYWNjb3VudGluZyB3aXRob3V0IHR1cm5pbmcgb2ZmIGxpbWl0cywgb3IKLQkgKiBzdXNwZW5kIHF1b3RhcyBhbmQgc2ltdWx0YW5lb3VzbHkgdHVybiBxdW90YXMgb2ZmLiAqLwotCWlmICgoZmxhZ3MgJiBEUVVPVF9VU0FHRV9FTkFCTEVEICYmICEoZmxhZ3MgJiBEUVVPVF9MSU1JVFNfRU5BQkxFRCkpCi0JICAgIHx8IChmbGFncyAmIERRVU9UX1NVU1BFTkRFRCAmJiBmbGFncyAmIChEUVVPVF9MSU1JVFNfRU5BQkxFRCB8Ci0JICAgIERRVU9UX1VTQUdFX0VOQUJMRUQpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBxdW90YV9vZmYoKSBmb3IgZGV2aWNlICovCi0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCi0JLyoKLQkgKiBTa2lwIGV2ZXJ5dGhpbmcgaWYgdGhlcmUncyBub3RoaW5nIHRvIGRvLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZQotCSAqIHNvbWV0aW1lcyB3ZSBhcmUgY2FsbGVkIHdoZW4gZmlsbF9zdXBlcigpIGZhaWxlZCBhbmQgY2FsbGluZwotCSAqIHN5bmNfZnMoKSBpbiBzdWNoIGNhc2VzIGRvZXMgbm8gZ29vZC4KLQkgKi8KLQlpZiAoIXNiX2FueV9xdW90YV9sb2FkZWQoc2IpKSB7Ci0JCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCXRvcHV0aW5vZGVbY250XSA9IE5VTEw7Ci0JCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCWlmICghc2JfaGFzX3F1b3RhX2xvYWRlZChzYiwgY250KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChmbGFncyAmIERRVU9UX1NVU1BFTkRFRCkgewotCQkJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQkJCWRxb3B0LT5mbGFncyB8PQotCQkJCWRxdW90X3N0YXRlX2ZsYWcoRFFVT1RfU1VTUEVOREVELCBjbnQpOwotCQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotCQl9IGVsc2UgewotCQkJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQkJCWRxb3B0LT5mbGFncyAmPSB+ZHF1b3Rfc3RhdGVfZmxhZyhmbGFncywgY250KTsKLQkJCS8qIFR1cm5pbmcgb2ZmIHN1c3BlbmRlZCBxdW90YXM/ICovCi0JCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkgJiYKLQkJCSAgICBzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHNiLCBjbnQpKSB7Ci0JCQkJZHFvcHQtPmZsYWdzICY9CX5kcXVvdF9zdGF0ZV9mbGFnKAotCQkJCQkJCURRVU9UX1NVU1BFTkRFRCwgY250KTsKLQkJCQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JCQkJaXB1dChkcW9wdC0+ZmlsZXNbY250XSk7Ci0JCQkJZHFvcHQtPmZpbGVzW2NudF0gPSBOVUxMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotCQl9Ci0KLQkJLyogV2Ugc3RpbGwgaGF2ZSB0byBrZWVwIHF1b3RhIGxvYWRlZD8gKi8KLQkJaWYgKHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkgJiYgIShmbGFncyAmIERRVU9UX1NVU1BFTkRFRCkpCi0JCQljb250aW51ZTsKLQotCQkvKiBOb3RlOiB0aGVzZSBhcmUgYmxvY2tpbmcgb3BlcmF0aW9ucyAqLwotCQlkcm9wX2RxdW90X3JlZihzYiwgY250KTsKLQkJaW52YWxpZGF0ZV9kcXVvdHMoc2IsIGNudCk7Ci0JCS8qCi0JCSAqIE5vdyBhbGwgZHF1b3RzIHNob3VsZCBiZSBpbnZhbGlkYXRlZCwgYWxsIHdyaXRlcyBkb25lIHNvIHdlIHNob3VsZCBiZSBvbmx5Ci0JCSAqIHVzZXJzIG9mIHRoZSBpbmZvLiBObyBsb2NrcyBuZWVkZWQuCi0JCSAqLwotCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bY250XSkpCi0JCQlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIGNudCk7Ci0JCWlmIChkcW9wdC0+b3BzW2NudF0tPmZyZWVfZmlsZV9pbmZvKQotCQkJZHFvcHQtPm9wc1tjbnRdLT5mcmVlX2ZpbGVfaW5mbyhzYiwgY250KTsKLQkJcHV0X3F1b3RhX2Zvcm1hdChkcW9wdC0+aW5mb1tjbnRdLmRxaV9mb3JtYXQpOwotCi0JCXRvcHV0aW5vZGVbY250XSA9IGRxb3B0LT5maWxlc1tjbnRdOwotCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkpCi0JCQlkcW9wdC0+ZmlsZXNbY250XSA9IE5VTEw7Ci0JCWRxb3B0LT5pbmZvW2NudF0uZHFpX2ZsYWdzID0gMDsKLQkJZHFvcHQtPmluZm9bY250XS5kcWlfaWdyYWNlID0gMDsKLQkJZHFvcHQtPmluZm9bY250XS5kcWlfYmdyYWNlID0gMDsKLQkJZHFvcHQtPm9wc1tjbnRdID0gTlVMTDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0KLQkvKiBTa2lwIHN5bmNpbmcgYW5kIHNldHRpbmcgZmxhZ3MgaWYgcXVvdGEgZmlsZXMgYXJlIGhpZGRlbiAqLwotCWlmIChkcW9wdC0+ZmxhZ3MgJiBEUVVPVF9RVU9UQV9TWVNfRklMRSkKLQkJZ290byBwdXRfaW5vZGVzOwotCi0JLyogU3luYyB0aGUgc3VwZXJibG9jayBzbyB0aGF0IGJ1ZmZlcnMgd2l0aCBxdW90YSBkYXRhIGFyZSB3cml0dGVuIHRvCi0JICogZGlzayAoYW5kIHNvIHVzZXJzcGFjZSBzZWVzIGNvcnJlY3QgZGF0YSBhZnRlcndhcmRzKS4gKi8KLQlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCi0JCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCAxKTsKLQlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOwotCS8qIE5vdyB0aGUgcXVvdGEgZmlsZXMgYXJlIGp1c3Qgb3JkaW5hcnkgZmlsZXMgYW5kIHdlIGNhbiBzZXQgdGhlCi0JICogaW5vZGUgZmxhZ3MgYmFjay4gTW9yZW92ZXIgd2UgZGlzY2FyZCB0aGUgcGFnZWNhY2hlIHNvIHRoYXQKLQkgKiB1c2Vyc3BhY2Ugc2VlcyB0aGUgd3JpdGVzIHdlIGRpZCBieXBhc3NpbmcgdGhlIHBhZ2VjYWNoZS4gV2UKLQkgKiBtdXN0IGFsc28gZGlzY2FyZCB0aGUgYmxvY2tkZXYgYnVmZmVycyBzbyB0aGF0IHdlIHNlZSB0aGUKLQkgKiBjaGFuZ2VzIGRvbmUgYnkgdXNlcnNwYWNlIG9uIHRoZSBuZXh0IHF1b3Rhb24oKSAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKHRvcHV0aW5vZGVbY250XSkgewotCQkJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCQkJLyogSWYgcXVvdGEgd2FzIHJlZW5hYmxlZCBpbiB0aGUgbWVhbnRpbWUsIHdlIGhhdmUKLQkJCSAqIG5vdGhpbmcgdG8gZG8gKi8KLQkJCWlmICghc2JfaGFzX3F1b3RhX2xvYWRlZChzYiwgY250KSkgewotCQkJCW11dGV4X2xvY2tfbmVzdGVkKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOwotCQkJCXRvcHV0aW5vZGVbY250XS0+aV9mbGFncyAmPSB+KFNfSU1NVVRBQkxFIHwKLQkJCQkgIFNfTk9BVElNRSB8IFNfTk9RVU9UQSk7Ci0JCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnRvcHV0aW5vZGVbY250XS0+aV9kYXRhLCAwKTsKLQkJCQltdXRleF91bmxvY2soJnRvcHV0aW5vZGVbY250XS0+aV9tdXRleCk7Ci0JCQkJbWFya19pbm9kZV9kaXJ0eSh0b3B1dGlub2RlW2NudF0pOwotCQkJfQotCQkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JCX0KLQlpZiAoc2ItPnNfYmRldikKLQkJaW52YWxpZGF0ZV9iZGV2KHNiLT5zX2JkZXYpOwotcHV0X2lub2RlczoKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmICh0b3B1dGlub2RlW2NudF0pIHsKLQkJCS8qIE9uIHJlbW91bnQgUk8sIHdlIGtlZXAgdGhlIGlub2RlIHBvaW50ZXIgc28gdGhhdCB3ZQotCQkJICogY2FuIHJlZW5hYmxlIHF1b3RhIG9uIHRoZSBzdWJzZXF1ZW50IHJlbW91bnQgUlcuIFdlCi0JCQkgKiBoYXZlIHRvIGNoZWNrICdmbGFncycgdmFyaWFibGUgYW5kIG5vdCB1c2Ugc2JfaGFzXwotCQkJICogZnVuY3Rpb24gYmVjYXVzZSBhbm90aGVyIHF1b3Rhb24gLyBxdW90YW9mZiBjb3VsZAotCQkJICogY2hhbmdlIGdsb2JhbCBzdGF0ZSBiZWZvcmUgd2UgZ290IGhlcmUuIFdlIHJlZnVzZQotCQkJICogdG8gc3VzcGVuZCBxdW90YXMgd2hlbiB0aGVyZSBpcyBwZW5kaW5nIGRlbGV0ZSBvbgotCQkJICogdGhlIHF1b3RhIGZpbGUuLi4gKi8KLQkJCWlmICghKGZsYWdzICYgRFFVT1RfU1VTUEVOREVEKSkKLQkJCQlpcHV0KHRvcHV0aW5vZGVbY250XSk7Ci0JCQllbHNlIGlmICghdG9wdXRpbm9kZVtjbnRdLT5pX25saW5rKQotCQkJCXJldCA9IC1FQlVTWTsKLQkJfQotCXJldHVybiByZXQ7Ci19Ci0KLWludCB2ZnNfcXVvdGFfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgcmVtb3VudCkKLXsKLQlyZXR1cm4gdmZzX3F1b3RhX2Rpc2FibGUoc2IsIHR5cGUsIHJlbW91bnQgPyBEUVVPVF9TVVNQRU5ERUQgOgotCQkJCSAoRFFVT1RfVVNBR0VfRU5BQkxFRCB8IERRVU9UX0xJTUlUU19FTkFCTEVEKSk7Ci19Ci0KLS8qCi0gKglUdXJuIHF1b3RhcyBvbiBvbiBhIGRldmljZQotICovCi0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdHVybiBxdW90YXMgb24gd2hlbiB3ZSBhbHJlYWR5IGhhdmUgdGhlIGlub2RlIG9mCi0gKiBxdW90YSBmaWxlIGFuZCBubyBxdW90YSBpbmZvcm1hdGlvbiBpcyBsb2FkZWQuCi0gKi8KLXN0YXRpYyBpbnQgdmZzX2xvYWRfcXVvdGFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsCi0JdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZm10ID0gZmluZF9xdW90YV9mb3JtYXQoZm9ybWF0X2lkKTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwotCWludCBlcnJvcjsKLQlpbnQgb2xkZmxhZ3MgPSAtMTsKLQotCWlmICghZm10KQotCQlyZXR1cm4gLUVTUkNIOwotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQllcnJvciA9IC1FQUNDRVM7Ci0JCWdvdG8gb3V0X2ZtdDsKLQl9Ci0JaWYgKElTX1JET05MWShpbm9kZSkpIHsKLQkJZXJyb3IgPSAtRVJPRlM7Ci0JCWdvdG8gb3V0X2ZtdDsKLQl9Ci0JaWYgKCFzYi0+c19vcC0+cXVvdGFfd3JpdGUgfHwgIXNiLT5zX29wLT5xdW90YV9yZWFkKSB7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQkJZ290byBvdXRfZm10OwotCX0KLQkvKiBVc2FnZSBhbHdheXMgaGFzIHRvIGJlIHNldC4uLiAqLwotCWlmICghKGZsYWdzICYgRFFVT1RfVVNBR0VfRU5BQkxFRCkpIHsKLQkJZXJyb3IgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9mbXQ7Ci0JfQotCi0JaWYgKCEoZHFvcHQtPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpKSB7Ci0JCS8qIEFzIHdlIGJ5cGFzcyB0aGUgcGFnZWNhY2hlIHdlIG11c3Qgbm93IGZsdXNoIHRoZSBpbm9kZSBzbwotCQkgKiB0aGF0IHdlIHNlZSBhbGwgdGhlIGNoYW5nZXMgZnJvbSB1c2Vyc3BhY2UuLi4gKi8KLQkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAxKTsKLQkJLyogQW5kIG5vdyBmbHVzaCB0aGUgYmxvY2sgY2FjaGUgc28gdGhhdCBrZXJuZWwgc2VlcyB0aGUKLQkJICogY2hhbmdlcyAqLwotCQlpbnZhbGlkYXRlX2JkZXYoc2ItPnNfYmRldik7Ci0JfQotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JaWYgKHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIHR5cGUpKSB7Ci0JCWVycm9yID0gLUVCVVNZOwotCQlnb3RvIG91dF9sb2NrOwotCX0KLQotCWlmICghKGRxb3B0LT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKSkgewotCQkvKiBXZSBkb24ndCB3YW50IHF1b3RhIGFuZCBhdGltZSBvbiBxdW90YSBmaWxlcyAoZGVhZGxvY2tzCi0JCSAqIHBvc3NpYmxlKSBBbHNvIG5vYm9keSBzaG91bGQgd3JpdGUgdG8gdGhlIGZpbGUgLSB3ZSB1c2UKLQkJICogc3BlY2lhbCBJTyBvcGVyYXRpb25zIHdoaWNoIGlnbm9yZSB0aGUgaW1tdXRhYmxlIGJpdC4gKi8KLQkJZG93bl93cml0ZSgmZHFvcHQtPmRxcHRyX3NlbSk7Ci0JCW9sZGZsYWdzID0gaW5vZGUtPmlfZmxhZ3MgJiAoU19OT0FUSU1FIHwgU19JTU1VVEFCTEUgfCBTX05PUVVPVEEpOwotCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEEgfCBTX05PQVRJTUUgfCBTX0lNTVVUQUJMRTsKLQkJdXBfd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwotCQlzYi0+ZHFfb3AtPmRyb3AoaW5vZGUpOwotCX0KLQotCWVycm9yID0gLUVJTzsKLQlkcW9wdC0+ZmlsZXNbdHlwZV0gPSBpZ3JhYihpbm9kZSk7Ci0JaWYgKCFkcW9wdC0+ZmlsZXNbdHlwZV0pCi0JCWdvdG8gb3V0X2xvY2s7Ci0JZXJyb3IgPSAtRUlOVkFMOwotCWlmICghZm10LT5xZl9vcHMtPmNoZWNrX3F1b3RhX2ZpbGUoc2IsIHR5cGUpKQotCQlnb3RvIG91dF9maWxlX2luaXQ7Ci0KLQlkcW9wdC0+b3BzW3R5cGVdID0gZm10LT5xZl9vcHM7Ci0JZHFvcHQtPmluZm9bdHlwZV0uZHFpX2Zvcm1hdCA9IGZtdDsKLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZm10X2lkID0gZm9ybWF0X2lkOwotCUlOSVRfTElTVF9IRUFEKCZkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZGlydHlfbGlzdCk7Ci0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwotCWlmICgoZXJyb3IgPSBkcW9wdC0+b3BzW3R5cGVdLT5yZWFkX2ZpbGVfaW5mbyhzYiwgdHlwZSkpIDwgMCkgewotCQltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQkJZ290byBvdXRfZmlsZV9pbml0OwotCX0KLQltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlzcGluX2xvY2soJmRxX3N0YXRlX2xvY2spOwotCWRxb3B0LT5mbGFncyB8PSBkcXVvdF9zdGF0ZV9mbGFnKGZsYWdzLCB0eXBlKTsKLQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7Ci0KLQlhZGRfZHF1b3RfcmVmKHNiLCB0eXBlKTsKLQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQotCXJldHVybiAwOwotCi1vdXRfZmlsZV9pbml0OgotCWRxb3B0LT5maWxlc1t0eXBlXSA9IE5VTEw7Ci0JaXB1dChpbm9kZSk7Ci1vdXRfbG9jazoKLQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQlpZiAob2xkZmxhZ3MgIT0gLTEpIHsKLQkJZG93bl93cml0ZSgmZHFvcHQtPmRxcHRyX3NlbSk7Ci0JCS8qIFNldCB0aGUgZmxhZ3MgYmFjayAoaW4gdGhlIGNhc2Ugb2YgYWNjaWRlbnRhbCBxdW90YW9uKCkKLQkJICogb24gYSB3cm9uZyBmaWxlIHdlIGRvbid0IHdhbnQgdG8gbWVzcyB1cCB0aGUgZmxhZ3MpICovCi0JCWlub2RlLT5pX2ZsYWdzICY9IH4oU19OT0FUSU1FIHwgU19OT1FVT1RBIHwgU19JTU1VVEFCTEUpOwotCQlpbm9kZS0+aV9mbGFncyB8PSBvbGRmbGFnczsKLQkJdXBfd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwotCX0KLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLW91dF9mbXQ6Ci0JcHV0X3F1b3RhX2Zvcm1hdChmbXQpOwotCi0JcmV0dXJuIGVycm9yOyAKLX0KLQotLyogUmVlbmFibGUgcXVvdGFzIG9uIHJlbW91bnQgUlcgKi8KLXN0YXRpYyBpbnQgdmZzX3F1b3RhX29uX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JaWYgKCFzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHNiLCB0eXBlKSkgewotCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlub2RlID0gZHFvcHQtPmZpbGVzW3R5cGVdOwotCWRxb3B0LT5maWxlc1t0eXBlXSA9IE5VTEw7Ci0Jc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQlmbGFncyA9IGRxb3B0LT5mbGFncyAmIGRxdW90X3N0YXRlX2ZsYWcoRFFVT1RfVVNBR0VfRU5BQkxFRCB8Ci0JCQkJCQlEUVVPVF9MSU1JVFNfRU5BQkxFRCwgdHlwZSk7Ci0JZHFvcHQtPmZsYWdzICY9IH5kcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1NUQVRFX0ZMQUdTLCB0eXBlKTsKLQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0KLQlmbGFncyA9IGRxdW90X2dlbmVyaWNfZmxhZyhmbGFncywgdHlwZSk7Ci0JcmV0ID0gdmZzX2xvYWRfcXVvdGFfaW5vZGUoaW5vZGUsIHR5cGUsIGRxb3B0LT5pbmZvW3R5cGVdLmRxaV9mbXRfaWQsCi0JCQkJICAgZmxhZ3MpOwotCWlwdXQoaW5vZGUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHZmc19xdW90YV9vbl9wYXRoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAotCQkgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCkKLXsKLQlpbnQgZXJyb3IgPSBzZWN1cml0eV9xdW90YV9vbihwYXRoLT5kZW50cnkpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCS8qIFF1b3RhIGZpbGUgbm90IG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0/ICovCi0JaWYgKHBhdGgtPm1udC0+bW50X3NiICE9IHNiKQotCQllcnJvciA9IC1FWERFVjsKLQllbHNlCi0JCWVycm9yID0gdmZzX2xvYWRfcXVvdGFfaW5vZGUocGF0aC0+ZGVudHJ5LT5kX2lub2RlLCB0eXBlLAotCQkJCQkgICAgIGZvcm1hdF9pZCwgRFFVT1RfVVNBR0VfRU5BQkxFRCB8Ci0JCQkJCSAgICAgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IHZmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwgY2hhciAqbmFtZSwKLQkJIGludCByZW1vdW50KQotewotCXN0cnVjdCBwYXRoIHBhdGg7Ci0JaW50IGVycm9yOwotCi0JaWYgKHJlbW91bnQpCi0JCXJldHVybiB2ZnNfcXVvdGFfb25fcmVtb3VudChzYiwgdHlwZSk7Ci0KLQllcnJvciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZwYXRoKTsKLQkJcGF0aF9wdXQoJnBhdGgpOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBNb3JlIHBvd2VyZnVsIGZ1bmN0aW9uIGZvciB0dXJuaW5nIG9uIHF1b3RhcyBhbGxvd2luZyBzZXR0aW5nCi0gKiBvZiBpbmRpdmlkdWFsIHF1b3RhIGZsYWdzCi0gKi8KLWludCB2ZnNfcXVvdGFfZW5hYmxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAotCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKLQotCS8qIEp1c3QgdW5zdXNwZW5kIHF1b3Rhcz8gKi8KLQlpZiAoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQpCi0JCXJldHVybiB2ZnNfcXVvdGFfb25fcmVtb3VudChzYiwgdHlwZSk7Ci0JaWYgKCFmbGFncykKLQkJcmV0dXJuIDA7Ci0JLyogSnVzdCB1cGRhdGluZyBmbGFncyBuZWVkZWQ/ICovCi0JaWYgKHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIHR5cGUpKSB7Ci0JCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQkJLyogTm93IGRvIGEgcmVsaWFibGUgdGVzdC4uLiAqLwotCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIHR5cGUpKSB7Ci0JCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQkJCWdvdG8gbG9hZF9xdW90YTsKLQkJfQotCQlpZiAoZmxhZ3MgJiBEUVVPVF9VU0FHRV9FTkFCTEVEICYmCi0JCSAgICBzYl9oYXNfcXVvdGFfdXNhZ2VfZW5hYmxlZChzYiwgdHlwZSkpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X2xvY2s7Ci0JCX0KLQkJaWYgKGZsYWdzICYgRFFVT1RfTElNSVRTX0VOQUJMRUQgJiYKLQkJICAgIHNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChzYiwgdHlwZSkpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X2xvY2s7Ci0JCX0KLQkJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQkJc2JfZHFvcHQoc2IpLT5mbGFncyB8PSBkcXVvdF9zdGF0ZV9mbGFnKGZsYWdzLCB0eXBlKTsKLQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotb3V0X2xvY2s6Ci0JCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotbG9hZF9xdW90YToKLQlyZXR1cm4gdmZzX2xvYWRfcXVvdGFfaW5vZGUoaW5vZGUsIHR5cGUsIGZvcm1hdF9pZCwgZmxhZ3MpOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gZmlsZXN5c3RlbSBuZWVkcyB0byBpbml0aWFsaXplIHF1b3RhcwotICogZHVyaW5nIG1vdW50IHRpbWUuCi0gKi8KLWludCB2ZnNfcXVvdGFfb25fbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqcWZfbmFtZSwKLQkJaW50IGZvcm1hdF9pZCwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCWludCBlcnJvcjsKLQotCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKHFmX25hbWUsIHNiLT5zX3Jvb3QsIHN0cmxlbihxZl9uYW1lKSk7Ci0JaWYgKElTX0VSUihkZW50cnkpKQotCQlyZXR1cm4gUFRSX0VSUihkZW50cnkpOwotCi0JaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnJvciA9IHNlY3VyaXR5X3F1b3RhX29uKGRlbnRyeSk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSB2ZnNfbG9hZF9xdW90YV9pbm9kZShkZW50cnktPmRfaW5vZGUsIHR5cGUsIGZvcm1hdF9pZCwKLQkJCQlEUVVPVF9VU0FHRV9FTkFCTEVEIHwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwotCi1vdXQ6Ci0JZHB1dChkZW50cnkpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyogV3JhcHBlciB0byB0dXJuIG9uIHF1b3RhcyB3aGVuIHJlbW91bnRpbmcgcncgKi8KLWludCB2ZnNfZHFfcXVvdGFfb25fcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCWludCBjbnQ7Ci0JaW50IHJldCA9IDAsIGVycjsKLQotCWlmICghc2ItPnNfcWNvcCB8fCAhc2ItPnNfcWNvcC0+cXVvdGFfb24pCi0JCXJldHVybiAtRU5PU1lTOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQllcnIgPSBzYi0+c19xY29wLT5xdW90YV9vbihzYiwgY250LCAwLCBOVUxMLCAxKTsKLQkJaWYgKGVyciA8IDAgJiYgIXJldCkKLQkJCXJldCA9IGVycjsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBxc2l6ZV90IHFidG9zKHFzaXplX3QgYmxvY2tzKQotewotCXJldHVybiBibG9ja3MgPDwgUUlGX0RRQkxLU0laRV9CSVRTOwotfQotCi1zdGF0aWMgaW5saW5lIHFzaXplX3Qgc3RvcWIocXNpemVfdCBzcGFjZSkKLXsKLQlyZXR1cm4gKHNwYWNlICsgUUlGX0RRQkxLU0laRSAtIDEpID4+IFFJRl9EUUJMS1NJWkVfQklUUzsKLX0KLQotLyogR2VuZXJpYyByb3V0aW5lIGZvciBnZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIHN0cnVjdHVyZSAqLwotc3RhdGljIHZvaWQgZG9fZ2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBpZl9kcWJsayAqZGkpCi17Ci0Jc3RydWN0IG1lbV9kcWJsayAqZG0gPSAmZHF1b3QtPmRxX2RxYjsKLQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlkaS0+ZHFiX2JoYXJkbGltaXQgPSBzdG9xYihkbS0+ZHFiX2JoYXJkbGltaXQpOwotCWRpLT5kcWJfYnNvZnRsaW1pdCA9IHN0b3FiKGRtLT5kcWJfYnNvZnRsaW1pdCk7Ci0JZGktPmRxYl9jdXJzcGFjZSA9IGRtLT5kcWJfY3Vyc3BhY2U7Ci0JZGktPmRxYl9paGFyZGxpbWl0ID0gZG0tPmRxYl9paGFyZGxpbWl0OwotCWRpLT5kcWJfaXNvZnRsaW1pdCA9IGRtLT5kcWJfaXNvZnRsaW1pdDsKLQlkaS0+ZHFiX2N1cmlub2RlcyA9IGRtLT5kcWJfY3VyaW5vZGVzOwotCWRpLT5kcWJfYnRpbWUgPSBkbS0+ZHFiX2J0aW1lOwotCWRpLT5kcWJfaXRpbWUgPSBkbS0+ZHFiX2l0aW1lOwotCWRpLT5kcWJfdmFsaWQgPSBRSUZfQUxMOwotCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotfQotCi1pbnQgdmZzX2dldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsIHN0cnVjdCBpZl9kcWJsayAqZGkpCi17Ci0Jc3RydWN0IGRxdW90ICpkcXVvdDsKLQotCWRxdW90ID0gZHFnZXQoc2IsIGlkLCB0eXBlKTsKLQlpZiAoZHF1b3QgPT0gTk9EUVVPVCkKLQkJcmV0dXJuIC1FU1JDSDsKLQlkb19nZXRfZHFibGsoZHF1b3QsIGRpKTsKLQlkcXB1dChkcXVvdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogR2VuZXJpYyByb3V0aW5lIGZvciBzZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIHN0cnVjdHVyZSAqLwotc3RhdGljIGludCBkb19zZXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgc3RydWN0IGlmX2RxYmxrICpkaSkKLXsKLQlzdHJ1Y3QgbWVtX2RxYmxrICpkbSA9ICZkcXVvdC0+ZHFfZHFiOwotCWludCBjaGVja19ibGltID0gMCwgY2hlY2tfaWxpbSA9IDA7Ci0Jc3RydWN0IG1lbV9kcWluZm8gKmRxaSA9ICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXTsKLQotCWlmICgoZGktPmRxYl92YWxpZCAmIFFJRl9CTElNSVRTICYmCi0JICAgICAoZGktPmRxYl9iaGFyZGxpbWl0ID4gZHFpLT5kcWlfbWF4YmxpbWl0IHx8Ci0JICAgICAgZGktPmRxYl9ic29mdGxpbWl0ID4gZHFpLT5kcWlfbWF4YmxpbWl0KSkgfHwKLQkgICAgKGRpLT5kcWJfdmFsaWQgJiBRSUZfSUxJTUlUUyAmJgotCSAgICAgKGRpLT5kcWJfaWhhcmRsaW1pdCA+IGRxaS0+ZHFpX21heGlsaW1pdCB8fAotCSAgICAgIGRpLT5kcWJfaXNvZnRsaW1pdCA+IGRxaS0+ZHFpX21heGlsaW1pdCkpKQotCQlyZXR1cm4gLUVSQU5HRTsKLQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9TUEFDRSkgewotCQlkbS0+ZHFiX2N1cnNwYWNlID0gZGktPmRxYl9jdXJzcGFjZTsKLQkJY2hlY2tfYmxpbSA9IDE7Ci0JCV9fc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfU1BBQ0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JfQotCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0JMSU1JVFMpIHsKLQkJZG0tPmRxYl9ic29mdGxpbWl0ID0gcWJ0b3MoZGktPmRxYl9ic29mdGxpbWl0KTsKLQkJZG0tPmRxYl9iaGFyZGxpbWl0ID0gcWJ0b3MoZGktPmRxYl9iaGFyZGxpbWl0KTsKLQkJY2hlY2tfYmxpbSA9IDE7Ci0JCV9fc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfQkxJTUlUU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQl9Ci0JaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfSU5PREVTKSB7Ci0JCWRtLT5kcWJfY3VyaW5vZGVzID0gZGktPmRxYl9jdXJpbm9kZXM7Ci0JCWNoZWNrX2lsaW0gPSAxOwotCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQl9Ci0JaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfSUxJTUlUUykgewotCQlkbS0+ZHFiX2lzb2Z0bGltaXQgPSBkaS0+ZHFiX2lzb2Z0bGltaXQ7Ci0JCWRtLT5kcWJfaWhhcmRsaW1pdCA9IGRpLT5kcWJfaWhhcmRsaW1pdDsKLQkJY2hlY2tfaWxpbSA9IDE7Ci0JCV9fc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfSUxJTUlUU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQl9Ci0JaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfQlRJTUUpIHsKLQkJZG0tPmRxYl9idGltZSA9IGRpLT5kcWJfYnRpbWU7Ci0JCWNoZWNrX2JsaW0gPSAxOwotCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0JUSU1FX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCX0KLQlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9JVElNRSkgewotCQlkbS0+ZHFiX2l0aW1lID0gZGktPmRxYl9pdGltZTsKLQkJY2hlY2tfaWxpbSA9IDE7Ci0JCV9fc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfSVRJTUVfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JfQotCi0JaWYgKGNoZWNrX2JsaW0pIHsKLQkJaWYgKCFkbS0+ZHFiX2Jzb2Z0bGltaXQgfHwgZG0tPmRxYl9jdXJzcGFjZSA8IGRtLT5kcWJfYnNvZnRsaW1pdCkgewotCQkJZG0tPmRxYl9idGltZSA9IDA7Ci0JCQljbGVhcl9iaXQoRFFfQkxLU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJfQotCQllbHNlIGlmICghKGRpLT5kcWJfdmFsaWQgJiBRSUZfQlRJTUUpKQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCi0JCQlkbS0+ZHFiX2J0aW1lID0gZ2V0X3NlY29uZHMoKSArIGRxaS0+ZHFpX2JncmFjZTsKLQl9Ci0JaWYgKGNoZWNrX2lsaW0pIHsKLQkJaWYgKCFkbS0+ZHFiX2lzb2Z0bGltaXQgfHwgZG0tPmRxYl9jdXJpbm9kZXMgPCBkbS0+ZHFiX2lzb2Z0bGltaXQpIHsKLQkJCWRtLT5kcWJfaXRpbWUgPSAwOwotCQkJY2xlYXJfYml0KERRX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJfQotCQllbHNlIGlmICghKGRpLT5kcWJfdmFsaWQgJiBRSUZfSVRJTUUpKQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCi0JCQlkbS0+ZHFiX2l0aW1lID0gZ2V0X3NlY29uZHMoKSArIGRxaS0+ZHFpX2lncmFjZTsKLQl9Ci0JaWYgKGRtLT5kcWJfYmhhcmRsaW1pdCB8fCBkbS0+ZHFiX2Jzb2Z0bGltaXQgfHwgZG0tPmRxYl9paGFyZGxpbWl0IHx8IGRtLT5kcWJfaXNvZnRsaW1pdCkKLQkJY2xlYXJfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JZWxzZQotCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JbWFya19kcXVvdF9kaXJ0eShkcXVvdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHZmc19zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLCBzdHJ1Y3QgaWZfZHFibGsgKmRpKQotewotCXN0cnVjdCBkcXVvdCAqZHF1b3Q7Ci0JaW50IHJjOwotCi0JZHF1b3QgPSBkcWdldChzYiwgaWQsIHR5cGUpOwotCWlmICghZHF1b3QpIHsKLQkJcmMgPSAtRVNSQ0g7Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IGRvX3NldF9kcWJsayhkcXVvdCwgZGkpOwotCWRxcHV0KGRxdW90KTsKLW91dDoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qIEdlbmVyaWMgcm91dGluZSBmb3IgZ2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBmaWxlIGluZm9ybWF0aW9uICovCi1pbnQgdmZzX2dldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKQotewotCXN0cnVjdCBtZW1fZHFpbmZvICptaTsKLSAgCi0JbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKSB7Ci0JCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLQkJcmV0dXJuIC1FU1JDSDsKLQl9Ci0JbWkgPSBzYl9kcW9wdChzYiktPmluZm8gKyB0eXBlOwotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpaS0+ZHFpX2JncmFjZSA9IG1pLT5kcWlfYmdyYWNlOwotCWlpLT5kcWlfaWdyYWNlID0gbWktPmRxaV9pZ3JhY2U7Ci0JaWktPmRxaV9mbGFncyA9IG1pLT5kcWlfZmxhZ3MgJiBEUUZfTUFTSzsKLQlpaS0+ZHFpX3ZhbGlkID0gSUlGX0FMTDsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEdlbmVyaWMgcm91dGluZSBmb3Igc2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBmaWxlIGluZm9ybWF0aW9uICovCi1pbnQgdmZzX3NldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKQotewotCXN0cnVjdCBtZW1fZHFpbmZvICptaTsKLQlpbnQgZXJyID0gMDsKLQotCW11dGV4X2xvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkgewotCQllcnIgPSAtRVNSQ0g7Ci0JCWdvdG8gb3V0OwotCX0KLQltaSA9IHNiX2Rxb3B0KHNiKS0+aW5mbyArIHR5cGU7Ci0Jc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWlmIChpaS0+ZHFpX3ZhbGlkICYgSUlGX0JHUkFDRSkKLQkJbWktPmRxaV9iZ3JhY2UgPSBpaS0+ZHFpX2JncmFjZTsKLQlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9JR1JBQ0UpCi0JCW1pLT5kcWlfaWdyYWNlID0gaWktPmRxaV9pZ3JhY2U7Ci0JaWYgKGlpLT5kcWlfdmFsaWQgJiBJSUZfRkxBR1MpCi0JCW1pLT5kcWlfZmxhZ3MgPSAobWktPmRxaV9mbGFncyAmIH5EUUZfTUFTSykgfCAoaWktPmRxaV9mbGFncyAmIERRRl9NQVNLKTsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQltYXJrX2luZm9fZGlydHkoc2IsIHR5cGUpOwotCS8qIEZvcmNlIHdyaXRlIHRvIGRpc2sgKi8KLQlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIHR5cGUpOwotb3V0OgotCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHMgPSB7Ci0JLnF1b3RhX29uCT0gdmZzX3F1b3RhX29uLAotCS5xdW90YV9vZmYJPSB2ZnNfcXVvdGFfb2ZmLAotCS5xdW90YV9zeW5jCT0gdmZzX3F1b3RhX3N5bmMsCi0JLmdldF9pbmZvCT0gdmZzX2dldF9kcWluZm8sCi0JLnNldF9pbmZvCT0gdmZzX3NldF9kcWluZm8sCi0JLmdldF9kcWJsawk9IHZmc19nZXRfZHFibGssCi0JLnNldF9kcWJsawk9IHZmc19zZXRfZHFibGsKLX07Ci0KLXN0YXRpYyBjdGxfdGFibGUgZnNfZHFzdGF0c190YWJsZVtdID0gewotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfTE9PS1VQUywKLQkJLnByb2NuYW1lCT0gImxvb2t1cHMiLAotCQkuZGF0YQkJPSAmZHFzdGF0cy5sb29rdXBzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNDQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IEZTX0RRX0RST1BTLAotCQkucHJvY25hbWUJPSAiZHJvcHMiLAotCQkuZGF0YQkJPSAmZHFzdGF0cy5kcm9wcywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9SRUFEUywKLQkJLnByb2NuYW1lCT0gInJlYWRzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMucmVhZHMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA0NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfV1JJVEVTLAotCQkucHJvY25hbWUJPSAid3JpdGVzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMud3JpdGVzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNDQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IEZTX0RRX0NBQ0hFX0hJVFMsCi0JCS5wcm9jbmFtZQk9ICJjYWNoZV9oaXRzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMuY2FjaGVfaGl0cywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9BTExPQ0FURUQsCi0JCS5wcm9jbmFtZQk9ICJhbGxvY2F0ZWRfZHF1b3RzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMuYWxsb2NhdGVkX2RxdW90cywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9GUkVFLAotCQkucHJvY25hbWUJPSAiZnJlZV9kcXVvdHMiLAotCQkuZGF0YQkJPSAmZHFzdGF0cy5mcmVlX2RxdW90cywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9TWU5DUywKLQkJLnByb2NuYW1lCT0gInN5bmNzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMuc3luY3MsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA0NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotI2lmZGVmIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9XQVJOSU5HUywKLQkJLnByb2NuYW1lCT0gIndhcm5pbmdzIiwKLQkJLmRhdGEJCT0gJmZsYWdfcHJpbnRfd2FybmluZ3MsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotI2VuZGlmCi0JeyAuY3RsX25hbWUgPSAwIH0sCi19OwotCi1zdGF0aWMgY3RsX3RhYmxlIGZzX3RhYmxlW10gPSB7Ci0JewotCQkuY3RsX25hbWUJPSBGU19EUVNUQVRTLAotCQkucHJvY25hbWUJPSAicXVvdGEiLAotCQkubW9kZQkJPSAwNTU1LAotCQkuY2hpbGQJCT0gZnNfZHFzdGF0c190YWJsZSwKLQl9LAotCXsgLmN0bF9uYW1lID0gMCB9LAotfTsKLQotc3RhdGljIGN0bF90YWJsZSBzeXNfdGFibGVbXSA9IHsKLQl7Ci0JCS5jdGxfbmFtZQk9IENUTF9GUywKLQkJLnByb2NuYW1lCT0gImZzIiwKLQkJLm1vZGUJCT0gMDU1NSwKLQkJLmNoaWxkCQk9IGZzX3RhYmxlLAotCX0sCi0JeyAuY3RsX25hbWUgPSAwIH0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkcXVvdF9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBucl9oYXNoLCBvcmRlcjsKLQotCXByaW50ayhLRVJOX05PVElDRSAiVkZTOiBEaXNrIHF1b3RhcyAlc1xuIiwgX19EUVVPVF9WRVJTSU9OX18pOwotCi0JcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN5c190YWJsZSk7Ci0KLQlkcXVvdF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHF1b3QiLAotCQkJc2l6ZW9mKHN0cnVjdCBkcXVvdCksIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDQsCi0JCQkoU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAotCQkJCVNMQUJfTUVNX1NQUkVBRHxTTEFCX1BBTklDKSwKLQkJCU5VTEwpOwotCi0Jb3JkZXIgPSAwOwotCWRxdW90X2hhc2ggPSAoc3RydWN0IGhsaXN0X2hlYWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIG9yZGVyKTsKLQlpZiAoIWRxdW90X2hhc2gpCi0JCXBhbmljKCJDYW5ub3QgY3JlYXRlIGRxdW90IGhhc2ggdGFibGUiKTsKLQotCS8qIEZpbmQgcG93ZXItb2YtdHdvIGhsaXN0X2hlYWRzIHdoaWNoIGNhbiBmaXQgaW50byBhbGxvY2F0aW9uICovCi0JbnJfaGFzaCA9ICgxVUwgPDwgb3JkZXIpICogUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKTsKLQlkcV9oYXNoX2JpdHMgPSAwOwotCWRvIHsKLQkJZHFfaGFzaF9iaXRzKys7Ci0JfSB3aGlsZSAobnJfaGFzaCA+PiBkcV9oYXNoX2JpdHMpOwotCWRxX2hhc2hfYml0cy0tOwotCi0JbnJfaGFzaCA9IDFVTCA8PCBkcV9oYXNoX2JpdHM7Ci0JZHFfaGFzaF9tYXNrID0gbnJfaGFzaCAtIDE7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2hhc2g7IGkrKykKLQkJSU5JVF9ITElTVF9IRUFEKGRxdW90X2hhc2ggKyBpKTsKLQotCXByaW50aygiRHF1b3QtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAlbGQgKG9yZGVyICVsZCwgJWxkIGJ5dGVzKVxuIiwKLQkJCW5yX2hhc2gsIG9yZGVyLCAoUEFHRV9TSVpFIDw8IG9yZGVyKSk7Ci0KLQlyZWdpc3Rlcl9zaHJpbmtlcigmZHFjYWNoZV9zaHJpbmtlcik7Ci0KLSNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKLQlpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJnF1b3RhX2dlbmxfZmFtaWx5KSAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogRmFpbGVkIHRvIGNyZWF0ZSBxdW90YSBuZXRsaW5rIGludGVyZmFjZS5cbiIpOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLW1vZHVsZV9pbml0KGRxdW90X2luaXQpOwotCi1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCk7Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KTsKLUVYUE9SVF9TWU1CT0woZHFzdGF0cyk7Ci1FWFBPUlRfU1lNQk9MKGRxX2RhdGFfbG9jayk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9lbmFibGUpOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb24pOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fcGF0aCk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vbl9tb3VudCk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9kaXNhYmxlKTsKLUVYUE9SVF9TWU1CT0wodmZzX3F1b3RhX29mZik7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3NjYW5fYWN0aXZlKTsKLUVYUE9SVF9TWU1CT0wodmZzX3F1b3RhX3N5bmMpOwotRVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2RxaW5mbyk7Ci1FWFBPUlRfU1lNQk9MKHZmc19zZXRfZHFpbmZvKTsKLUVYUE9SVF9TWU1CT0wodmZzX2dldF9kcWJsayk7Ci1FWFBPUlRfU1lNQk9MKHZmc19zZXRfZHFibGspOwotRVhQT1JUX1NZTUJPTChkcXVvdF9jb21taXQpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9jb21taXRfaW5mbyk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2FjcXVpcmUpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2luaXRpYWxpemUpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9kcm9wKTsKLUVYUE9SVF9TWU1CT0wodmZzX2RxX2Ryb3ApOwotRVhQT1JUX1NZTUJPTChkcWdldCk7Ci1FWFBPUlRfU1lNQk9MKGRxcHV0KTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9hbGxvY19pbm9kZSk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2ZyZWVfc3BhY2UpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfdHJhbnNmZXIpOwotRVhQT1JUX1NZTUJPTCh2ZnNfZHFfdHJhbnNmZXIpOwotRVhQT1JUX1NZTUJPTCh2ZnNfZHFfcXVvdGFfb25fcmVtb3VudCk7CmRpZmYgLS1naXQgYS9mcy9kcm9wX2NhY2hlcy5jIGIvZnMvZHJvcF9jYWNoZXMuYwppbmRleCAzZTU2MzdmLi40NGQ3MjVmIDEwMDY0NAotLS0gYS9mcy9kcm9wX2NhY2hlcy5jCisrKyBiL2ZzL2Ryb3BfY2FjaGVzLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUUpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFfElfTkVXKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9kZW50cnkuYyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCmluZGV4IDVlNTk2NTguLjJkZGE1YWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCisrKyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCkBAIC04OSw3ICs4OSw3IEBACiAJcmV0dXJuOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wcyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBlY3J5cHRmc19kb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBlY3J5cHRmc19kX3JldmFsaWRhdGUsCiAJLmRfcmVsZWFzZSA9IGVjcnlwdGZzX2RfcmVsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IGFjNzQ5ZDQuLjA2NGM1ODIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC01ODAsNyArNTgwLDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlY3J5cHRmc19kaXJfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlY3J5cHRmc19zeW1saW5rX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZWNyeXB0ZnNfc29wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wczsKIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVjcnlwdGZzX2FvcHM7CiBleHRlcm4gaW50IGVjcnlwdGZzX3ZlcmJvc2l0eTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZWNyeXB0ZnNfbWVzc2FnZV9idWZfbGVuOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAwMTFiOWI4Li5jNWM0MjRmIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNDE3LDEwICs0MTcsMTAgQEAKIAllcF91bnJlZ2lzdGVyX3BvbGx3YWl0KGVwLCBlcGkpOwogCiAJLyogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgbGlzdCBvZiBlcG9sbCBob29rcyAqLwotCXNwaW5fbG9jaygmZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5mbGxpbmspKQogCQlsaXN0X2RlbF9pbml0KCZlcGktPmZsbGluayk7Ci0Jc3Bpbl91bmxvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAKIAlyYl9lcmFzZSgmZXBpLT5yYm4sICZlcC0+cmJyKTsKIApAQCAtNTM4LDcgKzUzOCw3IEBACiAJc3RydWN0IGVwaXRlbSAqZXBpOwogCiAJLyoKLQkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9lcF9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAorCSAqIFdlIGRvbid0IHdhbnQgdG8gZ2V0ICJmaWxlLT5mX2xvY2siIGJlY2F1c2UgaXQgaXMgbm90CiAJICogbmVjZXNzYXJ5LiBJdCBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UncmUgaW4gdGhlICJzdHJ1Y3QgZmlsZSIKIAkgKiBjbGVhbnVwIHBhdGgsIGFuZCB0aGlzIG1lYW5zIHRoYXQgbm9vbmUgaXMgdXNpbmcgdGhpcyBmaWxlIGFueW1vcmUuCiAJICogU28sIGZvciBleGFtcGxlLCBlcG9sbF9jdGwoKSBjYW5ub3QgaGl0IGhlcmUgc2ljbmUgaWYgd2UgcmVhY2ggdGhpcwpAQCAtNTQ3LDYgKzU0Nyw4IEBACiAJICogd2lsbCBjb3JyZWN0bHkgc2VyaWFsaXplIHRoZSBvcGVyYXRpb24uIFdlIGRvIG5lZWQgdG8gYWNxdWlyZQogCSAqICJlcC0+bXR4IiBhZnRlciAiZXBtdXRleCIgYmVjYXVzZSBlcF9yZW1vdmUoKSByZXF1aXJlcyBpdCB3aGVuIGNhbGxlZAogCSAqIGZyb20gYW55d2hlcmUgYnV0IGVwX2ZyZWUoKS4KKwkgKgorCSAqIEJlc2lkZXMsIGVwX3JlbW92ZSgpIGFjcXVpcmVzIHRoZSBsb2NrLCBzbyB3ZSBjYW4ndCBob2xkIGl0IGhlcmUuCiAJICovCiAJbXV0ZXhfbG9jaygmZXBtdXRleCk7CiAKQEAgLTc4NSw5ICs3ODcsOSBAQAogCQlnb3RvIGVycm9yX3VucmVnaXN0ZXI7CiAKIAkvKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgbGlzdCBvZiBhY3RpdmUgZXBvbGwgaG9vayBmb3IgdGhpcyBmaWxlICovCi0Jc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX2xvY2soJnRmaWxlLT5mX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmVwaS0+ZmxsaW5rLCAmdGZpbGUtPmZfZXBfbGlua3MpOwotCXNwaW5fdW5sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX3VubG9jaygmdGZpbGUtPmZfbG9jayk7CiAKIAkvKgogCSAqIEFkZCB0aGUgY3VycmVudCBpdGVtIHRvIHRoZSBSQiB0cmVlLiBBbGwgUkIgdHJlZSBvcGVyYXRpb25zIGFyZQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDkyOWI1ODAuLmM1MTI4ZmIgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CkBAIC0xMjcsNiArMTI4LDkgQEAKIAkJCQkgTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXhpdDsKKwllcnJvciA9IGltYV9wYXRoX2NoZWNrKCZuZC5wYXRoLCBNQVlfUkVBRCB8IE1BWV9FWEVDIHwgTUFZX09QRU4pOworCWlmIChlcnJvcikKKwkJZ290byBleGl0OwogCiAJZmlsZSA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgT19SRE9OTFl8T19MQVJHRUZJTEUpOwogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKQEAgLTY3NCw2ICs2NzgsOSBAQAogCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQucGF0aC5kZW50cnktPmRfaW5vZGUsIE1BWV9FWEVDIHwgTUFZX09QRU4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3BhdGhfcHV0OworCWVyciA9IGltYV9wYXRoX2NoZWNrKCZuZC5wYXRoLCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9wYXRoX3B1dDsKIAogCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZfE9fTEFSR0VGSUxFKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQpAQCAtMTA0OSwyOCArMTA1NiwyNCBAQAogICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCBjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXggdG8gcHJvdGVjdCBhZ2FpbnN0CiAgKiAgIFBUUkFDRV9BVFRBQ0gKICAqLwotdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcykKK3ZvaWQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50LCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG5fZnMsIG5fZmlsZXMsIG5fc2lnaGFuZDsKKwl1bnNpZ25lZCBuX2ZzLCBuX3NpZ2hhbmQ7CiAKIAlicHJtLT51bnNhZmUgPSB0cmFjZWhvb2tfdW5zYWZlX2V4ZWMocCk7CiAKIAluX2ZzID0gMTsKLQluX2ZpbGVzID0gMTsKIAluX3NpZ2hhbmQgPSAxOwogCWxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAJZm9yICh0ID0gbmV4dF90aHJlYWQocCk7IHQgIT0gcDsgdCA9IG5leHRfdGhyZWFkKHQpKSB7CiAJCWlmICh0LT5mcyA9PSBwLT5mcykKIAkJCW5fZnMrKzsKLQkJaWYgKHQtPmZpbGVzID09IGZpbGVzKQotCQkJbl9maWxlcysrOwogCQluX3NpZ2hhbmQrKzsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJnAtPmZzLT5jb3VudCkgPiBuX2ZzIHx8Ci0JICAgIGF0b21pY19yZWFkKCZwLT5maWxlcy0+Y291bnQpID4gbl9maWxlcyB8fAogCSAgICBhdG9taWNfcmVhZCgmcC0+c2lnaGFuZC0+Y291bnQpID4gbl9zaWdoYW5kKQogCQlicHJtLT51bnNhZmUgfD0gTFNNX1VOU0FGRV9TSEFSRTsKIApAQCAtMTE4NCw2ICsxMTg3LDkgQEAKIAlyZXR2YWwgPSBzZWN1cml0eV9icHJtX2NoZWNrKGJwcm0pOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gaW1hX2Jwcm1fY2hlY2soYnBybSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAogCS8qIGtlcm5lbCBtb2R1bGUgbG9hZGVyIGZpeHVwICovCiAJLyogc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgcnVuIG1vZHByb2JlIGluIGtlcm5lbCBzcGFjZS4gKi8KQEAgLTEyODQsMTIgKzEyOTAsMTMgQEAKIAlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMTsKIAogCXJldHZhbCA9IC1FTk9NRU07CiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwogCWlmICghYnBybS0+Y3JlZCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0sIGRpc3BsYWNlZCk7CisJY2hlY2tfdW5zYWZlX2V4ZWMoYnBybSk7CiAKIAlmaWxlID0gb3Blbl9leGVjKGZpbGVuYW1lKTsKIAlyZXR2YWwgPSBQVFJfRVJSKGZpbGUpOwpAQCAtMTMzNyw2ICsxMzQ0LDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwogCWZyZWVfYnBybShicHJtKTsKQEAgLTEzNTUsNiArMTM2Myw3IEBACiAJfQogCiBvdXRfdW5sb2NrOgorCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYmFsbG9jLmMgYi9mcy9leHQyL2JhbGxvYy5jCmluZGV4IDRhMjlkNjMuLjdmOGQyZTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYmFsbG9jLmMKKysrIGIvZnMvZXh0Mi9iYWxsb2MuYwpAQCAtNTcwLDcgKzU3MCw3IEBACiBlcnJvcl9yZXR1cm46CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmVsZWFzZV9ibG9ja3Moc2IsIGZyZWVkKTsKLQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBmcmVlZCk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGZyZWVkKTsKIH0KIAogLyoqCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQAogCS8qCiAJICogQ2hlY2sgcXVvdGEgZm9yIGFsbG9jYXRpb24gb2YgdGhpcyBibG9jay4KIAkgKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIG51bSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBudW0pKSB7CiAJCSplcnJwID0gLUVEUVVPVDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQwOSw3ICsxNDA5LDcgQEAKIAogCSplcnJwID0gMDsKIAlicmVsc2UoYml0bWFwX2JoKTsKLQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAqY291bnQtbnVtKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgKmNvdW50LW51bSk7CiAJKmNvdW50ID0gbnVtOwogCXJldHVybiByZXRfYmxvY2s7CiAKQEAgLTE0MjAsNyArMTQyMCw3IEBACiAJICogVW5kbyB0aGUgYmxvY2sgYWxsb2NhdGlvbgogCSAqLwogCWlmICghcGVyZm9ybWVkX2FsbG9jYXRpb24pCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsICpjb3VudCk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQpOwogCWJyZWxzZShiaXRtYXBfYmgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pYWxsb2MuYyBiL2ZzL2V4dDIvaWFsbG9jLmMKaW5kZXggNjYzMjFhOC4uMTUzODdjOSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pYWxsb2MuYworKysgYi9mcy9leHQyL2lhbGxvYy5jCkBAIC0xMjEsOCArMTIxLDggQEAKIAlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpIHsKIAkJLyogUXVvdGEgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpbiBpcHV0KCkgKi8KIAkJZXh0Ml94YXR0cl9kZWxldGVfaW5vZGUoaW5vZGUpOwotCSAgICAJRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7Ci0JCURRVU9UX0RST1AoaW5vZGUpOworCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJCXZmc19kcV9kcm9wKGlub2RlKTsKIAl9CiAKIAllcyA9IEVYVDJfU0Ioc2IpLT5zX2VzOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJCWdvdG8gZmFpbF9kcm9wOwogCX0KIAotCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewogCQllcnIgPSAtRURRVU9UOwogCQlnb3RvIGZhaWxfZHJvcDsKIAl9CkBAIC02MDUsMTAgKzYwNSwxMCBAQAogCXJldHVybiBpbm9kZTsKIAogZmFpbF9mcmVlX2Ryb3A6Ci0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwogCiBmYWlsX2Ryb3A6Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggMjNmZmYyZi4uYjQzYjk1NTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW5vZGUuYworKysgYi9mcy9leHQyL2lub2RlLmMKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAJCXJldHVybiBlcnJvcjsKIAlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEICYmIGlhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAogCSAgICAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaWF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7Ci0JCWVycm9yID0gRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGlhdHRyKSA/IC1FRFFVT1QgOiAwOworCQllcnJvciA9IHZmc19kcV90cmFuc2Zlcihpbm9kZSwgaWF0dHIpID8gLUVEUVVPVCA6IDA7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmMKaW5kZXggN2M2ZTM2MC4uZjk4MzIyNSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9zdXBlci5jCisrKyBiL2ZzL2V4dDIvc3VwZXIuYwpAQCAtMTMzMSw2ICsxMzMxLDcgQEAKIAkJCQlzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgOiB0b3JlYWQ7CiAKIAkJdG1wX2JoLmJfc3RhdGUgPSAwOworCQl0bXBfYmguYl9zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCQllcnIgPSBleHQyX2dldF9ibG9jayhpbm9kZSwgYmxrLCAmdG1wX2JoLCAwKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jCmluZGV4IDk4N2E1MjYuLjc5MTM1MzEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHIuYworKysgYi9mcy9leHQyL3hhdHRyLmMKQEAgLTY0Miw3ICs2NDIsNyBAQAogCQkJCWVhX2JkZWJ1ZyhuZXdfYmgsICJyZXVzaW5nIGJsb2NrIik7CiAKIAkJCQllcnJvciA9IC1FRFFVT1Q7Ci0JCQkJaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCAxKSkgeworCQkJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIDEpKSB7CiAJCQkJCXVubG9ja19idWZmZXIobmV3X2JoKTsKIAkJCQkJZ290byBjbGVhbnVwOwogCQkJCX0KQEAgLTY5OSw3ICs2OTksNyBAQAogCQkgKiBhcyBpZiBub3RoaW5nIGhhcHBlbmVkIGFuZCBjbGVhbnVwIHRoZSB1bnVzZWQgYmxvY2sgKi8KIAkJaWYgKGVycm9yICYmIGVycm9yICE9IC1FTk9TUEMpIHsKIAkJCWlmIChuZXdfYmggJiYgbmV3X2JoICE9IG9sZF9iaCkKLQkJCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9IGVsc2UKQEAgLTczMSw3ICs3MzEsNyBAQAogCQkJbGUzMl9hZGRfY3B1KCZIRFIob2xkX2JoKS0+aF9yZWZjb3VudCwgLTEpOwogCQkJaWYgKGNlKQogCQkJCW1iX2NhY2hlX2VudHJ5X3JlbGVhc2UoY2UpOwotCQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShvbGRfYmgpOwogCQkJZWFfYmRlYnVnKG9sZF9iaCwgInJlZmNvdW50IG5vdz0lZCIsCiAJCQkJbGUzMl90b19jcHUoSERSKG9sZF9iaCktPmhfcmVmY291bnQpKTsKQEAgLTc5NCw3ICs3OTQsNyBAQAogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWlmIChJU19TWU5DKGlub2RlKSkKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAl9CiAJRVhUMl9JKGlub2RlKS0+aV9maWxlX2FjbCA9IDA7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDBkYmYxYzAuLjIyNTIwMmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJfQogCWV4dDNfZnJlZV9ibG9ja3Nfc2IoaGFuZGxlLCBzYiwgYmxvY2ssIGNvdW50LCAmZHF1b3RfZnJlZWRfYmxvY2tzKTsKIAlpZiAoZHF1b3RfZnJlZWRfYmxvY2tzKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBkcXVvdF9mcmVlZF9ibG9ja3MpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgZHF1b3RfZnJlZWRfYmxvY2tzKTsKIAlyZXR1cm47CiB9CiAKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAJLyoKIAkgKiBDaGVjayBxdW90YSBmb3IgYWxsb2NhdGlvbiBvZiB0aGlzIGJsb2NrLgogCSAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgbnVtKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIG51bSkpIHsKIAkJKmVycnAgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzE0LDcgKzE3MTQsNyBAQAogCiAJKmVycnAgPSAwOwogCWJyZWxzZShiaXRtYXBfYmgpOwotCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsICpjb3VudC1udW0pOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQtbnVtKTsKIAkqY291bnQgPSBudW07CiAJcmV0dXJuIHJldF9ibG9jazsKIApAQCAtMTcyOSw3ICsxNzI5LDcgQEAKIAkgKiBVbmRvIHRoZSBibG9jayBhbGxvY2F0aW9uCiAJICovCiAJaWYgKCFwZXJmb3JtZWRfYWxsb2NhdGlvbikKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgKmNvdW50KTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudCk7CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQzL2lhbGxvYy5jIGIvZnMvZXh0My9pYWxsb2MuYwppbmRleCA4ZGU2YzcyLi5kZDEzZDYwIDEwMDY0NAotLS0gYS9mcy9leHQzL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDMvaWFsbG9jLmMKQEAgLTEyMywxMCArMTIzLDEwIEBACiAJICogTm90ZTogd2UgbXVzdCBmcmVlIGFueSBxdW90YSBiZWZvcmUgbG9ja2luZyB0aGUgc3VwZXJibG9jaywKIAkgKiBhcyB3cml0aW5nIHRoZSBxdW90YSB0byBkaXNrIG1heSBuZWVkIHRoZSBsb2NrIGFzIHdlbGwuCiAJICovCi0JRFFVT1RfSU5JVChpbm9kZSk7CisJdmZzX2RxX2luaXQoaW5vZGUpOwogCWV4dDNfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUpOwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCkBAIC01ODksNyArNTg5LDcgQEAKIAkJc2l6ZW9mKHN0cnVjdCBleHQzX2lub2RlKSAtIEVYVDNfR09PRF9PTERfSU5PREVfU0laRSA6IDA7CiAKIAlyZXQgPSBpbm9kZTsKLQlpZihEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewogCQllcnIgPSAtRURRVU9UOwogCQlnb3RvIGZhaWxfZHJvcDsKIAl9CkBAIC02MjAsMTAgKzYyMCwxMCBAQAogCXJldHVybiByZXQ7CiAKIGZhaWxfZnJlZV9kcm9wOgotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogZmFpbF9kcm9wOgotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDVmYTQ1M2IuLjRhMDlmZjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTE0MzUsNiArMTQzNSwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ1ZmZlcl91bm1hcHBlZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiAhYnVmZmVyX21hcHBlZChiaCk7Cit9CiAvKgogICogTm90ZSB0aGF0IHdlIGFsd2F5cyBzdGFydCBhIHRyYW5zYWN0aW9uIGV2ZW4gaWYgd2UncmUgbm90IGpvdXJuYWxsaW5nCiAgKiBkYXRhLiAgVGhpcyBpcyB0byBwcmVzZXJ2ZSBvcmRlcmluZzogYW55IGhvbGUgaW5zdGFudGlhdGlvbiB3aXRoaW4KQEAgLTE1MDUsNiArMTUwOSwxNSBAQAogCWlmIChleHQzX2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKSkKIAkJZ290byBvdXRfZmFpbDsKIAorCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgeworCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCisJCQkJKDEgPDwgQkhfRGlydHkpfCgxIDw8IEJIX1VwdG9kYXRlKSk7CisJfSBlbHNlIGlmICghd2Fsa19wYWdlX2J1ZmZlcnMoTlVMTCwgcGFnZV9idWZmZXJzKHBhZ2UpLCAwLCBQQUdFX0NBQ0hFX1NJWkUsIE5VTEwsIGJ1ZmZlcl91bm1hcHBlZCkpIHsKKwkJLyogUHJvdmlkZSBOVUxMIGluc3RlYWQgb2YgZ2V0X2Jsb2NrIHNvIHRoYXQgd2UgY2F0Y2ggYnVncyBpZiBidWZmZXJzIHdlcmVuJ3QgcmVhbGx5IG1hcHBlZCAqLworCQlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIE5VTEwsIHdiYyk7CisJfQorCXBhZ2VfYnVmcyA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgZXh0M193cml0ZXBhZ2VfdHJhbnNfYmxvY2tzKGlub2RlKSk7CiAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKQEAgLTE1MTIsMTEgKzE1MjUsNiBAQAogCQlnb3RvIG91dF9mYWlsOwogCX0KIAotCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewotCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCi0JCQkJKDEgPDwgQkhfRGlydHkpfCgxIDw8IEJIX1VwdG9kYXRlKSk7Ci0JfQotCXBhZ2VfYnVmcyA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAl3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmcywgMCwKIAkJCVBBR0VfQ0FDSEVfU0laRSwgTlVMTCwgYmdldF9vbmUpOwogCkBAIC0zMDU1LDcgKzMwNjMsNyBAQAogCQkJZXJyb3IgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJZXJyb3IgPSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKKwkJZXJyb3IgPSB2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CiAJCWlmIChlcnJvcikgewogCQkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTMxNDYsNyArMzE1NCw3IEBACiAJCXJldCA9IDIgKiAoYnBwICsgaW5kaXJlY3RzKSArIDI7CiAKICNpZmRlZiBDT05GSUdfUVVPVEEKLQkvKiBXZSBrbm93IHRoYXQgc3RydWN0dXJlIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgRFFVT1RfSU5JVCBzbworCS8qIFdlIGtub3cgdGhhdCBzdHJ1Y3R1cmUgd2FzIGFscmVhZHkgYWxsb2NhdGVkIGR1cmluZyB2ZnNfZHFfaW5pdCBzbwogCSAqIHdlIHdpbGwgYmUgdXBkYXRpbmcgb25seSB0aGUgZGF0YSBibG9ja3MgKyBpbm9kZXMgKi8KIAlyZXQgKz0gMipFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYik7CiAjZW5kaWYKQEAgLTMyMzcsNyArMzI0NSw3IEBACiAgKiBpX3NpemUgaGFzIGJlZW4gY2hhbmdlZCBieSBnZW5lcmljX2NvbW1pdF93cml0ZSgpIGFuZCB3ZSB0aHVzIG5lZWQKICAqIHRvIGluY2x1ZGUgdGhlIHVwZGF0ZWQgaW5vZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgKgotICogQWxzbywgRFFVT1RfQUxMT0NfU1BBQ0UoKSB3aWxsIGFsd2F5cyBkaXJ0eSB0aGUgaW5vZGUgd2hlbiBibG9ja3MKKyAqIEFsc28sIHZmc19kcV9hbGxvY19zcGFjZSgpIHdpbGwgYWx3YXlzIGRpcnR5IHRoZSBpbm9kZSB3aGVuIGJsb2NrcwogICogYXJlIGFsbG9jYXRlZCB0byB0aGUgZmlsZS4KICAqCiAgKiBJZiB0aGUgaW5vZGUgaXMgbWFya2VkIHN5bmNocm9ub3VzLCB3ZSBkb24ndCBob25vdXIgdGhhdCBoZXJlIC0gZG9pbmcKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvbmFtZWkuYyBiL2ZzL2V4dDMvbmFtZWkuYwppbmRleCA0ZGI0ZmZhLi5lMmZjNjNjIDEwMDY0NAotLS0gYS9mcy9leHQzL25hbWVpLmMKKysrIGIvZnMvZXh0My9uYW1laS5jCkBAIC0yMDQ5LDcgKzIwNDksNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBxdW90YXMgYmVmb3JlIHNvIHRoYXQgZXZlbnR1YWwgd3JpdGVzIGdvIGluCiAJICogc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KLQlEUVVPVF9JTklUKGRlbnRyeS0+ZF9pbm9kZSk7CisJdmZzX2RxX2luaXQoZGVudHJ5LT5kX2lub2RlKTsKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RFTEVURV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwpAQCAtMjEwOCw3ICsyMTA4LDcgQEAKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCi0JRFFVT1RfSU5JVChkZW50cnktPmRfaW5vZGUpOworCXZmc19kcV9pbml0KGRlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIyNzIsNyArMjI3Miw3IEBACiAJLyogSW5pdGlhbGl6ZSBxdW90YXMgYmVmb3JlIHNvIHRoYXQgZXZlbnR1YWwgd3JpdGVzIGdvCiAJICogaW4gc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KIAlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkKLQkJRFFVT1RfSU5JVChuZXdfZGVudHJ5LT5kX2lub2RlKTsKKwkJdmZzX2RxX2luaXQobmV3X2RlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KG9sZF9kaXIsIDIgKgogCQkJCQlFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKG9sZF9kaXItPmlfc2IpICsKIAkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA0YTk3MDQxLi45ZTViOGUzIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC03MDcsOCArNzA3LDYgQEAKICNkZWZpbmUgUVRZUEUyTkFNRSh0KSAoKHQpPT1VU1JRVU9UQT8idXNlciI6Imdyb3VwIikKICNkZWZpbmUgUVRZUEUyTU9QVChvbiwgdCkgKCh0KT09VVNSUVVPVEE/KChvbikjI1VTUkpRVU9UQSk6KChvbikjI0dSUEpRVU9UQSkpCiAKLXN0YXRpYyBpbnQgZXh0M19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKLXN0YXRpYyBpbnQgZXh0M19kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RhdGljIGludCBleHQzX3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogc3RhdGljIGludCBleHQzX2FjcXVpcmVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CiBzdGF0aWMgaW50IGV4dDNfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKQEAgLTcyMyw4ICs3MjEsOCBAQAogCQkJCWNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpOwogCiBzdGF0aWMgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZXh0M19xdW90YV9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplCT0gZXh0M19kcXVvdF9pbml0aWFsaXplLAotCS5kcm9wCQk9IGV4dDNfZHF1b3RfZHJvcCwKKwkuaW5pdGlhbGl6ZQk9IGRxdW90X2luaXRpYWxpemUsCisJLmRyb3AJCT0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UJPSBkcXVvdF9hbGxvY19zcGFjZSwKIAkuYWxsb2NfaW5vZGUJPSBkcXVvdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9zcGFjZQk9IGRxdW90X2ZyZWVfc3BhY2UsCkBAIC0xNDM4LDcgKzE0MzYsNyBAQAogCQl9CiAKIAkJbGlzdF9hZGQoJkVYVDNfSShpbm9kZSktPmlfb3JwaGFuLCAmRVhUM19TQihzYiktPnNfb3JwaGFuKTsKLQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKIAkJaWYgKGlub2RlLT5pX25saW5rKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSIlczogdHJ1bmNhdGluZyBpbm9kZSAlbHUgdG8gJUxkIGJ5dGVzXG4iLApAQCAtMjcwMiw3ICsyNzAwLDcgQEAKICAqIFByb2Nlc3MgMSAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzIDIKICAqIGV4dDNfY3JlYXRlKCkgICAgICAgICAgICAgICAgICAgICBxdW90YV9zeW5jKCkKICAqICAgam91cm5hbF9zdGFydCgpICAgICAgICAgICAgICAgICAgIHdyaXRlX2RxdW90KCkKLSAqICAgRFFVT1RfSU5JVCgpICAgICAgICAgICAgICAgICAgICAgICAgZG93bihkcWlvX211dGV4KQorICogICB2ZnNfZHFfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICBkb3duKGRxaW9fbXV0ZXgpCiAgKiAgICAgZG93bihkcWlvX211dGV4KSAgICAgICAgICAgICAgICAgICAgam91cm5hbF9zdGFydCgpCiAgKgogICovCkBAIC0yNzE0LDQ0ICsyNzEyLDYgQEAKIAlyZXR1cm4gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbZHF1b3QtPmRxX3R5cGVdOwogfQogCi1zdGF0aWMgaW50IGV4dDNfZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKLXsKLQloYW5kbGVfdCAqaGFuZGxlOwotCWludCByZXQsIGVycjsKLQotCS8qIFdlIG1heSBjcmVhdGUgcXVvdGEgc3RydWN0dXJlIHNvIHdlIG5lZWQgdG8gcmVzZXJ2ZSBlbm91Z2ggYmxvY2tzICovCi0JaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpCi0JCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7Ci0JcmV0ID0gZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSwgdHlwZSk7Ci0JZXJyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0M19kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBXZSBtYXkgZGVsZXRlIHF1b3RhIHN0cnVjdHVyZSBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgZW5vdWdoIGJsb2NrcyAqLwotCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgMipFWFQzX1FVT1RBX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKLQkJLyoKLQkJICogV2UgY2FsbCBkcXVvdF9kcm9wKCkgYW55d2F5IHRvIGF0IGxlYXN0IHJlbGVhc2UgcmVmZXJlbmNlcwotCQkgKiB0byBxdW90YSBzdHJ1Y3R1cmVzIHNvIHRoYXQgdW1vdW50IGRvZXMgbm90IGhhbmcuCi0JCSAqLwotCQlkcXVvdF9kcm9wKGlub2RlKTsKLQkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKLQl9Ci0JcmV0ID0gZHF1b3RfZHJvcChpbm9kZSk7Ci0JZXJyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgZXh0M193cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewogCWludCByZXQsIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHIuYyBiL2ZzL2V4dDMveGF0dHIuYwppbmRleCAxNzU0MTRhLi44M2I3YmU4IDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyLmMKKysrIGIvZnMvZXh0My94YXR0ci5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAkJZXJyb3IgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CiAJCWlmIChJU19TWU5DKGlub2RlKSkKIAkJCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJZWFfYmRlYnVnKGJoLCAicmVmY291bnQgbm93PSVkOyByZWxlYXNpbmciLAogCQkJICBsZTMyX3RvX2NwdShCSERSKGJoKS0+aF9yZWZjb3VudCkpOwogCQlpZiAoY2UpCkBAIC03NzQsNyArNzc0LDcgQEAKIAkJCQkvKiBUaGUgb2xkIGJsb2NrIGlzIHJlbGVhc2VkIGFmdGVyIHVwZGF0aW5nCiAJCQkJICAgdGhlIGlub2RlLiAqLwogCQkJCWVycm9yID0gLUVEUVVPVDsKLQkJCQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKQorCQkJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIDEpKQogCQkJCQlnb3RvIGNsZWFudXA7CiAJCQkJZXJyb3IgPSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCiAJCQkJCQkJCSAgICAgIG5ld19iaCk7CkBAIC04NDgsNyArODQ4LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiAKIGNsZWFudXBfZHF1b3Q6Ci0JRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCWdvdG8gY2xlYW51cDsKIAogYmFkX2Jsb2NrOgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggZGU5NDU5Yi4uMzhmNDBkNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01MzYsNyArNTM2LDcgQEAKIAlleHQ0X21iX2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJsb2NrLCBjb3VudCwKIAkJCSAgICBtZXRhZGF0YSwgJmRxdW90X2ZyZWVkX2Jsb2Nrcyk7CiAJaWYgKGRxdW90X2ZyZWVkX2Jsb2NrcykKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgZHF1b3RfZnJlZWRfYmxvY2tzKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGRxdW90X2ZyZWVkX2Jsb2Nrcyk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IGIwYzg3ZGMuLjYwODNiYjM4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgvamJkMi5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CiAjaW5jbHVkZSAiZXh0NF9pLmgiCiAKIC8qCkBAIC0xMDk4LDYgKzEwOTksNyBAQAogZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3RydW5jYXRlX3BhZ2UoaGFuZGxlX3QgKmhhbmRsZSwKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBmcm9tKTsKIGV4dGVybiBpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBxc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBpb2N0bC5jICovCiBleHRlcm4gbG9uZyBleHQ0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lhbGxvYy5jIGIvZnMvZXh0NC9pYWxsb2MuYwppbmRleCAyZDJiMzU4Li5mYjUxYjQwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lhbGxvYy5jCisrKyBiL2ZzL2V4dDQvaWFsbG9jLmMKQEAgLTIyMCwxMCArMjIwLDEwIEBACiAJICogTm90ZTogd2UgbXVzdCBmcmVlIGFueSBxdW90YSBiZWZvcmUgbG9ja2luZyB0aGUgc3VwZXJibG9jaywKIAkgKiBhcyB3cml0aW5nIHRoZSBxdW90YSB0byBkaXNrIG1heSBuZWVkIHRoZSBsb2NrIGFzIHdlbGwuCiAJICovCi0JRFFVT1RfSU5JVChpbm9kZSk7CisJdmZzX2RxX2luaXQoaW5vZGUpOwogCWV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUpOwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCkBAIC05MTUsNyArOTE1LDcgQEAKIAllaS0+aV9leHRyYV9pc2l6ZSA9IEVYVDRfU0Ioc2IpLT5zX3dhbnRfZXh0cmFfaXNpemU7CiAKIAlyZXQgPSBpbm9kZTsKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBmYWlsX2Ryb3A7CiAJfQpAQCAtOTU2LDEwICs5NTYsMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBmYWlsX2ZyZWVfZHJvcDoKLQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKKwl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CiAKIGZhaWxfZHJvcDoKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCWlub2RlLT5pX25saW5rID0gMDsKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjN2ZlZDViLi43MWQzZWNkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC05NzUsNiArOTc1LDE3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorcXNpemVfdCBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbDsKKworCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKwl0b3RhbCA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKworCQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzOworCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCisJcmV0dXJuIHRvdGFsOworfQogLyoKICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG1ldGFkYXRhIGJsb2NrcyBuZWVkIHRvIHJlc2VydmUKICAqIHRvIGFsbG9jYXRlIEBibG9ja3MgZm9yIG5vbiBleHRlbnQgZmlsZSBiYXNlZCBmaWxlCkBAIC0xMDM2LDggKzEwNDcsMTQgQEAKIAkvKiB1cGRhdGUgcGVyLWlub2RlIHJlc2VydmF0aW9ucyAqLwogCUJVR19PTih1c2VkICA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOwogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLT0gdXNlZDsKLQogCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCisJLyoKKwkgKiBmcmVlIHRob3NlIG92ZXItYm9va2luZyBxdW90YSBmb3IgbWV0YWRhdGEgYmxvY2tzCisJICovCisKKwlpZiAobWRiX2ZyZWUpCisJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCBtZGJfZnJlZSk7CiB9CiAKIC8qCkBAIC0xNTUzLDggKzE1NzAsOCBAQAogc3RhdGljIGludCBleHQ0X2RhX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5yYmxvY2tzKQogewogCWludCByZXRyaWVzID0gMDsKLSAgICAgICBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKLSAgICAgICB1bnNpZ25lZCBsb25nIG1kX25lZWRlZCwgbWRibG9ja3MsIHRvdGFsID0gMDsKKwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKKwl1bnNpZ25lZCBsb25nIG1kX25lZWRlZCwgbWRibG9ja3MsIHRvdGFsID0gMDsKIAogCS8qCiAJICogcmVjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBtZXRhZGF0YSBibG9ja3MgdG8gcmVzZXJ2ZQpAQCAtMTU3MCwxMiArMTU4NywyMyBAQAogCW1kX25lZWRlZCA9IG1kYmxvY2tzIC0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKIAl0b3RhbCA9IG1kX25lZWRlZCArIG5yYmxvY2tzOwogCisJLyoKKwkgKiBNYWtlIHF1b3RhIHJlc2VydmF0aW9uIGhlcmUgdG8gcHJldmVudCBxdW90YSBvdmVyZmxvdworCSAqIGxhdGVyLiBSZWFsIHF1b3RhIGFjY291bnRpbmcgaXMgZG9uZSBhdCBwYWdlcyB3cml0ZW91dAorCSAqIHRpbWUuCisJICovCisJaWYgKHZmc19kcV9yZXNlcnZlX2Jsb2NrKGlub2RlLCB0b3RhbCkpIHsKKwkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJCXJldHVybiAtRURRVU9UOworCX0KKwogCWlmIChleHQ0X2NsYWltX2ZyZWVfYmxvY2tzKHNiaSwgdG90YWwpKSB7CiAJCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCQlpZiAoZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkgewogCQkJeWllbGQoKTsKIAkJCWdvdG8gcmVwZWF0OwogCQl9CisJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b3RhbCk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICs9IG5yYmxvY2tzOwpAQCAtMTYyOSw2ICsxNjU3LDggQEAKIAlCVUdfT04obWRiID4gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7CiAJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyA9IG1kYjsKIAlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKworCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCByZWxlYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgZXh0NF9kYV9wYWdlX3JlbGVhc2VfcmVzZXJ2YXRpb24oc3RydWN0IHBhZ2UgKnBhZ2UsCkBAIC00NjEyLDcgKzQ2NDIsNyBAQAogCQkJZXJyb3IgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJZXJyb3IgPSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKKwkJZXJyb3IgPSB2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CiAJCWlmIChlcnJvcikgewogCQkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTQ5OTEsNyArNTAyMSw3IEBACiAgKiBpX3NpemUgaGFzIGJlZW4gY2hhbmdlZCBieSBnZW5lcmljX2NvbW1pdF93cml0ZSgpIGFuZCB3ZSB0aHVzIG5lZWQKICAqIHRvIGluY2x1ZGUgdGhlIHVwZGF0ZWQgaW5vZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgKgotICogQWxzbywgRFFVT1RfQUxMT0NfU1BBQ0UoKSB3aWxsIGFsd2F5cyBkaXJ0eSB0aGUgaW5vZGUgd2hlbiBibG9ja3MKKyAqIEFsc28sIHZmc19kcV9hbGxvY19ibG9jaygpIHdpbGwgYWx3YXlzIGRpcnR5IHRoZSBpbm9kZSB3aGVuIGJsb2NrcwogICogYXJlIGFsbG9jYXRlZCB0byB0aGUgZmlsZS4KICAqCiAgKiBJZiB0aGUgaW5vZGUgaXMgbWFya2VkIHN5bmNocm9ub3VzLCB3ZSBkb24ndCBob25vdXIgdGhhdCBoZXJlIC0gZG9pbmcKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggOWY2MWU2Mi4uYjAzODE4OCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTMwODYsOSArMzA4NiwxMiBAQAogCWlmICghKGFjLT5hY19mbGFncyAmIEVYVDRfTUJfREVMQUxMT0NfUkVTRVJWRUQpKQogCQkvKiByZWxlYXNlIGFsbCB0aGUgcmVzZXJ2ZWQgYmxvY2tzIGlmIG5vbiBkZWxhbGxvYyAqLwogCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCByZXNlcnZfYmxrcyk7Ci0JZWxzZQorCWVsc2UgewogCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLAogCQkJCQkJYWMtPmFjX2JfZXguZmVfbGVuKTsKKwkJLyogY29udmVydCByZXNlcnZlZCBxdW90YSBibG9ja3MgdG8gcmVhbCBxdW90YSBibG9ja3MgKi8KKwkJdmZzX2RxX2NsYWltX2Jsb2NrKGFjLT5hY19pbm9kZSwgYWMtPmFjX2JfZXguZmVfbGVuKTsKKwl9CiAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLApAQCAtNDU0NCw3ICs0NTQ3LDcgQEAKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlleHQ0X2ZzYmxrX3QgYmxvY2sgPSAwOwotCXVuc2lnbmVkIGludCBpbnF1b3RhOworCXVuc2lnbmVkIGludCBpbnF1b3RhID0gMDsKIAl1bnNpZ25lZCBpbnQgcmVzZXJ2X2Jsa3MgPSAwOwogCiAJc2IgPSBhci0+aW5vZGUtPmlfc2I7CkBAIC00NTYyLDkgKzQ1NjUsMTcgQEAKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXItPnBsZWZ0LAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBhci0+cHJpZ2h0KTsKIAotCWlmICghRVhUNF9JKGFyLT5pbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZykgewotCQkvKgotCQkgKiBXaXRoIGRlbGFsbG9jIHdlIGFscmVhZHkgcmVzZXJ2ZWQgdGhlIGJsb2NrcworCS8qCisJICogRm9yIGRlbGF5ZWQgYWxsb2NhdGlvbiwgd2UgY291bGQgc2tpcCB0aGUgRU5PU1BDIGFuZAorCSAqIEVEUVVPVCBjaGVjaywgYXMgYmxvY2tzIGFuZCBxdW90YXMgaGF2ZSBiZWVuIGFscmVhZHkKKwkgKiByZXNlcnZlZCB3aGVuIGRhdGEgYmVpbmcgY29waWVkIGludG8gcGFnZWNhY2hlLgorCSAqLworCWlmIChFWFQ0X0koYXItPmlub2RlKS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnKQorCQlhci0+ZmxhZ3MgfD0gRVhUNF9NQl9ERUxBTExPQ19SRVNFUlZFRDsKKwllbHNlIHsKKwkJLyogV2l0aG91dCBkZWxheWVkIGFsbG9jYXRpb24gd2UgbmVlZCB0byB2ZXJpZnkKKwkJICogdGhlcmUgaXMgZW5vdWdoIGZyZWUgYmxvY2tzIHRvIGRvIGJsb2NrIGFsbG9jYXRpb24KKwkJICogYW5kIHZlcmlmeSBhbGxvY2F0aW9uIGRvZXNuJ3QgZXhjZWVkIHRoZSBxdW90YSBsaW1pdHMuCiAJCSAqLwogCQl3aGlsZSAoYXItPmxlbiAmJiBleHQ0X2NsYWltX2ZyZWVfYmxvY2tzKHNiaSwgYXItPmxlbikpIHsKIAkJCS8qIGxldCBvdGhlcnMgdG8gZnJlZSB0aGUgc3BhY2UgKi8KQEAgLTQ1NzYsMTkgKzQ1ODcsMTYgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJCXJlc2Vydl9ibGtzID0gYXItPmxlbjsKKwkJd2hpbGUgKGFyLT5sZW4gJiYgdmZzX2RxX2FsbG9jX2Jsb2NrKGFyLT5pbm9kZSwgYXItPmxlbikpIHsKKwkJCWFyLT5mbGFncyB8PSBFWFQ0X01CX0hJTlRfTk9QUkVBTExPQzsKKwkJCWFyLT5sZW4tLTsKKwkJfQorCQlpbnF1b3RhID0gYXItPmxlbjsKKwkJaWYgKGFyLT5sZW4gPT0gMCkgeworCQkJKmVycnAgPSAtRURRVU9UOworCQkJZ290byBvdXQzOworCQl9CiAJfQotCXdoaWxlIChhci0+bGVuICYmIERRVU9UX0FMTE9DX0JMT0NLKGFyLT5pbm9kZSwgYXItPmxlbikpIHsKLQkJYXItPmZsYWdzIHw9IEVYVDRfTUJfSElOVF9OT1BSRUFMTE9DOwotCQlhci0+bGVuLS07Ci0JfQotCWlmIChhci0+bGVuID09IDApIHsKLQkJKmVycnAgPSAtRURRVU9UOwotCQlnb3RvIG91dDM7Ci0JfQotCWlucXVvdGEgPSBhci0+bGVuOwotCi0JaWYgKEVYVDRfSShhci0+aW5vZGUpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcpCi0JCWFyLT5mbGFncyB8PSBFWFQ0X01CX0RFTEFMTE9DX1JFU0VSVkVEOwogCiAJYWMgPSBrbWVtX2NhY2hlX2FsbG9jKGV4dDRfYWNfY2FjaGVwLCBHRlBfTk9GUyk7CiAJaWYgKCFhYykgewpAQCAtNDY1NCw4ICs0NjYyLDggQEAKIG91dDI6CiAJa21lbV9jYWNoZV9mcmVlKGV4dDRfYWNfY2FjaGVwLCBhYyk7CiBvdXQxOgotCWlmIChhci0+bGVuIDwgaW5xdW90YSkKLQkJRFFVT1RfRlJFRV9CTE9DSyhhci0+aW5vZGUsIGlucXVvdGEgLSBhci0+bGVuKTsKKwlpZiAoaW5xdW90YSAmJiBhci0+bGVuIDwgaW5xdW90YSkKKwkJdmZzX2RxX2ZyZWVfYmxvY2soYXItPmlub2RlLCBpbnF1b3RhIC0gYXItPmxlbik7CiBvdXQzOgogCWlmICghYXItPmxlbikgewogCQlpZiAoIUVYVDRfSShhci0+aW5vZGUpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcpCmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggYmE3MDJiZC4uODM0MTAyNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMjA5Miw3ICsyMDkyLDcgQEAKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbyBpbgogCSAqIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCi0JRFFVT1RfSU5JVChkZW50cnktPmRfaW5vZGUpOworCXZmc19kcV9pbml0KGRlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGRpciwgRVhUNF9ERUxFVEVfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIxNTEsNyArMjE1MSw3IEBACiAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28KIAkgKiBpbiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwotCURRVU9UX0lOSVQoZGVudHJ5LT5kX2lub2RlKTsKKwl2ZnNfZHFfaW5pdChkZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChkaXIsIEVYVDRfREVMRVRFX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yMzE4LDcgKzIzMTgsNyBAQAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCiAJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCi0JCURRVU9UX0lOSVQobmV3X2RlbnRyeS0+ZF9pbm9kZSk7CisJCXZmc19kcV9pbml0KG5ld19kZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChvbGRfZGlyLCAyICoKIAkJCQkJRVhUNF9EQVRBX1RSQU5TX0JMT0NLUyhvbGRfZGlyLT5pX3NiKSArCiAJCQkJCUVYVDRfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMik7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMzlkMTk5My4uZjczNzFhNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtOTI2LDggKzkyNiw2IEBACiAjZGVmaW5lIFFUWVBFMk5BTUUodCkgKCh0KSA9PSBVU1JRVU9UQSA/ICJ1c2VyIiA6ICJncm91cCIpCiAjZGVmaW5lIFFUWVBFMk1PUFQob24sIHQpICgodCkgPT0gVVNSUVVPVEE/KChvbikjI1VTUkpRVU9UQSk6KChvbikjI0dSUEpRVU9UQSkpCiAKLXN0YXRpYyBpbnQgZXh0NF9kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKLXN0YXRpYyBpbnQgZXh0NF9kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RhdGljIGludCBleHQ0X3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogc3RhdGljIGludCBleHQ0X2FjcXVpcmVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CiBzdGF0aWMgaW50IGV4dDRfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKQEAgLTk0Miw5ICs5NDAsMTMgQEAKIAkJCQljb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTsKIAogc3RhdGljIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGV4dDRfcXVvdGFfb3BlcmF0aW9ucyA9IHsKLQkuaW5pdGlhbGl6ZQk9IGV4dDRfZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcAkJPSBleHQ0X2RxdW90X2Ryb3AsCisJLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAorCS5kcm9wCQk9IGRxdW90X2Ryb3AsCiAJLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCisJLnJlc2VydmVfc3BhY2UJPSBkcXVvdF9yZXNlcnZlX3NwYWNlLAorCS5jbGFpbV9zcGFjZQk9IGRxdW90X2NsYWltX3NwYWNlLAorCS5yZWxlYXNlX3Jzdgk9IGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UsCisJLmdldF9yZXNlcnZlZF9zcGFjZSA9IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlLAogCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAogCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKIAkuZnJlZV9pbm9kZQk9IGRxdW90X2ZyZWVfaW5vZGUsCkBAIC0xODAyLDcgKzE4MDQsNyBAQAogCQl9CiAKIAkJbGlzdF9hZGQoJkVYVDRfSShpbm9kZSktPmlfb3JwaGFuLCAmRVhUNF9TQihzYiktPnNfb3JwaGFuKTsKLQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKIAkJaWYgKGlub2RlLT5pX25saW5rKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSIlczogdHJ1bmNhdGluZyBpbm9kZSAlbHUgdG8gJWxsZCBieXRlc1xuIiwKQEAgLTMzNjcsOCArMzM2OSw4IEBACiAgKiBpcyBsb2NrZWQgZm9yIHdyaXRlLiBPdGhlcndpc2UgdGhlIGFyZSBwb3NzaWJsZSBkZWFkbG9ja3M6CiAgKiBQcm9jZXNzIDEgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAyCiAgKiBleHQ0X2NyZWF0ZSgpICAgICAgICAgICAgICAgICAgICAgcXVvdGFfc3luYygpCi0gKiAgIGpiZDJfam91cm5hbF9zdGFydCgpICAgICAgICAgICAgICAgICAgIHdyaXRlX2RxdW90KCkKLSAqICAgRFFVT1RfSU5JVCgpICAgICAgICAgICAgICAgICAgICAgICAgZG93bihkcWlvX211dGV4KQorICogICBqYmQyX2pvdXJuYWxfc3RhcnQoKSAgICAgICAgICAgICAgICAgIHdyaXRlX2RxdW90KCkKKyAqICAgdmZzX2RxX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKGRxaW9fbXV0ZXgpCiAgKiAgICAgZG93bihkcWlvX211dGV4KSAgICAgICAgICAgICAgICAgICAgamJkMl9qb3VybmFsX3N0YXJ0KCkKICAqCiAgKi8KQEAgLTMzODAsNDQgKzMzODIsNiBAQAogCXJldHVybiBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5maWxlc1tkcXVvdC0+ZHFfdHlwZV07CiB9CiAKLXN0YXRpYyBpbnQgZXh0NF9kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCWhhbmRsZV90ICpoYW5kbGU7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGNyZWF0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIqRVhUNF9RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmIChJU19FUlIoaGFuZGxlKSkKLQkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKLQlyZXQgPSBkcXVvdF9pbml0aWFsaXplKGlub2RlLCB0eXBlKTsKLQllcnIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBleHQ0X2RxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQloYW5kbGVfdCAqaGFuZGxlOwotCWludCByZXQsIGVycjsKLQotCS8qIFdlIG1heSBkZWxldGUgcXVvdGEgc3RydWN0dXJlIHNvIHdlIG5lZWQgdG8gcmVzZXJ2ZSBlbm91Z2ggYmxvY2tzICovCi0JaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCAyKkVYVDRfUVVPVEFfREVMX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQkvKgotCQkgKiBXZSBjYWxsIGRxdW90X2Ryb3AoKSBhbnl3YXkgdG8gYXQgbGVhc3QgcmVsZWFzZSByZWZlcmVuY2VzCi0JCSAqIHRvIHF1b3RhIHN0cnVjdHVyZXMgc28gdGhhdCB1bW91bnQgZG9lcyBub3QgaGFuZy4KLQkJICovCi0JCWRxdW90X2Ryb3AoaW5vZGUpOwotCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwotCX0KLQlyZXQgPSBkcXVvdF9kcm9wKGlub2RlKTsKLQllcnIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBleHQ0X3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CiAJaW50IHJldCwgZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDE1N2NlNjUuLjYyYjMxYzIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYworKysgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJZXh0NF9oYW5kbGVfc3luYyhoYW5kbGUpOwotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQllYV9iZGVidWcoYmgsICJyZWZjb3VudCBub3c9JWQ7IHJlbGVhc2luZyIsCiAJCQkgIGxlMzJfdG9fY3B1KEJIRFIoYmgpLT5oX3JlZmNvdW50KSk7CiAJCWlmIChjZSkKQEAgLTc4NCw3ICs3ODQsNyBAQAogCQkJCS8qIFRoZSBvbGQgYmxvY2sgaXMgcmVsZWFzZWQgYWZ0ZXIgdXBkYXRpbmcKIAkJCQkgICB0aGUgaW5vZGUuICovCiAJCQkJZXJyb3IgPSAtRURRVU9UOwotCQkJCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgMSkpCisJCQkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpCiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKIAkJCQkJCQkJICAgICAgbmV3X2JoKTsKQEAgLTg2MCw3ICs4NjAsNyBAQAogCXJldHVybiBlcnJvcjsKIAogY2xlYW51cF9kcXVvdDoKLQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJZ290byBjbGVhbnVwOwogCiBiYWRfYmxvY2s6CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDdiYTAzYTQuLmRhM2YzNjEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCisrKyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBtc2Rvc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbXNkb3NfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfaGFzaAkJPSBtc2Rvc19oYXNoLAogCS5kX2NvbXBhcmUJPSBtc2Rvc19jbXAsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX3ZmYXQuYyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKaW5kZXggOGFlMzJlMy4uYTBlMDBlMyAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuYworKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCkBAIC0xNjYsMTMgKzE2NiwxMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHZmYXRfY2lfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdmZhdF9jaV9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUJPSB2ZmF0X3JldmFsaWRhdGVfY2ksCiAJLmRfaGFzaAkJPSB2ZmF0X2hhc2hpLAogCS5kX2NvbXBhcmUJPSB2ZmF0X2NtcGksCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHZmYXRfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdmZhdF9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUJPSB2ZmF0X3JldmFsaWRhdGUsCiAJLmRfaGFzaAkJPSB2ZmF0X2hhc2gsCiAJLmRfY29tcGFyZQk9IHZmYXRfY21wLApkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggYmQyMTVjYy4uZDg2NWNhNjYgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBTRVRGTF9NQVNLIChPX0FQUEVORCB8IE9fTk9OQkxPQ0sgfCBPX05ERUxBWSB8IEZBU1lOQyB8IE9fRElSRUNUIHwgT19OT0FUSU1FKQorI2RlZmluZSBTRVRGTF9NQVNLIChPX0FQUEVORCB8IE9fTk9OQkxPQ0sgfCBPX05ERUxBWSB8IE9fRElSRUNUIHwgT19OT0FUSU1FKQogCiBzdGF0aWMgaW50IHNldGZsKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxwLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE3NywyMSArMTc3LDIxIEBACiAJCXJldHVybiBlcnJvcjsKIAogCS8qCi0JICogV2Ugc3RpbGwgbmVlZCBhIGxvY2sgaGVyZSBmb3Igbm93IHRvIGtlZXAgbXVsdGlwbGUgRkFTWU5DIGNhbGxzCi0JICogZnJvbSByYWNpbmcgd2l0aCBlYWNoIG90aGVyLgorCSAqIC0+ZmFzeW5jKCkgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIEZBU1lOQyBiaXQuCiAJICovCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAoKGFyZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSB7Ci0JCWlmIChmaWxwLT5mX29wICYmIGZpbHAtPmZfb3AtPmZhc3luYykgewotCQkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIChhcmcgJiBGQVNZTkMpICE9IDApOwotCQkJaWYgKGVycm9yIDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQorCWlmICgoKGFyZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSAmJiBmaWxwLT5mX29wICYmCisJCQlmaWxwLT5mX29wLT5mYXN5bmMpIHsKKwkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIChhcmcgJiBGQVNZTkMpICE9IDApOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBvdXQ7CisJCWlmIChlcnJvciA+IDApCisJCQllcnJvciA9IDA7CiAJfQotCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCWZpbHAtPmZfZmxhZ3MgPSAoYXJnICYgU0VURkxfTUFTSykgfCAoZmlscC0+Zl9mbGFncyAmIH5TRVRGTF9NQVNLKTsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKKwogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01MTYsNyArNTE2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmFzeW5jX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCi0gKiBmYXN5bmNfaGVscGVyKCkgaXMgdXNlZCBieSBzb21lIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycyAobWFpbmx5IG1pY2UpCisgKiBmYXN5bmNfaGVscGVyKCkgaXMgdXNlZCBieSBhbG1vc3QgYWxsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycwogICogdG8gc2V0IHVwIHRoZSBmYXN5bmMgcXVldWUuIEl0IHJldHVybnMgbmVnYXRpdmUgb24gZXJyb3IsIDAgaWYgaXQgZGlkCiAgKiBubyBjaGFuZ2VzIGFuZCBwb3NpdGl2ZSBpZiBpdCBhZGRlZC9kZWxldGVkIHRoZSBlbnRyeS4KICAqLwpAQCAtNTU1LDYgKzU1NSwxMyBAQAogCQlyZXN1bHQgPSAxOwogCX0KIG91dDoKKwkvKiBGaXggdXAgRkFTWU5DIGJpdCB3aGlsZSBzdGlsbCBob2xkaW5nIGZhc3luY19sb2NrICovCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOworCWlmIChvbikKKwkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7CisJZWxzZQorCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfdW5sb2NrX2lycSgmZmFzeW5jX2xvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggYmJlZWFjNi4uYjc0YThlMSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9ldmVudHBvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CkBAIC0xMjcsNiArMTI4LDcgQEAKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwogCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOworCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCiAJcmV0dXJuIGY7CkBAIC0yNzksNiArMjgxLDcgQEAKIAlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5yZWxlYXNlKQogCQlmaWxlLT5mX29wLT5yZWxlYXNlKGlub2RlLCBmaWxlKTsKIAlzZWN1cml0eV9maWxlX2ZyZWUoZmlsZSk7CisJaW1hX2ZpbGVfZnJlZShmaWxlKTsKIAlpZiAodW5saWtlbHkoU19JU0NIUihpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9jZGV2ICE9IE5VTEwpKQogCQljZGV2X3B1dChpbm9kZS0+aV9jZGV2KTsKIAlmb3BzX3B1dChmaWxlLT5mX29wKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IGZkZmYzNDYuLjA2ZGEwNTIgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJcmV0dXJuICFub2RlaWQgfHwgbm9kZWlkID09IEZVU0VfUk9PVF9JRDsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGZ1c2VfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZnVzZV9kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gZnVzZV9kZW50cnlfcmV2YWxpZGF0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZnVzZV9pLmggYi9mcy9mdXNlL2Z1c2VfaS5oCmluZGV4IDVlNjRiODEuLjZmYzVhZWQgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZnVzZV9pLmgKKysrIGIvZnMvZnVzZS9mdXNlX2kuaApAQCAtNDkzLDcgKzQ5Myw3IEBACiAvKiogRGV2aWNlIG9wZXJhdGlvbnMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnM7CiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZnVzZV9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZnVzZV9kZW50cnlfb3BlcmF0aW9uczsKIAogLyoqCiAgKiBHZXQgYSBmaWxsZWQgaW4gaW5vZGUKZGlmZiAtLWdpdCBhL2ZzL2dmczIvS2NvbmZpZyBiL2ZzL2dmczIvS2NvbmZpZwppbmRleCBlNTYzYTY0Li4zYTk4MWI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL0tjb25maWcKKysrIGIvZnMvZ2ZzMi9LY29uZmlnCkBAIC0xLDYgKzEsMTAgQEAKIGNvbmZpZyBHRlMyX0ZTCiAJdHJpc3RhdGUgIkdGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAoNjRCSVQgfHwgTEJEKQorCXNlbGVjdCBETE0gaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBDT05GSUdGU19GUyBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IFNZU0ZTIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgSVBfU0NUUCBpZiBETE1fU0NUUAogCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCkBAIC0xOCwxNyArMjIsMTYgQEAKIAkgIHRoZSBsb2NraW5nIG1vZHVsZSBiZWxvdy4gRG9jdW1lbnRhdGlvbiBhbmQgdXRpbGl0aWVzIGZvciBHRlMyIGNhbgogCSAgYmUgZm91bmQgaGVyZTogaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9jbHVzdGVyCiAKLQkgIFRoZSAibm9sb2NrIiBsb2NrIG1vZHVsZSBpcyBub3cgYnVpbHQgaW4gdG8gR0ZTMiBieSBkZWZhdWx0LgorCSAgVGhlICJub2xvY2siIGxvY2sgbW9kdWxlIGlzIG5vdyBidWlsdCBpbiB0byBHRlMyIGJ5IGRlZmF1bHQuIElmCisJICB5b3Ugd2FudCB0byB1c2UgdGhlIERMTSwgYmUgc3VyZSB0byBlbmFibGUgSE9UUExVRyBhbmQgSVB2NC82CisJICBuZXR3b3JraW5nLgogCiBjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTQotCXRyaXN0YXRlICJHRlMyIERMTSBsb2NraW5nIG1vZHVsZSIKLQlkZXBlbmRzIG9uIEdGUzJfRlMgJiYgU1lTRlMgJiYgTkVUICYmIElORVQgJiYgKElQVjYgfHwgSVBWNj1uKQotCXNlbGVjdCBJUF9TQ1RQIGlmIERMTV9TQ1RQCi0Jc2VsZWN0IENPTkZJR0ZTX0ZTCi0Jc2VsZWN0IERMTQorCWJvb2wgIkdGUzIgRExNIGxvY2tpbmciCisJZGVwZW5kcyBvbiAoR0ZTMl9GUyE9bikgJiYgTkVUICYmIElORVQgJiYgKElQVjYgfHwgSVBWNj1uKSAmJiBIT1RQTFVHCiAJaGVscAogCSAgTXVsdGlwbGUgbm9kZSBsb2NraW5nIG1vZHVsZSBmb3IgR0ZTMgogCi0JICBNb3N0IHVzZXJzIG9mIEdGUzIgd2lsbCByZXF1aXJlIHRoaXMgbW9kdWxlLiBJdCBwcm92aWRlcyB0aGUgbG9ja2luZworCSAgTW9zdCB1c2VycyBvZiBHRlMyIHdpbGwgcmVxdWlyZSB0aGlzLiBJdCBwcm92aWRlcyB0aGUgbG9ja2luZwogCSAgaW50ZXJmYWNlIGJldHdlZW4gR0ZTMiBhbmQgdGhlIERMTSwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gdXNlIEdGUzIKIAkgIGluIGEgY2x1c3RlciBlbnZpcm9ubWVudC4KZGlmZiAtLWdpdCBhL2ZzL2dmczIvTWFrZWZpbGUgYi9mcy9nZnMyL01ha2VmaWxlCmluZGV4IGMxYjRlYzZhLi5hODUxZWE0IDEwMDY0NAotLS0gYS9mcy9nZnMyL01ha2VmaWxlCisrKyBiL2ZzL2dmczIvTWFrZWZpbGUKQEAgLTEsOSArMSw5IEBACiBvYmotJChDT05GSUdfR0ZTMl9GUykgKz0gZ2ZzMi5vCiBnZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIGVhb3BzLm8gZWF0dHIubyBnbG9jay5vIFwKLQlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIGxvY2tpbmcubyBtYWluLm8gbWV0YV9pby5vIFwKKwlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXAogCW1vdW50Lm8gb3BzX2FkZHJlc3MubyBvcHNfZGVudHJ5Lm8gb3BzX2V4cG9ydC5vIG9wc19maWxlLm8gXAogCW9wc19mc3R5cGUubyBvcHNfaW5vZGUubyBvcHNfc3VwZXIubyBxdW90YS5vIFwKIAlyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vCiAKLW9iai0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NraW5nL2RsbS8KK2dmczItJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja19kbG0ubwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5jIGIvZnMvZ2ZzMi9hY2wuYwppbmRleCBlMzM1ZGNlLi40Mzc2NGY0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5jCisrKyBiL2ZzL2dmczIvYWNsLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2xfeGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9ibWFwLmMgYi9mcy9nZnMyL2JtYXAuYwppbmRleCAxMWZmYzU2Li4zYTVkM2Y4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2JtYXAuYworKysgYi9mcy9nZnMyL2JtYXAuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggYjdjOGU1Yy4uYWVmNGQwYyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC02MCw3ICs2MCw2IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZWFvcHMuYyBiL2ZzL2dmczIvZWFvcHMuYwppbmRleCBmMTE0YmEyLi5kZWU5YjAzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2Vhb3BzLmMKKysrIGIvZnMvZ2ZzMi9lYW9wcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYXR0ci5jIGIvZnMvZ2ZzMi9lYXR0ci5jCmluZGV4IDBkMWM3NmQuLjg5OTc2M2EgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWF0dHIuYworKysgYi9mcy9nZnMyL2VhdHRyLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5jIGIvZnMvZ2ZzMi9nbG9jay5jCmluZGV4IDZiOTgzYWUuLjM5ODRlNDcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suYworKysgYi9mcy9nZnMyL2dsb2NrLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgpAQCAtMTgsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CkBAIC0xNTUsMTMgKzE1MywxMCBAQAogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKIAlzdHJ1Y3QgaW5vZGUgKmFzcGFjZSA9IGdsLT5nbF9hc3BhY2U7CiAKLQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2spCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGdsLT5nbF9sb2NrKTsKLQogCWlmIChhc3BhY2UpCiAJCWdmczJfYXNwYWNlX3B1dChhc3BhY2UpOwogCi0Ja21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CisJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKIH0KIAogLyoqCkBAIC0xNzIsNiArMTY3LDcgQEAKIAogc3RhdGljIHZvaWQgZ2ZzMl9nbG9ja19ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKKwlHTE9DS19CVUdfT04oZ2wsIGF0b21pY19yZWFkKCZnbC0+Z2xfcmVmKSA9PSAwKTsKIAlhdG9taWNfaW5jKCZnbC0+Z2xfcmVmKTsKIH0KIApAQCAtMjExLDE3ICsyMDcsMTUgQEAKIAkJCWF0b21pY19kZWMoJmxydV9jb3VudCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKLQkJR0xPQ0tfQlVHX09OKGdsLCBnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQpOwotCQlHTE9DS19CVUdfT04oZ2wsICFsaXN0X2VtcHR5KCZnbC0+Z2xfbHJ1KSk7CiAJCUdMT0NLX0JVR19PTihnbCwgIWxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSk7CiAJCWdsb2NrX2ZyZWUoZ2wpOwogCQlydiA9IDE7CiAJCWdvdG8gb3V0OwogCX0KLQl3cml0ZV91bmxvY2soZ2xfbG9ja19hZGRyKGdsLT5nbF9oYXNoKSk7CiAJLyogMSBmb3IgYmVpbmcgaGFzaGVkLCAxIGZvciBoYXZpbmcgc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpID09IDIpCiAJCWdmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oZ2wpOworCXdyaXRlX3VubG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKIG91dDoKIAlyZXR1cm4gcnY7CiB9CkBAIC0yNTYsMjcgKzI1MCw2IEBACiB9CiAKIC8qKgotICogZ2ZzMl9nbG9ja19maW5kKCkgLSBGaW5kIGdsb2NrIGJ5IGxvY2sgbnVtYmVyCi0gKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAbmFtZTogVGhlIGxvY2sgbmFtZQotICoKLSAqIFJldHVybnM6IE5VTEwsIG9yIHRoZSBzdHJ1Y3QgZ2ZzMl9nbG9jayB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyCi0gKi8KLQotc3RhdGljIHN0cnVjdCBnZnMyX2dsb2NrICpnZnMyX2dsb2NrX2ZpbmQoY29uc3Qgc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQkJCSAgY29uc3Qgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lKQotewotCXVuc2lnbmVkIGludCBoYXNoID0gZ2xfaGFzaChzZHAsIG5hbWUpOwotCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKLQotCXJlYWRfbG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwotCWdsID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsIG5hbWUpOwotCXJlYWRfdW5sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7Ci0KLQlyZXR1cm4gZ2w7Ci19Ci0KLS8qKgogICogbWF5X2dyYW50IC0gY2hlY2sgaWYgaXRzIG9rIHRvIGdyYW50IGEgbmV3IGxvY2sKICAqIEBnbDogVGhlIGdsb2NrCiAgKiBAZ2g6IFRoZSBsb2NrIHJlcXVlc3Qgd2hpY2ggd2Ugd2lzaCB0byBncmFudApAQCAtNTIzLDcgKzQ5Niw3IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ZzMl9sbV9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAotCQkJCSB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLCB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLAorCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLAogCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldCA9IExNX09VVF9FUlJPUjsKQEAgLTUzMiw3ICs1MDUsNyBAQAogCQlyZXR1cm4gcmVxX3N0YXRlID09IExNX1NUX1VOTE9DS0VEID8gMCA6IHJlcV9zdGF0ZTsKIAogCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJcmV0ID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jayhsb2NrLCBjdXJfc3RhdGUsCisJCXJldCA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2xvY2sobG9jaywKIAkJCQkJCQkgcmVxX3N0YXRlLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU3NSw3ICs1NDgsNyBAQAogCSAgICBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfREVGRVJSRUQpICYmCiAJICAgICEobGNrX2ZsYWdzICYgKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCKSkpCiAJCWxja19mbGFncyB8PSBMTV9GTEFHX1RSWV8xQ0I7Ci0JcmV0ID0gZ2ZzMl9sbV9sb2NrKHNkcCwgZ2wtPmdsX2xvY2ssIGdsLT5nbF9zdGF0ZSwgdGFyZ2V0LCBsY2tfZmxhZ3MpOworCXJldCA9IGdmczJfbG1fbG9jayhzZHAsIGdsLCB0YXJnZXQsIGxja19mbGFncyk7CiAKIAlpZiAoIShyZXQgJiBMTV9PVVRfQVNZTkMpKSB7CiAJCWZpbmlzaF94bW90ZShnbCwgcmV0KTsKQEAgLTYyNCwxMCArNTk3LDExIEBACiAKIAlHTE9DS19CVUdfT04oZ2wsIHRlc3RfYml0KEdMRl9ERU1PVEVfSU5fUFJPR1JFU1MsICZnbC0+Z2xfZmxhZ3MpKTsKIAorCWRvd25fcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlpZiAodGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykgJiYKIAkgICAgZ2wtPmdsX2RlbW90ZV9zdGF0ZSAhPSBnbC0+Z2xfc3RhdGUpIHsKIAkJaWYgKGZpbmRfZmlyc3RfaG9sZGVyKGdsKSkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQlpZiAobm9uYmxvY2spCiAJCQlnb3RvIG91dF9zY2hlZDsKIAkJc2V0X2JpdChHTEZfREVNT1RFX0lOX1BST0dSRVNTLCAmZ2wtPmdsX2ZsYWdzKTsKQEAgLTYzOCwyMyArNjEyLDI2IEBACiAJCQlnZnMyX2RlbW90ZV93YWtlKGdsKTsKIAkJcmV0ID0gZG9fcHJvbW90ZShnbCk7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQlpZiAocmV0ID09IDIpCi0JCQlyZXR1cm47CisJCQlnb3RvIG91dF9zZW07CiAJCWdoID0gZmluZF9maXJzdF93YWl0ZXIoZ2wpOwogCQlnbC0+Z2xfdGFyZ2V0ID0gZ2gtPmdoX3N0YXRlOwogCQlpZiAoIShnaC0+Z2hfZmxhZ3MgJiAoTE1fRkxBR19UUlkgfCBMTV9GTEFHX1RSWV8xQ0IpKSkKIAkJCWRvX2Vycm9yKGdsLCAwKTsgLyogRmFpbCBxdWV1ZWQgdHJ5IGxvY2tzICovCiAJfQogCWRvX3htb3RlKGdsLCBnaCwgZ2wtPmdsX3RhcmdldCk7CitvdXRfc2VtOgorCXVwX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7CiAJcmV0dXJuOwogCiBvdXRfc2NoZWQ6CiAJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKIAlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQogCQlnZnMyX2dsb2NrX3B1dChnbCk7Ci1vdXQ6CitvdXRfdW5sb2NrOgogCWNsZWFyX2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncyk7CisJZ290byBvdXRfc2VtOwogfQogCiBzdGF0aWMgdm9pZCBnbG9ja193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNjgxLDE4ICs2NTgsNiBAQAogCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9sbV9nZXRfbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICAgIHZvaWQgKipsb2NrcCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fZ2V0X2xvY2spCi0JCXJldHVybiAwOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9nZXRfbG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBsb2NrcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCiAvKioKICAqIGdmczJfZ2xvY2tfZ2V0KCkgLSBHZXQgYSBnbG9jaywgb3IgY3JlYXRlIG9uZSBpZiBvbmUgZG9lc24ndCBleGlzdAogICogQHNkcDogVGhlIEdGUzIgc3VwZXJibG9jawpAQCAtNzE5LDEwICs2ODQsMTEgQEAKIAlnbCA9IHNlYXJjaF9idWNrZXQoaGFzaCwgc2RwLCAmbmFtZSk7CiAJcmVhZF91bmxvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKIAotCWlmIChnbCB8fCAhY3JlYXRlKSB7Ci0JCSpnbHAgPSBnbDsKKwkqZ2xwID0gZ2w7CisJaWYgKGdsKQogCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFjcmVhdGUpCisJCXJldHVybiAtRU5PRU5UOwogCiAJZ2wgPSBrbWVtX2NhY2hlX2FsbG9jKGdmczJfZ2xvY2tfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdsKQpAQCAtNzM2LDcgKzcwMiw5IEBACiAJZ2wtPmdsX2RlbW90ZV9zdGF0ZSA9IExNX1NUX0VYQ0xVU0lWRTsKIAlnbC0+Z2xfaGFzaCA9IGhhc2g7CiAJZ2wtPmdsX29wcyA9IGdsb3BzOwotCWdsLT5nbF9zdGFtcCA9IGppZmZpZXM7CisJc25wcmludGYoZ2wtPmdsX3N0cm5hbWUsIEdETE1fU1RSTkFNRV9CWVRFUywgIiU4eCUxNmxseCIsIG5hbWUubG5fdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyludW1iZXIpOworCW1lbXNldCgmZ2wtPmdsX2xrc2IsIDAsIHNpemVvZihzdHJ1Y3QgZGxtX2xrc2IpKTsKKwlnbC0+Z2xfbGtzYi5zYl9sdmJwdHIgPSBnbC0+Z2xfbHZiOwogCWdsLT5nbF90Y2hhbmdlID0gamlmZmllczsKIAlnbC0+Z2xfb2JqZWN0ID0gTlVMTDsKIAlnbC0+Z2xfc2JkID0gc2RwOwpAQCAtNzUzLDEwICs3MjEsNiBAQAogCQl9CiAJfQogCi0JZXJyb3IgPSBnZnMyX2xtX2dldF9sb2NrKHNkcCwgJm5hbWUsICZnbC0+Z2xfbG9jayk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWxfYXNwYWNlOwotCiAJd3JpdGVfbG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwogCXRtcCA9IHNlYXJjaF9idWNrZXQoaGFzaCwgc2RwLCAmbmFtZSk7CiAJaWYgKHRtcCkgewpAQCAtNzcyLDkgKzczNiw2IEBACiAKIAlyZXR1cm4gMDsKIAotZmFpbF9hc3BhY2U6Ci0JaWYgKGdsLT5nbF9hc3BhY2UpCi0JCWdmczJfYXNwYWNlX3B1dChnbC0+Z2xfYXNwYWNlKTsKIGZhaWw6CiAJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtOTY2LDcgKzkyNyw3IEBACiAJaWYgKCEoZ2gtPmdoX2ZsYWdzICYgTE1fRkxBR19QUklPUklUWSkpIHsKIAkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKIAkJaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbCkKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbChnbC0+Z2xfbG9jayk7CisJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9jYW5jZWwoZ2wpOwogCQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIAl9CiAJcmV0dXJuOwpAQCAtMTA1MSw3ICsxMDEyLDYgQEAKIAkJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCQkJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKIAkJfQotCQlnbC0+Z2xfc3RhbXAgPSBqaWZmaWVzOwogCQlpZiAobGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpICYmCiAJCSAgICAhdGVzdF9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCQkgICAgIXRlc3RfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpKQpAQCAtMTI0MCw3MCArMTIwMCwxMyBAQAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2hzW3hdKTsKIH0KIAotc3RhdGljIGludCBnZnMyX2xtX2hvbGRfbHZiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLCBjaGFyICoqbHZicCkKK3ZvaWQgZ2ZzMl9nbG9ja19jYihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1faG9sZF9sdmIpCi0JCXJldHVybiAwOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9ob2xkX2x2Yihsb2NrLCBsdmJwKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9sdmJfaG9sZCAtIGF0dGFjaCBhIExWQiBmcm9tIGEgZ2xvY2sKLSAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCi0gKgotICovCi0KLWludCBnZnMyX2x2Yl9ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSkgewotCQllcnJvciA9IGdmczJfbG1faG9sZF9sdmIoZ2wtPmdsX3NiZCwgZ2wtPmdsX2xvY2ssICZnbC0+Z2xfbHZiKTsKLQkJaWYgKGVycm9yKSAKLQkJCXJldHVybiBlcnJvcjsKLQkJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKLQl9Ci0JYXRvbWljX2luYygmZ2wtPmdsX2x2Yl9jb3VudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX2x2Yl91bmhvbGQgLSBkZXRhY2ggYSBMVkIgZnJvbSBhIGdsb2NrCi0gKiBAZ2w6IFRoZSBnbG9jayBpbiBxdWVzdGlvbgotICoKLSAqLwotCi12b2lkIGdmczJfbHZiX3VuaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCi0JZ2ZzMl9nbG9ja19ob2xkKGdsKTsKLQlnZnMyX2Fzc2VydChnbC0+Z2xfc2JkLCBhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCkgPiAwKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ2wtPmdsX2x2Yl9jb3VudCkpIHsKLQkJaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3VuaG9sZF9sdmIpCi0JCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV91bmhvbGRfbHZiKGdsLT5nbF9sb2NrLCBnbC0+Z2xfbHZiKTsKLQkJZ2wtPmdsX2x2YiA9IE5VTEw7Ci0JCWdmczJfZ2xvY2tfcHV0KGdsKTsKLQl9Ci0JZ2ZzMl9nbG9ja19wdXQoZ2wpOwotfQotCi1zdGF0aWMgdm9pZCBibG9ja2luZ19jYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJdW5zaWduZWQgaW50IHN0YXRlKQotewotCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKIAl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKIAl1bnNpZ25lZCBsb25nIGhvbGR0aW1lOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAotCWdsID0gZ2ZzMl9nbG9ja19maW5kKHNkcCwgbmFtZSk7Ci0JaWYgKCFnbCkKLQkJcmV0dXJuOwotCisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKIAlob2xkdGltZSA9IGdsLT5nbF90Y2hhbmdlICsgZ2wtPmdsX29wcy0+Z29fbWluX2hvbGRfdGltZTsKIAlpZiAodGltZV9iZWZvcmUobm93LCBob2xkdGltZSkpCiAJCWRlbGF5ID0gaG9sZHRpbWUgLSBub3c7CkBAIC0xMzE3LDc0ICsxMjIwLDMzIEBACiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKQotewotCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShqZCwgJnNkcC0+c2RfamluZGV4X2xpc3QsIGpkX2xpc3QpIHsKLQkJaWYgKGpkLT5qZF9qaWQgIT0gamlkKQotCQkJY29udGludWU7Ci0JCWpkLT5qZF9kaXJ0eSA9IDE7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Ci19Ci0KIC8qKgotICogZ2ZzMl9nbG9ja19jYiAtIENhbGxiYWNrIHVzZWQgYnkgbG9ja2luZyBtb2R1bGUKLSAqIEBzZHA6IFBvaW50ZXIgdG8gdGhlIHN1cGVyYmxvY2sKLSAqIEB0eXBlOiBUeXBlIG9mIGNhbGxiYWNrCi0gKiBAZGF0YTogVHlwZSBkZXBlbmRlbnQgZGF0YSBwb2ludGVyCisgKiBnZnMyX2dsb2NrX2NvbXBsZXRlIC0gQ2FsbGJhY2sgdXNlZCBieSBsb2NraW5nCisgKiBAZ2w6IFBvaW50ZXIgdG8gdGhlIGdsb2NrCisgKiBAcmV0OiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGRsbQogICoKLSAqIENhbGxlZCBieSB0aGUgbG9ja2luZyBtb2R1bGUgd2hlbiBpdCB3YW50cyB0byB0ZWxsIHVzIHNvbWV0aGluZy4KLSAqIEVpdGhlciB3ZSBuZWVkIHRvIGRyb3AgYSBsb2NrLCBvbmUgb2Ygb3VyIEFTWU5DIHJlcXVlc3RzIGNvbXBsZXRlZCwgb3IKLSAqIGEgam91cm5hbCBmcm9tIGFub3RoZXIgY2xpZW50IG5lZWRzIHRvIGJlIHJlY292ZXJlZC4KICAqLwogCi12b2lkIGdmczJfZ2xvY2tfY2Iodm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgaW50IHR5cGUsIHZvaWQgKmRhdGEpCit2b2lkIGdmczJfZ2xvY2tfY29tcGxldGUoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgcmV0KQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gY2JfZGF0YTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgTE1fQ0JfTkVFRF9FOgotCQlibG9ja2luZ19jYihzZHAsIGRhdGEsIExNX1NUX1VOTE9DS0VEKTsKLQkJcmV0dXJuOwotCi0JY2FzZSBMTV9DQl9ORUVEX0Q6Ci0JCWJsb2NraW5nX2NiKHNkcCwgZGF0YSwgTE1fU1RfREVGRVJSRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX05FRURfUzoKLQkJYmxvY2tpbmdfY2Ioc2RwLCBkYXRhLCBMTV9TVF9TSEFSRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX0FTWU5DOiB7Ci0JCXN0cnVjdCBsbV9hc3luY19jYiAqYXN5bmMgPSBkYXRhOwotCQlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7Ci0KLQkJZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwotCQlnbCA9IGdmczJfZ2xvY2tfZmluZChzZHAsICZhc3luYy0+bGNfbmFtZSk7Ci0JCWlmIChnZnMyX2Fzc2VydF93YXJuKHNkcCwgZ2wpKQorCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCWdsLT5nbF9yZXBseSA9IHJldDsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKSkpIHsKKwkJc3RydWN0IGdmczJfaG9sZGVyICpnaDsKKwkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CisJCWdoID0gZmluZF9maXJzdF93YWl0ZXIoZ2wpOworCQlpZiAoKCEoZ2ggJiYgKGdoLT5naF9mbGFncyAmIExNX0ZMQUdfTk9FWFApKSAmJgorCQkgICAgIChnbC0+Z2xfdGFyZ2V0ICE9IExNX1NUX1VOTE9DS0VEKSkgfHwKKwkJICAgICgocmV0ICYgfkxNX09VVF9TVF9NQVNLKSAhPSAwKSkKKwkJCXNldF9iaXQoR0xGX0ZST1pFTiwgJmdsLT5nbF9mbGFncyk7CisJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CisJCWlmICh0ZXN0X2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJCXJldHVybjsKLQkJZ2wtPmdsX3JlcGx5ID0gYXN5bmMtPmxjX3JldDsKLQkJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7Ci0JCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCi0JCQlnZnMyX2dsb2NrX3B1dChnbCk7Ci0JCXVwX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7Ci0JCXJldHVybjsKIAl9Ci0KLQljYXNlIExNX0NCX05FRURfUkVDT1ZFUlk6Ci0JCWdmczJfamRlc2NfbWFrZV9kaXJ0eShzZHAsICoodW5zaWduZWQgaW50ICopZGF0YSk7Ci0JCWlmIChzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpCi0JCQl3YWtlX3VwX3Byb2Nlc3Moc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKTsKLQkJcmV0dXJuOwotCi0JZGVmYXVsdDoKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIDApOwotCQlyZXR1cm47Ci0JfQorCXNldF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsICZnbC0+Z2xfZmxhZ3MpOworCWdmczJfZ2xvY2tfaG9sZChnbCk7CisJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKKwkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCiAvKioKQEAgLTE1MTUsNiArMTM3NywyNSBAQAogCXJldHVybiBoYXNfZW50cmllczsKIH0KIAorCisvKioKKyAqIHRoYXdfZ2xvY2sgLSB0aGF3IG91dCBhIGdsb2NrIHdoaWNoIGhhcyBhbiB1bnByb2Nlc3NlZCByZXBseSB3YWl0aW5nCisgKiBAZ2w6IFRoZSBnbG9jayB0byB0aGF3CisgKgorICogTi5CLiBXaGVuIHdlIGZyZWV6ZSBhIGdsb2NrLCB3ZSBsZWF2ZSBhIHJlZiB0byB0aGUgZ2xvY2sgb3V0c3RhbmRpbmcsCisgKiBzbyB0aGlzIGhhcyB0byByZXN1bHQgaW4gdGhlIHJlZiBjb3VudCBiZWluZyBkcm9wcGVkIGJ5IG9uZS4KKyAqLworCitzdGF0aWMgdm9pZCB0aGF3X2dsb2NrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3sKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuOworCXNldF9iaXQoR0xGX1JFUExZX1BFTkRJTkcsICZnbC0+Z2xfZmxhZ3MpOworCWdmczJfZ2xvY2tfaG9sZChnbCk7CisJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKKwkJZ2ZzMl9nbG9ja19wdXQoZ2wpOworfQorCiAvKioKICAqIGNsZWFyX2dsb2NrIC0gbG9vayBhdCBhIGdsb2NrIGFuZCBzZWUgaWYgd2UgY2FuIGZyZWUgaXQgZnJvbSBnbG9jayBjYWNoZQogICogQGdsOiB0aGUgZ2xvY2sgdG8gbG9vayBhdApAQCAtMTU0MCw2ICsxNDIxLDIwIEBACiB9CiAKIC8qKgorICogZ2ZzMl9nbG9ja190aGF3IC0gVGhhdyBhbnkgZnJvemVuIGdsb2NrcworICogQHNkcDogVGhlIHN1cGVyIGJsb2NrCisgKgorICovCisKK3ZvaWQgZ2ZzMl9nbG9ja190aGF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXVuc2lnbmVkIHg7CisKKwlmb3IgKHggPSAwOyB4IDwgR0ZTMl9HTF9IQVNIX1NJWkU7IHgrKykKKwkJZXhhbWluZV9idWNrZXQodGhhd19nbG9jaywgc2RwLCB4KTsKK30KKworLyoqCiAgKiBnZnMyX2dsX2hhc2hfY2xlYXIgLSBFbXB0eSBvdXQgdGhlIGdsb2NrIGhhc2ggdGFibGUKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCiAgKiBAd2FpdDogd2FpdCB1bnRpbCBpdCdzIGFsbCBnb25lCkBAIC0xNjE5LDcgKzE1MTQsNyBAQAogCWlmIChmbGFncyAmIExNX0ZMQUdfTk9FWFApCiAJCSpwKysgPSAnZSc7CiAJaWYgKGZsYWdzICYgTE1fRkxBR19BTlkpCi0JCSpwKysgPSAnYSc7CisJCSpwKysgPSAnQSc7CiAJaWYgKGZsYWdzICYgTE1fRkxBR19QUklPUklUWSkKIAkJKnArKyA9ICdwJzsKIAlpZiAoZmxhZ3MgJiBHTF9BU1lOQykKQEAgLTE2ODMsNiArMTU3OCwxMCBAQAogCQkqcCsrID0gJ2knOwogCWlmICh0ZXN0X2JpdChHTEZfUkVQTFlfUEVORElORywgZ2ZsYWdzKSkKIAkJKnArKyA9ICdyJzsKKwlpZiAodGVzdF9iaXQoR0xGX0lOSVRJQUwsIGdmbGFncykpCisJCSpwKysgPSAnSSc7CisJaWYgKHRlc3RfYml0KEdMRl9GUk9aRU4sIGdmbGFncykpCisJCSpwKysgPSAnRic7CiAJKnAgPSAwOwogCXJldHVybiBidWY7CiB9CkBAIC0xNzE3LDE0ICsxNjE2LDEzIEBACiAJZHRpbWUgKj0gMTAwMDAwMC9IWjsgLyogZGVtb3RlIHRpbWUgaW4gdVNlYyAqLwogCWlmICghdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCiAJCWR0aW1lID0gMDsKLQlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHUgZjolcyB0OiVzIGQ6JXMvJWxsdSBsOiVkIGE6JWQgcjolZFxuIiwKKwlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHUgZjolcyB0OiVzIGQ6JXMvJWxsdSBhOiVkIHI6JWRcbiIsCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF9zdGF0ZSksCiAJCSAgZ2wtPmdsX25hbWUubG5fdHlwZSwKIAkJICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwKIAkJICBnZmxhZ3Myc3RyKGdmbGFnc19idWYsICZnbC0+Z2xfZmxhZ3MpLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfdGFyZ2V0KSwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX2RlbW90ZV9zdGF0ZSksIGR0aW1lLAotCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCksCiAJCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpKTsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5oIGIvZnMvZ2ZzMi9nbG9jay5oCmluZGV4IDU0M2VjN2UuLmE2MDJhMjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suaAorKysgYi9mcy9nZnMyL2dsb2NrLmgKQEAgLTExLDE1ICsxMSwxMzAgQEAKICNkZWZpbmUgX19HTE9DS19ET1RfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgImluY29yZS5oIgogCi0vKiBGbGFncyBmb3IgbG9jayByZXF1ZXN0czsgdXNlZCBpbiBnZnMyX2hvbGRlciBnaF9mbGFnIGZpZWxkLgotICAgRnJvbSBsbV9pbnRlcmZhY2UuaDoKKy8qIE9wdGlvbnMgZm9yIGhvc3RkYXRhIHBhcnNlciAqLworCitlbnVtIHsKKwlPcHRfamlkLAorCU9wdF9pZCwKKwlPcHRfZmlyc3QsCisJT3B0X25vZGlyLAorCU9wdF9lcnIsCit9OworCisvKgorICogbG1fbG9ja25hbWUgdHlwZXMKKyAqLworCisjZGVmaW5lIExNX1RZUEVfUkVTRVJWRUQJMHgwMAorI2RlZmluZSBMTV9UWVBFX05PTkRJU0sJCTB4MDEKKyNkZWZpbmUgTE1fVFlQRV9JTk9ERQkJMHgwMgorI2RlZmluZSBMTV9UWVBFX1JHUlAJCTB4MDMKKyNkZWZpbmUgTE1fVFlQRV9NRVRBCQkweDA0CisjZGVmaW5lIExNX1RZUEVfSU9QRU4JCTB4MDUKKyNkZWZpbmUgTE1fVFlQRV9GTE9DSwkJMHgwNgorI2RlZmluZSBMTV9UWVBFX1BMT0NLCQkweDA3CisjZGVmaW5lIExNX1RZUEVfUVVPVEEJCTB4MDgKKyNkZWZpbmUgTE1fVFlQRV9KT1VSTkFMCQkweDA5CisKKy8qCisgKiBsbV9sb2NrKCkgc3RhdGVzCisgKgorICogU0hBUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBTSEFSRUQsIG5vdCB3aXRoIERFRkVSUkVEIG9yIEVYLgorICogREVGRVJSRUQgaXMgY29tcGF0aWJsZSB3aXRoIERFRkVSUkVELCBub3Qgd2l0aCBTSEFSRUQgb3IgRVguCisgKi8KKworI2RlZmluZSBMTV9TVF9VTkxPQ0tFRAkJMAorI2RlZmluZSBMTV9TVF9FWENMVVNJVkUJCTEKKyNkZWZpbmUgTE1fU1RfREVGRVJSRUQJCTIKKyNkZWZpbmUgTE1fU1RfU0hBUkVECQkzCisKKy8qCisgKiBsbV9sb2NrKCkgZmxhZ3MKKyAqCisgKiBMTV9GTEFHX1RSWQorICogRG9uJ3Qgd2FpdCB0byBhY3F1aXJlIHRoZSBsb2NrIGlmIGl0IGNhbid0IGJlIGdyYW50ZWQgaW1tZWRpYXRlbHkuCisgKgorICogTE1fRkxBR19UUllfMUNCCisgKiBTZW5kIG9uZSBibG9ja2luZyBjYWxsYmFjayBpZiBUUlkgaXMgc2V0IGFuZCB0aGUgbG9jayBpcyBub3QgZ3JhbnRlZC4KKyAqCisgKiBMTV9GTEFHX05PRVhQCisgKiBHRlMgc2V0cyB0aGlzIGZsYWcgb24gbG9jayByZXF1ZXN0cyBpdCBtYWtlcyB3aGlsZSBkb2luZyBqb3VybmFsIHJlY292ZXJ5LgorICogVGhlc2Ugc3BlY2lhbCByZXF1ZXN0cyBzaG91bGQgbm90IGJlIGJsb2NrZWQgZHVlIHRvIHRoZSByZWNvdmVyeSBsaWtlCisgKiBvcmRpbmFyeSBsb2NrcyB3b3VsZCBiZS4KKyAqCisgKiBMTV9GTEFHX0FOWQorICogQSBTSEFSRUQgcmVxdWVzdCBtYXkgYWxzbyBiZSBncmFudGVkIGluIERFRkVSUkVELCBvciBhIERFRkVSUkVEIHJlcXVlc3QgbWF5CisgKiBhbHNvIGJlIGdyYW50ZWQgaW4gU0hBUkVELiAgVGhlIHByZWZlcnJlZCBzdGF0ZSBpcyB3aGljaGV2ZXIgaXMgY29tcGF0aWJsZQorICogd2l0aCBvdGhlciBncmFudGVkIGxvY2tzLCBvciB0aGUgc3BlY2lmaWVkIHN0YXRlIGlmIG5vIG90aGVyIGxvY2tzIGV4aXN0LgorICoKKyAqIExNX0ZMQUdfUFJJT1JJVFkKKyAqIE92ZXJyaWRlIGZhaXJuZXNzIGNvbnNpZGVyYXRpb25zLiAgU3VwcG9zZSBhIGxvY2sgaXMgaGVsZCBpbiBhIHNoYXJlZCBzdGF0ZQorICogYW5kIHRoZXJlIGlzIGEgcGVuZGluZyByZXF1ZXN0IGZvciB0aGUgZGVmZXJyZWQgc3RhdGUuICBBIHNoYXJlZCBsb2NrCisgKiByZXF1ZXN0IHdpdGggdGhlIHByaW9yaXR5IGZsYWcgd291bGQgYmUgYWxsb3dlZCB0byBieXBhc3MgdGhlIGRlZmVycmVkCisgKiByZXF1ZXN0IGFuZCBkaXJlY3RseSBqb2luIHRoZSBvdGhlciBzaGFyZWQgbG9jay4gIEEgc2hhcmVkIGxvY2sgcmVxdWVzdAorICogd2l0aG91dCB0aGUgcHJpb3JpdHkgZmxhZyBtaWdodCBiZSBmb3JjZWQgdG8gd2FpdCB1bnRpbCB0aGUgZGVmZXJyZWQKKyAqIHJlcXVlc3RlZCBoYWQgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIHRoZSBsb2NrLgorICovCisKICNkZWZpbmUgTE1fRkxBR19UUlkJCTB4MDAwMDAwMDEKICNkZWZpbmUgTE1fRkxBR19UUllfMUNCCQkweDAwMDAwMDAyCiAjZGVmaW5lIExNX0ZMQUdfTk9FWFAJCTB4MDAwMDAwMDQKICNkZWZpbmUgTE1fRkxBR19BTlkJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwICovCisjZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAorI2RlZmluZSBHTF9BU1lOQwkJMHgwMDAwMDA0MAorI2RlZmluZSBHTF9FWEFDVAkJMHgwMDAwMDA4MAorI2RlZmluZSBHTF9TS0lQCQkJMHgwMDAwMDEwMAorI2RlZmluZSBHTF9BVElNRQkJMHgwMDAwMDIwMAorI2RlZmluZSBHTF9OT0NBQ0hFCQkweDAwMDAwNDAwCisgIAorLyoKKyAqIGxtX2xvY2soKSBhbmQgbG1fYXN5bmNfY2IgcmV0dXJuIGZsYWdzCisgKgorICogTE1fT1VUX1NUX01BU0sKKyAqIE1hc2tzIHRoZSBsb3dlciB0d28gYml0cyBvZiBsb2NrIHN0YXRlIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KKyAqCisgKiBMTV9PVVRfQ0FOQ0VMRUQKKyAqIFRoZSBsb2NrIHJlcXVlc3Qgd2FzIGNhbmNlbGVkLgorICoKKyAqIExNX09VVF9BU1lOQworICogVGhlIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCB3aWxsIGJlIHJldHVybmVkIGluIGFuIExNX0NCX0FTWU5DIGNhbGxiYWNrLgorICoKKyAqLworCisjZGVmaW5lIExNX09VVF9TVF9NQVNLCQkweDAwMDAwMDAzCisjZGVmaW5lIExNX09VVF9DQU5DRUxFRAkJMHgwMDAwMDAwOAorI2RlZmluZSBMTV9PVVRfQVNZTkMJCTB4MDAwMDAwODAKKyNkZWZpbmUgTE1fT1VUX0VSUk9SCQkweDAwMDAwMTAwCisKKy8qCisgKiBsbV9yZWNvdmVyeV9kb25lKCkgbWVzc2FnZXMKKyAqLworCisjZGVmaW5lIExNX1JEX0dBVkVVUAkJMzA4CisjZGVmaW5lIExNX1JEX1NVQ0NFU1MJCTMwOQorCisjZGVmaW5lIEdMUl9UUllGQUlMRUQJCTEzCisKK3N0cnVjdCBsbV9sb2Nrb3BzIHsKKwljb25zdCBjaGFyICpsbV9wcm90b19uYW1lOworCWludCAoKmxtX21vdW50KSAoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmZzbmFtZSk7CisgCXZvaWQgKCpsbV91bm1vdW50KSAoc3RydWN0IGdmczJfc2JkICpzZHApOworCXZvaWQgKCpsbV93aXRoZHJhdykgKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKKwl2b2lkICgqbG1fcHV0X2xvY2spIChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpnbCk7CisJdW5zaWduZWQgaW50ICgqbG1fbG9jaykgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKKwkJCQkgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKwl2b2lkICgqbG1fY2FuY2VsKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKKwljb25zdCBtYXRjaF90YWJsZV90ICpsbV90b2tlbnM7Cit9OworCisjZGVmaW5lIExNX0ZMQUdfVFJZCQkweDAwMDAwMDAxCisjZGVmaW5lIExNX0ZMQUdfVFJZXzFDQgkJMHgwMDAwMDAwMgorI2RlZmluZSBMTV9GTEFHX05PRVhQCQkweDAwMDAwMDA0CisjZGVmaW5lIExNX0ZMQUdfQU5ZCQkweDAwMDAwMDA4CisjZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAogCiAjZGVmaW5lIEdMX0FTWU5DCQkweDAwMDAwMDQwCiAjZGVmaW5lIEdMX0VYQUNUCQkweDAwMDAwMDgwCkBAIC0xMjgsMTAgKzI0MywxMiBAQAogaW50IGdmczJfbHZiX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIHZvaWQgZ2ZzMl9sdmJfdW5ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAKLXZvaWQgZ2ZzMl9nbG9ja19jYih2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7Cit2b2lkIGdmczJfZ2xvY2tfY2Ioc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwordm9pZCBnZnMyX2dsb2NrX2NvbXBsZXRlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHJldCk7CiB2b2lkIGdmczJfcmVjbGFpbV9nbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfZ2xfaGFzaF9jbGVhcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfZ2xvY2tfZmluaXNoX3RydW5jYXRlKHN0cnVjdCBnZnMyX2lub2RlICppcCk7Cit2b2lkIGdmczJfZ2xvY2tfdGhhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIGludCBfX2luaXQgZ2ZzMl9nbG9ja19pbml0KHZvaWQpOwogdm9pZCBnZnMyX2dsb2NrX2V4aXQodm9pZCk7CkBAIC0xNDEsNCArMjU4LDYgQEAKIGludCBnZnMyX3JlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiB2b2lkIGdmczJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2ZzMl9kbG1fb3BzOworCiAjZW5kaWYgLyogX19HTE9DS19ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmMgYi9mcy9nZnMyL2dsb3BzLmMKaW5kZXggODUyMmQzYS4uYmYyM2E2MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5jCisrKyBiL2ZzL2dmczIvZ2xvcHMuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0zOCwxOSArMzcsMjQgQEAKIHN0YXRpYyB2b2lkIGdmczJfYWlsX2VtcHR5X2dsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0JdW5zaWduZWQgaW50IGJsb2NrczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmdsLT5nbF9haWxfbGlzdDsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWludCBlcnJvcjsKKwlzdHJ1Y3QgZ2ZzMl90cmFucyB0cjsKIAotCWJsb2NrcyA9IGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KTsKLQlpZiAoIWJsb2NrcykKKwltZW1zZXQoJnRyLCAwLCBzaXplb2YodHIpKTsKKwl0ci50cl9yZXZva2VzID0gYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpOworCisJaWYgKCF0ci50cl9yZXZva2VzKQogCQlyZXR1cm47CiAKLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAwLCBibG9ja3MpOwotCWlmIChnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFlcnJvcikpCi0JCXJldHVybjsKKwkvKiBBIHNob3J0ZW5lZCwgaW5saW5lIHZlcnNpb24gb2YgZ2ZzMl90cmFuc19iZWdpbigpICovCisJdHIudHJfcmVzZXJ2ZWQgPSAxICsgZ2ZzMl9zdHJ1Y3QyYmxrKHNkcCwgdHIudHJfcmV2b2tlcywgc2l6ZW9mKHU2NCkpOworCXRyLnRyX2lwID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCUlOSVRfTElTVF9IRUFEKCZ0ci50cl9saXN0X2J1Zik7CisJZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKTsKKwlCVUdfT04oY3VycmVudC0+am91cm5hbF9pbmZvKTsKKwljdXJyZW50LT5qb3VybmFsX2luZm8gPSAmdHI7CiAKIAlnZnMyX2xvZ19sb2NrKHNkcCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CkBAIC03MiwyOSArNzYsNyBAQAogfQogCiAvKioKLSAqIGdmczJfcHRlX2ludmFsIC0gU3luYyBhbmQgaW52YWxpZGF0ZSBhbGwgUFRFcyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgZ2ZzMl9wdGVfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JaXAgPSBnbC0+Z2xfb2JqZWN0OwotCWlub2RlID0gJmlwLT5pX2lub2RlOwotCWlmICghaXAgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCi0JCXJldHVybjsKLQotCXVubWFwX3NoYXJlZF9tYXBwaW5nX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIDAsIDApOwotCWlmICh0ZXN0X2JpdChHSUZfU1dfUEFHRUQsICZpcC0+aV9mbGFncykpCi0JCXNldF9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKTsKLQotfQotCi0vKioKLSAqIG1ldGFfZ29fc3luYyAtIHN5bmMgb3V0IHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jaworICogcmdycF9nb19zeW5jIC0gc3luYyBvdXQgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICoKICAqIENhbGxlZCB3aGVuIGRlbW90aW5nIG9yIHVubG9ja2luZyBhbiBFWCBnbG9jay4gIFdlIG11c3QgZmx1c2gKQEAgLTEwMiwzNiArODQsNDIgQEAKICAqIG5vdCByZXR1cm4gdG8gY2FsbGVyIHRvIGRlbW90ZS91bmxvY2sgdGhlIGdsb2NrIHVudGlsIEkvTyBpcyBjb21wbGV0ZS4KICAqLwogCi1zdGF0aWMgdm9pZCBtZXRhX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQorc3RhdGljIHZvaWQgcmdycF9nb19zeW5jKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKLQlpZiAoZ2wtPmdsX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkKLQkJcmV0dXJuOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptZXRhbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKKwlpbnQgZXJyb3I7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpIHsKLQkJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOwotCQlnZnMyX21ldGFfc3luYyhnbCk7Ci0JCWdmczJfYWlsX2VtcHR5X2dsKGdsKTsKLQl9CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuOworCUJVR19PTihnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKTsKKworCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGUobWV0YW1hcHBpbmcpOworCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWV0YW1hcHBpbmcpOworICAgICAgICBtYXBwaW5nX3NldF9lcnJvcihtZXRhbWFwcGluZywgZXJyb3IpOworCWdmczJfYWlsX2VtcHR5X2dsKGdsKTsKIH0KIAogLyoqCi0gKiBtZXRhX2dvX2ludmFsIC0gaW52YWxpZGF0ZSB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKKyAqIHJncnBfZ29faW52YWwgLSBpbnZhbGlkYXRlIHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jawogICogQGdsOiB0aGUgZ2xvY2sKICAqIEBmbGFnczoKICAqCisgKiBXZSBuZXZlciB1c2VkIExNX1NUX0RFRkVSUkVEIHdpdGggcmVzb3VyY2UgZ3JvdXBzLCBzbyB0aGF0IHdlCisgKiBzaG91bGQgYWx3YXlzIHNlZSB0aGUgbWV0YWRhdGEgZmxhZyBzZXQgaGVyZS4KKyAqCiAgKi8KIAotc3RhdGljIHZvaWQgbWV0YV9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKK3N0YXRpYyB2b2lkIHJncnBfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKCEoZmxhZ3MgJiBESU9fTUVUQURBVEEpKQotCQlyZXR1cm47CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CiAKLQlnZnMyX21ldGFfaW52YWwoZ2wpOwotCWlmIChnbC0+Z2xfb2JqZWN0ID09IEdGUzJfSShnbC0+Z2xfc2JkLT5zZF9yaW5kZXgpKQotCQlnbC0+Z2xfc2JkLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAwOwotCWVsc2UgaWYgKGdsLT5nbF9vcHMgPT0gJmdmczJfcmdycF9nbG9wcyAmJiBnbC0+Z2xfb2JqZWN0KSB7CisJQlVHX09OKCEoZmxhZ3MgJiBESU9fTUVUQURBVEEpKTsKKwlnZnMyX2Fzc2VydF93aXRoZHJhdyhnbC0+Z2xfc2JkLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKKworCWlmIChnbC0+Z2xfb2JqZWN0KSB7CiAJCXN0cnVjdCBnZnMyX3JncnBkICpyZ2QgPSAoc3RydWN0IGdmczJfcmdycGQgKilnbC0+Z2xfb2JqZWN0OwotCiAJCXJnZC0+cmRfZmxhZ3MgJj0gfkdGUzJfUkRGX1VQVE9EQVRFOwogCX0KIH0KQEAgLTE0OCw0OCArMTM2LDU0IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOwogCWludCBlcnJvcjsKIAotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQpCi0JCWdmczJfcHRlX2ludmFsKGdsKTsKLQlpZiAoZ2wtPmdsX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkKLQkJcmV0dXJuOwotCiAJaWYgKGlwICYmICFTX0lTUkVHKGlwLT5pX2lub2RlLmlfbW9kZSkpCiAJCWlwID0gTlVMTDsKKwlpZiAoaXAgJiYgdGVzdF9hbmRfY2xlYXJfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKSkKKwkJdW5tYXBfc2hhcmVkX21hcHBpbmdfcmFuZ2UoaXAtPmlfaW5vZGUuaV9tYXBwaW5nLCAwLCAwKTsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CiAKLQlpZiAodGVzdF9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkgewotCQlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7Ci0JCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7Ci0JCWlmIChpcCkgewotCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpcC0+aV9pbm9kZS5pX21hcHBpbmc7Ci0JCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7Ci0JCQllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwotCQkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgZXJyb3IpOwotCQl9Ci0JCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWV0YW1hcHBpbmcpOwotCQltYXBwaW5nX3NldF9lcnJvcihtZXRhbWFwcGluZywgZXJyb3IpOwotCQljbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKTsKLQkJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOworCUJVR19PTihnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKTsKKworCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGUobWV0YW1hcHBpbmcpOworCWlmIChpcCkgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX2lub2RlLmlfbWFwcGluZzsKKwkJZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOworCQllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOworCQltYXBwaW5nX3NldF9lcnJvcihtYXBwaW5nLCBlcnJvcik7CiAJfQorCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWV0YW1hcHBpbmcpOworCW1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7CisJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwogfQogCiAvKioKICAqIGlub2RlX2dvX2ludmFsIC0gcHJlcGFyZSBhIGlub2RlIGdsb2NrIHRvIGJlIHJlbGVhc2VkCiAgKiBAZ2w6IHRoZSBnbG9jawogICogQGZsYWdzOgorICogCisgKiBOb3JtYWxseSB3ZSBpbnZsaWRhdGUgZXZlcnl0aGluZywgYnV0IGlmIHdlIGFyZSBtb3ZpbmcgaW50bworICogTE1fU1RfREVGRVJSRUQgZnJvbSBMTV9TVF9TSEFSRUQgb3IgTE1fU1RfRVhDTFVTSVZFIHRoZW4gd2UKKyAqIGNhbiBrZWVwIGhvbGQgb2YgdGhlIG1ldGFkYXRhLCBzaW5jZSBpdCB3b24ndCBoYXZlIGNoYW5nZWQuCiAgKgogICovCiAKIHN0YXRpYyB2b2lkIGlub2RlX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IGdsLT5nbF9vYmplY3Q7Ci0JaW50IG1ldGEgPSAoZmxhZ3MgJiBESU9fTUVUQURBVEEpOwogCi0JaWYgKG1ldGEpIHsKLQkJZ2ZzMl9tZXRhX2ludmFsKGdsKTsKKwlnZnMyX2Fzc2VydF93aXRoZHJhdyhnbC0+Z2xfc2JkLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKKworCWlmIChmbGFncyAmIERJT19NRVRBREFUQSkgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKKwkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7CiAJCWlmIChpcCkKIAkJCXNldF9iaXQoR0lGX0lOVkFMSUQsICZpcC0+aV9mbGFncyk7CiAJfQogCisJaWYgKGlwID09IEdGUzJfSShnbC0+Z2xfc2JkLT5zZF9yaW5kZXgpKQorCQlnbC0+Z2xfc2JkLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAwOwogCWlmIChpcCAmJiBTX0lTUkVHKGlwLT5pX2lub2RlLmlfbW9kZSkpCiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlwLT5pX2lub2RlLmlfbWFwcGluZywgMCk7CiB9CkBAIC0zOTAsMjAgKzM4NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogcXVvdGFfZ29fZGVtb3RlX29rIC0gQ2hlY2sgdG8gc2VlIGlmIGl0J3Mgb2sgdG8gdW5sb2NrIGEgcXVvdGEgZ2xvY2sKLSAqIEBnbDogdGhlIGdsb2NrCi0gKgotICogUmV0dXJuczogMSBpZiBpdCdzIG9rCi0gKi8KLQotc3RhdGljIGludCBxdW90YV9nb19kZW1vdGVfb2soY29uc3Qgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXJldHVybiAhYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpOwotfQotCiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfbWV0YV9nbG9wcyA9IHsKLQkuZ29feG1vdGVfdGggPSBtZXRhX2dvX3N5bmMsCiAJLmdvX3R5cGUgPSBMTV9UWVBFX01FVEEsCiB9OwogCkBAIC00MTgsOCArMzk5LDggQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9yZ3JwX2dsb3BzID0gewotCS5nb194bW90ZV90aCA9IG1ldGFfZ29fc3luYywKLQkuZ29faW52YWwgPSBtZXRhX2dvX2ludmFsLAorCS5nb194bW90ZV90aCA9IHJncnBfZ29fc3luYywKKwkuZ29faW52YWwgPSByZ3JwX2dvX2ludmFsLAogCS5nb19kZW1vdGVfb2sgPSByZ3JwX2dvX2RlbW90ZV9vaywKIAkuZ29fbG9jayA9IHJncnBfZ29fbG9jaywKIAkuZ29fdW5sb2NrID0gcmdycF9nb191bmxvY2ssCkBAIC00NDgsNyArNDI5LDYgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9xdW90YV9nbG9wcyA9IHsKLQkuZ29fZGVtb3RlX29rID0gcXVvdGFfZ29fZGVtb3RlX29rLAogCS5nb190eXBlID0gTE1fVFlQRV9RVU9UQSwKIH07CiAKQEAgLTQ1NiwzICs0MzYsMTUgQEAKIAkuZ29fdHlwZSA9IExNX1RZUEVfSk9VUk5BTCwKIH07CiAKK2NvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdmczJfZ2xvcHNfbGlzdFtdID0geworCVtMTV9UWVBFX01FVEFdID0gJmdmczJfbWV0YV9nbG9wcywKKwlbTE1fVFlQRV9JTk9ERV0gPSAmZ2ZzMl9pbm9kZV9nbG9wcywKKwlbTE1fVFlQRV9SR1JQXSA9ICZnZnMyX3JncnBfZ2xvcHMsCisJW0xNX1RZUEVfTk9ORElTS10gPSAmZ2ZzMl90cmFuc19nbG9wcywKKwlbTE1fVFlQRV9JT1BFTl0gPSAmZ2ZzMl9pb3Blbl9nbG9wcywKKwlbTE1fVFlQRV9GTE9DS10gPSAmZ2ZzMl9mbG9ja19nbG9wcywKKwlbTE1fVFlQRV9OT05ESVNLXSA9ICZnZnMyX25vbmRpc2tfZ2xvcHMsCisJW0xNX1RZUEVfUVVPVEFdID0gJmdmczJfcXVvdGFfZ2xvcHMsCisJW0xNX1RZUEVfSk9VUk5BTF0gPSAmZ2ZzMl9qb3VybmFsX2dsb3BzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5oIGIvZnMvZ2ZzMi9nbG9wcy5oCmluZGV4IGExZDliNWIuLmIzYWEyZTMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuaAorKysgYi9mcy9nZnMyL2dsb3BzLmgKQEAgLTIxLDUgKzIxLDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfbm9uZGlza19nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfcXVvdGFfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX2pvdXJuYWxfZ2xvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2ZzMl9nbG9wc19saXN0W107CiAKICNlbmRpZiAvKiBfX0dMT1BTX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5jb3JlLmggYi9mcy9nZnMyL2luY29yZS5oCmluZGV4IDYwODg0OWQuLjM5OWQxYjkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5jb3JlLmgKKysrIGIvZnMvZ2ZzMi9pbmNvcmUuaApAQCAtMTIsNiArMTIsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogCiAjZGVmaW5lIERJT19XQUlUCTB4MDAwMDAwMTAKICNkZWZpbmUgRElPX01FVEFEQVRBCTB4MDAwMDAwMjAKQEAgLTI2LDYgKzI4LDcgQEAKIHN0cnVjdCBnZnMyX2FpbDsKIHN0cnVjdCBnZnMyX2pkZXNjOwogc3RydWN0IGdmczJfc2JkOworc3RydWN0IGxtX2xvY2tvcHM7CiAKIHR5cGVkZWYgdm9pZCAoKmdmczJfZ2xvcF9iaF90KSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgcmV0KTsKIApAQCAtMTIxLDYgKzEyNCwyOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYmRfYWlsX2dsX2xpc3Q7CiB9OwogCisvKgorICogSW50ZXJuYWxseSwgd2UgcHJlZml4IHRoaW5ncyB3aXRoIGdkbG1fIGFuZCBHRExNXyAoZm9yIGdmcy1kbG0pIHNpbmNlIGEKKyAqIHByZWZpeCBvZiBsb2NrX2RsbV8gZ2V0cyBhd2t3YXJkLgorICovCisKKyNkZWZpbmUgR0RMTV9TVFJOQU1FX0JZVEVTCTI1CisjZGVmaW5lIEdETE1fTFZCX1NJWkUJCTMyCisKK2VudW0geworCURGTF9CTE9DS19MT0NLUwkJPSAwLAorfTsKKworc3RydWN0IGxtX2xvY2tuYW1lIHsKKwl1NjQgbG5fbnVtYmVyOworCXVuc2lnbmVkIGludCBsbl90eXBlOworfTsKKworI2RlZmluZSBsbV9uYW1lX2VxdWFsKG5hbWUxLCBuYW1lMikgXAorICAgICAgICAoKChuYW1lMSktPmxuX251bWJlciA9PSAobmFtZTIpLT5sbl9udW1iZXIpICYmIFwKKyAgICAgICAgICgobmFtZTEpLT5sbl90eXBlID09IChuYW1lMiktPmxuX3R5cGUpKQorCisKIHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgewogCXZvaWQgKCpnb194bW90ZV90aCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAJaW50ICgqZ29feG1vdGVfYmgpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gpOwpAQCAtMTYyLDYgKzE4Nyw4IEBACiAJR0xGX0xGTFVTSAkJCT0gNywKIAlHTEZfSU5WQUxJREFURV9JTl9QUk9HUkVTUwk9IDgsCiAJR0xGX1JFUExZX1BFTkRJTkcJCT0gOSwKKwlHTEZfSU5JVElBTAkJCT0gMTAsCisJR0xGX0ZST1pFTgkJCT0gMTEsCiB9OwogCiBzdHJ1Y3QgZ2ZzMl9nbG9jayB7CkBAIC0xNzYsMTYgKzIwMywxNSBAQAogCXVuc2lnbmVkIGludCBnbF90YXJnZXQ7CiAJdW5zaWduZWQgaW50IGdsX3JlcGx5OwogCXVuc2lnbmVkIGludCBnbF9oYXNoOworCXVuc2lnbmVkIGludCBnbF9yZXE7CiAJdW5zaWduZWQgaW50IGdsX2RlbW90ZV9zdGF0ZTsgLyogc3RhdGUgcmVxdWVzdGVkIGJ5IHJlbW90ZSBub2RlICovCiAJdW5zaWduZWQgbG9uZyBnbF9kZW1vdGVfdGltZTsgLyogdGltZSBvZiBmaXJzdCBkZW1vdGUgcmVxdWVzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xfaG9sZGVyczsKIAogCWNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsX29wczsKLQl2b2lkICpnbF9sb2NrOwotCWNoYXIgKmdsX2x2YjsKLQlhdG9taWNfdCBnbF9sdmJfY291bnQ7Ci0KLQl1bnNpZ25lZCBsb25nIGdsX3N0YW1wOworCWNoYXIgZ2xfc3RybmFtZVtHRExNX1NUUk5BTUVfQllURVNdOworCXN0cnVjdCBkbG1fbGtzYiBnbF9sa3NiOworCWNoYXIgZ2xfbHZiWzMyXTsKIAl1bnNpZ25lZCBsb25nIGdsX3RjaGFuZ2U7CiAJdm9pZCAqZ2xfb2JqZWN0OwogCkBAIC0yODMsNyArMzA5LDkgQEAKIAogc3RydWN0IGdmczJfcXVvdGFfZGF0YSB7CiAJc3RydWN0IGxpc3RfaGVhZCBxZF9saXN0OwotCXVuc2lnbmVkIGludCBxZF9jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFkX3JlY2xhaW07CisKKwlhdG9taWNfdCBxZF9jb3VudDsKIAogCXUzMiBxZF9pZDsKIAl1bnNpZ25lZCBsb25nIHFkX2ZsYWdzOwkJLyogUURGXy4uLiAqLwpAQCAtMzAzLDcgKzMzMSw2IEBACiAKIAl1NjQgcWRfc3luY19nZW47CiAJdW5zaWduZWQgbG9uZyBxZF9sYXN0X3dhcm47Ci0JdW5zaWduZWQgbG9uZyBxZF9sYXN0X3RvdWNoZWQ7CiB9OwogCiBzdHJ1Y3QgZ2ZzMl90cmFucyB7CkBAIC0zOTAsNyArNDE3LDcgQEAKIAl1bnNpZ25lZCBpbnQgYXJfc3VpZGRpcjoxOwkJLyogc3VpZGRpciBzdXBwb3J0ICovCiAJdW5zaWduZWQgaW50IGFyX2RhdGE6MjsJCQkvKiBvcmRlcmVkL3dyaXRlYmFjayAqLwogCXVuc2lnbmVkIGludCBhcl9tZXRhOjE7CQkJLyogbW91bnQgbWV0YWZzICovCi0JdW5zaWduZWQgaW50IGFyX251bV9nbG9ja2Q7CQkvKiBOdW1iZXIgb2YgZ2xvY2tkIHRocmVhZHMgKi8KKwl1bnNpZ25lZCBpbnQgYXJfZGlzY2FyZDoxOwkJLyogZGlzY2FyZCByZXF1ZXN0cyAqLwogfTsKIAogc3RydWN0IGdmczJfdHVuZSB7CkBAIC00MDYsNyArNDMzLDYgQEAKIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfd2Fybl9wZXJpb2Q7IC8qIFNlY3MgYmV0d2VlbiBxdW90YSB3YXJuIG1zZ3MgKi8KIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfc2NhbGVfbnVtOyAvKiBOdW1lcmF0b3IgKi8KIAl1bnNpZ25lZCBpbnQgZ3RfcXVvdGFfc2NhbGVfZGVuOyAvKiBEZW5vbWluYXRvciAqLwotCXVuc2lnbmVkIGludCBndF9xdW90YV9jYWNoZV9zZWNzOwogCXVuc2lnbmVkIGludCBndF9xdW90YV9xdWFudHVtOyAvKiBTZWNzIGJldHdlZW4gc3luY3MgdG8gcXVvdGEgZmlsZSAqLwogCXVuc2lnbmVkIGludCBndF9uZXdfZmlsZXNfamRhdGE7CiAJdW5zaWduZWQgaW50IGd0X21heF9yZWFkYWhlYWQ7IC8qIE1heCBieXRlcyB0byByZWFkLWFoZWFkIGZyb20gZGlzayAqLwpAQCAtNDQ1LDYgKzQ3MSwzMSBAQAogCiAJY2hhciBzYl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU5dOwogCWNoYXIgc2JfbG9ja3RhYmxlW0dGUzJfTE9DS05BTUVfTEVOXTsKKwl1OCBzYl91dWlkWzE2XTsKK307CisKKy8qCisgKiBsbV9tb3VudCgpIHJldHVybiB2YWx1ZXMKKyAqCisgKiBsc19qaWQgLSB0aGUgam91cm5hbCBJRCB0aGlzIG5vZGUgc2hvdWxkIHVzZQorICogbHNfZmlyc3QgLSB0aGlzIG5vZGUgaXMgdGhlIGZpcnN0IHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbQorICogbHNfbG9ja3NwYWNlIC0gbG9jayBtb2R1bGUncyBjb250ZXh0IGZvciB0aGlzIGZpbGUgc3lzdGVtCisgKiBsc19vcHMgLSBsb2NrIG1vZHVsZSdzIGZ1bmN0aW9ucworICovCisKK3N0cnVjdCBsbV9sb2Nrc3RydWN0IHsKKwl1MzIgbHNfaWQ7CisJdW5zaWduZWQgaW50IGxzX2ppZDsKKwl1bnNpZ25lZCBpbnQgbHNfZmlyc3Q7CisJdW5zaWduZWQgaW50IGxzX2ZpcnN0X2RvbmU7CisJdW5zaWduZWQgaW50IGxzX25vZGlyOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsc19vcHM7CisJdW5zaWduZWQgbG9uZyBsc19mbGFnczsKKwlkbG1fbG9ja3NwYWNlX3QgKmxzX2RsbTsKKworCWludCBsc19yZWNvdmVyX2ppZDsKKwlpbnQgbHNfcmVjb3Zlcl9qaWRfZG9uZTsKKwlpbnQgbHNfcmVjb3Zlcl9qaWRfc3RhdHVzOwogfTsKIAogc3RydWN0IGdmczJfc2JkIHsKQEAgLTUyMCw3ICs1NzEsNiBAQAogCXNwaW5sb2NrX3Qgc2RfamluZGV4X3NwaW47CiAJc3RydWN0IG11dGV4IHNkX2ppbmRleF9tdXRleDsKIAl1bnNpZ25lZCBpbnQgc2Rfam91cm5hbHM7Ci0JdW5zaWduZWQgbG9uZyBzZF9qaW5kZXhfcmVmcmVzaF90aW1lOwogCiAJc3RydWN0IGdmczJfamRlc2MgKnNkX2pkZXNjOwogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9qb3VybmFsX2doOwpAQCAtNTQwLDcgKzU5MCw2IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNkX3F1b3RhX2xpc3Q7CiAJYXRvbWljX3Qgc2RfcXVvdGFfY291bnQ7Ci0Jc3BpbmxvY2tfdCBzZF9xdW90YV9zcGluOwogCXN0cnVjdCBtdXRleCBzZF9xdW90YV9tdXRleDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9xdW90YV93YWl0OwogCXN0cnVjdCBsaXN0X2hlYWQgc2RfdHJ1bmNfbGlzdDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCAzYjg3YzE4Li43YjI3N2Q0NCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKQEAgLTEzNywxNiArMTM2LDE2IEBACiAKIAlpZiAoU19JU1JFRyhtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX2ZpbGVfaW9wczsKLQkJaWYgKHNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcykKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2ZpbGVfZm9wc19ub2xvY2s7CisJCWlmIChnZnMyX2xvY2FsZmxvY2tzKHNkcCkpCisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2ZpbGVfZm9wc19ub2xvY2s7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2ZpbGVfZm9wczsKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZmlsZV9mb3BzOwogCX0gZWxzZSBpZiAoU19JU0RJUihtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX2Rpcl9pb3BzOwotCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZGlyX2ZvcHNfbm9sb2NrOworCQlpZiAoZ2ZzMl9sb2NhbGZsb2NrcyhzZHApKQorCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZvcCA9ICZnZnMyX2Rpcl9mb3BzOworCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9kaXJfZm9wczsKIAl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZ2ZzMl9zeW1saW5rX2lvcHM7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuaCBiL2ZzL2dmczIvaW5vZGUuaAppbmRleCBkNTMyOTM2Li5kY2E0ZmVlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmgKKysrIGIvZnMvZ2ZzMi9pbm9kZS5oCkBAIC0xMDEsMTIgKzEwMSwyNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZmlsZV9pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9zeW1saW5rX2lvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wc19ub2xvY2s7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzX25vbG9jazsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wc19ub2xvY2s7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CiAKIGV4dGVybiB2b2lkIGdmczJfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworIAorI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wczsKK3N0YXRpYyBpbmxpbmUgaW50IGdmczJfbG9jYWxmbG9ja3MoY29uc3Qgc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJcmV0dXJuIHNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrczsKK30KKyNlbHNlIC8qIFNpbmdsZSBub2RlIG9ubHkgKi8KKyNkZWZpbmUgZ2ZzMl9maWxlX2ZvcHMgTlVMTAorI2RlZmluZSBnZnMyX2Rpcl9mb3BzIE5VTEwKK3N0YXRpYyBpbmxpbmUgaW50IGdmczJfbG9jYWxmbG9ja3MoY29uc3Qgc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0gKi8KIAogI2VuZGlmIC8qIF9fSU5PREVfRE9UX0hfXyAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tfZGxtLmMgYi9mcy9nZnMyL2xvY2tfZGxtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkZjk4OAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2dmczIvbG9ja19kbG0uYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAorICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGxtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgorCisjaW5jbHVkZSAiaW5jb3JlLmgiCisjaW5jbHVkZSAiZ2xvY2suaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKKworc3RhdGljIHZvaWQgZ2RsbV9hc3Qodm9pZCAqYXJnKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGFyZzsKKwl1bnNpZ25lZCByZXQgPSBnbC0+Z2xfc3RhdGU7CisKKwlCVUdfT04oZ2wtPmdsX2xrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0RFTU9URUQpOworCisJaWYgKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9WQUxOT1RWQUxJRCkKKwkJbWVtc2V0KGdsLT5nbF9sdmIsIDAsIEdETE1fTFZCX1NJWkUpOworCisJc3dpdGNoIChnbC0+Z2xfbGtzYi5zYl9zdGF0dXMpIHsKKwljYXNlIC1ETE1fRVVOTE9DSzogLyogVW5sb2NrZWQsIHNvIGdsb2NrIGNhbiBiZSBmcmVlZCAqLworCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwkJcmV0dXJuOworCWNhc2UgLURMTV9FQ0FOQ0VMOiAvKiBDYW5jZWwgd2hpbGUgZ2V0dGluZyBsb2NrICovCisJCXJldCB8PSBMTV9PVVRfQ0FOQ0VMRUQ7CisJCWdvdG8gb3V0OworCWNhc2UgLUVBR0FJTjogLyogVHJ5IGxvY2sgZmFpbHMgKi8KKwkJZ290byBvdXQ7CisJY2FzZSAtRUlOVkFMOiAvKiBJbnZhbGlkICovCisJY2FzZSAtRU5PTUVNOiAvKiBPdXQgb2YgbWVtb3J5ICovCisJCXJldCB8PSBMTV9PVVRfRVJST1I7CisJCWdvdG8gb3V0OworCWNhc2UgMDogLyogU3VjY2VzcyAqLworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBTb21ldGhpbmcgdW5leHBlY3RlZCAqLworCQlCVUcoKTsKKwl9CisKKwlyZXQgPSBnbC0+Z2xfcmVxOworCWlmIChnbC0+Z2xfbGtzYi5zYl9mbGFncyAmIERMTV9TQkZfQUxUTU9ERSkgeworCQlpZiAoZ2wtPmdsX3JlcSA9PSBMTV9TVF9TSEFSRUQpCisJCQlyZXQgPSBMTV9TVF9ERUZFUlJFRDsKKwkJZWxzZSBpZiAoZ2wtPmdsX3JlcSA9PSBMTV9TVF9ERUZFUlJFRCkKKwkJCXJldCA9IExNX1NUX1NIQVJFRDsKKwkJZWxzZQorCQkJQlVHKCk7CisJfQorCisJc2V0X2JpdChHTEZfSU5JVElBTCwgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19jb21wbGV0ZShnbCwgcmV0KTsKKwlyZXR1cm47CitvdXQ6CisJaWYgKCF0ZXN0X2JpdChHTEZfSU5JVElBTCwgJmdsLT5nbF9mbGFncykpCisJCWdsLT5nbF9sa3NiLnNiX2xraWQgPSAwOworCWdmczJfZ2xvY2tfY29tcGxldGUoZ2wsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fYmFzdCh2b2lkICphcmcsIGludCBtb2RlKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGFyZzsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRExNX0xPQ0tfRVg6CisJCWdmczJfZ2xvY2tfY2IoZ2wsIExNX1NUX1VOTE9DS0VEKTsKKwkJYnJlYWs7CisJY2FzZSBETE1fTE9DS19DVzoKKwkJZ2ZzMl9nbG9ja19jYihnbCwgTE1fU1RfREVGRVJSRUQpOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX1BSOgorCQlnZnMyX2dsb2NrX2NiKGdsLCBMTV9TVF9TSEFSRUQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgInVua25vd24gYmFzdCBtb2RlICVkIiwgbW9kZSk7CisJCUJVRygpOworCX0KK30KKworLyogY29udmVydCBnZnMgbG9jay1zdGF0ZSB0byBkbG0gbG9jay1tb2RlICovCisKK3N0YXRpYyBpbnQgbWFrZV9tb2RlKGNvbnN0IHVuc2lnbmVkIGludCBsbXN0YXRlKQoreworCXN3aXRjaCAobG1zdGF0ZSkgeworCWNhc2UgTE1fU1RfVU5MT0NLRUQ6CisJCXJldHVybiBETE1fTE9DS19OTDsKKwljYXNlIExNX1NUX0VYQ0xVU0lWRToKKwkJcmV0dXJuIERMTV9MT0NLX0VYOworCWNhc2UgTE1fU1RfREVGRVJSRUQ6CisJCXJldHVybiBETE1fTE9DS19DVzsKKwljYXNlIExNX1NUX1NIQVJFRDoKKwkJcmV0dXJuIERMTV9MT0NLX1BSOworCX0KKwlwcmludGsoS0VSTl9FUlIgInVua25vd24gTE0gc3RhdGUgJWQiLCBsbXN0YXRlKTsKKwlCVUcoKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB1MzIgbWFrZV9mbGFncyhjb25zdCB1MzIgbGtpZCwgY29uc3QgdW5zaWduZWQgaW50IGdmc19mbGFncywKKwkJICAgICAgY29uc3QgaW50IHJlcSkKK3sKKwl1MzIgbGtmID0gMDsKKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWSkKKwkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWV8xQ0IpIHsKKwkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKKwkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRUJBU1Q7CisJfQorCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpIHsKKwkJbGtmIHw9IERMTV9MS0ZfTk9PUkRFUjsKKwkJbGtmIHw9IERMTV9MS0ZfSEVBRFFVRTsKKwl9CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19BTlkpIHsKKwkJaWYgKHJlcSA9PSBETE1fTE9DS19QUikKKwkJCWxrZiB8PSBETE1fTEtGX0FMVENXOworCQllbHNlIGlmIChyZXEgPT0gRExNX0xPQ0tfQ1cpCisJCQlsa2YgfD0gRExNX0xLRl9BTFRQUjsKKwkJZWxzZQorCQkJQlVHKCk7CisJfQorCisJaWYgKGxraWQgIT0gMCkgCisJCWxrZiB8PSBETE1fTEtGX0NPTlZFUlQ7CisKKwlsa2YgfD0gRExNX0xLRl9WQUxCTEs7CisKKwlyZXR1cm4gbGtmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdkbG1fbG9jayhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJaW50IGVycm9yOworCWludCByZXE7CisJdTMyIGxrZjsKKworCWdsLT5nbF9yZXEgPSByZXFfc3RhdGU7CisJcmVxID0gbWFrZV9tb2RlKHJlcV9zdGF0ZSk7CisJbGtmID0gbWFrZV9mbGFncyhnbC0+Z2xfbGtzYi5zYl9sa2lkLCBmbGFncywgcmVxKTsKKworCS8qCisJICogU3VibWl0IHRoZSBhY3R1YWwgbG9jayByZXF1ZXN0LgorCSAqLworCisJZXJyb3IgPSBkbG1fbG9jayhscy0+bHNfZGxtLCByZXEsICZnbC0+Z2xfbGtzYiwgbGtmLCBnbC0+Z2xfc3RybmFtZSwKKwkJCSBHRExNX1NUUk5BTUVfQllURVMgLSAxLCAwLCBnZGxtX2FzdCwgZ2wsIGdkbG1fYmFzdCk7CisJaWYgKGVycm9yID09IC1FQUdBSU4pCisJCXJldHVybiAwOworCWlmIChlcnJvcikKKwkJcmV0dXJuIExNX09VVF9FUlJPUjsKKwlyZXR1cm4gTE1fT1VUX0FTWU5DOworfQorCitzdGF0aWMgdm9pZCBnZGxtX3B1dF9sb2NrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBwdHI7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJaW50IGVycm9yOworCisJaWYgKGdsLT5nbF9sa3NiLnNiX2xraWQgPT0gMCkgeworCQlrbWVtX2NhY2hlX2ZyZWUoY2FjaGVwLCBnbCk7CisJCXJldHVybjsKKwl9CisKKwllcnJvciA9IGRsbV91bmxvY2sobHMtPmxzX2RsbSwgZ2wtPmdsX2xrc2Iuc2JfbGtpZCwgRExNX0xLRl9WQUxCTEssCisJCQkgICBOVUxMLCBnbCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ2RsbV91bmxvY2sgJXgsJWxseCBlcnI9JWRcbiIsCisJCSAgICAgICBnbC0+Z2xfbmFtZS5sbl90eXBlLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylnbC0+Z2xfbmFtZS5sbl9udW1iZXIsIGVycm9yKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgZ2RsbV9jYW5jZWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OworCWRsbV91bmxvY2sobHMtPmxzX2RsbSwgZ2wtPmdsX2xrc2Iuc2JfbGtpZCwgRExNX0xLRl9DQU5DRUwsIE5VTEwsIGdsKTsKK30KKworc3RhdGljIGludCBnZGxtX21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpmc25hbWUpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZnNuYW1lID09IE5VTEwpIHsKKwkJZnNfaW5mbyhzZHAsICJubyBmc25hbWUgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnJvciA9IGRsbV9uZXdfbG9ja3NwYWNlKGZzbmFtZSwgc3RybGVuKGZzbmFtZSksICZscy0+bHNfZGxtLAorCQkJCSAgRExNX0xTRkxfRlMgfCBETE1fTFNGTF9ORVdFWENMIHwKKwkJCQkgIChscy0+bHNfbm9kaXIgPyBETE1fTFNGTF9OT0RJUiA6IDApLAorCQkJCSAgR0RMTV9MVkJfU0laRSk7CisJaWYgKGVycm9yKQorCQlwcmludGsoS0VSTl9FUlIgImRsbV9uZXdfbG9ja3NwYWNlIGVycm9yICVkIiwgZXJyb3IpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBnZGxtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKworCWlmIChscy0+bHNfZGxtKSB7CisJCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+bHNfZGxtLCAyKTsKKwkJbHMtPmxzX2RsbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBkbG1fdG9rZW5zID0geworCXsgT3B0X2ppZCwgImppZD0lZCJ9LAorCXsgT3B0X2lkLCAiaWQ9JWQifSwKKwl7IE9wdF9maXJzdCwgImZpcnN0PSVkIn0sCisJeyBPcHRfbm9kaXIsICJub2Rpcj0lZCJ9LAorCXsgT3B0X2VyciwgTlVMTCB9LAorfTsKKworY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2ZzMl9kbG1fb3BzID0geworCS5sbV9wcm90b19uYW1lID0gImxvY2tfZGxtIiwKKwkubG1fbW91bnQgPSBnZGxtX21vdW50LAorCS5sbV91bm1vdW50ID0gZ2RsbV91bm1vdW50LAorCS5sbV9wdXRfbG9jayA9IGdkbG1fcHV0X2xvY2ssCisJLmxtX2xvY2sgPSBnZGxtX2xvY2ssCisJLmxtX2NhbmNlbCA9IGdkbG1fY2FuY2VsLAorCS5sbV90b2tlbnMgPSAmZGxtX3Rva2VucywKK307CisKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy5jIGIvZnMvZ2ZzMi9sb2NraW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzI0M2EuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KLQotc3RydWN0IGxtaF93cmFwcGVyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGx3X2xpc3Q7Ci0JY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmx3X29wczsKLX07Ci0KLXN0YXRpYyBpbnQgbm9sb2NrX21vdW50KGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCWxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQl1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCXN0cnVjdCBrb2JqZWN0ICpmc2tvYmopOwotCi0vKiBMaXN0IG9mIHJlZ2lzdGVyZWQgbG93LWxldmVsIGxvY2tpbmcgcHJvdG9jb2xzLiAgQSBmaWxlIHN5c3RlbSBzZWxlY3RzIG9uZQotICAgb2YgdGhlbSBieSBuYW1lIGF0IG1vdW50IHRpbWUsIGUuZy4gbG9ja19ub2xvY2ssIGxvY2tfZGxtLiAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgbm9sb2NrX29wcyA9IHsKLQkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX25vbG9jayIsCi0JLmxtX21vdW50ID0gbm9sb2NrX21vdW50LAotfTsKLQotc3RhdGljIHN0cnVjdCBsbWhfd3JhcHBlciBub2xvY2tfcHJvdG8gID0gewotCS5sd19saXN0ID0gTElTVF9IRUFEX0lOSVQobm9sb2NrX3Byb3RvLmx3X2xpc3QpLAotCS5sd19vcHMgPSAmbm9sb2NrX29wcywKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQobG1oX2xpc3QpOwotc3RhdGljIERFRklORV9NVVRFWChsbWhfbG9jayk7Ci0KLXN0YXRpYyBpbnQgbm9sb2NrX21vdW50KGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCWxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQl1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCXN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0JY2hhciAqYzsKLQl1bnNpZ25lZCBpbnQgamlkOwotCi0JYyA9IHN0cnN0cihob3N0X2RhdGEsICJqaWQ9Iik7Ci0JaWYgKCFjKQotCQlqaWQgPSAwOwotCWVsc2UgewotCQljICs9IDQ7Ci0JCXNzY2FuZihjLCAiJXUiLCAmamlkKTsKLQl9Ci0KLQlsb2Nrc3RydWN0LT5sc19qaWQgPSBqaWQ7Ci0JbG9ja3N0cnVjdC0+bHNfZmlyc3QgPSAxOwotCWxvY2tzdHJ1Y3QtPmxzX2x2Yl9zaXplID0gbWluX2x2Yl9zaXplOwotCWxvY2tzdHJ1Y3QtPmxzX29wcyA9ICZub2xvY2tfb3BzOwotCWxvY2tzdHJ1Y3QtPmxzX2ZsYWdzID0gTE1fTFNGTEFHX0xPQ0FMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8gLSBSZWdpc3RlciBhIGxvdy1sZXZlbCBsb2NraW5nIHByb3RvY29sCi0gKiBAcHJvdG86IHRoZSBwcm90b2NvbCBkZWZpbml0aW9uCi0gKgotICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRVhYWCBvbiBmYWlsdXJlCi0gKi8KLQotaW50IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90bykKLXsKLQlzdHJ1Y3QgbG1oX3dyYXBwZXIgKmx3OwotCi0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsdywgJmxtaF9saXN0LCBsd19saXN0KSB7Ci0JCWlmICghc3RyY21wKGx3LT5sd19vcHMtPmxtX3Byb3RvX25hbWUsIHByb3RvLT5sbV9wcm90b19uYW1lKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBwcm90b2NvbCAlcyBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCSAgICAgICBwcm90by0+bG1fcHJvdG9fbmFtZSk7Ci0JCQlyZXR1cm4gLUVFWElTVDsKLQkJfQotCX0KLQotCWx3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtaF93cmFwcGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsdykgewotCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbHctPmx3X29wcyA9IHByb3RvOwotCWxpc3RfYWRkKCZsdy0+bHdfbGlzdCwgJmxtaF9saXN0KTsKLQotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byAtIFVucmVnaXN0ZXIgYSBsb3ctbGV2ZWwgbG9ja2luZyBwcm90b2NvbAotICogQHByb3RvOiB0aGUgcHJvdG9jb2wgZGVmaW5pdGlvbgotICoKLSAqLwotCi12b2lkIGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHc7Ci0KLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx3LCAmbG1oX2xpc3QsIGx3X2xpc3QpIHsKLQkJaWYgKCFzdHJjbXAobHctPmx3X29wcy0+bG1fcHJvdG9fbmFtZSwgcHJvdG8tPmxtX3Byb3RvX25hbWUpKSB7Ci0JCQlsaXN0X2RlbCgmbHctPmx3X2xpc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCQlrZnJlZShsdyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGNhbid0IHVucmVnaXN0ZXIgbG9jayBwcm90b2NvbCAlc1xuIiwKLQkgICAgICAgcHJvdG8tPmxtX3Byb3RvX25hbWUpOwotfQotCi0vKioKLSAqIGdmczJfbW91bnRfbG9ja3Byb3RvIC0gTW91bnQgYSBsb2NrIHByb3RvY29sCi0gKiBAcHJvdG9fbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBwcm90b2NvbAotICogQHRhYmxlX25hbWUgLSB0aGUgbmFtZSBvZiB0aGUgbG9jayBzcGFjZQotICogQGhvc3RfZGF0YSAtIGRhdGEgc3BlY2lmaWMgdG8gdGhpcyBob3N0Ci0gKiBAY2IgLSB0aGUgY2FsbGJhY2sgdG8gdGhlIGNvZGUgdXNpbmcgdGhlIGxvY2sgbW9kdWxlCi0gKiBAc2RwIC0gVGhlIEdGUzIgc3VwZXJibG9jawotICogQG1pbl9sdmJfc2l6ZSAtIHRoZSBtaW5pbnVtIExWQiBzaXplIHRoYXQgdGhlIGNhbGxlciBjYW4gZGVhbCB3aXRoCi0gKiBAZmxhZ3MgLSBMTV9NRkxBR18qCi0gKiBAbG9ja3N0cnVjdCAtIGEgc3RydWN0dXJlIHJldHVybmVkIGRlc2NyaWJpbmcgdGhlIG1vdW50Ci0gKgotICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRVhYWCBvbiBmYWlsdXJlCi0gKi8KLQotaW50IGdmczJfbW91bnRfbG9ja3Byb3RvKGNoYXIgKnByb3RvX25hbWUsIGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHcgPSBOVUxMOwotCWludCB0cnkgPSAwOwotCWludCBlcnJvciwgZm91bmQ7Ci0KLQotcmV0cnk6Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCi0JaWYgKGxpc3RfZW1wdHkoJm5vbG9ja19wcm90by5sd19saXN0KSkKLQkJbGlzdF9hZGQoJm5vbG9ja19wcm90by5sd19saXN0LCAmbG1oX2xpc3QpOwotCi0JZm91bmQgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobHcsICZsbWhfbGlzdCwgbHdfbGlzdCkgewotCQlpZiAoIXN0cmNtcChsdy0+bHdfb3BzLT5sbV9wcm90b19uYW1lLCBwcm90b19uYW1lKSkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCWlmICghdHJ5ICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7Ci0JCQl0cnkgPSAxOwotCQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCQlyZXF1ZXN0X21vZHVsZShwcm90b19uYW1lKTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogY2FuJ3QgZmluZCBwcm90b2NvbCAlc1xuIiwgcHJvdG9fbmFtZSk7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGx3LT5sd19vcHMtPmxtX293bmVyICYmCi0JICAgICF0cnlfbW9kdWxlX2dldChsdy0+bHdfb3BzLT5sbV9vd25lcikpIHsKLQkJdHJ5ID0gMDsKLQkJbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JCW1zbGVlcCgxMDAwKTsKLQkJZ290byByZXRyeTsKLQl9Ci0KLQllcnJvciA9IGx3LT5sd19vcHMtPmxtX21vdW50KHRhYmxlX25hbWUsIGhvc3RfZGF0YSwgY2IsIGNiX2RhdGEsCi0JCQkJICAgICBtaW5fbHZiX3NpemUsIGZsYWdzLCBsb2Nrc3RydWN0LCBmc2tvYmopOwotCWlmIChlcnJvcikKLQkJbW9kdWxlX3B1dChsdy0+bHdfb3BzLT5sbV9vd25lcik7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdmczJfdW5tb3VudF9sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpCi17Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCWlmIChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX3VubW91bnQpCi0JCWxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fdW5tb3VudChsb2Nrc3RydWN0LT5sc19sb2Nrc3BhY2UpOwotCWlmIChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKQotCQltb2R1bGVfcHV0KGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpOwotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotfQotCi0vKioKLSAqIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvIC0gYWJub3JtYWxseSB1bm1vdW50IGEgbG9jayBtb2R1bGUKLSAqIEBsb2Nrc3RydWN0OiB0aGUgbG9ja3N0cnVjdCBwYXNzZWQgaW50byBtb3VudAotICoKLSAqLwotCi12b2lkIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KQotewotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQlsb2Nrc3RydWN0LT5sc19vcHMtPmxtX3dpdGhkcmF3KGxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpCi0JCW1vZHVsZV9wdXQobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcik7Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8pOwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwOWJiNi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vYmotJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja19kbG0ubwotbG9ja19kbG0teSA6PSBsb2NrLm8gbWFpbi5vIG1vdW50Lm8gc3lzZnMubyB0aHJlYWQubwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDgyYzkwLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1zdGF0aWMgY2hhciBqdW5rX2x2YltHRExNX0xWQl9TSVpFXTsKLQotCi0vKiBjb252ZXJ0IGRsbSBsb2NrLW1vZGUgdG8gZ2ZzIGxvY2stc3RhdGUgKi8KLQotc3RhdGljIHMxNiBnZGxtX21ha2VfbG1zdGF0ZShzMTYgZGxtbW9kZSkKLXsKLQlzd2l0Y2ggKGRsbW1vZGUpIHsKLQljYXNlIERMTV9MT0NLX0lWOgotCWNhc2UgRExNX0xPQ0tfTkw6Ci0JCXJldHVybiBMTV9TVF9VTkxPQ0tFRDsKLQljYXNlIERMTV9MT0NLX0VYOgotCQlyZXR1cm4gTE1fU1RfRVhDTFVTSVZFOwotCWNhc2UgRExNX0xPQ0tfQ1c6Ci0JCXJldHVybiBMTV9TVF9ERUZFUlJFRDsKLQljYXNlIERMTV9MT0NLX1BSOgotCQlyZXR1cm4gTE1fU1RfU0hBUkVEOwotCX0KLQlnZGxtX2Fzc2VydCgwLCAidW5rbm93biBETE0gbW9kZSAlZCIsIGRsbW1vZGUpOwotCXJldHVybiAtMTsKLX0KLQotLyogQSBsb2NrIHBsYWNlZCBvbiB0aGlzIHF1ZXVlIGlzIHJlLXN1Ym1pdHRlZCB0byBETE0gYXMgc29vbiBhcyB0aGUgbG9ja19kbG0KLSAgIHRocmVhZCBnZXRzIHRvIGl0LiAqLwotCi1zdGF0aWMgdm9pZCBxdWV1ZV9zdWJtaXQoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbHAtPmRlbGF5X2xpc3QsICZscy0+c3VibWl0KTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCXdha2VfdXAoJmxzLT50aHJlYWRfd2FpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdha2VfdXBfYXN0KHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCWNsZWFyX2JpdChMRkxfQVNUX1dBSVQsICZscC0+ZmxhZ3MpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0Jd2FrZV91cF9iaXQoJmxwLT5mbGFncywgTEZMX0FTVF9XQUlUKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9kZWxldGVfbHAoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZscC0+ZGVsYXlfbGlzdCkpCi0JCWxpc3RfZGVsX2luaXQoJmxwLT5kZWxheV9saXN0KTsKLQlscy0+YWxsX2xvY2tzX2NvdW50LS07Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCWtmcmVlKGxwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9xdWV1ZV9kZWxheWVkKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmxwLT5kZWxheV9saXN0LCAmbHMtPmRlbGF5ZWQpOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfY29tcGxldGUoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCXN0cnVjdCBsbV9hc3luY19jYiBhY2I7Ci0KLQltZW1zZXQoJmFjYiwgMCwgc2l6ZW9mKGFjYikpOwotCi0JaWYgKGxwLT5sa3NiLnNiX3N0YXR1cyA9PSAtRExNX0VDQU5DRUwpIHsKLQkJbG9nX2luZm8oImNvbXBsZXRlIGRsbSBjYW5jZWwgJXgsJWxseCBmbGFncyAlbHgiLAotCQkgCSBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCQkgbHAtPmZsYWdzKTsKLQotCQlscC0+cmVxID0gbHAtPmN1cjsKLQkJYWNiLmxjX3JldCB8PSBMTV9PVVRfQ0FOQ0VMRUQ7Ci0JCWlmIChscC0+Y3VyID09IERMTV9MT0NLX0lWKQotCQkJbHAtPmxrc2Iuc2JfbGtpZCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX0RMTV9VTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWlmIChscC0+bGtzYi5zYl9zdGF0dXMgIT0gLURMTV9FVU5MT0NLKSB7Ci0JCQlsb2dfaW5mbygidW5sb2NrIHNiX3N0YXR1cyAlZCAleCwlbGx4IGZsYWdzICVseCIsCi0JCQkJIGxwLT5sa3NiLnNiX3N0YXR1cywgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCQkgbHAtPmZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWxwLT5jdXIgPSBETE1fTE9DS19JVjsKLQkJbHAtPnJlcSA9IERMTV9MT0NLX0lWOwotCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKLQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9VTkxPQ0tfREVMRVRFLCAmbHAtPmZsYWdzKSkgewotCQkJZ2RsbV9kZWxldGVfbHAobHApOwotCQkJcmV0dXJuOwotCQl9Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChscC0+bGtzYi5zYl9mbGFncyAmIERMTV9TQkZfVkFMTk9UVkFMSUQpCi0JCW1lbXNldChscC0+bGtzYi5zYl9sdmJwdHIsIDAsIEdETE1fTFZCX1NJWkUpOwotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9BTFRNT0RFKSB7Ci0JCWlmIChscC0+cmVxID09IERMTV9MT0NLX1BSKQotCQkJbHAtPnJlcSA9IERMTV9MT0NLX0NXOwotCQllbHNlIGlmIChscC0+cmVxID09IERMTV9MT0NLX0NXKQotCQkJbHAtPnJlcSA9IERMTV9MT0NLX1BSOwotCX0KLQotCS8qCi0JICogQSBjYW5jZWxlZCBsb2NrIHJlcXVlc3QuICBUaGUgbG9jayB3YXMganVzdCB0YWtlbiBvZmYgdGhlIGRlbGF5ZWQKLQkgKiBsaXN0IGFuZCB3YXMgbmV2ZXIgZXZlbiBzdWJtaXR0ZWQgdG8gZGxtLgotCSAqLwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfQ0FOQ0VMLCAmbHAtPmZsYWdzKSkgewotCQlsb2dfaW5mbygiY29tcGxldGUgaW50ZXJuYWwgY2FuY2VsICV4LCVsbHgiLAotCQkgCSBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlscC0+cmVxID0gbHAtPmN1cjsKLQkJYWNiLmxjX3JldCB8PSBMTV9PVVRfQ0FOQ0VMRUQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogQW4gZXJyb3Igb2NjdXJlZC4KLQkgKi8KLQotCWlmIChscC0+bGtzYi5zYl9zdGF0dXMpIHsKLQkJLyogYSAibm9ybWFsIiBlcnJvciAqLwotCQlpZiAoKGxwLT5sa3NiLnNiX3N0YXR1cyA9PSAtRUFHQUlOKSAmJgotCQkgICAgKGxwLT5sa2YgJiBETE1fTEtGX05PUVVFVUUpKSB7Ci0JCQlscC0+cmVxID0gbHAtPmN1cjsKLQkJCWlmIChscC0+Y3VyID09IERMTV9MT0NLX0lWKQotCQkJCWxwLT5sa3NiLnNiX2xraWQgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiB0aGlzIGNvdWxkIG9ubHkgaGFwcGVuIHdpdGggY2FuY2VscyBJIHRoaW5rICovCi0JCWxvZ19pbmZvKCJhc3Qgc2Jfc3RhdHVzICVkICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJCSBscC0+bGtzYi5zYl9zdGF0dXMsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSBscC0+ZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGlzIGFuIEFTVCBmb3IgYW4gRVgtPkVYIGNvbnZlcnNpb24gZm9yIHN5bmNfbHZiIGZyb20gR0ZTLgotCSAqLwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfU1lOQ19MVkIsICZscC0+ZmxhZ3MpKSB7Ci0JCXdha2VfdXBfYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQSBsb2NrIGhhcyBiZWVuIGRlbW90ZWQgdG8gTkwgYmVjYXVzZSBpdCBpbml0aWFsbHkgY29tcGxldGVkIGR1cmluZwotCSAqIEJMT0NLX0xPQ0tTLiAgTm93IGl0IG11c3QgYmUgcmVxdWVzdGVkIGluIHRoZSBvcmlnaW5hbGx5IHJlcXVlc3RlZAotCSAqIG1vZGUuCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9SRVJFUVVFU1QsICZscC0+ZmxhZ3MpKSB7Ci0JCWdkbG1fYXNzZXJ0KGxwLT5yZXEgPT0gRExNX0xPQ0tfTkwsICIleCwlbGx4IiwKLQkJCSAgICBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlnZGxtX2Fzc2VydChscC0+cHJldl9yZXEgPiBETE1fTE9DS19OTCwgIiV4LCVsbHgiLAotCQkJICAgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0KLQkJbHAtPmN1ciA9IERMTV9MT0NLX05MOwotCQlscC0+cmVxID0gbHAtPnByZXZfcmVxOwotCQlscC0+cHJldl9yZXEgPSBETE1fTE9DS19JVjsKLQkJbHAtPmxrZiAmPSB+RExNX0xLRl9DT05WREVBRExLOwotCi0JCXNldF9iaXQoTEZMX05PQ0FDSEUsICZscC0+ZmxhZ3MpOwotCi0JCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpICYmCi0JCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpKQotCQkJZ2RsbV9xdWV1ZV9kZWxheWVkKGxwKTsKLQkJZWxzZQotCQkJcXVldWVfc3VibWl0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQSByZXF1ZXN0IGlzIGdyYW50ZWQgZHVyaW5nIGRsbSByZWNvdmVyeS4gIEl0IG1heSBiZSBncmFudGVkCi0JICogYmVjYXVzZSB0aGUgbG9ja3Mgb2YgYSBmYWlsZWQgbm9kZSB3ZXJlIGNsZWFyZWQuICBJbiB0aGF0IGNhc2UsCi0JICogdGhlcmUgbWF5IGJlIGluY29uc2lzdGVudCBkYXRhIGJlbmVhdGggdGhpcyBsb2NrIGFuZCB3ZSBtdXN0IHdhaXQKLQkgKiBmb3IgcmVjb3ZlcnkgdG8gY29tcGxldGUgdG8gdXNlIGl0LiAgV2hlbiBnZnMgcmVjb3ZlcnkgaXMgZG9uZSB0aGlzCi0JICogZ3JhbnRlZCBsb2NrIHdpbGwgYmUgY29udmVydGVkIHRvIE5MIGFuZCB0aGVuIHJlYWNxdWlyZWQgaW4gdGhpcwotCSAqIGdyYW50ZWQgc3RhdGUuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpICYmCi0JICAgIGxwLT5yZXEgIT0gRExNX0xPQ0tfTkwpIHsKLQotCQlscC0+Y3VyID0gbHAtPnJlcTsKLQkJbHAtPnByZXZfcmVxID0gbHAtPnJlcTsKLQkJbHAtPnJlcSA9IERMTV9MT0NLX05MOwotCQlscC0+bGtmIHw9IERMTV9MS0ZfQ09OVkVSVDsKLQkJbHAtPmxrZiAmPSB+RExNX0xLRl9DT05WREVBRExLOwotCi0JCWxvZ19kZWJ1ZygicmVyZXEgJXgsJWxseCBpZCAleCAlZCwlZCIsCi0JCQkgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsCi0JCQkgIGxwLT5sa3NiLnNiX2xraWQsIGxwLT5jdXIsIGxwLT5yZXEpOwotCi0JCXNldF9iaXQoTEZMX1JFUkVRVUVTVCwgJmxwLT5mbGFncyk7Ci0JCXF1ZXVlX3N1Ym1pdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIERMTSBkZW1vdGVkIHRoZSBsb2NrIHRvIE5MIGJlZm9yZSBpdCB3YXMgZ3JhbnRlZCBzbyBHRlMgbXVzdCBiZQotCSAqIHRvbGQgaXQgY2Fubm90IGNhY2hlIGRhdGEgZm9yIHRoaXMgbG9jay4KLQkgKi8KLQotCWlmIChscC0+bGtzYi5zYl9mbGFncyAmIERMTV9TQkZfREVNT1RFRCkKLQkJc2V0X2JpdChMRkxfTk9DQUNIRSwgJmxwLT5mbGFncyk7Ci0KLW91dDoKLQkvKgotCSAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbG9ja19kbG0gbG9jawotCSAqLwotCi0JaWYgKHRlc3RfYml0KExGTF9JTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWNsZWFyX2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0JCWxwLT5jdXIgPSBscC0+cmVxOwotCQl3YWtlX3VwX2FzdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE5vcm1hbCBjb21wbGV0aW9uIG9mIGEgbG9jayByZXF1ZXN0LiAgVGVsbCBHRlMgaXQgbm93IGhhcyB0aGUgbG9jay4KLQkgKi8KLQotCWNsZWFyX2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0JbHAtPmN1ciA9IGxwLT5yZXE7Ci0KLQlhY2IubGNfbmFtZSA9IGxwLT5sb2NrbmFtZTsKLQlhY2IubGNfcmV0IHw9IGdkbG1fbWFrZV9sbXN0YXRlKGxwLT5jdXIpOwotCi0JbHMtPmZzY2IobHMtPnNkcCwgTE1fQ0JfQVNZTkMsICZhY2IpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX2FzdCh2b2lkICphc3RhcmcpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBhc3Rhcmc7Ci0JY2xlYXJfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCXByb2Nlc3NfY29tcGxldGUobHApOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Jsb2NraW5nKHN0cnVjdCBnZGxtX2xvY2sgKmxwLCBpbnQgYmFzdF9tb2RlKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQl1bnNpZ25lZCBpbnQgY2IgPSAwOwotCi0Jc3dpdGNoIChnZGxtX21ha2VfbG1zdGF0ZShiYXN0X21vZGUpKSB7Ci0JY2FzZSBMTV9TVF9FWENMVVNJVkU6Ci0JCWNiID0gTE1fQ0JfTkVFRF9FOwotCQlicmVhazsKLQljYXNlIExNX1NUX0RFRkVSUkVEOgotCQljYiA9IExNX0NCX05FRURfRDsKLQkJYnJlYWs7Ci0JY2FzZSBMTV9TVF9TSEFSRUQ6Ci0JCWNiID0gTE1fQ0JfTkVFRF9TOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnZGxtX2Fzc2VydCgwLCAidW5rbm93biBiYXN0IG1vZGUgJXUiLCBiYXN0X21vZGUpOwotCX0KLQotCWxzLT5mc2NiKGxzLT5zZHAsIGNiLCAmbHAtPmxvY2tuYW1lKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBnZGxtX2Jhc3Qodm9pZCAqYXN0YXJnLCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGFzdGFyZzsKLQotCWlmICghbW9kZSkgewotCQlwcmludGsoS0VSTl9JTkZPICJsb2NrX2RsbTogYmFzdCBtb2RlIHplcm8gJXgsJWxseFxuIiwKLQkJCWxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQkJcmV0dXJuOwotCX0KLQotCXByb2Nlc3NfYmxvY2tpbmcobHAsIG1vZGUpOwotfQotCi0vKiBjb252ZXJ0IGdmcyBsb2NrLXN0YXRlIHRvIGRsbSBsb2NrLW1vZGUgKi8KLQotc3RhdGljIHMxNiBtYWtlX21vZGUoczE2IGxtc3RhdGUpCi17Ci0Jc3dpdGNoIChsbXN0YXRlKSB7Ci0JY2FzZSBMTV9TVF9VTkxPQ0tFRDoKLQkJcmV0dXJuIERMTV9MT0NLX05MOwotCWNhc2UgTE1fU1RfRVhDTFVTSVZFOgotCQlyZXR1cm4gRExNX0xPQ0tfRVg7Ci0JY2FzZSBMTV9TVF9ERUZFUlJFRDoKLQkJcmV0dXJuIERMTV9MT0NLX0NXOwotCWNhc2UgTE1fU1RfU0hBUkVEOgotCQlyZXR1cm4gRExNX0xPQ0tfUFI7Ci0JfQotCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIExNIHN0YXRlICVkIiwgbG1zdGF0ZSk7Ci0JcmV0dXJuIC0xOwotfQotCi0KLS8qIHZlcmlmeSBhZ3JlZW1lbnQgd2l0aCBHRlMgb24gdGhlIGN1cnJlbnQgbG9jayBzdGF0ZSwgTkI6IERMTV9MT0NLX05MIGFuZAotICAgRExNX0xPQ0tfSVYgYXJlIGJvdGggY29uc2lkZXJlZCBMTV9TVF9VTkxPQ0tFRCBieSBHRlMuICovCi0KLXN0YXRpYyB2b2lkIGNoZWNrX2N1cl9zdGF0ZShzdHJ1Y3QgZ2RsbV9sb2NrICpscCwgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSkKLXsKLQlzMTYgY3VyID0gbWFrZV9tb2RlKGN1cl9zdGF0ZSk7Ci0JaWYgKGxwLT5jdXIgIT0gRExNX0xPQ0tfSVYpCi0JCWdkbG1fYXNzZXJ0KGxwLT5jdXIgPT0gY3VyLCAiJWQsICVkIiwgbHAtPmN1ciwgY3VyKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWFrZV9mbGFncyhzdHJ1Y3QgZ2RsbV9sb2NrICpscCwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZ2ZzX2ZsYWdzLAotCQkJCSAgICAgIHMxNiBjdXIsIHMxNiByZXEpCi17Ci0JdW5zaWduZWQgaW50IGxrZiA9IDA7Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19UUlkpCi0JCWxrZiB8PSBETE1fTEtGX05PUVVFVUU7Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19UUllfMUNCKSB7Ci0JCWxrZiB8PSBETE1fTEtGX05PUVVFVUU7Ci0JCWxrZiB8PSBETE1fTEtGX05PUVVFVUVCQVNUOwotCX0KLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKSB7Ci0JCWxrZiB8PSBETE1fTEtGX05PT1JERVI7Ci0JCWxrZiB8PSBETE1fTEtGX0hFQURRVUU7Ci0JfQotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfQU5ZKSB7Ci0JCWlmIChyZXEgPT0gRExNX0xPQ0tfUFIpCi0JCQlsa2YgfD0gRExNX0xLRl9BTFRDVzsKLQkJZWxzZSBpZiAocmVxID09IERMTV9MT0NLX0NXKQotCQkJbGtmIHw9IERMTV9MS0ZfQUxUUFI7Ci0JfQotCi0JaWYgKGxwLT5sa3NiLnNiX2xraWQgIT0gMCkgewotCQlsa2YgfD0gRExNX0xLRl9DT05WRVJUOwotCX0KLQotCWlmIChscC0+bHZiKQotCQlsa2YgfD0gRExNX0xLRl9WQUxCTEs7Ci0KLQlyZXR1cm4gbGtmOwotfQotCi0vKiBtYWtlX3N0cm5hbWUgLSBjb252ZXJ0IEdGUyBsb2NrIG51bWJlcnMgdG8gYSBzdHJpbmcgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG1ha2Vfc3RybmFtZShjb25zdCBzdHJ1Y3QgbG1fbG9ja25hbWUgKmxvY2tuYW1lLAotCQkJCXN0cnVjdCBnZGxtX3N0cm5hbWUgKnN0cikKLXsKLQlzcHJpbnRmKHN0ci0+bmFtZSwgIiU4eCUxNmxseCIsIGxvY2tuYW1lLT5sbl90eXBlLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWxvY2tuYW1lLT5sbl9udW1iZXIpOwotCXN0ci0+bmFtZWxlbiA9IEdETE1fU1RSTkFNRV9CWVRFUzsKLX0KLQotc3RhdGljIGludCBnZGxtX2NyZWF0ZV9scChzdHJ1Y3QgZ2RsbV9scyAqbHMsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgc3RydWN0IGdkbG1fbG9jayAqKmxwcCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscDsKLQotCWxwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdkbG1fbG9jayksIEdGUF9OT0ZTKTsKLQlpZiAoIWxwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxwLT5sb2NrbmFtZSA9ICpuYW1lOwotCW1ha2Vfc3RybmFtZShuYW1lLCAmbHAtPnN0cm5hbWUpOwotCWxwLT5scyA9IGxzOwotCWxwLT5jdXIgPSBETE1fTE9DS19JVjsKLQlJTklUX0xJU1RfSEVBRCgmbHAtPmRlbGF5X2xpc3QpOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbHMtPmFsbF9sb2Nrc19jb3VudCsrOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQkqbHBwID0gbHA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBnZGxtX2dldF9sb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgIHZvaWQgKipsb2NrcCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdkbG1fY3JlYXRlX2xwKGxvY2tzcGFjZSwgbmFtZSwgJmxwKTsKLQotCSpsb2NrcCA9IGxwOwotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZGxtX3B1dF9sb2NrKHZvaWQgKmxvY2spCi17Ci0JZ2RsbV9kZWxldGVfbHAobG9jayk7Ci19Ci0KLXVuc2lnbmVkIGludCBnZGxtX2RvX2xvY2soc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCWludCBlcnJvciwgYmFzdCA9IDE7Ci0KLQkvKgotCSAqIFdoZW4gcmVjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MsIGRlbGF5IGxvY2sgcmVxdWVzdHMgZm9yIHN1Ym1pc3Npb24KLQkgKiBvbmNlIHJlY292ZXJ5IGlzIGRvbmUuICBSZXF1ZXN0cyBmb3IgcmVjb3ZlcnkgKE5PRVhQKSBhbmQgdW5sb2NrcwotCSAqIGNhbiBwYXNzLgotCSAqLwotCi0JaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKSAmJiBscC0+cmVxICE9IERMTV9MT0NLX05MKSB7Ci0JCWdkbG1fcXVldWVfZGVsYXllZChscCk7Ci0JCXJldHVybiBMTV9PVVRfQVNZTkM7Ci0JfQotCi0JLyoKLQkgKiBTdWJtaXQgdGhlIGFjdHVhbCBsb2NrIHJlcXVlc3QuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoTEZMX05PQkFTVCwgJmxwLT5mbGFncykpCi0JCWJhc3QgPSAwOwotCi0Jc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQotCWxvZ19kZWJ1ZygibGsgJXgsJWxseCBpZCAleCAlZCwlZCAleCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmxrc2Iuc2JfbGtpZCwKLQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmKTsKLQotCWVycm9yID0gZGxtX2xvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIGxwLT5yZXEsICZscC0+bGtzYiwgbHAtPmxrZiwKLQkJCSBscC0+c3RybmFtZS5uYW1lLCBscC0+c3RybmFtZS5uYW1lbGVuLCAwLCBnZGxtX2FzdCwKLQkJCSBscCwgYmFzdCA/IGdkbG1fYmFzdCA6IE5VTEwpOwotCi0JaWYgKChlcnJvciA9PSAtRUFHQUlOKSAmJiAobHAtPmxrZiAmIERMTV9MS0ZfTk9RVUVVRSkpIHsKLQkJbHAtPmxrc2Iuc2Jfc3RhdHVzID0gLUVBR0FJTjsKLQkJZ2RsbV9hc3QobHApOwotCQllcnJvciA9IDA7Ci0JfQotCi0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiJXM6IGdkbG1fbG9jayAleCwlbGx4IGVycj0lZCBjdXI9JWQgcmVxPSVkIGxrZj0leCAiCi0JCQkgICJmbGFncz0lbHgiLCBscy0+ZnNuYW1lLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBlcnJvciwKLQkJCSAgbHAtPmN1ciwgbHAtPnJlcSwgbHAtPmxrZiwgbHAtPmZsYWdzKTsKLQkJcmV0dXJuIExNX09VVF9FUlJPUjsKLQl9Ci0JcmV0dXJuIExNX09VVF9BU1lOQzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZGxtX2RvX3VubG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JdW5zaWduZWQgaW50IGxrZiA9IDA7Ci0JaW50IGVycm9yOwotCi0Jc2V0X2JpdChMRkxfRExNX1VOTE9DSywgJmxwLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQotCWlmIChscC0+bHZiKQotCQlsa2YgPSBETE1fTEtGX1ZBTEJMSzsKLQotCWxvZ19kZWJ1ZygidW4gJXgsJWxseCAleCAlZCAleCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJICBscC0+bGtzYi5zYl9sa2lkLCBscC0+Y3VyLCBsa2YpOwotCi0JZXJyb3IgPSBkbG1fdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBscC0+bGtzYi5zYl9sa2lkLCBsa2YsIE5VTEwsIGxwKTsKLQotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoIiVzOiBnZGxtX3VubG9jayAleCwlbGx4IGVycj0lZCBjdXI9JWQgcmVxPSVkIGxrZj0leCAiCi0JCQkgICJmbGFncz0lbHgiLCBscy0+ZnNuYW1lLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBlcnJvciwKLQkJCSAgbHAtPmN1ciwgbHAtPnJlcSwgbHAtPmxrZiwgbHAtPmZsYWdzKTsKLQkJcmV0dXJuIExNX09VVF9FUlJPUjsKLQl9Ci0JcmV0dXJuIExNX09VVF9BU1lOQzsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fbG9jayh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLAotCQkgICAgICAgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQotCWlmIChyZXFfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQpCi0JCXJldHVybiBnZGxtX3VubG9jayhsb2NrLCBjdXJfc3RhdGUpOwotCi0JaWYgKHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCkKLQkJcmV0dXJuIGdkbG1fdW5sb2NrKGxvY2ssIGN1cl9zdGF0ZSk7Ci0KLQljbGVhcl9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotCWlmIChmbGFncyAmIExNX0ZMQUdfTk9FWFApCi0JCXNldF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpOwotCi0JY2hlY2tfY3VyX3N0YXRlKGxwLCBjdXJfc3RhdGUpOwotCWxwLT5yZXEgPSBtYWtlX21vZGUocmVxX3N0YXRlKTsKLQlscC0+bGtmID0gbWFrZV9mbGFncyhscCwgZmxhZ3MsIGxwLT5jdXIsIGxwLT5yZXEpOwotCi0JcmV0dXJuIGdkbG1fZG9fbG9jayhscCk7Ci19Ci0KLXVuc2lnbmVkIGludCBnZGxtX3VubG9jayh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQotCWNsZWFyX2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCXJldHVybiAwOwotCXJldHVybiBnZGxtX2RvX3VubG9jayhscCk7Ci19Ci0KLXZvaWQgZ2RsbV9jYW5jZWwodm9pZCAqbG9jaykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCWludCBlcnJvciwgZGVsYXlfbGlzdCA9IDA7Ci0KLQlpZiAodGVzdF9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQlsb2dfaW5mbygiZ2RsbV9jYW5jZWwgJXgsJWxseCBmbGFncyAlbHgiLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmZsYWdzKTsKLQotCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmbHAtPmRlbGF5X2xpc3QpKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmxwLT5kZWxheV9saXN0KTsKLQkJZGVsYXlfbGlzdCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQlpZiAoZGVsYXlfbGlzdCkgewotCQlzZXRfYml0KExGTF9DQU5DRUwsICZscC0+ZmxhZ3MpOwotCQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCQlnZGxtX2FzdChscCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXRlc3RfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KExGTF9ETE1fVU5MT0NLLCAmbHAtPmZsYWdzKSkgewotCQlsb2dfaW5mbygiZ2RsbV9jYW5jZWwgc2tpcCAleCwlbGx4IGZsYWdzICVseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwgbHAtPmZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHRoZSBsb2NrIGlzIGJsb2NrZWQgaW4gdGhlIGRsbSAqLwotCi0Jc2V0X2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQUNUSVZFLCAmbHAtPmZsYWdzKTsKLQotCWVycm9yID0gZGxtX3VubG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbHAtPmxrc2Iuc2JfbGtpZCwgRExNX0xLRl9DQU5DRUwsCi0JCQkgICBOVUxMLCBscCk7Ci0KLQlsb2dfaW5mbygiZ2RsbV9jYW5jZWwgcnYgJWQgJXgsJWxseCBmbGFncyAlbHgiLCBlcnJvciwKLQkJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCi0JaWYgKGVycm9yID09IC1FQlVTWSkKLQkJY2xlYXJfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBnZGxtX2FkZF9sdmIoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0JY2hhciAqbHZiOwotCi0JbHZiID0ga3phbGxvYyhHRExNX0xWQl9TSVpFLCBHRlBfTk9GUyk7Ci0JaWYgKCFsdmIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHAtPmxrc2Iuc2JfbHZicHRyID0gbHZiOwotCWxwLT5sdmIgPSBsdmI7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fZGVsX2x2YihzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlrZnJlZShscC0+bHZiKTsKLQlscC0+bHZiID0gTlVMTDsKLQlscC0+bGtzYi5zYl9sdmJwdHIgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGdkbG1fYXN0X3dhaXQodm9pZCAqd29yZCkKLXsKLQlzY2hlZHVsZSgpOwotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGNhbiBkbyBhIHN5bmNocm9ub3VzIGRsbSByZXF1ZXN0IChyZXF1aXJpbmcgYSBsb2NrX2RsbSB0aHJlYWQgdG8gZ2V0Ci0gICB0aGUgY29tcGxldGlvbikgYmVjYXVzZSBnZnMgd29uJ3QgY2FsbCBob2xkX2x2YigpIGR1cmluZyBhIGNhbGxiYWNrIChmcm9tCi0gICB0aGUgY29udGV4dCBvZiBhIGxvY2tfZGxtIHRocmVhZCkuICovCi0KLXN0YXRpYyBpbnQgaG9sZF9udWxsX2xvY2soc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHBuID0gTlVMTDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAobHAtPmhvbGRfbnVsbCkgewotCQlwcmludGsoS0VSTl9JTkZPICJsb2NrX2RsbTogbHZiIGFscmVhZHkgaGVsZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWVycm9yID0gZ2RsbV9jcmVhdGVfbHAobHAtPmxzLCAmbHAtPmxvY2tuYW1lLCAmbHBuKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JbHBuLT5sa3NiLnNiX2x2YnB0ciA9IGp1bmtfbHZiOwotCWxwbi0+bHZiID0ganVua19sdmI7Ci0KLQlscG4tPnJlcSA9IERMTV9MT0NLX05MOwotCWxwbi0+bGtmID0gRExNX0xLRl9WQUxCTEsgfCBETE1fTEtGX0VYUEVESVRFOwotCXNldF9iaXQoTEZMX05PQkFTVCwgJmxwbi0+ZmxhZ3MpOwotCXNldF9iaXQoTEZMX0lOTE9DSywgJmxwbi0+ZmxhZ3MpOwotCXNldF9iaXQoTEZMX0FTVF9XQUlULCAmbHBuLT5mbGFncyk7Ci0KLQlnZGxtX2RvX2xvY2sobHBuKTsKLQl3YWl0X29uX2JpdCgmbHBuLT5mbGFncywgTEZMX0FTVF9XQUlULCBnZGxtX2FzdF93YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JZXJyb3IgPSBscG4tPmxrc2Iuc2Jfc3RhdHVzOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9JTkZPICJsb2NrX2RsbTogaG9sZF9udWxsX2xvY2sgZGxtIGVycm9yICVkXG4iLAotCQkgICAgICAgZXJyb3IpOwotCQlnZGxtX2RlbGV0ZV9scChscG4pOwotCQlscG4gPSBOVUxMOwotCX0KLW91dDoKLQlscC0+aG9sZF9udWxsID0gbHBuOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyogVGhpcyBjYW5ub3QgZG8gYSBzeW5jaHJvbm91cyBkbG0gcmVxdWVzdCAocmVxdWlyaW5nIGEgbG9ja19kbG0gdGhyZWFkIHRvIGdldAotICAgdGhlIGNvbXBsZXRpb24pIGJlY2F1c2UgZ2ZzIG1heSBjYWxsIHVuaG9sZF9sdmIoKSBkdXJpbmcgYSBjYWxsYmFjayAoZnJvbQotICAgdGhlIGNvbnRleHQgb2YgYSBsb2NrX2RsbSB0aHJlYWQpIHdoaWNoIGNvdWxkIGNhdXNlIGEgZGVhZGxvY2sgc2luY2UgdGhlCi0gICBvdGhlciBsb2NrX2RsbSB0aHJlYWQgY291bGQgYmUgZW5nYWdlZCBpbiByZWNvdmVyeS4gKi8KLQotc3RhdGljIHZvaWQgdW5ob2xkX251bGxfbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscG4gPSBscC0+aG9sZF9udWxsOwotCi0JZ2RsbV9hc3NlcnQobHBuLCAiJXgsJWxseCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQlscG4tPmxrc2Iuc2JfbHZicHRyID0gTlVMTDsKLQlscG4tPmx2YiA9IE5VTEw7Ci0Jc2V0X2JpdChMRkxfVU5MT0NLX0RFTEVURSwgJmxwbi0+ZmxhZ3MpOwotCWdkbG1fZG9fdW5sb2NrKGxwbik7Ci0JbHAtPmhvbGRfbnVsbCA9IE5VTEw7Ci19Ci0KLS8qIEFjcXVpcmUgYSBOTCBsb2NrIGJlY2F1c2UgZ2ZzIHJlcXVpcmVzIHRoZSB2YWx1ZSBibG9jayB0byByZW1haW4KLSAgIGludGFjdCBvbiB0aGUgcmVzb3VyY2Ugd2hpbGUgdGhlIGx2YiBpcyAiaGVsZCIgZXZlbiBpZiBpdCdzIGhvbGRpbmcgbm8gbG9ja3MKLSAgIG9uIHRoZSByZXNvdXJjZS4gKi8KLQotaW50IGdkbG1faG9sZF9sdmIodm9pZCAqbG9jaywgY2hhciAqKmx2YnApCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2RsbV9hZGRfbHZiKGxwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCSpsdmJwID0gbHAtPmx2YjsKLQotCWVycm9yID0gaG9sZF9udWxsX2xvY2sobHApOwotCWlmIChlcnJvcikKLQkJZ2RsbV9kZWxfbHZiKGxwKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZGxtX3VuaG9sZF9sdmIodm9pZCAqbG9jaywgY2hhciAqbHZiKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQotCXVuaG9sZF9udWxsX2xvY2sobHApOwotCWdkbG1fZGVsX2x2YihscCk7Ci19Ci0KLXZvaWQgZ2RsbV9zdWJtaXRfZGVsYXllZChzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAsICpzYWZlOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxwLCBzYWZlLCAmbHMtPmRlbGF5ZWQsIGRlbGF5X2xpc3QpIHsKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQlsaXN0X2FkZF90YWlsKCZscC0+ZGVsYXlfbGlzdCwgJmxzLT5zdWJtaXQpOwotCX0KLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCXdha2VfdXAoJmxzLT50aHJlYWRfd2FpdCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaCBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5OGU3Yy4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2tfZGxtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBMT0NLX0RMTV9ET1RfSAotI2RlZmluZSBMT0NLX0RMTV9ET1RfSAotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgva29iamVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbG0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbG1fcGxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KLQotLyoKLSAqIEludGVybmFsbHksIHdlIHByZWZpeCB0aGluZ3Mgd2l0aCBnZGxtXyBhbmQgR0RMTV8gKGZvciBnZnMtZGxtKSBzaW5jZSBhCi0gKiBwcmVmaXggb2YgbG9ja19kbG1fIGdldHMgYXdrd2FyZC4gIEV4dGVybmFsbHksIEdGUyByZWZlcnMgdG8gdGhpcyBtb2R1bGUKLSAqIGFzICJsb2NrX2RsbSIuCi0gKi8KLQotI2RlZmluZSBHRExNX1NUUk5BTUVfQllURVMJMjQKLSNkZWZpbmUgR0RMTV9MVkJfU0laRQkJMzIKLSNkZWZpbmUgR0RMTV9EUk9QX0NPVU5UCQkwCi0jZGVmaW5lIEdETE1fRFJPUF9QRVJJT0QJNjAKLSNkZWZpbmUgR0RMTV9OQU1FX0xFTgkJMTI4Ci0KLS8qIEdGUyB1c2VzIDEyIGJ5dGVzIHRvIGlkZW50aWZ5IGEgcmVzb3VyY2UgKDMyIGJpdCB0eXBlICsgNjQgYml0IG51bWJlcikuCi0gICBXZSBzcHJpbnRmIHRoZXNlIG51bWJlcnMgaW50byBhIDI0IGJ5dGUgc3RyaW5nIG9mIGhleCB2YWx1ZXMgdG8gbWFrZSB0aGVtCi0gICBodW1hbi1yZWFkYWJsZSAodG8gbWFrZSBkZWJ1Z2dpbmcgc2ltcGxlci4pICovCi0KLXN0cnVjdCBnZGxtX3N0cm5hbWUgewotCXVuc2lnbmVkIGNoYXIJCW5hbWVbR0RMTV9TVFJOQU1FX0JZVEVTXTsKLQl1bnNpZ25lZCBzaG9ydAkJbmFtZWxlbjsKLX07Ci0KLWVudW0gewotCURGTF9CTE9DS19MT0NLUwkJPSAwLAotCURGTF9TUEVDVEFUT1IJCT0gMSwKLQlERkxfV0lUSERSQVcJCT0gMiwKLX07Ci0KLXN0cnVjdCBnZGxtX2xzIHsKLQl1MzIJCWlkOwotCWludAkJCWppZDsKLQlpbnQJCQlmaXJzdDsKLQlpbnQJCQlmaXJzdF9kb25lOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCXN0cnVjdCBrb2JqZWN0CQlrb2JqOwotCWNoYXIJCQljbHVzdGVybmFtZVtHRExNX05BTUVfTEVOXTsKLQljaGFyCQkJZnNuYW1lW0dETE1fTkFNRV9MRU5dOwotCWludAkJCWZzZmxhZ3M7Ci0JZGxtX2xvY2tzcGFjZV90CQkqZGxtX2xvY2tzcGFjZTsKLQlsbV9jYWxsYmFja190CQlmc2NiOwotCXN0cnVjdCBnZnMyX3NiZAkJKnNkcDsKLQlpbnQJCQlyZWNvdmVyX2ppZDsKLQlpbnQJCQlyZWNvdmVyX2ppZF9kb25lOwotCWludAkJCXJlY292ZXJfamlkX3N0YXR1czsKLQlzcGlubG9ja190CQlhc3luY19sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJZGVsYXllZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXN1Ym1pdDsKLQl1MzIJCWFsbF9sb2Nrc19jb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NvbnRyb2w7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJdGhyZWFkX3dhaXQ7Ci19OwotCi1lbnVtIHsKLQlMRkxfTk9CTE9DSwkJPSAwLAotCUxGTF9OT0NBQ0hFCQk9IDEsCi0JTEZMX0RMTV9VTkxPQ0sJCT0gMiwKLQlMRkxfRExNX0NBTkNFTAkJPSAzLAotCUxGTF9TWU5DX0xWQgkJPSA0LAotCUxGTF9GT1JDRV9QUk9NT1RFCT0gNSwKLQlMRkxfUkVSRVFVRVNUCQk9IDYsCi0JTEZMX0FDVElWRQkJPSA3LAotCUxGTF9JTkxPQ0sJCT0gOCwKLQlMRkxfQ0FOQ0VMCQk9IDksCi0JTEZMX05PQkFTVAkJPSAxMCwKLQlMRkxfSEVBRFFVRQkJPSAxMSwKLQlMRkxfVU5MT0NLX0RFTEVURQk9IDEyLAotCUxGTF9BU1RfV0FJVAkJPSAxMywKLX07Ci0KLXN0cnVjdCBnZGxtX2xvY2sgewotCXN0cnVjdCBnZGxtX2xzCQkqbHM7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lCWxvY2tuYW1lOwotCXN0cnVjdCBnZGxtX3N0cm5hbWUJc3RybmFtZTsKLQljaGFyCQkJKmx2YjsKLQlzdHJ1Y3QgZGxtX2xrc2IJCWxrc2I7Ci0KLQlzMTYJCQljdXI7Ci0JczE2CQkJcmVxOwotCXMxNgkJCXByZXZfcmVxOwotCXUzMgkJCWxrZjsJCS8qIGRsbSBmbGFncyBETE1fTEtGXyAqLwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG9ja19kbG0gZmxhZ3MgTEZMXyAqLwotCi0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheV9saXN0OwkvKiBkZWxheWVkICovCi0Jc3RydWN0IGdkbG1fbG9jawkqaG9sZF9udWxsOwkvKiBOTCBsb2NrIGZvciBob2xkX2x2YiAqLwotfTsKLQotI2RlZmluZSBnZGxtX2Fzc2VydChhc3NlcnRpb24sIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICh1bmxpa2VseSghKGFzc2VydGlvbikpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXByaW50ayhLRVJOX0VNRVJHICJsb2NrX2RsbTogZmF0YWwgYXNzZXJ0aW9uIGZhaWxlZCBcIiVzXCJcbiIgXAotCQkJCSAgImxvY2tfZGxtOiAgIiBmbXQgIlxuIiwgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJICAjYXNzZXJ0aW9uLCAjI2FyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJQlVHKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbG9nX3ByaW50KGxldiwgZm10LCBhcmcuLi4pIHByaW50ayhsZXYgImxvY2tfZGxtOiAiIGZtdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBsb2dfaW5mbyhmbXQsIGFyZy4uLikgIGxvZ19wcmludChLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmcpCi0jZGVmaW5lIGxvZ19lcnJvcihmbXQsIGFyZy4uLikgbG9nX3ByaW50KEtFUk5fRVJSICwgZm10ICwgIyMgYXJnKQotI2lmZGVmIExPQ0tfRExNX0xPR19ERUJVRwotI2RlZmluZSBsb2dfZGVidWcoZm10LCBhcmcuLi4pIGxvZ19wcmludChLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJnKQotI2Vsc2UKLSNkZWZpbmUgbG9nX2RlYnVnKGZtdCwgYXJnLi4uKQotI2VuZGlmCi0KLS8qIHN5c2ZzLmMgKi8KLQotaW50IGdkbG1fc3lzZnNfaW5pdCh2b2lkKTsKLXZvaWQgZ2RsbV9zeXNmc19leGl0KHZvaWQpOwotaW50IGdkbG1fa29iamVjdF9zZXR1cChzdHJ1Y3QgZ2RsbV9scyAqLCBzdHJ1Y3Qga29iamVjdCAqKTsKLXZvaWQgZ2RsbV9rb2JqZWN0X3JlbGVhc2Uoc3RydWN0IGdkbG1fbHMgKik7Ci0KLS8qIHRocmVhZC5jICovCi0KLWludCBnZGxtX2luaXRfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqKTsKLXZvaWQgZ2RsbV9yZWxlYXNlX3RocmVhZHMoc3RydWN0IGdkbG1fbHMgKik7Ci0KLS8qIGxvY2suYyAqLwotCi12b2lkIGdkbG1fc3VibWl0X2RlbGF5ZWQoc3RydWN0IGdkbG1fbHMgKik7Ci11bnNpZ25lZCBpbnQgZ2RsbV9kb19sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKik7Ci0KLWludCBnZGxtX2dldF9sb2NrKHZvaWQgKiwgc3RydWN0IGxtX2xvY2tuYW1lICosIHZvaWQgKiopOwotdm9pZCBnZGxtX3B1dF9sb2NrKHZvaWQgKik7Ci11bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci11bnNpZ25lZCBpbnQgZ2RsbV91bmxvY2sodm9pZCAqLCB1bnNpZ25lZCBpbnQpOwotdm9pZCBnZGxtX2NhbmNlbCh2b2lkICopOwotaW50IGdkbG1faG9sZF9sdmIodm9pZCAqLCBjaGFyICoqKTsKLXZvaWQgZ2RsbV91bmhvbGRfbHZiKHZvaWQgKiwgY2hhciAqKTsKLQotLyogbW91bnQuYyAqLwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2RsbV9vcHM7Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21haW4uYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWEwM2E3Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbG9ja19kbG0odm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY2tfZGxtOiAgY2FuJ3QgcmVnaXN0ZXIgcHJvdG9jb2w6ICVkXG4iLAotCQkgICAgICAgZXJyb3IpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JZXJyb3IgPSBnZGxtX3N5c2ZzX2luaXQoKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90bygmZ2RsbV9vcHMpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiTG9ja19ETE0gKGJ1aWx0ICVzICVzKSBpbnN0YWxsZWRcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2xvY2tfZGxtKHZvaWQpCi17Ci0JZ2RsbV9zeXNmc19leGl0KCk7Ci0JZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90bygmZ2RsbV9vcHMpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X2xvY2tfZGxtKTsKLW1vZHVsZV9leGl0KGV4aXRfbG9ja19kbG0pOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkdGUyBETE0gTG9ja2luZyBNb2R1bGUiKTsKLU1PRFVMRV9BVVRIT1IoIlJlZCBIYXQsIEluYy4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWE3ZWI2Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbW91bnQuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgZ2RsbV9vcHM7Ci0KLQotc3RhdGljIHN0cnVjdCBnZGxtX2xzICppbml0X2dkbG0obG1fY2FsbGJhY2tfdCBjYiwgc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQkJIGludCBmbGFncywgY2hhciAqdGFibGVfbmFtZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHM7Ci0JY2hhciBidWZbMjU2XSwgKnA7Ci0KLQlscyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZGxtX2xzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFscykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlscy0+ZnNjYiA9IGNiOwotCWxzLT5zZHAgPSBzZHA7Ci0JbHMtPmZzZmxhZ3MgPSBmbGFnczsKLQlzcGluX2xvY2tfaW5pdCgmbHMtPmFzeW5jX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZscy0+ZGVsYXllZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxzLT5zdWJtaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxzLT50aHJlYWRfd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbHMtPndhaXRfY29udHJvbCk7Ci0JbHMtPmppZCA9IC0xOwotCi0Jc3RybmNweShidWYsIHRhYmxlX25hbWUsIDI1Nik7Ci0JYnVmWzI1NV0gPSAnXDAnOwotCi0JcCA9IHN0cmNocihidWYsICc6Jyk7Ci0JaWYgKCFwKSB7Ci0JCWxvZ19pbmZvKCJpbnZhbGlkIHRhYmxlX25hbWUgXCIlc1wiIiwgdGFibGVfbmFtZSk7Ci0JCWtmcmVlKGxzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCSpwID0gJ1wwJzsKLQlwKys7Ci0KLQlzdHJuY3B5KGxzLT5jbHVzdGVybmFtZSwgYnVmLCBHRExNX05BTUVfTEVOKTsKLQlzdHJuY3B5KGxzLT5mc25hbWUsIHAsIEdETE1fTkFNRV9MRU4pOwotCi0JcmV0dXJuIGxzOwotfQotCi1zdGF0aWMgaW50IG1ha2VfYXJncyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmRhdGFfYXJnLCBpbnQgKm5vZGlyKQotewotCWNoYXIgZGF0YVsyNTZdOwotCWNoYXIgKm9wdGlvbnMsICp4LCAqeTsKLQlpbnQgZXJyb3IgPSAwOwotCi0JbWVtc2V0KGRhdGEsIDAsIDI1Nik7Ci0Jc3RybmNweShkYXRhLCBkYXRhX2FyZywgMjU1KTsKLQotCWlmICghc3RybGVuKGRhdGEpKSB7Ci0JCWxvZ19lcnJvcigibm8gbW91bnQgb3B0aW9ucywgKHUpbW91bnQgaGVscGVycyBub3QgaW5zdGFsbGVkIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAob3B0aW9ucyA9IGRhdGE7ICh4ID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7Ci0JCWlmICghKngpCi0JCQljb250aW51ZTsKLQotCQl5ID0gc3RyY2hyKHgsICc9Jyk7Ci0JCWlmICh5KQotCQkJKnkrKyA9IDA7Ci0KLQkJaWYgKCFzdHJjbXAoeCwgImppZCIpKSB7Ci0JCQlpZiAoIXkpIHsKLQkJCQlsb2dfZXJyb3IoIm5lZWQgYXJndW1lbnQgdG8gamlkIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+amlkKTsKLQotCQl9IGVsc2UgaWYgKCFzdHJjbXAoeCwgImZpcnN0IikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBmaXJzdCIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCAmbHMtPmZpcnN0KTsKLQotCQl9IGVsc2UgaWYgKCFzdHJjbXAoeCwgImlkIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBpZCIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCAmbHMtPmlkKTsKLQotCQl9IGVsc2UgaWYgKCFzdHJjbXAoeCwgIm5vZGlyIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBub2RpciIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNzY2FuZih5LCAiJXUiLCBub2Rpcik7Ci0KLQkJfSBlbHNlIHsKLQkJCWxvZ19lcnJvcigidW5rb253biBvcHRpb246ICVzIiwgeCk7Ci0JCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZGxtX21vdW50KGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCWxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQl1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCXN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzOwotCWludCBlcnJvciA9IC1FTk9NRU0sIG5vZGlyID0gMDsKLQotCWlmIChtaW5fbHZiX3NpemUgPiBHRExNX0xWQl9TSVpFKQotCQlnb3RvIG91dDsKLQotCWxzID0gaW5pdF9nZGxtKGNiLCBjYl9kYXRhLCBmbGFncywgdGFibGVfbmFtZSk7Ci0JaWYgKCFscykKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IG1ha2VfYXJncyhscywgaG9zdF9kYXRhLCAmbm9kaXIpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IGdkbG1faW5pdF90aHJlYWRzKGxzKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQllcnJvciA9IGdkbG1fa29iamVjdF9zZXR1cChscywgZnNrb2JqKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3RocmVhZDsKLQotCWVycm9yID0gZGxtX25ld19sb2Nrc3BhY2UobHMtPmZzbmFtZSwgc3RybGVuKGxzLT5mc25hbWUpLAotCQkJCSAgJmxzLT5kbG1fbG9ja3NwYWNlLAotCQkJCSAgRExNX0xTRkxfRlMgfCBETE1fTFNGTF9ORVdFWENMIHwKLQkJCQkgIChub2RpciA/IERMTV9MU0ZMX05PRElSIDogMCksCi0JCQkJICBHRExNX0xWQl9TSVpFKTsKLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCJkbG1fbmV3X2xvY2tzcGFjZSBlcnJvciAlZCIsIGVycm9yKTsKLQkJZ290byBvdXRfa29iajsKLQl9Ci0KLQlsb2Nrc3RydWN0LT5sc19qaWQgPSBscy0+amlkOwotCWxvY2tzdHJ1Y3QtPmxzX2ZpcnN0ID0gbHMtPmZpcnN0OwotCWxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSA9IGxzOwotCWxvY2tzdHJ1Y3QtPmxzX29wcyA9ICZnZGxtX29wczsKLQlsb2Nrc3RydWN0LT5sc19mbGFncyA9IDA7Ci0JbG9ja3N0cnVjdC0+bHNfbHZiX3NpemUgPSBHRExNX0xWQl9TSVpFOwotCXJldHVybiAwOwotCi1vdXRfa29iajoKLQlnZGxtX2tvYmplY3RfcmVsZWFzZShscyk7Ci1vdXRfdGhyZWFkOgotCWdkbG1fcmVsZWFzZV90aHJlYWRzKGxzKTsKLW91dF9mcmVlOgotCWtmcmVlKGxzKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fdW5tb3VudCh2b2lkICpsb2Nrc3BhY2UpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCi0JbG9nX2RlYnVnKCJ1bm1vdW50IGZsYWdzICVseCIsIGxzLT5mbGFncyk7Ci0KLQkvKiBGSVhNRTogc2VyaWFsaXplIHVubW91bnQgYW5kIHdpdGhkcmF3IGluIGNhc2UgdGhleQotCSAgIGhhcHBlbiBhdCBvbmNlLiAgQWxzbywgaWYgdW5tb3VudCBmb2xsb3dzIHdpdGhkcmF3LAotCSAgIHdhaXQgZm9yIHdpdGhkcmF3IHRvIGZpbmlzaC4gKi8KLQotCWlmICh0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKQotCQlnb3RvIG91dDsKLQotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLQlkbG1fcmVsZWFzZV9sb2Nrc3BhY2UobHMtPmRsbV9sb2Nrc3BhY2UsIDIpOwotCWdkbG1fcmVsZWFzZV90aHJlYWRzKGxzKTsKLQlCVUdfT04obHMtPmFsbF9sb2Nrc19jb3VudCk7Ci1vdXQ6Ci0Ja2ZyZWUobHMpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX3JlY292ZXJ5X2RvbmUodm9pZCAqbG9ja3NwYWNlLCB1bnNpZ25lZCBpbnQgamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZXNzYWdlKQotewotCWNoYXIgZW52X2ppZFsyMF07Ci0JY2hhciBlbnZfc3RhdHVzWzIwXTsKLQljaGFyICplbnZwW10gPSB7IGVudl9qaWQsIGVudl9zdGF0dXMsIE5VTEwgfTsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JbHMtPnJlY292ZXJfamlkX2RvbmUgPSBqaWQ7Ci0JbHMtPnJlY292ZXJfamlkX3N0YXR1cyA9IG1lc3NhZ2U7Ci0Jc3ByaW50ZihlbnZfamlkLCAiSklEPSVkIiwgamlkKTsKLQlzcHJpbnRmKGVudl9zdGF0dXMsICJSRUNPVkVSWT0lcyIsCi0JCW1lc3NhZ2UgPT0gTE1fUkRfU1VDQ0VTUyA/ICJEb25lIiA6ICJGYWlsZWQiKTsKLQlrb2JqZWN0X3VldmVudF9lbnYoJmxzLT5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fb3RoZXJzX21heV9tb3VudCh2b2lkICpsb2Nrc3BhY2UpCi17Ci0JY2hhciAqbWVzc2FnZSA9ICJGSVJTVE1PVU5UPURvbmUiOwotCWNoYXIgKmVudnBbXSA9IHsgbWVzc2FnZSwgTlVMTCB9OwotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlscy0+Zmlyc3RfZG9uZSA9IDE7Ci0Ja29iamVjdF91ZXZlbnRfZW52KCZscy0+a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwotfQotCi0vKiBVc2Vyc3BhY2UgZ2V0cyB0aGUgb2ZmbGluZSB1ZXZlbnQsIGJsb2NrcyBuZXcgZ2ZzIGxvY2tzIG9uCi0gICBvdGhlciBtb3VudGVycywgYW5kIGxldHMgdXMga25vdyAoc2V0cyBXSVRIRFJBVyBmbGFnKS4gIFRoZW4sCi0gICB1c2Vyc3BhY2UgbGVhdmVzIHRoZSBtb3VudCBncm91cCB3aGlsZSB3ZSBsZWF2ZSB0aGUgbG9ja3NwYWNlLiAqLwotCi1zdGF0aWMgdm9pZCBnZGxtX3dpdGhkcmF3KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0KLQlrb2JqZWN0X3VldmVudCgmbHMtPmtvYmosIEtPQkpfT0ZGTElORSk7Ci0KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobHMtPndhaXRfY29udHJvbCwKLQkJCQkgdGVzdF9iaXQoREZMX1dJVEhEUkFXLCAmbHMtPmZsYWdzKSk7Ci0KLQlkbG1fcmVsZWFzZV9sb2Nrc3BhY2UobHMtPmRsbV9sb2Nrc3BhY2UsIDIpOwotCWdkbG1fcmVsZWFzZV90aHJlYWRzKGxzKTsKLQlnZGxtX2tvYmplY3RfcmVsZWFzZShscyk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9wbG9jayh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X2xvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIG5hbWUtPmxuX251bWJlciwgZmlsZSwgY21kLCBmbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9wdW5sb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X3VubG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBmbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9wbG9ja19nZXQodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0JcmV0dXJuIGRsbV9wb3NpeF9nZXQobHMtPmRsbV9sb2Nrc3BhY2UsIG5hbWUtPmxuX251bWJlciwgZmlsZSwgZmwpOwotfQotCi1jb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wcyA9IHsKLQkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX2RsbSIsCi0JLmxtX21vdW50ID0gZ2RsbV9tb3VudCwKLQkubG1fb3RoZXJzX21heV9tb3VudCA9IGdkbG1fb3RoZXJzX21heV9tb3VudCwKLQkubG1fdW5tb3VudCA9IGdkbG1fdW5tb3VudCwKLQkubG1fd2l0aGRyYXcgPSBnZGxtX3dpdGhkcmF3LAotCS5sbV9nZXRfbG9jayA9IGdkbG1fZ2V0X2xvY2ssCi0JLmxtX3B1dF9sb2NrID0gZ2RsbV9wdXRfbG9jaywKLQkubG1fbG9jayA9IGdkbG1fbG9jaywKLQkubG1fdW5sb2NrID0gZ2RsbV91bmxvY2ssCi0JLmxtX3Bsb2NrID0gZ2RsbV9wbG9jaywKLQkubG1fcHVubG9jayA9IGdkbG1fcHVubG9jaywKLQkubG1fcGxvY2tfZ2V0ID0gZ2RsbV9wbG9ja19nZXQsCi0JLmxtX2NhbmNlbCA9IGdkbG1fY2FuY2VsLAotCS5sbV9ob2xkX2x2YiA9IGdkbG1faG9sZF9sdmIsCi0JLmxtX3VuaG9sZF9sdmIgPSBnZGxtX3VuaG9sZF9sdmIsCi0JLmxtX3JlY292ZXJ5X2RvbmUgPSBnZGxtX3JlY292ZXJ5X2RvbmUsCi0JLmxtX293bmVyID0gVEhJU19NT0RVTEUsCi19OwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliN2VkY2YuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9zeXNmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBzc2l6ZV90IHByb3RvX25hbWVfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZ2RsbV9vcHMubG1fcHJvdG9fbmFtZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsb2NrX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0Jc3NpemVfdCByZXQ7Ci0JaW50IHZhbCA9IDA7Ci0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSkKLQkJdmFsID0gMTsKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsb2NrX3N0b3JlKHN0cnVjdCBnZGxtX2xzICpscywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXNzaXplX3QgcmV0ID0gbGVuOwotCWludCB2YWw7Ci0KLQl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Ci0KLQlpZiAodmFsID09IDEpCi0JCXNldF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKTsKLQllbHNlIGlmICh2YWwgPT0gMCkgewotCQljbGVhcl9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKTsKLQkJZ2RsbV9zdWJtaXRfZGVsYXllZChscyk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3Qgd2l0aGRyYXdfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlzc2l6ZV90IHJldDsKLQlpbnQgdmFsID0gMDsKLQotCWlmICh0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKQotCQl2YWwgPSAxOwotCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3Qgd2l0aGRyYXdfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3NpemVfdCByZXQgPSBsZW47Ci0JaW50IHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKLQotCWlmICh2YWwgPT0gMSkKLQkJc2V0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpOwotCWVsc2UKLQkJcmV0ID0gLUVJTlZBTDsKLQl3YWtlX3VwKCZscy0+d2FpdF9jb250cm9sKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBpZF9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBscy0+aWQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBqaWRfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmppZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGZpcnN0X3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5maXJzdCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGZpcnN0X2RvbmVfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmZpcnN0X2RvbmUpOwotfQotCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0JbHMtPnJlY292ZXJfamlkID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwotCWxzLT5mc2NiKGxzLT5zZHAsIExNX0NCX05FRURfUkVDT1ZFUlksICZscy0+cmVjb3Zlcl9qaWQpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfZG9uZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+cmVjb3Zlcl9qaWRfZG9uZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RhdHVzX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZF9zdGF0dXMpOwotfQotCi1zdHJ1Y3QgZ2RsbV9hdHRyIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZGxtX2xzICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZ2RsbV9scyAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci19OwotCi0jZGVmaW5lIEdETE1fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIFwKLXN0YXRpYyBzdHJ1Y3QgZ2RsbV9hdHRyIGdkbG1fYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKLQotR0RMTV9BVFRSKHByb3RvX25hbWUsICAgICAwNDQ0LCBwcm90b19uYW1lX3Nob3csICAgICBOVUxMKTsKLUdETE1fQVRUUihibG9jaywgICAgICAgICAgMDY0NCwgYmxvY2tfc2hvdywgICAgICAgICAgYmxvY2tfc3RvcmUpOwotR0RMTV9BVFRSKHdpdGhkcmF3LCAgICAgICAwNjQ0LCB3aXRoZHJhd19zaG93LCAgICAgICB3aXRoZHJhd19zdG9yZSk7Ci1HRExNX0FUVFIoaWQsICAgICAgICAgICAgIDA0NDQsIGlkX3Nob3csICAgICAgICAgICAgIE5VTEwpOwotR0RMTV9BVFRSKGppZCwgICAgICAgICAgICAwNDQ0LCBqaWRfc2hvdywgICAgICAgICAgICBOVUxMKTsKLUdETE1fQVRUUihmaXJzdCwgICAgICAgICAgMDQ0NCwgZmlyc3Rfc2hvdywgICAgICAgICAgTlVMTCk7Ci1HRExNX0FUVFIoZmlyc3RfZG9uZSwgICAgIDA0NDQsIGZpcnN0X2RvbmVfc2hvdywgICAgIE5VTEwpOwotR0RMTV9BVFRSKHJlY292ZXIsICAgICAgICAwNjQ0LCByZWNvdmVyX3Nob3csICAgICAgICByZWNvdmVyX3N0b3JlKTsKLUdETE1fQVRUUihyZWNvdmVyX2RvbmUsICAgMDQ0NCwgcmVjb3Zlcl9kb25lX3Nob3csICAgTlVMTCk7Ci1HRExNX0FUVFIocmVjb3Zlcl9zdGF0dXMsIDA0NDQsIHJlY292ZXJfc3RhdHVzX3Nob3csIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ2RsbV9hdHRyc1tdID0gewotCSZnZGxtX2F0dHJfcHJvdG9fbmFtZS5hdHRyLAotCSZnZGxtX2F0dHJfYmxvY2suYXR0ciwKLQkmZ2RsbV9hdHRyX3dpdGhkcmF3LmF0dHIsCi0JJmdkbG1fYXR0cl9pZC5hdHRyLAotCSZnZGxtX2F0dHJfamlkLmF0dHIsCi0JJmdkbG1fYXR0cl9maXJzdC5hdHRyLAotCSZnZGxtX2F0dHJfZmlyc3RfZG9uZS5hdHRyLAotCSZnZGxtX2F0dHJfcmVjb3Zlci5hdHRyLAotCSZnZGxtX2F0dHJfcmVjb3Zlcl9kb25lLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyX3N0YXR1cy5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3NpemVfdCBnZGxtX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdkbG1fbHMsIGtvYmopOwotCXN0cnVjdCBnZGxtX2F0dHIgKmEgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGdkbG1fYXR0ciwgYXR0cik7Ci0JcmV0dXJuIGEtPnNob3cgPyBhLT5zaG93KGxzLCBidWYpIDogMDsKLX0KLQotc3RhdGljIHNzaXplX3QgZ2RsbV9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdkbG1fbHMsIGtvYmopOwotCXN0cnVjdCBnZGxtX2F0dHIgKmEgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGdkbG1fYXR0ciwgYXR0cik7Ci0JcmV0dXJuIGEtPnN0b3JlID8gYS0+c3RvcmUobHMsIGJ1ZiwgbGVuKSA6IGxlbjsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZ2RsbV9hdHRyX29wcyA9IHsKLQkuc2hvdyAgPSBnZGxtX2F0dHJfc2hvdywKLQkuc3RvcmUgPSBnZGxtX2F0dHJfc3RvcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBnZGxtX2t0eXBlID0gewotCS5kZWZhdWx0X2F0dHJzID0gZ2RsbV9hdHRycywKLQkuc3lzZnNfb3BzICAgICA9ICZnZGxtX2F0dHJfb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBrc2V0ICpnZGxtX2tzZXQ7Ci0KLWludCBnZGxtX2tvYmplY3Rfc2V0dXAoc3RydWN0IGdkbG1fbHMgKmxzLCBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKQotewotCWludCBlcnJvcjsKLQotCWxzLT5rb2JqLmtzZXQgPSBnZGxtX2tzZXQ7Ci0JZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmbHMtPmtvYmosICZnZGxtX2t0eXBlLCBmc2tvYmosCi0JCQkJICAgICAibG9ja19tb2R1bGUiKTsKLQlpZiAoZXJyb3IpCi0JCWxvZ19lcnJvcigiY2FuJ3QgcmVnaXN0ZXIga29iaiAlZCIsIGVycm9yKTsKLQlrb2JqZWN0X3VldmVudCgmbHMtPmtvYmosIEtPQkpfQUREKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZGxtX2tvYmplY3RfcmVsZWFzZShzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Ja29iamVjdF9wdXQoJmxzLT5rb2JqKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCSAgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0gICAgICAgIHN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0gICAgICAgIGFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lczolcyIsIGxzLT5jbHVzdGVybmFtZSwgbHMtPmZzbmFtZSk7Ci0gICAgICAgIGFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tQUk9UTz1sb2NrX2RsbSIpOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZ2RsbV91ZXZlbnRfb3BzID0gewotCS51ZXZlbnQgPSBnZGxtX3VldmVudCwKLX07Ci0KLQotaW50IGdkbG1fc3lzZnNfaW5pdCh2b2lkKQotewotCWdkbG1fa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImxvY2tfZGxtIiwgJmdkbG1fdWV2ZW50X29wcywga2VybmVsX2tvYmopOwotCWlmICghZ2RsbV9rc2V0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4gbm90IGNyZWF0ZSBrc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBnZGxtX3N5c2ZzX2V4aXQodm9pZCkKLXsKLQlrc2V0X3VucmVnaXN0ZXIoZ2RsbV9rc2V0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vdGhyZWFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ODIzZWYuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1zdGF0aWMgaW5saW5lIGludCBub193b3JrKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JcmV0ID0gbGlzdF9lbXB0eSgmbHMtPnN1Ym1pdCk7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV90aHJlYWQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSAoc3RydWN0IGdkbG1fbHMgKikgZGF0YTsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IE5VTEw7Ci0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobHMtPnRocmVhZF93YWl0LAotCQkJCSFub193b3JrKGxzKSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JCWlmICghbGlzdF9lbXB0eSgmbHMtPnN1Ym1pdCkpIHsKLQkJCWxwID0gbGlzdF9lbnRyeShscy0+c3VibWl0Lm5leHQsIHN0cnVjdCBnZGxtX2xvY2ssCi0JCQkJCWRlbGF5X2xpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQkJc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQkJCWdkbG1fZG9fbG9jayhscCk7Ci0JCQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQkJfQotCQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgZ2RsbV9pbml0X3RocmVhZHMoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlpbnQgZXJyb3I7Ci0KLQlwID0ga3RocmVhZF9ydW4oZ2RsbV90aHJlYWQsIGxzLCAibG9ja19kbG0iKTsKLQllcnJvciA9IElTX0VSUihwKTsKLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCJjYW4ndCBzdGFydCBsb2NrX2RsbSB0aHJlYWQgJWQiLCBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JbHMtPnRocmVhZCA9IHA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBnZGxtX3JlbGVhc2VfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Ja3RocmVhZF9zdG9wKGxzLT50aHJlYWQpOwotfQotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCBhZDMwNTg1Li45ODkxOGE3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCisrKyBiL2ZzL2dmczIvbG9nLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvcHMuYyBiL2ZzL2dmczIvbG9wcy5jCmluZGV4IDQzOTBmNmYuLjgwZTRmNWYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9wcy5jCisrKyBiL2ZzL2dmczIvbG9wcy5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggN2NhY2ZkZS4uYTY4OTJlZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0yMyw2ICsyMiwxMiBAQAogI2luY2x1ZGUgInN5cy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJnbG9jay5oIgorI2luY2x1ZGUgInF1b3RhLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgcWRfc2hyaW5rZXIgPSB7CisJLnNocmluayA9IGdmczJfc2hyaW5rX3FkX21lbW9yeSwKKwkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAorfTsKIAogc3RhdGljIHZvaWQgZ2ZzMl9pbml0X2lub2RlX29uY2Uodm9pZCAqZm9vKQogewpAQCAtNDEsOCArNDYsNiBAQAogCUlOSVRfSExJU1RfTk9ERSgmZ2wtPmdsX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZnbC0+Z2xfc3Bpbik7CiAJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9ob2xkZXJzKTsKLQlnbC0+Z2xfbHZiID0gTlVMTDsKLQlhdG9taWNfc2V0KCZnbC0+Z2xfbHZiX2NvdW50LCAwKTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9haWxfbGlzdCk7CiAJYXRvbWljX3NldCgmZ2wtPmdsX2FpbF9jb3VudCwgMCk7CkBAIC0xMDAsNiArMTAzLDggQEAKIAlpZiAoIWdmczJfcXVvdGFkX2NhY2hlcCkKIAkJZ290byBmYWlsOwogCisJcmVnaXN0ZXJfc2hyaW5rZXIoJnFkX3Nocmlua2VyKTsKKwogCWVycm9yID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMl9mc190eXBlKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKQEAgLTExNyw2ICsxMjIsNyBAQAogZmFpbF91bnJlZ2lzdGVyOgogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMl9mc190eXBlKTsKIGZhaWw6CisJdW5yZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOwogCWdmczJfZ2xvY2tfZXhpdCgpOwogCiAJaWYgKGdmczJfcXVvdGFkX2NhY2hlcCkKQEAgLTE0NSw2ICsxNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9nZnMyX2ZzKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOwogCWdmczJfZ2xvY2tfZXhpdCgpOwogCWdmczJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmMgYi9mcy9nZnMyL21ldGFfaW8uYwppbmRleCAwOTg1MzYyLi44ZDZmMTMyIDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uYworKysgYi9mcy9nZnMyL21ldGFfaW8uYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTkwLDI3ICs4OSw2IEBACiB9CiAKIC8qKgotICogZ2ZzMl9tZXRhX2ludmFsIC0gSW52YWxpZGF0ZSBhbGwgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKi8KLQotdm9pZCBnZnMyX21ldGFfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKLQlzdHJ1Y3QgaW5vZGUgKmFzcGFjZSA9IGdsLT5nbF9hc3BhY2U7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7Ci0KLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOwotCi0JYXRvbWljX2luYygmYXNwYWNlLT5pX3dyaXRlY291bnQpOwotCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOwotCWF0b21pY19kZWMoJmFzcGFjZS0+aV93cml0ZWNvdW50KTsKLQotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIW1hcHBpbmctPm5ycGFnZXMpOwotfQotCi0vKioKICAqIGdmczJfbWV0YV9zeW5jIC0gU3luYyBhbGwgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawogICogQGdsOiBUaGUgZ2xvY2sKICAqCmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uaCBiL2ZzL2dmczIvbWV0YV9pby5oCmluZGV4IGIxYTVmMzYuLmRlMjcwYzIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5oCisrKyBiL2ZzL2dmczIvbWV0YV9pby5oCkBAIC00MCw3ICs0MCw2IEBACiBzdHJ1Y3QgaW5vZGUgKmdmczJfYXNwYWNlX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfYXNwYWNlX3B1dChzdHJ1Y3QgaW5vZGUgKmFzcGFjZSk7CiAKLXZvaWQgZ2ZzMl9tZXRhX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiB2b2lkIGdmczJfbWV0YV9zeW5jKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAKIHN0cnVjdCBidWZmZXJfaGVhZCAqZ2ZzMl9tZXRhX25ldyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHU2NCBibGtubyk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21vdW50LmMgYi9mcy9nZnMyL21vdW50LmMKaW5kZXggM2NiMGE0NC4uZjdlODUyNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tb3VudC5jCisrKyBiL2ZzL2dmczIvbW91bnQuYwpAQCAtMTIsMTIgKzEyLDExIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKLSNpbmNsdWRlICJtb3VudC5oIgorI2luY2x1ZGUgInN1cGVyLmgiCiAjaW5jbHVkZSAic3lzLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogCkBAIC0zNywxMSArMzYsMTUgQEAKIAlPcHRfcXVvdGFfb2ZmLAogCU9wdF9xdW90YV9hY2NvdW50LAogCU9wdF9xdW90YV9vbiwKKwlPcHRfcXVvdGEsCisJT3B0X25vcXVvdGEsCiAJT3B0X3N1aWRkaXIsCiAJT3B0X25vc3VpZGRpciwKIAlPcHRfZGF0YV93cml0ZWJhY2ssCiAJT3B0X2RhdGFfb3JkZXJlZCwKIAlPcHRfbWV0YSwKKwlPcHRfZGlzY2FyZCwKKwlPcHRfbm9kaXNjYXJkLAogCU9wdF9lcnIsCiB9OwogCkBAIC02MSwxMSArNjQsMTUgQEAKIAl7T3B0X3F1b3RhX29mZiwgInF1b3RhPW9mZiJ9LAogCXtPcHRfcXVvdGFfYWNjb3VudCwgInF1b3RhPWFjY291bnQifSwKIAl7T3B0X3F1b3RhX29uLCAicXVvdGE9b24ifSwKKwl7T3B0X3F1b3RhLCAicXVvdGEifSwKKwl7T3B0X25vcXVvdGEsICJub3F1b3RhIn0sCiAJe09wdF9zdWlkZGlyLCAic3VpZGRpciJ9LAogCXtPcHRfbm9zdWlkZGlyLCAibm9zdWlkZGlyIn0sCiAJe09wdF9kYXRhX3dyaXRlYmFjaywgImRhdGE9d3JpdGViYWNrIn0sCiAJe09wdF9kYXRhX29yZGVyZWQsICJkYXRhPW9yZGVyZWQifSwKIAl7T3B0X21ldGEsICJtZXRhIn0sCisJe09wdF9kaXNjYXJkLCAiZGlzY2FyZCJ9LAorCXtPcHRfbm9kaXNjYXJkLCAibm9kaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9CiB9OwogCkBAIC03NywxMDEgKzg0LDQ2IEBACiAgKiBSZXR1cm46IGVycm5vCiAgKi8KIAotaW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZGF0YV9hcmcsIGludCByZW1vdW50KQoraW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYXJncyAqYXJncywgY2hhciAqb3B0aW9ucykKIHsKLQlzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzID0gJnNkcC0+c2RfYXJnczsKLQljaGFyICpkYXRhID0gZGF0YV9hcmc7Ci0JY2hhciAqb3B0aW9ucywgKm8sICp2OwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAoIXJlbW91bnQpIHsKLQkJLyogIFNldCBzb21lIGRlZmF1bHRzICAqLwotCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKLQkJYXJncy0+YXJfZGF0YSA9IEdGUzJfREFUQV9ERUZBVUxUOwotCX0KKwljaGFyICpvOworCWludCB0b2tlbjsKKwlzdWJzdHJpbmdfdCB0bXBbTUFYX09QVF9BUkdTXTsKIAogCS8qIFNwbGl0IHRoZSBvcHRpb25zIGludG8gdG9rZW5zIHdpdGggdGhlICIsIiBjaGFyYWN0ZXIgYW5kCiAJICAgcHJvY2VzcyB0aGVtICovCiAKLQlmb3IgKG9wdGlvbnMgPSBkYXRhOyAobyA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSk7ICkgewotCQlpbnQgdG9rZW47Ci0JCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwotCi0JCWlmICghKm8pCisJd2hpbGUgKDEpIHsKKwkJbyA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKTsKKwkJaWYgKG8gPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoKm8gPT0gJ1wwJykKIAkJCWNvbnRpbnVlOwogCiAJCXRva2VuID0gbWF0Y2hfdG9rZW4obywgdG9rZW5zLCB0bXApOwogCQlzd2l0Y2ggKHRva2VuKSB7CiAJCWNhc2UgT3B0X2xvY2twcm90bzoKLQkJCXYgPSBtYXRjaF9zdHJkdXAoJnRtcFswXSk7Ci0JCQlpZiAoIXYpIHsKLQkJCQlmc19pbmZvKHNkcCwgIm5vIG1lbW9yeSBmb3IgbG9ja3Byb3RvXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9sb2NrcHJvdG8pKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0JCQkKLQkJCXN0cm5jcHkoYXJncy0+YXJfbG9ja3Byb3RvLCB2LCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JCQlhcmdzLT5hcl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSA9IDA7Ci0JCQlrZnJlZSh2KTsKKwkJCW1hdGNoX3N0cmxjcHkoYXJncy0+YXJfbG9ja3Byb3RvLCAmdG1wWzBdLAorCQkJCSAgICAgIEdGUzJfTE9DS05BTUVfTEVOKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NrdGFibGU6Ci0JCQl2ID0gbWF0Y2hfc3RyZHVwKCZ0bXBbMF0pOwotCQkJaWYgKCF2KSB7Ci0JCQkJZnNfaW5mbyhzZHAsICJubyBtZW1vcnkgZm9yIGxvY2t0YWJsZVxuIik7Ci0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0X2Vycm9yOwotCQkJfQotCi0JCQlpZiAocmVtb3VudCAmJiBzdHJjbXAodiwgYXJncy0+YXJfbG9ja3RhYmxlKSkgewotCQkJCWtmcmVlKHYpOwotCQkJCWdvdG8gY2FudF9yZW1vdW50OwotCQkJfQotCi0JCQlzdHJuY3B5KGFyZ3MtPmFyX2xvY2t0YWJsZSwgdiwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCQkJYXJncy0+YXJfbG9ja3RhYmxlW0dGUzJfTE9DS05BTUVfTEVOIC0gMV0gID0gMDsKLQkJCWtmcmVlKHYpOworCQkJbWF0Y2hfc3RybGNweShhcmdzLT5hcl9sb2NrdGFibGUsICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2hvc3RkYXRhOgotCQkJdiA9IG1hdGNoX3N0cmR1cCgmdG1wWzBdKTsKLQkJCWlmICghdikgewotCQkJCWZzX2luZm8oc2RwLCAibm8gbWVtb3J5IGZvciBob3N0ZGF0YVxuIik7Ci0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0X2Vycm9yOwotCQkJfQotCi0JCQlpZiAocmVtb3VudCAmJiBzdHJjbXAodiwgYXJncy0+YXJfaG9zdGRhdGEpKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0KLQkJCXN0cm5jcHkoYXJncy0+YXJfaG9zdGRhdGEsIHYsIEdGUzJfTE9DS05BTUVfTEVOKTsKLQkJCWFyZ3MtPmFyX2hvc3RkYXRhW0dGUzJfTE9DS05BTUVfTEVOIC0gMV0gPSAwOwotCQkJa2ZyZWUodik7CisJCQltYXRjaF9zdHJsY3B5KGFyZ3MtPmFyX2hvc3RkYXRhLCAmdG1wWzBdLAorCQkJCSAgICAgIEdGUzJfTE9DS05BTUVfTEVOKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9zcGVjdGF0b3I6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfc3BlY3RhdG9yKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfc3BlY3RhdG9yID0gMTsKLQkJCXNkcC0+c2RfdmZzLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9pZ25vcmVfbG9jYWxfZnM6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfaWdub3JlX2xvY2FsX2ZzKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfaWdub3JlX2xvY2FsX2ZzID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NhbGZsb2NrczoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9sb2NhbGZsb2NrcykKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX2xvY2FsZmxvY2tzID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NhbGNhY2hpbmc6Ci0JCQlpZiAocmVtb3VudCAmJiAhYXJncy0+YXJfbG9jYWxjYWNoaW5nKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbG9jYWxjYWNoaW5nID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kZWJ1ZzoKQEAgLTE4MSwyNSArMTMzLDIzIEBACiAJCQlhcmdzLT5hcl9kZWJ1ZyA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdXBncmFkZToKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl91cGdyYWRlKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfdXBncmFkZSA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfYWNsOgogCQkJYXJncy0+YXJfcG9zaXhfYWNsID0gMTsKLQkJCXNkcC0+c2RfdmZzLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYWNsOgogCQkJYXJncy0+YXJfcG9zaXhfYWNsID0gMDsKLQkJCXNkcC0+c2RfdmZzLT5zX2ZsYWdzICY9IH5NU19QT1NJWEFDTDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9xdW90YV9vZmY6CisJCWNhc2UgT3B0X25vcXVvdGE6CiAJCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfT0ZGOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX2FjY291bnQ6CiAJCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfQUNDT1VOVDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9xdW90YV9vbjoKKwkJY2FzZSBPcHRfcXVvdGE6CiAJCQlhcmdzLT5hcl9xdW90YSA9IEdGUzJfUVVPVEFfT047CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfc3VpZGRpcjoKQEAgLTIxNSwyOSArMTY1LDIxIEBACiAJCQlhcmdzLT5hcl9kYXRhID0gR0ZTMl9EQVRBX09SREVSRUQ7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbWV0YToKLQkJCWlmIChyZW1vdW50ICYmIGFyZ3MtPmFyX21ldGEgIT0gMSkKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKIAkJCWFyZ3MtPmFyX21ldGEgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlhcmdzLT5hcl9kaXNjYXJkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub2Rpc2NhcmQ6CisJCQlhcmdzLT5hcl9kaXNjYXJkID0gMDsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9lcnI6CiAJCWRlZmF1bHQ6Ci0JCQlmc19pbmZvKHNkcCwgInVua25vd24gb3B0aW9uOiAlc1xuIiwgbyk7Ci0JCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dF9lcnJvcjsKKwkJCWZzX2luZm8oc2RwLCAiaW52YWxpZCBtb3VudCBvcHRpb246ICVzXG4iLCBvKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi1vdXRfZXJyb3I6Ci0JaWYgKGVycm9yKQotCQlmc19pbmZvKHNkcCwgImludmFsaWQgbW91bnQgb3B0aW9uKHMpXG4iKTsKLQotCWlmIChkYXRhICE9IGRhdGFfYXJnKQotCQlrZnJlZShkYXRhKTsKLQotCXJldHVybiBlcnJvcjsKLQotY2FudF9yZW1vdW50OgotCWZzX2luZm8oc2RwLCAiY2FuJ3QgcmVtb3VudCB3aXRoIG9wdGlvbiAlc1xuIiwgbyk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuaCBiL2ZzL2dmczIvbW91bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxMjg4YS4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL21vdW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9fTU9VTlRfRE9UX0hfXwotI2RlZmluZSBfX01PVU5UX0RPVF9IX18KLQotc3RydWN0IGdmczJfc2JkOwotCi1pbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpkYXRhX2FyZywgaW50IHJlbW91bnQpOwotCi0jZW5kaWYgLyogX19NT1VOVF9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19hZGRyZXNzLmMgYi9mcy9nZnMyL29wc19hZGRyZXNzLmMKaW5kZXggNGRkYWI2Ny4uYTZkZGUxNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCisrKyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC00NDIsNiArNDQxLDcgQEAKIAkgKi8KIAlpZiAodW5saWtlbHkocGFnZS0+aW5kZXgpKSB7CiAJCXplcm9fdXNlcihwYWdlLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTA5Niw2ICsxMDk2LDcgQEAKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAogCS5kaXJlY3RfSU8gPSBnZnMyX2RpcmVjdF9JTywKIAkubWlncmF0ZXBhZ2UgPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX29yZGVyZWRfYW9wcyA9IHsKQEAgLTExMTEsNiArMTExMiw3IEBACiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKIAkuZGlyZWN0X0lPID0gZ2ZzMl9kaXJlY3RfSU8sCiAJLm1pZ3JhdGVwYWdlID0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9qZGF0YV9hb3BzID0gewpAQCAtMTEyNSw2ICsxMTI3LDcgQEAKIAkuYm1hcCA9IGdmczJfYm1hcCwKIAkuaW52YWxpZGF0ZXBhZ2UgPSBnZnMyX2ludmFsaWRhdGVwYWdlLAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHZvaWQgZ2ZzMl9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMgYi9mcy9nZnMyL29wc19kZW50cnkuYwppbmRleCBjMmFkMzYzLi4wMjJjNjZjIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19kZW50cnkuYworKysgYi9mcy9nZnMyL29wc19kZW50cnkuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMTA4LDcgKzEwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBnZnMyX2RvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZ2ZzMl9kb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBnZnMyX2RyZXZhbGlkYXRlLAogCS5kX2hhc2ggPSBnZnMyX2RoYXNoLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKaW5kZXggN2ZkZWIxNC4uOTIwMGVmMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKKysrIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZpbGUuYyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwppbmRleCA5M2ZlNDFiLi4zYjllOGRlIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19maWxlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZmlsZS5jCkBAIC0yMCw5ICsyMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbG1fcGxvY2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTM1NCw3ICszNTUsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJc2V0X2JpdChHTEZfRElSVFksICZpcC0+aV9nbC0+Z2xfZmxhZ3MpOwogCXNldF9iaXQoR0lGX1NXX1BBR0VELCAmaXAtPmlfZmxhZ3MpOworCiAJcmV0ID0gZ2ZzMl93cml0ZV9hbGxvY19yZXF1aXJlZChpcCwgcG9zLCBQQUdFX0NBQ0hFX1NJWkUsICZhbGxvY19yZXF1aXJlZCk7CiAJaWYgKHJldCB8fCAhYWxsb2NfcmVxdWlyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTU2MCw1NyArNTYzLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCisKIC8qKgogICogZ2ZzMl9zZXRsZWFzZSAtIGFjcXVpcmUvcmVsZWFzZSBhIGZpbGUgbGVhc2UKICAqIEBmaWxlOiB0aGUgZmlsZSBwb2ludGVyCiAgKiBAYXJnOiBsZWFzZSB0eXBlCiAgKiBAZmw6IGZpbGUgbG9jawogICoKKyAqIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGVuZm9yY2UgYSBsZWFzZSBhY3Jvc3MgdGhlIHdob2xlCisgKiBjbHVzdGVyOyB1bnRpbCB3ZSBkbywgZGlzYWJsZSBsZWFzZXMgKGJ5IGp1c3QgcmV0dXJuaW5nIC1FSU5WQUwpLAorICogdW5sZXNzIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyByZXF1ZXN0ZWQgcHVyZWx5IGxvY2FsIGxvY2tpbmcuCisgKgogICogUmV0dXJuczogZXJybm8KICAqLwogCiBzdGF0aWMgaW50IGdmczJfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmwpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGVuZm9yY2UgYSBsZWFzZSBhY3Jvc3MgdGhlIHdob2xlCi0JICogY2x1c3RlcjsgdW50aWwgd2UgZG8sIGRpc2FibGUgbGVhc2VzIChieSBqdXN0IHJldHVybmluZyAtRUlOVkFMKSwKLQkgKiB1bmxlc3MgdGhlIGFkbWluaXN0cmF0b3IgaGFzIHJlcXVlc3RlZCBwdXJlbHkgbG9jYWwgbG9ja2luZy4KLQkgKi8KLQlpZiAoIXNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGdlbmVyaWNfc2V0bGVhc2UoZmlsZSwgYXJnLCBmbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9sbV9wbG9ja19nZXQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3Bsb2NrX2dldCgKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBmbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcGxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcGxvY2soCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgY21kLCBmbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcHVubG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1bmxvY2soCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgZmwpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoqCkBAIC02MjYsOSArNTk2LDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUgbmFtZSA9Ci0JCXsgLmxuX251bWJlciA9IGlwLT5pX25vX2FkZHIsCi0JCSAgLmxuX3R5cGUgPSBMTV9UWVBFX1BMT0NLIH07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKIAogCWlmICghKGZsLT5mbF9mbGFncyAmIEZMX1BPU0lYKSkKIAkJcmV0dXJuIC1FTk9MQ0s7CkBAIC02NDAsMTIgKzYwOCwxNCBAQAogCQljbWQgPSBGX1NFVExLOwogCQlmbC0+ZmxfdHlwZSA9IEZfVU5MQ0s7CiAJfQorCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCXJldHVybiAtRUlPOwogCWlmIChJU19HRVRMSyhjbWQpKQotCQlyZXR1cm4gZ2ZzMl9sbV9wbG9ja19nZXQoc2RwLCAmbmFtZSwgZmlsZSwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X2dldChscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBmbCk7CiAJZWxzZSBpZiAoZmwtPmZsX3R5cGUgPT0gRl9VTkxDSykKLQkJcmV0dXJuIGdmczJfbG1fcHVubG9jayhzZHAsICZuYW1lLCBmaWxlLCBmbCk7CisJCXJldHVybiBkbG1fcG9zaXhfdW5sb2NrKGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGZsKTsKIAllbHNlCi0JCXJldHVybiBnZnMyX2xtX3Bsb2NrKHNkcCwgJm5hbWUsIGZpbGUsIGNtZCwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X2xvY2sobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgY21kLCBmbCk7CiB9CiAKIHN0YXRpYyBpbnQgZG9fZmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQpAQCAtNzMyLDcgKzcwMiw3IEBACiAJfQogfQogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHMgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5sbHNlZWsJCT0gZ2ZzMl9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKQEAgLTc1MCw3ICs3MjAsNyBAQAogCS5zZXRsZWFzZQk9IGdmczJfc2V0bGVhc2UsCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkucmVhZGRpcgk9IGdmczJfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJPSBnZnMyX2lvY3RsLAogCS5vcGVuCQk9IGdmczJfb3BlbiwKQEAgLTc2MCw3ICs3MzAsOSBAQAogCS5mbG9jawkJPSBnZnMyX2Zsb2NrLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wc19ub2xvY2sgPSB7CisjZW5kaWYgLyogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0gKi8KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkubGxzZWVrCQk9IGdmczJfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCkBAIC03NzMsMTAgKzc0NSwxMCBAQAogCS5mc3luYwkJPSBnZnMyX2ZzeW5jLAogCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKLQkuc2V0bGVhc2UJPSBnZnMyX3NldGxlYXNlLAorCS5zZXRsZWFzZQk9IGdlbmVyaWNfc2V0bGVhc2UsCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHNfbm9sb2NrID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wc19ub2xvY2sgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5yZWFkZGlyCT0gZ2ZzMl9yZWFkZGlyLAogCS51bmxvY2tlZF9pb2N0bAk9IGdmczJfaW9jdGwsCiAJLm9wZW4JCT0gZ2ZzMl9vcGVuLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBmOTFlZWJkLi41MTg4M2IzIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjUsNyArMjQsNiBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiZ2xvcHMuaCIKICNpbmNsdWRlICJpbm9kZS5oIgotI2luY2x1ZGUgIm1vdW50LmgiCiAjaW5jbHVkZSAicmVjb3ZlcnkuaCIKICNpbmNsdWRlICJyZ3JwLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKQEAgLTY0LDcgKzYyLDYgQEAKIAlndC0+Z3RfcXVvdGFfd2Fybl9wZXJpb2QgPSAxMDsKIAlndC0+Z3RfcXVvdGFfc2NhbGVfbnVtID0gMTsKIAlndC0+Z3RfcXVvdGFfc2NhbGVfZGVuID0gMTsKLQlndC0+Z3RfcXVvdGFfY2FjaGVfc2VjcyA9IDMwMDsKIAlndC0+Z3RfcXVvdGFfcXVhbnR1bSA9IDYwOwogCWd0LT5ndF9uZXdfZmlsZXNfamRhdGEgPSAwOwogCWd0LT5ndF9tYXhfcmVhZGFoZWFkID0gMSA8PCAxODsKQEAgLTEwMCw3ICs5Nyw2IEBACiAJbXV0ZXhfaW5pdCgmc2RwLT5zZF9qaW5kZXhfbXV0ZXgpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfcXVvdGFfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNkcC0+c2RfcXVvdGFfc3Bpbik7CiAJbXV0ZXhfaW5pdCgmc2RwLT5zZF9xdW90YV9tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2RwLT5zZF9xdW90YV93YWl0KTsKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZF90cnVuY19saXN0KTsKQEAgLTIzOCw2ICsyMzQsNyBAQAogCiAJbWVtY3B5KHNiLT5zYl9sb2NrcHJvdG8sIHN0ci0+c2JfbG9ja3Byb3RvLCBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJbWVtY3B5KHNiLT5zYl9sb2NrdGFibGUsIHN0ci0+c2JfbG9ja3RhYmxlLCBHRlMyX0xPQ0tOQU1FX0xFTik7CisJbWVtY3B5KHNiLT5zYl91dWlkLCBzdHItPnNiX3V1aWQsIDE2KTsKIH0KIAogLyoqCkBAIC0yOTksMTUgKzI5NiwxNSBAQAogCV9fZnJlZV9wYWdlKHBhZ2UpOwogCXJldHVybiAwOwogfQorCiAvKioKICAqIGdmczJfcmVhZF9zYiAtIFJlYWQgc3VwZXIgYmxvY2sKICAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKLSAqIEBnbDogdGhlIGdsb2NrIGZvciB0aGUgc3VwZXJibG9jayAoYXNzdW1lZCB0byBiZSBoZWxkKQogICogQHNpbGVudDogRG9uJ3QgcHJpbnQgbWVzc2FnZSBpZiBtb3VudCBmYWlscwogICoKICAqLwogCi1zdGF0aWMgaW50IGdmczJfcmVhZF9zYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgc2lsZW50KQorc3RhdGljIGludCBnZnMyX3JlYWRfc2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBzaWxlbnQpCiB7CiAJdTMyIGhhc2hfYmxvY2tzLCBpbmRfYmxvY2tzLCBsZWFmX2Jsb2NrczsKIAl1MzIgdG1wX2Jsb2NrczsKQEAgLTUyNyw3ICs1MjQsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGdmczJfcmVhZF9zYihzZHAsIHNiX2doLmdoX2dsLCBzaWxlbnQpOworCXJldCA9IGdmczJfcmVhZF9zYihzZHAsIHNpbGVudCk7CiAJaWYgKHJldCkgewogCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBzdXBlcmJsb2NrOiAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CkBAIC02MzAsMTMgKzYyNywxMyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQorc3RhdGljIHZvaWQgZ2ZzMl9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fb3RoZXJzX21heV9tb3VudCkKLQkJcmV0dXJuOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fb3RoZXJzX21heV9tb3VudCgKLQkJCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSk7CisJY2hhciAqbWVzc2FnZSA9ICJGSVJTVE1PVU5UPURvbmUiOworCWNoYXIgKmVudnBbXSA9IHsgbWVzc2FnZSwgTlVMTCB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJbHMtPmxzX2ZpcnN0X2RvbmUgPSAxOworCWtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiB9CiAKIC8qKgpAQCAtNzk2LDcgKzc5Myw3IEBACiAJCQl9CiAJCX0KIAotCQlnZnMyX2xtX290aGVyc19tYXlfbW91bnQoc2RwKTsKKwkJZ2ZzMl9vdGhlcnNfbWF5X21vdW50KHNkcCk7CiAJfSBlbHNlIGlmICghc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikgewogCQllcnJvciA9IGdmczJfcmVjb3Zlcl9qb3VybmFsKHNkcC0+c2RfamRlc2MpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTEwMDUsNyArMTAwMiw2IEBACiAJCWdvdG8gZmFpbF9xdW90YWQ7CiAKIAlzZHAtPnNkX2xvZ19mbHVzaF90aW1lID0gamlmZmllczsKLQlzZHAtPnNkX2ppbmRleF9yZWZyZXNoX3RpbWUgPSBqaWZmaWVzOwogCiAJcCA9IGt0aHJlYWRfcnVuKGdmczJfbG9nZCwgc2RwLCAiZ2ZzMl9sb2dkIik7CiAJZXJyb3IgPSBJU19FUlIocCk7CkBAIC0xMDMzLDYgKzEwMjksMTcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5vbG9ja190b2tlbnMgPSB7CisJeyBPcHRfamlkLCAiamlkPSVkXG4iLCB9LAorCXsgT3B0X2VyciwgTlVMTCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIG5vbG9ja19vcHMgPSB7CisJLmxtX3Byb3RvX25hbWUgPSAibG9ja19ub2xvY2siLAorCS5sbV9wdXRfbG9jayA9IGttZW1fY2FjaGVfZnJlZSwKKwkubG1fdG9rZW5zID0gJm5vbG9ja190b2tlbnMsCit9OworCiAvKioKICAqIGdmczJfbG1fbW91bnQgLSBtb3VudCBhIGxvY2tpbmcgcHJvdG9jb2wKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCkBAIC0xMDQ0LDMxICsxMDUxLDczIEBACiAKIHN0YXRpYyBpbnQgZ2ZzMl9sbV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHNpbGVudCkKIHsKLQljaGFyICpwcm90byA9IHNkcC0+c2RfcHJvdG9fbmFtZTsKLQljaGFyICp0YWJsZSA9IHNkcC0+c2RfdGFibGVfbmFtZTsKLQlpbnQgZmxhZ3MgPSBMTV9NRkxBR19DT05WX05PRFJPUDsKLQlpbnQgZXJyb3I7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxtOworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3RydWN0IGdmczJfYXJncyAqYXJncyA9ICZzZHAtPnNkX2FyZ3M7CisJY29uc3QgY2hhciAqcHJvdG8gPSBzZHAtPnNkX3Byb3RvX25hbWU7CisJY29uc3QgY2hhciAqdGFibGUgPSBzZHAtPnNkX3RhYmxlX25hbWU7CisJY29uc3QgY2hhciAqZnNuYW1lOworCWNoYXIgKm8sICpvcHRpb25zOworCWludCByZXQ7CiAKLQlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKLQkJZmxhZ3MgfD0gTE1fTUZMQUdfU1BFQ1RBVE9SOworCWlmICghc3RyY21wKCJsb2NrX25vbG9jayIsIHByb3RvKSkgeworCQlsbSA9ICZub2xvY2tfb3BzOworCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOworCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKKyNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQorCX0gZWxzZSBpZiAoIXN0cmNtcCgibG9ja19kbG0iLCBwcm90bykpIHsKKwkJbG0gPSAmZ2ZzMl9kbG1fb3BzOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogY2FuJ3QgZmluZCBwcm90b2NvbCAlc1xuIiwgcHJvdG8pOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CiAKIAlmc19pbmZvKHNkcCwgIlRyeWluZyB0byBqb2luIGNsdXN0ZXIgXCIlc1wiLCBcIiVzXCJcbiIsIHByb3RvLCB0YWJsZSk7CiAKLQllcnJvciA9IGdmczJfbW91bnRfbG9ja3Byb3RvKHByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhLAotCQkJCSAgICAgZ2ZzMl9nbG9ja19jYiwgc2RwLAotCQkJCSAgICAgR0ZTMl9NSU5fTFZCX1NJWkUsIGZsYWdzLAotCQkJCSAgICAgJnNkcC0+c2RfbG9ja3N0cnVjdCwgJnNkcC0+c2Rfa29iaik7Ci0JaWYgKGVycm9yKSB7Ci0JCWZzX2luZm8oc2RwLCAiY2FuJ3QgbW91bnQgcHJvdG89JXMsIHRhYmxlPSVzLCBob3N0ZGF0YT0lc1xuIiwKLQkJCXByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhKTsKLQkJZ290byBvdXQ7Ci0JfQorCWxzLT5sc19vcHMgPSBsbTsKKwlscy0+bHNfZmlyc3QgPSAxOworCWxzLT5sc19pZCA9IDA7CiAKLQlpZiAoZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMpIHx8Ci0JICAgIGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbHZiX3NpemUgPj0KLQkJCQkgIEdGUzJfTUlOX0xWQl9TSVpFKSkgewotCQlnZnMyX3VubW91bnRfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOwotCQlnb3RvIG91dDsKKwlmb3IgKG9wdGlvbnMgPSBhcmdzLT5hcl9ob3N0ZGF0YTsgKG8gPSBzdHJzZXAoJm9wdGlvbnMsICI6IikpOyApIHsKKwkJc3Vic3RyaW5nX3QgdG1wW01BWF9PUFRfQVJHU107CisJCWludCB0b2tlbiwgb3B0aW9uOworCisJCWlmICghbyB8fCAhKm8pCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKG8sICpsbS0+bG1fdG9rZW5zLCB0bXApOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X2ppZDoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQgfHwgb3B0aW9uIDwgMCkgCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19qaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfaWQ6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZmlyc3Q6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IChvcHRpb24gIT0gMCAmJiBvcHRpb24gIT0gMSkpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19maXJzdCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub2RpcjoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQgfHwgKG9wdGlvbiAhPSAwICYmIG9wdGlvbiAhPSAxKSkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX25vZGlyID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2VycjoKKwkJZGVmYXVsdDoKK2hvc3RkYXRhX2Vycm9yOgorCQkJZnNfaW5mbyhzZHAsICJ1bmtub3duIGhvc3RkYXRhICglcylcbiIsIG8pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKQEAgLTEwNzcsMjIgKzExMjYsMjUgQEAKIAkJc25wcmludGYoc2RwLT5zZF9mc25hbWUsIEdGUzJfRlNOQU1FX0xFTiwgIiVzLiV1IiwgdGFibGUsCiAJCQkgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCk7CiAKLQlmc19pbmZvKHNkcCwgIkpvaW5lZCBjbHVzdGVyLiBOb3cgbW91bnRpbmcgRlMuLi5cbiIpOwotCi0JaWYgKChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfZmxhZ3MgJiBMTV9MU0ZMQUdfTE9DQUwpICYmCi0JICAgICFzZHAtPnNkX2FyZ3MuYXJfaWdub3JlX2xvY2FsX2ZzKSB7Ci0JCXNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcyA9IDE7Ci0JCXNkcC0+c2RfYXJncy5hcl9sb2NhbGNhY2hpbmcgPSAxOworCWZzbmFtZSA9IHN0cmNocih0YWJsZSwgJzonKTsKKwlpZiAoZnNuYW1lKQorCQlmc25hbWUrKzsKKwlpZiAobG0tPmxtX21vdW50ID09IE5VTEwpIHsKKwkJZnNfaW5mbyhzZHAsICJOb3cgbW91bnRpbmcgRlMuLi5cbiIpOworCQlyZXR1cm4gMDsKIAl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyb3I7CisJcmV0ID0gbG0tPmxtX21vdW50KHNkcCwgZnNuYW1lKTsKKwlpZiAocmV0ID09IDApCisJCWZzX2luZm8oc2RwLCAiSm9pbmVkIGNsdXN0ZXIuIE5vdyBtb3VudGluZyBGUy4uLlxuIik7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlnZnMyX3VubW91bnRfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbSA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHM7CisJaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpICYmCisJICAgIGxtLT5sbV91bm1vdW50KQorCQlsbS0+bG1fdW5tb3VudChzZHApOwogfQogCiAvKioKQEAgLTExMTYsMTIgKzExNjgsMjAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAoY2hhciAqKWRhdGEsIDApOworCXNkcC0+c2RfYXJncy5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKKwlzZHAtPnNkX2FyZ3MuYXJfZGF0YSA9IEdGUzJfREFUQV9ERUZBVUxUOworCisJZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAmc2RwLT5zZF9hcmdzLCBkYXRhKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgcGFyc2UgbW91bnQgYXJndW1lbnRzXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAorCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQorICAgICAgICAgICAgICAgIHNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisKIAlzYi0+c19tYWdpYyA9IEdGUzJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmZ2ZzMl9zdXBlcl9vcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJmdmczJfZXhwb3J0X29wczsKQEAgLTExOTksNiArMTI1OSw4IEBACiAJCWRwdXQoc2RwLT5zZF9yb290X2Rpcik7CiAJaWYgKHNkcC0+c2RfbWFzdGVyX2RpcikKIAkJZHB1dChzZHAtPnNkX21hc3Rlcl9kaXIpOworCWlmIChzYi0+c19yb290KQorCQlkcHV0KHNiLT5zX3Jvb3QpOwogCXNiLT5zX3Jvb3QgPSBOVUxMOwogZmFpbF9sb2NraW5nOgogCWluaXRfbG9ja2luZyhzZHAsICZtb3VudF9naCwgVU5ETyk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19pbm9kZS5jIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwppbmRleCA0OTg3NzU0Li5hYmQ1NDI5IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19pbm9kZS5jCisrKyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmllbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfc3VwZXIuYyBiL2ZzL2dmczIvb3BzX3N1cGVyLmMKaW5kZXggMzIwMzIzZC4uNDU4MDE5NSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfc3VwZXIuYworKysgYi9mcy9nZnMyL29wc19zdXBlci5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMjcsNyArMjYsNiBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJsb2cuaCIKLSNpbmNsdWRlICJtb3VudC5oIgogI2luY2x1ZGUgInF1b3RhLmgiCiAjaW5jbHVkZSAicmVjb3ZlcnkuaCIKICNpbmNsdWRlICJyZ3JwLmgiCkBAIC00MCw2ICszOCw4IEBACiAjaW5jbHVkZSAiYm1hcC5oIgogI2luY2x1ZGUgIm1ldGFfaW8uaCIKIAorI2RlZmluZSBhcmdzX25lcShhMSwgYTIsIHgpICgoYTEpLT5hcl8jI3ggIT0gKGEyKS0+YXJfIyN4KQorCiAvKioKICAqIGdmczJfd3JpdGVfaW5vZGUgLSBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIHN0YWJsZSBvbiB0aGUgZGlzawogICogQGlub2RlOiBUaGUgaW5vZGUKQEAgLTQzNSwyNSArNDM1LDQ1IEBACiBzdGF0aWMgaW50IGdmczJfcmVtb3VudF9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgZ2ZzMl9hcmdzIGFyZ3MgPSBzZHAtPnNkX2FyZ3M7IC8qIERlZmF1bHQgdG8gY3VycmVudCBzZXR0aW5ncyAqLwogCWludCBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgZGF0YSwgMSk7CisJZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAmYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwkvKiBOb3QgYWxsb3dlZCB0byBjaGFuZ2UgbG9ja2luZyBkZXRhaWxzICovCisJaWYgKHN0cmNtcChhcmdzLmFyX2xvY2twcm90bywgc2RwLT5zZF9hcmdzLmFyX2xvY2twcm90bykgfHwKKwkgICAgc3RyY21wKGFyZ3MuYXJfbG9ja3RhYmxlLCBzZHAtPnNkX2FyZ3MuYXJfbG9ja3RhYmxlKSB8fAorCSAgICBzdHJjbXAoYXJncy5hcl9ob3N0ZGF0YSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTb21lIGZsYWdzIG11c3Qgbm90IGJlIGNoYW5nZWQgKi8KKwlpZiAoYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIHNwZWN0YXRvcikgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGlnbm9yZV9sb2NhbF9mcykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGxvY2FsZmxvY2tzKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgbG9jYWxjYWNoaW5nKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgbWV0YSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCiAJCSpmbGFncyB8PSBNU19SRE9OTFk7Ci0JZWxzZSB7Ci0JCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKLQkJCQllcnJvciA9IGdmczJfbWFrZV9mc19ybyhzZHApOwotCQl9IGVsc2UgaWYgKCEoKmZsYWdzICYgTVNfUkRPTkxZKSAmJgotCQkJICAgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCisJaWYgKChzYi0+c19mbGFncyBeICpmbGFncykgJiBNU19SRE9OTFkpIHsKKwkJaWYgKCpmbGFncyAmIE1TX1JET05MWSkKKwkJCWVycm9yID0gZ2ZzMl9tYWtlX2ZzX3JvKHNkcCk7CisJCWVsc2UKIAkJCWVycm9yID0gZ2ZzMl9tYWtlX2ZzX3J3KHNkcCk7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCX0KIAotCXJldHVybiBlcnJvcjsKKwlzZHAtPnNkX2FyZ3MgPSBhcmdzOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfcG9zaXhfYWNsKQorCQlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKwllbHNlCisJCXNiLT5zX2ZsYWdzICY9IH5NU19QT1NJWEFDTDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01ODgsNiArNjA4LDggQEAKIAkJfQogCQlzZXFfcHJpbnRmKHMsICIsZGF0YT0lcyIsIHN0YXRlKTsKIAl9CisJaWYgKGFyZ3MtPmFyX2Rpc2NhcmQpCisJCXNlcV9wcmludGYocywgIixkaXNjYXJkIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuYyBiL2ZzL2dmczIvcXVvdGEuYwppbmRleCBiMDhkMDk2Li44ZDUzZjY2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmMKKysrIGIvZnMvZ2ZzMi9xdW90YS5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKQEAgLTgwLDYgKzc5LDUxIEBACiAJdTMyIHFjX2lkOwogfTsKIAorc3RhdGljIExJU1RfSEVBRChxZF9scnVfbGlzdCk7CitzdGF0aWMgYXRvbWljX3QgcWRfbHJ1X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgc3BpbmxvY2tfdCBxZF9scnVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworaW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwOworCisJaWYgKG5yID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCisJCXJldHVybiAtMTsKKworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOworCXdoaWxlIChuciAmJiAhbGlzdF9lbXB0eSgmcWRfbHJ1X2xpc3QpKSB7CisJCXFkID0gbGlzdF9lbnRyeShxZF9scnVfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEsIHFkX3JlY2xhaW0pOworCQlzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKKworCQkvKiBGcmVlIGZyb20gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgbGlzdCAqLworCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOworCisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2NoYW5nZSk7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX3Nsb3RfY291bnQpOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7CisKKwkJZ2ZzMl9nbG9ja19wdXQocWQtPnFkX2dsKTsKKwkJYXRvbWljX2RlYygmc2RwLT5zZF9xdW90YV9jb3VudCk7CisKKwkJLyogRGVsZXRlIGl0IGZyb20gdGhlIGNvbW1vbiByZWNsYWltIGxpc3QgKi8KKwkJbGlzdF9kZWxfaW5pdCgmcWQtPnFkX3JlY2xhaW0pOworCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBxZCk7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOworCQluci0tOworCX0KKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCitvdXQ6CisJcmV0dXJuIChhdG9taWNfcmVhZCgmcWRfbHJ1X2NvdW50KSAqIHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmUpIC8gMTAwOworfQorCiBzdGF0aWMgdTY0IHFkMm9mZnNldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKIAl1NjQgb2Zmc2V0OwpAQCAtMTAwLDIyICsxNDQsMTggQEAKIAlpZiAoIXFkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXFkLT5xZF9jb3VudCA9IDE7CisJYXRvbWljX3NldCgmcWQtPnFkX2NvdW50LCAxKTsKIAlxZC0+cWRfaWQgPSBpZDsKIAlpZiAodXNlcikKIAkJc2V0X2JpdChRREZfVVNFUiwgJnFkLT5xZF9mbGFncyk7CiAJcWQtPnFkX3Nsb3QgPSAtMTsKKwlJTklUX0xJU1RfSEVBRCgmcWQtPnFkX3JlY2xhaW0pOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX2dldChzZHAsIDIgKiAodTY0KWlkICsgIXVzZXIsCiAJCQkgICAgICAmZ2ZzMl9xdW90YV9nbG9wcywgQ1JFQVRFLCAmcWQtPnFkX2dsKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIAotCWVycm9yID0gZ2ZzMl9sdmJfaG9sZChxZC0+cWRfZ2wpOwotCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWw7Ci0KIAkqcWRwID0gcWQ7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNSwxMSArMTc1LDE3IEBACiAKIAlmb3IgKDs7KSB7CiAJCWZvdW5kID0gMDsKLQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShxZCwgJnNkcC0+c2RfcXVvdGFfbGlzdCwgcWRfbGlzdCkgewogCQkJaWYgKHFkLT5xZF9pZCA9PSBpZCAmJgogCQkJICAgICF0ZXN0X2JpdChRREZfVVNFUiwgJnFkLT5xZF9mbGFncykgPT0gIXVzZXIpIHsKLQkJCQlxZC0+cWRfY291bnQrKzsKKwkJCQlpZiAoIWF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpICYmCisJCQkJICAgICFsaXN0X2VtcHR5KCZxZC0+cWRfcmVjbGFpbSkpIHsKKwkJCQkJLyogUmVtb3ZlIGl0IGZyb20gcmVjbGFpbSBsaXN0ICovCisJCQkJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJCQkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJCQl9CisJCQkJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNTUsMTEgKzIwMSwxMSBAQAogCQkJbmV3X3FkID0gTlVMTDsKIAkJfQogCi0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJCWlmIChxZCB8fCAhY3JlYXRlKSB7CiAJCQlpZiAobmV3X3FkKSB7Ci0JCQkJZ2ZzMl9sdmJfdW5ob2xkKG5ld19xZC0+cWRfZ2wpOworCQkJCWdmczJfZ2xvY2tfcHV0KG5ld19xZC0+cWRfZ2wpOwogCQkJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIG5ld19xZCk7CiAJCQl9CiAJCQkqcWRwID0gcWQ7CkBAIC0xNzUsMjEgKzIyMSwxOCBAQAogc3RhdGljIHZvaWQgcWRfaG9sZChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX2NvdW50KTsKLQlxZC0+cWRfY291bnQrKzsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlnZnMyX2Fzc2VydChzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogfQogCiBzdGF0aWMgdm9pZCBxZF9wdXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfY291bnQpOwotCWlmICghLS1xZC0+cWRfY291bnQpCi0JCXFkLT5xZF9sYXN0X3RvdWNoZWQgPSBqaWZmaWVzOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZxZC0+cWRfY291bnQsICZxZF9scnVfbG9jaykpIHsKKwkJLyogQWRkIHRvIHRoZSByZWNsYWltIGxpc3QgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcWQtPnFkX3JlY2xhaW0sICZxZF9scnVfbGlzdCk7CisJCWF0b21pY19pbmMoJnFkX2xydV9jb3VudCk7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CisJfQogfQogCiBzdGF0aWMgaW50IHNsb3RfZ2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQpAQCAtMTk4LDEwICsyNDEsMTAgQEAKIAl1bnNpZ25lZCBpbnQgYywgbyA9IDAsIGI7CiAJdW5zaWduZWQgY2hhciBieXRlID0gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmIChxZC0+cWRfc2xvdF9jb3VudCsrKSB7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIyNSwxMyArMjY4LDEzIEBACiAKIAlzZHAtPnNkX3F1b3RhX2JpdG1hcFtjXVtvXSB8PSAxIDw8IGI7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJcmV0dXJuIDA7CiAKIGZhaWw6CiAJcWQtPnFkX3Nsb3RfY291bnQtLTsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC0yMzksMjMgKzI4MiwyMyBAQAogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJcWQtPnFkX3Nsb3RfY291bnQrKzsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzbG90X3B1dChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCWlmICghLS1xZC0+cWRfc2xvdF9jb3VudCkgewogCQlnZnMyX2ljYml0X211bmdlKHNkcCwgc2RwLT5zZF9xdW90YV9iaXRtYXAsIHFkLT5xZF9zbG90LCAwKTsKIAkJcWQtPnFkX3Nsb3QgPSAtMTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIH0KIAogc3RhdGljIGludCBiaF9nZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCkBAIC0zMzAsNyArMzczLDcgQEAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShxZCwgJnNkcC0+c2RfcXVvdGFfbGlzdCwgcWRfbGlzdCkgewogCQlpZiAodGVzdF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncykgfHwKQEAgLTM0MSw4ICszODQsOCBAQAogCQlsaXN0X21vdmVfdGFpbCgmcWQtPnFkX2xpc3QsICZzZHAtPnNkX3F1b3RhX2xpc3QpOwogCiAJCXNldF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncyk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY291bnQpOwotCQlxZC0+cWRfY291bnQrKzsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwkJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIAkJcWQtPnFkX2NoYW5nZV9zeW5jID0gcWQtPnFkX2NoYW5nZTsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAkJcWQtPnFkX3Nsb3RfY291bnQrKzsKQEAgLTM1NCw3ICszOTcsNyBAQAogCWlmICghZm91bmQpCiAJCXFkID0gTlVMTDsKIAotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAocWQpIHsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jaGFuZ2Vfc3luYyk7CkBAIC0zNzksMjQgKzQyMiwyNCBAQAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAodGVzdF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncykgfHwKIAkgICAgIXRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKSB7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlsaXN0X21vdmVfdGFpbCgmcWQtPnFkX2xpc3QsICZzZHAtPnNkX3F1b3RhX2xpc3QpOwogCiAJc2V0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKTsKLQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NvdW50KTsKLQlxZC0+cWRfY291bnQrKzsKKwlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpOworCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJcWQtPnFkX2NoYW5nZV9zeW5jID0gcWQtPnFkX2NoYW5nZTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCXFkLT5xZF9zbG90X2NvdW50Kys7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jaGFuZ2Vfc3luYyk7CiAJaWYgKGJoX2dldChxZCkpIHsKQEAgLTU1Niw5ICs1OTksOSBAQAogCXggPSBiZTY0X3RvX2NwdShxYy0+cWNfY2hhbmdlKSArIGNoYW5nZTsKIAlxYy0+cWNfY2hhbmdlID0gY3B1X3RvX2JlNjQoeCk7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJcWQtPnFkX2NoYW5nZSA9IHg7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmICgheCkgewogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpOwpAQCAtODAyLDggKzg0NSw4IEBACiAJCWxvZmZfdCBwb3M7CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KHFfZ2gpOwogCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChxZC0+cWRfZ2wsCi0JCQkJCSAgTE1fU1RfRVhDTFVTSVZFLCBHTF9OT0NBQ0hFLAotCQkJCQkgIHFfZ2gpOworCQkJCQkgICBMTV9TVF9FWENMVVNJVkUsIEdMX05PQ0FDSEUsCisJCQkJCSAgIHFfZ2gpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTgyMCw3ICs4NjMsNiBAQAogCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKIAotCiAJCWdmczJfcXVvdGFfaW4oJnEsIGJ1Zik7CiAJCXFsdmIgPSAoc3RydWN0IGdmczJfcXVvdGFfbHZiICopcWQtPnFkX2dsLT5nbF9sdmI7CiAJCXFsdmItPnFiX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7CkBAIC04OTAsOSArOTMyLDkgQEAKIAlpZiAoIXFkLT5xZF9xYi5xYl9saW1pdCkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJdmFsdWUgPSBxZC0+cWRfY2hhbmdlOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlzcGluX2xvY2soJmd0LT5ndF9zcGluKTsKIAludW0gPSBndC0+Z3RfcXVvdGFfc2NhbGVfbnVtOwpAQCAtOTg1LDkgKzEwMjcsOSBAQAogCQkJY29udGludWU7CiAKIAkJdmFsdWUgPSAoczY0KWJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl92YWx1ZSk7Ci0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCXZhbHVlICs9IHFkLT5xZF9jaGFuZ2U7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJCWlmIChiZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfbGltaXQpICYmIChzNjQpYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSA8IHZhbHVlKSB7CiAJCQlwcmludF9tZXNzYWdlKHFkLCAiZXhjZWVkZWQiKTsKQEAgLTExNzEsMTMgKzEyMTMsMTIgQEAKIAkJCXFkLT5xZF9jaGFuZ2UgPSBxYy5xY19jaGFuZ2U7CiAJCQlxZC0+cWRfc2xvdCA9IHNsb3Q7CiAJCQlxZC0+cWRfc2xvdF9jb3VudCA9IDE7Ci0JCQlxZC0+cWRfbGFzdF90b3VjaGVkID0gamlmZmllczsKIAotCQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCQlnZnMyX2ljYml0X211bmdlKHNkcCwgc2RwLT5zZF9xdW90YV9iaXRtYXAsIHNsb3QsIDEpOwogCQkJbGlzdF9hZGQoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAkJCWF0b21pY19pbmMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJCQlmb3VuZCsrOwogCQl9CkBAIC0xMTk3LDczICsxMjM4LDQ4IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX3F1b3RhX3NjYW4oc3RydWN0IGdmczJfc2JkICpzZHApCi17Ci0Jc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQsICpzYWZlOwotCUxJU1RfSEVBRChkZWFkKTsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocWQsIHNhZmUsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKLQkJaWYgKCFxZC0+cWRfY291bnQgJiYKLQkJICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcWQtPnFkX2xhc3RfdG91Y2hlZCArCi0JCQkgICAgICAgIGdmczJfdHVuZV9nZXQoc2RwLCBndF9xdW90YV9jYWNoZV9zZWNzKSAqIEhaKSkgewotCQkJbGlzdF9tb3ZlKCZxZC0+cWRfbGlzdCwgJmRlYWQpOwotCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsCi0JCQkJCSBhdG9taWNfcmVhZCgmc2RwLT5zZF9xdW90YV9jb3VudCkgPiAwKTsKLQkJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkZWFkKSkgewotCQlxZCA9IGxpc3RfZW50cnkoZGVhZC5uZXh0LCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9saXN0KTsKLQkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKLQotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOwotCi0JCWdmczJfbHZiX3VuaG9sZChxZC0+cWRfZ2wpOwotCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBxZCk7Ci0JfQotfQotCiB2b2lkIGdmczJfcXVvdGFfY2xlYW51cChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnNkcC0+c2RfcXVvdGFfbGlzdDsKIAlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKIAl1bnNpZ25lZCBpbnQgeDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJcWQgPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYsIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEsIHFkX2xpc3QpOwogCi0JCWlmIChxZC0+cWRfY291bnQgPiAxIHx8Ci0JCSAgICAocWQtPnFkX2NvdW50ICYmICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpID4gMSB8fAorCQkgICAgKGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpICYmCisJCSAgICAgIXRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKSkgewogCQkJbGlzdF9tb3ZlKCZxZC0+cWRfbGlzdCwgaGVhZCk7Ci0JCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJCQlzY2hlZHVsZSgpOwotCQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7CisJCS8qIEFsc28gcmVtb3ZlIGlmIHRoaXMgcWQgZXhpc3RzIGluIHRoZSByZWNsYWltIGxpc3QgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZxZC0+cWRfcmVjbGFpbSkpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCX0KIAkJYXRvbWljX2RlYygmc2RwLT5zZF9xdW90YV9jb3VudCk7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCi0JCWlmICghcWQtPnFkX2NvdW50KSB7CisJCWlmICghYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpIHsKIAkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2NoYW5nZSk7CiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKIAkJfSBlbHNlCiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX3Nsb3RfY291bnQgPT0gMSk7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKIAotCQlnZnMyX2x2Yl91bmhvbGQocWQtPnFkX2dsKTsKKwkJZ2ZzMl9nbG9ja19wdXQocWQtPnFkX2dsKTsKIAkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOwogCi0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWF0b21pY19yZWFkKCZzZHAtPnNkX3F1b3RhX2NvdW50KSk7CiAKQEAgLTEzNDEsOSArMTM1Nyw2IEBACiAJCXF1b3RhZF9jaGVja190aW1lbyhzZHAsICJzeW5jIiwgZ2ZzMl9xdW90YV9zeW5jLCB0LAogCQkJCSAgICZxdW90YWRfdGltZW8sICZ0dW5lLT5ndF9xdW90YV9xdWFudHVtKTsKIAotCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgdHVybmVkIGludG8gYSBzaHJpbmtlciAqLwotCQlnZnMyX3F1b3RhX3NjYW4oc2RwKTsKLQogCQkvKiBDaGVjayBmb3IgJiByZWNvdmVyIHBhcnRpYWxseSB0cnVuY2F0ZWQgaW5vZGVzICovCiAJCXF1b3RhZF9jaGVja190cnVuY19saXN0KHNkcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuaCBiL2ZzL2dmczIvcXVvdGEuaAppbmRleCBjZWM5MDMyLi4wZmE1ZmE2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmgKKysrIGIvZnMvZ2ZzMi9xdW90YS5oCkBAIC00OSw0ICs0OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorZXh0ZXJuIGludCBnZnMyX3Nocmlua19xZF9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzayk7CisKICNlbmRpZiAvKiBfX1FVT1RBX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmVjb3ZlcnkuYyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwppbmRleCBlZmQwOWMzLi4yNDdlOGY3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIApAQCAtNDI3LDIwICs0MjYsMjMgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQsCi0JCQkJICB1bnNpZ25lZCBpbnQgbWVzc2FnZSkKK3N0YXRpYyB2b2lkIGdmczJfcmVjb3ZlcnlfZG9uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZSkKIHsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3JlY292ZXJ5X2RvbmUpCi0JCXJldHVybjsKLQotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcmVjb3ZlcnlfZG9uZSgKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIGppZCwgbWVzc2FnZSk7CisJY2hhciBlbnZfamlkWzIwXTsKKwljaGFyIGVudl9zdGF0dXNbMjBdOworCWNoYXIgKmVudnBbXSA9IHsgZW52X2ppZCwgZW52X3N0YXR1cywgTlVMTCB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisgICAgICAgIGxzLT5sc19yZWNvdmVyX2ppZF9kb25lID0gamlkOworICAgICAgICBscy0+bHNfcmVjb3Zlcl9qaWRfc3RhdHVzID0gbWVzc2FnZTsKKwlzcHJpbnRmKGVudl9qaWQsICJKSUQ9JWQiLCBqaWQpOworCXNwcmludGYoZW52X3N0YXR1cywgIlJFQ09WRVJZPSVzIiwKKwkJbWVzc2FnZSA9PSBMTV9SRF9TVUNDRVNTID8gIkRvbmUiIDogIkZhaWxlZCIpOworICAgICAgICBrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCi0KIC8qKgotICogZ2ZzMl9yZWNvdmVyX2pvdXJuYWwgLSByZWNvdmVyeSBhIGdpdmVuIGpvdXJuYWwKKyAqIGdmczJfcmVjb3Zlcl9qb3VybmFsIC0gcmVjb3ZlciBhIGdpdmVuIGpvdXJuYWwKICAqIEBqZDogdGhlIHN0cnVjdCBnZnMyX2pkZXNjIGRlc2NyaWJpbmcgdGhlIGpvdXJuYWwKICAqCiAgKiBBY3F1aXJlIHRoZSBqb3VybmFsJ3MgbG9jaywgY2hlY2sgdG8gc2VlIGlmIHRoZSBqb3VybmFsIGlzIGNsZWFuLCBhbmQKQEAgLTU2MSw3ICs1NjMsNyBAQAogCWlmIChqZC0+amRfamlkICE9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CiAKLQlnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9TVUNDRVNTKTsKKwlnZnMyX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9TVUNDRVNTKTsKIAogCWlmIChqZC0+amRfamlkICE9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqX2doKTsKQEAgLTU4MSw3ICs1ODMsNyBAQAogCWZzX2luZm8oc2RwLCAiamlkPSV1OiAlc1xuIiwgamQtPmpkX2ppZCwgKGVycm9yKSA/ICJGYWlsZWQiIDogIkRvbmUiKTsKIAogZmFpbDoKLQlnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9HQVZFVVApOworCWdmczJfcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX0dBVkVVUCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuYyBiL2ZzL2dmczIvcmdycC5jCmluZGV4IDhiMDFjNjMuLmYwM2QwMjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5jCisrKyBiL2ZzL2dmczIvcmdycC5jCkBAIC0xMyw4ICsxMyw4IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTEzMiw4MSArMTMyLDkwIEBACiB9CiAKIC8qKgorICogZ2ZzMl9iaXRfc2VhcmNoCisgKiBAcHRyOiBQb2ludGVyIHRvIGJpdG1hcCBkYXRhCisgKiBAbWFzazogTWFzayB0byB1c2UgKG5vcm1hbGx5IDB4NTU1NTUuLi4uIGJ1dCBhZGp1c3RlZCBmb3Igc2VhcmNoIHN0YXJ0KQorICogQHN0YXRlOiBUaGUgc3RhdGUgd2UgYXJlIHNlYXJjaGluZyBmb3IKKyAqCisgKiBXZSB4b3IgdGhlIGJpdG1hcCBkYXRhIHdpdGggYSBwYXR0ZXIgd2hpY2ggaXMgdGhlIGJpdHdpc2Ugb3Bwb3NpdGUKKyAqIG9mIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLCB0aGlzIGdpdmVzIHJpc2UgdG8gYSBwYXR0ZXJuIG9mIG9uZXMKKyAqIHdoZXJldmVyIHRoZXJlIGlzIGEgbWF0Y2guIFNpbmNlIHdlIGhhdmUgdHdvIGJpdHMgcGVyIGVudHJ5LCB3ZQorICogdGFrZSB0aGlzIHBhdHRlcm4sIHNoaWZ0IGl0IGRvd24gYnkgb25lIHBsYWNlIGFuZCB0aGVuIGFuZCBpdCB3aXRoCisgKiB0aGUgb3JpZ2luYWwuIEFsbCB0aGUgZXZlbiBiaXQgcG9zaXRpb25zICgwLDIsNCwgZXRjKSB0aGVuIHJlcHJlc2VudAorICogc3VjY2Vzc2Z1bCBtYXRjaGVzLCBzbyB3ZSBtYXNrIHdpdGggMHg1NTU1NS4uLi4uIHRvIHJlbW92ZSB0aGUgdW53YW50ZWQKKyAqIG9kZCBiaXQgcG9zaXRpb25zLgorICoKKyAqIFRoaXMgYWxsb3dzIHNlYXJjaGluZyBvZiBhIHdob2xlIHU2NCBhdCBvbmNlICgzMiBibG9ja3MpIHdpdGggYQorICogc2luZ2xlIHRlc3QgKG9uIDY0IGJpdCBhcmNoZXMpLgorICovCisKK3N0YXRpYyBpbmxpbmUgdTY0IGdmczJfYml0X3NlYXJjaChjb25zdCBfX2xlNjQgKnB0ciwgdTY0IG1hc2ssIHU4IHN0YXRlKQoreworCXU2NCB0bXA7CisJc3RhdGljIGNvbnN0IHU2NCBzZWFyY2hbXSA9IHsKKwkJWzBdID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMLAorCQlbMV0gPSAweGFhYWFhYWFhYWFhYWFhYWFVTEwsCisJCVsyXSA9IDB4NTU1NTU1NTU1NTU1NTU1NVVMTCwKKwkJWzNdID0gMHgwMDAwMDAwMDAwMDAwMDAwVUxMLAorCX07CisJdG1wID0gbGU2NF90b19jcHUoKnB0cikgXiBzZWFyY2hbc3RhdGVdOworCXRtcCAmPSAodG1wID4+IDEpOworCXRtcCAmPSBtYXNrOworCXJldHVybiB0bXA7Cit9CisKKy8qKgogICogZ2ZzMl9iaXRmaXQgLSBTZWFyY2ggYW4gcmdycCdzIGJpdG1hcCBidWZmZXIgdG8gZmluZCBhIGJpdC1wYWlyIHJlcHJlc2VudGluZwogICogICAgICAgYSBibG9jayBpbiBhIGdpdmVuIGFsbG9jYXRpb24gc3RhdGUuCiAgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIGJpdG1hcHMKLSAqIEBidWZsZW46IHRoZSBsZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgYnVmZmVyCisgKiBAbGVuOiB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGJ1ZmZlcgogICogQGdvYWw6IHN0YXJ0IHNlYXJjaCBhdCB0aGlzIGJsb2NrJ3MgYml0LXBhaXIgKHdpdGhpbiBAYnVmZmVyKQotICogQG9sZF9zdGF0ZTogR0ZTMl9CTEtTVF9YWFggdGhlIHN0YXRlIG9mIHRoZSBibG9jayB3ZSdyZSBsb29raW5nIGZvci4KKyAqIEBzdGF0ZTogR0ZTMl9CTEtTVF9YWFggdGhlIHN0YXRlIG9mIHRoZSBibG9jayB3ZSdyZSBsb29raW5nIGZvci4KICAqCiAgKiBTY29wZSBvZiBAZ29hbCBhbmQgcmV0dXJuZWQgYmxvY2sgbnVtYmVyIGlzIG9ubHkgd2l0aGluIHRoaXMgYml0bWFwIGJ1ZmZlciwKICAqIG5vdCBlbnRpcmUgcmdycCBvciBmaWxlc3lzdGVtLiAgQGJ1ZmZlciB3aWxsIGJlIG9mZnNldCBmcm9tIHRoZSBhY3R1YWwKLSAqIGJlZ2lubmluZyBvZiBhIGJpdG1hcCBibG9jayBidWZmZXIsIHNraXBwaW5nIGFueSBoZWFkZXIgc3RydWN0dXJlcy4KKyAqIGJlZ2lubmluZyBvZiBhIGJpdG1hcCBibG9jayBidWZmZXIsIHNraXBwaW5nIGFueSBoZWFkZXIgc3RydWN0dXJlcywgYnV0CisgKiBoZWFkZXJzIGFyZSBhbHdheXMgYSBtdWx0aXBsZSBvZiA2NCBiaXRzIGxvbmcgc28gdGhhdCB0aGUgYnVmZmVyIGlzCisgKiBhbHdheXMgYWxpZ25lZCB0byBhIDY0IGJpdCBib3VuZGFyeS4KKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGluIGJ5dGVzLCBidXQgaXMgaXQgYXNzdW1lZCB0aGF0IGl0IGlzCisgKiBhbHdheXMgb2sgdG8gdG8gcmVhZCBhIGNvbXBsZXRlIG11bHRpcGxlIG9mIDY0IGJpdHMgYXQgdGhlIGVuZAorICogb2YgdGhlIGJsb2NrIGluIGNhc2UgdGhlIGVuZCBpcyBubyBhbGlnbmVkIHRvIGEgbmF0dXJhbCBib3VuZGFyeS4KICAqCiAgKiBSZXR1cm46IHRoZSBibG9jayBudW1iZXIgKGJpdG1hcCBidWZmZXIgc2NvcGUpIHRoYXQgd2FzIGZvdW5kCiAgKi8KIAotc3RhdGljIHUzMiBnZnMyX2JpdGZpdChjb25zdCB1OCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1MzIgZ29hbCwKLQkJICAgICAgIHU4IG9sZF9zdGF0ZSkKK3N0YXRpYyB1MzIgZ2ZzMl9iaXRmaXQoY29uc3QgdTggKmJ1ZiwgY29uc3QgdW5zaWduZWQgaW50IGxlbiwKKwkJICAgICAgIHUzMiBnb2FsLCB1OCBzdGF0ZSkKIHsKLQljb25zdCB1OCAqYnl0ZSwgKnN0YXJ0LCAqZW5kOwotCWludCBiaXQsIHN0YXJ0Yml0OwotCXUzMiBnMSwgZzIsIG1pc2FsaWduZWQ7Ci0JdW5zaWduZWQgbG9uZyAqcGxvbmc7Ci0JdW5zaWduZWQgbG9uZyBsc2tpcHZhbDsKKwl1MzIgc3BvaW50ID0gKGdvYWwgPDwgMSkgJiAoKDgqc2l6ZW9mKHU2NCkpIC0gMSk7CisJY29uc3QgX19sZTY0ICpwdHIgPSAoKF9fbGU2NCAqKWJ1ZikgKyAoZ29hbCA+PiA1KTsKKwljb25zdCBfX2xlNjQgKmVuZCA9IChfX2xlNjQgKikoYnVmICsgQUxJR04obGVuLCBzaXplb2YodTY0KSkpOworCXU2NCB0bXA7CisJdTY0IG1hc2sgPSAweDU1NTU1NTU1NTU1NTU1NTVVTEw7CisJdTMyIGJpdDsKIAotCWxza2lwdmFsID0gKG9sZF9zdGF0ZSAmIEdGUzJfQkxLU1RfVVNFRCkgPyBMQklUU0tJUDAwIDogTEJJVFNLSVA1NTsKLQlnMSA9IChnb2FsIC8gR0ZTMl9OQkJZKTsKLQlzdGFydCA9IGJ1ZmZlciArIGcxOwotCWJ5dGUgPSBzdGFydDsKLSAgICAgICAgZW5kID0gYnVmZmVyICsgYnVmbGVuOwotCWcyID0gQUxJR04oZzEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JcGxvbmcgPSAodW5zaWduZWQgbG9uZyAqKShidWZmZXIgKyBnMik7Ci0Jc3RhcnRiaXQgPSBiaXQgPSAoZ29hbCAlIEdGUzJfTkJCWSkgKiBHRlMyX0JJVF9TSVpFOwotCW1pc2FsaWduZWQgPSBnMiAtIGcxOwotCWlmICghbWlzYWxpZ25lZCkKLQkJZ290byB1bG9uZ19hbGlnbmVkOwotLyogcGFyc2UgdGhlIGJpdG1hcCBhIGJ5dGUgYXQgYSB0aW1lICovCi1taXNhbGlnbmVkOgotCXdoaWxlIChieXRlIDwgZW5kKSB7Ci0JCWlmICgoKCpieXRlID4+IGJpdCkgJiBHRlMyX0JJVF9NQVNLKSA9PSBvbGRfc3RhdGUpIHsKLQkJCXJldHVybiBnb2FsICsKLQkJCQkoKChieXRlIC0gc3RhcnQpICogR0ZTMl9OQkJZKSArCi0JCQkJICgoYml0IC0gc3RhcnRiaXQpID4+IDEpKTsKLQkJfQotCQliaXQgKz0gR0ZTMl9CSVRfU0laRTsKLQkJaWYgKGJpdCA+PSBHRlMyX05CQlkgKiBHRlMyX0JJVF9TSVpFKSB7Ci0JCQliaXQgPSAwOwotCQkJYnl0ZSsrOwotCQkJbWlzYWxpZ25lZC0tOwotCQkJaWYgKCFtaXNhbGlnbmVkKSB7Ci0JCQkJcGxvbmcgPSAodW5zaWduZWQgbG9uZyAqKWJ5dGU7Ci0JCQkJZ290byB1bG9uZ19hbGlnbmVkOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBCRklUTk9FTlQ7CisJQlVHX09OKHN0YXRlID4gMyk7CiAKLS8qIHBhcnNlIHRoZSBiaXRtYXAgYSB1bnNpZ25lZCBsb25nIGF0IGEgdGltZSAqLwotdWxvbmdfYWxpZ25lZDoKLQkvKiBTdG9wIGF0ICJlbmQgLSAxIiBvciBlbHNlIHByZWZldGNoIGNhbiBnbyBwYXN0IHRoZSBlbmQgYW5kIHNlZ2ZhdWx0LgotCSAgIFdlIGNvdWxkICJpZiIgaXQgYnV0IHdlJ2QgbG9zZSBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZSBnYWluZWQuCi0JICAgVGhpcyB3YXkgd2lsbCBvbmx5IHNsb3cgZG93biBzZWFyY2hpbmcgdGhlIHZlcnkgbGFzdCA0LzggYnl0ZXMKLQkgICBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlLiAgSSd2ZSBleHBlcmltZW50ZWQgd2l0aCBzZXZlcmFsIHdheXMKLQkgICBvZiB3cml0aW5nIHRoaXMgc2VjdGlvbiBzdWNoIGFzIHVzaW5nIGFuIGVsc2UgYmVmb3JlIHRoZSBnb3RvCi0JICAgYnV0IHRoaXMgb25lIHNlZW1zIHRvIGJlIHRoZSBmYXN0ZXN0LiAqLwotCXdoaWxlICgodW5zaWduZWQgY2hhciAqKXBsb25nIDwgZW5kIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0JCXByZWZldGNoKHBsb25nICsgMSk7Ci0JCWlmICgoKCpwbG9uZykgJiBMQklUTUFTSykgIT0gbHNraXB2YWwpCi0JCQlicmVhazsKLQkJcGxvbmcrKzsKKwkvKiBNYXNrIG9mZiBiaXRzIHdlIGRvbid0IGNhcmUgYWJvdXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2ggKi8KKwltYXNrIDw8PSBzcG9pbnQ7CisJdG1wID0gZ2ZzMl9iaXRfc2VhcmNoKHB0ciwgbWFzaywgc3RhdGUpOworCXB0cisrOworCXdoaWxlKHRtcCA9PSAwICYmIHB0ciA8IGVuZCkgeworCQl0bXAgPSBnZnMyX2JpdF9zZWFyY2gocHRyLCAweDU1NTU1NTU1NTU1NTU1NTVVTEwsIHN0YXRlKTsKKwkJcHRyKys7CiAJfQotCWlmICgodW5zaWduZWQgY2hhciAqKXBsb25nIDwgZW5kKSB7Ci0JCWJ5dGUgPSAoY29uc3QgdTggKilwbG9uZzsKLQkJbWlzYWxpZ25lZCArPSBzaXplb2YodW5zaWduZWQgbG9uZykgLSAxOwotCQlnb3RvIG1pc2FsaWduZWQ7Ci0JfQotCXJldHVybiBCRklUTk9FTlQ7CisJLyogTWFzayBvZmYgYW55IGJpdHMgd2hpY2ggYXJlIG1vcmUgdGhhbiBsZW4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgKi8KKwlpZiAocHRyID09IGVuZCAmJiAobGVuICYgKHNpemVvZih1NjQpIC0gMSkpKQorCQl0bXAgJj0gKCgodTY0KX4wKSA+PiAoNjQgLSA4KihsZW4gJiAoc2l6ZW9mKHU2NCkgLSAxKSkpKTsKKwkvKiBEaWRuJ3QgZmluZCBhbnl0aGluZywgc28gcmV0dXJuICovCisJaWYgKHRtcCA9PSAwKQorCQlyZXR1cm4gQkZJVE5PRU5UOworCXB0ci0tOworCWJpdCA9IGZsczY0KHRtcCk7CisJYml0LS07CQkvKiBmbHM2NCBhbHdheXMgYWRkcyBvbmUgdG8gdGhlIGJpdCBjb3VudCAqLworCWJpdCAvPSAyOwkvKiB0d28gYml0cyBwZXIgZW50cnkgaW4gdGhlIGJpdG1hcCAqLworCXJldHVybiAoKChjb25zdCB1bnNpZ25lZCBjaGFyICopcHRyIC0gYnVmKSAqIEdGUzJfTkJCWSkgKyBiaXQ7CiB9CiAKIC8qKgpAQCAtODMxLDYgKzg0MCw1OCBAQAogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3JpbmRleF9zcGluKTsKIH0KIAorc3RhdGljIHZvaWQgZ2ZzMl9yZ3JwX3NlbmRfZGlzY2FyZHMoc3RydWN0IGdmczJfc2JkICpzZHAsIHU2NCBvZmZzZXQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBnZnMyX2JpdG1hcCAqYmkpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNkcC0+c2RfdmZzOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzYi0+c19iZGV2OworCWNvbnN0IHVuc2lnbmVkIGludCBzZWN0c19wZXJfYmxrID0gc2RwLT5zZF9zYi5zYl9ic2l6ZSAvCisJCQkJCSAgIGJkZXZfaGFyZHNlY3Rfc2l6ZShzYi0+c19iZGV2KTsKKwl1NjQgYmxrOworCXNlY3Rvcl90IHN0YXJ0ID0gMDsKKwlzZWN0b3JfdCBucl9zZWN0cyA9IDA7CisJaW50IHJ2OworCXVuc2lnbmVkIGludCB4OworCisJZm9yICh4ID0gMDsgeCA8IGJpLT5iaV9sZW47IHgrKykgeworCQljb25zdCB1OCAqb3JpZyA9IGJpLT5iaV9iaC0+Yl9kYXRhICsgYmktPmJpX29mZnNldCArIHg7CisJCWNvbnN0IHU4ICpjbG9uZSA9IGJpLT5iaV9jbG9uZSArIGJpLT5iaV9vZmZzZXQgKyB4OworCQl1OCBkaWZmID0gfigqb3JpZyB8ICgqb3JpZyA+PiAxKSkgJiAoKmNsb25lIHwgKCpjbG9uZSA+PiAxKSk7CisJCWRpZmYgJj0gMHg1NTsKKwkJaWYgKGRpZmYgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlibGsgPSBvZmZzZXQgKyAoKGJpLT5iaV9zdGFydCArIHgpICogR0ZTMl9OQkJZKTsKKwkJYmxrICo9IHNlY3RzX3Blcl9ibGs7IC8qIGNvbnZlcnQgdG8gc2VjdG9ycyAqLworCQl3aGlsZShkaWZmKSB7CisJCQlpZiAoZGlmZiAmIDEpIHsKKwkJCQlpZiAobnJfc2VjdHMgPT0gMCkKKwkJCQkJZ290byBzdGFydF9uZXdfZXh0ZW50OworCQkJCWlmICgoc3RhcnQgKyBucl9zZWN0cykgIT0gYmxrKSB7CisJCQkJCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsCisJCQkJCQkJICAgIG5yX3NlY3RzLCBHRlBfTk9GUyk7CisJCQkJCWlmIChydikKKwkJCQkJCWdvdG8gZmFpbDsKKwkJCQkJbnJfc2VjdHMgPSAwOworc3RhcnRfbmV3X2V4dGVudDoKKwkJCQkJc3RhcnQgPSBibGs7CisJCQkJfQorCQkJCW5yX3NlY3RzICs9IHNlY3RzX3Blcl9ibGs7CisJCQl9CisJCQlkaWZmID4+PSAyOworCQkJYmxrICs9IHNlY3RzX3Blcl9ibGs7CisJCX0KKwl9CisJaWYgKG5yX3NlY3RzKSB7CisJCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIG5yX3NlY3RzLCBHRlBfTk9GUyk7CisJCWlmIChydikKKwkJCWdvdG8gZmFpbDsKKwl9CisJcmV0dXJuOworZmFpbDoKKwlmc193YXJuKHNkcCwgImVycm9yICVkIG9uIGRpc2NhcmQgcmVxdWVzdCwgdHVybmluZyBkaXNjYXJkcyBvZmYgZm9yIHRoaXMgZmlsZXN5c3RlbSIsIHJ2KTsKKwlzZHAtPnNkX2FyZ3MuYXJfZGlzY2FyZCA9IDA7Cit9CisKIHZvaWQgZ2ZzMl9yZ3JwX3JlcG9saXNoX2Nsb25lcyhzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcmdkLT5yZF9zYmQ7CkBAIC04NDEsNiArOTAyLDggQEAKIAkJc3RydWN0IGdmczJfYml0bWFwICpiaSA9IHJnZC0+cmRfYml0cyArIHg7CiAJCWlmICghYmktPmJpX2Nsb25lKQogCQkJY29udGludWU7CisJCWlmIChzZHAtPnNkX2FyZ3MuYXJfZGlzY2FyZCkKKwkJCWdmczJfcmdycF9zZW5kX2Rpc2NhcmRzKHNkcCwgcmdkLT5yZF9kYXRhMCwgYmkpOwogCQltZW1jcHkoYmktPmJpX2Nsb25lICsgYmktPmJpX29mZnNldCwKIAkJICAgICAgIGJpLT5iaV9iaC0+Yl9kYXRhICsgYmktPmJpX29mZnNldCwgYmktPmJpX2xlbik7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5jIGIvZnMvZ2ZzMi9zdXBlci5jCmluZGV4IDE0MWI3ODEuLjYwMTkxM2UgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuYworKysgYi9mcy9nZnMyL3N1cGVyLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zMzksNyArMzM4LDYgQEAKIAkJCQkgICAgc3RydWN0IGdmczJfaG9sZGVyICp0X2doKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgamlfZ2g7CiAJc3RydWN0IGdmczJfamRlc2MgKmpkOwogCXN0cnVjdCBsZmNjICpsZmNjOwogCUxJU1RfSEVBRChsaXN0KTsKQEAgLTM4Nyw3ICszODUsNiBAQAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmbGZjYy0+Z2gpOwogCQlrZnJlZShsZmNjKTsKIAl9Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmppX2doKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuaCBiL2ZzL2dmczIvc3VwZXIuaAppbmRleCBmNmI4YjAwLi5iNTY0MTNlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmgKKysrIGIvZnMvZ2ZzMi9zdXBlci5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKLXZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmczJfamluZGV4X3NpemUoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CkBAIC0yNywyNyArMjcsMjkgQEAKIAogdm9pZCBnZnMyX2ppbmRleF9mcmVlKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAotc3RydWN0IGdmczJfamRlc2MgKmdmczJfamRlc2NfZmluZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCk7Ci1pbnQgZ2ZzMl9qZGVzY19jaGVjayhzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQpOworZXh0ZXJuIGludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MsIGNoYXIgKmRhdGEpOwogCi1pbnQgZ2ZzMl9sb29rdXBfaW5fbWFzdGVyX2RpcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZmlsZW5hbWUsCi0JCQkgICAgICBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqKmlwcCk7CitleHRlcm4gc3RydWN0IGdmczJfamRlc2MgKmdmczJfamRlc2NfZmluZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCk7CitleHRlcm4gaW50IGdmczJfamRlc2NfY2hlY2soc3RydWN0IGdmczJfamRlc2MgKmpkKTsKIAotaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfbG9va3VwX2luX21hc3Rlcl9kaXIoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOwogCi1pbnQgZ2ZzMl9zdGF0ZnNfaW5pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci12b2lkIGdmczJfc3RhdGZzX2NoYW5nZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCXM2NCB0b3RhbCwgczY0IGZyZWUsIHM2NCBkaW5vZGVzKTsKLWludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiBpbnQgZ2ZzMl9tYWtlX2ZzX3J3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAotaW50IGdmczJfZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLXZvaWQgZ2ZzMl91bmZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl9zdGF0ZnNfY2hhbmdlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzNjQgdG90YWwsIHM2NCBmcmVlLAorCQkJICAgICAgIHM2NCBkaW5vZGVzKTsKK2V4dGVybiBpbnQgZ2ZzMl9zdGF0ZnNfc3luYyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisKK2V4dGVybiBpbnQgZ2ZzMl9mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl91bmZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnZnMyX2ZzX3R5cGU7CiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2ZzMm1ldGFfZnNfdHlwZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZ2ZzMl9leHBvcnRfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdmczJfc3VwZXJfb3BzOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBnZnMyX2RvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGdmczJfZG9wczsKIAogI2VuZGlmIC8qIF9fU1VQRVJfRE9UX0hfXyAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCAyNmMxZmE3Li43NjU1ZjUwMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0yNSw2ICsyNCw3IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJnbG9wcy5oIgogCiBzdGF0aWMgc3NpemVfdCBpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CkBAIC0zNyw2ICszNywzMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzZHAtPnNkX2ZzbmFtZSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl91dWlkX3ZhbGlkKGNvbnN0IHU4ICp1dWlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHV1aWRbaV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHV1aWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCWJ1ZlswXSA9ICdcMCc7CisJaWYgKCFnZnMyX3V1aWRfdmFsaWQodXVpZCkpCisJCXJldHVybiAwOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtIgorCQkJIiUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYJTAyWCUwMlglMDJYJTAyWFxuIiwKKwkJCXV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sIHV1aWRbNF0sIHV1aWRbNV0sCisJCQl1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVpZFsxMV0sCisJCQl1dWlkWzEyXSwgdXVpZFsxM10sIHV1aWRbMTRdLCB1dWlkWzE1XSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGZyZWV6ZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtMTQ4LDYgKzE3Miw0NiBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGRlbW90ZV9ycV9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKKwljb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbG9wczsKKwl1bnNpZ25lZCBpbnQgZ2xtb2RlOworCXVuc2lnbmVkIGludCBnbHR5cGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGdsbnVtOworCWNoYXIgbW9kZVsxNl07CisJaW50IHJ2OworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXJ2ID0gc3NjYW5mKGJ1ZiwgIiV1OiVsbHUgJTE1cyIsICZnbHR5cGUsICZnbG51bSwKKwkJICAgIG1vZGUpOworCWlmIChydiAhPSAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJjbXAobW9kZSwgIkVYIikgPT0gMCkKKwkJZ2xtb2RlID0gTE1fU1RfVU5MT0NLRUQ7CisJZWxzZSBpZiAoKHN0cmNtcChtb2RlLCAiQ1ciKSA9PSAwKSB8fCAoc3RyY21wKG1vZGUsICJERiIpID09IDApKQorCQlnbG1vZGUgPSBMTV9TVF9ERUZFUlJFRDsKKwllbHNlIGlmICgoc3RyY21wKG1vZGUsICJQUiIpID09IDApIHx8IChzdHJjbXAobW9kZSwgIlNIIikgPT0gMCkpCisJCWdsbW9kZSA9IExNX1NUX1NIQVJFRDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGdsdHlwZSA+IExNX1RZUEVfSk9VUk5BTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZ2xvcHMgPSBnZnMyX2dsb3BzX2xpc3RbZ2x0eXBlXTsKKwlpZiAoZ2xvcHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnYgPSBnZnMyX2dsb2NrX2dldChzZHAsIGdsbnVtLCBnbG9wcywgMCwgJmdsKTsKKwlpZiAocnYpCisJCXJldHVybiBydjsKKwlnZnMyX2dsb2NrX2NiKGdsLCBnbG1vZGUpOworCWdmczJfZ2xvY2tfcHV0KGdsKTsKKwlyZXR1cm4gbGVuOworfQorCiBzdHJ1Y3QgZ2ZzMl9hdHRyIHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZnMyX3NiZCAqLCBjaGFyICopOwpAQCAtMTU5LDIyICsyMjMsMjYgQEAKIAogR0ZTMl9BVFRSKGlkLCAgICAgICAgICAgICAgICAgIDA0NDQsIGlkX3Nob3csICAgICAgIE5VTEwpOwogR0ZTMl9BVFRSKGZzbmFtZSwgICAgICAgICAgICAgIDA0NDQsIGZzbmFtZV9zaG93LCAgIE5VTEwpOworR0ZTMl9BVFRSKHV1aWQsICAgICAgICAgICAgICAgIDA0NDQsIHV1aWRfc2hvdywgICAgIE5VTEwpOwogR0ZTMl9BVFRSKGZyZWV6ZSwgICAgICAgICAgICAgIDA2NDQsIGZyZWV6ZV9zaG93LCAgIGZyZWV6ZV9zdG9yZSk7CiBHRlMyX0FUVFIod2l0aGRyYXcsICAgICAgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgd2l0aGRyYXdfc3RvcmUpOwogR0ZTMl9BVFRSKHN0YXRmc19zeW5jLCAgICAgICAgIDAyMDAsIE5VTEwsICAgICAgICAgIHN0YXRmc19zeW5jX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9zeW5jLCAgICAgICAgICAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9zeW5jX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9yZWZyZXNoX3VzZXIsICAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9yZWZyZXNoX3VzZXJfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3JlZnJlc2hfZ3JvdXAsIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3JlZnJlc2hfZ3JvdXBfc3RvcmUpOworR0ZTMl9BVFRSKGRlbW90ZV9ycSwgICAgICAgICAgIDAyMDAsIE5VTEwsCSAgICBkZW1vdGVfcnFfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ2ZzMl9hdHRyc1tdID0gewogCSZnZnMyX2F0dHJfaWQuYXR0ciwKIAkmZ2ZzMl9hdHRyX2ZzbmFtZS5hdHRyLAorCSZnZnMyX2F0dHJfdXVpZC5hdHRyLAogCSZnZnMyX2F0dHJfZnJlZXplLmF0dHIsCiAJJmdmczJfYXR0cl93aXRoZHJhdy5hdHRyLAogCSZnZnMyX2F0dHJfc3RhdGZzX3N5bmMuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3N5bmMuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3JlZnJlc2hfdXNlci5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfcmVmcmVzaF9ncm91cC5hdHRyLAorCSZnZnMyX2F0dHJfZGVtb3RlX3JxLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTIyNCwxNCArMjkyLDE0NSBAQAogCiBMT0NLU1RSVUNUX0FUVFIoamlkLCAgICAgICIldVxuIik7CiBMT0NLU1RSVUNUX0FUVFIoZmlyc3QsICAgICIldVxuIik7Ci1MT0NLU1RSVUNUX0FUVFIobHZiX3NpemUsICIldVxuIik7Ci1MT0NLU1RSVUNUX0FUVFIoZmxhZ3MsICAgICIlZFxuIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsb2Nrc3RydWN0X2F0dHJzW10gPSB7CiAJJmxvY2tzdHJ1Y3RfYXR0cl9qaWQuYXR0ciwKIAkmbG9ja3N0cnVjdF9hdHRyX2ZpcnN0LmF0dHIsCi0JJmxvY2tzdHJ1Y3RfYXR0cl9sdmJfc2l6ZS5hdHRyLAotCSZsb2Nrc3RydWN0X2F0dHJfZmxhZ3MuYXR0ciwKKwlOVUxMLAorfTsKKworLyoKKyAqIGxvY2tfbW9kdWxlLiBPcmlnaW5hbGx5IGZyb20gbG9ja19kbG0KKyAqLworCitzdGF0aWMgc3NpemVfdCBwcm90b19uYW1lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqb3BzID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wczsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3BzLT5sbV9wcm90b19uYW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgYmxvY2tfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3NpemVfdCByZXQ7CisJaW50IHZhbCA9IDA7CisKKwlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKSkKKwkJdmFsID0gMTsKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsb2NrX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzc2l6ZV90IHJldCA9IGxlbjsKKwlpbnQgdmFsOworCisJdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOworCisJaWYgKHZhbCA9PSAxKQorCQlzZXRfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncyk7CisJZWxzZSBpZiAodmFsID09IDApIHsKKwkJY2xlYXJfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCWdmczJfZ2xvY2tfdGhhdyhzZHApOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxraWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGxzLT5sc19pZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxrZmlyc3Rfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19maXJzdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpcnN0X2RvbmVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19maXJzdF9kb25lKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkKTsKK30KKworc3RhdGljIHZvaWQgZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKQoreworCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKKworCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShqZCwgJnNkcC0+c2RfamluZGV4X2xpc3QsIGpkX2xpc3QpIHsKKwkJaWYgKGpkLT5qZF9qaWQgIT0gamlkKQorCQkJY29udGludWU7CisJCWpkLT5qZF9kaXJ0eSA9IDE7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWxzLT5sc19yZWNvdmVyX2ppZCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKwlnZnMyX2pkZXNjX21ha2VfZGlydHkoc2RwLCBscy0+bHNfcmVjb3Zlcl9qaWQpOworCWlmIChzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpCisJCXdha2VfdXBfcHJvY2VzcyhzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfZG9uZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkX2RvbmUpOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0YXR1c19zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkX3N0YXR1cyk7Cit9CisKK3N0cnVjdCBnZGxtX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworI2RlZmluZSBHRExNX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCitzdGF0aWMgc3RydWN0IGdkbG1fYXR0ciBnZGxtX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK0dETE1fQVRUUihwcm90b19uYW1lLCAgICAgMDQ0NCwgcHJvdG9fbmFtZV9zaG93LCAgICAgTlVMTCk7CitHRExNX0FUVFIoYmxvY2ssICAgICAgICAgIDA2NDQsIGJsb2NrX3Nob3csICAgICAgICAgIGJsb2NrX3N0b3JlKTsKK0dETE1fQVRUUih3aXRoZHJhdywgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgICAgICAgd2l0aGRyYXdfc3RvcmUpOworR0RMTV9BVFRSKGlkLCAgICAgICAgICAgICAwNDQ0LCBsa2lkX3Nob3csICAgICAgICAgICBOVUxMKTsKK0dETE1fQVRUUihmaXJzdCwgICAgICAgICAgMDQ0NCwgbGtmaXJzdF9zaG93LCAgICAgICAgTlVMTCk7CitHRExNX0FUVFIoZmlyc3RfZG9uZSwgICAgIDA0NDQsIGZpcnN0X2RvbmVfc2hvdywgICAgIE5VTEwpOworR0RMTV9BVFRSKHJlY292ZXIsICAgICAgICAwNjQ0LCByZWNvdmVyX3Nob3csICAgICAgICByZWNvdmVyX3N0b3JlKTsKK0dETE1fQVRUUihyZWNvdmVyX2RvbmUsICAgMDQ0NCwgcmVjb3Zlcl9kb25lX3Nob3csICAgTlVMTCk7CitHRExNX0FUVFIocmVjb3Zlcl9zdGF0dXMsIDA0NDQsIHJlY292ZXJfc3RhdHVzX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG9ja19tb2R1bGVfYXR0cnNbXSA9IHsKKwkmZ2RsbV9hdHRyX3Byb3RvX25hbWUuYXR0ciwKKwkmZ2RsbV9hdHRyX2Jsb2NrLmF0dHIsCisJJmdkbG1fYXR0cl93aXRoZHJhdy5hdHRyLAorCSZnZGxtX2F0dHJfaWQuYXR0ciwKKwkmbG9ja3N0cnVjdF9hdHRyX2ppZC5hdHRyLAorCSZnZGxtX2F0dHJfZmlyc3QuYXR0ciwKKwkmZ2RsbV9hdHRyX2ZpcnN0X2RvbmUuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXIuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXJfZG9uZS5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlcl9zdGF0dXMuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzczLDcgKzU3Miw2IEBACiBUVU5FX0FUVFIoc3RhdGZzX3Nsb3csIDApOwogVFVORV9BVFRSKG5ld19maWxlc19qZGF0YSwgMCk7CiBUVU5FX0FUVFIocXVvdGFfc2ltdWxfc3luYywgMSk7Ci1UVU5FX0FUVFIocXVvdGFfY2FjaGVfc2VjcywgMSk7CiBUVU5FX0FUVFIoc3RhbGxfc2VjcywgMSk7CiBUVU5FX0FUVFIoc3RhdGZzX3F1YW50dW0sIDEpOwogVFVORV9BVFRSX0RBRU1PTihyZWNvdmVyZF9zZWNzLCByZWNvdmVyZF9wcm9jZXNzKTsKQEAgLTM4OSw3ICs1ODcsNiBAQAogCSZ0dW5lX2F0dHJfY29tcGxhaW5fc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhdGZzX3Nsb3cuYXR0ciwKIAkmdHVuZV9hdHRyX3F1b3RhX3NpbXVsX3N5bmMuYXR0ciwKLQkmdHVuZV9hdHRyX3F1b3RhX2NhY2hlX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YWxsX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19xdWFudHVtLmF0dHIsCiAJJnR1bmVfYXR0cl9yZWNvdmVyZF9zZWNzLmF0dHIsCkBAIC00MTQsNiArNjExLDExIEBACiAJLmF0dHJzID0gdHVuZV9hdHRycywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxvY2tfbW9kdWxlX2dyb3VwID0geworCS5uYW1lID0gImxvY2tfbW9kdWxlIiwKKwkuYXR0cnMgPSBsb2NrX21vZHVsZV9hdHRycywKK307CisKIGludCBnZnMyX3N5c19mc19hZGQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJaW50IGVycm9yOwpAQCAtNDM2LDkgKzYzOCwxNSBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2FyZ3M7CiAKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja19tb2R1bGVfZ3JvdXApOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX3R1bmU7CisKIAlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfdHVuZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJnR1bmVfZ3JvdXApOwogZmFpbF9hcmdzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmYXJnc19ncm91cCk7CiBmYWlsX2xvY2tzdHJ1Y3Q6CkBAIC00NTUsMTUgKzY2MywyNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZhcmdzX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tzdHJ1Y3RfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja19tb2R1bGVfZ3JvdXApOwogCWtvYmplY3RfcHV0KCZzZHAtPnNkX2tvYmopOwogfQogCisKIHN0YXRpYyBpbnQgZ2ZzMl91ZXZlbnQoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkgICAgICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZnMyX3NiZCwgc2Rfa29iaik7CisJY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLVEFCTEU9JXMiLCBzZHAtPnNkX3RhYmxlX25hbWUpOwogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tQUk9UTz0lcyIsIHNkcC0+c2RfcHJvdG9fbmFtZSk7CisJaWYgKGdmczJfdXVpZF92YWxpZCh1dWlkKSkgeworCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJVVUlEPSUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlgtIgorCQkJICAgICAgICIlMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiLAorCQkJICAgICAgIHV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sIHV1aWRbNF0sCisJCQkgICAgICAgdXVpZFs1XSwgdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwKKwkJCSAgICAgICB1dWlkWzEwXSwgdXVpZFsxMV0sIHV1aWRbMTJdLCB1dWlkWzEzXSwKKwkJCSAgICAgICB1dWlkWzE0XSwgdXVpZFsxNV0pOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi90cmFucy5jIGIvZnMvZ2ZzMi90cmFucy5jCmluZGV4IGY2NzdiOGEuLjA1Mzc1MmQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdHJhbnMuYworKysgYi9mcy9nZnMyL3RyYW5zLmMKQEAgLTEyLDkgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtODgsOSArODcsMTEgQEAKIAogCWlmICghdHItPnRyX3RvdWNoZWQpIHsKIAkJZ2ZzMl9sb2dfcmVsZWFzZShzZHAsIHRyLT50cl9yZXNlcnZlZCk7Ci0JCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKLQkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7Ci0JCWtmcmVlKHRyKTsKKwkJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7CisJCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7CisJCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKKwkJCWtmcmVlKHRyKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xMDYsOSArMTA3LDExIEBACiAJfQogCiAJZ2ZzMl9sb2dfY29tbWl0KHNkcCwgdHIpOwotICAgICAgICBnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7Ci0gICAgICAgIGdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOwotICAgICAgICBrZnJlZSh0cik7CisJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7CisJCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKKwkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7CisJCWtmcmVlKHRyKTsKKwl9CiAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19TWU5DSFJPTk9VUykKIAkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdXRpbC5jIGIvZnMvZ2ZzMi91dGlsLmMKaW5kZXggMzc0ZjUwZS4uOWQxMmIxMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi91dGlsLmMKKysrIGIvZnMvZ2ZzMi91dGlsLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMzUsNiArMzQsOCBAQAogCiBpbnQgZ2ZzMl9sbV93aXRoZHJhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBscy0+bHNfb3BzOwogCXZhX2xpc3QgYXJnczsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQpAQCAtNDcsOCArNDgsMTIgQEAKIAlmc19lcnIoc2RwLCAiYWJvdXQgdG8gd2l0aGRyYXcgdGhpcyBmaWxlIHN5c3RlbVxuIik7CiAJQlVHX09OKHNkcC0+c2RfYXJncy5hcl9kZWJ1Zyk7CiAKLQlmc19lcnIoc2RwLCAidGVsbGluZyBMTSB0byB3aXRoZHJhd1xuIik7Ci0JZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7CisJa29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9PRkZMSU5FKTsKKworCWlmIChsbS0+bG1fdW5tb3VudCkgeworCQlmc19lcnIoc2RwLCAidGVsbGluZyBMTSB0byB1bm1vdW50XG4iKTsKKwkJbG0tPmxtX3VubW91bnQoc2RwKTsKKwl9CiAJZnNfZXJyKHNkcCwgIndpdGhkcmF3blxuIik7CiAJZHVtcF9zdGFjaygpOwogCmRpZmYgLS1naXQgYS9mcy9oZnMvaGZzX2ZzLmggYi9mcy9oZnMvaGZzX2ZzLmgKaW5kZXggOTk1NTIzMi4uMDUyMzg3ZSAxMDA2NDQKLS0tIGEvZnMvaGZzL2hmc19mcy5oCisrKyBiL2ZzL2hmcy9oZnNfZnMuaApAQCAtMjEzLDcgKzIxMyw3IEBACiBleHRlcm4gaW50IGhmc19wYXJ0X2ZpbmQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY3Rvcl90ICosIHNlY3Rvcl90ICopOwogCiAvKiBzdHJpbmcuYyAqLwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc19kZW50cnlfb3BlcmF0aW9uczsKIAogZXh0ZXJuIGludCBoZnNfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKIGV4dGVybiBpbnQgaGZzX3N0cmNtcChjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCwKZGlmZiAtLWdpdCBhL2ZzL2hmcy9zeXNkZXAuYyBiL2ZzL2hmcy9zeXNkZXAuYwppbmRleCA1YmY4OWVjLi43NDc4ZjVjIDEwMDY0NAotLS0gYS9mcy9oZnMvc3lzZGVwLmMKKysrIGIvZnMvaGZzL3N5c2RlcC5jCkBAIC0zMSw3ICszMSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNfZGVudHJ5X29wZXJhdGlvbnMgPQorY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc19kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IGhmc19yZXZhbGlkYXRlX2RlbnRyeSwKIAkuZF9oYXNoCQk9IGhmc19oYXNoX2RlbnRyeSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggZjAyN2E5MC4uNWMxMGQ4MCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKKysrIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTMyNyw3ICszMjcsNyBAQAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOwogCiB2b2lkIGhmc3BsdXNfaW5vZGVfcmVhZF9mb3JrKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqKTsKIHZvaWQgaGZzcGx1c19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCBmMTA1ZWU5Li4xYmNmNTk3IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkud3JpdGVwYWdlcwk9IGhmc3BsdXNfd3JpdGVwYWdlcywKIH07CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZSAgICA9IGhmc3BsdXNfY29tcGFyZV9kZW50cnksCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwppbmRleCA1YzUzOGUwLi5mZTAyYWQ0IDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAKICNkZWZpbmUgRklMRV9IT1NURlNfSShmaWxlKSBIT1NURlNfSSgoZmlsZSktPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpCiAKLWludCBob3N0ZnNfZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBob3N0ZnNfZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiAxOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaG9zdGZzX2RlbnRyeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhvc3Rmc19kZW50cnlfb3BzID0gewogCS5kX2RlbGV0ZQkJPSBob3N0ZnNfZF9kZWxldGUsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2RlbnRyeS5jIGIvZnMvaHBmcy9kZW50cnkuYwppbmRleCAwODMxOTEyLi45NDBkNmQxIDEwMDY0NAotLS0gYS9mcy9ocGZzL2RlbnRyeS5jCisrKyBiL2ZzL2hwZnMvZGVudHJ5LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBocGZzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBocGZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gaHBmc19oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlCT0gaHBmc19jb21wYXJlX2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCA4MjZmYjBiLi5kMDZkNmQyIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC0xNDcsMTMgKzE0OCwxMyBAQAogCWlub2RlLT5pX2NkZXYgPSBOVUxMOwogCWlub2RlLT5pX3JkZXYgPSAwOwogCWlub2RlLT5kaXJ0aWVkX3doZW4gPSAwOwotCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpIHsKLQkJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKQotCQkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOwotCQllbHNlCi0JCQlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCAoaW5vZGUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCisJaWYgKHNlY3VyaXR5X2lub2RlX2FsbG9jKGlub2RlKSkKKwkJZ290byBvdXRfZnJlZV9pbm9kZTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlfaW50ZWdyaXR5ICovCisJaWYgKGltYV9pbm9kZV9hbGxvYyhpbm9kZSkpCisJCWdvdG8gb3V0X2ZyZWVfc2VjdXJpdHk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfbG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmlub2RlLT5pX2xvY2ssICZzYi0+c190eXBlLT5pX2xvY2tfa2V5KTsKQEAgLTE4OSw2ICsxOTAsMTUgQEAKIAlpbm9kZS0+aV9tYXBwaW5nID0gbWFwcGluZzsKIAogCXJldHVybiBpbm9kZTsKKworb3V0X2ZyZWVfc2VjdXJpdHk6CisJc2VjdXJpdHlfaW5vZGVfZnJlZShpbm9kZSk7CitvdXRfZnJlZV9pbm9kZToKKwlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUpCisJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKKwllbHNlCisJCWttZW1fY2FjaGVfZnJlZShpbm9kZV9jYWNoZXAsIChpbm9kZSkpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X2Fsd2F5cyk7CiAKQEAgLTI4NCw3ICsyOTQsNyBAQAogCUJVR19PTighKGlub2RlLT5pX3N0YXRlICYgSV9GUkVFSU5HKSk7CiAJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9DTEVBUik7CiAJaW5vZGVfc3luY193YWl0KGlub2RlKTsKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZSkKIAkJaW5vZGUtPmlfc2ItPnNfb3AtPmNsZWFyX2lub2RlKGlub2RlKTsKIAlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9iZGV2KQpAQCAtMzU2LDYgKzM2Niw4IEBACiAJCWlmICh0bXAgPT0gaGVhZCkKIAkJCWJyZWFrOwogCQlpbm9kZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW5vZGUsIGlfc2JfbGlzdCk7CisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKQorCQkJY29udGludWU7CiAJCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CiAJCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgewogCQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCBkaXNwb3NlKTsKQEAgLTExNTgsNyArMTE3MCw3IEBACiAJaWYgKG9wLT5kZWxldGVfaW5vZGUpIHsKIAkJdm9pZCAoKmRlbGV0ZSkoc3RydWN0IGlub2RlICopID0gb3AtPmRlbGV0ZV9pbm9kZTsKIAkJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKQotCQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJCS8qIEZpbGVzeXN0ZW1zIGltcGxlbWVudGluZyB0aGVpciBvd24KIAkJICogc19vcC0+ZGVsZXRlX2lub2RlIGFyZSByZXF1aXJlZCB0byBjYWxsCiAJCSAqIHRydW5jYXRlX2lub2RlX3BhZ2VzIGFuZCBjbGVhcl9pbm9kZSgpCkBAIC0xMjkwLDYgKzEzMDIsNDAgQEAKIH0KIEVYUE9SVF9TWU1CT0woYm1hcCk7CiAKKy8qCisgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMgYXRpbWUgaXMKKyAqIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yIG10aW1lIG9yIGlmIGF0IGxlYXN0IGEgZGF5IGhhcworICogcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGF0aW1lIHVwZGF0ZS4KKyAqLworc3RhdGljIGludCByZWxhdGltZV9uZWVkX3VwZGF0ZShzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IHRpbWVzcGVjIG5vdykKK3sKKworCWlmICghKG1udC0+bW50X2ZsYWdzICYgTU5UX1JFTEFUSU1FKSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBJcyBtdGltZSB5b3VuZ2VyIHRoYW4gYXRpbWU/IElmIHllcywgdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICh0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9tdGltZSwgJmlub2RlLT5pX2F0aW1lKSA+PSAwKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIGN0aW1lIHlvdW5nZXIgdGhhbiBhdGltZT8gSWYgeWVzLCB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX2N0aW1lLCAmaW5vZGUtPmlfYXRpbWUpID49IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJcyB0aGUgcHJldmlvdXMgYXRpbWUgdmFsdWUgb2xkZXIgdGhhbiBhIGRheT8gSWYgeWVzLAorCSAqIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAoKGxvbmcpKG5vdy50dl9zZWMgLSBpbm9kZS0+aV9hdGltZS50dl9zZWMpID49IDI0KjYwKjYwKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIEdvb2QsIHdlIGNhbiBza2lwIHRoZSBhdGltZSB1cGRhdGU6CisJICovCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICoJdG91Y2hfYXRpbWUJLQl1cGRhdGUgdGhlIGFjY2VzcyB0aW1lCiAgKglAbW50OiBtb3VudCB0aGUgaW5vZGUgaXMgYWNjZXNzZWQgb24KQEAgLTEzMTcsMTcgKzEzNjMsMTIgQEAKIAkJZ290byBvdXQ7CiAJaWYgKChtbnQtPm1udF9mbGFncyAmIE1OVF9OT0RJUkFUSU1FKSAmJiBTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlnb3RvIG91dDsKLQlpZiAobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpIHsKLQkJLyoKLQkJICogV2l0aCByZWxhdGl2ZSBhdGltZSwgb25seSB1cGRhdGUgYXRpbWUgaWYgdGhlIHByZXZpb3VzCi0JCSAqIGF0aW1lIGlzIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yIG10aW1lLgotCQkgKi8KLQkJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLCAmaW5vZGUtPmlfYXRpbWUpIDwgMCAmJgotCQkgICAgdGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfY3RpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQogCiAJbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKworCWlmICghcmVsYXRpbWVfbmVlZF91cGRhdGUobW50LCBpbm9kZSwgbm93KSkKKwkJZ290byBvdXQ7CisKIAlpZiAodGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2F0aW1lLCAmbm93KSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDBkOGFjNDkuLjUzYWY4ODUgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtNDMsNyArNDMsNyBAQAogLyoKICAqIGV4ZWMuYwogICovCi1leHRlcm4gdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICopOwogCiAvKgogICogbmFtZXNwYWNlLmMKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDI0MGVjNjM5Li5hYzJkNDdlIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTQwNCwxMCArNDA0LDEyIEBACiAJaWYgKE9fTk9OQkxPQ0sgIT0gT19OREVMQVkpCiAJCWZsYWcgfD0gT19OREVMQVk7CiAjZW5kaWYKKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJaWYgKG9uKQogCQlmaWxwLT5mX2ZsYWdzIHw9IGZsYWc7CiAJZWxzZQogCQlmaWxwLT5mX2ZsYWdzICY9IH5mbGFnOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDI1LDE4ICs0MjcsMTIgQEAKIAkvKiBEaWQgRkFTWU5DIHN0YXRlIGNoYW5nZSA/ICovCiAJaWYgKChmbGFnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpIHsKIAkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZmFzeW5jKQorCQkJLyogZmFzeW5jKCkgYWRqdXN0cyBmaWxwLT5mX2ZsYWdzICovCiAJCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgb24pOwogCQllbHNlCiAJCQllcnJvciA9IC1FTk9UVFk7CiAJfQotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKG9uKQotCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKLQllbHNlCi0JCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycm9yIDwgMCA/IGVycm9yIDogMDsKIH0KIAogc3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTQ5OSwxNyArNDk1LDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBGSU9OQklPOgotCQkvKiBCS0wgbmVlZGVkIHRvIGF2b2lkIHJhY2VzIHR3ZWFraW5nIGZfZmxhZ3MgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJZXJyb3IgPSBpb2N0bF9maW9uYmlvKGZpbHAsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGSU9BU1lOQzoKLQkJLyogQktMIG5lZWRlZCB0byBhdm9pZCByYWNlcyB0d2Vha2luZyBmX2ZsYWdzICovCi0JCWxvY2tfa2VybmVsKCk7CiAJCWVycm9yID0gaW9jdGxfZmlvYXN5bmMoZmQsIGZpbHAsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGSU9RU0laRToKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDYxNDdlYzMuLjEzZDJlZGQgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtMTE0LDcgKzExNCw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaXNvZnNfZGVudHJ5X29wc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBpc29mc19kZW50cnlfb3BzW10gPSB7CiAJewogCQkuZF9oYXNoCQk9IGlzb2ZzX2hhc2gsCiAJCS5kX2NvbXBhcmUJPSBpc29mc19kZW50cnlfY21wLApkaWZmIC0tZ2l0IGEvZnMvamZzL2FjbC5jIGIvZnMvamZzL2FjbC5jCmluZGV4IGQzZTVjMzMuLmExNjZjMTYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9hY2wuYworKysgYi9mcy9qZnMvYWNsLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBpYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKIAkgICAgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEICYmIGlhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkgewotCQlpZiAoRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGlhdHRyKSkKKwkJaWYgKHZmc19kcV90cmFuc2Zlcihpbm9kZSwgaWF0dHIpKQogCQkJcmV0dXJuIC1FRFFVT1Q7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvaW5vZGUuYyBiL2ZzL2pmcy9pbm9kZS5jCmluZGV4IGIwMGVlOWYuLmIyYWUxOTAgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pbm9kZS5jCisrKyBiL2ZzL2pmcy9pbm9kZS5jCkBAIC0xNTgsOSArMTU4LDkgQEAKIAkJLyoKIAkJICogRnJlZSB0aGUgaW5vZGUgZnJvbSB0aGUgcXVvdGEgYWxsb2NhdGlvbi4KIAkJICovCi0JCURRVU9UX0lOSVQoaW5vZGUpOwotCQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQkJRFFVT1RfRFJPUChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKKwkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCQl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJfQogCiAJY2xlYXJfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kdHJlZS5jIGIvZnMvamZzL2pmc19kdHJlZS5jCmluZGV4IDRkY2MwNTguLjkyNTg3MWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZHRyZWUuYworKysgYi9mcy9qZnMvamZzX2R0cmVlLmMKQEAgLTM4MSwxMCArMzgxLDEwIEBACiAJCSAqIEl0J3MgdGltZSB0byBtb3ZlIHRoZSBpbmxpbmUgdGFibGUgdG8gYW4gZXh0ZXJuYWwKIAkJICogcGFnZSBhbmQgYmVnaW4gdG8gYnVpbGQgdGhlIHh0cmVlCiAJCSAqLwotCQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIHNiaS0+bmJwZXJwYWdlKSkKKwkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgc2JpLT5uYnBlcnBhZ2UpKQogCQkJZ290byBjbGVhbl91cDsKIAkJaWYgKGRiQWxsb2MoaXAsIDAsIHNiaS0+bmJwZXJwYWdlLCAmeGFkZHIpKSB7Ci0JCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBzYmktPm5icGVycGFnZSk7CisJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgc2JpLT5uYnBlcnBhZ2UpOwogCQkJZ290byBjbGVhbl91cDsKIAkJfQogCkBAIC00MDgsNyArNDA4LDcgQEAKIAkJCW1lbWNweSgmamZzX2lwLT5pX2RpcnRhYmxlLCB0ZW1wX3RhYmxlLAogCQkJICAgICAgIHNpemVvZiAodGVtcF90YWJsZSkpOwogCQkJZGJGcmVlKGlwLCB4YWRkciwgc2JpLT5uYnBlcnBhZ2UpOwotCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgc2JpLT5uYnBlcnBhZ2UpOworCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHNiaS0+bmJwZXJwYWdlKTsKIAkJCWdvdG8gY2xlYW5fdXA7CiAJCX0KIAkJaXAtPmlfc2l6ZSA9IFBTSVpFOwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAkJCW4gPSB4bGVuOwogCiAJCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQkJaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBuKSkgeworCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBuKSkgewogCQkJcmMgPSAtRURRVU9UOwogCQkJZ290byBleHRlbmRPdXQ7CiAJCX0KQEAgLTEzMDgsNyArMTMwOCw3IEBACiAKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uICovCiAJaWYgKHJjICYmIHF1b3RhX2FsbG9jYXRpb24pCi0JCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHF1b3RhX2FsbG9jYXRpb24pOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgcXVvdGFfYWxsb2NhdGlvbik7CiAKICAgICAgIGR0U3BsaXRVcF9FeGl0OgogCkBAIC0xMzY5LDcgKzEzNjksNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIGxlbmd0aFBYRChweGQpKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKSkgewogCQlyZWxlYXNlX21ldGFwYWdlKHJtcCk7CiAJCXJldHVybiAtRURRVU9UOwogCX0KQEAgLTE5MTYsNyArMTkxNiw3IEBACiAJcnAgPSBybXAtPmRhdGE7CiAKIAkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKIAkJcmVsZWFzZV9tZXRhcGFnZShybXApOwogCQlyZXR1cm4gLUVEUVVPVDsKIAl9CkBAIC0yMjg3LDcgKzIyODcsNyBAQAogCXhsZW4gPSBsZW5ndGhQWEQoJmZwLT5oZWFkZXIuc2VsZik7CiAKIAkvKiBGcmVlIHF1b3RhIGFsbG9jYXRpb24uICovCi0JRFFVT1RfRlJFRV9CTE9DSyhpcCwgeGxlbik7CisJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHhsZW4pOwogCiAJLyogZnJlZS9pbnZhbGlkYXRlIGl0cyBidWZmZXIgcGFnZSAqLwogCWRpc2NhcmRfbWV0YXBhZ2UoZm1wKTsKQEAgLTIzNjMsNyArMjM2Myw3IEBACiAJCQkJeGxlbiA9IGxlbmd0aFBYRCgmcC0+aGVhZGVyLnNlbGYpOwogCiAJCQkJLyogRnJlZSBxdW90YSBhbGxvY2F0aW9uICovCi0JCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgeGxlbik7CisJCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHhsZW4pOwogCiAJCQkJLyogZnJlZS9pbnZhbGlkYXRlIGl0cyBidWZmZXIgcGFnZSAqLwogCQkJCWRpc2NhcmRfbWV0YXBhZ2UobXApOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggN2FlMWUzMi4uMTY5ODAyZSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBueGxlbikpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBueGxlbikpIHsKIAkJZGJGcmVlKGlwLCBueGFkZHIsIChzNjQpIG54bGVuKTsKIAkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCQlyZXR1cm4gLUVEUVVPVDsKQEAgLTE2NCw3ICsxNjQsNyBAQAogCSAqLwogCWlmIChyYykgewogCQlkYkZyZWUoaXAsIG54YWRkciwgbnhsZW4pOwotCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBueGxlbik7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBueGxlbik7CiAJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJcmV0dXJuIChyYyk7CiAJfQpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCWdvdG8gZXhpdDsKIAogCS8qIEFsbG9jYXQgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbnhsZW4pKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbnhsZW4pKSB7CiAJCWRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSBueGxlbik7CiAJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJcmV0dXJuIC1FRFFVT1Q7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJLyogZXh0ZW5kIHRoZSBleHRlbnQgKi8KIAkJaWYgKChyYyA9IHh0RXh0ZW5kKDAsIGlwLCB4b2ZmICsgeGxlbiwgKGludCkgbmV4dGVuZCwgMCkpKSB7CiAJCQlkYkZyZWUoaXAsIHhhZGRyICsgeGxlbiwgZGVsdGEpOwotCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgbnhsZW4pOworCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG54bGVuKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0gZWxzZSB7CkBAIC0zMDgsNyArMzA4LDcgQEAKIAkJICovCiAJCWlmICgocmMgPSB4dFRhaWxnYXRlKDAsIGlwLCB4b2ZmLCAoaW50KSBudGFpbCwgbnhhZGRyLCAwKSkpIHsKIAkJCWRiRnJlZShpcCwgbnhhZGRyLCBueGxlbik7Ci0JCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBueGxlbik7CisJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbnhsZW4pOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbm9kZS5jIGIvZnMvamZzL2pmc19pbm9kZS5jCmluZGV4IGQ0ZDE0MmMuLmRjMGUwMjEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW5vZGUuYworKysgYi9mcy9qZnMvamZzX2lub2RlLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCS8qCiAJICogQWxsb2NhdGUgaW5vZGUgdG8gcXVvdGEuCiAJICovCi0JaWYgKERRVU9UX0FMTE9DX0lOT0RFKGlub2RlKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CiAJCXJjID0gLUVEUVVPVDsKIAkJZ290byBmYWlsX2Ryb3A7CiAJfQpAQCAtMTYyLDcgKzE2Miw3IEBACiAJcmV0dXJuIGlub2RlOwogCiBmYWlsX2Ryb3A6Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIGZhaWxfdW5sb2NrOgogCWlub2RlLT5pX25saW5rID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW5vZGUuaCBiL2ZzL2pmcy9qZnNfaW5vZGUuaAppbmRleCBhZGIyZmFmLi4xZWZmN2RiIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2lub2RlLmgKKysrIGIvZnMvamZzL2pmc19pbm9kZS5oCkBAIC00Nyw1ICs0Nyw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpmc19maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnM7CiAjZW5kaWYJCQkJLyogX0hfSkZTX0lOT0RFICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3h0cmVlLmMgYi9mcy9qZnMvamZzX3h0cmVlLmMKaW5kZXggYWUzYWNhZi4uYTI3ZTI2YyAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwpAQCAtODQ2LDEwICs4NDYsMTAgQEAKIAkJCWhpbnQgPSBhZGRyZXNzWEFEKHhhZCkgKyBsZW5ndGhYQUQoeGFkKSAtIDE7CiAJCX0gZWxzZQogCQkJaGludCA9IDA7Ci0JCWlmICgocmMgPSBEUVVPVF9BTExPQ19CTE9DSyhpcCwgeGxlbikpKQorCQlpZiAoKHJjID0gdmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCB4bGVuKSkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKChyYyA9IGRiQWxsb2MoaXAsIGhpbnQsIChzNjQpIHhsZW4sICZ4YWRkcikpKSB7Ci0JCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCB4bGVuKTsKKwkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCB4bGVuKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtODc4LDcgKzg3OCw3IEBACiAJCQkvKiB1bmRvIGRhdGEgZXh0ZW50IGFsbG9jYXRpb24gKi8KIAkJCWlmICgqeGFkZHJwID09IDApIHsKIAkJCQlkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTsKLQkJCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCB4bGVuKTsKKwkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgeGxlbik7CiAJCQl9CiAJCQlyZXR1cm4gcmM7CiAJCX0KQEAgLTEyNDYsNyArMTI0Niw3IEBACiAJcmJuID0gYWRkcmVzc1BYRChweGQpOwogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CiAJCXJjID0gLUVEUVVPVDsKIAkJZ290byBjbGVhbl91cDsKIAl9CkBAIC0xNDU2LDcgKzE0NTYsNyBAQAogCiAJLyogUm9sbGJhY2sgcXVvdGEgYWxsb2NhdGlvbi4gKi8KIAlpZiAocXVvdGFfYWxsb2NhdGlvbikKLQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgcXVvdGFfYWxsb2NhdGlvbik7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBxdW90YV9hbGxvY2F0aW9uKTsKIAogCXJldHVybiAocmMpOwogfQpAQCAtMTUxMyw3ICsxNTEzLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKIAkJcmVsZWFzZV9tZXRhcGFnZShybXApOwogCQlyZXR1cm4gLUVEUVVPVDsKIAl9CkBAIC0zOTQxLDcgKzM5NDEsNyBAQAogCQlpcC0+aV9zaXplID0gbmV3c2l6ZTsKIAogCS8qIHVwZGF0ZSBxdW90YSBhbGxvY2F0aW9uIHRvIHJlZmxlY3QgZnJlZWQgYmxvY2tzICovCi0JRFFVT1RfRlJFRV9CTE9DSyhpcCwgbmZyZWVkKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbmZyZWVkKTsKIAogCS8qCiAJICogZnJlZSB0bG9jayBvZiBpbnZhbGlkYXRlZCBwYWdlcwpkaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuYwppbmRleCBiNGRlNTZiLi41MTRlZTJlIDEwMDY0NAotLS0gYS9mcy9qZnMvbmFtZWkuYworKysgYi9mcy9qZnMvbmFtZWkuYwpAQCAtMzUsNyArMzUsNyBAQAogLyoKICAqIGZvcndhcmQgcmVmZXJlbmNlcwogICovCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKIAogc3RhdGljIHM2NCBjb21taXRaZXJvTGluayh0aWRfdCwgc3RydWN0IGlub2RlICopOwogCkBAIC0zNTYsNyArMzU2LDcgQEAKIAlqZnNfaW5mbygiamZzX3JtZGlyOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCS8qIEluaXQgaW5vZGUgZm9yIHF1b3RhIG9wZXJhdGlvbnMuICovCi0JRFFVT1RfSU5JVChpcCk7CisJdmZzX2RxX2luaXQoaXApOwogCiAJLyogZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkgdG8gYmUgcmVtb3ZlZCAqLwogCWlmICghZHRFbXB0eShpcCkpIHsKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCWpmc19pbmZvKCJqZnNfdW5saW5rOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCS8qIEluaXQgaW5vZGUgZm9yIHF1b3RhIG9wZXJhdGlvbnMuICovCi0JRFFVT1RfSU5JVChpcCk7CisJdmZzX2RxX2luaXQoaXApOwogCiAJaWYgKChyYyA9IGdldF9VQ1NuYW1lKCZkbmFtZSwgZGVudHJ5KSkpCiAJCWdvdG8gb3V0OwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAl9IGVsc2UgaWYgKG5ld19pcCkgewogCQlJV1JJVEVfTE9DSyhuZXdfaXAsIFJEV1JMT0NLX05PUk1BTCk7CiAJCS8qIEluaXQgaW5vZGUgZm9yIHF1b3RhIG9wZXJhdGlvbnMuICovCi0JCURRVU9UX0lOSVQobmV3X2lwKTsKKwkJdmZzX2RxX2luaXQobmV3X2lwKTsKIAl9CiAKIAkvKgpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zID0KK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX2hhc2ggPSBqZnNfY2lfaGFzaCwKIAkuZF9jb21wYXJlID0gamZzX2NpX2NvbXBhcmUsCmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5jCmluZGV4IDliN2YyY2QuLjYxZGZhODEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy94YXR0ci5jCisrKyBiL2ZzL2pmcy94YXR0ci5jCkBAIC0yNjAsMTQgKzI2MCwxNCBAQAogCW5ibG9ja3MgPSAoc2l6ZSArIChzYi0+c19ibG9ja3NpemUgLSAxKSkgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKIAkvKiBBbGxvY2F0ZSBuZXcgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbmJsb2NrcykpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBuYmxvY2tzKSkgewogCQlyZXR1cm4gLUVEUVVPVDsKIAl9CiAKIAlyYyA9IGRiQWxsb2MoaXAsIElOT0hJTlQoaXApLCBuYmxvY2tzLCAmYmxrbm8pOwogCWlmIChyYykgewogCQkvKlJvbGxiYWNrIHF1b3RhIGFsbG9jYXRpb24uICovCi0JCURRVU9UX0ZSRUVfQkxPQ0soaXAsIG5ibG9ja3MpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbmJsb2Nrcyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTMzMiw3ICszMzIsNyBAQAogCiAgICAgICBmYWlsZWQ6CiAJLyogUm9sbGJhY2sgcXVvdGEgYWxsb2NhdGlvbi4gKi8KLQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBuYmxvY2tzKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbmJsb2Nrcyk7CiAKIAlkYkZyZWUoaXAsIGJsa25vLCBuYmxvY2tzKTsKIAlyZXR1cm4gcmM7CkBAIC01MzgsNyArNTM4LDcgQEAKIAogCWlmIChibG9ja3NfbmVlZGVkID4gY3VycmVudF9ibG9ja3MpIHsKIAkJLyogQWxsb2NhdGUgbmV3IGJsb2NrcyB0byBxdW90YS4gKi8KLQkJaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBibG9ja3NfbmVlZGVkKSkKKwkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgYmxvY2tzX25lZWRlZCkpCiAJCQlyZXR1cm4gLUVEUVVPVDsKIAogCQlxdW90YV9hbGxvY2F0aW9uID0gYmxvY2tzX25lZWRlZDsKQEAgLTYwMiw3ICs2MDIsNyBAQAogICAgICAgY2xlYW5fdXA6CiAJLyogUm9sbGJhY2sgcXVvdGEgYWxsb2NhdGlvbiAqLwogCWlmIChxdW90YV9hbGxvY2F0aW9uKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBxdW90YV9hbGxvY2F0aW9uKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIHF1b3RhX2FsbG9jYXRpb24pOwogCiAJcmV0dXJuIChyYyk7CiB9CkBAIC02NzcsNyArNjc3LDcgQEAKIAogCS8qIElmIG9sZCBibG9ja3MgZXhpc3QsIHRoZXkgbXVzdCBiZSByZW1vdmVkIGZyb20gcXVvdGEgYWxsb2NhdGlvbi4gKi8KIAlpZiAob2xkX2Jsb2NrcykKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgb2xkX2Jsb2Nrcyk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBvbGRfYmxvY2tzKTsKIAogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCA0OWI0NDA5Li40OTEwYTM2IDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqLwogc3RydWN0IGRlbnRyeSAqc2ltcGxlX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlzdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNpbXBsZV9kZW50cnlfb3BlcmF0aW9ucyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNpbXBsZV9kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkJLmRfZGVsZXRlID0gc2ltcGxlX2RlbGV0ZV9kZW50cnksCiAJfTsKIApAQCAtMjQyLDcgKzI0Miw4IEBACiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJvb3QpOwogCXMtPnNfcm9vdCA9IGRlbnRyeTsKIAlzLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXJldHVybiAwOwogCiBFbm9tZW06CiAJdXBfd3JpdGUoJnMtPnNfdW1vdW50KTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGJiYzE1YzIuLmQwNDBjZTEgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgpAQCAtODUwLDYgKzg1MSw4IEBACiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQtPnBhdGguZGVudHJ5LT5kX2lub2RlLAogCQkJCQkgICAgICAgTUFZX0VYRUMpOworCQlpZiAoIWVycikKKwkJCWVyciA9IGltYV9wYXRoX2NoZWNrKCZuZC0+cGF0aCwgTUFZX0VYRUMpOwogIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCkBAIC0xNDcwLDcgKzE0NzMsNyBAQAogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+Y3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBuZCk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKQEAgLTE0ODYsMjkgKzE0ODksMzIgQEAKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRkxOSzoKIAkJcmV0dXJuIC1FTE9PUDsKLQkKLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAoYWNjX21vZGUgJiBNQVlfV1JJVEUpKQotCQlyZXR1cm4gLUVJU0RJUjsKLQotCS8qCi0JICogRklGTydzLCBzb2NrZXRzIGFuZCBkZXZpY2UgZmlsZXMgYXJlIHNwZWNpYWw6IHRoZXkgZG9uJ3QKLQkgKiBhY3R1YWxseSBsaXZlIG9uIHRoZSBmaWxlc3lzdGVtIGl0c2VsZiwgYW5kIGFzIHN1Y2ggeW91Ci0JICogY2FuIHdyaXRlIHRvIHRoZW0gZXZlbiBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkLW9ubHkuCi0JICovCi0JaWYgKFNfSVNGSUZPKGlub2RlLT5pX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLT5pX21vZGUpKSB7Ci0JICAgIAlmbGFnICY9IH5PX1RSVU5DOwotCX0gZWxzZSBpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQ0hSKGlub2RlLT5pX21vZGUpKSB7CisJY2FzZSBTX0lGRElSOgorCQlpZiAoYWNjX21vZGUgJiBNQVlfV1JJVEUpCisJCQlyZXR1cm4gLUVJU0RJUjsKKwkJYnJlYWs7CisJY2FzZSBTX0lGQkxLOgorCWNhc2UgU19JRkNIUjoKIAkJaWYgKHBhdGgtPm1udC0+bW50X2ZsYWdzICYgTU5UX05PREVWKQogCQkJcmV0dXJuIC1FQUNDRVM7Ci0KKwkJLypGQUxMVEhSVSovCisJY2FzZSBTX0lGSUZPOgorCWNhc2UgU19JRlNPQ0s6CiAJCWZsYWcgJj0gfk9fVFJVTkM7CisJCWJyZWFrOwogCX0KIAogCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgYWNjX21vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjayhwYXRoLAorCQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIEFuIGFwcGVuZC1vbmx5IGZpbGUgbXVzdCBiZSBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgZm9yIHdyaXRpbmcuCiAJICovCkBAIC0xNTQ0LDcgKzE1NTAsNyBAQAogCQkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHBhdGgsIDAsCiAJCQkJCSAgICAgICBBVFRSX01USU1FfEFUVFJfQ1RJTUV8QVRUUl9PUEVOKTsKIAkJaWYgKCFlcnJvcikgewotCQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAKIAkJCWVycm9yID0gZG9fdHJ1bmNhdGUoZGVudHJ5LCAwLAogCQkJCQkgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTiwKQEAgLTE1NTUsNyArMTU2MSw3IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJfSBlbHNlCiAJCWlmIChmbGFnICYgRk1PREVfV1JJVEUpCi0JCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJCXZmc19kcV9pbml0KGlub2RlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkzOCw3ICsxOTQ0LDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIAlpZiAoIWVycm9yKQogCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwpAQCAtMjAzNyw3ICsyMDQzLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwpAQCAtMjEyMyw3ICsyMTI5LDcgQEAKIAlpZiAoIWRpci0+aV9vcC0+cm1kaXIpCiAJCXJldHVybiAtRVBFUk07CiAKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAogCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZGVudHJ5X3VuaGFzaChkZW50cnkpOwpAQCAtMjIxMCw3ICsyMjE2LDcgQEAKIAlpZiAoIWRpci0+aV9vcC0+dW5saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JRFFVT1RfSU5JVChkaXIpOworCXZmc19kcV9pbml0KGRpcik7CiAKIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkKQEAgLTIzMjEsNyArMjMyNyw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+c3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKQEAgLTI0MDUsNyArMjQxMSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+bGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCkBAIC0yNjA0LDggKzI2MTAsOCBAQAogCWlmICghb2xkX2Rpci0+aV9vcC0+cmVuYW1lKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JRFFVT1RfSU5JVChvbGRfZGlyKTsKLQlEUVVPVF9JTklUKG5ld19kaXIpOworCXZmc19kcV9pbml0KG9sZF9kaXIpOworCXZmc19kcV9pbml0KG5ld19kaXIpOwogCiAJb2xkX25hbWUgPSBmc25vdGlmeV9vbGRuYW1lX2luaXQob2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IDA2ZjhlNjMuLjBhNDJlMGUgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC0zOTcsMTEgKzM5NywxMCBAQAogCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIH0KIAotaW50IHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQordm9pZCBzaW1wbGVfc2V0X21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAltbnQtPm1udF9zYiA9IHNiOwogCW1udC0+bW50X3Jvb3QgPSBkZ2V0KHNiLT5zX3Jvb3QpOwotCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9zZXRfbW50KTsKQEAgLTc4MCw2ICs3NzksNyBAQAogCQl7IE1OVF9OT0FUSU1FLCAiLG5vYXRpbWUiIH0sCiAJCXsgTU5UX05PRElSQVRJTUUsICIsbm9kaXJhdGltZSIgfSwKIAkJeyBNTlRfUkVMQVRJTUUsICIscmVsYXRpbWUiIH0sCisJCXsgTU5UX1NUUklDVEFUSU1FLCAiLHN0cmljdGF0aW1lIiB9LAogCQl7IDAsIE5VTEwgfQogCX07CiAJY29uc3Qgc3RydWN0IHByb2NfZnNfaW5mbyAqZnNfaW5mb3A7CkBAIC0xOTE5LDYgKzE5MTksOSBAQAogCWlmIChkYXRhX3BhZ2UpCiAJCSgoY2hhciAqKWRhdGFfcGFnZSlbUEFHRV9TSVpFIC0gMV0gPSAwOwogCisJLyogRGVmYXVsdCB0byByZWxhdGltZSAqLworCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CisKIAkvKiBTZXBhcmF0ZSB0aGUgcGVyLW1vdW50cG9pbnQgZmxhZ3MgKi8KIAlpZiAoZmxhZ3MgJiBNU19OT1NVSUQpCiAJCW1udF9mbGFncyB8PSBNTlRfTk9TVUlEOwpAQCAtMTkzMCwxMyArMTkzMywxNCBAQAogCQltbnRfZmxhZ3MgfD0gTU5UX05PQVRJTUU7CiAJaWYgKGZsYWdzICYgTVNfTk9ESVJBVElNRSkKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT0RJUkFUSU1FOwotCWlmIChmbGFncyAmIE1TX1JFTEFUSU1FKQotCQltbnRfZmxhZ3MgfD0gTU5UX1JFTEFUSU1FOworCWlmIChmbGFncyAmIE1TX1NUUklDVEFUSU1FKQorCQltbnRfZmxhZ3MgJj0gfihNTlRfUkVMQVRJTUUgfCBNTlRfTk9BVElNRSk7CiAJaWYgKGZsYWdzICYgTVNfUkRPTkxZKQogCQltbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZOwogCiAJZmxhZ3MgJj0gfihNU19OT1NVSUQgfCBNU19OT0VYRUMgfCBNU19OT0RFViB8IE1TX0FDVElWRSB8Ci0JCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUV8IE1TX0tFUk5NT1VOVCk7CisJCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUV8IE1TX0tFUk5NT1VOVCB8CisJCSAgIE1TX1NUUklDVEFUSU1FKTsKIAogCS8qIC4uLiBhbmQgZ2V0IHRoZSBtb3VudHBvaW50ICovCiAJcmV0dmFsID0ga2Vybl9wYXRoKGRpcl9uYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9kaXIuYyBiL2ZzL25jcGZzL2Rpci5jCmluZGV4IDA3ZTk3MTUuLjljNTkwNzIgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2Rpci5jCisrKyBiL2ZzL25jcGZzL2Rpci5jCkBAIC03OSw3ICs3OSw3IEBACiBzdGF0aWMgaW50IG5jcF9jb21wYXJlX2RlbnRyeSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKIHN0YXRpYyBpbnQgbmNwX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqKTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3BfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3BfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSBuY3BfbG9va3VwX3ZhbGlkYXRlLAogCS5kX2hhc2gJCT0gbmNwX2hhc2hfZGVudHJ5LApAQCAtODcsNyArODcsNyBAQAogCS5kX2RlbGV0ZQk9IG5jcF9kZWxldGVfZGVudHJ5LAogfTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zID0KK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3Bfcm9vdF9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfaGFzaAkJPSBuY3BfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IG5jcF9jb21wYXJlX2RlbnRyeSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCA2NzIzNjhmLi43OGJmNzJmIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC04OTksNyArODk5LDcgQEAKIAlpcHV0KGlub2RlKTsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IG5mc19sb29rdXBfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBuZnNfZGVudHJ5X2RlbGV0ZSwKIAkuZF9pcHV0CQk9IG5mc19kZW50cnlfaXB1dCwKQEAgLTk2Nyw3ICs5NjcsNyBAQAogI2lmZGVmIENPTkZJR19ORlNfVjQKIHN0YXRpYyBpbnQgbmZzX29wZW5fcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnM0X2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mczRfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IG5mc19vcGVuX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gbmZzX2RlbnRyeV9kZWxldGUsCiAJLmRfaXB1dAkJPSBuZnNfZGVudHJ5X2lwdXQsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCA0ZTRkMzMyLi44NDM0NWRlIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTE3OSw3ICsxNzksNyBAQAogCWludCAoKnJlY292ZXJfbG9jaykoc3RydWN0IG5mczRfc3RhdGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCiAvKiBpbm9kZS5jICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA2ZTUwYWFhLi43ODM3NmI2IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCQkJcHV0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CiAJCQlnb3RvIG91dF9uZnNlcnI7CiAJCX0KLQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKIAl9CiAKIAkvKiBzYW5pdGl6ZSB0aGUgbW9kZSBjaGFuZ2UgKi8KQEAgLTcyMyw3ICs3MjMsNyBAQAogCQllbHNlCiAJCQlmbGFncyA9IE9fV1JPTkxZfE9fTEFSR0VGSUxFOwogCi0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJfQogCSpmaWxwID0gZGVudHJ5X29wZW4oZGdldChkZW50cnkpLCBtbnRnZXQoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KSwKIAkJCSAgICBmbGFncywgY3JlZCk7CkBAIC05OTgsOCArOTk4LDExIEBACiAKIAlpZiAoIUVYX0lTU1lOQyhleHApKQogCQlzdGFibGUgPSAwOwotCWlmIChzdGFibGUgJiYgIUVYX1dHQVRIRVIoZXhwKSkKKwlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpIHsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CisJfQogCiAJLyogV3JpdGUgdGhlIGRhdGEuICovCiAJb2xkZnMgPSBnZXRfZnMoKTsgc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMKaW5kZXggMzMxZjJlOC4uMjIwYzEzZiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuYwpAQCAtMzgwLDYgKzM4MCwxNCBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICp3YXRjaGVzOwogCiAJCS8qCisJCSAqIFdlIGNhbm5vdCBfX2lnZXQoKSBhbiBpbm9kZSBpbiBzdGF0ZSBJX0NMRUFSLCBJX0ZSRUVJTkcsCisJCSAqIElfV0lMTF9GUkVFLCBvciBJX05FVyB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYnkgdGhhdCBwb2ludAorCQkgKiB0aGUgaW5vZGUgY2Fubm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd2F0Y2hlcy4KKwkJICovCisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0NMRUFSfElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQljb250aW51ZTsKKworCQkvKgogCQkgKiBJZiBpX2NvdW50IGlzIHplcm8sIHRoZSBpbm9kZSBjYW5ub3QgaGF2ZSBhbnkgd2F0Y2hlcyBhbmQKIAkJICogZG9pbmcgYW4gX19pZ2V0L2lwdXQgd2l0aCBNU19BQ1RJVkUgY2xlYXIgd291bGQgYWN0dWFsbHkKIAkJICogZXZpY3QgYWxsIGlub2RlcyB3aXRoIHplcm8gaV9jb3VudCBmcm9tIGljYWNoZSB3aGljaCBpcwpAQCAtMzg4LDE0ICszOTYsNiBAQAogCQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpCiAJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBXZSBjYW5ub3QgX19pZ2V0KCkgYW4gaW5vZGUgaW4gc3RhdGUgSV9DTEVBUiwgSV9GUkVFSU5HLCBvcgotCQkgKiBJX1dJTExfRlJFRSB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYnkgdGhhdCBwb2ludCB0aGUgaW5vZGUKLQkJICogY2Fubm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd2F0Y2hlcy4KLQkJICovCi0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0NMRUFSIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpKQotCQkJY29udGludWU7Ci0KIAkJbmVlZF9pcHV0X3RtcCA9IG5lZWRfaXB1dDsKIAkJbmVlZF9pcHV0ID0gTlVMTDsKIAkJLyogSW4gY2FzZSBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RjYWNoZS5jIGIvZnMvb2NmczIvZGNhY2hlLmMKaW5kZXggZTlkN2MyMC4uN2Q2MDQ0OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGNhY2hlLmMKKysrIGIvZnMvb2NmczIvZGNhY2hlLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWRfbW92ZShkZW50cnksIHRhcmdldCk7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBvY2ZzMl9kZW50cnlfb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG9jZnMyX2RlbnRyeV9vcHMgPSB7CiAJLmRfcmV2YWxpZGF0ZQkJPSBvY2ZzMl9kZW50cnlfcmV2YWxpZGF0ZSwKIAkuZF9pcHV0CQkJPSBvY2ZzMl9kZW50cnlfaXB1dCwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kY2FjaGUuaCBiL2ZzL29jZnMyL2RjYWNoZS5oCmluZGV4IGQwNmUxNmMuLmZhYTEyZTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RjYWNoZS5oCisrKyBiL2ZzL29jZnMyL2RjYWNoZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIE9DRlMyX0RDQUNIRV9ICiAjZGVmaW5lIE9DRlMyX0RDQUNIRV9ICiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgb2NmczJfZGVudHJ5X29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgb2NmczJfZGVudHJ5X29wczsKIAogc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrIHsKIAkvKiBVc2UgY291bnQgb2YgZGVudHJ5IGxvY2sgKi8KZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBhM2E3OGNlLi43NWI2MTY3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUoJnBhdGgsIGxlbmd0aCwgMCk7CiAJaWYgKCFlcnJvcikgewotCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJdmZzX2RxX2luaXQoaW5vZGUpOwogCQllcnJvciA9IGRvX3RydW5jYXRlKHBhdGguZGVudHJ5LCBsZW5ndGgsIDAsIE5VTEwpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDZkNzIwMjQuLjM4ZTMzN2QgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXBkZXYtPmRldnQgPSBkZXZ0OwogCiAJLyogZGVsYXkgdWV2ZW50IHVudGlsICdob2xkZXJzJyBzdWJkaXIgaXMgY3JlYXRlZCAqLwotCXBkZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MocGRldiwgMSk7CiAJZXJyID0gZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wdXQ7CkBAIC00MTAsNyArNDEwLDcgQEAKIAlpZiAoIXAtPmhvbGRlcl9kaXIpCiAJCWdvdG8gb3V0X2RlbDsKIAotCXBkZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MocGRldiwgMCk7CiAJaWYgKGZsYWdzICYgQUREUEFSVF9GTEFHX1dIT0xFRElTSykgewogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUocGRldiwgJmRldl9hdHRyX3dob2xlX2Rpc2spOwogCQlpZiAoZXJyKQpAQCAtNDIyLDcgKzQyMiw3IEBACiAJcmN1X2Fzc2lnbl9wb2ludGVyKHB0YmwtPnBhcnRbcGFydG5vXSwgcCk7CiAKIAkvKiBzdXBwcmVzcyB1ZXZlbnQgaWYgdGhlIGRpc2sgc3VwcmVzc2VzIGl0ICovCi0JaWYgKCFkZGV2LT51ZXZlbnRfc3VwcHJlc3MpCisJaWYgKCFkZXZfZ2V0X3VldmVudF9zdXBwcmVzcyhwZGV2KSkKIAkJa29iamVjdF91ZXZlbnQoJnBkZXYtPmtvYmosIEtPQkpfQUREKTsKIAogCXJldHVybiBwOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJZGV2X3NldF9uYW1lKGRkZXYsIGRpc2stPmRpc2tfbmFtZSk7CiAKIAkvKiBkZWxheSB1ZXZlbnRzLCB1bnRpbCB3ZSBzY2FubmVkIHBhcnRpdGlvbiB0YWJsZSAqLwotCWRkZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMSk7CiAKIAlpZiAoZGV2aWNlX2FkZChkZGV2KSkKIAkJcmV0dXJuOwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAKIGV4aXQ6CiAJLyogYW5ub3VuY2UgZGlzayBhZnRlciBwb3NzaWJsZSBwYXJ0aXRpb25zIGFyZSBjcmVhdGVkICovCi0JZGRldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAwKTsKIAlrb2JqZWN0X3VldmVudCgmZGRldi0+a29iaiwgS09CSl9BREQpOwogCiAJLyogYW5ub3VuY2UgcG9zc2libGUgcGFydGl0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9pYm0uYyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKaW5kZXggMWUwNjRjNC4uNDYyOTc2OCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9pYm0uYworKysgYi9mcy9wYXJ0aXRpb25zL2libS5jCkBAIC0yMSwyMCArMjEsMzggQEAKICAqIGNvbXB1dGUgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEKICAqIGN5bC1jeWwtaGVhZC1oZWFkIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIHNlY3Rvcl90CiBjY2hoMmJsayAoc3RydWN0IHZ0b2NfY2NoaCAqcHRyLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykgewotICAgICAgICByZXR1cm4gcHRyLT5jYyAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKwotCSAgICAgICBwdHItPmhoICogZ2VvLT5zZWN0b3JzOworCisJc2VjdG9yX3QgY3lsOworCV9fdTE2IGhlYWQ7CisKKwkvKmRlY29kZSBjeWxpbmRlciBhbmQgaGVhZHMgZm9yIGxhcmdlIHZvbHVtZXMgKi8KKwljeWwgPSBwdHItPmhoICYgMHhGRkYwOworCWN5bCA8PD0gMTI7CisJY3lsIHw9IHB0ci0+Y2M7CisJaGVhZCA9IHB0ci0+aGggJiAweDAwMEY7CisJcmV0dXJuIGN5bCAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKworCSAgICAgICBoZWFkICogZ2VvLT5zZWN0b3JzOwogfQogCiAvKgogICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYQogICogY3lsLWN5bC1oZWFkLWhlYWQtYmxvY2sgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgc2VjdG9yX3QKIGNjaGhiMmJsayAoc3RydWN0IHZ0b2NfY2NoaGIgKnB0ciwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pIHsKLSAgICAgICAgcmV0dXJuIHB0ci0+Y2MgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKLQkJcHRyLT5oaCAqIGdlby0+c2VjdG9ycyArCisKKwlzZWN0b3JfdCBjeWw7CisJX191MTYgaGVhZDsKKworCS8qZGVjb2RlIGN5bGluZGVyIGFuZCBoZWFkcyBmb3IgbGFyZ2Ugdm9sdW1lcyAqLworCWN5bCA9IHB0ci0+aGggJiAweEZGRjA7CisJY3lsIDw8PSAxMjsKKwljeWwgfD0gcHRyLT5jYzsKKwloZWFkID0gcHRyLT5oaCAmIDB4MDAwRjsKKwlyZXR1cm4JY3lsICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCisJCWhlYWQgKiBnZW8tPnNlY3RvcnMgKwogCQlwdHItPmI7CiB9CiAKQEAgLTQzLDE0ICs2MSwxNSBAQAogaW50CiBpYm1fcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0JaW50IGJsb2Nrc2l6ZSwgb2Zmc2V0LCBzaXplLHJlczsKLQlsb2ZmX3QgaV9zaXplOworCWludCBibG9ja3NpemUsIHJlczsKKwlsb2ZmX3QgaV9zaXplLCBvZmZzZXQsIHNpemUsIGZtdF9zaXplOwogCWRhc2RfaW5mb3JtYXRpb24yX3QgKmluZm87CiAJc3RydWN0IGhkX2dlb21ldHJ5ICpnZW87CiAJY2hhciB0eXBlWzVdID0gezAsfTsKIAljaGFyIG5hbWVbN10gPSB7MCx9OwogCXVuaW9uIGxhYmVsX3QgewotCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwgdm9sOworCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfY2RsIHZvbDsKKwkJc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2xkbCBsbng7CiAJCXN0cnVjdCB2dG9jX2Ntc19sYWJlbCBjbXM7CiAJfSAqbGFiZWw7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKQEAgLTg1LDE0ICsxMDQsMTYgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9yZWFkZXJyOwogCi0Jc3RybmNweSAodHlwZSwgZGF0YSwgNCk7Ci0JaWYgKCghaW5mby0+RkJBX2xheW91dCkgJiYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkpCi0JCXN0cm5jcHkobmFtZSwgZGF0YSArIDgsIDYpOwotCWVsc2UKLQkJc3RybmNweShuYW1lLCBkYXRhICsgNCwgNik7CiAJbWVtY3B5KGxhYmVsLCBkYXRhLCBzaXplb2YodW5pb24gbGFiZWxfdCkpOwogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCisJaWYgKCghaW5mby0+RkJBX2xheW91dCkgJiYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkpIHsKKwkJc3RybmNweSh0eXBlLCBsYWJlbC0+dm9sLnZvbGxibCwgNCk7CisJCXN0cm5jcHkobmFtZSwgbGFiZWwtPnZvbC52b2xpZCwgNik7CisJfSBlbHNlIHsKKwkJc3RybmNweSh0eXBlLCBsYWJlbC0+bG54LnZvbGxibCwgNCk7CisJCXN0cm5jcHkobmFtZSwgbGFiZWwtPmxueC52b2xpZCwgNik7CisJfQogCUVCQ0FTQyh0eXBlLCA0KTsKIAlFQkNBU0MobmFtZSwgNik7CiAKQEAgLTExMCwzNiArMTMxLDU0IEBACiAJCQkvKgogCQkJICogVk0gc3R5bGUgQ01TMSBsYWJlbGVkIGRpc2sKIAkJCSAqLworCQkJYmxvY2tzaXplID0gbGFiZWwtPmNtcy5ibG9ja19zaXplOwogCQkJaWYgKGxhYmVsLT5jbXMuZGlza19vZmZzZXQgIT0gMCkgewogCQkJCXByaW50aygiQ01TMS8lOHMoTURTSyk6IiwgbmFtZSk7CiAJCQkJLyogZGlzayBpcyByZXNlcnZlZCBtaW5pZGlzayAqLwotCQkJCWJsb2Nrc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfc2l6ZTsKIAkJCQlvZmZzZXQgPSBsYWJlbC0+Y21zLmRpc2tfb2Zmc2V0OwogCQkJCXNpemUgPSAobGFiZWwtPmNtcy5ibG9ja19jb3VudCAtIDEpCiAJCQkJCSogKGJsb2Nrc2l6ZSA+PiA5KTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKCJDTVMxLyU4czoiLCBuYW1lKTsKIAkJCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfY291bnQKKwkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwogCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIE9sZCBzdHlsZSBMTlgxIG9yIHVubGFiZWxlZCBkaXNrCi0JCQkgKi8KLQkJCWlmIChzdHJuY21wKHR5cGUsICJMTlgxIiwgNCkgPT0gMCkKLQkJCQlwcmludGsgKCJMTlgxLyU4czoiLCBuYW1lKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIihub25sKSIpOwotCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7Ci0JCQlzaXplID0gaV9zaXplID4+IDk7Ci0JCX0KLQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKIAkJCQkgICAgICBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJuY21wKHR5cGUsICJMTlgxIiwgNCkgPT0gMCkgeworCQkJCXByaW50aygiTE5YMS8lOHM6IiwgbmFtZSk7CisJCQkJaWYgKGxhYmVsLT5sbngubGRsX3ZlcnNpb24gPT0gMHhmMikgeworCQkJCQlmbXRfc2l6ZSA9IGxhYmVsLT5sbnguZm9ybWF0dGVkX2Jsb2NrcworCQkJCQkJKiAoYmxvY2tzaXplID4+IDkpOworCQkJCX0gZWxzZSBpZiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSB7CisJCQkJCS8qIGZvcm1hdGVkIHcvbyBsYXJnZSB2b2x1bWUgc3VwcG9ydCAqLworCQkJCQlmbXRfc2l6ZSA9IGdlby0+Y3lsaW5kZXJzICogZ2VvLT5oZWFkcworCQkJCQkgICAgICAqIGdlby0+c2VjdG9ycyAqIChibG9ja3NpemUgPj4gOSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogb2xkIGxhYmVsIGFuZCBubyB1c2FibGUgZGlzayBnZW9tZXRyeQorCQkJCQkgKiAoZS5nLiBESUFHKSAqLworCQkJCQlmbXRfc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCX0KKwkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJaWYgKGZtdF9zaXplIDwgc2l6ZSkKKwkJCQkJc2l6ZSA9IGZtdF9zaXplOworCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiB1bmxhYmVsZWQgZGlzayAqLworCQkJCXByaW50aygiKG5vbmwpIik7CisJCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOworCQkJfQorCQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCisJCQkJICAgICAgc2l6ZS1vZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSk7CisJCX0KIAl9IGVsc2UgaWYgKGluZm8tPmZvcm1hdCA9PSBEQVNEX0ZPUk1BVF9DREwpIHsKIAkJLyoKIAkJICogTmV3IHN0eWxlIENETCBmb3JtYXR0ZWQgZGlzawogCQkgKi8KLQkJdW5zaWduZWQgaW50IGJsazsKKwkJc2VjdG9yX3QgYmxrOwogCQlpbnQgY291bnRlcjsKIAogCQkvKgpAQCAtMTY2LDcgKzIwNSw4IEBACiAJCQkJLyogc2tpcCBGTVQ0IC8gRk1UNSAvIEZNVDcgbGFiZWxzICovCiAJCQkJaWYgKGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzQnXQogCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc1J10KLQkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNyddKSB7CisJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzcnXQorCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc5J10pIHsKIAkJCQkJYmxrKys7CiAJCQkJCWRhdGEgPSByZWFkX2Rldl9zZWN0b3IoYmRldiwgYmxrICoKIAkJCQkJCQkgICAgICAgKGJsb2Nrc2l6ZS81MTIpLApAQCAtMTc0LDggKzIxNCw5IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAotCQkJCS8qIG9ubHkgRk1UMSB2YWxpZCBhdCB0aGlzIHBvaW50ICovCi0JCQkJaWYgKGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzEnXSkKKwkJCQkvKiBvbmx5IEZNVDEgYW5kIDggbGFiZWxzIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KKwkJCQlpZiAoZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snMSddICYmCisJCQkJICAgIGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzgnXSkKIAkJCQkJYnJlYWs7CiAKIAkJCQkvKiBPSywgd2UgZ290IHZhbGlkIHBhcnRpdGlvbiBkYXRhICovCmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggMTRmNTAyYi4uNGFmN2FhNSAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNjY3LDEwICs2NjcsNyBAQAogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTY4NCwxMCArNjgxLDcgQEAKIAlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY193cml0ZXJzKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC03MDYsMTEgKzcwMCw3IEBACiAJCQlmYXN5bmNfaGVscGVyKC0xLCBmaWxwLCAwLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCX0KIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC04NzAsNyArODYwLDcgQEAKIAkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpcGVmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUJPSBwaXBlZnNfZGVsZXRlX2RlbnRyeSwKIAkuZF9kbmFtZQk9IHBpcGVmc19kbmFtZSwKIH07CkBAIC0xMDM0LDExICsxMDI0LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBkb19waXBlKGludCAqZmQpCi17Ci0JcmV0dXJuIGRvX3BpcGVfZmxhZ3MoZmQsIDApOwotfQotCiAvKgogICogc3lzX3BpcGUoKSBpcyB0aGUgbm9ybWFsIEMgY2FsbGluZyBzdGFuZGFyZCBmb3IgY3JlYXRpbmcKICAqIGEgcGlwZS4gSXQncyBub3QgdGhlIHdheSBVbml4IHRyYWRpdGlvbmFsbHkgZG9lcyB0aGlzLCB0aG91Z2guCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGJlYWEwY2UuLmUwYWZkMzIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xNDYsMTUgKzE0NiwyMiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmc19zdHJ1Y3QgKmdldF9mc19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIGludCBnZXRfZnNfcGF0aChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwYXRoICpwYXRoLCBib29sIHJvb3QpCiB7CiAJc3RydWN0IGZzX3N0cnVjdCAqZnM7CisJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CisKIAl0YXNrX2xvY2sodGFzayk7CiAJZnMgPSB0YXNrLT5mczsKLQlpZihmcykKLQkJYXRvbWljX2luYygmZnMtPmNvdW50KTsKKwlpZiAoZnMpIHsKKwkJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJCSpwYXRoID0gcm9vdCA/IGZzLT5yb290IDogZnMtPnB3ZDsKKwkJcGF0aF9nZXQocGF0aCk7CisJCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7CisJCXJlc3VsdCA9IDA7CisJfQogCXRhc2tfdW5sb2NrKHRhc2spOwotCXJldHVybiBmczsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGdldF9ucl90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtMTcyLDQyICsxNzksMjQgQEAKIHN0YXRpYyBpbnQgcHJvY19jd2RfbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IE5VTEw7CiAJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CiAKIAlpZiAodGFzaykgewotCQlmcyA9IGdldF9mc19zdHJ1Y3QodGFzayk7CisJCXJlc3VsdCA9IGdldF9mc19wYXRoKHRhc2ssIHBhdGgsIDApOwogCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJfQotCWlmIChmcykgewotCQlyZWFkX2xvY2soJmZzLT5sb2NrKTsKLQkJKnBhdGggPSBmcy0+cHdkOwotCQlwYXRoX2dldCgmZnMtPnB3ZCk7Ci0JCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7Ci0JCXJlc3VsdCA9IDA7Ci0JCXB1dF9mc19zdHJ1Y3QoZnMpOwotCX0KIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IHByb2Nfcm9vdF9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYXRoICpwYXRoKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gTlVMTDsKIAlpbnQgcmVzdWx0ID0gLUVOT0VOVDsKIAogCWlmICh0YXNrKSB7Ci0JCWZzID0gZ2V0X2ZzX3N0cnVjdCh0YXNrKTsKKwkJcmVzdWx0ID0gZ2V0X2ZzX3BhdGgodGFzaywgcGF0aCwgMSk7CiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAl9Ci0JaWYgKGZzKSB7Ci0JCXJlYWRfbG9jaygmZnMtPmxvY2spOwotCQkqcGF0aCA9IGZzLT5yb290OwotCQlwYXRoX2dldCgmZnMtPnJvb3QpOwotCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOwotCQlyZXN1bHQgPSAwOwotCQlwdXRfZnNfc3RydWN0KGZzKTsKLQl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTk2LDcgKzU4NSw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CiAJc3RydWN0IG5zcHJveHkgKm5zcDsKIAlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMgPSBOVUxMOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gTlVMTDsKIAlzdHJ1Y3QgcGF0aCByb290OwogCXN0cnVjdCBwcm9jX21vdW50cyAqcDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKQEAgLTYxMCwyMiArNTk4LDE2IEBACiAJCQkJZ2V0X21udF9ucyhucyk7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWlmIChucykKLQkJCWZzID0gZ2V0X2ZzX3N0cnVjdCh0YXNrKTsKKwkJaWYgKG5zICYmIGdldF9mc19wYXRoKHRhc2ssICZyb290LCAxKSA9PSAwKQorCQkJcmV0ID0gMDsKIAkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCX0KIAogCWlmICghbnMpCiAJCWdvdG8gZXJyOwotCWlmICghZnMpCisJaWYgKHJldCkKIAkJZ290byBlcnJfcHV0X25zOwogCi0JcmVhZF9sb2NrKCZmcy0+bG9jayk7Ci0Jcm9vdCA9IGZzLT5yb290OwotCXBhdGhfZ2V0KCZyb290KTsKLQlyZWFkX3VubG9jaygmZnMtPmxvY2spOwotCXB1dF9mc19zdHJ1Y3QoZnMpOwotCiAJcmV0ID0gLUVOT01FTTsKIAlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfbW91bnRzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKQpAQCAtMTU0NSw3ICsxNTI3LDcgQEAKIAlyZXR1cm4gIXByb2NfcGlkKGRlbnRyeS0+ZF9pbm9kZSktPnRhc2tzW1BJRFRZUEVfUElEXS5maXJzdDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSBwaWRfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBwaWRfZGVsZXRlX2RlbnRyeSwKQEAgLTE3MTcsNyArMTY5OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdGlkX2ZkX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdGlkX2ZkX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gdGlkX2ZkX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gcGlkX2RlbGV0ZV9kZW50cnksCkBAIC0yMzM5LDcgKzIzMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2NfYmFzZV9kZW50cnlfb3BlcmF0aW9ucyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2NfYmFzZV9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IHByb2NfYmFzZV9yZXZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IHBpZF9kZWxldGVfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9nZW5lcmljLmMgYi9mcy9wcm9jL2dlbmVyaWMuYwppbmRleCBkYjdmYTVjLi41ZDI5ODllIDEwMDY0NAotLS0gYS9mcy9wcm9jL2dlbmVyaWMuYworKysgYi9mcy9wcm9jL2dlbmVyaWMuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19kZW50cnlfb3BlcmF0aW9ucyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2NfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX2RlbGV0ZQk9IHByb2NfZGVsZXRlX2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMgYi9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKaW5kZXggOTRmY2ZmZi4uOWIxZTRlOSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCisrKyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19zeXNfZGVudHJ5X29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2Nfc3lzX2RlbnRyeV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zeXNfZmlsZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2Nfc3lzX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3N5c19kaXJfZmlsZV9vcGVyYXRpb25zOwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJcmV0dXJuICFzeXNjdGxfaXNfc2VlbihQUk9DX0koZGVudHJ5LT5kX2lub2RlKS0+c3lzY3RsKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19zeXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IHByb2Nfc3lzX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gcHJvY19zeXNfZGVsZXRlLAogCS5kX2NvbXBhcmUJPSBwcm9jX3N5c19jb21wYXJlLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9yb290LmMgYi9mcy9wcm9jL3Jvb3QuYwppbmRleCBmNjI5OWEyLi4xZTE1YTJiIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Jvb3QuYworKysgYi9mcy9wcm9jL3Jvb3QuYwpAQCAtODMsNyArODMsOCBAQAogCQlucy0+cHJvY19tbnQgPSBtbnQ7CiAJfQogCi0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwcm9jX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhLmMgYi9mcy9xdW90YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzZhZGE5Li4wMDAwMDAwCi0tLSBhL2ZzL3F1b3RhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTMgKzAsMCBAQAotLyoKLSAqIFF1b3RhIGNvZGUgbmVjZXNzYXJ5IGV2ZW4gd2hlbiBWRlMgcXVvdGEgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQKLSAqIGludG8gdGhlIGtlcm5lbC4gIFRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcyBvdmVyIGluIGRxdW90LmMsIGhlcmUKLSAqIHdlIGhhdmUgc3ltYm9scyBmb3IgaW5pdGlhbCBxdW90YWN0bCgyKSBoYW5kbGluZywgdGhlIHN5c2N0bCgyKQotICogdmFyaWFibGVzLCBldGMgLSB0aGluZ3MgbmVlZGVkIGV2ZW4gd2hlbiBxdW90YSBzdXBwb3J0IGRpc2FibGVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiBDaGVjayB2YWxpZGl0eSBvZiBnZW5lcmljIHF1b3RhY3RsIGNvbW1hbmRzICovCi1zdGF0aWMgaW50IGdlbmVyaWNfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkKQotewotCWlmICh0eXBlID49IE1BWFFVT1RBUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFzYiAmJiBjbWQgIT0gUV9TWU5DKQotCQlyZXR1cm4gLUVOT0RFVjsKLQkvKiBJcyBvcGVyYXRpb24gc3VwcG9ydGVkPyAqLwotCWlmIChzYiAmJiAhc2ItPnNfcWNvcCkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFFfR0VURk1UOgotCQkJYnJlYWs7Ci0JCWNhc2UgUV9RVU9UQU9OOgotCQkJaWYgKCFzYi0+c19xY29wLT5xdW90YV9vbikKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfUVVPVEFPRkY6Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX29mZikKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfU0VUSU5GTzoKLQkJCWlmICghc2ItPnNfcWNvcC0+c2V0X2luZm8pCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX0dFVElORk86Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF9pbmZvKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9TRVRRVU9UQToKLQkJCWlmICghc2ItPnNfcWNvcC0+c2V0X2RxYmxrKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9HRVRRVU9UQToKLQkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9TWU5DOgotCQkJaWYgKHNiICYmICFzYi0+c19xY29wLT5xdW90YV9zeW5jKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJcyBxdW90YSB0dXJuZWQgb24gZm9yIGNvbW1hbmRzIHdoaWNoIG5lZWQgaXQ/ICovCi0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBRX0dFVEZNVDoKLQkJY2FzZSBRX0dFVElORk86Ci0JCWNhc2UgUV9TRVRJTkZPOgotCQljYXNlIFFfU0VUUVVPVEE6Ci0JCWNhc2UgUV9HRVRRVU9UQToKLQkJCS8qIFRoaXMgaXMganVzdCBpbmZvcm1hdGl2ZSB0ZXN0IHNvIHdlIGFyZSBzYXRpc2ZpZWQgd2l0aG91dCBhIGxvY2sgKi8KLQkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpCi0JCQkJcmV0dXJuIC1FU1JDSDsKLQl9Ci0KLQkvKiBDaGVjayBwcml2aWxlZ2VzICovCi0JaWYgKGNtZCA9PSBRX0dFVFFVT1RBKSB7Ci0JCWlmICgoKHR5cGUgPT0gVVNSUVVPVEEgJiYgY3VycmVudF9ldWlkKCkgIT0gaWQpIHx8Ci0JCSAgICAgKHR5cGUgPT0gR1JQUVVPVEEgJiYgIWluX2Vncm91cF9wKGlkKSkpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JfQotCWVsc2UgaWYgKGNtZCAhPSBRX0dFVEZNVCAmJiBjbWQgIT0gUV9TWU5DICYmIGNtZCAhPSBRX0dFVElORk8pCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQ2hlY2sgdmFsaWRpdHkgb2YgWEZTIFF1b3RhIE1hbmFnZXIgY29tbWFuZHMgKi8KLXN0YXRpYyBpbnQgeHFtX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLCBxaWRfdCBpZCkKLXsKLQlpZiAodHlwZSA+PSBYUU1fTUFYUVVPVEFTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXNiKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIXNiLT5zX3Fjb3ApCi0JCXJldHVybiAtRU5PU1lTOwotCi0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBRX1hRVU9UQU9OOgotCQljYXNlIFFfWFFVT1RBT0ZGOgotCQljYXNlIFFfWFFVT1RBUk06Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPnNldF94c3RhdGUpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX1hHRVRRU1RBVDoKLQkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X3hzdGF0ZSkKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfWFNFVFFMSU06Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPnNldF94cXVvdGEpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX1hHRVRRVU9UQToKLQkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X3hxdW90YSkKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfWFFVT1RBU1lOQzoKLQkJCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQ2hlY2sgcHJpdmlsZWdlcyAqLwotCWlmIChjbWQgPT0gUV9YR0VUUVVPVEEpIHsKLQkJaWYgKCgodHlwZSA9PSBYUU1fVVNSUVVPVEEgJiYgY3VycmVudF9ldWlkKCkgIT0gaWQpIHx8Ci0JCSAgICAgKHR5cGUgPT0gWFFNX0dSUFFVT1RBICYmICFpbl9lZ3JvdXBfcChpZCkpKSAmJgotCQkgICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQl9IGVsc2UgaWYgKGNtZCAhPSBRX1hHRVRRU1RBVCAmJiBjbWQgIT0gUV9YUVVPVEFTWU5DKSB7Ci0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkKQotewotCWludCBlcnJvcjsKLQotCWlmIChYUU1fQ09NTUFORChjbWQpKQotCQllcnJvciA9IHhxbV9xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kLCBpZCk7Ci0JZWxzZQotCQllcnJvciA9IGdlbmVyaWNfcXVvdGFjdGxfdmFsaWQoc2IsIHR5cGUsIGNtZCwgaWQpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc2VjdXJpdHlfcXVvdGFjdGwoY21kLCB0eXBlLCBpZCwgc2IpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgcXVvdGFfc3luY19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlpbnQgY250OwotCi0Jc2ItPnNfcWNvcC0+cXVvdGFfc3luYyhzYiwgdHlwZSk7Ci0KLQlpZiAoc2JfZHFvcHQoc2IpLT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKQotCQlyZXR1cm47Ci0JLyogVGhpcyBpcyBub3QgdmVyeSBjbGV2ZXIgKGFuZCBmYXN0KSBidXQgY3VycmVudGx5IEkgZG9uJ3Qga25vdyBhYm91dAotCSAqIGFueSBvdGhlciBzaW1wbGUgd2F5IG9mIGdldHRpbmcgcXVvdGEgZGF0YSB0byBkaXNrIGFuZCB3ZSBtdXN0IGdldAotCSAqIHRoZW0gdGhlcmUgZm9yIHVzZXJzcGFjZSB0byBiZSB2aXNpYmxlLi4uICovCi0JaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQotCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7Ci0Jc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQotCS8qCi0JICogTm93IHdoZW4gZXZlcnl0aGluZyBpcyB3cml0dGVuIHdlIGNhbiBkaXNjYXJkIHRoZSBwYWdlY2FjaGUgc28KLQkgKiB0aGF0IHVzZXJzcGFjZSBzZWVzIHRoZSBjaGFuZ2VzLgotCSAqLwotCW11dGV4X2xvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKLQkJCWNvbnRpbnVlOwotCQltdXRleF9sb2NrX25lc3RlZCgmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX211dGV4LCBJX01VVEVYX1FVT1RBKTsKLQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9kYXRhLCAwKTsKLQkJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgpOwotCX0KLQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci19Ci0KLXZvaWQgc3luY19kcXVvdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0JaW50IGNudDsKLQotCWlmIChzYikgewotCQlpZiAoc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKLQkJCXF1b3RhX3N5bmNfc2Ioc2IsIHR5cGUpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrKCZzYl9sb2NrKTsKLXJlc3RhcnQ6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7Ci0JCS8qIFRoaXMgdGVzdCBqdXN0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHNvIGl0IG5lZWRuJ3QgYmUgcmVsaWFibGUuLi4gKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCQlpZiAodHlwZSAhPSAtMSAmJiB0eXBlICE9IGNudCkKLQkJCQljb250aW51ZTsKLQkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKLQkJCQljb250aW51ZTsKLQkJCWlmICghaW5mb19kaXJ0eSgmc2JfZHFvcHQoc2IpLT5pbmZvW2NudF0pICYmCi0JCQkgICAgbGlzdF9lbXB0eSgmc2JfZHFvcHQoc2IpLT5pbmZvW2NudF0uZHFpX2RpcnR5X2xpc3QpKQotCQkJCWNvbnRpbnVlOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGNudCA9PSBNQVhRVU9UQVMpCi0JCQljb250aW51ZTsKLQkJc2ItPnNfY291bnQrKzsKLQkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwotCQlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7Ci0JCWlmIChzYi0+c19yb290ICYmIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCi0JCQlxdW90YV9zeW5jX3NiKHNiLCB0eXBlKTsKLQkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKLQkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKLQkJaWYgKF9fcHV0X3N1cGVyX2FuZF9uZWVkX3Jlc3RhcnQoc2IpKQotCQkJZ290byByZXN0YXJ0OwotCX0KLQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci19Ci0KLS8qIENvcHkgcGFyYW1ldGVycyBhbmQgY2FsbCBwcm9wZXIgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbnQgZG9fcXVvdGFjdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkLCB2b2lkIF9fdXNlciAqYWRkcikKLXsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBRX1FVT1RBT046IHsKLQkJCWNoYXIgKnBhdGhuYW1lOwotCi0JCQlpZiAoSVNfRVJSKHBhdGhuYW1lID0gZ2V0bmFtZShhZGRyKSkpCi0JCQkJcmV0dXJuIFBUUl9FUlIocGF0aG5hbWUpOwotCQkJcmV0ID0gc2ItPnNfcWNvcC0+cXVvdGFfb24oc2IsIHR5cGUsIGlkLCBwYXRobmFtZSwgMCk7Ci0JCQlwdXRuYW1lKHBhdGhuYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJY2FzZSBRX1FVT1RBT0ZGOgotCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX29mZihzYiwgdHlwZSwgMCk7Ci0KLQkJY2FzZSBRX0dFVEZNVDogewotCQkJX191MzIgZm10OwotCi0JCQlkb3duX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpIHsKLQkJCQl1cF9yZWFkKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JCQkJcmV0dXJuIC1FU1JDSDsKLQkJCX0KLQkJCWZtdCA9IHNiX2Rxb3B0KHNiKS0+aW5mb1t0eXBlXS5kcWlfZm9ybWF0LT5xZl9mbXRfaWQ7Ci0JCQl1cF9yZWFkKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmbXQsIHNpemVvZihmbXQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9HRVRJTkZPOiB7Ci0JCQlzdHJ1Y3QgaWZfZHFpbmZvIGluZm87Ci0KLQkJCWlmICgocmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2luZm8oc2IsIHR5cGUsICZpbmZvKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFFfU0VUSU5GTzogewotCQkJc3RydWN0IGlmX2RxaW5mbyBpbmZvOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIGFkZHIsIHNpemVvZihpbmZvKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2luZm8oc2IsIHR5cGUsICZpbmZvKTsKLQkJfQotCQljYXNlIFFfR0VUUVVPVEE6IHsKLQkJCXN0cnVjdCBpZl9kcWJsayBpZHE7Ci0KLQkJCWlmICgocmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKHNiLCB0eXBlLCBpZCwgJmlkcSkpKQotCQkJCXJldHVybiByZXQ7Ci0JCQlpZiAoY29weV90b191c2VyKGFkZHIsICZpZHEsIHNpemVvZihpZHEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9TRVRRVU9UQTogewotCQkJc3RydWN0IGlmX2RxYmxrIGlkcTsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZHEsIGFkZHIsIHNpemVvZihpZHEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzYi0+c19xY29wLT5zZXRfZHFibGsoc2IsIHR5cGUsIGlkLCAmaWRxKTsKLQkJfQotCQljYXNlIFFfU1lOQzoKLQkJCXN5bmNfZHF1b3RzKHNiLCB0eXBlKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgUV9YUVVPVEFPTjoKLQkJY2FzZSBRX1hRVU9UQU9GRjoKLQkJY2FzZSBRX1hRVU9UQVJNOiB7Ci0JCQlfX3UzMiBmbGFnczsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFncywgYWRkciwgc2l6ZW9mKGZsYWdzKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X3hzdGF0ZShzYiwgZmxhZ3MsIGNtZCk7Ci0JCX0KLQkJY2FzZSBRX1hHRVRRU1RBVDogewotCQkJc3RydWN0IGZzX3F1b3RhX3N0YXQgZnFzOwotCQkKLQkJCWlmICgocmV0ID0gc2ItPnNfcWNvcC0+Z2V0X3hzdGF0ZShzYiwgJmZxcykpKQotCQkJCXJldHVybiByZXQ7Ci0JCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmcXMsIHNpemVvZihmcXMpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9YU0VUUUxJTTogewotCQkJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmZkcSwgYWRkciwgc2l6ZW9mKGZkcSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkgICAgICAgcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF94cXVvdGEoc2IsIHR5cGUsIGlkLCAmZmRxKTsKLQkJfQotCQljYXNlIFFfWEdFVFFVT1RBOiB7Ci0JCQlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7Ci0KLQkJCWlmICgocmV0ID0gc2ItPnNfcWNvcC0+Z2V0X3hxdW90YShzYiwgdHlwZSwgaWQsICZmZHEpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmZmRxLCBzaXplb2YoZmRxKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFFfWFFVT1RBU1lOQzoKLQkJCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9zeW5jKHNiLCB0eXBlKTsKLQkJLyogV2UgbmV2ZXIgcmVhY2ggaGVyZSB1bmxlc3MgdmFsaWRpdHkgY2hlY2sgaXMgYnJva2VuICovCi0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBsb29rIHVwIGEgc3VwZXJibG9jayBvbiB3aGljaCBxdW90YSBvcHMgd2lsbCBiZSBwZXJmb3JtZWQKLSAqIC0gdXNlIHRoZSBuYW1lIG9mIGEgYmxvY2sgZGV2aWNlIHRvIGZpbmQgdGhlIHN1cGVyYmxvY2sgdGhlcmVvbgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzdXBlcl9ibG9jayAqcXVvdGFjdGxfYmxvY2soY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwpCi17Ci0jaWZkZWYgQ09ORklHX0JMT0NLCi0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwotCWNoYXIgKnRtcCA9IGdldG5hbWUoc3BlY2lhbCk7Ci0KLQlpZiAoSVNfRVJSKHRtcCkpCi0JCXJldHVybiBFUlJfQ0FTVCh0bXApOwotCWJkZXYgPSBsb29rdXBfYmRldih0bXApOwotCXB1dG5hbWUodG1wKTsKLQlpZiAoSVNfRVJSKGJkZXYpKQotCQlyZXR1cm4gRVJSX0NBU1QoYmRldik7Ci0Jc2IgPSBnZXRfc3VwZXIoYmRldik7Ci0JYmRwdXQoYmRldik7Ci0JaWYgKCFzYikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0KLQlyZXR1cm4gc2I7Ci0jZWxzZQotCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuIFRoaXMgY29tbXVuaWNhdGVzIHdpdGgKLSAqIHRoZSB1c2VyLWxldmVsIHByb2dyYW1zLiBDdXJyZW50bHkgdGhpcyBvbmx5IHN1cHBvcnRzIGRpc2txdW90YQotICogY2FsbHMuIE1heWJlIHdlIG5lZWQgdG8gYWRkIHRoZSBwcm9jZXNzIHF1b3RhcyBldGMuIGluIHRoZSBmdXR1cmUsCi0gKiBidXQgd2UgcHJvYmFibHkgc2hvdWxkIHVzZSBybGltaXRzIGZvciB0aGF0LgotICovCi1TWVNDQUxMX0RFRklORTQocXVvdGFjdGwsIHVuc2lnbmVkIGludCwgY21kLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsLAotCQlxaWRfdCwgaWQsIHZvaWQgX191c2VyICosIGFkZHIpCi17Ci0JdWludCBjbWRzLCB0eXBlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBOVUxMOwotCWludCByZXQ7Ci0KLQljbWRzID0gY21kID4+IFNVQkNNRFNISUZUOwotCXR5cGUgPSBjbWQgJiBTVUJDTURNQVNLOwotCi0JaWYgKGNtZHMgIT0gUV9TWU5DIHx8IHNwZWNpYWwpIHsKLQkJc2IgPSBxdW90YWN0bF9ibG9jayhzcGVjaWFsKTsKLQkJaWYgKElTX0VSUihzYikpCi0JCQlyZXR1cm4gUFRSX0VSUihzYik7Ci0JfQotCi0JcmV0ID0gY2hlY2tfcXVvdGFjdGxfdmFsaWQoc2IsIHR5cGUsIGNtZHMsIGlkKTsKLQlpZiAocmV0ID49IDApCi0JCXJldCA9IGRvX3F1b3RhY3RsKHNiLCB0eXBlLCBjbWRzLCBpZCwgYWRkcik7Ci0JaWYgKHNiKQotCQlkcm9wX3N1cGVyKHNiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpCi0vKgotICogVGhpcyBjb2RlIHdvcmtzIG9ubHkgZm9yIDMyIGJpdCBxdW90YSB0b29scyBvdmVyIDY0IGJpdCBPUyAoeDg2XzY0LCBpYTY0KQotICogYW5kIGlzIG5lY2Vzc2FyeSBkdWUgdG8gYWxpZ25tZW50IHByb2JsZW1zLgotICovCi1zdHJ1Y3QgY29tcGF0X2lmX2RxYmxrIHsKLQljb21wYXRfdTY0IGRxYl9iaGFyZGxpbWl0OwotCWNvbXBhdF91NjQgZHFiX2Jzb2Z0bGltaXQ7Ci0JY29tcGF0X3U2NCBkcWJfY3Vyc3BhY2U7Ci0JY29tcGF0X3U2NCBkcWJfaWhhcmRsaW1pdDsKLQljb21wYXRfdTY0IGRxYl9pc29mdGxpbWl0OwotCWNvbXBhdF91NjQgZHFiX2N1cmlub2RlczsKLQljb21wYXRfdTY0IGRxYl9idGltZTsKLQljb21wYXRfdTY0IGRxYl9pdGltZTsKLQljb21wYXRfdWludF90IGRxYl92YWxpZDsKLX07Ci0KLS8qIFhGUyBzdHJ1Y3R1cmVzICovCi1zdHJ1Y3QgY29tcGF0X2ZzX3FmaWxlc3RhdCB7Ci0JY29tcGF0X3U2NCBkcWJfYmhhcmRsaW1pdDsKLQljb21wYXRfdTY0IHFmc19uYmxrczsKLQljb21wYXRfdWludF90IHFmc19uZXh0ZW50czsKLX07Ci0KLXN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCB7Ci0JX19zOAkJcXNfdmVyc2lvbjsKLQlfX3UxNgkJcXNfZmxhZ3M7Ci0JX19zOAkJcXNfcGFkOwotCXN0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0CXFzX3VxdW90YTsKLQlzdHJ1Y3QgY29tcGF0X2ZzX3FmaWxlc3RhdAlxc19ncXVvdGE7Ci0JY29tcGF0X3VpbnRfdAlxc19pbmNvcmVkcXM7Ci0JY29tcGF0X2ludF90CXFzX2J0aW1lbGltaXQ7Ci0JY29tcGF0X2ludF90CXFzX2l0aW1lbGltaXQ7Ci0JY29tcGF0X2ludF90CXFzX3J0YnRpbWVsaW1pdDsKLQlfX3UxNgkJcXNfYndhcm5saW1pdDsKLQlfX3UxNgkJcXNfaXdhcm5saW1pdDsKLX07Ci0KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9xdW90YWN0bCh1bnNpZ25lZCBpbnQgY21kLCBjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCwKLQkJCQkJCXFpZF90IGlkLCB2b2lkIF9fdXNlciAqYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgY21kczsKLQlzdHJ1Y3QgaWZfZHFibGsgX191c2VyICpkcWJsazsKLQlzdHJ1Y3QgY29tcGF0X2lmX2RxYmxrIF9fdXNlciAqY29tcGF0X2RxYmxrOwotCXN0cnVjdCBmc19xdW90YV9zdGF0IF9fdXNlciAqZnNxc3RhdDsKLQlzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQgX191c2VyICpjb21wYXRfZnNxc3RhdDsKLQljb21wYXRfdWludF90IGRhdGE7Ci0JdTE2IHhkYXRhOwotCWxvbmcgcmV0OwotCi0JY21kcyA9IGNtZCA+PiBTVUJDTURTSElGVDsKLQotCXN3aXRjaCAoY21kcykgewotCWNhc2UgUV9HRVRRVU9UQToKLQkJZHFibGsgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGlmX2RxYmxrKSk7Ci0JCWNvbXBhdF9kcWJsayA9IGFkZHI7Ci0JCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBkcWJsayk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQkJaWYgKGNvcHlfaW5fdXNlcihjb21wYXRfZHFibGssIGRxYmxrLCBzaXplb2YoKmNvbXBhdF9kcWJsaykpIHx8Ci0JCQlnZXRfdXNlcihkYXRhLCAmZHFibGstPmRxYl92YWxpZCkgfHwKLQkJCXB1dF91c2VyKGRhdGEsICZjb21wYXRfZHFibGstPmRxYl92YWxpZCkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQljYXNlIFFfU0VUUVVPVEE6Ci0JCWRxYmxrID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBpZl9kcWJsaykpOwotCQljb21wYXRfZHFibGsgPSBhZGRyOwotCQlyZXQgPSAtRUZBVUxUOwotCQlpZiAoY29weV9pbl91c2VyKGRxYmxrLCBjb21wYXRfZHFibGssIHNpemVvZigqY29tcGF0X2RxYmxrKSkgfHwKLQkJCWdldF91c2VyKGRhdGEsICZjb21wYXRfZHFibGstPmRxYl92YWxpZCkgfHwKLQkJCXB1dF91c2VyKGRhdGEsICZkcWJsay0+ZHFiX3ZhbGlkKSkKLQkJCWJyZWFrOwotCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgZHFibGspOwotCQlicmVhazsKLQljYXNlIFFfWEdFVFFTVEFUOgotCQlmc3FzdGF0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBmc19xdW90YV9zdGF0KSk7Ci0JCWNvbXBhdF9mc3FzdGF0ID0gYWRkcjsKLQkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGZzcXN0YXQpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCS8qIENvcHlpbmcgcXNfdmVyc2lvbiwgcXNfZmxhZ3MsIHFzX3BhZCAqLwotCQlpZiAoY29weV9pbl91c2VyKGNvbXBhdF9mc3FzdGF0LCBmc3FzdGF0LAotCQkJb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0LCBxc191cXVvdGEpKSkKLQkJCWJyZWFrOwotCQkvKiBDb3B5aW5nIHFzX3VxdW90YSAqLwotCQlpZiAoY29weV9pbl91c2VyKCZjb21wYXRfZnNxc3RhdC0+cXNfdXF1b3RhLAotCQkJJmZzcXN0YXQtPnFzX3VxdW90YSwKLQkJCXNpemVvZihjb21wYXRfZnNxc3RhdC0+cXNfdXF1b3RhKSkgfHwKLQkJCWdldF91c2VyKGRhdGEsICZmc3FzdGF0LT5xc191cXVvdGEucWZzX25leHRlbnRzKSB8fAotCQkJcHV0X3VzZXIoZGF0YSwgJmNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEucWZzX25leHRlbnRzKSkKLQkJCWJyZWFrOwotCQkvKiBDb3B5aW5nIHFzX2dxdW90YSAqLwotCQlpZiAoY29weV9pbl91c2VyKCZjb21wYXRfZnNxc3RhdC0+cXNfZ3F1b3RhLAotCQkJJmZzcXN0YXQtPnFzX2dxdW90YSwKLQkJCXNpemVvZihjb21wYXRfZnNxc3RhdC0+cXNfZ3F1b3RhKSkgfHwKLQkJCWdldF91c2VyKGRhdGEsICZmc3FzdGF0LT5xc19ncXVvdGEucWZzX25leHRlbnRzKSB8fAotCQkJcHV0X3VzZXIoZGF0YSwgJmNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEucWZzX25leHRlbnRzKSkKLQkJCWJyZWFrOwotCQkvKiBDb3B5aW5nIHRoZSByZXN0ICovCi0JCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc19pbmNvcmVkcXMsCi0JCQkmZnNxc3RhdC0+cXNfaW5jb3JlZHFzLAotCQkJc2l6ZW9mKHN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCkgLQotCQkJb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0LCBxc19pbmNvcmVkcXMpKSB8fAotCQkJZ2V0X3VzZXIoeGRhdGEsICZmc3FzdGF0LT5xc19pd2FybmxpbWl0KSB8fAotCQkJcHV0X3VzZXIoeGRhdGEsICZjb21wYXRfZnNxc3RhdC0+cXNfaXdhcm5saW1pdCkpCi0JCQlicmVhazsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGFkZHIpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9xdW90YS9LY29uZmlnIGIvZnMvcXVvdGEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQ3ZTAxCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvS2NvbmZpZwpAQCAtMCwwICsxLDU5IEBACisjCisjICBRdW90YSBjb25maWd1cmF0aW9uCisjCisKK2NvbmZpZyBRVU9UQQorCWJvb2wgIlF1b3RhIHN1cHBvcnQiCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gc2V0IHBlciB1c2VyIGxpbWl0cyBmb3IgZGlzaworCSAgdXNhZ2UgKGFsc28gY2FsbGVkIGRpc2sgcXVvdGFzKS4gQ3VycmVudGx5LCBpdCB3b3JrcyBmb3IgdGhlCisJICBleHQyLCBleHQzLCBhbmQgcmVpc2VyZnMgZmlsZSBzeXN0ZW0uIGV4dDMgYWxzbyBzdXBwb3J0cyBqb3VybmFsbGVkCisJICBxdW90YXMgZm9yIHdoaWNoIHlvdSBkb24ndCBuZWVkIHRvIHJ1biBxdW90YWNoZWNrKDgpIGFmdGVyIGFuIHVuY2xlYW4KKwkgIHNodXRkb3duLgorCSAgRm9yIGZ1cnRoZXIgZGV0YWlscywgcmVhZCB0aGUgUXVvdGEgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb20KKwkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4sIG9yIHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkCisJICB3aXRoIHRoZSBxdW90YSB0b29scy4gUHJvYmFibHkgdGhlIHF1b3RhIHN1cHBvcnQgaXMgb25seSB1c2VmdWwgZm9yCisJICBtdWx0aSB1c2VyIHN5c3RlbXMuIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBRVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQorCWJvb2wgIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gUVVPVEEgJiYgTkVUCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHF1b3RhIHdhcm5pbmdzIChhYm91dCBleGNlZWRpbmcgc29mdGxpbWl0LCByZWFjaGluZworCSAgaGFyZGxpbWl0LCBldGMuKSB3aWxsIGJlIHJlcG9ydGVkIHRocm91Z2ggbmV0bGluayBpbnRlcmZhY2UuIElmIHVuc3VyZSwKKwkgIHNheSBZLgorCitjb25maWcgUFJJTlRfUVVPVEFfV0FSTklORworCWJvb2wgIlByaW50IHF1b3RhIHdhcm5pbmdzIHRvIGNvbnNvbGUgKE9CU09MRVRFKSIKKwlkZXBlbmRzIG9uIFFVT1RBCisJZGVmYXVsdCB5CisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHF1b3RhIHdhcm5pbmdzIChhYm91dCBleGNlZWRpbmcgc29mdGxpbWl0LCByZWFjaGluZworCSAgaGFyZGxpbWl0LCBldGMuKSB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIHByb2Nlc3MnIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorCSAgTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgY3VycmVudGx5IGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBhd2F5IGluCisJICBmdXR1cmUuIFBsZWFzZSB1c2Ugbm90aWZpY2F0aW9uIHZpYSBuZXRsaW5rIHNvY2tldCBpbnN0ZWFkLgorCisjIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxlY3RlZCB3aGVuIG5lZWRlZC4KK2NvbmZpZyBRVU9UQV9UUkVFCisJIHRyaXN0YXRlCisKK2NvbmZpZyBRRk1UX1YxCisJdHJpc3RhdGUgIk9sZCBxdW90YSBmb3JtYXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFFVT1RBCisJaGVscAorCSAgVGhpcyBxdW90YSBmb3JtYXQgd2FzIChpcykgdXNlZCBieSBrZXJuZWxzIGVhcmxpZXIgdGhhbiAyLjQuMjIuIElmCisJICB5b3UgaGF2ZSBxdW90YSB3b3JraW5nIGFuZCB5b3UgZG9uJ3Qgd2FudCB0byBjb252ZXJ0IHRvIG5ldyBxdW90YQorCSAgZm9ybWF0IHNheSBZIGhlcmUuCisKK2NvbmZpZyBRRk1UX1YyCisJdHJpc3RhdGUgIlF1b3RhIGZvcm1hdCB2MiBzdXBwb3J0IgorCWRlcGVuZHMgb24gUVVPVEEKKwlzZWxlY3QgUVVPVEFfVFJFRQorCWhlbHAKKwkgIFRoaXMgcXVvdGEgZm9ybWF0IGFsbG93cyB1c2luZyBxdW90YXMgd2l0aCAzMi1iaXQgVUlEcy9HSURzLiBJZiB5b3UKKwkgIG5lZWQgdGhpcyBmdW5jdGlvbmFsaXR5IHNheSBZIGhlcmUuCisKK2NvbmZpZyBRVU9UQUNUTAorCWJvb2wKKwlkZXBlbmRzIG9uIFhGU19RVU9UQSB8fCBRVU9UQQorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvTWFrZWZpbGUgYi9mcy9xdW90YS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODVhMDgzCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IGZpbGVzeXN0ZW1zLgorIworIyAxNCBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgorIyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy4KKyMKKworb2JqLXkgOj0KKworb2JqLSQoQ09ORklHX1FVT1RBKQkJKz0gZHF1b3Qubworb2JqLSQoQ09ORklHX1FGTVRfVjEpCQkrPSBxdW90YV92MS5vCitvYmotJChDT05GSUdfUUZNVF9WMikJCSs9IHF1b3RhX3YyLm8KK29iai0kKENPTkZJR19RVU9UQV9UUkVFKQkrPSBxdW90YV90cmVlLm8KK29iai0kKENPTkZJR19RVU9UQUNUTCkJCSs9IHF1b3RhLm8KZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTk2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC0wLDAgKzEsMjYxNyBAQAorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkaXNrcXVvdGEgc3lzdGVtIGZvciB0aGUgTElOVVggb3BlcmF0aW5nIHN5c3RlbS4gUVVPVEEKKyAqIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0Qgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZgorICogY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGdlbmVyaWMgcm91dGluZXMKKyAqIGNhbGxlZCBieSB0aGUgZGlmZmVyZW50IGZpbGVzeXN0ZW1zIG9uIGFsbG9jYXRpb24gb2YgYW4gaW5vZGUgb3IgYmxvY2suCisgKiBUaGVzZSByb3V0aW5lcyB0YWtlIGNhcmUgb2YgdGhlIGFkbWluaXN0cmF0aW9uIG5lZWRlZCB0byBoYXZlIGEgY29uc2lzdGVudAorICogZGlza3F1b3RhIHRyYWNraW5nIHN5c3RlbS4gVGhlIGlkZWFzIG9mIGJvdGggdXNlciBhbmQgZ3JvdXAgcXVvdGFzIGFyZSBiYXNlZAorICogb24gdGhlIE1lbGJvdXJuZSBxdW90YSBzeXN0ZW0gYXMgdXNlZCBvbiBCU0QgZGVyaXZlZCBzeXN0ZW1zLiBUaGUgaW50ZXJuYWwKKyAqIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIG9uZSBvZiB0aGUgc2V2ZXJhbCB2YXJpYW50cyBvZiB0aGUgTElOVVgKKyAqIGlub2RlLXN1YnN5c3RlbSB3aXRoIGFkZGVkIGNvbXBsZXhpdHkgb2YgdGhlIGRpc2txdW90YSBzeXN0ZW0uCisgKiAKKyAqIEF1dGhvcjoJTWFyY28gdmFuIFdpZXJpbmdlbiA8bXZ3QHBsYW5ldHMuZWxtLm5ldD4KKyAqCisgKiBGaXhlczogICBEbWl0cnkgR29yb2RjaGFuaW4gPHBnbWRzZ0BpYmkuY29tPiwgMTEgRmViIDk2CisgKgorICoJCVJldmlzZWQgbGlzdCBtYW5hZ2VtZW50IHRvIGF2b2lkIHJhY2VzCisgKgkJLS0gQmlsbCBIYXdlcywgPHdoYXdlc0BzdGFyLm5ldD4sIDkvOTgKKyAqCisgKgkJRml4ZWQgcmFjZXMgaW4gZHF1b3RfdHJhbnNmZXIoKSwgZHFnZXQoKSBhbmQgZHF1b3RfYWxsb2NfLi4uKCkuCisgKgkJQXMgdGhlIGNvbnNlcXVlbmNlIHRoZSBsb2NraW5nIHdhcyBtb3ZlZCBmcm9tIGRxdW90X2RlY3JfLi4uKCksCisgKgkJZHF1b3RfaW5jcl8uLi4oKSB0byBjYWxsaW5nIGZ1bmN0aW9ucy4KKyAqCQlpbnZhbGlkYXRlX2RxdW90cygpIG5vdyB3cml0ZXMgbW9kaWZpZWQgZHF1b3RzLgorICoJCVNlcmlhbGl6ZWQgcXVvdGFfb2ZmKCkgYW5kIHF1b3RhX29uKCkgZm9yIG1vdW50IHBvaW50LgorICoJCUZpeGVkIGEgZmV3IGJ1Z3MgaW4gZ3Jvd19kcXVvdHMoKS4KKyAqCQlGaXhlZCBkZWFkbG9jayBpbiB3cml0ZV9kcXVvdCgpIC0gd2Ugbm8gbG9uZ2VyIGFjY291bnQgcXVvdGFzIG9uCisgKgkJcXVvdGEgZmlsZXMKKyAqCQlyZW1vdmVfZHF1b3RfcmVmKCkgbW92ZWQgdG8gaW5vZGUuYyAtIGl0IG5vdyB0cmF2ZXJzZXMgdGhyb3VnaCBpbm9kZXMKKyAqCQlhZGRfZHF1b3RfcmVmKCkgcmVzdGFydHMgYWZ0ZXIgYmxvY2tpbmcKKyAqCQlBZGRlZCBjaGVjayBmb3IgYm9ndXMgdWlkIGFuZCBmaXhlZCBjaGVjayBmb3IgZ3JvdXAgaW4gcXVvdGFjdGwuCisgKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCBzcG9uc29yZWQgYnkgU3VTRSBDUiwgMTAtMTEvOTkKKyAqCisgKgkJVXNlZCBzdHJ1Y3QgbGlzdF9oZWFkIGluc3RlYWQgb2Ygb3duIGxpc3Qgc3RydWN0CisgKgkJSW52YWxpZGF0aW9uIG9mIHJlZmVyZW5jZWQgZHF1b3RzIGlzIG5vIGxvbmdlciBwb3NzaWJsZQorICoJCUltcHJvdmVkIGZyZWVfZHF1b3RzIGxpc3QgbWFuYWdlbWVudAorICoJCVF1b3RhIGFuZCBpX2Jsb2NrcyBhcmUgbm93IHVwZGF0ZWQgaW4gb25lIHBsYWNlIHRvIGF2b2lkIHJhY2VzCisgKgkJV2FybmluZ3MgYXJlIG5vdyBkZWxheWVkIHNvIHdlIHdvbid0IGJsb2NrIGluIGNyaXRpY2FsIHNlY3Rpb24KKyAqCQlXcml0ZSB1cGRhdGVkIG5vdCB0byByZXF1aXJlIGRxdW90IGxvY2sKKyAqCQlKYW4gS2FyYSwgPGphY2tAc3VzZS5jej4sIDkvMjAwMAorICoKKyAqCQlBZGRlZCBkeW5hbWljIHF1b3RhIHN0cnVjdHVyZSBhbGxvY2F0aW9uCisgKgkJSmFuIEthcmEgPGphY2tAc3VzZS5jej4gMTIvMjAwMAorICoKKyAqCQlSZXdyaXR0ZW4gcXVvdGEgaW50ZXJmYWNlLiBJbXBsZW1lbnRlZCBuZXcgcXVvdGEgZm9ybWF0IGFuZAorICoJCWZvcm1hdHMgcmVnaXN0ZXJpbmcuCisgKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCAyMDAxLDIwMDIKKyAqCisgKgkJTmV3IFNNUCBsb2NraW5nLgorICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6PiwgMTAvMjAwMgorICoKKyAqCQlBZGRlZCBqb3VybmFsbGVkIHF1b3RhIHN1cHBvcnQsIGZpeCBsb2NrIGludmVyc2lvbiBwcm9ibGVtcworICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6PiwgMjAwMywyMDA0CisgKgorICogKEMpIENvcHlyaWdodCAxOTk0IC0gMTk5NyBNYXJjbyB2YW4gV2llcmluZ2VuIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+IC8qIGZvciBpbm9kZV9sb2NrLCBvZGRseSBlbm91Z2guLiAqLworI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjZGVmaW5lIF9fRFFVT1RfUEFSQU5PSUEKKworLyoKKyAqIFRoZXJlIGFyZSB0aHJlZSBxdW90YSBTTVAgbG9ja3MuIGRxX2xpc3RfbG9jayBwcm90ZWN0cyBhbGwgbGlzdHMgd2l0aCBxdW90YXMKKyAqIGFuZCBxdW90YSBmb3JtYXRzLCBkcXN0YXRzIHN0cnVjdHVyZSBjb250YWluaW5nIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGxpc3RzCisgKiBkcV9kYXRhX2xvY2sgcHJvdGVjdHMgZGF0YSBmcm9tIGRxX2RxYiBhbmQgYWxzbyBtZW1fZHFpbmZvIHN0cnVjdHVyZXMgYW5kCisgKiBhbHNvIGd1YXJkcyBjb25zaXN0ZW5jeSBvZiBkcXVvdC0+ZHFfZHFiIHdpdGggaW5vZGUtPmlfYmxvY2tzLCBpX2J5dGVzLgorICogaV9ibG9ja3MgYW5kIGlfYnl0ZXMgdXBkYXRlcyBpdHNlbGYgYXJlIGd1YXJkZWQgYnkgaV9sb2NrIGFjcXVpcmVkIGRpcmVjdGx5CisgKiBpbiBpbm9kZV9hZGRfYnl0ZXMoKSBhbmQgaW5vZGVfc3ViX2J5dGVzKCkuIGRxX3N0YXRlX2xvY2sgcHJvdGVjdHMKKyAqIG1vZGlmaWNhdGlvbnMgb2YgcXVvdGEgc3RhdGUgKG9uIHF1b3Rhb24gYW5kIHF1b3Rhb2ZmKSBhbmQgcmVhZGVycyB3aG8gY2FyZQorICogYWJvdXQgbGF0ZXN0IHZhbHVlcyB0YWtlIGl0IGFzIHdlbGwuCisgKgorICogVGhlIHNwaW5sb2NrIG9yZGVyaW5nIGlzIGhlbmNlOiBkcV9kYXRhX2xvY2sgPiBkcV9saXN0X2xvY2sgPiBpX2xvY2ssCisgKiAgIGRxX2xpc3RfbG9jayA+IGRxX3N0YXRlX2xvY2sKKyAqCisgKiBOb3RlIHRoYXQgc29tZSB0aGluZ3MgKGVnLiBzYiBwb2ludGVyLCB0eXBlLCBpZCkgZG9lc24ndCBjaGFuZ2UgZHVyaW5nCisgKiB0aGUgbGlmZSBvZiB0aGUgZHF1b3Qgc3RydWN0dXJlIGFuZCBzbyBuZWVkbid0IHRvIGJlIHByb3RlY3RlZCBieSBhIGxvY2sKKyAqCisgKiBBbnkgb3BlcmF0aW9uIHdvcmtpbmcgb24gZHF1b3RzIHZpYSBpbm9kZSBwb2ludGVycyBtdXN0IGhvbGQgZHFwdHJfc2VtLiAgSWYKKyAqIG9wZXJhdGlvbiBpcyBqdXN0IHJlYWRpbmcgcG9pbnRlcnMgZnJvbSBpbm9kZSAob3Igbm90IHVzaW5nIHRoZW0gYXQgYWxsKSB0aGUKKyAqIHJlYWQgbG9jayBpcyBlbm91Z2guIElmIHBvaW50ZXJzIGFyZSBhbHRlcmVkIGZ1bmN0aW9uIG11c3QgaG9sZCB3cml0ZSBsb2NrCisgKiAodGhlc2UgbG9ja2luZyBydWxlcyBhbHNvIGFwcGx5IGZvciBTX05PUVVPVEEgZmxhZyBpbiB0aGUgaW5vZGUgLSBub3RlIHRoYXQKKyAqIGZvciBhbHRlcmluZyB0aGUgZmxhZyBpX211dGV4IGlzIGFsc28gbmVlZGVkKS4KKyAqCisgKiBFYWNoIGRxdW90IGhhcyBpdHMgZHFfbG9jayBtdXRleC4gTG9ja2VkIGRxdW90cyBtaWdodCBub3QgYmUgcmVmZXJlbmNlZAorICogZnJvbSBpbm9kZXMgKGRxdW90X2FsbG9jX3NwYWNlKCkgYW5kIHN1Y2ggZG9uJ3QgY2hlY2sgdGhlIGRxX2xvY2spLgorICogQ3VycmVudGx5IGRxdW90IGlzIGxvY2tlZCBvbmx5IHdoZW4gaXQgaXMgYmVpbmcgcmVhZCB0byBtZW1vcnkgKG9yIHNwYWNlIGZvcgorICogaXQgaXMgYmVpbmcgYWxsb2NhdGVkKSBvbiB0aGUgZmlyc3QgZHFnZXQoKSBhbmQgd2hlbiBpdCBpcyBiZWluZyByZWxlYXNlZCBvbgorICogdGhlIGxhc3QgZHFwdXQoKS4gVGhlIGFsbG9jYXRpb24gYW5kIHJlbGVhc2Ugb3BhcmF0aW9ucyBhcmUgc2VyaWFsaXplZCBieQorICogdGhlIGRxX2xvY2sgYW5kIGJ5IGNoZWNraW5nIHRoZSB1c2UgY291bnQgaW4gZHF1b3RfcmVsZWFzZSgpLiAgV3JpdGUKKyAqIG9wZXJhdGlvbnMgb24gZHF1b3RzIGRvbid0IGhvbGQgZHFfbG9jayBhcyB0aGV5IGNvcHkgZGF0YSB1bmRlciBkcV9kYXRhX2xvY2sKKyAqIHNwaW5sb2NrIHRvIGludGVybmFsIGJ1ZmZlcnMgYmVmb3JlIHdyaXRpbmcuCisgKgorICogTG9jayBvcmRlcmluZyAoaW5jbHVkaW5nIHJlbGF0ZWQgVkZTIGxvY2tzKSBpcyB0aGUgZm9sbG93aW5nOgorICogICBpX211dGV4ID4gZHFvbm9mZl9zZW0gPiBqb3VybmFsX2xvY2sgPiBkcXB0cl9zZW0gPiBkcXVvdC0+ZHFfbG9jayA+CisgKiAgIGRxaW9fbXV0ZXgKKyAqIFRoZSBsb2NrIG9yZGVyaW5nIG9mIGRxcHRyX3NlbSBpbXBvc2VkIGJ5IHF1b3RhIGNvZGUgaXMgb25seSBkcW9ub2ZmX3NlbSA+CisgKiBkcXB0cl9zZW0uIEJ1dCBmaWxlc3lzdGVtIGhhcyB0byBjb3VudCB3aXRoIHRoZSBmYWN0IHRoYXQgZnVuY3Rpb25zIHN1Y2ggYXMKKyAqIGRxdW90X2FsbG9jX3NwYWNlKCkgYWNxdWlyZSBkcXB0cl9zZW0gYW5kIHRoZXkgdXN1YWxseSBoYXZlIHRvIGJlIGNhbGxlZAorICogZnJvbSBpbnNpZGUgYSB0cmFuc2FjdGlvbiB0byBrZWVwIGZpbGVzeXN0ZW0gY29uc2lzdGVuY3kgYWZ0ZXIgYSBjcmFzaC4gQWxzbworICogZmlsZXN5c3RlbXMgdXN1YWxseSB3YW50IHRvIGRvIHNvbWUgSU8gb24gZHF1b3QgZnJvbSAtPm1hcmtfZGlydHkgd2hpY2ggaXMKKyAqIGNhbGxlZCB3aXRoIGRxcHRyX3NlbSBoZWxkLgorICogaV9tdXRleCBvbiBxdW90YSBmaWxlcyBpcyBzcGVjaWFsIChpdCdzIGJlbG93IGRxaW9fbXV0ZXgpCisgKi8KKworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9saXN0X2xvY2spOworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9zdGF0ZV9sb2NrKTsKK19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9kYXRhX2xvY2spOworRVhQT1JUX1NZTUJPTChkcV9kYXRhX2xvY2spOworCitzdGF0aWMgY2hhciAqcXVvdGF0eXBlc1tdID0gSU5JVFFGTkFNRVM7CitzdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpxdW90YV9mb3JtYXRzOwkvKiBMaXN0IG9mIHJlZ2lzdGVyZWQgZm9ybWF0cyAqLworc3RhdGljIHN0cnVjdCBxdW90YV9tb2R1bGVfbmFtZSBtb2R1bGVfbmFtZXNbXSA9IElOSVRfUVVPVEFfTU9EVUxFX05BTUVTOworCisvKiBTTEFCIGNhY2hlIGZvciBkcXVvdCBzdHJ1Y3R1cmVzICovCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRxdW90X2NhY2hlcDsKKworaW50IHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCkKK3sKKwlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJZm10LT5xZl9uZXh0ID0gcXVvdGFfZm9ybWF0czsKKwlxdW90YV9mb3JtYXRzID0gZm10OworCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9xdW90YV9mb3JtYXQpOworCit2b2lkIHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZm10KQoreworCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqKmFjdHFmOworCisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWZvciAoYWN0cWYgPSAmcXVvdGFfZm9ybWF0czsgKmFjdHFmICYmICphY3RxZiAhPSBmbXQ7CisJICAgICBhY3RxZiA9ICYoKmFjdHFmKS0+cWZfbmV4dCkKKwkJOworCWlmICgqYWN0cWYpCisJCSphY3RxZiA9ICgqYWN0cWYpLT5xZl9uZXh0OworCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCk7CisKK3N0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZpbmRfcXVvdGFfZm9ybWF0KGludCBpZCkKK3sKKwlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmFjdHFmOworCisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWZvciAoYWN0cWYgPSBxdW90YV9mb3JtYXRzOyBhY3RxZiAmJiBhY3RxZi0+cWZfZm10X2lkICE9IGlkOworCSAgICAgYWN0cWYgPSBhY3RxZi0+cWZfbmV4dCkKKwkJOworCWlmICghYWN0cWYgfHwgIXRyeV9tb2R1bGVfZ2V0KGFjdHFmLT5xZl9vd25lcikpIHsKKwkJaW50IHFtOworCisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQkKKwkJZm9yIChxbSA9IDA7IG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICYmCisJCQkgICAgIG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICE9IGlkOyBxbSsrKQorCQkJOworCQlpZiAoIW1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkIHx8CisJCSAgICByZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZXNbcW1dLnFtX21vZF9uYW1lKSkKKwkJCXJldHVybiBOVUxMOworCisJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJZm9yIChhY3RxZiA9IHF1b3RhX2Zvcm1hdHM7IGFjdHFmICYmIGFjdHFmLT5xZl9mbXRfaWQgIT0gaWQ7CisJCSAgICAgYWN0cWYgPSBhY3RxZi0+cWZfbmV4dCkKKwkJCTsKKwkJaWYgKGFjdHFmICYmICF0cnlfbW9kdWxlX2dldChhY3RxZi0+cWZfb3duZXIpKQorCQkJYWN0cWYgPSBOVUxMOworCX0KKwlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwlyZXR1cm4gYWN0cWY7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9xdW90YV9mb3JtYXQoc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpmbXQpCit7CisJbW9kdWxlX3B1dChmbXQtPnFmX293bmVyKTsKK30KKworLyoKKyAqIERxdW90IExpc3QgTWFuYWdlbWVudDoKKyAqIFRoZSBxdW90YSBjb2RlIHVzZXMgdGhyZWUgbGlzdHMgZm9yIGRxdW90IG1hbmFnZW1lbnQ6IHRoZSBpbnVzZV9saXN0LAorICogZnJlZV9kcXVvdHMsIGFuZCBkcXVvdF9oYXNoW10gYXJyYXkuIEEgc2luZ2xlIGRxdW90IHN0cnVjdHVyZSBtYXkgYmUKKyAqIG9uIGFsbCB0aHJlZSBsaXN0cywgZGVwZW5kaW5nIG9uIGl0cyBjdXJyZW50IHN0YXRlLgorICoKKyAqIEFsbCBkcXVvdHMgYXJlIHBsYWNlZCB0byB0aGUgZW5kIG9mIGludXNlX2xpc3Qgd2hlbiBmaXJzdCBjcmVhdGVkLCBhbmQgdGhpcworICogbGlzdCBpcyB1c2VkIGZvciBpbnZhbGlkYXRlIG9wZXJhdGlvbiwgd2hpY2ggbXVzdCBsb29rIGF0IGV2ZXJ5IGRxdW90LgorICoKKyAqIFVudXNlZCBkcXVvdHMgKGRxX2NvdW50ID09IDApIGFyZSBhZGRlZCB0byB0aGUgZnJlZV9kcXVvdHMgbGlzdCB3aGVuIGZyZWVkLAorICogYW5kIHRoaXMgbGlzdCBpcyBzZWFyY2hlZCB3aGVuZXZlciB3ZSBuZWVkIGFuIGF2YWlsYWJsZSBkcXVvdC4gIERxdW90cyBhcmUKKyAqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhcyBzb29uIGFzIHRoZXkgYXJlIHVzZWQgYWdhaW4sIGFuZAorICogZHFzdGF0cy5mcmVlX2RxdW90cyBnaXZlcyB0aGUgbnVtYmVyIG9mIGRxdW90cyBvbiB0aGUgbGlzdC4gV2hlbgorICogZHF1b3QgaXMgaW52YWxpZGF0ZWQgaXQncyBjb21wbGV0ZWx5IHJlbGVhc2VkIGZyb20gbWVtb3J5LgorICoKKyAqIERxdW90cyB3aXRoIGEgc3BlY2lmaWMgaWRlbnRpdHkgKGRldmljZSwgdHlwZSBhbmQgaWQpIGFyZSBwbGFjZWQgb24KKyAqIG9uZSBvZiB0aGUgZHF1b3RfaGFzaFtdIGhhc2ggY2hhaW5zLiBUaGUgcHJvdmlkZXMgYW4gZWZmaWNpZW50IHNlYXJjaAorICogbWVjaGFuaXNtIHRvIGxvY2F0ZSBhIHNwZWNpZmljIGRxdW90LgorICovCisKK3N0YXRpYyBMSVNUX0hFQUQoaW51c2VfbGlzdCk7CitzdGF0aWMgTElTVF9IRUFEKGZyZWVfZHF1b3RzKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHFfaGFzaF9iaXRzLCBkcV9oYXNoX21hc2s7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmRxdW90X2hhc2g7CisKK3N0cnVjdCBkcXN0YXRzIGRxc3RhdHM7CitFWFBPUlRfU1lNQk9MKGRxc3RhdHMpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoraGFzaGZuKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBpZCwgaW50IHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwl0bXAgPSAoKCh1bnNpZ25lZCBsb25nKXNiPj5MMV9DQUNIRV9TSElGVCkgXiBpZCkgKiAoTUFYUVVPVEFTIC0gdHlwZSk7CisJcmV0dXJuICh0bXAgKyAodG1wID4+IGRxX2hhc2hfYml0cykpICYgZHFfaGFzaF9tYXNrOworfQorCisvKgorICogRm9sbG93aW5nIGxpc3QgZnVuY3Rpb25zIGV4cGVjdCBkcV9saXN0X2xvY2sgdG8gYmUgaGVsZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0X2RxdW90X2hhc2goc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwloZWFkID0gZHF1b3RfaGFzaCArIGhhc2hmbihkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV9pZCwgZHF1b3QtPmRxX3R5cGUpOworCWhsaXN0X2FkZF9oZWFkKCZkcXVvdC0+ZHFfaGFzaCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZHF1b3RfaGFzaChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWhsaXN0X2RlbF9pbml0KCZkcXVvdC0+ZHFfaGFzaCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHF1b3QgKmZpbmRfZHF1b3QodW5zaWduZWQgaW50IGhhc2hlbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJdW5zaWduZWQgaW50IGlkLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCisJaGxpc3RfZm9yX2VhY2ggKG5vZGUsIGRxdW90X2hhc2graGFzaGVudCkgeworCQlkcXVvdCA9IGhsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBkcXVvdCwgZHFfaGFzaCk7CisJCWlmIChkcXVvdC0+ZHFfc2IgPT0gc2IgJiYgZHF1b3QtPmRxX2lkID09IGlkICYmCisJCSAgICBkcXVvdC0+ZHFfdHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIGRxdW90OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogQWRkIGEgZHF1b3QgdG8gdGhlIHRhaWwgb2YgdGhlIGZyZWUgbGlzdCAqLworc3RhdGljIGlubGluZSB2b2lkIHB1dF9kcXVvdF9sYXN0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJbGlzdF9hZGRfdGFpbCgmZHF1b3QtPmRxX2ZyZWUsICZmcmVlX2RxdW90cyk7CisJZHFzdGF0cy5mcmVlX2RxdW90cysrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2ZyZWVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpZiAobGlzdF9lbXB0eSgmZHF1b3QtPmRxX2ZyZWUpKQorCQlyZXR1cm47CisJbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2ZyZWUpOworCWRxc3RhdHMuZnJlZV9kcXVvdHMtLTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9pbnVzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCS8qIFdlIGFkZCB0byB0aGUgYmFjayBvZiBpbnVzZSBsaXN0IHNvIHdlIGRvbid0IGhhdmUgdG8gcmVzdGFydAorCSAqIHdoZW4gdHJhdmVyc2luZyB0aGlzIGxpc3QgYW5kIHdlIGJsb2NrICovCisJbGlzdF9hZGRfdGFpbCgmZHF1b3QtPmRxX2ludXNlLCAmaW51c2VfbGlzdCk7CisJZHFzdGF0cy5hbGxvY2F0ZWRfZHF1b3RzKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfaW51c2Uoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlkcXN0YXRzLmFsbG9jYXRlZF9kcXVvdHMtLTsKKwlsaXN0X2RlbCgmZHF1b3QtPmRxX2ludXNlKTsKK30KKy8qCisgKiBFbmQgb2YgbGlzdCBmdW5jdGlvbnMgbmVlZGluZyBkcV9saXN0X2xvY2sKKyAqLworCitzdGF0aWMgdm9pZCB3YWl0X29uX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJbXV0ZXhfbG9jaygmZHF1b3QtPmRxX2xvY2spOworCW11dGV4X3VubG9jaygmZHF1b3QtPmRxX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBkcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXJldHVybiB0ZXN0X2JpdChEUV9NT0RfQiwgJmRxdW90LT5kcV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlyZXR1cm4gZHF1b3QtPmRxX3NiLT5kcV9vcC0+bWFya19kaXJ0eShkcXVvdCk7Cit9CisKK2ludCBkcXVvdF9tYXJrX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWlmICghdGVzdF9hbmRfc2V0X2JpdChEUV9NT0RfQiwgJmRxdW90LT5kcV9mbGFncykpCisJCWxpc3RfYWRkKCZkcXVvdC0+ZHFfZGlydHksICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT4KKwkJCQlpbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfZGlydHlfbGlzdCk7CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X21hcmtfZHF1b3RfZGlydHkpOworCisvKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIGRxX2xpc3RfbG9jayAqLworc3RhdGljIGlubGluZSBpbnQgY2xlYXJfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChEUV9NT0RfQiwgJmRxdW90LT5kcV9mbGFncykpCisJCXJldHVybiAwOworCWxpc3RfZGVsX2luaXQoJmRxdW90LT5kcV9kaXJ0eSk7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgbWFya19pbmZvX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCXNldF9iaXQoRFFGX0lORk9fRElSVFlfQiwgJnNiX2Rxb3B0KHNiKS0+aW5mb1t0eXBlXS5kcWlfZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChtYXJrX2luZm9fZGlydHkpOworCisvKgorICoJUmVhZCBkcXVvdCBmcm9tIGRpc2sgYW5kIGFsbG9jIHNwYWNlIGZvciBpdAorICovCisKK2ludCBkcXVvdF9hY3F1aXJlKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaW50IHJldCA9IDAsIHJldDIgPSAwOworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7CisKKwltdXRleF9sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCWlmICghdGVzdF9iaXQoRFFfUkVBRF9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKKwkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPnJlYWRfZHFibGsoZHF1b3QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9pb2xvY2s7CisJc2V0X2JpdChEUV9SRUFEX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCS8qIEluc3RhbnRpYXRlIGRxdW90IGlmIG5lZWRlZCAqLworCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmICFkcXVvdC0+ZHFfb2ZmKSB7CisJCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5jb21taXRfZHFibGsoZHF1b3QpOworCQkvKiBXcml0ZSB0aGUgaW5mbyBpZiBuZWVkZWQgKi8KKwkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpIHsKKwkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKAorCQkJCQkJZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7CisJCX0KKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9pb2xvY2s7CisJCWlmIChyZXQyIDwgMCkgeworCQkJcmV0ID0gcmV0MjsKKwkJCWdvdG8gb3V0X2lvbG9jazsKKwkJfQorCX0KKwlzZXRfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKK291dF9pb2xvY2s6CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfYWNxdWlyZSk7CisKKy8qCisgKglXcml0ZSBkcXVvdCB0byBkaXNrCisgKi8KK2ludCBkcXVvdF9jb21taXQoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpbnQgcmV0ID0gMCwgcmV0MiA9IDA7CisJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKTsKKworCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKKwlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJaWYgKCFjbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCkpIHsKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCWdvdG8gb3V0X3NlbTsKKwl9CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJLyogSW5hY3RpdmUgZHF1b3QgY2FuIGJlIG9ubHkgaWYgdGhlcmUgd2FzIGVycm9yIGR1cmluZyByZWFkL2luaXQKKwkgKiA9PiB3ZSBoYXZlIGJldHRlciBub3Qgd3JpdGluZyBpdCAqLworCWlmICh0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpIHsKKwkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPmNvbW1pdF9kcWJsayhkcXVvdCk7CisJCWlmIChpbmZvX2RpcnR5KCZkcW9wdC0+aW5mb1tkcXVvdC0+ZHFfdHlwZV0pKSB7CisJCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbygKKwkJCQkJCWRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOworCQl9CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IHJldDI7CisJfQorb3V0X3NlbToKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9jb21taXQpOworCisvKgorICoJUmVsZWFzZSBkcXVvdAorICovCitpbnQgZHF1b3RfcmVsZWFzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWludCByZXQgPSAwLCByZXQyID0gMDsKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpOworCisJbXV0ZXhfbG9jaygmZHF1b3QtPmRxX2xvY2spOworCS8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIG5vdCByYWNpbmcgd2l0aCBzb21lIG90aGVyIGRxZ2V0KCkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPiAxKQorCQlnb3RvIG91dF9kcWxvY2s7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCWlmIChkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVsZWFzZV9kcWJsaykgeworCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVsZWFzZV9kcWJsayhkcXVvdCk7CisJCS8qIFdyaXRlIHRoZSBpbmZvICovCisJCWlmIChpbmZvX2RpcnR5KCZkcW9wdC0+aW5mb1tkcXVvdC0+ZHFfdHlwZV0pKSB7CisJCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbygKKwkJCQkJCWRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOworCQl9CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IHJldDI7CisJfQorCWNsZWFyX2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CitvdXRfZHFsb2NrOgorCW11dGV4X3VubG9jaygmZHF1b3QtPmRxX2xvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X3JlbGVhc2UpOworCit2b2lkIGRxdW90X2Rlc3Ryb3koc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoZHF1b3RfY2FjaGVwLCBkcXVvdCk7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2Rlc3Ryb3kpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fZGVzdHJveV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWRxdW90LT5kcV9zYi0+ZHFfb3AtPmRlc3Ryb3lfZHF1b3QoZHF1b3QpOworfQorCisvKiBJbnZhbGlkYXRlIGFsbCBkcXVvdHMgb24gdGhlIGxpc3QuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlcgorICogcXVvdGEgaXMgZGlzYWJsZWQgYW5kIHBvaW50ZXJzIGZyb20gaW5vZGVzIHJlbW92ZWQgc28gdGhlcmUgY2Fubm90IGJlIG5ldworICogcXVvdGEgdXNlcnMuIFRoZXJlIGNhbiBzdGlsbCBiZSBzb21lIHVzZXJzIG9mIHF1b3RhcyBkdWUgdG8gaW5vZGVzIGJlaW5nCisgKiBqdXN0IGRlbGV0ZWQgb3IgcHJ1bmVkIGJ5IHBydW5lX2ljYWNoZSgpICh0aG9zZSBhcmUgbm90IGF0dGFjaGVkIHRvIGFueQorICogbGlzdCkgb3IgcGFyYWxsZWwgcXVvdGFjdGwgY2FsbC4gV2UgaGF2ZSB0byB3YWl0IGZvciBzdWNoIHVzZXJzLgorICovCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2RxdW90cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90LCAqdG1wOworCityZXN0YXJ0OgorCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHF1b3QsIHRtcCwgJmludXNlX2xpc3QsIGRxX2ludXNlKSB7CisJCWlmIChkcXVvdC0+ZHFfc2IgIT0gc2IpCisJCQljb250aW51ZTsKKwkJaWYgKGRxdW90LT5kcV90eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJLyogV2FpdCBmb3IgZHF1b3QgdXNlcnMgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKSB7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQkJYXRvbWljX2luYygmZHF1b3QtPmRxX2NvdW50KTsKKwkJCXByZXBhcmVfdG9fd2FpdCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkLCAmd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCQkvKiBPbmNlIGRxcHV0KCkgd2FrZXMgdXMgdXAsIHdlIGtub3cgaXQncyB0aW1lIHRvIGZyZWUKKwkJCSAqIHRoZSBkcXVvdC4KKwkJCSAqIElNUE9SVEFOVDogd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZXJlIGlzIGFsd2F5cworCQkJICogYXQgbW9zdCBvbmUgcHJvY2VzcyB3YWl0aW5nIGZvciBkcXVvdCB0byBmcmVlLgorCQkJICogT3RoZXJ3aXNlIGRxX2NvdW50IHdvdWxkIGJlID4gMSBhbmQgd2Ugd291bGQgbmV2ZXIKKwkJCSAqIHdha2UgdXAuCisJCQkgKi8KKwkJCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA+IDEpCisJCQkJc2NoZWR1bGUoKTsKKwkJCWZpbmlzaF93YWl0KCZkcXVvdC0+ZHFfd2FpdF91bnVzZWQsICZ3YWl0KTsKKwkJCWRxcHV0KGRxdW90KTsKKwkJCS8qIEF0IHRoaXMgbW9tZW50IGRxdW90KCkgbmVlZCBub3QgZXhpc3QgKGl0IGNvdWxkIGJlCisJCQkgKiByZWNsYWltZWQgYnkgcHJ1bmVfZHFjYWNoZSgpLiBIZW5jZSB3ZSBtdXN0CisJCQkgKiByZXN0YXJ0LiAqLworCQkJZ290byByZXN0YXJ0OworCQl9CisJCS8qCisJCSAqIFF1b3RhIG5vdyBoYXMgbm8gdXNlcnMgYW5kIGl0IGhhcyBiZWVuIHdyaXR0ZW4gb24gbGFzdAorCQkgKiBkcXB1dCgpCisJCSAqLworCQlyZW1vdmVfZHF1b3RfaGFzaChkcXVvdCk7CisJCXJlbW92ZV9mcmVlX2RxdW90KGRxdW90KTsKKwkJcmVtb3ZlX2ludXNlKGRxdW90KTsKKwkJZG9fZGVzdHJveV9kcXVvdChkcXVvdCk7CisJfQorCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworfQorCisvKiBDYWxsIGNhbGxiYWNrIGZvciBldmVyeSBhY3RpdmUgZHF1b3Qgb24gZ2l2ZW4gZmlsZXN5c3RlbSAqLworaW50IGRxdW90X3NjYW5fYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCSAgICAgIGludCAoKmZuKShzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1bnNpZ25lZCBsb25nIHByaXYpLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHByaXYpCit7CisJc3RydWN0IGRxdW90ICpkcXVvdCwgKm9sZF9kcXVvdCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOworCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRxdW90LCAmaW51c2VfbGlzdCwgZHFfaW51c2UpIHsKKwkJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpCisJCQljb250aW51ZTsKKwkJaWYgKGRxdW90LT5kcV9zYiAhPSBzYikKKwkJCWNvbnRpbnVlOworCQkvKiBOb3cgd2UgaGF2ZSBhY3RpdmUgZHF1b3Qgc28gd2UgY2FuIGp1c3QgaW5jcmVhc2UgdXNlIGNvdW50ICovCisJCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7CisJCWRxc3RhdHMubG9va3VwcysrOworCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJZHFwdXQob2xkX2RxdW90KTsKKwkJb2xkX2RxdW90ID0gZHF1b3Q7CisJCXJldCA9IGZuKGRxdW90LCBwcml2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCQkvKiBXZSBhcmUgc2FmZSB0byBjb250aW51ZSBub3cgYmVjYXVzZSBvdXIgZHF1b3QgY291bGQgbm90CisJCSAqIGJlIG1vdmVkIG91dCBvZiB0aGUgaW51c2UgbGlzdCB3aGlsZSB3ZSBob2xkIHRoZSByZWZlcmVuY2UgKi8KKwl9CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CitvdXQ6CisJZHFwdXQob2xkX2RxdW90KTsKKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3Rfc2Nhbl9hY3RpdmUpOworCitpbnQgdmZzX3F1b3RhX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZGlydHk7CisJc3RydWN0IGRxdW90ICpkcXVvdDsKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CisJaW50IGNudDsKKworCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKHR5cGUgIT0gLTEgJiYgY250ICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQorCQkJY29udGludWU7CisJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJZGlydHkgPSAmZHFvcHQtPmluZm9bY250XS5kcWlfZGlydHlfbGlzdDsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KGRpcnR5KSkgeworCQkJZHF1b3QgPSBsaXN0X2ZpcnN0X2VudHJ5KGRpcnR5LCBzdHJ1Y3QgZHF1b3QsCisJCQkJCQkgZHFfZGlydHkpOworCQkJLyogRGlydHkgYW5kIGluYWN0aXZlIGNhbiBiZSBvbmx5IGJhZCBkcXVvdC4uLiAqLworCQkJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpIHsKKwkJCQljbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBOb3cgd2UgaGF2ZSBhY3RpdmUgZHF1b3QgZnJvbSB3aGljaCBzb21lb25lIGlzCisgCQkJICogaG9sZGluZyByZWZlcmVuY2Ugc28gd2UgY2FuIHNhZmVseSBqdXN0IGluY3JlYXNlCisJCQkgKiB1c2UgY291bnQgKi8KKwkJCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7CisJCQlkcXN0YXRzLmxvb2t1cHMrKzsKKwkJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQkJc2ItPmRxX29wLT53cml0ZV9kcXVvdChkcXVvdCk7CisJCQlkcXB1dChkcXVvdCk7CisJCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJfQorCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoKGNudCA9PSB0eXBlIHx8IHR5cGUgPT0gLTEpICYmIHNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkKKwkJICAgICYmIGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2NudF0pKQorCQkJc2ItPmRxX29wLT53cml0ZV9pbmZvKHNiLCBjbnQpOworCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlkcXN0YXRzLnN5bmNzKys7CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodmZzX3F1b3RhX3N5bmMpOworCisvKiBGcmVlIHVudXNlZCBkcXVvdHMgZnJvbSBjYWNoZSAqLworc3RhdGljIHZvaWQgcHJ1bmVfZHFjYWNoZShpbnQgY291bnQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCisJaGVhZCA9IGZyZWVfZHF1b3RzLnByZXY7CisJd2hpbGUgKGhlYWQgIT0gJmZyZWVfZHF1b3RzICYmIGNvdW50KSB7CisJCWRxdW90ID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZHF1b3QsIGRxX2ZyZWUpOworCQlyZW1vdmVfZHF1b3RfaGFzaChkcXVvdCk7CisJCXJlbW92ZV9mcmVlX2RxdW90KGRxdW90KTsKKwkJcmVtb3ZlX2ludXNlKGRxdW90KTsKKwkJZG9fZGVzdHJveV9kcXVvdChkcXVvdCk7CisJCWNvdW50LS07CisJCWhlYWQgPSBmcmVlX2RxdW90cy5wcmV2OworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20ga3N3YXBkIHdoZW4gd2UgdGhpbmsgd2UgbmVlZCBzb21lCisgKiBtb3JlIG1lbW9yeQorICovCisKK3N0YXRpYyBpbnQgc2hyaW5rX2RxY2FjaGVfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJaWYgKG5yKSB7CisJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJcHJ1bmVfZHFjYWNoZShucik7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCX0KKwlyZXR1cm4gKGRxc3RhdHMuZnJlZV9kcXVvdHMgLyAxMDApICogc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZTsKK30KKworc3RhdGljIHN0cnVjdCBzaHJpbmtlciBkcWNhY2hlX3Nocmlua2VyID0geworCS5zaHJpbmsgPSBzaHJpbmtfZHFjYWNoZV9tZW1vcnksCisJLnNlZWtzID0gREVGQVVMVF9TRUVLUywKK307CisKKy8qCisgKiBQdXQgcmVmZXJlbmNlIHRvIGRxdW90CisgKiBOT1RFOiBJZiB5b3UgY2hhbmdlIHRoaXMgZnVuY3Rpb24gcGxlYXNlIGNoZWNrIHdoZXRoZXIgZHFwdXRfYmxvY2tzKCkgd29ya3MgcmlnaHQuLi4KKyAqLwordm9pZCBkcXB1dChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWludCByZXQ7CisKKwlpZiAoIWRxdW90KQorCQlyZXR1cm47CisjaWZkZWYgX19EUVVPVF9QQVJBTk9JQQorCWlmICghYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkpIHsKKwkJcHJpbnRrKCJWRlM6IGRxcHV0OiB0cnlpbmcgdG8gZnJlZSBmcmVlIGRxdW90XG4iKTsKKwkJcHJpbnRrKCJWRlM6IGRldmljZSAlcywgZHF1b3Qgb2YgJXMgJWRcbiIsCisJCQlkcXVvdC0+ZHFfc2ItPnNfaWQsCisJCQlxdW90YXR5cGVzW2RxdW90LT5kcV90eXBlXSwKKwkJCWRxdW90LT5kcV9pZCk7CisJCUJVRygpOworCX0KKyNlbmRpZgorCQorCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlkcXN0YXRzLmRyb3BzKys7CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Cit3ZV9zbGVwdDoKKwlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpID4gMSkgeworCQkvKiBXZSBoYXZlIG1vcmUgdGhhbiBvbmUgdXNlci4uLiBub3RoaW5nIHRvIGRvICovCisJCWF0b21pY19kZWMoJmRxdW90LT5kcV9jb3VudCk7CisJCS8qIFJlbGVhc2luZyBkcXVvdCBkdXJpbmcgcXVvdGFvZmYgcGhhc2U/ICovCisJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSAmJgorCQkgICAgYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPT0gMSkKKwkJCXdha2VfdXAoJmRxdW90LT5kcV93YWl0X3VudXNlZCk7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQlyZXR1cm47CisJfQorCS8qIE5lZWQgdG8gcmVsZWFzZSBkcXVvdD8gKi8KKwlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmIGRxdW90X2RpcnR5KGRxdW90KSkgeworCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJLyogQ29tbWl0IGRxdW90IGJlZm9yZSByZWxlYXNpbmcgKi8KKwkJcmV0ID0gZHF1b3QtPmRxX3NiLT5kcV9vcC0+d3JpdGVfZHF1b3QoZHF1b3QpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGNhbm5vdCB3cml0ZSBxdW90YSBzdHJ1Y3R1cmUgb24gIgorCQkJCSJkZXZpY2UgJXMgKGVycm9yICVkKS4gUXVvdGEgbWF5IGdldCBvdXQgb2YgIgorCQkJCSJzeW5jIVxuIiwgZHF1b3QtPmRxX3NiLT5zX2lkLCByZXQpOworCQkJLyoKKwkJCSAqIFdlIGNsZWFyIGRpcnR5IGJpdCBhbnl3YXksIHNvIHRoYXQgd2UgYXZvaWQKKwkJCSAqIGluZmluaXRlIGxvb3AgaGVyZQorCQkJICovCisJCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJCQljbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCk7CisJCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJfQorCQlnb3RvIHdlX3NsZXB0OworCX0KKwkvKiBDbGVhciBmbGFnIGluIGNhc2UgZHF1b3Qgd2FzIGluYWN0aXZlIChzb21ldGhpbmcgYmFkIGhhcHBlbmVkKSAqLworCWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KTsKKwlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKSB7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQlkcXVvdC0+ZHFfc2ItPmRxX29wLT5yZWxlYXNlX2RxdW90KGRxdW90KTsKKwkJZ290byB3ZV9zbGVwdDsKKwl9CisJYXRvbWljX2RlYygmZHF1b3QtPmRxX2NvdW50KTsKKyNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCisJLyogc2FuaXR5IGNoZWNrICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkcXVvdC0+ZHFfZnJlZSkpOworI2VuZGlmCisJcHV0X2RxdW90X2xhc3QoZHF1b3QpOworCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTChkcXB1dCk7CisKK3N0cnVjdCBkcXVvdCAqZHF1b3RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfemFsbG9jKGRxdW90X2NhY2hlcCwgR0ZQX05PRlMpOworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9hbGxvYyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHF1b3QgKmdldF9lbXB0eV9kcXVvdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCisJZHF1b3QgPSBzYi0+ZHFfb3AtPmFsbG9jX2RxdW90KHNiLCB0eXBlKTsKKwlpZighZHF1b3QpCisJCXJldHVybiBOVUxMOworCisJbXV0ZXhfaW5pdCgmZHF1b3QtPmRxX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkcXVvdC0+ZHFfZnJlZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRxdW90LT5kcV9pbnVzZSk7CisJSU5JVF9ITElTVF9OT0RFKCZkcXVvdC0+ZHFfaGFzaCk7CisJSU5JVF9MSVNUX0hFQUQoJmRxdW90LT5kcV9kaXJ0eSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkKTsKKwlkcXVvdC0+ZHFfc2IgPSBzYjsKKwlkcXVvdC0+ZHFfdHlwZSA9IHR5cGU7CisJYXRvbWljX3NldCgmZHF1b3QtPmRxX2NvdW50LCAxKTsKKworCXJldHVybiBkcXVvdDsKK30KKworLyoKKyAqIEdldCByZWZlcmVuY2UgdG8gZHF1b3QKKyAqCisgKiBMb2NraW5nIGlzIHNsaWdodGx5IHRyaWNreSBoZXJlLiBXZSBhcmUgZ3VhcmRlZCBmcm9tIHBhcmFsbGVsIHF1b3Rhb2ZmKCkKKyAqIGRlc3Ryb3lpbmcgb3VyIGRxdW90IGJ5OgorICogICBhKSBjaGVja2luZyBmb3IgcXVvdGEgZmxhZ3MgdW5kZXIgZHFfbGlzdF9sb2NrIGFuZAorICogICBiKSBnZXR0aW5nIGEgcmVmZXJlbmNlIHRvIGRxdW90IGJlZm9yZSB3ZSByZWxlYXNlIGRxX2xpc3RfbG9jaworICovCitzdHJ1Y3QgZHF1b3QgKmRxZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBpZCwgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGhhc2hlbnQgPSBoYXNoZm4oc2IsIGlkLCB0eXBlKTsKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90ID0gTlVMTCwgKmVtcHR5ID0gTlVMTDsKKworICAgICAgICBpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKQorCQlyZXR1cm4gTlVMTDsKK3dlX3NsZXB0OgorCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJmRxX3N0YXRlX2xvY2spOworCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpIHsKKwkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKworCWRxdW90ID0gZmluZF9kcXVvdChoYXNoZW50LCBzYiwgaWQsIHR5cGUpOworCWlmICghZHF1b3QpIHsKKwkJaWYgKCFlbXB0eSkgeworCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCQllbXB0eSA9IGdldF9lbXB0eV9kcXVvdChzYiwgdHlwZSk7CisJCQlpZiAoIWVtcHR5KQorCQkJCXNjaGVkdWxlKCk7CS8qIFRyeSB0byB3YWl0IGZvciBhIG1vbWVudC4uLiAqLworCQkJZ290byB3ZV9zbGVwdDsKKwkJfQorCQlkcXVvdCA9IGVtcHR5OworCQllbXB0eSA9IE5VTEw7CisJCWRxdW90LT5kcV9pZCA9IGlkOworCQkvKiBhbGwgZHF1b3RzIGdvIG9uIHRoZSBpbnVzZV9saXN0ICovCisJCXB1dF9pbnVzZShkcXVvdCk7CisJCS8qIGhhc2ggaXQgZmlyc3Qgc28gaXQgY2FuIGJlIGZvdW5kICovCisJCWluc2VydF9kcXVvdF9oYXNoKGRxdW90KTsKKwkJZHFzdGF0cy5sb29rdXBzKys7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCX0gZWxzZSB7CisJCWlmICghYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkpCisJCQlyZW1vdmVfZnJlZV9kcXVvdChkcXVvdCk7CisJCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7CisJCWRxc3RhdHMuY2FjaGVfaGl0cysrOworCQlkcXN0YXRzLmxvb2t1cHMrKzsKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJfQorCS8qIFdhaXQgZm9yIGRxX2xvY2sgLSBhZnRlciB0aGlzIHdlIGtub3cgdGhhdCBlaXRoZXIgZHF1b3RfcmVsZWFzZSgpIGlzCisJICogYWxyZWFkeSBmaW5pc2hlZCBvciBpdCB3aWxsIGJlIGNhbmNlbGVkIGR1ZSB0byBkcV9jb3VudCA+IDEgdGVzdCAqLworCXdhaXRfb25fZHF1b3QoZHF1b3QpOworCS8qIFJlYWQgdGhlIGRxdW90IC8gYWxsb2NhdGUgc3BhY2UgaW4gcXVvdGEgZmlsZSAqLworCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmCisJICAgIHNiLT5kcV9vcC0+YWNxdWlyZV9kcXVvdChkcXVvdCkgPCAwKSB7CisJCWRxcHV0KGRxdW90KTsKKwkJZHF1b3QgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisjaWZkZWYgX19EUVVPVF9QQVJBTk9JQQorCUJVR19PTighZHF1b3QtPmRxX3NiKTsJLyogSGFzIHNvbWVib2R5IGludmFsaWRhdGVkIGVudHJ5IHVuZGVyIHVzPyAqLworI2VuZGlmCitvdXQ6CisJaWYgKGVtcHR5KQorCQlkb19kZXN0cm95X2RxdW90KGVtcHR5KTsKKworCXJldHVybiBkcXVvdDsKK30KK0VYUE9SVF9TWU1CT0woZHFnZXQpOworCitzdGF0aWMgaW50IGRxaW5pdF9uZWVkZWQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCit7CisJaW50IGNudDsKKworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuIDA7CisJaWYgKHR5cGUgIT0gLTEpCisJCXJldHVybiAhaW5vZGUtPmlfZHF1b3RbdHlwZV07CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyByb3V0aW5lIGlzIGd1YXJkZWQgYnkgZHFvbm9mZl9tdXRleCBtdXRleCAqLworc3RhdGljIHZvaWQgYWRkX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqb2xkX2lub2RlID0gTlVMTDsKKworCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQorCQkJY29udGludWU7CisJCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpKQorCQkJY29udGludWU7CisJCWlmICghZHFpbml0X25lZWRlZChpbm9kZSwgdHlwZSkpCisJCQljb250aW51ZTsKKworCQlfX2lnZXQoaW5vZGUpOworCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CisKKwkJaXB1dChvbGRfaW5vZGUpOworCQlzYi0+ZHFfb3AtPmluaXRpYWxpemUoaW5vZGUsIHR5cGUpOworCQkvKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvICdpbm9kZScgc28gaXQgY291bGRuJ3QgaGF2ZSBiZWVuCisJCSAqIHJlbW92ZWQgZnJvbSBzX2lub2RlcyBsaXN0IHdoaWxlIHdlIGRyb3BwZWQgdGhlIGlub2RlX2xvY2suCisJCSAqIFdlIGNhbm5vdCBpcHV0IHRoZSBpbm9kZSBub3cgYXMgd2UgY2FuIGJlIGhvbGRpbmcgdGhlIGxhc3QKKwkJICogcmVmZXJlbmNlIGFuZCB3ZSBjYW5ub3QgaXB1dCBpdCB1bmRlciBpbm9kZV9sb2NrLiBTbyB3ZQorCQkgKiBrZWVwIHRoZSByZWZlcmVuY2UgYW5kIGlwdXQgaXQgbGF0ZXIuICovCisJCW9sZF9pbm9kZSA9IGlub2RlOworCQlzcGluX2xvY2soJmlub2RlX2xvY2spOworCX0KKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CisJaXB1dChvbGRfaW5vZGUpOworfQorCisvKgorICogUmV0dXJuIDAgaWYgZHFwdXQoKSB3b24ndCBibG9jay4KKyAqIChub3RlIHRoYXQgMSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gYmxvY2tpbmcpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRxcHV0X2Jsb2NrcyhzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA8PSAxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSByZWZlcmVuY2VzIHRvIGRxdW90cyBmcm9tIGlub2RlIGFuZCBhZGQgZHF1b3QgdG8gbGlzdCBmb3IgZnJlZWluZworICogaWYgd2UgaGF2ZSB0aGUgbGFzdCByZWZlcmVjZSB0byBkcXVvdAorICogV2UgY2FuJ3QgcmFjZSB3aXRoIGFueWJvZHkgYmVjYXVzZSB3ZSBob2xkIGRxcHRyX3NlbSBmb3Igd3JpdGluZy4uLgorICovCitzdGF0aWMgaW50IHJlbW92ZV9pbm9kZV9kcXVvdF9yZWYoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKK3sKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90ID0gaW5vZGUtPmlfZHF1b3RbdHlwZV07CisKKwlpbm9kZS0+aV9kcXVvdFt0eXBlXSA9IE5VTEw7CisJaWYgKGRxdW90KSB7CisJCWlmIChkcXB1dF9ibG9ja3MoZHF1b3QpKSB7CisjaWZkZWYgX19EUVVPVF9QQVJBTk9JQQorCQkJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpICE9IDEpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBBZGRpbmcgZHF1b3Qgd2l0aCBkcV9jb3VudCAlZCB0byBkaXNwb3NlIGxpc3QuXG4iLCBhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSk7CisjZW5kaWYKKwkJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJCS8qIEFzIGRxdW90IG11c3QgaGF2ZSBjdXJyZW50bHkgdXNlcnMgaXQgY2FuJ3QgYmUgb24KKwkJCSAqIHRoZSBmcmVlIGxpc3QuLi4gKi8KKwkJCWxpc3RfYWRkKCZkcXVvdC0+ZHFfZnJlZSwgdG9mcmVlX2hlYWQpOworCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlCisJCQlkcXB1dChkcXVvdCk7ICAgLyogV2UgaGF2ZSBndWFyYW50ZWVkIHdlIHdvbid0IGJsb2NrICovCisJfQorCXJldHVybiAwOworfQorCisvKgorICogRnJlZSBsaXN0IG9mIGRxdW90cworICogRHF1b3RzIGFyZSByZW1vdmVkIGZyb20gaW5vZGVzIGFuZCBubyBuZXcgcmVmZXJlbmNlcyBjYW4gYmUgZ290IHNvIHdlIGFyZQorICogdGhlIG9ubHkgb25lcyBob2xkaW5nIHJlZmVyZW5jZQorICovCitzdGF0aWMgdm9pZCBwdXRfZHF1b3RfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICphY3RfaGVhZDsKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCisJYWN0X2hlYWQgPSB0b2ZyZWVfaGVhZC0+bmV4dDsKKwl3aGlsZSAoYWN0X2hlYWQgIT0gdG9mcmVlX2hlYWQpIHsKKwkJZHF1b3QgPSBsaXN0X2VudHJ5KGFjdF9oZWFkLCBzdHJ1Y3QgZHF1b3QsIGRxX2ZyZWUpOworCQlhY3RfaGVhZCA9IGFjdF9oZWFkLT5uZXh0OworCQkvKiBSZW1vdmUgZHF1b3QgZnJvbSB0aGUgbGlzdCBzbyB3ZSB3b24ndCBoYXZlIHByb2JsZW1zLi4uICovCisJCWxpc3RfZGVsX2luaXQoJmRxdW90LT5kcV9mcmVlKTsKKwkJZHFwdXQoZHF1b3QpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwKKwkJc3RydWN0IGxpc3RfaGVhZCAqdG9mcmVlX2hlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CisJCS8qCisJCSAqICBXZSBoYXZlIHRvIHNjYW4gYWxzbyBJX05FVyBpbm9kZXMgYmVjYXVzZSB0aGV5IGNhbiBhbHJlYWR5CisJCSAqICBoYXZlIHF1b3RhIHBvaW50ZXIgaW5pdGlhbGl6ZWQuIEx1Y2tpbHksIHdlIG5lZWQgdG8gdG91Y2gKKwkJICogIG9ubHkgcXVvdGEgcG9pbnRlcnMgYW5kIHRoZXNlIGhhdmUgc2VwYXJhdGUgbG9ja2luZworCQkgKiAgKGRxcHRyX3NlbSkuCisJCSAqLworCQlpZiAoIUlTX05PUVVPVEEoaW5vZGUpKQorCQkJcmVtb3ZlX2lub2RlX2RxdW90X3JlZihpbm9kZSwgdHlwZSwgdG9mcmVlX2hlYWQpOworCX0KKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Cit9CisKKy8qIEdhdGhlciBhbGwgcmVmZXJlbmNlcyBmcm9tIGlub2RlcyBhbmQgZHJvcCB0aGVtICovCitzdGF0aWMgdm9pZCBkcm9wX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlMSVNUX0hFQUQodG9mcmVlX2hlYWQpOworCisJaWYgKHNiLT5kcV9vcCkgeworCQlkb3duX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJCXJlbW92ZV9kcXVvdF9yZWYoc2IsIHR5cGUsICZ0b2ZyZWVfaGVhZCk7CisJCXVwX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJCXB1dF9kcXVvdF9saXN0KCZ0b2ZyZWVfaGVhZCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfaW5jcl9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCit7CisJZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICs9IG51bWJlcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2luY3Jfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCit7CisJZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKz0gbnVtYmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfcmVzdl9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3sKKwlkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZSArPSBudW1iZXI7Cit9CisKKy8qCisgKiBDbGFpbSByZXNlcnZlZCBxdW90YSBzcGFjZQorICovCitzdGF0aWMgdm9pZCBkcXVvdF9jbGFpbV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkJCQkJcXNpemVfdCBudW1iZXIpCit7CisJV0FSTl9PTihkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZSA8IG51bWJlcik7CisJZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKz0gbnVtYmVyOworCWRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlIC09IG51bWJlcjsKK30KKworc3RhdGljIGlubGluZQordm9pZCBkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgbnVtYmVyKQoreworCWRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlIC09IG51bWJlcjsKK30KKworc3RhdGljIHZvaWQgZHF1b3RfZGVjcl9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCit7CisJaWYgKHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZsYWdzICYgRFFVT1RfTkVHQVRJVkVfVVNBR0UgfHwKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID49IG51bWJlcikKKwkJZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIC09IG51bWJlcjsKKwllbHNlCisJCWRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA9IDA7CisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQorCQlkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSA9ICh0aW1lX3QpIDA7CisJY2xlYXJfYml0KERRX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZHF1b3RfZGVjcl9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3sKKwlpZiAoc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmxhZ3MgJiBEUVVPVF9ORUdBVElWRV9VU0FHRSB8fAorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA+PSBudW1iZXIpCisJCWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIC09IG51bWJlcjsKKwllbHNlCisJCWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlID0gMDsKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPD0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkKKwkJZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgPSAodGltZV90KSAwOworCWNsZWFyX2JpdChEUV9CTEtTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHdhcm5pbmdfaXNzdWVkKHN0cnVjdCBkcXVvdCAqZHF1b3QsIGNvbnN0IGludCB3YXJudHlwZSkKK3sKKwlpbnQgZmxhZyA9ICh3YXJudHlwZSA9PSBRVU9UQV9OTF9CSEFSRFdBUk4gfHwKKwkJd2FybnR5cGUgPT0gUVVPVEFfTkxfQlNPRlRMT05HV0FSTikgPyBEUV9CTEtTX0IgOgorCQkoKHdhcm50eXBlID09IFFVT1RBX05MX0lIQVJEV0FSTiB8fAorCQl3YXJudHlwZSA9PSBRVU9UQV9OTF9JU09GVExPTkdXQVJOKSA/IERRX0lOT0RFU19CIDogMCk7CisKKwlpZiAoIWZsYWcpCisJCXJldHVybiAwOworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KGZsYWcsICZkcXVvdC0+ZHFfZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcKK3N0YXRpYyBpbnQgZmxhZ19wcmludF93YXJuaW5ncyA9IDE7CisKK3N0YXRpYyBpbnQgbmVlZF9wcmludF93YXJuaW5nKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaWYgKCFmbGFnX3ByaW50X3dhcm5pbmdzKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZHF1b3QtPmRxX3R5cGUpIHsKKwkJY2FzZSBVU1JRVU9UQToKKwkJCXJldHVybiBjdXJyZW50X2ZzdWlkKCkgPT0gZHF1b3QtPmRxX2lkOworCQljYXNlIEdSUFFVT1RBOgorCQkJcmV0dXJuIGluX2dyb3VwX3AoZHF1b3QtPmRxX2lkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFByaW50IHdhcm5pbmcgdG8gdXNlciB3aGljaCBleGNlZWRlZCBxdW90YSAqLworc3RhdGljIHZvaWQgcHJpbnRfd2FybmluZyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBjb25zdCBpbnQgd2FybnR5cGUpCit7CisJY2hhciAqbXNnID0gTlVMTDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJaWYgKHdhcm50eXBlID09IFFVT1RBX05MX0lIQVJEQkVMT1cgfHwKKwkgICAgd2FybnR5cGUgPT0gUVVPVEFfTkxfSVNPRlRCRUxPVyB8fAorCSAgICB3YXJudHlwZSA9PSBRVU9UQV9OTF9CSEFSREJFTE9XIHx8CisJICAgIHdhcm50eXBlID09IFFVT1RBX05MX0JTT0ZUQkVMT1cgfHwgIW5lZWRfcHJpbnRfd2FybmluZyhkcXVvdCkpCisJCXJldHVybjsKKworCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOworCWlmICghdHR5KQorCQlyZXR1cm47CisJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBkcXVvdC0+ZHFfc2ItPnNfaWQpOworCWlmICh3YXJudHlwZSA9PSBRVU9UQV9OTF9JU09GVFdBUk4gfHwgd2FybnR5cGUgPT0gUVVPVEFfTkxfQlNPRlRXQVJOKQorCQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksICI6IHdhcm5pbmcsICIpOworCWVsc2UKKwkJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCAiOiB3cml0ZSBmYWlsZWQsICIpOworCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgcXVvdGF0eXBlc1tkcXVvdC0+ZHFfdHlwZV0pOworCXN3aXRjaCAod2FybnR5cGUpIHsKKwkJY2FzZSBRVU9UQV9OTF9JSEFSRFdBUk46CisJCQltc2cgPSAiIGZpbGUgbGltaXQgcmVhY2hlZC5cclxuIjsKKwkJCWJyZWFrOworCQljYXNlIFFVT1RBX05MX0lTT0ZUTE9OR1dBUk46CisJCQltc2cgPSAiIGZpbGUgcXVvdGEgZXhjZWVkZWQgdG9vIGxvbmcuXHJcbiI7CisJCQlicmVhazsKKwkJY2FzZSBRVU9UQV9OTF9JU09GVFdBUk46CisJCQltc2cgPSAiIGZpbGUgcXVvdGEgZXhjZWVkZWQuXHJcbiI7CisJCQlicmVhazsKKwkJY2FzZSBRVU9UQV9OTF9CSEFSRFdBUk46CisJCQltc2cgPSAiIGJsb2NrIGxpbWl0IHJlYWNoZWQuXHJcbiI7CisJCQlicmVhazsKKwkJY2FzZSBRVU9UQV9OTF9CU09GVExPTkdXQVJOOgorCQkJbXNnID0gIiBibG9jayBxdW90YSBleGNlZWRlZCB0b28gbG9uZy5cclxuIjsKKwkJCWJyZWFrOworCQljYXNlIFFVT1RBX05MX0JTT0ZUV0FSTjoKKwkJCW1zZyA9ICIgYmxvY2sgcXVvdGEgZXhjZWVkZWQuXHJcbiI7CisJCQlicmVhazsKKwl9CisJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBtc2cpOworCXR0eV9rcmVmX3B1dCh0dHkpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKKworLyogTmV0bGluayBmYW1pbHkgc3RydWN0dXJlIGZvciBxdW90YSAqLworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBxdW90YV9nZW5sX2ZhbWlseSA9IHsKKwkuaWQgPSBHRU5MX0lEX0dFTkVSQVRFLAorCS5oZHJzaXplID0gMCwKKwkubmFtZSA9ICJWRlNfRFFVT1QiLAorCS52ZXJzaW9uID0gMSwKKwkubWF4YXR0ciA9IFFVT1RBX05MX0FfTUFYLAorfTsKKworLyogU2VuZCB3YXJuaW5nIHRvIHVzZXJzcGFjZSBhYm91dCB1c2VyIHdoaWNoIGV4Y2VlZGVkIHF1b3RhICovCitzdGF0aWMgdm9pZCBzZW5kX3dhcm5pbmcoY29uc3Qgc3RydWN0IGRxdW90ICpkcXVvdCwgY29uc3QgY2hhciB3YXJudHlwZSkKK3sKKwlzdGF0aWMgYXRvbWljX3Qgc2VxOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9pZCAqbXNnX2hlYWQ7CisJaW50IHJldDsKKwlpbnQgbXNnX3NpemUgPSA0ICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICsKKwkJICAgICAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSk7CisKKwkvKiBXZSBoYXZlIHRvIGFsbG9jYXRlIHVzaW5nIEdGUF9OT0ZTIGFzIHdlIGFyZSBjYWxsZWQgZnJvbSBhCisJICogZmlsZXN5c3RlbSBwZXJmb3JtaW5nIHdyaXRlIGFuZCB0aHVzIGZ1cnRoZXIgcmVjdXJzaW9uIGludG8KKwkgKiB0aGUgZnMgdG8gZnJlZSBzb21lIGRhdGEgY291bGQgY2F1c2UgZGVhZGxvY2tzLiAqLworCXNrYiA9IGdlbmxtc2dfbmV3KG1zZ19zaXplLCBHRlBfTk9GUyk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgIlZGUzogTm90IGVub3VnaCBtZW1vcnkgdG8gc2VuZCBxdW90YSB3YXJuaW5nLlxuIik7CisJCXJldHVybjsKKwl9CisJbXNnX2hlYWQgPSBnZW5sbXNnX3B1dChza2IsIDAsIGF0b21pY19hZGRfcmV0dXJuKDEsICZzZXEpLAorCQkJJnF1b3RhX2dlbmxfZmFtaWx5LCAwLCBRVU9UQV9OTF9DX1dBUk5JTkcpOworCWlmICghbXNnX2hlYWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgIlZGUzogQ2Fubm90IHN0b3JlIG5ldGxpbmsgaGVhZGVyIGluIHF1b3RhIHdhcm5pbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfUVRZUEUsIGRxdW90LT5kcV90eXBlKTsKKwlpZiAocmV0KQorCQlnb3RvIGF0dHJfZXJyX291dDsKKwlyZXQgPSBubGFfcHV0X3U2NChza2IsIFFVT1RBX05MX0FfRVhDRVNTX0lELCBkcXVvdC0+ZHFfaWQpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9XQVJOSU5HLCB3YXJudHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX0RFVl9NQUpPUiwKKwkJTUFKT1IoZHF1b3QtPmRxX3NiLT5zX2RldikpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9ERVZfTUlOT1IsCisJCU1JTk9SKGRxdW90LT5kcV9zYi0+c19kZXYpKTsKKwlpZiAocmV0KQorCQlnb3RvIGF0dHJfZXJyX291dDsKKwlyZXQgPSBubGFfcHV0X3U2NChza2IsIFFVT1RBX05MX0FfQ0FVU0VEX0lELCBjdXJyZW50X3VpZCgpKTsKKwlpZiAocmV0KQorCQlnb3RvIGF0dHJfZXJyX291dDsKKwlnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTsKKworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgcXVvdGFfZ2VubF9mYW1pbHkuaWQsIEdGUF9OT0ZTKTsKKwlyZXR1cm47CithdHRyX2Vycl9vdXQ6CisJcHJpbnRrKEtFUk5fRVJSICJWRlM6IE5vdCBlbm91Z2ggc3BhY2UgdG8gY29tcG9zZSBxdW90YSBtZXNzYWdlIVxuIik7CitlcnJfb3V0OgorCWtmcmVlX3NrYihza2IpOworfQorI2VuZGlmCisvKgorICogV3JpdGUgd2FybmluZ3MgdG8gdGhlIGNvbnNvbGUgYW5kIHNlbmQgd2FybmluZyBtZXNzYWdlcyBvdmVyIG5ldGxpbmsuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLgorICovCitzdGF0aWMgdm9pZCBmbHVzaF93YXJuaW5ncyhzdHJ1Y3QgZHF1b3QgKmNvbnN0ICpkcXVvdHMsIGNoYXIgKndhcm50eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWFFVT1RBUzsgaSsrKQorCQlpZiAoZHF1b3RzW2ldICYmIHdhcm50eXBlW2ldICE9IFFVT1RBX05MX05PV0FSTiAmJgorCQkgICAgIXdhcm5pbmdfaXNzdWVkKGRxdW90c1tpXSwgd2FybnR5cGVbaV0pKSB7CisjaWZkZWYgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcKKwkJCXByaW50X3dhcm5pbmcoZHF1b3RzW2ldLCB3YXJudHlwZVtpXSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKKwkJCXNlbmRfd2FybmluZyhkcXVvdHNbaV0sIHdhcm50eXBlW2ldKTsKKyNlbmRpZgorCQl9Cit9CisKK3N0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gJnNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdOworCisJcmV0dXJuIGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkgJiYKKwkgICAgICAgKGluZm8tPmRxaV9mb3JtYXQtPnFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwKKwkJIShpbmZvLT5kcWlfZmxhZ3MgJiBWMV9EUUZfUlNRVUFTSCkpOworfQorCisvKiBuZWVkcyBkcV9kYXRhX2xvY2sgKi8KK3N0YXRpYyBpbnQgY2hlY2tfaWRxKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLCBjaGFyICp3YXJudHlwZSkKK3sKKwlxc2l6ZV90IG5ld2lub2RlcyA9IGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyArIGlub2RlczsKKworCSp3YXJudHlwZSA9IFFVT1RBX05MX05PV0FSTjsKKwlpZiAoIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSB8fAorCSAgICB0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQorCQlyZXR1cm4gUVVPVEFfT0s7CisKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCAmJgorCSAgICBuZXdpbm9kZXMgPiBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCisgICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKKwkJKndhcm50eXBlID0gUVVPVEFfTkxfSUhBUkRXQVJOOworCQlyZXR1cm4gTk9fUVVPVEE7CisJfQorCisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKKwkgICAgbmV3aW5vZGVzID4gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSAmJgorCSAgICBnZXRfc2Vjb25kcygpID49IGRxdW90LT5kcV9kcWIuZHFiX2l0aW1lICYmCisgICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKKwkJKndhcm50eXBlID0gUVVPVEFfTkxfSVNPRlRMT05HV0FSTjsKKwkJcmV0dXJuIE5PX1FVT1RBOworCX0KKworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmCisJICAgIG5ld2lub2RlcyA+IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgPT0gMCkgeworCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JU09GVFdBUk47CisJCWRxdW90LT5kcV9kcWIuZHFiX2l0aW1lID0gZ2V0X3NlY29uZHMoKSArCisJCSAgICBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfaWdyYWNlOworCX0KKworCXJldHVybiBRVU9UQV9PSzsKK30KKworLyogbmVlZHMgZHFfZGF0YV9sb2NrICovCitzdGF0aWMgaW50IGNoZWNrX2JkcShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IHNwYWNlLCBpbnQgcHJlYWxsb2MsIGNoYXIgKndhcm50eXBlKQoreworCXFzaXplX3QgdHNwYWNlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkcXVvdC0+ZHFfc2I7CisKKwkqd2FybnR5cGUgPSBRVU9UQV9OTF9OT1dBUk47CisJaWYgKCFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoc2IsIGRxdW90LT5kcV90eXBlKSB8fAorCSAgICB0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQorCQlyZXR1cm4gUVVPVEFfT0s7CisKKwl0c3BhY2UgPSBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArIGRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlCisJCSsgc3BhY2U7CisKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdCAmJgorCSAgICB0c3BhY2UgPiBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCisgICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKKwkJaWYgKCFwcmVhbGxvYykKKwkJCSp3YXJudHlwZSA9IFFVT1RBX05MX0JIQVJEV0FSTjsKKwkJcmV0dXJuIE5PX1FVT1RBOworCX0KKworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCisJICAgIHRzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgJiYKKwkgICAgZ2V0X3NlY29uZHMoKSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSAmJgorICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7CisJCWlmICghcHJlYWxsb2MpCisJCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CU09GVExPTkdXQVJOOworCQlyZXR1cm4gTk9fUVVPVEE7CisJfQorCisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKKwkgICAgdHNwYWNlID4gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSA9PSAwKSB7CisJCWlmICghcHJlYWxsb2MpIHsKKwkJCSp3YXJudHlwZSA9IFFVT1RBX05MX0JTT0ZUV0FSTjsKKwkJCWRxdW90LT5kcV9kcWIuZHFiX2J0aW1lID0gZ2V0X3NlY29uZHMoKSArCisJCQkgICAgc2JfZHFvcHQoc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfYmdyYWNlOworCQl9CisJCWVsc2UKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBhbGxvdyBwcmVhbGxvY2F0aW9uIHRvIGV4Y2VlZCBzb2Z0bGltaXQgc28gZXhjZWVkaW5nIHdpbGwKKwkJCSAqIGJlIGFsd2F5cyBwcmludGVkCisJCQkgKi8KKwkJCXJldHVybiBOT19RVU9UQTsKKwl9CisKKwlyZXR1cm4gUVVPVEFfT0s7Cit9CisKK3N0YXRpYyBpbnQgaW5mb19pZHFfZnJlZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcykKK3sKKwlxc2l6ZV90IG5ld2lub2RlczsKKworCWlmICh0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpIHx8CisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0IHx8CisJICAgICFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkpCisJCXJldHVybiBRVU9UQV9OTF9OT1dBUk47CisKKwluZXdpbm9kZXMgPSBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgLSBpbm9kZXM7CisJaWYgKG5ld2lub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQorCQlyZXR1cm4gUVVPVEFfTkxfSVNPRlRCRUxPVzsKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID49IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKKwkgICAgbmV3aW5vZGVzIDwgZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCkKKwkJcmV0dXJuIFFVT1RBX05MX0lIQVJEQkVMT1c7CisJcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKK30KKworc3RhdGljIGludCBpbmZvX2JkcV9mcmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3Qgc3BhY2UpCit7CisJaWYgKHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykgfHwKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPD0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkKKwkJcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKKworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSAtIHNwYWNlIDw9IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQpCisJCXJldHVybiBRVU9UQV9OTF9CU09GVEJFTE9XOworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIC0gc3BhY2UgPCBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0KQorCQlyZXR1cm4gUVVPVEFfTkxfQkhBUkRCRUxPVzsKKwlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOworfQorLyoKKyAqCUluaXRpYWxpemUgcXVvdGEgcG9pbnRlcnMgaW4gaW5vZGUKKyAqCVdlIGRvIHRoaW5ncyBpbiBhIGJpdCBjb21wbGljYXRlZCB3YXkgYnV0IGJ5IHRoYXQgd2UgYXZvaWQgY2FsbGluZworICoJZHFnZXQoKSBhbmQgdGh1cyBmaWxlc3lzdGVtIGNhbGxiYWNrcyB1bmRlciBkcXB0cl9zZW0uCisgKi8KK2ludCBkcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCBpZCA9IDA7CisJaW50IGNudCwgcmV0ID0gMDsKKwlzdHJ1Y3QgZHF1b3QgKmdvdFtNQVhRVU9UQVNdID0geyBOVUxMLCBOVUxMIH07CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBGaXJzdCBnZXQgcmVmZXJlbmNlcyB0byBzdHJ1Y3R1cmVzIHdlIG1pZ2h0IG5lZWQuICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoY250KSB7CisJCWNhc2UgVVNSUVVPVEE6CisJCQlpZCA9IGlub2RlLT5pX3VpZDsKKwkJCWJyZWFrOworCQljYXNlIEdSUFFVT1RBOgorCQkJaWQgPSBpbm9kZS0+aV9naWQ7CisJCQlicmVhazsKKwkJfQorCQlnb3RbY250XSA9IGRxZ2V0KHNiLCBpZCwgY250KTsKKwl9CisKKwlkb3duX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJLyogSGF2aW5nIGRxcHRyX3NlbSB3ZSBrbm93IE5PUVVPVEEgZmxhZ3MgY2FuJ3QgYmUgYWx0ZXJlZC4uLiAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJZ290byBvdXRfZXJyOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBBdm9pZCByYWNlcyB3aXRoIHF1b3Rhb2ZmKCkgKi8KKwkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQorCQkJY29udGludWU7CisJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkgeworCQkJaW5vZGUtPmlfZHF1b3RbY250XSA9IGdvdFtjbnRdOworCQkJZ290W2NudF0gPSBOVUxMOworCQl9CisJfQorb3V0X2VycjoKKwl1cF93cml0ZSgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOworCS8qIERyb3AgdW51c2VkIHJlZmVyZW5jZXMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWRxcHV0KGdvdFtjbnRdKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9pbml0aWFsaXplKTsKKworLyoKKyAqIAlSZWxlYXNlIGFsbCBxdW90YXMgcmVmZXJlbmNlZCBieSBpbm9kZQorICovCitpbnQgZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCBjbnQ7CisJc3RydWN0IGRxdW90ICpwdXRbTUFYUVVPVEFTXTsKKworCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJcHV0W2NudF0gPSBpbm9kZS0+aV9kcXVvdFtjbnRdOworCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gTlVMTDsKKwl9CisJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJZHFwdXQocHV0W2NudF0pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9kcm9wKTsKKworLyogV3JhcHBlciB0byByZW1vdmUgcmVmZXJlbmNlcyB0byBxdW90YSBzdHJ1Y3R1cmVzIGZyb20gaW5vZGUgKi8KK3ZvaWQgdmZzX2RxX2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwkvKiBIZXJlIHdlIGNhbiBnZXQgYXJiaXRyYXJ5IGlub2RlIGZyb20gY2xlYXJfaW5vZGUoKSBzbyB3ZSBoYXZlCisJICogdG8gYmUgY2FyZWZ1bC4gT1RPSCB3ZSBkb24ndCBuZWVkIGxvY2tpbmcgYXMgcXVvdGEgb3BlcmF0aW9ucworCSAqIGFyZSBhbGxvd2VkIHRvIGNoYW5nZSBvbmx5IGF0IG1vdW50IHRpbWUgKi8KKwlpZiAoIUlTX05PUVVPVEEoaW5vZGUpICYmIGlub2RlLT5pX3NiICYmIGlub2RlLT5pX3NiLT5kcV9vcAorCSAgICAmJiBpbm9kZS0+aV9zYi0+ZHFfb3AtPmRyb3ApIHsKKwkJaW50IGNudDsKKwkJLyogVGVzdCBiZWZvcmUgY2FsbGluZyB0byBydWxlIG91dCBjYWxscyBmcm9tIHByb2MgYW5kIHN1Y2gKKyAgICAgICAgICAgICAgICAgKiB3aGVyZSB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYmxvY2suIE5vdGUgdGhhdCB0aGlzIGlzCisJCSAqIGFjdHVhbGx5IHJlbGlhYmxlIHRlc3QgZXZlbiB3aXRob3V0IHRoZSBsb2NrIC0gdGhlIGNhbGxlcgorCQkgKiBtdXN0IGFzc3VyZSB0aGF0IG5vYm9keSBjYW4gY29tZSBhZnRlciB0aGUgRFFVT1RfRFJPUCBhbmQKKwkJICogYWRkIHF1b3RhIHBvaW50ZXJzIGJhY2sgYW55d2F5ICovCisJCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJCWJyZWFrOworCQlpZiAoY250IDwgTUFYUVVPVEFTKQorCQkJaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHZmc19kcV9kcm9wKTsKKworLyoKKyAqIEZvbGxvd2luZyBmb3VyIGZ1bmN0aW9ucyB1cGRhdGUgaV9ibG9ja3MraV9ieXRlcyBmaWVsZHMgYW5kCisgKiBxdW90YSBpbmZvcm1hdGlvbiAodG9nZXRoZXIgd2l0aCBhcHByb3ByaWF0ZSBjaGVja3MpCisgKiBOT1RFOiBXZSBhYnNvbHV0ZWx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBjYWxsZXIgZGlydGllcworICogdGhlIGlub2RlICh1c3VhbGx5IG1hY3JvcyBpbiBxdW90YW9wcy5oIGNhcmUgYWJvdXQgdGhpcykgYW5kCisgKiBob2xkcyBhIGhhbmRsZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCBkcXVvdCB3cml0ZSBhbmQKKyAqIGlub2RlIHdyaXRlIGdvIGludG8gdGhlIHNhbWUgdHJhbnNhY3Rpb24uCisgKi8KKworLyoKKyAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCisgKi8KK2ludCBfX2RxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLAorCQkJaW50IHdhcm4sIGludCByZXNlcnZlKQoreworCWludCBjbnQsIHJldCA9IFFVT1RBX09LOworCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKKworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJY29udGludWU7CisJCWlmIChjaGVja19iZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJuLCB3YXJudHlwZStjbnQpCisJCSAgICA9PSBOT19RVU9UQSkgeworCQkJcmV0ID0gTk9fUVVPVEE7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVzZXJ2ZSkKKwkJCWRxdW90X3Jlc3Zfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJZWxzZQorCQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOworCX0KKwlpZiAoIXJlc2VydmUpCisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQoreworCWludCBjbnQsIHJldCA9IFFVT1RBX09LOworCisJLyoKKwkgKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKKwkgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXgKKwkgKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKKwlpZiAocmV0ID09IE5PX1FVT1RBKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCisJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworb3V0X3VubG9jazoKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOworCitpbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCit7CisJaW50IHJldCA9IFFVT1RBX09LOworCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlnb3RvIG91dDsKKworCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAxKTsKK291dF91bmxvY2s6CisJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X3Jlc2VydmVfc3BhY2UpOworCisvKgorICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKKyAqLworaW50IGRxdW90X2FsbG9jX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCWludCBjbnQsIHJldCA9IE5PX1FVT1RBOworCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKKworCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCXJldHVybiBRVU9UQV9PSzsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47CisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwkJcmV0dXJuIFFVT1RBX09LOworCX0KKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hlY2tfaWRxKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlciwgd2FybnR5cGUrY250KQorCQkgICAgPT0gTk9fUVVPVEEpCisJCQlnb3RvIHdhcm5fcHV0X2FsbDsKKwl9CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJY29udGludWU7CisJCWRxdW90X2luY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJfQorCXJldCA9IFFVT1RBX09LOword2Fybl9wdXRfYWxsOgorCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCWlmIChyZXQgPT0gUVVPVEFfT0spCisJCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCisJCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2NfaW5vZGUpOworCitpbnQgZHF1b3RfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJaW50IGNudDsKKwlpbnQgcmV0ID0gUVVPVEFfT0s7CisKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCXsKKwkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwkvKiBDbGFpbSByZXNlcnZlZCBxdW90YXMgdG8gYWxsb2NhdGVkIHF1b3RhcyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWRxdW90X2NsYWltX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sCisJCQkJCQkJbnVtYmVyKTsKKwl9CisJLyogVXBkYXRlIGlub2RlIGJ5dGVzICovCisJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2NsYWltX3NwYWNlKTsKKworLyoKKyAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCWludCBjbnQ7CisKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCWdvdG8gb3V0OworCisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJLyogUmVsZWFzZSByZXNlcnZlZCBkcXVvdHMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCisJCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJfQorCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UpOworCisvKgorICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKKyAqLworaW50IGRxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJdW5zaWduZWQgaW50IGNudDsKKwljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CisKKwkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKKyAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CitvdXRfc3ViOgorCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCXJldHVybiBRVU9UQV9PSzsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwkvKiBOb3cgcmVjaGVjayByZWxpYWJseSB3aGVuIGhvbGRpbmcgZHFwdHJfc2VtICovCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwkJZ290byBvdXRfc3ViOworCX0KKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWNvbnRpbnVlOworCQl3YXJudHlwZVtjbnRdID0gaW5mb19iZHFfZnJlZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOworCQlkcXVvdF9kZWNyX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJfQorCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCisJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CisJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCXJldHVybiBRVU9UQV9PSzsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfZnJlZV9zcGFjZSk7CisKKy8qCisgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAorICovCitpbnQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKKworCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCXJldHVybiBRVU9UQV9PSzsKKworCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCS8qIE5vdyByZWNoZWNrIHJlbGlhYmx5IHdoZW4gaG9sZGluZyBkcXB0cl9zZW0gKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCQlyZXR1cm4gUVVPVEFfT0s7CisJfQorCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJY29udGludWU7CisJCXdhcm50eXBlW2NudF0gPSBpbmZvX2lkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJfQorCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJcmV0dXJuIFFVT1RBX09LOworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKKworLyoKKyAqIGNhbGwgYmFjayBmdW5jdGlvbiwgZ2V0IHJlc2VydmVkIHF1b3RhIHNwYWNlIGZyb20gdW5kZXJseWluZyBmcworICovCitxc2l6ZV90IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXFzaXplX3QgcmVzZXJ2ZWRfc3BhY2UgPSAwOworCisJaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmCisJICAgIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKQorCQlyZXNlcnZlZF9zcGFjZSA9IGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKKwlyZXR1cm4gcmVzZXJ2ZWRfc3BhY2U7Cit9CisKKy8qCisgKiBUcmFuc2ZlciB0aGUgbnVtYmVyIG9mIGlub2RlIGFuZCBibG9ja3MgZnJvbSBvbmUgZGlza3F1b3RhIHRvIGFuIG90aGVyLgorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCisgKiBBIHRyYW5zYWN0aW9uIG11c3QgYmUgc3RhcnRlZCB3aGVuIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCBkcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQoreworCXFzaXplX3Qgc3BhY2UsIGN1cl9zcGFjZTsKKwlxc2l6ZV90IHJzdl9zcGFjZSA9IDA7CisJc3RydWN0IGRxdW90ICp0cmFuc2Zlcl9mcm9tW01BWFFVT1RBU107CisJc3RydWN0IGRxdW90ICp0cmFuc2Zlcl90b1tNQVhRVU9UQVNdOworCWludCBjbnQsIHJldCA9IFFVT1RBX09LOworCWludCBjaHVpZCA9IGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEICYmIGlub2RlLT5pX3VpZCAhPSBpYXR0ci0+aWFfdWlkLAorCSAgICBjaGdpZCA9IGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEICYmIGlub2RlLT5pX2dpZCAhPSBpYXR0ci0+aWFfZ2lkOworCWNoYXIgd2FybnR5cGVfdG9bTUFYUVVPVEFTXTsKKwljaGFyIHdhcm50eXBlX2Zyb21faW5vZGVzW01BWFFVT1RBU10sIHdhcm50eXBlX2Zyb21fc3BhY2VbTUFYUVVPVEFTXTsKKworCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCXJldHVybiBRVU9UQV9PSzsKKwkvKiBJbml0aWFsaXplIHRoZSBhcnJheXMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJdHJhbnNmZXJfZnJvbVtjbnRdID0gTlVMTDsKKwkJdHJhbnNmZXJfdG9bY250XSA9IE5VTEw7CisJCXdhcm50eXBlX3RvW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47CisJfQorCWlmIChjaHVpZCkKKwkJdHJhbnNmZXJfdG9bVVNSUVVPVEFdID0gZHFnZXQoaW5vZGUtPmlfc2IsIGlhdHRyLT5pYV91aWQsCisJCQkJCSAgICAgIFVTUlFVT1RBKTsKKwlpZiAoY2hnaWQpCisJCXRyYW5zZmVyX3RvW0dSUFFVT1RBXSA9IGRxZ2V0KGlub2RlLT5pX3NiLCBpYXR0ci0+aWFfZ2lkLAorCQkJCQkgICAgICBHUlBRVU9UQSk7CisKKwlkb3duX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJLyogTm93IHJlY2hlY2sgcmVsaWFibHkgd2hlbiBob2xkaW5nIGRxcHRyX3NlbSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewkvKiBGaWxlIHdpdGhvdXQgcXVvdGEgYWNjb3VudGluZz8gKi8KKwkJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwkJZ290byBwdXRfYWxsOworCX0KKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJY3VyX3NwYWNlID0gaW5vZGVfZ2V0X2J5dGVzKGlub2RlKTsKKwlyc3Zfc3BhY2UgPSBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXNwYWNlID0gY3VyX3NwYWNlICsgcnN2X3NwYWNlOworCS8qIEJ1aWxkIHRoZSB0cmFuc2Zlcl9mcm9tIGxpc3QgYW5kIGNoZWNrIHRoZSBsaW1pdHMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCF0cmFuc2Zlcl90b1tjbnRdKQorCQkJY29udGludWU7CisJCXRyYW5zZmVyX2Zyb21bY250XSA9IGlub2RlLT5pX2RxdW90W2NudF07CisJCWlmIChjaGVja19pZHEodHJhbnNmZXJfdG9bY250XSwgMSwgd2FybnR5cGVfdG8gKyBjbnQpID09CisJCSAgICBOT19RVU9UQSB8fCBjaGVja19iZHEodHJhbnNmZXJfdG9bY250XSwgc3BhY2UsIDAsCisJCSAgICB3YXJudHlwZV90byArIGNudCkgPT0gTk9fUVVPVEEpCisJCQlnb3RvIG92ZXJfcXVvdGE7CisJfQorCisJLyoKKwkgKiBGaW5hbGx5IHBlcmZvcm0gdGhlIG5lZWRlZCB0cmFuc2ZlciBmcm9tIHRyYW5zZmVyX2Zyb20gdG8gdHJhbnNmZXJfdG8KKwkgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJLyoKKwkJICogU2tpcCBjaGFuZ2VzIGZvciBzYW1lIHVpZCBvciBnaWQgb3IgZm9yIHR1cm5lZCBvZmYgcXVvdGEtdHlwZS4KKwkJICovCisJCWlmICghdHJhbnNmZXJfdG9bY250XSkKKwkJCWNvbnRpbnVlOworCisJCS8qIER1ZSB0byBJTyBlcnJvciB3ZSBtaWdodCBub3QgaGF2ZSB0cmFuc2Zlcl9mcm9tW10gc3RydWN0dXJlICovCisJCWlmICh0cmFuc2Zlcl9mcm9tW2NudF0pIHsKKwkJCXdhcm50eXBlX2Zyb21faW5vZGVzW2NudF0gPQorCQkJCWluZm9faWRxX2ZyZWUodHJhbnNmZXJfZnJvbVtjbnRdLCAxKTsKKwkJCXdhcm50eXBlX2Zyb21fc3BhY2VbY250XSA9CisJCQkJaW5mb19iZHFfZnJlZSh0cmFuc2Zlcl9mcm9tW2NudF0sIHNwYWNlKTsKKwkJCWRxdW90X2RlY3JfaW5vZGVzKHRyYW5zZmVyX2Zyb21bY250XSwgMSk7CisJCQlkcXVvdF9kZWNyX3NwYWNlKHRyYW5zZmVyX2Zyb21bY250XSwgY3VyX3NwYWNlKTsKKwkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UodHJhbnNmZXJfZnJvbVtjbnRdLAorCQkJCQkJICByc3Zfc3BhY2UpOworCQl9CisKKwkJZHF1b3RfaW5jcl9pbm9kZXModHJhbnNmZXJfdG9bY250XSwgMSk7CisJCWRxdW90X2luY3Jfc3BhY2UodHJhbnNmZXJfdG9bY250XSwgY3VyX3NwYWNlKTsKKwkJZHF1b3RfcmVzdl9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCByc3Zfc3BhY2UpOworCisJCWlub2RlLT5pX2RxdW90W2NudF0gPSB0cmFuc2Zlcl90b1tjbnRdOworCX0KKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCisJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkKKwkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfZnJvbVtjbnRdKTsKKwkJaWYgKHRyYW5zZmVyX3RvW2NudF0pIHsKKwkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfdG9bY250XSk7CisJCQkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KKwkJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOworCQl9CisJfQord2Fybl9wdXRfYWxsOgorCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX3RvLCB3YXJudHlwZV90byk7CisJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9pbm9kZXMpOworCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21fc3BhY2UpOworcHV0X2FsbDoKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJZHFwdXQodHJhbnNmZXJfZnJvbVtjbnRdKTsKKwkJZHFwdXQodHJhbnNmZXJfdG9bY250XSk7CisJfQorCXJldHVybiByZXQ7CitvdmVyX3F1b3RhOgorCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCXVwX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJLyogQ2xlYXIgZHF1b3QgcG9pbnRlcnMgd2UgZG9uJ3Qgd2FudCB0byBkcXB1dCgpICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQl0cmFuc2Zlcl9mcm9tW2NudF0gPSBOVUxMOworCXJldCA9IE5PX1FVT1RBOworCWdvdG8gd2Fybl9wdXRfYWxsOworfQorRVhQT1JUX1NZTUJPTChkcXVvdF90cmFuc2Zlcik7CisKKy8qIFdyYXBwZXIgZm9yIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgYW4gaW5vZGUgKi8KK2ludCB2ZnNfZHFfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cikKK3sKKwlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgJiYgIUlTX05PUVVPVEEoaW5vZGUpKSB7CisJCXZmc19kcV9pbml0KGlub2RlKTsKKwkJaWYgKGlub2RlLT5pX3NiLT5kcV9vcC0+dHJhbnNmZXIoaW5vZGUsIGlhdHRyKSA9PSBOT19RVU9UQSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodmZzX2RxX3RyYW5zZmVyKTsKKworLyoKKyAqIFdyaXRlIGluZm8gb2YgcXVvdGEgZmlsZSB0byBkaXNrCisgKi8KK2ludCBkcXVvdF9jb21taXRfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKworCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKKwlyZXQgPSBkcW9wdC0+b3BzW3R5cGVdLT53cml0ZV9maWxlX2luZm8oc2IsIHR5cGUpOworCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2NvbW1pdF9pbmZvKTsKKworLyoKKyAqIERlZmluaXRpb25zIG9mIGRpc2txdW90YSBvcGVyYXRpb25zLgorICovCitzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBkcXVvdF9vcGVyYXRpb25zID0geworCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKKwkuZHJvcAkJPSBkcXVvdF9kcm9wLAorCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLAorCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAorCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKKwkuZnJlZV9pbm9kZQk9IGRxdW90X2ZyZWVfaW5vZGUsCisJLnRyYW5zZmVyCT0gZHF1b3RfdHJhbnNmZXIsCisJLndyaXRlX2RxdW90CT0gZHF1b3RfY29tbWl0LAorCS5hY3F1aXJlX2RxdW90CT0gZHF1b3RfYWNxdWlyZSwKKwkucmVsZWFzZV9kcXVvdAk9IGRxdW90X3JlbGVhc2UsCisJLm1hcmtfZGlydHkJPSBkcXVvdF9tYXJrX2RxdW90X2RpcnR5LAorCS53cml0ZV9pbmZvCT0gZHF1b3RfY29tbWl0X2luZm8sCisJLmFsbG9jX2RxdW90CT0gZHF1b3RfYWxsb2MsCisJLmRlc3Ryb3lfZHF1b3QJPSBkcXVvdF9kZXN0cm95LAorfTsKKworLyoKKyAqIFR1cm4gcXVvdGEgb2ZmIG9uIGEgZGV2aWNlLiB0eXBlID09IC0xID09PiBxdW90YW9mZiBmb3IgYWxsIHR5cGVzICh1bW91bnQpCisgKi8KK2ludCB2ZnNfcXVvdGFfZGlzYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBjbnQsIHJldCA9IDA7CisJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOworCXN0cnVjdCBpbm9kZSAqdG9wdXRpbm9kZVtNQVhRVU9UQVNdOworCisJLyogQ2Fubm90IHR1cm4gb2ZmIHVzYWdlIGFjY291bnRpbmcgd2l0aG91dCB0dXJuaW5nIG9mZiBsaW1pdHMsIG9yCisJICogc3VzcGVuZCBxdW90YXMgYW5kIHNpbXVsdGFuZW91c2x5IHR1cm4gcXVvdGFzIG9mZi4gKi8KKwlpZiAoKGZsYWdzICYgRFFVT1RfVVNBR0VfRU5BQkxFRCAmJiAhKGZsYWdzICYgRFFVT1RfTElNSVRTX0VOQUJMRUQpKQorCSAgICB8fCAoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQgJiYgZmxhZ3MgJiAoRFFVT1RfTElNSVRTX0VOQUJMRUQgfAorCSAgICBEUVVPVF9VU0FHRV9FTkFCTEVEKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogV2UgbmVlZCB0byBzZXJpYWxpemUgcXVvdGFfb2ZmKCkgZm9yIGRldmljZSAqLworCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKworCS8qCisJICogU2tpcCBldmVyeXRoaW5nIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2UKKwkgKiBzb21ldGltZXMgd2UgYXJlIGNhbGxlZCB3aGVuIGZpbGxfc3VwZXIoKSBmYWlsZWQgYW5kIGNhbGxpbmcKKwkgKiBzeW5jX2ZzKCkgaW4gc3VjaCBjYXNlcyBkb2VzIG5vIGdvb2QuCisJICovCisJaWYgKCFzYl9hbnlfcXVvdGFfbG9hZGVkKHNiKSkgeworCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQl0b3B1dGlub2RlW2NudF0gPSBOVUxMOworCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQpIHsKKwkJCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CisJCQlkcW9wdC0+ZmxhZ3MgfD0KKwkJCQlkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1NVU1BFTkRFRCwgY250KTsKKwkJCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CisJCQlkcW9wdC0+ZmxhZ3MgJj0gfmRxdW90X3N0YXRlX2ZsYWcoZmxhZ3MsIGNudCk7CisJCQkvKiBUdXJuaW5nIG9mZiBzdXNwZW5kZWQgcXVvdGFzPyAqLworCQkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpICYmCisJCQkgICAgc2JfaGFzX3F1b3RhX3N1c3BlbmRlZChzYiwgY250KSkgeworCQkJCWRxb3B0LT5mbGFncyAmPQl+ZHF1b3Rfc3RhdGVfZmxhZygKKwkJCQkJCQlEUVVPVF9TVVNQRU5ERUQsIGNudCk7CisJCQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCQkJCWlwdXQoZHFvcHQtPmZpbGVzW2NudF0pOworCQkJCWRxb3B0LT5maWxlc1tjbnRdID0gTlVMTDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwkJfQorCisJCS8qIFdlIHN0aWxsIGhhdmUgdG8ga2VlcCBxdW90YSBsb2FkZWQ/ICovCisJCWlmIChzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpICYmICEoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQpKQorCQkJY29udGludWU7CisKKwkJLyogTm90ZTogdGhlc2UgYXJlIGJsb2NraW5nIG9wZXJhdGlvbnMgKi8KKwkJZHJvcF9kcXVvdF9yZWYoc2IsIGNudCk7CisJCWludmFsaWRhdGVfZHF1b3RzKHNiLCBjbnQpOworCQkvKgorCQkgKiBOb3cgYWxsIGRxdW90cyBzaG91bGQgYmUgaW52YWxpZGF0ZWQsIGFsbCB3cml0ZXMgZG9uZSBzbyB3ZQorCQkgKiBzaG91bGQgYmUgb25seSB1c2VycyBvZiB0aGUgaW5mby4gTm8gbG9ja3MgbmVlZGVkLgorCQkgKi8KKwkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2NudF0pKQorCQkJc2ItPmRxX29wLT53cml0ZV9pbmZvKHNiLCBjbnQpOworCQlpZiAoZHFvcHQtPm9wc1tjbnRdLT5mcmVlX2ZpbGVfaW5mbykKKwkJCWRxb3B0LT5vcHNbY250XS0+ZnJlZV9maWxlX2luZm8oc2IsIGNudCk7CisJCXB1dF9xdW90YV9mb3JtYXQoZHFvcHQtPmluZm9bY250XS5kcWlfZm9ybWF0KTsKKworCQl0b3B1dGlub2RlW2NudF0gPSBkcW9wdC0+ZmlsZXNbY250XTsKKwkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpKQorCQkJZHFvcHQtPmZpbGVzW2NudF0gPSBOVUxMOworCQlkcW9wdC0+aW5mb1tjbnRdLmRxaV9mbGFncyA9IDA7CisJCWRxb3B0LT5pbmZvW2NudF0uZHFpX2lncmFjZSA9IDA7CisJCWRxb3B0LT5pbmZvW2NudF0uZHFpX2JncmFjZSA9IDA7CisJCWRxb3B0LT5vcHNbY250XSA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCisJLyogU2tpcCBzeW5jaW5nIGFuZCBzZXR0aW5nIGZsYWdzIGlmIHF1b3RhIGZpbGVzIGFyZSBoaWRkZW4gKi8KKwlpZiAoZHFvcHQtPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpCisJCWdvdG8gcHV0X2lub2RlczsKKworCS8qIFN5bmMgdGhlIHN1cGVyYmxvY2sgc28gdGhhdCBidWZmZXJzIHdpdGggcXVvdGEgZGF0YSBhcmUgd3JpdHRlbiB0bworCSAqIGRpc2sgKGFuZCBzbyB1c2Vyc3BhY2Ugc2VlcyBjb3JyZWN0IGRhdGEgYWZ0ZXJ3YXJkcykuICovCisJaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQorCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7CisJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKKwkvKiBOb3cgdGhlIHF1b3RhIGZpbGVzIGFyZSBqdXN0IG9yZGluYXJ5IGZpbGVzIGFuZCB3ZSBjYW4gc2V0IHRoZQorCSAqIGlub2RlIGZsYWdzIGJhY2suIE1vcmVvdmVyIHdlIGRpc2NhcmQgdGhlIHBhZ2VjYWNoZSBzbyB0aGF0CisJICogdXNlcnNwYWNlIHNlZXMgdGhlIHdyaXRlcyB3ZSBkaWQgYnlwYXNzaW5nIHRoZSBwYWdlY2FjaGUuIFdlCisJICogbXVzdCBhbHNvIGRpc2NhcmQgdGhlIGJsb2NrZGV2IGJ1ZmZlcnMgc28gdGhhdCB3ZSBzZWUgdGhlCisJICogY2hhbmdlcyBkb25lIGJ5IHVzZXJzcGFjZSBvbiB0aGUgbmV4dCBxdW90YW9uKCkgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmICh0b3B1dGlub2RlW2NudF0pIHsKKwkJCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwkJCS8qIElmIHF1b3RhIHdhcyByZWVuYWJsZWQgaW4gdGhlIG1lYW50aW1lLCB3ZSBoYXZlCisJCQkgKiBub3RoaW5nIHRvIGRvICovCisJCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkpIHsKKwkJCQltdXRleF9sb2NrX25lc3RlZCgmdG9wdXRpbm9kZVtjbnRdLT5pX211dGV4LAorCQkJCQkJICBJX01VVEVYX1FVT1RBKTsKKwkJCQl0b3B1dGlub2RlW2NudF0tPmlfZmxhZ3MgJj0gfihTX0lNTVVUQUJMRSB8CisJCQkJICBTX05PQVRJTUUgfCBTX05PUVVPVEEpOworCQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ0b3B1dGlub2RlW2NudF0tPmlfZGF0YSwKKwkJCQkJCSAgICAgMCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgpOworCQkJCW1hcmtfaW5vZGVfZGlydHkodG9wdXRpbm9kZVtjbnRdKTsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCQl9CisJaWYgKHNiLT5zX2JkZXYpCisJCWludmFsaWRhdGVfYmRldihzYi0+c19iZGV2KTsKK3B1dF9pbm9kZXM6CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAodG9wdXRpbm9kZVtjbnRdKSB7CisJCQkvKiBPbiByZW1vdW50IFJPLCB3ZSBrZWVwIHRoZSBpbm9kZSBwb2ludGVyIHNvIHRoYXQgd2UKKwkJCSAqIGNhbiByZWVuYWJsZSBxdW90YSBvbiB0aGUgc3Vic2VxdWVudCByZW1vdW50IFJXLiBXZQorCQkJICogaGF2ZSB0byBjaGVjayAnZmxhZ3MnIHZhcmlhYmxlIGFuZCBub3QgdXNlIHNiX2hhc18KKwkJCSAqIGZ1bmN0aW9uIGJlY2F1c2UgYW5vdGhlciBxdW90YW9uIC8gcXVvdGFvZmYgY291bGQKKwkJCSAqIGNoYW5nZSBnbG9iYWwgc3RhdGUgYmVmb3JlIHdlIGdvdCBoZXJlLiBXZSByZWZ1c2UKKwkJCSAqIHRvIHN1c3BlbmQgcXVvdGFzIHdoZW4gdGhlcmUgaXMgcGVuZGluZyBkZWxldGUgb24KKwkJCSAqIHRoZSBxdW90YSBmaWxlLi4uICovCisJCQlpZiAoIShmbGFncyAmIERRVU9UX1NVU1BFTkRFRCkpCisJCQkJaXB1dCh0b3B1dGlub2RlW2NudF0pOworCQkJZWxzZSBpZiAoIXRvcHV0aW5vZGVbY250XS0+aV9ubGluaykKKwkJCQlyZXQgPSAtRUJVU1k7CisJCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfZGlzYWJsZSk7CisKK2ludCB2ZnNfcXVvdGFfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgcmVtb3VudCkKK3sKKwlyZXR1cm4gdmZzX3F1b3RhX2Rpc2FibGUoc2IsIHR5cGUsIHJlbW91bnQgPyBEUVVPVF9TVVNQRU5ERUQgOgorCQkJCSAoRFFVT1RfVVNBR0VfRU5BQkxFRCB8IERRVU9UX0xJTUlUU19FTkFCTEVEKSk7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vZmYpOworLyoKKyAqCVR1cm4gcXVvdGFzIG9uIG9uIGEgZGV2aWNlCisgKi8KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byB0dXJuIHF1b3RhcyBvbiB3aGVuIHdlIGFscmVhZHkgaGF2ZSB0aGUgaW5vZGUgb2YKKyAqIHF1b3RhIGZpbGUgYW5kIG5vIHF1b3RhIGluZm9ybWF0aW9uIGlzIGxvYWRlZC4KKyAqLworc3RhdGljIGludCB2ZnNfbG9hZF9xdW90YV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpmbXQgPSBmaW5kX3F1b3RhX2Zvcm1hdChmb3JtYXRfaWQpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CisJaW50IGVycm9yOworCWludCBvbGRmbGFncyA9IC0xOworCisJaWYgKCFmbXQpCisJCXJldHVybiAtRVNSQ0g7CisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCWVycm9yID0gLUVBQ0NFUzsKKwkJZ290byBvdXRfZm10OworCX0KKwlpZiAoSVNfUkRPTkxZKGlub2RlKSkgeworCQllcnJvciA9IC1FUk9GUzsKKwkJZ290byBvdXRfZm10OworCX0KKwlpZiAoIXNiLT5zX29wLT5xdW90YV93cml0ZSB8fCAhc2ItPnNfb3AtPnF1b3RhX3JlYWQpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mbXQ7CisJfQorCS8qIFVzYWdlIGFsd2F5cyBoYXMgdG8gYmUgc2V0Li4uICovCisJaWYgKCEoZmxhZ3MgJiBEUVVPVF9VU0FHRV9FTkFCTEVEKSkgeworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZtdDsKKwl9CisKKwlpZiAoIShkcW9wdC0+ZmxhZ3MgJiBEUVVPVF9RVU9UQV9TWVNfRklMRSkpIHsKKwkJLyogQXMgd2UgYnlwYXNzIHRoZSBwYWdlY2FjaGUgd2UgbXVzdCBub3cgZmx1c2ggdGhlIGlub2RlIHNvCisJCSAqIHRoYXQgd2Ugc2VlIGFsbCB0aGUgY2hhbmdlcyBmcm9tIHVzZXJzcGFjZS4uLiAqLworCQl3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDEpOworCQkvKiBBbmQgbm93IGZsdXNoIHRoZSBibG9jayBjYWNoZSBzbyB0aGF0IGtlcm5lbCBzZWVzIHRoZQorCQkgKiBjaGFuZ2VzICovCisJCWludmFsaWRhdGVfYmRldihzYi0+c19iZGV2KTsKKwl9CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwlpZiAoc2JfaGFzX3F1b3RhX2xvYWRlZChzYiwgdHlwZSkpIHsKKwkJZXJyb3IgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2xvY2s7CisJfQorCisJaWYgKCEoZHFvcHQtPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpKSB7CisJCS8qIFdlIGRvbid0IHdhbnQgcXVvdGEgYW5kIGF0aW1lIG9uIHF1b3RhIGZpbGVzIChkZWFkbG9ja3MKKwkJICogcG9zc2libGUpIEFsc28gbm9ib2R5IHNob3VsZCB3cml0ZSB0byB0aGUgZmlsZSAtIHdlIHVzZQorCQkgKiBzcGVjaWFsIElPIG9wZXJhdGlvbnMgd2hpY2ggaWdub3JlIHRoZSBpbW11dGFibGUgYml0LiAqLworCQlkb3duX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKKwkJb2xkZmxhZ3MgPSBpbm9kZS0+aV9mbGFncyAmIChTX05PQVRJTUUgfCBTX0lNTVVUQUJMRSB8CisJCQkJCSAgICAgU19OT1FVT1RBKTsKKwkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBIHwgU19OT0FUSU1FIHwgU19JTU1VVEFCTEU7CisJCXVwX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKKwkJc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKKwl9CisKKwllcnJvciA9IC1FSU87CisJZHFvcHQtPmZpbGVzW3R5cGVdID0gaWdyYWIoaW5vZGUpOworCWlmICghZHFvcHQtPmZpbGVzW3R5cGVdKQorCQlnb3RvIG91dF9sb2NrOworCWVycm9yID0gLUVJTlZBTDsKKwlpZiAoIWZtdC0+cWZfb3BzLT5jaGVja19xdW90YV9maWxlKHNiLCB0eXBlKSkKKwkJZ290byBvdXRfZmlsZV9pbml0OworCisJZHFvcHQtPm9wc1t0eXBlXSA9IGZtdC0+cWZfb3BzOworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9mb3JtYXQgPSBmbXQ7CisJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2ZtdF9pZCA9IGZvcm1hdF9pZDsKKwlJTklUX0xJU1RfSEVBRCgmZHFvcHQtPmluZm9bdHlwZV0uZHFpX2RpcnR5X2xpc3QpOworCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKKwllcnJvciA9IGRxb3B0LT5vcHNbdHlwZV0tPnJlYWRfZmlsZV9pbmZvKHNiLCB0eXBlKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCQlnb3RvIG91dF9maWxlX2luaXQ7CisJfQorCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CisJZHFvcHQtPmZsYWdzIHw9IGRxdW90X3N0YXRlX2ZsYWcoZmxhZ3MsIHR5cGUpOworCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKworCWFkZF9kcXVvdF9yZWYoc2IsIHR5cGUpOworCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCisJcmV0dXJuIDA7CisKK291dF9maWxlX2luaXQ6CisJZHFvcHQtPmZpbGVzW3R5cGVdID0gTlVMTDsKKwlpcHV0KGlub2RlKTsKK291dF9sb2NrOgorCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCWlmIChvbGRmbGFncyAhPSAtMSkgeworCQlkb3duX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKKwkJLyogU2V0IHRoZSBmbGFncyBiYWNrIChpbiB0aGUgY2FzZSBvZiBhY2NpZGVudGFsIHF1b3Rhb24oKQorCQkgKiBvbiBhIHdyb25nIGZpbGUgd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHVwIHRoZSBmbGFncykgKi8KKwkJaW5vZGUtPmlfZmxhZ3MgJj0gfihTX05PQVRJTUUgfCBTX05PUVVPVEEgfCBTX0lNTVVUQUJMRSk7CisJCWlub2RlLT5pX2ZsYWdzIHw9IG9sZGZsYWdzOworCQl1cF93cml0ZSgmZHFvcHQtPmRxcHRyX3NlbSk7CisJfQorCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworb3V0X2ZtdDoKKwlwdXRfcXVvdGFfZm9ybWF0KGZtdCk7CisKKwlyZXR1cm4gZXJyb3I7IAorfQorCisvKiBSZWVuYWJsZSBxdW90YXMgb24gcmVtb3VudCBSVyAqLworc3RhdGljIGludCB2ZnNfcXVvdGFfb25fcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKKworCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwlpZiAoIXNiX2hhc19xdW90YV9zdXNwZW5kZWQoc2IsIHR5cGUpKSB7CisJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisJaW5vZGUgPSBkcW9wdC0+ZmlsZXNbdHlwZV07CisJZHFvcHQtPmZpbGVzW3R5cGVdID0gTlVMTDsKKwlzcGluX2xvY2soJmRxX3N0YXRlX2xvY2spOworCWZsYWdzID0gZHFvcHQtPmZsYWdzICYgZHF1b3Rfc3RhdGVfZmxhZyhEUVVPVF9VU0FHRV9FTkFCTEVEIHwKKwkJCQkJCURRVU9UX0xJTUlUU19FTkFCTEVELCB0eXBlKTsKKwlkcW9wdC0+ZmxhZ3MgJj0gfmRxdW90X3N0YXRlX2ZsYWcoRFFVT1RfU1RBVEVfRkxBR1MsIHR5cGUpOworCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKworCWZsYWdzID0gZHF1b3RfZ2VuZXJpY19mbGFnKGZsYWdzLCB0eXBlKTsKKwlyZXQgPSB2ZnNfbG9hZF9xdW90YV9pbm9kZShpbm9kZSwgdHlwZSwgZHFvcHQtPmluZm9bdHlwZV0uZHFpX2ZtdF9pZCwKKwkJCQkgICBmbGFncyk7CisJaXB1dChpbm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmZzX3F1b3RhX29uX3BhdGgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsCisJCSAgICAgIHN0cnVjdCBwYXRoICpwYXRoKQoreworCWludCBlcnJvciA9IHNlY3VyaXR5X3F1b3RhX29uKHBhdGgtPmRlbnRyeSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJLyogUXVvdGEgZmlsZSBub3Qgb24gdGhlIHNhbWUgZmlsZXN5c3RlbT8gKi8KKwlpZiAocGF0aC0+bW50LT5tbnRfc2IgIT0gc2IpCisJCWVycm9yID0gLUVYREVWOworCWVsc2UKKwkJZXJyb3IgPSB2ZnNfbG9hZF9xdW90YV9pbm9kZShwYXRoLT5kZW50cnktPmRfaW5vZGUsIHR5cGUsCisJCQkJCSAgICAgZm9ybWF0X2lkLCBEUVVPVF9VU0FHRV9FTkFCTEVEIHwKKwkJCQkJICAgICBEUVVPVF9MSU1JVFNfRU5BQkxFRCk7CisJcmV0dXJuIGVycm9yOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fcGF0aCk7CisKK2ludCB2ZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsIGNoYXIgKm5hbWUsCisJCSBpbnQgcmVtb3VudCkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCWludCBlcnJvcjsKKworCWlmIChyZW1vdW50KQorCQlyZXR1cm4gdmZzX3F1b3RhX29uX3JlbW91bnQoc2IsIHR5cGUpOworCisJZXJyb3IgPSBrZXJuX3BhdGgobmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOworCWlmICghZXJyb3IpIHsKKwkJZXJyb3IgPSB2ZnNfcXVvdGFfb25fcGF0aChzYiwgdHlwZSwgZm9ybWF0X2lkLCAmcGF0aCk7CisJCXBhdGhfcHV0KCZwYXRoKTsKKwl9CisJcmV0dXJuIGVycm9yOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb24pOworCisvKgorICogTW9yZSBwb3dlcmZ1bCBmdW5jdGlvbiBmb3IgdHVybmluZyBvbiBxdW90YXMgYWxsb3dpbmcgc2V0dGluZworICogb2YgaW5kaXZpZHVhbCBxdW90YSBmbGFncworICovCitpbnQgdmZzX3F1b3RhX2VuYWJsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKKwkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CisKKwkvKiBKdXN0IHVuc3VzcGVuZCBxdW90YXM/ICovCisJaWYgKGZsYWdzICYgRFFVT1RfU1VTUEVOREVEKQorCQlyZXR1cm4gdmZzX3F1b3RhX29uX3JlbW91bnQoc2IsIHR5cGUpOworCWlmICghZmxhZ3MpCisJCXJldHVybiAwOworCS8qIEp1c3QgdXBkYXRpbmcgZmxhZ3MgbmVlZGVkPyAqLworCWlmIChzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCB0eXBlKSkgeworCQltdXRleF9sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisJCS8qIE5vdyBkbyBhIHJlbGlhYmxlIHRlc3QuLi4gKi8KKwkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCB0eXBlKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisJCQlnb3RvIGxvYWRfcXVvdGE7CisJCX0KKwkJaWYgKGZsYWdzICYgRFFVT1RfVVNBR0VfRU5BQkxFRCAmJgorCQkgICAgc2JfaGFzX3F1b3RhX3VzYWdlX2VuYWJsZWQoc2IsIHR5cGUpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dF9sb2NrOworCQl9CisJCWlmIChmbGFncyAmIERRVU9UX0xJTUlUU19FTkFCTEVEICYmCisJCSAgICBzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoc2IsIHR5cGUpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dF9sb2NrOworCQl9CisJCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CisJCXNiX2Rxb3B0KHNiKS0+ZmxhZ3MgfD0gZHF1b3Rfc3RhdGVfZmxhZyhmbGFncywgdHlwZSk7CisJCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKK291dF9sb2NrOgorCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKK2xvYWRfcXVvdGE6CisJcmV0dXJuIHZmc19sb2FkX3F1b3RhX2lub2RlKGlub2RlLCB0eXBlLCBmb3JtYXRfaWQsIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wodmZzX3F1b3RhX2VuYWJsZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBmaWxlc3lzdGVtIG5lZWRzIHRvIGluaXRpYWxpemUgcXVvdGFzCisgKiBkdXJpbmcgbW91bnQgdGltZS4KKyAqLworaW50IHZmc19xdW90YV9vbl9tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICpxZl9uYW1lLAorCQlpbnQgZm9ybWF0X2lkLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJaW50IGVycm9yOworCisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4ocWZfbmFtZSwgc2ItPnNfcm9vdCwgc3RybGVuKHFmX25hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CisKKwlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gc2VjdXJpdHlfcXVvdGFfb24oZGVudHJ5KTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHZmc19sb2FkX3F1b3RhX2lub2RlKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSwgZm9ybWF0X2lkLAorCQkJCURRVU9UX1VTQUdFX0VOQUJMRUQgfCBEUVVPVF9MSU1JVFNfRU5BQkxFRCk7CisKK291dDoKKwlkcHV0KGRlbnRyeSk7CisJcmV0dXJuIGVycm9yOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fbW91bnQpOworCisvKiBXcmFwcGVyIHRvIHR1cm4gb24gcXVvdGFzIHdoZW4gcmVtb3VudGluZyBydyAqLworaW50IHZmc19kcV9xdW90YV9vbl9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGNudDsKKwlpbnQgcmV0ID0gMCwgZXJyOworCisJaWYgKCFzYi0+c19xY29wIHx8ICFzYi0+c19xY29wLT5xdW90YV9vbikKKwkJcmV0dXJuIC1FTk9TWVM7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWVyciA9IHNiLT5zX3Fjb3AtPnF1b3RhX29uKHNiLCBjbnQsIDAsIE5VTEwsIDEpOworCQlpZiAoZXJyIDwgMCAmJiAhcmV0KQorCQkJcmV0ID0gZXJyOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2ZnNfZHFfcXVvdGFfb25fcmVtb3VudCk7CisKK3N0YXRpYyBpbmxpbmUgcXNpemVfdCBxYnRvcyhxc2l6ZV90IGJsb2NrcykKK3sKKwlyZXR1cm4gYmxvY2tzIDw8IFFJRl9EUUJMS1NJWkVfQklUUzsKK30KKworc3RhdGljIGlubGluZSBxc2l6ZV90IHN0b3FiKHFzaXplX3Qgc3BhY2UpCit7CisJcmV0dXJuIChzcGFjZSArIFFJRl9EUUJMS1NJWkUgLSAxKSA+PiBRSUZfRFFCTEtTSVpFX0JJVFM7Cit9CisKKy8qIEdlbmVyaWMgcm91dGluZSBmb3IgZ2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyB2b2lkIGRvX2dldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgaWZfZHFibGsgKmRpKQoreworCXN0cnVjdCBtZW1fZHFibGsgKmRtID0gJmRxdW90LT5kcV9kcWI7CisKKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJZGktPmRxYl9iaGFyZGxpbWl0ID0gc3RvcWIoZG0tPmRxYl9iaGFyZGxpbWl0KTsKKwlkaS0+ZHFiX2Jzb2Z0bGltaXQgPSBzdG9xYihkbS0+ZHFiX2Jzb2Z0bGltaXQpOworCWRpLT5kcWJfY3Vyc3BhY2UgPSBkbS0+ZHFiX2N1cnNwYWNlICsgZG0tPmRxYl9yc3ZzcGFjZTsKKwlkaS0+ZHFiX2loYXJkbGltaXQgPSBkbS0+ZHFiX2loYXJkbGltaXQ7CisJZGktPmRxYl9pc29mdGxpbWl0ID0gZG0tPmRxYl9pc29mdGxpbWl0OworCWRpLT5kcWJfY3VyaW5vZGVzID0gZG0tPmRxYl9jdXJpbm9kZXM7CisJZGktPmRxYl9idGltZSA9IGRtLT5kcWJfYnRpbWU7CisJZGktPmRxYl9pdGltZSA9IGRtLT5kcWJfaXRpbWU7CisJZGktPmRxYl92YWxpZCA9IFFJRl9BTEw7CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Cit9CisKK2ludCB2ZnNfZ2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwKKwkJICBzdHJ1Y3QgaWZfZHFibGsgKmRpKQoreworCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CisKKwlkcXVvdCA9IGRxZ2V0KHNiLCBpZCwgdHlwZSk7CisJaWYgKCFkcXVvdCkKKwkJcmV0dXJuIC1FU1JDSDsKKwlkb19nZXRfZHFibGsoZHF1b3QsIGRpKTsKKwlkcXB1dChkcXVvdCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodmZzX2dldF9kcWJsayk7CisKKy8qIEdlbmVyaWMgcm91dGluZSBmb3Igc2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbnQgZG9fc2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBpZl9kcWJsayAqZGkpCit7CisJc3RydWN0IG1lbV9kcWJsayAqZG0gPSAmZHF1b3QtPmRxX2RxYjsKKwlpbnQgY2hlY2tfYmxpbSA9IDAsIGNoZWNrX2lsaW0gPSAwOworCXN0cnVjdCBtZW1fZHFpbmZvICpkcWkgPSAmc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfdHlwZV07CisKKwlpZiAoKGRpLT5kcWJfdmFsaWQgJiBRSUZfQkxJTUlUUyAmJgorCSAgICAgKGRpLT5kcWJfYmhhcmRsaW1pdCA+IGRxaS0+ZHFpX21heGJsaW1pdCB8fAorCSAgICAgIGRpLT5kcWJfYnNvZnRsaW1pdCA+IGRxaS0+ZHFpX21heGJsaW1pdCkpIHx8CisJICAgIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lMSU1JVFMgJiYKKwkgICAgIChkaS0+ZHFiX2loYXJkbGltaXQgPiBkcWktPmRxaV9tYXhpbGltaXQgfHwKKwkgICAgICBkaS0+ZHFiX2lzb2Z0bGltaXQgPiBkcWktPmRxaV9tYXhpbGltaXQpKSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfU1BBQ0UpIHsKKwkJZG0tPmRxYl9jdXJzcGFjZSA9IGRpLT5kcWJfY3Vyc3BhY2UgLSBkbS0+ZHFiX3JzdnNwYWNlOworCQljaGVja19ibGltID0gMTsKKwkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9TUEFDRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwl9CisJaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfQkxJTUlUUykgeworCQlkbS0+ZHFiX2Jzb2Z0bGltaXQgPSBxYnRvcyhkaS0+ZHFiX2Jzb2Z0bGltaXQpOworCQlkbS0+ZHFiX2JoYXJkbGltaXQgPSBxYnRvcyhkaS0+ZHFiX2JoYXJkbGltaXQpOworCQljaGVja19ibGltID0gMTsKKwkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9CTElNSVRTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCX0KKwlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9JTk9ERVMpIHsKKwkJZG0tPmRxYl9jdXJpbm9kZXMgPSBkaS0+ZHFiX2N1cmlub2RlczsKKwkJY2hlY2tfaWxpbSA9IDE7CisJCV9fc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCX0KKwlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9JTElNSVRTKSB7CisJCWRtLT5kcWJfaXNvZnRsaW1pdCA9IGRpLT5kcWJfaXNvZnRsaW1pdDsKKwkJZG0tPmRxYl9paGFyZGxpbWl0ID0gZGktPmRxYl9paGFyZGxpbWl0OworCQljaGVja19pbGltID0gMTsKKwkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JTElNSVRTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCX0KKwlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9CVElNRSkgeworCQlkbS0+ZHFiX2J0aW1lID0gZGktPmRxYl9idGltZTsKKwkJY2hlY2tfYmxpbSA9IDE7CisJCV9fc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfQlRJTUVfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJfQorCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lUSU1FKSB7CisJCWRtLT5kcWJfaXRpbWUgPSBkaS0+ZHFiX2l0aW1lOworCQljaGVja19pbGltID0gMTsKKwkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JVElNRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwl9CisKKwlpZiAoY2hlY2tfYmxpbSkgeworCQlpZiAoIWRtLT5kcWJfYnNvZnRsaW1pdCB8fAorCQkgICAgZG0tPmRxYl9jdXJzcGFjZSA8IGRtLT5kcWJfYnNvZnRsaW1pdCkgeworCQkJZG0tPmRxYl9idGltZSA9IDA7CisJCQljbGVhcl9iaXQoRFFfQkxLU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwkJfSBlbHNlIGlmICghKGRpLT5kcWJfdmFsaWQgJiBRSUZfQlRJTUUpKQorCQkJLyogU2V0IGdyYWNlIG9ubHkgaWYgdXNlciBoYXNuJ3QgcHJvdmlkZWQgaGlzIG93bi4uLiAqLworCQkJZG0tPmRxYl9idGltZSA9IGdldF9zZWNvbmRzKCkgKyBkcWktPmRxaV9iZ3JhY2U7CisJfQorCWlmIChjaGVja19pbGltKSB7CisJCWlmICghZG0tPmRxYl9pc29mdGxpbWl0IHx8CisJCSAgICBkbS0+ZHFiX2N1cmlub2RlcyA8IGRtLT5kcWJfaXNvZnRsaW1pdCkgeworCQkJZG0tPmRxYl9pdGltZSA9IDA7CisJCQljbGVhcl9iaXQoRFFfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCQl9IGVsc2UgaWYgKCEoZGktPmRxYl92YWxpZCAmIFFJRl9JVElNRSkpCisJCQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCisJCQlkbS0+ZHFiX2l0aW1lID0gZ2V0X3NlY29uZHMoKSArIGRxaS0+ZHFpX2lncmFjZTsKKwl9CisJaWYgKGRtLT5kcWJfYmhhcmRsaW1pdCB8fCBkbS0+ZHFiX2Jzb2Z0bGltaXQgfHwgZG0tPmRxYl9paGFyZGxpbWl0IHx8CisJICAgIGRtLT5kcWJfaXNvZnRsaW1pdCkKKwkJY2xlYXJfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJZWxzZQorCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJbWFya19kcXVvdF9kaXJ0eShkcXVvdCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZmc19zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAorCQkgIHN0cnVjdCBpZl9kcWJsayAqZGkpCit7CisJc3RydWN0IGRxdW90ICpkcXVvdDsKKwlpbnQgcmM7CisKKwlkcXVvdCA9IGRxZ2V0KHNiLCBpZCwgdHlwZSk7CisJaWYgKCFkcXVvdCkgeworCQlyYyA9IC1FU1JDSDsKKwkJZ290byBvdXQ7CisJfQorCXJjID0gZG9fc2V0X2RxYmxrKGRxdW90LCBkaSk7CisJZHFwdXQoZHF1b3QpOworb3V0OgorCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0wodmZzX3NldF9kcWJsayk7CisKKy8qIEdlbmVyaWMgcm91dGluZSBmb3IgZ2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBmaWxlIGluZm9ybWF0aW9uICovCitpbnQgdmZzX2dldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKQoreworCXN0cnVjdCBtZW1fZHFpbmZvICptaTsKKyAgCisJbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKSB7CisJCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwkJcmV0dXJuIC1FU1JDSDsKKwl9CisJbWkgPSBzYl9kcW9wdChzYiktPmluZm8gKyB0eXBlOworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlpaS0+ZHFpX2JncmFjZSA9IG1pLT5kcWlfYmdyYWNlOworCWlpLT5kcWlfaWdyYWNlID0gbWktPmRxaV9pZ3JhY2U7CisJaWktPmRxaV9mbGFncyA9IG1pLT5kcWlfZmxhZ3MgJiBEUUZfTUFTSzsKKwlpaS0+ZHFpX3ZhbGlkID0gSUlGX0FMTDsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19nZXRfZHFpbmZvKTsKKworLyogR2VuZXJpYyByb3V0aW5lIGZvciBzZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIGZpbGUgaW5mb3JtYXRpb24gKi8KK2ludCB2ZnNfc2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IGlmX2RxaW5mbyAqaWkpCit7CisJc3RydWN0IG1lbV9kcWluZm8gKm1pOworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKSB7CisJCWVyciA9IC1FU1JDSDsKKwkJZ290byBvdXQ7CisJfQorCW1pID0gc2JfZHFvcHQoc2IpLT5pbmZvICsgdHlwZTsKKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJaWYgKGlpLT5kcWlfdmFsaWQgJiBJSUZfQkdSQUNFKQorCQltaS0+ZHFpX2JncmFjZSA9IGlpLT5kcWlfYmdyYWNlOworCWlmIChpaS0+ZHFpX3ZhbGlkICYgSUlGX0lHUkFDRSkKKwkJbWktPmRxaV9pZ3JhY2UgPSBpaS0+ZHFpX2lncmFjZTsKKwlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9GTEFHUykKKwkJbWktPmRxaV9mbGFncyA9IChtaS0+ZHFpX2ZsYWdzICYgfkRRRl9NQVNLKSB8CisJCQkJKGlpLT5kcWlfZmxhZ3MgJiBEUUZfTUFTSyk7CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJbWFya19pbmZvX2RpcnR5KHNiLCB0eXBlKTsKKwkvKiBGb3JjZSB3cml0ZSB0byBkaXNrICovCisJc2ItPmRxX29wLT53cml0ZV9pbmZvKHNiLCB0eXBlKTsKK291dDoKKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wodmZzX3NldF9kcWluZm8pOworCitzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHMgPSB7CisJLnF1b3RhX29uCT0gdmZzX3F1b3RhX29uLAorCS5xdW90YV9vZmYJPSB2ZnNfcXVvdGFfb2ZmLAorCS5xdW90YV9zeW5jCT0gdmZzX3F1b3RhX3N5bmMsCisJLmdldF9pbmZvCT0gdmZzX2dldF9kcWluZm8sCisJLnNldF9pbmZvCT0gdmZzX3NldF9kcWluZm8sCisJLmdldF9kcWJsawk9IHZmc19nZXRfZHFibGssCisJLnNldF9kcWJsawk9IHZmc19zZXRfZHFibGsKK307CisKK3N0YXRpYyBjdGxfdGFibGUgZnNfZHFzdGF0c190YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gRlNfRFFfTE9PS1VQUywKKwkJLnByb2NuYW1lCT0gImxvb2t1cHMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5sb29rdXBzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX0RST1BTLAorCQkucHJvY25hbWUJPSAiZHJvcHMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5kcm9wcywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBGU19EUV9SRUFEUywKKwkJLnByb2NuYW1lCT0gInJlYWRzIiwKKwkJLmRhdGEJCT0gJmRxc3RhdHMucmVhZHMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA0NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gRlNfRFFfV1JJVEVTLAorCQkucHJvY25hbWUJPSAid3JpdGVzIiwKKwkJLmRhdGEJCT0gJmRxc3RhdHMud3JpdGVzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX0NBQ0hFX0hJVFMsCisJCS5wcm9jbmFtZQk9ICJjYWNoZV9oaXRzIiwKKwkJLmRhdGEJCT0gJmRxc3RhdHMuY2FjaGVfaGl0cywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBGU19EUV9BTExPQ0FURUQsCisJCS5wcm9jbmFtZQk9ICJhbGxvY2F0ZWRfZHF1b3RzIiwKKwkJLmRhdGEJCT0gJmRxc3RhdHMuYWxsb2NhdGVkX2RxdW90cywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBGU19EUV9GUkVFLAorCQkucHJvY25hbWUJPSAiZnJlZV9kcXVvdHMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5mcmVlX2RxdW90cywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBGU19EUV9TWU5DUywKKwkJLnByb2NuYW1lCT0gInN5bmNzIiwKKwkJLmRhdGEJCT0gJmRxc3RhdHMuc3luY3MsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA0NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorI2lmZGVmIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HCisJeworCQkuY3RsX25hbWUJPSBGU19EUV9XQVJOSU5HUywKKwkJLnByb2NuYW1lCT0gIndhcm5pbmdzIiwKKwkJLmRhdGEJCT0gJmZsYWdfcHJpbnRfd2FybmluZ3MsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorI2VuZGlmCisJeyAuY3RsX25hbWUgPSAwIH0sCit9OworCitzdGF0aWMgY3RsX3RhYmxlIGZzX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBGU19EUVNUQVRTLAorCQkucHJvY25hbWUJPSAicXVvdGEiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZnNfZHFzdGF0c190YWJsZSwKKwl9LAorCXsgLmN0bF9uYW1lID0gMCB9LAorfTsKKworc3RhdGljIGN0bF90YWJsZSBzeXNfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9GUywKKwkJLnByb2NuYW1lCT0gImZzIiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IGZzX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcXVvdF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBucl9oYXNoLCBvcmRlcjsKKworCXByaW50ayhLRVJOX05PVElDRSAiVkZTOiBEaXNrIHF1b3RhcyAlc1xuIiwgX19EUVVPVF9WRVJTSU9OX18pOworCisJcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN5c190YWJsZSk7CisKKwlkcXVvdF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHF1b3QiLAorCQkJc2l6ZW9mKHN0cnVjdCBkcXVvdCksIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDQsCisJCQkoU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCVNMQUJfTUVNX1NQUkVBRHxTTEFCX1BBTklDKSwKKwkJCU5VTEwpOworCisJb3JkZXIgPSAwOworCWRxdW90X2hhc2ggPSAoc3RydWN0IGhsaXN0X2hlYWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIG9yZGVyKTsKKwlpZiAoIWRxdW90X2hhc2gpCisJCXBhbmljKCJDYW5ub3QgY3JlYXRlIGRxdW90IGhhc2ggdGFibGUiKTsKKworCS8qIEZpbmQgcG93ZXItb2YtdHdvIGhsaXN0X2hlYWRzIHdoaWNoIGNhbiBmaXQgaW50byBhbGxvY2F0aW9uICovCisJbnJfaGFzaCA9ICgxVUwgPDwgb3JkZXIpICogUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKTsKKwlkcV9oYXNoX2JpdHMgPSAwOworCWRvIHsKKwkJZHFfaGFzaF9iaXRzKys7CisJfSB3aGlsZSAobnJfaGFzaCA+PiBkcV9oYXNoX2JpdHMpOworCWRxX2hhc2hfYml0cy0tOworCisJbnJfaGFzaCA9IDFVTCA8PCBkcV9oYXNoX2JpdHM7CisJZHFfaGFzaF9tYXNrID0gbnJfaGFzaCAtIDE7CisJZm9yIChpID0gMDsgaSA8IG5yX2hhc2g7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKGRxdW90X2hhc2ggKyBpKTsKKworCXByaW50aygiRHF1b3QtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAlbGQgKG9yZGVyICVsZCwgJWxkIGJ5dGVzKVxuIiwKKwkJCW5yX2hhc2gsIG9yZGVyLCAoUEFHRV9TSVpFIDw8IG9yZGVyKSk7CisKKwlyZWdpc3Rlcl9zaHJpbmtlcigmZHFjYWNoZV9zaHJpbmtlcik7CisKKyNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKKwlpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJnF1b3RhX2dlbmxfZmFtaWx5KSAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJWRlM6IEZhaWxlZCB0byBjcmVhdGUgcXVvdGEgbmV0bGluayBpbnRlcmZhY2UuXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChkcXVvdF9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhLmMgYi9mcy9xdW90YS9xdW90YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjVhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9xdW90YS9xdW90YS5jCkBAIC0wLDAgKzEsNTI0IEBACisvKgorICogUXVvdGEgY29kZSBuZWNlc3NhcnkgZXZlbiB3aGVuIFZGUyBxdW90YSBzdXBwb3J0IGlzIG5vdCBjb21waWxlZAorICogaW50byB0aGUga2VybmVsLiAgVGhlIGludGVyZXN0aW5nIHN0dWZmIGlzIG92ZXIgaW4gZHF1b3QuYywgaGVyZQorICogd2UgaGF2ZSBzeW1ib2xzIGZvciBpbml0aWFsIHF1b3RhY3RsKDIpIGhhbmRsaW5nLCB0aGUgc3lzY3RsKDIpCisgKiB2YXJpYWJsZXMsIGV0YyAtIHRoaW5ncyBuZWVkZWQgZXZlbiB3aGVuIHF1b3RhIHN1cHBvcnQgZGlzYWJsZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIENoZWNrIHZhbGlkaXR5IG9mIGdlbmVyaWMgcXVvdGFjdGwgY29tbWFuZHMgKi8KK3N0YXRpYyBpbnQgZ2VuZXJpY19xdW90YWN0bF92YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwKKwkJCQkgIHFpZF90IGlkKQoreworCWlmICh0eXBlID49IE1BWFFVT1RBUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzYiAmJiBjbWQgIT0gUV9TWU5DKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKiBJcyBvcGVyYXRpb24gc3VwcG9ydGVkPyAqLworCWlmIChzYiAmJiAhc2ItPnNfcWNvcCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFFfR0VURk1UOgorCQkJYnJlYWs7CisJCWNhc2UgUV9RVU9UQU9OOgorCQkJaWYgKCFzYi0+c19xY29wLT5xdW90YV9vbikKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCWJyZWFrOworCQljYXNlIFFfUVVPVEFPRkY6CisJCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX29mZikKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCWJyZWFrOworCQljYXNlIFFfU0VUSU5GTzoKKwkJCWlmICghc2ItPnNfcWNvcC0+c2V0X2luZm8pCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX0dFVElORk86CisJCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF9pbmZvKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9TRVRRVU9UQToKKwkJCWlmICghc2ItPnNfcWNvcC0+c2V0X2RxYmxrKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9HRVRRVU9UQToKKwkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9TWU5DOgorCQkJaWYgKHNiICYmICFzYi0+c19xY29wLT5xdW90YV9zeW5jKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJcyBxdW90YSB0dXJuZWQgb24gZm9yIGNvbW1hbmRzIHdoaWNoIG5lZWQgaXQ/ICovCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBRX0dFVEZNVDoKKwkJY2FzZSBRX0dFVElORk86CisJCWNhc2UgUV9TRVRJTkZPOgorCQljYXNlIFFfU0VUUVVPVEE6CisJCWNhc2UgUV9HRVRRVU9UQToKKwkJCS8qIFRoaXMgaXMganVzdCBhbiBpbmZvcm1hdGl2ZSB0ZXN0IHNvIHdlIGFyZSBzYXRpc2ZpZWQKKwkJCSAqIHdpdGhvdXQgdGhlIGxvY2sgKi8KKwkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpCisJCQkJcmV0dXJuIC1FU1JDSDsKKwl9CisKKwkvKiBDaGVjayBwcml2aWxlZ2VzICovCisJaWYgKGNtZCA9PSBRX0dFVFFVT1RBKSB7CisJCWlmICgoKHR5cGUgPT0gVVNSUVVPVEEgJiYgY3VycmVudF9ldWlkKCkgIT0gaWQpIHx8CisJCSAgICAgKHR5cGUgPT0gR1JQUVVPVEEgJiYgIWluX2Vncm91cF9wKGlkKSkpICYmCisJCSAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJfQorCWVsc2UgaWYgKGNtZCAhPSBRX0dFVEZNVCAmJiBjbWQgIT0gUV9TWU5DICYmIGNtZCAhPSBRX0dFVElORk8pCisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2hlY2sgdmFsaWRpdHkgb2YgWEZTIFF1b3RhIE1hbmFnZXIgY29tbWFuZHMgKi8KK3N0YXRpYyBpbnQgeHFtX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLAorCQkJICAgICAgcWlkX3QgaWQpCit7CisJaWYgKHR5cGUgPj0gWFFNX01BWFFVT1RBUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzYikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFzYi0+c19xY29wKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgUV9YUVVPVEFPTjoKKwkJY2FzZSBRX1hRVU9UQU9GRjoKKwkJY2FzZSBRX1hRVU9UQVJNOgorCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfeHN0YXRlKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9YR0VUUVNUQVQ6CisJCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF94c3RhdGUpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX1hTRVRRTElNOgorCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfeHF1b3RhKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9YR0VUUVVPVEE6CisJCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF94cXVvdGEpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX1hRVU9UQVNZTkM6CisJCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIHByaXZpbGVnZXMgKi8KKwlpZiAoY21kID09IFFfWEdFVFFVT1RBKSB7CisJCWlmICgoKHR5cGUgPT0gWFFNX1VTUlFVT1RBICYmIGN1cnJlbnRfZXVpZCgpICE9IGlkKSB8fAorCQkgICAgICh0eXBlID09IFhRTV9HUlBRVU9UQSAmJiAhaW5fZWdyb3VwX3AoaWQpKSkgJiYKKwkJICAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJfSBlbHNlIGlmIChjbWQgIT0gUV9YR0VUUVNUQVQgJiYgY21kICE9IFFfWFFVT1RBU1lOQykgeworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLAorCQkJCXFpZF90IGlkKQoreworCWludCBlcnJvcjsKKworCWlmIChYUU1fQ09NTUFORChjbWQpKQorCQllcnJvciA9IHhxbV9xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kLCBpZCk7CisJZWxzZQorCQllcnJvciA9IGdlbmVyaWNfcXVvdGFjdGxfdmFsaWQoc2IsIHR5cGUsIGNtZCwgaWQpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gc2VjdXJpdHlfcXVvdGFjdGwoY21kLCB0eXBlLCBpZCwgc2IpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgcXVvdGFfc3luY19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlpbnQgY250OworCisJc2ItPnNfcWNvcC0+cXVvdGFfc3luYyhzYiwgdHlwZSk7CisKKwlpZiAoc2JfZHFvcHQoc2IpLT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKQorCQlyZXR1cm47CisJLyogVGhpcyBpcyBub3QgdmVyeSBjbGV2ZXIgKGFuZCBmYXN0KSBidXQgY3VycmVudGx5IEkgZG9uJ3Qga25vdyBhYm91dAorCSAqIGFueSBvdGhlciBzaW1wbGUgd2F5IG9mIGdldHRpbmcgcXVvdGEgZGF0YSB0byBkaXNrIGFuZCB3ZSBtdXN0IGdldAorCSAqIHRoZW0gdGhlcmUgZm9yIHVzZXJzcGFjZSB0byBiZSB2aXNpYmxlLi4uICovCisJaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQorCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7CisJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKKworCS8qCisJICogTm93IHdoZW4gZXZlcnl0aGluZyBpcyB3cml0dGVuIHdlIGNhbiBkaXNjYXJkIHRoZSBwYWdlY2FjaGUgc28KKwkgKiB0aGF0IHVzZXJzcGFjZSBzZWVzIHRoZSBjaGFuZ2VzLgorCSAqLworCW11dGV4X2xvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQorCQkJY29udGludWU7CisJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKKwkJCWNvbnRpbnVlOworCQltdXRleF9sb2NrX25lc3RlZCgmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX211dGV4LAorCQkJCSAgSV9NVVRFWF9RVU9UQSk7CisJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfZGF0YSwgMCk7CisJCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX211dGV4KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOworfQorCit2b2lkIHN5bmNfZHF1b3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCWludCBjbnQ7CisKKwlpZiAoc2IpIHsKKwkJaWYgKHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCisJCQlxdW90YV9zeW5jX3NiKHNiLCB0eXBlKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9jaygmc2JfbG9jayk7CityZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgeworCQkvKiBUaGlzIHRlc3QganVzdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBzbyBpdCBuZWVkbid0IGJlCisJCSAqIHJlbGlhYmxlLi4uICovCisJCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQkJaWYgKHR5cGUgIT0gLTEgJiYgdHlwZSAhPSBjbnQpCisJCQkJY29udGludWU7CisJCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCisJCQkJY29udGludWU7CisJCQlpZiAoIWluZm9fZGlydHkoJnNiX2Rxb3B0KHNiKS0+aW5mb1tjbnRdKSAmJgorCQkJICAgbGlzdF9lbXB0eSgmc2JfZHFvcHQoc2IpLT5pbmZvW2NudF0uZHFpX2RpcnR5X2xpc3QpKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNudCA9PSBNQVhRVU9UQVMpCisJCQljb250aW51ZTsKKwkJc2ItPnNfY291bnQrKzsKKwkJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCQlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7CisJCWlmIChzYi0+c19yb290ICYmIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCisJCQlxdW90YV9zeW5jX3NiKHNiLCB0eXBlKTsKKwkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKKwkJaWYgKF9fcHV0X3N1cGVyX2FuZF9uZWVkX3Jlc3RhcnQoc2IpKQorCQkJZ290byByZXN0YXJ0OworCX0KKwlzcGluX3VubG9jaygmc2JfbG9jayk7Cit9CisKKy8qIENvcHkgcGFyYW1ldGVycyBhbmQgY2FsbCBwcm9wZXIgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgZG9fcXVvdGFjdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkLAorCQkgICAgICAgdm9pZCBfX3VzZXIgKmFkZHIpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgUV9RVU9UQU9OOiB7CisJCQljaGFyICpwYXRobmFtZTsKKworCQkJcGF0aG5hbWUgPSBnZXRuYW1lKGFkZHIpOworCQkJaWYgKElTX0VSUihwYXRobmFtZSkpCisJCQkJcmV0dXJuIFBUUl9FUlIocGF0aG5hbWUpOworCQkJcmV0ID0gc2ItPnNfcWNvcC0+cXVvdGFfb24oc2IsIHR5cGUsIGlkLCBwYXRobmFtZSwgMCk7CisJCQlwdXRuYW1lKHBhdGhuYW1lKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJY2FzZSBRX1FVT1RBT0ZGOgorCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX29mZihzYiwgdHlwZSwgMCk7CisKKwkJY2FzZSBRX0dFVEZNVDogeworCQkJX191MzIgZm10OworCisJCQlkb3duX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpIHsKKwkJCQl1cF9yZWFkKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJCQkJcmV0dXJuIC1FU1JDSDsKKwkJCX0KKwkJCWZtdCA9IHNiX2Rxb3B0KHNiKS0+aW5mb1t0eXBlXS5kcWlfZm9ybWF0LT5xZl9mbXRfaWQ7CisJCQl1cF9yZWFkKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmbXQsIHNpemVvZihmbXQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgUV9HRVRJTkZPOiB7CisJCQlzdHJ1Y3QgaWZfZHFpbmZvIGluZm87CisKKwkJCXJldCA9IHNiLT5zX3Fjb3AtPmdldF9pbmZvKHNiLCB0eXBlLCAmaW5mbyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlpZiAoY29weV90b191c2VyKGFkZHIsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBRX1NFVElORk86IHsKKwkJCXN0cnVjdCBpZl9kcWluZm8gaW5mbzsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCBhZGRyLCBzaXplb2YoaW5mbykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9pbmZvKHNiLCB0eXBlLCAmaW5mbyk7CisJCX0KKwkJY2FzZSBRX0dFVFFVT1RBOiB7CisJCQlzdHJ1Y3QgaWZfZHFibGsgaWRxOworCisJCQlyZXQgPSBzYi0+c19xY29wLT5nZXRfZHFibGsoc2IsIHR5cGUsIGlkLCAmaWRxKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmlkcSwgc2l6ZW9mKGlkcSkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBRX1NFVFFVT1RBOiB7CisJCQlzdHJ1Y3QgaWZfZHFibGsgaWRxOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmlkcSwgYWRkciwgc2l6ZW9mKGlkcSkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9kcWJsayhzYiwgdHlwZSwgaWQsICZpZHEpOworCQl9CisJCWNhc2UgUV9TWU5DOgorCQkJc3luY19kcXVvdHMoc2IsIHR5cGUpOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBRX1hRVU9UQU9OOgorCQljYXNlIFFfWFFVT1RBT0ZGOgorCQljYXNlIFFfWFFVT1RBUk06IHsKKwkJCV9fdTMyIGZsYWdzOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzLCBhZGRyLCBzaXplb2YoZmxhZ3MpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiBzYi0+c19xY29wLT5zZXRfeHN0YXRlKHNiLCBmbGFncywgY21kKTsKKwkJfQorCQljYXNlIFFfWEdFVFFTVEFUOiB7CisJCQlzdHJ1Y3QgZnNfcXVvdGFfc3RhdCBmcXM7CisJCQorCQkJaWYgKChyZXQgPSBzYi0+c19xY29wLT5nZXRfeHN0YXRlKHNiLCAmZnFzKSkpCisJCQkJcmV0dXJuIHJldDsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmZxcywgc2l6ZW9mKGZxcykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBRX1hTRVRRTElNOiB7CisJCQlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmZmRxLCBhZGRyLCBzaXplb2YoZmRxKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCSAgICAgICByZXR1cm4gc2ItPnNfcWNvcC0+c2V0X3hxdW90YShzYiwgdHlwZSwgaWQsICZmZHEpOworCQl9CisJCWNhc2UgUV9YR0VUUVVPVEE6IHsKKwkJCXN0cnVjdCBmc19kaXNrX3F1b3RhIGZkcTsKKworCQkJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X3hxdW90YShzYiwgdHlwZSwgaWQsICZmZHEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmZmRxLCBzaXplb2YoZmRxKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFFfWFFVT1RBU1lOQzoKKwkJCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9zeW5jKHNiLCB0eXBlKTsKKwkJLyogV2UgbmV2ZXIgcmVhY2ggaGVyZSB1bmxlc3MgdmFsaWRpdHkgY2hlY2sgaXMgYnJva2VuICovCisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBsb29rIHVwIGEgc3VwZXJibG9jayBvbiB3aGljaCBxdW90YSBvcHMgd2lsbCBiZSBwZXJmb3JtZWQKKyAqIC0gdXNlIHRoZSBuYW1lIG9mIGEgYmxvY2sgZGV2aWNlIHRvIGZpbmQgdGhlIHN1cGVyYmxvY2sgdGhlcmVvbgorICovCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpxdW90YWN0bF9ibG9jayhjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCkKK3sKKyNpZmRlZiBDT05GSUdfQkxPQ0sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJY2hhciAqdG1wID0gZ2V0bmFtZShzcGVjaWFsKTsKKworCWlmIChJU19FUlIodG1wKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHRtcCk7CisJYmRldiA9IGxvb2t1cF9iZGV2KHRtcCk7CisJcHV0bmFtZSh0bXApOworCWlmIChJU19FUlIoYmRldikpCisJCXJldHVybiBFUlJfQ0FTVChiZGV2KTsKKwlzYiA9IGdldF9zdXBlcihiZGV2KTsKKwliZHB1dChiZGV2KTsKKwlpZiAoIXNiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCXJldHVybiBzYjsKKyNlbHNlCisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZS4gVGhpcyBjb21tdW5pY2F0ZXMgd2l0aAorICogdGhlIHVzZXItbGV2ZWwgcHJvZ3JhbXMuIEN1cnJlbnRseSB0aGlzIG9ubHkgc3VwcG9ydHMgZGlza3F1b3RhCisgKiBjYWxscy4gTWF5YmUgd2UgbmVlZCB0byBhZGQgdGhlIHByb2Nlc3MgcXVvdGFzIGV0Yy4gaW4gdGhlIGZ1dHVyZSwKKyAqIGJ1dCB3ZSBwcm9iYWJseSBzaG91bGQgdXNlIHJsaW1pdHMgZm9yIHRoYXQuCisgKi8KK1NZU0NBTExfREVGSU5FNChxdW90YWN0bCwgdW5zaWduZWQgaW50LCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWwsCisJCXFpZF90LCBpZCwgdm9pZCBfX3VzZXIgKiwgYWRkcikKK3sKKwl1aW50IGNtZHMsIHR5cGU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7CisJaW50IHJldDsKKworCWNtZHMgPSBjbWQgPj4gU1VCQ01EU0hJRlQ7CisJdHlwZSA9IGNtZCAmIFNVQkNNRE1BU0s7CisKKwlpZiAoY21kcyAhPSBRX1NZTkMgfHwgc3BlY2lhbCkgeworCQlzYiA9IHF1b3RhY3RsX2Jsb2NrKHNwZWNpYWwpOworCQlpZiAoSVNfRVJSKHNiKSkKKwkJCXJldHVybiBQVFJfRVJSKHNiKTsKKwl9CisKKwlyZXQgPSBjaGVja19xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kcywgaWQpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gZG9fcXVvdGFjdGwoc2IsIHR5cGUsIGNtZHMsIGlkLCBhZGRyKTsKKwlpZiAoc2IpCisJCWRyb3Bfc3VwZXIoc2IpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkKKy8qCisgKiBUaGlzIGNvZGUgd29ya3Mgb25seSBmb3IgMzIgYml0IHF1b3RhIHRvb2xzIG92ZXIgNjQgYml0IE9TICh4ODZfNjQsIGlhNjQpCisgKiBhbmQgaXMgbmVjZXNzYXJ5IGR1ZSB0byBhbGlnbm1lbnQgcHJvYmxlbXMuCisgKi8KK3N0cnVjdCBjb21wYXRfaWZfZHFibGsgeworCWNvbXBhdF91NjQgZHFiX2JoYXJkbGltaXQ7CisJY29tcGF0X3U2NCBkcWJfYnNvZnRsaW1pdDsKKwljb21wYXRfdTY0IGRxYl9jdXJzcGFjZTsKKwljb21wYXRfdTY0IGRxYl9paGFyZGxpbWl0OworCWNvbXBhdF91NjQgZHFiX2lzb2Z0bGltaXQ7CisJY29tcGF0X3U2NCBkcWJfY3VyaW5vZGVzOworCWNvbXBhdF91NjQgZHFiX2J0aW1lOworCWNvbXBhdF91NjQgZHFiX2l0aW1lOworCWNvbXBhdF91aW50X3QgZHFiX3ZhbGlkOworfTsKKworLyogWEZTIHN0cnVjdHVyZXMgKi8KK3N0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0IHsKKwljb21wYXRfdTY0IGRxYl9iaGFyZGxpbWl0OworCWNvbXBhdF91NjQgcWZzX25ibGtzOworCWNvbXBhdF91aW50X3QgcWZzX25leHRlbnRzOworfTsKKworc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0IHsKKwlfX3M4CQlxc192ZXJzaW9uOworCV9fdTE2CQlxc19mbGFnczsKKwlfX3M4CQlxc19wYWQ7CisJc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQJcXNfdXF1b3RhOworCXN0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0CXFzX2dxdW90YTsKKwljb21wYXRfdWludF90CXFzX2luY29yZWRxczsKKwljb21wYXRfaW50X3QJcXNfYnRpbWVsaW1pdDsKKwljb21wYXRfaW50X3QJcXNfaXRpbWVsaW1pdDsKKwljb21wYXRfaW50X3QJcXNfcnRidGltZWxpbWl0OworCV9fdTE2CQlxc19id2FybmxpbWl0OworCV9fdTE2CQlxc19pd2FybmxpbWl0OworfTsKKworYXNtbGlua2FnZSBsb25nIHN5czMyX3F1b3RhY3RsKHVuc2lnbmVkIGludCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsLAorCQkJCQkJcWlkX3QgaWQsIHZvaWQgX191c2VyICphZGRyKQoreworCXVuc2lnbmVkIGludCBjbWRzOworCXN0cnVjdCBpZl9kcWJsayBfX3VzZXIgKmRxYmxrOworCXN0cnVjdCBjb21wYXRfaWZfZHFibGsgX191c2VyICpjb21wYXRfZHFibGs7CisJc3RydWN0IGZzX3F1b3RhX3N0YXQgX191c2VyICpmc3FzdGF0OworCXN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCBfX3VzZXIgKmNvbXBhdF9mc3FzdGF0OworCWNvbXBhdF91aW50X3QgZGF0YTsKKwl1MTYgeGRhdGE7CisJbG9uZyByZXQ7CisKKwljbWRzID0gY21kID4+IFNVQkNNRFNISUZUOworCisJc3dpdGNoIChjbWRzKSB7CisJY2FzZSBRX0dFVFFVT1RBOgorCQlkcWJsayA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgaWZfZHFibGspKTsKKwkJY29tcGF0X2RxYmxrID0gYWRkcjsKKwkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGRxYmxrKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlpZiAoY29weV9pbl91c2VyKGNvbXBhdF9kcWJsaywgZHFibGssIHNpemVvZigqY29tcGF0X2RxYmxrKSkgfHwKKwkJCWdldF91c2VyKGRhdGEsICZkcWJsay0+ZHFiX3ZhbGlkKSB8fAorCQkJcHV0X3VzZXIoZGF0YSwgJmNvbXBhdF9kcWJsay0+ZHFiX3ZhbGlkKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgUV9TRVRRVU9UQToKKwkJZHFibGsgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGlmX2RxYmxrKSk7CisJCWNvbXBhdF9kcWJsayA9IGFkZHI7CisJCXJldCA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2luX3VzZXIoZHFibGssIGNvbXBhdF9kcWJsaywgc2l6ZW9mKCpjb21wYXRfZHFibGspKSB8fAorCQkJZ2V0X3VzZXIoZGF0YSwgJmNvbXBhdF9kcWJsay0+ZHFiX3ZhbGlkKSB8fAorCQkJcHV0X3VzZXIoZGF0YSwgJmRxYmxrLT5kcWJfdmFsaWQpKQorCQkJYnJlYWs7CisJCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBkcWJsayk7CisJCWJyZWFrOworCWNhc2UgUV9YR0VUUVNUQVQ6CisJCWZzcXN0YXQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGZzX3F1b3RhX3N0YXQpKTsKKwkJY29tcGF0X2ZzcXN0YXQgPSBhZGRyOworCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgZnNxc3RhdCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJLyogQ29weWluZyBxc192ZXJzaW9uLCBxc19mbGFncywgcXNfcGFkICovCisJCWlmIChjb3B5X2luX3VzZXIoY29tcGF0X2ZzcXN0YXQsIGZzcXN0YXQsCisJCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQsIHFzX3VxdW90YSkpKQorCQkJYnJlYWs7CisJCS8qIENvcHlpbmcgcXNfdXF1b3RhICovCisJCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEsCisJCQkmZnNxc3RhdC0+cXNfdXF1b3RhLAorCQkJc2l6ZW9mKGNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEpKSB8fAorCQkJZ2V0X3VzZXIoZGF0YSwgJmZzcXN0YXQtPnFzX3VxdW90YS5xZnNfbmV4dGVudHMpIHx8CisJCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YS5xZnNfbmV4dGVudHMpKQorCQkJYnJlYWs7CisJCS8qIENvcHlpbmcgcXNfZ3F1b3RhICovCisJCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEsCisJCQkmZnNxc3RhdC0+cXNfZ3F1b3RhLAorCQkJc2l6ZW9mKGNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEpKSB8fAorCQkJZ2V0X3VzZXIoZGF0YSwgJmZzcXN0YXQtPnFzX2dxdW90YS5xZnNfbmV4dGVudHMpIHx8CisJCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YS5xZnNfbmV4dGVudHMpKQorCQkJYnJlYWs7CisJCS8qIENvcHlpbmcgdGhlIHJlc3QgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX2luY29yZWRxcywKKwkJCSZmc3FzdGF0LT5xc19pbmNvcmVkcXMsCisJCQlzaXplb2Yoc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0KSAtCisJCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQsIHFzX2luY29yZWRxcykpIHx8CisJCQlnZXRfdXNlcih4ZGF0YSwgJmZzcXN0YXQtPnFzX2l3YXJubGltaXQpIHx8CisJCQlwdXRfdXNlcih4ZGF0YSwgJmNvbXBhdF9mc3FzdGF0LT5xc19pd2FybmxpbWl0KSkKKwkJCWJyZWFrOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgYWRkcik7CisJfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3RyZWUuYyBiL2ZzL3F1b3RhL3F1b3RhX3RyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODFmNGJjCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvcXVvdGFfdHJlZS5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICoJdmZzdjAgcXVvdGEgSU8gb3BlcmF0aW9ucyBvbiBmaWxlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3YyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAicXVvdGFfdHJlZS5oIgorCitNT0RVTEVfQVVUSE9SKCJKYW4gS2FyYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRdW90YSB0cmllIHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBfX1FVT1RBX1FUX1BBUkFOT0lBCisKK3N0YXRpYyBpbnQgZ2V0X2luZGV4KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBxaWRfdCBpZCwgaW50IGRlcHRoKQoreworCXVuc2lnbmVkIGludCBlcGIgPSBpbmZvLT5kcWlfdXNhYmxlX2JzID4+IDI7CisKKwlkZXB0aCA9IGluZm8tPmRxaV9xdHJlZV9kZXB0aCAtIGRlcHRoIC0gMTsKKwl3aGlsZSAoZGVwdGgtLSkKKwkJaWQgLz0gZXBiOworCXJldHVybiBpZCAlIGVwYjsKK30KKworLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gb25lIGJsb2NrcyAqLworc3RhdGljIGludCBxdHJlZV9kcXN0cl9pbl9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8pCit7CisJcmV0dXJuIChpbmZvLT5kcWlfdXNhYmxlX2JzIC0gc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpKQorCSAgICAgICAvIGluZm8tPmRxaV9lbnRyeV9zaXplOworfQorCitzdGF0aWMgY2hhciAqZ2V0ZHFidWYoc2l6ZV90IHNpemUpCit7CisJY2hhciAqYnVmID0ga21hbGxvYyhzaXplLCBHRlBfTk9GUyk7CisJaWYgKCFidWYpCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJWRlM6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBxdW90YSBidWZmZXJzLlxuIik7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHVpbnQgYmxrLCBjaGFyICpidWYpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGluZm8tPmRxaV9zYjsKKworCW1lbXNldChidWYsIDAsIGluZm8tPmRxaV91c2FibGVfYnMpOworCXJldHVybiBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgaW5mby0+ZHFpX3R5cGUsIGJ1ZiwKKwkgICAgICAgaW5mby0+ZHFpX3VzYWJsZV9icywgYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgdWludCBibGssIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5mby0+ZHFpX3NiOworCisJcmV0dXJuIHNiLT5zX29wLT5xdW90YV93cml0ZShzYiwgaW5mby0+ZHFpX3R5cGUsIGJ1ZiwKKwkgICAgICAgaW5mby0+ZHFpX3VzYWJsZV9icywgYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cyk7Cit9CisKKy8qIFJlbW92ZSBlbXB0eSBibG9jayBmcm9tIGxpc3QgYW5kIHJldHVybiBpdCAqLworc3RhdGljIGludCBnZXRfZnJlZV9kcWJsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbykKK3sKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWludCByZXQsIGJsazsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoaW5mby0+ZHFpX2ZyZWVfYmxrKSB7CisJCWJsayA9IGluZm8tPmRxaV9mcmVlX2JsazsKKwkJcmV0ID0gcmVhZF9ibGsoaW5mbywgYmxrLCBidWYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJaW5mby0+ZHFpX2ZyZWVfYmxrID0gbGUzMl90b19jcHUoZGgtPmRxZGhfbmV4dF9mcmVlKTsKKwl9CisJZWxzZSB7CisJCW1lbXNldChidWYsIDAsIGluZm8tPmRxaV91c2FibGVfYnMpOworCQkvKiBBc3N1cmUgYmxvY2sgYWxsb2NhdGlvbi4uLiAqLworCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgaW5mby0+ZHFpX2Jsb2NrcywgYnVmKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9idWY7CisJCWJsayA9IGluZm8tPmRxaV9ibG9ja3MrKzsKKwl9CisJbWFya19pbmZvX2RpcnR5KGluZm8tPmRxaV9zYiwgaW5mby0+ZHFpX3R5cGUpOworCXJldCA9IGJsazsKK291dF9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBJbnNlcnQgZW1wdHkgYmxvY2sgdG8gdGhlIGxpc3QgKi8KK3N0YXRpYyBpbnQgcHV0X2ZyZWVfZHFibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGNoYXIgKmJ1ZiwgdWludCBibGspCit7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwlpbnQgZXJyOworCisJZGgtPmRxZGhfbmV4dF9mcmVlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2ZyZWVfYmxrKTsKKwlkaC0+ZHFkaF9wcmV2X2ZyZWUgPSBjcHVfdG9fbGUzMigwKTsKKwlkaC0+ZHFkaF9lbnRyaWVzID0gY3B1X3RvX2xlMTYoMCk7CisJZXJyID0gd3JpdGVfYmxrKGluZm8sIGJsaywgYnVmKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpbmZvLT5kcWlfZnJlZV9ibGsgPSBibGs7CisJbWFya19pbmZvX2RpcnR5KGluZm8tPmRxaV9zYiwgaW5mby0+ZHFpX3R5cGUpOworCXJldHVybiAwOworfQorCisvKiBSZW1vdmUgZ2l2ZW4gYmxvY2sgZnJvbSB0aGUgbGlzdCBvZiBibG9ja3Mgd2l0aCBmcmVlIGVudHJpZXMgKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgY2hhciAqYnVmLAorCQkJICAgICAgIHVpbnQgYmxrKQoreworCWNoYXIgKnRtcGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOworCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJdWludCBuZXh0YmxrID0gbGUzMl90b19jcHUoZGgtPmRxZGhfbmV4dF9mcmVlKTsKKwl1aW50IHByZXZibGsgPSBsZTMyX3RvX2NwdShkaC0+ZHFkaF9wcmV2X2ZyZWUpOworCWludCBlcnI7CisKKwlpZiAoIXRtcGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKG5leHRibGspIHsKKwkJZXJyID0gcmVhZF9ibGsoaW5mbywgbmV4dGJsaywgdG1wYnVmKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF9idWY7CisJCSgoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKXRtcGJ1ZiktPmRxZGhfcHJldl9mcmVlID0KKwkJCQkJCQlkaC0+ZHFkaF9wcmV2X2ZyZWU7CisJCWVyciA9IHdyaXRlX2JsayhpbmZvLCBuZXh0YmxrLCB0bXBidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwl9CisJaWYgKHByZXZibGspIHsKKwkJZXJyID0gcmVhZF9ibGsoaW5mbywgcHJldmJsaywgdG1wYnVmKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF9idWY7CisJCSgoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKXRtcGJ1ZiktPmRxZGhfbmV4dF9mcmVlID0KKwkJCQkJCQlkaC0+ZHFkaF9uZXh0X2ZyZWU7CisJCWVyciA9IHdyaXRlX2JsayhpbmZvLCBwcmV2YmxrLCB0bXBidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwl9IGVsc2UgeworCQlpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IG5leHRibGs7CisJCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKKwl9CisJa2ZyZWUodG1wYnVmKTsKKwlkaC0+ZHFkaF9uZXh0X2ZyZWUgPSBkaC0+ZHFkaF9wcmV2X2ZyZWUgPSBjcHVfdG9fbGUzMigwKTsKKwkvKiBObyBtYXR0ZXIgd2hldGhlciB3cml0ZSBzdWNjZWVkcyBibG9jayBpcyBvdXQgb2YgbGlzdCAqLworCWlmICh3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiVkZTOiBDYW4ndCB3cml0ZSBibG9jayAoJXUpIHdpdGggZnJlZSBlbnRyaWVzLlxuIiwKKwkJICAgICAgIGJsayk7CisJcmV0dXJuIDA7CitvdXRfYnVmOgorCWtmcmVlKHRtcGJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworLyogSW5zZXJ0IGdpdmVuIGJsb2NrIHRvIHRoZSBiZWdpbm5pbmcgb2YgbGlzdCB3aXRoIGZyZWUgZW50cmllcyAqLworc3RhdGljIGludCBpbnNlcnRfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBjaGFyICpidWYsCisJCQkgICAgICAgdWludCBibGspCit7CisJY2hhciAqdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwlpbnQgZXJyOworCisJaWYgKCF0bXBidWYpCisJCXJldHVybiAtRU5PTUVNOworCWRoLT5kcWRoX25leHRfZnJlZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9mcmVlX2VudHJ5KTsKKwlkaC0+ZHFkaF9wcmV2X2ZyZWUgPSBjcHVfdG9fbGUzMigwKTsKKwllcnIgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9idWY7CisJaWYgKGluZm8tPmRxaV9mcmVlX2VudHJ5KSB7CisJCWVyciA9IHJlYWRfYmxrKGluZm8sIGluZm8tPmRxaV9mcmVlX2VudHJ5LCB0bXBidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJKChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopdG1wYnVmKS0+ZHFkaF9wcmV2X2ZyZWUgPQorCQkJCQkJCWNwdV90b19sZTMyKGJsayk7CisJCWVyciA9IHdyaXRlX2JsayhpbmZvLCBpbmZvLT5kcWlfZnJlZV9lbnRyeSwgdG1wYnVmKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF9idWY7CisJfQorCWtmcmVlKHRtcGJ1Zik7CisJaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBibGs7CisJbWFya19pbmZvX2RpcnR5KGluZm8tPmRxaV9zYiwgaW5mby0+ZHFpX3R5cGUpOworCXJldHVybiAwOworb3V0X2J1ZjoKKwlrZnJlZSh0bXBidWYpOworCXJldHVybiBlcnI7Cit9CisKKy8qIElzIHRoZSBlbnRyeSBpbiB0aGUgYmxvY2sgZnJlZT8gKi8KK2ludCBxdHJlZV9lbnRyeV91bnVzZWQoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGNoYXIgKmRpc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ZHFpX2VudHJ5X3NpemU7IGkrKykKKwkJaWYgKGRpc2tbaV0pCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0wocXRyZWVfZW50cnlfdW51c2VkKTsKKworLyogRmluZCBzcGFjZSBmb3IgZHF1b3QgKi8KK3N0YXRpYyB1aW50IGZpbmRfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGRxdW90ICpkcXVvdCwgaW50ICplcnIpCit7CisJdWludCBibGssIGk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJY2hhciAqZGRxdW90OworCisJKmVyciA9IDA7CisJaWYgKCFidWYpIHsKKwkJKmVyciA9IC1FTk9NRU07CisJCXJldHVybiAwOworCX0KKwlkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWlmIChpbmZvLT5kcWlfZnJlZV9lbnRyeSkgeworCQlibGsgPSBpbmZvLT5kcWlfZnJlZV9lbnRyeTsKKwkJKmVyciA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKKwkJaWYgKCplcnIgPCAwKQorCQkJZ290byBvdXRfYnVmOworCX0gZWxzZSB7CisJCWJsayA9IGdldF9mcmVlX2RxYmxrKGluZm8pOworCQlpZiAoKGludClibGsgPCAwKSB7CisJCQkqZXJyID0gYmxrOworCQkJa2ZyZWUoYnVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCW1lbXNldChidWYsIDAsIGluZm8tPmRxaV91c2FibGVfYnMpOworCQkvKiBUaGlzIGlzIGVub3VnaCBhcyB0aGUgYmxvY2sgaXMgYWxyZWFkeSB6ZXJvZWQgYW5kIHRoZSBlbnRyeQorCQkgKiBsaXN0IGlzIGVtcHR5Li4uICovCisJCWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gYmxrOworCQltYXJrX2luZm9fZGlydHkoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7CisJfQorCS8qIEJsb2NrIHdpbGwgYmUgZnVsbD8gKi8KKwlpZiAobGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykgKyAxID49IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkgeworCQkqZXJyID0gcmVtb3ZlX2ZyZWVfZHFlbnRyeShpbmZvLCBidWYsIGJsayk7CisJCWlmICgqZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IENhbid0ICIKKwkJCSAgICAgICAicmVtb3ZlIGJsb2NrICgldSkgZnJvbSBlbnRyeSBmcmVlIGxpc3QuXG4iLAorCQkJICAgICAgIGJsayk7CisJCQlnb3RvIG91dF9idWY7CisJCX0KKwl9CisJbGUxNl9hZGRfY3B1KCZkaC0+ZHFkaF9lbnRyaWVzLCAxKTsKKwkvKiBGaW5kIGZyZWUgc3RydWN0dXJlIGluIGJsb2NrICovCisJZGRxdW90ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpOworCWZvciAoaSA9IDA7IGkgPCBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbyk7IGkrKykgeworCQlpZiAocXRyZWVfZW50cnlfdW51c2VkKGluZm8sIGRkcXVvdCkpCisJCQlicmVhazsKKwkJZGRxdW90ICs9IGluZm8tPmRxaV9lbnRyeV9zaXplOworCX0KKyNpZmRlZiBfX1FVT1RBX1FUX1BBUkFOT0lBCisJaWYgKGkgPT0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBmaW5kX2ZyZWVfZHFlbnRyeSgpOiBEYXRhIGJsb2NrIGZ1bGwgIgorCQkJCSJidXQgaXQgc2hvdWxkbid0LlxuIik7CisJCSplcnIgPSAtRUlPOworCQlnb3RvIG91dF9idWY7CisJfQorI2VuZGlmCisJKmVyciA9IHdyaXRlX2JsayhpbmZvLCBibGssIGJ1Zik7CisJaWYgKCplcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBmaW5kX2ZyZWVfZHFlbnRyeSgpOiBDYW4ndCB3cml0ZSBxdW90YSAiCisJCQkJImRhdGEgYmxvY2sgJXUuXG4iLCBibGspOworCQlnb3RvIG91dF9idWY7CisJfQorCWRxdW90LT5kcV9vZmYgPSAoYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cykgKworCQkJc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpICsKKwkJCWkgKiBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKwlrZnJlZShidWYpOworCXJldHVybiBibGs7CitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKKy8qIEluc2VydCByZWZlcmVuY2UgdG8gc3RydWN0dXJlIGludG8gdGhlIHRyaWUgKi8KK3N0YXRpYyBpbnQgZG9faW5zZXJ0X3RyZWUoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCQkgIHVpbnQgKnRyZWVibGssIGludCBkZXB0aCkKK3sKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlpbnQgcmV0ID0gMCwgbmV3c29uID0gMCwgbmV3YWN0ID0gMDsKKwlfX2xlMzIgKnJlZjsKKwl1aW50IG5ld2JsazsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoISp0cmVlYmxrKSB7CisJCXJldCA9IGdldF9mcmVlX2RxYmxrKGluZm8pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJKnRyZWVibGsgPSByZXQ7CisJCW1lbXNldChidWYsIDAsIGluZm8tPmRxaV91c2FibGVfYnMpOworCQluZXdhY3QgPSAxOworCX0gZWxzZSB7CisJCXJldCA9IHJlYWRfYmxrKGluZm8sICp0cmVlYmxrLCBidWYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgdHJlZSBxdW90YSBibG9jayAiCisJCQkJCSIldS5cbiIsICp0cmVlYmxrKTsKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJfQorCX0KKwlyZWYgPSAoX19sZTMyICopYnVmOworCW5ld2JsayA9IGxlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKKwlpZiAoIW5ld2JsaykKKwkJbmV3c29uID0gMTsKKwlpZiAoZGVwdGggPT0gaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gMSkgeworI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKKwkJaWYgKG5ld2JsaykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEluc2VydGluZyBhbHJlYWR5IHByZXNlbnQgcXVvdGEgIgorCQkJCQkiZW50cnkgKGJsb2NrICV1KS5cbiIsCisJCQkgICAgICAgbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLAorCQkJCQkJZHF1b3QtPmRxX2lkLCBkZXB0aCldKSk7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBvdXRfYnVmOworCQl9CisjZW5kaWYKKwkJbmV3YmxrID0gZmluZF9mcmVlX2RxZW50cnkoaW5mbywgZHF1b3QsICZyZXQpOworCX0gZWxzZSB7CisJCXJldCA9IGRvX2luc2VydF90cmVlKGluZm8sIGRxdW90LCAmbmV3YmxrLCBkZXB0aCsxKTsKKwl9CisJaWYgKG5ld3NvbiAmJiByZXQgPj0gMCkgeworCQlyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSA9CisJCQkJCQkJY3B1X3RvX2xlMzIobmV3YmxrKTsKKwkJcmV0ID0gd3JpdGVfYmxrKGluZm8sICp0cmVlYmxrLCBidWYpOworCX0gZWxzZSBpZiAobmV3YWN0ICYmIHJldCA8IDApIHsKKwkJcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCAqdHJlZWJsayk7CisJfQorb3V0X2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyYXBwZXIgZm9yIGluc2VydGluZyBxdW90YSBzdHJ1Y3R1cmUgaW50byB0cmVlICovCitzdGF0aWMgaW5saW5lIGludCBkcV9pbnNlcnRfdHJlZShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpbnQgdG1wID0gUVRfVFJFRU9GRjsKKwlyZXR1cm4gZG9faW5zZXJ0X3RyZWUoaW5mbywgZHF1b3QsICZ0bXAsIDApOworfQorCisvKgorICogV2UgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgZGVhZGxvY2tzIGFzIHdlIG5ldmVyIGhhdmUgcXVvdGFzIG9uIHF1b3RhCisgKiBmaWxlcy4uLgorICovCitpbnQgcXRyZWVfd3JpdGVfZHF1b3Qoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaW50IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZHF1b3QtPmRxX3NiOworCXNzaXplX3QgcmV0OworCWNoYXIgKmRkcXVvdCA9IGdldGRxYnVmKGluZm8tPmRxaV9lbnRyeV9zaXplKTsKKworCWlmICghZGRxdW90KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGRxX29mZiBpcyBndWFyZGVkIGJ5IGRxaW9fbXV0ZXggKi8KKwlpZiAoIWRxdW90LT5kcV9vZmYpIHsKKwkJcmV0ID0gZHFfaW5zZXJ0X3RyZWUoaW5mbywgZHF1b3QpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEVycm9yICV6ZCBvY2N1cnJlZCB3aGlsZSAiCisJCQkJCSJjcmVhdGluZyBxdW90YS5cbiIsIHJldCk7CisJCQlrZnJlZShkZHF1b3QpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJaW5mby0+ZHFpX29wcy0+bWVtMmRpc2tfZHFibGsoZGRxdW90LCBkcXVvdCk7CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCBkZHF1b3QsIGluZm8tPmRxaV9lbnRyeV9zaXplLAorCQkJCSAgICBkcXVvdC0+ZHFfb2ZmKTsKKwlpZiAocmV0ICE9IGluZm8tPmRxaV9lbnRyeV9zaXplKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZGUzogZHF1b3RhIHdyaXRlIGZhaWxlZCBvbiBkZXYgJXNcbiIsCisJCSAgICAgICBzYi0+c19pZCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwl9CisJZHFzdGF0cy53cml0ZXMrKzsKKwlrZnJlZShkZHF1b3QpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocXRyZWVfd3JpdGVfZHF1b3QpOworCisvKiBGcmVlIGRxdW90IGVudHJ5IGluIGRhdGEgYmxvY2sgKi8KK3N0YXRpYyBpbnQgZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkJdWludCBibGspCit7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGRxdW90LT5kcV9vZmYgPj4gaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzICE9IGJsaykgeworCQlwcmludGsoS0VSTl9FUlIgIlZGUzogUXVvdGEgc3RydWN0dXJlIGhhcyBvZmZzZXQgdG8gb3RoZXIgIgorCQkgICJibG9jayAoJXUpIHRoYW4gaXQgc2hvdWxkICgldSkuXG4iLCBibGssCisJCSAgKHVpbnQpKGRxdW90LT5kcV9vZmYgPj4gaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSk7CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisJcmV0ID0gcmVhZF9ibGsoaW5mbywgYmxrLCBidWYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCByZWFkIHF1b3RhIGRhdGEgYmxvY2sgJXVcbiIsIGJsayk7CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisJZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwlsZTE2X2FkZF9jcHUoJmRoLT5kcWRoX2VudHJpZXMsIC0xKTsKKwlpZiAoIWxlMTZfdG9fY3B1KGRoLT5kcWRoX2VudHJpZXMpKSB7CS8qIEJsb2NrIGdvdCBmcmVlPyAqLworCQlyZXQgPSByZW1vdmVfZnJlZV9kcWVudHJ5KGluZm8sIGJ1ZiwgYmxrKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCBibGspOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IG1vdmUgcXVvdGEgZGF0YSBibG9jayAoJXUpICIKKwkJCSAgInRvIGZyZWUgbGlzdC5cbiIsIGJsayk7CisJCQlnb3RvIG91dF9idWY7CisJCX0KKwl9IGVsc2UgeworCQltZW1zZXQoYnVmICsKKwkJICAgICAgIChkcXVvdC0+ZHFfb2ZmICYgKCgxIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cykgLSAxKSksCisJCSAgICAgICAwLCBpbmZvLT5kcWlfZW50cnlfc2l6ZSk7CisJCWlmIChsZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSA9PQorCQkgICAgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pIC0gMSkgeworCQkJLyogSW5zZXJ0IHdpbGwgd3JpdGUgYmxvY2sgaXRzZWxmICovCisJCQlyZXQgPSBpbnNlcnRfZnJlZV9kcWVudHJ5KGluZm8sIGJ1ZiwgYmxrKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IGluc2VydCBxdW90YSBkYXRhICIKKwkJCQkgICAgICAgImJsb2NrICgldSkgdG8gZnJlZSBlbnRyeSBsaXN0LlxuIiwgYmxrKTsKKwkJCQlnb3RvIG91dF9idWY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3Qgd3JpdGUgcXVvdGEgZGF0YSAiCisJCQkJICAiYmxvY2sgJXVcbiIsIGJsayk7CisJCQkJZ290byBvdXRfYnVmOworCQkJfQorCQl9CisJfQorCWRxdW90LT5kcV9vZmYgPSAwOwkvKiBRdW90YSBpcyBub3cgdW5hdHRhY2hlZCAqLworb3V0X2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJlbW92ZSByZWZlcmVuY2UgdG8gZHF1b3QgZnJvbSB0cmVlICovCitzdGF0aWMgaW50IHJlbW92ZV90cmVlKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkgICAgICAgdWludCAqYmxrLCBpbnQgZGVwdGgpCit7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJaW50IHJldCA9IDA7CisJdWludCBuZXdibGs7CisJX19sZTMyICpyZWYgPSAoX19sZTMyICopYnVmOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHJlYWRfYmxrKGluZm8sICpibGssIGJ1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgZGF0YSBibG9jayAldVxuIiwgKmJsayk7CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisJbmV3YmxrID0gbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOworCWlmIChkZXB0aCA9PSBpbmZvLT5kcWlfcXRyZWVfZGVwdGggLSAxKSB7CisJCXJldCA9IGZyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgbmV3YmxrKTsKKwkJbmV3YmxrID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSByZW1vdmVfdHJlZShpbmZvLCBkcXVvdCwgJm5ld2JsaywgZGVwdGgrMSk7CisJfQorCWlmIChyZXQgPj0gMCAmJiAhbmV3YmxrKSB7CisJCWludCBpOworCQlyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSA9IGNwdV90b19sZTMyKDApOworCQkvKiBCbG9jayBnb3QgZW1wdHk/ICovCisJCWZvciAoaSA9IDA7IGkgPCAoaW5mby0+ZHFpX3VzYWJsZV9icyA+PiAyKSAmJiAhcmVmW2ldOyBpKyspCisJCQk7CisJCS8qIERvbid0IHB1dCB0aGUgcm9vdCBibG9jayBpbnRvIHRoZSBmcmVlIGJsb2NrIGxpc3QgKi8KKwkJaWYgKGkgPT0gKGluZm8tPmRxaV91c2FibGVfYnMgPj4gMikKKwkJICAgICYmICpibGsgIT0gUVRfVFJFRU9GRikgeworCQkJcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCAqYmxrKTsKKwkJCSpibGsgPSAwOworCQl9IGVsc2UgeworCQkJcmV0ID0gd3JpdGVfYmxrKGluZm8sICpibGssIGJ1Zik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3Qgd3JpdGUgcXVvdGEgdHJlZSAiCisJCQkJICAiYmxvY2sgJXUuXG4iLCAqYmxrKTsKKwkJfQorCX0KK291dF9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBEZWxldGUgZHF1b3QgZnJvbSB0cmVlICovCitpbnQgcXRyZWVfZGVsZXRlX2RxdW90KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXVpbnQgdG1wID0gUVRfVFJFRU9GRjsKKworCWlmICghZHF1b3QtPmRxX29mZikJLyogRXZlbiBub3QgYWxsb2NhdGVkPyAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVtb3ZlX3RyZWUoaW5mbywgZHF1b3QsICZ0bXAsIDApOworfQorRVhQT1JUX1NZTUJPTChxdHJlZV9kZWxldGVfZHF1b3QpOworCisvKiBGaW5kIGVudHJ5IGluIGJsb2NrICovCitzdGF0aWMgbG9mZl90IGZpbmRfYmxvY2tfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGRxdW90ICpkcXVvdCwgdWludCBibGspCit7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJbG9mZl90IHJldCA9IDA7CisJaW50IGk7CisJY2hhciAqZGRxdW90OworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSB0cmVlIGJsb2NrICV1LlxuIiwgYmxrKTsKKwkJZ290byBvdXRfYnVmOworCX0KKwlkZHF1b3QgPSBidWYgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7CisJZm9yIChpID0gMDsgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKTsgaSsrKSB7CisJCWlmIChpbmZvLT5kcWlfb3BzLT5pc19pZChkZHF1b3QsIGRxdW90KSkKKwkJCWJyZWFrOworCQlkZHF1b3QgKz0gaW5mby0+ZHFpX2VudHJ5X3NpemU7CisJfQorCWlmIChpID09IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlZGUzogUXVvdGEgZm9yIGlkICV1IHJlZmVyZW5jZWQgIgorCQkgICJidXQgbm90IHByZXNlbnQuXG4iLCBkcXVvdC0+ZHFfaWQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9idWY7CisJfSBlbHNlIHsKKwkJcmV0ID0gKGJsayA8PCBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpICsgc2l6ZW9mKHN0cnVjdAorCQkgIHF0X2Rpc2tfZHFkYmhlYWRlcikgKyBpICogaW5mby0+ZHFpX2VudHJ5X3NpemU7CisJfQorb3V0X2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEZpbmQgZW50cnkgZm9yIGdpdmVuIGlkIGluIHRoZSB0cmVlICovCitzdGF0aWMgbG9mZl90IGZpbmRfdHJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAorCQkJCXN0cnVjdCBkcXVvdCAqZHF1b3QsIHVpbnQgYmxrLCBpbnQgZGVwdGgpCit7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJbG9mZl90IHJldCA9IDA7CisJX19sZTMyICpyZWYgPSAoX19sZTMyICopYnVmOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSB0cmVlIGJsb2NrICV1LlxuIiwgYmxrKTsKKwkJZ290byBvdXRfYnVmOworCX0KKwlyZXQgPSAwOworCWJsayA9IGxlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKKwlpZiAoIWJsaykJLyogTm8gcmVmZXJlbmNlPyAqLworCQlnb3RvIG91dF9idWY7CisJaWYgKGRlcHRoIDwgaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gMSkKKwkJcmV0ID0gZmluZF90cmVlX2RxZW50cnkoaW5mbywgZHF1b3QsIGJsaywgZGVwdGgrMSk7CisJZWxzZQorCQlyZXQgPSBmaW5kX2Jsb2NrX2RxZW50cnkoaW5mbywgZHF1b3QsIGJsayk7CitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyogRmluZCBlbnRyeSBmb3IgZ2l2ZW4gaWQgaW4gdGhlIHRyZWUgLSB3cmFwcGVyIGZ1bmN0aW9uICovCitzdGF0aWMgaW5saW5lIGxvZmZfdCBmaW5kX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXJldHVybiBmaW5kX3RyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgUVRfVFJFRU9GRiwgMCk7Cit9CisKK2ludCBxdHJlZV9yZWFkX2RxdW90KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWludCB0eXBlID0gZHF1b3QtPmRxX3R5cGU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRxdW90LT5kcV9zYjsKKwlsb2ZmX3Qgb2Zmc2V0OworCWNoYXIgKmRkcXVvdDsKKwlpbnQgcmV0ID0gMDsKKworI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKKwkvKiBJbnZhbGlkYXRlZCBxdW90YT8gKi8KKwlpZiAoIXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZpbGVzW3R5cGVdKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBpbnZhbGlkYXRlZCB3aGlsZSByZWFkaW5nIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKyNlbmRpZgorCS8qIERvIHdlIGtub3cgb2Zmc2V0IG9mIHRoZSBkcXVvdCBlbnRyeSBpbiB0aGUgcXVvdGEgZmlsZT8gKi8KKwlpZiAoIWRxdW90LT5kcV9vZmYpIHsKKwkJb2Zmc2V0ID0gZmluZF9kcWVudHJ5KGluZm8sIGRxdW90KTsKKwkJaWYgKG9mZnNldCA8PSAwKSB7CS8qIEVudHJ5IG5vdCBwcmVzZW50PyAqLworCQkJaWYgKG9mZnNldCA8IDApCisJCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgIgorCQkJCSAgInN0cnVjdHVyZSBmb3IgaWQgJXUuXG4iLCBkcXVvdC0+ZHFfaWQpOworCQkJZHF1b3QtPmRxX29mZiA9IDA7CisJCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJCQltZW1zZXQoJmRxdW90LT5kcV9kcWIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2RxYmxrKSk7CisJCQlyZXQgPSBvZmZzZXQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlkcXVvdC0+ZHFfb2ZmID0gb2Zmc2V0OworCX0KKwlkZHF1b3QgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfZW50cnlfc2l6ZSk7CisJaWYgKCFkZHF1b3QpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCBkZHF1b3QsIGluZm8tPmRxaV9lbnRyeV9zaXplLAorCQkJCSAgIGRxdW90LT5kcV9vZmYpOworCWlmIChyZXQgIT0gaW5mby0+ZHFpX2VudHJ5X3NpemUpIHsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVJTzsKKwkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEVycm9yIHdoaWxlIHJlYWRpbmcgcXVvdGEgIgorCQkJCSJzdHJ1Y3R1cmUgZm9yIGlkICV1LlxuIiwgZHF1b3QtPmRxX2lkKTsKKwkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCQltZW1zZXQoJmRxdW90LT5kcV9kcWIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2RxYmxrKSk7CisJCWtmcmVlKGRkcXVvdCk7CisJCWdvdG8gb3V0OworCX0KKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJaW5mby0+ZHFpX29wcy0+ZGlzazJtZW1fZHFibGsoZHF1b3QsIGRkcXVvdCk7CisJaWYgKCFkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCisJICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCisJICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCisJICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQorCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJa2ZyZWUoZGRxdW90KTsKK291dDoKKwlkcXN0YXRzLnJlYWRzKys7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocXRyZWVfcmVhZF9kcXVvdCk7CisKKy8qIENoZWNrIHdoZXRoZXIgZHF1b3Qgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiBXZSBrbm93IHdlIGFyZQorICogdGhlIG9ubHkgb25lIG9wZXJhdGluZyBvbiBkcXVvdCAodGhhbmtzIHRvIGRxX2xvY2spICovCitpbnQgcXRyZWVfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSAmJgorCSAgICAhKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyB8IGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlKSkKKwkJcmV0dXJuIHF0cmVlX2RlbGV0ZV9kcXVvdChpbmZvLCBkcXVvdCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHF0cmVlX3JlbGVhc2VfZHF1b3QpOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGFfdHJlZS5oIGIvZnMvcXVvdGEvcXVvdGFfdHJlZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9xdW90YV90cmVlLmgKcmVuYW1lIHRvIGZzL3F1b3RhL3F1b3RhX3RyZWUuaApkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjEuYyBiL2ZzL3F1b3RhL3F1b3RhX3YxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkY2Y0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YxLmMKQEAgLTAsMCArMSwyMzQgQEAKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3YxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAicXVvdGFpb192MS5oIgorCitNT0RVTEVfQVVUSE9SKCJKYW4gS2FyYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPbGQgcXVvdGEgZm9ybWF0IHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBRVU9UQUJMT0NLX0JJVFMgMTAKKyNkZWZpbmUgUVVPVEFCTE9DS19TSVpFICgxIDw8IFFVT1RBQkxPQ0tfQklUUykKKworc3RhdGljIGlubGluZSBxc2l6ZV90IHYxX3N0b3FiKHFzaXplX3Qgc3BhY2UpCit7CisJcmV0dXJuIChzcGFjZSArIFFVT1RBQkxPQ0tfU0laRSAtIDEpID4+IFFVT1RBQkxPQ0tfQklUUzsKK30KKworc3RhdGljIGlubGluZSBxc2l6ZV90IHYxX3FidG9zKHFzaXplX3QgYmxvY2tzKQoreworCXJldHVybiBibG9ja3MgPDwgUVVPVEFCTE9DS19CSVRTOworfQorCitzdGF0aWMgdm9pZCB2MV9kaXNrMm1lbV9kcWJsayhzdHJ1Y3QgbWVtX2RxYmxrICptLCBzdHJ1Y3QgdjFfZGlza19kcWJsayAqZCkKK3sKKwltLT5kcWJfaWhhcmRsaW1pdCA9IGQtPmRxYl9paGFyZGxpbWl0OworCW0tPmRxYl9pc29mdGxpbWl0ID0gZC0+ZHFiX2lzb2Z0bGltaXQ7CisJbS0+ZHFiX2N1cmlub2RlcyA9IGQtPmRxYl9jdXJpbm9kZXM7CisJbS0+ZHFiX2JoYXJkbGltaXQgPSB2MV9xYnRvcyhkLT5kcWJfYmhhcmRsaW1pdCk7CisJbS0+ZHFiX2Jzb2Z0bGltaXQgPSB2MV9xYnRvcyhkLT5kcWJfYnNvZnRsaW1pdCk7CisJbS0+ZHFiX2N1cnNwYWNlID0gdjFfcWJ0b3MoZC0+ZHFiX2N1cmJsb2Nrcyk7CisJbS0+ZHFiX2l0aW1lID0gZC0+ZHFiX2l0aW1lOworCW0tPmRxYl9idGltZSA9IGQtPmRxYl9idGltZTsKK30KKworc3RhdGljIHZvaWQgdjFfbWVtMmRpc2tfZHFibGsoc3RydWN0IHYxX2Rpc2tfZHFibGsgKmQsIHN0cnVjdCBtZW1fZHFibGsgKm0pCit7CisJZC0+ZHFiX2loYXJkbGltaXQgPSBtLT5kcWJfaWhhcmRsaW1pdDsKKwlkLT5kcWJfaXNvZnRsaW1pdCA9IG0tPmRxYl9pc29mdGxpbWl0OworCWQtPmRxYl9jdXJpbm9kZXMgPSBtLT5kcWJfY3VyaW5vZGVzOworCWQtPmRxYl9iaGFyZGxpbWl0ID0gdjFfc3RvcWIobS0+ZHFiX2JoYXJkbGltaXQpOworCWQtPmRxYl9ic29mdGxpbWl0ID0gdjFfc3RvcWIobS0+ZHFiX2Jzb2Z0bGltaXQpOworCWQtPmRxYl9jdXJibG9ja3MgPSB2MV9zdG9xYihtLT5kcWJfY3Vyc3BhY2UpOworCWQtPmRxYl9pdGltZSA9IG0tPmRxYl9pdGltZTsKKwlkLT5kcWJfYnRpbWUgPSBtLT5kcWJfYnRpbWU7Cit9CisKK3N0YXRpYyBpbnQgdjFfcmVhZF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWludCB0eXBlID0gZHF1b3QtPmRxX3R5cGU7CisJc3RydWN0IHYxX2Rpc2tfZHFibGsgZHFibGs7CisKKwlpZiAoIXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZpbGVzW3R5cGVdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldCBzdHJ1Y3R1cmUgdG8gMHMgaW4gY2FzZSByZWFkIGZhaWxzL2lzIGFmdGVyIGVuZCBvZiBmaWxlICovCisJbWVtc2V0KCZkcWJsaywgMCwgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSk7CisJZHF1b3QtPmRxX3NiLT5zX29wLT5xdW90YV9yZWFkKGRxdW90LT5kcV9zYiwgdHlwZSwgKGNoYXIgKikmZHFibGssCisJCQlzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZihkcXVvdC0+ZHFfaWQpKTsKKworCXYxX2Rpc2sybWVtX2RxYmxrKCZkcXVvdC0+ZHFfZHFiLCAmZHFibGspOworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ID09IDAgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCA9PSAwICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgPT0gMCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ID09IDApCisJCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwlkcXN0YXRzLnJlYWRzKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2MV9jb21taXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlzaG9ydCB0eXBlID0gZHF1b3QtPmRxX3R5cGU7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHYxX2Rpc2tfZHFibGsgZHFibGs7CisKKwl2MV9tZW0yZGlza19kcWJsaygmZHFibGssICZkcXVvdC0+ZHFfZHFiKTsKKwlpZiAoZHF1b3QtPmRxX2lkID09IDApIHsKKwkJZHFibGsuZHFiX2J0aW1lID0KKwkJCXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bdHlwZV0uZHFpX2JncmFjZTsKKwkJZHFibGsuZHFiX2l0aW1lID0KKwkJCXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bdHlwZV0uZHFpX2lncmFjZTsKKwl9CisJcmV0ID0gMDsKKwlpZiAoc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pCisJCXJldCA9IGRxdW90LT5kcV9zYi0+c19vcC0+cXVvdGFfd3JpdGUoZHF1b3QtPmRxX3NiLCB0eXBlLAorCQkJKGNoYXIgKikmZHFibGssIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksCisJCQl2MV9kcW9mZihkcXVvdC0+ZHFfaWQpKTsKKwlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBkcXVvdGEgd3JpdGUgZmFpbGVkIG9uIGRldiAlc1xuIiwKKwkJCWRxdW90LT5kcV9zYi0+c19pZCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSAwOworCitvdXQ6CisJZHFzdGF0cy53cml0ZXMrKzsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIE1hZ2ljcyBvZiBuZXcgcXVvdGEgZm9ybWF0ICovCisjZGVmaW5lIFYyX0lOSVRRTUFHSUNTIHtcCisJMHhkOWMwMWYxMSwgICAgIC8qIFVTUlFVT1RBICovXAorCTB4ZDljMDE5MjcgICAgICAvKiBHUlBRVU9UQSAqL1wKK30KKworLyogSGVhZGVyIG9mIG5ldyBxdW90YSBmb3JtYXQgKi8KK3N0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIHsKKwlfX2xlMzIgZHFoX21hZ2ljOyAgICAgICAgLyogTWFnaWMgbnVtYmVyIGlkZW50aWZ5aW5nIGZpbGUgKi8KKwlfX2xlMzIgZHFoX3ZlcnNpb247ICAgICAgLyogRmlsZSB2ZXJzaW9uICovCit9OworCitzdGF0aWMgaW50IHYxX2NoZWNrX3F1b3RhX2ZpbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHNiX2Rxb3B0KHNiKS0+ZmlsZXNbdHlwZV07CisJdWxvbmcgYmxvY2tzOworCXNpemVfdCBvZmY7IAorCXN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIGRxaGVhZDsKKwlzc2l6ZV90IHNpemU7CisJbG9mZl90IGlzaXplOworCXN0YXRpYyBjb25zdCB1aW50IHF1b3RhX21hZ2ljc1tdID0gVjJfSU5JVFFNQUdJQ1M7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAoIWlzaXplKQorCQlyZXR1cm4gMDsKKwlibG9ja3MgPSBpc2l6ZSA+PiBCTE9DS19TSVpFX0JJVFM7CisJb2ZmID0gaXNpemUgJiAoQkxPQ0tfU0laRSAtIDEpOworCWlmICgoYmxvY2tzICUgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSAqIEJMT0NLX1NJWkUgKyBvZmYpICUKKwkgICAgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkKKwkJcmV0dXJuIDA7CisJLyogRG91YmxlY2hlY2sgd2hldGhlciB3ZSBkaWRuJ3QgZ2V0IGZpbGUgd2l0aCBuZXcgZm9ybWF0IC0gd2l0aCBvbGQKKwkgKiBxdW90YWN0bCgpIHRoaXMgY291bGQgaGFwcGVuICovCisJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWhlYWQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciksIDApOworCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikpCisJCXJldHVybiAxOwkvKiBQcm9iYWJseSBub3QgbmV3IGZvcm1hdCAqLworCWlmIChsZTMyX3RvX2NwdShkcWhlYWQuZHFoX21hZ2ljKSAhPSBxdW90YV9tYWdpY3NbdHlwZV0pCisJCXJldHVybiAxOwkvKiBEZWZpbml0ZWx5IG5vdCBuZXcgZm9ybWF0ICovCisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiVkZTOiAlczogUmVmdXNpbmcgdG8gdHVybiBvbiBvbGQgcXVvdGEgZm9ybWF0IG9uIGdpdmVuIGZpbGUuIgorCSAgICAgICAiIEl0IHByb2JhYmx5IGNvbnRhaW5zIG5ld2VyIHF1b3RhIGZvcm1hdC5cbiIsIHNiLT5zX2lkKTsKKyAgICAgICAgcmV0dXJuIDA7CQkvKiBTZWVtcyBsaWtlIGEgbmV3IGZvcm1hdCBmaWxlIC0+IHJlZnVzZSBpdCAqLworfQorCitzdGF0aWMgaW50IHYxX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKwlzdHJ1Y3QgdjFfZGlza19kcWJsayBkcWJsazsKKwlpbnQgcmV0OworCisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAorCQkJCXNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKTsKKwlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IDA7CisJLyogbGltaXRzIGFyZSBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGRhdGEgKi8KKwlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZjsKKwlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKKwlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlID0KKwkJCWRxYmxrLmRxYl9pdGltZSA/IGRxYmxrLmRxYl9pdGltZSA6IE1BWF9JUV9USU1FOworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9iZ3JhY2UgPQorCQkJZHFibGsuZHFiX2J0aW1lID8gZHFibGsuZHFiX2J0aW1lIDogTUFYX0RRX1RJTUU7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2MV93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOworCXN0cnVjdCB2MV9kaXNrX2RxYmxrIGRxYmxrOworCWludCByZXQ7CisKKwlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZmxhZ3MgJj0gfkRRRl9JTkZPX0RJUlRZOworCXJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKKwkJCQlzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZigwKSk7CisJaWYgKHJldCAhPSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKSB7CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKwlkcWJsay5kcWJfaXRpbWUgPSBkcW9wdC0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlOworCWRxYmxrLmRxYl9idGltZSA9IGRxb3B0LT5pbmZvW3R5cGVdLmRxaV9iZ3JhY2U7CisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKKwkgICAgICBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZigwKSk7CisJaWYgKHJldCA9PSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKQorCQlyZXQgPSAwOworCWVsc2UgaWYgKHJldCA+IDApCisJCXJldCA9IC1FSU87CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfb3BzIHYxX2Zvcm1hdF9vcHMgPSB7CisJLmNoZWNrX3F1b3RhX2ZpbGUJPSB2MV9jaGVja19xdW90YV9maWxlLAorCS5yZWFkX2ZpbGVfaW5mbwkJPSB2MV9yZWFkX2ZpbGVfaW5mbywKKwkud3JpdGVfZmlsZV9pbmZvCT0gdjFfd3JpdGVfZmlsZV9pbmZvLAorCS5mcmVlX2ZpbGVfaW5mbwkJPSBOVUxMLAorCS5yZWFkX2RxYmxrCQk9IHYxX3JlYWRfZHFibGssCisJLmNvbW1pdF9kcWJsawkJPSB2MV9jb21taXRfZHFibGssCit9OworCitzdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlIHYxX3F1b3RhX2Zvcm1hdCA9IHsKKwkucWZfZm10X2lkCT0gUUZNVF9WRlNfT0xELAorCS5xZl9vcHMJCT0gJnYxX2Zvcm1hdF9vcHMsCisJLnFmX293bmVyCT0gVEhJU19NT0RVTEUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdjFfcXVvdGFfZm9ybWF0KHZvaWQpCit7CisgICAgICAgIHJldHVybiByZWdpc3Rlcl9xdW90YV9mb3JtYXQoJnYxX3F1b3RhX2Zvcm1hdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3YxX3F1b3RhX2Zvcm1hdCh2b2lkKQoreworICAgICAgICB1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjFfcXVvdGFfZm9ybWF0KTsKK30KKworbW9kdWxlX2luaXQoaW5pdF92MV9xdW90YV9mb3JtYXQpOworbW9kdWxlX2V4aXQoZXhpdF92MV9xdW90YV9mb3JtYXQpOworCmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTQ3NWZiCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqCXZmc3YwIHF1b3RhIElPIG9wZXJhdGlvbnMgb24gZmlsZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kcWJsa192Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgInF1b3RhX3RyZWUuaCIKKyNpbmNsdWRlICJxdW90YWlvX3YyLmgiCisKK01PRFVMRV9BVVRIT1IoIkphbiBLYXJhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlF1b3RhIGZvcm1hdCB2MiBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgX19RVU9UQV9WMl9QQVJBTk9JQQorCitzdGF0aWMgdm9pZCB2Ml9tZW0yZGlza2RxYih2b2lkICpkcCwgc3RydWN0IGRxdW90ICpkcXVvdCk7CitzdGF0aWMgdm9pZCB2Ml9kaXNrMm1lbWRxYihzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpkcCk7CitzdGF0aWMgaW50IHYyX2lzX2lkKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKKworc3RhdGljIHN0cnVjdCBxdHJlZV9mbXRfb3BlcmF0aW9ucyB2Ml9xdHJlZV9vcHMgPSB7CisJLm1lbTJkaXNrX2RxYmxrID0gdjJfbWVtMmRpc2tkcWIsCisJLmRpc2sybWVtX2RxYmxrID0gdjJfZGlzazJtZW1kcWIsCisJLmlzX2lkID0gdjJfaXNfaWQsCit9OworCisjZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAorI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQorCitzdGF0aWMgaW5saW5lIHFzaXplX3QgdjJfc3RvcWIocXNpemVfdCBzcGFjZSkKK3sKKwlyZXR1cm4gKHNwYWNlICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHFzaXplX3QgdjJfcWJ0b3MocXNpemVfdCBibG9ja3MpCit7CisJcmV0dXJuIGJsb2NrcyA8PCBRVU9UQUJMT0NLX0JJVFM7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgZ2l2ZW4gZmlsZSBpcyByZWFsbHkgdmZzdjAgcXVvdGFmaWxlICovCitzdGF0aWMgaW50IHYyX2NoZWNrX3F1b3RhX2ZpbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoZWFkOworCXNzaXplX3Qgc2l6ZTsKKwlzdGF0aWMgY29uc3QgdWludCBxdW90YV9tYWdpY3NbXSA9IFYyX0lOSVRRTUFHSUNTOworCXN0YXRpYyBjb25zdCB1aW50IHF1b3RhX3ZlcnNpb25zW10gPSBWMl9JTklUUVZFUlNJT05TOworIAorCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFoZWFkLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCAwKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpKSB7CisJCXByaW50aygicXVvdGFfdjI6IGZhaWxlZCByZWFkIGV4cGVjdGVkPSV6ZCBnb3Q9JXpkXG4iLAorCQkJc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgc2l6ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAobGUzMl90b19jcHUoZHFoZWFkLmRxaF9tYWdpYykgIT0gcXVvdGFfbWFnaWNzW3R5cGVdIHx8CisJICAgIGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfdmVyc2lvbikgIT0gcXVvdGFfdmVyc2lvbnNbdHlwZV0pCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKiBSZWFkIGluZm9ybWF0aW9uIGhlYWRlciBmcm9tIHF1b3RhIGZpbGUgKi8KK3N0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvOworCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gc2JfZHFpbmZvKHNiLCB0eXBlKTsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqcWluZm87CisJc3NpemVfdCBzaXplOworCisJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7CisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgcmVhZCBpbmZvIHN0cnVjdHVyZSBvbiBkZXZpY2UgJXMuXG4iLAorCQkJc2ItPnNfaWQpOworCQlyZXR1cm4gLTE7CisJfQorCWluZm8tPmRxaV9wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHF0cmVlX21lbV9kcWluZm8pLCBHRlBfTk9GUyk7CisJaWYgKCFpbmZvLT5kcWlfcHJpdikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiTm90IGVub3VnaCBtZW1vcnkgZm9yIHF1b3RhIGluZm9ybWF0aW9uIHN0cnVjdHVyZS5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXFpbmZvID0gaW5mby0+ZHFpX3ByaXY7CisJLyogbGltaXRzIGFyZSBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGRhdGEgKi8KKwlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZjsKKwlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKKwlpbmZvLT5kcWlfYmdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2JncmFjZSk7CisJaW5mby0+ZHFpX2lncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9pZ3JhY2UpOworCWluZm8tPmRxaV9mbGFncyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mbGFncyk7CisJcWluZm8tPmRxaV9zYiA9IHNiOworCXFpbmZvLT5kcWlfdHlwZSA9IHR5cGU7CisJcWluZm8tPmRxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTsKKwlxaW5mby0+ZHFpX2ZyZWVfYmxrID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZyZWVfYmxrKTsKKwlxaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfZnJlZV9lbnRyeSk7CisJcWluZm8tPmRxaV9ibG9ja3NpemVfYml0cyA9IFYyX0RRQkxLU0laRV9CSVRTOworCXFpbmZvLT5kcWlfdXNhYmxlX2JzID0gMSA8PCBWMl9EUUJMS1NJWkVfQklUUzsKKwlxaW5mby0+ZHFpX3F0cmVlX2RlcHRoID0gcXRyZWVfZGVwdGgocWluZm8pOworCXFpbmZvLT5kcWlfZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWJsayk7CisJcWluZm8tPmRxaV9vcHMgPSAmdjJfcXRyZWVfb3BzOworCXJldHVybiAwOworfQorCisvKiBXcml0ZSBpbmZvcm1hdGlvbiBoZWFkZXIgdG8gcXVvdGEgZmlsZSAqLworc3RhdGljIGludCB2Ml93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvOworCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gc2JfZHFpbmZvKHNiLCB0eXBlKTsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqcWluZm8gPSBpbmZvLT5kcWlfcHJpdjsKKwlzc2l6ZV90IHNpemU7CisKKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJaW5mby0+ZHFpX2ZsYWdzICY9IH5EUUZfSU5GT19ESVJUWTsKKwlkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2JncmFjZSk7CisJZGluZm8uZHFpX2lncmFjZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9pZ3JhY2UpOworCWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9mbGFncyAmIERRRl9NQVNLKTsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwlkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tPmRxaV9ibG9ja3MpOworCWRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLT5kcWlfZnJlZV9ibGspOworCWRpbmZvLmRxaV9mcmVlX2VudHJ5ID0gY3B1X3RvX2xlMzIocWluZm8tPmRxaV9mcmVlX2VudHJ5KTsKKwlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7CisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3Qgd3JpdGUgaW5mbyBzdHJ1Y3R1cmUgb24gZGV2aWNlICVzLlxuIiwKKwkJCXNiLT5zX2lkKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdjJfZGlzazJtZW1kcWIoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZHApCit7CisJc3RydWN0IHYyX2Rpc2tfZHFibGsgKmQgPSBkcCwgZW1wdHk7CisJc3RydWN0IG1lbV9kcWJsayAqbSA9ICZkcXVvdC0+ZHFfZHFiOworCisJbS0+ZHFiX2loYXJkbGltaXQgPSBsZTMyX3RvX2NwdShkLT5kcWJfaWhhcmRsaW1pdCk7CisJbS0+ZHFiX2lzb2Z0bGltaXQgPSBsZTMyX3RvX2NwdShkLT5kcWJfaXNvZnRsaW1pdCk7CisJbS0+ZHFiX2N1cmlub2RlcyA9IGxlMzJfdG9fY3B1KGQtPmRxYl9jdXJpbm9kZXMpOworCW0tPmRxYl9pdGltZSA9IGxlNjRfdG9fY3B1KGQtPmRxYl9pdGltZSk7CisJbS0+ZHFiX2JoYXJkbGltaXQgPSB2Ml9xYnRvcyhsZTMyX3RvX2NwdShkLT5kcWJfYmhhcmRsaW1pdCkpOworCW0tPmRxYl9ic29mdGxpbWl0ID0gdjJfcWJ0b3MobGUzMl90b19jcHUoZC0+ZHFiX2Jzb2Z0bGltaXQpKTsKKwltLT5kcWJfY3Vyc3BhY2UgPSBsZTY0X3RvX2NwdShkLT5kcWJfY3Vyc3BhY2UpOworCW0tPmRxYl9idGltZSA9IGxlNjRfdG9fY3B1KGQtPmRxYl9idGltZSk7CisJLyogV2UgbmVlZCB0byBlc2NhcGUgYmFjayBhbGwtemVybyBzdHJ1Y3R1cmUgKi8KKwltZW1zZXQoJmVtcHR5LCAwLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFibGspKTsKKwllbXB0eS5kcWJfaXRpbWUgPSBjcHVfdG9fbGU2NCgxKTsKKwlpZiAoIW1lbWNtcCgmZW1wdHksIGRwLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFibGspKSkKKwkJbS0+ZHFiX2l0aW1lID0gMDsKK30KKworc3RhdGljIHZvaWQgdjJfbWVtMmRpc2tkcWIodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFibGsgKmQgPSBkcDsKKwlzdHJ1Y3QgbWVtX2RxYmxrICptID0gJmRxdW90LT5kcV9kcWI7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPQorCQkJc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdjsKKworCWQtPmRxYl9paGFyZGxpbWl0ID0gY3B1X3RvX2xlMzIobS0+ZHFiX2loYXJkbGltaXQpOworCWQtPmRxYl9pc29mdGxpbWl0ID0gY3B1X3RvX2xlMzIobS0+ZHFiX2lzb2Z0bGltaXQpOworCWQtPmRxYl9jdXJpbm9kZXMgPSBjcHVfdG9fbGUzMihtLT5kcWJfY3VyaW5vZGVzKTsKKwlkLT5kcWJfaXRpbWUgPSBjcHVfdG9fbGU2NChtLT5kcWJfaXRpbWUpOworCWQtPmRxYl9iaGFyZGxpbWl0ID0gY3B1X3RvX2xlMzIodjJfc3RvcWIobS0+ZHFiX2JoYXJkbGltaXQpKTsKKwlkLT5kcWJfYnNvZnRsaW1pdCA9IGNwdV90b19sZTMyKHYyX3N0b3FiKG0tPmRxYl9ic29mdGxpbWl0KSk7CisJZC0+ZHFiX2N1cnNwYWNlID0gY3B1X3RvX2xlNjQobS0+ZHFiX2N1cnNwYWNlKTsKKwlkLT5kcWJfYnRpbWUgPSBjcHVfdG9fbGU2NChtLT5kcWJfYnRpbWUpOworCWQtPmRxYl9pZCA9IGNwdV90b19sZTMyKGRxdW90LT5kcV9pZCk7CisJaWYgKHF0cmVlX2VudHJ5X3VudXNlZChpbmZvLCBkcCkpCisJCWQtPmRxYl9pdGltZSA9IGNwdV90b19sZTY0KDEpOworfQorCitzdGF0aWMgaW50IHYyX2lzX2lkKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXN0cnVjdCB2Ml9kaXNrX2RxYmxrICpkID0gZHA7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPQorCQkJc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdjsKKworCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZHApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbGUzMl90b19jcHUoZC0+ZHFiX2lkKSA9PSBkcXVvdC0+ZHFfaWQ7Cit9CisKK3N0YXRpYyBpbnQgdjJfcmVhZF9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXJldHVybiBxdHJlZV9yZWFkX2RxdW90KHNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXYsIGRxdW90KTsKK30KKworc3RhdGljIGludCB2Ml93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXJldHVybiBxdHJlZV93cml0ZV9kcXVvdChzYl9kcWluZm8oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSktPmRxaV9wcml2LCBkcXVvdCk7Cit9CisKK3N0YXRpYyBpbnQgdjJfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXJldHVybiBxdHJlZV9yZWxlYXNlX2RxdW90KHNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXYsIGRxdW90KTsKK30KKworc3RhdGljIGludCB2Ml9mcmVlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlrZnJlZShzYl9kcWluZm8oc2IsIHR5cGUpLT5kcWlfcHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X29wcyB2Ml9mb3JtYXRfb3BzID0geworCS5jaGVja19xdW90YV9maWxlCT0gdjJfY2hlY2tfcXVvdGFfZmlsZSwKKwkucmVhZF9maWxlX2luZm8JCT0gdjJfcmVhZF9maWxlX2luZm8sCisJLndyaXRlX2ZpbGVfaW5mbwk9IHYyX3dyaXRlX2ZpbGVfaW5mbywKKwkuZnJlZV9maWxlX2luZm8JCT0gdjJfZnJlZV9maWxlX2luZm8sCisJLnJlYWRfZHFibGsJCT0gdjJfcmVhZF9kcXVvdCwKKwkuY29tbWl0X2RxYmxrCQk9IHYyX3dyaXRlX2RxdW90LAorCS5yZWxlYXNlX2RxYmxrCQk9IHYyX3JlbGVhc2VfZHF1b3QsCit9OworCitzdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlIHYyX3F1b3RhX2Zvcm1hdCA9IHsKKwkucWZfZm10X2lkCT0gUUZNVF9WRlNfVjAsCisJLnFmX29wcwkJPSAmdjJfZm9ybWF0X29wcywKKwkucWZfb3duZXIJPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF92Ml9xdW90YV9mb3JtYXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcXVvdGFfZm9ybWF0KCZ2Ml9xdW90YV9mb3JtYXQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF92Ml9xdW90YV9mb3JtYXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjJfcXVvdGFfZm9ybWF0KTsKK30KKworbW9kdWxlX2luaXQoaW5pdF92Ml9xdW90YV9mb3JtYXQpOworbW9kdWxlX2V4aXQoZXhpdF92Ml9xdW90YV9mb3JtYXQpOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGFpb192MS5oIGIvZnMvcXVvdGEvcXVvdGFpb192MS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9xdW90YWlvX3YxLmgKcmVuYW1lIHRvIGZzL3F1b3RhL3F1b3RhaW9fdjEuaApkaWZmIC0tZ2l0IGEvZnMvcXVvdGFpb192Mi5oIGIvZnMvcXVvdGEvcXVvdGFpb192Mi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9xdW90YWlvX3YyLmgKcmVuYW1lIHRvIGZzL3F1b3RhL3F1b3RhaW9fdjIuaApkaWZmIC0tZ2l0IGEvZnMvcXVvdGFfdHJlZS5jIGIvZnMvcXVvdGFfdHJlZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTM0MDRjLi4wMDAwMDAwCi0tLSBhL2ZzL3F1b3RhX3RyZWUuYworKysgL2Rldi9udWxsCkBAIC0xLDY0NSArMCwwIEBACi0vKgotICoJdmZzdjAgcXVvdGEgSU8gb3BlcmF0aW9ucyBvbiBmaWxlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3YyLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0jaW5jbHVkZSAicXVvdGFfdHJlZS5oIgotCi1NT0RVTEVfQVVUSE9SKCJKYW4gS2FyYSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJRdW90YSB0cmllIHN1cHBvcnQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2RlZmluZSBfX1FVT1RBX1FUX1BBUkFOT0lBCi0KLXR5cGVkZWYgY2hhciAqZHFidWZfdDsKLQotc3RhdGljIGludCBnZXRfaW5kZXgoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHFpZF90IGlkLCBpbnQgZGVwdGgpCi17Ci0JdW5zaWduZWQgaW50IGVwYiA9IGluZm8tPmRxaV91c2FibGVfYnMgPj4gMjsKLQotCWRlcHRoID0gaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gZGVwdGggLSAxOwotCXdoaWxlIChkZXB0aC0tKQotCQlpZCAvPSBlcGI7Ci0JcmV0dXJuIGlkICUgZXBiOwotfQotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBpbiBvbmUgYmxvY2tzICovCi1zdGF0aWMgaW5saW5lIGludCBxdHJlZV9kcXN0cl9pbl9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8pCi17Ci0JcmV0dXJuIChpbmZvLT5kcWlfdXNhYmxlX2JzIC0gc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpKQotCSAgICAgICAvIGluZm8tPmRxaV9lbnRyeV9zaXplOwotfQotCi1zdGF0aWMgZHFidWZfdCBnZXRkcWJ1ZihzaXplX3Qgc2l6ZSkKLXsKLQlkcWJ1Zl90IGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX05PRlMpOwotCWlmICghYnVmKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBxdW90YSBidWZmZXJzLlxuIik7Ci0JcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVkcWJ1ZihkcWJ1Zl90IGJ1ZikKLXsKLQlrZnJlZShidWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHNzaXplX3QgcmVhZF9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHVpbnQgYmxrLCBkcWJ1Zl90IGJ1ZikKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5mby0+ZHFpX3NiOwotCi0JbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JcmV0dXJuIHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCBpbmZvLT5kcWlfdHlwZSwgKGNoYXIgKilidWYsCi0JICAgICAgIGluZm8tPmRxaV91c2FibGVfYnMsIGJsayA8PCBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHNzaXplX3Qgd3JpdGVfYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCB1aW50IGJsaywgZHFidWZfdCBidWYpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGluZm8tPmRxaV9zYjsKLQotCXJldHVybiBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIGluZm8tPmRxaV90eXBlLCAoY2hhciAqKWJ1ZiwKLQkgICAgICAgaW5mby0+ZHFpX3VzYWJsZV9icywgYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cyk7Ci19Ci0KLS8qIFJlbW92ZSBlbXB0eSBibG9jayBmcm9tIGxpc3QgYW5kIHJldHVybiBpdCAqLwotc3RhdGljIGludCBnZXRfZnJlZV9kcWJsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbykKLXsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7Ci0JaW50IHJldCwgYmxrOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChpbmZvLT5kcWlfZnJlZV9ibGspIHsKLQkJYmxrID0gaW5mby0+ZHFpX2ZyZWVfYmxrOwotCQlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCQlpbmZvLT5kcWlfZnJlZV9ibGsgPSBsZTMyX3RvX2NwdShkaC0+ZHFkaF9uZXh0X2ZyZWUpOwotCX0KLQllbHNlIHsKLQkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JCS8qIEFzc3VyZSBibG9jayBhbGxvY2F0aW9uLi4uICovCi0JCXJldCA9IHdyaXRlX2JsayhpbmZvLCBpbmZvLT5kcWlfYmxvY2tzLCBidWYpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJYmxrID0gaW5mby0+ZHFpX2Jsb2NrcysrOwotCX0KLQltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7Ci0JcmV0ID0gYmxrOwotb3V0X2J1ZjoKLQlmcmVlZHFidWYoYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBJbnNlcnQgZW1wdHkgYmxvY2sgdG8gdGhlIGxpc3QgKi8KLXN0YXRpYyBpbnQgcHV0X2ZyZWVfZHFibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGRxYnVmX3QgYnVmLCB1aW50IGJsaykKLXsKLQlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOwotCWludCBlcnI7Ci0KLQlkaC0+ZHFkaF9uZXh0X2ZyZWUgPSBjcHVfdG9fbGUzMihpbmZvLT5kcWlfZnJlZV9ibGspOwotCWRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOwotCWRoLT5kcWRoX2VudHJpZXMgPSBjcHVfdG9fbGUxNigwKTsKLQllcnIgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWluZm8tPmRxaV9mcmVlX2JsayA9IGJsazsKLQltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlbW92ZSBnaXZlbiBibG9jayBmcm9tIHRoZSBsaXN0IG9mIGJsb2NrcyB3aXRoIGZyZWUgZW50cmllcyAqLwotc3RhdGljIGludCByZW1vdmVfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBkcWJ1Zl90IGJ1ZiwgdWludCBibGspCi17Ci0JZHFidWZfdCB0bXBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOwotCXVpbnQgbmV4dGJsayA9IGxlMzJfdG9fY3B1KGRoLT5kcWRoX25leHRfZnJlZSk7Ci0JdWludCBwcmV2YmxrID0gbGUzMl90b19jcHUoZGgtPmRxZGhfcHJldl9mcmVlKTsKLQlpbnQgZXJyOwotCi0JaWYgKCF0bXBidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChuZXh0YmxrKSB7Ci0JCWVyciA9IHJlYWRfYmxrKGluZm8sIG5leHRibGssIHRtcGJ1Zik7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCQkoKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKil0bXBidWYpLT5kcWRoX3ByZXZfZnJlZSA9Ci0JCQkJCQkJZGgtPmRxZGhfcHJldl9mcmVlOwotCQllcnIgPSB3cml0ZV9ibGsoaW5mbywgbmV4dGJsaywgdG1wYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9idWY7Ci0JfQotCWlmIChwcmV2YmxrKSB7Ci0JCWVyciA9IHJlYWRfYmxrKGluZm8sIHByZXZibGssIHRtcGJ1Zik7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCQkoKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKil0bXBidWYpLT5kcWRoX25leHRfZnJlZSA9Ci0JCQkJCQkJZGgtPmRxZGhfbmV4dF9mcmVlOwotCQllcnIgPSB3cml0ZV9ibGsoaW5mbywgcHJldmJsaywgdG1wYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9idWY7Ci0JfSBlbHNlIHsKLQkJaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBuZXh0YmxrOwotCQltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7Ci0JfQotCWZyZWVkcWJ1Zih0bXBidWYpOwotCWRoLT5kcWRoX25leHRfZnJlZSA9IGRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOwotCS8qIE5vIG1hdHRlciB3aGV0aGVyIHdyaXRlIHN1Y2NlZWRzIGJsb2NrIGlzIG91dCBvZiBsaXN0ICovCi0JaWYgKHdyaXRlX2JsayhpbmZvLCBibGssIGJ1ZikgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3Qgd3JpdGUgYmxvY2sgKCV1KSB3aXRoIGZyZWUgZW50cmllcy5cbiIsIGJsayk7Ci0JcmV0dXJuIDA7Ci1vdXRfYnVmOgotCWZyZWVkcWJ1Zih0bXBidWYpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEluc2VydCBnaXZlbiBibG9jayB0byB0aGUgYmVnaW5uaW5nIG9mIGxpc3Qgd2l0aCBmcmVlIGVudHJpZXMgKi8KLXN0YXRpYyBpbnQgaW5zZXJ0X2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgZHFidWZfdCBidWYsIHVpbnQgYmxrKQotewotCWRxYnVmX3QgdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0Jc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKLQlpbnQgZXJyOwotCi0JaWYgKCF0bXBidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWRoLT5kcWRoX25leHRfZnJlZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9mcmVlX2VudHJ5KTsKLQlkaC0+ZHFkaF9wcmV2X2ZyZWUgPSBjcHVfdG9fbGUzMigwKTsKLQllcnIgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9idWY7Ci0JaWYgKGluZm8tPmRxaV9mcmVlX2VudHJ5KSB7Ci0JCWVyciA9IHJlYWRfYmxrKGluZm8sIGluZm8tPmRxaV9mcmVlX2VudHJ5LCB0bXBidWYpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJKChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopdG1wYnVmKS0+ZHFkaF9wcmV2X2ZyZWUgPQotCQkJCQkJCWNwdV90b19sZTMyKGJsayk7Ci0JCWVyciA9IHdyaXRlX2JsayhpbmZvLCBpbmZvLT5kcWlfZnJlZV9lbnRyeSwgdG1wYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9idWY7Ci0JfQotCWZyZWVkcWJ1Zih0bXBidWYpOwotCWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gYmxrOwotCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKLQlyZXR1cm4gMDsKLW91dF9idWY6Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogSXMgdGhlIGVudHJ5IGluIHRoZSBibG9jayBmcmVlPyAqLwotaW50IHF0cmVlX2VudHJ5X3VudXNlZChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgY2hhciAqZGlzaykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5kcWlfZW50cnlfc2l6ZTsgaSsrKQotCQlpZiAoZGlza1tpXSkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChxdHJlZV9lbnRyeV91bnVzZWQpOwotCi0vKiBGaW5kIHNwYWNlIGZvciBkcXVvdCAqLwotc3RhdGljIHVpbnQgZmluZF9mcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgZHF1b3QgKmRxdW90LCBpbnQgKmVycikKLXsKLQl1aW50IGJsaywgaTsKLQlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaDsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCWNoYXIgKmRkcXVvdDsKLQotCSplcnIgPSAwOwotCWlmICghYnVmKSB7Ci0JCSplcnIgPSAtRU5PTUVNOwotCQlyZXR1cm4gMDsKLQl9Ci0JZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKLQlpZiAoaW5mby0+ZHFpX2ZyZWVfZW50cnkpIHsKLQkJYmxrID0gaW5mby0+ZHFpX2ZyZWVfZW50cnk7Ci0JCSplcnIgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JCWlmICgqZXJyIDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQl9IGVsc2UgewotCQlibGsgPSBnZXRfZnJlZV9kcWJsayhpbmZvKTsKLQkJaWYgKChpbnQpYmxrIDwgMCkgewotCQkJKmVyciA9IGJsazsKLQkJCWZyZWVkcWJ1ZihidWYpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JCS8qIFRoaXMgaXMgZW5vdWdoIGFzIGJsb2NrIGlzIGFscmVhZHkgemVyb2VkIGFuZCBlbnRyeSBsaXN0IGlzIGVtcHR5Li4uICovCi0JCWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gYmxrOwotCQltYXJrX2luZm9fZGlydHkoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7Ci0JfQotCS8qIEJsb2NrIHdpbGwgYmUgZnVsbD8gKi8KLQlpZiAobGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykgKyAxID49IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkgewotCQkqZXJyID0gcmVtb3ZlX2ZyZWVfZHFlbnRyeShpbmZvLCBidWYsIGJsayk7Ci0JCWlmICgqZXJyIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IENhbid0ICIKLQkJCSAgICAgICAicmVtb3ZlIGJsb2NrICgldSkgZnJvbSBlbnRyeSBmcmVlIGxpc3QuXG4iLAotCQkJICAgICAgIGJsayk7Ci0JCQlnb3RvIG91dF9idWY7Ci0JCX0KLQl9Ci0JbGUxNl9hZGRfY3B1KCZkaC0+ZHFkaF9lbnRyaWVzLCAxKTsKLQkvKiBGaW5kIGZyZWUgc3RydWN0dXJlIGluIGJsb2NrICovCi0JZm9yIChpID0gMCwgZGRxdW90ID0gKChjaGFyICopYnVmKSArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKLQkgICAgIGkgPCBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykgJiYgIXF0cmVlX2VudHJ5X3VudXNlZChpbmZvLCBkZHF1b3QpOwotCSAgICAgaSsrLCBkZHF1b3QgKz0gaW5mby0+ZHFpX2VudHJ5X3NpemUpOwotI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKLQlpZiAoaSA9PSBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IERhdGEgYmxvY2sgZnVsbCAiCi0JCQkJImJ1dCBpdCBzaG91bGRuJ3QuXG4iKTsKLQkJKmVyciA9IC1FSU87Ci0JCWdvdG8gb3V0X2J1ZjsKLQl9Ci0jZW5kaWYKLQkqZXJyID0gd3JpdGVfYmxrKGluZm8sIGJsaywgYnVmKTsKLQlpZiAoKmVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IENhbid0IHdyaXRlIHF1b3RhICIKLQkJCQkiZGF0YSBibG9jayAldS5cbiIsIGJsayk7Ci0JCWdvdG8gb3V0X2J1ZjsKLQl9Ci0JZHF1b3QtPmRxX29mZiA9IChibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSArCi0JCQlzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikgKwotCQkJaSAqIGluZm8tPmRxaV9lbnRyeV9zaXplOwotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiBibGs7Ci1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiAwOwotfQotCi0vKiBJbnNlcnQgcmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBpbnRvIHRoZSB0cmllICovCi1zdGF0aWMgaW50IGRvX2luc2VydF90cmVlKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAotCQkJICB1aW50ICp0cmVlYmxrLCBpbnQgZGVwdGgpCi17Ci0JZHFidWZfdCBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlpbnQgcmV0ID0gMCwgbmV3c29uID0gMCwgbmV3YWN0ID0gMDsKLQlfX2xlMzIgKnJlZjsKLQl1aW50IG5ld2JsazsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoISp0cmVlYmxrKSB7Ci0JCXJldCA9IGdldF9mcmVlX2RxYmxrKGluZm8pOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJKnRyZWVibGsgPSByZXQ7Ci0JCW1lbXNldChidWYsIDAsIGluZm8tPmRxaV91c2FibGVfYnMpOwotCQluZXdhY3QgPSAxOwotCX0gZWxzZSB7Ci0JCXJldCA9IHJlYWRfYmxrKGluZm8sICp0cmVlYmxrLCBidWYpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgdHJlZSBxdW90YSBibG9jayAiCi0JCQkJCSIldS5cbiIsICp0cmVlYmxrKTsKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJfQotCX0KLQlyZWYgPSAoX19sZTMyICopYnVmOwotCW5ld2JsayA9IGxlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKLQlpZiAoIW5ld2JsaykKLQkJbmV3c29uID0gMTsKLQlpZiAoZGVwdGggPT0gaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gMSkgewotI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKLQkJaWYgKG5ld2JsaykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEluc2VydGluZyBhbHJlYWR5IHByZXNlbnQgcXVvdGEgIgotCQkJCQkiZW50cnkgKGJsb2NrICV1KS5cbiIsCi0JCQkgICAgICAgbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLAotCQkJCQkJZHF1b3QtPmRxX2lkLCBkZXB0aCldKSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXRfYnVmOwotCQl9Ci0jZW5kaWYKLQkJbmV3YmxrID0gZmluZF9mcmVlX2RxZW50cnkoaW5mbywgZHF1b3QsICZyZXQpOwotCX0gZWxzZSB7Ci0JCXJldCA9IGRvX2luc2VydF90cmVlKGluZm8sIGRxdW90LCAmbmV3YmxrLCBkZXB0aCsxKTsKLQl9Ci0JaWYgKG5ld3NvbiAmJiByZXQgPj0gMCkgewotCQlyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSA9Ci0JCQkJCQkJY3B1X3RvX2xlMzIobmV3YmxrKTsKLQkJcmV0ID0gd3JpdGVfYmxrKGluZm8sICp0cmVlYmxrLCBidWYpOwotCX0gZWxzZSBpZiAobmV3YWN0ICYmIHJldCA8IDApIHsKLQkJcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCAqdHJlZWJsayk7Ci0JfQotb3V0X2J1ZjoKLQlmcmVlZHFidWYoYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBXcmFwcGVyIGZvciBpbnNlcnRpbmcgcXVvdGEgc3RydWN0dXJlIGludG8gdHJlZSAqLwotc3RhdGljIGlubGluZSBpbnQgZHFfaW5zZXJ0X3RyZWUoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaW50IHRtcCA9IFFUX1RSRUVPRkY7Ci0JcmV0dXJuIGRvX2luc2VydF90cmVlKGluZm8sIGRxdW90LCAmdG1wLCAwKTsKLX0KLQotLyoKLSAqCVdlIGRvbid0IGhhdmUgdG8gYmUgYWZyYWlkIG9mIGRlYWRsb2NrcyBhcyB3ZSBuZXZlciBoYXZlIHF1b3RhcyBvbiBxdW90YSBmaWxlcy4uLgotICovCi1pbnQgcXRyZWVfd3JpdGVfZHF1b3Qoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaW50IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZHF1b3QtPmRxX3NiOwotCXNzaXplX3QgcmV0OwotCWRxYnVmX3QgZGRxdW90ID0gZ2V0ZHFidWYoaW5mby0+ZHFpX2VudHJ5X3NpemUpOwotCi0JaWYgKCFkZHF1b3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogZHFfb2ZmIGlzIGd1YXJkZWQgYnkgZHFpb19tdXRleCAqLwotCWlmICghZHF1b3QtPmRxX29mZikgewotCQlyZXQgPSBkcV9pbnNlcnRfdHJlZShpbmZvLCBkcXVvdCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZGUzogRXJyb3IgJXpkIG9jY3VycmVkIHdoaWxlICIKLQkJCQkJImNyZWF0aW5nIHF1b3RhLlxuIiwgcmV0KTsKLQkJCWZyZWVkcWJ1ZihkZHF1b3QpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JaW5mby0+ZHFpX29wcy0+bWVtMmRpc2tfZHFibGsoZGRxdW90LCBkcXVvdCk7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKWRkcXVvdCwKLQkJCQkJaW5mby0+ZHFpX2VudHJ5X3NpemUsIGRxdW90LT5kcV9vZmYpOwotCWlmIChyZXQgIT0gaW5mby0+ZHFpX2VudHJ5X3NpemUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBkcXVvdGEgd3JpdGUgZmFpbGVkIG9uIGRldiAlc1xuIiwKLQkJICAgICAgIHNiLT5zX2lkKTsKLQkJaWYgKHJldCA+PSAwKQotCQkJcmV0ID0gLUVOT1NQQzsKLQl9IGVsc2UgewotCQlyZXQgPSAwOwotCX0KLQlkcXN0YXRzLndyaXRlcysrOwotCWZyZWVkcWJ1ZihkZHF1b3QpOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocXRyZWVfd3JpdGVfZHF1b3QpOwotCi0vKiBGcmVlIGRxdW90IGVudHJ5IGluIGRhdGEgYmxvY2sgKi8KLXN0YXRpYyBpbnQgZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAotCQkJdWludCBibGspCi17Ci0Jc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7Ci0JZHFidWZfdCBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoZHF1b3QtPmRxX29mZiA+PiBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMgIT0gYmxrKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBzdHJ1Y3R1cmUgaGFzIG9mZnNldCB0byBvdGhlciAiCi0JCSAgImJsb2NrICgldSkgdGhhbiBpdCBzaG91bGQgKCV1KS5cbiIsIGJsaywKLQkJICAodWludCkoZHF1b3QtPmRxX29mZiA+PiBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpKTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgZGF0YSBibG9jayAldVxuIiwgYmxrKTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQlkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOwotCWxlMTZfYWRkX2NwdSgmZGgtPmRxZGhfZW50cmllcywgLTEpOwotCWlmICghbGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykpIHsJLyogQmxvY2sgZ290IGZyZWU/ICovCi0JCXJldCA9IHJlbW92ZV9mcmVlX2RxZW50cnkoaW5mbywgYnVmLCBibGspOwotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSBwdXRfZnJlZV9kcWJsayhpbmZvLCBidWYsIGJsayk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgbW92ZSBxdW90YSBkYXRhIGJsb2NrICgldSkgIgotCQkJICAidG8gZnJlZSBsaXN0LlxuIiwgYmxrKTsKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJfQotCX0gZWxzZSB7Ci0JCW1lbXNldChidWYgKwotCQkgICAgICAgKGRxdW90LT5kcV9vZmYgJiAoKDEgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSAtIDEpKSwKLQkJICAgICAgIDAsIGluZm8tPmRxaV9lbnRyeV9zaXplKTsKLQkJaWYgKGxlMTZfdG9fY3B1KGRoLT5kcWRoX2VudHJpZXMpID09Ci0JCSAgICBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykgLSAxKSB7Ci0JCQkvKiBJbnNlcnQgd2lsbCB3cml0ZSBibG9jayBpdHNlbGYgKi8KLQkJCXJldCA9IGluc2VydF9mcmVlX2RxZW50cnkoaW5mbywgYnVmLCBibGspOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgaW5zZXJ0IHF1b3RhIGRhdGEgIgotCQkJCSAgICAgICAiYmxvY2sgKCV1KSB0byBmcmVlIGVudHJ5IGxpc3QuXG4iLCBibGspOwotCQkJCWdvdG8gb3V0X2J1ZjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldCA9IHdyaXRlX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCB3cml0ZSBxdW90YSBkYXRhICIKLQkJCQkgICJibG9jayAldVxuIiwgYmxrKTsKLQkJCQlnb3RvIG91dF9idWY7Ci0JCQl9Ci0JCX0KLQl9Ci0JZHF1b3QtPmRxX29mZiA9IDA7CS8qIFF1b3RhIGlzIG5vdyB1bmF0dGFjaGVkICovCi1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFJlbW92ZSByZWZlcmVuY2UgdG8gZHF1b3QgZnJvbSB0cmVlICovCi1zdGF0aWMgaW50IHJlbW92ZV90cmVlKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAotCQkgICAgICAgdWludCAqYmxrLCBpbnQgZGVwdGgpCi17Ci0JZHFidWZfdCBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlpbnQgcmV0ID0gMDsKLQl1aW50IG5ld2JsazsKLQlfX2xlMzIgKnJlZiA9IChfX2xlMzIgKilidWY7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gcmVhZF9ibGsoaW5mbywgKmJsaywgYnVmKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSBkYXRhIGJsb2NrICV1XG4iLCAqYmxrKTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQluZXdibGsgPSBsZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSk7Ci0JaWYgKGRlcHRoID09IGluZm8tPmRxaV9xdHJlZV9kZXB0aCAtIDEpIHsKLQkJcmV0ID0gZnJlZV9kcWVudHJ5KGluZm8sIGRxdW90LCBuZXdibGspOwotCQluZXdibGsgPSAwOwotCX0gZWxzZSB7Ci0JCXJldCA9IHJlbW92ZV90cmVlKGluZm8sIGRxdW90LCAmbmV3YmxrLCBkZXB0aCsxKTsKLQl9Ci0JaWYgKHJldCA+PSAwICYmICFuZXdibGspIHsKLQkJaW50IGk7Ci0JCXJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldID0gY3B1X3RvX2xlMzIoMCk7Ci0JCS8qIEJsb2NrIGdvdCBlbXB0eT8gKi8KLQkJZm9yIChpID0gMDsKLQkJICAgICBpIDwgKGluZm8tPmRxaV91c2FibGVfYnMgPj4gMikgJiYgIXJlZltpXTsKLQkJICAgICBpKyspOwotCQkvKiBEb24ndCBwdXQgdGhlIHJvb3QgYmxvY2sgaW50byB0aGUgZnJlZSBibG9jayBsaXN0ICovCi0JCWlmIChpID09IChpbmZvLT5kcWlfdXNhYmxlX2JzID4+IDIpCi0JCSAgICAmJiAqYmxrICE9IFFUX1RSRUVPRkYpIHsKLQkJCXB1dF9mcmVlX2RxYmxrKGluZm8sIGJ1ZiwgKmJsayk7Ci0JCQkqYmxrID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IHdyaXRlX2JsayhpbmZvLCAqYmxrLCBidWYpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHdyaXRlIHF1b3RhIHRyZWUgIgotCQkJCSAgImJsb2NrICV1LlxuIiwgKmJsayk7Ci0JCX0KLQl9Ci1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIERlbGV0ZSBkcXVvdCBmcm9tIHRyZWUgKi8KLWludCBxdHJlZV9kZWxldGVfZHF1b3Qoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JdWludCB0bXAgPSBRVF9UUkVFT0ZGOwotCi0JaWYgKCFkcXVvdC0+ZHFfb2ZmKQkvKiBFdmVuIG5vdCBhbGxvY2F0ZWQ/ICovCi0JCXJldHVybiAwOwotCXJldHVybiByZW1vdmVfdHJlZShpbmZvLCBkcXVvdCwgJnRtcCwgMCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHF0cmVlX2RlbGV0ZV9kcXVvdCk7Ci0KLS8qIEZpbmQgZW50cnkgaW4gYmxvY2sgKi8KLXN0YXRpYyBsb2ZmX3QgZmluZF9ibG9ja19kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1aW50IGJsaykKLXsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCWxvZmZfdCByZXQgPSAwOwotCWludCBpOwotCWNoYXIgKmRkcXVvdDsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgdHJlZSBibG9jayAldS5cbiIsIGJsayk7Ci0JCWdvdG8gb3V0X2J1ZjsKLQl9Ci0JZm9yIChpID0gMCwgZGRxdW90ID0gKChjaGFyICopYnVmKSArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKLQkgICAgIGkgPCBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykgJiYgIWluZm8tPmRxaV9vcHMtPmlzX2lkKGRkcXVvdCwgZHF1b3QpOwotCSAgICAgaSsrLCBkZHF1b3QgKz0gaW5mby0+ZHFpX2VudHJ5X3NpemUpOwotCWlmIChpID09IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogUXVvdGEgZm9yIGlkICV1IHJlZmVyZW5jZWQgIgotCQkgICJidXQgbm90IHByZXNlbnQuXG4iLCBkcXVvdC0+ZHFfaWQpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF9idWY7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gKGJsayA8PCBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpICsgc2l6ZW9mKHN0cnVjdAotCQkgIHF0X2Rpc2tfZHFkYmhlYWRlcikgKyBpICogaW5mby0+ZHFpX2VudHJ5X3NpemU7Ci0JfQotb3V0X2J1ZjoKLQlmcmVlZHFidWYoYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBGaW5kIGVudHJ5IGZvciBnaXZlbiBpZCBpbiB0aGUgdHJlZSAqLwotc3RhdGljIGxvZmZfdCBmaW5kX3RyZWVfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1aW50IGJsaywgaW50IGRlcHRoKQotewotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JbG9mZl90IHJldCA9IDA7Ci0JX19sZTMyICpyZWYgPSAoX19sZTMyICopYnVmOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSB0cmVlIGJsb2NrICV1LlxuIiwgYmxrKTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQlyZXQgPSAwOwotCWJsayA9IGxlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKLQlpZiAoIWJsaykJLyogTm8gcmVmZXJlbmNlPyAqLwotCQlnb3RvIG91dF9idWY7Ci0JaWYgKGRlcHRoIDwgaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gMSkKLQkJcmV0ID0gZmluZF90cmVlX2RxZW50cnkoaW5mbywgZHF1b3QsIGJsaywgZGVwdGgrMSk7Ci0JZWxzZQotCQlyZXQgPSBmaW5kX2Jsb2NrX2RxZW50cnkoaW5mbywgZHF1b3QsIGJsayk7Ci1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEZpbmQgZW50cnkgZm9yIGdpdmVuIGlkIGluIHRoZSB0cmVlIC0gd3JhcHBlciBmdW5jdGlvbiAqLwotc3RhdGljIGlubGluZSBsb2ZmX3QgZmluZF9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlyZXR1cm4gZmluZF90cmVlX2RxZW50cnkoaW5mbywgZHF1b3QsIFFUX1RSRUVPRkYsIDApOwotfQotCi1pbnQgcXRyZWVfcmVhZF9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgdHlwZSA9IGRxdW90LT5kcV90eXBlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkcXVvdC0+ZHFfc2I7Ci0JbG9mZl90IG9mZnNldDsKLQlkcWJ1Zl90IGRkcXVvdDsKLQlpbnQgcmV0ID0gMDsKLQotI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKLQkvKiBJbnZhbGlkYXRlZCBxdW90YT8gKi8KLQlpZiAoIXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZpbGVzW3R5cGVdKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBpbnZhbGlkYXRlZCB3aGlsZSByZWFkaW5nIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLSNlbmRpZgotCS8qIERvIHdlIGtub3cgb2Zmc2V0IG9mIHRoZSBkcXVvdCBlbnRyeSBpbiB0aGUgcXVvdGEgZmlsZT8gKi8KLQlpZiAoIWRxdW90LT5kcV9vZmYpIHsKLQkJb2Zmc2V0ID0gZmluZF9kcWVudHJ5KGluZm8sIGRxdW90KTsKLQkJaWYgKG9mZnNldCA8PSAwKSB7CS8qIEVudHJ5IG5vdCBwcmVzZW50PyAqLwotCQkJaWYgKG9mZnNldCA8IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgIgotCQkJCSAgInN0cnVjdHVyZSBmb3IgaWQgJXUuXG4iLCBkcXVvdC0+ZHFfaWQpOwotCQkJZHF1b3QtPmRxX29mZiA9IDA7Ci0JCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JCQltZW1zZXQoJmRxdW90LT5kcV9kcWIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2RxYmxrKSk7Ci0JCQlyZXQgPSBvZmZzZXQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlkcXVvdC0+ZHFfb2ZmID0gb2Zmc2V0OwotCX0KLQlkZHF1b3QgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfZW50cnlfc2l6ZSk7Ci0JaWYgKCFkZHF1b3QpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKWRkcXVvdCwKLQkJCQkgICBpbmZvLT5kcWlfZW50cnlfc2l6ZSwgZHF1b3QtPmRxX29mZik7Ci0JaWYgKHJldCAhPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkgewotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSAtRUlPOwotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogRXJyb3Igd2hpbGUgcmVhZGluZyBxdW90YSAiCi0JCQkJInN0cnVjdHVyZSBmb3IgaWQgJXUuXG4iLCBkcXVvdC0+ZHFfaWQpOwotCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JCW1lbXNldCgmZHF1b3QtPmRxX2RxYiwgMCwgc2l6ZW9mKHN0cnVjdCBtZW1fZHFibGspKTsKLQkJZnJlZWRxYnVmKGRkcXVvdCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JaW5mby0+ZHFpX29wcy0+ZGlzazJtZW1fZHFibGsoZHF1b3QsIGRkcXVvdCk7Ci0JaWYgKCFkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCi0JICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCi0JICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCi0JICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQotCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JZnJlZWRxYnVmKGRkcXVvdCk7Ci1vdXQ6Ci0JZHFzdGF0cy5yZWFkcysrOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHF0cmVlX3JlYWRfZHF1b3QpOwotCi0vKiBDaGVjayB3aGV0aGVyIGRxdW90IHNob3VsZCBub3QgYmUgZGVsZXRlZC4gV2Uga25vdyB3ZSBhcmUKLSAqIHRoZSBvbmx5IG9uZSBvcGVyYXRpbmcgb24gZHF1b3QgKHRoYW5rcyB0byBkcV9sb2NrKSAqLwotaW50IHF0cmVlX3JlbGVhc2VfZHF1b3Qoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaWYgKHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykgJiYgIShkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgfCBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSkpCi0JCXJldHVybiBxdHJlZV9kZWxldGVfZHF1b3QoaW5mbywgZHF1b3QpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChxdHJlZV9yZWxlYXNlX2RxdW90KTsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhX3YxLmMgYi9mcy9xdW90YV92MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGFmMWM2Li4wMDAwMDAwCi0tLSBhL2ZzL3F1b3RhX3YxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9xdW90YS5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvZHFibGtfdjEuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLSNpbmNsdWRlICJxdW90YWlvX3YxLmgiCi0KLU1PRFVMRV9BVVRIT1IoIkphbiBLYXJhIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk9sZCBxdW90YSBmb3JtYXQgc3VwcG9ydCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAotI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQotCi1zdGF0aWMgaW5saW5lIHFzaXplX3QgdjFfc3RvcWIocXNpemVfdCBzcGFjZSkKLXsKLQlyZXR1cm4gKHNwYWNlICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTOwotfQotCi1zdGF0aWMgaW5saW5lIHFzaXplX3QgdjFfcWJ0b3MocXNpemVfdCBibG9ja3MpCi17Ci0JcmV0dXJuIGJsb2NrcyA8PCBRVU9UQUJMT0NLX0JJVFM7Ci19Ci0KLXN0YXRpYyB2b2lkIHYxX2Rpc2sybWVtX2RxYmxrKHN0cnVjdCBtZW1fZHFibGsgKm0sIHN0cnVjdCB2MV9kaXNrX2RxYmxrICpkKQotewotCW0tPmRxYl9paGFyZGxpbWl0ID0gZC0+ZHFiX2loYXJkbGltaXQ7Ci0JbS0+ZHFiX2lzb2Z0bGltaXQgPSBkLT5kcWJfaXNvZnRsaW1pdDsKLQltLT5kcWJfY3VyaW5vZGVzID0gZC0+ZHFiX2N1cmlub2RlczsKLQltLT5kcWJfYmhhcmRsaW1pdCA9IHYxX3FidG9zKGQtPmRxYl9iaGFyZGxpbWl0KTsKLQltLT5kcWJfYnNvZnRsaW1pdCA9IHYxX3FidG9zKGQtPmRxYl9ic29mdGxpbWl0KTsKLQltLT5kcWJfY3Vyc3BhY2UgPSB2MV9xYnRvcyhkLT5kcWJfY3VyYmxvY2tzKTsKLQltLT5kcWJfaXRpbWUgPSBkLT5kcWJfaXRpbWU7Ci0JbS0+ZHFiX2J0aW1lID0gZC0+ZHFiX2J0aW1lOwotfQotCi1zdGF0aWMgdm9pZCB2MV9tZW0yZGlza19kcWJsayhzdHJ1Y3QgdjFfZGlza19kcWJsayAqZCwgc3RydWN0IG1lbV9kcWJsayAqbSkKLXsKLQlkLT5kcWJfaWhhcmRsaW1pdCA9IG0tPmRxYl9paGFyZGxpbWl0OwotCWQtPmRxYl9pc29mdGxpbWl0ID0gbS0+ZHFiX2lzb2Z0bGltaXQ7Ci0JZC0+ZHFiX2N1cmlub2RlcyA9IG0tPmRxYl9jdXJpbm9kZXM7Ci0JZC0+ZHFiX2JoYXJkbGltaXQgPSB2MV9zdG9xYihtLT5kcWJfYmhhcmRsaW1pdCk7Ci0JZC0+ZHFiX2Jzb2Z0bGltaXQgPSB2MV9zdG9xYihtLT5kcWJfYnNvZnRsaW1pdCk7Ci0JZC0+ZHFiX2N1cmJsb2NrcyA9IHYxX3N0b3FiKG0tPmRxYl9jdXJzcGFjZSk7Ci0JZC0+ZHFiX2l0aW1lID0gbS0+ZHFiX2l0aW1lOwotCWQtPmRxYl9idGltZSA9IG0tPmRxYl9idGltZTsKLX0KLQotc3RhdGljIGludCB2MV9yZWFkX2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaW50IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKLQlzdHJ1Y3QgdjFfZGlza19kcWJsayBkcWJsazsKLQotCWlmICghc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2V0IHN0cnVjdHVyZSB0byAwcyBpbiBjYXNlIHJlYWQgZmFpbHMvaXMgYWZ0ZXIgZW5kIG9mIGZpbGUgKi8KLQltZW1zZXQoJmRxYmxrLCAwLCBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKTsKLQlkcXVvdC0+ZHFfc2ItPnNfb3AtPnF1b3RhX3JlYWQoZHF1b3QtPmRxX3NiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSwgdjFfZHFvZmYoZHF1b3QtPmRxX2lkKSk7Ci0KLQl2MV9kaXNrMm1lbV9kcWJsaygmZHF1b3QtPmRxX2RxYiwgJmRxYmxrKTsKLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdCA9PSAwICYmIGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgPT0gMCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ID09IDAgJiYgZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCA9PSAwKQotCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JZHFzdGF0cy5yZWFkcysrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdjFfY29tbWl0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0Jc2hvcnQgdHlwZSA9IGRxdW90LT5kcV90eXBlOwotCXNzaXplX3QgcmV0OwotCXN0cnVjdCB2MV9kaXNrX2RxYmxrIGRxYmxrOwotCi0JdjFfbWVtMmRpc2tfZHFibGsoJmRxYmxrLCAmZHF1b3QtPmRxX2RxYik7Ci0JaWYgKGRxdW90LT5kcV9pZCA9PSAwKSB7Ci0JCWRxYmxrLmRxYl9idGltZSA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bdHlwZV0uZHFpX2JncmFjZTsKLQkJZHFibGsuZHFiX2l0aW1lID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlOwotCX0KLQlyZXQgPSAwOwotCWlmIChzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5maWxlc1t0eXBlXSkKLQkJcmV0ID0gZHF1b3QtPmRxX3NiLT5zX29wLT5xdW90YV93cml0ZShkcXVvdC0+ZHFfc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAotCQkJCQlzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZihkcXVvdC0+ZHFfaWQpKTsKLQlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBkcXVvdGEgd3JpdGUgZmFpbGVkIG9uIGRldiAlc1xuIiwKLQkJCWRxdW90LT5kcV9zYi0+c19pZCk7Ci0JCWlmIChyZXQgPj0gMCkKLQkJCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQlyZXQgPSAwOwotCi1vdXQ6Ci0JZHFzdGF0cy53cml0ZXMrKzsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIE1hZ2ljcyBvZiBuZXcgcXVvdGEgZm9ybWF0ICovCi0jZGVmaW5lIFYyX0lOSVRRTUFHSUNTIHtcCi0JMHhkOWMwMWYxMSwgICAgIC8qIFVTUlFVT1RBICovXAotCTB4ZDljMDE5MjcgICAgICAvKiBHUlBRVU9UQSAqL1wKLX0KLQotLyogSGVhZGVyIG9mIG5ldyBxdW90YSBmb3JtYXQgKi8KLXN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIHsKLQlfX2xlMzIgZHFoX21hZ2ljOyAgICAgICAgLyogTWFnaWMgbnVtYmVyIGlkZW50aWZ5aW5nIGZpbGUgKi8KLQlfX2xlMzIgZHFoX3ZlcnNpb247ICAgICAgLyogRmlsZSB2ZXJzaW9uICovCi19OwotCi1zdGF0aWMgaW50IHYxX2NoZWNrX3F1b3RhX2ZpbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IHNiX2Rxb3B0KHNiKS0+ZmlsZXNbdHlwZV07Ci0JdWxvbmcgYmxvY2tzOwotCXNpemVfdCBvZmY7IAotCXN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIGRxaGVhZDsKLQlzc2l6ZV90IHNpemU7Ci0JbG9mZl90IGlzaXplOwotCXN0YXRpYyBjb25zdCB1aW50IHF1b3RhX21hZ2ljc1tdID0gVjJfSU5JVFFNQUdJQ1M7Ci0KLQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQlpZiAoIWlzaXplKQotCQlyZXR1cm4gMDsKLQlibG9ja3MgPSBpc2l6ZSA+PiBCTE9DS19TSVpFX0JJVFM7Ci0Jb2ZmID0gaXNpemUgJiAoQkxPQ0tfU0laRSAtIDEpOwotCWlmICgoYmxvY2tzICUgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSAqIEJMT0NLX1NJWkUgKyBvZmYpICUgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkKLQkJcmV0dXJuIDA7Ci0JLyogRG91YmxlY2hlY2sgd2hldGhlciB3ZSBkaWRuJ3QgZ2V0IGZpbGUgd2l0aCBuZXcgZm9ybWF0IC0gd2l0aCBvbGQgcXVvdGFjdGwoKSB0aGlzIGNvdWxkIGhhcHBlbiAqLwotCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFoZWFkLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCAwKTsKLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpKQotCQlyZXR1cm4gMTsJLyogUHJvYmFibHkgbm90IG5ldyBmb3JtYXQgKi8KLQlpZiAobGUzMl90b19jcHUoZHFoZWFkLmRxaF9tYWdpYykgIT0gcXVvdGFfbWFnaWNzW3R5cGVdKQotCQlyZXR1cm4gMTsJLyogRGVmaW5pdGVseSBub3QgbmV3IGZvcm1hdCAqLwotCXByaW50ayhLRVJOX0lORk8gIlZGUzogJXM6IFJlZnVzaW5nIHRvIHR1cm4gb24gb2xkIHF1b3RhIGZvcm1hdCBvbiBnaXZlbiBmaWxlLiBJdCBwcm9iYWJseSBjb250YWlucyBuZXdlciBxdW90YSBmb3JtYXQuXG4iLCBzYi0+c19pZCk7Ci0gICAgICAgIHJldHVybiAwOwkJLyogU2VlbXMgbGlrZSBhIG5ldyBmb3JtYXQgZmlsZSAtPiByZWZ1c2UgaXQgKi8KLX0KLQotc3RhdGljIGludCB2MV9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7Ci0Jc3RydWN0IHYxX2Rpc2tfZHFibGsgZHFibGs7Ci0JaW50IHJldDsKLQotCWlmICgocmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLCBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZigwKSkpICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKLQkJaWYgKHJldCA+PSAwKQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IDA7Ci0JLyogbGltaXRzIGFyZSBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGRhdGEgKi8KLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZjsKLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlID0gZHFibGsuZHFiX2l0aW1lID8gZHFibGsuZHFiX2l0aW1lIDogTUFYX0lRX1RJTUU7Ci0JZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZSA9IGRxYmxrLmRxYl9idGltZSA/IGRxYmxrLmRxYl9idGltZSA6IE1BWF9EUV9USU1FOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdjFfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKLQlzdHJ1Y3QgdjFfZGlza19kcWJsayBkcWJsazsKLQlpbnQgcmV0OwotCi0JZHFvcHQtPmluZm9bdHlwZV0uZHFpX2ZsYWdzICY9IH5EUUZfSU5GT19ESVJUWTsKLQlpZiAoKHJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKLQkgICAgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSwgdjFfZHFvZmYoMCkpKSAhPSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKSB7Ci0JCWlmIChyZXQgPj0gMCkKLQkJCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQlkcWJsay5kcWJfaXRpbWUgPSBkcW9wdC0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlOwotCWRxYmxrLmRxYl9idGltZSA9IGRxb3B0LT5pbmZvW3R5cGVdLmRxaV9iZ3JhY2U7Ci0JcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKLQkgICAgICBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZigwKSk7Ci0JaWYgKHJldCA9PSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKQotCQlyZXQgPSAwOwotCWVsc2UgaWYgKHJldCA+IDApCi0JCXJldCA9IC1FSU87Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfb3BzIHYxX2Zvcm1hdF9vcHMgPSB7Ci0JLmNoZWNrX3F1b3RhX2ZpbGUJPSB2MV9jaGVja19xdW90YV9maWxlLAotCS5yZWFkX2ZpbGVfaW5mbwkJPSB2MV9yZWFkX2ZpbGVfaW5mbywKLQkud3JpdGVfZmlsZV9pbmZvCT0gdjFfd3JpdGVfZmlsZV9pbmZvLAotCS5mcmVlX2ZpbGVfaW5mbwkJPSBOVUxMLAotCS5yZWFkX2RxYmxrCQk9IHYxX3JlYWRfZHFibGssCi0JLmNvbW1pdF9kcWJsawkJPSB2MV9jb21taXRfZHFibGssCi19OwotCi1zdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlIHYxX3F1b3RhX2Zvcm1hdCA9IHsKLQkucWZfZm10X2lkCT0gUUZNVF9WRlNfT0xELAotCS5xZl9vcHMJCT0gJnYxX2Zvcm1hdF9vcHMsCi0JLnFmX293bmVyCT0gVEhJU19NT0RVTEUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfdjFfcXVvdGFfZm9ybWF0KHZvaWQpCi17Ci0gICAgICAgIHJldHVybiByZWdpc3Rlcl9xdW90YV9mb3JtYXQoJnYxX3F1b3RhX2Zvcm1hdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3YxX3F1b3RhX2Zvcm1hdCh2b2lkKQotewotICAgICAgICB1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjFfcXVvdGFfZm9ybWF0KTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF92MV9xdW90YV9mb3JtYXQpOwotbW9kdWxlX2V4aXQoZXhpdF92MV9xdW90YV9mb3JtYXQpOwotCmRpZmYgLS1naXQgYS9mcy9xdW90YV92Mi5jIGIvZnMvcXVvdGFfdjIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYxOGI1Ni4uMDAwMDAwMAotLS0gYS9mcy9xdW90YV92Mi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKgl2ZnN2MCBxdW90YSBJTyBvcGVyYXRpb25zIG9uIGZpbGUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvZHFibGtfdjIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLSNpbmNsdWRlICJxdW90YV90cmVlLmgiCi0jaW5jbHVkZSAicXVvdGFpb192Mi5oIgotCi1NT0RVTEVfQVVUSE9SKCJKYW4gS2FyYSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJRdW90YSBmb3JtYXQgdjIgc3VwcG9ydCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIF9fUVVPVEFfVjJfUEFSQU5PSUEKLQotc3RhdGljIHZvaWQgdjJfbWVtMmRpc2tkcWIodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpOwotc3RhdGljIHZvaWQgdjJfZGlzazJtZW1kcWIoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZHApOwotc3RhdGljIGludCB2Ml9pc19pZCh2b2lkICpkcCwgc3RydWN0IGRxdW90ICpkcXVvdCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcXRyZWVfZm10X29wZXJhdGlvbnMgdjJfcXRyZWVfb3BzID0gewotCS5tZW0yZGlza19kcWJsayA9IHYyX21lbTJkaXNrZHFiLAotCS5kaXNrMm1lbV9kcWJsayA9IHYyX2Rpc2sybWVtZHFiLAotCS5pc19pZCA9IHYyX2lzX2lkLAotfTsKLQotI2RlZmluZSBRVU9UQUJMT0NLX0JJVFMgMTAKLSNkZWZpbmUgUVVPVEFCTE9DS19TSVpFICgxIDw8IFFVT1RBQkxPQ0tfQklUUykKLQotc3RhdGljIGlubGluZSBxc2l6ZV90IHYyX3N0b3FiKHFzaXplX3Qgc3BhY2UpCi17Ci0JcmV0dXJuIChzcGFjZSArIFFVT1RBQkxPQ0tfU0laRSAtIDEpID4+IFFVT1RBQkxPQ0tfQklUUzsKLX0KLQotc3RhdGljIGlubGluZSBxc2l6ZV90IHYyX3FidG9zKHFzaXplX3QgYmxvY2tzKQotewotCXJldHVybiBibG9ja3MgPDwgUVVPVEFCTE9DS19CSVRTOwotfQotCi0vKiBDaGVjayB3aGV0aGVyIGdpdmVuIGZpbGUgaXMgcmVhbGx5IHZmc3YwIHF1b3RhZmlsZSAqLwotc3RhdGljIGludCB2Ml9jaGVja19xdW90YV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIGRxaGVhZDsKLQlzc2l6ZV90IHNpemU7Ci0Jc3RhdGljIGNvbnN0IHVpbnQgcXVvdGFfbWFnaWNzW10gPSBWMl9JTklUUU1BR0lDUzsKLQlzdGF0aWMgY29uc3QgdWludCBxdW90YV92ZXJzaW9uc1tdID0gVjJfSU5JVFFWRVJTSU9OUzsKLSAKLQlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxaGVhZCwgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgMCk7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSkgewotCQlwcmludGsoInF1b3RhX3YyOiBmYWlsZWQgcmVhZCBleHBlY3RlZD0lemQgZ290PSV6ZFxuIiwKLQkJCXNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciksIHNpemUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfbWFnaWMpICE9IHF1b3RhX21hZ2ljc1t0eXBlXSB8fAotCSAgICBsZTMyX3RvX2NwdShkcWhlYWQuZHFoX3ZlcnNpb24pICE9IHF1b3RhX3ZlcnNpb25zW3R5cGVdKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotLyogUmVhZCBpbmZvcm1hdGlvbiBoZWFkZXIgZnJvbSBxdW90YSBmaWxlICovCi1zdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkaW5mbzsKLQlzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9IHNiX2RxaW5mbyhzYiwgdHlwZSk7Ci0Jc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKnFpbmZvOwotCXNzaXplX3Qgc2l6ZTsKLQotCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZGluZm8sCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpOwotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IHJlYWQgaW5mbyBzdHJ1Y3R1cmUgb24gZGV2aWNlICVzLlxuIiwKLQkJCXNiLT5zX2lkKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpbmZvLT5kcWlfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvKSwgR0ZQX05PRlMpOwotCWlmICghaW5mby0+ZHFpX3ByaXYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBxdW90YSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlxaW5mbyA9IGluZm8tPmRxaV9wcml2OwotCS8qIGxpbWl0cyBhcmUgc3RvcmVkIGFzIHVuc2lnbmVkIDMyLWJpdCBkYXRhICovCi0JaW5mby0+ZHFpX21heGJsaW1pdCA9IDB4ZmZmZmZmZmY7Ci0JaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmY7Ci0JaW5mby0+ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwotCWluZm8tPmRxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKLQlpbmZvLT5kcWlfZmxhZ3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfZmxhZ3MpOwotCXFpbmZvLT5kcWlfc2IgPSBzYjsKLQlxaW5mby0+ZHFpX3R5cGUgPSB0eXBlOwotCXFpbmZvLT5kcWlfYmxvY2tzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2Jsb2Nrcyk7Ci0JcWluZm8tPmRxaV9mcmVlX2JsayA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mcmVlX2Jsayk7Ci0JcWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZyZWVfZW50cnkpOwotCXFpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMgPSBWMl9EUUJMS1NJWkVfQklUUzsKLQlxaW5mby0+ZHFpX3VzYWJsZV9icyA9IDEgPDwgVjJfRFFCTEtTSVpFX0JJVFM7Ci0JcWluZm8tPmRxaV9xdHJlZV9kZXB0aCA9IHF0cmVlX2RlcHRoKHFpbmZvKTsKLQlxaW5mby0+ZHFpX2VudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFibGspOwotCXFpbmZvLT5kcWlfb3BzID0gJnYyX3F0cmVlX29wczsKLQlyZXR1cm4gMDsKLX0KLQotLyogV3JpdGUgaW5mb3JtYXRpb24gaGVhZGVyIHRvIHF1b3RhIGZpbGUgKi8KLXN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkaW5mbzsKLQlzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9IHNiX2RxaW5mbyhzYiwgdHlwZSk7Ci0Jc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKnFpbmZvID0gaW5mby0+ZHFpX3ByaXY7Ci0Jc3NpemVfdCBzaXplOwotCi0Jc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWluZm8tPmRxaV9mbGFncyAmPSB+RFFGX0lORk9fRElSVFk7Ci0JZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9iZ3JhY2UpOwotCWRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLT5kcWlfaWdyYWNlKTsKLQlkaW5mby5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMihpbmZvLT5kcWlfZmxhZ3MgJiBEUUZfTUFTSyk7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLT5kcWlfYmxvY2tzKTsKLQlkaW5mby5kcWlfZnJlZV9ibGsgPSBjcHVfdG9fbGUzMihxaW5mby0+ZHFpX2ZyZWVfYmxrKTsKLQlkaW5mby5kcWlfZnJlZV9lbnRyeSA9IGNwdV90b19sZTMyKHFpbmZvLT5kcWlfZnJlZV9lbnRyeSk7Ci0Jc2l6ZSA9IHNiLT5zX29wLT5xdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKikmZGluZm8sCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpOwotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IHdyaXRlIGluZm8gc3RydWN0dXJlIG9uIGRldmljZSAlcy5cbiIsCi0JCQlzYi0+c19pZCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHYyX2Rpc2sybWVtZHFiKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHZvaWQgKmRwKQotewotCXN0cnVjdCB2Ml9kaXNrX2RxYmxrICpkID0gZHAsIGVtcHR5OwotCXN0cnVjdCBtZW1fZHFibGsgKm0gPSAmZHF1b3QtPmRxX2RxYjsKLQotCW0tPmRxYl9paGFyZGxpbWl0ID0gbGUzMl90b19jcHUoZC0+ZHFiX2loYXJkbGltaXQpOwotCW0tPmRxYl9pc29mdGxpbWl0ID0gbGUzMl90b19jcHUoZC0+ZHFiX2lzb2Z0bGltaXQpOwotCW0tPmRxYl9jdXJpbm9kZXMgPSBsZTMyX3RvX2NwdShkLT5kcWJfY3VyaW5vZGVzKTsKLQltLT5kcWJfaXRpbWUgPSBsZTY0X3RvX2NwdShkLT5kcWJfaXRpbWUpOwotCW0tPmRxYl9iaGFyZGxpbWl0ID0gdjJfcWJ0b3MobGUzMl90b19jcHUoZC0+ZHFiX2JoYXJkbGltaXQpKTsKLQltLT5kcWJfYnNvZnRsaW1pdCA9IHYyX3FidG9zKGxlMzJfdG9fY3B1KGQtPmRxYl9ic29mdGxpbWl0KSk7Ci0JbS0+ZHFiX2N1cnNwYWNlID0gbGU2NF90b19jcHUoZC0+ZHFiX2N1cnNwYWNlKTsKLQltLT5kcWJfYnRpbWUgPSBsZTY0X3RvX2NwdShkLT5kcWJfYnRpbWUpOwotCS8qIFdlIG5lZWQgdG8gZXNjYXBlIGJhY2sgYWxsLXplcm8gc3RydWN0dXJlICovCi0JbWVtc2V0KCZlbXB0eSwgMCwgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxYmxrKSk7Ci0JZW1wdHkuZHFiX2l0aW1lID0gY3B1X3RvX2xlNjQoMSk7Ci0JaWYgKCFtZW1jbXAoJmVtcHR5LCBkcCwgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxYmxrKSkpCi0JCW0tPmRxYl9pdGltZSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHYyX21lbTJkaXNrZHFiKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXN0cnVjdCB2Ml9kaXNrX2RxYmxrICpkID0gZHA7Ci0Jc3RydWN0IG1lbV9kcWJsayAqbSA9ICZkcXVvdC0+ZHFfZHFiOwotCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0KLQkJCXNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXY7Ci0KLQlkLT5kcWJfaWhhcmRsaW1pdCA9IGNwdV90b19sZTMyKG0tPmRxYl9paGFyZGxpbWl0KTsKLQlkLT5kcWJfaXNvZnRsaW1pdCA9IGNwdV90b19sZTMyKG0tPmRxYl9pc29mdGxpbWl0KTsKLQlkLT5kcWJfY3VyaW5vZGVzID0gY3B1X3RvX2xlMzIobS0+ZHFiX2N1cmlub2Rlcyk7Ci0JZC0+ZHFiX2l0aW1lID0gY3B1X3RvX2xlNjQobS0+ZHFiX2l0aW1lKTsKLQlkLT5kcWJfYmhhcmRsaW1pdCA9IGNwdV90b19sZTMyKHYyX3N0b3FiKG0tPmRxYl9iaGFyZGxpbWl0KSk7Ci0JZC0+ZHFiX2Jzb2Z0bGltaXQgPSBjcHVfdG9fbGUzMih2Ml9zdG9xYihtLT5kcWJfYnNvZnRsaW1pdCkpOwotCWQtPmRxYl9jdXJzcGFjZSA9IGNwdV90b19sZTY0KG0tPmRxYl9jdXJzcGFjZSk7Ci0JZC0+ZHFiX2J0aW1lID0gY3B1X3RvX2xlNjQobS0+ZHFiX2J0aW1lKTsKLQlkLT5kcWJfaWQgPSBjcHVfdG9fbGUzMihkcXVvdC0+ZHFfaWQpOwotCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZHApKQotCQlkLT5kcWJfaXRpbWUgPSBjcHVfdG9fbGU2NCgxKTsKLX0KLQotc3RhdGljIGludCB2Ml9pc19pZCh2b2lkICpkcCwgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlzdHJ1Y3QgdjJfZGlza19kcWJsayAqZCA9IGRwOwotCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0KLQkJCXNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXY7Ci0KLQlpZiAocXRyZWVfZW50cnlfdW51c2VkKGluZm8sIGRwKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KGQtPmRxYl9pZCkgPT0gZHF1b3QtPmRxX2lkOwotfQotCi1zdGF0aWMgaW50IHYyX3JlYWRfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlyZXR1cm4gcXRyZWVfcmVhZF9kcXVvdChzYl9kcWluZm8oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSktPmRxaV9wcml2LCBkcXVvdCk7Ci19Ci0KLXN0YXRpYyBpbnQgdjJfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlyZXR1cm4gcXRyZWVfd3JpdGVfZHF1b3Qoc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdiwgZHF1b3QpOwotfQotCi1zdGF0aWMgaW50IHYyX3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlyZXR1cm4gcXRyZWVfcmVsZWFzZV9kcXVvdChzYl9kcWluZm8oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSktPmRxaV9wcml2LCBkcXVvdCk7Ci19Ci0KLXN0YXRpYyBpbnQgdjJfZnJlZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Ja2ZyZWUoc2JfZHFpbmZvKHNiLCB0eXBlKS0+ZHFpX3ByaXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjJfZm9ybWF0X29wcyA9IHsKLQkuY2hlY2tfcXVvdGFfZmlsZQk9IHYyX2NoZWNrX3F1b3RhX2ZpbGUsCi0JLnJlYWRfZmlsZV9pbmZvCQk9IHYyX3JlYWRfZmlsZV9pbmZvLAotCS53cml0ZV9maWxlX2luZm8JPSB2Ml93cml0ZV9maWxlX2luZm8sCi0JLmZyZWVfZmlsZV9pbmZvCQk9IHYyX2ZyZWVfZmlsZV9pbmZvLAotCS5yZWFkX2RxYmxrCQk9IHYyX3JlYWRfZHF1b3QsCi0JLmNvbW1pdF9kcWJsawkJPSB2Ml93cml0ZV9kcXVvdCwKLQkucmVsZWFzZV9kcWJsawkJPSB2Ml9yZWxlYXNlX2RxdW90LAotfTsKLQotc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSB2Ml9xdW90YV9mb3JtYXQgPSB7Ci0JLnFmX2ZtdF9pZAk9IFFGTVRfVkZTX1YwLAotCS5xZl9vcHMJCT0gJnYyX2Zvcm1hdF9vcHMsCi0JLnFmX293bmVyCT0gVEhJU19NT0RVTEUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfdjJfcXVvdGFfZm9ybWF0KHZvaWQpCi17Ci0JcmV0dXJuIHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjJfcXVvdGFfZm9ybWF0KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfdjJfcXVvdGFfZm9ybWF0KHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9xdW90YV9mb3JtYXQoJnYyX3F1b3RhX2Zvcm1hdCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfdjJfcXVvdGFfZm9ybWF0KTsKLW1vZHVsZV9leGl0KGV4aXRfdjJfcXVvdGFfZm9ybWF0KTsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA1ZDdjN2VjLi45OTVlZjFkIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9yYW1mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KIApAQCAtMjA1LDExICsyMDQsNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBieSBwcm92aWRpbmcgb3VyIG93biBzZXRhdHRyKCkgbWV0aG9kLCB3ZSBza2lwIHRoaXMgcXVvdGFpc20gKi8KLQlpZiAoKG9sZF9pYV92YWxpZCAmIEFUVFJfVUlEICYmIGlhLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAotCSAgICAob2xkX2lhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaWEtPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKQotCQlyZXQgPSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgaWEpID8gLUVEUVVPVCA6IDA7Ci0KIAkvKiBwaWNrIG91dCBzaXplLWNoYW5naW5nIGV2ZW50cyAqLwogCWlmIChpYS0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKIAkJbG9mZl90IHNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IDQ2NDZjYWEuLmYzMmQxNDIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAogCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgc2JoKTsKIAlpZiAoZm9yX3VuZm9ybWF0dGVkKQotCQlEUVVPVF9GUkVFX0JMT0NLX05PRElSVFkoaW5vZGUsIDEpOworCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCAxKTsKIH0KIAogdm9pZCByZWlzZXJmc19mcmVlX2Jsb2NrKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLApAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAkJCSAgICAgICBhbW91bnRfbmVlZGVkLCBoaW50LT5pbm9kZS0+aV91aWQpOwogI2VuZGlmCiAJCXF1b3RhX3JldCA9Ci0JCSAgICBEUVVPVF9BTExPQ19CTE9DS19OT0RJUlRZKGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkKTsKKwkJICAgIHZmc19kcV9hbGxvY19ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkKTsKIAkJaWYgKHF1b3RhX3JldCkJLyogUXVvdGEgZXhjZWVkZWQ/ICovCiAJCQlyZXR1cm4gUVVPVEFfRVhDRUVERUQ7CiAJCWlmIChoaW50LT5wcmVhbGxvY2F0ZSAmJiBoaW50LT5wcmVhbGxvY19zaXplKSB7CkBAIC0xMDY0LDggKzEwNjQsNyBAQAogCQkJCSAgICAgICAicmVpc2VycXVvdGE6IGFsbG9jYXRpbmcgKHByZWFsbG9jKSAlZCBibG9ja3MgaWQ9JXUiLAogCQkJCSAgICAgICBoaW50LT5wcmVhbGxvY19zaXplLCBoaW50LT5pbm9kZS0+aV91aWQpOwogI2VuZGlmCi0JCQlxdW90YV9yZXQgPQotCQkJICAgIERRVU9UX1BSRUFMTE9DX0JMT0NLX05PRElSVFkoaGludC0+aW5vZGUsCisJCQlxdW90YV9yZXQgPSB2ZnNfZHFfcHJlYWxsb2NfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwKIAkJCQkJCQkgaGludC0+cHJlYWxsb2Nfc2l6ZSk7CiAJCQlpZiAocXVvdGFfcmV0KQogCQkJCWhpbnQtPnByZWFsbG9jYXRlID0gaGludC0+cHJlYWxsb2Nfc2l6ZSA9IDA7CkBAIC0xMDk4LDcgKzEwOTcsMTAgQEAKIAkJCQkJICAgICAgIG5yX2FsbG9jYXRlZCwKIAkJCQkJICAgICAgIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKLQkJCQlEUVVPVF9GUkVFX0JMT0NLX05PRElSVFkoaGludC0+aW5vZGUsIGFtb3VudF9uZWVkZWQgKyBoaW50LT5wcmVhbGxvY19zaXplIC0gbnJfYWxsb2NhdGVkKTsJLyogRnJlZSBub3QgYWxsb2NhdGVkIGJsb2NrcyAqLworCQkJCS8qIEZyZWUgbm90IGFsbG9jYXRlZCBibG9ja3MgKi8KKwkJCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLAorCQkJCQlhbW91bnRfbmVlZGVkICsgaGludC0+cHJlYWxsb2Nfc2l6ZSAtCisJCQkJCW5yX2FsbG9jYXRlZCk7CiAJCQl9CiAJCQl3aGlsZSAobnJfYWxsb2NhdGVkLS0pCiAJCQkJcmVpc2VyZnNfZnJlZV9ibG9jayhoaW50LT50aCwgaGludC0+aW5vZGUsCkBAIC0xMTI5LDcgKzExMzEsNyBAQAogCQkJICAgICAgIFJFSVNFUkZTX0koaGludC0+aW5vZGUpLT5pX3ByZWFsbG9jX2NvdW50LAogCQkJICAgICAgIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKLQkJRFFVT1RfRlJFRV9CTE9DS19OT0RJUlRZKGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkICsKKwkJdmZzX2RxX2ZyZWVfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwgYW1vdW50X25lZWRlZCArCiAJCQkJCSBoaW50LT5wcmVhbGxvY19zaXplIC0gbnJfYWxsb2NhdGVkIC0KIAkJCQkJIFJFSVNFUkZTX0koaGludC0+aW5vZGUpLT4KIAkJCQkJIGlfcHJlYWxsb2NfY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggNTVmY2U5Mi4uODIzMjI3YSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC01Myw3ICs1Myw3IEBACiAJCSAqIGFmdGVyIGRlbGV0ZV9vYmplY3Qgc28gdGhhdCBxdW90YSB1cGRhdGVzIGdvIGludG8gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMKIAkJICogc3RhdCBkYXRhIGRlbGV0aW9uICovCiAJCWlmICghZXJyKSAKLQkJCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCQkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwogCiAJCWlmIChqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBqYmVnaW5fY291bnQpKQogCQkJZ290byBvdXQ7CkBAIC0xNzYzLDcgKzE3NjMsNyBAQAogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBvdXRfZW5kX3RyYW5zOwogCX0KQEAgLTE5NDcsMTIgKzE5NDcsMTIgQEAKIAlJTk9ERV9QS0VZKGlub2RlKS0+a19vYmplY3RpZCA9IDA7CiAKIAkvKiBRdW90YSBjaGFuZ2UgbXVzdCBiZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiBmb3Igam91cm5hbGluZyAqLwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogICAgICAgb3V0X2VuZF90cmFuczoKIAlqb3VybmFsX2VuZCh0aCwgdGgtPnRfc3VwZXIsIHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQpOwogCS8qIERyb3AgY2FuIGJlIG91dHNpZGUgYW5kIGl0IG5lZWRzIG1vcmUgY3JlZGl0cyBzbyBpdCdzIGJldHRlciB0byBoYXZlIGl0IG91dHNpZGUgKi8KLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIApAQCAtMzExOSw3ICszMTE5LDcgQEAKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gb3V0OwogCQkJCWVycm9yID0KLQkJCQkgICAgRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CisJCQkJICAgIHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKIAkJCQlpZiAoZXJyb3IpIHsKIAkJCQkJam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwKIAkJCQkJCSAgICBqYmVnaW5fY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggNzM4OTY3Zi4uNjM5ZDYzNSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC01NTUsNyArNTU1LDcgQEAKICovCiBzdGF0aWMgaW50IGRyb3BfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJaXB1dChpbm9kZSk7CkBAIC01NjMsNyArNTYzLDcgQEAKIH0KIAogLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgc2V0dXAgZm9yIHJlaXNlcmZzX25ld19pbm9kZS4gIAotKiogRFFVT1RfSU5JVCBuZWVkcyBsb3RzIG9mIGNyZWRpdHMgc28gaXQncyBiZXR0ZXIgdG8gaGF2ZSBpdAorKiogdmZzX2RxX2luaXQgbmVlZHMgbG90cyBvZiBjcmVkaXRzIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQKICoqIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiwgc28gd2UgaGFkIHRvIHB1bGwgc29tZSBiaXRzIG9mCiAqKiByZWlzZXJmc19uZXdfaW5vZGUgb3V0IGludG8gdGhpcyBmdW5jLgogKi8KQEAgLTU4Niw3ICs1ODYsNyBAQAogCX0gZWxzZSB7CiAJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKIAl9Ci0JRFFVT1RfSU5JVChpbm9kZSk7CisJdmZzX2RxX2luaXQoaW5vZGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdHJlZS5jIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwppbmRleCBhYmJjNjRkLi43M2FhYTMzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdHJlZS5jCisrKyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCSAgICAgICAicmVpc2VycXVvdGEgZGVsZXRlX2l0ZW0oKTogZnJlZWluZyAldSwgaWQ9JXUgdHlwZT0lYyIsCiAJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsIGhlYWQydHlwZSgmc19paCkpOwogI2VuZGlmCi0JRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKHBfc19pbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHBfc19pbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKIAogCS8qIFJldHVybiBkZWxldGVkIGJvZHkgbGVuZ3RoICovCiAJcmV0dXJuIG5fcmV0X3ZhbHVlOwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAkJCQkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgaW5vZGUtPmlfdWlkLAogCQkJCQkgICAgICAga2V5MnR5cGUoa2V5KSk7CiAjZW5kaWYKLQkJCQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsCisJCQkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKIAkJCQkJCQkgcXVvdGFfY3V0X2J5dGVzKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTczNCw3ICsxNzM0LDcgQEAKIAkJICAgICAgICJyZWlzZXJxdW90YSBjdXRfZnJvbV9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCiAJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsICc/Jyk7CiAjZW5kaWYKLQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwogCXJldHVybiBuX3JldF92YWx1ZTsKIH0KIApAQCAtMTk3MSw3ICsxOTcxLDcgQEAKIAkJICAgICAgIGtleTJ0eXBlKCYocF9zX2tleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKIAotCWlmIChEUVVPVF9BTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBuX3Bhc3RlZF9zaXplKSkgeworCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbl9wYXN0ZWRfc2l6ZSkpIHsKIAkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CiAJCXJldHVybiAtRURRVU9UOwogCX0KQEAgLTIwMjcsNyArMjAyNyw3IEBACiAJCSAgICAgICBuX3Bhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCiAJCSAgICAgICBrZXkydHlwZSgmKHBfc19rZXktPm9uX2Rpc2tfa2V5KSkpOwogI2VuZGlmCi0JRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKGlub2RlLCBuX3Bhc3RlZF9zaXplKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMDYwLDcgKzIwNjAsNyBAQAogI2VuZGlmCiAJCS8qIFdlIGNhbid0IGRpcnR5IGlub2RlIGhlcmUuIEl0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IHdyaXR0ZW4gYnV0CiAJCSAqIGFwcHJvcHJpYXRlIHN0YXQgaXRlbSBpc24ndCBpbnNlcnRlZCB5ZXQuLi4gKi8KLQkJaWYgKERRVU9UX0FMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsIHF1b3RhX2J5dGVzKSkgeworCQlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2J5dGVzKSkgewogCQkJcGF0aHJlbHNlKHBfc19wYXRoKTsKIAkJCXJldHVybiAtRURRVU9UOwogCQl9CkBAIC0yMTEyLDYgKzIxMTIsNiBAQAogCQkgICAgICAgcXVvdGFfYnl0ZXMsIGlub2RlLT5pX3VpZCwgaGVhZDJ0eXBlKHBfc19paCkpOwogI2VuZGlmCiAJaWYgKGlub2RlKQotCQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsIHF1b3RhX2J5dGVzKTsKKwkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCBmM2M4MjBiLi41ZGJhZmI3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAKIAkJaWYgKHRydW5jYXRlICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCS8qIFdlIGdvdCBhIHRydW5jYXRlIHJlcXVlc3QgZm9yIGEgZGlyIHdoaWNoIGlzIGltcG9zc2libGUuCkBAIC02MjksOCArNjI5LDYgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKICNkZWZpbmUgUVRZUEUyTkFNRSh0KSAoKHQpPT1VU1JRVU9UQT8idXNlciI6Imdyb3VwIikKIAotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqKTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICopOwogc3RhdGljIGludCByZWlzZXJmc19hY3F1aXJlX2RxdW90KHN0cnVjdCBkcXVvdCAqKTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKik7CkBAIC02MzksOCArNjM3LDggQEAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBjaGFyICosIGludCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyByZWlzZXJmc19xdW90YV9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplID0gcmVpc2VyZnNfZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcCA9IHJlaXNlcmZzX2RxdW90X2Ryb3AsCisJLmluaXRpYWxpemUgPSBkcXVvdF9pbml0aWFsaXplLAorCS5kcm9wID0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UgPSBkcXVvdF9hbGxvY19zcGFjZSwKIAkuYWxsb2NfaW5vZGUgPSBkcXVvdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9zcGFjZSA9IGRxdW90X2ZyZWVfc3BhY2UsCkBAIC0xODk2LDU4ICsxODk0LDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19RVU9UQQotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGNyZWF0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKLQlyZXQgPQotCSAgICBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkgIDIgKiBSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IGRxdW90X2luaXRpYWxpemUoaW5vZGUsIHR5cGUpOwotCWVyciA9Ci0JICAgIGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkyICogUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoIXJldCAmJiBlcnIpCi0JCXJldCA9IGVycjsKLSAgICAgIG91dDoKLQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcmVpc2VyZnNfZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGRlbGV0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKLQlyZXQgPQotCSAgICBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkgIDIgKiBSRUlTRVJGU19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKHJldCkgewotCQkvKgotCQkgKiBXZSBjYWxsIGRxdW90X2Ryb3AoKSBhbnl3YXkgdG8gYXQgbGVhc3QgcmVsZWFzZSByZWZlcmVuY2VzCi0JCSAqIHRvIHF1b3RhIHN0cnVjdHVyZXMgc28gdGhhdCB1bW91bnQgZG9lcyBub3QgaGFuZy4KLQkJICovCi0JCWRxdW90X2Ryb3AoaW5vZGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gZHF1b3RfZHJvcChpbm9kZSk7Ci0JZXJyID0KLQkgICAgam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwKLQkJCTIgKiBSRUlTRVJGU19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKCFyZXQgJiYgZXJyKQotCQlyZXQgPSBlcnI7Ci0gICAgICBvdXQ6Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHJlaXNlcmZzX3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGFkOTI0NjEuLmFlODgxY2MgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB4YXR0cl9sb29rdXBfcG9pc29uX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgeGF0dHJfbG9va3VwX3BvaXNvbl9vcHMgPSB7CiAJLmRfY29tcGFyZSA9IHhhdHRyX2xvb2t1cF9wb2lzb24sCiB9OwogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9kaXIuYyBiL2ZzL3NtYmZzL2Rpci5jCmluZGV4IGU3ZGRkMDMuLjNlNDgwM2IgMTAwNjQ0Ci0tLSBhL2ZzL3NtYmZzL2Rpci5jCisrKyBiL2ZzL3NtYmZzL2Rpci5jCkBAIC0yNzcsNyArMjc3LDcgQEAKIHN0YXRpYyBpbnQgc21iX2NvbXBhcmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CiBzdGF0aWMgaW50IHNtYl9kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc21iZnNfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IHNtYl9sb29rdXBfdmFsaWRhdGUsCiAJLmRfaGFzaAkJPSBzbWJfaGFzaF9kZW50cnksCkBAIC0yODUsNyArMjg1LDcgQEAKIAkuZF9kZWxldGUJPSBzbWJfZGVsZXRlX2RlbnRyeSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc21iZnNfZGVudHJ5X29wZXJhdGlvbnNfY2FzZSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNtYmZzX2RlbnRyeV9vcGVyYXRpb25zX2Nhc2UgPQogewogCS5kX3JldmFsaWRhdGUJPSBzbWJfbG9va3VwX3ZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IHNtYl9kZWxldGVfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNmNlNTAxNC4uMmJhNDgxNSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmcy0+c19hY3RpdmUsICZzYl9sb2NrKSkgewogCQlzLT5zX2NvdW50IC09IFNfQklBUy0xOwogCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCURRVU9UX09GRihzLCAwKTsKKwkJdmZzX2RxX29mZihzLCAwKTsKIAkJZG93bl93cml0ZSgmcy0+c191bW91bnQpOwogCQlmcy0+a2lsbF9zYihzKTsKIAkJcHV0X2ZpbGVzeXN0ZW0oZnMpOwpAQCAtMjY2LDcgKzI2Niw3IEBACiB2b2lkIF9fZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzeW5jX2lub2Rlc19zYihzYiwgMCk7Ci0JRFFVT1RfU1lOQyhzYik7CisJdmZzX2RxX3N5bmMoc2IpOwogCWxvY2tfc3VwZXIoc2IpOwogCWlmIChzYi0+c19kaXJ0ICYmIHNiLT5zX29wLT53cml0ZV9zdXBlcikKIAkJc2ItPnNfb3AtPndyaXRlX3N1cGVyKHNiKTsKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQkJbWFya19maWxlc19ybyhzYik7CiAJCWVsc2UgaWYgKCFmc19tYXlfcmVtb3VudF9ybyhzYikpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQlyZXR2YWwgPSBEUVVPVF9PRkYoc2IsIDEpOworCQlyZXR2YWwgPSB2ZnNfZHFfb2ZmKHNiLCAxKTsKIAkJaWYgKHJldHZhbCA8IDAgJiYgcmV0dmFsICE9IC1FTk9TWVMpCiAJCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTY3MCwxMSArNjcwLDExIEBACiAJfQogCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1JNVF9NQVNLKSB8IChmbGFncyAmIE1TX1JNVF9NQVNLKTsKIAlpZiAocmVtb3VudF9ydykKLQkJRFFVT1RfT05fUkVNT1VOVChzYik7CisJCXZmc19kcV9xdW90YV9vbl9yZW1vdW50KHNiKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9fZW1lcmdlbmN5X3JlbW91bnQodW5zaWduZWQgbG9uZyBmb28pCitzdGF0aWMgdm9pZCBkb19lbWVyZ2VuY3lfcmVtb3VudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIApAQCAtNjk3LDEyICs2OTcsMTkgQEAKIAkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCWtmcmVlKHdvcmspOwogCXByaW50aygiRW1lcmdlbmN5IFJlbW91bnQgY29tcGxldGVcbiIpOwogfQogCiB2b2lkIGVtZXJnZW5jeV9yZW1vdW50KHZvaWQpCiB7Ci0JcGRmbHVzaF9vcGVyYXRpb24oZG9fZW1lcmdlbmN5X3JlbW91bnQsIDApOworCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKworCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9BVE9NSUMpOworCWlmICh3b3JrKSB7CisJCUlOSVRfV09SSyh3b3JrLCBkb19lbWVyZ2VuY3lfcmVtb3VudCk7CisJCXNjaGVkdWxlX3dvcmsod29yayk7CisJfQogfQogCiAvKgpAQCAtODMxLDcgKzgzOCw4IEBACiAJCWJkZXYtPmJkX3N1cGVyID0gczsKIAl9CiAKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXJldHVybiAwOwogCiBlcnJvcl9zOgogCWVycm9yID0gUFRSX0VSUihzKTsKQEAgLTg3Nyw3ICs4ODUsOCBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0woZ2V0X3NiX25vZGV2KTsKQEAgLTkwOSw3ICs5MTgsOCBAQAogCQlzLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsKIAl9CiAJZG9fcmVtb3VudF9zYihzLCBmbGFncywgZGF0YSwgMCk7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChnZXRfc2Jfc2luZ2xlKTsKZGlmZiAtLWdpdCBhL2ZzL3N5bmMuYyBiL2ZzL3N5bmMuYwppbmRleCBhMTZkNTNlLi43YWJjNjVmIDEwMDY0NAotLS0gYS9mcy9zeW5jLmMKKysrIGIvZnMvc3luYy5jCkBAIC0yNSw3ICsyNSw3IEBACiB7CiAJd2FrZXVwX3BkZmx1c2goMCk7CiAJc3luY19pbm9kZXMoMCk7CQkvKiBBbGwgbWFwcGluZ3MsIGlub2RlcyBhbmQgdGhlaXIgYmxvY2tkZXZzICovCi0JRFFVT1RfU1lOQyhOVUxMKTsKKwl2ZnNfZHFfc3luYyhOVUxMKTsKIAlzeW5jX3N1cGVycygpOwkJLyogV3JpdGUgdGhlIHN1cGVyYmxvY2tzICovCiAJc3luY19maWxlc3lzdGVtcygwKTsJLyogU3RhcnQgc3luY2luZyB0aGUgZmlsZXN5c3RlbXMgKi8KIAlzeW5jX2ZpbGVzeXN0ZW1zKHdhaXQpOwkvKiBXYWl0aW5nbHkgc3luYyB0aGUgZmlsZXN5c3RlbXMgKi8KQEAgLTQyLDkgKzQyLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX3N5bmNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJZG9fc3luYygwKTsKKwlrZnJlZSh3b3JrKTsKK30KKwogdm9pZCBlbWVyZ2VuY3lfc3luYyh2b2lkKQogewotCXBkZmx1c2hfb3BlcmF0aW9uKGRvX3N5bmMsIDApOworCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKworCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9BVE9NSUMpOworCWlmICh3b3JrKSB7CisJCUlOSVRfV09SSyh3b3JrLCBkb19zeW5jX3dvcmspOworCQlzY2hlZHVsZV93b3JrKHdvcmspOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggZjJjNDc4Yy4uMDc3MDNkMyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTIxLDE1ICsyMSwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAic3lzZnMuaCIKIAorLyoKKyAqIFRoZXJlJ3Mgb25lIGJpbl9idWZmZXIgZm9yIGVhY2ggb3BlbiBmaWxlLgorICoKKyAqIGZpbHAtPnByaXZhdGVfZGF0YSBwb2ludHMgdG8gYmluX2J1ZmZlciBhbmQKKyAqIHN5c2ZzX2RpcmVudC0+c19iaW5fYXR0ci5idWZmZXJzIHBvaW50cyB0byBhIHRoZSBiaW5fYnVmZmVyIHMKKyAqIHN5c2ZzX2RpcmVudC0+c19iaW5fYXR0ci5idWZmZXJzIGlzIHByb3RlY3RlZCBieSBzeXNmc19iaW5fbG9jaworICovCitzdGF0aWMgREVGSU5FX01VVEVYKHN5c2ZzX2Jpbl9sb2NrKTsKKwogc3RydWN0IGJpbl9idWZmZXIgewotCXN0cnVjdCBtdXRleAltdXRleDsKLQl2b2lkCQkqYnVmZmVyOwotCWludAkJbW1hcHBlZDsKKwlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKKwl2b2lkCQkJCSpidWZmZXI7CisJaW50CQkJCW1tYXBwZWQ7CisJc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IAkqdm1fb3BzOworCXN0cnVjdCBmaWxlCQkJKmZpbGU7CisJc3RydWN0IGhsaXN0X25vZGUJCWxpc3Q7CiB9OwogCiBzdGF0aWMgaW50CkBAIC0xNjgsNiArMTgxLDE3NSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgYmluX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPm9wZW4pCisJCXJldHVybjsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybjsKKworCWJiLT52bV9vcHMtPm9wZW4odm1hKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworfQorCitzdGF0aWMgdm9pZCBiaW5fdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmNsb3NlKQorCQlyZXR1cm47CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm47CisKKwliYi0+dm1fb3BzLT5jbG9zZSh2bWEpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7Cit9CisKK3N0YXRpYyBpbnQgYmluX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmZhdWx0KQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKworCXJldCA9IGJiLT52bV9vcHMtPmZhdWx0KHZtYSwgdm1mKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmluX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghYmItPnZtX29wcy0+cGFnZV9ta3dyaXRlKQorCQlyZXR1cm4gMDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYmItPnZtX29wcy0+cGFnZV9ta3dyaXRlKHZtYSwgcGFnZSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJpbl9hY2Nlc3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmFjY2VzcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGJiLT52bV9vcHMtPmFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZiwgbGVuLCB3cml0ZSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX05VTUEKK3N0YXRpYyBpbnQgYmluX3NldF9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtZW1wb2xpY3kgKm5ldykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPnNldF9wb2xpY3kpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5zZXRfcG9saWN5KHZtYSwgbmV3KTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVtcG9saWN5ICpiaW5fZ2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJc3RydWN0IG1lbXBvbGljeSAqcG9sOworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5nZXRfcG9saWN5KQorCQlyZXR1cm4gdm1hLT52bV9wb2xpY3k7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gdm1hLT52bV9wb2xpY3k7CisKKwlwb2wgPSBiYi0+dm1fb3BzLT5nZXRfcG9saWN5KHZtYSwgYWRkcik7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcG9sOworfQorCitzdGF0aWMgaW50IGJpbl9taWdyYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBjb25zdCBub2RlbWFza190ICpmcm9tLAorCQkJY29uc3Qgbm9kZW1hc2tfdCAqdG8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5taWdyYXRlKQorCQlyZXR1cm4gMDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAwOworCisJcmV0ID0gYmItPnZtX29wcy0+bWlncmF0ZSh2bWEsIGZyb20sIHRvLCBmbGFncyk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKKwkub3BlbgkJPSBiaW5fdm1hX29wZW4sCisJLmNsb3NlCQk9IGJpbl92bWFfY2xvc2UsCisJLmZhdWx0CQk9IGJpbl9mYXVsdCwKKwkucGFnZV9ta3dyaXRlCT0gYmluX3BhZ2VfbWt3cml0ZSwKKwkuYWNjZXNzCQk9IGJpbl9hY2Nlc3MsCisjaWZkZWYgQ09ORklHX05VTUEKKwkuc2V0X3BvbGljeQk9IGJpbl9zZXRfcG9saWN5LAorCS5nZXRfcG9saWN5CT0gYmluX2dldF9wb2xpY3ksCisJLm1pZ3JhdGUJPSBiaW5fbWlncmF0ZSwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBtbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xNzksMTggKzM2MSwzNyBAQAogCW11dGV4X2xvY2soJmJiLT5tdXRleCk7CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIsIGl0cyBwYXJlbnQgZm9yIGtvYmogKi8KKwlyYyA9IC1FTk9ERVY7CiAJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubG9jazsKIAogCXJjID0gLUVJTlZBTDsKLQlpZiAoYXR0ci0+bW1hcCkKLQkJcmMgPSBhdHRyLT5tbWFwKGtvYmosIGF0dHIsIHZtYSk7CisJaWYgKCFhdHRyLT5tbWFwKQorCQlnb3RvIG91dF9wdXQ7CiAKLQlpZiAocmMgPT0gMCAmJiAhYmItPm1tYXBwZWQpCi0JCWJiLT5tbWFwcGVkID0gMTsKLQllbHNlCi0JCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJjID0gYXR0ci0+bW1hcChrb2JqLCBhdHRyLCB2bWEpOworCWlmIChyYykKKwkJZ290byBvdXRfcHV0OwogCisJLyoKKwkgKiBQb3dlclBDJ3MgcGNpX21tYXAgb2YgbGVnYWN5X21lbSB1c2VzIHNobWVtX3plcm9fc2V0dXAoKQorCSAqIHRvIHNhdGlzZnkgdmVyc2lvbnMgb2YgWCB3aGljaCBjcmFzaCBpZiB0aGUgbW1hcCBmYWlsczogdGhhdAorCSAqIHN1YnN0aXR1dGVzIGEgbmV3IHZtX2ZpbGUsIGFuZCB3ZSBkb24ndCB0aGVuIHdhbnQgYmluX3ZtX29wcy4KKwkgKi8KKwlpZiAodm1hLT52bV9maWxlICE9IGZpbGUpCisJCWdvdG8gb3V0X3B1dDsKKworCXJjID0gLUVJTlZBTDsKKwlpZiAoYmItPm1tYXBwZWQgJiYgYmItPnZtX29wcyAhPSB2bWEtPnZtX29wcykKKwkJZ290byBvdXRfcHV0OworCisJcmMgPSAwOworCWJiLT5tbWFwcGVkID0gMTsKKwliYi0+dm1fb3BzID0gdm1hLT52bV9vcHM7CisJdm1hLT52bV9vcHMgPSAmYmluX3ZtX29wczsKK291dF9wdXQ6CisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKIAogCXJldHVybiByYzsKQEAgLTIyMyw4ICs0MjQsMTMgQEAKIAkJZ290byBlcnJfb3V0OwogCiAJbXV0ZXhfaW5pdCgmYmItPm11dGV4KTsKKwliYi0+ZmlsZSA9IGZpbGU7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYmI7CiAKKwltdXRleF9sb2NrKCZzeXNmc19iaW5fbG9jayk7CisJaGxpc3RfYWRkX2hlYWQoJmJiLT5saXN0LCAmYXR0cl9zZC0+c19iaW5fYXR0ci5idWZmZXJzKTsKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwogCS8qIG9wZW4gc3VjY2VlZGVkLCBwdXQgYWN0aXZlIHJlZmVyZW5jZXMgKi8KIAlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKIAlyZXR1cm4gMDsKQEAgLTIzNywxMSArNDQzLDEyIEBACiAKIHN0YXRpYyBpbnQgcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoYmItPm1tYXBwZWQpCi0JCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwlobGlzdF9kZWwoJmJiLT5saXN0KTsKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwogCWtmcmVlKGJiLT5idWZmZXIpOwogCWtmcmVlKGJiKTsKIAlyZXR1cm4gMDsKQEAgLTI1Niw2ICs0NjMsMjYgQEAKIAkucmVsZWFzZQk9IHJlbGVhc2UsCiB9OwogCisKK3ZvaWQgdW5tYXBfYmluX2ZpbGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCkKK3sKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmI7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKworCWlmIChzeXNmc190eXBlKGF0dHJfc2QpICE9IFNZU0ZTX0tPQkpfQklOX0FUVFIpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJiLCB0bXAsICZhdHRyX3NkLT5zX2Jpbl9hdHRyLmJ1ZmZlcnMsIGxpc3QpIHsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGJiLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJCXVubWFwX21hcHBpbmdfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgMCwgMCwgMSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzeXNmc19iaW5fbG9jayk7Cit9CisKIC8qKgogICoJc3lzZnNfY3JlYXRlX2Jpbl9maWxlIC0gY3JlYXRlIGJpbmFyeSBmaWxlIGZvciBvYmplY3QuCiAgKglAa29iajoJb2JqZWN0LgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA4MmQzYjc5Li5kODhkMGZhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJaXB1dChpbm9kZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzZnNfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzZnNfZGVudHJ5X29wcyA9IHsKIAkuZF9pcHV0CQk9IHN5c2ZzX2RfaXB1dCwKIH07CiAKQEAgLTQzNCw2ICs0MzQsMjYgQEAKIH0KIAogLyoqCisgKglzeXNmc19wYXRobmFtZSAtIHJldHVybiBmdWxsIHBhdGggdG8gc3lzZnMgZGlyZW50CisgKglAc2Q6IHN5c2ZzX2RpcmVudCB3aG9zZSBwYXRoIHdlIHdhbnQKKyAqCUBwYXRoOiBjYWxsZXIgYWxsb2NhdGVkIGJ1ZmZlcgorICoKKyAqCUdpdmVzIHRoZSBuYW1lICIvIiB0byB0aGUgc3lzZnNfcm9vdCBlbnRyeTsgYW55IHBhdGggcmV0dXJuZWQKKyAqCWlzIHJlbGF0aXZlIHRvIHdoZXJldmVyIHN5c2ZzIGlzIG1vdW50ZWQuCisgKgorICoJWFhYOiBkb2VzIG5vIGVycm9yIGNoZWNraW5nIG9uIEBwYXRoIHNpemUKKyAqLworc3RhdGljIGNoYXIgKnN5c2ZzX3BhdGhuYW1lKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkLCBjaGFyICpwYXRoKQoreworCWlmIChzZC0+c19wYXJlbnQpIHsKKwkJc3lzZnNfcGF0aG5hbWUoc2QtPnNfcGFyZW50LCBwYXRoKTsKKwkJc3RyY2F0KHBhdGgsICIvIik7CisJfQorCXN0cmNhdChwYXRoLCBzZC0+c19uYW1lKTsKKwlyZXR1cm4gcGF0aDsKK30KKworLyoqCiAgKglzeXNmc19hZGRfb25lIC0gYWRkIHN5c2ZzX2RpcmVudCB0byBwYXJlbnQKICAqCUBhY3h0OiBhZGRybSBjb250ZXh0IHRvIHVzZQogICoJQHNkOiBzeXNmc19kaXJlbnQgdG8gYmUgYWRkZWQKQEAgLTQ1OCw4ICs0NzgsMTYgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gX19zeXNmc19hZGRfb25lKGFjeHQsIHNkKTsKLQlXQVJOKHJldCA9PSAtRUVYSVNULCBLRVJOX1dBUk5JTkcgInN5c2ZzOiBkdXBsaWNhdGUgZmlsZW5hbWUgJyVzJyAiCi0JCSAgICAgICAiY2FuIG5vdCBiZSBjcmVhdGVkXG4iLCBzZC0+c19uYW1lKTsKKwlpZiAocmV0ID09IC1FRVhJU1QpIHsKKwkJY2hhciAqcGF0aCA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQlXQVJOKDEsIEtFUk5fV0FSTklORworCQkgICAgICJzeXNmczogY2Fubm90IGNyZWF0ZSBkdXBsaWNhdGUgZmlsZW5hbWUgJyVzJ1xuIiwKKwkJICAgICAocGF0aCA9PSBOVUxMKSA/IHNkLT5zX25hbWUgOgorCQkgICAgIHN0cmNhdChzdHJjYXQoc3lzZnNfcGF0aG5hbWUoYWN4dC0+cGFyZW50X3NkLCBwYXRoKSwgIi8iKSwKKwkJICAgICAgICAgICAgc2QtPnNfbmFtZSkpOworCQlrZnJlZShwYXRoKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODEsNiArNjA5LDcgQEAKIAogCQlzeXNmc19kcm9wX2RlbnRyeShzZCk7CiAJCXN5c2ZzX2RlYWN0aXZhdGUoc2QpOworCQl1bm1hcF9iaW5fZmlsZShzZCk7CiAJCXN5c2ZzX3B1dChzZCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IDFmNGEzZjguLjI4OWM0M2EgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTY1OSwxMyArNjU5LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKTsKIAogc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCB7Ci0Jc3RydWN0IGtvYmplY3QgCQkqa29iajsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtxX2xpc3Q7CisJc3RydWN0IGtvYmplY3QJCSprb2JqOwogCXZvaWQJCQkoKmZ1bmMpKHZvaWQgKik7CiAJdm9pZAkJCSpkYXRhOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoc3lzZnNfd29ya3FfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChzeXNmc193b3JrcSk7CiBzdGF0aWMgdm9pZCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzcyA9IGNvbnRhaW5lcl9vZih3b3JrLApAQCAtNjc0LDYgKzY3Nyw5IEBACiAJKHNzLT5mdW5jKShzcy0+ZGF0YSk7CiAJa29iamVjdF9wdXQoc3MtPmtvYmopOwogCW1vZHVsZV9wdXQoc3MtPm93bmVyKTsKKwltdXRleF9sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJbGlzdF9kZWwoJnNzLT53b3JrcV9saXN0KTsKKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKIAlrZnJlZShzcyk7CiB9CiAKQEAgLTY5NSwxNSArNzAxLDI1IEBACiAgKiB1bnRpbCBAZnVuYyByZXR1cm5zLgogICoKICAqIFJldHVybnMgMCBpZiB0aGUgcmVxdWVzdCB3YXMgc3VibWl0dGVkLCAtRU5PTUVNIGlmIHN0b3JhZ2UgY291bGQgbm90Ci0gKiBiZSBhbGxvY2F0ZWQsIC1FTk9ERVYgaWYgYSByZWZlcmVuY2UgdG8gQG93bmVyIGlzbid0IGF2YWlsYWJsZS4KKyAqIGJlIGFsbG9jYXRlZCwgLUVOT0RFViBpZiBhIHJlZmVyZW5jZSB0byBAb3duZXIgaXNuJ3QgYXZhaWxhYmxlLAorICogLUVBR0FJTiBpZiBhIGNhbGxiYWNrIGhhcyBhbHJlYWR5IGJlZW4gc2NoZWR1bGVkIGZvciBAa29iai4KICAqLwogaW50IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCB2b2lkICgqZnVuYykodm9pZCAqKSwKIAkJdm9pZCAqZGF0YSwgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7Ci0Jc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCAqc3M7CisJc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCAqc3MsICp0bXA7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNzLCB0bXAsICZzeXNmc193b3JrcSwgd29ya3FfbGlzdCkKKwkJaWYgKHNzLT5rb2JqID09IGtvYmopIHsKKwkJCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwogCXNzID0ga21hbGxvYyhzaXplb2YoKnNzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcykgewogCQltb2R1bGVfcHV0KG93bmVyKTsKQEAgLTcxNSw2ICs3MzEsMTAgQEAKIAlzcy0+ZGF0YSA9IGRhdGE7CiAJc3MtPm93bmVyID0gb3duZXI7CiAJSU5JVF9XT1JLKCZzcy0+d29yaywgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfd29yayk7CisJSU5JVF9MSVNUX0hFQUQoJnNzLT53b3JrcV9saXN0KTsKKwltdXRleF9sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmc3MtPndvcmtxX2xpc3QsICZzeXNmc193b3JrcSk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CiAJc2NoZWR1bGVfd29yaygmc3MtPndvcmspOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvaW5vZGUuYyBiL2ZzL3N5c2ZzL2lub2RlLmMKaW5kZXggZGZhM2Q5NC4uNTU1ZjBmZiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvaW5vZGUuYworKysgYi9mcy9zeXNmcy9pbm9kZS5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIHsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHI7CiAKKwlpbm9kZS0+aV9wcml2YXRlID0gc3lzZnNfZ2V0KHNkKTsKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZzeXNmc19hb3BzOwogCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmc3lzZnNfYmFja2luZ19kZXZfaW5mbzsKIAlpbm9kZS0+aV9vcCA9ICZzeXNmc19pbm9kZV9vcGVyYXRpb25zOwpAQCAtMjE0LDYgKzIxNSwyMiBAQAogCXJldHVybiBpbm9kZTsKIH0KIAorLyoKKyAqIFRoZSBzeXNmc19kaXJlbnQgc2VydmVzIGFzIGJvdGggYW4gaW5vZGUgYW5kIGEgZGlyZWN0b3J5IGVudHJ5IGZvciBzeXNmcy4KKyAqIFRvIHByZXZlbnQgdGhlIHN5c2ZzIGlub2RlIG51bWJlcnMgZnJvbSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseSB3ZSB0YWtlIGEKKyAqIHJlZmVyZW5jZSB0byBzeXNmc19kaXJlbnQgZnJvbSB0aGUgc3lzZnMgaW5vZGUuICBBCisgKiBzdXBlcl9vcGVyYXRpb25zLmRlbGV0ZV9pbm9kZSgpIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZCB0byBkcm9wIHRoYXQKKyAqIHJlZmVyZW5jZSB1cG9uIGlub2RlIGRlc3RydWN0aW9uLgorICovCit2b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzeXNmc19kaXJlbnQgKnNkICA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJY2xlYXJfaW5vZGUoaW5vZGUpOworCXN5c2ZzX3B1dChzZCk7Cit9CisKIGludCBzeXNmc19oYXNoX2FuZF9yZW1vdmUoc3RydWN0IHN5c2ZzX2RpcmVudCAqZGlyX3NkLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzeXNmc19hZGRybV9jeHQgYWN4dDsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL21vdW50LmMgYi9mcy9zeXNmcy9tb3VudC5jCmluZGV4IGFiMzQzZTMuLjQ5NzQ5OTUgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL21vdW50LmMKKysrIGIvZnMvc3lzZnMvbW91bnQuYwpAQCAtMTcsMTEgKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAjaW5jbHVkZSAic3lzZnMuaCIKIAotLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqLwotI2RlZmluZSBTWVNGU19NQUdJQyAweDYyNjU2NTcyCiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnN5c2ZzX21vdW50Owogc3RydWN0IHN1cGVyX2Jsb2NrICogc3lzZnNfc2IgPSBOVUxMOwpAQCAtMzAsNiArMjksNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHN5c2ZzX29wcyA9IHsKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkuZGVsZXRlX2lub2RlCT0gc3lzZnNfZGVsZXRlX2lub2RlLAogfTsKIAogc3RydWN0IHN5c2ZzX2RpcmVudCBzeXNmc19yb290ID0gewpAQCAtNTMsNyArNTMsOSBAQAogCXN5c2ZzX3NiID0gc2I7CiAKIAkvKiBnZXQgcm9vdCBpbm9kZSwgaW5pdGlhbGl6ZSBhbmQgdW5sb2NrIGl0ICovCisJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCWlub2RlID0gc3lzZnNfZ2V0X2lub2RlKCZzeXNmc19yb290KTsKKwltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKIAlpZiAoIWlub2RlKSB7CiAJCXByX2RlYnVnKCJzeXNmczogY291bGQgbm90IGdldCByb290IGlub2RlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCA5M2M2ZDZiLi4zZmEwZDk4NCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKIHN0cnVjdCBzeXNmc19lbGVtX2Jpbl9hdHRyIHsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQkqYmluX2F0dHI7CisJc3RydWN0IGhsaXN0X2hlYWQJYnVmZmVyczsKIH07CiAKIC8qCkBAIC0xNDUsNiArMTQ2LDcgQEAKICAqIGlub2RlLmMKICAqLwogc3RydWN0IGlub2RlICpzeXNmc19nZXRfaW5vZGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwordm9pZCBzeXNmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgc3lzZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwogaW50IHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHN5c2ZzX2lub2RlX2luaXQodm9pZCk7CkBAIC0xNjMsNiArMTY1LDcgQEAKICAqIGJpbi5jCiAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJpbl9mb3BzOwordm9pZCB1bm1hcF9iaW5fZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkKTsKIAogLyoKICAqIHN5bWxpbmsuYwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9uYW1laS5jIGIvZnMvc3lzdi9uYW1laS5jCmluZGV4IGExZjFlZjMuLjMzZTA0N2IgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvbmFtZWkuYworKysgYi9mcy9zeXN2L25hbWVpLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHN5c3ZfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IHN5c3ZfaGFzaCwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3N5c3Yvc3lzdi5oIGIvZnMvc3lzdi9zeXN2LmgKaW5kZXggMzhlYmUzZi4uNTc4NGEzMSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9zeXN2LmgKKysrIGIvZnMvc3lzdi9zeXN2LmgKQEAgLTE3MCw3ICsxNzAsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lzdl9kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHN5c3ZfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzeXN2X3NvcHM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHN5c3ZfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHN5c3ZfZGVudHJ5X29wZXJhdGlvbnM7CiAKIAogZW51bSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCAxMTgyYjY2Li5jNWM5ODM1IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTIwMzQsNyArMjAzNCw4IEBACiAJLyogJ2ZpbGxfc3VwZXIoKScgb3BlbnMgdWJpIGFnYWluIHNvIHdlIG11c3QgY2xvc2UgaXQgaGVyZSAqLwogCXViaV9jbG9zZV92b2x1bWUodWJpKTsKIAotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlyZXR1cm4gMDsKIAogb3V0X2RlYWN0OgogCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2JhbGxvYy5jIGIvZnMvdWRmL2JhbGxvYy5jCmluZGV4IDFiODA5YmQ0Li4yYmI3ODhhIDEwMDY0NAotLS0gYS9mcy91ZGYvYmFsbG9jLmMKKysrIGIvZnMvdWRmL2JhbGxvYy5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCQkJKChjaGFyICopYmgtPmJfZGF0YSlbKGJpdCArIGkpID4+IDNdKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGlub2RlKQotCQkJCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJCQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQkJCXVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHNiaS0+c19wYXJ0aXRpb24sIDEpOwogCQkJfQogCQl9CkBAIC0yNjEsMTEgKzI2MSwxMSBAQAogCQl3aGlsZSAoYml0IDwgKHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzKSAmJiBibG9ja19jb3VudCA+IDApIHsKIAkJCWlmICghdWRmX3Rlc3RfYml0KGJpdCwgYmgtPmJfZGF0YSkpCiAJCQkJZ290byBvdXQ7Ci0JCQllbHNlIGlmIChEUVVPVF9QUkVBTExPQ19CTE9DSyhpbm9kZSwgMSkpCisJCQllbHNlIGlmICh2ZnNfZHFfcHJlYWxsb2NfYmxvY2soaW5vZGUsIDEpKQogCQkJCWdvdG8gb3V0OwogCQkJZWxzZSBpZiAoIXVkZl9jbGVhcl9iaXQoYml0LCBiaC0+Yl9kYXRhKSkgewogCQkJCXVkZl9kZWJ1ZygiYml0IGFscmVhZHkgY2xlYXJlZCBmb3IgYmxvY2sgJWRcbiIsIGJpdCk7Ci0JCQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJCQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJYmxvY2tfY291bnQtLTsKQEAgLTM5Myw3ICszOTMsNyBAQAogCS8qCiAJICogQ2hlY2sgcXVvdGEgZm9yIGFsbG9jYXRpb24gb2YgdGhpcyBibG9jay4KIAkgKi8KLQlpZiAoaW5vZGUgJiYgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKSB7CisJaWYgKGlub2RlICYmIHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCQkqZXJyID0gLUVEUVVPVDsKIAkJcmV0dXJuIDA7CkBAIC00NTIsNyArNDUyLDcgQEAKIAkvKiBXZSBkbyB0aGlzIHVwIGZyb250IC0gVGhlcmUgYXJlIHNvbWUgZXJyb3IgY29uZGl0aW9ucyB0aGF0CiAJICAgY291bGQgb2NjdXJlLCBidXQuLiBvaCB3ZWxsICovCiAJaWYgKGlub2RlKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBjb3VudCk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBjb3VudCk7CiAJaWYgKHVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHNiaS0+c19wYXJ0aXRpb24sIGNvdW50KSkKIAkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOwogCkBAIC03MDAsNyArNzAwLDcgQEAKIAkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOwogCiAJCWFsbG9jX2NvdW50ID0gKGVsZW4gPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQlpZiAoaW5vZGUgJiYgRFFVT1RfUFJFQUxMT0NfQkxPQ0soaW5vZGUsCisJCWlmIChpbm9kZSAmJiB2ZnNfZHFfcHJlYWxsb2NfYmxvY2soaW5vZGUsCiAJCQlhbGxvY19jb3VudCA+IGJsb2NrX2NvdW50ID8gYmxvY2tfY291bnQgOiBhbGxvY19jb3VudCkpCiAJCQlhbGxvY19jb3VudCA9IDA7CiAJCWVsc2UgaWYgKGFsbG9jX2NvdW50ID4gYmxvY2tfY291bnQpIHsKQEAgLTgwNiw3ICs4MDYsNyBAQAogCWdvYWxfZWxvYy5sb2dpY2FsQmxvY2tOdW0rKzsKIAlnb2FsX2VsZW4gLT0gc2ItPnNfYmxvY2tzaXplOwogCi0JaWYgKGlub2RlICYmIERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCAxKSkgeworCWlmIChpbm9kZSAmJiB2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIDEpKSB7CiAJCWJyZWxzZShnb2FsX2Vwb3MuYmgpOwogCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJCSplcnIgPSAtRURRVU9UOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lhbGxvYy5jIGIvZnMvdWRmL2lhbGxvYy5jCmluZGV4IDMxZmM4NDIuLjQ3ZGJlNTYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pYWxsb2MuYworKysgYi9mcy91ZGYvaWFsbG9jLmMKQEAgLTM2LDggKzM2LDggQEAKIAkgKiBOb3RlOiB3ZSBtdXN0IGZyZWUgYW55IHF1b3RhIGJlZm9yZSBsb2NraW5nIHRoZSBzdXBlcmJsb2NrLAogCSAqIGFzIHdyaXRpbmcgdGhlIHF1b3RhIHRvIGRpc2sgbWF5IG5lZWQgdGhlIGxvY2sgYXMgd2VsbC4KIAkgKi8KLQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCkBAIC0xNTQsOCArMTU0LDggQEAKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7Ci0JCURRVU9UX0RST1AoaW5vZGUpOworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CisJCXZmc19kcV9kcm9wKGlub2RlKTsKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCQlpbm9kZS0+aV9ubGluayA9IDA7CiAJCWlwdXQoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL2JhbGxvYy5jIGIvZnMvdWZzL2JhbGxvYy5jCmluZGV4IDBkOWFkYTEuLjU0YzE2ZWMgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9iYWxsb2MuYworKysgYi9mcy91ZnMvYmFsbG9jLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkJCQkgICAiYml0IGFscmVhZHkgY2xlYXJlZCBmb3IgZnJhZ21lbnQgJXUiLCBpKTsKIAl9CiAJCi0JRFFVT1RfRlJFRV9CTE9DSyAoaW5vZGUsIGNvdW50KTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgY291bnQpOwogCiAJCiAJZnMzMl9hZGQoc2IsICZ1Y2ctPmNnX2NzLmNzX25mZnJlZSwgY291bnQpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCXViaF9zZXRibG9jayhVQ1BJX1VCSCh1Y3BpKSwgdWNwaS0+Y19mcmVlb2ZmLCBibGtubyk7CiAJCWlmICgoVUZTX1NCKHNiKS0+c19mbGFncyAmIFVGU19DR19NQVNLKSA9PSBVRlNfQ0dfNDRCU0QpCiAJCQl1ZnNfY2x1c3RlcmFjY3QgKHNiLCB1Y3BpLCBibGtubywgMSk7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIHVzcGktPnNfZnBiKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIHVzcGktPnNfZnBiKTsKIAogCQlmczMyX2FkZChzYiwgJnVjZy0+Y2dfY3MuY3NfbmJmcmVlLCAxKTsKIAkJdXNwaS0+Y3NfdG90YWwuY3NfbmJmcmVlKys7CkBAIC01NTYsNyArNTU2LDcgQEAKIAkJZnMzMl9hZGQoc2IsICZ1Y2ctPmNnX2Zyc3VtW2ZyYWdzaXplIC0gY291bnRdLCAxKTsKIAlmb3IgKGkgPSBvbGRjb3VudDsgaSA8IG5ld2NvdW50OyBpKyspCiAJCXViaF9jbHJiaXQgKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGZyYWdubyArIGkpOwotCWlmKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBjb3VudCkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBjb3VudCkpIHsKIAkJKmVyciA9IC1FRFFVT1Q7CiAJCXJldHVybiAwOwogCX0KQEAgLTY2NCw3ICs2NjQsNyBAQAogCQlmb3IgKGkgPSBjb3VudDsgaSA8IHVzcGktPnNfZnBiOyBpKyspCiAJCQl1Ymhfc2V0Yml0IChVQ1BJX1VCSCh1Y3BpKSwgdWNwaS0+Y19mcmVlb2ZmLCBnb2FsICsgaSk7CiAJCWkgPSB1c3BpLT5zX2ZwYiAtIGNvdW50OwotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBpKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGkpOwogCiAJCWZzMzJfYWRkKHNiLCAmdWNnLT5jZ19jcy5jc19uZmZyZWUsIGkpOwogCQl1c3BpLT5jc190b3RhbC5jc19uZmZyZWUgKz0gaTsKQEAgLTY3Niw3ICs2NzYsNyBAQAogCXJlc3VsdCA9IHVmc19iaXRtYXBfc2VhcmNoIChzYiwgdWNwaSwgZ29hbCwgYWxsb2NzaXplKTsKIAlpZiAocmVzdWx0ID09IElOVkJMT0NLKQogCQlyZXR1cm4gMDsKLQlpZihEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgY291bnQpKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgY291bnQpKSB7CiAJCSplcnIgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03NDcsNyArNzQ3LDcgQEAKIAl1YmhfY2xyYmxvY2sgKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGJsa25vKTsKIAlpZiAoKFVGU19TQihzYiktPnNfZmxhZ3MgJiBVRlNfQ0dfTUFTSykgPT0gVUZTX0NHXzQ0QlNEKQogCQl1ZnNfY2x1c3RlcmFjY3QgKHNiLCB1Y3BpLCBibGtubywgLTEpOwotCWlmKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCB1c3BpLT5zX2ZwYikpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCB1c3BpLT5zX2ZwYikpIHsKIAkJKmVyciA9IC1FRFFVT1Q7CiAJCXJldHVybiBJTlZCTE9DSzsKIAl9CmRpZmYgLS1naXQgYS9mcy91ZnMvaWFsbG9jLmMgYi9mcy91ZnMvaWFsbG9jLmMKaW5kZXggNmY1ZGNmMC4uMzUyN2MwMCAxMDA2NDQKLS0tIGEvZnMvdWZzL2lhbGxvYy5jCisrKyBiL2ZzL3Vmcy9pYWxsb2MuYwpAQCAtOTUsOCArOTUsOCBAQAogCiAJaXNfZGlyZWN0b3J5ID0gU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKIAotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAKIAljbGVhcl9pbm9kZSAoaW5vZGUpOwogCkBAIC0zNTUsOCArMzU1LDggQEAKIAogCXVubG9ja19zdXBlciAoc2IpOwogCi0JaWYgKERRVU9UX0FMTE9DX0lOT0RFKGlub2RlKSkgewotCQlEUVVPVF9EUk9QKGlub2RlKTsKKwlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgeworCQl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJCWVyciA9IC1FRFFVT1Q7CiAJCWdvdG8gZmFpbF93aXRob3V0X3VubG9jazsKIAl9CmRpZmYgLS1naXQgYS9mcy91ZnMvaW5vZGUuYyBiL2ZzL3Vmcy9pbm9kZS5jCmluZGV4IDM5Zjg3NzguLjNkMjUxMmMgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pbm9kZS5jCisrKyBiL2ZzL3Vmcy9pbm9kZS5jCkBAIC02MjIsNyArNjIyLDYgQEAKIAlzdHJ1Y3QgdWZzX2lub2RlX2luZm8gKnVmc2kgPSBVRlNfSShpbm9kZSk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCW1vZGVfdCBtb2RlOwotCXVuc2lnbmVkIGk7CiAKIAkvKgogCSAqIENvcHkgZGF0YSB0byB0aGUgaW4tY29yZSBpbm9kZS4KQEAgLTY1NSwxMSArNjU0LDEyIEBACiAKIAkKIAlpZiAoU19JU0NIUihtb2RlKSB8fCBTX0lTQkxLKG1vZGUpIHx8IGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzaS0+aV91MS5pX2RhdGFbaV0gPSB1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbaV07CisJCW1lbWNweSh1ZnNpLT5pX3UxLmlfZGF0YSwgJnVmc19pbm9kZS0+dWlfdTIudWlfYWRkciwKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIpKTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKSAqIDQ7IGkrKykKLQkJCXVmc2ktPmlfdTEuaV9zeW1saW5rW2ldID0gdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rW2ldOworCQltZW1jcHkodWZzaS0+aV91MS5pX3N5bWxpbmssIHVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaywKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspIC0gMSk7CisJCXVmc2ktPmlfdTEuaV9zeW1saW5rW3NpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspIC0gMV0gPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTY2OSw3ICs2NjksNiBAQAogCXN0cnVjdCB1ZnNfaW5vZGVfaW5mbyAqdWZzaSA9IFVGU19JKGlub2RlKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJbW9kZV90IG1vZGU7Ci0JdW5zaWduZWQgaTsKIAogCVVGU0QoIlJlYWRpbmcgdWZzMiBpbm9kZSwgaW5vICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKIAkvKgpAQCAtNzA0LDEyICs3MDMsMTIgQEAKIAkqLwogCiAJaWYgKFNfSVNDSFIobW9kZSkgfHwgU19JU0JMSyhtb2RlKSB8fCBpbm9kZS0+aV9ibG9ja3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IChVRlNfTkRBRERSICsgVUZTX05JTkRJUik7IGkrKykKLQkJCXVmc2ktPmlfdTEudTJfaV9kYXRhW2ldID0KLQkJCQl1ZnMyX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiW2ldOworCQltZW1jcHkodWZzaS0+aV91MS51Ml9pX2RhdGEsICZ1ZnMyX2lub2RlLT51aV91Mi51aV9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHVmczJfaW5vZGUtPnVpX3UyLnVpX2FkZHIpKTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKSAqIDQ7IGkrKykKLQkJCXVmc2ktPmlfdTEuaV9zeW1saW5rW2ldID0gdWZzMl9pbm9kZS0+dWlfdTIudWlfc3ltbGlua1tpXTsKKwkJbWVtY3B5KHVmc2ktPmlfdTEuaV9zeW1saW5rLCB1ZnMyX2lub2RlLT51aV91Mi51aV9zeW1saW5rLAorCQkgICAgICAgc2l6ZW9mKHVmczJfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspIC0gMSk7CisJCXVmc2ktPmlfdTEuaV9zeW1saW5rW3NpemVvZih1ZnMyX2lub2RlLT51aV91Mi51aV9zeW1saW5rKSAtIDFdID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03ODEsNyArNzgwLDYgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAgCXN0cnVjdCB1ZnNfaW5vZGVfaW5mbyAqdWZzaSA9IFVGU19JKGlub2RlKTsKLSAJdW5zaWduZWQgaTsKIAogCXVmc19pbm9kZS0+dWlfbW9kZSA9IGNwdV90b19mczE2KHNiLCBpbm9kZS0+aV9tb2RlKTsKIAl1ZnNfaW5vZGUtPnVpX25saW5rID0gY3B1X3RvX2ZzMTYoc2IsIGlub2RlLT5pX25saW5rKTsKQEAgLTgwOSwxMiArODA3LDEyIEBACiAJCS8qIHVmc19pbm9kZS0+dWlfdTIudWlfYWRkci51aV9kYlswXSA9IGNwdV90b19mczMyKHNiLCBpbm9kZS0+aV9yZGV2KTsgKi8KIAkJdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiWzBdID0gdWZzaS0+aV91MS5pX2RhdGFbMF07CiAJfSBlbHNlIGlmIChpbm9kZS0+aV9ibG9ja3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IChVRlNfTkRBRERSICsgVUZTX05JTkRJUik7IGkrKykKLQkJCXVmc19pbm9kZS0+dWlfdTIudWlfYWRkci51aV9kYltpXSA9IHVmc2ktPmlfdTEuaV9kYXRhW2ldOworCQltZW1jcHkoJnVmc19pbm9kZS0+dWlfdTIudWlfYWRkciwgdWZzaS0+aV91MS5pX2RhdGEsCisJCSAgICAgICBzaXplb2YodWZzX2lub2RlLT51aV91Mi51aV9hZGRyKSk7CiAJfQogCWVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKSAqIDQ7IGkrKykKLQkJCXVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGlua1tpXSA9IHVmc2ktPmlfdTEuaV9zeW1saW5rW2ldOworCQltZW1jcHkoJnVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaywgdWZzaS0+aV91MS5pX3N5bWxpbmssCisJCSAgICAgICBzaXplb2YodWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rKSk7CiAJfQogCiAJaWYgKCFpbm9kZS0+aV9ubGluaykKQEAgLTgyNSw3ICs4MjMsNiBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKICAJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOwotIAl1bnNpZ25lZCBpOwogCiAJVUZTRCgiRU5URVJcbiIpOwogCXVmc19pbm9kZS0+dWlfbW9kZSA9IGNwdV90b19mczE2KHNiLCBpbm9kZS0+aV9tb2RlKTsKQEAgLTg1MCwxMSArODQ3LDExIEBACiAJCS8qIHVmc19pbm9kZS0+dWlfdTIudWlfYWRkci51aV9kYlswXSA9IGNwdV90b19mczMyKHNiLCBpbm9kZS0+aV9yZGV2KTsgKi8KIAkJdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiWzBdID0gdWZzaS0+aV91MS51Ml9pX2RhdGFbMF07CiAJfSBlbHNlIGlmIChpbm9kZS0+aV9ibG9ja3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IChVRlNfTkRBRERSICsgVUZTX05JTkRJUik7IGkrKykKLQkJCXVmc19pbm9kZS0+dWlfdTIudWlfYWRkci51aV9kYltpXSA9IHVmc2ktPmlfdTEudTJfaV9kYXRhW2ldOworCQltZW1jcHkoJnVmc19pbm9kZS0+dWlfdTIudWlfYWRkciwgdWZzaS0+aV91MS51Ml9pX2RhdGEsCisJCSAgICAgICBzaXplb2YodWZzX2lub2RlLT51aV91Mi51aV9hZGRyKSk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IChVRlNfTkRBRERSICsgVUZTX05JTkRJUikgKiA0OyBpKyspCi0JCQl1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmtbaV0gPSB1ZnNpLT5pX3UxLmlfc3ltbGlua1tpXTsKKwkJbWVtY3B5KCZ1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmssIHVmc2ktPmlfdTEuaV9zeW1saW5rLAorCQkgICAgICAgc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaykpOwogIAl9CiAKIAlpZiAoIWlub2RlLT5pX25saW5rKQpkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCBlM2E5YjFmLi4yMzExOWZlIDEwMDY0NAotLS0gYS9mcy91ZnMvbmFtZWkuYworKysgYi9mcy91ZnMvbmFtZWkuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJfSBlbHNlIHsKIAkJLyogZmFzdCBzeW1saW5rICovCiAJCWlub2RlLT5pX29wID0gJnVmc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLQkJbWVtY3B5KChjaGFyKikmVUZTX0koaW5vZGUpLT5pX3UxLmlfZGF0YSxzeW1uYW1lLGwpOworCQltZW1jcHkoVUZTX0koaW5vZGUpLT5pX3UxLmlfc3ltbGluaywgc3ltbmFtZSwgbCk7CiAJCWlub2RlLT5pX3NpemUgPSBsLTE7CiAJfQogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3N1cGVyLmMgYi9mcy91ZnMvc3VwZXIuYwppbmRleCAyNjFhMWMyLi5lMWMxZmM1IDEwMDY0NAotLS0gYS9mcy91ZnMvc3VwZXIuYworKysgYi9mcy91ZnMvc3VwZXIuYwpAQCAtNjM2LDYgKzYzNiw3IEBACiAJdW5zaWduZWQgYmxvY2tfc2l6ZSwgc3VwZXJfYmxvY2tfc2l6ZTsKIAl1bnNpZ25lZCBmbGFnczsKIAl1bnNpZ25lZCBzdXBlcl9ibG9ja19vZmZzZXQ7CisJdW5zaWduZWQgbWF4c3ltbGVuOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJdXNwaSA9IE5VTEw7CkBAIC0xMDY5LDYgKzEwNzAsMTYgQEAKIAkJdXNwaS0+c19tYXhzeW1saW5rbGVuID0KIAkJICAgIGZzMzJfdG9fY3B1KHNiLCB1c2IzLT5mc191bjIuZnNfNDQuZnNfbWF4c3ltbGlua2xlbik7CiAKKwlpZiAodXNwaS0+ZnNfbWFnaWMgPT0gVUZTMl9NQUdJQykKKwkJbWF4c3ltbGVuID0gMiAqIDQgKiAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpOworCWVsc2UKKwkJbWF4c3ltbGVuID0gNCAqIChVRlNfTkRBRERSICsgVUZTX05JTkRJUik7CisJaWYgKHVzcGktPnNfbWF4c3ltbGlua2xlbiA+IG1heHN5bWxlbikgeworCQl1ZnNfd2FybmluZyhzYiwgX19mdW5jX18sICJ1ZnNfcmVhZF9zdXBlcjogZXhjZXNzaXZlIG1heGltdW0gIgorCQkJICAgICJmYXN0IHN5bWxpbmsgc2l6ZSAoJXUpXG4iLCB1c3BpLT5zX21heHN5bWxpbmtsZW4pOworCQl1c3BpLT5zX21heHN5bWxpbmtsZW4gPSBtYXhzeW1sZW47CisJfQorCiAJaW5vZGUgPSB1ZnNfaWdldChzYiwgVUZTX1JPT1RJTk8pOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCXJldCA9IFBUUl9FUlIoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3Vmcy5oIGIvZnMvdWZzL3Vmcy5oCmluZGV4IDExYzAzNTEuLjY5YjM0MjcgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91ZnMuaAorKysgYi9mcy91ZnMvdWZzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB7CiAJdW5pb24gewogCQlfX2ZzMzIJaV9kYXRhWzE1XTsKLQkJX191OAlpX3N5bWxpbmtbNCoxNV07CisJCV9fdTgJaV9zeW1saW5rWzIgKiA0ICogMTVdOwogCQlfX2ZzNjQJdTJfaV9kYXRhWzE1XTsKIAl9IGlfdTE7CiAJX191MzIJaV9mbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKaW5kZXggYTYyNzIwYS4uYWIwYjg1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTE0NCw2ICsxNDQsNyBAQAogCQkJCWFjcGlfc2l6ZSBsZW5ndGgpOwogCiB2b2lkIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqIGxvZ2ljYWxfYWRkcmVzcywgYWNwaV9zaXplIHNpemUpOwordm9pZCBlYXJseV9hY3BpX29zX3VubWFwX21lbW9yeSh2b2lkIF9faW9tZW0gKiB2aXJ0LCBhY3BpX3NpemUgc2l6ZSk7CiAKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCBjOGU4Y2Y0Li5jYzQwMTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC0xMzAsNiArMTMwLDEwIEBACiAJCSAgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqb3V0X3RhYmxlX2hlYWRlcik7CiAKIGFjcGlfc3RhdHVzCithY3BpX2dldF90YWJsZV93aXRoX3NpemUoYWNwaV9zdHJpbmcgc2lnbmF0dXJlLAorCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSwKKwkgICAgICAgYWNwaV9zaXplICp0Ymxfc2l6ZSk7CithY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGUoYWNwaV9zdHJpbmcgc2lnbmF0dXJlLAogCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDQwNTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaAotICoKLSAqIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFMzQzI0MTIgSUlTIHJlZ2lzdGVyIGRlZmluaXRpb24KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0gKLSNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0gKLQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTgkJCSgweDAwKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRAkJCSgweDA0KQotI2RlZmluZSBTM0MyNDEyX0lJU0ZJQwkJCSgweDA4KQotI2RlZmluZSBTM0MyNDEyX0lJU1BTUgkJCSgweDBDKQotI2RlZmluZSBTM0MyNDEyX0lJU1RYRAkJCSgweDEwKQotI2RlZmluZSBTM0MyNDEyX0lJU1JYRAkJCSgweDE0KQotCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgJCSgxIDw8IDExKQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRU1QVFkJKDEgPDwgMTApCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRklGT19FTVBUWQkoMSA8PCA5KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRlVMTAkoMSA8PCA4KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRlVMTAkoMSA8PCA3KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRQkoMSA8PCA2KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRQkoMSA8PCA1KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFCSgxIDw8IDQpCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0UJKDEgPDwgMykKLSNkZWZpbmUgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFCSgxIDw8IDIpCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRQkoMSA8PCAxKQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFCSgxIDw8IDApCi0KLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMCSgwIDw8IDEwKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfRVhURVJOQUwJKDEgPDwgMTApCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NMQVZFCQkoMiA8PCAxMCkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0sJKDMgPDwgMTApCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZCSgwIDw8IDgpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZCSgxIDw8IDgpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWAkoMiA8PCA4KQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0sJKDMgPDwgOCkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfTExPVwkJKDAgPDwgNykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfUkxPVwkJKDEgPDwgNykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0lJUwkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01TQgkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0xTQgkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01BU0sJCSgzIDw8IDUpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlMJKDAgPDwgMykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS181MTJGUwkoMSA8PCAzKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzM4NEZTCSgyIDw8IDMpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfNzY4RlMJKDMgPDwgMykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS19NQVNLIAkoMyA8PCAzKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzMyRlMJKDAgPDwgMSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS180OEZTCSgxIDw8IDEpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0JDTEtfMTZGUwkoMiA8PCAxKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzI0RlMJKDMgPDwgMSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS19NQVNLCSgzIDw8IDEpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EXzhCSVQJCSgxIDw8IDApCi0KLSNkZWZpbmUgUzNDMjQxMl9JSVNQU1JfUFNSRU4JCSgxIDw8IDE1KQotCi0jZGVmaW5lIFMzQzI0MTJfSUlTRklDX1RYRkxVU0gJCSgxIDw8IDE1KQotI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19SWEZMVVNICQkoMSA8PCA3KQotI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19UWENPVU5UKHgpCSgoKHgpID4+ICA4KSAmIDB4ZikKLSNkZWZpbmUgUzNDMjQxMl9JSVNGSUNfUlhDT1VOVCh4KQkoKCh4KSA+PiAgMCkgJiAweGYpCi0KLQotCi0jZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjEwNzY2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qIGlkZS5oOiBGUlYgSURFIGRlY2xhcmF0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKaW5kZXggZTUxY2E2Ny4uNTdjM2Q0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaApAQCAtNTQsNSArNTQsOCBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaCBiL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKaW5kZXggYWZiMzM5Ni4uZjMwNTgzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCBiODQ3NzQxLi40ZDNlNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0xMTcsOSArMTE3LDkgQEAKIHN0cnVjdCBmbG9jayB7CiAJc2hvcnQJbF90eXBlOwogCXNob3J0CWxfd2hlbmNlOwotCW9mZl90CWxfc3RhcnQ7Ci0Jb2ZmX3QJbF9sZW47Ci0JcGlkX3QJbF9waWQ7CisJX19rZXJuZWxfb2ZmX3QJbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdAlsX2xlbjsKKwlfX2tlcm5lbF9waWRfdAlsX3BpZDsKIAlfX0FSQ0hfRkxPQ0tfUEFECiB9OwogI2VuZGlmCkBAIC0xNDAsOSArMTQwLDkgQEAKIHN0cnVjdCBmbG9jazY0IHsKIAlzaG9ydCAgbF90eXBlOwogCXNob3J0ICBsX3doZW5jZTsKLQlsb2ZmX3QgbF9zdGFydDsKLQlsb2ZmX3QgbF9sZW47Ci0JcGlkX3QgIGxfcGlkOworCV9fa2VybmVsX2xvZmZfdCBsX3N0YXJ0OworCV9fa2VybmVsX2xvZmZfdCBsX2xlbjsKKwlfX2tlcm5lbF9waWRfdCAgbF9waWQ7CiAJX19BUkNIX0ZMT0NLNjRfUEFECiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaAppbmRleCBiMGU2M2M2Li4wMGY0NWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKQEAgLTgwLDQgKzgwLDU2IEBACiAjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBleHRlcm4gUEVSX0NQVV9BVFRSSUJVVEVTIFwKIAkJCQkJX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X3ZhcihuYW1lKQogCisvKgorICogT3B0aW9uYWwgbWV0aG9kcyBmb3Igb3B0aW1pemVkIG5vbi1sdmFsdWUgcGVyLWNwdSB2YXJpYWJsZSBhY2Nlc3MuCisgKgorICogQHZhciBjYW4gYmUgYSBwZXJjcHUgdmFyaWFibGUgb3IgYSBmaWVsZCBvZiBpdCBhbmQgaXRzIHNpemUgc2hvdWxkCisgKiBlcXVhbCBjaGFyLCBpbnQgb3IgbG9uZy4gIHBlcmNwdV9yZWFkKCkgZXZhbHVhdGVzIHRvIGEgbHZhbHVlIGFuZAorICogYWxsIG90aGVycyB0byB2b2lkLgorICoKKyAqIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXRvbWljIHcuci50LiBwcmVlbXB0aW9uLgorICogVGhlIGdlbmVyaWMgdmVyc2lvbnMgdXNlIHBsYWluIGdldC9wdXRfY3B1X3ZhcigpLiAgQXJjaHMgYXJlCisgKiBlbmNvdXJhZ2VkIHRvIGltcGxlbWVudCBzaW5nbGUtaW5zdHJ1Y3Rpb24gYWx0ZXJuYXRpdmVzIHdoaWNoIGRvbid0CisgKiByZXF1aXJlIHByZWVtcHRpb24gcHJvdGVjdGlvbi4KKyAqLworI2lmbmRlZiBwZXJjcHVfcmVhZAorIyBkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQkJCQkJCVwKKyAgKHsJCQkJCQkJCQlcCisJdHlwZW9mKHBlcl9jcHVfdmFyKHZhcikpIF9fdG1wX3Zhcl9fOwkJCQlcCisJX190bXBfdmFyX18gPSBnZXRfY3B1X3Zhcih2YXIpOwkJCQkJXAorCXB1dF9jcHVfdmFyKHZhcik7CQkJCQkJXAorCV9fdG1wX3Zhcl9fOwkJCQkJCQlcCisgIH0pCisjZW5kaWYKKworI2RlZmluZSBfX3BlcmNwdV9nZW5lcmljX3RvX29wKHZhciwgdmFsLCBvcCkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlnZXRfY3B1X3Zhcih2YXIpIG9wIHZhbDsJCQkJCVwKKwlwdXRfY3B1X3Zhcih2YXIpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgcGVyY3B1X3dyaXRlCisjIGRlZmluZSBwZXJjcHVfd3JpdGUodmFyLCB2YWwpCQlfX3BlcmNwdV9nZW5lcmljX3RvX29wKHZhciwgKHZhbCksID0pCisjZW5kaWYKKworI2lmbmRlZiBwZXJjcHVfYWRkCisjIGRlZmluZSBwZXJjcHVfYWRkKHZhciwgdmFsKQkJX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsICh2YWwpLCArPSkKKyNlbmRpZgorCisjaWZuZGVmIHBlcmNwdV9zdWIKKyMgZGVmaW5lIHBlcmNwdV9zdWIodmFyLCB2YWwpCQlfX3BlcmNwdV9nZW5lcmljX3RvX29wKHZhciwgKHZhbCksIC09KQorI2VuZGlmCisKKyNpZm5kZWYgcGVyY3B1X2FuZAorIyBkZWZpbmUgcGVyY3B1X2FuZCh2YXIsIHZhbCkJCV9fcGVyY3B1X2dlbmVyaWNfdG9fb3AodmFyLCAodmFsKSwgJj0pCisjZW5kaWYKKworI2lmbmRlZiBwZXJjcHVfb3IKKyMgZGVmaW5lIHBlcmNwdV9vcih2YXIsIHZhbCkJCV9fcGVyY3B1X2dlbmVyaWNfdG9fb3AodmFyLCAodmFsKSwgfD0pCisjZW5kaWYKKworI2lmbmRlZiBwZXJjcHVfeG9yCisjIGRlZmluZSBwZXJjcHVfeG9yKHZhciwgdmFsKQkJX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsICh2YWwpLCBePSkKKyNlbmRpZgorCiAjZW5kaWYgLyogX0FTTV9HRU5FUklDX1BFUkNQVV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCmluZGV4IDc5YTdmZjkuLjRjZTQ4ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKQEAgLTksNyArOSw3IEBACiBleHRlcm4gY2hhciBfX2luaXRfYmVnaW5bXSwgX19pbml0X2VuZFtdOwogZXh0ZXJuIGNoYXIgX3Npbml0dGV4dFtdLCBfZWluaXR0ZXh0W107CiBleHRlcm4gY2hhciBfZW5kW107Ci1leHRlcm4gY2hhciBfX3Blcl9jcHVfc3RhcnRbXSwgX19wZXJfY3B1X2VuZFtdOworZXh0ZXJuIGNoYXIgX19wZXJfY3B1X2xvYWRbXSwgX19wZXJfY3B1X3N0YXJ0W10sIF9fcGVyX2NwdV9lbmRbXTsKIGV4dGVybiBjaGFyIF9fa3Byb2Jlc190ZXh0X3N0YXJ0W10sIF9fa3Byb2Jlc190ZXh0X2VuZFtdOwogZXh0ZXJuIGNoYXIgX19pbml0ZGF0YV9iZWdpbltdLCBfX2luaXRkYXRhX2VuZFtdOwogZXh0ZXJuIGNoYXIgX19zdGFydF9yb2RhdGFbXSwgX19lbmRfcm9kYXRhW107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCmluZGV4IDk2OTU3MDEuLjM1NzUyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FSQ0hfU0lfVUlEX1QKLSNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCXVpZF90CisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAlfX2tlcm5lbF91aWQzMl90CiAjZW5kaWYKIAogLyoKQEAgLTQ3LDEzICs0NywxMyBAQAogCiAJCS8qIGtpbGwoKSAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCX0gX2tpbGw7CiAKIAkJLyogUE9TSVguMWIgdGltZXJzICovCiAJCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJX19rZXJuZWxfdGltZXJfdCBfdGlkOwkvKiB0aW1lciBpZCAqLwogCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwogCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKIAkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KQEAgLTYyLDE4ICs2MiwxOCBAQAogCiAJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJc2lndmFsX3QgX3NpZ3ZhbDsKIAkJfSBfcnQ7CiAKIAkJLyogU0lHQ0hMRCAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF9jbG9ja190IF91dGltZTsKKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3N0aW1lOwogCQl9IF9zaWdjaGxkOwogCiAJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCmluZGV4IDYxMjlkNjguLjNiNGZiM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApAQCAtMSw4ICsxLDkgQEAKICNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKICNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBjNjFmYWIxLi5hNjU0ZDcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC04MCw2ICs4MCwxMSBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCisJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkKIApAQCAtMzA5LDE1ICszMTQsNyBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKLQkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAotCS4gPSBBTElHTig4KTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CisJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKQEAgLTQzMCwxMiArNDI3LDU5IEBACiAgIAkqKC5pbml0Y2FsbDcuaW5pdCkJCQkJCQlcCiAgIAkqKC5pbml0Y2FsbDdzLmluaXQpCiAKLSNkZWZpbmUgUEVSQ1BVKGFsaWduKQkJCQkJCQlcCi0JLiA9IEFMSUdOKGFsaWduKTsJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X3N0YXJ0KSA9IC47CQkJCVwKLQkuZGF0YS5wZXJjcHUgIDogQVQoQUREUiguZGF0YS5wZXJjcHUpIC0gTE9BRF9PRkZTRVQpIHsJCVwKKy8qKgorICogUEVSQ1BVX1ZBRERSIC0gZGVmaW5lIG91dHB1dCBzZWN0aW9uIGZvciBwZXJjcHUgYXJlYQorICogQHZhZGRyOiBleHBsaWNpdCBiYXNlIGFkZHJlc3MgKG9wdGlvbmFsKQorICogQHBoZHI6IGRlc3RpbmF0aW9uIFBIRFIgKG9wdGlvbmFsKQorICoKKyAqIE1hY3JvIHdoaWNoIGV4cGFuZHMgdG8gb3V0cHV0IHNlY3Rpb24gZm9yIHBlcmNwdSBhcmVhLiAgSWYgQHZhZGRyCisgKiBpcyBub3QgYmxhbmssIGl0IHNwZWNpZmllcyBleHBsaWNpdCBiYXNlIGFkZHJlc3MgYW5kIGFsbCBwZXJjcHUKKyAqIHN5bWJvbHMgd2lsbCBiZSBvZmZzZXQgZnJvbSB0aGUgZ2l2ZW4gYWRkcmVzcy4gIElmIGJsYW5rLCBAdmFkZHIKKyAqIGFsd2F5cyBlcXVhbHMgQGxhZGRyICsgTE9BRF9PRkZTRVQuCisgKgorICogQHBoZHIgZGVmaW5lcyB0aGUgb3V0cHV0IFBIRFIgdG8gdXNlIGlmIG5vdCBibGFuay4gIEJlIHdhcm5lZCB0aGF0CisgKiBvdXRwdXQgUEhEUiBpcyBzdGlja3kuICBJZiBAcGhkciBpcyBzcGVjaWZpZWQsIHRoZSBuZXh0IG91dHB1dAorICogc2VjdGlvbiBpbiB0aGUgbGlua2VyIHNjcmlwdCB3aWxsIGdvIHRoZXJlIHRvby4gIEBwaGRyIHNob3VsZCBoYXZlCisgKiBhIGxlYWRpbmcgY29sb24uCisgKgorICogTm90ZSB0aGF0IHRoaXMgbWFjcm9zIGRlZmluZXMgX19wZXJfY3B1X2xvYWQgYXMgYW4gYWJzb2x1dGUgc3ltYm9sLgorICogSWYgdGhlcmUgaXMgbm8gbmVlZCB0byBwdXQgdGhlIHBlcmNwdSBzZWN0aW9uIGF0IGEgcHJlZGV0ZXJtaW5lZAorICogYWRkcmVzcywgdXNlIFBFUkNQVSgpLgorICovCisjZGVmaW5lIFBFUkNQVV9WQUREUih2YWRkciwgcGhkcikJCQkJCVwKKwlWTUxJTlVYX1NZTUJPTChfX3Blcl9jcHVfbG9hZCkgPSAuOwkJCQlcCisJLmRhdGEucGVyY3B1IHZhZGRyIDogQVQoVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2xvYWQpCQlcCisJCQkJLSBMT0FEX09GRlNFVCkgewkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X3N0YXJ0KSA9IC47CQkJXAorCQkqKC5kYXRhLnBlcmNwdS5maXJzdCkJCQkJCVwKIAkJKiguZGF0YS5wZXJjcHUucGFnZV9hbGlnbmVkKQkJCQlcCiAJCSooLmRhdGEucGVyY3B1KQkJCQkJCVwKIAkJKiguZGF0YS5wZXJjcHUuc2hhcmVkX2FsaWduZWQpCQkJCVwKLQl9CQkJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2VuZCkgPSAuOworCQlWTUxJTlVYX1NZTUJPTChfX3Blcl9jcHVfZW5kKSA9IC47CQkJXAorCX0gcGhkcgkJCQkJCQkJXAorCS4gPSBWTUxJTlVYX1NZTUJPTChfX3Blcl9jcHVfbG9hZCkgKyBTSVpFT0YoLmRhdGEucGVyY3B1KTsKKworLyoqCisgKiBQRVJDUFUgLSBkZWZpbmUgb3V0cHV0IHNlY3Rpb24gZm9yIHBlcmNwdSBhcmVhLCBzaW1wbGUgdmVyc2lvbgorICogQGFsaWduOiByZXF1aXJlZCBhbGlnbm1lbnQKKyAqCisgKiBBbGlnbiB0byBAYWxpZ24gYW5kIG91dHB1dHMgb3V0cHV0IHNlY3Rpb24gZm9yIHBlcmNwdSBhcmVhLiAgVGhpcworICogbWFjcm8gZG9lc24ndCBtYW5pdXBsYXRlIEB2YWRkciBvciBAcGhkciBhbmQgX19wZXJfY3B1X2xvYWQgYW5kCisgKiBfX3Blcl9jcHVfc3RhcnQgd2lsbCBiZSBpZGVudGljYWwuCisgKgorICogVGhpcyBtYWNybyBpcyBlcXVpdmFsZW50IHRvIEFMSUdOKGFsaWduKTsgUEVSQ1BVX1ZBRERSKCAsICkgZXhjZXB0CisgKiB0aGF0IF9fcGVyX2NwdV9sb2FkIGlzIGRlZmluZWQgYXMgYSByZWxhdGl2ZSBzeW1ib2wgYWdhaW5zdAorICogLmRhdGEucGVyY3B1IHdoaWNoIGlzIHJlcXVpcmVkIGZvciByZWxvY2F0YWJsZSB4ODZfMzIKKyAqIGNvbmZpZ3VyYXRpb24uCisgKi8KKyNkZWZpbmUgUEVSQ1BVKGFsaWduKQkJCQkJCQlcCisJLiA9IEFMSUdOKGFsaWduKTsJCQkJCQlcCisJLmRhdGEucGVyY3B1CTogQVQoQUREUiguZGF0YS5wZXJjcHUpIC0gTE9BRF9PRkZTRVQpIHsJXAorCQlWTUxJTlVYX1NZTUJPTChfX3Blcl9jcHVfbG9hZCkgPSAuOwkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X3N0YXJ0KSA9IC47CQkJXAorCQkqKC5kYXRhLnBlcmNwdS5maXJzdCkJCQkJCVwKKwkJKiguZGF0YS5wZXJjcHUucGFnZV9hbGlnbmVkKQkJCQlcCisJCSooLmRhdGEucGVyY3B1KQkJCQkJCVwKKwkJKiguZGF0YS5wZXJjcHUuc2hhcmVkX2FsaWduZWQpCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2VuZCkgPSAuOwkJCVwKKwl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaAppbmRleCA5YTBlMjAwLi5iZTdlZDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX00zMlJfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oIGIvaW5jbHVkZS9hc20tbTMyci9zd2FiLmgKaW5kZXggOTc5NzNlMS4uNTRkYWIwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zd2FiLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BU01fTTMyUl9TV0FCX0gKICNkZWZpbmUgX0FTTV9NMzJSX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWRjZGQ5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKiBNTjEwMzAwIEFyY2gtc3BlY2lmaWMgSURFIGNvZGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICogLSBEZXJpdmVkIGZyb20gaW5jbHVkZS9hc20taTM4Ni9pZGUuaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfQVNNX0lERV9ICi0jZGVmaW5lIF9BU01fSURFX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9pbnRjdGwtcmVncy5oPgotCi0jdW5kZWYgU1VQUE9SVF9TTE9XX0RBVEFfUE9SVFMKLSNkZWZpbmUgU1VQUE9SVF9TTE9XX0RBVEFfUE9SVFMgMAotCi0jdW5kZWYgU1VQUE9SVF9WTEJfU1lOQwotI2RlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDAKLQotLyoKLSAqIHNvbWUgYml0cyBuZWVkZWQgZm9yIHBhcnRzIG9mIHRoZSBJREUgc3Vic3lzdGVtIHRvIGNvbXBpbGUKLSAqLwotI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsIGFkZHIsIG4pIFwKLQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotI2RlZmluZSBfX2lkZV9tbV9pbnNsKHBvcnQsIGFkZHIsIG4pIFwKLQlpbnNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKSBcCi0Jb3V0c3coKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX291dHNsKHBvcnQsIGFkZHIsIG4pIFwKLQlvdXRzbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaAppbmRleCBjZDljYzVjLi4wNTE3YjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKQEAgLTEyMSw0ICsxMjEsOSBAQAogCiAjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKIAorc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7Cit9CisKICNlbmRpZiAvKiBfQVNNX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaAppbmRleCA4MGFmOWM0Li5mYjVkYWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oCmluZGV4IDQ1MDRkMWIuLmJkODE4YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9BU01fU1dBQl9ICiAjZGVmaW5lIF9BU01fU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWZkZWYgX19HTlVDX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vYWVzLmggYi9pbmNsdWRlL2NyeXB0by9hZXMuaAppbmRleCA2NTZhNGM2Li43NTI0YmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9hZXMuaAorKysgYi9pbmNsdWRlL2NyeXB0by9hZXMuaApAQCAtMTcsMTAgKzE3LDE0IEBACiAjZGVmaW5lIEFFU19NQVhfS0VZTEVOR1RICSgxNSAqIDE2KQogI2RlZmluZSBBRVNfTUFYX0tFWUxFTkdUSF9VMzIJKEFFU19NQVhfS0VZTEVOR1RIIC8gc2l6ZW9mKHUzMikpCiAKKy8qCisgKiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZpcnN0IHR3byBmaWVsZHMgYXJlIDE2LWJ5dGUgYWxpZ25lZAorICogcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdHJ1Y3R1cmUsIGkuZS4sIGRvbid0IG1vdmUgdGhlbSEKKyAqLwogc3RydWN0IGNyeXB0b19hZXNfY3R4IHsKLQl1MzIga2V5X2xlbmd0aDsKIAl1MzIga2V5X2VuY1tBRVNfTUFYX0tFWUxFTkdUSF9VMzJdOwogCXUzMiBrZXlfZGVjW0FFU19NQVhfS0VZTEVOR1RIX1UzMl07CisJdTMyIGtleV9sZW5ndGg7CiB9OwogCiBleHRlcm4gY29uc3QgdTMyIGNyeXB0b19mdF90YWJbNF1bMjU2XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmggYi9pbmNsdWRlL2NyeXB0by9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9jb21wcmVzcy5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29tcHJlc3M6IENvbXByZXNzaW9uIGFsZ29yaXRobXMgdW5kZXIgdGhlIGNyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9DUllQVE9fQ09NUFJFU1NfSAorI2RlZmluZSBfQ1JZUFRPX0NPTVBSRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCisKK3N0cnVjdCBjb21wX3JlcXVlc3QgeworCWNvbnN0IHZvaWQgKm5leHRfaW47CQkvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKwl2b2lkICpuZXh0X291dDsJCQkvKiBuZXh0IG91dHB1dCBieXRlICovCisJdW5zaWduZWQgaW50IGF2YWlsX2luOwkJLyogYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KKwl1bnNpZ25lZCBpbnQgYXZhaWxfb3V0OwkJLyogYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfb3V0ICovCit9OworCitlbnVtIHpsaWJfY29tcF9wYXJhbXMgeworCVpMSUJfQ09NUF9MRVZFTCA9IDEsCQkvKiBlLmcuIFpfREVGQVVMVF9DT01QUkVTU0lPTiAqLworCVpMSUJfQ09NUF9NRVRIT0QsCQkvKiBlLmcuIFpfREVGTEFURUQgKi8KKwlaTElCX0NPTVBfV0lORE9XQklUUywJCS8qIGUuZy4gTUFYX1dCSVRTICovCisJWkxJQl9DT01QX01FTUxFVkVMLAkJLyogZS5nLiBERUZfTUVNX0xFVkVMICovCisJWkxJQl9DT01QX1NUUkFURUdZLAkJLyogZS5nLiBaX0RFRkFVTFRfU1RSQVRFR1kgKi8KKwlfX1pMSUJfQ09NUF9NQVgsCit9OworCisjZGVmaW5lIFpMSUJfQ09NUF9NQVgJKF9fWkxJQl9DT01QX01BWCAtIDEpCisKKworZW51bSB6bGliX2RlY29tcF9wYXJhbXMgeworCVpMSUJfREVDT01QX1dJTkRPV0JJVFMgPSAxLAkvKiBlLmcuIERFRl9XQklUUyAqLworCV9fWkxJQl9ERUNPTVBfTUFYLAorfTsKKworI2RlZmluZSBaTElCX0RFQ09NUF9NQVgJKF9fWkxJQl9ERUNPTVBfTUFYIC0gMSkKKworCitzdHJ1Y3QgY3J5cHRvX3Bjb21wIHsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSBiYXNlOworfTsKKworc3RydWN0IHBjb21wX2FsZyB7CisJaW50ICgqY29tcHJlc3Nfc2V0dXApKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJICAgICAgdW5zaWduZWQgaW50IGxlbik7CisJaW50ICgqY29tcHJlc3NfaW5pdCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKTsKKwlpbnQgKCpjb21wcmVzc191cGRhdGUpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmNvbXByZXNzX2ZpbmFsKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmRlY29tcHJlc3Nfc2V0dXApKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJCXVuc2lnbmVkIGludCBsZW4pOworCWludCAoKmRlY29tcHJlc3NfaW5pdCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKTsKKwlpbnQgKCpkZWNvbXByZXNzX3VwZGF0ZSkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmRlY29tcHJlc3NfZmluYWwpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpOworCisJc3RydWN0IGNyeXB0b19hbGcgYmFzZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgY3J5cHRvX3Bjb21wICpjcnlwdG9fYWxsb2NfcGNvbXAoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAorCQkJCQkgICAgICAgdTMyIG1hc2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fcGNvbXBfdGZtKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gJnRmbS0+YmFzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19mcmVlX3Bjb21wKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwljcnlwdG9fZGVzdHJveV90Zm0odGZtLCBjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY29tcF9hbGcgKl9fY3J5cHRvX3Bjb21wX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXJldHVybiBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3QgcGNvbXBfYWxnLCBiYXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNvbXBfYWxnICpjcnlwdG9fcGNvbXBfYWxnKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gX19jcnlwdG9fcGNvbXBfYWxnKGNyeXB0b19wY29tcF90Zm0odGZtKS0+X19jcnRfYWxnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJdm9pZCAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX3NldHVwKHRmbSwgcGFyYW1zLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3NfaW5pdCh0Zm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc191cGRhdGUodGZtLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3NfZmluYWwodGZtLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgdm9pZCAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3Nfc2V0dXAodGZtLCBwYXJhbXMsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3NfaW5pdCh0Zm0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc191cGRhdGUodGZtLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3NfZmluYWwodGZtLCByZXEpOworfQorCisjZW5kaWYJLyogX0NSWVBUT19DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaCBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZmE3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogU29mdHdhcmUgYXN5bmMgY3J5cHRvIGRhZW1vbgorICovCisKKyNpZm5kZWYgX0NSWVBUT19DUllQVF9ICisjZGVmaW5lIF9DUllQVE9fQ1JZUFRfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK3N0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciB7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyIGJhc2U7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqX19jcnlwdGRfYWJsa2NpcGhlcl9jYXN0KAorCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtKQoreworCXJldHVybiAoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICopdGZtOworfQorCisvKiBhbGdfbmFtZSBzaG91bGQgYmUgYWxnb3JpdGhtIHRvIGJlIGNyeXB0ZC1lZCAqLworc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcihjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJCQkJCSAgdTMyIHR5cGUsIHUzMiBtYXNrKTsKK3N0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSk7Cit2b2lkIGNyeXB0ZF9mcmVlX2FibGtjaXBoZXIoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NyeXB0b193cS5oIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkMjUyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0b193cS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBDUllQVE9fV1FfSAorI2RlZmluZSBDUllQVE9fV1FfSAorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2NyeXB0b193cTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vaGFzaC5oIGIvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCmluZGV4IGQ3OTdlMTEuLmQ1NmJiNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3J5cHRvL2hhc2guaAorKysgYi9pbmNsdWRlL2NyeXB0by9oYXNoLmgKQEAgLTIzMSw2ICsyMzEsMTEgQEAKIAlyZXR1cm4gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKGNyeXB0b19zaGFzaF90Zm0odGZtKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19zaGFzaF9ibG9ja3NpemUoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoY3J5cHRvX3NoYXNoX3RmbSh0Zm0pKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2hhc2hfYWxnICpfX2NyeXB0b19zaGFzaF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGFsZywgc3RydWN0IHNoYXNoX2FsZywgYmFzZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhhODg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29tcHJlc3M6IENvbXByZXNzaW9uIGFsZ29yaXRobXMgdW5kZXIgdGhlIGNyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSAorI2RlZmluZSBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0gKKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCitleHRlcm4gaW50IGNyeXB0b19yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpOworZXh0ZXJuIGludCBjcnlwdG9fdW5yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpOworCisjZW5kaWYJLyogX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm0uaCBiL2luY2x1ZGUvZHJtL2RybS5oCmluZGV4IDhlNzczNTcuLjdjYjUwYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybS5oCkBAIC0zNiw4ICszNiw3IEBACiAjaWZuZGVmIF9EUk1fSF8KICNkZWZpbmUgX0RSTV9IXwogCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW9jdGwuaD4JCS8qIEZvciBfSU8qIG1hY3JvcyAqLwogI2RlZmluZSBEUk1fSU9DVExfTlIobikJCV9JT0NfTlIobikKICNkZWZpbmUgRFJNX0lPQ19WT0lECQlfSU9DX05PTkUKQEAgLTQ5Nyw4ICs0OTYsOCBAQAogICogXHNhIGRybU1vZGVzZXRDdGwoKS4KICAqLwogc3RydWN0IGRybV9tb2Rlc2V0X2N0bCB7Ci0JdWludDMyX3QgY3J0YzsKLQl1aW50MzJfdCBjbWQ7CisJX191MzIgY3J0YzsKKwlfX3UzMiBjbWQ7CiB9OwogCiAvKioKQEAgLTU3NCwyOSArNTczLDI5IEBACiAvKiogRFJNX0lPQ1RMX0dFTV9DTE9TRSBpb2N0bCBhcmd1bWVudCB0eXBlICovCiBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgb2JqZWN0IHRvIGJlIGNsb3NlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiAvKiogRFJNX0lPQ1RMX0dFTV9GTElOSyBpb2N0bCBhcmd1bWVudCB0eXBlICovCiBzdHJ1Y3QgZHJtX2dlbV9mbGluayB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBuYW1lZCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogUmV0dXJuZWQgZ2xvYmFsIG5hbWUgKi8KLQl1aW50MzJfdCBuYW1lOworCV9fdTMyIG5hbWU7CiB9OwogCiAvKiogRFJNX0lPQ1RMX0dFTV9PUEVOIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX29wZW4gewogCS8qKiBOYW1lIG9mIG9iamVjdCBiZWluZyBvcGVuZWQgKi8KLQl1aW50MzJfdCBuYW1lOworCV9fdTMyIG5hbWU7CiAKIAkvKiogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBSZXR1cm5lZCBzaXplIG9mIHRoZSBvYmplY3QgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiB9OwogCiAjaW5jbHVkZSAiZHJtX21vZGUuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCBlNWY0YWU5Li5jMTlhOTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC03NTgsNiArNzU4LDggQEAKIAogCWludCAoKnByb2NfaW5pdCkoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogCXZvaWQgKCpwcm9jX2NsZWFudXApKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwlpbnQgKCpkZWJ1Z2ZzX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwl2b2lkICgqZGVidWdmc19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAKIAkvKioKIAkgKiBEcml2ZXItc3BlY2lmaWMgY29uc3RydWN0b3IgZm9yIGRybV9nZW1fb2JqZWN0cywgdG8gc2V0IHVwCkBAIC03OTMsNiArNzk1LDQ4IEBACiAjZGVmaW5lIERSTV9NSU5PUl9DT05UUk9MIDIKICNkZWZpbmUgRFJNX01JTk9SX1JFTkRFUiAzCiAKKworLyoqCisgKiBkZWJ1Z2ZzIG5vZGUgbGlzdC4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGRlYnVnZnMgZmlsZSB0bworICogYmUgY3JlYXRlZCBieSB0aGUgZHJtIGNvcmUKKyAqLworc3RydWN0IGRybV9kZWJ1Z2ZzX2xpc3QgeworCWNvbnN0IGNoYXIgKm5hbWU7IC8qKiBmaWxlIG5hbWUgKi8KKwlpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUqLCB2b2lkKik7IC8qKiBzaG93IGNhbGxiYWNrICovCisJdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KK307CisKKy8qKgorICogZGVidWdmcyBub2RlIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGRlYnVnZnMgZmlsZS4KKyAqLworc3RydWN0IGRybV9kZWJ1Z2ZzX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKKwlzdHJ1Y3QgZHJtX2RlYnVnZnNfbGlzdCAqZGVidWdmc19lbnQ7CisJc3RydWN0IGRlbnRyeSAqZGVudDsKK307CisKKy8qKgorICogSW5mbyBmaWxlIGxpc3QgZW50cnkuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBkZWJ1Z2ZzIG9yIHByb2MgZmlsZSB0bworICogYmUgY3JlYXRlZCBieSB0aGUgZHJtIGNvcmUKKyAqLworc3RydWN0IGRybV9pbmZvX2xpc3QgeworCWNvbnN0IGNoYXIgKm5hbWU7IC8qKiBmaWxlIG5hbWUgKi8KKwlpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUqLCB2b2lkKik7IC8qKiBzaG93IGNhbGxiYWNrICovCisJdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KKwl2b2lkICpkYXRhOworfTsKKworLyoqCisgKiBkZWJ1Z2ZzIG5vZGUgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgZGVidWdmcyBmaWxlLgorICovCitzdHJ1Y3QgZHJtX2luZm9fbm9kZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yOworCXN0cnVjdCBkcm1faW5mb19saXN0ICppbmZvX2VudDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50OworfTsKKwogLyoqCiAgKiBEUk0gbWlub3Igc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgZHJtIG1pbm9yIG51bWJlci4KICAqLwpAQCAtODAyLDcgKzg0NiwxMiBAQAogCWRldl90IGRldmljZTsJCQkvKio8IERldmljZSBudW1iZXIgZm9yIG1rbm9kICovCiAJc3RydWN0IGRldmljZSBrZGV2OwkJLyoqPCBMaW51eCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGV2X3Jvb3Q7ICAvKio8IHByb2MgZGlyZWN0b3J5IGVudHJ5ICovCisKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfcm9vdDsgIC8qKjwgcHJvYyBkaXJlY3RvcnkgZW50cnkgKi8KKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSBwcm9jX25vZGVzOworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSBkZWJ1Z2ZzX25vZGVzOworCiAJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcjsgLyogY3VycmVudGx5IGFjdGl2ZSBtYXN0ZXIgZm9yIHRoaXMgbm9kZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbWFzdGVyX2xpc3Q7CiAJc3RydWN0IGRybV9tb2RlX2dyb3VwIG1vZGVfZ3JvdXA7CkBAIC0xMjU4LDYgKzEzMDcsNyBAQAogCiBleHRlcm4gc3RydWN0IGNsYXNzICpkcm1fY2xhc3M7CiBleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcm1fcHJvY19yb290OworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmRybV9kZWJ1Z2ZzX3Jvb3Q7CiAKIGV4dGVybiBzdHJ1Y3QgaWRyIGRybV9taW5vcnNfaWRyOwogCkBAIC0xMjY4LDYgKzEzMTgsMzEgQEAKIAkJCSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QpOwogZXh0ZXJuIGludCBkcm1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QpOwogCisJCQkJLyogRGVidWdmcyBzdXBwb3J0ICovCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCitleHRlcm4gaW50IGRybV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwKKwkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpyb290KTsKK2V4dGVybiBpbnQgZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywgaW50IGNvdW50LAorCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitleHRlcm4gaW50IGRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqZmlsZXMsIGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKK2V4dGVybiBpbnQgZHJtX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisjZW5kaWYKKworCQkJCS8qIEluZm8gZmlsZSBzdXBwb3J0ICovCitleHRlcm4gaW50IGRybV9uYW1lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZHJtX3ZtX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZHJtX3F1ZXVlc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGRybV9idWZzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZHJtX3ZibGFua19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGRybV9jbGllbnRzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkKiBkYXRhKTsKK2V4dGVybiBpbnQgZHJtX2dlbV9uYW1lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQqIGRhdGEpOworCisjaWYgRFJNX0RFQlVHX0NPREUKK2V4dGVybiBpbnQgZHJtX3ZtYV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CisjZW5kaWYKKwogCQkJCS8qIFNjYXR0ZXIgR2F0aGVyIFN1cHBvcnQgKGRybV9zY2F0dGVyLmgpICovCiBleHRlcm4gdm9pZCBkcm1fc2dfY2xlYW51cChzdHJ1Y3QgZHJtX3NnX21lbSAqIGVudHJ5KTsKIGV4dGVybiBpbnQgZHJtX3NnX2FsbG9jX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAppbmRleCA2MDFkMmJkLi5hZTMwNGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKQEAgLTI3LDExICsyNyw4IEBACiAjaWZuZGVmIF9EUk1fTU9ERV9ICiAjZGVmaW5lIF9EUk1fTU9ERV9ICiAKLSNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfS0VSTkVMKQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgRFJNX0RJU1BMQVlfSU5GT19MRU4JMzIKICNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9OQU1FX0xFTgkzMgpAQCAtODEsNDEgKzc4LDQxIEBACiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PTgkxCiAKIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyB7Ci0JdWludDMyX3QgY2xvY2s7Ci0JdWludDE2X3QgaGRpc3BsYXksIGhzeW5jX3N0YXJ0LCBoc3luY19lbmQsIGh0b3RhbCwgaHNrZXc7Ci0JdWludDE2X3QgdmRpc3BsYXksIHZzeW5jX3N0YXJ0LCB2c3luY19lbmQsIHZ0b3RhbCwgdnNjYW47CisJX191MzIgY2xvY2s7CisJX191MTYgaGRpc3BsYXksIGhzeW5jX3N0YXJ0LCBoc3luY19lbmQsIGh0b3RhbCwgaHNrZXc7CisJX191MTYgdmRpc3BsYXksIHZzeW5jX3N0YXJ0LCB2c3luY19lbmQsIHZ0b3RhbCwgdnNjYW47CiAKLQl1aW50MzJfdCB2cmVmcmVzaDsgLyogdmVydGljYWwgcmVmcmVzaCAqIDEwMDAgKi8KKwlfX3UzMiB2cmVmcmVzaDsgLyogdmVydGljYWwgcmVmcmVzaCAqIDEwMDAgKi8KIAotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgdHlwZTsKIAljaGFyIG5hbWVbRFJNX0RJU1BMQVlfTU9ERV9MRU5dOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzIHsKLQl1aW50NjRfdCBmYl9pZF9wdHI7Ci0JdWludDY0X3QgY3J0Y19pZF9wdHI7Ci0JdWludDY0X3QgY29ubmVjdG9yX2lkX3B0cjsKLQl1aW50NjRfdCBlbmNvZGVyX2lkX3B0cjsKLQl1aW50MzJfdCBjb3VudF9mYnM7Ci0JdWludDMyX3QgY291bnRfY3J0Y3M7Ci0JdWludDMyX3QgY291bnRfY29ubmVjdG9yczsKLQl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKLQl1aW50MzJfdCBtaW5fd2lkdGgsIG1heF93aWR0aDsKLQl1aW50MzJfdCBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OworCV9fdTY0IGZiX2lkX3B0cjsKKwlfX3U2NCBjcnRjX2lkX3B0cjsKKwlfX3U2NCBjb25uZWN0b3JfaWRfcHRyOworCV9fdTY0IGVuY29kZXJfaWRfcHRyOworCV9fdTMyIGNvdW50X2ZiczsKKwlfX3UzMiBjb3VudF9jcnRjczsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOworCV9fdTMyIGNvdW50X2VuY29kZXJzOworCV9fdTMyIG1pbl93aWR0aCwgbWF4X3dpZHRoOworCV9fdTMyIG1pbl9oZWlnaHQsIG1heF9oZWlnaHQ7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY3J0YyB7Ci0JdWludDY0X3Qgc2V0X2Nvbm5lY3RvcnNfcHRyOwotCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7CisJX191NjQgc2V0X2Nvbm5lY3RvcnNfcHRyOworCV9fdTMyIGNvdW50X2Nvbm5lY3RvcnM7CiAKLQl1aW50MzJfdCBjcnRjX2lkOyAvKio8IElkICovCi0JdWludDMyX3QgZmJfaWQ7IC8qKjwgSWQgb2YgZnJhbWVidWZmZXIgKi8KKwlfX3UzMiBjcnRjX2lkOyAvKio8IElkICovCisJX191MzIgZmJfaWQ7IC8qKjwgSWQgb2YgZnJhbWVidWZmZXIgKi8KIAotCXVpbnQzMl90IHgsIHk7IC8qKjwgUG9zaXRpb24gb24gdGhlIGZyYW1ldWZmZXIgKi8KKwlfX3UzMiB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCiAKLQl1aW50MzJfdCBnYW1tYV9zaXplOwotCXVpbnQzMl90IG1vZGVfdmFsaWQ7CisJX191MzIgZ2FtbWFfc2l6ZTsKKwlfX3UzMiBtb2RlX3ZhbGlkOwogCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2RlOwogfTsKIApAQCAtMTI2LDEzICsxMjMsMTMgQEAKICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9UVkRBQwk0CiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlciB7Ci0JdWludDMyX3QgZW5jb2Rlcl9pZDsKLQl1aW50MzJfdCBlbmNvZGVyX3R5cGU7CisJX191MzIgZW5jb2Rlcl9pZDsKKwlfX3UzMiBlbmNvZGVyX3R5cGU7CiAKLQl1aW50MzJfdCBjcnRjX2lkOyAvKio8IElkIG9mIGNydGMgKi8KKwlfX3UzMiBjcnRjX2lkOyAvKio8IElkIG9mIGNydGMgKi8KIAotCXVpbnQzMl90IHBvc3NpYmxlX2NydGNzOwotCXVpbnQzMl90IHBvc3NpYmxlX2Nsb25lczsKKwlfX3UzMiBwb3NzaWJsZV9jcnRjczsKKwlfX3UzMiBwb3NzaWJsZV9jbG9uZXM7CiB9OwogCiAvKiBUaGlzIGlzIGZvciBjb25uZWN0b3JzIHdpdGggbXVsdGlwbGUgc2lnbmFsIHR5cGVzLiAqLwpAQCAtMTYxLDIzICsxNTgsMjMgQEAKIAogc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgewogCi0JdWludDY0X3QgZW5jb2RlcnNfcHRyOwotCXVpbnQ2NF90IG1vZGVzX3B0cjsKLQl1aW50NjRfdCBwcm9wc19wdHI7Ci0JdWludDY0X3QgcHJvcF92YWx1ZXNfcHRyOworCV9fdTY0IGVuY29kZXJzX3B0cjsKKwlfX3U2NCBtb2Rlc19wdHI7CisJX191NjQgcHJvcHNfcHRyOworCV9fdTY0IHByb3BfdmFsdWVzX3B0cjsKIAotCXVpbnQzMl90IGNvdW50X21vZGVzOwotCXVpbnQzMl90IGNvdW50X3Byb3BzOwotCXVpbnQzMl90IGNvdW50X2VuY29kZXJzOworCV9fdTMyIGNvdW50X21vZGVzOworCV9fdTMyIGNvdW50X3Byb3BzOworCV9fdTMyIGNvdW50X2VuY29kZXJzOwogCi0JdWludDMyX3QgZW5jb2Rlcl9pZDsgLyoqPCBDdXJyZW50IEVuY29kZXIgKi8KLQl1aW50MzJfdCBjb25uZWN0b3JfaWQ7IC8qKjwgSWQgKi8KLQl1aW50MzJfdCBjb25uZWN0b3JfdHlwZTsKLQl1aW50MzJfdCBjb25uZWN0b3JfdHlwZV9pZDsKKwlfX3UzMiBlbmNvZGVyX2lkOyAvKio8IEN1cnJlbnQgRW5jb2RlciAqLworCV9fdTMyIGNvbm5lY3Rvcl9pZDsgLyoqPCBJZCAqLworCV9fdTMyIGNvbm5lY3Rvcl90eXBlOworCV9fdTMyIGNvbm5lY3Rvcl90eXBlX2lkOwogCi0JdWludDMyX3QgY29ubmVjdGlvbjsKLQl1aW50MzJfdCBtbV93aWR0aCwgbW1faGVpZ2h0OyAvKio8IEh4VyBpbiBtaWxsaW1ldGVycyAqLwotCXVpbnQzMl90IHN1YnBpeGVsOworCV9fdTMyIGNvbm5lY3Rpb247CisJX191MzIgbW1fd2lkdGgsIG1tX2hlaWdodDsgLyoqPCBIeFcgaW4gbWlsbGltZXRlcnMgKi8KKwlfX3UzMiBzdWJwaXhlbDsKIH07CiAKICNkZWZpbmUgRFJNX01PREVfUFJPUF9QRU5ESU5HCSgxPDwwKQpAQCAtMTg3LDQ2ICsxODQsNDYgQEAKICNkZWZpbmUgRFJNX01PREVfUFJPUF9CTE9CCSgxPDw0KQogCiBzdHJ1Y3QgZHJtX21vZGVfcHJvcGVydHlfZW51bSB7Ci0JdWludDY0X3QgdmFsdWU7CisJX191NjQgdmFsdWU7CiAJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkgewotCXVpbnQ2NF90IHZhbHVlc19wdHI7IC8qIHZhbHVlcyBhbmQgYmxvYiBsZW5ndGhzICovCi0JdWludDY0X3QgZW51bV9ibG9iX3B0cjsgLyogZW51bSBhbmQgYmxvYiBpZCBwdHJzICovCisJX191NjQgdmFsdWVzX3B0cjsgLyogdmFsdWVzIGFuZCBibG9iIGxlbmd0aHMgKi8KKwlfX3U2NCBlbnVtX2Jsb2JfcHRyOyAvKiBlbnVtIGFuZCBibG9iIGlkIHB0cnMgKi8KIAotCXVpbnQzMl90IHByb3BfaWQ7Ci0JdWludDMyX3QgZmxhZ3M7CisJX191MzIgcHJvcF9pZDsKKwlfX3UzMiBmbGFnczsKIAljaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOwogCi0JdWludDMyX3QgY291bnRfdmFsdWVzOwotCXVpbnQzMl90IGNvdW50X2VudW1fYmxvYnM7CisJX191MzIgY291bnRfdmFsdWVzOworCV9fdTMyIGNvdW50X2VudW1fYmxvYnM7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSB7Ci0JdWludDY0X3QgdmFsdWU7Ci0JdWludDMyX3QgcHJvcF9pZDsKLQl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CisJX191NjQgdmFsdWU7CisJX191MzIgcHJvcF9pZDsKKwlfX3UzMiBjb25uZWN0b3JfaWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IgewotCXVpbnQzMl90IGJsb2JfaWQ7Ci0JdWludDMyX3QgbGVuZ3RoOwotCXVpbnQ2NF90IGRhdGE7CisJX191MzIgYmxvYl9pZDsKKwlfX3UzMiBsZW5ndGg7CisJX191NjQgZGF0YTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgewotCXVpbnQzMl90IGZiX2lkOwotCXVpbnQzMl90IHdpZHRoLCBoZWlnaHQ7Ci0JdWludDMyX3QgcGl0Y2g7Ci0JdWludDMyX3QgYnBwOwotCXVpbnQzMl90IGRlcHRoOworCV9fdTMyIGZiX2lkOworCV9fdTMyIHdpZHRoLCBoZWlnaHQ7CisJX191MzIgcGl0Y2g7CisJX191MzIgYnBwOworCV9fdTMyIGRlcHRoOwogCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9tb2RlX21vZGVfY21kIHsKLQl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CisJX191MzIgY29ubmVjdG9yX2lkOwogCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2RlOwogfTsKIApAQCAtMjQ4LDI0ICsyNDUsMjQgQEAKICAqICAgIHkKICAqLwogc3RydWN0IGRybV9tb2RlX2N1cnNvciB7Ci0JdWludDMyX3QgZmxhZ3M7Ci0JdWludDMyX3QgY3J0Y19pZDsKLQlpbnQzMl90IHg7Ci0JaW50MzJfdCB5OwotCXVpbnQzMl90IHdpZHRoOwotCXVpbnQzMl90IGhlaWdodDsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBjcnRjX2lkOworCV9fczMyIHg7CisJX19zMzIgeTsKKwlfX3UzMiB3aWR0aDsKKwlfX3UzMiBoZWlnaHQ7CiAJLyogZHJpdmVyIHNwZWNpZmljIGhhbmRsZSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgewotCXVpbnQzMl90IGNydGNfaWQ7Ci0JdWludDMyX3QgZ2FtbWFfc2l6ZTsKKwlfX3UzMiBjcnRjX2lkOworCV9fdTMyIGdhbW1hX3NpemU7CiAKIAkvKiBwb2ludGVycyB0byBhcnJheXMgKi8KLQl1aW50NjRfdCByZWQ7Ci0JdWludDY0X3QgZ3JlZW47Ci0JdWludDY0X3QgYmx1ZTsKKwlfX3U2NCByZWQ7CisJX191NjQgZ3JlZW47CisJX191NjQgYmx1ZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDUxNjVmMjQuLjc2YzRjODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTQxOCw0ICs0MTgsNiBAQAogCXsweDgwODYsIDB4MmUwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIDB4ZmZmZjAwLCAwfSwgXAogCXsweDgwODYsIDB4MmUxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIDB4ZmZmZjAwLCAwfSwgXAogCXsweDgwODYsIDB4MmUyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIDB4ZmZmZjAwLCAwfSwgXAorCXsweDgwODYsIDB4YTAwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIDB4ZmZmZjAwLCAwfSwgXAorCXsweDgwODYsIDB4YTAxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIDB4ZmZmZjAwLCAwfSwgXAogCXswLCAwLCAwfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKaW5kZXggOTEyY2Q1Mi4uNjdlMzM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCkBAIC0zMCw3ICszMCw3IEBACiAvKiBQbGVhc2Ugbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYWxsIHN0cnVjdHMgZGVmaW5lZCBoZXJlIGFyZQogICogc3ViamVjdCB0byBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBjb25zdHJhaW50cy4KICAqLwotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJkcm0uaCIKIAogLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDI1NSBvZiB0aGVtLgpAQCAtMTE2LDE1ICsxMTYsMTUgQEAKIAogCS8qIGZpbGwgb3V0IHNvbWUgc3BhY2UgZm9yIG9sZCB1c2Vyc3BhY2UgdHJpcGxlIGJ1ZmZlciAqLwogCWRybV9oYW5kbGVfdCB1bnVzZWRfaGFuZGxlOwotCXVpbnQzMl90IHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CisJX191MzIgdW51c2VkMSwgdW51c2VkMiwgdW51c2VkMzsKIAogCS8qIGJ1ZmZlciBvYmplY3QgaGFuZGxlcyBmb3Igc3RhdGljIGJ1ZmZlcnMuIE1heSBjaGFuZ2UKIAkgKiBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY2xpZW50LgogCSAqLwotCXVpbnQzMl90IGZyb250X2JvX2hhbmRsZTsKLQl1aW50MzJfdCBiYWNrX2JvX2hhbmRsZTsKLQl1aW50MzJfdCB1bnVzZWRfYm9faGFuZGxlOwotCXVpbnQzMl90IGRlcHRoX2JvX2hhbmRsZTsKKwlfX3UzMiBmcm9udF9ib19oYW5kbGU7CisJX191MzIgYmFja19ib19oYW5kbGU7CisJX191MzIgdW51c2VkX2JvX2hhbmRsZTsKKwlfX3UzMiBkZXB0aF9ib19oYW5kbGU7CiAKIH0gZHJtX2k5MTVfc2FyZWFfdDsKIApAQCAtMzI3LDcgKzMyNyw3IEBACiB9IGRybV9pOTE1X3ZibGFua19zd2FwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2h3c19hZGRyIHsKLQl1aW50NjRfdCBhZGRyOworCV9fdTY0IGFkZHI7CiB9IGRybV9pOTE1X2h3c19hZGRyX3Q7CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCB7CkBAIC0zMzUsMTIgKzMzNSwxMiBAQAogCSAqIEJlZ2lubmluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CiAJICogbWFuYWdlci4KIAkgKi8KLQl1aW50NjRfdCBndHRfc3RhcnQ7CisJX191NjQgZ3R0X3N0YXJ0OwogCS8qKgogCSAqIEVuZGluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CiAJICogbWFuYWdlci4KIAkgKi8KLQl1aW50NjRfdCBndHRfZW5kOworCV9fdTY0IGd0dF9lbmQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CkBAIC0zNDksOTQgKzM0OSw5NCBAQAogCSAqCiAJICogVGhlIChwYWdlLWFsaWduZWQpIGFsbG9jYXRlZCBzaXplIGZvciB0aGUgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuCiAJICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogCS8qKgogCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KIAkgKgogCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgogCSAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgcmVhZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gcmVhZCBmcm9tICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gcmVhZCAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBQb2ludGVyIHRvIHdyaXRlIHRoZSBkYXRhIGludG8uCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGRhdGFfcHRyOworCV9fdTY0IGRhdGFfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgd3JpdHRlbiB0by4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gd3JpdGUgdG8gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKiBMZW5ndGggb2YgZGF0YSB0byB3cml0ZSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBQb2ludGVyIHRvIHJlYWQgdGhlIGRhdGEgZnJvbS4KIAkgKgogCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCiAJICovCi0JdWludDY0X3QgZGF0YV9wdHI7CisJX191NjQgZGF0YV9wdHI7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKiogT2Zmc2V0IGluIHRoZSBvYmplY3QgdG8gbWFwLiAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqCiAJICogTGVuZ3RoIG9mIGRhdGEgdG8gbWFwLgogCSAqCiAJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGlnbmVkLgogCSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBSZXR1cm5lZCBwb2ludGVyIHRoZSBkYXRhIHdhcyBtYXBwZWQgYXQuCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGFkZHJfcHRyOworCV9fdTY0IGFkZHJfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKgogCSAqIEZha2Ugb2Zmc2V0IHRvIHVzZSBmb3Igc3Vic2VxdWVudCBtbWFwIGNhbGwKIAkgKgogCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCiAJICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogTmV3IHJlYWQgZG9tYWlucyAqLwotCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwlfX3UzMiByZWFkX2RvbWFpbnM7CiAKIAkvKiogTmV3IHdyaXRlIGRvbWFpbiAqLwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKKwlfX3UzMiB3cml0ZV9kb21haW47CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgewpAQCAtNDQ4LDE2ICs0NDgsMTYgQEAKIAkgKiBhIHJlbG9jYXRpb24gbGlzdCBmb3Igc3RhdGUgYnVmZmVycyBhbmQgbm90IHJlLXdyaXRlIGl0IHBlcgogCSAqIGV4ZWMgdXNpbmcgdGhlIGJ1ZmZlci4KIAkgKi8KLQl1aW50MzJfdCB0YXJnZXRfaGFuZGxlOworCV9fdTMyIHRhcmdldF9oYW5kbGU7CiAKIAkvKioKIAkgKiBWYWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRvIG1ha2UgdXAKIAkgKiB0aGUgcmVsb2NhdGlvbiBlbnRyeS4KIAkgKi8KLQl1aW50MzJfdCBkZWx0YTsKKwlfX3UzMiBkZWx0YTsKIAogCS8qKiBPZmZzZXQgaW4gdGhlIGJ1ZmZlciB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gaW50byAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAKIAkvKioKIAkgKiBPZmZzZXQgdmFsdWUgb2YgdGhlIHRhcmdldCBidWZmZXIgdGhhdCB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3YXMgbGFzdApAQCAtNDY3LDEyICs0NjcsMTIgQEAKIAkgKiBhbmQgd3JpdGluZyB0aGUgcmVsb2NhdGlvbi4gIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG91dCBieQogCSAqIHRoZSBleGVjYnVmZmVyIGlvY3RsIHdoZW4gdGhlIHJlbG9jYXRpb24gaXMgd3JpdHRlbi4KIAkgKi8KLQl1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQ7CisJX191NjQgcHJlc3VtZWRfb2Zmc2V0OwogCiAJLyoqCiAJICogVGFyZ2V0IG1lbW9yeSBkb21haW5zIHJlYWQgYnkgdGhpcyBvcGVyYXRpb24uCiAJICovCi0JdWludDMyX3QgcmVhZF9kb21haW5zOworCV9fdTMyIHJlYWRfZG9tYWluczsKIAogCS8qKgogCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyB3cml0dGVuIGJ5IHRoaXMgb3BlcmF0aW9uLgpAQCAtNDgxLDcgKzQ4MSw3IEBACiAJICogZXhlY2J1ZmZlciBvcGVyYXRpb24sIHNvIHRoYXQgd2hlcmUgdGhlcmUgYXJlIGNvbmZsaWN0cywKIAkgKiB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgLUVJTlZBTCBiYWNrLgogCSAqLwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKKwlfX3UzMiB3cml0ZV9kb21haW47CiB9OwogCiAvKiogQHsKQEAgLTUxMiwyNCArNTEyLDI0IEBACiAJICogVXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgR1RUIGZvciB0aGlzCiAJICogb3BlcmF0aW9uLgogCSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogTnVtYmVyIG9mIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGlzIGJ1ZmZlciAqLwotCXVpbnQzMl90IHJlbG9jYXRpb25fY291bnQ7CisJX191MzIgcmVsb2NhdGlvbl9jb3VudDsKIAkvKioKIAkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBjb250YWluaW5nCiAJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGlzIGJ1ZmZlci4KIAkgKi8KLQl1aW50NjRfdCByZWxvY3NfcHRyOworCV9fdTY0IHJlbG9jc19wdHI7CiAKIAkvKiogUmVxdWlyZWQgYWxpZ25tZW50IGluIGdyYXBoaWNzIGFwZXJ0dXJlICovCi0JdWludDY0X3QgYWxpZ25tZW50OworCV9fdTY0IGFsaWdubWVudDsKIAogCS8qKgogCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0aGUgb2JqZWN0LCBmb3IgZnV0dXJlCiAJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KIAkgKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyIHsKQEAgLTU0Myw0NCArNTQzLDQ0IEBACiAJICogYSBidWZmZXIgaXMgcGVyZm9ybWluZyByZWZlciB0byBidWZmZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFwcGVhcmVkCiAJICogaW4gdGhlIHZhbGlkYXRlIGxpc3QuCiAJICovCi0JdWludDY0X3QgYnVmZmVyc19wdHI7Ci0JdWludDMyX3QgYnVmZmVyX2NvdW50OworCV9fdTY0IGJ1ZmZlcnNfcHRyOworCV9fdTMyIGJ1ZmZlcl9jb3VudDsKIAogCS8qKiBPZmZzZXQgaW4gdGhlIGJhdGNoYnVmZmVyIHRvIHN0YXJ0IGV4ZWN1dGlvbiBmcm9tLiAqLwotCXVpbnQzMl90IGJhdGNoX3N0YXJ0X29mZnNldDsKKwlfX3UzMiBiYXRjaF9zdGFydF9vZmZzZXQ7CiAJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KLQl1aW50MzJfdCBiYXRjaF9sZW47Ci0JdWludDMyX3QgRFIxOwotCXVpbnQzMl90IERSNDsKLQl1aW50MzJfdCBudW1fY2xpcHJlY3RzOworCV9fdTMyIGJhdGNoX2xlbjsKKwlfX3UzMiBEUjE7CisJX191MzIgRFI0OworCV9fdTMyIG51bV9jbGlwcmVjdHM7CiAJLyoqIFRoaXMgaXMgYSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzICovCi0JdWludDY0X3QgY2xpcHJlY3RzX3B0cjsKKwlfX3U2NCBjbGlwcmVjdHNfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9waW4gewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBiZSBwaW5uZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCiAJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCi0JdWludDY0X3QgYWxpZ25tZW50OworCV9fdTY0IGFsaWdubWVudDsKIAogCS8qKiBSZXR1cm5lZCBHVFQgb2Zmc2V0IG9mIHRoZSBidWZmZXIuICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4gewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBiZSB1bnBpbm5lZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBjaGVjayBmb3IgYnVzeSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogUmV0dXJuIGJ1c3kgc3RhdHVzICgxIGlmIGJ1c3ksIDAgaWYgaWRsZSkgKi8KLQl1aW50MzJfdCBidXN5OworCV9fdTMyIGJ1c3k7CiB9OwogCiAjZGVmaW5lIEk5MTVfVElMSU5HX05PTkUJMApAQCAtNTk3LDcgKzU5Nyw3IEBACiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGhhdmUgaXRzIHRpbGluZyBzdGF0ZSB1cGRhdGVkICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKgogCSAqIFRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLApAQCAtNjExLDQ3ICs2MTEsNDcgQEAKIAkgKgogCSAqIEJ1ZmZlciBjb250ZW50cyBiZWNvbWUgdW5kZWZpbmVkIHdoZW4gY2hhbmdpbmcgdGlsaW5nX21vZGUuCiAJICovCi0JdWludDMyX3QgdGlsaW5nX21vZGU7CisJX191MzIgdGlsaW5nX21vZGU7CiAKIAkvKioKIAkgKiBTdHJpZGUgaW4gYnl0ZXMgZm9yIHRoZSBvYmplY3Qgd2hlbiBpbiBJOTE1X1RJTElOR19YIG9yCiAJICogSTkxNV9USUxJTkdfWS4KIAkgKi8KLQl1aW50MzJfdCBzdHJpZGU7CisJX191MzIgc3RyaWRlOwogCiAJLyoqCiAJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAogCSAqIG1tYXAgbWFwcGluZy4KIAkgKi8KLQl1aW50MzJfdCBzd2l6emxlX21vZGU7CisJX191MzIgc3dpenpsZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gZ2V0IHRpbGluZyBzdGF0ZSBmb3IuICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKgogCSAqIEN1cnJlbnQgdGlsaW5nIG1vZGUgZm9yIHRoZSBvYmplY3QgKEk5MTVfVElMSU5HX05PTkUsIEk5MTVfVElMSU5HX1gsCiAJICogSTkxNV9USUxJTkdfWSkuCiAJICovCi0JdWludDMyX3QgdGlsaW5nX21vZGU7CisJX191MzIgdGlsaW5nX21vZGU7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCBhZGRyZXNzIGJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgQ1BVIGFjY2VzcyB0aHJvdWdoCiAJICogbW1hcCBtYXBwaW5nLgogCSAqLwotCXVpbnQzMl90IHN3aXp6bGVfbW9kZTsKKwlfX3UzMiBzd2l6emxlX21vZGU7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF9hcGVydHVyZSB7CiAJLyoqIFRvdGFsIHNpemUgb2YgdGhlIGFwZXJ0dXJlIHVzZWQgYnkgaTkxNV9nZW1fZXhlY2J1ZmZlciwgaW4gYnl0ZXMgKi8KLQl1aW50NjRfdCBhcGVyX3NpemU7CisJX191NjQgYXBlcl9zaXplOwogCiAJLyoqCiAJICogQXZhaWxhYmxlIHNwYWNlIGluIHRoZSBhcGVydHVyZSB1c2VkIGJ5IGk5MTVfZ2VtX2V4ZWNidWZmZXIsIGluCiAJICogYnl0ZXMKIAkgKi8KLQl1aW50NjRfdCBhcGVyX2F2YWlsYWJsZV9zaXplOworCV9fdTY0IGFwZXJfYXZhaWxhYmxlX3NpemU7CiB9OwogCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9tZ2FfZHJtLmggYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKaW5kZXggOTQ0YjUwYS4uMzI1ZmQ2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL21nYV9kcm0uaApAQCAtMzUsNiArMzUsOCBAQAogI2lmbmRlZiBfX01HQV9EUk1fSF9fCiAjZGVmaW5lIF9fTUdBX0RSTV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFdBUk5JTkc6IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoZXNlIGRlZmluZXMsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlCiAgKiBkZWZpbmVzIGluIHRoZSBYc2VydmVyIGZpbGUgKG1nYV9zYXJlYS5oKQogICovCkBAIC0yNTUsOCArMjU3LDggQEAKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9JTE9BRCAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9JTE9BRCwgZHJtX21nYV9pbG9hZF90KQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0JMSVQgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0JMSVQsIGRybV9tZ2FfYmxpdF90KQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0dFVFBBUkFNIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0dFVFBBUkFNLCBkcm1fbWdhX2dldHBhcmFtX3QpCi0jZGVmaW5lIERSTV9JT0NUTF9NR0FfU0VUX0ZFTkNFICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9TRVRfRkVOQ0UsIHVpbnQzMl90KQotI2RlZmluZSBEUk1fSU9DVExfTUdBX1dBSVRfRkVOQ0UgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfV0FJVF9GRU5DRSwgdWludDMyX3QpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfU0VUX0ZFTkNFICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9TRVRfRkVOQ0UsIF9fdTMyKQorI2RlZmluZSBEUk1fSU9DVExfTUdBX1dBSVRfRkVOQ0UgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfV0FJVF9GRU5DRSwgX191MzIpCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfRE1BX0JPT1RTVFJBUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9ETUFfQk9PVFNUUkFQLCBkcm1fbWdhX2RtYV9ib290c3RyYXBfdCkKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9tZ2Ffd2FycF9pbmRleCB7CkBAIC0zMTAsNyArMzEyLDcgQEAKIAkgKi8KIAkvKkB7ICovCiAJdW5zaWduZWQgbG9uZyB0ZXh0dXJlX2hhbmRsZTsgLyoqPCBIYW5kbGUgdXNlZCB0byBtYXAgQUdQIHRleHR1cmVzLiAqLwotCXVpbnQzMl90IHRleHR1cmVfc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCisJX191MzIgdGV4dHVyZV9zaXplOwkgICAgICAvKio8IFNpemUgb2YgdGhlIEFHUCB0ZXh0dXJlIHJlZ2lvbi4gKi8KIAkvKkB9ICovCiAKIAkvKioKQEAgLTMxOSw3ICszMjEsNyBAQAogCSAqIE9uIHJldHVybiBmcm9tIHRoZSBEUk1fTUdBX0RNQV9CT09UU1RSQVAgaW9jdGwsIHRoaXMgZmllbGQgd2lsbCBiZQogCSAqIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwgQUdQIG1vZGUuICBJZiBBR1Agd2FzIG5vdCBhdmFpbGFibGUKIAkgKi8KLQl1aW50MzJfdCBwcmltYXJ5X3NpemU7CisJX191MzIgcHJpbWFyeV9zaXplOwogCiAJLyoqCiAJICogUmVxdWVzdGVkIG51bWJlciBvZiBzZWNvbmRhcnkgRE1BIGJ1ZmZlcnMuCkBAIC0zMjksNyArMzMxLDcgQEAKIAkgKiBhbGxvY2F0ZWQuICBQYXJ0aWN1bGFybHkgd2hlbiBQQ0kgRE1BIGlzIHVzZWQsIHRoaXMgbWF5IGJlCiAJICogKHN1YnRhbnRpYWxseSkgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLgogCSAqLwotCXVpbnQzMl90IHNlY29uZGFyeV9iaW5fY291bnQ7CisJX191MzIgc2Vjb25kYXJ5X2Jpbl9jb3VudDsKIAogCS8qKgogCSAqIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggc2Vjb25kYXJ5IERNQSBidWZmZXIuCkBAIC0zMzgsNyArMzQwLDcgQEAKIAkgKiBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fY291bnQsIGl0IGlzIFxiIG5vdCBhbGxvd2VkCiAJICogdG8gcmVkdWNlIGRtYV9tZ2FfZG1hX2Jvb3RzdHJhcDo6c2Vjb25kYXJ5X2Jpbl9zaXplLgogCSAqLwotCXVpbnQzMl90IHNlY29uZGFyeV9iaW5fc2l6ZTsKKwlfX3UzMiBzZWNvbmRhcnlfYmluX3NpemU7CiAKIAkvKioKIAkgKiBCaXQtd2lzZSBtYXNrIG9mIEFHUFNUQVQyXyogdmFsdWVzLiAgQ3VycmVudGx5IG9ubHkgXGMgQUdQU1RBVDJfMVgsCkBAIC0zNTAsMTIgKzM1MiwxMiBAQAogCSAqIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwgQUdQIG1vZGUuICBJZiBBR1Agd2FzIG5vdCBhdmFpbGFibGUKIAkgKiAoaS5lLiwgUENJIERNQSB3YXMgdXNlZCksIHRoaXMgdmFsdWUgd2lsbCBiZSB6ZXJvLgogCSAqLwotCXVpbnQzMl90IGFncF9tb2RlOworCV9fdTMyIGFncF9tb2RlOwogCiAJLyoqCiAJICogRGVzaXJlZCBBR1AgR0FSVCBzaXplLCBtZWFzdXJlZCBpbiBtZWdhYnl0ZXMuCiAJICovCi0JdWludDhfdCBhZ3Bfc2l6ZTsKKwlfX3U4IGFncF9zaXplOwogfSBkcm1fbWdhX2RtYV9ib290c3RyYXBfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9jbGVhciB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmggYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKaW5kZXggNzNmZjUxZi4uNzJlY2Y2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaApAQCAtMzMsNiArMzMsOCBAQAogI2lmbmRlZiBfX1JBREVPTl9EUk1fSF9fCiAjZGVmaW5lIF9fUkFERU9OX0RSTV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFdBUk5JTkc6IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoZXNlIGRlZmluZXMsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlCiAgKiBkZWZpbmVzIGluIHRoZSBYIHNlcnZlciBmaWxlIChyYWRlb25fc2FyZWEuaCkKICAqLwpAQCAtNzIyLDcgKzcyNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fc2V0cGFyYW0gewogCXVuc2lnbmVkIGludCBwYXJhbTsKLQlpbnQ2NF90IHZhbHVlOworCV9fczY0IHZhbHVlOwogfSBkcm1fcmFkZW9uX3NldHBhcmFtX3Q7CiAKICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX0ZCX0xPQ0FUSU9OICAgIDEJLyogZGV0ZXJtaW5lZCBmcmFtZWJ1ZmZlciBsb2NhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdmlhX2RybS5oIGIvaW5jbHVkZS9kcm0vdmlhX2RybS5oCmluZGV4IGEzYjVjMTAuLjE3MDc4NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS92aWFfZHJtLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpZm5kZWYgX1ZJQV9EUk1fSF8KICNkZWZpbmUgX1ZJQV9EUk1fSF8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFdBUk5JTkc6IFRoZXNlIGRlZmluZXMgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IHRoZSBYc2VydmVyIHVzZXMuCiAgKiBpZiB5b3UgY2hhbmdlIHRoZW0sIHlvdSBtdXN0IGNoYW5nZSB0aGUgZGVmaW5lcyBpbiB0aGUgWHNlcnZlci4KICAqLwpAQCAtMTE0LDE5ICsxMTYsMTkgQEAKICNkZWZpbmUgVklBX01FTV9VTktOT1dOIDQKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2FncF90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IHNpemU7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIHNpemU7CiB9IGRybV92aWFfZmJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IGNvbnRleHQ7Ci0JdWludDMyX3QgdHlwZTsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIGNvbnRleHQ7CisJX191MzIgdHlwZTsKKwlfX3UzMiBzaXplOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiB9IGRybV92aWFfbWVtX3Q7CkBAIC0xNDgsOSArMTUwLDkgQEAKIAkJVklBX0ZVVEVYX1dBSVQgPSAweDAwLAogCQlWSUFfRlVURVhfV0FLRSA9IDBYMDEKIAl9IGZ1bmM7Ci0JdWludDMyX3QgbXM7Ci0JdWludDMyX3QgbG9jazsKLQl1aW50MzJfdCB2YWw7CisJX191MzIgbXM7CisJX191MzIgbG9jazsKKwlfX3UzMiB2YWw7CiB9IGRybV92aWFfZnV0ZXhfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfZG1hX2luaXQgewpAQCAtMjExLDcgKzIxMyw3IEBACiAJCVZJQV9DTURCVUZfTEFHID0gMHgwMgogCX0gZnVuYzsKIAlpbnQgd2FpdDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIHNpemU7CiB9IGRybV92aWFfY21kYnVmX3NpemVfdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTIzNiw4ICsyMzgsOCBAQAogc3RydWN0IGRybV92aWFfd2FpdF9pcnFfcmVxdWVzdCB7CiAJdW5zaWduZWQgaXJxOwogCXZpYV9pcnFfc2VxX3R5cGVfdCB0eXBlOwotCXVpbnQzMl90IHNlcXVlbmNlOwotCXVpbnQzMl90IHNpZ25hbDsKKwlfX3UzMiBzZXF1ZW5jZTsKKwlfX3UzMiBzaWduYWw7CiB9OwogCiB0eXBlZGVmIHVuaW9uIGRybV92aWFfaXJxd2FpdCB7CkBAIC0yNDYsNyArMjQ4LDcgQEAKIH0gZHJtX3ZpYV9pcnF3YWl0X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV92aWFfYmxpdHN5bmMgewotCXVpbnQzMl90IHN5bmNfaGFuZGxlOworCV9fdTMyIHN5bmNfaGFuZGxlOwogCXVuc2lnbmVkIGVuZ2luZTsKIH0gZHJtX3ZpYV9ibGl0c3luY190OwogCkBAIC0yNTcsMTYgKzI1OSwxNiBAQAogICovCiAKIHR5cGVkZWYgc3RydWN0IGRybV92aWFfZG1hYmxpdCB7Ci0JdWludDMyX3QgbnVtX2xpbmVzOwotCXVpbnQzMl90IGxpbmVfbGVuZ3RoOworCV9fdTMyIG51bV9saW5lczsKKwlfX3UzMiBsaW5lX2xlbmd0aDsKIAotCXVpbnQzMl90IGZiX2FkZHI7Ci0JdWludDMyX3QgZmJfc3RyaWRlOworCV9fdTMyIGZiX2FkZHI7CisJX191MzIgZmJfc3RyaWRlOwogCiAJdW5zaWduZWQgY2hhciAqbWVtX2FkZHI7Ci0JdWludDMyX3QgbWVtX3N0cmlkZTsKKwlfX3UzMiBtZW1fc3RyaWRlOwogCi0JdWludDMyX3QgZmxhZ3M7CisJX191MzIgZmxhZ3M7CiAJaW50IHRvX2ZiOwogCiAJZHJtX3ZpYV9ibGl0c3luY190IHN5bmM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDEwNmMzYmEuLmU5NTgxZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xMTUsNiArMTE1LDcgQEAKIGhlYWRlci15ICs9IG10aW8uaAogaGVhZGVyLXkgKz0gbmNwX25vLmgKIGhlYWRlci15ICs9IG5laWdoYm91ci5oCitoZWFkZXIteSArPSBuZXRfZHJvcG1vbi5oCiBoZWFkZXIteSArPSBuZXRmaWx0ZXJfYXJwLmgKIGhlYWRlci15ICs9IG5ldHJvbS5oCiBoZWFkZXIteSArPSBuZnMyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggNmZjZTJmYy4uNzgxOTkxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTc5LDYgKzc5LDcgQEAKIHR5cGVkZWYgaW50ICgqYWNwaV90YWJsZV9lbnRyeV9oYW5kbGVyKSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXIsIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogY2hhciAqIF9fYWNwaV9tYXBfdGFibGUgKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwordm9pZCBfX2FjcGlfdW5tYXBfdGFibGUoY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIHNpemUpOwogaW50IGVhcmx5X2FjcGlfYm9vdF9pbml0KHZvaWQpOwogaW50IGFjcGlfYm9vdF9pbml0ICh2b2lkKTsKIGludCBhY3BpX2Jvb3RfdGFibGVfaW5pdCAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaCBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCmluZGV4IDExMGM2MDAuLmY2Nzc4ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCkBAIC03NywyMCArNzcsMjAgQEAKICAqIFRoZSAicHJvdCIgZG93biBiZWxvdyBuZWVkcyBzdGlsbCBhICJzbGVlcCIgZmxhZyBzb21laG93IC4uLgogICovCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3NlZ21lbnQgewotCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLwotCXNpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLwotCWludCBwcm90OwkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0OwkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJX19rZXJuZWxfc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJaW50IHByb3Q7CQkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLwogfSBhZ3Bfc2VnbWVudDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9yZWdpb24gewotCXBpZF90IHBpZDsJCS8qIHBpZCBvZiBwcm9jZXNzICAgICAgICAgICAgICAgKi8KLQlzaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAgICAgICAgICovCisJX19rZXJuZWxfcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgKi8KKwlfX2tlcm5lbF9zaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAqLwogCXN0cnVjdCBfYWdwX3NlZ21lbnQgKnNlZ19saXN0OwogfSBhZ3BfcmVnaW9uOwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX2FsbG9jYXRlIHsKIAlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLwotCXNpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLworCV9fa2VybmVsX3NpemVfdCBwZ19jb3VudDsvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgKi8KIAlfX3UzMiB0eXBlOwkJLyogMCA9PSBub3JtYWwsIG90aGVyIGRldnNwZWMgICAqLwogICAgCV9fdTMyIHBoeXNpY2FsOyAgICAgICAgIC8qIGRldmljZSBzcGVjaWZpYyAoc29tZSBkZXZpY2VzICAKIAkJCQkgKiBuZWVkIGEgcGh5cyBhZGRyZXNzIG9mIHRoZSAgICAgCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9iaW5kIHsKIAlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLwotCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0Oy8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KIH0gYWdwX2JpbmQ7CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfdW5iaW5kIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IGExOTE2MDcuLmNkNGJjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMjM1LDggKzIzNSw2IEBACiAKIAogc3RydWN0IGFyY25ldF9sb2NhbCB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAl1aW50OF90IGNvbmZpZywJCS8qIGN1cnJlbnQgdmFsdWUgb2YgQ09ORklHIHJlZ2lzdGVyICovCiAJCXRpbWVvdXQsCS8qIEV4dGVuZGVkIHRpbWVvdXQgZm9yIENPTTIwMDIwICovCiAJCWJhY2twbGFuZSwJLyogQmFja3BsYW5lIGZsYWcgZm9yIENPTTIwMDIwICovCkBAIC0zMzUsNyArMzMzLDEyIEBACiAKIHZvaWQgYXJjbmV0X3VucmVnaXN0ZXJfcHJvdG8oc3RydWN0IEFyY1Byb3RvICpwcm90byk7CiBpcnFyZXR1cm5fdCBhcmNuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNoYXIgKm5hbWUpOworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2Rldihjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCQkJCS8qIF9MSU5VWF9BUkNERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggOWEwNjFhYy4uNjYxN2M5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC0xMDgsNiArMTA4LDggQEAKIAlBVEFfUElPNQkJPSBBVEFfUElPNCB8ICgxIDw8IDUpLAogCUFUQV9QSU82CQk9IEFUQV9QSU81IHwgKDEgPDwgNiksCiAKKwlBVEFfUElPNF9PTkxZCQk9ICgxIDw8IDQpLAorCiAJQVRBX1NXRE1BMAkJPSAoMSA8PCAwKSwKIAlBVEFfU1dETUExCQk9IEFUQV9TV0RNQTAgfCAoMSA8PCAxKSwKIAlBVEFfU1dETUEyCQk9IEFUQV9TV0RNQTEgfCAoMSA8PCAyKSwKQEAgLTExNyw2ICsxMTksOCBAQAogCUFUQV9NV0RNQTAJCT0gKDEgPDwgMCksCiAJQVRBX01XRE1BMQkJPSBBVEFfTVdETUEwIHwgKDEgPDwgMSksCiAJQVRBX01XRE1BMgkJPSBBVEFfTVdETUExIHwgKDEgPDwgMiksCisJQVRBX01XRE1BMwkJPSBBVEFfTVdETUEyIHwgKDEgPDwgMyksCisJQVRBX01XRE1BNAkJPSBBVEFfTVdETUEzIHwgKDEgPDwgNCksCiAKIAlBVEFfTVdETUExMl9PTkxZCT0gKDEgPDwgMSkgfCAoMSA8PCAyKSwKIAlBVEFfTVdETUEyX09OTFkJCT0gKDEgPDwgMiksCkBAIC0xMzEsNiArMTM1LDggQEAKIAlBVEFfVURNQTcJCT0gQVRBX1VETUE2IHwgKDEgPDwgNyksCiAJLyogQVRBX1VETUE3IGlzIGp1c3QgZm9yIGNvbXBsZXRlbmVzcy4uLiBkb2Vzbid0IGV4aXN0ICh5ZXQ/KS4gICovCiAKKwlBVEFfVURNQTI0X09OTFkJCT0gKDEgPDwgMikgfCAoMSA8PCA0KSwKKwogCUFUQV9VRE1BX01BU0tfNDBDCT0gQVRBX1VETUEyLAkvKiB1ZG1hMC0yICovCiAKIAkvKiBETUEtcmVsYXRlZCAqLwpAQCAtMjQ0LDggKzI1MCw2IEBACiAJQVRBX0NNRF9NRURJQV9VTkxPQ0sJPSAweERGLAogCS8qIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgQVRBL0FUQVBJLTcgc3BlYyAqLwogCUFUQV9DTURfUkVTVE9SRQkJPSAweDEwLAotCS8qIEVYQUJZVEUgc3BlY2lmaWMgKi8KLQlBVEFfRVhBQllURV9FTkFCTEVfTkVTVAk9IDB4RjAsCiAKIAkvKiBSRUFEX0xPR19FWFQgcGFnZXMgKi8KIAlBVEFfTE9HX1NBVEFfTkNRCT0gMHgxMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ3ZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9BVEg5S19QTEFURk9STV9ICisjZGVmaW5lIF9MSU5VWF9BVEg5S19QTEFURk9STV9ICisKKyNkZWZpbmUgQVRIOUtfUExBVF9FRVBfTUFYX1dPUkRTCTIwNDgKKworc3RydWN0IGF0aDlrX3BsYXRmb3JtX2RhdGEgeworCXUxNiBlZXByb21fZGF0YVtBVEg5S19QTEFUX0VFUF9NQVhfV09SRFNdOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9BVEg5S19QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaAppbmRleCA2ZjVhMWJhYi4uMzljOTE3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1sZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBBVE0gbGVjIGRhZW1vbiBjb250cm9sIHNvY2tldCAqLwogI2RlZmluZSBBVE1MRUNfQ1RSTAlfSU8oJ2EnLCBBVE1JT0NfTEFORSkKQEAgLTc4LDggKzc5LDggQEAKIAkJfSBub3JtYWw7CiAJCXN0cnVjdCBhdG1sZWNfY29uZmlnX21zZyBjb25maWc7CiAJCXN0cnVjdCB7Ci0JCQl1aW50MTZfdCBsZWNfaWQ7CQkJLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KLQkJCXVpbnQzMl90IHRyYW5faWQ7CQkJLyogdHJhbnNhY3Rpb24gaWQgICAgKi8KKwkJCV9fdTE2IGxlY19pZDsJCQkJLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KKwkJCV9fdTMyIHRyYW5faWQ7CQkJCS8qIHRyYW5zYWN0aW9uIGlkICAgICovCiAJCQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogZHN0IG1hYyBhZGRyICAgICAgKi8KIAkJCXVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOwkvKiByZXFlc3RvciBBVE0gYWRkciAqLwogCQl9IHByb3h5OwkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaCBiL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKaW5kZXggZWExNjUwNC4uMmFiYTU3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQVRNTVBDX0NUUkwgX0lPKCdhJywgQVRNSU9DX01QT0EpCiAjZGVmaW5lIEFUTU1QQ19EQVRBIF9JTygnYScsIEFUTUlPQ19NUE9BKzEpCkBAIC0xOCwzOSArMTksMzkgQEAKIH07CiAKIHR5cGVkZWYgc3RydWN0IGluX2N0cmxfaW5mbyB7Ci0gICAgICAgIHVpbnQ4X3QgICBMYXN0X05IUlBfQ0lFX2NvZGU7Ci0gICAgICAgIHVpbnQ4X3QgICBMYXN0X1EyOTMxX2NhdXNlX3ZhbHVlOyAgICAgCi0gICAgICAgIHVpbnQ4X3QgICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3U4ICAgTGFzdF9OSFJQX0NJRV9jb2RlOworICAgICAgICBfX3U4ICAgTGFzdF9RMjkzMV9jYXVzZV92YWx1ZTsKKyAgICAgICAgX191OCAgIGVnX01QQ19BVE1fYWRkcltBVE1fRVNBX0xFTl07CiAgICAgICAgIF9fYmUzMiAgdGFnOwogICAgICAgICBfX2JlMzIgIGluX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRoaXMgaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyB0byAqLwotICAgICAgICB1aW50MTZfdCAgaG9sZGluZ190aW1lOwotICAgICAgICB1aW50MzJfdCAgcmVxdWVzdF9pZDsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191MzIgIHJlcXVlc3RfaWQ7CiB9IGluX2N0cmxfaW5mbzsKIAogdHlwZWRlZiBzdHJ1Y3QgZWdfY3RybF9pbmZvIHsKLSAgICAgICAgdWludDhfdCAgIERMTF9oZWFkZXJbMjU2XTsKLSAgICAgICAgdWludDhfdCAgIERIX2xlbmd0aDsKKyAgICAgICAgX191OCAgIERMTF9oZWFkZXJbMjU2XTsKKyAgICAgICAgX191OCAgIERIX2xlbmd0aDsKICAgICAgICAgX19iZTMyICBjYWNoZV9pZDsKICAgICAgICAgX19iZTMyICB0YWc7CiAgICAgICAgIF9fYmUzMiAgbXBzX2lwOwogICAgICAgICBfX2JlMzIgIGVnX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRvIHdoaWNoIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgKi8KLSAgICAgICAgdWludDhfdCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKLSAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191OCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKIH0gZWdfY3RybF9pbmZvOwogCiBzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgewotICAgICAgICB1aW50MTZfdCBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCi0gICAgICAgIHVpbnQ4X3QgbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLyAgICAgIAorICAgICAgICBfX3UxNiBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCisgICAgICAgIF9fdTggbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLwogfSA7CiAKIHN0cnVjdCBrX21lc3NhZ2UgewotICAgICAgICB1aW50MTZfdCB0eXBlOworICAgICAgICBfX3UxNiB0eXBlOwogICAgICAgICBfX2JlMzIgaXBfbWFzazsKLSAgICAgICAgdWludDhfdCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3U4ICBNUFNfY3RybFtBVE1fRVNBX0xFTl07CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICBpbl9jdHJsX2luZm8gaW5faW5mbzsKICAgICAgICAgICAgICAgICBlZ19jdHJsX2luZm8gZWdfaW5mbzsKQEAgLTYxLDExICs2MiwxMSBAQAogCiBzdHJ1Y3QgbGxjX3NuYXBfaGRyIHsKIAkvKiBSRkMgMTQ4MyBMTEMvU05BUCBlbmNhcHN1bGF0aW9uIGZvciByb3V0ZWQgSVAgUERVcyAqLwotICAgICAgICB1aW50OF90ICBkc2FwOyAgICAvKiBEZXN0aW5hdGlvbiBTZXJ2aWNlIEFjY2VzcyBQb2ludCAoMHhBQSkgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIHNzYXA7ICAgIC8qIFNvdXJjZSBTZXJ2aWNlIEFjY2VzcyBQb2ludCAgICAgICgweEFBKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgdWk7ICAgICAgLyogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAgICAgICAgICAgKDB4MDMpICAgICAqLwotICAgICAgICB1aW50OF90ICBvcmdbM107ICAvKiBPcmdhbml6YXRpb25hbCBpZGVudGlmaWNhdGlvbiAgICAoMHgwMDAwMDApICovCi0gICAgICAgIHVpbnQ4X3QgIHR5cGVbMl07IC8qIEV0aGVyIHR5cGUgKGZvciBJUCkgICAgICAgICAgICAgICgweDA4MDApICAgKi8KKyAgICAgICAgX191OCAgZHNhcDsgICAgLyogRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQgKDB4QUEpICAgICAqLworICAgICAgICBfX3U4ICBzc2FwOyAgICAvKiBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQgICAgICAoMHhBQSkgICAgICovCisgICAgICAgIF9fdTggIHVpOyAgICAgIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gICAgICAgICAgICgweDAzKSAgICAgKi8KKyAgICAgICAgX191OCAgb3JnWzNdOyAgLyogT3JnYW5pemF0aW9uYWwgaWRlbnRpZmljYXRpb24gICAgKDB4MDAwMDAwKSAqLworICAgICAgICBfX3U4ICB0eXBlWzJdOyAvKiBFdGhlciB0eXBlIChmb3IgSVApICAgICAgICAgICAgICAoMHgwODAwKSAgICovCiB9OwogCiAvKiBUTFZzIHRoaXMgTVBDIHJlY29nbml6ZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCA2N2U1ZGJmLi40ZmEyODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0zNiw3ICszNiw4IEBACiAgKiAxNTAwIC0gMTU5OSBrZXJuZWwgTFNQUCBldmVudHMKICAqIDE2MDAgLSAxNjk5IGtlcm5lbCBjcnlwdG8gZXZlbnRzCiAgKiAxNzAwIC0gMTc5OSBrZXJuZWwgYW5vbWFseSByZWNvcmRzCi0gKiAxODAwIC0gMTk5OSBmdXR1cmUga2VybmVsIHVzZSAobWF5YmUgaW50ZWdyaXR5IGxhYmVscyBhbmQgcmVsYXRlZCBldmVudHMpCisgKiAxODAwIC0gMTg5OSBrZXJuZWwgaW50ZWdyaXR5IGV2ZW50cworICogMTkwMCAtIDE5OTkgZnV0dXJlIGtlcm5lbCB1c2UKICAqIDIwMDAgaXMgZm9yIG90aGVyd2lzZSB1bmNsYXNzaWZpZWQga2VybmVsIGF1ZGl0IG1lc3NhZ2VzIChsZWdhY3kpCiAgKiAyMDAxIC0gMjA5OSB1bnVzZWQgKGtlcm5lbCkKICAqIDIxMDAgLSAyMTk5IHVzZXIgc3BhY2UgYW5vbWFseSByZWNvcmRzCkBAIC0xMjUsNiArMTI2LDEyIEBACiAjZGVmaW5lIEFVRElUX0xBU1RfS0VSTl9BTk9NX01TRyAgICAxNzk5CiAjZGVmaW5lIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgICAgICAxNzAwIC8qIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUgKi8KICNkZWZpbmUgQVVESVRfQU5PTV9BQkVORCAgICAgICAgICAgIDE3MDEgLyogUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5ICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9EQVRBCSAgICAxODAwIC8qIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgICAgMTgwMSAvKiBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9TVEFUVVMJICAgIDE4MDIgLyogSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0hBU0gJICAgIDE4MDMgLyogSW50ZWdyaXR5IEhBU0ggdHlwZSAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUENSCSAgICAxODA0IC8qIFBDUiBpbnZhbGlkYXRpb24gbXNncyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUlVMRQkgICAgMTgwNSAvKiBwb2xpY3kgcnVsZSAqLwogCiAjZGVmaW5lIEFVRElUX0tFUk5FTAkJMjAwMAkvKiBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCBkOGJkNDNiLi5iMDViMWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTQyNiw5ICs0MjYsNiBAQAogCXVuc2lnbmVkIGludCBmcm9udF9wYWQ7CiAKIAltZW1wb29sX3QgKmJpb19wb29sOwotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQotCW1lbXBvb2xfdCAqYmlvX2ludGVncml0eV9wb29sOwotI2VuZGlmCiAJbWVtcG9vbF90ICpidmVjX3Bvb2w7CiB9OwogCkBAIC01MTksOSArNTE2LDggQEAKIAogI2RlZmluZSBiaW9faW50ZWdyaXR5KGJpbykgKGJpby0+YmlfaW50ZWdyaXR5ICE9IE5VTEwpCiAKLWV4dGVybiBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldChzdHJ1Y3QgYmlvICosIGdmcF90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBiaW9fc2V0ICopOwogZXh0ZXJuIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2Moc3RydWN0IGJpbyAqLCBnZnBfdCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fc2V0ICopOworZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKik7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfYWRkX3BhZ2Uoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfZW5hYmxlZChzdHJ1Y3QgYmlvICpiaW8pOwogZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X3NldF90YWcoc3RydWN0IGJpbyAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CkBAIC01MzEsMjcgKzUyNywyMSBAQAogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9hZHZhbmNlKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfdHJpbShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfc3BsaXQoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvX3BhaXIgKiwgaW50KTsKLWV4dGVybiBpbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIGludCBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShzdHJ1Y3QgYmlvX3NldCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgYmlvc2V0X2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9pbml0X3NsYWIodm9pZCk7CitleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvICosIGdmcF90KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKICNkZWZpbmUgYmlvX2ludGVncml0eShhKQkJKDApCi0jZGVmaW5lIGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKGEsIGIpCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3ByZXAoYSkJCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2VuYWJsZWQoYSkJKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfY2xvbmUoYSwgYiwgYyxkICkJKDApCi0jZGVmaW5lIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShhKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfZnJlZShhLCBiKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGJpb19pbnRlZ3JpdHlfY2xvbmUoYSwgYiwgYykJKDApCisjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZnJlZShhKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2VuZGlvKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9hZHZhbmNlKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV90cmltKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9zcGxpdChhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfc2V0X3RhZyhhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZ2V0X3RhZyhhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKGEpCWRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IDk1ODM3YmYuLjQ1NWQ4MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC02NSwyMyArNjUsMjAgQEAKICNkZWZpbmUgQk9PVE1FTV9ERUZBVUxUCQkwCiAjZGVmaW5lIEJPT1RNRU1fRVhDTFVTSVZFCSgxPDwwKQogCitleHRlcm4gaW50IHJlc2VydmVfYm9vdG1lbSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCByZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSB1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJIGludCBmbGFncyk7Ci0jaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCi1leHRlcm4gaW50IHJlc2VydmVfYm9vdG1lbSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGZsYWdzKTsKLSNlbmRpZgorCQkJCXVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCWludCBmbGFncyk7CiAKLWV4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh1bnNpZ25lZCBsb25nIHNpemUsCitleHRlcm4gdm9pZCAqX19hbGxvY19ib290bWVtKHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBnb2FsKTsKLWV4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBzaXplLAorZXh0ZXJuIHZvaWQgKl9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGdvYWwpOwotZXh0ZXJuIHZvaWQgKl9fYWxsb2NfYm9vdG1lbV9sb3codW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLAotCQkJCSB1bnNpZ25lZCBsb25nIGdvYWwpOwogZXh0ZXJuIHZvaWQgKl9fYWxsb2NfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsCiAJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFsaWduLApAQCAtOTAsMzAgKzg3LDM1IEBACiAJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCSAgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW1fbG93KHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBnb2FsKTsKIGV4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW1fbG93X25vZGUocGdfZGF0YV90ICpwZ2RhdCwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGdvYWwpOwotI2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERQorCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW0oeCkgXAogCV9fYWxsb2NfYm9vdG1lbSh4LCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub3BhbmljKHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4LCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3coeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9sb3coeCwgU01QX0NBQ0hFX0JZVEVTLCAwKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzKHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW0oeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9wYW5pYyh4KSBcCiAJX19hbGxvY19ib290bWVtX25vcGFuaWMoeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbG93KHgsIFBBR0VfU0laRSwgMCkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZV9ub3BhbmljKHBnZGF0LCB4KSBcCisJX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3coeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9sb3coeCwgU01QX0NBQ0hFX0JZVEVTLCAwKQorI2RlZmluZSBhbGxvY19ib290bWVtX2xvd19wYWdlcyh4KSBcCisJX19hbGxvY19ib290bWVtX2xvdyh4LCBQQUdFX1NJWkUsIDApCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbG93X25vZGUocGdkYXQsIHgsIFBBR0VfU0laRSwgMCkKLSNlbmRpZiAvKiAhQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgKi8KIAogZXh0ZXJuIGludCByZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2cuaCBiL2luY2x1ZGUvbGludXgvYnNnLmgKaW5kZXggY2YwMzAzYTYuLmVjYjQ3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnNnLmgKKysrIGIvaW5jbHVkZS9saW51eC9ic2cuaApAQCAtMSwxMiArMSwyMiBAQAogI2lmbmRlZiBCU0dfSAogI2RlZmluZSBCU0dfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBCU0dfUFJPVE9DT0xfU0NTSQkJMAogCiAjZGVmaW5lIEJTR19TVUJfUFJPVE9DT0xfU0NTSV9DTUQJMAogI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVE1GCTEKICNkZWZpbmUgQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX1RSQU5TUE9SVAkyCiAKKy8qCisgKiBGb3IgZmxhZ3MgbWVtYmVyIGJlbG93CisgKiBzZy5oIHNnX2lvX2hkciBhbHNvIGhhcyBiaXRzIGRlZmluZWQgZm9yIGl0J3MgZmxhZ3MgbWVtYmVyLiBIb3dldmVyCisgKiBub25lIG9mIHRoZXNlIGJpdHMgYXJlIGltcGxlbWVudGVkL3VzZWQgYnkgYnNnLiBUaGUgYml0cyBiZWxvdyBhcmUKKyAqIGFsbG9jYXRlZCB0byBub3QgY29uZmxpY3Qgd2l0aCBzZy5oIG9uZXMgYW55d2F5LgorICovCisjZGVmaW5lIEJTR19GTEFHX1FfQVRfVEFJTCAweDEwIC8qIGRlZmF1bHQsID09IDAgYXQgdGhpcyBiaXQsIGlzIFFfQVRfSEVBRCAqLworCiBzdHJ1Y3Qgc2dfaW9fdjQgewogCV9fczMyIGd1YXJkOwkJLyogW2ldICdRJyB0byBkaWZmZXJlbnRpYXRlIGZyb20gdjMgKi8KIAlfX3UzMiBwcm90b2NvbDsJCS8qIFtpXSAwIC0+IFNDU0kgLCAuLi4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggYmQ3YWM3OS4uZjE5ZmQ5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMTY1LDE1ICsxNjUsOCBAQAogdm9pZCB1bm1hcF91bmRlcmx5aW5nX21ldGFkYXRhKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrKTsKIAogdm9pZCBtYXJrX2J1ZmZlcl9hc3luY193cml0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLXZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1pbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIHZvaWQgX193YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiB3YWl0X3F1ZXVlX2hlYWRfdCAqYmhfd2FpdHFfaGVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLWludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1pbnQgdGhhd19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwotaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWludCBmc3luY19ub19zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2ZpbmRfZ2V0X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogCQkJdW5zaWduZWQgc2l6ZSk7CiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fZ2V0YmxrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbGsuaCBiL2luY2x1ZGUvbGludXgvY2xrLmgKaW5kZXggNzc4Nzc3My4uMWRiOWJiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsay5oCkBAIC0xMjUsNCArMTI1LDIxIEBACiAgKi8KIHN0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsayk7CiAKKy8qKgorICogY2xrX2dldF9zeXMgLSBnZXQgYSBjbG9jayBiYXNlZCB1cG9uIHRoZSBkZXZpY2UgbmFtZQorICogQGRldl9pZDogZGV2aWNlIG5hbWUKKyAqIEBjb25faWQ6IGNvbm5lY3Rpb24gSUQKKyAqCisgKiBSZXR1cm5zIGEgc3RydWN0IGNsayBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbG9jayBwcm9kdWNlciwgb3IKKyAqIHZhbGlkIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgVGhlIGltcGxlbWVudGF0aW9uCisgKiB1c2VzIEBkZXZfaWQgYW5kIEBjb25faWQgdG8gZGV0ZXJtaW5lIHRoZSBjbG9jayBjb25zdW1lciwgYW5kCisgKiB0aGVyZWJ5IHRoZSBjbG9jayBwcm9kdWNlci4gSW4gY29udHJhc3QgdG8gY2xrX2dldCgpIHRoaXMgZnVuY3Rpb24KKyAqIHRha2VzIHRoZSBkZXZpY2UgbmFtZSBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgaXRzZWxmIGZvciBpZGVudGlmaWNhdGlvbi4KKyAqCisgKiBEcml2ZXJzIG11c3QgYXNzdW1lIHRoYXQgdGhlIGNsb2NrIHNvdXJjZSBpcyBub3QgZW5hYmxlZC4KKyAqCisgKiBjbGtfZ2V0X3N5cyBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworc3RydWN0IGNsayAqY2xrX2dldF9zeXMoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCBmODhkMzJmLi41NzM4MTllZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtMjIsOCArMjIsMTA5IEBACiBzdHJ1Y3QgY2xvY2tzb3VyY2U7CiAKIC8qKgorICogc3RydWN0IGN5Y2xlY291bnRlciAtIGhhcmR3YXJlIGFic3RyYWN0aW9uIGZvciBhIGZyZWUgcnVubmluZyBjb3VudGVyCisgKglQcm92aWRlcyBjb21wbGV0ZWx5IHN0YXRlLWZyZWUgYWNjZXNzb3JzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgorICoJRGVwZW5kaW5nIG9uIHdoaWNoIGhhcmR3YXJlIGl0IHJlYWRzLCB0aGUgY3ljbGUgY291bnRlciBtYXkgd3JhcAorICoJYXJvdW5kIHF1aWNrbHkuIExvY2tpbmcgcnVsZXMgKGlmIG5lY2Vzc2FyeSkgaGF2ZSB0byBiZSBkZWZpbmVkCisgKglieSB0aGUgaW1wbGVtZW50b3IgYW5kIHVzZXIgb2Ygc3BlY2lmaWMgaW5zdGFuY2VzIG9mIHRoaXMgQVBJLgorICoKKyAqIEByZWFkOgkJcmV0dXJucyB0aGUgY3VycmVudCBjeWNsZSB2YWx1ZQorICogQG1hc2s6CQliaXRtYXNrIGZvciB0d28ncyBjb21wbGVtZW50CisgKgkJCXN1YnRyYWN0aW9uIG9mIG5vbiA2NCBiaXQgY291bnRlcnMsCisgKgkJCXNlZSBDTE9DS1NPVVJDRV9NQVNLKCkgaGVscGVyIG1hY3JvCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllcgorICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCisgKi8KK3N0cnVjdCBjeWNsZWNvdW50ZXIgeworCWN5Y2xlX3QgKCpyZWFkKShjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYyk7CisJY3ljbGVfdCBtYXNrOworCXUzMiBtdWx0OworCXUzMiBzaGlmdDsKK307CisKKy8qKgorICogc3RydWN0IHRpbWVjb3VudGVyIC0gbGF5ZXIgYWJvdmUgYSAlc3RydWN0IGN5Y2xlY291bnRlciB3aGljaCBjb3VudHMgbmFub3NlY29uZHMKKyAqCUNvbnRhaW5zIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGltZWNvdW50ZXJfcmVhZCgpIHRvIGRldGVjdAorICoJY3ljbGUgY291bnRlciB3cmFwIGFyb3VuZC4gSW5pdGlhbGl6ZSB3aXRoCisgKgl0aW1lY291bnRlcl9pbml0KCkuIEFsc28gdXNlZCB0byBjb252ZXJ0IGN5Y2xlIGNvdW50cyBpbnRvIHRoZQorICoJY29ycmVzcG9uZGluZyBuYW5vc2Vjb25kIGNvdW50cyB3aXRoIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCkuIFVzZXJzCisgKglvZiB0aGlzIGNvZGUgYXJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHVuZGVybHlpbmcKKyAqCWN5Y2xlIGNvdW50ZXIgaGFyZHdhcmUsIGxvY2tpbmcgaXNzdWVzIGFuZCByZWFkaW5nIHRoZSB0aW1lCisgKgltb3JlIG9mdGVuIHRoYW4gdGhlIGN5Y2xlIGNvdW50ZXIgd3JhcHMgYXJvdW5kLiBUaGUgbmFub3NlY29uZAorICoJY291bnRlciB3aWxsIG9ubHkgd3JhcCBhcm91bmQgYWZ0ZXIgfjU4NSB5ZWFycy4KKyAqCisgKiBAY2M6CQkJdGhlIGN5Y2xlIGNvdW50ZXIgdXNlZCBieSB0aGlzIGluc3RhbmNlCisgKiBAY3ljbGVfbGFzdDoJCW1vc3QgcmVjZW50IGN5Y2xlIGNvdW50ZXIgdmFsdWUgc2VlbiBieQorICoJCQl0aW1lY291bnRlcl9yZWFkKCkKKyAqIEBuc2VjOgkJY29udGludW91c2x5IGluY3JlYXNpbmcgY291bnQKKyAqLworc3RydWN0IHRpbWVjb3VudGVyIHsKKwljb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYzsKKwljeWNsZV90IGN5Y2xlX2xhc3Q7CisJdTY0IG5zZWM7Cit9OworCisvKioKKyAqIGN5Y2xlY291bnRlcl9jeWMybnMgLSBjb252ZXJ0cyBjeWNsZSBjb3VudGVyIGN5Y2xlcyB0byBuYW5vc2Vjb25kcworICogQHRjOgkJUG9pbnRlciB0byBjeWNsZSBjb3VudGVyLgorICogQGN5Y2xlczoJQ3ljbGVzCisgKgorICogWFhYIC0gVGhpcyBjb3VsZCB1c2Ugc29tZSBtdWx0X2x4bF9sbCgpIGFzbSBvcHRpbWl6YXRpb24uIFNhbWUgY29kZQorICogYXMgaW4gY3ljMm5zLCBidXQgd2l0aCB1bnNpZ25lZCByZXN1bHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGN5Y2xlY291bnRlcl9jeWMybnMoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkJICAgICAgY3ljbGVfdCBjeWNsZXMpCit7CisJdTY0IHJldCA9ICh1NjQpY3ljbGVzOworCXJldCA9IChyZXQgKiBjYy0+bXVsdCkgPj4gY2MtPnNoaWZ0OworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdGltZWNvdW50ZXJfaW5pdCAtIGluaXRpYWxpemUgYSB0aW1lIGNvdW50ZXIKKyAqIEB0YzoJCQlQb2ludGVyIHRvIHRpbWUgY291bnRlciB3aGljaCBpcyB0byBiZSBpbml0aWFsaXplZC9yZXNldAorICogQGNjOgkJCUEgY3ljbGUgY291bnRlciwgcmVhZHkgdG8gYmUgdXNlZC4KKyAqIEBzdGFydF90c3RhbXA6CUFyYml0cmFyeSBpbml0aWFsIHRpbWUgc3RhbXAuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsIHRoZSBjdXJyZW50IGN5Y2xlIHJlZ2lzdGVyIChyb3VnaGx5KSBjb3JyZXNwb25kcyB0bworICogdGhlIGluaXRpYWwgdGltZSBzdGFtcC4gRXZlcnkgY2FsbCB0byB0aW1lY291bnRlcl9yZWFkKCkgaW5jcmVtZW50cworICogdGhlIHRpbWUgc3RhbXAgY291bnRlciBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgbmFub3NlY29uZHMuCisgKi8KK2V4dGVybiB2b2lkIHRpbWVjb3VudGVyX2luaXQoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkgICAgIHU2NCBzdGFydF90c3RhbXApOworCisvKioKKyAqIHRpbWVjb3VudGVyX3JlYWQgLSByZXR1cm4gbmFub3NlY29uZHMgZWxhcHNlZCBzaW5jZSB0aW1lY291bnRlcl9pbml0KCkKKyAqICAgICAgICAgICAgICAgICAgICBwbHVzIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAKKyAqIEB0YzogICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIuCisgKgorICogSW4gb3RoZXIgd29yZHMsIGtlZXBzIHRyYWNrIG9mIHRpbWUgc2luY2UgdGhlIHNhbWUgZXBvY2ggYXMKKyAqIHRoZSBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZWQgdGhlIGluaXRpYWwgdGltZSBzdGFtcC4KKyAqLworZXh0ZXJuIHU2NCB0aW1lY291bnRlcl9yZWFkKHN0cnVjdCB0aW1lY291bnRlciAqdGMpOworCisvKioKKyAqIHRpbWVjb3VudGVyX2N5YzJ0aW1lIC0gY29udmVydCBhIGN5Y2xlIGNvdW50ZXIgdG8gc2FtZQorICogICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGJhc2UgYXMgdmFsdWVzIHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVjb3VudGVyX3JlYWQoKQorICogQHRjOgkJUG9pbnRlciB0byB0aW1lIGNvdW50ZXIuCisgKiBAY3ljbGU6CWEgdmFsdWUgcmV0dXJuZWQgYnkgdGMtPmNjLT5yZWFkKCkKKyAqCisgKiBDeWNsZSBjb3VudHMgdGhhdCBhcmUgY29udmVydGVkIGNvcnJlY3RseSBhcyBsb25nIGFzIHRoZXkKKyAqIGZhbGwgaW50byB0aGUgaW50ZXJ2YWwgWy0xLzIgbWF4IGN5Y2xlIGNvdW50LCArMS8yIG1heCBjeWNsZSBjb3VudF0sCisgKiB3aXRoICJtYXggY3ljbGUgY291bnQiID09IGNzLT5tYXNrKzEuCisgKgorICogVGhpcyBhbGxvd3MgY29udmVyc2lvbiBvZiBjeWNsZSBjb3VudGVyIHZhbHVlcyB3aGljaCB3ZXJlIGdlbmVyYXRlZAorICogaW4gdGhlIHBhc3QuCisgKi8KK2V4dGVybiB1NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCQljeWNsZV90IGN5Y2xlX3RzdGFtcCk7CisKKy8qKgogICogc3RydWN0IGNsb2Nrc291cmNlIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKICAqCVByb3ZpZGVzIG1vc3RseSBzdGF0ZS1mcmVlIGFjY2Vzc29ycyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KKyAqCVRoaXMgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBzeXN0ZW0gdGltZS4KICAqCiAgKiBAbmFtZToJCXB0ciB0byBjbG9ja3NvdXJjZSBuYW1lCiAgKiBAbGlzdDoJCWxpc3QgaGVhZCBmb3IgcmVnaXN0cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAppbmRleCA2MDVlYmUyLi43MmJmZWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmCV9DTTQwMDBfSF8KICNkZWZpbmUJX0NNNDAwMF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZQlNQVhfQVRSCQkJMzMKIAogI2RlZmluZQlDTTQwMDBfTUFYX0RFVgkJNApAQCAtMTAsOSArMTIsOSBAQAogICogbm90IHRvIGJyZWFrIGNvbXBpbGF0aW9uIG9mIHVzZXJzcGFjZSBhcHBzLiAtSFcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYXRyZXEgewotCWludDMyX3QgYXRyX2xlbjsKKwlfX3MzMiBhdHJfbGVuOwogCXVuc2lnbmVkIGNoYXIgYXRyWzY0XTsKLQlpbnQzMl90IHBvd2VyX2FjdDsKKwlfX3MzMiBwb3dlcl9hY3Q7CiAJdW5zaWduZWQgY2hhciBiSUZTRDsKIAl1bnNpZ25lZCBjaGFyIGJJRlNDOwogfSBhdHJlcV90OwpAQCAtMjIsMTMgKzI0LDEzIEBACiAgKiBtZW1iZXIgc2l6ZXMuIFRoaXMgbGVhZHMgdG8gQ09ORklHX0NPTVBBVCBicmVha2FnZSwgc2luY2UgMzJiaXQgdXNlcnNwYWNlCiAgKiB3aWxsIGxheSBvdXQgdGhlIHN0cnVjdHVyZSBtZW1iZXJzIGRpZmZlcmVudGx5IHRoYW4gdGhlIDY0Yml0IGtlcm5lbC4KICAqCi0gKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gInVfaW50MzJfdCIuCisgKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gIl9fdTMyIi4KICAqIE9uIDMyYml0IHRoaXMgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UuICBXaXRoIDY0Yml0IGtlcm5lbHMsIGl0IHdpbGwgbWFrZQogICogMzJiaXQgYXBwcyB3b3JrLCB0b28uCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgcHRzcmVxIHsKLQl1X2ludDMyX3QgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCisJX191MzIgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCiAgCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CiAgCXVuc2lnbmVkIGNoYXIgcHRzMTsKICAJdW5zaWduZWQgY2hhciBwdHMyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmggYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAppbmRleCAxYzg2ZDY1Li5iODEyNWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtNjUsMjAgKzY1LDIwIEBACiAJCX0gYWNrOwogCiAJCXN0cnVjdCBmb3JrX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcGFyZW50X3BpZDsKLQkJCXBpZF90IHBhcmVudF90Z2lkOwotCQkJcGlkX3QgY2hpbGRfcGlkOwotCQkJcGlkX3QgY2hpbGRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHBhcmVudF9waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwYXJlbnRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3RnaWQ7CiAJCX0gZm9yazsKIAogCQlzdHJ1Y3QgZXhlY19wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCX0gZXhlYzsKIAogCQlzdHJ1Y3QgaWRfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwcm9jZXNzX3BpZDsKLQkJCXBpZF90IHByb2Nlc3NfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOwogCQkJdW5pb24gewogCQkJCV9fdTMyIHJ1aWQ7IC8qIHRhc2sgdWlkICovCiAJCQkJX191MzIgcmdpZDsgLyogdGFzayBnaWQgKi8KQEAgLTkwLDggKzkwLDggQEAKIAkJfSBpZDsKIAogCQlzdHJ1Y3QgZXhpdF9wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCQlfX3UzMiBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogCQl9IGV4aXQ7CiAJfSBldmVudF9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmggYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAppbmRleCAwN2FlOGY4Li41YjVkNDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaApAQCAtNiw2ICs2LDcgQEAKICNkZWZpbmUgQ09EQV9QU0RFVl9NQUpPUiA2NwogI2RlZmluZSBNQVhfQ09EQURFVlMgIDUJICAgLyogaG93IG1hbnkgZG8gd2UgYWxsb3cgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBrc3RhdGZzOwogCiAvKiBjb21tdW5pY2F0aW9uIHBlbmRpbmcvcHJvY2Vzc2luZyBxdWV1ZXMgKi8KQEAgLTI0LDcgKzI1LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCB2ZW51c19jb21tICopKChzYiktPnNfZnNfaW5mbyk7CiB9CiAKLQogLyogdXBjYWxscyAqLwogaW50IHZlbnVzX3Jvb3RmaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZHApOwogaW50IHZlbnVzX2dldGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwKQEAgLTY0LDYgKzY0LDEyIEBACiBpbnQgdmVudXNfZnN5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCk7CiBpbnQgdmVudXNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKnNmcyk7CiAKKy8qCisgKiBTdGF0aXN0aWNzCisgKi8KKworZXh0ZXJuIHN0cnVjdCB2ZW51c19jb21tIGNvZGFfY29tbXNbXTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIG1lc3NhZ2VzIGJldHdlZW4gY29kYSBmaWxlc3lzdGVtIGluIGtlcm5lbCBhbmQgVmVudXMgKi8KIHN0cnVjdCB1cGNfcmVxIHsKQEAgLTgyLDExICs4OCw0IEBACiAjZGVmaW5lIFJFUV9XUklURSAgMHg0CiAjZGVmaW5lIFJFUV9BQk9SVCAgMHg4CiAKLQotLyoKLSAqIFN0YXRpc3RpY3MKLSAqLwotCi1leHRlcm4gc3RydWN0IHZlbnVzX2NvbW0gY29kYV9jb21tc1tdOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaCBiL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaAppbmRleCBhYzZkOWE0Li41ZGNmYjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKIGludCBjb20yMDAyMF9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBjb20yMDAyMF9mb3VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2hhcmVkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29tMjAwMjBfbmV0ZGV2X29wczsKIAogLyogVGhlIG51bWJlciBvZiBsb3cgSS9PIHBvcnRzIHVzZWQgYnkgdGhlIGNhcmQuICovCiAjZGVmaW5lIEFSQ05FVF9UT1RBTF9TSVpFIDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IDNmZDIxOTQuLmI4ODA4NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtMTI1LDYgKzEyNSwxMyBAQAogCWNoYXIJCWRfbmFtZVsyNTZdOwogfTsKIAorc3RydWN0IGNvbXBhdF91c3RhdCB7CisJY29tcGF0X2RhZGRyX3QJCWZfdGZyZWU7CisJY29tcGF0X2lub190CQlmX3Rpbm9kZTsKKwljaGFyCQkJZl9mbmFtZVs2XTsKKwljaGFyCQkJZl9mcGFja1s2XTsKK307CisKIHR5cGVkZWYgdW5pb24gY29tcGF0X3NpZ3ZhbCB7CiAJY29tcGF0X2ludF90CXNpdmFsX2ludDsKIAljb21wYXRfdXB0cl90CXNpdmFsX3B0cjsKQEAgLTE3OCw2ICsxODUsNyBAQAogCQl1bnNpZ25lZCBuc2VtcywgY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnRpbWVvdXQpOwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfa2V5Y3RsKHUzMiBvcHRpb24sCiAJCQkgICAgICB1MzIgYXJnMiwgdTMyIGFyZzMsIHUzMiBhcmc0LCB1MzIgYXJnNSk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCBjb21wYXRfdXN0YXQgX191c2VyICp1MzIpOwogCiBhc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLAogCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAppbmRleCAwOTk5MjcxLi40NTBmYTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaApAQCAtMyw4ICszLDEwIEBACiAjZW5kaWYKIAogLyogR0NDIDQuMS5bMDFdIG1pc2NvbXBpbGVzIF9fd2VhayAqLwotI2lmIF9fR05VQ19NSU5PUl9fID09IDEgJiYgX19HTlVDX1BBVENITEVWRUxfXyA8PSAxCi0jIGVycm9yIFlvdXIgdmVyc2lvbiBvZiBnY2MgbWlzY29tcGlsZXMgdGhlIF9fd2VhayBkaXJlY3RpdmUKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmIF9fR05VQ19NSU5PUl9fID09IDEgJiYgX19HTlVDX1BBVENITEVWRUxfXyA8PSAxCisjICBlcnJvciBZb3VyIHZlcnNpb24gb2YgZ2NjIG1pc2NvbXBpbGVzIHRoZSBfX3dlYWsgZGlyZWN0aXZlCisjIGVuZGlmCiAjZW5kaWYKIAogI2RlZmluZSBfX3VzZWQJCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAppbmRleCAzNGYyNzg5Li5mYzY1ZDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKQEAgLTEwOSw2ICsxMDksMTIgQEAKIAl1bnNpZ25lZCBjaGFyIG5hbWVbQ05fQ0JRX05BTUVMRU5dOwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNuX3F1ZXVlOworCS8qIFNlbnQgdG8ga2V2ZW50IHRvIGNyZWF0ZSBjbl9xdWV1ZSBvbmx5IHdoZW4gbmVlZGVkICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdxX2NyZWF0aW9uOworCS8qIFRlbGwgaWYgdGhlIHdxX2NyZWF0aW9uIGpvYiBpcyBwZW5kaW5nL2NvbXBsZXRlZCAqLworCWF0b21pY190IHdxX3JlcXVlc3RlZDsKKwkvKiBXYWl0IGZvciBjbl9xdWV1ZSB0byBiZSBjcmVhdGVkICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FfY3JlYXRlZDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsKIAlzcGlubG9ja190IHF1ZXVlX2xvY2s7CkBAIC0xNjQsNiArMTcwLDggQEAKIGludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpOwogdm9pZCBjbl9xdWV1ZV9kZWxfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY2JfaWQgKmlkKTsKIAoraW50IHF1ZXVlX2NuX3dvcmsoc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmNuX3F1ZXVlX2FsbG9jX2RldihjaGFyICpuYW1lLCBzdHJ1Y3Qgc29jayAqKTsKIHZvaWQgY25fcXVldWVfZnJlZV9kZXYoc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAppbmRleCBhNjdhOTBjLi5kY2NhNTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtMTM3LDggKzEzNyw4IEBACiBpbnQgbWRhX2NvbnNvbGVfaW5pdCh2b2lkKTsKIHZvaWQgcHJvbV9jb25faW5pdCh2b2lkKTsKIAotdm9pZCB2Y3NfbWFrZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgdmNzX21ha2Vfc3lzZnMoaW50IGluZGV4KTsKK3ZvaWQgdmNzX3JlbW92ZV9zeXNmcyhpbnQgaW5kZXgpOwogCiAvKiBTb21lIGRlYnVnIHN0dWIgdG8gY2F0Y2ggc29tZSBvZiB0aGUgb2J2aW91cyByYWNlcyBpbiB0aGUgVlQgY29kZSAqLwogI2lmIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCmluZGV4IDFmMmU5MDIuLmVjMjlmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfU0hBU0gJCTB4MDAwMDAwMDkKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0FIQVNICQkweDAwMDAwMDBhCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9STkcJCTB4MDAwMDAwMGMKKyNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUwkweDAwMDAwMDBmCiAKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSwkweDAwMDAwMDBlCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9BSEFTSF9NQVNLCTB4MDAwMDAwMGMKQEAgLTU0OCw5ICs1NDksNiBAQAogICogVHJhbnNmb3JtIHVzZXIgaW50ZXJmYWNlLgogICovCiAgCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwKLQkJCQkgICAgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIHN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfYmFzZShjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIHZvaWQgY3J5cHRvX2Rlc3Ryb3lfdGZtKHZvaWQgKm1lbSwgc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaCBiL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAppbmRleCBkMDZmYmYyLi43ODg4NTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCkBAIC04Miw5ICs4Miw5IEBACiAgKiBvcGVuKQogICovCiBzdHJ1Y3QgY3ljbGFkZXNfaWRsZV9zdGF0cyB7Ci0gICAgdGltZV90CSAgIGluX3VzZTsJLyogVGltZSBkZXZpY2UgaGFzIGJlZW4gaW4gdXNlIChzZWNzKSAqLwotICAgIHRpbWVfdAkgICByZWN2X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHJlY2VpdmVkIChzZWNzKSAqLwotICAgIHRpbWVfdAkgICB4bWl0X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHRyYW5zbWl0dGVkIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCBpbl91c2U7CS8qIFRpbWUgZGV2aWNlIGhhcyBiZWVuIGluIHVzZSAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgcmVjdl9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciByZWNlaXZlZCAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgeG1pdF9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciB0cmFuc21pdHRlZCAoc2VjcykgKi8KICAgICB1bnNpZ25lZCBsb25nICByZWN2X2J5dGVzOwkvKiBCeXRlcyByZWNlaXZlZCAqLwogICAgIHVuc2lnbmVkIGxvbmcgIHhtaXRfYnl0ZXM7CS8qIEJ5dGVzIHRyYW5zbWl0dGVkICovCiAgICAgdW5zaWduZWQgbG9uZyAgb3ZlcnJ1bnM7CS8qIElucHV0IG92ZXJydW5zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaAppbmRleCBjNjZkMjI0Li4xNTE1NjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKQEAgLTExMiw3ICsxMTIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZF9zdWJkaXJzOwkvKiBvdXIgY2hpbGRyZW4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRfYWxpYXM7CS8qIGlub2RlIGFsaWFzIGxpc3QgKi8KIAl1bnNpZ25lZCBsb25nIGRfdGltZTsJCS8qIHVzZWQgYnkgZF9yZXZhbGlkYXRlICovCi0Jc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOworCWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmRfc2I7CS8qIFRoZSByb290IG9mIHRoZSBkZW50cnkgdHJlZSAqLwogCXZvaWQgKmRfZnNkYXRhOwkJCS8qIGZzLXNwZWNpZmljIGRhdGEgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2NwLmggYi9pbmNsdWRlL2xpbnV4L2RjY3AuaAppbmRleCA2MTczNGUyLi43NDM0YTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjY3AuaApAQCAtMzU1LDQ2ICszNTUsNiBAQAogCXJldHVybiBfX2RjY3BfaGRyX2xlbihkY2NwX2hkcihza2IpKTsKIH0KIAotCi0vKiBpbml0aWFsIHZhbHVlcyBmb3IgZWFjaCBmZWF0dXJlICovCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfU0VRVUVOQ0VfV0lORE9XCQkxMDAKLSNkZWZpbmUgRENDUEZfSU5JVElBTF9BQ0tfUkFUSU8JCQkyCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfQ0NJRAkJCURDQ1BDX0NDSUQyCi0vKiBGSVhNRTogZm9yIG5vdyB3ZSdyZSBkZWZhdWx0IHRvIDEgYnV0IGl0IHNob3VsZCByZWFsbHkgYmUgMCAqLwotI2RlZmluZSBEQ0NQRl9JTklUSUFMX1NFTkRfTkRQX0NPVU5UCQkxCi0KLS8qKgotICAqIHN0cnVjdCBkY2NwX21pbmlzb2NrIC0gTWluaW1hbCBEQ0NQIGNvbm5lY3Rpb24gcmVwcmVzZW50YXRpb24KLSAgKgotICAqIFdpbGwgYmUgdXNlZCB0byBwYXNzIHRoZSBzdGF0ZSBmcm9tIGRjY3BfcmVxdWVzdF9zb2NrIHRvIGRjY3Bfc29jay4KLSAgKgotICAqIEBkY2NwbXNfc2VxdWVuY2Vfd2luZG93IC0gU2VxdWVuY2UgV2luZG93IEZlYXR1cmUgKHNlY3Rpb24gNy41LjIpCi0gICogQGRjY3Btc19wZW5kaW5nIC0gTGlzdCBvZiBmZWF0dXJlcyBiZWluZyBuZWdvdGlhdGVkCi0gICogQGRjY3Btc19jb25mIC0KLSAgKi8KLXN0cnVjdCBkY2NwX21pbmlzb2NrIHsKLQlfX3U2NAkJCWRjY3Btc19zZXF1ZW5jZV93aW5kb3c7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2NwbXNfcGVuZGluZzsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRjY3Btc19jb25mOwotfTsKLQotc3RydWN0IGRjY3Bfb3B0X2NvbmYgewotCV9fdTgJCQkqZGNjcG9jX3ZhbDsKLQlfX3U4CQkJZGNjcG9jX2xlbjsKLX07Ci0KLXN0cnVjdCBkY2NwX29wdF9wZW5kIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRjY3BvcF9ub2RlOwotCV9fdTgJCQlkY2Nwb3BfdHlwZTsKLQlfX3U4CQkJZGNjcG9wX2ZlYXQ7Ci0JX191OAkJICAgICAgICAqZGNjcG9wX3ZhbDsKLQlfX3U4CQkJZGNjcG9wX2xlbjsKLQlpbnQJCQlkY2Nwb3BfY29uZjsKLQlzdHJ1Y3QgZGNjcF9vcHRfY29uZiAgICAqZGNjcG9wX3NjOwotfTsKLQotZXh0ZXJuIHZvaWQgZGNjcF9taW5pc29ja19pbml0KHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKTsKLQogLyoqCiAgKiBzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgIC0gIHJlcHJlc2VudCBEQ0NQLXNwZWNpZmljIGNvbm5lY3Rpb24gcmVxdWVzdAogICogQGRyZXFfaW5ldF9yc2s6IHN0cnVjdHVyZSBpbmhlcml0ZWQgZnJvbQpAQCAtNDgzLDEzICs0NDMsMTQgQEAKICAqIEBkY2Nwc190aW1lc3RhbXBfdGltZSAtIHRpbWUgb2YgcmVjZWl2aW5nIGxhdGVzdCBAZGNjcHNfdGltZXN0YW1wX2VjaG8KICAqIEBkY2Nwc19sX2Fja19yYXRpbyAtIGZlYXR1cmUtbG9jYWwgQWNrIFJhdGlvCiAgKiBAZGNjcHNfcl9hY2tfcmF0aW8gLSBmZWF0dXJlLXJlbW90ZSBBY2sgUmF0aW8KKyAqIEBkY2Nwc19sX3NlcV93aW4gLSBsb2NhbCBTZXF1ZW5jZSBXaW5kb3cgKGluZmx1ZW5jZXMgYWNrIG51bWJlciB2YWxpZGl0eSkKKyAqIEBkY2Nwc19yX3NlcV93aW4gLSByZW1vdGUgU2VxdWVuY2UgV2luZG93IChpbmZsdWVuY2VzIHNlcSBudW1iZXIgdmFsaWRpdHkpCiAgKiBAZGNjcHNfcGNzbGVuIC0gc2VuZGVyICAgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAodmlhIHNvY2tvcHQpCiAgKiBAZGNjcHNfcGNybGVuIC0gcmVjZWl2ZXIgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAodmlhIHNvY2tvcHQpCiAgKiBAZGNjcHNfc2VuZF9uZHBfY291bnQgLSBsb2NhbCBTZW5kIE5EUCBDb3VudCBmZWF0dXJlICg3LjcuMikKICAqIEBkY2Nwc19uZHBfY291bnQgLSBudW1iZXIgb2YgTm9uIERhdGEgUGFja2V0cyBzaW5jZSBsYXN0IGRhdGEgcGFja2V0CiAgKiBAZGNjcHNfbXNzX2NhY2hlIC0gY3VycmVudCB2YWx1ZSBvZiBNU1MgKHBhdGggTVRVIG1pbnVzIGhlYWRlciBzaXplcykKICAqIEBkY2Nwc19yYXRlX2xhc3QgLSB0aW1lc3RhbXAgZm9yIHJhdGUtbGltaXRpbmcgRENDUC1TeW5jIChSRkMgNDM0MCwgNy41LjQpCi0gKiBAZGNjcHNfbWluaXNvY2sgLSBhc3NvY2lhdGVkIG1pbmlzb2NrIChhY2Nlc3NlZCB2aWEgZGNjcF9tc2spCiAgKiBAZGNjcHNfZmVhdG5lZyAtIHRyYWNrcyBmZWF0dXJlLW5lZ290aWF0aW9uIHN0YXRlIChtb3N0bHkgZHVyaW5nIGhhbmRzaGFrZSkKICAqIEBkY2Nwc19oY19yeF9hY2t2ZWMgLSByeCBoYWxmIGNvbm5lY3Rpb24gYWNrIHZlY3RvcgogICogQGRjY3BzX2hjX3J4X2NjaWQgLSBDQ0lEIHVzZWQgZm9yIHRoZSByZWNlaXZlciAob3IgcmVjZWl2aW5nIGhhbGYtY29ubmVjdGlvbikKQEAgLTUyMywxMiArNDg0LDEzIEBACiAJX191MzIJCQkJZGNjcHNfdGltZXN0YW1wX3RpbWU7CiAJX191MTYJCQkJZGNjcHNfbF9hY2tfcmF0aW87CiAJX191MTYJCQkJZGNjcHNfcl9hY2tfcmF0aW87CisJX191NjQJCQkJZGNjcHNfbF9zZXFfd2luOjQ4OworCV9fdTY0CQkJCWRjY3BzX3Jfc2VxX3dpbjo0ODsKIAlfX3U4CQkJCWRjY3BzX3Bjc2xlbjo0OwogCV9fdTgJCQkJZGNjcHNfcGNybGVuOjQ7CiAJX191OAkJCQlkY2Nwc19zZW5kX25kcF9jb3VudDoxOwogCV9fdTY0CQkJCWRjY3BzX25kcF9jb3VudDo0ODsKIAl1bnNpZ25lZCBsb25nCQkJZGNjcHNfcmF0ZV9sYXN0OwotCXN0cnVjdCBkY2NwX21pbmlzb2NrCQlkY2Nwc19taW5pc29jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlkY2Nwc19mZWF0bmVnOwogCXN0cnVjdCBkY2NwX2Fja3ZlYwkJKmRjY3BzX2hjX3J4X2Fja3ZlYzsKIAlzdHJ1Y3QgY2NpZAkJCSpkY2Nwc19oY19yeF9jY2lkOwpAQCAtNTQ2LDExICs1MDgsNiBAQAogCXJldHVybiAoc3RydWN0IGRjY3Bfc29jayAqKXNrOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX21pbmlzb2NrICpkY2NwX21zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCi17Ci0JcmV0dXJuIChzdHJ1Y3QgZGNjcF9taW5pc29jayAqKSZkY2NwX3NrKHNrKS0+ZGNjcHNfbWluaXNvY2s7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGNjcF9yb2xlKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlzd2l0Y2ggKGRjY3Bfc2soc2spLT5kY2Nwc19yb2xlKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvYnVuemlwMi5oIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2J1bnppcDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTUyNzIxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2J1bnppcDIuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIERFQ09NUFJFU1NfQlVOWklQMl9ICisjZGVmaW5lIERFQ09NUFJFU1NfQlVOWklQMl9ICisKK2ludCBidW56aXAyKHVuc2lnbmVkIGNoYXIgKmluYnVmLCBpbnQgbGVuLAorCSAgICBpbnQoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCSAgICBpbnQoKmZsdXNoKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCSAgICBpbnQgKnBvcywKKwkgICAgdm9pZCgqZXJyb3IpKGNoYXIgKngpKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2dlbmVyaWMuaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmYjg1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9nZW5lcmljLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBERUNPTVBSRVNTX0dFTkVSSUNfSAorI2RlZmluZSBERUNPTVBSRVNTX0dFTkVSSUNfSAorCisvKiBNaW5pbWFsIGNodW5rc2l6ZSB0byBiZSByZWFkLgorICpCemlwMiBwcmVmZXJzIGF0IGxlYXN0IDQwOTYKKyAqTHptYSBwcmVmZXJzIDB4MTAwMDAgKi8KKyNkZWZpbmUgQ09NUFJfSU9CVUZfU0laRQk0MDk2CisKK3R5cGVkZWYgaW50ICgqZGVjb21wcmVzc19mbikgKHVuc2lnbmVkIGNoYXIgKmluYnVmLCBpbnQgbGVuLAorCQkJICAgICAgaW50KCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkJCSAgICAgIGludCgqd3JpdGViYikodm9pZCosIHVuc2lnbmVkIGludCksCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCQkgICAgICBpbnQgKnBvc3AsCisJCQkgICAgICB2b2lkKCplcnJvcikoY2hhciAqeCkpOworCisvKiBpbmJ1ZiAgIC0gaW5wdXQgYnVmZmVyCisgKmxlbiAgICAgLSBsZW4gb2YgcHJlLXJlYWQgZGF0YSBpbiBpbmJ1ZgorICpmaWxsICAgIC0gZnVuY3Rpb24gdG8gZmlsbCBpbmJ1ZiBpZiBlbXB0eQorICp3cml0ZWJiIC0gZnVuY3Rpb24gdG8gd3JpdGUgb3V0IG91dGJ1ZworICpwb3NwICAgIC0gaWYgbm9uLW51bGwsIGlucHV0IHBvc2l0aW9uIChudW1iZXIgb2YgYnl0ZXMgcmVhZCkgd2lsbCBiZQorICoJICByZXR1cm5lZCBoZXJlCisgKgorICpJZiBsZW4gIT0gMCwgdGhlIGluYnVmIGlzIGluaXRpYWxpemVkICh3aXRoIGFzIG11Y2ggZGF0YSksIGFuZCBmaWxsCisgKnNob3VsZCBub3QgYmUgY2FsbGVkCisgKklmIGxlbiA9IDAsIHRoZSBpbmJ1ZiBpcyBhbGxvY2F0ZWQsIGJ1dCBlbXB0eS4gSXRzIHNpemUgaXMgSU9CVUZfU0laRQorICpmaWxsIHNob3VsZCBiZSBjYWxsZWQgKHJlcGVhdGVkbHkuLi4pIHRvIHJlYWQgZGF0YSwgYXQgbW9zdCBJT0JVRl9TSVpFCisgKi8KKworLyogVXRpbGl0eSByb3V0aW5lIHRvIGRldGVjdCB0aGUgZGVjb21wcmVzc2lvbiBtZXRob2QgKi8KK2RlY29tcHJlc3NfZm4gZGVjb21wcmVzc19tZXRob2QoY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsIGludCBsZW4sCisJCQkJY29uc3QgY2hhciAqKm5hbWUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9pbmZsYXRlLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvaW5mbGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YjA2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvaW5mbGF0ZS5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgSU5GTEFURV9ICisjZGVmaW5lIElORkxBVEVfSAorCisvKiBPdGhlciBob3VzZWtlZXBpbmcgY29uc3RhbnRzICovCisjZGVmaW5lIElOQlVGU0laIDQwOTYKKworaW50IGd1bnppcCh1bnNpZ25lZCBjaGFyICppbmJ1ZiwgaW50IGxlbiwKKwkgICBpbnQoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCSAgIGludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCSAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkgICBpbnQgKnBvcywKKwkgICB2b2lkKCplcnJvcl9mbikoY2hhciAqeCkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmY4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaApAQCAtMCwwICsxLDg3IEBACisvKgorICogbGludXgvY29tcHJfbW0uaAorICoKKyAqIE1lbW9yeSBtYW5hZ2VtZW50IGZvciBwcmUtYm9vdCBhbmQgcmFtZGlzayB1bmNvbXByZXNzb3JzCisgKgorICogQXV0aG9yczogQWxhaW4gS25hZmYgPGFsYWluQGtuYWZmLmx1PgorICoKKyAqLworCisjaWZuZGVmIERFQ09NUFJfTU1fSAorI2RlZmluZSBERUNPTVBSX01NX0gKKworI2lmZGVmIFNUQVRJQworCisvKiBDb2RlIGFjdGl2ZSB3aGVuIGluY2x1ZGVkIGZyb20gcHJlLWJvb3QgZW52aXJvbm1lbnQ6ICovCisKKy8qIEEgdHJpdmlhbCBtYWxsb2MgaW1wbGVtZW50YXRpb24sIGFkYXB0ZWQgZnJvbQorICogIG1hbGxvYyBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMgYW5kIE1hdHRoaWFzIFVybGljaHMgMTk5NAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWxsb2NfcHRyOworc3RhdGljIGludCBtYWxsb2NfY291bnQ7CisKK3N0YXRpYyB2b2lkICptYWxsb2MoaW50IHNpemUpCit7CisJdm9pZCAqcDsKKworCWlmIChzaXplIDwgMCkKKwkJZXJyb3IoIk1hbGxvYyBlcnJvciIpOworCWlmICghbWFsbG9jX3B0cikKKwkJbWFsbG9jX3B0ciA9IGZyZWVfbWVtX3B0cjsKKworCW1hbGxvY19wdHIgPSAobWFsbG9jX3B0ciArIDMpICYgfjM7ICAgICAvKiBBbGlnbiAqLworCisJcCA9ICh2b2lkICopbWFsbG9jX3B0cjsKKwltYWxsb2NfcHRyICs9IHNpemU7CisKKwlpZiAoZnJlZV9tZW1fZW5kX3B0ciAmJiBtYWxsb2NfcHRyID49IGZyZWVfbWVtX2VuZF9wdHIpCisJCWVycm9yKCJPdXQgb2YgbWVtb3J5Iik7CisKKwltYWxsb2NfY291bnQrKzsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgZnJlZSh2b2lkICp3aGVyZSkKK3sKKwltYWxsb2NfY291bnQtLTsKKwlpZiAoIW1hbGxvY19jb3VudCkKKwkJbWFsbG9jX3B0ciA9IGZyZWVfbWVtX3B0cjsKK30KKworI2RlZmluZSBsYXJnZV9tYWxsb2MoYSkgbWFsbG9jKGEpCisjZGVmaW5lIGxhcmdlX2ZyZWUoYSkgZnJlZShhKQorCisjZGVmaW5lIHNldF9lcnJvcl9mbih4KQorCisjZGVmaW5lIElOSVQKKworI2Vsc2UgLyogU1RBVElDICovCisKKy8qIENvZGUgYWN0aXZlIHdoZW4gY29tcGlsZWQgc3RhbmRhbG9uZSBmb3IgdXNlIHdoZW4gbG9hZGluZyByYW1kaXNrOiAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKy8qIFVzZSBkZWZpbmVzIHJhdGhlciB0aGFuIHN0YXRpYyBpbmxpbmUgaW4gb3JkZXIgdG8gYXZvaWQgc3B1cmlvdXMKKyAqIHdhcm5pbmdzIHdoZW4gbm90IG5lZWRlZCAoaW5kZWVkIGxhcmdlX21hbGxvYyAvIGxhcmdlX2ZyZWUgYXJlIG5vdAorICogbmVlZGVkIGJ5IGluZmxhdGUgKi8KKworI2RlZmluZSBtYWxsb2MoYSkga21hbGxvYyhhLCBHRlBfS0VSTkVMKQorI2RlZmluZSBmcmVlKGEpIGtmcmVlKGEpCisKKyNkZWZpbmUgbGFyZ2VfbWFsbG9jKGEpIHZtYWxsb2MoYSkKKyNkZWZpbmUgbGFyZ2VfZnJlZShhKSB2ZnJlZShhKQorCitzdGF0aWMgdm9pZCgqZXJyb3IpKGNoYXIgKm0pOworI2RlZmluZSBzZXRfZXJyb3JfZm4oeCkgZXJyb3IgPSB4OworCisjZGVmaW5lIElOSVQgX19pbml0CisjZGVmaW5lIFNUQVRJQworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjZW5kaWYgLyogU1RBVElDICovCisKKyNlbmRpZiAvKiBERUNPTVBSX01NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy91bmx6bWEuaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy91bmx6bWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk2NTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL3VubHptYS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgREVDT01QUkVTU19VTkxaTUFfSAorI2RlZmluZSBERUNPTVBSRVNTX1VOTFpNQV9ICisKK2ludCB1bmx6bWEodW5zaWduZWQgY2hhciAqLCBpbnQsCisJICAgaW50KCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkgICBpbnQoKmZsdXNoKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJICAgaW50ICpwb3NwLAorCSAgIHZvaWQoKmVycm9yKShjaGFyICp4KQorCSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggNDdmMzQzYy4uMjkxOGMwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIEJVU19JRF9TSVpFCQkyMAogCiBzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9wcml2YXRlOwogc3RydWN0IGRldmljZV9kcml2ZXI7CiBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGU7CiBzdHJ1Y3QgY2xhc3M7CkBAIC0xNDcsNyArMTQ4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJIHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKIGV4dGVybiBpbnQgZHJpdmVyX3Byb2JlX2RvbmUodm9pZCk7Ci1leHRlcm4gaW50IHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKK2V4dGVybiB2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKIAogCiAvKiBzeXNmcyBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBkcml2ZXIgYXR0cmlidXRlcyAqLwpAQCAtMzY3LDE1ICszNjgsMTEgQEAKIH07CiAKIHN0cnVjdCBkZXZpY2UgewotCXN0cnVjdCBrbGlzdAkJa2xpc3RfY2hpbGRyZW47Ci0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfcGFyZW50OwkvKiBub2RlIGluIHNpYmxpbmcgbGlzdCAqLwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX2RyaXZlcjsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9idXM7CiAJc3RydWN0IGRldmljZQkJKnBhcmVudDsKIAorCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZQkqcDsKKwogCXN0cnVjdCBrb2JqZWN0IGtvYmo7Ci0JY2hhcglidXNfaWRbQlVTX0lEX1NJWkVdOwkvKiBwb3NpdGlvbiBvbiBwYXJlbnQgYnVzICovCi0JdW5zaWduZWQJCXVldmVudF9zdXBwcmVzczoxOwogCWNvbnN0IGNoYXIJCSppbml0X25hbWU7IC8qIGluaXRpYWwgbmFtZSBvZiB0aGUgZGV2aWNlICovCiAJc3RydWN0IGRldmljZV90eXBlCSp0eXBlOwogCkBAIC0zODcsOCArMzg0LDEzIEBACiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsJLyogd2hpY2ggZHJpdmVyIGhhcyBhbGxvY2F0ZWQgdGhpcwogCQkJCQkgICBkZXZpY2UgKi8KIAl2b2lkCQkqZHJpdmVyX2RhdGE7CS8qIGRhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovCi0Jdm9pZAkJKnBsYXRmb3JtX2RhdGE7CS8qIFBsYXRmb3JtIHNwZWNpZmljIGRhdGEsIGRldmljZQotCQkJCQkgICBjb3JlIGRvZXNuJ3QgdG91Y2ggaXQgKi8KKworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOwkvKiBXZSB3aWxsIHJlbW92ZSBwbGF0Zm9ybV9kYXRhCisJCQkJCSAgIGZpZWxkIGlmIGFsbCBwbGF0Zm9ybSBkZXZpY2VzCisJCQkJCSAgIHBhc3MgaXRzIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKwkJCQkJICAgZnJvbSBwbGF0Zm9ybV9kZXZpY2UtPnBsYXRmb3JtX2RhdGEsCisJCQkJCSAgIG90aGVyIGtpbmQgb2YgZGV2aWNlcyBzaG91bGQgbm90CisJCQkJCSAgIHVzZSBwbGF0Zm9ybV9kYXRhLiAqLwogCXN0cnVjdCBkZXZfcG1faW5mbwlwb3dlcjsKIAogI2lmZGVmIENPTkZJR19OVU1BCkBAIC00MjcsOCArNDI5LDcgQEAKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkZXZfbmFtZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JLyogd2lsbCBiZSBjaGFuZ2VkIGludG8ga29iamVjdF9uYW1lKCZkZXYtPmtvYmopIGluIHRoZSBuZWFyIGZ1dHVyZSAqLwotCXJldHVybiBkZXYtPmJ1c19pZDsKKwlyZXR1cm4ga29iamVjdF9uYW1lKCZkZXYtPmtvYmopOwogfQogCiBleHRlcm4gaW50IGRldl9zZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKQEAgLTQ2Myw2ICs0NjQsMTYgQEAKIAlkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmtvYmoudWV2ZW50X3N1cHByZXNzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2X3NldF91ZXZlbnRfc3VwcHJlc3Moc3RydWN0IGRldmljZSAqZGV2LCBpbnQgdmFsKQoreworCWRldi0+a29iai51ZXZlbnRfc3VwcHJlc3MgPSB2YWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pc19yZWdpc3RlcmVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZGV2LT5rb2JqLnN0YXRlX2luX3N5c2ZzOwpAQCAtNDgzLDcgKzQ5NCw4IEBACiBleHRlcm4gc3RydWN0IGRldmljZSAqZGV2aWNlX2ZpbmRfY2hpbGQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCWludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpKTsKIGV4dGVybiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKTsKLWV4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50KTsKK2V4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50LAorCQkgICAgICAgZW51bSBkcG1fb3JkZXIgZHBtX29yZGVyKTsKIAogLyoKICAqIFJvb3QgZGV2aWNlIG9iamVjdHMgZm9yIGdyb3VwaW5nIHVuZGVyIC9zeXMvZGV2aWNlcwpAQCAtNTcwLDcgKzU4Miw3IEBACiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAogCWRldl9wcmludGsoS0VSTl9ERUJVRyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKLSNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7IFwKIAlkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaAppbmRleCAxOTI3NjMzLi42NDdjOGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCkBAIC05LDYgKzksOCBAQAogI2lmbmRlZiBfRExNX05FVExJTktfSAogI2RlZmluZSBfRExNX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJRExNX1NUQVRVU19XQUlUSU5HID0gMSwKIAlETE1fU1RBVFVTX0dSQU5URUQgPSAyLApAQCAtMTgsMTYgKzIwLDE2IEBACiAjZGVmaW5lIERMTV9MT0NLX0RBVEFfVkVSU0lPTiAxCiAKIHN0cnVjdCBkbG1fbG9ja19kYXRhIHsKLQl1aW50MTZfdCB2ZXJzaW9uOwotCXVpbnQzMl90IGxvY2tzcGFjZV9pZDsKKwlfX3UxNiB2ZXJzaW9uOworCV9fdTMyIGxvY2tzcGFjZV9pZDsKIAlpbnQgbm9kZWlkOwogCWludCBvd25waWQ7Ci0JdWludDMyX3QgaWQ7Ci0JdWludDMyX3QgcmVtaWQ7Ci0JdWludDY0X3QgeGlkOwotCWludDhfdCBzdGF0dXM7Ci0JaW50OF90IGdybW9kZTsKLQlpbnQ4X3QgcnFtb2RlOworCV9fdTMyIGlkOworCV9fdTMyIHJlbWlkOworCV9fdTY0IHhpZDsKKwlfX3M4IHN0YXR1czsKKwlfX3M4IGdybW9kZTsKKwlfX3M4IHJxbW9kZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIAlpbnQgcmVzb3VyY2VfbmFtZWxlbjsKIAljaGFyIHJlc291cmNlX25hbWVbRExNX1JFU05BTUVfTUFYTEVOXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAppbmRleCAyOGMyOTQwLi40OGU0NGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCkBAIC0xMTMsMjAgKzExMywyMCBAQAogCSAqIHJldHVybiAtRU5PVFRZKSBmaWxsIG91dCB0aGlzIGZpZWxkLCBldmVuIGlmIHRoZQogCSAqIGNvbW1hbmQgZmFpbGVkLgogCSAqLwotCXVpbnQzMl90IHZlcnNpb25bM107CS8qIGluL291dCAqLwotCXVpbnQzMl90IGRhdGFfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgorCV9fdTMyIHZlcnNpb25bM107CS8qIGluL291dCAqLworCV9fdTMyIGRhdGFfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgogCQkJCSAqIGluY2x1ZGluZyB0aGlzIHN0cnVjdCAqLwogCi0JdWludDMyX3QgZGF0YV9zdGFydDsJLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIGRhdGEKKwlfX3UzMiBkYXRhX3N0YXJ0OwkvKiBvZmZzZXQgdG8gc3RhcnQgb2YgZGF0YQogCQkJCSAqIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHRoaXMgc3RydWN0ICovCiAKLQl1aW50MzJfdCB0YXJnZXRfY291bnQ7CS8qIGluL291dCAqLwotCWludDMyX3Qgb3Blbl9jb3VudDsJLyogb3V0ICovCi0JdWludDMyX3QgZmxhZ3M7CQkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBldmVudF9ucjsgICAgICAJLyogaW4vb3V0ICovCi0JdWludDMyX3QgcGFkZGluZzsKKwlfX3UzMiB0YXJnZXRfY291bnQ7CS8qIGluL291dCAqLworCV9fczMyIG9wZW5fY291bnQ7CS8qIG91dCAqLworCV9fdTMyIGZsYWdzOwkJLyogaW4vb3V0ICovCisJX191MzIgZXZlbnRfbnI7ICAgICAgCS8qIGluL291dCAqLworCV9fdTMyIHBhZGRpbmc7CiAKLQl1aW50NjRfdCBkZXY7CQkvKiBpbi9vdXQgKi8KKwlfX3U2NCBkZXY7CQkvKiBpbi9vdXQgKi8KIAogCWNoYXIgbmFtZVtETV9OQU1FX0xFTl07CS8qIGRldmljZSBuYW1lICovCiAJY2hhciB1dWlkW0RNX1VVSURfTEVOXTsJLyogdW5pcXVlIGlkZW50aWZpZXIgZm9yCkBAIC0xMzksOSArMTM5LDkgQEAKICAqIGRtX2lvY3RsLgogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X3NwZWMgewotCXVpbnQ2NF90IHNlY3Rvcl9zdGFydDsKLQl1aW50NjRfdCBsZW5ndGg7Ci0JaW50MzJfdCBzdGF0dXM7CQkvKiB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIGtlcm5lbCBvbmx5ICovCisJX191NjQgc2VjdG9yX3N0YXJ0OworCV9fdTY0IGxlbmd0aDsKKwlfX3MzMiBzdGF0dXM7CQkvKiB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIGtlcm5lbCBvbmx5ICovCiAKIAkvKgogCSAqIExvY2F0aW9uIG9mIHRoZSBuZXh0IGRtX3RhcmdldF9zcGVjLgpAQCAtMTUzLDcgKzE1Myw3IEBACiAJICogICAodGhhdCBmb2xsb3dzIHRoZSBkbV9pb2N0bCBzdHJ1Y3QpIHRvIHRoZSBzdGFydCBvZiB0aGUgIm5leHQiCiAJICogICBkbV90YXJnZXRfc3BlYy4KIAkgKi8KLQl1aW50MzJfdCBuZXh0OworCV9fdTMyIG5leHQ7CiAKIAljaGFyIHRhcmdldF90eXBlW0RNX01BWF9UWVBFX05BTUVdOwogCkBAIC0xNjgsMTcgKzE2OCwxNyBAQAogICogVXNlZCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IGRlcGVuZGVuY2llcy4KICAqLwogc3RydWN0IGRtX3RhcmdldF9kZXBzIHsKLQl1aW50MzJfdCBjb3VudDsJLyogQXJyYXkgc2l6ZSAqLwotCXVpbnQzMl90IHBhZGRpbmc7CS8qIHVudXNlZCAqLwotCXVpbnQ2NF90IGRldlswXTsJLyogb3V0ICovCisJX191MzIgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KKwlfX3UzMiBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KKwlfX3U2NCBkZXZbMF07CS8qIG91dCAqLwogfTsKIAogLyoKICAqIFVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgZG0gZGV2aWNlcy4KICAqLwogc3RydWN0IGRtX25hbWVfbGlzdCB7Ci0JdWludDY0X3QgZGV2OwotCXVpbnQzMl90IG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KKwlfX3U2NCBkZXY7CisJX191MzIgbmV4dDsJCS8qIG9mZnNldCB0byB0aGUgbmV4dCByZWNvcmQgZnJvbQogCQkJCSAgIHRoZSBfc3RhcnRfIG9mIHRoaXMgKi8KIAljaGFyIG5hbWVbMF07CiB9OwpAQCAtMTg3LDggKzE4Nyw4IEBACiAgKiBVc2VkIHRvIHJldHJpZXZlIHRoZSB0YXJnZXQgdmVyc2lvbnMKICAqLwogc3RydWN0IGRtX3RhcmdldF92ZXJzaW9ucyB7Ci0gICAgICAgIHVpbnQzMl90IG5leHQ7Ci0gICAgICAgIHVpbnQzMl90IHZlcnNpb25bM107CisgICAgICAgIF9fdTMyIG5leHQ7CisgICAgICAgIF9fdTMyIHZlcnNpb25bM107CiAKICAgICAgICAgY2hhciBuYW1lWzBdOwogfTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICogVXNlZCB0byBwYXNzIG1lc3NhZ2UgdG8gYSB0YXJnZXQKICAqLwogc3RydWN0IGRtX3RhcmdldF9tc2cgewotCXVpbnQ2NF90IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLworCV9fdTY0IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLwogCiAJY2hhciBtZXNzYWdlWzBdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCmluZGV4IGJiMGRmMmEuLmZlYzY2YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaApAQCAtNzYsNyArNzYsNyBAQAogfSBhdWRpb19rYXJhb2tlX3Q7ICAgICAvKiBpbnRvIGxlZnQgYW5kIHJpZ2h0ICAqLwogCiAKLXR5cGVkZWYgdWludDE2X3QgYXVkaW9fYXR0cmlidXRlc190OwordHlwZWRlZiBfX3UxNiBhdWRpb19hdHRyaWJ1dGVzX3Q7CiAvKiAgIGJpdHM6IGRlc2NyLiAqLwogLyogICAxNS0xMyBhdWRpbyBjb2RpbmcgbW9kZSAoMD1hYzMsIDI9bXBlZzEsIDM9bXBlZzJleHQsIDQ9TFBDTSwgNj1EVFMsICovCiAvKiAgIDEyICAgIG11bHRpY2hhbm5lbCBleHRlbnNpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCmluZGV4IGJkNDljM2UuLjFkNzUwYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaApAQCAtMTMyLDEyICsxMzIsMTIgQEAKICNkZWZpbmUgVklERU9fVlNZTkNfRklFTERfUFJPR1JFU1NJVkUJKDMpCiAKIHN0cnVjdCB2aWRlb19ldmVudCB7Ci0JaW50MzJfdCB0eXBlOworCV9fczMyIHR5cGU7CiAjZGVmaW5lIFZJREVPX0VWRU5UX1NJWkVfQ0hBTkdFRAkxCiAjZGVmaW5lIFZJREVPX0VWRU5UX0ZSQU1FX1JBVEVfQ0hBTkdFRAkyCiAjZGVmaW5lIFZJREVPX0VWRU5UX0RFQ09ERVJfU1RPUFBFRCAJMwogI2RlZmluZSBWSURFT19FVkVOVF9WU1lOQyAJCTQKLQl0aW1lX3QgdGltZXN0YW1wOworCV9fa2VybmVsX3RpbWVfdCB0aW1lc3RhbXA7CiAJdW5pb24gewogCQl2aWRlb19zaXplX3Qgc2l6ZTsKIAkJdW5zaWduZWQgaW50IGZyYW1lX3JhdGU7CS8qIGluIGZyYW1lcyBwZXIgMTAwMHNlYyAqLwpAQCAtMTU3LDI1ICsxNTcsMjUgQEAKIAogc3RydWN0IHZpZGVvX3N0aWxsX3BpY3R1cmUgewogCWNoYXIgX191c2VyICppRnJhbWU7ICAgICAgICAvKiBwb2ludGVyIHRvIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgKi8KLQlpbnQzMl90IHNpemU7CisJX19zMzIgc2l6ZTsKIH07CiAKIAogdHlwZWRlZgogc3RydWN0IHZpZGVvX2hpZ2hsaWdodCB7CiAJaW50ICAgICBhY3RpdmU7ICAgICAgLyogICAgMT1zaG93IGhpZ2hsaWdodCwgMD1oaWRlIGhpZ2hsaWdodCAqLwotCXVpbnQ4X3QgY29udHJhc3QxOyAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgKi8KKwlfX3U4ICAgIGNvbnRyYXN0MTsgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbnRyYXN0ICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEJhY2tncm91bmQgcGl4ZWwgY29udHJhc3QgKi8KLQl1aW50OF90IGNvbnRyYXN0MjsgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbnRyYXN0ICovCisJX191OCAgICBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLwogCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbnRyYXN0ICovCi0JdWludDhfdCBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLworCV9fdTggICAgY29sb3IxOyAgICAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb2xvciAqLwotCXVpbnQ4X3QgY29sb3IyOyAgICAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgKi8KKwlfX3U4ICAgIGNvbG9yMjsgICAgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbG9yICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEVtcGhhc2lzIHBpeGVsLTEgY29sb3IgKi8KLQl1aW50MzJfdCB5cG9zOyAgICAgICAvKiAgIDIzLTIyICBhdXRvIGFjdGlvbiBtb2RlICovCisJX191MzIgICAgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLwogCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB5ICovCiAJCQkgICAgIC8qICAgIDktIDAgIGVuZCB5ICovCi0JdWludDMyX3QgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLworCV9fdTMyICAgIHhwb3M7ICAgICAgIC8qICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgKi8KIAkJCSAgICAgLyogICAyMS0xMiAgc3RhcnQgeCAqLwogCQkJICAgICAvKiAgICA5LSAwICBlbmQgeCAqLwogfSB2aWRlb19oaWdobGlnaHRfdDsKQEAgLTE4OSwxNyArMTg5LDE3IEBACiAKIHR5cGVkZWYgc3RydWN0IHZpZGVvX3NwdV9wYWxldHRlIHsgICAgICAvKiBTUFUgUGFsZXR0ZSBpbmZvcm1hdGlvbiAqLwogCWludCBsZW5ndGg7Ci0JdWludDhfdCBfX3VzZXIgKnBhbGV0dGU7CisJX191OCBfX3VzZXIgKnBhbGV0dGU7CiB9IHZpZGVvX3NwdV9wYWxldHRlX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNrIHsKIAlpbnQgbGVuZ3RoOyAgICAgICAgICAvKiAwIC4uLiAxMDI0ICovCi0JdWludDhfdCBkYXRhWzEwMjRdOworCV9fdTggZGF0YVsxMDI0XTsKIH0gdmlkZW9fbmF2aV9wYWNrX3Q7CiAKIAotdHlwZWRlZiB1aW50MTZfdCB2aWRlb19hdHRyaWJ1dGVzX3Q7Cit0eXBlZGVmIF9fdTE2IHZpZGVvX2F0dHJpYnV0ZXNfdDsKIC8qICAgYml0czogZGVzY3IuICovCiAvKiAgIDE1LTE0IFZpZGVvIGNvbXByZXNzaW9uIG1vZGUgKDA9TVBFRy0xLCAxPU1QRUctMikgKi8KIC8qICAgMTMtMTIgVFYgc3lzdGVtICgwPTUyNS82MCwgMT02MjUvNTApICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYWJmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaApAQCAtMCwwICsxLDg4IEBACisjaWZuZGVmIF9EWU5BTUlDX0RFQlVHX0gKKyNkZWZpbmUgX0RZTkFNSUNfREVCVUdfSAorCisvKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQ7CitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDI7CisKKy8qCisgKiBBbiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkIGluIGEgc3BlY2lhbAorICogRUxGIHNlY3Rpb24gYXQgZXZlcnkgZHluYW1pYyBkZWJ1ZyBjYWxsc2l0ZS4gIEF0IHJ1bnRpbWUsCisgKiB0aGUgc3BlY2lhbCBzZWN0aW9uIGlzIHRyZWF0ZWQgYXMgYW4gYXJyYXkgb2YgdGhlc2UuCisgKi8KK3N0cnVjdCBfZGRlYnVnIHsKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgdXNlZCB0byBkcml2ZSB0aGUgdXNlciBpbnRlcmZhY2UKKwkgKiBmb3Igc2VsZWN0aW5nIGFuZCBkaXNwbGF5aW5nIGRlYnVnIGNhbGxzaXRlcy4KKwkgKi8KKwljb25zdCBjaGFyICptb2RuYW1lOworCWNvbnN0IGNoYXIgKmZ1bmN0aW9uOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IGNoYXIgKmZvcm1hdDsKKwljaGFyIHByaW1hcnlfaGFzaDsKKwljaGFyIHNlY29uZGFyeV9oYXNoOworCXVuc2lnbmVkIGludCBsaW5lbm86MjQ7CisJLyoKKyAJICogVGhlIGZsYWdzIGZpZWxkIGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgYXQgdGhlIGNhbGxzaXRlLgorIAkgKiBUaGUgYml0cyBoZXJlIGFyZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IHdoZW4gdGhlIHVzZXIKKyAJICogd3JpdGVzIGNvbW1hbmRzIHRvIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZworCSAqLworI2RlZmluZSBfRFBSSU5US19GTEFHU19QUklOVCAgICgxPDwwKSAgLyogcHJpbnRrKCkgYSBtZXNzYWdlIHVzaW5nIHRoZSBmb3JtYXQgKi8KKyNkZWZpbmUgX0RQUklOVEtfRkxBR1NfREVGQVVMVCAwCisJdW5zaWduZWQgaW50IGZsYWdzOjg7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworCitpbnQgZGRlYnVnX2FkZF9tb2R1bGUoc3RydWN0IF9kZGVidWcgKnRhYiwgdW5zaWduZWQgaW50IG4sCisJCQkJY29uc3QgY2hhciAqbW9kbmFtZSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorZXh0ZXJuIGludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjaGFyICptb2RfbmFtZSk7CisKKyNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKGRkKSAgKHsJICAgICBcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJICAgICBcCisJaWYgKHVubGlrZWx5KChkeW5hbWljX2RlYnVnX2VuYWJsZWQgJiAoMUxMIDw8IERFQlVHX0hBU0gpKSAmJgkgICAgIFwKKwkJCShkeW5hbWljX2RlYnVnX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCisJCQkJaWYgKHVubGlrZWx5KGRkLmZsYWdzKSkJCQkgICAgIFwKKwkJCQkJX19yZXQgPSAxOwkJCSAgICAgXAorCV9fcmV0OyB9KQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pIGRvIHsJCQkJCVwKKwlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCisJX191c2VkCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCisJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKKwkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBwcl9mbXQoZm10KSwJXAorCQkJCSMjX19WQV9BUkdTX18pOwkJCQlcCisJfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZtdCwgLi4uKSBkbyB7CQkJCVwKKwlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCisJX191c2VkCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCisJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKKwkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwJCQlcCisJCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgcHJfZm10KGZtdCksXAorCQkJCQkjI19fVkFfQVJHU19fKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDUyOGQwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLSNpZm5kZWYgX0RZTkFNSUNfUFJJTlRLX0gKLSNkZWZpbmUgX0RZTkFNSUNfUFJJTlRLX0gKLQotI2RlZmluZSBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUyA2Ci0jZGVmaW5lIERFQlVHX0hBU0hfVEFCTEVfU0laRSAoMSA8PCBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUykKLQotI2RlZmluZSBUWVBFX0JPT0xFQU4gMQotCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9BTEwgMAotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfTk9ORSAxCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9TT01FIDIKLQotZXh0ZXJuIGludCBkeW5hbWljX2VuYWJsZWQ7Ci0KLS8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKLSAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKLSAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgotICovCi1leHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQ7Ci1leHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOwotCi1zdHJ1Y3QgbW9kX2RlYnVnIHsKLQljaGFyICptb2RuYW1lOwotCWNoYXIgKmxvZ2ljYWxfbW9kbmFtZTsKLQljaGFyICpmbGFnX25hbWVzOwotCWludCB0eXBlOwotCWludCBoYXNoOwotCWludCBoYXNoMjsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotCi1pbnQgcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBjaGFyICpzaGFyZV9uYW1lLAotCQkJCQljaGFyICpmbGFncywgaW50IGhhc2gsIGludCBoYXNoMik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSk7Ci1leHRlcm4gaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCi0JCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpOwotCi0jZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7CSAgICAgXAotCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgXAotCWlmICh1bmxpa2VseSgoZHluYW1pY19wcmludGtfZW5hYmxlZCAmICgxTEwgPDwgREVCVUdfSEFTSCkpICYmCSAgICAgXAotCQkJKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCi0JCQlfX3JldCA9IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIobW9kdWxlLCB0eXBlLCAgIFwKLQkJCQkJCQkJdmFsdWUsIGhhc2gpO1wKLQlfX3JldDsgfSkKLQotI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSBkbyB7CQkJCQkgICAgXAotCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCi0JID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKLQlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCi0JX191c2VkCQkJCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKLQl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKLQlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAotCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCi0JCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBmbXQsCQkgICAgXAotCQkJCSMjX19WQV9BUkdTX18pOwkJCQkgICAgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pIGRvIHsJCQkJICAgIFwKLQlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAotCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCi0Jc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAotCV9fdXNlZAkJCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCi0JeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCi0JaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKLQkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAotCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCQkJICAgIFwKLQkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBmb3JtYXQsCSAgICBcCi0JCQkJCSMjX19WQV9BUkdTX18pOwkJCSAgICBcCi0JfSB3aGlsZSAoMCkKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjb25zdCBjaGFyICptb2RfbmFtZSkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCi0JCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7IDA7IH0pCi0jZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmggYi9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaAppbmRleCA1Y2E1NGQ3Li43NjA1YzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaApAQCAtMTExLDYgKzExMSwxNSBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbGZfY29yZV9jb3B5X2tlcm5lbF9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfS0VSTkVMX1JFR1MKKwlFTEZfQ09SRV9DT1BZX0tFUk5FTF9SRUdTKCgqZWxmcmVncyksIHJlZ3MpOworI2Vsc2UKKwllbGZfY29yZV9jb3B5X3JlZ3MoZWxmcmVncywgcmVncyk7CisjZW5kaWYKK30KKwogc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQogewogI2lmZGVmIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKaW5kZXggY2ViMTQ1NC4uZWMxMmNjNzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIFNPX0VFX09SSUdJTl9MT0NBTAkxCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QCTIKICNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVA2CTMKKyNkZWZpbmUgU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyA0CiAKICNkZWZpbmUgU09fRUVfT0ZGRU5ERVIoZWUpCSgoc3RydWN0IHNvY2thZGRyKikoKGVlKSsxKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCmluZGV4IDFjYjBmMGIuLmExZjE3YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKQEAgLTE4NCw0ICsxODQsMjUgQEAKIH0KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKKy8qKgorICogY29tcGFyZV9ldGhlcl9oZWFkZXIgLSBDb21wYXJlIHR3byBFdGhlcm5ldCBoZWFkZXJzCisgKiBAYTogUG9pbnRlciB0byBFdGhlcm5ldCBoZWFkZXIKKyAqIEBiOiBQb2ludGVyIHRvIEV0aGVybmV0IGhlYWRlcgorICoKKyAqIENvbXBhcmUgdHdvIGV0aGVybmV0IGhlYWRlcnMsIHJldHVybnMgMCBpZiBlcXVhbC4KKyAqIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGhlYWRlciAoaS5lLiwgSVAgaGVhZGVyKSBpcyA0LWJ5dGUKKyAqIGFsaWduZWQgT1IgdGhlIHBsYXRmb3JtIGNhbiBoYW5kbGUgdW5hbGlnbmVkIGFjY2Vzcy4gIFRoaXMgaXMgdGhlCisgKiBjYXNlIGZvciBhbGwgcGFja2V0cyBjb21pbmcgaW50byBuZXRpZl9yZWNlaXZlX3NrYiBvciBzaW1pbGFyCisgKiBlbnRyeSBwb2ludHMuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9ldGhlcl9oZWFkZXIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl1MzIgKmEzMiA9ICh1MzIgKikoKHU4ICopYSArIDIpOworCXUzMiAqYjMyID0gKHUzMiAqKSgodTggKiliICsgMik7CisKKwlyZXR1cm4gKCoodTE2ICopYSBeICoodTE2ICopYikgfCAoYTMyWzBdIF4gYjMyWzBdKSB8CisJICAgICAgIChhMzJbMV0gXiBiMzJbMV0pIHwgKGEzMlsyXSBeIGIzMlsyXSk7Cit9CisKICNlbmRpZgkvKiBfTElOVVhfRVRIRVJERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCAyN2M2N2E1Li4xMzFiMTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtNyw2ICs3LDcgQEAKICAqIFBvcnRpb25zIENvcHlyaWdodCAyMDAyIEludGVsIChlbGkua3VwZXJtYW5uQGludGVsLmNvbSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJpc3RvcGhlci5sZWVjaEBpbnRlbC5jb20sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvdHQuZmVsZG1hbkBpbnRlbC5jb20pCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIFN1biBNaWNyb3N5c3RlbXMgMjAwOAogICovCiAKICNpZm5kZWYgX0xJTlVYX0VUSFRPT0xfSApAQCAtMjg3LDEwICsyODgsNzUgQEAKIAlFVEhfRkxBR19MUk8JCT0gKDEgPDwgMTUpLAkvKiBMUk8gaXMgZW5hYmxlZCAqLwogfTsKIAotc3RydWN0IGV0aHRvb2xfcnhuZmMgewotCV9fdTMyCQljbWQ7CisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgYXJlIGZvciBzdXBwb3J0aW5nIFJYIG5ldHdvcmsgZmxvdworICogY2xhc3NpZmljYXRpb24gY29uZmlndXJhdGlvbi4gTm90ZSwgYWxsIG11bHRpYnl0ZSBmaWVsZHMsIGUuZy4sCisgKiBpcDRzcmMsIGlwNGRzdCwgcHNyYywgcGRzdCwgc3BpLCBldGMuIGFyZSBleHBlY3RlZCB0byBiZSBpbiBuZXR3b3JrCisgKiBieXRlIG9yZGVyLgorICovCitzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fYmUxNglwc3JjOworCV9fYmUxNglwZHN0OworCV9fdTggICAgdG9zOworfTsKKworc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMzIJc3BpOworCV9fdTggICAgdG9zOworfTsKKworc3RydWN0IGV0aHRvb2xfcmF3aXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX3U4CWhkYXRhWzY0XTsKK307CisKK3N0cnVjdCBldGh0b29sX2V0aGVyX3NwZWMgeworCV9fYmUxNglldGhlcl90eXBlOworCV9fdTgJZnJhbWVfc2l6ZTsKKwlfX3U4CWVmcmFtZVsxNl07Cit9OworCisjZGVmaW5lCUVUSF9SWF9ORkNfSVA0CTEKKyNkZWZpbmUJRVRIX1JYX05GQ19JUDYJMgorCitzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fYmUzMglsNF80X2J5dGVzOworCV9fdTggICAgdG9zOworCV9fdTggICAgaXBfdmVyOworCV9fdTggICAgcHJvdG87Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgewogCV9fdTMyCQlmbG93X3R5cGU7Ci0JX191NjQJCWRhdGE7CisJdW5pb24geworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdGNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdWRwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWFoX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJZXNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9yYXdpcDRfc3BlYwkJcmF3X2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9ldGhlcl9zcGVjCQlldGhlcl9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCQlfX3U4CQkJCQloZGF0YVs2NF07CisJfSBoX3UsIG1fdTsgLyogZW50cnksIG1hc2sgKi8KKwlfX3U2NAkJcmluZ19jb29raWU7CisJX191MzIJCWxvY2F0aW9uOworfTsKKworc3RydWN0IGV0aHRvb2xfcnhuZmMgeworCV9fdTMyCQkJCWNtZDsKKwlfX3UzMgkJCQlmbG93X3R5cGU7CisJLyogVGhlIHJ4IGZsb3cgaGFzaCB2YWx1ZSBvciB0aGUgcnVsZSBEQiBzaXplICovCisJX191NjQJCQkJZGF0YTsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMJZnM7CisJX191MzIJCQkJcnVsZV9jbnQ7CisJX191MzIJCQkJcnVsZV9sb2NzWzBdOwogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTQxNyw4ICs0ODMsOCBAQAogCS8qIHRoZSBmb2xsb3dpbmcgaG9va3MgYXJlIG9ic29sZXRlICovCiAJaW50CSgqc2VsZl90ZXN0X2NvdW50KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsvKiB1c2UgZ2V0X3NzZXRfY291bnQgKi8KIAlpbnQJKCpnZXRfc3RhdHNfY291bnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOy8qIHVzZSBnZXRfc3NldF9jb3VudCAqLwotCWludAkoKmdldF9yeGhhc2gpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOwotCWludAkoKnNldF9yeGhhc2gpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOworCWludAkoKmdldF9yeG5mYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKiwgdm9pZCAqKTsKKwlpbnQJKCpzZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOwogfTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKQEAgLTQ2OSw2ICs1MzUsMTIgQEAKICNkZWZpbmUJRVRIVE9PTF9TUlhGSAkJMHgwMDAwMDAyYSAvKiBTZXQgUlggZmxvdyBoYXNoIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRVRIVE9PTF9HR1JPCQkweDAwMDAwMDJiIC8qIEdldCBHUk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLwogI2RlZmluZSBFVEhUT09MX1NHUk8JCTB4MDAwMDAwMmMgLyogU2V0IEdSTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lCUVUSFRPT0xfR1JYUklOR1MJMHgwMDAwMDAyZCAvKiBHZXQgUlggcmluZ3MgYXZhaWxhYmxlIGZvciBMQiAqLworI2RlZmluZQlFVEhUT09MX0dSWENMU1JMQ05UCTB4MDAwMDAwMmUgLyogR2V0IFJYIGNsYXNzIHJ1bGUgY291bnQgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSVUxFCTB4MDAwMDAwMmYgLyogR2V0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSTEFMTAkweDAwMDAwMDMwIC8qIEdldCBhbGwgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZQlFVEhUT09MX1NSWENMU1JMREVMCTB4MDAwMDAwMzEgLyogRGVsZXRlIFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9TUlhDTFNSTElOUwkweDAwMDAwMDMyIC8qIEluc2VydCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCiAKIC8qIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBjb2RlICovCiAjZGVmaW5lIFNQQVJDX0VUSF9HU0VUCQlFVEhUT09MX0dTRVQKQEAgLTU2NSw5ICs2MzcsMTMgQEAKICNkZWZpbmUJVURQX1Y2X0ZMT1cJMHgwNgogI2RlZmluZQlTQ1RQX1Y2X0ZMT1cJMHgwNwogI2RlZmluZQlBSF9FU1BfVjZfRkxPVwkweDA4CisjZGVmaW5lCUFIX1Y0X0ZMT1cJMHgwOQorI2RlZmluZQlFU1BfVjRfRkxPVwkweDBhCisjZGVmaW5lCUFIX1Y2X0ZMT1cJMHgwYgorI2RlZmluZQlFU1BfVjZfRkxPVwkweDBjCisjZGVmaW5lCUlQX1VTRVJfRkxPVwkweDBkCiAKIC8qIEwzLUw0IG5ldHdvcmsgdHJhZmZpYyBmbG93IGhhc2ggb3B0aW9ucyAqLwotI2RlZmluZQlSWEhfREVWX1BPUlQJKDEgPDwgMCkKICNkZWZpbmUJUlhIX0wyREEJKDEgPDwgMSkKICNkZWZpbmUJUlhIX1ZMQU4JKDEgPDwgMikKICNkZWZpbmUJUlhIX0wzX1BST1RPCSgxIDw8IDMpCkBAIC01NzcsNSArNjUzLDYgQEAKICNkZWZpbmUJUlhIX0w0X0JfMl8zCSgxIDw8IDcpIC8qIGRzdCBwb3J0IGluIGNhc2Ugb2YgVENQL1VEUC9TQ1RQICovCiAjZGVmaW5lCVJYSF9ESVNDQVJECSgxIDw8IDMxKQogCisjZGVmaW5lCVJYX0NMU19GTE9XX0RJU0MJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCiAKICNlbmRpZiAvKiBfTElOVVhfRVRIVE9PTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oIGIvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAppbmRleCBmMWUxZDNjLi5mNjg1NmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKQEAgLTYxLDcgKzYxLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfaW5pdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQogewogCUlOSVRfTElTVF9IRUFEKCZmaWxlLT5mX2VwX2xpbmtzKTsKLQlzcGluX2xvY2tfaW5pdCgmZmlsZS0+Zl9lcF9sb2NrKTsKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaCBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCmluZGV4IDRkMDc4ZTkuLmM2YjNjYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCkBAIC0yNSwxMCArMjUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oPgogCi0jZGVmaW5lIEZXX0NERVZfRVZFTlRfQlVTX1JFU0VUCQkweDAwCi0jZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVTUE9OU0UJCTB4MDEKLSNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVFVRVNUCQkweDAyCi0jZGVmaW5lIEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVAkweDAzCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfQlVTX1JFU0VUCQkJMHgwMAorI2RlZmluZSBGV19DREVWX0VWRU5UX1JFU1BPTlNFCQkJMHgwMQorI2RlZmluZSBGV19DREVWX0VWRU5UX1JFUVVFU1QJCQkweDAyCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVAkJMHgwMworI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQJMHgwNAorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRAkweDA1CiAKIC8qKgogICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uIC0gQ29tbW9uIHBhcnQgb2YgYWxsIGZ3X2NkZXZfZXZlbnRfIHR5cGVzCkBAIC0xMzYsNyArMTM4LDI0IEBACiAgKiBUaGlzIGV2ZW50IGlzIHNlbnQgd2hlbiB0aGUgY29udHJvbGxlciBoYXMgY29tcGxldGVkIGFuICZmd19jZGV2X2lzb19wYWNrZXQKICAqIHdpdGggdGhlICVGV19DREVWX0lTT19JTlRFUlJVUFQgYml0IHNldC4gIEluIHRoZSByZWNlaXZlIGNhc2UsIHRoZSBoZWFkZXJzCiAgKiBzdHJpcHBlZCBvZiBhbGwgcGFja2V0cyB1cCB1bnRpbCBhbmQgaW5jbHVkaW5nIHRoZSBpbnRlcnJ1cHQgcGFja2V0IGFyZQotICogcmV0dXJuZWQgaW4gdGhlIEBoZWFkZXIgZmllbGQuCisgKiByZXR1cm5lZCBpbiB0aGUgQGhlYWRlciBmaWVsZC4gIFRoZSBhbW91bnQgb2YgaGVhZGVyIGRhdGEgcGVyIHBhY2tldCBpcyBhcworICogc3BlY2lmaWVkIGF0IGlzbyBjb250ZXh0IGNyZWF0aW9uIGJ5ICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZS4KKyAqCisgKiBJbiB2ZXJzaW9uIDEgb2YgdGhpcyBBQkksIGhlYWRlciBkYXRhIGNvbnNpc3RlZCBvZiB0aGUgMTM5NCBpc29jaHJvbm91cworICogcGFja2V0IGhlYWRlciwgZm9sbG93ZWQgYnkgcXVhZGxldHMgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQgaWYKKyAqICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSA+IDQuCisgKgorICogSW4gdmVyc2lvbiAyIG9mIHRoaXMgQUJJLCBoZWFkZXIgZGF0YSBjb25zaXN0IG9mIHRoZSAxMzk0IGlzb2Nocm9ub3VzCisgKiBwYWNrZXQgaGVhZGVyLCBmb2xsb3dlZCBieSBhIHRpbWVzdGFtcCBxdWFkbGV0IGlmCisgKiAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgPiA0LCBmb2xsb3dlZCBieSBxdWFkbGV0cyBmcm9tIHRoZQorICogcGFja2V0IHBheWxvYWQgaWYgJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplID4gOC4KKyAqCisgKiBCZWhhdmlvdXIgb2YgdmVyLiAxIG9mIHRoaXMgQUJJIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgc2luY2UgQUJJIHZlci4gMi4KKyAqCisgKiBGb3JtYXQgb2YgMTM5NCBpc28gcGFja2V0IGhlYWRlcjogMTYgYml0cyBsZW4sIDIgYml0cyB0YWcsIDYgYml0cyBjaGFubmVsLAorICogNCBiaXRzIHRjb2RlLCA0IGJpdHMgc3ksIGluIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci4gIEZvcm1hdCBvZiB0aW1lc3RhbXA6CisgKiAxNiBiaXRzIGludmFsaWQsIDMgYml0cyBjeWNsZVNlY29uZHMsIDEzIGJpdHMgY3ljbGVDb3VudCwgaW4gYmlnIGVuZGlhbiBieXRlCisgKiBvcmRlci4KICAqLwogc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCB7CiAJX191NjQgY2xvc3VyZTsKQEAgLTE0NywxMiArMTY2LDQ0IEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZSAtIElzbyByZXNvdXJjZXMgd2VyZSBhbGxvY2F0ZWQgb3IgZnJlZWQKKyAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOworICoJCXNldCBieSAlRldfQ0RFVl9JT0NfKERFKUFMTE9DQVRFX0lTT19SRVNPVVJDRShfT05DRSkgaW9jdGwKKyAqIEB0eXBlOgklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIG9yCisgKgkJJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0RFQUxMT0NBVEVECisgKiBAaGFuZGxlOglSZWZlcmVuY2UgYnkgd2hpY2ggYW4gYWxsb2NhdGVkIHJlc291cmNlIGNhbiBiZSBkZWFsbG9jYXRlZAorICogQGNoYW5uZWw6CUlzb2Nocm9ub3VzIGNoYW5uZWwgd2hpY2ggd2FzIChkZSlhbGxvY2F0ZWQsIGlmIGFueQorICogQGJhbmR3aWR0aDoJQmFuZHdpZHRoIGFsbG9jYXRpb24gdW5pdHMgd2hpY2ggd2VyZSAoZGUpYWxsb2NhdGVkLCBpZiBhbnkKKyAqCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIGV2ZW50IGlzIHNlbnQgYWZ0ZXIgYW4gaXNvY2hyb25vdXMKKyAqIHJlc291cmNlIHdhcyBhbGxvY2F0ZWQgYXQgdGhlIElSTS4gIFRoZSBjbGllbnQgaGFzIHRvIGNoZWNrIEBjaGFubmVsIGFuZAorICogQGJhbmR3aWR0aCBmb3Igd2hldGhlciB0aGUgYWxsb2NhdGlvbiBhY3R1YWxseSBzdWNjZWVkZWQuCisgKgorICogQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0RFQUxMT0NBVEVEIGV2ZW50IGlzIHNlbnQgYWZ0ZXIgYW4gaXNvY2hyb25vdXMKKyAqIHJlc291cmNlIHdhcyBkZWFsbG9jYXRlZCBhdCB0aGUgSVJNLiAgSXQgaXMgYWxzbyBzZW50IHdoZW4gYXV0b21hdGljCisgKiByZWFsbG9jYXRpb24gYWZ0ZXIgYSBidXMgcmVzZXQgZmFpbGVkLgorICoKKyAqIEBjaGFubmVsIGlzIDwwIGlmIG5vIGNoYW5uZWwgd2FzIChkZSlhbGxvY2F0ZWQgb3IgaWYgcmVhbGxvY2F0aW9uIGZhaWxlZC4KKyAqIEBiYW5kd2lkdGggaXMgMCBpZiBubyBiYW5kd2lkdGggd2FzIChkZSlhbGxvY2F0ZWQgb3IgaWYgcmVhbGxvY2F0aW9uIGZhaWxlZC4KKyAqLworc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlIHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgaGFuZGxlOworCV9fczMyIGNoYW5uZWw7CisJX19zMzIgYmFuZHdpZHRoOworfTsKKworLyoqCiAgKiB1bmlvbiBmd19jZGV2X2V2ZW50IC0gQ29udmVuaWVuY2UgdW5pb24gb2YgZndfY2Rldl9ldmVudF8gdHlwZXMKICAqIEBjb21tb246ICAgICAgICBWYWxpZCBmb3IgYWxsIHR5cGVzCiAgKiBAYnVzX3Jlc2V0OiAgICAgVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX0JVU19SRVNFVAogICogQHJlc3BvbnNlOiAgICAgIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9SRVNQT05TRQogICogQHJlcXVlc3Q6ICAgICAgIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUCiAgKiBAaXNvX2ludGVycnVwdDogVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQKKyAqIEBpc29fcmVzb3VyY2U6ICBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0KKyAqCQkJCSVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQgb3IKKyAqCQkJCSVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRAogICoKICAqIENvbnZlbmllbmNlIHVuaW9uIGZvciB1c2Vyc3BhY2UgdXNlLiAgRXZlbnRzIGNvdWxkIGJlIHJlYWQoMikgaW50byBhbgogICogYXBwcm9wcmlhdGVseSBhbGlnbmVkIGNoYXIgYnVmZmVyIGFuZCB0aGVuIGNhc3QgdG8gdGhpcyB1bmlvbiBmb3IgZnVydGhlcgpAQCAtMTYzLDMzICsyMTQsNDcgQEAKICAqIG5vdCBmaXQgd2lsbCBiZSBkaXNjYXJkZWQgc28gdGhhdCB0aGUgbmV4dCByZWFkKDIpIHdpbGwgcmV0dXJuIGEgbmV3IGV2ZW50LgogICovCiB1bmlvbiBmd19jZGV2X2V2ZW50IHsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9jb21tb24gY29tbW9uOwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCBidXNfcmVzZXQ7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2U7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCByZXF1ZXN0OwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgaXNvX2ludGVycnVwdDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9jb21tb24JCWNvbW1vbjsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQJCWJ1c19yZXNldDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZQkJcmVzcG9uc2U7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdAkJcmVxdWVzdDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0CWlzb19pbnRlcnJ1cHQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlCWlzb19yZXNvdXJjZTsKIH07CiAKLSNkZWZpbmUgRldfQ0RFVl9JT0NfR0VUX0lORk8JCV9JT1dSKCcjJywgMHgwMCwgc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8pCi0jZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfUkVRVUVTVAlfSU9XKCcjJywgMHgwMSwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0KQotI2RlZmluZSBGV19DREVWX0lPQ19BTExPQ0FURQkJX0lPV1IoJyMnLCAweDAyLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfREVBTExPQ0FURQkJX0lPVygnIycsIDB4MDMsIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUpCi0jZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfUkVTUE9OU0UJX0lPVygnIycsIDB4MDQsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UpCi0jZGVmaW5lIEZXX0NERVZfSU9DX0lOSVRJQVRFX0JVU19SRVNFVAlfSU9XKCcjJywgMHgwNSwgc3RydWN0IGZ3X2NkZXZfaW5pdGlhdGVfYnVzX3Jlc2V0KQotI2RlZmluZSBGV19DREVWX0lPQ19BRERfREVTQ1JJUFRPUglfSU9XUignIycsIDB4MDYsIHN0cnVjdCBmd19jZGV2X2FkZF9kZXNjcmlwdG9yKQotI2RlZmluZSBGV19DREVWX0lPQ19SRU1PVkVfREVTQ1JJUFRPUglfSU9XKCcjJywgMHgwNywgc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IpCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjIyICovCisjZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9JTkZPICAgICAgICAgICBfSU9XUignIycsIDB4MDAsIHN0cnVjdCBmd19jZGV2X2dldF9pbmZvKQorI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1JFUVVFU1QgICAgICAgIF9JT1coJyMnLCAweDAxLCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QpCisjZGVmaW5lIEZXX0NERVZfSU9DX0FMTE9DQVRFICAgICAgICAgICBfSU9XUignIycsIDB4MDIsIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlKQorI2RlZmluZSBGV19DREVWX0lPQ19ERUFMTE9DQVRFICAgICAgICAgIF9JT1coJyMnLCAweDAzLCBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlKQorI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFICAgICAgIF9JT1coJyMnLCAweDA0LCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlKQorI2RlZmluZSBGV19DREVWX0lPQ19JTklUSUFURV9CVVNfUkVTRVQgIF9JT1coJyMnLCAweDA1LCBzdHJ1Y3QgZndfY2Rldl9pbml0aWF0ZV9idXNfcmVzZXQpCisjZGVmaW5lIEZXX0NERVZfSU9DX0FERF9ERVNDUklQVE9SICAgICBfSU9XUignIycsIDB4MDYsIHN0cnVjdCBmd19jZGV2X2FkZF9kZXNjcmlwdG9yKQorI2RlZmluZSBGV19DREVWX0lPQ19SRU1PVkVfREVTQ1JJUFRPUiAgIF9JT1coJyMnLCAweDA3LCBzdHJ1Y3QgZndfY2Rldl9yZW1vdmVfZGVzY3JpcHRvcikKKyNkZWZpbmUgRldfQ0RFVl9JT0NfQ1JFQVRFX0lTT19DT05URVhUIF9JT1dSKCcjJywgMHgwOCwgc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0KQorI2RlZmluZSBGV19DREVWX0lPQ19RVUVVRV9JU08gICAgICAgICAgX0lPV1IoJyMnLCAweDA5LCBzdHJ1Y3QgZndfY2Rldl9xdWV1ZV9pc28pCisjZGVmaW5lIEZXX0NERVZfSU9DX1NUQVJUX0lTTyAgICAgICAgICAgX0lPVygnIycsIDB4MGEsIHN0cnVjdCBmd19jZGV2X3N0YXJ0X2lzbykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU1RPUF9JU08gICAgICAgICAgICBfSU9XKCcjJywgMHgwYiwgc3RydWN0IGZ3X2NkZXZfc3RvcF9pc28pCiAKLSNkZWZpbmUgRldfQ0RFVl9JT0NfQ1JFQVRFX0lTT19DT05URVhUCV9JT1dSKCcjJywgMHgwOCwgc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0KQotI2RlZmluZSBGV19DREVWX0lPQ19RVUVVRV9JU08JCV9JT1dSKCcjJywgMHgwOSwgc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvKQotI2RlZmluZSBGV19DREVWX0lPQ19TVEFSVF9JU08JCV9JT1coJyMnLCAweDBhLCBzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28pCi0jZGVmaW5lIEZXX0NERVZfSU9DX1NUT1BfSVNPCQlfSU9XKCcjJywgMHgwYiwgc3RydWN0IGZ3X2NkZXZfc3RvcF9pc28pCi0jZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUglfSU9SKCcjJywgMHgwYywgc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyKQorLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4yNCAqLworI2RlZmluZSBGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIgICAgIF9JT1IoJyMnLCAweDBjLCBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIpCiAKLS8qIEZXX0NERVZfVkVSU0lPTiBIaXN0b3J5Ci0gKgotICogMQlGZWIgMTgsIDIwMDc6ICBJbml0aWFsIHZlcnNpb24uCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjMwICovCisjZGVmaW5lIEZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRSAgICAgICBfSU9XUignIycsIDB4MGQsIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0UgICAgICBfSU9XKCcjJywgMHgwZSwgc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgICBfSU9XKCcjJywgMHgwZiwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlKQorI2RlZmluZSBGV19DREVWX0lPQ19ERUFMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIF9JT1coJyMnLCAweDEwLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UpCisjZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9TUEVFRCAgICAgICAgICAgICAgICAgICAgIF9JTygnIycsIDB4MTEpIC8qIHJldHVybnMgc3BlZWQgY29kZSAqLworI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX0JST0FEQ0FTVF9SRVFVRVNUICAgICAgIF9JT1coJyMnLCAweDEyLCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QpCisjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfU1RSRUFNX1BBQ0tFVCAgICAgICAgICAgX0lPVygnIycsIDB4MTMsIHN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldCkKKworLyoKKyAqIEZXX0NERVZfVkVSU0lPTiBIaXN0b3J5CisgKiAgMSAgKDIuNi4yMikgIC0gaW5pdGlhbCB2ZXJzaW9uCisgKiAgMiAgKDIuNi4zMCkgIC0gY2hhbmdlZCAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0LmhlYWRlciBpZgorICogICAgICAgICAgICAgICAgICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSBpcyA4IG9yIG1vcmUKICAqLwotI2RlZmluZSBGV19DREVWX1ZFUlNJT04JCTEKKyNkZWZpbmUgRldfQ0RFVl9WRVJTSU9OIDIKIAogLyoqCiAgKiBzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyAtIEdlbmVyYWwgcHVycG9zZSBpbmZvcm1hdGlvbiBpb2N0bApAQCAtMjAxLDcgKzI2Niw3IEBACiAgKgkJY2FzZSwgQHJvbV9sZW5ndGggaXMgdXBkYXRlZCB3aXRoIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZQogICoJCWNvbmZpZ3VyYXRpb24gUk9NLgogICogQHJvbToJSWYgbm9uLXplcm8sIGFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gYmUgZmlsbGVkIGJ5IGEgY29weSBvZiB0aGUKLSAqCQlsb2NhbCBub2RlJ3MgY29uZmlndXJhdGlvbiBST00KKyAqCQlkZXZpY2UncyBjb25maWd1cmF0aW9uIFJPTQogICogQGJ1c19yZXNldDoJSWYgbm9uLXplcm8sIGFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gYmUgZmlsbGVkIGJ5IGEKICAqCQkmc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0IHdpdGggdGhlIGN1cnJlbnQgc3RhdGUKICAqCQlvZiB0aGUgYnVzLiAgVGhpcyBkb2VzIG5vdCBjYXVzZSBhIGJ1cyByZXNldCB0byBoYXBwZW4uCkBAIC0yMjksNyArMjk0LDcgQEAKICAqIFNlbmQgYSByZXF1ZXN0IHRvIHRoZSBkZXZpY2UuICBUaGlzIGlvY3RsIGltcGxlbWVudHMgYWxsIG91dGdvaW5nIHJlcXVlc3RzLgogICogQm90aCBxdWFkbGV0IGFuZCBibG9jayByZXF1ZXN0IHNwZWNpZnkgdGhlIHBheWxvYWQgYXMgYSBwb2ludGVyIHRvIHRoZSBkYXRhCiAgKiBpbiB0aGUgQGRhdGEgZmllbGQuICBPbmNlIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0ZXMsIHRoZSBrZXJuZWwgd3JpdGVzIGFuCi0gKiAmZndfY2Rldl9ldmVudF9yZXF1ZXN0IGV2ZW50IGJhY2suICBUaGUgQGNsb3N1cmUgZmllbGQgaXMgcGFzc2VkIGJhY2sgdG8KKyAqICZmd19jZGV2X2V2ZW50X3Jlc3BvbnNlIGV2ZW50IGJhY2suICBUaGUgQGNsb3N1cmUgZmllbGQgaXMgcGFzc2VkIGJhY2sgdG8KICAqIHVzZXIgc3BhY2UgaW4gdGhlIHJlc3BvbnNlIGV2ZW50LgogICovCiBzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgewpAQCAtMjg0LDkgKzM0OSw5IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgLSBGcmVlIGFuIGFkZHJlc3MgcmFuZ2UgYWxsb2NhdGlvbgotICogQGhhbmRsZToJSGFuZGxlIHRvIHRoZSBhZGRyZXNzIHJhbmdlLCBhcyByZXR1cm5lZCBieSB0aGUga2VybmVsIHdoZW4gdGhlCi0gKgkJcmFuZ2Ugd2FzIGFsbG9jYXRlZAorICogc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSAtIEZyZWUgYSBDU1IgYWRkcmVzcyByYW5nZSBvciBpc29jaHJvbm91cyByZXNvdXJjZQorICogQGhhbmRsZToJSGFuZGxlIHRvIHRoZSBhZGRyZXNzIHJhbmdlIG9yIGlzbyByZXNvdXJjZSwgYXMgcmV0dXJuZWQgYnkgdGhlCisgKgkJa2VybmVsIHdoZW4gdGhlIHJhbmdlIG9yIHJlc291cmNlIHdhcyBhbGxvY2F0ZWQKICAqLwogc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSB7CiAJX191MzIgaGFuZGxlOwpAQCAtMzI5LDYgKzM5NCw5IEBACiAgKiBJZiBzdWNjZXNzZnVsLCB0aGUga2VybmVsIGFkZHMgdGhlIGRlc2NyaXB0b3IgYW5kIHdyaXRlcyBiYWNrIGEgaGFuZGxlIHRvIHRoZQogICoga2VybmVsLXNpZGUgb2JqZWN0IHRvIGJlIHVzZWQgZm9yIGxhdGVyIHJlbW92YWwgb2YgdGhlIGRlc2NyaXB0b3IgYmxvY2sgYW5kCiAgKiBpbW1lZGlhdGUga2V5LgorICoKKyAqIFRoaXMgaW9jdGwgYWZmZWN0cyB0aGUgY29uZmlndXJhdGlvbiBST01zIG9mIGFsbCBsb2NhbCBub2Rlcy4KKyAqIFRoZSBpb2N0bCBvbmx5IHN1Y2NlZWRzIG9uIGRldmljZSBmaWxlcyB3aGljaCByZXByZXNlbnQgYSBsb2NhbCBub2RlLgogICovCiBzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvciB7CiAJX191MzIgaW1tZWRpYXRlOwpAQCAtMzQ0LDcgKzQxMiw3IEBACiAgKgkJZGVzY3JpcHRvciB3YXMgYWRkZWQKICAqCiAgKiBSZW1vdmUgYSBkZXNjcmlwdG9yIGJsb2NrIGFuZCBhY2NvbXBhbnlpbmcgaW1tZWRpYXRlIGtleSBmcm9tIHRoZSBsb2NhbAotICogbm9kZSdzIGNvbmZpZ3VyYXRpb24gUk9NLgorICogbm9kZXMnIGNvbmZpZ3VyYXRpb24gUk9Ncy4KICAqLwogc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IgewogCV9fdTMyIGhhbmRsZTsKQEAgLTM3MCw2ICs0MzgsOSBAQAogICoKICAqIElmIGEgY29udGV4dCB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgYSBoYW5kbGUgdG8gdGhlCiAgKiBjb250ZXh0LCB3aGljaCBtdXN0IGJlIHBhc3NlZCBpbiBmb3Igc3Vic2VxdWVudCBvcGVyYXRpb25zIG9uIHRoYXQgY29udGV4dC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGVmZmVjdCBvZiBhIEBoZWFkZXJfc2l6ZSA+IDQgZGVwZW5kcyBvbgorICogJmZ3X2NkZXZfZ2V0X2luZm8udmVyc2lvbiwgYXMgZG9jdW1lbnRlZCBhdCAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0LgogICovCiBzdHJ1Y3QgZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQgewogCV9fdTMyIHR5cGU7CkBAIC00NzMsMTAgKzU0NCw5MSBAQAogICogVGhlICVGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIgaW9jdGwgcmVhZHMgdGhlIGlzb2Nocm9ub3VzIGN5Y2xlIHRpbWVyCiAgKiBhbmQgYWxzbyB0aGUgc3lzdGVtIGNsb2NrLiAgVGhpcyBhbGxvd3MgdG8gZXhwcmVzcyB0aGUgcmVjZWl2ZSB0aW1lIG9mIGFuCiAgKiBpc29jaHJvbm91cyBwYWNrZXQgYXMgYSBzeXN0ZW0gdGltZSB3aXRoIG1pY3Jvc2Vjb25kIGFjY3VyYWN5LgorICoKKyAqIEBjeWNsZV90aW1lciBjb25zaXN0cyBvZiA3IGJpdHMgY3ljbGVTZWNvbmRzLCAxMyBiaXRzIGN5Y2xlQ291bnQsIGFuZAorICogMTIgYml0cyBjeWNsZU9mZnNldCwgaW4gaG9zdCBieXRlIG9yZGVyLgogICovCiBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIgewogCV9fdTY0IGxvY2FsX3RpbWU7CiAJX191MzIgY3ljbGVfdGltZXI7CiB9OwogCisvKioKKyAqIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAtIChEZSlhbGxvY2F0ZSBhIGNoYW5uZWwgb3IgYmFuZHdpZHRoCisgKiBAY2xvc3VyZToJUGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIGNvcnJlcG9uZGluZyBpc28gcmVzb3VyY2UgZXZlbnRzCisgKiBAY2hhbm5lbHM6CUlzb2Nocm9ub3VzIGNoYW5uZWxzIG9mIHdoaWNoIG9uZSBpcyB0byBiZSAoZGUpYWxsb2NhdGVkCisgKiBAYmFuZHdpZHRoOglJc29jaHJvbm91cyBiYW5kd2lkdGggdW5pdHMgdG8gYmUgKGRlKWFsbG9jYXRlZAorICogQGhhbmRsZToJSGFuZGxlIHRvIHRoZSBhbGxvY2F0aW9uLCB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgKG9ubHkgdmFsaWQgaW4KKyAqCQljYXNlIG9mICVGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0UgaW9jdGxzKQorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFIGlvY3RsIGluaXRpYXRlcyBhbGxvY2F0aW9uIG9mIGFuCisgKiBpc29jaHJvbm91cyBjaGFubmVsIGFuZC9vciBvZiBpc29jaHJvbm91cyBiYW5kd2lkdGggYXQgdGhlIGlzb2Nocm9ub3VzCisgKiByZXNvdXJjZSBtYW5hZ2VyIChJUk0pLiAgT25seSBvbmUgb2YgdGhlIGNoYW5uZWxzIHNwZWNpZmllZCBpbiBAY2hhbm5lbHMgaXMKKyAqIGFsbG9jYXRlZC4gIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQgaXMgc2VudCBhZnRlcgorICogY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBJUk0sIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIGluIHRoZSBldmVudCBkYXRhLgorICogVGhlIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzIGFmdGVyIGJ1cyByZXNldHMuCisgKiBTaG91bGQgYSByZWFsbG9jYXRpb24gZmFpbCwgYW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0RFQUxMT0NBVEVEIGV2ZW50CisgKiB3aWxsIGJlIHNlbnQuICBUaGUga2VybmVsIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IGRlYWxsb2NhdGUgdGhlIHJlc291cmNlcworICogd2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNsb3NlZC4KKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFIGlvY3RsIGNhbiBiZSB1c2VkIHRvIGluaXRpYXRlCisgKiBkZWFsbG9jYXRpb24gb2YgcmVzb3VyY2VzIHdoaWNoIHdlcmUgYWxsb2NhdGVkIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRCBldmVudCBjb25jbHVkZXMgdGhpcyBvcGVyYXRpb24uCisgKgorICogVGhlICVGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSBpb2N0bCBpcyBhIHZhcmlhbnQgb2YgYWxsb2NhdGlvbgorICogd2l0aG91dCBhdXRvbWF0aWMgcmUtIG9yIGRlYWxsb2NhdGlvbi4KKyAqIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQgZXZlbnQgY29uY2x1ZGVzIHRoaXMgb3BlcmF0aW9uLAorICogaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgaW4gaXRzIGRhdGEuCisgKgorICogVGhlICVGV19DREVWX0lPQ19ERUFMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIGlvY3RsIHdvcmtzIGxpa2UKKyAqICVGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSBleGNlcHQgdGhhdCByZXNvdXJjZXMgYXJlIGZyZWVkCisgKiBpbnN0ZWFkIG9mIGFsbG9jYXRlZC4KKyAqIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRCBldmVudCBjb25jbHVkZXMgdGhpcyBvcGVyYXRpb24uCisgKgorICogVG8gc3VtbWFyaXplLCAlRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0UgYWxsb2NhdGVzIGlzbyByZXNvdXJjZXMKKyAqIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGZkIG9yIGhhbmRsZS4KKyAqIEluIGNvbnRyYXN0LCAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgYWxsb2NhdGVzIGlzbyByZXNvdXJjZXMKKyAqIGZvciB0aGUgZHVyYXRpb24gb2YgYSBidXMgZ2VuZXJhdGlvbi4KKyAqCisgKiBAY2hhbm5lbHMgaXMgYSBob3N0LWVuZGlhbiBiaXRmaWVsZCB3aXRoIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKyAqIHJlcHJlc2VudGluZyBjaGFubmVsIDAgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCByZXByZXNlbnRpbmcgY2hhbm5lbCA2MzoKKyAqIDFVTEwgPDwgYyBmb3IgZWFjaCBjaGFubmVsIGMgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgKGRlKWFsbG9jYXRpb24uCisgKgorICogQGJhbmR3aWR0aCBpcyBleHByZXNzZWQgaW4gYmFuZHdpZHRoIGFsbG9jYXRpb24gdW5pdHMsIGkuZS4gdGhlIHRpbWUgdG8gc2VuZAorICogb25lIHF1YWRsZXQgb2YgZGF0YSAocGF5bG9hZCBvciBoZWFkZXIgZGF0YSkgYXQgc3BlZWQgUzE2MDAuCisgKi8KK3N0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSB7CisJX191NjQgY2xvc3VyZTsKKwlfX3U2NCBjaGFubmVsczsKKwlfX3UzMiBiYW5kd2lkdGg7CisJX191MzIgaGFuZGxlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQgLSBzZW5kIGFuIGFzeW5jaHJvbm91cyBzdHJlYW0gcGFja2V0CisgKiBAbGVuZ3RoOglMZW5ndGggb2Ygb3V0Z29pbmcgcGF5bG9hZCwgaW4gYnl0ZXMKKyAqIEB0YWc6CURhdGEgZm9ybWF0IHRhZworICogQGNoYW5uZWw6CUlzb2Nocm9ub3VzIGNoYW5uZWwgdG8gdHJhbnNtaXQgdG8KKyAqIEBzeToJCVN5bmNocm9uaXphdGlvbiBjb2RlCisgKiBAY2xvc3VyZToJUGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIHRoZSByZXNwb25zZSBldmVudAorICogQGRhdGE6CVVzZXJzcGFjZSBwb2ludGVyIHRvIHBheWxvYWQKKyAqIEBnZW5lcmF0aW9uOglUaGUgYnVzIGdlbmVyYXRpb24gd2hlcmUgcGFja2V0IGlzIHZhbGlkCisgKiBAc3BlZWQ6CVNwZWVkIHRvIHRyYW5zbWl0IGF0CisgKgorICogVGhlICVGV19DREVWX0lPQ19TRU5EX1NUUkVBTV9QQUNLRVQgaW9jdGwgc2VuZHMgYW4gYXN5bmNocm9ub3VzIHN0cmVhbSBwYWNrZXQKKyAqIHRvIGV2ZXJ5IGRldmljZSB3aGljaCBpcyBsaXN0ZW5pbmcgdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLiAgVGhlIGtlcm5lbAorICogd3JpdGVzIGFuICZmd19jZGV2X2V2ZW50X3Jlc3BvbnNlIGV2ZW50IHdoaWNoIGluZGljYXRlcyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YKKyAqIHRoZSB0cmFuc21pc3Npb24uCisgKi8KK3N0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldCB7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIHRhZzsKKwlfX3UzMiBjaGFubmVsOworCV9fdTMyIHN5OworCV9fdTY0IGNsb3N1cmU7CisJX191NjQgZGF0YTsKKwlfX3UzMiBnZW5lcmF0aW9uOworCV9fdTMyIHNwZWVkOworfTsKKwogI2VuZGlmIC8qIF9MSU5VWF9GSVJFV0lSRV9DREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA5MjczNGMwLi40MjQzNmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xNDEsNiArMTQxLDcgQEAKICNkZWZpbmUgTVNfUkVMQVRJTUUJKDE8PDIxKQkvKiBVcGRhdGUgYXRpbWUgcmVsYXRpdmUgdG8gbXRpbWUvY3RpbWUuICovCiAjZGVmaW5lIE1TX0tFUk5NT1VOVAkoMTw8MjIpIC8qIHRoaXMgaXMgYSBrZXJuX21vdW50IGNhbGwgKi8KICNkZWZpbmUgTVNfSV9WRVJTSU9OCSgxPDwyMykgLyogVXBkYXRlIGlub2RlIElfdmVyc2lvbiBmaWVsZCAqLworI2RlZmluZSBNU19TVFJJQ1RBVElNRQkoMTw8MjQpIC8qIEFsd2F5cyBwZXJmb3JtIGF0aW1lIHVwZGF0ZXMgKi8KICNkZWZpbmUgTVNfQUNUSVZFCSgxPDwzMCkKICNkZWZpbmUgTVNfTk9VU0VSCSgxPDwzMSkKIApAQCAtODQ4LDYgKzg0OSw3IEBACiAjZGVmaW5lIGZfZGVudHJ5CWZfcGF0aC5kZW50cnkKICNkZWZpbmUgZl92ZnNtbnQJZl9wYXRoLm1udAogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMJKmZfb3A7CisJc3BpbmxvY2tfdAkJZl9sb2NrOyAgLyogZl9lcF9saW5rcywgZl9mbGFncyAqLwogCWF0b21pY19sb25nX3QJCWZfY291bnQ7CiAJdW5zaWduZWQgaW50IAkJZl9mbGFnczsKIAlmbW9kZV90CQkJZl9tb2RlOwpAQCAtODY2LDcgKzg2OCw2IEBACiAjaWZkZWYgQ09ORklHX0VQT0xMCiAJLyogVXNlZCBieSBmcy9ldmVudHBvbGwuYyB0byBsaW5rIGFsbCB0aGUgaG9va3MgdG8gdGhpcyBmaWxlICovCiAJc3RydWN0IGxpc3RfaGVhZAlmX2VwX2xpbmtzOwotCXNwaW5sb2NrX3QJCWZfZXBfbG9jazsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0VQT0xMICovCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmZfbWFwcGluZzsKICNpZmRlZiBDT05GSUdfREVCVUdfV1JJVEVDT1VOVApAQCAtMTA2MywzNCArMTA2NCwxNDcgQEAKIGV4dGVybiBpbnQgbG9ja19tYXlfcmVhZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIGV4dGVybiBpbnQgbG9ja19tYXlfd3JpdGUoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAjZWxzZSAvKiAhQ09ORklHX0ZJTEVfTE9DS0lORyAqLwotI2RlZmluZSBmY250bF9nZXRsayhhLCBiKSAoeyAtRUlOVkFMOyB9KQotI2RlZmluZSBmY250bF9zZXRsayhhLCBiLCBjLCBkKSAoeyAtRUFDQ0VTOyB9KQorc3RhdGljIGlubGluZSBpbnQgZmNudGxfZ2V0bGsoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmbG9jayBfX3VzZXIgKnVzZXIpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX3NldGxrKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2sgX191c2VyICp1c2VyKQoreworCXJldHVybiAtRUFDQ0VTOworfQorCiAjaWYgQklUU19QRVJfTE9ORyA9PSAzMgotI2RlZmluZSBmY250bF9nZXRsazY0KGEsIGIpICh7IC1FSU5WQUw7IH0pCi0jZGVmaW5lIGZjbnRsX3NldGxrNjQoYSwgYiwgYywgZCkgKHsgLUVBQ0NFUzsgfSkKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX2dldGxrNjQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmbG9jazY0IF9fdXNlciAqdXNlcikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmNudGxfc2V0bGs2NCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBmbG9jazY0IF9fdXNlciAqdXNlcikKK3sKKwlyZXR1cm4gLUVBQ0NFUzsKK30KICNlbmRpZgotI2RlZmluZSBmY250bF9zZXRsZWFzZShhLCBiLCBjKSAoeyAwOyB9KQotI2RlZmluZSBmY250bF9nZXRsZWFzZShhKSAoeyAwOyB9KQotI2RlZmluZSBsb2Nrc19pbml0X2xvY2soYSkgKHsgfSkKLSNkZWZpbmUgX19sb2Nrc19jb3B5X2xvY2soYSwgYikgKHsgfSkKLSNkZWZpbmUgbG9ja3NfY29weV9sb2NrKGEsIGIpICh7IH0pCi0jZGVmaW5lIGxvY2tzX3JlbW92ZV9wb3NpeChhLCBiKSAoeyB9KQotI2RlZmluZSBsb2Nrc19yZW1vdmVfZmxvY2soYSkgKHsgfSkKLSNkZWZpbmUgcG9zaXhfdGVzdF9sb2NrKGEsIGIpICh7IDA7IH0pCi0jZGVmaW5lIHBvc2l4X2xvY2tfZmlsZShhLCBiLCBjKSAoeyAtRU5PTENLOyB9KQotI2RlZmluZSBwb3NpeF9sb2NrX2ZpbGVfd2FpdChhLCBiKSAoeyAtRU5PTENLOyB9KQotI2RlZmluZSBwb3NpeF91bmJsb2NrX2xvY2soYSwgYikgKC1FTk9FTlQpCi0jZGVmaW5lIHZmc190ZXN0X2xvY2soYSwgYikgKHsgMDsgfSkKLSNkZWZpbmUgdmZzX2xvY2tfZmlsZShhLCBiLCBjLCBkKSAoLUVOT0xDSykKLSNkZWZpbmUgdmZzX2NhbmNlbF9sb2NrKGEsIGIpICh7IDA7IH0pCi0jZGVmaW5lIGZsb2NrX2xvY2tfZmlsZV93YWl0KGEsIGIpICh7IC1FTk9MQ0s7IH0pCi0jZGVmaW5lIF9fYnJlYWtfbGVhc2UoYSwgYikgKHsgMDsgfSkKLSNkZWZpbmUgbGVhc2VfZ2V0X210aW1lKGEsIGIpICh7IH0pCi0jZGVmaW5lIGdlbmVyaWNfc2V0bGVhc2UoYSwgYiwgYykgKHsgLUVJTlZBTDsgfSkKLSNkZWZpbmUgdmZzX3NldGxlYXNlKGEsIGIsIGMpICh7IC1FSU5WQUw7IH0pCi0jZGVmaW5lIGxlYXNlX21vZGlmeShhLCBiKSAoeyAtRUlOVkFMOyB9KQotI2RlZmluZSBsb2NrX21heV9yZWFkKGEsIGIsIGMpICh7IDE7IH0pCi0jZGVmaW5lIGxvY2tfbWF5X3dyaXRlKGEsIGIsIGMpICh7IDE7IH0pCitzdGF0aWMgaW5saW5lIGludCBmY250bF9zZXRsZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBsb25nIGFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmNudGxfZ2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19sb2Nrc19jb3B5X2xvY2soc3RydWN0IGZpbGVfbG9jayAqbmV3LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2Nrc19jb3B5X2xvY2soc3RydWN0IGZpbGVfbG9jayAqbmV3LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2Nrc19yZW1vdmVfcG9zaXgoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3Qgb3duZXIpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfcmVtb3ZlX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvc2l4X3Rlc3RfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLAorCQkJCSAgc3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spCit7CisJcmV0dXJuIC1FTk9MQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvc2l4X2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlyZXR1cm4gLUVOT0xDSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9zaXhfdW5ibG9ja19sb2NrKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSAgICAgc3RydWN0IGZpbGVfbG9jayAqd2FpdGVyKQoreworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnNfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQlzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IGZpbGVfbG9jayAqY29uZikKK3sKKwlyZXR1cm4gLUVOT0xDSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX2NhbmNlbF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmxvY2tfbG9ja19maWxlX3dhaXQoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJICAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKnJlcXVlc3QpCit7CisJcmV0dXJuIC1FTk9MQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRpbWVzcGVjICp0aW1lKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2VuZXJpY19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgbG9uZyBhcmcsCisJCQkJICAgIHN0cnVjdCBmaWxlX2xvY2sgKipmbHApCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgbG9uZyBhcmcsCisJCQkgICAgICAgc3RydWN0IGZpbGVfbG9jayAqKmxlYXNlKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBsZWFzZV9tb2RpZnkoc3RydWN0IGZpbGVfbG9jayAqKmJlZm9yZSwgaW50IGFyZykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9ja19tYXlfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsCisJCQkJdW5zaWduZWQgbG9uZyBsZW4pCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tfbWF5X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwKKwkJCQkgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJcmV0dXJuIDE7Cit9CisKICNlbmRpZiAvKiAhQ09ORklHX0ZJTEVfTE9DS0lORyAqLwogCiAKQEAgLTE2MDYsNyArMTcyMCw3IEBACiBleHRlcm4gaW50IGdldF9zYl9wc2V1ZG8oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwgY2hhciAqLAogCWNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpvcHMsIHVuc2lnbmVkIGxvbmcsCiAJc3RydWN0IHZmc21vdW50ICptbnQpOwotZXh0ZXJuIGludCBzaW1wbGVfc2V0X21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gdm9pZCBzaW1wbGVfc2V0X21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBpbnQgX19wdXRfc3VwZXJfYW5kX25lZWRfcmVzdGFydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogLyogQWxhcywgbm8gYWxpYXNlcy4gVG9vIG11Y2ggaGFzc2xlIHdpdGggYnJpbmdpbmcgbW9kdWxlLmggZXZlcnl3aGVyZSAqLwpAQCAtMTY4NywxMyArMTgwMSw0NCBAQAogCXJldHVybiAwOwogfQogI2Vsc2UgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KLSNkZWZpbmUgbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChhKSAoeyAwOyB9KQotI2RlZmluZSBsb2Nrc19tYW5kYXRvcnlfYXJlYShhLCBiLCBjLCBkLCBlKSAoeyAwOyB9KQotI2RlZmluZSBfX21hbmRhdG9yeV9sb2NrKGEpICh7IDA7IH0pCi0jZGVmaW5lIG1hbmRhdG9yeV9sb2NrKGEpICh7IDA7IH0pCi0jZGVmaW5lIGxvY2tzX3ZlcmlmeV9sb2NrZWQoYSkgKHsgMDsgfSkKLSNkZWZpbmUgbG9ja3NfdmVyaWZ5X3RydW5jYXRlKGEsIGIsIGMpICh7IDA7IH0pCi0jZGVmaW5lIGJyZWFrX2xlYXNlKGEsIGIpICh7IDA7IH0pCitzdGF0aWMgaW5saW5lIGludCBsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tzX21hbmRhdG9yeV9hcmVhKGludCBydywgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBvZmZzZXQsCisJCQkJICAgICAgIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tYW5kYXRvcnlfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYW5kYXRvcnlfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJyZWFrX2xlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX0ZJTEVfTE9DS0lORyAqLwogCiAvKiBmcy9vcGVuLmMgKi8KQEAgLTE3MzAsNiArMTg3NSwxMyBAQAogZXh0ZXJuIHZvaWQgYmRfZm9yZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgYmRwdXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2J5X2Rldm51bShkZXZfdCwgZm1vZGVfdCk7CitleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKK2V4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CitleHRlcm4gaW50IHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2V4dGVybiBpbnQgZnN5bmNfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBmc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gaW50IGZzeW5jX25vX3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQogI2VuZGlmCkBAIC0xODgxLDcgKzIwMzMsNiBAQAogCWlmIChmaWxlKQogCQlhdG9taWNfaW5jKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQpOwogfQotZXh0ZXJuIGludCBkb19waXBlKGludCAqKTsKIGV4dGVybiBpbnQgZG9fcGlwZV9mbGFncyhpbnQgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgZmlsZSAqY3JlYXRlX3JlYWRfcGlwZShzdHJ1Y3QgZmlsZSAqZiwgaW50IGZsYWdzKTsKIGV4dGVybiBzdHJ1Y3QgZmlsZSAqY3JlYXRlX3dyaXRlX3BpcGUoaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCmluZGV4IGE5N2MwNTMuLjE4YjQ2N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaApAQCAtNCw3ICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgogCiBzdHJ1Y3QgZnNfc3RydWN0IHsKLQlhdG9taWNfdCBjb3VudDsKKwlhdG9taWNfdCBjb3VudDsJLyogVGhpcyB1c2FnZSBjb3VudCBpcyB1c2VkIGJ5IGNoZWNrX3Vuc2FmZV9leGVjKCkgZm9yCisJCQkgKiBzZWN1cml0eSBjaGVja2luZyBwdXJwb3NlcyAtIHRoZXJlZm9yZSBpdCBtYXkgbm90IGJlCisJCQkgKiBpbmNyZW1lbnRlZCwgZXhjZXB0IGJ5IGNsb25lKENMT05FX0ZTKS4KKwkJCSAqLwogCXJ3bG9ja190IGxvY2s7CiAJaW50IHVtYXNrOwogCXN0cnVjdCBwYXRoIHJvb3QsIHB3ZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmggYi9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCmluZGV4IDEzZjRlNzQuLjBmZmE0MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaApAQCAtMjIsNyArMjIsNyBAQAogewogCV9fdTY0CWJ5dGVzOwogCV9fdTMyCXBhY2tldHM7Ci19OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgogICogc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QgLSByYXRlIGVzdGltYXRvcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDE2OTQ4ZWEuLjYzNGM1MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTMzMywxMSArMzMzLDEwIEBACiAJCXBhcnRfdG9fZGlzayhwYXJ0KS0+cGFydDAuaW5fZmxpZ2h0LS07CiB9CiAKLS8qIGRyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMgKi8KKy8qIGJsb2NrL2Jsay1jb3JlLmMgKi8KIGV4dGVybiB2b2lkIHBhcnRfcm91bmRfc3RhdHMoaW50IGNwdSwgc3RydWN0IGhkX3N0cnVjdCAqcGFydCk7CiAKLS8qIGRyaXZlcnMvYmxvY2svZ2VuaGQuYyAqLwotZXh0ZXJuIGludCBnZXRfYmxrZGV2X2xpc3QoY2hhciAqLCBpbnQpOworLyogYmxvY2svZ2VuaGQuYyAqLwogZXh0ZXJuIHZvaWQgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOwogZXh0ZXJuIHZvaWQgZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdwKTsKIGV4dGVybiB2b2lkIHVubGlua19nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaGRsYy5oCmluZGV4IGZkNDdhMTUuLjZhNmU3MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsYy5oCkBAIC0zOCw2ICszOCw3IEBACiAJaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKIAlfX2JlMTYgKCp0eXBlX3RyYW5zKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQgKCpuZXRpZl9yeCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCXN0cnVjdCBoZGxjX3Byb3RvICpuZXh0OyAvKiBuZXh0IHByb3RvY29sIGluIHRoZSBsaXN0ICovCiB9OwpAQCAtMTAyLDYgKzEwMywxMCBAQAogaW50IGhkbGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCAqLwogdm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyICovCitpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKKy8qIE11c3QgYmUgcG9pbnRlZCB0byBieSBodyBkcml2ZXIncyBkZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0ICovCitpbnQgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgYXR0YWNoX2hkbGNfcHJvdG9jb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvLAogCQkJIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oIGIvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKaW5kZXggYmY2MzAyZi4uYzAxMGI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKKysrIGIvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKQEAgLTIxNSw3ICsyMTUsNyBAQAogCiAJc3RydWN0IGhkbGNkcnZfaGRsY3R4IHsKIAkJc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciBoYnVmOwotCQlsb25nIGluX2hkbGNfdHg7CisJCXVuc2lnbmVkIGxvbmcgaW5faGRsY190eDsKIAkJLyoKIAkJICogMCA9IHNlbmQgZmxhZ3MKIAkJICogMSA9IHNlbmQgdHh0YWlsIChmbGFncykKQEAgLTI0MSw3ICsyNDEsNiBAQAogCXN0cnVjdCBoZGxjZHJ2X2JpdGJ1ZmZlciBiaXRidWZfaGRsYzsKICNlbmRpZiAvKiBIRExDRFJWX0RFQlVHICovCiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlpbnQgcHR0X2tleWVkOwogCiAJLyogcXVldWVkIHNrYiBmb3IgdHJhbnNtaXNzaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCA2YWM3Nzk1Li5hNzI4NzZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTI3MCw2ICsyNzAsNyBAQAogCiAjZGVmaW5lIEhJRF9RVUlSS19JTlZFUlQJCQkweDAwMDAwMDAxCiAjZGVmaW5lIEhJRF9RVUlSS19OT1RPVUNICQkJMHgwMDAwMDAwMgorI2RlZmluZSBISURfUVVJUktfSUdOT1JFCQkJMHgwMDAwMDAwNAogI2RlZmluZSBISURfUVVJUktfTk9HRVQJCQkJMHgwMDAwMDAwOAogI2RlZmluZSBISURfUVVJUktfQkFEUEFECQkJMHgwMDAwMDAyMAogI2RlZmluZSBISURfUVVJUktfTVVMVElfSU5QVVQJCQkweDAwMDAwMDQwCkBAIC03OTcsMjEgKzc5OCw1IEBACiAJCV9fRklMRV9fICwgIyMgYXJnKQogI2VuZGlmIC8qIEhJRF9GRiAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCi0jZGVmaW5lIEhJRF9DT01QQVRfTE9BRF9EUklWRVIobmFtZSkJXAotLyogcHJvdG90eXBlIHRvIGF2b2lkIHNwYXJzZSB3YXJuaW5nICovCVwKLWV4dGVybiB2b2lkIGhpZF9jb21wYXRfIyNuYW1lKHZvaWQpOwlcCi12b2lkIGhpZF9jb21wYXRfIyNuYW1lKHZvaWQpIHsgfQlcCi1FWFBPUlRfU1lNQk9MKGhpZF9jb21wYXRfIyNuYW1lKQotI2Vsc2UKLSNkZWZpbmUgSElEX0NPTVBBVF9MT0FEX0RSSVZFUihuYW1lKQotI2VuZGlmIC8qIEhJRF9DT01QQVQgKi8KLSNkZWZpbmUgSElEX0NPTVBBVF9DQUxMX0RSSVZFUihuYW1lKQlkbyB7CVwKLQlleHRlcm4gdm9pZCBoaWRfY29tcGF0XyMjbmFtZSh2b2lkKTsJXAotCWhpZF9jb21wYXRfIyNuYW1lKCk7CQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2EuaAppbmRleCBhZGNiM2RjLi4xMzY0ZDYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmgKQEAgLTEsNyArMSwxNCBAQAogI2lmbmRlZiBfTElOVVhfSTJDX0FMR09fUENBX0gKICNkZWZpbmUgX0xJTlVYX0kyQ19BTEdPX1BDQV9ICiAKLS8qIENsb2NrIHNwZWVkcyBmb3IgdGhlIGJ1cyAqLworLyogQ2hpcHMga25vd24gdG8gdGhlIHBjYSBhbGdvICovCisjZGVmaW5lIEkyQ19QQ0FfQ0hJUF85NTY0CTB4MDAKKyNkZWZpbmUgSTJDX1BDQV9DSElQXzk2NjUJMHgwMQorCisvKiBJbnRlcm5hbCBwZXJpb2QgZm9yIFBDQTk2NjUgb3NjaWxhdG9yICovCisjZGVmaW5lIEkyQ19QQ0FfT1NDX1BFUgkJMyAvKiBlMTAtOHMgKi8KKworLyogQ2xvY2sgc3BlZWRzIGZvciB0aGUgYnVzIGZvciBQQ0E5NTY0Ki8KICNkZWZpbmUgSTJDX1BDQV9DT05fMzMwa0h6CTB4MDAKICNkZWZpbmUgSTJDX1BDQV9DT05fMjg4a0h6CTB4MDEKICNkZWZpbmUgSTJDX1BDQV9DT05fMjE3a0h6CTB4MDIKQEAgLTE4LDYgKzI1LDI2IEBACiAjZGVmaW5lIEkyQ19QQ0FfQURSCQkweDAyIC8qIE9XTiBBRFIgUmVhZC9Xcml0ZSAqLwogI2RlZmluZSBJMkNfUENBX0NPTgkJMHgwMyAvKiBDT05UUk9MIFJlYWQvV3JpdGUgKi8KIAorLyogUENBOTY2NSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSTJDX1BDQV9JTkRQVFIgICAgICAgICAgMHgwMCAvKiBJTkRJUkVDVCBQb2ludGVyIFdyaXRlIE9ubHkgKi8KKyNkZWZpbmUgSTJDX1BDQV9JTkQgICAgICAgICAgICAgMHgwMiAvKiBJTkRJUkVDVCBSZWFkL1dyaXRlICovCisKKy8qIFBDQTk2NjUgaW5kaXJlY3QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEkyQ19QQ0FfSUNPVU5UICAgICAgICAgIDB4MDAgLyogQnl0ZSBDb3VudCBmb3IgYnVmZmVyZWQgbW9kZSAqLworI2RlZmluZSBJMkNfUENBX0lBRFIgICAgICAgICAgICAweDAxIC8qIE9XTiBBRFIgKi8KKyNkZWZpbmUgSTJDX1BDQV9JU0NMTCAgICAgICAgICAgMHgwMiAvKiBTQ0wgTE9XIHBlcmlvZCAqLworI2RlZmluZSBJMkNfUENBX0lTQ0xIICAgICAgICAgICAweDAzIC8qIFNDTCBISUdIIHBlcmlvZCAqLworI2RlZmluZSBJMkNfUENBX0lUTyAgICAgICAgICAgICAweDA0IC8qIFRJTUVPVVQgKi8KKyNkZWZpbmUgSTJDX1BDQV9JUFJFU0VUICAgICAgICAgMHgwNSAvKiBQYXJhbGxlbCBidXMgcmVzZXQgKi8KKyNkZWZpbmUgSTJDX1BDQV9JTU9ERSAgICAgICAgICAgMHgwNiAvKiBJMkMgQnVzIG1vZGUgKi8KKworLyogUENBOTY2NSBJMkMgYnVzIG1vZGUgKi8KKyNkZWZpbmUgSTJDX1BDQV9NT0RFX1NURCAgICAgICAgMHgwMCAvKiBTdGFuZGFyZCBtb2RlICovCisjZGVmaW5lIEkyQ19QQ0FfTU9ERV9GQVNUICAgICAgIDB4MDEgLyogRmFzdCBtb2RlICovCisjZGVmaW5lIEkyQ19QQ0FfTU9ERV9GQVNUUCAgICAgIDB4MDIgLyogRmFzdCBQbHVzIG1vZGUgKi8KKyNkZWZpbmUgSTJDX1BDQV9NT0RFX1RVUkJPICAgICAgMHgwMyAvKiBUdXJibyBtb2RlICovCisKKwogI2RlZmluZSBJMkNfUENBX0NPTl9BQQkJMHg4MCAvKiBBc3NlcnQgQWNrbm93bGVkZ2UgKi8KICNkZWZpbmUgSTJDX1BDQV9DT05fRU5TSU8JMHg0MCAvKiBFbmFibGUgKi8KICNkZWZpbmUgSTJDX1BDQV9DT05fU1RBCQkweDIwIC8qIFN0YXJ0ICovCkBAIC0zMSw3ICs1OCw5IEBACiAJaW50ICAoKnJlYWRfYnl0ZSkJCSh2b2lkICpkYXRhLCBpbnQgcmVnKTsKIAlpbnQgICgqd2FpdF9mb3JfY29tcGxldGlvbikJKHZvaWQgKmRhdGEpOwogCXZvaWQgKCpyZXNldF9jaGlwKQkJKHZvaWQgKmRhdGEpOwotCS8qIGkyY19jbG9jayB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gbGludXgvaTJjLWFsZ28tcGNhLmggKi8KKwkvKiBGb3IgUENBOTU2NCwgdXNlIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBmcmVxdWVuY2llczoKKwkgKiAzMzAwMDAsIDI4ODAwMCwgMjE3MDAwLCAxNDYwMDAsIDg4MDAwLCA1OTAwMCwgNDQwMDAsIDM2MDAwCisJICogRm9yIFBDQTk2NjUsIHVzZSB0aGUgZnJlcXVlbmN5IHlvdSB3YW50IGhlcmUuICovCiAJdW5zaWduZWQgaW50CQkJaTJjX2Nsb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtcGNhLXBsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaAppbmRleCAzZDE5MTg3Li5hYmEzMzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaApAQCAtNiw3ICs2LDcgQEAKIAkJCQkgKiBub3Qgc3VwcGxpZWQgKG5lZ2F0aXZlIHZhbHVlKSwgYnV0IGl0CiAJCQkJICogY2Fubm90IGV4aXQgc29tZSBlcnJvciBjb25kaXRpb25zIHRoZW4gKi8KIAlpbnQgaTJjX2Nsb2NrX3NwZWVkOwkvKiB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gbGludXgvaTJjLWFsZ28tcGNhLmggKi8KLQlpbnQgdGltZW91dDsJCS8qIHRpbWVvdXQgPSB0aGlzIHZhbHVlICogMTB1cyAqLworCWludCB0aW1lb3V0OwkJLyogdGltZW91dCBpbiBqaWZmaWVzICovCiB9OwogCiAjZW5kaWYgLyogSTJDX1BDQTk1NjRfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pYm10ci5oIGIvaW5jbHVkZS9saW51eC9pYm10ci5oCmluZGV4IDFjN2EwZGQuLjA2Njk1YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWJtdHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2libXRyLmgKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXVuc2lnbmVkIHNob3J0IGV4c2FwX3N0YXRpb25faWQ7CiAJdW5zaWduZWQgc2hvcnQgZ2xvYmFsX2ludF9lbmFibGU7CiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfc2tiOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHRyX3N0YXRzOworCiAJdW5zaWduZWQgY2hhciBhdXRvX3NwZWVkc2F2ZTsKIAlvcGVuX3N0YXRlCQkJb3Blbl9zdGF0dXMsIHNhcF9zdGF0dXM7CiAJZW51bSB7TUFOVUFMLCBBVVRPTUFUSUN9CW9wZW5fbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDI1MDg3YWUuLjg1NGViYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdXRleC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1JJUykgfHwgZGVmaW5lZChDT05GSUdfRlJWKQorI2lmIGRlZmluZWQoQ09ORklHX0NSSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTU4xMDMwMCkKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAogI2Vsc2UKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMQpAQCAtMTkzLDI0ICsxOTMsOCBAQAogCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0bF9hZGRyOwogfQogCi0vKiBmb3IgSURFIFBDSSBjb250cm9sbGVycyBpbiBsZWdhY3kgbW9kZSwgdGVtcG9yYXJ5ICovCi1zdGF0aWMgaW5saW5lIGludCBfX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jc3dpdGNoIChiYXNlKSB7Ci0jaWZkZWYgQ09ORklHX0lBNjQKLQljYXNlIDB4MWYwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTQpOwotCWNhc2UgMHgxNzA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNSk7Ci0jZWxzZQotCWNhc2UgMHgxZjA6IHJldHVybiAxNDsKLQljYXNlIDB4MTcwOiByZXR1cm4gMTU7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX01OMTAzMDApIHx8IGRlZmluZWQoQ09ORklHX1BBUklTQykgXAotICAgIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDNjQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQogI2luY2x1ZGUgPGFzbS9pZGUuaD4KICNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KQEAgLTg2Niw3ICs4NTAsNyBAQAogCWlkZV9od2lmX3QJKnBvcnRzW01BWF9IT1NUX1BPUlRTICsgMV07CiAJdW5zaWduZWQgaW50CW5fcG9ydHM7CiAJc3RydWN0IGRldmljZQkqZGV2WzJdOwotCXVuc2lnbmVkIGludAkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisJaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CiAJaXJxX2hhbmRsZXJfdAlpcnFfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nCWhvc3RfZmxhZ3M7CiAJdm9pZAkJKmhvc3RfcHJpdjsKQEAgLTExNDYsMTEgKzExMzAsMTQgQEAKIGV4dGVybiBpbnQgaWRlX3ZsYl9jbGs7CiBleHRlcm4gaW50IGlkZV9wY2lfY2xrOwogCi1leHRlcm4gaW50IGlkZV9lbmRfcmVxdWVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpOwotaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgICAgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdG9ycyk7CitpbnQgaWRlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKK2ludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOwordm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAotZXh0ZXJuIHZvaWQgaWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSk7Cit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAorCQkgICAgICAgaWRlX2V4cGlyeV90ICopOwordm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgaWRlX2V4cGlyeV90ICopOwogCiB2b2lkIGlkZV9leGVjdXRlX2NvbW1hbmQoaWRlX2RyaXZlX3QgKiwgdTgsIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAogCQkJIGlkZV9leHBpcnlfdCAqKTsKQEAgLTExNjksMTMgKzExNTYsMTQgQEAKIAogaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICosIGlkZV9kcml2ZV90ICosIHU4LCB1OCwgdW5zaWduZWQgbG9uZyk7CiAKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwogZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICopOwogCiBleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CiAKLWV4dGVybiB2b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci0KIGV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7CiAKIHZvaWQgaWRlX3RmX2R1bXAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICopOwpAQCAtMTIwMCwxMCArMTE4OCw2IEBACiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICosIHUxNiAqLCB1OCAqKTsKIAotZXh0ZXJuIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqKTsKLQotdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKiwgdTMyLCB1MTYsIHU4KTsKLQogaW50IGlkZV9jaGVja19hdGFwaV9kZXZpY2UoaWRlX2RyaXZlX3QgKiwgY29uc3QgY2hhciAqKTsKIAogdm9pZCBpZGVfaW5pdF9wYyhzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwpAQCAtMTI1MSw2ICsxMjM1LDggQEAKIAogaW50IGlkZV90YXNrZmlsZV9pb2N0bChpZGVfZHJpdmVfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CisKIGV4dGVybiBpbnQgaWRlX2RyaXZlaWRfdXBkYXRlKGlkZV9kcml2ZV90ICopOwogZXh0ZXJuIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICosIHU4KTsKIGV4dGVybiB1OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICopOwpAQCAtMTI4MCw3ICsxMjY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosIGludCwKK3ZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLAogCQkJIGh3X3JlZ3NfdCAqLCBod19yZWdzX3QgKiopOwogdm9pZCBpZGVfc2V0dXBfcGNpX25vaXNlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwogCkBAIC0xMzQ5LDEwICsxMzM1LDYgQEAKIAlJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTwk9ICgxIDw8IDE5KSwKIAkvKiBzZXJpYWxpemUgcG9ydHMgKi8KIAlJREVfSEZMQUdfU0VSSUFMSVpFCQk9ICgxIDw8IDIwKSwKLQkvKiB1c2UgbGVnYWN5IElSUXMgKi8KLQlJREVfSEZMQUdfTEVHQUNZX0lSUVMJCT0gKDEgPDwgMjEpLAotCS8qIGZvcmNlIHVzZSBvZiBsZWdhY3kgSVJRcyAqLwotCUlERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUwk9ICgxIDw8IDIyKSwKIAkvKiBob3N0IGlzIFRSTTI5MCAqLwogCUlERV9IRkxBR19UUk0yOTAJCT0gKDEgPDwgMjMpLAogCS8qIHVzZSAzMi1iaXQgSS9PIG9wcyAqLwpAQCAtMTM4MCw3ICsxMzYyLDcgQEAKIAogc3RydWN0IGlkZV9wb3J0X2luZm8gewogCWNoYXIJCQkqbmFtZTsKLQl1bnNpZ25lZCBpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKwlpbnQJCQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CiAJdm9pZAkJCSgqaW5pdF9pb3BzKShpZGVfaHdpZl90ICopOwogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqaW5pdF9od2lmKShpZGVfaHdpZl90ICopOwogCWludAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwKQEAgLTE0NzEsNiArMTQ1Myw3IEBACiAKIHZvaWQgaWRlX2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqLCBpbnQpOwogCiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaWRlX2lkX2RtYV9idWcoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CkBAIC0xNDgyLDIxICsxNDY1LDI0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCitpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgaWRlX2FjcGlfZXhlY190ZnMoaWRlX2RyaXZlX3QgKmRyaXZlKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX2dldF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZik7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9wdXNoX3RpbWluZyhpZGVfaHdpZl90ICpod2lmKTsKLWV4dGVybiB2b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZik7Cit2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfc2V0X3N0YXRlKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbik7CiAjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9nZXRfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfcHVzaF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9zZXRfc3RhdGUoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKSB7fQogI2VuZGlmCkBAIC0xNTMwLDkgKzE1MTYsNyBAQAogCWh3aWYtPmh3aWZfZGF0YSA9IGRhdGE7CiB9CiAKLWNvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSk7CiBleHRlcm4gdm9pZCBpZGVfdG9nZ2xlX2JvdW5jZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbik7Ci1leHRlcm4gaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSk7CiAKIHU2NCBpZGVfZ2V0X2xiYV9hZGRyKHN0cnVjdCBpZGVfdGFza2ZpbGUgKiwgaW50KTsKIHU4IGlkZV9kdW1wX3N0YXR1cyhpZGVfZHJpdmVfdCAqLCBjb25zdCBjaGFyICosIHU4KTsKQEAgLTE1NzEsMTQgKzE1NTUsMTggQEAKIAkJICAgICAgc3RydWN0IGlkZV90aW1pbmcgKiwgdW5zaWduZWQgaW50KTsKIGludCBpZGVfdGltaW5nX2NvbXB1dGUoaWRlX2RyaXZlX3QgKiwgdTgsIHN0cnVjdCBpZGVfdGltaW5nICosIGludCwgaW50KTsKIAorI2lmZGVmIENPTkZJR19JREVfWEZFUl9NT0RFCiBpbnQgaWRlX3NjYW5fcGlvX2JsYWNrbGlzdChjaGFyICopOwotCitjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4KTsKIHU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOwotCiBpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7CiBpbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7Ci0KIHZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKiwgdTgpOworaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICosIHU4KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGlkZV9zZXRfbWF4X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0xNjExLDYgKzE1OTksMTAgQEAKICNkZWZpbmUgaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRldiwgcG9ydCkgXAogCWZvciAoKGkpID0gMDsgKChkZXYpID0gKHBvcnQpLT5kZXZpY2VzW2ldKSB8fCAoaSkgPCBNQVhfRFJJVkVTOyAoaSkrKykKIAorI2RlZmluZSBpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkZXYsIHBvcnQpIFwKKwlmb3IgKChpKSA9IDA7ICgoZGV2KSA9IChwb3J0KS0+ZGV2aWNlc1tpXSkgfHwgKGkpIDwgTUFYX0RSSVZFUzsgKGkpKyspIFwKKwkJaWYgKChkZXYpLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKKwogI2RlZmluZSBpZGVfaG9zdF9mb3JfZWFjaF9wb3J0KGksIHBvcnQsIGhvc3QpIFwKIAlmb3IgKChpKSA9IDA7ICgocG9ydCkgPSAoaG9zdCktPnBvcnRzW2ldKSB8fCAoaSkgPCBNQVhfSE9TVF9QT1JUUzsgKGkpKyspCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IGM0ZTZjYTEuLjRiNTAxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtMTgsNiArMTgsMjIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorLyoKKyAqIERTIGJpdCB1c2FnZQorICoKKyAqIFRBID0gdHJhbnNtaXR0ZXIgYWRkcmVzcworICogUkEgPSByZWNlaXZlciBhZGRyZXNzCisgKiBEQSA9IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIFNBID0gc291cmNlIGFkZHJlc3MKKyAqCisgKiBUb0RTICAgIEZyb21EUyAgQTEoUkEpICBBMihUQSkgIEEzICAgICAgQTQgICAgICBVc2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMCAgICAgICAwICAgICAgIERBICAgICAgU0EgICAgICBCU1NJRCAgIC0gICAgICAgSUJTUy9ETFMKKyAqICAwICAgICAgIDEgICAgICAgREEgICAgICBCU1NJRCAgIFNBICAgICAgLSAgICAgICBBUCAtPiBTVEEKKyAqICAxICAgICAgIDAgICAgICAgQlNTSUQgICBTQSAgICAgIERBICAgICAgLSAgICAgICBBUCA8LSBTVEEKKyAqICAxICAgICAgIDEgICAgICAgUkEgICAgICBUQSAgICAgIERBICAgICAgU0EgICAgICB1bnNwZWNpZmllZCAoV0RTKQorICovCisKICNkZWZpbmUgRkNTX0xFTiA0CiAKICNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVkVSUwkJMHgwMDAzCkBAIC01MjcsNiArNTQzLDggQEAKIAl1OCB2aXJ0dWFsX21hcFswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFdMQU5fU0FfUVVFUllfVFJfSURfTEVOIDE2CisKIHN0cnVjdCBpZWVlODAyMTFfbWdtdCB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CiAJX19sZTE2IGR1cmF0aW9uOwpAQCAtNjQ2LDYgKzY2NCwxMCBAQAogCQkJCQl1OCBhY3Rpb25fY29kZTsKIAkJCQkJdTggdmFyaWFibGVbMF07CiAJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZXNoX2FjdGlvbjsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHRyYW5zX2lkW1dMQU5fU0FfUVVFUllfVFJfSURfTEVOXTsKKwkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzYV9xdWVyeTsKIAkJCX0gdTsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOwogCX0gdTsKQEAgLTY1NSw2ICs2NzcsMTUgQEAKICNkZWZpbmUgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYWN0aW9uLnUpCiAKIAorLyogTWFuYWdlbWVudCBNSUMgaW5mb3JtYXRpb24gZWxlbWVudCAoSUVFRSA4MDIuMTF3KSAqLworc3RydWN0IGllZWU4MDIxMV9tbWllIHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbmd0aDsKKwlfX2xlMTYga2V5X2lkOworCXU4IHNlcXVlbmNlX251bWJlcls2XTsKKwl1OCBtaWNbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogQ29udHJvbCBmcmFtZXMgKi8KIHN0cnVjdCBpZWVlODAyMTFfcnRzIHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKQEAgLTgzNiw2ICs4NjcsNyBAQAogLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLwogI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCiAjZGVmaW5lIFdMQU5fQVVUSF9TSEFSRURfS0VZIDEKKyNkZWZpbmUgV0xBTl9BVVRIX0ZUIDIKICNkZWZpbmUgV0xBTl9BVVRIX0xFQVAgMTI4CiAKICNkZWZpbmUgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4gMTI4CkBAIC04OTksNiArOTMxLDkgQEAKIAkvKiA4MDIuMTFnICovCiAJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PU0hPUlRUSU1FID0gMjUsCiAJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PRFNTU09GRE0gPSAyNiwKKwkvKiA4MDIuMTF3ICovCisJV0xBTl9TVEFUVVNfQVNTT0NfUkVKRUNURURfVEVNUE9SQVJJTFkgPSAzMCwKKwlXTEFOX1NUQVRVU19ST0JVU1RfTUdNVF9GUkFNRV9QT0xJQ1lfVklPTEFUSU9OID0gMzEsCiAJLyogODAyLjExaSAqLwogCVdMQU5fU1RBVFVTX0lOVkFMSURfSUUgPSA0MCwKIAlXTEFOX1NUQVRVU19JTlZBTElEX0dST1VQX0NJUEhFUiA9IDQxLApAQCAtMTAxOCw2ICsxMDUzLDggQEAKIAlXTEFOX0VJRF9IVF9JTkZPUk1BVElPTiA9IDYxLAogCS8qIDgwMi4xMWkgKi8KIAlXTEFOX0VJRF9SU04gPSA0OCwKKwlXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMID0gNTYsCisJV0xBTl9FSURfTU1JRSA9IDc2IC8qIDgwMi4xMXcgKi8sCiAJV0xBTl9FSURfV1BBID0gMjIxLAogCVdMQU5fRUlEX0dFTkVSSUMgPSAyMjEsCiAJV0xBTl9FSURfVkVORE9SX1NQRUNJRklDID0gMjIxLApAQCAtMTAzMCw2ICsxMDY3LDggQEAKIAlXTEFOX0NBVEVHT1JZX1FPUyA9IDEsCiAJV0xBTl9DQVRFR09SWV9ETFMgPSAyLAogCVdMQU5fQ0FURUdPUllfQkFDSyA9IDMsCisJV0xBTl9DQVRFR09SWV9QVUJMSUMgPSA0LAorCVdMQU5fQ0FURUdPUllfU0FfUVVFUlkgPSA4LAogCVdMQU5fQ0FURUdPUllfV01NID0gMTcsCiB9OwogCkBAIC0xMTA0LDYgKzExNDMsMTIgQEAKIAl9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK2VudW0gaWVlZTgwMjExX3RpbWVvdXRfaW50ZXJ2YWxfdHlwZSB7CisJV0xBTl9USU1FT1VUX1JFQVNTT0NfREVBRExJTkUgPSAxIC8qIDgwMi4xMXIgKi8sCisJV0xBTl9USU1FT1VUX0tFWV9MSUZFVElNRSA9IDIgLyogODAyLjExciAqLywKKwlXTEFOX1RJTUVPVVRfQVNTT0NfQ09NRUJBQ0sgPSAzIC8qIDgwMi4xMXcgKi8sCit9OworCiAvKiBCQUNLIGFjdGlvbiBjb2RlICovCiBlbnVtIGllZWU4MDIxMV9iYWNrX2FjdGlvbmNvZGUgewogCVdMQU5fQUNUSU9OX0FEREJBX1JFUSA9IDAsCkBAIC0xMTE4LDYgKzExNjMsMTMgQEAKIAlXTEFOX0JBQ0tfVElNRVIgPSAyLAogfTsKIAorLyogU0EgUXVlcnkgYWN0aW9uICovCitlbnVtIGllZWU4MDIxMV9zYV9xdWVyeV9hY3Rpb24geworCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1QgPSAwLAorCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFID0gMSwKK307CisKKwogLyogQS1NU0RVIDgwMi4xMW4gKi8KICNkZWZpbmUgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UIDB4MDA4MAogCkBAIC0xMTI4LDYgKzExODAsNyBAQAogLyogcmVzZXJ2ZWQ6IAkJCQkweDAwMEZBQzAzICovCiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAJCTB4MDAwRkFDMDQKICNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0CTB4MDAwRkFDMDUKKyNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMJMHgwMDBGQUMwNgogCiAjZGVmaW5lIFdMQU5fTUFYX0tFWV9MRU4JCTMyCiAKQEAgLTExODUsNCArMTIzOCwxNDkgQEAKIAkJcmV0dXJuIGhkci0+YWRkcjE7CiB9CiAKKy8qKgorICogaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lIC0gY2hlY2sgaWYgZnJhbWUgaXMgYSByb2J1c3QgbWFuYWdlbWVudCBmcmFtZQorICogQGhkcjogdGhlIGZyYW1lIChidWZmZXIgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IHRoZSBmaXJzdCBvY3RldCBvZiBwYXlsb2FkKQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJaWYgKGllZWU4MDIxMV9pc19kaXNhc3NvYyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgIGllZWU4MDIxMV9pc19kZWF1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXU4ICpjYXRlZ29yeTsKKworCQkvKgorCQkgKiBBY3Rpb24gZnJhbWVzLCBleGNsdWRpbmcgUHVibGljIEFjdGlvbiBmcmFtZXMsIGFyZSBSb2J1c3QKKwkJICogTWFuYWdlbWVudCBGcmFtZXMuIEhvd2V2ZXIsIGlmIHdlIGFyZSBsb29raW5nIGF0IGEgUHJvdGVjdGVkCisJCSAqIGZyYW1lLCBza2lwIHRoZSBjaGVjayBzaW5jZSB0aGUgZGF0YSBtYXkgYmUgZW5jcnlwdGVkIGFuZAorCQkgKiB0aGUgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBmb3VuZCB0byBiZSBhIFJvYnVzdCBNYW5hZ2VtZW50CisJCSAqIEZyYW1lIChieSB0aGUgb3RoZXIgZW5kKS4KKwkJICovCisJCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJcmV0dXJuIHRydWU7CisJCWNhdGVnb3J5ID0gKCh1OCAqKSBoZHIpICsgMjQ7CisJCXJldHVybiAqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9QVUJMSUM7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGZyZXF1ZW5jeQorICogQGNoYW5uZWw6IHRoZSBGSFNTIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgRkhTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KQorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNC42CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcShpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAxKSAmJiAoY2hhbm5lbCA8IDk2KSkKKwkJcmV0dXJuIGNoYW5uZWwgKyAyNDAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX2Zoc3NfY2hhbiAtIGdldCBjaGFubmVsCisgKiBAZnJlcTogdGhlIGNoYW5uZWxzIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgRkhTUyBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE0LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZmhzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+IDI0MDEpICYmIChmcmVxIDwgMjQ5NikpCisJCXJldHVybiBmcmVxIC0gMjQwMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEgLSBnZXQgY2hhbm5lbCBjZW50ZXIgZnJlcXVlbmN5CisgKiBAY2hhbm5lbDogdGhlIERTU1MgY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kgKE1IeikuCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE1LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDApICYmIChjaGFubmVsIDwgMTQpKQorCQlyZXR1cm4gMjQwNyArIChjaGFubmVsICogNSk7CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuIC0gZ2V0IGNoYW5uZWwKKyAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTUuNgorICoKKyAqIFRoaXMgcm91dGluZSBzZWxlY3RzIHRoZSBjaGFubmVsIHdpdGggdGhlIGNsb3Nlc3QgY2VudGVyIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+PSAyNDEwKSAmJiAoZnJlcSA8IDI0NzUpKQorCQlyZXR1cm4gKGZyZXEgLSAyNDA1KSAvIDU7CisJZWxzZSBpZiAoKGZyZXEgPj0gMjQ4MikgJiYgKGZyZXEgPCAyNDg3KSkKKwkJcmV0dXJuIDE0OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgSFIgRFNTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KSBhbmQgYmFjaworICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxOC40LjYuMgorICoKKyAqIFRoZSBjaGFubmVscyBhbmQgZnJlcXVlbmNpZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGRlZmluZWQgZm9yIERTU1MKKyAqLworI2RlZmluZSBpZWVlODAyMTFfaHJfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFuKQorI2RlZmluZSBpZWVlODAyMTFfZnJlcV90b19ocl9jaGFuKGZyZXEpIGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxKQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgRVJQIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopIGFuZCBiYWNrCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE5LjQuMgorICovCisjZGVmaW5lIGllZWU4MDIxMV9lcnBfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9ocl9jaGFuX3RvX2ZyZXEoY2hhbikKKyNkZWZpbmUgaWVlZTgwMjExX2ZyZXFfdG9fZXJwX2NoYW4oZnJlcSkgaWVlZTgwMjExX2ZyZXFfdG9faHJfY2hhbihmcmVxKQorCisvKioKKyAqIGllZWU4MDIxMV9vZmRtX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGNlbnRlciBmcmVxdWVuY3kKKyAqIEBzX2ZyZXE6IHN0YXJ0aW5nIGZyZXF1ZW5jeSA9PSAoZG90Q2hhbm5lbFN0YXJ0aW5nRmFjdG9yLzIpIE1IegorICogQGNoYW5uZWw6IHRoZSBPRkRNIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgT0ZETSBjaGFubmVsIHRvIGNlbnRlciBmcmVxdWVuY3kgKE1IeikKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTcuMy44LjMuMgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfb2ZkbV9jaGFuX3RvX2ZyZXEoaW50IHNfZnJlcSwgaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMCkgJiYgKGNoYW5uZWwgPD0gMjAwKSAmJgorCSAgICAoc19mcmVxID49IDQwMDApKQorCQlyZXR1cm4gc19mcmVxICsgKGNoYW5uZWwgKiA1KTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19vZmRtX2NoYW5uZWwgLSBnZXQgY2hhbm5lbAorICogQHNfZnJlcTogc3RhcnRpbmcgZnJlcXVlbmN5ID09IChkb3RDaGFubmVsU3RhcnRpbmdGYWN0b3IvMikgTUh6CisgKiBAZnJlcTogdGhlIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgT0ZETSBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC4zLjIKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgY2hhbm5lbCB3aXRoIHRoZSBjbG9zZXN0IGNlbnRlciBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9mcmVxX3RvX29mZG1fY2hhbihpbnQgc19mcmVxLCBpbnQgZnJlcSkKK3sKKwlpZiAoKGZyZXEgPiAoc19mcmVxICsgMikpICYmIChmcmVxIDw9IChzX2ZyZXEgKyAxMjAyKSkgJiYKKwkgICAgKHNfZnJlcSA+PSA0MDAwKSkKKwkJcmV0dXJuIChmcmVxICsgMiAtIHNfZnJlcSkgLyA1OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCiAjZW5kaWYgLyogTElOVVhfSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWYuaCBiL2luY2x1ZGUvbGludXgvaWYuaAppbmRleCAyYTZlMjk2Li4xMTA4ZjNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZi5oCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIElGRl9TTEFWRV9ORUVEQVJQIDB4NDAJCS8qIG5lZWQgQVJQcyBmb3IgdmFsaWRhdGlvbgkqLwogI2RlZmluZSBJRkZfSVNBVEFQCTB4ODAJCS8qIElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpCSovCiAjZGVmaW5lIElGRl9NQVNURVJfQVJQTU9OIDB4MTAwCQkvKiBib25kaW5nIG1hc3RlciwgQVJQIG1vbiBpbiB1c2UgKi8KKyNkZWZpbmUgSUZGX1dBTl9IRExDCTB4MjAwCQkvKiBXQU4gSERMQyBkZXZpY2UJCSovCiAKICNkZWZpbmUgSUZfR0VUX0lGQUNFCTB4MDAwMQkJLyogZm9yIHF1ZXJ5aW5nIG9ubHkgKi8KICNkZWZpbmUgSUZfR0VUX1BST1RPCTB4MDAwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKaW5kZXggMjdlYTJhYy4uMDgzNWRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAogI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIAogCkBAIC01NywxMCArNTgsMTAgQEAKICAqLwogc3RydWN0IGFyY19yZmMxMjAxCiB7Ci0gICAgdWludDhfdCAgcHJvdG87CQkvKiBwcm90b2NvbCBJRCBmaWVsZCAtIHZhcmllcwkJKi8KLSAgICB1aW50OF90ICBzcGxpdF9mbGFnOwkvKiBmb3IgdXNlIHdpdGggc3BsaXQgcGFja2V0cwkJKi8KKyAgICBfX3U4ICBwcm90bzsJCS8qIHByb3RvY29sIElEIGZpZWxkIC0gdmFyaWVzCQkqLworICAgIF9fdTggIHNwbGl0X2ZsYWc7CS8qIGZvciB1c2Ugd2l0aCBzcGxpdCBwYWNrZXRzCQkqLwogICAgIF9fYmUxNiAgIHNlcXVlbmNlOwkJLyogc2VxdWVuY2UgbnVtYmVyCQkJKi8KLSAgICB1aW50OF90ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KKyAgICBfX3U4ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KIH07CiAjZGVmaW5lIFJGQzEyMDFfSERSX1NJWkUgNAogCkBAIC03MCw4ICs3MSw4IEBACiAgKi8KIHN0cnVjdCBhcmNfcmZjMTA1MQogewotICAgIHVpbnQ4X3QgcHJvdG87CQkvKiBBUkNfUF9SRkMxMDUxX0FSUC9SRkMxMDUxX0lQCSovCi0gICAgdWludDhfdCBwYXlsb2FkWzBdOwkJLyogNTA3IGJ5dGVzCQkJKi8KKyAgICBfX3U4IHByb3RvOwkJLyogQVJDX1BfUkZDMTA1MV9BUlAvUkZDMTA1MV9JUAkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDUwNyBieXRlcwkJCSovCiB9OwogI2RlZmluZSBSRkMxMDUxX0hEUl9TSVpFIDEKIApAQCAtODIsMjAgKzgzLDIwIEBACiAgKi8KIHN0cnVjdCBhcmNfZXRoX2VuY2FwCiB7Ci0gICAgdWludDhfdCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCisgICAgX191OCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCiAgICAgc3RydWN0IGV0aGhkciBldGg7CQkvKiBzdGFuZGFyZCBldGhlcm5ldCBoZWFkZXIgKHl1Y2shKQkqLwotICAgIHVpbnQ4X3QgcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLwogfTsKICNkZWZpbmUgRVRIX0VOQ0FQX0hEUl9TSVpFIDE0CiAKIAogc3RydWN0IGFyY19jYXAKIHsKLQl1aW50OF90IHByb3RvOwotCXVpbnQ4X3QgY29va2llW3NpemVvZihpbnQpXTsgICAvKiBBY3R1YWxseSBOT1Qgc2VudCBvdmVyIHRoZSBuZXR3b3JrICovCisJX191OCBwcm90bzsKKwlfX3U4IGNvb2tpZVtzaXplb2YoaW50KV07ICAgLyogQWN0dWFsbHkgTk9UIHNlbnQgb3ZlciB0aGUgbmV0d29yayAqLwogCXVuaW9uIHsKLQkJdWludDhfdCBhY2s7Ci0JCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCisJCV9fdTggYWNrOworCQlfX3U4IHJhd1swXTsJCS8qIDUwNyBieXRlcyAqLwogCX0gbWVzOwogfTsKIApAQCAtMTA5LDcgKzExMCw3IEBACiAgKi8KIHN0cnVjdCBhcmNfaGFyZHdhcmUKIHsKLSAgICB1aW50OF90ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KKyAgICBfX3U4ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KICAgICAgICAgICAgICBkZXN0LAkJLyogZGVzdGluYXRpb24gQVJDbmV0IC0gMCBmb3IgYnJvYWRjYXN0ICAgICovCiAgICAgCSAgICAgb2Zmc2V0WzJdOwkJLyogb2Zmc2V0IGJ5dGVzIChzb21lIHdlaXJkIHNlbWFudGljcykgICAgICovCiB9OwpAQCAtMTMwLDcgKzEzMSw3IEBACiAJc3RydWN0IGFyY19yZmMxMDUxICAgcmZjMTA1MTsKIAlzdHJ1Y3QgYXJjX2V0aF9lbmNhcCBldGhfZW5jYXA7CiAJc3RydWN0IGFyY19jYXAgICAgICAgY2FwOwotCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA4IGJ5dGVzCQkJCSovCisJX191OCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KICAgICB9IHNvZnQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggN2YzYzczNS4uY2ZlNGZlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMTcsNyArMTcsNyBAQAogICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSAKKwogI2lmbmRlZiBfTElOVVhfSUZfRVRIRVJfSAogI2RlZmluZSBfTElOVVhfSUZfRVRIRVJfSAogCkBAIC0yNSw3ICsyNSw3IEBACiAKIC8qCiAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQotICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCisgKglhbmQgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLgogICovCiAKICNkZWZpbmUgRVRIX0FMRU4JNgkJLyogT2N0ZXRzIGluIG9uZSBldGhlcm5ldCBhZGRyCSAqLwpAQCAtNzgsMTIgKzc4LDEzIEBACiAjZGVmaW5lIEVUSF9QX1BBRQkweDg4OEUJCS8qIFBvcnQgQWNjZXNzIEVudGl0eSAoSUVFRSA4MDIuMVgpICovCiAjZGVmaW5lIEVUSF9QX0FPRQkweDg4QTIJCS8qIEFUQSBvdmVyIEV0aGVybmV0CQkqLwogI2RlZmluZSBFVEhfUF9USVBDCTB4ODhDQQkJLyogVElQQyAJCQkqLworI2RlZmluZSBFVEhfUF9GQ09FCTB4ODkwNgkJLyogRmlicmUgQ2hhbm5lbCBvdmVyIEV0aGVybmV0ICAqLwogI2RlZmluZSBFVEhfUF9FRFNBCTB4REFEQQkJLyogRXRoZXJ0eXBlIERTQSBbIE5PVCBBTiBPRkZJQ0lBTExZIFJFR0lTVEVSRUQgSUQgXSAqLwogCiAvKgogICoJTm9uIERJWCB0eXBlcy4gV29uJ3QgY2xhc2ggZm9yIDE1MDAgdHlwZXMuCiAgKi8KLSAKKwogI2RlZmluZSBFVEhfUF84MDJfMwkweDAwMDEJCS8qIER1bW15IHR5cGUgZm9yIDgwMi4zIGZyYW1lcyAgKi8KICNkZWZpbmUgRVRIX1BfQVgyNQkweDAwMDIJCS8qIER1bW15IHByb3RvY29sIGlkIGZvciBBWC4yNSAgKi8KICNkZWZpbmUgRVRIX1BfQUxMCTB4MDAwMwkJLyogRXZlcnkgcGFja2V0IChiZSBjYXJlZnVsISEhKSAqLwpAQCAtMTA5LDcgKzExMCw3IEBACiAvKgogICoJVGhpcyBpcyBhbiBFdGhlcm5ldCBmcmFtZSBoZWFkZXIuCiAgKi8KLSAKKwogc3RydWN0IGV0aGhkciB7CiAJdW5zaWduZWQgY2hhcgloX2Rlc3RbRVRIX0FMRU5dOwkvKiBkZXN0aW5hdGlvbiBldGggYWRkcgkqLwogCXVuc2lnbmVkIGNoYXIJaF9zb3VyY2VbRVRIX0FMRU5dOwkvKiBzb3VyY2UgZXRoZXIgYWRkcgkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAppbmRleCA2MGUxNmE1Li42NzNmMjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaApAQCAtMTUzLDcgKzE1Myw2IEBACiAKIHN0cnVjdCBkbGNpX2xvY2FsCiB7Ci0gICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgIHN0cnVjdCBuZXRfZGV2aWNlICAgICAgKm1hc3RlcjsKICAgIHN0cnVjdCBuZXRfZGV2aWNlICAgICAgKnNsYXZlOwogICAgc3RydWN0IGRsY2lfY29uZiAgICAgICBjb25maWc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKaW5kZXggYzdhNjY4OC4uM2ExNGIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaApAQCAtMjYsNyArMjYsNyBAQAogICovCiBzdHJ1Y3QgcHBwb2wydHBfYWRkcgogewotCXBpZF90CXBpZDsJCQkvKiBwaWQgdGhhdCBvd25zIHRoZSBmZC4KKwlfX2tlcm5lbF9waWRfdAlwaWQ7CQkvKiBwaWQgdGhhdCBvd25zIHRoZSBmZC4KIAkJCQkJICogMCA9PiBjdXJyZW50ICovCiAJaW50CWZkOwkJCS8qIEZEIG9mIFVEUCBzb2NrZXQgdG8gdXNlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAppbmRleCAzMGM4OGIyLi45MGI1ZmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCkBAIC05NSwxNiArOTUsMTYgQEAKIH0gX19hdHRyaWJ1dGUgKChwYWNrZWQpKTsKIAogLyogVGFnIGlkZW50aWZpZXJzICovCi0jZGVmaW5lIFBUVF9FT0wJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAwKQotI2RlZmluZSBQVFRfU1JWX05BTUUJX19jb25zdGFudF9odG9ucygweDAxMDEpCi0jZGVmaW5lIFBUVF9BQ19OQU1FCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAyKQotI2RlZmluZSBQVFRfSE9TVF9VTklRCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAzKQotI2RlZmluZSBQVFRfQUNfQ09PS0lFCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA0KQotI2RlZmluZSBQVFRfVkVORE9SIAlfX2NvbnN0YW50X2h0b25zKDB4MDEwNSkKLSNkZWZpbmUgUFRUX1JFTEFZX1NJRAlfX2NvbnN0YW50X2h0b25zKDB4MDExMCkKLSNkZWZpbmUgUFRUX1NSVl9FUlIgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMjAxKQotI2RlZmluZSBQVFRfU1lTX0VSUiAgCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAyKQotI2RlZmluZSBQVFRfR0VOX0VSUiAgCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAzKQorI2RlZmluZSBQVFRfRU9MCQlfX2NwdV90b19iZTE2KDB4MDAwMCkKKyNkZWZpbmUgUFRUX1NSVl9OQU1FCV9fY3B1X3RvX2JlMTYoMHgwMTAxKQorI2RlZmluZSBQVFRfQUNfTkFNRQlfX2NwdV90b19iZTE2KDB4MDEwMikKKyNkZWZpbmUgUFRUX0hPU1RfVU5JUQlfX2NwdV90b19iZTE2KDB4MDEwMykKKyNkZWZpbmUgUFRUX0FDX0NPT0tJRQlfX2NwdV90b19iZTE2KDB4MDEwNCkKKyNkZWZpbmUgUFRUX1ZFTkRPUiAJX19jcHVfdG9fYmUxNigweDAxMDUpCisjZGVmaW5lIFBUVF9SRUxBWV9TSUQJX19jcHVfdG9fYmUxNigweDAxMTApCisjZGVmaW5lIFBUVF9TUlZfRVJSICAgICBfX2NwdV90b19iZTE2KDB4MDIwMSkKKyNkZWZpbmUgUFRUX1NZU19FUlIgIAlfX2NwdV90b19iZTE2KDB4MDIwMikKKyNkZWZpbmUgUFRUX0dFTl9FUlIgIAlfX2NwdV90b19iZTE2KDB4MDIwMykKIAogc3RydWN0IHBwcG9lX2hkciB7CiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaAppbmRleCA4NTI5ZjU3Li4wNDlkNmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKQEAgLTQ2LDYgKzQ2LDggQEAKICNkZWZpbmUgVFVOU0VUT0ZGTE9BRCAgX0lPVygnVCcsIDIwOCwgdW5zaWduZWQgaW50KQogI2RlZmluZSBUVU5TRVRUWEZJTFRFUiBfSU9XKCdUJywgMjA5LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTkdFVElGRiAgICAgIF9JT1IoJ1QnLCAyMTAsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVFVOR0VUU05EQlVGICAgX0lPUignVCcsIDIxMSwgaW50KQorI2RlZmluZSBUVU5TRVRTTkRCVUYgICBfSU9XKCdUJywgMjEyLCBpbnQpCiAKIC8qIFRVTlNFVElGRiBpZnIgZmxhZ3MgKi8KICNkZWZpbmUgSUZGX1RVTgkJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaAppbmRleCA4MmM0MzYyNC4uNWE5YWFlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCkBAIC0xNiwxNCArMTYsMTQgQEAKICNkZWZpbmUgU0lPQ0RFTFBSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDYpCiAjZGVmaW5lIFNJT0NDSEdQUkwgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA3KQogCi0jZGVmaW5lIEdSRV9DU1VNCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQotI2RlZmluZSBHUkVfUk9VVElORwlfX2NvbnN0YW50X2h0b25zKDB4NDAwMCkKLSNkZWZpbmUgR1JFX0tFWQkJX19jb25zdGFudF9odG9ucygweDIwMDApCi0jZGVmaW5lIEdSRV9TRVEJCV9fY29uc3RhbnRfaHRvbnMoMHgxMDAwKQotI2RlZmluZSBHUkVfU1RSSUNUCV9fY29uc3RhbnRfaHRvbnMoMHgwODAwKQotI2RlZmluZSBHUkVfUkVDCQlfX2NvbnN0YW50X2h0b25zKDB4MDcwMCkKLSNkZWZpbmUgR1JFX0ZMQUdTCV9fY29uc3RhbnRfaHRvbnMoMHgwMEY4KQotI2RlZmluZSBHUkVfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNykKKyNkZWZpbmUgR1JFX0NTVU0JX19jcHVfdG9fYmUxNigweDgwMDApCisjZGVmaW5lIEdSRV9ST1VUSU5HCV9fY3B1X3RvX2JlMTYoMHg0MDAwKQorI2RlZmluZSBHUkVfS0VZCQlfX2NwdV90b19iZTE2KDB4MjAwMCkKKyNkZWZpbmUgR1JFX1NFUQkJX19jcHVfdG9fYmUxNigweDEwMDApCisjZGVmaW5lIEdSRV9TVFJJQ1QJX19jcHVfdG9fYmUxNigweDA4MDApCisjZGVmaW5lIEdSRV9SRUMJCV9fY3B1X3RvX2JlMTYoMHgwNzAwKQorI2RlZmluZSBHUkVfRkxBR1MJX19jcHVfdG9fYmUxNigweDAwRjgpCisjZGVmaW5lIEdSRV9WRVJTSU9OCV9fY3B1X3RvX2JlMTYoMHgwMDA3KQogCiBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0KIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW1hLmggYi9pbmNsdWRlL2xpbnV4L2ltYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMmFhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ltYS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSU1BX0gKKyNkZWZpbmUgX0xJTlVYX0lNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorc3RydWN0IGxpbnV4X2JpbnBybTsKKworI2lmZGVmIENPTkZJR19JTUEKK2V4dGVybiBpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CitleHRlcm4gaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiB2b2lkIGltYV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spOworZXh0ZXJuIHZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitleHRlcm4gaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCk7CitleHRlcm4gdm9pZCBpbWFfc2htX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlKTsKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfc2htX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybjsKK30KKyNlbmRpZiAvKiBDT05GSUdfSU1BX0ggKi8KKyNlbmRpZiAvKiBfTElOVVhfSU1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW42LmggYi9pbmNsdWRlL2xpbnV4L2luNi5oCmluZGV4IGJjNDkyMDQuLjcxOGJmMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW42LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbjYuaApAQCAtNDQsMTEgKzQ0LDExIEBACiAgKiBOT1RFOiBCZSBhd2FyZSB0aGUgSU42QUREUl8qIGNvbnN0YW50cyBhbmQgaW42YWRkcl8qIGV4dGVybmFscyBhcmUgZGVmaW5lZAogICogaW4gbmV0d29yayBieXRlIG9yZGVyLCBub3QgaW4gaG9zdCBieXRlIG9yZGVyIGFzIGFyZSB0aGUgSVB2NCBlcXVpdmFsZW50cwogICovCisjaWZkZWYgX19LRVJORUxfXwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKICNkZWZpbmUgSU42QUREUl9BTllfSU5JVCB7IHsgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0gfSB9CiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9vcGJhY2s7CiAjZGVmaW5lIElONkFERFJfTE9PUEJBQ0tfSU5JVCB7IHsgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9Ci0jaWZkZWYgX19LRVJORUxfXwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xpbmtsb2NhbF9hbGxub2RlczsKICNkZWZpbmUgSU42QUREUl9MSU5LTE9DQUxfQUxMTk9ERVNfSU5JVAlcCiAJCXsgeyB7IDB4ZmYsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEgfSB9IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKaW5kZXggMDZmY2RiNC4uYWNlZjJhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2RlZmluZSBJTl9ERVZfQVJQRklMVEVSKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgQVJQRklMVEVSKQogI2RlZmluZSBJTl9ERVZfQVJQX0FOTk9VTkNFKGluX2RldikJSU5fREVWX01BWENPTkYoKGluX2RldiksIEFSUF9BTk5PVU5DRSkKICNkZWZpbmUgSU5fREVWX0FSUF9JR05PUkUoaW5fZGV2KQlJTl9ERVZfTUFYQ09ORigoaW5fZGV2KSwgQVJQX0lHTk9SRSkKKyNkZWZpbmUgSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KQlJTl9ERVZfTUFYQ09ORigoaW5fZGV2KSwgQVJQX05PVElGWSkKIAogc3RydWN0IGluX2lmYWRkcgogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggZTc1MmQ5Ny4uYWYxZGU5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJLm5yX2NwdXNfYWxsb3dlZCA9IE5SX0NQVVMsCQkJCVwKIAl9LAkJCQkJCQkJXAogCS50YXNrcwkJPSBMSVNUX0hFQURfSU5JVCh0c2sudGFza3MpLAkJCVwKKwkucHVzaGFibGVfdGFza3MgPSBQTElTVF9OT0RFX0lOSVQodHNrLnB1c2hhYmxlX3Rhc2tzLCBNQVhfUFJJTyksIFwKIAkucHRyYWNlZAk9IExJU1RfSEVBRF9JTklUKHRzay5wdHJhY2VkKSwJCQlcCiAJLnB0cmFjZV9lbnRyeQk9IExJU1RfSEVBRF9JTklUKHRzay5wdHJhY2VfZW50cnkpLAkJXAogCS5yZWFsX3BhcmVudAk9ICZ0c2ssCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDEyNDlhMGMuLjZiMjgwNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTY2MSw2ICs2NjEsNyBAQAogI2RlZmluZSBTV19ET0NLCQkJMHgwNSAgLyogc2V0ID0gcGx1Z2dlZCBpbnRvIGRvY2sgKi8KICNkZWZpbmUgU1dfTElORU9VVF9JTlNFUlQJMHgwNiAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQgMHgwNyAgLyogc2V0ID0gbWVjaGFuaWNhbCBzd2l0Y2ggc2V0ICovCisjZGVmaW5lIFNXX1ZJREVPT1VUX0lOU0VSVAkweDA4ICAvKiBzZXQgPSBpbnNlcnRlZCAqLwogI2RlZmluZSBTV19NQVgJCQkweDBmCiAjZGVmaW5lIFNXX0NOVAkJCShTV19NQVgrMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggOTEyN2Y2Yi4uMGM5Y2I2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC02MSw2ICs2MSwxNyBAQAogCiB0eXBlZGVmIGlycXJldHVybl90ICgqaXJxX2hhbmRsZXJfdCkoaW50LCB2b2lkICopOwogCisvKioKKyAqIHN0cnVjdCBpcnFhY3Rpb24gLSBwZXIgaW50ZXJydXB0IGFjdGlvbiBkZXNjcmlwdG9yCisgKiBAaGFuZGxlcjoJaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKyAqIEBmbGFnczoJZmxhZ3MgKHNlZSBJUlFGXyogYWJvdmUpCisgKiBAbWFzazoJbm8gY29tbWVudCBhcyBpdCBpcyB1c2VsZXNzIGFuZCBhYm91dCB0byBiZSByZW1vdmVkCisgKiBAbmFtZToJbmFtZSBvZiB0aGUgZGV2aWNlCisgKiBAZGV2X2lkOgljb29raWUgdG8gaWRlbnRpZnkgdGhlIGRldmljZQorICogQG5leHQ6CXBvaW50ZXIgdG8gdGhlIG5leHQgaXJxYWN0aW9uIGZvciBzaGFyZWQgaW50ZXJydXB0cworICogQGlycToJaW50ZXJydXB0IG51bWJlcgorICogQGRpcjoJcG9pbnRlciB0byB0aGUgcHJvYy9pcnEvTk4vbmFtZSBlbnRyeQorICovCiBzdHJ1Y3QgaXJxYWN0aW9uIHsKIAlpcnFfaGFuZGxlcl90IGhhbmRsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ2MiwxMSArNDczLDE4IEBACiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NISVJRKQorZXh0ZXJuIHZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpIHsgfQorI2VuZGlmCisKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIAogc3RydWN0IGlycV9kZXNjOwogCiBleHRlcm4gaW50IGVhcmx5X2lycV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBhcmNoX3Byb2JlX25yX2lycXModm9pZCk7CiBleHRlcm4gaW50IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGFyY2hfaW5pdF9jaGlwX2RhdGEoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcF92cy5oIGIvaW5jbHVkZS9saW51eC9pcF92cy5oCmluZGV4IDBmNDM0YTIuLjE0ODI2NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBfdnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKQEAgLTk2LDEwICs5NiwxMCBAQAogICovCiBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyIHsKIAkvKiB2aXJ0dWFsIHNlcnZpY2UgYWRkcmVzc2VzICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogdmlydHVhbCBzZXJ2aWNlIG9wdGlvbnMgKi8KIAljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKQEAgLTExOSw4ICsxMTksOCBAQAogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCiAJLyogdGhyZXNob2xkcyBmb3IgYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLwogfTsKIAogCkBAIC0xNTksMTAgKzE1OSwxMCBAQAogLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9TRVJWSUNFICovCiBzdHJ1Y3QgaXBfdnNfc2VydmljZV9lbnRyeSB7CiAJLyogd2hpY2ggc2VydmljZTogdXNlciBmaWxscyBpbiB0aGVzZSAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIHNlcnZpY2Ugb3B0aW9ucyAqLwogCWNoYXIJCQlzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwpAQCAtMTg0LDEyICsxODQsMTIgQEAKIAl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLwogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCi0JdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLwogCi0JdV9pbnQzMl90CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQlpbmFjdGNvbm5zOwkvKiBpbmFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCisJX191MzIJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJaW5hY3Rjb25uczsJLyogaW5hY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCiAKIAkvKiBzdGF0aXN0aWNzICovCiAJc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgc3RhdHM7CkBAIC0xOTksMTAgKzE5OSwxMCBAQAogLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9ERVNUUyAqLwogc3RydWN0IGlwX3ZzX2dldF9kZXN0cyB7CiAJLyogd2hpY2ggc2VydmljZTogdXNlciBmaWxscyBpbiB0aGVzZSAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIG51bWJlciBvZiByZWFsIHNlcnZlcnMgKi8KIAl1bnNpZ25lZCBpbnQJCW51bV9kZXN0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGY4OTliNTAuLjljNjJmYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTcsOSArMTcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L2lycW5yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTE2MCwxMiArMTYyLDEwIEBACiAgKi8KIHN0cnVjdCBpcnFfZGVzYyB7CiAJdW5zaWduZWQgaW50CQlpcnE7Ci0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqdGltZXJfcmFuZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAqa3N0YXRfaXJxczsKLSMgaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCXN0cnVjdCBpcnFfMl9pb21tdSAgICAgICppcnFfMl9pb21tdTsKLSMgZW5kaWYKICNlbmRpZgogCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVfaXJxOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CkBAIC0xODIsMTEgKzE4MiwxMSBAQAogCXVuc2lnbmVkIGludAkJaXJxc191bmhhbmRsZWQ7CiAJc3BpbmxvY2tfdAkJbG9jazsKICNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza190CQlhZmZpbml0eTsKKwljcHVtYXNrX3Zhcl90CQlhZmZpbml0eTsKIAl1bnNpZ25lZCBpbnQJCWNwdTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCi0JY3B1bWFza190CQlwZW5kaW5nX21hc2s7CisJY3B1bWFza192YXJfdAkJcGVuZGluZ19tYXNrOworI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqZGlyOwpAQCAtMjAyLDEyICsyMDIsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXTsKICNlbHNlIC8qIENPTkZJR19TUEFSU0VfSVJRICovCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICptb3ZlX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIGludCBjcHUpOwotCi0jZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAotCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKLSNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCi0JKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCi0KICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFX0lSUSAqLwogCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzY19hbGxvY19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CkBAIC0yMjYsNyArMjIwLDYgQEAKICAqIE1pZ3JhdGlvbiBoZWxwZXJzIGZvciBvYnNvbGV0ZSBuYW1lcywgdGhleSB3aWxsIGdvIGF3YXk6CiAgKi8KICNkZWZpbmUgaHdfaW50ZXJydXB0X3R5cGUJaXJxX2NoaXAKLXR5cGVkZWYgc3RydWN0IGlycV9jaGlwCQlod19pcnFfY29udHJvbGxlcjsKICNkZWZpbmUgbm9faXJxX3R5cGUJCW5vX2lycV9jaGlwCiB0eXBlZGVmIHN0cnVjdCBpcnFfZGVzYwkJaXJxX2Rlc2NfdDsKIApAQCAtMjM2LDYgKzIyOSw3IEBACiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3QpOwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIApAQCAtMjgwLDcgKzI3NCw3IEBACiB9CiAKIC8qIEhhbmRsZSBpcnEgYWN0aW9uIGNoYWluczogKi8KLWV4dGVybiBpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworZXh0ZXJuIGlycXJldHVybl90IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAogLyoKICAqIEJ1aWx0LWluIElSUSBoYW5kbGVycyBmb3IgdmFyaW91cyBJUlEgdHlwZXMsCkBAIC0zMjUsNyArMzE5LDcgQEAKIAogLyogSGFuZGxpbmcgb2YgdW5oYW5kbGVkIGFuZCBzcHVyaW91cyBpbnRlcnJ1cHRzOiAqLwogZXh0ZXJuIHZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAotCQkJICAgaW50IGFjdGlvbl9yZXQpOworCQkJICAgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCk7CiAKIC8qIFJlc2VuZGluZyBvZiBpbnRlcnJ1cHRzIDoqLwogdm9pZCBjaGVja19pcnFfcmVzZW5kKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSk7CkBAIC00MjIsNCArNDE2LDg0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1MzOTAgKi8KIAorI2lmZGVmIENPTkZJR19TTVAKKy8qKgorICogaW5pdF9hbGxvY19kZXNjX21hc2tzIC0gYWxsb2NhdGUgY3B1bWFza3MgZm9yIGlycV9kZXNjCisgKiBAZGVzYzoJcG9pbnRlciB0byBpcnFfZGVzYyBzdHJ1Y3QKKyAqIEBjcHU6CWNwdSB3aGljaCB3aWxsIGJlIGhhbmRsaW5nIHRoZSBjcHVtYXNrcworICogQGJvb3Q6CXRydWUgaWYgbmVlZCBib290bWVtCisgKgorICogQWxsb2NhdGVzIGFmZmluaXR5IGFuZCBwZW5kaW5nX21hc2sgY3B1bWFzayBpZiByZXF1aXJlZC4KKyAqIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsIChvciBub3QgcmVxdWlyZWQpLgorICogU2lkZSBlZmZlY3Q6IGFmZmluaXR5IGhhcyBhbGwgYml0cyBzZXQsIHBlbmRpbmdfbWFzayBoYXMgYWxsIGJpdHMgY2xlYXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpbml0X2FsbG9jX2Rlc2NfbWFza3Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LAorCQkJCQkJCQlib29sIGJvb3QpCit7CisJaW50IG5vZGU7CisKKwlpZiAoYm9vdCkgeworCQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZkZXNjLT5hZmZpbml0eSk7CisJCWNwdW1hc2tfc2V0YWxsKGRlc2MtPmFmZmluaXR5KTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmRlc2MtPnBlbmRpbmdfbWFzayk7CisJCWNwdW1hc2tfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKKyNlbmRpZgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKworCWlmICghYWxsb2NfY3B1bWFza192YXJfbm9kZSgmZGVzYy0+YWZmaW5pdHksIEdGUF9BVE9NSUMsIG5vZGUpKQorCQlyZXR1cm4gZmFsc2U7CisJY3B1bWFza19zZXRhbGwoZGVzYy0+YWZmaW5pdHkpOworCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyX25vZGUoJmRlc2MtPnBlbmRpbmdfbWFzaywgR0ZQX0FUT01JQywgbm9kZSkpIHsKKwkJZnJlZV9jcHVtYXNrX3ZhcihkZXNjLT5hZmZpbml0eSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOworI2VuZGlmCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogaW5pdF9jb3B5X2Rlc2NfbWFza3MgLSBjb3B5IGNwdW1hc2tzIGZvciBpcnFfZGVzYworICogQG9sZF9kZXNjOglwb2ludGVyIHRvIG9sZCBpcnFfZGVzYyBzdHJ1Y3QKKyAqIEBuZXdfZGVzYzoJcG9pbnRlciB0byBuZXcgaXJxX2Rlc2Mgc3RydWN0CisgKgorICogSW5zdXJlcyBhZmZpbml0eSBhbmQgcGVuZGluZ19tYXNrcyBhcmUgY29waWVkIHRvIG5ldyBpcnFfZGVzYy4KKyAqIElmICFDT05GSUdfQ1BVTUFTS1NfT0ZGU1RBQ0sgdGhlIGNwdW1hc2tzIGFyZSBlbWJlZGRlZCBpbiB0aGUKKyAqIGlycV9kZXNjIHN0cnVjdCBzbyB0aGUgY29weSBpcyByZWR1bmRhbnQuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29weV9kZXNjX21hc2tzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCisJCQkJCXN0cnVjdCBpcnFfZGVzYyAqbmV3X2Rlc2MpCit7CisjaWZkZWYgQ09ORklHX0NQVU1BU0tTX09GRlNUQUNLCisJY3B1bWFza19jb3B5KG5ld19kZXNjLT5hZmZpbml0eSwgb2xkX2Rlc2MtPmFmZmluaXR5KTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJY3B1bWFza19jb3B5KG5ld19kZXNjLT5wZW5kaW5nX21hc2ssIG9sZF9kZXNjLT5wZW5kaW5nX21hc2spOworI2VuZGlmCisjZW5kaWYKK30KKworI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSBib29sIGluaXRfYWxsb2NfZGVzY19tYXNrcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUsCisJCQkJCQkJCWJvb2wgYm9vdCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29weV9kZXNjX21hc2tzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCisJCQkJCXN0cnVjdCBpcnFfZGVzYyAqbmV3X2Rlc2MpCit7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfU01QICovCisKICNlbmRpZiAvKiBfTElOVVhfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxbnIuaCBiL2luY2x1ZGUvbGludXgvaXJxbnIuaAppbmRleCA4NmFmOTJlLi5lYzg3YjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycW5yLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCkBAIC0yMCw2ICsyMCw3IEBACiAKICMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaXJxLCBkZXNjKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWZvciAoaXJxID0gbnJfaXJxcyAtIDE7IGlycSA+PSAwOyBpcnEtLSkKKwogI2Vsc2UgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIAogZXh0ZXJuIGludCBucl9pcnFzOwpAQCAtMjgsMTMgKzI5LDE3IEBACiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQkJCQlcCiAJZm9yIChpcnEgPSAwLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsgaXJxIDwgbnJfaXJxczsJCVwKIAkgICAgIGlycSsrLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkJCQkJXAotCQlpZiAoZGVzYykKKwkJaWYgKCFkZXNjKQkJCQkJCVwKKwkJCTsJCQkJCQlcCisJCWVsc2UKIAogCiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGlycSwgZGVzYykJCQkJXAogCWZvciAoaXJxID0gbnJfaXJxcyAtIDEsIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOyBpcnEgPj0gMDsJXAogCSAgICAgaXJxLS0sIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpKQkJCQlcCi0JCWlmIChkZXNjKQorCQlpZiAoIWRlc2MpCQkJCQkJXAorCQkJOwkJCQkJCVwKKwkJZWxzZQogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaCBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKaW5kZXggODgxODgzYy4uYzU1ODRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCkBAIC0xLDI1ICsxLDE3IEBACi0vKiBpcnFyZXR1cm4uaCAqLwogI2lmbmRlZiBfTElOVVhfSVJRUkVUVVJOX0gKICNkZWZpbmUgX0xJTlVYX0lSUVJFVFVSTl9ICiAKLS8qCi0gKiBGb3IgMi40LnggY29tcGF0aWJpbGl0eSwgMi40LnggY2FuIHVzZQotICoKLSAqCXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSAqCSNkZWZpbmUgSVJRX05PTkUKLSAqCSNkZWZpbmUgSVJRX0hBTkRMRUQKLSAqCSNkZWZpbmUgSVJRX1JFVFZBTCh4KQotICoKLSAqIFRvIG1peCBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBpcnEgaGFuZGxlciByZXR1cm5zLgotICoKLSAqIElSUV9OT05FIG1lYW5zIHdlIGRpZG4ndCBoYW5kbGUgaXQuCi0gKiBJUlFfSEFORExFRCBtZWFucyB0aGF0IHdlIGRpZCBoYXZlIGEgdmFsaWQgaW50ZXJydXB0IGFuZCBoYW5kbGVkIGl0LgotICogSVJRX1JFVFZBTCh4KSBzZWxlY3RzIG9uIHRoZSB0d28gZGVwZW5kaW5nIG9uIHggYmVpbmcgbm9uLXplcm8gKGZvciBoYW5kbGVkKQorLyoqCisgKiBlbnVtIGlycXJldHVybgorICogQElSUV9OT05FCQlpbnRlcnJ1cHQgd2FzIG5vdCBmcm9tIHRoaXMgZGV2aWNlCisgKiBASVJRX0hBTkRMRUQJCWludGVycnVwdCB3YXMgaGFuZGxlZCBieSB0aGlzIGRldmljZQogICovCi10eXBlZGVmIGludCBpcnFyZXR1cm5fdDsKK2VudW0gaXJxcmV0dXJuIHsKKwlJUlFfTk9ORSwKKwlJUlFfSEFORExFRCwKK307CiAKLSNkZWZpbmUgSVJRX05PTkUJKDApCi0jZGVmaW5lIElSUV9IQU5ETEVECSgxKQotI2RlZmluZSBJUlFfUkVUVkFMKHgpCSgoeCkgIT0gMCkKK3R5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CisjZGVmaW5lIElSUV9SRVRWQUwoeCkJKCh4KSAhPSBJUlFfTk9ORSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oIGIvaW5jbHVkZS9saW51eC9pdnR2ZmIuaAppbmRleCBlMjBhZjQ3Li45ZDg4YjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKQEAgLTMzLDYgKzMzLDYgQEAKIH07CiAKICNkZWZpbmUgSVZUVkZCX0lPQ19ETUFfRlJBTUUgCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2ZmJfZG1hX2ZyYW1lKQotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMi5oIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCmluZGV4IGRhNzIwYmMuLjJiMzJkNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamZmczIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpZm5kZWYgX19MSU5VWF9KRkZTMl9IX18KICNkZWZpbmUgX19MSU5VWF9KRkZTMl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogLyogWW91IG11c3QgaW5jbHVkZSBzb21ldGhpbmcgd2hpY2ggZGVmaW5lcyB0aGUgQzk5IHVpbnRYWF90IHR5cGVzLiAKQEAgLTkxLDE1ICs5MiwxNSBAQAogICAgYnl0ZXN3YXBwaW5nICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCB2MzI7CisJX191MzIgdjMyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MzJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG07CisJX191MzIgbTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgam1vZGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQxNl90IHYxNjsKKwlfX3UxNiB2MTY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQxNl90OwogCiBzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlCkBAIC0xMjEsMTIgKzEyMiwxMiBAQAogCWppbnQzMl90IHZlcnNpb247CiAJamludDMyX3QgaW5vOyAvKiA9PSB6ZXJvIGZvciB1bmxpbmsgKi8KIAlqaW50MzJfdCBtY3RpbWU7Ci0JdWludDhfdCBuc2l6ZTsKLQl1aW50OF90IHR5cGU7Ci0JdWludDhfdCB1bnVzZWRbMl07CisJX191OCBuc2l6ZTsKKwlfX3U4IHR5cGU7CisJX191OCB1bnVzZWRbMl07CiAJamludDMyX3Qgbm9kZV9jcmM7CiAJamludDMyX3QgbmFtZV9jcmM7Ci0JdWludDhfdCBuYW1lWzBdOworCV9fdTggbmFtZVswXTsKIH07CiAKIC8qIFRoZSBKRkZTMiByYXcgaW5vZGUgc3RydWN0dXJlOiBVc2VkIGZvciBzdG9yYWdlIG9uIHBoeXNpY2FsIG1lZGlhLiAgKi8KQEAgLTE1MywxMiArMTU0LDEyIEBACiAJamludDMyX3Qgb2Zmc2V0OyAgICAgLyogV2hlcmUgdG8gYmVnaW4gdG8gd3JpdGUuICAqLwogCWppbnQzMl90IGNzaXplOyAgICAgIC8qIChDb21wcmVzc2VkKSBkYXRhIHNpemUgKi8KIAlqaW50MzJfdCBkc2l6ZTsJICAgICAvKiBTaXplIG9mIHRoZSBub2RlJ3MgZGF0YS4gKGFmdGVyIGRlY29tcHJlc3Npb24pICovCi0JdWludDhfdCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KLQl1aW50OF90IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCisJX191OCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KKwlfX3U4IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCiAJamludDE2X3QgZmxhZ3M7CSAgICAgLyogU2VlIEpGRlMyX0lOT19GTEFHXyogKi8KIAlqaW50MzJfdCBkYXRhX2NyYzsgICAvKiBDUkMgZm9yIHRoZSAoY29tcHJlc3NlZCkgZGF0YS4gICovCiAJamludDMyX3Qgbm9kZV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgcmF3IGlub2RlIChleGNsdWRpbmcgZGF0YSkgICovCi0JdWludDhfdCBkYXRhWzBdOworCV9fdTggZGF0YVswXTsKIH07CiAKIHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgewpAQCAtMTY4LDEyICsxNjksMTIgQEAKIAlqaW50MzJfdCBoZHJfY3JjOwogCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCiAJamludDMyX3QgdmVyc2lvbjsKLQl1aW50OF90IHhwcmVmaXg7Ci0JdWludDhfdCBuYW1lX2xlbjsKKwlfX3U4IHhwcmVmaXg7CisJX191OCBuYW1lX2xlbjsKIAlqaW50MTZfdCB2YWx1ZV9sZW47CiAJamludDMyX3QgZGF0YV9jcmM7CiAJamludDMyX3Qgbm9kZV9jcmM7Ci0JdWludDhfdCBkYXRhWzBdOworCV9fdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBqZmZzMl9yYXdfeHJlZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggN2ZhMzcxOC4uOTE0OTE4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVjaGVjay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvZHluYW1pY19kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKQEAgLTM1OCw5ICszNTgsMTAgQEAKICNpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXAogCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQotI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorLyogZHluYW1pY19wcl9kZWJ1ZygpIHVzZXMgcHJfZm10KCkgaW50ZXJuYWxseSBzbyB3ZSBkb24ndCBuZWVkIGl0IGhlcmUgKi8KICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIGRvIHsgXAotCWR5bmFtaWNfcHJfZGVidWcocHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyBcCisJZHluYW1pY19wcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggNTcwZDIwNC4uMGM4Yjg5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMjgsNyArMjgsNyBAQAogCiBzdHJ1Y3Qga2VybmVsX3N0YXQgewogCXN0cnVjdCBjcHVfdXNhZ2Vfc3RhdAljcHVzdGF0OwotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogICAgICAgIHVuc2lnbmVkIGludCBpcnFzW05SX0lSUVNdOwogI2VuZGlmCiB9OwpAQCAtNDEsNyArNDEsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5yX2NvbnRleHRfc3dpdGNoZXModm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKICNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShpcnEpIFwKIAkoa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKQogCkBAIC01MiwxNiArNTIsMTkgQEAKIHsKIAlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKIH0KLSNlbmRpZgogCi0KLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCiB7CiAgICAgICAgcmV0dXJuIGtzdGF0X2NwdShjcHUpLmlycXNbaXJxXTsKIH0KICNlbHNlCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiBleHRlcm4gdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOworI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KERFU0MpIFwKKwkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0pCisjZGVmaW5lIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnFubywgREVTQykgXAorCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSsrKQorCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKaW5kZXggNTQzN2FjMC4uNThhZThlMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC02OCwxMCArNjgsMTMgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdGVfaW5fc3lzZnM6MTsKIAl1bnNpZ25lZCBpbnQgc3RhdGVfYWRkX3VldmVudF9zZW50OjE7CiAJdW5zaWduZWQgaW50IHN0YXRlX3JlbW92ZV91ZXZlbnRfc2VudDoxOworCXVuc2lnbmVkIGludCB1ZXZlbnRfc3VwcHJlc3M6MTsKIH07CiAKIGV4dGVybiBpbnQga29iamVjdF9zZXRfbmFtZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQogCQkJICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkgIHZhX2xpc3QgdmFyZ3MpOwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtvYmplY3RfbmFtZShjb25zdCBzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggMzI4NTFlZS4uMmVjNmNjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTE4Miw2ICsxODIsMTQgQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlICosIGN1cnJlbnRfa3Byb2JlKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CiAKKy8qCisgKiBGb3IgI2lmZGVmIGF2b2lkYW5jZToKKyAqLworc3RhdGljIGlubGluZSBpbnQga3Byb2Jlc19idWlsdF9pbih2b2lkKQoreworCXJldHVybiAxOworfQorCiAjaWZkZWYgQ09ORklHX0tSRVRQUk9CRVMKIGV4dGVybiB2b2lkIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtMjcxLDggKzI3OSwxNiBAQAogdm9pZCBrcHJvYmVfZmx1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRrKTsKIHZvaWQgcmVjeWNsZV9ycF9pbnN0KHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCk7CiAKLSNlbHNlIC8qIENPTkZJR19LUFJPQkVTICovCisjZWxzZSAvKiAhQ09ORklHX0tQUk9CRVM6ICovCiAKK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZXNfYnVpbHRfaW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQoreworCXJldHVybiAwOworfQogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3Byb2JlICpnZXRfa3Byb2JlKHZvaWQgKmFkZHIpCiB7CiAJcmV0dXJuIE5VTEw7CkBAIC0zMjksNSArMzQ1LDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrcHJvYmVfZmx1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRrKQogewogfQotI2VuZGlmCQkJCS8qIENPTkZJR19LUFJPQkVTICovCi0jZW5kaWYJCQkJLyogX0xJTlVYX0tQUk9CRVNfSCAqLworI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCisjZW5kaWYgLyogX0xJTlVYX0tQUk9CRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggMDQyNDMyNmYuLjMxMWEwNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm0uaApAQCAtNDgsNyArNDgsMTAgQEAKIAkgKiBGb3IgSUEtNjQgKEFQSUMgbW9kZWwpIElPQVBJQzA6IGlycSAwLTIzOyBJT0FQSUMxOiBpcnEgMjQtNDcuLgogCSAqIEZvciBYODYgKHN0YW5kYXJkIEFUIG1vZGUpIFBJQzAvMTogaXJxIDAtMTUuIElPQVBJQzA6IDAtMjMuLgogCSAqLwotCV9fdTMyIGlycTsKKwl1bmlvbiB7CisJCV9fdTMyIGlycTsKKwkJX19zMzIgc3RhdHVzOworCX07CiAJX191MzIgbGV2ZWw7CiB9OwogCkBAIC0xMjYsNiArMTI5LDcgQEAKIAkJCV9fdTY0IGRhdGFfb2Zmc2V0OyAvKiByZWxhdGl2ZSB0byBrdm1fcnVuIHN0YXJ0ICovCiAJCX0gaW87CiAJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCBhcmNoOwogCQl9IGRlYnVnOwogCQkvKiBLVk1fRVhJVF9NTUlPICovCiAJCXN0cnVjdCB7CkBAIC0yMTcsMjEgKzIyMSw2IEBACiAJX191MzIgaXJxOwogfTsKIAotc3RydWN0IGt2bV9icmVha3BvaW50IHsKLQlfX3UzMiBlbmFibGVkOwotCV9fdTMyIHBhZGRpbmc7Ci0JX191NjQgYWRkcmVzczsKLX07Ci0KLS8qIGZvciBLVk1fREVCVUdfR1VFU1QgKi8KLXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgewotCS8qIGludCAqLwotCV9fdTMyIGVuYWJsZWQ7Ci0JX191MzIgcGFkOwotCXN0cnVjdCBrdm1fYnJlYWtwb2ludCBicmVha3BvaW50c1s0XTsKLQlfX3UzMiBzaW5nbGVzdGVwOwotfTsKLQogLyogZm9yIEtWTV9HRVRfRElSVFlfTE9HICovCiBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyB7CiAJX191MzIgc2xvdDsKQEAgLTI5Miw2ICsyODEsMTcgQEAKIAlfX3U2NCBwYXJtNjQ7CiB9OwogCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworCisjZGVmaW5lIEtWTV9HVUVTVERCR19FTkFCTEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAJCTB4MDAwMDAwMDIKKworc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7CisJX191MzIgY29udHJvbDsKKwlfX3UzMiBwYWQ7CisJc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIGFyY2g7Cit9OworCiAjZGVmaW5lIEtWTV9UUkNfU0hJRlQgICAgICAgICAgIDE2CiAvKgogICoga3ZtIHRyYWNlIGNhdGVnb3JpZXMKQEAgLTM5Niw2ICszOTYsNTcgQEAKICNpZmRlZiBfX0tWTV9IQVZFX1VTRVJfTk1JCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9OTUkgMjIKICNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgMjMKKyNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfUElUCisjZGVmaW5lIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTCAyNAorI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9JT0FQSUMKKyNkZWZpbmUgS1ZNX0NBUF9JUlFfUk9VVElORyAyNQorI2VuZGlmCisjZGVmaW5lIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVMgMjYKKyNpZmRlZiBfX0tWTV9IQVZFX0RFVklDRV9BU1NJR05NRU5UCisjZGVmaW5lIEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVCAyNworI2VuZGlmCisKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7CisJX191MzIgaXJxY2hpcDsKKwlfX3UzMiBwaW47Cit9OworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSB7CisJX191MzIgYWRkcmVzc19sbzsKKwlfX3UzMiBhZGRyZXNzX2hpOworCV9fdTMyIGRhdGE7CisJX191MzIgcGFkOworfTsKKworLyogZ3NpIHJvdXRpbmcgZW50cnkgdHlwZXMgKi8KKyNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAgMQorI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfTVNJIDIKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSB7CisJX191MzIgZ3NpOworCV9fdTMyIHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGFkOworCXVuaW9uIHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIGlycWNoaXA7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIG1zaTsKKwkJX191MzIgcGFkWzhdOworCX0gdTsKK307CisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmcgeworCV9fdTMyIG5yOworCV9fdTMyIGZsYWdzOworCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cmllc1swXTsKK307CisKKyNlbmRpZgogCiAvKgogICogaW9jdGxzIGZvciBWTSBmZHMKQEAgLTQyMSwxNCArNDcyLDE5IEBACiAjZGVmaW5lIEtWTV9DUkVBVEVfUElUCQkgIF9JTyhLVk1JTywgIDB4NjQpCiAjZGVmaW5lIEtWTV9HRVRfUElUCQkgIF9JT1dSKEtWTUlPLCAweDY1LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9QSVQJCSAgX0lPUihLVk1JTywgIDB4NjYsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQorI2RlZmluZSBLVk1fSVJRX0xJTkVfU1RBVFVTCSAgX0lPV1IoS1ZNSU8sIDB4NjcsIHN0cnVjdCBrdm1faXJxX2xldmVsKQogI2RlZmluZSBLVk1fUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjcsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFIF9JT1IoS1ZNSU8sIDB4NjksIFwKIAkJCQkgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCisjZGVmaW5lIEtWTV9TRVRfR1NJX1JPVVRJTkcgICAgICAgX0lPVyhLVk1JTywgMHg2YSwgc3RydWN0IGt2bV9pcnFfcm91dGluZykKICNkZWZpbmUgS1ZNX0FTU0lHTl9JUlEgX0lPUihLVk1JTywgMHg3MCwgXAogCQkJICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQorI2RlZmluZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTCAgICAgIF9JTyhLVk1JTywgMHg3MSkKKyNkZWZpbmUgS1ZNX0RFQVNTSUdOX1BDSV9ERVZJQ0UgX0lPVyhLVk1JTywgMHg3MiwgXAorCQkJCSAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQogCiAvKgogICogaW9jdGxzIGZvciB2Y3B1IGZkcwpAQCAtNDQwLDcgKzQ5Niw4IEBACiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODQsIHN0cnVjdCBrdm1fc3JlZ3MpCiAjZGVmaW5lIEtWTV9UUkFOU0xBVEUgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDB4ODUsIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24pCiAjZGVmaW5lIEtWTV9JTlRFUlJVUFQgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODYsIHN0cnVjdCBrdm1faW50ZXJydXB0KQotI2RlZmluZSBLVk1fREVCVUdfR1VFU1QgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg3LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0KQorLyogS1ZNX0RFQlVHX0dVRVNUIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHVzZSBLVk1fU0VUX0dVRVNUX0RFQlVHIGluc3RlYWQgKi8KKyNkZWZpbmUgS1ZNX0RFQlVHX0dVRVNUICAgICAgICAgICBfX0tWTV9ERVBSRUNBVEVEX0RFQlVHX0dVRVNUCiAjZGVmaW5lIEtWTV9HRVRfTVNSUyAgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDB4ODgsIHN0cnVjdCBrdm1fbXNycykKICNkZWZpbmUgS1ZNX1NFVF9NU1JTICAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4OSwgc3RydWN0IGt2bV9tc3JzKQogI2RlZmluZSBLVk1fU0VUX0NQVUlEICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDhhLCBzdHJ1Y3Qga3ZtX2NwdWlkKQpAQCAtNDY5LDYgKzUyNiwyOSBAQAogI2RlZmluZSBLVk1fU0VUX01QX1NUQVRFICAgICAgICAgIF9JT1coS1ZNSU8sICAweDk5LCBzdHJ1Y3Qga3ZtX21wX3N0YXRlKQogLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9OTUkgKi8KICNkZWZpbmUgS1ZNX05NSSAgICAgICAgICAgICAgICAgICBfSU8oS1ZNSU8sICAweDlhKQorLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgKi8KKyNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyAgICAgICBfSU9XKEtWTUlPLCAgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKKworLyoKKyAqIERlcHJlY2F0ZWQgaW50ZXJmYWNlcworICovCitzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgeworCV9fdTMyIGVuYWJsZWQ7CisJX191MzIgcGFkZGluZzsKKwlfX3U2NCBhZGRyZXNzOworfTsKKworc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCB7CisJX191MzIgZW5hYmxlZDsKKwlfX3UzMiBwYWQ7CisJc3RydWN0IGt2bV9icmVha3BvaW50IGJyZWFrcG9pbnRzWzRdOworCV9fdTMyIHNpbmdsZXN0ZXA7Cit9OworCisjZGVmaW5lIF9fS1ZNX0RFUFJFQ0FURURfREVCVUdfR1VFU1QgX0lPVyhLVk1JTywgIDB4ODcsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QpCisKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9HRVRfU1RBQ0sgICBfSU9SKEtWTUlPLCAgMHg5YSwgdm9pZCAqKQorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSyAgIF9JT1coS1ZNSU8sICAweDliLCB2b2lkICopCiAKICNkZWZpbmUgS1ZNX1RSQ19JTkpfVklSUSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAyKQogI2RlZmluZSBLVk1fVFJDX1JFREVMSVZFUl9FVlQgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDMpCkBAIC01MjIsNiArNjAyLDcgQEAKIAogI2RlZmluZSBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUJKDEgPDwgMCkKIAorI2RlZmluZSBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTglLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSQogI2RlZmluZSBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSQkoMSA8PCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBiZjZmNzAzLi44OTRhNTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0zNyw2ICszNyw3IEBACiAjZGVmaW5lIEtWTV9SRVFfUEVORElOR19USU1FUiAgICAgIDUKICNkZWZpbmUgS1ZNX1JFUV9VTkhBTFQgICAgICAgICAgICAgNgogI2RlZmluZSBLVk1fUkVRX01NVV9TWU5DICAgICAgICAgICA3CisjZGVmaW5lIEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFICAgIDgKIAogI2RlZmluZSBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQJMAogCkBAIC03Myw3ICs3NCw3IEBACiAJc3RydWN0IGt2bV9ydW4gKnJ1bjsKIAlpbnQgZ3Vlc3RfbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlcXVlc3RzOwotCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgZ3Vlc3RfZGVidWc7CisJdW5zaWduZWQgbG9uZyBndWVzdF9kZWJ1ZzsKIAlpbnQgZnB1X2FjdGl2ZTsKIAlpbnQgZ3Vlc3RfZnB1X2xvYWRlZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKQEAgLTEwNyw2ICsxMDgsMjAgQEAKIAlpbnQgdXNlcl9hbGxvYzsKIH07CiAKK3N0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5IHsKKwl1MzIgZ3NpOworCWludCAoKnNldCkoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCSAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCk7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaXJxY2hpcDsKKwkJCXVuc2lnbmVkIHBpbjsKKwkJfSBpcnFjaGlwOworCQlzdHJ1Y3QgbXNpX21zZyBtc2k7CisJfTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cit9OworCiBzdHJ1Y3Qga3ZtIHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhlIHZjcHVzIGFycmF5IGFuZCBBUElDIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdCBtbXVfbG9jazsKQEAgLTEyNyw2ICsxNDIsMTEgQEAKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKmNvYWxlc2NlZF9tbWlvX3Jpbmc7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJc3RydWN0IGxpc3RfaGVhZCBpcnFfcm91dGluZzsgLyogb2Yga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqLworCXN0cnVjdCBobGlzdF9oZWFkIG1hc2tfbm90aWZpZXJfbGlzdDsKKyNlbmRpZgorCiAjaWZkZWYgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIAlzdHJ1Y3QgbW11X25vdGlmaWVyIG1tdV9ub3RpZmllcjsKIAl1bnNpZ25lZCBsb25nIG1tdV9ub3RpZmllcl9zZXE7CkBAIC0yMzcsNyArMjU3LDYgQEAKIAkJCQkgICBpbnQgdXNlcl9hbGxvYyk7CiBsb25nIGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci12b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpOwpAQCAtMjU1LDggKzI3NCw4IEBACiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpOwotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpOworaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKTsKIAogaW50IGt2bV9hcmNoX2luaXQodm9pZCAqb3BhcXVlKTsKQEAgLTMxMCw3ICszMjksNiBAQAogCWludCBob3N0X2lycTsKIAlib29sIGhvc3RfaXJxX2Rpc2FibGVkOwogCWludCBndWVzdF9pcnE7Ci0Jc3RydWN0IG1zaV9tc2cgZ3Vlc3RfbXNpOwogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFgJKDEgPDwgMCkKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kJKDEgPDwgMSkKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX0lOVFgJKDEgPDwgOCkKQEAgLTMyMSw4ICszMzksMjEgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBrdm0gKmt2bTsKIH07Ci12b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCk7Ci12b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKTsKKworc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciB7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4sIGJvb2wgbWFza2VkKTsKKwlpbnQgaXJxOworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7Cit9OworCit2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pOwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7Cit2b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgYm9vbCBtYXNrKTsKKworaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCk7Cit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKTsKIHZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7CiB2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKQEAgLTQ2NCw0ICs0OTUsMjEgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKworI2RlZmluZSBLVk1fTUFYX0lSUV9ST1VURVMgMTAyNAorCitpbnQga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKTsKK2ludCBrdm1fc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKmVudHJpZXMsCisJCQl1bnNpZ25lZCBuciwKKwkJCXVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkge30KKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKaW5kZXggOWI2ZjM5NS4uMmI4MzE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCkBAIC00MCwxNyArNDAsNCBAQAogCiB0eXBlZGVmIGhmbl90IHBmbl90OwogCi1zdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCBjdXJfY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKmd1ZXN0X3BhZ2VzWzJdOwotCXVuc2lnbmVkIGd1ZXN0X3BhZ2Vfb2Zmc2V0OwotCWludCBpbjsKLQlpbnQgcG9ydDsKLQlpbnQgc2l6ZTsKLQlpbnQgc3RyaW5nOwotCWludCBkb3duOwotCWludCByZXA7Ci19OwotCiAjZW5kaWYgLyogX19LVk1fVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xhdGVuY3l0b3AuaCBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCmluZGV4IDkwMWMyZDYuLmIwZTk5ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCkBAIC05LDYgKzksNyBAQAogI2lmbmRlZiBfSU5DTFVERV9HVUFSRF9MQVRFTkNZVE9QX0hfCiAjZGVmaW5lIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lUT1BfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaWZkZWYgQ09ORklHX0xBVEVOQ1lUT1AKIAogI2RlZmluZSBMVF9TQVZFQ09VTlQJCTMyCkBAIC0yNCw3ICsyNSwxNCBAQAogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKLXZvaWQgYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKTsKK2V4dGVybiBpbnQgbGF0ZW5jeXRvcF9lbmFibGVkOwordm9pZCBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcik7CitzdGF0aWMgaW5saW5lIHZvaWQKK2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK3sKKwlpZiAodW5saWtlbHkobGF0ZW5jeXRvcF9lbmFibGVkKSkKKwkJX19hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHRhc2ssIHVzZWNzLCBpbnRlcik7Cit9CiAKIHZvaWQgY2xlYXJfYWxsX2xhdGVuY3lfdHJhY2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBkYzE4Yjg3Li43NjI2MmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTc5NSw2ICs3OTUsNyBAQAogCWF0YV9yZXNldF9mbl90CQlwbXBfaGFyZHJlc2V0OwogCWF0YV9wb3N0cmVzZXRfZm5fdAlwbXBfcG9zdHJlc2V0OwogCXZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl2b2lkICgqbG9zdF9pbnRlcnJ1cHQpKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCXZvaWQgKCpwb3N0X2ludGVybmFsX2NtZCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKIAkvKgpAQCAtODM2LDYgKzgzNyw4IEBACiAJdm9pZCAoKmJtZG1hX3N0YXJ0KShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAl2b2lkICgqYm1kbWFfc3RvcCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAJdTggICAoKmJtZG1hX3N0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKKwl2b2lkICgqZHJhaW5fZmlmbykoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KIAogCXNzaXplX3QgKCplbV9zaG93KShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjaGFyICpidWYpOwpAQCAtMTAwOCw2ICsxMDExLDkgQEAKIGV4dGVybiBpbnQgYXRhX2NhYmxlX2lnbm9yZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX2NhYmxlX3Vua25vd24oc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKK2V4dGVybiB2b2lkIGF0YV9waW9fcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkICpkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOworCiAvKiBUaW1pbmcgaGVscGVycyAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfcGlvX25lZWRfaW9yZHkoY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKik7CiBleHRlcm4gY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKmF0YV90aW1pbmdfZmluZF9tb2RlKHU4IHhmZXJfbW9kZSk7CkBAIC0xNTcyLDYgKzE1NzgsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGlycXJldHVybl90IGF0YV9zZmZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IGF0YV9zZmZfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKQEAgLTE1ODQsNiArMTU5MSw3IEBACiBleHRlcm4gaW50IHNhdGFfc2ZmX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oIGIvaW5jbHVkZS9saW51eC9sbV9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkOGZhMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19MTV9JTlRFUkZBQ0VfRE9UX0hfXwotI2RlZmluZSBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fCi0KLQotdHlwZWRlZiB2b2lkICgqbG1fY2FsbGJhY2tfdCkgKHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IHR5cGUsIHZvaWQgKmRhdGEpOwotCi0vKgotICogbG1fbW91bnQoKSBmbGFncwotICoKLSAqIExNX01GTEFHX1NQRUNUQVRPUgotICogR0ZTIGlzIGFza2luZyB0byBqb2luIHRoZSBmaWxlc3lzdGVtJ3MgbG9ja3NwYWNlLCBidXQgaXQgZG9lc24ndCB3YW50IHRvCi0gKiBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0uICBUaGUgbG9jayBtb2R1bGUgc2hvdWxkbid0IGFzc2lnbiBhIGpvdXJuYWwgdG8gdGhlIEZTCi0gKiBtb3VudC4gIEl0IHNob3VsZG4ndCBzZW5kIHJlY292ZXJ5IGNhbGxiYWNrcyB0byB0aGUgRlMgbW91bnQuICBJZiB0aGUgbm9kZQotICogZGllcyBvciB3aXRoZHJhd3MsIGFsbCBsb2NrcyBjYW4gYmUgd2lwZWQgaW1tZWRpYXRlbHkuCi0gKgotICogTE1fTUZMQUdfQ09OVl9OT0RST1AKLSAqIERvIG5vdCBhbGxvdyB0aGUgZGxtIHRvIGludGVybmFsbHkgcmVzb2x2ZSBjb252ZXJzaW9uIGRlYWRsb2NrcyBieSBkZW1vdGluZwotICogdGhlIGxvY2sgdG8gdW5sb2NrZWQgYW5kIHRoZW4gcmVhY3F1aXJpbmcgaXQgaW4gdGhlIHJlcXVlc3RlZCBtb2RlLiBJbnN0ZWFkLAotICogaXQgc2hvdWxkIGNhbmNlbCB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIExNX09VVF9DT05WX0RFQURMSy4KLSAqLwotCi0jZGVmaW5lIExNX01GTEFHX1NQRUNUQVRPUgkweDAwMDAwMDAxCi0jZGVmaW5lIExNX01GTEFHX0NPTlZfTk9EUk9QCTB4MDAwMDAwMDIKLQotLyoKLSAqIGxtX2xvY2tzdHJ1Y3QgZmxhZ3MKLSAqCi0gKiBMTV9MU0ZMQUdfTE9DQUwKLSAqIFRoZSBsb2NrX25vbG9jayBtb2R1bGUgcmV0dXJucyBMTV9MU0ZMQUdfTE9DQUwgdG8gR0ZTLCBpbmRpY2F0aW5nIHRoYXQgR0ZTCi0gKiBjYW4gbWFrZSBzaW5nbGUtbm9kZSBvcHRpbWl6YXRpb25zLgotICovCi0KLSNkZWZpbmUgTE1fTFNGTEFHX0xPQ0FMCQkweDAwMDAwMDAxCi0KLS8qCi0gKiBsbV9sb2NrbmFtZSB0eXBlcwotICovCi0KLSNkZWZpbmUgTE1fVFlQRV9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIExNX1RZUEVfTk9ORElTSwkJMHgwMQotI2RlZmluZSBMTV9UWVBFX0lOT0RFCQkweDAyCi0jZGVmaW5lIExNX1RZUEVfUkdSUAkJMHgwMwotI2RlZmluZSBMTV9UWVBFX01FVEEJCTB4MDQKLSNkZWZpbmUgTE1fVFlQRV9JT1BFTgkJMHgwNQotI2RlZmluZSBMTV9UWVBFX0ZMT0NLCQkweDA2Ci0jZGVmaW5lIExNX1RZUEVfUExPQ0sJCTB4MDcKLSNkZWZpbmUgTE1fVFlQRV9RVU9UQQkJMHgwOAotI2RlZmluZSBMTV9UWVBFX0pPVVJOQUwJCTB4MDkKLQotLyoKLSAqIGxtX2xvY2soKSBzdGF0ZXMKLSAqCi0gKiBTSEFSRUQgaXMgY29tcGF0aWJsZSB3aXRoIFNIQVJFRCwgbm90IHdpdGggREVGRVJSRUQgb3IgRVguCi0gKiBERUZFUlJFRCBpcyBjb21wYXRpYmxlIHdpdGggREVGRVJSRUQsIG5vdCB3aXRoIFNIQVJFRCBvciBFWC4KLSAqLwotCi0jZGVmaW5lIExNX1NUX1VOTE9DS0VECQkwCi0jZGVmaW5lIExNX1NUX0VYQ0xVU0lWRQkJMQotI2RlZmluZSBMTV9TVF9ERUZFUlJFRAkJMgotI2RlZmluZSBMTV9TVF9TSEFSRUQJCTMKLQotLyoKLSAqIGxtX2xvY2soKSBmbGFncwotICoKLSAqIExNX0ZMQUdfVFJZCi0gKiBEb24ndCB3YWl0IHRvIGFjcXVpcmUgdGhlIGxvY2sgaWYgaXQgY2FuJ3QgYmUgZ3JhbnRlZCBpbW1lZGlhdGVseS4KLSAqCi0gKiBMTV9GTEFHX1RSWV8xQ0IKLSAqIFNlbmQgb25lIGJsb2NraW5nIGNhbGxiYWNrIGlmIFRSWSBpcyBzZXQgYW5kIHRoZSBsb2NrIGlzIG5vdCBncmFudGVkLgotICoKLSAqIExNX0ZMQUdfTk9FWFAKLSAqIEdGUyBzZXRzIHRoaXMgZmxhZyBvbiBsb2NrIHJlcXVlc3RzIGl0IG1ha2VzIHdoaWxlIGRvaW5nIGpvdXJuYWwgcmVjb3ZlcnkuCi0gKiBUaGVzZSBzcGVjaWFsIHJlcXVlc3RzIHNob3VsZCBub3QgYmUgYmxvY2tlZCBkdWUgdG8gdGhlIHJlY292ZXJ5IGxpa2UKLSAqIG9yZGluYXJ5IGxvY2tzIHdvdWxkIGJlLgotICoKLSAqIExNX0ZMQUdfQU5ZCi0gKiBBIFNIQVJFRCByZXF1ZXN0IG1heSBhbHNvIGJlIGdyYW50ZWQgaW4gREVGRVJSRUQsIG9yIGEgREVGRVJSRUQgcmVxdWVzdCBtYXkKLSAqIGFsc28gYmUgZ3JhbnRlZCBpbiBTSEFSRUQuICBUaGUgcHJlZmVycmVkIHN0YXRlIGlzIHdoaWNoZXZlciBpcyBjb21wYXRpYmxlCi0gKiB3aXRoIG90aGVyIGdyYW50ZWQgbG9ja3MsIG9yIHRoZSBzcGVjaWZpZWQgc3RhdGUgaWYgbm8gb3RoZXIgbG9ja3MgZXhpc3QuCi0gKgotICogTE1fRkxBR19QUklPUklUWQotICogT3ZlcnJpZGUgZmFpcm5lc3MgY29uc2lkZXJhdGlvbnMuICBTdXBwb3NlIGEgbG9jayBpcyBoZWxkIGluIGEgc2hhcmVkIHN0YXRlCi0gKiBhbmQgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcXVlc3QgZm9yIHRoZSBkZWZlcnJlZCBzdGF0ZS4gIEEgc2hhcmVkIGxvY2sKLSAqIHJlcXVlc3Qgd2l0aCB0aGUgcHJpb3JpdHkgZmxhZyB3b3VsZCBiZSBhbGxvd2VkIHRvIGJ5cGFzcyB0aGUgZGVmZXJyZWQKLSAqIHJlcXVlc3QgYW5kIGRpcmVjdGx5IGpvaW4gdGhlIG90aGVyIHNoYXJlZCBsb2NrLiAgQSBzaGFyZWQgbG9jayByZXF1ZXN0Ci0gKiB3aXRob3V0IHRoZSBwcmlvcml0eSBmbGFnIG1pZ2h0IGJlIGZvcmNlZCB0byB3YWl0IHVudGlsIHRoZSBkZWZlcnJlZAotICogcmVxdWVzdGVkIGhhZCBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgdGhlIGxvY2suCi0gKi8KLQotI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQotI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAotI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAKLQotLyoKLSAqIGxtX2xvY2soKSBhbmQgbG1fYXN5bmNfY2IgcmV0dXJuIGZsYWdzCi0gKgotICogTE1fT1VUX1NUX01BU0sKLSAqIE1hc2tzIHRoZSBsb3dlciB0d28gYml0cyBvZiBsb2NrIHN0YXRlIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAqCi0gKiBMTV9PVVRfQ0FDSEVBQkxFCi0gKiBUaGUgbG9jayBoYXNuJ3QgYmVlbiByZWxlYXNlZCBzbyBHRlMgY2FuIGNvbnRpbnVlIHRvIGNhY2hlIGRhdGEgZm9yIGl0LgotICoKLSAqIExNX09VVF9DQU5DRUxFRAotICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCi0gKgotICogTE1fT1VUX0FTWU5DCi0gKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCi0gKgotICogTE1fT1VUX0NPTlZfREVBRExLCi0gKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZCBkbyB0byBhIGNvbnZlcnNpb24gZGVhZGxvY2suCi0gKi8KLQotI2RlZmluZSBMTV9PVVRfU1RfTUFTSwkJMHgwMDAwMDAwMwotI2RlZmluZSBMTV9PVVRfQ0FOQ0VMRUQJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTE1fT1VUX0FTWU5DCQkweDAwMDAwMDgwCi0jZGVmaW5lIExNX09VVF9FUlJPUgkJMHgwMDAwMDEwMAotCi0vKgotICogbG1fY2FsbGJhY2tfdCB0eXBlcwotICoKLSAqIExNX0NCX05FRURfRSBMTV9DQl9ORUVEX0QgTE1fQ0JfTkVFRF9TCi0gKiBCbG9ja2luZyBjYWxsYmFjaywgYSByZW1vdGUgbm9kZSBpcyByZXF1ZXN0aW5nIHRoZSBnaXZlbiBsb2NrIGluCi0gKiBFWENMVVNJVkUsIERFRkVSUkVELCBvciBTSEFSRUQuCi0gKgotICogTE1fQ0JfTkVFRF9SRUNPVkVSWQotICogVGhlIGdpdmVuIGpvdXJuYWwgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgotICoKLSAqIExNX0NCX0FTWU5DCi0gKiBUaGUgZ2l2ZW4gbG9jayBoYXMgYmVlbiBncmFudGVkLgotICovCi0KLSNkZWZpbmUgTE1fQ0JfTkVFRF9FCQkyNTcKLSNkZWZpbmUgTE1fQ0JfTkVFRF9ECQkyNTgKLSNkZWZpbmUgTE1fQ0JfTkVFRF9TCQkyNTkKLSNkZWZpbmUgTE1fQ0JfTkVFRF9SRUNPVkVSWQkyNjAKLSNkZWZpbmUgTE1fQ0JfQVNZTkMJCTI2MgotCi0vKgotICogbG1fcmVjb3ZlcnlfZG9uZSgpIG1lc3NhZ2VzCi0gKi8KLQotI2RlZmluZSBMTV9SRF9HQVZFVVAJCTMwOAotI2RlZmluZSBMTV9SRF9TVUNDRVNTCQkzMDkKLQotCi1zdHJ1Y3QgbG1fbG9ja25hbWUgewotCXU2NCBsbl9udW1iZXI7Ci0JdW5zaWduZWQgaW50IGxuX3R5cGU7Ci19OwotCi0jZGVmaW5lIGxtX25hbWVfZXF1YWwobmFtZTEsIG5hbWUyKSBcCi0JKCgobmFtZTEpLT5sbl9udW1iZXIgPT0gKG5hbWUyKS0+bG5fbnVtYmVyKSAmJiBcCi0JICgobmFtZTEpLT5sbl90eXBlID09IChuYW1lMiktPmxuX3R5cGUpKSBcCi0KLXN0cnVjdCBsbV9hc3luY19jYiB7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lIGxjX25hbWU7Ci0JaW50IGxjX3JldDsKLX07Ci0KLXN0cnVjdCBsbV9sb2Nrc3RydWN0OwotCi1zdHJ1Y3QgbG1fbG9ja29wcyB7Ci0JY29uc3QgY2hhciAqbG1fcHJvdG9fbmFtZTsKLQotCS8qCi0JICogTW91bnQvVW5tb3VudAotCSAqLwotCi0JaW50ICgqbG1fbW91bnQpIChjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQkgbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCSB1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQkgc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQkgc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLQl2b2lkICgqbG1fb3RoZXJzX21heV9tb3VudCkgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQl2b2lkICgqbG1fdW5tb3VudCkgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQl2b2lkICgqbG1fd2l0aGRyYXcpICh2b2lkICpsb2Nrc3BhY2UpOwotCi0JLyoKLQkgKiBMb2NrIG9yaWVudGVkIG9wZXJhdGlvbnMKLQkgKi8KLQotCWludCAoKmxtX2dldF9sb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsIHZvaWQgKipsb2NrcCk7Ci0KLQl2b2lkICgqbG1fcHV0X2xvY2spICh2b2lkICpsb2NrKTsKLQotCXVuc2lnbmVkIGludCAoKmxtX2xvY2spICh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLAotCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0JdW5zaWduZWQgaW50ICgqbG1fdW5sb2NrKSAodm9pZCAqbG9jaywgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSk7Ci0KLQl2b2lkICgqbG1fY2FuY2VsKSAodm9pZCAqbG9jayk7Ci0KLQlpbnQgKCpsbV9ob2xkX2x2YikgKHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKTsKLQl2b2lkICgqbG1fdW5ob2xkX2x2YikgKHZvaWQgKmxvY2ssIGNoYXIgKmx2Yik7Ci0KLQkvKgotCSAqIFBvc2l4IExvY2sgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0JaW50ICgqbG1fcGxvY2tfZ2V0KSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQlpbnQgKCpsbV9wbG9jaykgKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQlpbnQgKCpsbV9wdW5sb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwotCi0JLyoKLQkgKiBDbGllbnQgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0Jdm9pZCAoKmxtX3JlY292ZXJ5X2RvbmUpICh2b2lkICpsb2Nrc3BhY2UsIHVuc2lnbmVkIGludCBqaWQsCi0JCQkJICB1bnNpZ25lZCBpbnQgbWVzc2FnZSk7Ci0KLQlzdHJ1Y3QgbW9kdWxlICpsbV9vd25lcjsKLX07Ci0KLS8qCi0gKiBsbV9tb3VudCgpIHJldHVybiB2YWx1ZXMKLSAqCi0gKiBsc19qaWQgLSB0aGUgam91cm5hbCBJRCB0aGlzIG5vZGUgc2hvdWxkIHVzZQotICogbHNfZmlyc3QgLSB0aGlzIG5vZGUgaXMgdGhlIGZpcnN0IHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbQotICogbHNfbHZiX3NpemUgLSBzaXplIGluIGJ5dGVzIG9mIGxvY2sgdmFsdWUgYmxvY2tzCi0gKiBsc19sb2Nrc3BhY2UgLSBsb2NrIG1vZHVsZSdzIGNvbnRleHQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0KLSAqIGxzX29wcyAtIGxvY2sgbW9kdWxlJ3MgZnVuY3Rpb25zCi0gKiBsc19mbGFncyAtIGxvY2sgbW9kdWxlIGZlYXR1cmVzCi0gKi8KLQotc3RydWN0IGxtX2xvY2tzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBsc19qaWQ7Ci0JdW5zaWduZWQgaW50IGxzX2ZpcnN0OwotCXVuc2lnbmVkIGludCBsc19sdmJfc2l6ZTsKLQl2b2lkICpsc19sb2Nrc3BhY2U7Ci0JY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxzX29wczsKLQlpbnQgbHNfZmxhZ3M7Ci19OwotCi0vKgotICogTG9jayBtb2R1bGUgYm90dG9tIGludGVyZmFjZS4gIEEgbG9jayBtb2R1bGUgbWFrZXMgaXRzZWxmIGF2YWlsYWJsZSB0byBHRlMKLSAqIHdpdGggdGhlc2UgZnVuY3Rpb25zLgotICovCi0KLWludCBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pOwotdm9pZCBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90byk7Ci0KLS8qCi0gKiBMb2NrIG1vZHVsZSB0b3AgaW50ZXJmYWNlLiAgR0ZTIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucyB3aGVuIG1vdW50aW5nIG9yCi0gKiB1bm1vdW50aW5nIGEgZmlsZSBzeXN0ZW0uCi0gKi8KLQotaW50IGdmczJfbW91bnRfbG9ja3Byb3RvKGNoYXIgKnByb3RvX25hbWUsIGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotdm9pZCBnZnMyX3VubW91bnRfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KTsKLQotdm9pZCBnZnMyX3dpdGhkcmF3X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCk7Ci0KLSNlbmRpZiAvKiBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvbGludXgvbWFnaWMuaAppbmRleCAwYjRkZjdlLi41YjRlMjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCkBAIC00OSw0ICs0OSw1IEBACiAjZGVmaW5lIEZVVEVYRlNfU1VQRVJfTUFHSUMJMHhCQUQxREVBCiAjZGVmaW5lIElOT1RJRllGU19TVVBFUl9NQUdJQwkweDJCQUQxREVBCiAKKyNkZWZpbmUgU1RBQ0tfRU5EX01BR0lDCQkweDU3QUM2RTlECiAjZW5kaWYgLyogX19MSU5VWF9NQUdJQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFqb3IuaCBiL2luY2x1ZGUvbGludXgvbWFqb3IuaAppbmRleCA4ODI0OTQ1Li4wNThlYzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21ham9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYWpvci5oCkBAIC0xNzEsNSArMTcxLDYgQEAKICNkZWZpbmUgVklPVEFQRV9NQUpPUgkJMjMwCiAKICNkZWZpbmUgQkxPQ0tfRVhUX01BSk9SCQkyNTkKKyNkZWZpbmUgU0NTSV9PU0RfTUFKT1IJCTI2MAkvKiBvcGVuLW9zZCdzIE9TRCBzY3NpIGRldmljZSAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGUuaAppbmRleCBjMjNkM2Y1Li5kOWE1MWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZS5oCkBAIC04LDMzICs4LDQ5IEBACiAKIC8qIE1hcGxlIEJ1cyBjb21tYW5kIGFuZCByZXNwb25zZSBjb2RlcyAqLwogZW51bSBtYXBsZV9jb2RlIHsKLQlNQVBMRV9SRVNQT05TRV9GSUxFRVJSID0gLTUsCi0JTUFQTEVfUkVTUE9OU0VfQUdBSU4gPSAtNCwJLyogcmVxdWVzdCBzaG91bGQgYmUgcmV0cmFuc21pdHRlZCAqLwotCU1BUExFX1JFU1BPTlNFX0JBRENNRCA9IC0zLAotCU1BUExFX1JFU1BPTlNFX0JBREZVTkMgPSAtMiwKLQlNQVBMRV9SRVNQT05TRV9OT05FID0gLTEsCS8qIHVuaXQgZGlkbid0IHJlc3BvbmQgYXQgYWxsICovCi0JTUFQTEVfQ09NTUFORF9ERVZJTkZPID0gMSwKLQlNQVBMRV9DT01NQU5EX0FMTElORk8gPSAyLAotCU1BUExFX0NPTU1BTkRfUkVTRVQgPSAzLAotCU1BUExFX0NPTU1BTkRfS0lMTCA9IDQsCi0JTUFQTEVfUkVTUE9OU0VfREVWSU5GTyA9IDUsCi0JTUFQTEVfUkVTUE9OU0VfQUxMSU5GTyA9IDYsCi0JTUFQTEVfUkVTUE9OU0VfT0sgPSA3LAotCU1BUExFX1JFU1BPTlNFX0RBVEFUUkYgPSA4LAotCU1BUExFX0NPTU1BTkRfR0VUQ09ORCA9IDksCi0JTUFQTEVfQ09NTUFORF9HRVRNSU5GTyA9IDEwLAotCU1BUExFX0NPTU1BTkRfQlJFQUQgPSAxMSwKLQlNQVBMRV9DT01NQU5EX0JXUklURSA9IDEyLAotCU1BUExFX0NPTU1BTkRfU0VUQ09ORCA9IDE0CisJTUFQTEVfUkVTUE9OU0VfRklMRUVSUiA9CS01LAorCU1BUExFX1JFU1BPTlNFX0FHQUlOLAkvKiByZXRyYW5zbWl0ICovCisJTUFQTEVfUkVTUE9OU0VfQkFEQ01ELAorCU1BUExFX1JFU1BPTlNFX0JBREZVTkMsCisJTUFQTEVfUkVTUE9OU0VfTk9ORSwJLyogdW5pdCBkaWRuJ3QgcmVzcG9uZCovCisJTUFQTEVfQ09NTUFORF9ERVZJTkZPID0JCTEsCisJTUFQTEVfQ09NTUFORF9BTExJTkZPLAorCU1BUExFX0NPTU1BTkRfUkVTRVQsCisJTUFQTEVfQ09NTUFORF9LSUxMLAorCU1BUExFX1JFU1BPTlNFX0RFVklORk8sCisJTUFQTEVfUkVTUE9OU0VfQUxMSU5GTywKKwlNQVBMRV9SRVNQT05TRV9PSywKKwlNQVBMRV9SRVNQT05TRV9EQVRBVFJGLAorCU1BUExFX0NPTU1BTkRfR0VUQ09ORCwKKwlNQVBMRV9DT01NQU5EX0dFVE1JTkZPLAorCU1BUExFX0NPTU1BTkRfQlJFQUQsCisJTUFQTEVfQ09NTUFORF9CV1JJVEUsCisJTUFQTEVfQ09NTUFORF9CU1lOQywKKwlNQVBMRV9DT01NQU5EX1NFVENPTkQsCisJTUFQTEVfQ09NTUFORF9NSUNDT05UUk9MCit9OworCitlbnVtIG1hcGxlX2ZpbGVfZXJyb3JzIHsKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfUEFSVElUSU9OID0JMHgwMTAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX1BIQVNFX0VSUk9SID0JCTB4MDIwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9JTlZBTElEX0JMT0NLID0JCTB4MDQwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9XUklURV9FUlJPUiA9CQkweDA4MDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9XUklURV9MRU5HVEggPQkweDEwMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfQkFEX0NSQyA9IAkJMHgyMDAwMDAwMAorfTsKKworc3RydWN0IG1hcGxlX2J1ZmZlciB7CisJY2hhciBidWZ4WzB4NDAwXTsKKwl2b2lkICpidWY7CiB9OwogCiBzdHJ1Y3QgbWFwbGVxIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqZGV2OwotCXZvaWQgKnNlbmRidWYsICpyZWN2YnVmLCAqcmVjdmJ1ZmRjc3A7CisJc3RydWN0IG1hcGxlX2J1ZmZlciAqcmVjdmJ1ZjsKKwl2b2lkICpzZW5kYnVmLCAqcmVjdmJ1Zl9wMjsKIAl1bnNpZ25lZCBjaGFyIGxlbmd0aDsKIAllbnVtIG1hcGxlX2NvZGUgY29tbWFuZDsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwogCiBzdHJ1Y3QgbWFwbGVfZGV2aW5mbyB7CkBAIC01MiwxMSArNjgsMTUgQEAKIAlzdHJ1Y3QgbWFwbGVfZHJpdmVyICpkcml2ZXI7CiAJc3RydWN0IG1hcGxlcSAqbXE7CiAJdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IG1hcGxlcSAqIG1xKTsKKwl2b2lkICgqZmlsZWVycl9oYW5kbGVyKShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB2b2lkICpyZWN2YnVmKTsKKwlpbnQgKCpjYW5fdW5sb2FkKShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KTsKIAl1bnNpZ25lZCBsb25nIHdoZW4sIGludGVydmFsLCBmdW5jdGlvbjsKIAlzdHJ1Y3QgbWFwbGVfZGV2aW5mbyBkZXZpbmZvOwogCXVuc2lnbmVkIGNoYXIgcG9ydCwgdW5pdDsKIAljaGFyIHByb2R1Y3RfbmFtZVszMl07CiAJY2hhciBwcm9kdWN0X2xpY2VuY2VbNjRdOworCWF0b21pY190IGJ1c3k7CisJd2FpdF9xdWV1ZV9oZWFkX3QgbWFwbGVfd2FpdDsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIH07CiAKQEAgLTcyLDcgKzkyLDcgQEAKIGludCBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1hcGxlX2RyaXZlciAqKTsKIHZvaWQgbWFwbGVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IG1hcGxlX2RyaXZlciAqKTsKIAotaW50IG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwKK2ludCBtYXBsZV9hZGRfcGFja2V0KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwKIAl1MzIgY29tbWFuZCwgdTMyIGxlbmd0aCwgdm9pZCAqZGF0YSk7CiB2b2lkIG1hcGxlX2NsZWFyX2RldihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oIGIvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCmluZGV4IDQwNGY2NzguLjIyMDMxMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAgTUFUUk9YRkJfQ0lEX0xBU1QKIH07CiAKLSNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIHVfaW50MzJfdCkKKyNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIF9fdTMyKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaAppbmRleCBhZjk1YTFkLi5kODk5ZGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaApAQCAtNDkwLDYgKzQ5MCw3IEBACiAvKgogICogUjIzMSAoMHhFNykgLSBKYWNrIFN0YXR1cwogICovCisjZGVmaW5lIFdNODM1MF9KQUNLX0xfTFZMCQkJMHgwODAwCiAjZGVmaW5lIFdNODM1MF9KQUNLX1JfTFZMICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKaW5kZXggYjY2NDBlMC4uZTA2ZWQzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKQEAgLTExODEsNiArMTE4MSw3IEBACiAjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLwogI2RlZmluZSBXTTg0MDBfRkxMX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfT1VURElWIC0gWzI6MF0gKi8KIAorc3RydWN0IHdtODQwMDsKIHZvaWQgd204NDAwX3Jlc2V0X2NvZGVjX3JlZ19jYWNoZShzdHJ1Y3Qgd204NDAwICp3bTg0MDApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKaW5kZXggYTgyMGY4MS4uYmViNmVjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgVFVOX01JTk9SCQkyMDAKICNkZWZpbmUgTVdBVkVfTUlOT1IJCTIxOQkvKiBBQ1AvTXdhdmUgTW9kZW0gKi8KICNkZWZpbmUgTVBUX01JTk9SCQkyMjAKKyNkZWZpbmUgTVBUMlNBU19NSU5PUgkJMjIxCiAjZGVmaW5lIEhQRVRfTUlOT1IJCTIyOAogI2RlZmluZSBGVVNFX01JTk9SCQkyMjkKICNkZWZpbmUgS1ZNX01JTk9SCQkyMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAppbmRleCBjZjljNjc5Li4wZjgyMjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCkBAIC01NSw2ICs1NSw3IEBACiAJTUxYNF9DTURfQ0xPU0VfUE9SVAkgPSAweGEsCiAJTUxYNF9DTURfUVVFUllfSENBCSA9IDB4YiwKIAlNTFg0X0NNRF9RVUVSWV9QT1JUCSA9IDB4NDMsCisJTUxYNF9DTURfU0VOU0VfUE9SVAkgPSAweDRkLAogCU1MWDRfQ01EX1NFVF9QT1JUCSA9IDB4YywKIAlNTFg0X0NNRF9BQ0NFU1NfRERSCSA9IDB4MmUsCiAJTUxYNF9DTURfTUFQX0lDTQkgPSAweGZmYSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAppbmRleCA4ZjY1OWNjLi4zYWZmOGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCkBAIC0xNTUsOCArMTU1LDkgQEAKIH07CiAKIGVudW0gbWx4NF9wb3J0X3R5cGUgewotCU1MWDRfUE9SVF9UWVBFX0lCCT0gMSA8PCAwLAotCU1MWDRfUE9SVF9UWVBFX0VUSAk9IDEgPDwgMSwKKwlNTFg0X1BPUlRfVFlQRV9JQgk9IDEsCisJTUxYNF9QT1JUX1RZUEVfRVRICT0gMiwKKwlNTFg0X1BPUlRfVFlQRV9BVVRPCT0gMwogfTsKIAogZW51bSBtbHg0X3NwZWNpYWxfdmxhbl9pZHggewpAQCAtMjM3LDYgKzIzOCw3IEBACiAJZW51bSBtbHg0X3BvcnRfdHlwZQlwb3J0X3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAl1OAkJCXN1cHBvcnRlZF90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiAJdTMyCQkJcG9ydF9tYXNrOworCWVudW0gbWx4NF9wb3J0X3R5cGUJcG9zc2libGVfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogfTsKIAogc3RydWN0IG1seDRfYnVmX2xpc3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvbW1pb3RyYWNlLmgKaW5kZXggMTM5ZDdjOC4uM2QxYjdiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21taW90cmFjZS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBNTUlPVFJBQ0VfSAotI2RlZmluZSBNTUlPVFJBQ0VfSAorI2lmbmRlZiBfTElOVVhfTU1JT1RSQUNFX0gKKyNkZWZpbmUgX0xJTlVYX01NSU9UUkFDRV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTEzLDI4ICsxMywzNCBAQAogCQkJCXVuc2lnbmVkIGxvbmcgY29uZGl0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAogc3RydWN0IGttbWlvX3Byb2JlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGttbWlvIGludGVybmFsIGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIGFkZHI7IC8qIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSBwcm9iZSBwb2ludCAqLwotCXVuc2lnbmVkIGxvbmcgbGVuOyAvKiBsZW5ndGggb2YgdGhlIHByb2JlIHJlZ2lvbiAqLwotCWttbWlvX3ByZV9oYW5kbGVyX3QgcHJlX2hhbmRsZXI7IC8qIENhbGxlZCBiZWZvcmUgYWRkciBpcyBleGVjdXRlZC4gKi8KLQlrbW1pb19wb3N0X2hhbmRsZXJfdCBwb3N0X2hhbmRsZXI7IC8qIENhbGxlZCBhZnRlciBhZGRyIGlzIGV4ZWN1dGVkICovCi0Jdm9pZCAqcHJpdmF0ZTsKKwkvKiBrbW1pbyBpbnRlcm5hbCBsaXN0OiAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwkvKiBzdGFydCBsb2NhdGlvbiBvZiB0aGUgcHJvYmUgcG9pbnQ6ICovCisJdW5zaWduZWQgbG9uZwkJYWRkcjsKKwkvKiBsZW5ndGggb2YgdGhlIHByb2JlIHJlZ2lvbjogKi8KKwl1bnNpZ25lZCBsb25nCQlsZW47CisJLyogQ2FsbGVkIGJlZm9yZSBhZGRyIGlzIGV4ZWN1dGVkOiAqLworCWttbWlvX3ByZV9oYW5kbGVyX3QJcHJlX2hhbmRsZXI7CisJLyogQ2FsbGVkIGFmdGVyIGFkZHIgaXMgZXhlY3V0ZWQ6ICovCisJa21taW9fcG9zdF9oYW5kbGVyX3QJcG9zdF9oYW5kbGVyOworCXZvaWQJCQkqcHJpdmF0ZTsKIH07CiAKLS8qIGttbWlvIGlzIGFjdGl2ZSBieSBzb21lIGttbWlvX3Byb2Jlcz8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2ttbWlvX2FjdGl2ZSh2b2lkKQotewotCWV4dGVybiB1bnNpZ25lZCBpbnQga21taW9fY291bnQ7Ci0JcmV0dXJuIGttbWlvX2NvdW50OwotfQorZXh0ZXJuIHVuc2lnbmVkIGludCBrbW1pb19jb3VudDsKIAogZXh0ZXJuIGludCByZWdpc3Rlcl9rbW1pb19wcm9iZShzdHJ1Y3Qga21taW9fcHJvYmUgKnApOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9rbW1pb19wcm9iZShzdHJ1Y3Qga21taW9fcHJvYmUgKnApOwogCisjaWZkZWYgQ09ORklHX01NSU9UUkFDRQorLyoga21taW8gaXMgYWN0aXZlIGJ5IHNvbWUga21taW9fcHJvYmVzPyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfa21taW9fYWN0aXZlKHZvaWQpCit7CisJcmV0dXJuIGttbWlvX2NvdW50OworfQorCiAvKiBDYWxsZWQgZnJvbSBwYWdlIGZhdWx0IGhhbmRsZXIuICovCiBleHRlcm4gaW50IGttbWlvX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfTU1JT1RSQUNFCiAvKiBDYWxsZWQgZnJvbSBpb3JlbWFwLmMgKi8KIGV4dGVybiB2b2lkIG1taW90cmFjZV9pb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJCQl2b2lkIF9faW9tZW0gKmFkZHIpOwpAQCAtNDMsNyArNDksMTcgQEAKIC8qIEZvciBhbnlvbmUgdG8gaW5zZXJ0IG1hcmtlcnMuIFJlbWVtYmVyIHRyYWlsaW5nIG5ld2xpbmUuICovCiBleHRlcm4gaW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotI2Vsc2UKKyNlbHNlIC8qICFDT05GSUdfTU1JT1RSQUNFOiAqLworc3RhdGljIGlubGluZSBpbnQgaXNfa21taW9fYWN0aXZlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGttbWlvX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1taW90cmFjZV9pb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCBfX2lvbWVtICphZGRyKQogewpAQCAtNjMsMjggKzc5LDI4IEBACiAjZW5kaWYgLyogQ09ORklHX01NSU9UUkFDRSAqLwogCiBlbnVtIG1tX2lvX29wY29kZSB7Ci0JTU1JT19SRUFEID0gMHgxLCAgICAgLyogc3RydWN0IG1taW90cmFjZV9ydyAqLwotCU1NSU9fV1JJVEUgPSAweDIsICAgIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KLQlNTUlPX1BST0JFID0gMHgzLCAgICAvKiBzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqLwotCU1NSU9fVU5QUk9CRSA9IDB4NCwgIC8qIHN0cnVjdCBtbWlvdHJhY2VfbWFwICovCi0JTU1JT19VTktOT1dOX09QID0gMHg1LCAvKiBzdHJ1Y3QgbW1pb3RyYWNlX3J3ICovCisJTU1JT19SRUFECT0gMHgxLAkvKiBzdHJ1Y3QgbW1pb3RyYWNlX3J3ICovCisJTU1JT19XUklURQk9IDB4MiwJLyogc3RydWN0IG1taW90cmFjZV9ydyAqLworCU1NSU9fUFJPQkUJPSAweDMsCS8qIHN0cnVjdCBtbWlvdHJhY2VfbWFwICovCisJTU1JT19VTlBST0JFCT0gMHg0LAkvKiBzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqLworCU1NSU9fVU5LTk9XTl9PUCA9IDB4NSwJLyogc3RydWN0IG1taW90cmFjZV9ydyAqLwogfTsKIAogc3RydWN0IG1taW90cmFjZV9ydyB7Ci0JcmVzb3VyY2Vfc2l6ZV90IHBoeXM7CS8qIFBDSSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCi0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQl1bnNpZ25lZCBsb25nIHBjOwkvKiBvcHRpb25hbCBwcm9ncmFtIGNvdW50ZXIgKi8KLQlpbnQgbWFwX2lkOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwkvKiBvbmUgb2YgTU1JT197UkVBRCxXUklURSxVTktOT1dOX09QfSAqLwotCXVuc2lnbmVkIGNoYXIgd2lkdGg7CS8qIHNpemUgb2YgcmVnaXN0ZXIgYWNjZXNzIGluIGJ5dGVzICovCisJcmVzb3VyY2Vfc2l6ZV90CXBoeXM7CS8qIFBDSSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwl2YWx1ZTsKKwl1bnNpZ25lZCBsb25nCXBjOwkvKiBvcHRpb25hbCBwcm9ncmFtIGNvdW50ZXIgKi8KKwlpbnQJCW1hcF9pZDsKKwl1bnNpZ25lZCBjaGFyCW9wY29kZTsJLyogb25lIG9mIE1NSU9fe1JFQUQsV1JJVEUsVU5LTk9XTl9PUH0gKi8KKwl1bnNpZ25lZCBjaGFyCXdpZHRoOwkvKiBzaXplIG9mIHJlZ2lzdGVyIGFjY2VzcyBpbiBieXRlcyAqLwogfTsKIAogc3RydWN0IG1taW90cmFjZV9tYXAgewotCXJlc291cmNlX3NpemVfdCBwaHlzOwkvKiBiYXNlIGFkZHJlc3MgaW4gUENJIHNwYWNlICovCi0JdW5zaWduZWQgbG9uZyB2aXJ0OwkvKiBiYXNlIHZpcnR1YWwgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbGVuOwkvKiBtYXBwaW5nIHNpemUgKi8KLQlpbnQgbWFwX2lkOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwkvKiBNTUlPX1BST0JFIG9yIE1NSU9fVU5QUk9CRSAqLworCXJlc291cmNlX3NpemVfdAlwaHlzOwkvKiBiYXNlIGFkZHJlc3MgaW4gUENJIHNwYWNlICovCisJdW5zaWduZWQgbG9uZwl2aXJ0OwkvKiBiYXNlIHZpcnR1YWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJbGVuOwkvKiBtYXBwaW5nIHNpemUgKi8KKwlpbnQJCW1hcF9pZDsKKwl1bnNpZ25lZCBjaGFyCW9wY29kZTsJLyogTU1JT19QUk9CRSBvciBNTUlPX1VOUFJPQkUgKi8KIH07CiAKIC8qIGluIGtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYyAqLwpAQCAtOTQsNCArMTEwLDQgQEAKIGV4dGVybiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKTsKIGV4dGVybiBpbnQgbW1pb190cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogCi0jZW5kaWYgLyogTU1JT1RSQUNFX0ggKi8KKyNlbmRpZiAvKiBfTElOVVhfTU1JT1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IGZkZTg2NjcuLjFiZjU5MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtNDU0LDQgKzQ1NCwxMyBAQAogCiAjZGVmaW5lIERNSV9NQVRDSChhLCBiKQl7IGEsIGIgfQogCisjZGVmaW5lIFBMQVRGT1JNX05BTUVfU0laRQkyMAorI2RlZmluZSBQTEFURk9STV9NT0RVTEVfUFJFRklYCSJwbGF0Zm9ybToiCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgeworCWNoYXIgbmFtZVtQTEFURk9STV9OQU1FX1NJWkVdOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7Cit9OworCiAjZW5kaWYgLyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBjYWIyYTg1Li41MWY1NWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIE1OVF9OT0RJUkFUSU1FCTB4MTAKICNkZWZpbmUgTU5UX1JFTEFUSU1FCTB4MjAKICNkZWZpbmUgTU5UX1JFQURPTkxZCTB4NDAJLyogZG9lcyB0aGUgdXNlciB3YW50IHRoaXMgdG8gYmUgci9vPyAqLworI2RlZmluZSBNTlRfU1RSSUNUQVRJTUUgMHg4MAogCiAjZGVmaW5lIE1OVF9TSFJJTktBQkxFCTB4MTAwCiAjZGVmaW5lIE1OVF9JTUJBTEFOQ0VEX1dSSVRFX0NPVU5UCTB4MjAwIC8qIGp1c3QgZm9yIGRlYnVnZ2luZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggOGE0NTU2OS4uMGQ0NWI0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0xOTMsNiArMTkzLDkgQEAKIHN0cnVjdCBtZmNfY2FjaGUgCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbmV4dDsJCQkvKiBOZXh0IGVudHJ5IG9uIGNhY2hlIGxpbmUgCSovCisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKm1mY19uZXQ7CisjZW5kaWYKIAlfX2JlMzIgbWZjX21jYXN0Z3JwOwkJCS8qIEdyb3VwIHRoZSBlbnRyeSBiZWxvbmdzIHRvIAkqLwogCV9fYmUzMiBtZmNfb3JpZ2luOwkJCS8qIFNvdXJjZSBvZiBwYWNrZXQgCQkqLwogCXZpZmlfdCBtZmNfcGFyZW50OwkJCS8qIFNvdXJjZSBpbnRlcmZhY2UJCSovCkBAIC0yMTUsNiArMjE4LDE4IEBACiAJfSBtZmNfdW47CiB9OwogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbmV0ICptZmNfbmV0KGNvbnN0IHN0cnVjdCBtZmNfY2FjaGUgKm1mYykKK3sKKwlyZXR1cm4gcmVhZF9wbmV0KCZtZmMtPm1mY19uZXQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIG1mY19uZXRfc2V0KHN0cnVjdCBtZmNfY2FjaGUgKm1mYywgc3RydWN0IG5ldCAqbmV0KQoreworCXdyaXRlX3BuZXQoJm1mYy0+bWZjX25ldCwgaG9sZF9uZXQobmV0KSk7Cit9CisKICNkZWZpbmUgTUZDX1NUQVRJQwkJMQogI2RlZmluZSBNRkNfTk9USUZZCQkyCiAKQEAgLTI0MSw3ICsyNTYsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IHJ0bXNnOwotZXh0ZXJuIGludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCk7CitleHRlcm4gaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCA1Mzc1ZmFjLi40M2RjOTdlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTY1LDcgKzY1LDcgQEAKIAltaWZpX3QJbWlmNmNfbWlmaTsJCS8qIEluZGV4IG9mIE1JRiAqLwogCXVuc2lnbmVkIGNoYXIgbWlmNmNfZmxhZ3M7CS8qIE1JRkZfIGZsYWdzICovCiAJdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsJLyogdHRsIGxpbWl0ICovCi0JdV9zaG9ydAkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KKwlfX3UxNgkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KIAl1bnNpZ25lZCBpbnQgdmlmY19yYXRlX2xpbWl0OwkvKiBSYXRlIGxpbWl0ZXIgdmFsdWVzIChOSSkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmNwX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCmluZGV4IGY2OWU2NmQuLjMwYjA2YzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaApAQCAtMjA0LDcgKzIwNCw3IEBACiAvKiBsaW51eC9mcy9uY3Bmcy9kaXIuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5jcF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5jcF9kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmNwX3Jvb3RfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zOwogaW50IG5jcF9jb25uX2xvZ2dlZF9pbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBpbnQgbmNwX2RhdGVfZG9zMnVuaXgoX19sZTE2IHRpbWUsIF9fbGUxNiBkYXRlKTsKIHZvaWQgbmNwX2RhdGVfdW5peDJkb3MoaW50IHVuaXhfZGF0ZSwgX19sZTE2ICogdGltZSwgX19sZTE2ICogZGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oIGIvaW5jbHVkZS9saW51eC9uY3Bfbm8uaAppbmRleCBmNTZhNjk2Li5jZGRhYTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX25vLmgKQEAgLTIsMTggKzIsMTggQEAKICNkZWZpbmUgX05DUF9OTwogCiAvKiB0aGVzZSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBieXRlIGFzIHNlZW4gYnkgTkNQICovCi0jZGVmaW5lIGFST05MWQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpKQotI2RlZmluZSBhSElEREVOCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMikpCi0jZGVmaW5lIGFTWVNURU0JCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMig0KSkKLSNkZWZpbmUgYUVYRUNVVEUJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDgpKQotI2RlZmluZSBhRElSCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxMCkpCi0jZGVmaW5lIGFBUkNICQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyMCkpCi0jZGVmaW5lIGFTSEFSRUQJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDgwKSkKLSNkZWZpbmUgYURPTlRTVUJBTExPQ0FURQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTEpKQotI2RlZmluZSBhVFJBTlNBQ1RJT05BTAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDEyKSkKLSNkZWZpbmUgYVBVUkdFCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE2KSkKLSNkZWZpbmUgYVJFTkFNRUlOSElCSVQJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNykpCi0jZGVmaW5lIGFERUxFVEVJTkhJQklUCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTgpKQotI2RlZmluZSBhRE9OVENPTVBSRVNTCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MjcpKQorI2RlZmluZSBhUk9OTFkJCQkoX19jcHVfdG9fbGUzMigxKSkKKyNkZWZpbmUgYUhJRERFTgkJCShfX2NwdV90b19sZTMyKDIpKQorI2RlZmluZSBhU1lTVEVNCQkJKF9fY3B1X3RvX2xlMzIoNCkpCisjZGVmaW5lIGFFWEVDVVRFCQkoX19jcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgYURJUgkJCShfX2NwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBhQVJDSAkJCShfX2NwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBhU0hBUkVECQkJKF9fY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIGFET05UU1VCQUxMT0NBVEUJKF9fY3B1X3RvX2xlMzIoMUw8PDExKSkKKyNkZWZpbmUgYVRSQU5TQUNUSU9OQUwJCShfX2NwdV90b19sZTMyKDFMPDwxMikpCisjZGVmaW5lIGFQVVJHRQkJCShfX2NwdV90b19sZTMyKDFMPDwxNikpCisjZGVmaW5lIGFSRU5BTUVJTkhJQklUCQkoX19jcHVfdG9fbGUzMigxTDw8MTcpKQorI2RlZmluZSBhREVMRVRFSU5ISUJJVAkJKF9fY3B1X3RvX2xlMzIoMUw8PDE4KSkKKyNkZWZpbmUgYURPTlRDT01QUkVTUwkJKF9fY3B1X3RvX2xlMzIoMUw8PDI3KSkKIAogI2VuZGlmIC8qIF9OQ1BfTk8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmggYi9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCmluZGV4IDg3MzBkNWQuLjEyYzlkZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaApAQCAtMzEsNiArMzEsNyBAQAogICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgRmxhZ3MKICAqLwogCisjZGVmaW5lIE5URl9VU0UJCTB4MDEKICNkZWZpbmUgTlRGX1BST1hZCTB4MDgJLyogPT0gQVRGX1BVQkwgKi8KICNkZWZpbmUgTlRGX1JPVVRFUgkweDgwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDQ1MTVlZmEuLjRmYzJmZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTI5LDExICsxMjksMTUgQEAKIAlzb2NrZXRfc3RhdGUJCXN0YXRlOwogCXNob3J0CQkJdHlwZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CisJLyoKKwkgKiBQbGVhc2Uga2VlcCBmYXN5bmNfbGlzdCAmIHdhaXQgZmllbGRzIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUKKwkgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmFzeW5jX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwogCXN0cnVjdCBmaWxlCQkqZmlsZTsKIAlzdHJ1Y3Qgc29jawkJKnNrOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOwogfTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTdmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX05FVF9EUk9QTU9OX0gKKyNkZWZpbmUgX19ORVRfRFJPUE1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK3N0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCB7CisJX191OCBwY1s4XTsKKwlfX3UzMiBjb3VudDsKK307CisKKyNkZWZpbmUgTkVUX0RNX0NGR19WRVJTSU9OICAwCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfQ09VTlQgIDEKKyNkZWZpbmUgTkVUX0RNX0NGR19BTEVSVF9ERUxBWSAyCisjZGVmaW5lIE5FVF9ETV9DRkdfTUFYIDMKKworc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgeworCV9fdTMyIHR5cGU7CisJX191NjQgZGF0YSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCitzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgeworCV9fdTMyIGVudHJpZXM7CisJc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgb3B0aW9uc1swXTsKK307CisKK3N0cnVjdCBuZXRfZG1fYWxlcnRfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCBwb2ludHNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX3VzZXJfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBuZXRfZG1fY29uZmlnX21zZyB1c2VyOworCQlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyBhbGVydDsKKwl9IHU7Cit9OworCisKKy8qIFRoZXNlIGFyZSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGVzIGZvciB0aGlzIHByb3RvY29sICovCisKK2VudW0geworCU5FVF9ETV9DTURfVU5TUEVDID0gMCwKKwlORVRfRE1fQ01EX0FMRVJULAorCU5FVF9ETV9DTURfQ09ORklHLAorCU5FVF9ETV9DTURfU1RBUlQsCisJTkVUX0RNX0NNRF9TVE9QLAorCV9ORVRfRE1fQ01EX01BWCwKK307CisKKyNkZWZpbmUgTkVUX0RNX0NNRF9NQVggKF9ORVRfRE1fQ01EX01BWCAtIDEpCisKKy8qCisgKiBPdXIgZ3JvdXAgaWRlbnRpZmllcnMKKyAqLworI2RlZmluZSBORVRfRE1fR1JQX0FMRVJUIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmggYi9pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I4NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBVc2Vyc3BhY2UgQVBJIGZvciBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIG5ldHdvcmsgcGFja2V0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX1RJTUVTVEFNUElOR19ICisjZGVmaW5lIF9ORVRfVElNRVNUQU1QSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAgIC8qIGZvciBTT19USU1FU1RBTVBJTkcgKi8KKworLyogU09fVElNRVNUQU1QSU5HIGdldHMgYW4gaW50ZWdlciBiaXQgZmllbGQgY29tcHJpc2VkIG9mIHRoZXNlIHZhbHVlcyAqLworZW51bSB7CisJU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSA9ICgxPDwwKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFID0gKDE8PDEpLAorCVNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgPSAoMTw8MiksCisJU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSA9ICgxPDwzKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFID0gKDE8PDQpLAorCVNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFID0gKDE8PDUpLAorCVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFID0gKDE8PDYpLAorCVNPRl9USU1FU1RBTVBJTkdfTUFTSyA9CisJKFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIC0gMSkgfAorCVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFCit9OworCisvKioKKyAqIHN0cnVjdCBod3RzdGFtcF9jb25maWcgLSAlU0lPQ1NIV1RTVEFNUCBwYXJhbWV0ZXIKKyAqCisgKiBAZmxhZ3M6CW5vIGZsYWdzIGRlZmluZWQgcmlnaHQgbm93LCBtdXN0IGJlIHplcm8KKyAqIEB0eF90eXBlOglvbmUgb2YgSFdUU1RBTVBfVFhfKgorICogQHJ4X3R5cGU6CW9uZSBvZiBvbmUgb2YgSFdUU1RBTVBfRklMVEVSXyoKKyAqCisgKiAlU0lPQ1NIV1RTVEFNUCBleHBlY3RzIGEgJnN0cnVjdCBpZnJlcSB3aXRoIGEgaWZyX2RhdGEgcG9pbnRlciB0bworICogdGhpcyBzdHJ1Y3R1cmUuIGRldl9pZnNpb2MoKSBpbiB0aGUga2VybmVsIHRha2VzIGNhcmUgb2YgdGhlCisgKiB0cmFuc2xhdGlvbiBiZXR3ZWVuIDMyIGJpdCB1c2Vyc3BhY2UgYW5kIDY0IGJpdCBrZXJuZWwuIFRoZQorICogc3RydWN0dXJlIGlzIGludGVudGlvbmFsbHkgY2hvc2VuIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIGxheW91dCBvbgorICogMzIgYW5kIDY0IGJpdCBzeXN0ZW1zLCBkb24ndCBicmVhayB0aGlzIQorICovCitzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHsKKwlpbnQgZmxhZ3M7CisJaW50IHR4X3R5cGU7CisJaW50IHJ4X2ZpbHRlcjsKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT50eF90eXBlICovCitlbnVtIHsKKwkvKgorCSAqIE5vIG91dGdvaW5nIHBhY2tldCB3aWxsIG5lZWQgaGFyZHdhcmUgdGltZSBzdGFtcGluZzsKKwkgKiBzaG91bGQgYSBwYWNrZXQgYXJyaXZlIHdoaWNoIGFza3MgZm9yIGl0LCBubyBoYXJkd2FyZQorCSAqIHRpbWUgc3RhbXBpbmcgd2lsbCBiZSBkb25lLgorCSAqLworCUhXVFNUQU1QX1RYX09GRiwKKworCS8qCisJICogRW5hYmxlcyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGZvciBvdXRnb2luZyBwYWNrZXRzOworCSAqIHRoZSBzZW5kZXIgb2YgdGhlIHBhY2tldCBkZWNpZGVzIHdoaWNoIGFyZSB0byBiZQorCSAqIHRpbWUgc3RhbXBlZCBieSBzZXR0aW5nICVTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFCisJICogYmVmb3JlIHNlbmRpbmcgdGhlIHBhY2tldC4KKwkgKi8KKwlIV1RTVEFNUF9UWF9PTiwKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT5yeF9maWx0ZXIgKi8KK2VudW0geworCS8qIHRpbWUgc3RhbXAgbm8gaW5jb21pbmcgcGFja2V0IGF0IGFsbCAqLworCUhXVFNUQU1QX0ZJTFRFUl9OT05FLAorCisJLyogdGltZSBzdGFtcCBhbnkgaW5jb21pbmcgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX0FMTCwKKworCS8qIHJldHVybiB2YWx1ZTogdGltZSBzdGFtcCBhbGwgcGFja2V0cyByZXF1ZXN0ZWQgcGx1cyBzb21lIG90aGVycyAqLworCUhXVFNUQU1QX0ZJTFRFUl9TT01FLAorCisJLyogUFRQIHYxLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQsCisJLyogUFRQIHYxLCBVRFAsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DLAorCS8qIFBUUCB2MSwgVURQLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVEsCisJLyogUFRQIHYyLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQsCisJLyogUFRQIHYyLCBVRFAsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DLAorCS8qIFBUUCB2MiwgVURQLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVEsCisKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCwKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkMsCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUSwKKworCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQsCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkMsCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVRLAorfTsKKworI2VuZGlmIC8qIF9ORVRfVElNRVNUQU1QSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDY1OTM2NjcuLjJlNzc4M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzIsNiArMzIsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtOTYsNyArOTcsNyBAQAogICoJQ29tcHV0ZSB0aGUgd29yc3QgY2FzZSBoZWFkZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2xzCiAgKgl1c2VkLgogICovCi0gCisKICNpZiBkZWZpbmVkKENPTkZJR19XTEFOXzgwMjExKSB8fCBkZWZpbmVkKENPTkZJR19BWDI1KSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkKICMgaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfTUVTSCkKICMgIGRlZmluZSBMTF9NQVhfSEVBREVSIDEyOApAQCAtMTI0LDcgKzEyNSw3IEBACiAgKglOZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzLiBBa2luIHRvIHRoZSAyLjAgZXRoZXIgc3RhdHMgYnV0CiAgKgl3aXRoIGJ5dGUgY291bnRlcnMuCiAgKi8KLSAKKwogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMKIHsKIAl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCkBAIC0yODUsNyArMjg2LDcgQEAKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGF0IGJvb3QgdGltZSBjb25maWd1cmVkIG5ldGRldmljZSBzZXR0aW5ncy4gVGhleQotICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuIAorICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuCiAgKi8KIHN0cnVjdCBuZXRkZXZfYm9vdF9zZXR1cCB7CiAJY2hhciBuYW1lW0lGTkFNU0laXTsKQEAgLTMxNCw2ICszMTUsOSBAQAogCXNwaW5sb2NrX3QJCXBvbGxfbG9jazsKIAlpbnQJCQlwb2xsX293bmVyOwogI2VuZGlmCisKKwl1bnNpZ25lZCBpbnQJCWdyb19jb3VudDsKKwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKmdyb19saXN0OwpAQCAtMzI3LDYgKzMzMSwxNCBAQAogCU5BUElfU1RBVEVfTlBTVkMsCS8qIE5ldHBvbGwgLSBkb24ndCBkZXF1ZXVlIGZyb20gcG9sbF9saXN0ICovCiB9OwogCitlbnVtIHsKKwlHUk9fTUVSR0VELAorCUdST19NRVJHRURfRlJFRSwKKwlHUk9fSEVMRCwKKwlHUk9fTk9STUFMLAorCUdST19EUk9QLAorfTsKKwogZXh0ZXJuIHZvaWQgX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5hcGlfZGlzYWJsZV9wZW5kaW5nKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKQEAgLTU4Miw2ICs1OTQsMTQgQEAKICNkZWZpbmUgSEFWRV9ORVRERVZfUE9MTAogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqbmRvX3BvbGxfY29udHJvbGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwlpbnQJCQkoKm5kb19mY29lX2RkcF9zZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgIHUxNiB4aWQsCisJCQkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBzZ2MpOworCWludAkJCSgqbmRvX2Zjb2VfZGRwX2RvbmUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgIHUxNiB4aWQpOworI2VuZGlmCiB9OwogCiAvKgpAQCAtNjUwLDE0ICs2NzAsMTcgQEAKICNkZWZpbmUgTkVUSUZfRl9HUk8JCTE2Mzg0CS8qIEdlbmVyaWMgcmVjZWl2ZSBvZmZsb2FkICovCiAjZGVmaW5lIE5FVElGX0ZfTFJPCQkzMjc2OAkvKiBsYXJnZSByZWNlaXZlIG9mZmxvYWQgKi8KIAorI2RlZmluZSBORVRJRl9GX0ZDT0VfQ1JDCSgxIDw8IDI0KSAvKiBGQ29FIENSQzMyICovCisKIAkvKiBTZWdtZW50YXRpb24gb2ZmbG9hZCBmZWF0dXJlcyAqLwogI2RlZmluZSBORVRJRl9GX0dTT19TSElGVAkxNgotI2RlZmluZSBORVRJRl9GX0dTT19NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgTkVUSUZfRl9HU09fTUFTSwkweDAwZmYwMDAwCiAjZGVmaW5lIE5FVElGX0ZfVFNPCQkoU0tCX0dTT19UQ1BWNCA8PCBORVRJRl9GX0dTT19TSElGVCkKICNkZWZpbmUgTkVUSUZfRl9VRk8JCShTS0JfR1NPX1VEUCA8PCBORVRJRl9GX0dTT19TSElGVCkKICNkZWZpbmUgTkVUSUZfRl9HU09fUk9CVVNUCShTS0JfR1NPX0RPREdZIDw8IE5FVElGX0ZfR1NPX1NISUZUKQogI2RlZmluZSBORVRJRl9GX1RTT19FQ04JCShTS0JfR1NPX1RDUF9FQ04gPDwgTkVUSUZfRl9HU09fU0hJRlQpCiAjZGVmaW5lIE5FVElGX0ZfVFNPNgkJKFNLQl9HU09fVENQVjYgPDwgTkVUSUZfRl9HU09fU0hJRlQpCisjZGVmaW5lIE5FVElGX0ZfRlNPCQkoU0tCX0dTT19GQ09FIDw8IE5FVElGX0ZfR1NPX1NISUZUKQogCiAJLyogTGlzdCBvZiBmZWF0dXJlcyB3aXRoIHNvZnR3YXJlIGZhbGxiYWNrcy4gKi8KICNkZWZpbmUgTkVUSUZfRl9HU09fU09GVFdBUkUJKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082KQpAQCAtNzQwLDcgKzc2Myw3IEBACiAJdm9pZAkJCSpkc2FfcHRyOwkvKiBkc2Egc3BlY2lmaWMgZGF0YSAqLwogI2VuZGlmCiAJdm9pZCAJCQkqYXRhbGtfcHRyOwkvKiBBcHBsZVRhbGsgbGluayAJKi8KLQl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovICAKKwl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKmRuX3B0cjsgICAgICAgIC8qIERFQ25ldCBzcGVjaWZpYyBkYXRhICovCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKmlwNl9wdHI7ICAgICAgIC8qIElQdjYgc3BlY2lmaWMgZGF0YSAqLwogCXZvaWQJCQkqZWNfcHRyOwkvKiBFY29uZXQgc3BlY2lmaWMgZGF0YQkqLwpAQCAtNzUzLDcgKzc3Niw3IEBACiAgKi8KIAl1bnNpZ25lZCBsb25nCQlsYXN0X3J4OwkvKiBUaW1lIG9mIGxhc3QgUngJKi8KIAkvKiBJbnRlcmZhY2UgYWRkcmVzcyBpbmZvIHVzZWQgaW4gZXRoX3R5cGVfdHJhbnMoKSAqLwotCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CS8qIGh3IGFkZHJlc3MsIChiZWZvcmUgYmNhc3QgCisJdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsJLyogaHcgYWRkcmVzcywgKGJlZm9yZSBiY2FzdAogCQkJCQkJCSAgIGJlY2F1c2UgbW9zdCBwYWNrZXRzIGFyZSB1bmljYXN0KSAqLwogCiAJdW5zaWduZWQgY2hhcgkJYnJvYWRjYXN0W01BWF9BRERSX0xFTl07CS8qIGh3IGJjYXN0IGFkZAkqLwpAQCAtODQwLDYgKzg2MywxMSBAQAogCXN0cnVjdCBkY2JubF9ydG5sX29wcyAqZGNibmxfb3BzOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwkvKiBtYXggZXhjaGFuZ2UgaWQgZm9yIEZDb0UgTFJPIGJ5IGRkcCAqLworCXVuc2lnbmVkIGludAkJZmNvZV9kZHBfeGlkOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiAJc3RydWN0IHsKIAkJaW50CQkJKCppbml0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTk4NCw2ICsxMDEyLDkgQEAKIHZvaWQgbmV0aWZfbmFwaV9kZWwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTsKIAogc3RydWN0IG5hcGlfZ3JvX2NiIHsKKwkvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItPmRhdGEuICovCisJaW50IGRhdGFfb2Zmc2V0OworCiAJLyogVGhpcyBpcyBub24temVybyBpZiB0aGUgcGFja2V0IG1heSBiZSBvZiB0aGUgc2FtZSBmbG93LiAqLwogCWludCBzYW1lX2Zsb3c7CiAKQEAgLTEwODgsNiArMTExOSwzNiBAQAogI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKIGV4dGVybiBpbnQJCW5ldHBvbGxfdHJhcCh2b2lkKTsKICNlbmRpZgorZXh0ZXJuIHZvaWQJICAgICAgKnNrYl9ncm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBobGVuKTsKK2V4dGVybiBpbnQJICAgICAgIHNrYl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2dyb19sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5sZW4gLSBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCU5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0ICs9IGxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcmVzZXRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9ncm9fbWFjX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2JfbWFjX2hlYWRlcihza2IpIDwgc2tiLT5kYXRhID8gc2tiX21hY19oZWFkZXIoc2tiKSA6CisJICAgICAgIHBhZ2VfYWRkcmVzcyhza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpICsKKwkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldDsKK30KIAogc3RhdGljIGlubGluZSBpbnQgZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlLApAQCAtMTM3NiwxMiArMTQzNywxNSBAQAogZXh0ZXJuIHZvaWQJCW5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiBleHRlcm4gaW50CQlkZXZfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCW5hcGlfc2tiX2ZpbmlzaChpbnQgcmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCW5hcGlfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkJbmFwaV9yZXVzZV9za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqCW5hcGlfZnJhZ2luZm9fc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOworZXh0ZXJuIGludAkJbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCByZXQpOwogZXh0ZXJuIGludAkJbmFwaV9ncm9fZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQJCW5ldGlmX25pdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTU3NSw1NiArMTYzOSw2IEBACiAJcmV0dXJuICgxIDw8IGRlYnVnX3ZhbHVlKSAtIDE7CiB9CiAKLS8qIFRlc3QgaWYgcmVjZWl2ZSBuZWVkcyB0byBiZSBzY2hlZHVsZWQgYnV0IG9ubHkgaWYgdXAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCXJldHVybiBuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSk7Ci19Ci0KLS8qIEFkZCBpbnRlcmZhY2UgdG8gdGFpbCBvZiByeCBwb2xsIGxpc3QuIFRoaXMgYXNzdW1lcyB0aGF0IF9wcmVwIGhhcwotICogYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLX0KLQotLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGlycSBoYW5kbGVyLiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOwotfQotCi0vKiBUcnkgdG8gcmVzY2hlZHVsZSBwb2xsLiBDYWxsZWQgYnkgZGV2LT5wb2xsKCkgYWZ0ZXIgbmV0aWZfcnhfY29tcGxldGUoKS4gICovCi1zdGF0aWMgaW5saW5lIGludCBuZXRpZl9yeF9yZXNjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUobmFwaSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogc2FtZSBhcyBuZXRpZl9yeF9jb21wbGV0ZSwgZXhjZXB0IHRoYXQgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCi0gKiBoYXMgYWxyZWFkeSBiZWVuIGlzc3VlZAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JX19uYXBpX2NvbXBsZXRlKG5hcGkpOwotfQotCi0vKiBSZW1vdmUgaW50ZXJmYWNlIGZyb20gcG9sbCBsaXN0OiBpdCBtdXN0IGJlIGluIHRoZSBwb2xsIGxpc3QKLSAqIG9uIGN1cnJlbnQgY3B1LiBUaGlzIHByaW1pdGl2ZSBpcyBjYWxsZWQgYnkgZGV2LT5wb2xsKCksIHdoZW4KLSAqIGl0IGNvbXBsZXRlcyB0aGUgd29yay4gVGhlIGRldmljZSBjYW5ub3QgYmUgb3V0IG9mIHBvbGwgbGlzdCBhdCB0aGlzCi0gKiBtb21lbnQsIGl0IGlzIEJVRygpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCW5hcGlfY29tcGxldGUobmFwaSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3R4X2xvY2soc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLCBpbnQgY3B1KQogewogCXNwaW5fbG9jaygmdHhxLT5feG1pdF9sb2NrKTsKQEAgLTE4NzUsNyArMTg4OSw3IEBACiAKIAkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9JTkFDVElWRSkgewogCQkJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfTkVFREFSUCkgJiYKLQkJCSAgICBza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSkKIAkJCQlyZXR1cm4gMDsKIAogCQkJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQUxCKSB7CkBAIC0xODg0LDcgKzE4OTgsNyBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWlmIChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSXzgwMjNBRCAmJgotCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTE9XKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfU0xPVykpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCmluZGV4IDVhOGFmODcuLmFmOWQyZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKQEAgLTcsMTYgKzcsMjEgQEAKIGhlYWRlci15ICs9IHh0X0NPTk5NQVJLLmgKIGhlYWRlci15ICs9IHh0X0NPTk5TRUNNQVJLLmgKIGhlYWRlci15ICs9IHh0X0RTQ1AuaAoraGVhZGVyLXkgKz0geHRfTEVELmgKIGhlYWRlci15ICs9IHh0X01BUksuaAogaGVhZGVyLXkgKz0geHRfTkZMT0cuaAogaGVhZGVyLXkgKz0geHRfTkZRVUVVRS5oCiBoZWFkZXIteSArPSB4dF9SQVRFRVNULmgKIGhlYWRlci15ICs9IHh0X1NFQ01BUksuaAogaGVhZGVyLXkgKz0geHRfVENQTVNTLmgKK2hlYWRlci15ICs9IHh0X1RDUE9QVFNUUklQLmgKK2hlYWRlci15ICs9IHh0X1RQUk9YWS5oCiBoZWFkZXIteSArPSB4dF9jb21tZW50LmgKIGhlYWRlci15ICs9IHh0X2Nvbm5ieXRlcy5oCitoZWFkZXIteSArPSB4dF9jb25ubGltaXQuaAogaGVhZGVyLXkgKz0geHRfY29ubm1hcmsuaAogaGVhZGVyLXkgKz0geHRfY29ubnRyYWNrLmgKK2hlYWRlci15ICs9IHh0X2NsdXN0ZXIuaAogaGVhZGVyLXkgKz0geHRfZGNjcC5oCiBoZWFkZXIteSArPSB4dF9kc2NwLmgKIGhlYWRlci15ICs9IHh0X2VzcC5oCkBAIC0zMCw2ICszNSw3IEBACiBoZWFkZXIteSArPSB4dF9tdWx0aXBvcnQuaAogaGVhZGVyLXkgKz0geHRfb3duZXIuaAogaGVhZGVyLXkgKz0geHRfcGt0dHlwZS5oCitoZWFkZXIteSArPSB4dF9xdW90YS5oCiBoZWFkZXIteSArPSB4dF9yYXRlZXN0LmgKIGhlYWRlci15ICs9IHh0X3JlYWxtLmgKIGhlYWRlci15ICs9IHh0X3JlY2VudC5oCkBAIC0zOSw2ICs0NSw4IEBACiBoZWFkZXIteSArPSB4dF9zdHJpbmcuaAogaGVhZGVyLXkgKz0geHRfdGNwbXNzLmgKIGhlYWRlci15ICs9IHh0X3RjcHVkcC5oCitoZWFkZXIteSArPSB4dF90aW1lLmgKK2hlYWRlci15ICs9IHh0X3UzMi5oCiAKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfY29tbW9uLmgKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfZnRwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAppbmRleCBhMDQ5ZGY0Li4zMDY2Nzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0yLDYgKzIsOCBAQAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICiAvKiBUQ1AgdHJhY2tpbmcuICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUaGlzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIChjdG5ldGxpbmspICovCiBlbnVtIHRjcF9jb25udHJhY2sgewogCVRDUF9DT05OVFJBQ0tfTk9ORSwKQEAgLTM0LDggKzM2LDggQEAKICNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRAkweDEwCiAKIHN0cnVjdCBuZl9jdF90Y3BfZmxhZ3MgewotCXVfaW50OF90IGZsYWdzOwotCXVfaW50OF90IG1hc2s7CisJX191OCBmbGFnczsKKwlfX3U4IG1hc2s7CiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCA3ZDhlMDQ1Li5jNjAwMDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtMjUsOCArMjUsOCBAQAogLyogR2VuZXJhbCBmb3JtIG9mIGFkZHJlc3MgZmFtaWx5IGRlcGVuZGVudCBtZXNzYWdlLgogICovCiBzdHJ1Y3QgbmZnZW5tc2cgewotCXVfaW50OF90ICBuZmdlbl9mYW1pbHk7CQkvKiBBRl94eHggKi8KLQl1X2ludDhfdCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCisJX191OCAgbmZnZW5fZmFtaWx5OwkJLyogQUZfeHh4ICovCisJX191OCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCiAJX19iZTE2ICAgIHJlc19pZDsJCS8qIHJlc291cmNlIGlkICovCiB9OwogCkBAIC03Niw2ICs3Niw3IEBACiBleHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHVuc2lnbmVkIGludCBncm91cCk7CiBleHRlcm4gaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCAKIAkJCSAgaW50IGVjaG8pOworZXh0ZXJuIHZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpOwogCiBleHRlcm4gdm9pZCBuZm5sX2xvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKaW5kZXggZTE0NTE3Ni4uZWRhNTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaApAQCAtMSw1ICsxLDggQEAKICNpZm5kZWYgX05GTkVUTElOS19DT01QQVRfSAogI2RlZmluZSBfTkZORVRMSU5LX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZuZGVmIF9fS0VSTkVMX18KIC8qIE9sZCBuZm5ldGxpbmsgbWFjcm9zIGZvciB1c2Vyc3BhY2UgKi8KIApAQCAtMjAsOCArMjMsOCBAQAogCiBzdHJ1Y3QgbmZhdHRyCiB7Ci0JdV9pbnQxNl90IG5mYV9sZW47Ci0JdV9pbnQxNl90IG5mYV90eXBlOwkvKiB3ZSB1c2UgMTUgYml0cyBmb3IgdGhlIHR5cGUsIGFuZCB0aGUgaGlnaGVzdAorCV9fdTE2IG5mYV9sZW47CisJX191MTYgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CiAJCQkJICogYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgbmVzdGVkICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggZjY2MTczMS4uZDNiYWI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApAQCAtMTcsMTQgKzE3LDE0IEBACiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgewogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLwotCXVfaW50OF90CV9wYWQ7CisJX191OAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KKwlfX3U4CV9wYWQ7CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7CkBAIC0zNSwxMiArMzUsMTIgQEAKIGVudW0gbmZ1bG5sX2F0dHJfdHlwZSB7CiAJTkZVTEFfVU5TUEVDLAogCU5GVUxBX1BBQ0tFVF9IRFIsCi0JTkZVTEFfTUFSSywJCQkvKiB1X2ludDMyX3QgbmZtYXJrICovCisJTkZVTEFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KIAlORlVMQV9USU1FU1RBTVAsCQkvKiBuZnVsbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlVMQV9JRklOREVYX0lOREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX09VVERFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlVMQV9IV0FERFIsCQkJLyogbmZ1bG5sX21zZ19wYWNrZXRfaHcgKi8KIAlORlVMQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIAlORlVMQV9QUkVGSVgsCQkJLyogc3RyaW5nIHByZWZpeCAqLwpAQCAtNjUsMjMgKzY1LDIzIEBACiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX21vZGUgewogCV9fYmUzMgkJY29weV9yYW5nZTsKLQl1X2ludDhfdAljb3B5X21vZGU7Ci0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWNvcHlfbW9kZTsKKwlfX3U4CV9wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSBuZnVsbmxfYXR0cl9jb25maWcgewogCU5GVUxBX0NGR19VTlNQRUMsCiAJTkZVTEFfQ0ZHX0NNRCwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgKi8KIAlORlVMQV9DRkdfTU9ERSwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlICovCi0JTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogdV9pbnQzMl90IGJ1ZmZlciBzaXplICovCi0JTkZVTEFfQ0ZHX1RJTUVPVVQsCQkvKiB1X2ludDMyX3QgaW4gMS8xMDAgcyAqLwotCU5GVUxBX0NGR19RVEhSRVNILAkJLyogdV9pbnQzMl90ICovCi0JTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogdV9pbnQxNl90ICovCisJTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogX191MzIgYnVmZmVyIHNpemUgKi8KKwlORlVMQV9DRkdfVElNRU9VVCwJCS8qIF9fdTMyIGluIDEvMTAwIHMgKi8KKwlORlVMQV9DRkdfUVRIUkVTSCwJCS8qIF9fdTMyICovCisJTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogX191MTYgKi8KIAlfX05GVUxBX0NGR19NQVgKIH07CiAjZGVmaW5lIE5GVUxBX0NGR19NQVggKF9fTkZVTEFfQ0ZHX01BWCAtMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKaW5kZXggODNlNzg5Ni4uMjQ1NWZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKQEAgLTE1LDEzICsxNSwxMyBAQAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyIHsKIAlfX2JlMzIJCXBhY2tldF9pZDsJLyogdW5pcXVlIElEIG9mIHBhY2tldCBpbiBxdWV1ZSAqLwogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKQEAgLTMzLDEyICszMywxMiBAQAogCU5GUUFfVU5TUEVDLAogCU5GUUFfUEFDS0VUX0hEUiwKIAlORlFBX1ZFUkRJQ1RfSERSLAkJLyogbmZxbmxfbXNnX3ZlcmRpY3RfaHJkICovCi0JTkZRQV9NQVJLLAkJCS8qIHVfaW50MzJfdCBuZm1hcmsgKi8KKwlORlFBX01BUkssCQkJLyogX191MzIgbmZtYXJrICovCiAJTkZRQV9USU1FU1RBTVAsCQkJLyogbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlFBX0lGSU5ERVhfSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9PVVRERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfT1VUREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlFBX0hXQUREUiwJCQkvKiBuZnFubF9tc2dfcGFja2V0X2h3ICovCiAJTkZRQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIApAQCAtNjEsOCArNjEsOCBAQAogfTsKIAogc3RydWN0IG5mcW5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnFubF9tc2dfY29uZmlnX2NtZHMgKi8KLQl1X2ludDhfdAlfcGFkOworCV9fdTgJY29tbWFuZDsJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAlfcGFkOwogCV9fYmUxNgkJcGY7CQkvKiBBRl94eHggZm9yIFBGX1tVTl1CSU5EICovCiB9OwogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyB7CiAJX19iZTMyCQljb3B5X3JhbmdlOwotCXVfaW50OF90CWNvcHlfbW9kZTsJLyogZW51bSBuZnFubF9jb25maWdfbW9kZSAqLworCV9fdTgJY29weV9tb2RlOwkvKiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC04Miw3ICs4Miw3IEBACiAJTkZRQV9DRkdfVU5TUEVDLAogCU5GUUFfQ0ZHX0NNRCwJCQkvKiBuZnFubF9tc2dfY29uZmlnX2NtZCAqLwogCU5GUUFfQ0ZHX1BBUkFNUywJCS8qIG5mcW5sX21zZ19jb25maWdfcGFyYW1zICovCi0JTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogdV9pbnQzMl90ICovCisJTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogX191MzIgKi8KIAlfX05GUUFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZRQV9DRkdfTUFYIChfX05GUUFfQ0ZHX01BWC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggYzdlZTg3NC4uN2IxYTY1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWF9UQUJMRVNfSAogI2RlZmluZSBfWF9UQUJMRVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9GVU5DVElPTl9NQVhOQU1FTEVOIDMwCiAjZGVmaW5lIFhUX1RBQkxFX01BWE5BTUVMRU4gMzIKIApAQCAtOCwyMiArMTAsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCiAJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCQlfX3U4IHJldmlzaW9uOwogCQl9IHVzZXI7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KIAkJCXN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJX191MTYgbWF0Y2hfc2l6ZTsKIAl9IHU7CiAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMF07CkBAIC0zMywyMiArMzUsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCQlfX3UxNiB0YXJnZXRfc2l6ZTsKIAogCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KIAkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJCV9fdTggcmV2aXNpb247CiAJCX0gdXNlcjsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCV9fdTE2IHRhcmdldF9zaXplOwogCiAJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCiAJCQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCV9fdTE2IHRhcmdldF9zaXplOwogCX0gdTsKIAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKQEAgLTc0LDcgKzc2LDcgQEAKIHsKIAljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCXVfaW50OF90IHJldmlzaW9uOworCV9fdTggcmV2aXNpb247CiB9OwogCiAvKiBDT05USU5VRSB2ZXJkaWN0IGZvciB0YXJnZXRzICovCkBAIC05MCwxMCArOTIsMTAgQEAKICAqLwogc3RydWN0IF94dF9hbGlnbgogewotCXVfaW50OF90IHU4OwotCXVfaW50MTZfdCB1MTY7Ci0JdV9pbnQzMl90IHUzMjsKLQl1X2ludDY0X3QgdTY0OworCV9fdTggdTg7CisJX191MTYgdTE2OworCV9fdTMyIHUzMjsKKwlfX3U2NCB1NjQ7CiB9OwogCiAjZGVmaW5lIFhUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBfeHRfYWxpZ24pLTEpKSAJXApAQCAtMTA5LDcgKzExMSw3IEBACiAKIHN0cnVjdCB4dF9jb3VudGVycwogewotCXVfaW50NjRfdCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLworCV9fdTY0IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCiB9OwogCiAvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0FERF9DT1VOVEVSUy4gKi8KQEAgLTM0OSwyMyArMzUxLDIyIEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0JLyogQSB1bmlxdWUgbmFtZS4uLiAqLwotCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQogCS8qIFdoYXQgaG9va3MgeW91IHdpbGwgZW50ZXIgb24gKi8KIAl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CiAKIAkvKiBMb2NrIGZvciB0aGUgY3VydGFpbiAqLwotCXJ3bG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAKIAkvKiBNYW4gYmVoaW5kIHRoZSBjdXJ0YWluLi4uICovCi0JLy9zdHJ1Y3QgaXA2dF90YWJsZV9pbmZvICpwcml2YXRlOwotCXZvaWQgKnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCiAJdV9pbnQ4X3QgYWY7CQkvKiBhZGRyZXNzL3Byb3RvY29sIGZhbWlseSAqLworCisJLyogQSB1bmlxdWUgbmFtZS4uLiAqLworCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIH07CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgpAQCAtMzg2LDcgKzM4Nyw3IEBACiAKIAkvKiBpcHRfZW50cnkgdGFibGVzOiBvbmUgcGVyIENQVSAqLwogCS8qIE5vdGUgOiB0aGlzIGZpZWxkIE1VU1QgYmUgdGhlIGxhc3Qgb25lLCBzZWUgWFRfVEFCTEVfSU5GT19TWiAqLwotCWNoYXIgKmVudHJpZXNbMV07CisJdm9pZCAqZW50cmllc1sxXTsKIH07CiAKICNkZWZpbmUgWFRfVEFCTEVfSU5GT19TWiAob2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpIFwKQEAgLTQzMyw2ICs0MzQsMzEgQEAKIAogZXh0ZXJuIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CitleHRlcm4gdm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkLAorCQkJCSAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3KTsKKworLyoKKyAqIFRoaXMgaGVscGVyIGlzIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGFuZCBtdXN0IGJlIGlubGluZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlX2FsaWduZWQoY29uc3QgY2hhciAqX2EsCisJCQkJCQkgICBjb25zdCBjaGFyICpfYiwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKl9tYXNrKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlyZXR1cm4gcmV0OworfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCmluZGV4IDU4MTExMzUuLmE4MTNiZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApAQCAtMSw4ICsxLDEwIEBACiAjaWZuZGVmIF9YVF9DTEFTU0lGWV9ICiAjZGVmaW5lIF9YVF9DTEFTU0lGWV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8gewotCXVfaW50MzJfdCBwcmlvcml0eTsKKwlfX3UzMiBwcmlvcml0eTsKIH07CiAKICNlbmRpZiAvKl9YVF9DTEFTU0lGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAppbmRleCA0ZTU4YmE0Li43NjM1YzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTE5LDEyICsyMSwxMiBAQAogc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEgewotCXVfaW50MzJfdCBjdG1hcmssIGN0bWFzaywgbmZtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191MzIgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKKwlfX3U4IG1vZGU7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKaW5kZXggYzZiZDc1NC4uYjk3M2ZmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCkBAIC0xLDEzICsxLDE1IEBACiAjaWZuZGVmIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUNPTk5TRUNNQVJLX1NBVkUgPSAxLAogCUNPTk5TRUNNQVJLX1JFU1RPUkUsCiB9OwogCiBzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKaW5kZXggMTRkYTE5Ni4uNjQ4ZTBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaApAQCAtMTEsMTUgKzExLDE2IEBACiAjaWZuZGVmIF9YVF9EU0NQX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9EU0NQX1RBUkdFVF9ICiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiB0YXJnZXQgaW5mbyAqLwogc3RydWN0IHh0X0RTQ1BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKKwlfX3U4IGRzY3A7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCB0b3NfbWFzazsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzkxYTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfWFRfTEVEX0gKKyNkZWZpbmUgX1hUX0xFRF9ICisKK3N0cnVjdCB4dF9sZWRfaW5mbyB7CisJY2hhciBpZFsyN107ICAgICAgICAvKiBVbmlxdWUgSUQgZm9yIHRoaXMgdHJpZ2dlciBpbiB0aGUgTEVEIGNsYXNzICovCisJX191OCBhbHdheXNfYmxpbms7ICAvKiBCbGluayBldmVuIGlmIHRoZSBMRUQgaXMgYWxyZWFkeSBvbiAqLworCV9fdTMyIGRlbGF5OyAgICAgICAgLyogRGVsYXkgdW50aWwgTEVEIGlzIHN3aXRjaGVkIG9mZiBhZnRlciB0cmlnZ2VyICovCisKKwkvKiBLZXJuZWwgZGF0YSB1c2VkIGluIHRoZSBtb2R1bGUgKi8KKwl2b2lkICppbnRlcm5hbF9kYXRhIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZiAvKiBfWFRfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAppbmRleCA3NzhiMjc4Li4wMjgzMDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVmVyc2lvbiAwICovCiBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwpAQCAtMTUsMTEgKzE3LDExIEBACiAKIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiBzdHJ1Y3QgeHRfbWFya190Z2luZm8yIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKKwlfX3UzMiBtYXJrLCBtYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCmluZGV4IDRiMzZhZWIuLjg3YjU4MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaApAQCAtMSwxNyArMSwxOSBAQAogI2lmbmRlZiBfWFRfTkZMT0dfVEFSR0VUCiAjZGVmaW5lIF9YVF9ORkxPR19UQVJHRVQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfTkZMT0dfREVGQVVMVF9HUk9VUAkJMHgxCiAjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfVEhSRVNIT0xECTAKIAogI2RlZmluZSBYVF9ORkxPR19NQVNLCQkJMHgwCiAKIHN0cnVjdCB4dF9uZmxvZ19pbmZvIHsKLQl1X2ludDMyX3QJbGVuOwotCXVfaW50MTZfdAlncm91cDsKLQl1X2ludDE2X3QJdGhyZXNob2xkOwotCXVfaW50MTZfdAlmbGFnczsKLQl1X2ludDE2X3QJcGFkOworCV9fdTMyCWxlbjsKKwlfX3UxNglncm91cDsKKwlfX3UxNgl0aHJlc2hvbGQ7CisJX191MTYJZmxhZ3M7CisJX191MTYJcGFkOwogCWNoYXIJCXByZWZpeFs2NF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKaW5kZXggOWE5YWY3OWYuLjk4MmE4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKQEAgLTgsOSArOCwxMSBAQAogI2lmbmRlZiBfWFRfTkZRX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9ORlFfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfTkZRX2luZm8gewotCXVfaW50MTZfdCBxdWV1ZW51bTsKKwlfX3UxNiBxdWV1ZW51bTsKIH07CiAKICNlbmRpZiAvKiBfWFRfTkZRX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKaW5kZXggZjc5ZTMxMy4uNjYwNWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9UQVJHRVRfSAogI2RlZmluZSBfWFRfUkFURUVTVF9UQVJHRVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JhdGVlc3RfdGFyZ2V0X2luZm8gewogCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKLQlpbnQ4X3QJCQlpbnRlcnZhbDsKLQl1X2ludDhfdAkJZXdtYV9sb2c7CisJX19zOAkJCWludGVydmFsOworCV9fdTgJCWV3bWFfbG9nOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaAppbmRleCBjNTNmYmZmLi42ZmNkMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB2YXJpb3VzIHNlY3VyaXR5IHN1YnN5c3RlbXMgKGJ1dCBub3QKICAqIGF0IHRoZSBzYW1lIHRpbWUpLgpAQCAtMTIsMTIgKzE0LDEyIEBACiAjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWAkyNTYKIAogc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7Ci0JdV9pbnQzMl90IHNlbHNpZDsKKwlfX3UzMiBzZWxzaWQ7CiAJY2hhciBzZWxjdHhbU0VDTUFSS19TRUxDVFhfTUFYXTsKIH07CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOwogCX0gdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKaW5kZXggNTNhMjkyYy4uOWE2OTYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKQEAgLTEsOCArMSwxMCBAQAogI2lmbmRlZiBfWFRfVENQTVNTX0gKICNkZWZpbmUgX1hUX1RDUE1TU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gewotCXVfaW50MTZfdCBtc3M7CisJX191MTYgbXNzOwogfTsKIAogI2RlZmluZSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBhMGQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1hUX0NMVVNURVJfTUFUQ0hfSAorI2RlZmluZSBfWFRfQ0xVU1RFUl9NQVRDSF9ICisKK2VudW0geHRfY2x1c3Rlcl9mbGFncyB7CisJWFRfQ0xVU1RFUl9GX0lOVgk9ICgxIDw8IDApCit9OworCitzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvIHsKKwl1X2ludDMyX3QJCXRvdGFsX25vZGVzOworCXVfaW50MzJfdAkJbm9kZV9tYXNrOworCXVfaW50MzJfdAkJaGFzaF9zZWVkOworCXVfaW50MzJfdAkJZmxhZ3M7Cit9OworCisjZW5kaWYgLyogX1hUX0NMVVNURVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAppbmRleCBjMDIyYzk4Li41MmJkNjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5CWVRFU19ICiAjZGVmaW5lIF9YVF9DT05OQllURVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB4dF9jb25uYnl0ZXNfd2hhdCB7CiAJWFRfQ09OTkJZVEVTX1BLVFMsCiAJWFRfQ09OTkJZVEVTX0JZVEVTLApAQCAtMTksNyArMjEsNyBAQAogCQlhbGlnbmVkX3U2NCBmcm9tOwkvKiBjb3VudCB0byBiZSBtYXRjaGVkICovCiAJCWFsaWduZWRfdTY0IHRvOwkJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCX0gY291bnQ7Ci0JdV9pbnQ4X3Qgd2hhdDsJCS8qIGlwdF9jb25uYnl0ZXNfd2hhdCAqLwotCXVfaW50OF90IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KKwlfX3U4IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KKwlfX3U4IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCmluZGV4IDM1OWVmODYuLjU3MWUyNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5NQVJLX0gKICNkZWZpbmUgX1hUX0NPTk5NQVJLX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTEyLDEyICsxNCwxMiBAQAogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGludmVydDsKIH07CiAKIHN0cnVjdCB4dF9jb25ubWFya19tdGluZm8xIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgbWFyaywgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKaW5kZXggOGY1MzQ1Mi4uMzQzMGM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTYzLDkgKzYzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKIAogCS8qIEZsYWdzIHdvcmQgKi8KLQl1X2ludDhfdCBmbGFnczsKKwlfX3U4IGZsYWdzOwogCS8qIEludmVyc2UgZmxhZ3MgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsKKwlfX3U4IGludmZsYWdzOwogfTsKIAogc3RydWN0IHh0X2Nvbm50cmFja19tdGluZm8xIHsKQEAgLTczLDEyICs3MywxMiBAQAogCXVuaW9uIG5mX2luZXRfYWRkciBvcmlnZHN0X2FkZHIsIG9yaWdkc3RfbWFzazsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxkc3RfYWRkciwgcmVwbGRzdF9tYXNrOwotCXVfaW50MzJfdCBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7Ci0JdV9pbnQxNl90IGw0cHJvdG87CisJX191MzIgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OworCV9fdTE2IGw0cHJvdG87CiAJX19iZTE2IG9yaWdzcmNfcG9ydCwgb3JpZ2RzdF9wb3J0OwogCV9fYmUxNiByZXBsc3JjX3BvcnQsIHJlcGxkc3RfcG9ydDsKLQl1X2ludDE2X3QgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKLQl1X2ludDhfdCBzdGF0ZV9tYXNrLCBzdGF0dXNfbWFzazsKKwlfX3UxNiBtYXRjaF9mbGFncywgaW52ZXJ0X2ZsYWdzOworCV9fdTggc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTlRSQUNLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCmluZGV4IGUwMjIxYjkuLmE1NzllMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9EQ0NQX0hfCiAjZGVmaW5lIF9YVF9EQ0NQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX0RDQ1BfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9EQ0NQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX0RDQ1BfVFlQRQkJCTB4MDQKQEAgLTksMTQgKzExLDE0IEBACiAjZGVmaW5lIFhUX0RDQ1BfVkFMSURfRkxBR1MJCTB4MGYKIAogc3RydWN0IHh0X2RjY3BfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KIAotCXVfaW50MTZfdCBmbGFnczsKLQl1X2ludDE2X3QgaW52ZmxhZ3M7CisJX191MTYgZmxhZ3M7CisJX191MTYgaW52ZmxhZ3M7CiAKLQl1X2ludDE2X3QgdHlwZW1hc2s7Ci0JdV9pbnQ4X3Qgb3B0aW9uOworCV9fdTE2IHR5cGVtYXNrOworCV9fdTggb3B0aW9uOwogfTsKIAogI2VuZGlmIC8qIF9YVF9EQ0NQX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKaW5kZXggZjQ5YmMxYS4uMTVmODkzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaApAQCAtMTAsMjAgKzEwLDIyIEBACiAjaWZuZGVmIF9YVF9EU0NQX0gKICNkZWZpbmUgX1hUX0RTQ1BfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EU0NQX01BU0sJMHhmYwkvKiAxMTExMTEwMCAqLwogI2RlZmluZSBYVF9EU0NQX1NISUZUCTIKICNkZWZpbmUgWFRfRFNDUF9NQVgJMHgzZgkvKiAwMDExMTExMSAqLwogCiAvKiBtYXRjaCBpbmZvICovCiBzdHJ1Y3QgeHRfZHNjcF9pbmZvIHsKLQl1X2ludDhfdCBkc2NwOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGRzY3A7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX21hdGNoX2luZm8gewotCXVfaW50OF90IHRvc19tYXNrOwotCXVfaW50OF90IHRvc192YWx1ZTsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCmluZGV4IDkzODBmYjFjLi5lZjZmYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfRVNQX0gKICNkZWZpbmUgX1hUX0VTUF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfZXNwCiB7Ci0JdV9pbnQzMl90IHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTMyIHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCV9fdTggIGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IHh0X2VzcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKaW5kZXggNTFiMThkOC4uYjE5MjViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9IQVNITElNSVRfSAogI2RlZmluZSBfWFRfSEFTSExJTUlUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KICNkZWZpbmUgWFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKQEAgLTE4LDE1ICsyMCwxNSBAQAogfTsKIAogc3RydWN0IGhhc2hsaW1pdF9jZmcgewotCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiB1c2VyIHNwZWNpZmllZCAqLwotCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLwotCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KLQl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCi0JdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KIH07CiAKIHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyB7CkBAIC00MiwxNyArNDQsMTcgQEAKIH07CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnMSB7Ci0JdV9pbnQzMl90IG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCi0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCisJX191MzIgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwlfX3UzMiBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KIAogCS8qIHVzZXIgc3BlY2lmaWVkICovCi0JdV9pbnQzMl90IHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCi0JdV9pbnQzMl90IG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLwotCXVfaW50MzJfdCBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KLQl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLworCV9fdTMyIHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCisJX191MzIgbWF4OwkJLyogbWF4IG51bWJlciBvZiBlbnRyaWVzICovCisJX191MzIgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCisJX191MzIgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLwogCi0JdV9pbnQ4X3Qgc3JjbWFzaywgZHN0bWFzazsKKwlfX3U4IHNyY21hc2ssIGRzdG1hc2s7CiB9OwogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCmluZGV4IGE0Mjk5YzcuLmMxZjIxYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9ICiAjZGVmaW5lIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUlQUkFOR0VfU1JDICAgICA9IDEgPDwgMCwJLyogbWF0Y2ggc291cmNlIElQIGFkZHJlc3MgKi8KIAlJUFJBTkdFX0RTVCAgICAgPSAxIDw8IDEsCS8qIG1hdGNoIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKi8KQEAgLTExLDcgKzEzLDcgQEAKIHN0cnVjdCB4dF9pcHJhbmdlX210aW5mbyB7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNyY19taW4sIHNyY19tYXg7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGRzdF9taW4sIGRzdF9tYXg7Ci0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAppbmRleCA3YzJiNDM5Li5iODJlZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9YVF9MRU5HVEhfSAogI2RlZmluZSBfWFRfTEVOR1RIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9sZW5ndGhfaW5mbyB7Ci0gICAgdV9pbnQxNl90CW1pbiwgbWF4OwotICAgIHVfaW50OF90CWludmVydDsKKyAgICBfX3UxNgltaW4sIG1heDsKKyAgICBfX3U4CWludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9MRU5HVEhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAppbmRleCBiM2NlNjUzLi5iYjQ3ZmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKQEAgLTEsMjEgKzEsMjQgQEAKICNpZm5kZWYgX1hUX1JBVEVfSAogI2RlZmluZSBfWFRfUkFURV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCiAjZGVmaW5lIFhUX0xJTUlUX1NDQUxFIDEwMDAwCiAKK3N0cnVjdCB4dF9saW1pdF9wcml2OworCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKICAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KIHN0cnVjdCB4dF9yYXRlaW5mbyB7Ci0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQl1X2ludDMyX3QgY3JlZGl0OwotCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCXVuc2lnbmVkIGxvbmcgcHJldjsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdF9jYXAsIGNvc3Q7CiAKLQkvKiBVZ2x5LCB1Z2x5IGZ1Y2tlci4gKi8KLQlzdHJ1Y3QgeHRfcmF0ZWluZm8gKm1hc3RlcjsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqbWFzdGVyOwogfTsKICNlbmRpZiAvKl9YVF9SQVRFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCmluZGV4IGZhZTc0YmMuLjZmYTQ2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKQEAgLTEsMTQgKzEsMTYgQEAKICNpZm5kZWYgX1hUX01BUktfSAogI2RlZmluZSBfWFRfTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfbWFya19pbmZvIHsKICAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7Ci0gICAgdV9pbnQ4X3QgaW52ZXJ0OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X21hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKaW5kZXggZDQ5ZWU0MS4uMTg1ZGI0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9NVUxUSVBPUlRfSAogI2RlZmluZSBfWFRfTVVMVElQT1JUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfbXVsdGlwb3J0X2ZsYWdzCiB7CiAJWFRfTVVMVElQT1JUX1NPVVJDRSwKQEAgLTEzLDE4ICsxNSwxOCBAQAogLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIHh0X21hdGNoaW5mbzogMTYgYnl0ZXMgKi8KIHN0cnVjdCB4dF9tdWx0aXBvcnQKIHsKLQl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCi0JdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLwotCXVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLwogfTsKIAogc3RydWN0IHh0X211bHRpcG9ydF92MQogewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KLQl1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0IGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLworCV9fdTggaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCiB9OwogCiAjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKaW5kZXggYzg0ZTUyYy4uMjA4MTc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfT1dORVJfTUFUQ0hfSAogI2RlZmluZSBfWFRfT1dORVJfTUFUQ0hfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJWFRfT1dORVJfVUlEICAgID0gMSA8PCAwLAogCVhUX09XTkVSX0dJRCAgICA9IDEgPDwgMSwKQEAgLTgsOSArMTAsOSBAQAogfTsKIAogc3RydWN0IHh0X293bmVyX21hdGNoX2luZm8gewotCXVfaW50MzJfdCB1aWRfbWluLCB1aWRfbWF4OwotCXVfaW50MzJfdCBnaWRfbWluLCBnaWRfbWF4OwotCXVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CisJX191MzIgdWlkX21pbiwgdWlkX21heDsKKwlfX3UzMiBnaWRfbWluLCBnaWRfbWF4OworCV9fdTggbWF0Y2gsIGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfT1dORVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCmluZGV4IDI1YTdhMTguLjg1NTVlMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9QSFlTREVWX0gKICNkZWZpbmUgX1hUX1BIWVNERVZfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2VuZGlmCkBAIC0xNyw4ICsxOSw4IEBACiAJY2hhciBpbl9tYXNrW0lGTkFNU0laXTsKIAljaGFyIHBoeXNvdXRkZXZbSUZOQU1TSVpdOwogCWNoYXIgb3V0X21hc2tbSUZOQU1TSVpdOwotCXVfaW50OF90IGludmVydDsKLQl1X2ludDhfdCBiaXRtYXNrOworCV9fdTggaW52ZXJ0OworCV9fdTggYml0bWFzazsKIH07CiAKICNlbmRpZiAvKl9YVF9QSFlTREVWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAppbmRleCAwNTNkOGNjLi43YmI2NGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1BPTElDWV9ICiAjZGVmaW5lIF9YVF9QT0xJQ1lfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9QT0xJQ1lfTUFYX0VMRU0JNAogCiBlbnVtIHh0X3BvbGljeV9mbGFncwpAQCAtMTksNyArMjEsNyBAQAogCiBzdHJ1Y3QgeHRfcG9saWN5X3NwZWMKIHsKLQl1X2ludDhfdAlzYWRkcjoxLAorCV9fdTgJc2FkZHI6MSwKIAkJCWRhZGRyOjEsCiAJCQlwcm90bzoxLAogCQkJbW9kZToxLApAQCAtNTUsOSArNTcsOSBAQAogI2VuZGlmCiAJfTsKIAlfX2JlMzIJCQlzcGk7Ci0JdV9pbnQzMl90CQlyZXFpZDsKLQl1X2ludDhfdAkJcHJvdG87Ci0JdV9pbnQ4X3QJCW1vZGU7CisJX191MzIJCXJlcWlkOworCV9fdTgJCXByb3RvOworCV9fdTgJCW1vZGU7CiAKIAlzdHJ1Y3QgeHRfcG9saWN5X3NwZWMJbWF0Y2g7CiAJc3RydWN0IHh0X3BvbGljeV9zcGVjCWludmVydDsKQEAgLTY2LDggKzY4LDggQEAKIHN0cnVjdCB4dF9wb2xpY3lfaW5mbwogewogCXN0cnVjdCB4dF9wb2xpY3lfZWxlbSBwb2xbWFRfUE9MSUNZX01BWF9FTEVNXTsKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGxlbjsKKwlfX3UxNiBmbGFnczsKKwlfX3UxNiBsZW47CiB9OwogCiAjZW5kaWYgLyogX1hUX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAppbmRleCA0YzgzNjhkLi44ZGM4OWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKQEAgLTYsMTMgKzYsMTUgQEAKIH07CiAjZGVmaW5lIFhUX1FVT1RBX01BU0sJCTB4MQogCitzdHJ1Y3QgeHRfcXVvdGFfcHJpdjsKKwogc3RydWN0IHh0X3F1b3RhX2luZm8gewogCXVfaW50MzJfdAkJZmxhZ3M7CiAJdV9pbnQzMl90CQlwYWQ7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCWFsaWduZWRfdTY0CQlxdW90YTsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbwkqbWFzdGVyOworCXN0cnVjdCB4dF9xdW90YV9wcml2CSptYXN0ZXI7CiB9OwogCiAjZW5kaWYgLyogX1hUX1FVT1RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaAppbmRleCAyMDEwY2I3Li5kNDBhNjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9NQVRDSF9ICiAjZGVmaW5lIF9YVF9SQVRFRVNUX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfcmF0ZWVzdF9tYXRjaF9mbGFncyB7CiAJWFRfUkFURUVTVF9NQVRDSF9JTlZFUlQJPSAxPDwwLAogCVhUX1JBVEVFU1RfTUFUQ0hfQUJTCT0gMTw8MSwKQEAgLTIwLDEyICsyMiwxMiBAQAogc3RydWN0IHh0X3JhdGVlc3RfbWF0Y2hfaW5mbyB7CiAJY2hhcgkJCW5hbWUxW0lGTkFNU0laXTsKIAljaGFyCQkJbmFtZTJbSUZOQU1TSVpdOwotCXVfaW50MTZfdAkJZmxhZ3M7Ci0JdV9pbnQxNl90CQltb2RlOwotCXVfaW50MzJfdAkJYnBzMTsKLQl1X2ludDMyX3QJCXBwczE7Ci0JdV9pbnQzMl90CQlicHMyOwotCXVfaW50MzJfdAkJcHBzMjsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1vZGU7CisJX191MzIJCWJwczE7CisJX191MzIJCXBwczE7CisJX191MzIJCWJwczI7CisJX191MzIJCXBwczI7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCXN0cnVjdCB4dF9yYXRlZXN0CSplc3QxIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCmluZGV4IDIyMGU4NzIuLmQ0YTgyZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkVBTE1fSAogI2RlZmluZSBfWFRfUkVBTE1fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JlYWxtX2luZm8gewotCXVfaW50MzJfdCBpZDsKLQl1X2ludDMyX3QgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgaWQ7CisJX191MzIgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfUkVBTE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAppbmRleCA1Y2ZlYjgxLi5kMmMyNzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSAogI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCVhUX1JFQ0VOVF9DSEVDSyAgICA9IDEgPDwgMCwKIAlYVF9SRUNFTlRfU0VUICAgICAgPSAxIDw8IDEsCkBAIC0xNSwxMiArMTcsMTIgQEAKIH07CiAKIHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvIHsKLQl1X2ludDMyX3Qgc2Vjb25kczsKLQl1X2ludDMyX3QgaGl0X2NvdW50OwotCXVfaW50OF90IGNoZWNrX3NldDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgc2Vjb25kczsKKwlfX3UzMiBoaXRfY291bnQ7CisJX191OCBjaGVja19zZXQ7CisJX191OCBpbnZlcnQ7CiAJY2hhciBuYW1lW1hUX1JFQ0VOVF9OQU1FX0xFTl07Ci0JdV9pbnQ4X3Qgc2lkZTsKKwlfX3U4IHNpZGU7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCmluZGV4IDMyMDAwYmEuLjI5Mjg3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TQ1RQX0hfCiAjZGVmaW5lIF9YVF9TQ1RQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9TQ1RQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX1NDVFBfQ0hVTktfVFlQRVMJCTB4MDQKQEAgLTgsNDkgKzEwLDQ5IEBACiAjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MJCTB4MDcKIAogc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKLQl1X2ludDhfdCBjaHVua3R5cGU7Ci0JdV9pbnQ4X3QgZmxhZzsKLQl1X2ludDhfdCBmbGFnX21hc2s7CisJX191OCBjaHVua3R5cGU7CisJX191OCBmbGFnOworCV9fdTggZmxhZ19tYXNrOwogfTsKIAogI2RlZmluZSBYVF9OVU1fU0NUUF9GTEFHUwk0CiAKIHN0cnVjdCB4dF9zY3RwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLworCV9fdTMyIGNodW5rbWFwWzI1NiAvIHNpemVvZiAoX191MzIpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLwogCiAjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZICAgMHgwMSAgLyogTWF0Y2ggaWYgYW55IG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwogI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAgIDB4MDIgIC8qIE1hdGNoIGlmIGFsbCBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZICAweDA0ICAvKiBNYXRjaCBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgY2h1bmsgdHlwZXMgcHJlc2VudCAqLwogCi0JdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7CisJX191MzIgY2h1bmtfbWF0Y2hfdHlwZTsKIAlzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gZmxhZ19pbmZvW1hUX05VTV9TQ1RQX0ZMQUdTXTsKIAlpbnQgZmxhZ19jb3VudDsKIAotCXVfaW50MzJfdCBmbGFnczsKLQl1X2ludDMyX3QgaW52ZmxhZ3M7CisJX191MzIgZmxhZ3M7CisJX191MzIgaW52ZmxhZ3M7CiB9OwogCiAjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAJCVwKIAlkbyB7IAkJCQkJCVwKLQkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKLQkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildIHw9IAlcCisJCQkxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKTsJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAogCWRvIHsJCQkJCQkJXAotCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSAmPSAJCVwKLQkJCX4oMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildICY9IAkJXAorCQkJfigxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKSk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAJCQlcCiAoewkJCQkJCQkJXAotCSgoY2h1bmttYXApW3R5cGUgLyBieXRlcyAodV9pbnQzMl90KV0gJiAJCVwKLQkJKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7CVwKKwkoKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMgKF9fdTMyKV0gJiAJCVwKKwkJKDEgPDwgKHR5cGUgJSBieXRlcyAoX191MzIpKSkpID8gMTogMDsJXAogfSkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSBcCkBAIC02NSw3ICs2Nyw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIFwKIAlfX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCiBzdGF0aWMgaW5saW5lIGJvb2wKLV9fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCBfX3UzMiAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCkBAIC03Nyw3ICs3OSw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgXAogCV9fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQogc3RhdGljIGlubGluZSBib29sCi1fX3NjdHBfY2h1bmttYXBfaXNfYWxsX3NldChjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KGNvbnN0IF9fdTMyICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG47ICsraSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKaW5kZXggM2QzOGJjOS4uNGU5ODNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TVEFUSVNUSUNfSAogI2RlZmluZSBfWFRfU1RBVElTVElDX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfc3RhdGlzdGljX21vZGUgewogCVhUX1NUQVRJU1RJQ19NT0RFX1JBTkRPTSwKIAlYVF9TVEFUSVNUSUNfTU9ERV9OVEgsCkBAIC0xMywyMSArMTUsMjIgQEAKIH07CiAjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLCQkweDEKIAorc3RydWN0IHh0X3N0YXRpc3RpY19wcml2OworCiBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gewotCXVfaW50MTZfdAkJCW1vZGU7Ci0JdV9pbnQxNl90CQkJZmxhZ3M7CisJX191MTYJCQltb2RlOworCV9fdTE2CQkJZmxhZ3M7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CXByb2JhYmlsaXR5OworCQkJX191MzIJcHJvYmFiaWxpdHk7CiAJCX0gcmFuZG9tOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CWV2ZXJ5OwotCQkJdV9pbnQzMl90CXBhY2tldDsKLQkJCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCi0JCQl1X2ludDMyX3QJY291bnQ7CisJCQlfX3UzMglldmVyeTsKKwkJCV9fdTMyCXBhY2tldDsKKwkJCV9fdTMyCWNvdW50OyAvKiB1bnVzZWQgKi8KIAkJfSBudGg7CiAJfSB1OwotCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbwkqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwlzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiB9OwogCiAjZW5kaWYgLyogX1hUX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCmluZGV4IDhhNmJhN2IuLmVjYmI5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU1RSSU5HX0gKICNkZWZpbmUgX1hUX1NUUklOR19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIDEyOAogI2RlZmluZSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIDE2CiAKQEAgLTExLDE4ICsxMywxOCBAQAogCiBzdHJ1Y3QgeHRfc3RyaW5nX2luZm8KIHsKLQl1X2ludDE2X3QgZnJvbV9vZmZzZXQ7Ci0JdV9pbnQxNl90IHRvX29mZnNldDsKKwlfX3UxNiBmcm9tX29mZnNldDsKKwlfX3UxNiB0b19vZmZzZXQ7CiAJY2hhcgkgIGFsZ29bWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRV07CiAJY2hhciAJICBwYXR0ZXJuW1hUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFXTsKLQl1X2ludDhfdCAgcGF0bGVuOworCV9fdTggIHBhdGxlbjsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgaW52ZXJ0OworCQkJX191OCAgaW52ZXJ0OwogCQl9IHYwOwogCiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgZmxhZ3M7CisJCQlfX3U4ICBmbGFnczsKIAkJfSB2MTsKIAl9IHU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKaW5kZXggZTAzMjc0Yy4uZmJhYzU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfWFRfVENQTVNTX01BVENIX0gKICNkZWZpbmUgX1hUX1RDUE1TU19NQVRDSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8gewotICAgIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OwotICAgIHVfaW50OF90IGludmVydDsKKyAgICBfX3UxNiBtc3NfbWluLCBtc3NfbWF4OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qX1hUX1RDUE1TU19NQVRDSF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKaW5kZXggNzhiYzY1Zi4uYTQ5MGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKQEAgLTEsMTUgKzEsMTcgQEAKICNpZm5kZWYgX1hUX1RDUFVEUF9ICiAjZGVmaW5lIF9YVF9UQ1BVRFBfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVENQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdGNwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLwotCXVfaW50OF90IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KLQl1X2ludDhfdCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCV9fdTggZmxnX21hc2s7CQkJLyogVENQIGZsYWdzIG1hc2sgYnl0ZSAqLworCV9fdTggZmxnX2NtcDsJCQkvKiBUQ1AgZmxhZ3MgY29tcGFyZSBieXRlICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLwpAQCAtMjIsOSArMjQsOSBAQAogLyogVURQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdWRwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwdF91ZHAuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IDQ5OWFhOTMuLmY4MTA1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC01OSw5ICs1OSw5IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuZl9icmlkZ2VfZW5jYXBfaGVhZGVyX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QXzgwMjFRKToKIAkJcmV0dXJuIFZMQU5fSExFTjsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOgogCQlyZXR1cm4gUFBQT0VfU0VTX0hMRU47CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAppbmRleCA5MmY0YmRhLi5hNzg0NDViZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCkBAIC05LDEwICs5LDEwIEBACiAjZGVmaW5lIElQVF9PV05FUl9DT01NCTB4MTAKIAogc3RydWN0IGlwdF9vd25lcl9pbmZvIHsKLSAgICB1aWRfdCB1aWQ7Ci0gICAgZ2lkX3QgZ2lkOwotICAgIHBpZF90IHBpZDsKLSAgICBwaWRfdCBzaWQ7CisgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CisgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CisgICAgX19rZXJuZWxfcGlkX3QgcGlkOworICAgIF9fa2VybmVsX3BpZF90IHNpZDsKICAgICBjaGFyIGNvbW1bMTZdOwogICAgIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CS8qIGZsYWdzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAppbmRleCA4ODg3YTVmLi5hY2E0YmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZApAQCAtMTEsNiArMTEsNyBAQAogaGVhZGVyLXkgKz0gaXA2dF9saW1pdC5oCiBoZWFkZXIteSArPSBpcDZ0X21hYy5oCiBoZWFkZXIteSArPSBpcDZ0X21hcmsuaAoraGVhZGVyLXkgKz0gaXA2dF9taC5oCiBoZWFkZXIteSArPSBpcDZ0X211bHRpcG9ydC5oCiBoZWFkZXIteSArPSBpcDZ0X29wdHMuaAogaGVhZGVyLXkgKz0gaXA2dF9vd25lci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmluZGV4IDE5OTM3ZGEuLmVjNWNjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCkBAIC04LDEwICs4LDEwIEBACiAjZGVmaW5lIElQNlRfT1dORVJfU0lECTB4MDgKIAogc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7Ci0gICAgdWlkX3QgdWlkOwotICAgIGdpZF90IGdpZDsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgcGlkX3Qgc2lkOworICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOworICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworICAgIF9fa2VybmVsX3BpZF90IHBpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBzaWQ7CiAgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggNTFiMDlhMS4uNWJhMzk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTEwMyw2ICsxMDMsOCBAQAogI2RlZmluZSBORVRMSU5LX0FERF9NRU1CRVJTSElQCTEKICNkZWZpbmUgTkVUTElOS19EUk9QX01FTUJFUlNISVAJMgogI2RlZmluZSBORVRMSU5LX1BLVElORk8JCTMKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfRVJST1IJNAorI2RlZmluZSBORVRMSU5LX05PX0VOT0JVRlMJNQogCiBzdHJ1Y3QgbmxfcGt0aW5mbwogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCBlMzhkM2M5Li5kZTk5MDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtNjMsNiArNjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKKworCXJldHVybiBucGluZm8gJiYgKG5waW5mby0+cnhfbnAgfHwgbnBpbmZvLT5yeF9mbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoIWxpc3RfZW1wdHkoJnNrYi0+ZGV2LT5uYXBpX2xpc3QpKQpAQCAtOTksNiArMTA2LDEwIEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBkYjg2N2IwLi44Y2M4ODA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTQxNSw3ICs0MTUsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAjZW5kaWYgLyogQ09ORklHX05GU19WMyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mc19kZW50cnlfb3BlcmF0aW9uczsKIAogZXh0ZXJuIHZvaWQgbmZzX2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqZGlyKTsKIGV4dGVybiBpbnQgbmZzX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5mc19maCAqZmgsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggMmU1ZjAwMC4uNDNhNzEzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTc4NSw3ICs3ODUsNyBAQAogICovCiBzdHJ1Y3QgbmZzX3JwY19vcHMgewogCXUzMgl2ZXJzaW9uOwkJLyogUHJvdG9jb2wgdmVyc2lvbiAqLwotCXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZGVudHJ5X29wczsKKwljb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRlbnRyeV9vcHM7CiAJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmRpcl9pbm9kZV9vcHM7CiAJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmZpbGVfaW5vZGVfb3BzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCmluZGV4IGU4NmVkNTkuLmNiZThjZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAgKiBATkw4MDIxMV9DTURfU0VUX1dJUEhZOiBzZXQgd2lwaHkgcGFyYW1ldGVycywgbmVlZHMgJU5MODAyMTFfQVRUUl9XSVBIWSBvcgogICoJJU5MODAyMTFfQVRUUl9JRklOREVYOyBjYW4gYmUgdXNlZCB0byBzZXQgJU5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLAogICoJJU5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TLCAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsIGFuZC9vcgotICoJJU5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQuCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRS4KICAqIEBOTDgwMjExX0NNRF9ORVdfV0lQSFk6IE5ld2x5IGNyZWF0ZWQgd2lwaHksIHJlc3BvbnNlIHRvIGdldCByZXF1ZXN0CiAgKglvciByZW5hbWUgbm90aWZpY2F0aW9uLiBIYXMgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX1dJUEhZIGFuZAogICoJJU5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLgpAQCAtNzIsOCArNzIsOCBAQAogICoKICAqIEBOTDgwMjExX0NNRF9HRVRfS0VZOiBHZXQgc2VxdWVuY2UgY291bnRlciBpbmZvcm1hdGlvbiBmb3IgYSBrZXkgc3BlY2lmaWVkCiAgKglieSAlTkw4MDIxMV9BVFRSX0tFWV9JRFggYW5kL29yICVOTDgwMjExX0FUVFJfTUFDLgotICogQE5MODAyMTFfQ01EX1NFVF9LRVk6IFNldCBrZXkgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUIG9yCi0gKgklTkw4MDIxMV9BVFRSX0tFWV9USFJFU0hPTEQuCisgKiBATkw4MDIxMV9DTURfU0VUX0tFWTogU2V0IGtleSBhdHRyaWJ1dGVzICVOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFQsCisgKgklTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVQsIG9yICVOTDgwMjExX0FUVFJfS0VZX1RIUkVTSE9MRC4KICAqIEBOTDgwMjExX0NNRF9ORVdfS0VZOiBhZGQgYSBrZXkgd2l0aCBnaXZlbiAlTkw4MDIxMV9BVFRSX0tFWV9EQVRBLAogICoJJU5MODAyMTFfQVRUUl9LRVlfSURYLCAlTkw4MDIxMV9BVFRSX01BQyBhbmQgJU5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSCiAgKglhdHRyaWJ1dGVzLgpAQCAtODQsNyArODQsNyBAQAogICoJJU5MODAyMjJfQ01EX05FV19CRUFDT04gbWVzc2FnZSkKICAqIEBOTDgwMjExX0NNRF9TRVRfQkVBQ09OOiBzZXQgdGhlIGJlYWNvbiBvbiBhbiBhY2Nlc3MgcG9pbnQgaW50ZXJmYWNlCiAgKgl1c2luZyB0aGUgJU5MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUwsICVOTDgwMjExX0FUVFJfRFRJTV9QRVJJT0QsCi0gKgklTkw4MDIxMV9CRUFDT05fSEVBRCBhbmQgJU5MODAyMTFfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KKyAqCSVOTDgwMjExX0FUVFJfQkVBQ09OX0hFQUQgYW5kICVOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KICAqIEBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOiBhZGQgYSBuZXcgYmVhY29uIHRvIGFuIGFjY2VzcyBwb2ludCBpbnRlcmZhY2UsCiAgKglwYXJhbWV0ZXJzIGFyZSBsaWtlIGZvciAlTkw4MDIxMV9DTURfU0VUX0JFQUNPTi4KICAqIEBOTDgwMjExX0NNRF9ERUxfQkVBQ09OOiByZW1vdmUgdGhlIGJlYWNvbiwgc3RvcCBzZW5kaW5nIGl0CkBAIC0xMTMsNiArMTEzLDggQEAKICAqIEBOTDgwMjExX0NNRF9TRVRfQlNTOiBTZXQgQlNTIGF0dHJpYnV0ZXMgZm9yIEJTUyBpZGVudGlmaWVkIGJ5CiAgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVguCiAgKgorICogQE5MODAyMTFfQ01EX0dFVF9SRUc6IGFzayB0aGUgd2lyZWxlc3MgY29yZSB0byBzZW5kIHVzIGl0cyBjdXJyZW50bHkgc2V0CisgKiAJcmVndWxhdG9yeSBkb21haW4uCiAgKiBATkw4MDIxMV9DTURfU0VUX1JFRzogU2V0IGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENSREEgc2VuZHMgdGhpcyBjb21tYW5kCiAgKglhZnRlciBiZWluZyBxdWVyaWVkIGJ5IHRoZSBrZXJuZWwuIENSREEgcmVwbGllcyBieSBzZW5kaW5nIGEgcmVndWxhdG9yeQogICoJZG9tYWluIHN0cnVjdHVyZSB3aGljaCBjb25zaXN0cyBvZiAlTkw4MDIxMV9BVFRSX1JFR19BTFBIQSBzZXQgdG8gb3VyCkBAIC0xMzMsNiArMTM1LDcwIEBACiAgKiBATkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TOiBTZXQgbWVzaCBuZXR3b3JraW5nIHByb3BlcnRpZXMgZm9yIHRoZQogICogICAgICBpbnRlcmZhY2UgaWRlbnRpZmllZCBieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVgKICAqCisgKiBATkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUU6IFNldCBleHRyYSBJRXMgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLiBUaGUKKyAqCWludGVyZmFjZSBpcyBpZGVudGlmaWVkIHdpdGggJU5MODAyMTFfQVRUUl9JRklOREVYIGFuZCB0aGUgbWFuYWdlbWVudAorICoJZnJhbWUgc3VidHlwZSB3aXRoICVOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFLiBUaGUgZXh0cmEgSUUgZGF0YSB0byBiZQorICoJYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIG1hbmFnZW1lbnQgZnJhbWUgaXMgc3BlY2lmaWVkIHdpdGgKKyAqCSVOTDgwMjExX0FUVFJfSUUuIElmIHRoZSBjb21tYW5kIHN1Y2NlZWRzLCB0aGUgcmVxdWVzdGVkIGRhdGEgd2lsbCBiZQorICoJYWRkZWQgdG8gYWxsIHNwZWNpZmllZCBtYW5hZ2VtZW50IGZyYW1lcyBnZW5lcmF0ZWQgYnkKKyAqCWtlcm5lbC9maXJtd2FyZS9kcml2ZXIuCisgKglOb3RlOiBUaGlzIGNvbW1hbmQgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgaXQgaXMgb25seSByZXNlcnZlZCBhdCB0aGlzCisgKglwb2ludCB0byBhdm9pZCByZS11c2luZyBleGlzdGluZyBjb21tYW5kIG51bWJlci4gVGhlIGZ1bmN0aW9uYWxpdHkgdGhpcworICoJY29tbWFuZCB3YXMgcGxhbm5lZCBmb3IgaGFzIGJlZW4gcHJvdmlkZWQgd2l0aCBjbGVhbmVyIGRlc2lnbiB3aXRoIHRoZQorICoJb3B0aW9uIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBJRXMgaW4gTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLCBOTDgwMjExX0NNRF9BU1NPQ0lBVEUsCisgKglOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSwgYW5kIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURS4KKyAqCisgKiBATkw4MDIxMV9DTURfR0VUX1NDQU46IGdldCBzY2FuIHJlc3VsdHMKKyAqIEBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU46IHRyaWdnZXIgYSBuZXcgc2NhbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCisgKiBATkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUzogc2NhbiBub3RpZmljYXRpb24gKGFzIGEgcmVwbHkgdG8KKyAqCU5MODAyMTFfQ01EX0dFVF9TQ0FOIGFuZCBvbiB0aGUgInNjYW4iIG11bHRpY2FzdCBncm91cCkKKyAqIEBOTDgwMjExX0NNRF9TQ0FOX0FCT1JURUQ6IHNjYW4gd2FzIGFib3J0ZWQsIGZvciB1bnNwZWNpZmllZCByZWFzb25zLAorICoJcGFydGlhbCBzY2FuIHJlc3VsdHMgbWF5IGJlIGF2YWlsYWJsZQorICoKKyAqIEBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFOiBpbmRpY2F0ZXMgdG8gdXNlcnNwYWNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbgorICogCWhhcyBiZWVuIGNoYW5nZWQgYW5kIHByb3ZpZGVzIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgaW5mb3JtYXRpb24KKyAqIAl0aGF0IGNhdXNlZCB0aGUgY2hhbmdlIHN1Y2ggYXMgd2hvIGluaXRpYXRlZCB0aGUgcmVndWxhdG9yeSByZXF1ZXN0CisgKiAJKCVOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiksIHRoZSB3aXBoeV9pZHgKKyAqIAkoJU5MODAyMTFfQVRUUl9SRUdfQUxQSEEyKSBvbiB3aGljaCB0aGUgcmVxdWVzdCB3YXMgbWFkZSBmcm9tIGlmCisgKiAJdGhlIGluaXRpYXRvciB3YXMgJU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yCisgKiAJJU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJc2V0ICglTkw4MDIxMV9BVFRSX1JFR19UWVBFKSwgaWYgdGhlIHR5cGUgb2YgcmVndWxhdG9yeSBkb21haW4gaXMKKyAqIAklTkw4MDIxMV9SRUdfVFlQRV9DT1VOVFJZIHRoZSBhbHBoYTIgdG8gd2hpY2ggd2UgaGF2ZSBtb3ZlZCBvbgorICogCXRvICglTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIpLgorICoKKyAqIEBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEU6IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbi4KKyAqCVRoaXMgY29tbWFuZCBpcyB1c2VkIGJvdGggYXMgYSBjb21tYW5kIChyZXF1ZXN0IHRvIGF1dGhlbnRpY2F0ZSkgYW5kCisgKglhcyBhbiBldmVudCBvbiB0aGUgIm1sbWUiIG11bHRpY2FzdCBncm91cCBpbmRpY2F0aW5nIGNvbXBsZXRpb24gb2YgdGhlCisgKglhdXRoZW50aWNhdGlvbiBwcm9jZXNzLgorICoJV2hlbiB1c2VkIGFzIGEgY29tbWFuZCwgJU5MODAyMTFfQVRUUl9JRklOREVYIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlCisgKglpbnRlcmZhY2UuICVOTDgwMjExX0FUVFJfTUFDIGlzIHVzZWQgdG8gc3BlY2lmeSBQZWVyU1RBQWRkcmVzcyAoYW5kCisgKglCU1NJRCBpbiBjYXNlIG9mIHN0YXRpb24gbW9kZSkuICVOTDgwMjExX0FUVFJfU1NJRCBpcyB1c2VkIHRvIHNwZWNpZnkKKyAqCXRoZSBTU0lEIChtYWlubHkgZm9yIGFzc29jaWF0aW9uLCBidXQgaXMgaW5jbHVkZWQgaW4gYXV0aGVudGljYXRpb24KKyAqCXJlcXVlc3QsIHRvbywgdG8gaGVscCBCU1Mgc2VsZWN0aW9uLiAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgaXMgdXNlZAorICoJdG8gc3BlY2lmeSB0aGUgZnJlcXVlbmNlIG9mIHRoZSBjaGFubmVsIGluIE1Iei4gJU5MODAyMTFfQVRUUl9BVVRIX1RZUEUKKyAqCWlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgYXV0aGVudGljYXRpb24gdHlwZS4gJU5MODAyMTFfQVRUUl9JRSBpcyB1c2VkIHRvCisgKglkZWZpbmUgSUVzIChWZW5kb3JTcGVjaWZpY0luZm8sIGJ1dCBhbHNvIGluY2x1ZGluZyBSU04gSUUgYW5kIEZUIElFcykKKyAqCXRvIGJlIGFkZGVkIHRvIHRoZSBmcmFtZS4KKyAqCVdoZW4gdXNlZCBhcyBhbiBldmVudCwgdGhpcyByZXBvcnRzIHJlY2VwdGlvbiBvZiBhbiBBdXRoZW50aWNhdGlvbgorICoJZnJhbWUgaW4gc3RhdGlvbiBhbmQgSUJTUyBtb2RlcyB3aGVuIHRoZSBsb2NhbCBNTE1FIHByb2Nlc3NlZCB0aGUKKyAqCWZyYW1lLCBpLmUuLCBpdCB3YXMgZm9yIHRoZSBsb2NhbCBTVEEgYW5kIHdhcyByZWNlaXZlZCBpbiBjb3JyZWN0CisgKglzdGF0ZS4gVGhpcyBpcyBzaW1pbGFyIHRvIE1MTUUtQVVUSEVOVElDQVRFLmNvbmZpcm0gcHJpbWl0aXZlIGluIHRoZQorICoJTUxNRSBTQVAgaW50ZXJmYWNlIChrZXJuZWwgcHJvdmlkaW5nIE1MTUUsIHVzZXJzcGFjZSBTTUUpLiBUaGUKKyAqCWluY2x1ZGVkIE5MODAyMTFfQVRUUl9GUkFNRSBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIG1hbmFnZW1lbnQgZnJhbWUKKyAqCShpbmNsdWRpbmcgYm90aCB0aGUgaGVhZGVyIGFuZCBmcmFtZSBib2R5LCBidXQgbm90IEZDUykuCisgKiBATkw4MDIxMV9DTURfQVNTT0NJQVRFOiBhc3NvY2lhdGlvbiByZXF1ZXN0IGFuZCBub3RpZmljYXRpb247IGxpa2UKKyAqCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBidXQgZm9yIEFzc29jaWF0aW9uIGFuZCBSZWFzc29jaWF0aW9uCisgKgkoc2ltaWxhciB0byBNTE1FLUFTU09DSUFURS5yZXF1ZXN0LCBNTE1FLVJFQVNTT0NJQVRFLnJlcXVlc3QsCisgKglNTE1FLUFTU09DSUFURS5jb25maXJtIG9yIE1MTUUtUkVBU1NPQ0lBVEUuY29uZmlybSBwcmltaXRpdmVzKS4KKyAqIEBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURTogZGVhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFuZCBub3RpZmljYXRpb247IGxpa2UKKyAqCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBidXQgZm9yIERlYXV0aGVudGljYXRpb24gZnJhbWVzIChzaW1pbGFyIHRvCisgKglNTE1FLURFQVVUSEVOVElDQVRJT04ucmVxdWVzdCBhbmQgTUxNRS1ERUFVVEhFTlRJQ0FURS5pbmRpY2F0aW9uCisgKglwcmltaXRpdmVzKS4KKyAqIEBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEU6IGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgbGlrZQorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGJ1dCBmb3IgRGlzYXNzb2NpYXRpb24gZnJhbWVzIChzaW1pbGFyIHRvCisgKglNTE1FLURJU0FTU09DSUFURS5yZXF1ZXN0IGFuZCBNTE1FLURJU0FTU09DSUFURS5pbmRpY2F0aW9uIHByaW1pdGl2ZXMpLgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTE3OCw2ICsyNDQsMjIgQEAKIAlOTDgwMjExX0NNRF9HRVRfTUVTSF9QQVJBTVMsCiAJTkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TLAogCisJTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgLyogcmVzZXJ2ZWQ7IG5vdCB1c2VkICovLAorCisJTkw4MDIxMV9DTURfR0VUX1JFRywKKworCU5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCU5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTiwKKwlOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTLAorCU5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCwKKworCU5MODAyMTFfQ01EX1JFR19DSEFOR0UsCisKKwlOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsCisJTkw4MDIxMV9DTURfQVNTT0NJQVRFLAorCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFLAorCU5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwKKwogCS8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqLwogCiAJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCkBAIC0xOTAsNiArMjcyLDEyIEBACiAgKiBoZXJlCiAgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX0JTUyBOTDgwMjExX0NNRF9TRVRfQlNTCisjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFCisjZGVmaW5lIE5MODAyMTFfQ01EX1JFR19DSEFOR0UgTkw4MDIxMV9DTURfUkVHX0NIQU5HRQorI2RlZmluZSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFCisjZGVmaW5lIE5MODAyMTFfQ01EX0FTU09DSUFURSBOTDgwMjExX0NNRF9BU1NPQ0lBVEUKKyNkZWZpbmUgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUKKyNkZWZpbmUgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURQogCiAvKioKICAqIGVudW0gbmw4MDIxMV9hdHRycyAtIG5sODAyMTEgbmV0bGluayBhdHRyaWJ1dGVzCkBAIC0yODQsNiArMzcyLDQyIEBACiAgKglzdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGVzLCBlYWNoIGEgZmxhZyBhdHRyaWJ1dGUgd2l0aCB0aGUgbnVtYmVyCiAgKglvZiB0aGUgaW50ZXJmYWNlIG1vZGUuCiAgKgorICogQE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEU6IE1hbmFnZW1lbnQgZnJhbWUgc3VidHlwZSBmb3IKKyAqCSVOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0lFOiBJbmZvcm1hdGlvbiBlbGVtZW50KHMpIGRhdGEgKHVzZWQsIGUuZy4sIHdpdGgKKyAqCSVOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSkuCisgKgorICogQE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFM6IG51bWJlciBvZiBTU0lEcyB5b3UgY2FuIHNjYW4gd2l0aAorICoJYSBzaW5nbGUgc2NhbiByZXF1ZXN0LCBhIHdpcGh5IGF0dHJpYnV0ZS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBmcmVxdWVuY2llcyAoaW4gTUh6KQorICogQE5MODAyMTFfQVRUUl9TQ0FOX1NTSURTOiBuZXN0ZWQgYXR0cmlidXRlIHdpdGggU1NJRHMsIGxlYXZlIG91dCBmb3IgcGFzc2l2ZQorICoJc2Nhbm5pbmcgYW5kIGluY2x1ZGUgYSB6ZXJvLWxlbmd0aCBTU0lEICh3aWxkY2FyZCkgZm9yIHdpbGRjYXJkIHNjYW4KKyAqIEBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OOiB0aGUgc2NhbiBnZW5lcmF0aW9uIGluY3JlYXNlcyB3aGVuZXZlciB0aGUKKyAqCXNjYW4gcmVzdWx0IGxpc3QgY2hhbmdlcyAoQlNTIGV4cGlyZWQgb3IgYWRkZWQpIHNvIHRoYXQgYXBwbGljYXRpb25zCisgKgljYW4gdmVyaWZ5IHRoYXQgdGhleSBnb3QgYSBzaW5nbGUsIGNvbnNpc3RlbnQgc25hcHNob3QgKHdoZW4gYWxsIGR1bXAKKyAqCW1lc3NhZ2VzIGNhcnJpZWQgdGhlIHNhbWUgZ2VuZXJhdGlvbiBudW1iZXIpCisgKiBATkw4MDIxMV9BVFRSX0JTUzogc2NhbiByZXN1bHQgQlNTCisgKgorICogQE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SOiBpbmRpY2F0ZXMgd2hvIHJlcXVlc3RlZCB0aGUgcmVndWxhdG9yeSBkb21haW4KKyAqIAljdXJyZW50bHkgaW4gZWZmZWN0LiBUaGlzIGNvdWxkIGJlIGFueSBvZiB0aGUgJU5MODAyMTFfUkVHRE9NX1NFVF9CWV8qCisgKiBATkw4MDIxMV9BVFRSX1JFR19UWVBFOiBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGN1cnJlbnRseQorICogCXNldC4gVGhpcyBjYW4gYmUgb25lIG9mIHRoZSBubDgwMjExX3JlZ190eXBlICglTkw4MDIxMV9SRUdET01fVFlQRV8qKQorICoKKyAqIEBOTDgwMjExX0FUVFJfU1VQUE9SVEVEX0NPTU1BTkRTOiB3aXBoeSBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMKKyAqCWFuIGFycmF5IG9mIGNvbW1hbmQgbnVtYmVycyAoaS5lLiBhIG1hcHBpbmcgaW5kZXggdG8gY29tbWFuZCBudW1iZXIpCisgKgl0aGF0IHRoZSBkcml2ZXIgZm9yIHRoZSBnaXZlbiB3aXBoeSBzdXBwb3J0cy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0ZSQU1FOiBmcmFtZSBkYXRhIChiaW5hcnkgYXR0cmlidXRlKSwgaW5jbHVkaW5nIGZyYW1lIGhlYWRlcgorICoJYW5kIGJvZHksIGJ1dCBub3QgRkNTOyB1c2VkLCBlLmcuLCB3aXRoIE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBhbmQKKyAqCU5MODAyMTFfQ01EX0FTU09DSUFURSBldmVudHMKKyAqIEBOTDgwMjExX0FUVFJfU1NJRDogU1NJRCAoYmluYXJ5IGF0dHJpYnV0ZSwgMC4uMzIgb2N0ZXRzKQorICogQE5MODAyMTFfQVRUUl9BVVRIX1RZUEU6IEF1dGhlbnRpY2F0aW9uVHlwZSwgc2VlICZlbnVtIG5sODAyMTFfYXV0aF90eXBlLAorICoJcmVwcmVzZW50ZWQgYXMgYSB1MzIKKyAqIEBOTDgwMjExX0FUVFJfUkVBU09OX0NPREU6IFJlYXNvbkNvZGUgZm9yICVOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSBhbmQKKyAqCSVOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsIHUxNgorICoKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMzQ2LDYgKzQ3MCwyOCBAQAogCU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRLAogCU5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUsCiAKKwlOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVCwKKworCU5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUsCisJTkw4MDIxMV9BVFRSX0lFLAorCisJTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKKworCU5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAorCU5MODAyMTFfQVRUUl9TQ0FOX1NTSURTLAorCU5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCisJTkw4MDIxMV9BVFRSX0JTUywKKworCU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLAorCU5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKworCU5MODAyMTFfQVRUUl9TVVBQT1JURURfQ09NTUFORFMsCisKKwlOTDgwMjExX0FUVFJfRlJBTUUsCisJTkw4MDIxMV9BVFRSX1NTSUQsCisJTkw4MDIxMV9BVFRSX0FVVEhfVFlQRSwKKwlOTDgwMjExX0FUVFJfUkVBU09OX0NPREUsCisKIAkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KIAogCV9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCkBAIC0zNjAsNyArNTA2LDE1IEBACiAjZGVmaW5lIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUwogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfVFhRX1BBUkFNUyBOTDgwMjExX0FUVFJfV0lQSFlfVFhRX1BBUkFNUwogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUQotI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfU0VDX0NIQU5fT0ZGU0VUIE5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRQorI2RlZmluZSBOTDgwMjExX0FUVFJfSUUgTkw4MDIxMV9BVFRSX0lFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfVFlQRSBOTDgwMjExX0FUVFJfUkVHX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZSQU1FIE5MODAyMTFfQVRUUl9GUkFNRQorI2RlZmluZSBOTDgwMjExX0FUVFJfU1NJRCBOTDgwMjExX0FUVFJfU1NJRAorI2RlZmluZSBOTDgwMjExX0FUVFJfQVVUSF9UWVBFIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERQogCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkFURVMJCQkzMgogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUwkJMzIKQEAgLTQxMiwxMiArNTY2LDE0IEBACiAgKiBATkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRTogc3RhdGlvbiBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZyBmcmFtZXMKICAqCXdpdGggc2hvcnQgYmFya2VyIHByZWFtYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19XTUU6IHN0YXRpb24gaXMgV01FL1FvUyBjYXBhYmxlCisgKiBATkw4MDIxMV9TVEFfRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KICAqLwogZW51bSBubDgwMjExX3N0YV9mbGFncyB7CiAJX19OTDgwMjExX1NUQV9GTEFHX0lOVkFMSUQsCiAJTkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVELAogCU5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUsCiAJTkw4MDIxMV9TVEFfRkxBR19XTUUsCisJTkw4MDIxMV9TVEFfRkxBR19NRlAsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTQ2NSw2ICs2MjEsOSBAQAogICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKICAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFM6IHRvdGFsIHJlY2VpdmVkIHBhY2tldCAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKHUzMiwgdG8gdGhpcworICoJc3RhdGlvbikKICAqLwogZW51bSBubDgwMjExX3N0YV9pbmZvIHsKIAlfX05MODAyMTFfU1RBX0lORk9fSU5WQUxJRCwKQEAgLTQ3Niw2ICs2MzUsOCBAQAogCU5MODAyMTFfU1RBX0lORk9fUExJTktfU1RBVEUsCiAJTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwsCiAJTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwlOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKQEAgLTYwNyw2ICs3NjgsNDggQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2luaXRpYXRvciAtIEluZGljYXRlcyB0aGUgaW5pdGlhdG9yIG9mIGEgcmVnIGRvbWFpbiByZXF1ZXN0CisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUjogVXNlciBhc2tlZCB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlCisgKiAJcmVndWxhdG9yeSBkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlCisgKiAJd2lyZWxlc3MgY29yZSBpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbgorICogCTgwMi4xMSBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0CisgKiAJdGhpbmtzIHdlIHNob3VsZCBjb25zaWRlci4KKyAqLworZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgeworCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9yZWdfdHlwZSAtIHNwZWNpZmllcyB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfQ09VTlRSWTogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyBvbmUgdGhhdCBwZXJ0YWlucworICoJdG8gYSBzcGVjaWZpYyBjb3VudHJ5LiBXaGVuIHRoaXMgaXMgc2V0IHlvdSBjYW4gY291bnQgb24gdGhlCisgKglJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGJlaW5nIHZhbGlkLgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQ6IHRoZSByZWd1bGF0b3J5IHNldCBkb21haW4gaXMgdGhlIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQ6IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgYSBjdXN0b20KKyAqIAlkcml2ZXIgc3BlY2lmaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uIFRoZXNlIGRvIG5vdCBhcHBseSBzeXN0ZW0td2lkZQorICogCWFuZCBhcmUgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBpbmRpdmlkdWFsIGRldmljZXMgd2hpY2ggaGF2ZSByZXF1ZXN0ZWQKKyAqIAl0aGVtIHRvIGJlIGFwcGxpZWQuCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT046IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgdGhlIHByb2R1Y3QKKyAqCW9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbnMgLS0gdGhlIHByZXZpb3VzbHkKKyAqCXNldCByZWd1bGF0b3J5IGRvbWFpbiBvbiB0aGUgc3lzdGVtIGFuZCB0aGUgbGFzdCBhY2NlcHRlZCByZWd1bGF0b3J5CisgKglkb21haW4gcmVxdWVzdCB0byBiZSBwcm9jZXNzZWQuCisgKi8KK2VudW0gbmw4MDIxMV9yZWdfdHlwZSB7CisJTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZLAorCU5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04sCit9OworCisvKioKICAqIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9hdHRyIC0gcmVndWxhdG9yeSBydWxlIGF0dHJpYnV0ZXMKICAqIEBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1M6IGEgc2V0IG9mIGZsYWdzIHdoaWNoIHNwZWNpZnkgYWRkaXRpb25hbAogICogCWNvbnNpZGVyYXRpb25zIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSByYW5nZS4gVGhlc2UgYXJlIHRoZQpAQCAtODExLDQgKzEwMTQsNTIgQEAKIAlOTDgwMjExX0NIQU5fSFQ0ME1JTlVTLAogCU5MODAyMTFfQ0hBTl9IVDQwUExVUwogfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYnNzIC0gbmV0bGluayBhdHRyaWJ1dGVzIGZvciBhIEJTUworICoKKyAqIEBfX05MODAyMTFfQlNTX0lOVkFMSUQ6IGludmFsaWQKKyAqIEBOTDgwMjExX0JTU19GUkVRVUVOQ1k6IGZyZXF1ZW5jeSBpbiBNSHogKHUzMikKKyAqIEBOTDgwMjExX0JTU19UU0Y6IFRTRiBvZiB0aGUgcmVjZWl2ZWQgcHJvYmUgcmVzcG9uc2UvYmVhY29uICh1NjQpCisgKiBATkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMOiBiZWFjb24gaW50ZXJ2YWwgb2YgdGhlIChJKUJTUyAodTE2KQorICogQE5MODAyMTFfQlNTX0NBUEFCSUxJVFk6IGNhcGFiaWxpdHkgZmllbGQgKENQVSBvcmRlciwgdTE2KQorICogQE5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTOiBiaW5hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgdGhlCisgKglyYXcgaW5mb3JtYXRpb24gZWxlbWVudHMgZnJvbSB0aGUgcHJvYmUgcmVzcG9uc2UvYmVhY29uIChiaW4pCisgKiBATkw4MDIxMV9CU1NfU0lHTkFMX01CTTogc2lnbmFsIHN0cmVuZ3RoIG9mIHByb2JlIHJlc3BvbnNlL2JlYWNvbgorICoJaW4gbUJtICgxMDAgKiBkQm0pIChzMzIpCisgKiBATkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQzogc2lnbmFsIHN0cmVuZ3RoIG9mIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24KKyAqCWluIHVuc3BlY2lmaWVkIHVuaXRzLCBzY2FsZWQgdG8gMC4uMTAwICh1OCkKKyAqIEBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1Q6IGludGVybmFsCisgKiBATkw4MDIxMV9CU1NfTUFYOiBoaWdoZXN0IEJTUyBhdHRyaWJ1dGUKKyAqLworZW51bSBubDgwMjExX2JzcyB7CisJX19OTDgwMjExX0JTU19JTlZBTElELAorCU5MODAyMTFfQlNTX0JTU0lELAorCU5MODAyMTFfQlNTX0ZSRVFVRU5DWSwKKwlOTDgwMjExX0JTU19UU0YsCisJTkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMLAorCU5MODAyMTFfQlNTX0NBUEFCSUxJVFksCisJTkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFMsCisJTkw4MDIxMV9CU1NfU0lHTkFMX01CTSwKKwlOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX0JTU19BRlRFUl9MQVNULAorCU5MODAyMTFfQlNTX01BWCA9IF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2F1dGhfdHlwZSAtIEF1dGhlbnRpY2F0aW9uVHlwZQorICoKKyAqIEBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOiBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbgorICogQE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTogU2hhcmVkIEtleSBhdXRoZW50aWNhdGlvbiAoV0VQIG9ubHkpCisgKiBATkw4MDIxMV9BVVRIVFlQRV9GVDogRmFzdCBCU1MgVHJhbnNpdGlvbiAoSUVFRSA4MDIuMTFyKQorICogQE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA6IE5ldHdvcmsgRUFQIChzb21lIENpc2NvIEFQcyBhbmQgbWFpbmx5IExFQVApCisgKi8KK2VudW0gbmw4MDIxMV9hdXRoX3R5cGUgeworCU5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU0sCisJTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZLAorCU5MODAyMTFfQVVUSFRZUEVfRlQsCisJTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUCwKK307CiAjZW5kaWYgLyogX19MSU5VWF9OTDgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnVidXMuaCBiL2luY2x1ZGUvbGludXgvbnVidXMuaAppbmRleCA3MzgyYWYzLi5lMTM3YjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L251YnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9udWJ1cy5oCkBAIC0yMzcsNiArMjM3LDcgQEAKIAlpbnQgbWFzazsKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgbnVidXNfYm9hcmQgewogCXN0cnVjdCBudWJ1c19ib2FyZCogbmV4dDsKIAlzdHJ1Y3QgbnVidXNfZGV2KiBmaXJzdF9kZXY7CkBAIC0zNTEsNiArMzUyLDcgQEAKIHZvaWQgbnVidXNfZ2V0X3JzcmNfc3RyKHZvaWQqIGRlc3QsCiAJCQljb25zdCBzdHJ1Y3QgbnVidXNfZGlyZW50ICpkaXJlbnQsCiAJCQlpbnQgbWF4bGVuKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIFdlJ2QgbGlrZSB0byBnZXQgcmlkIG9mIHRoaXMgZXZlbnR1YWxseS4gIE9ubHkgZGF5bmFwb3J0LmMgdXNlcyBpdCBub3cuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKm51YnVzX3Nsb3RfYWRkcihpbnQgc2xvdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggYWNhOGM0NS4uMmM5ZTgwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTgzNCw2ICs4MzQsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzYJMHg1Mjc1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NwkweDcyNzUKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZPWENPTk4JCTB4MTA1YgorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU1DCQkweDEwNjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04NjczRgkweDAxMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04ODg2QkYJMHg2NzNhCkBAIC0xMjM1LDYgKzEyMzcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEgICAgICAgICAgICAgIDB4MDQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjIgICAgICAgICAgICAgIDB4MDQ1MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMgICAgICAgICAgICAgIDB4MDQ1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjdfU01CVVMgICAgIDB4MDU0MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjQgICAgICAgICAgICAgIDB4MDU0QwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjUgICAgICAgICAgICAgIDB4MDU0RAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjYgICAgICAgICAgICAgIDB4MDU0RQpAQCAtMTI0NSwxMSArMTI0OCwxNCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzEgICAgICAgICAgICAgIDB4MDdERgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjdfSURFICAgICAgIDB4MDU2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzNfSURFICAgICAgIDB4MDU2QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzhTX1NNQlVTICAgIDB4MDc1MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzdfSURFICAgICAgIDB4MDc1OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzIgICAgICAgICAgICAgIDB4MDc2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzMgICAgICAgICAgICAgIDB4MDc2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQgICAgICAgICAgICAgIDB4MDc2MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzUgICAgICAgICAgICAgIDB4MDc2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzNfU01CVVMgICAgIDB4MDdEOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNzlfU01CVVMgICAgIDB4MEFBMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzYgICAgICAgICAgICAgIDB4MEFCMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcgICAgICAgICAgICAgIDB4MEFCMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzggICAgICAgICAgICAgIDB4MEFCMgpAQCAtMTQ3Myw2ICsxNDc5LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDEwMDBJREUgMHgwMjE0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIgMHgwMjE3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNkxQQyAweDAyMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDExMDBMRCAweDA0MDgKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NCRQkJMHgxMTc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMMTAwCTB4MDMwMQpAQCAtMTk3MSw2ICsxOTc4LDggQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcJCTB4MTQ0ZAogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1CSVQJCTB4MTQ2OAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTVlSSUNPTQkJMHgxNGMxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USVRBTgkJMHgxNEQyCkBAIC0yMTEyLDYgKzIxMjEsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJX09MRCAweDVlOGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9TSU5BSQkweDYyNzQKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RGSQkJMHgxNWJkCisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RVUlDS05FVAkJMHgxNWUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVJQ0tORVRfWEoJMHgwNTAwCiAKQEAgLTIyMTUsNiArMjIyNiw4IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1BTUElOCQkweDE4NjcKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJTEFOCQkweDE5MDQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RESSAgICAgICAgICAgICAgIDB4MTkyRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RESV9FSENJICAgICAgICAgIDB4MDEwMQogCkBAIC0yMjYzLDYgKzIyNzYsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYwCTB4MTYwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYxCTB4MTZmZgogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUU1JCQkweDFhMzIKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RFS1JBTQkJMHgxZGUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVEVLUkFNX0RDMjkwCTB4ZGMyOQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaAppbmRleCA5ZjJhMzc1Li5lZTU2MTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKQEAgLTUsNTMgKzUsNjYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+IC8qIEZvciBrbWFsbG9jKCkgKi8KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAKKyNpZm5kZWYgUEVSX0NQVV9CQVNFX1NFQ1RJT04KICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIERFRklORV9QRVJfQ1BVKHR5cGUsIG5hbWUpCQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBlcmNwdSIpKSkJCQlcCi0JUEVSX0NQVV9BVFRSSUJVVEVTIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisjZGVmaW5lIFBFUl9DUFVfQkFTRV9TRUNUSU9OICIuZGF0YS5wZXJjcHUiCisjZWxzZQorI2RlZmluZSBQRVJfQ1BVX0JBU0VfU0VDVElPTiAiLmRhdGEiCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAogCiAjaWZkZWYgTU9EVUxFCi0jZGVmaW5lIFNIQVJFRF9BTElHTkVEX1NFQ1RJT04gIi5kYXRhLnBlcmNwdSIKKyNkZWZpbmUgUEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OICIiCiAjZWxzZQotI2RlZmluZSBTSEFSRURfQUxJR05FRF9TRUNUSU9OICIuZGF0YS5wZXJjcHUuc2hhcmVkX2FsaWduZWQiCisjZGVmaW5lIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTiAiLnNoYXJlZF9hbGlnbmVkIgogI2VuZGlmCisjZGVmaW5lIFBFUl9DUFVfRklSU1RfU0VDVElPTiAiLmZpcnN0IgorCisjZWxzZQorCisjZGVmaW5lIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTiAiIgorI2RlZmluZSBQRVJfQ1BVX0ZJUlNUX1NFQ1RJT04gIiIKKworI2VuZGlmCisKKyNkZWZpbmUgREVGSU5FX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCBzZWN0aW9uKQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXyhQRVJfQ1BVX0JBU0VfU0VDVElPTiBzZWN0aW9uKSkpCVwKKwlQRVJfQ1BVX0FUVFJJQlVURVMgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKQkJCQkJXAorCURFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgIiIpCiAKICNkZWZpbmUgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodHlwZSwgbmFtZSkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oU0hBUkVEX0FMSUdORURfU0VDVElPTikpKQkJXAotCVBFUl9DUFVfQVRUUklCVVRFUyBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQkJXAorCURFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgUEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OKSBcCiAJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAogCi0jZGVmaW5lIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRCh0eXBlLCBuYW1lKQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGVyY3B1LnBhZ2VfYWxpZ25lZCIpKSkJXAotCVBFUl9DUFVfQVRUUklCVVRFUyBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQotI2Vsc2UKLSNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkJCQkJCVwKLQlQRVJfQ1BVX0FUVFJJQlVURVMgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKyNkZWZpbmUgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHR5cGUsIG5hbWUpCQkJCVwKKwlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsICIucGFnZV9hbGlnbmVkIikKIAotI2RlZmluZSBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRCh0eXBlLCBuYW1lKQkJICAgICAgXAotCURFRklORV9QRVJfQ1BVKHR5cGUsIG5hbWUpCi0KLSNkZWZpbmUgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHR5cGUsIG5hbWUpCQkgICAgICBcCi0JREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkKLSNlbmRpZgorI2RlZmluZSBERUZJTkVfUEVSX0NQVV9GSVJTVCh0eXBlLCBuYW1lKQkJCQlcCisJREVGSU5FX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCBQRVJfQ1BVX0ZJUlNUX1NFQ1RJT04pCiAKICNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHZhcikgRVhQT1JUX1NZTUJPTChwZXJfY3B1X18jI3ZhcikKICNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTCh2YXIpIEVYUE9SVF9TWU1CT0xfR1BMKHBlcl9jcHVfXyMjdmFyKQogCi0vKiBFbm91Z2ggdG8gY292ZXIgYWxsIERFRklORV9QRVJfQ1BVcyBpbiBrZXJuZWwsIGluY2x1ZGluZyBtb2R1bGVzLiAqLwotI2lmbmRlZiBQRVJDUFVfRU5PVUdIX1JPT00KKy8qIGVub3VnaCB0byBjb3ZlciBhbGwgREVGSU5FX1BFUl9DUFVzIGluIG1vZHVsZXMgKi8KICNpZmRlZiBDT05GSUdfTU9EVUxFUwotI2RlZmluZSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUJODE5MgorI2RlZmluZSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUJCSg4IDw8IDEwKQogI2Vsc2UKLSNkZWZpbmUgUEVSQ1BVX01PRFVMRV9SRVNFUlZFCTAKKyNkZWZpbmUgUEVSQ1BVX01PRFVMRV9SRVNFUlZFCQkwCiAjZW5kaWYKIAorI2lmbmRlZiBQRVJDUFVfRU5PVUdIX1JPT00KICNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NCQkJCQkJXAotCShfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0ICsgUEVSQ1BVX01PRFVMRV9SRVNFUlZFKQotI2VuZGlmCS8qIFBFUkNQVV9FTk9VR0hfUk9PTSAqLworCShBTElHTihfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0LCBTTVBfQ0FDSEVfQllURVMpICsJXAorCSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUpCisjZW5kaWYKIAogLyoKICAqIE11c3QgYmUgYW4gbHZhbHVlLiBTaW5jZSBAdmFyIG11c3QgYmUgYSBzaW1wbGUgaWRlbnRpZmllciwKQEAgLTY1LDUyICs3OCw5NCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCisjaWZkZWYgQ09ORklHX0hBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEKKworLyogbWluaW11bSB1bml0IHNpemUsIGFsc28gaXMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGFsbG9jYXRpb24gc2l6ZSAqLworI2RlZmluZSBQQ1BVX01JTl9VTklUX1NJWkUJCVBGTl9BTElHTig2NCA8PCAxMCkKKworLyoKKyAqIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUgaW5kaWNhdGVzIHRoZSBhbW91bnQgb2YgZnJlZSBhcmVhIHRvIHBpZ2d5CisgKiBiYWNrIG9uIHRoZSBmaXJzdCBjaHVuayBmb3IgZHluYW1pYyBwZXJjcHUgYWxsb2NhdGlvbiBpZiBhcmNoIGlzCisgKiBtYW51YWxseSBhbGxvY2F0aW5nIGFuZCBtYXBwaW5nIGl0IGZvciBmYXN0ZXIgYWNjZXNzIChhcyBhIHBhcnQgb2YKKyAqIGxhcmdlIHBhZ2UgbWFwcGluZyBmb3IgZXhhbXBsZSkuCisgKgorICogVGhlIGZvbGxvd2luZyB2YWx1ZXMgZ2l2ZSBiZXR3ZWVuIG9uZSBhbmQgdHdvIHBhZ2VzIG9mIGZyZWUgc3BhY2UKKyAqIGFmdGVyIHR5cGljYWwgbWluaW1hbCBib290ICgyLXdheSBTTVAsIHNpbmdsZSBkaXNrIGFuZCBOSUMpIHdpdGgKKyAqIGJvdGggZGVmY29uZmlnIGFuZCBhIGRpc3RybyBjb25maWcgb24geDg2XzY0IGFuZCAzMi4gIE1vcmUKKyAqIGludGVsbGlnZW50IHdheSB0byBkZXRlcm1pbmUgdGhpcyB3b3VsZCBiZSBuaWNlLgorICovCisjaWYgQklUU19QRVJfTE9ORyA+IDMyCisjZGVmaW5lIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUJCSgyMCA8PCAxMCkKKyNlbHNlCisjZGVmaW5lIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUJCSgxMiA8PCAxMCkKKyNlbmRpZgorCitleHRlcm4gdm9pZCAqcGNwdV9iYXNlX2FkZHI7CisKK3R5cGVkZWYgc3RydWN0IHBhZ2UgKiAoKnBjcHVfZ2V0X3BhZ2VfZm5fdCkodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2Vubyk7Cit0eXBlZGVmIHZvaWQgKCpwY3B1X3BvcHVsYXRlX3B0ZV9mbl90KSh1bnNpZ25lZCBsb25nIGFkZHIpOworCitleHRlcm4gc2l6ZV90IF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVfZ2V0X3BhZ2VfZm5fdCBnZXRfcGFnZV9mbiwKKwkJCQlzaXplX3Qgc3RhdGljX3NpemUsIHNpemVfdCByZXNlcnZlZF9zaXplLAorCQkJCXNzaXplX3QgZHluX3NpemUsIHNzaXplX3QgdW5pdF9zaXplLAorCQkJCXZvaWQgKmJhc2VfYWRkciwKKwkJCQlwY3B1X3BvcHVsYXRlX3B0ZV9mbl90IHBvcHVsYXRlX3B0ZV9mbik7CisKK2V4dGVybiBzc2l6ZV90IF9faW5pdCBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKAorCQkJCXNpemVfdCBzdGF0aWNfc2l6ZSwgc2l6ZV90IHJlc2VydmVkX3NpemUsCisJCQkJc3NpemVfdCBkeW5fc2l6ZSwgc3NpemVfdCB1bml0X3NpemUpOworCisvKgorICogVXNlIHRoaXMgdG8gZ2V0IHRvIGEgY3B1J3MgdmVyc2lvbiBvZiB0aGUgcGVyLWNwdSBvYmplY3QKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gTm9uLWF0b21pYyBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgQ1BVJ3MKKyAqIHZlcnNpb24gc2hvdWxkIHByb2JhYmx5IGJlIGNvbWJpbmVkIHdpdGggZ2V0X2NwdSgpL3B1dF9jcHUoKS4KKyAqLworI2RlZmluZSBwZXJfY3B1X3B0cihwdHIsIGNwdSkJU0hJRlRfUEVSQ1BVX1BUUigocHRyKSwgcGVyX2NwdV9vZmZzZXQoKGNwdSkpKQorCitleHRlcm4gdm9pZCAqX19hbGxvY19yZXNlcnZlZF9wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbik7CisKKyNlbHNlIC8qIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBICovCisKIHN0cnVjdCBwZXJjcHVfZGF0YSB7CiAJdm9pZCAqcHRyc1sxXTsKIH07CiAKICNkZWZpbmUgX19wZXJjcHVfZGlzZ3Vpc2UocGRhdGEpIChzdHJ1Y3QgcGVyY3B1X2RhdGEgKil+KHVuc2lnbmVkIGxvbmcpKHBkYXRhKQotLyogCi0gKiBVc2UgdGhpcyB0byBnZXQgdG8gYSBjcHUncyB2ZXJzaW9uIG9mIHRoZSBwZXItY3B1IG9iamVjdCBkeW5hbWljYWxseQotICogYWxsb2NhdGVkLiBOb24tYXRvbWljIGFjY2VzcyB0byB0aGUgY3VycmVudCBDUFUncyB2ZXJzaW9uIHNob3VsZAotICogcHJvYmFibHkgYmUgY29tYmluZWQgd2l0aCBnZXRfY3B1KCkvcHV0X2NwdSgpLgotICovIAotI2RlZmluZSBwZXJjcHVfcHRyKHB0ciwgY3B1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCBwZXJjcHVfZGF0YSAqX19wID0gX19wZXJjcHVfZGlzZ3Vpc2UocHRyKTsgXAotICAgICAgICAoX190eXBlb2ZfXyhwdHIpKV9fcC0+cHRyc1soY3B1KV07CSAgICAgICAgICBcCisKKyNkZWZpbmUgcGVyX2NwdV9wdHIocHRyLCBjcHUpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisgICAgICAgIHN0cnVjdCBwZXJjcHVfZGF0YSAqX19wID0gX19wZXJjcHVfZGlzZ3Vpc2UocHRyKTsJCVwKKyAgICAgICAgKF9fdHlwZW9mX18ocHRyKSlfX3AtPnB0cnNbKGNwdSldOwkJCQlcCiB9KQogCi1leHRlcm4gdm9pZCAqX19wZXJjcHVfYWxsb2NfbWFzayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBjcHVtYXNrX3QgKm1hc2spOwotZXh0ZXJuIHZvaWQgcGVyY3B1X2ZyZWUodm9pZCAqX19wZGF0YSk7CisjZW5kaWYgLyogQ09ORklHX0hBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEgKi8KKworZXh0ZXJuIHZvaWQgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworZXh0ZXJuIHZvaWQgZnJlZV9wZXJjcHUodm9pZCAqX19wZGF0YSk7CiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAotI2RlZmluZSBwZXJjcHVfcHRyKHB0ciwgY3B1KSAoeyAodm9pZCkoY3B1KTsgKHB0cik7IH0pCisjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KSAoeyAodm9pZCkoY3B1KTsgKHB0cik7IH0pCiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19wZXJjcHVfYWxsb2NfbWFzayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBjcHVtYXNrX3QgKm1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCiB7Ci0JcmV0dXJuIGt6YWxsb2Moc2l6ZSwgZ2ZwKTsKKwkvKgorCSAqIENhbid0IGVhc2lseSBtYWtlIGxhcmdlciBhbGlnbm1lbnQgd29yayB3aXRoIGttYWxsb2MuICBXQVJOCisJICogb24gaXQuICBMYXJnZXIgYWxpZ25tZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vZHVsZQorCSAqIHBlcmNwdSBzZWN0aW9ucyBvbiBTTVAgZm9yIHdoaWNoIHRoaXMgcGF0aCBpc24ndCB1c2VkLgorCSAqLworCVdBUk5fT05fT05DRShhbGlnbiA+IFNNUF9DQUNIRV9CWVRFUyk7CisJcmV0dXJuIGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZnJlZSh2b2lkICpfX3BkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKnApCiB7Ci0Ja2ZyZWUoX19wZGF0YSk7CisJa2ZyZWUocCk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNkZWZpbmUgcGVyY3B1X2FsbG9jX21hc2soc2l6ZSwgZ2ZwLCBtYXNrKSBcCi0JX19wZXJjcHVfYWxsb2NfbWFzaygoc2l6ZSksIChnZnApLCAmKG1hc2spKQotCi0jZGVmaW5lIHBlcmNwdV9hbGxvYyhzaXplLCBnZnApIHBlcmNwdV9hbGxvY19tYXNrKChzaXplKSwgKGdmcCksIGNwdV9vbmxpbmVfbWFwKQotCi0vKiAobGVnYWN5KSBpbnRlcmZhY2UgZm9yIHVzZSB3aXRob3V0IENQVSBob3RwbHVnIGhhbmRsaW5nICovCi0KLSNkZWZpbmUgX19hbGxvY19wZXJjcHUoc2l6ZSkJcGVyY3B1X2FsbG9jX21hc2soKHNpemUpLCBHRlBfS0VSTkVMLCBcCi0JCQkJCQkgIGNwdV9wb3NzaWJsZV9tYXApCi0jZGVmaW5lIGFsbG9jX3BlcmNwdSh0eXBlKQkodHlwZSAqKV9fYWxsb2NfcGVyY3B1KHNpemVvZih0eXBlKSkKLSNkZWZpbmUgZnJlZV9wZXJjcHUocHRyKQlwZXJjcHVfZnJlZSgocHRyKSkKLSNkZWZpbmUgcGVyX2NwdV9wdHIocHRyLCBjcHUpCXBlcmNwdV9wdHIoKHB0ciksIChjcHUpKQorI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkJKHR5cGUgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIFwKKwkJCQkJCSAgICAgICBfX2FsaWdub2ZfXyh0eXBlKSkKIAogI2VuZGlmIC8qIF9fTElOVVhfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKaW5kZXggMDFiMjYyOS4uMjI4YjBiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTEyLDE4NyArMTIsMTg3IEBACiAjZGVmaW5lIFBGS0VZVjJfUkVWSVNJT04JMTk5ODA2TAogCiBzdHJ1Y3Qgc2FkYl9tc2cgewotCXVpbnQ4X3QJCXNhZGJfbXNnX3ZlcnNpb247Ci0JdWludDhfdAkJc2FkYl9tc2dfdHlwZTsKLQl1aW50OF90CQlzYWRiX21zZ19lcnJubzsKLQl1aW50OF90CQlzYWRiX21zZ19zYXR5cGU7Ci0JdWludDE2X3QJc2FkYl9tc2dfbGVuOwotCXVpbnQxNl90CXNhZGJfbXNnX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfbXNnX3NlcTsKLQl1aW50MzJfdAlzYWRiX21zZ19waWQ7CisJX191OAkJc2FkYl9tc2dfdmVyc2lvbjsKKwlfX3U4CQlzYWRiX21zZ190eXBlOworCV9fdTgJCXNhZGJfbXNnX2Vycm5vOworCV9fdTgJCXNhZGJfbXNnX3NhdHlwZTsKKwlfX3UxNglzYWRiX21zZ19sZW47CisJX191MTYJc2FkYl9tc2dfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl9tc2dfc2VxOworCV9fdTMyCXNhZGJfbXNnX3BpZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9leHQgewotCXVpbnQxNl90CXNhZGJfZXh0X2xlbjsKLQl1aW50MTZfdAlzYWRiX2V4dF90eXBlOworCV9fdTE2CXNhZGJfZXh0X2xlbjsKKwlfX3UxNglzYWRiX2V4dF90eXBlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9leHQpID09IDQgKi8KIAogc3RydWN0IHNhZGJfc2EgewotCXVpbnQxNl90CXNhZGJfc2FfbGVuOwotCXVpbnQxNl90CXNhZGJfc2FfZXh0dHlwZTsKKwlfX3UxNglzYWRiX3NhX2xlbjsKKwlfX3UxNglzYWRiX3NhX2V4dHR5cGU7CiAJX19iZTMyCQlzYWRiX3NhX3NwaTsKLQl1aW50OF90CQlzYWRiX3NhX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3NhX3N0YXRlOwotCXVpbnQ4X3QJCXNhZGJfc2FfYXV0aDsKLQl1aW50OF90CQlzYWRiX3NhX2VuY3J5cHQ7Ci0JdWludDMyX3QJc2FkYl9zYV9mbGFnczsKKwlfX3U4CQlzYWRiX3NhX3JlcGxheTsKKwlfX3U4CQlzYWRiX3NhX3N0YXRlOworCV9fdTgJCXNhZGJfc2FfYXV0aDsKKwlfX3U4CQlzYWRiX3NhX2VuY3J5cHQ7CisJX191MzIJc2FkYl9zYV9mbGFnczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2EpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX2xpZmV0aW1lIHsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2xlbjsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9saWZldGltZV9hbGxvY2F0aW9uczsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfbGlmZXRpbWVfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX3VzZXRpbWU7CisJX191MTYJc2FkYl9saWZldGltZV9sZW47CisJX191MTYJc2FkYl9saWZldGltZV9leHR0eXBlOworCV9fdTMyCXNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7CisJX191NjQJc2FkYl9saWZldGltZV9ieXRlczsKKwlfX3U2NAlzYWRiX2xpZmV0aW1lX2FkZHRpbWU7CisJX191NjQJc2FkYl9saWZldGltZV91c2V0aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9saWZldGltZSkgPT0gMzIgKi8KIAogc3RydWN0IHNhZGJfYWRkcmVzcyB7Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX2FkZHJlc3NfcHJvdG87Ci0JdWludDhfdAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX2FkZHJlc3NfcHJvdG87CisJX191OAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2FkZHJlc3MpID09IDggKi8KIAogc3RydWN0IHNhZGJfa2V5IHsKLQl1aW50MTZfdAlzYWRiX2tleV9sZW47Ci0JdWludDE2X3QJc2FkYl9rZXlfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX2tleV9iaXRzOwotCXVpbnQxNl90CXNhZGJfa2V5X3Jlc2VydmVkOworCV9fdTE2CXNhZGJfa2V5X2xlbjsKKwlfX3UxNglzYWRiX2tleV9leHR0eXBlOworCV9fdTE2CXNhZGJfa2V5X2JpdHM7CisJX191MTYJc2FkYl9rZXlfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2tleSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl9pZGVudCB7Ci0JdWludDE2X3QJc2FkYl9pZGVudF9sZW47Ci0JdWludDE2X3QJc2FkYl9pZGVudF9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfaWRlbnRfdHlwZTsKLQl1aW50MTZfdAlzYWRiX2lkZW50X3Jlc2VydmVkOwotCXVpbnQ2NF90CXNhZGJfaWRlbnRfaWQ7CisJX191MTYJc2FkYl9pZGVudF9sZW47CisJX191MTYJc2FkYl9pZGVudF9leHR0eXBlOworCV9fdTE2CXNhZGJfaWRlbnRfdHlwZTsKKwlfX3UxNglzYWRiX2lkZW50X3Jlc2VydmVkOworCV9fdTY0CXNhZGJfaWRlbnRfaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2lkZW50KSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9zZW5zIHsKLQl1aW50MTZfdAlzYWRiX3NlbnNfbGVuOwotCXVpbnQxNl90CXNhZGJfc2Vuc19leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfc2Vuc19kcGQ7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGVuOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKLQl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGVuOwotCXVpbnQzMl90CXNhZGJfc2Vuc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3NlbnNfbGVuOworCV9fdTE2CXNhZGJfc2Vuc19leHR0eXBlOworCV9fdTMyCXNhZGJfc2Vuc19kcGQ7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGVuOworCV9fdTgJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKKwlfX3U4CQlzYWRiX3NlbnNfaW50ZWdfbGVuOworCV9fdTMyCXNhZGJfc2Vuc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2VucykgPT0gMTYgKi8KIAogLyogZm9sbG93ZWQgYnk6Ci0JdWludDY0X3QJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07Ci0JdWludDY0X3QJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCisJX191NjQJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07CisJX191NjQJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCiAKIHN0cnVjdCBzYWRiX3Byb3AgewotCXVpbnQxNl90CXNhZGJfcHJvcF9sZW47Ci0JdWludDE2X3QJc2FkYl9wcm9wX2V4dHR5cGU7Ci0JdWludDhfdAkJc2FkYl9wcm9wX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl9wcm9wX2xlbjsKKwlfX3UxNglzYWRiX3Byb3BfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVwbGF5OworCV9fdTgJCXNhZGJfcHJvcF9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9jb21iIHNhZGJfY29tYnNbKHNhZGJfcHJvcF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCisJCXNpemVvZihfX3U2NCkgLSBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkpIC8KIAkJc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpXTsgKi8KIAogc3RydWN0IHNhZGJfY29tYiB7Ci0JdWludDhfdAkJc2FkYl9jb21iX2F1dGg7Ci0JdWludDhfdAkJc2FkYl9jb21iX2VuY3J5cHQ7Ci0JdWludDE2X3QJc2FkYl9jb21iX2ZsYWdzOwotCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7Ci0JdWludDE2X3QJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKLQl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7Ci0JdWludDMyX3QJc2FkYl9jb21iX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOwotCXVpbnQzMl90CXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CisJX191OAkJc2FkYl9jb21iX2F1dGg7CisJX191OAkJc2FkYl9jb21iX2VuY3J5cHQ7CisJX191MTYJc2FkYl9jb21iX2ZsYWdzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7CisJX191MTYJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7CisJX191MzIJc2FkYl9jb21iX3Jlc2VydmVkOworCV9fdTMyCXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOworCV9fdTMyCXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpID09IDcyICovCiAKIHN0cnVjdCBzYWRiX3N1cHBvcnRlZCB7Ci0JdWludDE2X3QJc2FkYl9zdXBwb3J0ZWRfbGVuOwotCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9zdXBwb3J0ZWRfbGVuOworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7CisJX191MzIJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9hbGcgc2FkYl9hbGdzWyhzYWRiX3N1cHBvcnRlZF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkpIC8KKwkJc2l6ZW9mKF9fdTY0KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpXTsgKi8KIAogc3RydWN0IHNhZGJfYWxnIHsKLQl1aW50OF90CQlzYWRiX2FsZ19pZDsKLQl1aW50OF90CQlzYWRiX2FsZ19pdmxlbjsKLQl1aW50MTZfdAlzYWRiX2FsZ19taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfYWxnX21heGJpdHM7Ci0JdWludDE2X3QJc2FkYl9hbGdfcmVzZXJ2ZWQ7CisJX191OAkJc2FkYl9hbGdfaWQ7CisJX191OAkJc2FkYl9hbGdfaXZsZW47CisJX191MTYJc2FkYl9hbGdfbWluYml0czsKKwlfX3UxNglzYWRiX2FsZ19tYXhiaXRzOworCV9fdTE2CXNhZGJfYWxnX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpID09IDggKi8KIAogc3RydWN0IHNhZGJfc3BpcmFuZ2UgewotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfbGVuOwotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21pbjsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21heDsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfbGVuOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21pbjsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21heDsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9rbXByaXZhdGUgewotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfbGVuOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl94X3NhMiB7Ci0JdWludDE2X3QJc2FkYl94X3NhMl9sZW47Ci0JdWludDE2X3QJc2FkYl94X3NhMl9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9zYTJfbW9kZTsKLQl1aW50OF90CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKLQl1aW50MTZfdAlzYWRiX3hfc2EyX3Jlc2VydmVkMjsKLQl1aW50MzJfdAlzYWRiX3hfc2EyX3NlcXVlbmNlOwotCXVpbnQzMl90CXNhZGJfeF9zYTJfcmVxaWQ7CisJX191MTYJc2FkYl94X3NhMl9sZW47CisJX191MTYJc2FkYl94X3NhMl9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9zYTJfbW9kZTsKKwlfX3U4CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKwlfX3UxNglzYWRiX3hfc2EyX3Jlc2VydmVkMjsKKwlfX3UzMglzYWRiX3hfc2EyX3NlcXVlbmNlOworCV9fdTMyCXNhZGJfeF9zYTJfcmVxaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2EyKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl94X3BvbGljeSB7Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9sZW47Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfdHlwZTsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X2RpcjsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfaWQ7Ci0JdWludDMyX3QJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2xlbjsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2V4dHR5cGU7CisJX191MTYJc2FkYl94X3BvbGljeV90eXBlOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfZGlyOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9pZDsKKwlfX3UzMglzYWRiX3hfcG9saWN5X3ByaW9yaXR5OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3BvbGljeSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgewotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87Ci0JdWludDhfdAkJc2FkYl94X2lwc2VjcmVxdWVzdF9tb2RlOwotCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbGV2ZWw7Ci0JdWludDE2X3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDE7Ci0JdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZDsKLQl1aW50MzJfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOworCV9fdTgJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKKwlfX3U4CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOworCV9fdTE2CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOworCV9fdTMyCXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7CisJX191MzIJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KSA9PSAxNiAqLwogCkBAIC0yMDAsMzggKzIwMCwzOCBAQAogICogdHlwZSBvZiBOQVQtVCBpcyBzdXBwb3J0ZWQsIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNgogICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7Ci0JdWludDhfdAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl94X25hdF90X3R5cGVfbGVuOworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2V4dHR5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfdHlwZTsKKwlfX3U4CQlzYWRiX3hfbmF0X3RfdHlwZV9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlKSA9PSA4ICovCiAKIC8qIFBhc3MgYSBOQVQgVHJhdmVyc2FsIHBvcnQgKFNvdXJjZSBvciBEZXN0IHBvcnQpICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3BvcnQgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOworCV9fdTE2CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOwogCV9fYmUxNgkJc2FkYl94X25hdF90X3BvcnRfcG9ydDsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSA9PSA4ICovCiAKIC8qIEdlbmVyaWMgTFNNIHNlY3VyaXR5IGNvbnRleHQgKi8KIHN0cnVjdCBzYWRiX3hfc2VjX2N0eCB7Ci0JdWludDE2X3QJc2FkYl94X3NlY19sZW47Ci0JdWludDE2X3QJc2FkYl94X3NlY19leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCi0JdWludDhfdAkJc2FkYl94X2N0eF9kb2k7Ci0JdWludDE2X3QJc2FkYl94X2N0eF9sZW47CisJX191MTYJc2FkYl94X3NlY19sZW47CisJX191MTYJc2FkYl94X3NlY19leHR0eXBlOworCV9fdTgJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCisJX191OAkJc2FkYl94X2N0eF9kb2k7CisJX191MTYJc2FkYl94X2N0eF9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NlY19jdHgpID0gOCAqLwogCiAvKiBVc2VkIGJ5IE1JR1JBVEUgdG8gcGFzcyBhZGRyZXNzZXMgSUtFIHdpbGwgdXNlIHRvIHBlcmZvcm0KICAqIG5lZ290aWF0aW9uIHdpdGggdGhlIHBlZXIgKi8KIHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzIHsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7CisJX191MzIJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbWFkZHJlc3MpID09IDggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggZDdlNTRkOS4uMzJjZjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zMTUsOCArMzE1LDcgQEAKIAogCS8qIEludGVycnVwdCBhbmQgUG9sbGluZyBpbmZyYXN0cnVjdHVyZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwaHlfcXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHN0YXRlX3F1ZXVlOwotCXN0cnVjdCB0aW1lcl9saXN0IHBoeV90aW1lcjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRlX3F1ZXVlOwogCWF0b21pY190IGlycV9kaXNhYmxlOwogCiAJc3RydWN0IG11dGV4IGxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpbS5oIGIvaW5jbHVkZS9saW51eC9waW0uaAppbmRleCAxYmEwNjYxLi4yNTJiZjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGltLmgKQEAgLTQsMTQgKzQsMTQgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIE1lc3NhZ2UgdHlwZXMgLSBWMSAqLwotI2RlZmluZSBQSU1fVjFfVkVSU0lPTgkJX19jb25zdGFudF9odG9ubCgweDEwMDAwMDAwKQorI2RlZmluZSBQSU1fVjFfVkVSU0lPTgkJY3B1X3RvX2JlMzIoMHgxMDAwMDAwMCkKICNkZWZpbmUgUElNX1YxX1JFR0lTVEVSCQkxCiAKIC8qIE1lc3NhZ2UgdHlwZXMgLSBWMiAqLwogI2RlZmluZSBQSU1fVkVSU0lPTgkJMgogI2RlZmluZSBQSU1fUkVHSVNURVIJCTEKIAotI2RlZmluZSBQSU1fTlVMTF9SRUdJU1RFUglfX2NvbnN0YW50X2h0b25sKDB4NDAwMDAwMDApCisjZGVmaW5lIFBJTV9OVUxMX1JFR0lTVEVSCWNwdV90b19iZTMyKDB4NDAwMDAwMDApCiAKIC8qIFBJTXYyIHJlZ2lzdGVyIG1lc3NhZ2UgaGVhZGVyIGxheW91dCAoaWV0Zi1kcmFmdC1pZG1yLXBpbXZzbS12Mi0wMC5wcyAqLwogc3RydWN0IHBpbXJlZ2hkcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggOWEzNDI2OS4uNzZlNDcwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIF9QTEFURk9STV9ERVZJQ0VfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHsKIAljb25zdCBjaGFyCSogbmFtZTsKQEAgLTE5LDggKzIwLDEzIEBACiAJc3RydWN0IGRldmljZQlkZXY7CiAJdTMyCQludW1fcmVzb3VyY2VzOwogCXN0cnVjdCByZXNvdXJjZQkqIHJlc291cmNlOworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CiB9OwogCisjZGVmaW5lIHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldikJKChwZGV2KS0+aWRfZW50cnkpCisKICNkZWZpbmUgdG9fcGxhdGZvcm1fZGV2aWNlKHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldikKIAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKQEAgLTU2LDYgKzYyLDcgQEAKIAlpbnQgKCpyZXN1bWVfZWFybHkpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZF90YWJsZTsKIH07CiAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggODVkZTJmMC4uNDU5MjZkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtOTYsNiArOTYsMTAgQEAKICMgZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQogI2VuZGlmCiAKKyNkZWZpbmUgX1BMSVNUX0hFQURfSU5JVChoZWFkKQkJCQlcCisJLnByaW9fbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5wcmlvX2xpc3QpLAlcCisJLm5vZGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5ub2RlX2xpc3QpCisKIC8qKgogICogUExJU1RfSEVBRF9JTklUIC0gc3RhdGljIHN0cnVjdCBwbGlzdF9oZWFkIGluaXRpYWxpemVyCiAgKiBAaGVhZDoJc3RydWN0IHBsaXN0X2hlYWQgdmFyaWFibGUgbmFtZQpAQCAtMTAzLDggKzEwNyw3IEBACiAgKi8KICNkZWZpbmUgUExJU1RfSEVBRF9JTklUKGhlYWQsIF9sb2NrKQkJCVwKIHsJCQkJCQkJXAotCS5wcmlvX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkucHJpb19saXN0KSwJXAotCS5ub2RlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkubm9kZV9saXN0KSwJXAorICAgICAgICBfUExJU1RfSEVBRF9JTklUKGhlYWQpLCAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJUExJU1RfSEVBRF9MT0NLX0lOSVQoJihfbG9jaykpCQkJXAogfQogCkBAIC0xMTYsNyArMTE5LDcgQEAKICNkZWZpbmUgUExJU1RfTk9ERV9JTklUKG5vZGUsIF9fcHJpbykJCQlcCiB7CQkJCQkJCVwKIAkucHJpbyAgPSAoX19wcmlvKSwJCQkJXAotCS5wbGlzdCA9IFBMSVNUX0hFQURfSU5JVCgobm9kZSkucGxpc3QsIE5VTEwpLAlcCisJLnBsaXN0ID0geyBfUExJU1RfSEVBRF9JTklUKChub2RlKS5wbGlzdCkgfSwgCVwKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggMjRiYTVmNi4uMWQ0ZTJkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDAwLDYgKzQwMCw5IEBACiAKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorI2RlZmluZSBkZXZpY2VfcG1fbG9jaygpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkZXZpY2VfcG1fdW5sb2NrKCkgZG8ge30gd2hpbGUgKDApCisKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQwOSw2ICs0MTIsMTQgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorLyogSG93IHRvIHJlb3JkZXIgZHBtX2xpc3QgYWZ0ZXIgZGV2aWNlX21vdmUoKSAqLworZW51bSBkcG1fb3JkZXIgeworCURQTV9PUkRFUl9OT05FLAorCURQTV9PUkRFUl9ERVZfQUZURVJfUEFSRU5ULAorCURQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFViwKKwlEUE1fT1JERVJfREVWX0xBU1QsCit9OworCiAvKgogICogR2xvYmFsIFBvd2VyIE1hbmFnZW1lbnQgZmxhZ3MKICAqIFVzZWQgdG8ga2VlcCBBUE0gYW5kIEFDUEkgZnJvbSBib3RoIGJlaW5nIGFjdGl2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IGE5NDI4OTIuLjBkM2ZhNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKIHN0cnVjdCBwcHBfY2hhbm5lbDsKIApAQCAtMzksOCArNDAsOCBAQAogCWludAkJbXR1OwkJLyogbWF4IHRyYW5zbWl0IHBhY2tldCBzaXplICovCiAJaW50CQloZHJsZW47CQkvKiBhbW91bnQgb2YgaGVhZHJvb20gY2hhbm5lbCBuZWVkcyAqLwogCXZvaWQJCSpwcHA7CQkvKiBvcGFxdWUgdG8gY2hhbm5lbCAqLwotCS8qIHRoZSBmb2xsb3dpbmcgYXJlIG5vdCB1c2VkIGF0IHByZXNlbnQgKi8KIAlpbnQJCXNwZWVkOwkJLyogdHJhbnNmZXIgcmF0ZSAoYnl0ZXMvc2Vjb25kKSAqLworCS8qIHRoZSBmb2xsb3dpbmcgaXMgbm90IHVzZWQgYXQgcHJlc2VudCAqLwogCWludAkJbGF0ZW5jeTsJLyogb3ZlcmhlYWQgdGltZSBpbiBtaWxsaXNlY29uZHMgKi8KIH07CiAKQEAgLTU2LDYgKzU3LDkgQEAKICAgIHRoYXQgd2UgbWF5IGhhdmUgbWlzc2VkIGEgcGFja2V0LiAqLwogZXh0ZXJuIHZvaWQgcHBwX2lucHV0X2Vycm9yKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBpbnQgY29kZSk7CiAKKy8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdCBpbiBzcGVjaWZpZWQgbmV0LiAqLworZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7CisKIC8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdC4gKi8KIGV4dGVybiBpbnQgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKaW5kZXggMWM4NjZiZC4uMGY5M2VkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaApAQCAtMTc3LDggKzE3Nyw4IEBACiAgKiB0aGUgbGFzdCBOUCBwYWNrZXQgd2FzIHNlbnQgb3IgcmVjZWl2ZWQuCiAgKi8KIHN0cnVjdCBwcHBfaWRsZSB7Ci0gICAgdGltZV90IHhtaXRfaWRsZTsJCS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgc2VudCAqLwotICAgIHRpbWVfdCByZWN2X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHJlY2VpdmVkICovCisgICAgX19rZXJuZWxfdGltZV90IHhtaXRfaWRsZTsJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCBzZW50ICovCisgICAgX19rZXJuZWxfdGltZV90IHJlY3ZfaWRsZTsJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCByZWNlaXZlZCAqLwogfTsKIAogI2VuZGlmIC8qIF9QUFBfREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IGQ3MmQ1ZDguLjc4YzQ4ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTE5OCw2ICsxOTgsNyBAQAogCXFzaXplX3QgZHFiX2JoYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgYmxrcyBhbGxvYyAqLwogCXFzaXplX3QgZHFiX2Jzb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBsaW1pdCBvbiBkaXNrIGJsa3MgKi8KIAlxc2l6ZV90IGRxYl9jdXJzcGFjZTsJLyogY3VycmVudCB1c2VkIHNwYWNlICovCisJcXNpemVfdCBkcWJfcnN2c3BhY2U7ICAgLyogY3VycmVudCByZXNlcnZlZCBzcGFjZSBmb3IgZGVsYWxsb2MqLwogCXFzaXplX3QgZHFiX2loYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGFsbG9jYXRlZCBpbm9kZXMgKi8KIAlxc2l6ZV90IGRxYl9pc29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgaW5vZGUgbGltaXQgKi8KIAlxc2l6ZV90IGRxYl9jdXJpbm9kZXM7CS8qIGN1cnJlbnQgIyBhbGxvY2F0ZWQgaW5vZGVzICovCkBAIC0yNzYsOCArMjc3LDYgQEAKIAlzdHJ1Y3QgbWVtX2RxYmxrIGRxX2RxYjsJLyogRGlza3F1b3RhIHVzYWdlICovCiB9OwogCi0jZGVmaW5lIE5PRFFVT1QgKHN0cnVjdCBkcXVvdCAqKU5VTEwKLQogI2RlZmluZSBRVU9UQV9PSyAgICAgICAgICAwCiAjZGVmaW5lIE5PX1FVT1RBICAgICAgICAgIDEKIApAQCAtMzA4LDYgKzMwNywxNCBAQAogCWludCAoKnJlbGVhc2VfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CQkvKiBRdW90YSBpcyBnb2luZyB0byBiZSBkZWxldGVkIGZyb20gZGlzayAqLwogCWludCAoKm1hcmtfZGlydHkpIChzdHJ1Y3QgZHF1b3QgKik7CQkvKiBEcXVvdCBpcyBtYXJrZWQgZGlydHkgKi8KIAlpbnQgKCp3cml0ZV9pbmZvKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CS8qIFdyaXRlIG9mIHF1b3RhICJzdXBlcmJsb2NrIiAqLworCS8qIHJlc2VydmUgcXVvdGEgZm9yIGRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiAqLworCWludCAoKnJlc2VydmVfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCwgaW50KTsKKwkvKiBjbGFpbSByZXNlcnZlZCBxdW90YSBmb3IgZGVsYXllZCBhbGxvYyAqLworCWludCAoKmNsYWltX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOworCS8qIHJlbGVhc2UgcnN2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KKwl2b2lkICgqcmVsZWFzZV9yc3YpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7CisJLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCisJcXNpemVfdCAoKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaCBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAppbmRleCAwYjM1YjNhLi4zNjM1M2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCkBAIC0zNSw2ICszNSwxMSBAQAogaW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgcHJlYWxsb2MpOwogaW50IGRxdW90X2FsbG9jX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKIAoraW50IGRxdW90X3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCBwcmVhbGxvYyk7CitpbnQgZHF1b3RfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKK3FzaXplX3QgZHF1b3RfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCiBpbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7CiBpbnQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7CiAKQEAgLTE4Myw2ICsxODgsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgeworCQkvKiBVc2VkIHNwYWNlIGlzIHVwZGF0ZWQgaW4gYWxsb2Nfc3BhY2UoKSAqLworCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5yZXNlcnZlX3NwYWNlKGlub2RlLCBuciwgMCkgPT0gTk9fUVVPVEEpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgewpAQCAtMTkzLDYgKzIwOCwzMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQ29udmVydCBpbi1tZW1vcnkgcmVzZXJ2ZWQgcXVvdGFzIHRvIHJlYWwgY29uc3VtZWQgcXVvdGFzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9jbGFpbV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgeworCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5jbGFpbV9zcGFjZShpbm9kZSwgbnIpID09IE5PX1FVT1RBKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlCisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOworCisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc2VydmVkIChpbi1tZW1vcnkpIHF1b3RhcworICovCitzdGF0aWMgaW5saW5lCit2b2lkIHZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKQorCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPnJlbGVhc2VfcnN2KGlub2RlLCBucik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7CiAJaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKQpAQCAtMzM5LDYgKzM3OSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlyZXR1cm4gdmZzX2RxX2FsbG9jX3NwYWNlKGlub2RlLCBucik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCB2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewogCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnIpOwpAQCAtMzU0LDY3ICs0MTAsNDggQEAKIAogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3ByZWFsbG9jX2Jsb2NrX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQlyZXR1cm4gdmZzX2RxX3ByZWFsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsCi0JCQluciA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CisJcmV0dXJuIHZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3ByZWFsbG9jX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JcmV0dXJuIHZmc19kcV9wcmVhbGxvY19zcGFjZShpbm9kZSwKLQkJCW5yIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlyZXR1cm4gdmZzX2RxX3ByZWFsbG9jX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2FsbG9jX2Jsb2NrX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLSAJcmV0dXJuIHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAotCQkJbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9hbGxvY19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2UoaW5vZGUsCi0JCQluciA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CisJcmV0dXJuIHZmc19kcV9hbGxvY19zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9yZXNlcnZlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJcmV0dXJuIHZmc19kcV9yZXNlcnZlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2NsYWltX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJcmV0dXJuIHZmc19kcV9jbGFpbV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQl2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXZmc19kcV9mcmVlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAotLyoKLSAqIERlZmluZSB1cHBlcmNhc2UgZXF1aXZhbGVudHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZnVuY3Rpb24gbmFtZXMKLSAqIENhbiBnbyBhd2F5IHdoZW4gd2UgdGhpbmsgYWxsIHVzZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgKDE1LzA0LzIwMDgpCi0gKi8KLSNkZWZpbmUgRFFVT1RfSU5JVChpbm9kZSkgdmZzX2RxX2luaXQoaW5vZGUpCi0jZGVmaW5lIERRVU9UX0RST1AoaW5vZGUpIHZmc19kcV9kcm9wKGlub2RlKQotI2RlZmluZSBEUVVPVF9QUkVBTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfU1BBQ0UoaW5vZGUsIG5yKSB2ZnNfZHFfcHJlYWxsb2Nfc3BhY2UoaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9BTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfU1BBQ0UoaW5vZGUsIG5yKSB2ZnNfZHFfYWxsb2Nfc3BhY2UoaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9QUkVBTExPQ19CTE9DS19OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9wcmVhbGxvY19ibG9ja19ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfQkxPQ0soaW5vZGUsIG5yKSB2ZnNfZHFfcHJlYWxsb2NfYmxvY2soaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9BTExPQ19CTE9DS19OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9hbGxvY19ibG9ja19ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIG5yKSB2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkgdmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKQotI2RlZmluZSBEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsIG5yKSBcCi0JCQkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0ZSRUVfU1BBQ0UoaW5vZGUsIG5yKSB2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0ZSRUVfQkxPQ0tfTk9ESVJUWShpbm9kZSwgbnIpIFwKLQkJCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgbnIpIHZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfRlJFRV9JTk9ERShpbm9kZSkgdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpCi0jZGVmaW5lIERRVU9UX1RSQU5TRkVSKGlub2RlLCBpYXR0cikgdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBpYXR0cikKLSNkZWZpbmUgRFFVT1RfU1lOQyhzYikgdmZzX2RxX3N5bmMoc2IpCi0jZGVmaW5lIERRVU9UX09GRihzYiwgcmVtb3VudCkgdmZzX2RxX29mZihzYiwgcmVtb3VudCkKLSNkZWZpbmUgRFFVT1RfT05fUkVNT1VOVChzYikgdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc2IpCi0KICNlbmRpZiAvKiBfTElOVVhfUVVPVEFPUFNfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jkcy5oIGIvaW5jbHVkZS9saW51eC9yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFkYzkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZHMuaApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1JEU19ICisjZGVmaW5lIF9MSU5VWF9SRFNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogVGhlc2Ugc3BhcnNlIGFubm90YXRlZCB0eXBlcyBzaG91bGRuJ3QgYmUgaW4gYW55IHVzZXIKKyAqIHZpc2libGUgaGVhZGVyIGZpbGUuIFdlIHNob3VsZCBjbGVhbiB0aGlzIHVwIHJhdGhlcgorICogdGhhbiBrbHVkZ2luZyBhcm91bmQgdGhlbS4gKi8KKyNpZm5kZWYgX19LRVJORUxfXworI2RlZmluZSBfX2JlMTYJdV9pbnQxNl90CisjZGVmaW5lIF9fYmUzMgl1X2ludDMyX3QKKyNkZWZpbmUgX19iZTY0CXVfaW50NjRfdAorI2VuZGlmCisKKyNkZWZpbmUgUkRTX0lCX0FCSV9WRVJTSU9OCQkweDMwMQorCisvKgorICogc2V0c29ja29wdC9nZXRzb2Nrb3B0IGZvciBTT0xfUkRTCisgKi8KKyNkZWZpbmUgUkRTX0NBTkNFTF9TRU5UX1RPICAgICAgCTEKKyNkZWZpbmUgUkRTX0dFVF9NUgkJCTIKKyNkZWZpbmUgUkRTX0ZSRUVfTVIJCQkzCisvKiBkZXByZWNhdGVkOiBSRFNfQkFSUklFUiA0ICovCisjZGVmaW5lIFJEU19SRUNWRVJSCQkJNQorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SCQk2CisKKy8qCisgKiBDb250cm9sIG1lc3NhZ2UgdHlwZXMgZm9yIFNPTF9SRFMuCisgKgorICogQ01TR19SRE1BX0FSR1MgKHNlbmRtc2cpCisgKglSZXF1ZXN0IGEgUkRNQSB0cmFuc2ZlciB0by9mcm9tIHRoZSBzcGVjaWZpZWQKKyAqCW1lbW9yeSByYW5nZXMuCisgKglUaGUgY21zZ19kYXRhIGlzIGEgc3RydWN0IHJkc19yZG1hX2FyZ3MuCisgKiBSRFNfQ01TR19SRE1BX0RFU1QgKHJlY3Ztc2csIHNlbmRtc2cpCisgKglLZXJuZWwgaW5mb3JtcyBhcHBsaWNhdGlvbiBhYm91dCBpbnRlbmRlZAorICoJc291cmNlL2Rlc3RpbmF0aW9uIG9mIGEgUkRNQSB0cmFuc2ZlcgorICogUkRTX0NNU0dfUkRNQV9NQVAgKHNlbmRtc2cpCisgKglBcHBsaWNhdGlvbiBhc2tzIGtlcm5lbCB0byBtYXAgdGhlIGdpdmVuCisgKgltZW1vcnkgcmFuZ2UgaW50byBhIElCIE1SLCBhbmQgc2VuZCB0aGUKKyAqCVJfS2V5IGFsb25nIGluIGFuIFJEUyBleHRlbnNpb24gaGVhZGVyLgorICoJVGhlIGNtc2dfZGF0YSBpcyBhIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MsCisgKgl0aGUgc2FtZSBhcyBmb3IgdGhlIEdFVF9NUiBzZXRzb2Nrb3B0LgorICogUkRTX0NNU0dfUkRNQV9TVEFUVVMgKHJlY3Ztc2cpCisgKglSZXR1cm5zIHRoZSBzdGF0dXMgb2YgYSBjb21wbGV0ZWQgUkRNQSBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9BUkdTCQkxCisjZGVmaW5lIFJEU19DTVNHX1JETUFfREVTVAkJMgorI2RlZmluZSBSRFNfQ01TR19SRE1BX01BUAkJMworI2RlZmluZSBSRFNfQ01TR19SRE1BX1NUQVRVUwkJNAorI2RlZmluZSBSRFNfQ01TR19DT05HX1VQREFURQkJNQorCisjZGVmaW5lIFJEU19JTkZPX0ZJUlNUCQkJMTAwMDAKKyNkZWZpbmUgUkRTX0lORk9fQ09VTlRFUlMJCTEwMDAwCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05TCQkxMDAwMQorLyogMTAwMDIgYWthIFJEU19JTkZPX0ZMT1dTIGlzIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgUkRTX0lORk9fU0VORF9NRVNTQUdFUwkJMTAwMDMKKyNkZWZpbmUgUkRTX0lORk9fUkVUUkFOU19NRVNTQUdFUyAgICAgICAxMDAwNAorI2RlZmluZSBSRFNfSU5GT19SRUNWX01FU1NBR0VTICAgICAgICAgIDEwMDA1CisjZGVmaW5lIFJEU19JTkZPX1NPQ0tFVFMgICAgICAgICAgICAgICAgMTAwMDYKKyNkZWZpbmUgUkRTX0lORk9fVENQX1NPQ0tFVFMgICAgICAgICAgICAxMDAwNworI2RlZmluZSBSRFNfSU5GT19JQl9DT05ORUNUSU9OUwkJMTAwMDgKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9TVEFUUwkxMDAwOQorI2RlZmluZSBSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUwkxMDAxMAorI2RlZmluZSBSRFNfSU5GT19MQVNUCQkJMTAwMTAKKworc3RydWN0IHJkc19pbmZvX2NvdW50ZXIgeworCXVfaW50OF90CW5hbWVbMzJdOworCXVfaW50NjRfdAl2YWx1ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX1NFTkRJTkcJMHgwMQorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfQ09OTkVDVElORwkweDAyCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19DT05ORUNURUQJMHgwNAorCisjZGVmaW5lIFRSQU5TTkFNU0laCTE2CisKK3N0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uIHsKKwl1X2ludDY0X3QJbmV4dF90eF9zZXE7CisJdV9pbnQ2NF90CW5leHRfcnhfc2VxOworCV9fYmUzMgkJbGFkZHI7CisJX19iZTMyCQlmYWRkcjsKKwl1X2ludDhfdAl0cmFuc3BvcnRbVFJBTlNOQU1TSVpdOwkJLyogbnVsbCB0ZXJtIGFzY2lpICovCisJdV9pbnQ4X3QJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcmRzX2luZm9fZmxvdyB7CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCXVfaW50MzJfdAlieXRlczsKKwlfX2JlMTYJCWxwb3J0OworCV9fYmUxNgkJZnBvcnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFJEU19JTkZPX01FU1NBR0VfRkxBR19BQ0sgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJEU19JTkZPX01FU1NBR0VfRkxBR19GQVNUX0FDSyAgICAgICAgICAweDAyCisKK3N0cnVjdCByZHNfaW5mb19tZXNzYWdlIHsKKwl1X2ludDY0X3QJc2VxOworCXVfaW50MzJfdAlsZW47CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCV9fYmUxNgkJbHBvcnQ7CisJX19iZTE2CQlmcG9ydDsKKwl1X2ludDhfdAlmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCByZHNfaW5mb19zb2NrZXQgeworCXVfaW50MzJfdAlzbmRidWY7CisJX19iZTMyCQlib3VuZF9hZGRyOworCV9fYmUzMgkJY29ubmVjdGVkX2FkZHI7CisJX19iZTE2CQlib3VuZF9wb3J0OworCV9fYmUxNgkJY29ubmVjdGVkX3BvcnQ7CisJdV9pbnQzMl90CXJjdmJ1ZjsKKwl1X2ludDY0X3QJaW51bTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lCX0dJRF9MRU4JMTYKK3N0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24geworCV9fYmUzMgkJc3JjX2FkZHI7CisJX19iZTMyCQlkc3RfYWRkcjsKKwl1aW50OF90CQlzcmNfZ2lkW1JEU19JQl9HSURfTEVOXTsKKwl1aW50OF90CQlkc3RfZ2lkW1JEU19JQl9HSURfTEVOXTsKKworCXVpbnQzMl90CW1heF9zZW5kX3dyOworCXVpbnQzMl90CW1heF9yZWN2X3dyOworCXVpbnQzMl90CW1heF9zZW5kX3NnZTsKKwl1aW50MzJfdAlyZG1hX21yX21heDsKKwl1aW50MzJfdAlyZG1hX21yX3NpemU7Cit9OworCisvKgorICogQ29uZ2VzdGlvbiBtb25pdG9yaW5nLgorICogQ29uZ2VzdGlvbiBjb250cm9sIGluIFJEUyBoYXBwZW5zIGF0IHRoZSBob3N0IGNvbm5lY3Rpb24KKyAqIGxldmVsIGJ5IGV4Y2hhbmdpbmcgYSBiaXRtYXAgbWFya2luZyBjb25nZXN0ZWQgcG9ydHMuCisgKiBCeSBkZWZhdWx0LCBhIHByb2Nlc3Mgc2xlZXBpbmcgaW4gcG9sbCgpIGlzIGFsd2F5cyB3b2tlbgorICogdXAgd2hlbiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgdXBkYXRlZC4KKyAqIFdpdGggZXhwbGljaXQgbW9uaXRvcmluZywgYW4gYXBwbGljYXRpb24gY2FuIGhhdmUgbW9yZQorICogZmluZS1ncmFpbmVkIGNvbnRyb2wuCisgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFsbHMgYSA2NGJpdCBtYXNrIHZhbHVlIGluIHRoZSBzb2NrZXQsCisgKiB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGdyb3VwIG9mIHBvcnRzLgorICogV2hlbiBhIGNvbmdlc3Rpb24gdXBkYXRlIGFycml2ZXMsIFJEUyBjaGVja3MgdGhlIHNldCBvZgorICogcG9ydHMgdGhhdCBhcmUgbm93IHVuY29uZ2VzdGVkIGFnYWluc3QgdGhlIGxpc3QgYml0IG1hc2sKKyAqIGluc3RhbGxlZCBpbiB0aGUgc29ja2V0LCBhbmQgaWYgdGhleSBvdmVybGFwLCB3ZSBxdWV1ZSBhCisgKiBjb25nX25vdGlmaWNhdGlvbiBvbiB0aGUgc29ja2V0LgorICoKKyAqIFRvIGluc3RhbGwgdGhlIGNvbmdlc3Rpb24gbW9uaXRvciBiaXRtYXNrLCB1c2UgUkRTX0NPTkdfTU9OSVRPUgorICogd2l0aCB0aGUgNjRiaXQgbWFzay4KKyAqIENvbmdlc3Rpb24gdXBkYXRlcyBhcmUgcmVjZWl2ZWQgdmlhIFJEU19DTVNHX0NPTkdfVVBEQVRFCisgKiBjb250cm9sIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGJpdHMgYW5kIHBvcnRzIGlzCisgKgkxIDw8IChwb3J0bnVtICUgNjQpCisgKi8KKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9TSVpFCTY0CisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfQklUKHBvcnQpICAoKCh1bnNpZ25lZCBpbnQpIHBvcnQpICUgUkRTX0NPTkdfTU9OSVRPUl9TSVpFKQorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX01BU0socG9ydCkgKDFVTEwgPDwgUkRTX0NPTkdfTU9OSVRPUl9CSVQocG9ydCkpCisKKy8qCisgKiBSRE1BIHJlbGF0ZWQgdHlwZXMKKyAqLworCisvKgorICogVGhpcyBlbmNhcHN1bGF0ZXMgYSByZW1vdGUgbWVtb3J5IGxvY2F0aW9uLgorICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGl0IGNvbnRhaW5zIHRoZSBSX0tleQorICogb2YgdGhlIHJlbW90ZSBtZW1vcnkgcmVnaW9uLCBhbmQgdGhlIG9mZnNldCBpbnRvIGl0CisgKiAoc28gdGhhdCB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICogYWxpZ25tZW50KS4KKyAqLwordHlwZWRlZiB1X2ludDY0X3QJcmRzX3JkbWFfY29va2llX3Q7CisKK3N0cnVjdCByZHNfaW92ZWMgeworCXVfaW50NjRfdAlhZGRyOworCXVfaW50NjRfdAlieXRlczsKK307CisKK3N0cnVjdCByZHNfZ2V0X21yX2FyZ3MgeworCXN0cnVjdCByZHNfaW92ZWMgdmVjOworCXVfaW50NjRfdAljb29raWVfYWRkcjsKKwl1aW50NjRfdAlmbGFnczsKK307CisKK3N0cnVjdCByZHNfZnJlZV9tcl9hcmdzIHsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJdV9pbnQ2NF90CWZsYWdzOworfTsKKworc3RydWN0IHJkc19yZG1hX2FyZ3MgeworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzdHJ1Y3QgcmRzX2lvdmVjIHJlbW90ZV92ZWM7CisJdV9pbnQ2NF90CWxvY2FsX3ZlY19hZGRyOworCXVfaW50NjRfdAlucl9sb2NhbDsKKwl1X2ludDY0X3QJZmxhZ3M7CisJdV9pbnQ2NF90CXVzZXJfdG9rZW47Cit9OworCitzdHJ1Y3QgcmRzX3JkbWFfbm90aWZ5IHsKKwl1X2ludDY0X3QJdXNlcl90b2tlbjsKKwlpbnQzMl90CQlzdGF0dXM7Cit9OworCisjZGVmaW5lIFJEU19SRE1BX1NVQ0NFU1MJMAorI2RlZmluZSBSRFNfUkRNQV9SRU1PVEVfRVJST1IJMQorI2RlZmluZSBSRFNfUkRNQV9DQU5DRUxFRAkyCisjZGVmaW5lIFJEU19SRE1BX0RST1BQRUQJMworI2RlZmluZSBSRFNfUkRNQV9PVEhFUl9FUlJPUgk0CisKKy8qCisgKiBDb21tb24gc2V0IG9mIGZsYWdzIGZvciBhbGwgUkRNQSByZWxhdGVkIHN0cnVjdHMKKyAqLworI2RlZmluZSBSRFNfUkRNQV9SRUFEV1JJVEUJMHgwMDAxCisjZGVmaW5lIFJEU19SRE1BX0ZFTkNFCQkweDAwMDIJLyogdXNlIEZFTkNFIGZvciBpbW1lZGlhdGUgc2VuZCAqLworI2RlZmluZSBSRFNfUkRNQV9JTlZBTElEQVRFCTB4MDAwNAkvKiBpbnZhbGlkYXRlIFJfS2V5IGFmdGVyIGZyZWVpbmcgTVIgKi8KKyNkZWZpbmUgUkRTX1JETUFfVVNFX09OQ0UJMHgwMDA4CS8qIGZyZWUgTVIgYWZ0ZXIgdXNlICovCisjZGVmaW5lIFJEU19SRE1BX0RPTlRXQUlUCTB4MDAxMAkvKiBEb24ndCB3YWl0IGluIFNFVF9CQVJSSUVSICovCisjZGVmaW5lIFJEU19SRE1BX05PVElGWV9NRQkweDAwMjAJLyogTm90aWZ5IHdoZW4gb3BlcmF0aW9uIGNvbXBsZXRlcyAqLworCisjZW5kaWYgLyogSUJfUkRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBiYzUxMTRkLi5lMzU2Yzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnNfc2IuaD4KICNlbmRpZgogCi1zdHJ1Y3QgZmlkOwotCiAvKgogICogIGluY2x1ZGUvbGludXgvcmVpc2VyX2ZzLmgKICAqCkBAIC0zNyw2ICszNSwzMyBAQAogICoKICAqLwogCisvKiBpb2N0bCdzIGNvbW1hbmQgKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1VOUEFDSwkJX0lPVygweENELDEsbG9uZykKKy8qIGRlZmluZSBmb2xsb3dpbmcgZmxhZ3MgdG8gYmUgdGhlIHNhbWUgYXMgaW4gZXh0Miwgc28gdGhhdCBjaGF0dHIoMSksCisgICBsc2F0dHIoMSkgd2lsbCB3b3JrIHdpdGggdXMuICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRGTEFHUwkJRlNfSU9DX0dFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRGTEFHUwkJRlNfSU9DX1NFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRWRVJTSU9OCQlGU19JT0NfR0VUVkVSU0lPTgorI2RlZmluZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTgkJRlNfSU9DX1NFVFZFUlNJT04KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIHRoZSAzMiBiaXQgY29tcGF0IGRlZmluaXRpb25zIHdpdGggaW50IGFyZ3VtZW50ICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1VOUEFDSwkJX0lPVygweENELCAxLCBpbnQpCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVEZMQUdTCQlGU19JT0MzMl9HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRGTEFHUwkJRlNfSU9DMzJfU0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VUVkVSU0lPTglGU19JT0MzMl9HRVRWRVJTSU9OCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVFZFUlNJT04JRlNfSU9DMzJfU0VUVkVSU0lPTgorCisvKiBMb2NraW5nIHByaW1pdGl2ZXMgKi8KKy8qIFJpZ2h0IG5vdyB3ZSBhcmUgc3RpbGwgZmFsbGluZyBiYWNrIHRvICh1bilsb2NrX2tlcm5lbCwgYnV0IGV2ZW50dWFsbHkgdGhhdAorICAgd291bGQgZXZvbHZlIGludG8gcmVhbCBwZXItZnMgbG9ja3MgKi8KKyNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9jayggc2IgKSBsb2NrX2tlcm5lbCgpCisjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9jayggc2IgKSB1bmxvY2tfa2VybmVsKCkKKworLyogeGF0dHIgc3R1ZmYgKi8KKyNkZWZpbmUgUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzKSAoUkVJU0VSRlNfU0IocyktPnhhdHRyX2Rpcl9zZW0pCitzdHJ1Y3QgZmlkOworCiAvKiBpbiByZWFkaW5nIHRoZSAjZGVmaW5lcywgaXQgbWF5IGhlbHAgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZXkgZW1wbG95CiAgICB0aGUgZm9sbG93aW5nIGFiYnJldmlhdGlvbnM6CiAKQEAgLTY5OCw2ICs3MjMsNyBAQAogLyogb2JqZWN0IGlkZW50aWZpZXIgZm9yIHJvb3QgZGlyICovCiAjZGVmaW5lIFJFSVNFUkZTX1JPT1RfT0JKRUNUSUQgMgogI2RlZmluZSBSRUlTRVJGU19ST09UX1BBUkVOVF9PQkpFQ1RJRCAxCisKIGV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfa2V5IHJvb3Rfa2V5OwogCiAvKiAKQEAgLTE1NDAsNyArMTU2Niw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyojaWZkZWYgX19LRVJORUxfXyovCiAjZGVmaW5lIGdldF9qb3VybmFsX2Rlc2NfbWFnaWMoYmgpIChiaC0+Yl9kYXRhICsgYmgtPmJfc2l6ZSAtIDEyKQogCiAjZGVmaW5lIGpvdXJuYWxfdHJhbnNfaGFsZihibG9ja3NpemUpIFwKQEAgLTIxNzgsMjkgKzIyMDMsNiBAQAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgcmVpc2VyZnNfdW5wYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotLyogaW9jdGwncyBjb21tYW5kICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19VTlBBQ0sJCV9JT1coMHhDRCwxLGxvbmcpCi0vKiBkZWZpbmUgZm9sbG93aW5nIGZsYWdzIHRvIGJlIHRoZSBzYW1lIGFzIGluIGV4dDIsIHNvIHRoYXQgY2hhdHRyKDEpLAotICAgbHNhdHRyKDEpIHdpbGwgd29yayB3aXRoIHVzLiAqLwotI2RlZmluZSBSRUlTRVJGU19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0NfU0VURkxBR1MJCUZTX0lPQ19TRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT04JCUZTX0lPQ19TRVRWRVJTSU9OCiAKLS8qIHRoZSAzMiBiaXQgY29tcGF0IGRlZmluaXRpb25zIHdpdGggaW50IGFyZ3VtZW50ICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1VOUEFDSwkJX0lPVygweENELCAxLCBpbnQpCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVEZMQUdTCQlGU19JT0MzMl9HRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRGTEFHUwkJRlNfSU9DMzJfU0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VUVkVSU0lPTglGU19JT0MzMl9HRVRWRVJTSU9OCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVFZFUlNJT04JRlNfSU9DMzJfU0VUVkVSU0lPTgotCi0vKiBMb2NraW5nIHByaW1pdGl2ZXMgKi8KLS8qIFJpZ2h0IG5vdyB3ZSBhcmUgc3RpbGwgZmFsbGluZyBiYWNrIHRvICh1bilsb2NrX2tlcm5lbCwgYnV0IGV2ZW50dWFsbHkgdGhhdAotICAgd291bGQgZXZvbHZlIGludG8gcmVhbCBwZXItZnMgbG9ja3MgKi8KLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9jayggc2IgKSBsb2NrX2tlcm5lbCgpCi0jZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9jayggc2IgKSB1bmxvY2tfa2VybmVsKCkKLQotLyogeGF0dHIgc3R1ZmYgKi8KLSNkZWZpbmUgUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzKSAoUkVJU0VSRlNfU0IocyktPnhhdHRyX2Rpcl9zZW0pCi0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJCQkJLyogX0xJTlVYX1JFSVNFUl9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAxZTVmNjczLi5iYTMyNTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTIxNyw2ICsyMTcsNyBAQAogI2RlZmluZSBSVFBST1RfRE5ST1VURUQJMTMJLyogREVDbmV0IHJvdXRpbmcgZGFlbW9uICovCiAjZGVmaW5lIFJUUFJPVF9YT1JQCTE0CS8qIFhPUlAgKi8KICNkZWZpbmUgUlRQUk9UX05USwkxNQkvKiBOZXRzdWt1a3UgKi8KKyNkZWZpbmUgUlRQUk9UX0RIQ1AJMTYgICAgICAvKiBESENQIGNsaWVudCAqLwogCiAvKiBydG1fc2NvcGUKIApAQCAtNjIyLDggKzYyMyw4IEBACiAKIGV4dGVybiBpbnQgcnRuZXRsaW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlY2hvKTsKIGV4dGVybiBpbnQgcnRubF91bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCk7Ci1leHRlcm4gaW50IHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLAotCQkgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKTsKK2V4dGVybiB2b2lkIHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwKKwkJCXUzMiBncm91cCwgc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKTsKIGV4dGVybiB2b2lkIHJ0bmxfc2V0X3NrX2VycihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBncm91cCwgaW50IGVycm9yKTsKIGV4dGVybiBpbnQgcnRuZXRsaW5rX3B1dF9tZXRyaWNzKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqbWV0cmljcyk7CiBleHRlcm4gaW50IHJ0bmxfcHV0X2NhY2hlaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMDExZGIyZi4uMWQxOWMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtOTk4LDYgKzk5OCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgcnEgKmJ1c2llc3QsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAogCQkJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpOwogCXZvaWQgKCpwcmVfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisJaW50ICgqbmVlZHNfcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7CiAJdm9pZCAoKnBvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCp0YXNrX3dha2VfdXApIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKQEAgLTEwNTIsNiArMTA1MywxMCBAQAogCXU2NAkJCWxhc3Rfd2FrZXVwOwogCXU2NAkJCWF2Z19vdmVybGFwOwogCisJdTY0CQkJc3RhcnRfcnVudGltZTsKKwl1NjQJCQlhdmdfd2FrZXVwOworCXU2NAkJCW5yX21pZ3JhdGlvbnM7CisKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXU2NAkJCXdhaXRfc3RhcnQ7CiAJdTY0CQkJd2FpdF9tYXg7CkBAIC0xMDY3LDcgKzEwNzIsNiBAQAogCXU2NAkJCWV4ZWNfbWF4OwogCXU2NAkJCXNsaWNlX21heDsKIAotCXU2NAkJCW5yX21pZ3JhdGlvbnM7CiAJdTY0CQkJbnJfbWlncmF0aW9uc19jb2xkOwogCXU2NAkJCW5yX2ZhaWxlZF9taWdyYXRpb25zX2FmZmluZTsKIAl1NjQJCQlucl9mYWlsZWRfbWlncmF0aW9uc19ydW5uaW5nOwpAQCAtMTE2NCw2ICsxMTY4LDcgQEAKICNlbmRpZgogCiAJc3RydWN0IGxpc3RfaGVhZCB0YXNrczsKKwlzdHJ1Y3QgcGxpc3Rfbm9kZSBwdXNoYWJsZV90YXNrczsKIAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqYWN0aXZlX21tOwogCkBAIC0xMTc1LDEzICsxMTgwLDE0IEBACiAJLyogPz8/ICovCiAJdW5zaWduZWQgaW50IHBlcnNvbmFsaXR5OwogCXVuc2lnbmVkIGRpZF9leGVjOjE7CisJdW5zaWduZWQgaW5fZXhlY3ZlOjE7CS8qIFRlbGwgdGhlIExTTXMgdGhhdCB0aGUgcHJvY2VzcyBpcyBkb2luZyBhbgorCQkJCSAqIGV4ZWN2ZSAqLwogCXBpZF90IHBpZDsKIAlwaWRfdCB0Z2lkOwogCi0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiAJLyogQ2FuYXJ5IHZhbHVlIGZvciB0aGUgLWZzdGFjay1wcm90ZWN0b3IgZ2NjIGZlYXR1cmUgKi8KIAl1bnNpZ25lZCBsb25nIHN0YWNrX2NhbmFyeTsKLSNlbmRpZgorCiAJLyogCiAJICogcG9pbnRlcnMgdG8gKG9yaWdpbmFsKSBwYXJlbnQgcHJvY2VzcywgeW91bmdlc3QgY2hpbGQsIHlvdW5nZXIgc2libGluZywKIAkgKiBvbGRlciBzaWJsaW5nLCByZXNwZWN0aXZlbHkuICAocC0+ZmF0aGVyIGNhbiBiZSByZXBsYWNlZCB3aXRoIApAQCAtMTY3Myw2ICsxNjc5LDE2IEBACiAJcmV0dXJuIHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsICZuZXdfbWFzayk7CiB9CiAKKy8qCisgKiBBcmNoaXRlY3R1cmVzIGNhbiBzZXQgdGhpcyB0byAxIGlmIHRoZXkgaGF2ZSBzcGVjaWZpZWQKKyAqIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLIGluIHRoZWlyIGFyY2ggS2NvbmZpZywKKyAqIGJ1dCB0aGVuIGR1cmluZyBib290dXAgaXQgdHVybnMgb3V0IHRoYXQgc2NoZWRfY2xvY2soKQorICogaXMgcmVsaWFibGUgYWZ0ZXIgYWxsOgorICovCisjaWZkZWYgQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKK2V4dGVybiBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOworI2VuZGlmCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCk7CiAKIGV4dGVybiB2b2lkIHNjaGVkX2Nsb2NrX2luaXQodm9pZCk7CkBAIC0yMDkwLDYgKzIxMDYsMTkgQEAKIAogZXh0ZXJuIHZvaWQgdGhyZWFkX2luZm9fY2FjaGVfaW5pdCh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN0YWNrX25vdF91c2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nICpuID0gZW5kX29mX3N0YWNrKHApOworCisJZG8geyAJLyogU2tpcCBvdmVyIGNhbmFyeSAqLworCQluKys7CisJfSB3aGlsZSAoISpuKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZyluIC0gKHVuc2lnbmVkIGxvbmcpZW5kX29mX3N0YWNrKHApOworfQorI2VuZGlmCisKIC8qIHNldCB0aHJlYWQgZmxhZ3MgaW4gb3RoZXIgdGFzaydzIHN0cnVjdHVyZXMKICAqIC0gc2VlIGFzbS90aHJlYWRfaW5mby5oIGZvciBUSUZfeHh4eCBmbGFncyBhdmFpbGFibGUKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L3NjdHAuaAppbmRleCA4YmExYzMyLi5jMjczMWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjdHAuaApAQCAtNjAsNyArNjAsNyBAQAogCV9fYmUxNiBzb3VyY2U7CiAJX19iZTE2IGRlc3Q7CiAJX19iZTMyIHZ0YWc7Ci0JX19iZTMyIGNoZWNrc3VtOworCV9fbGUzMiBjaGVja3N1bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zY3RwaGRyX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC0xNzIsMzUgKzE3MiwzNSBAQAogdHlwZWRlZiBlbnVtIHsKIAogCS8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjUgKi8KLQlTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPCQk9IF9fY29uc3RhbnRfaHRvbnMoMSksCisJU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTwkJPSBjcHVfdG9fYmUxNigxKSwKIAkvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4yLjEgKi8KLQlTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUwkJCT0gX19jb25zdGFudF9odG9ucyg1KSwKLQlTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUwkJCT0gX19jb25zdGFudF9odG9ucyg2KSwKLQlTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRQkJCT0gX19jb25zdGFudF9odG9ucyg3KSwKLQlTQ1RQX1BBUkFNX1VOUkVDT0dOSVpFRF9QQVJBTUVURVJTCT0gX19jb25zdGFudF9odG9ucyg4KSwKLQlTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkUJCT0gX19jb25zdGFudF9odG9ucyg5KSwKLQlTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTCQk9IF9fY29uc3RhbnRfaHRvbnMoMTEpLAotCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMJPSBfX2NvbnN0YW50X2h0b25zKDEyKSwKLQlTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMCksCisJU0NUUF9QQVJBTV9JUFY0X0FERFJFU1MJCQk9IGNwdV90b19iZTE2KDUpLAorCVNDVFBfUEFSQU1fSVBWNl9BRERSRVNTCQkJPSBjcHVfdG9fYmUxNig2KSwKKwlTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRQkJCT0gY3B1X3RvX2JlMTYoNyksCisJU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUwk9IGNwdV90b19iZTE2KDgpLAorCVNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRQkJPSBjcHVfdG9fYmUxNig5KSwKKwlTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTCQk9IGNwdV90b19iZTE2KDExKSwKKwlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTCT0gY3B1X3RvX2JlMTYoMTIpLAorCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUJCQk9IGNwdV90b19iZTE2KDB4ODAwMCksCiAKIAkvKiBBVVRIIEV4dGVuc2lvbiBTZWN0aW9uIDMgKi8KLQlTQ1RQX1BBUkFNX1JBTkRPTQkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDIpLAotCVNDVFBfUEFSQU1fQ0hVTktTCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMyksCi0JU0NUUF9QQVJBTV9ITUFDX0FMR08JCQk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDA0KSwKKwlTQ1RQX1BBUkFNX1JBTkRPTQkJCT0gY3B1X3RvX2JlMTYoMHg4MDAyKSwKKwlTQ1RQX1BBUkFNX0NIVU5LUwkJCT0gY3B1X3RvX2JlMTYoMHg4MDAzKSwKKwlTQ1RQX1BBUkFNX0hNQUNfQUxHTwkJCT0gY3B1X3RvX2JlMTYoMHg4MDA0KSwKIAogCS8qIEFkZC1JUDogU3VwcG9ydGVkIEV4dGVuc2lvbnMsIFNlY3Rpb24gNC4yICovCi0JU0NUUF9QQVJBTV9TVVBQT1JURURfRVhUCT0gX19jb25zdGFudF9odG9ucygweDgwMDgpLAorCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVAk9IGNwdV90b19iZTE2KDB4ODAwOCksCiAKIAkvKiBQUi1TQ1RQIFNlYyAzLjEgKi8KLQlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVAk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAwKSwKKwlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVAk9IGNwdV90b19iZTE2KDB4YzAwMCksCiAKIAkvKiBBZGQtSVAgRXh0ZW5zaW9uLiBTZWN0aW9uIDMuMiAqLwotCVNDVFBfUEFSQU1fQUREX0lQCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAxKSwKLQlTQ1RQX1BBUkFNX0RFTF9JUAkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMiksCi0JU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gX19jb25zdGFudF9odG9ucygweGMwMDMpLAotCVNDVFBfUEFSQU1fU0VUX1BSSU1BUlkJCT0gX19jb25zdGFudF9odG9ucygweGMwMDQpLAotCVNDVFBfUEFSQU1fU1VDQ0VTU19SRVBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNSksCi0JU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORCA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA2KSwKKwlTQ1RQX1BBUkFNX0FERF9JUAkJPSBjcHVfdG9fYmUxNigweGMwMDEpLAorCVNDVFBfUEFSQU1fREVMX0lQCQk9IGNwdV90b19iZTE2KDB4YzAwMiksCisJU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gY3B1X3RvX2JlMTYoMHhjMDAzKSwKKwlTQ1RQX1BBUkFNX1NFVF9QUklNQVJZCQk9IGNwdV90b19iZTE2KDB4YzAwNCksCisJU0NUUF9QQVJBTV9TVUNDRVNTX1JFUE9SVAk9IGNwdV90b19iZTE2KDB4YzAwNSksCisJU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORCA9IGNwdV90b19iZTE2KDB4YzAwNiksCiAKIH0gc2N0cF9wYXJhbV90OyAvKiBlbnVtICovCiAKQEAgLTIxMiwxMyArMjEyLDEzIEBACiAgKgogICovCiB0eXBlZGVmIGVudW0gewotCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkQgICAgID0gX19jb25zdGFudF9odG9ucygweDAwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkRfRVJSID0gX19jb25zdGFudF9odG9ucygweDQwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDgwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVBfRVJSICAgID0gX19jb25zdGFudF9odG9ucygweGMwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkQgICAgID0gY3B1X3RvX2JlMTYoMHgwMDAwKSwKKwlTQ1RQX1BBUkFNX0FDVElPTl9ESVNDQVJEX0VSUiA9IGNwdV90b19iZTE2KDB4NDAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fU0tJUCAgICAgICAgPSBjcHVfdG9fYmUxNigweDgwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVBfRVJSICAgID0gY3B1X3RvX2JlMTYoMHhjMDAwKSwKIH0gc2N0cF9wYXJhbV9hY3Rpb25fdDsKIAotZW51bSB7IFNDVFBfUEFSQU1fQUNUSU9OX01BU0sgPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksIH07CitlbnVtIHsgU0NUUF9QQVJBTV9BQ1RJT05fTUFTSyA9IGNwdV90b19iZTE2KDB4YzAwMCksIH07CiAKIC8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjEgUGF5bG9hZCBEYXRhIChEQVRBKSAoMCkgKi8KIApAQCAtNDU3LDE3ICs0NTcsMTcgQEAKICAqLwogdHlwZWRlZiBlbnVtIHsKIAotCVNDVFBfRVJST1JfTk9fRVJST1IJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDApLAotCVNDVFBfRVJST1JfSU5WX1NUUk0JICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDEpLAotCVNDVFBfRVJST1JfTUlTU19QQVJBTSAJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDIpLAotCVNDVFBfRVJST1JfU1RBTEVfQ09PS0lFCSAgID0gX19jb25zdGFudF9odG9ucygweDAzKSwKLQlTQ1RQX0VSUk9SX05PX1JFU09VUkNFIAkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNCksCi0JU0NUUF9FUlJPUl9ETlNfRkFJTEVEICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDUpLAotCVNDVFBfRVJST1JfVU5LTk9XTl9DSFVOSyAgID0gX19jb25zdGFudF9odG9ucygweDA2KSwKLQlTQ1RQX0VSUk9SX0lOVl9QQVJBTSAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNyksCi0JU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDgpLAotCVNDVFBfRVJST1JfTk9fREFUQSAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDA5KSwKLQlTQ1RQX0VSUk9SX0NPT0tJRV9JTl9TSFVURE9XTiA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYSksCisJU0NUUF9FUlJPUl9OT19FUlJPUgkgICA9IGNwdV90b19iZTE2KDB4MDApLAorCVNDVFBfRVJST1JfSU5WX1NUUk0JICAgPSBjcHVfdG9fYmUxNigweDAxKSwKKwlTQ1RQX0VSUk9SX01JU1NfUEFSQU0gCSAgID0gY3B1X3RvX2JlMTYoMHgwMiksCisJU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUJICAgPSBjcHVfdG9fYmUxNigweDAzKSwKKwlTQ1RQX0VSUk9SX05PX1JFU09VUkNFIAkgICA9IGNwdV90b19iZTE2KDB4MDQpLAorCVNDVFBfRVJST1JfRE5TX0ZBSUxFRCAgICAgID0gY3B1X3RvX2JlMTYoMHgwNSksCisJU0NUUF9FUlJPUl9VTktOT1dOX0NIVU5LICAgPSBjcHVfdG9fYmUxNigweDA2KSwKKwlTQ1RQX0VSUk9SX0lOVl9QQVJBTSAgICAgICA9IGNwdV90b19iZTE2KDB4MDcpLAorCVNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTSAgID0gY3B1X3RvX2JlMTYoMHgwOCksCisJU0NUUF9FUlJPUl9OT19EQVRBICAgICAgICAgPSBjcHVfdG9fYmUxNigweDA5KSwKKwlTQ1RQX0VSUk9SX0NPT0tJRV9JTl9TSFVURE9XTiA9IGNwdV90b19iZTE2KDB4MGEpLAogCiAKIAkvKiBTQ1RQIEltcGxlbWVudGF0aW9uIEd1aWRlOgpAQCAtNDc2LDkgKzQ3Niw5IEBACiAJICogIDEzICBQcm90b2NvbCBWaW9sYXRpb24KIAkgKi8KIAotCVNDVFBfRVJST1JfUkVTVEFSVCAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDBiKSwKLQlTQ1RQX0VSUk9SX1VTRVJfQUJPUlQgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYyksCi0JU0NUUF9FUlJPUl9QUk9UT19WSU9MQVRJT04gPSBfX2NvbnN0YW50X2h0b25zKDB4MGQpLAorCVNDVFBfRVJST1JfUkVTVEFSVCAgICAgICAgID0gY3B1X3RvX2JlMTYoMHgwYiksCisJU0NUUF9FUlJPUl9VU0VSX0FCT1JUICAgICAgPSBjcHVfdG9fYmUxNigweDBjKSwKKwlTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTiA9IGNwdV90b19iZTE2KDB4MGQpLAogCiAJLyogQURESVAgU2VjdGlvbiAzLjMgIE5ldyBFcnJvciBDYXVzZXMKIAkgKgpAQCAtNDkzLDExICs0OTMsMTEgQEAKIAkgKiAweDAxMDMgICAgICAgICAgQXNzb2NpYXRpb24gQWJvcnRlZCBkdWUgdG8gaWxsZWdhbCBBU0NPTkYtQUNLCiAJICogMHgwMTA0ICAgICAgICAgIFJlcXVlc3QgcmVmdXNlZCAtIG5vIGF1dGhvcml6YXRpb24uCiAJICovCi0JU0NUUF9FUlJPUl9ERUxfTEFTVF9JUAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAwKSwKLQlTQ1RQX0VSUk9SX1JTUkNfTE9XCT0gX19jb25zdGFudF9odG9ucygweDAxMDEpLAotCVNDVFBfRVJST1JfREVMX1NSQ19JUAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAyKSwKLQlTQ1RQX0VSUk9SX0FTQ09ORl9BQ0sgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAzKSwKLQlTQ1RQX0VSUk9SX1JFUV9SRUZVU0VECT0gX19jb25zdGFudF9odG9ucygweDAxMDQpLAorCVNDVFBfRVJST1JfREVMX0xBU1RfSVAJPSBjcHVfdG9fYmUxNigweDAxMDApLAorCVNDVFBfRVJST1JfUlNSQ19MT1cJPSBjcHVfdG9fYmUxNigweDAxMDEpLAorCVNDVFBfRVJST1JfREVMX1NSQ19JUAk9IGNwdV90b19iZTE2KDB4MDEwMiksCisJU0NUUF9FUlJPUl9BU0NPTkZfQUNLICAgPSBjcHVfdG9fYmUxNigweDAxMDMpLAorCVNDVFBfRVJST1JfUkVRX1JFRlVTRUQJPSBjcHVfdG9fYmUxNigweDAxMDQpLAogCiAJLyogQVVUSCBTZWN0aW9uIDQuICBOZXcgRXJyb3IgQ2F1c2UKIAkgKgpAQCAtNTA5LDcgKzUwOSw3IEBACiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiAweDAxMDUgICAgICAgICAgVW5zdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVyCiAJICovCi0JIFNDVFBfRVJST1JfVU5TVVBfSE1BQwk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQorCSBTQ1RQX0VSUk9SX1VOU1VQX0hNQUMJPSBjcHVfdG9fYmUxNigweDAxMDUpCiB9IHNjdHBfZXJyb3JfdDsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMWYyYWI2My4uNTRlZDE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtODgwLDExICs4ODAsNiBAQAogICoJQHNvY2sgY29udGFpbnMgdGhlIGxpc3RlbmluZyBzb2NrZXQgc3RydWN0dXJlLgogICoJQG5ld3NvY2sgY29udGFpbnMgdGhlIG5ld2x5IGNyZWF0ZWQgc2VydmVyIHNvY2tldCBmb3IgY29ubmVjdGlvbi4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KLSAqIEBzb2NrZXRfcG9zdF9hY2NlcHQ6Ci0gKglUaGlzIGhvb2sgYWxsb3dzIGEgc2VjdXJpdHkgbW9kdWxlIHRvIGNvcHkgc2VjdXJpdHkKLSAqCWluZm9ybWF0aW9uIGludG8gdGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0J3MgaW5vZGUuCi0gKglAc29jayBjb250YWlucyB0aGUgbGlzdGVuaW5nIHNvY2tldCBzdHJ1Y3R1cmUuCi0gKglAbmV3c29jayBjb250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBzZXJ2ZXIgc29ja2V0IGZvciBjb25uZWN0aW9uLgogICogQHNvY2tldF9zZW5kbXNnOgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgdHJhbnNtaXR0aW5nIGEgbWVzc2FnZSB0byBhbm90aGVyIHNvY2tldC4KICAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgpAQCAtMTU1NCw4ICsxNTQ5LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGludCBhZGRybGVuKTsKIAlpbnQgKCpzb2NrZXRfbGlzdGVuKSAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpOwogCWludCAoKnNvY2tldF9hY2NlcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKLQl2b2lkICgqc29ja2V0X3Bvc3RfYWNjZXB0KSAoc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkgICAgc3RydWN0IHNvY2tldCAqbmV3c29jayk7CiAJaW50ICgqc29ja2V0X3NlbmRtc2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpOwogCWludCAoKnNvY2tldF9yZWN2bXNnKSAoc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTI1MzcsNyArMjUzMCw2IEBACiBpbnQgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbik7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKLXZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spOwogaW50IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpOwogaW50IHNlY3VyaXR5X3NvY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJCSAgICBpbnQgc2l6ZSwgaW50IGZsYWdzKTsKQEAgLTI2MTYsMTEgKzI2MDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKQotewotfQotCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaAppbmRleCBiYmY0ODlkLi5kMjM5Nzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKQEAgLTEyLDYgKzEyLDggQEAKICNpZm5kZWYgX0xJTlVYX1NFTElOVVhfTkVUTElOS19ICiAjZGVmaW5lIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogTWVzc2FnZSB0eXBlcy4gKi8KICNkZWZpbmUgU0VMTkxfTVNHX0JBU0UgMHgxMAogZW51bSB7CkBAIC0zOCwxMSArNDAsMTEgQEAKIAogLyogTWVzc2FnZSBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3Qgc2VsbmxfbXNnX3NldGVuZm9yY2UgewotCWludDMyX3QJCXZhbDsKKwlfX3MzMgkJdmFsOwogfTsKIAogc3RydWN0IHNlbG5sX21zZ19wb2xpY3lsb2FkIHsKLQl1X2ludDMyX3QJc2Vxbm87CisJX191MzIJc2Vxbm87CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oIGIvaW5jbHVkZS9saW51eC9zaF9jbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaF9jbXQuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fU0hfQ01UX0hfXworI2RlZmluZSBfX1NIX0NNVF9IX18KKworc3RydWN0IHNoX2NtdF9jb25maWcgeworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBjaGFubmVsX29mZnNldDsKKwlpbnQgdGltZXJfYml0OworCWNoYXIgKmNsazsKKwl1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfcmF0aW5nOworCXVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nOworfTsKKworI2VuZGlmIC8qIF9fU0hfQ01UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmggYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAppbmRleCA2OGUyMTJmLi5lYjE0MjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtODUsNiArODUsNyBAQAogfQogI2VuZGlmCiAKK3Vuc2lnbmVkIGludCBpbnRjX2V2dDJpcnEodW5zaWduZWQgaW50IHZlY3Rvcik7CiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYyk7CiBpbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA5ZGNmOTU2Li41NWQ2NzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAKLSNkZWZpbmUgSEFWRV9BTExPQ19TS0IJCS8qIEZvciB0aGUgZHJpdmVycyB0byBrbm93ICovCi0jZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQgkvKiBEaXR0byA4KQkJICAgKi8KLQogLyogRG9uJ3QgY2hhbmdlIHRoaXMgd2l0aG91dCBjaGFuZ2luZyBza2JfY3N1bV91bm5lY2Vzc2FyeSEgKi8KICNkZWZpbmUgQ0hFQ0tTVU1fTk9ORSAwCiAjZGVmaW5lIENIRUNLU1VNX1VOTkVDRVNTQVJZIDEKQEAgLTEzNSw2ICsxMzIsNTUgQEAKIAlfX3UzMiBzaXplOwogfTsKIAorI2RlZmluZSBIQVZFX0hXX1RJTUVfU1RBTVAKKworLyoqCisgKiBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgLSBoYXJkd2FyZSB0aW1lIHN0YW1wcworICogQGh3dHN0YW1wOgloYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIGludG8gZHVyYXRpb24KKyAqCQlzaW5jZSBhcmJpdHJhcnkgcG9pbnQgaW4gdGltZQorICogQHN5c3RzdGFtcDoJaHd0c3RhbXAgdHJhbnNmb3JtZWQgdG8gc3lzdGVtIHRpbWUgYmFzZQorICoKKyAqIFNvZnR3YXJlIHRpbWUgc3RhbXBzIGdlbmVyYXRlZCBieSBrdGltZV9nZXRfcmVhbCgpIGFyZSBzdG9yZWQgaW4KKyAqIHNrYi0+dHN0YW1wLiBUaGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IGtpbmRzIG9mIHRpbWUKKyAqIHN0YW1wcyBpcyBhcyBmb2xsb3dzOgorICoKKyAqIHN5c3RzdGFtcCBhbmQgdHN0YW1wIGNhbiBiZSBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggb3RoZXIgaW4KKyAqIGFyYml0cmFyeSBjb21iaW5hdGlvbnMuICBUaGUgYWNjdXJhY3kgb2YgYQorICogc3lzdHN0YW1wL3RzdGFtcC8ic3lzdHN0YW1wIGZyb20gb3RoZXIgZGV2aWNlIiBjb21wYXJpc29uIGlzCisgKiBsaW1pdGVkIGJ5IHRoZSBhY2N1cmFjeSBvZiB0aGUgdHJhbnNmb3JtYXRpb24gaW50byBzeXN0ZW0gdGltZQorICogYmFzZS4gVGhpcyBkZXBlbmRzIG9uIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCBpdHMgdW5kZXJseWluZworICogaGFyZHdhcmUuCisgKgorICogaHd0c3RhbXBzIGNhbiBvbmx5IGJlIGNvbXBhcmVkIGFnYWluc3Qgb3RoZXIgaHd0c3RhbXBzIGZyb20KKyAqIHRoZSBzYW1lIGRldmljZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCisgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX2h3dHN0YW1wcygpIHRvIGdldCBhIHBvaW50ZXIuCisgKi8KK3N0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyB7CisJa3RpbWVfdAlod3RzdGFtcDsKKwlrdGltZV90CXN5c3RzdGFtcDsKK307CisKKy8qKgorICogc3RydWN0IHNrYl9zaGFyZWRfdHggLSBpbnN0cnVjdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcgb2Ygb3V0Z29pbmcgcGFja2V0cworICogQGhhcmR3YXJlOgkJZ2VuZXJhdGUgaGFyZHdhcmUgdGltZSBzdGFtcAorICogQHNvZnR3YXJlOgkJZ2VuZXJhdGUgc29mdHdhcmUgdGltZSBzdGFtcAorICogQGluX3Byb2dyZXNzOglkZXZpY2UgZHJpdmVyIGlzIGdvaW5nIHRvIHByb3ZpZGUKKyAqCQkJaGFyZHdhcmUgdGltZSBzdGFtcAorICoKKyAqIFRoZXNlIGZsYWdzIGFyZSBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCisgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX3R4KCkgdG8gZ2V0IGEgcG9pbnRlci4KKyAqLwordW5pb24gc2tiX3NoYXJlZF90eCB7CisJc3RydWN0IHsKKwkJX191OAloYXJkd2FyZToxLAorCQkJc29mdHdhcmU6MSwKKwkJCWluX3Byb2dyZXNzOjE7CisJfTsKKwlfX3U4IGZsYWdzOworfTsKKwogLyogVGhpcyBkYXRhIGlzIGludmFyaWFudCBhY3Jvc3MgY2xvbmVzIGFuZCBsaXZlcyBhdAogICogdGhlIGVuZCBvZiB0aGUgaGVhZGVyIGRhdGEsIGllLiBhdCBza2ItPmVuZC4KICAqLwpAQCAtMTQ2LDEwICsxOTIsMTIgQEAKIAl1bnNpZ25lZCBzaG9ydAlnc29fc2VnczsKIAl1bnNpZ25lZCBzaG9ydCAgZ3NvX3R5cGU7CiAJX19iZTMyICAgICAgICAgIGlwNl9mcmFnX2lkOworCXVuaW9uIHNrYl9zaGFyZWRfdHggdHhfZmxhZ3M7CiAjaWZkZWYgQ09ORklHX0hBU19ETUEKIAl1bnNpZ25lZCBpbnQJbnVtX2RtYV9tYXBzOwogI2VuZGlmCiAJc3RydWN0IHNrX2J1ZmYJKmZyYWdfbGlzdDsKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgaHd0c3RhbXBzOwogCXNrYl9mcmFnX3QJZnJhZ3NbTUFYX1NLQl9GUkFHU107CiAjaWZkZWYgQ09ORklHX0hBU19ETUEKIAlkbWFfYWRkcl90CWRtYV9tYXBzW01BWF9TS0JfRlJBR1MgKyAxXTsKQEAgLTE4OCw2ICsyMzYsOCBAQAogCVNLQl9HU09fVENQX0VDTiA9IDEgPDwgMywKIAogCVNLQl9HU09fVENQVjYgPSAxIDw8IDQsCisKKwlTS0JfR1NPX0ZDT0UgPSAxIDw8IDUsCiB9OwogCiAjaWYgQklUU19QRVJfTE9ORyA+IDMyCkBAIC0zNzMsNiArNDIzLDcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBjb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCSAgICAgICBfX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsCiAJCQkJICAgZ2ZwX3QgcHJpb3JpdHksIGludCBmY2xvbmUsIGludCBub2RlKTsKQEAgLTQxMSw3ICs0NjIsOCBAQAogZXh0ZXJuIGludAkgICAgICAgc2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKip0cmFpbGVyKTsKIGV4dGVybiBpbnQJICAgICAgIHNrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCk7Ci0jZGVmaW5lIGRldl9rZnJlZV9za2IoYSkJa2ZyZWVfc2tiKGEpCisjZGVmaW5lIGRldl9rZnJlZV9za2IoYSkJY29uc3VtZV9za2IoYSkKKyNkZWZpbmUgZGV2X2NvbnN1bWVfc2tiKGEpCWtmcmVlX3NrYl9jbGVhbihhKQogZXh0ZXJuIHZvaWQJICAgICAgc2tiX292ZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwKIAkJCQkgICAgIHZvaWQgKmhlcmUpOwogZXh0ZXJuIHZvaWQJICAgICAgc2tiX3VuZGVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCkBAIC00NTksNiArNTExLDE2IEBACiAvKiBJbnRlcm5hbCAqLwogI2RlZmluZSBza2Jfc2hpbmZvKFNLQikJKChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKHNrYl9lbmRfcG9pbnRlcihTS0IpKSkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gJnNrYl9zaGluZm8oc2tiKS0+aHd0c3RhbXBzOworfQorCitzdGF0aWMgaW5saW5lIHVuaW9uIHNrYl9zaGFyZWRfdHggKnNrYl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAmc2tiX3NoaW5mbyhza2IpLT50eF9mbGFnczsKK30KKwogLyoqCiAgKglza2JfcXVldWVfZW1wdHkgLSBjaGVjayBpZiBhIHF1ZXVlIGlzIGVtcHR5CiAgKglAbGlzdDogcXVldWUgaGVhZApAQCAtMTI3OCw3ICsxMzQwLDcgQEAKICAqIFRoZSBuZXR3b3JraW5nIGxheWVyIHJlc2VydmVzIHNvbWUgaGVhZHJvb20gaW4gc2tiIGRhdGEgKHZpYQogICogZGV2X2FsbG9jX3NrYikuIFRoaXMgaXMgdXNlZCB0byBhdm9pZCBoYXZpbmcgdG8gcmVhbGxvY2F0ZSBza2IgZGF0YSB3aGVuCiAgKiB0aGUgaGVhZGVyIGhhcyB0byBncm93LiBJbiB0aGUgZGVmYXVsdCBjYXNlLCBpZiB0aGUgaGVhZGVyIGhhcyB0byBncm93Ci0gKiAxNiBieXRlcyBvciBsZXNzIHdlIGF2b2lkIHRoZSByZWFsbG9jYXRpb24uCisgKiAzMiBieXRlcyBvciBsZXNzIHdlIGF2b2lkIHRoZSByZWFsbG9jYXRpb24uCiAgKgogICogVW5mb3J0dW5hdGVseSB0aGlzIGhlYWRyb29tIGNoYW5nZXMgdGhlIERNQSBhbGlnbm1lbnQgb2YgdGhlIHJlc3VsdGluZwogICogbmV0d29yayBwYWNrZXQuIEFzIGZvciBORVRfSVBfQUxJR04sIHRoaXMgdW5hbGlnbmVkIERNQSBpcyBleHBlbnNpdmUKQEAgLTEyODYsMTEgKzEzNDgsMTEgQEAKICAqIHBlcmhhcHMgc2V0dGluZyBpdCB0byBhIGNhY2hlbGluZSBpbiBzaXplIChzaW5jZSB0aGF0IHdpbGwgbWFpbnRhaW4KICAqIGNhY2hlbGluZSBhbGlnbm1lbnQgb2YgdGhlIERNQSkuIEl0IG11c3QgYmUgYSBwb3dlciBvZiAyLgogICoKLSAqIFZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgZXhwZWN0IGF0IGxlYXN0IDE2IGJ5dGVzIG9mCisgKiBWYXJpb3VzIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIGxheWVyIGV4cGVjdCBhdCBsZWFzdCAzMiBieXRlcyBvZgogICogaGVhZHJvb20sIHlvdSBzaG91bGQgbm90IHJlZHVjZSB0aGlzLgogICovCiAjaWZuZGVmIE5FVF9TS0JfUEFECi0jZGVmaW5lIE5FVF9TS0JfUEFECTE2CisjZGVmaW5lIE5FVF9TS0JfUEFECTMyCiAjZW5kaWYKIAogZXh0ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CkBAIC0xNjc4LDggKzE3NDAsNiBAQAogCQkJCSBpbnQgc2hpZnRsZW4pOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7Ci1leHRlcm4gaW50CSAgICAgICBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogc3RhdGljIGlubGluZSB2b2lkICpza2JfaGVhZGVyX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAkJCQkgICAgICAgaW50IGxlbiwgdm9pZCAqYnVmZmVyKQpAQCAtMTcyNiw2ICsxNzg2LDExIEBACiAKIGV4dGVybiB2b2lkIHNrYl9pbml0KHZvaWQpOwogCitzdGF0aWMgaW5saW5lIGt0aW1lX3Qgc2tiX2dldF9rdGltZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPnRzdGFtcDsKK30KKwogLyoqCiAgKglza2JfZ2V0X3RpbWVzdGFtcCAtIGdldCB0aW1lc3RhbXAgZnJvbSBhIHNrYgogICoJQHNrYjogc2tiIHRvIGdldCBzdGFtcCBmcm9tCkBAIC0xNzM1LDExICsxODAwLDE4IEBACiAgKglUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBvZmZzZXQgYmFjayB0byBhIHN0cnVjdCB0aW1ldmFsIGFuZCBzdG9yZXMKICAqCWl0IGluIHN0YW1wLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dldF90aW1lc3RhbXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpbWV2YWwgKnN0YW1wKQorc3RhdGljIGlubGluZSB2b2lkIHNrYl9nZXRfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgdGltZXZhbCAqc3RhbXApCiB7CiAJKnN0YW1wID0ga3RpbWVfdG9fdGltZXZhbChza2ItPnRzdGFtcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ2V0X3RpbWVzdGFtcG5zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqc3RhbXApCit7CisJKnN0YW1wID0ga3RpbWVfdG9fdGltZXNwZWMoc2tiLT50c3RhbXApOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOwpAQCAtMTc1NSw2ICsxODI3LDIwIEBACiAJcmV0dXJuIGt0aW1lX3NldCgwLCAwKTsKIH0KIAorLyoqCisgKiBza2JfdHN0YW1wX3R4IC0gcXVldWUgY2xvbmUgb2Ygc2tiIHdpdGggc2VuZCB0aW1lIHN0YW1wcworICogQG9yaWdfc2tiOgl0aGUgb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0CisgKiBAaHd0c3RhbXBzOgloYXJkd2FyZSB0aW1lIHN0YW1wcywgbWF5IGJlIE5VTEwgaWYgbm90IGF2YWlsYWJsZQorICoKKyAqIElmIHRoZSBza2IgaGFzIGEgc29ja2V0IGFzc29jaWF0ZWQsIHRoZW4gdGhpcyBmdW5jdGlvbiBjbG9uZXMgdGhlCisgKiBza2IgKHRodXMgc2hhcmluZyB0aGUgYWN0dWFsIGRhdGEgYW5kIG9wdGlvbmFsIHN0cnVjdHVyZXMpLCBzdG9yZXMKKyAqIHRoZSBvcHRpb25hbCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGluZm9ybWF0aW9uIChpZiBub24gTlVMTCkgb3IKKyAqIGdlbmVyYXRlcyBhIHNvZnR3YXJlIHRpbWUgc3RhbXAgKG90aGVyd2lzZSksIHRoZW4gcXVldWVzIHRoZSBjbG9uZQorICogdG8gdGhlIGVycm9yIHF1ZXVlIG9mIHRoZSBzb2NrZXQuICBFcnJvcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuCisgKi8KK2V4dGVybiB2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAorCQkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpOworCiBleHRlcm4gX19zdW0xNiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwogZXh0ZXJuIF9fc3VtMTYgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTE4ODUsNyArMTk3MSw3IEBACiAJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcXVldWVfbWFwcGluZzsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nOwogfQpAQCAtMTg5NSw2ICsxOTgxLDI0IEBACiAJdG8tPnF1ZXVlX21hcHBpbmcgPSBmcm9tLT5xdWV1ZV9tYXBwaW5nOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3JlY29yZF9yeF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgcnhfcXVldWUpCit7CisJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcnhfcXVldWUgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3J4X3F1ZXVlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+cXVldWVfbWFwcGluZyAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfcnhfcXVldWVfcmVjb3JkZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHNrYi0+cXVldWVfbWFwcGluZyAhPSAwKTsKK30KKworZXh0ZXJuIHUxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKICNpZmRlZiBDT05GSUdfWEZSTQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKnNrYl9zZWNfcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCmluZGV4IDJmNWMxNmIuLmUzN2I2YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgewogCXNwaW5sb2NrX3QgbGlzdF9sb2NrOwkvKiBQcm90ZWN0IHBhcnRpYWwgbGlzdCBhbmQgbnJfcGFydGlhbCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfcGFydGlhbDsKLQl1bnNpZ25lZCBsb25nIG1pbl9wYXJ0aWFsOwogCXN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDsKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogCWF0b21pY19sb25nX3QgbnJfc2xhYnM7CkBAIC04OSw2ICs4OCw3IEBACiAJdm9pZCAoKmN0b3IpKHZvaWQgKik7CiAJaW50IGludXNlOwkJLyogT2Zmc2V0IHRvIG1ldGFkYXRhICovCiAJaW50IGFsaWduOwkJLyogQWxpZ25tZW50ICovCisJdW5zaWduZWQgbG9uZyBtaW5fcGFydGlhbDsKIAljb25zdCBjaGFyICpuYW1lOwkvKiBOYW1lIChvbmx5IGZvciBkaXNwbGF5ISkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIExpc3Qgb2Ygc2xhYiBjYWNoZXMgKi8KICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwpAQCAtMTIxLDEwICsxMjEsMjMgQEAKICNkZWZpbmUgS01BTExPQ19TSElGVF9MT1cgaWxvZzIoS01BTExPQ19NSU5fU0laRSkKIAogLyoKKyAqIE1heGltdW0ga21hbGxvYyBvYmplY3Qgc2l6ZSBoYW5kbGVkIGJ5IFNMVUIuIExhcmdlciBvYmplY3QgYWxsb2NhdGlvbnMKKyAqIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcGFnZSBhbGxvY2F0b3IuIFRoZSBwYWdlIGFsbG9jYXRvciAiZmFzdHBhdGgiCisgKiBpcyByZWxhdGl2ZWx5IHNsb3cgc28gd2UgbmVlZCB0aGlzIHZhbHVlIHN1ZmZpY2llbnRseSBoaWdoIHNvIHRoYXQKKyAqIHBlcmZvcm1hbmNlIGNyaXRpY2FsIG9iamVjdHMgYXJlIGFsbG9jYXRlZCB0aHJvdWdoIHRoZSBTTFVCIGZhc3RwYXRoLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGRyb3BwZWQgdG8gUEFHRV9TSVpFIC8gMiBvbmNlIHRoZSBwYWdlIGFsbG9jYXRvcgorICogImZhc3RwYXRoIiBiZWNvbWVzIGNvbXBldGl0aXZlIHdpdGggdGhlIHNsYWIgYWxsb2NhdG9yIGZhc3RwYXRocy4KKyAqLworI2RlZmluZSBTTFVCX01BWF9TSVpFICgyICogUEFHRV9TSVpFKQorCisjZGVmaW5lIFNMVUJfUEFHRV9TSElGVCAoUEFHRV9TSElGVCArIDIpCisKKy8qCiAgKiBXZSBrZWVwIHRoZSBnZW5lcmFsIGNhY2hlcyBpbiBhbiBhcnJheSBvZiBzbGFiIGNhY2hlcyB0aGF0IGFyZSB1c2VkIGZvcgogICogMl54IGJ5dGVzIG9mIGFsbG9jYXRpb25zLgogICovCi1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbUEFHRV9TSElGVCArIDFdOworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1NMVUJfUEFHRV9TSElGVF07CiAKIC8qCiAgKiBTb3JyeSB0aGF0IHRoZSBmb2xsb3dpbmcgaGFzIHRvIGJlIHRoYXQgdWdseSBidXQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MKQEAgLTIxMiw3ICsyMjUsNyBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKLQkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCWlmIChzaXplID4gU0xVQl9NQVhfU0laRSkKIAkJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKIAogCQlpZiAoIShmbGFncyAmIFNMVUJfRE1BKSkgewpAQCAtMjM0LDcgKzI0Nyw3IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJgotCQlzaXplIDw9IFBBR0VfU0laRSAmJiAhKGZsYWdzICYgU0xVQl9ETUEpKSB7CisJCXNpemUgPD0gU0xVQl9NQVhfU0laRSAmJiAhKGZsYWdzICYgU0xVQl9ETUEpKSB7CiAJCQlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IGttYWxsb2Nfc2xhYihzaXplKTsKIAogCQlpZiAoIXMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCA3MTUxOTZiLi5iYmFjYjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTE3Niw2ICsxNzYsMTIgQEAKICNkZWZpbmUgcHV0X2NwdSgpCQlwcmVlbXB0X2VuYWJsZSgpCiAjZGVmaW5lIHB1dF9jcHVfbm9fcmVzY2hlZCgpCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKQogCisvKgorICogQ2FsbGJhY2sgdG8gYXJjaCBjb2RlIGlmIHRoZXJlJ3Mgbm9zbXAgb3IgbWF4Y3B1cz0wIG9uIHRoZQorICogYm9vdCBjb21tYW5kIGxpbmU6CisgKi8KK2V4dGVybiB2b2lkIGFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCh2b2lkKTsKKwogdm9pZCBzbXBfc2V0dXBfcHJvY2Vzc29yX2lkKHZvaWQpOwogCiAjZW5kaWYgLyogX19MSU5VWF9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCmluZGV4IDFjYmYwMzEuLmIzMjcyNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKQEAgLTQzLDUgKzQzLDggQEAKIC8qIENvbnN0YW50cyBmb3IgZmxhZ3MgKi8KICNkZWZpbmUgU01TQzkxMVhfVVNFXzE2QklUIAkJCShCSVQoMCkpCiAjZGVmaW5lIFNNU0M5MTFYX1VTRV8zMkJJVCAJCQkoQklUKDEpKQorI2RlZmluZSBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkJCShCSVQoMikpCisjZGVmaW5lIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSAJCShCSVQoMykpCisjZGVmaW5lIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MJCShCSVQoNCkpCiAKICNlbmRpZiAvKiBfX0xJTlVYX1NNU0M5MTFYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMjBmYzRiYi4uNDIxYWZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogcGlkX3QJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CQkvKiBfX3VzZXIJCQkqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBleHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpOwotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXNhX2ZhbWlseV90OwogCkBAIC0xNzksNiArMTgxLDcgQEAKICNkZWZpbmUgQUZfQVNICQkxOAkvKiBBc2gJCQkJKi8KICNkZWZpbmUgQUZfRUNPTkVUCTE5CS8qIEFjb3JuIEVjb25ldAkJCSovCiAjZGVmaW5lIEFGX0FUTVNWQwkyMAkvKiBBVE0gU1ZDcwkJCSovCisjZGVmaW5lIEFGX1JEUwkJMjEJLyogUkRTIHNvY2tldHMgCQkJKi8KICNkZWZpbmUgQUZfU05BCQkyMgkvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCiAjZGVmaW5lIEFGX0lSREEJCTIzCS8qIElSREEgc29ja2V0cwkJCSovCiAjZGVmaW5lIEFGX1BQUE9YCTI0CS8qIFBQUG9YIHNvY2tldHMJCSovCkBAIC0yMTcsNiArMjIwLDcgQEAKICNkZWZpbmUgUEZfQVNICQlBRl9BU0gKICNkZWZpbmUgUEZfRUNPTkVUCUFGX0VDT05FVAogI2RlZmluZSBQRl9BVE1TVkMJQUZfQVRNU1ZDCisjZGVmaW5lIFBGX1JEUwkJQUZfUkRTCiAjZGVmaW5lIFBGX1NOQQkJQUZfU05BCiAjZGVmaW5lIFBGX0lSREEJCUFGX0lSREEKICNkZWZpbmUgUEZfUFBQT1gJQUZfUFBQT1gKQEAgLTI5OCw2ICszMDIsNyBAQAogI2RlZmluZSBTT0xfUFBQT0wyVFAJMjczCiAjZGVmaW5lIFNPTF9CTFVFVE9PVEgJMjc0CiAjZGVmaW5lIFNPTF9QTlBJUEUJMjc1CisjZGVmaW5lIFNPTF9SRFMJCTI3NgogCiAvKiBJUFggb3B0aW9ucyAqLwogI2RlZmluZSBJUFhfVFlQRQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCmluZGV4IGFiZWY3NTkuLjI0MWYxNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCkBAIC0xMjIsNiArMTIyLDkgQEAKICNkZWZpbmUgU0lPQ0JSQURESUYJMHg4OWEyCQkvKiBhZGQgaW50ZXJmYWNlIHRvIGJyaWRnZSAgICAgICovCiAjZGVmaW5lIFNJT0NCUkRFTElGCTB4ODlhMwkJLyogcmVtb3ZlIGludGVyZmFjZSBmcm9tIGJyaWRnZSAqLwogCisvKiBoYXJkd2FyZSB0aW1lIHN0YW1waW5nOiBwYXJhbWV0ZXJzIGluIGxpbnV4L25ldF90c3RhbXAuaCAqLworI2RlZmluZSBTSU9DU0hXVFNUQU1QICAgMHg4OWIwCisKIC8qIERldmljZSBwcml2YXRlIGlvY3RsIGNhbGxzICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL2xpYmVydGFzX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTA2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogYm9hcmQtc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGxpYmVydGFzX3NwaSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJQkVSVEFTX1NQSV9IXworI2RlZmluZSBfTElCRVJUQVNfU1BJX0hfCisKK3N0cnVjdCBzcGlfZGV2aWNlOworCitzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgeworCS8qIFRoZXJlIGFyZSB0d28gd2F5cyB0byByZWFkIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUncyBTUEkKKwkgKiBpbnRlcmZhY2UuIFNldHRpbmcgMCBvciAxIGhlcmUgY29udHJvbHMgd2hpY2ggb25lIGlzIHVzZWQuCisJICoKKwkgKiBVc3VhbGx5IHlvdSB3YW50IHRvIHNldCB1c2VfZHVtbXlfd3JpdGVzID0gMS4KKwkgKiBIb3dldmVyLCBpZiB0aGF0IGRvZXNuJ3Qgd29yayBvciBpZiB5b3UgYXJlIHVzaW5nIGEgc2xvdyBTUEkgY2xvY2sKKwkgKiBzcGVlZCwgeW91IG1heSB3YW50IHRvIHVzZSAwIGhlcmUuICovCisJdTE2IHVzZV9kdW1teV93cml0ZXM7CisKKwkvKiBHUElPIG51bWJlciB0byB1c2UgYXMgY2hpcCBzZWxlY3QgKi8KKwl1MTYgZ3Bpb19jczsKKworCS8qIEJvYXJkIHNwZWNpZmljIHNldHVwL3RlYXJkb3duICovCisJaW50ICgqc2V0dXApKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOworCWludCAoKnRlYXJkb3duKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKaW5kZXggMTdkOWI1OC4uNWFlOGZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKQEAgLTMzOSw2ICszMzksMTAgQEAKIAogZXh0ZXJuIHZvaWQgc3NiX2J1c191bnJlZ2lzdGVyKHN0cnVjdCBzc2JfYnVzICpidXMpOwogCisvKiBTZXQgYSBmYWxsYmFjayBTUFJPTS4KKyAqIFNlZSBrZG9jIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLiAqLworZXh0ZXJuIGludCBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pOworCiAvKiBTdXNwZW5kIGEgU1NCIGJ1cy4KICAqIENhbGwgdGhpcyBmcm9tIHRoZSBwYXJlbnQgYnVzIHN1c3BlbmQgcm91dGluZS4gKi8KIGV4dGVybiBpbnQgc3NiX2J1c19zdXNwZW5kKHN0cnVjdCBzc2JfYnVzICpidXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAppbmRleCA3ZDdlMDNkLi5kM2IxZDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaApAQCAtMTgxLDYgKzE4MSwxNiBAQAogI2RlZmluZSBTU0JfQ0hJUENPX1BST0dfV0FJVENOVAkJMHgwMTI0CiAjZGVmaW5lIFNTQl9DSElQQ09fRkxBU0hfQ0ZHCQkweDAxMjgKICNkZWZpbmUgU1NCX0NISVBDT19GTEFTSF9XQUlUQ05UCTB4MDEyQworI2RlZmluZSBTU0JfQ0hJUENPX0NMS0NUTFNUCQkweDAxRTAgLyogQ2xvY2sgY29udHJvbCBhbmQgc3RhdHVzIChyZXYgPj0gMjApICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFQUxQCTB4MDAwMDAwMDEgLyogRm9yY2UgQUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfRk9SQ0VIVAkweDAwMDAwMDAyIC8qIEZvcmNlIEhUIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfRk9SQ0VJTFAJMHgwMDAwMDAwNCAvKiBGb3JjZSBJTFAgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFQUxQUkVRCTB4MDAwMDAwMDggLyogQUxQIGF2YWlsYWJsZSByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVFJFUQkweDAwMDAwMDEwIC8qIEhUIGF2YWlsYWJsZSByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hXQ1JPRkYJMHgwMDAwMDAyMCAvKiBGb3JjZSBIVyBjbG9jayByZXF1ZXN0IG9mZiAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQJMHgwMDAxMDAwMCAvKiBIVCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUFMUAkweDAwMDIwMDAwIC8qIEFQTCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19IV19XT1JLQVJPVU5ECTB4MDFFNCAvKiBIYXJkd2FyZSB3b3JrYXJvdW5kIChyZXYgPj0gMjApICovCiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfREFUQQkJMHgwMzAwCiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfSU1SCQkweDAzMDQKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMF9GQ1IJCTB4MDMwOApAQCAtMTk3LDYgKzIwNywxOTYgQEAKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMV9MU1IJCTB4MDQxNAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQxX01TUgkJMHgwNDE4CiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDFfU0NSQVRDSAkweDA0MUMKKy8qIFBNVSByZWdpc3RlcnMgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfQ1RMCQkJMHgwNjAwIC8qIFBNVSBjb250cm9sICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVgkJMHhGRkZGMDAwMCAvKiBJTFAgZGl2IG1hc2sgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUCTE2CisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcJCTB4MDAwMDAyMDAgLyogTm8gSUxQIG9uIHdhaXQgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9IVFJFUUVOCQkweDAwMDAwMTAwIC8qIEhUIHJlcSBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9BTFBSRVFFTgkJMHgwMDAwMDA4MCAvKiBBTFAgcmVxIGVuYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRCQkweDAwMDAwMDdDIC8qIENyeXN0YWwgZnJlcSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUCTIKKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBESVZFTgkJMHgwMDAwMDAwMiAvKiBJTFAgZGl2IGVuYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX0xQT1NFTAkJMHgwMDAwMDAwMSAvKiBMUE8gc2VsICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NBUAkJCTB4MDYwNCAvKiBQTVUgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DQVBfUkVWSVNJT04JCTB4MDAwMDAwRkYgLyogUmV2aXNpb24gbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9TVEFUCQkJMHgwNjA4IC8qIFBNVSBzdGF0dXMgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfSU5UUEVORAkJMHgwMDAwMDA0MCAvKiBJbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9TQkNMS1NUCQkweDAwMDAwMDMwIC8qIEJhY2twbGFuZSBjbG9jayBzdGF0dXM/ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX0hBVkVBTFAJCTB4MDAwMDAwMDggLyogQUxQIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9IQVZFSFQJCTB4MDAwMDAwMDQgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX1JFU0lOSVQJCTB4MDAwMDAwMDMgLyogUmVzIGluaXQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1NUQVQJCQkweDA2MEMgLyogUE1VIHJlcyBzdGF0dXMgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1BFTkQJCQkweDA2MTAgLyogUE1VIHJlcyBwZW5kaW5nICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1RJTUVSCQkJMHgwNjE0IC8qIFBNVSB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLCQkweDA2MTggLyogUE1VIG1pbiByZXMgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLCQkweDA2MUMgLyogUE1VIG1heCByZXMgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMCQkweDA2MjAgLyogUE1VIHJlcyB0YWJsZSBzZWwgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSwkJMHgwNjI0IC8qIFBNVSByZXMgZGVwIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1VQRE5UTQkJMHgwNjI4IC8qIFBNVSByZXMgdXBkb3duIHRpbWVyICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19USU1FUgkJMHgwNjJDIC8qIFBNVSByZXMgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfQ0xLU1RSRVRDSAkJMHgwNjMwIC8qIFBNVSBjbG9ja3N0cmV0Y2ggKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfV0FUQ0hET0cJCQkweDA2MzQgLyogUE1VIHdhdGNoZG9nICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19SRVFUUwkJMHgwNjQwIC8qIFBNVSByZXMgcmVxIHRpbWVyIHNlbCAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRVAkJCTB4MDY0NCAvKiBQTVUgcmVzIHJlcSB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRTQkJCTB4MDY0OCAvKiBQTVUgcmVzIHJlcSBtYXNrICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hJUENUTF9BRERSCQkJMHgwNjUwCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hJUENUTF9EQVRBCQkJMHgwNjU0CisjZGVmaW5lIFNTQl9DSElQQ09fUkVHQ1RMX0FERFIJCQkweDA2NTgKKyNkZWZpbmUgU1NCX0NISVBDT19SRUdDVExfREFUQQkJCTB4MDY1QworI2RlZmluZSBTU0JfQ0hJUENPX1BMTENUTF9BRERSCQkJMHgwNjYwCisjZGVmaW5lIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEJCQkweDA2NjQKKworCisKKy8qKiBQTVUgUExMIHJlZ2lzdGVycyAqLworCisvKiBQTVUgcmV2IDAgUExMIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwwCQkJMAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSwkJMHgwMDAwMDAwMQorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMF9QRElWX0ZSRVEJCTI1MDAwIC8qIGtIeiAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwxCQkJMQorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0sJCTB4RjAwMDAwMDAgLyogV2lsZCBpbnQgbWFzayAobG93IG5pYmJsZSkgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLX1NISUZUCTI4CisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSwkJMHgwRkZGRkYwMCAvKiBXaWxkIGZyYWMgbWFzayAqLworI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0tfU0hJRlQJOAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9ECQkweDAwMDAwMDQwIC8qIFN0b3AgbW9kICovCisjZGVmaW5lIFNTQl9QTVUwX1BMTENUTDIJCQkyCisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJCQkweDAwMDAwMDBGIC8qIFdpbGQgaW50IG1hc2sgKGhpZ2ggbmliYmxlKSAqLworI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISV9TSElGVAkwCisKKy8qIFBNVSByZXYgMSBQTEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDAJCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AxRElWCQkJMHgwMEYwMDAwMCAvKiBQMSBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDBfUDFESVZfU0hJRlQJCTIwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AyRElWCQkJMHgwRjAwMDAwMCAvKiBQMiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDBfUDJESVZfU0hJRlQJCTI0CisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDEJCQkxCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00xRElWCQkJMHgwMDAwMDBGRiAvKiBNMSBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTFESVZfU0hJRlQJCTAKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTJESVYJCQkweDAwMDBGRjAwIC8qIE0yIGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NMkRJVl9TSElGVAkJOAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NM0RJVgkJCTB4MDBGRjAwMDAgLyogTTMgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00zRElWX1NISUZUCQkxNgorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NNERJVgkJCTB4RkYwMDAwMDAgLyogTTQgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX000RElWX1NISUZUCQkyNAorI2RlZmluZSBTU0JfUE1VMV9QTExDVEwyCQkJMgorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNURJVgkJCTB4MDAwMDAwRkYgLyogTTUgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX001RElWX1NISUZUCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX002RElWCQkJMHgwMDAwRkYwMCAvKiBNNiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTTZESVZfU0hJRlQJCTgKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREUJCTB4MDAwRTAwMDAgLyogTkRJViBtb2RlICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFX1NISUZUCTE3CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlQJCTB4MUZGMDAwMDAgLyogTkRJViBpbnQgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVF9TSElGVAkJMjAKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMMwkJCTMKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUMJCTB4MDBGRkZGRkYgLyogTkRJViBmcmFjICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDX1NISUZUCTAKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMNAkJCTQKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMNQkJCTUKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWCQkweEZGRkZGRjAwIC8qIGNsayBkcnYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWX1NISUZUCQk4CisKKy8qIEJDTTQzMTIgUExMIHJlc291cmNlIG51bWJlcnMuICovCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9TV0lUQ0hFUl9CVVJTVAkJMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfU1dJVENIRVJfUFdNICAgIAkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9QQV9SRUZfTERPCQkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9DT1JFX0xET19CVVJTVAkJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQ09SRV9MRE9fUFdNCQk0CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9SQURJT19MRE8JCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0lMUF9SRVFVRVNUCQk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9CR19GSUxUQllQCQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9UWF9GSUxUQllQCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9SWF9GSUxUQllQCQk5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9YVEFMX1BVCQkJMTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0FMUF9BVkFJTAkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0JCX1BMTF9GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUkZfUExMX0ZJTFRCWVAJCTEzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9IVF9BVkFJTAkJMTQKKworLyogQkNNNDMyNSBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0JVQ0tfQk9PU1RfQlVSU1QJMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0JVQ0tfQlVSU1QJCTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NCVUNLX1BXTQkJMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0xET19DQlVDS19CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9DTERPX0NCVUNLX1BXTQkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQlVDS19CT09TVF9QV00JCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0lMUF9SRVFVRVNUCQk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9BQlVDS19CVVJTVAkJNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUJVQ0tfUFdNCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzFfUFUJCTkKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPMl9QVQkJMTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPM19QVQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPNF9QVQkJMTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1hUQUxfUFUJCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUxQX0FWQUlMCQkxNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfUlhfUFdSU1dfUFUJCTE1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9UWF9QV1JTV19QVQkJMTYKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1JGUExMX1BXUlNXX1BVCQkxNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfTE9HRU5fUFdSU1dfUFUJCTE4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9BRkVfUFdSU1dfUFUJCTE5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVQkJMjAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMCQkyMQorCisvKiBCQ000MzI4IFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTQkwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00JCTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX0JVUlNUCTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVAkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fU1dJVENIRVJfUFdNCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX0JVUlNUCTYKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JPTV9TV0lUQ0gJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1BBX1JFRl9MRE8JCTgKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX0xETwkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQUZFX0xETwkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9QTExfTERPCQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JHX0ZJTFRCWVAJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9UWF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUlhfRklMVEJZUAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1hUQUxfUFUJCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9FTgkJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfRklMVEJZUAkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JGX1BMTF9GSUxUQllQCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVCQkxOQorCisvKiBCQ001MzU0IFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfRVhUX1NXSVRDSEVSX1BXTQkwCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9TV0lUQ0hFUl9QV00JCTEKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX1NXSVRDSEVSX0JVUlNUCTIKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9JTFBfUkVRVUVTVAkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUkFESU9fU1dJVENIRVJfUFdNCTUKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX1NXSVRDSEVSX0JVUlNUCTYKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JPTV9TV0lUQ0gJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1BBX1JFRl9MRE8JCTgKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX0xETwkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQUZFX0xETwkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9QTExfTERPCQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JHX0ZJTFRCWVAJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9UWF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUlhfRklMVEJZUAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1hUQUxfUFUJCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfWFRBTF9FTgkJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfRklMVEJZUAkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JGX1BMTF9GSUxUQllQCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX1BVCQkxOQorCisKKworLyoqIENoaXAgc3BlY2lmaWMgQ2hpcC1TdGF0dXMgcmVnaXN0ZXIgY29udGVudHMuICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NQUk9NX09UUF9TRUwJMHgwMDAwMDAwMworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9ERUZDSVNfU0VMCQkwIC8qIE9UUCBpcyBwb3dlcmVkIHVwLCB1c2UgZGVmLiBDSVMsIG5vIFNQUk9NICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NQUk9NX1NFTAkJMSAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgU1BST00gaXMgcHJlc2VudCAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9PVFBfU0VMCQkyIC8qIE9UUCBpcyBwb3dlcmVkIHVwLCBubyBTUFJPTSAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9PVFBfUFdSRE4JCTMgLyogT1RQIGlzIHBvd2VyZWQgZG93biwgU1BST00gaXMgcHJlc2VudCAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TRElPX1VTQl9NT0RFCTB4MDAwMDAwMDQKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfU0RJT19VU0JfTU9ERV9TSElGVCAgMgorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTElECQkweDAwMDAwMDA4CisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1JDQUxfVkFMSURfU0hJRlQJMworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTFVFCQkweDAwMDAwMUYwCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1JDQUxfVkFMVUVfU0hJRlQJNAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9QTVVUT1BfMkIgCQkweDAwMDAwMjAwIC8qIDEgZm9yIDJiLCAwIGZvciB0byAyYSAqLwogCiAKIApAQCAtMzUzLDExICs1NTMsMjAgQEAKIHN0cnVjdCBzc2JfZGV2aWNlOwogc3RydWN0IHNzYl9zZXJpYWxfcG9ydDsKIAorLyogRGF0YSBmb3IgdGhlIFBNVSwgaWYgYXZhaWxhYmxlLgorICogQ2hlY2sgYXZhaWxhYmlsaXR5IHdpdGggKChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24pLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QTVUpCisgKi8KK3N0cnVjdCBzc2JfY2hpcGNvbW1vbl9wbXUgeworCXU4IHJldjsJCQkvKiBQTVUgcmV2aXNpb24gKi8KKwl1MzIgY3J5c3RhbGZyZXE7CS8qIFRoZSBhY3RpdmUgY3J5c3RhbCBmcmVxdWVuY3kgKGluIGtIeikgKi8KK307CisKIHN0cnVjdCBzc2JfY2hpcGNvbW1vbiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKIAl1MzIgY2FwYWJpbGl0aWVzOwogCS8qIEZhc3QgUG93ZXJ1cCBEZWxheSBjb25zdGFudCAqLwogCXUxNiBmYXN0X3B3cnVwX2RlbGF5OworCXN0cnVjdCBzc2JfY2hpcGNvbW1vbl9wbXUgcG11OwogfTsKIAogc3RhdGljIGlubGluZSBib29sIHNzYl9jaGlwY29fYXZhaWxhYmxlKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCkBAIC0zNjUsNiArNTc0LDE3IEBACiAJcmV0dXJuIChjYy0+ZGV2ICE9IE5VTEwpOwogfQogCisvKiBSZWdpc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUgY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KQlzc2JfcmVhZDMyKChjYyktPmRldiwgb2Zmc2V0KQorI2RlZmluZSBjaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCB2YWwpCXNzYl93cml0ZTMyKChjYyktPmRldiwgb2Zmc2V0LCB2YWwpCisKKyNkZWZpbmUgY2hpcGNvX21hc2szMihjYywgb2Zmc2V0LCBtYXNrKSBcCisJCWNoaXBjb193cml0ZTMyKGNjLCBvZmZzZXQsIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpCisjZGVmaW5lIGNoaXBjb19zZXQzMihjYywgb2Zmc2V0LCBzZXQpIFwKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSB8IChzZXQpKQorI2RlZmluZSBjaGlwY29fbWFza3NldDMyKGNjLCBvZmZzZXQsIG1hc2ssIHNldCkgXAorCQljaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCAoY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSAmIChtYXNrKSkgfCAoc2V0KSkKKwogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb21tb25faW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKIAogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb19zdXNwZW5kKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpOwpAQCAtNDA2LDQgKzYyNiw4IEBACiAJCQkJICBzdHJ1Y3Qgc3NiX3NlcmlhbF9wb3J0ICpwb3J0cyk7CiAjZW5kaWYgLyogQ09ORklHX1NTQl9TRVJJQUwgKi8KIAorLyogUE1VIHN1cHBvcnQgKi8KK2V4dGVybiB2b2lkIHNzYl9wbXVfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKKworCiAjZW5kaWYgLyogTElOVVhfU1NCX0NISVBDT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKaW5kZXggOTlhMGY5OS4uYTAxYjk4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCkBAIC0zMjYsNiArMzI2LDQyIEBACiAjZGVmaW5lICBTU0JfU1BST001X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KICNkZWZpbmUgIFNTQl9TUFJPTTVfR1BJT0JfUDNfU0hJRlQJOAogCisvKiBTUFJPTSBSZXZpc2lvbiA4ICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMTE8JCTB4MTA4NAkvKiBCb2FyZGZsYWdzIChsb3cgMTYgYml0cykgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9CRkxISQkJMHgxMDg2CS8qIEJvYXJkZmxhZ3MgSGkgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9JTDBNQUMJCTB4MTA4QwkvKiA2IGJ5dGUgTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9DQ09ERQkJMHgxMDkyCS8qIDIgYnl0ZSBjb3VudHJ5IGNvZGUgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTAkJMHgxMDlDICAvKiBBbnRlbm5hIGF2YWlsYWJsZSBiaXRmaWVsZHMqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0EJCTB4RkYwMAkvKiBBLVBIWSBiaXRmaWVsZCAqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0FfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0JHCQkweDAwRkYJLyogQi1QSFkgYW5kIEctUEhZIGJpdGZpZWxkICovCisjZGVmaW5lIFNTQl9TUFJPTThfQU5UQVZBSUxfQkdfU0hJRlQJMAorI2RlZmluZSBTU0JfU1BST004X0FHQUlOMDEJCTB4MTA5RQkvKiBBbnRlbm5hIEdhaW4gKGluIGRCbSBRNS4yKSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjAJCTB4MDBGRgkvKiBBbnRlbm5hIDAgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4wX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4xCQkweEZGMDAJLyogQW50ZW5uYSAxICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMV9TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfQUdBSU4yMwkJMHgxMEEwCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMgkJMHgwMEZGCS8qIEFudGVubmEgMiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjJfU0hJRlQJMAorI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjMJCTB4RkYwMAkvKiBBbnRlbm5hIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4zX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9HUElPQQkJMHgxMDk2CS8qR2VuLiBQdXJwb3NlIElPICMgMCBhbmQgMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQV9QMAkJMHgwMEZGCS8qIFBpbiAwICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9BX1AxCQkweEZGMDAJLyogUGluIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0FfUDFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0dQSU9CCQkweDEwOTgJLyogR2VuLiBQdXJwb3NlIElPICMgMiBhbmQgMyAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QMgkJMHgwMEZGCS8qIFBpbiAyICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQkcJCTB4MTBDMCAgLyogTWF4IFBvd2VyIEJHIGluIHBhdGggMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0sJMHgwMEZGICAvKiBNYXNrIGZvciBNYXggUG93ZXIgQkcgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQkcJCTB4RkYwMAkvKiBNYXNrIGZvciBwYXRoIDEgaXRzc2lfYmcgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQkdfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQQkJMHgxMEM4ICAvKiBNYXggUG93ZXIgQSBpbiBwYXRoIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9BX01BU0sJCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIEEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQQkJMHhGRjAwCS8qIE1hc2sgZm9yIHBhdGggMSBpdHNzaV9hICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQJOAogCiAvKiBWYWx1ZXMgZm9yIFNTQl9TUFJPTTFfQklORl9DQ09ERSAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0YWNrcHJvdGVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L3N0YWNrcHJvdGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZTU0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3RhY2twcm90ZWN0b3IuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9MSU5VWF9TVEFDS1BST1RFQ1RPUl9ICisjZGVmaW5lIF9MSU5VWF9TVEFDS1BST1RFQ1RPUl9IIDEKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorIyBpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYm9vdF9pbml0X3N0YWNrX2NhbmFyeSh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCmluZGV4IDJjNmZhZWMuLjBiMzAzODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKQEAgLTEsMTQgKzEsMTUgQEAKICNpZm5kZWYgX0xJTlVYX1NVU1BFTkRfSU9DVExTX0gKICNkZWZpbmUgX0xJTlVYX1NVU1BFTkRfSU9DVExTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwYXNzIHRoZSB2YWx1ZXMgbmVlZGVkIGZvciB0aGUgaWRlbnRpZmljYXRpb24KICAqIG9mIHRoZSByZXN1bWUgc3dhcCBhcmVhIGZyb20gYSB1c2VyIHNwYWNlIHRvIHRoZSBrZXJuZWwgdmlhIHRoZQogICogU05BUFNIT1RfU0VUX1NXQVBfQVJFQSBpb2N0bAogICovCiBzdHJ1Y3QgcmVzdW1lX3N3YXBfYXJlYSB7Ci0JbG9mZl90IG9mZnNldDsKLQl1X2ludDMyX3QgZGV2OworCV9fa2VybmVsX2xvZmZfdCBvZmZzZXQ7CisJX191MzIgZGV2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZSBTTkFQU0hPVF9JT0NfTUFHSUMJJzMnCkBAIC0yMCwxMyArMjEsMTMgQEAKICNkZWZpbmUgU05BUFNIT1RfUzJSQU0JCQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxMSkKICNkZWZpbmUgU05BUFNIT1RfU0VUX1NXQVBfQVJFQQkJX0lPVyhTTkFQU0hPVF9JT0NfTUFHSUMsIDEzLCBcCiAJCQkJCQkJc3RydWN0IHJlc3VtZV9zd2FwX2FyZWEpCi0jZGVmaW5lIFNOQVBTSE9UX0dFVF9JTUFHRV9TSVpFCQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTQsIGxvZmZfdCkKKyNkZWZpbmUgU05BUFNIT1RfR0VUX0lNQUdFX1NJWkUJCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxNCwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBTTkFQU0hPVF9QTEFURk9STV9TVVBQT1JUCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE1KQogI2RlZmluZSBTTkFQU0hPVF9QT1dFUl9PRkYJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE2KQogI2RlZmluZSBTTkFQU0hPVF9DUkVBVEVfSU1BR0UJCV9JT1coU05BUFNIT1RfSU9DX01BR0lDLCAxNywgaW50KQogI2RlZmluZSBTTkFQU0hPVF9QUkVGX0lNQUdFX1NJWkUJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTgpCi0jZGVmaW5lIFNOQVBTSE9UX0FWQUlMX1NXQVBfU0laRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTksIGxvZmZfdCkKLSNkZWZpbmUgU05BUFNIT1RfQUxMT0NfU1dBUF9QQUdFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAyMCwgbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkUJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE5LCBfX2tlcm5lbF9sb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMjAsIF9fa2VybmVsX2xvZmZfdCkKICNkZWZpbmUgU05BUFNIT1RfSU9DX01BWE5SCTIwCiAKICNlbmRpZiAvKiBfTElOVVhfU1VTUEVORF9JT0NUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggMzlkNDcxZC4uZTc2ZDNiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC00OTAsNiArNDkwLDcgQEAKIAlORVRfSVBWNF9DT05GX0FSUF9JR05PUkU9MTksCiAJTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTPTIwLAogCU5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVD0yMSwKKwlORVRfSVBWNF9DT05GX0FSUF9OT1RJRlk9MjIsCiAJX19ORVRfSVBWNF9DT05GX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggZmU3N2UxNC4uOWQ1MDc4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC02OSwxNiArNjksMTYgQEAKICNkZWZpbmUgdGNwX2ZsYWdfd29yZCh0cCkgKCAoKHVuaW9uIHRjcF93b3JkX2hkciAqKSh0cCkpLT53b3JkcyBbM10pIAogCiBlbnVtIHsgCi0JVENQX0ZMQUdfQ1dSID0gX19jb25zdGFudF9odG9ubCgweDAwODAwMDAwKSwgCi0JVENQX0ZMQUdfRUNFID0gX19jb25zdGFudF9odG9ubCgweDAwNDAwMDAwKSwgCi0JVENQX0ZMQUdfVVJHID0gX19jb25zdGFudF9odG9ubCgweDAwMjAwMDAwKSwgCi0JVENQX0ZMQUdfQUNLID0gX19jb25zdGFudF9odG9ubCgweDAwMTAwMDAwKSwgCi0JVENQX0ZMQUdfUFNIID0gX19jb25zdGFudF9odG9ubCgweDAwMDgwMDAwKSwgCi0JVENQX0ZMQUdfUlNUID0gX19jb25zdGFudF9odG9ubCgweDAwMDQwMDAwKSwgCi0JVENQX0ZMQUdfU1lOID0gX19jb25zdGFudF9odG9ubCgweDAwMDIwMDAwKSwgCi0JVENQX0ZMQUdfRklOID0gX19jb25zdGFudF9odG9ubCgweDAwMDEwMDAwKSwKLQlUQ1BfUkVTRVJWRURfQklUUyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwRjAwMDAwMCksCi0JVENQX0RBVEFfT0ZGU0VUID0gX19jb25zdGFudF9odG9ubCgweEYwMDAwMDAwKQorCVRDUF9GTEFHX0NXUiA9IF9fY3B1X3RvX2JlMzIoMHgwMDgwMDAwMCksCisJVENQX0ZMQUdfRUNFID0gX19jcHVfdG9fYmUzMigweDAwNDAwMDAwKSwKKwlUQ1BfRkxBR19VUkcgPSBfX2NwdV90b19iZTMyKDB4MDAyMDAwMDApLAorCVRDUF9GTEFHX0FDSyA9IF9fY3B1X3RvX2JlMzIoMHgwMDEwMDAwMCksCisJVENQX0ZMQUdfUFNIID0gX19jcHVfdG9fYmUzMigweDAwMDgwMDAwKSwKKwlUQ1BfRkxBR19SU1QgPSBfX2NwdV90b19iZTMyKDB4MDAwNDAwMDApLAorCVRDUF9GTEFHX1NZTiA9IF9fY3B1X3RvX2JlMzIoMHgwMDAyMDAwMCksCisJVENQX0ZMQUdfRklOID0gX19jcHVfdG9fYmUzMigweDAwMDEwMDAwKSwKKwlUQ1BfUkVTRVJWRURfQklUUyA9IF9fY3B1X3RvX2JlMzIoMHgwRjAwMDAwMCksCisJVENQX0RBVEFfT0ZGU0VUID0gX19jcHVfdG9fYmUzMigweEYwMDAwMDAwKQogfTsgCiAKIC8qIFRDUCBzb2NrZXQgb3B0aW9ucyAqLwpAQCAtMjE4LDcgKzIxOCw2IEBACiAJCXNuZF93c2NhbGUgOiA0LAkvKiBXaW5kb3cgc2NhbGluZyByZWNlaXZlZCBmcm9tIHNlbmRlcgkqLwogCQlyY3Zfd3NjYWxlIDogNDsJLyogV2luZG93IHNjYWxpbmcgdG8gc2VuZCB0byByZWNlaXZlcgkqLwogLyoJU0FDS3MgZGF0YQkqLwotCXU4CWVmZl9zYWNrczsJLyogU2l6ZSBvZiBTQUNLIGFycmF5IHRvIHNlbmQgd2l0aCBuZXh0IHBhY2tldCAqLwogCXU4CW51bV9zYWNrczsJLyogTnVtYmVyIG9mIFNBQ0sgYmxvY2tzCQkqLwogCXUxNgl1c2VyX21zczsgIAkvKiBtc3MgcmVxdWVzdGVkIGJ5IHVzZXIgaW4gaW9jdGwgKi8KIAl1MTYJbXNzX2NsYW1wOwkvKiBNYXhpbWFsIG1zcywgbmVnb3RpYXRlZCBhdCBjb25uZWN0aW9uIHNldHVwICovCkBAIC0yNDksNyArMjQ4LDcgQEAKIAkvKiBpbmV0X2Nvbm5lY3Rpb25fc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciBvZiB0Y3Bfc29jayAqLwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jawlpbmV0X2Nvbm47CiAJdTE2CXRjcF9oZWFkZXJfbGVuOwkvKiBCeXRlcyBvZiB0Y3AgaGVhZGVyIHRvIHNlbmQJCSovCi0JdTE2CXhtaXRfc2l6ZV9nb2FsOwkvKiBHb2FsIGZvciBzZWdtZW50aW5nIG91dHB1dCBwYWNrZXRzCSovCisJdTE2CXhtaXRfc2l6ZV9nb2FsX3NlZ3M7IC8qIEdvYWwgZm9yIHNlZ21lbnRpbmcgb3V0cHV0IHBhY2tldHMgKi8KIAogLyoKICAqCUhlYWRlciBwcmVkaWN0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IGZiYmQyYTEuLjI0MmY2MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0xMiwxNCArMTIsMTQgQEAKICNpZm5kZWYgX1NUUlVDVF9USU1FU1BFQwogI2RlZmluZSBfU1RSVUNUX1RJTUVTUEVDCiBzdHJ1Y3QgdGltZXNwZWMgewotCXRpbWVfdAl0dl9zZWM7CQkvKiBzZWNvbmRzICovCi0JbG9uZwl0dl9uc2VjOwkvKiBuYW5vc2Vjb25kcyAqLworCV9fa2VybmVsX3RpbWVfdAl0dl9zZWM7CQkJLyogc2Vjb25kcyAqLworCWxvbmcJCXR2X25zZWM7CQkvKiBuYW5vc2Vjb25kcyAqLwogfTsKICNlbmRpZgogCiBzdHJ1Y3QgdGltZXZhbCB7Ci0JdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCi0Jc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCisJX19rZXJuZWxfdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCisJX19rZXJuZWxfc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCiB9OwogCiBzdHJ1Y3QgdGltZXpvbmUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lY29tcGFyZS5oIGIvaW5jbHVkZS9saW51eC90aW1lY29tcGFyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmUyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVjb21wYXJlLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBVdGlsaXR5IGNvZGUgd2hpY2ggaGVscHMgdHJhbnNmb3JtaW5nIGJldHdlZW4gdHdvIGRpZmZlcmVudCB0aW1lCisgKiBiYXNlcywgY2FsbGVkICJzb3VyY2UiIGFuZCAidGFyZ2V0IiB0aW1lIGluIHRoaXMgY29kZS4KKyAqCisgKiBTb3VyY2UgdGltZSBoYXMgdG8gYmUgcHJvdmlkZWQgdmlhIHRoZSB0aW1lY291bnRlciBBUEkgd2hpbGUgdGFyZ2V0CisgKiB0aW1lIGlzIGFjY2Vzc2VkIHZpYSBhIGZ1bmN0aW9uIGNhbGxiYWNrIHdob3NlIHByb3RvdHlwZQorICogaW50ZW50aW9uYWxseSBtYXRjaGVzIGt0aW1lX2dldCgpIGFuZCBrdGltZV9nZXRfcmVhbCgpLiBUaGVzZQorICogaW50ZXJmYWNlcyB3aGVyZSBjaG9zZW4gbGlrZSB0aGlzIHNvIHRoYXQgdGhlIGNvZGUgc2VydmVzIGl0cworICogaW5pdGlhbCBwdXJwb3NlIHdpdGhvdXQgYWRkaXRpb25hbCBnbHVlIGNvZGUuCisgKgorICogVGhpcyBwdXJwb3NlIGlzIHN5bmNocm9uaXppbmcgYSBoYXJkd2FyZSBjbG9jayBpbiBhIE5JQyB3aXRoIHN5c3RlbQorICogdGltZSwgaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQLAorICogSUVFRTE1ODgpIHdpdGggbW9yZSBhY2N1cmF0ZSBoYXJkd2FyZSBhc3Npc3RlZCB0aW1lIHN0YW1waW5nLiAgSW4KKyAqIHRoYXQgY29udGV4dCBvbmx5IHN5bmNocm9uaXphdGlvbiBhZ2FpbnN0IHN5c3RlbSB0aW1lICg9CisgKiBrdGltZV9nZXRfcmVhbCgpKSBpcyBjdXJyZW50bHkgbmVlZGVkLiBCdXQgdGhpcyB1dGlsaXR5IGNvZGUgbWlnaHQKKyAqIGJlY29tZSB1c2VmdWwgaW4gb3RoZXIgc2l0dWF0aW9ucywgd2hpY2ggaXMgd2h5IGl0IHdhcyB3cml0dGVuIGFzCisgKiBnZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSBjb2RlLgorICoKKyAqIFRoZSBzb3VyY2UgdGltZWNvdW50ZXIgaXMgYXNzdW1lZCB0byByZXR1cm4gbW9ub3RvbmljYWxseQorICogaW5jcmVhc2luZyB0aW1lIChidXQgdGhpcyBjb2RlIGRvZXMgaXRzIGJlc3QgdG8gY29tcGVuc2F0ZSBpZiB0aGF0CisgKiBpcyBub3QgdGhlIGNhc2UpIHdoZXJlYXMgdGFyZ2V0IHRpbWUgbWF5IGp1bXAuCisgKgorICogVGhlIHRhcmdldCB0aW1lIGNvcnJlc3BvbmRpbmcgdG8gYSBzb3VyY2UgdGltZSBpcyBkZXRlcm1pbmVkIGJ5CisgKiByZWFkaW5nIHRhcmdldCB0aW1lLCByZWFkaW5nIHNvdXJjZSB0aW1lLCByZWFkaW5nIHRhcmdldCB0aW1lCisgKiBhZ2FpbiwgdGhlbiBhc3N1bWluZyB0aGF0IGF2ZXJhZ2UgdGFyZ2V0IHRpbWUgY29ycmVzcG9uZHMgdG8gc291cmNlCisgKiB0aW1lLiBJbiBvdGhlciB3b3JkcywgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCByZWFkaW5nIHRoZSBzb3VyY2UKKyAqIHRpbWUgaXMgc2xvdyBhbmQgaW52b2x2ZXMgZXF1YWwgdGltZSBmb3Igc2VuZGluZyB0aGUgcmVxdWVzdCBhbmQKKyAqIHJlY2VpdmluZyB0aGUgcmVwbHksIHdoZXJlYXMgcmVhZGluZyB0YXJnZXQgdGltZSBpcyBhc3N1bWVkIHRvIGJlCisgKiBmYXN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisjaWZuZGVmIF9MSU5VWF9USU1FQ09NUEFSRV9ICisjZGVmaW5lIF9MSU5VWF9USU1FQ09NUEFSRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisKKy8qKgorICogc3RydWN0IHRpbWVjb21wYXJlIC0gc3RvcmVzIHN0YXRlIGFuZCBjb25maWd1cmF0aW9uIGZvciB0aGUgdHdvIGNsb2NrcworICoKKyAqIEluaXRpYWxpemUgdG8gemVybywgdGhlbiBzZXQgc291cmNlL3RhcmdldC9udW1fc2FtcGxlcy4KKyAqCisgKiBUcmFuc2Zvcm1hdGlvbiBiZXR3ZWVuIHNvdXJjZSB0aW1lIGFuZCB0YXJnZXQgdGltZSBpcyBkb25lIHdpdGg6CisgKiB0YXJnZXRfdGltZSA9IHNvdXJjZV90aW1lICsgb2Zmc2V0ICsKKyAqICAgICAgICAgICAgICAgKHNvdXJjZV90aW1lIC0gbGFzdF91cGRhdGUpICogc2tldyAvCisgKiAgICAgICAgICAgICAgIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTgorICoKKyAqIEBzb3VyY2U6ICAgICAgICAgIHVzZWQgdG8gZ2V0IHNvdXJjZSB0aW1lIHN0YW1wcyB2aWEgdGltZWNvdW50ZXJfcmVhZCgpCisgKiBAdGFyZ2V0OiAgICAgICAgICBmdW5jdGlvbiByZXR1cm5pbmcgdGFyZ2V0IHRpbWUgKGZvciBleGFtcGxlLCBrdGltZV9nZXQKKyAqICAgICAgICAgICAgICAgICAgIGZvciBtb25vdG9uaWMgdGltZSwgb3Iga3RpbWVfZ2V0X3JlYWwgZm9yIHdhbGwgY2xvY2spCisgKiBAbnVtX3NhbXBsZXM6ICAgICBudW1iZXIgb2YgdGltZXMgdGhhdCBzb3VyY2UgdGltZSBhbmQgdGFyZ2V0IHRpbWUgYXJlIHRvCisgKiAgICAgICAgICAgICAgICAgICBiZSBjb21wYXJlZCB3aGVuIGRldGVybWluaW5nIHRoZWlyIG9mZnNldAorICogQG9mZnNldDogICAgICAgICAgKHRhcmdldCB0aW1lIC0gc291cmNlIHRpbWUpIGF0IHRoZSB0aW1lIG9mIHRoZSBsYXN0IHVwZGF0ZQorICogQHNrZXc6ICAgICAgICAgICAgYXZlcmFnZSAodGFyZ2V0IHRpbWUgLSBzb3VyY2UgdGltZSkgLyBkZWx0YSBzb3VyY2UgdGltZSAqCisgKiAgICAgICAgICAgICAgICAgICBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04KKyAqIEBsYXN0X3VwZGF0ZTogICAgIGxhc3Qgc291cmNlIHRpbWUgc3RhbXAgd2hlbiB0aW1lIG9mZnNldCB3YXMgbWVhc3VyZWQKKyAqLworc3RydWN0IHRpbWVjb21wYXJlIHsKKwlzdHJ1Y3QgdGltZWNvdW50ZXIgKnNvdXJjZTsKKwlrdGltZV90ICgqdGFyZ2V0KSh2b2lkKTsKKwlpbnQgbnVtX3NhbXBsZXM7CisKKwlzNjQgb2Zmc2V0OworCXM2NCBza2V3OworCXU2NCBsYXN0X3VwZGF0ZTsKK307CisKKy8qKgorICogdGltZWNvbXBhcmVfdHJhbnNmb3JtIC0gdHJhbnNmb3JtIHNvdXJjZSB0aW1lIHN0YW1wIGludG8gdGFyZ2V0IHRpbWUgYmFzZQorICogQHN5bmM6ICAgICAgICAgICAgY29udGV4dCBmb3IgdGltZSBzeW5jCisgKiBAc291cmNlX3RzdGFtcDogICB0aGUgcmVzdWx0IG9mIHRpbWVjb3VudGVyX3JlYWQoKSBvcgorICogICAgICAgICAgICAgICAgICAgdGltZWNvdW50ZXJfY3ljMnRpbWUoKQorICovCitleHRlcm4ga3RpbWVfdCB0aW1lY29tcGFyZV90cmFuc2Zvcm0oc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJCSAgICAgdTY0IHNvdXJjZV90c3RhbXApOworCisvKioKKyAqIHRpbWVjb21wYXJlX29mZnNldCAtIG1lYXN1cmUgY3VycmVudCAodGFyZ2V0IHRpbWUgLSBzb3VyY2UgdGltZSkgb2Zmc2V0CisgKiBAc3luYzogICAgICAgICAgICBjb250ZXh0IGZvciB0aW1lIHN5bmMKKyAqIEBvZmZzZXQ6ICAgICAgICAgIGF2ZXJhZ2Ugb2Zmc2V0IGR1cmluZyBzYW1wbGUgcGVyaW9kIHJldHVybmVkIGhlcmUKKyAqIEBzb3VyY2VfdHN0YW1wOiAgIGF2ZXJhZ2Ugc291cmNlIHRpbWUgZHVyaW5nIHNhbXBsZSBwZXJpb2QgcmV0dXJuZWQgaGVyZQorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgdXNlZC4gTWlnaHQgYmUgemVybyAoPSBubyByZXN1bHQpIGluIHRoZQorICogdW5saWtlbHkgY2FzZSB0aGF0IHRhcmdldCB0aW1lIHdhcyBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgZm9yIGFsbAorICogc2FtcGxlcyAoPSBicm9rZW4pLgorICovCitleHRlcm4gaW50IHRpbWVjb21wYXJlX29mZnNldChzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCQkgICAgICBzNjQgKm9mZnNldCwKKwkJCSAgICAgIHU2NCAqc291cmNlX3RzdGFtcCk7CisKK2V4dGVybiB2b2lkIF9fdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCQkgdTY0IHNvdXJjZV90c3RhbXApOworCisvKioKKyAqIHRpbWVjb21wYXJlX3VwZGF0ZSAtIHVwZGF0ZSBvZmZzZXQgYW5kIHNrZXcgYnkgbWVhc3VyaW5nIGN1cnJlbnQgb2Zmc2V0CisgKiBAc3luYzogICAgICAgICAgICBjb250ZXh0IGZvciB0aW1lIHN5bmMKKyAqIEBzb3VyY2VfdHN0YW1wOiAgIHRoZSByZXN1bHQgb2YgdGltZWNvdW50ZXJfcmVhZCgpIG9yCisgKiAgICAgICAgICAgICAgICAgICB0aW1lY291bnRlcl9jeWMydGltZSgpLCBwYXNzIHplcm8gdG8gZm9yY2UgdXBkYXRlCisgKgorICogVXBkYXRlcyBhcmUgb25seSBkb25lIGF0IG1vc3Qgb25jZSBwZXIgc2Vjb25kLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCQkgICAgICB1NjQgc291cmNlX3RzdGFtcCkKK3sKKwlpZiAoIXNvdXJjZV90c3RhbXAgfHwKKwkgICAgKHM2NCkoc291cmNlX3RzdGFtcCAtIHN5bmMtPmxhc3RfdXBkYXRlKSA+PSBOU0VDX1BFUl9TRUMpCisJCV9fdGltZWNvbXBhcmVfdXBkYXRlKHN5bmMsIHNvdXJjZV90c3RhbXApOworfQorCisjZW5kaWYgLyogX0xJTlVYX1RJTUVDT01QQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBkYWY5Njg1Li5lMmQ2NjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC04Niw4ICs4Niw4IEBACiAKIGV4dGVybiB2b2lkIGFkZF90aW1lcl9vbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGludCBjcHUpOwogZXh0ZXJuIGludCBkZWxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7Ci1leHRlcm4gaW50IF9fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKIGV4dGVybiBpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKK2V4dGVybiBpbnQgbW9kX3RpbWVyX3BlbmRpbmcoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwogCiAvKgogICogVGhlIGppZmZpZXMgdmFsdWUgd2hpY2ggaXMgYWRkZWQgdG8gbm93LCB3aGVuIHRoZXJlIGlzIG5vIHRpbWVyCkBAIC0xNDYsMjUgKzE0Niw3IEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBhZGRfdGltZXIgLSBzdGFydCBhIHRpbWVyCi0gKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBhZGRlZAotICoKLSAqIFRoZSBrZXJuZWwgd2lsbCBkbyBhIC0+ZnVuY3Rpb24oLT5kYXRhKSBjYWxsYmFjayBmcm9tIHRoZQotICogdGltZXIgaW50ZXJydXB0IGF0IHRoZSAtPmV4cGlyZXMgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhlCi0gKiBjdXJyZW50IHRpbWUgaXMgJ2ppZmZpZXMnLgotICoKLSAqIFRoZSB0aW1lcidzIC0+ZXhwaXJlcywgLT5mdW5jdGlvbiAoYW5kIGlmIHRoZSBoYW5kbGVyIHVzZXMgaXQsIC0+ZGF0YSkKLSAqIGZpZWxkcyBtdXN0IGJlIHNldCBwcmlvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogVGltZXJzIHdpdGggYW4gLT5leHBpcmVzIGZpZWxkIGluIHRoZSBwYXN0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG5leHQKLSAqIHRpbWVyIHRpY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQotewotCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSk7Ci0JX19tb2RfdGltZXIodGltZXIsIHRpbWVyLT5leHBpcmVzKTsKLX0KK2V4dGVybiB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogICBleHRlcm4gaW50IHRyeV90b19kZWxfdGltZXJfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oIGIvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RydWN0IHRpbWVyaW9tZW1fcm5nX2RhdGEgeworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJdW5zaWduZWQgaW50CQlwcmVzZW50OjE7CisKKwl1MzIgX19pb21lbQkJKmFkZHJlc3M7CisKKwkvKiBtZWFzdXJlcyBpbiB1c2VjcyAqLworCXVuc2lnbmVkIGludAkJcGVyaW9kOworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXMuaCBiL2luY2x1ZGUvbGludXgvdGltZXMuaAppbmRleCBlMmQzMDIwLi44N2I2MjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcy5oCkBAIC00LDEwICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHRtcyB7Ci0JY2xvY2tfdCB0bXNfdXRpbWU7Ci0JY2xvY2tfdCB0bXNfc3RpbWU7Ci0JY2xvY2tfdCB0bXNfY3V0aW1lOwotCWNsb2NrX3QgdG1zX2NzdGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc191dGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19zdGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19jdXRpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfY3N0aW1lOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggOTk4YTU1ZC4uYWEzNDc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtMTkwLDcgKzE5MCw3IEBACiAgKiBvZmZzZXQgYW5kIG1heGltdW0gZnJlcXVlbmN5IHRvbGVyYW5jZS4KICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KLSNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKKyNkZWZpbmUgUFBNX1NDQUxFICgoczY0KU5TRUNfUEVSX1VTRUMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX1VTRUMpKQogI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggZTYzMmQyOS4uYTE2YjllMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtMTkzLDUgKzE5MywxMSBAQAogI2lmbmRlZiB0b3BvbG9neV9jb3JlX3NpYmxpbmdzCiAjZGVmaW5lIHRvcG9sb2d5X2NvcmVfc2libGluZ3MoY3B1KQkJY3B1bWFza19vZl9jcHUoY3B1KQogI2VuZGlmCisjaWZuZGVmIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrCisjZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSkJCWNwdW1hc2tfb2YoY3B1KQorI2VuZGlmCisjaWZuZGVmIHRvcG9sb2d5X2NvcmVfY3B1bWFzaworI2RlZmluZSB0b3BvbG9neV9jb3JlX2NwdW1hc2soY3B1KQkJY3B1bWFza19vZihjcHUpCisjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RwbS5oIGIvaW5jbHVkZS9saW51eC90cG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM4YjNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cG0uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTGVlbmRlcnQgdmFuIERvb3JuIDxsZWVuZGVydEB3YXRzb24uaWJtLmNvbT4KKyAqIERhdmUgU2FmZm9yZCA8c2FmZm9yZEB3YXRzb24uaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqIERlYm9yYSBWZWxhcmRlIDxkdmVsYXJkZUB1cy5pYm0uY29tPgorICoKKyAqIE1haW50YWluZWQgYnk6IDx0cG1kZF9kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogRGV2aWNlIGRyaXZlciBmb3IgVENHL1RDUEEgVFBNICh0cnVzdGVkIHBsYXRmb3JtIG1vZHVsZSkuCisgKiBTcGVjaWZpY2F0aW9ucyBhdCB3d3cudHJ1c3RlZGNvbXB1dGluZ2dyb3VwLm9yZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9UUE1fSF9fCisjZGVmaW5lIF9fTElOVVhfVFBNX0hfXworCisvKgorICogQ2hpcCBudW0gaXMgdGhpcyB2YWx1ZSBvciBhIHZhbGlkIHRwbSBpZHgKKyAqLworI2RlZmluZQlUUE1fQU5ZX05VTSAweEZGRkYKKworI2lmIGRlZmluZWQoQ09ORklHX1RDR19UUE0pCisKK2V4dGVybiBpbnQgdHBtX3Bjcl9yZWFkKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKTsKK2V4dGVybiBpbnQgdHBtX3Bjcl9leHRlbmQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgY29uc3QgdTggKmhhc2gpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCA3MTJjYTUzLi41YWJlMzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0xLDYgKzEsOSBAQAogI2lmbmRlZiBfTElOVVhfVFlQRVNfSAogI2RlZmluZSBfTElOVVhfVFlQRVNfSAogCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaWZkZWYJX19LRVJORUxfXwogCiAjZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXApAQCAtOSw5ICsxMiw4IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisjaWZkZWYgX19LRVJORUxfXwogCiB0eXBlZGVmIF9fdTMyIF9fa2VybmVsX2Rldl90OwogCkBAIC0yOSw3ICszMSw2IEBACiB0eXBlZGVmIF9fa2VybmVsX2Nsb2NraWRfdAljbG9ja2lkX3Q7CiB0eXBlZGVmIF9fa2VybmVsX21xZF90CQltcWRfdDsKIAotI2lmZGVmIF9fS0VSTkVMX18KIHR5cGVkZWYgX0Jvb2wJCQlib29sOwogCiB0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QJdWlkX3Q7CkBAIC00NSwxNCArNDYsNiBAQAogdHlwZWRlZiBfX2tlcm5lbF9vbGRfZ2lkX3QJb2xkX2dpZF90OwogI2VuZGlmIC8qIENPTkZJR19VSUQxNiAqLwogCi0vKiBsaWJjNSBpbmNsdWRlcyB0aGlzIGZpbGUgdG8gZGVmaW5lIHVpZF90LCB0aHVzIHVpZF90IGNhbiBuZXZlciBjaGFuZ2UKLSAqIHdoZW4gaXQgaXMgaW5jbHVkZWQgYnkgbm9uLWtlcm5lbCBjb2RlCi0gKi8KLSNlbHNlCi10eXBlZGVmIF9fa2VybmVsX3VpZF90CQl1aWRfdDsKLXR5cGVkZWYgX19rZXJuZWxfZ2lkX3QJCWdpZF90OwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2lmIGRlZmluZWQoX19HTlVDX18pCiB0eXBlZGVmIF9fa2VybmVsX2xvZmZfdAkJbG9mZl90OwogI2VuZGlmCkBAIC0xNTQsNyArMTQ3LDcgQEAKICNkZWZpbmUgcGdvZmZfdCB1bnNpZ25lZCBsb25nCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fS0VSTkVMX1NUUklDVF9OQU1FUyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyoKICAqIEJlbG93IGFyZSB0cnVseSBMaW51eC1zcGVjaWZpYyB0eXBlcyB0aGF0IHNob3VsZCBuZXZlciBjb2xsaWRlIHdpdGgKQEAgLTIxMiw1ICsyMDUsNSBAQAogfTsKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLQorI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaAppbmRleCBhMGJiNmJkLi41ZGNjOWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogCiAvKioKICAqIHN0cnVjdCB1aW9fbWVtIC0gZGVzY3JpcHRpb24gb2YgYSBVSU8gbWVtb3J5IHJlZ2lvbgorICogQG5hbWU6CQluYW1lIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGZvciBpZGVudGlmaWNhdGlvbgogICogQGFkZHI6CQlhZGRyZXNzIG9mIHRoZSBkZXZpY2UncyBtZW1vcnkKICAqIEBzaXplOgkJc2l6ZSBvZiBJTwogICogQG1lbXR5cGU6CQl0eXBlIG9mIG1lbW9yeSBhZGRyIHBvaW50cyB0bwpAQCAtMjksNiArMzAsNyBAQAogICogQG1hcDoJCWZvciB1c2UgYnkgdGhlIFVJTyBjb3JlIG9ubHkuCiAgKi8KIHN0cnVjdCB1aW9fbWVtIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJaW50CQkJbWVtdHlwZTsKQEAgLTQyLDEyICs0NCwxNCBAQAogCiAvKioKICAqIHN0cnVjdCB1aW9fcG9ydCAtIGRlc2NyaXB0aW9uIG9mIGEgVUlPIHBvcnQgcmVnaW9uCisgKiBAbmFtZToJCW5hbWUgb2YgdGhlIHBvcnQgcmVnaW9uIGZvciBpZGVudGlmaWNhdGlvbgogICogQHN0YXJ0OgkJc3RhcnQgb2YgcG9ydCByZWdpb24KICAqIEBzaXplOgkJc2l6ZSBvZiBwb3J0IHJlZ2lvbgogICogQHBvcnR0eXBlOgkJdHlwZSBvZiBwb3J0IChzZWUgVUlPX1BPUlRfKiBiZWxvdykKICAqIEBwb3J0aW86CQlmb3IgdXNlIGJ5IHRoZSBVSU8gY29yZSBvbmx5LgogICovCiBzdHJ1Y3QgdWlvX3BvcnQgeworCWNvbnN0IGNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJaW50CQkJcG9ydHR5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA4ODA3OWZkLi5jNmIyYWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTY0MywxODYgKzY0Myw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qKgotICogdXNiX2VuZHBvaW50X251bSAtIGdldCB0aGUgZW5kcG9pbnQncyBudW1iZXIKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIEBlcGQncyBudW1iZXI6IDAgdG8gMTUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCi0gKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3R5cGUoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2Rpcl9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgSU4gZGlyZWN0aW9uCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIElOLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsaygKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBjb250cm9sIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgY29udHJvbCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCi0gKiBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19idWxrX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19idWxrX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pbnRfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBPVVQKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pc29jX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIElOCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX2luKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIFwKIAkJKFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKQogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9SQU5HRSBcCkBAIC0xMzU3LDggKzExNzcsOCBAQAogCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9mbGFnczsJLyogKGluKSBVUkJfU0hPUlRfTk9UX09LIHwgLi4uKi8KIAl2b2lkICp0cmFuc2Zlcl9idWZmZXI7CQkvKiAoaW4pIGFzc29jaWF0ZWQgZGF0YSBidWZmZXIgKi8KIAlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYTsJLyogKGluKSBkbWEgYWRkciBmb3IgdHJhbnNmZXJfYnVmZmVyICovCi0JaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CS8qIChpbikgZGF0YSBidWZmZXIgbGVuZ3RoICovCi0JaW50IGFjdHVhbF9sZW5ndGg7CQkvKiAocmV0dXJuKSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCisJdTMyIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CS8qIChpbikgZGF0YSBidWZmZXIgbGVuZ3RoICovCisJdTMyIGFjdHVhbF9sZW5ndGg7CQkvKiAocmV0dXJuKSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCiAJdW5zaWduZWQgY2hhciAqc2V0dXBfcGFja2V0OwkvKiAoaW4pIHNldHVwIHBhY2tldCAoY29udHJvbCBvbmx5KSAqLwogCWRtYV9hZGRyX3Qgc2V0dXBfZG1hOwkJLyogKGluKSBkbWEgYWRkciBmb3Igc2V0dXBfcGFja2V0ICovCiAJaW50IHN0YXJ0X2ZyYW1lOwkJLyogKG1vZGlmeSkgc3RhcnQgZnJhbWUgKElTTykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKaW5kZXggOWI0MmJhZS4uYjE0NTExOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogI2RlZmluZSBVU0JfUkVRX0xPT1BCQUNLX0RBVEFfUkVBRAkweDE2CiAjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRV9EUwkweDE3CiAKLS8qIFRoZSBMaW5rIFBvd2VyIE1hbmdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAorLyogVGhlIExpbmsgUG93ZXIgTWFuYWdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAogICogdXNlZCBieSBodWJzIHRvIHB1dCBwb3J0cyBpbnRvIGEgbmV3IEwxIHN1c3BlbmQgc3RhdGUsIGV4Y2VwdCB0aGF0IGl0CiAgKiBmb3Jnb3QgdG8gZGVmaW5lIGl0cyBudW1iZXIgLi4uCiAgKi8KQEAgLTM1Myw2ICszNTMsMTg1IEBACiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lOVAkJMwogI2RlZmluZSBVU0JfRU5EUE9JTlRfTUFYX0FESlVTVEFCTEUJMHg4MAogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9lbmRwb2ludF9udW0gLSBnZXQgdGhlIGVuZHBvaW50J3MgbnVtYmVyCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBAZXBkJ3MgbnVtYmVyOiAwIHRvIDE1LgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfbnVtKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3R5cGUgLSBnZXQgdGhlIGVuZHBvaW50J3MgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgb25lIG9mIFVTQl9FTkRQT0lOVF9YRkVSX3tDT05UUk9MLCBJU09DLCBCVUxLLCBJTlR9IGFjY29yZGluZworICogdG8gQGVwZCdzIHRyYW5zZmVyIHR5cGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF90eXBlKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIElOIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBJTiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfZGlyX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgT1VUIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBPVVQsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgYnVsaywgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSyk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgY29udHJvbCB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGNvbnRyb2wsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2ludCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaW50ZXJydXB0LCBvdGhlcndpc2UgaXQgcmV0dXJucworICogZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2ludCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaXNvY2hyb25vdXMsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaXNvYygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pbnRfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pc29jX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTg0LDggKzc2Myw4IEBACiAJLyogY2hhcHRlciA5IGFuZCBhdXRoZW50aWNhdGlvbiAod2lyZWxlc3MpIGRldmljZSBzdGF0ZXMgKi8KIAlVU0JfU1RBVEVfQVRUQUNIRUQsCiAJVVNCX1NUQVRFX1BPV0VSRUQsCQkJLyogd2lyZWQgKi8KLQlVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVELAkJLyogYXV0aCAqLwogCVVTQl9TVEFURV9SRUNPTk5FQ1RJTkcsCQkJLyogYXV0aCAqLworCVVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCQkvKiBhdXRoICovCiAJVVNCX1NUQVRFX0RFRkFVTFQsCQkJLyogbGltaXRlZCBmdW5jdGlvbiAqLwogCVVTQl9TVEFURV9BRERSRVNTLAogCVVTQl9TVEFURV9DT05GSUdVUkVELAkJCS8qIG1vc3QgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IDkzNWMzODAuLmFjZDdiMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC0yNDQsNiArMjQ0LDEwIEBACiAgKgl2YWx1ZTsgaXQgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCiAgKiBAdW5iaW5kOiBSZXZlcnNlcyBAYmluZCgpOyBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1bnJlZ2lzdGVyaW5nCiAgKgl0aGlzIGRyaXZlci4KKyAqIEBzdXNwZW5kOiBOb3RpZmllcyB3aGVuIHRoZSBob3N0IHN0b3BzIHNlbmRpbmcgVVNCIHRyYWZmaWMsCisgKglhZnRlciBmdW5jdGlvbiBub3RpZmljYXRpb25zCisgKiBAcmVzdW1lOiBOb3RpZmllcyBjb25maWd1cmF0aW9uIHdoZW4gdGhlIGhvc3QgcmVzdGFydHMgVVNCIHRyYWZmaWMsCisgKgliZWZvcmUgZnVuY3Rpb24gbm90aWZpY2F0aW9ucwogICoKICAqIERldmljZXMgZGVmYXVsdCB0byByZXBvcnRpbmcgc2VsZiBwb3dlcmVkIG9wZXJhdGlvbi4gIERldmljZXMgd2hpY2ggcmVseQogICogb24gYnVzIHBvd2VyZWQgb3BlcmF0aW9uIHNob3VsZCByZXBvcnQgdGhpcyBpbiB0aGVpciBAYmluZCgpIG1ldGhvZC4KQEAgLTI2OCw2ICsyNzIsMTAgQEAKIAogCWludAkJCSgqYmluZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwogCWludAkJCSgqdW5iaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CisKKwkvKiBnbG9iYWwgc3VzcGVuZCBob29rcyAqLworCXZvaWQJCQkoKnN1c3BlbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKKwl2b2lkCQkJKCpyZXN1bWUpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKIH07CiAKIGV4dGVybiBpbnQgdXNiX2NvbXBvc2l0ZV9yZWdpc3RlcihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCmluZGV4IDA0NjBhNzQuLmJiZjQ1ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCkBAIC01OTgsNiArNTk4LDcgQEAKIC8qKgogICogdXNiX2dhZGdldF92YnVzX2Nvbm5lY3QgLSBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZAogICogQGdhZGdldDpUaGUgZGV2aWNlIHdoaWNoIG5vdyBoYXMgVkJVUyBwb3dlci4KKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIFRoaXMgY2FsbCBpcyB1c2VkIGJ5IGEgZHJpdmVyIGZvciBhbiBleHRlcm5hbCB0cmFuc2NlaXZlciAob3IgR1BJTykKICAqIHRoYXQgZGV0ZWN0cyBhIFZCVVMgcG93ZXIgc2Vzc2lvbiBzdGFydGluZy4gIENvbW1vbiByZXNwb25zZXMgaW5jbHVkZQpAQCAtNjM2LDYgKzYzNyw3IEBACiAvKioKICAqIHVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0IC0gbm90aWZ5IGNvbnRyb2xsZXIgYWJvdXQgVkJVUyBzZXNzaW9uIGVuZAogICogQGdhZGdldDp0aGUgZGV2aWNlIHdob3NlIFZCVVMgc3VwcGx5IGlzIGJlaW5nIGRlc2NyaWJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgYnkgYSBkcml2ZXIgZm9yIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChvciBHUElPKQogICogdGhhdCBkZXRlY3RzIGEgVkJVUyBwb3dlciBzZXNzaW9uIGVuZGluZy4gIENvbW1vbiByZXNwb25zZXMgaW5jbHVkZQpAQCAtNzkyLDE5ICs3OTQsMjAgQEAKIC8qKgogICogdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIGdhZGdldCBkcml2ZXIKICAqIEBkcml2ZXI6dGhlIGRyaXZlciBiZWluZyByZWdpc3RlcmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBDYWxsIHRoaXMgaW4geW91ciBnYWRnZXQgZHJpdmVyJ3MgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLAogICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciBkcml2ZXIgYWJvdXQgeW91ciBkcml2ZXIuCiAgKiBUaGUgZHJpdmVyJ3MgYmluZCgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGJpbmQgaXQgdG8gYQogICogZ2FkZ2V0IGJlZm9yZSB0aGlzIHJlZ2lzdHJhdGlvbiBjYWxsIHJldHVybnMuICBJdCdzIGV4cGVjdGVkIHRoYXQKICAqIHRoZSBiaW5kKCkgZnVuY3Rpb25zIHdpbGwgYmUgaW4gaW5pdCBzZWN0aW9ucy4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOwogCiAvKioKICAqIHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgLSB1bnJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgogICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHVucmVnaXN0ZXJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogQ2FsbCB0aGlzIGluIHlvdXIgZ2FkZ2V0IGRyaXZlcidzIG1vZHVsZSBjbGVhbnVwIGZ1bmN0aW9uLAogICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciB0aGF0IHlvdXIgZHJpdmVyIGlzCkBAIC04MTMsNyArODE2LDYgQEAKICAqIHRvIHVuYmluZCgpIGFuZCBjbGVhbiB1cCBhbnkgZGV2aWNlIHN0YXRlLCBiZWZvcmUgdGhpcyBwcm9jZWR1cmUKICAqIGZpbmFsbHkgcmV0dXJucy4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgdW5iaW5kKCkgZnVuY3Rpb25zCiAgKiB3aWxsIGluIGluIGV4aXQgc2VjdGlvbnMsIHNvIG1heSBub3QgYmUgbGlua2VkIGluIHNvbWUga2VybmVscy4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL290Zy5oIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKaW5kZXggOTRkZjRmZS4uMWFhYTgyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKQEAgLTgwLDEyICs4MCwxNyBAQAogCiAvKiBmb3IgYm9hcmQtc3BlY2lmaWMgaW5pdCBsb2dpYyAqLwogZXh0ZXJuIGludCBvdGdfc2V0X3RyYW5zY2VpdmVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKik7CisjaWZkZWYgQ09ORklHX05PUF9VU0JfWENFSVYKK2V4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCB1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIodm9pZCk7CisjZW5kaWYKIAogCiAvKiBmb3IgdXNiIGhvc3QgYW5kIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzICovCiBleHRlcm4gc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnX2dldF90cmFuc2NlaXZlcih2b2lkKTsKIGV4dGVybiB2b2lkIG90Z19wdXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKIAorLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3N0YXJ0X2hucChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcpCiB7CkBAIC0xMDIsNiArMTA3LDggQEAKIAogCiAvKiBmb3IgdXNiIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzICovCisKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCB1c2JfZ2FkZ2V0ICpwZXJpcGgpCiB7CkBAIC0xMTQsNiArMTIxLDcgQEAKIAlyZXR1cm4gb3RnLT5zZXRfcG93ZXIob3RnLCBtQSk7CiB9CiAKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zZXRfc3VzcGVuZChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIGludCBzdXNwZW5kKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAppbmRleCA3ZjZjNjAzLi4yNTI2ZjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaApAQCAtMTYsNCArMTYsNyBAQAogLyogZGV2aWNlIGNhbid0IGhhbmRsZSBTZXQtSW50ZXJmYWNlIHJlcXVlc3RzICovCiAjZGVmaW5lIFVTQl9RVUlSS19OT19TRVRfSU5URgkJMHgwMDAwMDAwNAogCisvKiBkZXZpY2UgY2FuJ3QgaGFuZGxlIGl0cyBDb25maWd1cmF0aW9uIG9yIEludGVyZmFjZSBzdHJpbmdzICovCisjZGVmaW5lIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTCTB4MDAwMDAwMDgKKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX1FVSVJLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKaW5kZXggMGE2ZTZkNC4uMzc4MzZiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaApAQCAtNDksNDggKzQ5LDQ1IEBACiAgKi8KICNkZWZpbmUJUk5ESVNfQ09OVFJPTF9USU1FT1VUX01TCSg1ICogMTAwMCkKIAotCi0jZGVmaW5lIGNjcHUyIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIKLQotI2RlZmluZSBSTkRJU19NU0dfQ09NUExFVElPTgljY3B1MigweDgwMDAwMDAwKQorI2RlZmluZSBSTkRJU19NU0dfQ09NUExFVElPTgljcHVfdG9fbGUzMigweDgwMDAwMDAwKQogCiAvKiBjb2RlcyBmb3IgIm1zZ190eXBlIiBmaWVsZCBvZiBybmRpcyBtZXNzYWdlczsKICAqIG9ubHkgdGhlIGRhdGEgY2hhbm5lbCB1c2VzIHBhY2tldCBtZXNzYWdlcyAobWF5YmUgYmF0Y2hlZCk7CiAgKiBldmVyeXRoaW5nIGVsc2UgZ29lcyBvbiB0aGUgY29udHJvbCBjaGFubmVsLgogICovCi0jZGVmaW5lIFJORElTX01TR19QQUNLRVQJY2NwdTIoMHgwMDAwMDAwMSkJLyogMS1OIHBhY2tldHMgKi8KLSNkZWZpbmUgUk5ESVNfTVNHX0lOSVQJCWNjcHUyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFJORElTX01TR19QQUNLRVQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkJLyogMS1OIHBhY2tldHMgKi8KKyNkZWZpbmUgUk5ESVNfTVNHX0lOSVQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCiAjZGVmaW5lIFJORElTX01TR19JTklUX0MJKFJORElTX01TR19JTklUfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfSEFMVAkJY2NwdTIoMHgwMDAwMDAwMykKLSNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZCQljY3B1MigweDAwMDAwMDA0KQorI2RlZmluZSBSTkRJU19NU0dfSEFMVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQogI2RlZmluZSBSTkRJU19NU0dfUVVFUllfQwkoUk5ESVNfTVNHX1FVRVJZfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfU0VUCQljY3B1MigweDAwMDAwMDA1KQorI2RlZmluZSBSTkRJU19NU0dfU0VUCQljcHVfdG9fbGUzMigweDAwMDAwMDA1KQogI2RlZmluZSBSTkRJU19NU0dfU0VUX0MJCShSTkRJU19NU0dfU0VUfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfUkVTRVQJCWNjcHUyKDB4MDAwMDAwMDYpCisjZGVmaW5lIFJORElTX01TR19SRVNFVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNikKICNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUX0MJKFJORElTX01TR19SRVNFVHxSTkRJU19NU0dfQ09NUExFVElPTikKLSNkZWZpbmUgUk5ESVNfTVNHX0lORElDQVRFCWNjcHUyKDB4MDAwMDAwMDcpCi0jZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkUJY2NwdTIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUk5ESVNfTVNHX0lORElDQVRFCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKICNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRV9DCShSTkRJU19NU0dfS0VFUEFMSVZFfFJORElTX01TR19DT01QTEVUSU9OKQogCiAvKiBjb2RlcyBmb3IgInN0YXR1cyIgZmllbGQgb2YgY29tcGxldGlvbiBtZXNzYWdlcyAqLwotI2RlZmluZQlSTkRJU19TVEFUVVNfU1VDQ0VTUwkJY2NwdTIoMHgwMDAwMDAwMCkKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX0ZBSUxVUkUJCWNjcHUyKDB4YzAwMDAwMDEpCi0jZGVmaW5lCVJORElTX1NUQVRVU19JTlZBTElEX0RBVEEJY2NwdTIoMHhjMDAxMDAxNSkKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQJY2NwdTIoMHhjMDAwMDBiYikKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJY2NwdTIoMHg0MDAxMDAwYikKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QJY2NwdTIoMHg0MDAxMDAwYykKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX1NVQ0NFU1MJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lCVJORElTX1NUQVRVU19GQUlMVVJFCQljcHVfdG9fbGUzMigweGMwMDAwMDAxKQorI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCWNwdV90b19sZTMyKDB4YzAwMTAwMTUpCisjZGVmaW5lCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVECWNwdV90b19sZTMyKDB4YzAwMDAwYmIpCisjZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGIpCisjZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGMpCiAKIC8qIGNvZGVzIGZvciBPSURfR0VOX1BIWVNJQ0FMX01FRElVTSAqLwotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fVU5TUEVDSUZJRUQJY2NwdTIoMHgwMDAwMDAwMCkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTgljY3B1MigweDAwMDAwMDAxKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fQ0FCTEVfTU9ERU0JY2NwdTIoMHgwMDAwMDAwMikKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BIT05FX0xJTkUJY2NwdTIoMHgwMDAwMDAwMykKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BPV0VSX0xJTkUJY2NwdTIoMHgwMDAwMDAwNCkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0RTTAkJY2NwdTIoMHgwMDAwMDAwNSkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0ZJQlJFX0NIQU5ORUwJY2NwdTIoMHgwMDAwMDAwNikKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNXzEzOTQJCWNjcHUyKDB4MDAwMDAwMDcpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19XQU4JY2NwdTIoMHgwMDAwMDAwOCkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX01BWAkJY2NwdTIoMHgwMDAwMDAwOSkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1VOU1BFQ0lGSUVECWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19MQU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0NBQkxFX01PREVNCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9QSE9ORV9MSU5FCWNwdV90b19sZTMyKDB4MDAwMDAwMDMpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9QT1dFUl9MSU5FCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9EU0wJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9GSUJSRV9DSEFOTkVMCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV8xMzk0CQljcHVfdG9fbGUzMigweDAwMDAwMDA3KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfV0FOCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9NQVgJCWNwdV90b19sZTMyKDB4MDAwMDAwMDkpCiAKIHN0cnVjdCBybmRpc19kYXRhX2hkciB7CiAJX19sZTMyCW1zZ190eXBlOwkJLyogUk5ESVNfTVNHX1BBQ0tFVCAqLwpAQCAtMjI4LDI0ICsyMjUsMjQgQEAKICAqIHRoZXJlIGFyZSBnb2JzIG1vcmUgdGhhdCBtYXkgb3B0aW9uYWxseSBiZSBzdXBwb3J0ZWQuICBXZSdsbCBhdm9pZCBhcyBtdWNoCiAgKiBvZiB0aGF0IG1lc3MgYXMgcG9zc2libGUuCiAgKi8KLSNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCWNjcHUyKDB4MDEwMTAxMDEpCi0jZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFCWNjcHUyKDB4MDAwMTAxMDYpCi0jZGVmaW5lIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSCWNjcHUyKDB4MDAwMTAxMGUpCi0jZGVmaW5lIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNCQljY3B1MigweDAwMDEwMjAyKQorI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMSkKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUJY3B1X3RvX2xlMzIoMHgwMDAxMDEwNikKKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIJY3B1X3RvX2xlMzIoMHgwMDAxMDEwZSkKKyNkZWZpbmUgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0JCWNwdV90b19sZTMyKDB4MDAwMTAyMDIpCiAKIC8qIHBhY2tldCBmaWx0ZXIgYml0cyB1c2VkIGJ5IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICovCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQljY3B1MigweDAwMDAwMDAxKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCWNjcHUyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJCWNjcHUyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJY2NwdTIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcJY2NwdTIoMHgwMDAwMDAxMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJCWNjcHUyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1NNVAkJCWNjcHUyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTAkJY2NwdTIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfR1JPVVAJCQljY3B1MigweDAwMDAxMDAwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTAljY3B1MigweDAwMDAyMDAwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMCQljY3B1MigweDAwMDA0MDAwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUJCWNjcHUyKDB4MDAwMDgwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcJY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1NNVAkJCWNwdV90b19sZTMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfR1JPVVAJCQljcHVfdG9fbGUzMigweDAwMDAxMDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTAljcHVfdG9fbGUzMigweDAwMDAyMDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMCQljcHVfdG9fbGUzMigweDAwMDA0MDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUJCWNwdV90b19sZTMyKDB4MDAwMDgwMDApCiAKIC8qIGRlZmF1bHQgZmlsdGVyIHVzZWQgd2l0aCBSTkRJUyBkZXZpY2VzICovCiAjZGVmaW5lIFJORElTX0RFRkFVTFRfRklMVEVSICggXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAwYjg2MTdhLi5iOTU4NDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMTMwLDcgKzEzMCw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UJCSpkZXY7CiAJc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyCSp0eXBlOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlCQkqaW50ZXJmYWNlOwotCXVuc2lnbmVkIGNoYXIJCQlkaXNjb25uZWN0ZWQ7CisJdW5zaWduZWQgY2hhcgkJCWRpc2Nvbm5lY3RlZDoxOworCXVuc2lnbmVkIGNoYXIJCQlzdXNwZW5kaW5nOjE7CiAJdW5zaWduZWQgY2hhcgkJCW1pbm9yOwogCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydHM7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0X3BvaW50ZXJzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAppbmRleCA3ZDM4MjIyLi4zNmZhYmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaApAQCAtMTc2LDYgKzE3NiwxMSBAQAogCXNpemVfdAkJCWxlbmd0aDsKIH07CiAKK2V4dGVybiBpbnQgdXNibmV0X29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIGludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gaW50IHVzYm5ldF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiB2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiBpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KTsKIAogZXh0ZXJuIGludCB1c2JuZXRfZ2V0X2VuZHBvaW50cyhzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOwogZXh0ZXJuIHZvaWQgdXNibmV0X2RlZmVyX2tldmVudCAoc3RydWN0IHVzYm5ldCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaCBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKaW5kZXggMWVlYTFhYi4uM2QxNWZiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCkBAIC05NiwzOSArOTYsMjYgQEAKICNkZWZpbmUgVVNfUFJfQ0JJCTB4MDAJCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgKi8KICNkZWZpbmUgVVNfUFJfQ0IJMHgwMQkJLyogQ29udHJvbC9CdWxrIHcvbyBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgVVNfUFJfQlVMSwkweDUwCQkvKiBidWxrIG9ubHkgKi8KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKwogI2RlZmluZSBVU19QUl9VU0JBVAkweDgwCQkvKiBTQ00tQVRBUEkgYnJpZGdlICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CiAjZGVmaW5lIFVTX1BSX0VVU0JfU0REUjA5CTB4ODEJLyogU0NNLVNDU0kgYnJpZGdlIGZvciBTRERSLTA5ICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CiAjZGVmaW5lIFVTX1BSX1NERFI1NQkweDgyCQkvKiBTRERSLTU1IChtYWRlIHVwKSAqLwotI2VuZGlmCiAjZGVmaW5lIFVTX1BSX0RQQ01fVVNCICAweGYwCQkvKiBDb21iaW5hdGlvbiBDQi9TRERSMDkgKi8KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQogI2RlZmluZSBVU19QUl9GUkVFQ09NICAgMHhmMQkJLyogRnJlZWNvbSAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKICNkZWZpbmUgVVNfUFJfREFUQUZBQiAgIDB4ZjIJCS8qIERhdGFmYWIgY2hpcHNldHMgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAogI2RlZmluZSBVU19QUl9KVU1QU0hPVCAgMHhmMwkJLyogTGV4YXIgSnVtcHNob3QgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEKICNkZWZpbmUgVVNfUFJfQUxBVURBICAgIDB4ZjQJCS8qIEFsYXVkYSBjaGlwc2V0cyAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCiAjZGVmaW5lIFVTX1BSX0tBUk1BICAgICAweGY1CQkvKiBSaW8gS2FybWEgKi8KLSNlbmRpZgogCiAjZGVmaW5lIFVTX1BSX0RFVklDRQkweGZmCQkvKiBVc2UgZGV2aWNlJ3MgdmFsdWUgKi8KIAogLyoKICAqLworZXh0ZXJuIGludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3N0b3JhZ2VfdXNiX2lkc1tdOworCiAjaWZkZWYgQ09ORklHX1VTQl9MSUJVU1VBTAogCi1leHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RvcmFnZV91c2JfaWRzW107CiBleHRlcm4gdm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgdXNiX3VzdWFsX2NsZWFyX3ByZXNlbnQoaW50IHR5cGUpOwogZXh0ZXJuIGludCB1c2JfdXN1YWxfY2hlY2tfdHlwZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqLCBpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3V0aW1lLmggYi9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKaW5kZXggNjQwYmU2YS4uNWNkZjY3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91dGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXRpbWUuaApAQCAtNCw4ICs0LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0JdGltZV90IGFjdGltZTsKLQl0aW1lX3QgbW9kdGltZTsKKwlfX2tlcm5lbF90aW1lX3QgYWN0aW1lOworCV9fa2VybmVsX3RpbWVfdCBtb2R0aW1lOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDNlZmE4NmMuLjI0MjM0OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0yMiwxMSArMjIsMTkgQEAKICNkZWZpbmUgVklSVElPX05FVF9GX0hPU1RfRUNOCTEzCS8qIEhvc3QgY2FuIGhhbmRsZSBUU09bNl0gdy8gRUNOIGluLiAqLwogI2RlZmluZSBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JMTQJLyogSG9zdCBjYW4gaGFuZGxlIFVGTyBpbi4gKi8KICNkZWZpbmUgVklSVElPX05FVF9GX01SR19SWEJVRgkxNQkvKiBIb3N0IGNhbiBtZXJnZSByZWNlaXZlIGJ1ZmZlcnMuICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9TVEFUVVMJMTYJLyogdmlydGlvX25ldF9jb25maWcuc3RhdHVzIGF2YWlsYWJsZSAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9WUQkxNwkvKiBDb250cm9sIGNoYW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9DVFJMX1JYCTE4CS8qIENvbnRyb2wgY2hhbm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NUUkxfVkxBTgkxOQkvKiBDb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKworI2RlZmluZSBWSVJUSU9fTkVUX1NfTElOS19VUAkxCS8qIExpbmsgaXMgdXAgKi8KIAogc3RydWN0IHZpcnRpb19uZXRfY29uZmlnCiB7CiAJLyogVGhlIGNvbmZpZyBkZWZpbmluZyBtYWMgYWRkcmVzcyAoaWYgVklSVElPX05FVF9GX01BQykgKi8KIAlfX3U4IG1hY1s2XTsKKwkvKiBTZWUgVklSVElPX05FVF9GX1NUQVRVUyBhbmQgVklSVElPX05FVF9TXyogYWJvdmUgKi8KKwlfX3UxNiBzdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBUaGlzIGlzIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0LiAgSWYgeW91IGRvbid0CkBAIC01NCw0ICs2Miw2NyBAQAogCV9fdTE2IG51bV9idWZmZXJzOwkvKiBOdW1iZXIgb2YgbWVyZ2VkIHJ4IGJ1ZmZlcnMgKi8KIH07CiAKKy8qCisgKiBDb250cm9sIHZpcnRxdWV1ZSBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBUaGUgY29udHJvbCB2aXJ0cXVldWUgZXhwZWN0cyBhIGhlYWRlciBpbiB0aGUgZmlyc3Qgc2cgZW50cnkKKyAqIGFuZCBhbiBhY2svc3RhdHVzIHJlc3BvbnNlIGluIHRoZSBsYXN0IGVudHJ5LiAgRGF0YSBmb3IgdGhlCisgKiBjb21tYW5kIGdvZXMgaW4gYmV0d2Vlbi4KKyAqLworc3RydWN0IHZpcnRpb19uZXRfY3RybF9oZHIgeworCV9fdTggY2xhc3M7CisJX191OCBjbWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIF9fdTggdmlydGlvX25ldF9jdHJsX2FjazsKKworI2RlZmluZSBWSVJUSU9fTkVUX09LICAgICAwCisjZGVmaW5lIFZJUlRJT19ORVRfRVJSICAgIDEKKworLyoKKyAqIENvbnRyb2wgdGhlIFJYIG1vZGUsIGllLiBwcm9taXN1Y291cyBhbmQgYWxsbXVsdGkuICBQUk9NSVNDIGFuZAorICogQUxMTVVMVEkgY29tbWFuZHMgcmVxdWlyZSBhbiAib3V0IiBzZyBlbnRyeSBjb250YWluaW5nIGEgMSBieXRlCisgKiBzdGF0ZSB2YWx1ZSwgemVybyA9IGRpc2FibGUsIG5vbi16ZXJvID0gZW5hYmxlLiAgVGhlc2UgY29tbWFuZHMKKyAqIGFyZSBzdXBwb3J0ZWQgd2l0aCB0aGUgVklSVElPX05FVF9GX0NUUkxfUlggZmVhdHVyZS4KKyAqLworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlggICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYX1BST01JU0MgICAgICAwCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfQUxMTVVMVEkgICAgIDEKKworLyoKKyAqIENvbnRyb2wgdGhlIE1BQyBmaWx0ZXIgdGFibGUuCisgKgorICogVGhlIE1BQyBmaWx0ZXIgdGFibGUgaXMgbWFuYWdlZCBieSB0aGUgaHlwZXJ2aXNvciwgdGhlIGd1ZXN0IHNob3VsZAorICogYXNzdW1lIHRoZSBzaXplIGlzIGluZmluaXRlLiAgRmlsdGVyaW5nIHNob3VsZCBiZSBjb25zaWRlcmVkCisgKiBub24tcGVyZmVjdCwgaWUuIGJhc2VkIG9uIGh5cGVydmlzb3IgcmVzb3VyY2VzLCB0aGUgZ3Vlc3QgbWF5CisgKiByZWNlaXZlZCBwYWNrZXRzIGZyb20gc291cmNlcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBmaWx0ZXIgbGlzdC4KKyAqCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgY2xhc3MvY21kIGhlYWRlciwgdGhlIFRBQkxFX1NFVCBjb21tYW5kIHJlcXVpcmVzCisgKiB0d28gb3V0IHNjYXR0ZXJsaXN0cy4gIEVhY2ggY29udGFpbnMgYSA0IGJ5dGUgY291bnQgb2YgZW50cmllcyBmb2xsb3dlZAorICogYnkgYSBjb25jYXRlbmF0ZWQgYnl0ZSBzdHJlYW0gb2YgdGhlIEVUSF9BTEVOIE1BQyBhZGRyZXNzZXMuICBUaGUKKyAqIGZpcnN0IHNnIGxpc3QgY29udGFpbnMgdW5pY2FzdCBhZGRyZXNzZXMsIHRoZSBzZWNvbmQgaXMgZm9yIG11bHRpY2FzdC4KKyAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGlmIHRoZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWCBmZWF0dXJlCisgKiBpcyBhdmFpbGFibGUuCisgKi8KK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjIHsKKwlfX3UzMiBlbnRyaWVzOworCV9fdTggbWFjc1tdW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVklSVElPX05FVF9DVFJMX01BQyAgICAxCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCAgICAgICAgMAorCisvKgorICogQ29udHJvbCBWTEFOIGZpbHRlcmluZworICoKKyAqIFRoZSBWTEFOIGZpbHRlciB0YWJsZSBpcyBjb250cm9sbGVkIHZpYSBhIHNpbXBsZSBBREQvREVMIGludGVyZmFjZS4KKyAqIFZMQU4gSURzIG5vdCBhZGRlZCBtYXkgYmUgZmlsdGVyZCBieSB0aGUgaHlwZXJ2aXNvci4gIERlbCBpcyB0aGUKKyAqIG9wcG9zaXRlIG9mIGFkZC4gIEJvdGggY29tbWFuZHMgZXhwZWN0IGFuIG91dCBlbnRyeSBjb250YWluaW5nIGEgMgorICogYnl0ZSBWTEFOIElELiAgVkxBTiBmaWx0ZXJ0aW5nIGlzIGF2YWlsYWJsZSB3aXRoIHRoZQorICogVklSVElPX05FVF9GX0NUUkxfVkxBTiBmZWF0dXJlIGJpdC4KKyAqLworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTiAgICAgICAyCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTl9BREQgICAgICAgICAgICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1ZMQU5fREVMICAgICAgICAgICAgIDEKKwogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKaW5kZXggOWMwODkwYy4uYTQzZWJlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTk1LDYgKzk1LDkgQEAKIAogZXh0ZXJuIGludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LAogCQkJc3RydWN0IHBhZ2UgKioqcGFnZXMpOworZXh0ZXJuIGludCBtYXBfa2VybmVsX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKK2V4dGVybiB2b2lkIHVubWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIHVubWFwX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIC8qIEFsbG9jYXRlL2Rlc3Ryb3kgYSAndm1hbGxvYycgVk0gYXJlYS4gKi8KQEAgLTExMCw1ICsxMTMsNiBAQAogICovCiBleHRlcm4gcndsb2NrX3Qgdm1saXN0X2xvY2s7CiBleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqdm1saXN0OworZXh0ZXJuIF9faW5pdCB2b2lkIHZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHNpemVfdCBhbGlnbik7CiAKICNlbmRpZiAvKiBfTElOVVhfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKaW5kZXggYmEwYzQ5My4uYzcwM2UwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaApAQCAtMTc4LDcgKzE3OCw3IEBACiAJCVdBUk5fT04oMSk7CiAJfSBlbHNlCiAJCXNucHJpbnRmKGhlYWQsIGhlYWRfc2l6ZSwgIiVzICVzOiAiLAotCQkJIGRldl9kcml2ZXJfc3RyaW5nKGRldiksIGRldi0+YnVzX2lkKTsKKwkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXZfbmFtZShkZXYpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oIGIvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaAppbmRleCA3NDE5OGY1Li5kNTE0OGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCisrKyBiL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKQEAgLTIwNyw2ICsyMDcsNyBAQAogCUkyNDAwTV9QVF9UUkFDRSwJLyogRm9yIGRldmljZSBkZWJ1ZyAqLwogCUkyNDAwTV9QVF9SRVNFVF9XQVJNLAkvKiBkZXZpY2UgcmVzZXQgKi8KIAlJMjQwME1fUFRfUkVTRVRfQ09MRCwJLyogVVNCW3RyYW5zcG9ydF0gcmVzZXQsIGxpa2UgcmVjb25uZWN0ICovCisJSTI0MDBNX1BUX0VEQVRBLAkvKiBFeHRlbmRlZCBSWCBkYXRhICovCiAJSTI0MDBNX1BUX0lMTEVHQUwKIH07CiAKQEAgLTIyMSw2ICsyMjIsNDggQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIAorLyoKKyAqIFBheWxvYWQgZm9yIGFuIGV4dGVuZGVkIGRhdGEgcGFja2V0CisgKgorICogTmV3IGluIGZ3IHYxLjQKKyAqCisgKiBAcmVvcmRlcjogaWYgdGhpcyBwYXlsb2FkIGhhcyB0byBiZSByZW9yZGVyIG9yIG5vdCAoYW5kIGhvdykKKyAqIEBjczogdGhlIHR5cGUgb2YgZGF0YSBpbiB0aGUgcGFja2V0LCBhcyBkZWZpbmVkIHBlciAoODAyLjE2ZQorICogICAgIFQxMS4xMy4xOS4xKS4gQ3VycmVudGx5IG9ubHkgMiAoSVB2NCBwYWNrZXQpIHN1cHBvcnRlZC4KKyAqCisgKiBUaGlzIGlzIHByZWZpeGVkIHRvIGVhY2ggYW5kIGV2ZXJ5IElOQ09NSU5HIERBVEEgcGFja2V0LgorICovCitzdHJ1Y3QgaTI0MDBtX3BsX2VkYXRhX2hkciB7CisJX19sZTMyIHJlb3JkZXI7CQkvKiBiaXRzIGRlZmluZWQgaW4gaTI0MDBtX3JvICovCisJX191OCBjczsKKwlfX3U4IHJlc2VydmVkWzExXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK2VudW0gaTI0MDBtX2NzIHsKKwlJMjQwME1fQ1NfSVBWNF8wID0gMCwKKwlJMjQwME1fQ1NfSVBWNCA9IDIsCit9OworCitlbnVtIGkyNDAwbV9ybyB7CisJSTI0MDBNX1JPX05FRURFRCAgICAgPSAweDAxLAorCUkyNDAwTV9ST19UWVBFICAgICAgID0gMHgwMywKKwlJMjQwME1fUk9fVFlQRV9TSElGVCA9IDEsCisJSTI0MDBNX1JPX0NJTiAgICAgICAgPSAweDBmLAorCUkyNDAwTV9ST19DSU5fU0hJRlQgID0gNCwKKwlJMjQwME1fUk9fRkJOICAgICAgICA9IDB4MDdmZiwKKwlJMjQwME1fUk9fRkJOX1NISUZUICA9IDgsCisJSTI0MDBNX1JPX1NOICAgICAgICAgPSAweDA3ZmYsCisJSTI0MDBNX1JPX1NOX1NISUZUICAgPSAyMSwKK307CisKK2VudW0gaTI0MDBtX3JvX3R5cGUgeworCUkyNDAwTV9ST19UWVBFX1JFU0VUID0gMCwKKwlJMjQwME1fUk9fVFlQRV9QQUNLRVQsCisJSTI0MDBNX1JPX1RZUEVfV1MsCisJSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTLAorfTsKKworCiAvKiBNaXNjIGNvbnN0YW50cyAqLwogZW51bSB7CiAJSTI0MDBNX1BMX1BBRCA9IDE2LAkvKiBQYXlsb2FkIGRhdGEgc2l6ZSBhbGlnbm1lbnQgKi8KQEAgLTM4MSw2ICs0MjQsOSBAQAogCUkyNDAwTV9UTFZfUkZfU1RBVFVTID0gMTYzLAogCUkyNDAwTV9UTFZfREVWSUNFX1JFU0VUX1RZUEUgPSAxMzIsCiAJSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTID0gNjAxLAorCUkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCA9IDYxMSwKKwlJMjQwME1fVExWX0NPTkZJR19EMkhfREFUQV9GT1JNQVQgPSA2MTQsCisJSTI0MDBNX1RMVl9DT05GSUdfRExfSE9TVF9SRU9SREVSID0gNjE1LAogfTsKIAogCkBAIC01MDksNCArNTU1LDI3IEBACiAJX19sZTMyIG1lZGlhX3N0YXR1czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKworLyogTmV3IGluIHYxLjQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX19sZTMyIHRpbWVvdXQ7CS8qIDEwMCB0byAzMDAwMDAgbXMgWzVtaW5dLCAxMDAgaW5jcmVtZW50cworCQkJICogMCBkaXNhYmxlZCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTmV3IGluIHYxLjQgLS0gZm9yIGJhY2t3YXJkIGNvbXBhdCwgd2lsbCBiZSByZW1vdmVkICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZDJoX2RhdGFfZm9ybWF0IHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fdTggZm9ybWF0OyAJCS8qIDAgb2xkIGZvcm1hdCwgMSBlbmhhbmNlZCAqLworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBOZXcgaW4gdjEuNCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2RsX2hvc3RfcmVvcmRlciB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX3U4IHJlb3JkZXI7IAkJLyogMCBkaXNhYmxlZCwgMSBlbmFibGVkICovCisJX191OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKwogI2VuZGlmIC8qICNpZm5kZWYgX19MSU5VWF9fV0lNQVhfX0kyNDAwTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAppbmRleCBkNzk1OGY5Li5jYjI0MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCkBAIC01NzcsMTggKzU3NywyMiBAQAogI2RlZmluZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MCTgKICNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0NPTlRST0wJCTkKICNkZWZpbmUgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQJCTEwCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQJMTEKKyNkZWZpbmUgSVdfQVVUSF9NRlAJCQkxMgogCiAvKiBJV19BVVRIX1dQQV9WRVJTSU9OIHZhbHVlcyAoYml0IGZpZWxkKSAqLwogI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVECTB4MDAwMDAwMDEKICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEJCTB4MDAwMDAwMDIKICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEyCTB4MDAwMDAwMDQKIAotLyogSVdfQVVUSF9QQUlSV0lTRV9DSVBIRVIgYW5kIElXX0FVVEhfR1JPVVBfQ0lQSEVSIHZhbHVlcyAoYml0IGZpZWxkKSAqLworLyogSVdfQVVUSF9QQUlSV0lTRV9DSVBIRVIsIElXX0FVVEhfR1JPVVBfQ0lQSEVSLCBhbmQgSVdfQVVUSF9DSVBIRVJfR1JPVVBfTUdNVAorICogdmFsdWVzIChiaXQgZmllbGQpICovCiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX05PTkUJMHgwMDAwMDAwMQogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9XRVA0MAkweDAwMDAwMDAyCiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1RLSVAJMHgwMDAwMDAwNAogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9DQ01QCTB4MDAwMDAwMDgKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfV0VQMTA0CTB4MDAwMDAwMTAKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfQUVTX0NNQUMJMHgwMDAwMDAyMAogCiAvKiBJV19BVVRIX0tFWV9NR01UIHZhbHVlcyAoYml0IGZpZWxkKSAqLwogI2RlZmluZSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWAkxCkBAIC02MDQsNiArNjA4LDExIEBACiAjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19ESVNBQkxFCTEJLyogdXNlciBzcGFjZSBwcm9ncmFtIHVzZWQgZm9yIHJvYW1pbmcKIAkJCQkJICogY29udHJvbCAqLwogCisvKiBJV19BVVRIX01GUCAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSB2YWx1ZXMgKi8KKyNkZWZpbmUgSVdfQVVUSF9NRlBfRElTQUJMRUQJMAkvKiBNRlAgZGlzYWJsZWQgKi8KKyNkZWZpbmUgSVdfQVVUSF9NRlBfT1BUSU9OQUwJMQkvKiBNRlAgb3B0aW9uYWwgKi8KKyNkZWZpbmUgSVdfQVVUSF9NRlBfUkVRVUlSRUQJMgkvKiBNRlAgcmVxdWlyZWQgKi8KKwogLyogU0lPQ1NJV0VOQ09ERUVYVCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBJV19FTkNPREVfU0VRX01BWF9TSVpFCTgKIC8qIHN0cnVjdCBpd19lbmNvZGVfZXh0IC0+YWxnICovCkBAIC02MTIsNiArNjIxLDcgQEAKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19US0lQCTIKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19DQ01QCTMKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19QTUsJNAorI2RlZmluZSBJV19FTkNPREVfQUxHX0FFU19DTUFDCTUKIC8qIHN0cnVjdCBpd19lbmNvZGVfZXh0IC0+ZXh0X2ZsYWdzICovCiAjZGVmaW5lIElXX0VOQ09ERV9FWFRfVFhfU0VRX1ZBTElECTB4MDAwMDAwMDEKICNkZWZpbmUgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQJMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ZnJtLmggYi9pbmNsdWRlL2xpbnV4L3hmcm0uaAppbmRleCA1MmYzYWJkLi4yZDRlYzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hmcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3hmcm0uaApAQCAtNTgsNyArNTgsNyBAQAogCV9fdTgJcHJlZml4bGVuX3M7CiAJX191OAlwcm90bzsKIAlpbnQJaWZpbmRleDsKLQl1aWRfdAl1c2VyOworCV9fa2VybmVsX3VpZDMyX3QJdXNlcjsKIH07CiAKICNkZWZpbmUgWEZSTV9JTkYgKH4oX191NjQpMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaCBiL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaAppbmRleCBkNDA5ZDQ4Li44Mzc2YmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCkBAIC0xNiwzMyArMTYsMzMgQEAKIC8qIEJsb2NrIENvbnRyb2wgSW5mb3JtYXRpb24gKi8KIAogc3RydWN0IGluZnRsX2JjaSB7Ci0JdWludDhfdCBFQ0NzaWdbNl07Ci0JdWludDhfdCBTdGF0dXM7Ci0JdWludDhfdCBTdGF0dXMxOworCV9fdTggRUNDc2lnWzZdOworCV9fdTggU3RhdHVzOworCV9fdTggU3RhdHVzMTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBpbmZ0bF91bml0aGVhZDEgewotCXVpbnQxNl90IHZpcnR1YWxVbml0Tm87Ci0JdWludDE2X3QgcHJldlVuaXRObzsKLQl1aW50OF90IEFOQUM7Ci0JdWludDhfdCBOQUNzOwotCXVpbnQ4X3QgcGFyaXR5UGVyRmllbGQ7Ci0JdWludDhfdCBkaXNjYXJkZWQ7CisJX191MTYgdmlydHVhbFVuaXRObzsKKwlfX3UxNiBwcmV2VW5pdE5vOworCV9fdTggQU5BQzsKKwlfX3U4IE5BQ3M7CisJX191OCBwYXJpdHlQZXJGaWVsZDsKKwlfX3U4IGRpc2NhcmRlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBpbmZ0bF91bml0aGVhZDIgewotCXVpbnQ4X3QgcGFyaXR5UGVyRmllbGQ7Ci0JdWludDhfdCBBTkFDOwotCXVpbnQxNl90IHByZXZVbml0Tm87Ci0JdWludDE2X3QgdmlydHVhbFVuaXRObzsKLQl1aW50OF90IE5BQ3M7Ci0JdWludDhfdCBkaXNjYXJkZWQ7CisJX191OCBwYXJpdHlQZXJGaWVsZDsKKwlfX3U4IEFOQUM7CisJX191MTYgcHJldlVuaXRObzsKKwlfX3UxNiB2aXJ0dWFsVW5pdE5vOworCV9fdTggTkFDczsKKwlfX3U4IGRpc2NhcmRlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBpbmZ0bF91bml0dGFpbCB7Ci0JdWludDhfdCBSZXNlcnZlZFs0XTsKLQl1aW50MTZfdCBFcmFzZU1hcms7Ci0JdWludDE2X3QgRXJhc2VNYXJrMTsKKwlfX3U4IFJlc2VydmVkWzRdOworCV9fdTE2IEVyYXNlTWFyazsKKwlfX3UxNiBFcmFzZU1hcmsxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gaW5mdGxfdWNpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaCBiL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaAppbmRleCAwMDE2ODVkLi5mYTk0YjBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCkBAIC03LDYgKzcsNyBAQAogCiAvKiBUaGlzIGZpbGUgaXMgYmxlc3NlZCBmb3IgaW5jbHVzaW9uIGJ5IHVzZXJzcGFjZSAqLwogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxlbmRpYW4uaD4KICNpbmNsdWRlIDxieXRlc3dhcC5oPgogCkBAIC0xOSw4ICsyMCw4IEBACiAKIGV4dGVybiBpbnQgdGFyZ2V0X2VuZGlhbjsKIAotI2RlZmluZSB0MTYoeCkgKHsgdWludDE2X3QgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMTYoX19iKTsgfSkKLSNkZWZpbmUgdDMyKHgpICh7IHVpbnQzMl90IF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzMyKF9fYik7IH0pCisjZGVmaW5lIHQxNih4KSAoeyBfX3UxNiBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8xNihfX2IpOyB9KQorI2RlZmluZSB0MzIoeCkgKHsgX191MzIgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMzIoX19iKTsgfSkKIAogI2RlZmluZSBjcHVfdG9famUxNih4KSAoKGppbnQxNl90KXt0MTYoeCl9KQogI2RlZmluZSBjcHVfdG9famUzMih4KSAoKGppbnQzMl90KXt0MzIoeCl9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCmluZGV4IGM2YzYxY2QuLmI2NTk1YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaAorKysgYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKQEAgLTUsMTQgKzUsMTYgQEAKICNpZm5kZWYgX19NVERfQUJJX0hfXwogI2RlZmluZSBfX01URF9BQklfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIHsKLQl1aW50MzJfdCBzdGFydDsKLQl1aW50MzJfdCBsZW5ndGg7CisJX191MzIgc3RhcnQ7CisJX191MzIgbGVuZ3RoOwogfTsKIAogc3RydWN0IG10ZF9vb2JfYnVmIHsKLQl1aW50MzJfdCBzdGFydDsKLQl1aW50MzJfdCBsZW5ndGg7CisJX191MzIgc3RhcnQ7CisJX191MzIgbGVuZ3RoOwogCXVuc2lnbmVkIGNoYXIgX191c2VyICpwdHI7CiB9OwogCkBAIC00OCwzMCArNTAsMzAgQEAKICNkZWZpbmUgTVREX09UUF9VU0VSCQkyCiAKIHN0cnVjdCBtdGRfaW5mb191c2VyIHsKLQl1aW50OF90IHR5cGU7Ci0JdWludDMyX3QgZmxhZ3M7Ci0JdWludDMyX3Qgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAotCXVpbnQzMl90IGVyYXNlc2l6ZTsKLQl1aW50MzJfdCB3cml0ZXNpemU7Ci0JdWludDMyX3Qgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQorCV9fdTggdHlwZTsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECisJX191MzIgZXJhc2VzaXplOworCV9fdTMyIHdyaXRlc2l6ZTsKKwlfX3UzMiBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCiAJLyogVGhlIGJlbG93IHR3byBmaWVsZHMgYXJlIG9ic29sZXRlIGFuZCBicm9rZW4sIGRvIG5vdCB1c2UgdGhlbQogCSAqIChUT0RPOiByZW1vdmUgYXQgc29tZSBwb2ludCkgKi8KLQl1aW50MzJfdCBlY2N0eXBlOwotCXVpbnQzMl90IGVjY3NpemU7CisJX191MzIgZWNjdHlwZTsKKwlfX3UzMiBlY2NzaXplOwogfTsKIAogc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgewotCXVpbnQzMl90IG9mZnNldDsJCS8qIEF0IHdoaWNoIHRoaXMgcmVnaW9uIHN0YXJ0cywKKwlfX3UzMiBvZmZzZXQ7CQkvKiBBdCB3aGljaCB0aGlzIHJlZ2lvbiBzdGFydHMsCiAJCQkJCSAqIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgTVREICovCi0JdWludDMyX3QgZXJhc2VzaXplOwkJLyogRm9yIHRoaXMgcmVnaW9uICovCi0JdWludDMyX3QgbnVtYmxvY2tzOwkJLyogTnVtYmVyIG9mIGJsb2NrcyBpbiB0aGlzIHJlZ2lvbiAqLwotCXVpbnQzMl90IHJlZ2lvbmluZGV4OworCV9fdTMyIGVyYXNlc2l6ZTsJCS8qIEZvciB0aGlzIHJlZ2lvbiAqLworCV9fdTMyIG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhpcyByZWdpb24gKi8KKwlfX3UzMiByZWdpb25pbmRleDsKIH07CiAKIHN0cnVjdCBvdHBfaW5mbyB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOwotCXVpbnQzMl90IGxvY2tlZDsKKwlfX3UzMiBzdGFydDsKKwlfX3UzMiBsZW5ndGg7CisJX191MzIgbG9ja2VkOwogfTsKIAogI2RlZmluZSBNRU1HRVRJTkZPCQlfSU9SKCdNJywgMSwgc3RydWN0IG10ZF9pbmZvX3VzZXIpCkBAIC04NCw4ICs4Niw4IEBACiAjZGVmaW5lIE1FTUdFVFJFR0lPTklORk8JX0lPV1IoJ00nLCA4LCBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlcikKICNkZWZpbmUgTUVNU0VUT09CU0VMCQlfSU9XKCdNJywgOSwgc3RydWN0IG5hbmRfb29iaW5mbykKICNkZWZpbmUgTUVNR0VUT09CU0VMCQlfSU9SKCdNJywgMTAsIHN0cnVjdCBuYW5kX29vYmluZm8pCi0jZGVmaW5lIE1FTUdFVEJBREJMT0NLCQlfSU9XKCdNJywgMTEsIGxvZmZfdCkKLSNkZWZpbmUgTUVNU0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMiwgbG9mZl90KQorI2RlZmluZSBNRU1HRVRCQURCTE9DSwkJX0lPVygnTScsIDExLCBfX2tlcm5lbF9sb2ZmX3QpCisjZGVmaW5lIE1FTVNFVEJBREJMT0NLCQlfSU9XKCdNJywgMTIsIF9fa2VybmVsX2xvZmZfdCkKICNkZWZpbmUgT1RQU0VMRUNUCQlfSU9SKCdNJywgMTMsIGludCkKICNkZWZpbmUgT1RQR0VUUkVHSU9OQ09VTlQJX0lPVygnTScsIDE0LCBpbnQpCiAjZGVmaW5lIE9UUEdFVFJFR0lPTklORk8JX0lPVygnTScsIDE1LCBzdHJ1Y3Qgb3RwX2luZm8pCkBAIC05OSwxNSArMTAxLDE1IEBACiAgKiBpbnRlcmZhY2VzCiAgKi8KIHN0cnVjdCBuYW5kX29vYmluZm8gewotCXVpbnQzMl90IHVzZWVjYzsKLQl1aW50MzJfdCBlY2NieXRlczsKLQl1aW50MzJfdCBvb2JmcmVlWzhdWzJdOwotCXVpbnQzMl90IGVjY3Bvc1szMl07CisJX191MzIgdXNlZWNjOworCV9fdTMyIGVjY2J5dGVzOworCV9fdTMyIG9vYmZyZWVbOF1bMl07CisJX191MzIgZWNjcG9zWzMyXTsKIH07CiAKIHN0cnVjdCBuYW5kX29vYmZyZWUgewotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBsZW5ndGg7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIGxlbmd0aDsKIH07CiAKICNkZWZpbmUgTVREX01BWF9PT0JGUkVFX0VOVFJJRVMJOApAQCAtMTE2LDkgKzExOCw5IEBACiAgKiBkaWFnbm9zaXMgYW5kIHRvIGFsbG93IGNyZWF0aW9uIG9mIHJhdyBpbWFnZXMKICAqLwogc3RydWN0IG5hbmRfZWNjbGF5b3V0IHsKLQl1aW50MzJfdCBlY2NieXRlczsKLQl1aW50MzJfdCBlY2Nwb3NbNjRdOwotCXVpbnQzMl90IG9vYmF2YWlsOworCV9fdTMyIGVjY2J5dGVzOworCV9fdTMyIGVjY3Bvc1s2NF07CisJX191MzIgb29iYXZhaWw7CiAJc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKIH07CiAKQEAgLTEzMSwxMCArMTMzLDEwIEBACiAgKiBAYmJ0YmxvY2tzOgludW1iZXIgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgdGFibGVzCiAgKi8KIHN0cnVjdCBtdGRfZWNjX3N0YXRzIHsKLQl1aW50MzJfdCBjb3JyZWN0ZWQ7Ci0JdWludDMyX3QgZmFpbGVkOwotCXVpbnQzMl90IGJhZGJsb2NrczsKLQl1aW50MzJfdCBiYnRibG9ja3M7CisJX191MzIgY29ycmVjdGVkOworCV9fdTMyIGZhaWxlZDsKKwlfX3UzMiBiYWRibG9ja3M7CisJX191MzIgYmJ0YmxvY2tzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oIGIvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmgKaW5kZXggMzkwZDIxYy4uOThlOWU1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmgKQEAgLTYsMzMgKzYsMzUgQEAKICNpZm5kZWYgX19NVERfTkZUTF9VU0VSX0hfXwogI2RlZmluZSBfX01URF9ORlRMX1VTRVJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBCbG9jayBDb250cm9sIEluZm9ybWF0aW9uICovCiAKIHN0cnVjdCBuZnRsX2JjaSB7CiAJdW5zaWduZWQgY2hhciBFQ0NTaWdbNl07Ci0JdWludDhfdCBTdGF0dXM7Ci0JdWludDhfdCBTdGF0dXMxOworCV9fdTggU3RhdHVzOworCV9fdTggU3RhdHVzMTsKIH1fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogVW5pdCBDb250cm9sIEluZm9ybWF0aW9uICovCiAKIHN0cnVjdCBuZnRsX3VjaTAgewotCXVpbnQxNl90IFZpcnRVbml0TnVtOwotCXVpbnQxNl90IFJlcGxVbml0TnVtOwotCXVpbnQxNl90IFNwYXJlVmlydFVuaXROdW07Ci0JdWludDE2X3QgU3BhcmVSZXBsVW5pdE51bTsKKwlfX3UxNiBWaXJ0VW5pdE51bTsKKwlfX3UxNiBSZXBsVW5pdE51bTsKKwlfX3UxNiBTcGFyZVZpcnRVbml0TnVtOworCV9fdTE2IFNwYXJlUmVwbFVuaXROdW07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZ0bF91Y2kxIHsKLQl1aW50MzJfdCBXZWFySW5mbzsKLQl1aW50MTZfdCBFcmFzZU1hcms7Ci0JdWludDE2X3QgRXJhc2VNYXJrMTsKKwlfX3UzMiBXZWFySW5mbzsKKwlfX3UxNiBFcmFzZU1hcms7CisJX191MTYgRXJhc2VNYXJrMTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBuZnRsX3VjaTIgewotICAgICAgICB1aW50MTZfdCBGb2xkTWFyazsKLSAgICAgICAgdWludDE2X3QgRm9sZE1hcmsxOwotCXVpbnQzMl90IHVudXNlZDsKKyAgICAgICAgX191MTYgRm9sZE1hcms7CisgICAgICAgIF9fdTE2IEZvbGRNYXJrMTsKKwlfX3UzMiB1bnVzZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBuZnRsX3VjaSB7CkBAIC01MCw5ICs1Miw5IEBACiAKIHN0cnVjdCBORlRMTWVkaWFIZWFkZXIgewogCWNoYXIgRGF0YU9yZ0lEWzZdOwotCXVpbnQxNl90IE51bUVyYXNlVW5pdHM7Ci0JdWludDE2X3QgRmlyc3RQaHlzaWNhbEVVTjsKLQl1aW50MzJfdCBGb3JtYXR0ZWRTaXplOworCV9fdTE2IE51bUVyYXNlVW5pdHM7CisJX191MTYgRmlyc3RQaHlzaWNhbEVVTjsKKwlfX3UzMiBGb3JtYXR0ZWRTaXplOwogCXVuc2lnbmVkIGNoYXIgVW5pdFNpemVGYWN0b3I7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC91YmktdXNlci5oIGIvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaAppbmRleCAyOTZlZmFlLi40NjZhODMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC91YmktdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgX19VQklfVVNFUl9IX18KICNkZWZpbmUgX19VQklfVVNFUl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKiBVQkkgZGV2aWNlIGNyZWF0aW9uICh0aGUgc2FtZSBhcyBNVEQgZGV2aWNlIGF0dGFjaG1lbnQpCiAgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMTUyLDcgKzE1NCw3IEBACiAvKiBDcmVhdGUgYW4gVUJJIHZvbHVtZSAqLwogI2RlZmluZSBVQklfSU9DTUtWT0wgX0lPVyhVQklfSU9DX01BR0lDLCAwLCBzdHJ1Y3QgdWJpX21rdm9sX3JlcSkKIC8qIFJlbW92ZSBhbiBVQkkgdm9sdW1lICovCi0jZGVmaW5lIFVCSV9JT0NSTVZPTCBfSU9XKFVCSV9JT0NfTUFHSUMsIDEsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NSTVZPTCBfSU9XKFVCSV9JT0NfTUFHSUMsIDEsIF9fczMyKQogLyogUmUtc2l6ZSBhbiBVQkkgdm9sdW1lICovCiAjZGVmaW5lIFVCSV9JT0NSU1ZPTCBfSU9XKFVCSV9JT0NfTUFHSUMsIDIsIHN0cnVjdCB1YmlfcnN2b2xfcmVxKQogLyogUmUtbmFtZSB2b2x1bWVzICovCkBAIC0xNjUsMjQgKzE2NywyNCBAQAogLyogQXR0YWNoIGFuIE1URCBkZXZpY2UgKi8KICNkZWZpbmUgVUJJX0lPQ0FUVCBfSU9XKFVCSV9DVFJMX0lPQ19NQUdJQywgNjQsIHN0cnVjdCB1YmlfYXR0YWNoX3JlcSkKIC8qIERldGFjaCBhbiBNVEQgZGV2aWNlICovCi0jZGVmaW5lIFVCSV9JT0NERVQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY1LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DREVUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NSwgX19zMzIpCiAKIC8qIGlvY3RsIGNvbW1hbmRzIG9mIFVCSSB2b2x1bWUgY2hhcmFjdGVyIGRldmljZXMgKi8KIAogI2RlZmluZSBVQklfVk9MX0lPQ19NQUdJQyAnTycKIAogLyogU3RhcnQgVUJJIHZvbHVtZSB1cGRhdGUgKi8KLSNkZWZpbmUgVUJJX0lPQ1ZPTFVQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDAsIGludDY0X3QpCisjZGVmaW5lIFVCSV9JT0NWT0xVUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAwLCBfX3M2NCkKIC8qIExFQiBlcmFzdXJlIGNvbW1hbmQsIHVzZWQgZm9yIGRlYnVnZ2luZywgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLwotI2RlZmluZSBVQklfSU9DRUJFUiBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAxLCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJFUiBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAxLCBfX3MzMikKIC8qIEF0b21pYyBMRUIgY2hhbmdlIGNvbW1hbmQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCQ0ggX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMiwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCQ0ggX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMiwgX19zMzIpCiAvKiBNYXAgTEVCIGNvbW1hbmQgKi8KICNkZWZpbmUgVUJJX0lPQ0VCTUFQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDMsIHN0cnVjdCB1YmlfbWFwX3JlcSkKIC8qIFVubWFwIExFQiBjb21tYW5kICovCi0jZGVmaW5lIFVCSV9JT0NFQlVOTUFQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDQsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQlVOTUFQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDQsIF9fczMyKQogLyogQ2hlY2sgaWYgTEVCIGlzIG1hcHBlZCBjb21tYW5kICovCi0jZGVmaW5lIFVCSV9JT0NFQklTTUFQIF9JT1IoVUJJX1ZPTF9JT0NfTUFHSUMsIDUsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQklTTUFQIF9JT1IoVUJJX1ZPTF9JT0NfTUFHSUMsIDUsIF9fczMyKQogLyogU2V0IGFuIFVCSSB2b2x1bWUgcHJvcGVydHkgKi8KICNkZWZpbmUgVUJJX0lPQ1NFVFBST1AgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgNiwgc3RydWN0IHViaV9zZXRfcHJvcF9yZXEpCiAKQEAgLTI2MCwxMCArMjYyLDEwIEBACiAgKiBzdWItcGFnZSBvZiB0aGUgZmlyc3QgcGFnZSBhbmQgYWRkIG5lZWRlZCBwYWRkaW5nLgogICovCiBzdHJ1Y3QgdWJpX2F0dGFjaF9yZXEgewotCWludDMyX3QgdWJpX251bTsKLQlpbnQzMl90IG10ZF9udW07Ci0JaW50MzJfdCB2aWRfaGRyX29mZnNldDsKLQlpbnQ4X3QgcGFkZGluZ1sxMl07CisJX19zMzIgdWJpX251bTsKKwlfX3MzMiBtdGRfbnVtOworCV9fczMyIHZpZF9oZHJfb2Zmc2V0OworCV9fczggcGFkZGluZ1sxMl07CiB9OwogCiAvKioKQEAgLTI5OCwxMyArMzAwLDEzIEBACiAgKiBCTE9Ccywgd2l0aG91dCBjYXJpbmcgYWJvdXQgaG93IHRvIHByb3Blcmx5IGFsaWduIHRoZW0uCiAgKi8KIHN0cnVjdCB1YmlfbWt2b2xfcmVxIHsKLQlpbnQzMl90IHZvbF9pZDsKLQlpbnQzMl90IGFsaWdubWVudDsKLQlpbnQ2NF90IGJ5dGVzOwotCWludDhfdCB2b2xfdHlwZTsKLQlpbnQ4X3QgcGFkZGluZzE7Ci0JaW50MTZfdCBuYW1lX2xlbjsKLQlpbnQ4X3QgcGFkZGluZzJbNF07CisJX19zMzIgdm9sX2lkOworCV9fczMyIGFsaWdubWVudDsKKwlfX3M2NCBieXRlczsKKwlfX3M4IHZvbF90eXBlOworCV9fczggcGFkZGluZzE7CisJX19zMTYgbmFtZV9sZW47CisJX19zOCBwYWRkaW5nMls0XTsKIAljaGFyIG5hbWVbVUJJX01BWF9WT0xVTUVfTkFNRSArIDFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTMyMCw4ICszMjIsOCBAQAogICogemVybyBudW1iZXIgb2YgYnl0ZXMpLgogICovCiBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSB7Ci0JaW50NjRfdCBieXRlczsKLQlpbnQzMl90IHZvbF9pZDsKKwlfX3M2NCBieXRlczsKKwlfX3MzMiB2b2xfaWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoqCkBAIC0zNTYsMTIgKzM1OCwxMiBAQAogICogcmUtbmFtZSByZXF1ZXN0LgogICovCiBzdHJ1Y3QgdWJpX3Judm9sX3JlcSB7Ci0JaW50MzJfdCBjb3VudDsKLQlpbnQ4X3QgcGFkZGluZzFbMTJdOworCV9fczMyIGNvdW50OworCV9fczggcGFkZGluZzFbMTJdOwogCXN0cnVjdCB7Ci0JCWludDMyX3Qgdm9sX2lkOwotCQlpbnQxNl90IG5hbWVfbGVuOwotCQlpbnQ4X3QgIHBhZGRpbmcyWzJdOworCQlfX3MzMiB2b2xfaWQ7CisJCV9fczE2IG5hbWVfbGVuOworCQlfX3M4ICBwYWRkaW5nMlsyXTsKIAkJY2hhciAgICBuYW1lW1VCSV9NQVhfVk9MVU1FX05BTUUgKyAxXTsKIAl9IGVudHNbVUJJX01BWF9STlZPTF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTM3NSwxMCArMzc3LDEwIEBACiAgKiBAcGFkZGluZzogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSwgbm90IHVzZWQsIGhhcyB0byBiZSB6ZXJvZWQKICAqLwogc3RydWN0IHViaV9sZWJfY2hhbmdlX3JlcSB7Ci0JaW50MzJfdCBsbnVtOwotCWludDMyX3QgYnl0ZXM7Ci0JaW50OF90ICBkdHlwZTsKLQlpbnQ4X3QgIHBhZGRpbmdbN107CisJX19zMzIgbG51bTsKKwlfX3MzMiBieXRlczsKKwlfX3M4ICBkdHlwZTsKKwlfX3M4ICBwYWRkaW5nWzddOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgpAQCAtMzg4LDkgKzM5MCw5IEBACiAgKiBAcGFkZGluZzogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSwgbm90IHVzZWQsIGhhcyB0byBiZSB6ZXJvZWQKICAqLwogc3RydWN0IHViaV9tYXBfcmVxIHsKLQlpbnQzMl90IGxudW07Ci0JaW50OF90ICBkdHlwZTsKLQlpbnQ4X3QgIHBhZGRpbmdbM107CisJX19zMzIgbG51bTsKKwlfX3M4ICBkdHlwZTsKKwlfX3M4ICBwYWRkaW5nWzNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIApAQCAtNDAyLDkgKzQwNCw5IEBACiAgKiBAdmFsdWU6IHZhbHVlIHRvIHNldAogICovCiBzdHJ1Y3QgdWJpX3NldF9wcm9wX3JlcSB7Ci0gICAgICAgdWludDhfdCAgcHJvcGVydHk7Ci0gICAgICAgdWludDhfdCAgcGFkZGluZ1s3XTsKLSAgICAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICAgICBfX3U4ICBwcm9wZXJ0eTsKKyAgICAgICBfX3U4ICBwYWRkaW5nWzddOworICAgICAgIF9fdTY0IHZhbHVlOwogfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX19VQklfVVNFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IGMyMTZkZTUuLjdiNTVhYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtODgsOCArODgsOCBAQAogZXh0ZXJuIGludAkJCWlwdjZfZ2V0X2xsYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCQkJdW5zaWduZWQgY2hhciBiYW5uZWRfZmxhZ3MpOwotZXh0ZXJuIGludAkJCWlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgCi0JCQkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKK2V4dGVybiBpbnQgCQkJaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOwogZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9qb2luX3NvbGljdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9sZWF2ZV9zb2xpY3Qoc3RydWN0IGluZXQ2X2RldiAqaWRldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F0bWNsaXAuaCBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaAppbmRleCBiNWE1MWE3Li40NjdjNTMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hdG1jbGlwLmgKKysrIGIvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCkBAIC01MCw3ICs1MCw2IEBACiBzdHJ1Y3QgY2xpcF9wcml2IHsKIAlpbnQgbnVtYmVyOwkJCS8qIGZvciBjb252ZW5pZW5jZSAuLi4gKi8KIAlzcGlubG9ja190IHhvZmZfbG9jazsJCS8qIGVuc3VyZXMgdGhhdCBwb3AgaXMgYXRvbWljIChTTVApICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5leHQ7CS8qIG5leHQgQ0xJUCBpbnRlcmZhY2UgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4ODg3OTYuaCBiL2luY2x1ZGUvbmV0L2F4ODg3OTYuaAppbmRleCA1MTMyOWRhLi5iOWEzYmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDg4Nzk2LmgKKysrIGIvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oCkBAIC0xNSwxNCArMTUsMTcgQEAKICNkZWZpbmUgQVhGTEdfSEFTX0VFUFJPTQkJKDE8PDApCiAjZGVmaW5lIEFYRkxHX01BQ19GUk9NREVWCQkoMTw8MSkJLyogZGV2aWNlIGFscmVhZHkgaGFzIE1BQyAqLwogI2RlZmluZSBBWEZMR19IQVNfOTNDWDYJCQkoMTw8MikJLyogdXNlIGVlcHJvbV85M2N4NiBkcml2ZXIgKi8KKyNkZWZpbmUgQVhGTEdfTUFDX0ZST01QTEFURk9STQkJKDE8PDMpCS8qIE1BQyBnaXZlbiBieSBwbGF0Zm9ybSBkYXRhICovCiAKIHN0cnVjdCBheF9wbGF0X2RhdGEgewogCXVuc2lnbmVkIGludAkgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhcgkgd29yZGxlbmd0aDsJCS8qIDEgb3IgMiAqLwotCXVuc2lnbmVkIGNoYXIJIGRjcl92YWw7CQkvKiBkZWZhdWx0IHZhbHVlIGZvciBEQ1IgKi8KLQl1bnNpZ25lZCBjaGFyCSByY3JfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgUkNSICovCi0JdW5zaWduZWQgY2hhcgkgZ3BvY192YWw7CQkvKiBkZWZhdWx0IHZhbHVlIGZvciBHUE9DICovCi0JdTMyCQkqcmVnX29mZnNldHM7CQkvKiByZWdpc3RlciBvZmZzZXRzICovCisJdW5zaWduZWQgY2hhcgkgd29yZGxlbmd0aDsJLyogMSBvciAyICovCisJdW5zaWduZWQgY2hhcgkgZGNyX3ZhbDsJLyogZGVmYXVsdCB2YWx1ZSBmb3IgRENSICovCisJdW5zaWduZWQgY2hhcgkgcmNyX3ZhbDsJLyogZGVmYXVsdCB2YWx1ZSBmb3IgUkNSICovCisJdW5zaWduZWQgY2hhcgkgZ3BvY192YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIEdQT0MgKi8KKwl1MzIJCSpyZWdfb2Zmc2V0czsJLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworCXU4CQkqbWFjX2FkZHI7CS8qIE1BQyBhZGRyIChvbmx5IHVzZWQgd2hlbgorCQkJCQkgICBBWEZMR19NQUNfRlJPTVBMQVRGT1JNIGlzIHVzZWQgKi8KIH07CiAKICNlbmRpZiAvKiBfX05FVF9BWDg4Nzk2X1BMQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCmluZGV4IGEwNGY4NDYuLjNhZDUzOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKQEAgLTUzLDYgKzUzLDE3IEBACiAjZGVmaW5lIFNPTF9TQ08JCTE3CiAjZGVmaW5lIFNPTF9SRkNPTU0JMTgKIAorI2RlZmluZSBCVF9TRUNVUklUWQk0CitzdHJ1Y3QgYnRfc2VjdXJpdHkgeworCV9fdTggbGV2ZWw7Cit9OworI2RlZmluZSBCVF9TRUNVUklUWV9TRFAJCTAKKyNkZWZpbmUgQlRfU0VDVVJJVFlfTE9XCQkxCisjZGVmaW5lIEJUX1NFQ1VSSVRZX01FRElVTQkyCisjZGVmaW5lIEJUX1NFQ1VSSVRZX0hJR0gJMworCisjZGVmaW5lIEJUX0RFRkVSX1NFVFVQCTcKKwogI2RlZmluZSBCVF9JTkZPKGZtdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICJCbHVldG9vdGg6ICIgZm10ICJcbiIgLCAjIyBhcmcpCiAjZGVmaW5lIEJUX0VSUihmbXQsIGFyZy4uLikgIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKICNkZWZpbmUgQlRfREJHKGZtdCwgYXJnLi4uKSAgcHJfZGVidWcoIiVzOiAiIGZtdCAiXG4iICwgX19mdW5jX18gLCAjIyBhcmcpCkBAIC0xMDgsNiArMTE5LDcgQEAKIAliZGFkZHJfdCAgICBkc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcTsKIAlzdHJ1Y3Qgc29jayAqcGFyZW50OworCXUzMiBkZWZlcl9zZXR1cDsKIH07CiAKIHN0cnVjdCBidF9zb2NrX2xpc3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IDM2NDUxMzkuLmY2OWYwMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTEzMyw4ICsxMzMsMTMgQEAKICNkZWZpbmUgRVNDT19FVjMJMHgwMDA4CiAjZGVmaW5lIEVTQ09fRVY0CTB4MDAxMAogI2RlZmluZSBFU0NPX0VWNQkweDAwMjAKKyNkZWZpbmUgRVNDT18yRVYzCTB4MDA0MAorI2RlZmluZSBFU0NPXzNFVjMJMHgwMDgwCisjZGVmaW5lIEVTQ09fMkVWNQkweDAxMDAKKyNkZWZpbmUgRVNDT18zRVY1CTB4MDIwMAogCiAjZGVmaW5lIFNDT19FU0NPX01BU0sgIChFU0NPX0hWMSB8IEVTQ09fSFYyIHwgRVNDT19IVjMpCisjZGVmaW5lIEVEUl9FU0NPX01BU0sgIChFU0NPXzJFVjMgfCBFU0NPXzNFVjMgfCBFU0NPXzJFVjUgfCBFU0NPXzNFVjUpCiAKIC8qIEFDTCBmbGFncyAqLwogI2RlZmluZSBBQ0xfQ09OVAkJMHgwMQpAQCAtMTc2LDYgKzE4MSw5IEBACiAjZGVmaW5lIExNUF9FVjUJCTB4MDIKIAogI2RlZmluZSBMTVBfU05JRkZfU1VCUgkweDAyCisjZGVmaW5lIExNUF9FRFJfRVNDT18yTQkweDIwCisjZGVmaW5lIExNUF9FRFJfRVNDT18zTQkweDQwCisjZGVmaW5lIExNUF9FRFJfM1NfRVNDTwkweDgwCiAKICNkZWZpbmUgTE1QX1NJTVBMRV9QQUlSCTB4MDgKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAppbmRleCA0NmE0M2I3Li4wMWY5MzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaApAQCAtMTY5LDYgKzE2OSw3IEBACiAJX191MTYgICAgICAgICAgICBsaW5rX3BvbGljeTsKIAlfX3UzMgkJIGxpbmtfbW9kZTsKIAlfX3U4ICAgICAgICAgICAgIGF1dGhfdHlwZTsKKwlfX3U4ICAgICAgICAgICAgIHNlY19sZXZlbDsKIAlfX3U4ICAgICAgICAgICAgIHBvd2VyX3NhdmU7CiAJdW5zaWduZWQgbG9uZwkgcGVuZDsKIApAQCAtMzI1LDEyICszMjYsMTEgQEAKIHZvaWQgaGNpX2Nvbm5faGFzaF9mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiB2b2lkIGhjaV9jb25uX2NoZWNrX3BlbmRpbmcoc3RydWN0IGhjaV9kZXYgKmhkZXYpOwogCi1zdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBhdXRoX3R5cGUpOworc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSk7CiBpbnQgaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7Ci1pbnQgaGNpX2Nvbm5fYXV0aChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX2VuY3J5cHQoc3RydWN0IGhjaV9jb25uICpjb25uKTsKK2ludCBoY2lfY29ubl9zZWN1cml0eShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSk7CiBpbnQgaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KHN0cnVjdCBoY2lfY29ubiAqY29ubik7Ci1pbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCB1aW50OF90IHJvbGUpOworaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByb2xlKTsKIAogdm9pZCBoY2lfY29ubl9lbnRlcl9hY3RpdmVfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwogdm9pZCBoY2lfY29ubl9lbnRlcl9zbmlmZl9tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CkBAIC00NzAsMjYgKzQ3MCwyNiBAQAogCiAvKiAtLS0tLSBIQ0kgcHJvdG9jb2xzIC0tLS0tICovCiBzdHJ1Y3QgaGNpX3Byb3RvIHsKLQljaGFyIAkJKm5hbWU7CisJY2hhcgkJKm5hbWU7CiAJdW5zaWduZWQgaW50CWlkOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKIAl2b2lkCQkqcHJpdjsKIAotCWludCAoKmNvbm5lY3RfaW5kKSAJKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpOworCWludCAoKmNvbm5lY3RfaW5kKQkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIF9fdTggdHlwZSk7CiAJaW50ICgqY29ubmVjdF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKLQlpbnQgKCpkaXNjb25uX2luZCkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pOworCWludCAoKmRpc2Nvbm5faW5kKQkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKKwlpbnQgKCpkaXNjb25uX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pOwogCWludCAoKnJlY3ZfYWNsZGF0YSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgZmxhZ3MpOwogCWludCAoKnJlY3Zfc2NvZGF0YSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50ICgqYXV0aF9jZm0pCQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7Ci0JaW50ICgqZW5jcnlwdF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOworCWludCAoKnNlY3VyaXR5X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBoY2lfcHJvdG9fY29ubmVjdF9pbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIF9fdTggdHlwZSkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAlpbnQgbWFzayA9IDA7Ci0JCisKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwogCWlmIChocCAmJiBocC0+Y29ubmVjdF9pbmQpCiAJCW1hc2sgfD0gaHAtPmNvbm5lY3RfaW5kKGhkZXYsIGJkYWRkciwgdHlwZSk7CkBAIC01MTQsMzAgKzUxNCw1MiBAQAogCQlocC0+Y29ubmVjdF9jZm0oY29ubiwgc3RhdHVzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKQorc3RhdGljIGlubGluZSBpbnQgaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKKwlpbnQgcmVhc29uID0gMHgxMzsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKKwkJcmVhc29uID0gaHAtPmRpc2Nvbm5faW5kKGNvbm4pOworCisJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX1NDT107CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKKwkJcmVhc29uID0gaHAtPmRpc2Nvbm5faW5kKGNvbm4pOworCisJcmV0dXJuIHJlYXNvbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19kaXNjb25uX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKLQlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQotCQlocC0+ZGlzY29ubl9pbmQoY29ubiwgcmVhc29uKTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5fY2ZtKQorCQlocC0+ZGlzY29ubl9jZm0oY29ubiwgcmVhc29uKTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCi0JCWhwLT5kaXNjb25uX2luZChjb25uLCByZWFzb24pOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9jZm0pCisJCWhwLT5kaXNjb25uX2NmbShjb25uLCByZWFzb24pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CisJX191OCBlbmNyeXB0OworCisJaWYgKHRlc3RfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQorCQlyZXR1cm47CisKKwllbmNyeXB0ID0gKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSA/IDB4MDEgOiAweDAwOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKLQlpZiAoaHAgJiYgaHAtPmF1dGhfY2ZtKQotCQlocC0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwlpZiAoaHAgJiYgaHAtPnNlY3VyaXR5X2NmbSkKKwkJaHAtPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX1NDT107Ci0JaWYgKGhwICYmIGhwLT5hdXRoX2NmbSkKLQkJaHAtPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpCkBAIC01NDUsMTIgKzU2NywxMiBAQAogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKLQlpZiAoaHAgJiYgaHAtPmVuY3J5cHRfY2ZtKQotCQlocC0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKKwlpZiAoaHAgJiYgaHAtPnNlY3VyaXR5X2NmbSkKKwkJaHAtPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX1NDT107Ci0JaWYgKGhwICYmIGhwLT5lbmNyeXB0X2NmbSkKLQkJaHAtPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIH0KIAogaW50IGhjaV9yZWdpc3Rlcl9wcm90byhzdHJ1Y3QgaGNpX3Byb3RvICpocHJvdG8pOwpAQCAtNTYyLDggKzU4NCw3IEBACiAKIAljaGFyICpuYW1lOwogCi0Jdm9pZCAoKmF1dGhfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7Ci0Jdm9pZCAoKmVuY3J5cHRfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKKwl2b2lkICgqc2VjdXJpdHlfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKIAl2b2lkICgqa2V5X2NoYW5nZV9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKIAl2b2lkICgqcm9sZV9zd2l0Y2hfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCByb2xlKTsKIH07CkBAIC01NzEsMTQgKzU5MiwyMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJX191OCBlbmNyeXB0OwogCiAJaGNpX3Byb3RvX2F1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CiAKKwlpZiAodGVzdF9iaXQoSENJX0NPTk5fRU5DUllQVF9QRU5ELCAmY29ubi0+cGVuZCkpCisJCXJldHVybjsKKworCWVuY3J5cHQgPSAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpID8gMHgwMSA6IDB4MDA7CisKIAlyZWFkX2xvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2gocCwgJmhjaV9jYl9saXN0KSB7CiAJCXN0cnVjdCBoY2lfY2IgKmNiID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGNpX2NiLCBsaXN0KTsKLQkJaWYgKGNiLT5hdXRoX2NmbSkKLQkJCWNiLT5hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCQlpZiAoY2ItPnNlY3VyaXR5X2NmbSkKKwkJCWNiLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAl9CiAJcmVhZF91bmxvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOwogfQpAQCAtNTg3LDEzICs2MTQsMTYgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOwogCisJaWYgKGNvbm4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJCWNvbm4tPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwogCWhjaV9wcm90b19lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCiAJcmVhZF9sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZoY2lfY2JfbGlzdCkgewogCQlzdHJ1Y3QgaGNpX2NiICpjYiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jYiwgbGlzdCk7Ci0JCWlmIChjYi0+ZW5jcnlwdF9jZm0pCi0JCQljYi0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKKwkJaWYgKGNiLT5zZWN1cml0eV9jZm0pCisJCQljYi0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKaW5kZXggNzNlMTE1Yi4uZjU2NmFhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAlzYV9mYW1pbHlfdAlsMl9mYW1pbHk7CiAJX19sZTE2CQlsMl9wc207CiAJYmRhZGRyX3QJbDJfYmRhZGRyOworCV9fbGUxNgkJbDJfY2lkOwogfTsKIAogLyogTDJDQVAgc29ja2V0IG9wdGlvbnMgKi8KQEAgLTE4NSw2ICsxODYsNyBAQAogLyogaW5mbyB0eXBlICovCiAjZGVmaW5lIEwyQ0FQX0lUX0NMX01UVSAgICAgMHgwMDAxCiAjZGVmaW5lIEwyQ0FQX0lUX0ZFQVRfTUFTSyAgMHgwMDAyCisjZGVmaW5lIEwyQ0FQX0lUX0ZJWEVEX0NIQU4gMHgwMDAzCiAKIC8qIGluZm8gcmVzdWx0ICovCiAjZGVmaW5lIEwyQ0FQX0lSX1NVQ0NFU1MgICAgMHgwMDAwCkBAIC0yMTksMTEgKzIyMSwxNCBAQAogCV9fdTgJCXJ4X2lkZW50OwogCV9fdTgJCXR4X2lkZW50OwogCisJX191OAkJZGlzY19yZWFzb247CisKIAlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0IGNoYW5fbGlzdDsKIH07CiAKICNkZWZpbmUgTDJDQVBfSU5GT19DTF9NVFVfUkVRX1NFTlQJMHgwMQotI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVAkweDAyCisjZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UCTB4MDQKKyNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkUJMHgwOAogCiAvKiAtLS0tLSBMMkNBUCBjaGFubmVsIGFuZCBzb2NrZXQgaW5mbyAtLS0tLSAqLwogI2RlZmluZSBsMmNhcF9waShzaykgKChzdHJ1Y3QgbDJjYXBfcGluZm8gKikgc2spCkBAIC0yMzcsOCArMjQyLDkgQEAKIAlfX3UxNgkJaW10dTsKIAlfX3UxNgkJb210dTsKIAlfX3UxNgkJZmx1c2hfdG87Ci0KLQlfX3UzMgkJbGlua19tb2RlOworCV9fdTggICAgICAgICAgICBzZWNfbGV2ZWw7CisJX191OAkJcm9sZV9zd2l0Y2g7CisJX191OCAgICAgICAgICAgIGZvcmNlX3JlbGlhYmxlOwogCiAJX191OAkJY29uZl9yZXFbNjRdOwogCV9fdTgJCWNvbmZfbGVuOwpAQCAtMjU3LDYgKzI2Myw3IEBACiAjZGVmaW5lIEwyQ0FQX0NPTkZfUkVRX1NFTlQJMHgwMQogI2RlZmluZSBMMkNBUF9DT05GX0lOUFVUX0RPTkUJMHgwMgogI2RlZmluZSBMMkNBUF9DT05GX09VVFBVVF9ET05FCTB4MDQKKyNkZWZpbmUgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQJMHg4MAogCiAjZGVmaW5lIEwyQ0FQX0NPTkZfTUFYX1JFVFJJRVMJMgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKaW5kZXggNGRjOGQ5Mi4uODAwNzI2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaApAQCAtMTgzLDggKzE4Myw5IEBACiAJdTggICAgICAgICAgICByZW1vdGVfdjI0X3NpZzsKIAl1OCAgICAgICAgICAgIG1zY2V4OwogCXU4ICAgICAgICAgICAgb3V0OwotCi0JdTMyICAgICAgICAgICBsaW5rX21vZGU7CisJdTggICAgICAgICAgICBzZWNfbGV2ZWw7CisJdTggICAgICAgICAgICByb2xlX3N3aXRjaDsKKwl1MzIgICAgICAgICAgIGRlZmVyX3NldHVwOwogCiAJdWludCAgICAgICAgICBtdHU7CiAJdWludCAgICAgICAgICBjZmM7CkBAIC0yMDIsMTAgKzIwMywxMiBAQAogI2RlZmluZSBSRkNPTU1fUlhfVEhST1RUTEVEIDAKICNkZWZpbmUgUkZDT01NX1RYX1RIUk9UVExFRCAxCiAjZGVmaW5lIFJGQ09NTV9USU1FRF9PVVQgICAgMgotI2RlZmluZSBSRkNPTU1fTVNDX1BFTkRJTkcgIDMgCi0jZGVmaW5lIFJGQ09NTV9BVVRIX1BFTkRJTkcgNAotI2RlZmluZSBSRkNPTU1fQVVUSF9BQ0NFUFQgIDUKLSNkZWZpbmUgUkZDT01NX0FVVEhfUkVKRUNUICA2CisjZGVmaW5lIFJGQ09NTV9NU0NfUEVORElORyAgMworI2RlZmluZSBSRkNPTU1fU0VDX1BFTkRJTkcgIDQKKyNkZWZpbmUgUkZDT01NX0FVVEhfUEVORElORyA1CisjZGVmaW5lIFJGQ09NTV9BVVRIX0FDQ0VQVCAgNgorI2RlZmluZSBSRkNPTU1fQVVUSF9SRUpFQ1QgIDcKKyNkZWZpbmUgUkZDT01NX0RFRkVSX1NFVFVQICA4CiAKIC8qIFNjaGVkdWxpbmcgZmxhZ3MgYW5kIGV2ZW50cyAqLwogI2RlZmluZSBSRkNPTU1fU0NIRURfU1RBVEUgIDAKQEAgLTIzOSw2ICsyNDIsNyBAQAogaW50ICByZmNvbW1fZGxjX3NlbmQoc3RydWN0IHJmY29tbV9kbGMgKmQsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50ICByZmNvbW1fZGxjX3NldF9tb2RlbV9zdGF0dXMoc3RydWN0IHJmY29tbV9kbGMgKmQsIHU4IHYyNF9zaWcpOwogaW50ICByZmNvbW1fZGxjX2dldF9tb2RlbV9zdGF0dXMoc3RydWN0IHJmY29tbV9kbGMgKmQsIHU4ICp2MjRfc2lnKTsKK3ZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpOwogCiAjZGVmaW5lIHJmY29tbV9kbGNfbG9jayhkKSAgICAgc3Bpbl9sb2NrKCZkLT5sb2NrKQogI2RlZmluZSByZmNvbW1fZGxjX3VubG9jayhkKSAgIHNwaW5fdW5sb2NrKCZkLT5sb2NrKQpAQCAtMzA0LDcgKzMwOCw4IEBACiAJc3RydWN0IGJ0X3NvY2sgYnQ7CiAJc3RydWN0IHJmY29tbV9kbGMgICAqZGxjOwogCXU4ICAgICBjaGFubmVsOwotCXUzMiAgICBsaW5rX21vZGU7CisJdTggICAgIHNlY19sZXZlbDsKKwl1OCAgICAgcm9sZV9zd2l0Y2g7CiB9OwogCiBpbnQgIHJmY29tbV9pbml0X3NvY2tldHModm9pZCk7CkBAIC0zMzMsNyArMzM4LDYgQEAKIAliZGFkZHJfdCBzcmM7CiAJYmRhZGRyX3QgZHN0OwogCXU4ICAgICAgIGNoYW5uZWw7Ci0JCiB9OwogCiBzdHJ1Y3QgcmZjb21tX2Rldl9pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IDIzYzBhYjcuLjUzODlhZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaApAQCAtNCw2ICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAvKiByZW1vdmUgb25jZSB3ZSByZW1vdmUgdGhlIHdleHQgc3R1ZmYgKi8KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgpAQCAtMTEyLDEyICsxMTYsMTQgQEAKICAqIEBTVEFUSU9OX0ZMQUdfU0hPUlRfUFJFQU1CTEU6IHN0YXRpb24gaXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgZnJhbWVzCiAgKgl3aXRoIHNob3J0IHByZWFtYmxlcwogICogQFNUQVRJT05fRkxBR19XTUU6IHN0YXRpb24gaXMgV01FL1FvUyBjYXBhYmxlCisgKiBAU1RBVElPTl9GTEFHX01GUDogc3RhdGlvbiB1c2VzIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbgogICovCiBlbnVtIHN0YXRpb25fZmxhZ3MgewogCVNUQVRJT05fRkxBR19DSEFOR0VECQk9IDE8PDAsCiAJU1RBVElPTl9GTEFHX0FVVEhPUklaRUQJCT0gMTw8Tkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVELAogCVNUQVRJT05fRkxBR19TSE9SVF9QUkVBTUJMRQk9IDE8PE5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUsCiAJU1RBVElPTl9GTEFHX1dNRQkJPSAxPDxOTDgwMjExX1NUQV9GTEFHX1dNRSwKKwlTVEFUSU9OX0ZMQUdfTUZQCQk9IDE8PE5MODAyMTFfU1RBX0ZMQUdfTUZQLAogfTsKIAogLyoqCkBAIC0xNzIsNiArMTc4LDggQEAKICAqIEBTVEFUSU9OX0lORk9fU0lHTkFMOiBAc2lnbmFsIGZpbGxlZAogICogQFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOiBAdHhfYml0cmF0ZSBmaWVsZHMgYXJlIGZpbGxlZAogICogICh0eF9iaXRyYXRlLCB0eF9iaXRyYXRlX2ZsYWdzIGFuZCB0eF9iaXRyYXRlX21jcykKKyAqIEBTVEFUSU9OX0lORk9fUlhfUEFDS0VUUzogQHJ4X3BhY2tldHMgZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFM6IEB0eF9wYWNrZXRzIGZpbGxlZAogICovCiBlbnVtIHN0YXRpb25faW5mb19mbGFncyB7CiAJU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUJPSAxPDwwLApAQCAtMTgyLDYgKzE5MCw4IEBACiAJU1RBVElPTl9JTkZPX1BMSU5LX1NUQVRFCT0gMTw8NSwKIAlTVEFUSU9OX0lORk9fU0lHTkFMCQk9IDE8PDYsCiAJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUJCT0gMTw8NywKKwlTVEFUSU9OX0lORk9fUlhfUEFDS0VUUwkJPSAxPDw4LAorCVNUQVRJT05fSU5GT19UWF9QQUNLRVRTCQk9IDE8PDksCiB9OwogCiAvKioKQEAgLTIyOSw2ICsyMzksOCBAQAogICogQHBsaW5rX3N0YXRlOiBtZXNoIHBlZXIgbGluayBzdGF0ZQogICogQHNpZ25hbDogc2lnbmFsIHN0cmVuZ3RoIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0IGluIGRCbQogICogQHR4cmF0ZTogY3VycmVudCB1bmljYXN0IGJpdHJhdGUgdG8gdGhpcyBzdGF0aW9uCisgKiBAcnhfcGFja2V0czogcGFja2V0cyByZWNlaXZlZCBmcm9tIHRoaXMgc3RhdGlvbgorICogQHR4X3BhY2tldHM6IHBhY2tldHMgdHJhbnNtaXR0ZWQgdG8gdGhpcyBzdGF0aW9uCiAgKi8KIHN0cnVjdCBzdGF0aW9uX2luZm8gewogCXUzMiBmaWxsZWQ7CkBAIC0yNDAsNiArMjUyLDggQEAKIAl1OCBwbGlua19zdGF0ZTsKIAlzOCBzaWduYWw7CiAJc3RydWN0IHJhdGVfaW5mbyB0eHJhdGU7CisJdTMyIHJ4X3BhY2tldHM7CisJdTMyIHR4X3BhY2tldHM7CiB9OwogCiAvKioKQEAgLTMzNSwyNCArMzQ5LDUwIEBACiB9OwogCiAvKioKLSAqIGVudW0gcmVnX3NldF9ieSAtIEluZGljYXRlcyB3aG8gaXMgdHJ5aW5nIHRvIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4KLSAqIEBSRUdET01fU0VUX0JZX0lOSVQ6IHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBzZXQgYnkgaW5pdGlhbGl6YXRpb24uIFdlIHdpbGwgYmUKLSAqIAl1c2luZyBhIHN0YXRpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBieSBkZWZhdWx0LgotICogQFJFR0RPTV9TRVRfQllfQ09SRTogQ29yZSBxdWVyaWVkIENSREEgZm9yIGEgZHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbi4KLSAqIEBSRUdET01fU0VUX0JZX1VTRVI6IFVzZXIgYXNrZWQgdGhlIHdpcmVsZXNzIGNvcmUgdG8gc2V0IHRoZQotICogCXJlZ3VsYXRvcnkgZG9tYWluLgotICogQFJFR0RPTV9TRVRfQllfRFJJVkVSOiBhIHdpcmVsZXNzIGRyaXZlcnMgaGFzIGhpbnRlZCB0byB0aGUgd2lyZWxlc3MgY29yZQotICoJaXQgdGhpbmtzIGl0cyBrbm93cyB0aGUgcmVndWxhdG9yeSBkb21haW4gd2Ugc2hvdWxkIGJlIGluLgotICogQFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRTogdGhlIHdpcmVsZXNzIGNvcmUgaGFzIHJlY2VpdmVkIGFuIDgwMi4xMSBjb3VudHJ5Ci0gKglpbmZvcm1hdGlvbiBlbGVtZW50IHdpdGggcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBpdCB0aGlua3Mgd2UKLSAqCXNob3VsZCBjb25zaWRlci4KKyAqIGVudW0gZW52aXJvbm1lbnRfY2FwIC0gRW52aXJvbm1lbnQgcGFyc2VkIGZyb20gY291bnRyeSBJRQorICogQEVOVklST05fQU5ZOiBpbmRpY2F0ZXMgY291bnRyeSBJRSBhcHBsaWVzIHRvIGJvdGggaW5kb29yIGFuZAorICoJb3V0ZG9vciBvcGVyYXRpb24uCisgKiBARU5WSVJPTl9JTkRPT1I6IGluZGljYXRlcyBjb3VudHJ5IElFIGFwcGxpZXMgb25seSB0byBpbmRvb3Igb3BlcmF0aW9uCisgKiBARU5WSVJPTl9PVVRET09SOiBpbmRpY2F0ZXMgY291bnRyeSBJRSBhcHBsaWVzIG9ubHkgdG8gb3V0ZG9vciBvcGVyYXRpb24KICAqLwotZW51bSByZWdfc2V0X2J5IHsKLQlSRUdET01fU0VUX0JZX0lOSVQsCi0JUkVHRE9NX1NFVF9CWV9DT1JFLAotCVJFR0RPTV9TRVRfQllfVVNFUiwKLQlSRUdET01fU0VUX0JZX0RSSVZFUiwKLQlSRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCitlbnVtIGVudmlyb25tZW50X2NhcCB7CisJRU5WSVJPTl9BTlksCisJRU5WSVJPTl9JTkRPT1IsCisJRU5WSVJPTl9PVVRET09SLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IC0gdXNlZCB0byBrZWVwIHRyYWNrIG9mIHJlZ3VsYXRvcnkgcmVxdWVzdHMKKyAqCisgKiBAd2lwaHlfaWR4OiB0aGlzIGlzIHNldCBpZiB0aGlzIHJlcXVlc3QncyBpbml0aWF0b3IgaXMKKyAqIAklUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yICVSRUdET01fU0VUX0JZX0RSSVZFUi4gVGhpcworICogCWNhbiBiZSB1c2VkIGJ5IHRoZSB3aXJlbGVzcyBjb3JlIHRvIGRlYWwgd2l0aCBjb25mbGljdHMKKyAqIAlhbmQgcG90ZW50aWFsbHkgaW5mb3JtIHVzZXJzIG9mIHdoaWNoIGRldmljZXMgc3BlY2lmaWNhbGx5CisgKiAJY2FzZWQgdGhlIGNvbmZsaWN0cy4KKyAqIEBpbml0aWF0b3I6IGluZGljYXRlcyB3aG8gc2VudCB0aGlzIHJlcXVlc3QsIGNvdWxkIGJlIGFueSBvZgorICogCW9mIHRob3NlIHNldCBpbiBubDgwMjExX3JlZ19pbml0aWF0b3IgKCVOTDgwMjExX1JFR0RPTV9TRVRfQllfKikKKyAqIEBhbHBoYTI6IHRoZSBJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIG9mIHRoZSByZXF1ZXN0ZWQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4gV2UgaGF2ZSBhIGZldyBzcGVjaWFsIGNvZGVzOgorICogCTAwIC0gV29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAk5OSAtIGJ1aWx0IGJ5IGRyaXZlciBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKKyAqIAk5OCAtIHJlc3VsdCBvZiBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVndWxhdG9yeSBkb21haW5zCisgKiBAaW50ZXJzZWN0OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd2lyZWxlc3MgY29yZSBzaG91bGQgaW50ZXJzZWN0CisgKiAJdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiB3aXRoIHRoZSBwcmVzZW50bHkgc2V0IHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIGFuZCBhY2NlcHRlZAorICogCWNvdW50cnkgSUUKKyAqIEBjb3VudHJ5X2llX2VudjogbGV0cyB1cyBrbm93IGlmIHRoZSBBUCBpcyB0ZWxsaW5nIHVzIHdlIGFyZSBvdXRkb29yLAorICogCWluZG9vciwgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXIKKyAqIEBsaXN0OiB1c2VkIHRvIGluc2VydCBpbnRvIHRoZSByZWdfcmVxdWVzdHNfbGlzdCBsaW5rZWQgbGlzdAorICovCitzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IHsKKwlpbnQgd2lwaHlfaWR4OworCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcjsKKwljaGFyIGFscGhhMlsyXTsKKwlib29sIGludGVyc2VjdDsKKwl1MzIgY291bnRyeV9pZV9jaGVja3N1bTsKKwllbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2VudjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgewpAQCAtNDM4LDYgKzQ3OCwxODcgQEAKIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbDsKIAogLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAtIFNTSUQgZGVzY3JpcHRpb24KKyAqIEBzc2lkOiB0aGUgU1NJRAorICogQHNzaWRfbGVuOiBsZW5ndGggb2YgdGhlIHNzaWQKKyAqLworc3RydWN0IGNmZzgwMjExX3NzaWQgeworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJdTggc3NpZF9sZW47Cit9OworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgLSBzY2FuIHJlcXVlc3QgZGVzY3JpcHRpb24KKyAqCisgKiBAc3NpZHM6IFNTSURzIHRvIHNjYW4gZm9yIChhY3RpdmUgc2NhbiBvbmx5KQorICogQG5fc3NpZHM6IG51bWJlciBvZiBTU0lEcworICogQGNoYW5uZWxzOiBjaGFubmVscyB0byBzY2FuIG9uLgorICogQG5fY2hhbm5lbHM6IG51bWJlciBvZiBjaGFubmVscyBmb3IgZWFjaCBiYW5kCisgKiBAaWU6IG9wdGlvbmFsIGluZm9ybWF0aW9uIGVsZW1lbnQocykgdG8gYWRkIGludG8gUHJvYmUgUmVxdWVzdCBvciAlTlVMTAorICogQGllX2xlbjogbGVuZ3RoIG9mIGllIGluIG9jdGV0cworICogQHdpcGh5OiB0aGUgd2lwaHkgdGhpcyB3YXMgZm9yCisgKiBAaWZpZHg6IHRoZSBpbnRlcmZhY2UgaW5kZXgKKyAqLworc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCB7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWRzOworCWludCBuX3NzaWRzOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqKmNoYW5uZWxzOworCXUzMiBuX2NoYW5uZWxzOworCXU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworCisJLyogaW50ZXJuYWwgKi8KKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWludCBpZmlkeDsKK307CisKKy8qKgorICogZW51bSBjZmc4MDIxMV9zaWduYWxfdHlwZSAtIHNpZ25hbCB0eXBlCisgKgorICogQENGRzgwMjExX1NJR05BTF9UWVBFX05PTkU6IG5vIHNpZ25hbCBzdHJlbmd0aCBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKyAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06IHNpZ25hbCBzdHJlbmd0aCBpbiBtQm0gKDEwMCpkQm0pCisgKiBAQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOiBzaWduYWwgc3RyZW5ndGgsIGluY3JlYXNpbmcgZnJvbSAwIHRocm91Z2ggMTAwCisgKi8KK2VudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgeworCUNGRzgwMjExX1NJR05BTF9UWVBFX05PTkUsCisJQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNLAorCUNGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQywKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2JzcyAtIEJTUyBkZXNjcmlwdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIEJTUyAod2hpY2ggbWF5IGFsc28gYmUgYSBtZXNoIG5ldHdvcmspCisgKiBmb3IgdXNlIGluIHNjYW4gcmVzdWx0cyBhbmQgc2ltaWxhci4KKyAqCisgKiBAYnNzaWQ6IEJTU0lEIG9mIHRoZSBCU1MKKyAqIEB0c2Y6IHRpbWVzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIHVwZGF0ZQorICogQGJlYWNvbl9pbnRlcnZhbDogdGhlIGJlYWNvbiBpbnRlcnZhbCBhcyBmcm9tIHRoZSBmcmFtZQorICogQGNhcGFiaWxpdHk6IHRoZSBjYXBhYmlsaXR5IGZpZWxkIGluIGhvc3QgYnl0ZSBvcmRlcgorICogQGluZm9ybWF0aW9uX2VsZW1lbnRzOiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgKE5vdGUgdGhhdCB0aGVyZQorICoJaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlc2UgYXJlIHdlbGwtZm9ybWVkISkKKyAqIEBsZW5faW5mb3JtYXRpb25fZWxlbWVudHM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMKKyAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAodHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlKQorICogQGhvbGQ6IEJTUyBzaG91bGQgbm90IGV4cGlyZQorICogQGZyZWVfcHJpdjogZnVuY3Rpb24gcG9pbnRlciB0byBmcmVlIHByaXZhdGUgZGF0YQorICogQHByaXY6IHByaXZhdGUgYXJlYSBmb3IgZHJpdmVyIHVzZSwgaGFzIGF0IGxlYXN0IHdpcGh5LT5ic3NfcHJpdl9zaXplIGJ5dGVzCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9ic3MgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1NjQgdHNmOworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJdTE2IGNhcGFiaWxpdHk7CisJdTggKmluZm9ybWF0aW9uX2VsZW1lbnRzOworCXNpemVfdCBsZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CisKKwlzMzIgc2lnbmFsOworCisJdm9pZCAoKmZyZWVfcHJpdikoc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKwl1OCBwcml2WzBdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0IC0gQXV0aGVudGljYXRpb24gcmVxdWVzdCBkYXRhCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbXBsZXRlIElFRUUgODAyLjExCisgKiBhdXRoZW50aWNhdGlvbi4KKyAqIE5PVEU6IFRoaXMgc3RydWN0dXJlIHdpbGwgbGlrZWx5IGNoYW5nZSB3aGVuIG1vcmUgY29kZSBmcm9tIG1hYzgwMjExIGlzCisgKiBtb3ZlZCBpbnRvIGNmZzgwMjExIHNvIHRoYXQgbm9uLW1hYzgwMjExIGRyaXZlcnMgY2FuIGJlbmVmaXQgZnJvbSBpdCwgdG9vLgorICogQmVmb3JlIHVzaW5nIHRoaXMgaW4gYSBkcml2ZXIgdGhhdCBkb2VzIG5vdCB1c2UgbWFjODAyMTEsIGl0IHdvdWxkIGJlIGJldHRlcgorICogdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGF0IHdvcmsgYW5kIGJldHRlciB5ZXQsIHZvbHVudGVlciB0byB3b3JrIG9uIGl0LgorICoKKyAqIEBjaGFuOiBUaGUgY2hhbm5lbCB0byB1c2Ugb3IgJU5VTEwgaWYgbm90IHNwZWNpZmllZCAoYXV0by1zZWxlY3QgYmFzZWQgb24KKyAqCXNjYW4gcmVzdWx0cykKKyAqIEBwZWVyX2FkZHI6IFRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIFNUQSAoQVAgQlNTSUQgaW4gaW5mcmFzdHJ1Y3R1cmUgY2FzZSk7CisgKgl0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQ7IGlmIHRoZSBkcml2ZXIgd2FudHMgdG8gaGVscCB3aXRoCisgKglCU1Mgc2VsZWN0aW9uLCBpdCBzaG91bGQgdXNlICh5ZXQgdG8gYmUgYWRkZWQpIE1MTUUgZXZlbnQgdG8gYWxsb3cgdXNlcgorICoJc3BhY2UgU01FIHRvIGJlIG5vdGlmaWVkIG9mIHJvYW1pbmcgY2FuZGlkYXRlLCBzbyB0aGF0IHRoZSBTTUUgY2FuIHRoZW4KKyAqCXVzZSB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aXRoIHRoZSByZWNvbW1lbmRlZCBCU1NJRCBhbmQgd2hhdGV2ZXIKKyAqCW90aGVyIGRhdGEgbWF5IGJlIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24vYXNzb2NpYXRpb24KKyAqIEBzc2lkOiBTU0lEIG9yICVOVUxMIGlmIG5vdCB5ZXQgYXZhaWxhYmxlCisgKiBAc3NpZF9sZW46IExlbmd0aCBvZiBzc2lkIGluIG9jdGV0cworICogQGF1dGhfdHlwZTogQXV0aGVudGljYXRpb24gdHlwZSAoYWxnb3JpdGhtKQorICogQGllOiBFeHRyYSBJRXMgdG8gYWRkIHRvIEF1dGhlbnRpY2F0aW9uIGZyYW1lIG9yICVOVUxMCisgKiBAaWVfbGVuOiBMZW5ndGggb2YgaWUgYnVmZmVyIGluIG9jdGV0cworICovCitzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJdTggKnBlZXJfYWRkcjsKKwljb25zdCB1OCAqc3NpZDsKKwlzaXplX3Qgc3NpZF9sZW47CisJZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGU7CisJY29uc3QgdTggKmllOworCXNpemVfdCBpZV9sZW47Cit9OworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0IC0gKFJlKUFzc29jaWF0aW9uIHJlcXVlc3QgZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQorICogKHJlKWFzc29jaWF0aW9uLgorICogTk9URTogVGhpcyBzdHJ1Y3R1cmUgd2lsbCBsaWtlbHkgY2hhbmdlIHdoZW4gbW9yZSBjb2RlIGZyb20gbWFjODAyMTEgaXMKKyAqIG1vdmVkIGludG8gY2ZnODAyMTEgc28gdGhhdCBub24tbWFjODAyMTEgZHJpdmVycyBjYW4gYmVuZWZpdCBmcm9tIGl0LCB0b28uCisgKiBCZWZvcmUgdXNpbmcgdGhpcyBpbiBhIGRyaXZlciB0aGF0IGRvZXMgbm90IHVzZSBtYWM4MDIxMSwgaXQgd291bGQgYmUgYmV0dGVyCisgKiB0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoYXQgd29yayBhbmQgYmV0dGVyIHlldCwgdm9sdW50ZWVyIHRvIHdvcmsgb24gaXQuCisgKgorICogQGNoYW46IFRoZSBjaGFubmVsIHRvIHVzZSBvciAlTlVMTCBpZiBub3Qgc3BlY2lmaWVkIChhdXRvLXNlbGVjdCBiYXNlZCBvbgorICoJc2NhbiByZXN1bHRzKQorICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKKyAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBpbiBTdGF0ZSAyIChhdXRoZW50aWNhdGVkKSB3aXRoIHRoZQorICoJcGVlciBTVEEKKyAqIEBzc2lkOiBTU0lECisgKiBAc3NpZF9sZW46IExlbmd0aCBvZiBzc2lkIGluIG9jdGV0cworICogQGllOiBFeHRyYSBJRXMgdG8gYWRkIHRvIChSZSlBc3NvY2lhdGlvbiBSZXF1ZXN0IGZyYW1lIG9yICVOVUxMCisgKiBAaWVfbGVuOiBMZW5ndGggb2YgaWUgYnVmZmVyIGluIG9jdGV0cworICovCitzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXU4ICpwZWVyX2FkZHI7CisJY29uc3QgdTggKnNzaWQ7CisJc2l6ZV90IHNzaWRfbGVuOworCWNvbnN0IHU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgLSBEZWF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQorICogZGVhdXRoZW50aWNhdGlvbi4KKyAqCisgKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEKTsgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAorICoJdG8gYmUgcHJlc2VudCBhbmQgdGhlIFNUQSBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcGVlciBTVEEKKyAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIG9yICVOVUxMCisgKiBAaWVfbGVuOiBMZW5ndGggb2YgaWUgYnVmZmVyIGluIG9jdGV0cworICovCitzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgeworCXU4ICpwZWVyX2FkZHI7CisJdTE2IHJlYXNvbl9jb2RlOworCWNvbnN0IHU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAtIERpc2Fzc29jaWF0aW9uIHJlcXVlc3QgZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQorICogZGlzYXNzb2NhdGlvbi4KKyAqCisgKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEKTsgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAorICoJdG8gYmUgcHJlc2VudCBhbmQgdGhlIFNUQSBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVlciBTVEEKKyAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBEaXNhc3NvY2lhdGlvbiBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgeworCXU4ICpwZWVyX2FkZHI7CisJdTE2IHJlYXNvbl9jb2RlOworCWNvbnN0IHU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIC0gYmFja2VuZCBkZXNjcmlwdGlvbiBmb3Igd2lyZWxlc3MgY29uZmlndXJhdGlvbgogICoKICAqIFRoaXMgc3RydWN0IGlzIHJlZ2lzdGVyZWQgYnkgZnVsbG1hYyBjYXJkIGRyaXZlcnMgYW5kL29yIHdpcmVsZXNzIHN0YWNrcwpAQCAtNDUwLDYgKzY3MSw5IEBACiAgKiB3aXJlbGVzcyBleHRlbnNpb25zIGJ1dCB0aGlzIGlzIHN1YmplY3QgdG8gcmVldmFsdWF0aW9uIGFzIHNvb24gYXMgdGhpcwogICogY29kZSBpcyB1c2VkIG1vcmUgd2lkZWx5IGFuZCB3ZSBoYXZlIGEgZmlyc3QgdXNlciB3aXRob3V0IHdleHQuCiAgKgorICogQHN1c3BlbmQ6IHdpcGh5IGRldmljZSBuZWVkcyB0byBiZSBzdXNwZW5kZWQKKyAqIEByZXN1bWU6IHdpcGh5IGRldmljZSBuZWVkcyB0byBiZSByZXN1bWVkCisgKgogICogQGFkZF92aXJ0dWFsX2ludGY6IGNyZWF0ZSBhIG5ldyB2aXJ0dWFsIGludGVyZmFjZSB3aXRoIHRoZSBnaXZlbiBuYW1lLAogICoJbXVzdCBzZXQgdGhlIHN0cnVjdCB3aXJlbGVzc19kZXYncyBpZnR5cGUuCiAgKgpAQCAtNDcxLDYgKzY5NSw4IEBACiAgKgogICogQHNldF9kZWZhdWx0X2tleTogc2V0IHRoZSBkZWZhdWx0IGtleSBvbiBhbiBpbnRlcmZhY2UKICAqCisgKiBAc2V0X2RlZmF1bHRfbWdtdF9rZXk6IHNldCB0aGUgZGVmYXVsdCBtYW5hZ2VtZW50IGZyYW1lIGtleSBvbiBhbiBpbnRlcmZhY2UKKyAqCiAgKiBAYWRkX2JlYWNvbjogQWRkIGEgYmVhY29uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycywgQGhlYWQsIEBpbnRlcnZhbAogICoJYW5kIEBkdGltX3BlcmlvZCB3aWxsIGJlIHZhbGlkLCBAdGFpbCBpcyBvcHRpb25hbC4KICAqIEBzZXRfYmVhY29uOiBDaGFuZ2UgdGhlIGJlYWNvbiBwYXJhbWV0ZXJzIGZvciBhbiBhY2Nlc3MgcG9pbnQgbW9kZQpAQCAtNDk3LDggKzcyMywyMSBAQAogICogQHNldF90eHFfcGFyYW1zOiBTZXQgVFggcXVldWUgcGFyYW1ldGVycwogICoKICAqIEBzZXRfY2hhbm5lbDogU2V0IGNoYW5uZWwKKyAqCisgKiBAc2NhbjogUmVxdWVzdCB0byBkbyBhIHNjYW4uIElmIHJldHVybmluZyB6ZXJvLCB0aGUgc2NhbiByZXF1ZXN0IGlzIGdpdmVuCisgKgl0aGUgZHJpdmVyLCBhbmQgd2lsbCBiZSB2YWxpZCB1bnRpbCBwYXNzZWQgdG8gY2ZnODAyMTFfc2Nhbl9kb25lKCkuCisgKglGb3Igc2NhbiByZXN1bHRzLCBjYWxsIGNmZzgwMjExX2luZm9ybV9ic3MoKTsgeW91IGNhbiBjYWxsIHRoaXMgb3V0c2lkZQorICoJdGhlIHNjYW4vc2Nhbl9kb25lIGJyYWNrZXQgdG9vLgorICoKKyAqIEBhdXRoOiBSZXF1ZXN0IHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGVlcgorICogQGFzc29jOiBSZXF1ZXN0IHRvIChyZSlhc3NvY2lhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHBlZXIKKyAqIEBkZWF1dGg6IFJlcXVlc3QgdG8gZGVhdXRoZW50aWNhdGUgZnJvbSB0aGUgc3BlY2lmaWVkIHBlZXIKKyAqIEBkaXNhc3NvYzogUmVxdWVzdCB0byBkaXNhc3NvY2lhdGUgZnJvbSB0aGUgc3BlY2lmaWVkIHBlZXIKICAqLwogc3RydWN0IGNmZzgwMjExX29wcyB7CisJaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisJaW50CSgqcmVzdW1lKShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKwogCWludAkoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGNoYXIgKm5hbWUsCiAJCQkJICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CkBAIC01MTgsNiArNzU3LDkgQEAKIAlpbnQJKCpzZXRfZGVmYXVsdF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICB1OCBrZXlfaW5kZXgpOworCWludAkoKnNldF9kZWZhdWx0X21nbXRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgpOwogCiAJaW50CSgqYWRkX2JlYWNvbikoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBiZWFjb25fcGFyYW1ldGVycyAqaW5mbyk7CkBAIC01NjQsNiArODA2LDE4IEBACiAJaW50CSgqc2V0X2NoYW5uZWwpKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKKworCWludAkoKnNjYW4pKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KTsKKworCWludAkoKmF1dGgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0ICpyZXEpOworCWludAkoKmFzc29jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpOworCWludAkoKmRlYXV0aCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0ICpyZXEpOworCWludAkoKmRpc2Fzc29jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEpOwogfTsKIAogLyogdGVtcG9yYXJ5IHdleHQgaGFuZGxlcnMgKi8KQEAgLTU3NCw1ICs4MjgsMTM0IEBACiAJCQkgIHUzMiAqbW9kZSwgY2hhciAqZXh0cmEpOwogaW50IGNmZzgwMjExX3dleHRfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICB1MzIgKm1vZGUsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CisKKy8qKgorICogY2ZnODAyMTFfc2Nhbl9kb25lIC0gbm90aWZ5IHRoYXQgc2NhbiBmaW5pc2hlZAorICoKKyAqIEByZXF1ZXN0OiB0aGUgY29ycmVzcG9uZGluZyBzY2FuIHJlcXVlc3QKKyAqIEBhYm9ydGVkOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgc2NhbiB3YXMgYWJvcnRlZCBmb3IgYW55IHJlYXNvbiwKKyAqCXVzZXJzcGFjZSB3aWxsIGJlIG5vdGlmaWVkIG9mIHRoYXQKKyAqLwordm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBhYm9ydGVkKTsKKworLyoqCisgKiBjZmc4MDIxMV9pbmZvcm1fYnNzIC0gaW5mb3JtIGNmZzgwMjExIG9mIGEgbmV3IEJTUworICoKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHJlcG9ydGluZyB0aGUgQlNTCisgKiBAYnNzOiB0aGUgZm91bmQgQlNTCisgKiBAc2lnbmFsOiB0aGUgc2lnbmFsIHN0cmVuZ3RoLCB0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUKKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKKyAqCisgKiBUaGlzIGluZm9ybXMgY2ZnODAyMTEgdGhhdCBCU1MgaW5mb3JtYXRpb24gd2FzIGZvdW5kIGFuZAorICogdGhlIEJTUyBzaG91bGQgYmUgdXBkYXRlZC9hZGRlZC4KKyAqLworc3RydWN0IGNmZzgwMjExX2JzcyoKK2NmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCisJCQkgIHMzMiBzaWduYWwsIGdmcF90IGdmcCk7CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgY29uc3QgdTggKmJzc2lkLAorCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgdTE2IGNhcGFfbWFzaywgdTE2IGNhcGFfdmFsKTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqCitjZmc4MDIxMV9nZXRfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQoreworCXJldHVybiBjZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBjaGFubmVsLCBOVUxMLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQlXTEFOX0NBUEFCSUxJVFlfSUJTUywgV0xBTl9DQVBBQklMSVRZX0lCU1MpOworfQorCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfbWVzaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgIGNvbnN0IHU4ICptZXNoaWQsIHNpemVfdCBtZXNoaWRsZW4sCisJCQkJICAgICAgIGNvbnN0IHU4ICptZXNoY2ZnKTsKK3ZvaWQgY2ZnODAyMTFfcHV0X2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOworLyoqCisgKiBjZmc4MDIxMV91bmxpbmtfYnNzIC0gdW5saW5rIEJTUyBmcm9tIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICogQHdpcGh5OiB0aGUgd2lwaHkKKyAqIEBic3M6IHRoZSBic3MgdG8gcmVtb3ZlCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBnaXZlbiBCU1MgZnJvbSB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgKiB0aGVyZWJ5IG1ha2luZyBpdCBubyBsb25nZXIgc2hvdyB1cCBpbiBzY2FuIHJlc3VsdHMgZXRjLiBVc2UgdGhpcworICogZnVuY3Rpb24gd2hlbiB5b3UgZGV0ZWN0IGEgQlNTIGlzIGdvbmUuIE5vcm1hbGx5IEJTU2VzIHdpbGwgYWxzbyB0aW1lCisgKiBvdXQsIHNvIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXQgYWxsLgorICovCit2b2lkIGNmZzgwMjExX3VubGlua19ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKworLyoqCisgKiBjZmc4MDIxMV9zZW5kX3J4X2F1dGggLSBub3RpZmljYXRpb24gb2YgcHJvY2Vzc2VkIGF1dGhlbnRpY2F0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGJ1ZjogYXV0aGVudGljYXRpb24gZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBhdXRoZW50aWNhdGlvbiBoYXMgYmVlbiBwcm9jZXNzZWQgaW4KKyAqIHN0YXRpb24gbW9kZS4KKyAqLwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CisKKy8qKgorICogY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyAtIG5vdGlmaWNhdGlvbiBvZiBwcm9jZXNzZWQgYXNzb2NpYXRpb24KKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAYnVmOiAocmUpYXNzb2NpYXRpb24gcmVzcG9uc2UgZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIChyZSlhc3NvY2lhdGlvbiByZXNwb25zZSBoYXMgYmVlbgorICogcHJvY2Vzc2VkIGluIHN0YXRpb24gbW9kZS4KKyAqLwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOworCisvKioKKyAqIGNmZzgwMjExX3NlbmRfcnhfZGVhdXRoIC0gbm90aWZpY2F0aW9uIG9mIHByb2Nlc3NlZCBkZWF1dGhlbnRpY2F0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGJ1ZjogZGVhdXRoZW50aWNhdGlvbiBmcmFtZSAoaGVhZGVyICsgYm9keSkKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgZnJhbWUgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGRlYXV0aGVudGljYXRpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIGluCisgKiBzdGF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9kZWF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGxlbik7CisKKy8qKgorICogY2ZnODAyMTFfc2VuZF9yeF9kaXNhc3NvYyAtIG5vdGlmaWNhdGlvbiBvZiBwcm9jZXNzZWQgZGlzYXNzb2NpYXRpb24KKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAYnVmOiBkaXNhc3NvY2lhdGlvbiByZXNwb25zZSBmcmFtZSAoaGVhZGVyICsgYm9keSkKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgZnJhbWUgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGRpc2Fzc29jaWF0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBpbgorICogc3RhdGlvbiBtb2RlLgorICovCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgbGVuKTsKKworLyoqCisgKiBjZmc4MDIxMV9ob2xkX2JzcyAtIGV4Y2x1ZGUgYnNzIGZyb20gZXhwaXJhdGlvbgorICogQGJzczogYnNzIHdoaWNoIHNob3VsZCBub3QgZXhwaXJlCisgKgorICogSW4gYSBjYXNlIHdoZW4gdGhlIEJTUyBpcyBub3QgdXBkYXRlZCBidXQgaXQgc2hvdWxkbid0IGV4cGlyZSB0aGlzCisgKiBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBtYXJrIHRoZSBCU1MgdG8gYmUgZXhjbHVkZWQgZnJvbSBleHBpcmF0aW9uLgorICovCit2b2lkIGNmZzgwMjExX2hvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CisKKy8qKgorICogY2ZnODAyMTFfdW5ob2xkX2JzcyAtIHJlbW92ZSBleHBpcmF0aW9uIGV4Y2VwdGlvbiBmcm9tIHRoZSBCU1MKKyAqIEBic3M6IGJzcyB3aGljaCBjYW4gZXhwaXJlIGFnYWluCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXJrcyB0aGUgQlNTIHRvIGJlIGV4cGlyYWJsZSBhZ2Fpbi4KKyAqLwordm9pZCBjZmc4MDIxMV91bmhvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CiAKICNlbmRpZiAvKiBfX05FVF9DRkc4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmggYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKaW5kZXggYmVkYzdmNi4uYWJkNDQzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgorI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIC8qIGtub3duIGRvaSB2YWx1ZXMgKi8KQEAgLTIxNSw2ICsyMTYsMTAgQEAKIAkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CiB2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spOwogaW50IGNpcHNvX3Y0X3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IGNpcHNvX3Y0X3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCSBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordm9pZCBjaXBzb192NF9yZXFfZGVsYXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwogaW50IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKQEAgLTI0Nyw2ICsyNTIsMTggQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfcmVxX3NldGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lwc29fdjRfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXJldHVybjsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfc2tidWZmX3NldGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oCmluZGV4IDUyZTk3YmYuLjgzOWY3NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oCisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIGluY2x1ZGUvbmV0L2RzYS5oIC0gRHJpdmVyIGZvciBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHN3aXRjaCBjaGlwcwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMSwyMyArMTEsNDcgQEAKICNpZm5kZWYgX19MSU5VWF9ORVRfRFNBX0gKICNkZWZpbmUgX19MSU5VWF9ORVRfRFNBX0gKIAotI2RlZmluZSBEU0FfTUFYX1BPUlRTCTEyCisjZGVmaW5lIERTQV9NQVhfU1dJVENIRVMJNAorI2RlZmluZSBEU0FfTUFYX1BPUlRTCQkxMgorCitzdHJ1Y3QgZHNhX2NoaXBfZGF0YSB7CisJLyoKKwkgKiBIb3cgdG8gYWNjZXNzIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisJICovCisJc3RydWN0IGRldmljZQkqbWlpX2J1czsKKwlpbnQJCXN3X2FkZHI7CisKKwkvKgorCSAqIFRoZSBuYW1lcyBvZiB0aGUgc3dpdGNoJ3MgcG9ydHMuICBVc2UgImNwdSIgdG8KKwkgKiBkZXNpZ25hdGUgdGhlIHN3aXRjaCBwb3J0IHRoYXQgdGhlIGNwdSBpcyBjb25uZWN0ZWQgdG8sCisJICogImRzYSIgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHBvcnQgaXMgYSBEU0EgbGluayB0bworCSAqIGFub3RoZXIgc3dpdGNoLCBOVUxMIHRvIGluZGljYXRlIHRoZSBwb3J0IGlzIHVudXNlZCwKKwkgKiBvciBhbnkgb3RoZXIgc3RyaW5nIHRvIGluZGljYXRlIHRoaXMgaXMgYSBwaHlzaWNhbCBwb3J0LgorCSAqLworCWNoYXIJCSpwb3J0X25hbWVzW0RTQV9NQVhfUE9SVFNdOworCisJLyoKKwkgKiBBbiBhcnJheSAod2l0aCBucl9jaGlwcyBlbGVtZW50cykgb2Ygd2hpY2ggZWxlbWVudCBbYV0KKwkgKiBpbmRpY2F0ZXMgd2hpY2ggcG9ydCBvbiB0aGlzIHN3aXRjaCBzaG91bGQgYmUgdXNlZCB0bworCSAqIHNlbmQgcGFja2V0cyB0byB0aGF0IGFyZSBkZXN0aW5lZCBmb3Igc3dpdGNoIGEuICBDYW4gYmUKKwkgKiBOVUxMIGlmIHRoZXJlIGlzIG9ubHkgb25lIHN3aXRjaCBjaGlwLgorCSAqLworCXM4CQkqcnRhYmxlOworfTsKIAogc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHsKIAkvKgogCSAqIFJlZmVyZW5jZSB0byBhIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgY29ubmVjdHMKLQkgKiB0byB0aGUgc3dpdGNoIGNoaXAuCisJICogdG8gdGhlIHJvb3Qgc3dpdGNoIGNoaXAgb2YgdGhlIHRyZWUuCiAJICovCiAJc3RydWN0IGRldmljZQkqbmV0ZGV2OwogCiAJLyoKLQkgKiBIb3cgdG8gYWNjZXNzIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIGFuZAotCSAqIHRoZSBuYW1lcyBvZiB0aGUgc3dpdGNoIHBvcnRzICh1c2UgImNwdSIgdG8gZGVzaWduYXRlCi0JICogdGhlIHN3aXRjaCBwb3J0IHRoYXQgdGhlIGNwdSBpcyBjb25uZWN0ZWQgdG8pLgorCSAqIEluZm8gc3RydWN0cyBkZXNjcmliaW5nIGVhY2ggb2YgdGhlIHN3aXRjaCBjaGlwcworCSAqIGNvbm5lY3RlZCB2aWEgdGhpcyBuZXR3b3JrIGludGVyZmFjZS4KIAkgKi8KLQlzdHJ1Y3QgZGV2aWNlCSptaWlfYnVzOwotCWludAkJc3dfYWRkcjsKLQljaGFyCQkqcG9ydF9uYW1lc1tEU0FfTUFYX1BPUlRTXTsKKwlpbnQJCW5yX2NoaXBzOworCXN0cnVjdCBkc2FfY2hpcF9kYXRhCSpjaGlwOwogfTsKIAogZXh0ZXJuIGJvb2wgZHNhX3VzZXNfZHNhX3RhZ3Modm9pZCAqZHNhX3B0cik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ldGhvYy5oIGIvaW5jbHVkZS9uZXQvZXRob2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYzNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZXRob2MuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogbGludXgvaW5jbHVkZS9uZXQvZXRob2MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEF2aW9uaWMgRGVzaWduIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFdyaXR0ZW4gYnkgVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPgorICovCisKKyNpZm5kZWYgTElOVVhfTkVUX0VUSE9DX0gKKyNkZWZpbmUgTElOVVhfTkVUX0VUSE9DX0ggMQorCitzdHJ1Y3QgZXRob2NfcGxhdGZvcm1fZGF0YSB7CisJdTggaHdhZGRyW0lGSFdBRERSTEVOXTsKKwlzOCBwaHlfaWQ7Cit9OworCisjZW5kaWYgLyogIUxJTlVYX05FVF9FVEhPQ19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYjdjZjMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTg1ICswLDAgQEAKLS8qCi0gKiBNZXJnZWQgd2l0aCBtYWlubGluZSBpZWVlODAyMTEuaCBpbiBBdWcgMjAwNC4gIE9yaWdpbmFsIGllZWU4MDJfMTEKLSAqIHJlbWFpbnMgY29weXJpZ2h0IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzCi0gKgotICogUG9ydGlvbnMgb2YgdGhlIG1lcmdlZCBjb2RlIGFyZSBiYXNlZCBvbiBIb3N0IEFQIChzb2Z0d2FyZSB3aXJlbGVzcwotICogTEFOIGFjY2VzcyBwb2ludCkgZHJpdmVyIGZvciBJbnRlcnNpbCBQcmlzbTIvMi41LzMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsIFNTSCBDb21tdW5pY2F0aW9ucyBTZWN1cml0eSBDb3JwIGFuZCBKb3VuaSBNYWxpbmVuCi0gKiA8akB3MS5maT4KLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgotICoKLSAqIEFkYXB0aW9uIHRvIGEgZ2VuZXJpYyBJRUVFIDgwMi4xMSBzdGFjayBieSBKYW1lcyBLZXRyZW5vcwotICogPGprZXRyZW5vQGxpbnV4LmludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1LCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIFNlZSBSRUFETUUgYW5kIENPUFlJTkcgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogQVBJIFZlcnNpb24gSGlzdG9yeQotICogMS4wLnggLS0gSW5pdGlhbCB2ZXJzaW9uCi0gKiAxLjEueCAtLSBBZGRlZCByYWRpb3RhcCwgUW9TLCBUSU0sIGllZWU4MDIxMV9nZW8gQVBJcywKLSAqICAgICAgICAgIHZhcmlvdXMgc3RydWN0dXJlIGNoYW5nZXMsIGFuZCBjcnlwdG8gQVBJIGluaXQgbWV0aG9kCi0gKi8KLSNpZm5kZWYgSUVFRTgwMjExX0gKLSNkZWZpbmUgSUVFRTgwMjExX0gKLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgkvKiBFVEhfQUxFTiAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBBUlJBWV9TSVpFICovCi0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLQotI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgotCi0jZGVmaW5lIElFRUU4MDIxMV9WRVJTSU9OICJnaXQtMS4xLjEzIgotCi0jZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTgkJMjMwNAotLyogTWF4aW11bSBzaXplIGZvciB0aGUgTUEtVU5JVERBVEEgcHJpbWl0aXZlLCA4MDIuMTEgc3RhbmRhcmQgc2VjdGlvbgotICAgNi4yLjEuMS4yLgotCi0gICBUaGUgZmlndXJlIGluIHNlY3Rpb24gNy4xLjIgc3VnZ2VzdHMgYSBib2R5IHNpemUgb2YgdXAgdG8gMjMxMgotICAgYnl0ZXMgaXMgYWxsb3dlZCwgd2hpY2ggaXMgYSBiaXQgY29uZnVzaW5nLCBJIHN1c3BlY3QgdGhpcwotICAgcmVwcmVzZW50cyB0aGUgMjMwNCBieXRlcyBvZiByZWFsIGRhdGEsIHBsdXMgYSBwb3NzaWJsZSA4IGJ5dGVzIG9mCi0gICBXRVAgSVYgYW5kIElDVi4gKHRoaXMgaW50ZXJwcmV0YXRpb24gc3VnZ2VzdGVkIGJ5IFJhbWlybyBCYXJyZWlybykgKi8KLQotI2RlZmluZSBJRUVFODAyMTFfMUFERFJfTEVOIDEwCi0jZGVmaW5lIElFRUU4MDIxMV8yQUREUl9MRU4gMTYKLSNkZWZpbmUgSUVFRTgwMjExXzNBRERSX0xFTiAyNAotI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOIDMwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1NfTEVOICAgIDQKLSNkZWZpbmUgSUVFRTgwMjExX0hMRU4JCQkoSUVFRTgwMjExXzRBRERSX0xFTikKLSNkZWZpbmUgSUVFRTgwMjExX0ZSQU1FX0xFTgkJKElFRUU4MDIxMV9EQVRBX0xFTiArIElFRUU4MDIxMV9ITEVOKQotCi0jZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQotI2RlZmluZQlNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCi0KLS8qIEZyYW1lIGNvbnRyb2wgZmllbGQgY29uc3RhbnRzICovCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1ZFUlMJCTB4MDAwMwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GVFlQRQkJMHgwMDBjCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1NUWVBFCQkweDAwZjAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVE9EUwkJMHgwMTAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZST01EUwkJMHgwMjAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUwkweDA0MDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUkVUUlkJCTB4MDgwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9QTQkJMHgxMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBCQkweDIwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVECTB4NDAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9PUkRFUgkJMHg4MDAwCi0KLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX01HTVQJCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfQ1RMCQkweDAwMDQKLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX0RBVEEJCTB4MDAwOAotCi0vKiBtYW5hZ2VtZW50ICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQIAkweDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRCTB4MDAyMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRCTB4MDA0MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUAkweDAwNTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0JFQUNPTgkJMHgwMDgwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVElNCQkweDAwOTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DCTB4MDBBMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVVUSAkJMHgwMEIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgJCTB4MDBDMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OCQkweDAwRDAKLQotLyogY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMCQkweDAwQTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JUUwkJMHgwMEIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DVFMJCTB4MDBDMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNLCQkweDAwRDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGRU5ECQkweDAwRTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLCTB4MDBGMAotCi0vKiBkYXRhICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBCQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0sJMHgwMDEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGUE9MTAkweDAwMjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0tQT0xMCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDSwkJMHgwMDUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRlBPTEwJCTB4MDA2MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZBQ0tQT0xMCTB4MDA3MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEgICAgICAgIDB4MDA4MAotCi0jZGVmaW5lIElFRUU4MDIxMV9TQ1RMX0ZSQUcJCTB4MDAwRgotI2RlZmluZSBJRUVFODAyMTFfU0NUTF9TRVEJCTB4RkZGMAotCi0vKiBRT1MgY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfUUNUTF9USUQJCTB4MDAwRgotCi0vKiBkZWJ1ZyBtYWNyb3MgKi8KLQotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKLWV4dGVybiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsOwotI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExOiAlYyAlcyAiIGZtdCwgXAotICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JhdGVsaW1pdF9kZWJ1Zyh1MzIgbGV2ZWwpCi17Ci0JcmV0dXJuIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiBsZXZlbCkgJiYgbmV0X3JhdGVsaW1pdCgpOwotfQotI2Vsc2UKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yYXRlbGltaXRfZGVidWcodTMyIGxldmVsKQotewotCXJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCi0KLS8qCi0gKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbToKLSAqCi0gKiBJZiB5b3UgYXJlIGRlZmluaW5nIGEgbmV3IGRlYnVnIGNsYXNzaWZpY2F0aW9uLCBzaW1wbHkgYWRkIGl0IHRvIHRoZSAjZGVmaW5lCi0gKiBsaXN0IGhlcmUgaW4gdGhlIGZvcm0gb2Y6Ci0gKgotICogI2RlZmluZSBJRUVFODAyMTFfRExfeHh4eCBWQUxVRQotICoKLSAqIHNoaWZ0aW5nIHZhbHVlIHRvIHRoZSBsZWZ0IG9uZSBiaXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkuICB4eHh4IHNob3VsZCBiZQotICogdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIChmb3IgZXhhbXBsZSwgV0VQKQotICoKLSAqIFlvdSB0aGVuIG5lZWQgdG8gZWl0aGVyIGFkZCBhIElFRUU4MDIxMV94eHh4X0RFQlVHKCkgbWFjcm8gZGVmaW5pdGlvbiBmb3IgeW91cgotICogY2xhc3NpZmljYXRpb24sIG9yIHVzZSBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX3h4eHgsIC4uLikgd2hlbmV2ZXIgeW91IHdhbnQKLSAqIHRvIHNlbmQgb3V0cHV0IHRvIHRoYXQgY2xhc3NpZmljYXRpb24uCi0gKgotICogVG8gYWRkIHlvdXIgZGVidWcgbGV2ZWwgdG8gdGhlIGxpc3Qgb2YgbGV2ZWxzIHNlZW4gd2hlbiB5b3UgcGVyZm9ybQotICoKLSAqICUgY2F0IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKLSAqCi0gKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGllZWU4MDIxMV9kZWJ1Z19sZXZlbCBhcnJheS4KLSAqCi0gKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaWVlZTgwMjExIHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9JTkZPICAgICAgICAgICgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfRExfV1ggICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1NDQU4gICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9TVEFURSAgICAgICAgICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfRExfTUdNVCAgICAgICAgICAoMTw8NCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX0ZSQUcgICAgICAgICAgKDE8PDUpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9EUk9QICAgICAgICAgICgxPDw3KQotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9UWCAgICAgICAgICAgICgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfRExfUlggICAgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1FPUyAgICAgICAgICAgKDE8PDMxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgImllZWU4MDIxMTogIiBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0lORk8oZiwgYS4uLikgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1dYKGYsIGEuLi4pICAgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1dYLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU0NBTihmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU0NBTiwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1NUQVRFKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1NUQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfTUdNVChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9NR01ULCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRlJBRyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9GUkFHLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRFJPUChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfVFgoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFgsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19SWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1FPUyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9RT1MsIGYsICMjIGEpCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CS8qIEFSUEhSRF9FVEhFUiAqLwotCi0jaWZuZGVmIFdJUkVMRVNTX1NQWQotI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIGVuYWJsZSBpd3NweSBzdXBwb3J0ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBuZXcgZHJpdmVyIEFQSSAqLwotCi0jZGVmaW5lIEVUSF9QX1BSRUFVVEggMHg4OEM3CS8qIElFRUUgODAyLjExaSBwcmUtYXV0aGVudGljYXRpb24gKi8KLQotI2lmbmRlZiBFVEhfUF84MDIxMV9SQVcKLSNkZWZpbmUgRVRIX1BfODAyMTFfUkFXIChFVEhfUF9FQ09ORVQgKyAxKQotI2VuZGlmCi0KLS8qIElFRUUgODAyLjExIGRlZmluZXMgKi8KLQotI2RlZmluZSBQODAyMTFfT1VJX0xFTiAzCi0KLXN0cnVjdCBpZWVlODAyMTFfc25hcF9oZHIgewotCi0JdTggZHNhcDsJCS8qIGFsd2F5cyAweEFBICovCi0JdTggc3NhcDsJCS8qIGFsd2F5cyAweEFBICovCi0JdTggY3RybDsJCS8qIGFsd2F5cyAweDAzICovCi0JdTggb3VpW1A4MDIxMV9PVUlfTEVOXTsJLyogb3JnYW5pemF0aW9uYWwgdW5pdmVyc2FsIGlkICovCi0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFNOQVBfU0laRSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkcikKLQotI2RlZmluZSBXTEFOX0ZDX0dFVF9WRVJTKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKQotCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgSUVFRTgwMjExX1NDVExfRlJBRykKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUShzZXEpICAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQotCi0vKiBBY3Rpb24gY2F0ZWdvcmllcyAtIDgwMi4xMWggKi8KLWVudW0gaWVlZTgwMjExX2FjdGlvbmNhdGVnb3JpZXMgewotCVdMQU5fQUNUSU9OX1NQRUNUUlVNX01HTVQgPSAwLAotCS8qIFJlc2VydmVkIDEtMTI3ICAqLwotCS8qIEVycm9yICAgIDEyOC0yNTUgKi8KLX07Ci0KLS8qIEFjdGlvbiBkZXRhaWxzIC0gODAyLjExaCAqLwotZW51bSBpZWVlODAyMTFfYWN0aW9uZGV0YWlscyB7Ci0JV0xBTl9BQ1RJT05fQ0FURUdPUllfTUVBU1VSRV9SRVFVRVNUID0gMCwKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9NRUFTVVJFX1JFUE9SVCA9IDEsCi0JV0xBTl9BQ1RJT05fQ0FURUdPUllfVFBDX1JFUVVFU1QgPSAyLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX1RQQ19SRVBPUlQgPSAzLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX0NIQU5ORUxfU1dJVENIID0gNCwKLQkvKiA1IC0gMjU1IFJlc2VydmVkICovCi19OwotCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJICgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SQVRFICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfV0VNQVNLIDB4NwotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTiAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9CQU5EICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0JBTkQgICAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xTUIJCSAgICAgICAgMHgwMgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CCQkgICAgICAgIDB4MDQKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzVNQgkJICAgICAgICAweDBCCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CCQkgICAgICAgIDB4MTYKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUIJCSAgICAgICAgMHgwQwotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQgkJICAgICAgICAweDEyCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQgkJMHgxOAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIJCTB4MjQKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CCQkweDMwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQgkJMHg0OAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIJCTB4NjAKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CCQkweDZDCi0jZGVmaW5lIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sJCTB4ODAKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sJCSgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0sJCSgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0sJCSgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLCQkoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSwkJKDE8PDQpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sJCSgxPDw1KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSwkJKDE8PDYpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLCQkoMTw8NykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0sJCSgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSwkJKDE8PDkpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLCQkoMTw8MTApCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLCQkoMTw8MTEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFU19NQVNLCSAgICAgICAgMHgwMDAwMDAwRgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLCShJRUVFODAyMTFfQ0NLX0JBU0lDX1JBVEVTX01BU0sgfCBcCi0gICAgICAgIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSyB8IFwKLSAgICAgICAgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFU19NQVNLCQkweDAwMDAwRkYwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0RFRkFVTFRfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLICB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSykKLSNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSyAoSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfTlVNX09GRE1fUkFURVMJICAgIDgKLSNkZWZpbmUgSUVFRTgwMjExX05VTV9DQ0tfUkFURVMJICAgICAgICAgICAgNAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9TSElGVF9NQVNLX0EgICAgICAgICA0Ci0KLS8qIE5PVEU6IFRoaXMgZGF0YSBpcyBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXM7IG5vdCBhbGwgaGFyZHdhcmUgcHJvdmlkZXMgdGhpcwotICogICAgICAgaW5mb3JtYXRpb24gZm9yIGZyYW1lcyByZWNlaXZlZC4KLSAqICAgICAgIEZvciBpZWVlODAyMTFfcnhfbWd0LCB5b3UgbmVlZCB0byBzZXQgYXQgbGVhc3QgdGhlICdsZW4nIHBhcmFtZXRlci4KLSAqLwotc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyB7Ci0JdTMyIG1hY190aW1lOwotCXM4IHJzc2k7Ci0JdTggc2lnbmFsOwotCXU4IG5vaXNlOwotCXUxNiByYXRlOwkJLyogaW4gMTAwIGticHMgKi8KLQl1OCByZWNlaXZlZF9jaGFubmVsOwotCXU4IGNvbnRyb2w7Ci0JdTggbWFzazsKLQl1OCBmcmVxOwotCXUxNiBsZW47Ci0JdTY0IHRzZjsKLQl1MzIgYmVhY29uX3RpbWU7Ci19OwotCi0vKiBJRUVFIDgwMi4xMSByZXF1aXJlcyB0aGF0IFNUQSBzdXBwb3J0cyBjb25jdXJyZW50IHJlY2VwdGlvbiBvZiBhdCBsZWFzdAotICogdGhyZWUgZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgZGVmaW5lIGNhbiBiZSBpbmNyZWFzZWQgdG8gc3VwcG9ydCBtb3JlCi0gKiBjb25jdXJyZW50IGZyYW1lcywgYnV0IGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGVhY2ggZW50cnkgY2FuIGNvbnN1bWUgYWJvdXQKLSAqIDIga0Igb2YgUkFNIGFuZCBpbmNyZWFzaW5nIGNhY2hlIHNpemUgd2lsbCBzbG93IGRvd24gZnJhbWUgcmVhc3NlbWJseS4gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOIDQKLQotc3RydWN0IGllZWU4MDIxMV9mcmFnX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X2ZyYWdfdGltZTsKLQl1bnNpZ25lZCBpbnQgc2VxOwotCXVuc2lnbmVkIGludCBsYXN0X2ZyYWc7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1OCBzcmNfYWRkcltFVEhfQUxFTl07Ci0JdTggZHN0X2FkZHJbRVRIX0FMRU5dOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9zdGF0cyB7Ci0JdW5zaWduZWQgaW50IHR4X3VuaWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHR4X3VuaWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCB0eF9kZWZlcnJlZF90cmFuc21pc3Npb25zOwotCXVuc2lnbmVkIGludCB0eF9zaW5nbGVfcmV0cnlfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aXBsZV9yZXRyeV9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHR4X3JldHJ5X2xpbWl0X2V4Y2VlZGVkOwotCXVuc2lnbmVkIGludCB0eF9kaXNjYXJkczsKLQl1bnNpZ25lZCBpbnQgcnhfdW5pY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X211bHRpY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgcnhfdW5pY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHJ4X211bHRpY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHJ4X2Zjc19lcnJvcnM7Ci0JdW5zaWduZWQgaW50IHJ4X2Rpc2NhcmRzX25vX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHNfd3Jvbmdfc2E7Ci0JdW5zaWduZWQgaW50IHJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGU7Ci0JdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fbXNnX2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgcnhfbWVzc2FnZV9pbl9iYWRfbXNnX2ZyYWdtZW50czsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlOwotCi0jZGVmaW5lIFNFQ19LRVlfMQkJKDE8PDApCi0jZGVmaW5lIFNFQ19LRVlfMgkJKDE8PDEpCi0jZGVmaW5lIFNFQ19LRVlfMwkJKDE8PDIpCi0jZGVmaW5lIFNFQ19LRVlfNAkJKDE8PDMpCi0jZGVmaW5lIFNFQ19BQ1RJVkVfS0VZCQkoMTw8NCkKLSNkZWZpbmUgU0VDX0FVVEhfTU9ERQkJKDE8PDUpCi0jZGVmaW5lIFNFQ19VTklDQVNUX0dST1VQCSgxPDw2KQotI2RlZmluZSBTRUNfTEVWRUwJCSgxPDw3KQotI2RlZmluZSBTRUNfRU5BQkxFRAkJKDE8PDgpCi0jZGVmaW5lIFNFQ19FTkNSWVBUCQkoMTw8OSkKLQotI2RlZmluZSBTRUNfTEVWRUxfMAkJMAkvKiBOb25lICovCi0jZGVmaW5lIFNFQ19MRVZFTF8xCQkxCS8qIFdFUCA0MCBhbmQgMTA0IGJpdCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMgkJMgkvKiBMZXZlbCAxICsgVEtJUCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMl9DS0lQCTMJLyogTGV2ZWwgMSArIENLSVAgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzMJCTQJLyogTGV2ZWwgMiArIENDTVAgKi8KLQotI2RlZmluZSBTRUNfQUxHX05PTkUJCTAKLSNkZWZpbmUgU0VDX0FMR19XRVAJCTEKLSNkZWZpbmUgU0VDX0FMR19US0lQCQkyCi0jZGVmaW5lIFNFQ19BTEdfQ0NNUAkJMwotCi0jZGVmaW5lIFdFUF9LRVlTCQk0Ci0jZGVmaW5lIFdFUF9LRVlfTEVOCQkxMwotI2RlZmluZSBTQ01fS0VZX0xFTgkJMzIKLSNkZWZpbmUgU0NNX1RFTVBPUkFMX0tFWV9MRU5HVEgJMTYKLQotc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSB7Ci0JdTE2IGFjdGl2ZV9rZXk6MiwgZW5hYmxlZDoxLCB1bmljYXN0X3VzZXNfZ3JvdXA6MSwgZW5jcnlwdDoxOwotCXU4IGF1dGhfbW9kZTsKLQl1OCBlbmNvZGVfYWxnW1dFUF9LRVlTXTsKLQl1OCBrZXlfc2l6ZXNbV0VQX0tFWVNdOwotCXU4IGtleXNbV0VQX0tFWVNdW1NDTV9LRVlfTEVOXTsKLQl1OCBsZXZlbDsKLQl1MTYgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLQotIDgwMi4xMSBkYXRhIGZyYW1lIGZyb20gQVAKLQotICAgICAgLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi1CeXRlcyB8ICAyICAgfCAgMiAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgIDIgICB8IDAuLjIzMTIgfCAgIDQgIHwKLSAgICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfAotRGVzYy4gfCBjdHJsIHwgZHVyYSB8ICBEQS9SQSAgfCAgIFRBICAgIHwgICAgU0EgICB8IFNlcXUgfCAgZnJhbWUgIHwgIGZjcyB8Ci0gICAgICB8ICAgICAgfCB0aW9uIHwgKEJTU0lEKSB8ICAgICAgICAgfCAgICAgICAgIHwgZW5jZSB8ICBkYXRhICAgfCAgICAgIHwKLSAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotCi1Ub3RhbDogMjgtMjM0MCBieXRlcwotCi0qLwotCi0jZGVmaW5lIEJFQUNPTl9QUk9CRV9TU0lEX0lEX1BPU0lUSU9OIDEyCi0KLS8qIE1hbmFnZW1lbnQgRnJhbWUgSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAqLwotZW51bSBpZWVlODAyMTFfbWZpZSB7Ci0JTUZJRV9UWVBFX1NTSUQgPSAwLAotCU1GSUVfVFlQRV9SQVRFUyA9IDEsCi0JTUZJRV9UWVBFX0ZIX1NFVCA9IDIsCi0JTUZJRV9UWVBFX0RTX1NFVCA9IDMsCi0JTUZJRV9UWVBFX0NGX1NFVCA9IDQsCi0JTUZJRV9UWVBFX1RJTSA9IDUsCi0JTUZJRV9UWVBFX0lCU1NfU0VUID0gNiwKLQlNRklFX1RZUEVfQ09VTlRSWSA9IDcsCi0JTUZJRV9UWVBFX0hPUF9QQVJBTVMgPSA4LAotCU1GSUVfVFlQRV9IT1BfVEFCTEUgPSA5LAotCU1GSUVfVFlQRV9SRVFVRVNUID0gMTAsCi0JTUZJRV9UWVBFX0NIQUxMRU5HRSA9IDE2LAotCU1GSUVfVFlQRV9QT1dFUl9DT05TVFJBSU5UID0gMzIsCi0JTUZJRV9UWVBFX1BPV0VSX0NBUEFCSUxJVFkgPSAzMywKLQlNRklFX1RZUEVfVFBDX1JFUVVFU1QgPSAzNCwKLQlNRklFX1RZUEVfVFBDX1JFUE9SVCA9IDM1LAotCU1GSUVfVFlQRV9TVVBQX0NIQU5ORUxTID0gMzYsCi0JTUZJRV9UWVBFX0NTQSA9IDM3LAotCU1GSUVfVFlQRV9NRUFTVVJFX1JFUVVFU1QgPSAzOCwKLQlNRklFX1RZUEVfTUVBU1VSRV9SRVBPUlQgPSAzOSwKLQlNRklFX1RZUEVfUVVJRVQgPSA0MCwKLQlNRklFX1RZUEVfSUJTU19ERlMgPSA0MSwKLQlNRklFX1RZUEVfRVJQX0lORk8gPSA0MiwKLQlNRklFX1RZUEVfUlNOID0gNDgsCi0JTUZJRV9UWVBFX1JBVEVTX0VYID0gNTAsCi0JTUZJRV9UWVBFX0dFTkVSSUMgPSAyMjEsCi0JTUZJRV9UWVBFX1FPU19QQVJBTUVURVIgPSAyMjIsCi19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8xYWRkciB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggYWRkcjRbRVRIX0FMRU5dOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IHBheWxvYWRbMF07Ci0JX19sZTE2IHFvc19jdGw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgewotCXU4IGlkOwotCXU4IGxlbjsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBjYW4gbWFrZSB1cCBtYW5hZ2VtZW50IHBhY2tldHMKLSAqCi0JdTE2IGF1dGhfYWxnb3JpdGhtOwotCXUxNiBhdXRoX3NlcXVlbmNlOwotCXUxNiBiZWFjb25faW50ZXJ2YWw7Ci0JdTE2IGNhcGFiaWxpdHk7Ci0JdTggY3VycmVudF9hcFtFVEhfQUxFTl07Ci0JdTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQlzdHJ1Y3QgewotCQl1MTYgYXNzb2NpYXRpb25faWQ6MTQsIHJlc2VydmVkOjI7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0JdTMyIHRpbWVfc3RhbXBbMl07Ci0JdTE2IHJlYXNvbjsKLQl1MTYgc3RhdHVzOwotKi8KLQotc3RydWN0IGllZWU4MDIxMV9hdXRoIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGFsZ29yaXRobTsKLQlfX2xlMTYgdHJhbnNhY3Rpb247Ci0JX19sZTE2IHN0YXR1czsKLQkvKiBjaGFsbGVuZ2UgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IG1vZGU7Ci0JdTggY2hhbm5lbDsKLQl1OCBjb3VudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCXU4IGNhdGVnb3J5OwotCXU4IGFjdGlvbjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfYWN0aW9uX2V4Y2hhbmdlIHsKLQkJCXU4IHRva2VuOwotCQkJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotCQl9IGV4Y2hhbmdlOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoIGNoYW5uZWxfc3dpdGNoOwotCi0JfSBmb3JtYXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogQWxpYXMgZGVhdXRoIGZvciBkaXNhc3NvYyAqLwotI2RlZmluZSBpZWVlODAyMTFfZGVhdXRoIGllZWU4MDIxMV9kaXNhc3NvYwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUzMiB0aW1lX3N0YW1wWzJdOwotCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKLQkgKiBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBBbGlhcyBiZWFjb24gZm9yIHByb2JlX3Jlc3BvbnNlICovCi0jZGVmaW5lIGllZWU4MDIxMV9iZWFjb24gaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlCi0KLXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBSU04gKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JX19sZTE2IHN0YXR1czsKLQlfX2xlMTYgYWlkOwotCS8qIHN1cHBvcnRlZCByYXRlcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3R4YiB7Ci0JdTggbnJfZnJhZ3M7Ci0JdTggZW5jcnlwdGVkOwotCXU4IHJ0c19pbmNsdWRlZDsKLQl1OCByZXNlcnZlZDsKLQl1MTYgZnJhZ19zaXplOwotCXUxNiBwYXlsb2FkX3NpemU7Ci0Jc3RydWN0IHNrX2J1ZmYgKmZyYWdtZW50c1swXTsKLX07Ci0KLS8qIFNXRUVQIFRBQkxFIEVOVFJJRVMgTlVNQkVSICovCi0jZGVmaW5lIE1BWF9TV0VFUF9UQUJfRU5UUklFUwkJICA0MgotI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVNfUEVSX1BBQ0tFVCAgNwotLyogTUFYX1JBVEVTX0xFTkdUSCBuZWVkcyB0byBiZSAxMi4gIFRoZSBzcGVjIHNheXMgOCwgYW5kIG1hbnkgQVBzCi0gKiBvbmx5IHVzZSA4LCBhbmQgdGhlbiB1c2UgZXh0ZW5kZWQgcmF0ZXMgZm9yIHRoZSByZW1haW5pbmcgc3VwcG9ydGVkCi0gKiByYXRlcy4gIE90aGVyIEFQcywgaG93ZXZlciwgc3RpY2sgYWxsIG9mIHRoZWlyIHN1cHBvcnRlZCByYXRlcyBvbiB0aGUKLSAqIG1haW4gcmF0ZXMgaW5mb3JtYXRpb24gZWxlbWVudC4uLiAqLwotI2RlZmluZSBNQVhfUkFURVNfTEVOR1RIICAgICAgICAgICAgICAgICAgKCh1OCkxMikKLSNkZWZpbmUgTUFYX1JBVEVTX0VYX0xFTkdUSCAgICAgICAgICAgICAgICgodTgpMTYpCi0jZGVmaW5lIE1BWF9ORVRXT1JLX0NPVU5UICAgICAgICAgICAgICAgICAgMTI4Ci0KLSNkZWZpbmUgQ1JDX0xFTkdUSCAgICAgICAgICAgICAgICAgNFUKLQotI2RlZmluZSBNQVhfV1BBX0lFX0xFTiA2NAotCi0jZGVmaW5lIE5FVFdPUktfSEFTX09GRE0gICAgICAgKDE8PDEpCi0jZGVmaW5lIE5FVFdPUktfSEFTX0NDSyAgICAgICAgKDE8PDIpCi0KLS8qIFFvUyBzdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgICAgICAoMTw8MykKLSNkZWZpbmUgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OICAgICAoMTw8NCkKLSNkZWZpbmUgTkVUV09SS19IQVNfUU9TX01BU0sgICAgICAgICAgICAoTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgfCBcCi0JCQkJCSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04pCi0KLS8qIDgwMi4xMWggKi8KLSNkZWZpbmUgTkVUV09SS19IQVNfUE9XRVJfQ09OU1RSQUlOVCAgICAoMTw8NSkKLSNkZWZpbmUgTkVUV09SS19IQVNfQ1NBICAgICAgICAgICAgICAgICAoMTw8NikKLSNkZWZpbmUgTkVUV09SS19IQVNfUVVJRVQgICAgICAgICAgICAgICAoMTw8NykKLSNkZWZpbmUgTkVUV09SS19IQVNfSUJTU19ERlMgICAgICAgICAgICAoMTw8OCkKLSNkZWZpbmUgTkVUV09SS19IQVNfVFBDX1JFUE9SVCAgICAgICAgICAoMTw8OSkKLQotI2RlZmluZSBORVRXT1JLX0hBU19FUlBfVkFMVUUgICAgICAgICAgICgxPDwxMCkKLQotI2RlZmluZSBRT1NfUVVFVUVfTlVNICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUU9TX09VSV9MRU4gICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFFPU19PVUlfVFlQRSAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBRT1NfRUxFTUVOVF9JRCAgICAgICAgICAgICAgICAgIDIyMQotI2RlZmluZSBRT1NfT1VJX0lORk9fU1VCX1RZUEUgICAgICAgICAgIDAKLSNkZWZpbmUgUU9TX09VSV9QQVJBTV9TVUJfVFlQRSAgICAgICAgICAxCi0jZGVmaW5lIFFPU19WRVJTSU9OXzEgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBRT1NfQUlGU05fTUlOX1ZBTFVFICAgICAgICAgICAgIDIKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCB7Ci0JdTggZWxlbWVudElEOwotCXU4IGxlbmd0aDsKLQl1OCBxdWlbUU9TX09VSV9MRU5dOwotCXU4IHF1aV90eXBlOwotCXU4IHF1aV9zdWJ0eXBlOwotCXU4IHZlcnNpb247Ci0JdTggYWNfaW5mbzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgewotCXU4IGFjaV9haWZzbjsKLQl1OCBlY3dfbWluX21heDsKLQlfX2xlMTYgdHhfb3BfbGltaXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVyX2luZm8gewotCXN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgaW5mb19lbGVtZW50OwotCXU4IHJlc2VydmVkOwotCXN0cnVjdCBpZWVlODAyMTFfcW9zX2FjX3BhcmFtZXRlciBhY19wYXJhbXNfcmVjb3JkW1FPU19RVUVVRV9OVU1dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgewotCV9fbGUxNiBjd19taW5bUU9TX1FVRVVFX05VTV07Ci0JX19sZTE2IGN3X21heFtRT1NfUVVFVUVfTlVNXTsKLQl1OCBhaWZzW1FPU19RVUVVRV9OVU1dOwotCXU4IGZsYWdbUU9TX1FVRVVFX05VTV07Ci0JX19sZTE2IHR4X29wX2xpbWl0W1FPU19RVUVVRV9OVU1dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgewotCXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQlpbnQgYWN0aXZlOwotCWludCBzdXBwb3J0ZWQ7Ci0JdTggcGFyYW1fY291bnQ7Ci0JdTggb2xkX3BhcmFtX2NvdW50OwotfTsKLQotc3RydWN0IGllZWU4MDIxMV90aW1fcGFyYW1ldGVycyB7Ci0JdTggdGltX2NvdW50OwotCXU4IHRpbV9wZXJpb2Q7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWVudW0gewkJCQkvKiBpZWVlODAyMTFfYmFzaWNfcmVwb3J0Lm1hcCAqLwotCUlFRUU4MDIxMV9CQVNJQ19NQVBfQlNTID0gKDEgPDwgMCksCi0JSUVFRTgwMjExX0JBU0lDX01BUF9PRkRNID0gKDEgPDwgMSksCi0JSUVFRTgwMjExX0JBU0lDX01BUF9VTklERU5USUZJRUQgPSAoMSA8PCAyKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1JBREFSID0gKDEgPDwgMyksCi0JSUVFRTgwMjExX0JBU0lDX01BUF9VTk1FQVNVUkVEID0gKDEgPDwgNCksCi0JLyogQml0cyA1LTcgYXJlIHJlc2VydmVkICovCi0KLX07Ci1zdHJ1Y3QgaWVlZTgwMjExX2Jhc2ljX3JlcG9ydCB7Ci0JdTggY2hhbm5lbDsKLQlfX2xlNjQgc3RhcnRfdGltZTsKLQlfX2xlMTYgZHVyYXRpb247Ci0JdTggbWFwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gewkJCQkvKiBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdC5tb2RlICovCi0JLyogQml0IDAgaXMgcmVzZXJ2ZWQgKi8KLQlJRUVFODAyMTFfTUVBU1VSRU1FTlRfRU5BQkxFID0gKDEgPDwgMSksCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUVVFU1QgPSAoMSA8PCAyKSwKLQlJRUVFODAyMTFfTUVBU1VSRU1FTlRfUkVQT1JUID0gKDEgPDwgMyksCi0JLyogQml0cyA0LTcgYXJlIHJlc2VydmVkICovCi19OwotCi1lbnVtIHsKLQlJRUVFODAyMTFfUkVQT1JUX0JBU0lDID0gMCwJLyogcmVxdWlyZWQgKi8KLQlJRUVFODAyMTFfUkVQT1JUX0NDQSA9IDEsCS8qIG9wdGlvbmFsICovCi0JSUVFRTgwMjExX1JFUE9SVF9SUEkgPSAyLAkvKiBvcHRpb25hbCAqLwotCS8qIDMtMjU1IHJlc2VydmVkICovCi19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyB7Ci0JdTggY2hhbm5lbDsKLQlfX2xlNjQgc3RhcnRfdGltZTsKLQlfX2xlMTYgZHVyYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKLQl1OCB0b2tlbjsKLQl1OCBtb2RlOwotCXU4IHR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVwb3J0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKLQl1OCB0b2tlbjsKLQl1OCBtb2RlOwotCXU4IHR5cGU7Ci0JdW5pb24gewotCQlzdHJ1Y3QgaWVlZTgwMjExX2Jhc2ljX3JlcG9ydCBiYXNpY1swXTsKLQl9IHU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV90cGNfcmVwb3J0IHsKLQl1OCB0cmFuc21pdF9wb3dlcjsKLQl1OCBsaW5rX21hcmdpbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfbWFwIHsKLQl1OCBjaGFubmVsOwotCXU4IG1hcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2lic3NfZGZzIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKLQl1OCBvd25lcltFVEhfQUxFTl07Ci0JdTggcmVjb3ZlcnlfaW50ZXJ2YWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX21hcCBjaGFubmVsX21hcFswXTsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfY3NhIHsKLQl1OCBtb2RlOwotCXU4IGNoYW5uZWw7Ci0JdTggY291bnQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xdWlldCB7Ci0JdTggY291bnQ7Ci0JdTggcGVyaW9kOwotCXU4IGR1cmF0aW9uOwotCXU4IG9mZnNldDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgewotCS8qIFRoZXNlIGVudHJpZXMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgYSB1bmlxdWUgbmV0d29yayAqLwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1OCBjaGFubmVsOwotCS8qIEVuc3VyZSBudWxsLXRlcm1pbmF0ZWQgZm9yIGFueSBkZWJ1ZyBtc2dzICovCi0JdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOwotCXU4IHNzaWRfbGVuOwotCi0Jc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSBxb3NfZGF0YTsKLQotCS8qIFRoZXNlIGFyZSBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHN0YXRzOwotCXUxNiBjYXBhYmlsaXR5OwotCXU4IHJhdGVzW01BWF9SQVRFU19MRU5HVEhdOwotCXU4IHJhdGVzX2xlbjsKLQl1OCByYXRlc19leFtNQVhfUkFURVNfRVhfTEVOR1RIXTsKLQl1OCByYXRlc19leF9sZW47Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQ7Ci0JdTggbW9kZTsKLQl1MzIgZmxhZ3M7Ci0JdTMyIGxhc3RfYXNzb2NpYXRlOwotCXUzMiB0aW1lX3N0YW1wWzJdOwotCXUxNiBiZWFjb25faW50ZXJ2YWw7Ci0JdTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQl1MTYgYXRpbV93aW5kb3c7Ci0JdTggZXJwX3ZhbHVlOwotCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKLQlzaXplX3QgcnNuX2llX2xlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9wYXJhbWV0ZXJzIHRpbTsKLQotCS8qIDgwMi4xMWggaW5mbyAqLwotCi0JLyogUG93ZXIgQ29uc3RyYWludCAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLwotCXU4IHBvd2VyX2NvbnN0cmFpbnQ7Ci0KLQkvKiBUUEMgUmVwb3J0IC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCi0Jc3RydWN0IGllZWU4MDIxMV90cGNfcmVwb3J0IHRwY19yZXBvcnQ7Ci0KLQkvKiBJQlNTIERGUyAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCBhbmQgSUJTUwotCSAqIE5PVEU6IFRoaXMgaXMgdmFyaWFibGUgbGVuZ3RoIGFuZCBzbyBtdXN0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLwotCXN0cnVjdCBpZWVlODAyMTFfaWJzc19kZnMgKmlic3NfZGZzOwotCi0JLyogQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IC0gb3B0aW9uYWwgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2NzYSBjc2E7Ci0KLQkvKiBRdWlldCAtIG9wdGlvbmFsIGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCi0Jc3RydWN0IGllZWU4MDIxMV9xdWlldCBxdWlldDsKLQotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLWVudW0gaWVlZTgwMjExX3N0YXRlIHsKLQlJRUVFODAyMTFfVU5JTklUSUFMSVpFRCA9IDAsCi0JSUVFRTgwMjExX0lOSVRJQUxJWkVELAotCUlFRUU4MDIxMV9BU1NPQ0lBVElORywKLQlJRUVFODAyMTFfQVNTT0NJQVRFRCwKLQlJRUVFODAyMTFfQVVUSEVOVElDQVRJTkcsCi0JSUVFRTgwMjExX0FVVEhFTlRJQ0FURUQsCi0JSUVFRTgwMjExX1NIVVRET1dOCi19OwotCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NDQU5fQUdFICgxNSAqIEhaKQotI2RlZmluZSBERUZBVUxUX0ZUUyAyMzQ2Ci0KLSNkZWZpbmUgQ0ZHX0lFRUU4MDIxMV9SRVNFUlZFX0ZDUyAoMTw8MCkKLSNkZWZpbmUgQ0ZHX0lFRUU4MDIxMV9DT01QVVRFX0ZDUyAoMTw8MSkKLSNkZWZpbmUgQ0ZHX0lFRUU4MDIxMV9SVFMgKDE8PDIpCi0KLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMIDEKLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMIDE0Ci0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9DSEFOTkVMUyAoSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMIC0gXAotCQkJCSAgSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMICsgMSkKLQotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfTUlOX0NIQU5ORUwgMzQKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMIDE2NQotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAtIFwKLQkJCQkgIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCArIDEpCi0KLWVudW0gewotCUlFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPSAoMSA8PCAwKSwKLQlJRUVFODAyMTFfQ0hfODAyMTFIX1JVTEVTID0gKDEgPDwgMSksCi0JSUVFRTgwMjExX0NIX0JfT05MWSA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9DSF9OT19JQlNTID0gKDEgPDwgMyksCi0JSUVFRTgwMjExX0NIX1VOSUZPUk1fU1BSRUFESU5HID0gKDEgPDwgNCksCi0JSUVFRTgwMjExX0NIX1JBREFSX0RFVEVDVCA9ICgxIDw8IDUpLAotCUlFRUU4MDIxMV9DSF9JTlZBTElEID0gKDEgPDwgNiksCi19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgewotCXUzMiBmcmVxOwkvKiBpbiBNSHogKi8KLQl1OCBjaGFubmVsOwotCXU4IGZsYWdzOwotCXU4IG1heF9wb3dlcjsJLyogaW4gZEJtICovCi19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2dlbyB7Ci0JdTggbmFtZVs0XTsKLQl1OCBiZ19jaGFubmVsczsKLQl1OCBhX2NoYW5uZWxzOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBiZ1tJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFNdOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhW0lFRUU4MDIxMV81MkdIWl9DSEFOTkVMU107Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2RldmljZSB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYzsKLQotCS8qIEJvb2trZWVwaW5nIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIGllZWVfc3RhdHM7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2dlbyBnZW87Ci0KLQkvKiBQcm9iZSAvIEJlYWNvbiBtYW5hZ2VtZW50ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2ZyZWVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmtzOwotCWludCBzY2FuczsKLQlpbnQgc2Nhbl9hZ2U7Ci0KLQlpbnQgaXdfbW9kZTsJCS8qIG9wZXJhdGluZyBtb2RlIChJV19NT0RFXyopICovCi0Jc3RydWN0IGl3X3NweV9kYXRhIHNweV9kYXRhOwkvKiBpd3NweSBzdXBwb3J0ICovCi0KLQlzcGlubG9ja190IGxvY2s7Ci0KLQlpbnQgdHhfaGVhZHJvb207CS8qIFNldCB0byBzaXplIG9mIGFueSBhZGRpdGlvbmFsIHJvb20gbmVlZGVkIGF0IGZyb250Ci0JCQkJICogb2YgYWxsb2NhdGVkIFR4IFNLQnMgKi8KLQl1MzIgY29uZmlnOwotCi0JLyogV0VQIGFuZCBvdGhlciBlbmNyeXB0aW9uIHJlbGF0ZWQgc2V0dGluZ3MgYXQgdGhlIGRldmljZSBsZXZlbCAqLwotCWludCBvcGVuX3dlcDsJCS8qIFNldCB0byAxIHRvIGFsbG93IHVuZW5jcnlwdGVkIGZyYW1lcyAqLwotCi0JaW50IHJlc2V0X29uX2tleWNoYW5nZTsJLyogU2V0IHRvIDEgaWYgdGhlIEhXIG5lZWRzIHRvIGJlIHJlc2V0IG9uCi0JCQkJICogV0VQIGtleSBjaGFuZ2VzICovCi0KLQkvKiBJZiB0aGUgaG9zdCBwZXJmb3JtcyB7ZW4sZGV9Y3J5cHRpb24sIHRoZW4gc2V0IHRvIDEgKi8KLQlpbnQgaG9zdF9lbmNyeXB0OwotCWludCBob3N0X2VuY3J5cHRfbXNkdTsKLQlpbnQgaG9zdF9kZWNyeXB0OwotCS8qIGhvc3QgcGVyZm9ybXMgbXVsdGljYXN0IGRlY3J5cHRpb24gKi8KLQlpbnQgaG9zdF9tY19kZWNyeXB0OwotCi0JLyogaG9zdCBzaG91bGQgc3RyaXAgSVYgYW5kIElDViBmcm9tIHByb3RlY3RlZCBmcmFtZXMgKi8KLQkvKiBtZWFuaW5nZnVsIG9ubHkgd2hlbiBoYXJkd2FyZSBkZWNyeXB0aW9uIGlzIGJlaW5nIHVzZWQgKi8KLQlpbnQgaG9zdF9zdHJpcF9pdl9pY3Y7Ci0KLQlpbnQgaG9zdF9vcGVuX2ZyYWc7Ci0JaW50IGhvc3RfYnVpbGRfaXY7Ci0JaW50IGllZWU4MDJfMXg7CQkvKiBpcyBJRUVFIDgwMi4xWCB1c2VkICovCi0KLQkvKiBXUEEgZGF0YSAqLwotCWludCB3cGFfZW5hYmxlZDsKLQlpbnQgZHJvcF91bmVuY3J5cHRlZDsKLQlpbnQgcHJpdmFjeV9pbnZva2VkOwotCXNpemVfdCB3cGFfaWVfbGVuOwotCXU4ICp3cGFfaWU7Ci0KLQlzdHJ1Y3QgbGliODAyMTFfY3J5cHRfaW5mbyBjcnlwdF9pbmZvOwotCi0JaW50IGJjcnhfc3RhX2tleTsJLyogdXNlIGluZGl2aWR1YWwga2V5cyB0byBvdmVycmlkZSBkZWZhdWx0IGtleXMgZXZlbgotCQkJCSAqIHdpdGggUlggb2YgYnJvYWQvbXVsdGljYXN0IGZyYW1lcyAqLwotCi0JLyogRnJhZ21lbnRhdGlvbiBzdHJ1Y3R1cmVzICovCi0Jc3RydWN0IGllZWU4MDIxMV9mcmFnX2VudHJ5IGZyYWdfY2FjaGVbSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOXTsKLQl1bnNpZ25lZCBpbnQgZnJhZ19uZXh0X2lkeDsKLQl1MTYgZnRzOwkJLyogRnJhZ21lbnRhdGlvbiBUaHJlc2hvbGQgKi8KLQl1MTYgcnRzOwkJLyogUlRTIHRocmVzaG9sZCAqLwotCi0JLyogQXNzb2NpYXRpb24gaW5mbyAqLwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQotCWVudW0gaWVlZTgwMjExX3N0YXRlIHN0YXRlOwotCi0JaW50IG1vZGU7CQkvKiBBLCBCLCBHICovCi0JaW50IG1vZHVsYXRpb247CQkvKiBDQ0ssIE9GRE0gKi8KLQlpbnQgZnJlcV9iYW5kOwkJLyogMi40R2h6LCA1LjJHaHosIE1peGVkICovCi0JaW50IGFiZ190cnVlOwkJLyogQUJHIGZsYWcgICAgICAgICAgICAgICovCi0KLQlpbnQgcGVyZmVjdF9yc3NpOwotCWludCB3b3JzdF9yc3NpOwotCi0JdTE2IHByZXZfc2VxX2N0bDsJLyogdXNlZCB0byBkcm9wIGR1cGxpY2F0ZSBmcmFtZXMgKi8KLQotCS8qIENhbGxiYWNrIGZ1bmN0aW9ucyAqLwotCXZvaWQgKCpzZXRfc2VjdXJpdHkpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgKiBzZWMpOwotCWludCAoKmhhcmRfc3RhcnRfeG1pdCkgKHN0cnVjdCBpZWVlODAyMTFfdHhiICogdHhiLAotCQkJCXN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcHJpKTsKLQlpbnQgKCpyZXNldF9wb3J0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOwotCWludCAoKmlzX3F1ZXVlX2Z1bGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IHByaSk7Ci0KLQlpbnQgKCpoYW5kbGVfbWFuYWdlbWVudCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yaywgdTE2IHR5cGUpOwotCWludCAoKmlzX3Fvc19hY3RpdmUpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotCS8qIFR5cGljYWwgU1RBIG1ldGhvZHMgKi8KLQlpbnQgKCpoYW5kbGVfYXV0aCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqIGF1dGgpOwotCWludCAoKmhhbmRsZV9kZWF1dGgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGVhdXRoICogYXV0aCk7Ci0JaW50ICgqaGFuZGxlX2FjdGlvbikgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9hY3Rpb24gKiBhY3Rpb24sCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICogc3RhdHMpOwotCWludCAoKmhhbmRsZV9kaXNhc3NvYykgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKiBhc3NvYyk7Ci0JaW50ICgqaGFuZGxlX2JlYWNvbikgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9iZWFjb24gKiBiZWFjb24sCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrKTsKLQlpbnQgKCpoYW5kbGVfcHJvYmVfcmVzcG9uc2UpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlICogcmVzcCwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrKTsKLQlpbnQgKCpoYW5kbGVfcHJvYmVfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0ICogcmVxLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqIHN0YXRzKTsKLQlpbnQgKCpoYW5kbGVfYXNzb2NfcmVzcG9uc2UpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICogcmVzcCwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrKTsKLQotCS8qIFR5cGljYWwgQVAgbWV0aG9kcyAqLwotCWludCAoKmhhbmRsZV9hc3NvY19yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOwotCWludCAoKmhhbmRsZV9yZWFzc29jX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKiByZXEpOwotCi0JLyogVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGl0ZW0gc28gdGhhdCBpdCBwb2ludHMgdG8gdGhlIGRhdGEKLQkgKiBhbGxvY2F0ZWQgYmV5b25kIHRoaXMgc3RydWN0dXJlIGJ5IGFsbG9jX2llZWU4MDIxMSAqLwotCXU4IHByaXZbMF07Ci19OwotCi0jZGVmaW5lIElFRUVfQSAgICAgICAgICAgICgxPDwwKQotI2RlZmluZSBJRUVFX0IgICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgSUVFRV9HICAgICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIElFRUVfTU9ERV9NQVNLICAgIChJRUVFX0F8SUVFRV9CfElFRUVfRykKLQotc3RhdGljIGlubGluZSB2b2lkICppZWVlODAyMTFfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICopbmV0ZGV2X3ByaXYoZGV2KSktPnByaXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc192YWxpZF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCQkgIGludCBtb2RlKQotewotCS8qCi0JICogSXQgaXMgcG9zc2libGUgZm9yIGJvdGggYWNjZXNzIHBvaW50cyBhbmQgb3VyIGRldmljZSB0byBzdXBwb3J0Ci0JICogY29tYmluYXRpb25zIG9mIG1vZGVzLCBzbyBhcyBsb25nIGFzIHRoZXJlIGlzIG9uZSB2YWxpZCBjb21iaW5hdGlvbgotCSAqIG9mIGFwL2RldmljZSBzdXBwb3J0ZWQgbW9kZXMsIHRoZW4gcmV0dXJuIHN1Y2Nlc3MKLQkgKgotCSAqLwotCWlmICgobW9kZSAmIElFRUVfQSkgJiYKLQkgICAgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSAmJgotCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpKQotCQlyZXR1cm4gMTsKLQotCWlmICgobW9kZSAmIElFRUVfRykgJiYKLQkgICAgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSAmJgotCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpKQotCQlyZXR1cm4gMTsKLQotCWlmICgobW9kZSAmIElFRUVfQikgJiYKLQkgICAgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9nZXRfaGRybGVuKHUxNiBmYykKLXsKLQlpbnQgaGRybGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKLQl1MTYgc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7Ci0KLQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1RZUEUoZmMpKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykpCi0JCQloZHJsZW4gPSBJRUVFODAyMTFfNEFERFJfTEVOOwotCQlpZiAoc3R5cGUgJiBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpCi0JCQloZHJsZW4gKz0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1NUWVBFKGZjKSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DVFM6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDSzoKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV8xQUREUl9MRU47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV8yQUREUl9MRU47Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGRybGVuOwotfQotCi1zdGF0aWMgaW5saW5lIHU4ICppZWVlODAyMTFfZ2V0X3BheWxvYWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlzd2l0Y2ggKGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7Ci0JY2FzZSBJRUVFODAyMTFfMUFERFJfTEVOOgotCQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8xYWRkciAqKWhkciktPnBheWxvYWQ7Ci0JY2FzZSBJRUVFODAyMTFfMkFERFJfTEVOOgotCQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqKWhkciktPnBheWxvYWQ7Ci0JY2FzZSBJRUVFODAyMTFfM0FERFJfTEVOOgotCQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWhkciktPnBheWxvYWQ7Ci0JY2FzZSBJRUVFODAyMTFfNEFERFJfTEVOOgotCQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKWhkciktPnBheWxvYWQ7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfb2ZkbV9yYXRlKHU4IHJhdGUpCi17Ci0Jc3dpdGNoIChyYXRlICYgfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spIHsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV85TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI6Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2Nja19yYXRlKHU4IHJhdGUpCi17Ci0Jc3dpdGNoIChyYXRlICYgfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spIHsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xTUI6Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COgotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzVNQjoKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COgotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGllZWU4MDIxMS5jICovCi1leHRlcm4gdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdik7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLQotLyogaWVlZTgwMjExX3R4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7Ci0KLS8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfYW55KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOwotLyogbWFrZSBzdXJlIHRvIHNldCBzdGF0cy0+bGVuICovCi1leHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya19yZXNldChzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspOwotCi0vKiBpZWVlODAyMTFfZ2VvLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqaWVlZTgwMjExX2dldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UKLQkJCQkJCSAgICAgKmllZWUpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgICAgdTggY2hhbm5lbCk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIHU4IGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHUzMiBmcmVxKTsKLWV4dGVybiB1OCBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgICAgdTggY2hhbm5lbCk7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICppZWVlODAyMTFfZ2V0X2NoYW5uZWwoc3RydWN0Ci0JCQkJCQkJICAgICBpZWVlODAyMTFfZGV2aWNlCi0JCQkJCQkJICAgICAqaWVlZSwgdTggY2hhbm5lbCk7Ci1leHRlcm4gdTMyIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotCi0vKiBpZWVlODAyMTFfd3guYyAqLwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfaW5jcmVtZW50X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCWllZWUtPnNjYW5zKys7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9nZXRfc2NhbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCi17Ci0JcmV0dXJuIGllZWUtPnNjYW5zOwotfQotCi0jZW5kaWYJCQkJLyogSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKaW5kZXggMzg0Njk4Yy4uMjNjM2YzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKQEAgLTIzMCw4ICsyMzAsMTAgQEAKIAkJCQkJCSAqIDgwMi4xMSBoZWFkZXIgYW5kIHBheWxvYWQKIAkJCQkJCSAqICh0byAzMi1iaXQgYm91bmRhcnkpCiAJCQkJCQkgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0ZfQkFERkNTCTB4NDAJLyogYmFkIEZDUyAqLworCiAvKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICovCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9GX1JYX0JBREZDUwkweDAwMDEJLyogZnJhbWUgZmFpbGVkIGNyYyBjaGVjayAqLworI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURQTENQCTB4MDAwMgkvKiBmcmFtZSBoYXMgYmFkIFBMQ1AgKi8KIAogLyogRm9yIElFRUU4MDIxMV9SQURJT1RBUF9UWF9GTEFHUyAqLwogI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9GQUlMCTB4MDAwMQkvKiBmYWlsZWQgZHVlIHRvIGV4Y2Vzc2l2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaCBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKaW5kZXggYzhlZmZhNC4uMzhiNzgxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAorKysgYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCkBAIC0zOSw4ICszOSw2IEBACiAJCiAJX191MzIJCQl2YWxpZF9sZnQ7CiAJX191MzIJCQlwcmVmZXJlZF9sZnQ7Ci0JdW5zaWduZWQgbG9uZwkJY3N0YW1wOwkvKiBjcmVhdGVkIHRpbWVzdGFtcCAqLwotCXVuc2lnbmVkIGxvbmcJCXRzdGFtcDsgLyogdXBkYXRlZCB0aW1lc3RhbXAgKi8KIAlhdG9taWNfdAkJcmVmY250OwogCXNwaW5sb2NrX3QJCWxvY2s7CiAKQEAgLTQ5LDYgKzQ3LDkgQEAKIAogCV9fdTE2CQkJc2NvcGU7CiAKKwl1bnNpZ25lZCBsb25nCQljc3RhbXA7CS8qIGNyZWF0ZWQgdGltZXN0YW1wICovCisJdW5zaWduZWQgbG9uZwkJdHN0YW1wOyAvKiB1cGRhdGVkIHRpbWVzdGFtcCAqLworCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CiAKIAlzdHJ1Y3QgaW5ldDZfZGV2CSppZGV2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9lY24uaCBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKaW5kZXggNzA0MGE3OC4uOWI1ZDA4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCkBAIC0xMTMsMTIgKzExMywxMiBAQAogc3RhdGljIGlubGluZSBpbnQgSU5FVF9FQ05fc2V0X2NlKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJaWYgKHNrYi0+bmV0d29ya19oZWFkZXIgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSA8PSBza2ItPnRhaWwpCiAJCQlyZXR1cm4gSVBfRUNOX3NldF9jZShpcF9oZHIoc2tiKSk7CiAJCWJyZWFrOwogCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCWlmIChza2ItPm5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSA8PSBza2ItPnRhaWwpCiAJCQlyZXR1cm4gSVA2X0VDTl9zZXRfY2UoaXB2Nl9oZHIoc2tiKSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmggYi9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaAppbmRleCBlMDgxZWVmLi4zOWYyZGM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaApAQCAtNjEsNyArNjEsOCBAQAogCQkJCXN0cnVjdCBpbmV0X2ZyYWdzICpmLCBpbnQgKndvcmspOwogaW50IGluZXRfZnJhZ19ldmljdG9yKHN0cnVjdCBuZXRuc19mcmFncyAqbmYsIHN0cnVjdCBpbmV0X2ZyYWdzICpmKTsKIHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKmluZXRfZnJhZ19maW5kKHN0cnVjdCBuZXRuc19mcmFncyAqbmYsCi0JCXN0cnVjdCBpbmV0X2ZyYWdzICpmLCB2b2lkICprZXksIHVuc2lnbmVkIGludCBoYXNoKTsKKwkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIHZvaWQgKmtleSwgdW5zaWduZWQgaW50IGhhc2gpCisJX19yZWxlYXNlcygmZi0+bG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2ZyYWdfcHV0KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsIHN0cnVjdCBpbmV0X2ZyYWdzICpmKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAppbmRleCBkMGEwNDMxLi5hNDRlMjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaApAQCAtODIsNiArODIsNyBAQAogI2VuZGlmCiAJdW5zaWduZWQgc2hvcnQJCXBvcnQ7CiAJc2lnbmVkIHNob3J0CQlmYXN0cmV1c2U7CisJaW50CQkJbnVtX293bmVyczsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkCW93bmVyczsKIH07CkBAIC0xMzMsNyArMTM0LDcgQEAKIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQJKmJoYXNoOwogCiAJdW5zaWduZWQgaW50CQkJYmhhc2hfc2l6ZTsKLQkvKiBOb3RlIDogNCBieXRlcyBwYWRkaW5nIG9uIDY0IGJpdCBhcmNoZXMgKi8KKwkvKiA0IGJ5dGVzIGhvbGUgb24gNjQgYml0ICovCiAKIAlzdHJ1Y3Qga21lbV9jYWNoZQkJKmJpbmRfYnVja2V0X2NhY2hlcDsKIApAQCAtMTUwLDYgKzE1MSw3IEBACiAJc3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQJbGlzdGVuaW5nX2hhc2hbSU5FVF9MSFRBQkxFX1NJWkVdCiAJCQkJCV9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKKwlhdG9taWNfdAkJCWJzb2NrZXRzOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmluZXRfZWhhc2hfYnVja2V0KApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggMTA4NjgxMy4uNGFjNzU3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC01NSw2ICs1NSw3IEBACiAJX19iZTMyCQkJYWRkcjsKIAlpbnQJCQlvaWY7CiAJc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKKwl1bmlvbiBza2Jfc2hhcmVkX3R4CXNodHg7CiB9OwogCiAjZGVmaW5lIElQQ0Ioc2tiKSAoKHN0cnVjdCBpbmV0X3NrYl9wYXJtKikoKHNrYiktPmNiKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IGFiOWIwMDMuLmJiYWUxZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMTg0LDggKzE4NCw4IEBACiAvKgogICogICAgICBUaGUgcG9ydCBudW1iZXIgb2YgRlRQIHNlcnZpY2UgKGluIG5ldHdvcmsgb3JkZXIpLgogICovCi0jZGVmaW5lIEZUUFBPUlQgIF9fY29uc3RhbnRfaHRvbnMoMjEpCi0jZGVmaW5lIEZUUERBVEEgIF9fY29uc3RhbnRfaHRvbnMoMjApCisjZGVmaW5lIEZUUFBPUlQgIGNwdV90b19iZTE2KDIxKQorI2RlZmluZSBGVFBEQVRBICBjcHVfdG9fYmUxNigyMCkKIAogLyoKICAqICAgICAgVENQIFN0YXRlIFZhbHVlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDZkNWI1OGEuLmMxZjE2ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTE5Niw4ICsxOTYsOCBAQAogCXN0cnVjdCBuZXQJCSpmbF9uZXQ7CiB9OwogCi0jZGVmaW5lIElQVjZfRkxPV0lORk9fTUFTSwlfX2NvbnN0YW50X2h0b25sKDB4MEZGRkZGRkYpCi0jZGVmaW5lIElQVjZfRkxPV0xBQkVMX01BU0sJX19jb25zdGFudF9odG9ubCgweDAwMEZGRkZGKQorI2RlZmluZSBJUFY2X0ZMT1dJTkZPX01BU0sJY3B1X3RvX2JlMzIoMHgwRkZGRkZGRikKKyNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUFTSwljcHVfdG9fYmUzMigweDAwMEZGRkZGKQogCiBzdHJ1Y3QgaXB2Nl9mbF9zb2NrbGlzdAogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB4LmggYi9pbmNsdWRlL25ldC9pcHguaAppbmRleCA0Y2MwYjRlLi5hMTQxMjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHguaAorKysgYi9pbmNsdWRlL25ldC9pcHguaApAQCAtMjcsNyArMjcsNyBAQAogCiBzdHJ1Y3QgaXB4aGRyIHsKIAlfX2JlMTYJCQlpcHhfY2hlY2tzdW0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotI2RlZmluZSBJUFhfTk9fQ0hFQ0tTVU0JX19jb25zdGFudF9odG9ucygweEZGRkYpCisjZGVmaW5lIElQWF9OT19DSEVDS1NVTQljcHVfdG9fYmUxNigweEZGRkYpCiAJX19iZTE2CQkJaXB4X3BrdHNpemUgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCV9fdTgJCQlpcHhfdGN0cmw7CiAJX191OAkJCWlweF90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggNTU5NDIyZi4uM2I4M2E4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC05MywxMiArOTMsOSBAQAogICogZW51bSBpZWVlODAyMTFfbWF4X3F1ZXVlcyAtIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlcwogICoKICAqIEBJRUVFODAyMTFfTUFYX1FVRVVFUzogTWF4aW11bSBudW1iZXIgb2YgcmVndWxhciBkZXZpY2UgcXVldWVzLgotICogQElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTOiBNYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMgdXNhYmxlCi0gKglmb3IgQS1NUERVIG9wZXJhdGlvbi4KICAqLwogZW51bSBpZWVlODAyMTFfbWF4X3F1ZXVlcyB7Ci0JSUVFRTgwMjExX01BWF9RVUVVRVMgPQkJMTYsCi0JSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgPQkxNiwKKwlJRUVFODAyMTFfTUFYX1FVRVVFUyA9CQk0LAogfTsKIAogLyoqCkBAIC0yMDcsNyArMjA0LDcgQEAKIAl1MTYgYmVhY29uX2ludDsKIAl1MTYgYXNzb2NfY2FwYWJpbGl0eTsKIAl1NjQgdGltZXN0YW1wOwotCXU2NCBiYXNpY19yYXRlczsKKwl1MzIgYmFzaWNfcmF0ZXM7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfaHRfY29uZiBodDsKIH07CiAKQEAgLTI0NSw2ICsyNDIsMTIgQEAKICAqIEBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTogaW50ZXJuYWwgdG8gbWFjODAyMTEsIGNhbiBiZQogICoJc2V0IGJ5IHJhdGUgY29udHJvbCBhbGdvcml0aG1zIHRvIGluZGljYXRlIHByb2JlIHJhdGUsIHdpbGwKICAqCWJlIGNsZWFyZWQgZm9yIGZyYWdtZW50ZWQgZnJhbWVzIChleGNlcHQgb24gdGhlIGxhc3QgZnJhZ21lbnQpCisgKiBASUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTzogbWFjODAyMTEgaW50ZXJuYWwgZmxhZywgZG8gbm90IHRlc3Qgb3IKKyAqCXNldCB0aGlzIGZsYWcgaW4gdGhlIGRyaXZlcjsgaW5kaWNhdGVzIHRoYXQgdGhlIHJhdGUgY29udHJvbAorICoJYWxnb3JpdGhtIHdhcyB1c2VkIGFuZCBzaG91bGQgYmUgbm90aWZpZWQgb2YgVFggc3RhdHVzCisgKiBASUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOiBjb21wbGV0ZWx5IGludGVybmFsIHRvIG1hYzgwMjExLAorICoJdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGVuZGluZyBmcmFtZSByZXF1aXJlcyBUWCBwcm9jZXNzaW5nIGJlZm9yZQorICoJaXQgY2FuIGJlIHNlbnQgb3V0LgogICovCiBlbnVtIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MgewogCUlFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUwkJPSBCSVQoMCksCkBAIC0yNjAsOCArMjYzLDMwIEBACiAJSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUJCQk9IEJJVCgxMCksCiAJSUVFRTgwMjExX1RYX1NUQVRfQU1QRFVfTk9fQkFDSwkJPSBCSVQoMTEpLAogCUlFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFCT0gQklUKDEyKSwKKwlJRUVFODAyMTFfVFhfSU5URkxfUkNBTEdPCQk9IEJJVCgxMyksCisJSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HCT0gQklUKDE0KSwKIH07CiAKKy8qKgorICogZW51bSBtYWM4MDIxMV9yYXRlX2NvbnRyb2xfZmxhZ3MgLSBwZXItcmF0ZSBmbGFncyBzZXQgYnkgdGhlCisgKglSYXRlIENvbnRyb2wgYWxnb3JpdGhtLgorICoKKyAqIFRoZXNlIGZsYWdzIGFyZSBzZXQgYnkgdGhlIFJhdGUgY29udHJvbCBhbGdvcml0aG0gZm9yIGVhY2ggcmF0ZSBkdXJpbmcgdHgsCisgKiBpbiB0aGUgQGZsYWdzIG1lbWJlciBvZiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUuCisgKgorICogQElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOiBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uIGlzIHJlcXVpcmVkLgorICoJVGhpcyBpcyBzZXQgaWYgdGhlIGN1cnJlbnQgQlNTIHJlcXVpcmVzIEVSUCBwcm90ZWN0aW9uLgorICogQElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU6IFVzZSBzaG9ydCBwcmVhbWJsZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfTUNTOiBIVCByYXRlLgorICogQElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRDogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByYXRlIHNob3VsZCBiZSB1c2VkIGluCisgKglHcmVlbmZpZWxkIG1vZGUuCisgKiBASUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZSA0MCBNSHouCisgKiBASUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBOiBUaGUgZnJhbWUgc2hvdWxkIGJlIHRyYW5zbWl0dGVkIG9uIGJvdGggb2YgdGhlCisgKglhZGphY2VudCAyMCBNSHogY2hhbm5lbHMsIGlmIHRoZSBjdXJyZW50IGNoYW5uZWwgdHlwZSBpcworICoJTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyBvciBOTDgwMjExX0NIQU5fSFQ0MFBMVVMuCisgKiBASUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOiBTaG9ydCBHdWFyZCBpbnRlcnZhbCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyByYXRlLgorICovCiBlbnVtIG1hYzgwMjExX3JhdGVfY29udHJvbF9mbGFncyB7CiAJSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTCQk9IEJJVCgwKSwKIAlJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUCQk9IEJJVCgxKSwKQEAgLTUwMCwxNyArNTI1LDYgQEAKIAlJRUVFODAyMTFfQ09ORl9QUwkJPSAoMTw8MSksCiB9OwogCi0vKiBYWFg6IHJlbW92ZSBhbGwgdGhpcyBvbmNlIGRyaXZlcnMgc3RvcCB0cnlpbmcgdG8gdXNlIGl0ICovCi1zdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgX19JRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNkZWZpbmUgSUVFRTgwMjExX0NPTkZfU0hPUlRfU0xPVF9USU1FIChfX0lFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSgpKQotCi1zdHJ1Y3QgaWVlZTgwMjExX2h0X2NvbmYgewotCWJvb2wgZW5hYmxlZDsKLQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZTsKLX07CiAKIC8qKgogICogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIC0gZGVub3RlcyB3aGljaCBjb25maWd1cmF0aW9uIGNoYW5nZWQKQEAgLTUyMCwxMCArNTM0LDEwIEBACiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTDogdGhlIGxpc3RlbiBpbnRlcnZhbCBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPVEFQOiB0aGUgcmFkaW90YXAgZmxhZyBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTOiB0aGUgUFMgZmxhZyBjaGFuZ2VkCisgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0RZTlBTX1RJTUVPVVQ6IHRoZSBkeW5hbWljIFBTIHRpbWVvdXQgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUjogdGhlIFRYIHBvd2VyIGNoYW5nZWQKLSAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDogdGhlIGNoYW5uZWwgY2hhbmdlZAorICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOiB0aGUgY2hhbm5lbC9jaGFubmVsX3R5cGUgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFM6IHJldHJ5IGxpbWl0cyBjaGFuZ2VkCi0gKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUOiBIVCBjb25maWd1cmF0aW9uIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIHsKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRAk9IEJJVCgwKSwKQEAgLTUzMSwxMCArNTQ1LDEwIEBACiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTAk9IEJJVCgyKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9UQVAJCT0gQklUKDMpLAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUwkJPSBCSVQoNCksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSCQk9IEJJVCg1KSwKLQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTAkJPSBCSVQoNiksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUwk9IEJJVCg3KSwKLQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfSFQJCT0gQklUKDgpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUCT0gQklUKDUpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUgkJPSBCSVQoNiksCisJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwJCT0gQklUKDcpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMJPSBCSVQoOCksCiB9OwogCiAvKioKQEAgLTU0Nyw4ICs1NjEsOSBAQAogICogQGxpc3Rlbl9pbnRlcnZhbDogbGlzdGVuIGludGVydmFsIGluIHVuaXRzIG9mIGJlYWNvbiBpbnRlcnZhbAogICogQGZsYWdzOiBjb25maWd1cmF0aW9uIGZsYWdzIGRlZmluZWQgYWJvdmUKICAqIEBwb3dlcl9sZXZlbDogcmVxdWVzdGVkIHRyYW5zbWl0IHBvd2VyIChpbiBkQm0pCisgKiBAZHluYW1pY19wc190aW1lb3V0OiBkeW5hbWljIHBvd2Vyc2F2ZSB0aW1lb3V0IChpbiBtcykKICAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0byB0dW5lIHRvCi0gKiBAaHQ6IHRoZSBIVCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGV2aWNlCisgKiBAY2hhbm5lbF90eXBlOiB0aGUgY2hhbm5lbCAoSFQpIHR5cGUKICAqIEBsb25nX2ZyYW1lX21heF90eF9jb3VudDogTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBmb3IgYSAibG9uZyIgZnJhbWUKICAqICAgIChhIGZyYW1lIG5vdCBSVFMgcHJvdGVjdGVkKSwgY2FsbGVkICJkb3QxMUxvbmdSZXRyeUxpbWl0IiBpbiA4MDIuMTEsCiAgKiAgICBidXQgYWN0dWFsbHkgbWVhbnMgdGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIG5vdCB0aGUgbnVtYmVyIG9mIHJldHJpZXMKQEAgLTU1OSw3ICs1NzQsNyBAQAogc3RydWN0IGllZWU4MDIxMV9jb25mIHsKIAlpbnQgYmVhY29uX2ludDsKIAl1MzIgZmxhZ3M7Ci0JaW50IHBvd2VyX2xldmVsOworCWludCBwb3dlcl9sZXZlbCwgZHluYW1pY19wc190aW1lb3V0OwogCiAJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKIAlib29sIHJhZGlvX2VuYWJsZWQ7CkBAIC01NjcsNyArNTgyLDcgQEAKIAl1OCBsb25nX2ZyYW1lX21heF90eF9jb3VudCwgc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCXN0cnVjdCBpZWVlODAyMTFfaHRfY29uZiBodDsKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZTsKIH07CiAKIC8qKgpAQCAtNjMwLDEwICs2NDUsMTIgQEAKICAqIEBJRUVFODAyMTFfSUZDQ19CU1NJRDogVGhlIEJTU0lEIGNoYW5nZWQuCiAgKiBASUVFRTgwMjExX0lGQ0NfQkVBQ09OOiBUaGUgYmVhY29uIGZvciB0aGlzIGludGVyZmFjZSBjaGFuZ2VkCiAgKgkoY3VycmVudGx5IEFQIGFuZCBNRVNIIG9ubHkpLCB1c2UgaWVlZTgwMjExX2JlYWNvbl9nZXQoKS4KKyAqIEBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRDogVGhlIGVuYWJsZV9iZWFjb24gdmFsdWUgY2hhbmdlZC4KICAqLwogZW51bSBpZWVlODAyMTFfaWZfY29uZl9jaGFuZ2UgewotCUlFRUU4MDIxMV9JRkNDX0JTU0lECT0gQklUKDApLAotCUlFRUU4MDIxMV9JRkNDX0JFQUNPTgk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUZDQ19CU1NJRAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lGQ0NfQkVBQ09OCQk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRAk9IEJJVCgyKSwKIH07CiAKIC8qKgpAQCAtNjQxLDEzICs2NTgsMTYgQEAKICAqCiAgKiBAY2hhbmdlZDogcGFyYW1ldGVycyB0aGF0IGhhdmUgY2hhbmdlZCwgc2VlICZlbnVtIGllZWU4MDIxMV9pZl9jb25mX2NoYW5nZS4KICAqIEBic3NpZDogQlNTSUQgb2YgdGhlIG5ldHdvcmsgd2UgYXJlIGFzc29jaWF0ZWQgdG8vY3JlYXRpbmcuCisgKiBAZW5hYmxlX2JlYWNvbjogSW5kaWNhdGVzIHdoZXRoZXIgYmVhY29ucyBjYW4gYmUgc2VudC4KKyAqCVRoaXMgaXMgdmFsaWQgb25seSBmb3IgQVAvSUJTUy9NRVNIIG1vZGVzLgogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUgY29uZmlnX2ludGVyZmFjZSgpIGNhbGxiYWNrIG9mCiAgKiAmc3RydWN0IGllZWU4MDIxMV9ody4KICAqLwogc3RydWN0IGllZWU4MDIxMV9pZl9jb25mIHsKIAl1MzIgY2hhbmdlZDsKLQl1OCAqYnNzaWQ7CisJY29uc3QgdTggKmJzc2lkOworCWJvb2wgZW5hYmxlX2JlYWNvbjsKIH07CiAKIC8qKgpAQCAtNjU1LDExICs2NzUsMTMgQEAKICAqIEBBTEdfV0VQOiBXRVA0MCBvciBXRVAxMDQKICAqIEBBTEdfVEtJUDogVEtJUAogICogQEFMR19DQ01QOiBDQ01QIChBRVMpCisgKiBAQUxHX0FFU19DTUFDOiBBRVMtMTI4LUNNQUMKICAqLwogZW51bSBpZWVlODAyMTFfa2V5X2FsZyB7CiAJQUxHX1dFUCwKIAlBTEdfVEtJUCwKIAlBTEdfQ0NNUCwKKwlBTEdfQUVTX0NNQUMsCiB9OwogCiAvKioKQEAgLTY4OCwxMiArNzEwLDE2IEBACiAgKglnZW5lcmF0aW9uIGluIHNvZnR3YXJlLgogICogQElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTogU2V0IGJ5IG1hYzgwMjExLCB0aGlzIGZsYWcgaW5kaWNhdGVzCiAgKgl0aGF0IHRoZSBrZXkgaXMgcGFpcndpc2UgcmF0aGVyIHRoZW4gYSBzaGFyZWQga2V5LgorICogQElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBieSB0aGUgZHJpdmVyIGZvciBhCisgKglDQ01QIGtleSBpZiBpdCByZXF1aXJlcyBDQ01QIGVuY3J5cHRpb24gb2YgbWFuYWdlbWVudCBmcmFtZXMgKE1GUCkgdG8KKyAqCWJlIGRvbmUgaW4gc29mdHdhcmUuCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7CiAJSUVFRTgwMjExX0tFWV9GTEFHX1dNTV9TVEEJPSAxPDwwLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVgk9IDE8PDEsCiAJSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM9IDE8PDIsCiAJSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFCT0gMTw8MywKKwlJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVAk9IDE8PDQsCiB9OwogCiAvKioKQEAgLTcxNCw4ICs3NDAsOCBAQAogICogCS0gVGVtcG9yYWwgRW5jcnlwdGlvbiBLZXkgKDEyOCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBUeCBNSUMgS2V5ICg2NCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBSeCBNSUMgS2V5ICg2NCBiaXRzKQotICogQGljdl9sZW46IEZJWE1FCi0gKiBAaXZfbGVuOiBGSVhNRQorICogQGljdl9sZW46IFRoZSBJQ1YgbGVuZ3RoIGZvciB0aGlzIGtleSB0eXBlCisgKiBAaXZfbGVuOiBUaGUgSVYgbGVuZ3RoIGZvciB0aGlzIGtleSB0eXBlCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgewogCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwpAQCAtNzU5LDcgKzc4NSw3IEBACiAgKglzaXplb2Yodm9pZCAqKSwgc2l6ZSBpcyBkZXRlcm1pbmVkIGluIGh3IGluZm9ybWF0aW9uLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3N0YSB7Ci0JdTY0IHN1cHBfcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU107CisJdTMyIHN1cHBfcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdTggYWRkcltFVEhfQUxFTl07CiAJdTE2IGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgaHRfY2FwOwpAQCAtODMzLDExICs4NTksNiBAQAogICoJZXhwZWN0IHZhbHVlcyBiZXR3ZWVuIDAgYW5kIEBtYXhfc2lnbmFsLgogICoJSWYgcG9zc2libGUgcGxlYXNlIHByb3ZpZGUgZEIgb3IgZEJtIGluc3RlYWQuCiAgKgotICogQElFRUU4MDIxMV9IV19TSUdOQUxfREI6Ci0gKglIYXJkd2FyZSBnaXZlcyBzaWduYWwgdmFsdWVzIGluIGRCLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbgotICoJYXJiaXRyYXJ5LCBmaXhlZCByZWZlcmVuY2UuIFdlIGV4cGVjdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCBAbWF4X3NpZ25hbC4KLSAqCUlmIHBvc3NpYmxlIHBsZWFzZSBwcm92aWRlIGRCbSBpbnN0ZWFkLgotICoKICAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTToKICAqCUhhcmR3YXJlIGdpdmVzIHNpZ25hbCB2YWx1ZXMgaW4gZEJtLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbQogICoJb25lIG1pbGxpd2F0dC4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBzaW5jZSBpdCBpcyBzdGFuZGFyZGl6ZWQKQEAgLTg1NCwxMCArODc1LDIyIEBACiAgKiBASUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOgogICoJSGFyZHdhcmUgc3VwcG9ydHMgMTFuIEEtTVBEVSBhZ2dyZWdhdGlvbi4KICAqCi0gKiBASUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFM6Ci0gKglIYXJkd2FyZSB3aGljaCBoYXMgZHluYW1pYyBwb3dlciBzYXZlIHN1cHBvcnQsIG1lYW5pbmcKLSAqCXRoYXQgcG93ZXIgc2F2ZSBpcyBlbmFibGVkIGluIGlkbGUgcGVyaW9kcywgYW5kIGRvbid0IG5lZWQgc3VwcG9ydAotICoJZnJvbSBzdGFjay4KKyAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFM6CisgKglIYXJkd2FyZSBoYXMgcG93ZXIgc2F2ZSBzdXBwb3J0IChpLmUuIGNhbiBnbyB0byBzbGVlcCkuCisgKgorICogQElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzoKKyAqCUhhcmR3YXJlIHJlcXVpcmVzIG51bGxmdW5jIGZyYW1lIGhhbmRsaW5nIGluIHN0YWNrLCBpbXBsaWVzCisgKglzdGFjayBzdXBwb3J0IGZvciBkeW5hbWljIFBTLgorICoKKyAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzoKKyAqCUhhcmR3YXJlIGhhcyBzdXBwb3J0IGZvciBkeW5hbWljIFBTLgorICoKKyAqIEBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU6CisgKglIYXJkd2FyZSBzdXBwb3J0cyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKE1GUCwgSUVFRSA4MDIuMTF3KS4KKyAqCisgKiBASUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVI6CisgKglIYXJkd2FyZSBzdXBwb3J0cyBkcm9wcGluZyBvZiBpcnJlbGV2YW50IGJlYWNvbiBmcmFtZXMgdG8KKyAqCWF2b2lkIHdha2luZyB1cCBjcHUuCiAgKi8KIGVudW0gaWVlZTgwMjExX2h3X2ZsYWdzIHsKIAlJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTCQkJPSAxPDwxLApAQCAtODY1LDEyICs4OTgsMTUgQEAKIAlJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRQkJPSAxPDwzLAogCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1BSRUFNQkxFX0lOQ0FQQUJMRQk9IDE8PDQsCiAJSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMJCQk9IDE8PDUsCi0JSUVFRTgwMjExX0hXX1NJR05BTF9EQgkJCQk9IDE8PDYsCi0JSUVFRTgwMjExX0hXX1NJR05BTF9EQk0JCQkJPSAxPDw3LAotCUlFRUU4MDIxMV9IV19OT0lTRV9EQk0JCQkJPSAxPDw4LAotCUlFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UCQkJPSAxPDw5LAotCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTgkJCT0gMTw8MTAsCi0JSUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFMJCT0gMTw8MTEsCisJSUVFRTgwMjExX0hXX1NJR05BTF9EQk0JCQkJPSAxPDw2LAorCUlFRUU4MDIxMV9IV19OT0lTRV9EQk0JCQkJPSAxPDw3LAorCUlFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UCQkJPSAxPDw4LAorCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTgkJCT0gMTw8OSwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMJCQk9IDE8PDEwLAorCUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSwkJCT0gMTw8MTEsCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMJCT0gMTw8MTIsCisJSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFCQkJPSAxPDwxMywKKwlJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUgkJCT0gMTw8MTQsCiB9OwogCiAvKioKQEAgLTg5MCw5ICs5MjYsOCBAQAogICogQHdvcmtxdWV1ZTogc2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSBhdmFpbGFibGUgZm9yIGRyaXZlciB1c2UsCiAgKglhbGxvY2F0ZWQgYnkgbWFjODAyMTEgb24gcmVnaXN0cmF0aW9uIGFuZCBmbHVzaGVkIHdoZW4gYW4KICAqCWludGVyZmFjZSBpcyByZW1vdmVkLgotICoJTk9USUNFOiBBbGwgd29yayBwZXJmb3JtZWQgb24gdGhpcyB3b3JrcXVldWUgc2hvdWxkIE5FVkVSCi0gKglhY3F1aXJlIHRoZSBSVE5MIGxvY2sgKGkuZS4gRG9uJ3QgdXNlIHRoZSBmdW5jdGlvbgotICoJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoKSkKKyAqCU5PVElDRTogQWxsIHdvcmsgcGVyZm9ybWVkIG9uIHRoaXMgd29ya3F1ZXVlIG11c3Qgbm90CisgKglhY3F1aXJlIHRoZSBSVE5MIGxvY2suCiAgKgogICogQHByaXY6IHBvaW50ZXIgdG8gcHJpdmF0ZSBhcmVhIHRoYXQgd2FzIGFsbG9jYXRlZCBmb3IgZHJpdmVyIHVzZQogICoJYWxvbmcgd2l0aCB0aGlzIHN0cnVjdHVyZS4KQEAgLTkxNCwxMiArOTQ5LDYgQEAKICAqCWRhdGEgcGFja2V0cy4gV01NL1FvUyByZXF1aXJlcyBhdCBsZWFzdCBmb3VyLCB0aGVzZQogICoJcXVldWVzIG5lZWQgdG8gaGF2ZSBjb25maWd1cmFibGUgYWNjZXNzIHBhcmFtZXRlcnMuCiAgKgotICogQGFtcGR1X3F1ZXVlczogbnVtYmVyIG9mIGF2YWlsYWJsZSBoYXJkd2FyZSB0cmFuc21pdCBxdWV1ZXMKLSAqCWZvciBBLU1QRFUgcGFja2V0cywgdGhlc2UgaGF2ZSBubyBhY2Nlc3MgcGFyYW1ldGVycwotICoJYmVjYXVzZSB0aGV5J3JlIHVzZWQgb25seSBmb3IgQS1NUERVIGZyYW1lcy4gTm90ZSB0aGF0Ci0gKgltYWM4MDIxMSB3aWxsIG5vdCBjdXJyZW50bHkgdXNlIGFueSBvZiB0aGUgcmVndWxhciBxdWV1ZXMKLSAqCWZvciBhZ2dyZWdhdGlvbi4KLSAqCiAgKiBAcmF0ZV9jb250cm9sX2FsZ29yaXRobTogcmF0ZSBjb250cm9sIGFsZ29yaXRobSBmb3IgdGhpcyBoYXJkd2FyZS4KICAqCUlmIHVuc2V0IChOVUxMKSwgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIHdpbGwgYmUgdXNlZC4gTXVzdCBiZQogICoJc2V0IGJlZm9yZSBjYWxsaW5nIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpLgpAQCAtOTQ0LDcgKzk3Myw2IEBACiAJaW50IHZpZl9kYXRhX3NpemU7CiAJaW50IHN0YV9kYXRhX3NpemU7CiAJdTE2IHF1ZXVlczsKLQl1MTYgYW1wZHVfcXVldWVzOwogCXUxNiBtYXhfbGlzdGVuX2ludGVydmFsOwogCXM4IG1heF9zaWduYWw7CiAJdTggbWF4X3JhdGVzOwpAQCAtOTUyLDYgKzk4MCwxOSBAQAogfTsKIAogLyoqCisgKiB3aXBoeV90b19pZWVlODAyMTFfaHcgLSByZXR1cm4gYSBtYWM4MDIxMSBkcml2ZXIgaHcgc3RydWN0IGZyb20gYSB3aXBoeQorICoKKyAqIEB3aXBoeTogdGhlICZzdHJ1Y3Qgd2lwaHkgd2hpY2ggd2Ugd2FudCB0byBxdWVyeQorICoKKyAqIG1hYzgwMjExIGRyaXZlcnMgY2FuIHVzZSB0aGlzIHRvIGdldCB0byB0aGVpciByZXNwZWN0aXZlCisgKiAmc3RydWN0IGllZWU4MDIxMV9ody4gRHJpdmVycyB3aXNoaW5nIHRvIGdldCB0byB0aGVpciBvd24gcHJpdmF0ZQorICogc3RydWN0dXJlIGNhbiB0aGVuIGFjY2VzcyBpdCB2aWEgaHctPnByaXYuIE5vdGUgdGhhdCBtYWM4MDIxMTEgZHJpdmVycyBzaG91bGQKKyAqIG5vdCB1c2Ugd2lwaHlfcHJpdigpIHRvIHRyeSB0byBnZXQgdGhlaXIgcHJpdmF0ZSBkcml2ZXIgc3RydWN0dXJlIGFzIHRoaXMKKyAqIGlzIGFscmVhZHkgdXNlZCBpbnRlcm5hbGx5IGJ5IG1hYzgwMjExLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3aXBoeV90b19pZWVlODAyMTFfaHcoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKKy8qKgogICogU0VUX0lFRUU4MDIxMV9ERVYgLSBzZXQgZGV2aWNlIGZvciA4MDIuMTEgaGFyZHdhcmUKICAqCiAgKiBAaHc6IHRoZSAmc3RydWN0IGllZWU4MDIxMV9odyB0byBzZXQgdGhlIGRldmljZSBmb3IKQEAgLTk3MywxNiArMTAxNCw2IEBACiAJbWVtY3B5KGh3LT53aXBoeS0+cGVybV9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0JcmV0dXJuIGh3LT5xdWV1ZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9udW1fcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXJldHVybiBody0+cXVldWVzICsgaHctPmFtcGR1X3F1ZXVlczsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKgogaWVlZTgwMjExX2dldF90eF9yYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmMpCkBAIC0xMDE4LDE2ICsxMDQ5LDEyIEBACiAgKgogICogVGhlIHNldF9rZXkoKSBjYWxsYmFjayBpbiB0aGUgJnN0cnVjdCBpZWVlODAyMTFfb3BzIGZvciBhIGdpdmVuCiAgKiBkZXZpY2UgaXMgY2FsbGVkIHRvIGVuYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgZW5jcnlwdGlvbiBhbmQKLSAqIGRlY3J5cHRpb24uIFRoZSBjYWxsYmFjayB0YWtlcyBhbiBAYWRkcmVzcyBwYXJhbWV0ZXIgdGhhdCB3aWxsIGJlCi0gKiB0aGUgYnJvYWRjYXN0IGFkZHJlc3MgZm9yIGRlZmF1bHQga2V5cywgdGhlIG90aGVyIHN0YXRpb24ncyBoYXJkd2FyZQotICogYWRkcmVzcyBmb3IgaW5kaXZpZHVhbCBrZXlzIG9yIHRoZSB6ZXJvIGFkZHJlc3MgZm9yIGtleXMgdGhhdCB3aWxsCi0gKiBiZSB1c2VkIG9ubHkgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIGRlY3J5cHRpb24uIFRoZSBjYWxsYmFjayB0YWtlcyBhIEBzdGEgcGFyYW1ldGVyIHRoYXQgd2lsbCBiZSBOVUxMCisgKiBmb3IgZGVmYXVsdCBrZXlzIG9yIGtleXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIG9ubHksIG9yIHBvaW50IHRvCisgKiB0aGUgc3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHBlZXIgZm9yIGluZGl2aWR1YWwga2V5cy4KICAqIE11bHRpcGxlIHRyYW5zbWlzc2lvbiBrZXlzIHdpdGggdGhlIHNhbWUga2V5IGluZGV4IG1heSBiZSB1c2VkIHdoZW4KICAqIFZMQU5zIGFyZSBjb25maWd1cmVkIGZvciBhbiBhY2Nlc3MgcG9pbnQuCiAgKgotICogVGhlIEBsb2NhbF9hZGRyZXNzIHBhcmFtZXRlciB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gb3VyIG93biBhZGRyZXNzLAotICogdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHlvdSBzdXBwb3J0IG11bHRpcGxlIGxvY2FsIGFkZHJlc3Nlcy4KLSAqCiAgKiBXaGVuIHRyYW5zbWl0dGluZywgdGhlIFRYIGNvbnRyb2wgZGF0YSB3aWxsIHVzZSB0aGUgQGh3X2tleV9pZHgKICAqIHNlbGVjdGVkIGJ5IHRoZSBkcml2ZXIgYnkgbW9kaWZ5aW5nIHRoZSAmc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZgogICogcG9pbnRlZCB0byBieSB0aGUgQGtleSBwYXJhbWV0ZXIgdG8gdGhlIHNldF9rZXkoKSBmdW5jdGlvbi4KQEAgLTEwNjEsNiArMTA4OCw2MCBAQAogICovCiAKIC8qKgorICogRE9DOiBQb3dlcnNhdmUgc3VwcG9ydAorICoKKyAqIG1hYzgwMjExIGhhcyBzdXBwb3J0IGZvciB2YXJpb3VzIHBvd2Vyc2F2ZSBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogRmlyc3QsIGl0IGNhbiBzdXBwb3J0IGhhcmR3YXJlIHRoYXQgaGFuZGxlcyBhbGwgcG93ZXJzYXZpbmcgYnkKKyAqIGl0c2VsZiwgc3VjaCBoYXJkd2FyZSBzaG91bGQgc2ltcGx5IHNldCB0aGUgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUworICogaGFyZHdhcmUgZmxhZy4gSW4gdGhhdCBjYXNlLCBpdCB3aWxsIGJlIHRvbGQgYWJvdXQgdGhlIGRlc2lyZWQKKyAqIHBvd2Vyc2F2ZSBtb2RlIGRlcGVuZGluZyBvbiB0aGUgYXNzb2NpYXRpb24gc3RhdHVzLCBhbmQgdGhlIGRyaXZlcgorICogbXVzdCB0YWtlIGNhcmUgb2Ygc2VuZGluZyBudWxsZnVuYyBmcmFtZXMgd2hlbiBuZWNlc3NhcnksIGkuZS4gd2hlbgorICogZW50ZXJpbmcgYW5kIGxlYXZpbmcgcG93ZXJzYXZlIG1vZGUuIFRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbG9vayBhdAorICogdGhlIEFJRCBpbiBiZWFjb25zIGFuZCBzaWduYWwgdG8gdGhlIEFQIHRoYXQgaXQgd29rZSB1cCB3aGVuIGl0IGZpbmRzCisgKiB0cmFmZmljIGRpcmVjdGVkIHRvIGl0LiBUaGlzIG1vZGUgc3VwcG9ydHMgZHluYW1pYyBQUyBieSBzaW1wbHkKKyAqIGVuYWJsaW5nL2Rpc2FibGluZyBQUy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHN1Y2ggaGFyZHdhcmUgbWF5IHNldCB0aGUgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTCisgKiBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQgY2FuIHN1cHBvcnQgZHluYW1pYyBQUyBtb2RlIGl0c2VsZiAoc2VlIGJlbG93KS4KKyAqCisgKiBPdGhlciBoYXJkd2FyZSBkZXNpZ25zIGNhbm5vdCBzZW5kIG51bGxmdW5jIGZyYW1lcyBieSB0aGVtc2VsdmVzIGFuZCBhbHNvCisgKiBuZWVkIHNvZnR3YXJlIHN1cHBvcnQgZm9yIHBhcnNpbmcgdGhlIFRJTSBiaXRtYXAuIFRoaXMgaXMgYWxzbyBzdXBwb3J0ZWQKKyAqIGJ5IG1hYzgwMjExIGJ5IGNvbWJpbmluZyB0aGUgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUyBhbmQKKyAqICVJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgZmxhZ3MuIFRoZSBoYXJkd2FyZSBpcyBvZiBjb3Vyc2Ugc3RpbGwKKyAqIHJlcXVpcmVkIHRvIHBhc3MgdXAgYmVhY29ucy4gQWRkaXRpb25hbGx5LCBpbiB0aGlzIGNhc2UsIG1hYzgwMjExIHdpbGwKKyAqIHdha2UgdXAgdGhlIGhhcmR3YXJlIHdoZW4gbXVsdGljYXN0IHRyYWZmaWMgaXMgYW5ub3VuY2VkIGluIHRoZSBiZWFjb24uCisgKgorICogRklYTUU6IEkgZG9uJ3QgdGhpbmsgd2UgY2FuIGJlIGZhc3QgZW5vdWdoIGluIHNvZnR3YXJlIHdoZW4gd2Ugd2FudCB0bworICoJICByZWNlaXZlIG11bHRpY2FzdCB0cmFmZmljPworICoKKyAqIER5bmFtaWMgcG93ZXJzYXZlIG1vZGUgaXMgYW4gZXh0ZW5zaW9uIHRvIG5vcm1hbCBwb3dlcnNhdmUgbW9kZSBpbiB3aGljaAorICogdGhlIGhhcmR3YXJlIHN0YXlzIGF3YWtlIGZvciBhIHVzZXItc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHNlbmRpbmcKKyAqIGEgZnJhbWUgc28gdGhhdCByZXBseSBmcmFtZXMgbmVlZCBub3QgYmUgYnVmZmVyZWQgYW5kIHRoZXJlZm9yZSBkZWxheWVkCisgKiB0byB0aGUgbmV4dCB3YWtldXAuIFRoaXMgY2FuIGVpdGhlciBiZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUsIGluIHdoaWNoIGNhc2UKKyAqIHRoZSBkcml2ZXIgbmVlZHMgdG8gbG9vayBhdCB0aGUgQGR5bmFtaWNfcHNfdGltZW91dCBoYXJkd2FyZSBjb25maWd1cmF0aW9uCisgKiB2YWx1ZSwgb3IgYnkgdGhlIHN0YWNrIGlmIGFsbCBudWxsZnVuYyBoYW5kbGluZyBpcyBpbiB0aGUgc3RhY2suCisgKi8KKworLyoqCisgKiBET0M6IEJlYWNvbiBmaWx0ZXIgc3VwcG9ydAorICoKKyAqIFNvbWUgaGFyZHdhcmUgaGF2ZSBiZWFjb24gZmlsdGVyIHN1cHBvcnQgdG8gcmVkdWNlIGhvc3QgY3B1IHdha2V1cHMKKyAqIHdoaWNoIHdpbGwgcmVkdWNlIHN5c3RlbSBwb3dlciBjb25zdW1wdGlvbi4gSXQgdXN1YWxsbHkgd29ya3Mgc28gdGhhdAorICogdGhlIGZpcm13YXJlIGNyZWF0ZXMgYSBjaGVja3N1bSBvZiB0aGUgYmVhY29uIGJ1dCBvbWl0cyBhbGwgY29uc3RhbnRseQorICogY2hhbmdpbmcgZWxlbWVudHMgKFRTRiwgVElNIGV0YykuIFdoZW5ldmVyIHRoZSBjaGVja3N1bSBjaGFuZ2VzIHRoZQorICogYmVhY29uIGlzIGZvcndhcmRlZCB0byB0aGUgaG9zdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUganVzdCBkcm9wcGVkLiBUaGF0CisgKiB3YXkgdGhlIGhvc3Qgd2lsbCBvbmx5IHJlY2VpdmUgYmVhY29ucyB3aGVyZSBzb21lIHJlbGV2YW50IGluZm9ybWF0aW9uCisgKiAoZm9yIGV4YW1wbGUgRVJQIHByb3RlY3Rpb24gb3IgV01NIHNldHRpbmdzKSBoYXZlIGNoYW5nZWQuCisgKgorICogQmVhY29uIGZpbHRlciBzdXBwb3J0IGlzIGluZm9ybWVkIHdpdGggJUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIGZsYWcuCisgKiBUaGUgZHJpdmVyIG5lZWRzIHRvIGVuYWJsZSBiZWFjb24gZmlsdGVyIHN1cHBvcnQgd2hlbmV2ZXIgcG93ZXIgc2F2ZSBpcworICogZW5hYmxlZCwgdGhhdCBpcyAlSUVFRTgwMjExX0NPTkZfUFMgaXMgc2V0LiBXaGVuIHBvd2VyIHNhdmUgaXMgZW5hYmxlZCwKKyAqIHRoZSBzdGFjayB3aWxsIG5vdCBjaGVjayBmb3IgYmVhY29uIG1pc3MgYXQgYWxsIGFuZCB0aGUgZHJpdmVyIG5lZWRzIHRvCisgKiBub3RpZnkgYWJvdXQgY29tcGxldGUgbG9zcyBvZiBiZWFjb25zIHdpdGggaWVlZTgwMjExX2JlYWNvbl9sb3NzKCkuCisgKi8KKworLyoqCiAgKiBET0M6IEZyYW1lIGZpbHRlcmluZwogICoKICAqIG1hYzgwMjExIHJlcXVpcmVzIHRvIHNlZSBtYW55IG1hbmFnZW1lbnQgZnJhbWVzIGZvciBwcm9wZXIKQEAgLTExNDksMTQgKzEyMzAsMTQgQEAKICAqIEBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDogc3RvcCBSeCBhZ2dyZWdhdGlvbgogICogQElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDogc3RhcnQgVHggYWdncmVnYXRpb24KICAqIEBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDogc3RvcCBUeCBhZ2dyZWdhdGlvbgotICogQElFRUU4MDIxMV9BTVBEVV9UWF9SRVNVTUU6IHJlc3VtZSBUWCBhZ2dyZWdhdGlvbgorICogQElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDogVFggYWdncmVnYXRpb24gaGFzIGJlY29tZSBvcGVyYXRpb25hbAogICovCiBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiB7CiAJSUVFRTgwMjExX0FNUERVX1JYX1NUQVJULAogCUlFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAogCUlFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVCwKIAlJRUVFODAyMTFfQU1QRFVfVFhfU1RPUCwKLQlJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FLAorCUlFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTCwKIH07CiAKIC8qKgpAQCAtMTE3Miw2ICsxMjUzLDggQEAKICAqCWNvbmZpZ3VyYXRpb24gaW4gdGhlIFRYIGNvbnRyb2wgZGF0YS4gVGhpcyBoYW5kbGVyIHNob3VsZCwKICAqCXByZWZlcmFibHksIG5ldmVyIGZhaWwgYW5kIHN0b3AgcXVldWVzIGFwcHJvcHJpYXRlbHksIG1vcmUKICAqCWltcG9ydGFudGx5LCBob3dldmVyLCBpdCBtdXN0IG5ldmVyIGZhaWwgZm9yIEEtTVBEVS1xdWV1ZXMuCisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gTkVUREVWX1RYX09LIGV4Y2VwdCBpbiB2ZXJ5CisgKglsaW1pdGVkIGNhc2VzLgogICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgYXRvbWljLgogICoKICAqIEBzdGFydDogQ2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZQpAQCAtMTIxMiw5ICsxMjk1LDEyIEBACiAgKgogICogQGNvbmZpZzogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cy4gSUVFRSA4MDIuMTEgY29kZSBjYWxscyB0aGlzCiAgKglmdW5jdGlvbiB0byBjaGFuZ2UgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgZS5nLiwgY2hhbm5lbC4KKyAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGZhaWwgYnV0IHJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKglpZiBpdCBkb2VzLgogICoKICAqIEBjb25maWdfaW50ZXJmYWNlOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJlbGF0ZWQgdG8gaW50ZXJmYWNlcwogICoJKGUuZy4gQlNTSUQgY2hhbmdlcy4pCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSB3aGljaCB3aWxsIGJlIHNlZW4gaW4gdXNlcnNwYWNlLgogICoKICAqIEBic3NfaW5mb19jaGFuZ2VkOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJlbGF0ZWQgdG8gQlNTCiAgKglwYXJhbWV0ZXJzIHRoYXQgbWF5IHZhcnkgZHVyaW5nIEJTUydzIGxpZmVzcGFuLCBhbmQgbWF5IGFmZmVjdCBsb3cKQEAgLTEyMzIsOCArMTMxOCw5IEBACiAgKgogICogQHNldF9rZXk6IFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKICAqCVRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLCBhbmQgaXMgb25seSBjYWxsZWQgYmV0d2VlbiBhZGRfaW50ZXJmYWNlCi0gKglhbmQgcmVtb3ZlX2ludGVyZmFjZSBjYWxscywgaS5lLiB3aGlsZSB0aGUgaW50ZXJmYWNlIHdpdGggdGhlCi0gKglnaXZlbiBsb2NhbF9hZGRyZXNzIGlzIGVuYWJsZWQuCisgKglhbmQgcmVtb3ZlX2ludGVyZmFjZSBjYWxscywgaS5lLiB3aGlsZSB0aGUgZ2l2ZW4gdmlydHVhbCBpbnRlcmZhY2UKKyAqCWlzIGVuYWJsZWQuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUga2V5IGNhbid0IGJlIGFkZGVkLgogICoKICAqIEB1cGRhdGVfdGtpcF9rZXk6IFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKICAqIAlUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIFJ4LiBDYWxsZWQgZm9yIGRyaXZlcnMKQEAgLTEyNDEsMTIgKzEzMjgsMjIgQEAKICAqCiAgKiBAaHdfc2NhbjogQXNrIHRoZSBoYXJkd2FyZSB0byBzZXJ2aWNlIHRoZSBzY2FuIHJlcXVlc3QsIG5vIG5lZWQgdG8gc3RhcnQKICAqCXRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgaW4gc3RhY2suIFRoZSBzY2FuIG11c3QgaG9ub3VyIHRoZSBjaGFubmVsCi0gKgljb25maWd1cmF0aW9uIGRvbmUgYnkgdGhlIHJlZ3VsYXRvcnkgYWdlbnQgaW4gdGhlIHdpcGh5J3MgcmVnaXN0ZXJlZAotICoJYmFuZHMuIFdoZW4gdGhlIHNjYW4gZmluaXNoZXMsIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgpIG11c3QgYmUKLSAqCWNhbGxlZDsgbm90ZSB0aGF0IGl0IGFsc28gbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgc2NhbiBjYW5ub3QgZmluaXNoCi0gKgliZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyB0dXJuZWQgb2ZmISBBbnl0aGluZyBlbHNlIGlzIGEgYnVnIQorICoJY29uZmlndXJhdGlvbiBkb25lIGJ5IHRoZSByZWd1bGF0b3J5IGFnZW50IGluIHRoZSB3aXBoeSdzCisgKglyZWdpc3RlcmVkIGJhbmRzLiBUaGUgaGFyZHdhcmUgKG9yIHRoZSBkcml2ZXIpIG5lZWRzIHRvIG1ha2Ugc3VyZQorICoJdGhhdCBwb3dlciBzYXZlIGlzIGRpc2FibGVkLiBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLAorICoJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCkgbXVzdCBiZSBjYWxsZWQ7IG5vdGUgdGhhdCBpdCBhbHNvIG11c3QKKyAqCWJlIGNhbGxlZCB3aGVuIHRoZSBzY2FuIGNhbm5vdCBmaW5pc2ggYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMKKyAqCXR1cm5lZCBvZmYhIEFueXRoaW5nIGVsc2UgaXMgYSBidWchIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKgl3aGljaCB3aWxsIGJlIHNlZW4gaW4gdXNlcnNwYWNlLgogICoKLSAqIEBnZXRfc3RhdHM6IHJldHVybiBsb3ctbGV2ZWwgc3RhdGlzdGljcworICogQHN3X3NjYW5fc3RhcnQ6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGEgc29mdHdhcmUgc2NhbgorICoJaXMgc3RhcnRlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgorICoKKyAqIEBzd19zY2FuX2NvbXBsZXRlOiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGFmdGVyIGEgc29mdHdhcmUgc2NhbgorICoJZmluaXNoZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAZ2V0X3N0YXRzOiBSZXR1cm4gbG93LWxldmVsIHN0YXRpc3RpY3MuCisgKiAJUmV0dXJucyB6ZXJvIGlmIHN0YXRpc3RpY3MgYXJlIGF2YWlsYWJsZS4KICAqCiAgKiBAZ2V0X3RraXBfc2VxOiBJZiB5b3VyIGRldmljZSBpbXBsZW1lbnRzIFRLSVAgZW5jcnlwdGlvbiBpbiBoYXJkd2FyZSB0aGlzCiAgKgljYWxsYmFjayBzaG91bGQgYmUgcHJvdmlkZWQgdG8gcmVhZCB0aGUgVEtJUCB0cmFuc21pdCBJVnMgKGJvdGggSVYzMgpAQCAtMTI2MCwxNiArMTM1NywyMSBAQAogICoKICAqIEBjb25mX3R4OiBDb25maWd1cmUgVFggcXVldWUgcGFyYW1ldGVycyAoRURDRiAoYWlmcywgY3dfbWluLCBjd19tYXgpLAogICoJYnVyc3RpbmcpIGZvciBhIGhhcmR3YXJlIFRYIHF1ZXVlLgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqCiAgKiBAZ2V0X3R4X3N0YXRzOiBHZXQgc3RhdGlzdGljcyBvZiB0aGUgY3VycmVudCBUWCBxdWV1ZSBzdGF0dXMuIFRoaXMgaXMgdXNlZAogICoJdG8gZ2V0IG51bWJlciBvZiBjdXJyZW50bHkgcXVldWVkIHBhY2tldHMgKHF1ZXVlIGxlbmd0aCksIG1heGltdW0gcXVldWUKICAqCXNpemUgKGxpbWl0KSwgYW5kIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdXNpbmcgZWFjaCBUWCBxdWV1ZQotICoJKGNvdW50KS4gVGhlICdzdGF0cycgcG9pbnRlciBwb2ludHMgdG8gYW4gYXJyYXkgdGhhdCBoYXMgaHctPnF1ZXVlcyArCi0gKglody0+YW1wZHVfcXVldWVzIGl0ZW1zLgorICoJKGNvdW50KS4gVGhlICdzdGF0cycgcG9pbnRlciBwb2ludHMgdG8gYW4gYXJyYXkgdGhhdCBoYXMgaHctPnF1ZXVlcworICoJaXRlbXMuCiAgKgogICogQGdldF90c2Y6IEdldCB0aGUgY3VycmVudCBUU0YgdGltZXIgdmFsdWUgZnJvbSBmaXJtd2FyZS9oYXJkd2FyZS4gQ3VycmVudGx5LAotICoJdGhpcyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcgYW5kLCBhcyBzdWNoLCBpcyBub3QgYQotICoJcmVxdWlyZWQgZnVuY3Rpb24uIE11c3QgYmUgYXRvbWljLgorICoJdGhpcyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBCU1NJRCBtZXJnaW5nIGFuZCBkZWJ1Z2dpbmcuIElzIG5vdCBhCisgKglyZXF1aXJlZCBmdW5jdGlvbi4KKyAqCisgKiBAc2V0X3RzZjogU2V0IHRoZSBUU0YgdGltZXIgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgZmlybXdhcmUvaGFyZHdhcmUuCisgKiAgICAgIEN1cnJlbnRseSwgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcuIElzIG5vdCBhCisgKglyZXF1aXJlZCBmdW5jdGlvbi4KICAqCiAgKiBAcmVzZXRfdHNmOiBSZXNldCB0aGUgVFNGIHRpbWVyIGFuZCBhbGxvdyBmaXJtd2FyZS9oYXJkd2FyZSB0byBzeW5jaHJvbml6ZQogICoJd2l0aCBvdGhlciBTVEFzIGluIHRoZSBJQlNTLiBUaGlzIGlzIG9ubHkgdXNlZCBpbiBJQlNTIG1vZGUuIFRoaXMKQEAgLTEyNzksMTMgKzEzODEsMTUgQEAKICAqIEB0eF9sYXN0X2JlYWNvbjogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxhc3QgSUJTUyBiZWFjb24gd2FzIHNlbnQgYnkgdXMuCiAgKglUaGlzIGlzIG5lZWRlZCBvbmx5IGZvciBJQlNTIG1vZGUgYW5kIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcwogICoJdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byByZXBseSB0byBQcm9iZSBSZXF1ZXN0cy4KKyAqCVJldHVybnMgbm9uLXplcm8gaWYgdGhpcyBkZXZpY2Ugc2VudCB0aGUgbGFzdCBiZWFjb24uCiAgKgogICogQGFtcGR1X2FjdGlvbjogUGVyZm9ybSBhIGNlcnRhaW4gQS1NUERVIGFjdGlvbgogICogCVRoZSBSQS9USUQgY29tYmluYXRpb24gZGV0ZXJtaW5lcyB0aGUgZGVzdGluYXRpb24gYW5kIFRJRCB3ZSB3YW50CiAgKiAJdGhlIGFtcGR1IGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgZm9yLiBUaGUgYWN0aW9uIGlzIGRlZmluZWQgdGhyb3VnaAogICogCWllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbi4gU3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyIChAc3NuKQotICogCWlzIHRoZSBmaXJzdCBmcmFtZSB3ZSBleHBlY3QgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLiBub3RpY2UKKyAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gTm90aWNlCiAgKiAJdGhhdCBUWC9SWF9TVE9QIGNhbiBwYXNzIE5VTEwgZm9yIHRoaXMgcGFyYW1ldGVyLgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewogCWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xMzEwLDEyICsxNDE0LDE1IEBACiAJaW50ICgqc2V0X3RpbSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgICBib29sIHNldCk7CiAJaW50ICgqc2V0X2tleSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAJdm9pZCAoKnVwZGF0ZV90a2lwX2tleSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLCBjb25zdCB1OCAqYWRkcmVzcywKIAkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7Ci0JaW50ICgqaHdfc2Nhbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzc2lkLCBzaXplX3QgbGVuKTsKKwlpbnQgKCpod19zY2FuKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CisJdm9pZCAoKnN3X3NjYW5fc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqc3dfc2Nhbl9jb21wbGV0ZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmdldF9zdGF0cykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsKIAl2b2lkICgqZ2V0X3RraXBfc2VxKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaHdfa2V5X2lkeCwKQEAgLTEzMjgsNiArMTQzNSw3IEBACiAJaW50ICgqZ2V0X3R4X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiAJdTY0ICgqZ2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzZXRfdHNmKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiAJdm9pZCAoKnJlc2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKnR4X2xhc3RfYmVhY29uKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJaW50ICgqYW1wZHVfYWN0aW9uKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE3NTIsOCArMTg2MCw5IEBACiAgKiBtYWM4MDIxMSB0aGF0IHRoZSBzY2FuIGZpbmlzaGVkLgogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoYXQgZmluaXNoZWQgdGhlIHNjYW4KKyAqIEBhYm9ydGVkOiBzZXQgdG8gdHJ1ZSBpZiBzY2FuIHdhcyBhYm9ydGVkCiAgKi8KLXZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpOwogCiAvKioKICAqIGllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzIC0gaXRlcmF0ZSBhY3RpdmUgaW50ZXJmYWNlcwpAQCAtMTg4MiwxMCArMTk5MSwzMCBAQAogc3RydWN0IGllZWU4MDIxMV9zdGEgKmllZWU4MDIxMV9maW5kX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJIGNvbnN0IHU4ICphZGRyKTsKIAorLyoqCisgKiBpZWVlODAyMTFfYmVhY29uX2xvc3MgLSBpbmZvcm0gaGFyZHdhcmUgZG9lcyBub3QgcmVjZWl2ZSBiZWFjb25zCisgKgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKgorICogV2hlbiBiZWFjb24gZmlsdGVyaW5nIGlzIGVuYWJsZWQgd2l0aCBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUklORyBhbmQKKyAqIElFRUU4MDIxMV9DT05GX1BTIGlzIHNldCwgdGhlIGRyaXZlciBuZWVkcyB0byBpbmZvcm0gd2hlbmV2ZXIgdGhlCisgKiBoYXJkd2FyZSBpcyBub3QgcmVjZWl2aW5nIGJlYWNvbnMgd2l0aCB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAogLyogUmF0ZSBjb250cm9sIEFQSSAqLwogCiAvKioKKyAqIGVudW0gcmF0ZV9jb250cm9sX2NoYW5nZWQgLSBmbGFncyB0byBpbmRpY2F0ZSB3aGljaCBwYXJhbWV0ZXIgY2hhbmdlZAorICoKKyAqIEBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRDogVGhlIEhUIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGluZyBjaGFubmVsIGhhdmUKKyAqCWNoYW5nZWQsIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FuIHVwZGF0ZSBpdHMgaW50ZXJuYWwgc3RhdGUgaWYgbmVlZGVkLgorICovCitlbnVtIHJhdGVfY29udHJvbF9jaGFuZ2VkIHsKKwlJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCA9IEJJVCgwKQorfTsKKworLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAtIHJhdGUgY29udHJvbCBpbmZvcm1hdGlvbiBmb3IvZnJvbSBSQyBhbGdvCiAgKgogICogQGh3OiBUaGUgaGFyZHdhcmUgdGhlIGFsZ29yaXRobSBpcyBpbnZva2VkIGZvci4KQEAgLTE5MjEsNiArMjA1MCw5IEBACiAJdm9pZCAqKCphbGxvY19zdGEpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCk7CiAJdm9pZCAoKnJhdGVfaW5pdCkodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhKTsKKwl2b2lkICgqcmF0ZV91cGRhdGUpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgdm9pZCAqcHJpdl9zdGEsIHUzMiBjaGFuZ2VkKTsKIAl2b2lkICgqZnJlZV9zdGEpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgdm9pZCAqcHJpdl9zdGEpOwogCkBAIC0xOTYyLDQgKzIwOTQsMzQgQEAKIGludCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogdm9pZCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyk7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odDIwKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDIwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQ0MF9taW51cyhzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQ0MF9wbHVzKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUzsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDAoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mX2lzX2h0NDBfbWludXMoY29uZikgfHwgY29uZl9pc19odDQwX3BsdXMoY29uZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odChzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fTk9fSFQ7Cit9CisKICNlbmRpZiAvKiBNQUM4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggMmUwYzUzNi4uNmMzZjk2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtOTEsOCArOTEsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCi1zdHJ1Y3QgbmZfY29ubgoteworc3RydWN0IG5mX2Nvbm4gewogCS8qIFVzYWdlIGNvdW50IGluIGhlcmUgaXMgMSBmb3IgaGFzaCB0YWJsZS9kZXN0cnVjdCB0aW1lciwgMSBwZXIgc2tiLAogICAgICAgICAgICBwbHVzIDEgZm9yIGFueSBjb25uZWN0aW9uKHMpIHdlIGFyZSBgbWFzdGVyJyBmb3IgKi8KIAlzdHJ1Y3QgbmZfY29ubnRyYWNrIGN0X2dlbmVyYWw7CkBAIC0xMjYsNyArMTI1LDYgQEAKICNpZmRlZiBDT05GSUdfTkVUX05TCiAJc3RydWN0IG5ldCAqY3RfbmV0OwogI2VuZGlmCi0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm4gKgpAQCAtMTkwLDkgKzE4OCwxMyBAQAogZXh0ZXJuIGludCBuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHVuc2lnbmVkIHNob3J0IGwzcHJvdG8pOwogZXh0ZXJuIHZvaWQgbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KHVuc2lnbmVkIHNob3J0IGwzcHJvdG8pOwogCi1leHRlcm4gc3RydWN0IGhsaXN0X2hlYWQgKm5mX2N0X2FsbG9jX2hhc2h0YWJsZSh1bnNpZ25lZCBpbnQgKnNpemVwLCBpbnQgKnZtYWxsb2NlZCk7Ci1leHRlcm4gdm9pZCBuZl9jdF9mcmVlX2hhc2h0YWJsZShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaCwgaW50IHZtYWxsb2NlZCwKLQkJCQkgdW5zaWduZWQgaW50IHNpemUpOworLyoKKyAqIEFsbG9jYXRlIGEgaGFzaHRhYmxlIG9mIGhsaXN0X2hlYWQgKGlmIG51bGxzID09IDApLAorICogb3IgaGxpc3RfbnVsbHNfaGVhZCAoaWYgbnVsbHMgPT0gMSkKKyAqLworZXh0ZXJuIHZvaWQgKm5mX2N0X2FsbG9jX2hhc2h0YWJsZSh1bnNpZ25lZCBpbnQgKnNpemVwLCBpbnQgKnZtYWxsb2NlZCwgaW50IG51bGxzKTsKKworZXh0ZXJuIHZvaWQgbmZfY3RfZnJlZV9oYXNodGFibGUodm9pZCAqaGFzaCwgaW50IHZtYWxsb2NlZCwgdW5zaWduZWQgaW50IHNpemUpOwogCiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICoKIF9fbmZfY29ubnRyYWNrX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CkBAIC0yODcsNyArMjg5LDcgQEAKIAogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOwogZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7Ci1leHRlcm4gaW50IG5mX2Nvbm50cmFja19tYXg7CitleHRlcm4gdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19tYXg7CiAKICNkZWZpbmUgTkZfQ1RfU1RBVF9JTkMobmV0LCBjb3VudCkJXAogCShwZXJfY3B1X3B0cigobmV0KS0+Y3Quc3RhdCwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSktPmNvdW50KyspCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCA2NmQ2NWE3Li5lZTJhNGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKQEAgLTE0LDYgKzE0LDggQEAKIAogc3RydWN0IG1vZHVsZTsKIAorI2RlZmluZSBORl9DVF9IRUxQRVJfTkFNRV9MRU4JMTYKKwogc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBobm9kZTsJLyogSW50ZXJuYWwgdXNlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAppbmRleCAwMzc4Njc2Li45Zjk5ZDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaApAQCAtNTMsMTAgKzUzLDE3IEBACiAJaW50ICgqdHVwbGVfdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpOwogCisJLyoKKwkgKiBDYWxjdWxhdGUgc2l6ZSBvZiB0dXBsZSBubGF0dHIKKwkgKi8KKwlpbnQgKCpubGF0dHJfdHVwbGVfc2l6ZSkodm9pZCk7CisKIAlpbnQgKCpubGF0dHJfdG9fdHVwbGUpKHN0cnVjdCBubGF0dHIgKnRiW10sCiAJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCk7CiAJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKm5sYV9wb2xpY3k7CiAKKwlzaXplX3QgbmxhX3NpemU7CisKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmN0bF90YWJsZV9oZWFkZXI7CiAJc3RydWN0IGN0bF9wYXRoCQkqY3RsX3RhYmxlX3BhdGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCmluZGV4IGRlYmRhZjcuLmJhMzJlZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCkBAIC02NCwxNiArNjQsMjIgQEAKIAkvKiBjb252ZXJ0IHByb3RvaW5mbyB0byBuZm5ldGluayBhdHRyaWJ1dGVzICovCiAJaW50ICgqdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmxhdHRyICpubGEsCiAJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKKwkvKiBDYWxjdWxhdGUgcHJvdG9pbmZvIG5sYXR0ciBzaXplICovCisJaW50ICgqbmxhdHRyX3NpemUpKHZvaWQpOwogCiAJLyogY29udmVydCBuZm5ldGxpbmsgYXR0cmlidXRlcyB0byBwcm90b2luZm8gKi8KIAlpbnQgKCpmcm9tX25sYXR0cikoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5mX2Nvbm4gKmN0KTsKIAogCWludCAoKnR1cGxlX3RvX25sYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKKwkvKiBDYWxjdWxhdGUgdHVwbGUgbmxhdHRyIHNpemUgKi8KKwlpbnQgKCpubGF0dHJfdHVwbGVfc2l6ZSkodm9pZCk7CiAJaW50ICgqbmxhdHRyX3RvX3R1cGxlKShzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpOwogCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpubGFfcG9saWN5OwogCisJc2l6ZV90IG5sYV9zaXplOworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSoqY3RsX3RhYmxlX2hlYWRlcjsKIAlzdHJ1Y3QgY3RsX3RhYmxlCSpjdGxfdGFibGU7CkBAIC05MCwxMCArOTYsNyBAQAogCXN0cnVjdCBtb2R1bGUgKm1lOwogfTsKIAotLyogRXhpc3RpbmcgYnVpbHQtaW4gcHJvdG9jb2xzICovCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDY7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDQ7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDY7CisvKiBFeGlzdGluZyBidWlsdC1pbiBnZW5lcmljIHByb3RvY29sICovCiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWM7CiAKICNkZWZpbmUgTUFYX05GX0NUX1BST1RPIDI1NgpAQCAtMTAxLDExICsxMDQsNiBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqCiBfX25mX2N0X2w0cHJvdG9fZmluZCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgbDRwcm90byk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgotbmZfY3RfbDRwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgcHJvdG9jb2wpOwotCi1leHRlcm4gdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApOwotCiAvKiBQcm90b2NvbCByZWdpc3RyYXRpb24uICovCiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcHJvdG8pOwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnByb3RvKTsKQEAgLTExNSw2ICsxMTMsNyBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKIGV4dGVybiBpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUoc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKK2V4dGVybiBpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZl9jdF9wb3J0X25sYV9wb2xpY3lbXTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaAppbmRleCBmMmY2YWE3Li4yNjI4YzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3RfbnVsbHMuaD4KIAogLyogQSBgdHVwbGUnIGlzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIHRvIHVuaXF1ZWx5CiAgIGlkZW50aWZ5IGEgY29ubmVjdGlvbi4gIGllLiBpZiB0d28gcGFja2V0cyBoYXZlIHRoZSBzYW1lIHR1cGxlLCB0aGV5CkBAIC0xNDYsOSArMTQ3LDggQEAKIAkoKGVudW0gaXBfY29ubnRyYWNrX2RpcikoaCktPnR1cGxlLmRzdC5kaXIpCiAKIC8qIENvbm5lY3Rpb25zIGhhdmUgdHdvIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGU6IG9uZSBmb3IgZWFjaCB3YXkgKi8KLXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaAotewotCXN0cnVjdCBobGlzdF9ub2RlIGhub2RlOworc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoIHsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBobm5vZGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaAppbmRleCA3MTgyYzA2Li45MjA5OTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTkZfTE9HX0gKICNkZWZpbmUgX05GX0xPR19ICiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKwogLyogdGhvc2UgTkZfTE9HXyogZGVmaW5lcyBhbmQgc3RydWN0IG5mX2xvZ2luZm8gYXJlIGxlZ2FjeSBkZWZpbml0aW9zIHRoYXQgd2lsbAogICogZGlzYXBwZWFyIG9uY2UgaXB0YWJsZXMgaXMgcmVwbGFjZWQgd2l0aCBwa3R0YWJsZXMuICBQbGVhc2UgRE8gTk9UIHVzZSB0aGVtCiAgKiBmb3IgYW55IG5ldyBjb2RlISAqLwpAQCAtNDAsMTIgKzQyLDE1IEBACiAJc3RydWN0IG1vZHVsZQkqbWU7CiAJbmZfbG9nZm4gCSpsb2dmbjsKIAljaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3RbTkZQUk9UT19OVU1QUk9UT107CiB9OwogCiAvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGxvZyBmdW5jdGlvbi4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyX3BmKHVfaW50OF90IHBmKTsKK2ludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Cit2b2lkIG5mX2xvZ191bnJlZ2lzdGVyKHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7CisKK2ludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKTsKK3ZvaWQgbmZfbG9nX3VuYmluZF9wZih1X2ludDhfdCBwZik7CiAKIC8qIENhbGxzIHRoZSByZWdpc3RlcmVkIGJhY2tlbmQgbG9nZ2luZyBmdW5jdGlvbiAqLwogdm9pZCBuZl9sb2dfcGFja2V0KHVfaW50OF90IHBmLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaCBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKaW5kZXggNzQ5MDExZS4uNjBlYmJjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBjaXBzb192NF9kb2k7CkBAIC00MDYsNiArNDA3LDcgQEAKICAqLwogaW50IG5ldGxibF9lbmFibGVkKHZvaWQpOwogaW50IG5ldGxibF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAorCQkJdTE2IGZhbWlseSwKIAkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwogdm9pZCBuZXRsYmxfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzayk7CiBpbnQgbmV0bGJsX3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCkBAIC00MTMsNiArNDE1LDkgQEAKIGludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCXN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IG5ldGxibF9yZXFfc2V0YXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK3ZvaWQgbmV0bGJsX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiBpbnQgbmV0bGJsX3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHUxNiBmYW1pbHksCiAJCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwpAQCAtNTE5LDcgKzUyNCw4IEBACiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCisJCQkJICAgICAgdTE2IGZhbWlseSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCXJldHVybiAtRU5PU1lTOwogfQpAQCAtNTM3LDYgKzU0MywxNSBAQAogewogCXJldHVybiAtRU5PU1lTOwogfQorc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmV0bGJsX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlyZXR1cm47Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc2tidWZmX3NldGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICB1MTYgZmFtaWx5LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsaW5rLmggYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKaW5kZXggOGE2MTUwYS4uZWRkYjUwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaApAQCAtMjMwLDYgKzIzMCw3IEBACiBleHRlcm4gaW50CQlubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgaW50IG1heHR5cGUsCiAJCQkJICBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLAogCQkJCSAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSk7CitleHRlcm4gaW50CQlubGFfcG9saWN5X2xlbihjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqLCBpbnQpOwogZXh0ZXJuIHN0cnVjdCBubGF0dHIgKglubGFfZmluZChzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgYXR0cnR5cGUpOwogZXh0ZXJuIHNpemVfdAkJbmxhX3N0cmxjcHkoY2hhciAqZHN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsCiAJCQkJICAgIHNpemVfdCBkc3RzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvY29ubnRyYWNrLmgKaW5kZXggZjQ0OThhNi4uOWRjNTg0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvY29ubnRyYWNrLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fTkVUTlNfQ09OTlRSQUNLX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0X251bGxzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjsKQEAgLTEwLDkgKzExLDkgQEAKIHN0cnVjdCBuZXRuc19jdCB7CiAJYXRvbWljX3QJCWNvdW50OwogCXVuc2lnbmVkIGludAkJZXhwZWN0X2NvdW50OwotCXN0cnVjdCBobGlzdF9oZWFkCSpoYXNoOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkCSpoYXNoOwogCXN0cnVjdCBobGlzdF9oZWFkCSpleHBlY3RfaGFzaDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZAl1bmNvbmZpcm1lZDsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAl1bmNvbmZpcm1lZDsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX3N0YXQgKnN0YXQ7CiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCmluZGV4IDk3N2Y0ODIuLjJlYjM4MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKQEAgLTU0LDUgKzU0LDE4IEBACiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBydF9zZWNyZXRfdGltZXI7CiAJYXRvbWljX3QgcnRfZ2VuaWQ7CisKKyNpZmRlZiBDT05GSUdfSVBfTVJPVVRFCisJc3RydWN0IHNvY2sJCSptcm91dGVfc2s7CisJc3RydWN0IG1mY19jYWNoZQkqKm1mY19jYWNoZV9hcnJheTsKKwlzdHJ1Y3QgdmlmX2RldmljZQkqdmlmX3RhYmxlOworCWludAkJCW1heHZpZjsKKwlhdG9taWNfdAkJY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW47CisJaW50CQkJbXJvdXRlX2RvX2Fzc2VydDsKKwlpbnQJCQltcm91dGVfZG9fcGltOworI2lmIGRlZmluZWQoQ09ORklHX0lQX1BJTVNNX1YxKSB8fCBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMikKKwlpbnQJCQltcm91dGVfcmVnX3ZpZl9udW07CisjZW5kaWYKKyNlbmRpZgogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0cm9tLmggYi9pbmNsdWRlL25ldC9uZXRyb20uaAppbmRleCBmMDY4NTJiLi4xNTY5NmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRyb20uaAorKysgYi9pbmNsdWRlL25ldC9uZXRyb20uaApAQCAtNTksMTAgKzU5LDYgQEAKICNkZWZpbmUgTlJfTUFYX1dJTkRPV19TSVpFCQkxMjcJCQkvKiBNYXhpbXVtIFdpbmRvdyBBbGxvd2FibGUgLSAxMjcgKi8KICNkZWZpbmUJTlJfTUFYX1BBQ0tFVF9TSVpFCQkyMzYJCQkvKiBNYXhpbXVtIFBhY2tldCBMZW5ndGggLSAyMzYgKi8KIAotc3RydWN0IG5yX3ByaXZhdGUgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwotfTsKLQogc3RydWN0IG5yX3NvY2sgewogCXN0cnVjdCBzb2NrCQlzb2NrOwogCWF4MjVfYWRkcmVzcwkJdXNlcl9hZGRyLCBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oCmluZGV4IDA1N2IwYTguLmQ0M2Y3MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcGhvbmV0LmgKQEAgLTEwNSw3ICsxMDUsNiBAQAogCiBpbnQgcGhvbmV0X3N5c2N0bF9pbml0KHZvaWQpOwogdm9pZCBwaG9uZXRfc3lzY3RsX2V4aXQodm9pZCk7Ci12b2lkIHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpOwogaW50IGlzaV9yZWdpc3Rlcih2b2lkKTsKIHZvaWQgaXNpX3VucmVnaXN0ZXIodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaCBiL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaAppbmRleCBhYTFjNTlhLi41MDU0ZGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKKysrIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCkBAIC0yOCw3ICsyOCw3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgcG5kZXZzOworc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcGhvbmV0X2RldmljZV9saXN0KHN0cnVjdCBuZXQgKm5ldCk7CiAKIHN0cnVjdCBwaG9uZXRfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0zNiw4ICszNiw5IEBACiAJREVDTEFSRV9CSVRNQVAoYWRkcnMsIDY0KTsKIH07CiAKLXZvaWQgcGhvbmV0X2RldmljZV9pbml0KHZvaWQpOworaW50IHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKTsKIHZvaWQgcGhvbmV0X2RldmljZV9leGl0KHZvaWQpOworaW50IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpOwogc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9kZXZpY2VfZ2V0KHN0cnVjdCBuZXQgKm5ldCk7CiAKIGludCBwaG9uZXRfYWRkcmVzc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDQwODJmMzkuLmUzN2ZlMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC04NSw2ICs4NSw3IEBACiAJCXN0cnVjdCBubGF0dHIgKnRhYik7CiBleHRlcm4gdm9pZCBxZGlzY19wdXRfcnRhYihzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdGFiKTsKIGV4dGVybiB2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpOworZXh0ZXJuIHZvaWQgcWRpc2Nfd2Fybl9ub253YyhjaGFyICp0eHQsIHN0cnVjdCBRZGlzYyAqcWRpc2MpOwogCiBleHRlcm4gdm9pZCBfX3FkaXNjX3J1bihzdHJ1Y3QgUWRpc2MgKnEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wc25hcC5oIGIvaW5jbHVkZS9uZXQvcHNuYXAuaAppbmRleCBiMmUwMWNjLi5mZTQ1NmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wc25hcC5oCisrKyBiL2luY2x1ZGUvbmV0L3BzbmFwLmgKQEAgLTEsNyArMSwxMSBAQAogI2lmbmRlZiBfTkVUX1BTTkFQX0gKICNkZWZpbmUgX05FVF9QU05BUF9ICiAKLWV4dGVybiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MsIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpKTsKK2V4dGVybiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKgorcmVnaXN0ZXJfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYywKKwkJICAgICBpbnQgKCpyY3ZmdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KSk7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3NuYXBfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IGY4YzQ3NDIuLjk2NGZmYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtNDIsMjQgKzQyLDE3IEBACiAJaW50IAkJCSgqZW5xdWV1ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpkZXYpOwogCXN0cnVjdCBza19idWZmICoJKCpkZXF1ZXVlKShzdHJ1Y3QgUWRpc2MgKmRldik7CiAJdW5zaWduZWQJCWZsYWdzOwotI2RlZmluZSBUQ1FfRl9CVUlMVElOCTEKLSNkZWZpbmUgVENRX0ZfVEhST1RUTEVECTIKLSNkZWZpbmUgVENRX0ZfSU5HUkVTUwk0CisjZGVmaW5lIFRDUV9GX0JVSUxUSU4JCTEKKyNkZWZpbmUgVENRX0ZfVEhST1RUTEVECQkyCisjZGVmaW5lIFRDUV9GX0lOR1JFU1MJCTQKKyNkZWZpbmUgVENRX0ZfV0FSTl9OT05XQwkoMSA8PCAxNikKIAlpbnQJCQlwYWRkZWQ7CiAJc3RydWN0IFFkaXNjX29wcwkqb3BzOwogCXN0cnVjdCBxZGlzY19zaXplX3RhYmxlCSpzdGFiOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1MzIJCQloYW5kbGU7CiAJdTMyCQkJcGFyZW50OwogCWF0b21pY190CQlyZWZjbnQ7Ci0JdW5zaWduZWQgbG9uZwkJc3RhdGU7Ci0Jc3RydWN0IHNrX2J1ZmYJCSpnc29fc2tiOwotCXN0cnVjdCBza19idWZmX2hlYWQJcTsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpkZXZfcXVldWU7Ci0Jc3RydWN0IFFkaXNjCQkqbmV4dF9zY2hlZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0KLQlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYwlic3RhdHM7Ci0Jc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOwogCXN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0CXJhdGVfZXN0OwogCWludAkJCSgqcmVzaGFwZV9mYWlsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgUWRpc2MgKnEpOwpAQCAtNzAsNiArNjMsMTcgQEAKIAkgKiBhbmQgaXQgd2lsbCBsaXZlIHVudGlsIGJldHRlciBzb2x1dGlvbiB3aWxsIGJlIGludmVudGVkLgogCSAqLwogCXN0cnVjdCBRZGlzYwkJKl9fcGFyZW50OworCXN0cnVjdCBuZXRkZXZfcXVldWUJKmRldl9xdWV1ZTsKKwlzdHJ1Y3QgUWRpc2MJCSpuZXh0X3NjaGVkOworCisJc3RydWN0IHNrX2J1ZmYJCSpnc29fc2tiOworCS8qCisJICogRm9yIHBlcmZvcm1hbmNlIHNha2Ugb24gU01QLCB3ZSBwdXQgaGlnaGx5IG1vZGlmaWVkIGZpZWxkcyBhdCB0aGUgZW5kCisJICovCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlxOworCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljIGJzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CiB9OwogCiBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmggYi9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmgKaW5kZXggMmZlYzNjMy4uYmVmYzhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaApAQCAtNDYsMTQgKzQ2LDE0IEBACiAjaW5jbHVkZSA8bmV0L3NjdHAvc2N0cC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyYy5oPgogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX2NyYzMyYyhfX2JlMzIgY3JjLCB1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoKQorc3RhdGljIGlubGluZSBfX3UzMiBzY3RwX2NyYzMyYyhfX3UzMiBjcmMsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgpCiB7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fYmUzMiljcmMzMmMoKF9fZm9yY2UgdTMyKWNyYywgYnVmZmVyLCBsZW5ndGgpOworCXJldHVybiBjcmMzMmMoY3JjLCBidWZmZXIsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfc3RhcnRfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgpCitzdGF0aWMgaW5saW5lIF9fdTMyIHNjdHBfc3RhcnRfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgpCiB7Ci0JX19iZTMyIGNyYyA9IH5jcHVfdG9fYmUzMigwKTsKKwlfX3UzMiBjcmMgPSB+KF9fdTMyKTA7CiAJX191OCAgemVyb1tzaXplb2YoX191MzIpXSA9IHswfTsKIAogCS8qIE9wdGltaXplIHRoaXMgcm91dGluZSB0byBiZSBTQ1RQIHNwZWNpZmljLCBrbm93aW5nIGhvdwpAQCAtNzIsMTIgKzcyLDEyIEBACiAJcmV0dXJuIGNyYzsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF91cGRhdGVfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgsIF9fYmUzMiBjcmMzMikKK3N0YXRpYyBpbmxpbmUgX191MzIgc2N0cF91cGRhdGVfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgsIF9fdTMyIGNyYzMyKQogewogCXJldHVybiBzY3RwX2NyYzMyYyhjcmMzMiwgYnVmZmVyLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX2VuZF9ja3N1bShfX2JlMzIgY3JjMzIpCitzdGF0aWMgaW5saW5lIF9fbGUzMiBzY3RwX2VuZF9ja3N1bShfX2JlMzIgY3JjMzIpCiB7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fYmUzMil+Y3B1X3RvX2xlMzIoKF9fZm9yY2UgdTMyKWNyYzMyKTsKKwlyZXR1cm4gY3B1X3RvX2xlMzIofmNyYzMyKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKaW5kZXggODg5ODhhYi4uM2I5NjY4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKQEAgLTc3LDcgKzc3LDggQEAKIAlTQ1RQX0NNRF9IQl9USU1FUlNfU1RBUlQsICAgIC8qIFN0YXJ0IHRoZSBoZWFydGJlYXQgdGltZXJzLiAqLwogCVNDVFBfQ01EX0hCX1RJTUVSX1VQREFURSwgICAgLyogVXBkYXRlIGEgaGVhcnRiZWF0IHRpbWVycy4gICovCiAJU0NUUF9DTURfSEJfVElNRVJTX1NUT1AsICAgICAvKiBTdG9wIHRoZSBoZWFydGJlYXQgdGltZXJzLiAgKi8KLQlTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsICAgIC8qIFJlc2V0IHRoZSBzdGF0dXMgb2YgYSB0cmFuc3BvcnQuICovCisJU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQsICAvKiBSZXNldCB0aGUgc3RhdHVzIG9mIGEgdHJhbnNwb3J0LiAqLworCVNDVFBfQ01EX1RSQU5TUE9SVF9JRExFLCAgICAgLyogRG8gbWFuaXB1bGF0aW9ucyBvbiBpZGxlIHRyYW5zcG9ydCAqLwogCVNDVFBfQ01EX1RSQU5TUE9SVF9PTiwgICAgICAgLyogTWFyayB0aGUgdHJhbnNwb3J0IGFzIGFjdGl2ZS4gKi8KIAlTQ1RQX0NNRF9SRVBPUlRfRVJST1IsICAgLyogUGFzcyB0aGlzIGVycm9yIGJhY2sgb3V0IG9mIHRoZSBzbS4gKi8KIAlTQ1RQX0NNRF9SRVBPUlRfQkFEX1RBRywgLyogVmVyaWZpY2F0aW9uIHRhZ3MgZGlkbid0IG1hdGNoLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCBiYmI3NzQyLi45ZjgwYTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtNjIsMTMgKzYyLDYgQEAKICAqICAgYW5kIHdpbGwgY29udGludWUgdG8gZXZvbHZlLgogICovCiAKLQotCi0jaWZkZWYgVEVTVF9GUkFNRQotI3VuZGVmIENPTkZJR19TQ1RQX0RCR19PQkpDTlQKLSN1bmRlZiBDT05GSUdfU1lTQ1RMCi0jZW5kaWYgLyogVEVTVF9GUkFNRSAqLwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KQEAgLTEzOCw2ICsxMzEsOCBAQAogdW5zaWduZWQgaW50IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJcG9sbF90YWJsZSAqd2FpdCk7CiB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgc2N0cF9jb3B5X3NvY2soc3RydWN0IHNvY2sgKm5ld3NrLCBzdHJ1Y3Qgc29jayAqc2ssCisJCSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CiBleHRlcm4gc3RydWN0IHBlcmNwdV9jb3VudGVyIHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDk2NjFkN2IuLjIzZjA4ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yMTgsNiArMjE4LDEwIEBACiAKIAkvKiBGbGFnIHRvIGlkaWNhdGUgaWYgU0NUUC1BVVRIIGlzIGVuYWJsZWQgKi8KIAlpbnQgYXV0aF9lbmFibGU7CisKKwkvKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgY29tcHV0aW5nIGFuZCB2ZXJpZnlpbmcgY2hlY2tzdW0KKwkgKiBpcyBkaXNhYmxlZC4gKi8KKyAgICAgICAgaW50IGNoZWNrc3VtX2Rpc2FibGU7CiB9IHNjdHBfZ2xvYmFsczsKIAogI2RlZmluZSBzY3RwX3J0b19pbml0aWFsCQkoc2N0cF9nbG9iYWxzLnJ0b19pbml0aWFsKQpAQCAtMjUyLDYgKzI1Niw3IEBACiAjZGVmaW5lIHNjdHBfYWRkaXBfbm9hdXRoCQkoc2N0cF9nbG9iYWxzLmFkZGlwX25vYXV0aF9lbmFibGUpCiAjZGVmaW5lIHNjdHBfcHJzY3RwX2VuYWJsZQkJKHNjdHBfZ2xvYmFscy5wcnNjdHBfZW5hYmxlKQogI2RlZmluZSBzY3RwX2F1dGhfZW5hYmxlCQkoc2N0cF9nbG9iYWxzLmF1dGhfZW5hYmxlKQorI2RlZmluZSBzY3RwX2NoZWNrc3VtX2Rpc2FibGUJCShzY3RwX2dsb2JhbHMuY2hlY2tzdW1fZGlzYWJsZSkKIAogLyogU0NUUCBTb2NrZXQgdHlwZTogVURQIG9yIFRDUCBzdHlsZS4gKi8KIHR5cGVkZWYgZW51bSB7CkBAIC05MDUsOCArOTEwLDEwIEBACiAJICoJCXNob3VsZCBiZSBzZXQuIEV2ZXJ5IHRpbWUgdGhlIFJUVAogCSAqCQljYWxjdWxhdGlvbiBjb21wbGV0ZXMgKGkuZS4gdGhlIERBVEEgY2h1bmsKIAkgKgkJaXMgU0FDSydkKSBjbGVhciB0aGlzIGZsYWcuCisJICogaGJfc2VudCA6IGEgZmxhZyB0aGF0IHNpZ25hbHMgdGhhdCB3ZSBoYXZlIGEgcGVuZGluZyBoZWFydGJlYXQuCiAJICovCiAJX191OCBydG9fcGVuZGluZzsKKwlfX3U4IGhiX3NlbnQ7CiAKIAkvKiBGbGFnIHRvIHRyYWNrIHRoZSBjdXJyZW50IGZhc3QgcmVjb3Zlcnkgc3RhdGUgKi8KIAlfX3U4IGZhc3RfcmVjb3Zlcnk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZWVmZWVhZi4uNGJiMWZmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICoJQHNrX2FsbG9jYXRpb246IGFsbG9jYXRpb24gbW9kZQogICAqCUBza19zbmRidWY6IHNpemUgb2Ygc2VuZCBidWZmZXIgaW4gYnl0ZXMKICAgKglAc2tfZmxhZ3M6ICVTT19MSU5HRVIgKGxfb25vZmYpLCAlU09fQlJPQURDQVNULCAlU09fS0VFUEFMSVZFLAotICAqCQkgICAlU09fT09CSU5MSU5FIHNldHRpbmdzCisgICoJCSAgICVTT19PT0JJTkxJTkUgc2V0dGluZ3MsICVTT19USU1FU1RBTVBJTkcgc2V0dGluZ3MKICAgKglAc2tfbm9fY2hlY2s6ICVTT19OT19DSEVDSyBzZXR0aW5nLCB3ZXRoZXIgb3Igbm90IGNoZWNrdXAgcGFja2V0cwogICAqCUBza19yb3V0ZV9jYXBzOiByb3V0ZSBjYXBhYmlsaXRpZXMgKGUuZy4gJU5FVElGX0ZfVFNPKQogICAqCUBza19nc29fdHlwZTogR1NPIHR5cGUgKGUuZy4gJVNLQl9HU09fVENQVjQpCkBAIC00ODgsNiArNDg4LDEzIEBACiAJU09DS19SQ1ZUU1RBTVBOUywgLyogJVNPX1RJTUVTVEFNUE5TIHNldHRpbmcgKi8KIAlTT0NLX0xPQ0FMUk9VVEUsIC8qIHJvdXRlIGxvY2FsbHkgb25seSwgJVNPX0RPTlRST1VURSBzZXR0aW5nICovCiAJU09DS19RVUVVRV9TSFJVTkssIC8qIHdyaXRlIHF1ZXVlIGhhcyBiZWVuIHNocnVuayByZWNlbnRseSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUsICAvKiAlU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSwgICAgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFLCAvKiAlU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUsIC8qICVTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSAqLwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvY2tfY29weV9mbGFncyhzdHJ1Y3Qgc29jayAqbnNrLCBzdHJ1Y3Qgc29jayAqb3NrKQpAQCAtOTQ0LDYgKzk1MSwxMSBAQAogCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCQkgICAgIGludCBub2Jsb2NrLAogCQkJCQkJICAgICBpbnQgKmVycmNvZGUpOworZXh0ZXJuIHN0cnVjdCBza19idWZmIAkJKnNvY2tfYWxsb2Nfc2VuZF9wc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sCisJCQkJCQkgICAgICBpbnQgbm9ibG9jaywKKwkJCQkJCSAgICAgIGludCAqZXJyY29kZSk7CiBleHRlcm4gdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsCiAJCQkgIGdmcF90IHByaW9yaXR5KTsKIGV4dGVybiB2b2lkIHNvY2tfa2ZyZWVfcyhzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKm1lbSwgaW50IHNpemUpOwpAQCAtMTM0MCwxNCArMTM1Miw0NSBAQAogc29ja19yZWN2X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlrdGltZV90IGt0ID0gc2tiLT50c3RhbXA7CisJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMgPSBza2JfaHd0c3RhbXBzKHNrYik7CiAKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkpCisJLyoKKwkgKiBnZW5lcmF0ZSBjb250cm9sIG1lc3NhZ2VzIGlmCisJICogLSByZWNlaXZlIHRpbWUgc3RhbXBpbmcgaW4gc29mdHdhcmUgcmVxdWVzdGVkIChTT0NLX1JDVlRTVEFNUAorCSAqICAgb3IgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpCisJICogLSBzb2Z0d2FyZSB0aW1lIHN0YW1wIGF2YWlsYWJsZSBhbmQgd2FudGVkCisJICogICAoU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpCisJICogLSBoYXJkd2FyZSB0aW1lIHN0YW1wcyBhdmFpbGFibGUgYW5kIHdhbnRlZAorCSAqICAgKFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSBvcgorCSAqICAgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKQorCSAqLworCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKSB8fAorCSAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSB8fAorCSAgICAoa3QudHY2NCAmJiBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkgfHwKKwkgICAgKGh3dHN0YW1wcy0+aHd0c3RhbXAudHY2NCAmJgorCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpKSB8fAorCSAgICAoaHd0c3RhbXBzLT5zeXN0c3RhbXAudHY2NCAmJgorCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpKSkKIAkJX19zb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7CiAJZWxzZQogCQlzay0+c2tfc3RhbXAgPSBrdDsKIH0KIAogLyoqCisgKiBzb2NrX3R4X3RpbWVzdGFtcCAtIGNoZWNrcyB3aGV0aGVyIHRoZSBvdXRnb2luZyBwYWNrZXQgaXMgdG8gYmUgdGltZSBzdGFtcGVkCisgKiBAbXNnOglvdXRnb2luZyBwYWNrZXQKKyAqIEBzazoJCXNvY2tldCBzZW5kaW5nIHRoaXMgcGFja2V0CisgKiBAc2h0eDoJZmlsbGVkIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciB0aW1lIHN0YW1waW5nCisgKgorICogQ3VycmVudGx5IG9ubHkgZGVwZW5kcyBvbiBTT0NLX1RJTUVTVEFNUElORyogZmxhZ3MuIFJldHVybnMgZXJyb3IgY29kZSBpZgorICogcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAqLworZXh0ZXJuIGludCBzb2NrX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csCisJCQkgICAgIHN0cnVjdCBzb2NrICpzaywKKwkJCSAgICAgdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCk7CisKKworLyoqCiAgKiBza19lYXRfc2tiIC0gUmVsZWFzZSBhIHNrYiBpZiBpdCBpcyBubyBsb25nZXIgbmVlZGVkCiAgKiBAc2s6IHNvY2tldCB0byBlYXQgdGhpcyBza2IgZnJvbQogICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBlYXQKQEAgLTE0MTUsNyArMTQ1OCw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWV4dGVybiB2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpOwogZXh0ZXJuIGludCBzb2NrX2dldF90aW1lc3RhbXAoc3RydWN0IHNvY2sgKiwgc3RydWN0IHRpbWV2YWwgX191c2VyICopOwogZXh0ZXJuIGludCBzb2NrX2dldF90aW1lc3RhbXBucyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDIxODIzNWQuLmU1NGM3NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC00ODEsNyArNDgxLDE2IEBACiB9CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpOwotZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFyZ2UpOworZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKTsKKworLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqLworc3RhdGljIGlubGluZSBpbnQgdGNwX2JvdW5kX3RvX2hhbGZfd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBwa3RzaXplKQoreworCWlmICh0cC0+bWF4X3dpbmRvdyAmJiBwa3RzaXplID4gKHRwLT5tYXhfd2luZG93ID4+IDEpKQorCQlyZXR1cm4gbWF4KHRwLT5tYXhfd2luZG93ID4+IDEsIDY4VSAtIHRwLT50Y3BfaGVhZGVyX2xlbik7CisJZWxzZQorCQlyZXR1cm4gcGt0c2l6ZTsKK30KIAogLyogdGNwLmMgKi8KIGV4dGVybiB2b2lkIHRjcF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGNwX2luZm8gKik7CkBAIC02ODUsNiArNjk0LDcgQEAKIGV4dGVybiBpbnQgdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICphbGxvd2VkKTsKIGV4dGVybiBpbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIHRjcF9zbG93X3N0YXJ0KHN0cnVjdCB0Y3Bfc29jayAqdHApOworZXh0ZXJuIHZvaWQgdGNwX2NvbmdfYXZvaWRfYWkoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHcpOwogCiBleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfaW5pdF9jb25nZXN0aW9uX29wczsKIGV4dGVybiB1MzIgdGNwX3Jlbm9fc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKTsKQEAgLTgyMSwxNSArODMxLDE1IEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKLQlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2ssIDEpLCB0cC0+bm9uYWdsZSk7CisJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSwgdHAtPm5vbmFnbGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFjaywgdTMyIHNlcSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfaW5pdF93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc2VxKQogewogCXRwLT5zbmRfd2wxID0gc2VxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3VwZGF0ZV93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrLCB1MzIgc2VxKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF91cGRhdGVfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSkKIHsKIAl0cC0+c25kX3dsMSA9IHNlcTsKIH0KQEAgLTkyNSw3ICs5MzUsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3Jlc2V0KHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0KQogewogCXJ4X29wdC0+ZHNhY2sgPSAwOwotCXJ4X29wdC0+ZWZmX3NhY2tzID0gMDsKIAlyeF9vcHQtPm51bV9zYWNrcyA9IDA7CiB9CiAKQEAgLTk5NywxMSArMTAwNiwyMSBAQAogCXJldHVybiBmaW5fdGltZW91dDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGNwX3Bhd3NfY2hlY2soY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsIGludCByc3QpCitzdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwKKwkJCQkgaW50IHBhd3Nfd2luKQogewotCWlmICgoczMyKShyeF9vcHQtPnJjdl90c3ZhbCAtIHJ4X29wdC0+dHNfcmVjZW50KSA+PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAoZ2V0X3NlY29uZHMoKSA+PSByeF9vcHQtPnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykKKwlpZiAoKHMzMikocnhfb3B0LT50c19yZWNlbnQgLSByeF9vcHQtPnJjdl90c3ZhbCkgPD0gcGF3c193aW4pCisJCXJldHVybiAxOworCWlmICh1bmxpa2VseShnZXRfc2Vjb25kcygpID49IHJ4X29wdC0+dHNfcmVjZW50X3N0YW1wICsgVENQX1BBV1NfMjREQVlTKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGNwX3Bhd3NfcmVqZWN0KGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LAorCQkJCSAgaW50IHJzdCkKK3sKKwlpZiAodGNwX3Bhd3NfY2hlY2socnhfb3B0LCAwKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBSU1Qgc2VnbWVudHMgYXJlIG5vdCByZWNvbW1lbmRlZCB0byBjYXJyeSB0aW1lc3RhbXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaCBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCmluZGV4IDg3NmI2ZjIuLmJmYjI0MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCkBAIC00Niw3ICs0Niw3IEBACiAJCQkJCQkgIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LAogCQkJCQkJICBpbnQgKmhsaW1pdCwgaW50ICp0Y2xhc3MpOwogCi0jZGVmaW5lCQlMT09QQkFDSzRfSVBWNgkJX19jb25zdGFudF9odG9ubCgweDdmMDAwMDA2KQorI2RlZmluZQkJTE9PUEJBQ0s0X0lQVjYJCWNwdV90b19iZTMyKDB4N2YwMDAwMDYpCiAKIC8qCiAgKglhZGRyZXNzIGZhbWlseSBzcGVjaWZpYyBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcC5oIGIvaW5jbHVkZS9uZXQvdWRwLmgKaW5kZXggOTBlNmNlNS4uOTNkYmUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIAorZXh0ZXJuIGludAlpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiBpbnQJdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCiAJCWludCAoKikoY29uc3Qgc3RydWN0IHNvY2sqLGNvbnN0IHN0cnVjdCBzb2NrKikpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oIGIvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAppbmRleCAyMWM1ZDk2Li42NGE3NjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBiYW5kOiBiYW5kIHRoaXMgY2hhbm5lbCBiZWxvbmdzIHRvLgogICogQG1heF9hbnRlbm5hX2dhaW46IG1heGltdW0gYW50ZW5uYSBnYWluIGluIGRCaQogICogQG1heF9wb3dlcjogbWF4aW11bSB0cmFuc21pc3Npb24gcG93ZXIgKGluIGRCbSkKKyAqIEBiZWFjb25fZm91bmQ6IGhlbHBlciB0byByZWd1bGF0b3J5IGNvZGUgdG8gaW5kaWNhdGUgd2hlbiBhIGJlYWNvbgorICoJaGFzIGJlZW4gZm91bmQgb24gdGhpcyBjaGFubmVsLiBVc2UgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbigpCisgKgl0byBlbmFibGUgdGhpcywgdGhpcyBpcyBpcyB1c2VmdWwgb25seSBvbiA1IEdIeiBiYW5kLgogICogQG9yaWdfbWFnOiBpbnRlcm5hbCB1c2UKICAqIEBvcmlnX21wd3I6IGludGVybmFsIHVzZQogICovCkBAIC04MCw2ICs4Myw3IEBACiAJdTMyIGZsYWdzOwogCWludCBtYXhfYW50ZW5uYV9nYWluOwogCWludCBtYXhfcG93ZXI7CisJYm9vbCBiZWFjb25fZm91bmQ7CiAJdTMyIG9yaWdfZmxhZ3M7CiAJaW50IG9yaWdfbWFnLCBvcmlnX21wd3I7CiB9OwpAQCAtMTgxLDEyICsxODUsMjYgQEAKICAqIHN0cnVjdCB3aXBoeSAtIHdpcmVsZXNzIGhhcmR3YXJlIGRlc2NyaXB0aW9uCiAgKiBAaWR4OiB0aGUgd2lwaHkgaW5kZXggYXNzaWduZWQgdG8gdGhpcyBpdGVtCiAgKiBAY2xhc3NfZGV2OiB0aGUgY2xhc3MgZGV2aWNlIHJlcHJlc2VudGluZyAvc3lzL2NsYXNzL2llZWU4MDIxMS88d2lwaHktbmFtZT4KLSAqIEBmd19oYW5kbGVzX3JlZ3VsYXRvcnk6IHRlbGxzIHVzIHRoZSBmaXJtd2FyZSBmb3IgdGhpcyBkZXZpY2UKLSAqIAloYXMgaXRzIG93biByZWd1bGF0b3J5IHNvbHV0aW9uIGFuZCBjYW5ub3QgaWRlbnRpZnkgdGhlCisgKiBAY3VzdG9tX3JlZ3VsYXRvcnk6IHRlbGxzIHVzIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlCisgKiAJaGFzIGl0cyBvd24gY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCBjYW5ub3QgaWRlbnRpZnkgdGhlCiAgKiAJSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGl0IGJlbG9uZ3MgdG8uIFdoZW4gdGhpcyBpcyBlbmFibGVkCiAgKiAJd2Ugd2lsbCBkaXNyZWdhcmQgdGhlIGZpcnN0IHJlZ3VsYXRvcnkgaGludCAod2hlbiB0aGUKICAqIAlpbml0aWF0b3IgaXMgJVJFR0RPTV9TRVRfQllfQ09SRSkuCisgKiBAc3RyaWN0X3JlZ3VsYXRvcnk6IHRlbGxzIHVzIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlIHdpbGwgaWdub3JlCisgKiAJcmVndWxhdG9yeSBkb21haW4gc2V0dGluZ3MgdW50aWwgaXQgZ2V0cyBpdHMgb3duIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJdmlhIGl0cyByZWd1bGF0b3J5X2hpbnQoKS4gQWZ0ZXIgaXRzIGdldHMgaXRzIG93biByZWd1bGF0b3J5IGRvbWFpbgorICogCWl0IHdpbGwgb25seSBhbGxvdyBmdXJ0aGVyIHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHRvIGZ1cnRoZXIKKyAqIAllbmhhbmNlIGNvbXBsaWFuY2UuIEZvciBleGFtcGxlIGlmIGNoYW5uZWwgMTMgYW5kIDE0IGFyZSBkaXNhYmxlZAorICogCWJ5IHRoaXMgcmVndWxhdG9yeSBkb21haW4gbm8gdXNlciByZWd1bGF0b3J5IGRvbWFpbiBjYW4gZW5hYmxlIHRoZXNlCisgKiAJY2hhbm5lbHMgYXQgYSBsYXRlciB0aW1lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdAorICogCWhhdmUgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gZ2F1cmFudGVlZCBmb3IgZnJlcXVlbmNpZXMgb3Igc2V0dGluZ3MKKyAqIAlvdXRzaWRlIG9mIGl0cyByZWd1bGF0b3J5IGRvbWFpbi4KICAqIEByZWdfbm90aWZpZXI6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IG5vdGlmaWNhdGlvbiBjYWxsYmFjaworICogQHJlZ2Q6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IGRvbWFpbiwgaWYgb25lIHdhcyByZXF1ZXN0ZWQgdmlhCisgKiAJdGhlIHJlZ3VsYXRvcnlfaGludCgpIEFQSS4gVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZHJpdmVyCisgKglvbiB0aGUgcmVnX25vdGlmaWVyKCkgaWYgaXQgY2hvb3NlcyB0byBpZ25vcmUgZnV0dXJlCisgKglyZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzIGNhdXNlZCBieSBvdGhlciBkcml2ZXJzLgorICogQHNpZ25hbF90eXBlOiBzaWduYWwgdHlwZSByZXBvcnRlZCBpbiAmc3RydWN0IGNmZzgwMjExX2Jzcy4KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCkBAIC0xOTcsNyArMjE1LDEzIEBACiAJLyogU3VwcG9ydGVkIGludGVyZmFjZSBtb2RlcywgT1IgdG9nZXRoZXIgQklUKE5MODAyMTFfSUZUWVBFXy4uLikgKi8KIAl1MTYgaW50ZXJmYWNlX21vZGVzOwogCi0JYm9vbCBmd19oYW5kbGVzX3JlZ3VsYXRvcnk7CisJYm9vbCBjdXN0b21fcmVndWxhdG9yeTsKKwlib29sIHN0cmljdF9yZWd1bGF0b3J5OworCisJZW51bSBjZmc4MDIxMV9zaWduYWxfdHlwZSBzaWduYWxfdHlwZTsKKworCWludCBic3NfcHJpdl9zaXplOworCXU4IG1heF9zY2FuX3NzaWRzOwogCiAJLyogSWYgbXVsdGlwbGUgd2lwaHlzIGFyZSByZWdpc3RlcmVkIGFuZCB5b3UncmUgaGFuZGVkIGUuZy4KIAkgKiBhIHJlZ3VsYXIgbmV0ZGV2IHdpdGggYXNzaWduZWQgaWVlZTgwMjExX3B0ciwgeW91IHdvbid0CkBAIC0yMDksMTAgKzIzMywxMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAJLyogTGV0cyB1cyBnZXQgYmFjayB0aGUgd2lwaHkgb24gdGhlIGNhbGxiYWNrICovCi0JaW50ICgqcmVnX25vdGlmaWVyKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpOworCWludCAoKnJlZ19ub3RpZmllcikoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogCS8qIGZpZWxkcyBiZWxvdyBhcmUgcmVhZC1vbmx5LCBhc3NpZ25lZCBieSBjZmc4MDIxMSAqLwogCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CisKIAkvKiB0aGUgaXRlbSBpbiAvc3lzL2NsYXNzL2llZWU4MDIxMS8gcG9pbnRzIHRvIHRoaXMsCiAJICogeW91IG5lZWQgdXNlIHNldF93aXBoeV9kZXYoKSAoc2VlIGJlbG93KSAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwpAQCAtMzYxLDcgKzM4OCw3IEBACiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqCiBpZWVlODAyMTFfZ2V0X3Jlc3BvbnNlX3JhdGUoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCi0JCQkgICAgdTY0IGJhc2ljX3JhdGVzLCBpbnQgYml0cmF0ZSk7CisJCQkgICAgdTMyIGJhc2ljX3JhdGVzLCBpbnQgYml0cmF0ZSk7CiAKIC8qKgogICogcmVndWxhdG9yeV9oaW50IC0gZHJpdmVyIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgpAQCAtMzc4LDggKzQwNSwxNSBAQAogICogZG9tYWluIHNob3VsZCBiZSBpbiBvciBieSBwcm92aWRpbmcgYSBjb21wbGV0ZWx5IGJ1aWxkIHJlZ3VsYXRvcnkgZG9tYWluLgogICogSWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbiBJU08vSUVDIDMxNjYgYWxwaGEyIHVzZXJzcGFjZSB3aWxsIGJlIHF1ZXJpZWQKICAqIGZvciBhIHJlZ3VsYXRvcnkgZG9tYWluIHN0cnVjdHVyZSBmb3IgdGhlIHJlc3BlY3RpdmUgY291bnRyeS4KKyAqCisgKiBUaGUgd2lwaHkgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB0byBjZmc4MDIxMSBwcmlvciB0byB0aGlzIGNhbGwuCisgKiBGb3IgY2ZnODAyMTEgZHJpdmVycyB0aGlzIG1lYW5zIHlvdSBtdXN0IGZpcnN0IHVzZSB3aXBoeV9yZWdpc3RlcigpLAorICogZm9yIG1hYzgwMjExIGRyaXZlcnMgeW91IG11c3QgZmlyc3QgdXNlIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpLgorICoKKyAqIERyaXZlcnMgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIGl0cyBwb3NzaWJsZSB5b3UgY2FuIGdldAorICogYW4gLUVOT01FTS4KICAqLwotZXh0ZXJuIHZvaWQgcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGNvbnN0IGNoYXIgKmFscGhhMik7CitleHRlcm4gaW50IHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpOwogCiAvKioKICAqIHJlZ3VsYXRvcnlfaGludF8xMWQgLSBoaW50cyBhIGNvdW50cnkgSUUgYXMgYSByZWd1bGF0b3J5IGRvbWFpbgpAQCAtMzk1LDQgKzQyOSw0NCBAQAogZXh0ZXJuIHZvaWQgcmVndWxhdG9yeV9oaW50XzExZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCXU4ICpjb3VudHJ5X2llLAogCQkJCXU4IGNvdW50cnlfaWVfbGVuKTsKKy8qKgorICogd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkgLSBhcHBseSBhIGN1c3RvbSBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4KKyAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSB3ZSB3YW50IHRvIHByb2Nlc3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIG9uCisgKiBAcmVnZDogdGhlIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbiB0byB1c2UgZm9yIHRoaXMgd2lwaHkKKyAqCisgKiBEcml2ZXJzIGNhbiBzb21ldGltZXMgaGF2ZSBjdXN0b20gcmVndWxhdG9yeSBkb21haW5zIHdoaWNoIGRvIG5vdCBhcHBseQorICogdG8gYSBzcGVjaWZpYyBjb3VudHJ5LiBEcml2ZXJzIGNhbiB1c2UgdGhpcyB0byBhcHBseSBzdWNoIGN1c3RvbSByZWd1bGF0b3J5CisgKiBkb21haW5zLiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gd2lwaHkgcmVnaXN0cmF0aW9uLiBUaGUKKyAqIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbiB3aWxsIGJlIHRydXN0ZWQgY29tcGxldGVseSBhbmQgYXMgc3VjaCBwcmV2aW91cworICogZGVmYXVsdCBjaGFubmVsIHNldHRpbmdzIHdpbGwgYmUgZGlzcmVnYXJkZWQuIElmIG5vIHJ1bGUgaXMgZm91bmQgZm9yIGEKKyAqIGNoYW5uZWwgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZSBjaGFubmVsIHdpbGwgYmUgZGlzYWJsZWQuCisgKi8KK2V4dGVybiB2b2lkIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KAorCXN0cnVjdCB3aXBoeSAqd2lwaHksCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpOworCisvKioKKyAqIGZyZXFfcmVnX2luZm8gLSBnZXQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeQorICogQHdpcGh5OiB0aGUgd2lwaHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGlzIHJ1bGUgZm9yCisgKiBAY2VudGVyX2ZyZXE6IEZyZXF1ZW5jeSBpbiBLSHogZm9yIHdoaWNoIHdlIHdhbnQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IKKyAqIEBiYW5kd2lkdGg6IHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnQgeW91IGhhdmUgaW4gS0h6LCBpZiB5b3UgZG8gbm90IGhhdmUgb25lCisgKiAJeW91IGNhbiBzZXQgdGhpcyB0byAwLiBJZiB0aGlzIGZyZXF1ZW5jeSBpcyBhbGxvd2VkIHdlIHRoZW4gc2V0CisgKiAJdGhpcyB2YWx1ZSB0byB0aGUgbWF4aW11bSBhbGxvd2VkIGJhbmR3aWR0aC4KKyAqIEByZWdfcnVsZTogdGhlIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCB3ZSBoYXZlIGZvciB0aGlzIGZyZXF1ZW5jeQorICoKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgcmVndWxhdG9yeSBydWxlIGZvciBhIHNwZWNpZmljIGZyZXF1ZW5jeSBvbgorICogYSBnaXZlbiB3aXJlbGVzcyBkZXZpY2UuIElmIHRoZSBkZXZpY2UgaGFzIGEgc3BlY2lmaWMgcmVndWxhdG9yeSBkb21haW4KKyAqIGl0IHdhbnRzIHRvIGZvbGxvdyB3ZSByZXNwZWN0IHRoYXQgdW5sZXNzIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNlaXZlZAorICogYW5kIHByb2Nlc3NlZCBhbHJlYWR5LgorICoKKyAqIFJldHVybnMgMCBpZiBpdCB3YXMgYWJsZSB0byBmaW5kIGEgdmFsaWQgcmVndWxhdG9yeSBydWxlIHdoaWNoIGRvZXMKKyAqIGFwcGx5IHRvIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBvdGhlcndpc2UgaXQgcmV0dXJucyBub24temVyby4gSXQgd2lsbAorICogYWxzbyByZXR1cm4gLUVSQU5HRSBpZiB3ZSBkZXRlcm1pbmUgdGhlIGdpdmVuIGNlbnRlcl9mcmVxIGRvZXMgbm90IGV2ZW4gaGF2ZQorICogYSByZWd1bGF0b3J5IHJ1bGUgZm9yIGEgZnJlcXVlbmN5IHJhbmdlIGluIHRoZSBjZW50ZXJfZnJlcSdzIGJhbmQuIFNlZQorICogZnJlcV9pbl9ydWxlX2JhbmQoKSBmb3Igb3VyIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBhIGJhbmQgLS0gdGhpcyBpcyBwdXJlbHkKKyAqIHN1YmplY3RpdmUgYW5kIHJpZ2h0IG5vdyBpdHMgODAyLjExIHNwZWNpZmljLgorICovCitleHRlcm4gaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpOworCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2NtLmggYi9pbmNsdWRlL3JkbWEvaWJfY20uaAppbmRleCBlYzdjNmQ5Li45Mzg4NTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfY20uaApAQCAtMzE0LDEyICszMTQsMTIgQEAKICAqLwogdm9pZCBpYl9kZXN0cm95X2NtX2lkKHN0cnVjdCBpYl9jbV9pZCAqY21faWQpOwogCi0jZGVmaW5lIElCX1NFUlZJQ0VfSURfQUdOX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGMDAwMDAwMDAwMDAwMDBVTEwpCi0jZGVmaW5lIElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMjAwMDAwMDAwMDAwMDAwVUxMKQotI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRAlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDAwMDAwMDAwMTAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSURfTUFTSwlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4RkZGRkZGRkZGRjAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSUQJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAwMDAwMDAwMDAwMTAwMDBVTEwpCi0jZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lEX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGRkZGRkZGRkZGRjAwMDBVTEwpCisjZGVmaW5lIElCX1NFUlZJQ0VfSURfQUdOX01BU0sJY3B1X3RvX2JlNjQoMHhGRjAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAyMDAwMDAwMDAwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lECWNwdV90b19iZTY0KDB4MDAwMDAwMDAwMTAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSURfTUFTSwljcHVfdG9fYmU2NCgweEZGRkZGRkZGRkYwMDAwMDBVTEwpCisjZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lECWNwdV90b19iZTY0KDB4MDAwMDAwMDAwMDAxMDAwMFVMTCkKKyNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSURfTUFTSwljcHVfdG9fYmU2NCgweEZGRkZGRkZGRkZGRjAwMDBVTEwpCiAKIHN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgewogCXU4ICBkYXRhW0lCX0NNX0NPTVBBUkVfU0laRV07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmggYi9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKaW5kZXggNWY2YzQwZi4uZDNiOTQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX21hZC5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaApAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lCUlCX01HTVRfUk1QUF9TVEFUVVNfQUJPUlRfTUFYCQkxMjcKIAogI2RlZmluZSBJQl9RUDAJCTAKLSNkZWZpbmUgSUJfUVAxCQlfX2NvbnN0YW50X2h0b25sKDEpCisjZGVmaW5lIElCX1FQMQkJY3B1X3RvX2JlMzIoMSkKICNkZWZpbmUgSUJfUVAxX1FLRVkJMHg4MDAxMDAwMAogI2RlZmluZSBJQl9RUF9TRVRfUUtFWQkweDgwMDAwMDAwCiAKQEAgLTI5MCw3ICsyOTAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaWJfc2V0X3JtcHBfZmxhZ3Moc3RydWN0IGliX3JtcHBfaGRyICpybXBwX2hkciwgdTggZmxhZ3MpCiB7Ci0Jcm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgPSAocm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgJiAweEYxKSB8CisJcm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgPSAocm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgJiAweEY4KSB8CiAJCQkJICAgICAoZmxhZ3MgJiAweDcpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfc21pLmggYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKaW5kZXggYWFjYTA4Ny4uOThiOTA4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9zbWkuaApAQCAtNjMsMjUgKzYzLDI1IEBACiAJdTgJcmV0dXJuX3BhdGhbSUJfU01QX01BWF9QQVRIX0hPUFNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSUJfU01QX0RJUkVDVElPTgkJCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQorI2RlZmluZSBJQl9TTVBfRElSRUNUSU9OCQkJY3B1X3RvX2JlMTYoMHg4MDAwKQogCiAvKiBTdWJuZXQgbWFuYWdlbWVudCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIElCX1NNUF9BVFRSX05PVElDRQkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0RFU0MJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1NXSVRDSF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIElCX1NNUF9BVFRSX0dVSURfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE0KQotI2RlZmluZSBJQl9TTVBfQVRUUl9QT1JUX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUEtFWV9UQUJMRQkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE2KQotI2RlZmluZSBJQl9TTVBfQVRUUl9TTF9UT19WTF9UQUJMRQkJX19jb25zdGFudF9odG9ucygweDAwMTcpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZMX0FSQl9UQUJMRQkJX19jb25zdGFudF9odG9ucygweDAwMTgpCi0jZGVmaW5lIElCX1NNUF9BVFRSX0xJTkVBUl9GT1JXQVJEX1RBQkxFCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE5KQotI2RlZmluZSBJQl9TTVBfQVRUUl9SQU5ET01fRk9SV0FSRF9UQUJMRQlfX2NvbnN0YW50X2h0b25zKDB4MDAxQSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTUNBU1RfRk9SV0FSRF9UQUJMRQkJX19jb25zdGFudF9odG9ucygweDAwMUIpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1NNX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAyMCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX0RJQUcJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAzMCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTEVEX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAzMSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX01BU0sJCQlfX2NvbnN0YW50X2h0b25zKDB4RkYwMCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTk9USUNFCQkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0RFU0MJCQljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1NNUF9BVFRSX05PREVfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxMSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfU1dJVENIX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTIpCisjZGVmaW5lIElCX1NNUF9BVFRSX0dVSURfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxNCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUE9SVF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDE1KQorI2RlZmluZSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFCQkJY3B1X3RvX2JlMTYoMHgwMDE2KQorI2RlZmluZSBJQl9TTVBfQVRUUl9TTF9UT19WTF9UQUJMRQkJY3B1X3RvX2JlMTYoMHgwMDE3KQorI2RlZmluZSBJQl9TTVBfQVRUUl9WTF9BUkJfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxOCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTElORUFSX0ZPUldBUkRfVEFCTEUJY3B1X3RvX2JlMTYoMHgwMDE5KQorI2RlZmluZSBJQl9TTVBfQVRUUl9SQU5ET01fRk9SV0FSRF9UQUJMRQljcHVfdG9fYmUxNigweDAwMUEpCisjZGVmaW5lIElCX1NNUF9BVFRSX01DQVNUX0ZPUldBUkRfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxQikKKyNkZWZpbmUgSUJfU01QX0FUVFJfU01fSU5GTwkJCWNwdV90b19iZTE2KDB4MDAyMCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX0RJQUcJCQljcHVfdG9fYmUxNigweDAwMzApCisjZGVmaW5lIElCX1NNUF9BVFRSX0xFRF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDMxKQorI2RlZmluZSBJQl9TTVBfQVRUUl9WRU5ET1JfTUFTSwkJCWNwdV90b19iZTE2KDB4RkYwMCkKIAogc3RydWN0IGliX3BvcnRfaW5mbyB7CiAJX19iZTY0IG1rZXk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCmluZGV4IDkzNmUzMzMuLmMxNzkzMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCkBAIC0zODgsNyArMzg4LDcgQEAKIAlJQl9NVUxUSUNBU1RfUVBOID0gMHhmZmZmZmYKIH07CiAKLSNkZWZpbmUgSUJfTElEX1BFUk1JU1NJVkUJX19jb25zdGFudF9odG9ucygweEZGRkYpCisjZGVmaW5lIElCX0xJRF9QRVJNSVNTSVZFCWNwdV90b19iZTE2KDB4RkZGRikKIAogZW51bSBpYl9haF9mbGFncyB7CiAJSUJfQUhfR1JICT0gMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY29lLmgKaW5kZXggZjI3MWQ5Yy4uY2NiM2RiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvZmMvZmNfZmNvZS5oCkBAIC0yNSwxMyArMjUsNiBAQAogICovCiAKIC8qCi0gKiBUaGUgRkNvRSBldGhlcnR5cGUgZXZlbnR1YWxseSBnb2VzIGluIG5ldC9pZl9ldGhlci5oLgotICovCi0jaWZuZGVmIEVUSF9QX0ZDT0UKLSNkZWZpbmUJRVRIX1BfRkNPRQkweDg5MDYJCS8qIEZDT0UgZXRoZXIgdHlwZSAqLwotI2VuZGlmCi0KLS8qCiAgKiBGQ19GQ09FX09VSSBoYXNuJ3QgYmVlbiBzdGFuZGFyZGl6ZWQgeWV0LiAgIFhYWCBUQkQuCiAgKi8KICNpZm5kZWYgRkNfRkNPRV9PVUkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oIGIvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKaW5kZXggMDRkMzRhNy4uNTk1MTEwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKQEAgLTU0LDggKzU0LDcgQEAKICNkZWZpbmUgZnJfZW9mKGZwKQkoZnJfY2IoZnApLT5mcl9lb2YpCiAjZGVmaW5lIGZyX2ZsYWdzKGZwKQkoZnJfY2IoZnApLT5mcl9mbGFncykKICNkZWZpbmUgZnJfbWF4X3BheWxvYWQoZnApCShmcl9jYihmcCktPmZyX21heF9wYXlsb2FkKQotI2RlZmluZSBmcl9jbWQoZnApCShmcl9jYihmcCktPmZyX2NtZCkKLSNkZWZpbmUgZnJfZGlyKGZwKQkoZnJfY21kKGZwKS0+c2NfZGF0YV9kaXJlY3Rpb24pCisjZGVmaW5lIGZyX2ZzcChmcCkJKGZyX2NiKGZwKS0+ZnJfZnNwKQogI2RlZmluZSBmcl9jcmMoZnApCShmcl9jYihmcCktPmZyX2NyYykKIAogc3RydWN0IGZjX2ZyYW1lIHsKQEAgLTY2LDcgKzY1LDcgQEAKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgICpwdHlwZTsKIAlzdHJ1Y3QgZmNfbHBvcnQJKmZyX2RldjsJLyogdHJhbnNwb3J0IGxheWVyIHByaXZhdGUgcG9pbnRlciAqLwogCXN0cnVjdCBmY19zZXEJKmZyX3NlcTsJLyogZm9yIHVzZSB3aXRoIGV4Y2hhbmdlIG1hbmFnZXIgKi8KLQlzdHJ1Y3Qgc2NzaV9jbW5kICpmcl9jbWQ7CS8qIGZvciB1c2Ugb2Ygc2NzaSBjb21tYW5kICovCisJc3RydWN0IGZjX2ZjcF9wa3QgKmZyX2ZzcDsJLyogZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZjcCBJL08gKi8KIAl1MzIJCWZyX2NyYzsKIAl1MTYJCWZyX21heF9wYXlsb2FkOwkvKiBtYXggRkMgcGF5bG9hZCAqLwogCWVudW0gZmNfc29mCWZyX3NvZjsJCS8qIHN0YXJ0IG9mIGZyYW1lIGRlbGltaXRlciAqLwpAQCAtMjE4LDIwICsyMTcsNiBAQAogCXJldHVybiBmY19mcmFtZV9yY3RsKGZwKSA9PSBGQ19SQ1RMX0REX1VOU09MX0NNRDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZjX2ZyYW1lX2lzX3JlYWQoY29uc3Qgc3RydWN0IGZjX2ZyYW1lICpmcCkKLXsKLQlpZiAoZmNfZnJhbWVfaXNfY21kKGZwKSAmJiBmcl9jbWQoZnApKQotCQlyZXR1cm4gZnJfZGlyKGZwKSA9PSBETUFfRlJPTV9ERVZJQ0U7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZmNfZnJhbWVfaXNfd3JpdGUoY29uc3Qgc3RydWN0IGZjX2ZyYW1lICpmcCkKLXsKLQlpZiAoZmNfZnJhbWVfaXNfY21kKGZwKSAmJiBmcl9jbWQoZnApKQotCQlyZXR1cm4gZnJfZGlyKGZwKSA9PSBETUFfVE9fREVWSUNFOwotCXJldHVybiBmYWxzZTsKLX0KLQogLyoKICAqIENoZWNrIGZvciBsZWFrcy4KICAqIFByaW50IHRoZSBmcmFtZSBoZWFkZXIgb2YgYW55IGN1cnJlbnRseSBhbGxvY2F0ZWQgZnJhbWUsIGFzc3VtaW5nIHRoZXJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliZmMuaCBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCmluZGV4IGEyZTEyNmIuLmE3MGVhZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJmYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCkBAIC0yNDUsNiArMjQ1LDcgQEAKIAkgKi8KIAlzdHJ1Y3QgZmNwX2NtbmQgY2RiX2NtZDsKIAlzaXplX3QJCXhmZXJfbGVuOworCXUxNgkJeGZlcl9kZHA7CS8qIHRoaXMgeGZlciBpcyBkZHBlZCAqLwogCXUzMgkJeGZlcl9jb250aWdfZW5kOyAvKiBvZmZzZXQgb2YgZW5kIG9mIGNvbnRpZ3VvdXMgeGZlciAqLwogCXUxNgkJbWF4X3BheWxvYWQ7CS8qIG1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgKi8KIApAQCAtMjY3LDYgKzI2OCwxNSBAQAogCXU4CQlyZWNvdl9yZXRyeTsJLyogY291bnQgb2YgcmVjb3ZlcnkgcmV0cmllcyAqLwogCXN0cnVjdCBmY19zZXEJKnJlY292X3NlcTsJLyogc2VxdWVuY2UgZm9yIFJFQyBvciBTUlIgKi8KIH07CisvKgorICogRkNfRkNQIEhFTFBFUiBGVU5DVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBmY19mY3BfaXNfcmVhZChjb25zdCBzdHJ1Y3QgZmNfZmNwX3BrdCAqZnNwKQoreworCWlmIChmc3AgJiYgZnNwLT5jbWQpCisJCXJldHVybiBmc3AtPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFOworCXJldHVybiBmYWxzZTsKK30KIAogLyoKICAqIFN0cnVjdHVyZSBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIG1hbmFnaW5nIEZpYnJlIENoYW5uZWwgRXhjaGFuZ2VzCkBAIC00MDAsNiArNDEwLDIxIEBACiAJCQkJCXZvaWQgKmFyZywgdW5zaWduZWQgaW50IHRpbWVyX21zZWMpOwogCiAJLyoKKwkgKiBTZXRzIHVwIHRoZSBERFAgY29udGV4dCBmb3IgYSBnaXZlbiBleGNoYW5nZSBpZCBvbiB0aGUgZ2l2ZW4KKwkgKiBzY2F0dGVybGlzdCBpZiBMTEQgc3VwcG9ydHMgRERQIGZvciBsYXJnZSByZWNlaXZlLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAorCSAqLworCWludCAoKmRkcF9zZXR1cCkoc3RydWN0IGZjX2xwb3J0ICpscCwgdTE2IHhpZCwKKwkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnYyk7CisJLyoKKwkgKiBDb21wbGV0ZXMgdGhlIEREUCB0cmFuc2ZlciBhbmQgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGRhdGEgRERQZWQKKwkgKiBmb3IgdGhlIGdpdmVuIGV4Y2hhbmdlIGlkLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAorCSAqLworCWludCAoKmRkcF9kb25lKShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCB1MTYgeGlkKTsKKwkvKgogCSAqIFNlbmQgYSBmcmFtZSB1c2luZyBhbiBleGlzdGluZyBzZXF1ZW5jZSBhbmQgZXhjaGFuZ2UuCiAJICoKIAkgKiBTVEFUVVM6IE9QVElPTkFMCkBAIC02NTQsNiArNjc5LDcgQEAKIAl1MTYJCQlsaW5rX3NwZWVkOwogCXUxNgkJCWxpbmtfc3VwcG9ydGVkX3NwZWVkczsKIAl1MTYJCQlscm9feGlkOwkvKiBtYXggeGlkIGZvciBmY29lIGxybyAqLworCXVuc2lnbmVkIGludAkJbHNvX21heDsJLyogbWF4IGxhcmdlIHNlbmQgc2l6ZSAqLwogCXN0cnVjdCBmY19uc19mdHMJZmN0czsJICAgICAgICAvKiBGQy00IHR5cGUgbWFza3MgKi8KIAlzdHJ1Y3QgZmNfZWxzX3JuaWRfZ2VuCXJuaWRfZ2VuOwkvKiBSTklEIGluZm9ybWF0aW9uICovCiAKQEAgLTgyMSw2ICs4NDcsMTEgQEAKIHZvaWQgZmNfZmNwX2Rlc3Ryb3koc3RydWN0IGZjX2xwb3J0ICopOwogCiAvKgorICogU2V0IHVwIGRpcmVjdC1kYXRhIHBsYWNlbWVudCBmb3IgdGhpcyBJL08gcmVxdWVzdAorICovCit2b2lkIGZjX2ZjcF9kZHBfc2V0dXAoc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCwgdTE2IHhpZCk7CisKKy8qCiAgKiBFTFMvQ1QgaW50ZXJmYWNlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaCBiL2luY2x1ZGUvc2NzaS9saWJmY29lLmgKaW5kZXggOTQxODE4Zi4uYzQxZjdkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmNvZS5oCkBAIC0xMjQsMjQgKzEyNCw2IEBACiAJcmV0dXJuIGJlMTZfdG9fY3B1KHNrYl9mY19oZWFkZXIoc2tiKS0+ZmhfcnhfaWQpOwogfQogCi0vKiBGSVhNRSAtIERNQV9CSURJUkVDVElPTkFMID8gKi8KLSNkZWZpbmUgc2tiX2NiKHNrYikJKChzdHJ1Y3QgZmNvZV9yY3ZfaW5mbyAqKSYoKHNrYiktPmNiWzBdKSkKLSNkZWZpbmUgc2tiX2NtZChza2IpCShza2JfY2Ioc2tiKS0+ZnJfY21kKQotI2RlZmluZSBza2JfZGlyKHNrYikJKHNrYl9jbWQoc2tiKS0+c2NfZGF0YV9kaXJlY3Rpb24pCi1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZjX2lzX3JlYWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpZiAoc2tiX2ZjX2lzX2NtZChza2IpICYmIHNrYl9jbWQoc2tiKSkKLQkJcmV0dXJuIHNrYl9kaXIoc2tiKSA9PSBETUFfRlJPTV9ERVZJQ0U7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZjX2lzX3dyaXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaWYgKHNrYl9mY19pc19jbWQoc2tiKSAmJiBza2JfY21kKHNrYikpCi0JCXJldHVybiBza2JfZGlyKHNrYikgPT0gRE1BX1RPX0RFVklDRTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIGxpYmZjb2UgZnVuY3MgKi8KIGludCBmY29lX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKIHU2NCBmY29lX3d3bl9mcm9tX21hYyh1bnNpZ25lZCBjaGFyIG1hY1tNQVhfQUREUl9MRU5dLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA3MzYwZTE5Li43ZmZhZWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtNDUsMTggKzQ1LDEwIEBACiBzdHJ1Y3QgaXNjc2lfbm9waW47CiBzdHJ1Y3QgZGV2aWNlOwogCi0vKiAjZGVmaW5lIERFQlVHX1NDU0kgKi8KLSNpZmRlZiBERUJVR19TQ1NJCi0jZGVmaW5lIGRlYnVnX3Njc2koZm10Li4uKSBwcmludGsoS0VSTl9JTkZPICJpc2NzaTogIiBmbXQpCi0jZWxzZQotI2RlZmluZSBkZWJ1Z19zY3NpKGZtdC4uLikKLSNlbmRpZgotCiAjZGVmaW5lIElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYCTEyOAkvKiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgSVNDU0lfTUdNVF9DTURTX01BWAkxNQogCi0jZGVmaW5lIElTQ1NJX0RFRl9DTURfUEVSX0xVTgkJMzIKLSNkZWZpbmUgSVNDU0lfTUFYX0NNRF9QRVJfTFVOCQkxMjgKKyNkZWZpbmUgSVNDU0lfREVGX0NNRF9QRVJfTFVOCTMyCiAKIC8qIFRhc2sgTWdtdCBzdGF0ZXMgKi8KIGVudW0gewpAQCAtMzI2LDYgKzMxOCw5IEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAlpbnQJCQludW1fc2Vzc2lvbnM7CiAJaW50CQkJc3RhdGU7CisKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3E7CisJY2hhcgkJCXdvcmtxX25hbWVbMjBdOwogfTsKIAogLyoKQEAgLTM1MSw3ICszNDYsOCBAQAogCQkJCWVudW0gaXNjc2lfaG9zdF9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIGV4dGVybiBpbnQgaXNjc2lfaG9zdF9hZGQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwogZXh0ZXJuIHN0cnVjdCBTY3NpX0hvc3QgKmlzY3NpX2hvc3RfYWxsb2Moc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LAotCQkJCQkgIGludCBkZF9kYXRhX3NpemUsIHVpbnQxNl90IHFkZXB0aCk7CisJCQkJCSAgaW50IGRkX2RhdGFfc2l6ZSwKKwkJCQkJICBib29sIHhtaXRfY2FuX3NsZWVwKTsKIGV4dGVybiB2b2lkIGlzY3NpX2hvc3RfcmVtb3ZlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKIGV4dGVybiB2b2lkIGlzY3NpX2hvc3RfZnJlZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiAKQEAgLTM4MiwxMSArMzc4LDEyIEBACiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fYmluZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKiwgc3RydWN0IGlzY3NpX2Nsc19jb25uICosCiAJCQkgICBpbnQpOwogZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnIpOwotZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCitleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJICBlbnVtIGlzY3NpX2VyciBlcnIpOwogZXh0ZXJuIGludCBpc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAogCQkJCWVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBpc2NzaV9zdXNwZW5kX3R4KHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKK2V4dGVybiB2b2lkIGlzY3NpX2Nvbm5fcXVldWVfd29yayhzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubik7CiAKICNkZWZpbmUgaXNjc2lfY29ubl9wcmludGsocHJlZml4LCBfYywgZm10LCBhLi4uKSBcCiAJaXNjc2lfY2xzX2Nvbm5fcHJpbnRrKHByZWZpeCwgKChzdHJ1Y3QgaXNjc2lfY29ubiAqKV9jKS0+Y2xzX2Nvbm4sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2RfYXR0cmlidXRlcy5oIGIvaW5jbHVkZS9zY3NpL29zZF9hdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4OGE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9vc2RfYXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsMzI3IEBACisjaWZuZGVmIF9fT1NEX0FUVFJJQlVURVNfSF9fCisjZGVmaW5lIF9fT1NEX0FUVFJJQlVURVNfSF9fCisKKyNpbmNsdWRlICJvc2RfcHJvdG9jb2wuaCIKKworLyoKKyAqIENvbnRhaW5zIHR5cGVzIGFuZCBjb25zdGFudHMgdGhhdCBkZWZpbmUgYXR0cmlidXRlIHBhZ2VzIGFuZCBhdHRyaWJ1dGUKKyAqIG51bWJlcnMgYW5kIHRoZWlyIGRhdGEgdHlwZXMuCisgKi8KKworI2RlZmluZSBBVFRSX1NFVChwZywgaWQsIGwsIHB0cikgXAorCXsgLmF0dHJfcGFnZSA9IHBnLCAuYXR0cl9pZCA9IGlkLCAubGVuID0gbCwgLnZhbF9wdHIgPSBwdHIgfQorCisjZGVmaW5lIEFUVFJfREVGKHBnLCBpZCwgbCkgQVRUUl9TRVQocGcsIGlkLCBsLCBOVUxMKQorCisvKiBvc2QtcjEwIDQuNy4zIEF0dHJpYnV0ZXMgcGFnZXMgKi8KK2VudW0geworCU9TRF9BUEFHRV9PQkpFQ1RfRklSU1QJCT0gMHgwLAorCU9TRF9BUEFHRV9PQkpFQ1RfRElSRUNUT1JZCT0gMCwKKwlPU0RfQVBBR0VfT0JKRUNUX0lORk9STUFUSU9OCT0gMSwKKwlPU0RfQVBBR0VfT0JKRUNUX1FVT1RBUwkJPSAyLAorCU9TRF9BUEFHRV9PQkpFQ1RfVElNRVNUQU1QCT0gMywKKwlPU0RfQVBBR0VfT0JKRUNUX0NPTExFQ1RJT05TCT0gNCwKKwlPU0RfQVBBR0VfT0JKRUNUX1NFQ1VSSVRZCT0gNSwKKwlPU0RfQVBBR0VfT0JKRUNUX0xBU1QJCT0gMHgyZmZmZmZmZiwKKworCU9TRF9BUEFHRV9QQVJUSVRJT05fRklSU1QJPSAweDMwMDAwMDAwLAorCU9TRF9BUEFHRV9QQVJUSVRJT05fRElSRUNUT1JZCT0gT1NEX0FQQUdFX1BBUlRJVElPTl9GSVJTVCArIDAsCisJT1NEX0FQQUdFX1BBUlRJVElPTl9JTkZPUk1BVElPTiA9IE9TRF9BUEFHRV9QQVJUSVRJT05fRklSU1QgKyAxLAorCU9TRF9BUEFHRV9QQVJUSVRJT05fUVVPVEFTCT0gT1NEX0FQQUdFX1BBUlRJVElPTl9GSVJTVCArIDIsCisJT1NEX0FQQUdFX1BBUlRJVElPTl9USU1FU1RBTVAJPSBPU0RfQVBBR0VfUEFSVElUSU9OX0ZJUlNUICsgMywKKwlPU0RfQVBBR0VfUEFSVElUSU9OX1NFQ1VSSVRZCT0gT1NEX0FQQUdFX1BBUlRJVElPTl9GSVJTVCArIDUsCisJT1NEX0FQQUdFX1BBUlRJVElPTl9MQVNUCT0gMHg1RkZGRkZGRiwKKworCU9TRF9BUEFHRV9DT0xMRUNUSU9OX0ZJUlNUCT0gMHg2MDAwMDAwMCwKKwlPU0RfQVBBR0VfQ09MTEVDVElPTl9ESVJFQ1RPUlkJPSBPU0RfQVBBR0VfQ09MTEVDVElPTl9GSVJTVCArIDAsCisJT1NEX0FQQUdFX0NPTExFQ1RJT05fSU5GT1JNQVRJT04gPSBPU0RfQVBBR0VfQ09MTEVDVElPTl9GSVJTVCArIDEsCisJT1NEX0FQQUdFX0NPTExFQ1RJT05fVElNRVNUQU1QCT0gT1NEX0FQQUdFX0NPTExFQ1RJT05fRklSU1QgKyAzLAorCU9TRF9BUEFHRV9DT0xMRUNUSU9OX1NFQ1VSSVRZCT0gT1NEX0FQQUdFX0NPTExFQ1RJT05fRklSU1QgKyA1LAorCU9TRF9BUEFHRV9DT0xMRUNUSU9OX0xBU1QJPSAweDhGRkZGRkZGLAorCisJT1NEX0FQQUdFX1JPT1RfRklSU1QJCT0gMHg5MDAwMDAwMCwKKwlPU0RfQVBBR0VfUk9PVF9ESVJFQ1RPUlkJPSBPU0RfQVBBR0VfUk9PVF9GSVJTVCArIDAsCisJT1NEX0FQQUdFX1JPT1RfSU5GT1JNQVRJT04JPSBPU0RfQVBBR0VfUk9PVF9GSVJTVCArIDEsCisJT1NEX0FQQUdFX1JPT1RfUVVPVEFTCQk9IE9TRF9BUEFHRV9ST09UX0ZJUlNUICsgMiwKKwlPU0RfQVBBR0VfUk9PVF9USU1FU1RBTVAJPSBPU0RfQVBBR0VfUk9PVF9GSVJTVCArIDMsCisJT1NEX0FQQUdFX1JPT1RfU0VDVVJJVFkJCT0gT1NEX0FQQUdFX1JPT1RfRklSU1QgKyA1LAorCU9TRF9BUEFHRV9ST09UX0xBU1QJCT0gMHhCRkZGRkZGRiwKKworCU9TRF9BUEFHRV9SRVNFUlZFRF9UWVBFX0ZJUlNUCT0gMHhDMDAwMDAwMCwKKwlPU0RfQVBBR0VfUkVTRVJWRURfVFlQRV9MQVNUCT0gMHhFRkZGRkZGRiwKKworCU9TRF9BUEFHRV9DT01NT05fRklSU1QJCT0gMHhGMDAwMDAwMCwKKwlPU0RfQVBBR0VfQ09NTU9OX0xBU1QJCT0gMHhGRkZGRkZGRSwKKworCU9TRF9BUEFHRV9SRVFVRVNUX0FMTAkJPSAweEZGRkZGRkZGLAorfTsKKworLyogc3ViY2F0ZWdvcmllcyBvZiBhdHRyIHBhZ2VzIHdpdGhpbiBlYWNoIHJhbmdlIGFib3ZlICovCitlbnVtIHsKKwlPU0RfQVBBR0VfU1REX0ZJUlNUCQk9IDB4MCwKKwlPU0RfQVBBR0VfU1REX0RJUkVDVE9SWQkJPSAwLAorCU9TRF9BUEFHRV9TVERfSU5GT1JNQVRJT04JPSAxLAorCU9TRF9BUEFHRV9TVERfUVVPVEFTCQk9IDIsCisJT1NEX0FQQUdFX1NURF9USU1FU1RBTVAJCT0gMywKKwlPU0RfQVBBR0VfU1REX0NPTExFQ1RJT05TCT0gNCwKKwlPU0RfQVBBR0VfU1REX1BPTElDWV9TRUNVUklUWQk9IDUsCisJT1NEX0FQQUdFX1NURF9MQVNUCQk9IDB4MDAwMDAwN0YsCisKKwlPU0RfQVBBR0VfUkVTRVJWRURfRklSU1QJPSAweDAwMDAwMDgwLAorCU9TRF9BUEFHRV9SRVNFUlZFRF9MQVNUCQk9IDB4MDAwMDdGRkYsCisKKwlPU0RfQVBBR0VfT1RIRVJfU1REX0ZJUlNUCT0gMHgwMDAwODAwMCwKKwlPU0RfQVBBR0VfT1RIRVJfU1REX0xBU1QJPSAweDAwMDBFRkZGLAorCisJT1NEX0FQQUdFX1BVQkxJQ19GSVJTVAkJPSAweDAwMDBGMDAwLAorCU9TRF9BUEFHRV9QVUJMSUNfTEFTVAkJPSAweDAwMDBGRkZGLAorCisJT1NEX0FQQUdFX0FQUF9ERUZJTkVEX0ZJUlNUCT0gMHgwMDAxMDAwMCwKKwlPU0RfQVBBR0VfQVBQX0RFRklORURfTEFTVAk9IDB4MUZGRkZGRkYsCisKKwlPU0RfQVBBR0VfVkVORE9SX1NQRUNJRklDX0ZJUlNUCT0gMHgyMDAwMDAwMCwKKwlPU0RfQVBBR0VfVkVORE9SX1NQRUNJRklDX0xBU1QJPSAweDJGRkZGRkZGLAorfTsKKworZW51bSB7CisJT1NEX0FUVFJfUEFHRV9JREVOVElGSUNBVElPTiA9IDAsIC8qIGluIGFsbCBwYWdlcyA0MCBieXRlcyAqLworfTsKKworc3RydWN0IHBhZ2VfaWRlbnRpZmljYXRpb24geworCXU4IHZlbmRvcl9pZGVudGlmaWNhdGlvbls4XTsKKwl1OCBwYWdlX2lkZW50aWZpY2F0aW9uWzMyXTsKK30gIF9fcGFja2VkOworCitzdHJ1Y3Qgb3NkX2F0dHJfcGFnZV9oZWFkZXIgeworCV9fYmUzMiBwYWdlX251bWJlcjsKKwlfX2JlMzIgcGFnZV9sZW5ndGg7Cit9IF9fcGFja2VkOworCisvKiA3LjEuMi44IFJvb3QgSW5mb3JtYXRpb24gYXR0cmlidXRlcyBwYWdlIChPU0RfQVBBR0VfUk9PVF9JTkZPUk1BVElPTikgKi8KK2VudW0geworCU9TRF9BVFRSX1JJX09TRF9TWVNURU1fSUQgICAgICAgICAgICA9IDB4MywgICAvKiAyMCAgICAgICAqLworCU9TRF9BVFRSX1JJX1ZFTkRPUl9JREVOVElGSUNBVElPTiAgICA9IDB4NCwgICAvKiA4ICAgICAgICAqLworCU9TRF9BVFRSX1JJX1BST0RVQ1RfSURFTlRJRklDQVRJT04gICA9IDB4NSwgICAvKiAxNiAgICAgICAqLworCU9TRF9BVFRSX1JJX1BST0RVQ1RfTU9ERUwgICAgICAgICAgICA9IDB4NiwgICAvKiAzMiAgICAgICAqLworCU9TRF9BVFRSX1JJX1BST0RVQ1RfUkVWSVNJT05fTEVWRUwgICA9IDB4NywgICAvKiA0ICAgICAgICAqLworCU9TRF9BVFRSX1JJX1BST0RVQ1RfU0VSSUFMX05VTUJFUiAgICA9IDB4OCwgICAvKiB2YXJpYWJsZSAqLworCU9TRF9BVFRSX1JJX09TRF9OQU1FICAgICAgICAgICAgICAgICA9IDB4OSwgICAvKiB2YXJpYWJsZSAqLworCU9TRF9BVFRSX1JJX1RPVEFMX0NBUEFDSVRZICAgICAgICAgICA9IDB4ODAsICAvKiA4ICAgICAgICAqLworCU9TRF9BVFRSX1JJX1VTRURfQ0FQQUNJVFkgICAgICAgICAgICA9IDB4ODEsICAvKiA4ICAgICAgICAqLworCU9TRF9BVFRSX1JJX05VTUJFUl9PRl9QQVJUSVRJT05TICAgICA9IDB4QzAsICAvKiA4ICAgICAgICAqLworCU9TRF9BVFRSX1JJX0NMT0NLICAgICAgICAgICAgICAgICAgICA9IDB4MTAwLCAvKiA2ICAgICAgICAqLworfTsKKy8qIFJvb3RfSW5mb3JtYXRpb25fYXR0cmlidXRlc19wYWdlIGRvZXMgbm90IGhhdmUgYSBnZXRfcGFnZSBzdHJ1Y3R1cmUgKi8KKworLyogNy4xLjIuOSBQYXJ0aXRpb24gSW5mb3JtYXRpb24gYXR0cmlidXRlcyBwYWdlCisgKiAoT1NEX0FQQUdFX1BBUlRJVElPTl9JTkZPUk1BVElPTikKKyAqLworZW51bSB7CisJT1NEX0FUVFJfUElfUEFSVElUSU9OX0lEICAgICAgICAgICAgPSAweDEsICAgICAvKiA4ICAgICAgICAqLworCU9TRF9BVFRSX1BJX1VTRVJOQU1FICAgICAgICAgICAgICAgID0gMHg5LCAgICAgLyogdmFyaWFibGUgKi8KKwlPU0RfQVRUUl9QSV9VU0VEX0NBUEFDSVRZICAgICAgICAgICA9IDB4ODEsICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfUElfTlVNQkVSX09GX09CSkVDVFMgICAgICAgPSAweEMxLCAgICAvKiA4ICAgICAgICAqLworfTsKKy8qIFBhcnRpdGlvbiBJbmZvcm1hdGlvbiBhdHRyaWJ1dGVzIHBhZ2UgZG9lcyBub3QgaGF2ZSBhIGdldF9wYWdlIHN0cnVjdHVyZSAqLworCisvKiA3LjEuMi4xMCBDb2xsZWN0aW9uIEluZm9ybWF0aW9uIGF0dHJpYnV0ZXMgcGFnZQorICogKE9TRF9BUEFHRV9DT0xMRUNUSU9OX0lORk9STUFUSU9OKQorICovCitlbnVtIHsKKwlPU0RfQVRUUl9DSV9QQVJUSVRJT05fSUQgICAgICAgICAgID0gMHgxLCAgICAgICAvKiA4ICAgICAgICAqLworCU9TRF9BVFRSX0NJX0NPTExFQ1RJT05fT0JKRUNUX0lEICAgPSAweDIsICAgICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfQ0lfVVNFUk5BTUUgICAgICAgICAgICAgICA9IDB4OSwgICAgICAgLyogdmFyaWFibGUgKi8KKwlPU0RfQVRUUl9DSV9VU0VEX0NBUEFDSVRZICAgICAgICAgID0gMHg4MSwgICAgICAvKiA4ICAgICAgICAqLworfTsKKy8qIENvbGxlY3Rpb24gSW5mb3JtYXRpb24gYXR0cmlidXRlcyBwYWdlIGRvZXMgbm90IGhhdmUgYSBnZXRfcGFnZSBzdHJ1Y3R1cmUgKi8KKworLyogNy4xLjIuMTEgVXNlciBPYmplY3QgSW5mb3JtYXRpb24gYXR0cmlidXRlcyBwYWdlCisgKiAoT1NEX0FQQUdFX09CSkVDVF9JTkZPUk1BVElPTikKKyAqLworZW51bSB7CisJT1NEX0FUVFJfT0lfUEFSVElUSU9OX0lEICAgICAgICAgPSAweDEsICAgICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfT0lfT0JKRUNUX0lEICAgICAgICAgICAgPSAweDIsICAgICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfT0lfVVNFUk5BTUUgICAgICAgICAgICAgPSAweDksICAgICAgIC8qIHZhcmlhYmxlICovCisJT1NEX0FUVFJfT0lfVVNFRF9DQVBBQ0lUWSAgICAgICAgPSAweDgxLCAgICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfT0lfTE9HSUNBTF9MRU5HVEggICAgICAgPSAweDgyLCAgICAgIC8qIDggICAgICAgICovCit9OworLyogT2JqZWN0IEluZm9ybWF0aW9uIGF0dHJpYnV0ZXMgcGFnZSBkb2VzIG5vdCBoYXZlIGEgZ2V0X3BhZ2Ugc3RydWN0dXJlICovCisKKy8qIDcuMS4yLjEyIFJvb3QgUXVvdGFzIGF0dHJpYnV0ZXMgcGFnZSAoT1NEX0FQQUdFX1JPT1RfUVVPVEFTKSAqLworZW51bSB7CisJT1NEX0FUVFJfUlFfREVGQVVMVF9NQVhJTVVNX1VTRVJfT0JKRUNUX0xFTkdUSCAgICAgPSAweDEsICAgICAgLyogOCAgKi8KKwlPU0RfQVRUUl9SUV9QQVJUSVRJT05fQ0FQQUNJVFlfUVVPVEEgICAgICAgICAgICAgICA9IDB4MTAwMDEsICAvKiA4ICAqLworCU9TRF9BVFRSX1JRX1BBUlRJVElPTl9PQkpFQ1RfQ09VTlQgICAgICAgICAgICAgICAgID0gMHgxMDAwMiwgIC8qIDggICovCisJT1NEX0FUVFJfUlFfUEFSVElUSU9OX0NPTExFQ1RJT05TX1BFUl9VU0VSX09CSkVDVCAgPSAweDEwMDgxLCAgLyogNCAgKi8KKwlPU0RfQVRUUl9SUV9QQVJUSVRJT05fQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMDIsICAvKiA4ICAqLworfTsKKworc3RydWN0IFJvb3RfUXVvdGFzX2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9UisyLCBzaXplPTB4MjQgKi8KKwlfX2JlNjQgZGVmYXVsdF9tYXhpbXVtX3VzZXJfb2JqZWN0X2xlbmd0aDsKKwlfX2JlNjQgcGFydGl0aW9uX2NhcGFjaXR5X3F1b3RhOworCV9fYmU2NCBwYXJ0aXRpb25fb2JqZWN0X2NvdW50OworCV9fYmU2NCBwYXJ0aXRpb25fY29sbGVjdGlvbnNfcGVyX3VzZXJfb2JqZWN0OworCV9fYmU2NCBwYXJ0aXRpb25fY291bnQ7Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMTMgUGFydGl0aW9uIFF1b3RhcyBhdHRyaWJ1dGVzIHBhZ2UgKE9TRF9BUEFHRV9QQVJUSVRJT05fUVVPVEFTKSovCitlbnVtIHsKKwlPU0RfQVRUUl9QUV9ERUZBVUxUX01BWElNVU1fVVNFUl9PQkpFQ1RfTEVOR1RIICA9IDB4MSwgICAgICAgIC8qIDggKi8KKwlPU0RfQVRUUl9QUV9DQVBBQ0lUWV9RVU9UQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTAwMDEsICAgIC8qIDggKi8KKwlPU0RfQVRUUl9QUV9PQkpFQ1RfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTAwMDIsICAgIC8qIDggKi8KKwlPU0RfQVRUUl9QUV9DT0xMRUNUSU9OU19QRVJfVVNFUl9PQkpFQ1QgICAgICAgICA9IDB4MTAwODEsICAgIC8qIDQgKi8KK307CisKK3N0cnVjdCBQYXJ0aXRpb25fUXVvdGFzX2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9UCsyLCBzaXplPTB4MUMgKi8KKwlfX2JlNjQgZGVmYXVsdF9tYXhpbXVtX3VzZXJfb2JqZWN0X2xlbmd0aDsKKwlfX2JlNjQgY2FwYWNpdHlfcXVvdGE7CisJX19iZTY0IG9iamVjdF9jb3VudDsKKwlfX2JlNjQgY29sbGVjdGlvbnNfcGVyX3VzZXJfb2JqZWN0OworfSAgX19wYWNrZWQ7CisKKy8qIDcuMS4yLjE0IFVzZXIgT2JqZWN0IFF1b3RhcyBhdHRyaWJ1dGVzIHBhZ2UgKE9TRF9BUEFHRV9PQkpFQ1RfUVVPVEFTKSAqLworZW51bSB7CisJT1NEX0FUVFJfT1FfTUFYSU1VTV9MRU5HVEggID0gMHgxLCAgICAgICAgLyogOCAqLworfTsKKworc3RydWN0IE9iamVjdF9RdW90YXNfYXR0cmlidXRlc19wYWdlIHsKKwlzdHJ1Y3Qgb3NkX2F0dHJfcGFnZV9oZWFkZXIgaGRyOyAvKiBpZD1VKzIsIHNpemU9MHg4ICovCisJX19iZTY0IG1heGltdW1fbGVuZ3RoOworfSAgX19wYWNrZWQ7CisKKy8qIDcuMS4yLjE1IFJvb3QgVGltZXN0YW1wcyBhdHRyaWJ1dGVzIHBhZ2UgKE9TRF9BUEFHRV9ST09UX1RJTUVTVEFNUCkgKi8KK2VudW0geworCU9TRF9BVFRSX1JUX0FUVFJJQlVURVNfQUNDRVNTRURfVElNRSAgPSAweDIsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfUlRfQVRUUklCVVRFU19NT0RJRklFRF9USU1FICA9IDB4MywgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9SVF9USU1FU1RBTVBfQllQQVNTICAgICAgICAgID0gMHhGRkZGRkZGRSwgLyogMSAqLworfTsKKworc3RydWN0IHJvb3RfdGltZXN0YW1wc19hdHRyaWJ1dGVzX3BhZ2UgeworCXN0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciBoZHI7IC8qIGlkPVIrMywgc2l6ZT0weEQgKi8KKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBhdHRyaWJ1dGVzX2FjY2Vzc2VkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgYXR0cmlidXRlc19tb2RpZmllZF90aW1lOworCXU4IHRpbWVzdGFtcF9ieXBhc3M7Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMTYgUGFydGl0aW9uIFRpbWVzdGFtcHMgYXR0cmlidXRlcyBwYWdlCisgKiAoT1NEX0FQQUdFX1BBUlRJVElPTl9USU1FU1RBTVApCisgKi8KK2VudW0geworCU9TRF9BVFRSX1BUX0NSRUFURURfVElNRSAgICAgICAgICAgICAgPSAweDEsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfUFRfQVRUUklCVVRFU19BQ0NFU1NFRF9USU1FICA9IDB4MiwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9QVF9BVFRSSUJVVEVTX01PRElGSUVEX1RJTUUgID0gMHgzLCAgICAgICAgLyogNiAqLworCU9TRF9BVFRSX1BUX0RBVEFfQUNDRVNTRURfVElNRSAgICAgICAgPSAweDQsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfUFRfREFUQV9NT0RJRklFRF9USU1FICAgICAgICA9IDB4NSwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9QVF9USU1FU1RBTVBfQllQQVNTICAgICAgICAgID0gMHhGRkZGRkZGRSwgLyogMSAqLworfTsKKworc3RydWN0IHBhcnRpdGlvbl90aW1lc3RhbXBzX2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9UCszLCBzaXplPTB4MUYgKi8KKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBjcmVhdGVkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgYXR0cmlidXRlc19hY2Nlc3NlZF90aW1lOworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGF0dHJpYnV0ZXNfbW9kaWZpZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBkYXRhX2FjY2Vzc2VkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgZGF0YV9tb2RpZmllZF90aW1lOworCXU4IHRpbWVzdGFtcF9ieXBhc3M7Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMTcvMTggQ29sbGVjdGlvbi9PYmplY3QgVGltZXN0YW1wcyBhdHRyaWJ1dGVzIHBhZ2UKKyAqIChPU0RfQVBBR0VfQ09MTEVDVElPTl9USU1FU1RBTVAvT1NEX0FQQUdFX09CSkVDVF9USU1FU1RBTVApCisgKi8KK2VudW0geworCU9TRF9BVFRSX09UX0NSRUFURURfVElNRSAgICAgICAgICAgICAgPSAweDEsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfT1RfQVRUUklCVVRFU19BQ0NFU1NFRF9USU1FICA9IDB4MiwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9PVF9BVFRSSUJVVEVTX01PRElGSUVEX1RJTUUgID0gMHgzLCAgICAgICAgLyogNiAqLworCU9TRF9BVFRSX09UX0RBVEFfQUNDRVNTRURfVElNRSAgICAgICAgPSAweDQsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfT1RfREFUQV9NT0RJRklFRF9USU1FICAgICAgICA9IDB4NSwgICAgICAgIC8qIDYgKi8KK307CisKKy8qIHNhbWUgZm9yIGNvbGxlY3Rpb24gKi8KK3N0cnVjdCBvYmplY3RfdGltZXN0YW1wc19hdHRyaWJ1dGVzX3BhZ2UgeworCXN0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciBoZHI7IC8qIGlkPUMrMy8zLCBzaXplPTB4MUUgKi8KKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBjcmVhdGVkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgYXR0cmlidXRlc19hY2Nlc3NlZF90aW1lOworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGF0dHJpYnV0ZXNfbW9kaWZpZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBkYXRhX2FjY2Vzc2VkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgZGF0YV9tb2RpZmllZF90aW1lOworfSAgX19wYWNrZWQ7CisKKy8qIDcuMS4yLjE5IENvbGxlY3Rpb25zIGF0dHJpYnV0ZXMgcGFnZSAqLworLyogVEJEICovCisKKy8qIDcuMS4yLjIwIFJvb3QgUG9saWN5L1NlY3VyaXR5IGF0dHJpYnV0ZXMgcGFnZSAoT1NEX0FQQUdFX1JPT1RfU0VDVVJJVFkpICovCitlbnVtIHsKKwlPU0RfQVRUUl9SU19ERUZBVUxUX1NFQ1VSSVRZX01FVEhPRCAgICAgICAgICAgPSAweDEsICAgICAgIC8qIDEgICAgICAqLworCU9TRF9BVFRSX1JTX09MREVTVF9WQUxJRF9OT05DRV9MSU1JVCAgICAgICAgICA9IDB4MiwgICAgICAgLyogNiAgICAgICovCisJT1NEX0FUVFJfUlNfTkVXRVNUX1ZBTElEX05PTkNFX0xJTUlUICAgICAgICAgID0gMHgzLCAgICAgICAvKiA2ICAgICAgKi8KKwlPU0RfQVRUUl9SU19QQVJUSVRJT05fREVGQVVMVF9TRUNVUklUWV9NRVRIT0QgPSAweDYsICAgICAgIC8qIDEgICAgICAqLworCU9TRF9BVFRSX1JTX1NVUFBPUlRFRF9TRUNVUklUWV9NRVRIT0RTICAgICAgICA9IDB4NywgICAgICAgLyogMiAgICAgICovCisJT1NEX0FUVFJfUlNfQURKVVNUQUJMRV9DTE9DSyAgICAgICAgICAgICAgICAgID0gMHg5LCAgICAgICAvKiA2ICAgICAgKi8KKwlPU0RfQVRUUl9SU19NQVNURVJfS0VZX0lERU5USUZJRVIgICAgICAgICAgICAgPSAweDdGRkQsICAgIC8qIDAgb3IgNyAqLworCU9TRF9BVFRSX1JTX1JPT1RfS0VZX0lERU5USUZJRVIgICAgICAgICAgICAgICA9IDB4N0ZGRSwgICAgLyogMCBvciA3ICovCisJT1NEX0FUVFJfUlNfU1VQUE9SVEVEX0lOVEVHUklUWV9BTEdPUklUSE1fMCAgID0gMHg4MDAwMDAwMCwvKiAxLCh4MTYpKi8KKwlPU0RfQVRUUl9SU19TVVBQT1JURURfREhfR1JPVVBfMCAgICAgICAgICAgICAgPSAweDgwMDAwMDEwLC8qIDEsKHgxNikqLworfTsKKworc3RydWN0IHJvb3Rfc2VjdXJpdHlfYXR0cmlidXRlc19wYWdlIHsKKwlzdHJ1Y3Qgb3NkX2F0dHJfcGFnZV9oZWFkZXIgaGRyOyAvKiBpZD1SKzUsIHNpemU9MHgzRiAqLworCXU4IGRlZmF1bHRfc2VjdXJpdHlfbWV0aG9kOworCXU4IHBhcnRpdGlvbl9kZWZhdWx0X3NlY3VyaXR5X21ldGhvZDsKKwlfX2JlMTYgc3VwcG9ydGVkX3NlY3VyaXR5X21ldGhvZHM7CisJdTggbWtpX3ZhbGlkX3JraV92YWxpZDsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBvbGRlc3RfdmFsaWRfbm9uY2VfbGltaXQ7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgbmV3ZXN0X3ZhbGlkX25vbmNlX2xpbWl0OworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGFkanVzdGFibGVfY2xvY2s7CisJdTggbWFzdGVyX2tleV9pZGVudGlmaWVyWzMyLTI1XTsKKwl1OCByb290X2tleV9pZGVudGlmaWVyWzM5LTMyXTsKKwl1OCBzdXBwb3J0ZWRfaW50ZWdyaXR5X2FsZ29yaXRobVsxNl07CisJdTggc3VwcG9ydGVkX2RoX2dyb3VwWzE2XTsKK30gIF9fcGFja2VkOworCisvKiA3LjEuMi4yMSBQYXJ0aXRpb24gUG9saWN5L1NlY3VyaXR5IGF0dHJpYnV0ZXMgcGFnZQorICogKE9TRF9BUEFHRV9QQVJUSVRJT05fU0VDVVJJVFkpCisgKi8KK2VudW0geworCU9TRF9BVFRSX1BTX0RFRkFVTFRfU0VDVVJJVFlfTUVUSE9EICAgICAgICA9IDB4MSwgICAgICAgIC8qIDEgICAgICAqLworCU9TRF9BVFRSX1BTX09MREVTVF9WQUxJRF9OT05DRSAgICAgICAgICAgICA9IDB4MiwgICAgICAgIC8qIDYgICAgICAqLworCU9TRF9BVFRSX1BTX05FV0VTVF9WQUxJRF9OT05DRSAgICAgICAgICAgICA9IDB4MywgICAgICAgIC8qIDYgICAgICAqLworCU9TRF9BVFRSX1BTX1JFUVVFU1RfTk9OQ0VfTElTVF9ERVBUSCAgICAgICA9IDB4NCwgICAgICAgIC8qIDIgICAgICAqLworCU9TRF9BVFRSX1BTX0ZST1pFTl9XT1JLSU5HX0tFWV9CSVRfTUFTSyAgICA9IDB4NSwgICAgICAgIC8qIDIgICAgICAqLworCU9TRF9BVFRSX1BTX1BBUlRJVElPTl9LRVlfSURFTlRJRklFUiAgICAgICA9IDB4N0ZGRiwgICAgIC8qIDAgb3IgNyAqLworCU9TRF9BVFRSX1BTX1dPUktJTkdfS0VZX0lERU5USUZJRVJfRklSU1QgICA9IDB4ODAwMCwgICAgIC8qIDAgb3IgNyAqLworCU9TRF9BVFRSX1BTX1dPUktJTkdfS0VZX0lERU5USUZJRVJfTEFTVCAgICA9IDB4ODAwRiwgICAgIC8qIDAgb3IgNyAqLworCU9TRF9BVFRSX1BTX1BPTElDWV9BQ0NFU1NfVEFHICAgICAgICAgICAgICA9IDB4NDAwMDAwMDEsIC8qIDQgICAgICAqLworCU9TRF9BVFRSX1BTX1VTRVJfT0JKRUNUX1BPTElDWV9BQ0NFU1NfVEFHICA9IDB4NDAwMDAwMDIsIC8qIDQgICAgICAqLworfTsKKworc3RydWN0IHBhcnRpdGlvbl9zZWN1cml0eV9hdHRyaWJ1dGVzX3BhZ2UgeworCXN0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciBoZHI7IC8qIGlkPXArNSwgc2l6ZT0weDhmICovCisJdTggcmVzZXJ2ZWRbM107CisJdTggZGVmYXVsdF9zZWN1cml0eV9tZXRob2Q7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgb2xkZXN0X3ZhbGlkX25vbmNlOworCXN0cnVjdCBvc2RfdGltZXN0YW1wIG5ld2VzdF92YWxpZF9ub25jZTsKKwlfX2JlMTYgcmVxdWVzdF9ub25jZV9saXN0X2RlcHRoOworCV9fYmUxNiBmcm96ZW5fd29ya2luZ19rZXlfYml0X21hc2s7CisJX19iZTMyIHBvbGljeV9hY2Nlc3NfdGFnOworCV9fYmUzMiB1c2VyX29iamVjdF9wb2xpY3lfYWNjZXNzX3RhZzsKKwl1OCBwa2lfdmFsaWQ7CisJX19iZTE2IHdraV8wMF8wZl92bGQ7CisJc3RydWN0IG9zZF9rZXlfaWRlbnRpZmllciBwYXJ0aXRpb25fa2V5X2lkZW50aWZpZXI7CisJc3RydWN0IG9zZF9rZXlfaWRlbnRpZmllciB3b3JraW5nX2tleV9pZGVudGlmaWVyc1sxNl07Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMjIvMjMgQ29sbGVjdGlvbi9PYmplY3QgUG9saWN5LVNlY3VyaXR5IGF0dHJpYnV0ZXMgcGFnZQorICogKE9TRF9BUEFHRV9DT0xMRUNUSU9OX1NFQ1VSSVRZL09TRF9BUEFHRV9PQkpFQ1RfU0VDVVJJVFkpCisgKi8KK2VudW0geworCU9TRF9BVFRSX09TX1BPTElDWV9BQ0NFU1NfVEFHICAgICAgICAgICAgICA9IDB4NDAwMDAwMDEsIC8qIDQgICAgICAqLworfTsKKworc3RydWN0IG9iamVjdF9zZWN1cml0eV9hdHRyaWJ1dGVzX3BhZ2UgeworCXN0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciBoZHI7IC8qIGlkPUMrNS81LCBzaXplPTQgKi8KKwlfX2JlMzIgcG9saWN5X2FjY2Vzc190YWc7Cit9ICBfX3BhY2tlZDsKKworI2VuZGlmIC8qbmRlZiBfX09TRF9BVFRSSUJVVEVTX0hfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oIGIvaW5jbHVkZS9zY3NpL29zZF9pbml0aWF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjRkOTYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL29zZF9pbml0aWF0b3IuaApAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqIG9zZF9pbml0aWF0b3IuaCAtIE9TRCBpbml0aWF0b3IgQVBJIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKiAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqCisgKi8KKyNpZm5kZWYgX19PU0RfSU5JVElBVE9SX0hfXworI2RlZmluZSBfX09TRF9JTklUSUFUT1JfSF9fCisKKyNpbmNsdWRlICJvc2RfcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJvc2RfdHlwZXMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCisvKiBOb3RlOiAiTkkiIGluIGNvbW1lbnRzIGJlbG93IG1lYW5zICJOb3QgSW1wbGVtZW50ZWQgeWV0IiAqLworCisvKiBDb25maWd1cmUgb2YgY29kZToKKyAqICN1bmRlZiBpZiB5b3UgKmRvbid0KiB3YW50IE9TRCB2MSBzdXBwb3J0IGluIHJ1bnRpbWUuCisgKiBJZiAjZGVmaW5lZCB0aGUgaW5pdGlhdG9yIHdpbGwgZHluYW1pY2FsbHkgY29uZmlndXJlIHRvIGVuY29kZSBPU0QgdjEKKyAqIENEQidzIGlmIHRoZSB0YXJnZXQgaXMgZGV0ZWN0ZWQgdG8gYmUgT1NEIHYxIG9ubHkuCisgKiBPU0QgdjIgb25seSBjb21tYW5kcywgb3B0aW9ucywgYW5kIGF0dHJpYnV0ZXMgd2lsbCBiZSBpZ25vcmVkIGlmIHRhcmdldAorICogaXMgdjEgb25seS4KKyAqIElmICNkZWZpbmVkIHdpbGwgcmVzdWx0IGluIGJpZ2dlci9zbG93ZXIgY29kZSAoT0sgU2xvd2VyIG1heWJlIG5vdCkKKyAqIFE6IFNob3VsZCB0aGlzIGJlIENPTkZJR19TQ1NJX09TRF9WRVIxX1NVUFBPUlQgYW5kIHNldCBmcm9tIEtjb25maWc/CisgKi8KKyNkZWZpbmUgT1NEX1ZFUjFfU1VQUE9SVCB5CisKK2VudW0gb3NkX3N0ZF92ZXJzaW9uIHsKKwlPU0RfVkVSX05PTkUgPSAwLAorCU9TRF9WRVIxID0gMSwKKwlPU0RfVkVSMiA9IDIsCit9OworCisvKgorICogT2JqZWN0LWJhc2VkIFN0b3JhZ2UgRGV2aWNlLgorICogVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbiBPU0QgZGV2aWNlLgorICogSXQgaXMgbm90IGEgZnVsbCBsaW51eCBkZXZpY2UgaW4gYW55IHdheS4gSXQgaXMgb25seQorICogYSBwbGFjZSB0byBoYW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBMaW51eAorICogcmVxdWVzdCBRIGFuZCBzb21lIGRlZmF1bHQgcHJvcGVydGllcy4KKyAqLworc3RydWN0IG9zZF9kZXYgeworCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2U7CisJdW5zaWduZWQgZGVmX3RpbWVvdXQ7CisKKyNpZmRlZiBPU0RfVkVSMV9TVVBQT1JUCisJZW51bSBvc2Rfc3RkX3ZlcnNpb24gdmVyc2lvbjsKKyNlbmRpZgorfTsKKworLyogUmV0cmlldmUvcmV0dXJuIG9zZF9kZXYocykgZm9yIHVzZSBieSBLZXJuZWwgY2xpZW50cyAqLworc3RydWN0IG9zZF9kZXYgKm9zZHVsZF9wYXRoX2xvb2t1cChjb25zdCBjaGFyICpkZXZfbmFtZSk7IC8qVXNlIElTX0VSUi9FUlJfUFRSKi8KK3ZvaWQgb3NkdWxkX3B1dF9kZXZpY2Uoc3RydWN0IG9zZF9kZXYgKm9kKTsKKworLyogQWRkL3JlbW92ZSB0ZXN0IGlvY3RscyBmcm9tIGV4dGVybmFsIG1vZHVsZXMgKi8KK3R5cGVkZWYgaW50IChkb190ZXN0X2ZuKShzdHJ1Y3Qgb3NkX2RldiAqb2QsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworaW50IG9zZHVsZF9yZWdpc3Rlcl90ZXN0KHVuc2lnbmVkIGlvY3RsLCBkb190ZXN0X2ZuICpkb190ZXN0KTsKK3ZvaWQgb3NkdWxkX3VucmVnaXN0ZXJfdGVzdCh1bnNpZ25lZCBpb2N0bCk7CisKKy8qIFRoZXNlIGFyZSBjYWxsZWQgYnkgdWxkIGF0IHByb2JlIHRpbWUgKi8KK3ZvaWQgb3NkX2Rldl9pbml0KHN0cnVjdCBvc2RfZGV2ICpvZCwgc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSk7Cit2b2lkIG9zZF9kZXZfZmluaShzdHJ1Y3Qgb3NkX2RldiAqb2QpOworCisvKiBzb21lIGhpIGxldmVsIGRldmljZSBvcGVyYXRpb25zICovCitpbnQgb3NkX2F1dG9fZGV0ZWN0X3ZlcihzdHJ1Y3Qgb3NkX2RldiAqb2QsIHZvaWQgKmNhcHMpOyAgICAvKiBHRlBfS0VSTkVMICovCisKKy8qIHdlIG1pZ2h0IHdhbnQgdG8gdXNlIGZ1bmN0aW9uIHZlY3RvciBpbiB0aGUgZnV0dXJlICovCitzdGF0aWMgaW5saW5lIHZvaWQgb3NkX2Rldl9zZXRfdmVyKHN0cnVjdCBvc2RfZGV2ICpvZCwgZW51bSBvc2Rfc3RkX3ZlcnNpb24gdikKK3sKKyNpZmRlZiBPU0RfVkVSMV9TVVBQT1JUCisJb2QtPnZlcnNpb24gPSB2OworI2VuZGlmCit9CisKK3N0cnVjdCBvc2RfcmVxdWVzdDsKK3R5cGVkZWYgdm9pZCAob3NkX3JlcV9kb25lX2ZuKShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwcml2YXRlKTsKKworc3RydWN0IG9zZF9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgb3NkX2NkYiBjZGI7CisJc3RydWN0IG9zZF9kYXRhX291dF9pbnRlZ3JpdHlfaW5mbyBvdXRfZGF0YV9pbnRlZzsKKwlzdHJ1Y3Qgb3NkX2RhdGFfaW5faW50ZWdyaXR5X2luZm8gaW5fZGF0YV9pbnRlZzsKKworCXN0cnVjdCBvc2RfZGV2ICpvc2RfZGV2OworCXN0cnVjdCByZXF1ZXN0ICpyZXF1ZXN0OworCisJc3RydWN0IF9vc2RfcmVxX2RhdGFfc2VnbWVudCB7CisJCXZvaWQgKmJ1ZmY7CisJCXVuc2lnbmVkIGFsbG9jX3NpemU7IC8qIDAgaGVyZSBtZWFuczogZG9uJ3QgY2FsbCBrZnJlZSAqLworCQl1bnNpZ25lZCB0b3RhbF9ieXRlczsKKwl9IHNldF9hdHRyLCBlbmNfZ2V0X2F0dHIsIGdldF9hdHRyOworCisJc3RydWN0IF9vc2RfaW9faW5mbyB7CisJCXN0cnVjdCBiaW8gKmJpbzsKKwkJdTY0IHRvdGFsX2J5dGVzOworCQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCQlzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50ICpsYXN0X3NlZzsKKwkJdTggKnBhZF9idWZmOworCX0gb3V0LCBpbjsKKworCWdmcF90IGFsbG9jX2ZsYWdzOworCXVuc2lnbmVkIHRpbWVvdXQ7CisJdW5zaWduZWQgcmV0cmllczsKKwl1OCBzZW5zZVtPU0RfTUFYX1NFTlNFX0xFTl07CisJZW51bSBvc2RfYXR0cmlidXRlc19tb2RlIGF0dHJpYnV0ZXNfbW9kZTsKKworCW9zZF9yZXFfZG9uZV9mbiAqYXN5bmNfZG9uZTsKKwl2b2lkICphc3luY19wcml2YXRlOworCWludCBhc3luY19lcnJvcjsKK307CisKKy8qIE9TRCBWZXJzaW9uIGNvbnRyb2wgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBvc2RfcmVxX2lzX3ZlcjEoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKyNpZmRlZiBPU0RfVkVSMV9TVVBQT1JUCisJcmV0dXJuIG9yLT5vc2RfZGV2LT52ZXJzaW9uID09IE9TRF9WRVIxOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworLyoKKyAqIEhvdyB0byB1c2UgdGhlIG9zZCBsaWJyYXJ5OgorICoKKyAqIG9zZF9zdGFydF9yZXF1ZXN0CisgKglBbGxvY2F0ZXMgYSByZXF1ZXN0LgorICoKKyAqIG9zZF9yZXFfKgorICoJQ2FsbCBvbmUgb2YsIHRvIGVuY29kZSB0aGUgZGVzaXJlZCBvcGVyYXRpb24uCisgKgorICogb3NkX2FkZF97Z2V0LHNldH1fYXR0cgorICoJT3B0aW9uYWxseSBhZGQgYXR0cmlidXRlcyB0byB0aGUgQ0RCLCBsaXN0IG9yIHBhZ2UgbW9kZS4KKyAqCisgKiBvc2RfZmluYWxpemVfcmVxdWVzdAorICoJQ29tcHV0ZXMgZmluYWwgZGF0YSBvdXQvaW4gb2Zmc2V0cyBhbmQgc2lnbnMgdGhlIHJlcXVlc3QsCisgKgltYWtpbmcgaXQgcmVhZHkgZm9yIGV4ZWN1dGlvbi4KKyAqCisgKiBvc2RfZXhlY3V0ZV9yZXF1ZXN0CisgKglNYXkgYmUgY2FsbGVkIHRvIGV4ZWN1dGUgaXQgdGhyb3VnaCB0aGUgYmxvY2sgbGF5ZXIuIE90aGVyIHdpc2Ugc3VibWl0CisgKgl0aGUgYXNzb2NpYXRlZCBibG9jayByZXF1ZXN0IGluIHNvbWUgb3RoZXIgd2F5LgorICoKKyAqIEFmdGVyIGV4ZWN1dGlvbjoKKyAqIG9zZF9yZXFfZGVjb2RlX3NlbnNlCisgKglEZWNvZGVzIHNlbnNlIGluZm9ybWF0aW9uIHRvIHZlcmlmeSBleGVjdXRpb24gcmVzdWx0cy4KKyAqCisgKiBvc2RfcmVxX2RlY29kZV9nZXRfYXR0cgorICoJUmV0cmlldmUgb3NkX2FkZF9nZXRfYXR0cl9saXN0KCkgdmFsdWVzIGlmIHVzZWQuCisgKgorICogb3NkX2VuZF9yZXF1ZXN0CisgKglNdXN0IGJlIGNhbGxlZCB0byBkZWFsbG9jYXRlIHRoZSByZXF1ZXN0LgorICovCisKKy8qKgorICogb3NkX3N0YXJ0X3JlcXVlc3QgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBvc2RfcmVxdWVzdAorICoKKyAqIEBvc2RfZGV2OiAgICBPU0QgZGV2aWNlIHRoYXQgaG9sZHMgdGhlIHNjc2ktZGV2aWNlIGFuZCBkZWZhdWx0IHZhbHVlcworICogICAgICAgICAgICAgIHRoYXQgdGhlIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICogQGdmcDogICAgICAgIFRoZSBhbGxvY2F0aW9uIGZsYWdzIHRvIHVzZSBmb3IgcmVxdWVzdCBhbGxvY2F0aW9uLCBhbmQgYWxsCisgKiAgICAgICAgICAgICAgc3Vic2VxdWVudCBhbGxvY2F0aW9ucy4gVGhpcyB3aWxsIGJlIHN0b3JlZCBhdAorICogICAgICAgICAgICAgIG9zZF9yZXF1ZXN0LT5hbGxvY19mbGFncywgY2FuIGJlIGNoYW5nZWQgYnkgdXNlciBsYXRlcgorICoKKyAqIEFsbG9jYXRlIG9zZF9yZXF1ZXN0IGFuZCBpbml0aWFsaXplIGFsbCBtZW1iZXJzIHRvIHRoZQorICogZGVmYXVsdC9pbml0aWFsIHN0YXRlLgorICovCitzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9zZF9zdGFydF9yZXF1ZXN0KHN0cnVjdCBvc2RfZGV2ICpvZCwgZ2ZwX3QgZ2ZwKTsKKworZW51bSBvc2RfcmVxX29wdGlvbnMgeworCU9TRF9SRVFfRlVBID0gMHgwOCwJLyogRm9yY2UgVW5pdCBBY2Nlc3MgKi8KKwlPU0RfUkVRX0RQTyA9IDB4MTAsCS8qIERpc2FibGUgUGFnZSBPdXQgKi8KKworCU9TRF9SRVFfQllQQVNTX1RJTUVTVEFNUFMgPSAweDgwLAorfTsKKworLyoqCisgKiBvc2RfZmluYWxpemVfcmVxdWVzdCAtIFNpZ24gcmVxdWVzdCBhbmQgcHJlcGFyZSByZXF1ZXN0IGZvciBleGVjdXRpb24KKyAqCisgKiBAb3I6CQlvc2RfcmVxdWVzdCB0byBwcmVwYXJlCisgKiBAb3B0aW9uczoJY29tYmluYXRpb24gb2Ygb3NkX3JlcV9vcHRpb25zIGJpdCBmbGFncyBvciAwLgorICogQGNhcDoJQSBQb2ludGVyIHRvIGFuIE9TRF9DQVBfTEVOIGJ5dGVzIGJ1ZmZlciB0aGF0IGlzIHJlY2VpdmVkIGZyb20KKyAqICAgICAgICAgICAgICBUaGUgc2VjdXJpdHkgbWFuYWdlciBhcyBjYXBhYmlsaXRpZXMgZm9yIHRoaXMgY2RiLgorICogQGNhcF9rZXk6CVRoZSBjcnlwdG9ncmFwaGljIGtleSB1c2VkIHRvIHNpZ24gdGhlIGNkYi9kYXRhLiBDYW4gYmUgbnVsbAorICogICAgICAgICAgICAgIGlmIE5PU0VDIGlzIHVzZWQuCisgKgorICogVGhlIGFjdHVhbCByZXF1ZXN0IGFuZCBiaW9zIGFyZSBvbmx5IGFsbG9jYXRlZCBoZXJlLCBzbyBhcmUgdGhlIGdldF9hdHRyCisgKiBidWZmZXJzIHRoYXQgd2lsbCByZWNlaXZlIHRoZSByZXR1cm5lZCBhdHRyaWJ1dGVzLiBDb3B5J3MgQGNhcCB0byBjZGIuCisgKiBTaWduIHRoZSBjZGIvZGF0YSB3aXRoIEBjYXBfa2V5LgorICovCitpbnQgb3NkX2ZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl1OCBvcHRpb25zLCBjb25zdCB2b2lkICpjYXAsIGNvbnN0IHU4ICpjYXBfa2V5KTsKKworLyoqCisgKiBvc2RfZXhlY3V0ZV9yZXF1ZXN0IC0gRXhlY3V0ZSB0aGUgcmVxdWVzdCBzeW5jaHJvbm91c2x5IHRocm91Z2ggYmxvY2stbGF5ZXIKKyAqCisgKiBAb3I6CQlvc2RfcmVxdWVzdCB0byBFeGVjdXRlZAorICoKKyAqIENhbGxzIGJsa19leGVjdXRlX3JxIHRvIHEgdGhlIGNvbW1hbmQgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uLgorICovCitpbnQgb3NkX2V4ZWN1dGVfcmVxdWVzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKTsKKworLyoqCisgKiBvc2RfZXhlY3V0ZV9yZXF1ZXN0X2FzeW5jIC0gRXhlY3V0ZSB0aGUgcmVxdWVzdCB3aXRob3V0IHdhaXR0aW5nLgorICoKKyAqIEBvcjogICAgICAgICAgICAgICAgICAgICAgLSBvc2RfcmVxdWVzdCB0byBFeGVjdXRlZAorICogQGRvbmU6IChPcHRpb25hbCkgICAgICAgICAtIENhbGxlZCBhdCBlbmQgb2YgZXhlY3V0aW9uCisgKiBAcHJpdmF0ZTogICAgICAgICAgICAgICAgIC0gV2lsbCBiZSBwYXNzZWQgdG8gQGRvbmUgZnVuY3Rpb24KKyAqCisgKiBDYWxscyBibGtfZXhlY3V0ZV9ycV9ub3dhaXQgdG8gcXVldWUgdGhlIGNvbW1hbmQuIFdoZW4gZXhlY3V0aW9uIGlzIGRvbmUKKyAqIG9wdGlvbmFsbHkgY2FsbHMgQGRvbmUgd2l0aCBAcHJpdmF0ZSBhcyBwYXJhbWV0ZXIuIEBvci0+YXN5bmNfZXJyb3Igd2lsbAorICogaGF2ZSB0aGUgcmV0dXJuIGNvZGUKKyAqLworaW50IG9zZF9leGVjdXRlX3JlcXVlc3RfYXN5bmMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfcmVxX2RvbmVfZm4gKmRvbmUsIHZvaWQgKnByaXZhdGUpOworCisvKioKKyAqIG9zZF9yZXFfZGVjb2RlX3NlbnNlX2Z1bGwgLSBEZWNvZGUgc2Vuc2UgaW5mb3JtYXRpb24gYWZ0ZXIgZXhlY3V0aW9uLgorICoKKyAqIEBvcjogICAgICAgICAgIC0gb3NkX3JlcXVlc3QgdG8gZXhhbWluZQorICogQG9zaSAgICAgICAgICAgLSBSZWNpZXZzIGEgbW9yZSBkZXRhaWxlZCBlcnJvciByZXBvcnQgaW5mb3JtYXRpb24gKG9wdGlvbmFsKS4KKyAqIEBzaWxlbnQgICAgICAgIC0gRG8gbm90IHByaW50IHRvIGRtc2cgKEV2ZW4gaWYgZW5hYmxlZCkKKyAqIEBiYWRfb2JqX2xpc3QgIC0gU29tZSBjb21tYW5kcyBhY3Qgb24gbXVsdGlwbGUgb2JqZWN0cy4gRmFpbGVkIG9iamVjdHMgd2lsbAorICogICAgICAgICAgICAgICAgICBiZSByZWNpZXZlZCBoZXJlIChvcHRpb25hbCkKKyAqIEBtYXhfb2JqICAgICAgIC0gU2l6ZSBvZiBAYmFkX29ial9saXN0LgorICogQGJhZF9hdHRyX2xpc3QgLSBMaXN0IG9mIGZhaWxpbmcgYXR0cmlidXRlcyAob3B0aW9uYWwpCisgKiBAbWF4X2F0dHIgICAgICAtIFNpemUgb2YgQGJhZF9hdHRyX2xpc3QuCisgKgorICogQWZ0ZXIgZXhlY3V0aW9uLCBzZW5zZSArIHJldHVybiBjb2RlIGNhbiBiZSBhbmFseXplZCB1c2luZyB0aGlzIGZ1bmN0aW9uLiBUaGUKKyAqIHJldHVybiBjb2RlIGlzIHRoZSBmaW5hbCBkaXNwb3NpdGlvbiBvbiB0aGUgZXJyb3IuIFNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgYQorICogQ0hFQ0tfQ09ORElUSU9OIHdhcyByZXR1cm5lZCBmcm9tIHRhcmdldCBidXQgdGhpcyB3aWxsIHJldHVybiBOT19FUlJPUiwgZm9yCisgKiBleGFtcGxlIG9uIHJlY292ZXJlZCBlcnJvcnMuIEFsbCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBpZiBjYWxsZXIgZG9lcworICogbm90IG5lZWQgYW55IHJldHVybmVkIGluZm9ybWF0aW9uLgorICogTm90ZTogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gZHVtcCB0aGUgZXJyb3IgdG8gZG1zZyBhY2NvcmRpbmcgdG8gc2V0dGluZ3MKKyAqIG9mIHRoZSBTQ1NJX09TRF9EUFJJTlRfU0VOU0UgS2NvbmZpZyB2YWx1ZS4gU2V0IEBzaWxlbnQgaWYgeW91IGtub3cgdGhlCisgKiBjb21tYW5kIHdvdWxkIHJvdXRpbmVseSBmYWlsLCB0byBub3Qgc3BhbSB0aGUgZG1zZyBmaWxlLgorICovCitzdHJ1Y3Qgb3NkX3NlbnNlX2luZm8geworCWludCBrZXk7CQkvKiBvbmUgb2YgZW51bSBzY3NpX3NlbnNlX2tleXMgKi8KKwlpbnQgYWRkaXRpb25hbF9jb2RlIDsJLyogZW51bSBvc2RfYWRkaXRpb25hbF9zZW5zZV9jb2RlcyAqLworCXVuaW9uIHsgLyogU2Vuc2Ugc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwkJdTE2IHNlbnNlX2luZm87CisJCXUxNiBjZGJfZmllbGRfb2Zmc2V0OyAJLyogc2NzaV9pbnZhbGlkX2ZpZWxkX2luX2NkYiAqLworCX07CisJdW5pb24geyAvKiBDb21tYW5kIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJCXU2NCBjb21tYW5kX2luZm87CisJfTsKKworCXUzMiBub3RfaW5pdGlhdGVkX2NvbW1hbmRfZnVuY3Rpb25zOyAvKiBvc2RfY29tbWFuZF9mdW5jdGlvbnNfYml0cyAqLworCXUzMiBjb21wbGV0ZWRfY29tbWFuZF9mdW5jdGlvbnM7IC8qIG9zZF9jb21tYW5kX2Z1bmN0aW9uc19iaXRzICovCisJc3RydWN0IG9zZF9vYmpfaWQgb2JqOworCXN0cnVjdCBvc2RfYXR0ciBhdHRyOworfTsKKworaW50IG9zZF9yZXFfZGVjb2RlX3NlbnNlX2Z1bGwoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlzdHJ1Y3Qgb3NkX3NlbnNlX2luZm8gKm9zaSwgYm9vbCBzaWxlbnQsCisJc3RydWN0IG9zZF9vYmpfaWQgKmJhZF9vYmpfbGlzdCwgaW50IG1heF9vYmosCisJc3RydWN0IG9zZF9hdHRyICpiYWRfYXR0cl9saXN0LCBpbnQgbWF4X2F0dHIpOworCitzdGF0aWMgaW5saW5lIGludCBvc2RfcmVxX2RlY29kZV9zZW5zZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2Rfc2Vuc2VfaW5mbyAqb3NpKQoreworCXJldHVybiBvc2RfcmVxX2RlY29kZV9zZW5zZV9mdWxsKG9yLCBvc2ksIGZhbHNlLCBOVUxMLCAwLCBOVUxMLCAwKTsKK30KKworLyoqCisgKiBvc2RfZW5kX3JlcXVlc3QgLSByZXR1cm4gb3NkX3JlcXVlc3QgdG8gZnJlZSBzdG9yZQorICoKKyAqIEBvcjoJCW9zZF9yZXF1ZXN0IHRvIGZyZWUKKyAqCisgKiBEZWFsbG9jYXRlIGFsbCBvc2RfcmVxdWVzdCByZXNvdXJjZXMgKHN0cnVjdCByZXEncywgQklPcywgYnVmZmVycywgZXRjLikKKyAqLwordm9pZCBvc2RfZW5kX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcik7CisKKy8qCisgKiBDREIgRW5jb2RpbmcKKyAqCisgKiBOb3RlOiBjYWxsIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcy4KKyAqLworCisvKgorICogRGV2aWNlIGNvbW1hbmRzCisgKi8KK3ZvaWQgb3NkX3JlcV9zZXRfbWFzdGVyX3NlZWRfeGNoZyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCAuLi4pOy8qIE5JICovCit2b2lkIG9zZF9yZXFfc2V0X21hc3Rlcl9rZXkoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgLi4uKTsvKiBOSSAqLworCit2b2lkIG9zZF9yZXFfZm9ybWF0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHU2NCB0b3RfY2FwYWNpdHkpOworCisvKiBsaXN0IGFsbCBwYXJ0aXRpb25zCisgKiBAbGlzdCBoZWFkZXIgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGZpcnN0IHJ1bi4KKyAqCisgKiBDYWxsIG9zZF9pc19vYmpfbGlzdF9kb25lKCkgdG8gZmluZCBpZiB3ZSBnb3QgdGhlIGNvbXBsZXRlIGxpc3QuCisgKi8KK2ludCBvc2RfcmVxX2xpc3RfZGV2X3BhcnRpdGlvbnMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgaW5pdGlhbF9pZCwgc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwgdW5zaWduZWQgbmVsZW0pOworCit2b2lkIG9zZF9yZXFfZmx1c2hfb2JzZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWVudW0gb3NkX29wdGlvbnNfZmx1c2hfc2NvcGVfdmFsdWVzKTsKKwordm9pZCBvc2RfcmVxX3BlcmZvcm1fc2NzaV9jb21tYW5kKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3QgdTggKmNkYiwgLi4uKTsvKiBOSSAqLwordm9pZCBvc2RfcmVxX3Rhc2tfbWFuYWdlbWVudChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCAuLi4pOy8qIE5JICovCisKKy8qCisgKiBQYXJ0aXRpb24gY29tbWFuZHMKKyAqLwordm9pZCBvc2RfcmVxX2NyZWF0ZV9wYXJ0aXRpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgb3NkX2lkIHBhcnRpdGlvbik7Cit2b2lkIG9zZF9yZXFfcmVtb3ZlX3BhcnRpdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBvc2RfaWQgcGFydGl0aW9uKTsKKwordm9pZCBvc2RfcmVxX3NldF9wYXJ0aXRpb25fa2V5KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX2lkIHBhcnRpdGlvbiwgdTggbmV3X2tleV9pZFtPU0RfQ1JZUFRPX0tFWUlEX1NJWkVdLAorCXU4IHNlZWRbT1NEX0NSWVBUT19TRUVEX1NJWkVdKTsvKiBOSSAqLworCisvKiBsaXN0IGFsbCBjb2xsZWN0aW9ucyBpbiB0aGUgcGFydGl0aW9uCisgKiBAbGlzdCBoZWFkZXIgbXVzdCBiZSBpbml0IHRvIHplcm8gb24gZmlyc3QgcnVuLgorICoKKyAqIENhbGwgb3NkX2lzX29ial9saXN0X2RvbmUoKSB0byBmaW5kIGlmIHdlIGdvdCB0aGUgY29tcGxldGUgbGlzdC4KKyAqLworaW50IG9zZF9yZXFfbGlzdF9wYXJ0aXRpb25fY29sbGVjdGlvbnMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgcGFydGl0aW9uLCBvc2RfaWQgaW5pdGlhbF9pZCwgc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwKKwl1bnNpZ25lZCBuZWxlbSk7CisKKy8qIGxpc3QgYWxsIG9iamVjdHMgaW4gdGhlIHBhcnRpdGlvbgorICogQGxpc3QgaGVhZGVyIG11c3QgYmUgaW5pdCB0byB6ZXJvIG9uIGZpcnN0IHJ1bi4KKyAqCisgKiBDYWxsIG9zZF9pc19vYmpfbGlzdF9kb25lKCkgdG8gZmluZCBpZiB3ZSBnb3QgdGhlIGNvbXBsZXRlIGxpc3QuCisgKi8KK2ludCBvc2RfcmVxX2xpc3RfcGFydGl0aW9uX29iamVjdHMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgcGFydGl0aW9uLCBvc2RfaWQgaW5pdGlhbF9pZCwgc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwKKwl1bnNpZ25lZCBuZWxlbSk7CisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9wYXJ0aXRpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgcGFydGl0aW9uLCBlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyk7CisKKy8qCisgKiBDb2xsZWN0aW9uIGNvbW1hbmRzCisgKi8KK3ZvaWQgb3NkX3JlcV9jcmVhdGVfY29sbGVjdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICopOy8qIE5JICovCit2b2lkIG9zZF9yZXFfcmVtb3ZlX2NvbGxlY3Rpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqKTsvKiBOSSAqLworCisvKiBsaXN0IGFsbCBvYmplY3RzIGluIHRoZSBjb2xsZWN0aW9uICovCitpbnQgb3NkX3JlcV9saXN0X2NvbGxlY3Rpb25fb2JqZWN0cyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIG9zZF9pZCBpbml0aWFsX2lkLAorCXN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsIHVuc2lnbmVkIG5lbGVtKTsKKworLyogVjIgb25seSBmaWx0ZXJlZCBsaXN0IG9mIG9iamVjdHMgaW4gdGhlIGNvbGxlY3Rpb24gKi8KK3ZvaWQgb3NkX3JlcV9xdWVyeShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCAuLi4pOy8qIE5JICovCisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9jb2xsZWN0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgZW51bSBvc2Rfb3B0aW9uc19mbHVzaF9zY29wZV92YWx1ZXMpOworCit2b2lkIG9zZF9yZXFfZ2V0X21lbWJlcl9hdHRycyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCAuLi4pOy8qIFYyLW9ubHkgTkkgKi8KK3ZvaWQgb3NkX3JlcV9zZXRfbWVtYmVyX2F0dHJzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIC4uLik7LyogVjItb25seSBOSSAqLworCisvKgorICogT2JqZWN0IGNvbW1hbmRzCisgKi8KK3ZvaWQgb3NkX3JlcV9jcmVhdGVfb2JqZWN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHN0cnVjdCBvc2Rfb2JqX2lkICopOwordm9pZCBvc2RfcmVxX3JlbW92ZV9vYmplY3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IG9zZF9vYmpfaWQgKik7CisKK3ZvaWQgb3NkX3JlcV93cml0ZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHN0cnVjdCBiaW8gKmRhdGFfb3V0LCB1NjQgb2Zmc2V0KTsKK3ZvaWQgb3NkX3JlcV9hcHBlbmQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCBzdHJ1Y3QgYmlvICpkYXRhX291dCk7LyogTkkgKi8KK3ZvaWQgb3NkX3JlcV9jcmVhdGVfd3JpdGUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCBzdHJ1Y3QgYmlvICpkYXRhX291dCwgdTY0IG9mZnNldCk7LyogTkkgKi8KK3ZvaWQgb3NkX3JlcV9jbGVhcihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHU2NCBvZmZzZXQsIHU2NCBsZW4pOy8qIE5JICovCit2b2lkIG9zZF9yZXFfcHVuY2goc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCB1NjQgb2Zmc2V0LCB1NjQgbGVuKTsvKiBWMi1vbmx5IE5JICovCisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9vYmplY3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCBlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcywKKwkvKlYyKi8gdTY0IG9mZnNldCwgLypWMiovIHU2NCBsZW4pOworCit2b2lkIG9zZF9yZXFfcmVhZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHN0cnVjdCBiaW8gKmRhdGFfaW4sIHU2NCBvZmZzZXQpOworCisvKgorICogUm9vdC9QYXJ0aXRpb24vQ29sbGVjdGlvbi9PYmplY3QgQXR0cmlidXRlcyBjb21tYW5kcworICovCisKKy8qIGdldCBiZWZvcmUgc2V0ICovCit2b2lkIG9zZF9yZXFfZ2V0X2F0dHJpYnV0ZXMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKik7CisKKy8qIHNldCBiZWZvcmUgZ2V0ICovCit2b2lkIG9zZF9yZXFfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKik7CisKKy8qCisgKiBBdHRyaWJ1dGVzIGFwcGVuZGVkIHRvIG1vc3QgY29tbWFuZHMKKyAqLworCisvKiBBdHRyaWJ1dGVzIExpc3QgbW9kZSAob3IgVjIgQ0RCKSAqLworICAvKgorICAgKiBUT0RPOiBJbiB2ZXIyIGlmIGF0IGZpbmFsaXplIHRpbWUgb25seSBvbmUgYXR0ciB3YXMgc2V0IGFuZCBubyBnZXRzLAorICAgKiB0aGVuIHRoZSBBdHRyaWJ1dGVzIENEQiBtb2RlIGlzIHVzZWQgYXV0b21hdGljYWxseSB0byBzYXZlIElPLgorICAgKi8KKworLyogc2V0IGEgbGlzdCBvZiBhdHRyaWJ1dGVzLiAqLworaW50IG9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgKiwgdW5zaWduZWQgbmVsZW0pOworCisvKiBnZXQgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgKi8KK2ludCBvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9hdHRyICosIHVuc2lnbmVkIG5lbGVtKTsKKworLyoKKyAqIEF0dHJpYnV0ZXMgbGlzdCBkZWNvZGluZworICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgb3NkX3JlcXVlc3QucmVxdWVzdCB3YXMgZXhlY3V0ZWQKKyAqIEl0IGlzIGNhbGxlZCBpbiBhIGxvb3AgdG8gZGVjb2RlIHRoZSByZXR1cm5lZCBnZXRfYXR0cgorICogKHNlZSBvc2RfYWRkX2dldF9hdHRyKQorICovCitpbnQgb3NkX3JlcV9kZWNvZGVfZ2V0X2F0dHJfbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2RfYXR0ciAqLCBpbnQgKm5lbGVtLCB2b2lkICoqaXRlcmF0b3IpOworCisvKiBBdHRyaWJ1dGVzIFBhZ2UgbW9kZSAqLworCisvKgorICogUmVhZCBhbiBhdHRyaWJ1dGUgcGFnZSBhbmQgb3B0aW9uYWxseSBzZXQgb25lIGF0dHJpYnV0ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgYXR0cmlidXRlIHBhZ2UgZGlyZWN0bHkgdG8gYSB1c2VyIGJ1ZmZlci4KKyAqIEBhdHRyX3BhZ2VfZGF0YSBzaGFsbCBzdGF5IHZhbGlkIHVudGlsIGVuZCBvZiBleGVjdXRpb24uCisgKiBTZWUgb3NkX2F0dHJpYnV0ZXMuaCBmb3IgY29tbW9uIHBhZ2Ugc3RydWN0dXJlcworICovCitpbnQgb3NkX3JlcV9hZGRfZ2V0X2F0dHJfcGFnZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXUzMiBwYWdlX2lkLCB2b2lkICphdHRyX3BhZ2VfZGF0YSwgdW5zaWduZWQgbWF4X3BhZ2VfbGVuLAorCWNvbnN0IHN0cnVjdCBvc2RfYXR0ciAqc2V0X29uZSk7CisKKyNlbmRpZiAvKiBfX09TRF9MSUJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvb3NkX3Byb3RvY29sLmggYi9pbmNsdWRlL3Njc2kvb3NkX3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzY2JmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2NzaS9vc2RfcHJvdG9jb2wuaApAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIG9zZF9wcm90b2NvbC5oIC0gT1NEIFQxMCBzdGFuZGFyZCBDIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0eXBlcyBhbmQgY29uc3RhbnRzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIHByb3RvY29sCisgKiBOb3RlOiBBbGwgbmFtZXMgYW5kIHN5bWJvbHMgYXJlIHRha2VuIGZyb20gdGhlIE9TRCBzdGFuZGFyZCdzIHRleHQuCisgKi8KKyNpZm5kZWYgX19PU0RfUFJPVE9DT0xfSF9fCisjZGVmaW5lIF9fT1NEX1BST1RPQ09MX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisKK2VudW0geworCU9TRHYxX0FERElUSU9OQUxfQ0RCX0xFTkdUSCA9IDE5MiwKKwlPU0R2MV9UT1RBTF9DREJfTEVOID0gT1NEdjFfQURESVRJT05BTF9DREJfTEVOR1RIICsgOCwKKwlPU0R2MV9DQVBfTEVOID0gODAsCisJLyogTGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uICovCisvKiAJT1NEX0FERElUSU9OQUxfQ0RCX0xFTkdUSCA9IDIxNiwqLworCU9TRF9BRERJVElPTkFMX0NEQl9MRU5HVEggPQorCQlPU0R2MV9BRERJVElPTkFMX0NEQl9MRU5HVEgsIC8qIEZJWE1FOiBQZXRlIHJldi0wMDEgc3VwICovCisJT1NEX1RPVEFMX0NEQl9MRU4gPSBPU0RfQURESVRJT05BTF9DREJfTEVOR1RIICsgOCwKKy8qIAlPU0RfQ0FQX0xFTiA9IDEwNCwqLworCU9TRF9DQVBfTEVOID0gT1NEdjFfQ0FQX0xFTiwvKiBGSVhNRTogUGV0ZSByZXYtMDAxIHN1cCAqLworCisJT1NEX1NZU1RFTUlEX0xFTiA9IDIwLAorCU9TRF9DUllQVE9fS0VZSURfU0laRSA9IDIwLAorCS8qRklYTUU6IE9TRHYyX0NSWVBUT19LRVlJRF9TSVpFID0gMzIsKi8KKwlPU0RfQ1JZUFRPX1NFRURfU0laRSA9IDQsCisJT1NEX0NSWVBUT19OT05DRV9TSVpFID0gMTIsCisJT1NEX01BWF9TRU5TRV9MRU4gPSAyNTIsIC8qIGZyb20gU1BDLTMgKi8KKworCU9TRF9QQVJUSVRJT05fRklSU1RfSUQgPSAweDEwMDAwLAorCU9TRF9PQkpFQ1RfRklSU1RfSUQgPSAweDEwMDAwLAorfTsKKworLyogKG9zZC1yMTAgNS4yLjQpCisgKiBvc2QycjAzOiA1LjIuMyBDYWNoaW5nIGNvbnRyb2wgYml0cworICovCitlbnVtIG9zZF9vcHRpb25zX2J5dGUgeworCU9TRF9DREJfRlVBID0gMHgwOCwJLyogRm9yY2UgVW5pdCBBY2Nlc3MgKi8KKwlPU0RfQ0RCX0RQTyA9IDB4MTAsCS8qIERpc2FibGUgUGFnZSBPdXQgKi8KK307CisKKy8qCisgKiBvc2QycjAzOiA1LjIuNSBJc29sYXRpb24uCisgKiBGaXJzdCAzIGJpdHMsIFYyLW9ubHkuCisgKiBBbHNvIGZvciBhdHRyIDExMGggImRlZmF1bHQgaXNvbGF0aW9uIG1ldGhvZCIgYXQgUm9vdCBJbmZvcm1hdGlvbiBwYWdlCisgKi8KK2VudW0gb3NkX29wdGlvbnNfYnl0ZV9pc29sYXRpb24geworCU9TRF9JU09MQVRJT05fREVGQVVMVCA9IDAsCisJT1NEX0lTT0xBVElPTl9OT05FID0gMSwKKwlPU0RfSVNPTEFUSU9OX1NUUklDVCA9IDIsCisJT1NEX0lTT0xBVElPTl9SQU5HRSA9IDQsCisJT1NEX0lTT0xBVElPTl9GVU5DVElPTkFMID0gNSwKKwlPU0RfSVNPTEFUSU9OX1ZFTkRPUiA9IDcsCit9OworCisvKiAob3NkLXIxMDogNi43KQorICogb3NkMnIwMzogNi44IEZMVVNILCBGTFVTSCBDT0xMRUNUSU9OLCBGTFVTSCBPU0QsIEZMVVNIIFBBUlRJVElPTgorICovCitlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyB7CisJT1NEX0NEQl9GTFVTSF9BTEwgPSAwLAorCU9TRF9DREJfRkxVU0hfQVRUUl9PTkxZID0gMSwKKworCU9TRF9DREJfRkxVU0hfQUxMX1JFQ1VSU0lWRSA9IDIsCisJLyogVjItb25seSAqLworCU9TRF9DREJfRkxVU0hfQUxMX1JBTkdFID0gMiwKK307CisKKy8qIG9zZDJyMDM6IDUuMi4xMCBUaW1lc3RhbXBzIGNvbnRyb2wgKi8KK2VudW0geworCU9TRF9DREJfTk9STUFMX1RJTUVTVEFNUFMgPSAwLAorCU9TRF9DREJfQllQQVNTX1RJTUVTVEFNUFMgPSAweDdmLAorfTsKKworLyogKG9zZC1yMTA6IDUuMi4yLjEpCisgKiBvc2QycjAzOiA1LjIuNC4xIEdldCBhbmQgc2V0IGF0dHJpYnV0ZXMgQ0RCIGZvcm1hdCBzZWxlY3Rpb24KKyAqCTIgYml0cyBhdCBzZWNvbmQgbmliYmxlIG9mIGNvbW1hbmRfc3BlY2lmaWNfb3B0aW9ucyBieXRlCisgKi8KK2VudW0gb3NkX2F0dHJpYnV0ZXNfbW9kZSB7CisJLyogVjItb25seSAqLworCU9TRF9DREJfU0VUX09ORV9BVFRSID0gMHgxMCwKKworCU9TRF9DREJfR0VUX0FUVFJfUEFHRV9TRVRfT05FID0gMHgyMCwKKwlPU0RfQ0RCX0dFVF9TRVRfQVRUUl9MSVNUUyA9IDB4MzAsCisKKwlPU0RfQ0RCX0dFVF9TRVRfQVRUUl9NQVNLID0gMHgzMCwKK307CisKKy8qIChvc2QtcjEwOiA0LjEyLjUpCisgKiBvc2QycjAzOiA0LjE0LjUgRGF0YS1JbiBhbmQgRGF0YS1PdXQgYnVmZmVyIG9mZnNldHMKKyAqCWJ5dGUgb2Zmc2V0ID0gbWFudGlzc2EgKiAoMl4oZXhwb25lbnQrOCkpCisgKglzdHJ1Y3QgeworICoJCXVuc2lnbmVkIG1hbnRpc3NhOiAyODsKKyAqCQlpbnQgZXhwb25lbnQ6IDA0OworICoJfQorICovCit0eXBlZGVmIF9fYmUzMiBfX2JpdHdpc2Ugb3NkX2NkYl9vZmZzZXQ7CisKK2VudW0geworCU9TRF9PRkZTRVRfVU5VU0VEID0gMHhGRkZGRkZGRiwKKwlPU0RfT0ZGU0VUX01BWF9CSVRTID0gMjgsCisKKwlPU0R2MV9PRkZTRVRfTUlOX1NISUZUID0gOCwKKwlPU0RfT0ZGU0VUX01JTl9TSElGVCA9IDMsCisJT1NEX09GRlNFVF9NQVhfU0hJRlQgPSAxNiwKK307CisKKy8qIFJldHVybiB0aGUgc21hbGxlc3QgYWxsb3dlZCBlbmNvZGVkIG9mZnNldCB0aGF0IGNvbnRhaW5zIEBvZmZzZXQuCisgKgorICogVGhlIGFjdHVhbCBlbmNvZGVkIG9mZnNldCByZXR1cm5lZCBpcyBAb2Zmc2V0ICsgKnBhZGRpbmcuCisgKiAodXAgdG8gbWF4X3NoaWZ0LCBub24taW5jbHVzaXZlKQorICovCitvc2RfY2RiX29mZnNldCBfX29zZF9lbmNvZGVfb2Zmc2V0KHU2NCBvZmZzZXQsIHVuc2lnbmVkICpwYWRkaW5nLAorCWludCBtaW5fc2hpZnQsIGludCBtYXhfc2hpZnQpOworCisvKiBNaW5pbXVtIGFsaWdubWVudCBpcyAyNTYgYnl0ZXMKKyAqIE5vdGU6IFNlZW1zIGZyb20gc3RkIHYxIHRoYXQgZXhwb25lbnQgY2FuIGJlIGZyb20gMCs4IHRvIDB4RSs4IChpbmNsdXNpdmUpCisgKiB3aGljaCBpcyA4IHRvIDIzIGJ1dCBJQk0gY29kZSByZXN0cmljdHMgaXQgdG8gMTYsIHNvIGJlIGl0LgorICovCitzdGF0aWMgaW5saW5lIG9zZF9jZGJfb2Zmc2V0IG9zZF9lbmNvZGVfb2Zmc2V0X3YxKHU2NCBvZmZzZXQsIHVuc2lnbmVkICpwYWRkaW5nKQoreworCXJldHVybiBfX29zZF9lbmNvZGVfb2Zmc2V0KG9mZnNldCwgcGFkZGluZywKKwkJCQlPU0R2MV9PRkZTRVRfTUlOX1NISUZULCBPU0RfT0ZGU0VUX01BWF9TSElGVCk7Cit9CisKKy8qIE1pbmltdW0gOCBieXRlcyBhbGlnbm1lbnQKKyAqIFNhbWUgYXMgdjEgYnV0IHNpbmNlIGV4cG9uZW50IGNhbiBiZSBzaWduZWQgdGhhbiBhIGxlc3MgdGhhbgorICogMjU2IGFsaWdubWVudCBjYW4gYmUgcmVhY2hlZCB3aXRoIHNtYWxsIG9mZnNldHMgKDwyR0IpCisgKi8KK3N0YXRpYyBpbmxpbmUgb3NkX2NkYl9vZmZzZXQgb3NkX2VuY29kZV9vZmZzZXRfdjIodTY0IG9mZnNldCwgdW5zaWduZWQgKnBhZGRpbmcpCit7CisJcmV0dXJuIF9fb3NkX2VuY29kZV9vZmZzZXQob2Zmc2V0LCBwYWRkaW5nLAorCQkJCSAgIE9TRF9PRkZTRVRfTUlOX1NISUZULCBPU0RfT0ZGU0VUX01BWF9TSElGVCk7Cit9CisKKy8qIG9zZDJyMDM6IDUuMi4xIE92ZXJ2aWV3ICovCitzdHJ1Y3Qgb3NkX2NkYl9oZWFkIHsKKwlzdHJ1Y3Qgc2NzaV92YXJsZW5fY2RiX2hkciB2YXJsZW5fY2RiOworLyoxMCovCXU4CQlvcHRpb25zOworCXU4CQljb21tYW5kX3NwZWNpZmljX29wdGlvbnM7CisJdTgJCXRpbWVzdGFtcF9jb250cm9sOworLyoxMyovCXU4CQlyZXNlcnZlZDFbM107CisvKjE2Ki8JX19iZTY0CQlwYXJ0aXRpb247CisvKjI0Ki8JX19iZTY0CQlvYmplY3Q7CisvKjMyKi8JdW5pb24geyAvKiBWMSB2cyBWMiBhbGlnbm1lbnQgZGlmZmVyZW5jZXMgKi8KKwkJc3RydWN0IF9fb3NkdjFfY2RiX2FkZHJfbGVuIHsKKy8qMzIqLwkJCV9fYmUzMiAJCWxpc3RfaWRlbnRpZmllcjsvKiBSYXJlbHkgdXNlZCAqLworLyozNiovCQkJX19iZTY0CQlsZW5ndGg7CisvKjQ0Ki8JCQlfX2JlNjQJCXN0YXJ0X2FkZHJlc3M7CisJCX0gX19wYWNrZWQgdjE7CisKKwkJc3RydWN0IF9fb3NkdjJfY2RiX2FkZHJfbGVuIHsKKwkJCS8qIGNhbGxlZCBhbGxvY2F0aW9uX2xlbmd0aCBpbiBzb21lIGNvbW1hbmRzICovCisvKjMyKi8JCQlfX2JlNjQJbGVuZ3RoOworLyo0MCovCQkJX19iZTY0CXN0YXJ0X2FkZHJlc3M7CisvKjQ4Ki8JCQlfX2JlMzIgbGlzdF9pZGVudGlmaWVyOy8qIFJhcmVseSB1c2VkICovCisJCX0gX19wYWNrZWQgdjI7CisJfTsKKy8qNTIqLwl1bmlvbiB7IC8qIHNlbGVjdGVkIGF0dHJpYnV0ZXMgbW9kZSBQYWdlL0xpc3QvU2luZ2xlICovCisJCXN0cnVjdCBvc2RfYXR0cmlidXRlc19wYWdlX21vZGUgeworLyo1MiovCQkJX19iZTMyCQlnZXRfYXR0cl9wYWdlOworLyo1NiovCQkJX19iZTMyCQlnZXRfYXR0cl9hbGxvY19sZW5ndGg7CisvKjYwKi8JCQlvc2RfY2RiX29mZnNldAlnZXRfYXR0cl9vZmZzZXQ7CisKKy8qNjQqLwkJCV9fYmUzMgkJc2V0X2F0dHJfcGFnZTsKKy8qNjgqLwkJCV9fYmUzMgkJc2V0X2F0dHJfaWQ7CisvKjcyKi8JCQlfX2JlMzIJCXNldF9hdHRyX2xlbmd0aDsKKy8qNzYqLwkJCW9zZF9jZGJfb2Zmc2V0CXNldF9hdHRyX29mZnNldDsKKy8qODAqLwkJfSBfX3BhY2tlZCBhdHRyc19wYWdlOworCisJCXN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X21vZGUgeworLyo1MiovCQkJX19iZTMyCQlnZXRfYXR0cl9kZXNjX2J5dGVzOworLyo1NiovCQkJb3NkX2NkYl9vZmZzZXQJZ2V0X2F0dHJfZGVzY19vZmZzZXQ7CisKKy8qNjAqLwkJCV9fYmUzMgkJZ2V0X2F0dHJfYWxsb2NfbGVuZ3RoOworLyo2NCovCQkJb3NkX2NkYl9vZmZzZXQJZ2V0X2F0dHJfb2Zmc2V0OworCisvKjY4Ki8JCQlfX2JlMzIJCXNldF9hdHRyX2J5dGVzOworLyo3MiovCQkJb3NkX2NkYl9vZmZzZXQJc2V0X2F0dHJfb2Zmc2V0OworCQkJX19iZTMyIG5vdF91c2VkOworLyo4MCovCQl9IF9fcGFja2VkIGF0dHJzX2xpc3Q7CisKKwkJLyogb3NkMnIwMzo1LjIuNC4yIFNldCBvbmUgYXR0cmlidXRlIHZhbHVlIHVzaW5nIENEQiBmaWVsZHMgKi8KKwkJc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2NkYl9tb2RlIHsKKy8qNTIqLwkJCV9fYmUzMgkJc2V0X2F0dHJfcGFnZTsKKy8qNTYqLwkJCV9fYmUzMgkJc2V0X2F0dHJfaWQ7CisvKjYwKi8JCQlfX2JlMTYJCXNldF9hdHRyX2xlbjsKKy8qNjIqLwkJCXU4CQlzZXRfYXR0cl92YWxbMThdOworLyo4MCovCQl9IF9fcGFja2VkIGF0dHJzX2NkYjsKKy8qNTIqLwkJdTggZ2V0X3NldF9hdHRyaWJ1dGVzX3BhcmFtZXRlcnNbMjhdOworCX07Cit9IF9fcGFja2VkOworLyo4MCovCisKKy8qMTYwIHYxKi8KKy8qMTg0IHYyKi8KK3N0cnVjdCBvc2Rfc2VjdXJpdHlfcGFyYW1ldGVycyB7CisvKjE2MCovdTgJaW50ZWdyaXR5X2NoZWNrX3ZhbHVlW09TRF9DUllQVE9fS0VZSURfU0laRV07CisvKjE4MCovdTgJcmVxdWVzdF9ub25jZVtPU0RfQ1JZUFRPX05PTkNFX1NJWkVdOworLyoxOTIqL29zZF9jZGJfb2Zmc2V0CWRhdGFfaW5faW50ZWdyaXR5X2NoZWNrX29mZnNldDsKKy8qMTk2Ki9vc2RfY2RiX29mZnNldAlkYXRhX291dF9pbnRlZ3JpdHlfY2hlY2tfb2Zmc2V0OworfSBfX3BhY2tlZDsKKy8qMjAwIHYxKi8KKy8qMjI0IHYyKi8KKworLyogRklYTUU6IG9zZHYyX3NlY3VyaXR5X3BhcmFtZXRlcnMgKi8KKworc3RydWN0IG9zZHYxX2NkYiB7CisJc3RydWN0IG9zZF9jZGJfaGVhZCBoOworCXU4IGNhcHNbT1NEdjFfQ0FQX0xFTl07CisJc3RydWN0IG9zZF9zZWN1cml0eV9wYXJhbWV0ZXJzIHNlY19wYXJhbXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgb3NkdjJfY2RiIHsKKwlzdHJ1Y3Qgb3NkX2NkYl9oZWFkIGg7CisJdTggY2Fwc1tPU0RfQ0FQX0xFTl07CisJc3RydWN0IG9zZF9zZWN1cml0eV9wYXJhbWV0ZXJzIHNlY19wYXJhbXM7CisJLyogRklYTUU6IG9zZHYyX3NlY3VyaXR5X3BhcmFtZXRlcnMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBvc2RfY2RiIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBvc2R2MV9jZGIgdjE7CisJCXN0cnVjdCBvc2R2Ml9jZGIgdjI7CisJCXU4IGJ1ZmZbT1NEX1RPVEFMX0NEQl9MRU5dOworCX07Cit9IF9fcGFja2VkOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvc2RfY2RiX2hlYWQgKm9zZF9jZGJfaGVhZChzdHJ1Y3Qgb3NkX2NkYiAqb2NkYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBvc2RfY2RiX2hlYWQgKilvY2RiLT5idWZmOworfQorCisvKiBkZWZpbmUgYm90aCB2ZXJzaW9uIGFjdGlvbnMKKyAqIEV4IG5hbWUgPSBGT1JNQVRfT1NEIHdlIGhhdmUgT1NEX0FDVF9GT1JNQVRfT1NEICYmIE9TRHYxX0FDVF9GT1JNQVRfT1NECisgKi8KKyNkZWZpbmUgT1NEX0FDVF9fXyhOYW1lLCBOdW0pIFwKKwlPU0RfQUNUXyMjTmFtZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHg4ODgwICsgTnVtKSwgXAorCU9TRHYxX0FDVF8jI05hbWUgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4ODgwMCArIE51bSksCisKKy8qIFYyIG9ubHkgYWN0aW9ucyAqLworI2RlZmluZSBPU0RfQUNUX1YyKE5hbWUsIE51bSkgXAorCU9TRF9BQ1RfIyNOYW1lID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweDg4ODAgKyBOdW0pLAorCisjZGVmaW5lIE9TRF9BQ1RfVjFfVjIoTmFtZSwgTnVtMSwgTnVtMikgXAorCU9TRF9BQ1RfIyNOYW1lID0gX19jb25zdGFudF9jcHVfdG9fYmUxNihOdW0yKSwgXAorCU9TRHYxX0FDVF8jI05hbWUgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KE51bTEpLAorCitlbnVtIG9zZF9zZXJ2aWNlX2FjdGlvbnMgeworCU9TRF9BQ1RfVjIoT0JKRUNUX1NUUlVDVFVSRV9DSEVDSywJMHgwMCkKKwlPU0RfQUNUX19fKEZPUk1BVF9PU0QsCQkJMHgwMSkKKwlPU0RfQUNUX19fKENSRUFURSwJCQkweDAyKQorCU9TRF9BQ1RfX18oTElTVCwJCQkweDAzKQorCU9TRF9BQ1RfVjIoUFVOQ0gsCQkJMHgwNCkKKwlPU0RfQUNUX19fKFJFQUQsCQkJMHgwNSkKKwlPU0RfQUNUX19fKFdSSVRFLAkJCTB4MDYpCisJT1NEX0FDVF9fXyhBUFBFTkQsCQkJMHgwNykKKwlPU0RfQUNUX19fKEZMVVNILAkJCTB4MDgpCisJT1NEX0FDVF9WMihDTEVBUiwJCQkweDA5KQorCU9TRF9BQ1RfX18oUkVNT1ZFLAkJCTB4MEEpCisJT1NEX0FDVF9fXyhDUkVBVEVfUEFSVElUSU9OLAkJMHgwQikKKwlPU0RfQUNUX19fKFJFTU9WRV9QQVJUSVRJT04sCQkweDBDKQorCU9TRF9BQ1RfX18oR0VUX0FUVFJJQlVURVMsCQkweDBFKQorCU9TRF9BQ1RfX18oU0VUX0FUVFJJQlVURVMsCQkweDBGKQorCU9TRF9BQ1RfX18oQ1JFQVRFX0FORF9XUklURSwJCTB4MTIpCisJT1NEX0FDVF9fXyhDUkVBVEVfQ09MTEVDVElPTiwJCTB4MTUpCisJT1NEX0FDVF9fXyhSRU1PVkVfQ09MTEVDVElPTiwJCTB4MTYpCisJT1NEX0FDVF9fXyhMSVNUX0NPTExFQ1RJT04sCQkweDE3KQorCU9TRF9BQ1RfX18oU0VUX0tFWSwJCQkweDE4KQorCU9TRF9BQ1RfX18oU0VUX01BU1RFUl9LRVksCQkweDE5KQorCU9TRF9BQ1RfX18oRkxVU0hfQ09MTEVDVElPTiwJCTB4MUEpCisJT1NEX0FDVF9fXyhGTFVTSF9QQVJUSVRJT04sCQkweDFCKQorCU9TRF9BQ1RfX18oRkxVU0hfT1NELAkJCTB4MUMpCisKKwlPU0RfQUNUX1YyKFFVRVJZLAkJCTB4MjApCisJT1NEX0FDVF9WMihSRU1PVkVfTUVNQkVSX09CSkVDVFMsCTB4MjEpCisJT1NEX0FDVF9WMihHRVRfTUVNQkVSX0FUVFJJQlVURVMsCTB4MjIpCisJT1NEX0FDVF9WMihTRVRfTUVNQkVSX0FUVFJJQlVURVMsCTB4MjMpCisJT1NEX0FDVF9WMihSRUFEX01BUCwJCQkweDMxKQorCisJT1NEX0FDVF9WMV9WMihQRVJGT1JNX1NDU0lfQ09NTUFORCwJMHg4RjdFLCAweDhGN0MpCisJT1NEX0FDVF9WMV9WMihTQ1NJX1RBU0tfTUFOQUdFTUVOVCwJMHg4RjdGLCAweDhGN0QpCisJLyogMHg4RjgwIHRvIDB4OEZGRiBhcmUgVmVuZG9yIHNwZWNpZmljICovCit9OworCisvKiBvc2QycjAzOiA3LjEuMy4yIExpc3QgZW50cnkgZm9ybWF0IGZvciByZXRyaWV2aW5nIGF0dHJpYnV0ZXMgKi8KK3N0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2F0dHJpZCB7CisJX19iZTMyIGF0dHJfcGFnZTsKKwlfX2JlMzIgYXR0cl9pZDsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBvc2QycjAzOiA3LjEuMy4zIExpc3QgZW50cnkgZm9ybWF0IGZvciByZXRyaWV2ZWQgYXR0cmlidXRlcyBhbmQKKyAqICAgICAgICAgICAgICAgICAgZm9yIHNldHRpbmcgYXR0cmlidXRlcworICogTk9URTogdjIgaXMgOC1ieXRlcyBhbGlnbmVkLCB2MSBpcyBub3QgYWxpZ25lZC4KKyAqLworc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCB7CisJX19iZTMyIGF0dHJfcGFnZTsKKwlfX2JlMzIgYXR0cl9pZDsKKwlfX2JlMTYgYXR0cl9ieXRlczsKKwl1OCBhdHRyX3ZhbFswXTsKK30gX19wYWNrZWQ7CisKK2VudW0geworCU9TRHYxX0FUVFJJQlVURVNfRUxFTV9BTElHTiA9IDEsCisJT1NEX0FUVFJJQlVURVNfRUxFTV9BTElHTiA9IDgsCit9OworCitlbnVtIHsKKwlPU0RfQVRUUl9MSVNUX0FMTF9QQUdFUyA9IDB4RkZGRkZGRkYsCisJT1NEX0FUVFJfTElTVF9BTExfSU5fUEFHRSA9IDB4RkZGRkZGRkYsCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG9zZHYxX2F0dHJfbGlzdF9lbGVtX3NpemUodW5zaWduZWQgbGVuKQoreworCXJldHVybiBBTElHTihsZW4gKyBzaXplb2Yoc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCksCisJCSAgICAgT1NEdjFfQVRUUklCVVRFU19FTEVNX0FMSUdOKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBvc2R2Ml9hdHRyX2xpc3RfZWxlbV9zaXplKHVuc2lnbmVkIGxlbikKK3sKKwlyZXR1cm4gQUxJR04obGVuICsgc2l6ZW9mKHN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2VsZW1lbnQpLAorCQkgICAgIE9TRF9BVFRSSUJVVEVTX0VMRU1fQUxJR04pOworfQorCisvKgorICogb3NkMnIwMzogNy4xLjMgT1NEIGF0dHJpYnV0ZXMgbGlzdHMgKFRhYmxlIDE4NCkg4oCUIExpc3QgdHlwZSB2YWx1ZXMKKyAqLworZW51bSBvc2RfYXR0cl9saXN0X3R5cGVzIHsKKwlPU0RfQVRUUl9MSVNUX0dFVCA9IDB4MSwgCS8qIGRlc2NyaXB0b3JzIG9ubHkgKi8KKwlPU0RfQVRUUl9MSVNUX1NFVF9SRVRSSUVWRSA9IDB4OSwgLypkZXNjcmlwdG9ycy92YWx1ZXMgdmFyaWFibGUtbGVuZ3RoKi8KKwlPU0RfVjJfQVRUUl9MSVNUX01VTFRJUExFID0gMHhFLCAgLyogdmVyMiwgTXVsdGlwbGUgT2JqZWN0cyBsaXN0cyovCisJT1NEX1YxX0FUVFJfTElTVF9DUkVBVEVfTVVMVElQTEUgPSAweEYsLyp2ZXIxLCB1c2VkIGJ5IGNyZWF0ZV9tdWx0cGxlKi8KK307CisKKy8qIG9zZDJyMDM6IDcuMS4zLjQgTXVsdGktb2JqZWN0IHJldHJpZXZlZCBhdHRyaWJ1dGVzIGZvcm1hdCAqLworc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfbXVsdGlfaGVhZGVyIHsKKwlfX2JlNjQgb2JqZWN0X2lkOworCXU4IG9iamVjdF90eXBlOyAvKiBvYmplY3RfdHlwZSBlbnVtIGJlbG93ICovCisJdTggcmVzZXJ2ZWRbNV07CisJX19iZTE2IGxpc3RfYnl0ZXM7CisJLyogZm9sbG93ZWQgYnkgc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCdzICovCit9OworCitzdHJ1Y3Qgb3NkdjFfYXR0cmlidXRlc19saXN0X2hlYWRlciB7CisJdTggdHlwZTsJLyogbG93IDQtYml0IG9ubHkgKi8KKwl1OCBwYWQ7CisJX19iZTE2IGxpc3RfYnl0ZXM7IC8qIEluaXRpYXRvciBzaGFsbCBzZXQgdG8gWmVyby4gT25seSBzZXQgYnkgdGFyZ2V0ICovCisJLyoKKwkgKiB0eXBlPTkgZm9sbG93ZWQgYnkgc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCdzCisJICogdHlwZT1FIGZvbGxvd2VkIGJ5IHN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X211bHRpX2hlYWRlcidzCisJICovCit9IF9fcGFja2VkOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG9zZHYxX2xpc3Rfc2l6ZShzdHJ1Y3Qgb3NkdjFfYXR0cmlidXRlc19saXN0X2hlYWRlciAqaCkKK3sKKwlyZXR1cm4gYmUxNl90b19jcHUoaC0+bGlzdF9ieXRlcyk7Cit9CisKK3N0cnVjdCBvc2R2Ml9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyIHsKKwl1OCB0eXBlOwkvKiBsb3dlciA0LWJpdHMgb25seSAqLworCXU4IHBhZFszXTsKKy8qNCovCV9fYmUzMiBsaXN0X2J5dGVzOyAvKiBJbml0aWF0b3Igc2hhbGwgc2V0IHRvIHplcm8uIE9ubHkgc2V0IGJ5IHRhcmdldCAqLworCS8qCisJICogdHlwZT05IGZvbGxvd2VkIGJ5IHN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X2VsZW1lbnQncworCSAqIHR5cGU9RSBmb2xsb3dlZCBieSBzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9tdWx0aV9oZWFkZXIncworCSAqLworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBvc2R2Ml9saXN0X3NpemUoc3RydWN0IG9zZHYyX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIgKmgpCit7CisJcmV0dXJuIGJlMzJfdG9fY3B1KGgtPmxpc3RfYnl0ZXMpOworfQorCisvKiAob3NkLXIxMCA2LjEzKQorICogb3NkMnIwMzogNi4xNSBMSVNUIChUYWJsZSA3OSkgTElTVCBjb21tYW5kIHBhcmFtZXRlciBkYXRhLgorICoJZm9yIHJvb3RfbHN0Y2hnIGJlbG93CisgKi8KK2VudW0geworCU9TRF9PQkpfSURfTElTVF9QQVIgPSAweDEsIC8qIFYxLW9ubHkuIE5vdCB1c2VkIGluIFYyICovCisJT1NEX09CSl9JRF9MSVNUX0xTVENIRyA9IDB4MiwKK307CisKKy8qCisgKiBvc2QycjAzOiA2LjE1LjIgTElTVCBjb21tYW5kIHBhcmFtZXRlciBkYXRhCisgKiAoQWxzbyBmb3IgTElTVCBDT0xMRUNUSU9OKQorICovCitzdHJ1Y3Qgb3NkX29ial9pZF9saXN0IHsKKwlfX2JlNjQgbGlzdF9ieXRlczsgLyogYnl0ZXMgaW4gbGlzdCBleGNsdWRpbmcgbGlzdF9ieXRlcyAoLTgpICovCisJX19iZTY0IGNvbnRpbnVhdGlvbl9pZDsKKwlfX2JlMzIgbGlzdF9pZGVudGlmaWVyOworCXU4IHBhZFszXTsKKwl1OCByb290X2xzdGNoZzsKKwlfX2JlNjQgb2JqZWN0X2lkc1swXTsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBvc2RfaXNfb2JqX2xpc3RfZG9uZShzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0LAorCWJvb2wgKmlzX2NoYW5nZWQpCit7CisJKmlzX2NoYW5nZWQgPSAoMCAhPSAobGlzdC0+cm9vdF9sc3RjaGcgJiBPU0RfT0JKX0lEX0xJU1RfTFNUQ0hHKSk7CisJcmV0dXJuIDAgIT0gbGlzdC0+Y29udGludWF0aW9uX2lkOworfQorCisvKgorICogb3NkMnIwMzogNC4xMi40LjUgVGhlIEFMTERBVEEgc2VjdXJpdHkgbWV0aG9kCisgKi8KK3N0cnVjdCBvc2RfZGF0YV9vdXRfaW50ZWdyaXR5X2luZm8geworCV9fYmU2NCBkYXRhX2J5dGVzOworCV9fYmU2NCBzZXRfYXR0cmlidXRlc19ieXRlczsKKwlfX2JlNjQgZ2V0X2F0dHJpYnV0ZXNfYnl0ZXM7CisJX19iZTY0IGludGVncml0eV9jaGVja192YWx1ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBvc2RfZGF0YV9pbl9pbnRlZ3JpdHlfaW5mbyB7CisJX19iZTY0IGRhdGFfYnl0ZXM7CisJX19iZTY0IHJldHJpZXZlZF9hdHRyaWJ1dGVzX2J5dGVzOworCV9fYmU2NCBpbnRlZ3JpdHlfY2hlY2tfdmFsdWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCB7CisJdTggdGltZVs2XTsgLyogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxLzEvMTk3MCBVVCAoYmlnIGVuZGlhbikgKi8KK30gX19wYWNrZWQ7CisvKiBGSVhNRTogZGVmaW5lIGhlbHBlciBmdW5jdGlvbnMgdG8gY29udmVydCB0by9mcm9tIG9zZCB0aW1lIGZvcm1hdCAqLworCisvKgorICogQ2FwYWJpbGl0eSAmIFNlY3VyaXR5IGRlZmluaXRpb25zCisgKiBvc2QycjAzOiA0LjExLjIuMiBDYXBhYmlsaXR5IGZvcm1hdAorICogb3NkMnIwMzogNS4yLjggU2VjdXJpdHkgcGFyYW1ldGVycworICovCisKK3N0cnVjdCBvc2Rfa2V5X2lkZW50aWZpZXIgeworCXU4IGlkWzddOyAvKiBpZiB5b3Uga25vdyB3aHkgNyBwbGVhc2UgZW1haWwgYmhhcnJvc2hAcGFuYXNhcy5jb20gKi8KK30gX19wYWNrZWQ7CisKKy8qIGZvciBvc2RfY2FwYWJpbGl0eS5mb3JtYXQgKi8KK2VudW0geworCU9TRF9TRUNfQ0FQX0ZPUk1BVF9OT19DQVBTID0gMCwKKwlPU0RfU0VDX0NBUF9GT1JNQVRfVkVSMSA9IDEsCisJT1NEX1NFQ19DQVBfRk9STUFUX1ZFUjIgPSAyLAorfTsKKworLyogc2VjdXJpdHlfbWV0aG9kICovCitlbnVtIHsKKwlPU0RfU0VDX05PU0VDID0gMCwKKwlPU0RfU0VDX0NBUEtFWSA9IDEsCisJT1NEX1NFQ19DTURSU1AgPSAyLAorCU9TRF9TRUNfQUxMREFUQSA9IDMsCit9OworCitlbnVtIG9iamVjdF90eXBlIHsKKwlPU0RfU0VDX09CSl9ST09UID0gMHgxLAorCU9TRF9TRUNfT0JKX1BBUlRJVElPTiA9IDB4MiwKKwlPU0RfU0VDX09CSl9DT0xMRUNUSU9OID0gMHg0MCwKKwlPU0RfU0VDX09CSl9VU0VSID0gMHg4MCwKK307CisKK2VudW0gb3NkX2NhcGFiaWxpdHlfYml0X21hc2tzIHsKKwlPU0RfU0VDX0NBUF9BUFBFTkQJPSBCSVQoMCksCisJT1NEX1NFQ19DQVBfT0JKX01HTVQJPSBCSVQoMSksCisJT1NEX1NFQ19DQVBfUkVNT1ZFCT0gQklUKDIpLAorCU9TRF9TRUNfQ0FQX0NSRUFURQk9IEJJVCgzKSwKKwlPU0RfU0VDX0NBUF9TRVRfQVRUUgk9IEJJVCg0KSwKKwlPU0RfU0VDX0NBUF9HRVRfQVRUUgk9IEJJVCg1KSwKKwlPU0RfU0VDX0NBUF9XUklURQk9IEJJVCg2KSwKKwlPU0RfU0VDX0NBUF9SRUFECT0gQklUKDcpLAorCisJT1NEX1NFQ19DQVBfTk9ORTEJPSBCSVQoOCksCisJT1NEX1NFQ19DQVBfTk9ORTIJPSBCSVQoOSksCisJT1NEX1NFQ19DQVBfTk9ORTMJPSBCSVQoMTApLAorCU9TRF9TRUNfQ0FQX1FVRVJZCT0gQklUKDExKSwgLyp2MiBvbmx5Ki8KKwlPU0RfU0VDX0NBUF9NX09CSkVDVAk9IEJJVCgxMiksIC8qdjIgb25seSovCisJT1NEX1NFQ19DQVBfUE9MX1NFQwk9IEJJVCgxMyksCisJT1NEX1NFQ19DQVBfR0xPQkFMCT0gQklUKDE0KSwKKwlPU0RfU0VDX0NBUF9ERVZfTUdNVAk9IEJJVCgxNSksCit9OworCisvKiBmb3Igb2JqZWN0X2Rlc2NyaXB0b3JfdHlwZSAoaGkgbmliYmxlIHVzZWQpICovCitlbnVtIHsKKwlPU0RfU0VDX09CSl9ERVNDX05PTkUgPSAwLCAgICAgLyogTm90IGFsbG93ZWQgKi8KKwlPU0RfU0VDX09CSl9ERVNDX09CSiA9IDEgPDwgNCwgLyogdjE6IGFsc28gY29sbGVjdGlvbiAqLworCU9TRF9TRUNfT0JKX0RFU0NfUEFSID0gMiA8PCA0LCAvKiBhbHNvIHJvb3QgKi8KKwlPU0RfU0VDX09CSl9ERVNDX0NPTCA9IDMgPDwgNCwgLyogdjIgb25seSAqLworfTsKKworLyogKG9zZC1yMTA6NC45LjIuMikKKyAqIG9zZDJyMDM6NC4xMS4yLjIgQ2FwYWJpbGl0eSBmb3JtYXQKKyAqLworc3RydWN0IG9zZF9jYXBhYmlsaXR5X2hlYWQgeworCXU4IGZvcm1hdDsgLyogbG93IG5pYmJsZSAqLworCXU4IGludGVncml0eV9hbGdvcml0aG1fX2tleV92ZXJzaW9uOyAvKiBNQUtFX0JZVEUoaW50ZWdfYWxnLCBrZXlfdmVyKSAqLworCXU4IHNlY3VyaXR5X21ldGhvZDsKKwl1OCByZXNlcnZlZDE7CisvKjA0Ki8Jc3RydWN0IG9zZF90aW1lc3RhbXAgZXhwaXJhdGlvbl90aW1lOworLyoxMCovCXU4IGF1ZGl0WzIwXTsKKy8qMzAqLwl1OCBkaXNjcmltaW5hdG9yWzEyXTsKKy8qNDIqLwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBvYmplY3RfY3JlYXRlZF90aW1lOworLyo0OCovCXU4IG9iamVjdF90eXBlOworLyo0OSovCXU4IHBlcm1pc3Npb25zX2JpdF9tYXNrWzVdOworLyo1NCovCXU4IHJlc2VydmVkMjsKKy8qNTUqLwl1OCBvYmplY3RfZGVzY3JpcHRvcl90eXBlOyAvKiBoaWdoIG5pYmJsZSAqLworfSBfX3BhY2tlZDsKKworLyo1NiB2MSovCitzdHJ1Y3Qgb3NkdjFfY2FwX29iamVjdF9kZXNjcmlwdG9yIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisvKjU2Ki8JCQlfX2JlMzIgcG9saWN5X2FjY2Vzc190YWc7CisvKjYwKi8JCQlfX2JlNjQgYWxsb3dlZF9wYXJ0aXRpb25faWQ7CisvKjY4Ki8JCQlfX2JlNjQgYWxsb3dlZF9vYmplY3RfaWQ7CisvKjc2Ki8JCQlfX2JlMzIgcmVzZXJ2ZWQ7CisJCX0gX19wYWNrZWQgb2JqX2Rlc2M7CisKKy8qNTYqLwkJdTggb2JqZWN0X2Rlc2NyaXB0b3JbMjRdOworCX07Cit9IF9fcGFja2VkOworLyo4MCB2MSovCisKKy8qNTYgdjIqLworc3RydWN0IG9zZF9jYXBfb2JqZWN0X2Rlc2NyaXB0b3IgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKy8qNTYqLwkJCV9fYmUzMiBhbGxvd2VkX2F0dHJpYnV0ZXNfYWNjZXNzOworLyo2MCovCQkJX19iZTMyIHBvbGljeV9hY2Nlc3NfdGFnOworLyo2NCovCQkJX19iZTE2IGJvb3RfZXBvY2g7CisvKjY2Ki8JCQl1OCByZXNlcnZlZFs2XTsKKy8qNzIqLwkJCV9fYmU2NCBhbGxvd2VkX3BhcnRpdGlvbl9pZDsKKy8qODAqLwkJCV9fYmU2NCBhbGxvd2VkX29iamVjdF9pZDsKKy8qODgqLwkJCV9fYmU2NCBhbGxvd2VkX3JhbmdlX2xlbmd0aDsKKy8qOTYqLwkJCV9fYmU2NCBhbGxvd2VkX3JhbmdlX3N0YXJ0OworCQl9IF9fcGFja2VkIG9ial9kZXNjOworCisvKjU2Ki8JCXU4IG9iamVjdF9kZXNjcmlwdG9yWzQ4XTsKKwl9OworfSBfX3BhY2tlZDsKKy8qMTA0IHYyKi8KKworc3RydWN0IG9zZHYxX2NhcGFiaWxpdHkgeworCXN0cnVjdCBvc2RfY2FwYWJpbGl0eV9oZWFkIGg7CisJc3RydWN0IG9zZHYxX2NhcF9vYmplY3RfZGVzY3JpcHRvciBvZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBvc2RfY2FwYWJpbGl0eSB7CisJc3RydWN0IG9zZF9jYXBhYmlsaXR5X2hlYWQgaDsKKy8qIAlzdHJ1Y3Qgb3NkX2NhcF9vYmplY3RfZGVzY3JpcHRvciBvZDsqLworCXN0cnVjdCBvc2R2MV9jYXBfb2JqZWN0X2Rlc2NyaXB0b3Igb2Q7IC8qIEZJWE1FOiBQZXRlIHJldi0wMDEgc3VwICovCit9IF9fcGFja2VkOworCisvKioKKyAqIG9zZF9zZWNfc2V0X2NhcHMgLSBzZXQgY2FwLWJpdHMgaW50byB0aGUgY2FwYWJpbGl0aWVzIGhlYWRlcgorICoKKyAqIEBjYXA6CVRoZSBvc2RfY2FwYWJpbGl0eV9oZWFkIHRvIHNldCBjYXAgYml0cyB0by4KKyAqIEBiaXRfbWFzazogCVVzZSBhbiBPUmVkIGxpc3Qgb2YgZW51bSBvc2RfY2FwYWJpbGl0eV9iaXRfbWFza3MgdmFsdWVzCisgKgorICogcGVybWlzc2lvbnNfYml0X21hc2sgaXMgdW5hbGlnbmVkIHVzZSBiZWxvdyB0byBzZXQgaW50byBjYXBzCisgKiBpbiBhIHZlcnNpb24gaW5kZXBlbmRlbnQgd2F5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvc2Rfc2VjX3NldF9jYXBzKHN0cnVjdCBvc2RfY2FwYWJpbGl0eV9oZWFkICpjYXAsCisJdTE2IGJpdF9tYXNrKQoreworCS8qCisJICpOb3RlOiBUaGUgYml0cyBhYm92ZSBhcmUgZGVmaW5lZCBMRSBvcmRlciB0aGlzIGlzIGJlY2F1c2UgdGhpcyB3YXkKKwkgKiAgICAgIHRoZXkgY2FuIGdyb3cgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIHRoZW4gMTYsIGFuZCBzdGlsbCByZXRhaW4KKwkgKiAgICAgIHRoZXJlIGNvbnN0YW50IHZhbHVlcy4KKwkgKi8KKwlwdXRfdW5hbGlnbmVkX2xlMTYoYml0X21hc2ssICZjYXAtPnBlcm1pc3Npb25zX2JpdF9tYXNrKTsKK30KKworI2VuZGlmIC8qIG5kZWYgX19PU0RfUFJPVE9DT0xfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvb3NkX3NlYy5oIGIvaW5jbHVkZS9zY3NpL29zZF9zZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzA5ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL29zZF9zZWMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogb3NkX3NlYy5oIC0gT1NEIHNlY3VyaXR5IG1hbmFnZXIgQVBJCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3JzOgorICogICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICogICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKgorICovCisjaWZuZGVmIF9fT1NEX1NFQ19IX18KKyNkZWZpbmUgX19PU0RfU0VDX0hfXworCisjaW5jbHVkZSAib3NkX3Byb3RvY29sLmgiCisjaW5jbHVkZSAib3NkX3R5cGVzLmgiCisKKy8qCisgKiBDb250YWlucyB0eXBlcyBhbmQgY29uc3RhbnRzIG9mIG9zZCBjYXBhYmlsaXRpZXMgYW5kIHNlY3VyaXR5CisgKiBlbmNvZGluZy9kZWNvZGluZy4KKyAqIEFQSSBpcyB0cnlpbmcgdG8ga2VlcCBzZWN1cml0eSBhYnN0cmFjdCBzbyBpbml0aWF0b3Igb2YgYW4gb2JqZWN0CisgKiBiYXNlZCBwTkZTIGNsaWVudCBrbm93cyBhcyBsaXR0bGUgYXMgcG9zc2libGUgYWJvdXQgc2VjdXJpdHkgYW5kCisgKiBjYXBhYmlsaXRpZXMuIEl0IGlzIHRoZSBTZXJ2ZXIncyBvc2QtaW5pdGlhdG9yIHBsYWNlIHRvIGtub3cgbW9yZS4KKyAqIEFsc28gY2FuIGJlIHVzZWQgYnkgb3NkLXRhcmdldC4KKyAqLwordm9pZCBvc2Rfc2VjX2VuY29kZV9jYXBzKHZvaWQgKmNhcHMsIC4uLik7LyogTkkgKi8KK3ZvaWQgb3NkX3NlY19pbml0X25vc2VjX2RvYWxsX2NhcHModm9pZCAqY2FwcywKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCBib29sIGlzX2NvbGxlY3Rpb24sIGNvbnN0IGJvb2wgaXNfdjEpOworCitib29sIG9zZF9pc19zZWNfYWxsZGF0YShzdHJ1Y3Qgb3NkX3NlY3VyaXR5X3BhcmFtZXRlcnMgKnNlY19wYXJhbXMpOworCisvKiBDb25kaXRpb25hbGx5IHNpZ24gdGhlIENEQiBhY2NvcmRpbmcgdG8gc2VjdXJpdHkgc2V0dGluZyBpbiBvY2RiCisgKiB3aXRoIGNhcF9rZXkgKi8KK3ZvaWQgb3NkX3NlY19zaWduX2NkYihzdHJ1Y3Qgb3NkX2NkYiAqb2NkYiwgY29uc3QgdTggKmNhcF9rZXkpOworCisvKiBVbmNvbmRpdGlvbmFsbHkgc2lnbiB0aGUgQklPIGRhdGEgd2l0aCBjYXBfa2V5LgorICogQ2hlY2sgZm9yIG9zZF9pc19zZWNfYWxsZGF0YSgpIHdhcyBkb25lIHByaW9yIHRvIGNhbGxpbmcgdGhpcy4gKi8KK3ZvaWQgb3NkX3NlY19zaWduX2RhdGEodm9pZCAqZGF0YV9pbnRlZywgc3RydWN0IGJpbyAqYmlvLCBjb25zdCB1OCAqY2FwX2tleSk7CisKKy8qIFZlcnNpb24gaW5kZXBlbmRlbnQgY29weSBvZiBjYXBzIGludG8gdGhlIGNkYiAqLwordm9pZCBvc2Rfc2V0X2NhcHMoc3RydWN0IG9zZF9jZGIgKmNkYiwgY29uc3Qgdm9pZCAqY2Fwcyk7CisKKyNlbmRpZiAvKiBuZGVmIF9fT1NEX1NFQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2Rfc2Vuc2UuaCBiL2luY2x1ZGUvc2NzaS9vc2Rfc2Vuc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjliMzNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL29zZF9zZW5zZS5oCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogb3NkX3NlbnNlLmggLSBPU0QgUmVsYXRlZCBzZW5zZSBoYW5kbGluZyBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKiAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdHlwZXMgYW5kIGNvbnN0YW50cyB0aGF0IGFyZSBkZWZpbmVkIGJ5IHRoZSBwcm90b2NvbAorICogTm90ZTogQWxsIG5hbWVzIGFuZCBzeW1ib2xzIGFyZSB0YWtlbiBmcm9tIHRoZSBPU0Qgc3RhbmRhcmQncyB0ZXh0LgorICovCisjaWZuZGVmIF9fT1NEX1NFTlNFX0hfXworI2RlZmluZSBfX09TRF9TRU5TRV9IX18KKworI2luY2x1ZGUgPHNjc2kvb3NkX3Byb3RvY29sLmg+CisKKy8qIFNQQzNyMjMgNC41LjYgU2Vuc2Uga2V5IGFuZCBzZW5zZSBjb2RlIGRlZmluaXRpb25zIHRhYmxlIDI3ICovCitlbnVtIHNjc2lfc2Vuc2Vfa2V5cyB7CisJc2NzaV9za19ub19zZW5zZSAgICAgICAgPSAweDAsCisJc2NzaV9za19yZWNvdmVyZWRfZXJyb3IgPSAweDEsCisJc2NzaV9za19ub3RfcmVhZHkgICAgICAgPSAweDIsCisJc2NzaV9za19tZWRpdW1fZXJyb3IgICAgPSAweDMsCisJc2NzaV9za19oYXJkd2FyZV9lcnJvciAgPSAweDQsCisJc2NzaV9za19pbGxlZ2FsX3JlcXVlc3QgPSAweDUsCisJc2NzaV9za191bml0X2F0dGVudGlvbiAgPSAweDYsCisJc2NzaV9za19kYXRhX3Byb3RlY3QgICAgPSAweDcsCisJc2NzaV9za19ibGFua19jaGVjayAgICAgPSAweDgsCisJc2NzaV9za192ZW5kb3Jfc3BlY2lmaWMgPSAweDksCisJc2NzaV9za19jb3B5X2Fib3J0ZWQgICAgPSAweGEsCisJc2NzaV9za19hYm9ydGVkX2NvbW1hbmQgPSAweGIsCisJc2NzaV9za192b2x1bWVfb3ZlcmZsb3cgPSAweGQsCisJc2NzaV9za19taXNjb21wYXJlICAgICAgPSAweGUsCisJc2NzaV9za19yZXNlcnZlZCAgICAgICAgPSAweGYsCit9OworCisvKiBTUEMzcjIzIDQuNS42IFNlbnNlIGtleSBhbmQgc2Vuc2UgY29kZSBkZWZpbml0aW9ucyB0YWJsZSAyOCAqLworLyogTm90ZTogb25seSB0aG9zZSB3aGljaCBjYW4gYmUgcmV0dXJuZWQgYnkgYW4gT1NEIHRhcmdldC4gTW9zdCBvZgorICogICAgICAgdGhlc2UgZXJyb3JzIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBnZW5lcmljIHNjc2kgbGF5ZXIuCisgKi8KK2VudW0gb3NkX2FkZGl0aW9uYWxfc2Vuc2VfY29kZXMgeworCXNjc2lfbm9fYWRkaXRpb25hbF9zZW5zZV9pbmZvcm1hdGlvbgkJCT0gMHgwMDAwLAorCXNjc2lfb3BlcmF0aW9uX2luX3Byb2dyZXNzCQkJCT0gMHgwMDE2LAorCXNjc2lfY2xlYW5pbmdfcmVxdWVzdGVkCQkJCQk9IDB4MDAxNywKKwlzY3NpX2x1bnJfY2F1c2Vfbm90X3JlcG9ydGFibGUJCQkJPSAweDA0MDAsCisJc2NzaV9sb2dpY2FsX3VuaXRfaXNfaW5fcHJvY2Vzc19vZl9iZWNvbWluZ19yZWFkeQk9IDB4MDQwMSwKKwlzY3NpX2x1bnJfaW5pdGlhbGl6aW5nX2NvbW1hbmRfcmVxdWlyZWQJCQk9IDB4MDQwMiwKKwlzY3NpX2x1bnJfbWFudWFsX2ludGVydmVudGlvbl9yZXF1aXJlZAkJCT0gMHgwNDAzLAorCXNjc2lfbHVucl9vcGVyYXRpb25faW5fcHJvZ3Jlc3MJCQkJPSAweDA0MDcsCisJc2NzaV9sdW5yX3NlbGZ0ZXN0X2luX3Byb2dyZXNzCQkJCT0gMHgwNDA5LAorCXNjc2lfbHVuYV9hc3ltbWV0cmljX2FjY2Vzc19zdGF0ZV90cmFuc2l0aW9uCQk9IDB4MDQwYSwKKwlzY3NpX2x1bmFfdGFyZ2V0X3BvcnRfaW5fc3RhbmRieV9zdGF0ZQkJCT0gMHgwNDBiLAorCXNjc2lfbHVuYV90YXJnZXRfcG9ydF9pbl91bmF2YWlsYWJsZV9zdGF0ZQkJPSAweDA0MGMsCisJc2NzaV9sdW5yX25vdGlmeV9lbmFibGVfc3BpbnVwX3JlcXVpcmVkCQkJPSAweDA0MTEsCisJc2NzaV9sb2dpY2FsX3VuaXRfZG9lc19ub3RfcmVzcG9uZF90b19zZWxlY3Rpb24JCT0gMHgwNTAwLAorCXNjc2lfbG9naWNhbF91bml0X2NvbW11bmljYXRpb25fZmFpbHVyZQkJCT0gMHgwODAwLAorCXNjc2lfbG9naWNhbF91bml0X2NvbW11bmljYXRpb25fdGltZW91dAkJCT0gMHgwODAxLAorCXNjc2lfbG9naWNhbF91bml0X2NvbW11bmljYXRpb25fcGFyaXR5X2Vycm9yCQk9IDB4MDgwMiwKKwlzY3NpX2Vycm9yX2xvZ19vdmVyZmxvdwkJCQkJPSAweDBhMDAsCisJc2NzaV93YXJuaW5nCQkJCQkJPSAweDBiMDAsCisJc2NzaV93YXJuaW5nX3NwZWNpZmllZF90ZW1wZXJhdHVyZV9leGNlZWRlZAkJPSAweDBiMDEsCisJc2NzaV93YXJuaW5nX2VuY2xvc3VyZV9kZWdyYWRlZAkJCQk9IDB4MGIwMiwKKwlzY3NpX3dyaXRlX2Vycm9yX3VuZXhwZWN0ZWRfdW5zb2xpY2l0ZWRfZGF0YQkJPSAweDBjMGMsCisJc2NzaV93cml0ZV9lcnJvcl9ub3RfZW5vdWdoX3Vuc29saWNpdGVkX2RhdGEJCT0gMHgwYzBkLAorCXNjc2lfaW52YWxpZF9pbmZvcm1hdGlvbl91bml0CQkJCT0gMHgwZTAwLAorCXNjc2lfaW52YWxpZF9maWVsZF9pbl9jb21tYW5kX2luZm9ybWF0aW9uX3VuaXQJCT0gMHgwZTAzLAorCXNjc2lfcmVhZF9lcnJvcl9mYWlsZWRfcmV0cmFuc21pc3Npb25fcmVxdWVzdAkJPSAweDExMTMsCisJc2NzaV9wYXJhbWV0ZXJfbGlzdF9sZW5ndGhfZXJyb3IJCQk9IDB4MWEwMCwKKwlzY3NpX2ludmFsaWRfY29tbWFuZF9vcGVyYXRpb25fY29kZQkJCT0gMHgyMDAwLAorCXNjc2lfaW52YWxpZF9maWVsZF9pbl9jZGIJCQkJPSAweDI0MDAsCisJb3NkX3NlY3VyaXR5X2F1ZGl0X3ZhbHVlX2Zyb3plbgkJCQk9IDB4MjQwNCwKKwlvc2Rfc2VjdXJpdHlfd29ya2luZ19rZXlfZnJvemVuCQkJCT0gMHgyNDA1LAorCW9zZF9ub25jZV9ub3RfdW5pcXVlCQkJCQk9IDB4MjQwNiwKKwlvc2Rfbm9uY2VfdGltZXN0YW1wX291dF9vZl9yYW5nZQkJCT0gMHgyNDA3LAorCXNjc2lfbG9naWNhbF91bml0X25vdF9zdXBwb3J0ZWQJCQkJPSAweDI1MDAsCisJc2NzaV9pbnZhbGlkX2ZpZWxkX2luX3BhcmFtZXRlcl9saXN0CQkJPSAweDI2MDAsCisJc2NzaV9wYXJhbWV0ZXJfbm90X3N1cHBvcnRlZAkJCQk9IDB4MjYwMSwKKwlzY3NpX3BhcmFtZXRlcl92YWx1ZV9pbnZhbGlkCQkJCT0gMHgyNjAyLAorCXNjc2lfaW52YWxpZF9yZWxlYXNlX29mX3BlcnNpc3RlbnRfcmVzZXJ2YXRpb24JCT0gMHgyNjA0LAorCW9zZF9pbnZhbGlkX2RhdGFvdXRfYnVmZmVyX2ludGVncml0eV9jaGVja192YWx1ZQk9IDB4MjYwZiwKKwlzY3NpX25vdF9yZWFkeV90b19yZWFkeV9jaGFuZ2VfbWVkaXVtX21heV9oYXZlX2NoYW5nZWQJPSAweDI4MDAsCisJc2NzaV9wb3dlcl9vbl9yZXNldF9vcl9idXNfZGV2aWNlX3Jlc2V0X29jY3VycmVkCT0gMHgyOTAwLAorCXNjc2lfcG93ZXJfb25fb2NjdXJyZWQJCQkJCT0gMHgyOTAxLAorCXNjc2lfc2NzaV9idXNfcmVzZXRfb2NjdXJyZWQJCQkJPSAweDI5MDIsCisJc2NzaV9idXNfZGV2aWNlX3Jlc2V0X2Z1bmN0aW9uX29jY3VycmVkCQkJPSAweDI5MDMsCisJc2NzaV9kZXZpY2VfaW50ZXJuYWxfcmVzZXQJCQkJPSAweDI5MDQsCisJc2NzaV90cmFuc2NlaXZlcl9tb2RlX2NoYW5nZWRfdG9fc2luZ2xlX2VuZGVkCQk9IDB4MjkwNSwKKwlzY3NpX3RyYW5zY2VpdmVyX21vZGVfY2hhbmdlZF90b19sdmQJCQk9IDB4MjkwNiwKKwlzY3NpX2lfdF9uZXh1c19sb3NzX29jY3VycmVkCQkJCT0gMHgyOTA3LAorCXNjc2lfcGFyYW1ldGVyc19jaGFuZ2VkCQkJCQk9IDB4MmEwMCwKKwlzY3NpX21vZGVfcGFyYW1ldGVyc19jaGFuZ2VkCQkJCT0gMHgyYTAxLAorCXNjc2lfYXN5bW1ldHJpY19hY2Nlc3Nfc3RhdGVfY2hhbmdlZAkJCT0gMHgyYTA2LAorCXNjc2lfcHJpb3JpdHlfY2hhbmdlZAkJCQkJPSAweDJhMDgsCisJc2NzaV9jb21tYW5kX3NlcXVlbmNlX2Vycm9yCQkJCT0gMHgyYzAwLAorCXNjc2lfcHJldmlvdXNfYnVzeV9zdGF0dXMJCQkJPSAweDJjMDcsCisJc2NzaV9wcmV2aW91c190YXNrX3NldF9mdWxsX3N0YXR1cwkJCT0gMHgyYzA4LAorCXNjc2lfcHJldmlvdXNfcmVzZXJ2YXRpb25fY29uZmxpY3Rfc3RhdHVzCQk9IDB4MmMwOSwKKwlvc2RfcGFydGl0aW9uX29yX2NvbGxlY3Rpb25fY29udGFpbnNfdXNlcl9vYmplY3RzCT0gMHgyYzBhLAorCXNjc2lfY29tbWFuZHNfY2xlYXJlZF9ieV9hbm90aGVyX2luaXRpYXRvcgkJPSAweDJmMDAsCisJc2NzaV9jbGVhbmluZ19mYWlsdXJlCQkJCQk9IDB4MzAwNywKKwlzY3NpX2VuY2xvc3VyZV9mYWlsdXJlCQkJCQk9IDB4MzQwMCwKKwlzY3NpX2VuY2xvc3VyZV9zZXJ2aWNlc19mYWlsdXJlCQkJCT0gMHgzNTAwLAorCXNjc2lfdW5zdXBwb3J0ZWRfZW5jbG9zdXJlX2Z1bmN0aW9uCQkJPSAweDM1MDEsCisJc2NzaV9lbmNsb3N1cmVfc2VydmljZXNfdW5hdmFpbGFibGUJCQk9IDB4MzUwMiwKKwlzY3NpX2VuY2xvc3VyZV9zZXJ2aWNlc190cmFuc2Zlcl9mYWlsdXJlCQk9IDB4MzUwMywKKwlzY3NpX2VuY2xvc3VyZV9zZXJ2aWNlc190cmFuc2Zlcl9yZWZ1c2VkCQk9IDB4MzUwNCwKKwlzY3NpX2VuY2xvc3VyZV9zZXJ2aWNlc19jaGVja3N1bV9lcnJvcgkJCT0gMHgzNTA1LAorCXNjc2lfcm91bmRlZF9wYXJhbWV0ZXIJCQkJCT0gMHgzNzAwLAorCW9zZF9yZWFkX3Bhc3RfZW5kX29mX3VzZXJfb2JqZWN0CQkJPSAweDNiMTcsCisJc2NzaV9sb2dpY2FsX3VuaXRfaGFzX25vdF9zZWxmX2NvbmZpZ3VyZWRfeWV0CQk9IDB4M2UwMCwKKwlzY3NpX2xvZ2ljYWxfdW5pdF9mYWlsdXJlCQkJCT0gMHgzZTAxLAorCXNjc2lfdGltZW91dF9vbl9sb2dpY2FsX3VuaXQJCQkJPSAweDNlMDIsCisJc2NzaV9sb2dpY2FsX3VuaXRfZmFpbGVkX3NlbGZ0ZXN0CQkJPSAweDNlMDMsCisJc2NzaV9sb2dpY2FsX3VuaXRfdW5hYmxlX3RvX3VwZGF0ZV9zZWxmdGVzdF9sb2cJCT0gMHgzZTA0LAorCXNjc2lfdGFyZ2V0X29wZXJhdGluZ19jb25kaXRpb25zX2hhdmVfY2hhbmdlZAkJPSAweDNmMDAsCisJc2NzaV9taWNyb2NvZGVfaGFzX2JlZW5fY2hhbmdlZAkJCQk9IDB4M2YwMSwKKwlzY3NpX2lucXVpcnlfZGF0YV9oYXNfY2hhbmdlZAkJCQk9IDB4M2YwMywKKwlzY3NpX2VjaG9fYnVmZmVyX292ZXJ3cml0dGVuCQkJCT0gMHgzZjBmLAorCXNjc2lfZGlhZ25vc3RpY19mYWlsdXJlX29uX2NvbXBvbmVudF9ubl9maXJzdAkJPSAweDQwODAsCisJc2NzaV9kaWFnbm9zdGljX2ZhaWx1cmVfb25fY29tcG9uZW50X25uX2xhc3QJCT0gMHg0MGZmLAorCXNjc2lfbWVzc2FnZV9lcnJvcgkJCQkJPSAweDQzMDAsCisJc2NzaV9pbnRlcm5hbF90YXJnZXRfZmFpbHVyZQkJCQk9IDB4NDQwMCwKKwlzY3NpX3NlbGVjdF9vcl9yZXNlbGVjdF9mYWlsdXJlCQkJCT0gMHg0NTAwLAorCXNjc2lfc2NzaV9wYXJpdHlfZXJyb3IJCQkJCT0gMHg0NzAwLAorCXNjc2lfZGF0YV9waGFzZV9jcmNfZXJyb3JfZGV0ZWN0ZWQJCQk9IDB4NDcwMSwKKwlzY3NpX3Njc2lfcGFyaXR5X2Vycm9yX2RldGVjdGVkX2R1cmluZ19zdF9kYXRhX3BoYXNlCT0gMHg0NzAyLAorCXNjc2lfYXN5bmNocm9ub3VzX2luZm9ybWF0aW9uX3Byb3RlY3Rpb25fZXJyb3JfZGV0ZWN0ZWQJPSAweDQ3MDQsCisJc2NzaV9wcm90b2NvbF9zZXJ2aWNlX2NyY19lcnJvcgkJCQk9IDB4NDcwNSwKKwlzY3NpX3BoeV90ZXN0X2Z1bmN0aW9uX2luX3Byb2dyZXNzCQkJPSAweDQ3MDYsCisJc2NzaV9pbnZhbGlkX21lc3NhZ2VfZXJyb3IJCQkJPSAweDQ5MDAsCisJc2NzaV9jb21tYW5kX3BoYXNlX2Vycm9yCQkJCT0gMHg0YTAwLAorCXNjc2lfZGF0YV9waGFzZV9lcnJvcgkJCQkJPSAweDRiMDAsCisJc2NzaV9sb2dpY2FsX3VuaXRfZmFpbGVkX3NlbGZfY29uZmlndXJhdGlvbgkJPSAweDRjMDAsCisJc2NzaV9vdmVybGFwcGVkX2NvbW1hbmRzX2F0dGVtcHRlZAkJCT0gMHg0ZTAwLAorCW9zZF9xdW90YV9lcnJvcgkJCQkJCT0gMHg1NTA3LAorCXNjc2lfZmFpbHVyZV9wcmVkaWN0aW9uX3RocmVzaG9sZF9leGNlZWRlZAkJPSAweDVkMDAsCisJc2NzaV9mYWlsdXJlX3ByZWRpY3Rpb25fdGhyZXNob2xkX2V4Y2VlZGVkX2ZhbHNlCT0gMHg1ZGZmLAorCXNjc2lfdm9sdGFnZV9mYXVsdAkJCQkJPSAweDY1MDAsCit9OworCitlbnVtIHNjc2lfZGVzY3JpcHRvcl90eXBlcyB7CisJc2NzaV9zZW5zZV9pbmZvcm1hdGlvbgkJCT0gMHgwLAorCXNjc2lfc2Vuc2VfY29tbWFuZF9zcGVjaWZpY19pbmZvcm1hdGlvbgk9IDB4MSwKKwlzY3NpX3NlbnNlX2tleV9zcGVjaWZpYwkJCT0gMHgyLAorCXNjc2lfc2Vuc2VfZmllbGRfcmVwbGFjZWFibGVfdW5pdAk9IDB4MywKKwlzY3NpX3NlbnNlX3N0cmVhbV9jb21tYW5kcwkJPSAweDQsCisJc2NzaV9zZW5zZV9ibG9ja19jb21tYW5kcwkJPSAweDUsCisJb3NkX3NlbnNlX29iamVjdF9pZGVudGlmaWNhdGlvbgkJPSAweDYsCisJb3NkX3NlbnNlX3Jlc3BvbnNlX2ludGVncml0eV9jaGVjawk9IDB4NywKKwlvc2Rfc2Vuc2VfYXR0cmlidXRlX2lkZW50aWZpY2F0aW9uCT0gMHg4LAorCXNjc2lfc2Vuc2VfYXRhX3JldHVybgkJCT0gMHg5LAorCisJc2NzaV9zZW5zZV9SZXNlcnZlZF9maXJzdAkJPSAweDBBLAorCXNjc2lfc2Vuc2VfUmVzZXJ2ZWRfbGFzdAkJPSAweDdGLAorCXNjc2lfc2Vuc2VfVmVuZG9yX3NwZWNpZmljX2ZpcnN0CT0gMHg4MCwKKwlzY3NpX3NlbnNlX1ZlbmRvcl9zcGVjaWZpY19sYXN0CQk9IDB4RkYsCit9OworCitzdHJ1Y3Qgc2NzaV9zZW5zZV9kZXNjcmlwdG9yIHsgLyogZm9yIHBpY2tpbmcgaW50byBkZXNjIHR5cGUgKi8KKwl1OAlkZXNjcmlwdG9yX3R5cGU7IC8qIG9uZSBvZiBlbnVtIHNjc2lfZGVzY3JpcHRvcl90eXBlcyAqLworCXU4CWFkZGl0aW9uYWxfbGVuZ3RoOyAvKiBuIC0gMSAqLworCXU4CWRhdGFbXTsKK30gX19wYWNrZWQ7CisKKy8qIE9TRCBkZXBsb3lzIG9ubHkgc2NzaSBkZXNjcmlwdG9yX2Jhc2VkIHNlbnNlIGJ1ZmZlcnMgKi8KK3N0cnVjdCBzY3NpX3NlbnNlX2Rlc2NyaXB0b3JfYmFzZWQgeworLyowKi8JdTggCXJlc3BvbnNlX2NvZGU7IC8qIDB4NzIgb3IgMHg3MyAqLworLyoxKi8JdTggCXNlbnNlX2tleTsgLyogb25lIG9mIGVudW0gc2NzaV9zZW5zZV9rZXlzICg0IGxvd2VyIGJpdHMpICovCisvKjIqLwlfX2JlMTYJYWRkaXRpb25hbF9zZW5zZV9jb2RlOyAvKiBlbnVtIG9zZF9hZGRpdGlvbmFsX3NlbnNlX2NvZGVzICovCisvKjQqLwl1OAlSZXNlcnZlZFszXTsKKy8qNyovCXU4CWFkZGl0aW9uYWxfc2Vuc2VfbGVuZ3RoOyAvKiBuIC0gNyAqLworLyo4Ki8Jc3RydWN0CXNjc2lfc2Vuc2VfZGVzY3JpcHRvciBzc2RbMF07IC8qIHZhcmlhYmxlIGxlbmd0aCwgMSBvciBtb3JlICovCit9IF9fcGFja2VkOworCisvKiBzb21lIGRlc2NyaXB0b3JzIGRlcGxveWVkIGJ5IE9TRCAqLworCisvKiBTUEMzcjIzIDQuNS4yLjMgQ29tbWFuZC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBzZW5zZSBkYXRhIGRlc2NyaXB0b3IgKi8KKy8qIE5vdGU6IHRoaXMgaXMgdGhlIHNhbWUgZm9yIGRlc2NyaXB0b3JfdHlwZT0wMCBidXQgd2l0aCB0eXBlPTAwIHRoZQorICogICAgICAgIFJlc2VydmVkWzBdID09IDB4ODAgKGllLiBiaXQtNyBzZXQpCisgKi8KK3N0cnVjdCBzY3NpX3NlbnNlX2NvbW1hbmRfc3BlY2lmaWNfZGF0YV9kZXNjcmlwdG9yIHsKKy8qMCovCXU4CWRlc2NyaXB0b3JfdHlwZTsgLyogKDAwaC8wMWgpICovCisvKjEqLwl1OAlhZGRpdGlvbmFsX2xlbmd0aDsgLyogKDBBaCkgKi8KKy8qMiovCXU4CVJlc2VydmVkWzJdOworLyo0Ki8JX19iZTY0ICBpbmZvcm1hdGlvbjsKK30gX19wYWNrZWQ7CisvKjEyKi8KKworc3RydWN0IHNjc2lfc2Vuc2Vfa2V5X3NwZWNpZmljX2RhdGFfZGVzY3JpcHRvciB7CisvKjAqLwl1OAlkZXNjcmlwdG9yX3R5cGU7IC8qICgwMmgpICovCisvKjEqLwl1OAlhZGRpdGlvbmFsX2xlbmd0aDsgLyogKDA2aCkgKi8KKy8qMiovCXU4CVJlc2VydmVkWzJdOworLyogU0tTViwgQy9ELCBSZXNlcnZlZCAoMiksIEJQViwgQklUIFBPSU5URVIgKDMpICovCisvKjQqLwl1OAlza3N2X2NkX2Jwdl9icDsKKy8qNSovCV9fYmUxNgl2YWx1ZTsgLyogZmllbGQtcG9pbnRlci9wcm9ncmVzcy12YWx1ZS9yZXRyeS1jb3VudC8uLi4gKi8KKy8qNyovCXU4CVJlc2VydmVkMjsKK30gX19wYWNrZWQ7CisvKjgqLworCisvKiA0LjE2LjIuMSBPU0QgZXJyb3IgaWRlbnRpZmljYXRpb24gc2Vuc2UgZGF0YSBkZXNjcmlwdG9yIC0gdGFibGUgNTIgKi8KKy8qIE5vdGU6IHRoZXNlIGJpdHMgYXJlIGRlZmluZWQgTEUgb3JkZXIgZm9yIGVhc3kgZGVmaW5pdGlvbiwgdGhpcyB3YXkgdGhlIEJJVCgpCisgKiBudW1iZXIgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24uIEJlbG93IG1lbWJlcnMgYXQKKyAqIG9zZF9zZW5zZV9pZGVudGlmaWNhdGlvbl9kYXRhX2Rlc2NyaXB0b3IgYXJlIHRoZXJlZm9yZSBkZWZpbmVkIF9fbGUzMi4KKyAqLworZW51bSBvc2RfY29tbWFuZF9mdW5jdGlvbnNfYml0cyB7CisJT1NEX0NGQl9DT01NQU5ECQkgPSBCSVQoNCksCisJT1NEX0NGQl9DTURfQ0FQX1ZFUklGSUVEID0gQklUKDUpLAorCU9TRF9DRkJfVkFMSURBVElPTgkgPSBCSVQoNyksCisJT1NEX0NGQl9JTVBfU1RfQVRUCSA9IEJJVCgxMiksCisJT1NEX0NGQl9TRVRfQVRUCQkgPSBCSVQoMjApLAorCU9TRF9DRkJfU0FfQ0FQX1ZFUklGSUVECSA9IEJJVCgyMSksCisJT1NEX0NGQl9HRVRfQVRUCQkgPSBCSVQoMjgpLAorCU9TRF9DRkJfR0FfQ0FQX1ZFUklGSUVECSA9IEJJVCgyOSksCit9OworCitzdHJ1Y3Qgb3NkX3NlbnNlX2lkZW50aWZpY2F0aW9uX2RhdGFfZGVzY3JpcHRvciB7CisvKjAqLwl1OAlkZXNjcmlwdG9yX3R5cGU7IC8qICgwNmgpICovCisvKjEqLwl1OAlhZGRpdGlvbmFsX2xlbmd0aDsgLyogKDFFaCkgKi8KKy8qMiovCXU4CVJlc2VydmVkWzZdOworLyo4Ki8JX19sZTMyCW5vdF9pbml0aWF0ZWRfZnVuY3Rpb25zOyAvKm9zZF9jb21tYW5kX2Z1bmN0aW9uc19iaXRzKi8KKy8qMTIqLwlfX2xlMzIJY29tcGxldGVkX2Z1bmN0aW9uczsgLypvc2RfY29tbWFuZF9mdW5jdGlvbnNfYml0cyovCisvKjE2Ki8gCV9fYmU2NAlwYXJ0aXRpb25faWQ7CisvKjI0Ki8JX19iZTY0CW9iamVjdF9pZDsKK30gX19wYWNrZWQ7CisvKjMyKi8KKworc3RydWN0IG9zZF9zZW5zZV9yZXNwb25zZV9pbnRlZ3JpdHlfY2hlY2tfZGVzY3JpcHRvciB7CisvKjAqLwl1OAlkZXNjcmlwdG9yX3R5cGU7IC8qICgwN2gpICovCisvKjEqLwl1OAlhZGRpdGlvbmFsX2xlbmd0aDsgLyogKDIwaCkgKi8KKy8qMiovCXU4CWludGVncml0eV9jaGVja192YWx1ZVszMl07IC8qRklYTUU6IE9TRHYyX0NSWVBUT19LRVlJRF9TSVpFKi8KK30gX19wYWNrZWQ7CisvKjM0Ki8KKworc3RydWN0IG9zZF9zZW5zZV9hdHRyaWJ1dGVzX2RhdGFfZGVzY3JpcHRvciB7CisvKjAqLwl1OAlkZXNjcmlwdG9yX3R5cGU7IC8qICgwOGgpICovCisvKjEqLwl1OAlhZGRpdGlvbmFsX2xlbmd0aDsgLyogKG4tMikgKi8KKy8qMiovCXU4CVJlc2VydmVkWzZdOworCXN0cnVjdCBvc2Rfc2Vuc2VfYXR0ciB7CisvKjgqLwkJX19iZTMyCWF0dHJfcGFnZTsKKy8qMTIqLwkJX19iZTMyCWF0dHJfaWQ7CisvKjE2Ki8JfSBzZW5zZV9hdHRyc1swXTsgLyogMSBvciBtb3JlICovCit9IF9fcGFja2VkOworLyp2YXJpYWJsZSovCisKKy8qIERpZyBpbnRvIHNjc2lfc2tfaWxsZWdhbF9yZXF1ZXN0L3Njc2lfaW52YWxpZF9maWVsZF9pbl9jZGIgZXJyb3JzICovCisKKy8qRklYTUU6IFN1cHBvcnQgYWxzbyBmaWVsZCBpbiBDQVBTKi8KKyNkZWZpbmUgT1NEX0NEQl9PRkZTRVQoRikgb2Zmc2V0b2Yoc3RydWN0IG9zZF9jZGJfaGVhZCwgRikKKworZW51bSBvc2R2Ml9jZGJfZmllbGRfb2Zmc2V0IHsKKwlPU0R2MV9DRk9fU1RBUlRJTkdfQllURQk9IE9TRF9DREJfT0ZGU0VUKHYxLnN0YXJ0X2FkZHJlc3MpLAorCU9TRF9DRk9fU1RBUlRJTkdfQllURQk9IE9TRF9DREJfT0ZGU0VUKHYyLnN0YXJ0X2FkZHJlc3MpLAorCU9TRF9DRk9fUEFSVElUSU9OX0lECT0gT1NEX0NEQl9PRkZTRVQocGFydGl0aW9uKSwKKwlPU0RfQ0ZPX09CSkVDVF9JRAk9IE9TRF9DREJfT0ZGU0VUKG9iamVjdCksCit9OworCisjZW5kaWYgLyogbmRlZiBfX09TRF9TRU5TRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2RfdHlwZXMuaCBiL2luY2x1ZGUvc2NzaS9vc2RfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjVlODhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL29zZF90eXBlcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBvc2RfdHlwZXMuaCAtIFR5cGVzIGFuZCBjb25zdGFudHMgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKiAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqCisgKiBDb250YWlucyB0eXBlcyBhbmQgY29uc3RhbnRzIHRoYXQgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBhcmUKKyAqIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBwYXJ0IG9mIHRoZSBvc2QgbGlicmFyeS4KKyAqICAgICAoRWcgaW5pdGlhdG9yL3RhcmdldC9zZWN1cml0eV9tYW5hZ2VyLy4uLikKKyAqLworI2lmbmRlZiBfX09TRF9UWVBFU19IX18KKyNkZWZpbmUgX19PU0RfVFlQRVNfSF9fCisKK3N0cnVjdCBvc2Rfc3lzdGVtaWQgeworCXU4IGRhdGFbT1NEX1NZU1RFTUlEX0xFTl07Cit9OworCit0eXBlZGVmIHU2NCBfX2JpdHdpc2Ugb3NkX2lkOworCitzdHJ1Y3Qgb3NkX29ial9pZCB7CisJb3NkX2lkIHBhcnRpdGlvbjsKKwlvc2RfaWQgaWQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IF9fd2VhayBvc2Rfb2JqX2lkIG9zZF9yb290X29iamVjdCA9IHswLCAwfTsKKworc3RydWN0IG9zZF9hdHRyIHsKKwl1MzIgYXR0cl9wYWdlOworCXUzMiBhdHRyX2lkOworCXUxNiBsZW47CQkvKiBieXRlIGNvdW50IG9mIG9wZXJhbmQgKi8KKwl2b2lkICp2YWxfcHRyOwkJLyogaW4gbmV0d29yayBvcmRlciAqLworfTsKKworI2VuZGlmIC8qIG5kZWYgX19PU0RfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCBhMTA5MTY1Li4wODQ0NzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTksNyArOSw4IEBACiAjZGVmaW5lIF9TQ1NJX1NDU0lfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCitzdHJ1Y3Qgc2NzaV9jbW5kOwogCiAvKgogICogVGhlIG1heGltdW0gbnVtYmVyIG9mIFNHIHNlZ21lbnRzIHRoYXQgd2Ugd2lsbCBwdXQgaW5zaWRlIGEKQEAgLTI2Myw2ICsyNjQsNyBAQAogI2RlZmluZSBUWVBFX1JBSUQgICAgICAgICAgIDB4MGMKICNkZWZpbmUgVFlQRV9FTkNMT1NVUkUgICAgICAweDBkICAgIC8qIEVuY2xvc3VyZSBTZXJ2aWNlcyBEZXZpY2UgKi8KICNkZWZpbmUgVFlQRV9SQkMJICAgIDB4MGUKKyNkZWZpbmUgVFlQRV9PU0QgICAgICAgICAgICAweDExCiAjZGVmaW5lIFRZUEVfTk9fTFVOICAgICAgICAgMHg3ZgogCiAvKiBTQ1NJIHByb3RvY29sczsgdGhlc2UgYXJlIHRha2VuIGZyb20gU1BDLTMgc2VjdGlvbiA3LjUgKi8KQEAgLTQwMiwxNiArNDA0LDYgQEAKICNkZWZpbmUgRFJJVkVSX0hBUkQgICAgICAgICAweDA3CiAjZGVmaW5lIERSSVZFUl9TRU5TRQkgICAgMHgwOAogCi0jZGVmaW5lIFNVR0dFU1RfUkVUUlkgICAgICAgMHgxMAotI2RlZmluZSBTVUdHRVNUX0FCT1JUICAgICAgIDB4MjAKLSNkZWZpbmUgU1VHR0VTVF9SRU1BUCAgICAgICAweDMwCi0jZGVmaW5lIFNVR0dFU1RfRElFICAgICAgICAgMHg0MAotI2RlZmluZSBTVUdHRVNUX1NFTlNFICAgICAgIDB4ODAKLSNkZWZpbmUgU1VHR0VTVF9JU19PSyAgICAgICAweGZmCi0KLSNkZWZpbmUgRFJJVkVSX01BU0sgICAgICAgICAweDBmCi0jZGVmaW5lIFNVR0dFU1RfTUFTSyAgICAgICAgMHhmMAotCiAvKgogICogSW50ZXJuYWwgcmV0dXJuIHZhbHVlcy4KICAqLwpAQCAtNDQ3LDIzICs0MzksNiBAQAogI2RlZmluZSBtc2dfYnl0ZShyZXN1bHQpICAgICgoKHJlc3VsdCkgPj4gOCkgJiAweGZmKQogI2RlZmluZSBob3N0X2J5dGUocmVzdWx0KSAgICgoKHJlc3VsdCkgPj4gMTYpICYgMHhmZikKICNkZWZpbmUgZHJpdmVyX2J5dGUocmVzdWx0KSAoKChyZXN1bHQpID4+IDI0KSAmIDB4ZmYpCi0jZGVmaW5lIHN1Z2dlc3Rpb24ocmVzdWx0KSAgKGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBTVUdHRVNUX01BU0spCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXNnX2J5dGUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyIHN0YXR1cykKLXsKLQljbWQtPnJlc3VsdCB8PSBzdGF0dXMgPDwgODsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9ob3N0X2J5dGUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyIHN0YXR1cykKLXsKLQljbWQtPnJlc3VsdCB8PSBzdGF0dXMgPDwgMTY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZHJpdmVyX2J5dGUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyIHN0YXR1cykKLXsKLQljbWQtPnJlc3VsdCB8PSBzdGF0dXMgPDwgMjQ7Ci19Ci0KIAogI2RlZmluZSBzZW5zZV9jbGFzcyhzZW5zZSkgICgoKHNlbnNlKSA+PiA0KSAmIDB4NykKICNkZWZpbmUgc2Vuc2VfZXJyb3Ioc2Vuc2UpICAoKHNlbnNlKSAmIDB4ZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAppbmRleCA4NTViZjk1Li40M2I1MGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCkBAIC0yOTEsNCArMjkxLDE5IEBACiAjZGVmaW5lIHNjc2lfZm9yX2VhY2hfcHJvdF9zZyhjbWQsIHNnLCBuc2VnLCBfX2kpCQlcCiAJZm9yX2VhY2hfc2coc2NzaV9wcm90X3NnbGlzdChjbWQpLCBzZywgbnNlZywgX19pKQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21zZ19ieXRlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY2hhciBzdGF0dXMpCit7CisJY21kLT5yZXN1bHQgfD0gc3RhdHVzIDw8IDg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaG9zdF9ieXRlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY2hhciBzdGF0dXMpCit7CisJY21kLT5yZXN1bHQgfD0gc3RhdHVzIDw8IDE2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RyaXZlcl9ieXRlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY2hhciBzdGF0dXMpCit7CisJY21kLT5yZXN1bHQgfD0gc3RhdHVzIDw8IDI0OworfQorCiAjZW5kaWYgLyogX1NDU0lfU0NTSV9DTU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggMDFhNGM1OC4uM2Y1NjZhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTM0MCw2ICszNDAsNyBAQAogCQkJICAgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKIGV4dGVybiBpbnQgc2NzaV90ZXN0X3VuaXRfcmVhZHkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGltZW91dCwKIAkJCQlpbnQgcmV0cmllcywgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7CitleHRlcm4gdW5zaWduZWQgY2hhciAqc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICosIHU4IHBhZ2UpOwogZXh0ZXJuIGludCBzY3NpX2RldmljZV9zZXRfc3RhdGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAogCQkJCSBlbnVtIHNjc2lfZGV2aWNlX3N0YXRlIHN0YXRlKTsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9ldmVudCAqc2Rldl9ldnRfYWxsb2MoZW51bSBzY3NpX2RldmljZV9ldmVudCBldnRfdHlwZSwKQEAgLTM3MCwxMiArMzcxLDYgQEAKIAkJCSAgICBpbnQgZGF0YV9kaXJlY3Rpb24sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKIAkJCSAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKiwgaW50IHRpbWVvdXQsIGludCByZXRyaWVzLAogCQkJICAgIGludCAqcmVzaWQpOwotZXh0ZXJuIGludCBzY3NpX2V4ZWN1dGVfYXN5bmMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY21kLCBpbnQgY21kX2xlbiwgaW50IGRhdGFfZGlyZWN0aW9uLAotCQkJICAgICAgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBidWZmbGVuLCBpbnQgdXNlX3NnLAotCQkJICAgICAgaW50IHRpbWVvdXQsIGludCByZXRyaWVzLCB2b2lkICpwcml2ZGF0YSwKLQkJCSAgICAgIHZvaWQgKCpkb25lKSh2b2lkICosIGNoYXIgKiwgaW50LCBpbnQpLAotCQkJICAgICAgZ2ZwX3QgZ2ZwKTsKIAogc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNjc2lfZGV2aWNlX3JlcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewpAQCAtNDAwLDcgKzM5NSw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX29ubGluZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0JcmV0dXJuIHNkZXYtPnNkZXZfc3RhdGUgIT0gU0RFVl9PRkZMSU5FOworCXJldHVybiAoc2Rldi0+c2Rldl9zdGF0ZSAhPSBTREVWX09GRkxJTkUgJiYKKwkJc2Rldi0+c2Rldl9zdGF0ZSAhPSBTREVWX0RFTCk7CiB9CiBzdGF0aWMgaW5saW5lIGludCBzY3NpX2RldmljZV9ibG9ja2VkKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmgKaW5kZXggYjUwYWFiZS4uNDU3NTg4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmgKQEAgLTg4LDcgKzg4LDcgQEAKIAl1aW50NjRfdCBob3N0X3BhcmFtX21hc2s7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICooKmNyZWF0ZV9zZXNzaW9uKSAoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwKIAkJCQkJdWludDE2X3QgY21kc19tYXgsIHVpbnQxNl90IHFkZXB0aCwKLQkJCQkJdWludDMyX3Qgc24sIHVpbnQzMl90ICpobik7CisJCQkJCXVpbnQzMl90IHNuKTsKIAl2b2lkICgqZGVzdHJveV9zZXNzaW9uKSAoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKTsKIAlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKigqY3JlYXRlX2Nvbm4pIChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3MsCiAJCQkJdWludDMyX3QgY2lkKTsKQEAgLTIwNiw4ICsyMDYsNiBAQAogc3RydWN0IGlzY3NpX2Nsc19ob3N0IHsKIAlhdG9taWNfdCBucl9zY2FuczsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNjYW5fd29ya3E7Ci0JY2hhciBzY2FuX3dvcmtxX25hbWVbMjBdOwogfTsKIAogZXh0ZXJuIHZvaWQgaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmggYi9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaAppbmRleCBiM2FhNjJlLi5kMDEwODU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaApAQCAtMTY5LDUgKzE2OSw3IEBACiAKIGV4dGVybiBpbnQgc25kX2FkMTgxNmFfcGNtKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGV4dGVybiBpbnQgc25kX2FkMTgxNmFfbWl4ZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwKTsKK2V4dGVybiBpbnQgc25kX2FkMTgxNmFfdGltZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLAorCQkJICAgICBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKTsKIAogI2VuZGlmCS8qIF9fU09VTkRfQUQxODE2QV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaAppbmRleCAxYzAyZWQxLi42YWRkODBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCisrKyBiL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKQEAgLTIzLDkgKzIzLDEwIEBACiAjaWZuZGVmIF9fU09VTkRfQVNPVU5EX0gKICNkZWZpbmUgX19TT1VORF9BU09VTkRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApAQCAtMTI2LDEyICsxMjcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhOwkvKiBXOiBkcml2ZXItc3BlY2lmaWMgZGF0YSAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfSFdERVBfSU9DVExfUFZFUlNJT04gPSBfSU9SICgnSCcsIDB4MDAsIGludCksCi0JU05EUlZfSFdERVBfSU9DVExfSU5GTyA9IF9JT1IgKCdIJywgMHgwMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKSwKLQlTTkRSVl9IV0RFUF9JT0NUTF9EU1BfU1RBVFVTID0gX0lPUignSCcsIDB4MDIsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyksCi0JU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQgICA9IF9JT1coJ0gnLCAweDAzLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSkKLX07CisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX1BWRVJTSU9OCV9JT1IgKCdIJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9JTkZPCQlfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUwlfSU9SKCdIJywgMHgwMiwgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9EU1BfTE9BRAlfSU9XKCdIJywgMHgwMywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0zNDIsNyArMzQxLDcgQEAKICNkZWZpbmUgU05EUlZfTUFTS19NQVgJMjU2CiAKIHN0cnVjdCBzbmRfbWFzayB7Ci0JdV9pbnQzMl90IGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07CisJX191MzIgYml0c1soU05EUlZfTUFTS19NQVgrMzEpLzMyXTsKIH07CiAKIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyB7CkBAIC0zODUsNyArMzg0LDcgQEAKIAogc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvIHsKIAl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKLQlvZmZfdCBvZmZzZXQ7CQkJLyogbW1hcCBvZmZzZXQgKi8KKwlfX2tlcm5lbF9vZmZfdCBvZmZzZXQ7CQkvKiBtbWFwIG9mZnNldCAqLwogCXVuc2lnbmVkIGludCBmaXJzdDsJCS8qIG9mZnNldCB0byBmaXJzdCBzYW1wbGUgaW4gYml0cyAqLwogCXVuc2lnbmVkIGludCBzdGVwOwkJLyogc2FtcGxlcyBkaXN0YW5jZSBpbiBiaXRzICovCiB9OwpAQCAtNDUxLDQwICs0NTAsMzUgQEAKIAlTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfVFlQRV9NT05PVE9OSUMsCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9QQ01fSU9DVExfUFZFUlNJT04gPSBfSU9SKCdBJywgMHgwMCwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfSU5GTyA9IF9JT1IoJ0EnLCAweDAxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKSwKLQlTTkRSVl9QQ01fSU9DVExfVFNUQU1QID0gX0lPVygnQScsIDB4MDIsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX1RUU1RBTVAgPSBfSU9XKCdBJywgMHgwMywgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfSFdfUkVGSU5FID0gX0lPV1IoJ0EnLCAweDEwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpLAotCVNORFJWX1BDTV9JT0NUTF9IV19QQVJBTVMgPSBfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyksCi0JU05EUlZfUENNX0lPQ1RMX0hXX0ZSRUUgPSBfSU8oJ0EnLCAweDEyKSwKLQlTTkRSVl9QQ01fSU9DVExfU1dfUEFSQU1TID0gX0lPV1IoJ0EnLCAweDEzLCBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMpLAotCVNORFJWX1BDTV9JT0NUTF9TVEFUVVMgPSBfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKSwKLQlTTkRSVl9QQ01fSU9DVExfREVMQVkgPSBfSU9SKCdBJywgMHgyMSwgc25kX3BjbV9zZnJhbWVzX3QpLAotCVNORFJWX1BDTV9JT0NUTF9IV1NZTkMgPSBfSU8oJ0EnLCAweDIyKSwKLQlTTkRSVl9QQ01fSU9DVExfU1lOQ19QVFIgPSBfSU9XUignQScsIDB4MjMsIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyKSwKLQlTTkRSVl9QQ01fSU9DVExfQ0hBTk5FTF9JTkZPID0gX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyksCi0JU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUgPSBfSU8oJ0EnLCAweDQwKSwKLQlTTkRSVl9QQ01fSU9DVExfUkVTRVQgPSBfSU8oJ0EnLCAweDQxKSwKLQlTTkRSVl9QQ01fSU9DVExfU1RBUlQgPSBfSU8oJ0EnLCAweDQyKSwKLQlTTkRSVl9QQ01fSU9DVExfRFJPUCA9IF9JTygnQScsIDB4NDMpLAotCVNORFJWX1BDTV9JT0NUTF9EUkFJTiA9IF9JTygnQScsIDB4NDQpLAotCVNORFJWX1BDTV9JT0NUTF9QQVVTRSA9IF9JT1coJ0EnLCAweDQ1LCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9SRVdJTkQgPSBfSU9XKCdBJywgMHg0Niwgc25kX3BjbV91ZnJhbWVzX3QpLAotCVNORFJWX1BDTV9JT0NUTF9SRVNVTUUgPSBfSU8oJ0EnLCAweDQ3KSwKLQlTTkRSVl9QQ01fSU9DVExfWFJVTiA9IF9JTygnQScsIDB4NDgpLAotCVNORFJWX1BDTV9JT0NUTF9GT1JXQVJEID0gX0lPVygnQScsIDB4NDksIHNuZF9wY21fdWZyYW1lc190KSwKLQlTTkRSVl9QQ01fSU9DVExfV1JJVEVJX0ZSQU1FUyA9IF9JT1coJ0EnLCAweDUwLCBzdHJ1Y3Qgc25kX3hmZXJpKSwKLQlTTkRSVl9QQ01fSU9DVExfUkVBRElfRlJBTUVTID0gX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpLAotCVNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTID0gX0lPVygnQScsIDB4NTIsIHN0cnVjdCBzbmRfeGZlcm4pLAotCVNORFJWX1BDTV9JT0NUTF9SRUFETl9GUkFNRVMgPSBfSU9SKCdBJywgMHg1Mywgc3RydWN0IHNuZF94ZmVybiksCi0JU05EUlZfUENNX0lPQ1RMX0xJTksgPSBfSU9XKCdBJywgMHg2MCwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfVU5MSU5LID0gX0lPKCdBJywgMHg2MSksCi19OwotCi0vKiBUcmljayB0byBtYWtlIGFsc2EtbGliL2FjaW5jbHVkZS5tNCBoYXBweSAqLwotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVXSU5EIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ0EnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9JTkZPCQlfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZF9wY21faW5mbykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1RTVEFNUAkJX0lPVygnQScsIDB4MDIsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1RUU1RBTVAJCV9JT1coJ0EnLCAweDAzLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19SRUZJTkUJX0lPV1IoJ0EnLCAweDEwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19QQVJBTVMJX0lPV1IoJ0EnLCAweDExLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19GUkVFCQlfSU8oJ0EnLCAweDEyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1dfUEFSQU1TCV9JT1dSKCdBJywgMHgxMywgc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBVFVTCQlfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfREVMQVkJCV9JT1IoJ0EnLCAweDIxLCBzbmRfcGNtX3NmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXU1lOQwkJX0lPKCdBJywgMHgyMikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NZTkNfUFRSCV9JT1dSKCdBJywgMHgyMywgc3RydWN0IHNuZF9wY21fc3luY19wdHIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8JX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUJCV9JTygnQScsIDB4NDApCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNFVAkJX0lPKCdBJywgMHg0MSkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVJUCQlfSU8oJ0EnLCAweDQyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRFJPUAkJX0lPKCdBJywgMHg0MykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RSQUlOCQlfSU8oJ0EnLCAweDQ0KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUEFVU0UJCV9JT1coJ0EnLCAweDQ1LCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQJCV9JT1coJ0EnLCAweDQ2LCBzbmRfcGNtX3VmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU1VNRQkJX0lPKCdBJywgMHg0NykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1hSVU4JCV9JTygnQScsIDB4NDgpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9GT1JXQVJECQlfSU9XKCdBJywgMHg0OSwgc25kX3BjbV91ZnJhbWVzX3QpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURUlfRlJBTUVTCV9JT1coJ0EnLCAweDUwLCBzdHJ1Y3Qgc25kX3hmZXJpKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRElfRlJBTUVTCV9JT1IoJ0EnLCAweDUxLCBzdHJ1Y3Qgc25kX3hmZXJpKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfV1JJVEVOX0ZSQU1FUwlfSU9XKCdBJywgMHg1Miwgc3RydWN0IHNuZF94ZmVybikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQUROX0ZSQU1FUwlfSU9SKCdBJywgMHg1Mywgc3RydWN0IHNuZF94ZmVybikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0xJTksJCV9JT1coJ0EnLCAweDYwLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9VTkxJTksJCV9JTygnQScsIDB4NjEpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC01MzgsMTQgKzUzMiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfUkFXTUlESV9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1cnLCAweDAwLCBpbnQpLAotCVNORFJWX1JBV01JRElfSU9DVExfSU5GTyA9IF9JT1IoJ1cnLCAweDAxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbyksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9QQVJBTVMgPSBfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMpLAotCVNORFJWX1JBV01JRElfSU9DVExfU1RBVFVTID0gX0lPV1IoJ1cnLCAweDIwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RhdHVzKSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX0RST1AgPSBfSU9XKCdXJywgMHgzMCwgaW50KSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX0RSQUlOID0gX0lPVygnVycsIDB4MzEsIGludCksCi19OworI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1cnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfSU5GTwlfSU9SKCdXJywgMHgwMSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfUEFSQU1TCV9JT1dSKCdXJywgMHgxMCwgc3RydWN0IHNuZF9yYXdtaWRpX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9TVEFUVVMJX0lPV1IoJ1cnLCAweDIwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0RST1AJX0lPVygnVycsIDB4MzAsIGludCkKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTglfSU9XKCdXJywgMHgzMSwgaW50KQogCiAvKgogICogIFRpbWVyIHNlY3Rpb24gLSAvZGV2L3NuZC90aW1lcgpAQCAtNjU0LDIzICs2NDYsMjEgQEAKIAl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsJLyogcmVzZXJ2ZWQgKi8KIH07CiAKLWVudW0gewotCVNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVCcsIDB4MDAsIGludCksCi0JU05EUlZfVElNRVJfSU9DVExfTkVYVF9ERVZJQ0UgPSBfSU9XUignVCcsIDB4MDEsIHN0cnVjdCBzbmRfdGltZXJfaWQpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1RSRUFEID0gX0lPVygnVCcsIDB4MDIsIGludCksCi0JU05EUlZfVElNRVJfSU9DVExfR0lORk8gPSBfSU9XUignVCcsIDB4MDMsIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8pLAotCVNORFJWX1RJTUVSX0lPQ1RMX0dQQVJBTVMgPSBfSU9XKCdUJywgMHgwNCwgc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTID0gX0lPV1IoJ1QnLCAweDA1LCBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1NFTEVDVCA9IF9JT1coJ1QnLCAweDEwLCBzdHJ1Y3Qgc25kX3RpbWVyX3NlbGVjdCksCi0JU05EUlZfVElNRVJfSU9DVExfSU5GTyA9IF9JT1IoJ1QnLCAweDExLCBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8pLAotCVNORFJWX1RJTUVSX0lPQ1RMX1BBUkFNUyA9IF9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcyksCi0JU05EUlZfVElNRVJfSU9DVExfU1RBVFVTID0gX0lPUignVCcsIDB4MTQsIHN0cnVjdCBzbmRfdGltZXJfc3RhdHVzKSwKLQkvKiBUaGUgZm9sbG93aW5nIGZvdXIgaW9jdGxzIGFyZSBjaGFuZ2VkIHNpbmNlIDEuMC45IGR1ZSB0byBjb25mbGljdGlvbiAqLwotCVNORFJWX1RJTUVSX0lPQ1RMX1NUQVJUID0gX0lPKCdUJywgMHhhMCksCi0JU05EUlZfVElNRVJfSU9DVExfU1RPUCA9IF9JTygnVCcsIDB4YTEpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0NPTlRJTlVFID0gX0lPKCdUJywgMHhhMiksCi0JU05EUlZfVElNRVJfSU9DVExfUEFVU0UgPSBfSU8oJ1QnLCAweGEzKSwKLX07CisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1QnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX05FWFRfREVWSUNFCV9JT1dSKCdUJywgMHgwMSwgc3RydWN0IHNuZF90aW1lcl9pZCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfVFJFQUQJCV9JT1coJ1QnLCAweDAyLCBpbnQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPCQlfSU9XUignVCcsIDB4MDMsIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8pCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dQQVJBTVMJX0lPVygnVCcsIDB4MDQsIHN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR1NUQVRVUwlfSU9XUignVCcsIDB4MDUsIHN0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU0VMRUNUCV9JT1coJ1QnLCAweDEwLCBzdHJ1Y3Qgc25kX3RpbWVyX3NlbGVjdCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfSU5GTwkJX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFSQU1TCV9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBVFVTCV9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cykKKy8qIFRoZSBmb2xsb3dpbmcgZm91ciBpb2N0bHMgYXJlIGNoYW5nZWQgc2luY2UgMS4wLjkgZHVlIHRvIGNvbmZsaWN0aW9uICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVJUCQlfSU8oJ1QnLCAweGEwKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVE9QCQlfSU8oJ1QnLCAweGExKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9DT05USU5VRQlfSU8oJ1QnLCAweGEyKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVVTRQkJX0lPKCdUJywgMHhhMykKIAogc3RydWN0IHNuZF90aW1lcl9yZWFkIHsKIAl1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKQEAgLTc4OSw3ICs3NzksNyBAQAogCXNuZF9jdGxfZWxlbV90eXBlX3QgdHlwZTsJLyogUjogdmFsdWUgdHlwZSAtIFNORFJWX0NUTF9FTEVNX1RZUEVfKiAqLwogCXVuc2lnbmVkIGludCBhY2Nlc3M7CQkvKiBSOiB2YWx1ZSBhY2Nlc3MgKGJpdG1hc2spIC0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTXyogKi8KIAl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBjb3VudCBvZiB2YWx1ZXMgKi8KLQlwaWRfdCBvd25lcjsJCQkvKiBvd25lcidzIFBJRCBvZiB0aGlzIGNvbnRyb2wgKi8KKwlfX2tlcm5lbF9waWRfdCBvd25lcjsJCS8qIG93bmVyJ3MgUElEIG9mIHRoaXMgY29udHJvbCAqLwogCXVuaW9uIHsKIAkJc3RydWN0IHsKIAkJCWxvbmcgbWluOwkJLyogUjogbWluaW11bSB2YWx1ZSAqLwpAQCAtODQ3LDMzICs4MzcsMzEgQEAKICAgICAgICAgdW5zaWduZWQgaW50IHRsdlswXTsJLyogZmlyc3QgVExWICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9DVExfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdVJywgMHgwMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfQ0FSRF9JTkZPID0gX0lPUignVScsIDB4MDEsIHN0cnVjdCBzbmRfY3RsX2NhcmRfaW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTElTVCA9IF9JT1dSKCdVJywgMHgxMCwgc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0KSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPID0gX0lPV1IoJ1UnLCAweDExLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFQUQgPSBfSU9XUignVScsIDB4MTIsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1dSSVRFID0gX0lPV1IoJ1UnLCAweDEzLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLID0gX0lPVygnVScsIDB4MTQsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1VOTE9DSyA9IF9JT1coJ1UnLCAweDE1LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKSwKLQlTTkRSVl9DVExfSU9DVExfU1VCU0NSSUJFX0VWRU5UUyA9IF9JT1dSKCdVJywgMHgxNiwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9BREQgPSBfSU9XUignVScsIDB4MTcsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRSA9IF9JT1dSKCdVJywgMHgxOCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9SRU1PVkUgPSBfSU9XUignVScsIDB4MTksIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpLAotCVNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRCA9IF9JT1dSKCdVJywgMHgxYSwgc3RydWN0IHNuZF9jdGxfdGx2KSwKLQlTTkRSVl9DVExfSU9DVExfVExWX1dSSVRFID0gX0lPV1IoJ1UnLCAweDFiLCBzdHJ1Y3Qgc25kX2N0bF90bHYpLAotCVNORFJWX0NUTF9JT0NUTF9UTFZfQ09NTUFORCA9IF9JT1dSKCdVJywgMHgxYywgc3RydWN0IHNuZF9jdGxfdGx2KSwKLQlTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgPSBfSU9XUignVScsIDB4MjAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8gPSBfSU9SKCdVJywgMHgyMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfUENNX05FWFRfREVWSUNFID0gX0lPUignVScsIDB4MzAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPID0gX0lPV1IoJ1UnLCAweDMxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfUENNX1BSRUZFUl9TVUJERVZJQ0UgPSBfSU9XKCdVJywgMHgzMiwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUkFXTUlESV9ORVhUX0RFVklDRSA9IF9JT1dSKCdVJywgMHg0MCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUkFXTUlESV9JTkZPID0gX0lPV1IoJ1UnLCAweDQxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSA9IF9JT1coJ1UnLCAweDQyLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9QT1dFUiA9IF9JT1dSKCdVJywgMHhkMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUgPSBfSU9SKCdVJywgMHhkMSwgaW50KSwKLX07CisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QVkVSU0lPTglfSU9SKCdVJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfQ0FSRF9JTkZPCV9JT1IoJ1UnLCAweDAxLCBzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0xJU1QJX0lPV1IoJ1UnLCAweDEwLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2xpc3QpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0lORk8JX0lPV1IoJ1UnLCAweDExLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFQUQJX0lPV1IoJ1UnLCAweDEyLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURQlfSU9XUignVScsIDB4MTMsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0xPQ0sJX0lPVygnVScsIDB4MTQsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1VOTE9DSwlfSU9XKCdVJywgMHgxNSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1NVQlNDUklCRV9FVkVOVFMgX0lPV1IoJ1UnLCAweDE2LCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0FERAlfSU9XUignVScsIDB4MTcsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRQlfSU9XUignVScsIDB4MTgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVNT1ZFCV9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9SRUFECV9JT1dSKCdVJywgMHgxYSwgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX1dSSVRFCV9JT1dSKCdVJywgMHgxYiwgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX0NPTU1BTkQJX0lPV1IoJ1UnLCAweDFjLCBzdHJ1Y3Qgc25kX2N0bF90bHYpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9IV0RFUF9ORVhUX0RFVklDRSBfSU9XUignVScsIDB4MjAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8JX0lPUignVScsIDB4MjEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9ORVhUX0RFVklDRQlfSU9SKCdVJywgMHgzMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX0lORk8JX0lPV1IoJ1UnLCAweDMxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX1BSRUZFUl9TVUJERVZJQ0UgX0lPVygnVScsIDB4MzIsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfTkVYVF9ERVZJQ0UgX0lPV1IoJ1UnLCAweDQwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX0lORk8JX0lPV1IoJ1UnLCAweDQxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSBfSU9XKCdVJywgMHg0MiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVIJCV9JT1dSKCdVJywgMHhkMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUJX0lPUignVScsIDB4ZDEsIGludCkKIAogLyoKICAqICBSZWFkIGludGVyZmFjZS4KQEAgLTkxOSwxOCArOTA3LDQgQEAKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1BDTV9TVFJFQU0JCSJQQ00gU3RyZWFtIgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoZXhwbCxkaXJlY3Rpb24sd2hhdCkJIklFQzk1OCAiIGV4cGwgU05EUlZfQ1RMX05BTUVfIyNkaXJlY3Rpb24gU05EUlZfQ1RMX05BTUVfSUVDOTU4XyMjd2hhdAogCi0vKgotICoKLSAqLwotCi1zdHJ1Y3Qgc25kX3hmZXJ2IHsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKnZlY3RvcjsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotfTsKLQotZW51bSB7Ci0JU05EUlZfSU9DVExfUkVBRFYgPSBfSU9XKCdLJywgMHgwMCwgc3RydWN0IHNuZF94ZmVydiksCi0JU05EUlZfSU9DVExfV1JJVEVWID0gX0lPVygnSycsIDB4MDEsIHN0cnVjdCBzbmRfeGZlcnYpLAotfTsKLQogI2VuZGlmIC8qIF9fU09VTkRfQVNPVU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXRtZWwtYWJkYWMuaCBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWJkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZmNmE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYmRhYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQkRBQ19ICisjZGVmaW5lIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQkRBQ19ICisKKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisKKy8qKgorICogc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhIC0gYm9hcmQgc3BlY2lmaWMgQUJEQUMgY29uZmlndXJhdGlvbgorICogQGR3czogRE1BIHNsYXZlIGludGVyZmFjZSB0byB1c2UgZm9yIHNvdW5kIHBsYXliYWNrLgorICovCitzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgeworCXN0cnVjdCBkd19kbWFfc2xhdmUJZHdzOworfTsKKworI2VuZGlmIC8qIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQkRBQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2F0bWVsLWFjOTdjLmggYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFjOTdjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWM5N2MuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgQUM5N0MgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUM5N0NfSAorI2RlZmluZSBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUM5N0NfSAorCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisjZGVmaW5lIEFDOTdDX0NBUFRVUkUJMHgwMQorI2RlZmluZSBBQzk3Q19QTEFZQkFDSwkweDAyCisjZGVmaW5lIEFDOTdDX0JPVEgJKEFDOTdDX0NBUFRVUkUgfCBBQzk3Q19QTEFZQkFDSykKKworLyoqCisgKiBzdHJ1Y3QgYXRtZWxfYWM5N2NfcGRhdGEgLSBib2FyZCBzcGVjaWZpYyBBQzk3QyBjb25maWd1cmF0aW9uCisgKiBAcnhfZHdzOiBETUEgc2xhdmUgaW50ZXJmYWNlIHRvIHVzZSBmb3Igc291bmQgY2FwdHVyZS4KKyAqIEB0eF9kd3M6IERNQSBzbGF2ZSBpbnRlcmZhY2UgdG8gdXNlIGZvciBzb3VuZCBwbGF5YmFjay4KKyAqIEByZXNldF9waW46IEdQSU8gcGluIHdpcmVkIHRvIHRoZSByZXNldCBpbnB1dCBvbiB0aGUgZXh0ZXJuYWwgQUM5NyBjb2RlYywKKyAqICAgICAgICAgICAgIG9wdGlvbmFsIHRvIHVzZSwgc2V0IHRvIC1FTk9ERVYgaWYgbm90IGluIHVzZS4gQUM5NyBsYXllciB3aWxsCisgKiAgICAgICAgICAgICB0cnkgdG8gZG8gYSBzb2Z0d2FyZSByZXNldCBvZiB0aGUgZXh0ZXJuYWwgY29kZWMgYW55d2F5LgorICogQGZsYWdzOiBGbGFncyBmb3Igd2hpY2ggZGlyZWN0aW9ucyBzaG91bGQgYmUgZW5hYmxlZC4KKyAqCisgKiBJZiB0aGUgdXNlciBkbyBub3Qgd2FudCB0byB1c2UgYSBETUEgY2hhbm5lbCBmb3IgcGxheWJhY2sgb3IgY2FwdHVyZSwgaS5lLgorICogb25seSBvbmUgZmVhdHVyZSBpcyByZXF1aXJlZCBvbiB0aGUgYm9hcmQuIFRoZSBzbGF2ZSBmb3IgcGxheWJhY2sgb3IgY2FwdHVyZQorICogY2FuIGJlIHNldCB0byBOVUxMLiBUaGUgQUM5N0MgZHJpdmVyIHdpbGwgdGFrZSB1c2Ugb2YgdGhpcyB3aGVuIHNldHRpbmcgdXAKKyAqIHRoZSBzb3VuZCBzdHJlYW1zLgorICovCitzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQlyeF9kd3M7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQl0eF9kd3M7CisJdW5zaWduZWQgaW50IAkJZmxhZ3M7CisJaW50CQkJcmVzZXRfcGluOworfTsKKworI2VuZGlmIC8qIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQzk3Q19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCmluZGV4IDQ3MjFiNGIuLmVmOTZmMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oCisrKyBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCkBAIC0xNzEsNiArMTcxLDU0IEBACiAgKi8KIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcihjaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCAqdGx2KTsKLWludCBzbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKTsKLQkJICAgICAgCitpbnQgX3NuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworLyogb3B0aW9uYWwgZmxhZ3MgZm9yIHNsYXZlICovCisjZGVmaW5lIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUJKDEgPDwgMCkKKworLyoqCisgKiBzbmRfY3RsX2FkZF9zbGF2ZSAtIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbAorICogQG1hc3Rlcjogdm1hc3RlciBlbGVtZW50CisgKiBAc2xhdmU6IHNsYXZlIGVsZW1lbnQgdG8gYWRkCisgKgorICogQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sIHRvIHRoZSBnaXZlbiBtYXN0ZXIgZWxlbWVudCBjcmVhdGVkIHZpYQorICogc25kX2N0bF9jcmVhdGVfdmlydHVhbF9tYXN0ZXIoKSBiZWZvcmVoYW5kLgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICoKKyAqIEFsbCBzbGF2ZXMgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIChyZXR1cm5pbmcgdGhlIHNhbWUgaW5mb3JtYXRpb24KKyAqIHZpYSBpbmZvIGNhbGxiYWNrKS4gIFRoZSBmdWNudGlvbiBkb2Vzbid0IGNoZWNrIGl0LCBzbyBpdCdzIHlvdXIKKyAqIHJlc3BvbnNpYmlsaXR5LgorICoKKyAqIEFsc28sIHNvbWUgYWRkaXRpb25hbCBsaW1pdGF0aW9uczoKKyAqIGF0IG1vc3QgdHdvIGNoYW5uZWxzLAorICogbG9nYXJpdGhtaWMgdm9sdW1lIGNvbnRyb2wgKGRCIGxldmVsKSB0aHVzIG5vIGxpbmVhciB2b2x1bWUsCisgKiBtYXN0ZXIgY2FuIG9ubHkgYXR0ZW51YXRlIHRoZSB2b2x1bWUgd2l0aG91dCBnYWluCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKQoreworCXJldHVybiBfc25kX2N0bF9hZGRfc2xhdmUobWFzdGVyLCBzbGF2ZSwgMCk7Cit9CisKKy8qKgorICogc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQgLSBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wKKyAqIEBtYXN0ZXI6IHZtYXN0ZXIgZWxlbWVudAorICogQHNsYXZlOiBzbGF2ZSBlbGVtZW50IHRvIGFkZAorICoKKyAqIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFzdGVyLgorICogVW5saWtlIHNuZF9jdGxfYWRkX3NsYXZlKCksIHRoZSBlbGVtZW50IGFkZGVkIHZpYSB0aGlzIGZ1bmN0aW9uCisgKiBpcyBzdXBwb3NlZCB0byBoYXZlIHZvbGF0aWxlIHZhbHVlcywgYW5kIGdldCBjYWxsYmFjayBpcyBjYWxsZWQKKyAqIGF0IGVhY2ggdGltZSBxdXJpZWQgZnJvbSB0aGUgbWFzdGVyLgorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcGVla3MgdGhlIGhhcmR3YXJlIHZhbHVlcyBkaXJlY3RseSBhbmQgdGhlIHZhbHVlCisgKiBjYW4gYmUgY2hhbmdlZCBieSBvdGhlciBtZWFucyB0aGFuIHRoZSBwdXQgY2FsbGJhY2sgb2YgdGhlIGVsZW1lbnQsCisgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIGtlZXAgdGhlIHZhbHVlIGFsd2F5cyB1cC10by1kYXRlLgorICovCitzdGF0aWMgaW5saW5lIGludAorc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLAorCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpCit7CisJcmV0dXJuIF9zbmRfY3RsX2FkZF9zbGF2ZShtYXN0ZXIsIHNsYXZlLCBTTkRfQ1RMX1NMQVZFX05FRURfVVBEQVRFKTsKK30KKwogI2VuZGlmCS8qIF9fU09VTkRfQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IGY2MzI0ODQuLjNkZWE3OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC05Nyw5ICs5Nyw5IEBACiAKIHN0cnVjdCBzbmRfbW9uaXRvcl9maWxlIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbmV4dDsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpkaXNjb25uZWN0ZWRfZl9vcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNodXRkb3duX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBzaHV0ZG93bl9saXN0OwkvKiBzdGlsbCBuZWVkIHRvIHNodXRkb3duICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBsaW5rIG9mIG1vbml0b3IgZmlsZXMgKi8KIH07CiAKIC8qIG1haW4gc3RydWN0dXJlIGZvciBzb3VuZGNhcmQgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19pZDsJLyogdGhlIGNhcmQgaWQgKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfcm9vdF9saW5rOwkvKiBudW1iZXIgbGluayB0byByZWFsIGlkICovCiAKLQlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqZmlsZXM7IC8qIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoaXMgY2FyZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmlsZXNfbGlzdDsJLyogYWxsIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhpcyBjYXJkICovCiAJc3RydWN0IHNuZF9zaHV0ZG93bl9mX29wcyAqc19mX29wczsgLyogZmlsZSBvcGVyYXRpb25zIGluIHRoZSBzaHV0ZG93bgogCQkJCQkJCQlzdGF0ZSAqLwogCXNwaW5sb2NrX3QgZmlsZXNfbG9jazsJCS8qIGxvY2sgdGhlIGZpbGVzIGZvciB0aGlzIGNhcmQgKi8KQEAgLTI5Niw4ICsyOTYsMjAgQEAKIGV4dGVybiBpbnQgKCpzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaykoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgY21kKTsKICNlbmRpZgogCitpbnQgc25kX2NhcmRfY3JlYXRlKGludCBpZHgsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSwKKwkJICAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRfcmV0KTsKKworc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQKIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NhcmRfbmV3KGludCBpZHgsIGNvbnN0IGNoYXIgKmlkLAotCQkJIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUpOworCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaWYgKHNuZF9jYXJkX2NyZWF0ZShpZHgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUsICZjYXJkKSA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiBjYXJkOworfQorCiBpbnQgc25kX2NhcmRfZGlzY29ubmVjdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwogaW50IHNuZF9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKIGludCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CkBAIC00NDYsMjEgKzQ1OCwzMyBAQAogc3RydWN0IHNuZF9wY2lfcXVpcmsgewogCXVuc2lnbmVkIHNob3J0IHN1YnZlbmRvcjsJLyogUENJIHN1YnZlbmRvciBJRCAqLwogCXVuc2lnbmVkIHNob3J0IHN1YmRldmljZTsJLyogUENJIHN1YmRldmljZSBJRCAqLworCXVuc2lnbmVkIHNob3J0IHN1YmRldmljZV9tYXNrOwkvKiBiaXRtYXNrIHRvIG1hdGNoICovCiAJaW50IHZhbHVlOwkJCS8qIHZhbHVlICovCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAJY29uc3QgY2hhciAqbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGRldmljZSAob3B0aW9uYWwpICovCiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgX1NORF9QQ0lfUVVJUktfSUQodmVuZCxkZXYpIFwKLQkuc3VidmVuZG9yID0gKHZlbmQpLCAuc3ViZGV2aWNlID0gKGRldikKKyNkZWZpbmUgX1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCBtYXNrLCBkZXYpCVwKKwkuc3VidmVuZG9yID0gKHZlbmQpLCAuc3ViZGV2aWNlID0gKGRldiksIC5zdWJkZXZpY2VfbWFzayA9IChtYXNrKQorI2RlZmluZSBfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpIFwKKwlfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIDB4ZmZmZiwgZGV2KQogI2RlZmluZSBTTkRfUENJX1FVSVJLX0lEKHZlbmQsZGV2KSB7X1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KX0KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKICNkZWZpbmUgU05EX1BDSV9RVUlSSyh2ZW5kLGRldix4bmFtZSx2YWwpIFwKIAl7X1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KSwgLnZhbHVlID0gKHZhbCksIC5uYW1lID0gKHhuYW1lKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19WRU5ET1IodmVuZCwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgMCwgMCksIC52YWx1ZSA9ICh2YWwpLCAubmFtZSA9ICh4bmFtZSl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfTUFTSyh2ZW5kLCBtYXNrLCBkZXYsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIG1hc2ssIGRldiksCQkJXAorCQkJLnZhbHVlID0gKHZhbCksIC5uYW1lID0gKHhuYW1lKX0KICNlbHNlCiAjZGVmaW5lIFNORF9QQ0lfUVVJUksodmVuZCxkZXYseG5hbWUsdmFsKSBcCiAJe19TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldiksIC52YWx1ZSA9ICh2YWwpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX01BU0sodmVuZCwgbWFzaywgZGV2LCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCBtYXNrLCBkZXYpLCAudmFsdWUgPSAodmFsKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19WRU5ET1IodmVuZCwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgMCwgMCksIC52YWx1ZSA9ICh2YWwpfQogI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKaW5kZXggMTBlZTI4ZS4uNmE2NjRjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fU09VTkRfRU1VMTBLMV9ICiAjZGVmaW5lIF9fU09VTkRfRU1VMTBLMV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKgogICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4sCiAgKgkJICAgICBDcmVhdGl2ZSBMYWJzLCBJbmMuCkBAIC0zNCw2ICszNiw3IEBACiAjaW5jbHVkZSA8c291bmQvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gREVGSU5FUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjE3MSw3ICsyMTc0LDcgQEAKIAljaGFyIG5hbWVbMTI4XTsKIAogCURFQ0xBUkVfQklUTUFQKGdwcl92YWxpZCwgMHgyMDApOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluaXRpYWxpemVycyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKmdwcl9tYXA7CSAgLyogaW5pdGlhbGl6ZXJzICovCisJX191MzIgX191c2VyICpncHJfbWFwOwkJLyogaW5pdGlhbGl6ZXJzICovCiAKIAl1bnNpZ25lZCBpbnQgZ3ByX2FkZF9jb250cm9sX2NvdW50OyAvKiBjb3VudCBvZiBHUFIgY29udHJvbHMgdG8gYWRkL3JlcGxhY2UgKi8KIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByIF9fdXNlciAqZ3ByX2FkZF9jb250cm9sczsgLyogR1BSIGNvbnRyb2xzIHRvIGFkZC9yZXBsYWNlICovCkBAIC0yMTg0LDExICsyMTg3LDExIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwciBfX3VzZXIgKmdwcl9saXN0X2NvbnRyb2xzOyAvKiBsaXN0ZWQgR1BSIGNvbnRyb2xzICovCiAKIAlERUNMQVJFX0JJVE1BUCh0cmFtX3ZhbGlkLCAweDEwMCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5pdGlhbGl6ZXJzICovCi0JdV9pbnQzMl90IF9fdXNlciAqdHJhbV9kYXRhX21hcDsgIC8qIGRhdGEgaW5pdGlhbGl6ZXJzICovCi0JdV9pbnQzMl90IF9fdXNlciAqdHJhbV9hZGRyX21hcDsgIC8qIG1hcCBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiBfX3VzZXIgKnRyYW1fZGF0YV9tYXA7CSAgLyogZGF0YSBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiBfX3VzZXIgKnRyYW1fYWRkcl9tYXA7CSAgLyogbWFwIGluaXRpYWxpemVycyAqLwogCiAJREVDTEFSRV9CSVRNQVAoY29kZV92YWxpZCwgMTAyNCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5zdHJ1Y3Rpb25zICovCi0JdV9pbnQzMl90IF9fdXNlciAqY29kZTsJCSAgLyogb25lIGluc3RydWN0aW9uIC0gNjQgYml0cyAqLworCV9fdTMyIF9fdXNlciAqY29kZTsJCSAgLyogb25lIGluc3RydWN0aW9uIC0gNjQgYml0cyAqLwogfTsKIAogc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF90cmFtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaHdkZXAuaCBiL2luY2x1ZGUvc291bmQvaHdkZXAuaAppbmRleCBkOWVlYTAxLi44YzA1ZTQ3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9od2RlcC5oCisrKyBiL2luY2x1ZGUvc291bmQvaHdkZXAuaApAQCAtMjcsMTggKzI3LDI4IEBACiAKIHN0cnVjdCBzbmRfaHdkZXA7CiAKKy8qIGh3ZGVwIGZpbGUgb3BzOyBhbGwgb3BzIGNhbiBiZSBOVUxMICovCiBzdHJ1Y3Qgc25kX2h3ZGVwX29wcyB7Ci0JbG9uZyBsb25nICgqbGxzZWVrKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWcpOwotCWxvbmcgKCpyZWFkKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNoYXIgX191c2VyICpidWYsIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKLQlsb25nICgqd3JpdGUpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOwotCWludCAoKm9wZW4pIChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7Ci0JaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwotCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCBwb2xsX3RhYmxlICogd2FpdCk7Ci0JaW50ICgqaW9jdGwpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0JaW50ICgqaW9jdGxfY29tcGF0KSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCWludCAoKm1tYXApIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwotCWludCAoKmRzcF9zdGF0dXMpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICpzdGF0dXMpOwotCWludCAoKmRzcF9sb2FkKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlICppbWFnZSk7CisJbG9uZyBsb25nICgqbGxzZWVrKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWcpOworCWxvbmcgKCpyZWFkKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7CisJbG9uZyAoKndyaXRlKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICAgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOworCWludCAoKm9wZW4pKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCWludCAoKnJlbGVhc2UpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgcG9sbF90YWJsZSAqd2FpdCk7CisJaW50ICgqaW9jdGwpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqaW9jdGxfY29tcGF0KShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKm1tYXApKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKwlpbnQgKCpkc3Bfc3RhdHVzKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywKKwkJCSAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICpzdGF0dXMpOworCWludCAoKmRzcF9sb2FkKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywKKwkJCXN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlICppbWFnZSk7CiB9OwogCiBzdHJ1Y3Qgc25kX2h3ZGVwIHsKQEAgLTYxLDkgKzcxLDkgQEAKIAl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc3RydWN0IHNuZF9od2RlcCAqaHdkZXApOwogCiAJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7Ci0JaW50IHVzZWQ7Ci0JdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7Ci0JdW5zaWduZWQgaW50IGV4Y2x1c2l2ZTogMTsKKwlpbnQgdXNlZDsJCQkvKiByZWZlcmVuY2UgY291bnRlciAqLworCXVuc2lnbmVkIGludCBkc3BfbG9hZGVkOwkvKiBiaXQgZmllbGRzIG9mIGxvYWRlZCBkc3AgaW5kaWNlcyAqLworCXVuc2lnbmVkIGludCBleGNsdXNpdmU6MTsJLyogZXhjbHVzaXZlIGFjY2VzcyBtb2RlICovCiB9OwogCiBleHRlcm4gaW50IHNuZF9od2RlcF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvamFjay5oIGIvaW5jbHVkZS9zb3VuZC9qYWNrLmgKaW5kZXggMmUwMzE1Yy4uNmIwMTNjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9qYWNrLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9qYWNrLmgKQEAgLTMwLDYgKzMwLDkgQEAKIC8qKgogICogSmFjayB0eXBlcyB3aGljaCBjYW4gYmUgcmVwb3J0ZWQuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgYXMgYQogICogYml0bWFzay4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBsb29rdXAgdGFibGUgaW4KKyAqIHNvdW5kL2NvcmUvamFjay5jLgogICovCiBlbnVtIHNuZF9qYWNrX3R5cGVzIHsKIAlTTkRfSkFDS19IRUFEUEhPTkUJPSAweDAwMDEsCkBAIC0zNyw2ICs0MCw4IEBACiAJU05EX0pBQ0tfSEVBRFNFVAk9IFNORF9KQUNLX0hFQURQSE9ORSB8IFNORF9KQUNLX01JQ1JPUEhPTkUsCiAJU05EX0pBQ0tfTElORU9VVAk9IDB4MDAwNCwKIAlTTkRfSkFDS19NRUNIQU5JQ0FMCT0gMHgwMDA4LCAvKiBJZiBkZXRlY3RlZCBzZXBhcmF0ZWx5ICovCisJU05EX0pBQ0tfVklERU9PVVQJPSAweDAwMTAsCisJU05EX0pBQ0tfQVZPVVQJCT0gU05EX0pBQ0tfTElORU9VVCB8IFNORF9KQUNLX1ZJREVPT1VULAogfTsKIAogc3RydWN0IHNuZF9qYWNrIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IDQwYzVhNmYuLjg5MDRiMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgICAgIC8qIC0tIHRpbWVyIHNlY3Rpb24gLS0gKi8KIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsJCS8qIHRpbWVyICovCiAJdW5zaWduZWQgdGltZXJfcnVubmluZzogMTsJLyogdGltZSBpcyBydW5uaW5nICovCi0Jc3BpbmxvY2tfdCB0aW1lcl9sb2NrOwogCS8qIC0tIG5leHQgc3Vic3RyZWFtIC0tICovCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpuZXh0OwogCS8qIC0tIGxpbmtlZCBzdWJzdHJlYW1zIC0tICovCkBAIC00NTEsNyArNDUwLDcgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc25kX3BjbV9mX29wc1syXTsKIAotaW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCitpbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IGRldmljZSwKIAkJaW50IHBsYXliYWNrX2NvdW50LCBpbnQgY2FwdHVyZV9jb3VudCwKIAkJc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfcGNtX25ld19zdHJlYW0oc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwgaW50IHN1YnN0cmVhbV9jb3VudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaCBiL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oCmluZGV4IDJmZDNkMjUuLjJjODk0YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oCisrKyBiL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oCkBAIC00Miw0ICs0MiwxOSBAQAogZXh0ZXJuIGludCBweGEyeHhfYWM5N19od19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcHhhMnh4X2FjOTdfaHdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKKy8qIEFDOTcgcGxhdGZvcm1fZGF0YSAqLworLyoqCisgKiBzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSAtIHB4YSBhYzk3IHBsYXRmb3JtIGRhdGEKKyAqIEByZXNldF9ncGlvOiBBQzk3IHJlc2V0IGdwaW8gKG5vcm1hbGx5IGdwaW8xMTMgb3IgZ3Bpbzk1KQorICogICAgICAgICAgICAgIGEgLTEgdmFsdWUgbWVhbnMgbm8gZ3BpbyB3aWxsIGJlIHVzZWQgZm9yIHJlc2V0CisgKgorICogUGxhdGZvcm0gZGF0YSBzaG91bGQgb25seSBiZSBzcGVjaWZpZWQgZm9yIHB4YTI3eCBDUFVzIHdoZXJlIGEgc2lsaWNvbiBidWcKKyAqIHByZXZlbnRzIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSByZXNldCBsaW5lLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdAorICogYmVoYXZpb3VyIGlzIHRvIGNvbnNpZGVyIGdwaW8gMTEzIGFzIHRoZSBBQzk3IHJlc2V0IGxpbmUsIHdoaWNoIGlzIHRoZQorICogZGVmYXVsdCBvbiBtb3N0IGJvYXJkcy4KKyAqLworc3RydWN0IHB4YTJ4eF9hYzk3X3BsYXRmb3JtX2RhdGEgeworCWludCByZXNldF9ncGlvOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaCBiL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCmluZGV4IGI1NTBhNDEuLmMyM2MyNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCisrKyBiL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCkBAIC00Miw3ICs0Miw2IEBACiAjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19JTlBVVAkoMTw8MSkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX09QRU4JCSgzPDwwKQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5ECSgxPDwyKQotI2RlZmluZQlTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSwkoMTw8MykKIAogc3RydWN0IHNuZF9yYXdtaWRpOwogc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2IuaCBiL2luY2x1ZGUvc291bmQvc2IuaAppbmRleCA4NWY5M2M1Li40ZTYyZWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NiLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zYi5oCkBAIC0yNDksNiArMjQ5LDcgQEAKICNkZWZpbmUgU0JfQUxTNDAwMF8zRF9BVVRPX01VVEUJMHg1MgogI2RlZmluZSBTQl9BTFM0MDAwX0FOQUxPR19CTE9DS19DVFJMIDB4NTMKICNkZWZpbmUgU0JfQUxTNDAwMF8zRF9ERUxBWUxJTkVfUEFUVEVSTiAweDU0CisjZGVmaW5lIFNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04JMHhjMyAvKiBiaXQgNyBpcyBEaWdpdGFsIExvb3AgRW5hYmxlICovCiAjZGVmaW5lIFNCX0FMUzQwMDBfUVNPVU5ECTB4ZGIKIAogLyogSVJRIHNldHRpbmcgYml0bWFwICovCkBAIC0zMzAsNyArMzMxLDggQEAKIAlTQl9NSVhfRE9VQkxFLAogCVNCX01JWF9JTlBVVF9TVywKIAlTQl9NSVhfQ0FQVFVSRV9QUk8sCi0JU0JfTUlYX0NBUFRVUkVfRFQwMTlYCisJU0JfTUlYX0NBUFRVUkVfRFQwMTlYLAorCVNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKIH07CiAKICNkZWZpbmUgU0JfTUlYVkFMX0RPVUJMRShsZWZ0X3JlZywgcmlnaHRfcmVnLCBsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgbWFzaykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaCBiL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKaW5kZXggNWQxYWI5Yy4uMWJjZTdmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCkBAIC0yMDIsMTMgKzIwMiwxMSBAQAogCWludCB2YWx1ZTI7CS8qIHJlc2VydmVkICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9FTVVYX0lPQ1RMX1ZFUlNJT04gPSBfSU9SKCdIJywgMHg4MCwgdW5zaWduZWQgaW50KSwKLQlTTkRSVl9FTVVYX0lPQ1RMX0xPQURfUEFUQ0ggPSBfSU9XUignSCcsIDB4ODEsIHN0cnVjdCBzb3VuZGZvbnRfcGF0Y2hfaW5mbyksCi0JU05EUlZfRU1VWF9JT0NUTF9SRVNFVF9TQU1QTEVTID0gX0lPKCdIJywgMHg4MiksCi0JU05EUlZfRU1VWF9JT0NUTF9SRU1PVkVfTEFTVF9TQU1QTEVTID0gX0lPKCdIJywgMHg4MyksCi0JU05EUlZfRU1VWF9JT0NUTF9NRU1fQVZBSUwgPSBfSU9XKCdIJywgMHg4NCwgaW50KSwKLQlTTkRSVl9FTVVYX0lPQ1RMX01JU0NfTU9ERSA9IF9JT1dSKCdIJywgMHg4NCwgc3RydWN0IHNuZF9lbXV4X21pc2NfbW9kZSksCi19OworI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1ZFUlNJT04JX0lPUignSCcsIDB4ODAsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9MT0FEX1BBVENICV9JT1dSKCdIJywgMHg4MSwgc3RydWN0IHNvdW5kZm9udF9wYXRjaF9pbmZvKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1JFU0VUX1NBTVBMRVMJX0lPKCdIJywgMHg4MikKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9SRU1PVkVfTEFTVF9TQU1QTEVTIF9JTygnSCcsIDB4ODMpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfTUVNX0FWQUlMCV9JT1coJ0gnLCAweDg0LCBpbnQpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfTUlTQ19NT0RFCV9JT1dSKCdIJywgMHg4NCwgc3RydWN0IHNuZF9lbXV4X21pc2NfbW9kZSkKIAogI2VuZGlmIC8qIF9fU09VTkRfU0ZOVF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggMjQyNDdmNy4uMTM2NzY0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTIwMyw3ICsyMDMsNyBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpOwogCiAJLyogb3BzICovCi0Jc3RydWN0IHNuZF9zb2NfZGFpX29wcyBvcHM7CisJc3RydWN0IHNuZF9zb2NfZGFpX29wcyAqb3BzOwogCiAJLyogREFJIGNhcGFiaWxpdGllcyAqLwogCXN0cnVjdCBzbmRfc29jX3BjbV9zdHJlYW0gY2FwdHVyZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaCBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAppbmRleCBkZmE4MDQ5Li5hN2RlZjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCkBAIC03Niw2ICs3NiwxMSBAQAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQorI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwkgd2NvbnRyb2xzLCB3bmNvbnRyb2xzKVwKK3sgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIFwKKwkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlDQklBUyh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0KSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taWNiaWFzLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSBOVUxMLCAubnVtX2tjb250cm9scyA9IDB9CkBAIC0xMDEsNiArMTA2LDExIEBACiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHMsIFwKIAkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKyNkZWZpbmUgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTF9FKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwl3Y29udHJvbHMsIHduY29udHJvbHMsIHdldmVudCwgd2ZsYWdzKSBcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCAuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KICNkZWZpbmUgU05EX1NPQ19EQVBNX01JQ0JJQVNfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3ZXZlbnQsIHdmbGFncykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWljYmlhcywgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gTlVMTCwgLm51bV9rY29udHJvbHMgPSAwLCBcCkBAIC0xODIsNiArMTkyLDEyIEBACiAJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfdmFsdWVfZW51bV9kb3VibGUsIFwKIAkucHV0ID0gc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZSwgXAogCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KKyNkZWZpbmUgU09DX0RBUE1fUElOX1NXSVRDSCh4bmFtZSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSAiIFN3aXRjaCIsIFwKKwkuaW5mbyA9IHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2gsIFwKKwkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoLCBcCisJLnB1dCA9IHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCwgXAorCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpeG5hbWUgfQogCiAvKiBkYXBtIHN0cmVhbSBvcGVyYXRpb25zICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QCQkJMHgwCkBAIC0yMjgsNiArMjQ0LDEyIEBACiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwogaW50IHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOworaW50IHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVuY29udHJvbCk7CitpbnQgc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVuY29udHJvbCk7CiBpbnQgc25kX3NvY19kYXBtX25ld19jb250cm9sKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0KTsKIGludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKQEAgLTI1MCwxMCArMjcyLDEwIEBACiBpbnQgc25kX3NvY19kYXBtX3N5c19hZGQoc3RydWN0IGRldmljZSAqZGV2KTsKIAogLyogZGFwbSBhdWRpbyBwaW4gY29udHJvbCBhbmQgc3RhdHVzICovCi1pbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOwogaW50IHNuZF9zb2NfZGFwbV9zeW5jKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyk7CiAKIC8qIGRhcG0gd2lkZ2V0IHR5cGVzICovCkBAIC0yNjMsNiArMjg1LDcgQEAKIAlzbmRfc29jX2RhcG1fbXV4LAkJCS8qIHNlbGVjdHMgMSBhbmFsb2cgc2lnbmFsIGZyb20gbWFueSBpbnB1dHMgKi8KIAlzbmRfc29jX2RhcG1fdmFsdWVfbXV4LAkJCS8qIHNlbGVjdHMgMSBhbmFsb2cgc2lnbmFsIGZyb20gbWFueSBpbnB1dHMgKi8KIAlzbmRfc29jX2RhcG1fbWl4ZXIsCQkJLyogbWl4ZXMgc2V2ZXJhbCBhbmFsb2cgc2lnbmFscyB0b2dldGhlciAqLworCXNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsCQkvKiBtaXhlciB3aXRoIG5hbWVkIGNvbnRyb2xzICovCiAJc25kX3NvY19kYXBtX3BnYSwJCQkvKiBwcm9ncmFtbWFibGUgZ2Fpbi9hdHRlbnVhdGlvbiAodm9sdW1lKSAqLwogCXNuZF9zb2NfZGFwbV9hZGMsCQkJLyogYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVyICovCiAJc25kX3NvY19kYXBtX2RhYywJCQkvKiBkaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLmggYi9pbmNsdWRlL3NvdW5kL3NvYy5oCmluZGV4IDI0NTkzYWMuLmE0MGJjNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTE1NCw2ICsxNTYsOCBAQAogCVNORF9TT0NfQklBU19PRkYsCiB9OwogCitzdHJ1Y3Qgc25kX2phY2s7CitzdHJ1Y3Qgc25kX3NvY19jYXJkOwogc3RydWN0IHNuZF9zb2NfZGV2aWNlOwogc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbTsKIHN0cnVjdCBzbmRfc29jX29wczsKQEAgLTE2NCw2ICsxNjgsMTEgQEAKIHN0cnVjdCBzbmRfc29jX2NvZGVjOwogc3RydWN0IHNvY19lbnVtOwogc3RydWN0IHNuZF9zb2NfYWM5N19vcHM7CitzdHJ1Y3Qgc25kX3NvY19qYWNrOworc3RydWN0IHNuZF9zb2NfamFja19waW47CisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK3N0cnVjdCBzbmRfc29jX2phY2tfZ3BpbzsKKyNlbmRpZgogCiB0eXBlZGVmIGludCAoKmh3X3dyaXRlX3QpKHZvaWQgKixjb25zdCBjaGFyKiAsaW50KTsKIHR5cGVkZWYgaW50ICgqaHdfcmVhZF90KSh2b2lkICosY2hhciogLGludCk7CkBAIC0xODQsNiArMTkzLDE5IEBACiBpbnQgc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAljb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqaHcpOwogCisvKiBKYWNrIHJlcG9ydGluZyAqLworaW50IHNuZF9zb2NfamFja19uZXcoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCB0eXBlLAorCQkgICAgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2spOwordm9pZCBzbmRfc29jX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBzdGF0dXMsIGludCBtYXNrKTsKK2ludCBzbmRfc29jX2phY2tfYWRkX3BpbnMoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGlucyk7CisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK2ludCBzbmRfc29jX2phY2tfYWRkX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpOwordm9pZCBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKTsKKyNlbmRpZgorCiAvKiBjb2RlYyBJTyAqLwogI2RlZmluZSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZykgY29kZWMtPnJlYWQoY29kZWMsIHJlZykKICNkZWZpbmUgc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSkgY29kZWMtPndyaXRlKGNvZGVjLCByZWcsIHZhbHVlKQpAQCAtMjAzLDYgKzIyNSw4IEBACiAgKi8KIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNuZF9zb2NfY25ldyhjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqX3RlbXBsYXRlLAogCXZvaWQgKmRhdGEsIGNoYXIgKmxvbmdfbmFtZSk7CitpbnQgc25kX3NvY19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9scywgaW50IG51bV9jb250cm9scyk7CiBpbnQgc25kX3NvY19pbmZvX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOwogaW50IHNuZF9zb2NfaW5mb19lbnVtX2V4dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIzNyw2ICsyNjEsNDggQEAKIGludCBzbmRfc29jX3B1dF92b2xzd19zOChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CiAKKy8qKgorICogc3RydWN0IHNuZF9zb2NfamFja19waW4gLSBEZXNjcmliZXMgYSBwaW4gdG8gdXBkYXRlIGJhc2VkIG9uIGphY2sgZGV0ZWN0aW9uCisgKgorICogQHBpbjogICAgbmFtZSBvZiB0aGUgcGluIHRvIHVwZGF0ZQorICogQG1hc2s6ICAgYml0cyB0byBjaGVjayBmb3IgaW4gcmVwb3J0ZWQgamFjayBzdGF0dXMKKyAqIEBpbnZlcnQ6IGlmIG5vbi16ZXJvIHRoZW4gcGluIGlzIGVuYWJsZWQgd2hlbiBzdGF0dXMgaXMgbm90IHJlcG9ydGVkCisgKi8KK3N0cnVjdCBzbmRfc29jX2phY2tfcGluIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3QgY2hhciAqcGluOworCWludCBtYXNrOworCWJvb2wgaW52ZXJ0OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gLSBEZXNjcmliZXMgYSBncGlvIHBpbiBmb3IgamFjayBkZXRlY3Rpb24KKyAqCisgKiBAZ3BpbzogICAgICAgICBncGlvIG51bWJlcgorICogQG5hbWU6ICAgICAgICAgZ3BpbyBuYW1lCisgKiBAcmVwb3J0OiAgICAgICB2YWx1ZSB0byByZXBvcnQgd2hlbiBqYWNrIGRldGVjdGVkCisgKiBAaW52ZXJ0OiAgICAgICByZXBvcnQgcHJlc2VuY2UgaW4gbG93IHN0YXRlCisgKiBAZGVib3VjZV90aW1lOiBkZWJvdWNlIHRpbWUgaW4gbXMKKyAqLworI2lmZGVmIENPTkZJR19HUElPTElCCitzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8geworCXVuc2lnbmVkIGludCBncGlvOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJlcG9ydDsKKwlpbnQgaW52ZXJ0OworCWludCBkZWJvdW5jZV90aW1lOworCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworI2VuZGlmCisKK3N0cnVjdCBzbmRfc29jX2phY2sgeworCXN0cnVjdCBzbmRfamFjayAqamFjazsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCXN0cnVjdCBsaXN0X2hlYWQgcGluczsKKwlpbnQgc3RhdHVzOworfTsKKwogLyogU29DIFBDTSBzdHJlYW0gaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBzbmRfc29jX3BjbV9zdHJlYW0gewogCWNoYXIgKnN0cmVhbV9uYW1lOwpAQCAtMzg0LDYgKzQ1MCw4IEBACiAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldjsKIAorCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVmZXJyZWRfcmVzdW1lX3dvcms7CkBAIC0zOTMsNyArNDYxLDYgQEAKIHN0cnVjdCBzbmRfc29jX2RldmljZSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSAqY29kZWNfZGV2OwogCXZvaWQgKmNvZGVjX2RhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmggYi9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwZDVkYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvbGludXgvbDMvdWRhMTM0MS5oCi0gKgotICogUGhpbGlwcyBVREExMzQxIG1peGVyIGRldmljZSBkcml2ZXIgZm9yIEFMU0EKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgVG9tYXMgS2FzcGFyZWsgSW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gdWRhMTM0MS5oIGZyb20gT1NTCi0gKiAyMDAyLTAzLTMwIFRvbWFzIEthc3BhcmVrIFByb2MgZmlsZXN5c3RlbSBzdXBwb3J0LCBjb21wbGV0ZSBtaXhlciBhbmQgRFNQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHN1cHBvcnQKLSAqLwotCi0jZGVmaW5lIFVEQTEzNDFfQUxTQV9OQU1FICJzbmQtdWRhMTM0MSIKLQotLyoKLSAqIERlZmF1bHQgcmF0ZSBzZXQgYWZ0ZXIgaW5pY2lhbGl6YXRpb24KLSAqLwotI2RlZmluZSBBVURJT19SQVRFX0RFRkFVTFQJNDQxMDAKLQotLyoKLSAqIFVEQTEzNDEgTDMgYWRkcmVzcyBhbmQgY29tbWFuZCB0eXBlcwotICovCi0jZGVmaW5lIFVEQTEzNDFfTDNBRERSCQk1Ci0jZGVmaW5lIFVEQTEzNDFfREFUQTAJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMCkKLSNkZWZpbmUgVURBMTM0MV9EQVRBMQkJKFVEQTEzNDFfTDNBRERSIDw8IDIgfCAxKQotI2RlZmluZSBVREExMzQxX1NUQVRVUwkJKFVEQTEzNDFfTDNBRERSIDw8IDIgfCAyKQotCi1lbnVtIHVkYTEzNDFfb25vZmYgewotCU9GRj0wLAotCU9OLAotfTsKLQotZW51bSB1ZGExMzQxX2Zvcm1hdCB7Ci0JSTJTPTAsCi0JTFNCMTYsCi0JTFNCMTgsCi0JTFNCMjAsCi0JTVNCLAotCUxTQjE2TVNCLAotCUxTQjE4TVNCLAotCUxTQjIwTVNCLCAgICAgICAgCi19OwotCi1lbnVtIHVkYTEzNDFfZnMgewotCUY1MTI9MCwKLQlGMzg0LAotCUYyNTYsCi0JRnVudXNlZCwKLX07Ci0KLWVudW0gdWRhMTM0MV9wZWFrIHsKLQlCRUZPUkU9MCwKLQlBRlRFUiwKLX07Ci0KLWVudW0gdWRhMTM0MV9maWx0ZXIgewotCUZMQVQ9MCwKLQlNSU4sCi0JTUlOMiwKLQlNQVgsCi19OwotCi1lbnVtIHVkYTEzNDFfbWl4ZXIgewotCURPVUJMRSwKLQlMSU5FLAotCU1JQywKLQlNSVhFUiwKLX07Ci0KLWVudW0gdWRhMTM0MV9kZWVtcCB7Ci0JTk9ORSwKLQlEMzIsCi0JRDQ0LAotCUQ0OCwKLX07Ci0KLWVudW0gdWRhMTM0MV9jb25maWcgewotCUNNRF9SRUFEX1JFRyA9IDAsCi0JQ01EX1JFU0VULAotCUNNRF9GUywKLQlDTURfRk9STUFULAotCUNNRF9PR0FJTiwKLQlDTURfSUdBSU4sCi0JQ01EX0RBQywKLQlDTURfQURDLAotCUNNRF9WT0xVTUUsCi0JQ01EX0JBU1MsCi0JQ01EX1RSRUJCTEUsCi0JQ01EX1BFQUssCi0JQ01EX0RFRU1QLAotCUNNRF9NVVRFLCAgICAgICAgCi0JQ01EX0ZJTFRFUiwKLQlDTURfQ0gxLAotCUNNRF9DSDIsCi0JQ01EX01JQywgICAgICAgCi0JQ01EX01JWEVSLAotCUNNRF9BR0MsCi0JQ01EX0lHLAotCUNNRF9BR0NfVElNRSwKLQlDTURfQUdDX0xFVkVMLAotI2lmZGVmIENPTkZJR19QTQotCUNNRF9TVVNQRU5ELAotCUNNRF9SRVNVTUUsCi0jZW5kaWYKLQlDTURfTEFTVCwKLX07Ci0KLWVudW0gd3JpdGVfdGhyb3VnaCB7Ci0JLy91c2VkIGluIHVwZGF0ZV9iaXRzICh3cml0ZV9jZmcpIHRvIGF2b2lkIGwzX3dyaXRlIC0ganVzdCB1cGRhdGUgbG9jYWwgY29weSBvZiByZWdzLgotCVJFR1NfT05MWT0wLAotCS8vdXBkYXRlIGxvY2FsIHJlZ3MgYW5kIHdyaXRlIHZhbHVlIHRvIHVkYTEzNDEgLSBkbyBsM193cml0ZQotCUZMVVNILAotfTsKLQotaW50IF9faW5pdCBzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBsM19jbGllbnQgKipjbG50KTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmggYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAppbmRleCAyYjQ4MjM3Li5hN2U3NGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAorKysgYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaApAQCAtMSwzICsxLDMgQEAKIC8qIGluY2x1ZGUvdmVyc2lvbi5oICovCi0jZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE4YSIKKyNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMTkiCiAjZGVmaW5lIENPTkZJR19TTkRfREFURSAiIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93c3MuaCBiL2luY2x1ZGUvc291bmQvd3NzLmgKaW5kZXggZmQwMWYyMi4uNmQ2NWYzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC93c3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3dzcy5oCkBAIC0xNTQsNiArMTU0LDcgQEAKIAkJICAgICAgdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUsCiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGh3c2hhcmUsCiAJCSAgICAgIHN0cnVjdCBzbmRfd3NzICoqcmNoaXApOworaW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCk7CiBpbnQgc25kX3dzc19wY20oc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CiBpbnQgc25kX3dzc190aW1lcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcik7CiBpbnQgc25kX3dzc19taXhlcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3NrYi5oIGIvaW5jbHVkZS90cmFjZS9za2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY2MTBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9za2IuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9UUkFDRV9TS0JfSF8KKyNkZWZpbmUgX1RSQUNFX1NLQl9IXworCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitERUNMQVJFX1RSQUNFKGtmcmVlX3NrYiwKKwlUUFBST1RPKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKSwKKwlUUEFSR1Moc2tiLCBsb2NhdGlvbikpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vYnJvYWRzaGVldGZiLmggYi9pbmNsdWRlL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTg1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBicm9hZHNoZWV0ZmIuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgYnJvYWRzaGVldCBmcmFtZWJ1ZmZlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgSmF5YSBLdW1hcgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9CUk9BRFNIRUVURkJfSF8KKyNkZWZpbmUgX0xJTlVYX0JST0FEU0hFRVRGQl9IXworCisvKiBCcm9hZHNoZWV0IGNvbW1hbmQgZGVmaW5lcyAqLworI2RlZmluZSBCU19DTURfSU5JVF9TWVNfUlVOCTB4MDYKKyNkZWZpbmUgQlNfQ01EX0lOSVRfRFNQRV9DRkcJMHgwOQorI2RlZmluZSBCU19DTURfSU5JVF9EU1BFX1RNRwkweDBBCisjZGVmaW5lIEJTX0NNRF9JTklUX1JPVE1PREUJMHgwQgorI2RlZmluZSBCU19DTURfUkRfUkVHCQkweDEwCisjZGVmaW5lIEJTX0NNRF9XUl9SRUcJCTB4MTEKKyNkZWZpbmUgQlNfQ01EX0xEX0lNRwkJMHgyMAorI2RlZmluZSBCU19DTURfTERfSU1HX0FSRUEJMHgyMgorI2RlZmluZSBCU19DTURfTERfSU1HX0VORAkweDIzCisjZGVmaW5lIEJTX0NNRF9XQUlUX0RTUEVfVFJHCTB4MjgKKyNkZWZpbmUgQlNfQ01EX1dBSVRfRFNQRV9GUkVORAkweDI5CisjZGVmaW5lIEJTX0NNRF9SRF9XRk1fSU5GTwkweDMwCisjZGVmaW5lIEJTX0NNRF9VUERfSU5JVAkJMHgzMgorI2RlZmluZSBCU19DTURfVVBEX0ZVTEwJCTB4MzMKKyNkZWZpbmUgQlNfQ01EX1VQRF9HRFJWX0NMUgkweDM3CisKKy8qIEJyb2Fkc2hlZXQgcGluIGludGVyZmFjZSBzcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIEJTX0NTCTB4MDEKKyNkZWZpbmUgQlNfREMgCTB4MDIKKyNkZWZpbmUgQlNfV1IgCTB4MDMKKworLyogc3RydWN0IHVzZWQgYnkgYnJvYWRzaGVldC4gYm9hcmQgc3BlY2lmaWMgc3R1ZmYgY29tZXMgZnJvbSAqYm9hcmQgKi8KK3N0cnVjdCBicm9hZHNoZWV0ZmJfcGFyIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYnJvYWRzaGVldF9ib2FyZCAqYm9hcmQ7CisJdm9pZCAoKndyaXRlX3JlZykoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKiwgdTE2IHJlZywgdTE2IHZhbCk7CisJdTE2ICgqcmVhZF9yZWcpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIHUxNiByZWcpOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOworfTsKKworLyogYm9hcmQgc3BlY2lmaWMgcm91dGluZXMgKi8KK3N0cnVjdCBicm9hZHNoZWV0X2JvYXJkIHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlpbnQgKCppbml0KShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKKwlpbnQgKCp3YWl0X2Zvcl9yZHkpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICopOworCXZvaWQgKCpzZXRfY3RsKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqLCB1bnNpZ25lZCBjaGFyLCB1OCk7CisJdm9pZCAoKnNldF9oZGIpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIHUxNik7CisJdTE2ICgqZ2V0X2hkYikoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKik7CisJdm9pZCAoKmNsZWFudXApKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICopOworCWludCAoKmdldF9wYW5lbF90eXBlKSh2b2lkKTsKKwlpbnQgKCpzZXR1cF9pcnEpKHN0cnVjdCBmYl9pbmZvICopOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNmE1YzVmZS4uMTRjNDgzZCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMTAxLDYgKzEwMSw2NiBAQAogCiAJICB3aGljaCBpcyBkb25lIHdpdGhpbiB0aGUgc2NyaXB0ICJzY3JpcHRzL3NldGxvY2FsdmVyc2lvbiIuKQogCitjb25maWcgSEFWRV9LRVJORUxfR1pJUAorCWJvb2wKKworY29uZmlnIEhBVkVfS0VSTkVMX0JaSVAyCisJYm9vbAorCitjb25maWcgSEFWRV9LRVJORUxfTFpNQQorCWJvb2wKKworY2hvaWNlCisJcHJvbXB0ICJLZXJuZWwgY29tcHJlc3Npb24gbW9kZSIKKwlkZWZhdWx0IEtFUk5FTF9HWklQCisJZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9HWklQIHx8IEhBVkVfS0VSTkVMX0JaSVAyIHx8IEhBVkVfS0VSTkVMX0xaTUEKKwloZWxwCisJICBUaGUgbGludXgga2VybmVsIGlzIGEga2luZCBvZiBzZWxmLWV4dHJhY3RpbmcgZXhlY3V0YWJsZS4KKwkgIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLCB3aGljaCBkaWZmZXIKKwkgIGluIGVmZmljaWVuY3ksIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkLgorCSAgQ29tcHJlc3Npb24gc3BlZWQgaXMgb25seSByZWxldmFudCB3aGVuIGJ1aWxkaW5nIGEga2VybmVsLgorCSAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyByZWxldmFudCBhdCBlYWNoIGJvb3QuCisKKwkgIElmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyB3aXRoIGJ6aXAyIG9yIGx6bWEgY29tcHJlc3NlZAorCSAga2VybmVscywgbWFpbCBtZSAoQWxhaW4gS25hZmYpIDxhbGFpbkBrbmFmZi5sdT4uIChBbiBvbGRlcgorCSAgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgKGJ6aXAyIG9ubHkpLCBmb3IgMi40LCB3YXMKKwkgIHN1cHBsaWVkIGJ5IENocmlzdGlhbiBMdWR3aWcpCisKKwkgIEhpZ2ggY29tcHJlc3Npb24gb3B0aW9ucyBhcmUgbW9zdGx5IHVzZWZ1bCBmb3IgdXNlcnMsIHdobworCSAgYXJlIGxvdyBvbiBkaXNrIHNwYWNlIChlbWJlZGRlZCBzeXN0ZW1zKSwgYnV0IGZvciB3aG9tIHJhbQorCSAgc2l6ZSBtYXR0ZXJzIGxlc3MuCisKKwkgIElmIGluIGRvdWJ0LCBzZWxlY3QgJ2d6aXAnCisKK2NvbmZpZyBLRVJORUxfR1pJUAorCWJvb2wgIkd6aXAiCisJZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9HWklQCisJaGVscAorCSAgVGhlIG9sZCBhbmQgdHJpZWQgZ3ppcCBjb21wcmVzc2lvbi4gSXRzIGNvbXByZXNzaW9uIHJhdGlvIGlzCisJICB0aGUgcG9vcmVzdCBhbW9uZyB0aGUgMyBjaG9pY2VzOyBob3dldmVyIGl0cyBzcGVlZCAoYm90aAorCSAgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24pIGlzIHRoZSBmYXN0ZXN0LgorCitjb25maWcgS0VSTkVMX0JaSVAyCisJYm9vbCAiQnppcDIiCisJZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9CWklQMgorCWhlbHAKKwkgIEl0cyBjb21wcmVzc2lvbiByYXRpbyBhbmQgc3BlZWQgaXMgaW50ZXJtZWRpYXRlLgorCSAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyBzbG93ZXN0IGFtb25nIHRoZSB0aHJlZS4gIFRoZSBrZXJuZWwKKwkgIHNpemUgaXMgYWJvdXQgMTAlIHNtYWxsZXIgd2l0aCBiemlwMiwgaW4gY29tcGFyaXNvbiB0byBnemlwLgorCSAgQnppcDIgdXNlcyBhIGxhcmdlIGFtb3VudCBvZiBtZW1vcnkuIEZvciBtb2Rlcm4ga2VybmVscyB5b3UKKwkgIHdpbGwgbmVlZCBhdCBsZWFzdCA4TUIgUkFNIG9yIG1vcmUgZm9yIGJvb3RpbmcuCisKK2NvbmZpZyBLRVJORUxfTFpNQQorCWJvb2wgIkxaTUEiCisJZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWk1BCisJaGVscAorCSAgVGhlIG1vc3QgcmVjZW50IGNvbXByZXNzaW9uIGFsZ29yaXRobS4KKwkgIEl0cyByYXRpbyBpcyBiZXN0LCBkZWNvbXByZXNzaW9uIHNwZWVkIGlzIGJldHdlZW4gdGhlIG90aGVyCisJICB0d28uIENvbXByZXNzaW9uIGlzIHNsb3dlc3QuCVRoZSBrZXJuZWwgc2l6ZSBpcyBhYm91dCAzMyUKKwkgIHNtYWxsZXIgd2l0aCBMWk1BIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBTV0FQCiAJYm9vbCAiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApIgogCWRlcGVuZHMgb24gTU1VICYmIEJMT0NLCkBAIC05NjYsNyArMTAyNiw2IEBACiAKIGNvbmZpZyBSVF9NVVRFWEVTCiAJYm9vbGVhbgotCXNlbGVjdCBQTElTVAogCiBjb25maWcgQkFTRV9TTUFMTAogCWludApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfcmQuYyBiL2luaXQvZG9fbW91bnRzX3JkLmMKaW5kZXggMGYwZjBjZi4uMDI3YTQwMiAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfcmQuYworKysgYi9pbml0L2RvX21vdW50c19yZC5jCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSAiZG9fbW91bnRzLmgiCiAjaW5jbHVkZSAiLi4vZnMvc3F1YXNoZnMvc3F1YXNoZnNfZnMuaCIKIAorI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvZ2VuZXJpYy5oPgorCisKIGludCBfX2luaXRkYXRhIHJkX3Byb21wdCA9IDE7LyogMSA9IHByb21wdCBmb3IgUkFNIGRpc2ssIDAgPSBkb24ndCBwcm9tcHQgKi8KIAogc3RhdGljIGludCBfX2luaXQgcHJvbXB0X3JhbWRpc2soY2hhciAqc3RyKQpAQCAtMjksNyArMzIsNyBAQAogfQogX19zZXR1cCgicmFtZGlza19zdGFydD0iLCByYW1kaXNrX3N0YXJ0X3NldHVwKTsKIAotc3RhdGljIGludCBfX2luaXQgY3JkX2xvYWQoaW50IGluX2ZkLCBpbnQgb3V0X2ZkKTsKK3N0YXRpYyBpbnQgX19pbml0IGNyZF9sb2FkKGludCBpbl9mZCwgaW50IG91dF9mZCwgZGVjb21wcmVzc19mbiBkZWNvKTsKIAogLyoKICAqIFRoaXMgcm91dGluZSB0cmllcyB0byBmaW5kIGEgUkFNIGRpc2sgaW1hZ2UgdG8gbG9hZCwgYW5kIHJldHVybnMgdGhlCkBAIC0zOCwxNSArNDEsMTUgQEAKICAqIG51bWJlcnMgY291bGQgbm90IGJlIGZvdW5kLgogICoKICAqIFdlIGN1cnJlbnRseSBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBtYWdpYyBudW1iZXJzOgotICogCW1pbml4Ci0gKiAJZXh0MgorICoJbWluaXgKKyAqCWV4dDIKICAqCXJvbWZzCiAgKgljcmFtZnMKICAqCXNxdWFzaGZzCi0gKiAJZ3ppcAorICoJZ3ppcAogICovCi1zdGF0aWMgaW50IF9faW5pdCAKLWlkZW50aWZ5X3JhbWRpc2tfaW1hZ2UoaW50IGZkLCBpbnQgc3RhcnRfYmxvY2spCitzdGF0aWMgaW50IF9faW5pdAoraWRlbnRpZnlfcmFtZGlza19pbWFnZShpbnQgZmQsIGludCBzdGFydF9ibG9jaywgZGVjb21wcmVzc19mbiAqZGVjb21wcmVzc29yKQogewogCWNvbnN0IGludCBzaXplID0gNTEyOwogCXN0cnVjdCBtaW5peF9zdXBlcl9ibG9jayAqbWluaXhzYjsKQEAgLTU2LDYgKzU5LDcgQEAKIAlzdHJ1Y3Qgc3F1YXNoZnNfc3VwZXJfYmxvY2sgKnNxdWFzaGZzYjsKIAlpbnQgbmJsb2NrcyA9IC0xOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwljb25zdCBjaGFyICpjb21wcmVzc19uYW1lOwogCiAJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKQEAgLTY5LDE4ICs3MywxOSBAQAogCW1lbXNldChidWYsIDB4ZTUsIHNpemUpOwogCiAJLyoKLQkgKiBSZWFkIGJsb2NrIDAgdG8gdGVzdCBmb3IgZ3ppcHBlZCBrZXJuZWwKKwkgKiBSZWFkIGJsb2NrIDAgdG8gdGVzdCBmb3IgY29tcHJlc3NlZCBrZXJuZWwKIAkgKi8KIAlzeXNfbHNlZWsoZmQsIHN0YXJ0X2Jsb2NrICogQkxPQ0tfU0laRSwgMCk7CiAJc3lzX3JlYWQoZmQsIGJ1Ziwgc2l6ZSk7CiAKLQkvKgotCSAqIElmIGl0IG1hdGNoZXMgdGhlIGd6aXAgbWFnaWMgbnVtYmVycywgcmV0dXJuIDAKLQkgKi8KLQlpZiAoYnVmWzBdID09IDAzNyAmJiAoKGJ1ZlsxXSA9PSAwMjEzKSB8fCAoYnVmWzFdID09IDAyMzYpKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJICAgICAgICJSQU1ESVNLOiBDb21wcmVzc2VkIGltYWdlIGZvdW5kIGF0IGJsb2NrICVkXG4iLAotCQkgICAgICAgc3RhcnRfYmxvY2spOworCSpkZWNvbXByZXNzb3IgPSBkZWNvbXByZXNzX21ldGhvZChidWYsIHNpemUsICZjb21wcmVzc19uYW1lKTsKKwlpZiAoY29tcHJlc3NfbmFtZSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJBTURJU0s6ICVzIGltYWdlIGZvdW5kIGF0IGJsb2NrICVkXG4iLAorCQkgICAgICAgY29tcHJlc3NfbmFtZSwgc3RhcnRfYmxvY2spOworCQlpZiAoISpkZWNvbXByZXNzb3IpCisJCQlwcmludGsoS0VSTl9FTUVSRworCQkJICAgICAgICJSQU1ESVNLOiAlcyBkZWNvbXByZXNzb3Igbm90IGNvbmZpZ3VyZWQhXG4iLAorCQkJICAgICAgIGNvbXByZXNzX25hbWUpOwogCQluYmxvY2tzID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE0Miw3ICsxNDcsNyBAQAogCXByaW50ayhLRVJOX05PVElDRQogCSAgICAgICAiUkFNRElTSzogQ291bGRuJ3QgZmluZCB2YWxpZCBSQU0gZGlzayBpbWFnZSBzdGFydGluZyBhdCAlZC5cbiIsCiAJICAgICAgIHN0YXJ0X2Jsb2NrKTsKLQkKKwogZG9uZToKIAlzeXNfbHNlZWsoZmQsIHN0YXJ0X2Jsb2NrICogQkxPQ0tfU0laRSwgMCk7CiAJa2ZyZWUoYnVmKTsKQEAgLTE1Nyw2ICsxNjIsNyBAQAogCWludCBuYmxvY2tzLCBpLCBkaXNrOwogCWNoYXIgKmJ1ZiA9IE5VTEw7CiAJdW5zaWduZWQgc2hvcnQgcm90YXRlID0gMDsKKwlkZWNvbXByZXNzX2ZuIGRlY29tcHJlc3NvciA9IE5VTEw7CiAjaWYgIWRlZmluZWQoQ09ORklHX1MzOTApICYmICFkZWZpbmVkKENPTkZJR19QUENfSVNFUklFUykKIAljaGFyIHJvdGF0b3JbNF0gPSB7ICd8JyAsICcvJyAsICctJyAsICdcXCcgfTsKICNlbmRpZgpAQCAtMTY5LDEyICsxNzUsMTIgQEAKIAlpZiAoaW5fZmQgPCAwKQogCQlnb3RvIG5vY2xvc2VfaW5wdXQ7CiAKLQluYmxvY2tzID0gaWRlbnRpZnlfcmFtZGlza19pbWFnZShpbl9mZCwgcmRfaW1hZ2Vfc3RhcnQpOworCW5ibG9ja3MgPSBpZGVudGlmeV9yYW1kaXNrX2ltYWdlKGluX2ZkLCByZF9pbWFnZV9zdGFydCwgJmRlY29tcHJlc3Nvcik7CiAJaWYgKG5ibG9ja3MgPCAwKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAobmJsb2NrcyA9PSAwKSB7Ci0JCWlmIChjcmRfbG9hZChpbl9mZCwgb3V0X2ZkKSA9PSAwKQorCQlpZiAoY3JkX2xvYWQoaW5fZmQsIG91dF9mZCwgZGVjb21wcmVzc29yKSA9PSAwKQogCQkJZ290byBzdWNjZXNzZnVsX2xvYWQ7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0yMDAsNyArMjA2LDcgQEAKIAkJICAgICAgIG5ibG9ja3MsIHJkX2Jsb2Nrcyk7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JCQorCiAJLyoKIAkgKiBPSywgdGltZSB0byBjb3B5IGluIHRoZSBkYXRhCiAJICovCkBAIC0yNzMsMTM4ICsyNzksNDggQEAKIAlyZXR1cm4gcmRfbG9hZF9pbWFnZSgiL2Rldi9yb290Iik7CiB9CiAKLS8qCi0gKiBnemlwIGRlY2xhcmF0aW9ucwotICovCi0KLSNkZWZpbmUgT0YoYXJncykgIGFyZ3MKLQotI2lmbmRlZiBtZW16ZXJvCi0jZGVmaW5lIG1lbXplcm8ocywgbikgICAgIG1lbXNldCAoKHMpLCAwLCAobikpCi0jZW5kaWYKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwotCi0jZGVmaW5lIElOQlVGU0laIDQwOTYKLSNkZWZpbmUgV1NJWkUgMHg4MDAwICAgIC8qIHdpbmRvdyBzaXplLS1tdXN0IGJlIGEgcG93ZXIgb2YgdHdvLCBhbmQgKi8KLQkJCS8qICBhdCBsZWFzdCAzMksgZm9yIHppcCdzIGRlZmxhdGUgbWV0aG9kICovCi0KLXN0YXRpYyB1Y2ggKmluYnVmOwotc3RhdGljIHVjaCAqd2luZG93OwotCi1zdGF0aWMgdW5zaWduZWQgaW5zaXplOyAgLyogdmFsaWQgYnl0ZXMgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnB0cjsgICAvKiBpbmRleCBvZiBuZXh0IGJ5dGUgdG8gYmUgcHJvY2Vzc2VkIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgb3V0Y250OyAgLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwogc3RhdGljIGludCBleGl0X2NvZGU7Ci1zdGF0aWMgaW50IHVuemlwX2Vycm9yOwotc3RhdGljIGxvbmcgYnl0ZXNfb3V0Oworc3RhdGljIGludCBkZWNvbXByZXNzX2Vycm9yOwogc3RhdGljIGludCBjcmRfaW5mZCwgY3JkX291dGZkOwogCi0jZGVmaW5lIGdldF9ieXRlKCkgIChpbnB0ciA8IGluc2l6ZSA/IGluYnVmW2lucHRyKytdIDogZmlsbF9pbmJ1ZigpKQotCQkKLS8qIERpYWdub3N0aWMgZnVuY3Rpb25zIChzdHViYmVkIG91dCkgKi8KLSNkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQotI2RlZmluZSBUcmFjZSh4KQotI2RlZmluZSBUcmFjZXYoeCkKLSNkZWZpbmUgVHJhY2V2dih4KQotI2RlZmluZSBUcmFjZWMoYyx4KQotI2RlZmluZSBUcmFjZWN2KGMseCkKLQotI2RlZmluZSBTVEFUSUMgc3RhdGljCi0jZGVmaW5lIElOSVQgX19pbml0Ci0KLXN0YXRpYyBpbnQgIF9faW5pdCBmaWxsX2luYnVmKHZvaWQpOwotc3RhdGljIHZvaWQgX19pbml0IGZsdXNoX3dpbmRvdyh2b2lkKTsKLXN0YXRpYyB2b2lkIF9faW5pdCBlcnJvcihjaGFyICptKTsKLQotI2RlZmluZSBOT19JTkZMQVRFX01BTExPQwotCi0jaW5jbHVkZSAiLi4vbGliL2luZmxhdGUuYyIKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaWxsIHRoZSBpbnB1dCBidWZmZXIuIFRoaXMgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGVtcHR5Ci0gKiBhbmQgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgcmVhbGx5IG5lZWRlZC4KLSAqIFJldHVybmluZyAtMSBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCBndW56aXAoKSB3aWxsIGV2ZXIgcmV0dXJuLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBmaWxsX2luYnVmKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjb21wcl9maWxsKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpZiAoZXhpdF9jb2RlKSByZXR1cm4gLTE7Ci0JCi0JaW5zaXplID0gc3lzX3JlYWQoY3JkX2luZmQsIGluYnVmLCBJTkJVRlNJWik7Ci0JaWYgKGluc2l6ZSA9PSAwKSB7Ci0JCWVycm9yKCJSQU1ESVNLOiByYW4gb3V0IG9mIGNvbXByZXNzZWQgZGF0YSIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaW5wdHIgPSAxOwotCi0JcmV0dXJuIGluYnVmWzBdOworCWludCByID0gc3lzX3JlYWQoY3JkX2luZmQsIGJ1ZiwgbGVuKTsKKwlpZiAociA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiUkFNRElTSzogZXJyb3Igd2hpbGUgcmVhZGluZyBjb21wcmVzc2VkIGRhdGEiKTsKKwllbHNlIGlmIChyID09IDApCisJCXByaW50ayhLRVJOX0VSUiAiUkFNRElTSzogRU9GIHdoaWxlIHJlYWRpbmcgY29tcHJlc3NlZCBkYXRhIik7CisJcmV0dXJuIHI7CiB9CiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgdGhlIG91dHB1dCB3aW5kb3cgd2luZG93WzAuLm91dGNudC0xXSBhbmQgdXBkYXRlIGNyYyBhbmQgYnl0ZXNfb3V0LgotICogKFVzZWQgZm9yIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvbmx5LikKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGZsdXNoX3dpbmRvdyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY29tcHJfZmx1c2godm9pZCAqd2luZG93LCB1bnNpZ25lZCBpbnQgb3V0Y250KQogewotICAgIHVsZyBjID0gY3JjOyAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZSAqLwotICAgIHVuc2lnbmVkIG4sIHdyaXR0ZW47Ci0gICAgdWNoICppbiwgY2g7Ci0gICAgCi0gICAgd3JpdHRlbiA9IHN5c193cml0ZShjcmRfb3V0ZmQsIHdpbmRvdywgb3V0Y250KTsKLSAgICBpZiAod3JpdHRlbiAhPSBvdXRjbnQgJiYgdW56aXBfZXJyb3IgPT0gMCkgewotCXByaW50ayhLRVJOX0VSUiAiUkFNRElTSzogaW5jb21wbGV0ZSB3cml0ZSAoJWQgIT0gJWQpICVsZFxuIiwKLQkgICAgICAgd3JpdHRlbiwgb3V0Y250LCBieXRlc19vdXQpOwotCXVuemlwX2Vycm9yID0gMTsKLSAgICB9Ci0gICAgaW4gPSB3aW5kb3c7Ci0gICAgZm9yIChuID0gMDsgbiA8IG91dGNudDsgbisrKSB7Ci0JICAgIGNoID0gKmluKys7Ci0JICAgIGMgPSBjcmNfMzJfdGFiWygoaW50KWMgXiBjaCkgJiAweGZmXSBeIChjID4+IDgpOwotICAgIH0KLSAgICBjcmMgPSBjOwotICAgIGJ5dGVzX291dCArPSAodWxnKW91dGNudDsKLSAgICBvdXRjbnQgPSAwOworCWludCB3cml0dGVuID0gc3lzX3dyaXRlKGNyZF9vdXRmZCwgd2luZG93LCBvdXRjbnQpOworCWlmICh3cml0dGVuICE9IG91dGNudCkgeworCQlpZiAoZGVjb21wcmVzc19lcnJvciA9PSAwKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIlJBTURJU0s6IGluY29tcGxldGUgd3JpdGUgKCVkICE9ICVkKVxuIiwKKwkJCSAgICAgICB3cml0dGVuLCBvdXRjbnQpOworCQlkZWNvbXByZXNzX2Vycm9yID0gMTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gb3V0Y250OwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZXJyb3IoY2hhciAqeCkKIHsKIAlwcmludGsoS0VSTl9FUlIgIiVzXG4iLCB4KTsKIAlleGl0X2NvZGUgPSAxOwotCXVuemlwX2Vycm9yID0gMTsKKwlkZWNvbXByZXNzX2Vycm9yID0gMTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgY3JkX2xvYWQoaW50IGluX2ZkLCBpbnQgb3V0X2ZkKQorc3RhdGljIGludCBfX2luaXQgY3JkX2xvYWQoaW50IGluX2ZkLCBpbnQgb3V0X2ZkLCBkZWNvbXByZXNzX2ZuIGRlY28pCiB7CiAJaW50IHJlc3VsdDsKLQotCWluc2l6ZSA9IDA7CQkvKiB2YWxpZCBieXRlcyBpbiBpbmJ1ZiAqLwotCWlucHRyID0gMDsJCS8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLQlvdXRjbnQgPSAwOwkJLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotCWV4aXRfY29kZSA9IDA7Ci0JYnl0ZXNfb3V0ID0gMDsKLQljcmMgPSAodWxnKTB4ZmZmZmZmZmZMOyAvKiBzaGlmdCByZWdpc3RlciBjb250ZW50cyAqLwotCiAJY3JkX2luZmQgPSBpbl9mZDsKIAljcmRfb3V0ZmQgPSBvdXRfZmQ7Ci0JaW5idWYgPSBrbWFsbG9jKElOQlVGU0laLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUkFNRElTSzogQ291bGRuJ3QgYWxsb2NhdGUgZ3ppcCBidWZmZXJcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXdpbmRvdyA9IGttYWxsb2MoV1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghd2luZG93KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUkFNRElTSzogQ291bGRuJ3QgYWxsb2NhdGUgZ3ppcCB3aW5kb3dcbiIpOwotCQlrZnJlZShpbmJ1Zik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbWFrZWNyYygpOwotCXJlc3VsdCA9IGd1bnppcCgpOwotCWlmICh1bnppcF9lcnJvcikKKwlyZXN1bHQgPSBkZWNvKE5VTEwsIDAsIGNvbXByX2ZpbGwsIGNvbXByX2ZsdXNoLCBOVUxMLCBOVUxMLCBlcnJvcik7CisJaWYgKGRlY29tcHJlc3NfZXJyb3IpCiAJCXJlc3VsdCA9IDE7Ci0Ja2ZyZWUoaW5idWYpOwotCWtmcmVlKHdpbmRvdyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IGQ5Yzk0MWMuLjYxOWMxYmEgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGlyZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91dGltZS5oPgogCkBAIC0xNjYsOCArMTY3LDYgQEAKIHN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGNvdW50Owogc3RhdGljIF9faW5pdGRhdGEgbG9mZl90IHRoaXNfaGVhZGVyLCBuZXh0X2hlYWRlcjsKIAotc3RhdGljIF9faW5pdGRhdGEgaW50IGRyeV9ydW47Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZWF0KHVuc2lnbmVkIG4pCiB7CiAJdmljdGltICs9IG47CkBAIC0yMjksMTAgKzIyOCw2IEBACiAJcGFyc2VfaGVhZGVyKGNvbGxlY3RlZCk7CiAJbmV4dF9oZWFkZXIgPSB0aGlzX2hlYWRlciArIE5fQUxJR04obmFtZV9sZW4pICsgYm9keV9sZW47CiAJbmV4dF9oZWFkZXIgPSAobmV4dF9oZWFkZXIgKyAzKSAmIH4zOwotCWlmIChkcnlfcnVuKSB7Ci0JCXJlYWRfaW50byhuYW1lX2J1ZiwgTl9BTElHTihuYW1lX2xlbiksIEdvdE5hbWUpOwotCQlyZXR1cm4gMDsKLQl9CiAJc3RhdGUgPSBTa2lwSXQ7CiAJaWYgKG5hbWVfbGVuIDw9IDAgfHwgbmFtZV9sZW4gPiBQQVRIX01BWCkKIAkJcmV0dXJuIDA7CkBAIC0zMDMsOCArMjk4LDYgQEAKIAkJZnJlZV9oYXNoKCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoZHJ5X3J1bikKLQkJcmV0dXJuIDA7CiAJY2xlYW5fcGF0aChjb2xsZWN0ZWQsIG1vZGUpOwogCWlmIChTX0lTUkVHKG1vZGUpKSB7CiAJCWludCBtbCA9IG1heWJlX2xpbmsoKTsKQEAgLTM5MCwxMSArMzgzLDEzIEBACiAJcmV0dXJuIGxlbiAtIGNvdW50OwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmx1c2hfYnVmZmVyKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQorc3RhdGljIGludCBfX2luaXQgZmx1c2hfYnVmZmVyKHZvaWQgKmJ1ZnYsIHVuc2lnbmVkIGxlbikKIHsKKwljaGFyICpidWYgPSAoY2hhciAqKSBidWZ2OwogCWludCB3cml0dGVuOworCWludCBvcmlnTGVuID0gbGVuOwogCWlmIChtZXNzYWdlKQotCQlyZXR1cm47CisJCXJldHVybiAtMTsKIAl3aGlsZSAoKHdyaXR0ZW4gPSB3cml0ZV9idWZmZXIoYnVmLCBsZW4pKSA8IGxlbiAmJiAhbWVzc2FnZSkgewogCQljaGFyIGMgPSBidWZbd3JpdHRlbl07CiAJCWlmIChjID09ICcwJykgewpAQCAtNDA4LDg0ICs0MDMsMjcgQEAKIAkJfSBlbHNlCiAJCQllcnJvcigianVuayBpbiBjb21wcmVzc2VkIGFyY2hpdmUiKTsKIAl9CisJcmV0dXJuIG9yaWdMZW47CiB9CiAKLS8qCi0gKiBnemlwIGRlY2xhcmF0aW9ucwotICovCitzdGF0aWMgdW5zaWduZWQgbXlfaW5wdHI7ICAgLyogaW5kZXggb2YgbmV4dCBieXRlIHRvIGJlIHByb2Nlc3NlZCBpbiBpbmJ1ZiAqLwogCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9nZW5lcmljLmg+CiAKLSNpZm5kZWYgbWVtemVybwotI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQotI2VuZGlmCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgdWNoOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2g7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKLQotI2RlZmluZSBXU0laRSAweDgwMDAgICAgLyogd2luZG93IHNpemUtLW11c3QgYmUgYSBwb3dlciBvZiB0d28sIGFuZCAqLwotCQkJLyogIGF0IGxlYXN0IDMySyBmb3IgemlwJ3MgZGVmbGF0ZSBtZXRob2QgKi8KLQotc3RhdGljIHVjaCAqaW5idWY7Ci1zdGF0aWMgdWNoICp3aW5kb3c7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnNpemU7ICAvKiB2YWxpZCBieXRlcyBpbiBpbmJ1ZiAqLwotc3RhdGljIHVuc2lnbmVkIGlucHRyOyAgIC8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQ7ICAvKiBieXRlcyBpbiBvdXRwdXQgYnVmZmVyICovCi1zdGF0aWMgbG9uZyBieXRlc19vdXQ7Ci0KLSNkZWZpbmUgZ2V0X2J5dGUoKSAgKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiAtMSkKLQkJCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAoc3R1YmJlZCBvdXQpICovCi0jZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSNkZWZpbmUgVHJhY2UoeCkKLSNkZWZpbmUgVHJhY2V2KHgpCi0jZGVmaW5lIFRyYWNldnYoeCkKLSNkZWZpbmUgVHJhY2VjKGMseCkKLSNkZWZpbmUgVHJhY2VjdihjLHgpCi0KLSNkZWZpbmUgU1RBVElDIHN0YXRpYwotI2RlZmluZSBJTklUIF9faW5pdAotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmx1c2hfd2luZG93KHZvaWQpOwotc3RhdGljIHZvaWQgX19pbml0IGVycm9yKGNoYXIgKm0pOwotCi0jZGVmaW5lIE5PX0lORkxBVEVfTUFMTE9DCi0KLSNpbmNsdWRlICIuLi9saWIvaW5mbGF0ZS5jIgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFdyaXRlIHRoZSBvdXRwdXQgd2luZG93IHdpbmRvd1swLi5vdXRjbnQtMV0gYW5kIHVwZGF0ZSBjcmMgYW5kIGJ5dGVzX291dC4KLSAqIChVc2VkIGZvciB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb25seS4pCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBmbHVzaF93aW5kb3codm9pZCkKLXsKLQl1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLQl1bnNpZ25lZCBuOwotCXVjaCAqaW4sIGNoOwotCi0JZmx1c2hfYnVmZmVyKHdpbmRvdywgb3V0Y250KTsKLQlpbiA9IHdpbmRvdzsKLQlmb3IgKG4gPSAwOyBuIDwgb3V0Y250OyBuKyspIHsKLQkJY2ggPSAqaW4rKzsKLQkJYyA9IGNyY18zMl90YWJbKChpbnQpYyBeIGNoKSAmIDB4ZmZdIF4gKGMgPj4gOCk7Ci0JfQotCWNyYyA9IGM7Ci0JYnl0ZXNfb3V0ICs9ICh1bGcpb3V0Y250OwotCW91dGNudCA9IDA7Ci19Ci0KLXN0YXRpYyBjaGFyICogX19pbml0IHVucGFja190b19yb290ZnMoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIGludCBjaGVja19vbmx5KQorc3RhdGljIGNoYXIgKiBfX2luaXQgdW5wYWNrX3RvX3Jvb3RmcyhjaGFyICpidWYsIHVuc2lnbmVkIGxlbikKIHsKIAlpbnQgd3JpdHRlbjsKLQlkcnlfcnVuID0gY2hlY2tfb25seTsKKwlkZWNvbXByZXNzX2ZuIGRlY29tcHJlc3M7CisJY29uc3QgY2hhciAqY29tcHJlc3NfbmFtZTsKKwlzdGF0aWMgX19pbml0ZGF0YSBjaGFyIG1zZ19idWZbNjRdOworCiAJaGVhZGVyX2J1ZiA9IGttYWxsb2MoMTEwLCBHRlBfS0VSTkVMKTsKIAlzeW1saW5rX2J1ZiA9IGttYWxsb2MoUEFUSF9NQVggKyBOX0FMSUdOKFBBVEhfTUFYKSArIDEsIEdGUF9LRVJORUwpOwogCW5hbWVfYnVmID0ga21hbGxvYyhOX0FMSUdOKFBBVEhfTUFYKSwgR0ZQX0tFUk5FTCk7Ci0Jd2luZG93ID0ga21hbGxvYyhXU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3aW5kb3cgfHwgIWhlYWRlcl9idWYgfHwgIXN5bWxpbmtfYnVmIHx8ICFuYW1lX2J1ZikKKworCWlmICghaGVhZGVyX2J1ZiB8fCAhc3ltbGlua19idWYgfHwgIW5hbWVfYnVmKQogCQlwYW5pYygiY2FuJ3QgYWxsb2NhdGUgYnVmZmVycyIpOworCiAJc3RhdGUgPSBTdGFydDsKIAl0aGlzX2hlYWRlciA9IDA7CiAJbWVzc2FnZSA9IE5VTEw7CkBAIC01MDUsMjIgKzQ0MywyNSBAQAogCQkJY29udGludWU7CiAJCX0KIAkJdGhpc19oZWFkZXIgPSAwOwotCQlpbnNpemUgPSBsZW47Ci0JCWluYnVmID0gYnVmOwotCQlpbnB0ciA9IDA7Ci0JCW91dGNudCA9IDA7CQkvKiBieXRlcyBpbiBvdXRwdXQgYnVmZmVyICovCi0JCWJ5dGVzX291dCA9IDA7Ci0JCWNyYyA9ICh1bGcpMHhmZmZmZmZmZkw7IC8qIHNoaWZ0IHJlZ2lzdGVyIGNvbnRlbnRzICovCi0JCW1ha2VjcmMoKTsKLQkJZ3VuemlwKCk7CisJCWRlY29tcHJlc3MgPSBkZWNvbXByZXNzX21ldGhvZChidWYsIGxlbiwgJmNvbXByZXNzX25hbWUpOworCQlpZiAoZGVjb21wcmVzcykKKwkJCWRlY29tcHJlc3MoYnVmLCBsZW4sIE5VTEwsIGZsdXNoX2J1ZmZlciwgTlVMTCwKKwkJCQkgICAmbXlfaW5wdHIsIGVycm9yKTsKKwkJZWxzZSBpZiAoY29tcHJlc3NfbmFtZSkgeworCQkJaWYgKCFtZXNzYWdlKSB7CisJCQkJc25wcmludGYobXNnX2J1Ziwgc2l6ZW9mIG1zZ19idWYsCisJCQkJCSAiY29tcHJlc3Npb24gbWV0aG9kICVzIG5vdCBjb25maWd1cmVkIiwKKwkJCQkJIGNvbXByZXNzX25hbWUpOworCQkJCW1lc3NhZ2UgPSBtc2dfYnVmOworCQkJfQorCQl9CiAJCWlmIChzdGF0ZSAhPSBSZXNldCkKLQkJCWVycm9yKCJqdW5rIGluIGd6aXBwZWQgYXJjaGl2ZSIpOwotCQl0aGlzX2hlYWRlciA9IHNhdmVkX29mZnNldCArIGlucHRyOwotCQlidWYgKz0gaW5wdHI7Ci0JCWxlbiAtPSBpbnB0cjsKKwkJCWVycm9yKCJqdW5rIGluIGNvbXByZXNzZWQgYXJjaGl2ZSIpOworCQl0aGlzX2hlYWRlciA9IHNhdmVkX29mZnNldCArIG15X2lucHRyOworCQlidWYgKz0gbXlfaW5wdHI7CisJCWxlbiAtPSBteV9pbnB0cjsKIAl9CiAJZGlyX3V0aW1lKCk7Ci0Ja2ZyZWUod2luZG93KTsKIAlrZnJlZShuYW1lX2J1Zik7CiAJa2ZyZWUoc3ltbGlua19idWYpOwogCWtmcmVlKGhlYWRlcl9idWYpOwpAQCAtNTc0LDI0ICs1MTUsNzMgQEAKIAlpbml0cmRfZW5kID0gMDsKIH0KIAorI2RlZmluZSBCVUZfU0laRSAxMDI0CitzdGF0aWMgdm9pZCBfX2luaXQgY2xlYW5fcm9vdGZzKHZvaWQpCit7CisJaW50IGZkOworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3QgbGludXhfZGlyZW50NjQgKmRpcnA7CisJaW50IGNvdW50OworCisJZmQgPSBzeXNfb3BlbigiLyIsIE9fUkRPTkxZLCAwKTsKKwlXQVJOX09OKGZkIDwgMCk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuOworCWJ1ZiA9IGt6YWxsb2MoQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCVdBUk5fT04oIWJ1Zik7CisJaWYgKCFidWYpIHsKKwkJc3lzX2Nsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCWRpcnAgPSBidWY7CisJY291bnQgPSBzeXNfZ2V0ZGVudHM2NChmZCwgZGlycCwgQlVGX1NJWkUpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpbnQgcmV0OworCisJCQlyZXQgPSBzeXNfbmV3bHN0YXQoZGlycC0+ZF9uYW1lLCAmc3QpOworCQkJV0FSTl9PTl9PTkNFKHJldCk7CisJCQlpZiAoIXJldCkgeworCQkJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCQlzeXNfcm1kaXIoZGlycC0+ZF9uYW1lKTsKKwkJCQllbHNlCisJCQkJCXN5c191bmxpbmsoZGlycC0+ZF9uYW1lKTsKKwkJCX0KKworCQkJY291bnQgLT0gZGlycC0+ZF9yZWNsZW47CisJCQlkaXJwID0gKHZvaWQgKilkaXJwICsgZGlycC0+ZF9yZWNsZW47CisJCX0KKwkJZGlycCA9IGJ1ZjsKKwkJbWVtc2V0KGJ1ZiwgMCwgQlVGX1NJWkUpOworCQljb3VudCA9IHN5c19nZXRkZW50czY0KGZkLCBkaXJwLCBCVUZfU0laRSk7CisJfQorCisJc3lzX2Nsb3NlKGZkKTsKKwlrZnJlZShidWYpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBwb3B1bGF0ZV9yb290ZnModm9pZCkKIHsKIAljaGFyICplcnIgPSB1bnBhY2tfdG9fcm9vdGZzKF9faW5pdHJhbWZzX3N0YXJ0LAotCQkJIF9faW5pdHJhbWZzX2VuZCAtIF9faW5pdHJhbWZzX3N0YXJ0LCAwKTsKKwkJCSBfX2luaXRyYW1mc19lbmQgLSBfX2luaXRyYW1mc19zdGFydCk7CiAJaWYgKGVycikKLQkJcGFuaWMoZXJyKTsKKwkJcGFuaWMoZXJyKTsJLyogRmFpbGVkIHRvIGRlY29tcHJlc3MgSU5URVJOQUwgaW5pdHJhbWZzICovCiAJaWYgKGluaXRyZF9zdGFydCkgewogI2lmZGVmIENPTkZJR19CTEtfREVWX1JBTQogCQlpbnQgZmQ7CiAJCXByaW50ayhLRVJOX0lORk8gImNoZWNraW5nIGlmIGltYWdlIGlzIGluaXRyYW1mcy4uLiIpOwogCQllcnIgPSB1bnBhY2tfdG9fcm9vdGZzKChjaGFyICopaW5pdHJkX3N0YXJ0LAotCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgMSk7CisJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKIAkJaWYgKCFlcnIpIHsKIAkJCXByaW50aygiIGl0IGlzXG4iKTsKLQkJCXVucGFja190b19yb290ZnMoKGNoYXIgKilpbml0cmRfc3RhcnQsCi0JCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgMCk7CiAJCQlmcmVlX2luaXRyZCgpOwogCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQljbGVhbl9yb290ZnMoKTsKKwkJCXVucGFja190b19yb290ZnMoX19pbml0cmFtZnNfc3RhcnQsCisJCQkJIF9faW5pdHJhbWZzX2VuZCAtIF9faW5pdHJhbWZzX3N0YXJ0KTsKIAkJfQogCQlwcmludGsoIml0IGlzbid0ICglcyk7IGxvb2tzIGxpa2UgYW4gaW5pdHJkXG4iLCBlcnIpOwogCQlmZCA9IHN5c19vcGVuKCIvaW5pdHJkLmltYWdlIiwgT19XUk9OTFl8T19DUkVBVCwgMDcwMCk7CkBAIC02MDQsMTAgKzU5NCwxMyBAQAogI2Vsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5wYWNraW5nIGluaXRyYW1mcy4uLiIpOwogCQllcnIgPSB1bnBhY2tfdG9fcm9vdGZzKChjaGFyICopaW5pdHJkX3N0YXJ0LAotCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgMCk7Ci0JCWlmIChlcnIpCi0JCQlwYW5pYyhlcnIpOwotCQlwcmludGsoIiBkb25lXG4iKTsKKwkJCWluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoIiBmYWlsZWQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VNRVJHICIlc1xuIiwgZXJyKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiIGRvbmVcbiIpOworCQl9CiAJCWZyZWVfaW5pdHJkKCk7CiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDgzNjk3ZTEuLjZiZjgzYWYgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2twcm90ZWN0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xMzUsMTQgKzEzNiwxNCBAQAogICogZ3JlYXRlciB0aGFuIDAsIGxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyBhY3RpdmF0ZWQgaW4KICAqIFNNUCBtb2RlIHRvIDxOVU0+LgogICovCi0jaWZuZGVmIENPTkZJR19YODZfSU9fQVBJQwotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfaW9hcGljX3NldHVwKHZvaWQpIHt9OwotI2VuZGlmCisKK3ZvaWQgX193ZWFrIGFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCh2b2lkKSB7IH0KIAogc3RhdGljIGludCBfX2luaXQgbm9zbXAoY2hhciAqc3RyKQogewogCXNldHVwX21heF9jcHVzID0gMDsKLQlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOworCWFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MiwxNCArMTUzLDE0IEBACiB7CiAJZ2V0X29wdGlvbigmc3RyLCAmc2V0dXBfbWF4X2NwdXMpOwogCWlmIChzZXR1cF9tYXhfY3B1cyA9PSAwKQotCQlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOworCQlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKIAogCXJldHVybiAwOwogfQogCiBlYXJseV9wYXJhbSgibWF4Y3B1cyIsIG1heGNwdXMpOwogI2Vsc2UKLSNkZWZpbmUgc2V0dXBfbWF4X2NwdXMgTlJfQ1BVUworY29uc3QgdW5zaWduZWQgaW50IHNldHVwX21heF9jcHVzID0gTlJfQ1BVUzsKICNlbmRpZgogCiAvKgpAQCAtNTQwLDYgKzU0MSwxMiBAQAogCSAqLwogCWxvY2tkZXBfaW5pdCgpOwogCWRlYnVnX29iamVjdHNfZWFybHlfaW5pdCgpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIHRoZSBpbml0aWFsIGNhbmFyeSBBU0FQOgorCSAqLworCWJvb3RfaW5pdF9zdGFja19jYW5hcnkoKTsKKwogCWNncm91cF9pbml0X2Vhcmx5KCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDU0YjQwNzcuLmE4ZGRhZGIgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTExNTYsMTAgKzExNTYsMTIgQEAKIAlvbXFzdGF0Lm1xX2ZsYWdzID0gZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CiAJaWYgKHVfbXFzdGF0KSB7CiAJCWF1ZGl0X21xX2dldHNldGF0dHIobXFkZXMsICZtcXN0YXQpOworCQlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJCWlmIChtcXN0YXQubXFfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJZmlscC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwogCQllbHNlCiAJCQlmaWxwLT5mX2ZsYWdzICY9IH5PX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAogCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCX0KZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCAwNWQ1MWQyLi5mMjM5ZDg3IDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaXBjX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMzgzLDYgKzM4NCw3IEBACiAJZXJyb3IgPSBQVFJfRVJSKGZpbGUpOwogCWlmIChJU19FUlIoZmlsZSkpCiAJCWdvdG8gbm9fZmlsZTsKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCiAJaWQgPSBpcGNfYWRkaWQoJnNobV9pZHMobnMpLCAmc2hwLT5zaG1fcGVybSwgbnMtPnNobV9jdGxtbmkpOwogCWlmIChpZCA8IDApIHsKQEAgLTg4Nyw2ICs4ODksNyBAQAogCWZpbGUgPSBhbGxvY19maWxlKHBhdGgubW50LCBwYXRoLmRlbnRyeSwgZl9tb2RlLCAmc2htX2ZpbGVfb3BlcmF0aW9ucyk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dF9mcmVlOworCWltYV9zaG1fY2hlY2soZmlsZSk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzZmQ7CiAJZmlsZS0+Zl9tYXBwaW5nID0gc2hwLT5zaG1fZmlsZS0+Zl9tYXBwaW5nOwpkaWZmIC0tZ2l0IGEva2VybmVsL2FzeW5jLmMgYi9rZXJuZWwvYXN5bmMuYwppbmRleCBmNTY1ODkxLi45NjhlZjk0IDEwMDY0NAotLS0gYS9rZXJuZWwvYXN5bmMuYworKysgYi9rZXJuZWwvYXN5bmMuYwpAQCAtNDksNiArNDksNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zODcsMjAgKzM4OCwxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY19pbml0KHZvaWQpCiB7Ci0JaWYgKGFzeW5jX2VuYWJsZWQpCi0JCWlmIChJU19FUlIoa3RocmVhZF9ydW4oYXN5bmNfbWFuYWdlcl90aHJlYWQsIE5VTEwsCi0JCQkJICAgICAgICJhc3luYy9tZ3IiKSkpCi0JCQlhc3luY19lbmFibGVkID0gMDsKKwlhc3luY19lbmFibGVkID0KKwkJIUlTX0VSUihrdGhyZWFkX3J1bihhc3luY19tYW5hZ2VyX3RocmVhZCwgTlVMTCwgImFzeW5jL21nciIpKTsKKworCVdBUk5fT04oIWFzeW5jX2VuYWJsZWQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9hc3luYyhjaGFyICpzdHIpCi17Ci0JYXN5bmNfZW5hYmxlZCA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImZhc3Rib290Iiwgc2V0dXBfYXN5bmMpOwotCi0KIGNvcmVfaW5pdGNhbGwoYXN5bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggOWVkYjVjNC4uYzUwMGNhNyAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMTA3MSw3ICsxMDcxLDggQEAKIAkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCX0KIAotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlyZXR1cm4gMDsKIAogIGZyZWVfY2dfbGlua3M6CiAJZnJlZV9jZ19saW5rcygmdG1wX2NnX2xpbmtzKTsKQEAgLTE2MjcsNyArMTYyOCw3IEBACiBzdGF0aWMgaW50IGNncm91cF9jcmVhdGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAogCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjZ3JvdXBfZG9wcyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNncm91cF9kb3BzID0gewogCQkuZF9pcHV0ID0gY2dyb3VwX2RpcHV0LAogCX07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGVmZDMwY2MuLjE2N2UxZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtOTgwLDEyICs5ODAsOSBAQAogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG93X3dhdGVyX2xvY2spOwogCXN0YXRpYyBpbnQgbG93ZXN0X3RvX2RhdGUgPSBUSFJFQURfU0laRTsKLQl1bnNpZ25lZCBsb25nICpuID0gZW5kX29mX3N0YWNrKGN1cnJlbnQpOwogCXVuc2lnbmVkIGxvbmcgZnJlZTsKIAotCXdoaWxlICgqbiA9PSAwKQotCQluKys7Ci0JZnJlZSA9ICh1bnNpZ25lZCBsb25nKW4gLSAodW5zaWduZWQgbG9uZyllbmRfb2Zfc3RhY2soY3VycmVudCk7CisJZnJlZSA9IHN0YWNrX25vdF91c2VkKGN1cnJlbnQpOwogCiAJaWYgKGZyZWUgPj0gbG93ZXN0X3RvX2RhdGUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDQ4NTRjMmMuLjY3MTVlYmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC0yMTIsNiArMjEzLDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCXVuc2lnbmVkIGxvbmcgKnN0YWNrZW5kOworCiAJaW50IGVycjsKIAogCXByZXBhcmVfdG9fY29weShvcmlnKTsKQEAgLTIzNyw2ICsyNDAsOCBAQAogCQlnb3RvIG91dDsKIAogCXNldHVwX3RocmVhZF9zdGFjayh0c2ssIG9yaWcpOworCXN0YWNrZW5kID0gZW5kX29mX3N0YWNrKHRzayk7CisJKnN0YWNrZW5kID0gU1RBQ0tfRU5EX01BR0lDOwkvKiBmb3Igb3ZlcmZsb3cgZGV0ZWN0aW9uICovCiAKICNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKIAl0c2stPnN0YWNrX2NhbmFyeSA9IGdldF9yYW5kb21faW50KCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDQzODcwMWEuLjZiNTBhMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0xMTQsNyArMTE0LDkgQEAKIH07CiAKIC8qCi0gKiBTcGxpdCB0aGUgZ2xvYmFsIGZ1dGV4X2xvY2sgaW50byBldmVyeSBoYXNoIGxpc3QgbG9jay4KKyAqIEhhc2ggYnVja2V0cyBhcmUgc2hhcmVkIGJ5IGFsbCB0aGUgZnV0ZXhfa2V5cyB0aGF0IGhhc2ggdG8gdGhlIHNhbWUKKyAqIGxvY2F0aW9uLiAgRWFjaCBrZXkgbWF5IGhhdmUgbXVsdGlwbGUgZnV0ZXhfcSBzdHJ1Y3R1cmVzLCBvbmUgZm9yIGVhY2ggdGFzaworICogd2FpdGluZyBvbiBhIGZ1dGV4LgogICovCiBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgewogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTE4OSw4ICsxOTEsNyBAQAogLyoqCiAgKiBnZXRfZnV0ZXhfa2V5IC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4LgogICogQHVhZGRyOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1dGV4Ci0gKiBAc2hhcmVkOiBOVUxMIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwKLSAqCSZjdXJyZW50LT5tbS0+bW1hcF9zZW0gZm9yIGEgUFJPQ0VTU19TSEFSRUQgZnV0ZXgKKyAqIEBmc2hhcmVkOiAwIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwgMSBmb3IgUFJPQ0VTU19TSEFSRUQKICAqIEBrZXk6IGFkZHJlc3Mgd2hlcmUgcmVzdWx0IGlzIHN0b3JlZC4KICAqCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciAwCkBAIC0yMDAsOSArMjAxLDcgQEAKICAqIG9mZnNldF93aXRoaW5fcGFnZSkuICBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgaXQncyAodWFkZHIsIGN1cnJlbnQtPm1tKS4KICAqIFdlIGNhbiB1c3VhbGx5IHdvcmsgb3V0IHRoZSBpbmRleCB3aXRob3V0IHN3YXBwaW5nIGluIHRoZSBwYWdlLgogICoKLSAqIGZzaGFyZWQgaXMgTlVMTCBmb3IgUFJPQ0VTU19QUklWQVRFIGZ1dGV4ZXMKLSAqIEZvciBvdGhlciBmdXRleGVzLCBpdCBwb2ludHMgdG8gJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSBhbmQKLSAqIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIHJlYWRlciBsb2NrLiBidXQgTk9UIGFueSBzcGlubG9ja3MuCisgKiBsb2NrX3BhZ2UoKSBtaWdodCBzbGVlcCwgdGhlIGNhbGxlciBzaG91bGQgbm90IGhvbGQgYSBzcGlubG9jay4KICAqLwogc3RhdGljIGludCBnZXRfZnV0ZXhfa2V5KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgZnNoYXJlZCwgdW5pb24gZnV0ZXhfa2V5ICprZXkpCiB7CkBAIC0yOTksNDEgKzI5OCw2IEBACiAJcmV0dXJuIHJldCA/IC1FRkFVTFQgOiAwOwogfQogCi0vKgotICogRmF1bHQgaGFuZGxpbmcuCi0gKi8KLXN0YXRpYyBpbnQgZnV0ZXhfaGFuZGxlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IGF0dGVtcHQpCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0JaW50IHJldCA9IC1FRkFVTFQ7Ci0KLQlpZiAoYXR0ZW1wdCA+IDIpCi0JCXJldHVybiByZXQ7Ci0KLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0Jdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpOwotCWlmICh2bWEgJiYgYWRkcmVzcyA+PSB2bWEtPnZtX3N0YXJ0ICYmCi0JICAgICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSB7Ci0JCWludCBmYXVsdDsKLQkJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgMSk7Ci0JCWlmICh1bmxpa2VseSgoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpKSB7Ci0jaWYgMAotCQkJLyogWFhYOiBsZXQncyBkbyB0aGlzIHdoZW4gd2UgdmVyaWZ5IGl0IGlzIE9LICovCi0JCQlpZiAocmV0ICYgVk1fRkFVTFRfT09NKQotCQkJCXJldCA9IC1FTk9NRU07Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCXJldCA9IDA7Ci0JCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKLQkJCQljdXJyZW50LT5tYWpfZmx0Kys7Ci0JCQllbHNlCi0JCQkJY3VycmVudC0+bWluX2ZsdCsrOwotCQl9Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIHJldDsKLX0KIAogLyoKICAqIFBJIGNvZGU6CkBAIC01ODksMTAgKzU1Myw5IEBACiAJICogVGhlIHdhaXRpbmcgdGFzayBjYW4gZnJlZSB0aGUgZnV0ZXhfcSBhcyBzb29uIGFzIHRoaXMgaXMgd3JpdHRlbiwKIAkgKiB3aXRob3V0IHRha2luZyBhbnkgbG9ja3MuICBUaGlzIG11c3QgY29tZSBsYXN0LgogCSAqCi0JICogQSBtZW1vcnkgYmFycmllciBpcyByZXF1aXJlZCBoZXJlIHRvIHByZXZlbnQgdGhlIGZvbGxvd2luZyBzdG9yZQotCSAqIHRvIGxvY2tfcHRyIGZyb20gZ2V0dGluZyBhaGVhZCBvZiB0aGUgd2FrZXVwLiBDbGVhcmluZyB0aGUgbG9jawotCSAqIGF0IHRoZSBlbmQgb2Ygd2FrZV91cF9hbGwoKSBkb2VzIG5vdCBwcmV2ZW50IHRoaXMgc3RvcmUgZnJvbQotCSAqIG1vdmluZy4KKwkgKiBBIG1lbW9yeSBiYXJyaWVyIGlzIHJlcXVpcmVkIGhlcmUgdG8gcHJldmVudCB0aGUgZm9sbG93aW5nIHN0b3JlIHRvCisJICogbG9ja19wdHIgZnJvbSBnZXR0aW5nIGFoZWFkIG9mIHRoZSB3YWtldXAuIENsZWFyaW5nIHRoZSBsb2NrIGF0IHRoZQorCSAqIGVuZCBvZiB3YWtlX3VwKCkgZG9lcyBub3QgcHJldmVudCB0aGlzIHN0b3JlIGZyb20gbW92aW5nLgogCSAqLwogCXNtcF93bWIoKTsKIAlxLT5sb2NrX3B0ciA9IE5VTEw7CkBAIC02OTIsOSArNjU1LDE2IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvdWJsZV91bmxvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKQoreworCXNwaW5fdW5sb2NrKCZoYjEtPmxvY2spOworCWlmIChoYjEgIT0gaGIyKQorCQlzcGluX3VubG9jaygmaGIyLT5sb2NrKTsKK30KKwogLyoKLSAqIFdha2UgdXAgYWxsIHdhaXRlcnMgaGFzaGVkIG9uIHRoZSBwaHlzaWNhbCBwYWdlIHRoYXQgaXMgbWFwcGVkCi0gKiB0byB0aGlzIHZpcnR1YWwgYWRkcmVzczoKKyAqIFdha2UgdXAgd2FpdGVycyBtYXRjaGluZyBiaXRzZXQgcXVldWVkIG9uIHRoaXMgZnV0ZXggKHVhZGRyKS4KICAqLwogc3RhdGljIGludCBmdXRleF93YWtlKHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgZnNoYXJlZCwgaW50IG5yX3dha2UsIHUzMiBiaXRzZXQpCiB7CkBAIC03NTAsOSArNzIwLDkgQEAKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgKmhiMjsKIAlzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgZnV0ZXhfcSAqdGhpcywgKm5leHQ7Ci0JaW50IHJldCwgb3BfcmV0LCBhdHRlbXB0ID0gMDsKKwlpbnQgcmV0LCBvcF9yZXQ7CiAKLXJldHJ5ZnVsbDoKK3JldHJ5OgogCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCBmc2hhcmVkLCAma2V5MSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CkBAIC03NjMsMTYgKzczMywxMyBAQAogCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOwogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCi1yZXRyeToKIAlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7Ci0KK3JldHJ5X3ByaXZhdGU6CiAJb3BfcmV0ID0gZnV0ZXhfYXRvbWljX29wX2ludXNlcihvcCwgdWFkZHIyKTsKIAlpZiAodW5saWtlbHkob3BfcmV0IDwgMCkpIHsKIAkJdTMyIGR1bW15OwogCi0JCXNwaW5fdW5sb2NrKCZoYjEtPmxvY2spOwotCQlpZiAoaGIxICE9IGhiMikKLQkJCXNwaW5fdW5sb2NrKCZoYjItPmxvY2spOworCQlkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTsKIAogI2lmbmRlZiBDT05GSUdfTU1VCiAJCS8qCkBAIC03ODgsMjYgKzc1NSwxNiBAQAogCQkJZ290byBvdXRfcHV0X2tleXM7CiAJCX0KIAotCQkvKgotCQkgKiBmdXRleF9hdG9taWNfb3BfaW51c2VyIG5lZWRzIHRvIGJvdGggcmVhZCBhbmQgd3JpdGUKLQkJICogKihpbnQgX191c2VyICopdWFkZHIyLCBidXQgd2UgY2FuJ3QgbW9kaWZ5IGl0Ci0JCSAqIG5vbi1hdG9taWNhbGx5LiAgVGhlcmVmb3JlLCBpZiBnZXRfdXNlciBiZWxvdyBpcyBub3QKLQkJICogZW5vdWdoLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgZmF1bHQgb3Vyc2VsdmVzLCB3aGlsZQotCQkgKiBzdGlsbCBob2xkaW5nIHRoZSBtbWFwX3NlbS4KLQkJICovCi0JCWlmIChhdHRlbXB0KyspIHsKLQkJCXJldCA9IGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkcjIsCi0JCQkJCQkgYXR0ZW1wdCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0X3B1dF9rZXlzOwotCQkJZ290byByZXRyeTsKLQkJfQotCiAJCXJldCA9IGdldF91c2VyKGR1bW15LCB1YWRkcjIpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0X3B1dF9rZXlzOwogCi0JCWdvdG8gcmV0cnlmdWxsOworCQlpZiAoIWZzaGFyZWQpCisJCQlnb3RvIHJldHJ5X3ByaXZhdGU7CisKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5Mik7CisJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTEpOworCQlnb3RvIHJldHJ5OwogCX0KIAogCWhlYWQgPSAmaGIxLT5jaGFpbjsKQEAgLTgzNCw5ICs3OTEsNyBAQAogCQlyZXQgKz0gb3BfcmV0OwogCX0KIAotCXNwaW5fdW5sb2NrKCZoYjEtPmxvY2spOwotCWlmIChoYjEgIT0gaGIyKQotCQlzcGluX3VubG9jaygmaGIyLT5sb2NrKTsKKwlkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTsKIG91dF9wdXRfa2V5czoKIAlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKIG91dF9wdXRfa2V5MToKQEAgLTg2OSw2ICs4MjQsNyBAQAogCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOwogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCityZXRyeV9wcml2YXRlOgogCWRvdWJsZV9sb2NrX2hiKGhiMSwgaGIyKTsKIAogCWlmIChsaWtlbHkoY21wdmFsICE9IE5VTEwpKSB7CkBAIC04NzcsMTYgKzgzMywxOCBAQAogCQlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZjdXJ2YWwsIHVhZGRyMSk7CiAKIAkJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZoYjEtPmxvY2spOwotCQkJaWYgKGhiMSAhPSBoYjIpCi0JCQkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CisJCQlkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTsKIAogCQkJcmV0ID0gZ2V0X3VzZXIoY3VydmFsLCB1YWRkcjEpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dF9wdXRfa2V5czsKIAotCQkJaWYgKCFyZXQpCi0JCQkJZ290byByZXRyeTsKKwkJCWlmICghZnNoYXJlZCkKKwkJCQlnb3RvIHJldHJ5X3ByaXZhdGU7CiAKLQkJCWdvdG8gb3V0X3B1dF9rZXlzOworCQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5Mik7CisJCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkxKTsKKwkJCWdvdG8gcmV0cnk7CiAJCX0KIAkJaWYgKGN1cnZhbCAhPSAqY21wdmFsKSB7CiAJCQlyZXQgPSAtRUFHQUlOOwpAQCAtOTIzLDkgKzg4MSw3IEBACiAJfQogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZoYjEtPmxvY2spOwotCWlmIChoYjEgIT0gaGIyKQotCQlzcGluX3VubG9jaygmaGIyLT5sb2NrKTsKKwlkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTsKIAogCS8qIGRyb3BfZnV0ZXhfa2V5X3JlZnMoKSBtdXN0IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSBzcGlubG9ja3MuICovCiAJd2hpbGUgKC0tZHJvcF9jb3VudCA+PSAwKQpAQCAtMTA2Myw3ICsxMDE5LDcgQEAKIAlzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKnBpX3N0YXRlID0gcS0+cGlfc3RhdGU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpvbGRvd25lciA9IHBpX3N0YXRlLT5vd25lcjsKIAl1MzIgdXZhbCwgY3VydmFsLCBuZXd2YWw7Ci0JaW50IHJldCwgYXR0ZW1wdCA9IDA7CisJaW50IHJldDsKIAogCS8qIE93bmVyIGRpZWQ/ICovCiAJaWYgKCFwaV9zdGF0ZS0+b3duZXIpCkBAIC0xMDc2LDExICsxMDMyLDkgQEAKIAkgKiBpbiB0aGUgdXNlciBzcGFjZSB2YXJpYWJsZS4gVGhpcyBtdXN0IGJlIGF0b21pYyBhcyB3ZSBoYXZlCiAJICogdG8gcHJlc2VydmUgdGhlIG93bmVyIGRpZWQgYml0IGhlcmUuCiAJICoKLQkgKiBOb3RlOiBXZSB3cml0ZSB0aGUgdXNlciBzcGFjZSB2YWx1ZSBfYmVmb3JlXyBjaGFuZ2luZyB0aGUKLQkgKiBwaV9zdGF0ZSBiZWNhdXNlIHdlIGNhbiBmYXVsdCBoZXJlLiBJbWFnaW5lIHN3YXBwZWQgb3V0Ci0JICogcGFnZXMgb3IgYSBmb3JrLCB3aGljaCB3YXMgcnVubmluZyByaWdodCBiZWZvcmUgd2UgYWNxdWlyZWQKLQkgKiBtbWFwX3NlbSwgdGhhdCBtYXJrZWQgYWxsIHRoZSBhbm9ueW1vdXMgbWVtb3J5IHJlYWRvbmx5IGZvcgotCSAqIGNvdy4KKwkgKiBOb3RlOiBXZSB3cml0ZSB0aGUgdXNlciBzcGFjZSB2YWx1ZSBfYmVmb3JlXyBjaGFuZ2luZyB0aGUgcGlfc3RhdGUKKwkgKiBiZWNhdXNlIHdlIGNhbiBmYXVsdCBoZXJlLiBJbWFnaW5lIHN3YXBwZWQgb3V0IHBhZ2VzIG9yIGEgZm9yaworCSAqIHRoYXQgbWFya2VkIGFsbCB0aGUgYW5vbnltb3VzIG1lbW9yeSByZWFkb25seSBmb3IgY293LgogCSAqCiAJICogTW9kaWZ5aW5nIHBpX3N0YXRlIF9iZWZvcmVfIHRoZSB1c2VyIHNwYWNlIHZhbHVlIHdvdWxkCiAJICogbGVhdmUgdGhlIHBpX3N0YXRlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSB3aGVuIHdlIGZhdWx0CkBAIC0xMTM2LDcgKzEwOTAsNyBAQAogaGFuZGxlX2ZhdWx0OgogCXNwaW5fdW5sb2NrKHEtPmxvY2tfcHRyKTsKIAotCXJldCA9IGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkciwgYXR0ZW1wdCsrKTsKKwlyZXQgPSBnZXRfdXNlcih1dmFsLCB1YWRkcik7CiAKIAlzcGluX2xvY2socS0+bG9ja19wdHIpOwogCkBAIC0xMTg1LDEwICsxMTM5LDExIEBACiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CiAKK3JldHJ5X3ByaXZhdGU6CiAJaGIgPSBxdWV1ZV9sb2NrKCZxKTsKIAogCS8qCi0JICogQWNjZXNzIHRoZSBwYWdlIEFGVEVSIHRoZSBmdXRleCBpcyBxdWV1ZWQuCisJICogQWNjZXNzIHRoZSBwYWdlIEFGVEVSIHRoZSBoYXNoLWJ1Y2tldCBpcyBsb2NrZWQuCiAJICogT3JkZXIgaXMgaW1wb3J0YW50OgogCSAqCiAJICogICBVc2Vyc3BhY2Ugd2FpdGVyOiB2YWwgPSB2YXI7IGlmIChjb25kKHZhbCkpIGZ1dGV4X3dhaXQoJnZhciwgdmFsKTsKQEAgLTEyMDQsMjAgKzExNTksMjMgQEAKIAkgKiBhIHdha2V1cCB3aGVuICp1YWRkciAhPSB2YWwgb24gZW50cnkgdG8gdGhlIHN5c2NhbGwuICBUaGlzIGlzCiAJICogcmFyZSwgYnV0IG5vcm1hbC4KIAkgKgotCSAqIGZvciBzaGFyZWQgZnV0ZXhlcywgd2UgaG9sZCB0aGUgbW1hcCBzZW1hcGhvcmUsIHNvIHRoZSBtYXBwaW5nCisJICogRm9yIHNoYXJlZCBmdXRleGVzLCB3ZSBob2xkIHRoZSBtbWFwIHNlbWFwaG9yZSwgc28gdGhlIG1hcHBpbmcKIAkgKiBjYW5ub3QgaGF2ZSBjaGFuZ2VkIHNpbmNlIHdlIGxvb2tlZCBpdCB1cCBpbiBnZXRfZnV0ZXhfa2V5LgogCSAqLwogCXJldCA9IGdldF9mdXRleF92YWx1ZV9sb2NrZWQoJnV2YWwsIHVhZGRyKTsKIAogCWlmICh1bmxpa2VseShyZXQpKSB7CiAJCXF1ZXVlX3VubG9jaygmcSwgaGIpOwotCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CiAKIAkJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfcHV0X2tleTsKIAotCQlpZiAoIXJldCkKLQkJCWdvdG8gcmV0cnk7Ci0JCWdvdG8gb3V0OworCQlpZiAoIWZzaGFyZWQpCisJCQlnb3RvIHJldHJ5X3ByaXZhdGU7CisKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQlnb3RvIHJldHJ5OwogCX0KIAlyZXQgPSAtRVdPVUxEQkxPQ0s7CiAJaWYgKHVubGlrZWx5KHV2YWwgIT0gdmFsKSkgewpAQCAtMTI0OCwxNiArMTIwNiwxMyBAQAogCQlpZiAoIWFic190aW1lKQogCQkJc2NoZWR1bGUoKTsKIAkJZWxzZSB7Ci0JCQl1bnNpZ25lZCBsb25nIHNsYWNrOwotCQkJc2xhY2sgPSBjdXJyZW50LT50aW1lcl9zbGFja19uczsKLQkJCWlmIChydF90YXNrKGN1cnJlbnQpKQotCQkJCXNsYWNrID0gMDsKIAkJCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdC50aW1lciwKIAkJCQkJICAgICAgY2xvY2tydCA/IENMT0NLX1JFQUxUSU1FIDoKIAkJCQkJICAgICAgQ0xPQ0tfTU9OT1RPTklDLAogCQkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKIAkJCWhydGltZXJfaW5pdF9zbGVlcGVyKCZ0LCBjdXJyZW50KTsKLQkJCWhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2VfbnMoJnQudGltZXIsICphYnNfdGltZSwgc2xhY2spOworCQkJaHJ0aW1lcl9zZXRfZXhwaXJlc19yYW5nZV9ucygmdC50aW1lciwgKmFic190aW1lLAorCQkJCQkJICAgICBjdXJyZW50LT50aW1lcl9zbGFja19ucyk7CiAKIAkJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmdC50aW1lciwgSFJUSU1FUl9NT0RFX0FCUyk7CiAJCQlpZiAoIWhydGltZXJfYWN0aXZlKCZ0LnRpbWVyKSkKQEAgLTEzNTQsNyArMTMwOSw3IEBACiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKIAl1MzIgdXZhbCwgbmV3dmFsLCBjdXJ2YWw7CiAJc3RydWN0IGZ1dGV4X3EgcTsKLQlpbnQgcmV0LCBsb2NrX3Rha2VuLCBvd25lcmRpZWQgPSAwLCBhdHRlbXB0ID0gMDsKKwlpbnQgcmV0LCBsb2NrX3Rha2VuLCBvd25lcmRpZWQgPSAwOwogCiAJaWYgKHJlZmlsbF9waV9zdGF0ZV9jYWNoZSgpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzNzQsNyArMTMyOSw3IEBACiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CiAKLXJldHJ5X3VubG9ja2VkOgorcmV0cnlfcHJpdmF0ZToKIAloYiA9IHF1ZXVlX2xvY2soJnEpOwogCiByZXRyeV9sb2NrZWQ6CkBAIC0xNDU4LDYgKzE0MTMsNyBAQAogCQkJICogZXhpdCB0byBjb21wbGV0ZS4KIAkJCSAqLwogCQkJcXVldWVfdW5sb2NrKCZxLCBoYik7CisJCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCWdvdG8gcmV0cnk7CiAKQEAgLTE1NjQsNiArMTUyMCwxMyBAQAogCQl9CiAJfQogCisJLyoKKwkgKiBJZiBmaXh1cF9waV9zdGF0ZV9vd25lcigpIGZhdWx0ZWQgYW5kIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZQorCSAqIGZhdWx0LCB1bmxvY2sgaXQgYW5kIHJldHVybiB0aGUgZmF1bHQgdG8gdXNlcnNwYWNlLgorCSAqLworCWlmIChyZXQgJiYgKHJ0X211dGV4X293bmVyKCZxLnBpX3N0YXRlLT5waV9tdXRleCkgPT0gY3VycmVudCkpCisJCXJ0X211dGV4X3VubG9jaygmcS5waV9zdGF0ZS0+cGlfbXV0ZXgpOworCiAJLyogVW5xdWV1ZSBhbmQgZHJvcCB0aGUgbG9jayAqLwogCXVucXVldWVfbWVfcGkoJnEpOwogCkBAIC0xNTkxLDIyICsxNTU0LDE4IEBACiAJICovCiAJcXVldWVfdW5sb2NrKCZxLCBoYik7CiAKLQlpZiAoYXR0ZW1wdCsrKSB7Ci0JCXJldCA9IGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkciwgYXR0ZW1wdCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9wdXRfa2V5OwotCQlnb3RvIHJldHJ5X3VubG9ja2VkOwotCX0KLQogCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKLQlpZiAoIXJldCkKLQkJZ290byByZXRyeTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wdXRfa2V5OwogCi0JaWYgKHRvKQotCQlkZXN0cm95X2hydGltZXJfb25fc3RhY2soJnRvLT50aW1lcik7Ci0JcmV0dXJuIHJldDsKKwlpZiAoIWZzaGFyZWQpCisJCWdvdG8gcmV0cnlfcHJpdmF0ZTsKKworCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKKwlnb3RvIHJldHJ5OwogfQogCisKIC8qCiAgKiBVc2Vyc3BhY2UgYXR0ZW1wdGVkIGEgVElEIC0+IDAgYXRvbWljIHRyYW5zaXRpb24sIGFuZCBmYWlsZWQuCiAgKiBUaGlzIGlzIHRoZSBpbi1rZXJuZWwgc2xvd3BhdGg6IHdlIGxvb2sgdXAgdGhlIFBJIHN0YXRlIChpZiBhbnkpLApAQCAtMTYxOSw3ICsxNTc4LDcgQEAKIAl1MzIgdXZhbDsKIAlzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZDsKIAl1bmlvbiBmdXRleF9rZXkga2V5ID0gRlVURVhfS0VZX0lOSVQ7Ci0JaW50IHJldCwgYXR0ZW1wdCA9IDA7CisJaW50IHJldDsKIAogcmV0cnk6CiAJaWYgKGdldF91c2VyKHV2YWwsIHVhZGRyKSkKQEAgLTE2MzUsNyArMTU5NCw2IEBACiAJCWdvdG8gb3V0OwogCiAJaGIgPSBoYXNoX2Z1dGV4KCZrZXkpOwotcmV0cnlfdW5sb2NrZWQ6CiAJc3Bpbl9sb2NrKCZoYi0+bG9jayk7CiAKIAkvKgpAQCAtMTcwMCwxNCArMTY1OCw3IEBACiAJICogd2UgaGF2ZSB0byBkcm9wIHRoZSBtbWFwX3NlbSBpbiBvcmRlciB0byBjYWxsIGdldF91c2VyKCkuCiAJICovCiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKLQotCWlmIChhdHRlbXB0KyspIHsKLQkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCQl1dmFsID0gMDsKLQkJZ290byByZXRyeV91bmxvY2tlZDsKLQl9CisJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5KTsKIAogCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggN2RlMTFiZC4uYzY4N2JhNCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTQ2LDcgKzQ2LDEwIEBACiAJZGVzYy0+aXJxX2NvdW50ID0gMDsKIAlkZXNjLT5pcnFzX3VuaGFuZGxlZCA9IDA7CiAjaWZkZWYgQ09ORklHX1NNUAotCWNwdW1hc2tfc2V0YWxsKCZkZXNjLT5hZmZpbml0eSk7CisJY3B1bWFza19zZXRhbGwoZGVzYy0+YWZmaW5pdHkpOworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOworI2VuZGlmCiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CkBAIC03OCw2ICs4MSw3IEBACiAJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9iYWRfaXJxOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJZGVzYy0+bmFtZSA9IE5VTEw7CisJY2xlYXJfa3N0YXRfaXJxcyhkZXNjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI5MCw3ICsyOTQsOCBAQAogCQlkZXNjLT5jaGlwLT5tYXNrX2FjayhpcnEpOwogCWVsc2UgewogCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7Ci0JCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJfQogfQogCkBAIC00NzYsNyArNDgxLDggQEAKIAlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIFN0YXJ0IGhhbmRsaW5nIHRoZSBpcnEgKi8KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIAlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKIAogCS8qIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDNhYmE4ZDEuLjllYmY3NzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKIApAQCAtNjksNiArNzAsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobnJfaXJxcyk7CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorCiBzdGF0aWMgc3RydWN0IGlycV9kZXNjIGlycV9kZXNjX2luaXQgPSB7CiAJLmlycQkgICAgPSAtMSwKIAkuc3RhdHVzCSAgICA9IElSUV9ESVNBQkxFRCwKQEAgLTc2LDI2ICs3OCwyNSBAQAogCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJLmRlcHRoICAgICAgPSAxLAogCS5sb2NrICAgICAgID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaXJxX2Rlc2NfaW5pdC5sb2NrKSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLmFmZmluaXR5ICAgPSBDUFVfTUFTS19BTEwKLSNlbmRpZgogfTsKIAogdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpCiB7Ci0JdW5zaWduZWQgbG9uZyBieXRlczsKLQljaGFyICpwdHI7CiAJaW50IG5vZGU7Ci0KLQkvKiBDb21wdXRlIGhvdyBtYW55IGJ5dGVzIHdlIG5lZWQgcGVyIGlycSBhbmQgYWxsb2NhdGUgdGhlbSAqLwotCWJ5dGVzID0gbnIgKiBzaXplb2YodW5zaWduZWQgaW50KTsKKwl2b2lkICpwdHI7CiAKIAlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlwdHIgPSBremFsbG9jX25vZGUoYnl0ZXMsIEdGUF9BVE9NSUMsIG5vZGUpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGtzdGF0X2lycXMgb24gY3B1ICVkIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7CisJcHRyID0ga3phbGxvY19ub2RlKG5yICogc2l6ZW9mKCpkZXNjLT5rc3RhdF9pcnFzKSwgR0ZQX0FUT01JQywgbm9kZSk7CiAKLQlpZiAocHRyKQotCQlkZXNjLT5rc3RhdF9pcnFzID0gKHVuc2lnbmVkIGludCAqKXB0cjsKKwkvKgorCSAqIGRvbid0IG92ZXJ3aXRlIGlmIGNhbiBub3QgZ2V0IG5ldyBvbmUKKwkgKiBpbml0X2NvcHlfa3N0YXRfaXJxcygpIGNvdWxkIHN0aWxsIHVzZSBvbGQgb25lCisJICovCisJaWYgKHB0cikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiICBhbGxvYyBrc3RhdF9pcnFzIG9uIGNwdSAlZCBub2RlICVkXG4iLAorCQkJIGNwdSwgbm9kZSk7CisJCWRlc2MtPmtzdGF0X2lycXMgPSBwdHI7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uZV9pcnFfZGVzYyhpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUpCkBAIC0xMTMsNiArMTE0LDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBrc3RhdF9pcnFzXG4iKTsKIAkJQlVHX09OKDEpOwogCX0KKwlpZiAoIWluaXRfYWxsb2NfZGVzY19tYXNrcyhkZXNjLCBjcHUsIGZhbHNlKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2MgaXJxX2Rlc2MgY3B1bWFza3NcbiIpOworCQlCVUdfT04oMSk7CisJfQogCWFyY2hfaW5pdF9jaGlwX2RhdGEoZGVzYywgY3B1KTsKIH0KIApAQCAtMTIxLDcgKzEyNiw3IEBACiAgKi8KIERFRklORV9TUElOTE9DSyhzcGFyc2VfaXJxX2xvY2spOwogCi1zdHJ1Y3QgaXJxX2Rlc2MgKmlycV9kZXNjX3B0cnNbTlJfSVJRU10gX19yZWFkX21vc3RseTsKK3N0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY19sZWdhY3lbTlJfSVJRU19MRUdBQ1ldIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0gewogCVswIC4uLiBOUl9JUlFTX0xFR0FDWS0xXSA9IHsKQEAgLTEzMSwxNCArMTM2LDEwIEBACiAJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJCS5kZXB0aAkgICAgPSAxLAogCQkubG9jawkgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzY19pbml0LmxvY2spLAotI2lmZGVmIENPTkZJR19TTVAKLQkJLmFmZmluaXR5ICAgPSBDUFVfTUFTS19BTEwKLSNlbmRpZgogCX0KIH07CiAKLS8qIEZJWE1FOiB1c2UgYm9vdG1lbSBhbGxvYyAuLi4qLwotc3RhdGljIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2xlZ2FjeVtOUl9JUlFTX0xFR0FDWV1bTlJfQ1BVU107CitzdGF0aWMgdW5zaWduZWQgaW50ICprc3RhdF9pcnFzX2xlZ2FjeTsKIAogaW50IF9faW5pdCBlYXJseV9pcnFfaW5pdCh2b2lkKQogewpAQCAtMTQ4LDE4ICsxNDksMzAgQEAKIAogCWluaXRfaXJxX2RlZmF1bHRfYWZmaW5pdHkoKTsKIAorCSAvKiBpbml0aWFsaXplIG5yX2lycXMgYmFzZWQgb24gbnJfY3B1X2lkcyAqLworCWFyY2hfcHJvYmVfbnJfaXJxcygpOworCXByaW50ayhLRVJOX0lORk8gIk5SX0lSUVM6JWQgbnJfaXJxczolZFxuIiwgTlJfSVJRUywgbnJfaXJxcyk7CisKIAlkZXNjID0gaXJxX2Rlc2NfbGVnYWN5OwogCWxlZ2FjeV9jb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2NfbGVnYWN5KTsKIAorCS8qIGFsbG9jYXRlIGlycV9kZXNjX3B0cnMgYXJyYXkgYmFzZWQgb24gbnJfaXJxcyAqLworCWlycV9kZXNjX3B0cnMgPSBhbGxvY19ib290bWVtKG5yX2lycXMgKiBzaXplb2Yodm9pZCAqKSk7CisKKwkvKiBhbGxvY2F0ZSBiYXNlZCBvbiBucl9jcHVfaWRzICovCisJLyogRklYTUU6IGludmVydCBrc3RhdF9pcmdzLCBhbmQgaXQnZCBiZSBhIHBlcl9jcHVfYWxsb2MnZCB0aGluZyAqLworCWtzdGF0X2lycXNfbGVnYWN5ID0gYWxsb2NfYm9vdG1lbShOUl9JUlFTX0xFR0FDWSAqIG5yX2NwdV9pZHMgKgorCQkJCQkgIHNpemVvZihpbnQpKTsKKwogCWZvciAoaSA9IDA7IGkgPCBsZWdhY3lfY291bnQ7IGkrKykgewogCQlkZXNjW2ldLmlycSA9IGk7Ci0JCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfbGVnYWN5W2ldOworCQlkZXNjW2ldLmtzdGF0X2lycXMgPSBrc3RhdF9pcnFzX2xlZ2FjeSArIGkgKiBucl9jcHVfaWRzOwogCQlsb2NrZGVwX3NldF9jbGFzcygmZGVzY1tpXS5sb2NrLCAmaXJxX2Rlc2NfbG9ja19jbGFzcyk7Ci0KKwkJaW5pdF9hbGxvY19kZXNjX21hc2tzKCZkZXNjW2ldLCAwLCB0cnVlKTsKIAkJaXJxX2Rlc2NfcHRyc1tpXSA9IGRlc2MgKyBpOwogCX0KIAotCWZvciAoaSA9IGxlZ2FjeV9jb3VudDsgaSA8IE5SX0lSUVM7IGkrKykKKwlmb3IgKGkgPSBsZWdhY3lfY291bnQ7IGkgPCBucl9pcnFzOyBpKyspCiAJCWlycV9kZXNjX3B0cnNbaV0gPSBOVUxMOwogCiAJcmV0dXJuIGFyY2hfZWFybHlfaXJxX2luaXQoKTsKQEAgLTE2Nyw3ICsxODAsMTAgQEAKIAogc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzYyh1bnNpZ25lZCBpbnQgaXJxKQogewotCXJldHVybiAoaXJxIDwgTlJfSVJRUykgPyBpcnFfZGVzY19wdHJzW2lycV0gOiBOVUxMOworCWlmIChpcnFfZGVzY19wdHJzICYmIGlycSA8IG5yX2lycXMpCisJCXJldHVybiBpcnFfZGVzY19wdHJzW2lycV07CisKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzY19hbGxvY19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKQEAgLTE3NiwxMCArMTkyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBub2RlOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlycSA+PSBOUl9JUlFTIGluIGlycV90b19kZXNjX2FsbG9jOiAlZCAlZFxuIiwKLQkJCQlpcnEsIE5SX0lSUVMpOwotCQlXQVJOX09OKDEpOworCWlmIChpcnEgPj0gbnJfaXJxcykgeworCQlXQVJOKDEsICJpcnEgKCVkKSA+PSBucl9pcnFzICglZCkgaW4gaXJxX3RvX2Rlc2NfYWxsb2NcbiIsCisJCQlpcnEsIG5yX2lycXMpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTIyMSwxMiArMjM2LDEwIEBACiAJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJCS5kZXB0aCA9IDEsCiAJCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaXJxX2Rlc2MtPmxvY2spLAotI2lmZGVmIENPTkZJR19TTVAKLQkJLmFmZmluaXR5ID0gQ1BVX01BU0tfQUxMCi0jZW5kaWYKIAl9CiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfYWxsW05SX0lSUVNdW05SX0NQVVNdOwogaW50IF9faW5pdCBlYXJseV9pcnFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKQEAgLTIzNSwxMiArMjQ4LDE2IEBACiAKIAlpbml0X2lycV9kZWZhdWx0X2FmZmluaXR5KCk7CiAKKwlwcmludGsoS0VSTl9JTkZPICJOUl9JUlFTOiVkXG4iLCBOUl9JUlFTKTsKKwogCWRlc2MgPSBpcnFfZGVzYzsKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2MpOwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGVzY1tpXS5pcnEgPSBpOwotCisJCWluaXRfYWxsb2NfZGVzY19tYXNrcygmZGVzY1tpXSwgMCwgdHJ1ZSk7CisJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfYWxsW2ldOworCX0KIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQogCkBAIC0yNTUsNiArMjcyLDExIEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19TUEFSU0VfSVJRICovCiAKK3ZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MtPmtzdGF0X2lycXMsIDAsIG5yX2NwdV9pZHMgKiBzaXplb2YoKihkZXNjLT5rc3RhdF9pcnFzKSkpOworfQorCiAvKgogICogV2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yPwogICogRWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWxmLgpAQCAtMzI4LDYgKzM1MCw4IEBACiAJaXJxcmV0dXJuX3QgcmV0LCByZXR2YWwgPSBJUlFfTk9ORTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAorCVdBUk5fT05DRSghaW5faXJxKCksICJCVUc6IElSUSBoYW5kbGVyIGNhbGxlZCBmcm9tIG5vbi1oYXJkaXJxIGNvbnRleHQhIik7CisKIAlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCkBAIC0zNDcsNiArMzcxLDExIEBACiB9CiAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQKKyMgd2FybmluZyBfX2RvX0lSUSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgY29udmVydCB0byBwcm9wZXIgZmxvdyBoYW5kbGVycworI2VuZGlmCisKIC8qKgogICogX19kb19JUlEgLSBvcmlnaW5hbCBhbGwgaW4gb25lIGhpZ2hsZXZlbCBJUlEgaGFuZGxlcgogICogQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKQEAgLTQ2NywxMiArNDk2LDEwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJcmV0dXJuIGRlc2MgPyBkZXNjLT5rc3RhdF9pcnFzW2NwdV0gOiAwOwogfQotI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGtzdGF0X2lycXNfY3B1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggZTZkMGE0My4uZWUxYWE5ZiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0xNSw4ICsxNSwxNiBAQAogCiBleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CiBleHRlcm4gdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpOworZXh0ZXJuIHZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHNwaW5sb2NrX3Qgc3BhcnNlX2lycV9sb2NrOworCisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKy8qIGlycV9kZXNjX3B0cnMgYWxsb2NhdGVkIGF0IGJvb3QgdGltZSAqLworZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnM7CisjZWxzZQorLyogaXJxX2Rlc2NfcHRycyBpcyBhIGZpeGVkIHNpemUgYXJyYXkgKi8KIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgKmlycV9kZXNjX3B0cnNbTlJfSVJRU107CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMjkxZjAzNi4uNjQ1OGU5OSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC05MCwxNCArOTAsMTQgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BDTlRYVCB8fCBkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKLQkJY3B1bWFza19jb3B5KCZkZXNjLT5hZmZpbml0eSwgY3B1bWFzayk7CisJCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgY3B1bWFzayk7CiAJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2spOwogCX0gZWxzZSB7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCQljcHVtYXNrX2NvcHkoJmRlc2MtPnBlbmRpbmdfbWFzaywgY3B1bWFzayk7CisJCWNwdW1hc2tfY29weShkZXNjLT5wZW5kaW5nX21hc2ssIGNwdW1hc2spOwogCX0KICNlbHNlCi0JY3B1bWFza19jb3B5KCZkZXNjLT5hZmZpbml0eSwgY3B1bWFzayk7CisJY3B1bWFza19jb3B5KGRlc2MtPmFmZmluaXR5LCBjcHVtYXNrKTsKIAlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBjcHVtYXNrKTsKICNlbmRpZgogCWRlc2MtPnN0YXR1cyB8PSBJUlFfQUZGSU5JVFlfU0VUOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAvKgogICogR2VuZXJpYyB2ZXJzaW9uIG9mIHRoZSBhZmZpbml0eSBhdXRvc2VsZWN0b3IuCiAgKi8KLWludCBkb19pcnFfc2VsZWN0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3N0YXRpYyBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCWlmICghaXJxX2Nhbl9zZXRfYWZmaW5pdHkoaXJxKSkKIAkJcmV0dXJuIDA7CkBAIC0xMTksMjEgKzExOSwyMSBAQAogCSAqIG9uZSBvZiB0aGUgdGFyZ2V0cyBpcyBvbmxpbmUuCiAJICovCiAJaWYgKGRlc2MtPnN0YXR1cyAmIChJUlFfQUZGSU5JVFlfU0VUIHwgSVJRX05PX0JBTEFOQ0lORykpIHsKLQkJaWYgKGNwdW1hc2tfYW55X2FuZCgmZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykKKwkJaWYgKGNwdW1hc2tfYW55X2FuZChkZXNjLT5hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKQogCQkgICAgPCBucl9jcHVfaWRzKQogCQkJZ290byBzZXRfYWZmaW5pdHk7CiAJCWVsc2UKIAkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0FGRklOSVRZX1NFVDsKIAl9CiAKLQljcHVtYXNrX2FuZCgmZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaywgaXJxX2RlZmF1bHRfYWZmaW5pdHkpOworCWNwdW1hc2tfYW5kKGRlc2MtPmFmZmluaXR5LCBjcHVfb25saW5lX21hc2ssIGlycV9kZWZhdWx0X2FmZmluaXR5KTsKIHNldF9hZmZpbml0eToKLQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCAmZGVzYy0+YWZmaW5pdHkpOworCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGRlc2MtPmFmZmluaXR5KTsKIAogCXJldHVybiAwOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQorc3RhdGljIGlubGluZSBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQogewogCXJldHVybiBpcnFfc2VsZWN0X2FmZmluaXR5KGlycSk7CiB9CkBAIC0xNDksMTQgKzE0OSwxNCBAQAogCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkoaXJxLCBkZXNjKTsKKwlyZXQgPSBzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBkb19pcnFfc2VsZWN0X2FmZmluaXR5KGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3N0YXRpYyBpbmxpbmUgaW50IHNldHVwX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSw5ICszODksOSBAQAogICogYWxsb2NhdGUgc3BlY2lhbCBpbnRlcnJ1cHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZS4KICAqLwogc3RhdGljIGludAotX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICogZGVzYywgc3RydWN0IGlycWFjdGlvbiAqbmV3KQorX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpCiB7Ci0Jc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKnA7CisJc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKm9sZF9wdHI7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNoYXJlZCA9IDA7CkBAIC00MjMsOCArNDIzLDggQEAKIAkgKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGNvZGUgaGFzIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHkKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXAgPSAmZGVzYy0+YWN0aW9uOwotCW9sZCA9ICpwOworCW9sZF9wdHIgPSAmZGVzYy0+YWN0aW9uOworCW9sZCA9ICpvbGRfcHRyOwogCWlmIChvbGQpIHsKIAkJLyoKIAkJICogQ2FuJ3Qgc2hhcmUgaW50ZXJydXB0cyB1bmxlc3MgYm90aCBhZ3JlZSB0byBhbmQgYXJlCkBAIC00NDcsOCArNDQ3LDggQEAKIAogCQkvKiBhZGQgbmV3IGludGVycnVwdCBhdCBlbmQgb2YgaXJxIHF1ZXVlICovCiAJCWRvIHsKLQkJCXAgPSAmb2xkLT5uZXh0OwotCQkJb2xkID0gKnA7CisJCQlvbGRfcHRyID0gJm9sZC0+bmV4dDsKKwkJCW9sZCA9ICpvbGRfcHRyOwogCQl9IHdoaWxlIChvbGQpOwogCQlzaGFyZWQgPSAxOwogCX0KQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT19CQUxBTkNJTkc7CiAKIAkJLyogU2V0IGRlZmF1bHQgYWZmaW5pdHkgbWFzayBvbmNlIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgKi8KLQkJZG9faXJxX3NlbGVjdF9hZmZpbml0eShpcnEsIGRlc2MpOworCQlzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCiAJfSBlbHNlIGlmICgobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQogCQkJJiYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQkJCShpbnQpKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykpOwogCX0KIAotCSpwID0gbmV3OworCSpvbGRfcHRyID0gbmV3OwogCiAJLyogUmVzZXQgYnJva2VuIGlycSBkZXRlY3Rpb24gd2hlbiBpbnN0YWxsaW5nIG5ldyBoYW5kbGVyICovCiAJZGVzYy0+aXJxX2NvdW50ID0gMDsKQEAgLTU0OSw5ICs1NDksMTAyIEBACiAKIAlyZXR1cm4gX19zZXR1cF9pcnEoaXJxLCBkZXNjLCBhY3QpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2V0dXBfaXJxKTsKKworIC8qCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIGFuIGlycWFjdGlvbiAtIHVzZWQgdG8gZnJlZQorICogcmVndWxhciBhbmQgc3BlY2lhbCBpbnRlcnJ1cHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gKl9fZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCAqKmFjdGlvbl9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk4oaW5faW50ZXJydXB0KCksICJUcnlpbmcgdG8gZnJlZSBJUlEgJWQgZnJvbSBJUlEgY29udGV4dCFcbiIsIGlycSk7CisKKwlpZiAoIWRlc2MpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGFjdGlvbnMgcGVyIElSUSBkZXNjcmlwdG9yLCBmaW5kIHRoZSByaWdodAorCSAqIG9uZSBiYXNlZCBvbiB0aGUgZGV2X2lkOgorCSAqLworCWFjdGlvbl9wdHIgPSAmZGVzYy0+YWN0aW9uOworCWZvciAoOzspIHsKKwkJYWN0aW9uID0gKmFjdGlvbl9wdHI7CisKKwkJaWYgKCFhY3Rpb24pIHsKKwkJCVdBUk4oMSwgIlRyeWluZyB0byBmcmVlIGFscmVhZHktZnJlZSBJUlEgJWRcbiIsIGlycSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKGFjdGlvbi0+ZGV2X2lkID09IGRldl9pZCkKKwkJCWJyZWFrOworCQlhY3Rpb25fcHRyID0gJmFjdGlvbi0+bmV4dDsKKwl9CisKKwkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzOiAqLworCSphY3Rpb25fcHRyID0gYWN0aW9uLT5uZXh0OworCisJLyogQ3VycmVudGx5IHVzZWQgb25seSBieSBVTUwsIG1pZ2h0IGRpc2FwcGVhciBvbmUgZGF5OiAqLworI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKKwlpZiAoZGVzYy0+Y2hpcC0+cmVsZWFzZSkKKwkJZGVzYy0+Y2hpcC0+cmVsZWFzZShpcnEsIGRldl9pZCk7CisjZW5kaWYKKworCS8qIElmIHRoaXMgd2FzIHRoZSBsYXN0IGhhbmRsZXIsIHNodXQgZG93biB0aGUgSVJRIGxpbmU6ICovCisJaWYgKCFkZXNjLT5hY3Rpb24pIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKKwkJaWYgKGRlc2MtPmNoaXAtPnNodXRkb3duKQorCQkJZGVzYy0+Y2hpcC0+c2h1dGRvd24oaXJxKTsKKwkJZWxzZQorCQkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7CisKKwkvKiBNYWtlIHN1cmUgaXQncyBub3QgYmVpbmcgdXNlZCBvbiBhbm90aGVyIENQVTogKi8KKwlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQorCS8qCisJICogSXQncyBhIHNoYXJlZCBJUlEgLS0gdGhlIGRyaXZlciBvdWdodCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gSVJRCisJICogZXZlbnQgdG8gaGFwcGVuIGV2ZW4gbm93IGl0J3MgYmVpbmcgZnJlZWQsIHNvIGxldCdzIG1ha2Ugc3VyZSB0aGF0CisJICogaXMgc28gYnkgZG9pbmcgYW4gZXh0cmEgY2FsbCB0byB0aGUgaGFuZGxlciAuLi4uCisJICoKKwkgKiAoIFdlIGRvIHRoaXMgYWZ0ZXIgYWN0dWFsbHkgZGVyZWdpc3RlcmluZyBpdCwgdG8gbWFrZSBzdXJlIHRoYXQgYQorCSAqICAgJ3JlYWwnIElSUSBkb2Vzbid0IHJ1biBpbiAqIHBhcmFsbGVsIHdpdGggb3VyIGZha2UuICkKKwkgKi8KKwlpZiAoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJYWN0aW9uLT5oYW5kbGVyKGlycSwgZGV2X2lkKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKyNlbmRpZgorCXJldHVybiBhY3Rpb247Cit9CiAKIC8qKgotICoJZnJlZV9pcnEgLSBmcmVlIGFuIGludGVycnVwdAorICoJcmVtb3ZlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CisgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCisgKglAYWN0OiBpcnFhY3Rpb24gZm9yIHRoZSBpbnRlcnJ1cHQKKyAqCisgKiBVc2VkIHRvIHJlbW92ZSBpbnRlcnJ1cHRzIHN0YXRpY2FsbHkgc2V0dXAgYnkgdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcy4KKyAqLwordm9pZCByZW1vdmVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdCkKK3sKKwlfX2ZyZWVfaXJxKGlycSwgYWN0LT5kZXZfaWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX2lycSk7CisKKy8qKgorICoJZnJlZV9pcnEgLSBmcmVlIGFuIGludGVycnVwdCBhbGxvY2F0ZWQgd2l0aCByZXF1ZXN0X2lycQogICoJQGlycTogSW50ZXJydXB0IGxpbmUgdG8gZnJlZQogICoJQGRldl9pZDogRGV2aWNlIGlkZW50aXR5IHRvIGZyZWUKICAqCkBAIC01NjYsNzMgKzY1OSw3IEBACiAgKi8KIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0Jc3RydWN0IGlycWFjdGlvbiAqKnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOwotCi0JaWYgKCFkZXNjKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXAgPSAmZGVzYy0+YWN0aW9uOwotCWZvciAoOzspIHsKLQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uID0gKnA7Ci0KLQkJaWYgKGFjdGlvbikgewotCQkJc3RydWN0IGlycWFjdGlvbiAqKnBwID0gcDsKLQotCQkJcCA9ICZhY3Rpb24tPm5leHQ7Ci0JCQlpZiAoYWN0aW9uLT5kZXZfaWQgIT0gZGV2X2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzICovCi0JCQkqcHAgPSBhY3Rpb24tPm5leHQ7Ci0KLQkJCS8qIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgVU1MLCBtaWdodCBkaXNhcHBlYXIgb25lIGRheS4qLwotI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKLQkJCWlmIChkZXNjLT5jaGlwLT5yZWxlYXNlKQotCQkJCWRlc2MtPmNoaXAtPnJlbGVhc2UoaXJxLCBkZXZfaWQpOwotI2VuZGlmCi0KLQkJCWlmICghZGVzYy0+YWN0aW9uKSB7Ci0JCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJCQlpZiAoZGVzYy0+Y2hpcC0+c2h1dGRvd24pCi0JCQkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGlycSk7Ci0JCQkJZWxzZQotCQkJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7Ci0KLQkJCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyB1c2VkIG9uIGFub3RoZXIgQ1BVICovCi0JCQlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlEKLQkJCS8qCi0JCQkgKiBJdCdzIGEgc2hhcmVkIElSUSAtLSB0aGUgZHJpdmVyIG91Z2h0IHRvIGJlCi0JCQkgKiBwcmVwYXJlZCBmb3IgaXQgdG8gaGFwcGVuIGV2ZW4gbm93IGl0J3MKLQkJCSAqIGJlaW5nIGZyZWVkLCBzbyBsZXQncyBtYWtlIHN1cmUuLi4uICBXZSBkbwotCQkJICogdGhpcyBhZnRlciBhY3R1YWxseSBkZXJlZ2lzdGVyaW5nIGl0LCB0bwotCQkJICogbWFrZSBzdXJlIHRoYXQgYSAncmVhbCcgSVJRIGRvZXNuJ3QgcnVuIGluCi0JCQkgKiBwYXJhbGxlbCB3aXRoIG91ciBmYWtlCi0JCQkgKi8KLQkJCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKLQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQkJYWN0aW9uLT5oYW5kbGVyKGlycSwgZGV2X2lkKTsKLQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQl9Ci0jZW5kaWYKLQkJCWtmcmVlKGFjdGlvbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBhbHJlYWR5LWZyZWUgSVJRICVkXG4iLCBpcnEpOwotI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQotCQlkdW1wX3N0YWNrKCk7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCWtmcmVlKF9fZnJlZV9pcnEoaXJxLCBkZXZfaWQpKTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9pcnEpOwogCkBAIC02NzksMTEgKzcwNiwxMiBAQAogCSAqIHRoZSBiZWhhdmlvciBpcyBjbGFzc2lmaWVkIGFzICJ3aWxsIG5vdCBmaXgiIHNvIHdlIG5lZWQgdG8KIAkgKiBzdGFydCBudWRnaW5nIGRyaXZlcnMgYXdheSBmcm9tIHVzaW5nIHRoYXQgaWRpb20uCiAJICovCi0JaWYgKChpcnFmbGFncyAmIChJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkKLQkJCT09IChJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkKLQkJcHJfd2FybmluZygiSVJRICVkLyVzOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCAiCi0JCQkJImd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXNcbiIsCi0JCQkJaXJxLCBkZXZuYW1lKTsKKwlpZiAoKGlycWZsYWdzICYgKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKSA9PQorCQkJCQkoSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCkpIHsKKwkJcHJfd2FybmluZygKKwkJICAiSVJRICVkLyVzOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCBndWFyYW50ZWVkIG9uIHNoYXJlZCBJUlFzXG4iLAorCQkJaXJxLCBkZXZuYW1lKTsKKwl9CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCS8qCkBAIC03MDksMTUgKzczNywxMyBAQAogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwgR0ZQX0FUT01JQyk7CisJYWN0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksIEdGUF9LRVJORUwpOwogCWlmICghYWN0aW9uKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWFjdGlvbi0+aGFuZGxlciA9IGhhbmRsZXI7CiAJYWN0aW9uLT5mbGFncyA9IGlycWZsYWdzOwotCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKIAlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwotCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CiAKIAlyZXR2YWwgPSBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdGlvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwppbmRleCBiZDcyMzI5Li5lMDVhZDliIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCisrKyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKIAotCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KCZkZXNjLT5wZW5kaW5nX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShkZXNjLT5wZW5kaW5nX21hc2spKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCkBAIC0zOCwxMyArMzgsMTMgQEAKIAkgKiBGb3IgY29ycmVjdCBvcGVyYXRpb24gdGhpcyBkZXBlbmRzIG9uIHRoZSBjYWxsZXIKIAkgKiBtYXNraW5nIHRoZSBpcnFzLgogCSAqLwotCWlmIChsaWtlbHkoY3B1bWFza19hbnlfYW5kKCZkZXNjLT5wZW5kaW5nX21hc2ssIGNwdV9vbmxpbmVfbWFzaykKKwlpZiAobGlrZWx5KGNwdW1hc2tfYW55X2FuZChkZXNjLT5wZW5kaW5nX21hc2ssIGNwdV9vbmxpbmVfbWFzaykKIAkJICAgPCBucl9jcHVfaWRzKSkgewotCQljcHVtYXNrX2FuZCgmZGVzYy0+YWZmaW5pdHksCi0JCQkgICAgJmRlc2MtPnBlbmRpbmdfbWFzaywgY3B1X29ubGluZV9tYXNrKTsKLQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgJmRlc2MtPmFmZmluaXR5KTsKKwkJY3B1bWFza19hbmQoZGVzYy0+YWZmaW5pdHksCisJCQkgICAgZGVzYy0+cGVuZGluZ19tYXNrLCBjcHVfb25saW5lX21hc2spOworCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5hZmZpbml0eSk7CiAJfQotCWNwdW1hc2tfY2xlYXIoJmRlc2MtPnBlbmRpbmdfbWFzayk7CisJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOwogfQogCiB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKaW5kZXggYWNkODgzNS4uMjQzZDYxMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYworKysgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCkBAIC0xNywxNiArMTcsMTEgQEAKIAkJCQkgc3RydWN0IGlycV9kZXNjICpkZXNjLAogCQkJCSBpbnQgY3B1LCBpbnQgbnIpCiB7Ci0JdW5zaWduZWQgbG9uZyBieXRlczsKLQogCWluaXRfa3N0YXRfaXJxcyhkZXNjLCBjcHUsIG5yKTsKIAotCWlmIChkZXNjLT5rc3RhdF9pcnFzICE9IG9sZF9kZXNjLT5rc3RhdF9pcnFzKSB7Ci0JCS8qIENvbXB1dGUgaG93IG1hbnkgYnl0ZXMgd2UgbmVlZCBwZXIgaXJxIGFuZCBhbGxvY2F0ZSB0aGVtICovCi0JCWJ5dGVzID0gbnIgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQotCQltZW1jcHkoZGVzYy0+a3N0YXRfaXJxcywgb2xkX2Rlc2MtPmtzdGF0X2lycXMsIGJ5dGVzKTsKLQl9CisJaWYgKGRlc2MtPmtzdGF0X2lycXMgIT0gb2xkX2Rlc2MtPmtzdGF0X2lycXMpCisJCW1lbWNweShkZXNjLT5rc3RhdF9pcnFzLCBvbGRfZGVzYy0+a3N0YXRfaXJxcywKKwkJCSBuciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcykpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpvbGRfZGVzYywgc3RydWN0IGlycV9kZXNjICpkZXNjKQpAQCAtMzgsMTUgKzMzLDIyIEBACiAJb2xkX2Rlc2MtPmtzdGF0X2lycXMgPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X2NvcHlfb25lX2lycV9kZXNjKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCitzdGF0aWMgYm9vbCBpbml0X2NvcHlfb25lX2lycV9kZXNjKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCiAJCSBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUpCiB7CiAJbWVtY3B5KGRlc2MsIG9sZF9kZXNjLCBzaXplb2Yoc3RydWN0IGlycV9kZXNjKSk7CisJaWYgKCFpbml0X2FsbG9jX2Rlc2NfbWFza3MoZGVzYywgY3B1LCBmYWxzZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpcnEgJWQ6IGNhbiBub3QgZ2V0IG5ldyBpcnFfZGVzYyBjcHVtYXNrICIKKwkJCQkiZm9yIG1pZ3JhdGlvbi5cbiIsIGlycSk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAJc3Bpbl9sb2NrX2luaXQoJmRlc2MtPmxvY2spOwogCWRlc2MtPmNwdSA9IGNwdTsKIAlsb2NrZGVwX3NldF9jbGFzcygmZGVzYy0+bG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwogCWluaXRfY29weV9rc3RhdF9pcnFzKG9sZF9kZXNjLCBkZXNjLCBjcHUsIG5yX2NwdV9pZHMpOworCWluaXRfY29weV9kZXNjX21hc2tzKG9sZF9kZXNjLCBkZXNjKTsKIAlhcmNoX2luaXRfY29weV9jaGlwX2RhdGEob2xkX2Rlc2MsIGRlc2MsIGNwdSk7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfb25lX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKQEAgLTc2LDEyICs3OCwxOCBAQAogCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwogCWRlc2MgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpkZXNjKSwgR0ZQX0FUT01JQywgbm9kZSk7CiAJaWYgKCFkZXNjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXJxICVkOiBjYW4gbm90IGdldCBuZXcgaXJxX2Rlc2MgZm9yIG1pZ3JhdGlvbi5cbiIsIGlycSk7CisJCXByaW50ayhLRVJOX0VSUiAiaXJxICVkOiBjYW4gbm90IGdldCBuZXcgaXJxX2Rlc2MgIgorCQkJCSJmb3IgbWlncmF0aW9uLlxuIiwgaXJxKTsKIAkJLyogc3RpbGwgdXNlIG9sZCBvbmUgKi8KIAkJZGVzYyA9IG9sZF9kZXNjOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWluaXRfY29weV9vbmVfaXJxX2Rlc2MoaXJxLCBvbGRfZGVzYywgZGVzYywgY3B1KTsKKwlpZiAoIWluaXRfY29weV9vbmVfaXJxX2Rlc2MoaXJxLCBvbGRfZGVzYywgZGVzYywgY3B1KSkgeworCQkvKiBzdGlsbCB1c2Ugb2xkIG9uZSAqLworCQlrZnJlZShkZXNjKTsKKwkJZGVzYyA9IG9sZF9kZXNjOworCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJaXJxX2Rlc2NfcHRyc1tpcnFdID0gZGVzYzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggYWFlM2Y3NC4uNjkyMzYzZCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTIwLDExICsyMCwxMSBAQAogc3RhdGljIGludCBpcnFfYWZmaW5pdHlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYygobG9uZyltLT5wcml2YXRlKTsKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9ICZkZXNjLT5hZmZpbml0eTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGRlc2MtPmFmZmluaXR5OwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykKLQkJbWFzayA9ICZkZXNjLT5wZW5kaW5nX21hc2s7CisJCW1hc2sgPSBkZXNjLT5wZW5kaW5nX21hc2s7CiAjZW5kaWYKIAlzZXFfY3B1bWFzayhtLCBtYXNrKTsKIAlzZXFfcHV0YyhtLCAnXG4nKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBkZDM2NGMxLi40ZDU2ODI5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlyZXR1cm4gb2s7CiB9CiAKLXN0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQorc3RhdGljIHZvaWQgcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CkBAIC0xMjMsMTEgKzEyMywyMyBAQAogCiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOwogCX0KK30KKworc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJcG9sbF9hbGxfc2hhcmVkX2lycXMoKTsKIAogCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCiAJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQordm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKQoreworCXBvbGxfYWxsX3NoYXJlZF9pcnFzKCk7Cit9CisjZW5kaWYKKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCA0ODM4OTk1Li5jN2ZkNjY5IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtMTEzMCw3ICsxMTMwLDcgQEAKIAkJcmV0dXJuOwogCW1lbXNldCgmcHJzdGF0dXMsIDAsIHNpemVvZihwcnN0YXR1cykpOwogCXByc3RhdHVzLnByX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLnByX3JlZywgcmVncyk7CisJZWxmX2NvcmVfY29weV9rZXJuZWxfcmVncygmcHJzdGF0dXMucHJfcmVnLCByZWdzKTsKIAlidWYgPSBhcHBlbmRfZWxmX25vdGUoYnVmLCBLRVhFQ19DT1JFX05PVEVfTkFNRSwgTlRfUFJTVEFUVVMsCiAJCSAgICAgIAkgICAgICAmcHJzdGF0dXMsIHNpemVvZihwcnN0YXR1cykpOwogCWZpbmFsX25vdGUoYnVmKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sYXRlbmN5dG9wLmMgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCmluZGV4IDQ0OWRiNDYuLmNhMDdjNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sYXRlbmN5dG9wLmMKKysrIGIva2VybmVsL2xhdGVuY3l0b3AuYwpAQCAtOSw2ICs5LDQ0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLworCisvKgorICogQ09ORklHX0xBVEVOQ1lUT1AgZW5hYmxlcyBhIGtlcm5lbCBsYXRlbmN5IHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHRoYXQgaXMKKyAqIHVzZWQgYnkgdGhlICJsYXRlbmN5dG9wIiB1c2Vyc3BhY2UgdG9vbC4gVGhlIGxhdGVuY3kgdGhhdCBpcyB0cmFja2VkIGlzIG5vdAorICogdGhlICd0cmFkaXRpb25hbCcgaW50ZXJydXB0IGxhdGVuY3kgKHdoaWNoIGlzIHByaW1hcmlseSBjYXVzZWQgYnkgc29tZXRoaW5nCisgKiBlbHNlIGNvbnN1bWluZyBDUFUpLCBidXQgaW5zdGVhZCwgaXQgaXMgdGhlIGxhdGVuY3kgYW4gYXBwbGljYXRpb24gZW5jb3VudGVycworICogYmVjYXVzZSB0aGUga2VybmVsIHNsZWVwcyBvbiBpdHMgYmVoYWxmIGZvciB2YXJpb3VzIHJlYXNvbnMuCisgKgorICogVGhpcyBjb2RlIHRyYWNrcyAyIGxldmVscyBvZiBzdGF0aXN0aWNzOgorICogMSkgU3lzdGVtIGxldmVsIGxhdGVuY3kKKyAqIDIpIFBlciBwcm9jZXNzIGxhdGVuY3kKKyAqCisgKiBUaGUgbGF0ZW5jeSBpcyBzdG9yZWQgaW4gZml4ZWQgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGluIGFuIGFjY3VtdWxhdGVkIGZvcm07CisgKiBpZiB0aGUgInNhbWUiIGxhdGVuY3kgY2F1c2UgaXMgaGl0IHR3aWNlLCB0aGlzIHdpbGwgYmUgdHJhY2tlZCBhcyBvbmUgZW50cnkKKyAqIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gQm90aCB0aGUgY291bnQsIHRvdGFsIGFjY3VtdWxhdGVkIGxhdGVuY3kgYW5kIG1heGltdW0KKyAqIGxhdGVuY3kgYXJlIHRyYWNrZWQgaW4gdGhpcyBkYXRhIHN0cnVjdHVyZS4gV2hlbiB0aGUgZml4ZWQgc2l6ZSBzdHJ1Y3R1cmUgaXMKKyAqIGZ1bGwsIG5vIG5ldyBjYXVzZXMgYXJlIHRyYWNrZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmbHVzaGVkIGJ5IHdyaXRpbmcgdG8KKyAqIHRoZSAvcHJvYyBmaWxlOyB0aGUgdXNlcnNwYWNlIHRvb2wgZG9lcyB0aGlzIG9uIGEgcmVndWxhciBiYXNpcy4KKyAqCisgKiBBIGxhdGVuY3kgY2F1c2UgaXMgaWRlbnRpZmllZCBieSBhIHN0cmluZ2lmaWVkIGJhY2t0cmFjZSBhdCB0aGUgcG9pbnQgdGhhdAorICogdGhlIHNjaGVkdWxlciBnZXRzIGludm9rZWQuIFRoZSB1c2VybGFuZCB0b29sIHdpbGwgdXNlIHRoaXMgc3RyaW5nIHRvCisgKiBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGxhdGVuY3kgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS4KKyAqCisgKiBUaGUgaW5mb3JtYXRpb24gaXMgZXhwb3J0ZWQgdmlhIC9wcm9jL2xhdGVuY3lfc3RhdHMgYW5kIC9wcm9jLzxwaWQ+L2xhdGVuY3kuCisgKiBUaGVzZSBmaWxlcyBsb29rIGxpa2UgdGhpczoKKyAqCisgKiBMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMQorICogNzAgNTk0MzMgNDg5NyBpOTE1X2lycV93YWl0IGRybV9pb2N0bCB2ZnNfaW9jdGwgZG9fdmZzX2lvY3RsIHN5c19pb2N0bAorICogfCAgICB8ICAgIHwgICAgfAorICogfCAgICB8ICAgIHwgICAgKy0tLS0+IHRoZSBzdHJpbmdpZmllZCBiYWNrdHJhY2UKKyAqIHwgICAgfCAgICArLS0tLS0tLS0tPiBUaGUgbWF4aW11bSBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IGluIG1pY3Jvc2Vjb25kcworICogfCAgICArLS0tLS0tLS0tLS0tLS0+IFRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IChtaWNyb3NlY29uZHMpCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLT4gVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGVudHJ5IGlzIGhpdAorICoKKyAqIChub3RlOiB0aGUgYXZlcmFnZSBsYXRlbmN5IGlzIHRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGRpdmlkZWQgYnkgdGhlIG51bWJlcgorICogb2YgdGltZXMpCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3l0b3AuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC03Miw3ICsxMTAsNyBAQAogCQkJCWZpcnN0bm9ubnVsbCA9IGk7CiAJCQljb250aW51ZTsKIAkJfQotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC0+YmFja3RyYWNlW3FdOwogCiAJCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTAxLDMxICsxMzksNTIgQEAKIAltZW1jcHkoJmxhdGVuY3lfcmVjb3JkW2ldLCBsYXQsIHNpemVvZihzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX3N0YWNrdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbGF0KQorLyoKKyAqIEl0ZXJhdG9yIHRvIHN0b3JlIGEgYmFja3RyYWNlIGludG8gYSBsYXRlbmN5IHJlY29yZCBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfc3RhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsYXQpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCiAJbWVtc2V0KCZ0cmFjZSwgMCwgc2l6ZW9mKHRyYWNlKSk7CiAJdHJhY2UubWF4X2VudHJpZXMgPSBMVF9CQUNLVFJBQ0VERVBUSDsKIAl0cmFjZS5lbnRyaWVzID0gJmxhdC0+YmFja3RyYWNlWzBdOwotCXRyYWNlLnNraXAgPSAwOwogCXNhdmVfc3RhY2tfdHJhY2VfdHNrKHRzaywgJnRyYWNlKTsKIH0KIAorLyoqCisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBAdHNrIC0gdGhlIHRhc2sgc3RydWN0IG9mIHRoZSB0YXNrIGhpdHRpbmcgdGhlIGxhdGVuY3kKKyAqIEB1c2VjcyAtIHRoZSBkdXJhdGlvbiBvZiB0aGUgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKKyAqIEBpbnRlciAtIDEgaWYgdGhlIHNsZWVwIHdhcyBpbnRlcnJ1cHRpYmxlLCAwIGlmIHVuaW50ZXJydXB0aWJsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY29yZGluZyBsYXRlbmN5IGVudHJpZXMKKyAqIGFzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGEgZmV3IHNwZWNpYWwgY2FzZXMgdG8gZGVhbCB3aXRoIG5vcm1hbCAnbm9uLWxhdGVuY3knCisgKiBzbGVlcHM6IHNwZWNpZmljYWxseSwgaW50ZXJydXB0aWJsZSBzbGVlcCBsb25nZXIgdGhhbiA1IG1zZWMgaXMgc2tpcHBlZAorICogc2luY2UgdGhpcyB1c3VhbGx5IGlzIGNhdXNlZCBieSB3YWl0aW5nIGZvciBldmVudHMgdmlhIHNlbGVjdCgpIGFuZCBjby4KKyAqCisgKiBOZWdhdGl2ZSBsYXRlbmNpZXMgKGNhdXNlZCBieSB0aW1lIGdvaW5nIGJhY2t3YXJkcykgYXJlIGFsc28gZXhwbGljaXRseQorICogc2tpcHBlZC4KKyAqLwogdm9pZCBfX3NjaGVkCi1hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK19fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcTsKIAlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgbGF0OwogCi0JaWYgKCFsYXRlbmN5dG9wX2VuYWJsZWQpCi0JCXJldHVybjsKLQogCS8qIExvbmcgaW50ZXJydXB0aWJsZSB3YWl0cyBhcmUgZ2VuZXJhbGx5IHVzZXIgcmVxdWVzdGVkLi4uICovCiAJaWYgKGludGVyICYmIHVzZWNzID4gNTAwMCkKIAkJcmV0dXJuOwogCisJLyogTmVnYXRpdmUgc2xlZXBzIGFyZSB0aW1lIGdvaW5nIGJhY2t3YXJkcyAqLworCS8qIFplcm8tdGltZSBzbGVlcHMgYXJlIG5vbi1pbnRlcmVzdGluZyAqLworCWlmICh1c2VjcyA8PSAwKQorCQlyZXR1cm47CisKIAltZW1zZXQoJmxhdCwgMCwgc2l6ZW9mKGxhdCkpOwogCWxhdC5jb3VudCA9IDE7CiAJbGF0LnRpbWUgPSB1c2VjczsKQEAgLTE0MywxMiArMjAyLDEyIEBACiAJaWYgKHRzay0+bGF0ZW5jeV9yZWNvcmRfY291bnQgPj0gTFRfU0FWRUNPVU5UKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTFRfU0FWRUNPVU5UIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExUX1NBVkVDT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbXlsYXQ7CiAJCWludCBzYW1lID0gMTsKIAogCQlteWxhdCA9ICZ0c2stPmxhdGVuY3lfcmVjb3JkW2ldOwotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC5iYWNrdHJhY2VbcV07CiAKIAkJCWlmIChteWxhdC0+YmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTg2LDcgKzI0NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWExSOyBpKyspIHsKIAkJaWYgKGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVswXSkgewogCQkJaW50IHE7Ci0JCQlzZXFfcHJpbnRmKG0sICIlaSAlbGkgJWxpICIsCisJCQlzZXFfcHJpbnRmKG0sICIlaSAlbHUgJWx1ICIsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0uY291bnQsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0udGltZSwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS5tYXgpOwpAQCAtMjIzLDcgKzI4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIGxzdGF0c19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHN0YXRzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsc3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSBsc3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gbHN0YXRzX3dyaXRlLApAQCAtMjM2LDQgKzI5NSw0IEBACiAJcHJvY19jcmVhdGUoImxhdGVuY3lfc3RhdHMiLCAwNjQ0LCBOVUxMLCAmbHN0YXRzX2ZvcHMpOwogCXJldHVybiAwOwogfQotX19pbml0Y2FsbChpbml0X2xzdGF0c19wcm9jZnMpOworZGV2aWNlX2luaXRjYWxsKGluaXRfbHN0YXRzX3Byb2Nmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMTE5NmY1ZC4uZjc3YWMzMiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCkBAIC0zNjYsNiArMzY3LDM0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU01QCisKKyNpZmRlZiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQQorCitzdGF0aWMgdm9pZCAqcGVyY3B1X21vZGFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl2b2lkICpwdHI7CisKKwlpZiAoYWxpZ24gPiBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBlci1jcHUgYWxpZ25tZW50ICVsaSA+ICVsaVxuIiwKKwkJICAgICAgIG5hbWUsIGFsaWduLCBQQUdFX1NJWkUpOworCQlhbGlnbiA9IFBBR0VfU0laRTsKKwl9CisKKwlwdHIgPSBfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplLCBhbGlnbik7CisJaWYgKCFwdHIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgJWx1IGJ5dGVzIHBlcmNwdSBkYXRhXG4iLCBzaXplKTsKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCBwZXJjcHVfbW9kZnJlZSh2b2lkICpmcmVlbWUpCit7CisJZnJlZV9wZXJjcHUoZnJlZW1lKTsKK30KKworI2Vsc2UgLyogLi4uICFDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQSAqLworCiAvKiBOdW1iZXIgb2YgYmxvY2tzIHVzZWQgYW5kIGFsbG9jYXRlZC4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNwdV9udW1fdXNlZCwgcGNwdV9udW1fYWxsb2NhdGVkOwogLyogU2l6ZSBvZiBlYWNoIGJsb2NrLiAgLXZlIG1lYW5zIHVzZWQuICovCkBAIC00ODAsMjEgKzUwOSw2IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfcGNwdXNlYyhFbGZfRWhkciAqaGRyLAotCQkJCSBFbGZfU2hkciAqc2VjaGRycywKLQkJCQkgY29uc3QgY2hhciAqc2Vjc3RyaW5ncykKLXsKLQlyZXR1cm4gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiLmRhdGEucGVyY3B1Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmNwdV9tb2Rjb3B5KHZvaWQgKnBjcHVkZXN0LCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCW1lbWNweShwY3B1ZGVzdCArIHBlcl9jcHVfb2Zmc2V0KGNwdSksIGZyb20sIHNpemUpOwotfQotCiBzdGF0aWMgaW50IHBlcmNwdV9tb2Rpbml0KHZvaWQpCiB7CiAJcGNwdV9udW1fdXNlZCA9IDI7CkBAIC01MTMsNyArNTI3LDI2IEBACiAJcmV0dXJuIDA7CiB9CiBfX2luaXRjYWxsKHBlcmNwdV9tb2Rpbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9wY3B1c2VjKEVsZl9FaGRyICpoZHIsCisJCQkJIEVsZl9TaGRyICpzZWNoZHJzLAorCQkJCSBjb25zdCBjaGFyICpzZWNzdHJpbmdzKQoreworCXJldHVybiBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICIuZGF0YS5wZXJjcHUiKTsKK30KKworc3RhdGljIHZvaWQgcGVyY3B1X21vZGNvcHkodm9pZCAqcGNwdWRlc3QsIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJbWVtY3B5KHBjcHVkZXN0ICsgcGVyX2NwdV9vZmZzZXQoY3B1KSwgZnJvbSwgc2l6ZSk7Cit9CisKICNlbHNlIC8qIC4uLiAhQ09ORklHX1NNUCAqLworCiBzdGF0aWMgaW5saW5lIHZvaWQgKnBlcmNwdV9tb2RhbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01MzUsNiArNTY4LDcgQEAKIAkvKiBwY3B1c2VjIHNob3VsZCBiZSAwLCBhbmQgc2l6ZSBvZiB0aGF0IHNlY3Rpb24gc2hvdWxkIGJlIDAuICovCiAJQlVHX09OKHNpemUgIT0gMCk7CiB9CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKICNkZWZpbmUgTU9ESU5GT19BVFRSKGZpZWxkKQlcCkBAIC04MjIsNyArODU2LDcgQEAKIAltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCS8qIFN0b3JlIHRoZSBuYW1lIG9mIHRoZSBsYXN0IHVubG9hZGVkIG1vZHVsZSBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyAqLwogCXN0cmxjcHkobGFzdF91bmxvYWRlZF9tb2R1bGUsIG1vZC0+bmFtZSwgc2l6ZW9mKGxhc3RfdW5sb2FkZWRfbW9kdWxlKSk7Ci0JdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShtb2QtPm5hbWUpOworCWRkZWJ1Z19yZW1vdmVfbW9kdWxlKG1vZC0+bmFtZSk7CiAJZnJlZV9tb2R1bGUobW9kKTsKIAogIG91dDoKQEAgLTE4MjcsMTkgKzE4NjEsMTMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAotc3RhdGljIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgdm9pZCBkeW5hbWljX2RlYnVnX3NldHVwKHN0cnVjdCBfZGRlYnVnICpkZWJ1ZywgdW5zaWduZWQgaW50IG51bSkKIHsKLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShkZWJ1Z1tpXS5tb2RuYW1lLAotCQkJCQkgICAgICBkZWJ1Z1tpXS50eXBlLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5sb2dpY2FsX21vZG5hbWUsCi0JCQkJCSAgICAgIGRlYnVnW2ldLmZsYWdfbmFtZXMsCi0JCQkJCSAgICAgIGRlYnVnW2ldLmhhc2gsIGRlYnVnW2ldLmhhc2gyKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHICovCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfREVCVUcKKwlpZiAoZGRlYnVnX2FkZF9tb2R1bGUoZGVidWcsIG51bSwgZGVidWctPm1vZG5hbWUpKQorCQlwcmludGsoS0VSTl9FUlIgImR5bmFtaWMgZGVidWcgZXJyb3IgYWRkaW5nIG1vZHVsZTogJXNcbiIsCisJCQkJCWRlYnVnLT5tb2RuYW1lKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCAqbW9kdWxlX2FsbG9jX3VwZGF0ZV9ib3VuZHModW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMjIxMywxMiArMjI0MSwxMyBAQAogCWFkZF9rYWxsc3ltcyhtb2QsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJpbmRleCwgc2Vjc3RyaW5ncyk7CiAKIAlpZiAoIW1vZC0+dGFpbnRzKSB7Ci0JCXN0cnVjdCBtb2RfZGVidWcgKmRlYnVnOworCQlzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWc7CiAJCXVuc2lnbmVkIGludCBudW1fZGVidWc7CiAKIAkJZGVidWcgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIiwKIAkJCQkgICAgIHNpemVvZigqZGVidWcpLCAmbnVtX2RlYnVnKTsKLQkJZHluYW1pY19wcmludGtfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CisJCWlmIChkZWJ1ZykKKwkJCWR5bmFtaWNfZGVidWdfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CiAJfQogCiAJLyogc2VjaGRyc1swXS5zaF9zaXplIGlzIGFsd2F5cyB6ZXJvICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDJhMmZmMzYuLjMyZmU0ZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC03NCw2ICs3NCw5IEBACiAJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCXByaW50ayhLRVJOX0VNRVJHICJLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogJXNcbiIsYnVmKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQorCWR1bXBfc3RhY2soKTsKKyNlbmRpZgogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCiAJLyoKQEAgLTM1NSwxNSArMzU4LDE4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorCiAvKgogICogQ2FsbGVkIHdoZW4gZ2NjJ3MgLWZzdGFjay1wcm90ZWN0b3IgZmVhdHVyZSBpcyB1c2VkLCBhbmQKICAqIGdjYyBkZXRlY3RzIGNvcnJ1cHRpb24gb2YgdGhlIG9uLXN0YWNrIGNhbmFyeSB2YWx1ZQogICovCiB2b2lkIF9fc3RhY2tfY2hrX2ZhaWwodm9pZCkKIHsKLQlwYW5pYygic3RhY2stcHJvdGVjdG9yOiBLZXJuZWwgc3RhY2sgaXMgY29ycnVwdGVkIik7CisJcGFuaWMoInN0YWNrLXByb3RlY3RvcjogS2VybmVsIHN0YWNrIGlzIGNvcnJ1cHRlZCBpbjogJXBcbiIsCisJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fc3RhY2tfY2hrX2ZhaWwpOworCiAjZW5kaWYKIAogY29yZV9wYXJhbShwYW5pYywgcGFuaWNfdGltZW91dCwgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IGU5NzZlNTAuLjhlNWQ5YTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtMTM3MCw3ICsxMzcwLDggQEAKIAkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZncm91cF9zYW1wbGUsICZzaWctPmNwdXRpbWVfZXhwaXJlcykpCiAJCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDlkNzliNzguLjhmMjE3OWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAkJCSAqIGZyb20gdGhlIHNjaGVkdWxlciAodHJ5aW5nIHRvIHJlLWdyYWIKIAkJCSAqIHJxLT5sb2NrKSwgc28gZGVmZXIgaXQuCiAJCQkgKi8KLQkJCV9fbW9kX3RpbWVyKCZidWYtPnRpbWVyLCBqaWZmaWVzICsgMSk7CisJCQltb2RfdGltZXIoJmJ1Zi0+dGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKIAlvbGQgPSBidWYtPmRhdGE7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDhlMjU1OGMuLjU3NTdlMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zMzEsNiArMzMxLDEzIEBACiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19ncm91cF9sb2NrKTsKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgcm9vdF90YXNrX2dyb3VwX2VtcHR5KHZvaWQpCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJnJvb3RfdGFza19ncm91cC5jaGlsZHJlbik7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQpAQCAtMzkxLDYgKzM5OCwxMyBAQAogCiAjZWxzZQogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKnRhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtNDY3LDExICs0ODEsMTcgQEAKIAlzdHJ1Y3QgcnRfcHJpb19hcnJheSBhY3RpdmU7CiAJdW5zaWduZWQgbG9uZyBydF9ucl9ydW5uaW5nOwogI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWludCBoaWdoZXN0X3ByaW87IC8qIGhpZ2hlc3QgcXVldWVkIHJ0IHRhc2sgcHJpbyAqLworCXN0cnVjdCB7CisJCWludCBjdXJyOyAvKiBoaWdoZXN0IHF1ZXVlZCBydCB0YXNrIHByaW8gKi8KKyNpZmRlZiBDT05GSUdfU01QCisJCWludCBuZXh0OyAvKiBuZXh0IGhpZ2hlc3QgKi8KKyNlbmRpZgorCX0gaGlnaGVzdF9wcmlvOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGxvbmcgcnRfbnJfbWlncmF0b3J5OwogCWludCBvdmVybG9hZGVkOworCXN0cnVjdCBwbGlzdF9oZWFkIHB1c2hhYmxlX3Rhc2tzOwogI2VuZGlmCiAJaW50IHJ0X3Rocm90dGxlZDsKIAl1NjQgcnRfdGltZTsKQEAgLTU0OSw3ICs1NjksNiBAQAogCXVuc2lnbmVkIGxvbmcgbnJfcnVubmluZzsKIAkjZGVmaW5lIENQVV9MT0FEX0lEWF9NQVggNQogCXVuc2lnbmVkIGxvbmcgY3B1X2xvYWRbQ1BVX0xPQURfSURYX01BWF07Ci0JdW5zaWduZWQgY2hhciBpZGxlX2F0X3RpY2s7CiAjaWZkZWYgQ09ORklHX05PX0haCiAJdW5zaWduZWQgbG9uZyBsYXN0X3RpY2tfc2VlbjsKIAl1bnNpZ25lZCBjaGFyIGluX25vaHpfcmVjZW50bHk7CkBAIC01OTAsNiArNjA5LDcgQEAKIAlzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCisJdW5zaWduZWQgY2hhciBpZGxlX2F0X3RpY2s7CiAJLyogRm9yIGFjdGl2ZSBiYWxhbmNpbmcgKi8KIAlpbnQgYWN0aXZlX2JhbGFuY2U7CiAJaW50IHB1c2hfY3B1OwpAQCAtNjE4LDkgKzYzOCw2IEBACiAJLyogY291bGQgYWJvdmUgYmUgcnEtPmNmc19ycS5leGVjX2Nsb2NrICsgcnEtPnJ0X3JxLnJ0X3J1bnRpbWUgPyAqLwogCiAJLyogc3lzX3NjaGVkX3lpZWxkKCkgc3RhdHMgKi8KLQl1bnNpZ25lZCBpbnQgeWxkX2V4cF9lbXB0eTsKLQl1bnNpZ25lZCBpbnQgeWxkX2FjdF9lbXB0eTsKLQl1bnNpZ25lZCBpbnQgeWxkX2JvdGhfZW1wdHk7CiAJdW5zaWduZWQgaW50IHlsZF9jb3VudDsKIAogCS8qIHNjaGVkdWxlKCkgc3RhdHMgKi8KQEAgLTExODMsMTAgKzEyMDAsMTAgQEAKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmdGFza19ycShwKS0+bG9jayk7CiAKLQlpZiAodW5saWtlbHkodGVzdF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX05FRURfUkVTQ0hFRCkpKQorCWlmICh0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocCkpCiAJCXJldHVybjsKIAotCXNldF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX05FRURfUkVTQ0hFRCk7CisJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CiAKIAljcHUgPSB0YXNrX2NwdShwKTsKIAlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKQEAgLTEyNDIsNyArMTI1OSw3IEBACiAJICogbG9ja2xlc3MuIFRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgdGhlIG90aGVyIENQVSBydW5zIHRoZQogCSAqIGlkbGUgdGFzayB0aHJvdWdoIGFuIGFkZGl0aW9uYWwgTk9PUCBzY2hlZHVsZSgpCiAJICovCi0Jc2V0X3Rza190aHJlYWRfZmxhZyhycS0+aWRsZSwgVElGX05FRURfUkVTQ0hFRCk7CisJc2V0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmlkbGUpOwogCiAJLyogTkVFRF9SRVNDSEVEIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdCBwb2xsaW5nICovCiAJc21wX21iKCk7CkBAIC0xNjEwLDIxICsxNjI3LDQyIEBACiAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwogLyoKLSAqIGRvdWJsZV9sb2NrX2JhbGFuY2UgLSBsb2NrIHRoZSBidXNpZXN0IHJ1bnF1ZXVlLCB0aGlzX3JxIGlzIGxvY2tlZCBhbHJlYWR5LgorICogZmFpciBkb3VibGVfbG9ja19iYWxhbmNlOiBTYWZlbHkgYWNxdWlyZXMgYm90aCBycS0+bG9ja3MgaW4gYSBmYWlyCisgKiB3YXkgYXQgdGhlIGV4cGVuc2Ugb2YgZm9yY2luZyBleHRyYSBhdG9taWMgb3BlcmF0aW9ucyBpbiBhbGwKKyAqIGludm9jYXRpb25zLiAgVGhpcyBhc3N1cmVzIHRoYXQgdGhlIGRvdWJsZV9sb2NrIGlzIGFjcXVpcmVkIHVzaW5nIHRoZQorICogc2FtZSB1bmRlcmx5aW5nIHBvbGljeSBhcyB0aGUgc3BpbmxvY2tfdCBvbiB0aGlzIGFyY2hpdGVjdHVyZSwgd2hpY2gKKyAqIHJlZHVjZXMgbGF0ZW5jeSBjb21wYXJlZCB0byB0aGUgdW5mYWlyIHZhcmlhbnQgYmVsb3cuICBIb3dldmVyLCBpdAorICogYWxzbyBhZGRzIG1vcmUgb3ZlcmhlYWQgYW5kIHRoZXJlZm9yZSBtYXkgcmVkdWNlIHRocm91Z2hwdXQuCiAgKi8KLXN0YXRpYyBpbnQgZG91YmxlX2xvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKK3N0YXRpYyBpbmxpbmUgaW50IF9kb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQorCV9fcmVsZWFzZXModGhpc19ycS0+bG9jaykKKwlfX2FjcXVpcmVzKGJ1c2llc3QtPmxvY2spCisJX19hY3F1aXJlcyh0aGlzX3JxLT5sb2NrKQoreworCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKKworCXJldHVybiAxOworfQorCisjZWxzZQorLyoKKyAqIFVuZmFpciBkb3VibGVfbG9ja19iYWxhbmNlOiBPcHRpbWl6ZXMgdGhyb3VnaHB1dCBhdCB0aGUgZXhwZW5zZSBvZgorICogbGF0ZW5jeSBieSBlbGltaW5hdGluZyBleHRyYSBhdG9taWMgb3BlcmF0aW9ucyB3aGVuIHRoZSBsb2NrcyBhcmUKKyAqIGFscmVhZHkgaW4gcHJvcGVyIG9yZGVyIG9uIGVudHJ5LiAgVGhpcyBmYXZvcnMgbG93ZXIgY3B1LWlkcyBhbmQgd2lsbAorICogZ3JhbnQgdGhlIGRvdWJsZSBsb2NrIHRvIGxvd2VyIGNwdXMgb3ZlciBoaWdoZXIgaWRzIHVuZGVyIGNvbnRlbnRpb24sCisgKiByZWdhcmRsZXNzIG9mIGVudHJ5IG9yZGVyIGludG8gdGhlIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IF9kb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQogCV9fcmVsZWFzZXModGhpc19ycS0+bG9jaykKIAlfX2FjcXVpcmVzKGJ1c2llc3QtPmxvY2spCiAJX19hY3F1aXJlcyh0aGlzX3JxLT5sb2NrKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKHVubGlrZWx5KCFpcnFzX2Rpc2FibGVkKCkpKSB7Ci0JCS8qIHByaW50aygpIGRvZXNuJ3Qgd29yayBnb29kIHVuZGVyIHJxLT5sb2NrICovCi0JCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKLQkJQlVHX09OKDEpOwotCX0KIAlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9jaygmYnVzaWVzdC0+bG9jaykpKSB7CiAJCWlmIChidXNpZXN0IDwgdGhpc19ycSkgewogCQkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwpAQCAtMTYzNyw2ICsxNjc1LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKKy8qCisgKiBkb3VibGVfbG9ja19iYWxhbmNlIC0gbG9jayB0aGUgYnVzaWVzdCBydW5xdWV1ZSwgdGhpc19ycSBpcyBsb2NrZWQgYWxyZWFkeS4KKyAqLworc3RhdGljIGludCBkb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQoreworCWlmICh1bmxpa2VseSghaXJxc19kaXNhYmxlZCgpKSkgeworCQkvKiBwcmludGsoKSBkb2Vzbid0IHdvcmsgZ29vZCB1bmRlciBycS0+bG9jayAqLworCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CisJCUJVR19PTigxKTsKKwl9CisKKwlyZXR1cm4gX2RvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfdW5sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCiAJX19yZWxlYXNlcyhidXNpZXN0LT5sb2NrKQogewpAQCAtMTcwNSw2ICsxNzU5LDkgQEAKIAogc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKIHsKKwlpZiAod2FrZXVwKQorCQlwLT5zZS5zdGFydF9ydW50aW1lID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwogCXNjaGVkX2luZm9fcXVldWVkKHApOwogCXAtPnNjaGVkX2NsYXNzLT5lbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCk7CiAJcC0+c2Uub25fcnEgPSAxOwpAQCAtMTcxMiwxMCArMTc2OSwxNSBAQAogCiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCiB7Ci0JaWYgKHNsZWVwICYmIHAtPnNlLmxhc3Rfd2FrZXVwKSB7Ci0JCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z19vdmVybGFwLAotCQkJICAgcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSAtIHAtPnNlLmxhc3Rfd2FrZXVwKTsKLQkJcC0+c2UubGFzdF93YWtldXAgPSAwOworCWlmIChzbGVlcCkgeworCQlpZiAocC0+c2UubGFzdF93YWtldXApIHsKKwkJCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z19vdmVybGFwLAorCQkJCXAtPnNlLnN1bV9leGVjX3J1bnRpbWUgLSBwLT5zZS5sYXN0X3dha2V1cCk7CisJCQlwLT5zZS5sYXN0X3dha2V1cCA9IDA7CisJCX0gZWxzZSB7CisJCQl1cGRhdGVfYXZnKCZwLT5zZS5hdmdfd2FrZXVwLAorCQkJCXN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOworCQl9CiAJfQogCiAJc2NoZWRfaW5mb19kZXF1ZXVlZChwKTsKQEAgLTIwMTcsNyArMjA3OSw3IEBACiAJCSAqIGl0IG11c3QgYmUgb2ZmIHRoZSBydW5xdWV1ZSBfZW50aXJlbHlfLCBhbmQgbm90CiAJCSAqIHByZWVtcHRlZCEKIAkJICoKLQkJICogU28gaWYgaXQgd2Egc3RpbGwgcnVubmFibGUgKGJ1dCBqdXN0IG5vdCBhY3RpdmVseQorCQkgKiBTbyBpZiBpdCB3YXMgc3RpbGwgcnVubmFibGUgKGJ1dCBqdXN0IG5vdCBhY3RpdmVseQogCQkgKiBydW5uaW5nIHJpZ2h0IG5vdyksIGl0J3MgcHJlZW1wdGVkLCBhbmQgd2Ugc2hvdWxkCiAJCSAqIHlpZWxkIC0gaXQgY291bGQgYmUgYSB3aGlsZS4KIAkJICovCkBAIC0yMjY3LDcgKzIzMjksNyBAQAogCQlzeW5jID0gMDsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoc2NoZWRfZmVhdChMQl9XQUtFVVBfVVBEQVRFKSkgeworCWlmIChzY2hlZF9mZWF0KExCX1dBS0VVUF9VUERBVEUpICYmICFyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkgewogCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAogCQl0aGlzX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yMzQ1LDYgKzI0MDcsMjIgQEAKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAxKTsKIAlzdWNjZXNzID0gMTsKIAorCS8qCisJICogT25seSBhdHRyaWJ1dGUgYWN0dWFsIHdha2V1cHMgZG9uZSBieSB0aGlzIHRhc2suCisJICovCisJaWYgKCFpbl9pbnRlcnJ1cHQoKSkgeworCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZjdXJyZW50LT5zZTsKKwkJdTY0IHNhbXBsZSA9IHNlLT5zdW1fZXhlY19ydW50aW1lOworCisJCWlmIChzZS0+bGFzdF93YWtldXApCisJCQlzYW1wbGUgLT0gc2UtPmxhc3Rfd2FrZXVwOworCQllbHNlCisJCQlzYW1wbGUgLT0gc2UtPnN0YXJ0X3J1bnRpbWU7CisJCXVwZGF0ZV9hdmcoJnNlLT5hdmdfd2FrZXVwLCBzYW1wbGUpOworCisJCXNlLT5sYXN0X3dha2V1cCA9IHNlLT5zdW1fZXhlY19ydW50aW1lOworCX0KKwogb3V0X3J1bm5pbmc6CiAJdHJhY2Vfc2NoZWRfd2FrZXVwKHJxLCBwLCBzdWNjZXNzKTsKIAljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIHN5bmMpOwpAQCAtMjM1NSw4ICsyNDMzLDYgQEAKIAkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FrZV91cChycSwgcCk7CiAjZW5kaWYKIG91dDoKLQljdXJyZW50LT5zZS5sYXN0X3dha2V1cCA9IGN1cnJlbnQtPnNlLnN1bV9leGVjX3J1bnRpbWU7Ci0KIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAogCXJldHVybiBzdWNjZXNzOwpAQCAtMjM4Niw2ICsyNDYyLDggQEAKIAlwLT5zZS5wcmV2X3N1bV9leGVjX3J1bnRpbWUJPSAwOwogCXAtPnNlLmxhc3Rfd2FrZXVwCQk9IDA7CiAJcC0+c2UuYXZnX292ZXJsYXAJCT0gMDsKKwlwLT5zZS5zdGFydF9ydW50aW1lCQk9IDA7CisJcC0+c2UuYXZnX3dha2V1cAkJPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwogCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAlwLT5zZS53YWl0X3N0YXJ0CQk9IDA7CkBAIC0yNDQ4LDYgKzI1MjYsOCBAQAogCS8qIFdhbnQgdG8gc3RhcnQgd2l0aCBrZXJuZWwgcHJlZW1wdGlvbiBkaXNhYmxlZC4gKi8KIAl0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ID0gMTsKICNlbmRpZgorCXBsaXN0X25vZGVfaW5pdCgmcC0+cHVzaGFibGVfdGFza3MsIE1BWF9QUklPKTsKKwogCXB1dF9jcHUoKTsKIH0KIApAQCAtMjQ5MSw3ICsyNTcxLDcgQEAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKIAogLyoqCi0gKiBwcmVlbXB0X25vdGlmaWVyX3JlZ2lzdGVyIC0gdGVsbCBtZSB3aGVuIGN1cnJlbnQgaXMgYmVpbmcgYmVpbmcgcHJlZW1wdGVkICYgcmVzY2hlZHVsZWQKKyAqIHByZWVtcHRfbm90aWZpZXJfcmVnaXN0ZXIgLSB0ZWxsIG1lIHdoZW4gY3VycmVudCBpcyBiZWluZyBwcmVlbXB0ZWQgJiByZXNjaGVkdWxlZAogICogQG5vdGlmaWVyOiBub3RpZmllciBzdHJ1Y3QgdG8gcmVnaXN0ZXIKICAqLwogdm9pZCBwcmVlbXB0X25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBwcmVlbXB0X25vdGlmaWVyICpub3RpZmllcikKQEAgLTI1ODgsNiArMjY2OCwxMiBAQAogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcnEtPnByZXZfbW07CiAJbG9uZyBwcmV2X3N0YXRlOworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgcG9zdF9zY2hlZHVsZSA9IDA7CisKKwlpZiAoY3VycmVudC0+c2NoZWRfY2xhc3MtPm5lZWRzX3Bvc3Rfc2NoZWR1bGUpCisJCXBvc3Rfc2NoZWR1bGUgPSBjdXJyZW50LT5zY2hlZF9jbGFzcy0+bmVlZHNfcG9zdF9zY2hlZHVsZShycSk7CisjZW5kaWYKIAogCXJxLT5wcmV2X21tID0gTlVMTDsKIApAQCAtMjYwNiw3ICsyNjkyLDcgQEAKIAlmaW5pc2hfYXJjaF9zd2l0Y2gocHJldik7CiAJZmluaXNoX2xvY2tfc3dpdGNoKHJxLCBwcmV2KTsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5wb3N0X3NjaGVkdWxlKQorCWlmIChwb3N0X3NjaGVkdWxlKQogCQljdXJyZW50LT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZShycSk7CiAjZW5kaWYKIApAQCAtMjkxMyw2ICsyOTk5LDcgQEAKIAkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCiAJCSAgICAgaW50ICphbGxfcGlubmVkKQogeworCWludCB0c2tfY2FjaGVfaG90ID0gMDsKIAkvKgogCSAqIFdlIGRvIG5vdCBtaWdyYXRlIHRhc2tzIHRoYXQgYXJlOgogCSAqIDEpIHJ1bm5pbmcgKG9idmlvdXNseSksIG9yCkBAIC0yOTM2LDEwICszMDIzLDExIEBACiAJICogMikgdG9vIG1hbnkgYmFsYW5jZSBhdHRlbXB0cyBoYXZlIGZhaWxlZC4KIAkgKi8KIAotCWlmICghdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCkgfHwKLQkJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CisJdHNrX2NhY2hlX2hvdCA9IHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpOworCWlmICghdHNrX2NhY2hlX2hvdCB8fAorCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcykgewogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCi0JCWlmICh0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKSkgeworCQlpZiAodHNrX2NhY2hlX2hvdCkgewogCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfaG90X2dhaW5lZFtpZGxlXSk7CiAJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZF9taWdyYXRpb25zKTsKIAkJfQpAQCAtMjk0Nyw3ICszMDM1LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpKSB7CisJaWYgKHRza19jYWNoZV9ob3QpIHsKIAkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yOTg3LDYgKzMwNzUsMTYgQEAKIAlwdWxsZWQrKzsKIAlyZW1fbG9hZF9tb3ZlIC09IHAtPnNlLmxvYWQud2VpZ2h0OwogCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwkvKgorCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlIGtlcm5lbHMKKwkgKiB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplIHRoZSBjcml0aWNhbAorCSAqIHNlY3Rpb24uCisJICovCisJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCisJCWdvdG8gb3V0OworI2VuZGlmCisKIAkvKgogCSAqIFdlIG9ubHkgd2FudCB0byBzdGVhbCB1cCB0byB0aGUgcHJlc2NyaWJlZCBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZC4KIAkgKi8KQEAgLTMwMzMsOSArMzEzMSwxNSBAQAogCQkJCXNkLCBpZGxlLCBhbGxfcGlubmVkLCAmdGhpc19iZXN0X3ByaW8pOwogCQljbGFzcyA9IGNsYXNzLT5uZXh0OwogCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwkJLyoKKwkJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUKKwkJICoga2VybmVscyB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplCisJCSAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorCQkgKi8KIAkJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUgJiYgdGhpc19ycS0+bnJfcnVubmluZykKIAkJCWJyZWFrOwotCisjZW5kaWYKIAl9IHdoaWxlIChjbGFzcyAmJiBtYXhfbG9hZF9tb3ZlID4gdG90YWxfbG9hZF9tb3ZlZCk7CiAKIAlyZXR1cm4gdG90YWxfbG9hZF9tb3ZlZCA+IDA7CkBAIC0zMDg1LDIxNSArMzE4OSw1NjYgQEAKIAogCXJldHVybiAwOwogfQorLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgorICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKi8KK3N0cnVjdCBzZF9sYl9zdGF0cyB7CisJc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLworCisJLyoqIFN0YXRpc3RpY3Mgb2YgdGhpcyBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkOworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgdGhpc19ucl9ydW5uaW5nOworCisJLyogU3RhdGlzdGljcyBvZiB0aGUgYnVzaWVzdCBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQ7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X25yX3J1bm5pbmc7CisKKwlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBpbWJhbGFuY2UgaW4gdGhpcyBzZCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCisJaW50IHBvd2VyX3NhdmluZ3NfYmFsYW5jZTsgLyogSXMgcG93ZXJzYXZlIGJhbGFuY2UgbmVlZGVkIGZvciB0aGlzIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9taW47IC8qIExlYXN0IGxvYWRlZCBncm91cCBpbiBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbGVhZGVyOyAvKiBHcm91cCB3aGljaCByZWxpZXZlcyBncm91cF9taW4gKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9sb2FkX3Blcl90YXNrOyAvKiBsb2FkX3Blcl90YXNrIGluIGdyb3VwX21pbiAqLworCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbGVhZGVyICovCisJdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9taW4gKi8KKyNlbmRpZgorfTsKIAogLyoKLSAqIGZpbmRfYnVzaWVzdF9ncm91cCBmaW5kcyBhbmQgcmV0dXJucyB0aGUgYnVzaWVzdCBDUFUgZ3JvdXAgd2l0aGluIHRoZQotICogZG9tYWluLiBJdCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaAotICogc2hvdWxkIGJlIG1vdmVkIHRvIHJlc3RvcmUgYmFsYW5jZSB2aWEgdGhlIGltYmFsYW5jZSBwYXJhbWV0ZXIuCisgKiBzZ19sYl9zdGF0cyAtIHN0YXRzIG9mIGEgc2NoZWRfZ3JvdXAgcmVxdWlyZWQgZm9yIGxvYWRfYmFsYW5jaW5nCisgKi8KK3N0cnVjdCBzZ19sYl9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsgLypBdmcgbG9hZCBhY3Jvc3MgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBncm91cF9sb2FkOyAvKiBUb3RhbCBsb2FkIG92ZXIgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzdW1fbnJfcnVubmluZzsgLyogTnIgdGFza3MgcnVubmluZyBpbiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV93ZWlnaHRlZF9sb2FkOyAvKiBXZWlnaHRlZCBsb2FkIG9mIGdyb3VwJ3MgdGFza3MgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2NhcGFjaXR5OworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGFuIGltYmFsYW5jZSBpbiB0aGUgZ3JvdXAgPyAqLworfTsKKworLyoqCisgKiBncm91cF9maXJzdF9jcHUgLSBSZXR1cm5zIHRoZSBmaXJzdCBjcHUgaW4gdGhlIGNwdW1hc2sgb2YgYSBzY2hlZF9ncm91cC4KKyAqIEBncm91cDogVGhlIGdyb3VwIHdob3NlIGZpcnN0IGNwdSBpcyB0byBiZSByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3JvdXBfZmlyc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCit7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworfQorCisvKioKKyAqIGdldF9zZF9sb2FkX2lkeCAtIE9idGFpbiB0aGUgbG9hZCBpbmRleCBmb3IgYSBnaXZlbiBzY2hlZCBkb21haW4uCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgbG9hZF9pZHggaXMgdG8gYmUgb2J0YWluZWQuCisgKiBAaWRsZTogVGhlIElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgZm9yIHdob3NlIHNkIGxvYWRfaWN4IGlzIG9idGFpbmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfc2RfbG9hZF9pZHgoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCWludCBsb2FkX2lkeDsKKworCXN3aXRjaCAoaWRsZSkgeworCWNhc2UgQ1BVX05PVF9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5idXN5X2lkeDsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9ORVdMWV9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5uZXdpZGxlX2lkeDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsb2FkX2lkeDsKK30KKworCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKy8qKgorICogaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gSW5pdGlhbGl6ZSBwb3dlciBzYXZpbmdzIHN0YXRpc3RpY3MgZm9yCisgKiB0aGUgZ2l2ZW4gc2NoZWRfZG9tYWluLCBkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQHNkOiBTY2hlZCBkb21haW4gd2hvc2UgcG93ZXItc2F2aW5ncyBzdGF0aXN0aWNzIGFyZSB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3MgZm9yIHNkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgYXQgd2hpY2ggd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJLyoKKwkgKiBCdXN5IHByb2Nlc3NvcnMgd2lsbCBub3QgcGFydGljaXBhdGUgaW4gcG93ZXIgc2F2aW5ncworCSAqIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8ICEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisJZWxzZSB7CisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMTsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IDA7CisJfQorfQorCisvKioKKyAqIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gVXBkYXRlIHRoZSBwb3dlciBzYXZpbmcgc3RhdHMgZm9yIGEKKyAqIHNjaGVkX2RvbWFpbiB3aGlsZSBwZXJmb3JtaW5nIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEBncm91cDogc2NoZWRfZ3JvdXAgYmVsb25naW5nIHRvIHRoZSBzY2hlZF9kb21haW4gdW5kZXIgY29uc2lkZXJhdGlvbi4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhlIENQVSBmb3Igd2hpY2ggd2UncmUgcGVyZm9ybWluZworICogCQlsb2FkIGJhbGFuY2luZyA/CisgKiBAc2dzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBncm91cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCisJICogbm8gbmVlZCB0byBkbyBwb3dlciBzYXZpbmdzIGJhbGFuY2UgYXQgdGhpcyBkb21haW4KKwkgKi8KKwlpZiAobG9jYWxfZ3JvdXAgJiYgKHNkcy0+dGhpc19ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKKwkJCQkhc2RzLT50aGlzX25yX3J1bm5pbmcpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisKKwkvKgorCSAqIElmIGEgZ3JvdXAgaXMgYWxyZWFkeSBydW5uaW5nIGF0IGZ1bGwgY2FwYWNpdHkgb3IgaWRsZSwKKwkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKKwkgKi8KKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8CisJCXNncy0+c3VtX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkhc2dzLT5zdW1fbnJfcnVubmluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGhhcyB0aGUgbGVhc3Qgbm9uLWlkbGUgbG9hZC4KKwkgKiBUaGlzIGlzIHRoZSBncm91cCBmcm9tIHdoZXJlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgbG9hZAorCSAqIGZvciBzYXZpbmcgcG93ZXIKKwkgKi8KKwlpZiAoKHNncy0+c3VtX25yX3J1bm5pbmcgPCBzZHMtPm1pbl9ucl9ydW5uaW5nKSB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPm1pbl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApID4gZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbWluKSkpIHsKKwkJc2RzLT5ncm91cF9taW4gPSBncm91cDsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJCXNkcy0+bWluX2xvYWRfcGVyX3Rhc2sgPSBzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkIC8KKwkJCQkJCXNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGlzIGFsbW9zdCBuZWFyIGl0cworCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAorCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgorCSAqLworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2dzLT5ncm91cF9jYXBhY2l0eSAtIDEpCisJCXJldHVybjsKKworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2RzLT5sZWFkZXJfbnJfcnVubmluZyB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApIDwgZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbGVhZGVyKSkpIHsKKwkJc2RzLT5ncm91cF9sZWFkZXIgPSBncm91cDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorfQorCisvKioKKyAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KKyAqCXVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiBAdGhpc19jcHU6IENwdSBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLgorICogSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUgdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUKKyAqIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCisgKiBFbHNlIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm4gMDsKKworCWlmIChzZHMtPnRoaXMgIT0gc2RzLT5ncm91cF9sZWFkZXIgfHwKKwkJCXNkcy0+Z3JvdXBfbGVhZGVyID09IHNkcy0+Z3JvdXBfbWluKQorCQlyZXR1cm4gMDsKKworCSppbWJhbGFuY2UgPSBzZHMtPm1pbl9sb2FkX3Blcl90YXNrOworCXNkcy0+YnVzaWVzdCA9IHNkcy0+Z3JvdXBfbWluOworCisJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPj0gUE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQKSB7CisJCWNwdV9ycSh0aGlzX2NwdSktPnJkLT5zY2hlZF9tY19wcmVmZXJyZWRfd2FrZXVwX2NwdSA9CisJCQlncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpOworCX0KKworCXJldHVybiAxOworCit9CisjZWxzZSAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KKworCisvKioKKyAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CisgKiBAbG9hZF9pZHg6IExvYWQgaW5kZXggb2Ygc2NoZWRfZG9tYWluIG9mIHRoaXNfY3B1IGZvciBsb2FkIGNhbGMuCisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhpc19jcHUuCisgKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCisgKiBAc2dzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGdyb3VwLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGludCB0aGlzX2NwdSwKKwkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgbG9hZF9pZHgsIGludCAqc2RfaWRsZSwKKwkJCWludCBsb2NhbF9ncm91cCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCisJCQlpbnQgKmJhbGFuY2UsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGJhbGFuY2VfY3B1ID0gLTEsIGZpcnN0X2lkbGVfY3B1ID0gMDsKKwl1bnNpZ25lZCBsb25nIHN1bV9hdmdfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkX3Blcl90YXNrOworCisJaWYgKGxvY2FsX2dyb3VwKQorCQliYWxhbmNlX2NwdSA9IGdyb3VwX2ZpcnN0X2NwdShncm91cCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KKwlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgPSBhdmdfbG9hZF9wZXJfdGFzayA9IDA7CisJbWF4X2NwdV9sb2FkID0gMDsKKwltaW5fY3B1X2xvYWQgPSB+MFVMOworCisJZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgeworCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOworCisJCWlmICgqc2RfaWRsZSAmJiBycS0+bnJfcnVubmluZykKKwkJCSpzZF9pZGxlID0gMDsKKworCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgeworCQkJCWZpcnN0X2lkbGVfY3B1ID0gMTsKKwkJCQliYWxhbmNlX2NwdSA9IGk7CisJCQl9CisKKwkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7CisJCX0gZWxzZSB7CisJCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOworCQkJaWYgKGxvYWQgPiBtYXhfY3B1X2xvYWQpCisJCQkJbWF4X2NwdV9sb2FkID0gbG9hZDsKKwkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQorCQkJCW1pbl9jcHVfbG9hZCA9IGxvYWQ7CisJCX0KKworCQlzZ3MtPmdyb3VwX2xvYWQgKz0gbG9hZDsKKwkJc2dzLT5zdW1fbnJfcnVubmluZyArPSBycS0+bnJfcnVubmluZzsKKwkJc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOworCisJCXN1bV9hdmdfbG9hZF9wZXJfdGFzayArPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2soaSk7CisJfQorCisJLyoKKwkgKiBGaXJzdCBpZGxlIGNwdSBvciB0aGUgZmlyc3QgY3B1KGJ1c2llc3QpIGluIHRoaXMgc2NoZWQgZ3JvdXAKKwkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKKwkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKKwkgKiB0byBkbyB0aGUgbmV3bHkgaWRsZSBsb2FkIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKKwkgICAgYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUgJiYgYmFsYW5jZSkgeworCQkqYmFsYW5jZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLworCXNncy0+YXZnX2xvYWQgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAorCQkJc2dzLT5ncm91cF9sb2FkICogU0NIRURfTE9BRF9TQ0FMRSk7CisKKworCS8qCisJICogQ29uc2lkZXIgdGhlIGdyb3VwIHVuYmFsYW5jZWQgd2hlbiB0aGUgaW1iYWxhbmNlIGlzIGxhcmdlcgorCSAqIHRoYW4gdGhlIGF2ZXJhZ2Ugd2VpZ2h0IG9mIHR3byB0YXNrcy4KKwkgKgorCSAqIEFQWjogd2l0aCBjZ3JvdXAgdGhlIGF2ZyB0YXNrIHdlaWdodCBjYW4gdmFyeSB3aWxkbHkgYW5kCisJICogICAgICBtaWdodCBub3QgYmUgYSBzdWl0YWJsZSBudW1iZXIgLSBzaG91bGQgd2Uga2VlcCBhCisJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKKwkgKiAgICAgIHRoZSBoaWVyYXJjaHk/CisJICovCisJYXZnX2xvYWRfcGVyX3Rhc2sgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAorCQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CisKKwlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQorCQlzZ3MtPmdyb3VwX2ltYiA9IDE7CisKKwlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0gZ3JvdXAtPl9fY3B1X3Bvd2VyIC8gU0NIRURfTE9BRF9TQ0FMRTsKKworfQorCisvKioKKyAqIHVwZGF0ZV9zZF9sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQorICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KKyAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KKyAqIEBzZHM6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgc2NoZWRfZG9tYWluLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCisJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICpzZF9pZGxlLAorCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSwKKwkJCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzKQoreworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAgPSBzZC0+Z3JvdXBzOworCXN0cnVjdCBzZ19sYl9zdGF0cyBzZ3M7CisJaW50IGxvYWRfaWR4OworCisJaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNkLCBzZHMsIGlkbGUpOworCWxvYWRfaWR4ID0gZ2V0X3NkX2xvYWRfaWR4KHNkLCBpZGxlKTsKKworCWRvIHsKKwkJaW50IGxvY2FsX2dyb3VwOworCisJCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKKwkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKKwkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKKwkJdXBkYXRlX3NnX2xiX3N0YXRzKGdyb3VwLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCisJCQkJbG9jYWxfZ3JvdXAsIGNwdXMsIGJhbGFuY2UsICZzZ3MpOworCisJCWlmIChsb2NhbF9ncm91cCAmJiBiYWxhbmNlICYmICEoKmJhbGFuY2UpKQorCQkJcmV0dXJuOworCisJCXNkcy0+dG90YWxfbG9hZCArPSBzZ3MuZ3JvdXBfbG9hZDsKKwkJc2RzLT50b3RhbF9wd3IgKz0gZ3JvdXAtPl9fY3B1X3Bvd2VyOworCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJc2RzLT50aGlzX2xvYWQgPSBzZ3MuYXZnX2xvYWQ7CisJCQlzZHMtPnRoaXMgPSBncm91cDsKKwkJCXNkcy0+dGhpc19ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOworCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CisJCX0gZWxzZSBpZiAoc2dzLmF2Z19sb2FkID4gc2RzLT5tYXhfbG9hZCAmJgorCQkJICAgKHNncy5zdW1fbnJfcnVubmluZyA+IHNncy5ncm91cF9jYXBhY2l0eSB8fAorCQkJCXNncy5ncm91cF9pbWIpKSB7CisJCQlzZHMtPm1heF9sb2FkID0gc2dzLmF2Z19sb2FkOworCQkJc2RzLT5idXNpZXN0ID0gZ3JvdXA7CisJCQlzZHMtPmJ1c2llc3RfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOworCQkJc2RzLT5ncm91cF9pbWIgPSBzZ3MuZ3JvdXBfaW1iOworCQl9CisKKwkJdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoZ3JvdXAsIHNkcywgbG9jYWxfZ3JvdXAsICZzZ3MpOworCQlncm91cCA9IGdyb3VwLT5uZXh0OworCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOworCit9CisKKy8qKgorICogZml4X3NtYWxsX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgbWlub3IgaW1iYWxhbmNlIHRoYXQgZXhpc3RzCisgKgkJCWFtb25nc3QgdGhlIGdyb3VwcyBvZiBhIHNjaGVkX2RvbWFpbiwgZHVyaW5nCisgKgkJCWxvYWQgYmFsYW5jaW5nLgorICogQHNkczogU3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBUaGUgY3B1IGF0IHdob3NlIHNjaGVkX2RvbWFpbiB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jZS4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXhfc21hbGxfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgdG1wLCBwd3Jfbm93ID0gMCwgcHdyX21vdmUgPSAwOworCXVuc2lnbmVkIGludCBpbWJuID0gMjsKKworCWlmIChzZHMtPnRoaXNfbnJfcnVubmluZykgeworCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayAvPSBzZHMtPnRoaXNfbnJfcnVubmluZzsKKwkJaWYgKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID4KKwkJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaykKKwkJCWltYm4gPSAxOworCX0gZWxzZQorCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9CisJCQljcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOworCisJaWYgKHNkcy0+bWF4X2xvYWQgLSBzZHMtPnRoaXNfbG9hZCArIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID49CisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIGltYm4pIHsKKwkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPSywgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW1iYWxhbmNlIHRvIGp1c3RpZnkgbW92aW5nIHRhc2tzLAorCSAqIGhvd2V2ZXIgd2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdG90YWwgQ1BVIHBvd2VyIHVzZWQgYnkKKwkgKiBtb3ZpbmcgdGhlbS4KKwkgKi8KKworCXB3cl9ub3cgKz0gc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQpOworCXB3cl9ub3cgKz0gc2RzLT50aGlzLT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKKwlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCisJdG1wID0gc2dfZGl2X2NwdV9wb3dlcihzZHMtPmJ1c2llc3QsCisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOworCWlmIChzZHMtPm1heF9sb2FkID4gdG1wKQorCQlwd3JfbW92ZSArPSBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCAtIHRtcCk7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIGFkZCAqLworCWlmIChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciA8CisJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKKwkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcihzZHMtPnRoaXMsCisJCQlzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlcik7CisJZWxzZQorCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHNkcy0+dGhpcywKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CisJcHdyX21vdmUgKz0gc2RzLT50aGlzLT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkICsgdG1wKTsKKwlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KKwlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQorCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Cit9CisKKy8qKgorICogY2FsY3VsYXRlX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGltYmFsYW5jZSBwcmVzZW50IHdpdGhpbiB0aGUKKyAqCQkJIGdyb3VwcyBvZiBhIGdpdmVuIHNjaGVkX2RvbWFpbiBkdXJpbmcgbG9hZCBiYWxhbmNlLgorICogQHNkczogc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGN1cnJlbnRseSBsb2FkIGJhbGFuY2UgaXMgYmVpbmcgcGVyZm9ybWVkLgorICogQGltYmFsYW5jZTogVGhlIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgdGhpc19jcHUsCisJCXVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1heF9wdWxsOworCS8qCisJICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKKwkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93CisJICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKKwkgKi8KKwlpZiAoc2RzLT5tYXhfbG9hZCA8IHNkcy0+YXZnX2xvYWQpIHsKKwkJKmltYmFsYW5jZSA9IDA7CisJCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisJfQorCisJLyogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUgKi8KKwltYXhfcHVsbCA9IG1pbihzZHMtPm1heF9sb2FkIC0gc2RzLT5hdmdfbG9hZCwKKwkJCXNkcy0+bWF4X2xvYWQgLSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayk7CisKKwkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLworCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyLAorCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+X19jcHVfcG93ZXIpCisJCQkvIFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKgorCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKKwkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCisJICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQorCSAqIG1vdmVkCisJICovCisJaWYgKCppbWJhbGFuY2UgPCBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKKwkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKworfQorLyoqKioqKiogZmluZF9idXNpZXN0X2dyb3VwKCkgaGVscGVycyBlbmQgaGVyZSAqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogZmluZF9idXNpZXN0X2dyb3VwIC0gUmV0dXJucyB0aGUgYnVzaWVzdCBncm91cCB3aXRoaW4gdGhlIHNjaGVkX2RvbWFpbgorICogaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBJZiB0aGVyZSBpc24ndCBhbiBpbWJhbGFuY2UsIGFuZAorICogdGhlIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzLCBpdCByZXR1cm5zIGEgZ3JvdXAgd2hvc2UKKyAqIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIHRob3NlIHRhc2tzIGVsc2V3aGVyZSwgaWYKKyAqIHN1Y2ggYSBncm91cCBleGlzdHMuCisgKgorICogQWxzbyBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUgbW92ZWQKKyAqIHRvIHJlc3RvcmUgYmFsYW5jZS4KKyAqCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgYnVzaWVzdCBncm91cCBpcyB0byBiZSByZXR1cm5lZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNpbmcgaXMgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHdoaWNoIHN0b3JlcyBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQKKyAqCQliZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UvcHV0IGEgZ3JvdXAgdG8gaWRsZS4KKyAqIEBpZGxlOiBUaGUgaWRsZSBzdGF0dXMgb2YgdGhpc19jcHUuCisgKiBAc2RfaWRsZTogVGhlIGlkbGVuZXNzIG9mIHNkCisgKiBAY3B1czogVGhlIHNldCBvZiBDUFVzIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGxvYWQtYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIHRoaXNfY3B1CisgKglpcyB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcgYXQgdGhpc19sZXZlbC4KKyAqCisgKiBSZXR1cm5zOgktIHRoZSBidXNpZXN0IGdyb3VwIGlmIGltYmFsYW5jZSBleGlzdHMuCisgKgkJLSBJZiBubyBpbWJhbGFuY2UgYW5kIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzIGJhbGFuY2UsCisgKgkJICAgcmV0dXJuIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgd2hvc2UgQ1BVcyBjYW4gYmUKKyAqCQkgICBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyBpdHMgdGFza3Mgb250byBvdXIgZ3JvdXAuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgogZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCiAJCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCiAJCSAgIGludCAqc2RfaWRsZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmJ1c2llc3QgPSBOVUxMLCAqdGhpcyA9IE5VTEwsICpncm91cCA9IHNkLT5ncm91cHM7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbG9hZCwgYXZnX2xvYWQsIHRvdGFsX2xvYWQsIHRoaXNfbG9hZCwgdG90YWxfcHdyOwotCXVuc2lnbmVkIGxvbmcgbWF4X3B1bGw7Ci0JdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2ssIGJ1c2llc3RfbnJfcnVubmluZzsKLQl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZF9wZXJfdGFzaywgdGhpc19ucl9ydW5uaW5nOwotCWludCBsb2FkX2lkeCwgZ3JvdXBfaW1iID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWludCBwb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOwotCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmcgPSAwLCBtaW5fbG9hZF9wZXJfdGFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbiA9IE5VTEwsICpncm91cF9sZWFkZXIgPSBOVUxMOwotI2VuZGlmCisJc3RydWN0IHNkX2xiX3N0YXRzIHNkczsKIAotCW1heF9sb2FkID0gdGhpc19sb2FkID0gdG90YWxfbG9hZCA9IHRvdGFsX3B3ciA9IDA7Ci0JYnVzaWVzdF9sb2FkX3Blcl90YXNrID0gYnVzaWVzdF9ucl9ydW5uaW5nID0gMDsKLQl0aGlzX2xvYWRfcGVyX3Rhc2sgPSB0aGlzX25yX3J1bm5pbmcgPSAwOworCW1lbXNldCgmc2RzLCAwLCBzaXplb2Yoc2RzKSk7CiAKLQlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUpCi0JCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OwotCWVsc2UgaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCi0JCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OwotCWVsc2UKLQkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7CisJLyoKKwkgKiBDb21wdXRlIHRoZSB2YXJpb3VzIHN0YXRpc3RpY3MgcmVsYXZlbnQgZm9yIGxvYWQgYmFsYW5jaW5nIGF0CisJICogdGhpcyBsZXZlbC4KKwkgKi8KKwl1cGRhdGVfc2RfbGJfc3RhdHMoc2QsIHRoaXNfY3B1LCBpZGxlLCBzZF9pZGxlLCBjcHVzLAorCQkJCQliYWxhbmNlLCAmc2RzKTsKIAotCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBsb2FkLCBncm91cF9jYXBhY2l0eSwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7Ci0JCWludCBsb2NhbF9ncm91cDsKLQkJaW50IGk7Ci0JCWludCBfX2dyb3VwX2ltYiA9IDA7Ci0JCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7Ci0JCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmcsIHN1bV93ZWlnaHRlZF9sb2FkOwotCQl1bnNpZ25lZCBsb25nIHN1bV9hdmdfbG9hZF9wZXJfdGFzazsKLQkJdW5zaWduZWQgbG9uZyBhdmdfbG9hZF9wZXJfdGFzazsKKwkvKiBDYXNlcyB3aGVyZSBpbWJhbGFuY2UgZG9lcyBub3QgZXhpc3QgZnJvbSBQT1Ygb2YgdGhpc19jcHUgKi8KKwkvKiAxKSB0aGlzX2NwdSBpcyBub3QgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nCisJICogICAgYXQgdGhpcyBsZXZlbC4KKwkgKiAyKSBUaGVyZSBpcyBubyBidXN5IHNpYmxpbmcgZ3JvdXAgdG8gcHVsbCBmcm9tLgorCSAqIDMpIFRoaXMgZ3JvdXAgaXMgdGhlIGJ1c2llc3QgZ3JvdXAuCisJICogNCkgVGhpcyBncm91cCBpcyBtb3JlIGJ1c3kgdGhhbiB0aGUgYXZnIGJ1c2llbmVzcyBhdCB0aGlzCisJICogICAgc2NoZWRfZG9tYWluLgorCSAqIDUpIFRoZSBpbWJhbGFuY2UgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQuCisJICogNikgQW55IHJlYmFsYW5jZSB3b3VsZCBsZWFkIHRvIHBpbmctcG9uZworCSAqLworCWlmIChiYWxhbmNlICYmICEoKmJhbGFuY2UpKQorCQlnb3RvIHJldDsKIAotCQlsb2NhbF9ncm91cCA9IGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCi0JCQkJCSAgICAgICBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Ci0KLQkJaWYgKGxvY2FsX2dyb3VwKQotCQkJYmFsYW5jZV9jcHUgPSBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLQotCQkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KLQkJc3VtX3dlaWdodGVkX2xvYWQgPSBzdW1fbnJfcnVubmluZyA9IGF2Z19sb2FkID0gMDsKLQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrID0gYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOwotCi0JCW1heF9jcHVfbG9hZCA9IDA7Ci0JCW1pbl9jcHVfbG9hZCA9IH4wVUw7Ci0KLQkJZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgewotCQkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKLQotCQkJaWYgKCpzZF9pZGxlICYmIHJxLT5ucl9ydW5uaW5nKQotCQkJCSpzZF9pZGxlID0gMDsKLQotCQkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLwotCQkJaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgewotCQkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7Ci0JCQkJCWJhbGFuY2VfY3B1ID0gaTsKLQkJCQl9Ci0KLQkJCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOwotCQkJfSBlbHNlIHsKLQkJCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOwotCQkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQotCQkJCQltYXhfY3B1X2xvYWQgPSBsb2FkOwotCQkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQotCQkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOwotCQkJfQotCi0JCQlhdmdfbG9hZCArPSBsb2FkOwotCQkJc3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7Ci0JCQlzdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOwotCi0JCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKz0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKGkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCi0JCSAqIGlzIGVsaWdpYmxlIGZvciBkb2luZyBsb2FkIGJhbGFuY2luZyBhdCB0aGlzIGFuZCBhYm92ZQotCQkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKLQkJICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgotCQkgKi8KLQkJaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKLQkJICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1ICYmIGJhbGFuY2UpIHsKLQkJCSpiYWxhbmNlID0gMDsKLQkJCWdvdG8gcmV0OwotCQl9Ci0KLQkJdG90YWxfbG9hZCArPSBhdmdfbG9hZDsKLQkJdG90YWxfcHdyICs9IGdyb3VwLT5fX2NwdV9wb3dlcjsKLQotCQkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCQlhdmdfbG9hZCA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCi0JCQkJYXZnX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKLQotCi0JCS8qCi0JCSAqIENvbnNpZGVyIHRoZSBncm91cCB1bmJhbGFuY2VkIHdoZW4gdGhlIGltYmFsYW5jZSBpcyBsYXJnZXIKLQkJICogdGhhbiB0aGUgYXZlcmFnZSB3ZWlnaHQgb2YgdHdvIHRhc2tzLgotCQkgKgotCQkgKiBBUFo6IHdpdGggY2dyb3VwIHRoZSBhdmcgdGFzayB3ZWlnaHQgY2FuIHZhcnkgd2lsZGx5IGFuZAotCQkgKiAgICAgIG1pZ2h0IG5vdCBiZSBhIHN1aXRhYmxlIG51bWJlciAtIHNob3VsZCB3ZSBrZWVwIGEKLQkJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKLQkJICogICAgICB0aGUgaGllcmFyY2h5PwotCQkgKi8KLQkJYXZnX2xvYWRfcGVyX3Rhc2sgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAotCQkJCXN1bV9hdmdfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOwotCi0JCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+IDIqYXZnX2xvYWRfcGVyX3Rhc2spCi0JCQlfX2dyb3VwX2ltYiA9IDE7Ci0KLQkJZ3JvdXBfY2FwYWNpdHkgPSBncm91cC0+X19jcHVfcG93ZXIgLyBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JCWlmIChsb2NhbF9ncm91cCkgewotCQkJdGhpc19sb2FkID0gYXZnX2xvYWQ7Ci0JCQl0aGlzID0gZ3JvdXA7Ci0JCQl0aGlzX25yX3J1bm5pbmcgPSBzdW1fbnJfcnVubmluZzsKLQkJCXRoaXNfbG9hZF9wZXJfdGFzayA9IHN1bV93ZWlnaHRlZF9sb2FkOwotCQl9IGVsc2UgaWYgKGF2Z19sb2FkID4gbWF4X2xvYWQgJiYKLQkJCSAgIChzdW1fbnJfcnVubmluZyA+IGdyb3VwX2NhcGFjaXR5IHx8IF9fZ3JvdXBfaW1iKSkgewotCQkJbWF4X2xvYWQgPSBhdmdfbG9hZDsKLQkJCWJ1c2llc3QgPSBncm91cDsKLQkJCWJ1c2llc3RfbnJfcnVubmluZyA9IHN1bV9ucl9ydW5uaW5nOwotCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCQlncm91cF9pbWIgPSBfX2dyb3VwX2ltYjsKLQkJfQotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQkJLyoKLQkJICogQnVzeSBwcm9jZXNzb3JzIHdpbGwgbm90IHBhcnRpY2lwYXRlIGluIHBvd2VyIHNhdmluZ3MKLQkJICogYmFsYW5jZS4KLQkJICovCi0JCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fAotCQkJCSEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQkJZ290byBncm91cF9uZXh0OwotCi0JCS8qCi0JCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCi0JCSAqIG5vIG5lZWQgdG8gZG8gcG93ZXIgc2F2aW5ncyBiYWxhbmNlIGF0IHRoaXMgZG9tYWluCi0JCSAqLwotCQlpZiAobG9jYWxfZ3JvdXAgJiYgKHRoaXNfbnJfcnVubmluZyA+PSBncm91cF9jYXBhY2l0eSB8fAotCQkJCSAgICAhdGhpc19ucl9ydW5uaW5nKSkKLQkJCXBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7Ci0KLQkJLyoKLQkJICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAotCQkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKLQkJICovCi0JCWlmICghcG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8IHN1bV9ucl9ydW5uaW5nID49IGdyb3VwX2NhcGFjaXR5Ci0JCSAgICB8fCAhc3VtX25yX3J1bm5pbmcpCi0JCQlnb3RvIGdyb3VwX25leHQ7Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBoYXMgdGhlIGxlYXN0IG5vbi1pZGxlIGxvYWQuCi0JCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCi0JCSAqIGZvciBzYXZpbmcgcG93ZXIKLQkJICovCi0JCWlmICgoc3VtX25yX3J1bm5pbmcgPCBtaW5fbnJfcnVubmluZykgfHwKLQkJICAgIChzdW1fbnJfcnVubmluZyA9PSBtaW5fbnJfcnVubmluZyAmJgotCQkgICAgIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpID4KLQkJICAgICBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbWluKSkpKSB7Ci0JCQlncm91cF9taW4gPSBncm91cDsKLQkJCW1pbl9ucl9ydW5uaW5nID0gc3VtX25yX3J1bm5pbmc7Ci0JCQltaW5fbG9hZF9wZXJfdGFzayA9IHN1bV93ZWlnaHRlZF9sb2FkIC8KLQkJCQkJCXN1bV9ucl9ydW5uaW5nOwotCQl9Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBpcyBhbG1vc3QgbmVhciBpdHMKLQkJICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCi0JCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgotCQkgKi8KLQkJaWYgKHN1bV9ucl9ydW5uaW5nIDw9IGdyb3VwX2NhcGFjaXR5IC0gMSkgewotCQkJaWYgKHN1bV9ucl9ydW5uaW5nID4gbGVhZGVyX25yX3J1bm5pbmcgfHwKLQkJCSAgICAoc3VtX25yX3J1bm5pbmcgPT0gbGVhZGVyX25yX3J1bm5pbmcgJiYKLQkJCSAgICAgY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgPAotCQkJICAgICBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbGVhZGVyKSkpKSB7Ci0JCQkJZ3JvdXBfbGVhZGVyID0gZ3JvdXA7Ci0JCQkJbGVhZGVyX25yX3J1bm5pbmcgPSBzdW1fbnJfcnVubmluZzsKLQkJCX0KLQkJfQotZ3JvdXBfbmV4dDoKLSNlbmRpZgotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOwotCi0JaWYgKCFidXNpZXN0IHx8IHRoaXNfbG9hZCA+PSBtYXhfbG9hZCB8fCBidXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKKwlpZiAoIXNkcy5idXNpZXN0IHx8IHNkcy5idXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKLQlhdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogdG90YWxfbG9hZCkgLyB0b3RhbF9wd3I7Ci0KLQlpZiAodGhpc19sb2FkID49IGF2Z19sb2FkIHx8Ci0JCQkxMDAqbWF4X2xvYWQgPD0gc2QtPmltYmFsYW5jZV9wY3QqdGhpc19sb2FkKQorCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5tYXhfbG9hZCkKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKLQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgLz0gYnVzaWVzdF9ucl9ydW5uaW5nOwotCWlmIChncm91cF9pbWIpCi0JCWJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IG1pbihidXNpZXN0X2xvYWRfcGVyX3Rhc2ssIGF2Z19sb2FkKTsKKwlzZHMuYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHNkcy50b3RhbF9sb2FkKSAvIHNkcy50b3RhbF9wd3I7CisKKwlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKDEwMCAqIHNkcy5tYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nOworCWlmIChzZHMuZ3JvdXBfaW1iKQorCQlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrID0KKwkJCW1pbihzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMuYXZnX2xvYWQpOwogCiAJLyoKIAkgKiBXZSdyZSB0cnlpbmcgdG8gZ2V0IGFsbCB0aGUgY3B1cyB0byB0aGUgYXZlcmFnZV9sb2FkLCBzbyB3ZSBkb24ndApAQCAtMzMwNiwxMDUgKzM3NjEsMjAgQEAKIAkgKiBieSBwdWxsaW5nIHRhc2tzIHRvIHVzLiBCZSBjYXJlZnVsIG9mIG5lZ2F0aXZlIG51bWJlcnMgYXMgdGhleSdsbAogCSAqIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcyB3aXRoIHVuc2lnbmVkIGxvbmdzLgogCSAqLwotCWlmIChtYXhfbG9hZCA8PSBidXNpZXN0X2xvYWRfcGVyX3Rhc2spCisJaWYgKHNkcy5tYXhfbG9hZCA8PSBzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAotCS8qCi0JICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKLQkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93Ci0JICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKLQkgKi8KLQlpZiAobWF4X2xvYWQgPCBhdmdfbG9hZCkgewotCQkqaW1iYWxhbmNlID0gMDsKLQkJZ290byBzbWFsbF9pbWJhbGFuY2U7Ci0JfQotCi0JLyogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUgKi8KLQltYXhfcHVsbCA9IG1pbihtYXhfbG9hZCAtIGF2Z19sb2FkLCBtYXhfbG9hZCAtIGJ1c2llc3RfbG9hZF9wZXJfdGFzayk7Ci0KLQkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLwotCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBidXNpZXN0LT5fX2NwdV9wb3dlciwKLQkJCQkoYXZnX2xvYWQgLSB0aGlzX2xvYWQpICogdGhpcy0+X19jcHVfcG93ZXIpCi0JCQkvIFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKgotCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKLQkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCi0JICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQotCSAqIG1vdmVkCi0JICovCi0JaWYgKCppbWJhbGFuY2UgPCBidXNpZXN0X2xvYWRfcGVyX3Rhc2spIHsKLQkJdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3csIHB3cl9tb3ZlOwotCQl1bnNpZ25lZCBpbnQgaW1ibjsKLQotc21hbGxfaW1iYWxhbmNlOgotCQlwd3JfbW92ZSA9IHB3cl9ub3cgPSAwOwotCQlpbWJuID0gMjsKLQkJaWYgKHRoaXNfbnJfcnVubmluZykgewotCQkJdGhpc19sb2FkX3Blcl90YXNrIC89IHRoaXNfbnJfcnVubmluZzsKLQkJCWlmIChidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPiB0aGlzX2xvYWRfcGVyX3Rhc2spCi0JCQkJaW1ibiA9IDE7Ci0JCX0gZWxzZQotCQkJdGhpc19sb2FkX3Blcl90YXNrID0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKLQotCQlpZiAobWF4X2xvYWQgLSB0aGlzX2xvYWQgKyBidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPj0KLQkJCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogaW1ibikgewotCQkJKmltYmFsYW5jZSA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQkJCXJldHVybiBidXNpZXN0OwotCQl9Ci0KLQkJLyoKLQkJICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKLQkJICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQotCQkgKiBtb3ZpbmcgdGhlbS4KLQkJICovCi0KLQkJcHdyX25vdyArPSBidXNpZXN0LT5fX2NwdV9wb3dlciAqCi0JCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQpOwotCQlwd3Jfbm93ICs9IHRoaXMtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQpOwotCQlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLwotCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKGJ1c2llc3QsCi0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCWlmIChtYXhfbG9hZCA+IHRtcCkKLQkJCXB3cl9tb3ZlICs9IGJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4oYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBtYXhfbG9hZCAtIHRtcCk7Ci0KLQkJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KLQkJaWYgKG1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIgPAotCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCi0JCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCi0JCQkJCW1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIpOwotCQllbHNlCi0JCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCi0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCXB3cl9tb3ZlICs9IHRoaXMtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQgKyB0bXApOwotCQlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCi0JCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCi0JCQkqaW1iYWxhbmNlID0gYnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCX0KLQotCXJldHVybiBidXNpZXN0OworCS8qIExvb2tzIGxpa2UgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBDb21wdXRlIGl0ICovCisJY2FsY3VsYXRlX2ltYmFsYW5jZSgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKwlyZXR1cm4gc2RzLmJ1c2llc3Q7CiAKIG91dF9iYWxhbmNlZDoKLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJZ290byByZXQ7Ci0KLQlpZiAodGhpcyA9PSBncm91cF9sZWFkZXIgJiYgZ3JvdXBfbGVhZGVyICE9IGdyb3VwX21pbikgewotCQkqaW1iYWxhbmNlID0gbWluX2xvYWRfcGVyX3Rhc2s7Ci0JCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzID49IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkgewotCQkJY3B1X3JxKHRoaXNfY3B1KS0+cmQtPnNjaGVkX21jX3ByZWZlcnJlZF93YWtldXBfY3B1ID0KLQkJCQljcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbGVhZGVyKSk7Ci0JCX0KLQkJcmV0dXJuIGdyb3VwX21pbjsKLQl9Ci0jZW5kaWYKKwkvKgorCSAqIFRoZXJlIGlzIG5vIG9idmlvdXMgaW1iYWxhbmNlLiBCdXQgY2hlY2sgaWYgd2UgY2FuIGRvIHNvbWUgYmFsYW5jaW5nCisJICogdG8gc2F2ZSBwb3dlci4KKwkgKi8KKwlpZiAoY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQorCQlyZXR1cm4gc2RzLmJ1c2llc3Q7CiByZXQ6CiAJKmltYmFsYW5jZSA9IDA7CiAJcmV0dXJuIE5VTEw7CkBAIC00MDU3LDYgKzQ0MjcsMTEgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQoreworCXJldHVybiAhcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7Cit9CisKIC8qCiAgKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCiAgKgpAQCAtNDExNCw3ICs0NDg5LDkgQEAKIAkgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQogCQlyZXR1cm47CiAjZW5kaWYKLQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSkKKwkvKiBEb24ndCBuZWVkIHRvIHJlYmFsYW5jZSB3aGlsZSBhdHRhY2hlZCB0byBOVUxMIGRvbWFpbiAqLworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpICYmCisJICAgIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCiAJCXJhaXNlX3NvZnRpcnEoU0NIRURfU09GVElSUSk7CiB9CiAKQEAgLTQ1MDgsMTEgKzQ4ODUsMzMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3sKKwlpZiAocHJldi0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKSB7CisJCXU2NCBydW50aW1lID0gcHJldi0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKworCQlydW50aW1lIC09IHByZXYtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZTsKKwkJcnVudGltZSA9IG1pbl90KHU2NCwgcnVudGltZSwgMipzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpOworCisJCS8qCisJCSAqIEluIG9yZGVyIHRvIGF2b2lkIGF2Z19vdmVybGFwIGdyb3dpbmcgc3RhbGUgd2hlbiB3ZSBhcmUKKwkJICogaW5kZWVkIG92ZXJsYXBwaW5nIGFuZCBoZW5jZSBub3QgZ2V0dGluZyBwdXQgdG8gc2xlZXAsIGdyb3cKKwkJICogdGhlIGF2Z19vdmVybGFwIG9uIHByZWVtcHRpb24uCisJCSAqCisJCSAqIFdlIHVzZSB0aGUgYXZlcmFnZSBwcmVlbXB0aW9uIHJ1bnRpbWUgYmVjYXVzZSB0aGF0CisJCSAqIGNvcnJlbGF0ZXMgdG8gdGhlIGFtb3VudCBvZiBjYWNoZSBmb290cHJpbnQgYSB0YXNrIGNhbgorCQkgKiBidWlsZCB1cC4KKwkJICovCisJCXVwZGF0ZV9hdmcoJnByZXYtPnNlLmF2Z19vdmVybGFwLCBydW50aW1lKTsKKwl9CisJcHJldi0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHByZXYpOworfQorCiAvKgogICogUGljayB1cCB0aGUgaGlnaGVzdC1wcmlvIHRhc2s6CiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICoKLXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3BpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEpCiB7CiAJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzczsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC00NTg2LDggKzQ5ODUsOCBAQAogCWlmICh1bmxpa2VseSghcnEtPm5yX3J1bm5pbmcpKQogCQlpZGxlX2JhbGFuY2UoY3B1LCBycSk7CiAKLQlwcmV2LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgcHJldik7Ci0JbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxLCBwcmV2KTsKKwlwdXRfcHJldl90YXNrKHJxLCBwcmV2KTsKKwluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwpAQCAtNDY0Miw3ICs1MDQxLDcgQEAKIAkJICogYmV0d2VlbiBzY2hlZHVsZSBhbmQgbm93LgogCQkgKi8KIAkJYmFycmllcigpOwotCX0gd2hpbGUgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKTsKKwl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHByZWVtcHRfc2NoZWR1bGUpOwogCkBAIC00NjcxLDcgKzUwNzAsNyBAQAogCQkgKiBiZXR3ZWVuIHNjaGVkdWxlIGFuZCBub3cuCiAJCSAqLwogCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpOworCX0gd2hpbGUgKG5lZWRfcmVzY2hlZCgpKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCkBAIC01MTQ1LDcgKzU1NDQsNyBAQAogCWlmIChpbmNyZW1lbnQgPiA0MCkKIAkJaW5jcmVtZW50ID0gNDA7CiAKLQluaWNlID0gUFJJT19UT19OSUNFKGN1cnJlbnQtPnN0YXRpY19wcmlvKSArIGluY3JlbWVudDsKKwluaWNlID0gVEFTS19OSUNFKGN1cnJlbnQpICsgaW5jcmVtZW50OwogCWlmIChuaWNlIDwgLTIwKQogCQluaWNlID0gLTIwOwogCWlmIChuaWNlID4gMTkpCkBAIC01OTQ0LDEyICs2MzQzLDcgQEAKIAkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMTZseCAiLCB0aHJlYWRfc2F2ZWRfcGMocCkpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0JewotCQl1bnNpZ25lZCBsb25nICpuID0gZW5kX29mX3N0YWNrKHApOwotCQl3aGlsZSAoISpuKQotCQkJbisrOwotCQlmcmVlID0gKHVuc2lnbmVkIGxvbmcpbiAtICh1bnNpZ25lZCBsb25nKWVuZF9vZl9zdGFjayhwKTsKLQl9CisJZnJlZSA9IHN0YWNrX25vdF91c2VkKHApOwogI2VuZGlmCiAJcHJpbnRrKEtFUk5fQ09OVCAiJTVsdSAlNWQgJTZkXG4iLCBmcmVlLAogCQl0YXNrX3BpZF9ucihwKSwgdGFza19waWRfbnIocC0+cmVhbF9wYXJlbnQpKTsKQEAgLTY0MjMsNyArNjgxNyw3IEBACiAJCWlmICghcnEtPm5yX3J1bm5pbmcpCiAJCQlicmVhazsKIAkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQkJbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxLCBycS0+Y3Vycik7CisJCW5leHQgPSBwaWNrX25leHRfdGFzayhycSk7CiAJCWlmICghbmV4dCkKIAkJCWJyZWFrOwogCQluZXh0LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgbmV4dCk7CkBAIC04MjE4LDExICs4NjEyLDE1IEBACiAJX19zZXRfYml0KE1BWF9SVF9QUklPLCBhcnJheS0+Yml0bWFwKTsKIAogI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPSBNQVhfUlRfUFJJTzsKKwlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPSBNQVhfUlRfUFJJTzsKKyNpZmRlZiBDT05GSUdfU01QCisJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gTUFYX1JUX1BSSU87CisjZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTVAKIAlydF9ycS0+cnRfbnJfbWlncmF0b3J5ID0gMDsKIAlydF9ycS0+b3ZlcmxvYWRlZCA9IDA7CisJcGxpc3RfaGVhZF9pbml0KCZycS0+cnQucHVzaGFibGVfdGFza3MsICZycS0+bG9jayk7CiAjZW5kaWYKIAogCXJ0X3JxLT5ydF90aW1lID0gMDsKQEAgLTk0OTAsNyArOTg4OCw3IEBACiAKIHN0YXRpYyB1NjQgY3B1YWNjdF9jcHV1c2FnZV9yZWFkKHN0cnVjdCBjcHVhY2N0ICpjYSwgaW50IGNwdSkKIHsKLQl1NjQgKmNwdXVzYWdlID0gcGVyY3B1X3B0cihjYS0+Y3B1dXNhZ2UsIGNwdSk7CisJdTY0ICpjcHV1c2FnZSA9IHBlcl9jcHVfcHRyKGNhLT5jcHV1c2FnZSwgY3B1KTsKIAl1NjQgZGF0YTsKIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKQEAgLTk1MDksNyArOTkwNyw3IEBACiAKIHN0YXRpYyB2b2lkIGNwdWFjY3RfY3B1dXNhZ2Vfd3JpdGUoc3RydWN0IGNwdWFjY3QgKmNhLCBpbnQgY3B1LCB1NjQgdmFsKQogewotCXU2NCAqY3B1dXNhZ2UgPSBwZXJjcHVfcHRyKGNhLT5jcHV1c2FnZSwgY3B1KTsKKwl1NjQgKmNwdXVzYWdlID0gcGVyX2NwdV9wdHIoY2EtPmNwdXVzYWdlLCBjcHUpOwogCiAjaWZuZGVmIENPTkZJR182NEJJVAogCS8qCkBAIC05NTk4LDE0ICs5OTk2LDE0IEBACiAJc3RydWN0IGNwdWFjY3QgKmNhOwogCWludCBjcHU7CiAKLQlpZiAoIWNwdWFjY3Rfc3Vic3lzLmFjdGl2ZSkKKwlpZiAodW5saWtlbHkoIWNwdWFjY3Rfc3Vic3lzLmFjdGl2ZSkpCiAJCXJldHVybjsKIAogCWNwdSA9IHRhc2tfY3B1KHRzayk7CiAJY2EgPSB0YXNrX2NhKHRzayk7CiAKIAlmb3IgKDsgY2E7IGNhID0gY2EtPnBhcmVudCkgewotCQl1NjQgKmNwdXVzYWdlID0gcGVyY3B1X3B0cihjYS0+Y3B1dXNhZ2UsIGNwdSk7CisJCXU2NCAqY3B1dXNhZ2UgPSBwZXJfY3B1X3B0cihjYS0+Y3B1dXNhZ2UsIGNwdSk7CiAJCSpjcHV1c2FnZSArPSBjcHV0aW1lOwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggYTBiMDg1Mi4uMzkwZjMzMiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTI0LDExICsyNCwxMSBAQAogICogVGhlIGNsb2NrOiBzY2hlZF9jbG9ja19jcHUoKSBpcyBtb25vdG9uaWMgcGVyIGNwdSwgYW5kIHNob3VsZCBiZSBzb21ld2hhdAogICogY29uc2lzdGVudCBiZXR3ZWVuIGNwdXMgKG5ldmVyIG1vcmUgdGhhbiAyIGppZmZpZXMgZGlmZmVyZW5jZSkuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgpAQCAtNDMsNiArNDMsNyBAQAogc3RhdGljIF9fcmVhZF9tb3N0bHkgaW50IHNjaGVkX2Nsb2NrX3J1bm5pbmc7CiAKICNpZmRlZiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSworX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOwogCiBzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSB7CiAJLyoKQEAgLTg3LDcgKzg4LDcgQEAKIH0KIAogLyoKLSAqIG1pbixtYXggZXhjZXB0IHRoZXkgdGFrZSB3cmFwcGluZyBpbnRvIGFjY291bnQKKyAqIG1pbiwgbWF4IGV4Y2VwdCB0aGV5IHRha2Ugd3JhcHBpbmcgaW50byBhY2NvdW50CiAgKi8KIAogc3RhdGljIGlubGluZSB1NjQgd3JhcF9taW4odTY0IHgsIHU2NCB5KQpAQCAtMTExLDE1ICsxMTIsMTMgQEAKIAlzNjQgZGVsdGEgPSBub3cgLSBzY2QtPnRpY2tfcmF3OwogCXU2NCBjbG9jaywgbWluX2Nsb2NrLCBtYXhfY2xvY2s7CiAKLQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7Ci0KIAlpZiAodW5saWtlbHkoZGVsdGEgPCAwKSkKIAkJZGVsdGEgPSAwOwogCiAJLyoKIAkgKiBzY2QtPmNsb2NrID0gY2xhbXAoc2NkLT50aWNrX2d0b2QgKyBkZWx0YSwKLQkgKiAJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCi0JICogCQkgICAgICBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CisJICoJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCisJICoJCSAgICAgIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKIAkgKi8KIAogCWNsb2NrID0gc2NkLT50aWNrX2d0b2QgKyBkZWx0YTsKQEAgLTE0OCwxMiArMTQ3LDEzIEBACiAKIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkID0gY3B1X3NkYyhjcHUpOwogCXU2NCBub3csIGNsb2NrLCB0aGlzX2Nsb2NrLCByZW1vdGVfY2xvY2s7CisJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZDsKIAotCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCi0JCXJldHVybiAwdWxsOworCWlmIChzY2hlZF9jbG9ja19zdGFibGUpCisJCXJldHVybiBzY2hlZF9jbG9jaygpOwogCisJc2NkID0gY3B1X3NkYyhjcHUpOwogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAlub3cgPSBzY2hlZF9jbG9jaygpOwogCkBAIC0xOTUsMTQgKzE5NSwxOCBAQAogCiB2b2lkIHNjaGVkX2Nsb2NrX3RpY2sodm9pZCkKIHsKLQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkID0gdGhpc19zY2QoKTsKKwlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkOwogCXU2NCBub3csIG5vd19ndG9kOwogCisJaWYgKHNjaGVkX2Nsb2NrX3N0YWJsZSkKKwkJcmV0dXJuOworCiAJaWYgKHVubGlrZWx5KCFzY2hlZF9jbG9ja19ydW5uaW5nKSkKIAkJcmV0dXJuOwogCiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCisJc2NkID0gdGhpc19zY2QoKTsKIAlub3dfZ3RvZCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlub3cgPSBzY2hlZF9jbG9jaygpOwogCkBAIC0yNTAsNyArMjU0LDcgQEAKIAlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KIAogdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2RlYnVnLmMgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwppbmRleCAxNmVlYmE0ZS4uNDY3Y2E3MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTI3Miw3ICsyNzIsNiBAQAogCVAobnJfc3dpdGNoZXMpOwogCVAobnJfbG9hZF91cGRhdGVzKTsKIAlQKG5yX3VuaW50ZXJydXB0aWJsZSk7Ci0JU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgImppZmZpZXMiLCBqaWZmaWVzKTsKIAlQTihuZXh0X2JhbGFuY2UpOwogCVAoY3Vyci0+cGlkKTsKIAlQTihjbG9jayk7CkBAIC0yODcsOSArMjg2LDYgQEAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogI2RlZmluZSBQKG4pIFNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlZFxuIiwgI24sIHJxLT5uKTsKIAotCVAoeWxkX2V4cF9lbXB0eSk7Ci0JUCh5bGRfYWN0X2VtcHR5KTsKLQlQKHlsZF9ib3RoX2VtcHR5KTsKIAlQKHlsZF9jb3VudCk7CiAKIAlQKHNjaGVkX3N3aXRjaCk7CkBAIC0zMTQsNyArMzEwLDcgQEAKIAl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCWludCBjcHU7CiAKLQlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOCwgJXMgJS4qc1xuIiwKKwlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOSwgJXMgJS4qc1xuIiwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKIAkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwpAQCAtMzI1LDYgKzMyMSw3IEBACiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZFxuIiwgI3gsIChsb25nIGxvbmcpKHgpKQogI2RlZmluZSBQTih4KSBcCiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZC4lMDZsZFxuIiwgI3gsIFNQTElUX05TKHgpKQorCVAoamlmZmllcyk7CiAJUE4oc3lzY3RsX3NjaGVkX2xhdGVuY3kpOwogCVBOKHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkpOwogCVBOKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOwpAQCAtMzk3LDYgKzM5NCw3IEBACiAJUE4oc2UudnJ1bnRpbWUpOwogCVBOKHNlLnN1bV9leGVjX3J1bnRpbWUpOwogCVBOKHNlLmF2Z19vdmVybGFwKTsKKwlQTihzZS5hdmdfd2FrZXVwKTsKIAogCW5yX3N3aXRjaGVzID0gcC0+bnZjc3cgKyBwLT5uaXZjc3c7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDA1NjZmMmEuLjM4MTZmMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMTMxNCwxNiArMTMxNCw2MyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd2FrZXVwX2dyYW4oc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCisvKgorICogQWRhcHRpdmUgZ3JhbnVsYXJpdHkKKyAqCisgKiBzZS0+YXZnX3dha2V1cCBnaXZlcyB0aGUgYXZlcmFnZSB0aW1lIGEgdGFzayBydW5zIHVudGlsIGl0IGRvZXMgYSB3YWtldXAsCisgKiB3aXRoIHRoZSBsaW1pdCBvZiB3YWtldXBfZ3JhbiAtLSB3aGVuIGl0IG5ldmVyIGRvZXMgYSB3YWtldXAuCisgKgorICogU28gdGhlIHNtYWxsZXIgYXZnX3dha2V1cCBpcyB0aGUgZmFzdGVyIHdlIHdhbnQgdGhpcyB0YXNrIHRvIHByZWVtcHQsCisgKiBidXQgd2UgZG9uJ3Qgd2FudCB0byB0cmVhdCB0aGUgcHJlZW1wdGVlIHVuZmFpcmx5IGFuZCB0aGVyZWZvcmUgYWxsb3cgaXQKKyAqIHRvIHJ1biBmb3IgYXQgbGVhc3QgdGhlIGFtb3VudCBvZiB0aW1lIHdlJ2QgbGlrZSB0byBydW4uCisgKgorICogTk9URTogd2UgdXNlIDIqYXZnX3dha2V1cCB0byBpbmNyZWFzZSB0aGUgcHJvYmFiaWxpdHkgb2YgYWN0dWFsbHkgZG9pbmcgb25lCisgKgorICogTk9URTogd2UgdXNlICpucl9ydW5uaW5nIHRvIHNjYWxlIHdpdGggbG9hZCwgdGhpcyBuaWNlbHkgbWF0Y2hlcyB0aGUKKyAqICAgICAgIGRlZ3JhZGluZyBsYXRlbmN5IG9uIGxvYWQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCithZGFwdGl2ZV9ncmFuKHN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnIsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCXU2NCB0aGlzX3J1biA9IGN1cnItPnN1bV9leGVjX3J1bnRpbWUgLSBjdXJyLT5wcmV2X3N1bV9leGVjX3J1bnRpbWU7CisJdTY0IGV4cGVjdGVkX3dha2V1cCA9IDIqc2UtPmF2Z193YWtldXAgKiBjZnNfcnFfb2Yoc2UpLT5ucl9ydW5uaW5nOworCXU2NCBncmFuID0gMDsKKworCWlmICh0aGlzX3J1biA8IGV4cGVjdGVkX3dha2V1cCkKKwkJZ3JhbiA9IGV4cGVjdGVkX3dha2V1cCAtIHRoaXNfcnVuOworCisJcmV0dXJuIG1pbl90KHM2NCwgZ3Jhbiwgc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCit3YWtldXBfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGdyYW4gPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwogCisJaWYgKGNmc19ycV9vZihjdXJyKS0+Y3VyciAmJiBzY2hlZF9mZWF0KEFEQVBUSVZFX0dSQU4pKQorCQlncmFuID0gYWRhcHRpdmVfZ3JhbihjdXJyLCBzZSk7CisKIAkvKgotCSAqIE1vcmUgZWFzaWx5IHByZWVtcHQgLSBuaWNlIHRhc2tzLCB3aGlsZSBub3QgbWFraW5nIGl0IGhhcmRlciBmb3IKLQkgKiArIG5pY2UgdGFza3MuCisJICogU2luY2UgaXRzIGN1cnIgcnVubmluZyBub3csIGNvbnZlcnQgdGhlIGdyYW4gZnJvbSByZWFsLXRpbWUKKwkgKiB0byB2aXJ0dWFsLXRpbWUgaW4gaGlzIHVuaXRzLgogCSAqLwotCWlmICghc2NoZWRfZmVhdChBU1lNX0dSQU4pIHx8IHNlLT5sb2FkLndlaWdodCA+IE5JQ0VfMF9MT0FEKQotCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHksIHNlKTsKKwlpZiAoc2NoZWRfZmVhdChBU1lNX0dSQU4pKSB7CisJCS8qCisJCSAqIEJ5IHVzaW5nICdzZScgaW5zdGVhZCBvZiAnY3Vycicgd2UgcGVuYWxpemUgbGlnaHQgdGFza3MsIHNvCisJCSAqIHRoZXkgZ2V0IHByZWVtcHRlZCBlYXNpZXIuIFRoYXQgaXMsIGlmICdzZScgPCAnY3VycicgdGhlbgorCQkgKiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbCBiZSBsYXJnZXIsIHRoZXJlZm9yZSBwZW5hbGl6aW5nIHRoZQorCQkgKiBsaWdodGVyLCBpZiBvdG9oICdzZScgPiAnY3VycicgdGhlbiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbAorCQkgKiBiZSBzbWFsbGVyLCBhZ2FpbiBwZW5hbGl6aW5nIHRoZSBsaWdodGVyIHRhc2suCisJCSAqCisJCSAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGJ1ZGRpZXMgd2hlbiB0aGUgbGVmdG1vc3QKKwkJICogdGFzayBpcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgYnVkZHkuCisJCSAqLworCQlpZiAodW5saWtlbHkoc2UtPmxvYWQud2VpZ2h0ICE9IE5JQ0VfMF9MT0FEKSkKKwkJCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoZ3Jhbiwgc2UpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShjdXJyLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCisJCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKGdyYW4sIGN1cnIpOworCX0KIAogCXJldHVybiBncmFuOwogfQpAQCAtMTM1MCw3ICsxMzk3LDcgQEAKIAlpZiAodmRpZmYgPD0gMCkKIAkJcmV0dXJuIC0xOwogCi0JZ3JhbiA9IHdha2V1cF9ncmFuKGN1cnIpOworCWdyYW4gPSB3YWtldXBfZ3JhbihjdXJyLCBzZSk7CiAJaWYgKHZkaWZmID4gZ3JhbikKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKaW5kZXggZGE1ZDkzYi4uNzZmNjE3NSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKKysrIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKQEAgLTEsNSArMSw2IEBACiBTQ0hFRF9GRUFUKE5FV19GQUlSX1NMRUVQRVJTLCAxKQotU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDEpCitTQ0hFRF9GRUFUKE5PUk1BTElaRURfU0xFRVBFUiwgMCkKK1NDSEVEX0ZFQVQoQURBUFRJVkVfR1JBTiwgMSkKIFNDSEVEX0ZFQVQoV0FLRVVQX1BSRUVNUFQsIDEpCiBTQ0hFRF9GRUFUKFNUQVJUX0RFQklULCAxKQogU0NIRURfRkVBVChBRkZJTkVfV0FLRVVQUywgMSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYmFjMTA2MS4uMjk5ZDAxMiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTMsNiArMyw0MCBAQAogICogcG9saWNpZXMpCiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIHJ0X3JxLT5ycTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXJldHVybiBydF9zZS0+cnRfcnE7Cit9CisKKyNlbHNlIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3JxLCBzdHJ1Y3QgcnEsIHJ0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJ0X3Rhc2tfb2YocnRfc2UpOworCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOworCisJcmV0dXJuICZycS0+cnQ7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKwogI2lmZGVmIENPTkZJR19TTVAKIAogc3RhdGljIGlubGluZSBpbnQgcnRfb3ZlcmxvYWRlZChzdHJ1Y3QgcnEgKnJxKQpAQCAtMzcsMjUgKzcxLDY5IEBACiAJY3B1bWFza19jbGVhcl9jcHUocnEtPmNwdSwgcnEtPnJkLT5ydG9fbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9ydF9taWdyYXRpb24oc3RydWN0IHJxICpycSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ydF9taWdyYXRpb24oc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlpZiAocnEtPnJ0LnJ0X25yX21pZ3JhdG9yeSAmJiAocnEtPnJ0LnJ0X25yX3J1bm5pbmcgPiAxKSkgewotCQlpZiAoIXJxLT5ydC5vdmVybG9hZGVkKSB7Ci0JCQlydF9zZXRfb3ZlcmxvYWQocnEpOwotCQkJcnEtPnJ0Lm92ZXJsb2FkZWQgPSAxOworCWlmIChydF9ycS0+cnRfbnJfbWlncmF0b3J5ICYmIChydF9ycS0+cnRfbnJfcnVubmluZyA+IDEpKSB7CisJCWlmICghcnRfcnEtPm92ZXJsb2FkZWQpIHsKKwkJCXJ0X3NldF9vdmVybG9hZChycV9vZl9ydF9ycShydF9ycSkpOworCQkJcnRfcnEtPm92ZXJsb2FkZWQgPSAxOwogCQl9Ci0JfSBlbHNlIGlmIChycS0+cnQub3ZlcmxvYWRlZCkgewotCQlydF9jbGVhcl9vdmVybG9hZChycSk7Ci0JCXJxLT5ydC5vdmVybG9hZGVkID0gMDsKKwl9IGVsc2UgaWYgKHJ0X3JxLT5vdmVybG9hZGVkKSB7CisJCXJ0X2NsZWFyX292ZXJsb2FkKHJxX29mX3J0X3JxKHJ0X3JxKSk7CisJCXJ0X3JxLT5vdmVybG9hZGVkID0gMDsKIAl9CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3N0YXRpYyB2b2lkIGluY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7CisJaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQlydF9ycS0+cnRfbnJfbWlncmF0b3J5Kys7CisKKwl1cGRhdGVfcnRfbWlncmF0aW9uKHJ0X3JxKTsKIH0KIAorc3RhdGljIHZvaWQgZGVjX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCXJ0X3JxLT5ydF9ucl9taWdyYXRvcnktLTsKKworCXVwZGF0ZV9ydF9taWdyYXRpb24ocnRfcnEpOworfQorCitzdGF0aWMgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXBsaXN0X2RlbCgmcC0+cHVzaGFibGVfdGFza3MsICZycS0+cnQucHVzaGFibGVfdGFza3MpOworCXBsaXN0X25vZGVfaW5pdCgmcC0+cHVzaGFibGVfdGFza3MsIHAtPnByaW8pOworCXBsaXN0X2FkZCgmcC0+cHVzaGFibGVfdGFza3MsICZycS0+cnQucHVzaGFibGVfdGFza3MpOworfQorCitzdGF0aWMgdm9pZCBkZXF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXBsaXN0X2RlbCgmcC0+cHVzaGFibGVfdGFza3MsICZycS0+cnQucHVzaGFibGVfdGFza3MpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlcXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgaW5jX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKworc3RhdGljIGlubGluZQordm9pZCBkZWNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCiBzdGF0aWMgaW5saW5lIGludCBvbl9ydF9ycShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKIAlyZXR1cm4gIWxpc3RfZW1wdHkoJnJ0X3NlLT5ydW5fbGlzdCk7CkBAIC03OSwxNiArMTU3LDYgQEAKICNkZWZpbmUgZm9yX2VhY2hfbGVhZl9ydF9ycShydF9ycSwgcnEpIFwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShydF9ycSwgJnJxLT5sZWFmX3J0X3JxX2xpc3QsIGxlYWZfcnRfcnFfbGlzdCkKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCi17Ci0JcmV0dXJuIHJ0X3JxLT5ycTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQotewotCXJldHVybiBydF9zZS0+cnRfcnE7Ci19Ci0KICNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSBcCiAJZm9yICg7IHJ0X3NlOyBydF9zZSA9IHJ0X3NlLT5wYXJlbnQpCiAKQEAgLTEwOCw3ICsxNzYsNyBAQAogCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgewogCQlpZiAocnRfc2UgJiYgIW9uX3J0X3JxKHJ0X3NlKSkKIAkJCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKLQkJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8gPCBjdXJyLT5wcmlvKQorCQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyIDwgY3Vyci0+cHJpbykKIAkJCXJlc2NoZWRfdGFzayhjdXJyKTsKIAl9CiB9CkBAIC0xNzYsMTkgKzI0NCw2IEBACiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSBcCiAJZm9yIChydF9ycSA9ICZycS0+cnQ7IHJ0X3JxOyBydF9ycSA9IE5VTEwpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQotewotCXJldHVybiBjb250YWluZXJfb2YocnRfcnEsIHN0cnVjdCBycSwgcnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcnRfdGFza19vZihydF9zZSk7Ci0Jc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7Ci0KLQlyZXR1cm4gJnJxLT5ydDsKLX0KLQogI2RlZmluZSBmb3JfZWFjaF9zY2hlZF9ydF9lbnRpdHkocnRfc2UpIFwKIAlmb3IgKDsgcnRfc2U7IHJ0X3NlID0gTlVMTCkKIApAQCAtNDczLDcgKzUyOCw3IEBACiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IGdyb3VwX3J0X3JxKHJ0X3NlKTsKIAogCWlmIChydF9ycSkKLQkJcmV0dXJuIHJ0X3JxLT5oaWdoZXN0X3ByaW87CisJCXJldHVybiBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CiAjZW5kaWYKIAogCXJldHVybiBydF90YXNrX29mKHJ0X3NlKS0+cHJpbzsKQEAgLTU0Nyw5MSArNjAyLDE3NCBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZQotdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCisjaWYgZGVmaW5lZCBDT05GSUdfU01QCisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQoc3RydWN0IHJxICpycSwgaW50IGNwdSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5leHRfcHJpbyhzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTsKLQlydF9ycS0+cnRfbnJfcnVubmluZysrOwotI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWlmIChydF9zZV9wcmlvKHJ0X3NlKSA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8pIHsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7Ci0jZW5kaWYKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQgPSBwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHJxLCBycS0+Y3B1KTsKIAotCQlydF9ycS0+aGlnaGVzdF9wcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7Ci0jaWZkZWYgQ09ORklHX1NNUAorCWlmIChuZXh0ICYmIHJ0X3ByaW8obmV4dC0+cHJpbykpCisJCXJldHVybiBuZXh0LT5wcmlvOworCWVsc2UKKwkJcmV0dXJuIE1BWF9SVF9QUklPOworfQorCitzdGF0aWMgdm9pZAoraW5jX3J0X3ByaW9fc21wKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKQoreworCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7CisKKwlpZiAocHJpbyA8IHByZXZfcHJpbykgeworCisJCS8qCisJCSAqIElmIHRoZSBuZXcgdGFzayBpcyBoaWdoZXIgaW4gcHJpb3JpdHkgdGhhbiBhbnl0aGluZyBvbiB0aGUKKwkJICogcnVuLXF1ZXVlLCB3ZSBrbm93IHRoYXQgdGhlIHByZXZpb3VzIGhpZ2ggYmVjb21lcyBvdXIKKwkJICogbmV4dC1oaWdoZXN0LgorCQkgKi8KKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gcHJldl9wcmlvOworCiAJCWlmIChycS0+b25saW5lKQotCQkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsCi0JCQkJICAgcnRfc2VfcHJpbyhydF9zZSkpOwotI2VuZGlmCi0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkgewotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCQkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHByaW8pOwogCi0JCXJxLT5ydC5ydF9ucl9taWdyYXRvcnkrKzsKLQl9CisJfSBlbHNlIGlmIChwcmlvID09IHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycikKKwkJLyoKKwkJICogSWYgdGhlIG5leHQgdGFzayBpcyBlcXVhbCBpbiBwcmlvcml0eSB0byB0aGUgaGlnaGVzdCBvbgorCQkgKiB0aGUgcnVuLXF1ZXVlLCB0aGVuIHdlIGltcGxpY2l0bHkga25vdyB0aGF0IHRoZSBuZXh0IGhpZ2hlc3QKKwkJICogdGFzayBjYW5ub3QgYmUgYW55IGxvd2VyIHRoYW4gY3VycmVudAorCQkgKi8KKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gcHJpbzsKKwllbHNlIGlmIChwcmlvIDwgcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0KQorCQkvKgorCQkgKiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gcmVjb21wdXRlIG5leHQtaGlnaGVzdAorCQkgKi8KKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gbmV4dF9wcmlvKHJxKTsKK30KIAotCXVwZGF0ZV9ydF9taWdyYXRpb24ocnFfb2ZfcnRfcnEocnRfcnEpKTsKLSNlbmRpZgorc3RhdGljIHZvaWQKK2RlY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCisJaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIChwcmlvIDw9IHJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCkpCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IG5leHRfcHJpbyhycSk7CisKKwlpZiAocnEtPm9ubGluZSAmJiBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgIT0gcHJldl9wcmlvKQorCQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykge30KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X3ByaW9fc21wKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECitzdGF0aWMgdm9pZAoraW5jX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCit7CisJaW50IHByZXZfcHJpbyA9IHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycjsKKworCWlmIChwcmlvIDwgcHJldl9wcmlvKQorCQlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPSBwcmlvOworCisJaW5jX3J0X3ByaW9fc21wKHJ0X3JxLCBwcmlvLCBwcmV2X3ByaW8pOworfQorCitzdGF0aWMgdm9pZAorZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCit7CisJaW50IHByZXZfcHJpbyA9IHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycjsKKworCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgeworCisJCVdBUk5fT04ocHJpbyA8IHByZXZfcHJpbyk7CisKKwkJLyoKKwkJICogVGhpcyBtYXkgaGF2ZSBiZWVuIG91ciBoaWdoZXN0IHRhc2ssIGFuZCB0aGVyZWZvcmUKKwkJICogd2UgbWF5IGhhdmUgc29tZSByZWNvbXB1dGF0aW9uIHRvIGRvCisJCSAqLworCQlpZiAocHJpbyA9PSBwcmV2X3ByaW8pIHsKKwkJCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheSA9ICZydF9ycS0+YWN0aXZlOworCisJCQlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPQorCQkJCXNjaGVkX2ZpbmRfZmlyc3RfYml0KGFycmF5LT5iaXRtYXApOworCQl9CisKKwl9IGVsc2UKKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gTUFYX1JUX1BSSU87CisKKwlkZWNfcnRfcHJpb19zbXAocnRfcnEsIHByaW8sIHByZXZfcHJpbyk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbykge30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgfHwgQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKKworc3RhdGljIHZvaWQKK2luY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKIAlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCiAJCXJ0X3JxLT5ydF9ucl9ib29zdGVkKys7CiAKIAlpZiAocnRfcnEtPnRnKQogCQlzdGFydF9ydF9iYW5kd2lkdGgoJnJ0X3JxLT50Zy0+cnRfYmFuZHdpZHRoKTsKLSNlbHNlCit9CisKK3N0YXRpYyB2b2lkCitkZWNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQorCQlydF9ycS0+cnRfbnJfYm9vc3RlZC0tOworCisJV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgcnRfcnEtPnJ0X25yX2Jvb3N0ZWQpOworfQorCisjZWxzZSAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKworc3RhdGljIHZvaWQKK2luY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKIAlzdGFydF9ydF9iYW5kd2lkdGgoJmRlZl9ydF9iYW5kd2lkdGgpOwotI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7CisKKwlXQVJOX09OKCFydF9wcmlvKHByaW8pKTsKKwlydF9ycS0+cnRfbnJfcnVubmluZysrOworCisJaW5jX3J0X3ByaW8ocnRfcnEsIHByaW8pOworCWluY19ydF9taWdyYXRpb24ocnRfc2UsIHJ0X3JxKTsKKwlpbmNfcnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKIH0KIAogc3RhdGljIGlubGluZQogdm9pZCBkZWNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCWludCBoaWdoZXN0X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvOwotI2VuZGlmCi0KIAlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7CiAJV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcpOwogCXJ0X3JxLT5ydF9ucl9ydW5uaW5nLS07Ci0jaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nKSB7Ci0JCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheTsKIAotCQlXQVJOX09OKHJ0X3NlX3ByaW8ocnRfc2UpIDwgcnRfcnEtPmhpZ2hlc3RfcHJpbyk7Ci0JCWlmIChydF9zZV9wcmlvKHJ0X3NlKSA9PSBydF9ycS0+aGlnaGVzdF9wcmlvKSB7Ci0JCQkvKiByZWNhbGN1bGF0ZSAqLwotCQkJYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKLQkJCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPQotCQkJCXNjaGVkX2ZpbmRfZmlyc3RfYml0KGFycmF5LT5iaXRtYXApOwotCQl9IC8qIG90aGVyd2lzZSBsZWF2ZSBycS0+aGlnaGVzdCBwcmlvIGFsb25lICovCi0JfSBlbHNlCi0JCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPSBNQVhfUlRfUFJJTzsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKLQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeS0tOwotCX0KLQotCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvICE9IGhpZ2hlc3RfcHJpbykgewotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwotCi0JCWlmIChycS0+b25saW5lKQotCQkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsCi0JCQkJICAgcnRfcnEtPmhpZ2hlc3RfcHJpbyk7Ci0JfQotCi0JdXBkYXRlX3J0X21pZ3JhdGlvbihycV9vZl9ydF9ycShydF9ycSkpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCi0JCXJ0X3JxLT5ydF9ucl9ib29zdGVkLS07Ci0KLQlXQVJOX09OKCFydF9ycS0+cnRfbnJfcnVubmluZyAmJiBydF9ycS0+cnRfbnJfYm9vc3RlZCk7Ci0jZW5kaWYKKwlkZWNfcnRfcHJpbyhydF9ycSwgcnRfc2VfcHJpbyhydF9zZSkpOworCWRlY19ydF9taWdyYXRpb24ocnRfc2UsIHJ0X3JxKTsKKwlkZWNfcnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKIH0KIAogc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKQEAgLTcxOCw2ICs4NTYsOSBAQAogCiAJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwogCisJaWYgKCF0YXNrX2N1cnJlbnQocnEsIHApICYmIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlpbmNfY3B1X2xvYWQocnEsIHAtPnNlLmxvYWQud2VpZ2h0KTsKIH0KIApAQCAtNzI4LDYgKzg2OSw4IEBACiAJdXBkYXRlX2N1cnJfcnQocnEpOwogCWRlcXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAorCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlkZWNfY3B1X2xvYWQocnEsIHAtPnNlLmxvYWQud2VpZ2h0KTsKIH0KIApAQCAtODc4LDcgKzEwMjEsNyBAQAogCXJldHVybiBuZXh0OwogfQogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqX3BpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCiB7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtOTAwLDYgKzEwNDMsMTggQEAKIAogCXAgPSBydF90YXNrX29mKHJ0X3NlKTsKIAlwLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOworCisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gX3BpY2tfbmV4dF90YXNrX3J0KHJxKTsKKworCS8qIFRoZSBydW5uaW5nIHRhc2sgaXMgbmV2ZXIgZWxpZ2libGUgZm9yIHB1c2hpbmcgKi8KKwlpZiAocCkKKwkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKwogCXJldHVybiBwOwogfQogCkBAIC05MDcsNiArMTA2MiwxMyBAQAogewogCXVwZGF0ZV9jdXJyX3J0KHJxKTsKIAlwLT5zZS5leGVjX3N0YXJ0ID0gMDsKKworCS8qCisJICogVGhlIHByZXZpb3VzIHRhc2sgbmVlZHMgdG8gYmUgbWFkZSBlbGlnaWJsZSBmb3IgcHVzaGluZworCSAqIGlmIGl0IGlzIHN0aWxsIGFjdGl2ZQorCSAqLworCWlmIChwLT5zZS5vbl9ycSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtOTYwLDEyICsxMTIyLDEzIEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBsb2NhbF9jcHVfbWFzayk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBpY2tfb3B0aW1hbF9jcHUoaW50IHRoaXNfY3B1LCBjcHVtYXNrX3QgKm1hc2spCitzdGF0aWMgaW5saW5lIGludCBwaWNrX29wdGltYWxfY3B1KGludCB0aGlzX2NwdSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKIAlpbnQgZmlyc3Q7CiAKIAkvKiAidGhpc19jcHUiIGlzIGNoZWFwZXIgdG8gcHJlZW1wdCB0aGFuIGEgcmVtb3RlIHByb2Nlc3NvciAqLwotCWlmICgodGhpc19jcHUgIT0gLTEpICYmIGNwdV9pc3NldCh0aGlzX2NwdSwgKm1hc2spKQorCWlmICgodGhpc19jcHUgIT0gLTEpICYmIGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIG1hc2spKQogCQlyZXR1cm4gdGhpc19jcHU7CiAKIAlmaXJzdCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CkBAIC05ODEsNiArMTE0NCw3IEBACiAJc3RydWN0IGNwdW1hc2sgKmxvd2VzdF9tYXNrID0gX19nZXRfY3B1X3Zhcihsb2NhbF9jcHVfbWFzayk7CiAJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBjcHUgICAgICA9IHRhc2tfY3B1KHRhc2spOworCWNwdW1hc2tfdmFyX3QgZG9tYWluX21hc2s7CiAKIAlpZiAodGFzay0+cnQubnJfY3B1c19hbGxvd2VkID09IDEpCiAJCXJldHVybiAtMTsgLyogTm8gb3RoZXIgdGFyZ2V0cyBwb3NzaWJsZSAqLwpAQCAtMTAxMywxOSArMTE3NywyNSBAQAogCWlmICh0aGlzX2NwdSA9PSBjcHUpCiAJCXRoaXNfY3B1ID0gLTE7IC8qIFNraXAgdGhpc19jcHUgb3B0IGlmIHRoZSBzYW1lICovCiAKLQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQlpZiAoc2QtPmZsYWdzICYgU0RfV0FLRV9BRkZJTkUpIHsKLQkJCWNwdW1hc2tfdCBkb21haW5fbWFzazsKLQkJCWludCAgICAgICBiZXN0X2NwdTsKKwlpZiAoYWxsb2NfY3B1bWFza192YXIoJmRvbWFpbl9tYXNrLCBHRlBfQVRPTUlDKSkgeworCQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgeworCQkJaWYgKHNkLT5mbGFncyAmIFNEX1dBS0VfQUZGSU5FKSB7CisJCQkJaW50IGJlc3RfY3B1OwogCi0JCQljcHVtYXNrX2FuZCgmZG9tYWluX21hc2ssIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwKLQkJCQkgICAgbG93ZXN0X21hc2spOworCQkJCWNwdW1hc2tfYW5kKGRvbWFpbl9tYXNrLAorCQkJCQkgICAgc2NoZWRfZG9tYWluX3NwYW4oc2QpLAorCQkJCQkgICAgbG93ZXN0X21hc2spOwogCi0JCQliZXN0X2NwdSA9IHBpY2tfb3B0aW1hbF9jcHUodGhpc19jcHUsCi0JCQkJCQkgICAgJmRvbWFpbl9tYXNrKTsKLQkJCWlmIChiZXN0X2NwdSAhPSAtMSkKLQkJCQlyZXR1cm4gYmVzdF9jcHU7CisJCQkJYmVzdF9jcHUgPSBwaWNrX29wdGltYWxfY3B1KHRoaXNfY3B1LAorCQkJCQkJCSAgICBkb21haW5fbWFzayk7CisKKwkJCQlpZiAoYmVzdF9jcHUgIT0gLTEpIHsKKwkJCQkJZnJlZV9jcHVtYXNrX3Zhcihkb21haW5fbWFzayk7CisJCQkJCXJldHVybiBiZXN0X2NwdTsKKwkJCQl9CisJCQl9CiAJCX0KKwkJZnJlZV9jcHVtYXNrX3Zhcihkb21haW5fbWFzayk7CiAJfQogCiAJLyoKQEAgLTEwNzIsNyArMTI0Miw3IEBACiAJCX0KIAogCQkvKiBJZiB0aGlzIHJxIGlzIHN0aWxsIHN1aXRhYmxlIHVzZSBpdC4gKi8KLQkJaWYgKGxvd2VzdF9ycS0+cnQuaGlnaGVzdF9wcmlvID4gdGFzay0+cHJpbykKKwkJaWYgKGxvd2VzdF9ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgPiB0YXNrLT5wcmlvKQogCQkJYnJlYWs7CiAKIAkJLyogdHJ5IGFnYWluICovCkBAIC0xMDgzLDYgKzEyNTMsMzEgQEAKIAlyZXR1cm4gbG93ZXN0X3JxOwogfQogCitzdGF0aWMgaW5saW5lIGludCBoYXNfcHVzaGFibGVfdGFza3Moc3RydWN0IHJxICpycSkKK3sKKwlyZXR1cm4gIXBsaXN0X2hlYWRfZW1wdHkoJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJaWYgKCFoYXNfcHVzaGFibGVfdGFza3MocnEpKQorCQlyZXR1cm4gTlVMTDsKKworCXAgPSBwbGlzdF9maXJzdF9lbnRyeSgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzLAorCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCBwdXNoYWJsZV90YXNrcyk7CisKKwlCVUdfT04ocnEtPmNwdSAhPSB0YXNrX2NwdShwKSk7CisJQlVHX09OKHRhc2tfY3VycmVudChycSwgcCkpOworCUJVR19PTihwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPD0gMSk7CisKKwlCVUdfT04oIXAtPnNlLm9uX3JxKTsKKwlCVUdfT04oIXJ0X3Rhc2socCkpOworCisJcmV0dXJuIHA7Cit9CisKIC8qCiAgKiBJZiB0aGUgY3VycmVudCBDUFUgaGFzIG1vcmUgdGhhbiBvbmUgUlQgdGFzaywgc2VlIGlmIHRoZSBub24KICAqIHJ1bm5pbmcgdGFzayBjYW4gbWlncmF0ZSBvdmVyIHRvIGEgQ1BVIHRoYXQgaXMgcnVubmluZyBhIHRhc2sKQEAgLTEwOTIsMTMgKzEyODcsMTEgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzazsKIAlzdHJ1Y3QgcnEgKmxvd2VzdF9ycTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgcGFyYW5vaWQgPSBSVF9NQVhfVFJJRVM7CiAKIAlpZiAoIXJxLT5ydC5vdmVybG9hZGVkKQogCQlyZXR1cm4gMDsKIAotCW5leHRfdGFzayA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIC0xKTsKKwluZXh0X3Rhc2sgPSBwaWNrX25leHRfcHVzaGFibGVfdGFzayhycSk7CiAJaWYgKCFuZXh0X3Rhc2spCiAJCXJldHVybiAwOwogCkBAIC0xMTI3LDE2ICsxMzIwLDM0IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAkJLyoKIAkJICogZmluZCBsb2NrX2xvd2VzdF9ycSByZWxlYXNlcyBycS0+bG9jawotCQkgKiBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5leHRfdGFzayBoYXMgY2hhbmdlZC4KLQkJICogSWYgaXQgaGFzLCB0aGVuIHRyeSBhZ2Fpbi4KKwkJICogc28gaXQgaXMgcG9zc2libGUgdGhhdCBuZXh0X3Rhc2sgaGFzIG1pZ3JhdGVkLgorCQkgKgorCQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0YXNrIGlzIHN0aWxsIG9uIHRoZSBzYW1lCisJCSAqIHJ1bi1xdWV1ZSBhbmQgaXMgYWxzbyBzdGlsbCB0aGUgbmV4dCB0YXNrIGVsaWdpYmxlIGZvcgorCQkgKiBwdXNoaW5nLgogCQkgKi8KLQkJdGFzayA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIC0xKTsKLQkJaWYgKHVubGlrZWx5KHRhc2sgIT0gbmV4dF90YXNrKSAmJiB0YXNrICYmIHBhcmFub2lkLS0pIHsKLQkJCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwotCQkJbmV4dF90YXNrID0gdGFzazsKLQkJCWdvdG8gcmV0cnk7CisJCXRhc2sgPSBwaWNrX25leHRfcHVzaGFibGVfdGFzayhycSk7CisJCWlmICh0YXNrX2NwdShuZXh0X3Rhc2spID09IHJxLT5jcHUgJiYgdGFzayA9PSBuZXh0X3Rhc2spIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIHRhc2sgaGFzbnQgbW92ZWQgYXQgYWxsLCBidXQKKwkJCSAqIGl0IGhhcyBmYWlsZWQgdG8gcHVzaC4gIFdlIHdpbGwgbm90IHRyeSBhZ2FpbiwKKwkJCSAqIHNpbmNlIHRoZSBvdGhlciBjcHVzIHdpbGwgcHVsbCBmcm9tIHVzIHdoZW4gdGhleQorCQkJICogYXJlIHJlYWR5LgorCQkJICovCisJCQlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIG5leHRfdGFzayk7CisJCQlnb3RvIG91dDsKIAkJfQotCQlnb3RvIG91dDsKKworCQlpZiAoIXRhc2spCisJCQkvKiBObyBtb3JlIHRhc2tzLCBqdXN0IGV4aXQgKi8KKwkJCWdvdG8gb3V0OworCisJCS8qCisJCSAqIFNvbWV0aGluZyBoYXMgc2hpZnRlZCwgdHJ5IGFnYWluLgorCQkgKi8KKwkJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7CisJCW5leHRfdGFzayA9IHRhc2s7CisJCWdvdG8gcmV0cnk7CiAJfQogCiAJZGVhY3RpdmF0ZV90YXNrKHJxLCBuZXh0X3Rhc2ssIDApOwpAQCAtMTE0NywyMyArMTM1OCwxMiBAQAogCiAJZG91YmxlX3VubG9ja19iYWxhbmNlKHJxLCBsb3dlc3RfcnEpOwogCi0JcmV0ID0gMTsKIG91dDoKIAlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDE7CiB9CiAKLS8qCi0gKiBUT0RPOiBDdXJyZW50bHkgd2UganVzdCB1c2UgdGhlIHNlY29uZCBoaWdoZXN0IHByaW8gdGFzayBvbgotICogICAgICAgdGhlIHF1ZXVlLCBhbmQgc3RvcCB3aGVuIGl0IGNhbid0IG1pZ3JhdGUgKG9yIHRoZXJlJ3MKLSAqICAgICAgIG5vIG1vcmUgUlQgdGFza3MpLiAgVGhlcmUgbWF5IGJlIGEgY2FzZSB3aGVyZSBhIGxvd2VyCi0gKiAgICAgICBwcmlvcml0eSBSVCB0YXNrIGhhcyBhIGRpZmZlcmVudCBhZmZpbml0eSB0aGFuIHRoZQotICogICAgICAgaGlnaGVyIFJUIHRhc2suIEluIHRoaXMgY2FzZSB0aGUgbG93ZXIgUlQgdGFzayBjb3VsZAotICogICAgICAgcG9zc2libHkgYmUgYWJsZSB0byBtaWdyYXRlIHdoZXJlIGFzIHRoZSBoaWdoZXIgcHJpb3JpdHkKLSAqICAgICAgIFJUIHRhc2sgY291bGQgbm90LiAgV2UgY3VycmVudGx5IGlnbm9yZSB0aGlzIGlzc3VlLgotICogICAgICAgRW5oYW5jZW1lbnRzIGFyZSB3ZWxjb21lIQotICovCiBzdGF0aWMgdm9pZCBwdXNoX3J0X3Rhc2tzKHN0cnVjdCBycSAqcnEpCiB7CiAJLyogcHVzaF9ydF90YXNrIHdpbGwgcmV0dXJuIHRydWUgaWYgaXQgbW92ZWQgYW4gUlQgKi8KQEAgLTExNzQsMzMgKzEzNzQsMzUgQEAKIHN0YXRpYyBpbnQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSkKIHsKIAlpbnQgdGhpc19jcHUgPSB0aGlzX3JxLT5jcHUsIHJldCA9IDAsIGNwdTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuZXh0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAlzdHJ1Y3QgcnEgKnNyY19ycTsKIAogCWlmIChsaWtlbHkoIXJ0X292ZXJsb2FkZWQodGhpc19ycSkpKQogCQlyZXR1cm4gMDsKIAotCW5leHQgPSBwaWNrX25leHRfdGFza19ydCh0aGlzX3JxKTsKLQogCWZvcl9lYWNoX2NwdShjcHUsIHRoaXNfcnEtPnJkLT5ydG9fbWFzaykgewogCQlpZiAodGhpc19jcHUgPT0gY3B1KQogCQkJY29udGludWU7CiAKIAkJc3JjX3JxID0gY3B1X3JxKGNwdSk7CisKKwkJLyoKKwkJICogRG9uJ3QgYm90aGVyIHRha2luZyB0aGUgc3JjX3JxLT5sb2NrIGlmIHRoZSBuZXh0IGhpZ2hlc3QKKwkJICogdGFzayBpcyBrbm93biB0byBiZSBsb3dlci1wcmlvcml0eSB0aGFuIG91ciBjdXJyZW50IHRhc2suCisJCSAqIFRoaXMgbWF5IGxvb2sgcmFjeSwgYnV0IGlmIHRoaXMgdmFsdWUgaXMgYWJvdXQgdG8gZ28KKwkJICogbG9naWNhbGx5IGhpZ2hlciwgdGhlIHNyY19ycSB3aWxsIHB1c2ggdGhpcyB0YXNrIGF3YXkuCisJCSAqIEFuZCBpZiBpdHMgZ29pbmcgbG9naWNhbGx5IGxvd2VyLCB3ZSBkbyBub3QgY2FyZQorCQkgKi8KKwkJaWYgKHNyY19ycS0+cnQuaGlnaGVzdF9wcmlvLm5leHQgPj0KKwkJICAgIHRoaXNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKQorCQkJY29udGludWU7CisKIAkJLyoKIAkJICogV2UgY2FuIHBvdGVudGlhbGx5IGRyb3AgdGhpc19ycSdzIGxvY2sgaW4KIAkJICogZG91YmxlX2xvY2tfYmFsYW5jZSwgYW5kIGFub3RoZXIgQ1BVIGNvdWxkCi0JCSAqIHN0ZWFsIG91ciBuZXh0IHRhc2sgLSBoZW5jZSB3ZSBtdXN0IGNhdXNlCi0JCSAqIHRoZSBjYWxsZXIgdG8gcmVjYWxjdWxhdGUgdGhlIG5leHQgdGFzawotCQkgKiBpbiB0aGF0IGNhc2U6CisJCSAqIGFsdGVyIHRoaXNfcnEKIAkJICovCi0JCWlmIChkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSkpIHsKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkX25leHQgPSBuZXh0OwotCi0JCQluZXh0ID0gcGlja19uZXh0X3Rhc2tfcnQodGhpc19ycSk7Ci0JCQlpZiAobmV4dCAhPSBvbGRfbmV4dCkKLQkJCQlyZXQgPSAxOwotCQl9CisJCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKTsKIAogCQkvKgogCQkgKiBBcmUgdGhlcmUgc3RpbGwgcHVsbGFibGUgUlQgdGFza3M/CkBAIC0xMjE0LDcgKzE0MTYsNyBAQAogCQkgKiBEbyB3ZSBoYXZlIGFuIFJUIHRhc2sgdGhhdCBwcmVlbXB0cwogCQkgKiB0aGUgdG8tYmUtc2NoZWR1bGVkIHRhc2s/CiAJCSAqLwotCQlpZiAocCAmJiAoIW5leHQgfHwgKHAtPnByaW8gPCBuZXh0LT5wcmlvKSkpIHsKKwkJaWYgKHAgJiYgKHAtPnByaW8gPCB0aGlzX3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VycikpIHsKIAkJCVdBUk5fT04ocCA9PSBzcmNfcnEtPmN1cnIpOwogCQkJV0FSTl9PTighcC0+c2Uub25fcnEpOwogCkBAIC0xMjI0LDEyICsxNDI2LDkgQEAKIAkJCSAqIFRoaXMgaXMganVzdCB0aGF0IHAgaXMgd2FrZWluZyB1cCBhbmQgaGFzbid0CiAJCQkgKiBoYWQgYSBjaGFuY2UgdG8gc2NoZWR1bGUuIFdlIG9ubHkgcHVsbAogCQkJICogcCBpZiBpdCBpcyBsb3dlciBpbiBwcmlvcml0eSB0aGFuIHRoZQotCQkJICogY3VycmVudCB0YXNrIG9uIHRoZSBydW4gcXVldWUgb3IKLQkJCSAqIHRoaXNfcnEgbmV4dCB0YXNrIGlzIGxvd2VyIGluIHByaW8gdGhhbgotCQkJICogdGhlIGN1cnJlbnQgdGFzayBvbiB0aGF0IHJxLgorCQkJICogY3VycmVudCB0YXNrIG9uIHRoZSBydW4gcXVldWUKIAkJCSAqLwotCQkJaWYgKHAtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8gfHwKLQkJCSAgICAobmV4dCAmJiBuZXh0LT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvKSkKKwkJCWlmIChwLT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvKQogCQkJCWdvdG8gc2tpcDsKIAogCQkJcmV0ID0gMTsKQEAgLTEyNDIsMTMgKzE0NDEsNyBAQAogCQkJICogY2FzZSB0aGVyZSdzIGFuIGV2ZW4gaGlnaGVyIHByaW8gdGFzawogCQkJICogaW4gYW5vdGhlciBydW5xdWV1ZS4gKGxvdyBsaWtlbHlob29kCiAJCQkgKiBidXQgcG9zc2libGUpCi0JCQkgKgotCQkJICogVXBkYXRlIG5leHQgc28gdGhhdCB3ZSB3b24ndCBwaWNrIGEgdGFzawotCQkJICogb24gYW5vdGhlciBjcHUgd2l0aCBhIHByaW9yaXR5IGxvd2VyIChvciBlcXVhbCkKLQkJCSAqIHRoYW4gdGhlIG9uZSB3ZSBqdXN0IHBpY2tlZC4KIAkJCSAqLwotCQkJbmV4dCA9IHA7Ci0KIAkJfQogIHNraXA6CiAJCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpOwpAQCAtMTI2MCwyNCArMTQ1MywyNyBAQAogc3RhdGljIHZvaWQgcHJlX3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKIAkvKiBUcnkgdG8gcHVsbCBSVCB0YXNrcyBoZXJlIGlmIHdlIGxvd2VyIHRoaXMgcnEncyBwcmlvICovCi0JaWYgKHVubGlrZWx5KHJ0X3Rhc2socHJldikpICYmIHJxLT5ydC5oaWdoZXN0X3ByaW8gPiBwcmV2LT5wcmlvKQorCWlmICh1bmxpa2VseShydF90YXNrKHByZXYpKSAmJiBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgPiBwcmV2LT5wcmlvKQogCQlwdWxsX3J0X3Rhc2socnEpOwogfQogCisvKgorICogYXNzdW1lcyBycS0+bG9jayBpcyBoZWxkCisgKi8KK3N0YXRpYyBpbnQgbmVlZHNfcG9zdF9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiBoYXNfcHVzaGFibGVfdGFza3MocnEpOworfQorCiBzdGF0aWMgdm9pZCBwb3N0X3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEpCiB7CiAJLyoKLQkgKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgcnRfdGFzayBxdWV1ZWQsIHRoZW4KLQkgKiBzZWUgaWYgd2UgY2FuIHB1c2ggdGhlIG90aGVyIHJ0X3Rhc2tzIG9mZiB0byBvdGhlciBDUFVTLgotCSAqIE5vdGUgd2UgbWF5IHJlbGVhc2UgdGhlIHJxIGxvY2ssIGFuZCBzaW5jZQotCSAqIHRoZSBsb2NrIHdhcyBvd25lZCBieSBwcmV2LCB3ZSBuZWVkIHRvIHJlbGVhc2UgaXQKLQkgKiBmaXJzdCB2aWEgZmluaXNoX2xvY2tfc3dpdGNoIGFuZCB0aGVuIHJlYXF1aXJlIGl0IGhlcmUuCisJICogVGhpcyBpcyBvbmx5IGNhbGxlZCBpZiBuZWVkc19wb3N0X3NjaGVkdWxlX3J0KCkgaW5kaWNhdGVzIHRoYXQKKwkgKiB3ZSBuZWVkIHRvIHB1c2ggdGFza3MgYXdheQogCSAqLwotCWlmICh1bmxpa2VseShycS0+cnQub3ZlcmxvYWRlZCkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwotCQlwdXNoX3J0X3Rhc2tzKHJxKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7Ci0JfQorCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKKwlwdXNoX3J0X3Rhc2tzKHJxKTsKKwlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIH0KIAogLyoKQEAgLTEyODgsNyArMTQ4NCw4IEBACiB7CiAJaWYgKCF0YXNrX3J1bm5pbmcocnEsIHApICYmCiAJICAgICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpICYmCi0JICAgIHJxLT5ydC5vdmVybG9hZGVkKQorCSAgICBoYXNfcHVzaGFibGVfdGFza3MocnEpICYmCisJICAgIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCiAJCXB1c2hfcnRfdGFza3MocnEpOwogfQogCkBAIC0xMzI0LDYgKzE1MjEsMjQgQEAKIAlpZiAocC0+c2Uub25fcnEgJiYgKHdlaWdodCAhPSBwLT5ydC5ucl9jcHVzX2FsbG93ZWQpKSB7CiAJCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCisJCWlmICghdGFza19jdXJyZW50KHJxLCBwKSkgeworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSBkZXF1ZXVlIHRoaXMgdGFzayBmcm9tIHRoZSBwdXNoYWJsZSBsaXN0CisJCQkgKiBiZWZvcmUgZ29pbmcgZnVydGhlci4gIEl0IHdpbGwgZWl0aGVyIHJlbWFpbiBvZmYgb2YKKwkJCSAqIHRoZSBsaXN0IGJlY2F1c2Ugd2UgYXJlIG5vIGxvbmdlciBwdXNoYWJsZSwgb3IgaXQKKwkJCSAqIHdpbGwgYmUgcmVxdWV1ZWQuCisJCQkgKi8KKwkJCWlmIChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQkJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKKwkJCS8qCisJCQkgKiBSZXF1ZXVlIGlmIG91ciB3ZWlnaHQgaXMgY2hhbmdpbmcgYW5kIHN0aWxsID4gMQorCQkJICovCisJCQlpZiAod2VpZ2h0ID4gMSkKKwkJCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCisJCX0KKwogCQlpZiAoKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8PSAxKSAmJiAod2VpZ2h0ID4gMSkpIHsKIAkJCXJxLT5ydC5ydF9ucl9taWdyYXRvcnkrKzsKIAkJfSBlbHNlIGlmICgocC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkgJiYgKHdlaWdodCA8PSAxKSkgewpAQCAtMTMzMSw3ICsxNTQ2LDcgQEAKIAkJCXJxLT5ydC5ydF9ucl9taWdyYXRvcnktLTsKIAkJfQogCi0JCXVwZGF0ZV9ydF9taWdyYXRpb24ocnEpOworCQl1cGRhdGVfcnRfbWlncmF0aW9uKCZycS0+cnQpOwogCX0KIAogCWNwdW1hc2tfY29weSgmcC0+Y3B1c19hbGxvd2VkLCBuZXdfbWFzayk7CkBAIC0xMzQ2LDcgKzE1NjEsNyBAQAogCiAJX19lbmFibGVfcnVudGltZShycSk7CiAKLQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnEtPnJ0LmhpZ2hlc3RfcHJpbyk7CisJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJxLT5ydC5oaWdoZXN0X3ByaW8uY3Vycik7CiB9CiAKIC8qIEFzc3VtZXMgcnEtPmxvY2sgaXMgaGVsZCAqLwpAQCAtMTQzOCw3ICsxNjUzLDcgQEAKIAkJICogY2FuIHJlbGVhc2UgdGhlIHJxIGxvY2sgYW5kIHAgY291bGQgbWlncmF0ZS4KIAkJICogT25seSByZXNjaGVkdWxlIGlmIHAgaXMgc3RpbGwgb24gdGhlIHNhbWUgcnVucXVldWUuCiAJCSAqLwotCQlpZiAocC0+cHJpbyA+IHJxLT5ydC5oaWdoZXN0X3ByaW8gJiYgcnEtPmN1cnIgPT0gcCkKKwkJaWYgKHAtPnByaW8gPiBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgJiYgcnEtPmN1cnIgPT0gcCkKIAkJCXJlc2NoZWRfdGFzayhwKTsKICNlbHNlCiAJCS8qIEZvciBVUCBzaW1wbHkgcmVzY2hlZCBvbiBkcm9wIG9mIHByaW8gKi8KQEAgLTE1MDksNiArMTcyNCw5IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcnEtPmN1cnI7CiAKIAlwLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOworCisJLyogVGhlIHJ1bm5pbmcgdGFzayBpcyBuZXZlciBlbGlnaWJsZSBmb3IgcHVzaGluZyAqLworCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgcnRfc2NoZWRfY2xhc3MgPSB7CkBAIC0xNTMxLDYgKzE3NDksNyBAQAogCS5ycV9vbmxpbmUgICAgICAgICAgICAgID0gcnFfb25saW5lX3J0LAogCS5ycV9vZmZsaW5lICAgICAgICAgICAgID0gcnFfb2ZmbGluZV9ydCwKIAkucHJlX3NjaGVkdWxlCQk9IHByZV9zY2hlZHVsZV9ydCwKKwkubmVlZHNfcG9zdF9zY2hlZHVsZQk9IG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQsCiAJLnBvc3Rfc2NoZWR1bGUJCT0gcG9zdF9zY2hlZHVsZV9ydCwKIAkudGFza193YWtlX3VwCQk9IHRhc2tfd2FrZV91cF9ydCwKIAkuc3dpdGNoZWRfZnJvbQkJPSBzd2l0Y2hlZF9mcm9tX3J0LApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCBhOGY5M2RkLi4zMmQyYmQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtNCw3ICs0LDcgQEAKICAqIGJ1bXAgdGhpcyB1cCB3aGVuIGNoYW5naW5nIHRoZSBvdXRwdXQgZm9ybWF0IG9yIHRoZSBtZWFuaW5nIG9mIGFuIGV4aXN0aW5nCiAgKiBmb3JtYXQsIHNvIHRoYXQgdG9vbHMgY2FuIGFkYXB0IChvciBhYm9ydCkKICAqLwotI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNAorI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNQogCiBzdGF0aWMgaW50IHNob3dfc2NoZWRzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewpAQCAtMjYsOSArMjYsOCBAQAogCiAJCS8qIHJ1bnF1ZXVlLXNwZWNpZmljIHN0YXRzICovCiAJCXNlcV9wcmludGYoc2VxLAotCQkgICAgImNwdSVkICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICVsbHUgJWxsdSAlbHUiLAotCQkgICAgY3B1LCBycS0+eWxkX2JvdGhfZW1wdHksCi0JCSAgICBycS0+eWxkX2FjdF9lbXB0eSwgcnEtPnlsZF9leHBfZW1wdHksIHJxLT55bGRfY291bnQsCisJCSAgICAiY3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCisJCSAgICBjcHUsIHJxLT55bGRfY291bnQsCiAJCSAgICBycS0+c2NoZWRfc3dpdGNoLCBycS0+c2NoZWRfY291bnQsIHJxLT5zY2hlZF9nb2lkbGUsCiAJCSAgICBycS0+dHR3dV9jb3VudCwgcnEtPnR0d3VfbG9jYWwsCiAJCSAgICBycS0+cnFfY3B1X3RpbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCA5MDQxZWE3Li41N2QzZjY3IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTc5Niw2ICs3OTYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IF9faW5pdCBfX3dlYWsgYXJjaF9wcm9iZV9ucl9pcnFzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIGludCBfX2luaXQgX193ZWFrIGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwppbmRleCAwY2Q0MTVlLi43NDU0MWNhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKKysrIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkgKiBkb2Vzbid0IGhpdCB0aGlzIENQVSB1bnRpbCB3ZSdyZSByZWFkeS4gKi8KIAlnZXRfY3B1KCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCXNtX3dvcmsgPSBwZXJjcHVfcHRyKHN0b3BfbWFjaGluZV93b3JrLCBpKTsKKwkJc21fd29yayA9IHBlcl9jcHVfcHRyKHN0b3BfbWFjaGluZV93b3JrLCBpKTsKIAkJSU5JVF9XT1JLKHNtX3dvcmssIHN0b3BfY3B1KTsKIAkJcXVldWVfd29ya19vbihpLCBzdG9wX21hY2hpbmVfd3EsIHNtX3dvcmspOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCBmYWZlYjQ4Li5iMzg0MjNjIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKKysrIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCkBAIC0yMTksNiArMjE5LDcgQEAKIAl7IE5FVF9JUFY0X0NPTkZfQVJQX0lHTk9SRSwJCSJhcnBfaWdub3JlIiB9LAogCXsgTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTLAkicHJvbW90ZV9zZWNvbmRhcmllcyIgfSwKIAl7IE5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVCwJCSJhcnBfYWNjZXB0IiB9LAorCXsgTkVUX0lQVjRfQ09ORl9BUlBfTk9USUZZLAkJImFycF9ub3RpZnkiIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL01ha2VmaWxlIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKaW5kZXggOTA1YjBiNS4uMGIwYTYzNiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvTWFrZWZpbGUKKysrIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteSArPSB0aW1la2VlcGluZy5vIG50cC5vIGNsb2Nrc291cmNlLm8gamlmZmllcy5vIHRpbWVyX2xpc3Qubworb2JqLXkgKz0gdGltZWtlZXBpbmcubyBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8gdGltZWNvbXBhcmUubwogCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRCkJCSs9IGNsb2NrZXZlbnRzLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQkJKz0gdGljay1jb21tb24ubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKaW5kZXggZWEyZjQ4YS4uZDEzYmUyMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCkBAIC02OCw2ICs2OCwxNyBAQAogCWlmIChkZXYtPm1vZGUgIT0gbW9kZSkgewogCQlkZXYtPnNldF9tb2RlKG1vZGUsIGRldik7CiAJCWRldi0+bW9kZSA9IG1vZGU7CisKKwkJLyoKKwkJICogQSBuc2VjMmN5YyBtdWx0aXBsaWNhdG9yIG9mIDAgaXMgaW52YWxpZCBhbmQgd2UnZCBjcmFzaAorCQkgKiBvbiBpdCwgc28gZml4IGl0IHVwIGFuZCBlbWl0IGEgd2FybmluZzoKKwkJICovCisJCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKKwkJCWlmICh1bmxpa2VseSghZGV2LT5tdWx0KSkgeworCQkJCWRldi0+bXVsdCA9IDE7CisJCQkJV0FSTl9PTigxKTsKKwkJCX0KKwkJfQogCX0KIH0KIApAQCAtMTY4LDE1ICsxNzksNiBAQAogCUJVR19PTihkZXYtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEKTsKIAlCVUdfT04oIWRldi0+Y3B1bWFzayk7CiAKLQkvKgotCSAqIEEgbnNlYzJjeWMgbXVsdGlwbGljYXRvciBvZiAwIGlzIGludmFsaWQgYW5kIHdlJ2QgY3Jhc2gKLQkgKiBvbiBpdCwgc28gZml4IGl0IHVwIGFuZCBlbWl0IGEgd2FybmluZzoKLQkgKi8KLQlpZiAodW5saWtlbHkoIWRldi0+bXVsdCkpIHsKLQkJZGV2LT5tdWx0ID0gMTsKLQkJV0FSTl9PTigxKTsKLQl9Ci0KIAlzcGluX2xvY2soJmNsb2NrZXZlbnRzX2xvY2spOwogCiAJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmNsb2NrZXZlbnRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBjYTg5ZTE1Li5jNDZjOTMxIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTMxLDYgKzMxLDgyIEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4gLyogZm9yIHNwaW5fdW5sb2NrX2lycSgpIHVzaW5nIHByZWVtcHRfY291bnQoKSBtNjhrICovCiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogCit2b2lkIHRpbWVjb3VudGVyX2luaXQoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJICAgICAgY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCSAgICAgIHU2NCBzdGFydF90c3RhbXApCit7CisJdGMtPmNjID0gY2M7CisJdGMtPmN5Y2xlX2xhc3QgPSBjYy0+cmVhZChjYyk7CisJdGMtPm5zZWMgPSBzdGFydF90c3RhbXA7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWVjb3VudGVyX2luaXQpOworCisvKioKKyAqIHRpbWVjb3VudGVyX3JlYWRfZGVsdGEgLSBnZXQgbmFub3NlY29uZHMgc2luY2UgbGFzdCBjYWxsIG9mIHRoaXMgZnVuY3Rpb24KKyAqIEB0YzogICAgICAgICBQb2ludGVyIHRvIHRpbWUgY291bnRlcgorICoKKyAqIFdoZW4gdGhlIHVuZGVybHlpbmcgY3ljbGUgY291bnRlciBydW5zIG92ZXIsIHRoaXMgd2lsbCBiZSBoYW5kbGVkCisgKiBjb3JyZWN0bHkgYXMgbG9uZyBhcyBpdCBkb2VzIG5vdCBydW4gb3ZlciBtb3JlIHRoYW4gb25jZSBiZXR3ZWVuCisgKiBjYWxscy4KKyAqCisgKiBUaGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGZvciBhIG5ldyB0aW1lIGNvdW50ZXIgaW5pdGlhbGl6ZXMKKyAqIHRoZSB0aW1lIHRyYWNraW5nIGFuZCByZXR1cm5zIGFuIHVuZGVmaW5lZCByZXN1bHQuCisgKi8KK3N0YXRpYyB1NjQgdGltZWNvdW50ZXJfcmVhZF9kZWx0YShzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjKQoreworCWN5Y2xlX3QgY3ljbGVfbm93LCBjeWNsZV9kZWx0YTsKKwl1NjQgbnNfb2Zmc2V0OworCisJLyogcmVhZCBjeWNsZSBjb3VudGVyOiAqLworCWN5Y2xlX25vdyA9IHRjLT5jYy0+cmVhZCh0Yy0+Y2MpOworCisJLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB0aW1lY291bnRlcl9yZWFkX2RlbHRhKCk6ICovCisJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gdGMtPmN5Y2xlX2xhc3QpICYgdGMtPmNjLT5tYXNrOworCisJLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KKwluc19vZmZzZXQgPSBjeWNsZWNvdW50ZXJfY3ljMm5zKHRjLT5jYywgY3ljbGVfZGVsdGEpOworCisJLyogdXBkYXRlIHRpbWUgc3RhbXAgb2YgdGltZWNvdW50ZXJfcmVhZF9kZWx0YSgpIGNhbGw6ICovCisJdGMtPmN5Y2xlX2xhc3QgPSBjeWNsZV9ub3c7CisKKwlyZXR1cm4gbnNfb2Zmc2V0OworfQorCit1NjQgdGltZWNvdW50ZXJfcmVhZChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjKQoreworCXU2NCBuc2VjOworCisJLyogaW5jcmVtZW50IHRpbWUgYnkgbmFub3NlY29uZHMgc2luY2UgbGFzdCBjYWxsICovCisJbnNlYyA9IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEodGMpOworCW5zZWMgKz0gdGMtPm5zZWM7CisJdGMtPm5zZWMgPSBuc2VjOworCisJcmV0dXJuIG5zZWM7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWVjb3VudGVyX3JlYWQpOworCit1NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCSBjeWNsZV90IGN5Y2xlX3RzdGFtcCkKK3sKKwl1NjQgY3ljbGVfZGVsdGEgPSAoY3ljbGVfdHN0YW1wIC0gdGMtPmN5Y2xlX2xhc3QpICYgdGMtPmNjLT5tYXNrOworCXU2NCBuc2VjOworCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGFsd2F5cyB0cmVhdGluZyBjeWNsZV90c3RhbXAgYXMgbW9yZSByZWNlbnQKKwkgKiB0aGFuIHRjLT5jeWNsZV9sYXN0LCBkZXRlY3Qgd2hlbiBpdCBpcyB0b28gZmFyIGluIHRoZQorCSAqIGZ1dHVyZSBhbmQgdHJlYXQgaXQgYXMgb2xkIHRpbWUgc3RhbXAgaW5zdGVhZC4KKwkgKi8KKwlpZiAoY3ljbGVfZGVsdGEgPiB0Yy0+Y2MtPm1hc2sgLyAyKSB7CisJCWN5Y2xlX2RlbHRhID0gKHRjLT5jeWNsZV9sYXN0IC0gY3ljbGVfdHN0YW1wKSAmIHRjLT5jYy0+bWFzazsKKwkJbnNlYyA9IHRjLT5uc2VjIC0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKTsKKwl9IGVsc2UgeworCQluc2VjID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKSArIHRjLT5uc2VjOworCX0KKworCXJldHVybiBuc2VjOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9jeWMydGltZSk7CisKIC8qIFhYWCAtIFdvdWxkIGxpa2UgYSBiZXR0ZXIgd2F5IGZvciBpbml0aWFsaXppbmcgY3Vycl9jbG9ja3NvdXJjZSAqLwogZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9qaWZmaWVzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IGY1Zjc5M2QuLjdmYzY0MzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC0xLDcxICsxLDEyOSBAQAogLyoKLSAqIGxpbnV4L2tlcm5lbC90aW1lL250cC5jCi0gKgogICogTlRQIHN0YXRlIG1hY2hpbmUgaW50ZXJmYWNlcyBhbmQgbG9naWMuCiAgKgogICogVGhpcyBjb2RlIHdhcyBtYWlubHkgbW92ZWQgZnJvbSBrZXJuZWwvdGltZXIuYyBhbmQga2VybmVsL3RpbWUuYwogICogUGxlYXNlIHNlZSB0aG9zZSBmaWxlcyBmb3IgcmVsZXZhbnQgY29weXJpZ2h0IGluZm8gYW5kIGhpc3RvcmljYWwKICAqIGNoYW5nZWxvZ3MuCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qCi0gKiBUaW1la2VlcGluZyB2YXJpYWJsZXMKKyAqIE5UUCB0aW1la2VlcGluZyB2YXJpYWJsZXM6CiAgKi8KLXVuc2lnbmVkIGxvbmcgdGlja191c2VjID0gVElDS19VU0VDOyAJCS8qIFVTRVJfSFogcGVyaW9kICh1c2VjKSAqLwotdW5zaWduZWQgbG9uZyB0aWNrX25zZWM7CQkJLyogQUNUSFogcGVyaW9kIChuc2VjKSAqLwotdTY0IHRpY2tfbGVuZ3RoOwotc3RhdGljIHU2NCB0aWNrX2xlbmd0aF9iYXNlOwogCi1zdGF0aWMgc3RydWN0IGhydGltZXIgbGVhcF90aW1lcjsKKy8qIFVTRVJfSFogcGVyaW9kICh1c2Vjcyk6ICovCit1bnNpZ25lZCBsb25nCQkJdGlja191c2VjID0gVElDS19VU0VDOwogCi0jZGVmaW5lIE1BWF9USUNLQURKCQk1MDAJCS8qIG1pY3Jvc2VjcyAqLwotI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQJKCgodTY0KShNQVhfVElDS0FESiAqIE5TRUNfUEVSX1VTRUMpIDw8IFwKLQkJCQkgIE5UUF9TQ0FMRV9TSElGVCkgLyBOVFBfSU5URVJWQUxfRlJFUSkKKy8qIEFDVEhaIHBlcmlvZCAobnNlY3MpOiAqLwordW5zaWduZWQgbG9uZwkJCXRpY2tfbnNlYzsKKwordTY0CQkJCXRpY2tfbGVuZ3RoOworc3RhdGljIHU2NAkJCXRpY2tfbGVuZ3RoX2Jhc2U7CisKK3N0YXRpYyBzdHJ1Y3QgaHJ0aW1lcgkJbGVhcF90aW1lcjsKKworI2RlZmluZSBNQVhfVElDS0FESgkJNTAwTEwJCS8qIHVzZWNzICovCisjZGVmaW5lIE1BWF9USUNLQURKX1NDQUxFRCBcCisJKCgoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBOVFBfU0NBTEVfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCiAKIC8qCiAgKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCiAgKi8KLS8qIFRJTUVfRVJST1IgcHJldmVudHMgb3ZlcndyaXRpbmcgdGhlIENNT1MgY2xvY2sgKi8KLXN0YXRpYyBpbnQgdGltZV9zdGF0ZSA9IFRJTUVfT0s7CS8qIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMJKi8KLWludCB0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CQkvKiBjbG9jayBzdGF0dXMgYml0cwkJKi8KLXN0YXRpYyBsb25nIHRpbWVfdGFpOwkJCS8qIFRBSSBvZmZzZXQgKHMpCQkqLwotc3RhdGljIHM2NCB0aW1lX29mZnNldDsJCQkvKiB0aW1lIGFkanVzdG1lbnQgKG5zKQkJKi8KLXN0YXRpYyBsb25nIHRpbWVfY29uc3RhbnQgPSAyOwkJLyogcGxsIHRpbWUgY29uc3RhbnQJCSovCi1sb25nIHRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIG1heGltdW0gZXJyb3IgKHVzKQkJKi8KLWxvbmcgdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsJLyogZXN0aW1hdGVkIGVycm9yICh1cykJCSovCi1zdGF0aWMgczY0IHRpbWVfZnJlcTsJCQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnMvcykqLwotc3RhdGljIGxvbmcgdGltZV9yZWZ0aW1lOwkJLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHMpCSovCi1sb25nIHRpbWVfYWRqdXN0Owotc3RhdGljIGxvbmcgbnRwX3RpY2tfYWRqOwogCisvKgorICogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cworICoKKyAqIChUSU1FX0VSUk9SIHByZXZlbnRzIG92ZXJ3cml0aW5nIHRoZSBDTU9TIGNsb2NrKQorICovCitzdGF0aWMgaW50CQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisKKy8qIGNsb2NrIHN0YXR1cyBiaXRzOgkJCQkJCQkqLworaW50CQkJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKKworLyogVEFJIG9mZnNldCAoc2Vjcyk6CQkJCQkJCSovCitzdGF0aWMgbG9uZwkJCXRpbWVfdGFpOworCisvKiB0aW1lIGFkanVzdG1lbnQgKG5zZWNzKToJCQkJCQkqLworc3RhdGljIHM2NAkJCXRpbWVfb2Zmc2V0OworCisvKiBwbGwgdGltZSBjb25zdGFudDoJCQkJCQkJKi8KK3N0YXRpYyBsb25nCQkJdGltZV9jb25zdGFudCA9IDI7CisKKy8qIG1heGltdW0gZXJyb3IgKHVzZWNzKToJCQkJCQkqLworbG9uZwkJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisvKiBlc3RpbWF0ZWQgZXJyb3IgKHVzZWNzKToJCQkJCQkqLworbG9uZwkJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnNlY3Mvc2Vjcyk6CQkJCSovCitzdGF0aWMgczY0CQkJdGltZV9mcmVxOworCisvKiB0aW1lIGF0IGxhc3QgYWRqdXN0bWVudCAoc2Vjcyk6CQkJCQkqLworc3RhdGljIGxvbmcJCQl0aW1lX3JlZnRpbWU7CisKK2xvbmcJCQkJdGltZV9hZGp1c3Q7CisKKy8qIGNvbnN0YW50IChib290LXBhcmFtIGNvbmZpZ3VyYWJsZSkgTlRQIHRpY2sgYWRqdXN0bWVudCAodXBzY2FsZWQpCSovCitzdGF0aWMgczY0CQkJbnRwX3RpY2tfYWRqOworCisvKgorICogTlRQIG1ldGhvZHM6CisgKi8KKworLyoKKyAqIFVwZGF0ZSAodGlja19sZW5ndGgsIHRpY2tfbGVuZ3RoX2Jhc2UsIHRpY2tfbnNlYyksIGJhc2VkCisgKiBvbiAodGlja191c2VjLCBudHBfdGlja19hZGosIHRpbWVfZnJlcSk6CisgKi8KIHN0YXRpYyB2b2lkIG50cF91cGRhdGVfZnJlcXVlbmN5KHZvaWQpCiB7Ci0JdTY0IHNlY29uZF9sZW5ndGggPSAodTY0KSh0aWNrX3VzZWMgKiBOU0VDX1BFUl9VU0VDICogVVNFUl9IWikKLQkJCQk8PCBOVFBfU0NBTEVfU0hJRlQ7Ci0Jc2Vjb25kX2xlbmd0aCArPSAoczY0KW50cF90aWNrX2FkaiA8PCBOVFBfU0NBTEVfU0hJRlQ7Ci0Jc2Vjb25kX2xlbmd0aCArPSB0aW1lX2ZyZXE7CisJdTY0IHNlY29uZF9sZW5ndGg7CisJdTY0IG5ld19iYXNlOwogCi0JdGlja19sZW5ndGhfYmFzZSA9IHNlY29uZF9sZW5ndGg7CisJc2Vjb25kX2xlbmd0aAkJID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCisJCQkJCQk8PCBOVFBfU0NBTEVfU0hJRlQ7CiAKLQl0aWNrX25zZWMgPSBkaXZfdTY0KHNlY29uZF9sZW5ndGgsIEhaKSA+PiBOVFBfU0NBTEVfU0hJRlQ7Ci0JdGlja19sZW5ndGhfYmFzZSA9IGRpdl91NjQodGlja19sZW5ndGhfYmFzZSwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCXNlY29uZF9sZW5ndGgJCSs9IG50cF90aWNrX2FkajsKKwlzZWNvbmRfbGVuZ3RoCQkrPSB0aW1lX2ZyZXE7CisKKwl0aWNrX25zZWMJCSA9IGRpdl91NjQoc2Vjb25kX2xlbmd0aCwgSFopID4+IE5UUF9TQ0FMRV9TSElGVDsKKwluZXdfYmFzZQkJID0gZGl2X3U2NChzZWNvbmRfbGVuZ3RoLCBOVFBfSU5URVJWQUxfRlJFUSk7CisKKwkvKgorCSAqIERvbid0IHdhaXQgZm9yIHRoZSBuZXh0IHNlY29uZF9vdmVyZmxvdywgYXBwbHkKKwkgKiB0aGUgY2hhbmdlIHRvIHRoZSB0aWNrIGxlbmd0aCBpbW1lZGlhdGVseToKKwkgKi8KKwl0aWNrX2xlbmd0aAkJKz0gbmV3X2Jhc2UgLSB0aWNrX2xlbmd0aF9iYXNlOworCXRpY2tfbGVuZ3RoX2Jhc2UJID0gbmV3X2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgczY0IG50cF91cGRhdGVfb2Zmc2V0X2ZsbChzNjQgb2Zmc2V0NjQsIGxvbmcgc2VjcykKK3sKKwl0aW1lX3N0YXR1cyAmPSB+U1RBX01PREU7CisKKwlpZiAoc2VjcyA8IE1JTlNFQykKKwkJcmV0dXJuIDA7CisKKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9GTEwpICYmIChzZWNzIDw9IE1BWFNFQykpCisJCXJldHVybiAwOworCisJdGltZV9zdGF0dXMgfD0gU1RBX01PREU7CisKKwlyZXR1cm4gZGl2X3M2NChvZmZzZXQ2NCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfRkxMKSwgc2Vjcyk7CiB9CiAKIHN0YXRpYyB2b2lkIG50cF91cGRhdGVfb2Zmc2V0KGxvbmcgb2Zmc2V0KQogewotCWxvbmcgbXRlbXA7CiAJczY0IGZyZXFfYWRqOworCXM2NCBvZmZzZXQ2NDsKKwlsb25nIHNlY3M7CiAKIAlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpKQogCQlyZXR1cm47CkBAIC04NCwyNCArMTQyLDIzIEBACiAJICogU2VsZWN0IGhvdyB0aGUgZnJlcXVlbmN5IGlzIHRvIGJlIGNvbnRyb2xsZWQKIAkgKiBhbmQgaW4gd2hpY2ggbW9kZSAoUExMIG9yIEZMTCkuCiAJICovCi0JaWYgKHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEIHx8IHRpbWVfcmVmdGltZSA9PSAwKQotCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7Ci0JbXRlbXAgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJc2VjcyA9IHh0aW1lLnR2X3NlYyAtIHRpbWVfcmVmdGltZTsKKwlpZiAodW5saWtlbHkodGltZV9zdGF0dXMgJiBTVEFfRlJFUUhPTEQpKQorCQlzZWNzID0gMDsKKwogCXRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKIAotCWZyZXFfYWRqID0gKHM2NClvZmZzZXQgKiBtdGVtcDsKLQlmcmVxX2FkaiA8PD0gTlRQX1NDQUxFX1NISUZUIC0gMiAqIChTSElGVF9QTEwgKyAyICsgdGltZV9jb25zdGFudCk7Ci0JdGltZV9zdGF0dXMgJj0gflNUQV9NT0RFOwotCWlmIChtdGVtcCA+PSBNSU5TRUMgJiYgKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCB8fCBtdGVtcCA+IE1BWFNFQykpIHsKLQkJZnJlcV9hZGogKz0gZGl2X3M2NCgoczY0KW9mZnNldCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfRkxMKSwKLQkJCQkgICAgbXRlbXApOwotCQl0aW1lX3N0YXR1cyB8PSBTVEFfTU9ERTsKLQl9Ci0JZnJlcV9hZGogKz0gdGltZV9mcmVxOwotCWZyZXFfYWRqID0gbWluKGZyZXFfYWRqLCBNQVhGUkVRX1NDQUxFRCk7Ci0JdGltZV9mcmVxID0gbWF4KGZyZXFfYWRqLCAtTUFYRlJFUV9TQ0FMRUQpOworCW9mZnNldDY0ICAgID0gb2Zmc2V0OworCWZyZXFfYWRqICAgID0gKG9mZnNldDY0ICogc2VjcykgPDwKKwkJCShOVFBfU0NBTEVfU0hJRlQgLSAyICogKFNISUZUX1BMTCArIDIgKyB0aW1lX2NvbnN0YW50KSk7CiAKLQl0aW1lX29mZnNldCA9IGRpdl9zNjQoKHM2NClvZmZzZXQgPDwgTlRQX1NDQUxFX1NISUZULCBOVFBfSU5URVJWQUxfRlJFUSk7CisJZnJlcV9hZGogICAgKz0gbnRwX3VwZGF0ZV9vZmZzZXRfZmxsKG9mZnNldDY0LCBzZWNzKTsKKworCWZyZXFfYWRqICAgID0gbWluKGZyZXFfYWRqICsgdGltZV9mcmVxLCBNQVhGUkVRX1NDQUxFRCk7CisKKwl0aW1lX2ZyZXEgICA9IG1heChmcmVxX2FkaiwgLU1BWEZSRVFfU0NBTEVEKTsKKworCXRpbWVfb2Zmc2V0ID0gZGl2X3M2NChvZmZzZXQ2NCA8PCBOVFBfU0NBTEVfU0hJRlQsIE5UUF9JTlRFUlZBTF9GUkVRKTsKIH0KIAogLyoqCkBAIC0xMTEsMTUgKzE2OCwxNSBAQAogICovCiB2b2lkIG50cF9jbGVhcih2b2lkKQogewotCXRpbWVfYWRqdXN0ID0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLwotCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7Ci0JdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKLQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCXRpbWVfYWRqdXN0CT0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLworCXRpbWVfc3RhdHVzCXw9IFNUQV9VTlNZTkM7CisJdGltZV9tYXhlcnJvcgk9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2VzdGVycm9yCT0gTlRQX1BIQVNFX0xJTUlUOwogCiAJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKIAotCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKLQl0aW1lX29mZnNldCA9IDA7CisJdGlja19sZW5ndGgJPSB0aWNrX2xlbmd0aF9iYXNlOworCXRpbWVfb2Zmc2V0CT0gMDsKIH0KIAogLyoKQEAgLTE0MCw4ICsxOTcsOCBAQAogCQl4dGltZS50dl9zZWMtLTsKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjKys7CiAJCXRpbWVfc3RhdGUgPSBUSU1FX09PUDsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJDbG9jazogIgotCQkgICAgICAgImluc2VydGluZyBsZWFwIHNlY29uZCAyMzo1OTo2MCBVVENcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJDbG9jazogaW5zZXJ0aW5nIGxlYXAgc2Vjb25kIDIzOjU5OjYwIFVUQ1xuIik7CiAJCWhydGltZXJfYWRkX2V4cGlyZXNfbnMoJmxlYXBfdGltZXIsIE5TRUNfUEVSX1NFQyk7CiAJCXJlcyA9IEhSVElNRVJfUkVTVEFSVDsKIAkJYnJlYWs7CkBAIC0xNTAsOCArMjA3LDggQEAKIAkJdGltZV90YWktLTsKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjLS07CiAJCXRpbWVfc3RhdGUgPSBUSU1FX1dBSVQ7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKLQkJICAgICAgICJkZWxldGluZyBsZWFwIHNlY29uZCAyMzo1OTo1OSBVVENcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJDbG9jazogZGVsZXRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NTkgVVRDXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBUSU1FX09PUDoKIAkJdGltZV90YWkrKzsKQEAgLTE3OSw3ICsyMzYsNyBAQAogICovCiB2b2lkIHNlY29uZF9vdmVyZmxvdyh2b2lkKQogewotCXM2NCB0aW1lX2FkajsKKwlzNjQgZGVsdGE7CiAKIAkvKiBCdW1wIHRoZSBtYXhlcnJvciBmaWVsZCAqLwogCXRpbWVfbWF4ZXJyb3IgKz0gTUFYRlJFUSAvIE5TRUNfUEVSX1VTRUM7CkBAIC0xOTIsMjQgKzI0OSwzMCBAQAogCSAqIENvbXB1dGUgdGhlIHBoYXNlIGFkanVzdG1lbnQgZm9yIHRoZSBuZXh0IHNlY29uZC4gVGhlIG9mZnNldCBpcwogCSAqIHJlZHVjZWQgYnkgYSBmaXhlZCBmYWN0b3IgdGltZXMgdGhlIHRpbWUgY29uc3RhbnQuCiAJICovCi0JdGlja19sZW5ndGggPSB0aWNrX2xlbmd0aF9iYXNlOwotCXRpbWVfYWRqID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQsIFNISUZUX1BMTCArIHRpbWVfY29uc3RhbnQpOwotCXRpbWVfb2Zmc2V0IC09IHRpbWVfYWRqOwotCXRpY2tfbGVuZ3RoICs9IHRpbWVfYWRqOworCXRpY2tfbGVuZ3RoCSA9IHRpY2tfbGVuZ3RoX2Jhc2U7CiAKLQlpZiAodW5saWtlbHkodGltZV9hZGp1c3QpKSB7Ci0JCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7Ci0JCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKLQkJCXRpY2tfbGVuZ3RoICs9IE1BWF9USUNLQURKX1NDQUxFRDsKLQkJfSBlbHNlIGlmICh0aW1lX2FkanVzdCA8IC1NQVhfVElDS0FESikgewotCQkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7Ci0JCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7Ci0JCX0gZWxzZSB7Ci0JCQl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLwotCQkJCQlOVFBfSU5URVJWQUxfRlJFUSkgPDwgTlRQX1NDQUxFX1NISUZUOwotCQkJdGltZV9hZGp1c3QgPSAwOwotCQl9CisJZGVsdGEJCSA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKKwl0aW1lX29mZnNldAktPSBkZWx0YTsKKwl0aWNrX2xlbmd0aAkrPSBkZWx0YTsKKworCWlmICghdGltZV9hZGp1c3QpCisJCXJldHVybjsKKworCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7CisJCXRpbWVfYWRqdXN0IC09IE1BWF9USUNLQURKOworCQl0aWNrX2xlbmd0aCArPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCXJldHVybjsKIAl9CisKKwlpZiAodGltZV9hZGp1c3QgPCAtTUFYX1RJQ0tBREopIHsKKwkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7CisJCXRpY2tfbGVuZ3RoIC09IE1BWF9USUNLQURKX1NDQUxFRDsKKwkJcmV0dXJuOworCX0KKworCXRpY2tfbGVuZ3RoICs9IChzNjQpKHRpbWVfYWRqdXN0ICogTlNFQ19QRVJfVVNFQyAvIE5UUF9JTlRFUlZBTF9GUkVRKQorCQkJCQkJCSA8PCBOVFBfU0NBTEVfU0hJRlQ7CisJdGltZV9hZGp1c3QgPSAwOwogfQogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEUKQEAgLTIzMywxMiArMjk2LDEzIEBACiAJICogVGhpcyBjb2RlIGlzIHJ1biBvbiBhIHRpbWVyLiAgSWYgdGhlIGNsb2NrIGlzIHNldCwgdGhhdCB0aW1lcgogCSAqIG1heSBub3QgZXhwaXJlIGF0IHRoZSBjb3JyZWN0IHRpbWUuICBUaHVzLCB3ZSBhZGp1c3QuLi4KIAkgKi8KLQlpZiAoIW50cF9zeW5jZWQoKSkKKwlpZiAoIW50cF9zeW5jZWQoKSkgewogCQkvKgogCQkgKiBOb3Qgc3luY2VkLCBleGl0LCBkbyBub3QgcmVzdGFydCBhIHRpbWVyIChpZiBvbmUgaXMKIAkJICogcnVubmluZywgbGV0IGl0IHJ1biBvdXQpLgogCQkgKi8KIAkJcmV0dXJuOworCX0KIAogCWdldG5zdGltZW9mZGF5KCZub3cpOwogCWlmIChhYnMobm93LnR2X25zZWMgLSAoTlNFQ19QRVJfU0VDIC8gMikpIDw9IHRpY2tfbnNlYyAvIDIpCkBAIC0yNzAsNyArMzM0LDExNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeV9jbW9zX3RpbWVyKHZvaWQpIHsgfQogI2VuZGlmCiAKLS8qIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKKy8qCisgKiBTdGFydCB0aGUgbGVhcCBzZWNvbmRzIHRpbWVyOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnRwX3N0YXJ0X2xlYXBfdGltZXIoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlsb25nIG5vdyA9IHRzLT50dl9zZWM7CisKKwlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKSB7CisJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKKwkJbm93ICs9IDg2NDAwIC0gbm93ICUgODY0MDA7CisJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChub3csIDApLCBIUlRJTUVSX01PREVfQUJTKTsKKworCQlyZXR1cm47CisJfQorCisJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0RFTCkgeworCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7CisJCW5vdyArPSA4NjQwMCAtIChub3cgKyAxKSAlIDg2NDAwOworCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQobm93LCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisJfQorfQorCisvKgorICogUHJvcGFnYXRlIGEgbmV3IHR4Yy0+c3RhdHVzIHZhbHVlIGludG8gdGhlIE5UUCBzdGF0ZToKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfYWRqX3N0YXR1cyhzdHJ1Y3QgdGltZXggKnR4Yywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYgISh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKSB7CisJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CisJfQorCisJLyoKKwkgKiBJZiB3ZSB0dXJuIG9uIFBMTCBhZGp1c3RtZW50cyB0aGVuIHJlc2V0IHRoZQorCSAqIHJlZmVyZW5jZSB0aW1lIHRvIGN1cnJlbnQgdGltZS4KKwkgKi8KKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKQorCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CisKKwkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KKwl0aW1lX3N0YXR1cyAmPSBTVEFfUk9OTFk7CisJdGltZV9zdGF0dXMgfD0gdHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZOworCisJc3dpdGNoICh0aW1lX3N0YXRlKSB7CisJY2FzZSBUSU1FX09LOgorCQludHBfc3RhcnRfbGVhcF90aW1lcih0cyk7CisJCWJyZWFrOworCWNhc2UgVElNRV9JTlM6CisJY2FzZSBUSU1FX0RFTDoKKwkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisJCW50cF9zdGFydF9sZWFwX3RpbWVyKHRzKTsKKwljYXNlIFRJTUVfV0FJVDoKKwkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKKwkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQlicmVhazsKKwljYXNlIFRJTUVfT09QOgorCQlocnRpbWVyX3Jlc3RhcnQoJmxlYXBfdGltZXIpOworCQlicmVhazsKKwl9Cit9CisvKgorICogQ2FsbGVkIHdpdGggdGhlIHh0aW1lIGxvY2sgaGVsZCwgc28gd2UgY2FuIGFjY2VzcyBhbmQgbW9kaWZ5CisgKiBhbGwgdGhlIGdsb2JhbCBOVFAgc3RhdGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2FkanRpbWV4X21vZGVzKHN0cnVjdCB0aW1leCAqdHhjLCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUykKKwkJcHJvY2Vzc19hZGpfc3RhdHVzKHR4YywgdHMpOworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTkFOTykKKwkJdGltZV9zdGF0dXMgfD0gU1RBX05BTk87CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9NSUNSTykKKwkJdGltZV9zdGF0dXMgJj0gflNUQV9OQU5POworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfRlJFUVVFTkNZKSB7CisJCXRpbWVfZnJlcSA9IHR4Yy0+ZnJlcSAqIFBQTV9TQ0FMRTsKKwkJdGltZV9mcmVxID0gbWluKHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOworCQl0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtTUFYRlJFUV9TQ0FMRUQpOworCX0KKworCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQorCQl0aW1lX21heGVycm9yID0gdHhjLT5tYXhlcnJvcjsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX0VTVEVSUk9SKQorCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJTUVDT05TVCkgeworCQl0aW1lX2NvbnN0YW50ID0gdHhjLT5jb25zdGFudDsKKwkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCQl0aW1lX2NvbnN0YW50ICs9IDQ7CisJCXRpbWVfY29uc3RhbnQgPSBtaW4odGltZV9jb25zdGFudCwgKGxvbmcpTUFYVEMpOworCQl0aW1lX2NvbnN0YW50ID0gbWF4KHRpbWVfY29uc3RhbnQsIDBsKTsKKwl9CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCisJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkKKwkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKKwkJdGlja191c2VjID0gdHhjLT50aWNrOworCisJaWYgKHR4Yy0+bW9kZXMgJiAoQURKX1RJQ0t8QURKX0ZSRVFVRU5DWXxBREpfT0ZGU0VUKSkKKwkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKK30KKworLyoKKyAqIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKICAqIGtlcm5lbCB0aW1lLWtlZXBpbmcgdmFyaWFibGVzLiB1c2VkIGJ5IHhudHBkLgogICovCiBpbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCkBAIC0yOTEsMTEgKzQ2NCwxNCBAQAogCQkgaWYgKHR4Yy0+bW9kZXMgJiYgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJLyogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEgKi8KKwkJLyoKKwkJICogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSB0aGVuCisJCSAqIHNvbWV0aGluZyBpcyBWRVJZIHdyb25nIQorCQkgKi8KIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSyAmJgogCQkgICAgKHR4Yy0+dGljayA8ICA5MDAwMDAvVVNFUl9IWiB8fAogCQkgICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMgJiYgdGltZV9zdGF0ZSAhPSBUSU1FX09LKQogCQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwpAQCAtMzA1LDcgKzQ4MSw2IEBACiAKIAl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKLQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW0gKi8KIAlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CiAJCWxvbmcgc2F2ZV9hZGp1c3QgPSB0aW1lX2FkanVzdDsKIApAQCAtMzE1LDk4ICs0OTAsMjQgQEAKIAkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAJCX0KIAkJdHhjLT5vZmZzZXQgPSBzYXZlX2FkanVzdDsKLQkJZ290byBhZGpfZG9uZTsKLQl9Ci0JaWYgKHR4Yy0+bW9kZXMpIHsKLQkJbG9uZyBzZWM7CisJfSBlbHNlIHsKIAotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpIHsKLQkJCWlmICgodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJgotCQkJICAgICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgewotCQkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOwotCQkJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKLQkJCX0KLQkJCS8qIG9ubHkgc2V0IGFsbG93ZWQgYml0cyAqLwotCQkJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOwotCQkJdGltZV9zdGF0dXMgfD0gdHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZOworCQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW06ICovCisJCWlmICh0eGMtPm1vZGVzKQorCQkJcHJvY2Vzc19hZGp0aW1leF9tb2Rlcyh0eGMsICZ0cyk7CiAKLQkJCXN3aXRjaCAodGltZV9zdGF0ZSkgewotCQkJY2FzZSBUSU1FX09LOgotCQkJc3RhcnRfdGltZXI6Ci0JCQkJc2VjID0gdHMudHZfc2VjOwotCQkJCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9JTlMpIHsKLQkJCQkJdGltZV9zdGF0ZSA9IFRJTUVfSU5TOwotCQkJCQlzZWMgKz0gODY0MDAgLSBzZWMgJSA4NjQwMDsKLQkJCQkJaHJ0aW1lcl9zdGFydCgmbGVhcF90aW1lciwga3RpbWVfc2V0KHNlYywgMCksIEhSVElNRVJfTU9ERV9BQlMpOwotCQkJCX0gZWxzZSBpZiAodGltZV9zdGF0dXMgJiBTVEFfREVMKSB7Ci0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX0RFTDsKLQkJCQkJc2VjICs9IDg2NDAwIC0gKHNlYyArIDEpICUgODY0MDA7Ci0JCQkJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChzZWMsIDApLCBIUlRJTUVSX01PREVfQUJTKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJTUVfSU5TOgotCQkJY2FzZSBUSU1FX0RFTDoKLQkJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQkJCQlnb3RvIHN0YXJ0X3RpbWVyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX1dBSVQ6Ci0JCQkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKLQkJCQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJTUVfT09QOgotCQkJCWhydGltZXJfcmVzdGFydCgmbGVhcF90aW1lcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9OQU5PKQotCQkJdGltZV9zdGF0dXMgfD0gU1RBX05BTk87Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX01JQ1JPKQotCQkJdGltZV9zdGF0dXMgJj0gflNUQV9OQU5POwotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgewotCQkJdGltZV9mcmVxID0gKHM2NCl0eGMtPmZyZXEgKiBQUE1fU0NBTEU7Ci0JCQl0aW1lX2ZyZXEgPSBtaW4odGltZV9mcmVxLCBNQVhGUkVRX1NDQUxFRCk7Ci0JCQl0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtTUFYRlJFUV9TQ0FMRUQpOwotCQl9Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUFYRVJST1IpCi0JCQl0aW1lX21heGVycm9yID0gdHhjLT5tYXhlcnJvcjsKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfRVNURVJST1IpCi0JCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USU1FQ09OU1QpIHsKLQkJCXRpbWVfY29uc3RhbnQgPSB0eGMtPmNvbnN0YW50OwotCQkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCi0JCQkJdGltZV9jb25zdGFudCArPSA0OwotCQkJdGltZV9jb25zdGFudCA9IG1pbih0aW1lX2NvbnN0YW50LCAobG9uZylNQVhUQyk7Ci0JCQl0aW1lX2NvbnN0YW50ID0gbWF4KHRpbWVfY29uc3RhbnQsIDBsKTsKLQkJfQotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX1RBSSAmJiB0eGMtPmNvbnN0YW50ID4gMCkKLQkJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCi0JCQludHBfdXBkYXRlX29mZnNldCh0eGMtPm9mZnNldCk7Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCi0JCQl0aWNrX3VzZWMgPSB0eGMtPnRpY2s7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiAoQURKX1RJQ0t8QURKX0ZSRVFVRU5DWXxBREpfT0ZGU0VUKSkKLQkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7Ci0JfQotCi0JdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAorCQl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCiAJCQkJICBOVFBfU0NBTEVfU0hJRlQpOwotCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKKwkJCXR4Yy0+b2Zmc2V0IC89IE5TRUNfUEVSX1VTRUM7CisJfQogCi1hZGpfZG9uZToKIAlyZXN1bHQgPSB0aW1lX3N0YXRlOwkvKiBtb3N0bHkgYFRJTUVfT0snICovCiAJaWYgKHRpbWVfc3RhdHVzICYgKFNUQV9VTlNZTkN8U1RBX0NMT0NLRVJSKSkKIAkJcmVzdWx0ID0gVElNRV9FUlJPUjsKIAogCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KCh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgotCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLCBOVFBfU0NBTEVfU0hJRlQpOworCQkJCQkgUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKIAl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKIAl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKIAl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOwpAQCAtNDI1LDYgKzUyNiw3IEBACiAJdHhjLT5jYWxjbnQJICAgPSAwOwogCXR4Yy0+ZXJyY250CSAgID0gMDsKIAl0eGMtPnN0YmNudAkgICA9IDA7CisKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAogCXR4Yy0+dGltZS50dl9zZWMgPSB0cy50dl9zZWM7CkBAIC00NDAsNiArNTQyLDggQEAKIHN0YXRpYyBpbnQgX19pbml0IG50cF90aWNrX2Fkal9zZXR1cChjaGFyICpzdHIpCiB7CiAJbnRwX3RpY2tfYWRqID0gc2ltcGxlX3N0cnRvbChzdHIsIE5VTEwsIDApOworCW50cF90aWNrX2FkaiA8PD0gTlRQX1NDQUxFX1NISUZUOworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVjb21wYXJlLmMgYi9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWVjb21wYXJlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisKKy8qCisgKiBmaXhlZCBwb2ludCBhcml0aG1ldGljIHNjYWxlIGZhY3RvciBmb3Igc2tldworICoKKyAqIFVzdWFsbHkgb25lIHdvdWxkIG1lYXN1cmUgc2tldyBpbiBwcGIgKHBhcnRzIHBlciBiaWxsaW9uLCAxZTkpLCBidXQKKyAqIHVzaW5nIGEgZmFjdG9yIG9mIDIgc2ltcGxpZmllcyB0aGUgbWF0aC4KKyAqLworI2RlZmluZSBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04gKCgoczY0KTEpPDwzMCkKKwora3RpbWVfdCB0aW1lY29tcGFyZV90cmFuc2Zvcm0oc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJICAgICAgdTY0IHNvdXJjZV90c3RhbXApCit7CisJdTY0IG5zZWM7CisKKwluc2VjID0gc291cmNlX3RzdGFtcCArIHN5bmMtPm9mZnNldDsKKwluc2VjICs9IChzNjQpKHNvdXJjZV90c3RhbXAgLSBzeW5jLT5sYXN0X3VwZGF0ZSkgKiBzeW5jLT5za2V3IC8KKwkJVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OOworCisJcmV0dXJuIG5zX3RvX2t0aW1lKG5zZWMpOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY29tcGFyZV90cmFuc2Zvcm0pOworCitpbnQgdGltZWNvbXBhcmVfb2Zmc2V0KHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJICAgICAgIHM2NCAqb2Zmc2V0LAorCQkgICAgICAgdTY0ICpzb3VyY2VfdHN0YW1wKQoreworCXU2NCBzdGFydF9zb3VyY2UgPSAwLCBlbmRfc291cmNlID0gMDsKKwlzdHJ1Y3QgeworCQlzNjQgb2Zmc2V0OworCQlzNjQgZHVyYXRpb25fdGFyZ2V0OworCX0gYnVmZmVyWzEwXSwgc2FtcGxlLCAqc2FtcGxlczsKKwlpbnQgY291bnRlciA9IDAsIGk7CisJaW50IHVzZWQ7CisJaW50IGluZGV4OworCWludCBudW1fc2FtcGxlcyA9IHN5bmMtPm51bV9zYW1wbGVzOworCisJaWYgKG51bV9zYW1wbGVzID4gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSkpIHsKKwkJc2FtcGxlcyA9IGttYWxsb2Moc2l6ZW9mKCpzYW1wbGVzKSAqIG51bV9zYW1wbGVzLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFzYW1wbGVzKSB7CisJCQlzYW1wbGVzID0gYnVmZmVyOworCQkJbnVtX3NhbXBsZXMgPSBzaXplb2YoYnVmZmVyKS9zaXplb2YoYnVmZmVyWzBdKTsKKwkJfQorCX0gZWxzZSB7CisJCXNhbXBsZXMgPSBidWZmZXI7CisJfQorCisJLyogcnVuIHVudGlsIHdlIGhhdmUgZW5vdWdoIHZhbGlkIHNhbXBsZXMsIGJ1dCBkbyBub3QgdHJ5IGZvcmV2ZXIgKi8KKwlpID0gMDsKKwljb3VudGVyID0gMDsKKwl3aGlsZSAoMSkgeworCQl1NjQgdHM7CisJCWt0aW1lX3Qgc3RhcnQsIGVuZDsKKworCQlzdGFydCA9IHN5bmMtPnRhcmdldCgpOworCQl0cyA9IHRpbWVjb3VudGVyX3JlYWQoc3luYy0+c291cmNlKTsKKwkJZW5kID0gc3luYy0+dGFyZ2V0KCk7CisKKwkJaWYgKCFpKQorCQkJc3RhcnRfc291cmNlID0gdHM7CisKKwkJLyogaWdub3JlIG5lZ2F0aXZlIGR1cmF0aW9ucyAqLworCQlzYW1wbGUuZHVyYXRpb25fdGFyZ2V0ID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGVuZCwgc3RhcnQpKTsKKwkJaWYgKHNhbXBsZS5kdXJhdGlvbl90YXJnZXQgPj0gMCkgeworCQkJLyoKKwkJCSAqIGFzc3VtZSBzeW1ldHJpYyBkZWxheSB0byBhbmQgZnJvbSBzb3VyY2U6CisJCQkgKiBhdmVyYWdlIHRhcmdldCB0aW1lIGNvcnJlc3BvbmRzIHRvIG1lYXN1cmVkCisJCQkgKiBzb3VyY2UgdGltZQorCQkJICovCisJCQlzYW1wbGUub2Zmc2V0ID0KKwkJCQlrdGltZV90b19ucyhrdGltZV9hZGQoZW5kLCBzdGFydCkpIC8gMiAtCisJCQkJdHM7CisKKwkJCS8qIHNpbXBsZSBpbnNlcnRpb24gc29ydCBiYXNlZCBvbiBkdXJhdGlvbiAqLworCQkJaW5kZXggPSBjb3VudGVyIC0gMTsKKwkJCXdoaWxlIChpbmRleCA+PSAwKSB7CisJCQkJaWYgKHNhbXBsZXNbaW5kZXhdLmR1cmF0aW9uX3RhcmdldCA8CisJCQkJICAgIHNhbXBsZS5kdXJhdGlvbl90YXJnZXQpCisJCQkJCWJyZWFrOworCQkJCXNhbXBsZXNbaW5kZXggKyAxXSA9IHNhbXBsZXNbaW5kZXhdOworCQkJCWluZGV4LS07CisJCQl9CisJCQlzYW1wbGVzW2luZGV4ICsgMV0gPSBzYW1wbGU7CisJCQljb3VudGVyKys7CisJCX0KKworCQlpKys7CisJCWlmIChjb3VudGVyID49IG51bV9zYW1wbGVzIHx8IGkgPj0gMTAwMDAwKSB7CisJCQllbmRfc291cmNlID0gdHM7CisJCQlicmVhazsKKwkJfQorCX0KKworCSpzb3VyY2VfdHN0YW1wID0gKGVuZF9zb3VyY2UgKyBzdGFydF9zb3VyY2UpIC8gMjsKKworCS8qIHJlbW92ZSBvdXRsaWVycyBieSBvbmx5IHVzaW5nIDc1JSBvZiB0aGUgc2FtcGxlcyAqLworCXVzZWQgPSBjb3VudGVyICogMyAvIDQ7CisJaWYgKCF1c2VkKQorCQl1c2VkID0gY291bnRlcjsKKwlpZiAodXNlZCkgeworCQkvKiBjYWxjdWxhdGUgYXZlcmFnZSAqLworCQlzNjQgb2ZmID0gMDsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdXNlZDsgaW5kZXgrKykKKwkJCW9mZiArPSBzYW1wbGVzW2luZGV4XS5vZmZzZXQ7CisJCSpvZmZzZXQgPSBkaXZfczY0KG9mZiwgdXNlZCk7CisJfQorCisJaWYgKHNhbXBsZXMgJiYgc2FtcGxlcyAhPSBidWZmZXIpCisJCWtmcmVlKHNhbXBsZXMpOworCisJcmV0dXJuIHVzZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWVjb21wYXJlX29mZnNldCk7CisKK3ZvaWQgX190aW1lY29tcGFyZV91cGRhdGUoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJICB1NjQgc291cmNlX3RzdGFtcCkKK3sKKwlzNjQgb2Zmc2V0OworCXU2NCBhdmVyYWdlX3RpbWU7CisKKwlpZiAoIXRpbWVjb21wYXJlX29mZnNldChzeW5jLCAmb2Zmc2V0LCAmYXZlcmFnZV90aW1lKSkKKwkJcmV0dXJuOworCisJaWYgKCFzeW5jLT5sYXN0X3VwZGF0ZSkgeworCQlzeW5jLT5sYXN0X3VwZGF0ZSA9IGF2ZXJhZ2VfdGltZTsKKwkJc3luYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQlzeW5jLT5za2V3ID0gMDsKKwl9IGVsc2UgeworCQlzNjQgZGVsdGFfbnNlYyA9IGF2ZXJhZ2VfdGltZSAtIHN5bmMtPmxhc3RfdXBkYXRlOworCisJCS8qIGF2b2lkIGRpdmlzaW9uIGJ5IG5lZ2F0aXZlIG9yIHNtYWxsIGRlbHRhcyAqLworCQlpZiAoZGVsdGFfbnNlYyA+PSAxMDAwMCkgeworCQkJczY0IGRlbHRhX29mZnNldF9uc2VjID0gb2Zmc2V0IC0gc3luYy0+b2Zmc2V0OworCQkJczY0IHNrZXc7IC8qIGRlbHRhX29mZnNldF9uc2VjICoKKwkJCQkgICAgIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTiAvCisJCQkJICAgICBkZWx0YV9uc2VjICovCisJCQl1NjQgZGl2aXNvcjsKKworCQkJLyogZGl2X3M2NCgpIGlzIGxpbWl0ZWQgdG8gMzIgYml0IGRpdmlzb3IgKi8KKwkJCXNrZXcgPSBkZWx0YV9vZmZzZXRfbnNlYyAqIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTjsKKwkJCWRpdmlzb3IgPSBkZWx0YV9uc2VjOworCQkJd2hpbGUgKHVubGlrZWx5KGRpdmlzb3IgPj0gKChzNjQpMSkgPDwgMzIpKSB7CisJCQkJLyogZGl2aWRlIGJvdGggYnkgMjsgYmV3YXJlLCByaWdodCBzaGlmdAorCQkJCSAgIG9mIG5lZ2F0aXZlIHZhbHVlIGhhcyB1bmRlZmluZWQKKwkJCQkgICBiZWhhdmlvciBhbmQgY2FuIG9ubHkgYmUgdXNlZCBmb3IKKwkJCQkgICB0aGUgcG9zaXRpdmUgZGl2aXNvciAqLworCQkJCXNrZXcgPSBkaXZfczY0KHNrZXcsIDIpOworCQkJCWRpdmlzb3IgPj49IDE7CisJCQl9CisJCQlza2V3ID0gZGl2X3M2NChza2V3LCBkaXZpc29yKTsKKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSBuZXcgb3ZlcmFsbCBza2V3IGFzIDQvMTYgdGhlCisJCQkgKiBvbGQgdmFsdWUgYW5kIDEyLzE2IHRoZSBuZXcgb25lLiBUaGlzIGlzCisJCQkgKiBhIHJhdGhlciBhcmJpdHJhcnkgdHJhZGVvZmYgYmV0d2VlbgorCQkJICogb25seSB1c2luZyB0aGUgbGF0ZXN0IG1lYXN1cmVtZW50ICgwLzE2IGFuZAorCQkJICogMTYvMTYpIGFuZCBldmVuIG1vcmUgd2VpZ2h0IG9uIHBhc3QgbWVhc3VyZW1lbnRzLgorCQkJICovCisjZGVmaW5lIFRJTUVDT01QQVJFX05FV19TS0VXX1BFUl8xNiAxMgorCQkJc3luYy0+c2tldyA9CisJCQkJZGl2X3M2NCgoMTYgLSBUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYpICoKKwkJCQkJc3luYy0+c2tldyArCisJCQkJCVRJTUVDT01QQVJFX05FV19TS0VXX1BFUl8xNiAqIHNrZXcsCisJCQkJCTE2KTsKKwkJCXN5bmMtPmxhc3RfdXBkYXRlID0gYXZlcmFnZV90aW1lOworCQkJc3luYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChfX3RpbWVjb21wYXJlX3VwZGF0ZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDEzZGQ2NGYuLjliNzdmYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC01ODksMTEgKzU4OSwxNCBAQAogCX0KIH0KIAotaW50IF9fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQorc3RhdGljIGlubGluZSBpbnQKK19fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzLCBib29sIHBlbmRpbmdfb25seSkKIHsKIAlzdHJ1Y3QgdHZlY19iYXNlICpiYXNlLCAqbmV3X2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKIAogCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKIAlCVUdfT04oIXRpbWVyLT5mdW5jdGlvbik7CkBAIC02MDMsNiArNjA2LDkgQEAKIAlpZiAodGltZXJfcGVuZGluZyh0aW1lcikpIHsKIAkJZGV0YWNoX3RpbWVyKHRpbWVyLCAwKTsKIAkJcmV0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAocGVuZGluZ19vbmx5KQorCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWRlYnVnX3RpbWVyX2FjdGl2YXRlKHRpbWVyKTsKQEAgLTYyOSwxMiArNjM1LDgzIEBACiAKIAl0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7CiAJaW50ZXJuYWxfYWRkX3RpbWVyKGJhc2UsIHRpbWVyKTsKKworb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKF9fbW9kX3RpbWVyKTsKKy8qKgorICogbW9kX3RpbWVyX3BlbmRpbmcgLSBtb2RpZnkgYSBwZW5kaW5nIHRpbWVyJ3MgdGltZW91dAorICogQHRpbWVyOiB0aGUgcGVuZGluZyB0aW1lciB0byBiZSBtb2RpZmllZAorICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKKyAqCisgKiBtb2RfdGltZXJfcGVuZGluZygpIGlzIHRoZSBzYW1lIGZvciBwZW5kaW5nIHRpbWVycyBhcyBtb2RfdGltZXIoKSwKKyAqIGJ1dCB3aWxsIG5vdCByZS1hY3RpdmF0ZSBhbmQgbW9kaWZ5IGFscmVhZHkgZGVsZXRlZCB0aW1lcnMuCisgKgorICogSXQgaXMgdXNlZnVsIGZvciB1bnNlcmlhbGl6ZWQgdXNlIG9mIHRpbWVycy4KKyAqLworaW50IG1vZF90aW1lcl9wZW5kaW5nKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQoreworCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcywgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKG1vZF90aW1lcl9wZW5kaW5nKTsKKworLyoqCisgKiBtb2RfdGltZXIgLSBtb2RpZnkgYSB0aW1lcidzIHRpbWVvdXQKKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIG1vZGlmaWVkCisgKiBAZXhwaXJlczogbmV3IHRpbWVvdXQgaW4gamlmZmllcworICoKKyAqIG1vZF90aW1lcigpIGlzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHVwZGF0ZSB0aGUgZXhwaXJlIGZpZWxkIG9mIGFuCisgKiBhY3RpdmUgdGltZXIgKGlmIHRoZSB0aW1lciBpcyBpbmFjdGl2ZSBpdCB3aWxsIGJlIGFjdGl2YXRlZCkKKyAqCisgKiBtb2RfdGltZXIodGltZXIsIGV4cGlyZXMpIGlzIGVxdWl2YWxlbnQgdG86CisgKgorICogICAgIGRlbF90aW1lcih0aW1lcik7IHRpbWVyLT5leHBpcmVzID0gZXhwaXJlczsgYWRkX3RpbWVyKHRpbWVyKTsKKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHVuc2VyaWFsaXplZCBjb25jdXJyZW50IHVzZXJzIG9mIHRoZQorICogc2FtZSB0aW1lciwgdGhlbiBtb2RfdGltZXIoKSBpcyB0aGUgb25seSBzYWZlIHdheSB0byBtb2RpZnkgdGhlIHRpbWVvdXQsCisgKiBzaW5jZSBhZGRfdGltZXIoKSBjYW5ub3QgbW9kaWZ5IGFuIGFscmVhZHkgcnVubmluZyB0aW1lci4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB3aGV0aGVyIGl0IGhhcyBtb2RpZmllZCBhIHBlbmRpbmcgdGltZXIgb3Igbm90LgorICogKGllLiBtb2RfdGltZXIoKSBvZiBhbiBpbmFjdGl2ZSB0aW1lciByZXR1cm5zIDAsIG1vZF90aW1lcigpIG9mIGFuCisgKiBhY3RpdmUgdGltZXIgcmV0dXJucyAxLikKKyAqLworaW50IG1vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3sKKwkvKgorCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKKwkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKKwkgKiB0byBiZSB0aGUgc2FtZSB0aGluZyB0aGVuIGp1c3QgcmV0dXJuOgorCSAqLworCWlmICh0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzICYmIHRpbWVyX3BlbmRpbmcodGltZXIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcywgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOworCisvKioKKyAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCisgKgorICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCisgKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlcyBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKKyAqIGN1cnJlbnQgdGltZSBpcyAnamlmZmllcycuCisgKgorICogVGhlIHRpbWVyJ3MgLT5leHBpcmVzLCAtPmZ1bmN0aW9uIChhbmQgaWYgdGhlIGhhbmRsZXIgdXNlcyBpdCwgLT5kYXRhKQorICogZmllbGRzIG11c3QgYmUgc2V0IHByaW9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZXMgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAorICogdGltZXIgdGljay4KKyAqLwordm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSk7CisJbW9kX3RpbWVyKHRpbWVyLCB0aW1lci0+ZXhwaXJlcyk7Cit9CitFWFBPUlRfU1lNQk9MKGFkZF90aW1lcik7CiAKIC8qKgogICogYWRkX3RpbWVyX29uIC0gc3RhcnQgYSB0aW1lciBvbiBhIHBhcnRpY3VsYXIgQ1BVCkBAIC02NjcsNDQgKzc0NCw2IEBACiB9CiAKIC8qKgotICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0Ci0gKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZAotICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKLSAqCi0gKiBtb2RfdGltZXIoKSBpcyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byB1cGRhdGUgdGhlIGV4cGlyZSBmaWVsZCBvZiBhbgotICogYWN0aXZlIHRpbWVyIChpZiB0aGUgdGltZXIgaXMgaW5hY3RpdmUgaXQgd2lsbCBiZSBhY3RpdmF0ZWQpCi0gKgotICogbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKSBpcyBlcXVpdmFsZW50IHRvOgotICoKLSAqICAgICBkZWxfdGltZXIodGltZXIpOyB0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7IGFkZF90aW1lcih0aW1lcik7Ci0gKgotICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB1bnNlcmlhbGl6ZWQgY29uY3VycmVudCB1c2VycyBvZiB0aGUKLSAqIHNhbWUgdGltZXIsIHRoZW4gbW9kX3RpbWVyKCkgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0LAotICogc2luY2UgYWRkX3RpbWVyKCkgY2Fubm90IG1vZGlmeSBhbiBhbHJlYWR5IHJ1bm5pbmcgdGltZXIuCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciBpdCBoYXMgbW9kaWZpZWQgYSBwZW5kaW5nIHRpbWVyIG9yIG5vdC4KLSAqIChpZS4gbW9kX3RpbWVyKCkgb2YgYW4gaW5hY3RpdmUgdGltZXIgcmV0dXJucyAwLCBtb2RfdGltZXIoKSBvZiBhbgotICogYWN0aXZlIHRpbWVyIHJldHVybnMgMS4pCi0gKi8KLWludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCi17Ci0JQlVHX09OKCF0aW1lci0+ZnVuY3Rpb24pOwotCi0JdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwotCS8qCi0JICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQotCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZAotCSAqIHRvIGJlIHRoZSBzYW1lIHRoaW5nIHRoZW4ganVzdCByZXR1cm46Ci0JICovCi0JaWYgKHRpbWVyLT5leHBpcmVzID09IGV4cGlyZXMgJiYgdGltZXJfcGVuZGluZyh0aW1lcikpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIF9fbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKTsKLX0KLQotRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOwotCi0vKioKICAqIGRlbF90aW1lciAtIGRlYWN0aXZlIGEgdGltZXIuCiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBkZWFjdGl2YXRlZAogICoKQEAgLTczMyw3ICs3NzIsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTChkZWxfdGltZXIpOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzY3LDcgKzgwNSw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MKHRyeV90b19kZWxfdGltZXJfc3luYyk7CiAKIC8qKgpAQCAtNzk2LDcgKzgzMyw2IEBACiAJCWNwdV9yZWxheCgpOwogCX0KIH0KLQogRVhQT1JUX1NZTUJPTChkZWxfdGltZXJfc3luYyk7CiAjZW5kaWYKIApAQCAtMTI2OCw3ICsxMzA0LDcgQEAKIAlleHBpcmUgPSB0aW1lb3V0ICsgamlmZmllczsKIAogCXNldHVwX3RpbWVyX29uX3N0YWNrKCZ0aW1lciwgcHJvY2Vzc190aW1lb3V0LCAodW5zaWduZWQgbG9uZyljdXJyZW50KTsKLQlfX21vZF90aW1lcigmdGltZXIsIGV4cGlyZSk7CisJX19tb2RfdGltZXIoJnRpbWVyLCBleHBpcmUsIGZhbHNlKTsKIAlzY2hlZHVsZSgpOwogCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggZmJiMzAwZS4uODUwZTBiYSAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIHN0cnVjdCB1c2VyX25hbWVzcGFjZSBpbml0X3VzZXJfbnMgPSB7CiAJLmtyZWYgPSB7Ci0JCS5yZWZjb3VudAk9IEFUT01JQ19JTklUKDEpLAorCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgyKSwKIAl9LAogCS5jcmVhdG9yID0gJnJvb3RfdXNlciwKIH07CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDAzYzJjMjQuLjJhOWM2OWYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC05OCw2ICs5OCwyMCBAQAogCXRyaXN0YXRlCiAKICMKKyMgVGhlc2UgYWxsIHByb3ZpZGUgYSBjb21tb24gaW50ZXJmYWNlIChoZW5jZSB0aGUgYXBwYXJlbnQgZHVwbGljYXRpb24gd2l0aAorIyBaTElCX0lORkxBVEU7IERFQ09NUFJFU1NfR1pJUCBpcyBqdXN0IGEgd3JhcHBlci4pCisjCitjb25maWcgREVDT01QUkVTU19HWklQCisJc2VsZWN0IFpMSUJfSU5GTEFURQorCXRyaXN0YXRlCisKK2NvbmZpZyBERUNPTVBSRVNTX0JaSVAyCisJdHJpc3RhdGUKKworY29uZmlnIERFQ09NUFJFU1NfTFpNQQorCXRyaXN0YXRlCisKKyMKICMgR2VuZXJpYyBhbGxvY2F0b3Igc3VwcG9ydCBpcyBzZWxlY3RlZCBpZiBuZWVkZWQKICMKIGNvbmZpZyBHRU5FUklDX0FMTE9DQVRPUgpAQCAtMTM2LDEyICsxNTAsNiBAQAogY29uZmlnIFRFWFRTRUFSQ0hfRlNNCiAJdHJpc3RhdGUKIAotIwotIyBwbGlzdCBzdXBwb3J0IGlzIHNlbGVjdCNlZCBpZiBuZWVkZWQKLSMKLWNvbmZpZyBQTElTVAotCWJvb2xlYW4KLQogY29uZmlnIEhBU19JT01FTQogCWJvb2xlYW4KIAlkZXBlbmRzIG9uICFOT19JT01FTQpAQCAtMTc0LDQgKzE4MiwxMCBAQAogICAgICAgIGJvb2wgIkRpc2FibGUgb2Jzb2xldGUgY3B1bWFzayBmdW5jdGlvbnMiIGlmIERFQlVHX1BFUl9DUFVfTUFQUwogICAgICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEJST0tFTgogCisjCisjIE5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgc3VwcG9ydCBpcyBzZWxlY3QnZWQgaWYgbmVlZGVkCisjCitjb25maWcgTkxBVFRSCisJYm9vbAorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDFiY2Y5Y2QuLjA2MjZmYTQgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC00MDIsNyArNDAyLDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCiAJc2VsZWN0IFNUQUNLVFJBQ0UKLQlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhWDg2ICYmICFNSVBTICYmICFQUEMKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhWDg2ICYmICFNSVBTICYmICFQUEMgJiYgIUFSTV9VTldJTkQKIAlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgS0FMTFNZTVNfQUxMCiAKQEAgLTg0Nyw2MCArODQ3LDcwIEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgRFlOQU1JQ19QUklOVEtfREVCVUcKLQlib29sICJFbmFibGUgZHluYW1pYyBwcmludGsoKSBjYWxsIHN1cHBvcnQiCitjb25maWcgRFlOQU1JQ19ERUJVRworCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIHN1cHBvcnQiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBQUklOVEsKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJc2VsZWN0IFBSSU5US19ERUJVRwogCWhlbHAKIAogCSAgQ29tcGlsZXMgZGVidWcgbGV2ZWwgbWVzc2FnZXMgaW50byB0aGUga2VybmVsLCB3aGljaCB3b3VsZCBub3QKIAkgIG90aGVyd2lzZSBiZSBhdmFpbGFibGUgYXQgcnVudGltZS4gVGhlc2UgbWVzc2FnZXMgY2FuIHRoZW4gYmUKLQkgIGVuYWJsZWQvZGlzYWJsZWQgb24gYSBwZXIgbW9kdWxlIGJhc2lzLiBUaGlzIG1lY2hhbmlzbSBpbXBsaWNpdGx5Ci0JICBlbmFibGVzIGFsbCBwcl9kZWJ1ZygpIGFuZCBkZXZfZGJnKCkgY2FsbHMuIFRoZSBpbXBhY3Qgb2YgdGhpcwotCSAgY29tcGlsZSBvcHRpb24gaXMgYSBsYXJnZXIga2VybmVsIHRleHQgc2l6ZSBvZiBhYm91dCAyJS4KKwkgIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gdmFyaW91cyBsZXZlbHMgb2Ygc2NvcGUgLSBwZXIgc291cmNlIGZpbGUsCisJICBmdW5jdGlvbiwgbW9kdWxlLCBmb3JtYXQgc3RyaW5nLCBhbmQgbGluZSBudW1iZXIuIFRoaXMgbWVjaGFuaXNtCisJICBpbXBsaWNpdGx5IGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZgorCSAgdGhpcyBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgogCiAJICBVc2FnZToKIAotCSAgRHluYW1pYyBkZWJ1Z2dpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgZGVidWdmcyBmaWxlLAotCSAgZHluYW1pY19wcmludGsvbW9kdWxlcy4gVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgbW9kdWxlcyB0aGF0Ci0JICBjYW4gYmUgZW5hYmxlZC4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyB0aGUgbW9kdWxlIG5hbWUsIGZvbGxvd2VkCi0JICBieSBhIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUgZmlyc3QgZmxhZyBpcyBhbHdheXMgdGhlCi0JICAnZW5hYmxlZCcgZmxhZy4gRm9yIGV4YW1wbGU6CisJICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIHZpYSB0aGUgJ2R5bmFtaWNfZGVidWcvZGRlYnVnJyBmaWxlLAorCSAgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSAnZGVidWdmcycgZmlsZXN5c3RlbS4gVGh1cywgdGhlIGRlYnVnZnMKKwkgIGZpbGVzeXN0ZW0gbXVzdCBmaXJzdCBiZSBtb3VudGVkIGJlZm9yZSBtYWtpbmcgdXNlIG9mIHRoaXMgZmVhdHVyZS4KKwkgIFdlIHJlZmVyIHRoZSBjb250cm9sIGZpbGUgYXM6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1Zy4gVGhpcworCSAgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMgdGhhdCBjYW4gYmUgZW5hYmxlZC4gVGhlCisJICBmb3JtYXQgZm9yIGVhY2ggbGluZSBvZiB0aGUgZmlsZSBpczoKIAotCQk8bW9kdWxlX25hbWU+IDxlbmFibGVkPTAvMT4KLQkJCQkuCi0JCQkJLgotCQkJCS4KKwkJZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CiAKLQkgIDxtb2R1bGVfbmFtZT4gOiBOYW1lIG9mIHRoZSBtb2R1bGUgaW4gd2hpY2ggdGhlIGRlYnVnIGNhbGwgcmVzaWRlcwotCSAgPGVuYWJsZWQ9MC8xPiA6IHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGFyZSBlbmFibGVkIG9yIG5vdAorCSAgZmlsZW5hbWUgOiBzb3VyY2UgZmlsZSBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBsaW5lbm8gOiBsaW5lIG51bWJlciBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBtb2R1bGUgOiBtb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZGVidWcgc3RhdGVtZW50CisJICBmdW5jdGlvbiA6IGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGRlYnVnIHN0YXRlbWVudAorICAgICAgICAgIGZsYWdzIDogJ3AnIG1lYW5zIHRoZSBsaW5lIGlzIHR1cm5lZCAnb24nIGZvciBwcmludGluZworICAgICAgICAgIGZvcm1hdCA6IHRoZSBmb3JtYXQgdXNlZCBmb3IgdGhlIGRlYnVnIHN0YXRlbWVudAogCiAJICBGcm9tIGEgbGl2ZSBzeXN0ZW06CiAKLQkJc25kX2hkYV9pbnRlbCBlbmFibGVkPTAKLQkJZml4dXAgZW5hYmxlZD0wCi0JCWRyaXZlciBlbmFibGVkPTAKKwkJbnVsbGFyYm9yOn4gIyBjYXQgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCisJCSMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisJCWZzL2Fpby5jOjIyMiBbYWlvXV9fcHV0X2lvY3R4IC0gIl9fcHV0X2lvY3R4OlwwNDBmcmVlaW5nXDA0MCVwXDAxMiIKKwkJZnMvYWlvLmM6MjQ4IFthaW9daW9jdHhfYWxsb2MgLSAiRU5PTUVNOlwwNDBucl9ldmVudHNcMDQwdG9vXDA0MGhpZ2hcMDEyIgorCQlmcy9haW8uYzoxNzcwIFthaW9dc3lzX2lvX2NhbmNlbCAtICJjYWxsaW5nXDA0MGNhbmNlbFwwMTIiCiAKLQkgIEVuYWJsZSBhIG1vZHVsZToKKwkgIEV4YW1wbGUgdXNhZ2U6CiAKLQkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MSA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZW5hYmxlIHRoZSBtZXNzYWdlIGF0IGxpbmUgMTYwMyBvZiBmaWxlIHN2Y3NvY2suYworCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIERpc2FibGUgYSBtb2R1bGU6CisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIGZpbGUgc3Zjc29jay5jCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICAJJGVjaG8gInNldCBlbmFibGVkPTAgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIHRoZSBORlMgc2VydmVyIG1vZHVsZQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRW5hYmxlIGFsbCBtb2R1bGVzOgorCQkvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkJJGVjaG8gInNldCBlbmFibGVkPTEgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZGlzYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzIC1wJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRGlzYWJsZSBhbGwgbW9kdWxlczoKLQotCQkkZWNobyAic2V0IGVuYWJsZWQ9MCBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcwotCi0JICBGaW5hbGx5LCBwYXNzaW5nICJkeW5hbWljX3ByaW50ayIgYXQgdGhlIGNvbW1hbmQgbGluZSBlbmFibGVzCi0JICBkZWJ1Z2dpbmcgZm9yIGFsbCBtb2R1bGVzLiBUaGlzIG1vZGUgY2FuIGJlIHR1cm5lZCBvZmYgdmlhIHRoZSBhYm92ZQotCSAgZGlzYWJsZSBjb21tYW5kLgorCSAgU2VlIERvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMzJiMGU2NC4uMDUxYTMzYSAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtMTEsNyArMTEsOCBAQAogCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIFwKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gcHJpb190cmVlLm8gXAogCSBzaGExLm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCi0JIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBpc19zaW5nbGVfdGhyZWFkZWQubworCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAorCSBpc19zaW5nbGVfdGhyZWFkZWQubyBwbGlzdC5vIGRlY29tcHJlc3MubwogCiBsaWItJChDT05GSUdfTU1VKSArPSBpb3JlbWFwLm8KIGxpYi0kKENPTkZJR19TTVApICs9IGNwdW1hc2subwpAQCAtNDAsNyArNDEsNiBAQAogbGliLSQoQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVCkgKz0gZmluZF9sYXN0X2JpdC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19IV0VJR0hUKSArPSBod2VpZ2h0Lm8KIG9iai0kKENPTkZJR19MT0NLX0tFUk5FTCkgKz0ga2VybmVsX2xvY2subwotb2JqLSQoQ09ORklHX1BMSVNUKSArPSBwbGlzdC5vCiBvYmotJChDT05GSUdfREVCVUdfUFJFRU1QVCkgKz0gc21wX3Byb2Nlc3Nvcl9pZC5vCiBvYmotJChDT05GSUdfREVCVUdfTElTVCkgKz0gbGlzdF9kZWJ1Zy5vCiBvYmotJChDT05GSUdfREVCVUdfT0JKRUNUUykgKz0gZGVidWdvYmplY3RzLm8KQEAgLTY1LDYgKzY1LDEwIEBACiBvYmotJChDT05GSUdfTFpPX0NPTVBSRVNTKSArPSBsem8vCiBvYmotJChDT05GSUdfTFpPX0RFQ09NUFJFU1MpICs9IGx6by8KIAorbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfR1pJUCkgKz0gZGVjb21wcmVzc19pbmZsYXRlLm8KK2xpYi0kKENPTkZJR19ERUNPTVBSRVNTX0JaSVAyKSArPSBkZWNvbXByZXNzX2J1bnppcDIubworbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfTFpNQSkgKz0gZGVjb21wcmVzc191bmx6bWEubworCiBvYmotJChDT05GSUdfVEVYVFNFQVJDSCkgKz0gdGV4dHNlYXJjaC5vCiBvYmotJChDT05GSUdfVEVYVFNFQVJDSF9LTVApICs9IHRzX2ttcC5vCiBvYmotJChDT05GSUdfVEVYVFNFQVJDSF9CTSkgKz0gdHNfYm0ubwpAQCAtODIsNyArODYsOSBAQAogCiBvYmotJChDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSykgKz0gc3lzY2FsbC5vCiAKLW9iai0kKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykgKz0gZHluYW1pY19wcmludGsubworb2JqLSQoQ09ORklHX0RZTkFNSUNfREVCVUcpICs9IGR5bmFtaWNfZGVidWcubworCitvYmotJChDT05GSUdfTkxBVFRSKSArPSBubGF0dHIubwogCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzcy5jIGIvbGliL2RlY29tcHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg0MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2RlY29tcHJlc3MuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogZGVjb21wcmVzcy5jCisgKgorICogRGV0ZWN0IHRoZSBkZWNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiBtYWdpYyBudW1iZXIKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9nZW5lcmljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2J1bnppcDIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL3VubHptYS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvaW5mbGF0ZS5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2lmbmRlZiBDT05GSUdfREVDT01QUkVTU19HWklQCisjIGRlZmluZSBndW56aXAgTlVMTAorI2VuZGlmCisjaWZuZGVmIENPTkZJR19ERUNPTVBSRVNTX0JaSVAyCisjIGRlZmluZSBidW56aXAyIE5VTEwKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfREVDT01QUkVTU19MWk1BCisjIGRlZmluZSB1bmx6bWEgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcHJlc3NfZm9ybWF0IHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzJdOworCWNvbnN0IGNoYXIgKm5hbWU7CisJZGVjb21wcmVzc19mbiBkZWNvbXByZXNzb3I7Cit9IGNvbXByZXNzZWRfZm9ybWF0c1tdID0geworCXsgezAzNywgMDIxM30sICJnemlwIiwgZ3VuemlwIH0sCisJeyB7MDM3LCAwMjM2fSwgImd6aXAiLCBndW56aXAgfSwKKwl7IHsweDQyLCAweDVhfSwgImJ6aXAyIiwgYnVuemlwMiB9LAorCXsgezB4NWQsIDB4MDB9LCAibHptYSIsIHVubHptYSB9LAorCXsgezAsIDB9LCBOVUxMLCBOVUxMIH0KK307CisKK2RlY29tcHJlc3NfZm4gZGVjb21wcmVzc19tZXRob2QoY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsIGludCBsZW4sCisJCQkJY29uc3QgY2hhciAqKm5hbWUpCit7CisJY29uc3Qgc3RydWN0IGNvbXByZXNzX2Zvcm1hdCAqY2Y7CisKKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIE5VTEw7CS8qIE5lZWQgYXQgbGVhc3QgdGhpcyBtdWNoLi4uICovCisKKwlmb3IgKGNmID0gY29tcHJlc3NlZF9mb3JtYXRzOyBjZi0+bmFtZTsgY2YrKykgeworCQlpZiAoIW1lbWNtcChpbmJ1ZiwgY2YtPm1hZ2ljLCAyKSkKKwkJCWJyZWFrOworCisJfQorCWlmIChuYW1lKQorCQkqbmFtZSA9IGNmLT5uYW1lOworCXJldHVybiBjZi0+ZGVjb21wcmVzc29yOworfQpkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkM2RkYjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVjb21wcmVzc19idW56aXAyLmMKQEAgLTAsMCArMSw3MzUgQEAKKy8qIHZpOiBzZXQgc3cgPSA0IHRzID0gNDogKi8KKy8qCVNtYWxsIGJ6aXAyIGRlZmxhdGUgaW1wbGVtZW50YXRpb24sIGJ5IFJvYiBMYW5kbGV5IChyb2JAbGFuZGxleS5uZXQpLgorCisJQmFzZWQgb24gYnppcDIgZGVjb21wcmVzc2lvbiBjb2RlIGJ5IEp1bGlhbiBSIFNld2FyZCAoanNld2FyZEBhY20ub3JnKSwKKwl3aGljaCBhbHNvIGFja25vd2xlZGdlcyBjb250cmlidXRpb25zIGJ5IE1pa2UgQnVycm93cywgRGF2aWQgV2hlZWxlciwKKwlQZXRlciBGZW53aWNrLCBBbGlzdGFpciBNb2ZmYXQsIFJhZGZvcmQgTmVhbCwgSWFuIEguIFdpdHRlbiwKKwlSb2JlcnQgU2VkZ2V3aWNrLCBhbmQgSm9uIEwuIEJlbnRsZXkuCisKKwlUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIExHUEx2MjoKKwkJTEdQTCAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xncGwuaHRtbAorKi8KKworLyoKKwlTaXplIGFuZCBzcGVlZCBvcHRpbWl6YXRpb25zIGJ5IE1hbnVlbCBOb3ZvYSBJSUkgIChtam4zQGNvZGVwb2V0Lm9yZykuCisKKwlNb3JlIGVmZmljaWVudCByZWFkaW5nIG9mIEh1ZmZtYW4gY29kZXMsIGEgc3RyZWFtbGluZWQgcmVhZF9idW56aXAoKQorCWZ1bmN0aW9uLCBhbmQgdmFyaW91cyBvdGhlciB0d2Vha3MuICBJbiAobGltaXRlZCkgdGVzdHMsIGFwcHJveGltYXRlbHkKKwkyMCUgZmFzdGVyIHRoYW4gYnpjYXQgb24geDg2IGFuZCBhYm91dCAxMCUgZmFzdGVyIG9uIGFybS4KKworCU5vdGUgdGhhdCBhYm91dCAyLzMgb2YgdGhlIHRpbWUgaXMgc3BlbnQgaW4gcmVhZF91bnppcCgpIHJldmVyc2luZworCXRoZSBCdXJyb3dzLVdoZWVsZXIgdHJhbnNmb3JtYXRpb24uICBNdWNoIG9mIHRoYXQgdGltZSBpcyBkZWxheQorCXJlc3VsdGluZyBmcm9tIGNhY2hlIG1pc3Nlcy4KKworCUkgd291bGQgYXNrIHRoYXQgYW55b25lIGJlbmVmaXRpbmcgZnJvbSB0aGlzIHdvcmssIGVzcGVjaWFsbHkgdGhvc2UKKwl1c2luZyBpdCBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLCBjb25zaWRlciBtYWtpbmcgYSBkb25hdGlvbiB0byBteSBsb2NhbAorCW5vbi1wcm9maXQgaG9zcGljZSBvcmdhbml6YXRpb24gaW4gdGhlIG5hbWUgb2YgdGhlIHdvbWFuIEkgbG92ZWQsIHdobworCXBhc3NlZCBhd2F5IEZlYi4gMTIsIDIwMDMuCisKKwkJSW4gbWVtb3J5IG9mIFRvbmkgVy4gSGFnYW4KKworCQlIb3NwaWNlIG9mIEFjYWRpYW5hLCBJbmMuCisJCTI2MDAgSm9obnN0b24gU3QuLCBTdWl0ZSAyMDAKKwkJTGFmYXlldHRlLCBMQSA3MDUwMy0zMjQwCisKKwkJUGhvbmUgKDMzNykgMjMyLTEyMzQgb3IgMS04MDAtNzM4LTIyMjYKKwkJRmF4ICAgKDMzNykgMjMyLTEyOTcKKworCQlodHRwOi8vd3d3Lmhvc3BpY2VhY2FkaWFuYS5jb20vCisKKwlNYW51ZWwKKyAqLworCisvKgorCU1hZGUgaXQgZml0IGZvciBydW5uaW5nIGluIExpbnV4IEtlcm5lbCBieSBBbGFpbiBLbmFmZiAoYWxhaW5Aa25hZmYubHUpCisqLworCisKKyNpZm5kZWYgU1RBVElDCisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9idW56aXAyLmg+CisjZW5kaWYgLyogIVNUQVRJQyAqLworCisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9tbS5oPgorCisjaWZuZGVmIElOVF9NQVgKKyNkZWZpbmUgSU5UX01BWCAweDdmZmZmZmZmCisjZW5kaWYKKworLyogQ29uc3RhbnRzIGZvciBIdWZmbWFuIGNvZGluZyAqLworI2RlZmluZSBNQVhfR1JPVVBTCQk2CisjZGVmaW5lIEdST1VQX1NJWkUgICAJCTUwCS8qIDY0IHdvdWxkIGhhdmUgYmVlbiBtb3JlIGVmZmljaWVudCAqLworI2RlZmluZSBNQVhfSFVGQ09ERV9CSVRTIAkyMAkvKiBMb25nZXN0IEh1ZmZtYW4gY29kZSBhbGxvd2VkICovCisjZGVmaW5lIE1BWF9TWU1CT0xTIAkJMjU4CS8qIDI1NiBsaXRlcmFscyArIFJVTkEgKyBSVU5CICovCisjZGVmaW5lIFNZTUJPTF9SVU5BCQkwCisjZGVmaW5lIFNZTUJPTF9SVU5CCQkxCisKKy8qIFN0YXR1cyByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lIFJFVFZBTF9PSwkJCTAKKyNkZWZpbmUgUkVUVkFMX0xBU1RfQkxPQ0sJCSgtMSkKKyNkZWZpbmUgUkVUVkFMX05PVF9CWklQX0RBVEEJCSgtMikKKyNkZWZpbmUgUkVUVkFMX1VORVhQRUNURURfSU5QVVRfRU9GCSgtMykKKyNkZWZpbmUgUkVUVkFMX1VORVhQRUNURURfT1VUUFVUX0VPRgkoLTQpCisjZGVmaW5lIFJFVFZBTF9EQVRBX0VSUk9SCQkoLTUpCisjZGVmaW5lIFJFVFZBTF9PVVRfT0ZfTUVNT1JZCQkoLTYpCisjZGVmaW5lIFJFVFZBTF9PQlNPTEVURV9JTlBVVAkJKC03KQorCisvKiBPdGhlciBob3VzZWtlZXBpbmcgY29uc3RhbnRzICovCisjZGVmaW5lIEJaSVAyX0lPQlVGX1NJWkUJCTQwOTYKKworLyogVGhpcyBpcyB3aGF0IHdlIGtub3cgYWJvdXQgZWFjaCBIdWZmbWFuIGNvZGluZyBncm91cCAqLworc3RydWN0IGdyb3VwX2RhdGEgeworCS8qIFdlIGhhdmUgYW4gZXh0cmEgc2xvdCBhdCB0aGUgZW5kIG9mIGxpbWl0W10gZm9yIGEgc2VudGluYWwgdmFsdWUuICovCisJaW50IGxpbWl0W01BWF9IVUZDT0RFX0JJVFMrMV07CisJaW50IGJhc2VbTUFYX0hVRkNPREVfQklUU107CisJaW50IHBlcm11dGVbTUFYX1NZTUJPTFNdOworCWludCBtaW5MZW4sIG1heExlbjsKK307CisKKy8qIFN0cnVjdHVyZSBob2xkaW5nIGFsbCB0aGUgaG91c2VrZWVwaW5nIGRhdGEsIGluY2x1ZGluZyBJTyBidWZmZXJzIGFuZAorICAgbWVtb3J5IHRoYXQgcGVyc2lzdHMgYmV0d2VlbiBjYWxscyB0byBidW56aXAgKi8KK3N0cnVjdCBidW56aXBfZGF0YSB7CisJLyogU3RhdGUgZm9yIGludGVycnVwdGluZyBvdXRwdXQgbG9vcCAqLworCWludCB3cml0ZUNvcGllcywgd3JpdGVQb3MsIHdyaXRlUnVuQ291bnRkb3duLCB3cml0ZUNvdW50LCB3cml0ZUN1cnJlbnQ7CisJLyogSS9PIHRyYWNraW5nIGRhdGEgKGZpbGUgaGFuZGxlcywgYnVmZmVycywgcG9zaXRpb25zLCBldGMuKSAqLworCWludCAoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpOworCWludCBpbmJ1ZkNvdW50LCBpbmJ1ZlBvcyAvKiwgb3V0YnVmUG9zKi87CisJdW5zaWduZWQgY2hhciAqaW5idWYgLyosKm91dGJ1ZiovOworCXVuc2lnbmVkIGludCBpbmJ1ZkJpdENvdW50LCBpbmJ1ZkJpdHM7CisJLyogVGhlIENSQyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBibG9jayBoZWFkZXIgYW5kIGNhbGN1bGF0ZWQgZnJvbSB0aGUKKwlkYXRhICovCisJdW5zaWduZWQgaW50IGNyYzMyVGFibGVbMjU2XSwgaGVhZGVyQ1JDLCB0b3RhbENSQywgd3JpdGVDUkM7CisJLyogSW50ZXJtZWRpYXRlIGJ1ZmZlciBhbmQgaXRzIHNpemUgKGluIGJ5dGVzKSAqLworCXVuc2lnbmVkIGludCAqZGJ1ZiwgZGJ1ZlNpemU7CisJLyogVGhlc2UgdGhpbmdzIGFyZSBhIGJpdCB0b28gYmlnIHRvIGdvIG9uIHRoZSBzdGFjayAqLworCXVuc2lnbmVkIGNoYXIgc2VsZWN0b3JzWzMyNzY4XTsJCS8qIG5TZWxlY3RvcnMgPSAxNSBiaXRzICovCisJc3RydWN0IGdyb3VwX2RhdGEgZ3JvdXBzW01BWF9HUk9VUFNdOwkvKiBIdWZmbWFuIGNvZGluZyB0YWJsZXMgKi8KKwlpbnQgaW9fZXJyb3I7CQkJLyogbm9uLXplcm8gaWYgd2UgaGF2ZSBJTyBlcnJvciAqLworfTsKKworCisvKiBSZXR1cm4gdGhlIG5leHQgbm5uIGJpdHMgb2YgaW5wdXQuICBBbGwgcmVhZHMgZnJvbSB0aGUgY29tcHJlc3NlZCBpbnB1dAorICAgYXJlIGRvbmUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiAgQWxsIHJlYWRzIGFyZSBiaWcgZW5kaWFuICovCitzdGF0aWMgdW5zaWduZWQgaW50IElOSVQgZ2V0X2JpdHMoc3RydWN0IGJ1bnppcF9kYXRhICpiZCwgY2hhciBiaXRzX3dhbnRlZCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0cyA9IDA7CisKKwkvKiBJZiB3ZSBuZWVkIHRvIGdldCBtb3JlIGRhdGEgZnJvbSB0aGUgYnl0ZSBidWZmZXIsIGRvIHNvLgorCSAgIChMb29wIGdldHRpbmcgb25lIGJ5dGUgYXQgYSB0aW1lIHRvIGVuZm9yY2UgZW5kaWFubmVzcyBhbmQgYXZvaWQKKwkgICB1bmFsaWduZWQgYWNjZXNzLikgKi8KKwl3aGlsZSAoYmQtPmluYnVmQml0Q291bnQgPCBiaXRzX3dhbnRlZCkgeworCQkvKiBJZiB3ZSBuZWVkIHRvIHJlYWQgbW9yZSBkYXRhIGZyb20gZmlsZSBpbnRvIGJ5dGUgYnVmZmVyLCBkbworCQkgICBzbyAqLworCQlpZiAoYmQtPmluYnVmUG9zID09IGJkLT5pbmJ1ZkNvdW50KSB7CisJCQlpZiAoYmQtPmlvX2Vycm9yKQorCQkJCXJldHVybiAwOworCQkJYmQtPmluYnVmQ291bnQgPSBiZC0+ZmlsbChiZC0+aW5idWYsIEJaSVAyX0lPQlVGX1NJWkUpOworCQkJaWYgKGJkLT5pbmJ1ZkNvdW50IDw9IDApIHsKKwkJCQliZC0+aW9fZXJyb3IgPSBSRVRWQUxfVU5FWFBFQ1RFRF9JTlBVVF9FT0Y7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQliZC0+aW5idWZQb3MgPSAwOworCQl9CisJCS8qIEF2b2lkIDMyLWJpdCBvdmVyZmxvdyAoZHVtcCBiaXQgYnVmZmVyIHRvIHRvcCBvZiBvdXRwdXQpICovCisJCWlmIChiZC0+aW5idWZCaXRDb3VudCA+PSAyNCkgeworCQkJYml0cyA9IGJkLT5pbmJ1ZkJpdHMmKCgxIDw8IGJkLT5pbmJ1ZkJpdENvdW50KS0xKTsKKwkJCWJpdHNfd2FudGVkIC09IGJkLT5pbmJ1ZkJpdENvdW50OworCQkJYml0cyA8PD0gYml0c193YW50ZWQ7CisJCQliZC0+aW5idWZCaXRDb3VudCA9IDA7CisJCX0KKwkJLyogR3JhYiBuZXh0IDggYml0cyBvZiBpbnB1dCBmcm9tIGJ1ZmZlci4gKi8KKwkJYmQtPmluYnVmQml0cyA9IChiZC0+aW5idWZCaXRzIDw8IDgpfGJkLT5pbmJ1ZltiZC0+aW5idWZQb3MrK107CisJCWJkLT5pbmJ1ZkJpdENvdW50ICs9IDg7CisJfQorCS8qIENhbGN1bGF0ZSByZXN1bHQgKi8KKwliZC0+aW5idWZCaXRDb3VudCAtPSBiaXRzX3dhbnRlZDsKKwliaXRzIHw9IChiZC0+aW5idWZCaXRzID4+IGJkLT5pbmJ1ZkJpdENvdW50KSYoKDEgPDwgYml0c193YW50ZWQpLTEpOworCisJcmV0dXJuIGJpdHM7Cit9CisKKy8qIFVucGFja3MgdGhlIG5leHQgYmxvY2sgYW5kIHNldHMgdXAgZm9yIHRoZSBpbnZlcnNlIGJ1cnJvd3Mtd2hlZWxlciBzdGVwLiAqLworCitzdGF0aWMgaW50IElOSVQgZ2V0X25leHRfYmxvY2soc3RydWN0IGJ1bnppcF9kYXRhICpiZCkKK3sKKwlzdHJ1Y3QgZ3JvdXBfZGF0YSAqaHVmR3JvdXAgPSBOVUxMOworCWludCAqYmFzZSA9IE5VTEw7CisJaW50ICpsaW1pdCA9IE5VTEw7CisJaW50IGRidWZDb3VudCwgbmV4dFN5bSwgZGJ1ZlNpemUsIGdyb3VwQ291bnQsIHNlbGVjdG9yLAorCQlpLCBqLCBrLCB0LCBydW5Qb3MsIHN5bUNvdW50LCBzeW1Ub3RhbCwgblNlbGVjdG9ycywKKwkJYnl0ZUNvdW50WzI1Nl07CisJdW5zaWduZWQgY2hhciB1Yywgc3ltVG9CeXRlWzI1Nl0sIG10ZlN5bWJvbFsyNTZdLCAqc2VsZWN0b3JzOworCXVuc2lnbmVkIGludCAqZGJ1Ziwgb3JpZ1B0cjsKKworCWRidWYgPSBiZC0+ZGJ1ZjsKKwlkYnVmU2l6ZSA9IGJkLT5kYnVmU2l6ZTsKKwlzZWxlY3RvcnMgPSBiZC0+c2VsZWN0b3JzOworCisJLyogUmVhZCBpbiBoZWFkZXIgc2lnbmF0dXJlIGFuZCBDUkMsIHRoZW4gdmFsaWRhdGUgc2lnbmF0dXJlLgorCSAgIChsYXN0IGJsb2NrIHNpZ25hdHVyZSBtZWFucyBDUkMgaXMgZm9yIHdob2xlIGZpbGUsIHJldHVybiBub3cpICovCisJaSA9IGdldF9iaXRzKGJkLCAyNCk7CisJaiA9IGdldF9iaXRzKGJkLCAyNCk7CisJYmQtPmhlYWRlckNSQyA9IGdldF9iaXRzKGJkLCAzMik7CisJaWYgKChpID09IDB4MTc3MjQ1KSAmJiAoaiA9PSAweDM4NTA5MCkpCisJCXJldHVybiBSRVRWQUxfTEFTVF9CTE9DSzsKKwlpZiAoKGkgIT0gMHgzMTQxNTkpIHx8IChqICE9IDB4MjY1MzU5KSkKKwkJcmV0dXJuIFJFVFZBTF9OT1RfQlpJUF9EQVRBOworCS8qIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgYmxvY2tSYW5kb21pc2VkIGlmIGFueWJvZHkgY29tcGxhaW5zLgorCSAgIFRoZXJlIHdhcyBzb21lIGNvZGUgZm9yIHRoaXMgaW4gYnVzeWJveCAxLjAuMC1wcmUzLCBidXQgbm9ib2R5IGV2ZXIKKwkgICBub3RpY2VkIHRoYXQgaXQgZGlkbid0IGFjdHVhbGx5IHdvcmsuICovCisJaWYgKGdldF9iaXRzKGJkLCAxKSkKKwkJcmV0dXJuIFJFVFZBTF9PQlNPTEVURV9JTlBVVDsKKwlvcmlnUHRyID0gZ2V0X2JpdHMoYmQsIDI0KTsKKwlpZiAob3JpZ1B0ciA+IGRidWZTaXplKQorCQlyZXR1cm4gUkVUVkFMX0RBVEFfRVJST1I7CisJLyogbWFwcGluZyB0YWJsZTogaWYgc29tZSBieXRlIHZhbHVlcyBhcmUgbmV2ZXIgdXNlZCAoZW5jb2RpbmcgdGhpbmdzCisJICAgbGlrZSBhc2NpaSB0ZXh0KSwgdGhlIGNvbXByZXNzaW9uIGNvZGUgcmVtb3ZlcyB0aGUgZ2FwcyB0byBoYXZlIGZld2VyCisJICAgc3ltYm9scyB0byBkZWFsIHdpdGgsIGFuZCB3cml0ZXMgYSBzcGFyc2UgYml0ZmllbGQgaW5kaWNhdGluZyB3aGljaAorCSAgIHZhbHVlcyB3ZXJlIHByZXNlbnQuICBXZSBtYWtlIGEgdHJhbnNsYXRpb24gdGFibGUgdG8gY29udmVydCB0aGUKKwkgICBzeW1ib2xzIGJhY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMuICovCisJdCA9IGdldF9iaXRzKGJkLCAxNik7CisJc3ltVG90YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICh0JigxIDw8ICgxNS1pKSkpIHsKKwkJCWsgPSBnZXRfYml0cyhiZCwgMTYpOworCQkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQkJaWYgKGsmKDEgPDwgKDE1LWopKSkKKwkJCQkJc3ltVG9CeXRlW3N5bVRvdGFsKytdID0gKDE2KmkpK2o7CisJCX0KKwl9CisJLyogSG93IG1hbnkgZGlmZmVyZW50IEh1ZmZtYW4gY29kaW5nIGdyb3VwcyBkb2VzIHRoaXMgYmxvY2sgdXNlPyAqLworCWdyb3VwQ291bnQgPSBnZXRfYml0cyhiZCwgMyk7CisJaWYgKGdyb3VwQ291bnQgPCAyIHx8IGdyb3VwQ291bnQgPiBNQVhfR1JPVVBTKQorCQlyZXR1cm4gUkVUVkFMX0RBVEFfRVJST1I7CisJLyogblNlbGVjdG9yczogRXZlcnkgR1JPVVBfU0laRSBtYW55IHN5bWJvbHMgd2Ugc2VsZWN0IGEgbmV3CisJICAgSHVmZm1hbiBjb2RpbmcgZ3JvdXAuICBSZWFkIGluIHRoZSBncm91cCBzZWxlY3RvciBsaXN0LAorCSAgIHdoaWNoIGlzIHN0b3JlZCBhcyBNVEYgZW5jb2RlZCBiaXQgcnVucy4gIChNVEYgPSBNb3ZlIFRvCisJICAgRnJvbnQsIGFzIGVhY2ggdmFsdWUgaXMgdXNlZCBpdCdzIG1vdmVkIHRvIHRoZSBzdGFydCBvZiB0aGUKKwkgICBsaXN0LikgKi8KKwluU2VsZWN0b3JzID0gZ2V0X2JpdHMoYmQsIDE1KTsKKwlpZiAoIW5TZWxlY3RvcnMpCisJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JvdXBDb3VudDsgaSsrKQorCQltdGZTeW1ib2xbaV0gPSBpOworCWZvciAoaSA9IDA7IGkgPCBuU2VsZWN0b3JzOyBpKyspIHsKKwkJLyogR2V0IG5leHQgdmFsdWUgKi8KKwkJZm9yIChqID0gMDsgZ2V0X2JpdHMoYmQsIDEpOyBqKyspCisJCQlpZiAoaiA+PSBncm91cENvdW50KQorCQkJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwkJLyogRGVjb2RlIE1URiB0byBnZXQgdGhlIG5leHQgc2VsZWN0b3IgKi8KKwkJdWMgPSBtdGZTeW1ib2xbal07CisJCWZvciAoOyBqOyBqLS0pCisJCQltdGZTeW1ib2xbal0gPSBtdGZTeW1ib2xbai0xXTsKKwkJbXRmU3ltYm9sWzBdID0gc2VsZWN0b3JzW2ldID0gdWM7CisJfQorCS8qIFJlYWQgdGhlIEh1ZmZtYW4gY29kaW5nIHRhYmxlcyBmb3IgZWFjaCBncm91cCwgd2hpY2ggY29kZQorCSAgIGZvciBzeW1Ub3RhbCBsaXRlcmFsIHN5bWJvbHMsIHBsdXMgdHdvIHJ1biBzeW1ib2xzIChSVU5BLAorCSAgIFJVTkIpICovCisJc3ltQ291bnQgPSBzeW1Ub3RhbCsyOworCWZvciAoaiA9IDA7IGogPCBncm91cENvdW50OyBqKyspIHsKKwkJdW5zaWduZWQgY2hhciBsZW5ndGhbTUFYX1NZTUJPTFNdLCB0ZW1wW01BWF9IVUZDT0RFX0JJVFMrMV07CisJCWludAltaW5MZW4sCW1heExlbiwgcHA7CisJCS8qIFJlYWQgSHVmZm1hbiBjb2RlIGxlbmd0aHMgZm9yIGVhY2ggc3ltYm9sLiAgVGhleSdyZQorCQkgICBzdG9yZWQgaW4gYSB3YXkgc2ltaWxhciB0byBtdGY7IHJlY29yZCBhIHN0YXJ0aW5nCisJCSAgIHZhbHVlIGZvciB0aGUgZmlyc3Qgc3ltYm9sLCBhbmQgYW4gb2Zmc2V0IGZyb20gdGhlCisJCSAgIHByZXZpb3VzIHZhbHVlIGZvciBldmVyeXMgc3ltYm9sIGFmdGVyIHRoYXQuCisJCSAgIChTdWJ0cmFjdGluZyAxIGJlZm9yZSB0aGUgbG9vcCBhbmQgdGhlbiBhZGRpbmcgaXQKKwkJICAgYmFjayBhdCB0aGUgZW5kIGlzIGFuIG9wdGltaXphdGlvbiB0aGF0IG1ha2VzIHRoZQorCQkgICB0ZXN0IGluc2lkZSB0aGUgbG9vcCBzaW1wbGVyOiBzeW1ib2wgbGVuZ3RoIDAKKwkJICAgYmVjb21lcyBuZWdhdGl2ZSwgc28gYW4gdW5zaWduZWQgaW5lcXVhbGl0eSBjYXRjaGVzCisJCSAgIGl0LikgKi8KKwkJdCA9IGdldF9iaXRzKGJkLCA1KS0xOworCQlmb3IgKGkgPSAwOyBpIDwgc3ltQ291bnQ7IGkrKykgeworCQkJZm9yICg7OykgeworCQkJCWlmICgoKHVuc2lnbmVkKXQpID4gKE1BWF9IVUZDT0RFX0JJVFMtMSkpCisJCQkJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKworCQkJCS8qIElmIGZpcnN0IGJpdCBpcyAwLCBzdG9wLiAgRWxzZQorCQkJCSAgIHNlY29uZCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8KKwkJCQkgICBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IHRoZSB2YWx1ZS4KKwkJCQkgICBPcHRpbWl6YXRpb246IGdyYWIgMiBiaXRzIGFuZCB1bmdldAorCQkJCSAgIHRoZSBzZWNvbmQgaWYgdGhlIGZpcnN0IHdhcyAwLiAqLworCisJCQkJayA9IGdldF9iaXRzKGJkLCAyKTsKKwkJCQlpZiAoayA8IDIpIHsKKwkJCQkJYmQtPmluYnVmQml0Q291bnQrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIEFkZCBvbmUgaWYgc2Vjb25kIGJpdCAxLCBlbHNlCisJCQkJICogc3VidHJhY3QgMS4gIEF2b2lkcyBpZi9lbHNlICovCisJCQkJdCArPSAoKChrKzEpJjIpLTEpOworCQkJfQorCQkJLyogQ29ycmVjdCBmb3IgdGhlIGluaXRpYWwgLTEsIHRvIGdldCB0aGUKKwkJCSAqIGZpbmFsIHN5bWJvbCBsZW5ndGggKi8KKwkJCWxlbmd0aFtpXSA9IHQrMTsKKwkJfQorCQkvKiBGaW5kIGxhcmdlc3QgYW5kIHNtYWxsZXN0IGxlbmd0aHMgaW4gdGhpcyBncm91cCAqLworCQltaW5MZW4gPSBtYXhMZW4gPSBsZW5ndGhbMF07CisKKwkJZm9yIChpID0gMTsgaSA8IHN5bUNvdW50OyBpKyspIHsKKwkJCWlmIChsZW5ndGhbaV0gPiBtYXhMZW4pCisJCQkJbWF4TGVuID0gbGVuZ3RoW2ldOworCQkJZWxzZSBpZiAobGVuZ3RoW2ldIDwgbWluTGVuKQorCQkJCW1pbkxlbiA9IGxlbmd0aFtpXTsKKwkJfQorCisJCS8qIENhbGN1bGF0ZSBwZXJtdXRlW10sIGJhc2VbXSwgYW5kIGxpbWl0W10gdGFibGVzIGZyb20KKwkJICogbGVuZ3RoW10uCisJCSAqCisJCSAqIHBlcm11dGVbXSBpcyB0aGUgbG9va3VwIHRhYmxlIGZvciBjb252ZXJ0aW5nCisJCSAqIEh1ZmZtYW4gY29kZWQgc3ltYm9scyBpbnRvIGRlY29kZWQgc3ltYm9scy4gIGJhc2VbXQorCQkgKiBpcyB0aGUgYW1vdW50IHRvIHN1YnRyYWN0IGZyb20gdGhlIHZhbHVlIG9mIGEKKwkJICogSHVmZm1hbiBzeW1ib2wgb2YgYSBnaXZlbiBsZW5ndGggd2hlbiB1c2luZworCQkgKiBwZXJtdXRlW10uCisJCSAqCisJCSAqIGxpbWl0W10gaW5kaWNhdGVzIHRoZSBsYXJnZXN0IG51bWVyaWNhbCB2YWx1ZSBhCisJCSAqIHN5bWJvbCB3aXRoIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMgY2FuIGhhdmUuICBUaGlzCisJCSAqIGlzIGhvdyB0aGUgSHVmZm1hbiBjb2RlcyBjYW4gdmFyeSBpbiBsZW5ndGg6IGVhY2gKKwkJICogY29kZSB3aXRoIGEgdmFsdWUgPiBsaW1pdFtsZW5ndGhdIG5lZWRzIGFub3RoZXIKKwkJICogYml0LgorCQkgKi8KKwkJaHVmR3JvdXAgPSBiZC0+Z3JvdXBzK2o7CisJCWh1Zkdyb3VwLT5taW5MZW4gPSBtaW5MZW47CisJCWh1Zkdyb3VwLT5tYXhMZW4gPSBtYXhMZW47CisJCS8qIE5vdGUgdGhhdCBtaW5MZW4gY2FuJ3QgYmUgc21hbGxlciB0aGFuIDEsIHNvIHdlCisJCSAgIGFkanVzdCB0aGUgYmFzZSBhbmQgbGltaXQgYXJyYXkgcG9pbnRlcnMgc28gd2UncmUKKwkJICAgbm90IGFsd2F5cyB3YXN0aW5nIHRoZSBmaXJzdCBlbnRyeS4gIFdlIGRvIHRoaXMKKwkJICAgYWdhaW4gd2hlbiB1c2luZyB0aGVtIChkdXJpbmcgc3ltYm9sIGRlY29kaW5nKS4qLworCQliYXNlID0gaHVmR3JvdXAtPmJhc2UtMTsKKwkJbGltaXQgPSBodWZHcm91cC0+bGltaXQtMTsKKwkJLyogQ2FsY3VsYXRlIHBlcm11dGVbXS4gIENvbmN1cmVudGx5LCBpbml0aWFsaXplCisJCSAqIHRlbXBbXSBhbmQgbGltaXRbXS4gKi8KKwkJcHAgPSAwOworCQlmb3IgKGkgPSBtaW5MZW47IGkgPD0gbWF4TGVuOyBpKyspIHsKKwkJCXRlbXBbaV0gPSBsaW1pdFtpXSA9IDA7CisJCQlmb3IgKHQgPSAwOyB0IDwgc3ltQ291bnQ7IHQrKykKKwkJCQlpZiAobGVuZ3RoW3RdID09IGkpCisJCQkJCWh1Zkdyb3VwLT5wZXJtdXRlW3BwKytdID0gdDsKKwkJfQorCQkvKiBDb3VudCBzeW1ib2xzIGNvZGVkIGZvciBhdCBlYWNoIGJpdCBsZW5ndGggKi8KKwkJZm9yIChpID0gMDsgaSA8IHN5bUNvdW50OyBpKyspCisJCQl0ZW1wW2xlbmd0aFtpXV0rKzsKKwkJLyogQ2FsY3VsYXRlIGxpbWl0W10gKHRoZSBsYXJnZXN0IHN5bWJvbC1jb2RpbmcgdmFsdWUKKwkJICphdCBlYWNoIGJpdCBsZW5ndGgsIHdoaWNoIGlzIChwcmV2aW91cyBsaW1pdCA8PAorCQkgKjEpK3N5bWJvbHMgYXQgdGhpcyBsZXZlbCksIGFuZCBiYXNlW10gKG51bWJlciBvZgorCQkgKnN5bWJvbHMgdG8gaWdub3JlIGF0IGVhY2ggYml0IGxlbmd0aCwgd2hpY2ggaXMgbGltaXQKKwkJICptaW51cyB0aGUgY3VtdWxhdGl2ZSBjb3VudCBvZiBzeW1ib2xzIGNvZGVkIGZvcgorCQkgKmFscmVhZHkpLiAqLworCQlwcCA9IHQgPSAwOworCQlmb3IgKGkgPSBtaW5MZW47IGkgPCBtYXhMZW47IGkrKykgeworCQkJcHAgKz0gdGVtcFtpXTsKKwkJCS8qIFdlIHJlYWQgdGhlIGxhcmdlc3QgcG9zc2libGUgc3ltYm9sIHNpemUKKwkJCSAgIGFuZCB0aGVuIHVuZ2V0IGJpdHMgYWZ0ZXIgZGV0ZXJtaW5pbmcgaG93CisJCQkgICBtYW55IHdlIG5lZWQsIGFuZCB0aG9zZSBleHRyYSBiaXRzIGNvdWxkIGJlCisJCQkgICBzZXQgdG8gYW55dGhpbmcuICAoVGhleSdyZSBub2lzZSBmcm9tCisJCQkgICBmdXR1cmUgc3ltYm9scy4pICBBdCBlYWNoIGxldmVsIHdlJ3JlCisJCQkgICByZWFsbHkgb25seSBpbnRlcmVzdGVkIGluIHRoZSBmaXJzdCBmZXcKKwkJCSAgIGJpdHMsIHNvIGhlcmUgd2Ugc2V0IGFsbCB0aGUgdHJhaWxpbmcKKwkJCSAgIHRvLWJlLWlnbm9yZWQgYml0cyB0byAxIHNvIHRoZXkgZG9uJ3QKKwkJCSAgIGFmZmVjdCB0aGUgdmFsdWUgPiBsaW1pdFtsZW5ndGhdCisJCQkgICBjb21wYXJpc29uLiAqLworCQkJbGltaXRbaV0gPSAocHAgPDwgKG1heExlbiAtIGkpKSAtIDE7CisJCQlwcCA8PD0gMTsKKwkJCWJhc2VbaSsxXSA9IHBwLSh0ICs9IHRlbXBbaV0pOworCQl9CisJCWxpbWl0W21heExlbisxXSA9IElOVF9NQVg7IC8qIFNlbnRpbmFsIHZhbHVlIGZvcgorCQkJCQkgICAgKiByZWFkaW5nIG5leHQgc3ltLiAqLworCQlsaW1pdFttYXhMZW5dID0gcHArdGVtcFttYXhMZW5dLTE7CisJCWJhc2VbbWluTGVuXSA9IDA7CisJfQorCS8qIFdlJ3ZlIGZpbmlzaGVkIHJlYWRpbmcgYW5kIGRpZ2VzdGluZyB0aGUgYmxvY2sgaGVhZGVyLiAgTm93CisJICAgcmVhZCB0aGlzIGJsb2NrJ3MgSHVmZm1hbiBjb2RlZCBzeW1ib2xzIGZyb20gdGhlIGZpbGUgYW5kCisJICAgdW5kbyB0aGUgSHVmZm1hbiBjb2RpbmcgYW5kIHJ1biBsZW5ndGggZW5jb2RpbmcsIHNhdmluZyB0aGUKKwkgICByZXN1bHQgaW50byBkYnVmW2RidWZDb3VudCsrXSA9IHVjICovCisKKwkvKiBJbml0aWFsaXplIHN5bWJvbCBvY2N1cnJlbmNlIGNvdW50ZXJzIGFuZCBzeW1ib2wgTW92ZSBUbworCSAqIEZyb250IHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWJ5dGVDb3VudFtpXSA9IDA7CisJCW10ZlN5bWJvbFtpXSA9ICh1bnNpZ25lZCBjaGFyKWk7CisJfQorCS8qIExvb3AgdGhyb3VnaCBjb21wcmVzc2VkIHN5bWJvbHMuICovCisJcnVuUG9zID0gZGJ1ZkNvdW50ID0gc3ltQ291bnQgPSBzZWxlY3RvciA9IDA7CisJZm9yICg7OykgeworCQkvKiBEZXRlcm1pbmUgd2hpY2ggSHVmZm1hbiBjb2RpbmcgZ3JvdXAgdG8gdXNlLiAqLworCQlpZiAoIShzeW1Db3VudC0tKSkgeworCQkJc3ltQ291bnQgPSBHUk9VUF9TSVpFLTE7CisJCQlpZiAoc2VsZWN0b3IgPj0gblNlbGVjdG9ycykKKwkJCQlyZXR1cm4gUkVUVkFMX0RBVEFfRVJST1I7CisJCQlodWZHcm91cCA9IGJkLT5ncm91cHMrc2VsZWN0b3JzW3NlbGVjdG9yKytdOworCQkJYmFzZSA9IGh1Zkdyb3VwLT5iYXNlLTE7CisJCQlsaW1pdCA9IGh1Zkdyb3VwLT5saW1pdC0xOworCQl9CisJCS8qIFJlYWQgbmV4dCBIdWZmbWFuLWNvZGVkIHN5bWJvbC4gKi8KKwkJLyogTm90ZTogSXQgaXMgZmFyIGNoZWFwZXIgdG8gcmVhZCBtYXhMZW4gYml0cyBhbmQKKwkJICAgYmFjayB1cCB0aGFuIGl0IGlzIHRvIHJlYWQgbWluTGVuIGJpdHMgYW5kIHRoZW4gYW4KKwkJICAgYWRkaXRpb25hbCBiaXQgYXQgYSB0aW1lLCB0ZXN0aW5nIGFzIHdlIGdvLgorCQkgICBCZWNhdXNlIHRoZXJlIGlzIGEgdHJhaWxpbmcgbGFzdCBibG9jayAod2l0aCBmaWxlCisJCSAgIENSQyksIHRoZXJlIGlzIG5vIGRhbmdlciBvZiB0aGUgb3ZlcnJlYWQgY2F1c2luZyBhbgorCQkgICB1bmV4cGVjdGVkIEVPRiBmb3IgYSB2YWxpZCBjb21wcmVzc2VkIGZpbGUuICBBcyBhCisJCSAgIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCB3ZSBkbyB0aGUgcmVhZCBpbmxpbmUKKwkJICAgKGZhbGxpbmcgYmFjayB0byBhIGNhbGwgdG8gZ2V0X2JpdHMgaWYgdGhlIGJ1ZmZlcgorCQkgICBydW5zIGRyeSkuICBUaGUgZm9sbG93aW5nICh1cCB0byBnb3RfaHVmZl9iaXRzOikgaXMKKwkJICAgZXF1aXZhbGVudCB0byBqID0gZ2V0X2JpdHMoYmQsIGh1Zkdyb3VwLT5tYXhMZW4pOworCQkgKi8KKwkJd2hpbGUgKGJkLT5pbmJ1ZkJpdENvdW50IDwgaHVmR3JvdXAtPm1heExlbikgeworCQkJaWYgKGJkLT5pbmJ1ZlBvcyA9PSBiZC0+aW5idWZDb3VudCkgeworCQkJCWogPSBnZXRfYml0cyhiZCwgaHVmR3JvdXAtPm1heExlbik7CisJCQkJZ290byBnb3RfaHVmZl9iaXRzOworCQkJfQorCQkJYmQtPmluYnVmQml0cyA9CisJCQkJKGJkLT5pbmJ1ZkJpdHMgPDwgOCl8YmQtPmluYnVmW2JkLT5pbmJ1ZlBvcysrXTsKKwkJCWJkLT5pbmJ1ZkJpdENvdW50ICs9IDg7CisJCX07CisJCWJkLT5pbmJ1ZkJpdENvdW50IC09IGh1Zkdyb3VwLT5tYXhMZW47CisJCWogPSAoYmQtPmluYnVmQml0cyA+PiBiZC0+aW5idWZCaXRDb3VudCkmCisJCQkoKDEgPDwgaHVmR3JvdXAtPm1heExlbiktMSk7Citnb3RfaHVmZl9iaXRzOgorCQkvKiBGaWd1cmUgaG93IGhvdyBtYW55IGJpdHMgYXJlIGluIG5leHQgc3ltYm9sIGFuZAorCQkgKiB1bmdldCBleHRyYXMgKi8KKwkJaSA9IGh1Zkdyb3VwLT5taW5MZW47CisJCXdoaWxlIChqID4gbGltaXRbaV0pCisJCQkrK2k7CisJCWJkLT5pbmJ1ZkJpdENvdW50ICs9IChodWZHcm91cC0+bWF4TGVuIC0gaSk7CisJCS8qIEh1ZmZtYW4gZGVjb2RlIHZhbHVlIHRvIGdldCBuZXh0U3ltICh3aXRoIGJvdW5kcyBjaGVja2luZykgKi8KKwkJaWYgKChpID4gaHVmR3JvdXAtPm1heExlbikKKwkJCXx8ICgoKHVuc2lnbmVkKShqID0gKGo+PihodWZHcm91cC0+bWF4TGVuLWkpKS1iYXNlW2ldKSkKKwkJCQk+PSBNQVhfU1lNQk9MUykpCisJCQlyZXR1cm4gUkVUVkFMX0RBVEFfRVJST1I7CisJCW5leHRTeW0gPSBodWZHcm91cC0+cGVybXV0ZVtqXTsKKwkJLyogV2UgaGF2ZSBub3cgZGVjb2RlZCB0aGUgc3ltYm9sLCB3aGljaCBpbmRpY2F0ZXMKKwkJICAgZWl0aGVyIGEgbmV3IGxpdGVyYWwgYnl0ZSwgb3IgYSByZXBlYXRlZCBydW4gb2YgdGhlCisJCSAgIG1vc3QgcmVjZW50IGxpdGVyYWwgYnl0ZS4gIEZpcnN0LCBjaGVjayBpZiBuZXh0U3ltCisJCSAgIGluZGljYXRlcyBhIHJlcGVhdGVkIHJ1biwgYW5kIGlmIHNvIGxvb3AgY29sbGVjdGluZworCQkgICBob3cgbWFueSB0aW1lcyB0byByZXBlYXQgdGhlIGxhc3QgbGl0ZXJhbC4gKi8KKwkJaWYgKCgodW5zaWduZWQpbmV4dFN5bSkgPD0gU1lNQk9MX1JVTkIpIHsgLyogUlVOQSBvciBSVU5CICovCisJCQkvKiBJZiB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIG5ldyBydW4sIHplcm8gb3V0CisJCQkgKiBjb3VudGVyICovCisJCQlpZiAoIXJ1blBvcykgeworCQkJCXJ1blBvcyA9IDE7CisJCQkJdCA9IDA7CisJCQl9CisJCQkvKiBOZWF0IHRyaWNrIHRoYXQgc2F2ZXMgMSBzeW1ib2w6IGluc3RlYWQgb2YKKwkJCSAgIG9yLWluZyAwIG9yIDEgYXQgZWFjaCBiaXQgcG9zaXRpb24sIGFkZCAxCisJCQkgICBvciAyIGluc3RlYWQuICBGb3IgZXhhbXBsZSwgMTAxMSBpcyAxIDw8IDAKKwkJCSAgICsgMSA8PCAxICsgMiA8PCAyLiAgMTAxMCBpcyAyIDw8IDAgKyAyIDw8IDEKKwkJCSAgICsgMSA8PCAyLiAgWW91IGNhbiBtYWtlIGFueSBiaXQgcGF0dGVybgorCQkJICAgdGhhdCB3YXkgdXNpbmcgMSBsZXNzIHN5bWJvbCB0aGFuIHRoZSBiYXNpYworCQkJICAgb3IgMC8xIG1ldGhvZCAoZXhjZXB0IGFsbCBiaXRzIDAsIHdoaWNoCisJCQkgICB3b3VsZCB1c2Ugbm8gc3ltYm9scywgYnV0IGEgcnVuIG9mIGxlbmd0aCAwCisJCQkgICBkb2Vzbid0IG1lYW4gYW55dGhpbmcgaW4gdGhpcyBjb250ZXh0KS4KKwkJCSAgIFRodXMgc3BhY2UgaXMgc2F2ZWQuICovCisJCQl0ICs9IChydW5Qb3MgPDwgbmV4dFN5bSk7CisJCQkvKiArcnVuUG9zIGlmIFJVTkE7ICsyKnJ1blBvcyBpZiBSVU5CICovCisKKwkJCXJ1blBvcyA8PD0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFdoZW4gd2UgaGl0IHRoZSBmaXJzdCBub24tcnVuIHN5bWJvbCBhZnRlciBhIHJ1biwKKwkJICAgd2Ugbm93IGtub3cgaG93IG1hbnkgdGltZXMgdG8gcmVwZWF0IHRoZSBsYXN0CisJCSAgIGxpdGVyYWwsIHNvIGFwcGVuZCB0aGF0IG1hbnkgY29waWVzIHRvIG91ciBidWZmZXIKKwkJICAgb2YgZGVjb2RlZCBzeW1ib2xzIChkYnVmKSBub3cuICAoVGhlIGxhc3QgbGl0ZXJhbAorCQkgICB1c2VkIGlzIHRoZSBvbmUgYXQgdGhlIGhlYWQgb2YgdGhlIG10ZlN5bWJvbAorCQkgICBhcnJheS4pICovCisJCWlmIChydW5Qb3MpIHsKKwkJCXJ1blBvcyA9IDA7CisJCQlpZiAoZGJ1ZkNvdW50K3QgPj0gZGJ1ZlNpemUpCisJCQkJcmV0dXJuIFJFVFZBTF9EQVRBX0VSUk9SOworCisJCQl1YyA9IHN5bVRvQnl0ZVttdGZTeW1ib2xbMF1dOworCQkJYnl0ZUNvdW50W3VjXSArPSB0OworCQkJd2hpbGUgKHQtLSkKKwkJCQlkYnVmW2RidWZDb3VudCsrXSA9IHVjOworCQl9CisJCS8qIElzIHRoaXMgdGhlIHRlcm1pbmF0aW5nIHN5bWJvbD8gKi8KKwkJaWYgKG5leHRTeW0gPiBzeW1Ub3RhbCkKKwkJCWJyZWFrOworCQkvKiBBdCB0aGlzIHBvaW50LCBuZXh0U3ltIGluZGljYXRlcyBhIG5ldyBsaXRlcmFsCisJCSAgIGNoYXJhY3Rlci4gIFN1YnRyYWN0IG9uZSB0byBnZXQgdGhlIHBvc2l0aW9uIGluIHRoZQorCQkgICBNVEYgYXJyYXkgYXQgd2hpY2ggdGhpcyBsaXRlcmFsIGlzIGN1cnJlbnRseSB0byBiZQorCQkgICBmb3VuZC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBjYW4ndCBiZSAtMSBvciAwLAorCQkgICBiZWNhdXNlIDAgYW5kIDEgYXJlIFJVTkEgYW5kIFJVTkIuICBCdXQgYW5vdGhlcgorCQkgICBpbnN0YW5jZSBvZiB0aGUgZmlyc3Qgc3ltYm9sIGluIHRoZSBtdGYgYXJyYXksCisJCSAgIHBvc2l0aW9uIDAsIHdvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFzIHBhcnQgb2YgYQorCQkgICBydW4gYWJvdmUuICBUaGVyZWZvcmUgMSB1bnVzZWQgbXRmIHBvc2l0aW9uIG1pbnVzIDIKKwkJICAgbm9uLWxpdGVyYWwgbmV4dFN5bSB2YWx1ZXMgZXF1YWxzIC0xLikgKi8KKwkJaWYgKGRidWZDb3VudCA+PSBkYnVmU2l6ZSkKKwkJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwkJaSA9IG5leHRTeW0gLSAxOworCQl1YyA9IG10ZlN5bWJvbFtpXTsKKwkJLyogQWRqdXN0IHRoZSBNVEYgYXJyYXkuICBTaW5jZSB3ZSB0eXBpY2FsbHkgZXhwZWN0IHRvCisJCSAqbW92ZSBvbmx5IGEgc21hbGwgbnVtYmVyIG9mIHN5bWJvbHMsIGFuZCBhcmUgYm91bmQKKwkJICpieSAyNTYgaW4gYW55IGNhc2UsIHVzaW5nIG1lbW1vdmUgaGVyZSB3b3VsZAorCQkgKnR5cGljYWxseSBiZSBiaWdnZXIgYW5kIHNsb3dlciBkdWUgdG8gZnVuY3Rpb24gY2FsbAorCQkgKm92ZXJoZWFkIGFuZCBvdGhlciBhc3NvcnRlZCBzZXR1cCBjb3N0cy4gKi8KKwkJZG8geworCQkJbXRmU3ltYm9sW2ldID0gbXRmU3ltYm9sW2ktMV07CisJCX0gd2hpbGUgKC0taSk7CisJCW10ZlN5bWJvbFswXSA9IHVjOworCQl1YyA9IHN5bVRvQnl0ZVt1Y107CisJCS8qIFdlIGhhdmUgb3VyIGxpdGVyYWwgYnl0ZS4gIFNhdmUgaXQgaW50byBkYnVmLiAqLworCQlieXRlQ291bnRbdWNdKys7CisJCWRidWZbZGJ1ZkNvdW50KytdID0gKHVuc2lnbmVkIGludCl1YzsKKwl9CisJLyogQXQgdGhpcyBwb2ludCwgd2UndmUgcmVhZCBhbGwgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9scworCSAgIChhbmQgcmVwZWF0ZWQgcnVucykgZm9yIHRoaXMgYmxvY2sgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLAorCSAgIGFuZCBkZWNvZGVkIHRoZW0gaW50byB0aGUgaW50ZXJtZWRpYXRlIGJ1ZmZlci4gIFRoZXJlIGFyZQorCSAgIGRidWZDb3VudCBtYW55IGRlY29kZWQgYnl0ZXMgaW4gZGJ1ZltdLiAgTm93IHVuZG8gdGhlCisJICAgQnVycm93cy1XaGVlbGVyIHRyYW5zZm9ybSBvbiBkYnVmLiAgU2VlCisJICAgaHR0cDovL2RvZ21hLm5ldC9tYXJrbi9hcnRpY2xlcy9id3QvYnd0Lmh0bQorCSAqLworCS8qIFR1cm4gYnl0ZUNvdW50IGludG8gY3VtdWxhdGl2ZSBvY2N1cnJlbmNlIGNvdW50cyBvZiAwIHRvIG4tMS4gKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJayA9IGorYnl0ZUNvdW50W2ldOworCQlieXRlQ291bnRbaV0gPSBqOworCQlqID0gazsKKwl9CisJLyogRmlndXJlIG91dCB3aGF0IG9yZGVyIGRidWYgd291bGQgYmUgaW4gaWYgd2Ugc29ydGVkIGl0LiAqLworCWZvciAoaSA9IDA7IGkgPCBkYnVmQ291bnQ7IGkrKykgeworCQl1YyA9ICh1bnNpZ25lZCBjaGFyKShkYnVmW2ldICYgMHhmZik7CisJCWRidWZbYnl0ZUNvdW50W3VjXV0gfD0gKGkgPDwgOCk7CisJCWJ5dGVDb3VudFt1Y10rKzsKKwl9CisJLyogRGVjb2RlIGZpcnN0IGJ5dGUgYnkgaGFuZCB0byBpbml0aWFsaXplICJwcmV2aW91cyIgYnl0ZS4KKwkgICBOb3RlIHRoYXQgaXQgZG9lc24ndCBnZXQgb3V0cHV0LCBhbmQgaWYgdGhlIGZpcnN0IHRocmVlCisJICAgY2hhcmFjdGVycyBhcmUgaWRlbnRpY2FsIGl0IGRvZXNuJ3QgcXVhbGlmeSBhcyBhIHJ1biAoaGVuY2UKKwkgICB3cml0ZVJ1bkNvdW50ZG93biA9IDUpLiAqLworCWlmIChkYnVmQ291bnQpIHsKKwkJaWYgKG9yaWdQdHIgPj0gZGJ1ZkNvdW50KQorCQkJcmV0dXJuIFJFVFZBTF9EQVRBX0VSUk9SOworCQliZC0+d3JpdGVQb3MgPSBkYnVmW29yaWdQdHJdOworCQliZC0+d3JpdGVDdXJyZW50ID0gKHVuc2lnbmVkIGNoYXIpKGJkLT53cml0ZVBvcyYweGZmKTsKKwkJYmQtPndyaXRlUG9zID4+PSA4OworCQliZC0+d3JpdGVSdW5Db3VudGRvd24gPSA1OworCX0KKwliZC0+d3JpdGVDb3VudCA9IGRidWZDb3VudDsKKworCXJldHVybiBSRVRWQUxfT0s7Cit9CisKKy8qIFVuZG8gYnVycm93cy13aGVlbGVyIHRyYW5zZm9ybSBvbiBpbnRlcm1lZGlhdGUgYnVmZmVyIHRvIHByb2R1Y2Ugb3V0cHV0LgorICAgSWYgc3RhcnRfYnVuemlwIHdhcyBpbml0aWFsaXplZCB3aXRoIG91dF9mZCA9LTEsIHRoZW4gdXAgdG8gbGVuIGJ5dGVzIG9mCisgICBkYXRhIGFyZSB3cml0dGVuIHRvIG91dGJ1Zi4gIFJldHVybiB2YWx1ZSBpcyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvcgorICAgZXJyb3IgKGFsbCBlcnJvcnMgYXJlIG5lZ2F0aXZlIG51bWJlcnMpLiAgSWYgb3V0X2ZkIT0tMSwgb3V0YnVmIGFuZCBsZW4KKyAgIGFyZSBpZ25vcmVkLCBkYXRhIGlzIHdyaXR0ZW4gdG8gb3V0X2ZkIGFuZCByZXR1cm4gaXMgUkVUVkFMX09LIG9yIGVycm9yLgorKi8KKworc3RhdGljIGludCBJTklUIHJlYWRfYnVuemlwKHN0cnVjdCBidW56aXBfZGF0YSAqYmQsIGNoYXIgKm91dGJ1ZiwgaW50IGxlbikKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgKmRidWY7CisJaW50IHBvcywgeGN1cnJlbnQsIHByZXZpb3VzLCBnb3Rjb3VudDsKKworCS8qIElmIGxhc3QgcmVhZCB3YXMgc2hvcnQgZHVlIHRvIGVuZCBvZiBmaWxlLCByZXR1cm4gbGFzdCBibG9jayBub3cgKi8KKwlpZiAoYmQtPndyaXRlQ291bnQgPCAwKQorCQlyZXR1cm4gYmQtPndyaXRlQ291bnQ7CisKKwlnb3Rjb3VudCA9IDA7CisJZGJ1ZiA9IGJkLT5kYnVmOworCXBvcyA9IGJkLT53cml0ZVBvczsKKwl4Y3VycmVudCA9IGJkLT53cml0ZUN1cnJlbnQ7CisKKwkvKiBXZSB3aWxsIGFsd2F5cyBoYXZlIHBlbmRpbmcgZGVjb2RlZCBkYXRhIHRvIHdyaXRlIGludG8gdGhlIG91dHB1dAorCSAgIGJ1ZmZlciB1bmxlc3MgdGhpcyBpcyB0aGUgdmVyeSBmaXJzdCBjYWxsIChpbiB3aGljaCBjYXNlIHdlIGhhdmVuJ3QKKwkgICBIdWZmbWFuLWRlY29kZWQgYSBibG9jayBpbnRvIHRoZSBpbnRlcm1lZGlhdGUgYnVmZmVyIHlldCkuICovCisKKwlpZiAoYmQtPndyaXRlQ29waWVzKSB7CisJCS8qIEluc2lkZSB0aGUgbG9vcCwgd3JpdGVDb3BpZXMgbWVhbnMgZXh0cmEgY29waWVzIChiZXlvbmQgMSkgKi8KKwkJLS1iZC0+d3JpdGVDb3BpZXM7CisJCS8qIExvb3Agb3V0cHV0dGluZyBieXRlcyAqLworCQlmb3IgKDs7KSB7CisJCQkvKiBJZiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCBzbmFwc2hvdAorCQkJICogc3RhdGUgYW5kIHJldHVybiAqLworCQkJaWYgKGdvdGNvdW50ID49IGxlbikgeworCQkJCWJkLT53cml0ZVBvcyA9IHBvczsKKwkJCQliZC0+d3JpdGVDdXJyZW50ID0geGN1cnJlbnQ7CisJCQkJYmQtPndyaXRlQ29waWVzKys7CisJCQkJcmV0dXJuIGxlbjsKKwkJCX0KKwkJCS8qIFdyaXRlIG5leHQgYnl0ZSBpbnRvIG91dHB1dCBidWZmZXIsIHVwZGF0aW5nIENSQyAqLworCQkJb3V0YnVmW2dvdGNvdW50KytdID0geGN1cnJlbnQ7CisJCQliZC0+d3JpdGVDUkMgPSAoKChiZC0+d3JpdGVDUkMpIDw8IDgpCisJCQkJXmJkLT5jcmMzMlRhYmxlWygoYmQtPndyaXRlQ1JDKSA+PiAyNCkKKwkJCQleeGN1cnJlbnRdKTsKKwkJCS8qIExvb3Agbm93IGlmIHdlJ3JlIG91dHB1dHRpbmcgbXVsdGlwbGUKKwkJCSAqIGNvcGllcyBvZiB0aGlzIGJ5dGUgKi8KKwkJCWlmIChiZC0+d3JpdGVDb3BpZXMpIHsKKwkJCQktLWJkLT53cml0ZUNvcGllczsKKwkJCQljb250aW51ZTsKKwkJCX0KK2RlY29kZV9uZXh0X2J5dGU6CisJCQlpZiAoIWJkLT53cml0ZUNvdW50LS0pCisJCQkJYnJlYWs7CisJCQkvKiBGb2xsb3cgc2VxdWVuY2UgdmVjdG9yIHRvIHVuZG8KKwkJCSAqIEJ1cnJvd3MtV2hlZWxlciB0cmFuc2Zvcm0gKi8KKwkJCXByZXZpb3VzID0geGN1cnJlbnQ7CisJCQlwb3MgPSBkYnVmW3Bvc107CisJCQl4Y3VycmVudCA9IHBvcyYweGZmOworCQkJcG9zID4+PSA4OworCQkJLyogQWZ0ZXIgMyBjb25zZWN1dGl2ZSBjb3BpZXMgb2YgdGhlIHNhbWUKKwkJCSAgIGJ5dGUsIHRoZSA0dGggaXMgYSByZXBlYXQgY291bnQuICBXZSBjb3VudAorCQkJICAgZG93biBmcm9tIDQgaW5zdGVhZCAqb2YgY291bnRpbmcgdXAgYmVjYXVzZQorCQkJICAgdGVzdGluZyBmb3Igbm9uLXplcm8gaXMgZmFzdGVyICovCisJCQlpZiAoLS1iZC0+d3JpdGVSdW5Db3VudGRvd24pIHsKKwkJCQlpZiAoeGN1cnJlbnQgIT0gcHJldmlvdXMpCisJCQkJCWJkLT53cml0ZVJ1bkNvdW50ZG93biA9IDQ7CisJCQl9IGVsc2UgeworCQkJCS8qIFdlIGhhdmUgYSByZXBlYXRlZCBydW4sIHRoaXMgYnl0ZQorCQkJCSAqIGluZGljYXRlcyB0aGUgY291bnQgKi8KKwkJCQliZC0+d3JpdGVDb3BpZXMgPSB4Y3VycmVudDsKKwkJCQl4Y3VycmVudCA9IHByZXZpb3VzOworCQkJCWJkLT53cml0ZVJ1bkNvdW50ZG93biA9IDU7CisJCQkJLyogU29tZXRpbWVzIHRoZXJlIGFyZSBqdXN0IDMgYnl0ZXMKKwkJCQkgKiAocnVuIGxlbmd0aCAwKSAqLworCQkJCWlmICghYmQtPndyaXRlQ29waWVzKQorCQkJCQlnb3RvIGRlY29kZV9uZXh0X2J5dGU7CisJCQkJLyogU3VidHJhY3QgdGhlIDEgY29weSB3ZSdkIG91dHB1dAorCQkJCSAqIGFueXdheSB0byBnZXQgZXh0cmFzICovCisJCQkJLS1iZC0+d3JpdGVDb3BpZXM7CisJCQl9CisJCX0KKwkJLyogRGVjb21wcmVzc2lvbiBvZiB0aGlzIGJsb2NrIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KKwkJYmQtPndyaXRlQ1JDID0gfmJkLT53cml0ZUNSQzsKKwkJYmQtPnRvdGFsQ1JDID0gKChiZC0+dG90YWxDUkMgPDwgMSkgfAorCQkJCShiZC0+dG90YWxDUkMgPj4gMzEpKSBeIGJkLT53cml0ZUNSQzsKKwkJLyogSWYgdGhpcyBibG9jayBoYWQgYSBDUkMgZXJyb3IsIGZvcmNlIGZpbGUgbGV2ZWwgQ1JDIGVycm9yLiAqLworCQlpZiAoYmQtPndyaXRlQ1JDICE9IGJkLT5oZWFkZXJDUkMpIHsKKwkJCWJkLT50b3RhbENSQyA9IGJkLT5oZWFkZXJDUkMrMTsKKwkJCXJldHVybiBSRVRWQUxfTEFTVF9CTE9DSzsKKwkJfQorCX0KKworCS8qIFJlZmlsbCB0aGUgaW50ZXJtZWRpYXRlIGJ1ZmZlciBieSBIdWZmbWFuLWRlY29kaW5nIG5leHQKKwkgKiBibG9jayBvZiBpbnB1dCAqLworCS8qIChwcmV2aW91cyBpcyBqdXN0IGEgY29udmVuaWVudCB1bnVzZWQgdGVtcCB2YXJpYWJsZSBoZXJlKSAqLworCXByZXZpb3VzID0gZ2V0X25leHRfYmxvY2soYmQpOworCWlmIChwcmV2aW91cykgeworCQliZC0+d3JpdGVDb3VudCA9IHByZXZpb3VzOworCQlyZXR1cm4gKHByZXZpb3VzICE9IFJFVFZBTF9MQVNUX0JMT0NLKSA/IHByZXZpb3VzIDogZ290Y291bnQ7CisJfQorCWJkLT53cml0ZUNSQyA9IDB4ZmZmZmZmZmZVTDsKKwlwb3MgPSBiZC0+d3JpdGVQb3M7CisJeGN1cnJlbnQgPSBiZC0+d3JpdGVDdXJyZW50OworCWdvdG8gZGVjb2RlX25leHRfYnl0ZTsKK30KKworc3RhdGljIGludCBJTklUIG5vZmlsbCh2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIC0xOworfQorCisvKiBBbGxvY2F0ZSB0aGUgc3RydWN0dXJlLCByZWFkIGZpbGUgaGVhZGVyLiAgSWYgaW5fZmQgPT0tMSwgaW5idWYgbXVzdCBjb250YWluCisgICBhIGNvbXBsZXRlIGJ1bnppcCBmaWxlIChsZW4gYnl0ZXMgbG9uZykuICBJZiBpbl9mZCE9LTEsIGluYnVmIGFuZCBsZW4gYXJlCisgICBpZ25vcmVkLCBhbmQgZGF0YSBpcyByZWFkIGZyb20gZmlsZSBoYW5kbGUgaW50byB0ZW1wb3JhcnkgYnVmZmVyLiAqLworc3RhdGljIGludCBJTklUIHN0YXJ0X2J1bnppcChzdHJ1Y3QgYnVuemlwX2RhdGEgKipiZHAsIHZvaWQgKmluYnVmLCBpbnQgbGVuLAorCQkJICAgICBpbnQgKCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSkKK3sKKwlzdHJ1Y3QgYnVuemlwX2RhdGEgKmJkOworCXVuc2lnbmVkIGludCBpLCBqLCBjOworCWNvbnN0IHVuc2lnbmVkIGludCBCWmgwID0KKwkJKCgodW5zaWduZWQgaW50KSdCJykgPDwgMjQpKygoKHVuc2lnbmVkIGludCknWicpIDw8IDE2KQorCQkrKCgodW5zaWduZWQgaW50KSdoJykgPDwgOCkrKHVuc2lnbmVkIGludCknMCc7CisKKwkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIGRhdGEgdG8gYWxsb2NhdGUgKi8KKwlpID0gc2l6ZW9mKHN0cnVjdCBidW56aXBfZGF0YSk7CisKKwkvKiBBbGxvY2F0ZSBidW56aXBfZGF0YS4gIE1vc3QgZmllbGRzIGluaXRpYWxpemUgdG8gemVyby4gKi8KKwliZCA9ICpiZHAgPSBtYWxsb2MoaSk7CisJbWVtc2V0KGJkLCAwLCBzaXplb2Yoc3RydWN0IGJ1bnppcF9kYXRhKSk7CisJLyogU2V0dXAgaW5wdXQgYnVmZmVyICovCisJYmQtPmluYnVmID0gaW5idWY7CisJYmQtPmluYnVmQ291bnQgPSBsZW47CisJaWYgKGZpbGwgIT0gTlVMTCkKKwkJYmQtPmZpbGwgPSBmaWxsOworCWVsc2UKKwkJYmQtPmZpbGwgPSBub2ZpbGw7CisKKwkvKiBJbml0IHRoZSBDUkMzMiB0YWJsZSAoYmlnIGVuZGlhbikgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJYyA9IGkgPDwgMjQ7CisJCWZvciAoaiA9IDg7IGo7IGotLSkKKwkJCWMgPSBjJjB4ODAwMDAwMDAgPyAoYyA8PCAxKV4weDA0YzExZGI3IDogKGMgPDwgMSk7CisJCWJkLT5jcmMzMlRhYmxlW2ldID0gYzsKKwl9CisKKwkvKiBFbnN1cmUgdGhhdCBmaWxlIHN0YXJ0cyB3aXRoICJCWmhbJzEnLSc5J10uIiAqLworCWkgPSBnZXRfYml0cyhiZCwgMzIpOworCWlmICgoKHVuc2lnbmVkIGludCkoaS1CWmgwLTEpKSA+PSA5KQorCQlyZXR1cm4gUkVUVkFMX05PVF9CWklQX0RBVEE7CisKKwkvKiBGb3VydGggYnl0ZSAoYXNjaWkgJzEnLSc5JyksIGluZGljYXRlcyBibG9jayBzaXplIGluIHVuaXRzIG9mIDEwMGsgb2YKKwkgICB1bmNvbXByZXNzZWQgZGF0YS4gIEFsbG9jYXRlIGludGVybWVkaWF0ZSBidWZmZXIgZm9yIGJsb2NrLiAqLworCWJkLT5kYnVmU2l6ZSA9IDEwMDAwMCooaS1CWmgwKTsKKworCWJkLT5kYnVmID0gbGFyZ2VfbWFsbG9jKGJkLT5kYnVmU2l6ZSAqIHNpemVvZihpbnQpKTsKKwlyZXR1cm4gUkVUVkFMX09LOworfQorCisvKiBFeGFtcGxlIHVzYWdlOiBkZWNvbXByZXNzIHNyY19mZCB0byBkc3RfZmQuICAoU3RvcHMgYXQgZW5kIG9mIGJ6aXAyIGRhdGEsCisgICBub3QgZW5kIG9mIGZpbGUuKSAqLworU1RBVElDIGludCBJTklUIGJ1bnppcDIodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJaW50KCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkJCWludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkJdW5zaWduZWQgY2hhciAqb3V0YnVmLAorCQkJaW50ICpwb3MsCisJCQl2b2lkKCplcnJvcl9mbikoY2hhciAqeCkpCit7CisJc3RydWN0IGJ1bnppcF9kYXRhICpiZDsKKwlpbnQgaSA9IC0xOworCXVuc2lnbmVkIGNoYXIgKmluYnVmOworCisJc2V0X2Vycm9yX2ZuKGVycm9yX2ZuKTsKKwlpZiAoZmx1c2gpCisJCW91dGJ1ZiA9IG1hbGxvYyhCWklQMl9JT0JVRl9TSVpFKTsKKwllbHNlCisJCWxlbiAtPSA0OyAvKiBVbmNvbXByZXNzZWQgc2l6ZSBoYWNrIGFjdGl2ZSBpbiBwcmUtYm9vdAorCQkJICAgICBlbnZpcm9ubWVudCAqLworCWlmICghb3V0YnVmKSB7CisJCWVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmVyIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGJ1ZikKKwkJaW5idWYgPSBidWY7CisJZWxzZQorCQlpbmJ1ZiA9IG1hbGxvYyhCWklQMl9JT0JVRl9TSVpFKTsKKwlpZiAoIWluYnVmKSB7CisJCWVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgaW5wdXQgYnVmZXIiKTsKKwkJZ290byBleGl0XzA7CisJfQorCWkgPSBzdGFydF9idW56aXAoJmJkLCBpbmJ1ZiwgbGVuLCBmaWxsKTsKKwlpZiAoIWkpIHsKKwkJZm9yICg7OykgeworCQkJaSA9IHJlYWRfYnVuemlwKGJkLCBvdXRidWYsIEJaSVAyX0lPQlVGX1NJWkUpOworCQkJaWYgKGkgPD0gMCkKKwkJCQlicmVhazsKKwkJCWlmICghZmx1c2gpCisJCQkJb3V0YnVmICs9IGk7CisJCQllbHNlCisJCQkJaWYgKGkgIT0gZmx1c2gob3V0YnVmLCBpKSkgeworCQkJCQlpID0gUkVUVkFMX1VORVhQRUNURURfT1VUUFVUX0VPRjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQl9CisJfQorCS8qIENoZWNrIENSQyBhbmQgcmVsZWFzZSBtZW1vcnkgKi8KKwlpZiAoaSA9PSBSRVRWQUxfTEFTVF9CTE9DSykgeworCQlpZiAoYmQtPmhlYWRlckNSQyAhPSBiZC0+dG90YWxDUkMpCisJCQllcnJvcigiRGF0YSBpbnRlZ3JpdHkgZXJyb3Igd2hlbiBkZWNvbXByZXNzaW5nLiIpOworCQllbHNlCisJCQlpID0gUkVUVkFMX09LOworCX0gZWxzZSBpZiAoaSA9PSBSRVRWQUxfVU5FWFBFQ1RFRF9PVVRQVVRfRU9GKSB7CisJCWVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kcyB1bmV4cGVjdGVkbHkiKTsKKwl9CisJaWYgKGJkLT5kYnVmKQorCQlsYXJnZV9mcmVlKGJkLT5kYnVmKTsKKwlpZiAocG9zKQorCQkqcG9zID0gYmQtPmluYnVmUG9zOworCWZyZWUoYmQpOworCWlmICghYnVmKQorCQlmcmVlKGluYnVmKTsKK2V4aXRfMDoKKwlpZiAoZmx1c2gpCisJCWZyZWUob3V0YnVmKTsKKwlyZXR1cm4gaTsKK30KKworI2RlZmluZSBkZWNvbXByZXNzIGJ1bnppcDIKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYyBiL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzlhMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jCkBAIC0wLDAgKzEsMTY3IEBACisjaWZkZWYgU1RBVElDCisvKiBQcmUtYm9vdCBlbnZpcm9ubWVudDogaW5jbHVkZWQgKi8KKworLyogcHJldmVudCBpbmNsdXNpb24gb2YgX0xJTlVYX0tFUk5FTF9IIGluIHByZS1ib290IGVudmlyb25tZW50OiBsb3RzCisgKiBlcnJvcnMgYWJvdXQgY29uc29sZV9wcmludGsgZXRjLi4uIG9uIEFSTSAqLworI2RlZmluZSBfTElOVVhfS0VSTkVMX0gKKworI2luY2x1ZGUgInpsaWJfaW5mbGF0ZS9pbmZ0cmVlcy5jIgorI2luY2x1ZGUgInpsaWJfaW5mbGF0ZS9pbmZmYXN0LmMiCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZmxhdGUuYyIKKworI2Vsc2UgLyogU1RBVElDICovCisvKiBpbml0cmFtZnMgZXQgYWw6IGxpbmtlZCAqLworCisjaW5jbHVkZSA8bGludXgvenV0aWwuaD4KKworI2luY2x1ZGUgInpsaWJfaW5mbGF0ZS9pbmZ0cmVlcy5oIgorI2luY2x1ZGUgInpsaWJfaW5mbGF0ZS9pbmZmYXN0LmgiCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZmxhdGUuaCIKKworI2luY2x1ZGUgInpsaWJfaW5mbGF0ZS9pbmZ1dGlsLmgiCisKKyNlbmRpZiAvKiBTVEFUSUMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvbW0uaD4KKworI2RlZmluZSBJTkJVRl9MRU4gKDE2KjEwMjQpCisKKy8qIEluY2x1ZGVkIGZyb20gaW5pdHJhbWZzIGV0IGFsIGNvZGUgKi8KK1NUQVRJQyBpbnQgSU5JVCBndW56aXAodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkgICAgICAgaW50KCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkJICAgICAgIGludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0X2J1ZiwKKwkJICAgICAgIGludCAqcG9zLAorCQkgICAgICAgdm9pZCgqZXJyb3JfZm4pKGNoYXIgKngpKSB7CisJdTggKnpidWY7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cm07CisJaW50IHJjOworCXNpemVfdCBvdXRfbGVuOworCisJc2V0X2Vycm9yX2ZuKGVycm9yX2ZuKTsKKwlyYyA9IC0xOworCWlmIChmbHVzaCkgeworCQlvdXRfbGVuID0gMHg4MDAwOyAvKiAzMiBLICovCisJCW91dF9idWYgPSBtYWxsb2Mob3V0X2xlbik7CisJfSBlbHNlIHsKKwkJb3V0X2xlbiA9IDB4N2ZmZmZmZmY7IC8qIG5vIGxpbWl0ICovCisJfQorCWlmICghb3V0X2J1ZikgeworCQllcnJvcigiT3V0IG9mIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nIG91dHB1dCBidWZmZXIiKTsKKwkJZ290byBndW56aXBfbm9tZW0xOworCX0KKworCWlmIChidWYpCisJCXpidWYgPSBidWY7CisJZWxzZSB7CisJCXpidWYgPSBtYWxsb2MoSU5CVUZfTEVOKTsKKwkJbGVuID0gMDsKKwl9CisJaWYgKCF6YnVmKSB7CisJCWVycm9yKCJPdXQgb2YgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcgaW5wdXQgYnVmZmVyIik7CisJCWdvdG8gZ3VuemlwX25vbWVtMjsKKwl9CisKKwlzdHJtID0gbWFsbG9jKHNpemVvZigqc3RybSkpOworCWlmIChzdHJtID09IE5VTEwpIHsKKwkJZXJyb3IoIk91dCBvZiBtZW1vcnkgd2hpbGUgYWxsb2NhdGluZyB6X3N0cmVhbSIpOworCQlnb3RvIGd1bnppcF9ub21lbTM7CisJfQorCisJc3RybS0+d29ya3NwYWNlID0gbWFsbG9jKGZsdXNoID8gemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSA6CisJCQkJIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOworCWlmIChzdHJtLT53b3Jrc3BhY2UgPT0gTlVMTCkgeworCQllcnJvcigiT3V0IG9mIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nIHdvcmtzcGFjZSIpOworCQlnb3RvIGd1bnppcF9ub21lbTQ7CisJfQorCisJaWYgKGxlbiA9PSAwKQorCQlsZW4gPSBmaWxsKHpidWYsIElOQlVGX0xFTik7CisKKwkvKiB2ZXJpZnkgdGhlIGd6aXAgaGVhZGVyICovCisJaWYgKGxlbiA8IDEwIHx8CisJICAgemJ1ZlswXSAhPSAweDFmIHx8IHpidWZbMV0gIT0gMHg4YiB8fCB6YnVmWzJdICE9IDB4MDgpIHsKKwkJaWYgKHBvcykKKwkJCSpwb3MgPSAwOworCQllcnJvcigiTm90IGEgZ3ppcCBmaWxlIik7CisJCWdvdG8gZ3VuemlwXzU7CisJfQorCisJLyogc2tpcCBvdmVyIGd6aXAgaGVhZGVyICgxZiw4YiwwOC4uLiAxMCBieXRlcyB0b3RhbCArCisJICogcG9zc2libGUgYXNjaXogZmlsZW5hbWUpCisJICovCisJc3RybS0+bmV4dF9pbiA9IHpidWYgKyAxMDsKKwkvKiBza2lwIG92ZXIgYXNjaXogZmlsZW5hbWUgKi8KKwlpZiAoemJ1ZlszXSAmIDB4OCkgeworCQl3aGlsZSAoc3RybS0+bmV4dF9pblswXSkKKwkJCXN0cm0tPm5leHRfaW4rKzsKKwkJc3RybS0+bmV4dF9pbisrOworCX0KKwlzdHJtLT5hdmFpbF9pbiA9IGxlbiAtIChzdHJtLT5uZXh0X2luIC0gemJ1Zik7CisKKwlzdHJtLT5uZXh0X291dCA9IG91dF9idWY7CisJc3RybS0+YXZhaWxfb3V0ID0gb3V0X2xlbjsKKworCXJjID0gemxpYl9pbmZsYXRlSW5pdDIoc3RybSwgLU1BWF9XQklUUyk7CisKKwlpZiAoIWZsdXNoKSB7CisJCVdTKHN0cm0pLT5pbmZsYXRlX3N0YXRlLndzaXplID0gMDsKKwkJV1Moc3RybSktPmluZmxhdGVfc3RhdGUud2luZG93ID0gTlVMTDsKKwl9CisKKwl3aGlsZSAocmMgPT0gWl9PSykgeworCQlpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworCQkJLyogVE9ETzogaGFuZGxlIGNhc2Ugd2hlcmUgYm90aCBwb3MgYW5kIGZpbGwgYXJlIHNldCAqLworCQkJbGVuID0gZmlsbCh6YnVmLCBJTkJVRl9MRU4pOworCQkJaWYgKGxlbiA8IDApIHsKKwkJCQlyYyA9IC0xOworCQkJCWVycm9yKCJyZWFkIGVycm9yIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzdHJtLT5uZXh0X2luID0gemJ1ZjsKKwkJCXN0cm0tPmF2YWlsX2luID0gbGVuOworCQl9CisJCXJjID0gemxpYl9pbmZsYXRlKHN0cm0sIDApOworCisJCS8qIFdyaXRlIGFueSBkYXRhIGdlbmVyYXRlZCAqLworCQlpZiAoZmx1c2ggJiYgc3RybS0+bmV4dF9vdXQgPiBvdXRfYnVmKSB7CisJCQlpbnQgbCA9IHN0cm0tPm5leHRfb3V0IC0gb3V0X2J1ZjsKKwkJCWlmIChsICE9IGZsdXNoKG91dF9idWYsIGwpKSB7CisJCQkJcmMgPSAtMTsKKwkJCQllcnJvcigid3JpdGUgZXJyb3IiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cm0tPm5leHRfb3V0ID0gb3V0X2J1ZjsKKwkJCXN0cm0tPmF2YWlsX291dCA9IG91dF9sZW47CisJCX0KKworCQkvKiBhZnRlciBaX0ZJTklTSCwgb25seSBaX1NUUkVBTV9FTkQgaXMgIndlIHVucGFja2VkIGl0IGFsbCIgKi8KKwkJaWYgKHJjID09IFpfU1RSRUFNX0VORCkgeworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmMgIT0gWl9PSykgeworCQkJZXJyb3IoInVuY29tcHJlc3Npb24gZXJyb3IiKTsKKwkJCXJjID0gLTE7CisJCX0KKwl9CisKKwl6bGliX2luZmxhdGVFbmQoc3RybSk7CisJaWYgKHBvcykKKwkJLyogYWRkICsgOCB0byBza2lwIG92ZXIgdHJhaWxlciAqLworCQkqcG9zID0gc3RybS0+bmV4dF9pbiAtIHpidWYrODsKKworZ3VuemlwXzU6CisJZnJlZShzdHJtLT53b3Jrc3BhY2UpOworZ3VuemlwX25vbWVtNDoKKwlmcmVlKHN0cm0pOworZ3VuemlwX25vbWVtMzoKKwlpZiAoIWJ1ZikKKwkJZnJlZSh6YnVmKTsKK2d1bnppcF9ub21lbTI6CisJaWYgKGZsdXNoKQorCQlmcmVlKG91dF9idWYpOworZ3VuemlwX25vbWVtMToKKwlyZXR1cm4gcmM7IC8qIHJldHVybnMgWl9PSyAoMCkgaWYgc3VjY2Vzc2Z1bCAqLworfQorCisjZGVmaW5lIGRlY29tcHJlc3MgZ3VuemlwCmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzc191bmx6bWEuYyBiL2xpYi9kZWNvbXByZXNzX3VubHptYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmYyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVjb21wcmVzc191bmx6bWEuYwpAQCAtMCwwICsxLDY0NyBAQAorLyogTHptYSBkZWNvbXByZXNzb3IgZm9yIExpbnV4IGtlcm5lbC4gU2hhbWVsZXNzbHkgc25hcmZlZAorICpmcm9tIGJ1c3lib3ggMS4xLjEKKyAqCisgKkxpbnV4IGtlcm5lbCBhZGFwdGF0aW9uCisgKkNvcHlyaWdodCAoQykgMjAwNiAgQWxhaW4gPCBhbGFpbkBrbmFmZi5sdSA+CisgKgorICpCYXNlZCBvbiBzbWFsbCBsem1hIGRlZmxhdGUgaW1wbGVtZW50YXRpb24vU21hbGwgcmFuZ2UgY29kZXIKKyAqaW1wbGVtZW50YXRpb24gZm9yIGx6bWEuCisgKkNvcHlyaWdodCAoQykgMjAwNiAgQXVyZWxpZW4gSmFjb2JzIDwgYXVyZWxAZ251YWdlLm9yZyA+CisgKgorICpCYXNlZCBvbiBMem1hRGVjb2RlLmMgZnJvbSB0aGUgTFpNQSBTREsgNC4yMiAoaHR0cDovL3d3dy43LXppcC5vcmcvKQorICpDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSAgSWdvciBQYXZsb3YKKyAqCisgKkNvcHlyaWdodHMgb2YgdGhlIHBhcnRzLCBzZWUgaGVhZGVycyBiZWxvdy4KKyAqCisgKgorICpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKnZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKkxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFNUQVRJQworI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvdW5sem1hLmg+CisjZW5kaWYgLyogU1RBVElDICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL21tLmg+CisKKyNkZWZpbmUJTUlOKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworc3RhdGljIGxvbmcgbG9uZyBJTklUIHJlYWRfaW50KHVuc2lnbmVkIGNoYXIgKnB0ciwgaW50IHNpemUpCit7CisJaW50IGk7CisJbG9uZyBsb25nIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlyZXQgPSAocmV0IDw8IDgpIHwgcHRyW3NpemUtaS0xXTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEVORElBTl9DT05WRVJUKHgpIFwKKyAgeCA9ICh0eXBlb2YoeCkpcmVhZF9pbnQoKHVuc2lnbmVkIGNoYXIgKikmeCwgc2l6ZW9mKHgpKQorCisKKy8qIFNtYWxsIHJhbmdlIGNvZGVyIGltcGxlbWVudGF0aW9uIGZvciBsem1hLgorICpDb3B5cmlnaHQgKEMpIDIwMDYgIEF1cmVsaWVuIEphY29icyA8IGF1cmVsQGdudWFnZS5vcmcgPgorICoKKyAqQmFzZWQgb24gTHptYURlY29kZS5jIGZyb20gdGhlIExaTUEgU0RLIDQuMjIgKGh0dHA6Ly93d3cuNy16aXAub3JnLykKKyAqQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgIElnb3IgUGF2bG92CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgTFpNQV9JT0JVRl9TSVpFCTB4MTAwMDAKKworc3RydWN0IHJjIHsKKwlpbnQgKCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KTsKKwl1aW50OF90ICpwdHI7CisJdWludDhfdCAqYnVmZmVyOworCXVpbnQ4X3QgKmJ1ZmZlcl9lbmQ7CisJaW50IGJ1ZmZlcl9zaXplOworCXVpbnQzMl90IGNvZGU7CisJdWludDMyX3QgcmFuZ2U7CisJdWludDMyX3QgYm91bmQ7Cit9OworCisKKyNkZWZpbmUgUkNfVE9QX0JJVFMgMjQKKyNkZWZpbmUgUkNfTU9WRV9CSVRTIDUKKyNkZWZpbmUgUkNfTU9ERUxfVE9UQUxfQklUUyAxMQorCisKKy8qIENhbGxlZCB0d2ljZTogb25jZSBhdCBzdGFydHVwIGFuZCBvbmNlIGluIHJjX25vcm1hbGl6ZSgpICovCitzdGF0aWMgdm9pZCBJTklUIHJjX3JlYWQoc3RydWN0IHJjICpyYykKK3sKKwlyYy0+YnVmZmVyX3NpemUgPSByYy0+ZmlsbCgoY2hhciAqKXJjLT5idWZmZXIsIExaTUFfSU9CVUZfU0laRSk7CisJaWYgKHJjLT5idWZmZXJfc2l6ZSA8PSAwKQorCQllcnJvcigidW5leHBlY3RlZCBFT0YiKTsKKwlyYy0+cHRyID0gcmMtPmJ1ZmZlcjsKKwlyYy0+YnVmZmVyX2VuZCA9IHJjLT5idWZmZXIgKyByYy0+YnVmZmVyX3NpemU7Cit9CisKKy8qIENhbGxlZCBvbmNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVCByY19pbml0KHN0cnVjdCByYyAqcmMsCisJCQkJICAgICAgIGludCAoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkJCSAgICAgICBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlyYy0+ZmlsbCA9IGZpbGw7CisJcmMtPmJ1ZmZlciA9ICh1aW50OF90ICopYnVmZmVyOworCXJjLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCXJjLT5idWZmZXJfZW5kID0gcmMtPmJ1ZmZlciArIHJjLT5idWZmZXJfc2l6ZTsKKwlyYy0+cHRyID0gcmMtPmJ1ZmZlcjsKKworCXJjLT5jb2RlID0gMDsKKwlyYy0+cmFuZ2UgPSAweEZGRkZGRkZGOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVCByY19pbml0X2NvZGUoc3RydWN0IHJjICpyYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKHJjLT5wdHIgPj0gcmMtPmJ1ZmZlcl9lbmQpCisJCQlyY19yZWFkKHJjKTsKKwkJcmMtPmNvZGUgPSAocmMtPmNvZGUgPDwgOCkgfCAqcmMtPnB0cisrOworCX0KK30KKworCisvKiBDYWxsZWQgb25jZS4gVE9ETzogYmJfbWF5YmVfZnJlZSgpICovCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVCByY19mcmVlKHN0cnVjdCByYyAqcmMpCit7CisJZnJlZShyYy0+YnVmZmVyKTsKK30KKworLyogQ2FsbGVkIHR3aWNlLCBidXQgb25lIGNhbGxzaXRlIGlzIGluIGlubGluZSdkIHJjX2lzX2JpdF8wX2hlbHBlcigpICovCitzdGF0aWMgdm9pZCBJTklUIHJjX2RvX25vcm1hbGl6ZShzdHJ1Y3QgcmMgKnJjKQoreworCWlmIChyYy0+cHRyID49IHJjLT5idWZmZXJfZW5kKQorCQlyY19yZWFkKHJjKTsKKwlyYy0+cmFuZ2UgPDw9IDg7CisJcmMtPmNvZGUgPSAocmMtPmNvZGUgPDwgOCkgfCAqcmMtPnB0cisrOworfQorc3RhdGljIGlubGluZSB2b2lkIElOSVQgcmNfbm9ybWFsaXplKHN0cnVjdCByYyAqcmMpCit7CisJaWYgKHJjLT5yYW5nZSA8ICgxIDw8IFJDX1RPUF9CSVRTKSkKKwkJcmNfZG9fbm9ybWFsaXplKHJjKTsKK30KKworLyogQ2FsbGVkIDkgdGltZXMgKi8KKy8qIFdoeSByY19pc19iaXRfMF9oZWxwZXIgZXhpc3RzPworICpCZWNhdXNlIHdlIHdhbnQgdG8gYWx3YXlzIGV4cG9zZSAocmMtPmNvZGUgPCByYy0+Ym91bmQpIHRvIG9wdGltaXplcgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IElOSVQgcmNfaXNfYml0XzBfaGVscGVyKHN0cnVjdCByYyAqcmMsIHVpbnQxNl90ICpwKQoreworCXJjX25vcm1hbGl6ZShyYyk7CisJcmMtPmJvdW5kID0gKnAgKiAocmMtPnJhbmdlID4+IFJDX01PREVMX1RPVEFMX0JJVFMpOworCXJldHVybiByYy0+Ym91bmQ7Cit9CitzdGF0aWMgaW5saW5lIGludCBJTklUIHJjX2lzX2JpdF8wKHN0cnVjdCByYyAqcmMsIHVpbnQxNl90ICpwKQoreworCXVpbnQzMl90IHQgPSByY19pc19iaXRfMF9oZWxwZXIocmMsIHApOworCXJldHVybiByYy0+Y29kZSA8IHQ7Cit9CisKKy8qIENhbGxlZCB+MTAgdGltZXMsIGJ1dCB2ZXJ5IHNtYWxsLCB0aHVzIGlubGluZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIHJjX3VwZGF0ZV9iaXRfMChzdHJ1Y3QgcmMgKnJjLCB1aW50MTZfdCAqcCkKK3sKKwlyYy0+cmFuZ2UgPSByYy0+Ym91bmQ7CisJKnAgKz0gKCgxIDw8IFJDX01PREVMX1RPVEFMX0JJVFMpIC0gKnApID4+IFJDX01PVkVfQklUUzsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByY191cGRhdGVfYml0XzEoc3RydWN0IHJjICpyYywgdWludDE2X3QgKnApCit7CisJcmMtPnJhbmdlIC09IHJjLT5ib3VuZDsKKwlyYy0+Y29kZSAtPSByYy0+Ym91bmQ7CisJKnAgLT0gKnAgPj4gUkNfTU9WRV9CSVRTOworfQorCisvKiBDYWxsZWQgNCB0aW1lcyBpbiB1bmx6bWEgbG9vcCAqLworc3RhdGljIGludCBJTklUIHJjX2dldF9iaXQoc3RydWN0IHJjICpyYywgdWludDE2X3QgKnAsIGludCAqc3ltYm9sKQoreworCWlmIChyY19pc19iaXRfMChyYywgcCkpIHsKKwkJcmNfdXBkYXRlX2JpdF8wKHJjLCBwKTsKKwkJKnN5bWJvbCAqPSAyOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyY191cGRhdGVfYml0XzEocmMsIHApOworCQkqc3ltYm9sID0gKnN5bWJvbCAqIDIgKyAxOworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIENhbGxlZCBvbmNlICovCitzdGF0aWMgaW5saW5lIGludCBJTklUIHJjX2RpcmVjdF9iaXQoc3RydWN0IHJjICpyYykKK3sKKwlyY19ub3JtYWxpemUocmMpOworCXJjLT5yYW5nZSA+Pj0gMTsKKwlpZiAocmMtPmNvZGUgPj0gcmMtPnJhbmdlKSB7CisJCXJjLT5jb2RlIC09IHJjLT5yYW5nZTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBDYWxsZWQgdHdpY2UgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUCityY19iaXRfdHJlZV9kZWNvZGUoc3RydWN0IHJjICpyYywgdWludDE2X3QgKnAsIGludCBudW1fbGV2ZWxzLCBpbnQgKnN5bWJvbCkKK3sKKwlpbnQgaSA9IG51bV9sZXZlbHM7CisKKwkqc3ltYm9sID0gMTsKKwl3aGlsZSAoaS0tKQorCQlyY19nZXRfYml0KHJjLCBwICsgKnN5bWJvbCwgc3ltYm9sKTsKKwkqc3ltYm9sIC09IDEgPDwgbnVtX2xldmVsczsKK30KKworCisvKgorICogU21hbGwgbHptYSBkZWZsYXRlIGltcGxlbWVudGF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBBdXJlbGllbiBKYWNvYnMgPCBhdXJlbEBnbnVhZ2Uub3JnID4KKyAqCisgKiBCYXNlZCBvbiBMem1hRGVjb2RlLmMgZnJvbSB0aGUgTFpNQSBTREsgNC4yMiAoaHR0cDovL3d3dy43LXppcC5vcmcvKQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDUgIElnb3IgUGF2bG92CisgKi8KKworCitzdHJ1Y3QgbHptYV9oZWFkZXIgeworCXVpbnQ4X3QgcG9zOworCXVpbnQzMl90IGRpY3Rfc2l6ZTsKKwl1aW50NjRfdCBkc3Rfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKworCisjZGVmaW5lIExaTUFfQkFTRV9TSVpFIDE4NDYKKyNkZWZpbmUgTFpNQV9MSVRfU0laRSA3NjgKKworI2RlZmluZSBMWk1BX05VTV9QT1NfQklUU19NQVggNAorCisjZGVmaW5lIExaTUFfTEVOX05VTV9MT1dfQklUUyAzCisjZGVmaW5lIExaTUFfTEVOX05VTV9NSURfQklUUyAzCisjZGVmaW5lIExaTUFfTEVOX05VTV9ISUdIX0JJVFMgOAorCisjZGVmaW5lIExaTUFfTEVOX0NIT0lDRSAwCisjZGVmaW5lIExaTUFfTEVOX0NIT0lDRV8yIChMWk1BX0xFTl9DSE9JQ0UgKyAxKQorI2RlZmluZSBMWk1BX0xFTl9MT1cgKExaTUFfTEVOX0NIT0lDRV8yICsgMSkKKyNkZWZpbmUgTFpNQV9MRU5fTUlEIChMWk1BX0xFTl9MT1cgXAorCQkgICAgICArICgxIDw8IChMWk1BX05VTV9QT1NfQklUU19NQVggKyBMWk1BX0xFTl9OVU1fTE9XX0JJVFMpKSkKKyNkZWZpbmUgTFpNQV9MRU5fSElHSCAoTFpNQV9MRU5fTUlEIFwKKwkJICAgICAgICsoMSA8PCAoTFpNQV9OVU1fUE9TX0JJVFNfTUFYICsgTFpNQV9MRU5fTlVNX01JRF9CSVRTKSkpCisjZGVmaW5lIExaTUFfTlVNX0xFTl9QUk9CUyAoTFpNQV9MRU5fSElHSCArICgxIDw8IExaTUFfTEVOX05VTV9ISUdIX0JJVFMpKQorCisjZGVmaW5lIExaTUFfTlVNX1NUQVRFUyAxMgorI2RlZmluZSBMWk1BX05VTV9MSVRfU1RBVEVTIDcKKworI2RlZmluZSBMWk1BX1NUQVJUX1BPU19NT0RFTF9JTkRFWCA0CisjZGVmaW5lIExaTUFfRU5EX1BPU19NT0RFTF9JTkRFWCAxNAorI2RlZmluZSBMWk1BX05VTV9GVUxMX0RJU1RBTkNFUyAoMSA8PCAoTFpNQV9FTkRfUE9TX01PREVMX0lOREVYID4+IDEpKQorCisjZGVmaW5lIExaTUFfTlVNX1BPU19TTE9UX0JJVFMgNgorI2RlZmluZSBMWk1BX05VTV9MRU5fVE9fUE9TX1NUQVRFUyA0CisKKyNkZWZpbmUgTFpNQV9OVU1fQUxJR05fQklUUyA0CisKKyNkZWZpbmUgTFpNQV9NQVRDSF9NSU5fTEVOIDIKKworI2RlZmluZSBMWk1BX0lTX01BVENIIDAKKyNkZWZpbmUgTFpNQV9JU19SRVAgKExaTUFfSVNfTUFUQ0ggKyAoTFpNQV9OVU1fU1RBVEVTIDw8IExaTUFfTlVNX1BPU19CSVRTX01BWCkpCisjZGVmaW5lIExaTUFfSVNfUkVQX0cwIChMWk1BX0lTX1JFUCArIExaTUFfTlVNX1NUQVRFUykKKyNkZWZpbmUgTFpNQV9JU19SRVBfRzEgKExaTUFfSVNfUkVQX0cwICsgTFpNQV9OVU1fU1RBVEVTKQorI2RlZmluZSBMWk1BX0lTX1JFUF9HMiAoTFpNQV9JU19SRVBfRzEgKyBMWk1BX05VTV9TVEFURVMpCisjZGVmaW5lIExaTUFfSVNfUkVQXzBfTE9ORyAoTFpNQV9JU19SRVBfRzIgKyBMWk1BX05VTV9TVEFURVMpCisjZGVmaW5lIExaTUFfUE9TX1NMT1QgKExaTUFfSVNfUkVQXzBfTE9ORyBcCisJCSAgICAgICArIChMWk1BX05VTV9TVEFURVMgPDwgTFpNQV9OVU1fUE9TX0JJVFNfTUFYKSkKKyNkZWZpbmUgTFpNQV9TUEVDX1BPUyAoTFpNQV9QT1NfU0xPVCBcCisJCSAgICAgICArKExaTUFfTlVNX0xFTl9UT19QT1NfU1RBVEVTIDw8IExaTUFfTlVNX1BPU19TTE9UX0JJVFMpKQorI2RlZmluZSBMWk1BX0FMSUdOIChMWk1BX1NQRUNfUE9TIFwKKwkJICAgICsgTFpNQV9OVU1fRlVMTF9ESVNUQU5DRVMgLSBMWk1BX0VORF9QT1NfTU9ERUxfSU5ERVgpCisjZGVmaW5lIExaTUFfTEVOX0NPREVSIChMWk1BX0FMSUdOICsgKDEgPDwgTFpNQV9OVU1fQUxJR05fQklUUykpCisjZGVmaW5lIExaTUFfUkVQX0xFTl9DT0RFUiAoTFpNQV9MRU5fQ09ERVIgKyBMWk1BX05VTV9MRU5fUFJPQlMpCisjZGVmaW5lIExaTUFfTElURVJBTCAoTFpNQV9SRVBfTEVOX0NPREVSICsgTFpNQV9OVU1fTEVOX1BST0JTKQorCisKK3N0cnVjdCB3cml0ZXIgeworCXVpbnQ4X3QgKmJ1ZmZlcjsKKwl1aW50OF90IHByZXZpb3VzX2J5dGU7CisJc2l6ZV90IGJ1ZmZlcl9wb3M7CisJaW50IGJ1ZnNpemU7CisJc2l6ZV90IGdsb2JhbF9wb3M7CisJaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCk7CisJc3RydWN0IGx6bWFfaGVhZGVyICpoZWFkZXI7Cit9OworCitzdHJ1Y3QgY3N0YXRlIHsKKwlpbnQgc3RhdGU7CisJdWludDMyX3QgcmVwMCwgcmVwMSwgcmVwMiwgcmVwMzsKK307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IElOSVQgZ2V0X3BvcyhzdHJ1Y3Qgd3JpdGVyICp3cikKK3sKKwlyZXR1cm4KKwkJd3ItPmdsb2JhbF9wb3MgKyB3ci0+YnVmZmVyX3BvczsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IElOSVQgcGVla19vbGRfYnl0ZShzdHJ1Y3Qgd3JpdGVyICp3ciwKKwkJCQkJCXVpbnQzMl90IG9mZnMpCit7CisJaWYgKCF3ci0+Zmx1c2gpIHsKKwkJaW50MzJfdCBwb3M7CisJCXdoaWxlIChvZmZzID4gd3ItPmhlYWRlci0+ZGljdF9zaXplKQorCQkJb2ZmcyAtPSB3ci0+aGVhZGVyLT5kaWN0X3NpemU7CisJCXBvcyA9IHdyLT5idWZmZXJfcG9zIC0gb2ZmczsKKwkJcmV0dXJuIHdyLT5idWZmZXJbcG9zXTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCBwb3MgPSB3ci0+YnVmZmVyX3BvcyAtIG9mZnM7CisJCXdoaWxlIChwb3MgPj0gd3ItPmhlYWRlci0+ZGljdF9zaXplKQorCQkJcG9zICs9IHdyLT5oZWFkZXItPmRpY3Rfc2l6ZTsKKwkJcmV0dXJuIHdyLT5idWZmZXJbcG9zXTsKKwl9CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIElOSVQgd3JpdGVfYnl0ZShzdHJ1Y3Qgd3JpdGVyICp3ciwgdWludDhfdCBieXRlKQoreworCXdyLT5idWZmZXJbd3ItPmJ1ZmZlcl9wb3MrK10gPSB3ci0+cHJldmlvdXNfYnl0ZSA9IGJ5dGU7CisJaWYgKHdyLT5mbHVzaCAmJiB3ci0+YnVmZmVyX3BvcyA9PSB3ci0+aGVhZGVyLT5kaWN0X3NpemUpIHsKKwkJd3ItPmJ1ZmZlcl9wb3MgPSAwOworCQl3ci0+Z2xvYmFsX3BvcyArPSB3ci0+aGVhZGVyLT5kaWN0X3NpemU7CisJCXdyLT5mbHVzaCgoY2hhciAqKXdyLT5idWZmZXIsIHdyLT5oZWFkZXItPmRpY3Rfc2l6ZSk7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIGNvcHlfYnl0ZShzdHJ1Y3Qgd3JpdGVyICp3ciwgdWludDMyX3Qgb2ZmcykKK3sKKwl3cml0ZV9ieXRlKHdyLCBwZWVrX29sZF9ieXRlKHdyLCBvZmZzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIGNvcHlfYnl0ZXMoc3RydWN0IHdyaXRlciAqd3IsCisJCQkJCSB1aW50MzJfdCByZXAwLCBpbnQgbGVuKQoreworCWRvIHsKKwkJY29weV9ieXRlKHdyLCByZXAwKTsKKwkJbGVuLS07CisJfSB3aGlsZSAobGVuICE9IDAgJiYgd3ItPmJ1ZmZlcl9wb3MgPCB3ci0+aGVhZGVyLT5kc3Rfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIHByb2Nlc3NfYml0MChzdHJ1Y3Qgd3JpdGVyICp3ciwgc3RydWN0IHJjICpyYywKKwkJCQkgICAgIHN0cnVjdCBjc3RhdGUgKmNzdCwgdWludDE2X3QgKnAsCisJCQkJICAgICBpbnQgcG9zX3N0YXRlLCB1aW50MTZfdCAqcHJvYiwKKwkJCQkgICAgIGludCBsYywgdWludDMyX3QgbGl0ZXJhbF9wb3NfbWFzaykgeworCWludCBtaSA9IDE7CisJcmNfdXBkYXRlX2JpdF8wKHJjLCBwcm9iKTsKKwlwcm9iID0gKHAgKyBMWk1BX0xJVEVSQUwgKworCQkoTFpNQV9MSVRfU0laRQorCQkgKiAoKChnZXRfcG9zKHdyKSAmIGxpdGVyYWxfcG9zX21hc2spIDw8IGxjKQorCQkgICAgKyAod3ItPnByZXZpb3VzX2J5dGUgPj4gKDggLSBsYykpKSkKKwkJKTsKKworCWlmIChjc3QtPnN0YXRlID49IExaTUFfTlVNX0xJVF9TVEFURVMpIHsKKwkJaW50IG1hdGNoX2J5dGUgPSBwZWVrX29sZF9ieXRlKHdyLCBjc3QtPnJlcDApOworCQlkbyB7CisJCQlpbnQgYml0OworCQkJdWludDE2X3QgKnByb2JfbGl0OworCisJCQltYXRjaF9ieXRlIDw8PSAxOworCQkJYml0ID0gbWF0Y2hfYnl0ZSAmIDB4MTAwOworCQkJcHJvYl9saXQgPSBwcm9iICsgMHgxMDAgKyBiaXQgKyBtaTsKKwkJCWlmIChyY19nZXRfYml0KHJjLCBwcm9iX2xpdCwgJm1pKSkgeworCQkJCWlmICghYml0KQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGJpdCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKG1pIDwgMHgxMDApOworCX0KKwl3aGlsZSAobWkgPCAweDEwMCkgeworCQl1aW50MTZfdCAqcHJvYl9saXQgPSBwcm9iICsgbWk7CisJCXJjX2dldF9iaXQocmMsIHByb2JfbGl0LCAmbWkpOworCX0KKwl3cml0ZV9ieXRlKHdyLCBtaSk7CisJaWYgKGNzdC0+c3RhdGUgPCA0KQorCQljc3QtPnN0YXRlID0gMDsKKwllbHNlIGlmIChjc3QtPnN0YXRlIDwgMTApCisJCWNzdC0+c3RhdGUgLT0gMzsKKwllbHNlCisJCWNzdC0+c3RhdGUgLT0gNjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIElOSVQgcHJvY2Vzc19iaXQxKHN0cnVjdCB3cml0ZXIgKndyLCBzdHJ1Y3QgcmMgKnJjLAorCQkJCQkgICAgc3RydWN0IGNzdGF0ZSAqY3N0LCB1aW50MTZfdCAqcCwKKwkJCQkJICAgIGludCBwb3Nfc3RhdGUsIHVpbnQxNl90ICpwcm9iKSB7CisgIGludCBvZmZzZXQ7CisJdWludDE2X3QgKnByb2JfbGVuOworCWludCBudW1fYml0czsKKwlpbnQgbGVuOworCisJcmNfdXBkYXRlX2JpdF8xKHJjLCBwcm9iKTsKKwlwcm9iID0gcCArIExaTUFfSVNfUkVQICsgY3N0LT5zdGF0ZTsKKwlpZiAocmNfaXNfYml0XzAocmMsIHByb2IpKSB7CisJCXJjX3VwZGF0ZV9iaXRfMChyYywgcHJvYik7CisJCWNzdC0+cmVwMyA9IGNzdC0+cmVwMjsKKwkJY3N0LT5yZXAyID0gY3N0LT5yZXAxOworCQljc3QtPnJlcDEgPSBjc3QtPnJlcDA7CisJCWNzdC0+c3RhdGUgPSBjc3QtPnN0YXRlIDwgTFpNQV9OVU1fTElUX1NUQVRFUyA/IDAgOiAzOworCQlwcm9iID0gcCArIExaTUFfTEVOX0NPREVSOworCX0gZWxzZSB7CisJCXJjX3VwZGF0ZV9iaXRfMShyYywgcHJvYik7CisJCXByb2IgPSBwICsgTFpNQV9JU19SRVBfRzAgKyBjc3QtPnN0YXRlOworCQlpZiAocmNfaXNfYml0XzAocmMsIHByb2IpKSB7CisJCQlyY191cGRhdGVfYml0XzAocmMsIHByb2IpOworCQkJcHJvYiA9IChwICsgTFpNQV9JU19SRVBfMF9MT05HCisJCQkJKyAoY3N0LT5zdGF0ZSA8PAorCQkJCSAgIExaTUFfTlVNX1BPU19CSVRTX01BWCkgKworCQkJCXBvc19zdGF0ZSk7CisJCQlpZiAocmNfaXNfYml0XzAocmMsIHByb2IpKSB7CisJCQkJcmNfdXBkYXRlX2JpdF8wKHJjLCBwcm9iKTsKKworCQkJCWNzdC0+c3RhdGUgPSBjc3QtPnN0YXRlIDwgTFpNQV9OVU1fTElUX1NUQVRFUyA/CisJCQkJCTkgOiAxMTsKKwkJCQljb3B5X2J5dGUod3IsIGNzdC0+cmVwMCk7CisJCQkJcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJCQlyY191cGRhdGVfYml0XzEocmMsIHByb2IpOworCQkJfQorCQl9IGVsc2UgeworCQkJdWludDMyX3QgZGlzdGFuY2U7CisKKwkJCXJjX3VwZGF0ZV9iaXRfMShyYywgcHJvYik7CisJCQlwcm9iID0gcCArIExaTUFfSVNfUkVQX0cxICsgY3N0LT5zdGF0ZTsKKwkJCWlmIChyY19pc19iaXRfMChyYywgcHJvYikpIHsKKwkJCQlyY191cGRhdGVfYml0XzAocmMsIHByb2IpOworCQkJCWRpc3RhbmNlID0gY3N0LT5yZXAxOworCQkJfSBlbHNlIHsKKwkJCQlyY191cGRhdGVfYml0XzEocmMsIHByb2IpOworCQkJCXByb2IgPSBwICsgTFpNQV9JU19SRVBfRzIgKyBjc3QtPnN0YXRlOworCQkJCWlmIChyY19pc19iaXRfMChyYywgcHJvYikpIHsKKwkJCQkJcmNfdXBkYXRlX2JpdF8wKHJjLCBwcm9iKTsKKwkJCQkJZGlzdGFuY2UgPSBjc3QtPnJlcDI7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmNfdXBkYXRlX2JpdF8xKHJjLCBwcm9iKTsKKwkJCQkJZGlzdGFuY2UgPSBjc3QtPnJlcDM7CisJCQkJCWNzdC0+cmVwMyA9IGNzdC0+cmVwMjsKKwkJCQl9CisJCQkJY3N0LT5yZXAyID0gY3N0LT5yZXAxOworCQkJfQorCQkJY3N0LT5yZXAxID0gY3N0LT5yZXAwOworCQkJY3N0LT5yZXAwID0gZGlzdGFuY2U7CisJCX0KKwkJY3N0LT5zdGF0ZSA9IGNzdC0+c3RhdGUgPCBMWk1BX05VTV9MSVRfU1RBVEVTID8gOCA6IDExOworCQlwcm9iID0gcCArIExaTUFfUkVQX0xFTl9DT0RFUjsKKwl9CisKKwlwcm9iX2xlbiA9IHByb2IgKyBMWk1BX0xFTl9DSE9JQ0U7CisJaWYgKHJjX2lzX2JpdF8wKHJjLCBwcm9iX2xlbikpIHsKKwkJcmNfdXBkYXRlX2JpdF8wKHJjLCBwcm9iX2xlbik7CisJCXByb2JfbGVuID0gKHByb2IgKyBMWk1BX0xFTl9MT1cKKwkJCSAgICArIChwb3Nfc3RhdGUgPDwKKwkJCSAgICAgICBMWk1BX0xFTl9OVU1fTE9XX0JJVFMpKTsKKwkJb2Zmc2V0ID0gMDsKKwkJbnVtX2JpdHMgPSBMWk1BX0xFTl9OVU1fTE9XX0JJVFM7CisJfSBlbHNlIHsKKwkJcmNfdXBkYXRlX2JpdF8xKHJjLCBwcm9iX2xlbik7CisJCXByb2JfbGVuID0gcHJvYiArIExaTUFfTEVOX0NIT0lDRV8yOworCQlpZiAocmNfaXNfYml0XzAocmMsIHByb2JfbGVuKSkgeworCQkJcmNfdXBkYXRlX2JpdF8wKHJjLCBwcm9iX2xlbik7CisJCQlwcm9iX2xlbiA9IChwcm9iICsgTFpNQV9MRU5fTUlECisJCQkJICAgICsgKHBvc19zdGF0ZSA8PAorCQkJCSAgICAgICBMWk1BX0xFTl9OVU1fTUlEX0JJVFMpKTsKKwkJCW9mZnNldCA9IDEgPDwgTFpNQV9MRU5fTlVNX0xPV19CSVRTOworCQkJbnVtX2JpdHMgPSBMWk1BX0xFTl9OVU1fTUlEX0JJVFM7CisJCX0gZWxzZSB7CisJCQlyY191cGRhdGVfYml0XzEocmMsIHByb2JfbGVuKTsKKwkJCXByb2JfbGVuID0gcHJvYiArIExaTUFfTEVOX0hJR0g7CisJCQlvZmZzZXQgPSAoKDEgPDwgTFpNQV9MRU5fTlVNX0xPV19CSVRTKQorCQkJCSAgKyAoMSA8PCBMWk1BX0xFTl9OVU1fTUlEX0JJVFMpKTsKKwkJCW51bV9iaXRzID0gTFpNQV9MRU5fTlVNX0hJR0hfQklUUzsKKwkJfQorCX0KKworCXJjX2JpdF90cmVlX2RlY29kZShyYywgcHJvYl9sZW4sIG51bV9iaXRzLCAmbGVuKTsKKwlsZW4gKz0gb2Zmc2V0OworCisJaWYgKGNzdC0+c3RhdGUgPCA0KSB7CisJCWludCBwb3Nfc2xvdDsKKworCQljc3QtPnN0YXRlICs9IExaTUFfTlVNX0xJVF9TVEFURVM7CisJCXByb2IgPQorCQkJcCArIExaTUFfUE9TX1NMT1QgKworCQkJKChsZW4gPAorCQkJICBMWk1BX05VTV9MRU5fVE9fUE9TX1NUQVRFUyA/IGxlbiA6CisJCQkgIExaTUFfTlVNX0xFTl9UT19QT1NfU1RBVEVTIC0gMSkKKwkJCSA8PCBMWk1BX05VTV9QT1NfU0xPVF9CSVRTKTsKKwkJcmNfYml0X3RyZWVfZGVjb2RlKHJjLCBwcm9iLAorCQkJCSAgIExaTUFfTlVNX1BPU19TTE9UX0JJVFMsCisJCQkJICAgJnBvc19zbG90KTsKKwkJaWYgKHBvc19zbG90ID49IExaTUFfU1RBUlRfUE9TX01PREVMX0lOREVYKSB7CisJCQlpbnQgaSwgbWk7CisJCQludW1fYml0cyA9IChwb3Nfc2xvdCA+PiAxKSAtIDE7CisJCQljc3QtPnJlcDAgPSAyIHwgKHBvc19zbG90ICYgMSk7CisJCQlpZiAocG9zX3Nsb3QgPCBMWk1BX0VORF9QT1NfTU9ERUxfSU5ERVgpIHsKKwkJCQljc3QtPnJlcDAgPDw9IG51bV9iaXRzOworCQkJCXByb2IgPSBwICsgTFpNQV9TUEVDX1BPUyArCisJCQkJCWNzdC0+cmVwMCAtIHBvc19zbG90IC0gMTsKKwkJCX0gZWxzZSB7CisJCQkJbnVtX2JpdHMgLT0gTFpNQV9OVU1fQUxJR05fQklUUzsKKwkJCQl3aGlsZSAobnVtX2JpdHMtLSkKKwkJCQkJY3N0LT5yZXAwID0gKGNzdC0+cmVwMCA8PCAxKSB8CisJCQkJCQlyY19kaXJlY3RfYml0KHJjKTsKKwkJCQlwcm9iID0gcCArIExaTUFfQUxJR047CisJCQkJY3N0LT5yZXAwIDw8PSBMWk1BX05VTV9BTElHTl9CSVRTOworCQkJCW51bV9iaXRzID0gTFpNQV9OVU1fQUxJR05fQklUUzsKKwkJCX0KKwkJCWkgPSAxOworCQkJbWkgPSAxOworCQkJd2hpbGUgKG51bV9iaXRzLS0pIHsKKwkJCQlpZiAocmNfZ2V0X2JpdChyYywgcHJvYiArIG1pLCAmbWkpKQorCQkJCQljc3QtPnJlcDAgfD0gaTsKKwkJCQlpIDw8PSAxOworCQkJfQorCQl9IGVsc2UKKwkJCWNzdC0+cmVwMCA9IHBvc19zbG90OworCQlpZiAoKysoY3N0LT5yZXAwKSA9PSAwKQorCQkJcmV0dXJuOworCX0KKworCWxlbiArPSBMWk1BX01BVENIX01JTl9MRU47CisKKwljb3B5X2J5dGVzKHdyLCBjc3QtPnJlcDAsIGxlbik7Cit9CisKKworCitTVEFUSUMgaW5saW5lIGludCBJTklUIHVubHptYSh1bnNpZ25lZCBjaGFyICpidWYsIGludCBpbl9sZW4sCisJCQkgICAgICBpbnQoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkJICAgICAgaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCQkgICAgICBpbnQgKnBvc3AsCisJCQkgICAgICB2b2lkKCplcnJvcl9mbikoY2hhciAqeCkKKwkpCit7CisJc3RydWN0IGx6bWFfaGVhZGVyIGhlYWRlcjsKKwlpbnQgbGMsIHBiLCBscDsKKwl1aW50MzJfdCBwb3Nfc3RhdGVfbWFzazsKKwl1aW50MzJfdCBsaXRlcmFsX3Bvc19tYXNrOworCXVpbnQxNl90ICpwOworCWludCBudW1fcHJvYnM7CisJc3RydWN0IHJjIHJjOworCWludCBpLCBtaTsKKwlzdHJ1Y3Qgd3JpdGVyIHdyOworCXN0cnVjdCBjc3RhdGUgY3N0OworCXVuc2lnbmVkIGNoYXIgKmluYnVmOworCWludCByZXQgPSAtMTsKKworCXNldF9lcnJvcl9mbihlcnJvcl9mbik7CisJaWYgKCFmbHVzaCkKKwkJaW5fbGVuIC09IDQ7IC8qIFVuY29tcHJlc3NlZCBzaXplIGhhY2sgYWN0aXZlIGluIHByZS1ib290CisJCQkJZW52aXJvbm1lbnQgKi8KKwlpZiAoYnVmKQorCQlpbmJ1ZiA9IGJ1ZjsKKwllbHNlCisJCWluYnVmID0gbWFsbG9jKExaTUFfSU9CVUZfU0laRSk7CisJaWYgKCFpbmJ1ZikgeworCQllcnJvcigiQ291bGQgbm90IGFsbG9jYXRlIGlucHV0IGJ1ZmVyIik7CisJCWdvdG8gZXhpdF8wOworCX0KKworCWNzdC5zdGF0ZSA9IDA7CisJY3N0LnJlcDAgPSBjc3QucmVwMSA9IGNzdC5yZXAyID0gY3N0LnJlcDMgPSAxOworCisJd3IuaGVhZGVyID0gJmhlYWRlcjsKKwl3ci5mbHVzaCA9IGZsdXNoOworCXdyLmdsb2JhbF9wb3MgPSAwOworCXdyLnByZXZpb3VzX2J5dGUgPSAwOworCXdyLmJ1ZmZlcl9wb3MgPSAwOworCisJcmNfaW5pdCgmcmMsIGZpbGwsIGluYnVmLCBpbl9sZW4pOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihoZWFkZXIpOyBpKyspIHsKKwkJaWYgKHJjLnB0ciA+PSByYy5idWZmZXJfZW5kKQorCQkJcmNfcmVhZCgmcmMpOworCQkoKHVuc2lnbmVkIGNoYXIgKikmaGVhZGVyKVtpXSA9ICpyYy5wdHIrKzsKKwl9CisKKwlpZiAoaGVhZGVyLnBvcyA+PSAoOSAqIDUgKiA1KSkKKwkJZXJyb3IoImJhZCBoZWFkZXIiKTsKKworCW1pID0gMDsKKwlsYyA9IGhlYWRlci5wb3M7CisJd2hpbGUgKGxjID49IDkpIHsKKwkJbWkrKzsKKwkJbGMgLT0gOTsKKwl9CisJcGIgPSAwOworCWxwID0gbWk7CisJd2hpbGUgKGxwID49IDUpIHsKKwkJcGIrKzsKKwkJbHAgLT0gNTsKKwl9CisJcG9zX3N0YXRlX21hc2sgPSAoMSA8PCBwYikgLSAxOworCWxpdGVyYWxfcG9zX21hc2sgPSAoMSA8PCBscCkgLSAxOworCisJRU5ESUFOX0NPTlZFUlQoaGVhZGVyLmRpY3Rfc2l6ZSk7CisJRU5ESUFOX0NPTlZFUlQoaGVhZGVyLmRzdF9zaXplKTsKKworCWlmIChoZWFkZXIuZGljdF9zaXplID09IDApCisJCWhlYWRlci5kaWN0X3NpemUgPSAxOworCisJaWYgKG91dHB1dCkKKwkJd3IuYnVmZmVyID0gb3V0cHV0OworCWVsc2UgeworCQl3ci5idWZzaXplID0gTUlOKGhlYWRlci5kc3Rfc2l6ZSwgaGVhZGVyLmRpY3Rfc2l6ZSk7CisJCXdyLmJ1ZmZlciA9IGxhcmdlX21hbGxvYyh3ci5idWZzaXplKTsKKwl9CisJaWYgKHdyLmJ1ZmZlciA9PSBOVUxMKQorCQlnb3RvIGV4aXRfMTsKKworCW51bV9wcm9icyA9IExaTUFfQkFTRV9TSVpFICsgKExaTUFfTElUX1NJWkUgPDwgKGxjICsgbHApKTsKKwlwID0gKHVpbnQxNl90ICopIGxhcmdlX21hbGxvYyhudW1fcHJvYnMgKiBzaXplb2YoKnApKTsKKwlpZiAocCA9PSAwKQorCQlnb3RvIGV4aXRfMjsKKwludW1fcHJvYnMgPSBMWk1BX0xJVEVSQUwgKyAoTFpNQV9MSVRfU0laRSA8PCAobGMgKyBscCkpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcHJvYnM7IGkrKykKKwkJcFtpXSA9ICgxIDw8IFJDX01PREVMX1RPVEFMX0JJVFMpID4+IDE7CisKKwlyY19pbml0X2NvZGUoJnJjKTsKKworCXdoaWxlIChnZXRfcG9zKCZ3cikgPCBoZWFkZXIuZHN0X3NpemUpIHsKKwkJaW50IHBvc19zdGF0ZSA9CWdldF9wb3MoJndyKSAmIHBvc19zdGF0ZV9tYXNrOworCQl1aW50MTZfdCAqcHJvYiA9IHAgKyBMWk1BX0lTX01BVENIICsKKwkJCShjc3Quc3RhdGUgPDwgTFpNQV9OVU1fUE9TX0JJVFNfTUFYKSArIHBvc19zdGF0ZTsKKwkJaWYgKHJjX2lzX2JpdF8wKCZyYywgcHJvYikpCisJCQlwcm9jZXNzX2JpdDAoJndyLCAmcmMsICZjc3QsIHAsIHBvc19zdGF0ZSwgcHJvYiwKKwkJCQkgICAgIGxjLCBsaXRlcmFsX3Bvc19tYXNrKTsKKwkJZWxzZSB7CisJCQlwcm9jZXNzX2JpdDEoJndyLCAmcmMsICZjc3QsIHAsIHBvc19zdGF0ZSwgcHJvYik7CisJCQlpZiAoY3N0LnJlcDAgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChwb3NwKQorCQkqcG9zcCA9IHJjLnB0ci1yYy5idWZmZXI7CisJaWYgKHdyLmZsdXNoKQorCQl3ci5mbHVzaCh3ci5idWZmZXIsIHdyLmJ1ZmZlcl9wb3MpOworCXJldCA9IDA7CisJbGFyZ2VfZnJlZShwKTsKK2V4aXRfMjoKKwlpZiAoIW91dHB1dCkKKwkJbGFyZ2VfZnJlZSh3ci5idWZmZXIpOworZXhpdF8xOgorCWlmICghYnVmKQorCQlmcmVlKGluYnVmKTsKK2V4aXRfMDoKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIGRlY29tcHJlc3MgdW5sem1hCmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19kZWJ1Zy5jIGIvbGliL2R5bmFtaWNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMxMzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2R5bmFtaWNfZGVidWcuYwpAQCAtMCwwICsxLDc2OSBAQAorLyoKKyAqIGxpYi9keW5hbWljX2RlYnVnLmMKKyAqCisgKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKKyAqIHNvdXJjZSBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KKyAqIEJ5IEdyZWcgQmFua3MgPGduYkBtZWxib3VybmUuc2dpLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorCitleHRlcm4gc3RydWN0IF9kZGVidWcgX19zdGFydF9fX3ZlcmJvc2VbXTsKK2V4dGVybiBzdHJ1Y3QgX2RkZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107CisKKy8qIGR5bmFtaWNfZGVidWdfZW5hYmxlZCwgYW5kIGR5bmFtaWNfZGVidWdfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZGVidWdfZW5hYmxlZCk7Citsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkMjsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZGVidWdfZW5hYmxlZDIpOworCitzdHJ1Y3QgZGRlYnVnX3RhYmxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJY2hhciAqbW9kX25hbWU7CisJdW5zaWduZWQgaW50IG51bV9kZGVidWdzOworCXVuc2lnbmVkIGludCBudW1fZW5hYmxlZDsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnczsKK307CisKK3N0cnVjdCBkZGVidWdfcXVlcnkgeworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IGNoYXIgKm1vZHVsZTsKKwljb25zdCBjaGFyICpmdW5jdGlvbjsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJdW5zaWduZWQgaW50IGZpcnN0X2xpbmVubywgbGFzdF9saW5lbm87Cit9OworCitzdHJ1Y3QgZGRlYnVnX2l0ZXIgeworCXN0cnVjdCBkZGVidWdfdGFibGUgKnRhYmxlOworCXVuc2lnbmVkIGludCBpZHg7Cit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKGRkZWJ1Z19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoZGRlYnVnX3RhYmxlcyk7CitzdGF0aWMgaW50IHZlcmJvc2UgPSAwOworCisvKiBSZXR1cm4gdGhlIGxhc3QgcGFydCBvZiBhIHBhdGhuYW1lICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmJhc2VuYW1lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqdGFpbCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwlyZXR1cm4gdGFpbCA/IHRhaWwrMSA6IHBhdGg7Cit9CisKKy8qIGZvcm1hdCBhIHN0cmluZyBpbnRvIGJ1ZltdIHdoaWNoIGRlc2NyaWJlcyB0aGUgX2RkZWJ1ZydzIGZsYWdzICovCitzdGF0aWMgY2hhciAqZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKHN0cnVjdCBfZGRlYnVnICpkcCwgY2hhciAqYnVmLAorCQkJCSAgICBzaXplX3QgbWF4bGVuKQoreworCWNoYXIgKnAgPSBidWY7CisKKwlCVUdfT04obWF4bGVuIDwgNCk7CisJaWYgKGRwLT5mbGFncyAmIF9EUFJJTlRLX0ZMQUdTX1BSSU5UKQorCQkqcCsrID0gJ3AnOworCWlmIChwID09IGJ1ZikKKwkJKnArKyA9ICctJzsKKwkqcCA9ICdcMCc7CisKKwlyZXR1cm4gYnVmOworfQorCisvKgorICogbXVzdCBiZSBjYWxsZWQgd2l0aCBkZGVidWdfbG9jayBoZWxkCisgKi8KKworc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGNoYXIgaGFzaCwgYm9vbCBmaXJzdF90YWJsZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwljaGFyIHRhYmxlX2hhc2hfdmFsdWU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCQlpZiAoZmlyc3RfdGFibGUpCisJCQl0YWJsZV9oYXNoX3ZhbHVlID0gZHQtPmRkZWJ1Z3MtPnByaW1hcnlfaGFzaDsKKwkJZWxzZQorCQkJdGFibGVfaGFzaF92YWx1ZSA9IGR0LT5kZGVidWdzLT5zZWNvbmRhcnlfaGFzaDsKKwkJaWYgKGR0LT5udW1fZW5hYmxlZCAmJiAoaGFzaCA9PSB0YWJsZV9oYXNoX3ZhbHVlKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNlYXJjaCB0aGUgdGFibGVzIGZvciBfZGRlYnVnJ3Mgd2hpY2ggbWF0Y2ggdGhlIGdpdmVuCisgKiBgcXVlcnknIGFuZCBhcHBseSB0aGUgYGZsYWdzJyBhbmQgYG1hc2snIHRvIHRoZW0uICBUZWxscworICogdGhlIHVzZXIgd2hpY2ggZGRlYnVnJ3Mgd2VyZSBjaGFuZ2VkLCBvciB3aGV0aGVyIG5vbmUKKyAqIHdlcmUgbWF0Y2hlZC4KKyAqLworc3RhdGljIHZvaWQgZGRlYnVnX2NoYW5nZShjb25zdCBzdHJ1Y3QgZGRlYnVnX3F1ZXJ5ICpxdWVyeSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG1hc2spCit7CisJaW50IGk7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQ7CisJdW5zaWduZWQgaW50IG5ld2ZsYWdzOworCXVuc2lnbmVkIGludCBuZm91bmQgPSAwOworCWNoYXIgZmxhZ2J1Zls4XTsKKworCS8qIHNlYXJjaCBmb3IgbWF0Y2hpbmcgZGRlYnVncyAqLworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCisJCS8qIG1hdGNoIGFnYWluc3QgdGhlIG1vZHVsZSBuYW1lICovCisJCWlmIChxdWVyeS0+bW9kdWxlICE9IE5VTEwgJiYKKwkJICAgIHN0cmNtcChxdWVyeS0+bW9kdWxlLCBkdC0+bW9kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMCA7IGkgPCBkdC0+bnVtX2RkZWJ1Z3MgOyBpKyspIHsKKwkJCXN0cnVjdCBfZGRlYnVnICpkcCA9ICZkdC0+ZGRlYnVnc1tpXTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgc291cmNlIGZpbGVuYW1lICovCisJCQlpZiAocXVlcnktPmZpbGVuYW1lICE9IE5VTEwgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZpbGVuYW1lLCBkcC0+ZmlsZW5hbWUpICYmCisJCQkgICAgc3RyY21wKHF1ZXJ5LT5maWxlbmFtZSwgYmFzZW5hbWUoZHAtPmZpbGVuYW1lKSkpCisJCQkJY29udGludWU7CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIGZ1bmN0aW9uICovCisJCQlpZiAocXVlcnktPmZ1bmN0aW9uICE9IE5VTEwgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZ1bmN0aW9uLCBkcC0+ZnVuY3Rpb24pKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBmb3JtYXQgKi8KKwkJCWlmIChxdWVyeS0+Zm9ybWF0ICE9IE5VTEwgJiYKKwkJCSAgICBzdHJzdHIoZHAtPmZvcm1hdCwgcXVlcnktPmZvcm1hdCkgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgbGluZSBudW1iZXIgcmFuZ2UgKi8KKwkJCWlmIChxdWVyeS0+Zmlyc3RfbGluZW5vICYmCisJCQkgICAgZHAtPmxpbmVubyA8IHF1ZXJ5LT5maXJzdF9saW5lbm8pCisJCQkJY29udGludWU7CisJCQlpZiAocXVlcnktPmxhc3RfbGluZW5vICYmCisJCQkgICAgZHAtPmxpbmVubyA+IHF1ZXJ5LT5sYXN0X2xpbmVubykKKwkJCQljb250aW51ZTsKKworCQkJbmZvdW5kKys7CisKKwkJCW5ld2ZsYWdzID0gKGRwLT5mbGFncyAmIG1hc2spIHwgZmxhZ3M7CisJCQlpZiAobmV3ZmxhZ3MgPT0gZHAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIW5ld2ZsYWdzKQorCQkJCWR0LT5udW1fZW5hYmxlZC0tOworCQkJZWxzZSBpZiAoIWRwLWZsYWdzKQorCQkJCWR0LT5udW1fZW5hYmxlZCsrOworCQkJZHAtPmZsYWdzID0gbmV3ZmxhZ3M7CisJCQlpZiAobmV3ZmxhZ3MpIHsKKwkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQgfD0KKwkJCQkJCSgxTEwgPDwgZHAtPnByaW1hcnlfaGFzaCk7CisJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkMiB8PQorCQkJCQkJKDFMTCA8PCBkcC0+c2Vjb25kYXJ5X2hhc2gpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZGlzYWJsZWRfaGFzaChkcC0+cHJpbWFyeV9oYXNoLCB0cnVlKSkKKwkJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkICY9CisJCQkJCQl+KDFMTCA8PCBkcC0+cHJpbWFyeV9oYXNoKTsKKwkJCQlpZiAoZGlzYWJsZWRfaGFzaChkcC0+c2Vjb25kYXJ5X2hhc2gsIGZhbHNlKSkKKwkJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkMiAmPQorCQkJCQkJfigxTEwgPDwgZHAtPnNlY29uZGFyeV9oYXNoKTsKKwkJCX0KKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJImRkZWJ1ZzogY2hhbmdlZCAlczolZCBbJXNdJXMgJXNcbiIsCisJCQkJCWRwLT5maWxlbmFtZSwgZHAtPmxpbmVubywKKwkJCQkJZHQtPm1vZF9uYW1lLCBkcC0+ZnVuY3Rpb24sCisJCQkJCWRkZWJ1Z19kZXNjcmliZV9mbGFncyhkcCwgZmxhZ2J1ZiwKKwkJCQkJCQlzaXplb2YoZmxhZ2J1ZikpKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICghbmZvdW5kICYmIHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gImRkZWJ1Zzogbm8gbWF0Y2hlcyBmb3IgcXVlcnlcbiIpOworfQorCisvKgorICogU3BsaXQgdGhlIGJ1ZmZlciBgYnVmJyBpbnRvIHNwYWNlLXNlcGFyYXRlZCB3b3Jkcy4KKyAqIEhhbmRsZXMgc2ltcGxlICIgYW5kICcgcXVvdGluZywgaS5lLiB3aXRob3V0IG5lc3RlZCwKKyAqIGVtYmVkZGVkIG9yIGVzY2FwZWQgXCIuICBSZXR1cm4gdGhlIG51bWJlciBvZiB3b3JkcworICogb3IgPDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3Rva2VuaXplKGNoYXIgKmJ1ZiwgY2hhciAqd29yZHNbXSwgaW50IG1heHdvcmRzKQoreworCWludCBud29yZHMgPSAwOworCisJd2hpbGUgKCpidWYpIHsKKwkJY2hhciAqZW5kOworCisJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisJCXdoaWxlICgqYnVmICYmIGlzc3BhY2UoKmJ1ZikpCisJCQlidWYrKzsKKwkJaWYgKCEqYnVmKQorCQkJYnJlYWs7CS8qIG9oLCBpdCB3YXMgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCisJCS8qIFJ1biBgZW5kJyBvdmVyIGEgd29yZCwgZWl0aGVyIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIG9yIHF1b3RlZCAqLworCQlpZiAoKmJ1ZiA9PSAnIicgfHwgKmJ1ZiA9PSAnXCcnKSB7CisJCQlpbnQgcXVvdGUgPSAqYnVmKys7CisJCQlmb3IgKGVuZCA9IGJ1ZiA7ICplbmQgJiYgKmVuZCAhPSBxdW90ZSA7IGVuZCsrKQorCQkJCTsKKwkJCWlmICghKmVuZCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLyogdW5jbG9zZWQgcXVvdGUgKi8KKwkJfSBlbHNlIHsKKwkJCWZvciAoZW5kID0gYnVmIDsgKmVuZCAmJiAhaXNzcGFjZSgqZW5kKSA7IGVuZCsrKQorCQkJCTsKKwkJCUJVR19PTihlbmQgPT0gYnVmKTsKKwkJfQorCQkvKiBIZXJlIGBidWYnIGlzIHRoZSBzdGFydCBvZiB0aGUgd29yZCwgYGVuZCcgaXMgb25lIHBhc3QgdGhlIGVuZCAqLworCisJCWlmIChud29yZHMgPT0gbWF4d29yZHMpCisJCQlyZXR1cm4gLUVJTlZBTDsJLyogcmFuIG91dCBvZiB3b3Jkc1tdIGJlZm9yZSBieXRlcyAqLworCQlpZiAoKmVuZCkKKwkJCSplbmQrKyA9ICdcMCc7CS8qIHRlcm1pbmF0ZSB0aGUgd29yZCAqLworCQl3b3Jkc1tud29yZHMrK10gPSBidWY7CisJCWJ1ZiA9IGVuZDsKKwl9CisKKwlpZiAodmVyYm9zZSkgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwbGl0IGludG8gd29yZHM6IiwgX19mdW5jX18pOworCQlmb3IgKGkgPSAwIDsgaSA8IG53b3JkcyA7IGkrKykKKwkJCXByaW50aygiIFwiJXNcIiIsIHdvcmRzW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXJldHVybiBud29yZHM7Cit9CisKKy8qCisgKiBQYXJzZSBhIHNpbmdsZSBsaW5lIG51bWJlci4gIE5vdGUgdGhhdCB0aGUgZW1wdHkgc3RyaW5nICIiCisgKiBpcyB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlIGFuZCBjb252ZXJ0ZWQgdG8gemVybywgd2hpY2gKKyAqIGlzIGxhdGVyIHRyZWF0ZWQgYXMgYSAiZG9uJ3QgY2FyZSIgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX2xpbmVubyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqdmFsKQoreworCWNoYXIgKmVuZCA9IE5VTEw7CisJQlVHX09OKHN0ciA9PSBOVUxMKTsKKwlpZiAoKnN0ciA9PSAnXDAnKSB7CisJCSp2YWwgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJKnZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZCwgMTApOworCXJldHVybiBlbmQgPT0gTlVMTCB8fCBlbmQgPT0gc3RyIHx8ICplbmQgIT0gJ1wwJyA/IC1FSU5WQUwgOiAwOworfQorCisvKgorICogVW5kbyBvY3RhbCBlc2NhcGluZyBpbiBhIHN0cmluZywgaW5wbGFjZS4gIFRoaXMgaXMgdXNlZnVsIHRvCisgKiBhbGxvdyB0aGUgdXNlciB0byBleHByZXNzIGEgcXVlcnkgd2hpY2ggbWF0Y2hlcyBhIGZvcm1hdAorICogY29udGFpbmluZyBlbWJlZGRlZCBzcGFjZXMuCisgKi8KKyNkZWZpbmUgaXNvZGlnaXQoYykJCSgoYykgPj0gJzAnICYmIChjKSA8PSAnNycpCitzdGF0aWMgY2hhciAqdW5lc2NhcGUoY2hhciAqc3RyKQoreworCWNoYXIgKmluID0gc3RyOworCWNoYXIgKm91dCA9IHN0cjsKKworCXdoaWxlICgqaW4pIHsKKwkJaWYgKCppbiA9PSAnXFwnKSB7CisJCQlpZiAoaW5bMV0gPT0gJ1xcJykgeworCQkJCSpvdXQrKyA9ICdcXCc7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoaW5bMV0gPT0gJ3QnKSB7CisJCQkJKm91dCsrID0gJ1x0JzsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChpblsxXSA9PSAnbicpIHsKKwkJCQkqb3V0KysgPSAnXG4nOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGlzb2RpZ2l0KGluWzFdKSAmJgorCQkJICAgICAgICAgaXNvZGlnaXQoaW5bMl0pICYmCisJCQkgICAgICAgICBpc29kaWdpdChpblszXSkpIHsKKwkJCQkqb3V0KysgPSAoKGluWzFdIC0gJzAnKTw8NikgfAorCQkJCSAgICAgICAgICAoKGluWzJdIC0gJzAnKTw8MykgfAorCQkJCSAgICAgICAgICAoaW5bM10gLSAnMCcpOworCQkJCWluICs9IDQ7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJKm91dCsrID0gKmluKys7CisJfQorCSpvdXQgPSAnXDAnOworCisJcmV0dXJuIHN0cjsKK30KKworLyoKKyAqIFBhcnNlIHdvcmRzW10gYXMgYSBkZGVidWcgcXVlcnkgc3BlY2lmaWNhdGlvbiwgd2hpY2ggaXMgYSBzZXJpZXMKKyAqIG9mIChrZXl3b3JkLCB2YWx1ZSkgcGFpcnMgY2hvc2VuIGZyb20gdGhlc2UgcG9zc2liaWxpdGllczoKKyAqCisgKiBmdW5jIDxmdW5jdGlvbi1uYW1lPgorICogZmlsZSA8ZnVsbC1wYXRobmFtZT4KKyAqIGZpbGUgPGJhc2UtZmlsZW5hbWU+CisgKiBtb2R1bGUgPG1vZHVsZS1uYW1lPgorICogZm9ybWF0IDxlc2NhcGVkLXN0cmluZy10by1maW5kLWluLWZvcm1hdD4KKyAqIGxpbmUgPGxpbmVubz4KKyAqIGxpbmUgPGZpcnN0LWxpbmVubz4tPGxhc3QtbGluZW5vPiAvLyB3aGVyZSBlaXRoZXIgbWF5IGJlIGVtcHR5CisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3BhcnNlX3F1ZXJ5KGNoYXIgKndvcmRzW10sIGludCBud29yZHMsCisJCQkgICAgICAgc3RydWN0IGRkZWJ1Z19xdWVyeSAqcXVlcnkpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjaGVjayB3ZSBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIHdvcmRzICovCisJaWYgKG53b3JkcyAlIDIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtc2V0KHF1ZXJ5LCAwLCBzaXplb2YoKnF1ZXJ5KSk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IG53b3JkcyA7IGkgKz0gMikgeworCQlpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZ1bmMiKSkKKwkJCXF1ZXJ5LT5mdW5jdGlvbiA9IHdvcmRzW2krMV07CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJmaWxlIikpCisJCQlxdWVyeS0+ZmlsZW5hbWUgPSB3b3Jkc1tpKzFdOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAibW9kdWxlIikpCisJCQlxdWVyeS0+bW9kdWxlID0gd29yZHNbaSsxXTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZvcm1hdCIpKQorCQkJcXVlcnktPmZvcm1hdCA9IHVuZXNjYXBlKHdvcmRzW2krMV0pOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAibGluZSIpKSB7CisJCQljaGFyICpmaXJzdCA9IHdvcmRzW2krMV07CisJCQljaGFyICpsYXN0ID0gc3RyY2hyKGZpcnN0LCAnLScpOworCQkJaWYgKGxhc3QpCisJCQkJKmxhc3QrKyA9ICdcMCc7CisJCQlpZiAocGFyc2VfbGluZW5vKGZpcnN0LCAmcXVlcnktPmZpcnN0X2xpbmVubykgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGxhc3QgIT0gTlVMTCkgeworCQkJCS8qIHJhbmdlIDxmaXJzdD4tPGxhc3Q+ICovCisJCQkJaWYgKHBhcnNlX2xpbmVubyhsYXN0LCAmcXVlcnktPmxhc3RfbGluZW5vKSA8IDApCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQlxdWVyeS0+bGFzdF9saW5lbm8gPSBxdWVyeS0+Zmlyc3RfbGluZW5vOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBrZXl3b3JkIFwiJXNcIlxuIiwKKwkJCQkJX19mdW5jX18sIHdvcmRzW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBxLT5mdW5jdGlvbj1cIiVzXCIgcS0+ZmlsZW5hbWU9XCIlc1wiICIKKwkJICAgICAgICJxLT5tb2R1bGU9XCIlc1wiIHEtPmZvcm1hdD1cIiVzXCIgcS0+bGluZW5vPSV1LSV1XG4iLAorCQkJX19mdW5jX18sIHF1ZXJ5LT5mdW5jdGlvbiwgcXVlcnktPmZpbGVuYW1lLAorCQkJcXVlcnktPm1vZHVsZSwgcXVlcnktPmZvcm1hdCwgcXVlcnktPmZpcnN0X2xpbmVubywKKwkJCXF1ZXJ5LT5sYXN0X2xpbmVubyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhcnNlIGBzdHInIGFzIGEgZmxhZ3Mgc3BlY2lmaWNhdGlvbiwgZm9ybWF0IFstKz1dW3BdKy4KKyAqIFNldHMgdXAgKm1hc2twIGFuZCAqZmxhZ3NwIHRvIGJlIHVzZWQgd2hlbiBjaGFuZ2luZyB0aGUKKyAqIGZsYWdzIGZpZWxkcyBvZiBtYXRjaGVkIF9kZGVidWcncy4gIFJldHVybnMgMCBvbiBzdWNjZXNzCisgKiBvciA8MCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBkZGVidWdfcGFyc2VfZmxhZ3MoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmZsYWdzcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm1hc2twKQoreworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlpbnQgb3AgPSAnPSc7CisKKwlzd2l0Y2ggKCpzdHIpIHsKKwljYXNlICcrJzoKKwljYXNlICctJzoKKwljYXNlICc9JzoKKwkJb3AgPSAqc3RyKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wPSclYydcbiIsIF9fZnVuY19fLCBvcCk7CisKKwlmb3IgKCA7ICpzdHIgOyArK3N0cikgeworCQlzd2l0Y2ggKCpzdHIpIHsKKwkJY2FzZSAncCc6CisJCQlmbGFncyB8PSBfRFBSSU5US19GTEFHU19QUklOVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKGZsYWdzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZmxhZ3M9MHgleFxuIiwgX19mdW5jX18sIGZsYWdzKTsKKworCS8qIGNhbGN1bGF0ZSBmaW5hbCAqZmxhZ3NwLCAqbWFza3AgYWNjb3JkaW5nIHRvIG1hc2sgYW5kIG9wICovCisJc3dpdGNoIChvcCkgeworCWNhc2UgJz0nOgorCQkqbWFza3AgPSAwOworCQkqZmxhZ3NwID0gZmxhZ3M7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQkqbWFza3AgPSB+MFU7CisJCSpmbGFnc3AgPSBmbGFnczsKKwkJYnJlYWs7CisJY2FzZSAnLSc6CisJCSptYXNrcCA9IH5mbGFnczsKKwkJKmZsYWdzcCA9IDA7CisJCWJyZWFrOworCX0KKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICpmbGFnc3A9MHgleCAqbWFza3A9MHgleFxuIiwKKwkJCV9fZnVuY19fLCAqZmxhZ3NwLCAqbWFza3ApOworCXJldHVybiAwOworfQorCisvKgorICogRmlsZV9vcHMtPndyaXRlIG1ldGhvZCBmb3IgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29ucm9sLiAgR2F0aGVycyB0aGUKKyAqIGNvbW1hbmQgdGV4dCBmcm9tIHVzZXJzcGFjZSwgcGFyc2VzIGFuZCBleGVjdXRlcyBpdC4KKyAqLworc3RhdGljIHNzaXplX3QgZGRlYnVnX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCSAgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZwKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IDAsIG1hc2sgPSAwOworCXN0cnVjdCBkZGVidWdfcXVlcnkgcXVlcnk7CisjZGVmaW5lIE1BWFdPUkRTIDkKKwlpbnQgbndvcmRzOworCWNoYXIgKndvcmRzW01BWFdPUkRTXTsKKwljaGFyIHRtcGJ1ZlsyNTZdOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwkvKiB3ZSBkb24ndCBjaGVjayAqb2ZmcCAtLSBtdWx0aXBsZSB3cml0ZXMoKSBhcmUgYWxsb3dlZCAqLworCWlmIChsZW4gPiBzaXplb2YodG1wYnVmKS0xKQorCQlyZXR1cm4gLUUyQklHOworCWlmIChjb3B5X2Zyb21fdXNlcih0bXBidWYsIHVidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCXRtcGJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYWQgJWQgYnl0ZXMgZnJvbSB1c2Vyc3BhY2VcbiIsCisJCQlfX2Z1bmNfXywgKGludClsZW4pOworCisJbndvcmRzID0gZGRlYnVnX3Rva2VuaXplKHRtcGJ1Ziwgd29yZHMsIE1BWFdPUkRTKTsKKwlpZiAobndvcmRzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRkZWJ1Z19wYXJzZV9xdWVyeSh3b3JkcywgbndvcmRzLTEsICZxdWVyeSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZGVidWdfcGFyc2VfZmxhZ3Mod29yZHNbbndvcmRzLTFdLCAmZmxhZ3MsICZtYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBhY3R1YWxseSBnbyBhbmQgaW1wbGVtZW50IHRoZSBjaGFuZ2UgKi8KKwlkZGVidWdfY2hhbmdlKCZxdWVyeSwgZmxhZ3MsIG1hc2spOworCisJKm9mZnAgKz0gbGVuOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTZXQgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBfZGRlYnVnIG9iamVjdAorICogYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBmaXJzdCBvYmplY3QuICBSZXR1cm5zCisgKiBOVUxMIGlmIHRoZXJlIGFyZSBubyBfZGRlYnVncyBhdCBhbGwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnX2l0ZXJfZmlyc3Qoc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyKQoreworCWlmIChsaXN0X2VtcHR5KCZkZGVidWdfdGFibGVzKSkgeworCQlpdGVyLT50YWJsZSA9IE5VTEw7CisJCWl0ZXItPmlkeCA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKwlpdGVyLT50YWJsZSA9IGxpc3RfZW50cnkoZGRlYnVnX3RhYmxlcy5uZXh0LAorCQkJCSBzdHJ1Y3QgZGRlYnVnX3RhYmxlLCBsaW5rKTsKKwlpdGVyLT5pZHggPSAwOworCXJldHVybiAmaXRlci0+dGFibGUtPmRkZWJ1Z3NbaXRlci0+aWR4XTsKK30KKworLyoKKyAqIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBuZXh0IF9kZGVidWcKKyAqIG9iamVjdCBmcm9tIHRoZSBvbmUgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSBwb2ludHMgYXQsCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBfZGRlYnVnLiAgUmV0dXJucworICogTlVMTCBpZiB0aGUgaXRlcmF0b3IgaGFzIHNlZW4gYWxsIHRoZSBfZGRlYnVncy4KKyAqLworc3RhdGljIHN0cnVjdCBfZGRlYnVnICpkZGVidWdfaXRlcl9uZXh0KHN0cnVjdCBkZGVidWdfaXRlciAqaXRlcikKK3sKKwlpZiAoaXRlci0+dGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCsraXRlci0+aWR4ID09IGl0ZXItPnRhYmxlLT5udW1fZGRlYnVncykgeworCQkvKiBpdGVyYXRlIHRvIG5leHQgdGFibGUgKi8KKwkJaXRlci0+aWR4ID0gMDsKKwkJaWYgKGxpc3RfaXNfbGFzdCgmaXRlci0+dGFibGUtPmxpbmssICZkZGVidWdfdGFibGVzKSkgeworCQkJaXRlci0+dGFibGUgPSBOVUxMOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaXRlci0+dGFibGUgPSBsaXN0X2VudHJ5KGl0ZXItPnRhYmxlLT5saW5rLm5leHQsCisJCQkJCSBzdHJ1Y3QgZGRlYnVnX3RhYmxlLCBsaW5rKTsKKwl9CisJcmV0dXJuICZpdGVyLT50YWJsZS0+ZGRlYnVnc1tpdGVyLT5pZHhdOworfQorCisvKgorICogU2VxX29wcyBzdGFydCBtZXRob2QuICBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5CisgKiByZWFkKCkgY2FsbCBmcm9tIHVzZXJzcGFjZS4gIFRha2VzIHRoZSBkZGVidWdfbG9jayBhbmQKKyAqIHNlZWtzIHRoZSBzZXFfZmlsZSdzIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAqLworc3RhdGljIHZvaWQgKmRkZWJ1Z19wcm9jX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHA7CisJaW50IG4gPSAqcG9zOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCAqcG9zPSVsbGRcbiIsCisJCQlfX2Z1bmNfXywgbSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zKTsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICghbikKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKwlpZiAobiA8IDApCisJCXJldHVybiBOVUxMOworCWRwID0gZGRlYnVnX2l0ZXJfZmlyc3QoaXRlcik7CisJd2hpbGUgKGRwICE9IE5VTEwgJiYgLS1uID4gMCkKKwkJZHAgPSBkZGVidWdfaXRlcl9uZXh0KGl0ZXIpOworCXJldHVybiBkcDsKK30KKworLyoKKyAqIFNlcV9vcHMgbmV4dCBtZXRob2QuICBDYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4gYSByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UsIHdpdGggZGRlYnVnX2xvY2sgaGVsZC4gIFdhbGtzIHRvIHRoZQorICogbmV4dCBfZGRlYnVnIG9iamVjdCB3aXRoIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgaGVhZGVyIGxpbmUuCisgKi8KK3N0YXRpYyB2b2lkICpkZGVidWdfcHJvY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHA7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwIHA9JXAgKnBvcz0lbGxkXG4iLAorCQkJX19mdW5jX18sIG0sIHAsICh1bnNpZ25lZCBsb25nIGxvbmcpKnBvcyk7CisKKwlpZiAocCA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCWRwID0gZGRlYnVnX2l0ZXJfZmlyc3QoaXRlcik7CisJZWxzZQorCQlkcCA9IGRkZWJ1Z19pdGVyX25leHQoaXRlcik7CisJKysqcG9zOworCXJldHVybiBkcDsKK30KKworLyoKKyAqIFNlcV9vcHMgc2hvdyBtZXRob2QuICBDYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4gYSByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UsIHdpdGggZGRlYnVnX2xvY2sgaGVsZC4gIEZvcm1hdHMgdGhlCisgKiBjdXJyZW50IF9kZGVidWcgYXMgYSBzaW5nbGUgaHVtYW4tcmVhZGFibGUgbGluZSwgd2l0aCBhCisgKiBzcGVjaWFsIGNhc2UgZm9yIHRoZSBoZWFkZXIgbGluZS4KKyAqLworc3RhdGljIGludCBkZGVidWdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcCA9IHA7CisJY2hhciBmbGFnc2J1Zls4XTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwKTsKKworCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikgeworCQlzZXFfcHV0cyhtLAorCQkJIiMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihtLCAiJXM6JXUgWyVzXSVzICVzIFwiIiwKKwkJICAgZHAtPmZpbGVuYW1lLCBkcC0+bGluZW5vLAorCQkgICBpdGVyLT50YWJsZS0+bW9kX25hbWUsIGRwLT5mdW5jdGlvbiwKKwkJICAgZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKGRwLCBmbGFnc2J1Ziwgc2l6ZW9mKGZsYWdzYnVmKSkpOworCXNlcV9lc2NhcGUobSwgZHAtPmZvcm1hdCwgIlx0XHJcblwiIik7CisJc2VxX3B1dHMobSwgIlwiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2VxX29wcyBzdG9wIG1ldGhvZC4gIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVhZCgpCisgKiBjYWxsIGZyb20gdXNlcnNwYWNlLiAgRHJvcHMgZGRlYnVnX2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRkZWJ1Z19wcm9jX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwKTsKKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZGVidWdfcHJvY19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gZGRlYnVnX3Byb2Nfc3RhcnQsCisJLm5leHQgPSBkZGVidWdfcHJvY19uZXh0LAorCS5zaG93ID0gZGRlYnVnX3Byb2Nfc2hvdywKKwkuc3RvcCA9IGRkZWJ1Z19wcm9jX3N0b3AKK307CisKKy8qCisgKiBGaWxlX29wcy0+b3BlbiBtZXRob2QgZm9yIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wuICBEb2VzIHRoZSBzZXFfZmlsZQorICogc2V0dXAgZGFuY2UsIGFuZCBhbHNvIGNyZWF0ZXMgYW4gaXRlcmF0b3IgdG8gd2FsayB0aGUgX2RkZWJ1Z3MuCisgKiBOb3RlIHRoYXQgd2UgY3JlYXRlIGEgc2VxX2ZpbGUgYWx3YXlzLCBldmVuIGZvciBPX1dST05MWSBmaWxlcworICogd2hlcmUgaXQncyBub3QgbmVlZGVkLCBhcyBkb2luZyBzbyBzaW1wbGlmaWVzIHRoZSAtPnJlbGVhc2UgbWV0aG9kLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyOworCWludCBlcnI7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGl0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBzZXFfb3BlbihmaWxlLCAmZGRlYnVnX3Byb2Nfc2Vxb3BzKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGl0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKwkoKHN0cnVjdCBzZXFfZmlsZSAqKSBmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlID0gaXRlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGRlYnVnX3Byb2NfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRkZWJ1Z19wcm9jX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkud3JpdGUgPSBkZGVidWdfcHJvY193cml0ZQorfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGRkZWJ1Z190YWJsZSBmb3IgdGhlIGdpdmVuIG1vZHVsZQorICogYW5kIGFkZCBpdCB0byB0aGUgZ2xvYmFsIGxpc3QuCisgKi8KK2ludCBkZGVidWdfYWRkX21vZHVsZShzdHJ1Y3QgX2RkZWJ1ZyAqdGFiLCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwljaGFyICpuZXdfbmFtZTsKKworCWR0ID0ga3phbGxvYyhzaXplb2YoKmR0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGR0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ld19uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X25hbWUgPT0gTlVMTCkgeworCQlrZnJlZShkdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkdC0+bW9kX25hbWUgPSBuZXdfbmFtZTsKKwlkdC0+bnVtX2RkZWJ1Z3MgPSBuOworCWR0LT5udW1fZW5hYmxlZCA9IDA7CisJZHQtPmRkZWJ1Z3MgPSB0YWI7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZHQtPmxpbmssICZkZGVidWdfdGFibGVzKTsKKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIldSBkZWJ1ZyBwcmludHMgaW4gbW9kdWxlICVzXG4iLAorCQkJCSBuLCBkdC0+bW9kX25hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGRlYnVnX2FkZF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBkZGVidWdfdGFibGVfZnJlZShzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdCkKK3sKKwlsaXN0X2RlbF9pbml0KCZkdC0+bGluayk7CisJa2ZyZWUoZHQtPm1vZF9uYW1lKTsKKwlrZnJlZShkdCk7Cit9CisKKy8qCisgKiBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgdW5sb2FkZWQuICBSZW1vdmVzCisgKiBhbnkgZGRlYnVnX3RhYmxlJ3Mgd2hpY2ggcG9pbnQgYXQgdGhlIG1vZHVsZS4KKyAqLworaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0LCAqbmV4dGR0OworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZW1vdmluZyBtb2R1bGUgXCIlc1wiXG4iLAorCQkJCV9fZnVuY19fLCBtb2RfbmFtZSk7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR0LCBuZXh0ZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisJCWlmICghc3RyY21wKGR0LT5tb2RfbmFtZSwgbW9kX25hbWUpKSB7CisJCQlkZGVidWdfdGFibGVfZnJlZShkdCk7CisJCQlyZXQgPSAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZGVidWdfcmVtb3ZlX21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIGRkZWJ1Z19yZW1vdmVfYWxsX3RhYmxlcyh2b2lkKQoreworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRkZWJ1Z190YWJsZXMpKSB7CisJCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0ID0gbGlzdF9lbnRyeShkZGVidWdfdGFibGVzLm5leHQsCisJCQkJCQkgICAgICBzdHJ1Y3QgZGRlYnVnX3RhYmxlLAorCQkJCQkJICAgICAgbGluayk7CisJCWRkZWJ1Z190YWJsZV9mcmVlKGR0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfZGVidWdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRpciwgKmZpbGU7CisJc3RydWN0IF9kZGVidWcgKml0ZXIsICppdGVyX3N0YXJ0OworCWNvbnN0IGNoYXIgKm1vZG5hbWUgPSBOVUxMOworCWludCByZXQgPSAwOworCWludCBuID0gMDsKKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHluYW1pY19kZWJ1ZyIsIE5VTEwpOworCWlmICghZGlyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY29udHJvbCIsIDA2NDQsIGRpciwgTlVMTCwKKwkJCQkJJmRkZWJ1Z19wcm9jX2ZvcHMpOworCWlmICghZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKF9fc3RhcnRfX192ZXJib3NlICE9IF9fc3RvcF9fX3ZlcmJvc2UpIHsKKwkJaXRlciA9IF9fc3RhcnRfX192ZXJib3NlOworCQltb2RuYW1lID0gaXRlci0+bW9kbmFtZTsKKwkJaXRlcl9zdGFydCA9IGl0ZXI7CisJCWZvciAoOyBpdGVyIDwgX19zdG9wX19fdmVyYm9zZTsgaXRlcisrKSB7CisJCQlpZiAoc3RyY21wKG1vZG5hbWUsIGl0ZXItPm1vZG5hbWUpKSB7CisJCQkJcmV0ID0gZGRlYnVnX2FkZF9tb2R1bGUoaXRlcl9zdGFydCwgbiwgbW9kbmFtZSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXRfZnJlZTsKKwkJCQluID0gMDsKKwkJCQltb2RuYW1lID0gaXRlci0+bW9kbmFtZTsKKwkJCQlpdGVyX3N0YXJ0ID0gaXRlcjsKKwkJCX0KKwkJCW4rKzsKKwkJfQorCQlyZXQgPSBkZGVidWdfYWRkX21vZHVsZShpdGVyX3N0YXJ0LCBuLCBtb2RuYW1lKTsKKwl9CitvdXRfZnJlZToKKwlpZiAocmV0KSB7CisJCWRkZWJ1Z19yZW1vdmVfYWxsX3RhYmxlcygpOworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlkZWJ1Z2ZzX3JlbW92ZShmaWxlKTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChkeW5hbWljX2RlYnVnX2luaXQpOwpkaWZmIC0tZ2l0IGEvbGliL2R5bmFtaWNfcHJpbnRrLmMgYi9saWIvZHluYW1pY19wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1YTE5Ny4uMDAwMDAwMAotLS0gYS9saWIvZHluYW1pY19wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi0vKgotICogbGliL2R5bmFtaWNfcHJpbnRrLmMKLSAqCi0gKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKLSAqIHRoZWlyIHNvdXJjZSBtb2R1bGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4sIEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RhcnRfX192ZXJib3NlW107Ci1leHRlcm4gc3RydWN0IG1vZF9kZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107Ci0KLXN0cnVjdCBkZWJ1Z19uYW1lIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDI7Ci0JaW50IGhhc2gxOwotCWludCBoYXNoMjsKLQljaGFyICpuYW1lOwotCWludCBlbmFibGU7Ci0JaW50IHR5cGU7Ci19OwotCi1zdGF0aWMgaW50IG5yX2VudHJpZXM7Ci1zdGF0aWMgaW50IG51bV9lbmFibGVkOwotaW50IGR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZVtERUJVR19IQVNIX1RBQkxFX1NJWkVdID0KLQl7IFswIC4uLiBERUJVR19IQVNIX1RBQkxFX1NJWkUtMV0gPSBITElTVF9IRUFEX0lOSVQgfTsKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBtb2R1bGVfdGFibGUyW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQotCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Owotc3RhdGljIERFQ0xBUkVfTVVURVgoZGVidWdfbGlzdF9tdXRleCk7Ci0KLS8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKLSAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKLSAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgotICovCi1sb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKLUVYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQpOwotbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOwotRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZDIpOwotCi0vKiByZXR1cm5zIHRoZSBkZWJ1ZyBtb2R1bGUgcG9pbnRlci4gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVidWdfbmFtZSAqZmluZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kdWxlX25hbWUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7Ci0KLQllbGVtZW50ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKLQkJCWlmICghc3RyY21wKGVsZW1lbnQtPm5hbWUsIG1vZHVsZV9uYW1lKSkKLQkJCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLwotc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZV9oYXNoKGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKLQotCWVsZW1lbnQgPSBOVUxMOwotCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2hhc2hdOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKLQkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQotCQkJcmV0dXJuIGVsZW1lbnQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgqLwotc3RhdGljIGludCBfX2FkZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCBoYXNoLCBpbnQgaGFzaDIpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKm5ldzsKLQljaGFyICptb2R1bGVfbmFtZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCW1vZHVsZV9uYW1lID0ga21hbGxvYyhzdHJsZW4obW9kX25hbWUpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2R1bGVfbmFtZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JbW9kdWxlX25hbWUgPSBzdHJjcHkobW9kdWxlX25hbWUsIG1vZF9uYW1lKTsKLQltb2R1bGVfbmFtZVtzdHJsZW4obW9kX25hbWUpXSA9ICdcMCc7Ci0JbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRlYnVnX25hbWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ldykgewotCQlrZnJlZShtb2R1bGVfbmFtZSk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQlJTklUX0hMSVNUX05PREUoJm5ldy0+aGxpc3QpOwotCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdDIpOwotCW5ldy0+bmFtZSA9IG1vZHVsZV9uYW1lOwotCW5ldy0+aGFzaDEgPSBoYXNoOwotCW5ldy0+aGFzaDIgPSBoYXNoMjsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJm5ldy0+aGxpc3QsICZtb2R1bGVfdGFibGVbaGFzaF0pOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdDIsICZtb2R1bGVfdGFibGUyW2hhc2gyXSk7Ci0JbnJfZW50cmllcysrOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLWludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OwotCWludCByZXQgPSAwOwotCi0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0JZWxlbWVudCA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQlpZiAoIWVsZW1lbnQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0KTsKLQlobGlzdF9kZWxfcmN1KCZlbGVtZW50LT5obGlzdDIpOwotCXN5bmNocm9uaXplX3JjdSgpOwotCWtmcmVlKGVsZW1lbnQtPm5hbWUpOwotCWlmIChlbGVtZW50LT5lbmFibGUpCi0JCW51bV9lbmFibGVkLS07Ci0Ja2ZyZWUoZWxlbWVudCk7Ci0JbnJfZW50cmllcy0tOwotb3V0OgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7Ci0KLWludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCi0JCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOwotCWludCByZXQgPSAwOwotCi0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0JZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQlpZiAoIWVsZW0pIHsKLQkJaWYgKF9fYWRkX2RlYnVnX21vZHVsZShtb2RfbmFtZSwgaGFzaCwgaGFzaDIpKQotCQkJZ290byBvdXQ7Ci0JCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7Ci0JCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCAmJgotCQkJCSFzdHJjbXAobW9kX25hbWUsIHNoYXJlX25hbWUpKSB7Ci0JCQllbGVtLT5lbmFibGUgPSB0cnVlOwotCQkJbnVtX2VuYWJsZWQrKzsKLQkJfQotCX0KLQllbGVtLT50eXBlIHw9IHR5cGU7Ci1vdXQ6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7Ci0KLWludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgaW50IHZhbHVlLCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCkKLQkJcmV0dXJuIDE7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZV9oYXNoKG1vZF9uYW1lLCBoYXNoKTsKLQlpZiAoZWxlbSAmJiBlbGVtLT5lbmFibGUpCi0JCXJldCA9IDE7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIpOwotCi1zdGF0aWMgdm9pZCBzZXRfYWxsKGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCBpOwotCWxvbmcgbG9uZyBlbmFibGVfbWFzazsKLQotCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgewotCQlpZiAobW9kdWxlX3RhYmxlW2ldLmZpcnN0ICE9IE5VTEwpIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7Ci0JCQkJZS0+ZW5hYmxlID0gZW5hYmxlOwotCQkJfQotCQl9Ci0JfQotCWlmIChlbmFibGUpCi0JCWVuYWJsZV9tYXNrID0gVUxMT05HX01BWDsKLQllbHNlCi0JCWVuYWJsZV9tYXNrID0gMDsKLQlkeW5hbWljX3ByaW50a19lbmFibGVkID0gZW5hYmxlX21hc2s7Ci0JZHluYW1pY19wcmludGtfZW5hYmxlZDIgPSBlbmFibGVfbWFzazsKLX0KLQotc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGludCBpLCBib29sIGZpcnN0X3RhYmxlKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCi0JaWYgKGZpcnN0X3RhYmxlKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7Ci0JCQlpZiAoZS0+ZW5hYmxlKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZTJbaV0sIGhsaXN0MikgewotCQkJaWYgKGUtPmVuYWJsZSkKLQkJCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHJfZGVidWdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKmJ1ZmZlciwgKnMsICp2YWx1ZV9zdHIsICpzZXR0aW5nX3N0cjsKLQlpbnQgZXJyLCB2YWx1ZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbSA9IE5VTEw7Ci0JaW50IGFsbCA9IDA7Ci0KLQlpZiAobGVuZ3RoID4gUEFHRV9TSVpFIHx8IGxlbmd0aCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmZmVyID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZXJyID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGxlbmd0aCkpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobGVuZ3RoIDwgUEFHRV9TSVpFKQotCQlidWZmZXJbbGVuZ3RoXSA9ICdcMCc7Ci0JZWxzZSBpZiAoYnVmZmVyW1BBR0VfU0laRS0xXSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOwotCi0JaWYgKHN0cm5jbXAoInNldCIsIGJ1ZmZlciwgMykpCi0JCWdvdG8gb3V0X3VwOwotCXMgPSBidWZmZXIgKyAzOwotCXNldHRpbmdfc3RyID0gc3Ryc2VwKCZzLCAiPSIpOwotCWlmIChzID09IE5VTEwpCi0JCWdvdG8gb3V0X3VwOwotCXNldHRpbmdfc3RyID0gc3Ryc3RyaXAoc2V0dGluZ19zdHIpOwotCXZhbHVlX3N0ciA9IHN0cnNlcCgmcywgIiAiKTsKLQlpZiAocyA9PSBOVUxMKQotCQlnb3RvIG91dF91cDsKLQlzID0gc3Ryc3RyaXAocyk7Ci0JaWYgKCFzdHJuY21wKHMsICJhbGwiLCAzKSkKLQkJYWxsID0gMTsKLQllbHNlCi0JCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShzKTsKLQlpZiAoIXN0cm5jbXAoc2V0dGluZ19zdHIsICJlbmFibGUiLCA2KSkgewotCQl2YWx1ZSA9ICEhc2ltcGxlX3N0cnRvbCh2YWx1ZV9zdHIsIE5VTEwsIDEwKTsKLQkJaWYgKGFsbCkgewotCQkJaWYgKHZhbHVlKSB7Ci0JCQkJc2V0X2FsbCh0cnVlKTsKLQkJCQludW1fZW5hYmxlZCA9IG5yX2VudHJpZXM7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX0FMTDsKLQkJCX0gZWxzZSB7Ci0JCQkJc2V0X2FsbChmYWxzZSk7Ci0JCQkJbnVtX2VuYWJsZWQgPSAwOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotCQkJfQotCQkJZXJyID0gMDsKLQkJfSBlbHNlIGlmIChlbGVtKSB7Ci0JCQlpZiAodmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAwKSkgewotCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgfD0gKDFMTCA8PCBlbGVtLT5oYXNoMSk7Ci0JCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgfD0gKDFMTCA8PCBlbGVtLT5oYXNoMik7Ci0JCQkJZWxlbS0+ZW5hYmxlID0gMTsKLQkJCQludW1fZW5hYmxlZCsrOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9TT01FOwotCQkJCWVyciA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJImRlYnVnZ2luZyBlbmFibGVkIGZvciBtb2R1bGUgJXNcbiIsCi0JCQkJCWVsZW0tPm5hbWUpOwotCQkJfSBlbHNlIGlmICghdmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAxKSkgewotCQkJCWVsZW0tPmVuYWJsZSA9IDA7Ci0JCQkJbnVtX2VuYWJsZWQtLTsKLQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMSwgdHJ1ZSkpCi0JCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJj0KLQkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMSk7Ci0JCQkJaWYgKGRpc2FibGVkX2hhc2goZWxlbS0+aGFzaDIsIGZhbHNlKSkKLQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgJj0KLQkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMik7Ci0JCQkJaWYgKG51bV9lbmFibGVkKQotCQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfU09NRTsKLQkJCQllbHNlCi0JCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotCQkJCWVyciA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJImRlYnVnZ2luZyBkaXNhYmxlZCBmb3IgbW9kdWxlICVzXG4iLAotCQkJCQllbGVtLT5uYW1lKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIWVycikKLQkJZXJyID0gbGVuZ3RoOwotb3V0X3VwOgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLW91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCAqcHJfZGVidWdfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuICgqcG9zIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFKSA/IHBvcyA6IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCSgqcG9zKSsrOwotCWlmICgqcG9zID49IERFQlVHX0hBU0hfVEFCTEVfU0laRSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBvczsKLX0KLQotc3RhdGljIHZvaWQgcHJfZGVidWdfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotewotCS8qIE5vdGhpbmcgdG8gZG8gKi8KLX0KLQotc3RhdGljIGludCBwcl9kZWJ1Z19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW07Ci0JdW5zaWduZWQgaW50IGkgPSAqKGxvZmZfdCAqKSB2OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2ldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBub2RlLCBoZWFkLCBobGlzdCkgewotCQlzZXFfcHJpbnRmKHMsICIlcyBlbmFibGVkPSVkIiwgZWxlbS0+bmFtZSwgZWxlbS0+ZW5hYmxlKTsKLQkJc2VxX3ByaW50ZihzLCAiXG4iKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJfZGVidWdfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBwcl9kZWJ1Z19zZXFfc3RhcnQsCi0JLm5leHQgID0gcHJfZGVidWdfc2VxX25leHQsCi0JLnN0b3AgID0gcHJfZGVidWdfc2VxX3N0b3AsCi0JLnNob3cgID0gcHJfZGVidWdfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgcHJfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlscCwgJnByX2RlYnVnX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcl9kZWJ1Z19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHByX2RlYnVnX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLndyaXRlCQk9IHByX2RlYnVnX3dyaXRlLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX3ByaW50a19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKLQlzdHJ1Y3QgbW9kX2RlYnVnICppdGVyOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImR5bmFtaWNfcHJpbnRrIiwgTlVMTCk7Ci0JaWYgKCFkaXIpCi0JCXJldHVybiAtRU5PTUVNOwotCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtb2R1bGVzIiwgMDY0NCwgZGlyLCBOVUxMLAotCQkJCQkmcHJfZGVidWdfb3BlcmF0aW9ucyk7Ci0JaWYgKCFmaWxlKSB7Ci0JCWRlYnVnZnNfcmVtb3ZlKGRpcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlmb3IgKHZhbHVlID0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9fX3ZlcmJvc2U7Ci0JCXZhbHVlIDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX19fdmVyYm9zZTsKLQkJdmFsdWUgKz0gc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKSB7Ci0JCQlpdGVyID0gKHN0cnVjdCBtb2RfZGVidWcgKil2YWx1ZTsKLQkJCXJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGl0ZXItPm1vZG5hbWUsCi0JCQkJaXRlci0+dHlwZSwKLQkJCQlpdGVyLT5sb2dpY2FsX21vZG5hbWUsCi0JCQkJaXRlci0+ZmxhZ19uYW1lcywgaXRlci0+aGFzaCwgaXRlci0+aGFzaDIpOwotCX0KLQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwpCi0JCXNldF9hbGwodHJ1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChkeW5hbWljX3ByaW50a19pbml0KTsKLS8qIG1heSB3YW50IHRvIG1vdmUgdGhpcyBlYXJsaWVyIHNvIHdlIGNhbiBnZXQgdHJhY2VzIGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpZiAoc3RyKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOwotCXJldHVybiAwOwotfQotLyogVXNlIGVhcmx5X3BhcmFtKCksIHNvIHdlIGNhbiBnZXQgZGVidWcgb3V0cHV0IGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi1lYXJseV9wYXJhbSgiZHluYW1pY19wcmludGsiLCBkeW5hbWljX3ByaW50a19zZXR1cCk7CmRpZmYgLS1naXQgYS9saWIva2VybmVsX2xvY2suYyBiL2xpYi9rZXJuZWxfbG9jay5jCmluZGV4IDAxYTNjMjIuLjM5ZjEwMjkgMTAwNjQ0Ci0tLSBhL2xpYi9rZXJuZWxfbG9jay5jCisrKyBiL2xpYi9rZXJuZWxfbG9jay5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgX19sb2NrZnVuYyBfX3JlYWNxdWlyZV9rZXJuZWxfbG9jayh2b2lkKQogewogCXdoaWxlICghX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkgewotCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWNwdV9yZWxheCgpOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDA0ODdkMWYuLmE2ZGVjMzIgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gYnVpbGQgdGhlIG5hbWUKICAqIEB2YXJnczogdmFyZ3MgdG8gZm9ybWF0IHRoZSBzdHJpbmcuCiAgKi8KLXN0YXRpYyBpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAoraW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKIAkJCQkgIHZhX2xpc3QgdmFyZ3MpCiB7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBrb2JqLT5uYW1lOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCAzMTgzMjhkZC4uOTdhNzc3YSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTExOCw2ICsxMTgsMTMgQEAKIAlrc2V0ID0gdG9wX2tvYmotPmtzZXQ7CiAJdWV2ZW50X29wcyA9IGtzZXQtPnVldmVudF9vcHM7CiAKKwkvKiBza2lwIHRoZSBldmVudCwgaWYgdWV2ZW50X3N1cHByZXNzIGlzIHNldCovCisJaWYgKGtvYmotPnVldmVudF9zdXBwcmVzcykgeworCQlwcl9kZWJ1Zygia29iamVjdDogJyVzJyAoJXApOiAlczogdWV2ZW50X3N1cHByZXNzICIKKwkJCQkgImNhdXNlZCB0aGUgZXZlbnQgdG8gZHJvcCFcbiIsCisJCQkJIGtvYmplY3RfbmFtZShrb2JqKSwga29iaiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CiAJLyogc2tpcCB0aGUgZXZlbnQsIGlmIHRoZSBmaWx0ZXIgcmV0dXJucyB6ZXJvLiAqLwogCWlmICh1ZXZlbnRfb3BzICYmIHVldmVudF9vcHMtPmZpbHRlcikKIAkJaWYgKCF1ZXZlbnRfb3BzLT5maWx0ZXIoa3NldCwga29iaikpIHsKQEAgLTIyNyw2ICsyMzQsOSBAQAogCQkJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IDE7CiAJCQlyZXR2YWwgPSBuZXRsaW5rX2Jyb2FkY2FzdCh1ZXZlbnRfc29jaywgc2tiLCAwLCAxLAogCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCQkvKiBFTk9CVUZTIHNob3VsZCBiZSBoYW5kbGVkIGluIHVzZXJzcGFjZSAqLworCQkJaWYgKHJldHZhbCA9PSAtRU5PQlVGUykKKwkJCQlyZXR2YWwgPSAwOwogCQl9IGVsc2UKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJfQpAQCAtMjQ4LDcgKzI1OCw3IEBACiAJCQlnb3RvIGV4aXQ7CiAKIAkJcmV0dmFsID0gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LAotCQkJCQkgICAgIGVudi0+ZW52cCwgVU1IX1dBSVRfRVhFQyk7CisJCQkJCSAgICAgZW52LT5lbnZwLCBVTUhfTk9fV0FJVCk7CiAJfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvbGliL25sYXR0ci5jIGIvbGliL25sYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzA2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbmxhdHRyLmMKQEAgLTAsMCArMSw1MDIgQEAKKy8qCisgKiBORVRMSU5LICAgICAgTmV0bGluayBhdHRyaWJ1dGVzCisgKgorICogCQlBdXRob3JzOglUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KKyAqIAkJCQlBbGV4ZXkgS3V6bmV0c292IDxrdXpuZXRAbXMyLmluci5hYy5ydT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCitzdGF0aWMgdTE2IG5sYV9hdHRyX21pbmxlbltOTEFfVFlQRV9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKKwlbTkxBX1U4XQk9IHNpemVvZih1OCksCisJW05MQV9VMTZdCT0gc2l6ZW9mKHUxNiksCisJW05MQV9VMzJdCT0gc2l6ZW9mKHUzMiksCisJW05MQV9VNjRdCT0gc2l6ZW9mKHU2NCksCisJW05MQV9ORVNURURdCT0gTkxBX0hEUkxFTiwKK307CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfbmxhKHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IG1heHR5cGUsCisJCQljb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KQoreworCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdDsKKwlpbnQgbWlubGVuID0gMCwgYXR0cmxlbiA9IG5sYV9sZW4obmxhKSwgdHlwZSA9IG5sYV90eXBlKG5sYSk7CisKKwlpZiAodHlwZSA8PSAwIHx8IHR5cGUgPiBtYXh0eXBlKQorCQlyZXR1cm4gMDsKKworCXB0ID0gJnBvbGljeVt0eXBlXTsKKworCUJVR19PTihwdC0+dHlwZSA+IE5MQV9UWVBFX01BWCk7CisKKwlzd2l0Y2ggKHB0LT50eXBlKSB7CisJY2FzZSBOTEFfRkxBRzoKKwkJaWYgKGF0dHJsZW4gPiAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWJyZWFrOworCisJY2FzZSBOTEFfTlVMX1NUUklORzoKKwkJaWYgKHB0LT5sZW4pCisJCQltaW5sZW4gPSBtaW5fdChpbnQsIGF0dHJsZW4sIHB0LT5sZW4gKyAxKTsKKwkJZWxzZQorCQkJbWlubGVuID0gYXR0cmxlbjsKKworCQlpZiAoIW1pbmxlbiB8fCBtZW1jaHIobmxhX2RhdGEobmxhKSwgJ1wwJywgbWlubGVuKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBOTEFfU1RSSU5HOgorCQlpZiAoYXR0cmxlbiA8IDEpCisJCQlyZXR1cm4gLUVSQU5HRTsKKworCQlpZiAocHQtPmxlbikgeworCQkJY2hhciAqYnVmID0gbmxhX2RhdGEobmxhKTsKKworCQkJaWYgKGJ1ZlthdHRybGVuIC0gMV0gPT0gJ1wwJykKKwkJCQlhdHRybGVuLS07CisKKwkJCWlmIChhdHRybGVuID4gcHQtPmxlbikKKwkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTkxBX0JJTkFSWToKKwkJaWYgKHB0LT5sZW4gJiYgYXR0cmxlbiA+IHB0LT5sZW4pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJYnJlYWs7CisKKwljYXNlIE5MQV9ORVNURURfQ09NUEFUOgorCQlpZiAoYXR0cmxlbiA8IHB0LT5sZW4pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKGF0dHJsZW4gPCBOTEFfQUxJR04ocHQtPmxlbikpCisJCQlicmVhazsKKwkJaWYgKGF0dHJsZW4gPCBOTEFfQUxJR04ocHQtPmxlbikgKyBOTEFfSERSTEVOKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCW5sYSA9IG5sYV9kYXRhKG5sYSkgKyBOTEFfQUxJR04ocHQtPmxlbik7CisJCWlmIChhdHRybGVuIDwgTkxBX0FMSUdOKHB0LT5sZW4pICsgTkxBX0hEUkxFTiArIG5sYV9sZW4obmxhKSkKKwkJCXJldHVybiAtRVJBTkdFOworCQlicmVhazsKKwljYXNlIE5MQV9ORVNURUQ6CisJCS8qIGEgbmVzdGVkIGF0dHJpYnV0ZXMgaXMgYWxsb3dlZCB0byBiZSBlbXB0eTsgaWYgaXRzIG5vdCwKKwkJICogaXQgbXVzdCBoYXZlIGEgc2l6ZSBvZiBhdCBsZWFzdCBOTEFfSERSTEVOLgorCQkgKi8KKwkJaWYgKGF0dHJsZW4gPT0gMCkKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChwdC0+bGVuKQorCQkJbWlubGVuID0gcHQtPmxlbjsKKwkJZWxzZSBpZiAocHQtPnR5cGUgIT0gTkxBX1VOU1BFQykKKwkJCW1pbmxlbiA9IG5sYV9hdHRyX21pbmxlbltwdC0+dHlwZV07CisKKwkJaWYgKGF0dHJsZW4gPCBtaW5sZW4pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBubGFfdmFsaWRhdGUgLSBWYWxpZGF0ZSBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5CisgKgorICogVmFsaWRhdGVzIGFsbCBhdHRyaWJ1dGVzIGluIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIHN0cmVhbSBhZ2FpbnN0IHRoZQorICogc3BlY2lmaWVkIHBvbGljeS4gQXR0cmlidXRlcyB3aXRoIGEgdHlwZSBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlCisgKiBpZ25vcmVkLiBTZWUgZG9jdW1lbmF0aW9uIG9mIHN0cnVjdCBubGFfcG9saWN5IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbmxhX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sIGludCBtYXh0eXBlLAorCQkgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJaW50IHJlbSwgZXJyOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkgeworCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKworCWVyciA9IDA7CitlcnJvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBubGFfcG9saWN5X2xlbiAtIERldGVybWluIHRoZSBtYXguIGxlbmd0aCBvZiBhIHBvbGljeQorICogQHBvbGljeTogcG9saWN5IHRvIHVzZQorICogQG46IG51bWJlciBvZiBwb2xpY2llcworICoKKyAqIERldGVybWluZXMgdGhlIG1heC4gbGVuZ3RoIG9mIHRoZSBwb2xpY3kuICBJdCBpcyBjdXJyZW50bHkgdXNlZAorICogdG8gYWxsb2NhdGVkIE5ldGxpbmsgYnVmZmVycyByb3VnaGx5IHRoZSBzaXplIG9mIHRoZSBhY3R1YWwKKyAqIG1lc3NhZ2UuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQKK25sYV9wb2xpY3lfbGVuKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwLCBpbnQgbikKK3sKKwlpbnQgaSwgbGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKHAtPmxlbikKKwkJCWxlbiArPSBubGFfdG90YWxfc2l6ZShwLT5sZW4pOworCQllbHNlIGlmIChubGFfYXR0cl9taW5sZW5bcC0+dHlwZV0pCisJCQlsZW4gKz0gbmxhX3RvdGFsX3NpemUobmxhX2F0dHJfbWlubGVuW3AtPnR5cGVdKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIG5sYV9wYXJzZSAtIFBhcnNlIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMgaW50byBhIHRiIGJ1ZmZlcgorICogQHRiOiBkZXN0aW5hdGlvbiBhcnJheSB3aXRoIG1heHR5cGUrMSBlbGVtZW50cworICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBoZWFkOiBoZWFkIG9mIGF0dHJpYnV0ZSBzdHJlYW0KKyAqIEBsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAcG9saWN5OiB2YWxpZGF0aW9uIHBvbGljeQorICoKKyAqIFBhcnNlcyBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzIGFuZCBzdG9yZXMgYSBwb2ludGVyIHRvIGVhY2ggYXR0cmlidXRlIGluCisgKiB0aGUgdGIgYXJyYXkgYWNjZXNzYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZSB0eXBlLiBBdHRyaWJ1dGVzIHdpdGggYSB0eXBlCisgKiBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgKiByZWFzb25zLiBwb2xpY3kgbWF5IGJlIHNldCB0byBOVUxMIGlmIG5vIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLAorCSAgICAgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCit7CisJc3RydWN0IG5sYXR0ciAqbmxhOworCWludCByZW0sIGVycjsKKworCW1lbXNldCh0YiwgMCwgc2l6ZW9mKHN0cnVjdCBubGF0dHIgKikgKiAobWF4dHlwZSArIDEpKTsKKworCW5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHsKKwkJdTE2IHR5cGUgPSBubGFfdHlwZShubGEpOworCisJCWlmICh0eXBlID4gMCAmJiB0eXBlIDw9IG1heHR5cGUpIHsKKwkJCWlmIChwb2xpY3kpIHsKKwkJCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlnb3RvIGVycm91dDsKKwkJCX0KKworCQkJdGJbdHlwZV0gPSBubGE7CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHkocmVtID4gMCkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5ldGxpbms6ICVkIGJ5dGVzIGxlZnRvdmVyIGFmdGVyIHBhcnNpbmcgIgorCQkgICAgICAgImF0dHJpYnV0ZXMuXG4iLCByZW0pOworCisJZXJyID0gMDsKK2Vycm91dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIG5sYV9maW5kIC0gRmluZCBhIHNwZWNpZmljIGF0dHJpYnV0ZSBpbiBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICogQGF0dHJ0eXBlOiB0eXBlIG9mIGF0dHJpYnV0ZSB0byBsb29rIGZvcgorICoKKyAqIFJldHVybnMgdGhlIGZpcnN0IGF0dHJpYnV0ZSBpbiB0aGUgc3RyZWFtIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAqLworc3RydWN0IG5sYXR0ciAqbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKwlpbnQgcmVtOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkKKwkJaWYgKG5sYV90eXBlKG5sYSkgPT0gYXR0cnR5cGUpCisJCQlyZXR1cm4gbmxhOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbmxhX3N0cmxjcHkgLSBDb3B5IHN0cmluZyBhdHRyaWJ1dGUgcGF5bG9hZCBpbnRvIGEgc2l6ZWQgYnVmZmVyCisgKiBAZHN0OiB3aGVyZSB0byBjb3B5IHRoZSBzdHJpbmcgdG8KKyAqIEBubGE6IGF0dHJpYnV0ZSB0byBjb3B5IHRoZSBzdHJpbmcgZnJvbQorICogQGRzdHNpemU6IHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgKgorICogQ29waWVzIGF0IG1vc3QgZHN0c2l6ZSAtIDEgYnl0ZXMgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSB2YWxpZCBOVUwtdGVybWluYXRlZCBzdHJpbmcuIFVubGlrZQorICogc3RybGNweSB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGFsd2F5cyBwYWRkZWQgb3V0LgorICoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4KKyAqLworc2l6ZV90IG5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBzaXplX3QgZHN0c2l6ZSkKK3sKKwlzaXplX3Qgc3JjbGVuID0gbmxhX2xlbihubGEpOworCWNoYXIgKnNyYyA9IG5sYV9kYXRhKG5sYSk7CisKKwlpZiAoc3JjbGVuID4gMCAmJiBzcmNbc3JjbGVuIC0gMV0gPT0gJ1wwJykKKwkJc3JjbGVuLS07CisKKwlpZiAoZHN0c2l6ZSA+IDApIHsKKwkJc2l6ZV90IGxlbiA9IChzcmNsZW4gPj0gZHN0c2l6ZSkgPyBkc3RzaXplIC0gMSA6IHNyY2xlbjsKKworCQltZW1zZXQoZHN0LCAwLCBkc3RzaXplKTsKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCX0KKworCXJldHVybiBzcmNsZW47Cit9CisKKy8qKgorICogbmxhX21lbWNweSAtIENvcHkgYSBuZXRsaW5rIGF0dHJpYnV0ZSBpbnRvIGFub3RoZXIgbWVtb3J5IGFyZWEKKyAqIEBkZXN0OiB3aGVyZSB0byBjb3B5IHRvIG1lbWNweQorICogQHNyYzogbmV0bGluayBhdHRyaWJ1dGUgdG8gY29weSBmcm9tCisgKiBAY291bnQ6IHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZWEKKyAqCisgKiBOb3RlOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpcyBsaW1pdGVkIGJ5IHRoZSBsZW5ndGggb2YKKyAqICAgICAgIGF0dHJpYnV0ZSdzIHBheWxvYWQuIG1lbWNweQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KK2ludCBubGFfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKnNyYywgaW50IGNvdW50KQoreworCWludCBtaW5sZW4gPSBtaW5fdChpbnQsIGNvdW50LCBubGFfbGVuKHNyYykpOworCisJbWVtY3B5KGRlc3QsIG5sYV9kYXRhKHNyYyksIG1pbmxlbik7CisKKwlyZXR1cm4gbWlubGVuOworfQorCisvKioKKyAqIG5sYV9tZW1jbXAgLSBDb21wYXJlIGFuIGF0dHJpYnV0ZSB3aXRoIHNpemVkIG1lbW9yeSBhcmVhCisgKiBAbmxhOiBuZXRsaW5rIGF0dHJpYnV0ZQorICogQGRhdGE6IG1lbW9yeSBhcmVhCisgKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYXJlYQorICovCitpbnQgbmxhX21lbWNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICAgIHNpemVfdCBzaXplKQoreworCWludCBkID0gbmxhX2xlbihubGEpIC0gc2l6ZTsKKworCWlmIChkID09IDApCisJCWQgPSBtZW1jbXAobmxhX2RhdGEobmxhKSwgZGF0YSwgc2l6ZSk7CisKKwlyZXR1cm4gZDsKK30KKworLyoqCisgKiBubGFfc3RyY21wIC0gQ29tcGFyZSBhIHN0cmluZyBhdHRyaWJ1dGUgYWdhaW5zdCBhIHN0cmluZworICogQG5sYTogbmV0bGluayBzdHJpbmcgYXR0cmlidXRlCisgKiBAc3RyOiBhbm90aGVyIHN0cmluZworICovCitpbnQgbmxhX3N0cmNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cikgKyAxOworCWludCBkID0gbmxhX2xlbihubGEpIC0gbGVuOworCisJaWYgKGQgPT0gMCkKKwkJZCA9IG1lbWNtcChubGFfZGF0YShubGEpLCBzdHIsIGxlbik7CisKKwlyZXR1cm4gZDsKK30KKworI2lmZGVmIENPTkZJR19ORVQKKy8qKgorICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCisgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCisgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogQWRkcyBhIG5ldGxpbmsgYXR0cmlidXRlIGhlYWRlciB0byBhIHNvY2tldCBidWZmZXIgYW5kIHJlc2VydmVzCisgKiByb29tIGZvciB0aGUgcGF5bG9hZCBidXQgZG9lcyBub3QgY29weSBpdC4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCisgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK3N0cnVjdCBubGF0dHIgKl9fbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbikKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisKKwlubGEgPSAoc3RydWN0IG5sYXR0ciAqKSBza2JfcHV0KHNrYiwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpOworCW5sYS0+bmxhX3R5cGUgPSBhdHRydHlwZTsKKwlubGEtPm5sYV9sZW4gPSBubGFfYXR0cl9zaXplKGF0dHJsZW4pOworCisJbWVtc2V0KCh1bnNpZ25lZCBjaGFyICopIG5sYSArIG5sYS0+bmxhX2xlbiwgMCwgbmxhX3BhZGxlbihhdHRybGVuKSk7CisKKwlyZXR1cm4gbmxhOworfQorRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKKworLyoqCisgKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCisgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogUmVzZXJ2ZXMgcm9vbSBmb3IgYXR0cmlidXRlIHBheWxvYWQgd2l0aG91dCBhIGhlYWRlci4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCisgKiB0YWlscm9vbSBmb3IgdGhlIHBheWxvYWQuCisgKi8KK3ZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pCit7CisJdm9pZCAqc3RhcnQ7CisKKwlzdGFydCA9IHNrYl9wdXQoc2tiLCBOTEFfQUxJR04oYXR0cmxlbikpOworCW1lbXNldChzdGFydCwgMCwgTkxBX0FMSUdOKGF0dHJsZW4pKTsKKworCXJldHVybiBzdGFydDsKK30KK0VYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7CisKKy8qKgorICogbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgorICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICoKKyAqIEFkZHMgYSBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCByZXNlcnZlcworICogcm9vbSBmb3IgdGhlIHBheWxvYWQgYnV0IGRvZXMgbm90IGNvcHkgaXQuCisgKgorICogUmV0dXJucyBOVUxMIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQorICogdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK3N0cnVjdCBubGF0dHIgKm5sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZSk7CisKKy8qKgorICogbmxhX3Jlc2VydmVfbm9oZHIgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb24KKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXNlcnZlcyByb29tIGZvciBhdHRyaWJ1dGUgcGF5bG9hZCB3aXRob3V0IGEgaGVhZGVyLgorICoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KKyAqLwordm9pZCAqbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgTkxBX0FMSUdOKGF0dHJsZW4pKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7CisKKy8qKgorICogX19ubGFfcHV0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2tiIHByb3ZpZGVzIGVub3VnaAorICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLgorICovCit2b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLAorCQkJICAgICBjb25zdCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKworCW5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7CisJbWVtY3B5KG5sYV9kYXRhKG5sYSksIGRhdGEsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOworCisvKioKKyAqIF9fbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2tiIHByb3ZpZGVzIGVub3VnaAorICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KKyAqLwordm9pZCBfX25sYV9wdXRfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJdm9pZCAqc3RhcnQ7CisKKwlzdGFydCA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKKwltZW1jcHkoc3RhcnQsIGRhdGEsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOworCisvKioKKyAqIG5sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXR1cm5zIC1FTVNHU0laRSBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLgorICovCitpbnQgbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IG5sYV90b3RhbF9zaXplKGF0dHJsZW4pKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCV9fbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmxhX3B1dCk7CisKKy8qKgorICogbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogUmV0dXJucyAtRU1TR1NJWkUgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCisgKiB0aGUgYXR0cmlidXRlIHBheWxvYWQuCisgKi8KK2ludCBubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IE5MQV9BTElHTihhdHRybGVuKSkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7CisKKy8qKgorICogbmxhX2FwcGVuZCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyIG9yIHBhZGRpbmcKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXR1cm5zIC1FTVNHU0laRSBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KKyAqLworaW50IG5sYV9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgTkxBX0FMSUdOKGF0dHJsZW4pKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCW1lbWNweShza2JfcHV0KHNrYiwgYXR0cmxlbiksIGRhdGEsIGF0dHJsZW4pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChubGFfYXBwZW5kKTsKKyNlbmRpZgorCitFWFBPUlRfU1lNQk9MKG5sYV92YWxpZGF0ZSk7CitFWFBPUlRfU1lNQk9MKG5sYV9wb2xpY3lfbGVuKTsKK0VYUE9SVF9TWU1CT0wobmxhX3BhcnNlKTsKK0VYUE9SVF9TWU1CT0wobmxhX2ZpbmQpOworRVhQT1JUX1NZTUJPTChubGFfc3RybGNweSk7CitFWFBPUlRfU1lNQk9MKG5sYV9tZW1jcHkpOworRVhQT1JUX1NZTUJPTChubGFfbWVtY21wKTsKK0VYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7CmRpZmYgLS1naXQgYS9saWIvemxpYl9pbmZsYXRlL2luZmxhdGUuaCBiL2xpYi96bGliX2luZmxhdGUvaW5mbGF0ZS5oCmluZGV4IGRmOGE2YzkuLjNkMTdiM2QgMTAwNjQ0Ci0tLSBhL2xpYi96bGliX2luZmxhdGUvaW5mbGF0ZS5oCisrKyBiL2xpYi96bGliX2luZmxhdGUvaW5mbGF0ZS5oCkBAIC0xLDMgKzEsNiBAQAorI2lmbmRlZiBJTkZMQVRFX0gKKyNkZWZpbmUgSU5GTEFURV9ICisKIC8qIGluZmxhdGUuaCAtLSBpbnRlcm5hbCBpbmZsYXRlIHN0YXRlIGRlZmluaXRpb24KICAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA0IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKQEAgLTEwNSwzICsxMDgsNCBAQAogICAgIHVuc2lnbmVkIHNob3J0IHdvcmtbMjg4XTsgICAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi8KICAgICBjb2RlIGNvZGVzW0VOT1VHSF07ICAgICAgICAgLyogc3BhY2UgZm9yIGNvZGUgdGFibGVzICovCiB9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvemxpYl9pbmZsYXRlL2luZnRyZWVzLmggYi9saWIvemxpYl9pbmZsYXRlL2luZnRyZWVzLmgKaW5kZXggNWY1MjE5Yi4uYjcwYjQ3MyAxMDA2NDQKLS0tIGEvbGliL3psaWJfaW5mbGF0ZS9pbmZ0cmVlcy5oCisrKyBiL2xpYi96bGliX2luZmxhdGUvaW5mdHJlZXMuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgSU5GVFJFRVNfSAorI2RlZmluZSBJTkZUUkVFU19ICisKIC8qIGluZnRyZWVzLmggLS0gaGVhZGVyIHRvIHVzZSBpbmZ0cmVlcy5jCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCkBAIC01MywzICs1Niw0IEBACiBleHRlcm4gaW50IHpsaWJfaW5mbGF0ZV90YWJsZSAoY29kZXR5cGUgdHlwZSwgdW5zaWduZWQgc2hvcnQgKmxlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVzLCBjb2RlICoqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpiaXRzLCB1bnNpZ25lZCBzaG9ydCAqd29yayk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggNzIyNTViZS4uODE4NTY5YiAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDEwIEBACiBvYmotJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm8KIG9iai0kKENPTkZJR19GU19YSVApICs9IGZpbGVtYXBfeGlwLm8KIG9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUubworaWZkZWYgQ09ORklHX0hBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEKK29iai0kKENPTkZJR19TTVApICs9IHBlcmNwdS5vCitlbHNlCiBvYmotJChDT05GSUdfU01QKSArPSBhbGxvY3BlcmNwdS5vCitlbmRpZgogb2JqLSQoQ09ORklHX1FVSUNLTElTVCkgKz0gcXVpY2tsaXN0Lm8KIG9iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8gcGFnZV9jZ3JvdXAubwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NwZXJjcHUuYyBiL21tL2FsbG9jcGVyY3B1LmMKaW5kZXggNDI5N2JjNC4uMTg4MjkyMyAxMDA2NDQKLS0tIGEvbW0vYWxsb2NwZXJjcHUuYworKysgYi9tbS9hbGxvY3BlcmNwdS5jCkBAIC05OSw0NSArOTksNTEgQEAKIAlfX3BlcmNwdV9wb3B1bGF0ZV9tYXNrKChfX3BkYXRhKSwgKHNpemUpLCAoZ2ZwKSwgJihtYXNrKSkKIAogLyoqCi0gKiBwZXJjcHVfYWxsb2NfbWFzayAtIGluaXRpYWwgc2V0dXAgb2YgcGVyLWNwdSBkYXRhCisgKiBhbGxvY19wZXJjcHUgLSBpbml0aWFsIHNldHVwIG9mIHBlci1jcHUgZGF0YQogICogQHNpemU6IHNpemUgb2YgcGVyLWNwdSBvYmplY3QKLSAqIEBnZnA6IG1heSBzbGVlcCBvciBub3QgZXRjLgotICogQG1hc2s6IHBvcHVsYXRlIHBlci1kYXRhIGZvciBjcHUncyBzZWxlY3RlZCB0aHJvdWdoIG1hc2sgYml0cworICogQGFsaWduOiBhbGlnbm1lbnQKICAqCi0gKiBQb3B1bGF0aW5nIHBlci1jcHUgZGF0YSBmb3IgYWxsIG9ubGluZSBjcHUncyB3b3VsZCBiZSBhIHR5cGljYWwgdXNlIGNhc2UsCi0gKiB3aGljaCBpcyBzaW1wbGlmaWVkIGJ5IHRoZSBwZXJjcHVfYWxsb2MoKSB3cmFwcGVyLgotICogUGVyLWNwdSBvYmplY3RzIGFyZSBwb3B1bGF0ZWQgd2l0aCB6ZXJvZWQgYnVmZmVycy4KKyAqIEFsbG9jYXRlIGR5bmFtaWMgcGVyY3B1IGFyZWEuICBQZXJjcHUgb2JqZWN0cyBhcmUgcG9wdWxhdGVkIHdpdGgKKyAqIHplcm9lZCBidWZmZXJzLgogICovCi12b2lkICpfX3BlcmNwdV9hbGxvY19tYXNrKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGNwdW1hc2tfdCAqbWFzaykKK3ZvaWQgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCiB7CiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSB3aG9sZSBjYWNoZSBsaW5lcyB0byBhdm9pZCBmYWxzZSBzaGFyaW5nCiAJICovCiAJc2l6ZV90IHN6ID0gcm91bmR1cChucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiksIGNhY2hlX2xpbmVfc2l6ZSgpKTsKLQl2b2lkICpwZGF0YSA9IGt6YWxsb2Moc3osIGdmcCk7CisJdm9pZCAqcGRhdGEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAl2b2lkICpfX3BkYXRhID0gX19wZXJjcHVfZGlzZ3Vpc2UocGRhdGEpOwogCisJLyoKKwkgKiBDYW4ndCBlYXNpbHkgbWFrZSBsYXJnZXIgYWxpZ25tZW50IHdvcmsgd2l0aCBrbWFsbG9jLiAgV0FSTgorCSAqIG9uIGl0LiAgTGFyZ2VyIGFsaWdubWVudCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBtb2R1bGUKKwkgKiBwZXJjcHUgc2VjdGlvbnMgb24gU01QIGZvciB3aGljaCB0aGlzIHBhdGggaXNuJ3QgdXNlZC4KKwkgKi8KKwlXQVJOX09OX09OQ0UoYWxpZ24gPiBTTVBfQ0FDSEVfQllURVMpOworCiAJaWYgKHVubGlrZWx5KCFwZGF0YSkpCiAJCXJldHVybiBOVUxMOwotCWlmIChsaWtlbHkoIV9fcGVyY3B1X3BvcHVsYXRlX21hc2soX19wZGF0YSwgc2l6ZSwgZ2ZwLCBtYXNrKSkpCisJaWYgKGxpa2VseSghX19wZXJjcHVfcG9wdWxhdGVfbWFzayhfX3BkYXRhLCBzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkgICAmY3B1X3Bvc3NpYmxlX21hcCkpKQogCQlyZXR1cm4gX19wZGF0YTsKIAlrZnJlZShwZGF0YSk7CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX3BlcmNwdV9hbGxvY19tYXNrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fYWxsb2NfcGVyY3B1KTsKIAogLyoqCi0gKiBwZXJjcHVfZnJlZSAtIGZpbmFsIGNsZWFudXAgb2YgcGVyLWNwdSBkYXRhCisgKiBmcmVlX3BlcmNwdSAtIGZpbmFsIGNsZWFudXAgb2YgcGVyLWNwdSBkYXRhCiAgKiBAX19wZGF0YTogb2JqZWN0IHRvIGNsZWFuIHVwCiAgKgogICogV2Ugc2ltcGx5IGNsZWFuIHVwIGFueSBwZXItY3B1IG9iamVjdCBsZWZ0LiBObyBuZWVkIGZvciB0aGUgY2xpZW50IHRvCiAgKiB0cmFjayBhbmQgc3BlY2lmeSB0aHJvdWdoIGEgYmlzIG1hc2sgd2hpY2ggcGVyLWNwdSBvYmplY3RzIGFyZSB0byBmcmVlLgogICovCi12b2lkIHBlcmNwdV9mcmVlKHZvaWQgKl9fcGRhdGEpCit2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKl9fcGRhdGEpCiB7CiAJaWYgKHVubGlrZWx5KCFfX3BkYXRhKSkKIAkJcmV0dXJuOwogCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCAmY3B1X3Bvc3NpYmxlX21hcCk7CiAJa2ZyZWUoX19wZXJjcHVfZGlzZ3Vpc2UoX19wZGF0YSkpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocGVyY3B1X2ZyZWUpOworRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOwpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggOGU4NTg3NC4uYmU2OGM5NSAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC0yLDExICsyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAordm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKK30KK0VYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLnJhX3BhZ2VzCT0gVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQgLyBQQUdFX0NBQ0hFX1NJWkUsCisJLnN0YXRlCQk9IDAsCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTUFQX0NPUFksCisJLnVucGx1Z19pb19mbgk9IGRlZmF1bHRfdW5wbHVnX2lvX2ZuLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJkaV9jbGFzczsKIApAQCAtMTY2LDkgKzE3OSwyMCBAQAogCWJkaV9kZWJ1Z19pbml0KCk7CiAJcmV0dXJuIDA7CiB9Ci0KIHBvc3Rjb3JlX2luaXRjYWxsKGJkaV9jbGFzc19pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgZGVmYXVsdF9iZGlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKKwlpZiAoIWVycikKKwkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7CisKKwlyZXR1cm4gZXJyOworfQorc3Vic3lzX2luaXRjYWxsKGRlZmF1bHRfYmRpX2luaXQpOworCiBpbnQgYmRpX3JlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CmRpZmYgLS1naXQgYS9tbS9ib290bWVtLmMgYi9tbS9ib290bWVtLmMKaW5kZXggNTFhMGNjZi4uZGFmOTI3MSAxMDA2NDQKLS0tIGEvbW0vYm9vdG1lbS5jCisrKyBiL21tL2Jvb3RtZW0uYwpAQCAtMzgyLDcgKzM4Miw2IEBACiAJcmV0dXJuIG1hcmtfYm9vdG1lbV9ub2RlKHBnZGF0LT5iZGF0YSwgc3RhcnQsIGVuZCwgMSwgZmxhZ3MpOwogfQogCi0jaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCiAvKioKICAqIHJlc2VydmVfYm9vdG1lbSAtIG1hcmsgYSBwYWdlIHJhbmdlIGFzIHVzYWJsZQogICogQGFkZHI6IHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHJhbmdlCkBAIC00MDMsNyArNDAyLDYgQEAKIAogCXJldHVybiBtYXJrX2Jvb3RtZW0oc3RhcnQsIGVuZCwgMSwgZmxhZ3MpOwogfQotI2VuZGlmIC8qICFDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERSAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGlnbl9pZHgoc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGEsIHVuc2lnbmVkIGxvbmcgaWR4LAogCQkJdW5zaWduZWQgbG9uZyBzdGVwKQpAQCAtNDI5LDggKzQyNyw4IEBACiB9CiAKIHN0YXRpYyB2b2lkICogX19pbml0IGFsbG9jX2Jvb3RtZW1fY29yZShzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YSwKLQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkJdW5zaWduZWQgbG9uZyBnb2FsLCB1bnNpZ25lZCBsb25nIGxpbWl0KQorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCwgdW5zaWduZWQgbG9uZyBsaW1pdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZhbGxiYWNrID0gMDsKIAl1bnNpZ25lZCBsb25nIG1pbiwgbWF4LCBzdGFydCwgc2lkeCwgbWlkeCwgc3RlcDsKQEAgLTUzMCwxNyArNTI4LDM0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkICogX19pbml0IGFsbG9jX2FyY2hfcHJlZmVycmVkX2Jvb3RtZW0oYm9vdG1lbV9kYXRhX3QgKmJkYXRhLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCwgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3sKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU0KKwlib290bWVtX2RhdGFfdCAqcF9iZGF0YTsKKworCXBfYmRhdGEgPSBib290bWVtX2FyY2hfcHJlZmVycmVkX25vZGUoYmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CisJaWYgKHBfYmRhdGEpCisJCXJldHVybiBhbGxvY19ib290bWVtX2NvcmUocF9iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIGxpbWl0KTsKKyNlbmRpZgorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCAqIF9faW5pdCBfX19hbGxvY19ib290bWVtX25vcGFuaWModW5zaWduZWQgbG9uZyBzaXplLAogCQkJCQl1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCQl1bnNpZ25lZCBsb25nIGdvYWwsCiAJCQkJCXVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CiAJYm9vdG1lbV9kYXRhX3QgKmJkYXRhOworCXZvaWQgKnJlZ2lvbjsKIAogcmVzdGFydDoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkgewotCQl2b2lkICpyZWdpb247CisJcmVnaW9uID0gYWxsb2NfYXJjaF9wcmVmZXJyZWRfYm9vdG1lbShOVUxMLCBzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOworCWlmIChyZWdpb24pCisJCXJldHVybiByZWdpb247CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkgewogCQlpZiAoZ29hbCAmJiBiZGF0YS0+bm9kZV9sb3dfcGZuIDw9IFBGTl9ET1dOKGdvYWwpKQogCQkJY29udGludWU7CiAJCWlmIChsaW1pdCAmJiBiZGF0YS0+bm9kZV9taW5fcGZuID49IFBGTl9ET1dOKGxpbWl0KSkKQEAgLTYxOCw2ICs2MzMsMTAgQEAKIHsKIAl2b2lkICpwdHI7CiAKKwlwdHIgPSBhbGxvY19hcmNoX3ByZWZlcnJlZF9ib290bWVtKGJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOworCWlmIChwdHIpCisJCXJldHVybiBwdHI7CisKIAlwdHIgPSBhbGxvY19ib290bWVtX2NvcmUoYmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CiAJaWYgKHB0cikKIAkJcmV0dXJuIHB0cjsKQEAgLTY3NCw2ICs2OTMsMTAgQEAKIHsKIAl2b2lkICpwdHI7CiAKKwlwdHIgPSBhbGxvY19hcmNoX3ByZWZlcnJlZF9ib290bWVtKHBnZGF0LT5iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIDApOworCWlmIChwdHIpCisJCXJldHVybiBwdHI7CisKIAlwdHIgPSBhbGxvY19ib290bWVtX2NvcmUocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgMCk7CiAJaWYgKHB0cikKIAkJcmV0dXJuIHB0cjsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAyM2FjZWZlLi4xMjZkMzk3IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0xODIzLDcgKzE4MjMsNyBAQAogCQlpbnQgY29weSA9IG1pbihieXRlcywgaW92LT5pb3ZfbGVuIC0gYmFzZSk7CiAKIAkJYmFzZSA9IDA7Ci0JCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodmFkZHIsIGJ1ZiwgY29weSk7CisJCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyLCBidWYsIGNvcHkpOwogCQljb3BpZWQgKz0gY29weTsKIAkJYnl0ZXMgLT0gY29weTsKIAkJdmFkZHIgKz0gY29weTsKQEAgLTE4NTEsOCArMTg1MSw3IEBACiAJaWYgKGxpa2VseShpLT5ucl9zZWdzID09IDEpKSB7CiAJCWludCBsZWZ0OwogCQljaGFyIF9fdXNlciAqYnVmID0gaS0+aW92LT5pb3ZfYmFzZSArIGktPmlvdl9vZmZzZXQ7Ci0JCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUoa2FkZHIgKyBvZmZzZXQsCi0JCQkJCQkJYnVmLCBieXRlcyk7CisJCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKGthZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTsKIAkJY29waWVkID0gYnl0ZXMgLSBsZWZ0OwogCX0gZWxzZSB7CiAJCWNvcGllZCA9IF9faW92ZWNfY29weV9mcm9tX3VzZXJfaW5hdG9taWMoa2FkZHIgKyBvZmZzZXQsCkBAIC0xODgwLDcgKzE4NzksNyBAQAogCWlmIChsaWtlbHkoaS0+bnJfc2VncyA9PSAxKSkgewogCQlpbnQgbGVmdDsKIAkJY2hhciBfX3VzZXIgKmJ1ZiA9IGktPmlvdi0+aW92X2Jhc2UgKyBpLT5pb3Zfb2Zmc2V0OwotCQlsZWZ0ID0gX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKGthZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTsKKwkJbGVmdCA9IF9fY29weV9mcm9tX3VzZXIoa2FkZHIgKyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpOwogCQljb3BpZWQgPSBieXRlcyAtIGxlZnQ7CiAJfSBlbHNlIHsKIAkJY29waWVkID0gX19pb3ZlY19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhrYWRkciArIG9mZnNldCwKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCBiMzZiODNiLi45MTAxOTgwIDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC02Nyw2ICs2NywyNSBAQAogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocGttYXBfbWFwX3dhaXQpOwogCisvKgorICogTW9zdCBhcmNoaXRlY3R1cmVzIGhhdmUgbm8gdXNlIGZvciBrbWFwX2hpZ2hfZ2V0KCksIHNvIGxldCdzIGFic3RyYWN0CisgKiB0aGUgZGlzYWJsaW5nIG9mIElSUSBvdXQgb2YgdGhlIGxvY2tpbmcgaW4gdGhhdCBjYXNlIHRvIHNhdmUgb24gYQorICogcG90ZW50aWFsIHVzZWxlc3Mgb3ZlcmhlYWQuCisgKi8KKyNpZmRlZiBBUkNIX05FRURTX0tNQVBfSElHSF9HRVQKKyNkZWZpbmUgbG9ja19rbWFwKCkgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgma21hcF9sb2NrKQorI2RlZmluZSB1bmxvY2tfa21hcCgpICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJmttYXBfbG9jaykKKyNkZWZpbmUgbG9ja19rbWFwX2FueShmbGFncykgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmttYXBfbG9jaywgZmxhZ3MpCisjZGVmaW5lIHVubG9ja19rbWFwX2FueShmbGFncykgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmttYXBfbG9jaywgZmxhZ3MpCisjZWxzZQorI2RlZmluZSBsb2NrX2ttYXAoKSAgICAgICAgICAgICBzcGluX2xvY2soJmttYXBfbG9jaykKKyNkZWZpbmUgdW5sb2NrX2ttYXAoKSAgICAgICAgICAgc3Bpbl91bmxvY2soJmttYXBfbG9jaykKKyNkZWZpbmUgbG9ja19rbWFwX2FueShmbGFncykgICAgXAorCQlkbyB7IHNwaW5fbG9jaygma21hcF9sb2NrKTsgKHZvaWQpKGZsYWdzKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5sb2NrX2ttYXBfYW55KGZsYWdzKSAgXAorCQlkbyB7IHNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOyAodm9pZCkoZmxhZ3MpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF96ZXJvX3BrbWFwcyh2b2lkKQogewogCWludCBpOwpAQCAtMTEzLDkgKzEzMiw5IEBACiAgKi8KIHZvaWQga21hcF9mbHVzaF91bnVzZWQodm9pZCkKIHsKLQlzcGluX2xvY2soJmttYXBfbG9jayk7CisJbG9ja19rbWFwKCk7CiAJZmx1c2hfYWxsX3plcm9fcGttYXBzKCk7Ci0Jc3Bpbl91bmxvY2soJmttYXBfbG9jayk7CisJdW5sb2NrX2ttYXAoKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1hcF9uZXdfdmlydHVhbChzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTE0NSwxMCArMTY0LDEwIEBACiAKIAkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQkJYWRkX3dhaXRfcXVldWUoJnBrbWFwX21hcF93YWl0LCAmd2FpdCk7Ci0JCQlzcGluX3VubG9jaygma21hcF9sb2NrKTsKKwkJCXVubG9ja19rbWFwKCk7CiAJCQlzY2hlZHVsZSgpOwogCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBrbWFwX21hcF93YWl0LCAmd2FpdCk7Ci0JCQlzcGluX2xvY2soJmttYXBfbG9jayk7CisJCQlsb2NrX2ttYXAoKTsKIAogCQkJLyogU29tZWJvZHkgZWxzZSBtaWdodCBoYXZlIG1hcHBlZCBpdCB3aGlsZSB3ZSBzbGVwdCAqLwogCQkJaWYgKHBhZ2VfYWRkcmVzcyhwYWdlKSkKQEAgLTE4NCwyOSArMjAzLDU5IEBACiAJICogRm9yIGhpZ2htZW0gcGFnZXMsIHdlIGNhbid0IHRydXN0ICJ2aXJ0dWFsIiB1bnRpbAogCSAqIGFmdGVyIHdlIGhhdmUgdGhlIGxvY2suCiAJICovCi0Jc3Bpbl9sb2NrKCZrbWFwX2xvY2spOworCWxvY2tfa21hcCgpOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWlmICghdmFkZHIpCiAJCXZhZGRyID0gbWFwX25ld192aXJ0dWFsKHBhZ2UpOwogCXBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0rKzsKIAlCVUdfT04ocGttYXBfY291bnRbUEtNQVBfTlIodmFkZHIpXSA8IDIpOwotCXNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOworCXVubG9ja19rbWFwKCk7CiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CiB9CiAKIEVYUE9SVF9TWU1CT0woa21hcF9oaWdoKTsKIAorI2lmZGVmIEFSQ0hfTkVFRFNfS01BUF9ISUdIX0dFVAorLyoqCisgKiBrbWFwX2hpZ2hfZ2V0IC0gcGluIGEgaGlnaG1lbSBwYWdlIGludG8gbWVtb3J5CisgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHBpbgorICoKKyAqIFJldHVybnMgdGhlIHBhZ2UncyBjdXJyZW50IHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MsIG9yIE5VTEwgaWYgbm8gbWFwcGluZworICogZXhpc3RzLiAgV2hlbiBhbmQgb25seSB3aGVuIGEgbm9uIG51bGwgYWRkcmVzcyBpcyByZXR1cm5lZCB0aGVuIGEKKyAqIG1hdGNoaW5nIGNhbGwgdG8ga3VubWFwX2hpZ2goKSBpcyBuZWNlc3NhcnkuCisgKgorICogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCisgKi8KK3ZvaWQgKmttYXBfaGlnaF9nZXQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciwgZmxhZ3M7CisKKwlsb2NrX2ttYXBfYW55KGZsYWdzKTsKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlpZiAodmFkZHIpIHsKKwkJQlVHX09OKHBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0gPCAxKTsKKwkJcGttYXBfY291bnRbUEtNQVBfTlIodmFkZHIpXSsrOworCX0KKwl1bmxvY2tfa21hcF9hbnkoZmxhZ3MpOworCXJldHVybiAodm9pZCopIHZhZGRyOworfQorI2VuZGlmCisKIC8qKgogICoga3VubWFwX2hpZ2ggLSBtYXAgYSBoaWdobWVtIHBhZ2UgaW50byBtZW1vcnkKICAqIEBwYWdlOiAmc3RydWN0IHBhZ2UgdG8gdW5tYXAKKyAqCisgKiBJZiBBUkNIX05FRURTX0tNQVBfSElHSF9HRVQgaXMgbm90IGRlZmluZWQgdGhlbiB0aGlzIG1heSBiZSBjYWxsZWQKKyAqIG9ubHkgZnJvbSB1c2VyIGNvbnRleHQuCiAgKi8KIHZvaWQga3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkcjsKIAl1bnNpZ25lZCBsb25nIG5yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5lZWRfd2FrZXVwOwogCi0Jc3Bpbl9sb2NrKCZrbWFwX2xvY2spOworCWxvY2tfa21hcF9hbnkoZmxhZ3MpOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwogCUJVR19PTighdmFkZHIpOwogCW5yID0gUEtNQVBfTlIodmFkZHIpOwpAQCAtMjMyLDcgKzI4MSw3IEBACiAJCSAqLwogCQluZWVkX3dha2V1cCA9IHdhaXRxdWV1ZV9hY3RpdmUoJnBrbWFwX21hcF93YWl0KTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmttYXBfbG9jayk7CisJdW5sb2NrX2ttYXBfYW55KGZsYWdzKTsKIAogCS8qIGRvIHdha2UtdXAsIGlmIG5lZWRlZCwgcmFjZS1mcmVlIG91dHNpZGUgb2YgdGhlIHNwaW4gbG9jayAqLwogCWlmIChuZWVkX3dha2V1cCkKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAwMGNlZDNlLi4xYWJiOTE4IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNDksNiArMTA1MCw5IEBACiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX21tYXAoZmlsZSwgcmVxcHJvdCwgcHJvdCwgZmxhZ3MsIGFkZHIsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCWVycm9yID0gaW1hX2ZpbGVfbW1hcChmaWxlLCBwcm90KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXJldHVybiBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIGZsYWdzLCB2bV9mbGFncywgcGdvZmYpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNzRkYzU3Yy4uNDBjYTdjZCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC02Niw3ICs2Niw3IEBACiAvKgogICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSA1OworaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSAxMDsKIAogLyoKICAqIGRpcnR5X2JhY2tncm91bmRfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVuY3Rpb24gb2YKQEAgLTgzLDcgKzgzLDcgQEAKIC8qCiAgKiBUaGUgZ2VuZXJhdG9yIG9mIGRpcnR5IGRhdGEgc3RhcnRzIHdyaXRlYmFjayBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IHZtX2RpcnR5X3JhdGlvID0gMTA7CitpbnQgdm1fZGlydHlfcmF0aW8gPSAyMDsKIAogLyoKICAqIHZtX2RpcnR5X2J5dGVzIHN0YXJ0cyBhdCAwIChkaXNhYmxlZCkgc28gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uIG9mCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTVkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9wZXJjcHUuYwpAQCAtMCwwICsxLDEzMjYgQEAKKy8qCisgKiBsaW51eC9tbS9wZXJjcHUuYyAtIHBlcmNwdSBtZW1vcnkgYWxsb2NhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5CQlTVVNFIExpbnV4IFByb2R1Y3RzIEdtYkgKKyAqIENvcHlyaWdodCAoQykgMjAwOQkJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICogVGhpcyBpcyBwZXJjcHUgYWxsb2NhdG9yIHdoaWNoIGNhbiBoYW5kbGUgYm90aCBzdGF0aWMgYW5kIGR5bmFtaWMKKyAqIGFyZWFzLiAgUGVyY3B1IGFyZWFzIGFyZSBhbGxvY2F0ZWQgaW4gY2h1bmtzIGluIHZtYWxsb2MgYXJlYS4gIEVhY2gKKyAqIGNodW5rIGlzIGNvbnNpc3RlZCBvZiBudW1fcG9zc2libGVfY3B1cygpIHVuaXRzIGFuZCB0aGUgZmlyc3QgY2h1bmsKKyAqIGlzIHVzZWQgZm9yIHN0YXRpYyBwZXJjcHUgdmFyaWFibGVzIGluIHRoZSBrZXJuZWwgaW1hZ2UgKHNwZWNpYWwKKyAqIGJvb3QgdGltZSBhbGxvYy9pbml0IGhhbmRsaW5nIG5lY2Vzc2FyeSBhcyB0aGVzZSBhcmVhcyBuZWVkIHRvIGJlCisgKiBicm91Z2h0IHVwIGJlZm9yZSBhbGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBydW5uaW5nKS4gIFVuaXQgZ3Jvd3MgYXMKKyAqIG5lY2Vzc2FyeSBhbmQgYWxsIHVuaXRzIGdyb3cgb3Igc2hyaW5rIGluIHVuaXNvbi4gIFdoZW4gYSBjaHVuayBpcworICogZmlsbGVkIHVwLCBhbm90aGVyIGNodW5rIGlzIGFsbG9jYXRlZC4gIGllLiBpbiB2bWFsbG9jIGFyZWEKKyAqCisgKiAgYzAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSAgICAgICAgICAgICAgICAgICAgICAgICBjMgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgLS0tLS0tLS0tLS0tCisgKiB8IHUwIHwgdTEgfCB1MiB8IHUzIHwgICAgICAgIHwgdTAgfCB1MSB8IHUyIHwgdTMgfCAgICAgIHwgdTAgfCB1MSB8IHUKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tICAuLi4uLi4gIC0tLS0tLS0tLS0tLS0tLS0tLS0gIC4uLi4gIC0tLS0tLS0tLS0tLQorICoKKyAqIEFsbG9jYXRpb24gaXMgZG9uZSBpbiBvZmZzZXQtc2l6ZSBhcmVhcyBvZiBzaW5nbGUgdW5pdCBzcGFjZS4gIEllLAorICogYW4gYXJlYSBvZiA1MTIgYnl0ZXMgYXQgNmsgaW4gYzEgb2NjdXBpZXMgNTEyIGJ5dGVzIGF0IDZrIG9mIGMxOnUwLAorICogYzE6dTEsIGMxOnUyIGFuZCBjMTp1My4gIFBlcmNwdSBhY2Nlc3MgY2FuIGJlIGRvbmUgYnkgY29uZmlndXJpbmcKKyAqIHBlcmNwdSBiYXNlIHJlZ2lzdGVycyBVTklUX1NJWkUgYXBhcnQuCisgKgorICogVGhlcmUgYXJlIHVzdWFsbHkgbWFueSBzbWFsbCBwZXJjcHUgYWxsb2NhdGlvbnMgbWFueSBvZiB0aGVtIGFzCisgKiBzbWFsbCBhcyA0IGJ5dGVzLiAgVGhlIGFsbG9jYXRvciBvcmdhbml6ZXMgY2h1bmtzIGludG8gbGlzdHMKKyAqIGFjY29yZGluZyB0byBmcmVlIHNpemUgYW5kIHRyaWVzIHRvIGFsbG9jYXRlIGZyb20gdGhlIGZ1bGxlc3Qgb25lLgorICogRWFjaCBjaHVuayBrZWVwcyB0aGUgbWF4aW11bSBjb250aWd1b3VzIGFyZWEgc2l6ZSBoaW50IHdoaWNoIGlzCisgKiBndWFyYW50ZWVkIHRvIGJlIGVxYXVsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIGNvbnRpZ3VvdXMKKyAqIGFyZWEgaW4gdGhlIGNodW5rLiAgVGhpcyBoZWxwcyB0aGUgYWxsb2NhdG9yIG5vdCB0byBpdGVyYXRlIHRoZQorICogY2h1bmsgbWFwcyB1bm5lY2Vzc2FyaWx5LgorICoKKyAqIEFsbG9jYXRpb24gc3RhdGUgaW4gZWFjaCBjaHVuayBpcyBrZXB0IHVzaW5nIGFuIGFycmF5IG9mIGludGVnZXJzCisgKiBvbiBjaHVuay0+bWFwLiAgQSBwb3NpdGl2ZSB2YWx1ZSBpbiB0aGUgbWFwIHJlcHJlc2VudHMgYSBmcmVlCisgKiByZWdpb24gYW5kIG5lZ2F0aXZlIGFsbG9jYXRlZC4gIEFsbG9jYXRpb24gaW5zaWRlIGEgY2h1bmsgaXMgZG9uZQorICogYnkgc2Nhbm5pbmcgdGhpcyBtYXAgc2VxdWVudGlhbGx5IGFuZCBzZXJ2aW5nIHRoZSBmaXJzdCBtYXRjaGluZworICogZW50cnkuICBUaGlzIGlzIG1vc3RseSBjb3BpZWQgZnJvbSB0aGUgcGVyY3B1X21vZGFsbG9jKCkgYWxsb2NhdG9yLgorICogQ2h1bmtzIGFyZSBhbHNvIGxpbmtlZCBpbnRvIGEgcmIgdHJlZSB0byBlYXNlIGFkZHJlc3MgdG8gY2h1bmsKKyAqIG1hcHBpbmcgZHVyaW5nIGZyZWUuCisgKgorICogVG8gdXNlIHRoaXMgYWxsb2NhdG9yLCBhcmNoIGNvZGUgc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmdzLgorICoKKyAqIC0gZGVmaW5lIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBCisgKgorICogLSBkZWZpbmUgX19hZGRyX3RvX3BjcHVfcHRyKCkgYW5kIF9fcGNwdV9wdHJfdG9fYWRkcigpIHRvIHRyYW5zbGF0ZQorICogICByZWd1bGFyIGFkZHJlc3MgdG8gcGVyY3B1IHBvaW50ZXIgYW5kIGJhY2sgaWYgdGhleSBuZWVkIHRvIGJlCisgKiAgIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0CisgKgorICogLSB1c2UgcGNwdV9zZXR1cF9maXJzdF9jaHVuaygpIGR1cmluZyBwZXJjcHUgYXJlYSBpbml0aWFsaXphdGlvbiB0bworICogICBzZXR1cCB0aGUgZmlyc3QgY2h1bmsgY29udGFpbmluZyB0aGUga2VybmVsIHN0YXRpYyBwZXJjcHUgYXJlYQorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjZGVmaW5lIFBDUFVfU0xPVF9CQVNFX1NISUZUCQk1CS8qIDEtMzEgc2hhcmVzIHRoZSBzYW1lIHNsb3QgKi8KKyNkZWZpbmUgUENQVV9ERkxfTUFQX0FMTE9DCQkxNgkvKiBzdGFydCBhIG1hcCB3aXRoIDE2IGVudHMgKi8KKworLyogZGVmYXVsdCBhZGRyIDwtPiBwY3B1X3B0ciBtYXBwaW5nLCBvdmVycmlkZSBpbiBhc20vcGVyY3B1LmggaWYgbmVjZXNzYXJ5ICovCisjaWZuZGVmIF9fYWRkcl90b19wY3B1X3B0cgorI2RlZmluZSBfX2FkZHJfdG9fcGNwdV9wdHIoYWRkcikJCQkJCVwKKwkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYWRkcikgLSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcglcCisJCSArICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCkKKyNlbmRpZgorI2lmbmRlZiBfX3BjcHVfcHRyX3RvX2FkZHIKKyNkZWZpbmUgX19wY3B1X3B0cl90b19hZGRyKHB0cikJCQkJCQlcCisJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgKyAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcglcCisJCSAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCkKKyNlbmRpZgorCitzdHJ1Y3QgcGNwdV9jaHVuayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogbGlua2VkIHRvIHBjcHVfc2xvdCBsaXN0cyAqLworCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwkvKiBrZXkgaXMgY2h1bmstPnZtLT5hZGRyICovCisJaW50CQkJZnJlZV9zaXplOwkvKiBmcmVlIGJ5dGVzIGluIHRoZSBjaHVuayAqLworCWludAkJCWNvbnRpZ19oaW50OwkvKiBtYXggY29udGlndW91cyBzaXplIGhpbnQgKi8KKwlzdHJ1Y3Qgdm1fc3RydWN0CSp2bTsJCS8qIG1hcHBlZCB2bWFsbG9jIHJlZ2lvbiAqLworCWludAkJCW1hcF91c2VkOwkvKiAjIG9mIG1hcCBlbnRyaWVzIHVzZWQgKi8KKwlpbnQJCQltYXBfYWxsb2M7CS8qICMgb2YgbWFwIGVudHJpZXMgYWxsb2NhdGVkICovCisJaW50CQkJKm1hcDsJCS8qIGFsbG9jYXRpb24gbWFwICovCisJYm9vbAkJCWltbXV0YWJsZTsJLyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqLworCXN0cnVjdCBwYWdlCQkqKnBhZ2U7CQkvKiBwb2ludHMgdG8gcGFnZSBhcnJheSAqLworCXN0cnVjdCBwYWdlCQkqcGFnZV9hcltdOwkvKiAjY3B1cyAqIFVOSVRfUEFHRVMgKi8KK307CisKK3N0YXRpYyBpbnQgcGNwdV91bml0X3BhZ2VzIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IHBjcHVfdW5pdF9zaXplIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IHBjcHVfY2h1bmtfc2l6ZSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGludCBwY3B1X25yX3Nsb3RzIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc2l6ZV90IHBjcHVfY2h1bmtfc3RydWN0X3NpemUgX19yZWFkX21vc3RseTsKKworLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNodW5rIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBrZXJuZWwgc3RhdGljIGFyZWEgKi8KK3ZvaWQgKnBjcHVfYmFzZV9hZGRyIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChwY3B1X2Jhc2VfYWRkcik7CisKKy8qIG9wdGlvbmFsIHJlc2VydmVkIGNodW5rLCBvbmx5IGFjY2Vzc2libGUgZm9yIHJlc2VydmVkIGFsbG9jYXRpb25zICovCitzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfcmVzZXJ2ZWRfY2h1bms7CisvKiBvZmZzZXQgbGltaXQgb2YgdGhlIHJlc2VydmVkIGNodW5rICovCitzdGF0aWMgaW50IHBjcHVfcmVzZXJ2ZWRfY2h1bmtfbGltaXQ7CisKKy8qCisgKiBTeW5jaHJvbml6YXRpb24gcnVsZXMuCisgKgorICogVGhlcmUgYXJlIHR3byBsb2NrcyAtIHBjcHVfYWxsb2NfbXV0ZXggYW5kIHBjcHVfbG9jay4gIFRoZSBmb3JtZXIKKyAqIHByb3RlY3RzIGFsbG9jYXRpb24vcmVjbGFpbSBwYXRocywgY2h1bmtzIGFuZCBjaHVuay0+cGFnZSBhcnJheXMuCisgKiBUaGUgbGF0dGVyIGlzIGEgc3BpbmxvY2sgYW5kIHByb3RlY3RzIHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMgLQorICogY2h1bmsgc2xvdHMsIHJidHJlZSwgY2h1bmtzIGFuZCBhcmVhIG1hcHMgaW4gY2h1bmtzLgorICoKKyAqIER1cmluZyBhbGxvY2F0aW9uLCBwY3B1X2FsbG9jX211dGV4IGlzIGtlcHQgbG9ja2VkIGFsbCB0aGUgdGltZSBhbmQKKyAqIHBjcHVfbG9jayBpcyBncmFiYmVkIGFuZCByZWxlYXNlZCBhcyBuZWNlc3NhcnkuICBBbGwgYWN0dWFsIG1lbW9yeQorICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4KKyAqCisgKiBGcmVlIHBhdGggYWNjZXNzZXMgYW5kIGFsdGVycyBvbmx5IHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMsIHNvIGl0CisgKiBjYW4gYmUgc2FmZWx5IGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LiAgV2hlbiBtZW1vcnkgbmVlZHMgdG8gYmUKKyAqIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0sIGZyZWUgcGF0aCBzY2hlZHVsZXMgcmVjbGFpbV93b3JrIHdoaWNoCisgKiBncmFicyBib3RoIHBjcHVfYWxsb2NfbXV0ZXggYW5kIHBjcHVfbG9jaywgdW5saW5rcyBjaHVua3MgdG8gYmUKKyAqIHJlY2xhaW1lZCwgcmVsZWFzZSBib3RoIGxvY2tzIGFuZCBmcmVlcyB0aGUgY2h1bmtzLiAgTm90ZSB0aGF0IGl0J3MKKyAqIG5lY2Vzc2FyeSB0byBncmFiIGJvdGggbG9ja3MgdG8gcmVtb3ZlIGEgY2h1bmsgZnJvbSBjaXJjdWxhdGlvbiBhcworICogYWxsb2NhdGlvbiBwYXRoIG1pZ2h0IGJlIHJlZmVyZW5jaW5nIHRoZSBjaHVuayB3aXRoIG9ubHkKKyAqIHBjcHVfYWxsb2NfbXV0ZXggbG9ja2VkLgorICovCitzdGF0aWMgREVGSU5FX01VVEVYKHBjcHVfYWxsb2NfbXV0ZXgpOwkvKiBwcm90ZWN0cyB3aG9sZSBhbGxvYyBhbmQgcmVjbGFpbSAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhwY3B1X2xvY2spOwkvKiBwcm90ZWN0cyBpbmRleCBkYXRhIHN0cnVjdHVyZXMgKi8KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnBjcHVfc2xvdCBfX3JlYWRfbW9zdGx5OyAvKiBjaHVuayBsaXN0IHNsb3RzICovCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgcGNwdV9hZGRyX3Jvb3QgPSBSQl9ST09UOwkvKiBjaHVua3MgYnkgYWRkcmVzcyAqLworCisvKiByZWNsYWltIHdvcmsgdG8gcmVsZWFzZSBmdWxseSBmcmVlIGNodW5rcywgc2NoZWR1bGVkIGZyb20gZnJlZSBwYXRoICovCitzdGF0aWMgdm9pZCBwY3B1X3JlY2xhaW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX1dPUksocGNwdV9yZWNsYWltX3dvcmssIHBjcHVfcmVjbGFpbSk7CisKK3N0YXRpYyBpbnQgX19wY3B1X3NpemVfdG9fc2xvdChpbnQgc2l6ZSkKK3sKKwlpbnQgaGlnaGJpdCA9IGZscyhzaXplKTsJLyogc2l6ZSBpcyBpbiBieXRlcyAqLworCXJldHVybiBtYXgoaGlnaGJpdCAtIFBDUFVfU0xPVF9CQVNFX1NISUZUICsgMiwgMSk7Cit9CisKK3N0YXRpYyBpbnQgcGNwdV9zaXplX3RvX3Nsb3QoaW50IHNpemUpCit7CisJaWYgKHNpemUgPT0gcGNwdV91bml0X3NpemUpCisJCXJldHVybiBwY3B1X25yX3Nsb3RzIC0gMTsKKwlyZXR1cm4gX19wY3B1X3NpemVfdG9fc2xvdChzaXplKTsKK30KKworc3RhdGljIGludCBwY3B1X2NodW5rX3Nsb3QoY29uc3Qgc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQoreworCWlmIChjaHVuay0+ZnJlZV9zaXplIDwgc2l6ZW9mKGludCkgfHwgY2h1bmstPmNvbnRpZ19oaW50IDwgc2l6ZW9mKGludCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHBjcHVfc2l6ZV90b19zbG90KGNodW5rLT5mcmVlX3NpemUpOworfQorCitzdGF0aWMgaW50IHBjcHVfcGFnZV9pZHgodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQoreworCXJldHVybiBjcHUgKiBwY3B1X3VuaXRfcGFnZXMgKyBwYWdlX2lkeDsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICoqcGNwdV9jaHVua19wYWdlcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQoreworCXJldHVybiAmY2h1bmstPnBhZ2VbcGNwdV9wYWdlX2lkeChjcHUsIHBhZ2VfaWR4KV07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjcHVfY2h1bmtfYWRkcihzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1LCBpbnQgcGFnZV9pZHgpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWNodW5rLT52bS0+YWRkciArCisJCShwY3B1X3BhZ2VfaWR4KGNwdSwgcGFnZV9pZHgpIDw8IFBBR0VfU0hJRlQpOworfQorCitzdGF0aWMgYm9vbCBwY3B1X2NodW5rX3BhZ2Vfb2NjdXBpZWQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJCSAgICAgaW50IHBhZ2VfaWR4KQoreworCXJldHVybiAqcGNwdV9jaHVua19wYWdlcChjaHVuaywgMCwgcGFnZV9pZHgpICE9IE5VTEw7Cit9CisKKy8qKgorICogcGNwdV9tZW1fYWxsb2MgLSBhbGxvY2F0ZSBtZW1vcnkKKyAqIEBzaXplOiBieXRlcyB0byBhbGxvY2F0ZQorICoKKyAqIEFsbG9jYXRlIEBzaXplIGJ5dGVzLiAgSWYgQHNpemUgaXMgc21hbGxlciB0aGFuIFBBR0VfU0laRSwKKyAqIGt6YWxsb2MoKSBpcyB1c2VkOyBvdGhlcndpc2UsIHZtYWxsb2MoKSBpcyB1c2VkLiAgVGhlIHJldHVybmVkCisgKiBtZW1vcnkgaXMgYWx3YXlzIHplcm9lZC4KKyAqCisgKiBDT05URVhUOgorICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQgKnBjcHVfbWVtX2FsbG9jKHNpemVfdCBzaXplKQoreworCWlmIChzaXplIDw9IFBBR0VfU0laRSkKKwkJcmV0dXJuIGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZWxzZSB7CisJCXZvaWQgKnB0ciA9IHZtYWxsb2Moc2l6ZSk7CisJCWlmIChwdHIpCisJCQltZW1zZXQocHRyLCAwLCBzaXplKTsKKwkJcmV0dXJuIHB0cjsKKwl9Cit9CisKKy8qKgorICogcGNwdV9tZW1fZnJlZSAtIGZyZWUgbWVtb3J5CisgKiBAcHRyOiBtZW1vcnkgdG8gZnJlZQorICogQHNpemU6IHNpemUgb2YgdGhlIGFyZWEKKyAqCisgKiBGcmVlIEBwdHIuICBAcHRyIHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIHVzaW5nIHBjcHVfbWVtX2FsbG9jKCkuCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfbWVtX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCisJCWtmcmVlKHB0cik7CisJZWxzZQorCQl2ZnJlZShwdHIpOworfQorCisvKioKKyAqIHBjcHVfY2h1bmtfcmVsb2NhdGUgLSBwdXQgY2h1bmsgaW4gdGhlIGFwcHJvcHJpYXRlIGNodW5rIHNsb3QKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBvc2xvdDogdGhlIHByZXZpb3VzIHNsb3QgaXQgd2FzIG9uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYW4gYWxsb2NhdGlvbiBvciBmcmVlIGNoYW5nZWQgQGNodW5rLgorICogTmV3IHNsb3QgYWNjb3JkaW5nIHRvIHRoZSBjaGFuZ2VkIHN0YXRlIGlzIGRldGVybWluZWQgYW5kIEBjaHVuayBpcworICogbW92ZWQgdG8gdGhlIHNsb3QuICBOb3RlIHRoYXQgdGhlIHJlc2VydmVkIGNodW5rIGlzIG5ldmVyIHB1dCBvbgorICogY2h1bmsgc2xvdHMuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfbG9jay4KKyAqLworc3RhdGljIHZvaWQgcGNwdV9jaHVua19yZWxvY2F0ZShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvc2xvdCkKK3sKKwlpbnQgbnNsb3QgPSBwY3B1X2NodW5rX3Nsb3QoY2h1bmspOworCisJaWYgKGNodW5rICE9IHBjcHVfcmVzZXJ2ZWRfY2h1bmsgJiYgb3Nsb3QgIT0gbnNsb3QpIHsKKwkJaWYgKG9zbG90IDwgbnNsb3QpCisJCQlsaXN0X21vdmUoJmNodW5rLT5saXN0LCAmcGNwdV9zbG90W25zbG90XSk7CisJCWVsc2UKKwkJCWxpc3RfbW92ZV90YWlsKCZjaHVuay0+bGlzdCwgJnBjcHVfc2xvdFtuc2xvdF0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICoqcGNwdV9jaHVua19yYl9zZWFyY2godm9pZCAqYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgcmJfbm9kZSAqKnBhcmVudHApCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnBjcHVfYWRkcl9yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQljaHVuayA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHBjcHVfY2h1bmssIHJiX25vZGUpOworCisJCWlmIChhZGRyIDwgY2h1bmstPnZtLT5hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gY2h1bmstPnZtLT5hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKHBhcmVudHApCisJCSpwYXJlbnRwID0gcGFyZW50OworCXJldHVybiBwOworfQorCisvKioKKyAqIHBjcHVfY2h1bmtfYWRkcl9zZWFyY2ggLSBzZWFyY2ggZm9yIGNodW5rIGNvbnRhaW5pbmcgc3BlY2lmaWVkIGFkZHJlc3MKKyAqIEBhZGRyOiBhZGRyZXNzIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBMb29rIGZvciBjaHVuayB3aGljaCBtaWdodCBjb250YWluIEBhZGRyLiAgTW9yZSBzcGVjaWZpY2FsbHksIGl0CisgKiBzZWFyY2hzIGZvciB0aGUgY2h1bmsgd2l0aCB0aGUgaGlnaGVzdCBzdGFydCBhZGRyZXNzIHdoaWNoIGlzbid0CisgKiBiZXlvbmQgQGFkZHIuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfbG9jay4KKyAqCisgKiBSRVRVUk5TOgorICogVGhlIGFkZHJlc3Mgb2YgdGhlIGZvdW5kIGNodW5rLgorICovCitzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY2h1bmtfYWRkcl9zZWFyY2godm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiwgKnBhcmVudDsKKwlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7CisKKwkvKiBpcyBpdCBpbiB0aGUgcmVzZXJ2ZWQgY2h1bms/ICovCisJaWYgKHBjcHVfcmVzZXJ2ZWRfY2h1bmspIHsKKwkJdm9pZCAqc3RhcnQgPSBwY3B1X3Jlc2VydmVkX2NodW5rLT52bS0+YWRkcjsKKworCQlpZiAoYWRkciA+PSBzdGFydCAmJiBhZGRyIDwgc3RhcnQgKyBwY3B1X3Jlc2VydmVkX2NodW5rX2xpbWl0KQorCQkJcmV0dXJuIHBjcHVfcmVzZXJ2ZWRfY2h1bms7CisJfQorCisJLyogbmFoLi4uIHNlYXJjaCB0aGUgcmVndWxhciBvbmVzICovCisJbiA9ICpwY3B1X2NodW5rX3JiX3NlYXJjaChhZGRyLCAmcGFyZW50KTsKKwlpZiAoIW4pIHsKKwkJLyogbm8gZXhhY3RseSBtYXRjaGluZyBjaHVuaywgdGhlIHBhcmVudCBpcyB0aGUgY2xvc2VzdCAqLworCQluID0gcGFyZW50OworCQlCVUdfT04oIW4pOworCX0KKwljaHVuayA9IHJiX2VudHJ5KG4sIHN0cnVjdCBwY3B1X2NodW5rLCByYl9ub2RlKTsKKworCWlmIChhZGRyIDwgY2h1bmstPnZtLT5hZGRyKSB7CisJCS8qIHRoZSBwYXJlbnQgd2FzIHRoZSBuZXh0IG9uZSwgbG9vayBmb3IgdGhlIHByZXZpb3VzIG9uZSAqLworCQluID0gcmJfcHJldihuKTsKKwkJQlVHX09OKCFuKTsKKwkJY2h1bmsgPSByYl9lbnRyeShuLCBzdHJ1Y3QgcGNwdV9jaHVuaywgcmJfbm9kZSk7CisJfQorCisJcmV0dXJuIGNodW5rOworfQorCisvKioKKyAqIHBjcHVfY2h1bmtfYWRkcl9pbnNlcnQgLSBpbnNlcnQgY2h1bmsgaW50byBhZGRyZXNzIHJiIHRyZWUKKyAqIEBuZXc6IGNodW5rIHRvIGluc2VydAorICoKKyAqIEluc2VydCBAbmV3IGludG8gYWRkcmVzcyByYiB0cmVlLgorICoKKyAqIENPTlRFWFQ6CisgKiBwY3B1X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfY2h1bmtfYWRkcl9pbnNlcnQoc3RydWN0IHBjcHVfY2h1bmsgKm5ldykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7CisKKwlwID0gcGNwdV9jaHVua19yYl9zZWFyY2gobmV3LT52bS0+YWRkciwgJnBhcmVudCk7CisJQlVHX09OKCpwKTsKKwlyYl9saW5rX25vZGUoJm5ldy0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJm5ldy0+cmJfbm9kZSwgJnBjcHVfYWRkcl9yb290KTsKK30KKworLyoqCisgKiBwY3B1X2V4dGVuZF9hcmVhX21hcCAtIGV4dGVuZCBhcmVhIG1hcCBmb3IgYWxsb2NhdGlvbgorICogQGNodW5rOiB0YXJnZXQgY2h1bmsKKyAqCisgKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHNvIHRoYXQgaXQgY2FuIGFjY29tb2RhdGUgYW4gYWxsb2NhdGlvbi4KKyAqIEEgc2luZ2xlIGFsbG9jYXRpb24gY2FuIHNwbGl0IGFuIGFyZWEgaW50byB0aHJlZSBhcmVhcywgc28gdGhpcworICogZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IEBjaHVuay0+bWFwIGhhcyBhdCBsZWFzdCB0d28gZXh0cmEgc2xvdHMuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfYWxsb2NfbXV0ZXgsIHBjcHVfbG9jay4gIHBjcHVfbG9jayBpcyByZWxlYXNlZCBhbmQgcmVhY3F1aXJlZAorICogaWYgYXJlYSBtYXAgaXMgZXh0ZW5kZWQuCisgKgorICogUkVUVVJOUzoKKyAqIDAgaWYgbm9vcCwgMSBpZiBzdWNjZXNzZnVsbHkgZXh0ZW5kZWQsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKK3sKKwlpbnQgbmV3X2FsbG9jOworCWludCAqbmV3OworCXNpemVfdCBzaXplOworCisJLyogaGFzIGVub3VnaD8gKi8KKwlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBjaHVuay0+bWFwX3VzZWQgKyAyKQorCQlyZXR1cm4gMDsKKworCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKworCW5ld19hbGxvYyA9IFBDUFVfREZMX01BUF9BTExPQzsKKwl3aGlsZSAobmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMikKKwkJbmV3X2FsbG9jICo9IDI7CisKKwluZXcgPSBwY3B1X21lbV9hbGxvYyhuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKSk7CisJaWYgKCFuZXcpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBBY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcC4gIE9ubHkgZnJlZQorCSAqIGNvdWxkIGhhdmUgaGFwcGVuZWQgaW5iZXR3ZWVuLCBzbyBtYXBfdXNlZCBjb3VsZG4ndCBoYXZlCisJICogZ3Jvd24uCisJICovCisJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlCVUdfT04obmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMik7CisKKwlzaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKKwltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBzaXplKTsKKworCS8qCisJICogbWFwX2FsbG9jIDwgUENQVV9ERkxfTUFQX0FMTE9DIGluZGljYXRlcyB0aGF0IHRoZSBjaHVuayBpcworCSAqIG9uZSBvZiB0aGUgZmlyc3QgY2h1bmtzIGFuZCBzdGlsbCB1c2luZyBzdGF0aWMgbWFwLgorCSAqLworCWlmIChjaHVuay0+bWFwX2FsbG9jID49IFBDUFVfREZMX01BUF9BTExPQykKKwkJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBzaXplKTsKKworCWNodW5rLT5tYXBfYWxsb2MgPSBuZXdfYWxsb2M7CisJY2h1bmstPm1hcCA9IG5ldzsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY3B1X3NwbGl0X2Jsb2NrIC0gc3BsaXQgYSBtYXAgYmxvY2sKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBpOiBpbmRleCBvZiBtYXAgYmxvY2sgdG8gc3BsaXQKKyAqIEBoZWFkOiBoZWFkIHNpemUgaW4gYnl0ZXMgKGNhbiBiZSAwKQorICogQHRhaWw6IHRhaWwgc2l6ZSBpbiBieXRlcyAoY2FuIGJlIDApCisgKgorICogU3BsaXQgdGhlIEBpJ3RoIG1hcCBibG9jayBpbnRvIHR3byBvciB0aHJlZSBibG9ja3MuICBJZiBAaGVhZCBpcworICogbm9uLXplcm8sIEBoZWFkIGJ5dGVzIGJsb2NrIGlzIGluc2VydGVkIGJlZm9yZSBibG9jayBAaSBtb3ZpbmcgaXQKKyAqIHRvIEBpKzEgYW5kIHJlZHVjaW5nIGl0cyBzaXplIGJ5IEBoZWFkIGJ5dGVzLgorICoKKyAqIElmIEB0YWlsIGlzIG5vbi16ZXJvLCB0aGUgdGFyZ2V0IGJsb2NrLCB3aGljaCBjYW4gYmUgQGkgb3IgQGkrMQorICogZGVwZW5kaW5nIG9uIEBoZWFkLCBpcyByZWR1Y2VkIGJ5IEB0YWlsIGJ5dGVzIGFuZCBAdGFpbCBieXRlIGJsb2NrCisgKiBpcyBpbnNlcnRlZCBhZnRlciB0aGUgdGFyZ2V0IGJsb2NrLgorICoKKyAqIEBjaHVuay0+bWFwIG11c3QgaGF2ZSBlbm91Z2ggZnJlZSBzbG90cyB0byBhY2NvbW9kYXRlIHRoZSBzcGxpdC4KKyAqCisgKiBDT05URVhUOgorICogcGNwdV9sb2NrLgorICovCitzdGF0aWMgdm9pZCBwY3B1X3NwbGl0X2Jsb2NrKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IGksCisJCQkgICAgIGludCBoZWFkLCBpbnQgdGFpbCkKK3sKKwlpbnQgbnJfZXh0cmEgPSAhIWhlYWQgKyAhIXRhaWw7CisKKwlCVUdfT04oY2h1bmstPm1hcF9hbGxvYyA8IGNodW5rLT5tYXBfdXNlZCArIG5yX2V4dHJhKTsKKworCS8qIGluc2VydCBuZXcgc3ViYmxvY2tzICovCisJbWVtbW92ZSgmY2h1bmstPm1hcFtpICsgbnJfZXh0cmFdLCAmY2h1bmstPm1hcFtpXSwKKwkJc2l6ZW9mKGNodW5rLT5tYXBbMF0pICogKGNodW5rLT5tYXBfdXNlZCAtIGkpKTsKKwljaHVuay0+bWFwX3VzZWQgKz0gbnJfZXh0cmE7CisKKwlpZiAoaGVhZCkgeworCQljaHVuay0+bWFwW2kgKyAxXSA9IGNodW5rLT5tYXBbaV0gLSBoZWFkOworCQljaHVuay0+bWFwW2krK10gPSBoZWFkOworCX0KKwlpZiAodGFpbCkgeworCQljaHVuay0+bWFwW2krK10gLT0gdGFpbDsKKwkJY2h1bmstPm1hcFtpXSA9IHRhaWw7CisJfQorfQorCisvKioKKyAqIHBjcHVfYWxsb2NfYXJlYSAtIGFsbG9jYXRlIGFyZWEgZnJvbSBhIHBjcHVfY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBzaXplOiB3YW50ZWQgc2l6ZSBpbiBieXRlcworICogQGFsaWduOiB3YW50ZWQgYWxpZ24KKyAqCisgKiBUcnkgdG8gYWxsb2NhdGUgQHNpemUgYnl0ZXMgYXJlYSBhbGlnbmVkIGF0IEBhbGlnbiBmcm9tIEBjaHVuay4KKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgYWxsb2NhdGVzIHRoZSBvZmZzZXQuICBJdCBkb2Vzbid0CisgKiBwb3B1bGF0ZSBvciBtYXAgdGhlIGFyZWEuCisgKgorICogQGNodW5rLT5tYXAgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBmcmVlIHNsb3RzLgorICoKKyAqIENPTlRFWFQ6CisgKiBwY3B1X2xvY2suCisgKgorICogUkVUVVJOUzoKKyAqIEFsbG9jYXRlZCBvZmZzZXQgaW4gQGNodW5rIG9uIHN1Y2Nlc3MsIC0xIGlmIG5vIG1hdGNoaW5nIGFyZWEgaXMKKyAqIGZvdW5kLgorICovCitzdGF0aWMgaW50IHBjcHVfYWxsb2NfYXJlYShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBzaXplLCBpbnQgYWxpZ24pCit7CisJaW50IG9zbG90ID0gcGNwdV9jaHVua19zbG90KGNodW5rKTsKKwlpbnQgbWF4X2NvbnRpZyA9IDA7CisJaW50IGksIG9mZjsKKworCWZvciAoaSA9IDAsIG9mZiA9IDA7IGkgPCBjaHVuay0+bWFwX3VzZWQ7IG9mZiArPSBhYnMoY2h1bmstPm1hcFtpKytdKSkgeworCQlib29sIGlzX2xhc3QgPSBpICsgMSA9PSBjaHVuay0+bWFwX3VzZWQ7CisJCWludCBoZWFkLCB0YWlsOworCisJCS8qIGV4dHJhIGZvciBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgKi8KKwkJaGVhZCA9IEFMSUdOKG9mZiwgYWxpZ24pIC0gb2ZmOworCQlCVUdfT04oaSA9PSAwICYmIGhlYWQgIT0gMCk7CisKKwkJaWYgKGNodW5rLT5tYXBbaV0gPCAwKQorCQkJY29udGludWU7CisJCWlmIChjaHVuay0+bWFwW2ldIDwgaGVhZCArIHNpemUpIHsKKwkJCW1heF9jb250aWcgPSBtYXgoY2h1bmstPm1hcFtpXSwgbWF4X2NvbnRpZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIElmIGhlYWQgaXMgc21hbGwgb3IgdGhlIHByZXZpb3VzIGJsb2NrIGlzIGZyZWUsCisJCSAqIG1lcmdlJ2VtLiAgTm90ZSB0aGF0ICdzbWFsbCcgaXMgZGVmaW5lZCBhcyBzbWFsbGVyCisJCSAqIHRoYW4gc2l6ZW9mKGludCksIHdoaWNoIGlzIHZlcnkgc21hbGwgYnV0IGlzbid0IHRvbworCQkgKiB1bmNvbW1vbiBmb3IgcGVyY3B1IGFsbG9jYXRpb25zLgorCQkgKi8KKwkJaWYgKGhlYWQgJiYgKGhlYWQgPCBzaXplb2YoaW50KSB8fCBjaHVuay0+bWFwW2kgLSAxXSA+IDApKSB7CisJCQlpZiAoY2h1bmstPm1hcFtpIC0gMV0gPiAwKQorCQkJCWNodW5rLT5tYXBbaSAtIDFdICs9IGhlYWQ7CisJCQllbHNlIHsKKwkJCQljaHVuay0+bWFwW2kgLSAxXSAtPSBoZWFkOworCQkJCWNodW5rLT5mcmVlX3NpemUgLT0gaGVhZDsKKwkJCX0KKwkJCWNodW5rLT5tYXBbaV0gLT0gaGVhZDsKKwkJCW9mZiArPSBoZWFkOworCQkJaGVhZCA9IDA7CisJCX0KKworCQkvKiBpZiB0YWlsIGlzIHNtYWxsLCBqdXN0IGtlZXAgaXQgYXJvdW5kICovCisJCXRhaWwgPSBjaHVuay0+bWFwW2ldIC0gaGVhZCAtIHNpemU7CisJCWlmICh0YWlsIDwgc2l6ZW9mKGludCkpCisJCQl0YWlsID0gMDsKKworCQkvKiBzcGxpdCBpZiB3YXJyYW50ZWQgKi8KKwkJaWYgKGhlYWQgfHwgdGFpbCkgeworCQkJcGNwdV9zcGxpdF9ibG9jayhjaHVuaywgaSwgaGVhZCwgdGFpbCk7CisJCQlpZiAoaGVhZCkgeworCQkJCWkrKzsKKwkJCQlvZmYgKz0gaGVhZDsKKwkJCQltYXhfY29udGlnID0gbWF4KGNodW5rLT5tYXBbaSAtIDFdLCBtYXhfY29udGlnKTsKKwkJCX0KKwkJCWlmICh0YWlsKQorCQkJCW1heF9jb250aWcgPSBtYXgoY2h1bmstPm1hcFtpICsgMV0sIG1heF9jb250aWcpOworCQl9CisKKwkJLyogdXBkYXRlIGhpbnQgYW5kIG1hcmsgYWxsb2NhdGVkICovCisJCWlmIChpc19sYXN0KQorCQkJY2h1bmstPmNvbnRpZ19oaW50ID0gbWF4X2NvbnRpZzsgLyogZnVsbHkgc2Nhbm5lZCAqLworCQllbHNlCisJCQljaHVuay0+Y29udGlnX2hpbnQgPSBtYXgoY2h1bmstPmNvbnRpZ19oaW50LAorCQkJCQkJIG1heF9jb250aWcpOworCisJCWNodW5rLT5mcmVlX3NpemUgLT0gY2h1bmstPm1hcFtpXTsKKwkJY2h1bmstPm1hcFtpXSA9IC1jaHVuay0+bWFwW2ldOworCisJCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIG9zbG90KTsKKwkJcmV0dXJuIG9mZjsKKwl9CisKKwljaHVuay0+Y29udGlnX2hpbnQgPSBtYXhfY29udGlnOwkvKiBmdWxseSBzY2FubmVkICovCisJcGNwdV9jaHVua19yZWxvY2F0ZShjaHVuaywgb3Nsb3QpOworCisJLyogdGVsbCB0aGUgdXBwZXIgbGF5ZXIgdGhhdCB0aGlzIGNodW5rIGhhcyBubyBtYXRjaGluZyBhcmVhICovCisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIHBjcHVfZnJlZV9hcmVhIC0gZnJlZSBhcmVhIHRvIGEgcGNwdV9jaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQGZyZWVtZTogb2Zmc2V0IG9mIGFyZWEgdG8gZnJlZQorICoKKyAqIEZyZWUgYXJlYSBzdGFydGluZyBmcm9tIEBmcmVlbWUgdG8gQGNodW5rLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIG9ubHkgbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gbWFwLiAgSXQgZG9lc24ndCBkZXBvcHVsYXRlIG9yIHVubWFwCisgKiB0aGUgYXJlYS4KKyAqCisgKiBDT05URVhUOgorICogcGNwdV9sb2NrLgorICovCitzdGF0aWMgdm9pZCBwY3B1X2ZyZWVfYXJlYShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBmcmVlbWUpCit7CisJaW50IG9zbG90ID0gcGNwdV9jaHVua19zbG90KGNodW5rKTsKKwlpbnQgaSwgb2ZmOworCisJZm9yIChpID0gMCwgb2ZmID0gMDsgaSA8IGNodW5rLT5tYXBfdXNlZDsgb2ZmICs9IGFicyhjaHVuay0+bWFwW2krK10pKQorCQlpZiAob2ZmID09IGZyZWVtZSkKKwkJCWJyZWFrOworCUJVR19PTihvZmYgIT0gZnJlZW1lKTsKKwlCVUdfT04oY2h1bmstPm1hcFtpXSA+IDApOworCisJY2h1bmstPm1hcFtpXSA9IC1jaHVuay0+bWFwW2ldOworCWNodW5rLT5mcmVlX3NpemUgKz0gY2h1bmstPm1hcFtpXTsKKworCS8qIG1lcmdlIHdpdGggcHJldmlvdXM/ICovCisJaWYgKGkgPiAwICYmIGNodW5rLT5tYXBbaSAtIDFdID49IDApIHsKKwkJY2h1bmstPm1hcFtpIC0gMV0gKz0gY2h1bmstPm1hcFtpXTsKKwkJY2h1bmstPm1hcF91c2VkLS07CisJCW1lbW1vdmUoJmNodW5rLT5tYXBbaV0sICZjaHVuay0+bWFwW2kgKyAxXSwKKwkJCShjaHVuay0+bWFwX3VzZWQgLSBpKSAqIHNpemVvZihjaHVuay0+bWFwWzBdKSk7CisJCWktLTsKKwl9CisJLyogbWVyZ2Ugd2l0aCBuZXh0PyAqLworCWlmIChpICsgMSA8IGNodW5rLT5tYXBfdXNlZCAmJiBjaHVuay0+bWFwW2kgKyAxXSA+PSAwKSB7CisJCWNodW5rLT5tYXBbaV0gKz0gY2h1bmstPm1hcFtpICsgMV07CisJCWNodW5rLT5tYXBfdXNlZC0tOworCQltZW1tb3ZlKCZjaHVuay0+bWFwW2kgKyAxXSwgJmNodW5rLT5tYXBbaSArIDJdLAorCQkJKGNodW5rLT5tYXBfdXNlZCAtIChpICsgMSkpICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pKTsKKwl9CisKKwljaHVuay0+Y29udGlnX2hpbnQgPSBtYXgoY2h1bmstPm1hcFtpXSwgY2h1bmstPmNvbnRpZ19oaW50KTsKKwlwY3B1X2NodW5rX3JlbG9jYXRlKGNodW5rLCBvc2xvdCk7Cit9CisKKy8qKgorICogcGNwdV91bm1hcCAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIHVubWFwCisgKiBAcGFnZV9lbmQ6IHBhZ2UgaW5kZXggb2YgdGhlIGxhc3QgcGFnZSB0byB1bm1hcCArIDEKKyAqIEBmbHVzaDogd2hldGhlciB0byBmbHVzaCBjYWNoZSBhbmQgdGxiIG9yIG5vdAorICoKKyAqIEZvciBlYWNoIGNwdSwgdW5tYXAgcGFnZXMgW0BwYWdlX3N0YXJ0LEBwYWdlX2VuZCkgb3V0IG9mIEBjaHVuay4KKyAqIElmIEBmbHVzaCBpcyB0cnVlLCB2Y2FjaGUgaXMgZmx1c2hlZCBiZWZvcmUgdW5tYXBwaW5nIGFuZCB0bGIKKyAqIGFmdGVyLgorICovCitzdGF0aWMgdm9pZCBwY3B1X3VubWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IHBhZ2Vfc3RhcnQsIGludCBwYWdlX2VuZCwKKwkJICAgICAgIGJvb2wgZmx1c2gpCit7CisJdW5zaWduZWQgaW50IGxhc3QgPSBudW1fcG9zc2libGVfY3B1cygpIC0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJLyogdW5tYXAgbXVzdCBub3QgYmUgZG9uZSBvbiBpbW11dGFibGUgY2h1bmsgKi8KKwlXQVJOX09OKGNodW5rLT5pbW11dGFibGUpOworCisJLyoKKwkgKiBFYWNoIGZsdXNoaW5nIHRyaWFsIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgaXNzdWUgZmx1c2ggb24KKwkgKiB0aGUgd2hvbGUgcmVnaW9uIGF0IG9uY2UgcmF0aGVyIHRoYW4gZG9pbmcgaXQgZm9yIGVhY2ggY3B1LgorCSAqIFRoaXMgY291bGQgYmUgYW4gb3ZlcmtpbGwgYnV0IGlzIG1vcmUgc2NhbGFibGUuCisJICovCisJaWYgKGZsdXNoKQorCQlmbHVzaF9jYWNoZV92dW5tYXAocGNwdV9jaHVua19hZGRyKGNodW5rLCAwLCBwYWdlX3N0YXJ0KSwKKwkJCQkgICBwY3B1X2NodW5rX2FkZHIoY2h1bmssIGxhc3QsIHBhZ2VfZW5kKSk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQl1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCgKKwkJCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksCisJCQkJKHBhZ2VfZW5kIC0gcGFnZV9zdGFydCkgPDwgUEFHRV9TSElGVCk7CisKKwkvKiBkaXR0byBhcyBmbHVzaF9jYWNoZV92dW5tYXAoKSAqLworCWlmIChmbHVzaCkKKwkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShwY3B1X2NodW5rX2FkZHIoY2h1bmssIDAsIHBhZ2Vfc3RhcnQpLAorCQkJCSAgICAgICBwY3B1X2NodW5rX2FkZHIoY2h1bmssIGxhc3QsIHBhZ2VfZW5kKSk7Cit9CisKKy8qKgorICogcGNwdV9kZXBvcHVsYXRlX2NodW5rIC0gZGVwb3B1bGF0ZSBhbmQgdW5tYXAgYW4gYXJlYSBvZiBhIHBjcHVfY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgdG8gZGVwb3B1bGF0ZQorICogQG9mZjogb2Zmc2V0IHRvIHRoZSBhcmVhIHRvIGRlcG9wdWxhdGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBhcmVhIHRvIGRlcG9wdWxhdGUgaW4gYnl0ZXMKKyAqIEBmbHVzaDogd2hldGhlciB0byBmbHVzaCBjYWNoZSBhbmQgdGxiIG9yIG5vdAorICoKKyAqIEZvciBlYWNoIGNwdSwgZGVwb3B1bGF0ZSBhbmQgdW5tYXAgcGFnZXMgW0BwYWdlX3N0YXJ0LEBwYWdlX2VuZCkKKyAqIGZyb20gQGNodW5rLiAgSWYgQGZsdXNoIGlzIHRydWUsIHZjYWNoZSBpcyBmbHVzaGVkIGJlZm9yZSB1bm1hcHBpbmcKKyAqIGFuZCB0bGIgYWZ0ZXIuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfYWxsb2NfbXV0ZXguCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfZGVwb3B1bGF0ZV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIGludCBzaXplLAorCQkJCSAgYm9vbCBmbHVzaCkKK3sKKwlpbnQgcGFnZV9zdGFydCA9IFBGTl9ET1dOKG9mZik7CisJaW50IHBhZ2VfZW5kID0gUEZOX1VQKG9mZiArIHNpemUpOworCWludCB1bm1hcF9zdGFydCA9IC0xOworCWludCB1bmluaXRpYWxpemVkX3Zhcih1bm1hcF9lbmQpOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGk7CisKKwlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIDwgcGFnZV9lbmQ7IGkrKykgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwID0gcGNwdV9jaHVua19wYWdlcChjaHVuaywgY3B1LCBpKTsKKworCQkJaWYgKCEqcGFnZXApCisJCQkJY29udGludWU7CisKKwkJCV9fZnJlZV9wYWdlKCpwYWdlcCk7CisKKwkJCS8qCisJCQkgKiBJZiBpdCdzIHBhcnRpYWwgZGVwb3B1bGF0aW9uLCBpdCBtaWdodCBnZXQKKwkJCSAqIHBvcHVsYXRlZCBvciBkZXBvcHVsYXRlZCBhZ2Fpbi4gIE1hcmsgdGhlCisJCQkgKiBwYWdlIGdvbmUuCisJCQkgKi8KKwkJCSpwYWdlcCA9IE5VTEw7CisKKwkJCXVubWFwX3N0YXJ0ID0gdW5tYXBfc3RhcnQgPCAwID8gaSA6IHVubWFwX3N0YXJ0OworCQkJdW5tYXBfZW5kID0gaSArIDE7CisJCX0KKwl9CisKKwlpZiAodW5tYXBfc3RhcnQgPj0gMCkKKwkJcGNwdV91bm1hcChjaHVuaywgdW5tYXBfc3RhcnQsIHVubWFwX2VuZCwgZmx1c2gpOworfQorCisvKioKKyAqIHBjcHVfbWFwIC0gbWFwIHBhZ2VzIGludG8gYSBwY3B1X2NodW5rCisgKiBAY2h1bms6IGNodW5rIG9mIGludGVyZXN0CisgKiBAcGFnZV9zdGFydDogcGFnZSBpbmRleCBvZiB0aGUgZmlyc3QgcGFnZSB0byBtYXAKKyAqIEBwYWdlX2VuZDogcGFnZSBpbmRleCBvZiB0aGUgbGFzdCBwYWdlIHRvIG1hcCArIDEKKyAqCisgKiBGb3IgZWFjaCBjcHUsIG1hcCBwYWdlcyBbQHBhZ2Vfc3RhcnQsQHBhZ2VfZW5kKSBpbnRvIEBjaHVuay4KKyAqIHZjYWNoZSBpcyBmbHVzaGVkIGFmdGVyd2FyZHMuCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgcGFnZV9zdGFydCwgaW50IHBhZ2VfZW5kKQoreworCXVuc2lnbmVkIGludCBsYXN0ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAtIDE7CisJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgZXJyOworCisJLyogbWFwIG11c3Qgbm90IGJlIGRvbmUgb24gaW1tdXRhYmxlIGNodW5rICovCisJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJZXJyID0gbWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKAorCQkJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgY3B1LCBwYWdlX3N0YXJ0KSwKKwkJCQkocGFnZV9lbmQgLSBwYWdlX3N0YXJ0KSA8PCBQQUdFX1NISUZULAorCQkJCVBBR0VfS0VSTkVMLAorCQkJCXBjcHVfY2h1bmtfcGFnZXAoY2h1bmssIGNwdSwgcGFnZV9zdGFydCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogZmx1c2ggYXQgb25jZSwgcGxlYXNlIHJlYWQgY29tbWVudHMgaW4gcGNwdV91bm1hcCgpICovCisJZmx1c2hfY2FjaGVfdm1hcChwY3B1X2NodW5rX2FkZHIoY2h1bmssIDAsIHBhZ2Vfc3RhcnQpLAorCQkJIHBjcHVfY2h1bmtfYWRkcihjaHVuaywgbGFzdCwgcGFnZV9lbmQpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY3B1X3BvcHVsYXRlX2NodW5rIC0gcG9wdWxhdGUgYW5kIG1hcCBhbiBhcmVhIG9mIGEgcGNwdV9jaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQG9mZjogb2Zmc2V0IHRvIHRoZSBhcmVhIHRvIHBvcHVsYXRlCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYXJlYSB0byBwb3B1bGF0ZSBpbiBieXRlcworICoKKyAqIEZvciBlYWNoIGNwdSwgcG9wdWxhdGUgYW5kIG1hcCBwYWdlcyBbQHBhZ2Vfc3RhcnQsQHBhZ2VfZW5kKSBpbnRvCisgKiBAY2h1bmsuICBUaGUgYXJlYSBpcyBjbGVhcmVkIG9uIHJldHVybi4KKyAqCisgKiBDT05URVhUOgorICogcGNwdV9hbGxvY19tdXRleCwgZG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9wb3B1bGF0ZV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIGludCBzaXplKQoreworCWNvbnN0IGdmcF90IGFsbG9jX21hc2sgPSBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0NPTEQ7CisJaW50IHBhZ2Vfc3RhcnQgPSBQRk5fRE9XTihvZmYpOworCWludCBwYWdlX2VuZCA9IFBGTl9VUChvZmYgKyBzaXplKTsKKwlpbnQgbWFwX3N0YXJ0ID0gLTE7CisJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKG1hcF9lbmQpOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGk7CisKKwlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIDwgcGFnZV9lbmQ7IGkrKykgeworCQlpZiAocGNwdV9jaHVua19wYWdlX29jY3VwaWVkKGNodW5rLCBpKSkgeworCQkJaWYgKG1hcF9zdGFydCA+PSAwKSB7CisJCQkJaWYgKHBjcHVfbWFwKGNodW5rLCBtYXBfc3RhcnQsIG1hcF9lbmQpKQorCQkJCQlnb3RvIGVycjsKKwkJCQltYXBfc3RhcnQgPSAtMTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbWFwX3N0YXJ0ID0gbWFwX3N0YXJ0IDwgMCA/IGkgOiBtYXBfc3RhcnQ7CisJCW1hcF9lbmQgPSBpICsgMTsKKworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwID0gcGNwdV9jaHVua19wYWdlcChjaHVuaywgY3B1LCBpKTsKKworCQkJKnBhZ2VwID0gYWxsb2NfcGFnZXNfbm9kZShjcHVfdG9fbm9kZShjcHUpLAorCQkJCQkJICBhbGxvY19tYXNrLCAwKTsKKwkJCWlmICghKnBhZ2VwKQorCQkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKG1hcF9zdGFydCA+PSAwICYmIHBjcHVfbWFwKGNodW5rLCBtYXBfc3RhcnQsIG1hcF9lbmQpKQorCQlnb3RvIGVycjsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCW1lbXNldChjaHVuay0+dm0tPmFkZHIgKyBjcHUgKiBwY3B1X3VuaXRfc2l6ZSArIG9mZiwgMCwKKwkJICAgICAgIHNpemUpOworCisJcmV0dXJuIDA7CitlcnI6CisJLyogbGlrZWx5IHVuZGVyIGhlYXZ5IG1lbW9yeSBwcmVzc3VyZSwgZ2l2ZSBtZW1vcnkgYmFjayAqLworCXBjcHVfZGVwb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplLCB0cnVlKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wY3B1X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKK3sKKwlpZiAoIWNodW5rKQorCQlyZXR1cm47CisJaWYgKGNodW5rLT52bSkKKwkJZnJlZV92bV9hcmVhKGNodW5rLT52bSk7CisJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pKTsKKwlrZnJlZShjaHVuayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqYWxsb2NfcGNwdV9jaHVuayh2b2lkKQoreworCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKKworCWNodW5rID0ga3phbGxvYyhwY3B1X2NodW5rX3N0cnVjdF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNodW5rKQorCQlyZXR1cm4gTlVMTDsKKworCWNodW5rLT5tYXAgPSBwY3B1X21lbV9hbGxvYyhQQ1BVX0RGTF9NQVBfQUxMT0MgKiBzaXplb2YoY2h1bmstPm1hcFswXSkpOworCWNodW5rLT5tYXBfYWxsb2MgPSBQQ1BVX0RGTF9NQVBfQUxMT0M7CisJY2h1bmstPm1hcFtjaHVuay0+bWFwX3VzZWQrK10gPSBwY3B1X3VuaXRfc2l6ZTsKKwljaHVuay0+cGFnZSA9IGNodW5rLT5wYWdlX2FyOworCisJY2h1bmstPnZtID0gZ2V0X3ZtX2FyZWEocGNwdV9jaHVua19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNodW5rLT52bSkgeworCQlmcmVlX3BjcHVfY2h1bmsoY2h1bmspOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmY2h1bmstPmxpc3QpOworCWNodW5rLT5mcmVlX3NpemUgPSBwY3B1X3VuaXRfc2l6ZTsKKwljaHVuay0+Y29udGlnX2hpbnQgPSBwY3B1X3VuaXRfc2l6ZTsKKworCXJldHVybiBjaHVuazsKK30KKworLyoqCisgKiBwY3B1X2FsbG9jIC0gdGhlIHBlcmNwdSBhbGxvY2F0b3IKKyAqIEBzaXplOiBzaXplIG9mIGFyZWEgdG8gYWxsb2NhdGUgaW4gYnl0ZXMKKyAqIEBhbGlnbjogYWxpZ25tZW50IG9mIGFyZWEgKG1heCBQQUdFX1NJWkUpCisgKiBAcmVzZXJ2ZWQ6IGFsbG9jYXRlIGZyb20gdGhlIHJlc2VydmVkIGNodW5rIGlmIGF2YWlsYWJsZQorICoKKyAqIEFsbG9jYXRlIHBlcmNwdSBhcmVhIG9mIEBzaXplIGJ5dGVzIGFsaWduZWQgYXQgQGFsaWduLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogUGVyY3B1IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQgKnBjcHVfYWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCkKK3sKKwlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7CisJaW50IHNsb3QsIG9mZjsKKworCWlmICh1bmxpa2VseSghc2l6ZSB8fCBzaXplID4gUENQVV9NSU5fVU5JVF9TSVpFIHx8IGFsaWduID4gUEFHRV9TSVpFKSkgeworCQlXQVJOKHRydWUsICJpbGxlZ2FsIHNpemUgKCV6dSkgb3IgYWxpZ24gKCV6dSkgZm9yICIKKwkJICAgICAicGVyY3B1IGFsbG9jYXRpb25cbiIsIHNpemUsIGFsaWduKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbXV0ZXhfbG9jaygmcGNwdV9hbGxvY19tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKworCS8qIHNlcnZlIHJlc2VydmVkIGFsbG9jYXRpb25zIGZyb20gdGhlIHJlc2VydmVkIGNodW5rIGlmIGF2YWlsYWJsZSAqLworCWlmIChyZXNlcnZlZCAmJiBwY3B1X3Jlc2VydmVkX2NodW5rKSB7CisJCWNodW5rID0gcGNwdV9yZXNlcnZlZF9jaHVuazsKKwkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQgfHwKKwkJICAgIHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rKSA8IDApCisJCQlnb3RvIGZhaWxfdW5sb2NrOworCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKKwkJaWYgKG9mZiA+PSAwKQorCQkJZ290byBhcmVhX2ZvdW5kOworCQlnb3RvIGZhaWxfdW5sb2NrOworCX0KKworcmVzdGFydDoKKwkvKiBzZWFyY2ggdGhyb3VnaCBub3JtYWwgY2h1bmtzICovCisJZm9yIChzbG90ID0gcGNwdV9zaXplX3RvX3Nsb3Qoc2l6ZSk7IHNsb3QgPCBwY3B1X25yX3Nsb3RzOyBzbG90KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnBjcHVfc2xvdFtzbG90XSwgbGlzdCkgeworCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCisJCQkJY29udGludWU7CisKKwkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7CisJCQljYXNlIDA6CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJZ290byByZXN0YXJ0OwkvKiBwY3B1X2xvY2sgZHJvcHBlZCwgcmVzdGFydCAqLworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJfQorCisJCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKKwkJCWlmIChvZmYgPj0gMCkKKwkJCQlnb3RvIGFyZWFfZm91bmQ7CisJCX0KKwl9CisKKwkvKiBobW1tLi4uIG5vIHNwYWNlIGxlZnQsIGNyZWF0ZSBhIG5ldyBjaHVuayAqLworCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKworCWNodW5rID0gYWxsb2NfcGNwdV9jaHVuaygpOworCWlmICghY2h1bmspCisJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisKKwlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIC0xKTsKKwlwY3B1X2NodW5rX2FkZHJfaW5zZXJ0KGNodW5rKTsKKwlnb3RvIHJlc3RhcnQ7CisKK2FyZWFfZm91bmQ6CisJc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCisJLyogcG9wdWxhdGUsIG1hcCBhbmQgY2xlYXIgdGhlIGFyZWEgKi8KKwlpZiAocGNwdV9wb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplKSkgeworCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCQlwY3B1X2ZyZWVfYXJlYShjaHVuaywgb2ZmKTsKKwkJZ290byBmYWlsX3VubG9jazsKKwl9CisKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCisJcmV0dXJuIF9fYWRkcl90b19wY3B1X3B0cihjaHVuay0+dm0tPmFkZHIgKyBvZmYpOworCitmYWlsX3VubG9jazoKKwlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CitmYWlsX3VubG9ja19tdXRleDoKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIF9fYWxsb2NfcGVyY3B1IC0gYWxsb2NhdGUgZHluYW1pYyBwZXJjcHUgYXJlYQorICogQHNpemU6IHNpemUgb2YgYXJlYSB0byBhbGxvY2F0ZSBpbiBieXRlcworICogQGFsaWduOiBhbGlnbm1lbnQgb2YgYXJlYSAobWF4IFBBR0VfU0laRSkKKyAqCisgKiBBbGxvY2F0ZSBwZXJjcHUgYXJlYSBvZiBAc2l6ZSBieXRlcyBhbGlnbmVkIGF0IEBhbGlnbi4gIE1pZ2h0CisgKiBzbGVlcC4gIE1pZ2h0IHRyaWdnZXIgd3JpdGVvdXRzLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogUGVyY3B1IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLwordm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKK3sKKwlyZXR1cm4gcGNwdV9hbGxvYyhzaXplLCBhbGlnbiwgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19hbGxvY19wZXJjcHUpOworCisvKioKKyAqIF9fYWxsb2NfcmVzZXJ2ZWRfcGVyY3B1IC0gYWxsb2NhdGUgcmVzZXJ2ZWQgcGVyY3B1IGFyZWEKKyAqIEBzaXplOiBzaXplIG9mIGFyZWEgdG8gYWxsb2NhdGUgaW4gYnl0ZXMKKyAqIEBhbGlnbjogYWxpZ25tZW50IG9mIGFyZWEgKG1heCBQQUdFX1NJWkUpCisgKgorICogQWxsb2NhdGUgcGVyY3B1IGFyZWEgb2YgQHNpemUgYnl0ZXMgYWxpZ25lZCBhdCBAYWxpZ24gZnJvbSByZXNlcnZlZAorICogcGVyY3B1IGFyZWEgaWYgYXJjaCBoYXMgc2V0IGl0IHVwOyBvdGhlcndpc2UsIGFsbG9jYXRpb24gaXMgc2VydmVkCisgKiBmcm9tIHRoZSBzYW1lIGR5bmFtaWMgYXJlYS4gIE1pZ2h0IHNsZWVwLiAgTWlnaHQgdHJpZ2dlciB3cml0ZW91dHMuCisgKgorICogQ09OVEVYVDoKKyAqIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLgorICoKKyAqIFJFVFVSTlM6CisgKiBQZXJjcHUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCit2b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQoreworCXJldHVybiBwY3B1X2FsbG9jKHNpemUsIGFsaWduLCB0cnVlKTsKK30KKworLyoqCisgKiBwY3B1X3JlY2xhaW0gLSByZWNsYWltIGZ1bGx5IGZyZWUgY2h1bmtzLCB3b3JrcXVldWUgZnVuY3Rpb24KKyAqIEB3b3JrOiB1bnVzZWQKKyAqCisgKiBSZWNsYWltIGFsbCBmdWxseSBmcmVlIGNodW5rcyBleGNlcHQgZm9yIHRoZSBmaXJzdCBvbmUuCisgKgorICogQ09OVEVYVDoKKyAqIHdvcmtxdWV1ZSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBwY3B1X3JlY2xhaW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCUxJU1RfSEVBRCh0b2RvKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnBjcHVfc2xvdFtwY3B1X25yX3Nsb3RzIC0gMV07CisJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCAqbmV4dDsKKworCW11dGV4X2xvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2h1bmssIG5leHQsIGhlYWQsIGxpc3QpIHsKKwkJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKKworCQkvKiBzcGFyZSB0aGUgZmlyc3Qgb25lICovCisJCWlmIChjaHVuayA9PSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBwY3B1X2NodW5rLCBsaXN0KSkKKwkJCWNvbnRpbnVlOworCisJCXJiX2VyYXNlKCZjaHVuay0+cmJfbm9kZSwgJnBjcHVfYWRkcl9yb290KTsKKwkJbGlzdF9tb3ZlKCZjaHVuay0+bGlzdCwgJnRvZG8pOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNodW5rLCBuZXh0LCAmdG9kbywgbGlzdCkgeworCQlwY3B1X2RlcG9wdWxhdGVfY2h1bmsoY2h1bmssIDAsIHBjcHVfdW5pdF9zaXplLCBmYWxzZSk7CisJCWZyZWVfcGNwdV9jaHVuayhjaHVuayk7CisJfQorfQorCisvKioKKyAqIGZyZWVfcGVyY3B1IC0gZnJlZSBwZXJjcHUgYXJlYQorICogQHB0cjogcG9pbnRlciB0byBhcmVhIHRvIGZyZWUKKyAqCisgKiBGcmVlIHBlcmNwdSBhcmVhIEBwdHIuCisgKgorICogQ09OVEVYVDoKKyAqIENhbiBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4KKyAqLwordm9pZCBmcmVlX3BlcmNwdSh2b2lkICpwdHIpCit7CisJdm9pZCAqYWRkciA9IF9fcGNwdV9wdHJfdG9fYWRkcihwdHIpOworCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBvZmY7CisKKwlpZiAoIXB0cikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCisJY2h1bmsgPSBwY3B1X2NodW5rX2FkZHJfc2VhcmNoKGFkZHIpOworCW9mZiA9IGFkZHIgLSBjaHVuay0+dm0tPmFkZHI7CisKKwlwY3B1X2ZyZWVfYXJlYShjaHVuaywgb2ZmKTsKKworCS8qIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGZ1bGx5IGZyZWUgY2h1bmtzLCB3YWtlIHVwIGdyaW0gcmVhcGVyICovCisJaWYgKGNodW5rLT5mcmVlX3NpemUgPT0gcGNwdV91bml0X3NpemUpIHsKKwkJc3RydWN0IHBjcHVfY2h1bmsgKnBvczsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnBjcHVfc2xvdFtwY3B1X25yX3Nsb3RzIC0gMV0sIGxpc3QpCisJCQlpZiAocG9zICE9IGNodW5rKSB7CisJCQkJc2NoZWR1bGVfd29yaygmcGNwdV9yZWNsYWltX3dvcmspOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOworCisvKioKKyAqIHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsgLSBpbml0aWFsaXplIHRoZSBmaXJzdCBwZXJjcHUgY2h1bmsKKyAqIEBnZXRfcGFnZV9mbjogY2FsbGJhY2sgdG8gZmV0Y2ggcGFnZSBwb2ludGVyCisgKiBAc3RhdGljX3NpemU6IHRoZSBzaXplIG9mIHN0YXRpYyBwZXJjcHUgYXJlYSBpbiBieXRlcworICogQHJlc2VydmVkX3NpemU6IHRoZSBzaXplIG9mIHJlc2VydmVkIHBlcmNwdSBhcmVhIGluIGJ5dGVzCisgKiBAZHluX3NpemU6IGZyZWUgc2l6ZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGluIGJ5dGVzLCAtMSBmb3IgYXV0bworICogQHVuaXRfc2l6ZTogdW5pdCBzaXplIGluIGJ5dGVzLCBtdXN0IGJlIG11bHRpcGxlIG9mIFBBR0VfU0laRSwgLTEgZm9yIGF1dG8KKyAqIEBiYXNlX2FkZHI6IG1hcHBlZCBhZGRyZXNzLCBOVUxMIGZvciBhdXRvCisgKiBAcG9wdWxhdGVfcHRlX2ZuOiBjYWxsYmFjayB0byBhbGxvY2F0ZSBwYWdldGFibGUsIE5VTEwgaWYgdW5uZWNlc3NhcnkKKyAqCisgKiBJbml0aWFsaXplIHRoZSBmaXJzdCBwZXJjcHUgY2h1bmsgd2hpY2ggY29udGFpbnMgdGhlIGtlcm5lbCBzdGF0aWMKKyAqIHBlcnBjdSBhcmVhLiAgVGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgZnJvbSBhcmNoIHBlcmNwdSBhcmVhCisgKiBzZXR1cCBwYXRoLiAgVGhlIGZpcnN0IHR3byBwYXJhbWV0ZXJzIGFyZSBtYW5kYXRvcnkuICBUaGUgcmVzdCBhcmUKKyAqIG9wdGlvbmFsLgorICoKKyAqIEBnZXRfcGFnZV9mbigpIHNob3VsZCByZXR1cm4gcG9pbnRlciB0byBwZXJjcHUgcGFnZSBnaXZlbiBjcHUKKyAqIG51bWJlciBhbmQgcGFnZSBudW1iZXIuICBJdCBzaG91bGQgYXQgbGVhc3QgcmV0dXJuIGVub3VnaCBwYWdlcyB0bworICogY292ZXIgdGhlIHN0YXRpYyBhcmVhLiAgVGhlIHJldHVybmVkIHBhZ2VzIGZvciBzdGF0aWMgYXJlYSBzaG91bGQKKyAqIGhhdmUgYmVlbiBpbml0aWFsaXplZCB3aXRoIHZhbGlkIGRhdGEuICBJZiBAdW5pdF9zaXplIGlzIHNwZWNpZmllZCwKKyAqIGl0IGNhbiBhbHNvIHJldHVybiBwYWdlcyBhZnRlciB0aGUgc3RhdGljIGFyZWEuICBOVUxMIHJldHVybgorICogaW5kaWNhdGVzIGVuZCBvZiBwYWdlcyBmb3IgdGhlIGNwdS4gIE5vdGUgdGhhdCBAZ2V0X3BhZ2VfZm4oKSBtdXN0CisgKiByZXR1cm4gdGhlIHNhbWUgbnVtYmVyIG9mIHBhZ2VzIGZvciBhbGwgY3B1cy4KKyAqCisgKiBAcmVzZXJ2ZWRfc2l6ZSwgaWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvCisgKiByZXNlcnZlIGFmdGVyIHRoZSBzdGF0aWMgYXJlYSBpbiB0aGUgZmlyc3QgY2h1bmsuICBUaGlzIHJlc2VydmVzCisgKiB0aGUgZmlyc3QgY2h1bmsgc3VjaCB0aGF0IGl0J3MgYXZhaWxhYmxlIG9ubHkgdGhyb3VnaCByZXNlcnZlZAorICogcGVyY3B1IGFsbG9jYXRpb24uICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHNlcnZlIG1vZHVsZSBwZXJjcHUKKyAqIHN0YXRpYyBhcmVhcyBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSBhZGRyZXNzaW5nIG1vZGVsIGhhcworICogbGltaXRlZCBvZmZzZXQgcmFuZ2UgZm9yIHN5bWJvbCByZWxvY2F0aW9ucyB0byBndWFyYW50ZWUgbW9kdWxlCisgKiBwZXJjcHUgc3ltYm9scyBmYWxsIGluc2lkZSB0aGUgcmVsb2NhdGFibGUgcmFuZ2UuCisgKgorICogQGR5bl9zaXplLCBpZiBub24tbmVnYXRpdmUsIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBieXRlcworICogYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gaW4gdGhlIGZpcnN0IGNodW5rLiAgU3BlY2lmeWluZworICogbm9uLW5lZ2F0aXZlIHZhbHVlIG1ha2VzIHBlcmNwdSBsZWF2ZSBhbG9uZSB0aGUgYXJlYSBiZXlvbmQKKyAqIEBzdGF0aWNfc2l6ZSArIEByZXNlcnZlZF9zaXplICsgQGR5bl9zaXplLgorICoKKyAqIEB1bml0X3NpemUsIGlmIG5vbi1uZWdhdGl2ZSwgc3BlY2lmaWVzIHVuaXQgc2l6ZSBhbmQgbXVzdCBiZQorICogYWxpZ25lZCB0byBQQUdFX1NJWkUgYW5kIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIEBzdGF0aWNfc2l6ZSArCisgKiBAcmVzZXJ2ZWRfc2l6ZSArIGlmIG5vbi1uZWdhdGl2ZSwgQGR5bl9zaXplLgorICoKKyAqIE5vbi1udWxsIEBiYXNlX2FkZHIgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGFscmVhZHkgYWxsb2NhdGVkIHZpcnR1YWwKKyAqIHJlZ2lvbiBmb3IgdGhlIGZpcnN0IGNodW5rIGFuZCBtYXBwZWQgaXQuICBwZXJjcHUgbXVzdCBub3QgbWVzcworICogd2l0aCB0aGUgY2h1bmsuICBOb3RlIHRoYXQgQGJhc2VfYWRkciB3aXRoIDAgQHVuaXRfc2l6ZSBvciBub24tTlVMTAorICogQHBvcHVsYXRlX3B0ZV9mbiBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLgorICoKKyAqIEBwb3B1bGF0ZV9wdGVfZm4gaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgcGFnZXRhYmxlLiAgTlVMTCBtZWFucyB0aGUKKyAqIGNhbGxlciBhbHJlYWR5IHBvcHVsYXRlZCB0aGUgcGFnZXRhYmxlLgorICoKKyAqIElmIHRoZSBmaXJzdCBjaHVuayBlbmRzIHVwIHdpdGggYm90aCByZXNlcnZlZCBhbmQgZHluYW1pYyBhcmVhcywgaXQKKyAqIGlzIHNlcnZlZCBieSB0d28gY2h1bmtzIC0gb25lIHRvIHNlcnZlIHRoZSBjb3JlIHN0YXRpYyBhbmQgcmVzZXJ2ZWQKKyAqIGFyZWFzIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBkeW5hbWljIGFyZWEuICBUaGV5IHNoYXJlIHRoZSBzYW1lIHZtCisgKiBhbmQgcGFnZSBtYXAgYnV0IHVzZXMgZGlmZmVyZW50IGFyZWEgYWxsb2NhdGlvbiBtYXAgdG8gc3RheSBhd2F5CisgKiBmcm9tIGVhY2ggb3RoZXIuICBUaGUgbGF0dGVyIGNodW5rIGlzIGNpcmN1bGF0ZWQgaW4gdGhlIGNodW5rIHNsb3RzCisgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmtzLgorICoKKyAqIFJFVFVSTlM6CisgKiBUaGUgZGV0ZXJtaW5lZCBwY3B1X3VuaXRfc2l6ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplCisgKiBwZXJjcHUgYWNjZXNzLgorICovCitzaXplX3QgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsocGNwdV9nZXRfcGFnZV9mbl90IGdldF9wYWdlX2ZuLAorCQkJCSAgICAgc2l6ZV90IHN0YXRpY19zaXplLCBzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwKKwkJCQkgICAgIHNzaXplX3QgZHluX3NpemUsIHNzaXplX3QgdW5pdF9zaXplLAorCQkJCSAgICAgdm9pZCAqYmFzZV9hZGRyLAorCQkJCSAgICAgcGNwdV9wb3B1bGF0ZV9wdGVfZm5fdCBwb3B1bGF0ZV9wdGVfZm4pCit7CisJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgZmlyc3Rfdm07CisJc3RhdGljIGludCBzbWFwWzJdLCBkbWFwWzJdOworCXNpemVfdCBzaXplX3N1bSA9IHN0YXRpY19zaXplICsgcmVzZXJ2ZWRfc2l6ZSArCisJCQkgIChkeW5fc2l6ZSA+PSAwID8gZHluX3NpemUgOiAwKTsKKwlzdHJ1Y3QgcGNwdV9jaHVuayAqc2NodW5rLCAqZGNodW5rID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCWludCBucl9wYWdlczsKKwlpbnQgZXJyLCBpOworCisJLyogc2FudGl5IGNoZWNrcyAqLworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNtYXApID49IFBDUFVfREZMX01BUF9BTExPQyB8fAorCQkgICAgIEFSUkFZX1NJWkUoZG1hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DKTsKKwlCVUdfT04oIXN0YXRpY19zaXplKTsKKwlpZiAodW5pdF9zaXplID49IDApIHsKKwkJQlVHX09OKHVuaXRfc2l6ZSA8IHNpemVfc3VtKTsKKwkJQlVHX09OKHVuaXRfc2l6ZSAmIH5QQUdFX01BU0spOworCQlCVUdfT04odW5pdF9zaXplIDwgUENQVV9NSU5fVU5JVF9TSVpFKTsKKwl9IGVsc2UKKwkJQlVHX09OKGJhc2VfYWRkcik7CisJQlVHX09OKGJhc2VfYWRkciAmJiBwb3B1bGF0ZV9wdGVfZm4pOworCisJaWYgKHVuaXRfc2l6ZSA+PSAwKQorCQlwY3B1X3VuaXRfcGFnZXMgPSB1bml0X3NpemUgPj4gUEFHRV9TSElGVDsKKwllbHNlCisJCXBjcHVfdW5pdF9wYWdlcyA9IG1heF90KGludCwgUENQVV9NSU5fVU5JVF9TSVpFID4+IFBBR0VfU0hJRlQsCisJCQkJCVBGTl9VUChzaXplX3N1bSkpOworCisJcGNwdV91bml0X3NpemUgPSBwY3B1X3VuaXRfcGFnZXMgPDwgUEFHRV9TSElGVDsKKwlwY3B1X2NodW5rX3NpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogcGNwdV91bml0X3NpemU7CisJcGNwdV9jaHVua19zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGNwdV9jaHVuaykKKwkJKyBudW1fcG9zc2libGVfY3B1cygpICogcGNwdV91bml0X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopOworCisJaWYgKGR5bl9zaXplIDwgMCkKKwkJZHluX3NpemUgPSBwY3B1X3VuaXRfc2l6ZSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTsKKworCS8qCisJICogQWxsb2NhdGUgY2h1bmsgc2xvdHMuICBUaGUgYWRkaXRpb25hbCBsYXN0IHNsb3QgaXMgZm9yCisJICogZW1wdHkgY2h1bmtzLgorCSAqLworCXBjcHVfbnJfc2xvdHMgPSBfX3BjcHVfc2l6ZV90b19zbG90KHBjcHVfdW5pdF9zaXplKSArIDI7CisJcGNwdV9zbG90ID0gYWxsb2NfYm9vdG1lbShwY3B1X25yX3Nsb3RzICogc2l6ZW9mKHBjcHVfc2xvdFswXSkpOworCWZvciAoaSA9IDA7IGkgPCBwY3B1X25yX3Nsb3RzOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZwY3B1X3Nsb3RbaV0pOworCisJLyoKKwkgKiBJbml0aWFsaXplIHN0YXRpYyBjaHVuay4gIElmIHJlc2VydmVkX3NpemUgaXMgemVybywgdGhlCisJICogc3RhdGljIGNodW5rIGNvdmVycyBzdGF0aWMgYXJlYSArIGR5bmFtaWMgYWxsb2NhdGlvbiBhcmVhCisJICogaW4gdGhlIGZpcnN0IGNodW5rLiAgSWYgcmVzZXJ2ZWRfc2l6ZSBpcyBub3QgemVybywgaXQKKwkgKiBjb3ZlcnMgc3RhdGljIGFyZWEgKyByZXNlcnZlZCBhcmVhIChtb3N0bHkgdXNlZCBmb3IgbW9kdWxlCisJICogc3RhdGljIHBlcmNwdSBhbGxvY2F0aW9uKS4KKwkgKi8KKwlzY2h1bmsgPSBhbGxvY19ib290bWVtKHBjcHVfY2h1bmtfc3RydWN0X3NpemUpOworCUlOSVRfTElTVF9IRUFEKCZzY2h1bmstPmxpc3QpOworCXNjaHVuay0+dm0gPSAmZmlyc3Rfdm07CisJc2NodW5rLT5tYXAgPSBzbWFwOworCXNjaHVuay0+bWFwX2FsbG9jID0gQVJSQVlfU0laRShzbWFwKTsKKwlzY2h1bmstPnBhZ2UgPSBzY2h1bmstPnBhZ2VfYXI7CisKKwlpZiAocmVzZXJ2ZWRfc2l6ZSkgeworCQlzY2h1bmstPmZyZWVfc2l6ZSA9IHJlc2VydmVkX3NpemU7CisJCXBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBzY2h1bms7CS8qIG5vdCBmb3IgZHluYW1pYyBhbGxvYyAqLworCX0gZWxzZSB7CisJCXNjaHVuay0+ZnJlZV9zaXplID0gZHluX3NpemU7CisJCWR5bl9zaXplID0gMDsJCQkvKiBkeW5hbWljIGFyZWEgY292ZXJlZCAqLworCX0KKwlzY2h1bmstPmNvbnRpZ19oaW50ID0gc2NodW5rLT5mcmVlX3NpemU7CisKKwlzY2h1bmstPm1hcFtzY2h1bmstPm1hcF91c2VkKytdID0gLXN0YXRpY19zaXplOworCWlmIChzY2h1bmstPmZyZWVfc2l6ZSkKKwkJc2NodW5rLT5tYXBbc2NodW5rLT5tYXBfdXNlZCsrXSA9IHNjaHVuay0+ZnJlZV9zaXplOworCisJcGNwdV9yZXNlcnZlZF9jaHVua19saW1pdCA9IHN0YXRpY19zaXplICsgc2NodW5rLT5mcmVlX3NpemU7CisKKwkvKiBpbml0IGR5bmFtaWMgY2h1bmsgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGR5bl9zaXplKSB7CisJCWRjaHVuayA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBwY3B1X2NodW5rKSk7CisJCUlOSVRfTElTVF9IRUFEKCZkY2h1bmstPmxpc3QpOworCQlkY2h1bmstPnZtID0gJmZpcnN0X3ZtOworCQlkY2h1bmstPm1hcCA9IGRtYXA7CisJCWRjaHVuay0+bWFwX2FsbG9jID0gQVJSQVlfU0laRShkbWFwKTsKKwkJZGNodW5rLT5wYWdlID0gc2NodW5rLT5wYWdlX2FyOwkvKiBzaGFyZSBwYWdlIG1hcCB3aXRoIHNjaHVuayAqLworCisJCWRjaHVuay0+Y29udGlnX2hpbnQgPSBkY2h1bmstPmZyZWVfc2l6ZSA9IGR5bl9zaXplOworCQlkY2h1bmstPm1hcFtkY2h1bmstPm1hcF91c2VkKytdID0gLXBjcHVfcmVzZXJ2ZWRfY2h1bmtfbGltaXQ7CisJCWRjaHVuay0+bWFwW2RjaHVuay0+bWFwX3VzZWQrK10gPSBkY2h1bmstPmZyZWVfc2l6ZTsKKwl9CisKKwkvKiBhbGxvY2F0ZSB2bSBhZGRyZXNzICovCisJZmlyc3Rfdm0uZmxhZ3MgPSBWTV9BTExPQzsKKwlmaXJzdF92bS5zaXplID0gcGNwdV9jaHVua19zaXplOworCisJaWYgKCFiYXNlX2FkZHIpCisJCXZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoJmZpcnN0X3ZtLCBQQUdFX1NJWkUpOworCWVsc2UgeworCQkvKgorCQkgKiBQYWdlcyBhbHJlYWR5IG1hcHBlZC4gIE5vIG5lZWQgdG8gcmVtYXAgaW50bworCQkgKiB2bWFsbG9jIGFyZWEuICBJbiB0aGlzIGNhc2UgdGhlIGZpcnN0IGNodW5rcyBjYW4ndAorCQkgKiBiZSBtYXBwZWQgb3IgdW5tYXBwZWQgYnkgcGVyY3B1IGFuZCBhcmUgbWFya2VkCisJCSAqIGltbXV0YWJsZS4KKwkJICovCisJCWZpcnN0X3ZtLmFkZHIgPSBiYXNlX2FkZHI7CisJCXNjaHVuay0+aW1tdXRhYmxlID0gdHJ1ZTsKKwkJaWYgKGRjaHVuaykKKwkJCWRjaHVuay0+aW1tdXRhYmxlID0gdHJ1ZTsKKwl9CisKKwkvKiBhc3NpZ24gcGFnZXMgKi8KKwlucl9wYWdlcyA9IC0xOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBjcHVfdW5pdF9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF9wYWdlX2ZuKGNwdSwgaSk7CisKKwkJCWlmICghcGFnZSkKKwkJCQlicmVhazsKKwkJCSpwY3B1X2NodW5rX3BhZ2VwKHNjaHVuaywgY3B1LCBpKSA9IHBhZ2U7CisJCX0KKworCQlCVUdfT04oaSA8IFBGTl9VUChzdGF0aWNfc2l6ZSkpOworCisJCWlmIChucl9wYWdlcyA8IDApCisJCQlucl9wYWdlcyA9IGk7CisJCWVsc2UKKwkJCUJVR19PTihucl9wYWdlcyAhPSBpKTsKKwl9CisKKwkvKiBtYXAgdGhlbSAqLworCWlmIChwb3B1bGF0ZV9wdGVfZm4pIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQorCQkJCXBvcHVsYXRlX3B0ZV9mbihwY3B1X2NodW5rX2FkZHIoc2NodW5rLAorCQkJCQkJCQljcHUsIGkpKTsKKworCQllcnIgPSBwY3B1X21hcChzY2h1bmssIDAsIG5yX3BhZ2VzKTsKKwkJaWYgKGVycikKKwkJCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgc3RhdGljIHBlcmNwdSBhcmVhLCBlcnI9JWRcbiIsCisJCQkgICAgICBlcnIpOworCX0KKworCS8qIGxpbmsgdGhlIGZpcnN0IGNodW5rIGluICovCisJaWYgKCFkY2h1bmspIHsKKwkJcGNwdV9jaHVua19yZWxvY2F0ZShzY2h1bmssIC0xKTsKKwkJcGNwdV9jaHVua19hZGRyX2luc2VydChzY2h1bmspOworCX0gZWxzZSB7CisJCXBjcHVfY2h1bmtfcmVsb2NhdGUoZGNodW5rLCAtMSk7CisJCXBjcHVfY2h1bmtfYWRkcl9pbnNlcnQoZGNodW5rKTsKKwl9CisKKwkvKiB3ZSdyZSBkb25lICovCisJcGNwdV9iYXNlX2FkZHIgPSAodm9pZCAqKXBjcHVfY2h1bmtfYWRkcihzY2h1bmssIDAsIDApOworCXJldHVybiBwY3B1X3VuaXRfc2l6ZTsKK30KKworLyoKKyAqIEVtYmVkZGluZyBmaXJzdCBjaHVuayBzZXR1cCBoZWxwZXIuCisgKi8KK3N0YXRpYyB2b2lkICpwY3B1ZV9wdHIgX19pbml0ZGF0YTsKK3N0YXRpYyBzaXplX3QgcGNwdWVfc2l6ZSBfX2luaXRkYXRhOworc3RhdGljIHNpemVfdCBwY3B1ZV91bml0X3NpemUgX19pbml0ZGF0YTsKKworc3RhdGljIHN0cnVjdCBwYWdlICogX19pbml0IHBjcHVlX2dldF9wYWdlKHVuc2lnbmVkIGludCBjcHUsIGludCBwYWdlbm8pCit7CisJc2l6ZV90IG9mZiA9IChzaXplX3QpcGFnZW5vIDw8IFBBR0VfU0hJRlQ7CisKKwlpZiAob2ZmID49IHBjcHVlX3NpemUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZpcnRfdG9fcGFnZShwY3B1ZV9wdHIgKyBjcHUgKiBwY3B1ZV91bml0X3NpemUgKyBvZmYpOworfQorCisvKioKKyAqIHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsgLSBlbWJlZCB0aGUgZmlyc3QgcGVyY3B1IGNodW5rIGludG8gYm9vdG1lbQorICogQHN0YXRpY19zaXplOiB0aGUgc2l6ZSBvZiBzdGF0aWMgcGVyY3B1IGFyZWEgaW4gYnl0ZXMKKyAqIEByZXNlcnZlZF9zaXplOiB0aGUgc2l6ZSBvZiByZXNlcnZlZCBwZXJjcHUgYXJlYSBpbiBieXRlcworICogQGR5bl9zaXplOiBmcmVlIHNpemUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBpbiBieXRlcywgLTEgZm9yIGF1dG8KKyAqIEB1bml0X3NpemU6IHVuaXQgc2l6ZSBpbiBieXRlcywgbXVzdCBiZSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUsIC0xIGZvciBhdXRvCisgKgorICogVGhpcyBpcyBhIGhlbHBlciB0byBlYXNlIHNldHRpbmcgdXAgZW1iZWRkZWQgZmlyc3QgcGVyY3B1IGNodW5rIGFuZAorICogY2FuIGJlIGNhbGxlZCB3aGVyZSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKCkgaXMgZXhwZWN0ZWQuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldHVwIHRoZSBmaXJzdCBjaHVuaywgaXQgaXMgYWxsb2NhdGVkCisgKiBhcyBhIGNvbnRpZ3VvdXMgYXJlYSB1c2luZyBib290bWVtIGFsbG9jYXRvciBhbmQgdXNlZCBhcy1pcyB3aXRob3V0CisgKiBiZWluZyBtYXBwZWQgaW50byB2bWFsbG9jIGFyZWEuICBUaGlzIGVuYWJsZXMgdGhlIGZpcnN0IGNodW5rIHRvCisgKiBwaWdneSBiYWNrIG9uIHRoZSBsaW5lYXIgcGh5c2ljYWwgbWFwcGluZyB3aGljaCBvZnRlbiB1c2VzIGxhcmdlcgorICogcGFnZSBzaXplLgorICoKKyAqIFdoZW4gQGR5bl9zaXplIGlzIHBvc2l0aXZlLCBkeW5hbWljIGFyZWEgbWlnaHQgYmUgbGFyZ2VyIHRoYW4KKyAqIHNwZWNpZmllZCB0byBmaWxsIHBhZ2UgYWxpZ25tZW50LiAgQWxzbywgd2hlbiBAZHluX3NpemUgaXMgYXV0bywKKyAqIEBkeW5fc2l6ZSBkb2VzIG5vdCBmaWxsIHRoZSB3aG9sZSBmaXJzdCBjaHVuayBidXQgb25seSB3aGF0J3MKKyAqIG5lY2Vzc2FyeSBmb3IgcGFnZSBhbGlnbm1lbnQgYWZ0ZXIgc3RhdGljIGFuZCByZXNlcnZlZCBhcmVhcy4KKyAqCisgKiBJZiB0aGUgbmVlZGVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIG9yIHNwZWNpZmllZCB1bml0CisgKiBzaXplLCB0aGUgbGVmdG92ZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgorICoKKyAqIFJFVFVSTlM6CisgKiBUaGUgZGV0ZXJtaW5lZCBwY3B1X3VuaXRfc2l6ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplCisgKiBwZXJjcHUgYWNjZXNzIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitzc2l6ZV90IF9faW5pdCBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKHNpemVfdCBzdGF0aWNfc2l6ZSwgc2l6ZV90IHJlc2VydmVkX3NpemUsCisJCQkJICAgICAgc3NpemVfdCBkeW5fc2l6ZSwgc3NpemVfdCB1bml0X3NpemUpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCS8qIGRldGVybWluZSBwYXJhbWV0ZXJzIGFuZCBhbGxvY2F0ZSAqLworCXBjcHVlX3NpemUgPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplICsKKwkJCSAgICAgICAoZHluX3NpemUgPj0gMCA/IGR5bl9zaXplIDogMCkpOworCWlmIChkeW5fc2l6ZSAhPSAwKQorCQlkeW5fc2l6ZSA9IHBjcHVlX3NpemUgLSBzdGF0aWNfc2l6ZSAtIHJlc2VydmVkX3NpemU7CisKKwlpZiAodW5pdF9zaXplID49IDApIHsKKwkJQlVHX09OKHVuaXRfc2l6ZSA8IHBjcHVlX3NpemUpOworCQlwY3B1ZV91bml0X3NpemUgPSB1bml0X3NpemU7CisJfSBlbHNlCisJCXBjcHVlX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgcGNwdWVfc2l6ZSwgUENQVV9NSU5fVU5JVF9TSVpFKTsKKworCXBjcHVlX3B0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKAorCQkJCQludW1fcG9zc2libGVfY3B1cygpICogcGNwdWVfdW5pdF9zaXplLAorCQkJCQlQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKCFwY3B1ZV9wdHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcmV0dXJuIHRoZSBsZWZ0b3ZlciBhbmQgY29weSAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJdm9pZCAqcHRyID0gcGNwdWVfcHRyICsgY3B1ICogcGNwdWVfdW5pdF9zaXplOworCisJCWZyZWVfYm9vdG1lbShfX3BhKHB0ciArIHBjcHVlX3NpemUpLAorCQkJICAgICBwY3B1ZV91bml0X3NpemUgLSBwY3B1ZV9zaXplKTsKKwkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X2xvYWQsIHN0YXRpY19zaXplKTsKKwl9CisKKwkvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovCisJcHJfaW5mbygiUEVSQ1BVOiBFbWJlZGRlZCAlenUgcGFnZXMgYXQgJXAsIHN0YXRpYyBkYXRhICV6dSBieXRlc1xuIiwKKwkJcGNwdWVfc2l6ZSA+PiBQQUdFX1NISUZULCBwY3B1ZV9wdHIsIHN0YXRpY19zaXplKTsKKworCXJldHVybiBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVlX2dldF9wYWdlLCBzdGF0aWNfc2l6ZSwKKwkJCQkgICAgICByZXNlcnZlZF9zaXplLCBkeW5fc2l6ZSwKKwkJCQkgICAgICBwY3B1ZV91bml0X3NpemUsIHBjcHVlX3B0ciwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IGJlYzgzYzEuLjljZTMwM2QgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0xNywxOSArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKLXZvaWQgZGVmYXVsdF91bnBsdWdfaW9fZm4oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGRlZmF1bHRfdW5wbHVnX2lvX2ZuKTsKLQotc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvID0gewotCS5yYV9wYWdlcwk9IFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0IC8gUEFHRV9DQUNIRV9TSVpFLAotCS5zdGF0ZQkJPSAwLAotCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX01BUF9DT1BZLAotCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOwotCiAvKgogICogSW5pdGlhbGlzZSBhIHN0cnVjdCBmaWxlJ3MgcmVhZGFoZWFkIHN0YXRlLiAgQXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaGFzCiAgKiBtZW1zZXQgKnJhIHRvIHplcm8uCkBAIC0yMzMsMTggKzIyMCw2IEBACiAJCSsgbm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9GUkVFX1BBR0VTKSkgLyAyKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcmVhZGFoZWFkX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gYmRpX2luaXQoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7Ci0JaWYgKCFlcnIpCi0JCWJkaV9yZWdpc3RlcigmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLCBOVUxMLCAiZGVmYXVsdCIpOwotCi0JcmV0dXJuIGVycjsKLX0KLXN1YnN5c19pbml0Y2FsbChyZWFkYWhlYWRfaW5pdCk7Ci0KIC8qCiAgKiBTdWJtaXQgSU8gZm9yIHRoZSByZWFkLWFoZWFkIHJlcXVlc3QgaW4gZmlsZV9yYV9zdGF0ZS4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNDEwM2EyMy4uN2VjNzhlMiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQ7CiAKQEAgLTI2NjUsNiArMjY2Niw3IEBACiAJaWYgKElTX0VSUihmaWxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiAKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCWlmICh2bWEtPnZtX2ZpbGUpCiAJCWZwdXQodm1hLT52bV9maWxlKTsKIAl2bWEtPnZtX2ZpbGUgPSBmaWxlOwpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDUyYmM4YTIuLjBiZmE2ODAgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTEyNiw5ICsxMjYsOSBAQAogc3RhdGljIExJU1RfSEVBRChmcmVlX3Nsb2JfbGFyZ2UpOwogCiAvKgotICogc2xvYl9wYWdlOiBUcnVlIGZvciBhbGwgc2xvYiBwYWdlcyAoZmFsc2UgZm9yIGJpZ2Jsb2NrIHBhZ2VzKQorICogaXNfc2xvYl9wYWdlOiBUcnVlIGZvciBhbGwgc2xvYiBwYWdlcyAoZmFsc2UgZm9yIGJpZ2Jsb2NrIHBhZ2VzKQogICovCi1zdGF0aWMgaW5saW5lIGludCBzbG9iX3BhZ2Uoc3RydWN0IHNsb2JfcGFnZSAqc3ApCitzdGF0aWMgaW5saW5lIGludCBpc19zbG9iX3BhZ2Uoc3RydWN0IHNsb2JfcGFnZSAqc3ApCiB7CiAJcmV0dXJuIFBhZ2VTbG9iUGFnZSgoc3RydWN0IHBhZ2UgKilzcCk7CiB9CkBAIC0xNDMsNiArMTQzLDExIEBACiAJX19DbGVhclBhZ2VTbG9iUGFnZSgoc3RydWN0IHBhZ2UgKilzcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsb2JfcGFnZSAqc2xvYl9wYWdlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGFkZHIpOworfQorCiAvKgogICogc2xvYl9wYWdlX2ZyZWU6IHRydWUgZm9yIHBhZ2VzIG9uIGZyZWVfc2xvYl9wYWdlcyBsaXN0LgogICovCkBAIC0yMzAsNyArMjM1LDcgQEAKIAlyZXR1cm4gISgodW5zaWduZWQgbG9uZylzbG9iX25leHQocykgJiB+UEFHRV9NQVNLKTsKIH0KIAotc3RhdGljIHZvaWQgKnNsb2JfbmV3X3BhZ2UoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIGludCBub2RlKQorc3RhdGljIHZvaWQgKnNsb2JfbmV3X3BhZ2VzKGdmcF90IGdmcCwgaW50IG9yZGVyLCBpbnQgbm9kZSkKIHsKIAl2b2lkICpwYWdlOwogCkBAIC0yNDcsMTIgKzI1MiwxNyBAQAogCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb2JfZnJlZV9wYWdlcyh2b2lkICpiLCBpbnQgb3JkZXIpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyliLCBvcmRlcik7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhIHNsb2IgYmxvY2sgd2l0aGluIGEgZ2l2ZW4gc2xvYl9wYWdlIHNwLgogICovCiBzdGF0aWMgdm9pZCAqc2xvYl9wYWdlX2FsbG9jKHN0cnVjdCBzbG9iX3BhZ2UgKnNwLCBzaXplX3Qgc2l6ZSwgaW50IGFsaWduKQogewotCXNsb2JfdCAqcHJldiwgKmN1ciwgKmFsaWduZWQgPSAwOworCXNsb2JfdCAqcHJldiwgKmN1ciwgKmFsaWduZWQgPSBOVUxMOwogCWludCBkZWx0YSA9IDAsIHVuaXRzID0gU0xPQl9VTklUUyhzaXplKTsKIAogCWZvciAocHJldiA9IE5VTEwsIGN1ciA9IHNwLT5mcmVlOyA7IHByZXYgPSBjdXIsIGN1ciA9IHNsb2JfbmV4dChjdXIpKSB7CkBAIC0zNDksMTAgKzM1OSwxMCBAQAogCiAJLyogTm90IGVub3VnaCBzcGFjZTogbXVzdCBhbGxvY2F0ZSBhIG5ldyBwYWdlICovCiAJaWYgKCFiKSB7Ci0JCWIgPSBzbG9iX25ld19wYWdlKGdmcCAmIH5fX0dGUF9aRVJPLCAwLCBub2RlKTsKKwkJYiA9IHNsb2JfbmV3X3BhZ2VzKGdmcCAmIH5fX0dGUF9aRVJPLCAwLCBub2RlKTsKIAkJaWYgKCFiKQotCQkJcmV0dXJuIDA7Ci0JCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYik7CisJCQlyZXR1cm4gTlVMTDsKKwkJc3AgPSBzbG9iX3BhZ2UoYik7CiAJCXNldF9zbG9iX3BhZ2Uoc3ApOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzbG9iX2xvY2ssIGZsYWdzKTsKQEAgLTM4NCw3ICszOTQsNyBAQAogCQlyZXR1cm47CiAJQlVHX09OKCFzaXplKTsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKIAl1bml0cyA9IFNMT0JfVU5JVFMoc2l6ZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvYl9sb2NrLCBmbGFncyk7CkBAIC0zOTMsMTAgKzQwMywxMSBAQAogCQkvKiBHbyBkaXJlY3RseSB0byBwYWdlIGFsbG9jYXRvci4gRG8gbm90IHBhc3Mgc2xvYiBhbGxvY2F0b3IgKi8KIAkJaWYgKHNsb2JfcGFnZV9mcmVlKHNwKSkKIAkJCWNsZWFyX3Nsb2JfcGFnZV9mcmVlKHNwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvYl9sb2NrLCBmbGFncyk7CiAJCWNsZWFyX3Nsb2JfcGFnZShzcCk7CiAJCWZyZWVfc2xvYl9wYWdlKHNwKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCWlmICghc2xvYl9wYWdlX2ZyZWUoc3ApKSB7CkBAIC00NzYsNyArNDg3LDcgQEAKIAl9IGVsc2UgewogCQl2b2lkICpyZXQ7CiAKLQkJcmV0ID0gc2xvYl9uZXdfcGFnZShnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOworCQlyZXQgPSBzbG9iX25ld19wYWdlcyhnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOwogCQlpZiAocmV0KSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocmV0KTsKQEAgLTQ5NCw4ICs1MDUsOCBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGJsb2NrKSkpCiAJCXJldHVybjsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOwotCWlmIChzbG9iX3BhZ2Uoc3ApKSB7CisJc3AgPSBzbG9iX3BhZ2UoYmxvY2spOworCWlmIChpc19zbG9iX3BhZ2Uoc3ApKSB7CiAJCWludCBhbGlnbiA9IG1heChBUkNIX0tNQUxMT0NfTUlOQUxJR04sIEFSQ0hfU0xBQl9NSU5BTElHTik7CiAJCXVuc2lnbmVkIGludCAqbSA9ICh1bnNpZ25lZCBpbnQgKikoYmxvY2sgLSBhbGlnbik7CiAJCXNsb2JfZnJlZShtLCAqbSArIGFsaWduKTsKQEAgLTUxMyw4ICs1MjQsOCBAQAogCWlmICh1bmxpa2VseShibG9jayA9PSBaRVJPX1NJWkVfUFRSKSkKIAkJcmV0dXJuIDA7CiAKLQlzcCA9IChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGJsb2NrKTsKLQlpZiAoc2xvYl9wYWdlKHNwKSkgeworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKKwlpZiAoaXNfc2xvYl9wYWdlKHNwKSkgewogCQlpbnQgYWxpZ24gPSBtYXgoQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBBUkNIX1NMQUJfTUlOQUxJR04pOwogCQl1bnNpZ25lZCBpbnQgKm0gPSAodW5zaWduZWQgaW50ICopKGJsb2NrIC0gYWxpZ24pOwogCQlyZXR1cm4gU0xPQl9VTklUUygqbSkgKiBTTE9CX1VOSVQ7CkBAIC01NzMsNyArNTg0LDcgQEAKIAlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkKIAkJYiA9IHNsb2JfYWxsb2MoYy0+c2l6ZSwgZmxhZ3MsIGMtPmFsaWduLCBub2RlKTsKIAllbHNlCi0JCWIgPSBzbG9iX25ld19wYWdlKGZsYWdzLCBnZXRfb3JkZXIoYy0+c2l6ZSksIG5vZGUpOworCQliID0gc2xvYl9uZXdfcGFnZXMoZmxhZ3MsIGdldF9vcmRlcihjLT5zaXplKSwgbm9kZSk7CiAKIAlpZiAoYy0+Y3RvcikKIAkJYy0+Y3RvcihiKTsKQEAgLTU4Nyw3ICs1OTgsNyBAQAogCWlmIChzaXplIDwgUEFHRV9TSVpFKQogCQlzbG9iX2ZyZWUoYiwgc2l6ZSk7CiAJZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWIsIGdldF9vcmRlcihzaXplKSk7CisJCXNsb2JfZnJlZV9wYWdlcyhiLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBrbWVtX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCAwMjgwZWVlLi5jNjVhNGVkIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0zNzQsMTQgKzM3NCw4IEBACiBzdGF0aWMgdm9pZCBzZXRfdHJhY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwKIAkJCWVudW0gdHJhY2tfaXRlbSBhbGxvYywgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB0cmFjayAqcDsKKwlzdHJ1Y3QgdHJhY2sgKnAgPSBnZXRfdHJhY2socywgb2JqZWN0LCBhbGxvYyk7CiAKLQlpZiAocy0+b2Zmc2V0KQotCQlwID0gb2JqZWN0ICsgcy0+b2Zmc2V0ICsgc2l6ZW9mKHZvaWQgKik7Ci0JZWxzZQotCQlwID0gb2JqZWN0ICsgcy0+aW51c2U7Ci0KLQlwICs9IGFsbG9jOwogCWlmIChhZGRyKSB7CiAJCXAtPmFkZHIgPSBhZGRyOwogCQlwLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0xMzM1LDcgKzEzMjksNyBAQAogCQluID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpOwogCiAJCWlmIChuICYmIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgZmxhZ3MpICYmCi0JCQkJbi0+bnJfcGFydGlhbCA+IG4tPm1pbl9wYXJ0aWFsKSB7CisJCQkJbi0+bnJfcGFydGlhbCA+IHMtPm1pbl9wYXJ0aWFsKSB7CiAJCQlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShuKTsKIAkJCWlmIChwYWdlKQogCQkJCXJldHVybiBwYWdlOwpAQCAtMTM4Nyw3ICsxMzgxLDcgQEAKIAkJc2xhYl91bmxvY2socGFnZSk7CiAJfSBlbHNlIHsKIAkJc3RhdChjLCBERUFDVElWQVRFX0VNUFRZKTsKLQkJaWYgKG4tPm5yX3BhcnRpYWwgPCBuLT5taW5fcGFydGlhbCkgeworCQlpZiAobi0+bnJfcGFydGlhbCA8IHMtPm1pbl9wYXJ0aWFsKSB7CiAJCQkvKgogCQkJICogQWRkaW5nIGFuIGVtcHR5IHNsYWIgdG8gdGhlIHBhcnRpYWwgc2xhYnMgaW4gb3JkZXIKIAkJCSAqIHRvIGF2b2lkIHBhZ2UgYWxsb2NhdG9yIG92ZXJoZWFkLiBUaGlzIHNsYWIgbmVlZHMKQEAgLTE3MjQsNyArMTcxOCw3IEBACiAJYyA9IGdldF9jcHVfc2xhYihzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CiAJaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX0RFQlVHX09CSkVDVFMpKQotCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKKwkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CiAJaWYgKGxpa2VseShwYWdlID09IGMtPnBhZ2UgJiYgYy0+bm9kZSA+PSAwKSkgewogCQlvYmplY3RbYy0+b2Zmc2V0XSA9IGMtPmZyZWVsaXN0OwogCQljLT5mcmVlbGlzdCA9IG9iamVjdDsKQEAgLTE4NDQsNiArMTgzOCw3IEBACiAJaW50IG9yZGVyOwogCWludCBtaW5fb2JqZWN0czsKIAlpbnQgZnJhY3Rpb247CisJaW50IG1heF9vYmplY3RzOwogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGZpbmQgYmVzdCBjb25maWd1cmF0aW9uIGZvciBhIHNsYWIuIFRoaXMKQEAgLTE4NTYsNiArMTg1MSw5IEBACiAJbWluX29iamVjdHMgPSBzbHViX21pbl9vYmplY3RzOwogCWlmICghbWluX29iamVjdHMpCiAJCW1pbl9vYmplY3RzID0gNCAqIChmbHMobnJfY3B1X2lkcykgKyAxKTsKKwltYXhfb2JqZWN0cyA9IChQQUdFX1NJWkUgPDwgc2x1Yl9tYXhfb3JkZXIpL3NpemU7CisJbWluX29iamVjdHMgPSBtaW4obWluX29iamVjdHMsIG1heF9vYmplY3RzKTsKKwogCXdoaWxlIChtaW5fb2JqZWN0cyA+IDEpIHsKIAkJZnJhY3Rpb24gPSAxNjsKIAkJd2hpbGUgKGZyYWN0aW9uID49IDQpIHsKQEAgLTE4NjUsNyArMTg2Myw3IEBACiAJCQkJcmV0dXJuIG9yZGVyOwogCQkJZnJhY3Rpb24gLz0gMjsKIAkJfQotCQltaW5fb2JqZWN0cyAvPSAyOworCQltaW5fb2JqZWN0cyAtLTsKIAl9CiAKIAkvKgpAQCAtMTkyOCwxNyArMTkyNiw2IEBACiBpbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKIAluLT5ucl9wYXJ0aWFsID0gMDsKLQotCS8qCi0JICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKLQkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KLQkgKi8KLQluLT5taW5fcGFydGlhbCA9IGlsb2cyKHMtPnNpemUpOwotCWlmIChuLT5taW5fcGFydGlhbCA8IE1JTl9QQVJUSUFMKQotCQluLT5taW5fcGFydGlhbCA9IE1JTl9QQVJUSUFMOwotCWVsc2UgaWYgKG4tPm1pbl9wYXJ0aWFsID4gTUFYX1BBUlRJQUwpCi0JCW4tPm1pbl9wYXJ0aWFsID0gTUFYX1BBUlRJQUw7Ci0KIAlzcGluX2xvY2tfaW5pdCgmbi0+bGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbi0+cGFydGlhbCk7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKQEAgLTIxODEsNiArMjE2OCwxNSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNldF9taW5fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdW5zaWduZWQgbG9uZyBtaW4pCit7CisJaWYgKG1pbiA8IE1JTl9QQVJUSUFMKQorCQltaW4gPSBNSU5fUEFSVElBTDsKKwllbHNlIGlmIChtaW4gPiBNQVhfUEFSVElBTCkKKwkJbWluID0gTUFYX1BBUlRJQUw7CisJcy0+bWluX3BhcnRpYWwgPSBtaW47Cit9CisKIC8qCiAgKiBjYWxjdWxhdGVfc2l6ZXMoKSBkZXRlcm1pbmVzIHRoZSBvcmRlciBhbmQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkYXRhIHdpdGhpbgogICogYSBzbGFiIG9iamVjdC4KQEAgLTIzMTksNiArMjMxNSwxMSBAQAogCWlmICghY2FsY3VsYXRlX3NpemVzKHMsIC0xKSkKIAkJZ290byBlcnJvcjsKIAorCS8qCisJICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKKwkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KKwkgKi8KKwlzZXRfbWluX3BhcnRpYWwocywgaWxvZzIocy0+c2l6ZSkpOwogCXMtPnJlZmNvdW50ID0gMTsKICNpZmRlZiBDT05GSUdfTlVNQQogCXMtPnJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyA9IDEwMDA7CkBAIC0yNDc1LDcgKzI0NzYsNyBAQAogICoJCUttYWxsb2Mgc3Vic3lzdGVtCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbUEFHRV9TSElGVCArIDFdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tTTFVCX1BBR0VfU0hJRlRdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBFWFBPUlRfU1lNQk9MKGttYWxsb2NfY2FjaGVzKTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9taW5fb3JkZXIoY2hhciAqc3RyKQpAQCAtMjUzNyw3ICsyNTM4LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RNQQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWFsbG9jX2NhY2hlc19kbWFbUEFHRV9TSElGVCArIDFdOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWFsbG9jX2NhY2hlc19kbWFbU0xVQl9QQUdFX1NISUZUXTsKIAogc3RhdGljIHZvaWQgc3lzZnNfYWRkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewpAQCAtMjY1OCw3ICsyNjU5LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBmbGFncyk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwpAQCAtMjY4Niw3ICsyNjg3LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBmbGFncyk7CkBAIC0yOTg2LDcgKzI5ODcsNyBAQAogCQljYWNoZXMrKzsKIAl9CiAKLQlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8PSBQQUdFX1NISUZUOyBpKyspIHsKKwlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKSB7CiAJCWNyZWF0ZV9rbWFsbG9jX2NhY2hlKCZrbWFsbG9jX2NhY2hlc1tpXSwKIAkJCSJrbWFsbG9jIiwgMSA8PCBpLCBHRlBfS0VSTkVMKTsKIAkJY2FjaGVzKys7CkBAIC0zMDIzLDcgKzMwMjQsNyBAQAogCXNsYWJfc3RhdGUgPSBVUDsKIAogCS8qIFByb3ZpZGUgdGhlIGNvcnJlY3Qga21hbGxvYyBuYW1lcyBub3cgdGhhdCB0aGUgY2FjaGVzIGFyZSB1cCAqLwotCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDw9IFBBR0VfU0hJRlQ7IGkrKykKKwlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKQogCQlrbWFsbG9jX2NhY2hlc1tpXS4gbmFtZSA9CiAJCQlrYXNwcmludGYoR0ZQX0tFUk5FTCwgImttYWxsb2MtJWQiLCAxIDw8IGkpOwogCkBAIC0zMjIzLDcgKzMyMjQsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGdmcGZsYWdzKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBnZnBmbGFncyk7CkBAIC0zMjM5LDcgKzMyNDAsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlX25vZGUoc2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKQEAgLTM4MzYsNiArMzgzNywyNiBAQAogfQogU0xBQl9BVFRSKG9yZGVyKTsKIAorc3RhdGljIHNzaXplX3QgbWluX3BhcnRpYWxfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgcy0+bWluX3BhcnRpYWwpOworfQorCitzdGF0aWMgc3NpemVfdCBtaW5fcGFydGlhbF9zdG9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgbWluOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbWluKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X21pbl9wYXJ0aWFsKHMsIG1pbik7CisJcmV0dXJuIGxlbmd0aDsKK30KK1NMQUJfQVRUUihtaW5fcGFydGlhbCk7CisKIHN0YXRpYyBzc2l6ZV90IGN0b3Jfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQogewogCWlmIChzLT5jdG9yKSB7CkBAIC00MTUxLDYgKzQxNzIsNyBAQAogCSZvYmplY3Rfc2l6ZV9hdHRyLmF0dHIsCiAJJm9ianNfcGVyX3NsYWJfYXR0ci5hdHRyLAogCSZvcmRlcl9hdHRyLmF0dHIsCisJJm1pbl9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmb2JqZWN0c19hdHRyLmF0dHIsCiAJJm9iamVjdHNfcGFydGlhbF9hdHRyLmF0dHIsCiAJJnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLApkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IDUyMGE3NTkuLmFmNTgzMjQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTE1Miw4ICsxNTMsOCBAQAogICoKICAqIEllLiBwdGUgYXQgYWRkcitOKlBBR0VfU0laRSBzaGFsbCBwb2ludCB0byBwZm4gY29ycmVzcG9uZGluZyB0byBwYWdlc1tOXQogICovCi1zdGF0aWMgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3BhZ2VfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXBnZF90ICpwZ2Q7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTY5LDEzICsxNzAsMjIgQEAKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCWZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCk7CiAKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gbnI7CiB9CiAKK3N0YXRpYyBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdm1hcF9wYWdlX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCwgcHJvdCwgcGFnZXMpOworCWZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KQogewogCS8qCkBAIC05OTAsNiArMTAwMCwzMiBAQAogfQogRVhQT1JUX1NZTUJPTCh2bV9tYXBfcmFtKTsKIAorLyoqCisgKiB2bV9hcmVhX3JlZ2lzdGVyX2Vhcmx5IC0gcmVnaXN0ZXIgdm1hcCBhcmVhIGVhcmx5IGR1cmluZyBib290CisgKiBAdm06IHZtX3N0cnVjdCB0byByZWdpc3RlcgorICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlZ2lzdGVyIGtlcm5lbCB2bSBhcmVhIGJlZm9yZQorICogdm1hbGxvY19pbml0KCkgaXMgY2FsbGVkLiAgQHZtLT5zaXplIGFuZCBAdm0tPmZsYWdzIHNob3VsZCBjb250YWluCisgKiBwcm9wZXIgdmFsdWVzIG9uIGVudHJ5IGFuZCBvdGhlciBmaWVsZHMgc2hvdWxkIGJlIHplcm8uICBPbiByZXR1cm4sCisgKiB2bS0+YWRkciBjb250YWlucyB0aGUgYWxsb2NhdGVkIGFkZHJlc3MuCisgKgorICogRE8gTk9UIFVTRSBUSElTIEZVTkNUSU9OIFVOTEVTUyBZT1UgS05PVyBXSEFUIFlPVSdSRSBET0lORy4KKyAqLwordm9pZCBfX2luaXQgdm1fYXJlYV9yZWdpc3Rlcl9lYXJseShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgc2l6ZV90IGFsaWduKQoreworCXN0YXRpYyBzaXplX3Qgdm1faW5pdF9vZmYgX19pbml0ZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gQUxJR04oVk1BTExPQ19TVEFSVCArIHZtX2luaXRfb2ZmLCBhbGlnbik7CisJdm1faW5pdF9vZmYgPSBQRk5fQUxJR04oYWRkciArIHZtLT5zaXplKSAtIFZNQUxMT0NfU1RBUlQ7CisKKwl2bS0+YWRkciA9ICh2b2lkICopYWRkcjsKKworCXZtLT5uZXh0ID0gdm1saXN0OworCXZtbGlzdCA9IHZtOworfQorCiB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKQEAgLTEwMTcsNiArMTA1Myw1OCBAQAogCXZtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlOwogfQogCisvKioKKyAqIG1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCAtIG1hcCBrZXJuZWwgVk0gYXJlYSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFnZXMKKyAqIEBhZGRyOiBzdGFydCBvZiB0aGUgVk0gYXJlYSB0byBtYXAKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBWTSBhcmVhIHRvIG1hcAorICogQHByb3Q6IHBhZ2UgcHJvdGVjdGlvbiBmbGFncyB0byB1c2UKKyAqIEBwYWdlczogcGFnZXMgdG8gbWFwCisgKgorICogTWFwIFBGTl9VUChAc2l6ZSkgcGFnZXMgYXQgQGFkZHIuICBUaGUgVk0gYXJlYSBAYWRkciBhbmQgQHNpemUKKyAqIHNwZWNpZnkgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgdXNpbmcgZ2V0X3ZtX2FyZWEoKSBhbmQgaXRzCisgKiBmcmllbmRzLgorICoKKyAqIE5PVEU6CisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGRvIGFueSBjYWNoZSBmbHVzaGluZy4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGZsdXNoX2NhY2hlX3ZtYXAoKSBvbiB0by1iZS1tYXBwZWQgYXJlYXMKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUkVUVVJOUzoKKyAqIFRoZSBudW1iZXIgb2YgcGFnZXMgbWFwcGVkIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgbWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCXJldHVybiB2bWFwX3BhZ2VfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgc2l6ZSwgcHJvdCwgcGFnZXMpOworfQorCisvKioKKyAqIHVubWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoIC0gdW5tYXAga2VybmVsIFZNIGFyZWEKKyAqIEBhZGRyOiBzdGFydCBvZiB0aGUgVk0gYXJlYSB0byB1bm1hcAorICogQHNpemU6IHNpemUgb2YgdGhlIFZNIGFyZWEgdG8gdW5tYXAKKyAqCisgKiBVbm1hcCBQRk5fVVAoQHNpemUpIHBhZ2VzIGF0IEBhZGRyLiAgVGhlIFZNIGFyZWEgQGFkZHIgYW5kIEBzaXplCisgKiBzcGVjaWZ5IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIHVzaW5nIGdldF92bV9hcmVhKCkgYW5kIGl0cworICogZnJpZW5kcy4KKyAqCisgKiBOT1RFOgorICogVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBkbyBhbnkgY2FjaGUgZmx1c2hpbmcuICBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmbHVzaF9jYWNoZV92dW5tYXAoKSBvbiB0by1iZS1tYXBwZWQgYXJlYXMKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoKSBhZnRlci4KKyAqLwordm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2dW5tYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7Cit9CisKKy8qKgorICogdW5tYXBfa2VybmVsX3JhbmdlIC0gdW5tYXAga2VybmVsIFZNIGFyZWEgYW5kIGZsdXNoIGNhY2hlIGFuZCBUTEIKKyAqIEBhZGRyOiBzdGFydCBvZiB0aGUgVk0gYXJlYSB0byB1bm1hcAorICogQHNpemU6IHNpemUgb2YgdGhlIFZNIGFyZWEgdG8gdW5tYXAKKyAqCisgKiBTaW1pbGFyIHRvIHVubWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKCkgYnV0IGZsdXNoZXMgdmNhY2hlIGJlZm9yZQorICogdGhlIHVubWFwcGluZyBhbmQgdGxiIGFmdGVyLgorICovCiB2b2lkIHVubWFwX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgKyBzaXplOwpAQCAtMTI2Nyw2ICsxMzU1LDcgQEAKIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpCiB7CiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKKwltaWdodF9zbGVlcCgpOwogCV9fdnVubWFwKGFkZHIsIDApOwogfQogRVhQT1JUX1NZTUJPTCh2dW5tYXApOwpAQCAtMTI4Niw2ICsxMzc1LDggQEAKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChjb3VudCA+IG51bV9waHlzcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvODAyL3BzbmFwLmMgYi9uZXQvODAyL3BzbmFwLmMKaW5kZXggNzA5ODBiYS4uNmZlYTA3NSAxMDA2NDQKLS0tIGEvbmV0LzgwMi9wc25hcC5jCisrKyBiL25ldC84MDIvcHNuYXAuYwpAQCAtMjksNyArMjksNyBAQAogLyoKICAqCUZpbmQgYSBzbmFwIGNsaWVudCBieSBtYXRjaGluZyB0aGUgNSBieXRlcy4KICAqLwotc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqZmluZF9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjKQorc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqZmluZF9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjKQogewogCXN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG8gPSBOVUxMLCAqcDsKIApAQCAtNTEsNyArNTEsNyBAQAogCWludCByYyA9IDE7CiAJc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90bzsKIAlzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHNuYXBfcGFja2V0X3R5cGUgPSB7Ci0JCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTkFQKSwKKwkJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9TTkFQKSwKIAl9OwogCiAJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgNSkpKQpAQCAtOTUsMTUgKzk1LDE2IEBACiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3NuYXBfY2xpZW50KTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9zbmFwX2NsaWVudCk7CiAKLXN0YXRpYyBjaGFyIHNuYXBfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgc25hcF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiU05BUCAtIHVuYWJsZSB0byByZWdpc3RlciB3aXRoIDgwMi4yXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBzbmFwX2luaXQodm9pZCkKIHsKIAlzbmFwX3NhcCA9IGxsY19zYXBfb3BlbigweEFBLCBzbmFwX3Jjdik7Ci0KLQlpZiAoIXNuYXBfc2FwKQorCWlmICghc25hcF9zYXApIHsKIAkJcHJpbnRrKHNuYXBfZXJyX21zZyk7CisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjEsNyArMTIyLDcgQEAKIC8qCiAgKglSZWdpc3RlciBTTkFQIGNsaWVudHMuIFdlIGRvbid0IHlldCB1c2UgdGhpcyBmb3IgSVAuCiAgKi8KLXN0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYywKK3N0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYywKIAkJCQkJICAgIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosCiAJCQkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkJCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwKQEAgLTEzNiw3ICsxMzcsNyBAQAogCiAJcHJvdG8gPSBrbWFsbG9jKHNpemVvZigqcHJvdG8pLCBHRlBfQVRPTUlDKTsKIAlpZiAocHJvdG8pIHsKLQkJbWVtY3B5KHByb3RvLT50eXBlLCBkZXNjLDUpOworCQltZW1jcHkocHJvdG8tPnR5cGUsIGRlc2MsIDUpOwogCQlwcm90by0+cmN2ZnVuYwkJPSByY3ZmdW5jOwogCQlwcm90by0+aGVhZGVyX2xlbmd0aAk9IDUgKyAzOyAvKiBzbmFwICsgODAyLjIgKi8KIAkJcHJvdG8tPnJlcXVlc3QJCT0gc25hcF9yZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IGY0N2FlMjguLmU3ZWIxMzAgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTQ4Niw2ICs0ODYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqcmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmcmlmX2xvY2spCiB7CiAJc3Bpbl9sb2NrX2lycSgmcmlmX2xvY2spOwogCkBAIC01MTcsNiArNTE4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmlmX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJnJpZl9sb2NrKQogewogCXNwaW5fdW5sb2NrX2lycSgmcmlmX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggNDFlOGY2NS4uMmI3MzkwZSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC01MSw4ICs1MSw4IEBACiBzdGF0aWMgY29uc3QgY2hhciB2bGFuX2NvcHlyaWdodFtdID0gIkJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPiI7CiBzdGF0aWMgY29uc3QgY2hhciB2bGFuX2J1Z2d5cmlnaHRbXSA9ICJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+IjsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB2bGFuX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSwKIAkuZnVuYyA9IHZsYW5fc2tiX3JlY3YsIC8qIFZMQU4gcmVjZWl2ZSBtZXRob2QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCAyODg2ZDJmLi42NTRlNDVmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCkBAIC04OSwzOCArODksMjcgQEAKIAkJZ290byBkcm9wOwogCiAJZm9yIChwID0gbmFwaS0+Z3JvX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSBwLT5kZXYgPT0gc2tiLT5kZXY7CisJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPQorCQkJcC0+ZGV2ID09IHNrYi0+ZGV2ICYmICFjb21wYXJlX2V0aGVyX2hlYWRlcigKKwkJCQlza2JfbWFjX2hlYWRlcihwKSwgc2tiX2dyb19tYWNfaGVhZGVyKHNrYikpOwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggPSAwOwogCX0KIAogCXJldHVybiBkZXZfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKIAogZHJvcDoKLQlyZXR1cm4gMjsKKwlyZXR1cm4gR1JPX0RST1A7CiB9CiAKIGludCB2bGFuX2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCwKIAkJICAgICB1bnNpZ25lZCBpbnQgdmxhbl90Y2ksIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOworCWlmIChuZXRwb2xsX3J4X29uKHNrYikpCisJCXJldHVybiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBncnAsIHZsYW5fdGNpKTsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCXJldHVybiBORVRfUlhfRFJPUDsKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOwogCi0Jc3dpdGNoICh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSkgewotCWNhc2UgLTE6Ci0JCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCi0JY2FzZSAyOgotCQllcnIgPSBORVRfUlhfRFJPUDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIDE6Ci0JCWtmcmVlX3NrYihza2IpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX3NrYl9maW5pc2godmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYiksIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX3JlY2VpdmUpOwogCkBAIC0xMjgsMzAgKzExNywxNCBAQAogCQkgICB1bnNpZ25lZCBpbnQgdmxhbl90Y2ksIHN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmFwaV9mcmFnaW5mb19za2IobmFwaSwgaW5mbyk7Ci0JaW50IGVyciA9IE5FVF9SWF9EUk9QOwogCiAJaWYgKCFza2IpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQlpZiAobmV0cG9sbF9yZWNlaXZlX3NrYihza2IpKQotCQlnb3RvIG91dDsKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgZ3JwLCB2bGFuX3RjaSk7CiAKLQllcnIgPSBORVRfUlhfU1VDQ0VTUzsKLQotCXN3aXRjaCAodmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYikpIHsKLQljYXNlIC0xOgotCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCWNhc2UgMjoKLQkJZXJyID0gTkVUX1JYX0RST1A7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JY2FzZSAxOgotCQluYXBpX3JldXNlX3NrYihuYXBpLCBza2IpOwotCQlicmVhazsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX2ZyYWdzX2ZpbmlzaChuYXBpLCBza2IsCisJCQkJIHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmxhbl9ncm9fZnJhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2ZkLmMgYi9uZXQvOXAvdHJhbnNfZmQuYwppbmRleCAxZGYwMzU2Li5jNjEzZWQwOCAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2ZkLmMKKysrIGIvbmV0LzlwL3RyYW5zX2ZkLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCW9sZGZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKGdldF9kcygpKTsKIAkvKiBUaGUgY2FzdCB0byBhIHVzZXIgcG9pbnRlciBpcyB2YWxpZCBkdWUgdG8gdGhlIHNldF9mcygpICovCi0JcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7CisJcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKF9fZm9yY2Ugdm9pZCBfX3VzZXIgKil2LCBsZW4sICZ0cy0+d3ItPmZfcG9zKTsKIAlzZXRfZnMob2xkZnMpOwogCiAJaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IGNkYjhmZGUuLmVjOTNlN2UgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBtZW51Y29uZmlnIE5FVAogCWJvb2wgIk5ldHdvcmtpbmcgc3VwcG9ydCIKKwlzZWxlY3QgTkxBVFRSCiAJLS0taGVscC0tLQogCSAgVW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZS4KIAkgIFRoZSByZWFzb24gaXMgdGhhdCBzb21lIHByb2dyYW1zIG5lZWQga2VybmVsIG5ldHdvcmtpbmcgc3VwcG9ydCBldmVuCkBAIC0yNCw5ICsyNSw2IEBACiAKIG1lbnUgIk5ldHdvcmtpbmcgb3B0aW9ucyIKIAotY29uZmlnIENPTVBBVF9ORVRfREVWX09QUwotICAgICAgIGRlZl9ib29sIHkKLQogc291cmNlICJuZXQvcGFja2V0L0tjb25maWciCiBzb3VyY2UgIm5ldC91bml4L0tjb25maWciCiBzb3VyY2UgIm5ldC94ZnJtL0tjb25maWciCkBAIC0xNzEsNiArMTY5LDcgQEAKIAogc291cmNlICJuZXQvZGNjcC9LY29uZmlnIgogc291cmNlICJuZXQvc2N0cC9LY29uZmlnIgorc291cmNlICJuZXQvcmRzL0tjb25maWciCiBzb3VyY2UgIm5ldC90aXBjL0tjb25maWciCiBzb3VyY2UgIm5ldC9hdG0vS2NvbmZpZyIKIHNvdXJjZSAibmV0LzgwMi9LY29uZmlnIgpAQCAtMTg1LDYgKzE4NCw3IEBACiBzb3VyY2UgIm5ldC9sYXBiL0tjb25maWciCiBzb3VyY2UgIm5ldC9lY29uZXQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3dhbnJvdXRlci9LY29uZmlnIgorc291cmNlICJuZXQvcGhvbmV0L0tjb25maWciCiBzb3VyY2UgIm5ldC9zY2hlZC9LY29uZmlnIgogc291cmNlICJuZXQvZGNiL0tjb25maWciCiAKQEAgLTIyMCw2ICsyMjAsMTcgQEAKIAlUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRjcF9wcm9iZS4KIAorY29uZmlnIE5FVF9EUk9QX01PTklUT1IKKwlib29sZWFuICJOZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2UiCisJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTCAmJiBUUkFDRVBPSU5UUworCS0tLWhlbHAtLS0KKwlUaGlzIGZlYXR1cmUgcHJvdmlkZXMgYW4gYWxlcnRpbmcgc2VydmljZSB0byB1c2Vyc3BhY2UgaW4gdGhlCisJZXZlbnQgdGhhdCBwYWNrZXRzIGFyZSBkaXNjYXJkZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suICBBbGVydHMKKwlhcmUgYnJvYWRjYXN0IHZpYSBuZXRsaW5rIHNvY2tldCB0byBhbnkgbGlzdGVuaW5nIHVzZXIgc3BhY2UKKwlwcm9jZXNzLiAgSWYgeW91IGRvbid0IG5lZWQgbmV0d29yayBkcm9wIGFsZXJ0cywgb3IgaWYgeW91IGFyZSBvaworCWp1c3QgY2hlY2tpbmcgdGhlIHZhcmlvdXMgcHJvYyBmaWxlcyBhbmQgb3RoZXIgdXRpbGl0aWVzIGZvcgorCWRyb3Agc3RhdGlzdGljcywgc2F5IE4gaGVyZS4KKwogZW5kbWVudQogCiBlbmRtZW51CkBAIC0yMjksNyArMjQwLDYgQEAKIHNvdXJjZSAibmV0L2lyZGEvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2JsdWV0b290aC9LY29uZmlnIgogc291cmNlICJuZXQvcnhycGMvS2NvbmZpZyIKLXNvdXJjZSAibmV0L3Bob25ldC9LY29uZmlnIgogCiBjb25maWcgRklCX1JVTEVTCiAJYm9vbApkaWZmIC0tZ2l0IGEvbmV0L01ha2VmaWxlIGIvbmV0L01ha2VmaWxlCmluZGV4IDBmY2NlODkuLjllMDBhNTUgMTAwNjQ0Ci0tLSBhL25ldC9NYWtlZmlsZQorKysgYi9uZXQvTWFrZWZpbGUKQEAgLTQ5LDYgKzQ5LDcgQEAKIGVuZGlmCiBvYmotJChDT05GSUdfSVBfRENDUCkJCSs9IGRjY3AvCiBvYmotJChDT05GSUdfSVBfU0NUUCkJCSs9IHNjdHAvCitvYmotJChDT05GSUdfUkRTKQkJKz0gcmRzLwogb2JqLXkJCQkJKz0gd2lyZWxlc3MvCiBvYmotJChDT05GSUdfTUFDODAyMTEpCQkrPSBtYWM4MDIxMS8KIG9iai0kKENPTkZJR19USVBDKQkJKz0gdGlwYy8KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGRwLmMgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCmluZGV4IDVhYmNlMDcuLmQ2YTkyNDMgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGRwLmMKKysrIGIvbmV0L2FwcGxldGFsay9kZHAuYwpAQCAtMTU3MSwxNCArMTU3MSwxMCBAQAogCQkgICAgdXNhdC0+c2F0X2ZhbWlseSAhPSBBRl9BUFBMRVRBTEspCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBuZXRhdGFsayBkb2Vzbid0IGltcGxlbWVudCB0aGlzIGNoZWNrICovCisJCS8qIG5ldGF0YWxrIGRpZG4ndCBpbXBsZW1lbnQgdGhpcyBjaGVjayAqLwogCQlpZiAodXNhdC0+c2F0X2FkZHIuc19ub2RlID09IEFUQUREUl9CQ0FTVCAmJgogCQkgICAgIXNvY2tfZmxhZyhzaywgU09DS19CUk9BRENBU1QpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTT19CUk9BRENBU1Q6IEZpeCB5b3VyIG5ldGF0YWxrIGFzICIKLQkJCQkJICJpdCB3aWxsIGJyZWFrIGJlZm9yZSAyLjJcbiIpOwotI2lmIDAKIAkJCXJldHVybiAtRVBFUk07Ci0jZW5kaWYKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKQpAQCAtMTg2MCwxMyArMTg1NiwxMyBAQAogCS5ub3RpZmllcl9jYWxsCT0gZGRwX2RldmljZV9ldmVudCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbHRhbGtfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9MT0NBTFRBTEspLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsdGFsa19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCQk9IGNwdV90b19iZTE2KEVUSF9QX0xPQ0FMVEFMSyksCiAJLmZ1bmMJCT0gbHRhbGtfcmN2LAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHB0YWxrX3BhY2tldF90eXBlID0gewotCS50eXBlCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQVEFMSyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcHRhbGtfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBUQUxLKSwKIAkuZnVuYwkJPSBhdGFsa19yY3YsCiB9OwogCkBAIC0xODc3LDcgKzE4NzMsNyBAQAogRVhQT1JUX1NZTUJPTChhdHJ0cl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0woYXRhbGtfZmluZF9kZXZfYWRkcik7CiAKLXN0YXRpYyBjaGFyIGF0YWxrX2Vycl9zbmFwW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBhdGFsa19lcnJfc25hcFtdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIlVuYWJsZSB0byByZWdpc3RlciBERFAgd2l0aCBTTkFQLlxuIjsKIAogLyogQ2FsbGVkIGJ5IHByb3RvLmMgb24ga2VybmVsIHN0YXJ0IHVwICovCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2Rldi5jIGIvbmV0L2FwcGxldGFsay9kZXYuYwppbmRleCBkODU2YTYyLi43MjI3N2Q3IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2Rldi5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGV2LmMKQEAgLTksMjIgKzksMjAgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9sdGFsay5oPgogCisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogc3RhdGljIGludCBsdGFsa19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0KLXN0YXRpYyBpbnQgbHRhbGtfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBsdGFsa19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGxvY2FsdGFsay1nZW5lcmljIHZhbHVlcy4gKi8KIAorI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAlkZXYtPmNoYW5nZV9tdHUJCT0gbHRhbGtfY2hhbmdlX210dTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAJPSBsdGFsa19tYWNfYWRkcjsKKyNlbmRpZgogCiAJZGV2LT50eXBlCQk9IEFSUEhSRF9MT0NBTFRMSzsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiAJPSBMVEFMS19ITEVOOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9icjI2ODQuYyBiL25ldC9hdG0vYnIyNjg0LmMKaW5kZXggZWE5NDM4ZmMuLjMzNGZjZDQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYnIyNjg0LmMKKysrIGIvbmV0L2F0bS9icjI2ODQuYwpAQCAtODMsNyArODMsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYnIyNjg0X2RldnM7CiAJaW50IG51bWJlcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJydmNjczsJLyogb25lIGRldmljZSA8PT4gb25lIHZjYyAoYmVmb3JlIHhtYXMpICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJaW50IG1hY193YXNfc2V0OwogCWVudW0gYnIyNjg0X3BheWxvYWQgcGF5bG9hZDsKIH07CkBAIC0xNDgsOSArMTQ3LDEwIEBACiAgKiB0aGUgd2F5IGZvciBtdWx0aXBsZSB2Y2MncyBwZXIgaXRmLiAgUmV0dXJucyB0cnVlIGlmIHdlIGNhbiBzZW5kLAogICogb3RoZXJ3aXNlIGZhbHNlCiAgKi8KLXN0YXRpYyBpbnQgYnIyNjg0X3htaXRfdmNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicjI2ODRfZGV2ICpicmRldiwKK3N0YXRpYyBpbnQgYnIyNjg0X3htaXRfdmNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2MpCiB7CisJc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2ID0gQlJQUklWKGRldik7CiAJc3RydWN0IGF0bV92Y2MgKmF0bXZjYzsKIAlpbnQgbWluaGVhZHJvb20gPSAoYnJ2Y2MtPmVuY2FwcyA9PSBlX2xsYykgPyAxMCA6IDI7CiAKQEAgLTIxMSw4ICsyMTEsOCBAQAogCX0KIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0oYXRtdmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IGF0bXZjYy0+YXRtX29wdGlvbnM7Ci0JYnJkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlicmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlhdG12Y2MtPnNlbmQoYXRtdmNjLCBza2IpOwogCXJldHVybiAxOwogfQpAQCAtMjMzLDE0ICsyMzMsMTQgQEAKIAlicnZjYyA9IHBpY2tfb3V0Z29pbmdfdmNjKHNrYiwgYnJkZXYpOwogCWlmIChicnZjYyA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJubyB2Y2MgYXR0YWNoZWQgdG8gZGV2ICVzXG4iLCBkZXYtPm5hbWUpOwotCQlicmRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWJyZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCS8qIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZWFkX3VubG9jaygmZGV2c19sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghYnIyNjg0X3htaXRfdmNjKHNrYiwgYnJkZXYsIGJydmNjKSkgeworCWlmICghYnIyNjg0X3htaXRfdmNjKHNrYiwgZGV2LCBicnZjYykpIHsKIAkJLyoKIAkJICogV2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBuZXRpZl8qX3F1ZXVlKCkgaGVyZSwgYnV0IHRoYXQKIAkJICogaW52b2x2ZXMgYWRkZWQgY29tcGxpY2F0aW9uLiAgV2UgbmVlZCB0byB3YWxrIGJlZm9yZQpAQCAtMjQ4LDI3ICsyNDgsMjAgQEAKIAkJICoKIAkJICogRG9uJ3QgZnJlZSBoZXJlISB0aGlzIHBvaW50ZXIgbWlnaHQgYmUgbm8gbG9uZ2VyIHZhbGlkIQogCQkgKi8KLQkJYnJkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlicmRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCX0KIAlyZWFkX3VubG9jaygmZGV2c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpicjI2ODRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHJfZGVidWcoImJyMjY4NF9nZXRfc3RhdHNcbiIpOwotCXJldHVybiAmQlJQUklWKGRldiktPnN0YXRzOwotfQotCiAvKgogICogV2UgcmVtZW1iZXIgd2hlbiB0aGUgTUFDIGdldHMgc2V0LCBzbyB3ZSBkb24ndCBvdmVycmlkZSBpdCBsYXRlciB3aXRoCiAgKiB0aGUgRVNJIG9mIHRoZSBBVE0gY2FyZCBvZiB0aGUgZmlyc3QgVkMKICAqLwotc3RhdGljIGludCAoKm15X2V0aF9tYWNfYWRkcikgKHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgKik7CiBzdGF0aWMgaW50IGJyMjY4NF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewotCWludCBlcnIgPSBteV9ldGhfbWFjX2FkZHIoZGV2LCBwKTsKKwlpbnQgZXJyID0gZXRoX21hY19hZGRyKGRldiwgcCk7CiAJaWYgKCFlcnIpCiAJCUJSUFJJVihkZXYpLT5tYWNfd2FzX3NldCA9IDE7CiAJcmV0dXJuIGVycjsKQEAgLTQzMCwxNyArNDIzLDE3IEBACiAJLyogc2lnaCwgaW50ZXJmYWNlIGlzIGRvd24/ICovCiAJaWYgKHVubGlrZWx5KCEobmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSkKIAkJZ290byBkcm9wcGVkOwotCWJyZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JYnJkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCW5ldF9kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwluZXRfZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAltZW1zZXQoQVRNX1NLQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkpOwogCW5ldGlmX3J4KHNrYik7CiAJcmV0dXJuOwogCiBkcm9wcGVkOgotCWJyZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJbmV0X2Rldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWdvdG8gZnJlZV9za2I7CiBlcnJvcjoKLQlicmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJbmV0X2Rldi0+c3RhdHMucnhfZXJyb3JzKys7CiBmcmVlX3NrYjoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtNTMxLDggKzUyNCw4IEBACiAKIAkJc2tiLT5uZXh0ID0gc2tiLT5wcmV2ID0gTlVMTDsKIAkJYnIyNjg0X3B1c2goYXRtdmNjLCBza2IpOwotCQlCUlBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyAtPSBza2ItPmxlbjsKLQkJQlJQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cy0tOworCQlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgLT0gc2tiLT5sZW47CisJCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzLS07CiAKIAkJc2tiID0gbmV4dDsKIAl9CkBAIC01NDQsMTcgKzUzNywyMCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnIyNjg0X25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGJyMjY4NF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYnIyNjg0X21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyB2b2lkIGJyMjY4NF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldiA9IEJSUFJJVihuZXRkZXYpOwogCiAJZXRoZXJfc2V0dXAobmV0ZGV2KTsKLQlicmRldi0+bmV0X2RldiA9IG5ldGRldjsKIAotCW15X2V0aF9tYWNfYWRkciA9IG5ldGRldi0+c2V0X21hY19hZGRyZXNzOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gYnIyNjg0X21hY19hZGRyOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYnIyNjg0X3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBicjI2ODRfZ2V0X3N0YXRzOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZicjI2ODRfbmV0ZGV2X29wczsKIAogCUlOSVRfTElTVF9IRUFEKCZicmRldi0+YnJ2Y2NzKTsKIH0KQEAgLTU2NSwxMCArNTYxLDggQEAKIAlicmRldi0+bmV0X2RldiA9IG5ldGRldjsKIAogCW5ldGRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKLQlteV9ldGhfbWFjX2FkZHIgPSBuZXRkZXYtPnNldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJyMjY4NF9tYWNfYWRkcjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJyMjY4NF9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gYnIyNjg0X2dldF9zdGF0czsKKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZicjI2ODRfbmV0ZGV2X29wczsKIAluZXRkZXYtPmFkZHJfbGVuID0gMDsKIAluZXRkZXYtPm10dSA9IDE1MDA7CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggMmQzM2E4My4uM2RjMGEzYSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTIxNCwxNSArMjE0LDE1IEBACiAJCXNrYi0+cHJvdG9jb2wgPSAoKF9fYmUxNiAqKSBza2ItPmRhdGEpWzNdOwogCQlza2JfcHVsbChza2IsIFJGQzE0ODNMTENfTEVOKTsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkgewotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQljbGlwX2FycF9yY3Yoc2tiKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAljbGlwX3ZjYy0+bGFzdF91c2UgPSBqaWZmaWVzOwotCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCW1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTM3Miw3ICszNzIsNyBAQAogCWlmICghc2tiLT5kc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IHNrYi0+ZHN0ID09IE5VTExcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghc2tiLT5kc3QtPm5laWdoYm91cikgewpAQCAtMzgwLDEzICszODAsMTMgQEAKIAkJc2tiLT5kc3QtPm5laWdoYm91ciA9IGNsaXBfZmluZF9uZWlnaGJvdXIoc2tiLT5kc3QsIDEpOwogCQlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsJLyogbG9zdCB0aGF0IG9uZSAqLwotCQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiAwOwogCQl9CiAjZW5kaWYKIAkJcHJpbnRrKEtFUk5fRVJSICJjbGlwX3N0YXJ0X3htaXQ6IE5PIE5FSUdIQk9VUiAhXG4iKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KIAllbnRyeSA9IE5FSUdIMkVOVFJZKHNrYi0+ZHN0LT5uZWlnaGJvdXIpOwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJCQlza2JfcXVldWVfdGFpbCgmZW50cnktPm5laWdoLT5hcnBfcXVldWUsIHNrYik7CiAJCWVsc2UgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC00MjMsOCArNDIzLDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9zdGFydF94bWl0OiBYT0ZGLT5YT0ZGIHRyYW5zaXRpb25cbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JY2xpcF9wcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JY2xpcF9wcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCXZjYy0+c2VuZCh2Y2MsIHNrYik7CiAJaWYgKGF0bV9tYXlfc2VuZCh2Y2MsIDApKSB7CiAJCWVudHJ5LT52Y2NzLT54b2ZmID0gMDsKQEAgLTQ0MywxMSArNDQzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjbGlwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmUFJJVihkZXYpLT5zdGF0czsKLX0KLQogc3RhdGljIGludCBjbGlwX21raXAoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHRpbWVvdXQpCiB7CiAJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYzsKQEAgLTUwMSw4ICs0OTYsOCBAQAogCiAJCQlza2JfZ2V0KHNrYik7CiAJCQljbGlwX3B1c2godmNjLCBza2IpOwotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMtLTsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyAtPSBsZW47CisJCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cy0tOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzIC09IGxlbjsKIAkJCWtmcmVlX3NrYihza2IpOwogCQl9CiAKQEAgLTU1NywxMSArNTUyLDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNsaXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSBjbGlwX3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgdm9pZCBjbGlwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGlwX3N0YXJ0X3htaXQ7Ci0JLyogc2dfeG1pdCAuLi4gKi8KLQlkZXYtPmdldF9zdGF0cyA9IGNsaXBfZ2V0X3N0YXRzOworCWRldi0+bmV0ZGV2X29wcyA9ICZjbGlwX25ldGRldl9vcHM7CiAJZGV2LT50eXBlID0gQVJQSFJEX0FUTTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IFJGQzE0ODNMTENfTEVOOwogCWRldi0+bXR1ID0gUkZDMTYyNl9NVFU7CkBAIC02MjEsNyArNjE4LDcgQEAKIAl9CiAKIAkvKiBpZ25vcmUgbm9uLUNMSVAgZGV2aWNlcyAqLwotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0FUTSB8fCBkZXYtPmhhcmRfc3RhcnRfeG1pdCAhPSBjbGlwX3N0YXJ0X3htaXQpCisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+bmV0ZGV2X29wcyAhPSAmY2xpcF9uZXRkZXZfb3BzKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCBlNWUzMDE1Li4xOTliNmJiIDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTYyLDcgKzYyLDYgQEAKIHN0YXRpYyBpbnQgbGVjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxlY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsZWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxlY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX2FycF9maW5kKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKIAkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcik7CkBAIC0yMTgsMjggKzIxNywyOCBAQAogCiBzdGF0aWMgaW50IGxlY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JbWVtc2V0KCZwcml2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJbWVtc2V0KCZkZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1sZWNfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZAorbGVjX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisKIAlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gdmNjLT5hdG1fb3B0aW9uczsKIAogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrX2F0bSh2Y2MpLT5za193bWVtX2FsbG9jKTsKIAlpZiAodmNjLT5zZW5kKHZjYywgc2tiKSA8IDApIHsKLQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAotCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogfQogCiBzdGF0aWMgdm9pZCBsZWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjcwLDcgKzI2OSw3IEBACiAJcHJfZGVidWcoImxlY19zdGFydF94bWl0IGNhbGxlZFxuIik7CiAJaWYgKCFwcml2LT5sZWNkKSB7CiAJCXByaW50aygiJXM6Tm8gbGVjZCBhdHRhY2hlZFxuIiwgZGV2LT5uYW1lKTsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KQEAgLTM0NSw3ICszNDQsNyBAQAogCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlpZiAoc2tiMiA9PSBOVUxMKSB7Ci0JCQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJc2tiID0gc2tiMjsKQEAgLTM4MCw3ICszNzksNyBAQAogCQkJICAgICgiJXM6bGVjX3N0YXJ0X3htaXQ6IHR4IHF1ZXVlIGZ1bGwgb3Igbm8gYXJwIGVudHJ5LCBkcm9wcGluZywgIiwKIAkJCSAgICAgZGV2LT5uYW1lKTsKIAkJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOwotCQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0zOTIsMTAgKzM5MSwxMCBAQAogCXdoaWxlIChlbnRyeSAmJiAoc2tiMiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpKSB7CiAJCXByX2RlYnVnKCJsZWMuYzogZW1wdHlpbmcgdHggcXVldWUsICIpOwogCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgJXBNXG4iLCBsZWNfaC0+aF9kZXN0KTsKLQkJbGVjX3NlbmQodmNjLCBza2IyLCBwcml2KTsKKwkJbGVjX3NlbmQodmNjLCBza2IyKTsKIAl9CiAKLQlsZWNfc2VuZCh2Y2MsIHNrYiwgcHJpdik7CisJbGVjX3NlbmQodmNjLCBza2IpOwogCiAJaWYgKCFhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQlzdHJ1Y3QgbGVjX3ZjY19wcml2ICp2cHJpdiA9IExFQ19WQ0NfUFJJVih2Y2MpOwpAQCAtNDI3LDE1ICs0MjYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuCi0gKiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsZWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICYoKHN0cnVjdCBsZWNfcHJpdiAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0czsKLX0KLQogc3RhdGljIGludCBsZWNfYXRtX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTEyLDcgKzUwMiw3IEBACiAJCXByaXYtPmxhbmUyX29wcyA9IE5VTEw7CiAJCWlmIChwcml2LT5sYW5lX3ZlcnNpb24gPiAxKQogCQkJcHJpdi0+bGFuZTJfb3BzID0gJmxhbmUyX29wczsKLQkJaWYgKGRldi0+Y2hhbmdlX210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCisJCWlmIChkZXZfc2V0X210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCiAJCQlwcmludGsoIiVzOiBjaGFuZ2VfbXR1IHRvICVkIGZhaWxlZFxuIiwgZGV2LT5uYW1lLAogCQkJICAgICAgIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSk7CiAJCXByaXYtPmlzX3Byb3h5ID0gbWVzZy0+Y29udGVudC5jb25maWcuaXNfcHJveHk7CkBAIC02NzcsMTcgKzY2NywxOSBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsZWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGVjX29wZW4sCisJLm5kb19zdG9wCQk9IGxlY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGVjX3N0YXJ0X3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGxlY19jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBsZWNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGxlY19zZXRfbXVsdGljYXN0X2xpc3QsCit9OworCisKIHN0YXRpYyB2b2lkIGxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gbGVjX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gbGVjX29wZW47Ci0JZGV2LT5zdG9wID0gbGVjX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbGVjX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gbGVjX3R4X3RpbWVvdXQ7Ci0KLQlkZXYtPmdldF9zdGF0cyA9IGxlY19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsZWNfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwgPSBOVUxMOworCWRldi0+bmV0ZGV2X29wcyA9ICZsZWNfbmV0ZGV2X29wczsKIAlwcmludGsoIiVzOiBJbml0aWFsaXplZCFcbiIsIGRldi0+bmFtZSk7CiB9CiAKQEAgLTgxMCw4ICs4MDIsOCBAQAogCQllbHNlCiAjZW5kaWYKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQltZW1zZXQoQVRNX1NLQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkpOwogCQluZXRpZl9yeChza2IpOwogCX0KQEAgLTE4ODcsNyArMTg3OSw3IEBACiAJCQkJCWxlY19hcnBfaG9sZChlbnRyeSk7CiAJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCQkJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpICE9IE5VTEwpCi0JCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYiwgZW50cnktPnByaXYpOworCQkJCQkJbGVjX3NlbmQodmNjLCBza2IpOwogCQkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKIAkJCQkJbGVjX2FycF9wdXQoZW50cnkpOwpAQCAtMjMwNSw3ICsyMjk3LDcgQEAKIAkJCQlsZWNfYXJwX2hvbGQoZW50cnkpOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKLQkJCQkJbGVjX3NlbmQodmNjLCBza2IsIGVudHJ5LT5wcml2KTsKKwkJCQkJbGVjX3NlbmQodmNjLCBza2IpOwogCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CiAJCQkJbGVjX2FycF9wdXQoZW50cnkpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuaCBiL25ldC9hdG0vbGVjLmgKaW5kZXggMGQzNzY2OC4uOWQxNGQxOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuaAorKysgYi9uZXQvYXRtL2xlYy5oCkBAIC02OSw3ICs2OSw2IEBACiAjZGVmaW5lIExFQ19BUlBfVEFCTEVfU0laRSAxNgogCiBzdHJ1Y3QgbGVjX3ByaXYgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIHNob3J0IGxlY2lkOwkJCS8qIExlY2lkIG9mIHRoaXMgY2xpZW50ICovCiAJc3RydWN0IGhsaXN0X2hlYWQgbGVjX2FycF9lbXB0eV9vbmVzOwogCQkJCQkJLyogVXNlZCBmb3Igc3RvcmluZyBWQ0MncyB0aGF0IGRvbid0IGhhdmUgYSBNQUMgYWRkcmVzcyBhdHRhY2hlZCB5ZXQgKi8KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBjLmMgYi9uZXQvYXRtL21wYy5jCmluZGV4IDAzOWQ1Y2MuLmU1YmYxMTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBjLmMKKysrIGIvbmV0L2F0bS9tcGMuYwpAQCAtMjg2LDMzICsyODYsMzIgQEAKIHsKIAogCWRwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjOlxuIiwgbXBjLT5kZXYtPm5hbWUpOwotCWlmIChkZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGM6IGRldi0+aGFyZF9zdGFydF94bWl0ID09IE5VTEwsIG5vdCBzdGFydGluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcykKKwkJcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYyAgbm90IHN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOworCWVsc2UgeworCQltcGMtPm9sZF9vcHMgPSBkZXYtPm5ldGRldl9vcHM7CisJCW1wYy0+bmV3X29wcyA9ICptcGMtPm9sZF9vcHM7CisJCW1wYy0+bmV3X29wcy5uZG9fc3RhcnRfeG1pdCA9IG1wY19zZW5kX3BhY2tldDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm1wYy0+bmV3X29wczsKIAl9Ci0JbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0ID0gZGV2LT5oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtcGNfc2VuZF9wYWNrZXQ7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHN0b3BfbXBjKHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewotCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1wYy0+ZGV2OwogCWRwcmludGsoIm1wb2E6ICglcykgc3RvcF9tcGM6IiwgbXBjLT5kZXYtPm5hbWUpOwogCiAJLyogTGV0cyBub3QgbnVsbGlmeSBsZWMgZGV2aWNlJ3MgZGV2LT5oYXJkX3N0YXJ0X3htaXQgKi8KLQlpZiAobXBjLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCAhPSBtcGNfc2VuZF9wYWNrZXQpIHsKKwlpZiAoZGV2LT5uZXRkZXZfb3BzICE9ICZtcGMtPm5ld19vcHMpIHsKIAkJZHByaW50aygiIG1wYyBhbHJlYWR5IHN0b3BwZWQsIG5vdCBmYXRhbFxuIik7CiAJCXJldHVybjsKIAl9CiAJZHByaW50aygiXG4iKTsKLQltcGMtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0OwotCW1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdCA9IE5VTEw7Ci0JLyogY2xvc2Vfc2hvcnRjdXRzKG1wYyk7ICAgID8/PyBGSVhNRSAqLwogCi0JcmV0dXJuOworCWRldi0+bmV0ZGV2X29wcyA9IG1wYy0+b2xkX29wczsKKwltcGMtPm9sZF9vcHMgPSBOVUxMOworCisJLyogY2xvc2Vfc2hvcnRjdXRzKG1wYyk7ICAgID8/PyBGSVhNRSAqLwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqbXBvYV9kZXZpY2VfdHlwZV9zdHJpbmcoY2hhciB0eXBlKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CkBAIC01MzEsNyArNTMwLDYgQEAKICAqLwogc3RhdGljIGludCBtcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlpbnQgaSA9IDA7CkBAIC01NjEsOSArNTU5LDcgQEAKIAl9CiAKICBub25faXA6Ci0JcmV0dmFsID0gbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0KHNrYixkZXYpOwotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gbXBjLT5vbGRfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsZGV2KTsKIH0KIAogc3RhdGljIGludCBhdG1fbXBvYV92Y2NfYXR0YWNoKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHZvaWQgX191c2VyICphcmcpCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5oIGIvbmV0L2F0bS9tcGMuaAppbmRleCAyNGMzODZjLi4wOTE5YTg4IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5oCisrKyBiL25ldC9hdG0vbXBjLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm5leHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgICAgICAvKiBsZWMgaW4gcXVlc3Rpb24gICAgICAgICAgICAgICAgICAgICAqLwogCWludCBkZXZfbnVtOyAgICAgICAgICAgICAgICAgLyogZS5nLiAyIGZvciBsZWMyICAgICAgICAgICAgICAgICAgICAgKi8KLQlpbnQgKCpvbGRfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogCXN0cnVjdCBhdG1fdmNjICptcG9hZF92Y2M7ICAgLyogY29udHJvbCBjaGFubmVsIHRvIG1wb2FkICAgICAgICAgICAgKi8KIAl1aW50OF90IG1wc19jdHJsX2FkZHJbQVRNX0VTQV9MRU5dOyAgLyogTVBTIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAgICovCiAJdWludDhfdCBvdXJfY3RybF9hZGRyW0FUTV9FU0FfTEVOXTsgIC8qIE1QQydzIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAqLwpAQCAtMzEsNiArMzEsOSBAQAogCXVpbnQ4X3QgKm1wc19tYWNzOyAgICAgICAgICAgLyogYXJyYXkgb2YgTVBTIE1BQyBhZGRyZXNzZXMsID49MSAgICAgKi8KIAlpbnQgbnVtYmVyX29mX21wc19tYWNzOyAgICAgIC8qIG51bWJlciBvZiB0aGUgYWJvdmUgTUFDIGFkZHJlc3NlcyAgICovCiAJc3RydWN0IG1wY19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7ICAvKiBwYXJhbWV0ZXJzIGZvciB0aGlzIGNsaWVudCAgICAqLworCisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvbGRfb3BzOworCXN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXdfb3BzOwogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggMDBkOWU1ZS4uZmQ5ZDA2ZiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTUyOSwxMCArMTUyOSw4IEBACiAJCWRwID0gYXgyNS0+ZGlnaXBlYXQ7CiAJfQogCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC5cbiIpOwotCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KLQlTT0NLX0RFQlVHKHNrLCAiQVguMjU6IHNlbmR0bzogYnVpbGRpbmcgcGFja2V0LlxuIik7CisJU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC4gQnVpbGRpbmcgcGFja2V0LlxuIik7CiAKIAkvKiBBc3N1bWUgdGhlIHdvcnN0IGNhc2UgKi8KIAlzaXplID0gbGVuICsgYXgyNS0+YXgyNV9kZXYtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwpAQCAtMTk4NSw5ICsxOTgzLDggQEAKIC8qCiAgKglDYWxsZWQgYnkgc29ja2V0LmMgb24ga2VybmVsIHN0YXJ0IHVwCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXgyNV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVgyNSksCi0JLmRldgk9CU5VTEwsCQkJCS8qIEFsbCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9CWNwdV90b19iZTE2KEVUSF9QX0FYMjUpLAogCS5mdW5jCT0JYXgyNV9raXNzX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfaWZhY2UuYyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwppbmRleCA4NDQzYWY1Li43MTMzOGYxIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCkBAIC02MSwyNyArNjEsMjQgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7CiAJcHJvdG9jb2wgPSBwcm90b2NvbF9saXN0OwotCWlmIChwcm90b2NvbCA9PSBOVUxMKSB7Ci0JCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAocHJvdG9jb2wgPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAKIAlpZiAocHJvdG9jb2wtPnBpZCA9PSBwaWQpIHsKIAkJcHJvdG9jb2xfbGlzdCA9IHByb3RvY29sLT5uZXh0OwotCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJd2hpbGUgKHByb3RvY29sICE9IE5VTEwgJiYgcHJvdG9jb2wtPm5leHQgIT0gTlVMTCkgewogCQlpZiAocHJvdG9jb2wtPm5leHQtPnBpZCA9PSBwaWQpIHsKIAkJCXMgPSBwcm90b2NvbC0+bmV4dDsKIAkJCXByb3RvY29sLT5uZXh0ID0gcHJvdG9jb2wtPm5leHQtPm5leHQ7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXByb3RvY29sID0gcHJvdG9jb2wtPm5leHQ7CiAJfQorb3V0OgogCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggNzQ0ZWQzZi4uMDJiOWJhYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC00MSwxNCArNDEsMTMgQEAKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xNCIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xNSIKIAogLyogQmx1ZXRvb3RoIHNvY2tldHMgKi8KICNkZWZpbmUgQlRfTUFYX1BST1RPCTgKIHN0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqYnRfcHJvdG9bQlRfTUFYX1BST1RPXTsKIHN0YXRpYyBERUZJTkVfUldMT0NLKGJ0X3Byb3RvX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnRfbG9ja19rZXlbQlRfTUFYX1BST1RPXTsKIHN0YXRpYyBjb25zdCBjaGFyICpidF9rZXlfc3RyaW5nc1tCVF9NQVhfUFJPVE9dID0gewogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0wyQ0FQIiwKQEAgLTg2LDExICs4NSw2IEBACiAJCQlidF9zbG9ja19rZXlfc3RyaW5nc1twcm90b10sICZidF9zbG9ja19rZXlbcHJvdG9dLAogCQkJCWJ0X2tleV9zdHJpbmdzW3Byb3RvXSwgJmJ0X2xvY2tfa2V5W3Byb3RvXSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGJ0X3NvY2tfcmVjbGFzc2lmeV9sb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bykKLXsKLX0KLSNlbmRpZgogCiBpbnQgYnRfc29ja19yZWdpc3RlcihpbnQgcHJvdG8sIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpCiB7CkBAIC0yMTcsNyArMjExLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgIW5ld3NvY2spIHsKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgIW5ld3NvY2sgfHwKKwkJCQkJCWJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwKSB7CiAJCQlidF9hY2NlcHRfdW5saW5rKHNrKTsKIAkJCWlmIChuZXdzb2NrKQogCQkJCXNvY2tfZ3JhZnQoc2ssIG5ld3NvY2spOwpAQCAtMjMyLDcgKzIyNyw3IEBACiBFWFBPUlRfU1lNQk9MKGJ0X2FjY2VwdF9kZXF1ZXVlKTsKIAogaW50IGJ0X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0Jc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCisJCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJaW50IG5vYmxvY2sgPSBmbGFncyAmIE1TR19ET05UV0FJVDsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTI3Nyw3ICsyNzIsOSBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZidF9zayhwYXJlbnQpLT5hY2NlcHRfcSkgewogCQlzayA9IChzdHJ1Y3Qgc29jayAqKSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidF9zb2NrLCBhY2NlcHRfcSk7Ci0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEKQorCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAorCQkJCQkoYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXAgJiYKKwkJCQkJCXNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikpCiAJCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IGM5Y2FjNzcuLjAwNzNlYzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtMTI2LDggKzEyNiw3IEBACiAKIAlzZXNzaW9uLT5yZWFzc2VtYmx5W2lkXSA9IG5za2I7CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY210cF9yZWN2X2ZyYW1lKHN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggYTRhNzg5Zi4uMTE4MWRiMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMTIzLDYgKzEyMyw4IEBACiAJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNUOwogCWNvbm4tPm91dCA9IDE7CiAKKwljb25uLT5hdHRlbXB0Kys7CisKIAljcC5oYW5kbGUgICA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihjb25uLT5wa3RfdHlwZSk7CiAKQEAgLTEzOSw2ICsxNDEsOCBAQAogCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVDsKIAljb25uLT5vdXQgPSAxOwogCisJY29ubi0+YXR0ZW1wdCsrOworCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoY29ubi0+cGt0X3R5cGUpOwogCkBAIC0xNTUsNiArMTU5LDcgQEAKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLT5oZGV2OworCV9fdTggcmVhc29uOwogCiAJQlRfREJHKCJjb25uICVwIHN0YXRlICVkIiwgY29ubiwgY29ubi0+c3RhdGUpOwogCkBAIC0xNzMsNyArMTc4LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBCVF9DT05GSUc6CiAJY2FzZSBCVF9DT05ORUNURUQ6Ci0JCWhjaV9hY2xfZGlzY29ubihjb25uLCAweDEzKTsKKwkJcmVhc29uID0gaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGNvbm4pOworCQloY2lfYWNsX2Rpc2Nvbm4oY29ubiwgcmVhc29uKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CkBAIC0yMTYsMTIgKzIyMiwxMyBAQAogCQlicmVhazsKIAljYXNlIFNDT19MSU5LOgogCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKLQkJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSzsKKwkJCWNvbm4tPnBrdF90eXBlID0gKGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0spIHwKKwkJCQkJKGhkZXYtPmVzY29fdHlwZSAmIEVEUl9FU0NPX01BU0spOwogCQllbHNlCiAJCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPnBrdF90eXBlICYgU0NPX1BUWVBFX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgRVNDT19MSU5LOgotCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPmVzY29fdHlwZTsKKwkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGUgJiB+RURSX0VTQ09fTUFTSzsKIAkJYnJlYWs7CiAJfQogCkBAIC0yODAsNiArMjg3LDggQEAKIAogCXNrYl9xdWV1ZV9wdXJnZSgmY29ubi0+ZGF0YV9xKTsKIAorCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMjUsNyArMzM0LDcgQEAKIAogLyogQ3JlYXRlIFNDTyBvciBBQ0wgY29ubmVjdGlvbi4KICAqIERldmljZSBfbXVzdF8gYmUgbG9ja2VkICovCi1zdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBhdXRoX3R5cGUpCitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCXN0cnVjdCBoY2lfY29ubiAqYWNsOwogCXN0cnVjdCBoY2lfY29ubiAqc2NvOwpAQCAtMzQwLDYgKzM0OSw3IEBACiAJaGNpX2Nvbm5faG9sZChhY2wpOwogCiAJaWYgKGFjbC0+c3RhdGUgPT0gQlRfT1BFTiB8fCBhY2wtPnN0YXRlID09IEJUX0NMT1NFRCkgeworCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKIAkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJCWhjaV9hY2xfY29ubmVjdChhY2wpOwogCX0KQEAgLTM4NSw1MSArMzk1LDU5IEBACiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZSk7CiAKIC8qIEF1dGhlbnRpY2F0ZSByZW1vdGUgZGV2aWNlICovCi1pbnQgaGNpX2Nvbm5fYXV0aChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCitzdGF0aWMgaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQlpZiAoY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPmhkZXYtPnNzcF9tb2RlID4gMCkgewotCQlpZiAoIShjb25uLT5hdXRoX3R5cGUgJiAweDAxKSkgewotCQkJY29ubi0+YXV0aF90eXBlIHw9IDB4MDE7Ci0JCQljb25uLT5saW5rX21vZGUgJj0gfkhDSV9MTV9BVVRIOwotCQl9Ci0JfQotCi0JaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9BVVRIKQorCWlmIChzZWNfbGV2ZWwgPiBjb25uLT5zZWNfbGV2ZWwpCisJCWNvbm4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwllbHNlIGlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKIAkJcmV0dXJuIDE7CiAKKwljb25uLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CisKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKIAkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJY3AuaGFuZGxlID0gY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoY2lfY29ubl9hdXRoKTsKIAotLyogRW5hYmxlIGVuY3J5cHRpb24gKi8KLWludCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubikKKy8qIEVuYWJsZSBzZWN1cml0eSAqLworaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJaWYgKHNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJCXJldHVybiAxOworCisJaWYgKHNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpIHsKKwkJaWYgKGNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5oZGV2LT5zc3BfbW9kZSA+IDApCisJCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKwogCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkKLQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubik7CisJCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChoY2lfY29ubl9hdXRoKGNvbm4pKSB7CisJaWYgKGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpKSB7CiAJCXN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCBjcDsKIAkJY3AuaGFuZGxlICA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWNwLmVuY3J5cHQgPSAxOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQsCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fZW5jcnlwdCk7CitFWFBPUlRfU1lNQk9MKGhjaV9jb25uX3NlY3VyaXR5KTsKIAogLyogQ2hhbmdlIGxpbmsga2V5ICovCiBpbnQgaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KHN0cnVjdCBoY2lfY29ubiAqY29ubikKQEAgLTQ0MiwxMiArNDYwLDEzIEBACiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQ0hBTkdFX0NPTk5fTElOS19LRVksCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KTsKIAogLyogU3dpdGNoIHJvbGUgKi8KLWludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSkKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSkKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIApAQCAtNDYwLDYgKzQ3OSw3IEBACiAJCWNwLnJvbGUgPSByb2xlOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NXSVRDSF9ST0xFLCBzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9zd2l0Y2hfcm9sZSk7CkBAIC01NDIsOSArNTYyLDcgQEAKIAogCQljLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAotCQloY2lfY29ubl9kZWxfc3lzZnMoYyk7Ci0KLQkJaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGMsIDB4MTYpOworCQloY2lfcHJvdG9fZGlzY29ubl9jZm0oYywgMHgxNik7CiAJCWhjaV9jb25uX2RlbChjKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggYmE3OGNjMS4uY2QwNjE1MSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMTU2NSw4ICsxNTY1LDcgQEAKIAogCS8qIFNlbmQgcXVldWVkIGNvbW1hbmRzICovCiAJaWYgKGF0b21pY19yZWFkKCZoZGV2LT5jbWRfY250KSAmJiAoc2tiID0gc2tiX2RlcXVldWUoJmhkZXYtPmNtZF9xKSkpIHsKLQkJaWYgKGhkZXYtPnNlbnRfY21kKQotCQkJa2ZyZWVfc2tiKGhkZXYtPnNlbnRfY21kKTsKKwkJa2ZyZWVfc2tiKGhkZXYtPnNlbnRfY21kKTsKIAogCQlpZiAoKGhkZXYtPnNlbnRfY21kID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpKSB7CiAJCQlhdG9taWNfZGVjKCZoZGV2LT5jbWRfY250KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IGY5MWJhNjkuLjU1NTM0MjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNDg0LDYgKzQ4NCwxNSBAQAogCWlmIChoZGV2LT5mZWF0dXJlc1s0XSAmIExNUF9FVjUpCiAJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT19FVjUpOwogCisJaWYgKGhkZXYtPmZlYXR1cmVzWzVdICYgTE1QX0VEUl9FU0NPXzJNKQorCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fMkVWMyk7CisKKwlpZiAoaGRldi0+ZmVhdHVyZXNbNV0gJiBMTVBfRURSX0VTQ09fM00pCisJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT18zRVYzKTsKKworCWlmIChoZGV2LT5mZWF0dXJlc1s1XSAmIExNUF9FRFJfM1NfRVNDTykKKwkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPXzJFVjUgfCBFU0NPXzNFVjUpOworCiAJQlRfREJHKCIlcyBmZWF0dXJlcyAweCUuMnglLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4IiwgaGRldi0+bmFtZSwKIAkJCQkJaGRldi0+ZmVhdHVyZXNbMF0sIGhkZXYtPmZlYXR1cmVzWzFdLAogCQkJCQloZGV2LT5mZWF0dXJlc1syXSwgaGRldi0+ZmVhdHVyZXNbM10sCkBAIC05MTQsNyArOTIzLDggQEAKIAlpZiAoZXYtPnN0YXR1cykgewogCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAJCWhjaV9jb25uX2RlbChjb25uKTsKLQl9CisJfSBlbHNlIGlmIChldi0+bGlua190eXBlICE9IEFDTF9MSU5LKQorCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAKIHVubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTEwMDksOSArMTAxOSw3IEBACiAJaWYgKGNvbm4pIHsKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAKLQkJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOwotCi0JCWhjaV9wcm90b19kaXNjb25uX2luZChjb25uLCBldi0+cmVhc29uKTsKKwkJaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKGNvbm4sIGV2LT5yZWFzb24pOwogCQloY2lfY29ubl9kZWwoY29ubik7CiAJfQogCkBAIC0xNjAwLDcgKzE2MDgsOCBAQAogCiAJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKIAkJCWlmICghZXYtPnN0YXR1cyAmJiBoZGV2LT5zc3BfbW9kZSA+IDAgJiYKLQkJCQkJY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPm91dCkgeworCQkJCQljb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+b3V0ICYmCisJCQkJCWNvbm4tPnNlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9TRFApIHsKIAkJCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwogCQkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CiAJCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKQEAgLTE2MzcsNiArMTY0NiwxMyBAQAogCQljb25uLT50eXBlID0gU0NPX0xJTks7CiAJfQogCisJaWYgKGNvbm4tPm91dCAmJiBldi0+c3RhdHVzID09IDB4MWMgJiYgY29ubi0+YXR0ZW1wdCA8IDIpIHsKKwkJY29ubi0+cGt0X3R5cGUgPSAoaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSykgfAorCQkJCQkoaGRldi0+ZXNjb190eXBlICYgRURSX0VTQ09fTUFTSyk7CisJCWhjaV9zZXR1cF9zeW5jKGNvbm4sIGNvbm4tPmxpbmstPmhhbmRsZSk7CisJCWdvdG8gdW5sb2NrOworCX0KKwogCWlmICghZXYtPnN0YXR1cykgewogCQljb25uLT5oYW5kbGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpOwogCQljb25uLT5zdGF0ZSAgPSBCVF9DT05ORUNURUQ7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCAxYTFmOTE2Li5lZDgyNzk2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQlkZXYgPSBkZXZpY2VfZmluZF9jaGlsZCgmY29ubi0+ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7Ci0JCWRldmljZV9tb3ZlKGRldiwgTlVMTCk7CisJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKIAkJcHV0X2RldmljZShkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGI5Mzc0OGUuLmNhNGQzYjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTUwLDkgKzUwLDEwIEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KIAotI2RlZmluZSBWRVJTSU9OICIyLjExIgorI2RlZmluZSBWRVJTSU9OICIyLjEzIgogCi1zdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IDB4MDAwMDsKK3N0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gMHgwMDgwOworc3RhdGljIHU4IGwyY2FwX2ZpeGVkX2NoYW5bOF0gPSB7IDB4MDIsIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGwyY2FwX3NvY2tfb3BzOwogCkBAIC03Nyw5ICs3OCwxMCBAQAogCiAJYmhfbG9ja19zb2NrKHNrKTsKIAotCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgotCQkJKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0FVVEggfAotCQkJCQlMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkpCisJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykKKwkJcmVhc29uID0gRUNPTk5SRUZVU0VEOworCWVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUICYmCisJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfU0RQKQogCQlyZWFzb24gPSBFQ09OTlJFRlVTRUQ7CiAJZWxzZQogCQlyZWFzb24gPSBFVElNRURPVVQ7CkBAIC0yMDQsNiArMjA2LDggQEAKIAogCUJUX0RCRygiY29ubiAlcCwgcHNtIDB4JTIuMngsIGRjaWQgMHglNC40eCIsIGNvbm4sIGwyY2FwX3BpKHNrKS0+cHNtLCBsMmNhcF9waShzayktPmRjaWQpOwogCisJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOworCiAJbDJjYXBfcGkoc2spLT5jb25uID0gY29ubjsKIAogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewpAQCAtMjU5LDE4ICsyNjMsMzUgQEAKIH0KIAogLyogU2VydmljZSBsZXZlbCBzZWN1cml0eSAqLwotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfY2hlY2tfbGlua19tb2RlKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlfX3U4IGF1dGhfdHlwZTsKIAotCWlmICgobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUKSB8fAotCQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkpCi0JCXJldHVybiBoY2lfY29ubl9lbmNyeXB0KGNvbm4tPmhjb24pOworCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKKwkJZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9BVVRIKQotCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLT5oY29uKTsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOworCX0gZWxzZSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCQlicmVhazsKKwkJfQorCX0KIAotCXJldHVybiAxOworCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBsMmNhcF9waShzayktPnNlY19sZXZlbCwKKwkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBsMmNhcF9nZXRfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pCkBAIC0zMTIsNyArMzMzLDEwIEBACiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAKIAlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSB7Ci0JCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCWlmICghKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkpCisJCQlyZXR1cm47CisKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CkBAIC0zNTYsNyArMzgwLDcgQEAKIAkJfQogCiAJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkgewotCQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKIAkJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwogCQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwpAQCAtMzcxLDEwICszOTUsMTggQEAKIAkJCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKIAkJCXJzcC5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAotCQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOwotCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQkJCQlzdHJ1Y3Qgc29jayAqcGFyZW50ID0gYnRfc2soc2spLT5wYXJlbnQ7CisJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKKwkJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX0FVVEhPUl9QRU5EKTsKKwkJCQkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CisKKwkJCQl9IGVsc2UgeworCQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwkJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1BFTkQpOwogCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19BVVRIRU5fUEVORCk7CkBAIC00MjYsNyArNDU4LDcgQEAKIAlyZWFkX2xvY2soJmwtPmxvY2spOwogCiAJZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7Ci0JCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1JFTElBQkxFKQorCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKIAkJCXNrLT5za19lcnIgPSBlcnI7CiAJfQogCkBAIC00MzcsNiArNDY5LDcgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9ICh2b2lkICopIGFyZzsKIAorCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CiAJY29ubi0+aW5mb19pZGVudCA9IDA7CiAKIAlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOwpAQCAtNDcwLDYgKzUwMyw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmxvY2spOwogCXJ3bG9ja19pbml0KCZjb25uLT5jaGFuX2xpc3QubG9jayk7CiAKKwljb25uLT5kaXNjX3JlYXNvbiA9IDB4MTM7CisKIAlyZXR1cm4gY29ubjsKIH0KIApAQCAtNDgzLDggKzUxOCw3IEBACiAKIAlCVF9EQkcoImhjb24gJXAgY29ubiAlcCwgZXJyICVkIiwgaGNvbiwgY29ubiwgZXJyKTsKIAotCWlmIChjb25uLT5yeF9za2IpCi0JCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOworCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOwogCiAJLyogS2lsbCBjaGFubmVscyAqLwogCXdoaWxlICgoc2sgPSBjb25uLT5jaGFuX2xpc3QuaGVhZCkpIHsKQEAgLTYwOCw3ICs2NDIsNiBAQAogCiAJY2FzZSBCVF9DT05ORUNURUQ6CiAJY2FzZSBCVF9DT05GSUc6Ci0JY2FzZSBCVF9DT05ORUNUMjoKIAkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAkJCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CkBAIC02MjQsNiArNjU3LDI3IEBACiAJCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKIAkJYnJlYWs7CiAKKwljYXNlIEJUX0NPTk5FQ1QyOgorCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKKwkJCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwkJCV9fdTE2IHJlc3VsdDsKKworCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApCisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX0JBRF9QU007CisKKwkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKKwkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisJCX0gZWxzZQorCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CisJCWJyZWFrOworCiAJY2FzZSBCVF9DT05ORUNUOgogCWNhc2UgQlRfRElTQ09OTjoKIAkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CkBAIC02NTMsMTMgKzcwNywxOSBAQAogCiAJaWYgKHBhcmVudCkgewogCQlzay0+c2tfdHlwZSA9IHBhcmVudC0+c2tfdHlwZTsKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwOworCiAJCXBpLT5pbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+aW10dTsKIAkJcGktPm9tdHUgPSBsMmNhcF9waShwYXJlbnQpLT5vbXR1OwotCQlwaS0+bGlua19tb2RlID0gbDJjYXBfcGkocGFyZW50KS0+bGlua19tb2RlOworCQlwaS0+c2VjX2xldmVsID0gbDJjYXBfcGkocGFyZW50KS0+c2VjX2xldmVsOworCQlwaS0+cm9sZV9zd2l0Y2ggPSBsMmNhcF9waShwYXJlbnQpLT5yb2xlX3N3aXRjaDsKKwkJcGktPmZvcmNlX3JlbGlhYmxlID0gbDJjYXBfcGkocGFyZW50KS0+Zm9yY2VfcmVsaWFibGU7CiAJfSBlbHNlIHsKIAkJcGktPmltdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAkJcGktPm9tdHUgPSAwOwotCQlwaS0+bGlua19tb2RlID0gMDsKKwkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJcGktPnJvbGVfc3dpdGNoID0gMDsKKwkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKIAl9CiAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCkBAIC03MjMsMTcgKzc4MywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRyX2xlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFsZW4pCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29ja2FkZHJfbDIgbGE7CisJaW50IGxlbiwgZXJyID0gMDsKIAotCUJUX0RCRygic2sgJXAsICVzICVkIiwgc2ssIGJhdG9zdHIoJmxhLT5sMl9iZGFkZHIpLCBsYS0+bDJfcHNtKTsKKwlCVF9EQkcoInNrICVwIiwgc2spOwogCiAJaWYgKCFhZGRyIHx8IGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEgpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtc2V0KCZsYSwgMCwgc2l6ZW9mKGxhKSk7CisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YobGEpLCBhbGVuKTsKKwltZW1jcHkoJmxhLCBhZGRyLCBsZW4pOworCisJaWYgKGxhLmwyX2NpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlsb2NrX3NvY2soc2spOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9PUEVOKSB7CkBAIC03NDEsNyArODA4LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChsYS0+bDJfcHNtICYmIGJ0b2hzKGxhLT5sMl9wc20pIDwgMHgxMDAxICYmCisJaWYgKGxhLmwyX3BzbSAmJiBidG9ocyhsYS5sMl9wc20pIDwgMHgxMDAxICYmCiAJCQkJIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKSB7CiAJCWVyciA9IC1FQUNDRVM7CiAJCWdvdG8gZG9uZTsKQEAgLTc0OSwxNCArODE2LDE3IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwogCi0JaWYgKGxhLT5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLT5sMl9wc20sICZsYS0+bDJfYmRhZGRyKSkgeworCWlmIChsYS5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLmwyX3BzbSwgJmxhLmwyX2JkYWRkcikpIHsKIAkJZXJyID0gLUVBRERSSU5VU0U7CiAJfSBlbHNlIHsKIAkJLyogU2F2ZSBzb3VyY2UgYWRkcmVzcyAqLwotCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS0+bDJfYmRhZGRyKTsKLQkJbDJjYXBfcGkoc2spLT5wc20gICA9IGxhLT5sMl9wc207Ci0JCWwyY2FwX3BpKHNrKS0+c3BvcnQgPSBsYS0+bDJfcHNtOworCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS5sMl9iZGFkZHIpOworCQlsMmNhcF9waShzayktPnBzbSAgID0gbGEubDJfcHNtOworCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEubDJfcHNtOwogCQlzay0+c2tfc3RhdGUgPSBCVF9CT1VORDsKKworCQlpZiAoYnRvaHMobGEubDJfcHNtKSA9PSAweDAwMDEgfHwgYnRvaHMobGEubDJfcHNtKSA9PSAweDAwMDMpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKIAl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CkBAIC03NzYsNyArODQ2LDggQEAKIAlfX3U4IGF1dGhfdHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCUJUX0RCRygiJXMgLT4gJXMgcHNtIDB4JTIuMngiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSwgbDJjYXBfcGkoc2spLT5wc20pOworCUJUX0RCRygiJXMgLT4gJXMgcHNtIDB4JTIuMngiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSwKKwkJCQkJCQlsMmNhcF9waShzayktPnBzbSk7CiAKIAlpZiAoIShoZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYykpKQogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKQEAgLTc4NSwyMSArODU2LDQyIEBACiAKIAllcnIgPSAtRU5PTUVNOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fQVVUSCB8fAotCQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUIHx8Ci0JCQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpCisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfUkFXKSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HX01JVE07CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOwogCQllbHNlCi0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07Ci0JfSBlbHNlIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpCiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKLQkJZWxzZQorCisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKIAkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KIAl9CiAKLQloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwgYXV0aF90eXBlKTsKKwloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwKKwkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiAJaWYgKCFoY29uKQogCQlnb3RvIGRvbmU7CiAKQEAgLTgzNSwyMCArOTI3LDI1IEBACiAKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFsZW4sIGludCBmbGFncykKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbDIgKmxhID0gKHN0cnVjdCBzb2NrYWRkcl9sMiAqKSBhZGRyOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAwOwotCi0JbG9ja19zb2NrKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfbDIgbGE7CisJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKLQlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCB8fCBhbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sMikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KKwlpZiAoIWFkZHIgfHwgYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgJiYgIWxhLT5sMl9wc20pIHsKKwltZW1zZXQoJmxhLCAwLCBzaXplb2YobGEpKTsKKwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihsYSksIGFsZW4pOworCW1lbWNweSgmbGEsIGFkZHIsIGxlbik7CisKKwlpZiAobGEubDJfY2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgJiYgIWxhLmwyX3BzbSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtODc1LDggKzk3Miw4IEBACiAJfQogCiAJLyogU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIHBzbSAqLwotCWJhY3B5KCZidF9zayhzayktPmRzdCwgJmxhLT5sMl9iZGFkZHIpOwotCWwyY2FwX3BpKHNrKS0+cHNtID0gbGEtPmwyX3BzbTsKKwliYWNweSgmYnRfc2soc2spLT5kc3QsICZsYS5sMl9iZGFkZHIpOworCWwyY2FwX3BpKHNrKS0+cHNtID0gbGEubDJfcHNtOwogCiAJaWYgKChlcnIgPSBsMmNhcF9kb19jb25uZWN0KHNrKSkpCiAJCWdvdG8gZG9uZTsKQEAgLTEwMDAsMTIgKzEwOTcsMTYgQEAKIAlhZGRyLT5zYV9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJKmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpOwogCi0JaWYgKHBlZXIpCisJaWYgKHBlZXIpIHsKKwkJbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+ZHN0KTsKLQllbHNlCisJCWxhLT5sMl9jaWQgPSBodG9icyhsMmNhcF9waShzayktPmRjaWQpOworCX0gZWxzZSB7CisJCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnNwb3J0OwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+c3JjKTsKKwkJbGEtPmwyX2NpZCA9IGh0b2JzKGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJfQogCi0JbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOwogCXJldHVybiAwOwogfQogCkBAIC0xMTA2LDExICsxMjA3LDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMiAmJiBidF9zayhzayktPmRlZmVyX3NldHVwKSB7CisJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisKKwkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCisJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOworCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCWwyY2FwX3NlbmRfY21kKGwyY2FwX3BpKHNrKS0+Y29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKworCQlyZWxlYXNlX3NvY2soc2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCisJcmV0dXJuIGJ0X3NvY2tfcmVjdm1zZyhpb2NiLCBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKLQlpbnQgZXJyID0gMCwgbGVuOworCWludCBsZW4sIGVyciA9IDA7CiAJdTMyIG9wdDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CkBAIC0xMTQwLDcgKzEyNjgsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgPSBvcHQ7CisJCWlmIChvcHQgJiBMMkNBUF9MTV9BVVRIKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWlmIChvcHQgJiBMMkNBUF9MTV9FTkNSWVBUKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CisJCWlmIChvcHQgJiBMMkNBUF9MTV9TRUNVUkUpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0hJR0g7CisKKwkJbDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCAgICA9IChvcHQgJiBMMkNBUF9MTV9NQVNURVIpOworCQlsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlID0gKG9wdCAmIEwyQ0FQX0xNX1JFTElBQkxFKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTE1MiwxMiArMTI4OCw3NyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9MMkNBUCkKKwkJcmV0dXJuIGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yoc2VjKSwgb3B0bGVuKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopICZzZWMsIG9wdHZhbCwgbGVuKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlYy5sZXZlbCA8IEJUX1NFQ1VSSVRZX0xPVyB8fAorCQkJCQlzZWMubGV2ZWwgPiBCVF9TRUNVUklUWV9ISUdIKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChnZXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBvcHQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBsMmNhcF9vcHRpb25zIG9wdHM7CiAJc3RydWN0IGwyY2FwX2Nvbm5pbmZvIGNpbmZvOwogCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKQEAgLTExODAsMTIgKzEzODEsMzYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0xNOgotCQlpZiAocHV0X3VzZXIobDJjYXBfcGkoc2spLT5saW5rX21vZGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CisJCQlvcHQgPSBMMkNBUF9MTV9BVVRIOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSCB8IEwyQ0FQX0xNX0VOQ1JZUFQ7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSCB8IEwyQ0FQX0xNX0VOQ1JZUFQgfAorCQkJCQkJCUwyQ0FQX0xNX1NFQ1VSRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQlvcHQgfD0gTDJDQVBfTE1fTUFTVEVSOworCisJCWlmIChsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlKQorCQkJb3B0IHw9IEwyQ0FQX0xNX1JFTElBQkxFOworCisJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ09OTklORk86Ci0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKSB7CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmCisJCQkJCSEoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyICYmCisJCQkJCQlidF9zayhzayktPmRlZmVyX3NldHVwKSkgewogCQkJZXJyID0gLUVOT1RDT05OOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyMDgsNiArMTQzMyw2MCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOworCWludCBsZW4sIGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9MMkNBUCkKKwkJcmV0dXJuIGwyY2FwX3NvY2tfZ2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYgc2stPnNrX3R5cGUgIT0gU09DS19SQVcpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yoc2VjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmc2VjLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKKworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB1dF91c2VyKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCQllcnIgPSAtRUZBVUxUOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTI3MCwxMSArMTU0OSw2IEBACiAJCSAqLwogCQlwYXJlbnQtPnNrX2RhdGFfcmVhZHkocGFyZW50LCAwKTsKIAl9Ci0KLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpIHsKLQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47Ci0JCWhjaV9jb25uX2NoYW5nZV9saW5rX2tleShjb25uLT5oY29uKTsKLQl9CiB9CiAKIC8qIENvcHkgZnJhbWUgdG8gYWxsIHJhdyBzb2NrZXRzIG9uIHRoYXQgY29ubmVjdGlvbiAqLwpAQCAtMTU0OSw4ICsxODIzLDExIEBACiAKIAlpZiAoKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgJiYKIAkJCQkJY21kLT5pZGVudCA9PSBjb25uLT5pbmZvX2lkZW50KSB7Ci0JCWNvbm4tPmluZm9faWRlbnQgPSAwOwogCQlkZWxfdGltZXIoJmNvbm4tPmluZm9fdGltZXIpOworCisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCiAJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CiAJfQogCkBAIC0xNTgwLDYgKzE4NTcsNyBAQAogCS8qIENoZWNrIGlmIHRoZSBBQ0wgaXMgc2VjdXJlIGVub3VnaCAoaWYgbm90IFNEUCkgKi8KIAlpZiAocHNtICE9IGNwdV90b19sZTE2KDB4MDAwMSkgJiYKIAkJCQkhaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKGNvbm4tPmhjb24pKSB7CisJCWNvbm4tPmRpc2NfcmVhc29uID0gMHgwNTsKIAkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOwogCQlnb3RvIHJlc3BvbnNlOwogCX0KQEAgLTE2MjEsMTEgKzE4OTksMTggQEAKIAogCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBjbWQtPmlkZW50OwogCi0JaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgewotCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgewotCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKLQkJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CisJaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkgeworCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CisJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CisJCQkJc3RhdHVzID0gTDJDQVBfQ1NfQVVUSE9SX1BFTkQ7CisJCQkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CisJCQl9IGVsc2UgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TVUNDRVNTOworCQkJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNUMjsKIAkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CkBAIC0xNjk1LDExICsxOTgwLDE0IEBACiAJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IGRjaWQ7CiAJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwogCisJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CisKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKIAkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9DUl9QRU5EOgorCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE5MDgsNiArMjE5NiwxNCBAQAogCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKGwyY2FwX2ZlYXRfbWFzayksIChfX2xlMzIgKikgcnNwLT5kYXRhKTsKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwKIAkJCQkJTDJDQVBfSU5GT19SU1AsIHNpemVvZihidWYpLCBidWYpOworCX0gZWxzZSBpZiAodHlwZSA9PSBMMkNBUF9JVF9GSVhFRF9DSEFOKSB7CisJCXU4IGJ1ZlsxMl07CisJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqKSBidWY7CisJCXJzcC0+dHlwZSAgID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRklYRURfQ0hBTik7CisJCXJzcC0+cmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfSVJfU1VDQ0VTUyk7CisJCW1lbWNweShidWYgKyA0LCBsMmNhcF9maXhlZF9jaGFuLCA4KTsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwKKwkJCQkJTDJDQVBfSU5GT19SU1AsIHNpemVvZihidWYpLCBidWYpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCByc3A7CiAJCXJzcC50eXBlICAgPSBjcHVfdG9fbGUxNih0eXBlKTsKQEAgLTE5MjksMTQgKzIyMjUsMzEgQEAKIAogCUJUX0RCRygidHlwZSAweCU0LjR4IHJlc3VsdCAweCUyLjJ4IiwgdHlwZSwgcmVzdWx0KTsKIAotCWNvbm4tPmluZm9faWRlbnQgPSAwOwotCiAJZGVsX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyKTsKIAotCWlmICh0eXBlID09IEwyQ0FQX0lUX0ZFQVRfTUFTSykKKwlpZiAodHlwZSA9PSBMMkNBUF9JVF9GRUFUX01BU0spIHsKIAkJY29ubi0+ZmVhdF9tYXNrID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHJzcC0+ZGF0YSk7CiAKLQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOworCQlpZiAoY29ubi0+ZmVhdF9tYXNrICYgMHgwMDgwKSB7CisJCQlzdHJ1Y3QgbDJjYXBfaW5mb19yZXEgcmVxOworCQkJcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihMMkNBUF9JVF9GSVhFRF9DSEFOKTsKKworCQkJY29ubi0+aW5mb19pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKKworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY29ubi0+aW5mb19pZGVudCwKKwkJCQkJTDJDQVBfSU5GT19SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwkJfSBlbHNlIHsKKwkJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKworCQkJbDJjYXBfY29ubl9zdGFydChjb25uKTsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBMMkNBUF9JVF9GSVhFRF9DSEFOKSB7CisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCisJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTQzLDEwICsyNDU2LDE1IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgJmhkZXYtPmJkYWRkcikpIHsKLQkJCWxtMSB8PSAoSENJX0xNX0FDQ0VQVCB8IGwyY2FwX3BpKHNrKS0+bGlua19tb2RlKTsKKwkJCWxtMSB8PSBIQ0lfTE1fQUNDRVBUOworCQkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQkJbG0xIHw9IEhDSV9MTV9NQVNURVI7CiAJCQlleGFjdCsrOwotCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKQotCQkJbG0yIHw9IChIQ0lfTE1fQUNDRVBUIHwgbDJjYXBfcGkoc2spLT5saW5rX21vZGUpOworCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CisJCQlsbTIgfD0gSENJX0xNX0FDQ0VQVDsKKwkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJCWxtMiB8PSBIQ0lfTE1fTUFTVEVSOworCQl9CiAJfQogCXJlYWRfdW5sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOwogCkBAIC0yMTcyLDcgKzI0OTAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHJlYXNvbikKK3N0YXRpYyBpbnQgbDJjYXBfZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKKworCUJUX0RCRygiaGNvbiAlcCIsIGhjb24pOworCisJaWYgKGhjb24tPnR5cGUgIT0gQUNMX0xJTksgfHwgIWNvbm4pCisJCXJldHVybiAweDEzOworCisJcmV0dXJuIGNvbm4tPmRpc2NfcmVhc29uOworfQorCitzdGF0aWMgaW50IGwyY2FwX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggcmVhc29uKQogewogCUJUX0RCRygiaGNvbiAlcCByZWFzb24gJWQiLCBoY29uLCByZWFzb24pOwogCkBAIC0yMTg0LDcgKzI1MTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBzb2NrICpzaywgdTggZW5jcnlwdCkKK3sKKwlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQpCisJCXJldHVybjsKKworCWlmIChlbmNyeXB0ID09IDB4MDApIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkgeworCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogKiA1KTsKKwkJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCBFQ09OTlJFRlVTRUQpOworCX0gZWxzZSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pCisJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc2VjdXJpdHlfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQogewogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOwpAQCAtMjIwMCw4NSArMjU0NywxNiBAQAogCXJlYWRfbG9jaygmbC0+bG9jayk7CiAKIAlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKLQogCQliaF9sb2NrX3NvY2soc2spOwogCi0JCWlmICgocGktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkgJiYKLQkJCQkJIShoY29uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgJiYKLQkJCQkJCQkJIXN0YXR1cykgeworCQlpZiAobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQpIHsKIAkJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7Ci0JCQlpZiAoIXN0YXR1cykgewotCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207Ci0KLQkJCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCi0JCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOwotCQkJfQotCQl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikgewotCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKLQkJCV9fdTE2IHJlc3VsdDsKLQotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKLQkJCX0gZWxzZSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKLQkJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogLyAxMCk7Ci0JCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOwotCQkJfQotCi0JCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKLQkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7Ci0JCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7Ci0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOwotCQl9Ci0KLQkJYmhfdW5sb2NrX3NvY2soc2spOwotCX0KLQotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGwyY2FwX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQotewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOwotCXN0cnVjdCBzb2NrICpzazsKLQotCWlmICghY29ubikKLQkJcmV0dXJuIDA7Ci0KLQlsID0gJmNvbm4tPmNoYW5fbGlzdDsKLQotCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwotCi0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKLQotCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCi0JCWJoX2xvY2tfc29jayhzayk7Ci0KLQkJaWYgKChwaS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9TRUNVUkUpKSAmJgotCQkJCQkoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAotCQkJCQkJc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykgJiYKLQkJCQkJCSFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7Ci0JCQlfX2wyY2FwX3NvY2tfY2xvc2Uoc2ssIEVDT05OUkVGVVNFRCk7CisJCWlmICghc3RhdHVzICYmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSkgeworCQkJbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzaywgZW5jcnlwdCk7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjM3Niw3ICsyNjU0LDcgQEAKIAkJCWdvdG8gZHJvcDsKIAogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgc2tiX3B1dChjb25uLT5yeF9za2IsIHNrYi0+bGVuKSwKLQkJCSAgICAgIHNrYi0+bGVuKTsKKwkJCQkJCQkJc2tiLT5sZW4pOwogCQljb25uLT5yeF9sZW4gPSBsZW4gLSBza2ItPmxlbjsKIAl9IGVsc2UgewogCQlCVF9EQkcoIkNvbnQ6IGZyYWcgbGVuICVkIChleHBlY3RpbmcgJWQpIiwgc2tiLT5sZW4sIGNvbm4tPnJ4X2xlbik7CkBAIC0yMzk4LDcgKzI2NzYsNyBAQAogCQl9CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQoY29ubi0+cnhfc2tiLCBza2ItPmxlbiksCi0JCQkgICAgICBza2ItPmxlbik7CisJCQkJCQkJCXNrYi0+bGVuKTsKIAkJY29ubi0+cnhfbGVuIC09IHNrYi0+bGVuOwogCiAJCWlmICghY29ubi0+cnhfbGVuKSB7CkBAIC0yNDI0LDEwICsyNzAyLDEwIEBACiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZsMmNhcF9za19saXN0LmhlYWQpIHsKIAkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAotCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgMHgleFxuIiwKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWQgJWQgMHglNC40eCAweCU0LjR4ICVkICVkICVkXG4iLAogCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAogCQkJCXNrLT5za19zdGF0ZSwgYnRvaHMocGktPnBzbSksIHBpLT5zY2lkLCBwaS0+ZGNpZCwKLQkJCQlwaS0+aW10dSwgcGktPm9tdHUsIHBpLT5saW5rX21vZGUpOworCQkJCXBpLT5pbXR1LCBwaS0+b210dSwgcGktPnNlY19sZXZlbCk7CiAJfQogCiAJcmVhZF91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CkBAIC0yNDQ3LDcgKzI3MjUsNyBAQAogCS5hY2NlcHQJCT0gbDJjYXBfc29ja19hY2NlcHQsCiAJLmdldG5hbWUJPSBsMmNhcF9zb2NrX2dldG5hbWUsCiAJLnNlbmRtc2cJPSBsMmNhcF9zb2NrX3NlbmRtc2csCi0JLnJlY3Ztc2cJPSBidF9zb2NrX3JlY3Ztc2csCisJLnJlY3Ztc2cJPSBsMmNhcF9zb2NrX3JlY3Ztc2csCiAJLnBvbGwJCT0gYnRfc29ja19wb2xsLAogCS5pb2N0bAkJPSBidF9zb2NrX2lvY3RsLAogCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKQEAgLTI0NjksOCArMjc0Nyw4IEBACiAJLmNvbm5lY3RfaW5kCT0gbDJjYXBfY29ubmVjdF9pbmQsCiAJLmNvbm5lY3RfY2ZtCT0gbDJjYXBfY29ubmVjdF9jZm0sCiAJLmRpc2Nvbm5faW5kCT0gbDJjYXBfZGlzY29ubl9pbmQsCi0JLmF1dGhfY2ZtCT0gbDJjYXBfYXV0aF9jZm0sCi0JLmVuY3J5cHRfY2ZtCT0gbDJjYXBfZW5jcnlwdF9jZm0sCisJLmRpc2Nvbm5fY2ZtCT0gbDJjYXBfZGlzY29ubl9jZm0sCisJLnNlY3VyaXR5X2NmbQk9IGwyY2FwX3NlY3VyaXR5X2NmbSwKIAkucmVjdl9hY2xkYXRhCT0gbDJjYXBfcmVjdl9hY2xkYXRhCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggYWNkODRmZC4uMWQwZmIwZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL3JmY29tbS5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjEuMTAiCisjZGVmaW5lIFZFUlNJT04gIjEuMTEiCiAKIHN0YXRpYyBpbnQgZGlzYWJsZV9jZmMgPSAwOwogc3RhdGljIGludCBjaGFubmVsX210dSA9IC0xOwpAQCAtMjIzLDE5ICsyMjMsMjUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByZmNvbW1fY2hlY2tfbGlua19tb2RlKHN0cnVjdCByZmNvbW1fZGxjICpkKQorc3RhdGljIGlubGluZSBpbnQgcmZjb21tX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCByZmNvbW1fZGxjICpkKQogewogCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOworCV9fdTggYXV0aF90eXBlOwogCi0JaWYgKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSB7Ci0JCWlmICghaGNpX2Nvbm5fZW5jcnlwdChsMmNhcF9waShzayktPmNvbm4tPmhjb24pKQotCQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fQVVUSCkgewotCQlpZiAoIWhjaV9jb25uX2F1dGgobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKSkKLQkJCXJldHVybiAxOworCXN3aXRjaCAoZC0+c2VjX2xldmVsKSB7CisJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCWJyZWFrOworCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbiwgZC0+c2VjX2xldmVsLAorCQkJCQkJCQlhdXRoX3R5cGUpOwogfQogCiAvKiAtLS0tIFJGQ09NTSBETENzIC0tLS0gKi8KQEAgLTM4OCwxMCArMzk0LDEwIEBACiAJZC0+Y2ZjID0gKHMtPmNmYyA9PSBSRkNPTU1fQ0ZDX1VOS05PV04pID8gMCA6IHMtPmNmYzsKIAogCWlmIChzLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQpIHsKLQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCWVsc2UKKwkJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkKIAkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQllbHNlCisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJfQogCiAJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0NPTk5fVElNRU9VVCk7CkBAIC00MjEsOSArNDI3LDE2IEBACiAJCQlkLCBkLT5zdGF0ZSwgZC0+ZGxjaSwgZXJyLCBzKTsKIAogCXN3aXRjaCAoZC0+c3RhdGUpIHsKLQljYXNlIEJUX0NPTk5FQ1RFRDoKLQljYXNlIEJUX0NPTkZJRzoKIAljYXNlIEJUX0NPTk5FQ1Q6CisJY2FzZSBCVF9DT05GSUc6CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9zY2hlZHVsZShSRkNPTU1fU0NIRURfQVVUSCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgQlRfQ09OTkVDVEVEOgogCQlkLT5zdGF0ZSA9IEJUX0RJU0NPTk47CiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmQtPnR4X3F1ZXVlKSkgewogCQkJcmZjb21tX3NlbmRfZGlzYyhzLCBkLT5kbGNpKTsKQEAgLTQzNCw2ICs0NDcsMTUgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgQlRfT1BFTjoKKwljYXNlIEJUX0NPTk5FQ1QyOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbCB0aHJvdWdoICovCisKIAlkZWZhdWx0OgogCQlyZmNvbW1fZGxjX2NsZWFyX3RpbWVyKGQpOwogCkBAIC02MzYsNiArNjU4LDcgQEAKIAliYWNweSgmYWRkci5sMl9iZGFkZHIsIHNyYyk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSAwOworCWFkZHIubDJfY2lkICAgID0gMDsKIAkqZXJyID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoKmVyciA8IDApCiAJCWdvdG8gZmFpbGVkOwpAQCAtNjU3LDYgKzY4MCw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBkc3QpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gaHRvYnMoUkZDT01NX1BTTSk7CisJYWRkci5sMl9jaWQgICAgPSAwOwogCSplcnIgPSBrZXJuZWxfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkciksIE9fTk9OQkxPQ0spOwogCWlmICgqZXJyID09IDAgfHwgKmVyciA9PSAtRUlOUFJPR1JFU1MpCiAJCXJldHVybiBzOwpAQCAtMTE2Miw3ICsxMTg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCit2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQogewogCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOwogCkBAIC0xMTc1LDEyICsxMTk5LDMxIEBACiAJZC0+c3RhdGVfY2hhbmdlKGQsIDApOwogCXJmY29tbV9kbGNfdW5sb2NrKGQpOwogCi0JaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9NQVNURVIpCisJaWYgKGQtPnJvbGVfc3dpdGNoKQogCQloY2lfY29ubl9zd2l0Y2hfcm9sZShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIDB4MDApOwogCiAJcmZjb21tX3NlbmRfbXNjKGQtPnNlc3Npb24sIDEsIGQtPmRsY2ksIGQtPnYyNF9zaWcpOwogfQogCitzdGF0aWMgdm9pZCByZmNvbW1fY2hlY2tfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQoreworCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpIHsKKwkJaWYgKGQtPmRlZmVyX3NldHVwKSB7CisJCQlzZXRfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCisJCQlyZmNvbW1fZGxjX2xvY2soZCk7CisJCQlkLT5zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJZC0+c3RhdGVfY2hhbmdlKGQsIDApOworCQkJcmZjb21tX2RsY191bmxvY2soZCk7CisJCX0gZWxzZQorCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOworCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgcmZjb21tX3JlY3Zfc2FibShzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMsIHU4IGRsY2kpCiB7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQ7CkBAIC0xMjAzLDExICsxMjQ2LDcgQEAKIAlpZiAoZCkgewogCQlpZiAoZC0+c3RhdGUgPT0gQlRfT1BFTikgewogCQkJLyogRExDIHdhcyBwcmV2aW91c2x5IG9wZW5lZCBieSBQTiByZXF1ZXN0ICovCi0JCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgewotCQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQkJcmZjb21tX2NoZWNrX2FjY2VwdChkKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjE5LDExICsxMjU4LDcgQEAKIAkJZC0+YWRkciA9IF9fYWRkcihzLT5pbml0aWF0b3IsIGRsY2kpOwogCQlyZmNvbW1fZGxjX2xpbmsocywgZCk7CiAKLQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOwotCQl9IGVsc2UKLQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQlyZmNvbW1fY2hlY2tfYWNjZXB0KGQpOwogCX0gZWxzZSB7CiAJCXJmY29tbV9zZW5kX2RtKHMsIGRsY2kpOwogCX0KQEAgLTE2MzcsMTEgKzE2NzIsMTIgQEAKIAkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCQlpZiAoZC0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CiAJCQlkLT5tdHUgPSBzLT5tdHU7Ci0JCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgeworCQkJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkgeworCQkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQkJfSBlbHNlIHsKIAkJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTE3MTcsMTEgKzE3NTMsMTcgQEAKIAkJCWlmIChkLT5vdXQpIHsKIAkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKIAkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQ09OTl9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwotCQkJaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9TRUNVUkUpIHsKLQkJCQlzdHJ1Y3Qgc29jayAqc2sgPSBzLT5zb2NrLT5zazsKLQkJCQloY2lfY29ubl9jaGFuZ2VfbGlua19rZXkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGQtPmRlZmVyX3NldHVwKSB7CisJCQkJCXNldF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpOworCQkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKworCQkJCQlyZmNvbW1fZGxjX2xvY2soZCk7CisJCQkJCWQtPnN0YXRlID0gQlRfQ09OTkVDVDI7CisJCQkJCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKKwkJCQkJcmZjb21tX2RsY191bmxvY2soZCk7CisJCQkJfSBlbHNlCisJCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwogCQkJfQogCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKSkgewpAQCAtMTczNCw2ICsxNzc2LDkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKHRlc3RfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICh0ZXN0X2JpdChSRkNPTU1fVFhfVEhST1RUTEVELCAmcy0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKQEAgLTE4NzYsNiArMTkyMSw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBiYSk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSBodG9icyhSRkNPTU1fUFNNKTsKKwlhZGRyLmwyX2NpZCAgICA9IDA7CiAJZXJyID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoZXJyIDwgMCkgewogCQlCVF9FUlIoIkJpbmQgZmFpbGVkICVkIiwgZXJyKTsKQEAgLTE5NDcsNDIgKzE5OTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByZmNvbW1fYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMpCi17Ci0Jc3RydWN0IHJmY29tbV9zZXNzaW9uICpzOwotCXN0cnVjdCByZmNvbW1fZGxjICpkOwotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuOwotCi0JQlRfREJHKCJjb25uICVwIHN0YXR1cyAweCUwMngiLCBjb25uLCBzdGF0dXMpOwotCi0JcyA9IHJmY29tbV9zZXNzaW9uX2dldCgmY29ubi0+aGRldi0+YmRhZGRyLCAmY29ubi0+ZHN0KTsKLQlpZiAoIXMpCi0JCXJldHVybjsKLQotCXJmY29tbV9zZXNzaW9uX2hvbGQocyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnMtPmRsY3MpIHsKLQkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwotCi0JCWlmICgoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpICYmCi0JCQkJIShjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgJiYgIXN0YXR1cykKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXN0YXR1cykKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfQUNDRVBULCAmZC0+ZmxhZ3MpOwotCQllbHNlCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKLQl9Ci0KLQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7Ci0KLQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOwotfQotCi1zdGF0aWMgdm9pZCByZmNvbW1fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCitzdGF0aWMgdm9pZCByZmNvbW1fc2VjdXJpdHlfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQogewogCXN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqczsKIAlzdHJ1Y3QgcmZjb21tX2RsYyAqZDsKQEAgLTE5OTksMTggKzIwMTAsMjkgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnMtPmRsY3MpIHsKIAkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCi0JCWlmICgoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpICYmCi0JCQkJCShkLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKLQkJCQkJCWQtPnN0YXRlID09IEJUX0NPTkZJRykgJiYKLQkJCQkJCSFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7Ci0JCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKLQkJCWNvbnRpbnVlOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKSkgeworCQkJcmZjb21tX2RsY19jbGVhcl90aW1lcihkKTsKKwkJCWlmIChzdGF0dXMgfHwgZW5jcnlwdCA9PSAweDAwKSB7CisJCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoZC0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEICYmICFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7CisJCQlpZiAoZC0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkgeworCQkJCXNldF9iaXQoUkZDT01NX1NFQ19QRU5ESU5HLCAmZC0+ZmxhZ3MpOworCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChkLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJCV9fcmZjb21tX2RsY19jbG9zZShkLCBFQ09OTlJFRlVTRUQpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQl9CiAKIAkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghc3RhdHVzICYmIGVuY3J5cHQpCisJCWlmICghc3RhdHVzKQogCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9BQ0NFUFQsICZkLT5mbGFncyk7CiAJCWVsc2UKIAkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOwpAQCAtMjAyMyw4ICsyMDQ1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBoY2lfY2IgcmZjb21tX2NiID0gewogCS5uYW1lCQk9ICJSRkNPTU0iLAotCS5hdXRoX2NmbQk9IHJmY29tbV9hdXRoX2NmbSwKLQkuZW5jcnlwdF9jZm0JPSByZmNvbW1fZW5jcnlwdF9jZm0KKwkuc2VjdXJpdHlfY2ZtCT0gcmZjb21tX3NlY3VyaXR5X2NmbQogfTsKIAogc3RhdGljIHNzaXplX3QgcmZjb21tX2RsY19zeXNmc19zaG93KHN0cnVjdCBjbGFzcyAqZGV2LCBjaGFyICpidWYpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggZDNmYzZmYy4uN2Y0ODI3OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtMjYxLDEyICsyNjEsMTkgQEAKIAogCWlmIChwYXJlbnQpIHsKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7Ci0JCXBpLT5saW5rX21vZGUgPSByZmNvbW1fcGkocGFyZW50KS0+bGlua19tb2RlOworCQlwaS0+ZGxjLT5kZWZlcl9zZXR1cCA9IGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwOworCisJCXBpLT5zZWNfbGV2ZWwgPSByZmNvbW1fcGkocGFyZW50KS0+c2VjX2xldmVsOworCQlwaS0+cm9sZV9zd2l0Y2ggPSByZmNvbW1fcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CiAJfSBlbHNlIHsKLQkJcGktPmxpbmtfbW9kZSA9IDA7CisJCXBpLT5kbGMtPmRlZmVyX3NldHVwID0gMDsKKworCQlwaS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlwaS0+cm9sZV9zd2l0Y2ggPSAwOwogCX0KIAotCXBpLT5kbGMtPmxpbmtfbW9kZSA9IHBpLT5saW5rX21vZGU7CisJcGktPmRsYy0+c2VjX2xldmVsID0gcGktPnNlY19sZXZlbDsKKwlwaS0+ZGxjLT5yb2xlX3N3aXRjaCA9IHBpLT5yb2xlX3N3aXRjaDsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byByZmNvbW1fcHJvdG8gPSB7CkBAIC00MDYsNyArNDEzLDggQEAKIAliYWNweSgmYnRfc2soc2spLT5kc3QsICZzYS0+cmNfYmRhZGRyKTsKIAlyZmNvbW1fcGkoc2spLT5jaGFubmVsID0gc2EtPnJjX2NoYW5uZWw7CiAKLQlkLT5saW5rX21vZGUgPSByZmNvbW1fcGkoc2spLT5saW5rX21vZGU7CisJZC0+c2VjX2xldmVsID0gcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsOworCWQtPnJvbGVfc3dpdGNoID0gcmZjb21tX3BpKHNrKS0+cm9sZV9zd2l0Y2g7CiAKIAllcnIgPSByZmNvbW1fZGxjX29wZW4oZCwgJmJ0X3NrKHNrKS0+c3JjLCAmc2EtPnJjX2JkYWRkciwgc2EtPnJjX2NoYW5uZWwpOwogCWlmICghZXJyKQpAQCAtNTU0LDYgKzU2Miw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgc2VudCA9IDA7CiAKKwlpZiAodGVzdF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVOT1RDT05OOworCiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC01NzAsOCArNTgxLDExIEBACiAKIAkJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgc2l6ZSArIFJGQ09NTV9TS0JfUkVTRVJWRSwKIAkJCQltc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7Ci0JCWlmICghc2tiKQorCQlpZiAoIXNrYikgeworCQkJaWYgKHNlbnQgPT0gMCkKKwkJCQlzZW50ID0gZXJyOwogCQkJYnJlYWs7CisJCX0KIAkJc2tiX3Jlc2VydmUoc2tiLCBSRkNPTU1fU0tCX0hFQURfUkVTRVJWRSk7CiAKIAkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZy0+bXNnX2lvdiwgc2l6ZSk7CkBAIC02MzAsMTAgKzY0NCwxNiBAQAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmZjb21tX2RsYyAqZCA9IHJmY29tbV9waShzayktPmRsYzsKIAlpbnQgZXJyID0gMDsKIAlzaXplX3QgdGFyZ2V0LCBjb3BpZWQgPSAwOwogCWxvbmcgdGltZW87CiAKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC03MTAsNyArNzMwLDcgQEAKIAlyZXR1cm4gY29waWVkID8gOiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQorc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlpbnQgZXJyID0gMDsKQEAgLTcyNyw3ICs3NDcsMTQ0IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJmY29tbV9waShzayktPmxpbmtfbW9kZSA9IG9wdDsKKwkJaWYgKG9wdCAmIFJGQ09NTV9MTV9BVVRIKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlpZiAob3B0ICYgUkZDT01NX0xNX0VOQ1JZUFQpCisJCQlyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CisJCWlmIChvcHQgJiBSRkNPTU1fTE1fU0VDVVJFKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfSElHSDsKKworCQlyZmNvbW1fcGkoc2spLT5yb2xlX3N3aXRjaCA9IChvcHQgJiBSRkNPTU1fTE1fTUFTVEVSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9SRkNPTU0pCisJCXJldHVybiByZmNvbW1fc29ja19zZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihzZWMpLCBvcHRsZW4pOworCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikgJnNlYywgb3B0dmFsLCBsZW4pKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2VjLmxldmVsID4gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gc2VjLmxldmVsOworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGdldF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IG9wdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZmNvbW1fc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrICpsMmNhcF9zazsKKwlzdHJ1Y3QgcmZjb21tX2Nvbm5pbmZvIGNpbmZvOworCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJGQ09NTV9MTToKKwkJc3dpdGNoIChyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CisJCQlvcHQgPSBSRkNPTU1fTE1fQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCW9wdCA9IFJGQ09NTV9MTV9BVVRIIHwgUkZDT01NX0xNX0VOQ1JZUFQ7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJb3B0ID0gUkZDT01NX0xNX0FVVEggfCBSRkNPTU1fTE1fRU5DUllQVCB8CisJCQkJCQkJUkZDT01NX0xNX1NFQ1VSRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJmY29tbV9waShzayktPnJvbGVfc3dpdGNoKQorCQkJb3B0IHw9IFJGQ09NTV9MTV9NQVNURVI7CisKKwkJaWYgKHB1dF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBSRkNPTU1fQ09OTklORk86CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmCisJCQkJCSFyZmNvbW1fcGkoc2spLT5kbGMtPmRlZmVyX3NldHVwKSB7CisJCQllcnIgPSAtRU5PVENPTk47CisJCQlicmVhazsKKwkJfQorCisJCWwyY2FwX3NrID0gcmZjb21tX3BpKHNrKS0+ZGxjLT5zZXNzaW9uLT5zb2NrLT5zazsKKworCQljaW5mby5oY2lfaGFuZGxlID0gbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+ZGV2X2NsYXNzLCAzKTsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGNpbmZvKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmY2luZm8sIGxlbikpCisJCQllcnIgPSAtRUZBVUxUOworCiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTc0MiwzNiArODk5LDQ0IEBACiBzdGF0aWMgaW50IHJmY29tbV9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBzb2NrICpsMmNhcF9zazsKLQlzdHJ1Y3QgcmZjb21tX2Nvbm5pbmZvIGNpbmZvOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CiAJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKKwlpZiAobGV2ZWwgPT0gU09MX1JGQ09NTSkKKwkJcmV0dXJuIHJmY29tbV9zb2NrX2dldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlsb2NrX3NvY2soc2spOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2FzZSBSRkNPTU1fTE06Ci0JCWlmIChwdXRfdXNlcihyZmNvbW1fcGkoc2spLT5saW5rX21vZGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCi0JCQllcnIgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgUkZDT01NX0NPTk5JTkZPOgotCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkgewotCQkJZXJyID0gLUVOT1RDT05OOworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfc2sgPSByZmNvbW1fcGkoc2spLT5kbGMtPnNlc3Npb24tPnNvY2stPnNrOworCQlzZWMubGV2ZWwgPSByZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWw7CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yoc2VjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmc2VjLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKIAotCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGNpbmZvKSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmY2luZm8sIGxlbikpCisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHV0X3VzZXIoYnRfc2soc2spLT5kZWZlcl9zZXR1cCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKIAkJCWVyciA9IC1FRkFVTFQ7CiAKIAkJYnJlYWs7CkBAIC04ODgsNiArMTA1MywxMCBAQAogCiBkb25lOgogCWJoX3VubG9ja19zb2NrKHBhcmVudCk7CisKKwlpZiAoYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXApCisJCXBhcmVudC0+c2tfc3RhdGVfY2hhbmdlKHBhcmVudCk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGQwMzBjNjkuLmFiZGM3MDMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC03MzEsNyArNzMxLDggQEAKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2LT53YWl0LCAmd2FpdCk7CiAKIAlpZiAoZXJyID09IDApCi0JCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSk7CisJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSwKKwkJCSAgICBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVCk7CiAKIAlyZmNvbW1fdHR5X2NvcHlfcGVuZGluZyhkZXYpOwogCkBAIC03NTEsNyArNzUyLDcgQEAKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPm9wZW5lZCkpIHsKIAkJaWYgKGRldi0+dHR5X2Rldi0+cGFyZW50KQotCQkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCBOVUxMKTsKKwkJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKIAogCQkvKiBDbG9zZSBETEMgYW5kIGRldHRhY2ggVFRZICovCiAJCXJmY29tbV9kbGNfY2xvc2UoZGV2LT5kbGMsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggNDZmZDhiZi4uNTFhZTBjMyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAllbHNlCiAJCXR5cGUgPSBTQ09fTElOSzsKIAotCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCB0eXBlLCBkc3QsIEhDSV9BVF9OT19CT05ESU5HKTsKKwloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgdHlwZSwgZHN0LCBCVF9TRUNVUklUWV9MT1csIEhDSV9BVF9OT19CT05ESU5HKTsKIAlpZiAoIWhjb24pCiAJCWdvdG8gZG9uZTsKIApAQCAtNjY4LDcgKzY2OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzY29fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgc2NvX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc2NvX29wdGlvbnMgb3B0czsKQEAgLTcyMyw2ICs3MjMsMzEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHNjb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBsZW4sIGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9TQ08pCisJCXJldHVybiBzY29fc29ja19nZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBzY29fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC04MzIsMTAgKzg1NywzMCBAQAogLyogLS0tLS0gU0NPIGludGVyZmFjZSB3aXRoIGxvd2VyIGxheWVyIChIQ0kpIC0tLS0tICovCiBzdGF0aWMgaW50IHNjb19jb25uZWN0X2luZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKQogeworCXJlZ2lzdGVyIHN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlpbnQgbG0gPSAwOworCisJaWYgKHR5cGUgIT0gU0NPX0xJTksgJiYgdHlwZSAhPSBFU0NPX0xJTkspCisJCXJldHVybiAwOworCiAJQlRfREJHKCJoZGV2ICVzLCBiZGFkZHIgJXMiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGJkYWRkcikpOwogCi0JLyogQWx3YXlzIGFjY2VwdCBjb25uZWN0aW9uICovCi0JcmV0dXJuIEhDSV9MTV9BQ0NFUFQ7CisJLyogRmluZCBsaXN0ZW5pbmcgc29ja2V0cyAqLworCXJlYWRfbG9jaygmc2NvX3NrX2xpc3QubG9jayk7CisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzY29fc2tfbGlzdC5oZWFkKSB7CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKQorCQkJY29udGludWU7CisKKwkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsICZoZGV2LT5iZGFkZHIpIHx8CisJCQkJIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpIHsKKwkJCWxtIHw9IEhDSV9MTV9BQ0NFUFQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmc2NvX3NrX2xpc3QubG9jayk7CisKKwlyZXR1cm4gbG07CiB9CiAKIHN0YXRpYyBpbnQgc2NvX2Nvbm5lY3RfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCBzdGF0dXMpCkBAIC04NTcsNyArOTAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY29fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uLCBfX3U4IHJlYXNvbikKK3N0YXRpYyBpbnQgc2NvX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCByZWFzb24pCiB7CiAJQlRfREJHKCJoY29uICVwIHJlYXNvbiAlZCIsIGhjb24sIHJlYXNvbik7CiAKQEAgLTk0MCw3ICs5ODUsNyBAQAogCS5pZAkJPSBIQ0lfUFJPVE9fU0NPLAogCS5jb25uZWN0X2luZAk9IHNjb19jb25uZWN0X2luZCwKIAkuY29ubmVjdF9jZm0JPSBzY29fY29ubmVjdF9jZm0sCi0JLmRpc2Nvbm5faW5kCT0gc2NvX2Rpc2Nvbm5faW5kLAorCS5kaXNjb25uX2NmbQk9IHNjb19kaXNjb25uX2NmbSwKIAkucmVjdl9zY29kYXRhCT0gc2NvX3JlY3Zfc2NvZGF0YQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jCmluZGV4IDcyN2M1YzUuLjhhOTY2NzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX2lmLmMKQEAgLTQyNiw3ICs0MjYsNiBAQAogZXJyMToKIAlrb2JqZWN0X2RlbCgmcC0+a29iaik7CiBlcnIwOgotCWtvYmplY3RfcHV0KCZwLT5rb2JqKTsKIAlkZXZfc2V0X3Byb21pc2N1aXR5KGRldiwgLTEpOwogcHV0X2JhY2s6CiAJZGV2X3B1dChkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggY2Y3NTRhYy4uMzk1M2FjNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGZha2VfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLnVwZGF0ZV9wbXR1ID0JCWZha2VfdXBkYXRlX3BtdHUsCiAJLmVudHJpZXMgPQkJQVRPTUlDX0lOSVQoMCksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBiYTdiZTE5Li5mY2ZmYjNmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtOTgsNyArOTgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9MSU5LLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCmluZGV4IGQ0NGNiZjguLmE5NGYzY2MgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgZWJ0X2xvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAJCT0gImVidF9sb2ciLAogCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKaW5kZXggMmM2ZDY4Mi4uMTMzZWVhZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCkBAIC0yNzksMjEgKzI3OSwyMSBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF91bG9nX2xvZ2dlciA9IHsKLQkubmFtZQkJPSAidWxvZyIsCitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBlYnRfdWxvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiZWJ0X3Vsb2ciLAogCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZWJ0X3Vsb2dfaW5pdCh2b2lkKQogewotCWJvb2wgcmV0ID0gdHJ1ZTsKKwlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKG5sYnVmc2l6ID49IDEyOCoxMDI0KSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiZWJ0X3Vsb2c6IE5ldGxpbmsgYnVmZmVyIGhhcyB0byBiZSA8PSAxMjhrQiwiCiAJCSAgICAgICAiIHBsZWFzZSB0cnkgYSBzbWFsbGVyIG5sYnVmc2l6IHBhcmFtZXRlci5cbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGluaXRpYWxpemUgdWxvZ19idWZmZXJzICovCkBAIC0zMDgsMTIgKzMwOCwxMiBAQAogCWlmICghZWJ0dWxvZ25sKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUgIjogb3V0IG9mIG1lbW9yeSB0cnlpbmcgdG8gIgogCQkgICAgICAgImNhbGwgbmV0bGlua19rZXJuZWxfY3JlYXRlXG4iKTsKLQkJcmV0ID0gZmFsc2U7Ci0JfSBlbHNlIGlmICh4dF9yZWdpc3Rlcl90YXJnZXQoJmVidF91bG9nX3RnX3JlZykgIT0gMCkgeworCQlyZXQgPSAtRU5PTUVNOworCX0gZWxzZSBpZiAoKHJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmZWJ0X3Vsb2dfdGdfcmVnKSkgIT0gMCkgewogCQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGVidHVsb2dubCk7CiAJfQogCi0JaWYgKHJldCkKKwlpZiAocmV0ID09IDApCiAJCW5mX2xvZ19yZWdpc3RlcihORlBST1RPX0JSSURHRSwgJmVidF91bG9nX2xvZ2dlcik7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKaW5kZXggODYwNGRmYy4uYzc1MTExMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCkBAIC00Niw3ICs0Niw2IEBACiAJLm5hbWUJCT0gImJyb3V0ZSIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IDEgPDwgTkZfQlJfQlJPVVRJTkcsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGJyb3V0ZV90YWJsZS5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCmluZGV4IDJiMmU4MDQuLmE1ZWVhNzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX2ZpbHRlci5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCmluZGV4IDNmZTFhZTguLjYwMjRjNTUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJuYXQiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX25hdC5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IGZhNDE3Y2EuLjU0N2JhZmMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtMjczLDggKzI3Myw3IEBACiAJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAKIAlpZiAoZXJyKSB7Ci0JCWlmIChuZXdza2IpCi0JCQlrZnJlZV9za2IobmV3c2tiKTsKKwkJa2ZyZWVfc2tiKG5ld3NrYik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC04MjgsNyArODI3LDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGNhbl9wYWNrZXQgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQ0FOKSwKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NBTiksCiAJLmRldiAgPSBOVUxMLAogCS5mdW5jID0gY2FuX3JjdiwKIH07CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCAwNzAzY2JhLi42YWExNTRlIDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTY0OCw2ICs2NDgsOSBAQAogCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIHNpemUpLCBtc2ctPm1zZ19pb3YsIHNpemUpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGZyZWVfc2tiOworCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssIHNrYl90eChza2IpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmcmVlX3NrYjsKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnNrICA9IHNrOwogCmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmMKaW5kZXggYTNhMmJhMC4uOGQ3MzkwNSAxMDA2NDQKLS0tIGEvbmV0L2NvbXBhdC5jCisrKyBiL25ldC9jb21wYXQuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiBpbnQgcHV0X2Ntc2dfY29tcGF0KHN0cnVjdCBtc2doZHIgKmttc2csIGludCBsZXZlbCwgaW50IHR5cGUsIGludCBsZW4sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNvbXBhdF90aW1ldmFsIGN0djsKLQlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGN0czsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGN0c1szXTsKIAlzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgX191c2VyICpjbSA9IChzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgX191c2VyICopIGttc2ctPm1zZ19jb250cm9sOwogCXN0cnVjdCBjb21wYXRfY21zZ2hkciBjbWhkcjsKIAlpbnQgY21sZW47CkBAIC0yMzMsMTIgKzIzMywxNyBAQAogCQlkYXRhID0gJmN0djsKIAkJbGVuID0gc2l6ZW9mKGN0dik7CiAJfQotCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUICYmIHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TKSB7CisJaWYgKGxldmVsID09IFNPTF9TT0NLRVQgJiYKKwkgICAgKHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TIHx8IHR5cGUgPT0gU0NNX1RJTUVTVEFNUElORykpIHsKKwkJaW50IGNvdW50ID0gdHlwZSA9PSBTQ01fVElNRVNUQU1QTlMgPyAxIDogMzsKKwkJaW50IGk7CiAJCXN0cnVjdCB0aW1lc3BlYyAqdHMgPSAoc3RydWN0IHRpbWVzcGVjICopZGF0YTsKLQkJY3RzLnR2X3NlYyA9IHRzLT50dl9zZWM7Ci0JCWN0cy50dl9uc2VjID0gdHMtPnR2X25zZWM7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQljdHNbaV0udHZfc2VjID0gdHNbaV0udHZfc2VjOworCQkJY3RzW2ldLnR2X25zZWMgPSB0c1tpXS50dl9uc2VjOworCQl9CiAJCWRhdGEgPSAmY3RzOwotCQlsZW4gPSBzaXplb2YoY3RzKTsKKwkJbGVuID0gc2l6ZW9mKGN0c1swXSkgKiBjb3VudDsKIAl9CiAKIAljbWxlbiA9IENNU0dfQ09NUEFUX0xFTihsZW4pOwpAQCAtNDU1LDcgKzQ2MCw3IEBACiAJc3RydWN0IHRpbWV2YWwgdHY7CiAKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2stPnNrX3N0YW1wKTsKIAlpZiAodHYudHZfc2VjID09IC0xKQogCQlyZXR1cm4gZXJyOwpAQCAtNDc5LDcgKzQ4NCw3IEBACiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHMgPSBrdGltZV90b190aW1lc3BlYyhzay0+c2tfc3RhbXApOwogCWlmICh0cy50dl9zZWMgPT0gLTEpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDI2YTM3Y2IuLjc5NmY0NmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xNywzICsxNyw2IEBACiBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gdXNlcl9kbWEubwogb2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgKz0gZmliX3J1bGVzLm8KK29iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gbmV0LXRyYWNlcy5vCitvYmotJChDT05GSUdfTkVUX0RST1BfTU9OSVRPUikgKz0gZHJvcF9tb25pdG9yLm8KKwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggNWUyYWMwYy4uZDBkZTY0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlza19tZW1fcmVjbGFpbV9wYXJ0aWFsKHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBlM2ZlNWM3Li41MmZlYTViIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTQ1Nyw3ICsxNDU3LDkgQEAKIAkJKChmZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgJiYKIAkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgfHwKIAkJKChmZWF0dXJlcyAmIE5FVElGX0ZfSVBWNl9DU1VNKSAmJgotCQkgcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKTsKKwkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB8fAorCQkoKGZlYXR1cmVzICYgTkVUSUZfRl9GQ09FX0NSQykgJiYKKwkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0ZDT0UpKSk7CiB9CiAKIHN0YXRpYyBib29sIGRldl9jYW5fY2hlY2tzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE2NjgsOCArMTY3MCw4IEBACiAJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisJaW50IHJjOwogCi0JcHJlZmV0Y2goJmRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQpOwogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQogCQkJZGV2X3F1ZXVlX3htaXRfbml0KHNrYiwgZGV2KTsKQEAgLTE2ODEsMTMgKzE2ODMsMjcgQEAKIAkJCQlnb3RvIGdzbzsKIAkJfQogCi0JCXJldHVybiBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJLyoKKwkJICogVE9ETzogaWYgc2tiX29ycGhhbigpIHdhcyBjYWxsZWQgYnkKKwkJICogZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSAoZm9yIGV4YW1wbGUsIHRoZSB1bm1vZGlmaWVkCisJCSAqIGlnYiBkcml2ZXIgZG9lcyB0aGF0OyBibngyIGRvZXNuJ3QpLCB0aGVuCisJCSAqIHNrYl90eF9zb2Z0d2FyZV90aW1lc3RhbXAoKSB3aWxsIGJlIHVuYWJsZSB0byBzZW5kCisJCSAqIGJhY2sgdGhlIHRpbWUgc3RhbXAuCisJCSAqCisJCSAqIEhvdyBjYW4gdGhpcyBiZSBwcmV2ZW50ZWQ/IEFsd2F5cyBjcmVhdGUgYW5vdGhlcgorCQkgKiByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCBiZWZvcmUgY2FsbGluZworCQkgKiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpPyBQcmV2ZW50IHRoYXQgc2tiX29ycGhhbigpCisJCSAqIGRvZXMgYW55dGhpbmcgaW4gZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSBieSBjbGVhcmluZworCQkgKiB0aGUgc2tiIGRlc3RydWN0b3IgYmVmb3JlIHRoZSBjYWxsIGFuZCByZXN0b3JpbmcgaXQKKwkJICogYWZ0ZXJ3YXJkcywgdGhlbiBkb2luZyB0aGUgc2tiX29ycGhhbigpIG91cnNlbHZlcz8KKwkJICovCisJCXJldHVybiByYzsKIAl9CiAKIGdzbzoKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiLT5uZXh0OwotCQlpbnQgcmM7CiAKIAkJc2tiLT5uZXh0ID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CkBAIC0xNzA4LDU5ICsxNzI0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgc2ltcGxlX3R4X2hhc2hybmQ7Ci1zdGF0aWMgaW50IHNpbXBsZV90eF9oYXNocm5kX2luaXRpYWxpemVkID0gMDsKK3N0YXRpYyB1MzIgc2tiX3R4X2hhc2hybmQ7CiAKLXN0YXRpYyB1MTYgc2ltcGxlX3R4X2hhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3UxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiBhZGRyMSwgYWRkcjIsIHBvcnRzOwotCXUzMiBoYXNoLCBpaGw7Ci0JdTggaXBfcHJvdG8gPSAwOworCXUzMiBoYXNoOwogCi0JaWYgKHVubGlrZWx5KCFzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmc2ltcGxlX3R4X2hhc2hybmQsIDQpOwotCQlzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDE7Ci0JfQorCWlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkgeworCQloYXNoID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOworCX0gZWxzZSBpZiAoc2tiLT5zayAmJiBza2ItPnNrLT5za19oYXNoKSB7CisJCWhhc2ggPSBza2ItPnNrLT5za19oYXNoOworCX0gZWxzZQorCQloYXNoID0gc2tiLT5wcm90b2NvbDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlpZiAoIShpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRiB8IElQX09GRlNFVCkpKQotCQkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7Ci0JCWFkZHIxID0gaXBfaGRyKHNrYiktPnNhZGRyOwotCQlhZGRyMiA9IGlwX2hkcihza2IpLT5kYWRkcjsKLQkJaWhsID0gaXBfaGRyKHNrYiktPmlobDsKLQkJYnJlYWs7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKLQkJaXBfcHJvdG8gPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOwotCQlhZGRyMSA9IGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIzMlszXTsKLQkJYWRkcjIgPSBpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzJbM107Ci0JCWlobCA9ICg0MCA+PiAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlzd2l0Y2ggKGlwX3Byb3RvKSB7Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19EQ0NQOgotCWNhc2UgSVBQUk9UT19FU1A6Ci0JY2FzZSBJUFBST1RPX0FIOgotCWNhc2UgSVBQUk9UT19TQ1RQOgotCWNhc2UgSVBQUk9UT19VRFBMSVRFOgotCQlwb3J0cyA9ICooKHUzMiAqKSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyAoaWhsICogNCkpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwb3J0cyA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWhhc2ggPSBqaGFzaF8zd29yZHMoYWRkcjEsIGFkZHIyLCBwb3J0cywgc2ltcGxlX3R4X2hhc2hybmQpOworCWhhc2ggPSBqaGFzaF8xd29yZChoYXNoLCBza2JfdHhfaGFzaHJuZCk7CiAKIAlyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+IDMyKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3R4X2hhc2gpOwogCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3BpY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3NzEsNyArMTc1Miw3IEBACiAJaWYgKG9wcy0+bmRvX3NlbGVjdF9xdWV1ZSkKIAkJcXVldWVfaW5kZXggPSBvcHMtPm5kb19zZWxlY3RfcXVldWUoZGV2LCBza2IpOwogCWVsc2UgaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKLQkJcXVldWVfaW5kZXggPSBzaW1wbGVfdHhfaGFzaChkZXYsIHNrYik7CisJCXF1ZXVlX2luZGV4ID0gc2tiX3R4X2hhc2goZGV2LCBza2IpOwogCiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWVfaW5kZXgpOwogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcXVldWVfaW5kZXgpOwpAQCAtMjI5Nyw2ICsyMjc4LDggQEAKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKKwlza2Jfb3JwaGFuKHNrYik7CisKIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKIAkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewpAQCAtMjM2Niw3ICsyMzQ5LDYgQEAKIAogb3V0OgogCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSAwOwotCV9fc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCkBAIC0yMzgwLDIwICsyMzYyLDQwIEBACiAJCW5hcGlfZ3JvX2NvbXBsZXRlKHNrYik7CiAJfQogCisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX2ZsdXNoKTsKIAordm9pZCAqc2tiX2dyb19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7CisKKwlobGVuICs9IG9mZnNldDsKKwlpZiAoaGxlbiA8PSBza2JfaGVhZGxlbihza2IpKQorCQlyZXR1cm4gc2tiLT5kYXRhICsgb2Zmc2V0OworCisJaWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIHx8CisJCSAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIDw9CisJCSAgICAgaGxlbiAtIHNrYl9oZWFkbGVuKHNrYikgfHwKKwkJICAgICBQYWdlSGlnaE1lbShza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpKSkKKwkJcmV0dXJuIHBza2JfbWF5X3B1bGwoc2tiLCBobGVuKSA/IHNrYi0+ZGF0YSArIG9mZnNldCA6IE5VTEw7CisKKwlyZXR1cm4gcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSkgKworCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICsKKwkgICAgICAgb2Zmc2V0IC0gc2tiX2hlYWRsZW4oc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX2dyb19oZWFkZXIpOworCiBpbnQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnBwID0gTlVMTDsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlOwogCV9fYmUxNiB0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdOwotCWludCBjb3VudCA9IDA7CiAJaW50IHNhbWVfZmxvdzsKIAlpbnQgbWFjX2xlbjsKLQlpbnQgZnJlZTsKKwlpbnQgcmV0OwogCiAJaWYgKCEoc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pKQogCQlnb3RvIG5vcm1hbDsKQEAgLTI0MDMsMzAgKzI0MDUsMTYgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgaGVhZCwgbGlzdCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqcDsKLQogCQlpZiAocHR5cGUtPnR5cGUgIT0gdHlwZSB8fCBwdHlwZS0+ZGV2IHx8ICFwdHlwZS0+Z3JvX3JlY2VpdmUpCiAJCQljb250aW51ZTsKIAotCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCQltYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKIAkJc2tiLT5tYWNfbGVuID0gbWFjX2xlbjsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+c2FtZV9mbG93ID0gMDsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggPSAwOwogCQlOQVBJX0dST19DQihza2IpLT5mcmVlID0gMDsKIAotCQlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCWNvdW50Kys7Ci0KLQkJCWlmICghTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHAtPm1hY19sZW4gIT0gbWFjX2xlbiB8fAotCQkJICAgIG1lbWNtcChza2JfbWFjX2hlYWRlcihwKSwgc2tiX21hY19oZWFkZXIoc2tiKSwKLQkJCQkgICBtYWNfbGVuKSkKLQkJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKLQkJfQotCiAJCXBwID0gcHR5cGUtPmdyb19yZWNlaXZlKCZuYXBpLT5ncm9fbGlzdCwgc2tiKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjQzNiw3ICsyNDI0LDcgQEAKIAkJZ290byBub3JtYWw7CiAKIAlzYW1lX2Zsb3cgPSBOQVBJX0dST19DQihza2IpLT5zYW1lX2Zsb3c7Ci0JZnJlZSA9IE5BUElfR1JPX0NCKHNrYiktPmZyZWU7CisJcmV0ID0gTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZSA/IEdST19NRVJHRURfRlJFRSA6IEdST19NRVJHRUQ7CiAKIAlpZiAocHApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSAqcHA7CkBAIC0yNDQ0LDI3ICsyNDMyLDM1IEBACiAJCSpwcCA9IG5za2ItPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOwogCQluYXBpX2dyb19jb21wbGV0ZShuc2tiKTsKLQkJY291bnQtLTsKKwkJbmFwaS0+Z3JvX2NvdW50LS07CiAJfQogCiAJaWYgKHNhbWVfZmxvdykKIAkJZ290byBvazsKIAotCWlmIChOQVBJX0dST19DQihza2IpLT5mbHVzaCB8fCBjb3VudCA+PSBNQVhfR1JPX1NLQlMpIHsKLQkJX19za2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CisJaWYgKE5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHx8IG5hcGktPmdyb19jb3VudCA+PSBNQVhfR1JPX1NLQlMpCiAJCWdvdG8gbm9ybWFsOwotCX0KIAorCW5hcGktPmdyb19jb3VudCsrOwogCU5BUElfR1JPX0NCKHNrYiktPmNvdW50ID0gMTsKLQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gc2tiLT5sZW47CisJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHNrYl9ncm9fbGVuKHNrYik7CiAJc2tiLT5uZXh0ID0gbmFwaS0+Z3JvX2xpc3Q7CiAJbmFwaS0+Z3JvX2xpc3QgPSBza2I7CisJcmV0ID0gR1JPX0hFTEQ7CisKK3B1bGw6CisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpKSB7CisJCWlmIChuYXBpLT5ncm9fbGlzdCA9PSBza2IpCisJCQluYXBpLT5ncm9fbGlzdCA9IHNrYi0+bmV4dDsKKwkJcmV0ID0gR1JPX0RST1A7CisJfQogCiBvazoKLQlyZXR1cm4gZnJlZTsKKwlyZXR1cm4gcmV0OwogCiBub3JtYWw6Ci0JcmV0dXJuIC0xOworCXJldCA9IEdST19OT1JNQUw7CisJZ290byBwdWxsOwogfQogRVhQT1JUX1NZTUJPTChkZXZfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNDcyLDI5ICsyNDY4LDQ0IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnA7CiAKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gR1JPX05PUk1BTDsKKwogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMTsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9ICFjb21wYXJlX2V0aGVyX2hlYWRlcigKKwkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogfQogCi1pbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgbmFwaV9za2JfZmluaXNoKGludCByZXQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKIAotCXN3aXRjaCAoX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYikpIHsKLQljYXNlIC0xOgorCXN3aXRjaCAocmV0KSB7CisJY2FzZSBHUk9fTk9STUFMOgogCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAotCWNhc2UgMToKKwljYXNlIEdST19EUk9QOgorCQllcnIgPSBORVRfUlhfRFJPUDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEdST19NRVJHRURfRlJFRToKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChuYXBpX3NrYl9maW5pc2gpOworCitpbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKworCXJldHVybiBuYXBpX3NrYl9maW5pc2goX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYiksIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNTEyLDYgKzI1MjMsOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGktPnNrYjsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgaTsKIAogCW5hcGktPnNrYiA9IE5VTEw7CiAKQEAgLTI1MjQsMjAgKzI1MzgsMzYgQEAKIAl9CiAKIAlCVUdfT04oaW5mby0+bnJfZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKTsKKwlmcmFnID0gJmluZm8tPmZyYWdzW2luZm8tPm5yX2ZyYWdzIC0gMV07CisKKwlmb3IgKGkgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpIDwgaW5mby0+bnJfZnJhZ3M7IGkrKykgeworCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkgICBmcmFnLT5zaXplKTsKKwkJZnJhZysrOworCX0KIAlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gaW5mby0+bnJfZnJhZ3M7Ci0JbWVtY3B5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsIGluZm8tPmZyYWdzLCBzaXplb2YoaW5mby0+ZnJhZ3MpKTsKIAogCXNrYi0+ZGF0YV9sZW4gPSBpbmZvLT5sZW47CiAJc2tiLT5sZW4gKz0gaW5mby0+bGVuOwogCXNrYi0+dHJ1ZXNpemUgKz0gaW5mby0+bGVuOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOworCisJZXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmV0aCkpOworCWlmICghZXRoKSB7CiAJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CiAJCXNrYiA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTsKKworCS8qCisJICogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBvbmx5IHByb3RvY29scyB3ZSBjYXJlIGFib3V0IGRvbid0IHJlcXVpcmUKKwkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UnbGwgZml4IGl0IHVwIHByb3Blcmx5IGF0IHRoZSBlbmQuCisJICovCisJc2tiLT5wcm90b2NvbCA9IGV0aC0+aF9wcm90bzsKIAogCXNrYi0+aXBfc3VtbWVkID0gaW5mby0+aXBfc3VtbWVkOwogCXNrYi0+Y3N1bSA9IGluZm8tPmNzdW07CkBAIC0yNTQ3LDMxICsyNTc3LDQyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ2luZm9fc2tiKTsKIAoraW50IG5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJldCkKK3sKKwlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgR1JPX05PUk1BTDoKKwljYXNlIEdST19IRUxEOgorCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuYXBpLT5kZXYpOworCisJCWlmIChyZXQgPT0gR1JPX05PUk1BTCkKKwkJCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCXNrYl9ncm9fcHVsbChza2IsIC1FVEhfSExFTik7CisJCWJyZWFrOworCisJY2FzZSBHUk9fRFJPUDoKKwkJZXJyID0gTkVUX1JYX0RST1A7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHUk9fTUVSR0VEX0ZSRUU6CisJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ3NfZmluaXNoKTsKKwogaW50IG5hcGlfZ3JvX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpX2ZyYWdpbmZvX3NrYihuYXBpLCBpbmZvKTsKLQlpbnQgZXJyID0gTkVUX1JYX0RST1A7CiAKIAlpZiAoIXNrYikKLQkJZ290byBvdXQ7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLQlzd2l0Y2ggKF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDA6Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX2ZyYWdzX2ZpbmlzaChuYXBpLCBza2IsIF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9ncm9fZnJhZ3MpOwogCkBAIC0yNTg4LDE4ICsyNjI5LDE1IEBACiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXNrYiA9IF9fc2tiX2RlcXVldWUoJnF1ZXVlLT5pbnB1dF9wa3RfcXVldWUpOwogCQlpZiAoIXNrYikgeworCQkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKKwkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAl9IHdoaWxlICgrK3dvcmsgPCBxdW90YSAmJiBqaWZmaWVzID09IHN0YXJ0X3RpbWUpOwogCi0JbmFwaV9ncm9fZmx1c2gobmFwaSk7Ci0KLW91dDoKIAlyZXR1cm4gd29yazsKIH0KIApAQCAtMjY1Myw2ICsyNjkxLDcgQEAKIAkJICAgIGludCAoKnBvbGwpKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpLCBpbnQgd2VpZ2h0KQogewogCUlOSVRfTElTVF9IRUFEKCZuYXBpLT5wb2xsX2xpc3QpOworCW5hcGktPmdyb19jb3VudCA9IDA7CiAJbmFwaS0+Z3JvX2xpc3QgPSBOVUxMOwogCW5hcGktPnNrYiA9IE5VTEw7CiAJbmFwaS0+cG9sbCA9IHBvbGw7CkBAIC0yNjgxLDYgKzI3MjAsNyBAQAogCX0KIAogCW5hcGktPmdyb19saXN0ID0gTlVMTDsKKwluYXBpLT5ncm9fY291bnQgPSAwOwogfQogRVhQT1JUX1NZTUJPTChuZXRpZl9uYXBpX2RlbCk7CiAKQEAgLTM5NDksNiArMzk4OSw3IEBACiAJCQkgICAgY21kID09IFNJT0NTTUlJUkVHIHx8CiAJCQkgICAgY21kID09IFNJT0NCUkFERElGIHx8CiAJCQkgICAgY21kID09IFNJT0NCUkRFTElGIHx8CisJCQkgICAgY21kID09IFNJT0NTSFdUU1RBTVAgfHwKIAkJCSAgICBjbWQgPT0gU0lPQ1dBTkRFVikgewogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJCWlmIChvcHMtPm5kb19kb19pb2N0bCkgewpAQCAtNDEwMyw2ICs0MTQ0LDcgQEAKIAkJY2FzZSBTSU9DQk9ORENIQU5HRUFDVElWRToKIAkJY2FzZSBTSU9DQlJBRERJRjoKIAkJY2FzZSBTSU9DQlJERUxJRjoKKwkJY2FzZSBTSU9DU0hXVFNUQU1QOgogCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJCXJldHVybiAtRVBFUk07CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTUxOTksNiArNTI0MSw3IEBACiAJCXF1ZXVlLT5iYWNrbG9nLnBvbGwgPSBwcm9jZXNzX2JhY2tsb2c7CiAJCXF1ZXVlLT5iYWNrbG9nLndlaWdodCA9IHdlaWdodF9wOwogCQlxdWV1ZS0+YmFja2xvZy5ncm9fbGlzdCA9IE5VTEw7CisJCXF1ZXVlLT5iYWNrbG9nLmdyb19jb3VudCA9IDA7CiAJfQogCiAJZGV2X2Jvb3RfcGhhc2UgPSAwOwpAQCAtNTIzMSw2ICs1Mjc0LDE0IEBACiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwogCitzdGF0aWMgaW50IF9faW5pdCBpbml0aWFsaXplX2hhc2hybmQodm9pZCkKK3sKKwlnZXRfcmFuZG9tX2J5dGVzKCZza2JfdHhfaGFzaHJuZCwgc2l6ZW9mKHNrYl90eF9oYXNocm5kKSk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGxfc3luYyhpbml0aWFsaXplX2hhc2hybmQpOworCiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9uYW1lKTsKIEVYUE9SVF9TWU1CT0woX19kZXZfcmVtb3ZlX3BhY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmQwZGMzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBNb25pdG9yaW5nIGNvZGUgZm9yIG5ldHdvcmsgZHJvcHBlZCBwYWNrZXQgYWxlcnRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5laWwgSG9ybWFuIDxuaG9ybWFuQHR1eGRyaXZlci5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRwb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF9kcm9wbW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisKKyNpbmNsdWRlIDx0cmFjZS9za2IuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2RlZmluZSBUUkFDRV9PTiAxCisjZGVmaW5lIFRSQUNFX09GRiAwCisKK3N0YXRpYyB2b2lkIHNlbmRfZG1fYWxlcnQoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpOworCisKKy8qCisgKiBHbG9iYWxzLCBvdXIgbmV0bGluayBzb2NrZXQgcG9pbnRlcgorICogYW5kIHRoZSB3b3JrIGhhbmRsZSB0aGF0IHdpbGwgc2VuZCB1cAorICogbmV0bGluayBhbGVydHMKKyAqLworc3RydWN0IHNvY2sgKmRtX3NvY2s7CisKK3N0cnVjdCBwZXJfY3B1X2RtX2RhdGEgeworCXN0cnVjdCB3b3JrX3N0cnVjdCBkbV9hbGVydF93b3JrOworCXN0cnVjdCBza19idWZmICpza2I7CisJYXRvbWljX3QgZG1faGl0X2NvdW50OworCXN0cnVjdCB0aW1lcl9saXN0IHNlbmRfdGltZXI7Cit9OworCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5ldF9kcm9wX21vbml0b3JfZmFtaWx5ID0geworCS5pZCAgICAgICAgICAgICA9IEdFTkxfSURfR0VORVJBVEUsCisJLmhkcnNpemUgICAgICAgID0gMCwKKwkubmFtZSAgICAgICAgICAgPSAiTkVUX0RNIiwKKwkudmVyc2lvbiAgICAgICAgPSAxLAorCS5tYXhhdHRyICAgICAgICA9IE5FVF9ETV9DTURfTUFYLAorfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJfY3B1X2RtX2RhdGEsIGRtX2NwdV9kYXRhKTsKKworc3RhdGljIGludCBkbV9oaXRfbGltaXQgPSA2NDsKK3N0YXRpYyBpbnQgZG1fZGVsYXkgPSAxOworCisKK3N0YXRpYyB2b2lkIHJlc2V0X3Blcl9jcHVfZGF0YShzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhKQoreworCXNpemVfdCBhbDsKKwlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyAqbXNnOworCisJYWwgPSBzaXplb2Yoc3RydWN0IG5ldF9kbV9hbGVydF9tc2cpOworCWFsICs9IGRtX2hpdF9saW1pdCAqIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpOworCWRhdGEtPnNrYiA9IGdlbmxtc2dfbmV3KGFsLCBHRlBfS0VSTkVMKTsKKwlnZW5sbXNnX3B1dChkYXRhLT5za2IsIDAsIDAsICZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSwKKwkJCTAsIE5FVF9ETV9DTURfQUxFUlQpOworCW1zZyA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoZGF0YS0+c2tiLCBzaXplb2Yoc3RydWN0IG5ldF9kbV9hbGVydF9tc2cpKTsKKwltZW1zZXQobXNnLCAwLCBhbCk7CisJYXRvbWljX3NldCgmZGF0YS0+ZG1faGl0X2NvdW50LCBkbV9oaXRfbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2RtX2FsZXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKGRtX2NwdV9kYXRhKTsKKworCS8qCisJICogR3JhYiB0aGUgc2tiIHdlJ3JlIGFib3V0IHRvIHNlbmQKKwkgKi8KKwlza2IgPSBkYXRhLT5za2I7CisKKwkvKgorCSAqIFJlcGxhY2UgaXQgd2l0aCBhIG5ldyBvbmUKKwkgKi8KKwlyZXNldF9wZXJfY3B1X2RhdGEoZGF0YSk7CisKKwkvKgorCSAqIFNoaXAgaXQhCisJICovCisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBORVRfRE1fR1JQX0FMRVJULCBHRlBfS0VSTkVMKTsKKworfQorCisvKgorICogVGhpcyBpcyB0aGUgdGltZXIgZnVuY3Rpb24gdG8gZGVsYXkgdGhlIHNlbmRpbmcgb2YgYW4gYWxlcnQKKyAqIGluIHRoZSBldmVudCB0aGF0IG1vcmUgZHJvcHMgd2lsbCBhcnJpdmUgZHVyaW5nIHRoZQorICogaHlzdGVyZXNpcyBwZXJpb2QuICBOb3RlIHRoYXQgaXQgb3BlcmF0ZXMgdW5kZXIgdGhlIHRpbWVyIGludGVycnVwdAorICogc28gd2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gaGVyZQorICovCitzdGF0aWMgdm9pZCBzY2hlZF9zZW5kX3dvcmsodW5zaWduZWQgbG9uZyB1bnVzZWQpCit7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSA9ICAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKwlzY2hlZHVsZV93b3JrKCZkYXRhLT5kbV9hbGVydF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgdHJhY2Vfa2ZyZWVfc2tiX2hpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpsb2NhdGlvbikKK3sKKwlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyAqbXNnOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCWludCBpOworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKworCWlmICghYXRvbWljX2FkZF91bmxlc3MoJmRhdGEtPmRtX2hpdF9jb3VudCwgLTEsIDApKSB7CisJCS8qCisJCSAqIHdlJ3JlIGFscmVhZHkgYXQgemVybywgZGlzY2FyZCB0aGlzIGhpdAorCQkgKi8KKwkJZ290byBvdXQ7CisJfQorCisJbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWRhdGEtPnNrYi0+ZGF0YTsKKwltc2cgPSBnZW5sbXNnX2RhdGEobmxtc2dfZGF0YShubGgpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXNnLT5lbnRyaWVzOyBpKyspIHsKKwkJaWYgKCFtZW1jbXAoJmxvY2F0aW9uLCBtc2ctPnBvaW50c1tpXS5wYywgc2l6ZW9mKHZvaWQgKikpKSB7CisJCQltc2ctPnBvaW50c1tpXS5jb3VudCsrOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGVudHJ5CisJICovCisJX19ubGFfcmVzZXJ2ZV9ub2hkcihkYXRhLT5za2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTsKKwltZW1jcHkobXNnLT5wb2ludHNbbXNnLT5lbnRyaWVzXS5wYywgJmxvY2F0aW9uLCBzaXplb2Yodm9pZCAqKSk7CisJbXNnLT5wb2ludHNbbXNnLT5lbnRyaWVzXS5jb3VudCA9IDE7CisJbXNnLT5lbnRyaWVzKys7CisKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmRhdGEtPnNlbmRfdGltZXIpKSB7CisJCWRhdGEtPnNlbmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBkbV9kZWxheSAqIEhaOworCQlhZGRfdGltZXJfb24oJmRhdGEtPnNlbmRfdGltZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHNldF9hbGxfbW9uaXRvcl90cmFjZXMoaW50IHN0YXRlKQoreworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBUUkFDRV9PTjoKKwkJcmMgfD0gcmVnaXN0ZXJfdHJhY2Vfa2ZyZWVfc2tiKHRyYWNlX2tmcmVlX3NrYl9oaXQpOworCQlicmVhazsKKwljYXNlIFRSQUNFX09GRjoKKwkJcmMgfD0gdW5yZWdpc3Rlcl90cmFjZV9rZnJlZV9za2IodHJhY2Vfa2ZyZWVfc2tiX2hpdCk7CisKKwkJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJjKQorCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCXJldHVybiByYzsKK30KKworCitzdGF0aWMgaW50IG5ldF9kbV9jbWRfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgbmV0X2RtX2NtZF90cmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzd2l0Y2ggKGluZm8tPmdlbmxoZHItPmNtZCkgeworCWNhc2UgTkVUX0RNX0NNRF9TVEFSVDoKKwkJcmV0dXJuIHNldF9hbGxfbW9uaXRvcl90cmFjZXMoVFJBQ0VfT04pOworCQlicmVhazsKKwljYXNlIE5FVF9ETV9DTURfU1RPUDoKKwkJcmV0dXJuIHNldF9hbGxfbW9uaXRvcl90cmFjZXMoVFJBQ0VfT0ZGKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworCitzdGF0aWMgc3RydWN0IGdlbmxfb3BzIGRyb3Btb25fb3BzW10gPSB7CisJeworCQkuY21kID0gTkVUX0RNX0NNRF9DT05GSUcsCisJCS5kb2l0ID0gbmV0X2RtX2NtZF9jb25maWcsCisJfSwKKwl7CisJCS5jbWQgPSBORVRfRE1fQ01EX1NUQVJULAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfdHJhY2UsCisJfSwKKwl7CisJCS5jbWQgPSBORVRfRE1fQ01EX1NUT1AsCisJCS5kb2l0ID0gbmV0X2RtX2NtZF90cmFjZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRfZHJvcF9tb25pdG9yKHZvaWQpCit7CisJaW50IGNwdTsKKwlpbnQgcmMsIGksIHJldDsKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhOworCXByaW50ayhLRVJOX0lORk8gIkluaXRhbGl6aW5nIG5ldHdvcmsgZHJvcCBtb25pdG9yIHNlcnZpY2VcbiIpOworCisJaWYgKHNpemVvZih2b2lkICopID4gOCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBzdG9yZSBwcm9ncmFtIGNvdW50ZXJzIG9uIHRoaXMgYXJjaCwgRHJvcCBtb25pdG9yIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBjcmVhdGUgZHJvcCBtb25pdG9yIG5ldGxpbmsgZmFtaWx5XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmMgPSAtRUZBVUxUOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJvcG1vbl9vcHMpOyBpKyspIHsKKwkJcmV0ID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5LAorCQkJCQkmZHJvcG1vbl9vcHNbaV0pOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9DUklUICJmYWlsZWQgdG8gcmVnaXN0ZXIgb3BlcmF0aW9uICVkXG4iLAorCQkJCWRyb3Btb25fb3BzW2ldLmNtZCk7CisJCQlnb3RvIG91dF91bnJlZzsKKwkJfQorCX0KKworCXJjID0gMDsKKworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgeworCQlkYXRhID0gJnBlcl9jcHUoZG1fY3B1X2RhdGEsIGNwdSk7CisJCXJlc2V0X3Blcl9jcHVfZGF0YShkYXRhKTsKKwkJSU5JVF9XT1JLKCZkYXRhLT5kbV9hbGVydF93b3JrLCBzZW5kX2RtX2FsZXJ0KTsKKwkJaW5pdF90aW1lcigmZGF0YS0+c2VuZF90aW1lcik7CisJCWRhdGEtPnNlbmRfdGltZXIuZGF0YSA9IGNwdTsKKwkJZGF0YS0+c2VuZF90aW1lci5mdW5jdGlvbiA9IHNjaGVkX3NlbmRfd29yazsKKwl9CisJZ290byBvdXQ7CisKK291dF91bnJlZzoKKwlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCitsYXRlX2luaXRjYWxsKGluaXRfbmV0X2Ryb3BfbW9uaXRvcik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggOTQ3NzEwYS4uMjQ0Y2E1NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMjA5LDM0ICsyMDksNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBldGh0b29sX3NldF9yeGhhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorc3RhdGljIGludCBldGh0b29sX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcnhuZmMgY21kOwogCi0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhoYXNoKQorCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4bmZjKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmFkZHIsIHNpemVvZihjbWQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4aGFzaChkZXYsICZjbWQpOworCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhuZmMoZGV2LCAmY21kKTsKIH0KIAotc3RhdGljIGludCBldGh0b29sX2dldF9yeGhhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorc3RhdGljIGludCBldGh0b29sX2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcnhuZmMgaW5mbzsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJaW50IHJldDsKKwl2b2lkICpydWxlX2J1ZiA9IE5VTEw7CiAKLQlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9yeGhhc2gpCisJaWYgKCFvcHMtPmdldF9yeG5mYykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCB1c2VyYWRkciwgc2l6ZW9mKGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhoYXNoKGRldiwgJmluZm8pOworCWlmIChpbmZvLmNtZCA9PSBFVEhUT09MX0dSWENMU1JMQUxMKSB7CisJCWlmIChpbmZvLnJ1bGVfY250ID4gMCkgeworCQkJcnVsZV9idWYgPSBrbWFsbG9jKGluZm8ucnVsZV9jbnQgKiBzaXplb2YodTMyKSwKKwkJCQkJICAgR0ZQX1VTRVIpOworCQkJaWYgKCFydWxlX2J1ZikKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KIAorCXJldCA9IG9wcy0+Z2V0X3J4bmZjKGRldiwgJmluZm8sIHJ1bGVfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfb3V0OworCisJcmV0ID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7CisJCWdvdG8gZXJyX291dDsKKworCWlmIChydWxlX2J1ZikgeworCQl1c2VyYWRkciArPSBvZmZzZXRvZihzdHJ1Y3QgZXRodG9vbF9yeG5mYywgcnVsZV9sb2NzKTsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgcnVsZV9idWYsCisJCQkJIGluZm8ucnVsZV9jbnQgKiBzaXplb2YodTMyKSkpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldCA9IDA7CisKK2Vycl9vdXQ6CisJaWYgKHJ1bGVfYnVmKQorCQlrZnJlZShydWxlX2J1Zik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQpAQCAtOTAxLDYgKzkyOSwxMCBAQAogCWNhc2UgRVRIVE9PTF9HRkxBR1M6CiAJY2FzZSBFVEhUT09MX0dQRkxBR1M6CiAJY2FzZSBFVEhUT09MX0dSWEZIOgorCWNhc2UgRVRIVE9PTF9HUlhSSU5HUzoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQUxMOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCkBAIC0xMDUyLDEwICsxMDg0LDE2IEBACiAJCQkJICAgICAgIGRldi0+ZXRodG9vbF9vcHMtPnNldF9wcml2X2ZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX0dSWEZIOgotCQlyYyA9IGV0aHRvb2xfZ2V0X3J4aGFzaChkZXYsIHVzZXJhZGRyKTsKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSVUxFOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKKwkJcmMgPSBldGh0b29sX2dldF9yeG5mYyhkZXYsIHVzZXJhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX1NSWEZIOgotCQlyYyA9IGV0aHRvb2xfc2V0X3J4aGFzaChkZXYsIHVzZXJhZGRyKTsKKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxERUw6CisJY2FzZSBFVEhUT09MX1NSWENMU1JMSU5TOgorCQlyYyA9IGV0aHRvb2xfc2V0X3J4bmZjKGRldiwgdXNlcmFkZHIpOwogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR0dSTzoKIAkJcmMgPSBldGh0b29sX2dldF9ncm8oZGV2LCB1c2VyYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDMyYjNhMDEuLjk4NjkxZTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC01ODgsNyArNTg4LDggQEAKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgb3BzLT5ubGdyb3VwLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIG9wcy0+bmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIG9wcy0+bmxncm91cCwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMjc4YTE0Mi4uYTFjYmNlNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTg3MSw4ICs4NzEsNyBAQAogCQl3cml0ZV91bmxvY2soJm5laWdoLT5sb2NrKTsKIAkJbmVpZ2gtPm9wcy0+c29saWNpdChuZWlnaCwgc2tiKTsKIAkJYXRvbWljX2luYygmbmVpZ2gtPnByb2Jlcyk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJfSBlbHNlIHsKIG91dDoKIAkJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CkBAIC05MDgsOCArOTA3LDcgQEAKIAkJCW5laWdoLT51cGRhdGVkID0gamlmZmllczsKIAkJCXdyaXRlX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOwogCi0JCQlpZiAoc2tiKQotCQkJCWtmcmVlX3NrYihza2IpOworCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSBpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9TVEFMRSkgewpAQCAtMTY1Niw3ICsxNjU0LDExIEBACiAJCQkJZmxhZ3MgJj0gfk5FSUdIX1VQREFURV9GX09WRVJSSURFOwogCQl9CiAKLQkJZXJyID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGFkZHIsIG5kbS0+bmRtX3N0YXRlLCBmbGFncyk7CisJCWlmIChuZG0tPm5kbV9mbGFncyAmIE5URl9VU0UpIHsKKwkJCW5laWdoX2V2ZW50X3NlbmQobmVpZ2gsIE5VTEwpOworCQkJZXJyID0gMDsKKwkJfSBlbHNlCisJCQllcnIgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsYWRkciwgbmRtLT5uZG1fc3RhdGUsIGZsYWdzKTsKIAkJbmVpZ2hfcmVsZWFzZShuZWlnaCk7CiAJCWdvdG8gb3V0X2Rldl9wdXQ7CiAJfQpAQCAtMjUzNCw3ICsyNTM2LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORUlHSCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORUlHSCwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggNDg0ZjU4Ny4uMmRhNTlhMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCWRldi0+Z3JvdXBzID0gZ3JvdXBzOwogCiAJQlVJTERfQlVHX09OKEJVU19JRF9TSVpFIDwgSUZOQU1TSVopOwotCWRldl9zZXRfbmFtZShkZXYsIG5ldC0+bmFtZSk7CisJZGV2X3NldF9uYW1lKGRldiwgIiVzIiwgbmV0LT5uYW1lKTsKIAogI2lmZGVmIENPTkZJR19TWVNGUwogCSpncm91cHMrKyA9ICZuZXRzdGF0X2dyb3VwOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXRyYWNlcy5jIGIvbmV0L2NvcmUvbmV0LXRyYWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvY29yZS9uZXQtdHJhY2VzLmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIGNvbnNvbGlkYXRlcyB0cmFjZSBwb2ludCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF9kcm9wbW9uLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisKK0RFRklORV9UUkFDRShrZnJlZV9za2IpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrZnJlZV9za2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCA2NTQ5ODQ4Li4zMmQ0MTlmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMzI3NSw4ICszMjc1LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpIHsKIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCiAJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJfQpAQCAtMzMwMyw4ICszMzAyLDcgQEAKIAkJaWYgKCFjdXItPnJlbW92YWxfbWFyaykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChjdXItPnNrYikKLQkJCWtmcmVlX3NrYihjdXItPnNrYik7CisJCWtmcmVlX3NrYihjdXItPnNrYik7CiAJCWN1ci0+c2tiID0gTlVMTDsKIAogCQlwa3RnZW5fcmVtb3ZlX2RldmljZSh0LCBjdXIpOwpAQCAtMzMyOCw4ICszMzI2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocSwgbiwgJnQtPmlmX2xpc3QpIHsKIAkJY3VyID0gbGlzdF9lbnRyeShxLCBzdHJ1Y3QgcGt0Z2VuX2RldiwgbGlzdCk7CiAKLQkJaWYgKGN1ci0+c2tiKQotCQkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKKwkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKIAkJY3VyLT5za2IgPSBOVUxMOwogCiAJCXBrdGdlbl9yZW1vdmVfZGV2aWNlKHQsIGN1cik7CkBAIC0zMzkzLDggKzMzOTAsNyBAQAogCiAJCWlmICghbmV0aWZfcnVubmluZyhvZGV2KSkgewogCQkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCQkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zNDE1LDggKzM0MTEsNyBAQAogCQlpZiAoKCsrcGt0X2Rldi0+Y2xvbmVfY291bnQgPj0gcGt0X2Rldi0+Y2xvbmVfc2tiKQogCQkgICAgfHwgKCFwa3RfZGV2LT5za2IpKSB7CiAJCQkvKiBidWlsZCBhIG5ldyBwa3QgKi8KLQkJCWlmIChwa3RfZGV2LT5za2IpCi0JCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAogCQkJcGt0X2Rldi0+c2tiID0gZmlsbF9wYWNrZXQob2RldiwgcGt0X2Rldik7CiAJCQlpZiAocGt0X2Rldi0+c2tiID09IE5VTEwpIHsKQEAgLTM0OTgsOCArMzQ5Myw3IEBACiAKIAkJLyogRG9uZSB3aXRoIHRoaXMgKi8KIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KIG91dDo7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDc5MGRkMjAuLmQ3ODAzMGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00NTUsOCArNDU1LDggQEAKIAlyZXR1cm4gbmxtc2dfdW5pY2FzdChydG5sLCBza2IsIHBpZCk7CiB9CiAKLWludCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwKLQkJc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKQordm9pZCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwKKwkJIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqcnRubCA9IG5ldC0+cnRubDsKIAlpbnQgcmVwb3J0ID0gMDsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCWlmIChubGgpCiAJCXJlcG9ydCA9IG5sbXNnX3JlcG9ydChubGgpOwogCi0JcmV0dXJuIG5sbXNnX25vdGlmeShydG5sLCBza2IsIHBpZCwgZ3JvdXAsIHJlcG9ydCwgZmxhZ3MpOworCW5sbXNnX25vdGlmeShydG5sLCBza2IsIHBpZCwgZ3JvdXAsIHJlcG9ydCwgZmxhZ3MpOwogfQogCiB2b2lkIHJ0bmxfc2V0X3NrX2VycihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBncm91cCwgaW50IGVycm9yKQpAQCAtMTI0Niw3ICsxMjQ2LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTElOSywgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzZhNmIxNi4uNmFjYmY5ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNjQsNiArNjUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CiAKICNpbmNsdWRlICJrbWFwX3NrYi5oIgogCkBAIC0xMjMsNiArMTI1LDcgQEAKIAkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI8TlVMTD4iKTsKIAlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX292ZXJfcGFuaWMpOwogCiAvKioKICAqCXNrYl91bmRlcl9wYW5pYwktIAlwcml2YXRlIGZ1bmN0aW9uCkBAIC0xNDIsNiArMTQ1LDcgQEAKIAkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI8TlVMTD4iKTsKIAlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3VuZGVyX3BhbmljKTsKIAogLyogCUFsbG9jYXRlIGEgbmV3IHNrYnVmZi4gV2UgZG8gdGhpcyBvdXJzZWx2ZXMgc28gd2UgY2FuIGZpbGwgaW4gYSBmZXcKICAqCSdwcml2YXRlJyBmaWVsZHMgYW5kIGFsc28gZG8gbWVtb3J5IHN0YXRpc3RpY3MgdG8gZmluZCBhbGwgdGhlCkBAIC0yMDUsNyArMjA5LDkgQEAKIAlzaGluZm8tPmdzb19zZWdzID0gMDsKIAlzaGluZm8tPmdzb190eXBlID0gMDsKIAlzaGluZm8tPmlwNl9mcmFnX2lkID0gMDsKKwlzaGluZm8tPnR4X2ZsYWdzLmZsYWdzID0gMDsKIAlzaGluZm8tPmZyYWdfbGlzdCA9IE5VTEw7CisJbWVtc2V0KCZzaGluZm8tPmh3dHN0YW1wcywgMCwgc2l6ZW9mKHNoaW5mby0+aHd0c3RhbXBzKSk7CiAKIAlpZiAoZmNsb25lKSB7CiAJCXN0cnVjdCBza19idWZmICpjaGlsZCA9IHNrYiArIDE7CkBAIC0yMjMsNiArMjI5LDcgQEAKIAlza2IgPSBOVUxMOwogCWdvdG8gb3V0OwogfQorRVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7CiAKIC8qKgogICoJX19uZXRkZXZfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tidWZmIGZvciByeCBvbiBhIHNwZWNpZmljIGRldmljZQpAQCAtMjUwLDYgKzI1Nyw3IEBACiAJfQogCXJldHVybiBza2I7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmV0ZGV2X2FsbG9jX3NrYik7CiAKIHN0cnVjdCBwYWdlICpfX25ldGRldl9hbGxvY19wYWdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGdmcF90IGdmcF9tYXNrKQogewpAQCAtNDE4LDYgKzQyNiw3IEBACiAJc2tiX3JlbGVhc2VfYWxsKHNrYik7CiAJa2ZyZWVfc2tibWVtKHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTsKIAogLyoqCiAgKglrZnJlZV9za2IgLSBmcmVlIGFuIHNrX2J1ZmYKQEAgLTQzNCw4ICs0NDMsMzAgQEAKIAkJc21wX3JtYigpOwogCWVsc2UgaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpKQogCQlyZXR1cm47CisJdHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlfX2tmcmVlX3NrYihza2IpOwogfQorRVhQT1JUX1NZTUJPTChrZnJlZV9za2IpOworCisvKioKKyAqCWNvbnN1bWVfc2tiIC0gZnJlZSBhbiBza2J1ZmYKKyAqCUBza2I6IGJ1ZmZlciB0byBmcmVlCisgKgorICoJRHJvcCBhIHJlZiB0byB0aGUgYnVmZmVyIGFuZCBmcmVlIGl0IGlmIHRoZSB1c2FnZSBjb3VudCBoYXMgaGl0IHplcm8KKyAqCUZ1bmN0aW9ucyBpZGVudGljYWxseSB0byBrZnJlZV9za2IsIGJ1dCBrZnJlZV9za2IgYXNzdW1lcyB0aGF0IHRoZSBmcmFtZQorICoJaXMgYmVpbmcgZHJvcHBlZCBhZnRlciBhIGZhaWx1cmUgYW5kIG5vdGVzIHRoYXQKKyAqLwordm9pZCBjb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuOworCWlmIChsaWtlbHkoYXRvbWljX3JlYWQoJnNrYi0+dXNlcnMpID09IDEpKQorCQlzbXBfcm1iKCk7CisJZWxzZSBpZiAobGlrZWx5KCFhdG9taWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkpCisJCXJldHVybjsKKwlfX2tmcmVlX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTChjb25zdW1lX3NrYik7CiAKIC8qKgogICoJc2tiX3JlY3ljbGVfY2hlY2sgLSBjaGVjayBpZiBza2IgY2FuIGJlIHJldXNlZCBmb3IgcmVjZWl2ZQpAQCAtNjA1LDYgKzYzNiw3IEBACiAKIAlyZXR1cm4gX19za2JfY2xvbmUobiwgc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2Nsb25lKTsKIAogc3RhdGljIHZvaWQgY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpCiB7CkBAIC02NzEsNyArNzAzLDcgQEAKIAljb3B5X3NrYl9oZWFkZXIobiwgc2tiKTsKIAlyZXR1cm4gbjsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfY29weSk7CiAKIC8qKgogICoJcHNrYl9jb3B5CS0JY3JlYXRlIGNvcHkgb2YgYW4gc2tfYnVmZiB3aXRoIHByaXZhdGUgaGVhZC4KQEAgLTczMCw2ICs3NjIsNyBAQAogb3V0OgogCXJldHVybiBuOwogfQorRVhQT1JUX1NZTUJPTChwc2tiX2NvcHkpOwogCiAvKioKICAqCXBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiAmc2tfYnVmZgpAQCAtODEzLDYgKzg0Niw3IEBACiBub2RhdGE6CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpOwogCiAvKiBNYWtlIHByaXZhdGUgY29weSBvZiBza2Igd2l0aCB3cml0YWJsZSBoZWFkIGFuZCBzb21lIGhlYWRyb29tICovCiAKQEAgLTgzMyw3ICs4NjcsNyBAQAogCX0KIAlyZXR1cm4gc2tiMjsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfcmVhbGxvY19oZWFkcm9vbSk7CiAKIC8qKgogICoJc2tiX2NvcHlfZXhwYW5kCS0JY29weSBhbmQgZXhwYW5kIHNrX2J1ZmYKQEAgLTg5OCw2ICs5MzIsNyBAQAogCiAJcmV0dXJuIG47CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2V4cGFuZCk7CiAKIC8qKgogICoJc2tiX3BhZAkJCS0JemVybyBwYWQgdGhlIHRhaWwgb2YgYW4gc2tiCkBAIC05NDMsNiArOTc4LDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChza2JfcGFkKTsKIAogLyoqCiAgKglza2JfcHV0IC0gYWRkIGRhdGEgdG8gYSBidWZmZXIKQEAgLTExMDAsNiArMTEzNiw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woX19fcHNrYl90cmltKTsKIAogLyoqCiAgKglfX3Bza2JfcHVsbF90YWlsIC0gYWR2YW5jZSB0YWlsIG9mIHNrYiBoZWFkZXIKQEAgLTExOTMsOCArMTIzMCw3IEBACiAJCQkJCWluc3AgPSBsaXN0OwogCQkJCX0KIAkJCQlpZiAoIXBza2JfcHVsbChsaXN0LCBlYXQpKSB7Ci0JCQkJCWlmIChjbG9uZSkKLQkJCQkJCWtmcmVlX3NrYihjbG9uZSk7CisJCQkJCWtmcmVlX3NrYihjbG9uZSk7CiAJCQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTEyMzgsNiArMTI3NCw3IEBACiAKIAlyZXR1cm4gc2tiX3RhaWxfcG9pbnRlcihza2IpOwogfQorRVhQT1JUX1NZTUJPTChfX3Bza2JfcHVsbF90YWlsKTsKIAogLyogQ29weSBzb21lIGRhdGEgYml0cyBmcm9tIHNrYiB0byBrZXJuZWwgYnVmZmVyLiAqLwogCkBAIC0xMzE1LDYgKzEzNTIsNyBAQAogZmF1bHQ6CiAJcmV0dXJuIC1FRkFVTFQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2JpdHMpOwogCiAvKgogICogQ2FsbGJhY2sgZnJvbSBzcGxpY2VfdG9fcGlwZSgpLCBpZiB3ZSBuZWVkIHRvIHJlbGVhc2Ugc29tZSBwYWdlcwpAQCAtMTMyNSwxNCArMTM2MywzOSBAQAogCXB1dF9wYWdlKHNwZC0+cGFnZXNbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpsaW5lYXJfdG9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbGluZWFyX3RvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCAqbGVuLAorCQkJCQkgIHVuc2lnbmVkIGludCAqb2Zmc2V0LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCAwKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOworCXN0cnVjdCBwYWdlICpwID0gc2stPnNrX3NuZG1zZ19wYWdlOworCXVuc2lnbmVkIGludCBvZmY7CiAKLQlpZiAoIXApCi0JCXJldHVybiBOVUxMOwotCW1lbWNweShwYWdlX2FkZHJlc3MocCkgKyBvZmZzZXQsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgbGVuKTsKKwlpZiAoIXApIHsKK25ld19wYWdlOgorCQlwID0gc2stPnNrX3NuZG1zZ19wYWdlID0gYWxsb2NfcGFnZXMoc2stPnNrX2FsbG9jYXRpb24sIDApOworCQlpZiAoIXApCisJCQlyZXR1cm4gTlVMTDsKKworCQlvZmYgPSBzay0+c2tfc25kbXNnX29mZiA9IDA7CisJCS8qIGhvbGQgb25lIHJlZiB0byB0aGlzIHBhZ2UgdW50aWwgaXQncyBmdWxsICovCisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IG1sZW47CisKKwkJb2ZmID0gc2stPnNrX3NuZG1zZ19vZmY7CisJCW1sZW4gPSBQQUdFX1NJWkUgLSBvZmY7CisJCWlmIChtbGVuIDwgNjQgJiYgbWxlbiA8ICpsZW4pIHsKKwkJCXB1dF9wYWdlKHApOworCQkJZ290byBuZXdfcGFnZTsKKwkJfQorCisJCSpsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsICpsZW4sIG1sZW4pOworCX0KKworCW1lbWNweShwYWdlX2FkZHJlc3MocCkgKyBvZmYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArICpvZmZzZXQsICpsZW4pOworCXNrLT5za19zbmRtc2dfb2ZmICs9ICpsZW47CisJKm9mZnNldCA9IG9mZjsKKwlnZXRfcGFnZShwKTsKIAogCXJldHVybiBwOwogfQpAQCAtMTM0MSwyMSArMTQwNCwyMSBAQAogICogRmlsbCBwYWdlL29mZnNldC9sZW5ndGggaW50byBzcGQsIGlmIGl0IGNhbiBob2xkIG1vcmUgcGFnZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNwZF9maWxsX3BhZ2Uoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKnNwZCwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQl1bnNpZ25lZCBpbnQgKmxlbiwgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGluZWFyKQogewogCWlmICh1bmxpa2VseShzcGQtPm5yX3BhZ2VzID09IFBJUEVfQlVGRkVSUykpCiAJCXJldHVybiAxOwogCiAJaWYgKGxpbmVhcikgewotCQlwYWdlID0gbGluZWFyX3RvX3BhZ2UocGFnZSwgbGVuLCBvZmZzZXQpOworCQlwYWdlID0gbGluZWFyX3RvX3BhZ2UocGFnZSwgbGVuLCAmb2Zmc2V0LCBza2IpOwogCQlpZiAoIXBhZ2UpCiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJZ2V0X3BhZ2UocGFnZSk7CiAKIAlzcGQtPnBhZ2VzW3NwZC0+bnJfcGFnZXNdID0gcGFnZTsKLQlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ubGVuID0gbGVuOworCXNwZC0+cGFydGlhbFtzcGQtPm5yX3BhZ2VzXS5sZW4gPSAqbGVuOwogCXNwZC0+cGFydGlhbFtzcGQtPm5yX3BhZ2VzXS5vZmZzZXQgPSBvZmZzZXQ7CiAJc3BkLT5ucl9wYWdlcysrOwogCkBAIC0xMzY1LDggKzE0MjgsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NlZ21lbnRfc2VlayhzdHJ1Y3QgcGFnZSAqKnBhZ2UsIHVuc2lnbmVkIGludCAqcG9mZiwKIAkJCQkgIHVuc2lnbmVkIGludCAqcGxlbiwgdW5zaWduZWQgaW50IG9mZikKIHsKKwl1bnNpZ25lZCBsb25nIG47CisKIAkqcG9mZiArPSBvZmY7Ci0JKnBhZ2UgKz0gKnBvZmYgLyBQQUdFX1NJWkU7CisJbiA9ICpwb2ZmIC8gUEFHRV9TSVpFOworCWlmIChuKQorCQkqcGFnZSA9IG50aF9wYWdlKCpwYWdlLCBuKTsKKwogCSpwb2ZmID0gKnBvZmYgJSBQQUdFX1NJWkU7CiAJKnBsZW4gLT0gb2ZmOwogfQpAQCAtMTM5Nyw3ICsxNDY1LDcgQEAKIAkJLyogdGhlIGxpbmVhciByZWdpb24gbWF5IHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBwYWdlcyAgKi8KIAkJZmxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgZmxlbiwgUEFHRV9TSVpFIC0gcG9mZik7CiAKLQkJaWYgKHNwZF9maWxsX3BhZ2Uoc3BkLCBwYWdlLCBmbGVuLCBwb2ZmLCBza2IsIGxpbmVhcikpCisJCWlmIChzcGRfZmlsbF9wYWdlKHNwZCwgcGFnZSwgJmZsZW4sIHBvZmYsIHNrYiwgbGluZWFyKSkKIAkJCXJldHVybiAxOwogCiAJCV9fc2VnbWVudF9zZWVrKCZwYWdlLCAmcG9mZiwgJnBsZW4sIGZsZW4pOwpAQCAtMTU5MCw3ICsxNjU4LDYgQEAKIGZhdWx0OgogCXJldHVybiAtRUZBVUxUOwogfQotCiBFWFBPUlRfU1lNQk9MKHNrYl9zdG9yZV9iaXRzKTsKIAogLyogQ2hlY2tzdW0gc2tiIGRhdGEuICovCkBAIC0xNjY3LDYgKzE3MzQsNyBAQAogCiAJcmV0dXJuIGNzdW07CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jaGVja3N1bSk7CiAKIC8qIEJvdGggb2YgYWJvdmUgaW4gb25lIGJvdHRsZS4gKi8KIApAQCAtMTc0OCw2ICsxODE2LDcgQEAKIAlCVUdfT04obGVuKTsKIAlyZXR1cm4gY3N1bTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fYml0cyk7CiAKIHZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0bykKIHsKQEAgLTE3NzQsNiArMTg0Myw3IEBACiAJCSooKF9fc3VtMTYgKikodG8gKyBjc3N0dWZmKSkgPSBjc3VtX2ZvbGQoY3N1bSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9hbmRfY3N1bV9kZXYpOwogCiAvKioKICAqCXNrYl9kZXF1ZXVlIC0gcmVtb3ZlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCkBAIC0xNzk0LDYgKzE4NjQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTChza2JfZGVxdWV1ZSk7CiAKIC8qKgogICoJc2tiX2RlcXVldWVfdGFpbCAtIHJlbW92ZSBmcm9tIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZQpAQCAtMTgxMyw2ICsxODg0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2RlcXVldWVfdGFpbCk7CiAKIC8qKgogICoJc2tiX3F1ZXVlX3B1cmdlIC0gZW1wdHkgYSBsaXN0CkBAIC0xODI4LDYgKzE5MDAsNyBAQAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpCiAJCWtmcmVlX3NrYihza2IpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfcHVyZ2UpOwogCiAvKioKICAqCXNrYl9xdWV1ZV9oZWFkIC0gcXVldWUgYSBidWZmZXIgYXQgdGhlIGxpc3QgaGVhZApAQCAtMTg0OCw2ICsxOTIxLDcgQEAKIAlfX3NrYl9xdWV1ZV9oZWFkKGxpc3QsIG5ld3NrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9oZWFkKTsKIAogLyoqCiAgKglza2JfcXVldWVfdGFpbCAtIHF1ZXVlIGEgYnVmZmVyIGF0IHRoZSBsaXN0IHRhaWwKQEAgLTE4NjgsNiArMTk0Miw3IEBACiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfdGFpbCk7CiAKIC8qKgogICoJc2tiX3VubGluawktCXJlbW92ZSBhIGJ1ZmZlciBmcm9tIGEgbGlzdApAQCAtMTg4Nyw2ICsxOTYyLDcgQEAKIAlfX3NrYl91bmxpbmsoc2tiLCBsaXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl91bmxpbmspOwogCiAvKioKICAqCXNrYl9hcHBlbmQJLQlhcHBlbmQgYSBidWZmZXIKQEAgLTE5MDYsNyArMTk4Miw3IEBACiAJX19za2JfcXVldWVfYWZ0ZXIobGlzdCwgb2xkLCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQotCitFWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmQpOwogCiAvKioKICAqCXNrYl9pbnNlcnQJLQlpbnNlcnQgYSBidWZmZXIKQEAgLTE5MjgsNiArMjAwNCw3IEBACiAJX19za2JfaW5zZXJ0KG5ld3NrLCBvbGQtPnByZXYsIG9sZCwgbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfaW5zZXJ0KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNrYl9zcGxpdF9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgIHN0cnVjdCBza19idWZmKiBza2IxLApAQCAtMjAwNiw2ICsyMDgzLDcgQEAKIAllbHNlCQkvKiBTZWNvbmQgY2h1bmsgaGFzIG5vIGhlYWRlciwgbm90aGluZyB0byBjb3B5LiAqLwogCQlza2Jfc3BsaXRfbm9faGVhZGVyKHNrYiwgc2tiMSwgbGVuLCBwb3MpOwogfQorRVhQT1JUX1NZTUJPTChza2Jfc3BsaXQpOwogCiAvKiBTaGlmdGluZyBmcm9tL3RvIGEgY2xvbmVkIHNrYiBpcyBhIG5vLWdvLgogICoKQEAgLTIxNjgsNiArMjI0Niw3IEBACiAJc3QtPmZyYWdfaWR4ID0gc3QtPnN0ZXBwZWRfb2Zmc2V0ID0gMDsKIAlzdC0+ZnJhZ19kYXRhID0gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3ByZXBhcmVfc2VxX3JlYWQpOwogCiAvKioKICAqIHNrYl9zZXFfcmVhZCAtIFNlcXVlbnRpYWxseSByZWFkIHNrYiBkYXRhCkBAIC0yMjU1LDYgKzIzMzQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9zZXFfcmVhZCk7CiAKIC8qKgogICogc2tiX2Fib3J0X3NlcV9yZWFkIC0gQWJvcnQgYSBzZXF1ZW50aWFsIHJlYWQgb2Ygc2tiIGRhdGEKQEAgLTIyNjgsNiArMjM0OCw3IEBACiAJaWYgKHN0LT5mcmFnX2RhdGEpCiAJCWt1bm1hcF9za2JfZnJhZyhzdC0+ZnJhZ19kYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2Fib3J0X3NlcV9yZWFkKTsKIAogI2RlZmluZSBUU19TS0JfQ0Ioc3RhdGUpCSgoc3RydWN0IHNrYl9zZXFfc3RhdGUgKikgJigoc3RhdGUpLT5jYikpCiAKQEAgLTIzMTAsNiArMjM5MSw3IEBACiAJcmV0ID0gdGV4dHNlYXJjaF9maW5kKGNvbmZpZywgc3RhdGUpOwogCXJldHVybiAocmV0IDw9IHRvIC0gZnJvbSA/IHJldCA6IFVJTlRfTUFYKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2ZpbmRfdGV4dCk7CiAKIC8qKgogICogc2tiX2FwcGVuZF9kYXRhdG9fZnJhZ3M6IC0gYXBwZW5kIHRoZSB1c2VyIGRhdGEgdG8gYSBza2IKQEAgLTIzODIsNiArMjQ2NCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2FwcGVuZF9kYXRhdG9fZnJhZ3MpOwogCiAvKioKICAqCXNrYl9wdWxsX3Jjc3VtIC0gcHVsbCBza2IgYW5kIHVwZGF0ZSByZWNlaXZlIGNoZWNrc3VtCkBAIC0yNTY5LDcgKzI2NTIsNiBAQAogCX0KIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudCk7CiAKIGludCBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjU3NywxNyArMjY1OSwyMyBAQAogCXN0cnVjdCBza19idWZmICpwID0gKmhlYWQ7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJdW5zaWduZWQgaW50IGhlYWRyb29tOwotCXVuc2lnbmVkIGludCBobGVuID0gcC0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHApOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2dyb19sZW4oc2tiKTsKIAotCWlmIChobGVuICsgcC0+bGVuICsgbGVuID49IDY1NTM2KQorCWlmIChwLT5sZW4gKyBsZW4gPj0gNjU1MzYpCiAJCXJldHVybiAtRTJCSUc7CiAKIAlpZiAoc2tiX3NoaW5mbyhwKS0+ZnJhZ19saXN0KQogCQlnb3RvIG1lcmdlOwotCWVsc2UgaWYgKCFza2JfaGVhZGxlbihwKSAmJiAhc2tiX2hlYWRsZW4oc2tiKSAmJgotCQkgc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MgKyBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIDwKLQkJIE1BWF9TS0JfRlJBR1MpIHsKKwllbHNlIGlmIChza2JfaGVhZGxlbihza2IpIDw9IHNrYl9ncm9fb2Zmc2V0KHNrYikpIHsKKwkJaWYgKHNrYl9zaGluZm8ocCktPm5yX2ZyYWdzICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+CisJCSAgICBNQVhfU0tCX0ZSQUdTKQorCQkJcmV0dXJuIC1FMkJJRzsKKworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIC09CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwogCQltZW1jcHkoc2tiX3NoaW5mbyhwKS0+ZnJhZ3MgKyBza2Jfc2hpbmZvKHApLT5ucl9mcmFncywKIAkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsCiAJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICogc2l6ZW9mKHNrYl9mcmFnX3QpKTsKQEAgLTI2MDQsNyArMjY5Miw3IEBACiAJfQogCiAJaGVhZHJvb20gPSBza2JfaGVhZHJvb20ocCk7Ci0JbnNrYiA9IG5ldGRldl9hbGxvY19za2IocC0+ZGV2LCBoZWFkcm9vbSk7CisJbnNrYiA9IG5ldGRldl9hbGxvY19za2IocC0+ZGV2LCBoZWFkcm9vbSArIHNrYl9ncm9fb2Zmc2V0KHApKTsKIAlpZiAodW5saWtlbHkoIW5za2IpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjYxMiwxMiArMjcwMCwxNSBAQAogCW5za2ItPm1hY19sZW4gPSBwLT5tYWNfbGVuOwogCiAJc2tiX3Jlc2VydmUobnNrYiwgaGVhZHJvb20pOworCV9fc2tiX3B1dChuc2tiLCBza2JfZ3JvX29mZnNldChwKSk7CiAKLQlza2Jfc2V0X21hY19oZWFkZXIobnNrYiwgLWhsZW4pOworCXNrYl9zZXRfbWFjX2hlYWRlcihuc2tiLCBza2JfbWFjX2hlYWRlcihwKSAtIHAtPmRhdGEpOwogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIobnNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHApKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIobnNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQocCkpOwogCi0JbWVtY3B5KHNrYl9tYWNfaGVhZGVyKG5za2IpLCBza2JfbWFjX2hlYWRlcihwKSwgaGxlbik7CisJX19za2JfcHVsbChwLCBza2JfZ3JvX29mZnNldChwKSk7CisJbWVtY3B5KHNrYl9tYWNfaGVhZGVyKG5za2IpLCBza2JfbWFjX2hlYWRlcihwKSwKKwkgICAgICAgcC0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHApKTsKIAogCSpOQVBJX0dST19DQihuc2tiKSA9ICpOQVBJX0dST19DQihwKTsKIAlza2Jfc2hpbmZvKG5za2IpLT5mcmFnX2xpc3QgPSBwOwpAQCAtMjYzNiw2ICsyNzI3LDE3IEBACiAJcCA9IG5za2I7CiAKIG1lcmdlOgorCWlmIChza2JfZ3JvX29mZnNldChza2IpID4gc2tiX2hlYWRsZW4oc2tiKSkgeworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIC09CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKwkJc2tiX2dyb19wdWxsKHNrYiwgc2tiX2hlYWRsZW4oc2tiKSk7CisJfQorCisJX19za2JfcHVsbChza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOworCiAJcC0+cHJldi0+bmV4dCA9IHNrYjsKIAlwLT5wcmV2ID0gc2tiOwogCXNrYl9oZWFkZXJfcmVsZWFzZShza2IpOwpAQCAtMjc0Nyw2ICsyODQ5LDcgQEAKIAogCXJldHVybiBuc2c7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfdG9fc2d2ZWMpOwogCiAvKioKICAqCXNrYl9jb3dfZGF0YSAtIENoZWNrIHRoYXQgYSBzb2NrZXQgYnVmZmVyJ3MgZGF0YSBidWZmZXJzIGFyZSB3cml0YWJsZQpAQCAtMjg1Niw2ICsyOTU5LDQ1IEBACiAKIAlyZXR1cm4gZWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKKwordm9pZCBza2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwKKwkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpCit7CisJc3RydWN0IHNvY2sgKnNrID0gb3JpZ19za2ItPnNrOworCXN0cnVjdCBzb2NrX2V4dGVycl9za2IgKnNlcnI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyOworCisJaWYgKCFzaykKKwkJcmV0dXJuOworCisJc2tiID0gc2tiX2Nsb25lKG9yaWdfc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJaWYgKGh3dHN0YW1wcykgeworCQkqc2tiX2h3dHN0YW1wcyhza2IpID0KKwkJCSpod3RzdGFtcHM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogbm8gaGFyZHdhcmUgdGltZSBzdGFtcHMgYXZhaWxhYmxlLAorCQkgKiBzbyBrZWVwIHRoZSBza2Jfc2hhcmVkX3R4IGFuZCBvbmx5CisJCSAqIHN0b3JlIHNvZnR3YXJlIHRpbWUgc3RhbXAKKwkJICovCisJCXNrYi0+dHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTsKKwl9CisKKwlzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTsKKwltZW1zZXQoc2VyciwgMCwgc2l6ZW9mKCpzZXJyKSk7CisJc2Vyci0+ZWUuZWVfZXJybm8gPSBFTk9NU0c7CisJc2Vyci0+ZWUuZWVfb3JpZ2luID0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORzsKKwllcnIgPSBzb2NrX3F1ZXVlX2Vycl9za2Ioc2ssIHNrYik7CisJaWYgKGVycikKKwkJa2ZyZWVfc2tiKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfdHN0YW1wX3R4KTsKKwogCiAvKioKICAqIHNrYl9wYXJ0aWFsX2NzdW1fc2V0IC0gc2V0IHVwIGFuZCB2ZXJpZnkgcGFydGlhbCBjc3VtIHZhbHVlcyBmb3IgcGFja2V0CkBAIC0yODg0LDYgKzMwMjYsNyBAQAogCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmY7CiAJcmV0dXJuIHRydWU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfcGFydGlhbF9jc3VtX3NldCk7CiAKIHZvaWQgX19za2Jfd2Fybl9scm9fZm9yd2FyZGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMjg5MSw0MiArMzAzNCw0IEBACiAJCXByX3dhcm5pbmcoIiVzOiByZWNlaXZlZCBwYWNrZXRzIGNhbm5vdCBiZSBmb3J3YXJkZWQiCiAJCQkgICAiIHdoaWxlIExSTyBpcyBlbmFibGVkXG4iLCBza2ItPmRldi0+bmFtZSk7CiB9Ci0KLUVYUE9SVF9TWU1CT0woX19fcHNrYl90cmltKTsKLUVYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpOwotRVhQT1JUX1NZTUJPTChrZnJlZV9za2IpOwotRVhQT1JUX1NZTUJPTChfX3Bza2JfcHVsbF90YWlsKTsKLUVYUE9SVF9TWU1CT0woX19hbGxvY19za2IpOwotRVhQT1JUX1NZTUJPTChfX25ldGRldl9hbGxvY19za2IpOwotRVhQT1JUX1NZTUJPTChwc2tiX2NvcHkpOwotRVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NoZWNrc3VtKTsKLUVYUE9SVF9TWU1CT0woc2tiX2Nsb25lKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHkpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9hbmRfY3N1bV9iaXRzKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fZGV2KTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYml0cyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2V4cGFuZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9vdmVyX3BhbmljKTsKLUVYUE9SVF9TWU1CT0woc2tiX3BhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9yZWFsbG9jX2hlYWRyb29tKTsKLUVYUE9SVF9TWU1CT0woc2tiX3VuZGVyX3BhbmljKTsKLUVYUE9SVF9TWU1CT0woc2tiX2RlcXVldWUpOwotRVhQT1JUX1NZTUJPTChza2JfZGVxdWV1ZV90YWlsKTsKLUVYUE9SVF9TWU1CT0woc2tiX2luc2VydCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9wdXJnZSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9oZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3RhaWwpOwotRVhQT1JUX1NZTUJPTChza2JfdW5saW5rKTsKLUVYUE9SVF9TWU1CT0woc2tiX2FwcGVuZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9zcGxpdCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9wcmVwYXJlX3NlcV9yZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX3NlcV9yZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX2Fib3J0X3NlcV9yZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX2ZpbmRfdGV4dCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzKTsKIEVYUE9SVF9TWU1CT0woX19za2Jfd2Fybl9scm9fZm9yd2FyZGluZyk7Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHNrYl90b19zZ3ZlYyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChza2JfY293X2RhdGEpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3BhcnRpYWxfY3N1bV9zZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDVmOTdjYWEuLjA2MjAwNDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3JlcXVlc3Rfc29jay5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0X3RzdGFtcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bGludXgvaXBzZWMuaD4KIApAQCAtMTQ5LDcgKzE1MCw3IEBACiAgICJza19sb2NrLUFGX0RFQ25ldCIsICJza19sb2NrLUFGX05FVEJFVUkiICAsICJza19sb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJza19sb2NrLUFGX0tFWSIgICAsICJza19sb2NrLUFGX05FVExJTksiICAsICJza19sb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJza19sb2NrLUFGX0FTSCIgICAsICJza19sb2NrLUFGX0VDT05FVCIgICAsICJza19sb2NrLUFGX0FUTVNWQyIgICAsCi0gICJza19sb2NrLTIxIiAgICAgICAsICJza19sb2NrLUFGX1NOQSIgICAgICAsICJza19sb2NrLUFGX0lSREEiICAgICAsCisgICJza19sb2NrLUFGX1JEUyIgICAsICJza19sb2NrLUFGX1NOQSIgICAgICAsICJza19sb2NrLUFGX0lSREEiICAgICAsCiAgICJza19sb2NrLUFGX1BQUE9YIiAsICJza19sb2NrLUFGX1dBTlBJUEUiICAsICJza19sb2NrLUFGX0xMQyIgICAgICAsCiAgICJza19sb2NrLTI3IiAgICAgICAsICJza19sb2NrLTI4IiAgICAgICAgICAsICJza19sb2NrLUFGX0NBTiIgICAgICAsCiAgICJza19sb2NrLUFGX1RJUEMiICAsICJza19sb2NrLUFGX0JMVUVUT09USCIsICJza19sb2NrLUlVQ1YiICAgICAgICAsCkBAIC0xNjQsNyArMTY1LDcgQEAKICAgInNsb2NrLUFGX0RFQ25ldCIsICJzbG9jay1BRl9ORVRCRVVJIiAgLCAic2xvY2stQUZfU0VDVVJJVFkiICwKICAgInNsb2NrLUFGX0tFWSIgICAsICJzbG9jay1BRl9ORVRMSU5LIiAgLCAic2xvY2stQUZfUEFDS0VUIiAgICwKICAgInNsb2NrLUFGX0FTSCIgICAsICJzbG9jay1BRl9FQ09ORVQiICAgLCAic2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgInNsb2NrLTIxIiAgICAgICAsICJzbG9jay1BRl9TTkEiICAgICAgLCAic2xvY2stQUZfSVJEQSIgICAgICwKKyAgInNsb2NrLUFGX1JEUyIgICAsICJzbG9jay1BRl9TTkEiICAgICAgLCAic2xvY2stQUZfSVJEQSIgICAgICwKICAgInNsb2NrLUFGX1BQUE9YIiAsICJzbG9jay1BRl9XQU5QSVBFIiAgLCAic2xvY2stQUZfTExDIiAgICAgICwKICAgInNsb2NrLTI3IiAgICAgICAsICJzbG9jay0yOCIgICAgICAgICAgLCAic2xvY2stQUZfQ0FOIiAgICAgICwKICAgInNsb2NrLUFGX1RJUEMiICAsICJzbG9jay1BRl9CTFVFVE9PVEgiLCAic2xvY2stQUZfSVVDViIgICAgICwKQEAgLTE3OSw3ICsxODAsNyBAQAogICAiY2xvY2stQUZfREVDbmV0IiwgImNsb2NrLUFGX05FVEJFVUkiICAsICJjbG9jay1BRl9TRUNVUklUWSIgLAogICAiY2xvY2stQUZfS0VZIiAgICwgImNsb2NrLUFGX05FVExJTksiICAsICJjbG9jay1BRl9QQUNLRVQiICAgLAogICAiY2xvY2stQUZfQVNIIiAgICwgImNsb2NrLUFGX0VDT05FVCIgICAsICJjbG9jay1BRl9BVE1TVkMiICAgLAotICAiY2xvY2stMjEiICAgICAgICwgImNsb2NrLUFGX1NOQSIgICAgICAsICJjbG9jay1BRl9JUkRBIiAgICAgLAorICAiY2xvY2stQUZfUkRTIiAgICwgImNsb2NrLUFGX1NOQSIgICAgICAsICJjbG9jay1BRl9JUkRBIiAgICAgLAogICAiY2xvY2stQUZfUFBQT1giICwgImNsb2NrLUFGX1dBTlBJUEUiICAsICJjbG9jay1BRl9MTEMiICAgICAgLAogICAiY2xvY2stMjciICAgICAgICwgImNsb2NrLTI4IiAgICAgICAgICAsICJjbG9jay1BRl9DQU4iICAgICAgLAogICAiY2xvY2stQUZfVElQQyIgICwgImNsb2NrLUFGX0JMVUVUT09USCIsICJjbG9jay1BRl9JVUNWIiAgICAgLApAQCAtMjU1LDExICsyNTYsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgc29ja19kaXNhYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewotCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkgewotCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKTsKLQkJbmV0X2Rpc2FibGVfdGltZXN0YW1wKCk7CisJaWYgKHNvY2tfZmxhZyhzaywgZmxhZykpIHsKKwkJc29ja19yZXNldF9mbGFnKHNrLCBmbGFnKTsKKwkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSAmJgorCQkgICAgIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpKSB7CisJCQluZXRfZGlzYWJsZV90aW1lc3RhbXAoKTsKKwkJfQogCX0KIH0KIApAQCAtNjE0LDEzICs2MTgsMzggQEAKIAkJCWVsc2UKIAkJCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKTsKIAkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKLQkJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAkJfSBlbHNlIHsKIAkJCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApOwogCQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKTsKIAkJfQogCQlicmVhazsKIAorCWNhc2UgU09fVElNRVNUQU1QSU5HOgorCQlpZiAodmFsICYgflNPRl9USU1FU1RBTVBJTkdfTUFTSykgeworCQkJcmV0ID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKTsKKwkJaWYgKHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpCisJCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssCisJCQkJCSAgICAgIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKTsKKwkJZWxzZQorCQkJc29ja19kaXNhYmxlX3RpbWVzdGFtcChzaywKKwkJCQkJICAgICAgIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSk7CisJCWJyZWFrOworCiAJY2FzZSBTT19SQ1ZMT1dBVDoKIAkJaWYgKHZhbCA8IDApCiAJCQl2YWwgPSBJTlRfTUFYOwpAQCAtNzY4LDYgKzc5NywyNCBAQAogCQl2LnZhbCA9IHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCWJyZWFrOwogCisJY2FzZSBTT19USU1FU1RBTVBJTkc6CisJCXYudmFsID0gMDsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7CisJCWJyZWFrOworCiAJY2FzZSBTT19SQ1ZUSU1FTzoKIAkJbHY9c2l6ZW9mKHN0cnVjdCB0aW1ldmFsKTsKIAkJaWYgKHNrLT5za19yY3Z0aW1lbyA9PSBNQVhfU0NIRURVTEVfVElNRU9VVCkgewpAQCAtOTY5LDcgKzEwMTYsOCBAQAogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CiAJfQogCi0Jc29ja19kaXNhYmxlX3RpbWVzdGFtcChzayk7CisJc29ja19kaXNhYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOworCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKTsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX29tZW1fYWxsb2MpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9wdG1lbSBsZWFrYWdlICglZCBieXRlcykgZGV0ZWN0ZWQuXG4iLApAQCAtMTI1NSwxMCArMTMwMyw5IEBACiAgKglHZW5lcmljIHNlbmQvcmVjZWl2ZSBidWZmZXIgaGFuZGxlcnMKICAqLwogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9wc2tiKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sCi0JCQkJCSAgICBpbnQgbm9ibG9jaywgaW50ICplcnJjb2RlKQorc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9wc2tiKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBoZWFkZXJfbGVuLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbiwgaW50IG5vYmxvY2ssCisJCQkJICAgICBpbnQgKmVycmNvZGUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlnZnBfdCBnZnBfbWFzazsKQEAgLTEzMzgsNiArMTM4NSw3IEBACiAJKmVycmNvZGUgPSBlcnI7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2Nfc2VuZF9wc2tiKTsKIAogc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9za2Ioc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgIGludCBub2Jsb2NrLCBpbnQgKmVycmNvZGUpCkBAIC0xNzg2LDcgKzE4MzQsNyBAQAogewogCXN0cnVjdCB0aW1ldmFsIHR2OwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXR2ID0ga3RpbWVfdG9fdGltZXZhbChzay0+c2tfc3RhbXApOwogCWlmICh0di50dl9zZWMgPT0gLTEpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTgwMiw3ICsxODUwLDcgQEAKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHMgPSBrdGltZV90b190aW1lc3BlYyhzay0+c2tfc3RhbXApOwogCWlmICh0cy50dl9zZWMgPT0gLTEpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTgxNCwxMSArMTg2MiwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChzb2NrX2dldF90aW1lc3RhbXBucyk7CiAKLXZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaykKK3ZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpCiB7Ci0JaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkgewotCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCk7Ci0JCW5ldF9lbmFibGVfdGltZXN0YW1wKCk7CisJaWYgKCFzb2NrX2ZsYWcoc2ssIGZsYWcpKSB7CisJCXNvY2tfc2V0X2ZsYWcoc2ssIGZsYWcpOworCQkvKgorCQkgKiB3ZSBqdXN0IHNldCBvbmUgb2YgdGhlIHR3byBmbGFncyB3aGljaCByZXF1aXJlIG5ldAorCQkgKiB0aW1lIHN0YW1waW5nLCBidXQgdGltZSBzdGFtcGluZyBtaWdodCBoYXZlIGJlZW4gb24KKwkJICogYWxyZWFkeSBiZWNhdXNlIG9mIHRoZSBvdGhlciBvbmUKKwkJICovCisJCWlmICghc29ja19mbGFnKHNrLAorCQkJCWZsYWcgPT0gU09DS19USU1FU1RBTVAgPworCQkJCVNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFIDoKKwkJCQlTT0NLX1RJTUVTVEFNUCkpCisJCQluZXRfZW5hYmxlX3RpbWVzdGFtcCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCA4M2QzMzk4Li43ZGIxZGUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYworKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdXRpbHMuYyBiL25ldC9jb3JlL3V0aWxzLmMKaW5kZXggNzJlMGViZS4uODMyMjFhZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2Fja3ZlYy5oIGIvbmV0L2RjY3AvYWNrdmVjLmgKaW5kZXggNDVmOTVlNS4uN2VhNTU3YiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvYWNrdmVjLmgKKysrIGIvbmV0L2RjY3AvYWNrdmVjLmgKQEAgLTIwLDYgKzIwLDkgQEAKIC8qIFdlIGNhbiBzcHJlYWQgYW4gYWNrIHZlY3RvciBhY3Jvc3MgbXVsdGlwbGUgb3B0aW9ucyAqLwogI2RlZmluZSBEQ0NQX01BWF9BQ0tWRUNfTEVOIChEQ0NQX1NJTkdMRV9PUFRfTUFYTEVOICogMikKIAorLyogRXN0aW1hdGVkIG1pbmltdW0gYXZlcmFnZSBBY2sgVmVjdG9yIGxlbmd0aCAtIHVzZWQgZm9yIHVwZGF0aW5nIE1QUyAqLworI2RlZmluZSBEQ0NQQVZfTUlOX09QVExFTgkxNgorCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVECTAKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfRUNOX01BUktFRAkoMSA8PCA2KQogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9OT1RfUkVDRUlWRUQJKDMgPDwgNikKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RjY3AuaCBiL25ldC9kY2NwL2RjY3AuaAppbmRleCBmMjIzMGZjLi5kNmJjNDczIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kY2NwLmgKKysrIGIvbmV0L2RjY3AvZGNjcC5oCkBAIC00Miw5ICs0MiwxMSBAQAogZXh0ZXJuIGludCBkY2NwX2RlYnVnOwogI2RlZmluZSBkY2NwX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikJICBEQ0NQX1BSX0RFQlVHKGRjY3BfZGVidWcsIGZvcm1hdCwgIyNhKQogI2RlZmluZSBkY2NwX3ByX2RlYnVnX2NhdChmb3JtYXQsIGEuLi4pICAgRENDUF9QUklOVEsoZGNjcF9kZWJ1ZywgZm9ybWF0LCAjI2EpCisjZGVmaW5lIGRjY3BfZGVidWcoZm10LCBhLi4uKQkJICBkY2NwX3ByX2RlYnVnX2NhdChLRVJOX0RFQlVHIGZtdCwgIyNhKQogI2Vsc2UKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCiAjZGVmaW5lIGRjY3BfcHJfZGVidWdfY2F0KGZvcm1hdCwgYS4uLikKKyNkZWZpbmUgZGNjcF9kZWJ1Zyhmb3JtYXQsIGEuLi4pCiAjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBpbmV0X2hhc2hpbmZvIGRjY3BfaGFzaGluZm87CkBAIC02MSwxMSArNjMsMTQgQEAKICAqICAgIC0gRENDUC1SZXNldCAgICB3aXRoIEFDSyBTdWJoZWFkZXIgYW5kIDQgYnl0ZXMgb2YgUmVzZXQgQ29kZSBmaWVsZHMKICAqICBIZW5jZSBhIHNhZmUgdXBwZXIgYm91bmQgZm9yIHRoZSBtYXhpbXVtIG9wdGlvbiBsZW5ndGggaXMgMTAyMC0yOCA9IDk5MgogICovCi0jZGVmaW5lIE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAoMjU1ICogc2l6ZW9mKGludCkpCisjZGVmaW5lIE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAoMjU1ICogc2l6ZW9mKHVpbnQzMl90KSkKICNkZWZpbmUgRENDUF9NQVhfUEFDS0VUX0hEUiAyOAogI2RlZmluZSBEQ0NQX01BWF9PUFRfTEVOIChNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgLSBEQ0NQX01BWF9QQUNLRVRfSERSKQogI2RlZmluZSBNQVhfRENDUF9IRUFERVIgKE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiArIE1BWF9IRUFERVIpCiAKKy8qIFVwcGVyIGJvdW5kIGZvciBpbml0aWFsIGZlYXR1cmUtbmVnb3RpYXRpb24gb3ZlcmhlYWQgKHBhZGRlZCB0byAzMiBiaXRzKSAqLworI2RlZmluZSBEQ0NQX0ZFQVRORUdfT1ZFUkhFQUQJICgzMiAqIHNpemVvZih1aW50MzJfdCkpCisKICNkZWZpbmUgRENDUF9USU1FV0FJVF9MRU4gKDYwICogSFopIC8qIGhvdyBsb25nIHRvIHdhaXQgdG8gZGVzdHJveSBUSU1FLVdBSVQKIAkJCQkgICAgICogc3RhdGUsIGFib3V0IDYwIHNlY29uZHMgKi8KIApAQCAtOTUsOSArMTAwLDYgQEAKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllczsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JldHJpZXMxOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmV0cmllczI7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdzsKLWV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZDsKLWV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZDsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3R4X3FsZW47CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9zeW5jX3JhdGVsaW1pdDsKIApAQCAtNDA5LDIzICs0MTEsMjEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3VwZGF0ZV9nc3Ioc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JY29uc3Qgc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CiAKIAlkcC0+ZGNjcHNfZ3NyID0gc2VxOwotCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfc3dsLAotCQkgICAgICAgZHAtPmRjY3BzX2dzciArIDEgLSAoZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyAvIDQpKTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX3N3aCwKLQkJICAgICAgIGRwLT5kY2Nwc19nc3IgKyAoMyAqIGRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cpIC8gNCk7CisJLyogU2VxdWVuY2UgdmFsaWRpdHkgd2luZG93IGRlcGVuZHMgb24gcmVtb3RlIFNlcXVlbmNlIFdpbmRvdyAoNy41LjEpICovCisJZHAtPmRjY3BzX3N3bCA9IFNVQjQ4KEFERDQ4KGRwLT5kY2Nwc19nc3IsIDEpLCBkcC0+ZGNjcHNfcl9zZXFfd2luIC8gNCk7CisJZHAtPmRjY3BzX3N3aCA9IEFERDQ4KGRwLT5kY2Nwc19nc3IsICgzICogZHAtPmRjY3BzX3Jfc2VxX3dpbikgLyA0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRjY3BfdXBkYXRlX2dzcyhzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAotCWRwLT5kY2Nwc19hd2ggPSBkcC0+ZGNjcHNfZ3NzID0gc2VxOwotCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfYXdsLAotCQkgICAgICAgKGRwLT5kY2Nwc19nc3MgLQotCQkJZGNjcF9tc2soc2spLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ICsgMSkpOworCWRwLT5kY2Nwc19nc3MgPSBzZXE7CisJLyogQWNrIHZhbGlkaXR5IHdpbmRvdyBkZXBlbmRzIG9uIGxvY2FsIFNlcXVlbmNlIFdpbmRvdyB2YWx1ZSAoNy41LjEpICovCisJZHAtPmRjY3BzX2F3bCA9IFNVQjQ4KEFERDQ4KGRwLT5kY2Nwc19nc3MsIDEpLCBkcC0+ZGNjcHNfbF9zZXFfd2luKTsKKwlkcC0+ZGNjcHNfYXdoID0gZHAtPmRjY3BzX2dzczsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2tfcGVuZGluZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmMgYi9uZXQvZGNjcC9mZWF0LmMKaW5kZXggNDE1MjMwOC4uYjA0MTYwYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5jCisrKyBiL25ldC9kY2NwL2ZlYXQuYwpAQCAtMjUsNiArMjUsMTEgQEAKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZmVhdC5oIgogCisvKiBmZWF0dXJlLXNwZWNpZmljIHN5c2N0bHMgLSBpbml0aWFsaXNlZCB0byB0aGUgZGVmYXVsdHMgZnJvbSBSRkMgNDM0MCwgNi40ICovCit1bnNpZ25lZCBsb25nCXN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdyBfX3JlYWRfbW9zdGx5ID0gMTAwOworaW50CQlzeXNjdGxfZGNjcF9yeF9jY2lkCSAgICBfX3JlYWRfbW9zdGx5ID0gMiwKKwkJc3lzY3RsX2RjY3BfdHhfY2NpZAkgICAgX19yZWFkX21vc3RseSA9IDI7CisKIC8qCiAgKiBGZWF0dXJlIGFjdGl2YXRpb24gaGFuZGxlcnMuCiAgKgpAQCAtNTEsOCArNTYsMTcgQEAKIAogc3RhdGljIGludCBkY2NwX2hkbHJfc2VxX3dpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXFfd2luLCBib29sIHJ4KQogewotCWlmICghcngpCi0JCWRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHNlcV93aW47CisJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKworCWlmIChyeCkgeworCQlkcC0+ZGNjcHNfcl9zZXFfd2luID0gc2VxX3dpbjsKKwkJLyogcHJvcGFnYXRlIGNoYW5nZXMgdG8gdXBkYXRlIFNXTC9TV0ggKi8KKwkJZGNjcF91cGRhdGVfZ3NyKHNrLCBkcC0+ZGNjcHNfZ3NyKTsKKwl9IGVsc2UgeworCQlkcC0+ZGNjcHNfbF9zZXFfd2luID0gc2VxX3dpbjsKKwkJLyogcHJvcGFnYXRlIGNoYW5nZXMgdG8gdXBkYXRlIEFXTCAqLworCQlkY2NwX3VwZGF0ZV9nc3Moc2ssIGRwLT5kY2Nwc19nc3MpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0LDYgKzIwOCwxMDAgQEAKIAlyZXR1cm4gaWR4IDwgMCA/IDAgOiBkY2NwX2ZlYXRfdGFibGVbaWR4XS5kZWZhdWx0X3ZhbHVlOwogfQogCisvKgorICoJRGVidWdnaW5nIGFuZCB2ZXJib3NlLXByaW50aW5nIHNlY3Rpb24KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9mbmFtZShjb25zdCB1OCBmZWF0KQoreworCXN0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlX25hbWVzW10gPSB7CisJCVtEQ0NQRl9SRVNFUlZFRF0JPSAiUmVzZXJ2ZWQiLAorCQlbRENDUEZfQ0NJRF0JCT0gIkNDSUQiLAorCQlbRENDUEZfU0hPUlRfU0VRTk9TXQk9ICJBbGxvdyBTaG9ydCBTZXFub3MiLAorCQlbRENDUEZfU0VRVUVOQ0VfV0lORE9XXQk9ICJTZXF1ZW5jZSBXaW5kb3ciLAorCQlbRENDUEZfRUNOX0lOQ0FQQUJMRV0JPSAiRUNOIEluY2FwYWJsZSIsCisJCVtEQ0NQRl9BQ0tfUkFUSU9dCT0gIkFjayBSYXRpbyIsCisJCVtEQ0NQRl9TRU5EX0FDS19WRUNUT1JdCT0gIlNlbmQgQUNLIFZlY3RvciIsCisJCVtEQ0NQRl9TRU5EX05EUF9DT1VOVF0JPSAiU2VuZCBORFAgQ291bnQiLAorCQlbRENDUEZfTUlOX0NTVU1fQ09WRVJdCT0gIk1pbi4gQ3N1bSBDb3ZlcmFnZSIsCisJCVtEQ0NQRl9EQVRBX0NIRUNLU1VNXQk9ICJTZW5kIERhdGEgQ2hlY2tzdW0iLAorCX07CisJaWYgKGZlYXQgPiBEQ0NQRl9EQVRBX0NIRUNLU1VNICYmIGZlYXQgPCBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKKwkJcmV0dXJuIGZlYXR1cmVfbmFtZXNbRENDUEZfUkVTRVJWRURdOworCisJaWYgKGZlYXQgPT0gIERDQ1BGX1NFTkRfTEVWX1JBVEUpCisJCXJldHVybiAiU2VuZCBMb3NzIEV2ZW50IFJhdGUiOworCWlmIChmZWF0ID49IERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDKQorCQlyZXR1cm4gIkNDSUQtc3BlY2lmaWMiOworCisJcmV0dXJuIGZlYXR1cmVfbmFtZXNbZmVhdF07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfc25hbWVbXSA9IHsgIkRFRkFVTFQiLCAiSU5JVElBTElTSU5HIiwgIkNIQU5HSU5HIiwKKwkJCQkJICJVTlNUQUJMRSIsICJTVEFCTEUiIH07CisKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRworc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9vbmFtZShjb25zdCB1OCBvcHQpCit7CisJc3dpdGNoIChvcHQpIHsKKwljYXNlIERDQ1BPX0NIQU5HRV9MOiAgcmV0dXJuICJDaGFuZ2VfTCI7CisJY2FzZSBEQ0NQT19DT05GSVJNX0w6IHJldHVybiAiQ29uZmlybV9MIjsKKwljYXNlIERDQ1BPX0NIQU5HRV9SOiAgcmV0dXJuICJDaGFuZ2VfUiI7CisJY2FzZSBEQ0NQT19DT05GSVJNX1I6IHJldHVybiAiQ29uZmlybV9SIjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfZmVhdF9wcmludHZhbCh1OCBmZWF0X251bSwgZGNjcF9mZWF0X3ZhbCBjb25zdCAqdmFsKQoreworCXU4IGksIHR5cGUgPSBkY2NwX2ZlYXRfdHlwZShmZWF0X251bSk7CisKKwlpZiAodmFsID09IE5VTEwgfHwgKHR5cGUgPT0gRkVBVF9TUCAmJiB2YWwtPnNwLnZlYyA9PSBOVUxMKSkKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoIihOVUxMKSIpOworCWVsc2UgaWYgKHR5cGUgPT0gRkVBVF9TUCkKKwkJZm9yIChpID0gMDsgaSA8IHZhbC0+c3AubGVuOyBpKyspCisJCQlkY2NwX3ByX2RlYnVnX2NhdCgiJXMldSIsIGkgPyAiICIgOiAiIiwgdmFsLT5zcC52ZWNbaV0pOworCWVsc2UgaWYgKHR5cGUgPT0gRkVBVF9OTikKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbC0+bm4pOworCWVsc2UKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoInVua25vd24gdHlwZSAldSIsIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnR2YWxzKHU4IGZlYXRfbnVtLCB1OCAqbGlzdCwgdTggbGVuKQoreworCXU4IHR5cGUgPSBkY2NwX2ZlYXRfdHlwZShmZWF0X251bSk7CisJZGNjcF9mZWF0X3ZhbCBmdmFsID0geyAuc3AudmVjID0gbGlzdCwgLnNwLmxlbiA9IGxlbiB9OworCisJaWYgKHR5cGUgPT0gRkVBVF9OTikKKwkJZnZhbC5ubiA9IGRjY3BfZGVjb2RlX3ZhbHVlX3ZhcihsaXN0LCBsZW4pOworCWRjY3BfZmVhdF9wcmludHZhbChmZWF0X251bSwgJmZ2YWwpOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnRfZW50cnkoc3RydWN0IGRjY3BfZmVhdF9lbnRyeSBjb25zdCAqZW50cnkpCit7CisJZGNjcF9kZWJ1ZygiICAgKiAlcyAlcyA9ICIsIGVudHJ5LT5pc19sb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKKwkJCQkgICAgZGNjcF9mZWF0X2ZuYW1lKGVudHJ5LT5mZWF0X251bSkpOworCWRjY3BfZmVhdF9wcmludHZhbChlbnRyeS0+ZmVhdF9udW0sICZlbnRyeS0+dmFsKTsKKwlkY2NwX3ByX2RlYnVnX2NhdCgiLCBzdGF0ZT0lcyAlc1xuIiwgZGNjcF9mZWF0X3NuYW1lW2VudHJ5LT5zdGF0ZV0sCisJCQkgIGVudHJ5LT5uZWVkc19jb25maXJtID8gIihDb25maXJtIHBlbmRpbmcpIiA6ICIiKTsKK30KKworI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIG1hbmRhdG9yeSkJZG8gewkgICAgICBcCisJZGNjcF9wcl9kZWJ1ZygiJXMoJXMsICIsIGRjY3BfZmVhdF9vbmFtZShvcHQpLCBkY2NwX2ZlYXRfZm5hbWUoZmVhdCkpO1wKKwlkY2NwX2ZlYXRfcHJpbnR2YWxzKGZlYXQsIHZhbCwgbGVuKTsJCQkJICAgICAgXAorCWRjY3BfcHJfZGVidWdfY2F0KCIpICVzXG4iLCBtYW5kYXRvcnkgPyAiISIgOiAiIik7CX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbl9saXN0KSAgewkJXAorCWNvbnN0IHN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgKl9fX2VudHJ5OwkJXAorCQkJCQkJCVwKKwlkY2NwX3ByX2RlYnVnKCJMaXN0IER1bXA6XG4iKTsJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShfX19lbnRyeSwgZm5fbGlzdCwgbm9kZSkJXAorCQlkY2NwX2ZlYXRfcHJpbnRfZW50cnkoX19fZW50cnkpOwlcCit9CisjZWxzZQkvKiAhIENPTkZJR19JUF9EQ0NQX0RFQlVHICovCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBmZWF0LCB2YWwsIGxlbiwgbWFuZGF0b3J5KQorI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfZm5saXN0KGZuX2xpc3QpCisjZW5kaWYKKwogc3RhdGljIGludCBfX2RjY3BfZmVhdF9hY3RpdmF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBpZHgsCiAJCQkJY29uc3QgYm9vbCBpc19sb2NhbCwgZGNjcF9mZWF0X3ZhbCBjb25zdCAqZnZhbCkKIHsKQEAgLTIyNiw2ICszMzQsMTAgQEAKIAkvKiBMb2NhdGlvbiBpcyBSWCBpZiB0aGlzIGlzIGEgbG9jYWwtUlggb3IgcmVtb3RlLVRYIGZlYXR1cmUgKi8KIAlyeCA9IChpc19sb2NhbCA9PSAoZGNjcF9mZWF0X3RhYmxlW2lkeF0ucnh0eCA9PSBGRUFUX0FUX1JYKSk7CiAKKwlkY2NwX2RlYnVnKCIgICAtPiBhY3RpdmF0aW5nICVzICVzLCAlc3ZhbD0lbGx1XG4iLCByeCA/ICJSWCIgOiAiVFgiLAorCQkgICBkY2NwX2ZlYXRfZm5hbWUoZGNjcF9mZWF0X3RhYmxlW2lkeF0uZmVhdF9udW0pLAorCQkgICBmdmFsID8gIiIgOiAiZGVmYXVsdCAiLCAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwpOworCiAJcmV0dXJuIGRjY3BfZmVhdF90YWJsZVtpZHhdLmFjdGl2YXRpb25faGRscihzaywgdmFsLCByeCk7CiB9CiAKQEAgLTUzMCw2ICs2NDIsNyBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfQorCQlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgcG9zLT5mZWF0X251bSwgcHRyLCBsZW4sIDApOwogCiAJCWlmIChkY2NwX2luc2VydF9mbl9vcHQoc2tiLCBvcHQsIHBvcy0+ZmVhdF9udW0sIHB0ciwgbGVuLCBycHQpKQogCQkJcmV0dXJuIC0xOwpAQCAtNzgzLDYgKzg5Niw3IEBACiAJd2hpbGUgKGktLSkKIAkJaWYgKGNjaWRzW2ldID4gMCAmJiBkY2NwX2ZlYXRfcHJvcGFnYXRlX2NjaWQoZm4sIGNjaWRzW2ldLCBpKSkKIAkJCXJldHVybiAtMTsKKwlkY2NwX2ZlYXRfcHJpbnRfZm5saXN0KGZuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTAxLDYgKzEwMTUsOCBAQAogCWlmIChsZW4gPT0gMCB8fCB0eXBlID09IEZFQVRfVU5LTk9XTikJCS8qIDYuMSBhbmQgNi42LjggKi8KIAkJZ290byB1bmtub3duX2ZlYXR1cmVfb3JfdmFsdWU7CiAKKwlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIGlzX21hbmRhdG9yeSk7CisKIAkvKgogCSAqCU5lZ290aWF0aW9uIG9mIE5OIGZlYXR1cmVzOiBDaGFuZ2UgUiBpcyBpbnZhbGlkLCBzbyB0aGVyZSBpcyBubwogCSAqCXNpbXVsdGFuZW91cyBuZWdvdGlhdGlvbjsgaGVuY2Ugd2UgZG8gbm90IGxvb2sgdXAgaW4gdGhlIGxpc3QuCkBAIC0xMDA2LDYgKzExMjIsOCBAQAogCWNvbnN0IGJvb2wgbG9jYWwgPSAob3B0ID09IERDQ1BPX0NPTkZJUk1fUik7CiAJc3RydWN0IGRjY3BfZmVhdF9lbnRyeSAqZW50cnkgPSBkY2NwX2ZlYXRfbGlzdF9sb29rdXAoZm4sIGZlYXQsIGxvY2FsKTsKIAorCWRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBmZWF0LCB2YWwsIGxlbiwgaXNfbWFuZGF0b3J5KTsKKwogCWlmIChlbnRyeSA9PSBOVUxMKSB7CS8qIG5vdGhpbmcgcXVldWVkOiBpZ25vcmUgb3IgaGFuZGxlIGVycm9yICovCiAJCWlmIChpc19tYW5kYXRvcnkgJiYgdHlwZSA9PSBGRUFUX1VOS05PV04pCiAJCQlyZXR1cm4gRENDUF9SRVNFVF9DT0RFX01BTkRBVE9SWV9FUlJPUjsKQEAgLTExMTUsMjMgKzEyMzMsNzAgQEAKIAlyZXR1cm4gMDsJLyogaWdub3JlIEZOIG9wdGlvbnMgaW4gYWxsIG90aGVyIHN0YXRlcyAqLwogfQogCisvKioKKyAqIGRjY3BfZmVhdF9pbml0ICAtICBTZWVkIGZlYXR1cmUgbmVnb3RpYXRpb24gd2l0aCBob3N0LXNwZWNpZmljIGRlZmF1bHRzCisgKiBUaGlzIGluaXRpYWxpc2VzIGdsb2JhbCBkZWZhdWx0cywgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUgc3lzY3Rscy4KKyAqIFRoZXNlIGNhbiBsYXRlciBiZSBvdmVycmlkZGVuIGJ5IHJlZ2lzdGVyaW5nIGNoYW5nZXMgdmlhIHNldHNvY2tvcHQgY2FsbHMuCisgKiBUaGUgbGFzdCBsaW5rIGluIHRoZSBjaGFpbiBpcyBmaW5hbGlzZV9zZXR0aW5ncywgdG8gbWFrZSBzdXJlIHRoYXQgYmV0d2VlbgorICogaGVyZSBhbmQgdGhlIHN0YXJ0IG9mIGFjdHVhbCBmZWF0dXJlIG5lZ290aWF0aW9uIG5vIGluY29uc2lzdGVuY2llcyBlbnRlci4KKyAqCisgKiBBbGwgZmVhdHVyZXMgbm90IGFwcGVhcmluZyBiZWxvdyB1c2UgZWl0aGVyIGRlZmF1bHRzIG9yIGFyZSBvdGhlcndpc2UKKyAqIGxhdGVyIGFkanVzdGVkIHRocm91Z2ggZGNjcF9mZWF0X2ZpbmFsaXNlX3NldHRpbmdzKCkuCisgKi8KIGludCBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQlzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayA9IGRjY3BfbXNrKHNrKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmbiA9ICZkY2NwX3NrKHNrKS0+ZGNjcHNfZmVhdG5lZzsKKwl1OCBvbiA9IDEsIG9mZiA9IDA7CiAJaW50IHJjOworCXN0cnVjdCB7CisJCXU4ICp2YWw7CisJCXU4IGxlbjsKKwl9IHR4LCByeDsKIAotCUlOSVRfTElTVF9IRUFEKCZkbXNrLT5kY2NwbXNfcGVuZGluZyk7CS8qIFhYWCBubyBsb25nZXIgdXNlZCAqLwotCUlOSVRfTElTVF9IRUFEKCZkbXNrLT5kY2NwbXNfY29uZik7CS8qIFhYWCBubyBsb25nZXIgdXNlZCAqLworCS8qIE5vbi1uZWdvdGlhYmxlIChOTikgZmVhdHVyZXMgKi8KKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9ubihmbiwgRENDUEZfU0VRVUVOQ0VfV0lORE9XLCAwLAorCQkJCSAgICBzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3cpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JLyogQWNrIHJhdGlvICovCi0JcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfbm4oJmRwLT5kY2Nwc19mZWF0bmVnLCBEQ0NQRl9BQ0tfUkFUSU8sIDAsCi0JCQkJZHAtPmRjY3BzX2xfYWNrX3JhdGlvKTsKKwkvKiBTZXJ2ZXItcHJpb3JpdHkgKFNQKSBmZWF0dXJlcyAqLworCisJLyogQWR2ZXJ0aXNlIHRoYXQgc2hvcnQgc2Vxbm9zIGFyZSBub3Qgc3VwcG9ydGVkICg3LjYuMSkgKi8KKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfU0hPUlRfU0VRTk9TLCB0cnVlLCB0cnVlLCAmb2ZmLCAxKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIFJGQyA0MzQwIDEyLjE6ICJJZiBhIERDQ1AgaXMgbm90IEVDTiBjYXBhYmxlLCAuLi4iICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX0VDTl9JTkNBUEFCTEUsIHRydWUsIHRydWUsICZvbiwgMSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIFdlIGFkdmVydGlzZSB0aGUgYXZhaWxhYmxlIGxpc3Qgb2YgQ0NJRHMgYW5kIHJlb3JkZXIgYWNjb3JkaW5nIHRvCisJICogcHJlZmVyZW5jZXMsIHRvIGF2b2lkIGZhaWx1cmUgcmVzdWx0aW5nIGZyb20gbmVnb3RpYXRpbmcgZGlmZmVyZW50CisJICogc2luZ2xldG9uIHZhbHVlcyAod2hpY2ggYWx3YXlzIGxlYWRzIHRvIGZhaWx1cmUpLgorCSAqIFRoZXNlIHNldHRpbmdzIGNhbiBzdGlsbCAobGF0ZXIpIGJlIG92ZXJyaWRkZW4gdmlhIHNvY2tvcHRzLgorCSAqLworCWlmIChjY2lkX2dldF9idWlsdGluX2NjaWRzKCZ0eC52YWwsICZ0eC5sZW4pIHx8CisJICAgIGNjaWRfZ2V0X2J1aWx0aW5fY2NpZHMoJnJ4LnZhbCwgJnJ4LmxlbikpCisJCXJldHVybiAtRU5PQlVGUzsKKworCWlmICghZGNjcF9mZWF0X3ByZWZlcihzeXNjdGxfZGNjcF90eF9jY2lkLCB0eC52YWwsIHR4LmxlbikgfHwKKwkgICAgIWRjY3BfZmVhdF9wcmVmZXIoc3lzY3RsX2RjY3BfcnhfY2NpZCwgcngudmFsLCByeC5sZW4pKQorCQlnb3RvIGZyZWVfY2NpZF9saXN0czsKKworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9DQ0lELCB0cnVlLCBmYWxzZSwgdHgudmFsLCB0eC5sZW4pOworCWlmIChyYykKKwkJZ290byBmcmVlX2NjaWRfbGlzdHM7CisKKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfQ0NJRCwgZmFsc2UsIGZhbHNlLCByeC52YWwsIHJ4Lmxlbik7CisKK2ZyZWVfY2NpZF9saXN0czoKKwlrZnJlZSh0eC52YWwpOworCWtmcmVlKHJ4LnZhbCk7CiAJcmV0dXJuIHJjOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX2ZlYXRfaW5pdCk7Ci0KIGludCBkY2NwX2ZlYXRfYWN0aXZhdGVfdmFsdWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqZm5fbGlzdCkKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwpAQCAtMTE1Niw5ICsxMzIxLDEwIEBACiAJCQlnb3RvIGFjdGl2YXRpb25fZmFpbGVkOwogCQl9CiAJCWlmIChjdXItPnN0YXRlICE9IEZFQVRfU1RBQkxFKSB7Ci0JCQlEQ0NQX0NSSVQoIk5lZ290aWF0aW9uIG9mICVzICV1IGZhaWxlZCBpbiBzdGF0ZSAldSIsCisJCQlEQ0NQX0NSSVQoIk5lZ290aWF0aW9uIG9mICVzICVzIGZhaWxlZCBpbiBzdGF0ZSAlcyIsCiAJCQkJICBjdXItPmlzX2xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotCQkJCSAgY3VyLT5mZWF0X251bSwgY3VyLT5zdGF0ZSk7CisJCQkJICBkY2NwX2ZlYXRfZm5hbWUoY3VyLT5mZWF0X251bSksCisJCQkJICBkY2NwX2ZlYXRfc25hbWVbY3VyLT5zdGF0ZV0pOwogCQkJZ290byBhY3RpdmF0aW9uX2ZhaWxlZDsKIAkJfQogCQlmdmFsc1tpZHhdW2N1ci0+aXNfbG9jYWxdID0gJmN1ci0+dmFsOwpAQCAtMTE5OSw0MyArMTM2NSwzIEBACiAJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IE5VTEw7CiAJcmV0dXJuIC0xOwogfQotCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLWNvbnN0IGNoYXIgKmRjY3BfZmVhdF90eXBlbmFtZShjb25zdCB1OCB0eXBlKQotewotCXN3aXRjaCh0eXBlKSB7Ci0JY2FzZSBEQ0NQT19DSEFOR0VfTDogIHJldHVybigiQ2hhbmdlTCIpOwotCWNhc2UgRENDUE9fQ09ORklSTV9MOiByZXR1cm4oIkNvbmZpcm1MIik7Ci0JY2FzZSBEQ0NQT19DSEFOR0VfUjogIHJldHVybigiQ2hhbmdlUiIpOwotCWNhc2UgRENDUE9fQ09ORklSTV9SOiByZXR1cm4oIkNvbmZpcm1SIik7Ci0JLyogdGhlIGZvbGxvd2luZyBjYXNlIG11c3Qgbm90IGFwcGVhciBpbiBmZWF0dXJlIG5lZ290YXRpb24gICovCi0JZGVmYXVsdDoJICAgICAgZGNjcF9wcl9kZWJ1ZygidW5rbm93biB0eXBlICVkIFtCVUchXVxuIiwgdHlwZSk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1jb25zdCBjaGFyICpkY2NwX2ZlYXRfbmFtZShjb25zdCB1OCBmZWF0KQotewotCXN0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlX25hbWVzW10gPSB7Ci0JCVtEQ0NQRl9SRVNFUlZFRF0JPSAiUmVzZXJ2ZWQiLAotCQlbRENDUEZfQ0NJRF0JCT0gIkNDSUQiLAotCQlbRENDUEZfU0hPUlRfU0VRTk9TXQk9ICJBbGxvdyBTaG9ydCBTZXFub3MiLAotCQlbRENDUEZfU0VRVUVOQ0VfV0lORE9XXQk9ICJTZXF1ZW5jZSBXaW5kb3ciLAotCQlbRENDUEZfRUNOX0lOQ0FQQUJMRV0JPSAiRUNOIEluY2FwYWJsZSIsCi0JCVtEQ0NQRl9BQ0tfUkFUSU9dCT0gIkFjayBSYXRpbyIsCi0JCVtEQ0NQRl9TRU5EX0FDS19WRUNUT1JdCT0gIlNlbmQgQUNLIFZlY3RvciIsCi0JCVtEQ0NQRl9TRU5EX05EUF9DT1VOVF0JPSAiU2VuZCBORFAgQ291bnQiLAotCQlbRENDUEZfTUlOX0NTVU1fQ09WRVJdCT0gIk1pbi4gQ3N1bSBDb3ZlcmFnZSIsCi0JCVtEQ0NQRl9EQVRBX0NIRUNLU1VNXQk9ICJTZW5kIERhdGEgQ2hlY2tzdW0iLAotCX07Ci0JaWYgKGZlYXQgPiBEQ0NQRl9EQVRBX0NIRUNLU1VNICYmIGZlYXQgPCBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKLQkJcmV0dXJuIGZlYXR1cmVfbmFtZXNbRENDUEZfUkVTRVJWRURdOwotCi0JaWYgKGZlYXQgPT0gIERDQ1BGX1NFTkRfTEVWX1JBVEUpCi0JCXJldHVybiAiU2VuZCBMb3NzIEV2ZW50IFJhdGUiOwotCWlmIChmZWF0ID49IERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDKQotCQlyZXR1cm4gIkNDSUQtc3BlY2lmaWMiOwotCi0JcmV0dXJuIGZlYXR1cmVfbmFtZXNbZmVhdF07Ci19Ci0jZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuaCBiL25ldC9kY2NwL2ZlYXQuaAppbmRleCA5YjQ2ZTJhLi5mOTY3MjE2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmgKKysrIGIvbmV0L2RjY3AvZmVhdC5oCkBAIC0xMDAsMjYgKzEwMCwyMSBAQAogCXU4CXZhbDsKIH07CiAKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotZXh0ZXJuIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF90eXBlbmFtZShjb25zdCB1OCB0eXBlKTsKLWV4dGVybiBjb25zdCBjaGFyICpkY2NwX2ZlYXRfbmFtZShjb25zdCB1OCBmZWF0KTsKKy8qCisgKiBTeXNjdGxzIHRvIHNlZWQgZGVmYXVsdHMgZm9yIGZlYXR1cmUgbmVnb3RpYXRpb24KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93OworZXh0ZXJuIGludAkgICAgIHN5c2N0bF9kY2NwX3J4X2NjaWQ7CitleHRlcm4gaW50CSAgICAgc3lzY3RsX2RjY3BfdHhfY2NpZDsKIAotc3RhdGljIGlubGluZSB2b2lkIGRjY3BfZmVhdF9kZWJ1Zyhjb25zdCB1OCB0eXBlLCBjb25zdCB1OCBmZWF0LCBjb25zdCB1OCB2YWwpCi17Ci0JZGNjcF9wcl9kZWJ1ZygiJXMoJXMgKCVkKSwgJWQpXG4iLCBkY2NwX2ZlYXRfdHlwZW5hbWUodHlwZSksCi0JCQkJCSAgIGRjY3BfZmVhdF9uYW1lKGZlYXQpLCBmZWF0LCB2YWwpOwotfQotI2Vsc2UKLSNkZWZpbmUgZGNjcF9mZWF0X2RlYnVnKHR5cGUsIGZlYXQsIHZhbCkKLSNlbmRpZiAvKiBDT05GSUdfSVBfRENDUF9ERUJVRyAqLwotCitleHRlcm4gaW50ICBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgZGNjcF9mZWF0X2luaXRpYWxpc2Vfc3lzY3Rscyh2b2lkKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9yZWdpc3Rlcl9zcChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZlYXQsIHU4IGlzX2xvY2FsLAogCQkJCSAgdTggY29uc3QgKmxpc3QsIHU4IGxlbik7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcmVnaXN0ZXJfbm4oc3RydWN0IHNvY2sgKnNrLCB1OCBmZWF0LCB1NjQgdmFsKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9wYXJzZV9vcHRpb25zKHN0cnVjdCBzb2NrICosIHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqLAogCQkJCSAgICB1OCBtYW5kLCB1OCBvcHQsIHU4IGZlYXQsIHU4ICp2YWwsIHU4IGxlbik7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfY2xvbmVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkIGNvbnN0ICosIHN0cnVjdCBsaXN0X2hlYWQgKik7Ci1leHRlcm4gaW50ICBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spOwogCiAvKgogICogRW5jb2RpbmcgdmFyaWFibGUtbGVuZ3RoIG9wdGlvbnMgYW5kIHRoZWlyIG1heGltdW0gbGVuZ3RoLgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCA2ODIxYWUzLi41Y2E0OWNlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtNDIsMTEgKzQyLDYgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9kZWF0aF9yb3cpOwogCi12b2lkIGRjY3BfbWluaXNvY2tfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zaykKLXsKLQlkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7Ci19Ci0KIHZvaWQgZGNjcF90aW1lX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIGludCB0aW1lbykKIHsKIAlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7CkBAIC0xMTAsNyArMTA1LDYgQEAKIAkJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxID0gZGNjcF9yc2socmVxKTsKIAkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrID0gaW5ldF9jc2sobmV3c2spOwogCQlzdHJ1Y3QgZGNjcF9zb2NrICpuZXdkcCA9IGRjY3Bfc2sobmV3c2spOwotCQlzdHJ1Y3QgZGNjcF9taW5pc29jayAqbmV3ZG1zayA9IGRjY3BfbXNrKG5ld3NrKTsKIAogCQluZXdkcC0+ZGNjcHNfcm9sZQkgICAgPSBEQ0NQX1JPTEVfU0VSVkVSOwogCQluZXdkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjICAgPSBOVUxMOwpAQCAtMTI4LDEwICsxMjIsNiBAQAogCQkgKiAgICBJbml0aWFsaXplIFMuR0FSIDo9IFMuSVNTCiAJCSAqICAgIFNldCBTLklTUiwgUy5HU1IsIFMuU1dMLCBTLlNXSCBmcm9tIHBhY2tldCBvciBJbml0IENvb2tpZXMKIAkJICovCi0KLQkJLyogU2VlIGRjY3BfdjRfY29ubl9yZXF1ZXN0ICovCi0JCW5ld2Rtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSByZXEtPnJjdl93bmQ7Ci0KIAkJbmV3ZHAtPmRjY3BzX2dhciA9IG5ld2RwLT5kY2Nwc19pc3MgPSBkcmVxLT5kcmVxX2lzczsKIAkJZGNjcF91cGRhdGVfZ3NzKG5ld3NrLCBkcmVxLT5kcmVxX2lzcyk7CiAKQEAgLTI5MCw3ICsyODAsNiBAQAogCWluZXRfcnNrKHJlcSktPnJtdF9wb3J0CSAgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydDsKIAlpbmV0X3JzayhyZXEpLT5sb2NfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQ7CiAJaW5ldF9yc2socmVxKS0+YWNrZWQJICA9IDA7Ci0JcmVxLT5yY3Zfd25kCQkgID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7CiAJZHJlcS0+ZHJlcV90aW1lc3RhbXBfZWNobyA9IDA7CiAKIAkvKiBpbmhlcml0IGZlYXR1cmUgbmVnb3RpYXRpb24gb3B0aW9ucyBmcm9tIGxpc3RlbmluZyBzb2NrZXQgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCA3YjExNjVjLi4xYjA4Y2FlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0yMywxMCArMjMsNiBAQAogI2luY2x1ZGUgImRjY3AuaCIKICNpbmNsdWRlICJmZWF0LmgiCiAKLWludCBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdyA9IERDQ1BGX0lOSVRJQUxfU0VRVUVOQ0VfV0lORE9XOwotaW50IHN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZAkgICAgICA9IERDQ1BGX0lOSVRJQUxfQ0NJRDsKLWludCBzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7Ci0KIHU2NCBkY2NwX2RlY29kZV92YWx1ZV92YXIoY29uc3QgdTggKmJmLCBjb25zdCB1OCBsZW4pCiB7CiAJdTY0IHZhbHVlID0gMDsKQEAgLTUwMiwxMCArNDk4LDYgQEAKIAkJKnRvKysgPSAqdmFsOwogCWlmIChsZW4pCiAJCW1lbWNweSh0bywgdmFsLCBsZW4pOwotCi0JZGNjcF9wcl9kZWJ1ZygiJXMoJXMgKCVkKSwgLi4uKSwgbGVuZ3RoICVkXG4iLAotCQkgICAgICBkY2NwX2ZlYXRfdHlwZW5hbWUodHlwZSksCi0JCSAgICAgIGRjY3BfZmVhdF9uYW1lKGZlYXQpLCBmZWF0LCBsZW4pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IDIyYTYxOGEuLjM2YmNjMDAgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0xNjEsMjEgKzE2MSwyNyBAQAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXUzMiBjY21wcyA9IGRjY3BfZGV0ZXJtaW5lX2NjbXBzKGRwKTsKLQlpbnQgY3VyX21wcyA9IGNjbXBzID8gbWluKHBtdHUsIGNjbXBzKSA6IHBtdHU7CisJdTMyIGN1cl9tcHMgPSBjY21wcyA/IG1pbihwbXR1LCBjY21wcykgOiBwbXR1OwogCiAJLyogQWNjb3VudCBmb3IgaGVhZGVyIGxlbmd0aHMgYW5kIElQdjQvdjYgb3B0aW9uIG92ZXJoZWFkICovCiAJY3VyX21wcyAtPSAoaWNzay0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuICsgaWNzay0+aWNza19leHRfaGRyX2xlbiArCiAJCSAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSk7CiAKIAkvKgotCSAqIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gdGhlIENDSUQgaW5mcmFzdHJ1Y3R1cmUsIHdoZXJlLCBzYXksCi0JICogVEZSQyB3aWxsIHNheSBpdCB3YW50cyBUSU1FU1RBTVBTLCBFTEFQU0VEIHRpbWUsIGV0YywgZm9yIG5vdyBsZXRzCi0JICogcHV0IGEgcm91Z2ggZXN0aW1hdGUgZm9yIE5EUCArIFRJTUVTVEFNUCArIFRJTUVTVEFNUF9FQ0hPICsgRUxBUFNFRAotCSAqIFRJTUUgKyBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEUgKyBURlJDX09QVF9SRUNFSVZFX1JBVEUgKyBwYWRkaW5nIHRvCi0JICogbWFrZSBpdCBhIG11bHRpcGxlIG9mIDQKKwkgKiBMZWF2ZSBlbm91Z2ggaGVhZHJvb20gZm9yIGNvbW1vbiBEQ0NQIGhlYWRlciBvcHRpb25zLgorCSAqIFRoaXMgb25seSBjb25zaWRlcnMgb3B0aW9ucyB3aGljaCBtYXkgYXBwZWFyIG9uIERDQ1AtRGF0YSBwYWNrZXRzLCBhcworCSAqIHBlciB0YWJsZSAzIGluIFJGQyA0MzQwLCA1LjguIFdoZW4gcnVubmluZyBvdXQgb2Ygc3BhY2UgZm9yIG90aGVyCisJICogb3B0aW9ucyAoZWcuIEFjayBWZWN0b3Igd2hpY2ggY2FuIHRha2UgdXAgdG8gMjU1IGJ5dGVzKSwgaXQgaXMgYmV0dGVyCisJICogdG8gc2NoZWR1bGUgYSBzZXBhcmF0ZSBBY2suIFRodXMgd2UgbGVhdmUgaGVhZHJvb20gZm9yIHRoZSBmb2xsb3dpbmc6CisJICogIC0gMSBieXRlIGZvciBTbG93IFJlY2VpdmVyICgxMS42KQorCSAqICAtIDYgYnl0ZXMgZm9yIFRpbWVzdGFtcCAoMTMuMSkKKwkgKiAgLSAxMCBieXRlcyBmb3IgVGltZXN0YW1wIEVjaG8gKDEzLjMpCisJICogIC0gOCBieXRlcyBmb3IgTkRQIGNvdW50ICg3LjcsIHdoZW4gYWN0aXZhdGVkKQorCSAqICAtIDYgYnl0ZXMgZm9yIERhdGEgQ2hlY2tzdW0gKDkuMykKKwkgKiAgLSAlRENDUEFWX01JTl9PUFRMRU4gYnl0ZXMgZm9yIEFjayBWZWN0b3Igc2l6ZSAoMTEuNCwgd2hlbiBlbmFibGVkKQogCSAqLwotCi0JY3VyX21wcyAtPSByb3VuZHVwKDUgKyA2ICsgMTAgKyA2ICsgNiArIDYsIDQpOworCWN1cl9tcHMgLT0gcm91bmR1cCgxICsgNiArIDEwICsgZHAtPmRjY3BzX3NlbmRfbmRwX2NvdW50ICogOCArIDYgKworCQkJICAgKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPyBEQ0NQQVZfTUlOX09QVExFTiA6IDApLCA0KTsKIAogCS8qIEFuZCBzdG9yZSBjYWNoZWQgcmVzdWx0cyAqLwogCWljc2stPmljc2tfcG10dV9jb29raWUgPSBwbXR1OwpAQCAtMjcwLDcgKzI3NiwyMCBAQAogCQkJY29uc3QgaW50IGxlbiA9IHNrYi0+bGVuOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfUEFSVE9QRU4pIHsKLQkJCQkvKiBTZWUgOC4xLjUuICBIYW5kc2hha2UgQ29tcGxldGlvbiAqLworCQkJCWNvbnN0IHUzMiBjdXJfbXBzID0gZHAtPmRjY3BzX21zc19jYWNoZSAtIERDQ1BfRkVBVE5FR19PVkVSSEVBRDsKKwkJCQkvKgorCQkJCSAqIFNlZSA4LjEuNSAtIEhhbmRzaGFrZSBDb21wbGV0aW9uLgorCQkJCSAqCisJCQkJICogRm9yIHJvYnVzdG5lc3Mgd2UgcmVzZW5kIENvbmZpcm0gb3B0aW9ucyB1bnRpbCB0aGUgY2xpZW50IGhhcworCQkJCSAqIGVudGVyZWQgT1BFTi4gRHVyaW5nIHRoZSBpbml0aWFsIGZlYXR1cmUgbmVnb3RpYXRpb24sIHRoZSBNUFMKKwkJCQkgKiBpcyBzbWFsbGVyIHRoYW4gdXN1YWwsIHJlZHVjZWQgYnkgdGhlIENoYW5nZS9Db25maXJtIG9wdGlvbnMuCisJCQkJICovCisJCQkJaWYgKCFsaXN0X2VtcHR5KCZkcC0+ZGNjcHNfZmVhdG5lZykgJiYgbGVuID4gY3VyX21wcykgeworCQkJCQlEQ0NQX1dBUk4oIlBheWxvYWQgdG9vIGxhcmdlICglZCkgZm9yIGZlYXRuZWcuXG4iLCBsZW4pOworCQkJCQlkY2NwX3NlbmRfYWNrKHNrKTsKKwkJCQkJZGNjcF9mZWF0X2xpc3RfcHVyZ2UoJmRwLT5kY2Nwc19mZWF0bmVnKTsKKwkJCQl9CisKIAkJCQlpbmV0X2Nza19zY2hlZHVsZV9hY2soc2spOwogCQkJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9EQUNLLAogCQkJCQkJICBpbmV0X2NzayhzayktPmljc2tfcnRvLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggOTQ1YjRkNS4uMzE0YTFiNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0xNzQsOCArMTc0LDYgQEAKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAotCWRjY3BfbWluaXNvY2tfaW5pdCgmZHAtPmRjY3BzX21pbmlzb2NrKTsKLQogCWljc2stPmljc2tfcnRvCQk9IERDQ1BfVElNRU9VVF9JTklUOwogCWljc2stPmljc2tfc3luX3JldHJpZXMJPSBzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXM7CiAJc2stPnNrX3N0YXRlCQk9IERDQ1BfQ0xPU0VEOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avc3lzY3RsLmMgYi9uZXQvZGNjcC9zeXNjdGwuYwppbmRleCAwMThlMjEwLi5hNWExODU2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9zeXNjdGwuYworKysgYi9uZXQvZGNjcC9zeXNjdGwuYwpAQCAtMTgsNTUgKzE4LDcyIEBACiAjZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgY29tcGlsZWQgd2l0aG91dCBDT05GSUdfU1lTQ1RMIGRlZmluZWQKICNlbmRpZgogCisvKiBCb3VuZGFyeSB2YWx1ZXMgKi8KK3N0YXRpYyBpbnQJCXplcm8gICAgID0gMCwKKwkJCXU4X21heCAgID0gMHhGRjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCXNlcXdfbWluID0gMzI7CisKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3BfZGVmYXVsdF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gInNlcV93aW5kb3ciLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3csCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93KSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdywKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZzZXF3X21pbiwJCS8qIFJGQyA0MzQwLCA3LjUuMiAqLwogCX0sCiAJewogCQkucHJvY25hbWUJPSAicnhfY2NpZCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZCksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yeF9jY2lkLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yeF9jY2lkKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAkJLyogUkZDIDQzNDAsIDEwLiAqLwogCX0sCiAJewogCQkucHJvY25hbWUJPSAidHhfY2NpZCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZCksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF90eF9jY2lkLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF90eF9jY2lkKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAkJLyogUkZDIDQzNDAsIDEwLiAqLwogCX0sCiAJewogCQkucHJvY25hbWUJPSAicmVxdWVzdF9yZXRyaWVzIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcywKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicmV0cmllczEiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcmV0cmllczEsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JldHJpZXMxKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicmV0cmllczIiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcmV0cmllczIsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JldHJpZXMyKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAidHhfcWxlbiIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF90eF9xbGVuLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF90eF9xbGVuKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInN5bmNfcmF0ZWxpbWl0IiwKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IGNmMGUxODQuLjk2NDdkOTEgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtMTI0NiwxMSArMTI0NiwxMiBAQAogCiAJY2FzZSBUSU9DSU5ROgogCQlsb2NrX3NvY2soc2spOwotCQlpZiAoKHNrYiA9IHNrYl9wZWVrKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7CisJCXNrYiA9IHNrYl9wZWVrKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpOworCQlpZiAoc2tiKSB7CiAJCQlhbW91bnQgPSBza2ItPmxlbjsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSBzay0+c2tfcmVjZWl2ZV9xdWV1ZS5uZXh0OwotCQkJZm9yKDs7KSB7CisJCQlza2IgPSBzay0+c2tfcmVjZWl2ZV9xdWV1ZS5uZXh0OworCQkJZm9yICg7OykgewogCQkJCWlmIChza2IgPT0KIAkJCQkgICAgKHN0cnVjdCBza19idWZmICopJnNrLT5za19yZWNlaXZlX3F1ZXVlKQogCQkJCQlicmVhazsKQEAgLTE1NzksMTYgKzE1ODAsMTYgQEAKIAkJZGVmYXVsdDoKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJCXsKLQkJCWludCB2YWwsIGxlbjsKKwkJCWludCByZXQsIGxlbjsKIAogCQkJaWYoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQl2YWwgPSBuZl9nZXRzb2Nrb3B0KHNrLCBQRl9ERUNuZXQsIG9wdG5hbWUsCisJCQlyZXQgPSBuZl9nZXRzb2Nrb3B0KHNrLCBQRl9ERUNuZXQsIG9wdG5hbWUsCiAJCQkJCQkJb3B0dmFsLCAmbGVuKTsKLQkJCWlmICh2YWwgPj0gMCkKLQkJCQl2YWwgPSBwdXRfdXNlcihsZW4sIG9wdGxlbik7Ci0JCQlyZXR1cm4gdmFsOworCQkJaWYgKHJldCA+PSAwKQorCQkJCXJldCA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KICNlbmRpZgogCQljYXNlIERTT19TVFJFQU06CkBAIC0yMDcxLDggKzIwNzIsNyBAQAogCX0KIG91dDoKIAotCWlmIChza2IpCi0JCWtmcmVlX3NrYihza2IpOworCWtmcmVlX3NrYihza2IpOwogCiAJcmVsZWFzZV9zb2NrKHNrKTsKIApAQCAtMjExMiw5ICsyMTEyLDggQEAKIAogZXh0ZXJuIGludCBkbl9yb3V0ZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRuX2RpeF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ROQV9SVCksCi0JLmRldiA9CQlOVUxMLAkJLyogQWxsIGRldmljZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZG5fZGl4X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQkJY3B1X3RvX2JlMTYoRVRIX1BfRE5BX1JUKSwKIAkuZnVuYyA9CQlkbl9yb3V0ZV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCBkYWYyYjk4Li4xYzZhNWJiIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTY4NCw3ICs2ODQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoZG5fZGIgPSBkZXYtPmRuX3B0cikgPT0gTlVMTCkgewotCQlpbnQgZXJyOwogCQlkbl9kYiA9IGRuX2Rldl9jcmVhdGUoZGV2LCAmZXJyKTsKIAkJaWYgKCFkbl9kYikKIAkJCXJldHVybiBlcnI7CkBAIC03NjksNyArNzY4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9ERUNuZXRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9ERUNuZXRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycigmaW5pdF9uZXQsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgZXJyKTsKQEAgLTEzMjIsNiArMTMyMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpkbl9kZXZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKCZkZXZfYmFzZV9sb2NrKQogewogCWludCBpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMzY0LDYgKzEzNjUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBkbl9kZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggYzc1NDY3MC4uMGNjNDM5NCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBkbl9kc3Rfb3BzID0gewogCS5mYW1pbHkgPQkJUEZfREVDbmV0LAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ROQV9SVCksCisJLnByb3RvY29sID0JCWNwdV90b19iZTE2KEVUSF9QX0ROQV9SVCksCiAJLmdjX3RocmVzaCA9CQkxMjgsCiAJLmdjID0JCQlkbl9kc3RfZ2MsCiAJLmNoZWNrID0JCWRuX2RzdF9jaGVjaywKQEAgLTM4MCw3ICszODAsNiBAQAogCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAlfX2xlMTYgKnNyYzsKIAlfX2xlMTYgKmRzdDsKLQlfX2xlMTYgdG1wOwogCiAJLyogQWRkIGJhY2sgaGVhZGVycyAqLwogCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpOwpAQCAtMzk5LDEwICszOTgsNyBAQAogCXB0ciArPSAyOwogCSpwdHIgPSAwOyAvKiBaZXJvIGhvcCBjb3VudCAqLwogCi0JLyogU3dhcCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uICovCi0JdG1wICA9ICpzcmM7Ci0JKnNyYyA9ICpkc3Q7Ci0JKmRzdCA9IHRtcDsKKwlzd2FwKCpzcmMsICpkc3QpOwogCiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVVRHT0lORzsKIAlkbl9ydF9maW5pc2hfb3V0cHV0KHNrYiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKaW5kZXggNjlhZDkyOC4uNjcwNTRiMCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl90YWJsZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwpAQCAtMzc1LDcgKzM3NSw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIHBpZCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIHBpZCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwppbmRleCA5NjUzOTdhLi41YmNkNTkyIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAl9CiAKIAlpZiAod3JpdGUpIHsKLQkJaW50IGxlbiA9ICgqbGVucCA8IEROX0FTQ0JVRl9MRU4pID8gKmxlbnAgOiAoRE5fQVNDQlVGX0xFTi0xKTsKKwkJbGVuID0gKCpsZW5wIDwgRE5fQVNDQlVGX0xFTikgPyAqbGVucCA6IChETl9BU0NCVUZfTEVOLTEpOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihhZGRyLCBidWZmZXIsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL25ldC9kc2EvS2NvbmZpZyBiL25ldC9kc2EvS2NvbmZpZwppbmRleCA0OTIxMWIzLi5jNTFiNTU0IDEwMDY0NAotLS0gYS9uZXQvZHNhL0tjb25maWcKKysrIGIvbmV0L2RzYS9LY29uZmlnCkBAIC00MSwxMyArNDEsMTMgQEAKIAlkZWZhdWx0IG4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTMxCi0JYm9vbCAiTWFydmVsbCA4OEU2MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCisJYm9vbCAiTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFgKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUKIAlzZWxlY3QgTkVUX0RTQV9UQUdfRFNBCiAJLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYxMzEgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYwOTUvNjA5NUYvNjEzMQorCSAgZXRoZXJuZXQgc3dpdGNoIGNoaXBzLgogCiBjb25maWcgTkVUX0RTQV9NVjg4RTYxMjNfNjFfNjUKIAlib29sICJNYXJ2ZWxsIDg4RTYxMjMvNjE2MS82MTY1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYS5jIGIvbmV0L2RzYS9kc2EuYwppbmRleCAzM2U5OTQ2Li43MTQ4OWY2IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYS5jCisrKyBiL25ldC9kc2EvZHNhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9kc2EuYyAtIEhhcmR3YXJlIHN3aXRjaCBoYW5kbGluZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC02NywxMiArNjcsMTMgQEAKIAogLyogYmFzaWMgc3dpdGNoIG9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2ggKgotZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqcGQsCi0JCSBzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsIGludCBpbmRleCwKKwkJIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IG1paV9idXMgKmJ1cykKIHsKKwlzdHJ1Y3QgZHNhX2NoaXBfZGF0YSAqcGQgPSBkc3QtPnBkLT5jaGlwICsgaW5kZXg7CisJc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyICpkcnY7CiAJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCWludCByZXQ7Ci0Jc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyICpkcnY7CiAJY2hhciAqbmFtZTsKIAlpbnQgaTsKIApAQCAtODEsMTEgKzgyLDEyIEBACiAJICovCiAJZHJ2ID0gZHNhX3N3aXRjaF9wcm9iZShidXMsIHBkLT5zd19hZGRyLCAmbmFtZSk7CiAJaWYgKGRydiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBkZXRlY3QgYXR0YWNoZWQgc3dpdGNoXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNvdWxkIG5vdCBkZXRlY3QgYXR0YWNoZWQgc3dpdGNoXG4iLAorCQkgICAgICAgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLCBpbmRleCk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIlczogZGV0ZWN0ZWQgYSAlcyBzd2l0Y2hcbiIsIGRldi0+bmFtZSwgbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNbJWRdOiBkZXRlY3RlZCBhICVzIHN3aXRjaFxuIiwKKwkJZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLCBpbmRleCwgbmFtZSk7CiAKIAogCS8qCkBAIC05NSwxOCArOTcsMTYgQEAKIAlpZiAoZHMgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlkcy0+cGQgPSBwZDsKLQlkcy0+bWFzdGVyX25ldGRldiA9IGRldjsKLQlkcy0+bWFzdGVyX21paV9idXMgPSBidXM7Ci0KKwlkcy0+ZHN0ID0gZHN0OworCWRzLT5pbmRleCA9IGluZGV4OworCWRzLT5wZCA9IGRzdC0+cGQtPmNoaXAgKyBpbmRleDsKIAlkcy0+ZHJ2ID0gZHJ2OwotCWRzLT50YWdfcHJvdG9jb2wgPSBkcnYtPnRhZ19wcm90b2NvbDsKKwlkcy0+bWFzdGVyX21paV9idXMgPSBidXM7CiAKIAogCS8qCiAJICogVmFsaWRhdGUgc3VwcGxpZWQgc3dpdGNoIGNvbmZpZ3VyYXRpb24uCiAJICovCi0JZHMtPmNwdV9wb3J0ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewogCQljaGFyICpuYW1lOwogCkBAIC0xMTUsMzIgKzExNSwyOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKCFzdHJjbXAobmFtZSwgImNwdSIpKSB7Ci0JCQlpZiAoZHMtPmNwdV9wb3J0ICE9IC0xKSB7CisJCQlpZiAoZHN0LT5jcHVfc3dpdGNoICE9IC0xKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aXBsZSBjcHUgcG9ydHM/IVxuIik7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWRzLT5jcHVfcG9ydCA9IGk7CisJCQlkc3QtPmNwdV9zd2l0Y2ggPSBpbmRleDsKKwkJCWRzdC0+Y3B1X3BvcnQgPSBpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRzYSIpKSB7CisJCQlkcy0+ZHNhX3BvcnRfbWFzayB8PSAxIDw8IGk7CiAJCX0gZWxzZSB7Ci0JCQlkcy0+dmFsaWRfcG9ydF9tYXNrIHw9IDEgPDwgaTsKKwkJCWRzLT5waHlzX3BvcnRfbWFzayB8PSAxIDw8IGk7CiAJCX0KIAl9CiAKLQlpZiAoZHMtPmNwdV9wb3J0ID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibm8gY3B1IHBvcnQ/IVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQogCiAJLyoKLQkgKiBJZiB3ZSB1c2UgYSB0YWdnaW5nIGZvcm1hdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBldGhlcnR5cGUKLQkgKiBmaWVsZCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBhY2tldHMgZnJvbSB0aGlzIHBvaW50IG9uIGdldAotCSAqIHNlbnQgdG8gdGhlIHRhZyBmb3JtYXQncyByZWNlaXZlIGZ1bmN0aW9uLiAgKFdoaWNoIHdpbGwKLQkgKiBkaXNjYXJkIHJlY2VpdmVkIHBhY2tldHMgdW50aWwgd2Ugc2V0IGRzLT5wb3J0c1tdIGJlbG93LikKKwkgKiBJZiB0aGUgQ1BVIGNvbm5lY3RzIHRvIHRoaXMgc3dpdGNoLCBzZXQgdGhlIHN3aXRjaCB0cmVlCisJICogdGFnZ2luZyBwcm90b2NvbCB0byB0aGUgcHJlZmVycmVkIHRhZ2dpbmcgZm9ybWF0IG9mIHRoaXMKKwkgKiBzd2l0Y2guCiAJICovCi0Jd21iKCk7Ci0JZGV2LT5kc2FfcHRyID0gKHZvaWQgKilkczsKKwlpZiAoZHMtPmRzdC0+Y3B1X3N3aXRjaCA9PSBpbmRleCkKKwkJZHMtPmRzdC0+dGFnX3Byb3RvY29sID0gZHJ2LT50YWdfcHJvdG9jb2w7CiAKIAogCS8qCkBAIC0xNTAsNyArMTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBkcnYtPnNldF9hZGRyKGRzLCBkZXYtPmRldl9hZGRyKTsKKwlyZXQgPSBkcnYtPnNldF9hZGRyKGRzLCBkc3QtPm1hc3Rlcl9uZXRkZXYtPmRldl9hZGRyKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTE2OSwxOCArMTY1LDE4IEBACiAJLyoKIAkgKiBDcmVhdGUgbmV0d29yayBkZXZpY2VzIGZvciBwaHlzaWNhbCBzd2l0Y2ggcG9ydHMuCiAJICovCi0Jd21iKCk7CiAJZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2OwogCi0JCWlmICghKGRzLT52YWxpZF9wb3J0X21hc2sgJiAoMSA8PCBpKSkpCisJCWlmICghKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGkpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNsYXZlX2RldiA9IGRzYV9zbGF2ZV9jcmVhdGUoZHMsIHBhcmVudCwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOwogCQlpZiAoc2xhdmVfZGV2ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGNyZWF0ZSBkc2Egc2xhdmUgIgotCQkJICAgICAgICJkZXZpY2UgZm9yIHBvcnQgJWQoJXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNhbid0IGNyZWF0ZSBkc2EgIgorCQkJICAgICAgICJzbGF2ZSBkZXZpY2UgZm9yIHBvcnQgJWQoJXMpXG4iLAorCQkJICAgICAgIGRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwKKwkJCSAgICAgICBpbmRleCwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTkyLDcgKzE4OCw2IEBACiBvdXRfZnJlZToKIAltZGlvYnVzX2ZyZWUoZHMtPnNsYXZlX21paV9idXMpOwogb3V0OgotCWRldi0+ZHNhX3B0ciA9IE5VTEw7CiAJa2ZyZWUoZHMpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CkBAIC0yMTIsMzUgKzIwNyw0MiBAQAogICovCiBib29sIGRzYV91c2VzX2RzYV90YWdzKHZvaWQgKmRzYV9wdHIpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkc2FfcHRyOwogCi0JcmV0dXJuICEhKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSk7CisJcmV0dXJuICEhKGRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpOwogfQogCiBib29sIGRzYV91c2VzX3RyYWlsZXJfdGFncyh2b2lkICpkc2FfcHRyKQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHNhX3B0cjsKIAotCXJldHVybiAhIShkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX1RSQUlMRVIpKTsKKwlyZXR1cm4gISEoZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfVFJBSUxFUikpOwogfQogCiAKIC8qIGxpbmsgcG9sbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdWdseSkKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0OworCWludCBpOwogCi0JZHMgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IGRzYV9zd2l0Y2gsIGxpbmtfcG9sbF93b3JrKTsKKwlkc3QgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSwgbGlua19wb2xsX3dvcmspOwogCi0JZHMtPmRydi0+cG9sbF9saW5rKGRzKTsKLQltb2RfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CisJZm9yIChpID0gMDsgaSA8IGRzdC0+cGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHN0LT5kc1tpXTsKKworCQlpZiAoZHMgIT0gTlVMTCAmJiBkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKKwkJCWRzLT5kcnYtPnBvbGxfbGluayhkcyk7CisJfQorCisJbW9kX3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKIH0KIAotc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF90aW1lcih1bnNpZ25lZCBsb25nIF9kcykKK3N0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfdGltZXIodW5zaWduZWQgbG9uZyBfZHN0KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICh2b2lkICopX2RzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9ICh2b2lkICopX2RzdDsKIAotCXNjaGVkdWxlX3dvcmsoJmRzLT5saW5rX3BvbGxfd29yayk7CisJc2NoZWR1bGVfd29yaygmZHN0LT5saW5rX3BvbGxfd29yayk7CiB9CiAKIApAQCAtMzAzLDE4ICszMDUsMTQgQEAKIAlzdGF0aWMgaW50IGRzYV92ZXJzaW9uX3ByaW50ZWQ7CiAJc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG1paV9idXMgKmJ1czsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0OworCWludCBpOwogCiAJaWYgKCFkc2FfdmVyc2lvbl9wcmludGVkKyspCiAJCXByaW50ayhLRVJOX05PVElDRSAiRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAiCiAJCQkiZHJpdmVyIHZlcnNpb24gJXNcbiIsIGRzYV9kcml2ZXJfdmVyc2lvbik7CiAKLQlpZiAocGQgPT0gTlVMTCB8fCBwZC0+bWlpX2J1cyA9PSBOVUxMIHx8IHBkLT5uZXRkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidXMgPSBkZXZfdG9fbWlpX2J1cyhwZC0+bWlpX2J1cyk7Ci0JaWYgKGJ1cyA9PSBOVUxMKQorCWlmIChwZCA9PSBOVUxMIHx8IHBkLT5uZXRkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXYgPSBkZXZfdG9fbmV0X2RldmljZShwZC0+bmV0ZGV2KTsKQEAgLTMyNiwzNiArMzI0LDc5IEBACiAJCXJldHVybiAtRUVYSVNUOwogCX0KIAotCWRzID0gZHNhX3N3aXRjaF9zZXR1cCgmcGRldi0+ZGV2LCBwZCwgYnVzLCBkZXYpOwotCWlmIChJU19FUlIoZHMpKSB7CisJZHN0ID0ga3phbGxvYyhzaXplb2YoKmRzdCksIEdGUF9LRVJORUwpOworCWlmIChkc3QgPT0gTlVMTCkgewogCQlkZXZfcHV0KGRldik7Ci0JCXJldHVybiBQVFJfRVJSKGRzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKSB7Ci0JCUlOSVRfV09SSygmZHMtPmxpbmtfcG9sbF93b3JrLCBkc2FfbGlua19wb2xsX3dvcmspOwotCQlpbml0X3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZHM7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZnVuY3Rpb24gPSBkc2FfbGlua19wb2xsX3RpbWVyOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWik7Ci0JCWFkZF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHN0KTsKKworCWRzdC0+cGQgPSBwZDsKKwlkc3QtPm1hc3Rlcl9uZXRkZXYgPSBkZXY7CisJZHN0LT5jcHVfc3dpdGNoID0gLTE7CisJZHN0LT5jcHVfcG9ydCA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IHBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBtaWlfYnVzICpidXM7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKKworCQlidXMgPSBkZXZfdG9fbWlpX2J1cyhwZC0+Y2hpcFtpXS5taWlfYnVzKTsKKwkJaWYgKGJ1cyA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzWyVkXTogbm8gbWlpIGJ1cyBmb3VuZCBmb3IgIgorCQkJCSJkc2Egc3dpdGNoXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlkcyA9IGRzYV9zd2l0Y2hfc2V0dXAoZHN0LCBpLCAmcGRldi0+ZGV2LCBidXMpOworCQlpZiAoSVNfRVJSKGRzKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNvdWxkbid0IGNyZWF0ZSBkc2Egc3dpdGNoICIKKwkJCQkiaW5zdGFuY2UgKGVycm9yICVsZClcbiIsIGRldi0+bmFtZSwgaSwKKwkJCQlQVFJfRVJSKGRzKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRzdC0+ZHNbaV0gPSBkczsKKwkJaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQorCQkJZHN0LT5saW5rX3BvbGxfbmVlZGVkID0gMTsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcyk7CisJLyoKKwkgKiBJZiB3ZSB1c2UgYSB0YWdnaW5nIGZvcm1hdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBldGhlcnR5cGUKKwkgKiBmaWVsZCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBhY2tldHMgZnJvbSB0aGlzIHBvaW50IG9uIGdldAorCSAqIHNlbnQgdG8gdGhlIHRhZyBmb3JtYXQncyByZWNlaXZlIGZ1bmN0aW9uLgorCSAqLworCXdtYigpOworCWRldi0+ZHNhX3B0ciA9ICh2b2lkICopZHN0OworCisJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkgeworCQlJTklUX1dPUksoJmRzdC0+bGlua19wb2xsX3dvcmssIGRzYV9saW5rX3BvbGxfd29yayk7CisJCWluaXRfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRzdDsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZnVuY3Rpb24gPSBkc2FfbGlua19wb2xsX3RpbWVyOworCQlkc3QtPmxpbmtfcG9sbF90aW1lci5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopOworCQlhZGRfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CiAKLQlpZiAoZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCi0JCWRlbF90aW1lcl9zeW5jKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKKwlpZiAoZHN0LT5saW5rX3BvbGxfbmVlZGVkKQorCQlkZWxfdGltZXJfc3luYygmZHN0LT5saW5rX3BvbGxfdGltZXIpOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCWRzYV9zd2l0Y2hfZGVzdHJveShkcyk7CisJZm9yIChpID0gMDsgaSA8IGRzdC0+cGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHN0LT5kc1tpXTsKKworCQlpZiAoZHMgIT0gTlVMTCkKKwkJCWRzYV9zd2l0Y2hfZGVzdHJveShkcyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYV9wcml2LmggYi9uZXQvZHNhL2RzYV9wcml2LmgKaW5kZXggNzA2MzM3OC4uNDEwNTVmMyAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2FfcHJpdi5oCisrKyBiL25ldC9kc2EvZHNhX3ByaXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL2RzYV9wcml2LmggLSBIYXJkd2FyZSBzd2l0Y2ggaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksNDIgKzE5LDEwNyBAQAogCiBzdHJ1Y3QgZHNhX3N3aXRjaCB7CiAJLyoKLQkgKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCBvd25zCi0JICogdGhpcyBkc2Egc3dpdGNoIGluc3RhbmNlLgorCSAqIFBhcmVudCBzd2l0Y2ggdHJlZSwgYW5kIHN3aXRjaCBpbmRleC4KIAkgKi8KLQlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEJKnBkOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUJKmRzdDsKKwlpbnQJCQlpbmRleDsKIAogCS8qCi0JICogUmVmZXJlbmNlcyB0byBuZXR3b3JrIGRldmljZSBhbmQgbWlpIGJ1cyB0byB1c2UuCisJICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGlzIHN3aXRjaC4KIAkgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZQkJKm1hc3Rlcl9uZXRkZXY7Ci0Jc3RydWN0IG1paV9idXMJCQkqbWFzdGVyX21paV9idXM7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEJKnBkOwogCiAJLyoKLQkgKiBUaGUgdXNlZCBzd2l0Y2ggZHJpdmVyIGFuZCBmcmFtZSB0YWdnaW5nIHR5cGUuCisJICogVGhlIHVzZWQgc3dpdGNoIGRyaXZlci4KIAkgKi8KIAlzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIJKmRydjsKLQlfX2JlMTYJCQkJdGFnX3Byb3RvY29sOworCisJLyoKKwkgKiBSZWZlcmVuY2UgdG8gbWlpIGJ1cyB0byB1c2UuCisJICovCisJc3RydWN0IG1paV9idXMJCSptYXN0ZXJfbWlpX2J1czsKIAogCS8qCiAJICogU2xhdmUgbWlpX2J1cyBhbmQgZGV2aWNlcyBmb3IgdGhlIGluZGl2aWR1YWwgcG9ydHMuCiAJICovCi0JaW50CQkJCWNwdV9wb3J0OwotCXUzMgkJCQl2YWxpZF9wb3J0X21hc2s7Ci0Jc3RydWN0IG1paV9idXMJCQkqc2xhdmVfbWlpX2J1czsKLQlzdHJ1Y3QgbmV0X2RldmljZQkJKnBvcnRzW0RTQV9NQVhfUE9SVFNdOworCXUzMgkJCWRzYV9wb3J0X21hc2s7CisJdTMyCQkJcGh5c19wb3J0X21hc2s7CisJc3RydWN0IG1paV9idXMJCSpzbGF2ZV9taWlfYnVzOworCXN0cnVjdCBuZXRfZGV2aWNlCSpwb3J0c1tEU0FfTUFYX1BPUlRTXTsKK307CisKK3N0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgeworCS8qCisJICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgb3ducworCSAqIHRoaXMgZHNhIHN3aXRjaCB0cmVlIGluc3RhbmNlLgorCSAqLworCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YQkqcGQ7CisKKwkvKgorCSAqIFJlZmVyZW5jZSB0byBuZXR3b3JrIGRldmljZSB0byB1c2UsIGFuZCB3aGljaCB0YWdnaW5nCisJICogcHJvdG9jb2wgdG8gdXNlLgorCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXJfbmV0ZGV2OworCV9fYmUxNgkJCXRhZ19wcm90b2NvbDsKKworCS8qCisJICogVGhlIHN3aXRjaCBhbmQgcG9ydCB0byB3aGljaCB0aGUgQ1BVIGlzIGF0dGFjaGVkLgorCSAqLworCXM4CQkJY3B1X3N3aXRjaDsKKwlzOAkJCWNwdV9wb3J0OwogCiAJLyoKIAkgKiBMaW5rIHN0YXRlIHBvbGxpbmcuCiAJICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlsaW5rX3BvbGxfd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdAkJbGlua19wb2xsX3RpbWVyOworCWludAkJCWxpbmtfcG9sbF9uZWVkZWQ7CisJc3RydWN0IHdvcmtfc3RydWN0CWxpbmtfcG9sbF93b3JrOworCXN0cnVjdCB0aW1lcl9saXN0CWxpbmtfcG9sbF90aW1lcjsKKworCS8qCisJICogRGF0YSBmb3IgdGhlIGluZGl2aWR1YWwgc3dpdGNoIGNoaXBzLgorCSAqLworCXN0cnVjdCBkc2Ffc3dpdGNoCSpkc1tEU0FfTUFYX1NXSVRDSEVTXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBkc2FfaXNfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKK3sKKwlyZXR1cm4gISEoZHMtPmluZGV4ID09IGRzLT5kc3QtPmNwdV9zd2l0Y2ggJiYgcCA9PSBkcy0+ZHN0LT5jcHVfcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZHNhX3Vwc3RyZWFtX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQoreworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLT5kc3Q7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgdGhlIHJvb3Qgc3dpdGNoIChpLmUuIHRoZSBzd2l0Y2ggdGhhdCBjb25uZWN0cworCSAqIHRvIHRoZSBDUFUpLCByZXR1cm4gdGhlIGNwdSBwb3J0IG51bWJlciBvbiB0aGlzIHN3aXRjaC4KKwkgKiBFbHNlIHJldHVybiB0aGUgKERTQSkgcG9ydCBudW1iZXIgdGhhdCBjb25uZWN0cyB0byB0aGUKKwkgKiBzd2l0Y2ggdGhhdCBpcyBvbmUgaG9wIGNsb3NlciB0byB0aGUgY3B1LgorCSAqLworCWlmIChkc3QtPmNwdV9zd2l0Y2ggPT0gZHMtPmluZGV4KQorCQlyZXR1cm4gZHN0LT5jcHVfcG9ydDsKKwllbHNlCisJCXJldHVybiBkcy0+cGQtPnJ0YWJsZVtkc3QtPmNwdV9zd2l0Y2hdOworfQorCiBzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgeworCS8qCisJICogVGhlIGxpbnV4IG5ldHdvcmsgaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcworCSAqIHN3aXRjaCBwb3J0LgorCSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisKKwkvKgorCSAqIFdoaWNoIHN3aXRjaCB0aGlzIHBvcnQgaXMgYSBwYXJ0IG9mLCBhbmQgdGhlIHBvcnQgaW5kZXgKKwkgKiBmb3IgdGhpcyBwb3J0LgorCSAqLwogCXN0cnVjdCBkc2Ffc3dpdGNoCSpwYXJlbnQ7Ci0JaW50CQkJcG9ydDsKKwl1OAkJCXBvcnQ7CisKKwkvKgorCSAqIFRoZSBwaHlsaWIgcGh5X2RldmljZSBwb2ludGVyIGZvciB0aGUgUEhZIGNvbm5lY3RlZAorCSAqIHRvIHRoaXMgcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgcGh5X2RldmljZQkqcGh5OwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYwNjAuYyBiL25ldC9kc2EvbXY4OGU2MDYwLmMKaW5kZXggODUwODFhZS4uODMyNzdmNCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYwNjAuYworKysgYi9uZXQvZHNhL212ODhlNjA2MC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvbXY4OGU2MDYwLmMgLSBEcml2ZXIgZm9yIE1hcnZlbGwgODhlNjA2MCBzd2l0Y2ggY2hpcHMKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtODEsNyArODEsNyBAQAogCS8qCiAJICogUmVzZXQgdGhlIHN3aXRjaC4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwQSwgMHhhMTMwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwYSwgMHhhMTMwKTsKIAogCS8qCiAJICogV2FpdCB1cCB0byBvbmUgc2Vjb25kIGZvciByZXNldCB0byBjb21wbGV0ZS4KQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuICBBZGRpdGlvbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVQogCSAqIHBvcnQsIGVuYWJsZSBJbmdyZXNzIGFuZCBFZ3Jlc3MgVHJhaWxlciB0YWdnaW5nIG1vZGUuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDQxMDMgOiAweDAwMDMpOworCVJFR19XUklURShhZGRyLCAweDA0LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gIDB4NDEwMyA6IDB4MDAwMyk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwpAQCAtMTM4LDkgKzEzOCw5IEBACiAJICovCiAJUkVHX1dSSVRFKGFkZHIsIDB4MDYsCiAJCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwkJCSAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/CisJCQkJZHMtPnBoeXNfcG9ydF9tYXNrIDoKKwkJCQkoMSA8PCBkcy0+ZHN0LT5jcHVfcG9ydCkpKTsKIAogCS8qCiAJICogUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3I6IHdoZW4gbGVhcm5pbmcgc291cmNlIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYyBiL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKaW5kZXggZWM4YzZhMC4uNTJmYWFhMiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYworKysgYi9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMgLSBNYXJ2ZWxsIDg4ZTYxMjMvNjE2MS82MTY1IHN3aXRjaCBjaGlwIHN1cHBvcnQKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtOTgsMTcgKzk4LDE3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIENvbmZpZ3VyZSB0aGUgY3B1IHBvcnQsIGFuZCBjb25maWd1cmUgdGhlIGNwdSBwb3J0IGFzIHRoZQotCSAqIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0byBiZQotCSAqIHNlbnQuCisJICogQ29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0LCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbQorCSAqIHBvcnQgYXMgdGhlIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzCisJICogYXJlIHRvIGJlIHNlbnQuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkcy0+Y3B1X3BvcnQgKiAweDExMTApKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzYV91cHN0cmVhbV9wb3J0KGRzKSAqIDB4MTExMCkpOwogCiAJLyoKIAkgKiBEaXNhYmxlIHJlbW90ZSBtYW5hZ2VtZW50IGZvciBub3csIGFuZCBzZXQgdGhlIHN3aXRjaCdzCi0JICogRFNBIGRldmljZSBudW1iZXIgdG8gemVyby4KKwkgKiBEU0EgZGV2aWNlIG51bWJlci4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHgwMDAwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgZHMtPmluZGV4ICYgMHgxZik7CiAKIAkvKgogCSAqIFNlbmQgYWxsIGZyYW1lcyB3aXRoIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtYXRjaGluZwpAQCAtMTMzLDEwICsxMzMsMTcgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKIAkvKgotCSAqIE1hcCBhbGwgRFNBIGRldmljZSBJRHMgdG8gdGhlIENQVSBwb3J0LgorCSAqIFByb2dyYW0gdGhlIERTQSByb3V0aW5nIHRhYmxlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgZHMtPmNwdV9wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpbnQgbmV4dGhvcDsKKworCQluZXh0aG9wID0gMHgxZjsKKwkJaWYgKGkgIT0gZHMtPmluZGV4ICYmIGkgPCBkcy0+ZHN0LT5wZC0+bnJfY2hpcHMpCisJCQluZXh0aG9wID0gZHMtPnBkLT5ydGFibGVbaV0gJiAweDFmOworCisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBuZXh0aG9wKTsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXNrcy4KQEAgLTE3NiwxMiArMTgzLDE4IEBACiBzdGF0aWMgaW50IG12ODhlNjEyM182MV82NV9zZXR1cF9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCiB7CiAJaW50IGFkZHIgPSBSRUdfUE9SVChwKTsKKwl1MTYgdmFsOwogCiAJLyoKIAkgKiBNQUMgRm9yY2luZyByZWdpc3RlcjogZG9uJ3QgZm9yY2UgbGluaywgc3BlZWQsIGR1cGxleAotCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMuCisJICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcyBvbiBwaHlzaWNhbAorCSAqIHBvcnRzLCBidXQgZm9yY2UgdGhlIENQVSBwb3J0IGFuZCBhbGwgRFNBIHBvcnRzIHRvIDEwMDAgTWIvcworCSAqIGZ1bGwgZHVwbGV4LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApIHx8IGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2UpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CiAKIAkvKgogCSAqIERvIG5vdCBsaW1pdCB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGlzIHBvcnQgY2FuIGJlCkBAIC0xOTIsMzcgKzIwNSw1MCBAQAogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2w6IGRpc2FibGUgRHJvcC1vbi1VbmxvY2ssIGRpc2FibGUgRHJvcC1vbi1Mb2NrLAotCSAqIGNvbmZpZ3VyZSB0aGUgcmVxdWVzdGVkIChEU0EvRURTQSkgdGFnZ2luZyBtb2RlIGlmIHRoaXMgaXMKLQkgKiB0aGUgQ1BVIHBvcnQsIGRpc2FibGUgSGVhZGVyIG1vZGUsIGVuYWJsZSBJR01QL01MRCBzbm9vcGluZywKLQkgKiBkaXNhYmxlIFZMQU4gdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdAotCSAqIDgwMi4xcCBhbmQgSVAgcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kCi0JICogc2V0IFNUUCBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgRmluYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVCi0JICogcG9ydCwgYWRkaXRpb25hbGx5IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdCBhbmQKLQkgKiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorCSAqIGRpc2FibGUgSGVhZGVyIG1vZGUsIGVuYWJsZSBJR01QL01MRCBzbm9vcGluZywgZGlzYWJsZSBWTEFOCisJICogdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdCA4MDIuMXAgYW5kIElQCisJICogcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kIHNldCBTVFAgc3RhdGUKKwkgKiB0byBGb3J3YXJkaW5nLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgQ1BVIGxpbmssIHVzZSBEU0Egb3IgRURTQSB0YWdnaW5nIGRlcGVuZGluZworCSAqIG9uIHdoaWNoIHRhZ2dpbmcgbW9kZSB3YXMgY29uZmlndXJlZC4KKwkgKgorCSAqIElmIHRoaXMgaXMgYSBsaW5rIHRvIGFub3RoZXIgc3dpdGNoLCB1c2UgRFNBIHRhZ2dpbmcgbW9kZS4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMgYW5kIG11bHRpY2FzdHMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsCi0JCQkocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCSAoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKSA/Ci0JCQkgIDB4MDUzZiA6IDB4MzczZiA6Ci0JCQkgMHgwNDMzKTsKKwl2YWwgPSAweDA0MzM7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpIHsKKwkJaWYgKGRzLT5kc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9FRFNBKSkKKwkJCXZhbCB8PSAweDMzMDA7CisJCWVsc2UKKwkJCXZhbCB8PSAweDAxMDA7CisJfQorCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQl2YWwgfD0gMHgwMTAwOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDAwYzsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sIDE6IGRpc2FibGUgdHJ1bmtpbmcuICBBbHNvLCBpZiB0aGlzIGlzIHRoZQogCSAqIENQVSBwb3J0LCBlbmFibGUgbGVhcm4gbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGlzIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDUsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDgwMDAgOiAweDAwMDApOworCVJFR19XUklURShhZGRyLCAweDA1LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gMHg4MDAwIDogMHgwMDAwKTsKIAogCS8qCiAJICogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCiAJICogZGF0YWJhc2UsIGFsbG93IHRoZSBDUFUgcG9ydCB0byB0YWxrIHRvIGVhY2ggb2YgdGhlICdyZWFsJwogCSAqIHBvcnRzLCBhbmQgYWxsb3cgZWFjaCBvZiB0aGUgJ3JlYWwnIHBvcnRzIHRvIG9ubHkgdGFsayB0bwotCSAqIHRoZSBDUFUgcG9ydC4KKwkgKiB0aGUgdXBzdHJlYW0gcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNiwKLQkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkJZHMtPnZhbGlkX3BvcnRfbWFzayA6Ci0JCQkJKDEgPDwgZHMtPmNwdV9wb3J0KSkpOworCXZhbCA9IChwICYgMHhmKSA8PCAxMjsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSkKKwkJdmFsIHw9IGRzLT5waHlzX3BvcnRfbWFzazsKKwllbHNlCisJCXZhbCB8PSAxIDw8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNiwgdmFsKTsKIAogCS8qCiAJICogRGVmYXVsdCBWTEFOIElEIGFuZCBwcmlvcml0eTogZG9uJ3Qgc2V0IGEgZGVmYXVsdCBWTEFOCkBAIC0zOTQsNyArNDIwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciBtdjg4ZTYxMjNfNjFfNjVfc3dpdGNoX2RyaXZlciA9IHsKLQkudGFnX3Byb3RvY29sCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRURTQSksCisJLnRhZ19wcm90b2NvbAkJPSBjcHVfdG9fYmUxNihFVEhfUF9FRFNBKSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbXY4OGU2eHh4X3ByaXZfc3RhdGUpLAogCS5wcm9iZQkJCT0gbXY4OGU2MTIzXzYxXzY1X3Byb2JlLAogCS5zZXR1cAkJCT0gbXY4OGU2MTIzXzYxXzY1X3NldHVwLApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYxMzEuYyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKaW5kZXggMzc0ZDQ2YS4uYmIyYjQxYiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYxMzEuYworKysgYi9uZXQvZHNhL212ODhlNjEzMS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIG5ldC9kc2EvbXY4OGU2MTMxLmMgLSBNYXJ2ZWxsIDg4ZTYxMzEgc3dpdGNoIGNoaXAgc3VwcG9ydAotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogbmV0L2RzYS9tdjg4ZTYxMzEuYyAtIE1hcnZlbGwgODhlNjA5NS82MDk1Zi82MTMxIHN3aXRjaCBjaGlwIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjEsNiArMjEsOCBAQAogCXJldCA9IF9fbXY4OGU2eHh4X3JlZ19yZWFkKGJ1cywgc3dfYWRkciwgUkVHX1BPUlQoMCksIDB4MDMpOwogCWlmIChyZXQgPj0gMCkgewogCQlyZXQgJj0gMHhmZmYwOworCQlpZiAocmV0ID09IDB4MDk1MCkKKwkJCXJldHVybiAiTWFydmVsbCA4OEU2MDk1Lzg4RTYwOTVGIjsKIAkJaWYgKHJldCA9PSAweDEwNjApCiAJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjEzMSI7CiAJfQpAQCAtMzYsNyArMzgsNyBAQAogCS8qCiAJICogU2V0IGFsbCBwb3J0cyB0byB0aGUgZGlzYWJsZWQgc3RhdGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CiAJCXJldCA9IFJFR19SRUFEKFJFR19QT1JUKGkpLCAweDA0KTsKIAkJUkVHX1dSSVRFKFJFR19QT1JUKGkpLCAweDA0LCByZXQgJiAweGZmZmMpOwogCX0KQEAgLTEwMCwxNyArMTAyLDE3IEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MTksIDB4ODEwMCk7CiAKIAkvKgotCSAqIERpc2FibGUgQVJQIG1pcnJvcmluZywgYW5kIGNvbmZpZ3VyZSB0aGUgY3B1IHBvcnQgYXMgdGhlCi0JICogcG9ydCB0byB3aGljaCBpbmdyZXNzIGFuZCBlZ3Jlc3MgbW9uaXRvciBmcmFtZXMgYXJlIHRvIGJlCi0JICogc2VudC4KKwkgKiBEaXNhYmxlIEFSUCBtaXJyb3JpbmcsIGFuZCBjb25maWd1cmUgdGhlIHVwc3RyZWFtIHBvcnQgYXMKKwkgKiB0aGUgcG9ydCB0byB3aGljaCBpbmdyZXNzIGFuZCBlZ3Jlc3MgbW9uaXRvciBmcmFtZXMgYXJlIHRvCisJICogYmUgc2VudC4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzLT5jcHVfcG9ydCAqIDB4MTEwMCkgfCAweDAwZjApOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHNhX3Vwc3RyZWFtX3BvcnQoZHMpICogMHgxMTAwKSB8IDB4MDBmMCk7CiAKIAkvKgogCSAqIERpc2FibGUgY2FzY2FkZSBwb3J0IGZ1bmN0aW9uYWxpdHksIGFuZCBzZXQgdGhlIHN3aXRjaCdzCi0JICogRFNBIGRldmljZSBudW1iZXIgdG8gemVyby4KKwkgKiBEU0EgZGV2aWNlIG51bWJlci4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHhlMDAwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHhlMDAwIHwgKGRzLT5pbmRleCAmIDB4MWYpKTsKIAogCS8qCiAJICogU2VuZCBhbGwgZnJhbWVzIHdpdGggZGVzdGluYXRpb24gYWRkcmVzc2VzIG1hdGNoaW5nCkBAIC0xMjcsMTYgKzEyOSwyMyBAQAogCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNSwgMHgwMGZmKTsKIAogCS8qCi0JICogTWFwIGFsbCBEU0EgZGV2aWNlIElEcyB0byB0aGUgQ1BVIHBvcnQuCisJICogUHJvZ3JhbSB0aGUgRFNBIHJvdXRpbmcgdGFibGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0JCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBkcy0+Y3B1X3BvcnQpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWludCBuZXh0aG9wOworCisJCW5leHRob3AgPSAweDFmOworCQlpZiAoaSAhPSBkcy0+aW5kZXggJiYgaSA8IGRzLT5kc3QtPnBkLT5ucl9jaGlwcykKKwkJCW5leHRob3AgPSBkcy0+cGQtPnJ0YWJsZVtpXSAmIDB4MWY7CisKKwkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IG5leHRob3ApOworCX0KIAogCS8qCiAJICogQ2xlYXIgYWxsIHRydW5rIG1hc2tzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNywgMHg4MDAwIHwgKGkgPDwgMTIpIHwgMHhmZik7CisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNywgMHg4MDAwIHwgKGkgPDwgMTIpIHwgMHg3ZmYpOwogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFwcGluZ3MuCkBAIC0xNTYsMTIgKzE2NSwxOCBAQAogc3RhdGljIGludCBtdjg4ZTYxMzFfc2V0dXBfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQogewogCWludCBhZGRyID0gUkVHX1BPUlQocCk7CisJdTE2IHZhbDsKIAogCS8qCiAJICogTUFDIEZvcmNpbmcgcmVnaXN0ZXI6IGRvbid0IGZvcmNlIGxpbmssIHNwZWVkLCBkdXBsZXgKLQkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzLgorCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMgb24gcGh5c2ljYWwKKwkgKiBwb3J0cywgYnV0IGZvcmNlIHRoZSBDUFUgcG9ydCBhbmQgYWxsIERTQSBwb3J0cyB0byAxMDAwIE1iL3MKKwkgKiBmdWxsIGR1cGxleC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSB8fCBkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsKKwllbHNlCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOwogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2w6IGRpc2FibGUgQ29yZSBUYWcsIGRpc2FibGUgRHJvcC1vbi1Mb2NrLApAQCAtMTY5LDI5ICsxODQsNDAgQEAKIAkgKiBlbmFibGUgSUdNUC9NTEQgc25vb3AsIGRpc2FibGUgRG91YmxlVGFnLCBkaXNhYmxlIFZMQU4KIAkgKiB0dW5uZWxpbmcsIGRldGVybWluZSBwcmlvcml0eSBieSBsb29raW5nIGF0IDgwMi4xcCBhbmQKIAkgKiBJUCBwcmlvcml0eSBmaWVsZHMgKElQIHByaW8gaGFzIHByZWNlZGVuY2UpLCBhbmQgc2V0IFNUUAotCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuICBGaW5hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUgcG9ydCwKLQkgKiBhZGRpdGlvbmFsbHkgZW5hYmxlIERTQSB0YWdnaW5nIGFuZCBmb3J3YXJkaW5nIG9mIHVua25vd24KLQkgKiB1bmljYXN0IGFkZHJlc3Nlcy4KKwkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQorCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0cywgYW5kIGVuYWJsZSBEU0EgdGFnZ2luZworCSAqIG1vZGUuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSBsaW5rIHRvIGFub3RoZXIgc3dpdGNoLCB1c2UgRFNBIHRhZ2dpbmcKKwkgKiBtb2RlLCBidXQgZG8gbm90IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDA1MzcgOiAweDA0MzMpOworCXZhbCA9IDB4MDQzMzsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAxMDQ7CisJaWYgKGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCXZhbCB8PSAweDAxMDA7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIHZhbCk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbCAxOiBkaXNhYmxlIHRydW5raW5nLiAgQWxzbywgaWYgdGhpcyBpcyB0aGUKIAkgKiBDUFUgcG9ydCwgZW5hYmxlIGxlYXJuIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhpcyBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA1LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg4MDAwIDogMHgwMDAwKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNSwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/IDB4ODAwMCA6IDB4MDAwMCk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwogCSAqIGRhdGFiYXNlLCBhbGxvdyB0aGUgQ1BVIHBvcnQgdG8gdGFsayB0byBlYWNoIG9mIHRoZSAncmVhbCcKIAkgKiBwb3J0cywgYW5kIGFsbG93IGVhY2ggb2YgdGhlICdyZWFsJyBwb3J0cyB0byBvbmx5IHRhbGsgdG8KLQkgKiB0aGUgQ1BVIHBvcnQuCisJICogdGhlIHVwc3RyZWFtIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDYsCi0JCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwl2YWwgPSAocCAmIDB4ZikgPDwgMTI7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpCisJCXZhbCB8PSBkcy0+cGh5c19wb3J0X21hc2s7CisJZWxzZQorCQl2YWwgfD0gMSA8PCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDYsIHZhbCk7CiAKIAkvKgogCSAqIERlZmF1bHQgVkxBTiBJRCBhbmQgcHJpb3JpdHk6IGRvbid0IHNldCBhIGRlZmF1bHQgVkxBTgpAQCAtMjA3LDEzICsyMzMsMTUgQEAKIAkgKiB1bnRhZ2dlZCBmcmFtZXMgb24gdGhpcyBwb3J0LCBkbyBhIGRlc3RpbmF0aW9uIGFkZHJlc3MKIAkgKiBsb29rdXAgb24gcmVjZWl2ZWQgcGFja2V0cyBhcyB1c3VhbCwgZG9uJ3Qgc2VuZCBhIGNvcHkKIAkgKiBvZiBhbGwgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZnJhbWVzIG9uIHRoaXMgcG9ydCB0byB0aGUKLQkgKiBDUFUsIGFuZCBjb25maWd1cmUgdGhlIENQVSBwb3J0IG51bWJlci4gIEFsc28sIGlmIHRoaXMKLQkgKiBpcyB0aGUgQ1BVIHBvcnQsIGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gbXVsdGljYXN0Ci0JICogYWRkcmVzc2VzLgorCSAqIENQVSwgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCBudW1iZXIuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIG11bHRpY2FzdCBhZGRyZXNzZXMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDgsCi0JCQkoKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4MDBjMCA6IDB4MDA4MCkgfAotCQkJIGRzLT5jcHVfcG9ydCk7CisJdmFsID0gMHgwMDgwIHwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDA0MDsKKwlSRUdfV1JJVEUoYWRkciwgMHgwOCwgdmFsKTsKIAogCS8qCiAJICogUmF0ZSBDb250cm9sOiBkaXNhYmxlIGluZ3Jlc3MgcmF0ZSBsaW1pdGluZy4KQEAgLTI2OCw3ICsyOTYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CiAJCXJldCA9IG12ODhlNjEzMV9zZXR1cF9wb3J0KGRzLCBpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwpAQCAtMjc5LDcgKzMwNyw3IEBACiAKIHN0YXRpYyBpbnQgbXY4OGU2MTMxX3BvcnRfdG9fcGh5X2FkZHIoaW50IHBvcnQpCiB7Ci0JaWYgKHBvcnQgPj0gMCAmJiBwb3J0ICE9IDMgJiYgcG9ydCA8PSA3KQorCWlmIChwb3J0ID49IDAgJiYgcG9ydCA8PSAxMSkKIAkJcmV0dXJuIHBvcnQ7CiAJcmV0dXJuIC0xOwogfQpAQCAtMzUzLDcgKzM4MSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgbXY4OGU2MTMxX3N3aXRjaF9kcml2ZXIgPSB7Ci0JLnRhZ19wcm90b2NvbAkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0RTQSksCisJLnRhZ19wcm90b2NvbAkJPSBjcHVfdG9fYmUxNihFVEhfUF9EU0EpLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBtdjg4ZTZ4eHhfcHJpdl9zdGF0ZSksCiAJLnByb2JlCQkJPSBtdjg4ZTYxMzFfcHJvYmUsCiAJLnNldHVwCQkJPSBtdjg4ZTYxMzFfc2V0dXAsCmRpZmYgLS1naXQgYS9uZXQvZHNhL3NsYXZlLmMgYi9uZXQvZHNhL3NsYXZlLmMKaW5kZXggYTY4ZmQ3OS4uZWQxMzExOCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKyBiL25ldC9kc2Evc2xhdmUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3NsYXZlLmMgLSBTbGF2ZSBkZXZpY2UgaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksNyArMTksNyBAQAogewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGJ1cy0+cHJpdjsKIAotCWlmIChkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCisJaWYgKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQogCQlyZXR1cm4gZHMtPmRydi0+cGh5X3JlYWQoZHMsIGFkZHIsIHJlZyk7CiAKIAlyZXR1cm4gMHhmZmZmOwpAQCAtMjksNyArMjksNyBAQAogewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGJ1cy0+cHJpdjsKIAotCWlmIChkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCisJaWYgKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQogCQlyZXR1cm4gZHMtPmRydi0+cGh5X3dyaXRlKGRzLCBhZGRyLCByZWcsIHZhbCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQzLDE1ICs0MywyNCBAQAogCWRzLT5zbGF2ZV9taWlfYnVzLT53cml0ZSA9IGRzYV9zbGF2ZV9waHlfd3JpdGU7CiAJc25wcmludGYoZHMtPnNsYXZlX21paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlczolLjJ4IiwKIAkJCWRzLT5tYXN0ZXJfbWlpX2J1cy0+aWQsIGRzLT5wZC0+c3dfYWRkcik7Ci0JZHMtPnNsYXZlX21paV9idXMtPnBhcmVudCA9ICYoZHMtPm1hc3Rlcl9taWlfYnVzLT5kZXYpOworCWRzLT5zbGF2ZV9taWlfYnVzLT5wYXJlbnQgPSAmZHMtPm1hc3Rlcl9taWlfYnVzLT5kZXY7CiB9CiAKIAogLyogc2xhdmUgZGV2aWNlIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGRzYV9zbGF2ZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRldi0+aWZsaW5rID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXYtPmlmaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc2Ffc2xhdmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJaW50IGVycjsKIAogCWlmICghKG1hc3Rlci0+ZmxhZ3MgJiBJRkZfVVApKQpAQCAtODksNyArOTgsNyBAQAogc3RhdGljIGludCBkc2Ffc2xhdmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJZGV2X21jX3Vuc3luYyhtYXN0ZXIsIGRldik7CiAJZGV2X3VuaWNhc3RfdW5zeW5jKG1hc3RlciwgZGV2KTsKQEAgLTEwNyw3ICsxMTYsNyBAQAogc3RhdGljIHZvaWQgZHNhX3NsYXZlX2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY2hhbmdlKQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlpZiAoY2hhbmdlICYgSUZGX0FMTE1VTFRJKQogCQlkZXZfc2V0X2FsbG11bHRpKG1hc3RlciwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSA/IDEgOiAtMSk7CkBAIC0xMTgsNyArMTI3LDcgQEAKIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlkZXZfbWNfc3luYyhtYXN0ZXIsIGRldik7CiAJZGV2X3VuaWNhc3Rfc3luYyhtYXN0ZXIsIGRldik7CkBAIC0xMjcsNyArMTM2LDcgQEAKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphKQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gYTsKIAlpbnQgZXJyOwogCkBAIC0yODgsNiArMjk3LDcgQEAKIAogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19EU0EKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNhX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gZHNhX3htaXQsCkBAIC0zMDAsNiArMzEwLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19FRFNBCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVkc2FfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBlZHNhX3htaXQsCkBAIC0zMTIsNiArMzIzLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRyYWlsZXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0cmFpbGVyX3htaXQsCkBAIC0zMjgsNyArMzQwLDcgQEAKIGRzYV9zbGF2ZV9jcmVhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCSBpbnQgcG9ydCwgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gZHMtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IGRzLT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldjsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnA7CiAJaW50IHJldDsKQEAgLTM0Myw3ICszNTUsNyBAQAogCW1lbWNweShzbGF2ZV9kZXYtPmRldl9hZGRyLCBtYXN0ZXItPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJc2xhdmVfZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCi0Jc3dpdGNoIChkcy0+dGFnX3Byb3RvY29sKSB7CisJc3dpdGNoIChkcy0+ZHN0LT50YWdfcHJvdG9jb2wpIHsKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRFNBCiAJY2FzZSBodG9ucyhFVEhfUF9EU0EpOgogCQlzbGF2ZV9kZXYtPm5ldGRldl9vcHMgPSAmZHNhX25ldGRldl9vcHM7CmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19kc2EuYyBiL25ldC9kc2EvdGFnX2RzYS5jCmluZGV4IGY5OWEwMTkuLjhmYTI1YmEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2RzYS5jCisrKyBiL25ldC9kc2EvdGFnX2RzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvdGFnX2RzYS5jIC0gKE5vbi1ldGhlcnR5cGUpIERTQSB0YWdnaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDcgKzM2LDcgQEAKIAkJICogQ29uc3RydWN0IHRhZ2dlZCBGUk9NX0NQVSBEU0EgdGFnIGZyb20gODAyLjFxIHRhZy4KIAkJICovCiAJCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyICogRVRIX0FMRU47Ci0JCWRzYV9oZWFkZXJbMF0gPSAweDYwOworCQlkc2FfaGVhZGVyWzBdID0gMHg2MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWRzYV9oZWFkZXJbMV0gPSBwLT5wb3J0IDw8IDM7CiAKIAkJLyoKQEAgLTU3LDcgKzU3LDcgQEAKIAkJICogQ29uc3RydWN0IHVudGFnZ2VkIEZST01fQ1BVIERTQSB0YWcuCiAJCSAqLwogCQlkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMiAqIEVUSF9BTEVOOwotCQlkc2FfaGVhZGVyWzBdID0gMHg0MDsKKwkJZHNhX2hlYWRlclswXSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQlkc2FfaGVhZGVyWzFdID0gcC0+cG9ydCA8PCAzOwogCQlkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZHNhX2hlYWRlclszXSA9IDB4MDA7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRFNBKTsKIAotCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC03OCwxMSArNzgsMTMgQEAKIHN0YXRpYyBpbnQgZHNhX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmRzYV9oZWFkZXI7CisJaW50IHNvdXJjZV9kZXZpY2U7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtOTgsMTYgKzEwMCwyNCBAQAogCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgLSAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweDAwICYmIChkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHhjMCkKKwlpZiAoKGRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHhjMCkKIAkJZ290byBvdXRfZHJvcDsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqIERldGVybWluZSBzb3VyY2UgZGV2aWNlIGFuZCBwb3J0LgogCSAqLworCXNvdXJjZV9kZXZpY2UgPSBkc2FfaGVhZGVyWzBdICYgMHgxZjsKIAlzb3VyY2VfcG9ydCA9IChkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE3NSw4ICsxODUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRzYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRFNBKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZHNhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9EU0EpLAogCS5mdW5jCT0gZHNhX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2Vkc2EuYyBiL25ldC9kc2EvdGFnX2Vkc2EuYwppbmRleCAzMjhlYzk1Li44MTU2MDdiIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19lZHNhLmMKKysrIGIvbmV0L2RzYS90YWdfZWRzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvdGFnX2Vkc2EuYyAtIEV0aGVydHlwZSBEU0EgdGFnZ2luZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00NSw3ICs0NSw3IEBACiAJCWVkc2FfaGVhZGVyWzFdID0gRVRIX1BfRURTQSAmIDB4ZmY7CiAJCWVkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZWRzYV9oZWFkZXJbM10gPSAweDAwOwotCQllZHNhX2hlYWRlcls0XSA9IDB4NjA7CisJCWVkc2FfaGVhZGVyWzRdID0gMHg2MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWVkc2FfaGVhZGVyWzVdID0gcC0+cG9ydCA8PCAzOwogCiAJCS8qCkBAIC03MCw3ICs3MCw3IEBACiAJCWVkc2FfaGVhZGVyWzFdID0gRVRIX1BfRURTQSAmIDB4ZmY7CiAJCWVkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZWRzYV9oZWFkZXJbM10gPSAweDAwOwotCQllZHNhX2hlYWRlcls0XSA9IDB4NDA7CisJCWVkc2FfaGVhZGVyWzRdID0gMHg0MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWVkc2FfaGVhZGVyWzVdID0gcC0+cG9ydCA8PCAzOwogCQllZHNhX2hlYWRlcls2XSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzddID0gMHgwMDsKQEAgLTc4LDcgKzc4LDcgQEAKIAogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9FRFNBKTsKIAotCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC05MSwxMSArOTEsMTMgQEAKIHN0YXRpYyBpbnQgZWRzYV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAl1OCAqZWRzYV9oZWFkZXI7CisJaW50IHNvdXJjZV9kZXZpY2U7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtMTExLDE2ICsxMTMsMjQgQEAKIAllZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSArIDI7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQsIGFuZAotCSAqIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgaXMgemVyby4KKwkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELgogCSAqLwotCWlmICgoZWRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweDAwICYmIChlZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4YzApCisJaWYgKChlZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4MDAgJiYgKGVkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHhjMCkKIAkJZ290byBvdXRfZHJvcDsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqIERldGVybWluZSBzb3VyY2UgZGV2aWNlIGFuZCBwb3J0LgogCSAqLworCXNvdXJjZV9kZXZpY2UgPSBlZHNhX2hlYWRlclswXSAmIDB4MWY7CiAJc291cmNlX3BvcnQgPSAoZWRzYV9oZWFkZXJbMV0gPj4gMykgJiAweDFmOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGV4aXN0cyBhbmQgdGhhdCB0aGUgc291cmNlCisJICogcG9ydCBpcyBhIHJlZ2lzdGVyZWQgRFNBIHBvcnQuCisJICovCisJaWYgKHNvdXJjZV9kZXZpY2UgPj0gZHN0LT5wZC0+bnJfY2hpcHMpCisJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzW3NvdXJjZV9kZXZpY2VdOwogCWlmIChzb3VyY2VfcG9ydCA+PSBEU0FfTUFYX1BPUlRTIHx8IGRzLT5wb3J0c1tzb3VyY2VfcG9ydF0gPT0gTlVMTCkKIAkJZ290byBvdXRfZHJvcDsKIApAQCAtMTk0LDggKzIwNCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWRzYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRURTQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0VEU0EpLAogCS5mdW5jCT0gZWRzYV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ190cmFpbGVyLmMgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKaW5kZXggYjU5MTMyOC4uMWMzZTMwYyAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfdHJhaWxlci5jCisrKyBiL25ldC9kc2EvdGFnX3RyYWlsZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ190cmFpbGVyLmMgLSBUcmFpbGVyIHRhZyBmb3JtYXQgaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTksNyArNTksNyBAQAogCiAJbnNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9UUkFJTEVSKTsKIAotCW5za2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwluc2tiLT5kZXYgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlkZXZfcXVldWVfeG1pdChuc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC02OCwxMiArNjgsMTQgQEAKIHN0YXRpYyBpbnQgdHJhaWxlcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAl1OCAqdHJhaWxlcjsKIAlpbnQgc291cmNlX3BvcnQ7CiAKLQlpZiAodW5saWtlbHkoZHMgPT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KGRzdCA9PSBOVUxMKSkKIAkJZ290byBvdXRfZHJvcDsKKwlkcyA9IGRzdC0+ZHNbMF07CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKQEAgLTExMSw4ICsxMTMsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHRyYWlsZXJfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1RSQUlMRVIpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9UUkFJTEVSKSwKIAkuZnVuYwk9IHRyYWlsZXJfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggODc4OWQyYi4uNmY0NzlmYSAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC0xMTAyLDggKzExMDIsOCBAQAogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlY29uZXRfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9FQ09ORVQpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlY29uZXRfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CQljcHVfdG9fYmUxNihFVEhfUF9FQ09ORVQpLAogCS5mdW5jID0JCWVjb25ldF9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCA2OTEyNjhmLi5iMmNmOTFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTM1LDcgKzM1LDcgQEAKIAogCSAgYXQgYm9vdCB0aW1lIGFmdGVyIHRoZSAvcHJvYyBmaWxlIHN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLgogCi0JICBJZiB5b3UgdHVybiBvbiBJUCBmb3J3YXJkaW5nLCB5b3Ugd2lsbCBhbHNvIGdldCB0aGUgcnBfZmlsdGVyLCB3aGljaAorCSAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcnBfZmlsdGVyLCB3aGljaAogCSAgYXV0b21hdGljYWxseSByZWplY3RzIGluY29taW5nIHBhY2tldHMgaWYgdGhlIHJvdXRpbmcgdGFibGUgZW50cnkKIAkgIGZvciB0aGVpciBzb3VyY2UgYWRkcmVzcyBkb2Vzbid0IG1hdGNoIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGV5J3JlCiAJICBhcnJpdmluZyBvbi4gVGhpcyBoYXMgc2VjdXJpdHkgYWR2YW50YWdlcyBiZWNhdXNlIGl0IHByZXZlbnRzIHRoZQpAQCAtNDYsMTIgKzQ2LDE2IEBACiAJICBycF9maWx0ZXIgb24gdXNlOgogCiAJICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi88ZGV2aWNlPi9ycF9maWx0ZXIKLQkgIG9yCisJICAgYW5kCiAJICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyCiAKKwkgIE5vdGUgdGhhdCBzb21lIGRpc3RyaWJ1dGlvbnMgZW5hYmxlIGl0IGluIHN0YXJ0dXAgc2NyaXB0cy4KKwkgIEZvciBkZXRhaWxzIGFib3V0IHJwX2ZpbHRlciBzdHJpY3QgYW5kIGxvb3NlIG1vZGUgcmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQ+LgorCiAJICBJZiB1bnN1cmUsIHNheSBOIGhlcmUuCiAKLWNob2ljZSAKK2Nob2ljZQogCXByb21wdCAiQ2hvb3NlIElQOiBGSUIgbG9va3VwIGFsZ29yaXRobSAoY2hvb3NlIEZJQl9IQVNIIGlmIHVuc3VyZSkiCiAJZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVIKIAlkZWZhdWx0IEFTS19JUF9GSUJfSEFTSApAQCAtNTksMjcgKzYzLDI5IEBACiBjb25maWcgQVNLX0lQX0ZJQl9IQVNICiAJYm9vbCAiRklCX0hBU0giCiAJLS0taGVscC0tLQotCUN1cnJlbnQgRklCIGlzIHZlcnkgcHJvdmVuIGFuZCBnb29kIGVub3VnaCBmb3IgbW9zdCB1c2Vycy4KKwkgIEN1cnJlbnQgRklCIGlzIHZlcnkgcHJvdmVuIGFuZCBnb29kIGVub3VnaCBmb3IgbW9zdCB1c2Vycy4KIAogY29uZmlnIElQX0ZJQl9UUklFCiAJYm9vbCAiRklCX1RSSUUiCiAJLS0taGVscC0tLQotCVVzZSBuZXcgZXhwZXJpbWVudGFsIExDLXRyaWUgYXMgRklCIGxvb2t1cCBhbGdvcml0aG0uIAotICAgICAgICBUaGlzIGltcHJvdmVzIGxvb2t1cCBwZXJmb3JtYW5jZSBpZiB5b3UgaGF2ZSBhIGxhcmdlCi0JbnVtYmVyIG9mIHJvdXRlcy4KKwkgIFVzZSBuZXcgZXhwZXJpbWVudGFsIExDLXRyaWUgYXMgRklCIGxvb2t1cCBhbGdvcml0aG0uCisJICBUaGlzIGltcHJvdmVzIGxvb2t1cCBwZXJmb3JtYW5jZSBpZiB5b3UgaGF2ZSBhIGxhcmdlCisJICBudW1iZXIgb2Ygcm91dGVzLgogCi0JTEMtdHJpZSBpcyBhIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4IGxvb2t1cCBhbGdvcml0aG0gd2hpY2gKLQlwZXJmb3JtcyBiZXR0ZXIgdGhhbiBGSUJfSEFTSCBmb3IgbGFyZ2Ugcm91dGluZyB0YWJsZXMuCi0JQnV0LCBpdCBjb25zdW1lcyBtb3JlIG1lbW9yeSBhbmQgaXMgbW9yZSBjb21wbGV4LgotCQotCUxDLXRyaWUgaXMgZGVzY3JpYmVkIGluOgotCQotIAlJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgotIAlJRUVFIEpvdXJuYWwgb24gU2VsZWN0ZWQgQXJlYXMgaW4gQ29tbXVuaWNhdGlvbnMsIDE3KDYpOjEwODMtMTA5MiwgSnVuZSAxOTk5Ci0JQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKLSAJU3RlZmFuIE5pbHNzb24gYW5kIE1hdHRpIFRpa2thbmVuLiBBbGdvcml0aG1pY2EsIDMzKDEpOjE5LTMzLCAyMDAyLgotIAlodHRwOi8vd3d3Lm5hZGEua3RoLnNlL35zbmlsc3Nvbi9wdWJsaWMvcGFwZXJzL2R5bnRyaWUyLwotICAgICAgIAorCSAgTEMtdHJpZSBpcyBhIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4IGxvb2t1cCBhbGdvcml0aG0gd2hpY2gKKwkgIHBlcmZvcm1zIGJldHRlciB0aGFuIEZJQl9IQVNIIGZvciBsYXJnZSByb3V0aW5nIHRhYmxlcy4KKwkgIEJ1dCwgaXQgY29uc3VtZXMgbW9yZSBtZW1vcnkgYW5kIGlzIG1vcmUgY29tcGxleC4KKworCSAgTEMtdHJpZSBpcyBkZXNjcmliZWQgaW46CisKKwkgIElQLWFkZHJlc3MgbG9va3VwIHVzaW5nIExDLXRyaWVzLiBTdGVmYW4gTmlsc3NvbiBhbmQgR3VubmFyIEthcmxzc29uCisJICBJRUVFIEpvdXJuYWwgb24gU2VsZWN0ZWQgQXJlYXMgaW4gQ29tbXVuaWNhdGlvbnMsIDE3KDYpOjEwODMtMTA5MiwKKwkgIEp1bmUgMTk5OQorCisJICBBbiBleHBlcmltZW50YWwgc3R1ZHkgb2YgY29tcHJlc3Npb24gbWV0aG9kcyBmb3IgZHluYW1pYyB0cmllcworCSAgU3RlZmFuIE5pbHNzb24gYW5kIE1hdHRpIFRpa2thbmVuLiBBbGdvcml0aG1pY2EsIDMzKDEpOjE5LTMzLCAyMDAyLgorCSAgaHR0cDovL3d3dy5uYWRhLmt0aC5zZS9+c25pbHNzb24vcHVibGljL3BhcGVycy9keW50cmllMi8KKwogZW5kY2hvaWNlCiAKIGNvbmZpZyBJUF9GSUJfSEFTSApAQCAtMTkxLDcgKzE5Nyw3IEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0PiBmb3IgZGV0YWlscy4KIAogIyBub3QgeWV0IHJlYWR5Li4KLSMgICBib29sICcgICAgSVA6IEFSUCBzdXBwb3J0JyBDT05GSUdfSVBfUE5QX0FSUAkJCisjICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAKIGNvbmZpZyBORVRfSVBJUAogCXRyaXN0YXRlICJJUDogdHVubmVsaW5nIgogCXNlbGVjdCBJTkVUX1RVTk5FTApAQCAtMzYxLDcgKzM2Nyw3IEBACiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbCAoSVBDb21wKSAoUkZDMzE3MyksCiAJICB0eXBpY2FsbHkgbmVlZGVkIGZvciBJUHNlYy4KLQkgIAorCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSU5FVF9YRlJNX1RVTk5FTApAQCAtNDE1LDcgKzQyMSw3IEBACiAJICBTdXBwb3J0IGZvciBJTkVUIChUQ1AsIERDQ1AsIGV0Yykgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkKIAkgIG5hdGl2ZSBMaW51eCB0b29scyBzdWNoIGFzIHNzLiBzcyBpcyBpbmNsdWRlZCBpbiBpcHJvdXRlMiwgY3VycmVudGx5CiAJICBkb3dubG9hZGFibGUgYXQgPGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0lwcm91dGUyPi4KLQkgIAorCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSU5FVF9UQ1BfRElBRwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDc0M2Y1NTQuLjdmMDMzNzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTM2OSw3ICszNjksNiBAQAogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKIAogCXNrLT5za19kZXN0cnVjdAkgICA9IGluZXRfc29ja19kZXN0cnVjdDsKLQlzay0+c2tfZmFtaWx5CSAgID0gUEZfSU5FVDsKIAlzay0+c2tfcHJvdG9jb2wJICAgPSBwcm90b2NvbDsKIAlzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CiAKQEAgLTEyNTMsMTAgKzEyNTIsMTAgQEAKIAlpbnQgcHJvdG87CiAJaW50IGlkOwogCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkpCisJaXBoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmlwaCkpOworCWlmICh1bmxpa2VseSghaXBoKSkKIAkJZ290byBvdXQ7CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKIAlwcm90byA9IGlwaC0+cHJvdG9jb2wgJiAoTUFYX0lORVRfUFJPVE9TIC0gMSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0xMjY0LDEzICsxMjYzLDEzIEBACiAJaWYgKCFvcHMgfHwgIW9wcy0+Z3JvX3JlY2VpdmUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmIChpcGgtPnZlcnNpb24gIT0gNCB8fCBpcGgtPmlobCAhPSA1KQorCWlmICgqKHU4ICopaXBoICE9IDB4NDUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICh1bmxpa2VseShpcF9mYXN0X2NzdW0oKHU4ICopaXBoLCBpcGgtPmlobCkpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmbHVzaCA9IG50b2hzKGlwaC0+dG90X2xlbikgIT0gc2tiLT5sZW4gfHwKKwlmbHVzaCA9IG50b2hzKGlwaC0+dG90X2xlbikgIT0gc2tiX2dyb19sZW4oc2tiKSB8fAogCQlpcGgtPmZyYWdfb2ZmICE9IGh0b25zKElQX0RGKTsKIAlpZCA9IG50b2hzKGlwaC0+aWQpOwogCkBAIC0xMjgyLDI0ICsxMjgxLDI1IEBACiAKIAkJaXBoMiA9IGlwX2hkcihwKTsKIAotCQlpZiAoaXBoLT5wcm90b2NvbCAhPSBpcGgyLT5wcm90b2NvbCB8fAotCQkgICAgaXBoLT50b3MgIT0gaXBoMi0+dG9zIHx8Ci0JCSAgICBtZW1jbXAoJmlwaC0+c2FkZHIsICZpcGgyLT5zYWRkciwgOCkpIHsKKwkJaWYgKChpcGgtPnByb3RvY29sIF4gaXBoMi0+cHJvdG9jb2wpIHwKKwkJICAgIChpcGgtPnRvcyBeIGlwaDItPnRvcykgfAorCQkgICAgKGlwaC0+c2FkZHIgXiBpcGgyLT5zYWRkcikgfAorCQkgICAgKGlwaC0+ZGFkZHIgXiBpcGgyLT5kYWRkcikpIHsKIAkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBBbGwgZmllbGRzIG11c3QgbWF0Y2ggZXhjZXB0IGxlbmd0aCBhbmQgY2hlY2tzdW0uICovCiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCB8PQotCQkJbWVtY21wKCZpcGgtPmZyYWdfb2ZmLCAmaXBoMi0+ZnJhZ19vZmYsIDQpIHx8Ci0JCQkodTE2KShudG9ocyhpcGgyLT5pZCkgKyBOQVBJX0dST19DQihwKS0+Y291bnQpICE9IGlkOworCQkJKGlwaC0+dHRsIF4gaXBoMi0+dHRsKSB8CisJCQkoKHUxNikobnRvaHMoaXBoMi0+aWQpICsgTkFQSV9HUk9fQ0IocCktPmNvdW50KSBeIGlkKTsKIAogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggfD0gZmx1c2g7CiAJfQogCiAJTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggfD0gZmx1c2g7Ci0JX19za2JfcHVsbChza2IsIHNpemVvZigqaXBoKSk7Ci0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCiAJcHAgPSBvcHMtPmdyb19yZWNlaXZlKGhlYWQsIHNrYik7CiAKQEAgLTEzNzUsMTAgKzEzNzUsMTAgQEAKIGludCBzbm1wX21pYl9pbml0KHZvaWQgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUpCiB7CiAJQlVHX09OKHB0ciA9PSBOVUxMKTsKLQlwdHJbMF0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplKTsKKwlwdHJbMF0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplLCBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpKTsKIAlpZiAoIXB0clswXSkKIAkJZ290byBlcnIwOwotCXB0clsxXSA9IF9fYWxsb2NfcGVyY3B1KG1pYnNpemUpOworCXB0clsxXSA9IF9fYWxsb2NfcGVyY3B1KG1pYnNpemUsIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcgbG9uZykpOwogCWlmICghcHRyWzFdKQogCQlnb3RvIGVycjE7CiAJcmV0dXJuIDA7CkBAIC0xNTAwLDggKzE1MDAsOCBAQAogICoJSVAgcHJvdG9jb2wgbGF5ZXIgaW5pdGlhbGlzZXIKICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmZ1bmMgPSBpcF9yY3YsCiAJLmdzb19zZW5kX2NoZWNrID0gaW5ldF9nc29fc2VuZF9jaGVjaywKIAkuZ3NvX3NlZ21lbnQgPSBpbmV0X2dzb19zZWdtZW50LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAyOWE3NGMwLi5mMTE5MzFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtODAxLDggKzgwMSwxMSBAQAogICogIGNhY2hlLgogICovCiAKLQkvKiBTcGVjaWFsIGNhc2U6IElQdjQgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIHBhY2tldCAoUkZDMjEzMSkgKi8KLQlpZiAoc2lwID09IDApIHsKKwkvKgorCSAqICBTcGVjaWFsIGNhc2U6IElQdjQgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIHBhY2tldCAoUkZDMjEzMSkKKwkgKiAgYW5kIEdyYXR1aXRvdXMgQVJQL0FSUCBBbm5vdW5jZS4gKFJGQzM5MjcsIFNlY3Rpb24gMi40KQorCSAqLworCWlmIChzaXAgPT0gMCB8fCB0aXAgPT0gc2lwKSB7CiAJCWlmIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpICYmCiAJCSAgICBpbmV0X2FkZHJfdHlwZShuZXQsIHRpcCkgPT0gUlROX0xPQ0FMICYmCiAJCSAgICAhYXJwX2lnbm9yZShpbl9kZXYsIHNpcCwgdGlwKSkKQEAgLTg5Miw3ICs4OTUsNyBAQAogb3V0OgogCWlmIChpbl9kZXYpCiAJCWluX2Rldl9wdXQoaW5fZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjI1LDggKzEyMjgsOCBAQAogICoJQ2FsbGVkIG9uY2Ugb24gc3RhcnR1cC4KICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFycF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXJwX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9BUlApLAogCS5mdW5jID0JYXJwX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwppbmRleCA3YmM5OTI5Li4wMzljYzFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMKKysrIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCkBAIC0xOTQyLDIzICsxOTQyLDg1IEBACiB9CiAKIC8qKgotICogY2lwc29fdjRfc29ja19kZWxhdHRyIC0gRGVsZXRlIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNvY2tldAotICogQHNrOiB0aGUgc29ja2V0CisgKiBjaXBzb192NF9yZXFfc2V0YXR0ciAtIEFkZCBhIENJUFNPIG9wdGlvbiB0byBhIGNvbm5lY3Rpb24gcmVxdWVzdCBzb2NrZXQKKyAqIEByZXE6IHRoZSBjb25uZWN0aW9uIHJlcXVlc3Qgc29ja2V0CisgKiBAZG9pX2RlZjogdGhlIENJUFNPIERPSSB0byB1c2UKKyAqIEBzZWNhdHRyOiB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgYXR0cmlidXRlcyBvZiB0aGUgc29ja2V0CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiBSZW1vdmVzIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNvY2tldCwgaWYgcHJlc2VudC4KKyAqIFNldCB0aGUgQ0lQU08gb3B0aW9uIG9uIHRoZSBnaXZlbiBzb2NrZXQgdXNpbmcgdGhlIERPSSBkZWZpbml0aW9uIGFuZAorICogc2VjdXJpdHkgYXR0cmlidXRlcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kCisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLXZvaWQgY2lwc29fdjRfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzaykKK2ludCBjaXBzb192NF9yZXFfc2V0YXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCXU4IGhkcl9kZWx0YTsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OwotCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7CisJaW50IHJldF92YWwgPSAtRVBFUk07CisJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKwl1MzIgYnVmX2xlbjsKKwl1MzIgb3B0X2xlbjsKKwlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDsKKwlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKnJlcV9pbmV0OwogCi0Jc2tfaW5ldCA9IGluZXRfc2soc2spOwotCW9wdCA9IHNrX2luZXQtPm9wdDsKLQlpZiAob3B0ID09IE5VTEwgfHwgb3B0LT5jaXBzbyA9PSAwKQotCQlyZXR1cm47CisJLyogV2UgYWxsb2NhdGUgdGhlIG1heGltdW0gQ0lQU08gb3B0aW9uIHNpemUgaGVyZSBzbyB3ZSBhcmUgcHJvYmFibHkKKwkgKiBiZWluZyBhIGxpdHRsZSB3YXN0ZWZ1bCwgYnV0IGl0IG1ha2VzIG91ciBsaWZlIF9tdWNoXyBlYXNpZXIgbGF0ZXIKKwkgKiBvbiBhbmQgYWZ0ZXIgYWxsIHdlIGFyZSBvbmx5IHRhbGtpbmcgYWJvdXQgNDAgYnl0ZXMuICovCisJYnVmX2xlbiA9IENJUFNPX1Y0X09QVF9MRU5fTUFYOworCWJ1ZiA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXJldF92YWwgPSAtRU5PTUVNOworCQlnb3RvIHJlcV9zZXRhdHRyX2ZhaWx1cmU7CisJfQorCisJcmV0X3ZhbCA9IGNpcHNvX3Y0X2dlbm9wdChidWYsIGJ1Zl9sZW4sIGRvaV9kZWYsIHNlY2F0dHIpOworCWlmIChyZXRfdmFsIDwgMCkKKwkJZ290byByZXFfc2V0YXR0cl9mYWlsdXJlOworCWJ1Zl9sZW4gPSByZXRfdmFsOworCisJLyogV2UgY2FuJ3QgdXNlIGlwX29wdGlvbnNfZ2V0KCkgZGlyZWN0bHkgYmVjYXVzZSBpdCBtYWtlcyBhIGNhbGwgdG8KKwkgKiBpcF9vcHRpb25zX2dldF9hbGxvYygpIHdoaWNoIGFsbG9jYXRlcyBtZW1vcnkgd2l0aCBHRlBfS0VSTkVMIGFuZAorCSAqIHdlIHdvbid0IGFsd2F5cyBoYXZlIENBUF9ORVRfUkFXIGV2ZW4gdGhvdWdoIHdlIF9hbHdheXNfIHdhbnQgdG8KKwkgKiBzZXQgdGhlIElQT1BUX0NJUFNPIG9wdGlvbi4gKi8KKwlvcHRfbGVuID0gKGJ1Zl9sZW4gKyAzKSAmIH4zOworCW9wdCA9IGt6YWxsb2Moc2l6ZW9mKCpvcHQpICsgb3B0X2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKG9wdCA9PSBOVUxMKSB7CisJCXJldF92YWwgPSAtRU5PTUVNOworCQlnb3RvIHJlcV9zZXRhdHRyX2ZhaWx1cmU7CisJfQorCW1lbWNweShvcHQtPl9fZGF0YSwgYnVmLCBidWZfbGVuKTsKKwlvcHQtPm9wdGxlbiA9IG9wdF9sZW47CisJb3B0LT5jaXBzbyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCWtmcmVlKGJ1Zik7CisJYnVmID0gTlVMTDsKKworCXJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKKwlvcHQgPSB4Y2hnKCZyZXFfaW5ldC0+b3B0LCBvcHQpOworCWtmcmVlKG9wdCk7CisKKwlyZXR1cm4gMDsKKworcmVxX3NldGF0dHJfZmFpbHVyZToKKwlrZnJlZShidWYpOworCWtmcmVlKG9wdCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogY2lwc29fdjRfZGVsb3B0IC0gRGVsZXRlIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNldCBvZiBJUCBvcHRpb25zCisgKiBAb3B0X3B0cjogSVAgb3B0aW9uIHBvaW50ZXIKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIERlbGV0ZXMgdGhlIENJUFNPIElQIG9wdGlvbiBmcm9tIGEgc2V0IG9mIElQIG9wdGlvbnMgYW5kIG1ha2VzIHRoZSBuZWNlc3NhcnkKKyAqIGFkanVzdG1lbnRzIHRvIHRoZSBJUCBvcHRpb24gc3RydWN0dXJlLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlCisgKiB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBjaXBzb192NF9kZWxvcHQoc3RydWN0IGlwX29wdGlvbnMgKipvcHRfcHRyKQoreworCWludCBoZHJfZGVsdGEgPSAwOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAqb3B0X3B0cjsKIAogCWlmIChvcHQtPnNyciB8fCBvcHQtPnJyIHx8IG9wdC0+dHMgfHwgb3B0LT5yb3V0ZXJfYWxlcnQpIHsKIAkJdTggY2lwc29fbGVuOwpAQCAtMjAwMywxMSArMjA2NSwzNCBAQAogCX0gZWxzZSB7CiAJCS8qIG9ubHkgdGhlIGNpcHNvIG9wdGlvbiB3YXMgcHJlc2VudCBvbiB0aGUgc29ja2V0IHNvIHdlIGNhbgogCQkgKiByZW1vdmUgdGhlIGVudGlyZSBvcHRpb24gc3RydWN0ICovCi0JCXNrX2luZXQtPm9wdCA9IE5VTEw7CisJCSpvcHRfcHRyID0gTlVMTDsKIAkJaGRyX2RlbHRhID0gb3B0LT5vcHRsZW47CiAJCWtmcmVlKG9wdCk7CiAJfQogCisJcmV0dXJuIGhkcl9kZWx0YTsKK30KKworLyoqCisgKiBjaXBzb192NF9zb2NrX2RlbGF0dHIgLSBEZWxldGUgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgc29ja2V0CisgKiBAc2s6IHRoZSBzb2NrZXQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZXMgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgc29ja2V0LCBpZiBwcmVzZW50LgorICoKKyAqLwordm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKQoreworCWludCBoZHJfZGVsdGE7CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0OworCisJc2tfaW5ldCA9IGluZXRfc2soc2spOworCW9wdCA9IHNrX2luZXQtPm9wdDsKKwlpZiAob3B0ID09IE5VTEwgfHwgb3B0LT5jaXBzbyA9PSAwKQorCQlyZXR1cm47CisKKwloZHJfZGVsdGEgPSBjaXBzb192NF9kZWxvcHQoJnNrX2luZXQtPm9wdCk7CiAJaWYgKHNrX2luZXQtPmlzX2ljc2sgJiYgaGRyX2RlbHRhID4gMCkgewogCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7CiAJCXNrX2Nvbm4tPmljc2tfZXh0X2hkcl9sZW4gLT0gaGRyX2RlbHRhOwpAQCAtMjAxNiw2ICsyMTAxLDI3IEBACiB9CiAKIC8qKgorICogY2lwc29fdjRfcmVxX2RlbGF0dHIgLSBEZWxldGUgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgcmVxdWVzdCBzb2NrZXQKKyAqIEByZWc6IHRoZSByZXF1ZXN0IHNvY2tldAorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlcyB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSByZXF1ZXN0IHNvY2tldCwgaWYgcHJlc2VudC4KKyAqCisgKi8KK3ZvaWQgY2lwc29fdjRfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICpyZXFfaW5ldDsKKworCXJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKKwlvcHQgPSByZXFfaW5ldC0+b3B0OworCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCisJCXJldHVybjsKKworCWNpcHNvX3Y0X2RlbG9wdCgmcmVxX2luZXQtPm9wdCk7Cit9CisKKy8qKgogICogY2lwc29fdjRfZ2V0YXR0ciAtIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNpcHNvX3Y0XypfZ2V0YXR0ciBmdW5jdGlvbnMKICAqIEBjaXBzbzogdGhlIENJUFNPIHY0IG9wdGlvbgogICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMzA5OTk3ZS4uMTI2YmI5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTA3NSw2ICsxMDc1LDE0IEBACiAJCQl9CiAJCX0KIAkJaXBfbWNfdXAoaW5fZGV2KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKKwkJaWYgKElOX0RFVl9BUlBfTk9USUZZKGluX2RldikpCisJCQlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsCisJCQkJIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzLAorCQkJCSBkZXYsCisJCQkJIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzLAorCQkJCSBOVUxMLCBkZXYtPmRldl9hZGRyLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfRE9XTjoKIAkJaXBfbWNfZG93bihpbl9kZXYpOwpAQCAtMTIwOCw3ICsxMjE2LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBSVE5MR1JQX0lQVjRfSUZBRERSLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjRfSUZBRERSLCBlcnIpOwpAQCAtMTQzOSw2ICsxNDQ4LDcgQEAKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0FOTk9VTkNFLCAiYXJwX2Fubm91bmNlIiksCiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9JR05PUkUsICJhcnBfaWdub3JlIiksCiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9BQ0NFUFQsICJhcnBfYWNjZXB0IiksCisJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9OT1RJRlksICJhcnBfbm90aWZ5IiksCiAKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9YRlJNLCAiZGlzYWJsZV94ZnJtIiksCiAJCURFVklORVRfU1lTQ1RMX0ZMVVNISU5HX0VOVFJZKE5PUE9MSUNZLCAiZGlzYWJsZV9wb2xpY3kiKSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggNzQxZTRmYS4uY2FmY2M0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCWZpYl9yZXNfcHV0KCZyZXMpOwogCWlmIChub19hZGRyKQogCQlnb3RvIGxhc3RfcmVzb3J0OwotCWlmIChycGYpCisJaWYgKHJwZiA9PSAxKQogCQlnb3RvIGVfaW52YWw7CiAJZmwub2lmID0gZGV2LT5pZmluZGV4OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggNDgxN2RlYS4uZjgzMWRmNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMzIyLDggKzMyMiw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBpbmZvLT5ubF9uZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY0X1JPVVRFLAotCQkJICBpbmZvLT5ubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgaW5mby0+bmxfbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNF9ST1VURSwKKwkJICAgIGluZm8tPm5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoaW5mby0+bmxfbmV0LCBSVE5MR1JQX0lQVjRfUk9VVEUsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggZmM1NjJkMi4uM2Y1MDgwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMzc1LDYgKzM3NSw3IEBACiAJaW5ldC0+dG9zID0gaXBfaGRyKHNrYiktPnRvczsKIAlkYWRkciA9IGlwYy5hZGRyID0gcnQtPnJ0X3NyYzsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAJaWYgKGljbXBfcGFyYW0tPnJlcGx5b3B0cy5vcHRsZW4pIHsKIAkJaXBjLm9wdCA9ICZpY21wX3BhcmFtLT5yZXBseW9wdHM7CiAJCWlmIChpcGMub3B0LT5zcnIpCkBAIC01MzIsNiArNTMzLDcgQEAKIAlpbmV0X3NrKHNrKS0+dG9zID0gdG9zOwogCWlwYy5hZGRyID0gaXBoLT5zYWRkcjsKIAlpcGMub3B0ID0gJmljbXBfcGFyYW0ucmVwbHlvcHRzOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCXsKIAkJc3RydWN0IGZsb3dpIGZsID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggZjI2YWIzOC4uMjJjZDE5ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC05MywyNCArOTMsNDAgQEAKIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmhlYWQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiOwotCWludCByZXQ7CisJaW50IHJldCwgYXR0ZW1wdHMgPSA1OwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlpbnQgc21hbGxlc3Rfc2l6ZSA9IC0xLCBzbWFsbGVzdF9yb3ZlcjsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZiAoIXNudW0pIHsKIAkJaW50IHJlbWFpbmluZywgcm92ZXIsIGxvdywgaGlnaDsKIAorYWdhaW46CiAJCWluZXRfZ2V0X2xvY2FsX3BvcnRfcmFuZ2UoJmxvdywgJmhpZ2gpOwogCQlyZW1haW5pbmcgPSAoaGlnaCAtIGxvdykgKyAxOwotCQlyb3ZlciA9IG5ldF9yYW5kb20oKSAlIHJlbWFpbmluZyArIGxvdzsKKwkJc21hbGxlc3Rfcm92ZXIgPSByb3ZlciA9IG5ldF9yYW5kb20oKSAlIHJlbWFpbmluZyArIGxvdzsKIAorCQlzbWFsbGVzdF9zaXplID0gLTE7CiAJCWRvIHsKIAkJCWhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihuZXQsIHJvdmVyLAogCQkJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKIAkJCWluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIsIG5vZGUsICZoZWFkLT5jaGFpbikKLQkJCQlpZiAoaWJfbmV0KHRiKSA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcm92ZXIpCisJCQkJaWYgKGliX25ldCh0YikgPT0gbmV0ICYmIHRiLT5wb3J0ID09IHJvdmVyKSB7CisJCQkJCWlmICh0Yi0+ZmFzdHJldXNlID4gMCAmJgorCQkJCQkgICAgc2stPnNrX3JldXNlICYmCisJCQkJCSAgICBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgorCQkJCQkgICAgKHRiLT5udW1fb3duZXJzIDwgc21hbGxlc3Rfc2l6ZSB8fCBzbWFsbGVzdF9zaXplID09IC0xKSkgeworCQkJCQkJc21hbGxlc3Rfc2l6ZSA9IHRiLT5udW1fb3duZXJzOworCQkJCQkJc21hbGxlc3Rfcm92ZXIgPSByb3ZlcjsKKwkJCQkJCWlmIChhdG9taWNfcmVhZCgmaGFzaGluZm8tPmJzb2NrZXRzKSA+IChoaWdoIC0gbG93KSArIDEpIHsKKwkJCQkJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CisJCQkJCQkJc251bSA9IHNtYWxsZXN0X3JvdmVyOworCQkJCQkJCWdvdG8gaGF2ZV9zbnVtOworCQkJCQkJfQorCQkJCQl9CiAJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CiAJCQlicmVhazsKIAkJbmV4dDoKIAkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKQEAgLTEyNSwxNCArMTQxLDE5IEBACiAJCSAqIHRoZSB0b3AgbGV2ZWwsIG5vdCBmcm9tIHRoZSAnYnJlYWs7JyBzdGF0ZW1lbnQuCiAJCSAqLwogCQlyZXQgPSAxOwotCQlpZiAocmVtYWluaW5nIDw9IDApCisJCWlmIChyZW1haW5pbmcgPD0gMCkgeworCQkJaWYgKHNtYWxsZXN0X3NpemUgIT0gLTEpIHsKKwkJCQlzbnVtID0gc21hbGxlc3Rfcm92ZXI7CisJCQkJZ290byBoYXZlX3NudW07CisJCQl9CiAJCQlnb3RvIGZhaWw7Ci0KKwkJfQogCQkvKiBPSywgaGVyZSBpcyB0aGUgb25lIHdlIHdpbGwgdXNlLiAgSEVBRCBpcwogCQkgKiBub24tTlVMTCBhbmQgd2UgaG9sZCBpdCdzIG11dGV4LgogCQkgKi8KIAkJc251bSA9IHJvdmVyOwogCX0gZWxzZSB7CitoYXZlX3NudW06CiAJCWhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihuZXQsIHNudW0sCiAJCQkJaGFzaGluZm8tPmJoYXNoX3NpemUpXTsKIAkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKQEAgLTE0NSwxMiArMTY2LDE5IEBACiB0Yl9mb3VuZDoKIAlpZiAoIWhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSkgewogCQlpZiAodGItPmZhc3RyZXVzZSA+IDAgJiYKLQkJICAgIHNrLT5za19yZXVzZSAmJiBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikgeworCQkgICAgc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOICYmCisJCSAgICBzbWFsbGVzdF9zaXplID09IC0xKSB7CiAJCQlnb3RvIHN1Y2Nlc3M7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSAxOwotCQkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmJpbmRfY29uZmxpY3Qoc2ssIHRiKSkKKwkJCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5iaW5kX2NvbmZsaWN0KHNrLCB0YikpIHsKKwkJCQlpZiAoc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOICYmCisJCQkJICAgIHNtYWxsZXN0X3NpemUgIT0gLTEgJiYgLS1hdHRlbXB0cyA+PSAwKSB7CisJCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwkJCQkJZ290byBhZ2FpbjsKKwkJCQl9CiAJCQkJZ290byBmYWlsX3VubG9jazsKKwkJCX0KIAkJfQogCX0KIHRiX25vdF9mb3VuZDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYwppbmRleCA2YzUyZTA4Li5lYWYzZTJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCkBAIC0yNjcsNiArMjY3LDcgQEAKIAogc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqaW5ldF9mcmFnX2ZpbmQoc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwKIAkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIHZvaWQgKmtleSwgdW5zaWduZWQgaW50IGhhc2gpCisJX19yZWxlYXNlcygmZi0+bG9jaykKIHsKIAlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwppbmRleCA2YTEwNDVkLi42MjVjYzVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwpAQCAtMzgsNiArMzgsNyBAQAogCQl3cml0ZV9wbmV0KCZ0Yi0+aWJfbmV0LCBob2xkX25ldChuZXQpKTsKIAkJdGItPnBvcnQgICAgICA9IHNudW07CiAJCXRiLT5mYXN0cmV1c2UgPSAwOworCQl0Yi0+bnVtX293bmVycyA9IDA7CiAJCUlOSVRfSExJU1RfSEVBRCgmdGItPm93bmVycyk7CiAJCWhsaXN0X2FkZF9oZWFkKCZ0Yi0+bm9kZSwgJmhlYWQtPmNoYWluKTsKIAl9CkBAIC01OSw4ICs2MCwxMyBAQAogdm9pZCBpbmV0X2JpbmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YiwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNudW0pCiB7CisJc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvID0gc2stPnNrX3Byb3QtPmguaGFzaGluZm87CisKKwlhdG9taWNfaW5jKCZoYXNoaW5mby0+YnNvY2tldHMpOworCiAJaW5ldF9zayhzayktPm51bSA9IHNudW07CiAJc2tfYWRkX2JpbmRfbm9kZShzaywgJnRiLT5vd25lcnMpOworCXRiLT5udW1fb3duZXJzKys7CiAJaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCA9IHRiOwogfQogCkBAIC03NSw5ICs4MSwxMiBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbYmhhc2hdOwogCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKIAorCWF0b21pY19kZWMoJmhhc2hpbmZvLT5ic29ja2V0cyk7CisKIAlzcGluX2xvY2soJmhlYWQtPmxvY2spOwogCXRiID0gaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaDsKIAlfX3NrX2RlbF9iaW5kX25vZGUoc2spOworCXRiLT5udW1fb3duZXJzLS07CiAJaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCA9IE5VTEw7CiAJaW5ldF9zayhzayktPm51bSA9IDA7CiAJaW5ldF9iaW5kX2J1Y2tldF9kZXN0cm95KGhhc2hpbmZvLT5iaW5kX2J1Y2tldF9jYWNoZXAsIHRiKTsKQEAgLTQ0NCw5ICs0NTMsOSBAQAogCQkJICovCiAJCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKIAkJCQlpZiAoaWJfbmV0KHRiKSA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcG9ydCkgewotCQkJCQlXQVJOX09OKGhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSk7CiAJCQkJCWlmICh0Yi0+ZmFzdHJldXNlID49IDApCiAJCQkJCQlnb3RvIG5leHRfcG9ydDsKKwkJCQkJV0FSTl9PTihobGlzdF9lbXB0eSgmdGItPm93bmVycykpOwogCQkJCQlpZiAoIWNoZWNrX2VzdGFibGlzaGVkKGRlYXRoX3Jvdywgc2ssCiAJCQkJCQkJCXBvcnQsICZ0dykpCiAJCQkJCQlnb3RvIG9rOwpAQCAtNTIzLDYgKzUzMiw3IEBACiB7CiAJaW50IGk7CiAKKwlhdG9taWNfc2V0KCZoLT5ic29ja2V0cywgMCk7CiAJZm9yIChpID0gMDsgaSA8IElORVRfTEhUQUJMRV9TSVpFOyBpKyspIHsKIAkJc3Bpbl9sb2NrX2luaXQoJmgtPmxpc3RlbmluZ19oYXNoW2ldLmxvY2spOwogCQlJTklUX0hMSVNUX05VTExTX0hFQUQoJmgtPmxpc3RlbmluZ19oYXNoW2ldLmhlYWQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IDAxMDE1MjEuLmU2MjUxMGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC0xNjQsNjcgKzE2NCwxMjQgQEAKIAogLyogR2l2ZW4gc3JjLCBkc3QgYW5kIGtleSwgZmluZCBhcHByb3ByaWF0ZSBmb3IgaW5wdXQgdHVubmVsLiAqLwogCi1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwZ3JlX3R1bm5lbF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LAorc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGdyZV90dW5uZWxfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgIF9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCwKIAkJCQkJICAgICAgX19iZTMyIGtleSwgX19iZTE2IGdyZV9wcm90bykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJaW50IGxpbmsgPSBkZXYtPmlmaW5kZXg7CiAJdW5zaWduZWQgaDAgPSBIQVNIKHJlbW90ZSk7CiAJdW5zaWduZWQgaDEgPSBIQVNIKGtleSk7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdDsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0MiA9IE5VTEw7CisJc3RydWN0IGlwX3R1bm5lbCAqdCwgKmNhbmQgPSBOVUxMOwogCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKIAlpbnQgZGV2X3R5cGUgPSAoZ3JlX3Byb3RvID09IGh0b25zKEVUSF9QX1RFQikpID8KIAkJICAgICAgIEFSUEhSRF9FVEhFUiA6IEFSUEhSRF9JUEdSRTsKKwlpbnQgc2NvcmUsIGNhbmRfc2NvcmUgPSA0OwogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX3JfbFtoMF5oMV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYgcmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkcikgewotCQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBkZXZfdHlwZSkKLQkJCQkJcmV0dXJuIHQ7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCQl0MiA9IHQ7Ci0JCQl9CisJCWlmIChsb2NhbCAhPSB0LT5wYXJtcy5pcGguc2FkZHIgfHwKKwkJICAgIHJlbW90ZSAhPSB0LT5wYXJtcy5pcGguZGFkZHIgfHwKKwkJICAgIGtleSAhPSB0LT5wYXJtcy5pX2tleSB8fAorCQkgICAgISh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0LT5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFICYmCisJCSAgICB0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQljb250aW51ZTsKKworCQlzY29yZSA9IDA7CisJCWlmICh0LT5wYXJtcy5saW5rICE9IGxpbmspCisJCQlzY29yZSB8PSAxOworCQlpZiAodC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJc2NvcmUgfD0gMjsKKwkJaWYgKHNjb3JlID09IDApCisJCQlyZXR1cm4gdDsKKworCQlpZiAoc2NvcmUgPCBjYW5kX3Njb3JlKSB7CisJCQljYW5kID0gdDsKKwkJCWNhbmRfc2NvcmUgPSBzY29yZTsKIAkJfQogCX0KIAogCWZvciAodCA9IGlnbi0+dHVubmVsc19yW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKHJlbW90ZSA9PSB0LT5wYXJtcy5pcGguZGFkZHIpIHsKLQkJCWlmICh0LT5wYXJtcy5pX2tleSA9PSBrZXkgJiYgdC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJCXJldHVybiB0OwotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFICYmICF0MikKLQkJCQkJdDIgPSB0OwotCQkJfQorCQlpZiAocmVtb3RlICE9IHQtPnBhcm1zLmlwaC5kYWRkciB8fAorCQkgICAga2V5ICE9IHQtPnBhcm1zLmlfa2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX2xbaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAobG9jYWwgPT0gdC0+cGFybXMuaXBoLnNhZGRyIHx8Ci0JCSAgICAgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5kYWRkciAmJgotCQkgICAgICBpcHY0X2lzX211bHRpY2FzdChsb2NhbCkpKSB7Ci0JCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCQlyZXR1cm4gdDsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJCXQyID0gdDsKLQkJCX0KKwkJaWYgKChsb2NhbCAhPSB0LT5wYXJtcy5pcGguc2FkZHIgJiYKKwkJICAgICAobG9jYWwgIT0gdC0+cGFybXMuaXBoLmRhZGRyIHx8CisJCSAgICAgICFpcHY0X2lzX211bHRpY2FzdChsb2NhbCkpKSB8fAorCQkgICAga2V5ICE9IHQtPnBhcm1zLmlfa2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX3djW2gxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCXJldHVybiB0OwotCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCXQyID0gdDsKKwkJaWYgKHQtPnBhcm1zLmlfa2V5ICE9IGtleSB8fAorCQkgICAgISh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0LT5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFICYmCisJCSAgICB0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQljb250aW51ZTsKKworCQlzY29yZSA9IDA7CisJCWlmICh0LT5wYXJtcy5saW5rICE9IGxpbmspCisJCQlzY29yZSB8PSAxOworCQlpZiAodC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJc2NvcmUgfD0gMjsKKwkJaWYgKHNjb3JlID09IDApCisJCQlyZXR1cm4gdDsKKworCQlpZiAoc2NvcmUgPCBjYW5kX3Njb3JlKSB7CisJCQljYW5kID0gdDsKKwkJCWNhbmRfc2NvcmUgPSBzY29yZTsKIAkJfQogCX0KIAotCWlmICh0MikKLQkJcmV0dXJuIHQyOworCWlmIChjYW5kICE9IE5VTEwpCisJCXJldHVybiBjYW5kOwogCi0JaWYgKGlnbi0+ZmJfdHVubmVsX2Rldi0+ZmxhZ3MmSUZGX1VQKQorCWlmIChpZ24tPmZiX3R1bm5lbF9kZXYtPmZsYWdzICYgSUZGX1VQKQogCQlyZXR1cm4gbmV0ZGV2X3ByaXYoaWduLT5mYl90dW5uZWxfZGV2KTsKKwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yODQsNiArMzQxLDcgQEAKIAlfX2JlMzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKIAlfX2JlMzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwogCV9fYmUzMiBrZXkgPSBwYXJtcy0+aV9rZXk7CisJaW50IGxpbmsgPSBwYXJtcy0+bGluazsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0LCAqKnRwOwogCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKIApAQCAtMjkxLDYgKzM0OSw3IEBACiAJCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYKIAkJICAgIHJlbW90ZSA9PSB0LT5wYXJtcy5pcGguZGFkZHIgJiYKIAkJICAgIGtleSA9PSB0LT5wYXJtcy5pX2tleSAmJgorCQkgICAgbGluayA9PSB0LT5wYXJtcy5saW5rICYmCiAJCSAgICB0eXBlID09IHQtPmRldi0+dHlwZSkKIAkJCWJyZWFrOwogCkBAIC00MjEsNyArNDgwLDcgQEAKIAl9CiAKIAlyZWFkX2xvY2soJmlwZ3JlX2xvY2spOwotCXQgPSBpcGdyZV90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCXQgPSBpcGdyZV90dW5uZWxfbG9va3VwKHNrYi0+ZGV2LCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAogCQkJCWZsYWdzICYgR1JFX0tFWSA/CiAJCQkJKigoKF9fYmUzMiAqKXApICsgKGdyZWhsZW4gLyA0KSAtIDEpIDogMCwKIAkJCQlwWzFdKTsKQEAgLTQzMiw3ICs0OTEsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC01MTgsNyArNTc3LDcgQEAKIAlncmVfcHJvdG8gPSAqKF9fYmUxNiAqKShoICsgMik7CiAKIAlyZWFkX2xvY2soJmlwZ3JlX2xvY2spOwotCWlmICgodHVubmVsID0gaXBncmVfdHVubmVsX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwKKwlpZiAoKHR1bm5lbCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoc2tiLT5kZXYsCiAJCQkJCSAgaXBoLT5zYWRkciwgaXBoLT5kYWRkciwga2V5LAogCQkJCQkgIGdyZV9wcm90bykpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPmRldi0+c3RhdHM7CkBAIC03NDQsNyArODAzLDggQEAKICNlbmRpZgogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewotCQlpZiAoamlmZmllcyAtIHR1bm5lbC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJdHVubmVsLT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpIHsKIAkJCXR1bm5lbC0+ZXJyX2NvdW50LS07CiAKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggOGViZTg2ZGQuLjNlN2U5MTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC05MzUsNiArOTM1LDEwIEBACiAJCQkJCQkJICAgc2stPnNrX2FsbG9jYXRpb24pOwogCQkJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCiAJCQkJCWVyciA9IC1FTk9CVUZTOworCQkJCWVsc2UKKwkJCQkJLyogb25seSB0aGUgaW5pdGlhbCBmcmFnbWVudCBpcworCQkJCQkgICB0aW1lIHN0YW1wZWQgKi8KKwkJCQkJaXBjLT5zaHR4LmZsYWdzID0gMDsKIAkJCX0KIAkJCWlmIChza2IgPT0gTlVMTCkKIAkJCQlnb3RvIGVycm9yOwpAQCAtOTQ1LDYgKzk0OSw3IEBACiAJCQlza2ItPmlwX3N1bW1lZCA9IGNzdW1tb2RlOwogCQkJc2tiLT5jc3VtID0gMDsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgaGhfbGVuKTsKKwkJCSpza2JfdHgoc2tiKSA9IGlwYy0+c2h0eDsKIAogCQkJLyoKIAkJCSAqCUZpbmQgd2hlcmUgdG8gc3RhcnQgcHV0dGluZyBieXRlcy4KQEAgLTEzNjQsNiArMTM2OSw3IEBACiAKIAlkYWRkciA9IGlwYy5hZGRyID0gcnQtPnJ0X3NyYzsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAKIAlpZiAocmVwbHlvcHRzLm9wdC5vcHRsZW4pIHsKIAkJaXBjLm9wdCA9ICZyZXBseW9wdHMub3B0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggZDcyMjAxMy4uOTBkMjJhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0xMDAsOCArMTAwLDggQEAKICNkZWZpbmUgQ09ORl9OQU1FU0VSVkVSU19NQVggICAzICAgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIG5hbWVzZXJ2ZXJzCiAJCQkJCSAgIC0gJzMnIGZyb20gcmVzb2x2LmggKi8KIAotI2RlZmluZSBOT05FIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX05PTkUpCi0jZGVmaW5lIEFOWSBfX2NvbnN0YW50X2h0b25sKElOQUREUl9BTlkpCisjZGVmaW5lIE5PTkUgY3B1X3RvX2JlMzIoSU5BRERSX05PTkUpCisjZGVmaW5lIEFOWSBjcHVfdG9fYmUzMihJTkFERFJfQU5ZKQogCiAvKgogICogUHVibGljIElQIGNvbmZpZ3VyYXRpb24KQEAgLTQwNiw3ICs0MDYsNyBAQAogc3RhdGljIGludCBpY19yYXJwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSByYXJwX3BhY2tldF90eXBlIF9faW5pdGRhdGEgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX1JBUlApLAorCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfUkFSUCksCiAJLmZ1bmMgPQlpY19yYXJwX3JlY3YsCiB9OwogCkBAIC01NjgsNyArNTY4LDcgQEAKIHN0YXRpYyBpbnQgaWNfYm9vdHBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJvb3RwX3BhY2tldF90eXBlIF9faW5pdGRhdGEgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkuZnVuYyA9CWljX2Jvb3RwX3JlY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggNTA3OWRmYi4uOTA1NDEzOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTQ2Niw3ICs0NjYsOCBAQAogCX0KIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogCQl9IGVsc2UKQEAgLTc1MCw3ICs3NTEsNyBAQAogCS5wcmlvcml0eQk9CTEsCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0lORk8gIklQdjQgb3ZlciBJUHY0IHR1bm5lbGluZyBkcml2ZXJcbiI7CiAKIHN0YXRpYyB2b2lkIGlwaXBfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBpcGlwX25ldCAqaXBuKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDE0NjY2NDQuLjEzZTlkZDMwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC02Nyw5ICs2Nyw2IEBACiAjZGVmaW5lIENPTkZJR19JUF9QSU1TTQkxCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzb2NrICptcm91dGVfc29ja2V0OwotCi0KIC8qIEJpZyBsb2NrLCBwcm90ZWN0aW5nIHZpZiB0YWJsZSwgbXJ0IGNhY2hlIGFuZCBtcm91dGUgc29ja2V0IHN0YXRlLgogICAgTm90ZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzZW1hcGhvcmVkIHZpYSBydG5sX2xvY2suCiAgKi8KQEAgLTgwLDE4ICs3Nyw5IEBACiAgKglNdWx0aWNhc3Qgcm91dGVyIGNvbnRyb2wgdmFyaWFibGVzCiAgKi8KIAotc3RhdGljIHN0cnVjdCB2aWZfZGV2aWNlIHZpZl90YWJsZVtNQVhWSUZTXTsJCS8qIERldmljZXMgCQkqLwotc3RhdGljIGludCBtYXh2aWY7Ci0KLSNkZWZpbmUgVklGX0VYSVNUUyhpZHgpICh2aWZfdGFibGVbaWR4XS5kZXYgIT0gTlVMTCkKLQotc3RhdGljIGludCBtcm91dGVfZG9fYXNzZXJ0OwkJCQkvKiBTZXQgaW4gUElNIGFzc2VydAkqLwotc3RhdGljIGludCBtcm91dGVfZG9fcGltOwotCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqbWZjX2NhY2hlX2FycmF5W01GQ19MSU5FU107CS8qIEZvcndhcmRpbmcgY2FjaGUJKi8KKyNkZWZpbmUgVklGX0VYSVNUUyhfbmV0LCBfaWR4KSAoKF9uZXQpLT5pcHY0LnZpZl90YWJsZVtfaWR4XS5kZXYgIT0gTlVMTCkKIAogc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKm1mY191bnJlc19xdWV1ZTsJCS8qIFF1ZXVlIG9mIHVucmVzb2x2ZWQgZW50cmllcyAqLwotc3RhdGljIGF0b21pY190IGNhY2hlX3Jlc29sdmVfcXVldWVfbGVuOwkJLyogU2l6ZSBvZiB1bnJlc29sdmVkCSovCiAKIC8qIFNwZWNpYWwgc3BpbmxvY2sgZm9yIHF1ZXVlIG9mIHVucmVzb2x2ZWQgZW50cmllcyAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7CkBAIC0xMDcsNyArOTUsOCBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbnQgaXBfbXJfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZSwgaW50IGxvY2FsKTsKLXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpOworc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KTsKIHN0YXRpYyBpbnQgaXBtcl9maWxsX21yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjX2NhY2hlICpjLCBzdHJ1Y3QgcnRtc2cgKnJ0bSk7CiAKICNpZmRlZiBDT05GSUdfSVBfUElNU01fVjIKQEAgLTEyMCw5ICsxMDksMTEgQEAKIAogc3RhdGljIHZvaWQgaXBtcl9kZWxfdHVubmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2aWZjdGwgKnYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCiAJZGV2X2Nsb3NlKGRldik7CiAKLQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsICJ0dW5sMCIpOworCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgInR1bmwwIik7CiAJaWYgKGRldikgewogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAkJc3RydWN0IGlmcmVxIGlmcjsKQEAgLTE0OCwxMSArMTM5LDExIEBACiB9CiAKIHN0YXRpYwotc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgdmlmY3RsICp2KQorc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgICpkZXY7CiAKLQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsICJ0dW5sMCIpOworCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgInR1bmwwIik7CiAKIAlpZiAoZGV2KSB7CiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOwpAQCAtMTgxLDcgKzE3Miw4IEBACiAKIAkJZGV2ID0gTlVMTDsKIAotCQlpZiAoZXJyID09IDAgJiYgKGRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgcC5uYW1lKSkgIT0gTlVMTCkgeworCQlpZiAoZXJyID09IDAgJiYKKwkJICAgIChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIHAubmFtZSkpICE9IE5VTEwpIHsKIAkJCWRldi0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKIAogCQkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKQEAgLTIwOSwxNCArMjAxLDE1IEBACiAKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAotc3RhdGljIGludCByZWdfdmlmX251bSA9IC0xOwotCiBzdGF0aWMgaW50IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCByZWdfdmlmX251bSwgSUdNUE1TR19XSE9MRVBLVCk7CisJaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0sCisJCQkgIElHTVBNU0dfV0hPTEVQS1QpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CkBAIC0yODMsMTYgKzI3NiwxNiBAQAogICoJQG5vdGlmeTogU2V0IHRvIDEsIGlmIHRoZSBjYWxsZXIgaXMgYSBub3RpZmllcl9jYWxsCiAgKi8KIAotc3RhdGljIGludCB2aWZfZGVsZXRlKGludCB2aWZpLCBpbnQgbm90aWZ5KQorc3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgaW50IHZpZmksIGludCBub3RpZnkpCiB7CiAJc3RydWN0IHZpZl9kZXZpY2UgKnY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKLQlpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBtYXh2aWYpCisJaWYgKHZpZmkgPCAwIHx8IHZpZmkgPj0gbmV0LT5pcHY0Lm1heHZpZikKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JdiA9ICZ2aWZfdGFibGVbdmlmaV07CisJdiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZmldOwogCiAJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwogCWRldiA9IHYtPmRldjsKQEAgLTMwNCwxNyArMjk3LDE3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCi0JaWYgKHZpZmkgPT0gcmVnX3ZpZl9udW0pCi0JCXJlZ192aWZfbnVtID0gLTE7CisJaWYgKHZpZmkgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSkKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA9IC0xOwogI2VuZGlmCiAKLQlpZiAodmlmaSsxID09IG1heHZpZikgeworCWlmICh2aWZpKzEgPT0gbmV0LT5pcHY0Lm1heHZpZikgewogCQlpbnQgdG1wOwogCQlmb3IgKHRtcD12aWZpLTE7IHRtcD49MDsgdG1wLS0pIHsKLQkJCWlmIChWSUZfRVhJU1RTKHRtcCkpCisJCQlpZiAoVklGX0VYSVNUUyhuZXQsIHRtcCkpCiAJCQkJYnJlYWs7CiAJCX0KLQkJbWF4dmlmID0gdG1wKzE7CisJCW5ldC0+aXB2NC5tYXh2aWYgPSB0bXArMTsKIAl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKQEAgLTMzMyw2ICszMjYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlwbXJfY2FjaGVfZnJlZShzdHJ1Y3QgbWZjX2NhY2hlICpjKQoreworCXJlbGVhc2VfbmV0KG1mY19uZXQoYykpOworCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKK30KKwogLyogRGVzdHJveSBhbiB1bnJlc29sdmVkIGNhY2hlIGVudHJ5LCBraWxsaW5nIHF1ZXVlZCBza2JzCiAgICBhbmQgcmVwb3J0aW5nIGVycm9yIHRvIG5ldGxpbmsgcmVhZGVycy4KICAqLwpAQCAtMzQxLDggKzM0MCw5IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgbmxtc2dlcnIgKmU7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjKTsKIAotCWF0b21pY19kZWMoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKKwlhdG9taWNfZGVjKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQpKSkgewogCQlpZiAoaXBfaGRyKHNrYiktPnZlcnNpb24gPT0gMCkgewpAQCAtMzU0LDEyICszNTQsMTIgQEAKIAkJCWUtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJCW1lbXNldCgmZS0+bXNnLCAwLCBzaXplb2YoZS0+bXNnKSk7CiAKLQkJCXJ0bmxfdW5pY2FzdChza2IsICZpbml0X25ldCwgTkVUTElOS19DQihza2IpLnBpZCk7CisJCQlydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOwogCQl9IGVsc2UKIAkJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwlpcG1yX2NhY2hlX2ZyZWUoYyk7CiB9CiAKIApAQCAtMzc2LDcgKzM3Niw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSA9PSAwKQorCWlmIChtZmNfdW5yZXNfcXVldWUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlub3cgPSBqaWZmaWVzOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCWlwbXJfZGVzdHJveV91bnJlcyhjKTsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKKwlpZiAobWZjX3VucmVzX3F1ZXVlICE9IE5VTEwpCiAJCW1vZF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIsIGppZmZpZXMgKyBleHBpcmVzKTsKIAogb3V0OgpAQCAtNDA5LDEzICs0MDksMTUgQEAKIHN0YXRpYyB2b2lkIGlwbXJfdXBkYXRlX3RocmVzaG9sZHMoc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGNoYXIgKnR0bHMpCiB7CiAJaW50IHZpZmk7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjYWNoZSk7CiAKIAljYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPSBNQVhWSUZTOwogCWNhY2hlLT5tZmNfdW4ucmVzLm1heHZpZiA9IDA7CiAJbWVtc2V0KGNhY2hlLT5tZmNfdW4ucmVzLnR0bHMsIDI1NSwgTUFYVklGUyk7CiAKLQlmb3IgKHZpZmk9MDsgdmlmaTxtYXh2aWY7IHZpZmkrKykgewotCQlpZiAoVklGX0VYSVNUUyh2aWZpKSAmJiB0dGxzW3ZpZmldICYmIHR0bHNbdmlmaV0gPCAyNTUpIHsKKwlmb3IgKHZpZmkgPSAwOyB2aWZpIDwgbmV0LT5pcHY0Lm1heHZpZjsgdmlmaSsrKSB7CisJCWlmIChWSUZfRVhJU1RTKG5ldCwgdmlmaSkgJiYKKwkJICAgIHR0bHNbdmlmaV0gJiYgdHRsc1t2aWZpXSA8IDI1NSkgewogCQkJY2FjaGUtPm1mY191bi5yZXMudHRsc1t2aWZpXSA9IHR0bHNbdmlmaV07CiAJCQlpZiAoY2FjaGUtPm1mY191bi5yZXMubWludmlmID4gdmlmaSkKIAkJCQljYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPSB2aWZpOwpAQCAtNDI1LDE2ICs0MjcsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgdmlmY3RsICp2aWZjLCBpbnQgbXJ0c29jaykKK3N0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnZpZmMsIGludCBtcnRzb2NrKQogewogCWludCB2aWZpID0gdmlmYy0+dmlmY192aWZpOwotCXN0cnVjdCB2aWZfZGV2aWNlICp2ID0gJnZpZl90YWJsZVt2aWZpXTsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCWludCBlcnI7CiAKIAkvKiBJcyB2aWYgYnVzeSA/ICovCi0JaWYgKFZJRl9FWElTVFModmlmaSkpCisJaWYgKFZJRl9FWElTVFMobmV0LCB2aWZpKSkKIAkJcmV0dXJuIC1FQUREUklOVVNFOwogCiAJc3dpdGNoICh2aWZjLT52aWZjX2ZsYWdzKSB7CkBAIC00NDQsNyArNDQ2LDcgQEAKIAkJICogU3BlY2lhbCBQdXJwb3NlIFZJRiBpbiBQSU0KIAkJICogQWxsIHRoZSBwYWNrZXRzIHdpbGwgYmUgc2VudCB0byB0aGUgZGFlbW9uCiAJCSAqLwotCQlpZiAocmVnX3ZpZl9udW0gPj0gMCkKKwkJaWYgKG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPj0gMCkKIAkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJZGV2ID0gaXBtcl9yZWdfdmlmKCk7CiAJCWlmICghZGV2KQpAQCAtNDU4LDcgKzQ2MCw3IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJY2FzZSBWSUZGX1RVTk5FTDoKLQkJZGV2ID0gaXBtcl9uZXdfdHVubmVsKHZpZmMpOworCQlkZXYgPSBpcG1yX25ld190dW5uZWwobmV0LCB2aWZjKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKQEAgLTQ2OSw3ICs0NzEsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgMDoKLQkJZGV2ID0gaXBfZGV2X2ZpbmQoJmluaXRfbmV0LCB2aWZjLT52aWZjX2xjbF9hZGRyLnNfYWRkcik7CisJCWRldiA9IGlwX2Rldl9maW5kKG5ldCwgdmlmYy0+dmlmY19sY2xfYWRkci5zX2FkZHIpOwogCQlpZiAoIWRldikKIAkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShkZXYsIDEpOwpAQCAtNTEwLDIwICs1MTIsMjIgQEAKIAl2LT5kZXYgPSBkZXY7CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCiAJaWYgKHYtPmZsYWdzJlZJRkZfUkVHSVNURVIpCi0JCXJlZ192aWZfbnVtID0gdmlmaTsKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA9IHZpZmk7CiAjZW5kaWYKLQlpZiAodmlmaSsxID4gbWF4dmlmKQotCQltYXh2aWYgPSB2aWZpKzE7CisJaWYgKHZpZmkrMSA+IG5ldC0+aXB2NC5tYXh2aWYpCisJCW5ldC0+aXB2NC5tYXh2aWYgPSB2aWZpKzE7CiAJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmQoX19iZTMyIG9yaWdpbiwgX19iZTMyIG1jYXN0Z3JwKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSBfX2JlMzIgb3JpZ2luLAorCQkJCQkgX19iZTMyIG1jYXN0Z3JwKQogewogCWludCBsaW5lID0gTUZDX0hBU0gobWNhc3RncnAsIG9yaWdpbik7CiAJc3RydWN0IG1mY19jYWNoZSAqYzsKIAotCWZvciAoYz1tZmNfY2FjaGVfYXJyYXlbbGluZV07IGM7IGMgPSBjLT5uZXh0KSB7CisJZm9yIChjID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsgYzsgYyA9IGMtPm5leHQpIHsKIAkJaWYgKGMtPm1mY19vcmlnaW49PW9yaWdpbiAmJiBjLT5tZmNfbWNhc3RncnA9PW1jYXN0Z3JwKQogCQkJYnJlYWs7CiAJfQpAQCAtNTMzLDIyICs1MzcsMjQgQEAKIC8qCiAgKglBbGxvY2F0ZSBhIG11bHRpY2FzdCBjYWNoZSBlbnRyeQogICovCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvYyh2b2lkKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoYyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAljLT5tZmNfdW4ucmVzLm1pbnZpZiA9IE1BWFZJRlM7CisJbWZjX25ldF9zZXQoYywgbmV0KTsKIAlyZXR1cm4gYzsKIH0KIAotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJaWYgKGMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQpOwogCWMtPm1mY191bi51bnJlcy5leHBpcmVzID0gamlmZmllcyArIDEwKkhaOworCW1mY19uZXRfc2V0KGMsIG5ldCk7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTU4MSw3ICs1ODcsNyBAQAogCQkJCW1lbXNldCgmZS0+bXNnLCAwLCBzaXplb2YoZS0+bXNnKSk7CiAJCQl9CiAKLQkJCXJ0bmxfdW5pY2FzdChza2IsICZpbml0X25ldCwgTkVUTElOS19DQihza2IpLnBpZCk7CisJCQlydG5sX3VuaWNhc3Qoc2tiLCBtZmNfbmV0KGMpLCBORVRMSU5LX0NCKHNrYikucGlkKTsKIAkJfSBlbHNlCiAJCQlpcF9tcl9mb3J3YXJkKHNrYiwgYywgMCk7CiAJfQpAQCAtNTk0LDcgKzYwMCw4IEBACiAgKglDYWxsZWQgdW5kZXIgbXJ0X2xvY2suCiAgKi8KIAotc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCkKK3N0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTsKQEAgLTYyNiw3ICs2MzMsNyBAQAogCQltZW1jcHkobXNnLCBza2JfbmV0d29ya19oZWFkZXIocGt0KSwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCQltc2ctPmltX21zZ3R5cGUgPSBJR01QTVNHX1dIT0xFUEtUOwogCQltc2ctPmltX21ieiA9IDA7Ci0JCW1zZy0+aW1fdmlmID0gcmVnX3ZpZl9udW07CisJCW1zZy0+aW1fdmlmID0gbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bTsKIAkJaXBfaGRyKHNrYiktPmlobCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpID4+IDI7CiAJCWlwX2hkcihza2IpLT50b3RfbGVuID0gaHRvbnMobnRvaHMoaXBfaGRyKHBrdCktPnRvdF9sZW4pICsKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CkBAIC02NTgsNyArNjY1LDcgQEAKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOwogCX0KIAotCWlmIChtcm91dGVfc29ja2V0ID09IE5VTEwpIHsKKwlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9zayA9PSBOVUxMKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02NjYsNyArNjczLDggQEAKIAkvKgogCSAqCURlbGl2ZXIgdG8gbXJvdXRlZAogCSAqLwotCWlmICgocmV0ID0gc29ja19xdWV1ZV9yY3Zfc2tiKG1yb3V0ZV9zb2NrZXQsIHNrYikpPDApIHsKKwlyZXQgPSBzb2NrX3F1ZXVlX3Jjdl9za2IobmV0LT5pcHY0Lm1yb3V0ZV9zaywgc2tiKTsKKwlpZiAocmV0IDwgMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXMuXG4iKTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC02ODAsNyArNjg4LDcgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1pcG1yX2NhY2hlX3VucmVzb2x2ZWQodmlmaV90IHZpZmksIHN0cnVjdCBza19idWZmICpza2IpCitpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG5ldCAqbmV0LCB2aWZpX3QgdmlmaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CkBAIC02ODgsNyArNjk2LDggQEAKIAogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCWZvciAoYz1tZmNfdW5yZXNfcXVldWU7IGM7IGM9Yy0+bmV4dCkgewotCQlpZiAoYy0+bWZjX21jYXN0Z3JwID09IGlwaC0+ZGFkZHIgJiYKKwkJaWYgKG5ldF9lcShtZmNfbmV0KGMpLCBuZXQpICYmCisJCSAgICBjLT5tZmNfbWNhc3RncnAgPT0gaXBoLT5kYWRkciAmJgogCQkgICAgYy0+bWZjX29yaWdpbiA9PSBpcGgtPnNhZGRyKQogCQkJYnJlYWs7CiAJfQpAQCAtNjk4LDggKzcwNyw4IEBACiAJCSAqCUNyZWF0ZSBhIG5ldyBlbnRyeSBpZiBhbGxvd2FibGUKIAkJICovCiAKLQkJaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPj0gMTAgfHwKLQkJICAgIChjPWlwbXJfY2FjaGVfYWxsb2NfdW5yZXMoKSk9PU5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pID49IDEwIHx8CisJCSAgICAoYyA9IGlwbXJfY2FjaGVfYWxsb2NfdW5yZXMobmV0KSkgPT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC03MTYsMTggKzcyNSwxOSBAQAogCQkvKgogCQkgKglSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuCiAJCSAqLwotCQlpZiAoKGVyciA9IGlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgdmlmaSwgSUdNUE1TR19OT0NBQ0hFKSk8MCkgeworCQllcnIgPSBpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgdmlmaSwgSUdNUE1TR19OT0NBQ0hFKTsKKwkJaWYgKGVyciA8IDApIHsKIAkJCS8qIElmIHRoZSByZXBvcnQgZmFpbGVkIHRocm93IHRoZSBjYWNoZSBlbnRyeQogCQkJICAgb3V0IC0gQnJhZCBQYXJrZXIKIAkJCSAqLwogCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAotCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJaXBtcl9jYWNoZV9mcmVlKGMpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJYXRvbWljX2luYygmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOworCQlhdG9taWNfaW5jKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOwogCQljLT5uZXh0ID0gbWZjX3VucmVzX3F1ZXVlOwogCQltZmNfdW5yZXNfcXVldWUgPSBjOwogCkBAIC03NTMsMzUgKzc2MywzNyBAQAogICoJTUZDIGNhY2hlIG1hbmlwdWxhdGlvbiBieSB1c2VyIHNwYWNlIG1yb3V0ZSBkYWVtb24KICAqLwogCi1zdGF0aWMgaW50IGlwbXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbWZjY3RsICptZmMpCitzdGF0aWMgaW50IGlwbXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtZmNjdGwgKm1mYykKIHsKIAlpbnQgbGluZTsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjLCAqKmNwOwogCiAJbGluZSA9IE1GQ19IQVNIKG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIsIG1mYy0+bWZjY19vcmlnaW4uc19hZGRyKTsKIAotCWZvciAoY3A9Jm1mY19jYWNoZV9hcnJheVtsaW5lXTsgKGM9KmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CisJZm9yIChjcCA9ICZuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOworCSAgICAgKGMgPSAqY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKIAkJaWYgKGMtPm1mY19vcmlnaW4gPT0gbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIgJiYKIAkJICAgIGMtPm1mY19tY2FzdGdycCA9PSBtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7CiAJCQkqY3AgPSBjLT5uZXh0OwogCQkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwkJCWlwbXJfY2FjaGVfZnJlZShjKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50IGlwbXJfbWZjX2FkZChzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrKQorc3RhdGljIGludCBpcG1yX21mY19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrKQogewogCWludCBsaW5lOwogCXN0cnVjdCBtZmNfY2FjaGUgKnVjLCAqYywgKipjcDsKIAogCWxpbmUgPSBNRkNfSEFTSChtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyLCBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkcik7CiAKLQlmb3IgKGNwPSZtZmNfY2FjaGVfYXJyYXlbbGluZV07IChjPSpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgeworCWZvciAoY3AgPSAmbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsKKwkgICAgIChjID0gKmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CiAJCWlmIChjLT5tZmNfb3JpZ2luID09IG1mYy0+bWZjY19vcmlnaW4uc19hZGRyICYmCiAJCSAgICBjLT5tZmNfbWNhc3RncnAgPT0gbWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikKIAkJCWJyZWFrOwpAQCAtODAwLDcgKzgxMiw3IEBACiAJaWYgKCFpcHY0X2lzX211bHRpY2FzdChtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljID0gaXBtcl9jYWNoZV9hbGxvYygpOworCWMgPSBpcG1yX2NhY2hlX2FsbG9jKG5ldCk7CiAJaWYgKGMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTgxMiw4ICs4MjQsOCBAQAogCQljLT5tZmNfZmxhZ3MgfD0gTUZDX1NUQVRJQzsKIAogCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKLQljLT5uZXh0ID0gbWZjX2NhY2hlX2FycmF5W2xpbmVdOwotCW1mY19jYWNoZV9hcnJheVtsaW5lXSA9IGM7CisJYy0+bmV4dCA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07CisJbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXSA9IGM7CiAJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKIAkvKgpAQCAtODIzLDE5ICs4MzUsMjEgQEAKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAlmb3IgKGNwID0gJm1mY191bnJlc19xdWV1ZTsgKHVjPSpjcCkgIT0gTlVMTDsKIAkgICAgIGNwID0gJnVjLT5uZXh0KSB7Ci0JCWlmICh1Yy0+bWZjX29yaWdpbiA9PSBjLT5tZmNfb3JpZ2luICYmCisJCWlmIChuZXRfZXEobWZjX25ldCh1YyksIG5ldCkgJiYKKwkJICAgIHVjLT5tZmNfb3JpZ2luID09IGMtPm1mY19vcmlnaW4gJiYKIAkJICAgIHVjLT5tZmNfbWNhc3RncnAgPT0gYy0+bWZjX21jYXN0Z3JwKSB7CiAJCQkqY3AgPSB1Yy0+bmV4dDsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikpCi0JCQkJZGVsX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lcik7CisJCQlhdG9taWNfZGVjKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOwogCQkJYnJlYWs7CiAJCX0KIAl9CisJaWYgKG1mY191bnJlc19xdWV1ZSA9PSBOVUxMKQorCQlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKIAlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCiAJaWYgKHVjKSB7CiAJCWlwbXJfY2FjaGVfcmVzb2x2ZSh1YywgYyk7Ci0JCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCB1Yyk7CisJCWlwbXJfY2FjaGVfZnJlZSh1Yyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODQ0LDE2ICs4NTgsMTYgQEAKICAqCUNsb3NlIHRoZSBtdWx0aWNhc3Qgc29ja2V0LCBhbmQgY2xlYXIgdGhlIHZpZiB0YWJsZXMgZXRjCiAgKi8KIAotc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgaTsKIAogCS8qCiAJICoJU2h1dCBkb3duIGFsbCBhY3RpdmUgdmlmIGVudHJpZXMKIAkgKi8KLQlmb3IgKGk9MDsgaTxtYXh2aWY7IGkrKykgewotCQlpZiAoISh2aWZfdGFibGVbaV0uZmxhZ3MmVklGRl9TVEFUSUMpKQotCQkJdmlmX2RlbGV0ZShpLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmV0LT5pcHY0Lm1heHZpZjsgaSsrKSB7CisJCWlmICghKG5ldC0+aXB2NC52aWZfdGFibGVbaV0uZmxhZ3MmVklGRl9TVEFUSUMpKQorCQkJdmlmX2RlbGV0ZShuZXQsIGksIDApOwogCX0KIAogCS8qCkBAIC04NjIsNyArODc2LDcgQEAKIAlmb3IgKGk9MDsgaTxNRkNfTElORVM7IGkrKykgewogCQlzdHJ1Y3QgbWZjX2NhY2hlICpjLCAqKmNwOwogCi0JCWNwID0gJm1mY19jYWNoZV9hcnJheVtpXTsKKwkJY3AgPSAmbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtpXTsKIAkJd2hpbGUgKChjID0gKmNwKSAhPSBOVUxMKSB7CiAJCQlpZiAoYy0+bWZjX2ZsYWdzJk1GQ19TVEFUSUMpIHsKIAkJCQljcCA9ICZjLT5uZXh0OwpAQCAtODcyLDIyICs4ODYsMjMgQEAKIAkJCSpjcCA9IGMtPm5leHQ7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJaXBtcl9jYWNoZV9mcmVlKGMpOwogCQl9CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgIT0gMCkgewotCQlzdHJ1Y3QgbWZjX2NhY2hlICpjOworCWlmIChhdG9taWNfcmVhZCgmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSAhPSAwKSB7CisJCXN0cnVjdCBtZmNfY2FjaGUgKmMsICoqY3A7CiAKIAkJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7Ci0JCXdoaWxlIChtZmNfdW5yZXNfcXVldWUgIT0gTlVMTCkgewotCQkJYyA9IG1mY191bnJlc19xdWV1ZTsKLQkJCW1mY191bnJlc19xdWV1ZSA9IGMtPm5leHQ7Ci0JCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOworCQljcCA9ICZtZmNfdW5yZXNfcXVldWU7CisJCXdoaWxlICgoYyA9ICpjcCkgIT0gTlVMTCkgeworCQkJaWYgKCFuZXRfZXEobWZjX25ldChjKSwgbmV0KSkgeworCQkJCWNwID0gJmMtPm5leHQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQkqY3AgPSBjLT5uZXh0OwogCiAJCQlpcG1yX2Rlc3Ryb3lfdW5yZXMoYyk7Ci0KLQkJCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJfQpAQCAtODk1LDE1ICs5MTAsMTcgQEAKIAogc3RhdGljIHZvaWQgbXJ0c29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCiAJcnRubF9sb2NrKCk7Ci0JaWYgKHNrID09IG1yb3V0ZV9zb2NrZXQpIHsKLQkJSVBWNF9ERVZDT05GX0FMTChzb2NrX25ldChzayksIE1DX0ZPUldBUkRJTkcpLS07CisJaWYgKHNrID09IG5ldC0+aXB2NC5tcm91dGVfc2spIHsKKwkJSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpLS07CiAKIAkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCQltcm91dGVfc29ja2V0ID0gTlVMTDsKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9zayA9IE5VTEw7CiAJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCW1yb3V0ZV9jbGVhbl90YWJsZXMoc2spOworCQltcm91dGVfY2xlYW5fdGFibGVzKG5ldCk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CkBAIC05MjAsOSArOTM3LDEwIEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgdmlmY3RsIHZpZjsKIAlzdHJ1Y3QgbWZjY3RsIG1mYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlpZiAob3B0bmFtZSAhPSBNUlRfSU5JVCkgewotCQlpZiAoc2sgIT0gbXJvdXRlX3NvY2tldCAmJiAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJaWYgKHNrICE9IG5ldC0+aXB2NC5tcm91dGVfc2sgJiYgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKQEAgLTkzNSw3ICs5NTMsNyBAQAogCQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAogCQlydG5sX2xvY2soKTsKLQkJaWYgKG1yb3V0ZV9zb2NrZXQpIHsKKwkJaWYgKG5ldC0+aXB2NC5tcm91dGVfc2spIHsKIAkJCXJ0bmxfdW5sb2NrKCk7CiAJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCX0KQEAgLTk0MywxNSArOTYxLDE1IEBACiAJCXJldCA9IGlwX3JhX2NvbnRyb2woc2ssIDEsIG1ydHNvY2tfZGVzdHJ1Y3QpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKLQkJCW1yb3V0ZV9zb2NrZXQgPSBzazsKKwkJCW5ldC0+aXB2NC5tcm91dGVfc2sgPSBzazsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQlJUFY0X0RFVkNPTkZfQUxMKHNvY2tfbmV0KHNrKSwgTUNfRk9SV0FSRElORykrKzsKKwkJCUlQVjRfREVWQ09ORl9BTEwobmV0LCBNQ19GT1JXQVJESU5HKSsrOwogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7CiAJY2FzZSBNUlRfRE9ORToKLQkJaWYgKHNrICE9IG1yb3V0ZV9zb2NrZXQpCisJCWlmIChzayAhPSBuZXQtPmlwdjQubXJvdXRlX3NrKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCXJldHVybiBpcF9yYV9jb250cm9sKHNrLCAwLCBOVUxMKTsKIAljYXNlIE1SVF9BRERfVklGOgpAQCAtOTY0LDkgKzk4Miw5IEBACiAJCQlyZXR1cm4gLUVORklMRTsKIAkJcnRubF9sb2NrKCk7CiAJCWlmIChvcHRuYW1lID09IE1SVF9BRERfVklGKSB7Ci0JCQlyZXQgPSB2aWZfYWRkKCZ2aWYsIHNrPT1tcm91dGVfc29ja2V0KTsKKwkJCXJldCA9IHZpZl9hZGQobmV0LCAmdmlmLCBzayA9PSBuZXQtPmlwdjQubXJvdXRlX3NrKTsKIAkJfSBlbHNlIHsKLQkJCXJldCA9IHZpZl9kZWxldGUodmlmLnZpZmNfdmlmaSwgMCk7CisJCQlyZXQgPSB2aWZfZGVsZXRlKG5ldCwgdmlmLnZpZmNfdmlmaSwgMCk7CiAJCX0KIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKQEAgLTk4Myw5ICsxMDAxLDkgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlydG5sX2xvY2soKTsKIAkJaWYgKG9wdG5hbWUgPT0gTVJUX0RFTF9NRkMpCi0JCQlyZXQgPSBpcG1yX21mY19kZWxldGUoJm1mYyk7CisJCQlyZXQgPSBpcG1yX21mY19kZWxldGUobmV0LCAmbWZjKTsKIAkJZWxzZQotCQkJcmV0ID0gaXBtcl9tZmNfYWRkKCZtZmMsIHNrPT1tcm91dGVfc29ja2V0KTsKKwkJCXJldCA9IGlwbXJfbWZjX2FkZChuZXQsICZtZmMsIHNrID09IG5ldC0+aXB2NC5tcm91dGVfc2spOwogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwogCQkvKgpAQCAtOTk2LDcgKzEwMTQsNyBAQAogCQlpbnQgdjsKIAkJaWYgKGdldF91c2VyKHYsKGludCBfX3VzZXIgKilvcHR2YWwpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCW1yb3V0ZV9kb19hc3NlcnQ9KHYpPzE6MDsKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQgPSAodikgPyAxIDogMDsKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19JUF9QSU1TTQpAQCAtMTAxMCwxMSArMTAyOCwxMSBAQAogCiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSAwOwotCQlpZiAodiAhPSBtcm91dGVfZG9fcGltKSB7Ci0JCQltcm91dGVfZG9fcGltID0gdjsKLQkJCW1yb3V0ZV9kb19hc3NlcnQgPSB2OworCQlpZiAodiAhPSBuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSkgeworCQkJbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0gPSB2OworCQkJbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQgPSB2OwogI2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMgotCQkJaWYgKG1yb3V0ZV9kb19waW0pCisJCQlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0pCiAJCQkJcmV0ID0gaW5ldF9hZGRfcHJvdG9jb2woJnBpbV9wcm90b2NvbCwKIAkJCQkJCQlJUFBST1RPX1BJTSk7CiAJCQllbHNlCkBAIC0xMDQ1LDYgKzEwNjMsNyBAQAogewogCWludCBvbHI7CiAJaW50IHZhbDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlpZiAob3B0bmFtZSAhPSBNUlRfVkVSU0lPTiAmJgogI2lmZGVmIENPTkZJR19JUF9QSU1TTQpAQCAtMTA2NiwxMCArMTA4NSwxMCBAQAogCQl2YWwgPSAweDAzMDU7CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCiAJZWxzZSBpZiAob3B0bmFtZSA9PSBNUlRfUElNKQotCQl2YWwgPSBtcm91dGVfZG9fcGltOworCQl2YWwgPSBuZXQtPmlwdjQubXJvdXRlX2RvX3BpbTsKICNlbmRpZgogCWVsc2UKLQkJdmFsID0gbXJvdXRlX2RvX2Fzc2VydDsKKwkJdmFsID0gbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQ7CiAJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsIG9scikpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtMTA4NSwxNiArMTEwNCwxNyBAQAogCXN0cnVjdCBzaW9jX3ZpZl9yZXEgdnI7CiAJc3RydWN0IHZpZl9kZXZpY2UgKnZpZjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUVklGQ05UOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnZyLCBhcmcsIHNpemVvZih2cikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2ci52aWZpID49IG1heHZpZikKKwkJaWYgKHZyLnZpZmkgPj0gbmV0LT5pcHY0Lm1heHZpZikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkJdmlmPSZ2aWZfdGFibGVbdnIudmlmaV07Ci0JCWlmIChWSUZfRVhJU1RTKHZyLnZpZmkpKQl7CisJCXZpZiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZyLnZpZmldOworCQlpZiAoVklGX0VYSVNUUyhuZXQsIHZyLnZpZmkpKSB7CiAJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKIAkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKIAkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CkBAIC0xMTEyLDcgKzExMzIsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JCWMgPSBpcG1yX2NhY2hlX2ZpbmQoc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CisJCWMgPSBpcG1yX2NhY2hlX2ZpbmQobmV0LCBzci5zcmMuc19hZGRyLCBzci5ncnAuc19hZGRyKTsKIAkJaWYgKGMpIHsKIAkJCXNyLnBrdGNudCA9IGMtPm1mY191bi5yZXMucGt0OwogCQkJc3IuYnl0ZWNudCA9IGMtPm1mY191bi5yZXMuYnl0ZXM7CkBAIC0xMTM0LDE4ICsxMTU0LDE5IEBACiBzdGF0aWMgaW50IGlwbXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCB2aWZfZGV2aWNlICp2OwogCWludCBjdDsKIAotCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCAhPSBORVRERVZfVU5SRUdJU1RFUikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwotCXY9JnZpZl90YWJsZVswXTsKLQlmb3IgKGN0PTA7IGN0PG1heHZpZjsgY3QrKyx2KyspIHsKKwl2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbMF07CisJZm9yIChjdCA9IDA7IGN0IDwgbmV0LT5pcHY0Lm1heHZpZjsgY3QrKywgdisrKSB7CiAJCWlmICh2LT5kZXYgPT0gZGV2KQotCQkJdmlmX2RlbGV0ZShjdCwgMSk7CisJCQl2aWZfZGVsZXRlKG5ldCwgY3QsIDEpOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CkBAIC0xMjA1LDggKzEyMjYsOSBAQAogCiBzdGF0aWMgdm9pZCBpcG1yX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mY19jYWNoZSAqYywgaW50IHZpZmkpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjKTsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCXN0cnVjdCB2aWZfZGV2aWNlICp2aWYgPSAmdmlmX3RhYmxlW3ZpZmldOworCXN0cnVjdCB2aWZfZGV2aWNlICp2aWYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZpXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCWludCAgICBlbmNhcCA9IDA7CkBAIC0xMjIwLDkgKzEyNDIsOCBAQAogCQl2aWYtPmJ5dGVzX291dCArPSBza2ItPmxlbjsKIAkJdmlmLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQl2aWYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOworCQlpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgdmlmaSwgSUdNUE1TR19XSE9MRVBLVCk7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogI2VuZGlmCiAKQEAgLTEyMzMsNyArMTI1NCw3IEBACiAJCQkJCQkuc2FkZHIgPSB2aWYtPmxvY2FsLAogCQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQSVAgfTsKLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpCisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKQogCQkJZ290byBvdXRfZnJlZTsKIAkJZW5jYXAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAl9IGVsc2UgewpAQCAtMTI0Miw3ICsxMjYzLDcgQEAKIAkJCQkJICAgICAgeyAuZGFkZHIgPSBpcGgtPmRhZGRyLAogCQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQSVAgfTsKLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpCisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKQogCQkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTEzMDYsOSArMTMyNywxMCBAQAogCiBzdGF0aWMgaW50IGlwbXJfZmluZF92aWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJaW50IGN0OwotCWZvciAoY3Q9bWF4dmlmLTE7IGN0Pj0wOyBjdC0tKSB7Ci0JCWlmICh2aWZfdGFibGVbY3RdLmRldiA9PSBkZXYpCisJZm9yIChjdCA9IG5ldC0+aXB2NC5tYXh2aWYtMTsgY3QgPj0gMDsgY3QtLSkgeworCQlpZiAobmV0LT5pcHY0LnZpZl90YWJsZVtjdF0uZGV2ID09IGRldikKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gY3Q7CkBAIC0xMzIwLDYgKzEzNDIsNyBAQAogewogCWludCBwc2VuZCA9IC0xOwogCWludCB2aWYsIGN0OworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoY2FjaGUpOwogCiAJdmlmID0gY2FjaGUtPm1mY19wYXJlbnQ7CiAJY2FjaGUtPm1mY191bi5yZXMucGt0Kys7CkBAIC0xMzI4LDcgKzEzNTEsNyBAQAogCS8qCiAJICogV3JvbmcgaW50ZXJmYWNlOiBkcm9wIHBhY2tldCBhbmQgKG1heWJlKSBzZW5kIFBJTSBhc3NlcnQuCiAJICovCi0JaWYgKHZpZl90YWJsZVt2aWZdLmRldiAhPSBza2ItPmRldikgeworCWlmIChuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZl0uZGV2ICE9IHNrYi0+ZGV2KSB7CiAJCWludCB0cnVlX3ZpZmk7CiAKIAkJaWYgKHNrYi0+cnRhYmxlLT5mbC5paWYgPT0gMCkgewpAQCAtMTM0OSwyMyArMTM3MiwyNCBAQAogCQljYWNoZS0+bWZjX3VuLnJlcy53cm9uZ19pZisrOwogCQl0cnVlX3ZpZmkgPSBpcG1yX2ZpbmRfdmlmKHNrYi0+ZGV2KTsKIAotCQlpZiAodHJ1ZV92aWZpID49IDAgJiYgbXJvdXRlX2RvX2Fzc2VydCAmJgorCQlpZiAodHJ1ZV92aWZpID49IDAgJiYgbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQgJiYKIAkJICAgIC8qIHBpbXNtIHVzZXMgYXNzZXJ0cywgd2hlbiBzd2l0Y2hpbmcgZnJvbSBSUFQgdG8gU1BULAogCQkgICAgICAgc28gdGhhdCB3ZSBjYW5ub3QgY2hlY2sgdGhhdCBwYWNrZXQgYXJyaXZlZCBvbiBhbiBvaWYuCiAJCSAgICAgICBJdCBpcyBiYWQsIGJ1dCBvdGhlcndpc2Ugd2Ugd291bGQgbmVlZCB0byBtb3ZlIHByZXR0eQogCQkgICAgICAgbGFyZ2UgY2h1bmsgb2YgcGltZCB0byBrZXJuZWwuIE91Z2guLi4gLS1BTksKIAkJICAgICAqLwotCQkgICAgKG1yb3V0ZV9kb19waW0gfHwgY2FjaGUtPm1mY191bi5yZXMudHRsc1t0cnVlX3ZpZmldIDwgMjU1KSAmJgorCQkgICAgKG5ldC0+aXB2NC5tcm91dGVfZG9fcGltIHx8CisJCSAgICAgY2FjaGUtPm1mY191bi5yZXMudHRsc1t0cnVlX3ZpZmldIDwgMjU1KSAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLAogCQkJICAgICAgIGNhY2hlLT5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ICsgTUZDX0FTU0VSVF9USFJFU0gpKSB7CiAJCQljYWNoZS0+bWZjX3VuLnJlcy5sYXN0X2Fzc2VydCA9IGppZmZpZXM7Ci0JCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHRydWVfdmlmaSwgSUdNUE1TR19XUk9OR1ZJRik7CisJCQlpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTsKIAkJfQogCQlnb3RvIGRvbnRfZm9yd2FyZDsKIAl9CiAKLQl2aWZfdGFibGVbdmlmXS5wa3RfaW4rKzsKLQl2aWZfdGFibGVbdmlmXS5ieXRlc19pbiArPSBza2ItPmxlbjsKKwluZXQtPmlwdjQudmlmX3RhYmxlW3ZpZl0ucGt0X2luKys7CisJbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZdLmJ5dGVzX2luICs9IHNrYi0+bGVuOwogCiAJLyoKIAkgKglGb3J3YXJkIHRoZSBmcmFtZQpAQCAtMTQwNSw2ICsxNDI5LDcgQEAKIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCWludCBsb2NhbCA9IHNrYi0+cnRhYmxlLT5ydF9mbGFncyZSVENGX0xPQ0FMOwogCiAJLyogUGFja2V0IGlzIGxvb3BlZCBiYWNrIGFmdGVyIGZvcndhcmQsIGl0IHNob3VsZCBub3QgYmUKQEAgLTE0MjUsOSArMTQ1MCw5IEBACiAJCQkgICAgICAgdGhhdCB3ZSBjYW4gZm9yd2FyZCBOTyBJR01QIG1lc3NhZ2VzLgogCQkJICAgICAqLwogCQkJICAgIHJlYWRfbG9jaygmbXJ0X2xvY2spOwotCQkJICAgIGlmIChtcm91dGVfc29ja2V0KSB7CisJCQkgICAgaWYgKG5ldC0+aXB2NC5tcm91dGVfc2spIHsKIAkJCQkgICAgbmZfcmVzZXQoc2tiKTsKLQkJCQkgICAgcmF3X3Jjdihtcm91dGVfc29ja2V0LCBza2IpOworCQkJCSAgICByYXdfcmN2KG5ldC0+aXB2NC5tcm91dGVfc2ssIHNrYik7CiAJCQkJICAgIHJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJCQkJICAgIHJldHVybiAwOwogCQkJICAgIH0KQEAgLTE0MzYsNyArMTQ2MSw3IEBACiAJfQogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQoaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIpOworCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKG5ldCwgaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIpOwogCiAJLyoKIAkgKglObyB1c2FibGUgY2FjaGUgZW50cnkKQEAgLTE0NTYsNyArMTQ4MSw3IEBACiAKIAkJdmlmID0gaXBtcl9maW5kX3ZpZihza2ItPmRldik7CiAJCWlmICh2aWYgPj0gMCkgewotCQkJaW50IGVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZCh2aWYsIHNrYik7CisJCQlpbnQgZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKG5ldCwgdmlmLCBza2IpOwogCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAogCQkJcmV0dXJuIGVycjsKQEAgLTE0ODcsNiArMTUxMiw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlZ19kZXYgPSBOVUxMOwogCXN0cnVjdCBpcGhkciAqZW5jYXA7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAllbmNhcCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIHBpbWxlbik7CiAJLyoKQEAgLTE1MDEsOCArMTUyNyw4IEBACiAJCXJldHVybiAxOwogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JaWYgKHJlZ192aWZfbnVtID49IDApCi0JCXJlZ19kZXYgPSB2aWZfdGFibGVbcmVnX3ZpZl9udW1dLmRldjsKKwlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA+PSAwKQorCQlyZWdfZGV2ID0gbmV0LT5pcHY0LnZpZl90YWJsZVtuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtXS5kZXY7CiAJaWYgKHJlZ19kZXYpCiAJCWRldl9ob2xkKHJlZ19kZXYpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CkBAIC0xNTM3LDEzICsxNTYzLDE0IEBACiBpbnQgcGltX3Jjdl92MShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikKIHsKIAlzdHJ1Y3QgaWdtcGhkciAqcGltOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpwaW0pICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQogCQlnb3RvIGRyb3A7CiAKIAlwaW0gPSBpZ21wX2hkcihza2IpOwogCi0JaWYgKCFtcm91dGVfZG9fcGltIHx8CisJaWYgKCFuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSB8fAogCSAgICBwaW0tPmdyb3VwICE9IFBJTV9WMV9WRVJTSU9OIHx8IHBpbS0+Y29kZSAhPSBQSU1fVjFfUkVHSVNURVIpCiAJCWdvdG8gZHJvcDsKIApAQCAtMTU4Myw3ICsxNjEwLDggQEAKIHsKIAlpbnQgY3Q7CiAJc3RydWN0IHJ0bmV4dGhvcCAqbmhwOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2aWZfdGFibGVbYy0+bWZjX3BhcmVudF0uZGV2OworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoYyk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldC0+aXB2NC52aWZfdGFibGVbYy0+bWZjX3BhcmVudF0uZGV2OwogCXU4ICpiID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOwogCXN0cnVjdCBydGF0dHIgKm1wX2hlYWQ7CiAKQEAgLTE1OTksNyArMTYyNyw3IEBACiAJCQluaHAgPSAoc3RydWN0IHJ0bmV4dGhvcCAqKXNrYl9wdXQoc2tiLCBSVEFfQUxJR04oc2l6ZW9mKCpuaHApKSk7CiAJCQluaHAtPnJ0bmhfZmxhZ3MgPSAwOwogCQkJbmhwLT5ydG5oX2hvcHMgPSBjLT5tZmNfdW4ucmVzLnR0bHNbY3RdOwotCQkJbmhwLT5ydG5oX2lmaW5kZXggPSB2aWZfdGFibGVbY3RdLmRldi0+aWZpbmRleDsKKwkJCW5ocC0+cnRuaF9pZmluZGV4ID0gbmV0LT5pcHY0LnZpZl90YWJsZVtjdF0uZGV2LT5pZmluZGV4OwogCQkJbmhwLT5ydG5oX2xlbiA9IHNpemVvZigqbmhwKTsKIAkJfQogCX0KQEAgLTE2MTMsMTQgKzE2NDEsMTUgQEAKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCi1pbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCitpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LAorCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CiAKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChydC0+cnRfc3JjLCBydC0+cnRfZHN0KTsKKwljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChuZXQsIHJ0LT5ydF9zcmMsIHJ0LT5ydF9kc3QpOwogCiAJaWYgKGNhY2hlID09IE5VTEwpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CkBAIC0xNjUxLDcgKzE2ODAsNyBAQAogCQlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKIAkJaXBoLT5kYWRkciA9IHJ0LT5ydF9kc3Q7CiAJCWlwaC0+dmVyc2lvbiA9IDA7Ci0JCWVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZCh2aWYsIHNrYjIpOworCQllcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobmV0LCB2aWYsIHNrYjIpOwogCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTE2NjgsMTcgKzE2OTcsMTkgQEAKICAqCVRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nIC9wcm9jL2lwX21yX2NhY2hlIC9wcm9jL2lwX21yX3ZpZgogICovCiBzdHJ1Y3QgaXBtcl92aWZfaXRlciB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwogCWludCBjdDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlmX2RldmljZSAqaXBtcl92aWZfc2VxX2lkeChzdHJ1Y3QgaXBtcl92aWZfaXRlciAqaXRlciwKK3N0YXRpYyBzdHJ1Y3QgdmlmX2RldmljZSAqaXBtcl92aWZfc2VxX2lkeChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgIHN0cnVjdCBpcG1yX3ZpZl9pdGVyICppdGVyLAogCQkJCQkgICBsb2ZmX3QgcG9zKQogewotCWZvciAoaXRlci0+Y3QgPSAwOyBpdGVyLT5jdCA8IG1heHZpZjsgKytpdGVyLT5jdCkgewotCQlpZiAoIVZJRl9FWElTVFMoaXRlci0+Y3QpKQorCWZvciAoaXRlci0+Y3QgPSAwOyBpdGVyLT5jdCA8IG5ldC0+aXB2NC5tYXh2aWY7ICsraXRlci0+Y3QpIHsKKwkJaWYgKCFWSUZfRVhJU1RTKG5ldCwgaXRlci0+Y3QpKQogCQkJY29udGludWU7CiAJCWlmIChwb3MtLSA9PSAwKQotCQkJcmV0dXJuICZ2aWZfdGFibGVbaXRlci0+Y3RdOworCQkJcmV0dXJuICZuZXQtPmlwdjQudmlmX3RhYmxlW2l0ZXItPmN0XTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNjg2LDIzICsxNzE3LDI2IEBACiBzdGF0aWMgdm9pZCAqaXBtcl92aWZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKG1ydF9sb2NrKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JcmV0dXJuICpwb3MgPyBpcG1yX3ZpZl9zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCisJcmV0dXJuICpwb3MgPyBpcG1yX3ZpZl9zZXFfaWR4KG5ldCwgc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKIAkJOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKIHN0YXRpYyB2b2lkICppcG1yX3ZpZl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAkrKypwb3M7CiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gaXBtcl92aWZfc2VxX2lkeChpdGVyLCAwKTsKKwkJcmV0dXJuIGlwbXJfdmlmX3NlcV9pZHgobmV0LCBpdGVyLCAwKTsKIAotCXdoaWxlICgrK2l0ZXItPmN0IDwgbWF4dmlmKSB7Ci0JCWlmICghVklGX0VYSVNUUyhpdGVyLT5jdCkpCisJd2hpbGUgKCsraXRlci0+Y3QgPCBuZXQtPmlwdjQubWF4dmlmKSB7CisJCWlmICghVklGX0VYSVNUUyhuZXQsIGl0ZXItPmN0KSkKIAkJCWNvbnRpbnVlOwotCQlyZXR1cm4gJnZpZl90YWJsZVtpdGVyLT5jdF07CisJCXJldHVybiAmbmV0LT5pcHY0LnZpZl90YWJsZVtpdGVyLT5jdF07CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMTcxNSw2ICsxNzQ5LDggQEAKIAogc3RhdGljIGludCBpcG1yX3ZpZl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKwogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzZXEsCiAJCQkgIkludGVyZmFjZSAgICAgIEJ5dGVzSW4gIFBrdHNJbiAgQnl0ZXNPdXQgUGt0c091dCBGbGFncyBMb2NhbCAgICBSZW1vdGVcbiIpOwpAQCAtMTcyNCw3ICsxNzYwLDcgQEAKIAogCQlzZXFfcHJpbnRmKHNlcSwKIAkJCSAgICIlMlpkICUtMTBzICU4bGQgJTdsZCAgJThsZCAlN2xkICUwNVggJTA4WCAlMDhYXG4iLAotCQkJICAgdmlmIC0gdmlmX3RhYmxlLAorCQkJICAgdmlmIC0gbmV0LT5pcHY0LnZpZl90YWJsZSwKIAkJCSAgIG5hbWUsIHZpZi0+Ynl0ZXNfaW4sIHZpZi0+cGt0X2luLAogCQkJICAgdmlmLT5ieXRlc19vdXQsIHZpZi0+cGt0X291dCwKIAkJCSAgIHZpZi0+ZmxhZ3MsIHZpZi0+bG9jYWwsIHZpZi0+cmVtb3RlKTsKQEAgLTE3NDEsOCArMTc3Nyw4IEBACiAKIHN0YXRpYyBpbnQgaXBtcl92aWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmaXBtcl92aWZfc2VxX29wcywKLQkJCXNpemVvZihzdHJ1Y3QgaXBtcl92aWZfaXRlcikpOworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZpcG1yX3ZpZl9zZXFfb3BzLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBtcl92aWZfaXRlcikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG1yX3ZpZl9mb3BzID0gewpAQCAtMTc1MCwyMyArMTc4NiwyNiBAQAogCS5vcGVuICAgID0gaXBtcl92aWZfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKIHN0cnVjdCBpcG1yX21mY19pdGVyIHsKKwlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7CiAJc3RydWN0IG1mY19jYWNoZSAqKmNhY2hlOwogCWludCBjdDsKIH07CiAKIAotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfbWZjX3NlcV9pZHgoc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0LCBsb2ZmX3QgcG9zKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfbWZjX3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgIHN0cnVjdCBpcG1yX21mY19pdGVyICppdCwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICptZmM7CiAKLQlpdC0+Y2FjaGUgPSBtZmNfY2FjaGVfYXJyYXk7CisJaXQtPmNhY2hlID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheTsKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKIAlmb3IgKGl0LT5jdCA9IDA7IGl0LT5jdCA8IE1GQ19MSU5FUzsgaXQtPmN0KyspCi0JCWZvciAobWZjID0gbWZjX2NhY2hlX2FycmF5W2l0LT5jdF07IG1mYzsgbWZjID0gbWZjLT5uZXh0KQorCQlmb3IgKG1mYyA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsKKwkJICAgICBtZmM7IG1mYyA9IG1mYy0+bmV4dCkKIAkJCWlmIChwb3MtLSA9PSAwKQogCQkJCXJldHVybiBtZmM7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKQEAgLTE3NzQsNyArMTgxMyw4IEBACiAJaXQtPmNhY2hlID0gJm1mY191bnJlc19xdWV1ZTsKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAlmb3IgKG1mYyA9IG1mY191bnJlc19xdWV1ZTsgbWZjOyBtZmMgPSBtZmMtPm5leHQpCi0JCWlmIChwb3MtLSA9PSAwKQorCQlpZiAobmV0X2VxKG1mY19uZXQobWZjKSwgbmV0KSAmJgorCQkgICAgcG9zLS0gPT0gMCkKIAkJCXJldHVybiBtZmM7CiAJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIApAQCAtMTc4Niw5ICsxODI2LDExIEBACiBzdGF0aWMgdm9pZCAqaXBtcl9tZmNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKIAlpdC0+Y2FjaGUgPSBOVUxMOwogCWl0LT5jdCA9IDA7Ci0JcmV0dXJuICpwb3MgPyBpcG1yX21mY19zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCisJcmV0dXJuICpwb3MgPyBpcG1yX21mY19zZXFfaWR4KG5ldCwgc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKIAkJOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTE3OTYsMTEgKzE4MzgsMTIgQEAKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICptZmMgPSB2OwogCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCSsrKnBvczsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGlwbXJfbWZjX3NlcV9pZHgoc2VxLT5wcml2YXRlLCAwKTsKKwkJcmV0dXJuIGlwbXJfbWZjX3NlcV9pZHgobmV0LCBzZXEtPnByaXZhdGUsIDApOwogCiAJaWYgKG1mYy0+bmV4dCkKIAkJcmV0dXJuIG1mYy0+bmV4dDsKQEAgLTE4MDgsMTAgKzE4NTEsMTAgQEAKIAlpZiAoaXQtPmNhY2hlID09ICZtZmNfdW5yZXNfcXVldWUpCiAJCWdvdG8gZW5kX29mX2xpc3Q7CiAKLQlCVUdfT04oaXQtPmNhY2hlICE9IG1mY19jYWNoZV9hcnJheSk7CisJQlVHX09OKGl0LT5jYWNoZSAhPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KTsKIAogCXdoaWxlICgrK2l0LT5jdCA8IE1GQ19MSU5FUykgewotCQltZmMgPSBtZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsKKwkJbWZjID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOwogCQlpZiAobWZjKQogCQkJcmV0dXJuIG1mYzsKIAl9CkBAIC0xODIzLDYgKzE4NjYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJbWZjID0gbWZjX3VucmVzX3F1ZXVlOworCXdoaWxlIChtZmMgJiYgIW5ldF9lcShtZmNfbmV0KG1mYyksIG5ldCkpCisJCW1mYyA9IG1mYy0+bmV4dDsKIAlpZiAobWZjKQogCQlyZXR1cm4gbWZjOwogCkBAIC0xODM2LDE2ICsxODgxLDE4IEBACiBzdGF0aWMgdm9pZCBpcG1yX21mY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlpZiAoaXQtPmNhY2hlID09ICZtZmNfdW5yZXNfcXVldWUpCiAJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7Ci0JZWxzZSBpZiAoaXQtPmNhY2hlID09IG1mY19jYWNoZV9hcnJheSkKKwllbHNlIGlmIChpdC0+Y2FjaGUgPT0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSkKIAkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIH0KIAogc3RhdGljIGludCBpcG1yX21mY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlpbnQgbjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzZXEsCkBAIC0xODY2LDkgKzE5MTMsOSBAQAogCQkJCSAgIG1mYy0+bWZjX3VuLnJlcy53cm9uZ19pZik7CiAJCQlmb3IgKG4gPSBtZmMtPm1mY191bi5yZXMubWludmlmOwogCQkJICAgICBuIDwgbWZjLT5tZmNfdW4ucmVzLm1heHZpZjsgbisrICkgewotCQkJCWlmIChWSUZfRVhJU1RTKG4pCi0JCQkJICAgJiYgbWZjLT5tZmNfdW4ucmVzLnR0bHNbbl0gPCAyNTUpCi0JCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJaWYgKFZJRl9FWElTVFMobmV0LCBuKSAmJgorCQkJCSAgICBtZmMtPm1mY191bi5yZXMudHRsc1tuXSA8IDI1NSkKKwkJCQkJc2VxX3ByaW50ZihzZXEsCiAJCQkJCSAgICIgJTJkOiUtM2QiLAogCQkJCQkgICBuLCBtZmMtPm1mY191bi5yZXMudHRsc1tuXSk7CiAJCQl9CkBAIC0xODkyLDggKzE5MzksOCBAQAogCiBzdGF0aWMgaW50IGlwbXJfbWZjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmlwbXJfbWZjX3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGlwbXJfbWZjX2l0ZXIpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaXBtcl9tZmNfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGlwbXJfbWZjX2l0ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtcl9tZmNfZm9wcyA9IHsKQEAgLTE5MDEsNyArMTk0OCw3IEBACiAJLm9wZW4gICAgPSBpcG1yX21mY19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKICNlbmRpZgogCkBAIC0xOTE1LDYgKzE5NjIsNjUgQEAKIC8qCiAgKglTZXR1cCBmb3IgSVAgbXVsdGljYXN0IHJvdXRpbmcKICAqLworc3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCWludCBlcnIgPSAwOworCisJbmV0LT5pcHY0LnZpZl90YWJsZSA9IGtjYWxsb2MoTUFYVklGUywgc2l6ZW9mKHN0cnVjdCB2aWZfZGV2aWNlKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2NC52aWZfdGFibGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEZvcndhcmRpbmcgY2FjaGUgKi8KKwluZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5ID0ga2NhbGxvYyhNRkNfTElORVMsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1mY19jYWNoZSAqKSwKKwkJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbWZjX2NhY2hlOworCX0KKworI2lmZGVmIENPTkZJR19JUF9QSU1TTQorCW5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPSAtMTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwllcnIgPSAtRU5PTUVNOworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaXBfbXJfdmlmIiwgMCwgJmlwbXJfdmlmX2ZvcHMpKQorCQlnb3RvIHByb2NfdmlmX2ZhaWw7CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcF9tcl9jYWNoZSIsIDAsICZpcG1yX21mY19mb3BzKSkKKwkJZ290byBwcm9jX2NhY2hlX2ZhaWw7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitwcm9jX2NhY2hlX2ZhaWw6CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX21yX3ZpZiIpOworcHJvY192aWZfZmFpbDoKKwlrZnJlZShuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KTsKKyNlbmRpZgorZmFpbF9tZmNfY2FjaGU6CisJa2ZyZWUobmV0LT5pcHY0LnZpZl90YWJsZSk7CitmYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXBtcl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfbXJfY2FjaGUiKTsKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfbXJfdmlmIik7CisjZW5kaWYKKwlrZnJlZShuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KTsKKwlrZnJlZShuZXQtPmlwdjQudmlmX3RhYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcG1yX25ldF9vcHMgPSB7CisJLmluaXQgPSBpcG1yX25ldF9pbml0LAorCS5leGl0ID0gaXBtcl9uZXRfZXhpdCwKK307CiAKIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKQogewpAQCAtMTkyNywyNiArMjAzMywyMCBAQAogCWlmICghbXJ0X2NhY2hlcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcG1yX25ldF9vcHMpOworCWlmIChlcnIpCisJCWdvdG8gcmVnX3Blcm5ldF9mYWlsOworCiAJc2V0dXBfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyLCBpcG1yX2V4cGlyZV9wcm9jZXNzLCAwKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwX21yX25vdGlmaWVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlZ19ub3RpZl9mYWlsOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JZXJyID0gLUVOT01FTTsKLQlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwX21yX3ZpZiIsIDAsICZpcG1yX3ZpZl9mb3BzKSkKLQkJZ290byBwcm9jX3ZpZl9mYWlsOwotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAiaXBfbXJfY2FjaGUiLCAwLCAmaXBtcl9tZmNfZm9wcykpCi0JCWdvdG8gcHJvY19jYWNoZV9mYWlsOwotI2VuZGlmCiAJcmV0dXJuIDA7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXByb2NfY2FjaGVfZmFpbDoKLQlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAiaXBfbXJfdmlmIik7Ci1wcm9jX3ZpZl9mYWlsOgotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9tcl9ub3RpZmllcik7Ci0jZW5kaWYKKwogcmVnX25vdGlmX2ZhaWw6CiAJZGVsX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lcik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcG1yX25ldF9vcHMpOworcmVnX3Blcm5ldF9mYWlsOgogCWttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzODE2ZTFkLi4xODMzYmRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMzEsNyArMzEsNyBAQAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgL3Byb2MgYW5kIHN5c2N0bCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZAotCSAgbGF5ZXIgMyBkZXBlbmRhbnQgY29ubmVjdGlvbiB0cmFja2luZy4gVGhpcyBpcyBuZWVkZWQgdG8ga2VlcAorCSAgbGF5ZXIgMyBkZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy4gVGhpcyBpcyBuZWVkZWQgdG8ga2VlcAogCSAgb2xkIHByb2dyYW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBhZGFwdGVkIHRvIHRoZSBuZXcgbmFtZXMgd29ya2luZy4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KQEAgLTk1LDExICs5NSwxMSBAQAogY29uZmlnIElQX05GX01BVENIX1RUTAogCXRyaXN0YXRlICcidHRsIiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBhZGRzIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgb3B0aW9uLCB3aGljaCBlbmFibGVkIHRoZSB1c2VyCi0JICB0byBtYXRjaCBwYWNrZXRzIGJ5IHRoZWlyIFRUTCB2YWx1ZS4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwuCiAKICMgYGZpbHRlcicsIGdlbmVyaWMgYW5kIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9GSUxURVIKQEAgLTMyMywxOSArMzIzLDEzIEBACiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIElQX05GX1RBUkdFVF9UVEwKLQl0cmlzdGF0ZSAgJ1RUTCB0YXJnZXQgc3VwcG9ydCcKLQlkZXBlbmRzIG9uIElQX05GX01BTkdMRQorCXRyaXN0YXRlICciVFRMIiB0YXJnZXQgc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgVFRMJyB0YXJnZXQsIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gbW9kaWZ5Ci0JICB0aGUgVFRMIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIuCi0KLQkgIFdoaWxlIGl0IGlzIHNhZmUgdG8gZGVjcmVtZW50L2xvd2VyIHRoZSBUVEwsIHRoaXMgdGFyZ2V0IGFsc28gZW5hYmxlcwotCSAgZnVuY3Rpb25hbGl0eSB0byBpbmNyZW1lbnQgYW5kIHNldCB0aGUgVFRMIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIgdG8KLQkgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMgc2luY2UgeW91IGNhbiBlYXNpbHkKLQkgIGNyZWF0ZSBpbW1vcnRhbCBwYWNrZXRzIHRoYXQgbG9vcCBmb3JldmVyIG9uIHRoZSBuZXR3b3JrLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwlzZWxlY3QgTkVURklMVEVSX1hUX1RBUkdFVF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMLgogCiAjIHJhdyArIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9SQVcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA1ZjliNjUwLi40ODExMTU5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC01MSw3ICs1MSw2IEBACiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUpICs9IGlwdF9hZGRydHlwZS5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUgpICs9IGlwdF9haC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfRUNOKSArPSBpcHRfZWNuLm8KLW9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9UVEwpICs9IGlwdF90dGwubwogCiAjIHRhcmdldHMKIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQKSArPSBpcHRfQ0xVU1RFUklQLm8KQEAgLTYxLDcgKzYwLDYgQEAKIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQKSArPSBpcHRfTkVUTUFQLm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1QpICs9IGlwdF9SRURJUkVDVC5vCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCkgKz0gaXB0X1JFSkVDVC5vCi1vYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCkgKz0gaXB0X1RUTC5vCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cpICs9IGlwdF9VTE9HLm8KIAogIyBnZW5lcmljIEFSUCB0YWJsZXMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDdlYTg4YjYuLjM1YzVmNmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtNzMsNiArNzMsMjggQEAKIAlyZXR1cm4gKHJldCAhPSAwKTsKIH0KIAorLyoKKyAqIFVuZm9ydHVuYXRseSwgX2IgYW5kIF9tYXNrIGFyZSBub3QgYWxpZ25lZCB0byBhbiBpbnQgKG9yIGxvbmcgaW50KQorICogU29tZSBhcmNoZXMgZG9udCBjYXJlLCB1bnJvbGxpbmcgdGhlIGxvb3AgaXMgYSB3aW4gb24gdGhlbS4KKyAqIEZvciBvdGhlciBhcmNoZXMsIHdlIG9ubHkgaGF2ZSBhIDE2Yml0IGFsaWduZW1lbnQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKl9hLCBjb25zdCBjaGFyICpfYiwgY29uc3QgY2hhciAqX21hc2spCit7CisjaWZkZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKKwl1bnNpZ25lZCBsb25nIHJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoX2EsIF9iLCBfbWFzayk7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwljb25zdCB1MTYgKmEgPSAoY29uc3QgdTE2ICopX2E7CisJY29uc3QgdTE2ICpiID0gKGNvbnN0IHUxNiAqKV9iOworCWNvbnN0IHUxNiAqbWFzayA9IChjb25zdCB1MTYgKilfbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJRk5BTVNJWi9zaXplb2YodTE2KTsgaSsrKQorCQlyZXQgfD0gKGFbaV0gXiBiW2ldKSAmIG1hc2tbaV07CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCiAvKiBSZXR1cm5zIHdoZXRoZXIgcGFja2V0IG1hdGNoZXMgcnVsZSBvciBub3QuICovCiBzdGF0aWMgaW5saW5lIGludCBhcnBfcGFja2V0X21hdGNoKGNvbnN0IHN0cnVjdCBhcnBoZHIgKmFycGhkciwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtODMsNyArMTA1LDcgQEAKIAljb25zdCBjaGFyICphcnBwdHIgPSAoY2hhciAqKShhcnBoZHIgKyAxKTsKIAljb25zdCBjaGFyICpzcmNfZGV2YWRkciwgKnRndF9kZXZhZGRyOwogCV9fYmUzMiBzcmNfaXBhZGRyLCB0Z3RfaXBhZGRyOwotCWludCBpLCByZXQ7CisJbG9uZyByZXQ7CiAKICNkZWZpbmUgRldJTlYoYm9vbCwgaW52ZmxnKSAoKGJvb2wpIF4gISEoYXJwaW5mby0+aW52ZmxhZ3MgJiAoaW52ZmxnKSkpCiAKQEAgLTE1NiwxMCArMTc4LDcgQEAKIAl9CiAKIAkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlcy4gICovCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laOyBpKyspIHsKLQkJcmV0IHw9IChpbmRldltpXSBeIGFycGluZm8tPmluaWZhY2VbaV0pCi0JCQkmIGFycGluZm8tPmluaWZhY2VfbWFza1tpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGFycGluZm8tPmluaWZhY2UsIGFycGluZm8tPmluaWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIEFSUFRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xNjgsMTAgKzE4Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWjsgaSsrKSB7Ci0JCXJldCB8PSAob3V0ZGV2W2ldIF4gYXJwaW5mby0+b3V0aWZhY2VbaV0pCi0JCQkmIGFycGluZm8tPm91dGlmYWNlX21hc2tbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKG91dGRldiwgYXJwaW5mby0+b3V0aWZhY2UsIGFycGluZm8tPm91dGlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBBUlBUX0lOVl9WSUFfT1VUKSkgewogCQlkcHJpbnRmKCJWSUEgb3V0IG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0yMjEsNyArMjM3LDcgQEAKIAkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewotCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXTsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwogCWNvbnN0IHN0cnVjdCBhcnBoZHIgKmFycDsKIAlib29sIGhvdGRyb3AgPSBmYWxzZTsKQEAgLTIzNyw5ICsyNTMsMTAgQEAKIAlpbmRldiA9IGluID8gaW4tPm5hbWUgOiBudWxsZGV2bmFtZTsKIAlvdXRkZXYgPSBvdXQgPyBvdXQtPm5hbWUgOiBudWxsZGV2bmFtZTsKIAotCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKilwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAJYmFjayA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwogCkBAIC0zMTEsNyArMzI4LDggQEAKIAkJCWUgPSAodm9pZCAqKWUgKyBlLT5uZXh0X29mZnNldDsKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoaG90ZHJvcCkKIAkJcmV0dXJuIE5GX0RST1A7CkBAIC0zNzQsNyArMzkyLDkgQEAKIAkJCSAgICAmJiB1bmNvbmRpdGlvbmFsKCZlLT5hcnApKSB8fCB2aXNpdGVkKSB7CiAJCQkJdW5zaWduZWQgaW50IG9sZHBvcywgc2l6ZTsKIAotCQkJCWlmICh0LT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgeworCQkJCWlmICgoc3RyY21wKHQtPnRhcmdldC51LnVzZXIubmFtZSwKKwkJCQkJICAgIEFSUFRfU1RBTkRBUkRfVEFSR0VUKSA9PSAwKSAmJgorCQkJCSAgICB0LT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgewogCQkJCQlkdXByaW50ZigibWFya19zb3VyY2VfY2hhaW5zOiBiYWQgIgogCQkJCQkJIm5lZ2F0aXZlIHZlcmRpY3QgKCVpKVxuIiwKIAkJCQkJCQkJdC0+dmVyZGljdCk7CkBAIC03MTQsMTEgKzczNCw2NSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCisKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlBUlBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICB0LT5zaXplLAorCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKKwkJCSAgY291bnRlcnMsCisJCQkgICZpKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3plcm9fZW50cnlfY291bnRlcihzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwgdm9pZCAqYXJnKQoreworCWUtPmNvdW50ZXJzLmJjbnQgPSAwOworCWUtPmNvdW50ZXJzLnBjbnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2xvbmVfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwltZW1jcHkobmV3aW5mbywgaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpKTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIGxvY19jcHVfZW50cnksIGluZm8tPnNpemUpOworCQlBUlBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllc1tjcHVdLCBuZXdpbmZvLT5zaXplLAorCQkJCSAgemVyb19lbnRyeV9jb3VudGVyLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0JY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgKiAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtNzI4LDE0ICs4MDIsMzAgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOworCisJY2xvbmVfY291bnRlcnMoaW5mbywgcHJpdmF0ZSk7CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CisJeHRfdGFibGVfZW50cnlfc3dhcF9yY3UocHJpdmF0ZSwgaW5mbyk7CisJc3luY2hyb25pemVfbmV0KCk7CS8qIFdhaXQgdW50aWwgc21va2UgaGFzIGNsZWFyZWQgKi8KKworCWdldF9jb3VudGVycyhpbmZvLCBjb3VudGVycyk7CisJcHV0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKKworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKIAogCXJldHVybiBjb3VudGVyczsKKworIGZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworIG5vbWVtOgorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogfQogCiBzdGF0aWMgaW50IGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLApAQCAtMTA3NSwyMCArMTE2NSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwKIAkJCSAgIGludCBjb21wYXQpCiB7CkBAIC0xMTQ4LDEzICsxMjI0LDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTExNjMsOCArMTI0MCwxMCBAQAogCQkJICAgYWRkX2NvdW50ZXJfdG9fZW50cnksCiAJCQkgICBwYWRkYywKIAkJCSAgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKKwogCXh0X3RhYmxlX3VubG9jayh0KTsKIAltb2R1bGVfcHV0KHQtPm1lKTsKICBmcmVlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCmluZGV4IGUwOTExODcuLjZlY2ZkYWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKQEAgLTQ4LDggKzQ4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9maWx0ZXIubG9jayksCi0JLnByaXZhdGUJPSBOVUxMLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gTkZQUk9UT19BUlAsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCA0MzJjZTlkLi41ZjIyYzkxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC02NDAsNiArNjQxLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NCBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwogTU9EVUxFX0FVVEhPUigiSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfRklSRVdBTEwpOwogCiBtb2R1bGVfaW5pdChpcF9xdWV1ZV9pbml0KTsKIG1vZHVsZV9leGl0KGlwX3F1ZXVlX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGVmOGI2Y2EuLjgyZWU3YzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAkJY29uc3Qgc3RydWN0IGlwdF9pcCAqaXBpbmZvLAogCQlpbnQgaXNmcmFnKQogewotCXNpemVfdCBpOwogCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAjZGVmaW5lIEZXSU5WKGJvb2wsIGludmZsZykgKChib29sKSBeICEhKGlwaW5mby0+aW52ZmxhZ3MgJiAoaW52ZmxnKSkpCkBAIC0xMDMsMTIgKzEwMiw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlczsgdGhpcyBzaG91bGQgdW5yb2xsIG5pY2VseS4gKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5pbmlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5pbmlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKGluZGV2LCBpcGluZm8tPmluaWZhY2UsIGlwaW5mby0+aW5pZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgSVBUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTE3LDExICsxMTEsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopb3V0ZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5vdXRpZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmVfYWxpZ25lZChvdXRkZXYsIGlwaW5mby0+b3V0aWZhY2UsIGlwaW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQVF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMzQ3LDEwICszMzcsMTIgQEAKIAltdHBhci5mYW1pbHkgID0gdGdwYXIuZmFtaWx5ID0gTkZQUk9UT19JUFY0OwogCXRncGFyLmhvb2tudW0gPSBob29rOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAKIAkvKiBGb3IgcmV0dXJuIGZyb20gYnVpbHRpbiBjaGFpbiAqLwpAQCAtNDQ1LDcgKzQzNyw3IEBACiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7CiAKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTQ5Niw3ICs0ODgsOSBAQAogCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmlwKSkgfHwgdmlzaXRlZCkgewogCQkJCXVuc2lnbmVkIGludCBvbGRwb3MsIHNpemU7CiAKLQkJCQlpZiAodC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKKwkJCQlpZiAoKHN0cmNtcCh0LT50YXJnZXQudS51c2VyLm5hbWUsCisJCQkgICAgCQkgICAgSVBUX1NUQU5EQVJEX1RBUkdFVCkgPT0gMCkgJiYKKwkJCQkgICAgdC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKIAkJCQkJZHVwcmludGYoIm1hcmtfc291cmNlX2NoYWluczogYmFkICIKIAkJCQkJCSJuZWdhdGl2ZSB2ZXJkaWN0ICglaSlcbiIsCiAJCQkJCQkJCXQtPnZlcmRpY3QpOwpAQCAtOTI0LDEzICs5MTgsNjggQEAKIAkJCQkgIGNvdW50ZXJzLAogCQkJCSAgJmkpOwogCX0KKworfQorCisvKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKKyAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLworc3RhdGljIGludAorYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlJUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCisJCQkgIHQtPnNpemUsCisJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICBjb3VudGVycywKKwkJCSAgJmkpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGlwdF9lbnRyeSAqZSwgdm9pZCAqYXJnKQoreworCWUtPmNvdW50ZXJzLmJjbnQgPSAwOworCWUtPmNvdW50ZXJzLnBjbnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2xvbmVfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwltZW1jcHkobmV3aW5mbywgaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpKTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIGxvY19jcHVfZW50cnksIGluZm8tPnNpemUpOworCQlJUFRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPnNpemUsCisJCQkJICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqIGFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0JY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtOTM5LDE0ICs5ODgsMzAgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOworCisJY2xvbmVfY291bnRlcnMoaW5mbywgcHJpdmF0ZSk7CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CisJeHRfdGFibGVfZW50cnlfc3dhcF9yY3UocHJpdmF0ZSwgaW5mbyk7CisJc3luY2hyb25pemVfbmV0KCk7CS8qIFdhaXQgdW50aWwgc21va2UgaGFzIGNsZWFyZWQgKi8KKworCWdldF9jb3VudGVycyhpbmZvLCBjb3VudGVycyk7CisJcHV0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKKworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKIAogCXJldHVybiBjb3VudGVyczsKKworIGZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworIG5vbWVtOgorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMzEyLDI3ICsxMzc3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLwotc3RhdGljIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sIGludCBjb21wYXQpCkBAIC0xMzkzLDEzICsxNDM3LDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDA4LDggKzE0NTMsOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCmluZGV4IDI3YTc4ZmIuLmFjYzQ0YzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXB0X2xvZ19sb2dnZXIgPXsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGlwdF9sb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImlwdF9MT0ciLAogCS5sb2dmbgkJPSAmaXB0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzZhYWUuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIFRUTCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBJUCB0YWJsZXMKLSAqIChDKSAyMDAwLDIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY0IFRUTCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXR0bF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0Jc3RydWN0IGlwaGRyICppcGg7Ci0JY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0JaW50IG5ld190dGw7Ci0KLQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQotCQlyZXR1cm4gTkZfRFJPUDsKLQotCWlwaCA9IGlwX2hkcihza2IpOwotCi0Jc3dpdGNoIChpbmZvLT5tb2RlKSB7Ci0JCWNhc2UgSVBUX1RUTF9TRVQ6Ci0JCQluZXdfdHRsID0gaW5mby0+dHRsOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBUX1RUTF9JTkM6Ci0JCQluZXdfdHRsID0gaXBoLT50dGwgKyBpbmZvLT50dGw7Ci0JCQlpZiAobmV3X3R0bCA+IDI1NSkKLQkJCQluZXdfdHRsID0gMjU1OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBUX1RUTF9ERUM6Ci0JCQluZXdfdHRsID0gaXBoLT50dGwgLSBpbmZvLT50dGw7Ci0JCQlpZiAobmV3X3R0bCA8IDApCi0JCQkJbmV3X3R0bCA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW5ld190dGwgPSBpcGgtPnR0bDsKLQkJCWJyZWFrOwotCX0KLQotCWlmIChuZXdfdHRsICE9IGlwaC0+dHRsKSB7Ci0JCWNzdW1fcmVwbGFjZTIoJmlwaC0+Y2hlY2ssIGh0b25zKGlwaC0+dHRsIDw8IDgpLAotCQkJCQkgICBodG9ucyhuZXdfdHRsIDw8IDgpKTsKLQkJaXBoLT50dGwgPSBuZXdfdHRsOwotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgdHRsX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKGluZm8tPm1vZGUgPiBJUFRfVFRMX01BWE1PREUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCi0JCQlpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoaW5mby0+bW9kZSAhPSBJUFRfVFRMX1NFVCAmJiBpbmZvLT50dGwgPT0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCB0dGxfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJUVEwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCS50YXJnZXQgCT0gdHRsX3RnLAotCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pLAotCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkuY2hlY2tlbnRyeSAJPSB0dGxfdGdfY2hlY2ssCi0JLm1lIAkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHR0bF90Z19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmdHRsX3RnX3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dGxfdGdfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZ0dGxfdGdfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQodHRsX3RnX2luaXQpOwotbW9kdWxlX2V4aXQodHRsX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwppbmRleCAxOGEyODI2Li5kMzJjYzRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImlwdF9VTE9HIiwKIAkubG9nZm4JCT0gaXB0X2xvZ2ZuLAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3R0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTdmMWNiLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBJUCB0YWJsZXMgbW9kdWxlIGZvciBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIFRUTAotICoKLSAqIChDKSAyMDAwLDIwMDEgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQotTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjQgVFRMIGZpZWxkIG1hdGNoIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBib29sIHR0bF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3R0bF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JY29uc3QgdTggdHRsID0gaXBfaGRyKHNrYiktPnR0bDsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQVF9UVExfRVE6Ci0JCQlyZXR1cm4gdHRsID09IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX05FOgotCQkJcmV0dXJuIHR0bCAhPSBpbmZvLT50dGw7Ci0JCWNhc2UgSVBUX1RUTF9MVDoKLQkJCXJldHVybiB0dGwgPCBpbmZvLT50dGw7Ci0JCWNhc2UgSVBUX1RUTF9HVDoKLQkJCXJldHVybiB0dGwgPiBpbmZvLT50dGw7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfdHRsOiB1bmtub3duIG1vZGUgJWRcbiIsCi0JCQkJaW5mby0+bW9kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X21hdGNoIHR0bF9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAidHRsIiwKLQkuZmFtaWx5CQk9IE5GUFJPVE9fSVBWNCwKLQkubWF0Y2gJCT0gdHRsX210LAotCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF90dGxfaW5mbyksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHRsX210X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJnR0bF9tdF9yZWcpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHRsX210X2V4aXQodm9pZCkKLXsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0dGxfbXRfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQodHRsX210X2luaXQpOwotbW9kdWxlX2V4aXQodHRsX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwppbmRleCA1MmNiNjkzLi5jMzBhOTY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwpAQCAtNTYsNyArNTYsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCAzOTI5ZDIwLi40MDg3NjE0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtNjcsNyArNjcsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9tYW5nbGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDdmNjVkMTguLmU1MzU2ZGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0zOSw3ICszOSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSAgUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9yYXcubG9jayksCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwppbmRleCBhNTJhMzVmLi4yOWFiNjMwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5IiwKIAkudmFsaWRfaG9va3MJPSBTRUNVUklUWV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoc2VjdXJpdHlfdGFibGUubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IDRiZWIwNGYuLjdkMmVhZDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMTIwLDggKzEyMCwxMCBAQAogCQl0eXBlb2YobmZfbmF0X3NlcV9hZGp1c3RfaG9vaykgc2VxX2FkanVzdDsKIAogCQlzZXFfYWRqdXN0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZXFfYWRqdXN0X2hvb2spOwotCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkKKwkJaWYgKCFzZXFfYWRqdXN0IHx8ICFzZXFfYWRqdXN0KHNrYiwgY3QsIGN0aW5mbykpIHsKKwkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZl9jdF9uZXQoY3QpLCBkcm9wKTsKIAkJCXJldHVybiBORl9EUk9QOworCQl9CiAJfQogb3V0OgogCS8qIFdlJ3ZlIHNlZW4gaXQgY29taW5nIG91dCB0aGUgb3RoZXIgc2lkZTogY29uZmlybSBpdCAqLwpAQCAtMzI2LDYgKzMyOCwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaXB2NF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihpcHY0X25sYV9wb2xpY3ksIENUQV9JUF9NQVggKyAxKTsKK30KICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIHNvX2dldG9yaWdkc3QgPSB7CkBAIC0zNDUsNiArMzUyLDcgQEAKIAkuZ2V0X2w0cHJvdG8JID0gaXB2NF9nZXRfbDRwcm90bywKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyID0gaXB2NF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplID0gaXB2NF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlID0gaXB2NF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJID0gaXB2NF9ubGFfcG9saWN5LAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCmluZGV4IDZiYTVjNTUuLjg2NjhhM2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCkBAIC0yNSw0MCArMjUsNDIgQEAKIAl1bnNpZ25lZCBpbnQgYnVja2V0OwogfTsKIAotc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpjdF9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpCitzdGF0aWMgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmN0X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAlzdHJ1Y3QgY3RfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOwogCSAgICAgc3QtPmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKIAkgICAgIHN0LT5idWNrZXQrKykgewogCQluID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0+Y3QuaGFzaFtzdC0+YnVja2V0XS5maXJzdCk7Ci0JCWlmIChuKQorCQlpZiAoIWlzX2FfbnVsbHMobikpCiAJCQlyZXR1cm4gbjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCi0JCQkJICAgICAgc3RydWN0IGhsaXN0X25vZGUgKmhlYWQpCitzdGF0aWMgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmN0X2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCSAgICAgIHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpoZWFkKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKIAogCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UoaGVhZC0+bmV4dCk7Ci0Jd2hpbGUgKGhlYWQgPT0gTlVMTCkgewotCQlpZiAoKytzdC0+YnVja2V0ID49IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSkKLQkJCXJldHVybiBOVUxMOworCXdoaWxlIChpc19hX251bGxzKGhlYWQpKSB7CisJCWlmIChsaWtlbHkoZ2V0X251bGxzX3ZhbHVlKGhlYWQpID09IHN0LT5idWNrZXQpKSB7CisJCQlpZiAoKytzdC0+YnVja2V0ID49IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQogCQloZWFkID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0+Y3QuaGFzaFtzdC0+YnVja2V0XS5maXJzdCk7CiAJfQogCXJldHVybiBoZWFkOwogfQogCi1zdGF0aWMgc3RydWN0IGhsaXN0X25vZGUgKmN0X2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmN0X2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKmhlYWQgPSBjdF9nZXRfZmlyc3Qoc2VxKTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOwogCiAJaWYgKGhlYWQpCiAJCXdoaWxlIChwb3MgJiYgKGhlYWQgPSBjdF9nZXRfbmV4dChzZXEsIGhlYWQpKSkKQEAgLTg3LDY5ICs4OSw3NiBAQAogCiBzdGF0aWMgaW50IGN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmhhc2ggPSB2OwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaGFzaCk7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOwogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CisJaW50IHJldCA9IDA7CiAKIAlORl9DVF9BU1NFUlQoY3QpOworCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkpCisJCXJldHVybiAwOworCiAKIAkvKiB3ZSBvbmx5IHdhbnQgdG8gcHJpbnQgRElSX09SSUdJTkFMICovCiAJaWYgKE5GX0NUX0RJUkVDVElPTihoYXNoKSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gcmVsZWFzZTsKIAlpZiAobmZfY3RfbDNudW0oY3QpICE9IEFGX0lORVQpCi0JCXJldHVybiAwOworCQlnb3RvIHJlbGVhc2U7CiAKIAlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpKTsKIAlORl9DVF9BU1NFUlQobDNwcm90byk7CiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAlORl9DVF9BU1NFUlQobDRwcm90byk7CiAKKwlyZXQgPSAtRU5PU1BDOwogCWlmIChzZXFfcHJpbnRmKHMsICIlLThzICV1ICVsZCAiLAogCQkgICAgICBsNHByb3RvLT5uYW1lLCBuZl9jdF9wcm90b251bShjdCksCiAJCSAgICAgIHRpbWVyX3BlbmRpbmcoJmN0LT50aW1lb3V0KQogCQkgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayAmJiBsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCiAJCQlsM3Byb3RvLCBsNHByb3RvKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChzZXFfcHJpbnRfYWNjdChzLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKIAkJaWYgKHNlcV9wcmludGYocywgIltVTlJFUExJRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAocHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfUkVQTFkpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpKQogCQlpZiAoc2VxX3ByaW50ZihzLCAiW0FTU1VSRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKIAlpZiAoc2VxX3ByaW50ZihzLCAibWFyaz0ldSAiLCBjdC0+bWFyaykpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSwogCWlmIChzZXFfcHJpbnRmKHMsICJzZWNtYXJrPSV1ICIsIGN0LT5zZWNtYXJrKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCiAJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCXJldHVybiAwOworCQlnb3RvIHJlbGVhc2U7CisJcmV0ID0gMDsKK3JlbGVhc2U6CisJbmZfY3RfcHV0KGN0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X3NlcV9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDJhOGJlZTIuLjIzYjJjMmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC0yNjIsNiArMjYyLDExIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpY21wX25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKGljbXBfbmxhX3BvbGljeSwgQ1RBX1BST1RPX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0zMDksNiArMzE0LDcgQEAKIAkubWUJCQk9IE5VTEwsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IGljbXBfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IGljbXBfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IGljbXBfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IGljbXBfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCBhNjVjZjY5Li5mZTY1MTg3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtNjc5LDcgKzY3OSw3IEBACiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbmF0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXQtPmlwdjQubmF0X2J5c291cmNlID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9uYXRfaHRhYmxlX3NpemUsCi0JCQkJCQkgICAgICAmbmV0LT5pcHY0Lm5hdF92bWFsbG9jZWQpOworCQkJCQkJICAgICAgJm5ldC0+aXB2NC5uYXRfdm1hbGxvY2VkLCAwKTsKIAlpZiAoIW5ldC0+aXB2NC5uYXRfYnlzb3VyY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwppbmRleCBhN2ViMDQ3Li42MzQ4YTc5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpAQCAtNjEsNyArNjEsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBuYXRfdGFibGUgPSB7CiAJLm5hbWUJCT0gIm5hdCIsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChuYXRfdGFibGUubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggMTgyZjg0NS4uZDk1MjFmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAJLmV4cGVjdF9wb2xpY3kJCT0gJnNubXBfZXhwX3BvbGljeSwKIAkubmFtZQkJCT0gInNubXAiLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoU05NUF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihTTk1QX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIH07CiAKQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJLmV4cGVjdF9wb2xpY3kJCT0gJnNubXBfZXhwX3BvbGljeSwKIAkubmFtZQkJCT0gInNubXBfdHJhcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1RSQVBfUE9SVCksCisJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoU05NUF9UUkFQX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCBlYjYyZTU4Li5jZjBjZGVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC01NCw4ICs1NCw4IEBACiAJaW50IG9ycGhhbnMsIHNvY2tldHM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0Jb3JwaGFucyA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX29ycGhhbl9jb3VudCksCi0Jc29ja2V0cyA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX3NvY2tldHNfYWxsb2NhdGVkKSwKKwlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KTsKKwlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJc29ja2V0X3NlcV9zaG93KHNlcSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGRmZjhiYzQuLmY3NzQ2NTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC00OTMsNiArNDkzLDcgQEAKIAogCWlwYy5hZGRyID0gaW5ldC0+c2FkZHI7CiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCiAJaWYgKG1zZy0+bXNnX2NvbnRyb2xsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDk3ZjcxMTUuLmM0MGRlYmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJcnRfZ2FyYmFnZV9jb2xsZWN0LAogCS5jaGVjayA9CQlpcHY0X2RzdF9jaGVjaywKIAkuZGVzdHJveSA9CQlpcHY0X2RzdF9kZXN0cm95LApAQCAtMjY5Niw3ICsyNjk2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVCwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkuZGVzdHJveQkJPQlpcHY0X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXB2NF9kc3RfY2hlY2ssCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LApAQCAtMjc3OSw3ICsyNzc5LDggQEAKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBycCwgZmxwLCBOVUxMLCAwKTsKIH0KIAotc3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAorc3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAogCQkJaW50IG5vd2FpdCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CkBAIC0yODQ0LDggKzI4NDUsOCBAQAogCQlfX2JlMzIgZHN0ID0gcnQtPnJ0X2RzdDsKIAogCQlpZiAoaXB2NF9pc19tdWx0aWNhc3QoZHN0KSAmJiAhaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZHN0KSAmJgotCQkgICAgSVBWNF9ERVZDT05GX0FMTCgmaW5pdF9uZXQsIE1DX0ZPUldBUkRJTkcpKSB7Ci0JCQlpbnQgZXJyID0gaXBtcl9nZXRfcm91dGUoc2tiLCByLCBub3dhaXQpOworCQkgICAgSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpKSB7CisJCQlpbnQgZXJyID0gaXBtcl9nZXRfcm91dGUobmV0LCBza2IsIHIsIG5vd2FpdCk7CiAJCQlpZiAoZXJyIDw9IDApIHsKIAkJCQlpZiAoIW5vd2FpdCkgewogCQkJCQlpZiAoZXJyID09IDApCkBAIC0yOTUwLDcgKzI5NTEsNyBAQAogCWlmIChydG0tPnJ0bV9mbGFncyAmIFJUTV9GX05PVElGWSkKIAkJcnQtPnJ0X2ZsYWdzIHw9IFJUQ0ZfTk9USUZZOwogCi0JZXJyID0gcnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBpZCwgbmxoLT5ubG1zZ19zZXEsCisJZXJyID0gcnRfZmlsbF9pbmZvKG5ldCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwKIAkJCSAgIFJUTV9ORVdST1VURSwgMCwgMCk7CiAJaWYgKGVyciA8PSAwKQogCQlnb3RvIGVycm91dF9mcmVlOwpAQCAtMjk4OCw3ICsyOTg5LDcgQEAKIAkJCWlmIChydF9pc19leHBpcmVkKHJ0KSkKIAkJCQljb250aW51ZTsKIAkJCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKCZydC0+dS5kc3QpOwotCQkJaWYgKHJ0X2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJaWYgKHJ0X2ZpbGxfaW5mbyhuZXQsIHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCSBjYi0+bmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdST1VURSwKIAkJCQkJIDEsIE5MTV9GX01VTFRJKSA8PSAwKSB7CiAJCQkJZHN0X3JlbGVhc2UoeGNoZygmc2tiLT5kc3QsIE5VTEwpKTsKQEAgLTMzNzYsNyArMzM3Nyw3IEBACiAJaW50IHJjID0gMDsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCi0JaXBfcnRfYWNjdCA9IF9fYWxsb2NfcGVyY3B1KDI1NiAqIHNpemVvZihzdHJ1Y3QgaXBfcnRfYWNjdCkpOworCWlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpOwogCWlmICghaXBfcnRfYWNjdCkKIAkJcGFuaWMoIklQOiBmYWlsZWQgdG8gYWxsb2NhdGUgaXBfcnRfYWNjdFxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCBkMzQ2YzIyLi5iMzVhOTUwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC0yODgsMTAgKzI4OCw2IEBACiAJaWYgKCFyZXEpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpIHsKLQkJcmVxc2tfZnJlZShyZXEpOwotCQlnb3RvIG91dDsKLQl9CiAJaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJdHJlcSA9IHRjcF9yc2socmVxKTsKIAl0cmVxLT5yY3ZfaXNuCQk9IG50b2hsKHRoLT5zZXEpIC0gMTsKQEAgLTMyMiw2ICszMTgsMTEgQEAKIAkJfQogCX0KIAorCWlmIChzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChzaywgc2tiLCByZXEpKSB7CisJCXJlcXNrX2ZyZWUocmVxKTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVxLT5leHBpcmVzCT0gMFVMOwogCXJlcS0+cmV0cmFucwk9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNzZiMTQ4Yi4uMjQ1MWFlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTY2MSw2ICs2NjEsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeG1pdF9zaXplX2dvYWwoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdywKKwkJCQkgICAgICAgaW50IGxhcmdlX2FsbG93ZWQpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdTMyIHhtaXRfc2l6ZV9nb2FsLCBvbGRfc2l6ZV9nb2FsOworCisJeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OworCisJaWYgKGxhcmdlX2FsbG93ZWQgJiYgc2tfY2FuX2dzbyhzaykpIHsKKwkJeG1pdF9zaXplX2dvYWwgPSAoKHNrLT5za19nc29fbWF4X3NpemUgLSAxKSAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gLQorCQkJCSAgdHAtPnRjcF9oZWFkZXJfbGVuKTsKKworCQl4bWl0X3NpemVfZ29hbCA9IHRjcF9ib3VuZF90b19oYWxmX3duZCh0cCwgeG1pdF9zaXplX2dvYWwpOworCisJCS8qIFdlIHRyeSBoYXJkIHRvIGF2b2lkIGRpdmlkZXMgaGVyZSAqLworCQlvbGRfc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgKiBtc3Nfbm93OworCisJCWlmIChsaWtlbHkob2xkX3NpemVfZ29hbCA8PSB4bWl0X3NpemVfZ29hbCAmJgorCQkJICAgb2xkX3NpemVfZ29hbCArIG1zc19ub3cgPiB4bWl0X3NpemVfZ29hbCkpIHsKKwkJCXhtaXRfc2l6ZV9nb2FsID0gb2xkX3NpemVfZ29hbDsKKwkJfSBlbHNlIHsKKwkJCXRwLT54bWl0X3NpemVfZ29hbF9zZWdzID0geG1pdF9zaXplX2dvYWwgLyBtc3Nfbm93OworCQkJeG1pdF9zaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWxfc2VncyAqIG1zc19ub3c7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF4KHhtaXRfc2l6ZV9nb2FsLCBtc3Nfbm93KTsKK30KKworc3RhdGljIGludCB0Y3Bfc2VuZF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemVfZ29hbCwgaW50IGZsYWdzKQoreworCWludCBtc3Nfbm93OworCisJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzayk7CisJKnNpemVfZ29hbCA9IHRjcF94bWl0X3NpemVfZ29hbChzaywgbXNzX25vdywgIShmbGFncyAmIE1TR19PT0IpKTsKKworCXJldHVybiBtc3Nfbm93OworfQorCiBzdGF0aWMgc3NpemVfdCBkb190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHBvZmZzZXQsCiAJCQkgc2l6ZV90IHBzaXplLCBpbnQgZmxhZ3MpCiB7CkBAIC02NzcsMTMgKzcxOCwxMiBAQAogCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJY29waWVkID0gMDsKIAogCWVyciA9IC1FUElQRTsKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCi0JCWdvdG8gZG9fZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKIAogCXdoaWxlIChwc2l6ZSA+IDApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTsKQEAgLTc2MSw4ICs4MDEsNyBAQAogCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKIAkJCWdvdG8gZG9fZXJyb3I7CiAKLQkJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0JCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwkJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCX0KIAogb3V0OgpAQCAtODQ0LDggKzg4Myw3IEBACiAJLyogVGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CiAKLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCiAJLyogT2sgY29tbWVuY2Ugc2VuZGluZy4gKi8KIAlpb3ZsZW4gPSBtc2ctPm1zZ19pb3ZsZW47CkBAIC04NTQsNyArODkyLDcgQEAKIAogCWVyciA9IC1FUElQRTsKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCi0JCWdvdG8gZG9fZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKIAogCXdoaWxlICgtLWlvdmxlbiA+PSAwKSB7CiAJCWludCBzZWdsZW4gPSBpb3YtPmlvdl9sZW47CkBAIC0xMDA3LDggKzEwNDUsNyBAQAogCQkJaWYgKChlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssICZ0aW1lbykpICE9IDApCiAJCQkJZ290byBkb19lcnJvcjsKIAotCQkJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0JCQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJCX0KIAl9CiAKQEAgLTEwNDUsOCArMTA4Miw3IEBACiAgKi8KIAogc3RhdGljIGludCB0Y3BfcmVjdl91cmcoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvLAotCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MsCi0JCQlpbnQgKmFkZHJfbGVuKQorCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKQEAgLTE2NjEsNyArMTY5Nyw3IEBACiAJcmV0dXJuIGVycjsKIAogcmVjdl91cmc6Ci0JZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzLCBhZGRyX2xlbik7CisJZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtMjQ3OCwyMyArMjUxNCwyMyBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoMjsKIAl1bnNpZ25lZCBpbnQgdGhsZW47CiAJdW5zaWduZWQgaW50IGZsYWdzOwotCXVuc2lnbmVkIGludCB0b3RhbDsKIAl1bnNpZ25lZCBpbnQgbXNzID0gMTsKIAlpbnQgZmx1c2ggPSAxOworCWludCBpOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0aCkpKQorCXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKnRoKSk7CisJaWYgKHVubGlrZWx5KCF0aCkpCiAJCWdvdG8gb3V0OwogCi0JdGggPSB0Y3BfaGRyKHNrYik7CiAJdGhsZW4gPSB0aC0+ZG9mZiAqIDQ7CiAJaWYgKHRobGVuIDwgc2l6ZW9mKCp0aCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgdGhsZW4pKQorCXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCB0aGxlbik7CisJaWYgKHVubGlrZWx5KCF0aCkpCiAJCWdvdG8gb3V0OwogCi0JdGggPSB0Y3BfaGRyKHNrYik7Ci0JX19za2JfcHVsbChza2IsIHRobGVuKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCB0aGxlbik7CiAKIAlmbGFncyA9IHRjcF9mbGFnX3dvcmQodGgpOwogCkBAIC0yNTA0LDcgKzI1NDAsNyBAQAogCiAJCXRoMiA9IHRjcF9oZHIocCk7CiAKLQkJaWYgKHRoLT5zb3VyY2UgIT0gdGgyLT5zb3VyY2UgfHwgdGgtPmRlc3QgIT0gdGgyLT5kZXN0KSB7CisJCWlmICgodGgtPnNvdXJjZSBeIHRoMi0+c291cmNlKSB8ICh0aC0+ZGVzdCBeIHRoMi0+ZGVzdCkpIHsKIAkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI1MTksMTQgKzI1NTUsMTUgQEAKIAlmbHVzaCB8PSBmbGFncyAmIFRDUF9GTEFHX0NXUjsKIAlmbHVzaCB8PSAoZmxhZ3MgXiB0Y3BfZmxhZ193b3JkKHRoMikpICYKIAkJICB+KFRDUF9GTEFHX0NXUiB8IFRDUF9GTEFHX0ZJTiB8IFRDUF9GTEFHX1BTSCk7Ci0JZmx1c2ggfD0gdGgtPmFja19zZXEgIT0gdGgyLT5hY2tfc2VxIHx8IHRoLT53aW5kb3cgIT0gdGgyLT53aW5kb3c7Ci0JZmx1c2ggfD0gbWVtY21wKHRoICsgMSwgdGgyICsgMSwgdGhsZW4gLSBzaXplb2YoKnRoKSk7CisJZmx1c2ggfD0gKHRoLT5hY2tfc2VxIF4gdGgyLT5hY2tfc2VxKSB8ICh0aC0+d2luZG93IF4gdGgyLT53aW5kb3cpOworCWZvciAoaSA9IHNpemVvZigqdGgpOyAhZmx1c2ggJiYgaSA8IHRobGVuOyBpICs9IDQpCisJCWZsdXNoIHw9ICoodTMyICopKCh1OCAqKXRoICsgaSkgXgorCQkJICoodTMyICopKCh1OCAqKXRoMiArIGkpOwogCi0JdG90YWwgPSBwLT5sZW47CiAJbXNzID0gc2tiX3NoaW5mbyhwKS0+Z3NvX3NpemU7CiAKLQlmbHVzaCB8PSBza2ItPmxlbiA+IG1zcyB8fCBza2ItPmxlbiA8PSAwOwotCWZsdXNoIHw9IG50b2hsKHRoMi0+c2VxKSArIHRvdGFsICE9IG50b2hsKHRoLT5zZXEpOworCWZsdXNoIHw9IChza2JfZ3JvX2xlbihza2IpID4gbXNzKSB8ICFza2JfZ3JvX2xlbihza2IpOworCWZsdXNoIHw9IChudG9obCh0aDItPnNlcSkgKyBza2JfZ3JvX2xlbihwKSkgXiBudG9obCh0aC0+c2VxKTsKIAogCWlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKSkgewogCQltc3MgPSAxOwpAQCAtMjUzOCw3ICsyNTc1LDcgQEAKIAl0Y3BfZmxhZ193b3JkKHRoMikgfD0gZmxhZ3MgJiAoVENQX0ZMQUdfRklOIHwgVENQX0ZMQUdfUFNIKTsKIAogb3V0X2NoZWNrX2ZpbmFsOgotCWZsdXNoID0gc2tiLT5sZW4gPCBtc3M7CisJZmx1c2ggPSBza2JfZ3JvX2xlbihza2IpIDwgbXNzOwogCWZsdXNoIHw9IGZsYWdzICYgKFRDUF9GTEFHX1VSRyB8IFRDUF9GTEFHX1BTSCB8IFRDUF9GTEFHX1JTVCB8CiAJCQkgIFRDUF9GTEFHX1NZTiB8IFRDUF9GTEFHX0ZJTik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCA3ZWI3NjM2Li4zYjUzZmQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0xNDksMTYgKzE0OSw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKLQotCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZAotCQkgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gY2EtPmNudCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIGNhLT5jbnQpOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNGVjNWI0ZS4uZTkyYmViOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0zMzYsNiArMzM2LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2xvd19zdGFydCk7CiAKKy8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kIChvciBhbHRlcm5hdGl2ZSB3KSAqLwordm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdykKK3sKKwlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB3KSB7CisJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQl0cC0+c25kX2N3bmQrKzsKKwkJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJfSBlbHNlIHsKKwkJdHAtPnNuZF9jd25kX2NudCsrOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRjcF9jb25nX2F2b2lkX2FpKTsKKwogLyoKICAqIFRDUCBSZW5vIGNvbmdlc3Rpb24gY29udHJvbAogICogVGhpcyBpcyBzcGVjaWFsIGNhc2UgdXNlZCBmb3IgZmFsbGJhY2sgYXMgd2VsbC4KQEAgLTM2NSwxMyArMzc4LDcgQEAKIAkJCQl0cC0+c25kX2N3bmQrKzsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY3ViaWMuYyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCmluZGV4IGVlNDY3ZWMuLjcxZDVmMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jdWJpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCkBAIC0yOTQsMTYgKzI5NCw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAl9IGVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHRjcC5jIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwppbmRleCA5Mzc1NDliLi4yNmQ1YzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHRjcC5jCisrKyBiL25ldC9pcHY0L3RjcF9odGNwLmMKQEAgLTExNSw4ICsxMTUsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLwotCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9PcGVuICYmCi0JICAgIGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX0Rpc29yZGVyKSB7CisJaWYgKCEoKDEgPDwgaWNzay0+aWNza19jYV9zdGF0ZSkgJiAoVENQRl9DQV9PcGVuIHwgVENQRl9DQV9EaXNvcmRlcikpKSB7CiAJCWNhLT5wYWNrZXRjb3VudCA9IDA7CiAJCWNhLT5sYXN0dGltZSA9IG5vdzsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBjMjg5NzZhNy4uMmJjOGUyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CkBAIC0xMTc4LDEwICsxMTc5LDE4IEBACiAJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpICYmCi0JCSAgICAodGNwX2lzX2ZhY2sodHApIHx8Ci0JCSAgICAgIWJlZm9yZShyZWNlaXZlZF91cHRvLAotCQkJICAgICBhY2tfc2VxICsgdHAtPnJlb3JkZXJpbmcgKiB0cC0+bXNzX2NhY2hlKSkpIHsKKwkJLyogVE9ETzogV2Ugd291bGQgbGlrZSB0byBnZXQgcmlkIG9mIHRjcF9pc19mYWNrKHRwKSBvbmx5CisJCSAqIGNvbnN0cmFpbnQgaGVyZSAoc2VlIGFib3ZlKSBidXQgZmlndXJpbmcgb3V0IHRoYXQgYXQKKwkJICogbGVhc3QgdHAtPnJlb3JkZXJpbmcgU0FDSyBibG9ja3MgcmVzaWRlIGJldHdlZW4gYWNrX3NlcQorCQkgKiBhbmQgcmVjZWl2ZWRfdXB0byBpcyBub3QgZWFzeSB0YXNrIHRvIGRvIGNoZWFwbHkgd2l0aAorCQkgKiB0aGUgYXZhaWxhYmxlIGRhdGFzdHJ1Y3R1cmVzLgorCQkgKgorCQkgKiBXaGV0aGVyIEZBQ0sgc2hvdWxkIGNoZWNrIGhlcmUgZm9yIHRwLT5yZW9yZGVyaW5nIHNlZ3MKKwkJICogaW4tYmV0d2VlbiBvbmUgY291bGQgYXJndWUgZm9yIGVpdGhlciB3YXkgKGl0IHdvdWxkIGJlCisJCSAqIHJhdGhlciBzaW1wbGUgdG8gaW1wbGVtZW50IGFzIHdlIGNvdWxkIGNvdW50IGZhY2tfY291bnQKKwkJICogZHVyaW5nIHRoZSB3YWxrIGFuZCBkbyB0cC0+ZmFja2V0c19vdXQgLSBmYWNrX2NvdW50KS4KKwkJICovCisJCWlmIChhZnRlcihyZWNlaXZlZF91cHRvLCBhY2tfc2VxKSkgewogCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gflRDUENCX1NBQ0tFRF9SRVRSQU5TOwogCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAKQEAgLTE3OTQsMTEgKzE4MDMsNyBAQAogCWZvciAoaSA9IHVzZWRfc2Fja3MgLSAxOyBpID4gMDsgaS0tKSB7CiAJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKIAkJCWlmIChhZnRlcihzcFtqXS5zdGFydF9zZXEsIHNwW2ogKyAxXS5zdGFydF9zZXEpKSB7Ci0JCQkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHRtcDsKLQotCQkJCXRtcCA9IHNwW2pdOwotCQkJCXNwW2pdID0gc3BbaiArIDFdOwotCQkJCXNwW2ogKyAxXSA9IHRtcDsKKwkJCQlzd2FwKHNwW2pdLCBzcFtqICsgMV0pOwogCiAJCQkJLyogVHJhY2sgd2hlcmUgdGhlIGZpcnN0IFNBQ0sgYmxvY2sgZ29lcyB0byAqLwogCQkJCWlmIChqID09IGZpcnN0X3NhY2tfaW5kZXgpCkBAIC0yNDUzLDYgKzI0NTgsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQgdG8gcmVzdGFydCB0aW1lcgorICogZWFjaCB0aW1lIHdoZW4gc29tZXRoaW5nIGlzIEFDS2VkLiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cworICogZHVyaW5nIGZhc3QgcmV0cmFuc21pdCB3aXRob3V0IGZhbGxpbmcgdG8gc2xvdyBzdGFydC4KKyAqCisgKiBVc2VmdWxuZXNzIG9mIHRoaXMgYXMgaXMgdmVyeSBxdWVzdGlvbmFibGUsIHNpbmNlIHdlIHNob3VsZCBrbm93IHdoaWNoIG9mCisgKiB0aGUgc2VnbWVudHMgaXMgdGhlIG5leHQgdG8gdGltZW91dCB3aGljaCBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSB0byBmaW5kCisgKiBpbiBnZW5lcmFsIGNhc2UgdW5sZXNzIHdlIGFkZCBzb21lIGRhdGEgc3RydWN0dXJlIGp1c3QgZm9yIHRoYXQuIFRoZQorICogY3VycmVudCBhcHByb2FjaCBjZXJ0YWlubHkgd29uJ3QgZmluZCB0aGUgcmlnaHQgb25lIHRvbyBvZnRlbiBhbmQgd2hlbiBpdAorICogZmluYWxseSBkb2VzIGZpbmQgX3NvbWV0aGluZ18gaXQgdXN1YWxseSBtYXJrcyBsYXJnZSBwYXJ0IG9mIHRoZSB3aW5kb3cKKyAqIHJpZ2h0IGF3YXkgKGJlY2F1c2UgYSByZXRyYW5zbWlzc2lvbiB3aXRoIGEgbGFyZ2VyIHRpbWVzdGFtcCBibG9ja3MgdGhlCisgKiBsb29wIGZyb20gYWR2YW5jaW5nKS4gLWlqCisgKi8KK3N0YXRpYyB2b2lkIHRjcF90aW1lb3V0X3NrYnMoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIXRjcF9pc19mYWNrKHRwKSB8fCAhdGNwX2hlYWRfdGltZWRvdXQoc2spKQorCQlyZXR1cm47CisKKwlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludDsKKwlpZiAodHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPT0gTlVMTCkKKwkJc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spOworCisJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKKwkJCWJyZWFrOworCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCisJCQlicmVhazsKKworCQl0Y3Bfc2tiX21hcmtfbG9zdCh0cCwgc2tiKTsKKwl9CisKKwl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKKworCXRjcF92ZXJpZnlfbGVmdF9vdXQodHApOworfQorCiAvKiBNYXJrIGhlYWQgb2YgcXVldWUgdXAgYXMgbG9zdC4gV2l0aCBSRkMzNTE3IFNBQ0ssIHRoZSBwYWNrZXRzIGlzCiAgKiBpcyBhZ2FpbnN0IHNhY2tlZCAiY250Iiwgb3RoZXJ3aXNlIGl0J3MgYWdhaW5zdCBmYWNrZWQgImNudCIKICAqLwpAQCAtMjUyNSwzMCArMjU2OCw3IEBACiAJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgc2Fja2VkX3VwdG8pOwogCX0KIAotCS8qIE5ldyBoZXVyaXN0aWNzOiBpdCBpcyBwb3NzaWJsZSBvbmx5IGFmdGVyIHdlIHN3aXRjaGVkCi0JICogdG8gcmVzdGFydCB0aW1lciBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuCi0JICogSGVuY2UsIHdlIGNhbiBkZXRlY3QgdGltZWQgb3V0IHBhY2tldHMgZHVyaW5nIGZhc3QKLQkgKiByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgotCSAqLwotCWlmICh0Y3BfaXNfZmFjayh0cCkgJiYgdGNwX2hlYWRfdGltZWRvdXQoc2spKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJc2tiID0gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPyB0cC0+c2NvcmVib2FyZF9za2JfaGludAotCQkJOiB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7Ci0KLQkJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKLQkJCWlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCi0JCQkJYnJlYWs7Ci0KLQkJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOwotCQl9Ci0KLQkJdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPSBza2I7Ci0KLQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Ci0JfQorCXRjcF90aW1lb3V0X3NrYnMoc2spOwogfQogCiAvKiBDV05EIG1vZGVyYXRpb24sIHByZXZlbnRpbmcgYnVyc3RzIGR1ZSB0byB0b28gYmlnIEFDS3MKQEAgLTI4MTMsNyArMjgzMyw3IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKQEAgLTI4NDEsNyArMjg2MSw3IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJdTMyIHByaW9yX2xvc3QgPSB0cC0+bG9zdF9vdXQ7CiAKIAl0Y3BfZm9yX3dyaXRlX3F1ZXVlKHNrYiwgc2spIHsKQEAgLTMxNzgsNyArMzE5OCw2IEBACiAKIAl3aGlsZSAoKHNrYiA9IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKSkgJiYgc2tiICE9IHRjcF9zZW5kX2hlYWQoc2spKSB7CiAJCXN0cnVjdCB0Y3Bfc2tiX2NiICpzY2IgPSBUQ1BfU0tCX0NCKHNrYik7Ci0JCXUzMiBlbmRfc2VxOwogCQl1MzIgYWNrZWRfcGNvdW50OwogCQl1OCBzYWNrZWQgPSBzY2ItPnNhY2tlZDsKIApAQCAtMzE5MywxNiArMzIxMiw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCWZ1bGx5X2Fja2VkID0gMDsKLQkJCWVuZF9zZXEgPSB0cC0+c25kX3VuYTsKIAkJfSBlbHNlIHsKIAkJCWFja2VkX3Bjb3VudCA9IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCQllbmRfc2VxID0gc2NiLT5lbmRfc2VxOwotCQl9Ci0KLQkJLyogTVRVIHByb2JpbmcgY2hlY2tzICovCi0JCWlmIChmdWxseV9hY2tlZCAmJiBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgotCQkgICAgIWFmdGVyKHRwLT5tdHVfcHJvYmUucHJvYmVfc2VxX2VuZCwgc2NiLT5lbmRfc2VxKSkgewotCQkJdGNwX210dXBfcHJvYmVfc3VjY2Vzcyhzaywgc2tiKTsKIAkJfQogCiAJCWlmIChzYWNrZWQgJiBUQ1BDQl9SRVRSQU5TKSB7CkBAIC0zMjY3LDI0ICszMjc4LDI2IEBACiAJCWNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcwogCQkJPSBpbmV0X2NzayhzayktPmljc2tfY2Ffb3BzOwogCisJCWlmICh1bmxpa2VseShpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgorCQkJICAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCB0cC0+c25kX3VuYSkpKSB7CisJCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrKTsKKwkJfQorCiAJCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgZmxhZywgc2VxX3J0dCk7CiAJCXRjcF9yZWFybV9ydG8oc2spOwogCiAJCWlmICh0Y3BfaXNfcmVubyh0cCkpIHsKIAkJCXRjcF9yZW1vdmVfcmVub19zYWNrcyhzaywgcGt0c19hY2tlZCk7CiAJCX0gZWxzZSB7CisJCQlpbnQgZGVsdGE7CisKIAkJCS8qIE5vbi1yZXRyYW5zbWl0dGVkIGhvbGUgZ290IGZpbGxlZD8gVGhhdCdzIHJlb3JkZXJpbmcgKi8KIAkJCWlmIChyZW9yZCA8IHByaW9yX2ZhY2tldHMpCiAJCQkJdGNwX3VwZGF0ZV9yZW9yZGVyaW5nKHNrLCB0cC0+ZmFja2V0c19vdXQgLSByZW9yZCwgMCk7CiAKLQkJCS8qIE5vIG5lZWQgdG8gY2FyZSBmb3IgdW5kZXJmbG93cyBoZXJlIGJlY2F1c2UKLQkJCSAqIHRoZSBsb3N0X3NrYl9oaW50IGdldHMgTlVMTGVkIGlmIHdlJ3JlIHBhc3QgaXQKLQkJCSAqIChvciBzb21ldGhpbmcgbm9uLXRyaXZpYWwgaGFwcGVuZWQpCi0JCQkgKi8KLQkJCWlmICh0Y3BfaXNfZmFjayh0cCkpCi0JCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gcGt0c19hY2tlZDsKLQkJCWVsc2UKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwcmlvcl9zYWNrZWQgLSB0cC0+c2Fja2VkX291dDsKKwkJCWRlbHRhID0gdGNwX2lzX2ZhY2sodHApID8gcGt0c19hY2tlZCA6CisJCQkJCQkgIHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gbWluKHRwLT5sb3N0X2NudF9oaW50LCBkZWx0YSk7CiAJCX0KIAogCQl0cC0+ZmFja2V0c19vdXQgLT0gbWluKHBrdHNfYWNrZWQsIHRwLT5mYWNrZXRzX291dCk7CkBAIC0zMzk2LDcgKzM0MDksNyBAQAogCiAJaWYgKHRjcF9tYXlfdXBkYXRlX3dpbmRvdyh0cCwgYWNrLCBhY2tfc2VxLCBud2luKSkgewogCQlmbGFnIHw9IEZMQUdfV0lOX1VQREFURTsKLQkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrLCBhY2tfc2VxKTsKKwkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrX3NlcSk7CiAKIAkJaWYgKHRwLT5zbmRfd25kICE9IG53aW4pIHsKIAkJCXRwLT5zbmRfd25kID0gbndpbjsKQEAgLTM1NzIsMTUgKzM1ODUsMTggQEAKIAlpbnQgcHJpb3JfcGFja2V0czsKIAlpbnQgZnJ0b19jd25kID0gMDsKIAotCS8qIElmIHRoZSBhY2sgaXMgbmV3ZXIgdGhhbiBzZW50IG9yIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrcworCS8qIElmIHRoZSBhY2sgaXMgb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCiAJICogdGhlbiB3ZSBjYW4gcHJvYmFibHkgaWdub3JlIGl0LgogCSAqLwotCWlmIChhZnRlcihhY2ssIHRwLT5zbmRfbnh0KSkKLQkJZ290byB1bmludGVyZXN0aW5nX2FjazsKLQogCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZ290byBvbGRfYWNrOwogCisJLyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJ3Qgc2VudCB5ZXQsIGRpc2NhcmQKKwkgKiB0aGlzIHNlZ21lbnQgKFJGQzc5MyBTZWN0aW9uIDMuOSkuCisJICovCisJaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQorCQlnb3RvIGludmFsaWRfYWNrOworCiAJaWYgKGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpCiAJCWZsYWcgfD0gRkxBR19TTkRfVU5BX0FEVkFOQ0VEOwogCkBAIC0zNjAxLDcgKzM2MTcsNyBAQAogCQkgKiBObyBtb3JlIGNoZWNrcyBhcmUgcmVxdWlyZWQuCiAJCSAqIE5vdGUsIHdlIHVzZSB0aGUgZmFjdCB0aGF0IFNORC5VTkE+PVNORC5XTDIuCiAJCSAqLwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAkJdHAtPnNuZF91bmEgPSBhY2s7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwogCkBAIC0zNjcwLDYgKzM2ODYsMTAgQEAKIAkJdGNwX2Fja19wcm9iZShzayk7CiAJcmV0dXJuIDE7CiAKK2ludmFsaWRfYWNrOgorCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgYWZ0ZXIgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlyZXR1cm4gLTE7CisKIG9sZF9hY2s6CiAJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSB7CiAJCXRjcF9zYWNrdGFnX3dyaXRlX3F1ZXVlKHNrLCBza2IsIHByaW9yX3NuZF91bmEpOwpAQCAtMzY3Nyw4ICszNjk3LDcgQEAKIAkJCXRjcF90cnlfa2VlcF9vcGVuKHNrKTsKIAl9CiAKLXVuaW50ZXJlc3RpbmdfYWNrOgotCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgb3V0IG9mICV1OiV1XG4iLCBhY2ssIHRwLT5zbmRfdW5hLCB0cC0+c25kX254dCk7CisJU09DS19ERUJVRyhzaywgIkFjayAldSBiZWZvcmUgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg2Niw4ICszODg1LDcgQEAKIAkJICogTm90IG9ubHksIGFsc28gaXQgb2NjdXJzIGZvciBleHBpcmVkIHRpbWVzdGFtcHMuCiAJCSAqLwogCi0JCWlmICgoczMyKSh0cC0+cnhfb3B0LnJjdl90c3ZhbCAtIHRwLT5yeF9vcHQudHNfcmVjZW50KSA+PSAwIHx8Ci0JCSAgIGdldF9zZWNvbmRzKCkgPj0gdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpCisJCWlmICh0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCiAJCQl0Y3Bfc3RvcmVfdHNfcmVjZW50KHRwKTsKIAl9CiB9CkBAIC0zOTE5LDkgKzM5MzcsOSBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuICgoczMyKSh0cC0+cnhfb3B0LnRzX3JlY2VudCAtIHRwLT5yeF9vcHQucmN2X3RzdmFsKSA+IFRDUF9QQVdTX1dJTkRPVyAmJgotCQlnZXRfc2Vjb25kcygpIDwgdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMgJiYKLQkJIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKSk7CisKKwlyZXR1cm4gIXRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCBUQ1BfUEFXU19XSU5ET1cpICYmCisJICAgICAgICF0Y3BfZGlzb3JkZXJlZF9hY2soc2ssIHNrYik7CiB9CiAKIC8qIENoZWNrIHNlZ21lbnQgc2VxdWVuY2UgbnVtYmVyIGZvciB2YWxpZGl0eS4KQEAgLTQwNzksNyArNDA5Nyw2IEBACiAJCXRwLT5yeF9vcHQuZHNhY2sgPSAxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uc3RhcnRfc2VxID0gc2VxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uZW5kX3NlcSA9IGVuZF9zZXE7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKyAxOwogCX0KIH0KIApAQCAtNDEzNCw4ICs0MTUxLDYgQEAKIAkJCSAqIERlY3JlYXNlIG51bV9zYWNrcy4KIAkJCSAqLwogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MtLTsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKwotCQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKIAkJCWZvciAoaSA9IHRoaXNfc2FjazsgaSA8IHRwLT5yeF9vcHQubnVtX3NhY2tzOyBpKyspCiAJCQkJc3BbaV0gPSBzcFtpICsgMV07CiAJCQljb250aW51ZTsKQEAgLTQxNDQsMjAgKzQxNTksNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3N3YXAoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMSwKLQkJCQkgc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMikKLXsKLQlfX3UzMiB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+c3RhcnRfc2VxOwotCXNhY2sxLT5zdGFydF9zZXEgPSBzYWNrMi0+c3RhcnRfc2VxOwotCXNhY2syLT5zdGFydF9zZXEgPSB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+ZW5kX3NlcTsKLQlzYWNrMS0+ZW5kX3NlcSA9IHNhY2syLT5lbmRfc2VxOwotCXNhY2syLT5lbmRfc2VxID0gdG1wOwotfQotCiBzdGF0aWMgdm9pZCB0Y3Bfc2Fja19uZXdfb2ZvX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtNDE3Miw3ICs0MTczLDcgQEAKIAkJaWYgKHRjcF9zYWNrX2V4dGVuZChzcCwgc2VxLCBlbmRfc2VxKSkgewogCQkJLyogUm90YXRlIHRoaXNfc2FjayB0byB0aGUgZmlyc3Qgb25lLiAqLwogCQkJZm9yICg7IHRoaXNfc2FjayA+IDA7IHRoaXNfc2Fjay0tLCBzcC0tKQotCQkJCXRjcF9zYWNrX3N3YXAoc3AsIHNwIC0gMSk7CisJCQkJc3dhcCgqc3AsICooc3AgLSAxKSk7CiAJCQlpZiAoY3VyX3NhY2tzID4gMSkKIAkJCQl0Y3Bfc2Fja19tYXliZV9jb2FsZXNjZSh0cCk7CiAJCQlyZXR1cm47CkBAIC00MTk4LDcgKzQxOTksNiBAQAogCXNwLT5zdGFydF9zZXEgPSBzZXE7CiAJc3AtPmVuZF9zZXEgPSBlbmRfc2VxOwogCXRwLT5yeF9vcHQubnVtX3NhY2tzKys7Ci0JdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CiB9CiAKIC8qIFJDVi5OWFQgYWR2YW5jZXMsIHNvbWUgU0FDS3Mgc2hvdWxkIGJlIGVhdGVuLiAqLwpAQCAtNDIxMiw3ICs0MjEyLDYgQEAKIAkvKiBFbXB0eSBvZm8gcXVldWUsIGhlbmNlLCBhbGwgdGhlIFNBQ0tzIGFyZSBlYXRlbi4gQ2xlYXIuICovCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKIAkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQuZHNhY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQyMzMsMTEgKzQyMzIsNyBAQAogCQl0aGlzX3NhY2srKzsKIAkJc3ArKzsKIAl9Ci0JaWYgKG51bV9zYWNrcyAhPSB0cC0+cnhfb3B0Lm51bV9zYWNrcykgewotCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IG51bV9zYWNrczsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJICAgICAgIHRwLT5yeF9vcHQuZHNhY2s7Ci0JfQorCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwogfQogCiAvKiBUaGlzIG9uZSBjaGVja3MgdG8gc2VlIGlmIHdlIGNhbiBwdXQgZGF0YSBmcm9tIHRoZQpAQCAtNDMxMywxMCArNDMwOCw3IEBACiAKIAlUQ1BfRUNOX2FjY2VwdF9jd3IodHAsIHNrYik7CiAKLQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrczsKLQl9CisJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAKIAkvKiAgUXVldWUgZGF0YSBmb3IgZGVsaXZlcnkgdG8gdGhlIHVzZXIuCiAJICogIFBhY2tldHMgaW4gc2VxdWVuY2UgZ28gdG8gdGhlIHJlY2VpdmUgcXVldWUuCkBAIC00NDM1LDggKzQ0MjcsNiBAQAogCQkvKiBJbml0aWFsIG91dCBvZiBvcmRlciBzZWdtZW50LCBidWlsZCAxIFNBQ0suICovCiAJCWlmICh0Y3BfaXNfc2Fjayh0cCkpIHsKIAkJCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gMTsKLQkJCXRwLT5yeF9vcHQuZHNhY2sgICAgID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gMTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5zdGFydF9zZXEgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5lbmRfc2VxID0KIAkJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcTsKQEAgLTUxNTcsNyArNTE0Nyw4IEBACiAJICovCiAKIAlpZiAoKHRjcF9mbGFnX3dvcmQodGgpICYgVENQX0hQX0JJVFMpID09IHRwLT5wcmVkX2ZsYWdzICYmCi0JICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0KSB7CisJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0ICYmCisJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIHRwLT5zbmRfbnh0KSkgewogCQlpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC0+dGNwX2hlYWRlcl9sZW47CiAKIAkJLyogVGltZXN0YW1wIGhlYWRlciBwcmVkaWN0aW9uOiB0Y3BfaGVhZGVyX2xlbgpAQCAtNTMxMCw4ICs1MzAxLDggQEAKIAkJcmV0dXJuIC1yZXM7CiAKIHN0ZXA1OgotCWlmICh0aC0+YWNrKQotCQl0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCWlmICh0aC0+YWNrICYmIHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPCAwKQorCQlnb3RvIGRpc2NhcmQ7CiAKIAl0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKHNrLCBza2IpOwogCkBAIC01NDA5LDcgKzU0MDAsNyBAQAogCQkgKiBuZXZlciBzY2FsZWQuCiAJCSAqLwogCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpOwotCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CisJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJaWYgKCF0cC0+cnhfb3B0LndzY2FsZV9vaykgewogCQkJdHAtPnJ4X29wdC5zbmRfd3NjYWxlID0gdHAtPnJ4X29wdC5yY3Zfd3NjYWxlID0gMDsKQEAgLTU1MTAsNyArNTUwMSw3IEBACiAKIAkvKiBQQVdTIGNoZWNrLiAqLwogCWlmICh0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCAmJiB0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYKLQkgICAgdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIDApKQorCSAgICB0Y3BfcGF3c19yZWplY3QoJnRwLT5yeF9vcHQsIDApKQogCQlnb3RvIGRpc2NhcmRfYW5kX3VuZG87CiAKIAlpZiAodGgtPnN5bikgewpAQCAtNTY0OCw3ICs1NjM5LDcgQEAKIAogCS8qIHN0ZXAgNTogY2hlY2sgdGhlIEFDSyBmaWVsZCAqLwogCWlmICh0aC0+YWNrKSB7Ci0JCWludCBhY2NlcHRhYmxlID0gdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKTsKKwkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpID4gMDsKIAogCQlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgewogCQljYXNlIFRDUF9TWU5fUkVDVjoKQEAgLTU2NzAsOCArNTY2MSw3IEBACiAJCQkJdHAtPnNuZF91bmEgPSBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXE7CiAJCQkJdHAtPnNuZF93bmQgPSBudG9ocyh0aC0+d2luZG93KSA8PAogCQkJCQkgICAgICB0cC0+cnhfb3B0LnNuZF93c2NhbGU7Ci0JCQkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwKLQkJCQkJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEpOwogCiAJCQkJLyogdGNwX2FjayBjb25zaWRlcnMgdGhpcyBBQ0sgYXMgZHVwbGljYXRlCiAJCQkJICogYW5kIGRvZXMgbm90IGNhbGN1bGF0ZSBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCBjZjc0YzQxLi41ZDQyN2Y4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTEyMjYsMjcgKzEyMjYsMTkgQEAKIAlpZiAod2FudF9jb29raWUgJiYgIXRtcF9vcHQuc2F3X3RzdGFtcCkKIAkJdGNwX2NsZWFyX29wdGlvbnMoJnRtcF9vcHQpOwogCi0JaWYgKHRtcF9vcHQuc2F3X3RzdGFtcCAmJiAhdG1wX29wdC5yY3ZfdHN2YWwpIHsKLQkJLyogU29tZSBPU2VzICh1bmtub3duIG9uZXMsIGJ1dCBJIHNlZSB0aGVtIG9uIHdlYiBzZXJ2ZXIsIHdoaWNoCi0JCSAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGludGVyZXN0aW5nIG9ubHkgZm9yIHdpbmRvd3MnCi0JCSAqIHVzZXJzKSBkbyBub3Qgc2VuZCB0aGVpciBzdGFtcCBpbiBTWU4uIEl0IGlzIGVhc3kgY2FzZS4KLQkJICogV2Ugc2ltcGx5IGRvIG5vdCBhZHZlcnRpc2UgVFMgc3VwcG9ydC4KLQkJICovCi0JCXRtcF9vcHQuc2F3X3RzdGFtcCA9IDA7Ci0JCXRtcF9vcHQudHN0YW1wX29rICA9IDA7Ci0JfQogCXRtcF9vcHQudHN0YW1wX29rID0gdG1wX29wdC5zYXdfdHN0YW1wOwogCiAJdGNwX29wZW5yZXFfaW5pdChyZXEsICZ0bXBfb3B0LCBza2IpOwogCi0JaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpCi0JCWdvdG8gZHJvcF9hbmRfZnJlZTsKLQogCWlyZXEgPSBpbmV0X3JzayhyZXEpOwogCWlyZXEtPmxvY19hZGRyID0gZGFkZHI7CiAJaXJlcS0+cm10X2FkZHIgPSBzYWRkcjsKIAlpcmVxLT5ub19zcmNjaGVjayA9IGluZXRfc2soc2spLT50cmFuc3BhcmVudDsKIAlpcmVxLT5vcHQgPSB0Y3BfdjRfc2F2ZV9vcHRpb25zKHNrLCBza2IpOworCisJaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpCisJCWdvdG8gZHJvcF9hbmRfZnJlZTsKKwogCWlmICghd2FudF9jb29raWUpCiAJCVRDUF9FQ05fY3JlYXRlX3JlcXVlc3QocmVxLCB0Y3BfaGRyKHNrYikpOwogCkBAIC0yMzU1LDcgKzIzNDcsNyBAQAogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0JCWlmICghdGNwX3Y0X2NoZWNrKHNrYi0+bGVuLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92NF9jaGVjayhza2JfZ3JvX2xlbihza2IpLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCSAgc2tiLT5jc3VtKSkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGY2N2VmZmIuLjQzYmJiYTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlpZiAodG1wX29wdC5zYXdfdHN0YW1wKSB7CiAJCQl0bXBfb3B0LnRzX3JlY2VudAk9IHRjcHR3LT50d190c19yZWNlbnQ7CiAJCQl0bXBfb3B0LnRzX3JlY2VudF9zdGFtcAk9IHRjcHR3LT50d190c19yZWNlbnRfc3RhbXA7Ci0JCQlwYXdzX3JlamVjdCA9IHRjcF9wYXdzX2NoZWNrKCZ0bXBfb3B0LCB0aC0+cnN0KTsKKwkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KCZ0bXBfb3B0LCB0aC0+cnN0KTsKIAkJfQogCX0KIApAQCAtMzk5LDcgKzM5OSw3IEBACiAKIAkJdGNwX3ByZXF1ZXVlX2luaXQobmV3dHApOwogCi0JCXRjcF9pbml0X3dsKG5ld3RwLCB0cmVxLT5zbnRfaXNuLCB0cmVxLT5yY3ZfaXNuKTsKKwkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnJjdl9pc24pOwogCiAJCW5ld3RwLT5zcnR0ID0gMDsKIAkJbmV3dHAtPm1kZXYgPSBUQ1BfVElNRU9VVF9JTklUOwpAQCAtNDM0LDkgKzQzNCw4IEBACiAJCW5ld3RwLT5yeF9vcHQuc2F3X3RzdGFtcCA9IDA7CiAKIAkJbmV3dHAtPnJ4X29wdC5kc2FjayA9IDA7Ci0JCW5ld3RwLT5yeF9vcHQuZWZmX3NhY2tzID0gMDsKLQogCQluZXd0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7CisKIAkJbmV3dHAtPnVyZ19kYXRhID0gMDsKIAogCQlpZiAoc29ja19mbGFnKG5ld3NrLCBTT0NLX0tFRVBPUEVOKSkKQEAgLTUxMiw3ICs1MTEsNyBAQAogCQkJICogZnJvbSBhbm90aGVyIGRhdGEuCiAJCQkgKi8KIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wID0gZ2V0X3NlY29uZHMoKSAtICgoVENQX1RJTUVPVVRfSU5JVC9IWik8PHJlcS0+cmV0cmFucyk7Ci0JCQlwYXdzX3JlamVjdCA9IHRjcF9wYXdzX2NoZWNrKCZ0bXBfb3B0LCB0aC0+cnN0KTsKKwkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KCZ0bXBfb3B0LCB0aC0+cnN0KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGRhMmMzYjguLmMxZjI1OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQ0MSwxMCArNDQxLDcgQEAKIAkJCSpwdHIrKyA9IGh0b25sKHNwW3RoaXNfc2Fja10uZW5kX3NlcSk7CiAJCX0KIAotCQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQkJdHAtPnJ4X29wdC5kc2FjayA9IDA7Ci0JCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzOwotCQl9CisJCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwogCX0KIH0KIApAQCAtNTUwLDYgKzU0Nyw3IEBACiAJc3RydWN0IHRjcF9za2JfY2IgKnRjYiA9IHNrYiA/IFRDUF9TS0JfQ0Ioc2tiKSA6IE5VTEw7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJdW5zaWduZWQgc2l6ZSA9IDA7CisJdW5zaWduZWQgaW50IGVmZl9zYWNrczsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJKm1kNSA9IHRwLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgc2spOwpAQCAtNTY4LDEwICs1NjYsMTEgQEAKIAkJc2l6ZSArPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOwogCX0KIAotCWlmICh1bmxpa2VseSh0cC0+cnhfb3B0LmVmZl9zYWNrcykpIHsKKwllZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CisJaWYgKHVubGlrZWx5KGVmZl9zYWNrcykpIHsKIAkJY29uc3QgdW5zaWduZWQgcmVtYWluaW5nID0gTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplOwogCQlvcHRzLT5udW1fc2Fja19ibG9ja3MgPQotCQkJbWluX3QodW5zaWduZWQsIHRwLT5yeF9vcHQuZWZmX3NhY2tzLAorCQkJbWluX3QodW5zaWduZWQsIGVmZl9zYWNrcywKIAkJCSAgICAgIChyZW1haW5pbmcgLSBUQ1BPTEVOX1NBQ0tfQkFTRV9BTElHTkVEKSAvCiAJCQkgICAgICBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spOwogCQlzaXplICs9IFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQgKwpAQCAtNjYzLDEwICs2NjIsMTQgQEAKIAl0aC0+dXJnX3B0cgkJPSAwOwogCiAJLyogVGhlIHVyZ19tb2RlIGNoZWNrIGlzIG5lY2Vzc2FyeSBkdXJpbmcgYSBiZWxvdyBzbmRfdW5hIHdpbiBwcm9iZSAqLwotCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmCi0JCSAgICAgYmV0d2Vlbih0cC0+c25kX3VwLCB0Y2ItPnNlcSArIDEsIHRjYi0+c2VxICsgMHhGRkZGKSkpIHsKLQkJdGgtPnVyZ19wdHIJCT0gaHRvbnModHAtPnNuZF91cCAtIHRjYi0+c2VxKTsKLQkJdGgtPnVyZwkJCT0gMTsKKwlpZiAodW5saWtlbHkodGNwX3VyZ19tb2RlKHRwKSAmJiBiZWZvcmUodGNiLT5zZXEsIHRwLT5zbmRfdXApKSkgeworCQlpZiAoYmVmb3JlKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMHgxMDAwMCkpIHsKKwkJCXRoLT51cmdfcHRyID0gaHRvbnModHAtPnNuZF91cCAtIHRjYi0+c2VxKTsKKwkJCXRoLT51cmcgPSAxOworCQl9IGVsc2UgaWYgKGFmdGVyKHRjYi0+c2VxICsgMHhGRkZGLCB0cC0+c25kX254dCkpIHsKKwkJCXRoLT51cmdfcHRyID0gMHhGRkZGOworCQkJdGgtPnVyZyA9IDE7CisJCX0KIAl9CiAKIAl0Y3Bfb3B0aW9uc193cml0ZSgoX19iZTMyICopKHRoICsgMSksIHRwLCAmb3B0cywgJm1kNV9oYXNoX2xvY2F0aW9uKTsKQEAgLTc2MywxMSArNzY2LDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOwogCWludCBubGVuOwotCXUxNiBmbGFnczsKKwl1OCBmbGFnczsKIAogCUJVR19PTihsZW4gPiBza2ItPmxlbik7CiAKLQl0Y3BfY2xlYXJfcmV0cmFuc19oaW50c19wYXJ0aWFsKHRwKTsKIAluc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYikgLSBsZW47CiAJaWYgKG5zaXplIDwgMCkKIAkJbnNpemUgPSAwOwpAQCAtODUwLDYgKzg1MiwxMiBAQAogCQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7CiAJCX0KIAkJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkaWZmKTsKKworCQlpZiAodHAtPmxvc3Rfc2tiX2hpbnQgJiYKKwkJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKKwkJCSAgIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCisJCSAgICAodGNwX2lzX2ZhY2sodHApIHx8IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSkKKwkJCXRwLT5sb3N0X2NudF9oaW50IC09IGRpZmY7CiAJfQogCiAJLyogTGluayBCVUZGIGludG8gdGhlIHNlbmQgcXVldWUuICovCkBAIC05MTMsNyArOTIxLDcgQEAKIAkgKiBmYWN0b3IgYW5kIG1zcy4KIAkgKi8KIAlpZiAodGNwX3NrYl9wY291bnQoc2tiKSA+IDEpCi0JCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSkpOworCQl0Y3Bfc2V0X3NrYl90c29fc2Vncyhzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTc0LDE1ICs5ODIsNiBAQAogCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gMDsKIH0KIAotLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqLwotc3RhdGljIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCi17Ci0JaWYgKHRwLT5tYXhfd2luZG93ICYmIHBrdHNpemUgPiAodHAtPm1heF93aW5kb3cgPj4gMSkpCi0JCXJldHVybiBtYXgodHAtPm1heF93aW5kb3cgPj4gMSwgNjhVIC0gdHAtPnRjcF9oZWFkZXJfbGVuKTsKLQllbHNlCi0JCXJldHVybiBwa3RzaXplOwotfQotCiAvKiBUaGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplIHNuZCBtc3MgdG8gY3VycmVudCBwbXR1L2V4dGhkciBzZXQuCiAKICAgIHRwLT5yeF9vcHQudXNlcl9tc3MgaXMgbXNzIHNldCBieSB1c2VyIGJ5IFRDUF9NQVhTRUcuIEl0IGRvZXMgTk9UIGNvdW50cwpAQCAtMTAyOSwyMiArMTAyOCwxNyBAQAogLyogQ29tcHV0ZSB0aGUgY3VycmVudCBlZmZlY3RpdmUgTVNTLCB0YWtpbmcgU0FDS3MgYW5kIElQIG9wdGlvbnMsCiAgKiBhbmQgZXZlbiBQTVRVIGRpc2NvdmVyeSBldmVudHMgaW50byBhY2NvdW50LgogICovCi11bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IGxhcmdlX2FsbG93ZWQpCit1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spOwogCXUzMiBtc3Nfbm93OwotCXUxNiB4bWl0X3NpemVfZ29hbDsKLQlpbnQgZG9pbmdfdHNvID0gMDsKIAl1bnNpZ25lZCBoZWFkZXJfbGVuOwogCXN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKm1kNTsKIAogCW1zc19ub3cgPSB0cC0+bXNzX2NhY2hlOwogCi0JaWYgKGxhcmdlX2FsbG93ZWQgJiYgc2tfY2FuX2dzbyhzaykpCi0JCWRvaW5nX3RzbyA9IDE7Ci0KIAlpZiAoZHN0KSB7CiAJCXUzMiBtdHUgPSBkc3RfbXR1KGRzdCk7CiAJCWlmIChtdHUgIT0gaW5ldF9jc2soc2spLT5pY3NrX3BtdHVfY29va2llKQpAQCAtMTA2MiwxOSArMTA1Niw2IEBACiAJCW1zc19ub3cgLT0gZGVsdGE7CiAJfQogCi0JeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OwotCi0JaWYgKGRvaW5nX3RzbykgewotCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KLQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KLQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCi0JCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCi0JCXhtaXRfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCB4bWl0X3NpemVfZ29hbCk7Ci0JCXhtaXRfc2l6ZV9nb2FsIC09ICh4bWl0X3NpemVfZ29hbCAlIG1zc19ub3cpOwotCX0KLQl0cC0+eG1pdF9zaXplX2dvYWwgPSB4bWl0X3NpemVfZ29hbDsKLQogCXJldHVybiBtc3Nfbm93OwogfQogCkBAIC0xMjU2LDcgKzEyMzcsNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKTsKIAogCXJldHVybiAoc2tiICYmCi0JCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2ssIDEpLAorCQl0Y3Bfc25kX3Rlc3Qoc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrKSwKIAkJCSAgICAgKHRjcF9za2JfaXNfbGFzdChzaywgc2tiKSA/CiAJCQkgICAgICB0cC0+bm9uYWdsZSA6IFRDUF9OQUdMRV9QVVNIKSkpOwogfQpAQCAtMTI3Myw3ICsxMjU0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbmxlbiA9IHNrYi0+bGVuIC0gbGVuOwotCXUxNiBmbGFnczsKKwl1OCBmbGFnczsKIAogCS8qIEFsbCBvZiBhIFRTTyBmcmFtZSBtdXN0IGJlIGNvbXBvc2VkIG9mIHBhZ2VkIGRhdGEuICAqLwogCWlmIChza2ItPmxlbiAhPSBza2ItPmRhdGFfbGVuKQpAQCAtMTM1Miw2ICsxMzMzLDEwIEBACiAJaWYgKGxpbWl0ID49IHNrLT5za19nc29fbWF4X3NpemUpCiAJCWdvdG8gc2VuZF9ub3c7CiAKKwkvKiBNaWRkbGUgaW4gcXVldWUgd29uJ3QgZ2V0IGFueSBtb3JlIGRhdGEsIGZ1bGwgc2VuZGFibGUgYWxyZWFkeT8gKi8KKwlpZiAoKHNrYiAhPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzaykpICYmIChsaW1pdCA+PSBza2ItPmxlbikpCisJCWdvdG8gc2VuZF9ub3c7CisKIAlpZiAoc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3IpIHsKIAkJdTMyIGNodW5rID0gbWluKHRwLT5zbmRfd25kLCB0cC0+c25kX2N3bmQgKiB0cC0+bXNzX2NhY2hlKTsKIApAQCAtMTQwNSwxMSArMTM5MCwxMSBAQAogCSAgICBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSB8fAogCSAgICBpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gfHwKIAkgICAgdHAtPnNuZF9jd25kIDwgMTEgfHwKLQkgICAgdHAtPnJ4X29wdC5lZmZfc2Fja3MpCisJICAgIHRwLT5yeF9vcHQubnVtX3NhY2tzIHx8IHRwLT5yeF9vcHQuZHNhY2spCiAJCXJldHVybiAtMTsKIAogCS8qIFZlcnkgc2ltcGxlIHNlYXJjaCBzdHJhdGVneToganVzdCBkb3VibGUgdGhlIE1TUy4gKi8KLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAlwcm9iZV9zaXplID0gMiAqIHRwLT5tc3NfY2FjaGU7CiAJc2l6ZV9uZWVkZWQgPSBwcm9iZV9zaXplICsgKHRwLT5yZW9yZGVyaW5nICsgMSkgKiB0cC0+bXNzX2NhY2hlOwogCWlmIChwcm9iZV9zaXplID4gdGNwX210dV90b19tc3Moc2ssIGljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCkpIHsKQEAgLTE3NTQsMTEgKzE3MzksOSBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpuZXh0X3NrYiA9IHRjcF93cml0ZV9xdWV1ZV9uZXh0KHNrLCBza2IpOwogCWludCBza2Jfc2l6ZSwgbmV4dF9za2Jfc2l6ZTsKLQl1MTYgZmxhZ3M7CiAKIAlza2Jfc2l6ZSA9IHNrYi0+bGVuOwogCW5leHRfc2tiX3NpemUgPSBuZXh0X3NrYi0+bGVuOwotCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKIAogCUJVR19PTih0Y3Bfc2tiX3Bjb3VudChza2IpICE9IDEgfHwgdGNwX3NrYl9wY291bnQobmV4dF9za2IpICE9IDEpOwogCkBAIC0xNzc4LDkgKzE3NjEsOCBAQAogCS8qIFVwZGF0ZSBzZXF1ZW5jZSByYW5nZSBvbiBvcmlnaW5hbCBza2IuICovCiAJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID0gVENQX1NLQl9DQihuZXh0X3NrYiktPmVuZF9zZXE7CiAKLQkvKiBNZXJnZSBvdmVyIGNvbnRyb2wgaW5mb3JtYXRpb24uICovCi0JZmxhZ3MgfD0gVENQX1NLQl9DQihuZXh0X3NrYiktPmZsYWdzOyAvKiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCi0JVENQX1NLQl9DQihza2IpLT5mbGFncyA9IGZsYWdzOworCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gVGhpcyBtb3ZlcyBQU0gvRklOIGV0Yy4gb3ZlciAqLworCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQX1NLQl9DQihuZXh0X3NrYiktPmZsYWdzOwogCiAJLyogQWxsIGRvbmUsIGdldCByaWQgb2Ygc2Vjb25kIFNLQiBhbmQgYWNjb3VudCBmb3IgaXQgc28KIAkgKiBwYWNrZXQgY291bnRpbmcgZG9lcyBub3QgYnJlYWsuCkBAIC0xODk0LDcgKzE4NzYsNyBAQAogCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5yZWJ1aWxkX2hlYWRlcihzaykpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOyAvKiBSb3V0aW5nIGZhaWx1cmUgb3Igc2ltaWxhci4gKi8KIAotCWN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCWN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJLyogSWYgcmVjZWl2ZXIgaGFzIHNocnVuayBoaXMgd2luZG93LCBhbmQgc2tiIGlzIG91dCBvZgogCSAqIG5ldyB3aW5kb3csIGRvIG5vdCByZXRyYW5zbWl0IGl0LiBUaGUgZXhjZXB0aW9uIGlzIHRoZQpAQCAtMTkwOCw2ICsxODkwLDggQEAKIAlpZiAoc2tiLT5sZW4gPiBjdXJfbXNzKSB7CiAJCWlmICh0Y3BfZnJhZ21lbnQoc2ssIHNrYiwgY3VyX21zcywgY3VyX21zcykpCiAJCQlyZXR1cm4gLUVOT01FTTsgLyogV2UnbGwgdHJ5IGFnYWluIGxhdGVyLiAqLworCX0gZWxzZSB7CisJCXRjcF9pbml0X3Rzb19zZWdzKHNrLCBza2IsIGN1cl9tc3MpOwogCX0KIAogCXRjcF9yZXRyYW5zX3RyeV9jb2xsYXBzZShzaywgc2tiLCBjdXJfbXNzKTsKQEAgLTIwNjEsNyArMjA0NSw3IEBACiAJCQlnb3RvIGJlZ2luX2Z3ZDsKIAogCQl9IGVsc2UgaWYgKCEoc2Fja2VkICYgVENQQ0JfTE9TVCkpIHsKLQkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCisJCQlpZiAoaG9sZSA9PSBOVUxMICYmICEoc2Fja2VkICYgKFRDUENCX1NBQ0tFRF9SRVRSQU5TfFRDUENCX1NBQ0tFRF9BQ0tFRCkpKQogCQkJCWhvbGUgPSBza2I7CiAJCQljb250aW51ZTsKIApAQCAtMjEwMCw3ICsyMDg0LDcgQEAKIAkgKiB1bnNlbnQgZnJhbWVzLiAgQnV0IGJlIGNhcmVmdWwgYWJvdXQgb3V0Z29pbmcgU0FDS1MKIAkgKiBhbmQgSVAgb3B0aW9ucy4KIAkgKi8KLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAxKTsKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAogCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSAhPSBOVUxMKSB7CiAJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQQ0JfRkxBR19GSU47CkBAIC0yMzI1LDcgKzIzMDksNyBAQAogCXNrLT5za19lcnIgPSAwOwogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19ET05FKTsKIAl0cC0+c25kX3duZCA9IDA7Ci0JdGNwX2luaXRfd2wodHAsIHRwLT53cml0ZV9zZXEsIDApOworCXRjcF9pbml0X3dsKHRwLCAwKTsKIAl0cC0+c25kX3VuYSA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF9zbWwgPSB0cC0+d3JpdGVfc2VxOwogCXRwLT5zbmRfdXAgPSB0cC0+d3JpdGVfc2VxOwpAQCAtMjUxMiw3ICsyNDk2LDcgQEAKIAlpZiAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSAhPSBOVUxMICYmCiAJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdGNwX3duZF9lbmQodHApKSkgewogCQlpbnQgZXJyOwotCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwkJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJCXVuc2lnbmVkIGludCBzZWdfc2l6ZSA9IHRjcF93bmRfZW5kKHRwKSAtIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCiAJCWlmIChiZWZvcmUodHAtPnB1c2hlZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfcHJvYmUuYyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCmluZGV4IDI1NTI0ZDQuLjU5ZjViNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9wcm9iZS5jCisrKyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCkBAIC0xNjUsOSArMTY1LDEwIEBACiBzdGF0aWMgc3NpemVfdCB0Y3Bwcm9iZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGVycm9yID0gMCwgY250ID0gMDsKKwlpbnQgZXJyb3IgPSAwOworCXNpemVfdCBjbnQgPSAwOwogCi0JaWYgKCFidWYgfHwgbGVuIDwgMCkKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3aGlsZSAoY250IDwgbGVuKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCmluZGV4IDQ2NjBiMDguLmE3NjUxMzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCisrKyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCkBAIC0yNCwxNCArMjQsOCBAQAogCiAJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQogCQl0Y3Bfc2xvd19zdGFydCh0cCk7Ci0JZWxzZSB7Ci0JCXRwLT5zbmRfY3duZF9jbnQrKzsKLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPiBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSl7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KLQl9CisJZWxzZQorCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgbWluKHRwLT5zbmRfY3duZCwgVENQX1NDQUxBQkxFX0FJX0NOVCkpOwogfQogCiBzdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDAxNzBlOTEuLmIxNDRhMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0zMjgsMTkgKzMyOCwxNiBAQAogCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID09IDApIHsKIAkJaW50IG1pYl9pZHg7CiAKLQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyIHx8Ci0JCSAgICBpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgewotCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLRkFJTFVSRVM7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PRkFJTFVSRVM7Ci0JCQl9CisJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9EaXNvcmRlcikgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKKwkJfSBlbHNlIGlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7CisJCQllbHNlCisJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwogCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0xvc3MpIHsKIAkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQTE9TU0ZBSUxVUkVTOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Zlbm8uYyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKaW5kZXggZDA4YjJlOC4uZTliYmZmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Zlbm8uYworKysgYi9uZXQvaXB2NC90Y3BfdmVuby5jCkBAIC0xNTksMTIgKzE1OSw3IEBACiAJCQkJLyogSW4gdGhlICJub24tY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiAgZXZlcnkgcnR0LgogCQkJCSAqLwotCQkJCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCQkJdHAtPnNuZF9jd25kKys7Ci0JCQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQkJCX0gZWxzZQotCQkJCQl0cC0+c25kX2N3bmRfY250Kys7CisJCQkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIEluIHRoZSAiY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiBldmVyeSBvdGhlciBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfeWVhaC5jIGIvbmV0L2lwdjQvdGNwX3llYWguYwppbmRleCA5ZWM4NDNhLi42NmI2ODIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfeWVhaC5jCisrKyBiL25ldC9pcHY0L3RjcF95ZWFoLmMKQEAgLTk0LDE0ICs5NCw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBSZW5vICovCi0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPCB0cC0+c25kX2N3bmQpCi0JCQl0cC0+c25kX2N3bmRfY250Kys7Ci0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCB0cC0+c25kX2N3bmQpOwogCX0KIAogCS8qIFRoZSBrZXkgcGxheWVycyBhcmUgdl92ZWdhcy5iZWdfc25kX3VuYSBhbmQgdl9iZWdfc25kX254dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggYzQ3Yzk4OS4uYmRhMDhhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoraW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDEgPSBpbmV0X3NrKHNrMSksICppbmV0MiA9IGluZXRfc2soc2syKTsKIApAQCAtNTk2LDYgKzU5Niw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCWlmICh1cC0+cGVuZGluZykgewogCQkvKgpAQCAtNjQzLDYgKzY0NCw5IEBACiAJaXBjLmFkZHIgPSBpbmV0LT5zYWRkcjsKIAogCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssICZpcGMuc2h0eCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgewogCQllcnIgPSBpcF9jbXNnX3NlbmQoc29ja19uZXQoc2spLCBtc2csICZpcGMpOwogCQlpZiAoZXJyKQpAQCAtMTE4MCw3ICsxMTg0LDcgQEAKIAkJCXNrID0gc2tuZXh0OwogCQl9IHdoaWxlIChza25leHQpOwogCX0gZWxzZQotCQlrZnJlZV9za2Ioc2tiKTsKKwkJY29uc3VtZV9za2Ioc2tiKTsKIAlzcGluX3VubG9jaygmaHNsb3QtPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTYxNCw3ICsxNjE4LDggQEAKIAl9IHdoaWxlIChzayAmJiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkgfHwgc2stPnNrX2ZhbWlseSAhPSBzdGF0ZS0+ZmFtaWx5KSk7CiAKIAlpZiAoIXNrKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOworCQlpZiAoc3RhdGUtPmJ1Y2tldCA8IFVEUF9IVEFCTEVfU0laRSkKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOwogCQlyZXR1cm4gdWRwX2dldF9maXJzdChzZXEsIHN0YXRlLT5idWNrZXQgKyAxKTsKIAl9CiAJcmV0dXJuIHNrOwpAQCAtMTYzMiw2ICsxNjM3LDkgQEAKIAogc3RhdGljIHZvaWQgKnVkcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogeworCXN0cnVjdCB1ZHBfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CisJc3RhdGUtPmJ1Y2tldCA9IFVEUF9IVEFCTEVfU0laRTsKKwogCXJldHVybiAqcG9zID8gdWRwX2dldF9pZHgoc2VxLCAqcG9zLTEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC0xODE1LDYgKzE4MjMsNyBAQAogRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfcG9sbCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOworRVhQT1JUX1NZTUJPTChpcHY0X3Jjdl9zYWRkcl9lcXVhbCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY19yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDJhZDI0YmEuLjYwZDkxOGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIHhmcm00X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJeGZybTRfZ2FyYmFnZV9jb2xsZWN0LAogCS51cGRhdGVfcG10dSA9CQl4ZnJtNF91cGRhdGVfcG10dSwKIAkuZGVzdHJveSA9CQl4ZnJtNF9kc3RfZGVzdHJveSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDEyMjBlMmMuLmE4MjE4YmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtNDAsNiArNDAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KQEAgLTU5MCw2ICs1OTEsNyBAQAogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSA9IE5VTEw7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CiAJaW50IGhhc2g7CiAJaW50IGVyciA9IDA7CiAJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHIpOwpAQCAtNjA2LDYgKzYwOCwxMSBAQAogCQlnb3RvIG91dDI7CiAJfQogCisJaWYgKGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgfHwgbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5kaXNhYmxlX2lwdjYpIHsKKwkJZXJyID0gLUVBQ0NFUzsKKwkJZ290byBvdXQyOworCX0KKwogCXdyaXRlX2xvY2soJmFkZHJjb25mX2hhc2hfbG9jayk7CiAKIAkvKiBJZ25vcmUgYWRkaW5nIGR1cGxpY2F0ZSBhZGRyZXNzZXMgb24gYW4gaW50ZXJmYWNlICovCkBAIC0xMjA5LDE2ICsxMjE2LDEyIEBACiAJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfSBlbHNlIGlmIChtaW5paGlzY29yZSA8IG1pbmlzY29yZSkgewotCQkJCQlzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSAqdG1wOwotCiAJCQkJCWlmIChoaXNjb3JlLT5pZmEpCiAJCQkJCQlpbjZfaWZhX3B1dChoaXNjb3JlLT5pZmEpOwogCiAJCQkJCWluNl9pZmFfaG9sZChzY29yZS0+aWZhKTsKIAotCQkJCQl0bXAgPSBoaXNjb3JlOwotCQkJCQloaXNjb3JlID0gc2NvcmU7Ci0JCQkJCXNjb3JlID0gdG1wOworCQkJCQlzd2FwKGhpc2NvcmUsIHNjb3JlKTsKIAogCQkJCQkvKiByZXN0b3JlIG91ciBpdGVyYXRvciAqLwogCQkJCQlzY29yZS0+aWZhID0gaGlzY29yZS0+aWZhOwpAQCAtMTM2Nyw0MCArMTM3MCw2IEBACiAJcmV0dXJuIGlmcDsKIH0KIAotaW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKLXsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwotCV9fYmUzMiBza19yY3Zfc2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwotCV9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKLQlpbnQgc2tfaXB2Nm9ubHkgPSBpcHY2X29ubHlfc29jayhzayk7Ci0JaW50IHNrMl9pcHY2b25seSA9IGluZXRfdjZfaXB2Nm9ubHkoc2syKTsKLQlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoc2tfcmN2X3NhZGRyNik7Ci0JaW50IGFkZHJfdHlwZTIgPSBzazJfcmN2X3NhZGRyNiA/IGlwdjZfYWRkcl90eXBlKHNrMl9yY3Zfc2FkZHI2KSA6IElQVjZfQUREUl9NQVBQRUQ7Ci0KLQlpZiAoIXNrMl9yY3Zfc2FkZHIgJiYgIXNrX2lwdjZvbmx5KQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKLQkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCi0JICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmCi0JICAgICFzazJfaXB2Nm9ubHkgJiYKLQkgICAgKCFzazJfcmN2X3NhZGRyIHx8ICFza19yY3Zfc2FkZHIgfHwgc2tfcmN2X3NhZGRyID09IHNrMl9yY3Zfc2FkZHIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCiAvKiBHZXRzIHJlZmVyZW5jZWQgYWRkcmVzcywgZGVzdHJveXMgaWZhZGRyICovCiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2RhZF9zdG9wKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKQEAgLTE0MzMsNiArMTQwMiwxMSBAQAogdm9pZCBhZGRyY29uZl9kYWRfZmFpbHVyZShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlmcC0+aWRldjsKKworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwKKwkJCWlmcC0+aWRldi0+ZGV2LT5uYW1lKTsKKwogCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgIWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKIAkJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAKQEAgLTE0NDMsMTEgKzE0MTcsMTIgQEAKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmaWZwLT5hZGRyLCAmYWRkcikpIHsKIAkJCS8qIERBRCBmYWlsZWQgZm9yIGxpbmstbG9jYWwgYmFzZWQgb24gTUFDIGFkZHJlc3MgKi8KIAkJCWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgPSAxOworCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogSVB2NiBiZWluZyBkaXNhYmxlZCFcbiIsCisJCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCQl9CiAJfQogCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwgaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCWFkZHJjb25mX2RhZF9zdG9wKGlmcCk7CiB9CiAKQEAgLTIyMjcsMTAgKzIyMDIsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBhZGRfYWRkcihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCSAgICAgaW50IHBsZW4sIGludCBzY29wZSkKK3sKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7CisKKwlpZnAgPSBpcHY2X2FkZF9hZGRyKGlkZXYsIGFkZHIsIHBsZW4sIHNjb3BlLCBJRkFfRl9QRVJNQU5FTlQpOworCWlmICghSVNfRVJSKGlmcCkpIHsKKwkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOworCQlpZnAtPmZsYWdzICY9IH5JRkFfRl9URU5UQVRJVkU7CisJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7CisJCWluNl9pZmFfcHV0KGlmcCk7CisJfQorfQorCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9TSVQpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfU0lUX01PRFVMRSkKIHN0YXRpYyB2b2lkIHNpdF9hZGRfdjRfYWRkcnMoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwogCXN0cnVjdCBpbjZfYWRkciBhZGRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpZGV2LT5kZXYpOwpAQCAtMjI0OSwxNCArMjIzOCw3IEBACiAJfQogCiAJaWYgKGFkZHIuczZfYWRkcjMyWzNdKSB7Ci0JCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgJmFkZHIsIDEyOCwgc2NvcGUsIElGQV9GX1BFUk1BTkVOVCk7Ci0JCWlmICghSVNfRVJSKGlmcCkpIHsKLQkJCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJaXB2Nl9pZmFfbm90aWZ5KFJUTV9ORVdBRERSLCBpZnApOwotCQkJaW42X2lmYV9wdXQoaWZwKTsKLQkJfQorCQlhZGRfYWRkcihpZGV2LCAmYWRkciwgMTI4LCBzY29wZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyODQsMTUgKzIyNjYsNyBAQAogCQkJCWVsc2UKIAkJCQkJcGxlbiA9IDk2OwogCi0JCQkJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmYWRkciwgcGxlbiwgZmxhZywKLQkJCQkJCSAgICBJRkFfRl9QRVJNQU5FTlQpOwotCQkJCWlmICghSVNfRVJSKGlmcCkpIHsKLQkJCQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJCQlpZnAtPmZsYWdzICY9IH5JRkFfRl9URU5UQVRJVkU7Ci0JCQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7Ci0JCQkJCWluNl9pZmFfcHV0KGlmcCk7Ci0JCQkJfQorCQkJCWFkZF9hZGRyKGlkZXYsICZhZGRyLCBwbGVuLCBmbGFnKTsKIAkJCX0KIAkJfQogCX0KQEAgLTIzMDIsNyArMjI3Niw2IEBACiBzdGF0aWMgdm9pZCBpbml0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAgKmlkZXY7Ci0Jc3RydWN0IGluZXQ2X2lmYWRkciAqIGlmcDsKIAogCS8qIDo6MSAqLwogCkBAIC0yMzEzLDE0ICsyMjg2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QsIElGQV9GX1BFUk1BTkVOVCk7Ci0JaWYgKCFJU19FUlIoaWZwKSkgewotCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKLQkJaW42X2lmYV9wdXQoaWZwKTsKLQl9CisJYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRyY29uZl9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKQEAgLTI4MzIsMTEgKzI3OTgsNiBAQAogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoaWRldi0+Y25mLmFjY2VwdF9kYWQgPiAxICYmIGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKLQkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQlhZGRyY29uZl9kYWRfZmFpbHVyZShpZnApOwotCQlyZXR1cm47Ci0JfQogCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKIAlpZiAoaWZwLT5wcm9iZXMgPT0gMCkgewogCQkvKgpAQCAtMzY0Nyw3ICszNjA4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X0lGQUREUiwgZXJyKTsKQEAgLTM4NTgsNyArMzgyMCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CkBAIC0zOTI4LDcgKzM4OTEsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X1BSRUZJWCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUFJFRklYLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggOWM4MzA5ZS4uNjFmNTUzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yNzYsMTEgKzI3NiwyNiBAQAogCiAJLyogQ2hlY2sgaWYgdGhlIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgaG9zdC4gKi8KIAlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpIHsKLQkJdjRhZGRyID0gYWRkci0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsKLQkJaWYgKGluZXRfYWRkcl90eXBlKG5ldCwgdjRhZGRyKSAhPSBSVE5fTE9DQUwpIHsKLQkJCWVyciA9IC1FQUREUk5PVEFWQUlMOworCQlpbnQgY2hrX2FkZHJfcmV0OworCisJCS8qIEJpbmRpbmcgdG8gdjQtbWFwcGVkIGFkZHJlc3Mgb24gYSB2Ni1vbmx5IHNvY2tldAorCQkgKiBtYWtlcyBubyBzZW5zZQorCQkgKi8KKwkJaWYgKG5wLT5pcHY2b25seSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CisKKwkJLyogUmVwcm9kdWNlIEFGX0lORVQgY2hlY2tzIHRvIG1ha2UgdGhlIGJpbmRpbmdzIGNvbnNpdGFudCAqLworCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOworCQljaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZShuZXQsIHY0YWRkcik7CisJCWlmICghc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgJiYKKwkJICAgICEoaW5ldC0+ZnJlZWJpbmQgfHwgaW5ldC0+dHJhbnNwYXJlbnQpICYmCisJCSAgICB2NGFkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSkgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTVVMVElDQVNUICYmCisJCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0JST0FEQ0FTVCkKKwkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkgewogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC0zMzksOCArMzU0LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkKKwlpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpIHsKIAkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRBRERSX0xPQ0s7CisJCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX01BUFBFRCkKKwkJCW5wLT5pcHY2b25seSA9IDE7CisJfQogCWlmIChzbnVtKQogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklORFBPUlRfTE9DSzsKIAlpbmV0LT5zcG9ydCA9IGh0b25zKGluZXQtPm51bSk7CkBAIC04MDMsMjQgKzgyMSwzNCBAQAogCWludCBwcm90bzsKIAlfX3dzdW0gY3N1bTsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQorCWlwaCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlpZiAodW5saWtlbHkoIWlwaCkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gaXB2Nl9oZHIoc2tiKTsKLQlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCi0JZmx1c2ggKz0gbnRvaHMoaXBoLT5wYXlsb2FkX2xlbikgIT0gc2tiLT5sZW47CisJZmx1c2ggKz0gbnRvaHMoaXBoLT5wYXlsb2FkX2xlbikgIT0gc2tiX2dyb19sZW4oc2tiKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlwcm90byA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwaC0+bmV4dGhkcik7Ci0JaXBoID0gaXB2Nl9oZHIoc2tiKTsKLQlJUFY2X0dST19DQihza2IpLT5wcm90byA9IHByb3RvOworCXByb3RvID0gaXBoLT5uZXh0aGRyOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbcHJvdG9dKTsKLQlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKSB7CisJCV9fcHNrYl9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CisJCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgcHJvdG8pOworCQlza2JfZ3JvX3B1bGwoc2tiLCAtc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7CisJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CisJCV9fc2tiX3B1c2goc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKworCQlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQlpcGggPSBpcHY2X2hkcihza2IpOworCX0KKworCUlQVjZfR1JPX0NCKHNrYiktPnByb3RvID0gcHJvdG87CiAKIAlmbHVzaC0tOwotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJbmxlbiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAogCWZvciAocCA9ICpoZWFkOyBwOyBwID0gcC0+bmV4dCkgewpAQCAtODgzLDggKzkxMSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB2Nl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmZ1bmMgPSBpcHY2X3JjdiwKIAkuZ3NvX3NlbmRfY2hlY2sgPSBpcHY2X2dzb19zZW5kX2NoZWNrLAogCS5nc29fc2VnbWVudCA9IGlwdjZfZ3NvX3NlZ21lbnQsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IGYxNzFlOGQuLjhmMDRiZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC03NSw4ICs3NSw3IEBACiAJaWYgKChza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCB8fAogCSAgICAhaWRldiB8fCB1bmxpa2VseShpZGV2LT5jbmYuZGlzYWJsZV9pcHY2KSkgewogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlnb3RvIG91dDsKKwkJZ290byBkcm9wOwogCX0KIAogCW1lbXNldChJUDZDQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7CkBAIC0xNDcsNyArMTQ2LDYgQEAKIGRyb3A6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJa2ZyZWVfc2tiKHNrYik7Ci1vdXQ6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCA0MGYzMjQ2Li5kMzFkZjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0yMTgsOCArMjE4LDcgQEAKIAkJCWlmIChvcHQpCiAJCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJCQlwa3RvcHQgPSB4Y2hnKCZucC0+cGt0b3B0aW9ucywgTlVMTCk7Ci0JCQlpZiAocGt0b3B0KQotCQkJCWtmcmVlX3NrYihwa3RvcHQpOworCQkJa2ZyZWVfc2tiKHBrdG9wdCk7CiAKIAkJCXNrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKIAkJCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCAzZTI5NzA4Li45ZjA2MWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEwOTUsMTEgKzEwOTUsNyBAQAogCQkmaXB2Nl9oZHIocmEpLT5zYWRkcik7CiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsCi0JCQkgIEdGUF9BVE9NSUMpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dDsKLQorCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJldHVybjsKIAogbmxhX3B1dF9mYWlsdXJlOgpAQCAtMTUzOCwxMyArMTUzNCwxMCBAQAogCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSB7CiAJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiBkZXN0aW5hdGlvbiBpcyBub3QgYSBuZWlnaGJvdXIuXG4iKTsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOworCQlnb3RvIHJlbGVhc2U7CiAJfQotCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkgewotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47Ci0JfQorCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGRldi0+YWRkcl9sZW4pIHsKIAkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CkBAIC0xNTcwLDggKzE1NjMsNyBAQAogCQlORF9QUklOVEswKEtFUk5fRVJSCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiAlcygpIGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBza2IuXG4iLAogCQkJICAgX19mdW5jX18pOwotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47CisJCWdvdG8gcmVsZWFzZTsKIAl9CiAKIAlza2JfcmVzZXJ2ZShidWZmLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKQEAgLTE2MzEsNiArMTYyMywxMCBAQAogCiAJaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKKwlyZXR1cm47CisKK3JlbGVhc2U6CisJZHN0X3JlbGVhc2UoZHN0KTsKIH0KIAogc3RhdGljIHZvaWQgcG5kaXNjX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNTNlYTUxMi4uMjlkNjQzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTk1LDEzICs5NSwxMyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSEwKLQl0cmlzdGF0ZSAnImhsIiBtYXRjaCBzdXBwb3J0JworCXRyaXN0YXRlICciaGwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBITCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcAotCSAgbGltaXQgb2YgdGhlIHBhY2tldC4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwuCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUgogCXRyaXN0YXRlICciaXB2NmhlYWRlciIgSVB2NiBFeHRlbnNpb24gSGVhZGVycyBNYXRjaCcKQEAgLTEzMCw2ICsxMzAsMTUgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiAjIFRoZSB0YXJnZXRzCitjb25maWcgSVA2X05GX1RBUkdFVF9ITAorCXRyaXN0YXRlICciSEwiIGhvcGxpbWl0IHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJc2VsZWN0IE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KKwogY29uZmlnIElQNl9ORl9UQVJHRVRfTE9HCiAJdHJpc3RhdGUgIkxPRyB0YXJnZXQgc3VwcG9ydCIKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTE3MCwyMyArMTc5LDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUDZfTkZfVEFSR0VUX0hMCi0JdHJpc3RhdGUgICdITCAoaG9wbGltaXQpIHRhcmdldCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVA2X05GX01BTkdMRQotCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBITCcgdGFyZ2V0LCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIGRlY3JlbWVudAotCSAgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZSBJUHY2IGhlYWRlciBvciBzZXQgaXQgdG8gYSBnaXZlbiAobG93ZXIpCi0JICB2YWx1ZS4KLQotCSAgV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQgdGhlIGhvcGxpbWl0IHZhbHVlLCB0aGlzIG9wdGlvbiBhbHNvCi0JICBlbmFibGVzIGZ1bmN0aW9uYWxpdHkgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZQotCSAgSVB2NiBoZWFkZXIgdG8gYXJiaXRyYXJ5IHZhbHVlcy4gIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUyBzaW5jZQotCSAgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wIGZvcmV2ZXIgb24gdGhlCi0JICBuZXR3b3JrLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQNl9ORl9SQVcKIAl0cmlzdGF0ZSAgJ3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggM2YxN2M5NC4uYWFmYmJhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMjAsMTMgKzIwLDExIEBACiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0FIKSArPSBpcDZ0X2FoLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQpICs9IGlwNnRfZXVpNjQubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwotb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9ITCkgKz0gaXA2dF9obC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIpICs9IGlwNnRfaXB2NmhlYWRlci5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgKz0gaXA2dF9ydC5vCiAKICMgdGFyZ2V0cwotb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwpICs9IGlwNnRfSEwubwogb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HKSArPSBpcDZ0X0xPRy5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwNnRfUkVKRUNULm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCA1ODU5YzA0Li5iNjkzZjg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfSVA2X0ZXKTsKIAogbW9kdWxlX2luaXQoaXA2X3F1ZXVlX2luaXQpOwogbW9kdWxlX2V4aXQoaXA2X3F1ZXVlX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggYTMzNDg1ZC4uZTg5Y2ZhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC05OSw3ICs5OSw2IEBACiAJCSB1bnNpZ25lZCBpbnQgKnByb3RvZmYsCiAJCSBpbnQgKmZyYWdvZmYsIGJvb2wgKmhvdGRyb3ApCiB7Ci0Jc2l6ZV90IGk7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjYgPSBpcHY2X2hkcihza2IpOwogCkBAIC0xMjAsMTIgKzExOSw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlczsgdGhpcyBzaG91bGQgdW5yb2xsIG5pY2VseS4gKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+aW5pZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPmluaWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoaW5kZXYsIGlwNmluZm8tPmluaWZhY2UsIGlwNmluZm8tPmluaWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQNlRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMzQsMTEgKzEyOCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+b3V0aWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQob3V0ZGV2LCBpcDZpbmZvLT5vdXRpZmFjZSwgaXA2aW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQNlRfSU5WX1ZJQV9PVVQpKSB7CiAJCWRwcmludGYoIlZJQSBvdXQgbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTM3MywxMCArMzYzLDEyIEBACiAJbXRwYXIuZmFtaWx5ICA9IHRncGFyLmZhbWlseSA9IE5GUFJPVE9fSVBWNjsKIAl0Z3Bhci5ob29rbnVtID0gaG9vazsKIAotCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7Ci0JcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwotCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwcml2YXRlID0gcmN1X2RlcmVmZXJlbmNlKHRhYmxlLT5wcml2YXRlKTsKKwl0YWJsZV9iYXNlID0gcmN1X2RlcmVmZXJlbmNlKHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCiAJLyogRm9yIHJldHVybiBmcm9tIGJ1aWx0aW4gY2hhaW4gKi8KQEAgLTQ3NCw3ICs0NjYsNyBAQAogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKIAkoKHN0cnVjdCBpcDZ0X2VudHJ5ICopdGFibGVfYmFzZSktPmNvbWVmcm9tID0gTkVURklMVEVSX0xJTktfUE9JU09OOwogI2VuZGlmCi0JcmVhZF91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CkBAIC01MjUsNyArNTE3LDkgQEAKIAkJCSAgICAmJiB1bmNvbmRpdGlvbmFsKCZlLT5pcHY2KSkgfHwgdmlzaXRlZCkgewogCQkJCXVuc2lnbmVkIGludCBvbGRwb3MsIHNpemU7CiAKLQkJCQlpZiAodC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKKwkJCQlpZiAoKHN0cmNtcCh0LT50YXJnZXQudS51c2VyLm5hbWUsCisJCQkJCSAgICBJUDZUX1NUQU5EQVJEX1RBUkdFVCkgPT0gMCkgJiYKKwkJCQkgICAgdC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKIAkJCQkJZHVwcmludGYoIm1hcmtfc291cmNlX2NoYWluczogYmFkICIKIAkJCQkJCSJuZWdhdGl2ZSB2ZXJkaWN0ICglaSlcbiIsCiAJCQkJCQkJCXQtPnZlcmRpY3QpOwpAQCAtOTU1LDExICs5NDksNjQgQEAKIAl9CiB9CiAKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlJUDZUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICAgdC0+c2l6ZSwKKwkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICAgY291bnRlcnMsCisJCQkgICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGlwNnRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJSVA2VF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05NjgsMTQgKzEwMTUsMjggQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOwogCi0JcmV0dXJuIGNvdW50ZXJzOworCWNsb25lX2NvdW50ZXJzKGluZm8sIHByaXZhdGUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOworCXh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHByaXZhdGUsIGluZm8pOworCXN5bmNocm9uaXplX25ldCgpOwkvKiBXYWl0IHVudGlsIHNtb2tlIGhhcyBjbGVhcmVkICovCisKKwlnZXRfY291bnRlcnMoaW5mbywgY291bnRlcnMpOworCXB1dF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisKKwl4dF9mcmVlX3RhYmxlX2luZm8oaW5mbyk7CisKKyBmcmVlX2NvdW50ZXJzOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBub21lbToKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIGludApAQCAtMTM0MiwyOCArMTQwMyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCiAJCWludCBjb21wYXQpCkBAIC0xNDI0LDEzICsxNDYzLDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDM5LDggKzE0NzksOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2I1YWRmLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogSG9wIExpbWl0IG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIGlwNnRhYmxlcwotICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KLSAqIEJhc2VkIG9uIEhXJ3MgVFRMIG1vZHVsZQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHUEwKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjYgSG9wIExpbWl0IGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotaGxfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKLQljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X2hsOwotCi0JaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKLQkJcmV0dXJuIE5GX0RST1A7Ci0KLQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfU0VUOgotCQkJbmV3X2hsID0gaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9JTkM6Ci0JCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgKyBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlpZiAobmV3X2hsID4gMjU1KQotCQkJCW5ld19obCA9IDI1NTsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfREVDOgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0IC0gaW5mby0+aG9wX2xpbWl0OwotCQkJaWYgKG5ld19obCA8IDApCi0JCQkJbmV3X2hsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JfQotCi0JaXA2aC0+aG9wX2xpbWl0ID0gbmV3X2hsOwotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCi0JCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90ZzZfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJITCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLnRhcmdldAkJPSBobF90ZzYsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5CT0gaGxfdGc2X2NoZWNrLAotCS5tZQkJPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaGxfdGc2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZobF90ZzZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX3RnNl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmhsX3RnNl9yZWcpOwotfQotCi1tb2R1bGVfaW5pdChobF90ZzZfaW5pdCk7Ci1tb2R1bGVfZXhpdChobF90ZzZfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDM3YWRmNWEuLjcwMThjYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAkubWUgCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXA2dF9sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcDZ0X2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJpcDZ0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcDZ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjRkY2EuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUgKi8KLQotLyogKEMpIDIwMDEtMjAwMiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgotICogQmFzZWQgb24gSFcncyB0dGwgbW9kdWxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY2IEhvcCBMaW1pdCBmaWVsZCBtYXRjaCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgYm9vbCBobF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaGxfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfRVE6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID09IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTkU6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ICE9IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTFQ6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0IDwgaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9HVDoKLQkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPiBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfaGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGxfbXQ2X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJobCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLm1hdGNoCQk9IGhsX210NiwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2hsX2luZm8pLAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhsX210Nl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZobF9tdDZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX210Nl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaGxfbXQ2X3JlZyk7Ci19Ci0KLW1vZHVsZV9pbml0KGhsX210Nl9pbml0KTsKLW1vZHVsZV9leGl0KGhsX210Nl9leGl0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCA0MGQyZTM2Li5lZjVhMGEzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC01NCw3ICs1NCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IGQwYjMxYjIuLmFiMGQzOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X21hbmdsZXIgPSB7CiAJLm5hbWUJCT0gIm1hbmdsZSIsCiAJLnZhbGlkX2hvb2tzCT0gTUFOR0xFX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfbWFuZ2xlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCAxMDlmYWI2Li40Yjc5MmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0zOCw3ICszOCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCmluZGV4IDIwYmM1MmYuLjBlYTM3ZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCkBAIC01OSw3ICs1OSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHNlY3VyaXR5X3RhYmxlLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggNzI3Yjk1My4uMmExNWMyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIHN0YXRpYyBib29sIGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQpAQCAtMzQxLDYgKzM0MiwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaXB2Nl9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihpcHY2X25sYV9wb2xpY3ksIENUQV9JUF9NQVggKyAxKTsKK30KICNlbmRpZgogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NiBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMzUyLDYgKzM1OCw3IEBACiAJLmdldF9sNHByb3RvCQk9IGlwdjZfZ2V0X2w0cHJvdG8sCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IGlwdjZfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IGlwdjZfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IGlwdjZfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IGlwdjZfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggNzJkYmI2ZC4uOTkwMzIyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0xMjYsNiArMTI2LDEwIEBACiAJCXByX2RlYnVnKCJpY21wdjY6IGNhbid0IGNyZWF0ZSBuZXcgY29ubiB3aXRoIHR5cGUgJXVcbiIsCiAJCQkgdHlwZSArIDEyOCk7CiAJCW5mX2N0X2R1bXBfdHVwbGVfaXB2NigmY3QtPnR1cGxlaGFzaFswXS50dXBsZSk7CisJCWlmIChMT0dfSU5WQUxJRChuZl9jdF9uZXQoY3QpLCBJUFBST1RPX0lDTVBWNikpCisJCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X2ljbXB2NjogaW52YWxpZCBuZXcgd2l0aCB0eXBlICVkICIsCisJCQkJICAgICAgdHlwZSArIDEyOCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJYXRvbWljX3NldCgmY3QtPnByb3RvLmljbXAuY291bnQsIDApOwpAQCAtMjY1LDYgKzI2OSwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaWNtcHY2X25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKGljbXB2Nl9ubGFfcG9saWN5LCBDVEFfUFJPVE9fTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTI5Niw2ICszMDUsNyBAQAogCS5lcnJvcgkJCT0gaWNtcHY2X2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIJPSBpY21wdjZfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IGljbXB2Nl9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gaWNtcHY2X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBpY21wdjZfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggOWM1NzQyMy4uMTM5NGRkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC05OCw3ICs5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmdjCQkJPQlpcDZfZHN0X2djLAogCS5nY190aHJlc2gJCT0JMTAyNCwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKQEAgLTI0MDAsOCArMjQwMCw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAotCQkJICBpbmZvLT5ubGgsIGdmcF9hbnkoKSk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAorCQkgICAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA1Y2VlMmJjLi42NjRhYjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTY1OCw3ICs2NTgsOCBAQAogCX0KIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGU1Yjg1ZDQuLjRiNWFhMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNTMzLDggKzUzMyw3IEBACiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQlpZiAoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpCi0JCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CisJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCkBAIC05NDgsNyArOTQ3LDcgQEAKIAogCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgotCQlpZiAoIXRjcF92Nl9jaGVjayhza2ItPmxlbiwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92Nl9jaGVjayhza2JfZ3JvX2xlbihza2IpLCAmaXBoLT5zYWRkciwgJmlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CkBAIC0xNjExLDggKzE2MTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKG9wdF9za2IpCi0JCWtmcmVlX3NrYihvcHRfc2tiKTsKKwlrZnJlZV9za2Iob3B0X3NrYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggODRiMWEyOS4uNjg0MmRkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTQ5LDYgKzQ5LDM0IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJ1ZHBfaW1wbC5oIgogCitpbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoreworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7CisJaW50IHNrX2lwdjZvbmx5ID0gaXB2Nl9vbmx5X3NvY2soc2spOworCWludCBzazJfaXB2Nm9ubHkgPSBpbmV0X3Y2X2lwdjZvbmx5KHNrMik7CisJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKHNrX3Jjdl9zYWRkcjYpOworCWludCBhZGRyX3R5cGUyID0gc2syX3Jjdl9zYWRkcjYgPyBpcHY2X2FkZHJfdHlwZShzazJfcmN2X3NhZGRyNikgOiBJUFY2X0FERFJfTUFQUEVEOworCisJLyogaWYgYm90aCBhcmUgbWFwcGVkLCB0cmVhdCBhcyBJUHY0ICovCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkKKwkJcmV0dXJuIGlwdjRfcmN2X3NhZGRyX2VxdWFsKHNrLCBzazIpOworCisJaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCisJICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKKwkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHVkcF92Nl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7CiAJcmV0dXJuIHVkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggOTdhYjA2OC4uYjRiMTZhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTZfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZ2MgPQkJCXhmcm02X2dhcmJhZ2VfY29sbGVjdCwKIAkudXBkYXRlX3BtdHUgPQkJeGZybTZfdXBkYXRlX3BtdHUsCiAJLmRlc3Ryb3kgPQkJeGZybTZfZHN0X2Rlc3Ryb3ksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCAwZTY4NWIwLi5mNDE3Yjc3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJZHN0W2NvdW50W2NsYXNzW2ldIC0gMV0rK10gPSBzcmNbaV07Ci0JCXNyY1tpXSA9IDA7CisJCXNyY1tpXSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCBiNmU3MGY5Li4xNjI3MDUwIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE5NTgsMTMgKzE5NTgsMTMgQEAKIAogU09DS09QU19XUkFQKGlweF9kZ3JhbSwgUEZfSVBYKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfODAyM19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyksCiAJLmZ1bmMJCT0gaXB4X3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4X2RpeF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF9kaXhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9JUFgpLAogCS5mdW5jCQk9IGlweF9yY3YsCiB9OwogCkBAIC0xOTc1LDE1ICsxOTc1LDE1IEBACiBleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICptYWtlX0VJSV9jbGllbnQodm9pZCk7CiBleHRlcm4gdm9pZCBkZXN0cm95X0VJSV9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICopOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07Ci1zdGF0aWMgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF84MDIyX3R5cGUgPSAweEUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXB4X3NuYXBfaWRbNV0gPSB7IDB4MCwgMHgwLCAweDAsIDB4ODEsIDB4MzcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGlweF9FSUlfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggRXRoZXJuZXQgSUlcbiI7Ci1zdGF0aWMgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuM1xuIjsKLXN0YXRpYyBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4X2xsY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKLXN0YXRpYyBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIFNOQVBcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGlweF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwppbmRleCBlYTMxOWUzLi5iZjkyZTE0IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jCisrKyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKQEAgLTE0OSwxMyArMTQ5LDE0IEBACiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWRldi0+ZG9faW9jdGwpIHsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKSB7CiAJCUlSREFfRVJST1IoIiVzOiBkb19pb2N0bCBub3QgaW1wbC4gYnkgZGV2aWNlIGRyaXZlclxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldCA9IGRldi0+ZG9faW9jdGwoZGV2LCAoc3RydWN0IGlmcmVxICopICZyZXEsIFNJT0NHUkVDRUlWSU5HKTsKKwlyZXQgPSAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLAorCQkJCQkgICAgICBTSU9DR1JFQ0VJVklORyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMDUxMTJiZS4uNzI0YmNmOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTQ1LDYgKzQ1LDE2IEBACiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmxhbl9ldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBpcmxhbl9ldGhfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkgICAgICAgID0gaXJsYW5fZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2V0aF9zZXR1cCAoZGV2KQogICoKQEAgLTUzLDE0ICs2MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gaXJsYW5fZXRoX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0OworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmlybGFuX2V0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIAotCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKgogCSAqIExldHMgZG8gYWxsIHF1ZXVlaW5nIGluIElyVFRQIGluc3RlYWQgb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJtb2QuYyBiL25ldC9pcmRhL2lybW9kLmMKaW5kZXggNGM0ODdhOC4uMzAzYTY4ZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJtb2QuYworKysgYi9uZXQvaXJkYS9pcm1vZC5jCkBAIC01NSw4ICs1NSw4IEBACiAvKiBQYWNrZXQgdHlwZSBoYW5kbGVyLgogICogVGVsbCB0aGUga2VybmVsIGhvdyBJckRBIHBhY2tldHMgc2hvdWxkIGJlIGhhbmRsZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXJkYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVJEQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0lSREEpLAogCS5mdW5jCT0gaXJsYXBfZHJpdmVyX3JjdiwJLyogUGFja2V0IHR5cGUgaGFuZGxlciBpcmxhcF9mcmFtZS5jICovCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWI4YTJhMC4uNDllNzg2NSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMTE3MSw4ICsxMTcxLDcgQEAKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHRoaXMpCi0JCQlrZnJlZV9za2IodGhpcyk7CisJCWtmcmVlX3NrYih0aGlzKTsKIAl9CiAJQlVHX09OKCF0aGlzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggN2RjYmRlMy4uNjQzYzFiZSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0zMTMsOCArMzEzLDcgQEAKIAlpZiAob25lX3NrICE9IE5VTEwpCiAJCWVyciA9IHBma2V5X2Jyb2FkY2FzdF9vbmUoc2tiLCAmc2tiMiwgYWxsb2NhdGlvbiwgb25lX3NrKTsKIAotCWlmIChza2IyKQotCQlrZnJlZV9za2Ioc2tiMik7CisJa2ZyZWVfc2tiKHNrYjIpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTczLDggKzM1NzIsNyBAQAogb3V0OgogCWlmIChlcnIgJiYgaGRyICYmIHBma2V5X2Vycm9yKGhkciwgZXJyLCBzaykgPT0gMCkKIAkJZXJyID0gMDsKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBlcnIgPyA6IGxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDU2ZmQ4NWEuLmZlYmFlNzAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTExOCwxMSArMTExOCwxMSBAQAogCS5zZW5kcGFnZSAgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHByb2NfZnMgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3N5c2N0bF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHN5c2N0bCBlbnRyaWVzXG4iOwotc3RhdGljIGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGZhbWlseVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGxjMl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggNWM2ZDg5Yy4uMzQ3NzYyNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzMyLDggKzMzMiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGR1X3BvcyAmJiBpIDwgcV9sZW47IGkrKykgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmbGxjLT5wZHVfdW5hY2tfcSk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCW5icl9hY2tlZCsrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2NvcmUuYyBiL25ldC9sbGMvbGxjX2NvcmUuYwppbmRleCA1MGQ1YjEwLi5mZjRjMGFiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb3JlLmMKKysrIGIvbmV0L2xsYy9sbGNfY29yZS5jCkBAIC0xNDcsMTMgKzE0NywxMyBAQAogCWtmcmVlKHNhcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3RyX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUl84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfVFJfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCA3ZDQ5NzFhLi4wZTNhYjg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC04LDEzICs4LDE1IEBACiAJd2VwLm8gXAogCXdwYS5vIFwKIAlzY2FuLm8gXAotCWh0Lm8gXAorCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAorCWlic3MubyBcCiAJbWxtZS5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXAogCW1pY2hhZWwubyBcCiAJdGtpcC5vIFwKIAlhZXNfY2NtLm8gXAorCWFlc19jbWFjLm8gXAogCWNmZy5vIFwKIAlyeC5vIFwKIAlzcGVjdG1nbXQubyBcCkBAIC0zNyw2ICszOSw4IEBACiAJbWVzaF9wbGluay5vIFwKIAltZXNoX2h3bXAubwogCittYWM4MDIxMS0kKENPTkZJR19QTSkgKz0gcG0ubworCiAjIG9iamVjdHMgZm9yIFBJRCBhbGdvcml0aG0KIHJjODAyMTFfcGlkLXkgOj0gcmM4MDIxMV9waWRfYWxnby5vCiByYzgwMjExX3BpZC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX3BpZF9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwOTdiMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQUVTLTEyOC1DTUFDIHdpdGggVExlbiAxNiBmb3IgSUVFRSA4MDIuMTF3IEJJUAorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImtleS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCisKKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKKyNkZWZpbmUgQUVTX0NNQUNfS0VZX0xFTiAxNgorI2RlZmluZSBDTUFDX1RMRU4gOCAvKiBDTUFDIFRMZW4gPSA2NCBiaXRzICg4IG9jdGV0cykgKi8KKyNkZWZpbmUgQUFEX0xFTiAyMAorCisKK3N0YXRpYyB2b2lkIGdmX211bHgodTggKnBhZCkKK3sKKwlpbnQgaSwgY2Fycnk7CisKKwljYXJyeSA9IHBhZFswXSAmIDB4ODA7CisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFIC0gMTsgaSsrKQorCQlwYWRbaV0gPSAocGFkW2ldIDw8IDEpIHwgKHBhZFtpICsgMV0gPj4gNyk7CisJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gPDw9IDE7CisJaWYgKGNhcnJ5KQorCQlwYWRbQUVTX0JMT0NLX1NJWkUgLSAxXSBePSAweDg3OworfQorCisKK3N0YXRpYyB2b2lkIGFlc18xMjhfY21hY192ZWN0b3Ioc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCisJCQkJc2l6ZV90IG51bV9lbGVtLAorCQkJCWNvbnN0IHU4ICphZGRyW10sIGNvbnN0IHNpemVfdCAqbGVuLCB1OCAqbWFjKQoreworCXU4ICpjYmMsICpwYWQ7CisJY29uc3QgdTggKnBvcywgKmVuZDsKKwlzaXplX3QgaSwgZSwgbGVmdCwgdG90YWxfbGVuOworCisJY2JjID0gc2NyYXRjaDsKKwlwYWQgPSBzY3JhdGNoICsgQUVTX0JMT0NLX1NJWkU7CisKKwltZW1zZXQoY2JjLCAwLCBBRVNfQkxPQ0tfU0laRSk7CisKKwl0b3RhbF9sZW4gPSAwOworCWZvciAoZSA9IDA7IGUgPCBudW1fZWxlbTsgZSsrKQorCQl0b3RhbF9sZW4gKz0gbGVuW2VdOworCWxlZnQgPSB0b3RhbF9sZW47CisKKwllID0gMDsKKwlwb3MgPSBhZGRyWzBdOworCWVuZCA9IHBvcyArIGxlblswXTsKKworCXdoaWxlIChsZWZ0ID49IEFFU19CTE9DS19TSVpFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKSB7CisJCQljYmNbaV0gXj0gKnBvcysrOworCQkJaWYgKHBvcyA+PSBlbmQpIHsKKwkJCQllKys7CisJCQkJcG9zID0gYWRkcltlXTsKKwkJCQllbmQgPSBwb3MgKyBsZW5bZV07CisJCQl9CisJCX0KKwkJaWYgKGxlZnQgPiBBRVNfQkxPQ0tfU0laRSkKKwkJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBjYmMsIGNiYyk7CisJCWxlZnQgLT0gQUVTX0JMT0NLX1NJWkU7CisJfQorCisJbWVtc2V0KHBhZCwgMCwgQUVTX0JMT0NLX1NJWkUpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7CisJZ2ZfbXVseChwYWQpOworCisJaWYgKGxlZnQgfHwgdG90YWxfbGVuID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlZnQ7IGkrKykgeworCQkJY2JjW2ldIF49ICpwb3MrKzsKKwkJCWlmIChwb3MgPj0gZW5kKSB7CisJCQkJZSsrOworCQkJCXBvcyA9IGFkZHJbZV07CisJCQkJZW5kID0gcG9zICsgbGVuW2VdOworCQkJfQorCQl9CisJCWNiY1tsZWZ0XSBePSAweDgwOworCQlnZl9tdWx4KHBhZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyBpKyspCisJCXBhZFtpXSBePSBjYmNbaV07CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIHBhZCwgcGFkKTsKKwltZW1jcHkobWFjLCBwYWQsIENNQUNfVExFTik7Cit9CisKKwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCWNvbnN0IHU4ICphZGRyWzNdOworCXNpemVfdCBsZW5bM107CisJdTggemVyb1tDTUFDX1RMRU5dOworCisJbWVtc2V0KHplcm8sIDAsIENNQUNfVExFTik7CisJYWRkclswXSA9IGFhZDsKKwlsZW5bMF0gPSBBQURfTEVOOworCWFkZHJbMV0gPSBkYXRhOworCWxlblsxXSA9IGRhdGFfbGVuIC0gQ01BQ19UTEVOOworCWFkZHJbMl0gPSB6ZXJvOworCWxlblsyXSA9IENNQUNfVExFTjsKKworCWFlc18xMjhfY21hY192ZWN0b3IodGZtLCBzY3JhdGNoLCAzLCBhZGRyLCBsZW4sIG1pYyk7Cit9CisKKworc3RydWN0IGNyeXB0b19jaXBoZXIgKiBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdKQoreworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhZXMiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBOVUxMOworCisJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIEFFU19DTUFDX0tFWV9MRU4pOworCisJcmV0dXJuIHRmbTsKK30KKworCit2b2lkIGllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCWlmICh0Zm0pCisJCWNyeXB0b19mcmVlX2NpcGhlcih0Zm0pOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmggYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI5YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBRVNfQ01BQ19ICisjZGVmaW5lIEFFU19DTUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCitzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqIGllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10pOwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pOworCisjZW5kaWYgLyogQUVTX0NNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjU2ZDgzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisKK3ZvaWQgX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJaW50IGk7CisKKwkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPQorCQlIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKKwkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCisJCQkJICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCkpCisJCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKKwkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKKworCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLworCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQorCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCisJaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCisJCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCisJCQkJICAgICB0aWQsIDAsIHJlYXNvbik7CisKKwkvKiBmcmVlIHRoZSByZW9yZGVyaW5nIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPmJ1Zl9zaXplOyBpKyspIHsKKwkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pIHsKKwkJCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgKi8KKwkJCWRldl9rZnJlZV9za2Ioc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSk7CisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnN0b3JlZF9tcGR1X251bS0tOworCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJLyogZnJlZSByZXNvdXJjZXMgKi8KKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmKTsKKworCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zaHV0ZG93bikgeworCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOworCX0KKworCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9JRExFOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworfQorCit2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsCisJCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCisJICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KKwlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCV9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yLCByZWFzb24pOworCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBBZnRlciBhY2NlcHRpbmcgdGhlIEFkZEJBIFJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIsCisgKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KKyAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKKwkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIHZhcmlvdXMgc3RhX2luZm8gYXJlIG5lZWRlZCBoZXJlLCBzbyBpbml0CisJICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKKwkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCisJdTggKnB0aWQgPSAodTggKilkYXRhOworCXU4ICp0aW1lcl90b19pZCA9IHB0aWQgLSAqcHRpZDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0aW1lcl90b19pZCwgc3RydWN0IHN0YV9pbmZvLAorCQkJCQkgdGltZXJfdG9fdGlkWzBdKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJyeCBzZXNzaW9uIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCAodTE2KSpwdGlkKTsKKyNlbmRpZgorCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCisJCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCisJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCisJCQkJICAgICAgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAorCQkJCSAgICAgIHUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCisJCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKKwltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisKKwljYXBhYiA9ICh1MTYpKHBvbGljeSA8PCAxKTsJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYnVmX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ3JlZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7CisJdTE2IGNhcGFiLCB0aWQsIHRpbWVvdXQsIGJhX3BvbGljeSwgYnVmX3NpemUsIHN0YXJ0X3NlcV9udW0sIHN0YXR1czsKKwl1OCBkaWFsb2dfdG9rZW47CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJLyogZXh0cmFjdCBzZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBhZGRiYSByZXF1ZXN0IGZyYW1lICovCisJZGlhbG9nX3Rva2VuID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuOworCXRpbWVvdXQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0KTsKKwlzdGFydF9zZXFfbnVtID0KKwkJbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSkgPj4gNDsKKworCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOworCWJhX3BvbGljeSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSykgPj4gMTsKKwl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7CisJYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKKworCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7CisKKwlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9TVVNQRU5EKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiU3VzcGVuZCBpbiBwcm9ncmVzcy4gIgorCQkgICAgICAgIkRlbnlpbmcgQUREQkEgcmVxdWVzdFxuIik7CisjZW5kaWYKKwkJZ290byBlbmRfbm9fbG9jazsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6CisJICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5CisJICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCisJLyogWFhYOiBjaGVjayBvd24gaHQgZGVsYXllZCBCQSBjYXBhYmlsaXR5Pz8gKi8KKwlpZiAoKChiYV9wb2xpY3kgIT0gMSkKKwkJJiYgKCEoc3RhLT5zdGEuaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfREVMQVlfQkEpKSkKKwkJfHwgKGJ1Zl9zaXplID4gSUVFRTgwMjExX01BWF9BTVBEVV9CVUYpKSB7CisJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFkZEJBIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCwgYmFfcG9saWN5LAorCQkJCWJ1Zl9zaXplKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJZ290byBlbmRfbm9fbG9jazsKKwl9CisJLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KKwlpZiAoYnVmX3NpemUgPT0gMCkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbY29uZi0+Y2hhbm5lbC0+YmFuZF07CisJCWJ1Zl9zaXplID0gSUVFRTgwMjExX01JTl9BTVBEVV9CVUY7CisJCWJ1Zl9zaXplID0gYnVmX3NpemUgPDwgc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisJfQorCisKKwkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXVcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kOworCX0KKworCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCisJCQkJCXRpZCk7CisjZW5kaWYKKwkJZ290byBlbmQ7CisJfQorCS8qIHJ4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KKwkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisKKwkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCisJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQorCQlrY2FsbG9jKGJ1Zl9zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCisJCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQorCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOworCQlrZnJlZSh0aWRfYWdnX3J4KTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKKwl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OworCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7CisJc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKK2VuZDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworZW5kX25vX2xvY2s6CisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCisJCQkJICBkaWFsb2dfdG9rZW4sIHN0YXR1cywgMSwgYnVmX3NpemUsIHRpbWVvdXQpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2FhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTAsMCArMSw2OTUgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAid21lLmgiCisKKy8qKgorICogRE9DOiBUWCBhZ2dyZWdhdGlvbgorICoKKyAqIEFnZ3JlZ2F0aW9uIG9uIHRoZSBUWCBzaWRlIHJlcXVpcmVzIHNldHRpbmcgdGhlIGhhcmR3YXJlIGZsYWcKKyAqICVJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04gYXMgd2VsbCBhcywgaWYgcHJlc2VudCwgdGhlIEBhbXBkdV9xdWV1ZXMKKyAqIGhhcmR3YXJlIHBhcmFtZXRlciB0byB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIEFNUERVIHF1ZXVlcy4gSWYgdGhlcmUgYXJlIG5vCisgKiBoYXJkd2FyZSBxdWV1ZXMgdGhlbiB0aGUgZHJpdmVyIHdpbGwgKGN1cnJlbnRseSkgaGF2ZSB0byBkbyBhbGwgZnJhbWUKKyAqIGJ1ZmZlcmluZy4KKyAqCisgKiBXaGVuIFRYIGFnZ3JlZ2F0aW9uIGlzIHN0YXJ0ZWQgYnkgc29tZSBzdWJzeXN0ZW0gKHVzdWFsbHkgdGhlIHJhdGUgY29udHJvbAorICogYWxnb3JpdGhtIHdvdWxkIGJlIGFwcHJvcHJpYXRlKSBieSBjYWxsaW5nIHRoZQorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oKSBmdW5jdGlvbiwgdGhlIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIHZpYQorICogaXRzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24sIHdpdGggdGhlICVJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQgYWN0aW9uLgorICoKKyAqIEluIHJlc3BvbnNlIHRvIHRoYXQsIHRoZSBkcml2ZXIgaXMgbGF0ZXIgcmVxdWlyZWQgdG8gY2FsbCB0aGUKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYigpIChvciBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSgpKQorICogZnVuY3Rpb24sIHdoaWNoIHdpbGwgc3RhcnQgdGhlIGFnZ3JlZ2F0aW9uIHNlc3Npb24uCisgKgorICogU2ltaWxhcmx5LCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGlzIHN0b3BwZWQgYnkKKyAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oKSwgdGhlIGRyaXZlcidzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24gd2lsbAorICogYmUgY2FsbGVkIHdpdGggdGhlIGFjdGlvbiAlSUVFRTgwMjExX0FNUERVX1RYX1NUT1AuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBjYWxsIG11c3Qgbm90IGZhaWwsIGFuZCB0aGUgZHJpdmVyIG11c3QgbGF0ZXIgY2FsbCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYigpCisgKiAob3IgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSgpKS4KKyAqLworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJCQkgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhcnRfc2VxX251bSwKKwkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpOworCisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVE7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisJY2FwYWIgPSAodTE2KSgxIDw8IDEpOwkJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYWdnX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ2VyZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKKworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtID0KKwkJCQkJY3B1X3RvX2xlMTYoc3RhcnRfc2VxX251bSA8PCA0KTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOworCXUxNiBiYXJfY29udHJvbCA9IDA7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkJImJhciBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWJhciA9IChzdHJ1Y3QgaWVlZTgwMjExX2JhciAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmJhcikpOworCW1lbXNldChiYXIsIDAsIHNpemVvZigqYmFyKSk7CisJYmFyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8CisJCQkJCSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOworCW1lbWNweShiYXItPnJhLCByYSwgRVRIX0FMRU4pOworCW1lbWNweShiYXItPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOworCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CisJYmFyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoYmFyX2NvbnRyb2wpOworCWJhci0+c3RhcnRfc2VxX251bSA9IGNwdV90b19sZTE2KHNzbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCitzdGF0aWMgaW50IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOworCWludCByZXQ7CisJdTggKnN0YXRlOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCisJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKKworCS8qIEhXIHNoYWxsIG5vdCBkZW55IGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCisJaWYgKFdBUk5fT04ocmV0KSkgeworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJCS8qCisJCSAqIFdlIG1heSBoYXZlIHBlbmRpbmcgcGFja2V0cyBnZXQgc3R1Y2sgaW4gdGhpcyBjYXNlLi4uCisJCSAqIE5vdCBib3RoZXJpbmcgd2l0aCBhIHdvcmthcm91bmQgZm9yIG5vdy4KKwkJICovCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCisgKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KKyAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAqKWRhdGEsCisJCXN0cnVjdCBzdGFfaW5mbywgdGltZXJfdG9fdGlkW3RpZF0pOworCXU4ICpzdGF0ZTsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKKwkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHJlc3BvbnNlIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCB0aWQpOworI2VuZGlmCisKKwlfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2FjX2Zyb21fdGlkKGludCB0aWQpCit7CisJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbdGlkICYgN107Cit9CisKK2ludCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXU4ICpzdGF0ZTsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgc3RhcnRfc2VxX251bTsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodGlkID49IFNUQV9USURfTlVNKSB8fCAhKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIk9wZW4gQkEgc2Vzc2lvbiByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCisJICAgICAgIHJhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKKyNlbmRpZgorCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKgorCSAqIFRoZSBhZ2dyZWdhdGlvbiBjb2RlIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKwkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmcuCisJICogSUJTUyBjb3VsZCB3b3JrIGluIHRoZSBjb2RlIGJ1dCBpc24ndCBzdXBwb3J0ZWQKKwkgKiBieSBkcml2ZXJzIG9yIHRoZSBzdGFuZGFyZC4KKwkgKi8KKwlpZiAoc3RhLT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgIHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1NVU1BFTkQpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJTdXNwZW5kIGluIHByb2dyZXNzLiAiCisJCSAgICAgICAiRGVueWluZyBCQSBzZXNzaW9uIHJlcXVlc3RcbiIpOworI2VuZGlmCisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKworCXNkYXRhID0gc3RhLT5zZGF0YTsKKworCS8qIHdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMsIHJlY2VpdmVyIGRvZXMgbm90IHdhbnQgQS1NUERVICovCisJaWYgKHN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPiBIVF9BR0dfTUFYX1JFVFJJRVMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl91bmxvY2tfc3RhOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwkvKiBjaGVjayBpZiB0aGUgVElEIGlzIG5vdCBpbiBhZ2dyZWdhdGlvbiBmbG93IGFscmVhZHkgKi8KKwlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKKwkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIGVycl91bmxvY2tfc3RhOworCX0KKworCS8qCisJICogV2hpbGUgd2UncmUgYXNraW5nIHRoZSBkcml2ZXIgYWJvdXQgdGhlIGFnZ3JlZ2F0aW9uLAorCSAqIHN0b3AgdGhlIEFDIHF1ZXVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorCSAqIGFib3V0IGZyYW1lcyB0aGF0IGNhbWUgaW4gd2hpbGUgd2Ugd2VyZSBkb2luZyB0aGF0LAorCSAqIHdoaWNoIHdvdWxkIHJlcXVpcmUgdXMgdG8gcHV0IHRoZW0gdG8gdGhlIEFDIHBlbmRpbmcKKwkgKiBhZnRlcndhcmRzIHdoaWNoIGp1c3QgbWFrZXMgdGhlIGNvZGUgbW9yZSBjb21wbGV4LgorCSAqLworCWllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbigKKwkJJmxvY2FsLT5odywgaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCksCisJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworI2VuZGlmCisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3dha2VfcXVldWU7CisJfQorCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5wZW5kaW5nKTsKKworCS8qIFR4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KKwkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQorCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKworCS8qIE9rLCB0aGUgQWRkYmEgZnJhbWUgaGFzbid0IGJlZW4gc2VudCB5ZXQsIGJ1dCBpZiB0aGUgZHJpdmVyIGNhbGxzIHRoZQorCSAqIGNhbGwgYmFjayByaWdodCBhd2F5LCBpdCBtdXN0IHNlZSB0aGF0IHRoZSBmbG93IGhhcyBiZWd1biAqLworCSpzdGF0ZSB8PSBIVF9BRERCQV9SRVFVRVNURURfTVNLOworCisJc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOworCisJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCisJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisKKwlpZiAocmV0KSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKKwkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCS8qIERyaXZlciB2ZXRvZWQgb3IgT0tlZCwgYnV0IHdlIGNhbiB0YWtlIHBhY2tldHMgYWdhaW4gbm93ICovCisJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKAorCQkmbG9jYWwtPmh3LCBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKSwKKwkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKworCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkvKiBzZW5kIGFuIGFkZEJBIHJlcXVlc3QgKi8KKwlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcisrOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuID0KKwkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuID0gc3RhcnRfc2VxX251bTsKKworCWllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RhLT5zZGF0YSwgcmEsIHRpZCwKKwkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiwKKwkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiwKKwkJCSAweDQwLCA1MDAwKTsKKwkvKiBhY3RpdmF0ZSB0aGUgdGltZXIgZm9yIHRoZSByZWNpcGllbnQncyBhZGRCQSByZXNwb25zZSAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsgQUREQkFfUkVTUF9JTlRFUlZBTDsKKwlhZGRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFjdGl2YXRlZCBhZGRCQSByZXNwb25zZSB0aW1lciBvbiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKKwlnb3RvIHVubG9jazsKKworIGVycl9mcmVlOgorCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKKyBlcnJfd2FrZV9xdWV1ZToKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oCisJCSZsb2NhbC0+aHcsIGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpLAorCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworIGVycl91bmxvY2tfc3RhOgorCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisgdW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKTsKKworLyoKKyAqIHNwbGljZSBwYWNrZXRzIGZyb20gdGhlIFNUQSdzIHBlbmRpbmcgdG8gdGhlIGxvY2FsIHBlbmRpbmcsCisgKiByZXF1aXJlcyBhIGNhbGwgdG8gaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoIGFuZCBob2xkaW5nCisgKiBsb2NhbC0+YW1wZHVfbG9jayBhY3Jvc3MgYm90aCBjYWxscy4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHF1ZXVlID0gaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oCisJCSZsb2NhbC0+aHcsIHF1ZXVlLAorCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+cGVuZGluZykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCS8qIG1hcmsgcXVldWUgYXMgcGVuZGluZywgaXQgaXMgc3RvcHBlZCBhbHJlYWR5ICovCisJCV9fc2V0X2JpdChJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORywKKwkJCSAgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKwkJLyogY29weSBvdmVyIHJlbWFpbmluZyBwYWNrZXRzICovCisJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KAorCQkJJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+cGVuZGluZywKKwkJCSZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKK3sKKwl1MTYgcXVldWUgPSBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKTsKKworCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbigKKwkJJmxvY2FsLT5odywgcXVldWUsCisJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgc3RhLT5sb2NrICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCit7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmCisKKwlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9wYWNrZXRzKGxvY2FsLCBzdGEsIHRpZCk7CisJLyoKKwkgKiBOQjogd2UgcmVseSBvbiBzdGEtPmxvY2sgYmVpbmcgdGFrZW4gaW4gdGhlIFRYCisJICogcHJvY2Vzc2luZyBoZXJlIHdoZW4gYWRkaW5nIHRvIHRoZSBwZW5kaW5nIHF1ZXVlLAorCSAqIG90aGVyd2lzZSB3ZSBjb3VsZCBvbmx5IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlCisJICogc2Vzc2lvbiB0byBPUEVSQVRJT05BTCBfaGVyZV8uCisJICovCisJaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKGxvY2FsLCBzdGEsIHRpZCk7CisJc3Bpbl91bmxvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKworCWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUwsCisJCQkJICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKK30KKwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCAqc3RhdGU7CisKKwlpZiAodGlkID49IFNUQV9USURfTlVNKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAorCQkJCXRpZCwgU1RBX1RJRF9OVU0pOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmIChXQVJOX09OKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSB3YXMgbm90IHJlcXVlc3RlZCB5ZXQsIHN0YXRlIGlzICVkXG4iLAorCQkJCSpzdGF0ZSk7CisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKFdBUk5fT04oKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSykpCisJCWdvdG8gb3V0OworCisJKnN0YXRlIHw9IEhUX0FEREJBX0RSVl9SRUFEWV9NU0s7CisKKwlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwkJaWVlZTgwMjExX2FnZ190eF9vcGVyYXRpb25hbChsb2NhbCwgc3RhLCB0aWQpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOworCisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RhcnQgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CisJcmFfdGlkLT50aWQgPSB0aWQ7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0FEREJBX01TRzsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKTsKKworaW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXU4ICpzdGF0ZTsKKwlpbnQgcmV0OworCisJLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBpbiBhZ2dyZWdhdGlvbiAqLworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiVHggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKKwkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJldCA9IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CisKKyB1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHU4ICpyYSwgdTE2IHRpZCwKKwkJCQkgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXQgPSBfX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbik7CisKK3ZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTggdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXU4ICpzdGF0ZTsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCisJCQkJdGlkLCBTVEFfVElEX05VTSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJTdG9wcGluZyBUeCBCQSBzZXNzaW9uIGZvciAlcE0gdGlkICVkXG4iLAorCSAgICAgICByYSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CisjZW5kaWYKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJLyogTk9URTogbm8gbmVlZCB0byB1c2Ugc3RhLT5sb2NrIGluIHRoaXMgc3RhdGUgY2hlY2ssIGFzCisJICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiB3aWxsIGxldCBvbmx5IG9uZSBzdG9wIGNhbGwgdG8KKwkgKiBwYXNzIHRocm91Z2ggcGVyIHN0YS90aWQKKwkgKi8KKwlpZiAoKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0spID09IDApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgY2FsbGJhY2sgdG8gQS1NUERVIHN0b3BcbiIpOworI2VuZGlmCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLKQorCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCByYSwgdGlkLAorCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKworCWllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMobG9jYWwsIHN0YSwgdGlkKTsKKworCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCS8qIGZyb20gbm93IG9uIHBhY2tldHMgYXJlIG5vIGxvbmdlciBwdXQgb250byBzdGEtPnBlbmRpbmcgKi8KKwlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7CisKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9maW5pc2gobG9jYWwsIHN0YSwgdGlkKTsKKworCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKworCWlmICh1bmxpa2VseSghc2tiKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCisJCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CisJcmFfdGlkLT50aWQgPSB0aWQ7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0RFTEJBX01TRzsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUpOworCisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgc2l6ZV90IGxlbikKK3sKKwl1MTYgY2FwYWIsIHRpZDsKKwl1OCAqc3RhdGU7CisKKwljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYik7CisJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQorCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQorCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQl1OCBjdXJzdGF0ZSA9ICpzdGF0ZTsKKworCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOworCisJCWlmICgqc3RhdGUgIT0gY3Vyc3RhdGUgJiYgKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwkJCWllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwobG9jYWwsIHN0YSwgdGlkKTsKKworCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKwl9IGVsc2UgeworCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdKys7CisJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIFdMQU5fQkFDS19JTklUSUFUT1IpOworCX0KKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCA5ZDRlNGQ4Li5lNjc3Yjc1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKKysrIGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC0xMzMsNiArMTMzLDkgQEAKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCWFsZyA9IEFMR19DQ01QOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlhbGcgPSBBTEdfQUVTX0NNQUM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI3NSw2ICsyNzgsMTcgQEAKIAkJZWxzZQogCQkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKKwkJc2VxWzBdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzVdOworCQlzZXFbMV0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bNF07CisJCXNlcVsyXSA9IGtleS0+dS5hZXNfY21hYy50eF9wblszXTsKKwkJc2VxWzNdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzJdOworCQlzZXFbNF0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bMV07CisJCXNlcVs1XSA9IGtleS0+dS5hZXNfY21hYy50eF9wblswXTsKKwkJcGFyYW1zLnNlcSA9IHNlcTsKKwkJcGFyYW1zLnNlcV9sZW4gPSA2OworCQlicmVhazsKIAl9CiAKIAlwYXJhbXMua2V5ID0ga2V5LT5jb25mLmtleTsKQEAgLTMwNCw2ICszMTgsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfY29uZmlnX2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHU4IGtleV9pZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBrZXlfaWR4KTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTMxMSwxMSArMzQxLDE1IEBACiAJc2luZm8tPmZpbGxlZCA9IFNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FIHwKIAkJCVNUQVRJT05fSU5GT19SWF9CWVRFUyB8CiAJCQlTVEFUSU9OX0lORk9fVFhfQllURVMgfAorCQkJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMgfAorCQkJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAogCQkJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CiAKIAlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7CiAJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKIAlzaW5mby0+dHhfYnl0ZXMgPSBzdGEtPnR4X2J5dGVzOworCXNpbmZvLT5yeF9wYWNrZXRzID0gc3RhLT5yeF9wYWNrZXRzOworCXNpbmZvLT50eF9wYWNrZXRzID0gc3RhLT50eF9wYWNrZXRzOwogCiAJaWYgKHN0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pIHsKIAkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOwpAQCAtNDE3LDcgKzQ1MSw4IEBACiAJICogVGhpcyBpcyBhIGtsdWRnZS4gYmVhY29uIGludGVydmFsIHNob3VsZCByZWFsbHkgYmUgcGFydAogCSAqIG9mIHRoZSBiZWFjb24gaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKHBhcmFtcy0+aW50ZXJ2YWwpIHsKKwlpZiAocGFyYW1zLT5pbnRlcnZhbCAmJiAoc2RhdGEtPmxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgIT0KKwkJCQkgcGFyYW1zLT5pbnRlcnZhbCkpIHsKIAkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBwYXJhbXMtPmludGVydmFsOwogCQllcnIgPSBpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwKIAkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCk7CkBAIC00OTMsNyArNTI4LDggQEAKIAogCWtmcmVlKG9sZCk7CiAKLQlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkJICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTUwNCw5ICs1NDAsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlvbGQgPSBzZGF0YS0+dS5hcC5iZWFjb247CiAKIAlpZiAob2xkKQpAQCAtNTIzLDkgKzU1Niw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKIAogCWlmICghb2xkKQpAQCAtNTQxLDkgKzU3MSw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKIAogCWlmICghb2xkKQpAQCAtNTUzLDcgKzU4MCw3IEBACiAJc3luY2hyb25pemVfcmN1KCk7CiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIC8qIExheWVyIDIgVXBkYXRlIGZyYW1lICg4MDIuMiBUeXBlIDEgTExDIFhJRCBVcGRhdGUgcmVzcG9uc2UpICovCkBAIC02MzAsNiArNjU3LDEwIEBACiAJCXN0YS0+ZmxhZ3MgJj0gfldMQU5fU1RBX1dNRTsKIAkJaWYgKHBhcmFtcy0+c3RhdGlvbl9mbGFncyAmIFNUQVRJT05fRkxBR19XTUUpCiAJCQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKKworCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9NRlA7CisJCWlmIChwYXJhbXMtPnN0YXRpb25fZmxhZ3MgJiBTVEFUSU9OX0ZMQUdfTUZQKQorCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9NRlA7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0KIApAQCAtNjg4LDEwICs3MTksNiBAQAogCWludCBlcnI7CiAJaW50IGxheWVyMl91cGRhdGU7CiAKLQkvKiBQcmV2ZW50IGEgcmFjZSB3aXRoIGNoYW5naW5nIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlpZiAocGFyYW1zLT52bGFuKSB7CiAJCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocGFyYW1zLT52bGFuKTsKIApAQCAtODIwLDE0ICs4NDcsOCBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCBlcnI7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKIAlpZiAoIXN0YSkgewpAQCAtODczLDE0ICs4OTQsOCBAQAogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKQEAgLTk0OSw5ICs5NjQsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQlyZXR1cm4gLUVOT1RTVVBQOwotCiAJcmN1X3JlYWRfbG9jaygpOwogCW1wYXRoID0gbWVzaF9wYXRoX2xvb2t1cChkc3QsIHNkYXRhKTsKIAlpZiAoIW1wYXRoKSB7CkBAIC05NzMsOSArOTg1LDYgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXBfYnlfaWR4KGlkeCwgc2RhdGEpOwogCWlmICghbXBhdGgpIHsKQEAgLTk5NSw4ICsxMDA0LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7CiAJbWVtY3B5KGNvbmYsICYoc2RhdGEtPnUubWVzaC5tc2hjZmcpLCBzaXplb2Yoc3RydWN0IG1lc2hfY29uZmlnKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDE0LDkgKzEwMjEsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCS8qIFNldCB0aGUgY29uZmlnIG9wdGlvbnMgd2hpY2ggd2UgYXJlIGludGVyZXN0ZWQgaW4gc2V0dGluZyAqLwogCWNvbmYgPSAmKHNkYXRhLT51Lm1lc2gubXNoY2ZnKTsKIAlpZiAoX2NoZ19tZXNoX2F0dHIoTkw4MDIxMV9NRVNIQ09ORl9SRVRSWV9USU1FT1VULCBtYXNrKSkKQEAgLTEwNjQsOSArMTA2OCw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChwYXJhbXMtPnVzZV9jdHNfcHJvdCA+PSAwKSB7CiAJCXNkYXRhLT52aWYuYnNzX2NvbmYudXNlX2N0c19wcm90ID0gcGFyYW1zLT51c2VfY3RzX3Byb3Q7CiAJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UOwpAQCAtMTE0MSw2ICsxMTQyLDE1MCBAQAogCXJldHVybiBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3VzcGVuZCh3aXBoeV9wcml2KHdpcGh5KSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXJldHVybiBfX2llZWU4MDIxMV9yZXN1bWUod2lwaHlfcHJpdih3aXBoeSkpOworfQorI2Vsc2UKKyNkZWZpbmUgaWVlZTgwMjExX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpZWVlODAyMTFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCByZXEpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXN3aXRjaCAocmVxLT5hdXRoX3R5cGUpIHsKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06CisJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6CisJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX0ZUOgorCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX0ZUOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA6CisJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCW1lbWNweShzZGF0YS0+dS5tZ2QuYnNzaWQsIHJlcS0+cGVlcl9hZGRyLCBFVEhfQUxFTik7CisJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKworCS8qIFRPRE86IHJlcS0+Y2hhbiAqLworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CisKKwlpZiAocmVxLT5zc2lkKSB7CisJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCQltZW1jcHkoc2RhdGEtPnUubWdkLnNzaWQsIHJlcS0+c3NpZCwgcmVxLT5zc2lkX2xlbik7CisJCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IHJlcS0+c3NpZF9sZW47CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCX0KKworCWtmcmVlKHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSk7CisJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llID0gTlVMTDsKKwlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWVfbGVuID0gMDsKKwlpZiAocmVxLT5pZSkgeworCQlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUgPSBrbWFsbG9jKHJlcS0+aWVfbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbWNweShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKKwkJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llX2xlbiA9IHJlcS0+aWVfbGVuOworCX0KKworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0VYVF9TTUU7CisJc2RhdGEtPnUubWdkLnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfYXNzb2Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJaW50IHJldDsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChtZW1jbXAoc2RhdGEtPnUubWdkLmJzc2lkLCByZXEtPnBlZXJfYWRkciwgRVRIX0FMRU4pICE9IDAgfHwKKwkgICAgIShzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpKQorCQlyZXR1cm4gLUVOT0xJTks7IC8qIG5vdCBhdXRoZW50aWNhdGVkICovCisKKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCisJLyogVE9ETzogcmVxLT5jaGFuICovCisJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKworCWlmIChyZXEtPnNzaWQpIHsKKwkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CisJCW1lbWNweShzZGF0YS0+dS5tZ2Quc3NpZCwgcmVxLT5zc2lkLCByZXEtPnNzaWRfbGVuKTsKKwkJc2RhdGEtPnUubWdkLnNzaWRfbGVuID0gcmVxLT5zc2lkX2xlbjsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJfSBlbHNlCisJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisKKwlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzZGF0YSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9FWFRfU01FOworCXNkYXRhLT51Lm1nZC5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CisJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2RlYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJLyogVE9ETzogcmVxLT5pZSAqLworCXJldHVybiBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLCByZXEtPnJlYXNvbl9jb2RlKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfZGlzYXNzb2Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwkvKiBUT0RPOiByZXEtPmllICovCisJcmV0dXJuIGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHNkYXRhLCByZXEtPnJlYXNvbl9jb2RlKTsKK30KKwogc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0gewogCS5hZGRfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2FkZF9pZmFjZSwKIAkuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsCkBAIC0xMTQ5LDYgKzEyOTQsNyBAQAogCS5kZWxfa2V5ID0gaWVlZTgwMjExX2RlbF9rZXksCiAJLmdldF9rZXkgPSBpZWVlODAyMTFfZ2V0X2tleSwKIAkuc2V0X2RlZmF1bHRfa2V5ID0gaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X2tleSwKKwkuc2V0X2RlZmF1bHRfbWdtdF9rZXkgPSBpZWVlODAyMTFfY29uZmlnX2RlZmF1bHRfbWdtdF9rZXksCiAJLmFkZF9iZWFjb24gPSBpZWVlODAyMTFfYWRkX2JlYWNvbiwKIAkuc2V0X2JlYWNvbiA9IGllZWU4MDIxMV9zZXRfYmVhY29uLAogCS5kZWxfYmVhY29uID0gaWVlZTgwMjExX2RlbF9iZWFjb24sCkBAIC0xMTY5LDQgKzEzMTUsMTEgQEAKIAkuY2hhbmdlX2JzcyA9IGllZWU4MDIxMV9jaGFuZ2VfYnNzLAogCS5zZXRfdHhxX3BhcmFtcyA9IGllZWU4MDIxMV9zZXRfdHhxX3BhcmFtcywKIAkuc2V0X2NoYW5uZWwgPSBpZWVlODAyMTFfc2V0X2NoYW5uZWwsCisJLnN1c3BlbmQgPSBpZWVlODAyMTFfc3VzcGVuZCwKKwkucmVzdW1lID0gaWVlZTgwMjExX3Jlc3VtZSwKKwkuc2NhbiA9IGllZWU4MDIxMV9zY2FuLAorCS5hdXRoID0gaWVlZTgwMjExX2F1dGgsCisJLmFzc29jID0gaWVlZTgwMjExX2Fzc29jLAorCS5kZWF1dGggPSBpZWVlODAyMTFfZGVhdXRoLAorCS5kaXNhc3NvYyA9IGllZWU4MDIxMV9kaXNhc3NvYywKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCAyNjk3YTJmLi4yMTBiOWI2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTQwLDYgKzQwLDEwIEBACiAJbG9jYWwtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIHBoeWQsCVwKIAkJCQkJCSAgbG9jYWwsICZuYW1lIyMgX29wcyk7CiAKKyNkZWZpbmUgREVCVUdGU19BRERfTU9ERShuYW1lLCBtb2RlKQkJCQkJXAorCWxvY2FsLT5kZWJ1Z2ZzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCBtb2RlLCBwaHlkLAlcCisJCQkJCQkgIGxvY2FsLCAmbmFtZSMjIF9vcHMpOworCiAjZGVmaW5lIERFQlVHRlNfREVMKG5hbWUpCQkJCQkJXAogCWRlYnVnZnNfcmVtb3ZlKGxvY2FsLT5kZWJ1Z2ZzLm5hbWUpOwkJCQlcCiAJbG9jYWwtPmRlYnVnZnMubmFtZSA9IE5VTEw7CkBAIC01NywxMSArNjEsODAgQEAKIAkJICAgICAgbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQpOwogREVCVUdGU19SRUFET05MWV9GSUxFKHRvdGFsX3BzX2J1ZmZlcmVkLCAyMCwgIiVkIiwKIAkJICAgICAgbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkKTsKLURFQlVHRlNfUkVBRE9OTFlfRklMRSh3ZXBfaXYsIDIwLCAiJSMwNngiLAorREVCVUdGU19SRUFET05MWV9GSUxFKHdlcF9pdiwgMjAsICIlIzA4eCIsCiAJCSAgICAgIGxvY2FsLT53ZXBfaXYgJiAweGZmZmZmZik7CiBERUJVR0ZTX1JFQURPTkxZX0ZJTEUocmF0ZV9jdHJsX2FsZywgMTAwLCAiJXMiLAogCQkgICAgICBsb2NhbC0+cmF0ZV9jdHJsID8gbG9jYWwtPnJhdGVfY3RybC0+b3BzLT5uYW1lIDogIjx1bnNldD4iKTsKIAorc3RhdGljIHNzaXplX3QgdHNmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTY0IHRzZiA9IDA7CisJY2hhciBidWZbMTAwXTsKKworCWlmIChsb2NhbC0+b3BzLT5nZXRfdHNmKQorCQl0c2YgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDE2bGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCAxOSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRzZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBsb25nIHRzZjsKKwljaGFyIGJ1ZlsxMDBdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKworCWlmIChzdHJuY21wKGJ1ZiwgInJlc2V0IiwgNSkgPT0gMCkgeworCQlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CisJCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZWJ1Z2ZzIHJlc2V0IFRTRlxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJfQorCX0gZWxzZSB7CisJCXRzZiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKSB7CisJCQlsb2NhbC0+b3BzLT5zZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSwgdHNmKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZWJ1Z2ZzIHNldCBUU0YgdG8gJSMwMThsbHhcbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgdHNmKTsKKwkJfQorCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHNmX29wcyA9IHsKKwkucmVhZCA9IHRzZl9yZWFkLAorCS53cml0ZSA9IHRzZl93cml0ZSwKKwkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljCit9OworCitzdGF0aWMgc3NpemVfdCByZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlydG5sX2xvY2soKTsKKwlfX2llZWU4MDIxMV9zdXNwZW5kKCZsb2NhbC0+aHcpOworCV9faWVlZTgwMjExX3Jlc3VtZSgmbG9jYWwtPmh3KTsKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNldF9vcHMgPSB7CisJLndyaXRlID0gcmVzZXRfd3JpdGUsCisJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywKK307CisKIC8qIHN0YXRpc3RpY3Mgc3R1ZmYgKi8KIAogI2RlZmluZSBERUJVR0ZTX1NUQVRTX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJCVwKQEAgLTEzNiw4ICsyMDksNiBAQAogCQkgICBsb2NhbC0+ZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOwogREVCVUdGU19TVEFUU19GSUxFKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50LCAyMCwgIiV1IiwKIAkJICAgbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKLURFQlVHRlNfU1RBVFNfRklMRSh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiBERUJVR0ZTX1NUQVRTX0ZJTEUodHhfaGFuZGxlcnNfZHJvcCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT50eF9oYW5kbGVyc19kcm9wKTsKQEAgLTIwNCw2ICsyNzUsOCBAQAogCURFQlVHRlNfQUREKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfQUREKHRvdGFsX3BzX2J1ZmZlcmVkKTsKIAlERUJVR0ZTX0FERCh3ZXBfaXYpOworCURFQlVHRlNfQUREKHRzZik7CisJREVCVUdGU19BRERfTU9ERShyZXNldCwgMDIwMCk7CiAKIAlzdGF0c2QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXRpc3RpY3MiLCBwaHlkKTsKIAlsb2NhbC0+ZGVidWdmcy5zdGF0aXN0aWNzID0gc3RhdHNkOwpAQCAtMjIxLDcgKzI5NCw2IEBACiAJREVCVUdGU19TVEFUU19BREQocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKHdlcF91bmRlY3J5cHRhYmxlX2NvdW50KTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wKTsKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19xdWV1ZWQpOwpAQCAtMjU4LDYgKzMzMCw4IEBACiAJREVCVUdGU19ERUwobG9uZ19yZXRyeV9saW1pdCk7CiAJREVCVUdGU19ERUwodG90YWxfcHNfYnVmZmVyZWQpOwogCURFQlVHRlNfREVMKHdlcF9pdik7CisJREVCVUdGU19ERUwodHNmKTsKKwlERUJVR0ZTX0RFTChyZXNldCk7CiAKIAlERUJVR0ZTX1NUQVRTX0RFTCh0cmFuc21pdHRlZF9mcmFnbWVudF9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobXVsdGljYXN0X3RyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKQEAgLTI2OCw3ICszNDIsNiBAQAogCURFQlVHRlNfU1RBVFNfREVMKHJlY2VpdmVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0RFTCh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobnVtX3NjYW5zKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0RFTCh0eF9oYW5kbGVyc19kcm9wKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggNjQyNGFjNS4uOTljNzUyNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKQEAgLTc2LDYgKzc2LDkgQEAKIAljYXNlIEFMR19DQ01QOgogCQlhbGcgPSAiQ0NNUFxuIjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWFsZyA9ICJBRVMtMTI4LUNNQUNcbiI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTEwNSw2ICsxMDgsMTIgQEAKIAkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCiAJCQkJdHBuWzBdLCB0cG5bMV0sIHRwblsyXSwgdHBuWzNdLCB0cG5bNF0sIHRwbls1XSk7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQl0cG4gPSBrZXktPnUuYWVzX2NtYWMudHhfcG47CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCXRwblswXSwgdHBuWzFdLCB0cG5bMl0sIHRwblszXSwgdHBuWzRdLAorCQkJCXRwbls1XSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE0Miw2ICsxNTEsMTQgQEAKIAkJfQogCQlsZW4gPSBwIC0gYnVmOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcnBuID0ga2V5LT51LmFlc19jbWFjLnJ4X3BuOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwKKwkJCSAgICAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJICAgICAgIHJwblswXSwgcnBuWzFdLCBycG5bMl0sCisJCQkgICAgICAgcnBuWzNdLCBycG5bNF0sIHJwbls1XSk7CisJCWxlbiA9IHAgLSBidWY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE1NiwxMyArMTczLDQwIEBACiAJY2hhciBidWZbMjBdOwogCWludCBsZW47CiAKLQlpZiAoa2V5LT5jb25mLmFsZyAhPSBBTEdfQ0NNUCkKKwlzd2l0Y2ggKGtleS0+Y29uZi5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuY2NtcC5yZXBsYXlzKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCisJCQkJa2V5LT51LmFlc19jbWFjLnJlcGxheXMpOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXR1cm4gMDsKLQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuY2NtcC5yZXBsYXlzKTsKKwl9CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiBLRVlfT1BTKHJlcGxheXMpOwogCitzdGF0aWMgc3NpemVfdCBrZXlfaWN2ZXJyb3JzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsyMF07CisJaW50IGxlbjsKKworCXN3aXRjaCAoa2V5LT5jb25mLmFsZykgeworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLAorCQkJCWtleS0+dS5hZXNfY21hYy5pY3ZlcnJvcnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CitLRVlfT1BTKGljdmVycm9ycyk7CisKIHN0YXRpYyBzc2l6ZV90IGtleV9rZXlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0yMjIsNiArMjY2LDcgQEAKIAlERUJVR0ZTX0FERCh0eF9zcGVjKTsKIAlERUJVR0ZTX0FERChyeF9zcGVjKTsKIAlERUJVR0ZTX0FERChyZXBsYXlzKTsKKwlERUJVR0ZTX0FERChpY3ZlcnJvcnMpOwogCURFQlVHRlNfQUREKGtleSk7CiAJREVCVUdGU19BREQoaWZpbmRleCk7CiB9OwpAQCAtMjQzLDYgKzI4OCw3IEBACiAJREVCVUdGU19ERUwodHhfc3BlYyk7CiAJREVCVUdGU19ERUwocnhfc3BlYyk7CiAJREVCVUdGU19ERUwocmVwbGF5cyk7CisJREVCVUdGU19ERUwoaWN2ZXJyb3JzKTsKIAlERUJVR0ZTX0RFTChrZXkpOwogCURFQlVHRlNfREVMKGlmaW5kZXgpOwogCkBAIC0yODAsNiArMzI2LDM1IEBACiAJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfa2V5ID0gTlVMTDsKIH0KIAordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwljaGFyIGJ1Zls1MF07CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKworCWlmICghc2RhdGEtPmRlYnVnZnNkaXIpCisJCXJldHVybjsKKworCS8qIHRoaXMgaXMgcnVubmluZyB1bmRlciB0aGUga2V5IGxvY2sgKi8KKworCWtleSA9IHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5OworCWlmIChrZXkpIHsKKwkJc3ByaW50ZihidWYsICIuLi9rZXlzLyVkIiwga2V5LT5kZWJ1Z2ZzLmNudCk7CisJCXNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5ID0KKwkJCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoImRlZmF1bHRfbWdtdF9rZXkiLAorCQkJCQkgICAgICAgc2RhdGEtPmRlYnVnZnNkaXIsIGJ1Zik7CisJfSBlbHNlCisJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KHNkYXRhKTsKK30KKwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlpZiAoIXNkYXRhKQorCQlyZXR1cm47CisKKwlkZWJ1Z2ZzX3JlbW92ZShzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9tZ210X2tleSk7CisJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfbWdtdF9rZXkgPSBOVUxMOworfQorCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaCBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCmluZGV4IGIxYTM3NTQuLjU0NzE3YjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCkBAIC02LDYgKzYsMTAgQEAKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpOwogI2Vsc2UKQEAgLTE5LDYgKzIzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7fQogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7fQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCBjNTQyMTkzLi5lMzQyMDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtOTQsMzEgKzk0LDMxIEBACiBJRUVFODAyMTFfSUZfRklMRShmb3JjZV91bmljYXN0X3JhdGVpZHgsIGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKG1heF9yYXRlY3RybF9yYXRlaWR4LCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKIAotLyogU1RBL0lCU1MgYXR0cmlidXRlcyAqLwotSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUuc3RhLnN0YXRlLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUuc3RhLmJzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5zdGEucHJldl9ic3NpZCwgTUFDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1LnN0YS5zc2lkX2xlbiwgU0laRSk7Ci1JRUVFODAyMTFfSUZfRklMRShhaWQsIHUuc3RhLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1LnN0YS5hcF9jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1LnN0YS5jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5zdGEuZXh0cmFfaWVfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUuc3RhLmF1dGhfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5zdGEuYXNzb2NfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUuc3RhLmF1dGhfYWxncywgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1LnN0YS5hdXRoX2FsZywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUuc3RhLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CisvKiBTVEEgYXR0cmlidXRlcyAqLworSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUubWdkLnN0YXRlLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUubWdkLmJzc2lkLCBNQUMpOworSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5tZ2QucHJldl9ic3NpZCwgTUFDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1Lm1nZC5zc2lkX2xlbiwgU0laRSk7CitJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1Lm1nZC5hcF9jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5tZ2QuZXh0cmFfaWVfbGVuLCBTSVpFKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUubWdkLmF1dGhfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5tZ2QuYXNzb2NfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUubWdkLmF1dGhfYWxncywgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1Lm1nZC5hdXRoX2FsZywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUubWdkLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CiAKIHN0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfZmxhZ3MoCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMlcyVzJXMlcyVzJXNcbiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCiAJCSBzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCA/ICJDVFMgcHJvdFxuIiA6ICIiKTsKIH0KIF9fSUVFRTgwMjExX0lGX0ZJTEUoZmxhZ3MpOwpAQCAtMjgzLDkgKzI4MywxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlhZGRfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWFkZF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpAQCAtNDE4LDkgKzQyMCwxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlkZWxfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWRlbF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCBhMmZiZTAxLi45MDIzMGM3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtNjcsMTQgKzY3LDE1IEBACiAJY2hhciBidWZbMTAwXTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAl1MzIgc3RhZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7Ci0JaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcyVzJXMlcyVzJXMiLAorCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMlcyVzJXMlcyVzJXMiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FVVEggPyAiQVVUSFxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FTU09DID8gIkFTU09DXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfUFMgPyAiUFNcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEID8gIkFVVEhPUklaRURcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9TSE9SVF9QUkVBTUJMRSA/ICJTSE9SVCBQUkVBTUJMRVxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dNRSA/ICJXTUVcbiIgOiAiIiwKLQkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9XRFMgPyAiV0RTXG4iIDogIiIpOworCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIiwKKwkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9NRlAgPyAiTUZQXG4iIDogIiIpOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwogfQogU1RBX09QUyhmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jCmluZGV4IGM1YzBjNTIuLjRlM2M3MmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9odC5jCisrKyBiL25ldC9tYWM4MDIxMS9odC5jCkBAIC0xNyw4ICsxNyw3IEBACiAjaW5jbHVkZSA8bmV0L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJzdGFfaW5mby5oIgotI2luY2x1ZGUgIndtZS5oIgorI2luY2x1ZGUgInJhdGUuaCIKIAogdm9pZCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXBfaWUsCkBAIC05NSw3ICs5NCw5IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfaHRfY29uZiBodDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCBlbmFibGVfaHQgPSB0cnVlLCBodF9jaGFuZ2VkOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwpAQCAtMTMwLDE0ICsxMzEsMjUgQEAKIAkJfQogCX0KIAotCWh0X2NoYW5nZWQgPSBsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkICE9IGVuYWJsZV9odCB8fAotCQkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGU7CisJaHRfY2hhbmdlZCA9IGNvbmZfaXNfaHQoJmxvY2FsLT5ody5jb25mKSAhPSBlbmFibGVfaHQgfHwKKwkJICAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlOwogCiAJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOwotCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSBlbmFibGVfaHQ7CiAKLQlpZiAoaHRfY2hhbmdlZCkKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUKTsKKwlpZiAoaHRfY2hhbmdlZCkgeworICAgICAgICAgICAgICAgIC8qIGNoYW5uZWxfdHlwZSBjaGFuZ2UgYXV0b21hdGljYWxseSBkZXRlY3RlZCAqLworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOworCQlpZiAoc3RhKQorCQkJcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKGxvY2FsLCBzYmFuZCwgc3RhLAorCQkJCQkJIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKworICAgICAgICB9CiAKIAkvKiBkaXNhYmxlIEhUICovCiAJaWYgKCFlbmFibGVfaHQpCkBAIC0xNTQsMTA4ICsxNjYsMjIgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKLQkJCQkJIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXJ0X3NlcV9udW0sCi0JCQkJCSB1MTYgYWdnX3NpemUsIHUxNiB0aW1lb3V0KQordm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBjYXBhYjsKKwlpbnQgaTsKIAotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7CisJCV9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIGksIFdMQU5fQkFDS19JTklUSUFUT1IpOworCQlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCBpLCBXTEFOX0JBQ0tfUkVDSVBJRU5ULAorCQkJCQkgICAgICAgV0xBTl9SRUFTT05fUVNUQV9MRUFWRV9RQlNTKTsKIAl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwotCi0Jc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKLQotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVROwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCWNhcGFiID0gKHUxNikoMSA8PCAxKTsJCS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLwotCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLwotCWNhcGFiIHw9ICh1MTYpKGFnZ19zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dlcmdhdGlvbiAqLwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSA9Ci0JCQkJCWNwdV90b19sZTE2KHN0YXJ0X3NlcV9udW0gPDwgNCk7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCi0JCQkJICAgICAgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAotCQkJCSAgICAgIHUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgY2FwYWI7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJICAgICAgICJmb3IgYWRkYmEgcmVzcCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwotCi0Jc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSk7Ci0JbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVTUDsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCi0JY2FwYWIgPSAodTE2KShwb2xpY3kgPDwgMSk7CS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLwotCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLwotCWNhcGFiIHw9ICh1MTYpKGJ1Zl9zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dyZWdhdGlvbiAqLwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAotCQkJCSB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpCit2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCisJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBwYXJhbXM7CkBAIC0yNzMsMTAgKzE5OSwxMiBAQAogCW1lbXNldChtZ210LCAwLCAyNCk7CiAJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCkBAIC0yOTAsNzcwICsyMTgsNyBAQAogCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAltZ210LT51LmFjdGlvbi51LmRlbGJhLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uX2NvZGUpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXI7Ci0JdTE2IGJhcl9jb250cm9sID0gMDsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpiYXIpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCQkiYmFyIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopc2tiX3B1dChza2IsIHNpemVvZigqYmFyKSk7Ci0JbWVtc2V0KGJhciwgMCwgc2l6ZW9mKCpiYXIpKTsKLQliYXItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwKLQkJCQkJIElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSk7Ci0JbWVtY3B5KGJhci0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGJhci0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNilJRUVFODAyMTFfQkFSX0NUUkxfQUNLX1BPTElDWV9OT1JNQUw7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNilJRUVFODAyMTFfQkFSX0NUUkxfQ0JNVElEX0NPTVBSRVNTRURfQkE7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNikodGlkIDw8IDEyKTsKLQliYXItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihiYXJfY29udHJvbCk7Ci0JYmFyLT5zdGFydF9zZXFfbnVtID0gY3B1X3RvX2xlMTYoc3NuKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwKLQkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IHJldCwgaTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2hlY2sgaWYgVElEIGlzIGluIG9wZXJhdGlvbmFsIHN0YXRlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0KLQkJCQkhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9Ci0JCUhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAotCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JLyogc3RvcCBIVyBSeCBhZ2dyZWdhdGlvbi4gYW1wZHVfYWN0aW9uIGV4aXN0ZW5jZQotCSAqIGFscmVhZHkgdmVyaWZpZWQgaW4gc2Vzc2lvbiBpbml0IHNvIHdlIGFkZCB0aGUgQlVHX09OICovCi0JQlVHX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEJBIHNlc3Npb24gc3RvcCByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKLQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKLQkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLQotCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLwotCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQotCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKLQotCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCi0JaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCi0JCWllZWU4MDIxMV9zZW5kX2RlbGJhKHNkYXRhLCByYSwgdGlkLCAwLCByZWFzb24pOwotCi0JLyogZnJlZSB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5idWZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKSB7Ci0JCQkvKiByZWxlYXNlIHRoZSByZW9yZGVyZWQgZnJhbWVzICovCi0JCQlkZXZfa2ZyZWVfc2tiKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pOwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zdG9yZWRfbXBkdV9udW0tLTsKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0gPSBOVUxMOwotCQl9Ci0JfQotCS8qIGZyZWUgcmVzb3VyY2VzICovCi0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1Zik7Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9JRExFOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLQotLyoKLSAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCi0gKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KLSAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCi0JICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAotCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCi0JICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLwotCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnRlbXBfc3RhID0gY29udGFpbmVyX29mKCh2b2lkICopZGF0YSwKLQkJc3RydWN0IHN0YV9pbmZvLCB0aW1lcl90b190aWRbdGlkXSk7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHRlbXBfc3RhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCB0ZW1wX3N0YS0+c3RhLmFkZHIpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKLQkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKLSNlbmRpZgotCQlnb3RvIHRpbWVyX2V4cGlyZWRfZXhpdDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgcmVzcG9uc2UgdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQotCS8qIGdvIHRocm91Z2ggdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCB0ZW1wX3N0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwotCi10aW1lcl9leHBpcmVkX2V4aXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7Ci0JCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oJmxvY2FsLT5odywgYWRkciwgaSwKLQkJCQkJICAgICBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKLQkJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc2RhdGEsIGFkZHIsIGksCi0JCQkJCQkgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKLQkJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MpOwotCX0KLX0KLQotaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdTE2IHN0YXJ0X3NlcV9udW07Ci0JdTggKnN0YXRlOwotCWludCByZXQgPSAwOwotCi0JaWYgKCh0aWQgPj0gU1RBX1RJRF9OVU0pIHx8ICEoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiT3BlbiBCQSBzZXNzaW9uIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgdGhlIHN0YXRpb25cbiIpOwotI2VuZGlmCi0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiB3ZSBoYXZlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCByZWNlaXZlciBkb2VzIG5vdCB3YW50IEEtTVBEVSAqLwotCWlmIChzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID4gSFRfQUdHX01BWF9SRVRSSUVTKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBub3QgaW4gYWdncmVnYXRpb24gZmxvdyBhbHJlYWR5ICovCi0JaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBzZXNzaW9uIGlzIG5vdCAiCi0JCQkJICJpZGxlIG9uIHRpZCAldVxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0KLQkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAotCQkJCQl0aWQpOwotI2VuZGlmCi0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VubG9ja19zdGE7Ci0JfQotCS8qIFR4IHRpbWVyICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KLQkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQotCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07Ci0JaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLQotCWlmIChody0+YW1wZHVfcXVldWVzKSB7Ci0JCS8qIGNyZWF0ZSBhIG5ldyBxdWV1ZSBmb3IgdGhpcyBhZ2dyZWdhdGlvbiAqLwotCQlyZXQgPSBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChsb2NhbCwgc3RhLCB0aWQpOwotCi0JCS8qIGNhc2Ugbm8gcXVldWUgaXMgYXZhaWxhYmxlIHRvIGFnZ3JlZ2F0aW9uCi0JCSAqIGRvbid0IHN3aXRjaCB0byBhZ2dyZWdhdGlvbiAqLwotCQlpZiAocmV0KSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSAiCi0JCQkgICAgICAgInF1ZXVlIHVuYXZhaWxhYmxlIGZvciB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCQlnb3RvIGVycl91bmxvY2tfcXVldWU7Ci0JCX0KLQl9Ci0Jc2RhdGEgPSBzdGEtPnNkYXRhOwotCi0JLyogT2ssIHRoZSBBZGRiYSBmcmFtZSBoYXNuJ3QgYmVlbiBzZW50IHlldCwgYnV0IGlmIHRoZSBkcml2ZXIgY2FsbHMgdGhlCi0JICogY2FsbCBiYWNrIHJpZ2h0IGF3YXksIGl0IG11c3Qgc2VlIHRoYXQgdGhlIGZsb3cgaGFzIGJlZ3VuICovCi0JKnN0YXRlIHw9IEhUX0FEREJBX1JFUVVFU1RFRF9NU0s7Ci0KLQkvKiBUaGlzIGlzIHNsaWdodGx5IHJhY3kgYmVjYXVzZSB0aGUgcXVldWUgaXNuJ3Qgc3RvcHBlZCAqLwotCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLQotCWlmIChyZXQpIHsKLQkJLyogTm8gbmVlZCB0byByZXF1ZXVlIHRoZSBwYWNrZXRzIGluIHRoZSBhZ2cgcXVldWUsIHNpbmNlIHdlCi0JCSAqIGhlbGQgdGhlIHR4IGxvY2s6IG5vIHBhY2tldCBjb3VsZCBiZSBlbnF1ZXVlZCB0byB0aGUgbmV3bHkKLQkJICogYWxsb2NhdGVkIHF1ZXVlICovCi0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUobG9jYWwsIHN0YSwgdGlkLCAwKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gSFcgdW5hdmFpbGFibGUgZm9yIgotCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0JCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKLQl9Ci0KLQkvKiBXaWxsIHB1dCBhbGwgdGhlIHBhY2tldHMgaW4gdGhlIG5ldyBTVyBxdWV1ZSAqLwotCWlmIChody0+YW1wZHVfcXVldWVzKQotCQlpZWVlODAyMTFfcmVxdWV1ZShsb2NhbCwgaWVlZTgwMl8xZF90b19hY1t0aWRdKTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCS8qIHNlbmQgYW4gYWRkQkEgcmVxdWVzdCAqLwotCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4gPQotCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOwotCi0KLQlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0YS0+c2RhdGEsIHJhLCB0aWQsCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4sCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24sCi0JCQkgMHg0MCwgNTAwMCk7Ci0JLyogYWN0aXZhdGUgdGhlIHRpbWVyIGZvciB0aGUgcmVjaXBpZW50J3MgYWRkQkEgcmVzcG9uc2UgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZXhwaXJlcyA9Ci0JCQkJamlmZmllcyArIEFEREJBX1JFU1BfSU5URVJWQUw7Ci0JYWRkX3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0JZ290byBleGl0OwotCi1lcnJfdW5sb2NrX3F1ZXVlOgotCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKLQlyZXQgPSAtRUJVU1k7Ci1lcnJfdW5sb2NrX3N0YToKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLWV4aXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24pOwotCi1pbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgdTggKnJhLCB1MTYgdGlkLAotCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gc3RvcF9CQV9leGl0OwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCWlmIChody0+YW1wZHVfcXVldWVzKQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAotCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUCwKLQkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKLQotCS8qIGNhc2UgSFcgZGVuaWVkIGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCi0JaWYgKHJldCkgewotCQlXQVJOX09OKHJldCAhPSAtRUJVU1kpOwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0JCWdvdG8gc3RvcF9CQV9leGl0OwotCX0KLQotc3RvcF9CQV9leGl0OgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24pOwotCi12b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCi0JCQkJdGlkLCBTVEFfVElEX05VTSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHdhcyBub3QgcmVxdWVzdGVkIHlldCwgc3RhdGUgaXMgJWRcbiIsCi0JCQkJKnN0YXRlKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlXQVJOX09OX09OQ0UoKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSyk7Ci0KLQkqc3RhdGUgfD0gSFRfQUREQkFfRFJWX1JFQURZX01TSzsKLQotCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKLSNlbmRpZgotCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCX0KLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKTsKLQotdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1OCB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCWludCBhZ2dfcXVldWU7Ci0KLQlpZiAodGlkID49IFNUQV9USURfTlVNKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAotCQkJCXRpZCwgU1RBX1RJRF9OVU0pOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiU3RvcHBpbmcgVHggQkEgc2Vzc2lvbiBmb3IgJXBNIHRpZCAlZFxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOwotI2VuZGlmCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQotCS8qIE5PVEU6IG5vIG5lZWQgdG8gdXNlIHN0YS0+bG9jayBpbiB0aGlzIHN0YXRlIGNoZWNrLCBhcwotCSAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24gd2lsbCBsZXQgb25seSBvbmUgc3RvcCBjYWxsIHRvCi0JICogcGFzcyB0aHJvdWdoIHBlciBzdGEvdGlkCi0JICovCi0JaWYgKCgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLKSA9PSAwKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ1bmV4cGVjdGVkIGNhbGxiYWNrIHRvIEEtTVBEVSBzdG9wXG4iKTsKLSNlbmRpZgotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSykKLQkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RhLT5zZGF0YSwgcmEsIHRpZCwKLQkJCVdMQU5fQkFDS19JTklUSUFUT1IsIFdMQU5fUkVBU09OX1FTVEFfTk9UX1VTRSk7Ci0KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykgewotCQlhZ2dfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0JCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMSk7Ci0KLQkJLyogV2UganVzdCByZXF1ZXVlZCB0aGUgYWxsIHRoZSBmcmFtZXMgdGhhdCB3ZXJlIGluIHRoZQotCQkgKiByZW1vdmVkIHF1ZXVlLCBhbmQgc2luY2Ugd2UgbWlnaHQgbWlzcyBhIHNvZnRpcnEgd2UgZG8KLQkJICogbmV0aWZfc2NoZWR1bGVfcXVldWUuICBpZWVlODAyMTFfd2FrZV9xdWV1ZSBpcyBub3QgdXNlZAotCQkgKiBoZXJlIGFzIHRoaXMgcXVldWUgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3BwZWQKLQkJICovCi0JCW5ldGlmX3NjaGVkdWxlX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsCi0JCQkJCQkJIGFnZ19xdWV1ZSkpOwotCX0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0Jc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKTsKLQotdm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKLQotCWlmICh1bmxpa2VseSghc2tiKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7Ci0JbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOwotCXJhX3RpZC0+dGlkID0gdGlkOwotCi0Jc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9BRERCQV9NU0c7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7Ci0JdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSk7Ci0KLXZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwotCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCi0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKLQkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwotCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKLQlyYV90aWQtPnRpZCA9IHRpZDsKLQotCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfREVMQkFfTVNHOwotCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSk7Ci0KLS8qCi0gKiBBZnRlciBhY2NlcHRpbmcgdGhlIEFkZEJBIFJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIsCi0gKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KLSAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgotICovCi1zdGF0aWMgdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKLQkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIHZhcmlvdXMgc3RhX2luZm8gYXJlIG5lZWRlZCBoZXJlLCBzbyBpbml0Ci0JICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKLQkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCi0JdTggKnB0aWQgPSAodTggKilkYXRhOwotCXU4ICp0aW1lcl90b19pZCA9IHB0aWQgLSAqcHRpZDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0aW1lcl90b19pZCwgc3RydWN0IHN0YV9pbmZvLAotCQkJCQkgdGltZXJfdG9fdGlkWzBdKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJyeCBzZXNzaW9uIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCAodTE2KSpwdGlkKTsKLSNlbmRpZgotCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCi0JCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCi0JCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOwotfQotCi12b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3Qoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwotCXUxNiBjYXBhYiwgdGlkLCB0aW1lb3V0LCBiYV9wb2xpY3ksIGJ1Zl9zaXplLCBzdGFydF9zZXFfbnVtLCBzdGF0dXM7Ci0JdTggZGlhbG9nX3Rva2VuOwotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKLQotCS8qIGV4dHJhY3Qgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gYWRkYmEgcmVxdWVzdCBmcmFtZSAqLwotCWRpYWxvZ190b2tlbiA9IG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmRpYWxvZ190b2tlbjsKLQl0aW1lb3V0ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEudGltZW91dCk7Ci0Jc3RhcnRfc2VxX251bSA9Ci0JCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnN0YXJ0X3NlcV9udW0pID4+IDQ7Ci0KLQljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKLQliYV9wb2xpY3kgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0spID4+IDE7Ci0JdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCWJ1Zl9zaXplID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spID4+IDY7Ci0KLQlzdGF0dXMgPSBXTEFOX1NUQVRVU19SRVFVRVNUX0RFQ0xJTkVEOwotCi0JLyogc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYXJhbWV0ZXJzOgotCSAqIGNoZWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FuIHN1cHBvcnQgdGhlIEJBIHBvbGljeQotCSAqIGFuZCBpZiBidWZmZXIgc2l6ZSBkb2VzIG5vdCBleGNlZWRzIG1heCB2YWx1ZSAqLwotCS8qIFhYWDogY2hlY2sgb3duIGh0IGRlbGF5ZWQgQkEgY2FwYWJpbGl0eT8/ICovCi0JaWYgKCgoYmFfcG9saWN5ICE9IDEpCi0JCSYmICghKHN0YS0+c3RhLmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBKSkpCi0JCXx8IChidWZfc2l6ZSA+IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGKSkgewotCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1FPU19QQVJBTTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJBZGRCQSBSZXEgd2l0aCBiYWQgcGFyYW1zIGZyb20gIgotCQkJCSIlcE0gb24gdGlkICV1LiBwb2xpY3kgJWQsIGJ1ZmZlciBzaXplICVkXG4iLAotCQkJCW1nbXQtPnNhLCB0aWQsIGJhX3BvbGljeSwKLQkJCQlidWZfc2l6ZSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCWdvdG8gZW5kX25vX2xvY2s7Ci0JfQotCS8qIGRldGVybWluZSBkZWZhdWx0IGJ1ZmZlciBzaXplICovCi0JaWYgKGJ1Zl9zaXplID09IDApIHsKLQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOwotCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOwotCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yOwotCX0KLQotCi0JLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgQWRkQkEgUmVxIGZyb20gIgotCQkJCSIlcE0gb24gdGlkICV1XG4iLAotCQkJCW1nbXQtPnNhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBSeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3J4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgcnggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAotCQkJCQl0aWQpOwotI2VuZGlmCi0JCWdvdG8gZW5kOwotCX0KLQkvKiByeCB0aW1lciAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9Ci0JCQkJc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmRhdGEgPQotCQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOwotCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7Ci0KLQl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOwotCi0JLyogcHJlcGFyZSByZW9yZGVyaW5nIGJ1ZmZlciAqLwotCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmID0KLQkJa21hbGxvYyhidWZfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZikgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jYXRlIHJlb3JkZXJpbmcgYnVmZmVyICIKLQkJCSAgICAgICAidG8gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0JCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7Ci0JCWdvdG8gZW5kOwotCX0KLQltZW1zZXQodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYsIDAsCi0JCWJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWZmICopKTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJULAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiUnggQS1NUERVIHJlcXVlc3Qgb24gdGlkICVkIHJlc3VsdCAlZFxuIiwgdGlkLCByZXQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JaWYgKHJldCkgewotCQlrZnJlZSh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1Zik7Ci0JCWtmcmVlKHRpZF9hZ2dfcngpOwotCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBjaGFuZ2Ugc3RhdGUgYW5kIHNlbmQgYWRkYmEgcmVzcCAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQl0aWRfYWdnX3J4LT5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0JdGlkX2FnZ19yeC0+c3NuID0gc3RhcnRfc2VxX251bTsKLQl0aWRfYWdnX3J4LT5oZWFkX3NlcV9udW0gPSBzdGFydF9zZXFfbnVtOwotCXRpZF9hZ2dfcngtPmJ1Zl9zaXplID0gYnVmX3NpemU7Ci0JdGlkX2FnZ19yeC0+dGltZW91dCA9IHRpbWVvdXQ7Ci0JdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtID0gMDsKLQlzdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTOwotZW5kOgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi1lbmRfbm9fbG9jazoKLQlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkgIGRpYWxvZ190b2tlbiwgc3RhdHVzLCAxLCBidWZfc2l6ZSwgdGltZW91dCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0JdTE2IGNhcGFiOwotCXUxNiB0aWQsIHN0YXJ0X3NlcV9udW07Ci0JdTggKnN0YXRlOwotCi0JY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIpOwotCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ3cm9uZyBhZGRCQSByZXNwb25zZSB0b2tlbiwgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlyZXR1cm47Ci0JfQotCi0JZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkIFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKLQkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7Ci0KLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwgJiYKLQkJICAgIGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQotCQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSB7Ci0JCQkodm9pZClsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsCi0JCQkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FLAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLQkJfQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzdW1pbmcgVFggYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JfSBlbHNlIHsKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSsrOwotCQkvKiB0aGlzIHdpbGwgYWxsb3cgdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCBzdGEtPnN0YS5hZGRyLCB0aWQsCi0JCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0JfQorCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjAxZTFmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtMCwwICsxLDkwOCBAQAorLyoKKyAqIElCU1MgbW9kZSBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDksIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJyYXRlLmgiCisKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCisKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0RFTEFZIDB4NDAwMDAwCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCisKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGhfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQlzaXplX3QgbGVuKQoreworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CisKKwlpZiAobGVuIDwgMjQgKyA2KQorCQlyZXR1cm47CisKKwlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CisJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CisKKwkvKgorCSAqIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUworCSAqIG5ldHdvcmtzIGFuZCBtb3N0IGltcGxlbWVudGF0aW9ucyBkbyBub3Qgc2VlbSB0byB1c2UgaXQuCisJICogSG93ZXZlciwgdHJ5IHRvIHJlcGx5IHRvIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzIGlmIHNvbWVvbmUKKwkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KKwkgKi8KKwlpZiAoYXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4gJiYgYXV0aF90cmFuc2FjdGlvbiA9PSAxKQorCQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAyLCBXTEFOX0FVVEhfT1BFTiwgTlVMTCwgMCwKKwkJCQkgICAgc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIGNvbnN0IHU4ICpic3NpZCwgY29uc3QgaW50IGJlYWNvbl9pbnQsCisJCQkJICAgICBjb25zdCBpbnQgZnJlcSwKKwkJCQkgICAgIGNvbnN0IHNpemVfdCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgICAgIGNvbnN0IHU4ICpzdXBwX3JhdGVzLAorCQkJCSAgICAgY29uc3QgdTE2IGNhcGFiaWxpdHksIHU2NCB0c2YpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgcmVzID0gMCwgcmF0ZXMsIGksIGo7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CisJCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KKwkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJfQorCisJaWYgKChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpICYmCisJICAgbWVtY21wKGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJcmV0dXJuIHJlczsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKKwkJICAgICAgICJyZXNwb25zZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkpIHsKKwkJLyogUmVtb3ZlIHBvc3NpYmxlIFNUQSBlbnRyaWVzIGZyb20gb3RoZXIgSUJTUyBuZXR3b3Jrcy4gKi8KKwkJc3RhX2luZm9fZmx1c2hfZGVsYXllZChzZGF0YSk7CisJfQorCisJbWVtY3B5KGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYmVhY29uX2ludCA+PSAxMCA/IGJlYWNvbl9pbnQgOiAxMDsKKworCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gY2FwYWJpbGl0eSAmCisJCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7CisKKwlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGZyZXEpOworCisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCS8qIEJ1aWxkIElCU1MgcHJvYmUgcmVzcG9uc2UgKi8KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCisJCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOworCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0KKwkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7CisJbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQodHNmKTsKKwltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWJpbGl0eSk7CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmaWJzcy0+c3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gaWZpYnNzLT5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pOworCisJcmF0ZXMgPSBzdXBwX3JhdGVzX2xlbjsKKwlpZiAocmF0ZXMgPiA4KQorCQlyYXRlcyA9IDg7CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7CisJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwkqcG9zKysgPSByYXRlczsKKwltZW1jcHkocG9zLCBzdXBwX3JhdGVzLCByYXRlcyk7CisKKwlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOworCQkqcG9zKysgPSBXTEFOX0VJRF9EU19QQVJBTVM7CisJCSpwb3MrKyA9IDE7CisJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChmcmVxKTsKKwl9CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOworCSpwb3MrKyA9IDI7CisJLyogRklYOiBzZXQgQVRJTSB3aW5kb3cgYmFzZWQgb24gc2NhbiByZXN1bHRzICovCisJKnBvcysrID0gMDsKKwkqcG9zKysgPSAwOworCisJaWYgKHN1cHBfcmF0ZXNfbGVuID4gOCkgeworCQlyYXRlcyA9IHN1cHBfcmF0ZXNfbGVuIC0gODsKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSByYXRlczsKKwkJbWVtY3B5KHBvcywgJnN1cHBfcmF0ZXNbOF0sIHJhdGVzKTsKKwl9CisKKwlpZmlic3MtPnByb2JlX3Jlc3AgPSBza2I7CisKKwlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCSAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKKworCisJcmF0ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCBiaXRyYXRlID0gKHN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7CisJCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQorCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5iaXRyYXRlID09IGJpdHJhdGUpCisJCQkJcmF0ZXMgfD0gQklUKGopOworCX0KKworCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIHN1cHBfcmF0ZXNfbGVuLCBzdXBwX3JhdGVzKTsKKworCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQ7CisJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEOworCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwKKwkJCQkJIGJzcy0+Y2Jzcy5ic3NpZCwKKwkJCQkJIGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWwsCisJCQkJCSBic3MtPmNic3MuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSBic3MtPnN1cHBfcmF0ZXNfbGVuLCBic3MtPnN1cHBfcmF0ZXMsCisJCQkJCSBic3MtPmNic3MuY2FwYWJpbGl0eSwKKwkJCQkJIGJzcy0+Y2Jzcy50c2YpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICBzaXplX3QgbGVuLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCQkgIGJvb2wgYmVhY29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBmcmVxOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXU2NCBiZWFjb25fdGltZXN0YW1wLCByeF90aW1lc3RhbXA7CisJdTMyIHN1cHBfcmF0ZXMgPSAwOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKKworCWlmIChlbGVtcy0+ZHNfcGFyYW1zICYmIGVsZW1zLT5kc19wYXJhbXNfbGVuID09IDEpCisJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMtPmRzX3BhcmFtc1swXSk7CisJZWxzZQorCQlmcmVxID0gcnhfc3RhdHVzLT5mcmVxOworCisJY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEpOworCisJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgZWxlbXMtPnN1cHBfcmF0ZXMgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQlzdXBwX3JhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsIGVsZW1zLCBiYW5kKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJCWlmIChzdGEpIHsKKwkJCXUzMiBwcmV2X3JhdGVzOworCisJCQlwcmV2X3JhdGVzID0gc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXTsKKwkJCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLworCQkJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAorCQkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJCWlmIChzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdICE9IHByZXZfcmF0ZXMpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1cGRhdGVkIHN1cHBfcmF0ZXMgc2V0ICIKKwkJCQkgICAgImZvciAlcE0gYmFzZWQgb24gYmVhY29uIGluZm8gKDB4JWxseCB8ICIKKwkJCQkgICAgIjB4JWxseCAtPiAweCVsbHgpXG4iLAorCQkJCSAgICBzZGF0YS0+ZGV2LT5uYW1lLAorCQkJCSAgICBzdGEtPnN0YS5hZGRyLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKKyNlbmRpZgorCQl9IGVsc2UKKwkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShsb2NhbCwgcnhfc3RhdHVzLCBtZ210LCBsZW4sIGVsZW1zLAorCQkJCQljaGFubmVsLCBiZWFjb24pOworCWlmICghYnNzKQorCQlyZXR1cm47CisKKwkvKiB3YXMganVzdCB1cGRhdGVkIGluIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUgKi8KKwliZWFjb25fdGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKKworCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gbWVyZ2UgSUJTUyAqLworCisJLyogbWVyZ2Ugb25seSBvbiBiZWFjb25zICg/Pz8pICovCisJaWYgKCFiZWFjb24pCisJCWdvdG8gcHV0X2JzczsKKworCS8qIHdlIHVzZSBhIGZpeGVkIEJTU0lEICovCisJaWYgKHNkYXRhLT51Lmlic3MuZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIG5vdCBhbiBJQlNTICovCisJaWYgKCEoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIGRpZmZlcmVudCBjaGFubmVsICovCisJaWYgKGJzcy0+Y2Jzcy5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIGRpZmZlcmVudCBTU0lEICovCisJaWYgKGVsZW1zLT5zc2lkX2xlbiAhPSBzZGF0YS0+dS5pYnNzLnNzaWRfbGVuIHx8CisJICAgIG1lbWNtcChlbGVtcy0+c3NpZCwgc2RhdGEtPnUuaWJzcy5zc2lkLAorCQkJCXNkYXRhLT51Lmlic3Muc3NpZF9sZW4pKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBzYW1lIEJTU0lEICovCisJaWYgKG1lbWNtcChic3MtPmNic3MuYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlnb3RvIHB1dF9ic3M7CisKKwlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CisJCS8qCisJCSAqIEZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWU7IHNpbmNlIG1hY3RpbWUgaXMKKwkJICogZGVmaW5lZCBhcyB0aGUgdGltZSB0aGUgZmlyc3QgZGF0YSBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMKKwkJICogdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJlYWNvbiBpcyBkZWZpbmVkIGFzICJ0aGUKKwkJICogdGltZSB0aGF0IHRoZSBkYXRhIHN5bWJvbCBjb250YWluaW5nIHRoZSBmaXJzdCBiaXQgb2YgdGhlCisJCSAqIHRpbWVzdGFtcCBpcyB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZworCQkgKiBTVEEncyBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKKwkJICogaW50ZXJmYWNlIHRvIGl0cyBpbnRlcmZhY2Ugd2l0aCB0aGUgV00iICg4MDIuMTEgMTEuMS4yKQorCQkgKiAtIGVxdWFscyB0aGUgdGltZSB0aGlzIGJpdCBhcnJpdmVzIGF0IHRoZSByZWNlaXZlciAtIHdlIGhhdmUKKwkJICogdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSB0d28uCisJCSAqCisJCSAqIEUuZy4gYXQgMSBNQml0IHRoYXQgbWVhbnMgbWFjdGltZSBpcyAxOTIgdXNlYyBlYXJsaWVyCisJCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCisJCSAqLworCQlpbnQgcmF0ZTsKKworCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkKKwkJCXJhdGUgPSA2NTsgLyogVE9ETzogSFQgcmF0ZXMgKi8KKwkJZWxzZQorCQkJcmF0ZSA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF0tPgorCQkJCWJpdHJhdGVzW3J4X3N0YXR1cy0+cmF0ZV9pZHhdLmJpdHJhdGU7CisKKwkJcnhfdGltZXN0YW1wID0gcnhfc3RhdHVzLT5tYWN0aW1lICsgKDI0ICogOCAqIDEwIC8gcmF0ZSk7CisJfSBlbHNlIGlmIChsb2NhbCAmJiBsb2NhbC0+b3BzICYmIGxvY2FsLT5vcHMtPmdldF90c2YpCisJCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCisJCXJ4X3RpbWVzdGFtcCA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwllbHNlCisJCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCisJCXJ4X3RpbWVzdGFtcCA9IC0xTExVOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVwTSBCU1NJRD0iCisJICAgICAgICIlcE0gVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCBAJWx1XG4iLAorCSAgICAgICBtZ210LT5zYSwgbWdtdC0+YnNzaWQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfdGltZXN0YW1wLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHJ4X3RpbWVzdGFtcCAtIGJlYWNvbl90aW1lc3RhbXApLAorCSAgICAgICBqaWZmaWVzKTsKKyNlbmRpZgorCisJLyogZ2l2ZSBzbG93IGhhcmR3YXJlIHNvbWUgdGltZSB0byBkbyB0aGUgVFNGIHN5bmMgKi8KKwlpZiAocnhfdGltZXN0YW1wIDwgSUVFRTgwMjExX0lCU1NfTUVSR0VfREVMQVkpCisJCWdvdG8gcHV0X2JzczsKKworCWlmIChiZWFjb25fdGltZXN0YW1wID4gcnhfdGltZXN0YW1wKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKKwkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXBNXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+YnNzaWQpOworI2VuZGlmCisJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOworCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOworCX0KKworIHB1dF9ic3M6CisJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgSUJTUyBzdGF0aW9uLCB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4sCisgKiBpbiBJQlNTIG1vZGUsIHJlY2VpdmluZyBhIGZyYW1lIGZyb20gYSB5ZXQtdW5rbm93biBzdGF0aW9uLCBoZW5jZQorICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KKyAqLworc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKKworCS8qIFRPRE86IENvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5IGFuZAorCSAqIGFsbG93IG5ldyBvbmUgdG8gYmUgYWRkZWQuICovCisJaWYgKGxvY2FsLT5udW1fc3RhID49IElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUykgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHJvb20gZm9yIGEgbmV3IElCU1MgU1RBICIKKwkJCSAgICAgICAiZW50cnkgJXBNXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBhZGRyKTsKKwkJfQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOworI2VuZGlmCisKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEpCisJCXJldHVybiBOVUxMOworCisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOworCisJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCisJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAorCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7CisKKwlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7CisKKwlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN0YTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBhY3RpdmUgPSAwOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCisJCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAorCQkJICAgICAgIGppZmZpZXMpKSB7CisJCQlhY3RpdmUrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gYWN0aXZlOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCisJaWVlZTgwMjExX3N0YV9leHBpcmUoc2RhdGEsIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQpOworCWlmIChpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkKKwkJcmV0dXJuOworCisJaWYgKChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKSAmJgorCSAgICAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTCkpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIGFjdGl2ZSBJQlNTIFNUQXMgLSB0cnlpbmcgdG8gc2NhbiBmb3Igb3RoZXIgIgorCSAgICAgICAiSUJTUyBuZXR3b3JrcyB3aXRoIHNhbWUgU1NJRCAobWVyZ2UpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKworCS8qIFhYWCBtYXliZSByYWN5PyAqLworCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5fcmVxKQorCQlyZXR1cm47CisKKwltZW1jcHkoc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkgICAgICAgaWZpYnNzLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwlzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisJaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgJnNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJdTggKnBvczsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggc3VwcF9yYXRlc1tJRUVFODAyMTFfTUFYX1NVUFBfUkFURVNdOworCXUxNiBjYXBhYmlsaXR5OworCWludCBpOworCisJaWYgKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpIHsKKwkJbWVtY3B5KGJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCisJCSAqIG93biBNQUMgYWRkcmVzcyB0byBtYWtlIHN1cmUgdGhhdCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyCisJCSAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGdldCBkaWZmZXJlbnQgQlNTSUQuICovCisJCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKKwkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCQlic3NpZFtpXSBePSBzZGF0YS0+ZGV2LT5kZXZfYWRkcltpXTsKKwkJYnNzaWRbMF0gJj0gfjB4MDE7CisJCWJzc2lkWzBdIHw9IDB4MDI7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlcE1cbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCisJCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDA7CisKKwljYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CisKKwlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQorCQljYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCWVsc2UKKwkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOworCisJcG9zID0gc3VwcF9yYXRlczsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJfQorCisJcmV0dXJuIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsCisJCQkJCSBic3NpZCwgbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCwKKwkJCQkJIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgc2JhbmQtPm5fYml0cmF0ZXMsIHN1cHBfcmF0ZXMsCisJCQkJCSBjYXBhYmlsaXR5LCAwKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKKwlpbnQgYWN0aXZlX2lic3M7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoYWN0aXZlX2lic3MpCisJCXJldHVybiAwOworCisJaWYgKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpCisJCWJzc2lkID0gaWZpYnNzLT5ic3NpZDsKKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBOVUxMLCBic3NpZCwKKwkJCQkgICAgICAgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfSUJTUywKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlpZiAoYnNzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgorCQkgICAgICAgIiVwTVxuIiwgYnNzLT5jYnNzLmJzc2lkLCBpZmlic3MtPmJzc2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKGJzcyAmJgorCSAgICAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpIHx8CisJICAgICBtZW1jbXAoaWZpYnNzLT5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTikpKSB7CisJCWludCByZXQ7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVwTSIKKwkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzLT5jYnNzLmJzc2lkKTsKKworCQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChic3MpCisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJLyogU2VsZWN0ZWQgSUJTUyBub3QgZm91bmQgaW4gY3VycmVudCBzY2FuIHJlc3VsdHMgLSB0cnkgdG8gc2NhbiAqLworCWlmIChpZmlic3MtPnN0YXRlID09IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEICYmCisJICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkgeworCQltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKworCQkJCQkgIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKwl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKworCQkJCQlJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCisJCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisKKwkJLyogWFhYIG1heWJlIHJhY3k/ICovCisJCWlmIChsb2NhbC0+c2Nhbl9yZXEpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCW1lbWNweShsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJCSAgICAgICBpZmlic3MtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKwkJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsICZsb2NhbC0+aW50X3NjYW5fcmVxKTsKKwl9IGVsc2UgaWYgKGlmaWJzcy0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQpIHsKKwkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZpYnNzLT5pYnNzX2pvaW5fcmVxICsKKwkJCSAgICAgICBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQpKSB7CisJCQlpZiAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFncyAmCisJCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkKKwkJCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzZGF0YSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCisJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkgICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJCQkvKiBObyBJQlNTIGZvdW5kIC0gZGVjcmVhc2Ugc2NhbiBpbnRlcnZhbCBhbmQgY29udGludWUKKwkJCSAqIHNjYW5uaW5nLiAqLworCQkJaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XOworCQl9CisKKwkJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCQltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBpbnRlcnZhbCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCB0eF9sYXN0X2JlYWNvbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKKwl1OCAqcG9zLCAqZW5kOworCisJaWYgKGlmaWJzcy0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgfHwKKwkgICAgbGVuIDwgMjQgKyAyIHx8ICFpZmlic3MtPnByb2JlX3Jlc3ApCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKKwkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOworCWVsc2UKKwkJdHhfbGFzdF9iZWFjb24gPSAxOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgorCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKKwkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKCF0eF9sYXN0X2JlYWNvbikKKwkJcmV0dXJuOworCisJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybjsKKworCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47CisJcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7CisJaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8CisJICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCisJCSAgICAgICAiZnJvbSAlcE1cbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAocG9zWzFdICE9IDAgJiYKKwkgICAgKHBvc1sxXSAhPSBpZmlic3MtPnNzaWRfbGVuIHx8CisJICAgICBtZW1jbXAocG9zICsgMiwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKSAhPSAwKSkgeworCQkvKiBJZ25vcmUgUHJvYmVSZXEgZm9yIGZvcmVpZ24gU1NJRCAqLworCQlyZXR1cm47CisJfQorCisJLyogUmVwbHkgd2l0aCBQcm9iZVJlc3AgKi8KKwlza2IgPSBza2JfY29weShpZmlic3MtPnByb2JlX3Jlc3AsIEdGUF9LRVJORUwpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwlyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZW5kaW5nIFByb2JlUmVzcCB0byAlcE1cbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlc3AtPmRhKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSBzaXplX3QgbGVuLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLAorCQkJCSZlbGVtcyk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CisKKwkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZiAoYmFzZWxlbiA+IGxlbikKKwkJcmV0dXJuOworCisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKKworCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGZjOworCisJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJICAgICByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQlpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUuaWJzcy53b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwkJcmV0dXJuOworCWlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZpYnNzLT5za2JfcXVldWUpKSkKKwkJaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChpZmlic3MtPnN0YXRlKSB7CisJY2FzZSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDoKKwkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEOgorCQlpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc2RhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCXNldF9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCk7CisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZpYnNzLT53b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJSU5JVF9XT1JLKCZpZmlic3MtPndvcmssIGllZWU4MDIxMV9pYnNzX3dvcmspOworCXNldHVwX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBpZWVlODAyMTFfaWJzc190aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZpYnNzLT5za2JfcXVldWUpOworCisJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTCB8CisJCQlJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworfQorCitpbnQgaWVlZTgwMjExX2lic3NfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuKQorCQlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX1NTSURfU0VUOworCWVsc2UKKwkJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfU1NJRF9TRVQ7CisKKwlpZmlic3MtPmlic3Nfam9pbl9yZXEgPSBqaWZmaWVzOworCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKKwlzZXRfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZmlic3MtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgeworCQltZW1zZXQoaWZpYnNzLT5zc2lkLCAwLCBzaXplb2YoaWZpYnNzLT5zc2lkKSk7CisJCW1lbWNweShpZmlic3MtPnNzaWQsIHNzaWQsIGxlbik7CisJCWlmaWJzcy0+c3NpZF9sZW4gPSBsZW47CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX2NvbW1pdChzZGF0YSk7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCW1lbWNweShzc2lkLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pOworCSpsZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7CisJCW1lbWNweShpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVDsKKwl9IGVsc2UgeworCQltZW1zZXQoaWZpYnNzLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19CU1NJRF9TRVQ7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJaWYgKGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gY29uZmlnIG5ldyBCU1NJRCB0byAiCisJCQkgICAgICAgInRoZSBsb3ctbGV2ZWwgZHJpdmVyXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBpZWVlODAyMTFfaWJzc19jb21taXQoc2RhdGEpOworfQorCisvKiBzY2FuIGZpbmlzaGVkIG5vdGlmaWNhdGlvbiAqLwordm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzczsKKworCWlmIChzZGF0YSAmJiBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJCWlmICgoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpKSB8fAorCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKQorCQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCX0KK30KKworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBmYzsKKworCWlmIChza2ItPmxlbiA8IDI0KQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lmlic3Muc2tiX3F1ZXVlLCBza2IpOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5pYnNzLndvcmspOworCQlyZXR1cm4gUlhfUVVFVUVEOworCX0KKworCXJldHVybiBSWF9EUk9QX01PTklUT1I7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGYzZWVjOTg5Li5lNmVkNzhjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtNDMsNyArNDMsNyBAQAogCiAvKiBSZXF1aXJlZCBlbmNyeXB0aW9uIGhlYWQgYW5kIHRhaWxyb29tICovCiAjZGVmaW5lIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NIDgKLSNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00gMTIKKyNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00gMTgKIAogLyogSUVFRSA4MDIuMTEgKENoLiA5LjUgRGVmcmFnbWVudGF0aW9uKSByZXF1aXJlcyBzdXBwb3J0IGZvciBjb25jdXJyZW50CiAgKiByZWNlcHRpb24gb2YgYXQgbGVhc3QgdGhyZWUgZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgbGltaXQgY2FuIGJlIGluY3JlYXNlZApAQCAtNTcsNiArNTcsOCBAQAogICovCiAjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDEwICogSFopCiAKKyNkZWZpbmUgVFVfVE9fRVhQX1RJTUUoeCkJKGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKCh4KSAqIDEwMjQpKQorCiBzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdtZW50X2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X2ZyYWdfdGltZTsKIAl1bnNpZ25lZCBpbnQgc2VxOwpAQCAtNzAsNDMgKzcyLDM2IEBACiAKIAogc3RydWN0IGllZWU4MDIxMV9ic3MgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqaG5leHQ7CisJLyogWWVzLCB0aGlzIGlzIGEgaGFjayAqLworCXN0cnVjdCBjZmc4MDIxMV9ic3MgY2JzczsKKworCS8qIGRvbid0IHdhbnQgdG8gbG9vayB1cCBhbGwgdGhlIHRpbWUgKi8KIAlzaXplX3Qgc3NpZF9sZW47Ci0KLQlhdG9taWNfdCB1c2VyczsKLQotCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCiAJdTggZHRpbV9wZXJpb2Q7Ci0JdTE2IGNhcGFiaWxpdHk7IC8qIGhvc3QgYnl0ZSBvcmRlciAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgZnJlcTsKLQlpbnQgc2lnbmFsLCBub2lzZSwgcXVhbDsKLQl1OCAqaWVzOyAvKiBhbGwgaW5mb3JtYXRpb24gZWxlbWVudHMgZnJvbSB0aGUgbGFzdCBCZWFjb24gb3IgUHJvYmUKLQkJICAqIFJlc3BvbnNlIGZyYW1lczsgbm90ZSBCZWFjb24gZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8KLQkJICAqIG92ZXJyaWRlIHZhbHVlcyBmcm9tIFByb2JlIFJlc3BvbnNlICovCi0Jc2l6ZV90IGllc19sZW47CisKIAlib29sIHdtbV91c2VkOworCisJdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlX3Jlc3A7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCXU4ICptZXNoX2lkOwogCXNpemVfdCBtZXNoX2lkX2xlbjsKIAl1OCAqbWVzaF9jZmc7CiAjZW5kaWYKKwogI2RlZmluZSBJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMgMzIKIAl1OCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9NQVhfU1VQUF9SQVRFU107CiAJc2l6ZV90IHN1cHBfcmF0ZXNfbGVuOwotCXU2NCB0aW1lc3RhbXA7Ci0JaW50IGJlYWNvbl9pbnQ7CiAKLQl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlOwotCi0JLyogZHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbworCS8qCisJICogRHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbwogCSAqIHRoYXQgd2UgY2FuIGZlZWQgRVJQIGluZm8gdG8gdGhlIGRyaXZlciB3aGVuIGhhbmRsaW5nIHRoZQogCSAqIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gdGhlc2UgZmllbGRzIHByb2JhYmx5IHdvbid0IGJlIHVwLXRvLWRhdGUKLQkgKiBvdGhlcndpc2UsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGVtLiAqLwotCWludCBoYXNfZXJwX3ZhbHVlOworCSAqIG90aGVyd2lzZSwgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoZW0uCisJICovCisJYm9vbCBoYXNfZXJwX3ZhbHVlOwogCXU4IGVycF92YWx1ZTsKIH07CiAKQEAgLTE1NCwxMSArMTQ5LDYgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKIAotCS8qIEV4dHJhIGZyYWdtZW50cyAoaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGZyYWdtZW50Ci0JICogaW4gc2tiKSAqLwotCXN0cnVjdCBza19idWZmICoqZXh0cmFfZnJhZzsKLQlpbnQgbnVtX2V4dHJhX2ZyYWc7Ci0KIAl1MTYgZXRoZXJ0eXBlOwogCXVuc2lnbmVkIGludCBmbGFnczsKIH07CkBAIC0xOTQsMTIgKzE4NCw2IEBACiAJdTE2IHRraXBfaXYxNjsKIH07CiAKLXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqKmV4dHJhX2ZyYWc7Ci0JaW50IG51bV9leHRyYV9mcmFnOwotfTsKLQogc3RydWN0IGJlYWNvbl9kYXRhIHsKIAl1OCAqaGVhZCwgKnRhaWw7CiAJaW50IGhlYWRfbGVuLCB0YWlsX2xlbjsKQEAgLTI0NCw3ICsyMjgsNyBAQAogCXU4IGZsYWdzOwogfTsKIAotLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YS5mbGFncyAqLworLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQuZmxhZ3MgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9TU0lEX1NFVAkJQklUKDApCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUCQlCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVAlCSVQoMikKQEAgLTI1Miw0MyArMjM2LDQ5IEBACiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRAlCSVQoNCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMCUJJVCg1KQogI2RlZmluZSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTCUJJVCg2KQotI2RlZmluZSBJRUVFODAyMTFfU1RBX01JWEVEX0NFTEwJQklUKDcpCisvKiBob2xlIGF0IDcsIHBsZWFzZSByZS11c2UgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAlCSVQoOCkKKy8qIGhvbGUgYXQgOSwgcGxlYXNlIHJlLXVzZSAqLwogI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwJQklUKDEwKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMCUJJVCgxMSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMCUJJVCgxMikKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQJQklUKDEzKQorI2RlZmluZSBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQJQklUKDE0KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRAlCSVQoMTUpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJQklUKDE2KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX0VYVF9TTUUJCUJJVCgxNykKIC8qIGZsYWdzIGZvciBNTE1FIHJlcXVlc3QgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfU0NBTiAwCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSAxCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0FVVEggMgogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9SVU4gIDMKIAotLyogU1RBL0lCU1MgTUxNRSBzdGF0ZXMgKi8KLWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHsKLQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNILAotCUlFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCwKLX07Ci0KIC8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVAgQklUKDIpCisjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19GVCBCSVQoMykKIAotc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgeworc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBjaHN3aXRjaF90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hzd2l0Y2hfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX2xvc3Nfd29yazsKKwogCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CisKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHN0YXRlOwogCXNpemVfdCBzc2lkX2xlbjsKLQl1OCBzY2FuX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0Jc2l6ZV90IHNjYW5fc3NpZF9sZW47CisKKwllbnVtIHsKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVELAorCQlJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFLAorCQlJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFLAorCQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLAorCQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCwKKwl9IHN0YXRlOworCiAJdTE2IGFpZDsKIAl1MTYgYXBfY2FwYWIsIGNhcGFiOwogCXU4ICpleHRyYV9pZTsgLyogdG8gYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiBBc3NvY1JlcSAqLwpAQCAtMzA4LDYgKzI5OCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXF1ZXN0OwogCiAJdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlOworCXVuc2lnbmVkIGxvbmcgbGFzdF9iZWFjb247CiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTMxNSwxMSArMzA2LDUzIEBACiAJaW50IGF1dGhfYWxnOyAvKiBjdXJyZW50bHkgdXNlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KIAlpbnQgYXV0aF90cmFuc2FjdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCi0JdTMyIHN1cHBfcmF0ZXNfYml0c1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwllbnVtIHsKKwkJSUVFRTgwMjExX01GUF9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX01GUF9PUFRJT05BTCwKKwkJSUVFRTgwMjExX01GUF9SRVFVSVJFRAorCX0gbWZwOyAvKiBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKi8KIAogCWludCB3bW1fbGFzdF9wYXJhbV9zZXQ7CisKKwkvKiBFeHRyYSBJRSBkYXRhIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLworCXU4ICpzbWVfYXV0aF9pZTsKKwlzaXplX3Qgc21lX2F1dGhfaWVfbGVuOworfTsKKworZW51bSBpZWVlODAyMTFfaWJzc19mbGFncyB7CisJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwJCT0gQklUKDEpLAorCUlFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVAkJPSBCSVQoMiksCisJSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQJCT0gQklUKDMpLAorCUlFRUU4MDIxMV9JQlNTX1NTSURfU0VUCQkJPSBCSVQoNCksCit9OworCitlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgeworCUlFRUU4MDIxMV9JQlNTX1JFUV9SVU4JPSAwLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3F1ZXVlOworCisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKworCXUzMiBmbGFnczsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKKworCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCisKKwllbnVtIHsKKwkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCisJCUlFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVELAorCX0gc3RhdGU7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggewpAQCAtMzcwLDcgKzQwMyw2IEBACiAgKgogICogQElFRUU4MDIxMV9TREFUQV9BTExNVUxUSTogaW50ZXJmYWNlIHdhbnRzIGFsbCBtdWx0aWNhc3QgcGFja2V0cwogICogQElFRUU4MDIxMV9TREFUQV9QUk9NSVNDOiBpbnRlcmZhY2UgaXMgcHJvbWlzYwotICogQElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRTogdXNlcnNwYWNlIE1MTUUgaXMgYWN0aXZlCiAgKiBASUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTogb3BlcmF0aW5nIGluIEctb25seSBtb2RlCiAgKiBASUVFRTgwMjExX1NEQVRBX0RPTlRfQlJJREdFX1BBQ0tFVFM6IGJyaWRnZSBwYWNrZXRzIGJldHdlZW4KICAqCWFzc29jaWF0ZWQgc3RhdGlvbnMgYW5kIGRlbGl2ZXIgbXVsdGljYXN0IGZyYW1lcyBib3RoCkBAIC0zNzksOSArNDExLDggQEAKIGVudW0gaWVlZTgwMjExX3N1Yl9pZl9kYXRhX2ZsYWdzIHsKIAlJRUVFODAyMTFfU0RBVEFfQUxMTVVMVEkJCT0gQklUKDApLAogCUlFRUU4MDIxMV9TREFUQV9QUk9NSVNDCQkJPSBCSVQoMSksCi0JSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FCQk9IEJJVCgyKSwKLQlJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFCQk9IEJJVCgzKSwKLQlJRUVFODAyMTFfU0RBVEFfRE9OVF9CUklER0VfUEFDS0VUUwk9IEJJVCg0KSwKKwlJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFCQk9IEJJVCgyKSwKKwlJRUVFODAyMTFfU0RBVEFfRE9OVF9CUklER0VfUEFDS0VUUwk9IEJJVCgzKSwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgewpAQCAtNDA0LDggKzQzNSwxMCBAQAogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwogCiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNAotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVNdOworI2RlZmluZSBOVU1fREVGQVVMVF9NR01UX0tFWVMgMgorCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVNdOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpkZWZhdWx0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CiAKQEAgLTQyMyw3ICs0NTYsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIGFwOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3dkcyB3ZHM7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB2bGFuOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSBzdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCBtZ2Q7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyBpYnNzOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCBtZXNoOwogI2VuZGlmCkBAIC00NzcsNiArNTExLDcgQEAKIAl9IGRlYnVnZnM7CiAJc3RydWN0IHsKIAkJc3RydWN0IGRlbnRyeSAqZGVmYXVsdF9rZXk7CisJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfbWdtdF9rZXk7CiAJfSBjb21tb25fZGVidWdmczsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICkBAIC01NDEsMTEgKzU3NiwxMiBAQAogZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiB7CiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0RSSVZFUiwKIAlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSwKKwlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04sCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NVU1BFTkQsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcsCiB9OwogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgd2Ugc3VwcG9ydC4gKi8KLSNkZWZpbmUgUURfTUFYX1FVRVVFUyAoSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgKyBJRUVFODAyMTFfTUFYX1FVRVVFUykKLQogc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CiB9OwpAQCAtNTU4LDkgKzU5NCwxMCBAQAogCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKIAotCXVuc2lnbmVkIGxvbmcgcXVldWVfcG9vbFtCSVRTX1RPX0xPTkdTKFFEX01BWF9RVUVVRVMpXTsKIAl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFU107CisJLyogYWxzbyB1c2VkIHRvIHByb3RlY3QgYW1wZHVfYWNfcXVldWUgYW5kIGFtZHB1X2FjX3N0b3BfcmVmY250ICovCiAJc3BpbmxvY2tfdCBxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrOworCiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7IC8qIHdtYXN0ZXIjIC0gIm1hc3RlciIgODAyLjExIGRldmljZSAqLwogCWludCBvcGVuX2NvdW50OwogCWludCBtb25pdG9ycywgY29va2VkX21udHJzOwpAQCAtNTY4LDcgKzYwNSw2IEBACiAJaW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7IC8qIEZJRl8qICovCiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwotCXU4IHdzdGF0c19mbGFnczsKIAlib29sIHRpbV9pbl9sb2NrZWRfc2VjdGlvbjsgLyogc2VlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgKi8KIAlpbnQgdHhfaGVhZHJvb207IC8qIHJlcXVpcmVkIGhlYWRyb29tIGZvciBoYXJkd2FyZS9yYWRpb3RhcCAqLwogCkBAIC01OTUsMTEgKzYzMSwxNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhX2NsZWFudXA7CiAKLQl1bnNpZ25lZCBsb25nIHF1ZXVlc19wZW5kaW5nW0JJVFNfVE9fTE9OR1MoSUVFRTgwMjExX01BWF9RVUVVRVMpXTsKLQl1bnNpZ25lZCBsb25nIHF1ZXVlc19wZW5kaW5nX3J1bltCSVRTX1RPX0xPTkdTKElFRUU4MDIxMV9NQVhfUVVFVUVTKV07Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0IHBlbmRpbmdfcGFja2V0W0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBlbmRpbmdbSUVFRTgwMjExX01BWF9RVUVVRVNdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF9wZW5kaW5nX3Rhc2tsZXQ7CiAKKwkvKgorCSAqIFRoaXMgbG9jayBpcyB1c2VkIHRvIHByZXZlbnQgY29uY3VycmVudCBBLU1QRFUKKwkgKiBzZXNzaW9uIHN0YXJ0L3N0b3AgcHJvY2Vzc2luZywgdGhpcyB0aHVzIGFsc28KKwkgKiBzeW5jaHJvbmlzZXMgdGhlIC0+YW1wZHVfYWN0aW9uKCkgY2FsbGJhY2sgdG8KKwkgKiBkcml2ZXJzIGFuZCBsaW1pdHMgaXQgdG8gb25lIGF0IGEgdGltZS4KKwkgKi8KKwlzcGlubG9ja190IGFtcGR1X2xvY2s7CisKIAkvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aXRoIGNvcnJlc3BvbmRpbmcgSUZGXyBmbGFncyAqLwogCWF0b21pY190IGlmZl9hbGxtdWx0aXMsIGlmZl9wcm9taXNjczsKIApAQCAtNjEyLDcgKzY1NCw5IEBACiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKndlcF9yeF90Zm07CiAJdTMyIHdlcF9pdjsKIAorCS8qIHNlZSBpZmFjZS5jICovCiAJc3RydWN0IGxpc3RfaGVhZCBpbnRlcmZhY2VzOworCXN0cnVjdCBtdXRleCBpZmxpc3RfbXR4OwogCiAJLyoKIAkgKiBLZXkgbG9jaywgcHJvdGVjdHMgc2RhdGEncyBrZXlfbGlzdCBhbmQgc3RhX2luZm8ncwpAQCAtNjIzLDIwICs2NjcsMTggQEAKIAogCS8qIFNjYW5uaW5nIGFuZCBCU1MgbGlzdCAqLwogCWJvb2wgc3dfc2Nhbm5pbmcsIGh3X3NjYW5uaW5nOworCXN0cnVjdCBjZmc4MDIxMV9zc2lkIHNjYW5fc3NpZDsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IGludF9zY2FuX3JlcTsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnNjYW5fY2hhbm5lbDsKIAlpbnQgc2Nhbl9jaGFubmVsX2lkeDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIHNjYW5fYmFuZDsKIAogCWVudW0geyBTQ0FOX1NFVF9DSEFOTkVMLCBTQ0FOX1NFTkRfUFJPQkUgfSBzY2FuX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FuX2NvbXBsZXRlZDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fd29yazsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqc2Nhbl9jaGFubmVsOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgb3Blcl9jaGFubmVsX3R5cGU7Ci0JdTggc2Nhbl9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzY2FuX3NzaWRfbGVuOwotCXN0cnVjdCBsaXN0X2hlYWQgYnNzX2xpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzc19oYXNoW1NUQV9IQVNIX1NJWkVdOwotCXNwaW5sb2NrX3QgYnNzX2xvY2s7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpvcGVyX2NoYW5uZWwsICpjc2FfY2hhbm5lbDsKIAogCS8qIFNOTVAgY291bnRlcnMgKi8KIAkvKiBkb3QxMUNvdW50ZXJzVGFibGUgKi8KQEAgLTY0OSw3ICs2OTEsNiBAQAogCXUzMiBkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudDsKIAl1MzIgZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CiAJdTMyIGRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotCXUzMiBkb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudDsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCiAJaW50IHR4X2xlZF9jb3VudGVyLCByeF9sZWRfY291bnRlcjsKQEAgLTY5NiwxMSArNzM3LDE0IEBACiAJdW5zaWduZWQgaW50IHdtbV9hY207IC8qIGJpdCBmaWVsZCBvZiBBQ00gYml0cyAoQklUKDgwMi4xRCB0YWcpKSAqLwogCiAJYm9vbCBwb3dlcnNhdmU7Ci0JaW50IGR5bmFtaWNfcHNfdGltZW91dDsKKwlib29sIHBzcG9sbGluZzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHluYW1pY19wc19lbmFibGVfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHluYW1pY19wc19kaXNhYmxlX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3QgZHluYW1pY19wc190aW1lcjsKIAorCWludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0gKi8KKwlpbnQgcG93ZXJfY29uc3RyX2xldmVsOyAvKiBpbiBkQm0gKi8KKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJc3RydWN0IGxvY2FsX2RlYnVnZnNkZW50cmllcyB7CiAJCXN0cnVjdCBkZW50cnkgKnJjZGlyOwpAQCAtNzEyLDYgKzc1Niw4IEBACiAJCXN0cnVjdCBkZW50cnkgKmxvbmdfcmV0cnlfbGltaXQ7CiAJCXN0cnVjdCBkZW50cnkgKnRvdGFsX3BzX2J1ZmZlcmVkOwogCQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfaXY7CisJCXN0cnVjdCBkZW50cnkgKnRzZjsKKwkJc3RydWN0IGRlbnRyeSAqcmVzZXQ7CiAJCXN0cnVjdCBkZW50cnkgKnN0YXRpc3RpY3M7CiAJCXN0cnVjdCBsb2NhbF9kZWJ1Z2ZzZGVudHJpZXNfc3RhdHNkZW50cmllcyB7CiAJCQlzdHJ1Y3QgZGVudHJ5ICp0cmFuc21pdHRlZF9mcmFnbWVudF9jb3VudDsKQEAgLTgwNSw2ICs4NTEsNyBAQAogCXU4ICpjb3VudHJ5X2VsZW07CiAJdTggKnB3cl9jb25zdHJfZWxlbTsKIAl1OCAqcXVpZXRfZWxlbTsgCS8qIGZpcnN0IHF1aXRlIGVsZW1lbnQgKi8KKwl1OCAqdGltZW91dF9pbnQ7CiAKIAkvKiBsZW5ndGggb2YgdGhlbSwgcmVzcGVjdGl2ZWx5ICovCiAJdTggc3NpZF9sZW47CkBAIC04MzIsNiArODc5LDcgQEAKIAl1OCBwd3JfY29uc3RyX2VsZW1fbGVuOwogCXU4IHF1aWV0X2VsZW1fbGVuOwogCXU4IG51bV9vZl9xdWlldF9lbGVtOwkvKiBjYW4gYmUgbW9yZSB0aGUgb25lICovCisJdTggdGltZW91dF9pbnRfbGVuOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpod190b19sb2NhbCgKQEAgLTg2MCwzNCArOTA4LDQzIEBACiB2b2lkIGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICAgIHUzMiBjaGFuZ2VkKTsKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAKIC8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwogCi0vKiBTVEEvSUJTUyBjb2RlICovCisvKiBTVEEgY29kZSAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pOwogaW50IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpOwotc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1NjQgc3VwcF9yYXRlcyk7Cit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pOwogaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKTsKLXUzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdTY0IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwotdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCi0JCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfcHNwb2xsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworCisvKiBJQlNTIGNvZGUgKi8KK2ludCBpZWVlODAyMTFfaWJzc19jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaW50IGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKTsKK2ludCBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pOworaW50IGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKK3ZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcyk7CiAKIC8qIHNjYW4vQlNTIGhhbmRsaW5nICovCit2b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7CisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwogaW50IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKQEAgLTg5NSwyOSArOTUyLDI4IEBACiBpZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgICAgIGNoYXIgKmllLCBzaXplX3QgbGVuKTsKKwkJCSAgICAgICBjb25zdCBjaGFyICppZSwgc2l6ZV90IGxlbik7CiAKIHZvaWQgaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX3NjYW5fZmFpbGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhLAotCQkJIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgIHNpemVfdCBsZW4sCiAJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgaW50IGZyZXEsIGJvb2wgYmVhY29uKTsKLXN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgYm9vbCBiZWFjb24pOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwordm9pZCBpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkLAorCQkJICAgICBpbnQgZnJlcSwgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIAogLyogaW50ZXJmYWNlIGhhbmRsaW5nICovCiBpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTk0MywxMCArOTk5LDE1IEBACiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0aSwKIAkJCXUxNiBhcF9odF9jYXBfZmxhZ3MpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbik7Cit2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCisJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSk7CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkYSwKIAkJCQl1MTYgdGlkLCB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKTsKLXZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyKTsKK3ZvaWQgX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKTsKK3ZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbik7CkBAIC05NTksMTAgKzEwMjAsMzYgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgIHNpemVfdCBsZW4pOwogCitpbnQgX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpOworCiAvKiBTcGVjdHJ1bSBtYW5hZ2VtZW50ICovCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgICBzaXplX3QgbGVuKTsKK3ZvaWQgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKnN3X2VsZW0sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKK3ZvaWQgaWVlZTgwMjExX2hhbmRsZV9wd3JfY29uc3RyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSB1MTYgY2FwYWJfaW5mbywgdTggKnB3cl9jb25zdHJfZWxlbSwKKwkJCQkgdTggcHdyX2NvbnN0cl9lbGVtX2xlbik7CisKKy8qIFN1c3BlbmQvcmVzdW1lICovCisjaWZkZWYgQ09ORklHX1BNCitpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIC8qIHV0aWxpdHkgZnVuY3Rpb25zL2NvbnN0YW50cyAqLwogZXh0ZXJuIHZvaWQgKm1hYzgwMjExX3dpcGh5X3ByaXZpZDsgLyogZm9yIHdpcGh5IHByaXZpZCAqLwpAQCAtOTgwLDE3ICsxMDY3LDQyIEBACiB2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAogCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyk7CiBpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgZnJlcSk7Ci11NjQgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKK3UzMiBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19lbmFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19kaXNhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBpbnQgcG93ZXJzYXZlKTsKK3ZvaWQgaWVlZTgwMjExX3N0YV9yeF9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7CiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCisJCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCk7Cit2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKKwkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICB1OCAqaWUsIHNpemVfdCBpZV9sZW4pOworCit2b2lkIGllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCisJCQkJICBjb25zdCB1OCAqc3VwcF9yYXRlcyk7Cit1MzIgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkUKICNkZWZpbmUgZGVidWdfbm9pbmxpbmUgbm9pbmxpbmUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggYjkwNzQ4Mi4uOTFlOGUxYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTIxLDYgKzIxLDIzIEBACiAjaW5jbHVkZSAibWVzaC5oIgogI2luY2x1ZGUgImxlZC5oIgogCisvKioKKyAqIERPQzogSW50ZXJmYWNlIGxpc3QgbG9ja2luZworICoKKyAqIFRoZSBpbnRlcmZhY2UgbGlzdCBpbiBlYWNoIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgaXMgcHJvdGVjdGVkCisgKiB0aHJlZS1mb2xkOgorICoKKyAqICgxKSBtb2RpZmljYXRpb25zIG1heSBvbmx5IGJlIGRvbmUgdW5kZXIgdGhlIFJUTkwKKyAqICgyKSBtb2RpZmljYXRpb25zIGFuZCByZWFkZXJzIGFyZSBwcm90ZWN0ZWQgYWdhaW5zdCBlYWNoIG90aGVyIGJ5CisgKiAgICAgdGhlIGlmbGlzdF9tdHguCisgKiAoMykgbW9kaWZpY2F0aW9ucyBhcmUgZG9uZSBpbiBhbiBSQ1UgbWFubmVyIHNvIGF0b21pYyByZWFkZXJzCisgKiAgICAgY2FuIHRyYXZlcnNlIHRoZSBsaXN0IGluIFJDVS1zYWZlIGJsb2Nrcy4KKyAqCisgKiBBcyBhIGNvbnNlcXVlbmNlLCByZWFkcyAodHJhdmVyc2Fscykgb2YgdGhlIGxpc3QgY2FuIGJlIHByb3RlY3RlZAorICogYnkgZWl0aGVyIHRoZSBSVE5MLCB0aGUgaWZsaXN0X210eCBvciBSQ1UuCisgKi8KKworCiBzdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCWludCBtZXNoaGRybGVuOwpAQCAtMjE5LDcgKzIzNiwxMCBAQAogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWVsc2UKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwpAQCAtMjQxLDggKzI2MSw3IEBACiAJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIAkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKIAotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkJICAgICEoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSkKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAkJZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwpAQCAtMzA0LDExICszMjMsMTAgQEAKIAkgKiB5ZXQgYmUgZWZmZWN0aXZlLiBUcmlnZ2VyIGV4ZWN1dGlvbiBvZiBpZWVlODAyMTFfc3RhX3dvcmsKIAkgKiB0byBmaXggdGhpcy4KIAkgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKLQl9CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5pYnNzLndvcmspOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCkBAIC0zNDUsMTMgKzM2MywyNCBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CiAJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhKQotCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc2RhdGEsCi0JCQkJCQkJICAgIHN0YS0+c3RhLmFkZHIpOworCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qCisJICogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgbGVhdmluZyB0aGUgbmV0d29yaywgaW4gY2FzZSB3ZSBhcmUgYQorCSAqIHN0YXRpb24gaW50ZXJmYWNlIHR5cGUuIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSByZW1vdmluZworCSAqIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhX2luZm9fZmx1c2gsIG90aGVyd2lzZSBTVEEKKwkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGdvbmUgYW5kIG5vIGFubm91bmNlIGJlaW5nIGRvbmUuCisJICovCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEKQorCQkJaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwKKwkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CisJfQorCisJLyoKIAkgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS4KIAkgKgogCSAqIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIG9wcy0+cmVtb3ZlX2ludGVyZmFjZSgpCkBAIC0zODMsNiArNDEyLDggQEAKIAkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7CiAKIAlkZXZfbWNfdW5zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCiAJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CkBAIC00MzQsMTQgKzQ2NSw5IEBACiAJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCS8qIEFubm91bmNlIHRoYXQgd2UgYXJlIGxlYXZpbmcgdGhlIG5ldHdvcmsuICovCi0JCWlmIChzZGF0YS0+dS5zdGEuc3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEKQotCQkJaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwKLQkJCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKLQotCQltZW1zZXQoc2RhdGEtPnUuc3RhLmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0JCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5zdGEudGltZXIpOworCQltZW1zZXQoc2RhdGEtPnUubWdkLmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfdGltZXIpOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLnRpbWVyKTsKIAkJLyoKIAkJICogSWYgdGhlIHRpbWVyIGZpcmVkIHdoaWxlIHdlIHdhaXRlZCBmb3IgaXQsIGl0IHdpbGwgaGF2ZQogCQkgKiByZXF1ZXVlZCB0aGUgd29yay4gTm93IHRoZSB3b3JrIHdpbGwgYmUgcnVubmluZyBhZ2FpbgpAQCAtNDQ5LDcgKzQ3NSwxMSBAQAogCQkgKiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgd2hpY2gsIGF0IHRoaXMgcG9pbnQsCiAJCSAqIGl0IG5vIGxvbmdlciBpcy4KIAkJICovCi0JCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLndvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfd29yayk7CisKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOworCiAJCS8qCiAJCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCiAJCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKQEAgLTQ1NywxMiArNDg3LDIyIEBACiAJCSAqIGZyYW1lcyBhdCB0aGlzIHZlcnkgdGltZSBvbiBhbm90aGVyIENQVS4KIAkJICovCiAJCXN5bmNocm9uaXplX3JjdSgpOwotCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51LnN0YS5za2JfcXVldWUpOworCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUpOwogCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5leHRyYV9pZSk7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZSA9IE5VTEw7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZV9sZW4gPSAwOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8CisJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSk7CisJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtNTAxLDcgKzU0MSw3IEBACiAJCQkgKiBzY2FuIGV2ZW50IHRvIHVzZXJzcGFjZSAtLSB0aGUgc2NhbiBpcyBpbmNvbXBsZXRlLgogCQkJICovCiAJCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQotCQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3KTsKKwkJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiAJCX0KIAogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwpAQCAtNTY5LDE5ICs2MDksNiBAQAogCWRldl9tY19zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlldGhlcl9zZXR1cChkZXYpOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGllZWU4MDIxMV9vcGVuOwotCWRldi0+c3RvcCA9IGllZWU4MDIxMV9zdG9wOwotCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwotCS8qIHdlIHdpbGwgdmFsaWRhdGUgdGhlIGFkZHJlc3Mgb3Vyc2VsdmVzIGluIC0+b3BlbiAqLwotCWRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7Ci19CiAvKgogICogQ2FsbGVkIHdoZW4gdGhlIG5ldGRldiBpcyByZW1vdmVkIG9yLCBieSB0aGUgY29kZSBiZWxvdywgYmVmb3JlCiAgKiB0aGUgaW50ZXJmYWNlIHR5cGUgY2hhbmdlcy4KQEAgLTYyMSwxMiArNjQ4LDE0IEBACiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJbWVzaF9ybWNfZnJlZShzZGF0YSk7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXFfaWVzKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVzcF9pZXMpOwotCQlrZnJlZV9za2Ioc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApOworCQlrZnJlZV9za2Ioc2RhdGEtPnUuaWJzcy5wcm9iZV9yZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXFfaWVzKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVzcF9pZXMpOworCQlrZnJlZShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CkBAIC02NDIsNiArNjcxLDM0IEBACiAJV0FSTl9PTihmbHVzaGVkKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHsKKwkubmRvX29wZW4JCT0gaWVlZTgwMjExX29wZW4sCisJLm5kb19zdG9wCQk9IGllZWU4MDIxMV9zdG9wLAorCS5uZG9fdW5pbml0CQk9IGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpZWVlODAyMTFfb3BlbiwKKwkubmRvX3N0b3AJCT0gaWVlZTgwMjExX3N0b3AsCisJLm5kb191bmluaXQJCT0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Cit9CisKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhbiBpbnRlcmZhY2UgdG8gYSBzcGVjaWZpYyB0eXBlLgogICovCkBAIC02NTMsNyArNzEwLDcgQEAKIAogCS8qIGFuZCBzZXQgc29tZSB0eXBlLWRlcGVuZGVudCB2YWx1ZXMgKi8KIAlzZGF0YS0+dmlmLnR5cGUgPSB0eXBlOwotCXNkYXRhLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OworCXNkYXRhLT5kZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CiAJc2RhdGEtPndkZXYuaWZ0eXBlID0gdHlwZTsKIAogCS8qIG9ubHkgbW9uaXRvciBkaWZmZXJzICovCkBAIC02NjUsMTYgKzcyMiwxOCBAQAogCQlJTklUX0xJU1RfSEVBRCgmc2RhdGEtPnUuYXAudmxhbnMpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHNkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCWllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCXNkYXRhLT5kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCQlzZGF0YS0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0OworCQlzZGF0YS0+ZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tb25pdG9yaWZfb3BzOwogCQlzZGF0YS0+dS5tbnRyX2ZsYWdzID0gTU9OSVRPUl9GTEFHX0NPTlRST0wgfAogCQkJCSAgICAgIE1PTklUT1JfRkxBR19PVEhFUl9CU1M7CiAJCWJyZWFrOwpAQCAtNzU1LDYgKzgxNCw3IEBACiAKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNzgwLDE1ICs4NDAsMTUgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQluZGV2LT51bmluaXQgPSBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGE7Ci0KIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgogCSAgICBwYXJhbXMgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKIAkJaWVlZTgwMjExX3NkYXRhX3NldF9tZXNoX2lkKHNkYXRhLAogCQkJCQkgICAgcGFyYW1zLT5tZXNoX2lkX2xlbiwKIAkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZCk7CiAKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJnNkYXRhLT5saXN0LCAmbG9jYWwtPmludGVyZmFjZXMpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJaWYgKG5ld19kZXYpCiAJCSpuZXdfZGV2ID0gbmRldjsKQEAgLTgwNCw3ICs4NjQsMTAgQEAKIHsKIAlBU1NFUlRfUlROTCgpOwogCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2RlbF9yY3UoJnNkYXRhLT5saXN0KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShzZGF0YS0+ZGV2KTsKIH0KQEAgLTgyMCw3ICs4ODMsMTYgQEAKIAlBU1NFUlRfUlROTCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQkvKgorCQkgKiB3ZSBjYW5ub3QgaG9sZCB0aGUgaWZsaXN0X210eCBhY3Jvc3MgdW5yZWdpc3Rlcl9uZXRkZXZpY2UsCisJCSAqIGJ1dCB3ZSBvbmx5IG5lZWQgdG8gaG9sZCBpdCBmb3IgbGlzdCBtb2RpZmljYXRpb25zIHRvIGxvY2sKKwkJICogb3V0IHJlYWRlcnMgc2luY2Ugd2UncmUgdW5kZXIgdGhlIFJUTkwgaGVyZSBhcyBhbGwgb3RoZXIKKwkJICogd3JpdGVycy4KKwkJICovCisJCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAkJbGlzdF9kZWwoJnNkYXRhLT5saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisKIAkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc2RhdGEtPmRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDk5OWY3YWEuLjY4N2FjZjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogI2luY2x1ZGUgImRlYnVnZnNfa2V5LmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCiAKIAogLyoqCkBAIC00Nyw3ICs0OCw2IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07Ci1zdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXTsKIAogLyoga2V5IG11dGV4OiB1c2VkIHRvIHN5bmNocm9uaXNlIHRvZG8gcnVubmVycyAqLwogc3RhdGljIERFRklORV9NVVRFWChrZXlfbXV0ZXgpOwpAQCAtMTA4LDI5ICsxMDgsMTggQEAKIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmtleV9tdXRleCkpOwogfQogCi1zdGF0aWMgY29uc3QgdTggKmdldF9tYWNfZm9yX2tleShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpnZXRfc3RhX2Zvcl9rZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQljb25zdCB1OCAqYWRkciA9IGJjYXN0X2FkZHI7Ci0KLQkvKgotCSAqIElmIHdlJ3JlIGFuIEFQIHdlIHdvbid0IGV2ZXIgcmVjZWl2ZSBmcmFtZXMgd2l0aCBhIG5vbi1XRVAKLQkgKiBncm91cCBrZXkgc28gd2UgdGVsbCB0aGUgZHJpdmVyIHRoYXQgYnkgdXNpbmcgdGhlIHplcm8gTUFDCi0JICogYWRkcmVzcyB0byBpbmRpY2F0ZSBhIHRyYW5zbWl0LW9ubHkga2V5LgotCSAqLwotCWlmIChrZXktPmNvbmYuYWxnICE9IEFMR19XRVAgJiYKLQkgICAgKGtleS0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgICBrZXktPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSkKLQkJYWRkciA9IHplcm9fYWRkcjsKLQogCWlmIChrZXktPnN0YSkKLQkJYWRkciA9IGtleS0+c3RhLT5zdGEuYWRkcjsKKwkJcmV0dXJuICZrZXktPnN0YS0+c3RhOwogCi0JcmV0dXJuIGFkZHI7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHI7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCiAJYXNzZXJ0X2tleV9sb2NrKCk7CkBAIC0xMzksMTEgKzEyOCwxNiBAQAogCWlmICgha2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KQogCQlyZXR1cm47CiAKLQlhZGRyID0gZ2V0X21hY19mb3Jfa2V5KGtleSk7CisJc3RhID0gZ2V0X3N0YV9mb3Jfa2V5KGtleSk7CisKKwlzZGF0YSA9IGtleS0+c2RhdGE7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkgICAgIHUuYXApOwogCiAJcmV0ID0ga2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KGxvY2FsX3RvX2h3KGtleS0+bG9jYWwpLCBTRVRfS0VZLAotCQkJCSAgICAgICBrZXktPnNkYXRhLT5kZXYtPmRldl9hZGRyLCBhZGRyLAotCQkJCSAgICAgICAma2V5LT5jb25mKTsKKwkJCQkgICAgICAgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAoIXJldCkgewogCQlzcGluX2xvY2soJnRvZG9fbG9jayk7CkBAIC0xNTUsMTIgKzE0OSwxMyBAQAogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gc2V0IGtleSAiCiAJCSAgICAgICAiKCVkLCAlcE0pIHRvIGhhcmR3YXJlICglZClcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGtleS0+bG9jYWwtPmh3LndpcGh5KSwKLQkJICAgICAgIGtleS0+Y29uZi5rZXlpZHgsIGFkZHIsIHJldCk7CisJCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQljb25zdCB1OCAqYWRkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCWludCByZXQ7CiAKIAlhc3NlcnRfa2V5X2xvY2soKTsKQEAgLTE3NiwxNyArMTcxLDIyIEBACiAJfQogCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOwogCi0JYWRkciA9IGdldF9tYWNfZm9yX2tleShrZXkpOworCXN0YSA9IGdldF9zdGFfZm9yX2tleShrZXkpOworCXNkYXRhID0ga2V5LT5zZGF0YTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKIAogCXJldCA9IGtleS0+bG9jYWwtPm9wcy0+c2V0X2tleShsb2NhbF90b19odyhrZXktPmxvY2FsKSwgRElTQUJMRV9LRVksCi0JCQkJICAgICAgIGtleS0+c2RhdGEtPmRldi0+ZGV2X2FkZHIsIGFkZHIsCi0JCQkJICAgICAgICZrZXktPmNvbmYpOworCQkJCSAgICAgICAmc2RhdGEtPnZpZiwgc3RhLCAma2V5LT5jb25mKTsKIAogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAibWFjODAyMTEtJXM6IGZhaWxlZCB0byByZW1vdmUga2V5ICIKIAkJICAgICAgICIoJWQsICVwTSkgZnJvbSBoYXJkd2FyZSAoJWQpXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShrZXktPmxvY2FsLT5ody53aXBoeSksCi0JCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBhZGRyLCByZXQpOworCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAogCXNwaW5fbG9jaygmdG9kb19sb2NrKTsKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKQEAgLTIxNiwxMyArMjE2LDM4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZAorX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CisKKwlpZiAoaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgJiYKKwkgICAgaWR4IDwgTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykKKwkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSwga2V5KTsKKworCWlmIChrZXkpCisJCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZKTsKK30KKwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7CisJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGlkeCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworfQorCiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZCwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKm5ldykKIHsKLQlpbnQgaWR4LCBkZWZrZXk7CisJaW50IGlkeCwgZGVma2V5LCBkZWZtZ210a2V5OwogCiAJaWYgKG5ldykKIAkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJnNkYXRhLT5rZXlfbGlzdCk7CkBAIC0yMzgsMTMgKzI2MywxOSBAQAogCQkJaWR4ID0gbmV3LT5jb25mLmtleWlkeDsKIAogCQlkZWZrZXkgPSBvbGQgJiYgc2RhdGEtPmRlZmF1bHRfa2V5ID09IG9sZDsKKwkJZGVmbWdtdGtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSA9PSBvbGQ7CiAKIAkJaWYgKGRlZmtleSAmJiAhbmV3KQogCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCAtMSk7CisJCWlmIChkZWZtZ210a2V5ICYmICFuZXcpCisJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgLTEpOwogCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+a2V5c1tpZHhdLCBuZXcpOwogCQlpZiAoZGVma2V5ICYmIG5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgbmV3LT5jb25mLmtleWlkeCk7CisJCWlmIChkZWZtZ210a2V5ICYmIG5ldykKKwkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLAorCQkJCQkJCSBuZXctPmNvbmYua2V5aWR4KTsKIAl9CiAKIAlpZiAob2xkKSB7CkBAIC0yNjMsNyArMjk0LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCi0JQlVHX09OKGlkeCA8IDAgfHwgaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMpOworCUJVR19PTihpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKTsKIAogCWtleSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5KSArIGtleV9sZW4sIEdGUF9LRVJORUwpOwogCWlmICgha2V5KQpAQCAtMjkyLDYgKzMyMywxMCBAQAogCQlrZXktPmNvbmYuaXZfbGVuID0gQ0NNUF9IRFJfTEVOOwogCQlrZXktPmNvbmYuaWN2X2xlbiA9IENDTVBfTUlDX0xFTjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWtleS0+Y29uZi5pdl9sZW4gPSAwOworCQlrZXktPmNvbmYuaWN2X2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21taWUpOworCQlicmVhazsKIAl9CiAJbWVtY3B5KGtleS0+Y29uZi5rZXksIGtleV9kYXRhLCBrZXlfbGVuKTsKIAlJTklUX0xJU1RfSEVBRCgma2V5LT5saXN0KTsKQEAgLTMwOSw2ICszNDQsMTkgQEAKIAkJfQogCX0KIAorCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCS8qCisJCSAqIEluaXRpYWxpemUgQUVTIGtleSBzdGF0ZSBoZXJlIGFzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0CisJCSAqIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIGV2ZXJ5IHBhY2tldC4KKwkJICovCisJCWtleS0+dS5hZXNfY21hYy50Zm0gPQorCQkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChrZXlfZGF0YSk7CisJCWlmICgha2V5LT51LmFlc19jbWFjLnRmbSkgeworCQkJa2ZyZWUoa2V5KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCiAJcmV0dXJuIGtleTsKIH0KIApAQCAtMzUyLDcgKzQwMCw3IEBACiAJCQkgKi8KIAogCQkJLyogc2FtZSBoZXJlLCB0aGUgQVAgY291bGQgYmUgdXNpbmcgUW9TICovCi0JCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51LnN0YS5ic3NpZCk7CisJCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CiAJCQlpZiAoYXApIHsKIAkJCQlpZiAodGVzdF9zdGFfZmxhZ3MoYXAsIFdMQU5fU1RBX1dNRSkpCiAJCQkJCWtleS0+Y29uZi5mbGFncyB8PQpAQCAtNDYyLDYgKzUxMCw4IEBACiAKIAlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQ0NNUCkKIAkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOworCWlmIChrZXktPmNvbmYuYWxnID09IEFMR19BRVNfQ01BQykKKwkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKGtleS0+dS5hZXNfY21hYy50Zm0pOwogCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmUoa2V5KTsKIAogCWtmcmVlKGtleSk7CkBAIC00ODQsNiArNTM0LDcgQEAKIAkJbGlzdF9kZWxfaW5pdCgma2V5LT50b2RvKTsKIAkJdG9kb2ZsYWdzID0ga2V5LT5mbGFncyAmIChLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0RFRktFWSB8CisJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0RFTEVURSk7CkBAIC01MDEsNiArNTUyLDExIEBACiAJCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoa2V5LT5zZGF0YSk7CiAJCQl3b3JrX2RvbmUgPSB0cnVlOwogCQl9CisJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkpIHsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KGtleS0+c2RhdGEpOworCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7CisJCQl3b3JrX2RvbmUgPSB0cnVlOworCQl9CiAJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKSB7CiAJCQlpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpOwogCQkJd29ya19kb25lID0gdHJ1ZTsKQEAgLTUzNiw2ICs1OTIsNyBAQAogCWllZWU4MDIxMV9rZXlfbG9jaygpOwogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHNkYXRhKTsKKwlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzZGF0YSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIHRtcCwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCA0MjU4MTZlLi4yMTVkM2VmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC00Niw2ICs0Niw4IEBACiAgKglhY2NlbGVyYXRpb24uCiAgKiBAS0VZX0ZMQUdfVE9ET19ERUZLRVk6IEtleSBpcyBkZWZhdWx0IGtleSBhbmQgZGVidWdmcyBuZWVkcyB0byBiZSB1cGRhdGVkLgogICogQEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlM6IEtleSBuZWVkcyB0byBiZSBhZGRlZCB0byBkZWJ1Z2ZzLgorICogQEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWTogS2V5IGlzIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMKKyAqCXRvIGJlIHVwZGF0ZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2ludGVybmFsX2tleV9mbGFncyB7CiAJS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUJPSBCSVQoMCksCkBAIC01NCw2ICs1Niw3IEBACiAJS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRQk9IEJJVCgzKSwKIAlLRVlfRkxBR19UT0RPX0RFRktFWQkJPSBCSVQoNCksCiAJS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUwk9IEJJVCg1KSwKKwlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCiBzdHJ1Y3QgdGtpcF9jdHggewpAQCAtOTYsNiArOTksMTYgQEAKIAkJCXU4IHR4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwogCQkJdTggcnhfY3J5cHRvX2J1Zls2ICogQUVTX0JMT0NLX0xFTl07CiAJCX0gY2NtcDsKKwkJc3RydWN0IHsKKwkJCXU4IHR4X3BuWzZdOworCQkJdTggcnhfcG5bNl07CisJCQlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCQkJdTMyIHJlcGxheXM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ1JlcGxheXMgKi8KKwkJCXUzMiBpY3ZlcnJvcnM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ0lDVkVycm9ycyAqLworCQkJLyogc2NyYXRjaCBidWZmZXJzIGZvciB2aXJ0X3RvX3BhZ2UoKSAoY3J5cHRvIEFQSSkgKi8KKwkJCXU4IHR4X2NyeXB0b19idWZbMiAqIEFFU19CTE9DS19MRU5dOworCQkJdTggcnhfY3J5cHRvX2J1ZlsyICogQUVTX0JMT0NLX0xFTl07CisJCX0gYWVzX2NtYWM7CiAJfSB1OwogCiAJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMga2V5IGhhcyBiZWVuIHVzZWQgKi8KQEAgLTExNCw2ICsxMjcsNyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICp0eF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyeF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyZXBsYXlzOworCQlzdHJ1Y3QgZGVudHJ5ICppY3ZlcnJvcnM7CiAJCXN0cnVjdCBkZW50cnkgKmtleTsKIAkJc3RydWN0IGRlbnRyeSAqaWZpbmRleDsKIAkJaW50IGNudDsKQEAgLTE0MCw2ICsxNTQsOCBAQAogCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpOwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpOwogdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2VuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCAyNGIxNDM2Li5hNmYxZDhhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE2MSwzMCArMTYxLDY3IEBACiAJaWYgKFdBUk5fT04oIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpKQogCQlyZXR1cm4gMDsKIAotCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZpZ19pbnRlcmZhY2UpCi0JCXJldHVybiAwOwotCiAJbWVtc2V0KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwotCWNvbmYuY2hhbmdlZCA9IGNoYW5nZWQ7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQljb25mLmJzc2lkID0gc2RhdGEtPnUuc3RhLmJzc2lkOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJY29uZi5ic3NpZCA9IHNkYXRhLT51Lm1nZC5ic3NpZDsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5pYnNzLmJzc2lkOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJY29uZi5ic3NpZCA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOwogCWVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CiAJCWNvbmYuYnNzaWQgPSB6ZXJvOwogCX0gZWxzZSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChXQVJOX09OKCFjb25mLmJzc2lkICYmIChjaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQlNTSUQpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90IHdhcm4gdG8gc2ltcGxpZnkgY2FsbGVyIGluIHNjYW4uYyAqLworCQljaGFuZ2VkICY9IH5JRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRDsKKwkJaWYgKFdBUk5fT04oY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hhbmdlZCAmPSB+SUVFRTgwMjExX0lGQ0NfQkVBQ09OOworCQlicmVhazsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSB7CisJCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpIHsKKwkJCWNvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJlYWNvbiBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IEFQIG1vZGUgbXVzdAorCQkJICogY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGJlYWNvbiBjb25maWd1cmVkLgorCQkJICovCisJCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPQorCQkJCQkhIXJjdV9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSAhIXNkYXRhLT51Lmlic3MucHJvYmVfcmVzcDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSB0cnVlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJCVdBUk5fT04oMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwljb25mLmNoYW5nZWQgPSBjaGFuZ2VkOwogCiAJcmV0dXJuIGxvY2FsLT5vcHMtPmNvbmZpZ19pbnRlcmZhY2UobG9jYWxfdG9faHcobG9jYWwpLAogCQkJCQkgICAgJnNkYXRhLT52aWYsICZjb25mKTsKQEAgLTIwOCwyNiArMjQ1LDIyIEBACiAJfQogCiAJaWYgKGNoYW4gIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCB8fAotCSAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuaHQuY2hhbm5lbF90eXBlKSB7CisJICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGUpIHsKIAkJbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCA9IGNoYW47Ci0JCWxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKLQkJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKLQkJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6Ci0JCQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQyMDoKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgotCQljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKLQkJCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KKwkJbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOwogCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOwogCX0KIAotCWlmICghbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwpCisJaWYgKGxvY2FsLT5zd19zY2FubmluZykKIAkJcG93ZXIgPSBjaGFuLT5tYXhfcG93ZXI7CiAJZWxzZQotCQlwb3dlciA9IG1pbihjaGFuLT5tYXhfcG93ZXIsIGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsKTsKKwkJcG93ZXIgPSBsb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID8KKwkJCShjaGFuLT5tYXhfcG93ZXIgLSBsb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsKSA6CisJCQljaGFuLT5tYXhfcG93ZXI7CisKKwlpZiAobG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwpCisJCXBvd2VyID0gbWluKHBvd2VyLCBsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCk7CisKIAlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gcG93ZXIpIHsKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVI7CiAJCWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsID0gcG93ZXI7CkBAIC02NjcsNyArNzAwLDcgQEAKIAkJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKLQlpbnQgcHJpdl9zaXplOworCWludCBwcml2X3NpemUsIGk7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKIAogCS8qIEVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiBvdXIgcHJpdmF0ZSBkYXRhIGFuZCBodyBwcml2YXRlIGRhdGEuCkBAIC02OTUsNiArNzI4LDEwIEBACiAJCXJldHVybiBOVUxMOwogCiAJd2lwaHktPnByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDsKKwl3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSA0OworCS8qIFllcywgcHV0dGluZyBjZmc4MDIxMV9ic3MgaW50byBpZWVlODAyMTFfYnNzIGlzIGEgaGFjayAqLworCXdpcGh5LT5ic3NfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzKSAtCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9ic3MpOwogCiAJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlsb2NhbC0+aHcud2lwaHkgPSB3aXBoeTsKQEAgLTcyMiw2ICs3NTksNyBAQAogCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSB0cnVlOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5pbnRlcmZhY2VzKTsKKwltdXRleF9pbml0KCZsb2NhbC0+aWZsaXN0X210eCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmtleV9sb2NrKTsKIApAQCAtNzM4LDYgKzc3Niw4IEBACiAKIAlzdGFfaW5mb19pbml0KGxvY2FsKTsKIAorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX1FVRVVFUzsgaSsrKQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZsb2NhbC0+cGVuZGluZ1tpXSk7CiAJdGFza2xldF9pbml0KCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0LCBpZWVlODAyMTFfdHhfcGVuZGluZywKIAkJICAgICAodW5zaWduZWQgbG9uZylsb2NhbCk7CiAJdGFza2xldF9kaXNhYmxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKQEAgLTc1MCwxMCArNzkwLDI5IEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKIAorCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+YW1wZHVfbG9jayk7CisKIAlyZXR1cm4gbG9jYWxfdG9faHcobG9jYWwpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdCwKKwkubmRvX29wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW4sCisJLm5kb19zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX21hc3Rlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbWRldikKK3sKKwltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwltZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tYXN0ZXJfb3BzOworCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7CisJbWRldi0+dHhfcXVldWVfbGVuID0gMTAwMDsKKwltZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOworfQorCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtNzYxLDI1ICs4MjAsMzMgQEAKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXY7CisJaW50IGNoYW5uZWxzLCBpLCBqOwogCiAJLyoKIAkgKiBnZW5lcmljIGNvZGUgZ3VhcmFudGVlcyBhdCBsZWFzdCBvbmUgYmFuZCwKIAkgKiBzZXQgdGhpcyB2ZXJ5IGVhcmx5IGJlY2F1c2UgbXVjaCBjb2RlIGFzc3VtZXMKIAkgKiB0aGF0IGh3LmNvbmYuY2hhbm5lbCBpcyBhc3NpZ25lZAogCSAqLworCWNoYW5uZWxzID0gMDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCiAJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQkJaWYgKHNiYW5kKSB7CisJCWlmIChzYmFuZCAmJiAhbG9jYWwtPm9wZXJfY2hhbm5lbCkgewogCQkJLyogaW5pdCBjaGFubmVsIHdlJ3JlIG9uICovCiAJCQlsb2NhbC0+aHcuY29uZi5jaGFubmVsID0KIAkJCWxvY2FsLT5vcGVyX2NoYW5uZWwgPQogCQkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9ICZzYmFuZC0+Y2hhbm5lbHNbMF07Ci0JCQlicmVhazsKIAkJfQorCQlpZiAoc2JhbmQpCisJCQljaGFubmVscyArPSBzYmFuZC0+bl9jaGFubmVsczsKIAl9CiAKKwlsb2NhbC0+aW50X3NjYW5fcmVxLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIGNoYW5uZWxzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyogaWYgbG93LWxldmVsIGRyaXZlciBzdXBwb3J0cyBBUCwgd2UgYWxzbyBzdXBwb3J0IFZMQU4gKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQogCQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CkBAIC03ODcsOSArODU0LDE0IEBACiAJLyogbWFjODAyMTEgYWx3YXlzIHN1cHBvcnRzIG1vbml0b3IgKi8KIAlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CiAKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM7CisKIAlyZXN1bHQgPSB3aXBoeV9yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIGZhaWxfd2lwaHlfcmVnaXN0ZXI7CiAKIAkvKgogCSAqIFdlIHVzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBmb3IgZmVhdHVyZSB0ZXN0cyAoUW9TLCBIVCkgaW50ZXJuYWxseQpAQCAtNzk3LDE0ICs4NjksMTAgQEAKIAkgKi8KIAlpZiAoaHctPnF1ZXVlcyA+IElFRUU4MDIxMV9NQVhfUVVFVUVTKQogCQlody0+cXVldWVzID0gSUVFRTgwMjExX01BWF9RVUVVRVM7Ci0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMgPiBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUykKLQkJaHctPmFtcGR1X3F1ZXVlcyA9IElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTOwotCWlmIChody0+cXVldWVzIDwgNCkKLQkJaHctPmFtcGR1X3F1ZXVlcyA9IDA7CiAKIAltZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2KSwKLQkJCSAgICAgICAid21hc3RlciVkIiwgZXRoZXJfc2V0dXAsCi0JCQkgICAgICAgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpKTsKKwkJCSAgICAgICAid21hc3RlciVkIiwgaWVlZTgwMjExX21hc3Rlcl9zZXR1cCwKKwkJCSAgICAgICBody0+cXVldWVzKTsKIAlpZiAoIW1kZXYpCiAJCWdvdG8gZmFpbF9tZGV2X2FsbG9jOwogCkBAIC04MTIsMTcgKzg4MCw4IEBACiAJbXByaXYtPmxvY2FsID0gbG9jYWw7CiAJbG9jYWwtPm1kZXYgPSBtZGV2OwogCi0JaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQobG9jYWwpOwotCi0JbWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0OwotCW1kZXYtPm9wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW47Ci0JbWRldi0+c3RvcCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RvcDsKLQltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQltZGV2LT5oZWFkZXJfb3BzID0gJmllZWU4MDIxMV9oZWFkZXJfb3BzOwotCW1kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0OwotCiAJbG9jYWwtPmh3LndvcmtxdWV1ZSA9Ci0JCWNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSh3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQljcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSh3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOwogCWlmICghbG9jYWwtPmh3LndvcmtxdWV1ZSkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfd29ya3F1ZXVlOwpAQCAtODQ2LDE1ICs5MDUsNiBAQAogCiAJbG9jYWwtPmh3LmNvbmYubGlzdGVuX2ludGVydmFsID0gbG9jYWwtPmh3Lm1heF9saXN0ZW5faW50ZXJ2YWw7CiAKLQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8Ci0JCQkJCQkgIElFRUU4MDIxMV9IV19TSUdOQUxfREIgfAotCQkJCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgPwotCQkJICAgICAgIElXX1FVQUxfUVVBTF9VUERBVEVEIDogSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNID8KLQkJCSAgICAgICBJV19RVUFMX05PSVNFX1VQREFURUQgOiBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Ci0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IElXX1FVQUxfREJNOwotCiAJcmVzdWx0ID0gc3RhX2luZm9fc3RhcnQobG9jYWwpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGZhaWxfc3RhX2luZm87CkBAIC04NjYsNiArOTE2LDcgQEAKIAogCW1lbWNweShsb2NhbC0+bWRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobG9jYWwtPm1kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKKwlsb2NhbC0+bWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIAogCXJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldmljZShsb2NhbC0+bWRldik7CiAJaWYgKHJlc3VsdCA8IDApCkBAIC04ODcsOCArOTM4LDYgQEAKIAkJZ290byBmYWlsX3dlcDsKIAl9CiAKLQlsb2NhbC0+bWRldi0+c2VsZWN0X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZTsKLQogCS8qIGFkZCBvbmUgZGVmYXVsdCBTVEEgaW50ZXJmYWNlIGlmIHN1cHBvcnRlZCAqLwogCWlmIChsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyAmIEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkgewogCQlyZXN1bHQgPSBpZWVlODAyMTFfaWZfYWRkKGxvY2FsLCAid2xhbiVkIiwgTlVMTCwKQEAgLTkwMiw2ICs5NTEsMjAgQEAKIAogCWllZWU4MDIxMV9sZWRfaW5pdChsb2NhbCk7CiAKKwkvKiBhbGxvYyBpbnRlcm5hbCBzY2FuIHJlcXVlc3QgKi8KKwlpID0gMDsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzID0gJmxvY2FsLT5zY2FuX3NzaWQ7CisJbG9jYWwtPmludF9zY2FuX3JlcS5uX3NzaWRzID0gMTsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWlmICghaHctPndpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgaHctPndpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsgaisrKSB7CisJCQlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzW2ldID0KKwkJCQkmaHctPndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQlpKys7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZmFpbF93ZXA6CkBAIC05MjAsNiArOTgzLDggQEAKIAkJZnJlZV9uZXRkZXYobG9jYWwtPm1kZXYpOwogZmFpbF9tZGV2X2FsbG9jOgogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKK2ZhaWxfd2lwaHlfcmVnaXN0ZXI6CisJa2ZyZWUobG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JlZ2lzdGVyX2h3KTsKQEAgLTk0Nyw3ICsxMDEyLDYgQEAKIAogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KGxvY2FsKTsKIAlpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhsb2NhbCk7CiAJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAJcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7CkBAIC05NjUsNiArMTAyOSw3IEBACiAJaWVlZTgwMjExX3dlcF9mcmVlKGxvY2FsKTsKIAlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOwogCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKKwlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcpOwogCkBAIC05NzIsNiArMTAzNyw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKKwltdXRleF9kZXN0cm95KCZsb2NhbC0+aWZsaXN0X210eCk7CisKIAl3aXBoeV9mcmVlKGxvY2FsLT5ody53aXBoeSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVlX2h3KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCmluZGV4IDgyZjU2OGUuLjlhM2U1ZGUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2guYwpAQCAtMjc1LDE2ICsyNzUsNiBAQAogCQkmIHRibC0+aGFzaF9tYXNrOwogfQogCi11OCBtZXNoX2lkX2hhc2godTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbikKLXsKLQlpZiAoIW1lc2hfaWRfbGVuKQotCQlyZXR1cm4gMTsKLQllbHNlIGlmIChtZXNoX2lkX2xlbiA9PSAxKQotCQlyZXR1cm4gKHU4KSBtZXNoX2lkWzBdOwotCWVsc2UKLQkJcmV0dXJuICh1OCkgKG1lc2hfaWRbMF0gKyAyICogbWVzaF9pZFsxXSk7Ci19Ci0KIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKQogewogCWludCBpOwpAQCAtNDQyLDcgKzQzMiw4IEBACiAKIAlpZm1zaC0+aG91c2VrZWVwaW5nID0gdHJ1ZTsKIAlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1zaC0+d29yayk7Ci0JaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCSAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtNDc2LDcgKzQ2Nyw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCXU2NCBzdXBwX3JhdGVzID0gMDsKKwl1MzIgc3VwcF9yYXRlcyA9IDA7CiAJc2l6ZV90IGJhc2VsZW47CiAJaW50IGZyZXE7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guaCBiL25ldC9tYWM4MDIxMS9tZXNoLmgKaW5kZXggYzE5N2FiNS4uZDg5MWQ3ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2guaAorKysgYi9uZXQvbWFjODAyMTEvbWVzaC5oCkBAIC0yNCwxNSArMjQsMTUgQEAKICAqCiAgKgogICoKLSAqIEBNRVNIX1BBVEhfQUNUSVZFOiB0aGUgbWVzaCBwYXRoIGlzIGNhbiBiZSB1c2VkIGZvciBmb3J3YXJkaW5nCi0gKiBATUVTSF9QQVRIX1JFU09MVkVEOiB0aGUgZGlzY292ZXJ5IHByb2Nlc3MgaXMgcnVubmluZyBmb3IgdGhpcyBtZXNoIHBhdGgKKyAqIEBNRVNIX1BBVEhfQUNUSVZFOiB0aGUgbWVzaCBwYXRoIGNhbiBiZSB1c2VkIGZvciBmb3J3YXJkaW5nCisgKiBATUVTSF9QQVRIX1JFU09MVklORzogdGhlIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHJ1bm5pbmcgZm9yIHRoaXMgbWVzaCBwYXRoCiAgKiBATUVTSF9QQVRIX0RTTl9WQUxJRDogdGhlIG1lc2ggcGF0aCBjb250YWlucyBhIHZhbGlkIGRlc3RpbmF0aW9uIHNlcXVlbmNlCiAgKiAJbnVtYmVyCiAgKiBATUVTSF9QQVRIX0ZJWEVEOiB0aGUgbWVzaCBwYXRoIGhhcyBiZWVuIG1hbnVhbGx5IHNldCBhbmQgc2hvdWxkIG5vdCBiZQogICogCW1vZGlmaWVkCiAgKiBATUVTSF9QQVRIX1JFU09MVkVEOiB0aGUgbWVzaCBwYXRoIGNhbiBoYXMgYmVlbiByZXNvbHZlZAogICoKLSAqIE1FU0hfUEFUSF9SRVNPTFZFRCBhbmQgTUVTSF9QQVRIX0RFTEVURSBhcmUgdXNlZCBieSB0aGUgbWVzaCBwYXRoIHRpbWVyIHRvCisgKiBNRVNIX1BBVEhfUkVTT0xWRUQgaXMgdXNlZCBieSB0aGUgbWVzaCBwYXRoIHRpbWVyIHRvCiAgKiBkZWNpZGUgd2hlbiB0byBzdG9wIG9yIGNhbmNlbCB0aGUgbWVzaCBwYXRoIGRpc2NvdmVyeS4KICAqLwogZW51bSBtZXNoX3BhdGhfZmxhZ3MgewpAQCAtMTk2LDcgKzE5Niw2IEBACiAKIC8qIFB1YmxpYyBpbnRlcmZhY2VzICovCiAvKiBWYXJpb3VzICovCi11OCBtZXNoX2lkX2hhc2godTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbik7CiBpbnQgaWVlZTgwMjExX2dldF9tZXNoX2hkcmxlbihzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hoZHIpOwogaW50IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CkBAIC0yMzYsMTQgKzIzNSwxMyBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pOwogaW50IG1lc2hfcGF0aF9hZGQodTggKmRzdCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogLyogTWVzaCBwbGlua3MgKi8KLXZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1NjQgcmF0ZXMsCit2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBhZGQpOwogYm9vbCBtZXNoX3BlZXJfYWNjZXB0c19wbGlua3Moc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllKTsKIHZvaWQgbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIG1lc2hfcGxpbmtfYnJva2VuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIGludCBtZXNoX3BsaW5rX29wZW4oc3RydWN0IHN0YV9pbmZvICpzdGEpOwotaW50IG1lc2hfcGxpbmtfY2xvc2Uoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jsb2NrKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9yeF9wbGlua19mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKaW5kZXggNzFmZTYwOS4uNjBiMzVhYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpAQCAtNTgsNyArNTgsNiBAQAogI2RlZmluZSBQRVJSX0lFX0RTVF9BRERSKHgpCSh4ICsgMikKICNkZWZpbmUgUEVSUl9JRV9EU1RfRFNOKHgpCXUzMl9maWVsZF9nZXQoeCwgOCwgMCk7CiAKLSNkZWZpbmUgVFVfVE9fRVhQX1RJTUUoeCkgKGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHggKiAxMDI0IC8gMTAwMCkpCiAjZGVmaW5lIE1TRUNfVE9fVFUoeCkgKHgqMTAwMC8xMDI0KQogI2RlZmluZSBEU05fR1QoeCwgeSkgKChsb25nKSAoeSkgLSAobG9uZykgKHgpIDwgMCkKICNkZWZpbmUgRFNOX0xUKHgsIHkpICgobG9uZykgKHgpIC0gKGxvbmcpICh5KSA8IDApCkBAIC0xNDksNyArMTQ4LDcgQEAKIAlwb3MgKz0gRVRIX0FMRU47CiAJbWVtY3B5KHBvcywgJmRzdF9kc24sIDQpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTgsNyArMTk3LDcgQEAKIAlwb3MgKz0gRVRIX0FMRU47CiAJbWVtY3B5KHBvcywgJmRzdF9kc24sIDQpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC03NTksNyArNzU4LDcgQEAKIH0KIAogLyoqCi0gKiBpZWVlODAyMTFzX2xvb2t1cF9uZXh0aG9wIC0gcHV0IHRoZSBhcHByb3ByaWF0ZSBuZXh0IGhvcCBvbiBhIG1lc2ggZnJhbWUKKyAqIG1lc2hfbmV4dGhvcF9sb29rdXAgLSBwdXQgdGhlIGFwcHJvcHJpYXRlIG5leHQgaG9wIG9uIGEgbWVzaCBmcmFtZQogICoKICAqIEBza2I6IDgwMi4xMSBmcmFtZSB0byBiZSBzZW50CiAgKiBAc2RhdGE6IG5ldHdvcmsgc3ViaWYgdGhlIGZyYW1lIHdpbGwgYmUgc2VudCB0aHJvdWdoCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwppbmRleCAxMTU5YmRiLi5hOGJiZGVjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKQEAgLTkzLDcgKzkzLDcgQEAKICAqICAgICAgIG9uIGl0IGluIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBzZWN0aW9uIQogICovCiBzdGF0aWMgc3RydWN0IHN0YV9pbmZvICptZXNoX3BsaW5rX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgdTggKmh3X2FkZHIsIHU2NCByYXRlcykKKwkJCQkJIHU4ICpod19hZGRyLCB1MzIgcmF0ZXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogCQltZW1jcHkocG9zLCAmcmVhc29uLCAyKTsKIAl9CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1NjQgcmF0ZXMsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICBib29sIHBlZXJfYWNjZXB0aW5nX3BsaW5rcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKQEAgLTM2MSwzNiArMzYxLDYgQEAKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIH0KIAotaW50IG1lc2hfcGxpbmtfY2xvc2Uoc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwotCV9fbGUxNiBsbGlkLCBwbGlkLCByZWFzb247Ci0KLQltcGxfZGJnKCJNZXNoIHBsaW5rOiBjbG9zaW5nIGxpbmsgd2l0aCAlcE1cbiIsIHN0YS0+c3RhLmFkZHIpOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlzdGEtPnJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfTElOS19DQU5DRUxMRUQpOwotCXJlYXNvbiA9IHN0YS0+cmVhc29uOwotCi0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfTElTVEVOIHx8Ci0JICAgIHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfQkxPQ0tFRCkgewotCQltZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0YSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpIHsKLQkJX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKLQkJLyogVGhlIHRpbWVyIHNob3VsZCBub3QgYmUgcnVubmluZyAqLwotCQltb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpOwotCX0gZWxzZSBpZiAoIW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSkpCi0JCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKLQotCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOwotCWxsaWQgPSBzdGEtPmxsaWQ7Ci0JcGxpZCA9IHN0YS0+cGxpZDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQltZXNoX3BsaW5rX2ZyYW1lX3R4KHN0YS0+c2RhdGEsIFBMSU5LX0NMT1NFLCBzdGEtPnN0YS5hZGRyLCBsbGlkLAotCQkJICAgIHBsaWQsIHJlYXNvbik7Ci0JcmV0dXJuIDA7Ci19CiAKIHZvaWQgbWVzaF9yeF9wbGlua19mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJIHNpemVfdCBsZW4sIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCkBAIC00NzcsNyArNDQ3LDcgQEAKIAkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0gZWxzZSBpZiAoIXN0YSkgewogCQkvKiBmdHlwZSA9PSBQTElOS19PUEVOICovCi0JCXU2NCByYXRlczsKKwkJdTMyIHJhdGVzOwogCQlpZiAoIW1lc2hfcGxpbmtfZnJlZV9jb3VudChzZGF0YSkpIHsKIAkJCW1wbF9kYmcoIk1lc2ggcGxpbmsgZXJyb3I6IG5vIG1vcmUgZnJlZSBwbGlua3NcbiIpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCAyYjg5MGFmLi43ZWNkYTlkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQlNTIGNsaWVudCBtb2RlIGltcGxlbWVudGF0aW9uCi0gKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KICAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgpAQCAtMTUsMTEgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApAQCAtMzMsMTcgKzMwLDggQEAKICNkZWZpbmUgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQgKEhaIC8gNSkKICNkZWZpbmUgSUVFRTgwMjExX0FTU09DX01BWF9UUklFUyAzCiAjZGVmaW5lIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMICgyICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCAoNjAgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lETEVfVElNRSAoNjAgKiBIWikKICNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAotCiAKIC8qIHV0aWxzICovCiBzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQpAQCAtNTUsMTAgKzQzLDEwIEBACiB7CiAJdTggKmVuZCwgKnBvczsKIAotCXBvcyA9IGJzcy0+aWVzOworCXBvcyA9IGJzcy0+Y2Jzcy5pbmZvcm1hdGlvbl9lbGVtZW50czsKIAlpZiAocG9zID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCWVuZCA9IHBvcyArIGJzcy0+aWVzX2xlbjsKKwllbmQgPSBwb3MgKyBic3MtPmNic3MubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOwogCiAJd2hpbGUgKHBvcyArIDEgPCBlbmQpIHsKIAkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCkBAIC03Myw3ICs2MSw3IEBACiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCQkgICAgICB1NjQgKnJhdGVzKQorCQkJCSAgICAgIHUzMiAqcmF0ZXMpCiB7CiAJaW50IGksIGosIGNvdW50OwogCSpyYXRlcyA9IDA7CkBAIC05MiwxNDYgKzgwLDExIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKiBhbHNvIHVzZWQgYnkgbWVzaCBjb2RlICovCi11NjQgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXNpemVfdCBudW1fcmF0ZXM7Ci0JdTY0IHN1cHBfcmF0ZXM7Ci0JaW50IGksIGo7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JaWYgKCFzYmFuZCkgewotCQlXQVJOX09OKDEpOwotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JfQotCi0JYml0cmF0ZXMgPSBzYmFuZC0+Yml0cmF0ZXM7Ci0JbnVtX3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7Ci0Jc3VwcF9yYXRlcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbiArCi0JCSAgICAgZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCXU4IHJhdGUgPSAwOwotCQlpbnQgb3duX3JhdGU7Ci0JCWlmIChpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQotCQkJcmF0ZSA9IGVsZW1zLT5zdXBwX3JhdGVzW2ldOwotCQllbHNlIGlmIChlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMpCi0JCQlyYXRlID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzCi0JCQkJW2kgLSBlbGVtcy0+c3VwcF9yYXRlc19sZW5dOwotCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOwotCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JhdGVzOyBqKyspCi0JCQlpZiAoYml0cmF0ZXNbal0uYml0cmF0ZSA9PSBvd25fcmF0ZSkKLQkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKLQl9Ci0JcmV0dXJuIHN1cHBfcmF0ZXM7Ci19Ci0KIC8qIGZyYW1lIHNlbmRpbmcgZnVuY3Rpb25zICovCiAKLS8qIGFsc28gdXNlZCBieSBzY2FubmluZyBjb2RlICovCi12b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKLQkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zLCAqc3VwcF9yYXRlcywgKmVzdXBwX3JhdGVzID0gTlVMTDsKLQlpbnQgaTsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCi0JCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChkc3QpIHsKLQkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7Ci0JfQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gc3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOwotCi0Jc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAyKTsKLQlzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQlzdXBwX3JhdGVzWzFdID0gMDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpZiAoZXN1cHBfcmF0ZXMpIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCWVzdXBwX3JhdGVzWzFdKys7Ci0JCX0gZWxzZSBpZiAoc3VwcF9yYXRlc1sxXSA9PSA4KSB7Ci0JCQllc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAzKTsKLQkJCWVzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCQllc3VwcF9yYXRlc1sxXSA9IDE7Ci0JCQlwb3MgPSAmZXN1cHBfcmF0ZXNbMl07Ci0JCX0gZWxzZSB7Ci0JCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7Ci0JCQlzdXBwX3JhdGVzWzFdKys7Ci0JCX0KLQkJKnBvcyA9IHJhdGUtPmJpdHJhdGUgLyA1OwotCX0KLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCWludCB0cmFuc2FjdGlvbiwgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAotCQkJCWludCBlbmNyeXB0KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQgKyA2KTsKLQltZW1zZXQobWdtdCwgMCwgMjQgKyA2KTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKLQlpZiAoZW5jcnlwdCkKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoaWZzdGEtPmF1dGhfYWxnKTsKLQltZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uICsgMTsKLQltZ210LT51LmF1dGguc3RhdHVzX2NvZGUgPSBjcHVfdG9fbGUxNigwKTsKLQlpZiAoZXh0cmEpCi0JCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoteworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwpAQCAtMjQxLDExICs5NCwxMSBAQAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IHdtbSA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0JdTY0IHJhdGVzID0gMDsKKwl1MzIgcmF0ZXMgPSAwOwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZnN0YS0+ZXh0cmFfaWVfbGVuICsKLQkJCSAgICBpZnN0YS0+c3NpZF9sZW4pOworCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZm1nZC0+ZXh0cmFfaWVfbGVuICsKKwkJCSAgICBpZm1nZC0+c3NpZF9sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgogCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTI1NSw3ICsxMDgsNyBAQAogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCi0JY2FwYWIgPSBpZnN0YS0+Y2FwYWI7CisJY2FwYWIgPSBpZm1nZC0+Y2FwYWI7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKQEAgLTI2NCwxMSArMTE3LDExIEBACiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CiAJfQogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKLQkJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpZiAoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCQlpZiAoYnNzLT53bW1fdXNlZCkKIAkJCXdtbSA9IDE7CkBAIC0yNzksNyArMTMyLDcgQEAKIAkJICogYi1vbmx5IG1vZGUpICovCiAJCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKGJzcywgc2JhbmQsICZyYXRlcyk7CiAKLQkJaWYgKChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkJaWYgKChic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgogCQkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwogCkBAIC0yOTEsMTggKzE0NCwxOCBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewogCQlza2JfcHV0KHNrYiwgMTApOwogCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwogCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KIAkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZnN0YS0+cHJldl9ic3NpZCwKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZtZ2QtPnByZXZfYnNzaWQsCiAJCSAgICAgICBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc2tiX3B1dChza2IsIDQpOwpAQCAtMzE0LDEwICsxNjcsMTAgQEAKIAl9CiAKIAkvKiBTU0lEICovCi0JaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOworCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZtZ2QtPnNzaWRfbGVuKTsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBpZm1nZC0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAKIAkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KIAlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKQEAgLTM3MiwxMiArMjI1LDEyIEBACiAJCX0KIAl9CiAKLQlpZiAoaWZzdGEtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZzdGEtPmV4dHJhX2llLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKIAl9CiAKLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgeworCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CiAJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKIAkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwogCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KQEAgLTM5MSwxMCArMjQ0LDE3IEBACiAJfQogCiAJLyogd21tIHN1cHBvcnQgaXMgYSBtdXN0IHRvIEhUICovCi0JaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkvKgorCSAqIElFRUU4MDIuMTFuIGRvZXMgbm90IGFsbG93IFRLSVAvV0VQIGFzIHBhaXJ3aXNlCisJICogY2lwaGVycyBpbiBIVCBtb2RlLiBXZSBzdGlsbCBhc3NvY2lhdGUgaW4gbm9uLWh0CisJICogbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZSBjaXBoZXJzIGlzCisJICogY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KKwkgKi8KKwlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgogCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgogCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKLQkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpIHsKKwkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgJiYKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikoaHRfaWUgKyAyKTsKIAkJdTE2IGNhcCA9IHNiYW5kLT5odF9jYXAuY2FwOwpAQCAtNDI5LDExICsyODksMTEgQEAKIAkJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKIAl9CiAKLQlrZnJlZShpZnN0YS0+YXNzb2NyZXFfaWVzKTsKLQlpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7Ci0JaWZzdGEtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOwotCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVxX2llcywgaWVzLCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbik7CisJa2ZyZWUoaWZtZ2QtPmFzc29jcmVxX2llcyk7CisJaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOworCWlmbWdkLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKKwkJbWVtY3B5KGlmbWdkLT5hc3NvY3JlcV9pZXMsIGllcywgaWZtZ2QtPmFzc29jcmVxX2llc19sZW4pOwogCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KQEAgLTQ0Myw3ICszMDMsNyBAQAogCQkJCQkgICB1MTYgc3R5cGUsIHUxNiByZWFzb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIApAQCAtNDU3LDQwICszMTcsNTEgQEAKIAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5kYSwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBzdHlwZSk7CiAJc2tiX3B1dChza2IsIDIpOwogCS8qIHUuZGVhdXRoLnJlYXNvbl9jb2RlID09IHUuZGlzYXNzb2MucmVhc29uX2NvZGUgKi8KIAltZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbik7CiAKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICpwc3BvbGw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqcHNwb2xsKSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCisJCSAgICAgICAicHNwb2xsIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKikgc2tiX3B1dChza2IsIHNpemVvZigqcHNwb2xsKSk7CisJbWVtc2V0KHBzcG9sbCwgMCwgc2l6ZW9mKCpwc3BvbGwpKTsKKwlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMIHwgSUVFRTgwMjExX0ZDVExfUE07CisJcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOworCXBzcG9sbC0+YWlkID0gY3B1X3RvX2xlMTYoaWZtZ2QtPmFpZCk7CisKKwkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KKwlwc3BvbGwtPmFpZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1IHwgMSA8PCAxNCk7CisKKwltZW1jcHkocHNwb2xsLT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCiAvKiBNTE1FICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOwotCi0JLyogY2YuIElFRUUgODAyLjExIDkuMi4xMiAqLwotCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspCi0JCWlmICgoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQotCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgotCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKLQkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0JZWxzZQotCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0KLQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCwKIAkJCQkgICAgIHU4ICp3bW1fcGFyYW0sIHNpemVfdCB3bW1fcGFyYW1fbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHBhcmFtczsKQEAgLTQ5OCw3ICszNjksNyBAQAogCWludCBjb3VudDsKIAl1OCAqcG9zOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCiAJCXJldHVybjsKIAogCWlmICghd21tX3BhcmFtKQpAQCAtNTA3LDE4ICszNzgsMTUgQEAKIAlpZiAod21tX3BhcmFtX2xlbiA8IDggfHwgd21tX3BhcmFtWzVdIC8qIHZlcnNpb24gKi8gIT0gMSkKIAkJcmV0dXJuOwogCWNvdW50ID0gd21tX3BhcmFtWzZdICYgMHgwZjsKLQlpZiAoY291bnQgPT0gaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCkKKwlpZiAoY291bnQgPT0gaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCkKIAkJcmV0dXJuOwotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gY291bnQ7CiAKIAlwb3MgPSB3bW1fcGFyYW0gKyA4OwogCWxlZnQgPSB3bW1fcGFyYW1fbGVuIC0gODsKIAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAKLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZfdHgpCi0JCXJldHVybjsKLQogCWxvY2FsLT53bW1fYWNtID0gMDsKIAlmb3IgKDsgbGVmdCA+PSA0OyBsZWZ0IC09IDQsIHBvcyArPSA0KSB7CiAJCWludCBhY2kgPSAocG9zWzBdID4+IDUpICYgMHgwMzsKQEAgLTUyNiwyNiArMzk0LDI2IEBACiAJCWludCBxdWV1ZTsKIAogCQlzd2l0Y2ggKGFjaSkgewotCQljYXNlIDE6CisJCWNhc2UgMTogLyogQUNfQksgKi8KIAkJCXF1ZXVlID0gMzsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsgLyogQksvLSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMjoKKwkJY2FzZSAyOiAvKiBBQ19WSSAqLwogCQkJcXVldWUgPSAxOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOyAvKiBDTC9WSSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMzoKKwkJY2FzZSAzOiAvKiBBQ19WTyAqLwogCQkJcXVldWUgPSAwOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDYpIHwgQklUKDcpOyAvKiBWTy9OQyAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMDoKKwkJY2FzZSAwOiAvKiBBQ19CRSAqLwogCQlkZWZhdWx0OgogCQkJcXVldWUgPSAyOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOyAvKiBCRS9FRSAqLwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNTU5LDIxICs0MjcsNDEgQEAKIAkJICAgICAgIGxvY2FsLT5tZGV2LT5uYW1lLCBxdWV1ZSwgYWNpLCBhY20sIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLAogCQkgICAgICAgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOwogI2VuZGlmCi0JCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCi0JCSAqIEFDIGZvciBub3cpICovCi0JCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CisJCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4ICYmCisJCSAgICBsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgogCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgbG9jYWwtPm1kZXYtPm5hbWUsIHF1ZXVlKTsKIAkJfQogCX0KIH0KIAorc3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX3RpbShzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsIHUxNiBhaWQpCit7CisJdTggbWFzazsKKwl1OCBpbmRleCwgaW5kZXhuMSwgaW5kZXhuMjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltID0gKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopIGVsZW1zLT50aW07CisKKwlhaWQgJj0gMHgzZmZmOworCWluZGV4ID0gYWlkIC8gODsKKwltYXNrICA9IDEgPDwgKGFpZCAmIDcpOworCisJaW5kZXhuMSA9IHRpbS0+Yml0bWFwX2N0cmwgJiAweGZlOworCWluZGV4bjIgPSBlbGVtcy0+dGltX2xlbiArIGluZGV4bjEgLSA0OworCisJaWYgKGluZGV4IDwgaW5kZXhuMSB8fCBpbmRleCA+IGluZGV4bjIpCisJCXJldHVybiBmYWxzZTsKKworCWluZGV4IC09IGluZGV4bjE7CisKKwlyZXR1cm4gISEodGltLT52aXJ0dWFsX21hcFtpbmRleF0gJiBtYXNrKTsKK30KKwogc3RhdGljIHUzMiBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgICB1MTYgY2FwYWIsIGJvb2wgZXJwX3ZhbGlkLCB1OCBlcnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAjZW5kaWYKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCB1c2VfcHJvdGVjdGlvbjsKQEAgLTU5Niw3ICs0ODQsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX2N0c19wcm90ID0gdXNlX3Byb3RlY3Rpb247CkBAIC02MTAsNyArNDk4LDcgQEAKIAkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOwpAQCAtNjI0LDcgKzUxMiw3IEBACiAJCQkgICAgICAgIiAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9zaG9ydF9zbG90ID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPSB1c2Vfc2hvcnRfc2xvdDsKQEAgLTYzNCw1NyArNTIyLDU3IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCi0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNoYXIgKmJ1ZjsKIAlzaXplX3QgbGVuOwogCWludCBpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAotCWlmICghaWZzdGEtPmFzc29jcmVxX2llcyAmJiAhaWZzdGEtPmFzc29jcmVzcF9pZXMpCisJaWYgKCFpZm1nZC0+YXNzb2NyZXFfaWVzICYmICFpZm1nZC0+YXNzb2NyZXNwX2llcykKIAkJcmV0dXJuOwogCi0JYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZzdGEtPmFzc29jcmVxX2llc19sZW4gKwotCQkJCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuICsKKwkJCQlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCiAJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ0lORk8oIik7Ci0JaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpIHsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXFJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVxX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3JlcV9pZXNbaV0pOwogCQl9CiAJfQotCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykgewotCQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKKwkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKIAkJfQogCX0KIAlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7CiAKIAlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewogCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7CiAJCX0KIAl9CiAKQEAgLTY5OSw0MCArNTg3LDM5IEBACiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgdTMyIGJzc19pbmZvX2NoYW5nZWQpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsX3RvX2h3KGxvY2FsKS0+Y29uZjsKIAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKIAkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQ7Ci0JCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWw7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKIAkJc2RhdGEtPnZpZi5ic3NfY29uZi5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CiAKIAkJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLAotCQkJYnNzLT5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwkJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKworCQljZmc4MDIxMV9ob2xkX2JzcygmYnNzLT5jYnNzKTsKIAogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQltZW1jcHkoaWZzdGEtPnByZXZfYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEsIGlmc3RhKTsKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwltZW1jcHkoaWZtZ2QtPnByZXZfYnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEpOwogCi0JaWZzdGEtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOworCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAxKTsKIAogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSAxOwpAQCAtNzQ1LDcyICs2MzIsMTE1IEBACiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGJzc19pbmZvX2NoYW5nZWQpOwogCiAJaWYgKGxvY2FsLT5wb3dlcnNhdmUpIHsKLQkJaWYgKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKQorCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykgJiYKKwkJICAgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKIAkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KSk7Ci0JCWVsc2UgeworCQkJCSAgbXNlY3NfdG9famlmZmllcygKKwkJCQkJbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJCX0gZWxzZSB7CisJCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCi0JCQkJCSAgICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIAkJfQogCX0KIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vbihzZGF0YS0+ZGV2KTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5kaXJlY3RfcHJvYmVfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcysrOworCWlmIChpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBBUAorCQkgKi8KKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisKKwkJLyoKKwkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKKwkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUuCisJCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqLworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAJCXJldHVybjsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byBBUCAlcE0gdHJ5ICVkXG4iLAotCQkJc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkLAotCQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyk7CisJCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQsCisJCQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZzdGEtPnJlcXVlc3QpOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZtZ2QtPnJlcXVlc3QpOwogCiAJLyogRGlyZWN0IHByb2JlIGlzIHNlbnQgdG8gYnJvYWRjYXN0IGFkZHJlc3MgYXMgc29tZSBBUHMKIAkgKiB3aWxsIG5vdCBhbnN3ZXIgdG8gZGlyZWN0IHBhY2tldCBpbiB1bmFzc29jaWF0ZWQgc3RhdGUuCiAJICovCiAJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLAotCQkJCSBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5hdXRoX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJdTggKmllczsKKwlzaXplX3QgaWVzX2xlbjsKKworCWlmbWdkLT5hdXRoX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisKKwkJLyoKKwkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKKwkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUuCisJCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqLworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAJCXJldHVybjsKIAl9CiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CiAKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMSwgTlVMTCwgMCwgMCk7CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgeworCQlpZXMgPSBpZm1nZC0+c21lX2F1dGhfaWU7CisJCWllc19sZW4gPSBpZm1nZC0+c21lX2F1dGhfaWVfbGVuOworCX0gZWxzZSB7CisJCWllcyA9IE5VTEw7CisJCWllc19sZW4gPSAwOworCX0KKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCBpZm1nZC0+YXV0aF9hbGcsIGllcywgaWVzX2xlbiwKKwkJCSAgICBpZm1nZC0+YnNzaWQsIDApOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogLyoKQEAgLTgxOCwzMiArNzQ4LDQ0IEBACiAgKiBpZiBzZWxmIGRpc2Nvbm5lY3RlZCBvciBhIHJlYXNvbiBjb2RlIGZyb20gdGhlIEFQLgogICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgYm9vbCBkZWF1dGgsCi0JCQkJICAgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwgdTE2IHJlYXNvbikKKwkJCQkgICBib29sIGRlYXV0aCwgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwKKwkJCQkgICB1MTYgcmVhc29uKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbF90b19odyhsb2NhbCktPmNvbmY7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDAsIGNvbmZpZ19jaGFuZ2VkID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoZGVhdXRoKSB7Ci0JCWlmc3RhLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOwotCQlpZnN0YS0+YXV0aF90cmllcyA9IDA7CisJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOworCQlpZm1nZC0+YXV0aF90cmllcyA9IDA7CiAJfQotCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZnN0YS0+YXNzb2NfdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2NfdHJpZXMgPSAwOwogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLT5kZXYpOwogCi0JaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc2RhdGEsIHN0YS0+c3RhLmFkZHIpOworCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAorCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCisJaWYgKGJzcykgeworCQljZmc4MDIxMV91bmhvbGRfYnNzKCZic3MtPmNic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwl9CiAKIAlpZiAoc2VsZl9kaXNjb25uZWN0ZWQpIHsKIAkJaWYgKGRlYXV0aCkKQEAgLTg1NCwyMyArNzk2LDI4IEBACiAJCQkJSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DLCByZWFzb24pOwogCX0KIAotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwogCWNoYW5nZWQgfD0gaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHNkYXRhKTsKIAogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDApOwogCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IGZhbHNlOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOwogCi0JaWYgKHNlbGZfZGlzY29ubmVjdGVkIHx8IHJlYXNvbiA9PSBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpCi0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwlpZiAoc2VsZl9kaXNjb25uZWN0ZWQgfHwgcmVhc29uID09IFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGZhbHNlOworCS8qIGNoYW5uZWwoX3R5cGUpIGNoYW5nZXMgYXJlIGhhbmRsZWQgYnkgaWVlZTgwMjExX2h3X2NvbmZpZyAqLwogCWxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZSA9IE5MODAyMTFfQ0hBTl9OT19IVDsKLQljb25maWdfY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSFQ7CisKKwlsb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID0gMDsKIAogCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwpAQCAtODg1LDcgKzgzMiw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MDYsMjcgKzg1MywyNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgYnNzX3ByaXZhY3k7CiAJaW50IHdlcF9wcml2YWN5OwogCWludCBwcml2YWN5X2ludm9rZWQ7CiAKLQlpZiAoIWlmc3RhIHx8IChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01JWEVEX0NFTEwpKQorCWlmICghaWZtZ2QgfHwgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkpCiAJCXJldHVybiAwOwogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmICghYnNzKQogCQlyZXR1cm4gMDsKIAotCWJzc19wcml2YWN5ID0gISEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOworCWJzc19wcml2YWN5ID0gISEoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CiAJd2VwX3ByaXZhY3kgPSAhIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc2RhdGEpOwotCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKKwlwcml2YWN5X2ludm9rZWQgPSAhIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCk7CiAKIAlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIApAQCAtOTM2LDEwNSArODgzLDE3MyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmFzc29jX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hc3NvY190cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWlmbWdkLT5hc3NvY190cmllcysrOworCWlmIChpZm1nZC0+YXNzb2NfdHJpZXMgPiBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJCS8qCisJCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0CisJCSAqIGR1ZSB0byBzdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLgorCQkgKiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yayBhZ2FpbgorCQkgKi8KKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogCQlyZXR1cm47CiAJfQogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSwgaWZzdGEpKSB7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1pc21hdGNoIGluIHByaXZhY3kgY29uZmlndXJhdGlvbiBhbmQgIgogCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBhYm9ydCBhc3NvY2lhdGlvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwogCQlyZXR1cm47CiAJfQogCi0JaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKTsKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQordm9pZCBpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKKwkvKgorCSAqIFdlIGNhbiBwb3N0cG9uZSB0aGUgbWdkLnRpbWVyIHdoZW5ldmVyIHJlY2VpdmluZyB1bmljYXN0IGZyYW1lcworCSAqIGZyb20gQVAgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgd29ya2luZyBib3RoIHdheXMKKwkgKiBhdCB0aGF0IHRpbWUuIEJ1dCBtdWx0aWNhc3QgZnJhbWVzIChhbmQgaGVuY2UgYWxzbyBiZWFjb25zKSBtdXN0CisJICogYmUgaWdub3JlZCBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgdGltZXIgZHVyaW5nCisJICogZGF0YSBpZGxlIHBlcmlvZHMgZm9yIHNlbmRpbmcgdGhlIHBlcmlvZGljYWwgcHJvYmUgcmVxdWVzdCB0bworCSAqIHRoZSBBUC4KKwkgKi8KKwlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQltb2RfdGltZXIoJnNkYXRhLT51Lm1nZC50aW1lciwKKwkJCSAgamlmZmllcyArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKK30KKwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCSAgICAgdS5tZ2QuYmVhY29uX2xvc3Nfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyaXZlciByZXBvcnRzIGJlYWNvbiBsb3NzIGZyb20gQVAgJXBNICIKKwkgICAgICAgIi0gc2VuZGluZyBwcm9iZSByZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAorCSAgICAgICBzZGF0YS0+dS5tZ2QuYnNzaWQpOworCisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCisJCQkJIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CisKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKK30KKwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Moc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOworCisJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwKKwkJICAgJnNkYXRhLT51Lm1nZC5iZWFjb25fbG9zc193b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2JlYWNvbl9sb3NzKTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGRpc2Fzc29jOworCWJvb2wgZGlzYXNzb2MgPSBmYWxzZTsKIAogCS8qIFRPRE86IHN0YXJ0IG1vbml0b3JpbmcgY3VycmVudCBBUCBzaWduYWwgcXVhbGl0eSBhbmQgbnVtYmVyIG9mCiAJICogbWlzc2VkIGJlYWNvbnMuIFNjYW4gb3RoZXIgY2hhbm5lbHMgZXZlcnkgbm93IGFuZCB0aGVuIGFuZCBzZWFyY2gKIAkgKiBmb3IgYmV0dGVyIEFQcy4gKi8KIAkvKiBUT0RPOiByZW1vdmUgZXhwaXJlZCBCU1NlcyAqLwogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQ7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gU1RBIGVudHJ5IGZvciBvd24gQVAgJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJZGlzYXNzb2MgPSAxOwotCX0gZWxzZSB7Ci0JCWRpc2Fzc29jID0gMDsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCSAgICAgICBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCkpIHsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFByb2JlUmVzcCBmcm9tICIKLQkJCQkgICAgICAgImN1cnJlbnQgQVAgJXBNIC0gYXNzdW1lIG91dCBvZiAiCi0JCQkJICAgICAgICJyYW5nZVxuIiwKLQkJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJCQlkaXNhc3NvYyA9IDE7Ci0JCQl9IGVsc2UKLQkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmc3RhLT5ic3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQlpZnN0YS0+ZmxhZ3MgXj0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCQl9IGVsc2UgewotCQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZnN0YS0+bGFzdF9wcm9iZSArCi0JCQkJICAgICAgIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCkpIHsKLQkJCQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7Ci0JCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOwotCQkJfQotCQl9CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlkaXNhc3NvYyA9IHRydWU7CisJCWdvdG8gdW5sb2NrOwogCX0KIAorCWlmICgoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMKSAmJgorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIHByb2JlIHJlc3BvbnNlIGZyb20gQVAgJXBNICIKKwkJICAgICAgICItIGRpc2Fzc29jaWF0aW5nXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJZGlzYXNzb2MgPSB0cnVlOworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJLyoKKwkgKiBCZWFjb24gZmlsdGVyaW5nIGlzIG9ubHkgZW5hYmxlZCB3aXRoIHBvd2VyIHNhdmUgYW5kIHRoZW4gdGhlCisJICogc3RhY2sgc2hvdWxkIG5vdCBjaGVjayBmb3IgYmVhY29uIGxvc3MuCisJICovCisJaWYgKCEoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSKSAmJgorCSAgICAgIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkgJiYKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLAorCQkgICAgICAgaWZtZ2QtPmxhc3RfYmVhY29uICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIGxvc3MgZnJvbSBBUCAlcE0gIgorCQkgICAgICAgIi0gc2VuZGluZyBwcm9iZSByZXF1ZXN0XG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsIGlmbWdkLT5zc2lkLAorCQkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKKwkJZ290byB1bmxvY2s7CisKKwl9CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfUFJPQkVfSURMRV9USU1FKSkgeworCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCisJCQkJCSBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOworCX0KKworIHVubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkaXNhc3NvYykKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1BSRVZfQVVUSF9OT1RfVkFMSUQpOwogCWVsc2UKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSB7CisJCS8qIFdhaXQgZm9yIFNNRSB0byByZXF1ZXN0IGFzc29jaWF0aW9uICovCisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwl9IGVsc2UKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKIHsKQEAgLTEwNDUsNTAgKzEwNjAsMzcgQEAKIAlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKIAlpZiAoIWVsZW1zLmNoYWxsZW5nZSkKIAkJcmV0dXJuOwotCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIGlmc3RhLCAzLCBlbGVtcy5jaGFsbGVuZ2UgLSAyLAotCQkJICAgIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLCAxKTsKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAzLCBzZGF0YS0+dS5tZ2QuYXV0aF9hbGcsCisJCQkgICAgZWxlbXMuY2hhbGxlbmdlIC0gMiwgZWxlbXMuY2hhbGxlbmdlX2xlbiArIDIsCisJCQkgICAgc2RhdGEtPnUubWdkLmJzc2lkLCAxKTsKKwlzZGF0YS0+dS5tZ2QuYXV0aF90cmFuc2FjdGlvbiA9IDQ7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSkKIAkJcmV0dXJuOwogCiAJaWYgKGxlbiA8IDI0ICsgNikKIAkJcmV0dXJuOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCiAJYXV0aF9hbGcgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOwogCWF1dGhfdHJhbnNhY3Rpb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbik7CiAJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQkvKgotCQkgKiBJRUVFIDgwMi4xMSBzdGFuZGFyZCBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGluIElCU1MKLQkJICogbmV0d29ya3MgYW5kIG1vc3QgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBzZWVtIHRvIHVzZSBpdC4KLQkJICogSG93ZXZlciwgdHJ5IHRvIHJlcGx5IHRvIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzIGlmIHNvbWVvbmUKLQkJICogaGFzIGFjdHVhbGx5IGltcGxlbWVudGVkIHRoaXMuCi0JCSAqLwotCQlpZiAoYXV0aF9hbGcgIT0gV0xBTl9BVVRIX09QRU4gfHwgYXV0aF90cmFuc2FjdGlvbiAhPSAxKQotCQkJcmV0dXJuOwotCQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMiwgTlVMTCwgMCwgMCk7Ci0JfQotCi0JaWYgKGF1dGhfYWxnICE9IGlmc3RhLT5hdXRoX2FsZyB8fAotCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uKQorCWlmIChhdXRoX2FsZyAhPSBpZm1nZC0+YXV0aF9hbGcgfHwKKwkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSBpZm1nZC0+YXV0aF90cmFuc2FjdGlvbikKIAkJcmV0dXJuOwogCiAJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKQEAgLTEwOTcsMTUgKzEwOTksMTUgQEAKIAkJCWNvbnN0IGludCBudW1fYWxncyA9IEFSUkFZX1NJWkUoYWxncyk7CiAJCQlpbnQgaSwgcG9zOwogCQkJYWxnc1swXSA9IGFsZ3NbMV0gPSBhbGdzWzJdID0gMHhmZjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQogCQkJCWFsZ3NbMF0gPSBXTEFOX0FVVEhfT1BFTjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQogCQkJCWFsZ3NbMV0gPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQogCQkJCWFsZ3NbMl0gPSBXTEFOX0FVVEhfTEVBUDsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQogCQkJCXBvcyA9IDA7Ci0JCQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCisJCQllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCiAJCQkJcG9zID0gMTsKIAkJCWVsc2UKIAkJCQlwb3MgPSAyOwpAQCAtMTExMywxMDUgKzExMTUsMTEyIEBACiAJCQkJcG9zKys7CiAJCQkJaWYgKHBvcyA+PSBudW1fYWxncykKIAkJCQkJcG9zID0gMDsKLQkJCQlpZiAoYWxnc1twb3NdID09IGlmc3RhLT5hdXRoX2FsZyB8fAorCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZtZ2QtPmF1dGhfYWxnIHx8CiAJCQkJICAgIGFsZ3NbcG9zXSA9PSAweGZmKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoYWxnc1twb3NdID09IFdMQU5fQVVUSF9TSEFSRURfS0VZICYmCiAJCQkJICAgICFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKSkKIAkJCQkJY29udGludWU7Ci0JCQkJaWZzdGEtPmF1dGhfYWxnID0gYWxnc1twb3NdOworCQkJCWlmbWdkLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKKwlzd2l0Y2ggKGlmbWdkLT5hdXRoX2FsZykgewogCWNhc2UgV0xBTl9BVVRIX09QRU46CiAJY2FzZSBXTEFOX0FVVEhfTEVBUDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCBpZnN0YSk7CisJY2FzZSBXTEFOX0FVVEhfRlQ6CisJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CisJCWNmZzgwMjExX3NlbmRfcnhfYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpCi0JCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIGlmc3RhKTsKLQkJZWxzZQotCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBpZnN0YSwgbWdtdCwgbGVuKTsKKwkJaWYgKGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpIHsKKwkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CisJCQljZmc4MDIxMV9zZW5kX3J4X2F1dGgoc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIGxlbik7CisJCX0gZWxzZQorCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBtZ210LCBsZW4pOwogCQlicmVhazsKIAl9CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgcmVhc29uX2NvZGU7CiAKIAlpZiAobGVuIDwgMjQgKyAyKQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGVkIChSZWFzb246ICV1KVxuIiwKIAkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpICYmCisJICAgIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAorCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgfHwKKwkgICAgIGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgZmFsc2UsIDApOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIGZhbHNlLCAwKTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwljZmc4MDIxMV9zZW5kX3J4X2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKIAkJcmV0dXJuOwogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCiAJCXJldHVybjsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlZCAoUmVhc29uOiAldSlcbiIsCiAJCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSAmJgorCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIGZhbHNlLCByZWFzb25fY29kZSk7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIGZhbHNlLCByZWFzb25fY29kZSk7CisJY2ZnODAyMTFfc2VuZF9yeF9kaXNhc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCQkgc2l6ZV90IGxlbiwKIAkJCQkJIGludCByZWFzc29jKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU2NCByYXRlcywgYmFzaWNfcmF0ZXM7CisJdTMyIHJhdGVzLCBiYXNpY19yYXRlczsKIAl1MTYgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwpAQCAtMTIyNCwxMyArMTIzMywxMyBAQAogCS8qIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKIAkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uICovCiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CkBAIC0xMjQyLDEzICsxMjUxLDMxIEBACiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCiAJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOwogCisJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCisJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgeworCQl1MzIgdHUsIG1zOworCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOworCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgcmVqZWN0ZWQgYXNzb2NpYXRpb24gdGVtcG9yYXJpbHk7ICIKKwkJICAgICAgICJjb21lYmFjayBkdXJhdGlvbiAldSBUVSAoJXUgbXMpXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHUsIG1zKTsKKwkJaWYgKG1zID4gSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpCisJCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwKKwkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7CiAJCS8qIGlmIHRoaXMgd2FzIGEgcmVhc3NvY2lhdGlvbiwgZW5zdXJlIHdlIHRyeSBhICJmdWxsIgogCQkgKiBhc3NvY2lhdGlvbiBuZXh0IHRpbWUuIFRoaXMgd29ya3MgYXJvdW5kIHNvbWUgYnJva2VuIEFQcwogCQkgKiB3aGljaCBkbyBub3QgY29ycmVjdGx5IHJlamVjdCByZWFzc29jaWF0aW9uIHJlcXVlc3RzLiAqLwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI1Nyw5ICsxMjg0LDYgQEAKIAkJICAgICAgICJzZXRcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFpZCk7CiAJYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwogCi0JcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwotCiAJaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0xMjY3LDQwICsxMjkxLDI5IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZnN0YS0+YWlkID0gYWlkOwotCWlmc3RhLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87CisJaWZtZ2QtPmFpZCA9IGFpZDsKKwlpZm1nZC0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOwogCi0Ja2ZyZWUoaWZzdGEtPmFzc29jcmVzcF9pZXMpOwotCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuKTsKKwlrZnJlZShpZm1nZC0+YXNzb2NyZXNwX2llcyk7CisJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKKwlpZm1nZC0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpCisJCW1lbWNweShpZm1nZC0+YXNzb2NyZXNwX2llcywgcG9zLCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJLyogQWRkIFNUQSBlbnRyeSBmb3IgdGhlIEFQICovCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmc3RhLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBpZm1nZC0+YnNzaWQsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXN0YSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2MgU1RBIGVudHJ5IGZvciIKIAkJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAotCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmIChic3MpIHsKLQkJCXN0YS0+bGFzdF9zaWduYWwgPSBic3MtPnNpZ25hbDsKLQkJCXN0YS0+bGFzdF9xdWFsID0gYnNzLT5xdWFsOwotCQkJc3RhLT5sYXN0X25vaXNlID0gYnNzLT5ub2lzZTsKLQkJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQl9CiAKIAkJLyogdXBkYXRlIG5ldyBzdGEgd2l0aCBpdHMgbGFzdCByeCBhY3Rpdml0eSAqLwogCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwpAQCAtMTM2Nyw3ICsxMzgwLDggQEAKIAllbHNlCiAJCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSkKKwkvKiBJZiBUS0lQL1dFUCBpcyB1c2VkLCBubyBuZWVkIHRvIHBhcnNlIEFQJ3MgSFQgY2FwYWJpbGl0aWVzICovCisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHNiYW5kLAogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfY2FwKTsKIApAQCAtMTM3NSw2ICsxMzg5LDkgQEAKIAogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEKQorCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfTUZQKTsKKwogCWlmIChlbGVtcy53bW1fcGFyYW0pCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9XTUUpOwogCkBAIC0xMzkxLDExICsxNDA4LDEyIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZWxlbXMud21tX3BhcmFtKQotCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCiAJaWYgKGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCSAgICAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKQogCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X2luZm9fZWxlbSwKIAkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7CiAKQEAgLTE0MDMsMTM2ICsxNDIxLDE5IEBACiAJICogaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KIAlic3NfY29uZi0+YWlkID0gYWlkOwogCWJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5ID0gY2FwYWJfaW5mbzsKLQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhLCBjaGFuZ2VkKTsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGNoYW5nZWQpOwogCi0JaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKKwkvKgorCSAqIGluaXRpYWxpc2UgdGhlIHRpbWUgb2YgbGFzdCBiZWFjb24gdG8gYmUgdGhlIGFzc29jaWF0aW9uIHRpbWUsCisJICogb3RoZXJ3aXNlIGJlYWNvbiBsb3NzIGNoZWNrIHdpbGwgdHJpZ2dlciBpbW1lZGlhdGVseQorCSAqLworCWlmbWdkLT5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisKKwlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7CisJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIH0KIAogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCByZXMsIHJhdGVzLCBpLCBqOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDApOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgotCQkgICAgICAgInJlc3BvbnNlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCi0JLyogUmVtb3ZlIHBvc3NpYmxlIFNUQSBlbnRyaWVzIGZyb20gb3RoZXIgSUJTUyBuZXR3b3Jrcy4gKi8KLQlzdGFfaW5mb19mbHVzaF9kZWxheWVkKHNkYXRhKTsKLQotCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKLQkJLyogUmVzZXQgb3duIFRTRiB0byBhbGxvdyB0aW1lIHN5bmNocm9uaXphdGlvbiB3b3JrLiAqLwotCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQl9Ci0JbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IGJzcy0+YmVhY29uX2ludCA+PSAxMCA/IGJzcy0+YmVhY29uX2ludCA6IDEwOwotCi0Jc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSBic3MtPmNhcGFiaWxpdHkgJgotCQlXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/IDEgOiAwOwotCi0JcmVzID0gaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBic3MtPmZyZXEpOwotCi0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCS8qIEJ1aWxkIElCU1MgcHJvYmUgcmVzcG9uc2UgKi8KLQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCi0JCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCQlJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Ci0JbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9Ci0JCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQpOwotCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KGJzcy0+dGltZXN0YW1wKTsKLQltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoYnNzLT5jYXBhYmlsaXR5KTsKLQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZzdGEtPnNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQotCXJhdGVzID0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKLQlpZiAocmF0ZXMgPiA4KQotCQlyYXRlcyA9IDg7Ci0JcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7Ci0JKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQkqcG9zKysgPSByYXRlczsKLQltZW1jcHkocG9zLCBic3MtPnN1cHBfcmF0ZXMsIHJhdGVzKTsKLQotCWlmIChic3MtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9EU19QQVJBTVM7Ci0JCSpwb3MrKyA9IDE7Ci0JCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPmZyZXEpOwotCX0KLQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMik7Ci0JKnBvcysrID0gV0xBTl9FSURfSUJTU19QQVJBTVM7Ci0JKnBvcysrID0gMjsKLQkvKiBGSVg6IHNldCBBVElNIHdpbmRvdyBiYXNlZCBvbiBzY2FuIHJlc3VsdHMgKi8KLQkqcG9zKysgPSAwOwotCSpwb3MrKyA9IDA7Ci0KLQlpZiAoYnNzLT5zdXBwX3JhdGVzX2xlbiA+IDgpIHsKLQkJcmF0ZXMgPSBic3MtPnN1cHBfcmF0ZXNfbGVuIC0gODsKLQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCQkqcG9zKysgPSByYXRlczsKLQkJbWVtY3B5KHBvcywgJmJzcy0+c3VwcF9yYXRlc1s4XSwgcmF0ZXMpOwotCX0KLQotCWlmc3RhLT5wcm9iZV9yZXNwID0gc2tiOwotCi0JaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKLQotCi0JcmF0ZXMgPSAwOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCWludCBiaXRyYXRlID0gKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCi0JCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKLQkJCQlyYXRlcyB8PSBCSVQoaik7Ci0JfQotCWlmc3RhLT5zdXBwX3JhdGVzX2JpdHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF0gPSByYXRlczsKLQotCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIGJzcyk7Ci0KLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQ7Ci0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7Ci0KLQlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCB0cnVlKTsKLQotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotCi0JcmV0dXJuIHJlczsKLX0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgc2l6ZV90IGxlbiwKQEAgLTE1NDMsMTEgKzE0NDQsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCWludCBmcmVxOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCXU2NCBiZWFjb25fdGltZXN0YW1wLCByeF90aW1lc3RhbXA7Ci0JdTY0IHN1cHBfcmF0ZXMgPSAwOwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKIAogCWlmIChlbGVtcy0+ZHNfcGFyYW1zICYmIGVsZW1zLT5kc19wYXJhbXNfbGVuID09IDEpCiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMtPmRzX3BhcmFtc1swXSk7CkBAIC0xNTU5LDExMiArMTQ1NiwxNiBAQAogCWlmICghY2hhbm5lbCB8fCBjaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmIGVsZW1zLT5zdXBwX3JhdGVzICYmCi0JICAgIG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgewotCQlzdXBwX3JhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsIGVsZW1zLCBiYW5kKTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7Ci0JCWlmIChzdGEpIHsKLQkJCXU2NCBwcmV2X3JhdGVzOwotCi0JCQlwcmV2X3JhdGVzID0gc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXTsKLQkJCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLwotCQkJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAotCQkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJCWlmIChzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdICE9IHByZXZfcmF0ZXMpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1cGRhdGVkIHN1cHBfcmF0ZXMgc2V0ICIKLQkJCQkgICAgImZvciAlcE0gYmFzZWQgb24gYmVhY29uIGluZm8gKDB4JWxseCB8ICIKLQkJCQkgICAgIjB4JWxseCAtPiAweCVsbHgpXG4iLAotCQkJCSAgICBzZGF0YS0+ZGV2LT5uYW1lLAotCQkJCSAgICBzdGEtPnN0YS5hZGRyLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKLQkJfQotCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0KLQogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUobG9jYWwsIHJ4X3N0YXR1cywgbWdtdCwgbGVuLCBlbGVtcywKLQkJCQkJZnJlcSwgYmVhY29uKTsKKwkJCQkJY2hhbm5lbCwgYmVhY29uKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuOwogCi0JLyogd2FzIGp1c3QgdXBkYXRlZCBpbiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlICovCi0JYmVhY29uX3RpbWVzdGFtcCA9IGJzcy0+dGltZXN0YW1wOwotCi0JLyoKLQkgKiBJbiBTVEEgbW9kZSwgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbgotCSAqIGJ5IGJlYWNvbnMgYmVjYXVzZSB0aGV5J3JlIG5vdCBuZWNlc3NhcmlseSBhY2N1cmF0ZSB0aGVyZS4KLQkgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIGJzcy0+bGFzdF9wcm9iZV9yZXNwICYmIGJlYWNvbikgewotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gbWVyZ2UgSUJTUyAqLwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgYmVhY29uICYmCi0JICAgIGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTICYmCi0JICAgIGJzcy0+ZnJlcSA9PSBsb2NhbC0+b3Blcl9jaGFubmVsLT5jZW50ZXJfZnJlcSAmJgotCSAgICBlbGVtcy0+c3NpZF9sZW4gPT0gc2RhdGEtPnUuc3RhLnNzaWRfbGVuICYmCi0JICAgIG1lbWNtcChlbGVtcy0+c3NpZCwgc2RhdGEtPnUuc3RhLnNzaWQsCi0JCQkJc2RhdGEtPnUuc3RhLnNzaWRfbGVuKSA9PSAwKSB7Ci0JCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpIHsKLQkJCS8qIGluIG9yZGVyIGZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWUKLQkJCSAqCi0JCQkgKiBzaW5jZSBtYWN0aW1lIGlzIGRlZmluZWQgYXMgdGhlIHRpbWUgdGhlIGZpcnN0IGRhdGEKLQkJCSAqIHN5bWJvbCBvZiB0aGUgZnJhbWUgaGl0cyB0aGUgUEhZLCBhbmQgdGhlIHRpbWVzdGFtcAotCQkJICogb2YgdGhlIGJlYWNvbiBpcyBkZWZpbmVkIGFzICJ0aGUgdGltZSB0aGF0IHRoZSBkYXRhCi0JCQkgKiBzeW1ib2wgY29udGFpbmluZyB0aGUgZmlyc3QgYml0IG9mIHRoZSB0aW1lc3RhbXAgaXMKLQkJCSAqIHRyYW5zbWl0dGVkIHRvIHRoZSBQSFkgcGx1cyB0aGUgdHJhbnNtaXR0aW5nIFNUQeKAmXMKLQkJCSAqIGRlbGF5cyB0aHJvdWdoIGl0cyBsb2NhbCBQSFkgZnJvbSB0aGUgTUFDLVBIWQotCQkJICogaW50ZXJmYWNlIHRvIGl0cyBpbnRlcmZhY2Ugd2l0aCB0aGUgV00iCi0JCQkgKiAoODAyLjExIDExLjEuMikgLSBlcXVhbHMgdGhlIHRpbWUgdGhpcyBiaXQgYXJyaXZlcyBhdAotCQkJICogdGhlIHJlY2VpdmVyIC0gd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCB0aGUKLQkJCSAqIG9mZnNldCBiZXR3ZWVuIHRoZSB0d28uCi0JCQkgKiBlLmc6IGF0IDEgTUJpdCB0aGF0IG1lYW5zIG1hY3RpbWUgaXMgMTkyIHVzZWMgZWFybGllcgotCQkJICogKD0yNCBieXRlcyAqIDggdXNlY3MvYnl0ZSkgdGhhbiB0aGUgYmVhY29uIHRpbWVzdGFtcC4KLQkJCSAqLwotCQkJaW50IHJhdGU7Ci0JCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgewotCQkJCXJhdGUgPSA2NTsgLyogVE9ETzogSFQgcmF0ZXMgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJcmF0ZSA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF0tPgotCQkJCQliaXRyYXRlc1tyeF9zdGF0dXMtPnJhdGVfaWR4XS5iaXRyYXRlOwotCQkJfQotCQkJcnhfdGltZXN0YW1wID0gcnhfc3RhdHVzLT5tYWN0aW1lICsgKDI0ICogOCAqIDEwIC8gcmF0ZSk7Ci0JCX0gZWxzZSBpZiAobG9jYWwgJiYgbG9jYWwtPm9wcyAmJiBsb2NhbC0+b3BzLT5nZXRfdHNmKQotCQkJLyogc2Vjb25kIGJlc3Qgb3B0aW9uOiBnZXQgY3VycmVudCBUU0YgKi8KLQkJCXJ4X3RpbWVzdGFtcCA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQkJZWxzZQotCQkJLyogY2FuJ3QgbWVyZ2Ugd2l0aG91dCBrbm93aW5nIHRoZSBUU0YgKi8KLQkJCXJ4X3RpbWVzdGFtcCA9IC0xTExVOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJSWCBiZWFjb24gU0E9JXBNIEJTU0lEPSIKLQkJICAgICAgICIlcE0gVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCBAJWx1XG4iLAotCQkgICAgICAgbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyeF90aW1lc3RhbXAsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShyeF90aW1lc3RhbXAgLSBiZWFjb25fdGltZXN0YW1wKSwKLQkJICAgICAgIGppZmZpZXMpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JCWlmIChiZWFjb25fdGltZXN0YW1wID4gcnhfdGltZXN0YW1wKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIFRTRiBoaWdoZXIgdGhhbiAiCi0JCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlcE1cbiIsCi0JCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+YnNzaWQpOwotI2VuZGlmCi0JCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgJnNkYXRhLT51LnN0YSwgYnNzKTsKLQkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0JCX0KKwlpZiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtICYmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW1fbGVuID09IDMpICYmCisJICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pID09IDApKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CisJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOworCQlpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHNkYXRhLCBzd19lbGVtLCBic3MpOwogCX0KIAogCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwpAQCAtMTY3Niw5ICsxNDc3LDExIEBACiAJCQkJCSBzaXplX3QgbGVuLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXNpemVfdCBiYXNlbGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCkBAIC0xNjk0LDI1ICsxNDk3LDI3IEBACiAKIAkvKiBkaXJlY3QgcHJvYmUgbWF5IGJlIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uIGZsb3cgKi8KIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSwKLQkJCQkJCQkmaWZzdGEtPnJlcXVlc3QpKSB7CisJCQkgICAgICAgJmlmbWdkLT5yZXF1ZXN0KSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgZGlyZWN0IHByb2JlIHJlc3BvbmRlZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwogCX0KLX0KIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpCisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzaXplX3QgYmFzZWxlbjsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAl1MzIgY2hhbmdlZCA9IDA7Ci0JYm9vbCBlcnBfdmFsaWQ7CisJYm9vbCBlcnBfdmFsaWQsIGRpcmVjdGVkX3RpbTsKIAl1OCBlcnBfdmFsdWUgPSAwOwogCiAJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KQEAgLTE3MjYsMTUgKzE1MzEsNDMgQEAKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKKwkgICAgbWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJaWYgKHJ4X3N0YXR1cy0+ZnJlcSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCSBlbGVtcy53bW1fcGFyYW1fbGVuKTsKIAorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spIHsKKwkJZGlyZWN0ZWRfdGltID0gaWVlZTgwMjExX2NoZWNrX3RpbSgmZWxlbXMsIGlmbWdkLT5haWQpOworCisJCWlmIChkaXJlY3RlZF90aW0pIHsKKwkJCWlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCQkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCQkgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCQkJfSBlbHNlIHsKKwkJCQlsb2NhbC0+cHNwb2xsaW5nID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICogSGVyZSBpcyBhc3N1bWVkIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlCisJCQkJICogYWJsZSB0byBzZW5kIHBzLXBvbGwgZnJhbWUgYW5kIHJlY2VpdmUgYQorCQkJCSAqIHJlc3BvbnNlIGV2ZW4gdGhvdWdoIHBvd2VyIHNhdmUgbW9kZSBpcworCQkJCSAqIGVuYWJsZWQsIGJ1dCBzb21lIGRyaXZlcnMgbWlnaHQgcmVxdWlyZQorCQkJCSAqIHRvIGRpc2FibGUgcG93ZXIgc2F2ZSBoZXJlLiBUaGlzIG5lZWRzCisJCQkJICogdG8gYmUgaW52ZXN0aWdhdGVkLgorCQkJCSAqLworCQkJCWllZWU4MDIxMV9zZW5kX3BzcG9sbChsb2NhbCwgc2RhdGEpOworCQkJfQorCQl9CisJfQogCiAJaWYgKGVsZW1zLmVycF9pbmZvICYmIGVsZW1zLmVycF9pbmZvX2xlbiA+PSAxKSB7CiAJCWVycF92YWxpZCA9IHRydWU7CkBAIC0xNzQ3LDE0ICsxNTgwLDE1IEBACiAJCQllcnBfdmFsaWQsIGVycF92YWx1ZSk7CiAKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtKSB7CisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAkJdTE2IGFwX2h0X2NhcF9mbGFnczsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJCWlmICghc3RhKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKQEAgLTE3NzgsOTIgKzE2MTIsMjggQEAKIAkJICogZm9yIHRoZSBCU1NJRCB3ZSBhcmUgYXNzb2NpYXRlZCB0byAqLwogCQlyZWd1bGF0b3J5X2hpbnRfMTFkKGxvY2FsLT5ody53aXBoeSwKIAkJCWVsZW1zLmNvdW50cnlfZWxlbSwgZWxlbXMuY291bnRyeV9lbGVtX2xlbik7CisKKwkJLyogVE9ETzogSUJTUyBhbHNvIG5lZWRzIHRoaXMgKi8KKwkJaWYgKGVsZW1zLnB3cl9jb25zdHJfZWxlbSkKKwkJCWllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzZGF0YSwKKwkJCQlsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuY2FwYWJfaW5mbyksCisJCQkJZWxlbXMucHdyX2NvbnN0cl9lbGVtLAorCQkJCWVsZW1zLnB3cl9jb25zdHJfZWxlbV9sZW4pOwogCX0KIAogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQlzaXplX3QgbGVuLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoraWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCB0eF9sYXN0X2JlYWNvbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKLQl1OCAqcG9zLCAqZW5kOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZzdGEtPnByb2JlX3Jlc3ApCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKLQkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOwotCWVsc2UKLQkJdHhfbGFzdF9iZWFjb24gPSAxOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgotCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKLQkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JaWYgKCF0eF9sYXN0X2JlYWNvbikKLQkJcmV0dXJuOwotCi0JaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuOwotCi0JZW5kID0gKCh1OCAqKSBtZ210KSArIGxlbjsKLQlwb3MgPSBtZ210LT51LnByb2JlX3JlcS52YXJpYWJsZTsKLQlpZiAocG9zWzBdICE9IFdMQU5fRUlEX1NTSUQgfHwKLQkgICAgcG9zICsgMiArIHBvc1sxXSA+IGVuZCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKLQkJICAgICAgICJmcm9tICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCWlmIChwb3NbMV0gIT0gMCAmJgotCSAgICAocG9zWzFdICE9IGlmc3RhLT5zc2lkX2xlbiB8fAotCSAgICAgbWVtY21wKHBvcyArIDIsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pICE9IDApKSB7Ci0JCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLwotCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXNwLT5kYSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJZ290byBmYWlsOwotCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CkBAIC0xODc4LDExMyArMTY0OCw2OCBAQAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCXNrYl9xdWV1ZV90YWlsKCZpZnN0YS0+c2tiX3F1ZXVlLCBza2IpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JCXJldHVybjsKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKLSBmYWlsOgotCWtmcmVlX3NrYihza2IpOworCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KIAlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCSAgICByeF9zdGF0dXMpOwotCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIDApOworCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLCAxKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQlpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJYnJlYWs7CiAJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBhY3RpdmUgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCi0JCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAotCQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCQlhY3RpdmUrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gYWN0aXZlOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKLQlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gYWN0aXZlIElCU1MgU1RBcyAtIHRyeWluZyB0byBzY2FuIGZvciBvdGhlciAiCi0JICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCiAJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgewpAQCAtMTk5MiwyOTggKzE3MTcsMTEyIEBACiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwogCX0KIAotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsgLyogYWxsb3cgYW55IFdNTSB1cGRhdGUgKi8KKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCiAKIAotCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7CisJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19GVCkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0ZUOwogCWVsc2UKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47Ci0JaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKLQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JaWZzdGEtPmF1dGhfdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gLTE7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOworCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2NfdHJpZXMgPSAwOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIH0KIAotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgIGNvbnN0IGNoYXIgKnNzaWQsIGludCBzc2lkX2xlbikKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpbnQgdG1wLCBoaWRkZW5fc3NpZDsKLQotCWlmIChzc2lkX2xlbiA9PSBpZnN0YS0+c3NpZF9sZW4gJiYKLQkgICAgIW1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKQotCQlyZXR1cm4gMTsKLQotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQotCQlyZXR1cm4gMDsKLQotCWhpZGRlbl9zc2lkID0gMTsKLQl0bXAgPSBzc2lkX2xlbjsKLQl3aGlsZSAodG1wLS0pIHsKLQkJaWYgKHNzaWRbdG1wXSAhPSAnXDAnKSB7Ci0JCQloaWRkZW5fc3NpZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChoaWRkZW5fc3NpZCAmJiAoaWZzdGEtPnNzaWRfbGVuID09IHNzaWRfbGVuIHx8IHNzaWRfbGVuID09IDApKQotCQlyZXR1cm4gMTsKLQotCWlmIChzc2lkX2xlbiA9PSAxICYmIHNzaWRbMF0gPT0gJyAnKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1OCBic3NpZFtFVEhfQUxFTl0sICpwb3M7Ci0JaW50IGk7Ci0JaW50IHJldDsKKwl1OCAqYnNzaWQgPSBpZm1nZC0+YnNzaWQsICpzc2lkID0gaWZtZ2QtPnNzaWQ7CisJdTggc3NpZF9sZW4gPSBpZm1nZC0+c3NpZF9sZW47CisJdTE2IGNhcGFfbWFzayA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJdTE2IGNhcGFfdmFsID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+b3Blcl9jaGFubmVsOwogCi0jaWYgMAotCS8qIEVhc2llciB0ZXN0aW5nLCB1c2UgZml4ZWQgQlNTSUQuICovCi0JbWVtc2V0KGJzc2lkLCAweGZlLCBFVEhfQUxFTik7Ci0jZWxzZQotCS8qIEdlbmVyYXRlIHJhbmRvbSwgbm90IGJyb2FkY2FzdCwgbG9jYWxseSBhZG1pbmlzdGVyZWQgQlNTSUQuIE1peCBpbgotCSAqIG93biBNQUMgYWRkcmVzcyB0byBtYWtlIHN1cmUgdGhhdCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyCi0JICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZ2V0IGRpZmZlcmVudCBCU1NJRC4gKi8KLQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7Ci0JZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCi0JCWJzc2lkW2ldIF49IHNkYXRhLT5kZXYtPmRldl9hZGRyW2ldOwotCWJzc2lkWzBdICY9IH4weDAxOwotCWJzc2lkWzBdIHw9IDB4MDI7Ci0jZW5kaWYKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7Ci0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChsb2NhbCwgYnNzaWQsCi0JCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgc2RhdGEtPnUuc3RhLnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkX2xlbik7Ci0JaWYgKCFic3MpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnNzLT5iYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYnNzLT5iYW5kXTsKLQotCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCi0JCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDA7Ci0JYnNzLT5iZWFjb25faW50ID0gbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludDsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKLQotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCWJzcy0+Y2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQllbHNlCi0JCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKLQotCWJzcy0+c3VwcF9yYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKLQlwb3MgPSBic3MtPnN1cHBfcmF0ZXM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgJiYKKwkgICAgaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCB8CisJCQkgICAgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CisJCQkgICAgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSkgeworCQljYXBhX21hc2sgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCQljYXBhX3ZhbCB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKIAl9CiAKLQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgaWZzdGEsIGJzcyk7Ci0JaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JcmV0dXJuIHJldDsKLX0KKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKQorCQljaGFuID0gTlVMTDsKIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQorCQlic3NpZCA9IE5VTEw7CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0JaW50IGZvdW5kID0gMDsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JaW50IGFjdGl2ZV9pYnNzOwotCi0JaWYgKGlmc3RhLT5zc2lkX2xlbiA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gYnNzLT5zc2lkX2xlbiB8fAotCQkgICAgbWVtY21wKGlmc3RhLT5zc2lkLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pICE9IDAKLQkJICAgIHx8ICEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQotCQkJY29udGludWU7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIGJzc2lkPSVwTSBmb3VuZFxuIiwgYnNzLT5ic3NpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQkJbWVtY3B5KGJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCWZvdW5kID0gMTsKLQkJaWYgKGFjdGl2ZV9pYnNzIHx8IG1lbWNtcChic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJCWJyZWFrOworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpIHsKKwkJc3NpZCA9IE5VTEw7CisJCXNzaWRfbGVuID0gMDsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCWlmIChmb3VuZCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIHN0YV9maW5kX2lic3M6IHNlbGVjdGVkICVwTSBjdXJyZW50ICIKLQkJICAgICAgICIlcE1cbiIsIGJzc2lkLCBpZnN0YS0+YnNzaWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisJYnNzID0gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgY2hhbiwKKwkJCQkgICAgICAgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAorCQkJCSAgICAgICBjYXBhX21hc2ssIGNhcGFfdmFsKTsKIAotCWlmIChmb3VuZCAmJiBtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICE9IDApIHsKLQkJaW50IHJldDsKLQkJaW50IHNlYXJjaF9mcmVxOwotCi0JCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpCi0JCQlzZWFyY2hfZnJlcSA9IGJzcy0+ZnJlcTsKKwlpZiAoYnNzKSB7CisJCWllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgYnNzLT5jYnNzLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCkpCisJCQlpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBic3MtPnNzaWQsCisJCQkJCSAgICAgICBic3MtPnNzaWRfbGVuKTsKKwkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsIGJzcy0+Y2Jzcy5ic3NpZCk7CisJCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIGJzcy0+c3VwcF9yYXRlc19sZW4sCisJCQkJCQkgICAgYnNzLT5zdXBwX3JhdGVzKTsKKwkJaWYgKHNkYXRhLT51Lm1nZC5tZnAgPT0gSUVFRTgwMjExX01GUF9SRVFVSVJFRCkKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOwogCQllbHNlCi0JCQlzZWFyY2hfZnJlcSA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwotCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBic3NpZCwgc2VhcmNoX2ZyZXEsCi0JCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCQlpZiAoIWJzcykKLQkJCWdvdG8gZG9udF9qb2luOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VsZWN0ZWQgSUJTUyBCU1NJRCAlcE0iCi0JCSAgICAgICAiIGJhc2VkIG9uIGNvbmZpZ3VyZWQgU1NJRFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKLQkJcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGlmc3RhLCBic3MpOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLWRvbnRfam9pbjoKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0KLQkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQgJiYKLQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSB7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKLQkJCQkgICAgICBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7Ci0JfSBlbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkICsKLQkJCSAgICAgIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyaWdnZXIgbmV3IHNjYW4gdG8gZmluZCBhbiBJQlNTIHRvICIKLQkJICAgICAgICJqb2luXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLAotCQkJCQkgICAgICBpZnN0YS0+c3NpZF9sZW4pOwotCX0gZWxzZSBpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCkgewotCQlpbnQgaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTDsKLQotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZnN0YS0+aWJzc19qb2luX3JlcSArCi0JCQkgICAgICAgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUKSkgewotCQkJaWYgKChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTKSAmJgotCQkJICAgICghKGxvY2FsLT5vcGVyX2NoYW5uZWwtPmZsYWdzICYKLQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUykpKQotCQkJCXJldHVybiBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUykgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUJTUyBub3QgYWxsb3dlZCBvbiIKLQkJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQkJCX0KLQotCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCi0JCQkgKiBzY2FubmluZy4gKi8KLQkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKLQkJfQotCi0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBpbnRlcnZhbCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLCAqc2VsZWN0ZWQgPSBOVUxMOwotCWludCB0b3BfcnNzaSA9IDAsIGZyZXE7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JZnJlcSA9IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmICghKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMIHwKLQkJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAotCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSkgJiYKLQkJICAgICghIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgXgotCQkgICAgICEhc2RhdGEtPmRlZmF1bHRfa2V5KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkgJiYKLQkJICAgIGJzcy0+ZnJlcSAhPSBmcmVxKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkgJiYKLQkJICAgIG1lbWNtcChic3MtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgJiYKLQkJICAgICFpZWVlODAyMTFfc3RhX21hdGNoX3NzaWQoaWZzdGEsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXNlbGVjdGVkIHx8IHRvcF9yc3NpIDwgYnNzLT5zaWduYWwpIHsKLQkJCXNlbGVjdGVkID0gYnNzOwotCQkJdG9wX3Jzc2kgPSBic3MtPnNpZ25hbDsKLQkJfQotCX0KLQlpZiAoc2VsZWN0ZWQpCi0JCWF0b21pY19pbmMoJnNlbGVjdGVkLT51c2Vycyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0KLQlpZiAoc2VsZWN0ZWQpIHsKLQkJaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBzZWxlY3RlZC0+ZnJlcSk7Ci0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQpKQotCQkJaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgc2VsZWN0ZWQtPnNzaWQsCi0JCQkJCSAgICAgICBzZWxlY3RlZC0+c3NpZF9sZW4pOwotCQlpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgc2VsZWN0ZWQtPmJzc2lkKTsKLQkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgc2VsZWN0ZWQpOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOwogCiAJCS8qIFNlbmQgb3V0IGRpcmVjdCBwcm9iZSBpZiBubyBwcm9iZSByZXNwIHdhcyByZWNlaXZlZCBvcgogCQkgKiB0aGUgb25lIHdlIGhhdmUgaXMgb3V0ZGF0ZWQKIAkJICovCi0JCWlmICghc2VsZWN0ZWQtPmxhc3RfcHJvYmVfcmVzcCB8fAotCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzZWxlY3RlZC0+bGFzdF9wcm9iZV9yZXNwCisJCWlmICghYnNzLT5sYXN0X3Byb2JlX3Jlc3AgfHwKKwkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3Byb2JlX3Jlc3AKIAkJCQkJKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwogCQllbHNlCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKIAotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgc2VsZWN0ZWQpOwotCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCWlmIChpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA8IElFRUU4MDIxMV9BU1NPQ19TQ0FOU19NQVhfVFJJRVMpIHsKLQkJCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzKys7Ci0JCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKQotCQkJCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBOVUxMLCAwKTsKKwkJaWYgKGlmbWdkLT5hc3NvY19zY2FuX3RyaWVzIDwgSUVFRTgwMjExX0FTU09DX1NDQU5TX01BWF9UUklFUykgeworCQkJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMrKzsKKwkJCS8qIFhYWCBtYXliZSByYWN5PyAqLworCQkJaWYgKGxvY2FsLT5zY2FuX3JlcSkKKwkJCQlyZXR1cm4gLTE7CisJCQltZW1jcHkobG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLAorCQkJICAgICAgIGlmbWdkLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpCisJCQkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IDA7CiAJCQllbHNlCi0JCQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOwotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKLQkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKLQkJfSBlbHNlCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCQkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKKworCQkJaWYgKGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCAmbG9jYWwtPmludF9zY2FuX3JlcSkpCisJCQkJaWVlZTgwMjExX3NjYW5fZmFpbGVkKGxvY2FsKTsKKworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKKwkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKKwkJfSBlbHNlIHsKKwkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJfQogCX0KIAlyZXR1cm4gLTE7CiB9CkBAIC0yMjkyLDkgKzE4MzEsOSBAQAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LnN0YS53b3JrKTsKKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUubWdkLndvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCkBAIC0yMzAzLDYxICsxODQyLDYwIEBACiAJaWYgKGxvY2FsLT5zd19zY2FubmluZyB8fCBsb2NhbC0+aHdfc2Nhbm5pbmcpCiAJCXJldHVybjsKIAotCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZnN0YS0+c2tiX3F1ZXVlKSkpCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZtZ2QtPnNrYl9xdWV1ZSkpKQogCQlpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFICYmCi0JICAgIGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCi0JICAgIGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFICYmCi0JICAgIHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZzdGEtPnJlcXVlc3QpKSB7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBpZnN0YS0+c2Nhbl9zc2lkLAotCQkJCSAgICAgaWZzdGEtPnNjYW5fc3NpZF9sZW4pOworCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSAmJgorCSAgICBpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgorCSAgICBpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSAmJgorCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KSkgeworCQkvKgorCQkgKiBUaGUgY2FsbCB0byBpZWVlODAyMTFfc3RhcnRfc2NhbiBjYW4gZmFpbCBidXQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbgorCQkgKiAod2hpY2ggcXVldWVkIGllZWU4MDIxMV9zdGFfd29yaykgZGlkIG5vdCByZXR1cm4gYW4gZXJyb3IuIFRodXMsIGNhbGwKKwkJICogaWVlZTgwMjExX3NjYW5fZmFpbGVkIGhlcmUgaWYgaWVlZTgwMjExX3N0YXJ0X3NjYW4gZmFpbHMgaW4gb3JkZXIgdG8KKwkJICogbm90aWZ5IHRoZSBzY2FuIHJlcXVlc3Rlci4KKwkJICovCisJCWlmIChpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgbG9jYWwtPnNjYW5fcmVxKSkKKwkJCWllZWU4MDIxMV9zY2FuX2ZhaWxlZChsb2NhbCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZnN0YS0+cmVxdWVzdCkpIHsKLQkJaWYgKGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc2RhdGEsIGlmc3RhKSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCkpIHsKKwkJaWYgKGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc2RhdGEpKQogCQkJcmV0dXJuOwotCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpOwotCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCkpCisJCWNsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCk7CisJfSBlbHNlIGlmICghdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmbWdkLT5yZXF1ZXN0KSkKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChpZnN0YS0+c3RhdGUpIHsKKwlzd2l0Y2ggKGlmbWdkLT5zdGF0ZSkgewogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOgogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU6Ci0JCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURToKLQkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSwgaWZzdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDoKLQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQ6Ci0JCWllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCWJyZWFrOwogCX0KIAotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSwgaWZzdGEpKSB7CisJaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByaXZhY3kgY29uZmlndXJhdGlvbiBtaXNtYXRjaCBhbmQgIgogCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBkaXNhc3NvY2lhdGVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwogCi0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgdHJ1ZSwKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1VOU1BFQ0lGSUVEKTsKIAl9CiB9CkBAIC0yMzY2LDIwOCArMTkwNCwxNjEgQEAKIHsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsCi0JCQkgICAmc2RhdGEtPnUuc3RhLndvcmspOworCQkJICAgJnNkYXRhLT51Lm1nZC53b3JrKTsKIH0KIAogLyogaW50ZXJmYWNlIHNldHVwICovCiB2b2lkIGllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JSU5JVF9XT1JLKCZpZnN0YS0+d29yaywgaWVlZTgwMjExX3N0YV93b3JrKTsKLQlzZXR1cF90aW1lcigmaWZzdGEtPnRpbWVyLCBpZWVlODAyMTFfc3RhX3RpbWVyLAorCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlJTklUX1dPUksoJmlmbWdkLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOworCUlOSVRfV09SSygmaWZtZ2QtPmNoc3dpdGNoX3dvcmssIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKTsKKwlJTklUX1dPUksoJmlmbWdkLT5iZWFjb25fbG9zc193b3JrLCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZzdGEtPnNrYl9xdWV1ZSk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpZm1nZC0+c2tiX3F1ZXVlKTsKIAotCWlmc3RhLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7Ci0JaWZzdGEtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKKwlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCWlmbWdkLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8CiAJCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUyB8CiAJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0JaWYgKGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJnNkYXRhLT5sb2NhbC0+aHcpID49IDQpCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOwotfQotCi0vKgotICogQWRkIGEgbmV3IElCU1Mgc3RhdGlvbiwgd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuLAotICogaW4gSUJTUyBtb2RlLCByZWNlaXZpbmcgYSBmcmFtZSBmcm9tIGEgeWV0LXVua25vd24gc3RhdGlvbiwgaGVuY2UKLSAqIG11c3QgYmUgY2FsbGFibGUgaW4gYXRvbWljIGNvbnRleHQuCi0gKi8KLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLHU4ICphZGRyLCB1NjQgc3VwcF9yYXRlcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0KLQkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKLQkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLwotCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyByb29tIGZvciBhIG5ldyBJQlNTIFNUQSAiCi0JCQkgICAgICAgImVudHJ5ICVwTVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWRkcik7Ci0JCX0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0KLQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCi0Jc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOwotCi0JLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0Jc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAotCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLQlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7Ci0KLQlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHN0YTsKKwlpZiAoc2RhdGEtPmxvY2FsLT5ody5xdWV1ZXMgPj0gNCkKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQ7CiB9CiAKIC8qIGNvbmZpZ3VyYXRpb24gaG9va3MgKi8KLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47CiAKLQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8CisJaWYgKChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgfAogCQkJICAgICBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSkgJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKKwkgICAgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKIAkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSkpIHsKIAotCQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQotCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCisJCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAogCQkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwogCi0JCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpIHx8CisJCSAgICBpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKKwkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKKwkJZWxzZSBpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKQorCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCk7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAl9CiB9CiAKLWludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoraW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7Ci0JCW1lbXNldChpZnN0YS0+c3NpZCwgMCwgc2l6ZW9mKGlmc3RhLT5zc2lkKSk7Ci0JCW1lbWNweShpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKTsKLQkJaWZzdGEtPnNzaWRfbGVuID0gbGVuOwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7Ci0JfQotCi0JaWYgKGxlbikKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CisJaWYgKGlmbWdkLT5zc2lkX2xlbikKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CiAJZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgICEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpKSB7Ci0JCWlmc3RhLT5pYnNzX2pvaW5fcmVxID0gamlmZmllczsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOwotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEsIGlmc3RhKTsKLQl9CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKIAogCXJldHVybiAwOwogfQogCitpbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCisJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKGlmbWdkLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmbWdkLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKKwkJLyoKKwkJICogRG8gbm90IHVzZSByZWFzc29jaWF0aW9uIGlmIFNTSUQgaXMgY2hhbmdlZCAoZGlmZmVyZW50IEVTUykuCisJCSAqLworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7CisJCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Cit9CisKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCW1lbWNweShzc2lkLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkqbGVuID0gaWZzdGEtPnNzaWRfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCW1lbWNweShzc2lkLCBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZtZ2QtPnNzaWRfbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0JaW50IHJlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKKwkJbWVtY3B5KGlmbWdkLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCX0gZWxzZSB7CisJCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKwl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JCXJlcyA9IDA7Ci0JCS8qCi0JCSAqIEhhY2shIFNlZSBhbHNvIGllZWU4MDIxMV9zdGFfc2V0X3NzaWQuCi0JCSAqLwotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKLQkJaWYgKHJlcykgeworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCWlmIChpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZyBuZXcgQlNTSUQgdG8gIgogCQkJICAgICAgICJ0aGUgbG93LWxldmVsIGRyaXZlclxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gcmVzOwogCQl9CiAJfQogCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7Ci0JZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGllZWU4MDIxMV9zdGFfY29tbWl0KHNkYXRhKTsKIH0KIAotaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICppZSwgc2l6ZV90IGxlbikKK2ludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgICBjb25zdCBjaGFyICppZSwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Ja2ZyZWUoaWZzdGEtPmV4dHJhX2llKTsKKwlrZnJlZShpZm1nZC0+ZXh0cmFfaWUpOwogCWlmIChsZW4gPT0gMCkgewotCQlpZnN0YS0+ZXh0cmFfaWUgPSBOVUxMOwotCQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gMDsKKwkJaWZtZ2QtPmV4dHJhX2llID0gTlVMTDsKKwkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlpZnN0YS0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZnN0YS0+ZXh0cmFfaWUpIHsKLQkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJaWZtZ2QtPmV4dHJhX2llID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghaWZtZ2QtPmV4dHJhX2llKSB7CisJCWlmbWdkLT5leHRyYV9pZV9sZW4gPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KGlmc3RhLT5leHRyYV9pZSwgaWUsIGxlbik7Ci0JaWZzdGEtPmV4dHJhX2llX2xlbiA9IGxlbjsKKwltZW1jcHkoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKTsKKwlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCB0cnVlLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7CkBAIC0yNTc1LDEwICsyMDY2LDEwIEBACiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCi0JCXJldHVybiAtMTsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gLUVOT0xJTks7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1ODYsMTUgKzIwNzcsNiBAQAogdm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0KLQlpZiAoc2RhdGEgJiYgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpIHx8Ci0JCSAgICAoIShpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSkKLQkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQogCiAJLyogUmVzdGFydCBTVEEgdGltZXJzICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMjYyMywxMiArMjEwNSwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsCiAJCQkgICAgIGR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCi0JbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAorCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiB9CiAKQEAgLTI2MzgsMyArMjEyMywzNiBAQAogCiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKKwlfX2xlMTYgZmM7CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwb3dlcnNhdmUpCisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BtLmMgYi9uZXQvbWFjODAyMTEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjczMDIzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3BtLmMKQEAgLTAsMCArMSwxNzkgQEAKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgImxlZC5oIgorCitpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKGh3LAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NVU1BFTkQpOworCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworCisJLyogZGlzYWJsZSBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKKworCS8qIFRlYXIgZG93biBhZ2dyZWdhdGlvbiBzZXNzaW9ucyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9TVVNQRU5EKTsKKwkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CisJCX0KKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIHJlbW92ZSBTVEFzICovCisJaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKKworCQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShodywgJnNkYXRhLT52aWYsCisJCQkJU1RBX05PVElGWV9SRU1PVkUsICZzdGEtPnN0YSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJfQorCisJLyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IgJiYKKwkJICAgIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CisJCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CisJCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CisJCQlsb2NhbC0+b3BzLT5yZW1vdmVfaW50ZXJmYWNlKGh3LCAmY29uZik7CisJCX0KKwl9CisKKwkvKiBmbHVzaCBhZ2FpbiwgaW4gY2FzZSBkcml2ZXIgcXVldWVkIHdvcmsgKi8KKwlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisKKwkvKiBzdG9wIGhhcmR3YXJlICovCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7CisJCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIGZhbHNlKTsKKwkJbG9jYWwtPm9wcy0+c3RvcChodyk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzOworCisJLyogcmVzdGFydCBoYXJkd2FyZSAqLworCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgeworCQlyZXMgPSBsb2NhbC0+b3BzLT5zdGFydChodyk7CisKKwkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgaHctPmNvbmYucmFkaW9fZW5hYmxlZCk7CisJfQorCisJLyogYWRkIGludGVyZmFjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiAmJgorCQkgICAgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKKwkJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKKwkJCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwkJCXJlcyA9IGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoaHcsICZjb25mKTsKKwkJfQorCX0KKworCS8qIGFkZCBTVEFzIGJhY2sgKi8KKwlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCQkgICAgIHUuYXApOworCisJCQlsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KGh3LCAmc2RhdGEtPnZpZiwKKwkJCQlTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBDbGVhciBTdXNwZW5kIHN0YXRlIHNvIHRoYXQgQUREQkEgcmVxdWVzdHMgY2FuIGJlIHByb2Nlc3NlZCAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCWNsZWFyX3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1NVU1BFTkQpOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkvKiBhZGQgYmFjayBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CisKKwkvKiBzZXR1cCBSVFMgdGhyZXNob2xkICovCisJaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQorCQlsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZChodywgbG9jYWwtPnJ0c190aHJlc2hvbGQpOworCisJLyogcmVjb25maWd1cmUgaGFyZHdhcmUgKi8KKwlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCB+MCk7CisKKwluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CisKKwkvKiBGaW5hbGx5IGFsc28gcmVjb25maWd1cmUgYWxsIHRoZSBCU1MgaW5mb3JtYXRpb24gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJdTMyIGNoYW5nZWQgPSB+MDsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCS8qIGRpc2FibGUgYmVhY29uIGNoYW5nZSBiaXRzICovCisJCQljaGFuZ2VkICY9IH5JRUVFODAyMTFfSUZDQ19CRUFDT047CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJV0FSTl9PTihpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBjaGFuZ2VkKSk7CisJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgfjApOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgorCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJLyogaWdub3JlIHZpcnR1YWwgKi8KKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQljYXNlIF9fTkw4MDIxMV9JRlRZUEVfQUZURVJfTEFTVDoKKwkJCVdBUk5fT04oMSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oaHcsCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU1VTUEVORCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IDNmYTdhYjIuLjQ2NDFmMDAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtMjE5LDEwICsyMTksMTIgQEAKIAkJaW5mby0+Y29udHJvbC5yYXRlc1tpXS5jb3VudCA9IDE7CiAJfQogCi0JaWYgKHN0YSAmJiBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpCisJaWYgKHN0YSAmJiBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpIHsKIAkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwotCWVsc2UKKwl9IGVsc2UgewogCQlyZWYtPm9wcy0+Z2V0X3JhdGUocmVmLT5wcml2LCBpc3RhLCBwcml2X3N0YSwgdHhyYyk7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR087CisJfQogCiAJLyoKIAkgKiB0cnkgdG8gZW5mb3JjZSB0aGUgbWF4aW11bSByYXRlIHRoZSB1c2VyIHdhbnRlZApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuaCBiL25ldC9tYWM4MDIxMS9yYXRlLmgKaW5kZXggOTI4ZGE2Mi4uMmFiNWFkOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuaAorKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5oCkBAIC00NCw4ICs0NCwxMCBAQAogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gJnN0YS0+c3RhOwogCXZvaWQgKnByaXZfc3RhID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhLCBza2IpOworCWlmIChsaWtlbHkoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfUkNBTEdPKSkKKwkJcmVmLT5vcHMtPnR4X3N0YXR1cyhyZWYtPnByaXYsIHNiYW5kLCBpc3RhLCBwcml2X3N0YSwgc2tiKTsKIH0KIAogCkBAIC02Miw2ICs2NCwxOCBAQAogCXJlZi0+b3BzLT5yYXRlX2luaXQocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwgcHJpdl9zdGEpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gJnN0YS0+c3RhOworCXZvaWQgKnByaXZfc3RhID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKKworCWlmIChyZWYtPm9wcy0+cmF0ZV91cGRhdGUpCisJCXJlZi0+b3BzLT5yYXRlX3VwZGF0ZShyZWYtPnByaXYsIHNiYW5kLCBpc3RhLAorCQkJCSAgICAgIHByaXZfc3RhLCBjaGFuZ2VkKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkICpyYXRlX2NvbnRyb2xfYWxsb2Nfc3RhKHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsCiAJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDcxNzVhZTguLjY0ZWJlNjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC04Niw4ICs4Niw3IEBACiAKIAlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKQogCQlsZW4gKz0gODsKLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQiB8fAotCSAgICBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCiAJCWxlbiArPSAxOwogCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQogCQlsZW4gKz0gMTsKQEAgLTEwMiw3ICsxMDEsNyBAQAogCXJldHVybiBsZW47CiB9CiAKLS8qKgorLyoKICAqIGllZWU4MDIxMV9hZGRfcnhfcmFkaW90YXBfaGVhZGVyIC0gYWRkIHJhZGlvdGFwIGhlYWRlcgogICoKICAqIGFkZCBhIHJhZGlvdGFwIGhlYWRlciBjb250YWluaW5nIGFsbCB0aGUgZmllbGRzIHdoaWNoIHRoZSBoYXJkd2FyZSBwcm92aWRlZC4KQEAgLTE0Myw2ICsxNDIsOCBAQAogCS8qIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyAqLwogCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTKQogCQkqcG9zIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUzsKKwlpZiAoc3RhdHVzLT5mbGFnICYgKFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkMgfCBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQykpCisJCSpwb3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfQkFERkNTOwogCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1NIT1JUUFJFKQogCQkqcG9zIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX1NIT1JUUFJFOwogCXBvcysrOwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCSAqLwogCQkqcG9zID0gMDsKIAl9IGVsc2UgewotCQlydGhkci0+aXRfcHJlc2VudCB8PSAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSk7CisJCXJ0aGRyLT5pdF9wcmVzZW50IHw9IGNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpOwogCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7CiAJfQogCXBvcysrOwpAQCAtMTk5LDIzICsyMDAsMTQgQEAKIAkqcG9zID0gc3RhdHVzLT5hbnRlbm5hOwogCXBvcysrOwogCi0JLyogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCAqLwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCKSB7Ci0JCSpwb3MgPSBzdGF0dXMtPnNpZ25hbDsKLQkJcnRoZHItPml0X3ByZXNlbnQgfD0KLQkJCWNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCk7Ci0JCXBvcysrOwotCX0KLQogCS8qIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRSBpcyBub3QgdXNlZCAqLwogCiAJLyogSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICovCiAJLyogZW5zdXJlIDIgYnl0ZSBhbGlnbm1lbnQgZm9yIHRoZSAyIGJ5dGUgZmllbGQgYXMgcmVxdWlyZWQgKi8KIAlpZiAoKHBvcyAtICh1bnNpZ25lZCBjaGFyICopcnRoZHIpICYgMSkKIAkJcG9zKys7Ci0JLyogRklYTUU6IHdoZW4gcmFkaW90YXAgZ2V0cyBhICdiYWQgUExDUCcgZmxhZyB1c2UgaXQgaGVyZSAqLwotCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19GQUlMRURfRkNTX0NSQyB8IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDKSkKLQkJKihfX2xlMTYgKilwb3MgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFERkNTKTsKKwlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19GQUlMRURfUExDUF9DUkMpCisJCSooX19sZTE2ICopcG9zIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1JYX0JBRFBMQ1ApOwogCXBvcyArPSAyOwogfQogCkBAIC0zNzEsMzkgKzM2Myw1MCBAQAogCXJ4LT5za2ItPnByaW9yaXR5ID0gKHRpZCA+IDcpID8gMCA6IHRpZDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3ZlcmlmeV9pcF9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKKy8qKgorICogRE9DOiBQYWNrZXQgYWxpZ25tZW50CisgKgorICogRHJpdmVycyBhbHdheXMgbmVlZCB0byBwYXNzIHBhY2tldHMgdGhhdCBhcmUgYWxpZ25lZCB0byB0d28tYnl0ZSBib3VuZGFyaWVzCisgKiB0byB0aGUgc3RhY2suCisgKgorICogQWRkaXRpb25hbGx5LCBzaG91bGQsIGlmIHBvc3NpYmxlLCBhbGlnbiB0aGUgcGF5bG9hZCBkYXRhIGluIGEgd2F5IHRoYXQKKyAqIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29udGFpbmVkIElQIGhlYWRlciBpcyBhbGlnbmVkIHRvIGEgZm91ci1ieXRlCisgKiBib3VuZGFyeS4gSW4gdGhlIGNhc2Ugb2YgcmVndWxhciBmcmFtZXMsIHRoaXMgc2ltcGx5IG1lYW5zIGFsaWduaW5nIHRoZQorICogcGF5bG9hZCB0byBhIGZvdXItYnl0ZSBib3VuZGFyeSAoYmVjYXVzZSBlaXRoZXIgdGhlIElQIGhlYWRlciBpcyBkaXJlY3RseQorICogY29udGFpbmVkLCBvciBJVi9SRkMxMDQyIGhlYWRlcnMgdGhhdCBoYXZlIGEgbGVuZ3RoIGRpdmlzaWJsZSBieSBmb3VyIGFyZQorICogaW4gZnJvbnQgb2YgaXQpLgorICoKKyAqIFdpdGggQS1NU0RVIGZyYW1lcywgaG93ZXZlciwgdGhlIHBheWxvYWQgZGF0YSBhZGRyZXNzIG11c3QgeWllbGQgdHdvIG1vZHVsbworICogZm91ciBiZWNhdXNlIHRoZXJlIGFyZSAxNC1ieXRlIDgwMi4zIGhlYWRlcnMgd2l0aGluIHRoZSBBLU1TRFUgZnJhbWVzIHRoYXQKKyAqIHB1c2ggdGhlIElQIGhlYWRlciBmdXJ0aGVyIGJhY2sgdG8gYSBtdWx0aXBsZSBvZiBmb3VyIGFnYWluLiBUaGFua2Z1bGx5LCB0aGUKKyAqIHNwZWNzIHdlcmUgc2FuZSBlbm91Z2ggdGhpcyB0aW1lIGFyb3VuZCB0byByZXF1aXJlIHBhZGRpbmcgZWFjaCBBLU1TRFUKKyAqIHN1YmZyYW1lIHRvIGEgbGVuZ3RoIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyLgorICoKKyAqIFBhZGRpbmcgbGlrZSBBdGhlcm9zIGhhcmR3YXJlIGFkZHMgd2hpY2ggaXMgaW5iZXR3ZWVuIHRoZSA4MDIuMTEgaGVhZGVyIGFuZAorICogdGhlIHBheWxvYWQgaXMgbm90IHN1cHBvcnRlZCwgdGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBtb3ZlIHRoZSA4MDIuMTEKKyAqIGhlYWRlciB0byBiZSBkaXJlY3RseSBpbiBmcm9udCBvZiB0aGUgcGF5bG9hZCBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAlpbnQgaGRybGVuOwogCisjaWZuZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCisJcmV0dXJuOworI2VuZGlmCisKKwlpZiAoV0FSTl9PTkNFKCh1bnNpZ25lZCBsb25nKXJ4LT5za2ItPmRhdGEgJiAxLAorCQkgICAgICAidW5hbGlnbmVkIHBhY2tldCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhKSkKKwkJcmV0dXJuOworCiAJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybjsKIAotCS8qCi0JICogRHJpdmVycyBhcmUgcmVxdWlyZWQgdG8gYWxpZ24gdGhlIHBheWxvYWQgZGF0YSBpbiBhIHdheSB0aGF0Ci0JICogZ3VhcmFudGVlcyB0aGF0IHRoZSBjb250YWluZWQgSVAgaGVhZGVyIGlzIGFsaWduZWQgdG8gYSBmb3VyLQotCSAqIGJ5dGUgYm91bmRhcnkuIEluIHRoZSBjYXNlIG9mIHJlZ3VsYXIgZnJhbWVzLCB0aGlzIHNpbXBseSBtZWFucwotCSAqIGFsaWduaW5nIHRoZSBwYXlsb2FkIHRvIGEgZm91ci1ieXRlIGJvdW5kYXJ5IChiZWNhdXNlIGVpdGhlcgotCSAqIHRoZSBJUCBoZWFkZXIgaXMgZGlyZWN0bHkgY29udGFpbmVkLCBvciBJVi9SRkMxMDQyIGhlYWRlcnMgdGhhdAotCSAqIGhhdmUgYSBsZW5ndGggZGl2aXNpYmxlIGJ5IGZvdXIgYXJlIGluIGZyb250IG9mIGl0LgotCSAqCi0JICogV2l0aCBBLU1TRFUgZnJhbWVzLCBob3dldmVyLCB0aGUgcGF5bG9hZCBkYXRhIGFkZHJlc3MgbXVzdAotCSAqIHlpZWxkIHR3byBtb2R1bG8gZm91ciBiZWNhdXNlIHRoZXJlIGFyZSAxNC1ieXRlIDgwMi4zIGhlYWRlcnMKLQkgKiB3aXRoaW4gdGhlIEEtTVNEVSBmcmFtZXMgdGhhdCBwdXNoIHRoZSBJUCBoZWFkZXIgZnVydGhlciBiYWNrCi0JICogdG8gYSBtdWx0aXBsZSBvZiBmb3VyIGFnYWluLiBUaGFua2Z1bGx5LCB0aGUgc3BlY3Mgd2VyZSBzYW5lCi0JICogZW5vdWdoIHRoaXMgdGltZSBhcm91bmQgdG8gcmVxdWlyZSBwYWRkaW5nIGVhY2ggQS1NU0RVIHN1YmZyYW1lCi0JICogdG8gYSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIGZvdXIuCi0JICoKLQkgKiBQYWRkaW5nIGxpa2UgYXRoZXJvcyBoYXJkd2FyZSBhZGRzIHdoaWNoIGlzIGluYmV0d2VlbiB0aGUgODAyLjExCi0JICogaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIGlzIHJlcXVpcmVkCi0JICogdG8gbW92ZSB0aGUgODAyLjExIGhlYWRlciBmdXJ0aGVyIGJhY2sgaW4gdGhhdCBjYXNlLgotCSAqLwogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpZiAocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0FNU0RVKQogCQloZHJsZW4gKz0gRVRIX0hMRU47Ci0JV0FSTl9PTl9PTkNFKCgodW5zaWduZWQgbG9uZykocngtPnNrYi0+ZGF0YSArIGhkcmxlbikpICYgMyk7Ci0jZW5kaWYKKwlXQVJOX09OQ0UoKCh1bnNpZ25lZCBsb25nKShyeC0+c2tiLT5kYXRhICsgaGRybGVuKSkgJiAzLAorCQkgICJ1bmFsaWduZWQgSVAgcGF5bG9hZCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhICsgaGRybGVuKTsKIH0KIAogCkBAIC00MzUsNiArNDM4LDUyIEBACiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lzX3VuaWNhc3Rfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IDI0IHx8IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9pc19tdWx0aWNhc3Rfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IDI0IHx8ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcik7Cit9CisKKworLyogR2V0IHRoZSBCSVAga2V5IGluZGV4IGZyb20gTU1JRTsgcmV0dXJuIC0xIGlmIHRoaXMgaXMgbm90IGEgQklQIGZyYW1lICovCitzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbW1pZSAqbW1pZTsKKworCWlmIChza2ItPmxlbiA8IDI0ICsgc2l6ZW9mKCptbWllKSB8fAorCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5kYSkpCisJCXJldHVybiAtMTsKKworCWlmICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBoZHIpKQorCQlyZXR1cm4gLTE7IC8qIG5vdCBhIHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lICovCisKKwltbWllID0gKHN0cnVjdCBpZWVlODAyMTFfbW1pZSAqKQorCQkoc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBzaXplb2YoKm1taWUpKTsKKwlpZiAobW1pZS0+ZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9NTUlFIHx8CisJICAgIG1taWUtPmxlbmd0aCAhPSBzaXplb2YoKm1taWUpIC0gMikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KG1taWUtPmtleV9pZCk7Cit9CisKKwogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9yeF9tZXNoX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CkBAIC01NTAsMjEgKzU5OSwyMyBAQAogCWludCBoZHJsZW47CiAJaWVlZTgwMjExX3J4X3Jlc3VsdCByZXN1bHQgPSBSWF9EUk9QX1VOVVNBQkxFOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpzdGFrZXkgPSBOVUxMOworCWludCBtbWllX2tleWlkeCA9IC0xOwogCiAJLyoKIAkgKiBLZXkgc2VsZWN0aW9uIDEwMQogCSAqCi0JICogVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGtleXM6CisJICogVGhlcmUgYXJlIGZvdXIgdHlwZXMgb2Yga2V5czoKIAkgKiAgLSBHVEsgKGdyb3VwIGtleXMpCisJICogIC0gSUdUSyAoZ3JvdXAga2V5cyBmb3IgbWFuYWdlbWVudCBmcmFtZXMpCiAJICogIC0gUFRLIChwYWlyd2lzZSBrZXlzKQogCSAqICAtIFNUSyAoc3RhdGlvbi10by1zdGF0aW9uIHBhaXJ3aXNlIGtleXMpCiAJICoKIAkgKiBXaGVuIHNlbGVjdGluZyBhIGtleSwgd2UgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpY2FzdAogCSAqIChpbmNsdWRpbmcgYnJvYWRjYXN0KSBhbmQgdW5pY2FzdCBmcmFtZXMsIHRoZSBsYXR0ZXIgY2FuIG9ubHkKLQkgKiB1c2UgUFRLcyBhbmQgU1RLcyB3aGlsZSB0aGUgZm9ybWVyIGFsd2F5cyB1c2UgR1RLcy4gVW5sZXNzLCBvZgotCSAqIGNvdXJzZSwgYWN0dWFsIFdFUCBrZXlzICgicHJlLVJTTkEiKSBhcmUgdXNlZCwgdGhlbiB1bmljYXN0Ci0JICogZnJhbWVzIGNhbiBhbHNvIHVzZSBrZXkgaW5kaXplcyBsaWtlIEdUS3MuIEhlbmNlLCBpZiB3ZSBkb24ndAotCSAqIGhhdmUgYSBQVEsvU1RLIHdlIGNoZWNrIHRoZSBrZXkgaW5kZXggZm9yIGEgV0VQIGtleS4KKwkgKiB1c2UgUFRLcyBhbmQgU1RLcyB3aGlsZSB0aGUgZm9ybWVyIGFsd2F5cyB1c2UgR1RLcyBhbmQgSUdUS3MuCisJICogVW5sZXNzLCBvZiBjb3Vyc2UsIGFjdHVhbCBXRVAga2V5cyAoInByZS1SU05BIikgYXJlIHVzZWQsIHRoZW4KKwkgKiB1bmljYXN0IGZyYW1lcyBjYW4gYWxzbyB1c2Uga2V5IGluZGljZXMgbGlrZSBHVEtzLiBIZW5jZSwgaWYgd2UKKwkgKiBkb24ndCBoYXZlIGEgUFRLL1NUSyB3ZSBjaGVjayB0aGUga2V5IGluZGV4IGZvciBhIFdFUCBrZXkuCiAJICoKIAkgKiBOb3RlIHRoYXQgaW4gYSByZWd1bGFyIEJTUywgbXVsdGljYXN0IGZyYW1lcyBhcmUgc2VudCBieSB0aGUKIAkgKiBBUCBvbmx5LCBhc3NvY2lhdGVkIHN0YXRpb25zIHVuaWNhc3QgdGhlIGZyYW1lIHRvIHRoZSBBUCBmaXJzdApAQCAtNTc3LDggKzYyOCwxNCBAQAogCSAqIHBvc3NpYmxlLgogCSAqLwogCi0JaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCQkgICAgcngtPnN0YSA9PSBOVUxMIHx8ICF0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCQltbWllX2tleWlkeCA9IGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYik7CisJCWlmIChtbWllX2tleWlkeCA8IDApCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJfQogCiAJLyoKIAkgKiBObyBwb2ludCBpbiBmaW5kaW5nIGEga2V5IGFuZCBkZWNyeXB0aW5nIGlmIHRoZSBmcmFtZSBpcyBuZWl0aGVyCkBAIC01OTIsNiArNjQ5LDE2IEBACiAKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmIHN0YWtleSkgewogCQlyeC0+a2V5ID0gc3Rha2V5OworCX0gZWxzZSBpZiAobW1pZV9rZXlpZHggPj0gMCkgeworCQkvKiBCcm9hZGNhc3QvbXVsdGljYXN0IHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lIC8gQklQICovCisJCWlmICgocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCQkgICAgKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkKKwkJCXJldHVybiBSWF9DT05USU5VRTsKKworCQlpZiAobW1pZV9rZXlpZHggPCBOVU1fREVGQVVMVF9LRVlTIHx8CisJCSAgICBtbWllX2tleWlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsgLyogdW5leHBlY3RlZCBCSVAga2V5aWR4ICovCisJCXJ4LT5rZXkgPSByY3VfZGVyZWZlcmVuY2UocngtPnNkYXRhLT5rZXlzW21taWVfa2V5aWR4XSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhlIGRldmljZSBkb2Vzbid0IGdpdmUgdXMgdGhlIElWIHNvIHdlIHdvbid0IGJlCkBAIC02NTQsNiArNzIxLDkgQEAKIAljYXNlIEFMR19DQ01QOgogCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChyeCk7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQocngpOworCQlicmVhazsKIAl9CiAKIAkvKiBlaXRoZXIgdGhlIGZyYW1lIGhhcyBiZWVuIGRlY3J5cHRlZCBvciB3aWxsIGJlIGRyb3BwZWQgKi8KQEAgLTY2Miw2ICs3MzIsMzkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQoraWVlZTgwMjExX3J4X2hfY2hlY2tfbW9yZV9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJbG9jYWwgPSByeC0+bG9jYWw7CisJc2tiID0gcngtPnNrYjsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKCFsb2NhbC0+cHNwb2xsaW5nKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9oYXNfZnJvbWRzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCS8qIHRoaXMgaXMgbm90IGZyb20gQVAgKi8KKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWRhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkvKiBBUCBoYXMgbm8gbW9yZSBmcmFtZXMgYnVmZmVyZWQgZm9yIHVzICovCisJCWxvY2FsLT5wc3BvbGxpbmcgPSBmYWxzZTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCX0KKworCS8qIG1vcmUgZGF0YSBiaXQgaXMgc2V0LCBsZXQncyByZXF1ZXN0IGEgbmV3IGZyYW1lIGZyb20gdGhlIEFQICovCisJaWVlZTgwMjExX3NlbmRfcHNwb2xsKGxvY2FsLCByeC0+c2RhdGEpOworCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQorCiBzdGF0aWMgdm9pZCBhcF9zdGFfcHNfc3RhcnQoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwpAQCAtNzM2LDcgKzgzOSw3IEBACiAJaWYgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJdTggKmJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHJ4LT5za2ItPmxlbiwKIAkJCQkJCU5MODAyMTFfSUZUWVBFX0FESE9DKTsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgcngtPnNkYXRhLT51LnN0YS5ic3NpZCkgPT0gMCkKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgcngtPnNkYXRhLT51Lmlic3MuYnNzaWQpID09IDApCiAJCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0gZWxzZQogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKQEAgLTc0NywxMiArODUwLDE5IEBACiAJCSAqIE1lc2ggYmVhY29ucyB3aWxsIHVwZGF0ZSBsYXN0X3J4IHdoZW4gaWYgdGhleSBhcmUgZm91bmQgdG8KIAkJICogbWF0Y2ggdGhlIGN1cnJlbnQgbG9jYWwgY29uZmlndXJhdGlvbiB3aGVuIHByb2Nlc3NlZC4KIAkJICovCi0JCXN0YS0+bGFzdF9yeCA9IGppZmZpZXM7CisJCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJcngtPnNkYXRhLT51Lm1nZC5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisJCX0gZWxzZQorCQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAl9CiAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKKwlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlpZWVlODAyMTFfc3RhX3J4X25vdGlmeShyeC0+c2RhdGEsIGhkcik7CisKIAlzdGEtPnJ4X2ZyYWdtZW50cysrOwogCXN0YS0+cnhfYnl0ZXMgKz0gcngtPnNrYi0+bGVuOwogCXN0YS0+bGFzdF9zaWduYWwgPSByeC0+c3RhdHVzLT5zaWduYWw7CkBAIC0xMTAxLDYgKzEyMTEsMTUgQEAKIAkvKiBEcm9wIHVuZW5jcnlwdGVkIGZyYW1lcyBpZiBrZXkgaXMgc2V0LiAqLwogCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpICYmCiAJCSAgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgJiYKKwkJICAgICAoIWllZWU4MDIxMV9pc19tZ210KGZjKSB8fAorCQkgICAgICAoaWVlZTgwMjExX2lzX3VuaWNhc3Rfcm9idXN0X21nbXRfZnJhbWUocngtPnNrYikgJiYKKwkJICAgICAgIHJ4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSkpICYmCisJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCisJCXJldHVybiAtRUFDQ0VTOworCS8qIEJJUCBkb2VzIG5vdCB1c2UgUHJvdGVjdGVkIGZpZWxkLCBzbyBuZWVkIHRvIGNoZWNrIE1NSUUgKi8KKwlpZiAodW5saWtlbHkocngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApICYmCisJCSAgICAgaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgorCQkgICAgIGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYikgPCAwICYmCiAJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCkBAIC0xMTM4LDEyICsxMjU3LDEyIEBACiAKIAlzd2l0Y2ggKGhkci0+ZnJhbWVfY29udHJvbCAmCiAJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk6CiAJCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQogCQkJcmV0dXJuIC0xOwpAQCAtMTE1NywxMyArMTI3NiwxMyBAQAogCQkJfQogCQl9CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CiAJCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZHN0KSAmJgogCQkgICAgICFjb21wYXJlX2V0aGVyX2FkZHIoc3JjLCBkZXYtPmRldl9hZGRyKSkpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNigwKToKKwljYXNlIGNwdV90b19sZTE2KDApOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKQEAgLTEyNjcsMTAgKzEzODYsMzcgQEAKIAl9CiAKIAlpZiAoc2tiKSB7Ci0JCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7Ci0JCW5ldGlmX3J4KHNrYik7CisJCWludCBhbGlnbiBfX21heWJlX3VudXNlZDsKKworI2lmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQpIHx8ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQorCQkvKgorCQkgKiAnYWxpZ24nIHdpbGwgb25seSB0YWtlIHRoZSB2YWx1ZXMgMCBvciAyIGhlcmUKKwkJICogc2luY2UgYWxsIGZyYW1lcyBhcmUgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZAorCQkgKiB0byAyLWJ5dGUgYm91bmRhcmllcyB3aGVuIGJlaW5nIHBhc3NlZCB0bworCQkgKiBtYWM4MDIxMS4gVGhhdCBhbHNvIGV4cGxhaW5zIHRoZSBfX3NrYl9wdXNoKCkKKwkJICogYmVsb3cuCisJCSAqLworCQlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDQ7CisJCWlmIChhbGlnbikgeworCQkJaWYgKFdBUk5fT04oc2tiX2hlYWRyb29tKHNrYikgPCAzKSkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQl1OCAqZGF0YSA9IHNrYi0+ZGF0YTsKKwkJCQlzaXplX3QgbGVuID0gc2tiLT5sZW47CisJCQkJdTggKm5ldyA9IF9fc2tiX3B1c2goc2tiLCBhbGlnbik7CisJCQkJbWVtbW92ZShuZXcsIGRhdGEsIGxlbik7CisJCQkJX19za2JfdHJpbShza2IsIGxlbik7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCWlmIChza2IpIHsKKwkJCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0KIAl9CiAKIAlpZiAoeG1pdF9za2IpIHsKQEAgLTEzMzksMTQgKzE0ODUsMjAgQEAKIAkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQogCQkJZnJhbWUgPSBza2I7CiAJCWVsc2UgewotCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkJCSAgICAgIHN1YmZyYW1lX2xlbik7CisJCQkvKgorCQkJICogQWxsb2NhdGUgYW5kIHJlc2VydmUgdHdvIGJ5dGVzIG1vcmUgZm9yIHBheWxvYWQKKwkJCSAqIGFsaWdubWVudCBzaW5jZSBzaXplb2Yoc3RydWN0IGV0aGhkcikgaXMgMTQuCisJCQkgKi8KKwkJCWZyYW1lID0gZGV2X2FsbG9jX3NrYigKKwkJCQlBTElHTihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sIDQpICsKKwkJCQlzdWJmcmFtZV9sZW4gKyAyKTsKIAogCQkJaWYgKGZyYW1lID09IE5VTEwpCiAJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKLQkJCXNrYl9yZXNlcnZlKGZyYW1lLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCQkJc2tiX3Jlc2VydmUoZnJhbWUsCisJCQkJICAgIEFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKIAkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAogCQkJCW50b2hzKGxlbikpOwogCkBAIC0xNTI5LDExICsxNjgxLDkgQEAKIAkJc3RhcnRfc2VxX251bSA9IGxlMTZfdG9fY3B1KGJhci0+c3RhcnRfc2VxX251bSkgPj4gNDsKIAogCQkvKiByZXNldCBzZXNzaW9uIHRpbWVyICovCi0JCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyAodGlkX2FnZ19yeC0+dGltZW91dCAvIDEwMDApICogSFo7Ci0JCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsIGV4cGlyZXMpOwotCQl9CisJCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KQorCQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAorCQkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCiAJCS8qIG1hbmFnZSByZW9yZGVyaW5nIGJ1ZmZlciBhY2NvcmRpbmcgdG8gcmVxdWVzdGVkICovCiAJCS8qIHNlcXVlbmNlIG51bWJlciAqLwpAQCAtMTU0NywxMiArMTY5Nyw2NCBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgIT0gMCkgeworCQkvKiBOb3QgdG8gb3duIHVuaWNhc3QgYWRkcmVzcyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7CisJCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7CisJCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChsZW4gPCAyNCArIDEgKyBzaXplb2YocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpIHsKKwkJLyogVG9vIHNob3J0IFNBIFF1ZXJ5IHJlcXVlc3QgZnJhbWUgKi8KKwkJcmV0dXJuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpyZXNwKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQocmVzcCwgMCwgMjQpOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKwltZW1jcHkocmVzcC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXNwLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKTsKKwlyZXNwLT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfU0FfUVVFUlk7CisJcmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS5hY3Rpb24gPSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRTsKKwltZW1jcHkocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgbWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKK30KKwogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKQEAgLTE1NjQsMTIgKzE3NjYsMjYgQEAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHJ4LCBtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCS8qIGFsbCBjYXRlZ29yaWVzIHdlIGN1cnJlbnRseSBoYW5kbGUgaGF2ZSBhY3Rpb25fY29kZSAqLwogCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsgMSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpIHsKIAljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKKwkJLyoKKwkJICogVGhlIGFnZ3JlZ2F0aW9uIGNvZGUgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorCQkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmc7CisJCSAqIElCU1MgY291bGQgd29yayBpbiB0aGUgY29kZSBidXQgaXNuJ3Qgc3VwcG9ydGVkCisJCSAqIGJ5IGRyaXZlcnMgb3IgdGhlIHN0YW5kYXJkLgorCQkgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKQEAgLTE1OTQsNiArMTgxMCwxMCBAQAogCWNhc2UgV0xBTl9DQVRFR09SWV9TUEVDVFJVTV9NR01UOgogCQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX1NQQ1RfTVNSX1JFUToKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCkBAIC0xNjAxLDYgKzE4MjEsNDMgQEAKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHNkYXRhLCBtZ210LCBsZW4pOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9DSExfU1dJVENIOgorCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKKwkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaCkpKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQsCisJCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZCwKKwkJCQkJICAgc2RhdGEtPnUubWdkLnNzaWRfbGVuKTsKKwkJCWlmICghYnNzKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCisJCQkJICAgICAmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLCBic3MpOworCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0FURUdPUllfU0FfUVVFUlk6CisJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCisJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LnNhX3F1ZXJ5LmFjdGlvbikgeworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1Q6CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWllZWU4MDIxMV9wcm9jZXNzX3NhX3F1ZXJ5X3JlcShzZGF0YSwgbWdtdCwgbGVuKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFOgorCQkJLyoKKwkJCSAqIFNBIFF1ZXJ5IHJlc3BvbnNlIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gQVAgbW9kZQorCQkJICogYW5kIGl0IGlzIHByb2Nlc3NlZCBpbiB1c2VyIHNwYWNlLgorCQkJICovCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE2MTYsMjIgKzE4NzMsMjQgQEAKIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHJ4LT5kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogCi0JaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogCi0JaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKLQlyZXR1cm4gUlhfUVVFVUVEOworCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9taWNoYWVsX21pY19yZXBvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE3ODAsNiArMjAzOSw3IEBACiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfcGFzc2l2ZV9zY2FuKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2NoZWNrKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2RlY3J5cHQpCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2tfbW9yZV9kYXRhKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3N0YV9wcm9jZXNzKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfcHNfcG9sbCkKQEAgLTE4MjMsMTYgKzIwODMsMTcgQEAKIC8qIG1haW4gcmVjZWl2ZSBwYXRoICovCiAKIHN0YXRpYyBpbnQgcHJlcGFyZV9mb3JfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJdTggKmJzc2lkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKKwl1OCAqYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgcngtPnNrYi0+bGVuLCBzZGF0YS0+dmlmLnR5cGUpOwogCWludCBtdWx0aWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKIAogCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlpZiAoIWJzc2lkKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKSB7CisJCWlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQpKSB7CiAJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTE4NTAsNyArMjExMSw3IEBACiAJCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJCXJldHVybiAxOwogCQl9Ci0JCWVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpIHsKKwkJZWxzZSBpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCkpIHsKIAkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMTkyOCw3ICsyMTg5LDYgQEAKIAlpbnQgcHJlcGFyZXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7Ci0JdTggKmJzc2lkOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCW1lbXNldCgmcngsIDAsIHNpemVvZihyeCkpOwpAQCAtMTk1Niw3ICsyMjE2LDcgQEAKIAkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX0lOX1NDQU47CiAKIAlpZWVlODAyMTFfcGFyc2VfcW9zKCZyeCk7Ci0JaWVlZTgwMjExX3ZlcmlmeV9pcF9hbGlnbm1lbnQoJnJ4KTsKKwlpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudCgmcngpOwogCiAJc2tiID0gcnguc2tiOwogCkBAIC0xOTY3LDkgKzIyMjcsOCBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQljb250aW51ZTsKIAotCQlic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCBza2ItPmxlbiwgc2RhdGEtPnZpZi50eXBlKTsKIAkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOwotCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCBic3NpZCwgJnJ4LCBoZHIpOworCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCAmcngsIGhkcik7CiAKIAkJaWYgKCFwcmVwYXJlcykKIAkJCWNvbnRpbnVlOwpAQCAtMjE3NCwxMSArMjQzMyw5IEBACiAJLyogbmV3IHVuLW9yZGVyZWQgYW1wZHUgZnJhbWUgLSBwcm9jZXNzIGl0ICovCiAKIAkvKiByZXNldCBzZXNzaW9uIHRpbWVyICovCi0JaWYgKHRpZF9hZ2dfcngtPnRpbWVvdXQpIHsKLQkJdW5zaWduZWQgbG9uZyBleHBpcmVzID0KLQkJCWppZmZpZXMgKyAodGlkX2FnZ19yeC0+dGltZW91dCAvIDEwMDApICogSFo7Ci0JCW1vZF90aW1lcigmdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lciwgZXhwaXJlcyk7Ci0JfQorCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KQorCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsCisJCQkgIFRVX1RPX0VYUF9USU1FKHRpZF9hZ2dfcngtPnRpbWVvdXQpKTsKIAogCS8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi8KIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggZjVjN2MzMy4uM2JmOTgzOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC0xMiwxNCArMTIsMTEgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLS8qIFRPRE86Ci0gKiBvcmRlciBCU1MgbGlzdCBieSBSU1NJKD8pICgicXVhbGl0eSBvZiBBUCIpCi0gKiBzY2FuIHJlc3VsdCB0YWJsZSBmaWx0ZXJpbmcgKGJ5IGNhcGFiaWxpdHkgKHByaXZhY3ksIElCU1MvQlNTLCBXUEEvUlNOIElFLAotICogICAgU1NJRCkKLSAqLworLyogVE9ETzogZmlndXJlIG91dCBob3cgdG8gYXZvaWQgdGhhdCB0aGUgImN1cnJlbnQgQlNTIiBleHBpcmVzICovCiAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKQEAgLTMwLDE5MiArMjcsMjkgQEAKICNkZWZpbmUgSUVFRTgwMjExX0NIQU5ORUxfVElNRSAoSFogLyAzMykKICNkZWZpbmUgSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FIChIWiAvIDUpCiAKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0Jc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5ic3NfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5ic3NfbGlzdCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KQotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLX0KLQogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JYnNzID0gbG9jYWwtPmJzc19oYXNoW1NUQV9IQVNIKGJzc2lkKV07Ci0Jd2hpbGUgKGJzcykgewotCQlpZiAoIWJzc19tZXNoX2NmZyhic3MpICYmCi0JCSAgICAhbWVtY21wKGJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgJiYKLQkJICAgIGJzcy0+ZnJlcSA9PSBmcmVxICYmCi0JCSAgICBic3MtPnNzaWRfbGVuID09IHNzaWRfbGVuICYmCi0JCSAgICAoc3NpZF9sZW4gPT0gMCB8fCAhbWVtY21wKGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKSkgewotCQkJYXRvbWljX2luYygmYnNzLT51c2Vycyk7Ci0JCQlicmVhazsKLQkJfQotCQlic3MgPSBic3MtPmhuZXh0OwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOworCXJldHVybiAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LAorCQkJCQlpZWVlODAyMTFfZ2V0X2NoYW5uZWwobG9jYWwtPmh3LndpcGh5LAorCQkJCQkJCSAgICAgIGZyZXEpLAorCQkJCQlic3NpZCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJCTAsIDApOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5ic3NfbG9jayAqLwotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19mcmVlKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MpCiB7Ci0JdTggaGFzaF9pZHg7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9ICh2b2lkICopY2JzczsKIAotCWlmIChic3NfbWVzaF9jZmcoYnNzKSkKLQkJaGFzaF9pZHggPSBtZXNoX2lkX2hhc2goYnNzX21lc2hfaWQoYnNzKSwKLQkJCQkJYnNzX21lc2hfaWRfbGVuKGJzcykpOwotCWVsc2UKLQkJaGFzaF9pZHggPSBTVEFfSEFTSChic3MtPmJzc2lkKTsKLQotCWJzcy0+aG5leHQgPSBsb2NhbC0+YnNzX2hhc2hbaGFzaF9pZHhdOwotCWxvY2FsLT5ic3NfaGFzaFtoYXNoX2lkeF0gPSBic3M7Ci19Ci0KLS8qIENhbGxlciBtdXN0IGhvbGQgbG9jYWwtPmJzc19sb2NrICovCi1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9kZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmIsICpwcmV2ID0gTlVMTDsKLQliID0gbG9jYWwtPmJzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXTsKLQl3aGlsZSAoYikgewotCQlpZiAoYiA9PSBic3MpIHsKLQkJCWlmICghcHJldikKLQkJCQlsb2NhbC0+YnNzX2hhc2hbU1RBX0hBU0goYnNzLT5ic3NpZCldID0KLQkJCQkJYnNzLT5obmV4dDsKLQkJCWVsc2UKLQkJCQlwcmV2LT5obmV4dCA9IGJzcy0+aG5leHQ7Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2ID0gYjsKLQkJYiA9IGItPmhuZXh0OwotCX0KLX0KLQotc3RydWN0IGllZWU4MDIxMV9ic3MgKgotaWVlZTgwMjExX3J4X2Jzc19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCi0JCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlic3MgPSBremFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFic3MpCi0JCXJldHVybiBOVUxMOwotCWF0b21pY19zZXQoJmJzcy0+dXNlcnMsIDIpOwotCW1lbWNweShic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwotCWJzcy0+ZnJlcSA9IGZyZXE7Ci0JaWYgKHNzaWQgJiYgc3NpZF9sZW4gPD0gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewotCQltZW1jcHkoYnNzLT5zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0JCWJzcy0+c3NpZF9sZW4gPSBzc2lkX2xlbjsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+YnNzX2xpc3QpOwotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChsb2NhbCwgYnNzKTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOwotfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfbWVzaF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuLAotCQkJICB1OCAqbWVzaF9jZmcsIGludCBmcmVxKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JYnNzID0gbG9jYWwtPmJzc19oYXNoW21lc2hfaWRfaGFzaChtZXNoX2lkLCBtZXNoX2lkX2xlbildOwotCXdoaWxlIChic3MpIHsKLQkJaWYgKGJzc19tZXNoX2NmZyhic3MpICYmCi0JCSAgICAhbWVtY21wKGJzc19tZXNoX2NmZyhic3MpLCBtZXNoX2NmZywgTUVTSF9DRkdfQ01QX0xFTikgJiYKLQkJICAgIGJzcy0+ZnJlcSA9PSBmcmVxICYmCi0JCSAgICBtZXNoX2lkX2xlbiA9PSBic3MtPm1lc2hfaWRfbGVuICYmCi0JCSAgICAobWVzaF9pZF9sZW4gPT0gMCB8fCAhbWVtY21wKGJzcy0+bWVzaF9pZCwgbWVzaF9pZCwKLQkJCQkJCSBtZXNoX2lkX2xlbikpKSB7Ci0JCQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJzcyA9IGJzcy0+aG5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfbWVzaF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuLAotCQkJICB1OCAqbWVzaF9jZmcsIGludCBtZXNoX2NvbmZpZ19sZW4sIGludCBmcmVxKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlpZiAobWVzaF9jb25maWdfbGVuICE9IElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4pCi0JCXJldHVybiBOVUxMOwotCi0JYnNzID0ga3phbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOwotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQotCWJzcy0+bWVzaF9jZmcgPSBrbWFsbG9jKE1FU0hfQ0ZHX0NNUF9MRU4sIEdGUF9BVE9NSUMpOwotCWlmICghYnNzLT5tZXNoX2NmZykgewotCQlrZnJlZShic3MpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobWVzaF9pZF9sZW4gJiYgbWVzaF9pZF9sZW4gPD0gSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTikgewotCQlic3MtPm1lc2hfaWQgPSBrbWFsbG9jKG1lc2hfaWRfbGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFic3MtPm1lc2hfaWQpIHsKLQkJCWtmcmVlKGJzcy0+bWVzaF9jZmcpOwotCQkJa2ZyZWUoYnNzKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCW1lbWNweShic3MtPm1lc2hfaWQsIG1lc2hfaWQsIG1lc2hfaWRfbGVuKTsKLQl9Ci0KLQlhdG9taWNfc2V0KCZic3MtPnVzZXJzLCAyKTsKLQltZW1jcHkoYnNzLT5tZXNoX2NmZywgbWVzaF9jZmcsIE1FU0hfQ0ZHX0NNUF9MRU4pOwotCWJzcy0+bWVzaF9pZF9sZW4gPSBtZXNoX2lkX2xlbjsKLQlic3MtPmZyZXEgPSBmcmVxOwotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5ic3NfbGlzdCk7Ci0JX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKGxvY2FsLCBic3MpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19mcmVlKHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Ja2ZyZWUoYnNzLT5pZXMpOwogCWtmcmVlKGJzc19tZXNoX2lkKGJzcykpOwogCWtmcmVlKGJzc19tZXNoX2NmZyhic3MpKTsKLQlrZnJlZShic3MpOwogfQogCiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQogewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmJzcy0+dXNlcnMsICZsb2NhbC0+YnNzX2xvY2spKSB7Ci0JCWxvY2FsX2JoX2VuYWJsZSgpOwotCQlyZXR1cm47Ci0JfQotCi0JX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfZGVsKGxvY2FsLCBic3MpOwotCWxpc3RfZGVsKCZic3MtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWllZWU4MDIxMV9yeF9ic3NfZnJlZShic3MpOworCWNmZzgwMjExX3B1dF9ic3MoKHN0cnVjdCBjZmc4MDIxMV9ic3MgKilic3MpOwogfQogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCkBAIC0yMjQsMzkgKzU4LDI1IEBACiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCSAgc2l6ZV90IGxlbiwKIAkJCSAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICBpbnQgZnJlcSwgYm9vbCBiZWFjb24pCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgYm9vbCBiZWFjb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgY2xlbjsKKwlzMzIgc2lnbmFsID0gMDsKIAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi0JaWYgKGVsZW1zLT5tZXNoX2NvbmZpZykKLQkJYnNzID0gaWVlZTgwMjExX3J4X21lc2hfYnNzX2dldChsb2NhbCwgZWxlbXMtPm1lc2hfaWQsCi0JCQkJZWxlbXMtPm1lc2hfaWRfbGVuLCBlbGVtcy0+bWVzaF9jb25maWcsIGZyZXEpOwotCWVsc2UKLSNlbmRpZgotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgbWdtdC0+YnNzaWQsIGZyZXEsCi0JCQkJCSAgIGVsZW1zLT5zc2lkLCBlbGVtcy0+c3NpZF9sZW4pOwotCWlmICghYnNzKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQkJaWYgKGVsZW1zLT5tZXNoX2NvbmZpZykKLQkJCWJzcyA9IGllZWU4MDIxMV9yeF9tZXNoX2Jzc19hZGQobG9jYWwsIGVsZW1zLT5tZXNoX2lkLAotCQkJCWVsZW1zLT5tZXNoX2lkX2xlbiwgZWxlbXMtPm1lc2hfY29uZmlnLAotCQkJCWVsZW1zLT5tZXNoX2NvbmZpZ19sZW4sIGZyZXEpOwotCQllbHNlCi0jZW5kaWYKLQkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfYWRkKGxvY2FsLCBtZ210LT5ic3NpZCwgZnJlcSwKLQkJCQkJCSAgZWxlbXMtPnNzaWQsIGVsZW1zLT5zc2lkX2xlbik7Ci0JCWlmICghYnNzKQotCQkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlIHsKLSNpZiAwCi0JCS8qIFRPRE86IG9yZGVyIGJ5IFJTU0k/ICovCi0JCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5ic3NfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotI2VuZGlmCi0JfQorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKKwkJc2lnbmFsID0gcnhfc3RhdHVzLT5zaWduYWwgKiAxMDA7CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCXNpZ25hbCA9IChyeF9zdGF0dXMtPnNpZ25hbCAqIDEwMCkgLyBsb2NhbC0+aHcubWF4X3NpZ25hbDsKKworCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGNoYW5uZWwsCisJCQkJCQltZ210LCBsZW4sIHNpZ25hbCwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWJzcykKKwkJcmV0dXJuIE5VTEw7CisKKwlic3MtPmNic3MuZnJlZV9wcml2ID0gaWVlZTgwMjExX3J4X2Jzc19mcmVlOwogCiAJLyogc2F2ZSB0aGUgRVJQIHZhbHVlIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGF0IGFzc29jaWF0aW9uIHRpbWUgKi8KIAlpZiAoZWxlbXMtPmVycF9pbmZvICYmIGVsZW1zLT5lcnBfaW5mb19sZW4gPj0gMSkgewpAQCAtMjY0LDkgKzg0LDYgQEAKIAkJYnNzLT5oYXNfZXJwX3ZhbHVlID0gMTsKIAl9CiAKLQlic3MtPmJlYWNvbl9pbnQgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5iZWFjb25faW50KTsKLQlic3MtPmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvKTsKLQogCWlmIChlbGVtcy0+dGltKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfdGltX2llICp0aW1faWUgPQogCQkJKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopZWxlbXMtPnRpbTsKQEAgLTI5NSwzNyArMTEyLDI3IEBACiAJCWJzcy0+c3VwcF9yYXRlc19sZW4gKz0gY2xlbjsKIAl9CiAKLQlic3MtPmJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7Ci0KLQlic3MtPnRpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KG1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCk7Ci0JYnNzLT5sYXN0X3VwZGF0ZSA9IGppZmZpZXM7Ci0JYnNzLT5zaWduYWwgPSByeF9zdGF0dXMtPnNpZ25hbDsKLQlic3MtPm5vaXNlID0gcnhfc3RhdHVzLT5ub2lzZTsKLQlic3MtPnF1YWwgPSByeF9zdGF0dXMtPnF1YWw7CiAJYnNzLT53bW1fdXNlZCA9IGVsZW1zLT53bW1fcGFyYW0gfHwgZWxlbXMtPndtbV9pbmZvOwogCiAJaWYgKCFiZWFjb24pCiAJCWJzcy0+bGFzdF9wcm9iZV9yZXNwID0gamlmZmllczsKIAotCS8qCi0JICogRm9yIHByb2JlIHJlc3BvbnNlcywgb3IgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgaW5mb3JtYXRpb24geWV0LAotCSAqIHVzZSB0aGUgSUVzIGZyb20gdGhlIGJlYWNvbi4KLQkgKi8KLQlpZiAoIWJzcy0+aWVzIHx8ICFiZWFjb24pIHsKLQkJaWYgKGJzcy0+aWVzID09IE5VTEwgfHwgYnNzLT5pZXNfbGVuIDwgZWxlbXMtPnRvdGFsX2xlbikgewotCQkJa2ZyZWUoYnNzLT5pZXMpOwotCQkJYnNzLT5pZXMgPSBrbWFsbG9jKGVsZW1zLT50b3RhbF9sZW4sIEdGUF9BVE9NSUMpOwotCQl9Ci0JCWlmIChic3MtPmllcykgewotCQkJbWVtY3B5KGJzcy0+aWVzLCBlbGVtcy0+aWVfc3RhcnQsIGVsZW1zLT50b3RhbF9sZW4pOwotCQkJYnNzLT5pZXNfbGVuID0gZWxlbXMtPnRvdGFsX2xlbjsKLQkJfSBlbHNlCi0JCQlic3MtPmllc19sZW4gPSAwOwotCX0KLQogCXJldHVybiBic3M7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCwKKwkJCSAgICAgaW50IGZyZXEsIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGJzc2lkLCBmcmVxLCBzc2lkLCBzc2lkX2xlbik7CisJaWYgKGJzcykgeworCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgKHZvaWQgKilic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwl9Cit9CisKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCkBAIC0zODcsNyArMTk0LDcgQEAKIAogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUoc2RhdGEtPmxvY2FsLCByeF9zdGF0dXMsCiAJCQkJCW1nbXQsIHNrYi0+bGVuLCAmZWxlbXMsCi0JCQkJCWZyZXEsIGJlYWNvbik7CisJCQkJCWNoYW5uZWwsIGJlYWNvbik7CiAJaWYgKGJzcykKIAkJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOwogCkBAIC0zOTUsNTYgKzIwMiw5NCBAQAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgaW50IHBvd2Vyc2F2ZSkKK3ZvaWQgaWVlZTgwMjExX3NjYW5fZmFpbGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOwotCV9fbGUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwlpZiAoV0FSTl9PTighbG9jYWwtPnNjYW5fcmVxKSkKIAkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAKLQludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChudWxsZnVuYywgMCwgMjQpOwotCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAotCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOwotCWlmIChwb3dlcnNhdmUpCi0JCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKLQludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJLyogbm90aWZ5IGNmZzgwMjExIGFib3V0IHRoZSBmYWlsZWQgc2NhbiAqLworCWlmIChsb2NhbC0+c2Nhbl9yZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEpCisJCWNmZzgwMjExX3NjYW5fZG9uZShsb2NhbC0+c2Nhbl9yZXEsIHRydWUpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOwogfQogCi12b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKKy8qCisgKiBpbmZvcm0gQVAgdGhhdCB3ZSB3aWxsIGdvIHRvIHNsZWVwIHNvIHRoYXQgaXQgd2lsbCBidWZmZXIgdGhlIGZyYW1lcworICogd2hpbGUgd2Ugc2NhbgorICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9wc19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJYm9vbCBwcyA9IGZhbHNlOworCisJLyogRklYTUU6IHdoYXQgdG8gZG8gd2hlbiBsb2NhbC0+cHNwb2xsaW5nIGlzIHRydWU/ICovCisKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCXBzID0gdHJ1ZTsKKwkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCX0KKworCWlmICghcHMgfHwgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spKQorCQkvKgorCQkgKiBJZiBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCBubyBuZWVkIHRvIHNlbmQgYSBudWxsZnVuYworCQkgKiBmcmFtZSBiZWNhdXNlIEFQIGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLiBCdXQgaWYgdGhlCisJCSAqIGhhcmR3YXJlIGlzIGNyZWF0aW5nIHRoZSBudWxsZnVuYyBmcmFtZSBmb3IgcG93ZXIgc2F2ZQorCQkgKiBzdGF0dXMgKGllLiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgbm90CisJCSAqIGVuYWJsZWQpIGFuZCBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCB0aGUgZmlybXdhcmUganVzdAorCQkgKiBzZW50IGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyIHNhdmUgZGlzYWJsZWQuIFNvIHdlIG5lZWQKKwkJICogdG8gc2VuZCBhIG5ldyBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0gdGhlIEFQIHRoYXQgd2UKKwkJICogYXJlIGFnYWluIHNsZWVwaW5nLgorCQkgKi8KKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKK30KKworLyogaW5mb3JtIEFQIHRoYXQgd2UgYXJlIGF3YWtlIGFnYWluLCB1bmxlc3MgcG93ZXIgc2F2ZSBpcyBlbmFibGVkICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWYgKCFsb2NhbC0+cG93ZXJzYXZlKQorCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCWVsc2UgeworCQkvKgorCQkgKiBJbiAhSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGNhc2UgdGhlIGhhcmR3YXJlCisJCSAqIHdpbGwgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHdpdGggdGhlIHBvd2Vyc2F2ZSBiaXQgc2V0CisJCSAqIGV2ZW4gdGhvdWdoIHRoZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLgorCQkgKiBUaGlzIGNvdWxkIGJlIGF2b2lkZWQgYnkgc2VuZGluZyBhIG51bGwgZnJhbWUgd2l0aCBwb3dlcgorCQkgKiBzYXZlIGJpdCBkaXNhYmxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIHBvd2VyIHNhdmUsIGJ1dAorCQkgKiB0aGlzIGRvZXNuJ3QgZ2FpbiBhbnl0aGluZy4KKwkJICoKKwkJICogV2hlbiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgZW5hYmxlZCwgbm8gbmVlZAorCQkgKiB0byBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgYmVjYXVzZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQKKwkJICogd2UgYXJlIHNsZWVwaW5nLCBsZXQncyBqdXN0IGVuYWJsZSBwb3dlciBzYXZlIG1vZGUgaW4KKwkJICogaGFyZHdhcmUuCisJCSAqLworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogCiAJaWYgKFdBUk5fT04oIWxvY2FsLT5od19zY2FubmluZyAmJiAhbG9jYWwtPnN3X3NjYW5uaW5nKSkKIAkJcmV0dXJuOwogCi0JbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwlpZiAoV0FSTl9PTighbG9jYWwtPnNjYW5fcmVxKSkKKwkJcmV0dXJuOwogCi0JLyoKLQkgKiBsb2NhbC0+c2Nhbl9zZGF0YSBjb3VsZCBoYXZlIGJlZW4gTlVMTGVkIGJ5IHRoZSBpbnRlcmZhY2UKLQkgKiBkb3duIGNvZGUgaW4gY2FzZSB3ZSB3ZXJlIHNjYW5uaW5nIG9uIGFuIGludGVyZmFjZSB0aGF0IGlzCi0JICogYmVpbmcgdGFrZW4gZG93bi4KLQkgKi8KLQlzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCWlmIChzZGF0YSkKLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCWlmIChsb2NhbC0+c2Nhbl9yZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEpCisJCWNmZzgwMjExX3NjYW5fZG9uZShsb2NhbC0+c2Nhbl9yZXEsIGFib3J0ZWQpOworCWxvY2FsLT5zY2FuX3JlcSA9IE5VTEw7CisKKwlsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCA9IGppZmZpZXM7CiAKIAlpZiAobG9jYWwtPmh3X3NjYW5uaW5nKSB7CiAJCWxvY2FsLT5od19zY2FubmluZyA9IGZhbHNlOwpAQCAtNDcyLDM0ICszMTcsNDYgQEAKIAluZXRpZl9hZGRyX3VubG9jayhsb2NhbC0+bWRldik7CiAJbmV0aWZfdHhfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUpCisJCWxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUobG9jYWxfdG9faHcobG9jYWwpKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKIAkJLyogVGVsbCBBUCB3ZSdyZSBiYWNrICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewotCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZGlzYWJsZShzZGF0YSk7CiAJCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCQkJfQogCQl9IGVsc2UKIAkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKKworCQkvKiByZS1lbmFibGUgYmVhY29uaW5nICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLAorCQkJCQkgICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogIGRvbmU6CiAJaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKKwlpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogCWllZWU4MDIxMV9tZXNoX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCk7CiAKLQogdm9pZCBpZWVlODAyMTFfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBzY2FuX3dvcmsud29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JaW50IHNraXA7CisJaW50IHNraXAsIGk7CiAJdW5zaWduZWQgbG9uZyBuZXh0X2RlbGF5ID0gMDsKIAogCS8qCkBAIC01MTAsMzMgKzM2NywxMyBAQAogCiAJc3dpdGNoIChsb2NhbC0+c2Nhbl9zdGF0ZSkgewogCWNhc2UgU0NBTl9TRVRfQ0hBTk5FTDoKLQkJLyoKLQkJICogR2V0IGN1cnJlbnQgc2NhbiBiYW5kLiBzY2FuX2JhbmQgbWF5IGJlIElFRUU4MDIxMV9OVU1fQkFORFMKLQkJICogYWZ0ZXIgd2Ugc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgdGhlIGxhc3QgY2hhbm5lbCBvZiB0aGUgbGFzdAotCQkgKiBiYW5kIChhbmQgdGhlIGxhc3QgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGh3KQotCQkgKi8KLQkJaWYgKGxvY2FsLT5zY2FuX2JhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTKQotCQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5zY2FuX2JhbmRdOwotCQllbHNlCi0JCQlzYmFuZCA9IE5VTEw7Ci0KLQkJLyoKLQkJICogSWYgd2UgYXJlIGF0IGFuIHVuc3VwcG9ydGVkIGJhbmQgYW5kIGhhdmUgbW9yZSBiYW5kcwotCQkgKiBsZWZ0IHRvIHNjYW4sIGFkdmFuY2UgdG8gdGhlIG5leHQgc3VwcG9ydGVkIG9uZS4KLQkJICovCi0JCXdoaWxlICghc2JhbmQgJiYgbG9jYWwtPnNjYW5fYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFMgLSAxKSB7Ci0JCQlsb2NhbC0+c2Nhbl9iYW5kKys7Ci0JCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPnNjYW5fYmFuZF07Ci0JCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JCX0KLQogCQkvKiBpZiBubyBtb3JlIGJhbmRzL2NoYW5uZWxzIGxlZnQsIGNvbXBsZXRlIHNjYW4gKi8KLQkJaWYgKCFzYmFuZCB8fCBsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscykgewotCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBsb2NhbC0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKKwkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChsb2NhbF90b19odyhsb2NhbCksIGZhbHNlKTsKIAkJCXJldHVybjsKIAkJfQogCQlza2lwID0gMDsKLQkJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHhdOworCQljaGFuID0gbG9jYWwtPnNjYW5fcmVxLT5jaGFubmVsc1tsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeF07CiAKIAkJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgfHwKIAkJICAgIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKQEAgLTU1MiwxNSArMzg5LDYgQEAKIAogCQkvKiBhZHZhbmNlIHN0YXRlIG1hY2hpbmUgdG8gbmV4dCBjaGFubmVsL2JhbmQgKi8KIAkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHgrKzsKLQkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKSB7Ci0JCQkvKgotCQkJICogc2Nhbl9iYW5kIG1heSBlbmQgdXAgPT0gSUVFRTgwMjExX05VTV9CQU5EUywgYnV0Ci0JCQkgKiB3ZSdsbCBjYXRjaCB0aGF0IGNhc2UgYWJvdmUgYW5kIGNvbXBsZXRlIHRoZSBzY2FuCi0JCQkgKiBpZiB0aGF0IGlzIHRoZSBjYXNlLgotCQkJICovCi0JCQlsb2NhbC0+c2Nhbl9iYW5kKys7Ci0JCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JCX0KIAogCQlpZiAoc2tpcCkKIAkJCWJyZWFrOwpAQCAtNTczLDEwICs0MDEsMTUgQEAKIAkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9QQVNTSVZFX0NIQU5ORUxfVElNRTsKIAkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOwogCi0JCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKKwkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOIHx8CisJCSAgICAhbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzKQogCQkJYnJlYWs7Ci0JCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgbG9jYWwtPnNjYW5fc3NpZCwKLQkJCQkJIGxvY2FsLT5zY2FuX3NzaWRfbGVuKTsKKwkJZm9yIChpID0gMDsgaSA8IGxvY2FsLT5zY2FuX3JlcS0+bl9zc2lkczsgaSsrKQorCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKAorCQkJCXNkYXRhLCBOVUxMLAorCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZCwKKwkJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWRfbGVuLAorCQkJCWxvY2FsLT5zY2FuX3JlcS0+aWUsIGxvY2FsLT5zY2FuX3JlcS0+aWVfbGVuKTsKIAkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9DSEFOTkVMX1RJTUU7CiAJCWJyZWFrOwogCX0KQEAgLTU4NywxNCArNDIwLDE5IEBACiAKIAogaW50IGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNjYW5fc2RhdGEsCi0JCQkgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzY2FuX3NkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAotCWlmIChzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJaWYgKCFyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAmJiBsb2NhbC0+c2Nhbl9yZXEgIT0gcmVxKQorCQlyZXR1cm4gLUVCVVNZOworCisJbG9jYWwtPnNjYW5fcmVxID0gcmVxOworCiAJLyogTUxNRS1TQ0FOLnJlcXVlc3QgKHBhZ2UgMTE4KSAgcGFnZSAxNDQgKDExLjEuMy4xKQogCSAqIEJTU1R5cGU6IElORlJBU1RSVUNUVVJFLCBJTkRFUEVOREVOVCwgQU5ZX0JTUwogCSAqIEJTU0lEOiBNQUNBZGRyZXNzCkBAIC02MjIsNyArNDYwLDcgQEAKIAkJaW50IHJjOwogCiAJCWxvY2FsLT5od19zY2FubmluZyA9IHRydWU7Ci0JCXJjID0gbG9jYWwtPm9wcy0+aHdfc2Nhbihsb2NhbF90b19odyhsb2NhbCksIHNzaWQsIHNzaWRfbGVuKTsKKwkJcmMgPSBsb2NhbC0+b3BzLT5od19zY2FuKGxvY2FsX3RvX2h3KGxvY2FsKSwgcmVxKTsKIAkJaWYgKHJjKSB7CiAJCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSBmYWxzZTsKIAkJCXJldHVybiByYzsKQEAgLTYzMSwyOSArNDY5LDQ5IEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogSGFyZHdhcmUvZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBod19zY2FuLCBzbyB1c2Ugc29mdHdhcmUKKwkgKiBzY2FubmluZyBpbnN0ZWFkLiBGaXJzdCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCBwb3dlciBzYXZlCisJICogYml0IG9uIHNvIHRoYXQgQVAgd2lsbCBidWZmZXIgdGhlIGZyYW1lcyBmb3IgdXMgd2hpbGUgd2UgYXJlIG5vdAorCSAqIGxpc3RlbmluZywgdGhlbiBzZW5kIHByb2JlIHJlcXVlc3RzIHRvIGVhY2ggY2hhbm5lbCBhbmQgd2FpdCBmb3IKKwkgKiB0aGUgcmVzcG9uc2VzLiBBZnRlciBhbGwgY2hhbm5lbHMgYXJlIHNjYW5uZWQsIHR1bmUgYmFjayB0byB0aGUKKwkgKiBvcmlnaW5hbCBjaGFubmVsIGFuZCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCBwb3dlciBzYXZlIGJpdAorCSAqIG9mZiB0byB0cmlnZ2VyIHRoZSBBUCB0byBzZW5kIHVzIGFsbCB0aGUgYnVmZmVyZWQgZnJhbWVzLgorCSAqCisJICogTm90ZSB0aGF0IHdoaWxlIGxvY2FsLT5zd19zY2FubmluZyBpcyB0cnVlIGV2ZXJ5dGhpbmcgZWxzZSBidXQKKwkgKiBudWxsZnVuYyBmcmFtZXMgYW5kIHByb2JlIHJlcXVlc3RzIHdpbGwgYmUgZHJvcHBlZCBpbgorCSAqIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkuCisJICovCiAJbG9jYWwtPnN3X3NjYW5uaW5nID0gdHJ1ZTsKKwlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydCkKKwkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydChsb2NhbF90b19odyhsb2NhbCkpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRpc2FibGUgYmVhY29uaW5nICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLAorCQkJCQkgICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOworCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgeworCQkJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewogCQkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKLQkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworCQkJCWllZWU4MDIxMV9zY2FuX3BzX2VuYWJsZShzZGF0YSk7CiAJCQl9CiAJCX0gZWxzZQogCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAotCWlmIChzc2lkKSB7Ci0JCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JCW1lbWNweShsb2NhbC0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0JfSBlbHNlCi0JCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gMDsKIAlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CiAJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCWxvY2FsLT5zY2FuX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCWxvY2FsLT5zY2FuX3NkYXRhID0gc2Nhbl9zZGF0YTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAKIAluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOwogCWxvY2FsLT5maWx0ZXJfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CkBAIC02NzMsMTMgKzUzMSwyMSBAQAogCiAKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCWlmICghcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgbG9jYWwtPnNjYW5fcmVxICE9IHJlcSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBzc2lkLCBzc2lkX2xlbik7CisJCXJldHVybiBpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgcmVxKTsKIAogCS8qCiAJICogU1RBIGhhcyBhIHN0YXRlIG1hY2hpbmUgdGhhdCBtaWdodCBuZWVkIHRvIGRlZmVyIHNjYW5uaW5nCkBAIC02OTMsMjQyICs1NTksOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmc3RhLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JaWYgKHNzaWRfbGVuKQotCQltZW1jcHkoaWZzdGEtPnNjYW5fc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAKIAlyZXR1cm4gMDsKIH0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKLQkJCQkgICBjaGFyICoqY3VycmVudF9ldiwgY2hhciAqZW5kX2J1ZikKLXsKLQl1OCAqcG9zLCAqZW5kLCAqbmV4dDsKLQlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwotCi0JaWYgKGJzcyA9PSBOVUxMIHx8IGJzcy0+aWVzID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgbmVlZGVkLCBmcmFnbWVudCB0aGUgSUVzIGJ1ZmZlciAoYXQgSUUgYm91bmRhcmllcykgaW50byBzaG9ydAotCSAqIGVub3VnaCBmcmFnbWVudHMgdG8gZml0IGludG8gSVdfR0VORVJJQ19JRV9NQVggb2N0ZXQgbWVzc2FnZXMuCi0JICovCi0JcG9zID0gYnNzLT5pZXM7Ci0JZW5kID0gcG9zICsgYnNzLT5pZXNfbGVuOwotCi0Jd2hpbGUgKGVuZCAtIHBvcyA+IElXX0dFTkVSSUNfSUVfTUFYKSB7Ci0JCW5leHQgPSBwb3MgKyAyICsgcG9zWzFdOwotCQl3aGlsZSAobmV4dCArIDIgKyBuZXh0WzFdIC0gcG9zIDwgSVdfR0VORVJJQ19JRV9NQVgpCi0JCQluZXh0ID0gbmV4dCArIDIgKyBuZXh0WzFdOwotCi0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gbmV4dCAtIHBvczsKLQkJKmN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCAqY3VycmVudF9ldiwKLQkJCQkJCSAgIGVuZF9idWYsICZpd2UsIHBvcyk7Ci0KLQkJcG9zID0gbmV4dDsKLQl9Ci0KLQlpZiAoZW5kID4gcG9zKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5kIC0gcG9zOwotCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAotCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKLQl9Ci19Ci0KLQotc3RhdGljIGNoYXIgKgotaWVlZTgwMjExX3NjYW5fcmVzdWx0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAotCQkgICAgICBjaGFyICpjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQotewotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0JY2hhciAqYnVmOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIGJzcy0+bGFzdF91cGRhdGUgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJcmV0dXJuIGN1cnJlbnRfZXY7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0FERFJfTEVOKTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3NfbWVzaF9pZF9sZW4oYnNzKTsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBic3NfbWVzaF9pZChic3MpKTsKLQl9IGVsc2UgewotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+c3NpZF9sZW47Ci0JCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgYnNzLT5zc2lkKTsKLQl9Ci0KLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykKLQkgICAgfHwgYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOwotCQllbHNlIGlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKLQlpd2UudS5mcmVxLmUgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGJzcy0+ZnJlcTsKLQlpd2UudS5mcmVxLmUgPSA2OwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnF1YWw7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+c2lnbmFsOwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfUVVBTF9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsICIiKTsKLQotCWllZWU4MDIxMV9zY2FuX2FkZF9pZXMoaW5mbywgYnNzLCAmY3VycmVudF9ldiwgZW5kX2J1Zik7Ci0KLQlpZiAoYnNzLT5zdXBwX3JhdGVzX2xlbiA+IDApIHsKLQkJLyogZGlzcGxheSBhbGwgc3VwcG9ydGVkIHJhdGVzIGluIHJlYWRhYmxlIGZvcm1hdCAqLwotCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGJzcy0+c3VwcF9yYXRlc1tpXSAmCi0JCQkJCQkJMHg3ZikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsCi0JCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1ZikgewotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJc3ByaW50ZihidWYsICJ0c2Y9JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJzcy0+dGltZXN0YW1wKSk7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBidWYpOwotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJc3ByaW50ZihidWYsICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJzcy0+bGFzdF91cGRhdGUpKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkgIGVuZF9idWYsICZpd2UsIGJ1Zik7Ci0JCWtmcmVlKGJ1Zik7Ci0JfQotCi0JaWYgKGJzc19tZXNoX2NmZyhic3MpKSB7Ci0JCXU4ICpjZmcgPSBic3NfbWVzaF9jZmcoYnNzKTsKLQkJYnVmID0ga21hbGxvYyg1MCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChidWYpIHsKLQkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJCXNwcmludGYoYnVmLCAiTWVzaCBuZXR3b3JrICh2ZXJzaW9uICVkKSIsIGNmZ1swXSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgSUQ6ICIKLQkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzFdLCBjZmdbMl0sIGNmZ1szXSwKLQkJCQkJCQljZmdbNF0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIE1ldHJpYyBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbNV0sIGNmZ1s2XSwgY2ZnWzddLAotCQkJCQkJCWNmZ1s4XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSUQ6ICIKLQkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzldLCBjZmdbMTBdLAotCQkJCQkJCWNmZ1sxMV0sIGNmZ1sxMl0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlzcHJpbnRmKGJ1ZiwgIkNoYW5uZWwgUHJlY2VkZW5jZTogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMTNdLCBjZmdbMTRdLAotCQkJCQkJCWNmZ1sxNV0sIGNmZ1sxNl0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlrZnJlZShidWYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLQotaW50IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCWNoYXIgKmN1cnJlbnRfZXYgPSBidWY7Ci0JY2hhciAqZW5kX2J1ZiA9IGJ1ZiArIGxlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChidWYgKyBsZW4gLSBjdXJyZW50X2V2IDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkJCXJldHVybiAtRTJCSUc7Ci0JCX0KLQkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdChsb2NhbCwgaW5mbywgYnNzLAotCQkJCQkJICAgICAgIGN1cnJlbnRfZXYsIGVuZF9idWYpOwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYyBiL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYwppbmRleCBmNzJiYWQ2Li41ZjdhMjYyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKKysrIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCQlJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9NT0RFX1JFRlVTRUQ7CiAJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5tc3JfZWxlbS50eXBlID0gcmVxdWVzdF9pZS0+dHlwZTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC04NCwzICs4NCwxMDQgQEAKIAkJCW1nbXQtPnNhLCBtZ210LT5ic3NpZCwKIAkJCW1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuZGlhbG9nX3Rva2VuKTsKIH0KKwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2QuY2hzd2l0Y2hfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJcmV0dXJuOworCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoc2RhdGEtPmxvY2FsLCBpZm1nZC0+YnNzaWQsCisJCQkJICAgc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCWlmICghYnNzKQorCQlnb3RvIGV4aXQ7CisKKwlzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWw7CisJLyogWFhYOiBzaG91bGRuJ3QgcmVhbGx5IG1vZGlmeSBjZmc4MDIxMS1vd25lZCBkYXRhISAqLworCWlmICghaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSkKKwkJYnNzLT5jYnNzLmNoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbDsKKworCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKK2V4aXQ6CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKK30KKwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpuZXdfY2g7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOworCisJLyogRklYTUU6IEhhbmRsZSBBREhPQyBsYXRlciAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwkJcmV0dXJuOworCisJaWYgKHNkYXRhLT5sb2NhbC0+c3dfc2Nhbm5pbmcgfHwgc2RhdGEtPmxvY2FsLT5od19zY2FubmluZykKKwkJcmV0dXJuOworCisJLyogRGlzcmVnYXJkIHN1YnNlcXVlbnQgYmVhY29ucyBpZiB3ZSBhcmUgYWxyZWFkeSBydW5uaW5nIGEgdGltZXIKKwkgICBwcm9jZXNzaW5nIGEgQ1NBICovCisKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQpCisJCXJldHVybjsKKworCW5ld19jaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChzZGF0YS0+bG9jYWwtPmh3LndpcGh5LCBuZXdfZnJlcSk7CisJaWYgKCFuZXdfY2ggfHwgbmV3X2NoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm47CisKKwlzZGF0YS0+bG9jYWwtPmNzYV9jaGFubmVsID0gbmV3X2NoOworCisJaWYgKHN3X2VsZW0tPmNvdW50IDw9IDEpIHsKKwkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKKwl9IGVsc2UgeworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsCisJCQkgIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKHN3X2VsZW0tPmNvdW50ICoKKwkJCQkJICAgYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbCkpOworCX0KK30KKwordm9pZCBpZWVlODAyMTFfaGFuZGxlX3B3cl9jb25zdHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJIHUxNiBjYXBhYl9pbmZvLCB1OCAqcHdyX2NvbnN0cl9lbGVtLAorCQkJCSB1OCBwd3JfY29uc3RyX2VsZW1fbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZzZGF0YS0+bG9jYWwtPmh3LmNvbmY7CisKKwlpZiAoIShjYXBhYl9pbmZvICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpKQorCQlyZXR1cm47CisKKwkvKiBQb3dlciBjb25zdHJhaW50IElFIGxlbmd0aCBzaG91bGQgYmUgMSBvY3RldCAqLworCWlmIChwd3JfY29uc3RyX2VsZW1fbGVuICE9IDEpCisJCXJldHVybjsKKworCWlmICgoKnB3cl9jb25zdHJfZWxlbSA8PSBjb25mLT5jaGFubmVsLT5tYXhfcG93ZXIpICYmCisJICAgICgqcHdyX2NvbnN0cl9lbGVtICE9IHNkYXRhLT5sb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsKSkgeworCQlzZGF0YS0+bG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA9ICpwd3JfY29uc3RyX2VsZW07CisJCWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCAwKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggMTBjNTUzOS4uYzVmMTRlNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTE5NCwxMiArMTk0LDQ3IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX3J4OworCQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisKIAkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSkKLQkJICBkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXS0+c2Vzc2lvbl90aW1lcik7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldKQotCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5hZGRiYV9yZXNwX3RpbWVyKTsKKwkJdGlkX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXTsKKwkJLyogTWFrZSBzdXJlIHRpbWVyIHdvbid0IGZyZWUgdGhlIHRpZF9yeCBzdHJ1Y3QsIHNlZSBiZWxvdyAqLworCQlpZiAodGlkX3J4KQorCQkJdGlkX3J4LT5zaHV0ZG93biA9IHRydWU7CisKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkJLyoKKwkJICogT3V0c2lkZSBzcGlubG9jayAtIHNodXRkb3duIGlzIHRydWUgbm93IHNvIHRoYXQgdGhlIHRpbWVyCisJCSAqIHdvbid0IGZyZWUgdGlkX3J4LCB3ZSBoYXZlIHRvIGRvIHRoYXQgbm93LiBDYW4ndCBsZXQgdGhlCisJCSAqIHRpbWVyIGRvIGl0IGJlY2F1c2Ugd2UgaGF2ZSB0byBzeW5jIHRoZSB0aW1lciBvdXRzaWRlIHRoZQorCQkgKiBsb2NrIHRoYXQgaXQgdGFrZXMgaXRzZWxmLgorCQkgKi8KKwkJaWYgKHRpZF9yeCkgeworCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF9yeC0+c2Vzc2lvbl90aW1lcik7CisJCQlrZnJlZSh0aWRfcngpOworCQl9CisKKwkJLyoKKwkJICogTm8gbmVlZCB0byBkbyBzdWNoIGNvbXBsaWNhdGlvbnMgZm9yIFRYIGFnZyBzZXNzaW9ucywgdGhlCisJCSAqIHBhdGggbGVhZGluZyB0byBmcmVlaW5nIHRoZSB0aWRfdHggc3RydWN0IGdvZXMgdmlhIGEgY2FsbAorCQkgKiBmcm9tIHRoZSBkcml2ZXIsIGFuZCB0aHVzIG5lZWRzIHRvIGxvb2sgdXAgdGhlIHN0YSBzdHJ1Y3QKKwkJICogYWdhaW4sIHdoaWNoIGNhbm5vdCBiZSBmb3VuZCB3aGVuIHdlIGdldCBoZXJlLiBIZW5jZSwgd2UKKwkJICoganVzdCBuZWVkIHRvIGRlbGV0ZSB0aGUgdGltZXIgYW5kIGZyZWUgdGhlIGFnZ3JlZ2F0aW9uCisJCSAqIGluZm87IHdlIHdvbid0IGJlIHRlbGxpbmcgdGhlIHBlZXIgYWJvdXQgaXQgdGhlbiBidXQgdGhhdAorCQkgKiBkb2Vzbid0IG1hdHRlciBpZiB3ZSdyZSBub3QgdGFsa2luZyB0byBpdCBhZ2FpbiBhbnl3YXkuCisJCSAqLworCQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldOworCQlpZiAodGlkX3R4KSB7CisJCQlkZWxfdGltZXJfc3luYygmdGlkX3R4LT5hZGRiYV9yZXNwX3RpbWVyKTsKKwkJCS8qCisJCQkgKiBTVEEgcmVtb3ZlZCB3aGlsZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGJlaW5nCisJCQkgKiBzdGFydGVkPyBCaXQgb2RkLCBidXQgcHVyZ2UgZnJhbWVzIGFueXdheS4KKwkJCSAqLworCQkJc2tiX3F1ZXVlX3B1cmdlKCZ0aWRfdHgtPnBlbmRpbmcpOworCQkJa2ZyZWUodGlkX3R4KTsKKwkJfQogCX0KIAogCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKQEAgLTI0Niw4ICsyODEsNiBAQAogCQkgKiBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiByZWZlciB0bwogCQkgKiBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCBmb3IgdXNlYWdlICovCiAJCXN0YS0+dGltZXJfdG9fdGlkW2ldID0gaTsKLQkJLyogdGlkIHRvIHR4IHF1ZXVlOiBpbml0aWFsaXplIGFjY29yZGluZyB0byBIVyAoMCBpcyB2YWxpZCkgKi8KLQkJc3RhLT50aWRfdG9fdHhfcVtpXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOwogCQkvKiByeCAqLwogCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID0gSFRfQUdHX1NUQVRFX0lETEU7CiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBlNDlhNWI5Li41NTM0ZDQ4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMzQsNiArMzQsOSBAQAogICogQFdMQU5fU1RBX0NMRUFSX1BTX0ZJTFQ6IENsZWFyIFBTIGZpbHRlciBpbiBoYXJkd2FyZSAodXNpbmcgdGhlCiAgKglJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQgY29udHJvbCBmbGFnKSB3aGVuIHRoZSBuZXh0CiAgKglmcmFtZSB0byB0aGlzIHN0YXRpb24gaXMgdHJhbnNtaXR0ZWQuCisgKiBAV0xBTl9TVEFfTUZQOiBNYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gaXMgdXNlZCB3aXRoIHRoaXMgU1RBLgorICogQFdMQU5fU1RBX1NVU1BFTkQ6IFNldC9jbGVhcmVkIGR1cmluZyBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlLgorICoJVXNlZCB0byBkZW55IEFEREJBIHJlcXVlc3RzIChib3RoIFRYIGFuZCBSWCkuCiAgKi8KIGVudW0gaWVlZTgwMjExX3N0YV9pbmZvX2ZsYWdzIHsKIAlXTEFOX1NUQV9BVVRICQk9IDE8PDAsCkBAIC00Niw2ICs0OSw4IEBACiAJV0xBTl9TVEFfV0RTCQk9IDE8PDcsCiAJV0xBTl9TVEFfUFNQT0xMCQk9IDE8PDgsCiAJV0xBTl9TVEFfQ0xFQVJfUFNfRklMVAk9IDE8PDksCisJV0xBTl9TVEFfTUZQCQk9IDE8PDEwLAorCVdMQU5fU1RBX1NVU1BFTkQJPSAxPDwxMQogfTsKIAogI2RlZmluZSBTVEFfVElEX05VTSAxNgpAQCAtNjMsMTcgKzY4LDE4IEBACiAjZGVmaW5lIEhUX0FHR19TVEFURV9PUEVSQVRJT05BTAkoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8CVwKIAkJCQkJIEhUX0FEREJBX0RSVl9SRUFEWV9NU0sgfAlcCiAJCQkJCSBIVF9BRERCQV9SRUNFSVZFRF9NU0spCi0jZGVmaW5lIEhUX0FHR19TVEFURV9ERUJVR0ZTX0NUTAlCSVQoNykKIAogLyoqCiAgKiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IC0gVElEIGFnZ3JlZ2F0aW9uIGluZm9ybWF0aW9uIChUeCkuCiAgKgogICogQGFkZGJhX3Jlc3BfdGltZXI6IHRpbWVyIGZvciBwZWVyJ3MgcmVzcG9uc2UgdG8gYWRkYmEgcmVxdWVzdAorICogQHBlbmRpbmc6IHBlbmRpbmcgZnJhbWVzIHF1ZXVlIC0tIHVzZSBzdGEncyBzcGlubG9jayB0byBwcm90ZWN0CiAgKiBAc3NuOiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZXhwZWN0ZWQgdG8gYmUgYWdncmVnYXRlZC4KICAqIEBkaWFsb2dfdG9rZW46IGRpYWxvZyB0b2tlbiBmb3IgYWdncmVnYXRpb24gc2Vzc2lvbgogICovCiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBhZGRiYV9yZXNwX3RpbWVyOworCXN0cnVjdCBza19idWZmX2hlYWQgcGVuZGluZzsKIAl1MTYgc3NuOwogCXU4IGRpYWxvZ190b2tlbjsKIH07CkBAIC04Nyw4ICs5Myw5IEBACiAgKiBAc3RvcmVkX21wZHVfbnVtOiBudW1iZXIgb2YgTVBEVXMgaW4gcmVvcmRlcmluZyBidWZmZXIKICAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGJ1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgaW5jb21pbmcgQS1NUERVcwotICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlLgorICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlIChpbiBUVXMpLgogICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCisgKiBAc2h1dGRvd246IHRoaXMgc2Vzc2lvbiBpcyBiZWluZyBzaHV0IGRvd24gZHVlIHRvIFNUQSByZW1vdmFsCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfcnggewogCXN0cnVjdCBza19idWZmICoqcmVvcmRlcl9idWY7CkBAIC05OSw2ICsxMDYsNyBAQAogCXUxNiBidWZfc2l6ZTsKIAl1MTYgdGltZW91dDsKIAl1OCBkaWFsb2dfdG9rZW47CisJYm9vbCBzaHV0ZG93bjsKIH07CiAKIC8qKgpAQCAtMTk4LDcgKzIwNiw2IEBACiAgKiBAdGlkX3NlcTogcGVyLVRJRCBzZXF1ZW5jZSBudW1iZXJzIGZvciBzZW5kaW5nIHRvIHRoaXMgU1RBCiAgKiBAYW1wZHVfbWxtZTogQS1NUERVIHN0YXRlIG1hY2hpbmUgc3RhdGUKICAqIEB0aW1lcl90b190aWQ6IGlkZW50aXR5IG1hcHBpbmcgdG8gSUQgdGltZXJzCi0gKiBAdGlkX3RvX3R4X3E6IG1hcCB0aWQgdG8gdHggcXVldWUKICAqIEBsbGlkOiBMb2NhbCBsaW5rIElECiAgKiBAcGxpZDogUGVlciBsaW5rIElECiAgKiBAcmVhc29uOiBDYW5jZWwgcmVhc29uIG9uIFBMSU5LX0hPTERJTkcgc3RhdGUKQEAgLTI3Myw3ICsyODAsNiBAQAogCSAqLwogCXN0cnVjdCBzdGFfYW1wZHVfbWxtZSBhbXBkdV9tbG1lOwogCXU4IHRpbWVyX3RvX3RpZFtTVEFfVElEX05VTV07Ci0JdTggdGlkX3RvX3R4X3FbU1RBX1RJRF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAkvKgpAQCAtMzgyLDggKzM4OCw2IEBACiB9CiAKIAotLyogTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudGx5IHJlZ2lzdGVyZWQgc3RhdGlvbnMgKi8KLSNkZWZpbmUgTUFYX1NUQV9DT1VOVCAyMDA3CiAKICNkZWZpbmUgU1RBX0hBU0hfU0laRSAyNTYKICNkZWZpbmUgU1RBX0hBU0goc3RhKSAoc3RhWzVdKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCAzN2UzZDVlZi4uM2ZiMDRhOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2RlZmluZSBJRUVFODAyMTFfVFhfT0sJCTAKICNkZWZpbmUgSUVFRTgwMjExX1RYX0FHQUlOCTEKLSNkZWZpbmUgSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU4JMgorI2RlZmluZSBJRUVFODAyMTFfVFhfUEVORElORwkyCiAKIC8qIG1pc2MgdXRpbHMgKi8KIApAQCAtMTkyLDcgKzE5MiwxOSBAQAogCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAKIAlpZiAodW5saWtlbHkodHgtPmxvY2FsLT5zd19zY2FubmluZykgJiYKLQkgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCS8qCisJCSAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeQorCQkgKiB0aGUgc2xlZXAgc3RhdGUgdG8gdGhlIEFQKSBhbmQgcHJvYmUgcmVxdWVzdHMgKGZvciB0aGUKKwkJICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmUKKwkJICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvCisJCSAqIG5vbmV0aGVsZXNzLCBkcm9wIHRoZW0gdG8gYXZvaWQgc2VuZGluZyB0aGVtCisJCSAqIG9mZi1jaGFubmVsLiBTZWUgdGhlIGxpbmsgYmVsb3cgYW5kCisJCSAqIGllZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCisJCSAqCisJCSAqIGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9nbWFuZS5saW51eC5rZXJuZWwud2lyZWxlc3MuZ2VuZXJhbC8zMDA4OQorCQkgKi8KIAkJcmV0dXJuIFRYX0RST1A7CiAKIAlpZiAodHgtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQpAQCAtMzMwLDYgKzM0MiwyMiBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfdXNlX21mcChfX2xlMTYgZmMsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGEgPT0gTlVMTCB8fCAhdGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9NRlApKQorCQlyZXR1cm4gMDsKKworCWlmICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKQorCQkJCQkgICAgc2tiLT5kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKIGllZWU4MDIxMV90eF9oX3VuaWNhc3RfcHNfYnVmKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CkBAIC00MDksMTEgKzQzNywxNyBAQAogCQl0eC0+a2V5ID0gTlVMTDsKIAllbHNlIGlmICh0eC0+c3RhICYmIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnN0YS0+a2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpKSkKKwkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICgoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zZGF0YS0+ZGVmYXVsdF9rZXkpKSkKIAkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICh0eC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKIAkJICh0eC0+c2tiLT5wcm90b2NvbCAhPSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSAmJgotCQkgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CisJCSAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgJiYKKwkJICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcikgfHwKKwkJICAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAgIHR4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3ModHgtPnN0YSwgV0xBTl9TVEFfTUZQKSkpKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmVuY3J5cHRlZCk7CiAJCXJldHVybiBUWF9EUk9QOwogCX0gZWxzZQpAQCAtNDI4LDEwICs0NjIsMTkgQEAKIAkJCWlmIChpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJCWJyZWFrOwogCQljYXNlIEFMR19US0lQOgotCQljYXNlIEFMR19DQ01QOgogCQkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQkJdHgtPmtleSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBBTEdfQ0NNUDoKKwkJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCQkgICAgIWllZWU4MDIxMV91c2VfbWZwKGhkci0+ZnJhbWVfY29udHJvbCwgdHgtPnN0YSwKKwkJCQkJICAgICAgIHR4LT5za2IpKQorCQkJCXR4LT5rZXkgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgQUxHX0FFU19DTUFDOgorCQkJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJCXR4LT5rZXkgPSBOVUxMOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTY1OCwxNyArNzAxLDYyIEBACiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9mcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJsZW4sCisJCQkgICAgICBpbnQgZnJhZ190aHJlc2hvbGQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBza2IsICp0bXA7CisJaW50IHBlcl9mcmFnbSA9IGZyYWdfdGhyZXNob2xkIC0gaGRybGVuIC0gRkNTX0xFTjsKKwlpbnQgcG9zID0gaGRybGVuICsgcGVyX2ZyYWdtOworCWludCByZW0gPSBza2ItPmxlbiAtIGhkcmxlbiAtIHBlcl9mcmFnbTsKKworCWlmIChXQVJOX09OKHJlbSA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChyZW0pIHsKKwkJaW50IGZyYWdsZW4gPSBwZXJfZnJhZ207CisKKwkJaWYgKGZyYWdsZW4gPiByZW0pCisJCQlmcmFnbGVuID0gcmVtOworCQlyZW0gLT0gZnJhZ2xlbjsKKwkJdG1wID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+dHhfaGVhZHJvb20gKworCQkJCSAgICBmcmFnX3RocmVzaG9sZCArCisJCQkJICAgIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NICsKKwkJCQkgICAgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00pOworCQlpZiAoIXRtcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQl0YWlsLT5uZXh0ID0gdG1wOworCQl0YWlsID0gdG1wOworCQlza2JfcmVzZXJ2ZSh0bXAsIGxvY2FsLT50eF9oZWFkcm9vbSArCisJCQkJIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NKTsKKwkJLyogY29weSBjb250cm9sIGluZm9ybWF0aW9uICovCisJCW1lbWNweSh0bXAtPmNiLCBza2ItPmNiLCBzaXplb2YodG1wLT5jYikpOworCQlza2JfY29weV9xdWV1ZV9tYXBwaW5nKHRtcCwgc2tiKTsKKwkJdG1wLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7CisJCXRtcC0+ZG9fbm90X2VuY3J5cHQgPSBza2ItPmRvX25vdF9lbmNyeXB0OworCQl0bXAtPmRldiA9IHNrYi0+ZGV2OworCQl0bXAtPmlpZiA9IHNrYi0+aWlmOworCisJCS8qIGNvcHkgaGVhZGVyIGFuZCBkYXRhICovCisJCW1lbWNweShza2JfcHV0KHRtcCwgaGRybGVuKSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQltZW1jcHkoc2tiX3B1dCh0bXAsIGZyYWdsZW4pLCBza2ItPmRhdGEgKyBwb3MsIGZyYWdsZW4pOworCisJCXBvcyArPSBmcmFnbGVuOworCX0KKworCXNrYi0+bGVuID0gaGRybGVuICsgcGVyX2ZyYWdtOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5za2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0+c2tiLT5kYXRhOwotCXNpemVfdCBoZHJsZW4sIHBlcl9mcmFnbSwgbnVtX2ZyYWdtLCBwYXlsb2FkX2xlbiwgbGVmdDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqKmZyYWdzLCAqZmlyc3QsICpmcmFnOwotCWludCBpOwotCXUxNiBzZXE7Ci0JdTggKnBvczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLT5kYXRhOwogCWludCBmcmFnX3RocmVzaG9sZCA9IHR4LT5sb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7CisJaW50IGhkcmxlbjsKKwlpbnQgZnJhZ251bTsKIAogCWlmICghKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSkKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwpAQCAtNjgxLDU4ICs3NjksMzUgQEAKIAlpZiAoV0FSTl9PTihpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKQogCQlyZXR1cm4gVFhfRFJPUDsKIAotCWZpcnN0ID0gdHgtPnNrYjsKLQogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKLQlwYXlsb2FkX2xlbiA9IGZpcnN0LT5sZW4gLSBoZHJsZW47Ci0JcGVyX2ZyYWdtID0gZnJhZ190aHJlc2hvbGQgLSBoZHJsZW4gLSBGQ1NfTEVOOwotCW51bV9mcmFnbSA9IERJVl9ST1VORF9VUChwYXlsb2FkX2xlbiwgcGVyX2ZyYWdtKTsKIAotCWZyYWdzID0ga3phbGxvYyhudW1fZnJhZ20gKiBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOwotCWlmICghZnJhZ3MpCi0JCWdvdG8gZmFpbDsKKwkvKiBpbnRlcm5hbCBlcnJvciwgd2h5IGlzIFRYX0ZSQUdNRU5URUQgc2V0PyAqLworCWlmIChXQVJOX09OKHNrYi0+bGVuIDw9IGZyYWdfdGhyZXNob2xkKSkKKwkJcmV0dXJuIFRYX0RST1A7CiAKLQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKTsKLQlzZXEgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX1NFUTsKLQlwb3MgPSBmaXJzdC0+ZGF0YSArIGhkcmxlbiArIHBlcl9mcmFnbTsKLQlsZWZ0ID0gcGF5bG9hZF9sZW4gLSBwZXJfZnJhZ207Ci0JZm9yIChpID0gMDsgaSA8IG51bV9mcmFnbSAtIDE7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZmhkcjsKLQkJc2l6ZV90IGNvcHlsZW47CisJLyoKKwkgKiBOb3cgZnJhZ21lbnQgdGhlIGZyYW1lLiBUaGlzIHdpbGwgYWxsb2NhdGUgYWxsIHRoZSBmcmFnbWVudHMgYW5kCisJICogY2hhaW4gdGhlbSAodXNpbmcgc2tiIGFzIHRoZSBmaXJzdCBmcmFnbWVudCkgdG8gc2tiLT5uZXh0LgorCSAqIER1cmluZyB0cmFuc21pc3Npb24sIHdlIHdpbGwgcmVtb3ZlIHRoZSBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQKKwkgKiBmcmFnbWVudHMgZnJvbSB0aGlzIGxpc3QuIFdoZW4gdGhlIGxvdy1sZXZlbCBkcml2ZXIgcmVqZWN0cyBvbmUKKwkgKiBvZiB0aGUgZnJhZ21lbnRzIHRoZW4gd2Ugd2lsbCBzaW1wbHkgcHJldGVuZCB0byBhY2NlcHQgdGhlIHNrYgorCSAqIGJ1dCBzdG9yZSBpdCBhd2F5IGFzIHBlbmRpbmcuCisJICovCisJaWYgKGllZWU4MDIxMV9mcmFnbWVudCh0eC0+bG9jYWwsIHNrYiwgaGRybGVuLCBmcmFnX3RocmVzaG9sZCkpCisJCXJldHVybiBUWF9EUk9QOwogCi0JCWlmIChsZWZ0IDw9IDApCi0JCQlnb3RvIGZhaWw7CisJLyogdXBkYXRlIGR1cmF0aW9uL3NlcS9mbGFncyBvZiBmcmFnbWVudHMgKi8KKwlmcmFnbnVtID0gMDsKKwlkbyB7CisJCWludCBuZXh0X2xlbjsKKwkJY29uc3QgX19sZTE2IG1vcmVmcmFncyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUyk7CiAKLQkJLyogcmVzZXJ2ZSBlbm91Z2ggZXh0cmEgaGVhZCBhbmQgdGFpbCByb29tIGZvciBwb3NzaWJsZQotCQkgKiBlbmNyeXB0aW9uICovCi0JCWZyYWcgPSBmcmFnc1tpXSA9Ci0JCQlkZXZfYWxsb2Nfc2tiKHR4LT5sb2NhbC0+dHhfaGVhZHJvb20gKwotCQkJCSAgICAgIGZyYWdfdGhyZXNob2xkICsKLQkJCQkgICAgICBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTSArCi0JCQkJICAgICAgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00pOwotCQlpZiAoIWZyYWcpCi0JCQlnb3RvIGZhaWw7CisJCWhkciA9ICh2b2lkICopc2tiLT5kYXRhOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JCS8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBmcmFnbWVudHMgdXNlIHRoZSBzYW1lIHByaW9yaXR5IHNvCi0JCSAqIHRoYXQgdGhleSBlbmQgdXAgdXNpbmcgdGhlIHNhbWUgVFggcXVldWUgKi8KLQkJZnJhZy0+cHJpb3JpdHkgPSBmaXJzdC0+cHJpb3JpdHk7Ci0KLQkJc2tiX3Jlc2VydmUoZnJhZywgdHgtPmxvY2FsLT50eF9oZWFkcm9vbSArCi0JCQkJICBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTSk7Ci0KLQkJLyogY29weSBUWCBpbmZvcm1hdGlvbiAqLwotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihmcmFnKTsKLQkJbWVtY3B5KGluZm8sIGZpcnN0LT5jYiwgc2l6ZW9mKGZyYWctPmNiKSk7Ci0KLQkJLyogY29weS9maWxsIGluIDgwMi4xMSBoZWFkZXIgKi8KLQkJZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KGZyYWcsIGhkcmxlbik7Ci0JCW1lbWNweShmaGRyLCBmaXJzdC0+ZGF0YSwgaGRybGVuKTsKLQkJZmhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihzZXEgfCAoKGkgKyAxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpKTsKLQotCQlpZiAoaSA9PSBudW1fZnJhZ20gLSAyKSB7Ci0JCQkvKiBjbGVhciBNT1JFRlJBR1MgYml0IGZvciB0aGUgbGFzdCBmcmFnbWVudCAqLwotCQkJZmhkci0+ZnJhbWVfY29udHJvbCAmPSBjcHVfdG9fbGUxNih+SUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKTsKLQkJfSBlbHNlIHsKKwkJaWYgKHNrYi0+bmV4dCkgeworCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IG1vcmVmcmFnczsKKwkJCW5leHRfbGVuID0gc2tiLT5uZXh0LT5sZW47CiAJCQkvKgogCQkJICogTm8gbXVsdGktcmF0ZSByZXRyaWVzIGZvciBmcmFnbWVudGVkIGZyYW1lcywgdGhhdAogCQkJICogd291bGQgY29tcGxldGVseSB0aHJvdyBvZmYgdGhlIE5BViBhdCBvdGhlciBTVEFzLgpAQCAtNzQzLDM3ICs4MDgsMTYgQEAKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbNF0uaWR4ID0gLTE7CiAJCQlCVUlMRF9CVUdfT04oSUVFRTgwMjExX1RYX01BWF9SQVRFUyAhPSA1KTsKIAkJCWluZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKKwkJfSBlbHNlIHsKKwkJCWhkci0+ZnJhbWVfY29udHJvbCAmPSB+bW9yZWZyYWdzOworCQkJbmV4dF9sZW4gPSAwOwogCQl9Ci0KLQkJLyogY29weSBkYXRhICovCi0JCWNvcHlsZW4gPSBsZWZ0ID4gcGVyX2ZyYWdtID8gcGVyX2ZyYWdtIDogbGVmdDsKLQkJbWVtY3B5KHNrYl9wdXQoZnJhZywgY29weWxlbiksIHBvcywgY29weWxlbik7Ci0KLQkJc2tiX2NvcHlfcXVldWVfbWFwcGluZyhmcmFnLCBmaXJzdCk7Ci0KLQkJZnJhZy0+ZG9fbm90X2VuY3J5cHQgPSBmaXJzdC0+ZG9fbm90X2VuY3J5cHQ7Ci0JCWZyYWctPmRldiA9IGZpcnN0LT5kZXY7Ci0JCWZyYWctPmlpZiA9IGZpcnN0LT5paWY7Ci0KLQkJcG9zICs9IGNvcHlsZW47Ci0JCWxlZnQgLT0gY29weWxlbjsKLQl9Ci0Jc2tiX3RyaW0oZmlyc3QsIGhkcmxlbiArIHBlcl9mcmFnbSk7Ci0KLQl0eC0+bnVtX2V4dHJhX2ZyYWcgPSBudW1fZnJhZ20gLSAxOwotCXR4LT5leHRyYV9mcmFnID0gZnJhZ3M7CisJCWhkci0+ZHVyYXRpb25faWQgPSBpZWVlODAyMTFfZHVyYXRpb24odHgsIDAsIG5leHRfbGVuKTsKKwkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihmcmFnbnVtICYgSUVFRTgwMjExX1NDVExfRlJBRyk7CisJCWZyYWdudW0rKzsKKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7Ci0KLSBmYWlsOgotCWlmIChmcmFncykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZyYWdtIC0gMTsgaSsrKQotCQkJaWYgKGZyYWdzW2ldKQotCQkJCWRldl9rZnJlZV9za2IoZnJhZ3NbaV0pOwotCQlrZnJlZShmcmFncyk7Ci0JfQotCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF9mcmFnbWVudCk7Ci0JcmV0dXJuIFRYX0RST1A7CiB9CiAKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCkBAIC03ODksNiArODMzLDggQEAKIAkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fdGtpcF9lbmNyeXB0KHR4KTsKIAljYXNlIEFMR19DQ01QOgogCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQodHgpOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19lbmNyeXB0KHR4KTsKIAl9CiAKIAkvKiBub3QgcmVhY2hlZCAqLwpAQCAtNzk5LDI3ICs4NDUsMTkgQEAKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtPnNrYi0+ZGF0YTsKLQlpbnQgbmV4dF9sZW4sIGk7Ci0JaW50IGdyb3VwX2FkZHIgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBuZXh0X2xlbjsKKwlib29sIGdyb3VwX2FkZHI7CiAKLQlpZiAoISh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfRlJBR01FTlRFRCkpIHsKLQkJaGRyLT5kdXJhdGlvbl9pZCA9IGllZWU4MDIxMV9kdXJhdGlvbih0eCwgZ3JvdXBfYWRkciwgMCk7Ci0JCXJldHVybiBUWF9DT05USU5VRTsKLQl9CisJZG8geworCQloZHIgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJCW5leHRfbGVuID0gc2tiLT5uZXh0ID8gc2tiLT5uZXh0LT5sZW4gOiAwOworCQlncm91cF9hZGRyID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CiAKLQloZHItPmR1cmF0aW9uX2lkID0gaWVlZTgwMjExX2R1cmF0aW9uKHR4LCBncm91cF9hZGRyLAotCQkJCQkgICAgICB0eC0+ZXh0cmFfZnJhZ1swXS0+bGVuKTsKLQotCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQlpZiAoaSArIDEgPCB0eC0+bnVtX2V4dHJhX2ZyYWcpCi0JCQluZXh0X2xlbiA9IHR4LT5leHRyYV9mcmFnW2kgKyAxXS0+bGVuOwotCQllbHNlCi0JCQluZXh0X2xlbiA9IDA7Ci0KLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtPmV4dHJhX2ZyYWdbaV0tPmRhdGE7Ci0JCWhkci0+ZHVyYXRpb25faWQgPSBpZWVlODAyMTFfZHVyYXRpb24odHgsIDAsIG5leHRfbGVuKTsKLQl9CisJCWhkci0+ZHVyYXRpb25faWQgPQorCQkJaWVlZTgwMjExX2R1cmF0aW9uKHR4LCBncm91cF9hZGRyLCBuZXh0X2xlbik7CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtODI3LDI0ICs4NjUsMjAgQEAKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfdHhfaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCWludCBpOworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwogCiAJaWYgKCF0eC0+c3RhKQogCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAKIAl0eC0+c3RhLT50eF9wYWNrZXRzKys7Ci0JdHgtPnN0YS0+dHhfZnJhZ21lbnRzKys7Ci0JdHgtPnN0YS0+dHhfYnl0ZXMgKz0gdHgtPnNrYi0+bGVuOwotCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQl0eC0+c3RhLT50eF9mcmFnbWVudHMgKz0gdHgtPm51bV9leHRyYV9mcmFnOwotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspCi0JCQl0eC0+c3RhLT50eF9ieXRlcyArPSB0eC0+ZXh0cmFfZnJhZ1tpXS0+bGVuOwotCX0KKwlkbyB7CisJCXR4LT5zdGEtPnR4X2ZyYWdtZW50cysrOworCQl0eC0+c3RhLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLQogLyogYWN0dWFsIHRyYW5zbWl0IHBhdGggKi8KIAogLyoKQEAgLTk1MCw5ICs5ODQsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCiAJaW50IGhkcmxlbiwgdGlkOwogCXU4ICpxYywgKnN0YXRlOworCWJvb2wgcXVldWVkID0gZmFsc2U7CiAKIAltZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTsKIAl0eC0+c2tiID0gc2tiOwpAQCAtOTc5LDE3ICsxMDEzLDUzIEBACiAJCSAqLwogCX0KIAorCS8qCisJICogSWYgdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlIGFueXdoZXJlLCBhbmQgd2UgZ2V0IGhlcmUsCisJICogd2UgYXJlIGRvaW5nIHRoZSBuZWVkZWQgcHJvY2Vzc2luZywgc28gcmVtb3ZlIHRoZSBmbGFnCisJICogbm93LgorCSAqLworCWluZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkc7CisKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJdHgtPnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CiAKLQlpZiAodHgtPnN0YSAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmICh0eC0+c3RhICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKKwogCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl0aWQgPSAqcWMgJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKIAorCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHgtPnN0YS0+bG9jaywgZmxhZ3MpOworCQkvKgorCQkgKiBYWFg6IFRoaXMgc3BpbmxvY2sgY291bGQgYmUgZmFpcmx5IGV4cGVuc2l2ZSwgYnV0IHNlZSB0aGUKKwkJICoJY29tbWVudCBpbiBhZ2ctdHguYzppZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKCkuCisJCSAqCU9uZSB3YXkgdG8gc29sdmUgdGhpcyB3b3VsZCBiZSB0byBkbyBzb21ldGhpbmcgUkNVLWxpa2UKKwkJICoJZm9yIG1hbmFnaW5nIHRoZSB0aWRfdHggc3RydWN0IGFuZCB1c2luZyBhdG9taWMgYml0b3BzCisJCSAqCWZvciB0aGUgYWN0dWFsIHN0YXRlIC0tIGJ5IGludHJvZHVjaW5nIGFuIGFjdHVhbAorCQkgKgknb3BlcmF0aW9uYWwnIGJpdCB0aGF0IHdvdWxkIGJlIHBvc3NpYmxlLiBJdCB3b3VsZAorCQkgKglyZXF1aXJlIGNoYW5naW5nIGllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwoKSB0bworCQkgKglzZXQgdGhhdCBiaXQsIGFuZCBjaGFuZ2luZyB0aGUgd2F5IHRpZF90eCBpcyBtYW5hZ2VkCisJCSAqCWV2ZXJ5d2hlcmUsIGluY2x1ZGluZyByYWNlcyBiZXR3ZWVuIHRoYXQgYml0IGFuZAorCQkgKgl0aWRfdHggZ29pbmcgYXdheSAodGlkX3R4IGJlaW5nIGFkZGVkIGNhbiBiZSBlYXNpbHkKKwkJICoJY29tbWl0dGVkIHRvIG1lbW9yeSBiZWZvcmUgdGhlICdvcGVyYXRpb25hbCcgYml0KS4KKwkJICovCisJCXRpZF90eCA9IHR4LT5zdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CiAJCXN0YXRlID0gJnR4LT5zdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKQorCQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9BTVBEVTsKKwkJfSBlbHNlIGlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKKwkJCS8qIGluIHByb2dyZXNzICovCisJCQlxdWV1ZWQgPSB0cnVlOworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOworCQkJX19za2JfcXVldWVfdGFpbCgmdGlkX3R4LT5wZW5kaW5nLCBza2IpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4LT5zdGEtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAodW5saWtlbHkocXVldWVkKSkKKwkJCXJldHVybiBUWF9RVUVVRUQ7CiAJfQogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CkBAIC0xMDQwLDUxICsxMTEwLDU1IEBACiAJfQogCWlmICh1bmxpa2VseSghZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JLyogaW5pdGlhbGlzZXMgdHggd2l0aCBjb250cm9sICovCisJLyoKKwkgKiBpbml0aWFsaXNlcyB0eCB3aXRoIGNvbnRyb2wKKwkgKgorCSAqIHJldHVybiB2YWx1ZSBpcyBzYWZlIHRvIGlnbm9yZSBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbgorCSAqIGNhbiBvbmx5IGJlIGludm9rZWQgZm9yIG11bHRpY2FzdCBmcmFtZXMKKwkgKgorCSAqIFhYWDogY2xlYW4gdXAKKwkgKi8KIAlfX2llZWU4MDIxMV90eF9wcmVwYXJlKHR4LCBza2IsIGRldik7CiAJZGV2X3B1dChkZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQorc3RhdGljIGludCBfX2llZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKipza2JwLAorCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYnAsICpuZXh0OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlpbnQgcmV0LCBpOworCWludCByZXQsIGxlbjsKKwlib29sIGZyYWdtID0gZmFsc2U7CiAKLQlpZiAoc2tiKSB7Ci0JCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBza2IpKQotCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKLQkJaW5mbyA9ICBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCQlyZXQgPSBsb2NhbC0+b3BzLT50eChsb2NhbF90b19odyhsb2NhbCksIHNrYik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gSUVFRTgwMjExX1RYX0FHQUlOOwotCQlsb2NhbC0+bWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQlpZWVlODAyMTFfbGVkX3R4KGxvY2FsLCAxKTsKLQl9Ci0JaWYgKHR4LT5leHRyYV9mcmFnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaWYgKCF0eC0+ZXh0cmFfZnJhZ1tpXSkKLQkJCQljb250aW51ZTsKLQkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5leHRyYV9mcmFnW2ldKTsKKwl3aGlsZSAoc2tiKSB7CisJCWlmIChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCgmbG9jYWwtPmh3LAorCQkJCQkgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpKQorCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9QRU5ESU5HOworCisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwkJaWYgKGZyYWdtKQogCQkJaW5mby0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQgfAogCQkJCQkgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCk7Ci0JCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwKLQkJCQkJCSAgIHR4LT5leHRyYV9mcmFnW2ldKSkKLQkJCQlyZXR1cm4gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU47CiAKLQkJCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwKLQkJCQkJICAgIHR4LT5leHRyYV9mcmFnW2ldKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOOwotCQkJbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJCWllZWU4MDIxMV9sZWRfdHgobG9jYWwsIDEpOwotCQkJdHgtPmV4dHJhX2ZyYWdbaV0gPSBOVUxMOworCQluZXh0ID0gc2tiLT5uZXh0OworCQlsZW4gPSBza2ItPmxlbjsKKwkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLCBza2IpOworCQlpZiAoV0FSTl9PTihyZXQgIT0gTkVUREVWX1RYX09LICYmIHNrYi0+bGVuICE9IGxlbikpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJfQotCQlrZnJlZSh0eC0+ZXh0cmFfZnJhZyk7Ci0JCXR4LT5leHRyYV9mcmFnID0gTlVMTDsKKwkJaWYgKHJldCAhPSBORVRERVZfVFhfT0spCisJCQlyZXR1cm4gSUVFRTgwMjExX1RYX0FHQUlOOworCQkqc2ticCA9IHNrYiA9IG5leHQ7CisJCWllZWU4MDIxMV9sZWRfdHgobG9jYWwsIDEpOworCQlmcmFnbSA9IHRydWU7CiAJfQorCiAJcmV0dXJuIElFRUU4MDIxMV9UWF9PSzsKIH0KIApAQCAtMTA5Niw3ICsxMTcwLDYgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKIAlpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0RST1A7Ci0JaW50IGk7CiAKICNkZWZpbmUgQ0FMTF9UWEgodHhoKQkJXAogCXJlcyA9IHR4aCh0eCk7CQlcCkBAIC0xMTIwLDExICsxMTkzLDEzIEBACiAgdHhoX2RvbmU6CiAJaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9EUk9QKSkgewogCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3ApOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykKLQkJCWlmICh0eC0+ZXh0cmFfZnJhZ1tpXSkKLQkJCQlkZXZfa2ZyZWVfc2tiKHR4LT5leHRyYV9mcmFnW2ldKTsKLQkJa2ZyZWUodHgtPmV4dHJhX2ZyYWcpOworCQl3aGlsZSAoc2tiKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDsKKworCQkJbmV4dCA9IHNrYi0+bmV4dDsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IG5leHQ7CisJCX0KIAkJcmV0dXJuIC0xOwogCX0gZWxzZSBpZiAodW5saWtlbHkocmVzID09IFRYX1FVRVVFRCkpIHsKIAkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19xdWV1ZWQpOwpAQCAtMTEzNCwyMyArMTIwOSwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgYm9vbCB0eHBlbmRpbmcpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7CiAJaWVlZTgwMjExX3R4X3Jlc3VsdCByZXNfcHJlcGFyZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQsIHJldHJpZXM7CiAJdTE2IHF1ZXVlOwogCiAJcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAotCVdBUk5fT04odGVzdF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpOworCVdBUk5fT04oIXR4cGVuZGluZyAmJiAhc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pKTsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IDEwKSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm47CiAJfQogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTE1OCwxMCArMTIzNiwxMyBAQAogCS8qIGluaXRpYWxpc2VzIHR4ICovCiAJcmVzX3ByZXBhcmUgPSBfX2llZWU4MDIxMV90eF9wcmVwYXJlKCZ0eCwgc2tiLCBkZXYpOwogCi0JaWYgKHJlc19wcmVwYXJlID09IFRYX0RST1ApIHsKKwlpZiAodW5saWtlbHkocmVzX3ByZXBhcmUgPT0gVFhfRFJPUCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KHJlc19wcmVwYXJlID09IFRYX1FVRVVFRCkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKIAl9CiAKIAlzdGEgPSB0eC5zdGE7CkBAIC0xMTcxLDExICsxMjUyLDEzIEBACiAJaWYgKGludm9rZV90eF9oYW5kbGVycygmdHgpKQogCQlnb3RvIG91dDsKIAotcmV0cnk6Ci0JcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsIHNrYiwgJnR4KTsKLQlpZiAocmV0KSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCAqc3RvcmU7Ci0KKwlyZXRyaWVzID0gMDsKKyByZXRyeToKKwlyZXQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgJnR4LnNrYiwgdHguc3RhKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgSUVFRTgwMjExX1RYX09LOgorCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9UWF9BR0FJTjoKIAkJLyoKIAkJICogU2luY2UgdGhlcmUgYXJlIG5vIGZyYWdtZW50ZWQgZnJhbWVzIG9uIEEtTVBEVQogCQkgKiBxdWV1ZXMsIHRoZXJlJ3Mgbm8gcmVhc29uIGZvciBhIGRyaXZlciB0byByZWplY3QKQEAgLTExODMsNDYgKzEyNjYsNTcgQEAKIAkJICovCiAJCWlmIChXQVJOX09OKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpCiAJCQlnb3RvIGRyb3A7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgSUVFRTgwMjExX1RYX1BFTkRJTkc6CisJCXNrYiA9IHR4LnNrYjsKIAotCQlzdG9yZSA9ICZsb2NhbC0+cGVuZGluZ19wYWNrZXRbcXVldWVdOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAotCQlpZiAocmV0ID09IElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOKQotCQkJc2tiID0gTlVMTDsKKwkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpKSB7CisJCQlkbyB7CisJCQkJbmV4dCA9IHNrYi0+bmV4dDsKKwkJCQlza2ItPm5leHQgPSBOVUxMOworCQkJCWlmICh1bmxpa2VseSh0eHBlbmRpbmcpKQorCQkJCQlza2JfcXVldWVfaGVhZCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLAorCQkJCQkJICAgICAgIHNrYik7CisJCQkJZWxzZQorCQkJCQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLAorCQkJCQkJICAgICAgIHNrYik7CisJCQl9IHdoaWxlICgoc2tiID0gbmV4dCkpOwogCi0JCXNldF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZyk7Ci0JCXNtcF9tYigpOwotCQkvKgotCQkgKiBXaGVuIHRoZSBkcml2ZXIgZ2V0cyBvdXQgb2YgYnVmZmVycyBkdXJpbmcgc2VuZGluZyBvZgotCQkgKiBmcmFnbWVudHMgYW5kIGNhbGxzIGllZWU4MDIxMV9zdG9wX3F1ZXVlLCB0aGUgbmV0aWYKLQkJICogc3VicXVldWUgaXMgc3RvcHBlZC4gVGhlcmUgaXMsIGhvd2V2ZXIsIGEgc21hbGwgd2luZG93Ci0JCSAqIGluIHdoaWNoIHRoZSBQRU5ESU5HIGJpdCBpcyBub3QgeWV0IHNldC4gSWYgYSBidWZmZXIKLQkJICogZ2V0cyBhdmFpbGFibGUgaW4gdGhhdCB3aW5kb3cgKGkuZS4gZHJpdmVyIGNhbGxzCi0JCSAqIGllZWU4MDIxMV93YWtlX3F1ZXVlKSwgd2Ugd291bGQgZW5kIHVwIHdpdGggaWVlZTgwMjExX3R4Ci0JCSAqIGNhbGxlZCB3aXRoIHRoZSBQRU5ESU5HIGJpdCBzdGlsbCBzZXQuIFByZXZlbnQgdGhpcyBieQotCQkgKiBjb250aW51aW5nIHRyYW5zbWl0dGluZyBoZXJlIHdoZW4gdGhhdCBzaXR1YXRpb24gaXMKLQkJICogcG9zc2libGUgdG8gaGF2ZSBoYXBwZW5lZC4KLQkJICovCi0JCWlmICghX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBxdWV1ZSkpIHsKLQkJCWNsZWFyX2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKTsKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgbm9ib2R5IHdpbGwgZW5hYmxlIHRoZSBxdWV1ZSBvbiB1cworCQkJICogKHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgdGFza2xldCkgbm9yIGRpc2FibGUgdGhlCisJCQkgKiBuZXRkZXYgcXVldWUgdW5kZXJuZWF0aCB0aGUgcGVuZGluZyBoYW5kbGluZyBjb2RlLgorCQkJICovCisJCQlfX3NldF9iaXQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcsCisJCQkJICAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCisJCQlyZXRyaWVzKys7CisJCQlpZiAoV0FSTihyZXRyaWVzID4gMTAsICJ0eCByZWZ1c2VkIGJ1dCBxdWV1ZSBhY3RpdmUiKSkKKwkJCQlnb3RvIGRyb3A7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JCXN0b3JlLT5za2IgPSBza2I7Ci0JCXN0b3JlLT5leHRyYV9mcmFnID0gdHguZXh0cmFfZnJhZzsKLQkJc3RvcmUtPm51bV9leHRyYV9mcmFnID0gdHgubnVtX2V4dHJhX2ZyYWc7CiAJfQogIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiAKICBkcm9wOgotCWlmIChza2IpCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlmb3IgKGkgPSAwOyBpIDwgdHgubnVtX2V4dHJhX2ZyYWc7IGkrKykKLQkJaWYgKHR4LmV4dHJhX2ZyYWdbaV0pCi0JCQlkZXZfa2ZyZWVfc2tiKHR4LmV4dHJhX2ZyYWdbaV0pOwotCWtmcmVlKHR4LmV4dHJhX2ZyYWcpOwogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiAwOworCisJc2tiID0gdHguc2tiOworCXdoaWxlIChza2IpIHsKKwkJbmV4dCA9IHNrYi0+bmV4dDsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlza2IgPSBuZXh0OworCX0KIH0KIAogLyogZGV2aWNlIHhtaXQgaGFuZGxlcnMgKi8KQEAgLTEyODEsNyArMTM3NSw2IEBACiAJCUZPVU5EX1NEQVRBLAogCQlVTktOT1dOX0FERFJFU1MsCiAJfSBtb25pdG9yX2lmYWNlID0gTk9UX01PTklUT1I7Ci0JaW50IHJldDsKIAogCWlmIChza2ItPmlpZikKIAkJb2RldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7CkBAIC0xMjk1LDcgKzEzODgsMjAgQEAKIAkJICAgICAgICJvcmlnaW5hdGluZyBkZXZpY2VcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykgJiYKKwkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgeworCQlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgeworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzX2J5X3JlYXNvbigmbG9jYWwtPmh3LAorCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOworCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLAorCQkJCQkmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKKwkJfQorCisJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CiAJfQogCiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwpAQCAtMTMxMSw3ICsxNDE3LDcgQEAKIAkJZWxzZQogCQkJaWYgKG1lc2hfbmV4dGhvcF9sb29rdXAoc2tiLCBvc2RhdGEpKSB7CiAJCQkJZGV2X3B1dChvZGV2KTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCQlpZiAobWVtY21wKG9kZXYtPmRldl9hZGRyLCBoZHItPmFkZHI0LCBFVEhfQUxFTikgIT0gMCkKIAkJCUlFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMoJm9zZGF0YS0+dS5tZXNoLApAQCAtMTM3Myw3ICsxNDc5LDcgQEAKIAlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUob3NkYXRhLT5sb2NhbCwgc2tiLCBoZWFkcm9vbSwgbWF5X2VuY3J5cHQpKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2X3B1dChvZGV2KTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKG9zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKQEAgLTEzODIsMjAgKzE0ODgsNDIgQEAKIAkJCQkgICAgICB1LmFwKTsKIAlpZiAobGlrZWx5KG1vbml0b3JfaWZhY2UgIT0gVU5LTk9XTl9BRERSRVNTKSkKIAkJaW5mby0+Y29udHJvbC52aWYgPSAmb3NkYXRhLT52aWY7Ci0JcmV0ID0gaWVlZTgwMjExX3R4KG9kZXYsIHNrYik7CisKKwlpZWVlODAyMTFfdHgob2Rldiwgc2tiLCBmYWxzZSk7CiAJZGV2X3B1dChvZGV2KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogaW50IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnBydGhkciA9CiAJCShzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqKXNrYi0+ZGF0YTsKIAl1MTYgbGVuX3J0aGRyOwogCisJLyoKKwkgKiBGcmFtZSBpbmplY3Rpb24gaXMgbm90IGFsbG93ZWQgaWYgYmVhY29uaW5nIGlzIG5vdCBhbGxvd2VkCisJICogb3IgaWYgd2UgbmVlZCByYWRhciBkZXRlY3Rpb24uIEJlYWNvbmluZyBpcyB1c3VhbGx5IG5vdCBhbGxvd2VkIHdoZW4KKwkgKiB0aGUgbW9kZSBvciBvcGVyYXRpb24gKEFkaG9jLCBBUCwgTWVzaCkgZG9lcyBub3Qgc3VwcG9ydCBERlMuCisJICogUGFzc2l2ZSBzY2FuIGlzIGFsc28gdXNlZCBpbiB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMgd2hlcmUKKwkgKiB5b3VyIGNvdW50cnkgaXMgbm90IGtub3duIGFuZCBhcyBzdWNoIGl0IHNob3VsZCBiZSB0cmVhdGVkIGFzCisJICogTk8gVFggdW5sZXNzIHRoZSBjaGFubmVsIGlzIGV4cGxpY2l0bHkgYWxsb3dlZCBpbiB3aGljaCBjYXNlCisJICogeW91ciBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIHdvdWxkIG5vdCBoYXZlIHRoZSBwYXNzaXZlIHNjYW4KKwkgKiBmbGFnLgorCSAqCisJICogU2luY2UgQVAgbW9kZSB1c2VzIG1vbml0b3IgaW50ZXJmYWNlcyB0byBpbmplY3QvVFggbWFuYWdlbWVudAorCSAqIGZyYW1lcyB3ZSBjYW4gbWFrZSBBUCBtb2RlIHRoZSBleGNlcHRpb24gdG8gdGhpcyBydWxlIG9uY2UgaXQKKwkgKiBzdXBwb3J0cyByYWRhciBkZXRlY3Rpb24gYXMgaXRzIGltcGxlbWVudGF0aW9uIGNhbiBkZWFsIHdpdGgKKwkgKiByYWRhciBkZXRlY3Rpb24gYnkgaXRzZWxmLiBXZSBjYW4gZG8gdGhhdCBsYXRlciBieSBhZGRpbmcgYQorCSAqIG1vbml0b3IgZmxhZyBpbnRlcmZhY2VzIHVzZWQgZm9yIEFQIHN1cHBvcnQuCisJICovCisJaWYgKChjaGFuLT5mbGFncyAmIChJRUVFODAyMTFfQ0hBTl9OT19JQlNTIHwgSUVFRTgwMjExX0NIQU5fUkFEQVIgfAorCSAgICAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSkpCisJCWdvdG8gZmFpbDsKKwogCS8qIGNoZWNrIGZvciBub3QgZXZlbiBoYXZpbmcgdGhlIGZpeGVkIHJhZGlvdGFwIGhlYWRlciBwYXJ0ICovCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyKSkpCiAJCWdvdG8gZmFpbDsgLyogdG9vIHNob3J0IHRvIGJlIHBvc3NpYmx5IHZhbGlkICovCkBAIC0xNDc5LDE5ICsxNjA3LDYgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTKSAmJgotCSAgICBsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0ID4gMCkgewotCQlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgewotCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzX2J5X3JlYXNvbigmbG9jYWwtPmh3LAotCQkJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QUyk7Ci0JCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsCi0JCQkJICAgJmxvY2FsLT5keW5hbWljX3BzX2Rpc2FibGVfd29yayk7Ci0JCX0KLQotCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KSk7Ci0JfQotCiAJbmhfcG9zID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGE7CiAJaF9wb3MgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5kYXRhOwogCkBAIC0xNTcyLDcgKzE2ODcsNyBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJCS8qIEJTU0lEIFNBIERBICovCi0JCW1lbWNweShoZHIuYWRkcjEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMiwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMywgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCWhkcmxlbiA9IDI0OwpAQCAtMTU4MSw3ICsxNjk2LDcgQEAKIAkJLyogREEgU0EgQlNTSUQgKi8KIAkJbWVtY3B5KGhkci5hZGRyMSwgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7Ci0JCW1lbWNweShoZHIuYWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHIzLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTik7CiAJCWhkcmxlbiA9IDI0OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTYwMyw4ICsxNzE4LDcgQEAKIAl9CiAKIAkvKiByZWNlaXZlciBhbmQgd2UgYXJlIFFvUyBlbmFibGVkLCB1c2UgYSBRb1MgdHlwZSBmcmFtZSAqLwotCWlmIChzdGFfZmxhZ3MgJiBXTEFOX1NUQV9XTUUgJiYKLQkgICAgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmbG9jYWwtPmh3KSA+PSA0KSB7CisJaWYgKChzdGFfZmxhZ3MgJiBXTEFOX1NUQV9XTUUpICYmIGxvY2FsLT5ody5xdWV1ZXMgPj0gNCkgewogCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpOwogCQloZHJsZW4gKz0gMjsKIAl9CkBAIC0xNzM2LDE5ICsxODUwLDU4IEBACiAgKi8KIHZvaWQgaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0JaW50IGksIGo7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0ICpzdG9yZTsKKwlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKCZsb2NhbC0+aHcpOyBpKyspIHsKLQkJaWYgKCF0ZXN0X2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpKQotCQkJY29udGludWU7Ci0JCXN0b3JlID0gJmxvY2FsLT5wZW5kaW5nX3BhY2tldFtpXTsKLQkJa2ZyZWVfc2tiKHN0b3JlLT5za2IpOwotCQlmb3IgKGogPSAwOyBqIDwgc3RvcmUtPm51bV9leHRyYV9mcmFnOyBqKyspCi0JCQlrZnJlZV9za2Ioc3RvcmUtPmV4dHJhX2ZyYWdbal0pOwotCQlrZnJlZShzdG9yZS0+ZXh0cmFfZnJhZyk7Ci0JCWNsZWFyX2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpOworCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+aHcucXVldWVzOyBpKyspCisJCXNrYl9xdWV1ZV9wdXJnZSgmbG9jYWwtPnBlbmRpbmdbaV0pOworfQorCitzdGF0aWMgYm9vbCBpZWVlODAyMTFfdHhfcGVuZGluZ19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKwlib29sIHJlc3VsdCA9IHRydWU7CisKKwkvKiBkb2VzIGludGVyZmFjZSBzdGlsbCBleGlzdD8gKi8KKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOworCWlmICghZGV2KSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIHRydWU7CiAJfQorCisJLyogdmFsaWRhdGUgaW5mby0+Y29udHJvbC52aWYgYWdhaW5zdCBza2ItPmlpZiAqLworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCSAgICAgdS5hcCk7CisKKwlpZiAodW5saWtlbHkoaW5mby0+Y29udHJvbC52aWYgJiYgaW5mby0+Y29udHJvbC52aWYgIT0gJnNkYXRhLT52aWYpKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HKSB7CisJCWllZWU4MDIxMV90eChkZXYsIHNrYiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOworCisJCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmc2tiLCBzdGEpOworCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9PSykKKwkJCXJlc3VsdCA9IGZhbHNlOworCX0KKworIG91dDoKKwlkZXZfcHV0KGRldik7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgpAQCAtMTc1OSw0MCArMTkxMiw1MyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKilkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+bWRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgKnN0b3JlOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDsKLQlpbnQgaSwgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJYm9vbCBuZXh0OwogCisJcmN1X3JlYWRfbG9jaygpOwogCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmbG9jYWwtPmh3KTsgaSsrKSB7Ci0JCS8qIENoZWNrIHRoYXQgdGhpcyBxdWV1ZSBpcyBvayAqLwotCQlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBpKSAmJgotCQkgICAgIXRlc3RfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZ19ydW4pKQorCisJZm9yIChpID0gMDsgaSA8IGxvY2FsLT5ody5xdWV1ZXM7IGkrKykgeworCQkvKgorCQkgKiBJZiBxdWV1ZSBpcyBzdG9wcGVkIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIGR1ZSB0byBwZW5kaW5nCisJCSAqIGZyYW1lcywgb3Igd2UgaGF2ZSBubyBwZW5kaW5nIGZyYW1lcywgcHJvY2VlZCB0byBuZXh0IHF1ZXVlLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCW5leHQgPSBmYWxzZTsKKwkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbaV0gIT0KKwkJCUJJVChJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORykgfHwKKwkJICAgIHNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbaV0pKQorCQkJbmV4dCA9IHRydWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisKKwkJaWYgKG5leHQpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXRlc3RfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpIHsKLQkJCWNsZWFyX2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmdfcnVuKTsKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKCZsb2NhbC0+aHcsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQljbGVhcl9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bik7CisJCS8qCisJCSAqIHN0YXJ0IHRoZSBxdWV1ZSBub3cgdG8gYWxsb3cgcHJvY2Vzc2luZyBvdXIgcGFja2V0cywKKwkJICogd2UncmUgdW5kZXIgdGhlIHR4IGxvY2sgaGVyZSBhbnl3YXkgc28gbm90aGluZyB3aWxsCisJCSAqIGhhcHBlbiBhcyBhIHJlc3VsdCBvZiB0aGlzCisJCSAqLwogCQluZXRpZl9zdGFydF9zdWJxdWV1ZShsb2NhbC0+bWRldiwgaSk7CiAKLQkJc3RvcmUgPSAmbG9jYWwtPnBlbmRpbmdfcGFja2V0W2ldOwotCQl0eC5leHRyYV9mcmFnID0gc3RvcmUtPmV4dHJhX2ZyYWc7Ci0JCXR4Lm51bV9leHRyYV9mcmFnID0gc3RvcmUtPm51bV9leHRyYV9mcmFnOwotCQl0eC5mbGFncyA9IDA7Ci0JCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCBzdG9yZS0+c2tiLCAmdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAocmV0ID09IElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOKQotCQkJCXN0b3JlLT5za2IgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJY2xlYXJfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZyk7Ci0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZSgmbG9jYWwtPmh3LCBpKTsKKwkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW2ldKSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+cGVuZGluZ1tpXSk7CisKKwkJCWlmICghaWVlZTgwMjExX3R4X3BlbmRpbmdfc2tiKGxvY2FsLCBza2IpKSB7CisJCQkJc2tiX3F1ZXVlX2hlYWQoJmxvY2FsLT5wZW5kaW5nW2ldLCBza2IpOworCQkJCWJyZWFrOworCQkJfQogCQl9CisKKwkJLyogU3RhcnQgcmVndWxhciBwYWNrZXQgcHJvY2Vzc2luZyBhZ2Fpbi4gKi8KKwkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbaV0pKQorCQkJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKCZsb2NhbC0+aHcsIGksCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKTsKIAl9CisKIAluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyogZnVuY3Rpb25zIGZvciBkcml2ZXJzIHRvIGdldCBjZXJ0YWluIGZyYW1lcyAqLwpAQCAtMTg2Nyw3ICsyMDMzLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmFwID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSBOVUxMOwogCXN0cnVjdCBiZWFjb25fZGF0YSAqYmVhY29uOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7CkBAIC0xOTE5LDEzICsyMDg0LDEzIEBACiAJCX0gZWxzZQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQkJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JCWlmICghaWZzdGEtPnByb2JlX3Jlc3ApCisJCWlmICghaWZpYnNzLT5wcm9iZV9yZXNwKQogCQkJZ290byBvdXQ7CiAKLQkJc2tiID0gc2tiX2NvcHkoaWZzdGEtPnByb2JlX3Jlc3AsIEdGUF9BVE9NSUMpOworCQlza2IgPSBza2JfY29weShpZmlic3MtPnByb2JlX3Jlc3AsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNrYikKIAkJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBmYjg5ZTFkLi5mZGY0MzJmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTQxLDYgKzQxLDE1IEBACiBjb25zdCB1bnNpZ25lZCBjaGFyIGJyaWRnZV90dW5uZWxfaGVhZGVyW10gX19hbGlnbmVkKDIpID0KIAl7IDB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZjggfTsKIAorc3RydWN0IGllZWU4MDIxMV9odyAqd2lwaHlfdG9faWVlZTgwMjExX2h3KHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisJQlVHX09OKCF3aXBoeSk7CisKKwlsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOworCXJldHVybiAmbG9jYWwtPmh3OworfQorRVhQT1JUX1NZTUJPTCh3aXBoeV90b19pZWVlODAyMTFfaHcpOwogCiB1OCAqaWVlZTgwMjExX2dldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBzaXplX3QgbGVuLAogCQkJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQpAQCAtMTU3LDE4ICsxNjYsMTMgQEAKIAogdm9pZCBpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgdHgtPnNrYi0+ZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCi0JaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JaWYgKHR4LT5leHRyYV9mcmFnKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmaGRyOwotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlmaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCi0JCQkJdHgtPmV4dHJhX2ZyYWdbaV0tPmRhdGE7Ci0JCQlmaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JCX0KLQl9CisJZG8geworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiB9CiAKIGludCBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHNpemVfdCBsZW4sCkBAIC0zMzUsMjEgKzMzOSwyMSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBhbXBkdSBxdWV1ZXMgKi8KLQlpZiAocXVldWUgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKGh3KSkgewotCQlfX2NsZWFyX2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisJaWYgKFdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcykpCisJCXJldHVybjsKIAotCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gIT0gMCkKLQkJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLwotCQkJcmV0dXJuOwotCX0KKwlfX2NsZWFyX2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CiAKLQlpZiAodGVzdF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpIHsKLQkJc2V0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bik7CisJaWYgKCFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSkgJiYKKwkgICAgbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gPT0KKwkJCQlCSVQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQl9IGVsc2UgewotCQluZXRpZl93YWtlX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7Ci0JfQorCisJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdICE9IDApCisJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCQlyZXR1cm47CisKKwluZXRpZl93YWtlX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUsCkBAIC0zNzUsMTEgKzM3OSwxOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBhbXBkdSBxdWV1ZXMgKi8KLQlpZiAocXVldWUgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKGh3KSkKLQkJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKwlpZiAoV0FSTl9PTihxdWV1ZSA+PSBody0+cXVldWVzKSkKKwkJcmV0dXJuOwogCi0JbmV0aWZfc3RvcF9zdWJxdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOworCS8qCisJICogT25seSBzdG9wIGlmIGl0IHdhcyBwcmV2aW91c2x5IHJ1bm5pbmcsIHRoaXMgaXMgbmVjZXNzYXJ5CisJICogZm9yIGNvcnJlY3QgcGVuZGluZyBwYWNrZXRzIGhhbmRsaW5nIGJlY2F1c2UgdGhlcmUgd2UgbWF5CisJICogc3RhcnQgKGJ1dCBub3Qgd2FrZSkgdGhlIHF1ZXVlIGFuZCByZWx5IG9uIHRoYXQuCisJICovCisJaWYgKCFsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSkKKwkJbmV0aWZfc3RvcF9zdWJxdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOworCisJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKQEAgLTQwOSw3ICs0MjAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKIAkJX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaSwgcmVhc29uKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CkBAIC00MjUsNiArNDM2LDEwIEBACiBpbnQgaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCWlmIChXQVJOX09OKHF1ZXVlID49IGh3LT5xdWV1ZXMpKQorCQlyZXR1cm4gdHJ1ZTsKKwogCXJldHVybiBfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIHF1ZXVlKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQpOwpAQCAtNDM4LDcgKzQ1Myw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzICsgaHctPmFtcGR1X3F1ZXVlczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzOyBpKyspCiAJCV9faWVlZTgwMjExX3dha2VfcXVldWUoaHcsIGksIHJlYXNvbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwpAQCAtNDU5LDcgKzQ3NCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKLQlydG5sX2xvY2soKTsKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKQEAgLTQ4MCw3ICs0OTUsNyBAQAogCQkJCSAmc2RhdGEtPnZpZik7CiAJfQogCi0JcnRubF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKTsKIApAQCAtNjUzLDYgKzY2OCwxMCBAQAogCQkJZWxlbXMtPnB3cl9jb25zdHJfZWxlbSA9IHBvczsKIAkJCWVsZW1zLT5wd3JfY29uc3RyX2VsZW1fbGVuID0gZWxlbjsKIAkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUw6CisJCQllbGVtcy0+dGltZW91dF9pbnQgPSBwb3M7CisJCQllbGVtcy0+dGltZW91dF9pbnRfbGVuID0gZWxlbjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTY4OCw2ICs3MDcsMjcgQEAKIAkJbG9jYWwtPm9wcy0+Y29uZl90eChsb2NhbF90b19odyhsb2NhbCksIGksICZxcGFyYW0pOwogfQogCit2b2lkIGllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCisJCQkJICBjb25zdCB1OCAqc3VwcF9yYXRlcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOworCisJLyogY2YuIElFRUUgODAyLjExIDkuMi4xMiAqLworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKQorCQlpZiAoKHN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDUgPiAxMTApCisJCQloYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDE7CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haICYmCisJICAgIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0KQorCQlzZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKKwllbHNlCisJCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKKworCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOworfQorCiB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgIGludCBlbmNyeXB0KQogewpAQCAtNzI3LDEyICs3NjcsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11NjQgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKK3UzMiBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXM7Ci0JdTY0IG1hbmRhdG9yeV9yYXRlczsKKwl1MzIgbWFuZGF0b3J5X3JhdGVzOwogCWVudW0gaWVlZTgwMjExX3JhdGVfZmxhZ3MgbWFuZGF0b3J5X2ZsYWc7CiAJaW50IGk7CiAKQEAgLTc1NCwzICs3OTQsMTQwIEBACiAJCQltYW5kYXRvcnlfcmF0ZXMgfD0gQklUKGkpOwogCXJldHVybiBtYW5kYXRvcnlfcmF0ZXM7CiB9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCisJCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKKwkJCSAgICBzaXplb2YoKm1nbXQpICsgNiArIGV4dHJhX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhdXRoICIKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0ICsgNik7CisJbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7CisJaWYgKGVuY3J5cHQpCisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihhdXRoX2FsZyk7CisJbWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7CisJbWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoMCk7CisJaWYgKGV4dHJhKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGV4dHJhX2xlbiksIGV4dHJhLCBleHRyYV9sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCBlbmNyeXB0KTsKK30KKwordm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCisJCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJICAgICAgdTggKmllLCBzaXplX3QgaWVfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMOworCWludCBpOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwICsKKwkJCSAgICBpZV9sZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgorCQkgICAgICAgInJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoZHN0KSB7CisJCW1lbWNweShtZ210LT5kYSwgZHN0LCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgZHN0LCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7CisJCW1lbXNldChtZ210LT5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCX0KKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IHNzaWRfbGVuOworCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKKworCXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMik7CisJc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJc3VwcF9yYXRlc1sxXSA9IDA7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwkJaWYgKGVzdXBwX3JhdGVzKSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7CisJCQllc3VwcF9yYXRlc1sxXSsrOworCQl9IGVsc2UgaWYgKHN1cHBfcmF0ZXNbMV0gPT0gOCkgeworCQkJZXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMyk7CisJCQllc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkJZXN1cHBfcmF0ZXNbMV0gPSAxOworCQkJcG9zID0gJmVzdXBwX3JhdGVzWzJdOworCQl9IGVsc2UgeworCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOworCQkJc3VwcF9yYXRlc1sxXSsrOworCQl9CisJCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKKwl9CisKKwlpZiAoaWUpCisJCW1lbWNweShza2JfcHV0KHNrYiwgaWVfbGVuKSwgaWUsIGllX2xlbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCit1MzIgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOworCXNpemVfdCBudW1fcmF0ZXM7CisJdTMyIHN1cHBfcmF0ZXM7CisJaW50IGksIGo7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOworCisJaWYgKCFzYmFuZCkgeworCQlXQVJOX09OKDEpOworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisJfQorCisJYml0cmF0ZXMgPSBzYmFuZC0+Yml0cmF0ZXM7CisJbnVtX3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJc3VwcF9yYXRlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbiArCisJCSAgICAgZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCXU4IHJhdGUgPSAwOworCQlpbnQgb3duX3JhdGU7CisJCWlmIChpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQorCQkJcmF0ZSA9IGVsZW1zLT5zdXBwX3JhdGVzW2ldOworCQllbHNlIGlmIChlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMpCisJCQlyYXRlID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzCisJCQkJW2kgLSBlbGVtcy0+c3VwcF9yYXRlc19sZW5dOworCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOworCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JhdGVzOyBqKyspCisJCQlpZiAoYml0cmF0ZXNbal0uYml0cmF0ZSA9PSBvd25fcmF0ZSkKKwkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKKwl9CisJcmV0dXJuIHN1cHBfcmF0ZXM7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmMgYi9uZXQvbWFjODAyMTEvd2VwLmMKaW5kZXggNzA0M2RkYy4uZWY3MzEwNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5jCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuYwpAQCAtMzI5LDI0ICszMjksMTcgQEAKIGllZWU4MDIxMV90eF9yZXN1bHQKIGllZWU4MDIxMV9jcnlwdG9fd2VwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOwogCi0JaWYgKHdlcF9lbmNyeXB0X3NrYih0eCwgdHgtPnNrYikgPCAwKSB7Ci0JCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF93ZXApOwotCQlyZXR1cm4gVFhfRFJPUDsKLQl9Ci0KLQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlpZiAod2VwX2VuY3J5cHRfc2tiKHR4LCB0eC0+ZXh0cmFfZnJhZ1tpXSkpIHsKLQkJCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPgotCQkJCQkgICAgICAgdHhfaGFuZGxlcnNfZHJvcF93ZXApOwotCQkJCXJldHVybiBUWF9EUk9QOwotCQkJfQorCXNrYiA9IHR4LT5za2I7CisJZG8geworCQlpZiAod2VwX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkgeworCQkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19kcm9wX3dlcCk7CisJCQlyZXR1cm4gVFhfRFJPUDsKIAkJfQotCX0KKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2V4dC5jIGIvbmV0L21hYzgwMjExL3dleHQuYwppbmRleCA3MTYyZDU4Li5kZWI0ZWNlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2V4dC5jCisrKyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKQEAgLTM3LDcgKzM3LDE0IEBACiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKIAlpbnQgZXJyOwogCi0JaWYgKGlkeCA8IDAgfHwgaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMpIHsKKwlpZiAoYWxnID09IEFMR19BRVNfQ01BQykgeworCQlpZiAoaWR4IDwgTlVNX0RFRkFVTFRfS0VZUyB8fAorCQkgICAgaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0X2VuY3J5cHQgLSBpbnZhbGlkIGlkeD0lZCAiCisJCQkgICAgICAgIihCSVApXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBpZHgpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGlkeCA8IDAgfHwgaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXRfZW5jcnlwdCAtIGludmFsaWQgaWR4PSVkXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDMsNiArMTEwLDkgQEAKIAogCQlpZiAoc2V0X3R4X2tleSB8fCAoIXN0YSAmJiAhc2RhdGEtPmRlZmF1bHRfa2V5ICYmIGtleSkpCiAJCQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBpZHgpOworCQlpZiAoYWxnID09IEFMR19BRVNfQ01BQyAmJgorCQkgICAgKHNldF90eF9rZXkgfHwgKCFzdGEgJiYgIXNkYXRhLT5kZWZhdWx0X21nbXRfa2V5ICYmIGtleSkpKQorCQkJaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBpZHgpOwogCX0KIAogIG91dF91bmxvY2s6CkBAIC0xMTksMTI1ICsxMjksMzggQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHNkYXRhLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0VYVF9TTUU7CisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JaW50IGMgPSAwOwotCi0JZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7Ci0KLQlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLQlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMTsKLQlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5taW5fcmV0cnkgPSAwOwotCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7Ci0JcmFuZ2UtPm1pbl9ydHMgPSAwOwotCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKLQlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7Ci0JcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKLQotCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOwotCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwotCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gTlVNX0RFRkFVTFRfS0VZUzsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8fAotCSAgICBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCKQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSBsb2NhbC0+aHcubWF4X3NpZ25hbDsKLQllbHNlIGlmICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCi0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IC0xMTA7Ci0JZWxzZQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOwotCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pCi0JCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IC0xMTA7Ci0JZWxzZQotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOwotCi0JcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7Ci0JcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOwotCi0JcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKLQkvKiBub3QgYWx3YXlzIHRydWUgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcgKi8KLQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSByYW5nZS0+bWF4X3F1YWwubGV2ZWwgLyAyOwotCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IHJhbmdlLT5tYXhfcXVhbC5ub2lzZSAvIDI7Ci0JcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOwotCi0JcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8Ci0JCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7Ci0KLQotCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kICsrKSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07Ci0KLQkJaWYgKCFzYmFuZCkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVscyAmJiBjIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBpKyspIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07Ci0KLQkJCWlmICghKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7Ci0JCQkJcmFuZ2UtPmZyZXFbY10uaSA9Ci0JCQkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKLQkJCQkJCWNoYW4tPmNlbnRlcl9mcmVxKTsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5tID0gY2hhbi0+Y2VudGVyX2ZyZXE7Ci0JCQkJcmFuZ2UtPmZyZXFbY10uZSA9IDY7Ci0JCQkJYysrOwotCQkJfQotCQl9Ci0JfQotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBjOwotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gYzsKLQotCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdBUCk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdTQ0FOKTsKLQotCXJhbmdlLT5zY2FuX2NhcGEgfD0gSVdfU0NBTl9DQVBBX0VTU0lEOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJc2RhdGEtPnUuaWJzcy5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAKIAkvKiBmcmVxLT5lID09IDA6IGZyZXEtPm0gPSBjaGFubmVsOyBvdGhlcndpc2UgZnJlcSA9IG0gKiAxMF5lICovCiAJaWYgKGZyZXEtPmUgPT0gMCkgewogCQlpZiAoZnJlcS0+bSA8IDApIHsKLQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0KKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCQkJc2RhdGEtPnUuaWJzcy5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworCQkJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CiAJCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UKQEAgLTI3NCwzMiArMTk3LDI4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc2l6ZV90IGxlbiA9IGRhdGEtPmxlbmd0aDsKKwlpbnQgcmV0OwogCiAJLyogaXdjb25maWcgdXNlcyBudWwgdGVybWluYXRpb24gaW4gU1NJRC4uICovCiAJaWYgKGxlbiA+IDAgJiYgc3NpZFtsZW4gLSAxXSA9PSAnXDAnKQogCQlsZW4tLTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWludCByZXQ7Ci0JCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpIHsKLQkJCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KHNkYXRhLT51LnN0YS5zc2lkLCBzc2lkLCBsZW4pOwotCQkJc2RhdGEtPnUuc3RhLnNzaWRfbGVuID0gbGVuOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaWYgKGRhdGEtPmZsYWdzKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKIAkJZWxzZQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisKIAkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgc3NpZCwgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEsICZzZGF0YS0+dS5zdGEpOworCisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7Ci0JfQorCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm4gaWVlZTgwMjExX2lic3Nfc2V0X3NzaWQoc2RhdGEsIHNzaWQsIGxlbik7CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CkBAIC0zMTMsOCArMjMyLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWludCByZXMgPSBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKIAkJaWYgKHJlcyA9PSAwKSB7CiAJCQlkYXRhLT5sZW5ndGggPSBsZW47CkBAIC0zMjIsNiArMjQwLDE0IEBACiAJCX0gZWxzZQogCQkJZGF0YS0+ZmxhZ3MgPSAwOwogCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWludCByZXMgPSBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzZGF0YSwgc3NpZCwgJmxlbik7CisJCWlmIChyZXMgPT0gMCkgeworCQkJZGF0YS0+bGVuZ3RoID0gbGVuOworCQkJZGF0YS0+ZmxhZ3MgPSAxOworCQl9IGVsc2UKKwkJCWRhdGEtPmZsYWdzID0gMDsKKwkJcmV0dXJuIHJlczsKIAl9CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zMzUsMjYgKzI2MSwzMiBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJldDsKLQkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkgewotCQkJbWVtY3B5KHNkYXRhLT51LnN0YS5ic3NpZCwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhLAotCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCXJldHVybiAwOwotCQl9CisKIAkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CiAJCWVsc2UKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKIAkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0VYVF9TTUU7CisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMIHwKKwkJCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMOworCQllbHNlCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTDsKKworCQlyZXR1cm4gaWVlZTgwMjExX2lic3Nfc2V0X2Jzc2lkKHNkYXRhLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEpOwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewogCQkvKgogCQkgKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBXRFMgcGVlciBhZGRyZXNzCkBAIC0zODMsMTcgKzMxNSwyMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJaWYgKHNkYXRhLT51LnN0YS5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCB8fAotCQkgICAgc2RhdGEtPnUuc3RhLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCkgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7CiAJCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7CisJCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCQl9IGVsc2UKIAkJCW1lbXNldCgmYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKHNkYXRhLT51Lmlic3Muc3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQpIHsKKwkJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pOworCQl9IGVsc2UKKwkJCW1lbXNldCgmYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOworCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9XRFMpIHsKIAkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgRVRIX0FMRU4pOwpAQCAtNDA0LDU4ICszMzksNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IE5VTEw7Ci0JdTggKnNzaWQgPSBOVUxMOwotCXNpemVfdCBzc2lkX2xlbiA9IDA7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCS8qIGlmIFNTSUQgd2FzIHNwZWNpZmllZCBleHBsaWNpdGx5IHRoZW4gdXNlIHRoYXQgKi8KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkgJiYKLQkgICAgd3JxdS0+ZGF0YS5mbGFncyAmIElXX1NDQU5fVEhJU19FU1NJRCkgewotCQlyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7Ci0JCXNzaWQgPSByZXEtPmVzc2lkOwotCQlzc2lkX2xlbiA9IHJlcS0+ZXNzaWRfbGVuOwotCX0KLQotCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCBzc2lkLCBzc2lkX2xlbik7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlpbnQgcmVzOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlyZXMgPSBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKGxvY2FsLCBpbmZvLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKLQlpZiAocmVzID49IDApIHsKLQkJZGF0YS0+bGVuZ3RoID0gcmVzOwotCQlyZXR1cm4gMDsKLQl9Ci0JZGF0YS0+bGVuZ3RoID0gMDsKLQlyZXR1cm4gcmVzOwotfQotCi0KIHN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQpAQCAtNTExLDcgKzM5NCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQpOwogCiAJaWYgKHN0YSAmJiAhKHN0YS0+bGFzdF90eF9yYXRlLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykpCiAJCXJhdGUtPnZhbHVlID0gc2JhbmQtPmJpdHJhdGVzW3N0YS0+bGFzdF90eF9yYXRlLmlkeF0uYml0cmF0ZTsKQEAgLTU0OSwxMCArNDMyLDkgQEAKIAllbHNlIC8qIEF1dG9tYXRpYyBwb3dlciBsZXZlbCBzZXR0aW5nICovCiAJCW5ld19wb3dlcl9sZXZlbCA9IGNoYW4tPm1heF9wb3dlcjsKIAotCWlmIChsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCAhPSBuZXdfcG93ZXJfbGV2ZWwpIHsKLQkJbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgPSBuZXdfcG93ZXJfbGV2ZWw7CisJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSBuZXdfcG93ZXJfbGV2ZWw7CisJaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IG5ld19wb3dlcl9sZXZlbCkKIAkJcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUjsKLQl9CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCAhPSAhKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQpKSB7CiAJCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSAhKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQpOwpAQCAtNzEzLDggKzU5NSw3IEBACiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKikgZXh0cmE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoIShzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChtbG1lLT5jbWQpIHsKQEAgLTczNyw3ICs2MTgsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWludCBpZHgsIGksIGFsZyA9IEFMR19XRVA7CiAJdTggYmNhZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCWludCByZW1vdmUgPSAwOworCWludCByZW1vdmUgPSAwLCByZXQ7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKQEAgLTc2MywxMSArNjQ0LDIwIEBACiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oCisJcmV0ID0gaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKAogCQlzZGF0YSwgYmNhZGRyLAogCQlpZHgsIGFsZywgcmVtb3ZlLAogCQkhc2RhdGEtPmRlZmF1bHRfa2V5LAogCQlrZXlidWYsIGVycS0+bGVuZ3RoKTsKKworCWlmICghcmV0KSB7CisJCWlmIChyZW1vdmUpCisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKKwkJZWxzZQorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTgxMCw4ICs3MDAsNyBAQAogCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CiAKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKKwkJc3dpdGNoIChzZGF0YS0+dS5tZ2QuYXV0aF9hbGcpIHsKIAkJY2FzZSBXTEFOX0FVVEhfT1BFTjoKIAkJY2FzZSBXTEFOX0FVVEhfTEVBUDoKIAkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CkBAIC04MzYsNiArNzI1LDkgQEAKIAlpbnQgcmV0ID0gMCwgdGltZW91dCA9IDA7CiAJYm9vbCBwczsKIAorCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUykpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg1MiwzMSArNzQ0LDQ5IEBACiAJCXBzID0gdHJ1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDogICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHdlIGlnbm9yZSAqLwotCQlicmVhazsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHdycS0+ZmxhZ3MgJiB+KElXX1BPV0VSX01PREUgfCBJV19QT1dFUl9USU1FT1VUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAod3JxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpCiAJCXRpbWVvdXQgPSB3cnEtPnZhbHVlIC8gMTAwMDsKIAotc2V0OgotCWlmIChwcyA9PSBsb2NhbC0+cG93ZXJzYXZlICYmIHRpbWVvdXQgPT0gbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCkKKyBzZXQ6CisJaWYgKHBzID09IGxvY2FsLT5wb3dlcnNhdmUgJiYgdGltZW91dCA9PSBjb25mLT5keW5hbWljX3BzX3RpbWVvdXQpCiAJCXJldHVybiByZXQ7CiAKIAlsb2NhbC0+cG93ZXJzYXZlID0gcHM7Ci0JbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA9IHRpbWVvdXQ7CisJY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKIAotCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKLQkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFMpICYmCi0JCSAgICBsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0ID4gMCkKLQkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KSk7Ci0JCWVsc2UgewotCQkJaWYgKGxvY2FsLT5wb3dlcnNhdmUpCi0JCQkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7Ci0JCQllbHNlCi0JCQkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykKKwkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfRFlOUFNfVElNRU9VVCk7CisKKwlpZiAoIShzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA+IDAgJiYKKwkgICAgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykpIHsKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoY29uZi0+ZHluYW1pY19wc190aW1lb3V0KSk7CisJfSBlbHNlIHsKKwkJaWYgKGxvY2FsLT5wb3dlcnNhdmUpIHsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKKwkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJfSBlbHNlIHsKKwkJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKKwkJCXJldCA9IGllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJCQlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCQl9Ci0JCXJldCA9IGllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTkwMywxMSArODEzLDIyIEBACiAKIAlzd2l0Y2ggKGRhdGEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewogCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgogCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CiAJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgogCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKIAljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UOgorCQlicmVhazsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCWlmIChkYXRhLT52YWx1ZSAmIChJV19BVVRIX0NJUEhFUl9XRVA0MCB8CisJCQkgICAgSVdfQVVUSF9DSVBIRVJfV0VQMTA0IHwgSVdfQVVUSF9DSVBIRVJfVEtJUCkpCisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKKwkJCWVsc2UKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0KKwkJCQkJfklFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRDsKKwkJfQogCQlicmVhazsKIAljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKIAkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAhIWRhdGEtPnZhbHVlOwpAQCAtOTE2LDI0ICs4MzcsNDUgQEAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZWxzZSB7Ci0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKIAkJCS8qCiAJCQkgKiBQcml2YWN5IGludm9rZWQgYnkgd3BhX3N1cHBsaWNhbnQsIHN0b3JlIHRoZQogCQkJICogdmFsdWUgYW5kIGFsbG93IGFzc29jaWF0aW5nIHRvIGEgcHJvdGVjdGVkCiAJCQkgKiBuZXR3b3JrIHdpdGhvdXQgaGF2aW5nIGEga2V5IHVwIGZyb250LgogCQkJICovCiAJCQlpZiAoZGF0YS0+dmFsdWUpCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9CiAJCQkJCUlFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlzZGF0YS0+dS5zdGEuYXV0aF9hbGdzID0gZGF0YS0+dmFsdWU7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBkYXRhLT52YWx1ZTsKIAkJZWxzZQogCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOworCWNhc2UgSVdfQVVUSF9NRlA6CisJCWlmICghKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUpKSB7CisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJc3dpdGNoIChkYXRhLT52YWx1ZSkgeworCQkJY2FzZSBJV19BVVRIX01GUF9ESVNBQkxFRDoKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9ESVNBQkxFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSVdfQVVUSF9NRlBfT1BUSU9OQUw6CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfT1BUSU9OQUw7CisJCQkJYnJlYWs7CisJCQljYXNlIElXX0FVVEhfTUZQX1JFUVVJUkVEOgorCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CkBAIC05NTEsOSArODkzLDkgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUuc3RhLmJzc2lkKTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKKwogCWlmICghc3RhKSB7CiAJCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7CiAJCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKQEAgLTk2MiwxMCArOTA0LDQ1IEBACiAJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IDA7CiAJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKIAl9IGVsc2UgewotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3Rfc2lnbmFsOwotCQl3c3RhdHMtPnF1YWwucXVhbCA9IHN0YS0+bGFzdF9xdWFsOwotCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKKwkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSAwOworCQkvKgorCQkgKiBtaXJyb3Igd2hhdCBjZmc4MDIxMSBkb2VzIGZvciBpd3JhbmdlL3NjYW4gcmVzdWx0cywKKwkJICogb3RoZXJ3aXNlIHVzZXJzcGFjZSBnZXRzIGNvbmZ1c2VkLgorCQkgKi8KKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8CisJCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSkgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCX0gZWxzZSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwkJfQorCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykgeworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJfSBlbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgeworCQkJaW50IHNpZyA9IHN0YS0+bGFzdF9zaWduYWw7CisKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc2lnOworCQkJaWYgKHNpZyA8IC0xMTApCisJCQkJc2lnID0gLTExMDsKKwkJCWVsc2UgaWYgKHNpZyA+IC00MCkKKwkJCQlzaWcgPSAtNDA7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IHNpZyArIDExMDsKKwkJfQorCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKSB7CisJCQkvKgorCQkJICogVGhpcyBhc3N1bWVzIHRoYXQgaWYgZHJpdmVyIHJlcG9ydHMgbm9pc2UsIGl0IGFsc28KKwkJCSAqIHJlcG9ydHMgc2lnbmFsIGluIGRCbS4KKwkJCSAqLworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9VUERBVEVEOworCQl9IGVsc2UgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC05ODIsOSArOTU5LDggQEAKIAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCWRhdGEtPnZhbHVlID0gc2RhdGEtPnUuc3RhLmF1dGhfYWxnczsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJZGF0YS0+dmFsdWUgPSBzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzOwogCQllbHNlCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CkBAIC0xMDE3LDYgKzk5Myw5IEBACiAJY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAJCWFsZyA9IEFMR19DQ01QOwogCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfQUVTX0NNQUM6CisJCWFsZyA9IEFMR19BRVNfQ01BQzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KQEAgLTEwMjUsMjAgKzEwMDQsNDEgQEAKIAkJcmVtb3ZlID0gMTsKIAogCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlpZHggPSAtMTsKLQkJaWYgKCFzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCQlpZHggPSAwOwotCQllbHNlIGZvciAoaSA9IDA7IGkgPCBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHsKLQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkgPT0gc2RhdGEtPmtleXNbaV0pIHsKLQkJCQlpZHggPSBpOwotCQkJCWJyZWFrOworCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCWlmIChpZHggPCBOVU1fREVGQVVMVF9LRVlTICsgMSB8fAorCQkgICAgaWR4ID4gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykgeworCQkJaWR4ID0gLTE7CisJCQlpZiAoIXNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KQorCQkJCWlkeCA9IDA7CisJCQllbHNlIGZvciAoaSA9IE5VTV9ERUZBVUxUX0tFWVM7CisJCQkJICBpIDwgTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUzsKKwkJCQkgIGkrKykgeworCQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkKKwkJCQl7CisJCQkJCWlkeCA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KLQkJfQotCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpZHgtLTsKKwkJCWlmIChpZHggPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCWlkeC0tOworCX0gZWxzZSB7CisJCWlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKKwkJCWlkeCA9IC0xOworCQkJaWYgKCFzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCQkJaWR4ID0gMDsKKwkJCWVsc2UgZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykgeworCQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkgPT0gc2RhdGEtPmtleXNbaV0pIHsKKwkJCQkJaWR4ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGlkeCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJaWR4LS07CisJfQogCiAJcmV0dXJuIGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzZGF0YSwgZXh0LT5hZGRyLnNhX2RhdGEsIGlkeCwgYWxnLAogCQkJCQlyZW1vdmUsCkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXU0VOUyAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU0VOUyAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZSwJCS8qIFNJT0NHSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3JhbmdlLAkJLyogU0lPQ0dJV1JBTkdFICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUFJJViAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIGtlcm5lbCBjb2RlICovLAkJLyogU0lPQ0dJV1BSSVYgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdTVEFUUyAqLwpAQCAtMTA3Niw4ICsxMDc2LDggQEAKIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2FwLAkJLyogU0lPQ0dJV0FQICovCiAJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdtbG1lLAkJLyogU0lPQ1NJV01MTUUgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0FQTElTVCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCiAJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdlc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuYyBiL25ldC9tYWM4MDIxMS93bWUuYwppbmRleCBhYzcxYjM4Li4wYjhhZDFmNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5jCisrKyBiL25ldC9tYWM4MDIxMS93bWUuYwpAQCAtOTksMTAgKzk5LDEzIEBACiAJLyogaW4gY2FzZSB3ZSBhcmUgYSBjbGllbnQgdmVyaWZ5IGFjbSBpcyBub3Qgc2V0IGZvciB0aGlzIGFjICovCiAJd2hpbGUgKHVubGlrZWx5KGxvY2FsLT53bW1fYWNtICYgQklUKHNrYi0+cHJpb3JpdHkpKSkgewogCQlpZiAod21lX2Rvd25ncmFkZV9hYyhza2IpKSB7Ci0JCQkvKiBUaGUgb2xkIGNvZGUgd291bGQgZHJvcCB0aGUgcGFja2V0IGluIHRoaXMKLQkJCSAqIGNhc2UuCisJCQkvKgorCQkJICogVGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4uIFRoZSBBUCBoYXMgbWFya2VkIGFsbAorCQkJICogbG93ZXIgQUNzIHRvIHJlcXVpcmUgYWRtaXNzaW9uIGNvbnRyb2wgd2hpY2ggaXMgbm90CisJCQkgKiBhIHJlYXNvbmFibGUgY29uZmlndXJhdGlvbi4gQWxsb3cgdGhlIGZyYW1lIHRvIGJlCisJCQkgKiB0cmFuc21pdHRlZCB1c2luZyBBQ19CSyBhcyBhIHdvcmthcm91bmQuCiAJCQkgKi8KLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTExNCw5ICsxMTcsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IHF1ZXVlOwogCXU4IHRpZDsKIApAQCAtMTI0LDI5ICsxMjUsMTEgQEAKIAlpZiAodW5saWtlbHkocXVldWUgPj0gbG9jYWwtPmh3LnF1ZXVlcykpCiAJCXF1ZXVlID0gbG9jYWwtPmh3LnF1ZXVlcyAtIDE7CiAKLQlpZiAoc2tiLT5yZXF1ZXVlKSB7Ci0JCWlmICghaHctPmFtcGR1X3F1ZXVlcykKLQkJCXJldHVybiBxdWV1ZTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwotCQlpZiAoc3RhKSB7Ci0JCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0KLQkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkKLQkJCQlxdWV1ZSA9IGFtcGR1X3F1ZXVlOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXJldHVybiBxdWV1ZTsKLQl9Ci0KLQkvKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKLQkgKiB0aGVyZSBpcyBvbmUuCisJLyoKKwkgKiBOb3cgd2Uga25vdyB0aGUgMWQgcHJpb3JpdHksIGZpbGwgaW4gdGhlIFFvUyBoZWFkZXIgaWYKKwkgKiB0aGVyZSBpcyBvbmUgKGFuZCB3ZSBoYXZlbid0IGRvbmUgdGhpcyBiZWZvcmUpLgogCSAqLwotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmICghc2tiLT5yZXF1ZXVlICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXU4ICpwID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXU4IGFja19wb2xpY3kgPSAwOwogCQl0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVEFHMURfTUFTSzsKQEAgLTE1NiwxNDAgKzEzOSw3IEBACiAJCS8qIHFvcyBoZWFkZXIgaXMgMiBieXRlcywgc2Vjb25kIHJlc2VydmVkICovCiAJCSpwKysgPSBhY2tfcG9saWN5IHwgdGlkOwogCQkqcCA9IDA7Ci0KLQkJaWYgKCFody0+YW1wZHVfcXVldWVzKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwotCQlpZiAoc3RhKSB7Ci0JCQlpbnQgYW1wZHVfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0KLQkJCWlmICgoYW1wZHVfcXVldWUgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodykpICYmCi0JCQkgICAgdGVzdF9iaXQoYW1wZHVfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKSkKLQkJCQlxdWV1ZSA9IGFtcGR1X3F1ZXVlOwotCQl9Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJcmV0dXJuIHF1ZXVlOwogfQotCi1pbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBYWFg6IGN1cnJlbnRseSBicm9rZW4gZHVlIHRvIGNiL3JlcXVldWUgdXNlICovCi0JcmV0dXJuIC1FUEVSTTsKLQotCS8qIHByZXBhcmUgdGhlIGZpbHRlciBhbmQgc2F2ZSBpdCBmb3IgdGhlIFNXIHF1ZXVlCi0JICogbWF0Y2hpbmcgdGhlIHJlY2VpdmVkIEhXIHF1ZXVlICovCi0KLQlpZiAoIWxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiB0cnkgdG8gZ2V0IGEgUWRpc2MgZnJvbSB0aGUgcG9vbCAqLwotCWZvciAoaSA9IGxvY2FsLT5ody5xdWV1ZXM7IGkgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcygmbG9jYWwtPmh3KTsgaSsrKQotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShsb2NhbF90b19odyhsb2NhbCksIGkpOwotCQkJc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaTsKLQotCQkJLyogSUYgdGhlcmUgYXJlIGFscmVhZHkgcGVuZGluZyBwYWNrZXRzCi0JCQkgKiBvbiB0aGlzIHRpZCBmaXJzdCB3ZSBuZWVkIHRvIGRyYWluIHRoZW0KLQkJCSAqIG9uIHRoZSBwcmV2aW91cyBxdWV1ZQotCQkJICogc2luY2UgSFQgaXMgc3RyaWN0IGluIG9yZGVyICovCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZWQgYWdncmVnYXRpb24gcXVldWUiCi0JCQkJCSIgJWQgdGlkICVkIGFkZHIgJXBNIHBvb2w9MHglbFhcbiIsCi0JCQkJCWksIHRpZCwgc3RhLT5zdGEuYWRkciwKLQkJCQkJbG9jYWwtPnF1ZXVlX3Bvb2xbMF0pOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCXJldHVybiAtRUFHQUlOOwotfQotCi0vKioKLSAqIHRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBYKS0+bG9jawotICovCi12b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAotCQkJCSAgIHU4IHJlcXVldWUpCi17Ci0JaW50IGFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0KLQkvKiByZXR1cm4gdGhlIHFkaXNjIHRvIHRoZSBwb29sICovCi0JY2xlYXJfYml0KGFnZ19xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpOwotCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsKLQotCWlmIChyZXF1ZXVlKSB7Ci0JCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBhZ2dfcXVldWUpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKLQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwotCQlzdHJ1Y3QgUWRpc2MgKnE7Ci0KLQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgYWdnX3F1ZXVlKTsKLQkJcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQkJcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKLQotCQlzcGluX2xvY2tfYmgocm9vdF9sb2NrKTsKLQkJcWRpc2NfcmVzZXQocSk7Ci0JCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7Ci0JfQotfQotCi12b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpCi17Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOwotCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdDsKLQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0Jc3RydWN0IFFkaXNjICpxZGlzYzsKLQl1MzIgbGVuOwotCi0JcmN1X3JlYWRfbG9ja19iaCgpOwotCi0JcWRpc2MgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JaWYgKCFxZGlzYyB8fCAhcWRpc2MtPmRlcXVldWUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxpc3QpOwotCi0Jcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKTsKLQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQlmb3IgKGxlbiA9IHFkaXNjLT5xLnFsZW47IGxlbiA+IDA7IGxlbi0tKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7Ci0KLQkJaWYgKHNrYikKLQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmxpc3QsIHNrYik7Ci0JfQotCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7Ci0KLQlmb3IgKGxlbiA9IGxpc3QucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJmxpc3QpOwotCQl1MTYgbmV3X3F1ZXVlOwotCi0JCUJVR19PTighc2tiKTsKLQkJbmV3X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShsb2NhbC0+bWRldiwgc2tiKTsKLQkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgbmV3X3F1ZXVlKTsKLQotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBuZXdfcXVldWUpOwotCi0KLQkJcWRpc2MgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxZGlzYyk7Ci0KLQkJc3Bpbl9sb2NrKHJvb3RfbG9jayk7Ci0JCXFkaXNjX2VucXVldWVfcm9vdChza2IsIHFkaXNjKTsKLQkJc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrX2JoKCk7Ci19CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmggYi9uZXQvbWFjODAyMTEvd21lLmgKaW5kZXggYmM2MmYyOC4uNzUyMGQyZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5oCisrKyBiL25ldC9tYWM4MDIxMS93bWUuaApAQCAtMjEsMTEgKzIxLDUgQEAKIGV4dGVybiBjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XTsKIAogdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpOwotdm9pZCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkgICB1OCByZXF1ZXVlKTsKLXZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSk7CiAKICNlbmRpZiAvKiBfV01FX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCA3YWE2M2NhLi40ZjhiZmVhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTksNiArMjAsNyBAQAogI2luY2x1ZGUgIm1pY2hhZWwuaCIKICNpbmNsdWRlICJ0a2lwLmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCiAjaW5jbHVkZSAid3BhLmgiCiAKIGllZWU4MDIxMV90eF9yZXN1bHQKQEAgLTE5NCwxOSArMTk2LDEzIEBACiBpZWVlODAyMTFfY3J5cHRvX3RraXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwotCWludCBpOwogCiAJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOwogCi0JaWYgKHRraXBfZW5jcnlwdF9za2IodHgsIHNrYikgPCAwKQotCQlyZXR1cm4gVFhfRFJPUDsKLQotCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWlmICh0a2lwX2VuY3J5cHRfc2tiKHR4LCB0eC0+ZXh0cmFfZnJhZ1tpXSkpCi0JCQkJcmV0dXJuIFRYX0RST1A7Ci0JCX0KLQl9CisJZG8geworCQlpZiAodGtpcF9lbmNyeXB0X3NrYih0eCwgc2tiKSA8IDApCisJCQlyZXR1cm4gVFhfRFJPUDsKKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CkBAIC0yNjYsNyArMjYyLDcgQEAKIAkJCQlpbnQgZW5jcnlwdGVkKQogewogCV9fbGUxNiBtYXNrX2ZjOwotCWludCBhNF9pbmNsdWRlZDsKKwlpbnQgYTRfaW5jbHVkZWQsIG1nbXQ7CiAJdTggcW9zX3RpZDsKIAl1OCAqYl8wLCAqYWFkOwogCXUxNiBkYXRhX2xlbiwgbGVuX2E7CkBAIC0yNzcsMTIgKzI3MywxNSBAQAogCWFhZCA9IHNjcmF0Y2ggKyA0ICogQUVTX0JMT0NLX0xFTjsKIAogCS8qCi0JICogTWFzayBGQzogemVybyBzdWJ0eXBlIGI0IGI1IGI2CisJICogTWFzayBGQzogemVybyBzdWJ0eXBlIGI0IGI1IGI2IChpZiBub3QgbWdtdCkKIAkgKiBSZXRyeSwgUHdyTWd0LCBNb3JlRGF0YTsgc2V0IFByb3RlY3RlZAogCSAqLworCW1nbXQgPSBpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpOwogCW1hc2tfZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JbWFza19mYyAmPSB+Y3B1X3RvX2xlMTYoMHgwMDcwIHwgSUVFRTgwMjExX0ZDVExfUkVUUlkgfAorCW1hc2tfZmMgJj0gfmNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZIHwKIAkJCQlJRUVFODAyMTFfRkNUTF9QTSB8IElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKKwlpZiAoIW1nbXQpCisJCW1hc2tfZmMgJj0gfmNwdV90b19sZTE2KDB4MDA3MCk7CiAJbWFza19mYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwogCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwpAQCAtMzAwLDggKzI5OSwxMCBAQAogCiAJLyogRmlyc3QgYmxvY2ssIGJfMCAqLwogCWJfMFswXSA9IDB4NTk7IC8qIGZsYWdzOiBBZGF0YTogMSwgTTogMDExLCBMOiAwMDEgKi8KLQkvKiBOb25jZTogUW9TIFByaW9yaXR5IHwgQTIgfCBQTiAqLwotCWJfMFsxXSA9IHFvc190aWQ7CisJLyogTm9uY2U6IE5vbmNlIEZsYWdzIHwgQTIgfCBQTgorCSAqIE5vbmNlIEZsYWdzOiBQcmlvcml0eSAoYjAuLmIzKSB8IE1hbmFnZW1lbnQgKGI0KSB8IFJlc2VydmVkIChiNS4uYjcpCisJICovCisJYl8wWzFdID0gcW9zX3RpZCB8IChtZ210IDw8IDQpOwogCW1lbWNweSgmYl8wWzJdLCBoZHItPmFkZHIyLCBFVEhfQUxFTik7CiAJbWVtY3B5KCZiXzBbOF0sIHBuLCBDQ01QX1BOX0xFTik7CiAJLyogbChtKSAqLwpAQCAtMzYwLDkgKzM2MSwxNCBAQAogCWludCBoZHJsZW4sIGxlbiwgdGFpbDsKIAl1OCAqcG9zLCAqcG47CiAJaW50IGk7CisJYm9vbCBza2lwX2h3OworCisJc2tpcF9odyA9ICh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQpICYmCisJCWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAoKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmCi0JICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKKwkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSAmJgorCSAgICAhc2tpcF9odykgewogCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUAogCQkgKiBoZWFkZXIgb3IgTUlDIGZpZWxkcyAqLwogCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOwpAQCAtMzk3LDcgKzQwMyw3IEBACiAKIAljY21wX3BuMmhkcihwb3MsIHBuLCBrZXktPmNvbmYua2V5aWR4KTsKIAotCWlmIChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKKwlpZiAoKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYgIXNraXBfaHcpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAgaGVhZGVyICovCiAJCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CiAJCXJldHVybiAwOwpAQCAtNDE2LDE5ICs0MjIsMTMgQEAKIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7Ci0JaW50IGk7CiAKIAlpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZCh0eCk7CiAKLQlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgc2tiKSA8IDApCi0JCXJldHVybiBUWF9EUk9QOwotCi0JaWYgKHR4LT5leHRyYV9mcmFnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaWYgKGNjbXBfZW5jcnlwdF9za2IodHgsIHR4LT5leHRyYV9mcmFnW2ldKSkKLQkJCQlyZXR1cm4gVFhfRFJPUDsKLQkJfQotCX0KKwlkbyB7CisJCWlmIChjY21wX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkKKwkJCXJldHVybiBUWF9EUk9QOworCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KQEAgLTQ0Niw3ICs0NDYsOCBAQAogCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcikpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAogCWRhdGFfbGVuID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBDQ01QX0hEUl9MRU4gLSBDQ01QX01JQ19MRU47CkBAIC00ODUsMyArNDg2LDEyNiBAQAogCiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQorCisKK3N0YXRpYyB2b2lkIGJpcF9hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFhZCkKK3sKKwkvKiBCSVAgQUFEOiBGQyhtYXNrZWQpIHx8IEExIHx8IEEyIHx8IEEzICovCisKKwkvKiBGQyB0eXBlL3N1YnR5cGUgKi8KKwlhYWRbMF0gPSBza2ItPmRhdGFbMF07CisJLyogTWFzayBGQyBSZXRyeSwgUHdyTWd0LCBNb3JlRGF0YSBmbGFncyB0byB6ZXJvICovCisJYWFkWzFdID0gc2tiLT5kYXRhWzFdICYgfihCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikpOworCS8qIEExIHx8IEEyIHx8IEEzICovCisJbWVtY3B5KGFhZCArIDIsIHNrYi0+ZGF0YSArIDQsIDMgKiBFVEhfQUxFTik7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGJpcF9pcG5fc3dhcCh1OCAqZCwgY29uc3QgdTggKnMpCit7CisJKmQrKyA9IHNbNV07CisJKmQrKyA9IHNbNF07CisJKmQrKyA9IHNbM107CisJKmQrKyA9IHNbMl07CisJKmQrKyA9IHNbMV07CisJKmQgPSBzWzBdOworfQorCisKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gdHgtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisJdTggKnBuLCBhYWRbMjBdOworCWludCBpOworCisJaWYgKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKKwkJLyogaHdhY2NlbCAqLworCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHNpemVvZigqbW1pZSkpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKm1taWUpKTsKKwltbWllLT5lbGVtZW50X2lkID0gV0xBTl9FSURfTU1JRTsKKwltbWllLT5sZW5ndGggPSBzaXplb2YoKm1taWUpIC0gMjsKKwltbWllLT5rZXlfaWQgPSBjcHVfdG9fbGUxNihrZXktPmNvbmYua2V5aWR4KTsKKworCS8qIFBOID0gUE4gKyAxICovCisJcG4gPSBrZXktPnUuYWVzX2NtYWMudHhfcG47CisKKwlmb3IgKGkgPSBzaXplb2Yoa2V5LT51LmFlc19jbWFjLnR4X3BuKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXBuW2ldKys7CisJCWlmIChwbltpXSkKKwkJCWJyZWFrOworCX0KKwliaXBfaXBuX3N3YXAobW1pZS0+c2VxdWVuY2VfbnVtYmVyLCBwbik7CisKKwliaXBfYWFkKHNrYiwgYWFkKTsKKworCS8qCisJICogTUlDID0gQUVTLTEyOC1DTUFDKElHVEssIEFBRCB8fCBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgfHwgTU1JRSwgNjQpCisJICovCisJaWVlZTgwMjExX2Flc19jbWFjKGtleS0+dS5hZXNfY21hYy50Zm0sIGtleS0+dS5hZXNfY21hYy50eF9jcnlwdG9fYnVmLAorCQkJICAgYWFkLCBza2ItPmRhdGEgKyAyNCwgc2tiLT5sZW4gLSAyNCwgbW1pZS0+bWljKTsKKworCXJldHVybiBUWF9DT05USU5VRTsKK30KKworCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gcngtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisJdTggYWFkWzIwXSwgbWljWzhdLCBpcG5bNl07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICgocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCArIHNpemVvZigqbW1pZSkpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWUgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgIT0gV0xBTl9FSURfTU1JRSB8fAorCSAgICBtbWllLT5sZW5ndGggIT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOyAvKiBJbnZhbGlkIE1NSUUgKi8KKworCWJpcF9pcG5fc3dhcChpcG4sIG1taWUtPnNlcXVlbmNlX251bWJlcik7CisKKwlpZiAobWVtY21wKGlwbiwga2V5LT51LmFlc19jbWFjLnJ4X3BuLCA2KSA8PSAwKSB7CisJCWtleS0+dS5hZXNfY21hYy5yZXBsYXlzKys7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWlmICghKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKKwkJLyogaGFyZHdhcmUgZGlkbid0IGRlY3J5cHQvdmVyaWZ5IE1JQyAqLworCQliaXBfYWFkKHNrYiwgYWFkKTsKKwkJaWVlZTgwMjExX2Flc19jbWFjKGtleS0+dS5hZXNfY21hYy50Zm0sCisJCQkJICAga2V5LT51LmFlc19jbWFjLnJ4X2NyeXB0b19idWYsIGFhZCwKKwkJCQkgICBza2ItPmRhdGEgKyAyNCwgc2tiLT5sZW4gLSAyNCwgbWljKTsKKwkJaWYgKG1lbWNtcChtaWMsIG1taWUtPm1pYywgc2l6ZW9mKG1taWUtPm1pYykpICE9IDApIHsKKwkJCWtleS0+dS5hZXNfY21hYy5pY3ZlcnJvcnMrKzsKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCQl9CisJfQorCisJbWVtY3B5KGtleS0+dS5hZXNfY21hYy5yeF9wbiwgaXBuLCA2KTsKKworCS8qIFJlbW92ZSBNTUlFICovCisJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5oIGIvbmV0L21hYzgwMjExL3dwYS5oCmluZGV4IGQ0MmQyMjEuLmJhYmEwNjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuaAorKysgYi9uZXQvbWFjODAyMTEvd3BhLmgKQEAgLTI4LDQgKzI4LDkgQEAKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOwogCitpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CisKICNlbmRpZiAvKiBXUEFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGMyYmFjOWMuLjJjOTY3ZTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTM1Nyw2ICszNTcsNDUgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJdHJpc3RhdGUgJyJITCIgaG9wbGltaXQgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgSVA2X05GX01BTkdMRQorCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCVRoaXMgb3B0aW9uIGFkZHMgdGhlICJITCIgKGZvciBJUHY2KSBhbmQgIlRUTCIgKGZvciBJUHY0KQorCXRhcmdldHMsIHdoaWNoIGVuYWJsZSB0aGUgdXNlciB0byBjaGFuZ2UgdGhlCisJaG9wbGltaXQvdGltZS10by1saXZlIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIuCisKKwlXaGlsZSBpdCBpcyBzYWZlIHRvIGRlY3JlbWVudCB0aGUgaG9wbGltaXQvVFRMIHZhbHVlLCB0aGUKKwltb2R1bGVzIGFsc28gYWxsb3cgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mCisJdGhlIGhlYWRlciB0byBhcmJpdHJhcnkgdmFsdWVzLiBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMKKwlzaW5jZSB5b3UgY2FuIGVhc2lseSBjcmVhdGUgaW1tb3J0YWwgcGFja2V0cyB0aGF0IGxvb3AKKwlmb3JldmVyIG9uIHRoZSBuZXR3b3JrLgorCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRUQKKwl0cmlzdGF0ZSAnIkxFRCIgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIExFRF9UUklHR0VSUworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBMRUQnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBibGluayBMRURzIGluCisJICByZXNwb25zZSB0byBwYXJ0aWN1bGFyIHBhY2tldHMgcGFzc2luZyB0aHJvdWdoIHlvdXIgbWFjaGluZS4KKworCSAgVGhpcyBjYW4gYmUgdXNlZCB0byB0dXJuIGEgc3BhcmUgTEVEIGludG8gYSBuZXR3b3JrIGFjdGl2aXR5IExFRCwKKwkgIHdoaWNoIG9ubHkgZmxhc2hlcyBpbiByZXNwb25zZSB0byBGVFAgdHJhbnNmZXJzLCBmb3IgZXhhbXBsZS4gIE9yCisJICB5b3UgY291bGQgaGF2ZSBhbiBMRUQgd2hpY2ggbGlnaHRzIHVwIGZvciBhIG1pbnV0ZSBvciB0d28gZXZlcnkgdGltZQorCSAgc29tZWJvZHkgY29ubmVjdHMgdG8geW91ciBtYWNoaW5lIHZpYSBTU0guCisKKwkgIFlvdSB3aWxsIG5lZWQgc3VwcG9ydCBmb3IgdGhlICJsZWQiIGNsYXNzIHRvIG1ha2UgdGhpcyB3b3JrLgorCisJICBUbyBjcmVhdGUgYW4gTEVEIHRyaWdnZXIgZm9yIGluY29taW5nIFNTSCB0cmFmZmljOgorCSAgICBpcHRhYmxlcyAtQSBJTlBVVCAtcCB0Y3AgLS1kcG9ydCAyMiAtaiBMRUQgLS1sZWQtdHJpZ2dlci1pZCBzc2ggLS1sZWQtZGVsYXkgMTAwMAorCisJICBUaGVuIGF0dGFjaCB0aGUgbmV3IHRyaWdnZXIgdG8gYW4gTEVEIG9uIHlvdXIgc3lzdGVtOgorCSAgICBlY2hvIG5ldGZpbHRlci1zc2ggPiAvc3lzL2NsYXNzL2xlZHMvPGxlZG5hbWU+L3RyaWdnZXIKKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIExFRHMgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtLCBzZWUKKwkgIERvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQKKwogY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSwogCXRyaXN0YXRlICciTUFSSyIgdGFyZ2V0IHN1cHBvcnQnCiAJZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uCkBAIC00ODgsNiArNTI3LDIyIEBACiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgIlRDUE9QVFNUUklQIiB0YXJnZXQsIHdoaWNoIGFsbG93cyB5b3UgdG8gc3RyaXAKIAkgIFRDUCBvcHRpb25zIGZyb20gVENQIHBhY2tldHMuCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUgorCXRyaXN0YXRlICciY2x1c3RlciIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBidWlsZCB3b3JrLWxvYWQtc2hhcmluZyBjbHVzdGVycyBvZgorCSAgbmV0d29yayBzZXJ2ZXJzL3N0YXRlZnVsIGZpcmV3YWxscyB3aXRob3V0IGhhdmluZyBhIGRlZGljYXRlZAorCSAgbG9hZC1iYWxhbmNpbmcgcm91dGVyL3NlcnZlci9zd2l0Y2guIEJhc2ljYWxseSwgdGhpcyBtYXRjaCByZXR1cm5zCisJICB0cnVlIHdoZW4gdGhlIHBhY2tldCBtdXN0IGJlIGhhbmRsZWQgYnkgdGhpcyBjbHVzdGVyIG5vZGUuIFRodXMsCisJICBhbGwgbm9kZXMgc2VlIGFsbCBwYWNrZXRzIGFuZCB0aGlzIG1hdGNoIGRlY2lkZXMgd2hpY2ggbm9kZSBoYW5kbGVzCisJICB3aGF0IHBhY2tldHMuIFRoZSB3b3JrLWxvYWQgc2hhcmluZyBhbGdvcml0aG0gaXMgYmFzZWQgb24gc291cmNlCisJICBhZGRyZXNzIGhhc2hpbmcuCisKKwkgIElmIHlvdSBzYXkgWSBvciBNIGhlcmUsIHRyeSBgaXB0YWJsZXMgLW0gY2x1c3RlciAtLWhlbHBgIGZvcgorCSAgbW9yZSBpbmZvcm1hdGlvbi4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UCiAJdHJpc3RhdGUgICciY29tbWVudCIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApAQCAtNjA1LDYgKzY2MCwxNCBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCXRyaXN0YXRlICciaGwiIGhvcGxpbWl0L1RUTCBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCUhMIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGUgaG9wbGltaXQKKwlpbiB0aGUgSVB2NiBoZWFkZXIsIG9yIHRoZSB0aW1lLXRvLWxpdmUgZmllbGQgaW4gdGhlIElQdjQKKwloZWFkZXIgb2YgdGhlIHBhY2tldC4KKwogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFCiAJdHJpc3RhdGUgJyJpcHJhbmdlIiBhZGRyZXNzIHJhbmdlIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IGRhM2Q5MDkuLjYyODIwNjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNDUsNiArNDUsOCBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUkspICs9IHh0X0NPTk5NQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLKSArPSB4dF9DT05OU0VDTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQKSArPSB4dF9EU0NQLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMKSArPSB4dF9ITC5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQpICs9IHh0X0xFRC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLKSArPSB4dF9NQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HKSArPSB4dF9ORkxPRy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFKSArPSB4dF9ORlFVRVVFLm8KQEAgLTU3LDYgKzU5LDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSArPSB4dF9UUkFDRS5vCiAKICMgbWF0Y2hlcworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSKSArPSB4dF9jbHVzdGVyLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCkgKz0geHRfY29tbWVudC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUykgKz0geHRfY29ubmJ5dGVzLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUKSArPSB4dF9jb25ubGltaXQubwpAQCAtNjcsNiArNzAsNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1ApICs9IHh0X2VzcC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCkgKz0geHRfaGFzaGxpbWl0Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSKSArPSB4dF9oZWxwZXIubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCkgKz0geHRfaGwubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFKSArPSB4dF9pcHJhbmdlLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIKSArPSB4dF9sZW5ndGgubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCkgKz0geHRfbGltaXQubwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCBhOTBhYzgzLi41YmIzNDczIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMTc0LDcgKzE3NCw2IEBACiAJCQkgICAgIG91dGRldiwgJmVsZW0sIG9rZm4sIGhvb2tfdGhyZXNoKTsKIAlpZiAodmVyZGljdCA9PSBORl9BQ0NFUFQgfHwgdmVyZGljdCA9PSBORl9TVE9QKSB7CiAJCXJldCA9IDE7Ci0JCWdvdG8gdW5sb2NrOwogCX0gZWxzZSBpZiAodmVyZGljdCA9PSBORl9EUk9QKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXQgPSAtRVBFUk07CkBAIC0xODMsNyArMTgyLDYgQEAKIAkJCSAgICAgIHZlcmRpY3QgPj4gTkZfVkVSRElDVF9CSVRTKSkKIAkJCWdvdG8gbmV4dF9ob29rOwogCX0KLXVubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNmJlNWQ0ZS4uNWM0ODM3OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC0xNDksOCArMTQ5LDggQEAKIC8qIG11bHRpY2FzdCBhZGRyICovCiBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIG1jYXN0X2FkZHIgPSB7CiAJLnNpbl9mYW1pbHkJCT0gQUZfSU5FVCwKLQkuc2luX3BvcnQJCT0gX19jb25zdGFudF9odG9ucyhJUF9WU19TWU5DX1BPUlQpLAotCS5zaW5fYWRkci5zX2FkZHIJPSBfX2NvbnN0YW50X2h0b25sKElQX1ZTX1NZTkNfR1JPVVApLAorCS5zaW5fcG9ydAkJPSBjcHVfdG9fYmUxNihJUF9WU19TWU5DX1BPUlQpLAorCS5zaW5fYWRkci5zX2FkZHIJPSBjcHVfdG9fYmUzMihJUF9WU19TWU5DX0dST1VQKSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCA0ZjhmY2Y0Li4wN2Q5ZDg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS5oZWxwCQkJPSBhbWFuZGFfaGVscCwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMTAwODApLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNigxMDA4MCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJmFtYW5kYV9leHBfcG9saWN5LAogCX0sCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLmhlbHAJCQk9IGFtYW5kYV9oZWxwLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMTAwODApLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNigxMDA4MCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJmFtYW5kYV9leHBfcG9saWN5LAogCX0sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggZjQ5MzVlMy4uODAyMGRiNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgogCiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CkBAIC01NCw3ICs1NSw3IEBACiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOwogCi1pbnQgbmZfY29ubnRyYWNrX21heCBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19tYXggX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19tYXgpOwogCiBzdHJ1Y3QgbmZfY29ubiBuZl9jb25udHJhY2tfdW50cmFja2VkIF9fcmVhZF9tb3N0bHk7CkBAIC0xNjMsOCArMTY0LDggQEAKIGNsZWFuX2Zyb21fbGlzdHMoc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCXByX2RlYnVnKCJjbGVhbl9mcm9tX2xpc3RzKCVwKVxuIiwgY3QpOwotCWhsaXN0X2RlbF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm9kZSk7Ci0JaGxpc3RfZGVsX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLmhub2RlKTsKKwlobGlzdF9udWxsc19kZWxfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5ub2RlKTsKKwlobGlzdF9udWxsc19kZWxfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0uaG5ub2RlKTsKIAogCS8qIERlc3Ryb3kgYWxsIHBlbmRpbmcgZXhwZWN0YXRpb25zICovCiAJbmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7CkBAIC0yMDQsOCArMjA1LDggQEAKIAogCS8qIFdlIG92ZXJsb2FkIGZpcnN0IHR1cGxlIHRvIGxpbmsgaW50byB1bmNvbmZpcm1lZCBsaXN0LiAqLwogCWlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkgewotCQlCVUdfT04oaGxpc3RfdW5oYXNoZWQoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm9kZSkpOwotCQlobGlzdF9kZWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm9kZSk7CisJCUJVR19PTihobGlzdF9udWxsc191bmhhc2hlZCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhubm9kZSkpOworCQlobGlzdF9udWxsc19kZWxfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5ub2RlKTsKIAl9CiAKIAlORl9DVF9TVEFUX0lOQyhuZXQsIGRlbGV0ZSk7CkBAIC0yNDIsMTggKzI0MywyNiBAQAogCW5mX2N0X3B1dChjdCk7CiB9CiAKKy8qCisgKiBXYXJuaW5nIDoKKyAqIC0gQ2FsbGVyIG11c3QgdGFrZSBhIHJlZmVyZW5jZSBvbiByZXR1cm5lZCBvYmplY3QKKyAqICAgYW5kIHJlY2hlY2sgbmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkKKyAqIE9SCisgKiAtIENhbGxlciBtdXN0IGxvY2sgbmZfY29ubnRyYWNrX2xvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICovCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgogX19uZl9jb25udHJhY2tfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKIAogCS8qIERpc2FibGUgQkhzIHRoZSBlbnRpcmUgdGltZSBzaW5jZSB3ZSBub3JtYWxseSBuZWVkIHRvIGRpc2FibGUgdGhlbQogCSAqIGF0IGxlYXN0IG9uY2UgZm9yIHRoZSBzdGF0cyBhbnl3YXkuCiAJICovCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm9kZSkgeworYmVnaW46CisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sIGhubm9kZSkgewogCQlpZiAobmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkpIHsKIAkJCU5GX0NUX1NUQVRfSU5DKG5ldCwgZm91bmQpOwogCQkJbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC0yNjEsNiArMjcwLDEzIEBACiAJCX0KIAkJTkZfQ1RfU1RBVF9JTkMobmV0LCBzZWFyY2hlZCk7CiAJfQorCS8qCisJICogaWYgdGhlIG51bGxzIHZhbHVlIHdlIGdvdCBhdCB0aGUgZW5kIG9mIHRoaXMgbG9va3VwIGlzCisJICogbm90IHRoZSBleHBlY3RlZCBvbmUsIHdlIG11c3QgcmVzdGFydCBsb29rdXAuCisJICogV2UgcHJvYmFibHkgbWV0IGFuIGl0ZW0gdGhhdCB3YXMgbW92ZWQgdG8gYW5vdGhlciBjaGFpbi4KKwkgKi8KKwlpZiAoZ2V0X251bGxzX3ZhbHVlKG4pICE9IGhhc2gpCisJCWdvdG8gYmVnaW47CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI3NSwxMSArMjkxLDE4IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCiAJcmN1X3JlYWRfbG9jaygpOworYmVnaW46CiAJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQobmV0LCB0dXBsZSk7CiAJaWYgKGgpIHsKIAkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQogCQkJaCA9IE5VTEw7CisJCWVsc2UgeworCQkJaWYgKHVubGlrZWx5KCFuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSkpIHsKKwkJCQluZl9jdF9wdXQoY3QpOworCQkJCWdvdG8gYmVnaW47CisJCQl9CisJCX0KIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTI5Myw5ICszMTYsOSBAQAogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CiAKLQlobGlzdF9hZGRfaGVhZF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm9kZSwKKwlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm5vZGUsCiAJCQkgICAmbmV0LT5jdC5oYXNoW2hhc2hdKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS5obm9kZSwKKwlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS5obm5vZGUsCiAJCQkgICAmbmV0LT5jdC5oYXNoW3JlcGxfaGFzaF0pOwogfQogCkBAIC0zMTgsNyArMzQxLDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJc3RydWN0IG5ldCAqbmV0OwogCkBAIC0zNTAsMTcgKzM3MywxNyBAQAogCS8qIFNlZSBpZiB0aGVyZSdzIG9uZSBpbiB0aGUgbGlzdCBhbHJlYWR5LCBpbmNsdWRpbmcgcmV2ZXJzZToKIAkgICBOQVQgY291bGQgaGF2ZSBncmFiYmVkIGl0IHdpdGhvdXQgcmVhbGl6aW5nLCBzaW5jZSB3ZSdyZQogCSAgIG5vdCBpbiB0aGUgaGFzaC4gIElmIHRoZXJlIGlzLCB3ZSBsb3N0IHJhY2UuICovCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5vZGUpCisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5ub2RlKQogCQlpZiAobmZfY3RfdHVwbGVfZXF1YWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKIAkJCQkgICAgICAmaC0+dHVwbGUpKQogCQkJZ290byBvdXQ7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtyZXBsX2hhc2hdLCBobm9kZSkKKwlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoW3JlcGxfaGFzaF0sIGhubm9kZSkKIAkJaWYgKG5mX2N0X3R1cGxlX2VxdWFsKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUsCiAJCQkJICAgICAgJmgtPnR1cGxlKSkKIAkJCWdvdG8gb3V0OwogCiAJLyogUmVtb3ZlIGZyb20gdW5jb25maXJtZWQgbGlzdCAqLwotCWhsaXN0X2RlbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhub2RlKTsKKwlobGlzdF9udWxsc19kZWxfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5ub2RlKTsKIAogCV9fbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0LCBoYXNoLCByZXBsX2hhc2gpOwogCS8qIFRpbWVyIHJlbGF0aXZlIHRvIGNvbmZpcm1hdGlvbiB0aW1lLCBub3Qgb3JpZ2luYWwKQEAgLTM5OSwxNCArNDIyLDE0IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGlnbm9yZWRfY29ubnRyYWNrKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayh0dXBsZSk7CiAKIAkvKiBEaXNhYmxlIEJIcyB0aGUgZW50aXJlIHRpbWUgc2luY2Ugd2UgbmVlZCB0byBkaXNhYmxlIHRoZW0gYXQKIAkgKiBsZWFzdCBvbmNlIGZvciB0aGUgc3RhdHMgYW55d2F5LgogCSAqLwogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5vZGUpIHsKKwlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5ub2RlKSB7CiAJCWlmIChuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpICE9IGlnbm9yZWRfY29ubnRyYWNrICYmCiAJCSAgICBuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSkgewogCQkJTkZfQ1RfU1RBVF9JTkMobmV0LCBmb3VuZCk7CkBAIC00MzAsMTQgKzQ1MywxNCBAQAogCS8qIFVzZSBvbGRlc3QgZW50cnksIHdoaWNoIGlzIHJvdWdobHkgTFJVICovCiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IE5VTEwsICp0bXA7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAJdW5zaWduZWQgaW50IGksIGNudCA9IDA7CiAJaW50IGRyb3BwZWQgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwKLQkJCQkJIGhub2RlKSB7CisJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLAorCQkJCQkgaG5ub2RlKSB7CiAJCQl0bXAgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQkJaWYgKCF0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZ0bXAtPnN0YXR1cykpCiAJCQkJY3QgPSB0bXA7CkBAIC00NzIsNyArNDk1LDggQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAlpZiAodW5saWtlbHkoIW5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsCisJCQkJc2l6ZW9mKG5mX2Nvbm50cmFja19oYXNoX3JuZCkpOwogCQluZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZCA9IDE7CiAJfQogCkBAIC01MDcsMjYgKzUzMSwxOSBAQAogI2lmZGVmIENPTkZJR19ORVRfTlMKIAljdC0+Y3RfbmV0ID0gbmV0OwogI2VuZGlmCi0JSU5JVF9SQ1VfSEVBRCgmY3QtPnJjdSk7CiAKIAlyZXR1cm4gY3Q7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfYWxsb2MpOwogCi1zdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBuZl9jb25uICpjdCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbmZfY29ubiwgcmN1KTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOwotCi0JbmZfY3RfZXh0X2ZyZWUoY3QpOwotCWttZW1fY2FjaGVfZnJlZShuZl9jb25udHJhY2tfY2FjaGVwLCBjdCk7Ci0JYXRvbWljX2RlYygmbmV0LT5jdC5jb3VudCk7Ci19Ci0KIHZvaWQgbmZfY29ubnRyYWNrX2ZyZWUoc3RydWN0IG5mX2Nvbm4gKmN0KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisKIAluZl9jdF9leHRfZGVzdHJveShjdCk7Ci0JY2FsbF9yY3UoJmN0LT5yY3UsIG5mX2Nvbm50cmFja19mcmVlX3JjdSk7CisJYXRvbWljX2RlYygmbmV0LT5jdC5jb3VudCk7CisJbmZfY3RfZXh0X2ZyZWUoY3QpOworCWttZW1fY2FjaGVfZnJlZShuZl9jb25udHJhY2tfY2FjaGVwLCBjdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfZnJlZSk7CiAKQEAgLTU5Miw3ICs2MDksNyBAQAogCX0KIAogCS8qIE92ZXJsb2FkIHR1cGxlIGxpbmtlZCBsaXN0IHRvIHB1dCB1cyBpbiB1bmNvbmZpcm1lZCBsaXN0LiAqLwotCWhsaXN0X2FkZF9oZWFkKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5vZGUsCisJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5ub2RlLAogCQkgICAgICAgJm5ldC0+Y3QudW5jb25maXJtZWQpOwogCiAJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKQEAgLTczMyw2ICs3NTAsOCBAQAogCQluZl9jb25udHJhY2tfcHV0KHNrYi0+bmZjdCk7CiAJCXNrYi0+bmZjdCA9IE5VTEw7CiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGludmFsaWQpOworCQlpZiAocmV0ID09IC1ORl9EUk9QKQorCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgZHJvcCk7CiAJCXJldHVybiAtcmV0OwogCX0KIApAQCAtOTAyLDYgKzkyMSwxMiBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUpOworCitpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihuZl9jdF9wb3J0X25sYV9wb2xpY3ksIENUQV9QUk9UT19NQVggKyAxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUpOwogI2VuZGlmCiAKIC8qIFVzZWQgYnkgaXB0X1JFSkVDVCBhbmQgaXA2dF9SRUpFQ1QuICovCkBAIC05MzAsMTcgKzk1NSwxNyBAQAogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlmb3IgKDsgKmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgKCpidWNrZXQpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFsqYnVja2V0XSwgaG5vZGUpIHsKKwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFsqYnVja2V0XSwgaG5ub2RlKSB7CiAJCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCQlpZiAoaXRlcihjdCwgZGF0YSkpCiAJCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC51bmNvbmZpcm1lZCwgaG5vZGUpIHsKKwlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC51bmNvbmZpcm1lZCwgaG5ub2RlKSB7CiAJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJaWYgKGl0ZXIoY3QsIGRhdGEpKQogCQkJc2V0X2JpdChJUFNfRFlJTkdfQklULCAmY3QtPnN0YXR1cyk7CkBAIC05ODgsNyArMTAxMyw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgbmZfY3RfZnJlZV9oYXNodGFibGUoc3RydWN0IGhsaXN0X2hlYWQgKmhhc2gsIGludCB2bWFsbG9jZWQsIHVuc2lnbmVkIGludCBzaXplKQordm9pZCBuZl9jdF9mcmVlX2hhc2h0YWJsZSh2b2lkICpoYXNoLCBpbnQgdm1hbGxvY2VkLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAlpZiAodm1hbGxvY2VkKQogCQl2ZnJlZShoYXNoKTsKQEAgLTEwNTYsMjYgKzEwODEsMjggQEAKIAl9CiB9CiAKLXN0cnVjdCBobGlzdF9oZWFkICpuZl9jdF9hbGxvY19oYXNodGFibGUodW5zaWduZWQgaW50ICpzaXplcCwgaW50ICp2bWFsbG9jZWQpCit2b2lkICpuZl9jdF9hbGxvY19oYXNodGFibGUodW5zaWduZWQgaW50ICpzaXplcCwgaW50ICp2bWFsbG9jZWQsIGludCBudWxscykKIHsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaDsKLQl1bnNpZ25lZCBpbnQgc2l6ZSwgaTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGFzaDsKKwl1bnNpZ25lZCBpbnQgbnJfc2xvdHMsIGk7CisJc2l6ZV90IHN6OwogCiAJKnZtYWxsb2NlZCA9IDA7CiAKLQlzaXplID0gKnNpemVwID0gcm91bmR1cCgqc2l6ZXAsIFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwotCWhhc2ggPSAodm9pZCopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTiwKLQkJCQkgICAgICAgZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkKLQkJCQkJCSAqIHNpemUpKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBobGlzdF9udWxsc19oZWFkKSAhPSBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKKwlucl9zbG90cyA9ICpzaXplcCA9IHJvdW5kdXAoKnNpemVwLCBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGhsaXN0X251bGxzX2hlYWQpKTsKKwlzeiA9IG5yX3Nsb3RzICogc2l6ZW9mKHN0cnVjdCBobGlzdF9udWxsc19oZWFkKTsKKwloYXNoID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPLAorCQkJCQlnZXRfb3JkZXIoc3opKTsKIAlpZiAoIWhhc2gpIHsKIAkJKnZtYWxsb2NlZCA9IDE7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5mX2Nvbm50cmFjazogZmFsbGluZyBiYWNrIHRvIHZtYWxsb2MuXG4iKTsKLQkJaGFzaCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSAqIHNpemUpOworCQloYXNoID0gX192bWFsbG9jKHN6LCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwogCX0KIAotCWlmIChoYXNoKQotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQkJSU5JVF9ITElTVF9IRUFEKCZoYXNoW2ldKTsKKwlpZiAoaGFzaCAmJiBudWxscykKKwkJZm9yIChpID0gMDsgaSA8IG5yX3Nsb3RzOyBpKyspCisJCQlJTklUX0hMSVNUX05VTExTX0hFQUQoJmhhc2hbaV0sIGkpOwogCiAJcmV0dXJuIGhhc2g7CiB9CkBAIC0xMDg2LDcgKzExMTMsNyBAQAogCWludCBpLCBidWNrZXQsIHZtYWxsb2NlZCwgb2xkX3ZtYWxsb2NlZDsKIAl1bnNpZ25lZCBpbnQgaGFzaHNpemUsIG9sZF9zaXplOwogCWludCBybmQ7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhhc2gsICpvbGRfaGFzaDsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGFzaCwgKm9sZF9oYXNoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAogCS8qIE9uIGJvb3QsIHdlIGNhbiBzZXQgdGhpcyB3aXRob3V0IGFueSBmYW5jeSBsb2NraW5nLiAqLwpAQCAtMTA5NywxMyArMTEyNCwxMyBAQAogCWlmICghaGFzaHNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaGFzaCA9IG5mX2N0X2FsbG9jX2hhc2h0YWJsZSgmaGFzaHNpemUsICZ2bWFsbG9jZWQpOworCWhhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJmhhc2hzaXplLCAmdm1hbGxvY2VkLCAxKTsKIAlpZiAoIWhhc2gpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogV2UgaGF2ZSB0byByZWhhaHMgZm9yIHRoZSBuZXcgdGFibGUgYW55d2F5LCBzbyB3ZSBhbHNvIGNhbgogCSAqIHVzZSBhIG5ld3JhbmRvbSBzZWVkICovCi0JZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCA0KTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZybmQsIHNpemVvZihybmQpKTsKIAogCS8qIExvb2t1cHMgaW4gdGhlIG9sZCBoYXNoIG1pZ2h0IGhhcHBlbiBpbiBwYXJhbGxlbCwgd2hpY2ggbWVhbnMgd2UKIAkgKiBtaWdodCBnZXQgZmFsc2UgbmVnYXRpdmVzIGR1cmluZyBjb25uZWN0aW9uIGxvb2t1cC4gTmV3IGNvbm5lY3Rpb25zCkBAIC0xMTEyLDEyICsxMTM5LDEyIEBACiAJICovCiAJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgaSsrKSB7Ci0JCXdoaWxlICghaGxpc3RfZW1wdHkoJmluaXRfbmV0LmN0Lmhhc2hbaV0pKSB7Ci0JCQloID0gaGxpc3RfZW50cnkoaW5pdF9uZXQuY3QuaGFzaFtpXS5maXJzdCwKLQkJCQkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoLCBobm9kZSk7Ci0JCQlobGlzdF9kZWxfcmN1KCZoLT5obm9kZSk7CisJCXdoaWxlICghaGxpc3RfbnVsbHNfZW1wdHkoJmluaXRfbmV0LmN0Lmhhc2hbaV0pKSB7CisJCQloID0gaGxpc3RfbnVsbHNfZW50cnkoaW5pdF9uZXQuY3QuaGFzaFtpXS5maXJzdCwKKwkJCQkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoLCBobm5vZGUpOworCQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmaC0+aG5ub2RlKTsKIAkJCWJ1Y2tldCA9IF9faGFzaF9jb25udHJhY2soJmgtPnR1cGxlLCBoYXNoc2l6ZSwgcm5kKTsKLQkJCWhsaXN0X2FkZF9oZWFkKCZoLT5obm9kZSwgJmhhc2hbYnVja2V0XSk7CisJCQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmgtPmhubm9kZSwgJmhhc2hbYnVja2V0XSk7CiAJCX0KIAl9CiAJb2xkX3NpemUgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CkBAIC0xMTY4LDcgKzExOTUsNyBAQAogCiAJbmZfY29ubnRyYWNrX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJuZl9jb25udHJhY2siLAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBuZl9jb25uKSwKLQkJCQkJCTAsIDAsIE5VTEwpOworCQkJCQkJMCwgU0xBQl9ERVNUUk9ZX0JZX1JDVSwgTlVMTCk7CiAJaWYgKCFuZl9jb25udHJhY2tfY2FjaGVwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSBuZl9jb25uIHNsYWIgY2FjaGVcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTE5OCw3ICsxMjI1LDcgQEAKIAlpbnQgcmV0OwogCiAJYXRvbWljX3NldCgmbmV0LT5jdC5jb3VudCwgMCk7Ci0JSU5JVF9ITElTVF9IRUFEKCZuZXQtPmN0LnVuY29uZmlybWVkKTsKKwlJTklUX0hMSVNUX05VTExTX0hFQUQoJm5ldC0+Y3QudW5jb25maXJtZWQsIDApOwogCW5ldC0+Y3Quc3RhdCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgaXBfY29ubnRyYWNrX3N0YXQpOwogCWlmICghbmV0LT5jdC5zdGF0KSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMjA4LDcgKzEyMzUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9lY2FjaGU7CiAJbmV0LT5jdC5oYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCi0JCQkJCQkgICZuZXQtPmN0Lmhhc2hfdm1hbGxvYyk7CisJCQkJCSAgICAgJm5ldC0+Y3QuaGFzaF92bWFsbG9jLCAxKTsKIAlpZiAoIW5ldC0+Y3QuaGFzaCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgbmZfY29ubnRyYWNrX2hhc2hcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwppbmRleCAzYThhMzRhLi4zOTQwZjk5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwpAQCAtNzIsNyArNzIsOCBAQAogCXVuc2lnbmVkIGludCBoYXNoOwogCiAJaWYgKHVubGlrZWx5KCFuZl9jdF9leHBlY3RfaGFzaF9ybmRfaW5pdHRlZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY3RfZXhwZWN0X2hhc2hfcm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY3RfZXhwZWN0X2hhc2hfcm5kLAorCQkJCSBzaXplb2YobmZfY3RfZXhwZWN0X2hhc2hfcm5kKSk7CiAJCW5mX2N0X2V4cGVjdF9oYXNoX3JuZF9pbml0dGVkID0gMTsKIAl9CiAKQEAgLTYwMyw3ICs2MDQsNyBAQAogCiAJbmV0LT5jdC5leHBlY3RfY291bnQgPSAwOwogCW5ldC0+Y3QuZXhwZWN0X2hhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX2N0X2V4cGVjdF9oc2l6ZSwKLQkJCQkJCSAgJm5ldC0+Y3QuZXhwZWN0X3ZtYWxsb2MpOworCQkJCQkJICAmbmV0LT5jdC5leHBlY3Rfdm1hbGxvYywgMCk7CiAJaWYgKG5ldC0+Y3QuZXhwZWN0X2hhc2ggPT0gTlVMTCkKIAkJZ290byBlcnIxOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDY4N2JkNjMuLjY2MzY5NDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC0xMTY3LDcgKzExNjcsNyBAQAogCQkubmFtZQkJCT0gIlEuOTMxIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gY3B1X3RvX2JlMTYoUTkzMV9QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVENQLAogCQkuaGVscAkJCT0gcTkzMV9oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcTkzMV9leHBfcG9saWN5LApAQCAtMTE3Niw3ICsxMTc2LDcgQEAKIAkJLm5hbWUJCQk9ICJRLjkzMSIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKLQkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhROTMxX1BPUlQpLAorCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBjcHVfdG9fYmUxNihROTMxX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJCS5oZWxwCQkJPSBxOTMxX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZxOTMxX2V4cF9wb2xpY3ksCkBAIC0xNzQxLDcgKzE3NDEsNyBAQAogCQkubmFtZQkJCT0gIlJBUyIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFJBU19QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoUkFTX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJCS5oZWxwCQkJPSByYXNfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnJhc19leHBfcG9saWN5LApAQCAtMTc1MCw3ICsxNzUwLDcgQEAKIAkJLm5hbWUJCQk9ICJSQVMiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUkFTX1BPUlQpLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihSQVNfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmhlbHAJCQk9IHJhc19oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcmFzX2V4cF9wb2xpY3ksCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCmluZGV4IGE1MWJkYWMuLjMwYjhlOTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCkBAIC0xNDIsNiArMTQyLDcgQEAKIAogCUJVR19PTihtZS0+ZXhwZWN0X3BvbGljeSA9PSBOVUxMKTsKIAlCVUdfT04obWUtPmV4cGVjdF9jbGFzc19tYXggPj0gTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKTsKKwlCVUdfT04oc3RybGVuKG1lLT5uYW1lKSA+IE5GX0NUX0hFTFBFUl9OQU1FX0xFTiAtIDEpOwogCiAJbXV0ZXhfbG9jaygmbmZfY3RfaGVscGVyX211dGV4KTsKIAlobGlzdF9hZGRfaGVhZF9yY3UoJm1lLT5obm9kZSwgJm5mX2N0X2hlbHBlcl9oYXNoW2hdKTsKQEAgLTE1OCw2ICsxNTksNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwljb25zdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm47CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBHZXQgcmlkIG9mIGV4cGVjdGF0aW9ucyAqLwpAQCAtMTc0LDEwICsxNzYsMTAgQEAKIAl9CiAKIAkvKiBHZXQgcmlkIG9mIGV4cGVjdGVkcywgc2V0IGhlbHBlcnMgdG8gTlVMTC4gKi8KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC51bmNvbmZpcm1lZCwgaG5vZGUpCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbm4sICZuZXQtPmN0LnVuY29uZmlybWVkLCBobm5vZGUpCiAJCXVuaGVscChoLCBtZSk7CiAJZm9yIChpID0gMDsgaSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbaV0sIGhub2RlKQorCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBubiwgJm5ldC0+Y3QuaGFzaFtpXSwgaG5ub2RlKQogCQkJdW5oZWxwKGgsIG1lKTsKIAl9CiB9CkBAIC0yMTcsNyArMjE5LDcgQEAKIAogCW5mX2N0X2hlbHBlcl9oc2l6ZSA9IDE7IC8qIGdldHMgcm91bmRlZCB1cCB0byB1c2Ugb25lIHBhZ2UgKi8KIAluZl9jdF9oZWxwZXJfaGFzaCA9IG5mX2N0X2FsbG9jX2hhc2h0YWJsZSgmbmZfY3RfaGVscGVyX2hzaXplLAotCQkJCQkJICAmbmZfY3RfaGVscGVyX3ZtYWxsb2MpOworCQkJCQkJICAmbmZfY3RfaGVscGVyX3ZtYWxsb2MsIDApOwogCWlmICghbmZfY3RfaGVscGVyX2hhc2gpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKaW5kZXggNWFmNDI3My4uOGEzODc1ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaGVscGVyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCQk9ICJuZXRiaW9zLW5zIiwKIAkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKE5NQkRfUE9SVCksCisJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoTk1CRF9QT1JUKSwKIAkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkuaGVscAkJCT0gaGVscCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCBlZDZkODczLi5jNjQzOWM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3RfbnVsbHMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC00MDQsNiArNDA1LDc4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUworLyoKKyAqIFRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBhIGN0bmV0bGluayBldmVudCBpcworICoKKyAqICBDVEFfVFVQTEVfT1JJRworICogICAgPGwzL2w0LXByb3RvLWF0dHJpYnV0ZXM+CisgKiAgQ1RBX1RVUExFX1JFUExZCisgKiAgICA8bDMvbDQtcHJvdG8tYXR0cmlidXRlcz4KKyAqICBDVEFfSUQKKyAqICAuLi4KKyAqICBDVEFfUFJPVE9JTkZPCisgKiAgICA8bDQtcHJvdG8tYXR0cmlidXRlcz4KKyAqICBDVEFfVFVQTEVfTUFTVEVSCisgKiAgICA8bDMvbDQtcHJvdG8tYXR0cmlidXRlcz4KKyAqCisgKiBUaGVyZWZvcmUgdGhlIGZvcm11bGFyIGlzCisgKgorICogICBzaXplID0gc2l6ZW9mKGhlYWRlcnMpICsgc2l6ZW9mKGdlbmVyaWNfbmxhcykgKyAzICogc2l6ZW9mKHR1cGxlX25sYXMpCisgKgkJKyBzaXplb2YocHJvdG9pbmZvX25sYXMpCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCitjdG5ldGxpbmtfYWxsb2Nfc2tiKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLCBnZnBfdCBnZnApCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKKwlpbnQgbGVuOworCisjZGVmaW5lIE5MQV9UWVBFX1NJWkUodHlwZSkJCW5sYV90b3RhbF9zaXplKHNpemVvZih0eXBlKSkKKworCS8qIHByb3RvIGluZGVwZW5kYW50IHBhcnQgKi8KKwlsZW4gPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IG5mZ2VubXNnKSkKKwkJKyAzICogbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9UVVBMRV9PUklHfFJFUEx8TUFTVEVSICovCisJCSsgMyAqIG5sYV90b3RhbF9zaXplKDApCQkvKiBDVEFfVFVQTEVfSVAgKi8KKwkJKyAzICogbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9UVVBMRV9QUk9UTyAqLworCQkrIDMgKiBOTEFfVFlQRV9TSVpFKHVfaW50OF90KQkvKiBDVEFfUFJPVE9fTlVNICovCisJCSsgTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9JRCAqLworCQkrIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfU1RBVFVTICovCisjaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKKwkJKyAyICogbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9DT1VOVEVSU19PUklHfFJFUEwgKi8KKwkJKyAyICogTkxBX1RZUEVfU0laRSh1aW50NjRfdCkJLyogQ1RBX0NPVU5URVJTX1BBQ0tFVFMgKi8KKwkJKyAyICogTkxBX1RZUEVfU0laRSh1aW50NjRfdCkJLyogQ1RBX0NPVU5URVJTX0JZVEVTICovCisjZW5kaWYKKwkJKyBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX1RJTUVPVVQgKi8KKwkJKyBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX1BST1RPSU5GTyAqLworCQkrIG5sYV90b3RhbF9zaXplKDApCQkvKiBDVEFfSEVMUCAqLworCQkrIG5sYV90b3RhbF9zaXplKE5GX0NUX0hFTFBFUl9OQU1FX0xFTikJLyogQ1RBX0hFTFBfTkFNRSAqLworI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSworCQkrIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfU0VDTUFSSyAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwkJKyAyICogbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9OQVRfU0VRX0FESl9PUklHfFJFUEwgKi8KKwkJKyAyICogTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9OQVRfU0VRX0NPUlJFQ1RJT05fUE9TICovCisJCSsgMiAqIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfTkFUX1NFUV9DT1JSRUNUSU9OX0JFRk9SRSAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX05BVF9TRVFfQ09SUkVDVElPTl9BRlRFUiAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCisJCSsgTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9NQVJLICovCisjZW5kaWYKKwkJOworCisjdW5kZWYgTkxBX1RZUEVfU0laRQorCisJcmN1X3JlYWRfbG9jaygpOworCWwzcHJvdG8gPSBfX25mX2N0X2wzcHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtKTsKKwlsZW4gKz0gbDNwcm90by0+bmxhX3NpemU7CisKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CisJbGVuICs9IGw0cHJvdG8tPm5sYV9zaXplOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIGFsbG9jX3NrYihsZW4sIGdmcCk7Cit9CisKIHN0YXRpYyBpbnQgY3RuZXRsaW5rX2Nvbm50cmFja19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50cywgdm9pZCAqcHRyKQogewpAQCAtNDM3LDcgKzUxMCw3IEBACiAJaWYgKCFpdGVtLT5yZXBvcnQgJiYgIW5mbmV0bGlua19oYXNfbGlzdGVuZXJzKGdyb3VwKSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0Jc2tiID0gYWxsb2Nfc2tiKE5MTVNHX0dPT0RTSVpFLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBjdG5ldGxpbmtfYWxsb2Nfc2tiKHR1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCkBAIC01MTgsNiArNTkxLDcgQEAKIG5sYV9wdXRfZmFpbHVyZToKIAlyY3VfcmVhZF91bmxvY2soKTsKIG5sbXNnX2ZhaWx1cmU6CisJbmZuZXRsaW5rX3NldF9lcnIoMCwgZ3JvdXAsIC1FTk9CVUZTKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CkBAIC01MzUsNyArNjA5LDcgQEAKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QsICpsYXN0OwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gTkxNU0dfREFUQShjYi0+bmxoKTsKIAl1X2ludDhfdCBsM3Byb3RvID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKIApAQCAtNTQzLDI3ICs2MTcsMjcgQEAKIAlsYXN0ID0gKHN0cnVjdCBuZl9jb25uICopY2ItPmFyZ3NbMV07CiAJZm9yICg7IGNiLT5hcmdzWzBdIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBjYi0+YXJnc1swXSsrKSB7CiByZXN0YXJ0OgotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJmluaXRfbmV0LmN0Lmhhc2hbY2ItPmFyZ3NbMF1dLAotCQkJCQkgaG5vZGUpIHsKKwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZpbml0X25ldC5jdC5oYXNoW2NiLT5hcmdzWzBdXSwKKwkJCQkJIGhubm9kZSkgewogCQkJaWYgKE5GX0NUX0RJUkVDVElPTihoKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCQkJY29udGludWU7CiAJCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CisJCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmN0LT5jdF9nZW5lcmFsLnVzZSkpCisJCQkJY29udGludWU7CiAJCQkvKiBEdW1wIGVudHJpZXMgb2YgYSBnaXZlbiBMMyBwcm90b2NvbCBudW1iZXIuCiAJCQkgKiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCBpZS4gbDNwcm90byA9PSAwLAogCQkJICogdGhlbiBkdW1wIGV2ZXJ5dGhpbmcuICovCiAJCQlpZiAobDNwcm90byAmJiBuZl9jdF9sM251bShjdCkgIT0gbDNwcm90bykKLQkJCQljb250aW51ZTsKKwkJCQlnb3RvIHJlbGVhc2VjdDsKIAkJCWlmIChjYi0+YXJnc1sxXSkgewogCQkJCWlmIChjdCAhPSBsYXN0KQotCQkJCQljb250aW51ZTsKKwkJCQkJZ290byByZWxlYXNlY3Q7CiAJCQkJY2ItPmFyZ3NbMV0gPSAwOwogCQkJfQogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCUlQQ1ROTF9NU0dfQ1RfTkVXLAogCQkJCQkJMSwgY3QpIDwgMCkgewotCQkJCWlmICghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkKLQkJCQkJY29udGludWU7CiAJCQkJY2ItPmFyZ3NbMV0gPSAodW5zaWduZWQgbG9uZyljdDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTU3Niw2ICs2NTAsOCBAQAogCQkJCWlmIChhY2N0KQogCQkJCQltZW1zZXQoYWNjdCwgMCwgc2l6ZW9mKHN0cnVjdCBuZl9jb25uX2NvdW50ZXJbSVBfQ1RfRElSX01BWF0pKTsKIAkJCX0KK3JlbGVhc2VjdDoKKwkJbmZfY3RfcHV0KGN0KTsKIAkJfQogCQlpZiAoY2ItPmFyZ3NbMV0pIHsKIAkJCWNiLT5hcmdzWzFdID0gMDsKQEAgLTU5OSw3ICs2NzUsOCBAQAogCiAJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0lQX01BWCwgYXR0ciwgTlVMTCk7CiAKLQlsM3Byb3RvID0gbmZfY3RfbDNwcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKHR1cGxlLT5zcmMubDNudW0pOwogCiAJaWYgKGxpa2VseShsM3Byb3RvLT5ubGF0dHJfdG9fdHVwbGUpKSB7CiAJCXJldCA9IG5sYV92YWxpZGF0ZV9uZXN0ZWQoYXR0ciwgQ1RBX0lQX01BWCwKQEAgLTYwOCw3ICs2ODUsNyBAQAogCQkJcmV0ID0gbDNwcm90by0+bmxhdHRyX3RvX3R1cGxlKHRiLCB0dXBsZSk7CiAJfQogCi0JbmZfY3RfbDNwcm90b19wdXQobDNwcm90byk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjMzLDcgKzcxMCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXR1cGxlLT5kc3QucHJvdG9udW0gPSBubGFfZ2V0X3U4KHRiW0NUQV9QUk9UT19OVU1dKTsKIAotCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0sIHR1cGxlLT5kc3QucHJvdG9udW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CiAKIAlpZiAobGlrZWx5KGw0cHJvdG8tPm5sYXR0cl90b190dXBsZSkpIHsKIAkJcmV0ID0gbmxhX3ZhbGlkYXRlX25lc3RlZChhdHRyLCBDVEFfUFJPVE9fTUFYLApAQCAtNjQyLDcgKzcyMCw3IEBACiAJCQlyZXQgPSBsNHByb3RvLT5ubGF0dHJfdG9fdHVwbGUodGIsIHR1cGxlKTsKIAl9CiAKLQluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC05ODksMTAgKzEwNjcsMTEgQEAKIAogCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT0lORk9fTUFYLCBhdHRyLCBOVUxMKTsKIAotCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAlpZiAobDRwcm90by0+ZnJvbV9ubGF0dHIpCiAJCWVyciA9IGw0cHJvdG8tPmZyb21fbmxhdHRyKHRiLCBjdCk7Ci0JbmZfY3RfbDRwcm90b19wdXQobDRwcm90byk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTA2Miw2ICsxMTQxLDEwIEBACiB7CiAJaW50IGVycjsKIAorCS8qIG9ubHkgYWxsb3cgTkFUIGNoYW5nZXMgYW5kIG1hc3RlciBhc3NpZ25hdGlvbiBmb3IgbmV3IGNvbm50cmFja3MgKi8KKwlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdIHx8IGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKGNkYVtDVEFfSEVMUF0pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoY3QsIGNkYSk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTEyNCwxMyArMTIwNywxMSBAQAogCQkJCSAgcmVwb3J0KTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIHN0cnVjdCBuZl9jb25uICoKIGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBubGF0dHIgKmNkYVtdLAogCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3R1cGxlLAogCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcnR1cGxlLAotCQkJICAgc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdCwKLQkJCSAgIHUzMiBwaWQsCi0JCQkgICBpbnQgcmVwb3J0KQorCQkJICAgdTggdTMpCiB7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWludCBlcnIgPSAtRUlOVkFMOwpAQCAtMTEzOCwxMCArMTIxOSwxMCBAQAogCiAJY3QgPSBuZl9jb25udHJhY2tfYWxsb2MoJmluaXRfbmV0LCBvdHVwbGUsIHJ0dXBsZSwgR0ZQX0FUT01JQyk7CiAJaWYgKElTX0VSUihjdCkpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWlmICghY2RhW0NUQV9USU1FT1VUXSkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyMTsKIAljdC0+dGltZW91dC5leHBpcmVzID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfVElNRU9VVF0pKTsKIAogCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgY3QtPnRpbWVvdXQuZXhwaXJlcyAqIEhaOwpAQCAtMTE1MiwxMCArMTIzMyw4IEBACiAgCQljaGFyICpoZWxwbmFtZTsKICAKICAJCWVyciA9IGN0bmV0bGlua19wYXJzZV9oZWxwKGNkYVtDVEFfSEVMUF0sICZoZWxwbmFtZSk7Ci0gCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorIAkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAKIAkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKIAkJaWYgKGhlbHBlciA9PSBOVUxMKSB7CkBAIC0xMTYzLDI4ICsxMjQyLDI2IEBACiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCWlmIChyZXF1ZXN0X21vZHVsZSgibmZjdC1oZWxwZXItJXMiLCBoZWxwbmFtZSkgPCAwKSB7CiAJCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnIxOwogCQkJfQogCiAJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOwogCQkJaWYgKGhlbHBlcikgewotCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWVyciA9IC1FQUdBSU47Ci0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnIyOwogCQkJfQogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAjZW5kaWYKIAkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycjE7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOwogCiAJCQloZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwogCQkJaWYgKGhlbHAgPT0gTlVMTCkgewotCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnIyOwogCQkJfQogCiAJCQkvKiBub3QgaW4gaGFzaCB0YWJsZSB5ZXQgc28gbm90IHN0cmljdGx5IG5lY2Vzc2FyeSAqLwpAQCAtMTE5Myw0NCArMTI3MCwzNCBAQAogCX0gZWxzZSB7CiAJCS8qIHRyeSBhbiBpbXBsaWNpdCBoZWxwZXIgYXNzaWduYXRpb24gKi8KIAkJZXJyID0gX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KIAogCWlmIChjZGFbQ1RBX1NUQVRVU10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9zdGF0dXMoY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KIAogCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9uYXQoY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KIAogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiAJaWYgKGNkYVtDVEFfTkFUX1NFUV9BREpfT1JJR10gfHwgY2RhW0NUQV9OQVRfU0VRX0FESl9SRVBMWV0pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9uYXRfc2VxX2FkaihjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogI2VuZGlmCiAKIAlpZiAoY2RhW0NUQV9QUk9UT0lORk9dKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKIAluZl9jdF9hY2N0X2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwpAQCAtMTI0MSwyMyArMTMwOCwzNiBAQAogI2VuZGlmCiAKIAkvKiBzZXR1cCBtYXN0ZXIgY29ubnRyYWNrOiB0aGlzIGlzIGEgY29uZmlybWVkIGV4cGVjdGF0aW9uICovCi0JaWYgKG1hc3Rlcl9jdCkgeworCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBtYXN0ZXI7CisJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqbWFzdGVyX2g7CisJCXN0cnVjdCBuZl9jb25uICptYXN0ZXJfY3Q7CisKKwkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJm1hc3RlciwgQ1RBX1RVUExFX01BU1RFUiwgdTMpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKKworCQltYXN0ZXJfaCA9IG5mX2Nvbm50cmFja19maW5kX2dldCgmaW5pdF9uZXQsICZtYXN0ZXIpOworCQlpZiAobWFzdGVyX2ggPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gZXJyMjsKKwkJfQorCQltYXN0ZXJfY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKG1hc3Rlcl9oKTsKIAkJX19zZXRfYml0KElQU19FWFBFQ1RFRF9CSVQsICZjdC0+c3RhdHVzKTsKIAkJY3QtPm1hc3RlciA9IG1hc3Rlcl9jdDsKIAl9CiAKLQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CiAJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7CiAJbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKLQljdG5ldGxpbmtfZXZlbnRfcmVwb3J0KGN0LCBwaWQsIHJlcG9ydCk7Ci0JbmZfY3RfcHV0KGN0KTsKIAotCXJldHVybiAwOworCXJldHVybiBjdDsKIAotZXJyOgorZXJyMjoKKwlyY3VfcmVhZF91bmxvY2soKTsKK2VycjE6CiAJbmZfY29ubnRyYWNrX2ZyZWUoY3QpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogc3RhdGljIGludApAQCAtMTI4OSwzOCArMTM2OSwyNSBAQAogCQloID0gX19uZl9jb25udHJhY2tfZmluZCgmaW5pdF9uZXQsICZydHVwbGUpOwogCiAJaWYgKGggPT0gTlVMTCkgewotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3RlcjsKLQkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICptYXN0ZXJfaCA9IE5VTEw7Ci0JCXN0cnVjdCBuZl9jb25uICptYXN0ZXJfY3QgPSBOVUxMOworCQllcnIgPSAtRU5PRU5UOworCQlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0NSRUFURSkgeworCQkJc3RydWN0IG5mX2Nvbm4gKmN0OwogCi0JCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKLQkJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsCi0JCQkJCQkgICAgJm1hc3RlciwKLQkJCQkJCSAgICBDVEFfVFVQTEVfTUFTVEVSLAotCQkJCQkJICAgIHUzKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCWdvdG8gb3V0X3VubG9jazsKLQotCQkJbWFzdGVyX2ggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJm1hc3Rlcik7Ci0JCQlpZiAobWFzdGVyX2ggPT0gTlVMTCkgewotCQkJCWVyciA9IC1FTk9FTlQ7CisJCQljdCA9IGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKGNkYSwgJm90dXBsZSwKKwkJCQkJCQkmcnR1cGxlLCB1Myk7CisJCQlpZiAoSVNfRVJSKGN0KSkgeworCQkJCWVyciA9IFBUUl9FUlIoY3QpOwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KLQkJCW1hc3Rlcl9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2sobWFzdGVyX2gpOwotCQkJbmZfY29ubnRyYWNrX2dldCgmbWFzdGVyX2N0LT5jdF9nZW5lcmFsKTsKLQkJfQotCi0JCWVyciA9IC1FTk9FTlQ7Ci0JCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKQotCQkJZXJyID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soY2RhLAotCQkJCQkJCSAmb3R1cGxlLAotCQkJCQkJCSAmcnR1cGxlLAotCQkJCQkJCSBtYXN0ZXJfY3QsCi0JCQkJCQkJIE5FVExJTktfQ0Ioc2tiKS5waWQsCi0JCQkJCQkJIG5sbXNnX3JlcG9ydChubGgpKTsKLQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJaWYgKGVyciA8IDAgJiYgbWFzdGVyX2N0KQotCQkJbmZfY3RfcHV0KG1hc3Rlcl9jdCk7CisJCQllcnIgPSAwOworCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOworCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJCWN0bmV0bGlua19ldmVudF9yZXBvcnQoY3QsCisJCQkJCSAgICAgICBORVRMSU5LX0NCKHNrYikucGlkLAorCQkJCQkgICAgICAgbmxtc2dfcmVwb3J0KG5saCkpOworCQkJbmZfY3RfcHV0KGN0KTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTMzMiwxNyArMTM5OSw2IEBACiAJaWYgKCEobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VYQ0wpKSB7CiAJCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAKLQkJLyogd2Ugb25seSBhbGxvdyBuYXQgY29uZmlnIGZvciBuZXcgY29ubnRyYWNrcyAqLwotCQlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdKSB7Ci0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQkvKiBjYW4ndCBsaW5rIGFuIGV4aXN0aW5nIGNvbm50cmFjayB0byBhIG1hc3RlciAqLwotCQlpZiAoY2RhW0NUQV9UVVBMRV9NQVNURVJdKSB7Ci0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfY29ubnRyYWNrKGN0LCBjZGEpOwogCQlpZiAoZXJyID09IDApIHsKIAkJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKQEAgLTE1MzMsNiArMTU4OSw3IEBACiBubGFfcHV0X2ZhaWx1cmU6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiBubG1zZ19mYWlsdXJlOgorCW5mbmV0bGlua19zZXRfZXJyKDAsIDAsIC1FTk9CVUZTKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggOWUxNjllZi4uMzgwN2FjNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNjYsNyArNjYsNyBAQAogCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CiAKLSNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQogLyogUHB0cENvbnRyb2xNZXNzYWdlVHlwZSBuYW1lcyAqLwogY29uc3QgY2hhciAqY29uc3QgcHB0cF9tc2dfbmFtZVtdID0gewogCSJVTktOT1dOX01FU1NBR0UiLApAQCAtNTkxLDcgKzU5MSw3IEBACiAJLm5hbWUJCQk9ICJwcHRwIiwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUFBUUF9DT05UUk9MX1BPUlQpLAorCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFBQVFBfQ09OVFJPTF9QT1JUKSwKIAkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJLmhlbHAJCQk9IGNvbm50cmFja19wcHRwX2hlbHAsCiAJLmRlc3Ryb3kJCT0gcHB0cF9kZXN0cm95X3NpYmxpbmdzLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKaW5kZXggNTkyZDczMy4uMWE0NTY4YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCkBAIC03NCwyNyArNzQsNiBAQAogCiAvKiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIHJldHVybiBhIHZhbGlkIHByb3RvY29sIGhlbHBlciwgc2luY2UKICAqIGl0IGZhbGxzIGJhY2sgdG8gZ2VuZXJpY19wcm90b2NvbCAqLwotc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoKLW5mX2N0X2w0cHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXAgPSBfX25mX2N0X2w0cHJvdG9fZmluZChsM3Byb3RvLCBsNHByb3RvKTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJcCA9ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KTsKLQotdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApCi17Ci0JbW9kdWxlX3B1dChwLT5tZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX3B1dCk7Ci0KIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqCiBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHVfaW50MTZfdCBsM3Byb3RvKQogewpAQCAtMTg4LDYgKzE2Nyw5IEBACiAJaWYgKHByb3RvLT5sM3Byb3RvID49IEFGX01BWCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChwcm90by0+dHVwbGVfdG9fbmxhdHRyICYmICFwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmbmZfY3RfcHJvdG9fbXV0ZXgpOwogCWlmIChuZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10gIT0gJm5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMpIHsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtMTk4LDYgKzE4MCw5IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCXByb3RvLT5ubGFfc2l6ZSA9IDMgKiBwcm90by0+bmxhdHRyX3R1cGxlX3NpemUoKTsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10sIHByb3RvKTsKIAogb3V0X3VubG9jazoKQEAgLTI4NCw2ICsyNjksMTAgQEAKIAlpZiAobDRwcm90by0+bDNwcm90byA+PSBQRl9NQVgpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAoKGw0cHJvdG8tPnRvX25sYXR0ciAmJiAhbDRwcm90by0+bmxhdHRyX3NpemUpCisJCXx8IChsNHByb3RvLT50dXBsZV90b19ubGF0dHIgJiYgIWw0cHJvdG8tPm5sYXR0cl90dXBsZV9zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZuZl9jdF9wcm90b19tdXRleCk7CiAJaWYgKCFuZl9jdF9wcm90b3NbbDRwcm90by0+bDNwcm90b10pIHsKIAkJLyogbDNwcm90byBtYXkgYmUgbG9hZGVkIGxhdHRlci4gKi8KQEAgLTMxMSw2ICszMDAsMTIgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJbDRwcm90by0+bmxhX3NpemUgPSAwOworCWlmIChsNHByb3RvLT5ubGF0dHJfc2l6ZSkKKwkJbDRwcm90by0+bmxhX3NpemUgKz0gbDRwcm90by0+bmxhdHRyX3NpemUoKTsKKwlpZiAobDRwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCWw0cHJvdG8tPm5sYV9zaXplICs9IDMgKiBsNHByb3RvLT5ubGF0dHJfdHVwbGVfc2l6ZSgpOworCiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2N0X3Byb3Rvc1tsNHByb3RvLT5sM3Byb3RvXVtsNHByb3RvLT5sNHByb3RvXSwKIAkJCSAgIGw0cHJvdG8pOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggOGZjZjE3Ni4uNTBkYWM4ZGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKQEAgLTE2LDYgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAKKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgpAQCAtMjMsOCArMjYsNiBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkY2NwX2xvY2spOwogCi1zdGF0aWMgaW50IG5mX2N0X2RjY3BfbG9vc2UgX19yZWFkX21vc3RseSA9IDE7Ci0KIC8qIFRpbWVvdXRzIGFyZSBiYXNlZCBvbiB2YWx1ZXMgZnJvbSBSRkM0MzQwOgogICoKICAqIC0gUkVRVUVTVDoKQEAgLTcyLDE2ICs3Myw2IEBACiAKICNkZWZpbmUgRENDUF9NU0wgKDIgKiA2MCAqIEhaKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JW0NUX0RDQ1BfUkVRVUVTVF0JPSAyICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUkVTUE9ORF0JPSA0ICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMLAotCVtDVF9EQ0NQX09QRU5dCQk9IDEyICogMzYwMCAqIEhaLAotCVtDVF9EQ0NQX0NMT1NFUkVRXQk9IDY0ICogSFosCi0JW0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaLAotCVtDVF9EQ0NQX1RJTUVXQUlUXQk9IDIgKiBEQ0NQX01TTCwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGNjcF9zdGF0ZV9uYW1lc1tdID0gewogCVtDVF9EQ0NQX05PTkVdCQk9ICJOT05FIiwKIAlbQ1RfRENDUF9SRVFVRVNUXQk9ICJSRVFVRVNUIiwKQEAgLTM5Myw2ICszODQsMjIgQEAKIAl9LAogfTsKIAorLyogdGhpcyBtb2R1bGUgcGVyLW5ldCBzcGVjaWZpY3MgKi8KK3N0YXRpYyBpbnQgZGNjcF9uZXRfaWQ7CitzdHJ1Y3QgZGNjcF9uZXQgeworCWludCBkY2NwX2xvb3NlOworCXVuc2lnbmVkIGludCBkY2NwX3RpbWVvdXRbQ1RfRENDUF9NQVggKyAxXTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7CisJc3RydWN0IGN0bF90YWJsZSAqc3lzY3RsX3RhYmxlOworI2VuZGlmCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX25ldCAqZGNjcF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIGRjY3BfbmV0X2lkKTsKK30KKwogc3RhdGljIGJvb2wgZGNjcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKQEAgLTQxOSw2ICs0MjYsNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJY29uc3QgY2hhciAqbXNnOwogCXVfaW50OF90IHN0YXRlOwpAQCAtNDI5LDcgKzQzNyw4IEBACiAJc3RhdGUgPSBkY2NwX3N0YXRlX3RhYmxlW0NUX0RDQ1BfUk9MRV9DTElFTlRdW2RoLT5kY2NwaF90eXBlXVtDVF9EQ0NQX05PTkVdOwogCXN3aXRjaCAoc3RhdGUpIHsKIAlkZWZhdWx0OgotCQlpZiAobmZfY3RfZGNjcF9sb29zZSA9PSAwKSB7CisJCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwkJaWYgKGRuLT5kY2NwX2xvb3NlID09IDApIHsKIAkJCW1zZyA9ICJuZl9jdF9kY2NwOiBub3QgcGlja2luZyB1cCBleGlzdGluZyBjb25uZWN0aW9uICI7CiAJCQlnb3RvIG91dF9pbnZhbGlkOwogCQl9CkBAIC00NjUsNiArNDc0LDcgQEAKIAkJICAgICAgIHVfaW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCXN0cnVjdCBkY2NwX25ldCAqZG47CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJdV9pbnQ4X3QgdHlwZSwgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CkBAIC01NDIsNyArNTUyLDkgQEAKIAljdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9IHR5cGU7CiAJY3QtPnByb3RvLmRjY3Auc3RhdGUgPSBuZXdfc3RhdGU7CiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwotCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRjY3BfdGltZW91dFtuZXdfc3RhdGVdKTsKKworCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBkbi0+ZGNjcF90aW1lb3V0W25ld19zdGF0ZV0pOwogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KQEAgLTY1NywxNiArNjY5LDIwIEBACiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGRjY3BfbmxhdHRyX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoMCkJLyogQ1RBX1BST1RPSU5GT19EQ0NQICovCisJCSsgbmxhX3BvbGljeV9sZW4oZGNjcF9ubGFfcG9saWN5LCBDVEFfUFJPVE9JTkZPX0RDQ1BfTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF9zeXNjdGxfdGFibGVfdXNlcnM7Ci1zdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmRjY3Bfc3lzY3RsX2hlYWRlcjsKLXN0YXRpYyBjdGxfdGFibGUgZGNjcF9zeXNjdGxfdGFibGVbXSA9IHsKKy8qIHRlbXBsYXRlLCBkYXRhIGFzc2lnbmVkIGxhdGVyICovCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3JlcXVlc3QiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVRVUVTVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02NzQsNyArNjkwLDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9yZXNwb25kIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFU1BPTkRdLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjgyLDcgKzY5Nyw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcGFydG9wZW4iLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjkwLDcgKzcwNCw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfb3BlbiIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTY5OCw3ICs3MTEsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NlcmVxIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcwNiw3ICs3MTgsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NpbmciLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MTQsNyArNzI1LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF90aW1ld2FpdCIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MjIsOCArNzMyLDcgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfbG9vc2UiLAotCQkuZGF0YQkJPSAmbmZfY3RfZGNjcF9sb29zZSwKLQkJLm1heGxlbgkJPSBzaXplb2YobmZfY3RfZGNjcF9sb29zZSksCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCkBAIC03NDYsMTYgKzc1NSwxMyBAQAogCS5wcmludF9jb25udHJhY2sJPSBkY2NwX3ByaW50X2Nvbm50cmFjaywKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmxhdHRyCQk9IGRjY3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSBkY2NwX25sYXR0cl9zaXplLAogCS5mcm9tX25sYXR0cgkJPSBubGF0dHJfdG9fZGNjcCwKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplCT0gbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzYgX19yZWFkX21vc3RseSA9IHsKQEAgLTc3MywzNyArNzc5LDExMSBAQAogCS50b19ubGF0dHIJCT0gZGNjcF90b19ubGF0dHIsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19kY2NwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKK307CisKK3N0YXRpYyBfX25ldF9pbml0IGludCBkY2NwX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOworCWludCBlcnI7CisKKwlkbiA9IGttYWxsb2Moc2l6ZW9mKCpkbiksIEdGUF9LRVJORUwpOworCWlmICghZG4pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwlkbi0+ZGNjcF9sb29zZSA9IDE7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdCT0gMiAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXQkJPSAxMiAqIDM2MDAgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0JPSAyICogRENDUF9NU0w7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgZG4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCisJZXJyID0gLUVOT01FTTsKKwlkbi0+c3lzY3RsX3RhYmxlID0ga21lbWR1cChkY2NwX3N5c2N0bF90YWJsZSwKKwkJCXNpemVvZihkY2NwX3N5c2N0bF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghZG4tPnN5c2N0bF90YWJsZSkKKwkJZ290byBvdXQ7CisKKwlkbi0+c3lzY3RsX3RhYmxlWzBdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdOworCWRuLT5zeXNjdGxfdGFibGVbMV0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF07CisJZG4tPnN5c2N0bF90YWJsZVsyXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl07CisJZG4tPnN5c2N0bF90YWJsZVszXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzRdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzVdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NJTkddOworCWRuLT5zeXNjdGxfdGFibGVbNl0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfVElNRVdBSVRdOworCWRuLT5zeXNjdGxfdGFibGVbN10uZGF0YSA9ICZkbi0+ZGNjcF9sb29zZTsKKworCWRuLT5zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCisJCQluZl9uZXRfbmV0ZmlsdGVyX3N5c2N0bF9wYXRoLCBkbi0+c3lzY3RsX3RhYmxlKTsKKwlpZiAoIWRuLT5zeXNjdGxfaGVhZGVyKSB7CisJCWtmcmVlKGRuLT5zeXNjdGxfdGFibGUpOworCQlnb3RvIG91dDsKKwl9CiAjZW5kaWYKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoZG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgZGNjcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGRjY3BfbmV0ICpkbiA9IGRjY3BfcGVybmV0KG5ldCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShkbi0+c3lzY3RsX2hlYWRlcik7CisJa2ZyZWUoZG4tPnN5c2N0bF90YWJsZSk7CisjZW5kaWYKKwlrZnJlZShkbik7CisKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZGNjcF9uZXRfb3BzID0geworCS5pbml0ID0gZGNjcF9uZXRfaW5pdCwKKwkuZXhpdCA9IGRjY3BfbmV0X2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoJmRjY3BfbmV0X2lkLCAmZGNjcF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIxOwogCi0JZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjI7CisKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjM7CiAJcmV0dXJuIDA7CiAKLWVycjI6CitlcnIzOgogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiBlcnIxOgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiAJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90bzYpOwogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA0YmU4MGQ3Li44MjkzNzRmNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMgX19yZWFkX21vc3RseSA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfVU5TUEVDLAotCS5sNHByb3RvCQk9IDAsCisJLmw0cHJvdG8JCT0gMjU1LAogCS5uYW1lCQkJPSAidW5rbm93biIsCiAJLnBrdF90b190dXBsZQkJPSBnZW5lcmljX3BrdF90b190dXBsZSwKIAkuaW52ZXJ0X3R1cGxlCQk9IGdlbmVyaWNfaW52ZXJ0X3R1cGxlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCAxYjI3OWY5ZC4uMTE3YjgwMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKQEAgLTI5Myw2ICsyOTMsNyBAQAogCS5tZSAJCSA9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIgPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUgPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUgPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkgPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA3NGUwMzc5Li4xMDFiNGFkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC01MzcsNiArNTM3LDEyIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBzY3RwX25sYXR0cl9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDApCS8qIENUQV9QUk9UT0lORk9fU0NUUCAqLworCQkrIG5sYV9wb2xpY3lfbGVuKHNjdHBfbmxhX3BvbGljeSwgQ1RBX1BST1RPSU5GT19TQ1RQX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC02NjgsOCArNjc0LDEwIEBACiAJLm1lIAkJCT0gVEhJU19NT0RVTEUsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSBzY3RwX3RvX25sYXR0ciwKKwkubmxhdHRyX3NpemUJCT0gc2N0cF9ubGF0dHJfc2l6ZSwKIAkuZnJvbV9ubGF0dHIJCT0gbmxhdHRyX3RvX3NjdHAsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgpAQCAtNjk2LDggKzcwNCwxMCBAQAogCS5tZSAJCQk9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50b19ubGF0dHIJCT0gc2N0cF90b19ubGF0dHIsCisJLm5sYXR0cl9zaXplCQk9IHNjdHBfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19zY3RwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZjNmZDE1NC4uYjVjY2YyYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIApAQCAtMjUsNiArMjYsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiAvKiBQcm90ZWN0cyBjdC0+cHJvdG8udGNwICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyh0Y3BfbG9jayk7CkBAIC00NjYsNyArNDY5LDcgQEAKIAkJCQlmb3IgKGkgPSAwOwogCQkJCSAgICAgaSA8IChvcHNpemUgLSBUQ1BPTEVOX1NBQ0tfQkFTRSk7CiAJCQkJICAgICBpICs9IFRDUE9MRU5fU0FDS19QRVJCTE9DSykgewotCQkJCQl0bXAgPSBudG9obCgqKChfX2JlMzIgKikocHRyK2kpKzEpKTsKKwkJCQkJdG1wID0gZ2V0X3VuYWxpZ25lZF9iZTMyKChfX2JlMzIgKikocHRyK2kpKzEpOwogCiAJCQkJCWlmIChhZnRlcih0bXAsICpzYWNrKSkKIAkJCQkJCSpzYWNrID0gdG1wOwpAQCAtMTE4MSw2ICsxMTg0LDE3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCB0Y3BfbmxhdHRyX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoMCkJICAgLyogQ1RBX1BST1RPSU5GT19UQ1AgKi8KKwkJKyBubGFfcG9saWN5X2xlbih0Y3BfbmxhX3BvbGljeSwgQ1RBX1BST1RPSU5GT19UQ1BfTUFYICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgdGNwX25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKG5mX2N0X3BvcnRfbmxhX3BvbGljeSwgQ1RBX1BST1RPX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0xMzk2LDkgKzE0MTAsMTEgQEAKIAkuZXJyb3IJCQk9IHRjcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmxhdHRyCQk9IHRjcF90b19ubGF0dHIsCisJLm5sYXR0cl9zaXplCQk9IHRjcF9ubGF0dHJfc2l6ZSwKIAkuZnJvbV9ubGF0dHIJCT0gbmxhdHRyX3RvX3RjcCwKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IHRjcF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0xNDI2LDkgKzE0NDIsMTEgQEAKIAkuZXJyb3IJCQk9IHRjcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmxhdHRyCQk9IHRjcF90b19ubGF0dHIsCisJLm5sYXR0cl9zaXplCQk9IHRjcF9ubGF0dHJfc2l6ZSwKIAkuZnJvbV9ubGF0dHIJCT0gbmxhdHRyX3RvX3RjcCwKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IHRjcF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU1lTQ1RMCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDJiOGIxZjUuLjcwODA5ZDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDMwKkhaOwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0gX19yZWFkX21vc3RseSA9IDE4MCpIWjsKQEAgLTE5Myw2ICsxOTUsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCisJLm5sYXR0cl90dXBsZV9zaXplCT0gbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0yMjAsNiArMjIzLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCmluZGV4IDQ1NzlkOGQuLjQ2MTQ2OTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKQEAgLTE4MCw2ICsxODAsNyBAQAogCS5lcnJvcgkJCT0gdWRwbGl0ZV9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplCT0gbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggNGRhNTRiMC4uMTkzNTE1MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNDQsNDAgKzQ0LDQyIEBACiAJdW5zaWduZWQgaW50IGJ1Y2tldDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqY3RfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQorc3RhdGljIHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpjdF9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCiAJZm9yIChzdC0+YnVja2V0ID0gMDsKIAkgICAgIHN0LT5idWNrZXQgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CiAJICAgICBzdC0+YnVja2V0KyspIHsKIAkJbiA9IHJjdV9kZXJlZmVyZW5jZShuZXQtPmN0Lmhhc2hbc3QtPmJ1Y2tldF0uZmlyc3QpOwotCQlpZiAobikKKwkJaWYgKCFpc19hX251bGxzKG4pKQogCQkJcmV0dXJuIG47CiAJfQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IGhsaXN0X25vZGUgKmN0X2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAotCQkJCSAgICAgIHN0cnVjdCBobGlzdF9ub2RlICpoZWFkKQorc3RhdGljIHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpjdF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQkgICAgICBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqaGVhZCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAlzdHJ1Y3QgY3RfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CiAKIAloZWFkID0gcmN1X2RlcmVmZXJlbmNlKGhlYWQtPm5leHQpOwotCXdoaWxlIChoZWFkID09IE5VTEwpIHsKLQkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpCi0JCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoaXNfYV9udWxscyhoZWFkKSkgeworCQlpZiAobGlrZWx5KGdldF9udWxsc192YWx1ZShoZWFkKSA9PSBzdC0+YnVja2V0KSkgeworCQkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KIAkJaGVhZCA9IHJjdV9kZXJlZmVyZW5jZShuZXQtPmN0Lmhhc2hbc3QtPmJ1Y2tldF0uZmlyc3QpOwogCX0KIAlyZXR1cm4gaGVhZDsKIH0KIAotc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpjdF9nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQorc3RhdGljIHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpjdF9nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQogewotCXN0cnVjdCBobGlzdF9ub2RlICpoZWFkID0gY3RfZ2V0X2ZpcnN0KHNlcSk7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmhlYWQgPSBjdF9nZXRfZmlyc3Qoc2VxKTsKIAogCWlmIChoZWFkKQogCQl3aGlsZSAocG9zICYmIChoZWFkID0gY3RfZ2V0X25leHQoc2VxLCBoZWFkKSkpCkBAIC0xMDcsNjcgKzEwOSw3NCBAQAogLyogcmV0dXJuIDAgb24gc3VjY2VzcywgMSBpbiBjYXNlIG9mIGVycm9yICovCiBzdGF0aWMgaW50IGN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmhhc2ggPSB2OwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaGFzaCk7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOwogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CisJaW50IHJldCA9IDA7CiAKIAlORl9DVF9BU1NFUlQoY3QpOworCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkpCisJCXJldHVybiAwOwogCiAJLyogd2Ugb25seSB3YW50IHRvIHByaW50IERJUl9PUklHSU5BTCAqLwogCWlmIChORl9DVF9ESVJFQ1RJT04oaGFzaCkpCi0JCXJldHVybiAwOworCQlnb3RvIHJlbGVhc2U7CiAKIAlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpKTsKIAlORl9DVF9BU1NFUlQobDNwcm90byk7CiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAlORl9DVF9BU1NFUlQobDRwcm90byk7CiAKKwlyZXQgPSAtRU5PU1BDOwogCWlmIChzZXFfcHJpbnRmKHMsICIlLThzICV1ICUtOHMgJXUgJWxkICIsCiAJCSAgICAgICBsM3Byb3RvLT5uYW1lLCBuZl9jdF9sM251bShjdCksCiAJCSAgICAgICBsNHByb3RvLT5uYW1lLCBuZl9jdF9wcm90b251bShjdCksCiAJCSAgICAgICB0aW1lcl9wZW5kaW5nKCZjdC0+dGltZW91dCkKIAkJICAgICAgID8gKGxvbmcpKGN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApICE9IDApCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAobDRwcm90by0+cHJpbnRfY29ubnRyYWNrICYmIGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayhzLCBjdCkpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAocHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKCEodGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY3QtPnN0YXR1cykpKQogCQlpZiAoc2VxX3ByaW50ZihzLCAiW1VOUkVQTElFRF0gIikpCi0JCQlyZXR1cm4gLUVOT1NQQzsKKwkJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAogCQkJbDNwcm90bywgbDRwcm90bykpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAoc2VxX3ByaW50X2FjY3QocywgY3QsIElQX0NUX0RJUl9SRVBMWSkpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cykpCiAJCWlmIChzZXFfcHJpbnRmKHMsICJbQVNTVVJFRF0gIikpCi0JCQlyZXR1cm4gLUVOT1NQQzsKKwkJCWdvdG8gcmVsZWFzZTsKIAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChzZXFfcHJpbnRmKHMsICJtYXJrPSV1ICIsIGN0LT5tYXJrKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCiAJaWYgKHNlcV9wcmludGYocywgInNlY21hcms9JXUgIiwgY3QtPnNlY21hcmspKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogI2VuZGlmCiAKIAlpZiAoc2VxX3ByaW50ZihzLCAidXNlPSV1XG4iLCBhdG9taWNfcmVhZCgmY3QtPmN0X2dlbmVyYWwudXNlKSkpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKKwlyZXQgPSAwOworcmVsZWFzZToKKwluZl9jdF9wdXQoY3QpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBmYThhZTVkLi44YmI5OThmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTE0LDU4ICsxNCw2MyBAQAogICAgTE9HIHRhcmdldCBtb2R1bGVzICovCiAKICNkZWZpbmUgTkZfTE9HX1BSRUZJWExFTgkJMTI4CisjZGVmaW5lIE5GTE9HR0VSX05BTUVfTEVOCQk2NAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbmZfbG9nZ2Vyc1tORlBST1RPX05VTVBST1RPXSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbmZfbG9nZ2Vyc19sW05GUFJPVE9fTlVNUFJPVE9dIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgREVGSU5FX01VVEVYKG5mX2xvZ19tdXRleCk7CiAKLS8qIHJldHVybiBFQlVTWSBpZiBzb21lYm9keSBlbHNlIGlzIHJlZ2lzdGVyZWQsIEVFWElTVCBpZiB0aGUgc2FtZSBsb2dnZXIKLSAqIGlzIHJlZ2lzdHJlZCwgMCBvbiBzdWNjZXNzLiAqLwotaW50IG5mX2xvZ19yZWdpc3Rlcih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQorc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgKl9fZmluZF9sb2dnZXIoaW50IHBmLCBjb25zdCBjaGFyICpzdHJfbG9nZ2VyKQogewotCWludCByZXQ7CisJc3RydWN0IG5mX2xvZ2dlciAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm5mX2xvZ2dlcnNfbFtwZl0sIGxpc3RbcGZdKSB7CisJCWlmICghc3RybmljbXAoc3RyX2xvZ2dlciwgdC0+bmFtZSwgc3RybGVuKHQtPm5hbWUpKSkKKwkJCXJldHVybiB0OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiByZXR1cm4gRUVYSVNUIGlmIHRoZSBzYW1lIGxvZ2dlciBpcyByZWdpc3RyZWQsIDAgb24gc3VjY2Vzcy4gKi8KK2ludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3sKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsbG9nOwogCiAJaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogQW55IHNldHVwIG9mIGxvZ2dpbmcgbWVtYmVycyBtdXN0IGJlIGRvbmUgYmVmb3JlCi0JICogc3Vic3RpdHV0aW5nIHBvaW50ZXIuICovCi0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZuZl9sb2dfbXV0ZXgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAKLQlpZiAoIW5mX2xvZ2dlcnNbcGZdKQotCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7Ci0JZWxzZSBpZiAobmZfbG9nZ2Vyc1twZl0gPT0gbG9nZ2VyKQotCQlyZXQgPSAtRUVYSVNUOwotCWVsc2UKLQkJcmV0ID0gLUVCVVNZOworCWlmIChwZiA9PSBORlBST1RPX1VOU1BFQykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gTkZQUk9UT19VTlNQRUM7IGkgPCBORlBST1RPX05VTVBST1RPOyBpKyspCisJCQlsaXN0X2FkZF90YWlsKCYobG9nZ2VyLT5saXN0W2ldKSwgJihuZl9sb2dnZXJzX2xbaV0pKTsKKwl9IGVsc2UgeworCQkvKiByZWdpc3RlciBhdCBlbmQgb2YgbGlzdCB0byBob25vciBmaXJzdCByZWdpc3RlciB3aW4gKi8KKwkJbGlzdF9hZGRfdGFpbCgmbG9nZ2VyLT5saXN0W3BmXSwgJm5mX2xvZ2dlcnNfbFtwZl0pOworCQlsbG9nID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbcGZdKTsKKwkJaWYgKGxsb2cgPT0gTlVMTCkKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgbG9nZ2VyKTsKKwl9CiAKIAltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChuZl9sb2dfcmVnaXN0ZXIpOwogCi12b2lkIG5mX2xvZ191bnJlZ2lzdGVyX3BmKHVfaW50OF90IHBmKQordm9pZCBuZl9sb2dfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCiB7Ci0JaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCi0JCXJldHVybjsKLQltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgTlVMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCi0JLyogR2l2ZSB0aW1lIHRvIGNvbmN1cnJlbnQgcmVhZGVycy4gKi8KLQlzeW5jaHJvbml6ZV9yY3UoKTsKLX0KLUVYUE9SVF9TWU1CT0wobmZfbG9nX3VucmVnaXN0ZXJfcGYpOwotCi12b2lkIG5mX2xvZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKLXsKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpjX2xvZ2dlcjsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmZfbG9nZ2Vycyk7IGkrKykgewotCQlpZiAobmZfbG9nZ2Vyc1tpXSA9PSBsb2dnZXIpCisJCWNfbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbaV0pOworCQlpZiAoY19sb2dnZXIgPT0gbG9nZ2VyKQogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbaV0sIE5VTEwpOworCQlsaXN0X2RlbCgmbG9nZ2VyLT5saXN0W2ldKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCkBAIC03Myw2ICs3OCwyNyBAQAogfQogRVhQT1JUX1NZTUJPTChuZl9sb2dfdW5yZWdpc3Rlcik7CiAKK2ludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQoreworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJaWYgKF9fZmluZF9sb2dnZXIocGYsIGxvZ2dlci0+bmFtZSkgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7CisJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChuZl9sb2dfYmluZF9wZik7CisKK3ZvaWQgbmZfbG9nX3VuYmluZF9wZih1X2ludDhfdCBwZikKK3sKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChuZl9sb2dfdW5iaW5kX3BmKTsKKwogdm9pZCBuZl9sb2dfcGFja2V0KHVfaW50OF90IHBmLAogCQkgICB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyOSwxMyArMTU1LDM3IEBACiB7CiAJbG9mZl90ICpwb3MgPSB2OwogCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcjsKKwlzdHJ1Y3QgbmZfbG9nZ2VyICp0OworCWludCByZXQ7CiAKIAlsb2dnZXIgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1sqcG9zXSk7CiAKIAlpZiAoIWxvZ2dlcikKLQkJcmV0dXJuIHNlcV9wcmludGYocywgIiUybGxkIE5PTkVcbiIsICpwb3MpOworCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FICgiLCAqcG9zKTsKKwllbHNlCisJCXJldCA9IHNlcV9wcmludGYocywgIiUybGxkICVzICgiLCAqcG9zLCBsb2dnZXItPm5hbWUpOwogCi0JcmV0dXJuIHNlcV9wcmludGYocywgIiUybGxkICVzXG4iLCAqcG9zLCBsb2dnZXItPm5hbWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbKnBvc10sIGxpc3RbKnBvc10pIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJXMiLCB0LT5uYW1lKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKCZ0LT5saXN0Wypwb3NdICE9IG5mX2xvZ2dlcnNfbFsqcG9zXS5wcmV2KSB7CisJCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIsIik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKworCXJldHVybiBzZXFfcHJpbnRmKHMsICIpXG4iKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZmxvZ19zZXFfb3BzID0gewpAQCAtMTU4LDE1ICsyMDgsMTAyIEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiAKKwogI2VuZGlmIC8qIFBST0NfRlMgKi8KIAorI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0cnVjdCBjdGxfcGF0aCBuZl9sb2dfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gIm5ldGZpbHRlciIsIC5jdGxfbmFtZSA9IE5FVF9ORVRGSUxURVIsIH0sCisJeyAucHJvY25hbWUgPSAibmZfbG9nIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCitzdGF0aWMgY2hhciBuZl9sb2dfc3lzY3RsX2ZuYW1lc1tORlBST1RPX05VTVBST1RPLU5GUFJPVE9fVU5TUEVDXVszXTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2xvZ19zeXNjdGxfdGFibGVbTkZQUk9UT19OVU1QUk9UTysxXTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfbG9nX2Rpcl9oZWFkZXI7CisKK3N0YXRpYyBpbnQgbmZfbG9nX3Byb2NfZG9zdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcjsKKwlpbnQgciA9IDA7CisJaW50IHRpbmRleCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5leHRyYTE7CisKKwlpZiAod3JpdGUpIHsKKwkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiTk9ORSIpKSB7CisJCQluZl9sb2dfdW5iaW5kX3BmKHRpbmRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQlsb2dnZXIgPSBfX2ZpbmRfbG9nZ2VyKHRpbmRleCwgYnVmZmVyKTsKKwkJaWYgKGxvZ2dlciA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1t0aW5kZXhdLCBsb2dnZXIpOworCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJfSBlbHNlIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsb2dnZXIgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1t0aW5kZXhdKTsKKwkJaWYgKCFsb2dnZXIpCisJCQl0YWJsZS0+ZGF0YSA9ICJOT05FIjsKKwkJZWxzZQorCQkJdGFibGUtPmRhdGEgPSBsb2dnZXItPm5hbWU7CisJCXIgPSBwcm9jX2Rvc3RyaW5nKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IG5ldGZpbHRlcl9sb2dfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKSB7CisJCXNucHJpbnRmKG5mX2xvZ19zeXNjdGxfZm5hbWVzW2ktTkZQUk9UT19VTlNQRUNdLCAzLCAiJWQiLCBpKTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVEOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLnByb2NuYW1lCT0KKwkJCW5mX2xvZ19zeXNjdGxfZm5hbWVzW2ktTkZQUk9UT19VTlNQRUNdOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLmRhdGEgPSBOVUxMOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLm1heGxlbiA9CisJCQlORkxPR0dFUl9OQU1FX0xFTiAqIHNpemVvZihjaGFyKTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tb2RlID0gMDY0NDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5wcm9jX2hhbmRsZXIgPSBuZl9sb2dfcHJvY19kb3N0cmluZzsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5leHRyYTEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBpOworCX0KKworCW5mX2xvZ19kaXJfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5mX2xvZ19zeXNjdGxfcGF0aCwKKwkJCQkgICAgICAgbmZfbG9nX3N5c2N0bF90YWJsZSk7CisJaWYgKCFuZl9sb2dfZGlyX2hlYWRlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgX19pbml0IGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCiBpbnQgX19pbml0IG5ldGZpbHRlcl9sb2dfaW5pdCh2b2lkKQogeworCWludCBpLCByOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKCFwcm9jX2NyZWF0ZSgibmZfbG9nIiwgU19JUlVHTywKIAkJCSBwcm9jX25ldF9uZXRmaWx0ZXIsICZuZmxvZ19maWxlX29wcykpCiAJCXJldHVybiAtMTsKICNlbmRpZgorCisJLyogRXJyb3JzIHdpbGwgdHJpZ2dlciBwYW5pYywgdW5yb2xsIG9uIGVycm9yIGlzIHVubmVjZXNzYXJ5LiAqLworCXIgPSBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmKG5mX2xvZ2dlcnNfbFtpXSkpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKaW5kZXggY2RjOTdmMy4uNTQ5MGZjMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYwpAQCAtNzEsNiArNzEsNyBAQAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoaW5ldF9zayhzayktPnRyYW5zcGFyZW50KSB7CisJCXNrYl9vcnBoYW4oc2tiKTsKIAkJc2tiLT5zayA9IHNrOwogCQlza2ItPmRlc3RydWN0b3IgPSBuZl90cHJveHlfZGVzdHJ1Y3RvcjsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCA5YzBiYTE3Li4yNzg1ZDY2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTExMyw2ICsxMTMsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZW5kKTsKIAordm9pZCBuZm5ldGxpbmtfc2V0X2Vycih1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlcnJvcikKK3sKKwluZXRsaW5rX3NldF9lcnIobmZubCwgcGlkLCBncm91cCwgZXJyb3IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZuZXRsaW5rX3NldF9lcnIpOworCiBpbnQgbmZuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKQogewogCXJldHVybiBuZXRsaW5rX3VuaWNhc3QobmZubCwgc2tiLCBwaWQsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKaW5kZXggYzcxMmU5Zi4uZmQzMjZhYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogCXJldHVybiAtRU5PVFNVUFA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIG5mdWxubF9sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBuZnVsbmxfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJPSAibmZuZXRsaW5rX2xvZyIsCiAJLmxvZ2ZuCT0gJm5mdWxubF9sb2dfcGFja2V0LAogCS5tZQk9IFRISVNfTU9EVUxFLApAQCAtNzI1LDkgKzcyNSw5IEBACiAJCS8qIENvbW1hbmRzIHdpdGhvdXQgcXVldWUgY29udGV4dCAqLwogCQlzd2l0Y2ggKGNtZC0+Y29tbWFuZCkgewogCQljYXNlIE5GVUxOTF9DRkdfQ01EX1BGX0JJTkQ6Ci0JCQlyZXR1cm4gbmZfbG9nX3JlZ2lzdGVyKHBmLCAmbmZ1bG5sX2xvZ2dlcik7CisJCQlyZXR1cm4gbmZfbG9nX2JpbmRfcGYocGYsICZuZnVsbmxfbG9nZ2VyKTsKIAkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9QRl9VTkJJTkQ6Ci0JCQluZl9sb2dfdW5yZWdpc3Rlcl9wZihwZik7CisJCQluZl9sb2dfdW5iaW5kX3BmKHBmKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtOTUyLDE3ICs5NTIsMjUgQEAKIAkJZ290byBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI7CiAJfQogCisJc3RhdHVzID0gbmZfbG9nX3JlZ2lzdGVyKE5GUFJPVE9fVU5TUEVDLCAmbmZ1bG5sX2xvZ2dlcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsb2c6IGZhaWxlZCB0byByZWdpc3RlciBsb2dnZXJcbiIpOworCQlnb3RvIGNsZWFudXBfc3Vic3lzOworCX0KKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKCFwcm9jX2NyZWF0ZSgibmZuZXRsaW5rX2xvZyIsIDA0NDAsCiAJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZ1bF9maWxlX29wcykpCi0JCWdvdG8gY2xlYW51cF9zdWJzeXM7CisJCWdvdG8gY2xlYW51cF9sb2dnZXI7CiAjZW5kaWYKIAlyZXR1cm4gc3RhdHVzOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKK2NsZWFudXBfbG9nZ2VyOgorCW5mX2xvZ191bnJlZ2lzdGVyKCZuZnVsbmxfbG9nZ2VyKTsKKyNlbmRpZgogY2xlYW51cF9zdWJzeXM6CiAJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnVsbmxfc3Vic3lzKTsKLSNlbmRpZgogY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOgogCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZ1bG5sX3J0bmxfbm90aWZpZXIpOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggNWJhY2NmYS4uNTA5YTk1NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtNjI1LDYgKzYyNSwyMCBAQAogfQogRVhQT1JUX1NZTUJPTCh4dF9mcmVlX3RhYmxlX2luZm8pOwogCit2b2lkIHh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvLAorCQkJICAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQl2b2lkICpwID0gb2xkaW5mby0+ZW50cmllc1tjcHVdOworCQlyY3VfYXNzaWduX3BvaW50ZXIob2xkaW5mby0+ZW50cmllc1tjcHVdLCBuZXdpbmZvLT5lbnRyaWVzW2NwdV0pOworCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSBwOworCX0KKworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfdGFibGVfZW50cnlfc3dhcF9yY3UpOworCiAvKiBGaW5kIHRhYmxlIGJ5IG5hbWUsIGdyYWJzIG11dGV4ICYgcmVmLiAgUmV0dXJucyBFUlJfUFRSKCkgb24gZXJyb3IuICovCiBzdHJ1Y3QgeHRfdGFibGUgKnh0X2ZpbmRfdGFibGVfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmLAogCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtNjcxLDIxICs2ODUsMjIgQEAKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbywgKnByaXZhdGU7CiAKIAkvKiBEbyB0aGUgc3Vic3RpdHV0aW9uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CiAJcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCS8qIENoZWNrIGluc2lkZSBsb2NrOiBpcyB0aGUgb2xkIG51bWJlciBjb3JyZWN0PyAqLwogCWlmIChudW1fY291bnRlcnMgIT0gcHJpdmF0ZS0+bnVtYmVyKSB7CiAJCWR1cHJpbnRmKCJudW1fY291bnRlcnMgIT0gdGFibGUtPnByaXZhdGUtPm51bWJlciAoJXUvJXUpXG4iLAogCQkJIG51bV9jb3VudGVycywgcHJpdmF0ZS0+bnVtYmVyKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOwogCQkqZXJyb3IgPSAtRUFHQUlOOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJb2xkaW5mbyA9IHByaXZhdGU7Ci0JdGFibGUtPnByaXZhdGUgPSBuZXdpbmZvOworCXJjdV9hc3NpZ25fcG9pbnRlcih0YWJsZS0+cHJpdmF0ZSwgbmV3aW5mbyk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gb2xkaW5mby0+aW5pdGlhbF9lbnRyaWVzOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOwogCisJc3luY2hyb25pemVfbmV0KCk7CiAJcmV0dXJuIG9sZGluZm87CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9yZXBsYWNlX3RhYmxlKTsKQEAgLTcxOSw3ICs3MzQsOCBAQAogCiAJLyogU2ltcGxpZmllcyByZXBsYWNlX3RhYmxlIGNvZGUuICovCiAJdGFibGUtPnByaXZhdGUgPSBib290c3RyYXA7Ci0Jcndsb2NrX2luaXQoJnRhYmxlLT5sb2NrKTsKKwltdXRleF9pbml0KCZ0YWJsZS0+bG9jayk7CisKIAlpZiAoIXh0X3JlcGxhY2VfdGFibGUodGFibGUsIDAsIG5ld2luZm8sICZyZXQpKQogCQlnb3RvIHVubG9jazsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ITC5jIGIvbmV0L25ldGZpbHRlci94dF9ITC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTc4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0hMLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBUVEwgbW9kaWZpY2F0aW9uIHRhcmdldCBmb3IgSVAgdGFibGVzCisgKiAoQykgMjAwMCwyMDA1IGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIEhvcCBMaW1pdCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBpcDZ0YWJsZXMKKyAqIE1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oPgorCitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IEhvcGxpbWl0L1RUTCBMaW1pdCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3R0bF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJaW50IG5ld190dGw7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWlwaCA9IGlwX2hkcihza2IpOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVBUX1RUTF9TRVQ6CisJCQluZXdfdHRsID0gaW5mby0+dHRsOworCQkJYnJlYWs7CisJCWNhc2UgSVBUX1RUTF9JTkM6CisJCQluZXdfdHRsID0gaXBoLT50dGwgKyBpbmZvLT50dGw7CisJCQlpZiAobmV3X3R0bCA+IDI1NSkKKwkJCQluZXdfdHRsID0gMjU1OworCQkJYnJlYWs7CisJCWNhc2UgSVBUX1RUTF9ERUM6CisJCQluZXdfdHRsID0gaXBoLT50dGwgLSBpbmZvLT50dGw7CisJCQlpZiAobmV3X3R0bCA8IDApCisJCQkJbmV3X3R0bCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5ld190dGwgPSBpcGgtPnR0bDsKKwkJCWJyZWFrOworCX0KKworCWlmIChuZXdfdHRsICE9IGlwaC0+dHRsKSB7CisJCWNzdW1fcmVwbGFjZTIoJmlwaC0+Y2hlY2ssIGh0b25zKGlwaC0+dHRsIDw8IDgpLAorCQkJCQkgICBodG9ucyhuZXdfdHRsIDw8IDgpKTsKKwkJaXBoLT50dGwgPSBuZXdfdHRsOworCX0KKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraGxfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKKwljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKwlpbnQgbmV3X2hsOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQNlRfSExfU0VUOgorCQkJbmV3X2hsID0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9JTkM6CisJCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgKyBpbmZvLT5ob3BfbGltaXQ7CisJCQlpZiAobmV3X2hsID4gMjU1KQorCQkJCW5ld19obCA9IDI1NTsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfREVDOgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0IC0gaW5mby0+aG9wX2xpbWl0OworCQkJaWYgKG5ld19obCA8IDApCisJCQkJbmV3X2hsID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJfQorCisJaXA2aC0+aG9wX2xpbWl0ID0gbmV3X2hsOworCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgYm9vbCB0dGxfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlpZiAoaW5mby0+bW9kZSA+IElQVF9UVExfTUFYTU9ERSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfVFRMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKKwkJCWluZm8tPm1vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChpbmZvLT5tb2RlICE9IElQVF9UVExfU0VUICYmIGluZm8tPnR0bCA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGhsX3RnNl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKworCWlmIChpbmZvLT5tb2RlID4gSVA2VF9ITF9NQVhNT0RFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGludmFsaWQgb3IgdW5rbm93biBNb2RlICV1XG4iLAorCQkJaW5mby0+bW9kZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGluZm8tPm1vZGUgIT0gSVA2VF9ITF9TRVQgJiYgaW5mby0+aG9wX2xpbWl0ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9ITDogaW5jcmVtZW50L2RlY3JlbWVudCBkb2Vzbid0ICIKKwkJCSJtYWtlIHNlbnNlIHdpdGggdmFsdWUgMFxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGhsX3RnX3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CisJeworCQkubmFtZSAgICAgICA9ICJUVEwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAorCQkudGFyZ2V0ICAgICA9IHR0bF90ZywKKwkJLnRhcmdldHNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9UVExfaW5mbyksCisJCS50YWJsZSAgICAgID0gIm1hbmdsZSIsCisJCS5jaGVja2VudHJ5ID0gdHRsX3RnX2NoZWNrLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICJITCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCisJCS50YXJnZXQgICAgID0gaGxfdGc2LAorCQkudGFyZ2V0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9ITF9pbmZvKSwKKwkJLnRhYmxlICAgICAgPSAibWFuZ2xlIiwKKwkJLmNoZWNrZW50cnkgPSBobF90ZzZfY2hlY2ssCisJCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhsX3RnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0cyhobF90Z19yZWcsIEFSUkFZX1NJWkUoaGxfdGdfcmVnKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBobF90Z19leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXRzKGhsX3RnX3JlZywgQVJSQVlfU0laRShobF90Z19yZWcpKTsKK30KKworbW9kdWxlX2luaXQoaGxfdGdfaW5pdCk7Cittb2R1bGVfZXhpdChobF90Z19leGl0KTsKK01PRFVMRV9BTElBUygiaXB0X1RUTCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X0hMIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jIGIvbmV0L25ldGZpbHRlci94dF9MRUQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY3ODQzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9MRUQuYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIHh0X0xFRC5jIC0gbmV0ZmlsdGVyIHRhcmdldCB0byBtYWtlIExFRHMgYmxpbmsgdXBvbiBwYWNrZXQgbWF0Y2hlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBZGFtIE5pZWxzZW4gPGEubmllbHNlbkBzaGlrYWRpLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9MRUQuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWRhbSBOaWVsc2VuIDxhLm5pZWxzZW5Ac2hpa2FkaS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IHRyaWdnZXIgTEVEIGRldmljZXMgb24gcGFja2V0IG1hdGNoIik7CisKKy8qCisgKiBUaGlzIGlzIGRlY2xhcmVkIGluIGhlcmUgKHRoZSBrZXJuZWwgbW9kdWxlKSBvbmx5LCB0byBhdm9pZCBoYXZpbmcgdGhlc2UKKyAqIGRlcGVuZGVuY2llcyBpbiB1c2Vyc3BhY2UgY29kZS4gIFRoaXMgaXMgd2hhdCB4dF9sZWRfaW5mby5pbnRlcm5hbF9kYXRhCisgKiBwb2ludHMgdG8uCisgKi8KK3N0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCB7CisJc3RydWN0IGxlZF90cmlnZ2VyIG5ldGZpbHRlcl9sZWRfdHJpZ2dlcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlZF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsID0gbGVkaW5mby0+aW50ZXJuYWxfZGF0YTsKKworCS8qCisJICogSWYgImFsd2F5cyBibGluayIgaXMgZW5hYmxlZCwgYW5kIHRoZXJlJ3Mgc3RpbGwgc29tZSB0aW1lIHVudGlsIHRoZQorCSAqIExFRCB3aWxsIHN3aXRjaCBvZmYsIGJyaWVmbHkgc3dpdGNoIGl0IG9mZiBub3cuCisJICovCisJaWYgKChsZWRpbmZvLT5kZWxheSA+IDApICYmIGxlZGluZm8tPmFsd2F5c19ibGluayAmJgorCSAgICB0aW1lcl9wZW5kaW5nKCZsZWRpbnRlcm5hbC0+dGltZXIpKQorCQlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcixMRURfT0ZGKTsKKworCWxlZF90cmlnZ2VyX2V2ZW50KCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLCBMRURfRlVMTCk7CisKKwkvKiBJZiB0aGVyZSdzIGEgcG9zaXRpdmUgZGVsYXksIHN0YXJ0L3VwZGF0ZSB0aGUgdGltZXIgKi8KKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKSB7CisJCW1vZF90aW1lcigmbGVkaW50ZXJuYWwtPnRpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhsZWRpbmZvLT5kZWxheSkpOworCisJLyogT3RoZXJ3aXNlIGlmIHRoZXJlIHdhcyBubyBkZWxheSBnaXZlbiwgYmxpbmsgYXMgZmFzdCBhcyBwb3NzaWJsZSAqLworCX0gZWxzZSBpZiAobGVkaW5mby0+ZGVsYXkgPT0gMCkgeworCQlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX09GRik7CisJfQorCisJLyogZWxzZSB0aGUgZGVsYXkgaXMgbmVnYXRpdmUsIHdoaWNoIG1lYW5zIHN3aXRjaCBvbiBhbmQgc3RheSBvbiAqLworCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgdm9pZCBsZWRfdGltZW91dF9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gKHN0cnVjdCB4dF9sZWRfaW5mbyAqKWRhdGE7CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX09GRik7Cit9CisKK3N0YXRpYyBib29sIGxlZF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgeHRfbGVkX2luZm8gKmxlZGluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWw7CisJaW50IGVycjsKKworCWlmIChsZWRpbmZvLT5pZFswXSA9PSAnXDAnKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBObyAnaWQnIHBhcmFtZXRlciBnaXZlbi5cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbGVkaW50ZXJuYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxlZGludGVybmFsKSB7CisJCXByaW50ayhLRVJOX0NSSVQgS0JVSUxEX01PRE5BTUUgIjogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLm5hbWUgPSBsZWRpbmZvLT5pZDsKKworCWVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0NSSVQgS0JVSUxEX01PRE5BTUUKKwkJCSI6IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCkgZmFpbGVkXG4iKTsKKwkJaWYgKGVyciA9PSAtRUVYSVNUKQorCQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCQkJIjogVHJpZ2dlciBuYW1lIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCWdvdG8gZXhpdF9hbGxvYzsKKwl9CisKKwkvKiBTZWUgaWYgd2UgbmVlZCB0byBzZXQgdXAgYSB0aW1lciAqLworCWlmIChsZWRpbmZvLT5kZWxheSA+IDApCisJCXNldHVwX3RpbWVyKCZsZWRpbnRlcm5hbC0+dGltZXIsIGxlZF90aW1lb3V0X2NhbGxiYWNrLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWxlZGluZm8pOworCisJbGVkaW5mby0+aW50ZXJuYWxfZGF0YSA9IGxlZGludGVybmFsOworCisJcmV0dXJuIHRydWU7CisKK2V4aXRfYWxsb2M6CisJa2ZyZWUobGVkaW50ZXJuYWwpOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBsZWRfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsID0gbGVkaW5mby0+aW50ZXJuYWxfZGF0YTsKKworCWlmIChsZWRpbmZvLT5kZWxheSA+IDApCisJCWRlbF90aW1lcl9zeW5jKCZsZWRpbnRlcm5hbC0+dGltZXIpOworCisJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcik7CisJa2ZyZWUobGVkaW50ZXJuYWwpOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBsZWRfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gIkxFRCIsCisJLnJldmlzaW9uCT0gMCwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS50YXJnZXQJCT0gbGVkX3RnLAorCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9sZWRfaW5mbykpLAorCS5jaGVja2VudHJ5CT0gbGVkX3RnX2NoZWNrLAorCS5kZXN0cm95CT0gbGVkX3RnX2Rlc3Ryb3ksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbGVkX3RnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZsZWRfdGdfcmVnKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxlZF90Z19leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmxlZF90Z19yZWcpOworfQorCittb2R1bGVfaW5pdChsZWRfdGdfaW5pdCk7Cittb2R1bGVfZXhpdChsZWRfdGdfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNWJkODkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIChDKSAyMDA4LTIwMDkgUGFibG8gTmVpcmEgQXl1c28gPHBhYmxvQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oPgorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCBuZl9jdF9vcmlnX2lwdjRfc3JjKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpuZl9jdF9vcmlnX2lwdjZfc3JjKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcDY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Cit4dF9jbHVzdGVyX2hhc2hfaXB2NCh1X2ludDMyX3QgaXAsIGNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8pCit7CisJcmV0dXJuIGpoYXNoXzF3b3JkKGlwLCBpbmZvLT5oYXNoX3NlZWQpOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAoreHRfY2x1c3Rlcl9oYXNoX2lwdjYoY29uc3Qgdm9pZCAqaXAsIGNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8pCit7CisJcmV0dXJuIGpoYXNoMihpcCwgTkZfQ1RfVFVQTEVfTDNTSVpFIC8gc2l6ZW9mKF9fdTMyKSwgaW5mby0+aGFzaF9zZWVkKTsKK30KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3h0X2NsdXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCWNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8pCit7CisJdV9pbnQzMl90IGhhc2ggPSAwOworCisJc3dpdGNoKG5mX2N0X2wzbnVtKGN0KSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaF9pcHY0KG5mX2N0X29yaWdfaXB2NF9zcmMoY3QpLCBpbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaF9pcHY2KG5mX2N0X29yaWdfaXB2Nl9zcmMoY3QpLCBpbmZvKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoKCh1NjQpaGFzaCAqIGluZm8tPnRvdGFsX25vZGVzKSA+PiAzMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoreHRfY2x1c3Rlcl9pc19tdWx0aWNhc3RfYWRkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDhfdCBmYW1pbHkpCit7CisJYm9vbCBpc19tdWx0aWNhc3QgPSBmYWxzZTsKKworCXN3aXRjaChmYW1pbHkpIHsKKwljYXNlIE5GUFJPVE9fSVBWNDoKKwkJaXNfbXVsdGljYXN0ID0gaXB2NF9pc19tdWx0aWNhc3QoaXBfaGRyKHNrYiktPmRhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBORlBST1RPX0lQVjY6CisJCWlzX211bHRpY2FzdCA9IGlwdjZfYWRkcl90eXBlKCZpcHY2X2hkcihza2IpLT5kYWRkcikgJgorCQkJCQkJSVBWNl9BRERSX01VTFRJQ0FTVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpc19tdWx0aWNhc3Q7Cit9CisKK3N0YXRpYyBib29sCit4dF9jbHVzdGVyX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQoreworCXN0cnVjdCBza19idWZmICpwc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiOworCWNvbnN0IHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJdW5zaWduZWQgbG9uZyBoYXNoOworCisJLyogVGhpcyBtYXRjaCBhc3N1bWVzIHRoYXQgYWxsIG5vZGVzIHNlZSB0aGUgc2FtZSBwYWNrZXRzLiBUaGlzIGNhbiBiZQorCSAqIGFjaGlldmVkIGlmIHRoZSBzd2l0Y2ggdGhhdCBjb25uZWN0cyB0aGUgY2x1c3RlciBub2RlcyBzdXBwb3J0IHNvbWUKKwkgKiBzb3J0IG9mICdwb3J0IG1pcnJvcmluZycuIEhvd2V2ZXIsIGlmIHlvdXIgc3dpdGNoIGRvZXMgbm90IHN1cHBvcnQKKwkgKiB0aGlzLCB5b3VyIGNsdXN0ZXIgbm9kZXMgY2FuIHJlcGx5IEFSUCByZXF1ZXN0IHVzaW5nIGEgbXVsdGljYXN0IE1BQworCSAqIGFkZHJlc3MuIFRodXMsIHlvdXIgc3dpdGNoIHdpbGwgZmxvb2QgdGhlIHNhbWUgcGFja2V0cyB0byB0aGUKKwkgKiBjbHVzdGVyIG5vZGVzIHdpdGggdGhlIHNhbWUgbXVsdGljYXN0IE1BQyBhZGRyZXNzLiBVc2luZyBhIG11bHRpY2FzdAorCSAqIGxpbmsgYWRkcmVzcyBpcyBhIFJGQyAxODEyIChzZWN0aW9uIDMuMy4yKSB2aW9sYXRpb24sIGJ1dCB0aGlzIHdvcmtzCisJICogZmluZSBpbiBwcmFjdGlzZS4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHksIGlmIHlvdSB1c2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcywgdGhlIGxpbmsgbGF5ZXIKKwkgKiBzZXRzIHNrYnVmZidzIHBrdF90eXBlIHRvIFBBQ0tFVF9NVUxUSUNBU1QsIHdoaWNoIGlzIG5vdCBhY2NlcHRlZAorCSAqIGJ5IFRDUCBhbmQgb3RoZXJzIGZvciBwYWNrZXRzIGNvbWluZyB0byB0aGlzIG5vZGUuIEZvciB0aGF0IHJlYXNvbiwKKwkgKiB0aGlzIG1hdGNoIG1hbmdsZXMgc2tidWZmJ3MgcGt0X3R5cGUgaWYgaXQgZGV0ZWN0cyBhIHBhY2tldAorCSAqIGFkZHJlc3NlZCB0byBhIHVuaWNhc3QgYWRkcmVzcyBidXQgdXNpbmcgUEFDS0VUX01VTFRJQ0FTVC4gWWVzLCBJCisJICoga25vdywgbWF0Y2hlcyBzaG91bGQgbm90IGFsdGVyIHBhY2tldHMsIGJ1dCB3ZSBhcmUgZG9pbmcgdGhpcyBoZXJlCisJICogYmVjYXVzZSB3ZSB3b3VsZCBuZWVkIHRvIGFkZCBhIFBLVFRZUEUgdGFyZ2V0IGZvciB0aGlzIHNvbGUgcHVycG9zZS4KKwkgKi8KKwlpZiAoIXh0X2NsdXN0ZXJfaXNfbXVsdGljYXN0X2FkZHIoc2tiLCBwYXItPmZhbWlseSkgJiYKKwkgICAgc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7CisJICAgIAlwc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCX0KKworCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJaWYgKGN0ID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGN0LT5tYXN0ZXIpCisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2goY3QtPm1hc3RlciwgaW5mbyk7CisJZWxzZQorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoKGN0LCBpbmZvKTsKKworCXJldHVybiAhISgoMSA8PCBoYXNoKSAmIGluZm8tPm5vZGVfbWFzaykgXgorCSAgICAgICAhIShpbmZvLT5mbGFncyAmIFhUX0NMVVNURVJfRl9JTlYpOworfQorCitzdGF0aWMgYm9vbCB4dF9jbHVzdGVyX210X2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCit7CisJc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJaWYgKGluZm8tPm5vZGVfbWFzayA+PSAoMSA8PCBpbmZvLT50b3RhbF9ub2RlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9jbHVzdGVyOiB0aGlzIG5vZGUgbWFzayBjYW5ub3QgYmUgIgorCQkJCSJoaWdoZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIG5vZGVzXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB4dF9jbHVzdGVyX21hdGNoIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImNsdXN0ZXIiLAorCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCisJLm1hdGNoCQk9IHh0X2NsdXN0ZXJfbXQsCisJLmNoZWNrZW50cnkJPSB4dF9jbHVzdGVyX210X2NoZWNrZW50cnksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvKSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9jbHVzdGVyX210X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJnh0X2NsdXN0ZXJfbWF0Y2gpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfY2x1c3Rlcl9tdF9maW5pKHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmeHRfY2x1c3Rlcl9tYXRjaCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIlBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBoYXNoLWJhc2VkIGNsdXN0ZXIgbWF0Y2giKTsKK01PRFVMRV9BTElBUygiaXB0X2NsdXN0ZXIiKTsKK01PRFVMRV9BTElBUygiaXA2dF9jbHVzdGVyIik7Cittb2R1bGVfaW5pdCh4dF9jbHVzdGVyX210X2luaXQpOworbW9kdWxlX2V4aXQoeHRfY2x1c3Rlcl9tdF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCmluZGV4IDdmNDA0Y2MuLjY4MDk4MDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpmb3VuZDsKIAlzdHJ1Y3QgeHRfY29ubmxpbWl0X2Nvbm4gKmNvbm47CiAJc3RydWN0IHh0X2Nvbm5saW1pdF9jb25uICp0bXA7Ci0JY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmZvdW5kX2N0OworCXN0cnVjdCBuZl9jb25uICpmb3VuZF9jdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoOwogCWJvb2wgYWRkaXQgPSB0cnVlOwogCWludCBtYXRjaGVzID0gMDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAJLyogY2hlY2sgdGhlIHNhdmVkIGNvbm5lY3Rpb25zICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHRtcCwgaGFzaCwgbGlzdCkgewotCQlmb3VuZCAgICA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmY29ubi0+dHVwbGUpOworCQlmb3VuZCAgICA9IG5mX2Nvbm50cmFja19maW5kX2dldCgmaW5pdF9uZXQsICZjb25uLT50dXBsZSk7CiAJCWZvdW5kX2N0ID0gTlVMTDsKIAogCQlpZiAoZm91bmQgIT0gTlVMTCkKQEAgLTE1MSw2ICsxNTEsNyBAQAogCQkJICogd2UgZG8gbm90IGNhcmUgYWJvdXQgY29ubmVjdGlvbnMgd2hpY2ggYXJlCiAJCQkgKiBjbG9zZWQgYWxyZWFkeSAtPiBkaXRjaCBpdAogCQkJICovCisJCQluZl9jdF9wdXQoZm91bmRfY3QpOwogCQkJbGlzdF9kZWwoJmNvbm4tPmxpc3QpOwogCQkJa2ZyZWUoY29ubik7CiAJCQljb250aW51ZTsKQEAgLTE2MCw2ICsxNjEsNyBAQAogCQkgICAgbWF0Y2gtPmZhbWlseSkpCiAJCQkvKiBzYW1lIHNvdXJjZSBuZXR3b3JrIC0+IGJlIGNvdW50ZWQhICovCiAJCQkrK21hdGNoZXM7CisJCW5mX2N0X3B1dChmb3VuZF9jdCk7CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCBmOTdmZGVkLi5hNWI1MzY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCS8qIGluaXRpYWxpemUgaGFzaCB3aXRoIHJhbmRvbSB2YWwgYXQgdGhlIHRpbWUgd2UgYWxsb2NhdGUKIAkgKiB0aGUgZmlyc3QgaGFzaHRhYmxlIGVudHJ5ICovCiAJaWYgKCFodC0+cm5kX2luaXRpYWxpemVkKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJmh0LT5ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cm5kLCBzaXplb2YoaHQtPnJuZCkpOwogCQlodC0+cm5kX2luaXRpYWxpemVkID0gMTsKIAl9CiAKQEAgLTU2NSw4ICs1NjUsNyBAQAogc3RhdGljIGJvb2wKIGhhc2hsaW1pdF9tdF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQljb25zdCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKnIgPQotCQkoKGNvbnN0IHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqKXBhci0+bWF0Y2hpbmZvKS0+dS5tYXN0ZXI7CisJY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICpyID0gcGFyLT5tYXRjaGluZm87CiAJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvID0gci0+aGluZm87CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXN0cnVjdCBkc3RoYXNoX2VudCAqZGg7CkBAIC03MDIsOCArNzAxLDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZobGltaXRfbXV0ZXgpOwogCi0JLyogVWdseSBoYWNrOiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgKi8KLQlyLT51Lm1hc3RlciA9IHI7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGwuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI2MTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9obC5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogSVAgdGFibGVzIG1vZHVsZSBmb3IgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIHRoZSBUVEwKKyAqIChDKSAyMDAwLDIwMDEgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisgKgorICogSG9wIExpbWl0IG1hdGNoaW5nIG1vZHVsZQorICogKEMpIDIwMDEtMjAwMiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3R0bC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaD4KKworTU9EVUxFX0FVVEhPUigiTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSG9wbGltaXQvVFRMIGZpZWxkIG1hdGNoIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwdF90dGwiKTsKK01PRFVMRV9BTElBUygiaXA2dF9obCIpOworCitzdGF0aWMgYm9vbCB0dGxfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwdF90dGxfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCWNvbnN0IHU4IHR0bCA9IGlwX2hkcihza2IpLT50dGw7CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwkJY2FzZSBJUFRfVFRMX0VROgorCQkJcmV0dXJuIHR0bCA9PSBpbmZvLT50dGw7CisJCWNhc2UgSVBUX1RUTF9ORToKKwkJCXJldHVybiB0dGwgIT0gaW5mby0+dHRsOworCQljYXNlIElQVF9UVExfTFQ6CisJCQlyZXR1cm4gdHRsIDwgaW5mby0+dHRsOworCQljYXNlIElQVF9UVExfR1Q6CisJCQlyZXR1cm4gdHRsID4gaW5mby0+dHRsOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X3R0bDogdW5rbm93biBtb2RlICVkXG4iLAorCQkJCWluZm8tPm1vZGUpOworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaGxfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcDZ0X2hsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwkJY2FzZSBJUDZUX0hMX0VROgorCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA9PSBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX05FOgorCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCAhPSBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0xUOgorCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA8IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfR1Q6CisJCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID4gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X2hsOiB1bmtub3duIG1vZGUgJWRcbiIsCisJCQkJaW5mby0+bW9kZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhsX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CisJeworCQkubmFtZSAgICAgICA9ICJ0dGwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAorCQkubWF0Y2ggICAgICA9IHR0bF9tdCwKKwkJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IGlwdF90dGxfaW5mbyksCisJCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgID0gImhsIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNiwKKwkJLm1hdGNoICAgICAgPSBobF9tdDYsCisJCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2hsX2luZm8pLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBobF9tdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoaGxfbXRfcmVnLCBBUlJBWV9TSVpFKGhsX210X3JlZykpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGxfbXRfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhobF9tdF9yZWcsIEFSUkFZX1NJWkUoaGxfbXRfcmVnKSk7Cit9CisKK21vZHVsZV9pbml0KGhsX210X2luaXQpOworbW9kdWxlX2V4aXQoaGxfbXRfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKaW5kZXggYzkwOGQ2OS4uMmU4MDg5ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwpAQCAtMTQsNiArMTQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaD4KIAorc3RydWN0IHh0X2xpbWl0X3ByaXYgeworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwl1aW50MzJfdCBjcmVkaXQ7Cit9OworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJIZXJ2ZSBFeWNoZW5uZSA8cnZAd2FsbGZpcmUub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiByYXRlLWxpbWl0IG1hdGNoIik7CkBAIC02MCwxOCArNjUsMTggQEAKIHN0YXRpYyBib29sCiBsaW1pdF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlzdHJ1Y3QgeHRfcmF0ZWluZm8gKnIgPQotCQkoKGNvbnN0IHN0cnVjdCB4dF9yYXRlaW5mbyAqKXBhci0+bWF0Y2hpbmZvKS0+bWFzdGVyOworCWNvbnN0IHN0cnVjdCB4dF9yYXRlaW5mbyAqciA9IHBhci0+bWF0Y2hpbmZvOworCXN0cnVjdCB4dF9saW1pdF9wcml2ICpwcml2ID0gci0+bWFzdGVyOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAogCXNwaW5fbG9ja19iaCgmbGltaXRfbG9jayk7Ci0Jci0+Y3JlZGl0ICs9IChub3cgLSB4Y2hnKCZyLT5wcmV2LCBub3cpKSAqIENSRURJVFNfUEVSX0pJRkZZOwotCWlmIChyLT5jcmVkaXQgPiByLT5jcmVkaXRfY2FwKQotCQlyLT5jcmVkaXQgPSByLT5jcmVkaXRfY2FwOworCXByaXYtPmNyZWRpdCArPSAobm93IC0geGNoZygmcHJpdi0+cHJldiwgbm93KSkgKiBDUkVESVRTX1BFUl9KSUZGWTsKKwlpZiAocHJpdi0+Y3JlZGl0ID4gci0+Y3JlZGl0X2NhcCkKKwkJcHJpdi0+Y3JlZGl0ID0gci0+Y3JlZGl0X2NhcDsKIAotCWlmIChyLT5jcmVkaXQgPj0gci0+Y29zdCkgeworCWlmIChwcml2LT5jcmVkaXQgPj0gci0+Y29zdCkgewogCQkvKiBXZSdyZSBub3QgbGltaXRlZC4gKi8KLQkJci0+Y3JlZGl0IC09IHItPmNvc3Q7CisJCXByaXYtPmNyZWRpdCAtPSByLT5jb3N0OwogCQlzcGluX3VubG9ja19iaCgmbGltaXRfbG9jayk7CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTk1LDYgKzEwMCw3IEBACiBzdGF0aWMgYm9vbCBsaW1pdF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIHsKIAlzdHJ1Y3QgeHRfcmF0ZWluZm8gKnIgPSBwYXItPm1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqcHJpdjsKIAogCS8qIENoZWNrIGZvciBvdmVyZmxvdy4gKi8KIAlpZiAoci0+YnVyc3QgPT0gMApAQCAtMTA0LDE5ICsxMTAsMzAgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBjb3VudGVycy4gKi8KLQlyLT5tYXN0ZXIgPSByOworCXByaXYgPSBrbWFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIHN0YXRlLiAqLworCXItPm1hc3RlciA9IHByaXY7CiAJaWYgKHItPmNvc3QgPT0gMCkgewogCQkvKiBVc2VyIGF2ZyBpbiBzZWNvbmRzICogWFRfTElNSVRfU0NBTEU6IGNvbnZlcnQgdG8gamlmZmllcyAqCiAJCSAgIDEyOC4gKi8KLQkJci0+cHJldiA9IGppZmZpZXM7Ci0JCXItPmNyZWRpdCA9IHVzZXIyY3JlZGl0cyhyLT5hdmcgKiByLT5idXJzdCk7CSAvKiBDcmVkaXRzIGZ1bGwuICovCisJCXByaXYtPnByZXYgPSBqaWZmaWVzOworCQlwcml2LT5jcmVkaXQgPSB1c2VyMmNyZWRpdHMoci0+YXZnICogci0+YnVyc3QpOyAvKiBDcmVkaXRzIGZ1bGwuICovCiAJCXItPmNyZWRpdF9jYXAgPSB1c2VyMmNyZWRpdHMoci0+YXZnICogci0+YnVyc3QpOyAvKiBDcmVkaXRzIGZ1bGwuICovCiAJCXItPmNvc3QgPSB1c2VyMmNyZWRpdHMoci0+YXZnKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGxpbWl0X210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9yYXRlaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUoaW5mby0+bWFzdGVyKTsKK30KKwogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8gewogCXVfaW50MzJfdCBhdmc7CkBAIC0xNjcsNiArMTg0LDcgQEAKIAkuZmFtaWx5ICAgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCS5tYXRjaCAgICAgICAgICAgID0gbGltaXRfbXQsCiAJLmNoZWNrZW50cnkgICAgICAgPSBsaW1pdF9tdF9jaGVjaywKKwkuZGVzdHJveSAgICAgICAgICA9IGxpbWl0X210X2Rlc3Ryb3ksCiAJLm1hdGNoc2l6ZSAgICAgICAgPSBzaXplb2Yoc3RydWN0IHh0X3JhdGVpbmZvKSwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdHNpemUgICAgICAgPSBzaXplb2Yoc3RydWN0IGNvbXBhdF94dF9yYXRlaW5mbyksCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYyBiL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jCmluZGV4IDFiY2RmYzEuLjhkMjhjYTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jCkBAIC0yMCwxMyArMjAsMTMgQEAKIE1PRFVMRV9BTElBUygiaXB0X3BoeXNkZXYiKTsKIE1PRFVMRV9BTElBUygiaXA2dF9waHlzZGV2Iik7CiAKKwogc3RhdGljIGJvb2wKIHBoeXNkZXZfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0JaW50IGk7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdOworCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAljb25zdCBzdHJ1Y3QgeHRfcGh5c2Rldl9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JYm9vbCByZXQ7CisJdW5zaWduZWQgbG9uZyByZXQ7CiAJY29uc3QgY2hhciAqaW5kZXYsICpvdXRkZXY7CiAJY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2U7CiAKQEAgLTY4LDExICs2OCw3IEBACiAJaWYgKCEoaW5mby0+Yml0bWFzayAmIFhUX1BIWVNERVZfT1BfSU4pKQogCQlnb3RvIG1hdGNoX291dGRldjsKIAlpbmRldiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2ID8gbmZfYnJpZGdlLT5waHlzaW5kZXYtPm5hbWUgOiBudWxsZGV2bmFtZTsKLQlmb3IgKGkgPSAwLCByZXQgPSBmYWxzZTsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBpbnQpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPnBoeXNpbmRldilbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+aW5fbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoaW5kZXYsIGluZm8tPnBoeXNpbmRldiwgaW5mby0+aW5fbWFzayk7CiAKIAlpZiAoIXJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9JTikpCiAJCXJldHVybiBmYWxzZTsKQEAgLTgyLDEzICs3OCw5IEBACiAJCXJldHVybiB0cnVlOwogCW91dGRldiA9IG5mX2JyaWRnZS0+cGh5c291dGRldiA/CiAJCSBuZl9icmlkZ2UtPnBoeXNvdXRkZXYtPm5hbWUgOiBudWxsZGV2bmFtZTsKLQlmb3IgKGkgPSAwLCByZXQgPSBmYWxzZTsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBpbnQpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGludCAqKW91dGRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5waHlzb3V0ZGV2KVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5vdXRfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQob3V0ZGV2LCBpbmZvLT5waHlzb3V0ZGV2LCBpbmZvLT5vdXRfbWFzayk7CiAKLQlyZXR1cm4gcmV0IF4gIShpbmZvLT5pbnZlcnQgJiBYVF9QSFlTREVWX09QX09VVCk7CisJcmV0dXJuICghIXJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9PVVQpKTsKIH0KIAogc3RhdGljIGJvb2wgcGh5c2Rldl9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwppbmRleCBjODRmY2U1Li4wMWRkMDdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCkBAIC05LDYgKzksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaD4KIAorc3RydWN0IHh0X3F1b3RhX3ByaXYgeworCXVpbnQ2NF90IHF1b3RhOworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiU2FtIEpvaG5zdG9uIDxzYW1qQHNhbWoubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBjb3VudGRvd24gcXVvdGEgbWF0Y2giKTsKQEAgLTIwLDE4ICsyNCwyMCBAQAogc3RhdGljIGJvb2wKIHF1b3RhX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCXN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqKXBhci0+bWF0Y2hpbmZvKS0+bWFzdGVyOworCXN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0gKHZvaWQgKilwYXItPm1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfcXVvdGFfcHJpdiAqcHJpdiA9IHEtPm1hc3RlcjsKIAlib29sIHJldCA9IHEtPmZsYWdzICYgWFRfUVVPVEFfSU5WRVJUOwogCiAJc3Bpbl9sb2NrX2JoKCZxdW90YV9sb2NrKTsKLQlpZiAocS0+cXVvdGEgPj0gc2tiLT5sZW4pIHsKLQkJcS0+cXVvdGEgLT0gc2tiLT5sZW47CisJaWYgKHByaXYtPnF1b3RhID49IHNrYi0+bGVuKSB7CisJCXByaXYtPnF1b3RhIC09IHNrYi0+bGVuOwogCQlyZXQgPSAhcmV0OwogCX0gZWxzZSB7CiAJCS8qIHdlIGRvIG5vdCBhbGxvdyBldmVuIHNtYWxsIHBhY2tldHMgZnJvbSBub3cgb24gKi8KLQkJcS0+cXVvdGEgPSAwOworCQlwcml2LT5xdW90YSA9IDA7CiAJfQorCS8qIENvcHkgcXVvdGEgYmFjayB0byBtYXRjaGluZm8gc28gdGhhdCBpcHRhYmxlcyBjYW4gZGlzcGxheSBpdCAqLworCXEtPnF1b3RhID0gcHJpdi0+cXVvdGE7CiAJc3Bpbl91bmxvY2tfYmgoJnF1b3RhX2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTQzLDE3ICs0OSwyOCBAQAogCiAJaWYgKHEtPmZsYWdzICYgflhUX1FVT1RBX01BU0spCiAJCXJldHVybiBmYWxzZTsKLQkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2YgY291bnRlcnMuICovCi0JcS0+bWFzdGVyID0gcTsKKworCXEtPm1hc3RlciA9IGttYWxsb2Moc2l6ZW9mKCpxLT5tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAocS0+bWFzdGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIHF1b3RhX210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0gcGFyLT5tYXRjaGluZm87CisKKwlrZnJlZShxLT5tYXN0ZXIpOworfQorCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHF1b3RhX210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lICAgICAgID0gInF1b3RhIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICA9IHF1b3RhX210LAogCS5jaGVja2VudHJ5ID0gcXVvdGFfbXRfY2hlY2ssCisJLmRlc3Ryb3kgICAgPSBxdW90YV9tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9xdW90YV9pbmZvKSwKIAkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCmluZGV4IDBkNzUxNDEuLmQ4YzBmOGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwpAQCAtMTYsNiArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAKK3N0cnVjdCB4dF9zdGF0aXN0aWNfcHJpdiB7CisJdWludDMyX3QgY291bnQ7Cit9OworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogc3RhdGlzdGljcy1iYXNlZCBtYXRjaGluZyAoXCJOdGhcIiwgcmFuZG9tKSIpOwpAQCAtMjcsNyArMzEsNyBAQAogc3RhdGljIGJvb2wKIHN0YXRpc3RpY19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSAodm9pZCAqKXBhci0+bWF0Y2hpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwogCWJvb2wgcmV0ID0gaW5mby0+ZmxhZ3MgJiBYVF9TVEFUSVNUSUNfSU5WRVJUOwogCiAJc3dpdGNoIChpbmZvLT5tb2RlKSB7CkBAIC0zNiwxMCArNDAsOSBAQAogCQkJcmV0ID0gIXJldDsKIAkJYnJlYWs7CiAJY2FzZSBYVF9TVEFUSVNUSUNfTU9ERV9OVEg6Ci0JCWluZm8gPSBpbmZvLT5tYXN0ZXI7CiAJCXNwaW5fbG9ja19iaCgmbnRoX2xvY2spOwotCQlpZiAoaW5mby0+dS5udGguY291bnQrKyA9PSBpbmZvLT51Lm50aC5ldmVyeSkgewotCQkJaW5mby0+dS5udGguY291bnQgPSAwOworCQlpZiAoaW5mby0+bWFzdGVyLT5jb3VudCsrID09IGluZm8tPnUubnRoLmV2ZXJ5KSB7CisJCQlpbmZvLT5tYXN0ZXItPmNvdW50ID0gMDsKIAkJCXJldCA9ICFyZXQ7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJm50aF9sb2NrKTsKQEAgLTU2LDE2ICs1OSwzMSBAQAogCWlmIChpbmZvLT5tb2RlID4gWFRfU1RBVElTVElDX01PREVfTUFYIHx8CiAJICAgIGluZm8tPmZsYWdzICYgflhUX1NUQVRJU1RJQ19NQVNLKQogCQlyZXR1cm4gZmFsc2U7Ci0JaW5mby0+bWFzdGVyID0gaW5mbzsKKworCWluZm8tPm1hc3RlciA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvLT5tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaW5mby0+bWFzdGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IE91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWluZm8tPm1hc3Rlci0+Y291bnQgPSBpbmZvLT51Lm50aC5jb3VudDsKKwogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBzdGF0aXN0aWNfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisKKwlrZnJlZShpbmZvLT5tYXN0ZXIpOworfQorCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X3N0YXRpc3RpY19tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAgICAgICA9ICJzdGF0aXN0aWMiLAogCS5yZXZpc2lvbiAgID0gMCwKIAkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCS5tYXRjaCAgICAgID0gc3RhdGlzdGljX210LAogCS5jaGVja2VudHJ5ID0gc3RhdGlzdGljX210X2NoZWNrLAorCS5kZXN0cm95ICAgID0gc3RhdGlzdGljX210X2Rlc3Ryb3ksCiAJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvKSwKIAkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCmluZGV4IGZkOTIyOWQuLmIwZTU4MmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwpAQCAtNjE5LDggKzYxOSw5IEBACiB9CiAKIC8qKgotICogbmV0bGJsX3NvY2tldF9zZXRhdHRyIC0gTGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIGNvcnJlY3QgcHJvdG9jb2wKKyAqIG5ldGxibF9zb2NrX3NldGF0dHIgLSBMYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgY29ycmVjdCBwcm90b2NvbAogICogQHNrOiB0aGUgc29ja2V0IHRvIGxhYmVsCisgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKICAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtNjMzLDI5ICs2MzQsNDUgQEAKICAqCiAgKi8KIGludCBuZXRsYmxfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCXUxNiBmYW1pbHksCiAJCQljb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWludCByZXRfdmFsID0gLUVOT0VOVDsKKwlpbnQgcmV0X3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9lbnRyeTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlkb21fZW50cnkgPSBuZXRsYmxfZG9taHNoX2dldGVudHJ5KHNlY2F0dHItPmRvbWFpbik7Ci0JaWYgKGRvbV9lbnRyeSA9PSBOVUxMKQorCWlmIChkb21fZW50cnkgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT0VOVDsKIAkJZ290byBzb2NrZXRfc2V0YXR0cl9yZXR1cm47Ci0Jc3dpdGNoIChkb21fZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKLQkJcmV0X3ZhbCA9IC1FREVTVEFERFJSRVE7CisJfQorCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzd2l0Y2ggKGRvbV9lbnRyeS0+dHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKKwkJCXJldF92YWwgPSAtRURFU1RBRERSUkVROworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzaywKKwkJCQkJCSAgICBkb21fZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCisJCQkJCQkgICAgc2VjYXR0cik7CisJCQlicmVhazsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKwkJCXJldF92YWwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJfQogCQlicmVhazsKLQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzaywKLQkJCQkJCWRvbV9lbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKLQkJCQkJCXNlY2F0dHIpOwotCQlicmVhazsKLQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCS8qIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYgbGFiZWxpbmcgcHJvdG9jb2xzIHJpZ2h0CisJCSAqIG5vdyB3ZSBjYW4gb3B0aW1pemUgZXZlcnl0aGluZyBhd2F5IHVudGlsIHdlIGRvICovCiAJCXJldF92YWwgPSAwOwogCQlicmVhazsKKyNlbmRpZiAvKiBJUHY2ICovCiAJZGVmYXVsdDoKLQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogc29ja2V0X3NldGF0dHJfcmV0dXJuOgpAQCAtNjg5LDkgKzcwNiwyNSBAQAogICogb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK2ludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JcmV0dXJuIGNpcHNvX3Y0X3NvY2tfZ2V0YXR0cihzaywgc2VjYXR0cik7CisJaW50IHJldF92YWw7CisKKwlzd2l0Y2ggKHNrLT5za19mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldF92YWwgPSBjaXBzb192NF9zb2NrX2dldGF0dHIoc2ssIHNlY2F0dHIpOworCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQlyZXRfdmFsID0gLUVOT01TRzsKKwkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLworCWRlZmF1bHQ6CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOworCX0KKworCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKQEAgLTc0OCw3ICs3ODEsNyBAQAogCQlicmVhazsKICNlbmRpZiAvKiBJUHY2ICovCiAJZGVmYXVsdDoKLQkJcmV0X3ZhbCA9IDA7CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogY29ubl9zZXRhdHRyX3JldHVybjoKQEAgLTc1Nyw2ICs3OTAsOTAgQEAKIH0KIAogLyoqCisgKiBuZXRsYmxfcmVxX3NldGF0dHIgLSBMYWJlbCBhIHJlcXVlc3Qgc29ja2V0IHVzaW5nIHRoZSBjb3JyZWN0IHByb3RvY29sCisgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gbGFiZWwKKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogQXR0YWNoIHRoZSBjb3JyZWN0IGxhYmVsIHRvIHRoZSBnaXZlbiBzb2NrZXQgdXNpbmcgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIHNwZWNpZmllZCBpbiBAc2VjYXR0ci4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBuZXRsYmxfcmVxX3NldGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9lbnRyeTsKKwlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqYWY0X2VudHJ5OworCXUzMiBwcm90b190eXBlOworCXN0cnVjdCBjaXBzb192NF9kb2kgKnByb3RvX2N2NDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlkb21fZW50cnkgPSBuZXRsYmxfZG9taHNoX2dldGVudHJ5KHNlY2F0dHItPmRvbWFpbik7CisJaWYgKGRvbV9lbnRyeSA9PSBOVUxMKSB7CisJCXJldF92YWwgPSAtRU5PRU5UOworCQlnb3RvIHJlcV9zZXRhdHRyX3JldHVybjsKKwl9CisJc3dpdGNoIChyZXEtPnJza19vcHMtPmZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGRvbV9lbnRyeS0+dHlwZSA9PSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1QpIHsKKwkJCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqcmVxX2luZXQgPSBpbmV0X3JzayhyZXEpOworCQkJYWY0X2VudHJ5ID0gbmV0bGJsX2RvbWhzaF9nZXRlbnRyeV9hZjQoc2VjYXR0ci0+ZG9tYWluLAorCQkJCQkJCSAgICByZXFfaW5ldC0+cm10X2FkZHIpOworCQkJaWYgKGFmNF9lbnRyeSA9PSBOVUxMKSB7CisJCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCQkJZ290byByZXFfc2V0YXR0cl9yZXR1cm47CisJCQl9CisJCQlwcm90b190eXBlID0gYWY0X2VudHJ5LT50eXBlOworCQkJcHJvdG9fY3Y0ID0gYWY0X2VudHJ5LT50eXBlX2RlZi5jaXBzb3Y0OworCQl9IGVsc2UgeworCQkJcHJvdG9fdHlwZSA9IGRvbV9lbnRyeS0+dHlwZTsKKwkJCXByb3RvX2N2NCA9IGRvbV9lbnRyeS0+dHlwZV9kZWYuY2lwc292NDsKKwkJfQorCQlzd2l0Y2ggKHByb3RvX3R5cGUpIHsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCQlyZXRfdmFsID0gY2lwc29fdjRfcmVxX3NldGF0dHIocmVxLCBwcm90b19jdjQsIHNlY2F0dHIpOworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CisJCQkvKiBqdXN0IGRlbGV0ZSB0aGUgcHJvdG9jb2xzIHdlIHN1cHBvcnQgZm9yIHJpZ2h0IG5vdworCQkJICogYnV0IHdlIGNvdWxkIHJlbW92ZSBvdGhlciBwcm90b2NvbHMgaWYgbmVlZGVkICovCisJCQljaXBzb192NF9yZXFfZGVsYXR0cihyZXEpOworCQkJcmV0X3ZhbCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldF92YWwgPSAtRU5PRU5UOworCQl9CisJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCS8qIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYgbGFiZWxpbmcgcHJvdG9jb2xzIHJpZ2h0CisJCSAqIG5vdyB3ZSBjYW4gb3B0aW1pemUgZXZlcnl0aGluZyBhd2F5IHVudGlsIHdlIGRvICovCisJCXJldF92YWwgPSAwOworCQlicmVhazsKKyNlbmRpZiAvKiBJUHY2ICovCisJZGVmYXVsdDoKKwkJcmV0X3ZhbCA9IC1FUFJPVE9OT1NVUFBPUlQ7CisJfQorCityZXFfc2V0YXR0cl9yZXR1cm46CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorKiBuZXRsYmxfcmVxX2RlbGF0dHIgLSBEZWxldGUgYWxsIHRoZSBOZXRMYWJlbCBsYWJlbHMgb24gYSBzb2NrZXQKKyogQHJlcTogdGhlIHNvY2tldAorKgorKiBEZXNjcmlwdGlvbjoKKyogUmVtb3ZlIGFsbCB0aGUgTmV0TGFiZWwgbGFiZWxpbmcgZnJvbSBAcmVxLgorKgorKi8KK3ZvaWQgbmV0bGJsX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwljaXBzb192NF9yZXFfZGVsYXR0cihyZXEpOworfQorCisvKioKICAqIG5ldGxibF9za2J1ZmZfc2V0YXR0ciAtIExhYmVsIGEgcGFja2V0IHVzaW5nIHRoZSBjb3JyZWN0IHByb3RvY29sCiAgKiBAc2tiOiB0aGUgcGFja2V0CiAgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKQEAgLTgwOCw3ICs5MjUsNyBAQAogCQlicmVhazsKICNlbmRpZiAvKiBJUHY2ICovCiAJZGVmYXVsdDoKLQkJcmV0X3ZhbCA9IDA7CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogc2tidWZmX3NldGF0dHJfcmV0dXJuOgpAQCAtODMzLDkgKzk1MCwxNyBAQAogCQkJICB1MTYgZmFtaWx5LAogCQkJICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpICYmCi0JICAgIGNpcHNvX3Y0X3NrYnVmZl9nZXRhdHRyKHNrYiwgc2VjYXR0cikgPT0gMCkKLQkJcmV0dXJuIDA7CisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpICYmCisJCSAgICBjaXBzb192NF9za2J1ZmZfZ2V0YXR0cihza2IsIHNlY2F0dHIpID09IDApCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjoKKwkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLworCX0KIAogCXJldHVybiBuZXRsYmxfdW5sYWJlbF9nZXRhdHRyKHNrYiwgZmFtaWx5LCBzZWNhdHRyKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL01ha2VmaWxlIGIvbmV0L25ldGxpbmsvTWFrZWZpbGUKaW5kZXggZTM1ODljMi4uYmRkNmRkZiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvTWFrZWZpbGUKKysrIGIvbmV0L25ldGxpbmsvTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbmV0bGluayBkcml2ZXIuCiAjCiAKLW9iai15ICAJCQkJOj0gYWZfbmV0bGluay5vIGF0dHIubyBnZW5ldGxpbmsubworb2JqLXkgIAkJCQk6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCAzYWUzY2I4Li44YjZiYmIzIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC04NSw2ICs4NSw4IEBACiAKICNkZWZpbmUgTkVUTElOS19LRVJORUxfU09DS0VUCTB4MQogI2RlZmluZSBORVRMSU5LX1JFQ1ZfUEtUSU5GTwkweDIKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUgkweDQKKyNkZWZpbmUgTkVUTElOS19SRUNWX05PX0VOT0JVRlMJMHg4CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxpbmtfc29jayAqbmxrX3NrKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTcxNiwxMCArNzE4LDE1IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfb3ZlcnJ1bihzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZubGtfc2soc2spLT5zdGF0ZSkpIHsKLQkJc2stPnNrX2VyciA9IEVOT0JVRlM7Ci0JCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzayk7CisKKwlpZiAoIShubGstPmZsYWdzICYgTkVUTElOS19SRUNWX05PX0VOT0JVRlMpKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbmxrX3NrKHNrKS0+c3RhdGUpKSB7CisJCQlzay0+c2tfZXJyID0gRU5PQlVGUzsKKwkJCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworCQl9CiAJfQorCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbmV0bGlua19nZXRzb2NrYnlwaWQoc3RydWN0IHNvY2sgKnNzaywgdTMyIHBpZCkKQEAgLTk1MCw2ICs5NTcsNyBAQAogCXUzMiBwaWQ7CiAJdTMyIGdyb3VwOwogCWludCBmYWlsdXJlOworCWludCBkZWxpdmVyeV9mYWlsdXJlOwogCWludCBjb25nZXN0ZWQ7CiAJaW50IGRlbGl2ZXJlZDsKIAlnZnBfdCBhbGxvY2F0aW9uOwpAQCAtOTk0LDExICsxMDAyLDE1IEBACiAJCW5ldGxpbmtfb3ZlcnJ1bihzayk7CiAJCS8qIENsb25lIGZhaWxlZC4gTm90aWZ5IEFMTCBsaXN0ZW5lcnMuICovCiAJCXAtPmZhaWx1cmUgPSAxOworCQlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IpCisJCQlwLT5kZWxpdmVyeV9mYWlsdXJlID0gMTsKIAl9IGVsc2UgaWYgKHNrX2ZpbHRlcihzaywgcC0+c2tiMikpIHsKIAkJa2ZyZWVfc2tiKHAtPnNrYjIpOwogCQlwLT5za2IyID0gTlVMTDsKIAl9IGVsc2UgaWYgKCh2YWwgPSBuZXRsaW5rX2Jyb2FkY2FzdF9kZWxpdmVyKHNrLCBwLT5za2IyKSkgPCAwKSB7CiAJCW5ldGxpbmtfb3ZlcnJ1bihzayk7CisJCWlmIChubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUikKKwkJCXAtPmRlbGl2ZXJ5X2ZhaWx1cmUgPSAxOwogCX0gZWxzZSB7CiAJCXAtPmNvbmdlc3RlZCB8PSB2YWw7CiAJCXAtPmRlbGl2ZXJlZCA9IDE7CkBAIC0xMDI1LDYgKzEwMzcsNyBAQAogCWluZm8ucGlkID0gcGlkOwogCWluZm8uZ3JvdXAgPSBncm91cDsKIAlpbmZvLmZhaWx1cmUgPSAwOworCWluZm8uZGVsaXZlcnlfZmFpbHVyZSA9IDA7CiAJaW5mby5jb25nZXN0ZWQgPSAwOwogCWluZm8uZGVsaXZlcmVkID0gMDsKIAlpbmZvLmFsbG9jYXRpb24gPSBhbGxvY2F0aW9uOwpAQCAtMTA0MiwxNiArMTA1NSwxNiBAQAogCiAJbmV0bGlua191bmxvY2tfdGFibGUoKTsKIAotCWlmIChpbmZvLnNrYjIpCi0JCWtmcmVlX3NrYihpbmZvLnNrYjIpOworCWtmcmVlX3NrYihpbmZvLnNrYjIpOworCisJaWYgKGluZm8uZGVsaXZlcnlfZmFpbHVyZSkKKwkJcmV0dXJuIC1FTk9CVUZTOwogCiAJaWYgKGluZm8uZGVsaXZlcmVkKSB7CiAJCWlmIChpbmZvLmNvbmdlc3RlZCAmJiAoYWxsb2NhdGlvbiAmIF9fR0ZQX1dBSVQpKQogCQkJeWllbGQoKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChpbmZvLmZhaWx1cmUpCi0JCXJldHVybiAtRU5PQlVGUzsKIAlyZXR1cm4gLUVTUkNIOwogfQogRVhQT1JUX1NZTUJPTChuZXRsaW5rX2Jyb2FkY2FzdCk7CkBAIC0xMTEwLDYgKzExMjMsNyBAQAogCiAJcmVhZF91bmxvY2soJm5sX3RhYmxlX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChuZXRsaW5rX3NldF9lcnIpOwogCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIG5ldGxpbmsgdGFibGUgZ3JhYmJlZCAqLwogc3RhdGljIHZvaWQgbmV0bGlua191cGRhdGVfc29ja2V0X21jKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywKQEAgLTExNjcsNiArMTE4MSwyMiBAQAogCQllcnIgPSAwOwogCQlicmVhazsKIAl9CisJY2FzZSBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUjoKKwkJaWYgKHZhbCkKKwkJCW5say0+ZmxhZ3MgfD0gTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUjsKKwkJZWxzZQorCQkJbmxrLT5mbGFncyAmPSB+TkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUjsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBORVRMSU5LX05PX0VOT0JVRlM6CisJCWlmICh2YWwpIHsKKwkJCW5say0+ZmxhZ3MgfD0gTkVUTElOS19SRUNWX05PX0VOT0JVRlM7CisJCQljbGVhcl9iaXQoMCwgJm5say0+c3RhdGUpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZubGstPndhaXQpOworCQl9IGVsc2UKKwkJCW5say0+ZmxhZ3MgJj0gfk5FVExJTktfUkVDVl9OT19FTk9CVUZTOworCQllcnIgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTE5OSw2ICsxMjI5LDI2IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJZXJyID0gMDsKIAkJYnJlYWs7CisJY2FzZSBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUjoKKwkJaWYgKGxlbiA8IHNpemVvZihpbnQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxlbiA9IHNpemVvZihpbnQpOworCQl2YWwgPSBubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUiA/IDEgOiAwOworCQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8CisJCSAgICBwdXRfdXNlcih2YWwsIG9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBORVRMSU5LX05PX0VOT0JVRlM6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJdmFsID0gbmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9OT19FTk9CVUZTID8gMSA6IDA7CisJCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikgfHwKKwkJICAgIHB1dF91c2VyKHZhbCwgb3B0dmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllcnIgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTUyNSw4ICsxNTc1LDcgQEAKIAogc3RhdGljIHZvaWQgbmV0bGlua19kZXN0cm95X2NhbGxiYWNrKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlpZiAoY2ItPnNrYikKLQkJa2ZyZWVfc2tiKGNiLT5za2IpOworCWtmcmVlX3NrYihjYi0+c2tiKTsKIAlrZnJlZShjYik7CiB9CiAKQEAgLTE3NDMsMTIgKzE3OTIsMTggQEAKIAkJCWV4Y2x1ZGVfcGlkID0gcGlkOwogCQl9CiAKLQkJLyogZXJyb3JzIHJlcG9ydGVkIHZpYSBkZXN0aW5hdGlvbiBzay0+c2tfZXJyICovCi0JCW5sbXNnX211bHRpY2FzdChzaywgc2tiLCBleGNsdWRlX3BpZCwgZ3JvdXAsIGZsYWdzKTsKKwkJLyogZXJyb3JzIHJlcG9ydGVkIHZpYSBkZXN0aW5hdGlvbiBzay0+c2tfZXJyLCBidXQgcHJvcGFnYXRlCisJCSAqIGRlbGl2ZXJ5IGVycm9ycyBpZiBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUiBmbGFnIGlzIHNldCAqLworCQllcnIgPSBubG1zZ19tdWx0aWNhc3Qoc2ssIHNrYiwgZXhjbHVkZV9waWQsIGdyb3VwLCBmbGFncyk7CiAJfQogCi0JaWYgKHJlcG9ydCkKLQkJZXJyID0gbmxtc2dfdW5pY2FzdChzaywgc2tiLCBwaWQpOworCWlmIChyZXBvcnQpIHsKKwkJaW50IGVycjI7CisKKwkJZXJyMiA9IG5sbXNnX3VuaWNhc3Qoc2ssIHNrYiwgcGlkKTsKKwkJaWYgKCFlcnIgfHwgZXJyID09IC1FU1JDSCkKKwkJCWVyciA9IGVycjI7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE4NDksMTIgKzE5MDQsMTIgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAic2sgICAgICAgRXRoIFBpZCAgICBHcm91cHMgICAiCi0JCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzXG4iKTsKKwkJCSAiUm1lbSAgICAgV21lbSAgICAgRHVtcCAgICAgTG9ja3MgICAgIERyb3BzXG4iKTsKIAllbHNlIHsKIAkJc3RydWN0IHNvY2sgKnMgPSB2OwogCQlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2socyk7CiAKLQkJc2VxX3ByaW50ZihzZXEsICIlcCAlLTNkICUtNmQgJTA4eCAlLThkICUtOGQgJXAgJWRcbiIsCisJCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICUtOGQgJS04ZFxuIiwKIAkJCSAgIHMsCiAJCQkgICBzLT5za19wcm90b2NvbCwKIAkJCSAgIG5say0+cGlkLApAQCAtMTg2Miw3ICsxOTE3LDggQEAKIAkJCSAgIGF0b21pY19yZWFkKCZzLT5za19ybWVtX2FsbG9jKSwKIAkJCSAgIGF0b21pY19yZWFkKCZzLT5za193bWVtX2FsbG9jKSwKIAkJCSAgIG5say0+Y2IsCi0JCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcmVmY250KQorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JlZmNudCksCisJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfZHJvcHMpCiAJCQkpOwogCiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYXR0ci5jIGIvbmV0L25ldGxpbmsvYXR0ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmMzY2U3Li4wMDAwMDAwCi0tLSBhL25ldC9uZXRsaW5rL2F0dHIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vKgotICogTkVUTElOSyAgICAgIE5ldGxpbmsgYXR0cmlidXRlcwotICoKLSAqIAkJQXV0aG9yczoJVGhvbWFzIEdyYWYgPHRncmFmQHN1dWcuY2g+Ci0gKiAJCQkJQWxleGV5IEt1em5ldHNvdiA8a3V6bmV0QG1zMi5pbnIuYWMucnU+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KLQotc3RhdGljIHUxNiBubGFfYXR0cl9taW5sZW5bTkxBX1RZUEVfTUFYKzFdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JW05MQV9VOF0JPSBzaXplb2YodTgpLAotCVtOTEFfVTE2XQk9IHNpemVvZih1MTYpLAotCVtOTEFfVTMyXQk9IHNpemVvZih1MzIpLAotCVtOTEFfVTY0XQk9IHNpemVvZih1NjQpLAotCVtOTEFfTkVTVEVEXQk9IE5MQV9IRFJMRU4sCi19OwotCi1zdGF0aWMgaW50IHZhbGlkYXRlX25sYShzdHJ1Y3QgbmxhdHRyICpubGEsIGludCBtYXh0eXBlLAotCQkJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKLXsKLQljb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQ7Ci0JaW50IG1pbmxlbiA9IDAsIGF0dHJsZW4gPSBubGFfbGVuKG5sYSksIHR5cGUgPSBubGFfdHlwZShubGEpOwotCi0JaWYgKHR5cGUgPD0gMCB8fCB0eXBlID4gbWF4dHlwZSkKLQkJcmV0dXJuIDA7Ci0KLQlwdCA9ICZwb2xpY3lbdHlwZV07Ci0KLQlCVUdfT04ocHQtPnR5cGUgPiBOTEFfVFlQRV9NQVgpOwotCi0Jc3dpdGNoIChwdC0+dHlwZSkgewotCWNhc2UgTkxBX0ZMQUc6Ci0JCWlmIChhdHRybGVuID4gMCkKLQkJCXJldHVybiAtRVJBTkdFOwotCQlicmVhazsKLQotCWNhc2UgTkxBX05VTF9TVFJJTkc6Ci0JCWlmIChwdC0+bGVuKQotCQkJbWlubGVuID0gbWluX3QoaW50LCBhdHRybGVuLCBwdC0+bGVuICsgMSk7Ci0JCWVsc2UKLQkJCW1pbmxlbiA9IGF0dHJsZW47Ci0KLQkJaWYgKCFtaW5sZW4gfHwgbWVtY2hyKG5sYV9kYXRhKG5sYSksICdcMCcsIG1pbmxlbikgPT0gTlVMTCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgTkxBX1NUUklORzoKLQkJaWYgKGF0dHJsZW4gPCAxKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0KLQkJaWYgKHB0LT5sZW4pIHsKLQkJCWNoYXIgKmJ1ZiA9IG5sYV9kYXRhKG5sYSk7Ci0KLQkJCWlmIChidWZbYXR0cmxlbiAtIDFdID09ICdcMCcpCi0JCQkJYXR0cmxlbi0tOwotCi0JCQlpZiAoYXR0cmxlbiA+IHB0LT5sZW4pCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE5MQV9CSU5BUlk6Ci0JCWlmIChwdC0+bGVuICYmIGF0dHJsZW4gPiBwdC0+bGVuKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTEFfTkVTVEVEX0NPTVBBVDoKLQkJaWYgKGF0dHJsZW4gPCBwdC0+bGVuKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCWlmIChhdHRybGVuIDwgTkxBX0FMSUdOKHB0LT5sZW4pKQotCQkJYnJlYWs7Ci0JCWlmIChhdHRybGVuIDwgTkxBX0FMSUdOKHB0LT5sZW4pICsgTkxBX0hEUkxFTikKLQkJCXJldHVybiAtRVJBTkdFOwotCQlubGEgPSBubGFfZGF0YShubGEpICsgTkxBX0FMSUdOKHB0LT5sZW4pOwotCQlpZiAoYXR0cmxlbiA8IE5MQV9BTElHTihwdC0+bGVuKSArIE5MQV9IRFJMRU4gKyBubGFfbGVuKG5sYSkpCi0JCQlyZXR1cm4gLUVSQU5HRTsKLQkJYnJlYWs7Ci0JY2FzZSBOTEFfTkVTVEVEOgotCQkvKiBhIG5lc3RlZCBhdHRyaWJ1dGVzIGlzIGFsbG93ZWQgdG8gYmUgZW1wdHk7IGlmIGl0cyBub3QsCi0JCSAqIGl0IG11c3QgaGF2ZSBhIHNpemUgb2YgYXQgbGVhc3QgTkxBX0hEUkxFTi4KLQkJICovCi0JCWlmIChhdHRybGVuID09IDApCi0JCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAocHQtPmxlbikKLQkJCW1pbmxlbiA9IHB0LT5sZW47Ci0JCWVsc2UgaWYgKHB0LT50eXBlICE9IE5MQV9VTlNQRUMpCi0JCQltaW5sZW4gPSBubGFfYXR0cl9taW5sZW5bcHQtPnR5cGVdOwotCi0JCWlmIChhdHRybGVuIDwgbWlubGVuKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogbmxhX3ZhbGlkYXRlIC0gVmFsaWRhdGUgYSBzdHJlYW0gb2YgYXR0cmlidXRlcwotICogQGhlYWQ6IGhlYWQgb2YgYXR0cmlidXRlIHN0cmVhbQotICogQGxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBzdHJlYW0KLSAqIEBtYXh0eXBlOiBtYXhpbXVtIGF0dHJpYnV0ZSB0eXBlIHRvIGJlIGV4cGVjdGVkCi0gKiBAcG9saWN5OiB2YWxpZGF0aW9uIHBvbGljeQotICoKLSAqIFZhbGlkYXRlcyBhbGwgYXR0cmlidXRlcyBpbiB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBzdHJlYW0gYWdhaW5zdCB0aGUKLSAqIHNwZWNpZmllZCBwb2xpY3kuIEF0dHJpYnV0ZXMgd2l0aCBhIHR5cGUgZXhjZWVkaW5nIG1heHR5cGUgd2lsbCBiZQotICogaWdub3JlZC4gU2VlIGRvY3VtZW5hdGlvbiBvZiBzdHJ1Y3QgbmxhX3BvbGljeSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KLSAqLwotaW50IG5sYV92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgbWF4dHlwZSwKLQkJIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCi17Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCWludCByZW0sIGVycjsKLQotCW5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHsKLQkJZXJyID0gdmFsaWRhdGVfbmxhKG5sYSwgbWF4dHlwZSwgcG9saWN5KTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycm91dDsKLQl9Ci0KLQllcnIgPSAwOwotZXJyb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgotICogbmxhX3BhcnNlIC0gUGFyc2UgYSBzdHJlYW0gb2YgYXR0cmlidXRlcyBpbnRvIGEgdGIgYnVmZmVyCi0gKiBAdGI6IGRlc3RpbmF0aW9uIGFycmF5IHdpdGggbWF4dHlwZSsxIGVsZW1lbnRzCi0gKiBAbWF4dHlwZTogbWF4aW11bSBhdHRyaWJ1dGUgdHlwZSB0byBiZSBleHBlY3RlZAotICogQGhlYWQ6IGhlYWQgb2YgYXR0cmlidXRlIHN0cmVhbQotICogQGxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBzdHJlYW0KLSAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5Ci0gKgotICogUGFyc2VzIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMgYW5kIHN0b3JlcyBhIHBvaW50ZXIgdG8gZWFjaCBhdHRyaWJ1dGUgaW4KLSAqIHRoZSB0YiBhcnJheSBhY2Nlc3NhYmxlIHZpYSB0aGUgYXR0cmlidXRlIHR5cGUuIEF0dHJpYnV0ZXMgd2l0aCBhIHR5cGUKLSAqIGV4Y2VlZGluZyBtYXh0eXBlIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLSAqIHJlYXNvbnMuIHBvbGljeSBtYXkgYmUgc2V0IHRvIE5VTEwgaWYgbm8gdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gKi8KLWludCBubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgaW50IG1heHR5cGUsIHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sCi0JICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKLXsKLQlzdHJ1Y3QgbmxhdHRyICpubGE7Ci0JaW50IHJlbSwgZXJyOwotCi0JbWVtc2V0KHRiLCAwLCBzaXplb2Yoc3RydWN0IG5sYXR0ciAqKSAqIChtYXh0eXBlICsgMSkpOwotCi0JbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkgewotCQl1MTYgdHlwZSA9IG5sYV90eXBlKG5sYSk7Ci0KLQkJaWYgKHR5cGUgPiAwICYmIHR5cGUgPD0gbWF4dHlwZSkgewotCQkJaWYgKHBvbGljeSkgewotCQkJCWVyciA9IHZhbGlkYXRlX25sYShubGEsIG1heHR5cGUsIHBvbGljeSk7Ci0JCQkJaWYgKGVyciA8IDApCi0JCQkJCWdvdG8gZXJyb3V0OwotCQkJfQotCi0JCQl0Ylt0eXBlXSA9IG5sYTsKLQkJfQotCX0KLQotCWlmICh1bmxpa2VseShyZW0gPiAwKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmV0bGluazogJWQgYnl0ZXMgbGVmdG92ZXIgYWZ0ZXIgcGFyc2luZyAiCi0JCSAgICAgICAiYXR0cmlidXRlcy5cbiIsIHJlbSk7Ci0KLQllcnIgPSAwOwotZXJyb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgotICogbmxhX2ZpbmQgLSBGaW5kIGEgc3BlY2lmaWMgYXR0cmlidXRlIGluIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMKLSAqIEBoZWFkOiBoZWFkIG9mIGF0dHJpYnV0ZSBzdHJlYW0KLSAqIEBsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyZWFtCi0gKiBAYXR0cnR5cGU6IHR5cGUgb2YgYXR0cmlidXRlIHRvIGxvb2sgZm9yCi0gKgotICogUmV0dXJucyB0aGUgZmlyc3QgYXR0cmlidXRlIGluIHRoZSBzdHJlYW0gbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCB0eXBlLgotICovCi1zdHJ1Y3QgbmxhdHRyICpubGFfZmluZChzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgYXR0cnR5cGUpCi17Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCWludCByZW07Ci0KLQlubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKQotCQlpZiAobmxhX3R5cGUobmxhKSA9PSBhdHRydHlwZSkKLQkJCXJldHVybiBubGE7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBubGFfc3RybGNweSAtIENvcHkgc3RyaW5nIGF0dHJpYnV0ZSBwYXlsb2FkIGludG8gYSBzaXplZCBidWZmZXIKLSAqIEBkc3Q6IHdoZXJlIHRvIGNvcHkgdGhlIHN0cmluZyB0bwotICogQG5sYTogYXR0cmlidXRlIHRvIGNvcHkgdGhlIHN0cmluZyBmcm9tCi0gKiBAZHN0c2l6ZTogc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIKLSAqCi0gKiBDb3BpZXMgYXQgbW9zdCBkc3RzaXplIC0gMSBieXRlcyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBhIHZhbGlkIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gVW5saWtlCi0gKiBzdHJsY3B5IHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgaXMgYWx3YXlzIHBhZGRlZCBvdXQuCi0gKgotICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLgotICovCi1zaXplX3QgbmxhX3N0cmxjcHkoY2hhciAqZHN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHNpemVfdCBkc3RzaXplKQotewotCXNpemVfdCBzcmNsZW4gPSBubGFfbGVuKG5sYSk7Ci0JY2hhciAqc3JjID0gbmxhX2RhdGEobmxhKTsKLQotCWlmIChzcmNsZW4gPiAwICYmIHNyY1tzcmNsZW4gLSAxXSA9PSAnXDAnKQotCQlzcmNsZW4tLTsKLQotCWlmIChkc3RzaXplID4gMCkgewotCQlzaXplX3QgbGVuID0gKHNyY2xlbiA+PSBkc3RzaXplKSA/IGRzdHNpemUgLSAxIDogc3JjbGVuOwotCi0JCW1lbXNldChkc3QsIDAsIGRzdHNpemUpOwotCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci0JfQotCi0JcmV0dXJuIHNyY2xlbjsKLX0KLQotLyoqCi0gKiBubGFfbWVtY3B5IC0gQ29weSBhIG5ldGxpbmsgYXR0cmlidXRlIGludG8gYW5vdGhlciBtZW1vcnkgYXJlYQotICogQGRlc3Q6IHdoZXJlIHRvIGNvcHkgdG8gbWVtY3B5Ci0gKiBAc3JjOiBuZXRsaW5rIGF0dHJpYnV0ZSB0byBjb3B5IGZyb20KLSAqIEBjb3VudDogc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYXJlYQotICoKLSAqIE5vdGU6IFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGlzIGxpbWl0ZWQgYnkgdGhlIGxlbmd0aCBvZgotICogICAgICAgYXR0cmlidXRlJ3MgcGF5bG9hZC4gbWVtY3B5Ci0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KLSAqLwotaW50IG5sYV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqc3JjLCBpbnQgY291bnQpCi17Ci0JaW50IG1pbmxlbiA9IG1pbl90KGludCwgY291bnQsIG5sYV9sZW4oc3JjKSk7Ci0KLQltZW1jcHkoZGVzdCwgbmxhX2RhdGEoc3JjKSwgbWlubGVuKTsKLQotCXJldHVybiBtaW5sZW47Ci19Ci0KLS8qKgotICogbmxhX21lbWNtcCAtIENvbXBhcmUgYW4gYXR0cmlidXRlIHdpdGggc2l6ZWQgbWVtb3J5IGFyZWEKLSAqIEBubGE6IG5ldGxpbmsgYXR0cmlidXRlCi0gKiBAZGF0YTogbWVtb3J5IGFyZWEKLSAqIEBzaXplOiBzaXplIG9mIG1lbW9yeSBhcmVhCi0gKi8KLWludCBubGFfbWVtY21wKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCSAgICAgc2l6ZV90IHNpemUpCi17Ci0JaW50IGQgPSBubGFfbGVuKG5sYSkgLSBzaXplOwotCi0JaWYgKGQgPT0gMCkKLQkJZCA9IG1lbWNtcChubGFfZGF0YShubGEpLCBkYXRhLCBzaXplKTsKLQotCXJldHVybiBkOwotfQotCi0vKioKLSAqIG5sYV9zdHJjbXAgLSBDb21wYXJlIGEgc3RyaW5nIGF0dHJpYnV0ZSBhZ2FpbnN0IGEgc3RyaW5nCi0gKiBAbmxhOiBuZXRsaW5rIHN0cmluZyBhdHRyaWJ1dGUKLSAqIEBzdHI6IGFub3RoZXIgc3RyaW5nCi0gKi8KLWludCBubGFfc3RyY21wKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgY29uc3QgY2hhciAqc3RyKQotewotCWludCBsZW4gPSBzdHJsZW4oc3RyKSArIDE7Ci0JaW50IGQgPSBubGFfbGVuKG5sYSkgLSBsZW47Ci0KLQlpZiAoZCA9PSAwKQotCQlkID0gbWVtY21wKG5sYV9kYXRhKG5sYSksIHN0ciwgbGVuKTsKLQotCXJldHVybiBkOwotfQotCi0vKioKLSAqIF9fbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCi0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgotICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQotICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIEFkZHMgYSBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCByZXNlcnZlcwotICogcm9vbSBmb3IgdGhlIHBheWxvYWQgYnV0IGRvZXMgbm90IGNvcHkgaXQuCi0gKgotICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2tiIHByb3ZpZGVzIGVub3VnaAotICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLgotICovCi1zdHJ1Y3QgbmxhdHRyICpfX25sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pCi17Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCi0JbmxhID0gKHN0cnVjdCBubGF0dHIgKikgc2tiX3B1dChza2IsIG5sYV90b3RhbF9zaXplKGF0dHJsZW4pKTsKLQlubGEtPm5sYV90eXBlID0gYXR0cnR5cGU7Ci0JbmxhLT5ubGFfbGVuID0gbmxhX2F0dHJfc2l6ZShhdHRybGVuKTsKLQotCW1lbXNldCgodW5zaWduZWQgY2hhciAqKSBubGEgKyBubGEtPm5sYV9sZW4sIDAsIG5sYV9wYWRsZW4oYXR0cmxlbikpOwotCi0JcmV0dXJuIG5sYTsKLX0KLQotLyoqCi0gKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKgotICogUmVzZXJ2ZXMgcm9vbSBmb3IgYXR0cmlidXRlIHBheWxvYWQgd2l0aG91dCBhIGhlYWRlci4KLSAqCi0gKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCi0gKiB0YWlscm9vbSBmb3IgdGhlIHBheWxvYWQuCi0gKi8KLXZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pCi17Ci0Jdm9pZCAqc3RhcnQ7Ci0KLQlzdGFydCA9IHNrYl9wdXQoc2tiLCBOTEFfQUxJR04oYXR0cmxlbikpOwotCW1lbXNldChzdGFydCwgMCwgTkxBX0FMSUdOKGF0dHJsZW4pKTsKLQotCXJldHVybiBzdGFydDsKLX0KLQotLyoqCi0gKiBubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCi0gKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKgotICogQWRkcyBhIG5ldGxpbmsgYXR0cmlidXRlIGhlYWRlciB0byBhIHNvY2tldCBidWZmZXIgYW5kIHJlc2VydmVzCi0gKiByb29tIGZvciB0aGUgcGF5bG9hZCBidXQgZG9lcyBub3QgY29weSBpdC4KLSAqCi0gKiBSZXR1cm5zIE5VTEwgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCi0gKiB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC4KLSAqLwotc3RydWN0IG5sYXR0ciAqbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbikKLXsKLQlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCBubGFfdG90YWxfc2l6ZShhdHRybGVuKSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7Ci19Ci0KLS8qKgotICogbmxhX3Jlc2VydmVfbm9oZHIgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb24KLSAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqCi0gKiBSZXNlcnZlcyByb29tIGZvciBhdHRyaWJ1dGUgcGF5bG9hZCB3aXRob3V0IGEgaGVhZGVyLgotICoKLSAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKLSAqIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KLSAqLwotdm9pZCAqbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pCi17Ci0JaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgTkxBX0FMSUdOKGF0dHJsZW4pKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOwotfQotCi0vKioKLSAqIF9fbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCi0gKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2gKLSAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC4KLSAqLwotdm9pZCBfX25sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwKLQkJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbmxhdHRyICpubGE7Ci0KLQlubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOwotCW1lbWNweShubGFfZGF0YShubGEpLCBkYXRhLCBhdHRybGVuKTsKLX0KLQotLyoqCi0gKiBfX25sYV9wdXRfbm9oZHIgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2gKLSAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIHBheWxvYWQuCi0gKi8KLXZvaWQgX19ubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQotewotCXZvaWQgKnN0YXJ0OwotCi0Jc3RhcnQgPSBfX25sYV9yZXNlcnZlX25vaGRyKHNrYiwgYXR0cmxlbik7Ci0JbWVtY3B5KHN0YXJ0LCBkYXRhLCBhdHRybGVuKTsKLX0KLQotLyoqCi0gKiBubGFfcHV0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCi0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KLSAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKLSAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKgotICogUmV0dXJucyAtRU1TR1NJWkUgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCi0gKiB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC4KLSAqLwotaW50IG5sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCBubGFfdG90YWxfc2l6ZShhdHRybGVuKSkpCi0JCXJldHVybiAtRU1TR1NJWkU7Ci0KLQlfX25sYV9wdXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCi0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KLSAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKgotICogUmV0dXJucyAtRU1TR1NJWkUgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCi0gKiB0aGUgYXR0cmlidXRlIHBheWxvYWQuCi0gKi8KLWludCBubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQotewotCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IE5MQV9BTElHTihhdHRybGVuKSkpCi0JCXJldHVybiAtRU1TR1NJWkU7Ci0KLQlfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBubGFfYXBwZW5kIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIgb3IgcGFkZGluZwotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIFJldHVybnMgLUVNU0dTSVpFIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQotICogdGhlIGF0dHJpYnV0ZSBwYXlsb2FkLgotICovCi1pbnQgbmxhX2FwcGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCBOTEFfQUxJR04oYXR0cmxlbikpKQotCQlyZXR1cm4gLUVNU0dTSVpFOwotCi0JbWVtY3B5KHNrYl9wdXQoc2tiLCBhdHRybGVuKSwgZGF0YSwgYXR0cmxlbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0wobmxhX3ZhbGlkYXRlKTsKLUVYUE9SVF9TWU1CT0wobmxhX3BhcnNlKTsKLUVYUE9SVF9TWU1CT0wobmxhX2ZpbmQpOwotRVhQT1JUX1NZTUJPTChubGFfc3RybGNweSk7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpOwotRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlX25vaGRyKTsKLUVYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmUpOwotRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3B1dCk7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3B1dF9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKG5sYV9wdXQpOwotRVhQT1JUX1NZTUJPTChubGFfcHV0X25vaGRyKTsKLUVYUE9SVF9TWU1CT0wobmxhX21lbWNweSk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9tZW1jbXApOwotRVhQT1JUX1NZTUJPTChubGFfc3RyY21wKTsKLUVYUE9SVF9TWU1CT0wobmxhX2FwcGVuZCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCBlOWMwNWI4Zi4uNGU3MDVmOCAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC0xMDgyLDcgKzEwODIsMTEgQEAKIAogCVNPQ0tfREVCVUcoc2ssICJORVQvUk9NOiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC5cbiIpOwogCi0JLyogQnVpbGQgYSBwYWNrZXQgKi8KKwkvKiBCdWlsZCBhIHBhY2tldCAtIHRoZSBjb252ZW50aW9uYWwgdXNlciBsaW1pdCBpcyAyMzYgYnl0ZXMuIFdlIGNhbgorCSAgIGRvIGx1ZGljcm91c2x5IGxhcmdlIE5ldFJPTSBmcmFtZXMgYnV0IG11c3Qgbm90IG92ZXJmbG93ICovCisJaWYgKGxlbiA+IDY1NTM2KQorCQlyZXR1cm4gLUVNU0dTSVpFOworCiAJU09DS19ERUJVRyhzaywgIk5FVC9ST006IHNlbmR0bzogYnVpbGRpbmcgcGFja2V0LlxuIik7CiAJc2l6ZSA9IGxlbiArIE5SX05FVFdPUktfTEVOICsgTlJfVFJBTlNQT1JUX0xFTjsKIApAQCAtMTQzMiw3ICsxNDM2LDcgQEAKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCQlzcHJpbnRmKG5hbWUsICJuciVkIiwgaSk7Ci0JCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IG5yX3ByaXZhdGUpLCBuYW1lLCBucl9zZXR1cCk7CisJCWRldiA9IGFsbG9jX25ldGRldigwLCBuYW1lLCBucl9zZXR1cCk7CiAJCWlmICghZGV2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk5FVC9ST006IG5yX3Byb3RvX2luaXQgLSB1bmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlIHN0cnVjdHVyZVxuIik7CiAJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL25yX2Rldi5jIGIvbmV0L25ldHJvbS9ucl9kZXYuYwppbmRleCA2Y2FmNDU5Li4zNTEzNzI0IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL25yX2Rldi5jCisrKyBiL25ldC9uZXRyb20vbnJfZGV2LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogaW50IG5yX3J4X2lwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXN0YXRzLT5yeF9kcm9wcGVkKys7CkBAIC0xNzEsOCArMTcxLDcgQEAKIAogc3RhdGljIGludCBucl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5yX3ByaXZhdGUgKm5yID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbnItPnN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKIAogCWlmICghbnJfcm91dGVfZnJhbWUoc2tiLCBOVUxMKSkgewpAQCAtMTg3LDM0ICsxODYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpucl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbnJfcHJpdmF0ZSAqbnIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZuci0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBucl9oZWFkZXJfb3BzID0gewogCS5jcmVhdGUJPSBucl9oZWFkZXIsCiAJLnJlYnVpbGQ9IG5yX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBucl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBucl9vcGVuLAorCS5uZG9fc3RvcAkJPSBucl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbnJfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IG5yX3NldF9tYWNfYWRkcmVzcywKK307CiAKIHZvaWQgbnJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm10dQkJPSBOUl9NQVhfUEFDS0VUX1NJWkU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBucl94bWl0OwotCWRldi0+b3BlbgkJPSBucl9vcGVuOwotCWRldi0+c3RvcAkJPSBucl9jbG9zZTsKLQorCWRldi0+bmV0ZGV2X29wcwkJPSAmbnJfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJm5yX2hlYWRlcl9vcHM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBOUl9ORVRXT1JLX0xFTiArIE5SX1RSQU5TUE9SVF9MRU47CiAJZGV2LT5hZGRyX2xlbgkJPSBBWDI1X0FERFJfTEVOOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfTkVUUk9NOwotCWRldi0+c2V0X21hY19hZGRyZXNzICAgID0gbnJfc2V0X21hY19hZGRyZXNzOwogCiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOwotCi0JZGV2LT5nZXRfc3RhdHMgCQk9IG5yX2dldF9zdGF0czsKIH0KZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDFmYzRhNzguLjc0Nzc2ZGUgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtNTg0LDcgKzU4NCw3IEBACiAJCXNrYi0+bGVuID0gc2tiX2xlbjsKIAl9CiBkcm9wOgotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1Niw4ICs3NTYsNyBAQAogCXNwaW5fdW5sb2NrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKIAogCXNrLT5za19kYXRhX3JlYWR5KHNrLCAwKTsKLQlpZiAoY29weV9za2IpCi0JCWtmcmVlX3NrYihjb3B5X3NrYik7CisJa2ZyZWVfc2tiKGNvcHlfc2tiKTsKIAlnb3RvIGRyb3Bfbl9yZXN0b3JlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwppbmRleCAxM2NiMzIzLi5hNjYyZTYyIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCisrKyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKQEAgLTI3NSw4ICsyNzUsNiBAQAogCQlyZXR1cm4gMDsKIAogCXBoID0gcG5faGRyKHNrYik7Ci0JaWYgKHBob25ldF9hZGRyZXNzX2dldChza2ItPmRldiwgcGgtPnBuX3JkZXYpICE9IHBoLT5wbl9yZGV2KQotCQlyZXR1cm4gMDsgLyogd2UgYXJlIG5vdCB0aGUgZGVzdGluYXRpb24gKi8KIAlpZiAocGgtPnBuX3JlcyA9PSBQTl9QUkVGSVggJiYgIXBza2JfbWF5X3B1bGwoc2tiLCA1KSkKIAkJcmV0dXJuIDA7CiAJaWYgKHBoLT5wbl9yZXMgPT0gUE5fQ09NTUdSKSAvKiBpbmRpY2F0aW9ucyAqLwpAQCAtMzQ0LDggKzM0Miw4IEBACiAJCQlzdHJ1Y3QgcGFja2V0X3R5cGUgKnBrdHR5cGUsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBwaG9uZXRoZHIgKnBoOwotCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3Qgc29ja2FkZHJfcG4gc2E7CiAJdTE2IGxlbjsKIApAQCAtMzY0LDI5ICszNjIsMjggQEAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJcG5fc2tiX2dldF9kc3Rfc29ja2FkZHIoc2tiLCAmc2EpOwotCWlmIChwbl9zb2NrYWRkcl9nZXRfYWRkcigmc2EpID09IDApCi0JCWdvdG8gb3V0OyAvKiBjdXJyZW50bHksIHdlIGNhbm5vdCBiZSBkZXZpY2UgMCAqLwogCi0Jc2sgPSBwbl9maW5kX3NvY2tfYnlfc2EoZGV2X25ldChkZXYpLCAmc2EpOwotCWlmIChzayA9PSBOVUxMKSB7CisJLyogY2hlY2sgaWYgd2UgYXJlIHRoZSBkZXN0aW5hdGlvbiAqLworCWlmIChwaG9uZXRfYWRkcmVzc19sb29rdXAobmV0LCBwbl9zb2NrYWRkcl9nZXRfYWRkcigmc2EpKSA9PSAwKSB7CisJCS8qIFBob25ldCBwYWNrZXQgaW5wdXQgKi8KKwkJc3RydWN0IHNvY2sgKnNrID0gcG5fZmluZF9zb2NrX2J5X3NhKG5ldCwgJnNhKTsKKworCQlpZiAoc2spCisJCQlyZXR1cm4gc2tfcmVjZWl2ZV9za2Ioc2ssIHNrYiwgMCk7CisKIAkJaWYgKGNhbl9yZXNwb25kKHNrYikpIHsKIAkJCXNlbmRfb2JqX3VucmVhY2hhYmxlKHNrYik7CiAJCQlzZW5kX3Jlc2V0X2luZGljYXRpb25zKHNrYik7CiAJCX0KLQkJZ290byBvdXQ7CiAJfQogCi0JLyogUHVzaCBkYXRhIHRvIHRoZSBzb2NrZXQgKG9yIG90aGVyIHNvY2tldHMgY29ubmVjdGVkIHRvIGl0KS4gKi8KLQlyZXR1cm4gc2tfcmVjZWl2ZV9za2Ioc2ssIHNrYiwgMCk7Ci0KIG91dDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcGhvbmV0X3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QSE9ORVQpLAotCS5kZXYgPSBOVUxMLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwaG9uZXRfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1BIT05FVCksCiAJLmZ1bmMgPSBwaG9uZXRfcmN2LAogfTsKIApAQCAtNDI4LDE2ICs0MjUsMTggQEAKIHsKIAlpbnQgZXJyOwogCisJZXJyID0gcGhvbmV0X2RldmljZV9pbml0KCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IHNvY2tfcmVnaXN0ZXIoJnBob25ldF9wcm90b19mYW1pbHkpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQKIAkJCSJwaG9uZXQgcHJvdG9jb2wgZmFtaWx5IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX3NvY2s7CiAJfQogCi0JcGhvbmV0X2RldmljZV9pbml0KCk7CiAJZGV2X2FkZF9wYWNrKCZwaG9uZXRfcGFja2V0X3R5cGUpOwotCXBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKCk7CiAJcGhvbmV0X3N5c2N0bF9pbml0KCk7CiAKIAllcnIgPSBpc2lfcmVnaXN0ZXIoKTsKQEAgLTQ0OSw2ICs0NDgsNyBAQAogCXBob25ldF9zeXNjdGxfZXhpdCgpOwogCXNvY2tfdW5yZWdpc3RlcihQRl9QSE9ORVQpOwogCWRldl9yZW1vdmVfcGFjaygmcGhvbmV0X3BhY2tldF90eXBlKTsKK2Vycl9zb2NrOgogCXBob25ldF9kZXZpY2VfZXhpdCgpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX2Rldi5jIGIvbmV0L3Bob25ldC9wbl9kZXYuYwppbmRleCA1NDkxYmY1Li44MGEzMjJkIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX2Rldi5jCisrKyBiL25ldC9waG9uZXQvcG5fZGV2LmMKQEAgLTI4LDMyICsyOCw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bob25ldC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvcGhvbmV0L3BuX2Rldi5oPgogCi0vKiB3aGVuIGFjY2Vzc2luZywgcmVtZW1iZXIgdG8gbG9jayB3aXRoIHNwaW5fbG9jaygmcG5kZXZzLmxvY2spOyAqLwotc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCBwbmRldnMgPSB7Ci0JLmxpc3QgPSBMSVNUX0hFQURfSU5JVChwbmRldnMubGlzdCksCi0JLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChwbmRldnMubG9jayksCitzdHJ1Y3QgcGhvbmV0X25ldCB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCBwbmRldnM7CiB9OwogCitpbnQgcGhvbmV0X25ldF9pZDsKKworc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcGhvbmV0X2RldmljZV9saXN0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0gbmV0X2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkKTsKKwlyZXR1cm4gJnBubi0+cG5kZXZzOworfQorCiAvKiBBbGxvY2F0ZSBuZXcgUGhvbmV0IGRldmljZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgcGhvbmV0X2RldmljZSAqX19waG9uZXRfZGV2aWNlX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZCA9IGttYWxsb2Moc2l6ZW9mKCpwbmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAocG5kID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXBuZC0+bmV0ZGV2ID0gZGV2OwogCWJpdG1hcF96ZXJvKHBuZC0+YWRkcnMsIDY0KTsKIAotCWxpc3RfYWRkKCZwbmQtPmxpc3QsICZwbmRldnMubGlzdCk7CisJbGlzdF9hZGQoJnBuZC0+bGlzdCwgJnBuZGV2cy0+bGlzdCk7CiAJcmV0dXJuIHBuZDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaG9uZXRfZGV2aWNlICpfX3Bob25ldF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCWlmIChwbmQtPm5ldGRldiA9PSBkZXYpCiAJCQlyZXR1cm4gcG5kOwogCX0KQEAgLTY4LDMyICs3NywzMyBAQAogCiBzdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X2RldmljZV9nZXQoc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChuZXQpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJZGV2ID0gcG5kLT5uZXRkZXY7CiAJCUJVR19PTighZGV2KTsKIAotCQlpZiAobmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSAmJgotCQkJKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKSAmJgorCQlpZiAoKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKSAmJgogCQkJKChwbmQtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSA9PSBJRkZfVVApCiAJCQlicmVhazsKIAkJZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldikKIAkJZGV2X2hvbGQoZGV2KTsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBkZXY7CiB9CiAKIGludCBwaG9uZXRfYWRkcmVzc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCWludCBlcnIgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCS8qIEZpbmQgb3IgY3JlYXRlIFBob25ldC1zcGVjaWZpYyBkZXZpY2UgZGF0YSAqLwogCXBuZCA9IF9fcGhvbmV0X2dldChkZXYpOwogCWlmIChwbmQgPT0gTlVMTCkKQEAgLTEwMiwzMSArMTEyLDMzIEBACiAJCWVyciA9IC1FTk9NRU07CiAJZWxzZSBpZiAodGVzdF9hbmRfc2V0X2JpdChhZGRyID4+IDIsIHBuZC0+YWRkcnMpKQogCQllcnIgPSAtRUVYSVNUOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAogaW50IHBob25ldF9hZGRyZXNzX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJaWYgKCFwbmQgfHwgIXRlc3RfYW5kX2NsZWFyX2JpdChhZGRyID4+IDIsIHBuZC0+YWRkcnMpKQogCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAllbHNlIGlmIChiaXRtYXBfZW1wdHkocG5kLT5hZGRycywgNjQpKQogCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAogLyogR2V0cyBhIHNvdXJjZSBhZGRyZXNzIHRvd2FyZCBhIGRlc3RpbmF0aW9uLCB0aHJvdWdoIGEgaW50ZXJmYWNlLiAqLwogdTggcGhvbmV0X2FkZHJlc3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAlpZiAocG5kKSB7CiAJCUJVR19PTihiaXRtYXBfZW1wdHkocG5kLT5hZGRycywgNjQpKTsKQEAgLTEzNiwzMCArMTQ4LDMxIEBACiAJCQlhZGRyID0gZmluZF9maXJzdF9iaXQocG5kLT5hZGRycywgNjQpIDw8IDI7CiAJfSBlbHNlCiAJCWFkZHIgPSBQTl9OT19BRERSOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGFkZHI7CiB9CiAKIGludCBwaG9uZXRfYWRkcmVzc19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChuZXQpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CisJaW50IGVyciA9IC1FQUREUk5PVEFWQUlMOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgewotCQlpZiAoIW5ldF9lcShkZXZfbmV0KHBuZC0+bmV0ZGV2KSwgbmV0KSkKLQkJCWNvbnRpbnVlOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQkvKiBEb24ndCBhbGxvdyB1bnJlZ2lzdGVyaW5nIGRldmljZXMhICovCiAJCWlmICgocG5kLT5uZXRkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgfHwKIAkJCQkoKHBuZC0+bmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpICE9IElGRl9VUCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh0ZXN0X2JpdChhZGRyID4+IDIsIHBuZC0+YWRkcnMpKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOwotCQkJcmV0dXJuIDA7CisJCQllcnIgPSAwOworCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOwotCXJldHVybiAtRUFERFJOT1RBVkFJTDsKK2ZvdW5kOgorCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCXJldHVybiBlcnI7CiB9CiAKIC8qIG5vdGlmeSBQaG9uZXQgb2YgZGV2aWNlIGV2ZW50cyAqLwpAQCAtMTY5LDE0ICsxODIsMTYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOwogCiAJaWYgKHdoYXQgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKKwkJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzOwogCQlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCiAJCS8qIERlc3Ryb3kgcGhvbmV0LXNwZWNpZmljIGRldmljZSBkYXRhICovCi0JCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCQlwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKKwkJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCQlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAkJaWYgKHBuZCkKIAkJCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCX0KIAlyZXR1cm4gMDsKIApAQCAtMTg3LDI0ICsyMDIsNTIgQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotLyogSW5pdGlhbGl6ZSBQaG9uZXQgZGV2aWNlcyBsaXN0ICovCi12b2lkIHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKQorLyogUGVyLW5hbWVzcGFjZSBQaG9uZXQgZGV2aWNlcyBoYW5kbGluZyAqLworc3RhdGljIGludCBwaG9uZXRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCBwaG9uZXRfbmV0ICpwbm4gPSBrbWFsbG9jKHNpemVvZigqcG5uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbm4pCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJnBubi0+cG5kZXZzLmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZwbm4tPnBuZGV2cy5sb2NrKTsKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkLCBwbm4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwaG9uZXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBwaG9uZXRfbmV0ICpwbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBob25ldF9uZXRfaWQpOworCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBuZCwgbiwgJnBubi0+cG5kZXZzLmxpc3QsIGxpc3QpCisJCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7CisKKwlrZnJlZShwbm4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBob25ldF9uZXRfb3BzID0geworCS5pbml0ID0gcGhvbmV0X2luaXRfbmV0LAorCS5leGl0ID0gcGhvbmV0X2V4aXRfbmV0LAorfTsKKworLyogSW5pdGlhbGl6ZSBQaG9uZXQgZGV2aWNlcyBsaXN0ICovCitpbnQgX19pbml0IHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcGhvbmV0X25ldF9pZCwgJnBob25ldF9uZXRfb3BzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwaG9uZXRfZGV2aWNlX25vdGlmaWVyKTsKKwllcnIgPSBwaG9uZXRfbmV0bGlua19yZWdpc3RlcigpOworCWlmIChlcnIpCisJCXBob25ldF9kZXZpY2VfZXhpdCgpOworCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcGhvbmV0X2RldmljZV9leGl0KHZvaWQpCiB7Ci0Jc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZCwgKm47Ci0KIAlydG5sX3VucmVnaXN0ZXJfYWxsKFBGX1BIT05FVCk7Ci0JcnRubF9sb2NrKCk7Ci0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG5kLCBuLCAmcG5kZXZzLmxpc3QsIGxpc3QpCi0JCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7Ci0KLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOwotCXJ0bmxfdW5sb2NrKCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBob25ldF9kZXZpY2Vfbm90aWZpZXIpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocGhvbmV0X25ldF9pZCwgJnBob25ldF9uZXRfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcG5fbmV0bGluay5jIGIvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMKaW5kZXggMjQyZmU4Zi4uY2VjNGU1OSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMKKysrIGIvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMKQEAgLTQ3LDggKzQ3LDkgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIGRldl9uZXQoZGV2KSwgMCwKLQkJCSAgUlROTEdSUF9QSE9ORVRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIGRldl9uZXQoZGV2KSwgMCwKKwkJICAgIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoZGV2X25ldChkZXYpLCBSVE5MR1JQX1BIT05FVF9JRkFERFIsIGVycik7CkBAIC0xMjMsMTcgKzEyNCwxNiBAQAogCiBzdGF0aWMgaW50IGdldGFkZHJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnM7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAlpbnQgZGV2X2lkeCA9IDAsIGRldl9zdGFydF9pZHggPSBjYi0+YXJnc1swXTsKIAlpbnQgYWRkcl9pZHggPSAwLCBhZGRyX3N0YXJ0X2lkeCA9IGNiLT5hcmdzWzFdOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgeworCXBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChzb2NrX25ldChza2ItPnNrKSk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCXU4IGFkZHI7CiAKLQkJaWYgKCFuZXRfZXEoZGV2X25ldChwbmQtPm5ldGRldiksIG5ldCkpCi0JCQljb250aW51ZTsKIAkJaWYgKGRldl9pZHggPiBkZXZfc3RhcnRfaWR4KQogCQkJYWRkcl9zdGFydF9pZHggPSAwOwogCQlpZiAoZGV2X2lkeCsrIDwgZGV2X3N0YXJ0X2lkeCkKQEAgLTE1MywxNiArMTUzLDIxIEBACiAJfQogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAljYi0+YXJnc1swXSA9IGRldl9pZHg7CiAJY2ItPmFyZ3NbMV0gPSBhZGRyX2lkeDsKIAogCXJldHVybiBza2ItPmxlbjsKIH0KIAotdm9pZCBfX2luaXQgcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIodm9pZCkKK2ludCBfX2luaXQgcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIodm9pZCkKIHsKLQlydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX05FV0FERFIsIGFkZHJfZG9pdCwgTlVMTCk7Ci0JcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ERUxBRERSLCBhZGRyX2RvaXQsIE5VTEwpOwotCXJ0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fR0VUQUREUiwgTlVMTCwgZ2V0YWRkcl9kdW1waXQpOworCWludCBlcnIgPSBfX3J0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fTkVXQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRnVydGhlciBfX3J0bmxfcmVnaXN0ZXIoKSBjYW5ub3QgZmFpbCAqLworCV9fcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ERUxBRERSLCBhZGRyX2RvaXQsIE5VTEwpOworCV9fcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9HRVRBRERSLCBOVUxMLCBnZXRhZGRyX2R1bXBpdCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvcmRzL0tjb25maWcgYi9uZXQvcmRzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2NzczYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACisKK2NvbmZpZyBSRFMKKwl0cmlzdGF0ZSAiUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUkRTKSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElORVQgJiYgSU5GSU5JQkFORF9JUE9JQiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElORklOSUJBTkQgJiYgSU5GSU5JQkFORF9BRERSX1RSQU5TCisJLS0taGVscC0tLQorCSAgUkRTIHByb3ZpZGVzIHJlbGlhYmxlLCBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgZGF0YWdyYW1zCisJICBvdmVyIEluZmluaWJhbmQuCisKK2NvbmZpZyBSRFNfREVCVUcKKyAgICAgICAgYm9vbCAiRGVidWdnaW5nIG1lc3NhZ2VzIgorCWRlcGVuZHMgb24gUkRTCisgICAgICAgIGRlZmF1bHQgbgorCmRpZmYgLS1naXQgYS9uZXQvcmRzL01ha2VmaWxlIGIvbmV0L3Jkcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWYyNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitvYmotJChDT05GSUdfUkRTKSArPSByZHMubworcmRzLXkgOj0JYWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFwKKwkJCXJlY3YubyBzZW5kLm8gc3RhdHMubyBzeXNjdGwubyB0aHJlYWRzLm8gdHJhbnNwb3J0Lm8gXAorCQkJbG9vcC5vIHBhZ2UubyByZG1hLm8gXAorCQkJcmRtYV90cmFuc3BvcnQubyBcCisJCQlpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcCisJCQlpYl9zeXNjdGwubyBpYl9yZG1hLm8gXAorCQkJaXcubyBpd19jbS5vIGl3X3JlY3YubyBpd19yaW5nLm8gaXdfc2VuZC5vIGl3X3N0YXRzLm8gXAorCQkJaXdfc3lzY3RsLm8gaXdfcmRtYS5vCisKK2lmZXEgKCQoQ09ORklHX1JEU19ERUJVRyksIHkpCitFWFRSQV9DRkxBR1MgKz0gLURERUJVRworZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9hZl9yZHMuYyBiL25ldC9yZHMvYWZfcmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjZjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworLyogdGhpcyBpcyBqdXN0IHVzZWQgZm9yIHN0YXRzIGdhdGhlcmluZyA6LyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfc29ja19sb2NrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zb2NrX2NvdW50Oworc3RhdGljIExJU1RfSEVBRChyZHNfc29ja19saXN0KTsKK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19wb2xsX3dhaXRxKTsKKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGFzIHRoZSBmaW5hbCBkZXNjcmlwdG9yIHJlZmVyZW5jaW5nIHRoaXMgc29ja2V0IGlzIGNsb3NlZC4KKyAqIFdlIGhhdmUgdG8gdW5iaW5kIHRoZSBzb2NrZXQgc28gdGhhdCBhbm90aGVyIHNvY2tldCBjYW4gYmUgYm91bmQgdG8gdGhlCisgKiBhZGRyZXNzIGl0IHdhcyB1c2luZy4KKyAqCisgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgcmFjaW5nIHdpdGggdGhlIGluY29taW5nIHBhdGguICBzb2NrX29ycGhhbigpCisgKiBzZXRzIFNPQ0tfREVBRCBhbmQgd2UgdXNlIHRoYXQgYXMgYW4gaW5kaWNhdG9yIHRvIHRoZSByeCBwYXRoIHRoYXQgbmV3CisgKiBtZXNzYWdlcyBzaG91bGRuJ3QgYmUgcXVldWVkLgorICovCitzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNrID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcnMgPSByZHNfc2tfdG9fcnMoc2spOworCisJc29ja19vcnBoYW4oc2spOworCS8qIE5vdGUgLSByZHNfY2xlYXJfcmVjdl9xdWV1ZSBncmFicyByc19yZWN2X2xvY2ssIHNvCisJICogdGhhdCBlbnN1cmVzIHRoZSByZWN2IHBhdGggaGFzIGNvbXBsZXRlZCBtZXNzaW5nCisJICogd2l0aCB0aGUgc29ja2V0LiAqLworCXJkc19jbGVhcl9yZWN2X3F1ZXVlKHJzKTsKKwlyZHNfY29uZ19yZW1vdmVfc29ja2V0KHJzKTsKKwlyZHNfcmVtb3ZlX2JvdW5kKHJzKTsKKwlyZHNfc2VuZF9kcm9wX3RvKHJzLCBOVUxMKTsKKwlyZHNfcmRtYV9kcm9wX2tleXMocnMpOworCXJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBOVUxMKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmcnMtPnJzX2l0ZW0pOworCXJkc19zb2NrX2NvdW50LS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJc29jay0+c2sgPSBOVUxMOworCXNvY2tfcHV0KHNrKTsKK291dDoKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhcmVmdWwgbm90IHRvIHJhY2Ugd2l0aCByZHNfcmVsZWFzZSAtPiBzb2NrX29ycGhhbiB3aGljaCBjbGVhcnMgc2tfc2xlZXAuCisgKiBfYmgoKSBpc24ndCBPSyBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuICBJdCdzIHByb2JhYmx5IE9LCisgKiB0byB3YWtlIHRoZSB3YWl0cXVldWUgYWZ0ZXIgc2tfc2xlZXAgaXMgY2xlYXIgYXMgd2UgaG9sZCBhIHNvY2sgcmVmLCBidXQKKyAqIHRoaXMgc2VlbXMgbW9yZSBjb25zZXJ2YXRpdmUuCisgKiBOQiAtIG5vcm1hbGx5LCBvbmUgd291bGQgdXNlIHNrX2NhbGxiYWNrX2xvY2sgZm9yIHRoaXMsIGJ1dCB3ZSBjYW4KKyAqIGdldCBoZXJlIGZyb20gaW50ZXJydXB0cywgd2hlcmVhcyB0aGUgbmV0d29yayBjb2RlIGdyYWJzIHNrX2NhbGxiYWNrX2xvY2sKKyAqIHdpdGggX2xvY2tfYmggb25seSAtIHNvIHJlbHlpbmcgb24gc2tfY2FsbGJhY2tfbG9jayBpbnRyb2R1Y2VzIGxpdmVsb2Nrcy4KKyAqLwordm9pZCByZHNfd2FrZV9za19zbGVlcChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCV9fcmRzX3dha2Vfc2tfc2xlZXAocmRzX3JzX3RvX3NrKHJzKSk7CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHJkc19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCSAgICAgICBpbnQgKnVhZGRyX2xlbiwgaW50IHBlZXIpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzb2NrLT5zayk7CisKKwltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKKworCS8qIHJhY2V5LCBkb24ndCBjYXJlICovCisJaWYgKHBlZXIpIHsKKwkJaWYgKCFycy0+cnNfY29ubl9hZGRyKQorCQkJcmV0dXJuIC1FTk9UQ09OTjsKKworCQlzaW4tPnNpbl9wb3J0ID0gcnMtPnJzX2Nvbm5fcG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBycy0+cnNfY29ubl9hZGRyOworCX0gZWxzZSB7CisJCXNpbi0+c2luX3BvcnQgPSBycy0+cnNfYm91bmRfcG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBycy0+cnNfYm91bmRfYWRkcjsKKwl9CisKKwlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisJKnVhZGRyX2xlbiA9IHNpemVvZigqc2luKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJEUycgcG9sbCBpcyB3aXRob3V0IGEgZG91YnQgdGhlIGxlYXN0IGludHVpdGl2ZSBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UsCisgKiBhcyBQT0xMSU4gYW5kIFBPTExPVVQgZG8gbm90IGJlaGF2ZSBlbnRpcmVseSBhcyB5b3Ugd291bGQgZXhwZWN0IGZyb20KKyAqIGEgbmV0d29yayBwcm90b2NvbC4KKyAqCisgKiBQT0xMSU4gaXMgYXNzZXJ0ZWQgaWYKKyAqICAtCXRoZXJlIGlzIGRhdGEgb24gdGhlIHJlY2VpdmUgcXVldWUuCisgKiAgLQl0byBzaWduYWwgdGhhdCBhIHByZXZpb3VzbHkgY29uZ2VzdGVkIGRlc3RpbmF0aW9uIG1heSBoYXZlIGJlY29tZQorICoJdW5jb25nZXN0ZWQKKyAqICAtCUEgbm90aWZpY2F0aW9uIGhhcyBiZWVuIHF1ZXVlZCB0byB0aGUgc29ja2V0ICh0aGlzIGNhbiBiZSBhIGNvbmdlc3Rpb24KKyAqCXVwZGF0ZSwgb3IgYSBSRE1BIGNvbXBsZXRpb24pLgorICoKKyAqIFBPTExPVVQgaXMgYXNzZXJ0ZWQgaWYgdGhlcmUgaXMgcm9vbSBvbiB0aGUgc2VuZCBxdWV1ZS4gVGhpcyBkb2VzIG5vdCBtZWFuCisgKiBob3dldmVyLCB0aGF0IHRoZSBuZXh0IHNlbmRtc2coKSBjYWxsIHdpbGwgc3VjY2VlZC4gSWYgdGhlIGFwcGxpY2F0aW9uIHRyaWVzCisgKiB0byBzZW5kIHRvIGEgY29uZ2VzdGVkIGRlc3RpbmF0aW9uLCB0aGUgc3lzdGVtIGNhbGwgbWF5IHN0aWxsIGZhaWwgKGFuZAorICogcmV0dXJuIEVOT0JVRlMpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgICBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9sbF93YWl0KGZpbGUsIHNrLT5za19zbGVlcCwgd2FpdCk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJnJkc19wb2xsX3dhaXRxLCB3YWl0KTsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFycy0+cnNfY29uZ19tb25pdG9yKSB7CisJCS8qIFdoZW4gYSBjb25nZXN0aW9uIG1hcCB3YXMgdXBkYXRlZCwgd2Ugc2lnbmFsIFBPTExJTiBmb3IKKwkJICogImhpc3RvcmljYWwiIHJlYXNvbnMuIEFwcGxpY2F0aW9ucyBjYW4gYWxzbyBwb2xsIGZvcgorCQkgKiBXUkJBTkQgaW5zdGVhZC4gKi8KKwkJaWYgKHJkc19jb25nX3VwZGF0ZWRfc2luY2UoJnJzLT5yc19jb25nX3RyYWNrKSkKKwkJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMV1JCQU5EKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJaWYgKHJzLT5yc19jb25nX25vdGlmeSkKKwkJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCX0KKwlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19yZWN2X3F1ZXVlKQorCSB8fCAhbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkpCisJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCWlmIChycy0+cnNfc25kX2J5dGVzIDwgcmRzX3NrX3NuZGJ1ZihycykpCisJCW1hc2sgfD0gKFBPTExPVVQgfCBQT0xMV1JOT1JNKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCByZHNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCByZHNfY2FuY2VsX3NlbnRfdG8oc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCSAgICAgIGludCBsZW4pCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIHJhY2luZyB3aXRoIGFub3RoZXIgdGhyZWFkIGJpbmRpbmcgc2VlbXMgb2sgaGVyZSAqLworCWlmIChycy0+cnNfYm91bmRfYWRkciA9PSAwKSB7CisJCXJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovCisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNpbiwgb3B0dmFsLCBzaXplb2Yoc2luKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX3NlbmRfZHJvcF90byhycywgJnNpbik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfc2V0X2Jvb2xfb3B0aW9uKHVuc2lnbmVkIGNoYXIgKm9wdHZhciwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCSAgICAgICBpbnQgb3B0bGVuKQoreworCWludCB2YWx1ZTsKKworCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGdldF91c2VyKHZhbHVlLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkqb3B0dmFyID0gISF2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfY29uZ19tb25pdG9yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgICAgaW50IG9wdGxlbikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX3NldF9ib29sX29wdGlvbigmcnMtPnJzX2NvbmdfbW9uaXRvciwgb3B0dmFsLCBvcHRsZW4pOworCWlmIChyZXQgPT0gMCkgeworCQlpZiAocnMtPnJzX2NvbmdfbW9uaXRvcikgeworCQkJcmRzX2NvbmdfYWRkX3NvY2tldChycyk7CisJCX0gZWxzZSB7CisJCQlyZHNfY29uZ19yZW1vdmVfc29ja2V0KHJzKTsKKwkJCXJzLT5yc19jb25nX21hc2sgPSAwOworCQkJcnMtPnJzX2Nvbmdfbm90aWZ5ID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzb2NrLT5zayk7CisJaW50IHJldDsKKworCWlmIChsZXZlbCAhPSBTT0xfUkRTKSB7CisJCXJldCA9IC1FTk9QUk9UT09QVDsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBSRFNfQ0FOQ0VMX1NFTlRfVE86CisJCXJldCA9IHJkc19jYW5jZWxfc2VudF90byhycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19HRVRfTVI6CisJCXJldCA9IHJkc19nZXRfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfRlJFRV9NUjoKKwkJcmV0ID0gcmRzX2ZyZWVfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfUkVDVkVSUjoKKwkJcmV0ID0gcmRzX3NldF9ib29sX29wdGlvbigmcnMtPnJzX3JlY3ZlcnIsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfQ09OR19NT05JVE9SOgorCQlyZXQgPSByZHNfY29uZ19tb25pdG9yKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9QUk9UT09QVDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzb2NrLT5zayk7CisJaW50IHJldCA9IC1FTk9QUk9UT09QVCwgbGVuOworCisJaWYgKGxldmVsICE9IFNPTF9SRFMpCisJCWdvdG8gb3V0OworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJEU19JTkZPX0ZJUlNUIC4uLiBSRFNfSU5GT19MQVNUOgorCQlyZXQgPSByZHNfaW5mb19nZXRzb2Nrb3B0KHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwKKwkJCQkJICBvcHRsZW4pOworCQlicmVhazsKKworCWNhc2UgUkRTX1JFQ1ZFUlI6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UKKwkJaWYgKHB1dF91c2VyKHJzLT5yc19yZWN2ZXJyLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpCisJCSB8fCBwdXRfdXNlcihzaXplb2YoaW50KSwgb3B0bGVuKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworb3V0OgorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIGludCByZHNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkgICAgICAgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJaW50IHJldCA9IDA7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKGFkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQlyZXQgPSAtRUFGTk9TVVBQT1JUOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkpIHsKKwkJcmV0ID0gLUVERVNUQUREUlJFUTsKKwkJZ290byBvdXQ7CisJfQorCisJcnMtPnJzX2Nvbm5fYWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRyOworCXJzLT5yc19jb25uX3BvcnQgPSBzaW4tPnNpbl9wb3J0OworCitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHByb3RvIHJkc19wcm90byA9IHsKKwkubmFtZQkgID0gIlJEUyIsCisJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKKwkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IHJkc19zb2NrKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHJkc19wcm90b19vcHMgPSB7CisJLmZhbWlseSA9CUFGX1JEUywKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVsZWFzZSA9CXJkc19yZWxlYXNlLAorCS5iaW5kID0JCXJkc19iaW5kLAorCS5jb25uZWN0ID0JcmRzX2Nvbm5lY3QsCisJLnNvY2tldHBhaXIgPQlzb2NrX25vX3NvY2tldHBhaXIsCisJLmFjY2VwdCA9CXNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lID0JcmRzX2dldG5hbWUsCisJLnBvbGwgPQkJcmRzX3BvbGwsCisJLmlvY3RsID0JcmRzX2lvY3RsLAorCS5saXN0ZW4gPQlzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24gPQlzb2NrX25vX3NodXRkb3duLAorCS5zZXRzb2Nrb3B0ID0JcmRzX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQgPQlyZHNfZ2V0c29ja29wdCwKKwkuc2VuZG1zZyA9CXJkc19zZW5kbXNnLAorCS5yZWN2bXNnID0JcmRzX3JlY3Ztc2csCisJLm1tYXAgPQkJc29ja19ub19tbWFwLAorCS5zZW5kcGFnZSA9CXNvY2tfbm9fc2VuZHBhZ2UsCit9OworCitzdGF0aWMgaW50IF9fcmRzX2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBwcm90b2NvbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfc29jayAqcnM7CisKKwlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CisJc29jay0+b3BzCQk9ICZyZHNfcHJvdG9fb3BzOworCXNrLT5za19wcm90b2NvbAkJPSBwcm90b2NvbDsKKworCXJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnMtPnJzX2xvY2spOworCXJ3bG9ja19pbml0KCZycy0+cnNfcmVjdl9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX3NlbmRfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfcmVjdl9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19ub3RpZnlfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfY29uZ19saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcnMtPnJzX3JkbWFfbG9jayk7CisJcnMtPnJzX3JkbWFfa2V5cyA9IFJCX1JPT1Q7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJzLT5yc19pdGVtLCAmcmRzX3NvY2tfbGlzdCk7CisJcmRzX3NvY2tfY291bnQrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sKQoreworCXN0cnVjdCBzb2NrICpzazsKKworCWlmIChzb2NrLT50eXBlICE9IFNPQ0tfU0VRUEFDS0VUIHx8IHByb3RvY29sKQorCQlyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsKKworCXNrID0gc2tfYWxsb2MobmV0LCBBRl9SRFMsIEdGUF9BVE9NSUMsICZyZHNfcHJvdG8pOworCWlmICghc2spCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIF9fcmRzX2NyZWF0ZShzb2NrLCBzaywgcHJvdG9jb2wpOworfQorCit2b2lkIHJkc19zb2NrX2FkZHJlZihzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKK30KKwordm9pZCByZHNfc29ja19wdXQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHJkc19mYW1pbHlfb3BzID0geworCS5mYW1pbHkgPQlBRl9SRFMsCisJLmNyZWF0ZSA9CXJkc19jcmVhdGUsCisJLm93bmVyCT0JVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgdm9pZCByZHNfc29ja19pbmNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IHJkc19pbmNvbWluZyAqaW5jOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKworCWxlbiAvPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnMsICZyZHNfc29ja19saXN0LCByc19pdGVtKSB7CisJCXNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwkJcmVhZF9sb2NrKCZycy0+cnNfcmVjdl9sb2NrKTsKKworCQkvKiBYWFggdG9vIGxhenkgdG8gbWFpbnRhaW4gY291bnRzLi4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmMsICZycy0+cnNfcmVjdl9xdWV1ZSwgaV9pdGVtKSB7CisJCQl0b3RhbCsrOworCQkJaWYgKHRvdGFsIDw9IGxlbikKKwkJCQlyZHNfaW5jX2luZm9fY29weShpbmMsIGl0ZXIsIGluYy0+aV9zYWRkciwKKwkJCQkJCSAgcnMtPnJzX2JvdW5kX2FkZHIsIDEpOworCQl9CisKKwkJcmVhZF91bmxvY2soJnJzLT5yc19yZWN2X2xvY2spOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCWxlbnMtPm5yID0gdG90YWw7CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19zb2NrX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fc29ja2V0IHNpbmZvOworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxlbiAvPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX3NvY2tldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJaWYgKGxlbiA8IHJkc19zb2NrX2NvdW50KQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnMsICZyZHNfc29ja19saXN0LCByc19pdGVtKSB7CisJCXNpbmZvLnNuZGJ1ZiA9IHJkc19za19zbmRidWYocnMpOworCQlzaW5mby5yY3ZidWYgPSByZHNfc2tfcmN2YnVmKHJzKTsKKwkJc2luZm8uYm91bmRfYWRkciA9IHJzLT5yc19ib3VuZF9hZGRyOworCQlzaW5mby5jb25uZWN0ZWRfYWRkciA9IHJzLT5yc19jb25uX2FkZHI7CisJCXNpbmZvLmJvdW5kX3BvcnQgPSBycy0+cnNfYm91bmRfcG9ydDsKKwkJc2luZm8uY29ubmVjdGVkX3BvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlzaW5mby5pbnVtID0gc29ja19pX2lubyhyZHNfcnNfdG9fc2socnMpKTsKKworCQlyZHNfaW5mb19jb3B5KGl0ZXIsICZzaW5mbywgc2l6ZW9mKHNpbmZvKSk7CisJfQorCitvdXQ6CisJbGVucy0+bnIgPSByZHNfc29ja19jb3VudDsKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19zb2NrZXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcmRzX2V4aXQodm9pZCkKK3sKKwlyZHNfcmRtYV9leGl0KCk7CisJc29ja191bnJlZ2lzdGVyKHJkc19mYW1pbHlfb3BzLmZhbWlseSk7CisJcHJvdG9fdW5yZWdpc3RlcigmcmRzX3Byb3RvKTsKKwlyZHNfY29ubl9leGl0KCk7CisJcmRzX2NvbmdfZXhpdCgpOworCXJkc19zeXNjdGxfZXhpdCgpOworCXJkc190aHJlYWRzX2V4aXQoKTsKKwlyZHNfc3RhdHNfZXhpdCgpOworCXJkc19wYWdlX2V4aXQoKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU09DS0VUUywgcmRzX3NvY2tfaW5mbyk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMsIHJkc19zb2NrX2luY19pbmZvKTsKK30KK21vZHVsZV9leGl0KHJkc19leGl0KTsKKworc3RhdGljIGludCBfX2luaXQgcmRzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX2Nvbm5faW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCXJldCA9IHJkc190aHJlYWRzX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jb25uOworCXJldCA9IHJkc19zeXNjdGxfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3RocmVhZHM7CisJcmV0ID0gcmRzX3N0YXRzX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisJcmV0ID0gcHJvdG9fcmVnaXN0ZXIoJnJkc19wcm90bywgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3RhdHM7CisJcmV0ID0gc29ja19yZWdpc3RlcigmcmRzX2ZhbWlseV9vcHMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3Byb3RvOworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TT0NLRVRTLCByZHNfc29ja19pbmZvKTsKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMsIHJkc19zb2NrX2luY19pbmZvKTsKKworCS8qIGliL2l3YXJwIHRyYW5zcG9ydHMgY3VycmVudGx5IGNvbXBpbGVkLWluICovCisJcmV0ID0gcmRzX3JkbWFfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NvY2s7CisJZ290byBvdXQ7CisKK291dF9zb2NrOgorCXNvY2tfdW5yZWdpc3RlcihyZHNfZmFtaWx5X29wcy5mYW1pbHkpOworb3V0X3Byb3RvOgorCXByb3RvX3VucmVnaXN0ZXIoJnJkc19wcm90byk7CitvdXRfc3RhdHM6CisJcmRzX3N0YXRzX2V4aXQoKTsKK291dF9zeXNjdGw6CisJcmRzX3N5c2N0bF9leGl0KCk7CitvdXRfdGhyZWFkczoKKwlyZHNfdGhyZWFkc19leGl0KCk7CitvdXRfY29ubjoKKwlyZHNfY29ubl9leGl0KCk7CisJcmRzX2NvbmdfZXhpdCgpOworCXJkc19wYWdlX2V4aXQoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQocmRzX2luaXQpOworCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICAiNC4wIgorI2RlZmluZSBEUlZfUkVMREFURSAgICAgIkZlYiAxMiwgMjAwOSIKKworTU9EVUxFX0FVVEhPUigiT3JhY2xlIENvcnBvcmF0aW9uIDxyZHMtZGV2ZWxAb3NzLm9yYWNsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJEUzogUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyIKKwkJICAgIiB2IiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfUkRTKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvYmluZC5jIGIvbmV0L3Jkcy9iaW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3Y2MzOQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvYmluZC5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBYWFggdGhpcyBwcm9iYWJseSBzdGlsbCBuZWVkcyBtb3JlIHdvcmsuLiBubyBJTkFERFJfQU5ZLCBhbmQgcmJ0cmVlcyBhcmVuJ3QKKyAqIHBhcnRpY3VsYXJseSB6aXBweS4KKyAqCisgKiBUaGlzIGlzIG5vdyBjYWxsZWQgZm9yIGV2ZXJ5IGluY29taW5nIGZyYW1lIHNvIHdlIGFyZ3VhYmx5IGNhcmUgbXVjaCBtb3JlCisgKiBhYm91dCBpdCB0aGFuIHdlIHVzZWQgdG8uCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2JpbmRfbG9jayk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgcmRzX2JpbmRfdHJlZSA9IFJCX1JPT1Q7CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX3NvY2sgKnJkc19iaW5kX3RyZWVfd2FsayhfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQsCisJCQkJCSAgIHN0cnVjdCByZHNfc29jayAqaW5zZXJ0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyZHNfYmluZF90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1NjQgY21wOworCXU2NCBuZWVkbGUgPSAoKHU2NCliZTMyX3RvX2NwdShhZGRyKSA8PCAzMikgfCBiZTE2X3RvX2NwdShwb3J0KTsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJcnMgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfc29jaywgcnNfYm91bmRfbm9kZSk7CisKKwkJY21wID0gKCh1NjQpYmUzMl90b19jcHUocnMtPnJzX2JvdW5kX2FkZHIpIDw8IDMyKSB8CisJCSAgICAgIGJlMTZfdG9fY3B1KHJzLT5yc19ib3VuZF9wb3J0KTsKKworCQlpZiAobmVlZGxlIDwgY21wKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChuZWVkbGUgPiBjbXApCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gcnM7CisJfQorCisJaWYgKGluc2VydCkgeworCQlyYl9saW5rX25vZGUoJmluc2VydC0+cnNfYm91bmRfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPnJzX2JvdW5kX25vZGUsICZyZHNfYmluZF90cmVlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJkc19zb2NrIGJvdW5kIGF0IHRoZSBnaXZlbiBsb2NhbCBhZGRyZXNzLgorICoKKyAqIFRoZSByeCBwYXRoIGNhbiByYWNlIHdpdGggcmRzX3JlbGVhc2UuICBXZSBub3RpY2UgaWYgcmRzX3JlbGVhc2UoKSBoYXMKKyAqIG1hcmtlZCB0aGlzIHNvY2tldCBhbmQgZG9uJ3QgcmV0dXJuIGEgcnMgcmVmIHRvIHRoZSByeCBwYXRoLgorICovCitzdHJ1Y3QgcmRzX3NvY2sgKnJkc19maW5kX2JvdW5kKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydCkKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCXJzID0gcmRzX2JpbmRfdHJlZV93YWxrKGFkZHIsIHBvcnQsIE5VTEwpOworCWlmIChycyAmJiAhc29ja19mbGFnKHJkc19yc190b19zayhycyksIFNPQ0tfREVBRCkpCisJCXJkc19zb2NrX2FkZHJlZihycyk7CisJZWxzZQorCQlycyA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJcmRzZGVidWcoInJldHVybmluZyBycyAlcCBmb3IgJXBJNDoldVxuIiwgcnMsICZhZGRyLAorCQludG9ocyhwb3J0KSk7CisJcmV0dXJuIHJzOworfQorCisvKiByZXR1cm5zIC12ZSBlcnJubyBvciArdmUgcG9ydCAqLworc3RhdGljIGludCByZHNfYWRkX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMsIF9fYmUzMiBhZGRyLCBfX2JlMTYgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVBRERSSU5VU0U7CisJdTE2IHJvdmVyLCBsYXN0OworCisJaWYgKCpwb3J0ICE9IDApIHsKKwkJcm92ZXIgPSBiZTE2X3RvX2NwdSgqcG9ydCk7CisJCWxhc3QgPSByb3ZlcjsKKwl9IGVsc2UgeworCQlyb3ZlciA9IG1heF90KHUxNiwgbmV0X3JhbmRvbSgpLCAyKTsKKwkJbGFzdCA9IHJvdmVyIC0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJZG8geworCQlpZiAocm92ZXIgPT0gMCkKKwkJCXJvdmVyKys7CisJCWlmIChyZHNfYmluZF90cmVlX3dhbGsoYWRkciwgY3B1X3RvX2JlMTYocm92ZXIpLCBycykgPT0gTlVMTCkgeworCQkJKnBvcnQgPSBjcHVfdG9fYmUxNihyb3Zlcik7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChyb3ZlcisrICE9IGxhc3QpOworCisJaWYgKHJldCA9PSAwKSAgeworCQlycy0+cnNfYm91bmRfYWRkciA9IGFkZHI7CisJCXJzLT5yc19ib3VuZF9wb3J0ID0gKnBvcnQ7CisJCXJkc19zb2NrX2FkZHJlZihycyk7CisKKwkJcmRzZGVidWcoInJzICVwIGJpbmRpbmcgdG8gJXBJNDolZFxuIiwKKwkJICBycywgJmFkZHIsIChpbnQpbnRvaHMoKnBvcnQpKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19yZW1vdmVfYm91bmQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCWlmIChycy0+cnNfYm91bmRfYWRkcikgeworCQlyZHNkZWJ1ZygicnMgJXAgdW5iaW5kaW5nIGZyb20gJXBJNDolZFxuIiwKKwkJICBycywgJnJzLT5yc19ib3VuZF9hZGRyLAorCQkgIG50b2hzKHJzLT5yc19ib3VuZF9wb3J0KSk7CisKKwkJcmJfZXJhc2UoJnJzLT5yc19ib3VuZF9ub2RlLCAmcmRzX2JpbmRfdHJlZSk7CisJCXJkc19zb2NrX3B1dChycyk7CisJCXJzLT5yc19ib3VuZF9hZGRyID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7Cit9CisKK2ludCByZHNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCWludCByZXQgPSAwOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChhZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSB8fAorCSAgICBzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCB8fAorCSAgICBycy0+cnNfYm91bmRfYWRkciB8fAorCSAgICBzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZHNfYWRkX2JvdW5kKHJzLCBzaW4tPnNpbl9hZGRyLnNfYWRkciwgJnNpbi0+c2luX3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJdHJhbnMgPSByZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChzaW4tPnNpbl9hZGRyLnNfYWRkcik7CisJaWYgKHRyYW5zID09IE5VTEwpIHsKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisJCXJkc19yZW1vdmVfYm91bmQocnMpOworCQlnb3RvIG91dDsKKwl9CisKKwlycy0+cnNfdHJhbnNwb3J0ID0gdHJhbnM7CisJcmV0ID0gMDsKKworb3V0OgorCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvY29uZy5jIGIvbmV0L3Jkcy9jb25nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwZTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvY29uZy5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSByZWNlaXZlIHNpZGUgb2YgdGhlIHVuY29udmVudGlvbmFsIGNvbmdlc3Rpb24KKyAqIG1hbmFnZW1lbnQgaW4gUkRTLgorICoKKyAqIE1lc3NhZ2VzIHdhaXRpbmcgaW4gdGhlIHJlY2VpdmUgcXVldWUgb24gdGhlIHJlY2VpdmluZyBzb2NrZXQgYXJlIGFjY291bnRlZAorICogYWdhaW5zdCB0aGUgc29ja2V0cyBTT19SQ1ZCVUYgb3B0aW9uIHZhbHVlLiAgT25seSB0aGUgcGF5bG9hZCBieXRlcyBpbiB0aGUKKyAqIG1lc3NhZ2UgYXJlIGFjY291bnRlZCBmb3IuICBJZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBlcXVhbHMgb3IgZXhjZWVkcworICogcmN2YnVmIHRoZW4gdGhlIHNvY2tldCBpcyBjb25nZXN0ZWQuICBBbGwgc2VuZHMgYXR0ZW1wdGVkIHRvIHRoaXMgc29ja2V0J3MKKyAqIGFkZHJlc3Mgc2hvdWxkIHJldHVybiBibG9jayBvciByZXR1cm4gLUVXT1VMREJMT0NLLgorICoKKyAqIEFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVhc29uYWJseSB0dW5lZCBzdWNoIHRoYXQgdGhpcyBzaXR1YXRpb24KKyAqIHZlcnkgcmFyZWx5IG9jY3Vycy4gIEFuIGFwcGxpY2F0aW9uIGVuY291bnRlcmluZyB0aGlzICJiYWNrLXByZXNzdXJlIiBpcworICogY29uc2lkZXJlZCBhIGJ1Zy4KKyAqCisgKiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyBlYWNoIG5vZGUgbWFpbnRhaW4gYml0bWFwcyB3aGljaCBpbmRpY2F0ZQorICogd2hpY2ggcG9ydHMgb24gYm91bmQgYWRkcmVzc2VzIGFyZSBjb25nZXN0ZWQuICBBcyB0aGUgYml0bWFwIGNoYW5nZXMgaXQgaXMKKyAqIHNlbnQgdGhyb3VnaCBhbGwgdGhlIGNvbm5lY3Rpb25zIHdoaWNoIHRlcm1pbmF0ZSBpbiB0aGUgbG9jYWwgYWRkcmVzcyBvZiB0aGUKKyAqIGJpdG1hcCB3aGljaCBjaGFuZ2VkLgorICoKKyAqIFRoZSBiaXRtYXBzIGFyZSBhbGxvY2F0ZWQgYXMgY29ubmVjdGlvbnMgYXJlIGJyb3VnaHQgdXAuICBUaGlzIGF2b2lkcworICogYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGggd2hpY2ggcXVldWVzIG1lc3NhZ2VzIG9uIHNvY2tldHMuCisgKiBUaGUgZGVuc2UgYml0bWFwcyBsZXQgdHJhbnNwb3J0cyBzZW5kIHRoZSBlbnRpcmUgYml0bWFwIG9uIGFueSBiaXRtYXAgY2hhbmdlCisgKiByZWFzb25hYmx5IGVmZmljaWVudGx5LiAgVGhpcyBpcyBtdWNoIGVhc2llciB0byBpbXBsZW1lbnQgdGhhbiBzb21lCisgKiBmaW5lci1ncmFpbmVkIGNvbW11bmljYXRpb24gb2YgcGVyLXBvcnQgY29uZ2VzdGlvbi4gIFRoZSBzZW5kZXIgZG9lcyBhIHZlcnkKKyAqIGluZXhwZW5zaXZlIGJpdCB0ZXN0IHRvIHRlc3QgaWYgdGhlIHBvcnQgaXQncyBhYm91dCB0byBzZW5kIHRvIGlzIGNvbmdlc3RlZAorICogb3Igbm90LgorICovCisKKy8qCisgKiBJbnRlcmFjdGlvbiB3aXRoIHBvbGwgaXMgYSB0YWQgdHJpY2t5LiBXZSB3YW50IGFsbCBwcm9jZXNzZXMgc3R1Y2sgaW4KKyAqIHBvbGwgdG8gd2FrZSB1cCBhbmQgY2hlY2sgd2hldGhlciBhIGNvbmdlc3RlZCBkZXN0aW5hdGlvbiBiZWNhbWUgdW5jb25nZXN0ZWQuCisgKiBUaGUgcmVhbGx5IHNhZCB0aGluZyBpcyB3ZSBoYXZlIG5vIGlkZWEgd2hpY2ggZGVzdGluYXRpb25zIHRoZSBhcHBsaWNhdGlvbgorICogd2FudHMgdG8gc2VuZCB0byAtIHdlIGRvbid0IGV2ZW4ga25vdyB3aGljaCByZHNfY29ubmVjdGlvbnMgYXJlIGludm9sdmVkLgorICogU28gdW50aWwgd2UgaW1wbGVtZW50IGEgbW9yZSBmbGV4aWJsZSByZHMgcG9sbCBpbnRlcmZhY2UsIHdlIGhhdmUgdG8gbWFrZQorICogZG8gd2l0aCB0aGlzOgorICogV2UgbWFpbnRhaW4gYSBnbG9iYWwgY291bnRlciB0aGF0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIGNvbmdlc3Rpb24gbWFwCisgKiB1cGRhdGUgaXMgcmVjZWl2ZWQuIEVhY2ggcmRzIHNvY2tldCB0cmFja3MgdGhpcyB2YWx1ZSwgYW5kIGlmIHJkc19wb2xsCisgKiBmaW5kcyB0aGF0IHRoZSBzYXZlZCBnZW5lcmF0aW9uIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGdsb2JhbCBnZW5lcmF0aW9uCisgKiBudW1iZXIsIGl0IHdha2VzIHVwIHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgYXRvbWljX3QJCXJkc19jb25nX2dlbmVyYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworLyoKKyAqIENvbmdlc3Rpb24gbW9uaXRvcmluZworICovCitzdGF0aWMgTElTVF9IRUFEKHJkc19jb25nX21vbml0b3IpOworc3RhdGljIERFRklORV9SV0xPQ0socmRzX2NvbmdfbW9uaXRvcl9sb2NrKTsKKworLyoKKyAqIFllcywgYSBnbG9iYWwgbG9jay4gIEl0J3MgdXNlZCBzbyBpbmZyZXF1ZW50bHkgdGhhdCBpdCdzIHdvcnRoIGtlZXBpbmcgaXQKKyAqIGdsb2JhbCB0byBzaW1wbGlmeSB0aGUgbG9ja2luZy4gIEl0J3Mgb25seSB1c2VkIGluIHRoZSBmb2xsb3dpbmcKKyAqIGNpcmN1bXN0YW5jZXM6CisgKgorICogIC0gb24gY29ubmVjdGlvbiBidWlsZHVwIHRvIGFzc29jaWF0ZSBhIGNvbm4gd2l0aCBpdHMgbWFwcworICogIC0gb24gbWFwIGNoYW5nZXMgdG8gaW5mb3JtIGNvbm5zIG9mIGEgbmV3IG1hcCB0byBzZW5kCisgKgorICogIEl0J3Mgc2FkbHkgb3JkZXJlZCB1bmRlciB0aGUgc29ja2V0IGNhbGxiYWNrIGxvY2sgYW5kIHRoZSBjb25uZWN0aW9uIGxvY2suCisgKiAgUmVjZWl2ZSBwYXRocyBjYW4gbWFyayBwb3J0cyBjb25nZXN0ZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBzbyB0aGUKKyAqICBsb2NrIG1hc2tzIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2NvbmdfbG9jayk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgcmRzX2NvbmdfdHJlZSA9IFJCX1JPT1Q7CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2NvbmdfbWFwICpyZHNfY29uZ190cmVlX3dhbGsoX19iZTMyIGFkZHIsCisJCQkJCSAgICAgICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICppbnNlcnQpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJkc19jb25nX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCW1hcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHJkc19jb25nX21hcCwgbV9yYl9ub2RlKTsKKworCQlpZiAoYWRkciA8IG1hcC0+bV9hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gbWFwLT5tX2FkZHIpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gbWFwOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPm1fcmJfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPm1fcmJfbm9kZSwgJnJkc19jb25nX3RyZWUpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoZXJlIGlzIG9ubHkgZXZlciBvbmUgYml0bWFwIGZvciBhbnkgYWRkcmVzcy4gIENvbm5lY3Rpb25zIHRyeSBhbmQgYWxsb2NhdGUKKyAqIHRoZXNlIGJpdG1hcHMgaW4gdGhlIHByb2Nlc3MgZ2V0dGluZyBwb2ludGVycyB0byB0aGVtLiAgVGhlIGJpdG1hcHMgYXJlIG9ubHkKKyAqIGV2ZXIgZnJlZWQgYXMgdGhlIG1vZHVsZSBpcyByZW1vdmVkIGFmdGVyIGFsbCBjb25uZWN0aW9ucyBoYXZlIGJlZW4gZnJlZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmRzX2NvbmdfbWFwICpyZHNfY29uZ19mcm9tX2FkZHIoX19iZTMyIGFkZHIpCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXN0cnVjdCByZHNfY29uZ19tYXAgKnJldCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyB6cDsKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfY29uZ19tYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAobWFwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWFwLT5tX2FkZHIgPSBhZGRyOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hcC0+bV93YWl0cSk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcC0+bV9jb25uX2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUzsgaSsrKSB7CisJCXpwID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoenAgPT0gMCkKKwkJCWdvdG8gb3V0OworCQltYXAtPm1fcGFnZV9hZGRyc1tpXSA9IHpwOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJcmV0ID0gcmRzX2NvbmdfdHJlZV93YWxrKGFkZHIsIG1hcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCisJaWYgKHJldCA9PSBOVUxMKSB7CisJCXJldCA9IG1hcDsKKwkJbWFwID0gTlVMTDsKKwl9CisKK291dDoKKwlpZiAobWFwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVMgJiYgbWFwLT5tX3BhZ2VfYWRkcnNbaV07IGkrKykKKwkJCWZyZWVfcGFnZShtYXAtPm1fcGFnZV9hZGRyc1tpXSk7CisJCWtmcmVlKG1hcCk7CisJfQorCisJcmRzZGVidWcoIm1hcCAlcCBmb3IgYWRkciAleFxuIiwgcmV0LCBiZTMyX3RvX2NwdShhZGRyKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHV0IHRoZSBjb25uIG9uIGl0cyBsb2NhbCBtYXAncyBsaXN0LiAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubiBpcworICogcmVhbGx5IGFkZGVkIHRvIHRoZSBoYXNoLiAgSXQncyBuZXN0ZWQgdW5kZXIgdGhlIHJkc19jb25uX2xvY2ssIHNhZGx5LgorICovCit2b2lkIHJkc19jb25nX2FkZF9jb25uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoImNvbm4gJXAgbm93IG9uIG1hcCAlcFxuIiwgY29ubiwgY29ubi0+Y19sY29uZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjb25uLT5jX21hcF9pdGVtLCAmY29ubi0+Y19sY29uZy0+bV9jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCByZHNfY29uZ19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJyZW1vdmluZyBjb25uICVwIGZyb20gbWFwICVwXG4iLCBjb25uLCBjb25uLT5jX2xjb25nKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJmNvbm4tPmNfbWFwX2l0ZW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKK30KKworaW50IHJkc19jb25nX2dldF9tYXBzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwljb25uLT5jX2xjb25nID0gcmRzX2NvbmdfZnJvbV9hZGRyKGNvbm4tPmNfbGFkZHIpOworCWNvbm4tPmNfZmNvbmcgPSByZHNfY29uZ19mcm9tX2FkZHIoY29ubi0+Y19mYWRkcik7CisKKwlpZiAoY29ubi0+Y19sY29uZyA9PSBOVUxMIHx8IGNvbm4tPmNfZmNvbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sICZtYXAtPm1fY29ubl9saXN0LCBjX21hcF9pdGVtKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkgeworCQkJcmRzX3N0YXRzX2luYyhzX2NvbmdfdXBkYXRlX3F1ZXVlZCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJkc19jb25nX21hcF91cGRhdGVkKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdWludDY0X3QgcG9ydG1hc2spCit7CisJcmRzZGVidWcoIndha2luZyBtYXAgJXAgZm9yICVwSTRcbiIsCisJICBtYXAsICZtYXAtPm1fYWRkcik7CisJcmRzX3N0YXRzX2luYyhzX2NvbmdfdXBkYXRlX3JlY2VpdmVkKTsKKwlhdG9taWNfaW5jKCZyZHNfY29uZ19nZW5lcmF0aW9uKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmbWFwLT5tX3dhaXRxKSkKKwkJd2FrZV91cCgmbWFwLT5tX3dhaXRxKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX3BvbGxfd2FpdHEpKQorCQl3YWtlX3VwX2FsbCgmcmRzX3BvbGxfd2FpdHEpOworCisJaWYgKHBvcnRtYXNrICYmICFsaXN0X2VtcHR5KCZyZHNfY29uZ19tb25pdG9yKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCisJCXJlYWRfbG9ja19pcnFzYXZlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShycywgJnJkc19jb25nX21vbml0b3IsIHJzX2NvbmdfbGlzdCkgeworCQkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCQlycy0+cnNfY29uZ19ub3RpZnkgfD0gKHJzLT5yc19jb25nX21hc2sgJiBwb3J0bWFzayk7CisJCQlycy0+cnNfY29uZ19tYXNrICY9IH5wb3J0bWFzazsKKwkJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJCQlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KQorCQkJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJfQorCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK2ludCByZHNfY29uZ191cGRhdGVkX3NpbmNlKHVuc2lnbmVkIGxvbmcgKnJlY2VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGdlbiA9IGF0b21pY19yZWFkKCZyZHNfY29uZ19nZW5lcmF0aW9uKTsKKworCWlmIChsaWtlbHkoKnJlY2VudCA9PSBnZW4pKQorCQlyZXR1cm4gMDsKKwkqcmVjZW50ID0gZ2VuOworCXJldHVybiAxOworfQorCisvKgorICogV2UncmUgY2FsbGVkIHVuZGVyIHRoZSBsb2NraW5nIHRoYXQgcHJvdGVjdHMgdGhlIHNvY2tldHMgcmVjZWl2ZSBidWZmZXIKKyAqIGNvbnN1bXB0aW9uLiAgVGhpcyBtYWtlcyBpdCBhIGxvdCBlYXNpZXIgZm9yIHRoZSBjYWxsZXIgdG8gb25seSBjYWxsIHVzCisgKiB3aGVuIGl0IGtub3dzIHRoYXQgYW4gZXhpc3Rpbmcgc2V0IGJpdCBuZWVkcyB0byBiZSBjbGVhcmVkLCBhbmQgdmljZSB2ZXJzYS4KKyAqIFdlIGNhbid0IGJsb2NrIGFuZCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBjb25jdXJyZW50IHNvY2tldHMgd29ya2luZyBhZ2FpbnN0CisgKiB0aGUgc2FtZSBwZXItYWRkcmVzcyBtYXAuCisgKi8KK3ZvaWQgcmRzX2Nvbmdfc2V0X2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCXJkc2RlYnVnKCJzZXR0aW5nIGNvbmdlc3Rpb24gZm9yICVwSTQ6JXUgaW4gbWFwICVwXG4iLAorCSAgJm1hcC0+bV9hZGRyLCBudG9ocyhwb3J0KSwgbWFwKTsKKworCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCisJZ2VuZXJpY19fX3NldF9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKK30KKwordm9pZCByZHNfY29uZ19jbGVhcl9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwlyZHNkZWJ1ZygiY2xlYXJpbmcgY29uZ2VzdGlvbiBmb3IgJXBJNDoldSBpbiBtYXAgJXBcbiIsCisJICAmbWFwLT5tX2FkZHIsIG50b2hzKHBvcnQpLCBtYXApOworCisJaSA9IGJlMTZfdG9fY3B1KHBvcnQpIC8gUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKwlvZmYgPSBiZTE2X3RvX2NwdShwb3J0KSAlIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisKKwlnZW5lcmljX19fY2xlYXJfbGVfYml0KG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NvbmdfdGVzdF9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwlpID0gYmUxNl90b19jcHUocG9ydCkgLyBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCW9mZiA9IGJlMTZfdG9fY3B1KHBvcnQpICUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKworCXJldHVybiBnZW5lcmljX3Rlc3RfbGVfYml0KG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfYWRkX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZycy0+cnNfY29uZ19saXN0KSkKKwkJbGlzdF9hZGQoJnJzLT5yc19jb25nX2xpc3QsICZyZHNfY29uZ19tb25pdG9yKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZycy0+cnNfY29uZ19saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisKKwkvKiB1cGRhdGUgY29uZ2VzdGlvbiBtYXAgZm9yIG5vdy1jbG9zZWQgcG9ydCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJbWFwID0gcmRzX2NvbmdfdHJlZV93YWxrKHJzLT5yc19ib3VuZF9hZGRyLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisKKwlpZiAobWFwICYmIHJkc19jb25nX3Rlc3RfYml0KG1hcCwgcnMtPnJzX2JvdW5kX3BvcnQpKSB7CisJCXJkc19jb25nX2NsZWFyX2JpdChtYXAsIHJzLT5yc19ib3VuZF9wb3J0KTsKKwkJcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhtYXApOworCX0KK30KKworaW50IHJkc19jb25nX3dhaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCwgaW50IG5vbmJsb2NrLAorCQkgIHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJaWYgKCFyZHNfY29uZ190ZXN0X2JpdChtYXAsIHBvcnQpKQorCQlyZXR1cm4gMDsKKwlpZiAobm9uYmxvY2spIHsKKwkJaWYgKHJzICYmIHJzLT5yc19jb25nX21vbml0b3IpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qIEl0IHdvdWxkIGhhdmUgYmVlbiBuaWNlIHRvIGhhdmUgYW4gYXRvbWljIHNldF9iaXQgb24KKwkJCSAqIGEgdWludDY0X3QuICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwkJCXJzLT5yc19jb25nX21hc2sgfD0gUkRTX0NPTkdfTU9OSVRPUl9NQVNLKG50b2hzKHBvcnQpKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwkJCS8qIFRlc3QgYWdhaW4gLSBhIGNvbmdlc3Rpb24gdXBkYXRlIG1heSBoYXZlIGFycml2ZWQgaW4KKwkJCSAqIHRoZSBtZWFudGltZS4gKi8KKwkJCWlmICghcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBwb3J0KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlyZHNfc3RhdHNfaW5jKHNfY29uZ19zZW5kX2Vycm9yKTsKKwkJcmV0dXJuIC1FTk9CVUZTOworCX0KKworCXJkc19zdGF0c19pbmMoc19jb25nX3NlbmRfYmxvY2tlZCk7CisJcmRzZGVidWcoIndhaXRpbmcgb24gbWFwICVwIGZvciBwb3J0ICV1XG4iLCBtYXAsIGJlMTZfdG9fY3B1KHBvcnQpKTsKKworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWFwLT5tX3dhaXRxLAorCQkJCQkhcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBwb3J0KSk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfZXhpdCh2b2lkKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmcmRzX2NvbmdfdHJlZSkpKSB7CisJCW1hcCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCByZHNfY29uZ19tYXAsIG1fcmJfbm9kZSk7CisJCXJkc2RlYnVnKCJmcmVlaW5nIG1hcCAlcFxuIiwgbWFwKTsKKwkJcmJfZXJhc2UoJm1hcC0+bV9yYl9ub2RlLCAmcmRzX2NvbmdfdHJlZSk7CisJCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVMgJiYgbWFwLT5tX3BhZ2VfYWRkcnNbaV07IGkrKykKKwkJCWZyZWVfcGFnZShtYXAtPm1fcGFnZV9hZGRyc1tpXSk7CisJCWtmcmVlKG1hcCk7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYSBSRFMgbWVzc2FnZSBjb250YWluaW5nIGEgY29uZ2VzdGlvbiB1cGRhdGUuCisgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX2NvbmdfdXBkYXRlX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAgPSBjb25uLT5jX2xjb25nOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlybSA9IHJkc19tZXNzYWdlX21hcF9wYWdlcyhtYXAtPm1fcGFnZV9hZGRycywgUkRTX0NPTkdfTUFQX0JZVEVTKTsKKwlpZiAoIUlTX0VSUihybSkpCisJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzID0gUkRTX0ZMQUdfQ09OR19CSVRNQVA7CisKKwlyZXR1cm4gcm07Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2YwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImxvb3AuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKKyNkZWZpbmUgUkRTX0NPTk5FQ1RJT05fSEFTSF9CSVRTIDEyCisjZGVmaW5lIFJEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFUyAoMSA8PCBSRFNfQ09OTkVDVElPTl9IQVNIX0JJVFMpCisjZGVmaW5lIFJEU19DT05ORUNUSU9OX0hBU0hfTUFTSyAoUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTIC0gMSkKKworLyogY29udmVydGluZyB0aGlzIHRvIFJDVSBpcyBhIGNob3JlIGZvciBhbm90aGVyIGRheS4uICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgcmRzX2Nvbm5faGFzaFtSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVNdOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfY29ubl9zbGFiOworCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnJkc19jb25uX2J1Y2tldChfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkcikKK3sKKwkvKiBQYXNzIE5VTEwsIGRvbid0IG5lZWQgc3RydWN0IG5ldCBmb3IgaGFzaCAqLworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IGluZXRfZWhhc2hmbihOVUxMLAorCQkJCQkgIGJlMzJfdG9fY3B1KGxhZGRyKSwgMCwKKwkJCQkJICBiZTMyX3RvX2NwdShmYWRkciksIDApOworCXJldHVybiAmcmRzX2Nvbm5faGFzaFtoYXNoICYgUkRTX0NPTk5FQ1RJT05fSEFTSF9NQVNLXTsKK30KKworI2RlZmluZSByZHNfY29ubl9pbmZvX3NldCh2YXIsIHRlc3QsIHN1ZmZpeCkgZG8gewkJXAorCWlmICh0ZXN0KQkJCQkJCVwKKwkJdmFyIHw9IFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR18jI3N1ZmZpeDsJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgcmRzX2Nvbm5faXNfc2VuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW11dGV4X3RyeWxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKSkKKwkJcmV0ID0gMTsKKwllbHNlCisJCW11dGV4X3VubG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCQkgICAgICBfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkJICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgKnJldCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sIHBvcywgaGVhZCwgY19oYXNoX25vZGUpIHsKKwkJaWYgKGNvbm4tPmNfZmFkZHIgPT0gZmFkZHIgJiYgY29ubi0+Y19sYWRkciA9PSBsYWRkciAmJgorCQkJCWNvbm4tPmNfdHJhbnMgPT0gdHJhbnMpIHsKKwkJCXJldCA9IGNvbm47CisJCQlicmVhazsKKwkJfQorCX0KKwlyZHNkZWJ1ZygicmV0dXJuaW5nIGNvbm4gJXAgZm9yICVwSTQgLT4gJXBJNFxuIiwgcmV0LAorCQkgJmxhZGRyLCAmZmFkZHIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0cmFuc3BvcnRzIGFzIHRoZXkncmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uCisgKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZworICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG8KKyAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LgorICovCit2b2lkIHJkc19jb25uX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZHNkZWJ1ZygiY29ubmVjdGlvbiAlcEk0IHRvICVwSTQgcmVzZXRcbiIsCisJICAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIpOworCisJcmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpOworCXJkc19zZW5kX3Jlc2V0KGNvbm4pOworCWNvbm4tPmNfZmxhZ3MgPSAwOworCisJLyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoCisJICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsCisJICogb2YgdGhlbSB0byB0aGUgYXBwbGljYXRpb24uIFRoYXQgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUKKwkgKiByZWxpYWJpbGl0eSBndWFyYW50ZWVzIG9mIFJEUy4gKi8KK30KKworLyoKKyAqIFRoZXJlIGlzIG9ubHkgZXZlcnkgb25lICdjb25uJyBmb3IgYSBnaXZlbiBwYWlyIG9mIGFkZHJlc3NlcyBpbiB0aGUKKyAqIHN5c3RlbSBhdCBhIHRpbWUuICBUaGV5IGNvbnRhaW4gbWVzc2FnZXMgdG8gYmUgcmV0cmFuc21pdHRlZCBhbmQgc28KKyAqIHNwYW4gdGhlIGxpZmV0aW1lIG9mIHRoZSBhY3R1YWwgdW5kZXJseWluZyB0cmFuc3BvcnQgY29ubmVjdGlvbnMuCisgKgorICogRm9yIG5vdyB0aGV5IGFyZSBub3QgZ2FyYmFnZSBjb2xsZWN0ZWQgb25jZSB0aGV5J3JlIGNyZWF0ZWQuICBUaGV5CisgKiBhcmUgdG9ybiBkb3duIGFzIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZCwgaWYgZXZlci4KKyAqLworc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwLAorCQkJCSAgICAgICBpbnQgaXNfb3V0Z29pbmcpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCAqdG1wLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IHJkc19jb25uX2J1Y2tldChsYWRkciwgZmFkZHIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisJY29ubiA9IHJkc19jb25uX2xvb2t1cChoZWFkLCBsYWRkciwgZmFkZHIsIHRyYW5zKTsKKwlpZiAoY29ubgorCSAmJiBjb25uLT5jX2xvb3BiYWNrCisJICYmIGNvbm4tPmNfdHJhbnMgIT0gJnJkc19sb29wX3RyYW5zcG9ydAorCSAmJiAhaXNfb3V0Z29pbmcpIHsKKwkJLyogVGhpcyBpcyBhIGxvb3BlZCBiYWNrIElCIGNvbm5lY3Rpb24sIGFuZCB3ZSdyZQorCQkgKiBjYWxsZWQgYnkgdGhlIGNvZGUgaGFuZGxpbmcgdGhlIGluY29taW5nIGNvbm5lY3QuCisJCSAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZQorCQkgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqLworCQlwYXJlbnQgPSBjb25uOworCQljb25uID0gcGFyZW50LT5jX3Bhc3NpdmU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKwlpZiAoY29ubikKKwkJZ290byBvdXQ7CisKKwljb25uID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfY29ubl9zbGFiLCBnZnApOworCWlmIChjb25uID09IE5VTEwpIHsKKwkJY29ubiA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldChjb25uLCAwLCBzaXplb2YoKmNvbm4pKTsKKworCUlOSVRfSExJU1RfTk9ERSgmY29ubi0+Y19oYXNoX25vZGUpOworCWNvbm4tPmNfdmVyc2lvbiA9IFJEU19QUk9UT0NPTF8zXzA7CisJY29ubi0+Y19sYWRkciA9IGxhZGRyOworCWNvbm4tPmNfZmFkZHIgPSBmYWRkcjsKKwlzcGluX2xvY2tfaW5pdCgmY29ubi0+Y19sb2NrKTsKKwljb25uLT5jX25leHRfdHhfc2VxID0gMTsKKworCW11dGV4X2luaXQoJmNvbm4tPmNfc2VuZF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmY29ubi0+Y19yZXRyYW5zKTsKKworCXJldCA9IHJkc19jb25nX2dldF9tYXBzKGNvbm4pOworCWlmIChyZXQpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQljb25uID0gRVJSX1BUUihyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgd2hlcmUgYSBjb25uZWN0aW9uIGJlY29tZXMgbG9vcGJhY2suICBJZiAqYW55KiBSRFMgc29ja2V0cworCSAqIGNhbiBiaW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoZW4gd2UnZCByYXRoZXIgdGhlIG1lc3NhZ2VzCisJICogZmxvdyB0aHJvdWdoIGxvb3BiYWNrIHJhdGhlciB0aGFuIGVpdGhlciB0cmFuc3BvcnQuCisJICovCisJaWYgKHJkc190cmFuc19nZXRfcHJlZmVycmVkKGZhZGRyKSkgeworCQljb25uLT5jX2xvb3BiYWNrID0gMTsKKwkJaWYgKGlzX291dGdvaW5nICYmIHRyYW5zLT50X3ByZWZlcl9sb29wYmFjaykgeworCQkJLyogIm91dGdvaW5nIiBjb25uZWN0aW9uIC0gYW5kIHRoZSB0cmFuc3BvcnQKKwkJCSAqIHNheXMgaXQgd2FudHMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlZCBieSB0aGUKKwkJCSAqIGxvb3BiYWNrIHRyYW5zcG9ydC4gVGhpcyBpcyB3aGF0IFRDUCBkb2VzLgorCQkJICovCisJCQl0cmFucyA9ICZyZHNfbG9vcF90cmFuc3BvcnQ7CisJCX0KKwl9CisKKwljb25uLT5jX3RyYW5zID0gdHJhbnM7CisKKwlyZXQgPSB0cmFucy0+Y29ubl9hbGxvYyhjb25uLCBnZnApOworCWlmIChyZXQpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQljb25uID0gRVJSX1BUUihyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9ET1dOKTsKKwljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gMDsKKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+Y19zZW5kX3csIHJkc19zZW5kX3dvcmtlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvbm4tPmNfcmVjdl93LCByZHNfcmVjdl93b3JrZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb25uLT5jX2Nvbm5fdywgcmRzX2Nvbm5lY3Rfd29ya2VyKTsKKwlJTklUX1dPUksoJmNvbm4tPmNfZG93bl93LCByZHNfc2h1dGRvd25fd29ya2VyKTsKKwltdXRleF9pbml0KCZjb25uLT5jX2NtX2xvY2spOworCWNvbm4tPmNfZmxhZ3MgPSAwOworCisJcmRzZGVidWcoImFsbG9jYXRlZCBjb25uICVwIGZvciAlcEk0IC0+ICVwSTQgb3ZlciAlcyAlc1xuIiwKKwkgIGNvbm4sICZsYWRkciwgJmZhZGRyLAorCSAgdHJhbnMtPnRfbmFtZSA/IHRyYW5zLT50X25hbWUgOiAiW3Vua25vd25dIiwKKwkgIGlzX291dGdvaW5nID8gIihvdXRnb2luZykiIDogIiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKwlpZiAocGFyZW50ID09IE5VTEwpIHsKKwkJdG1wID0gcmRzX2Nvbm5fbG9va3VwKGhlYWQsIGxhZGRyLCBmYWRkciwgdHJhbnMpOworCQlpZiAodG1wID09IE5VTEwpCisJCQlobGlzdF9hZGRfaGVhZCgmY29ubi0+Y19oYXNoX25vZGUsIGhlYWQpOworCX0gZWxzZSB7CisJCXRtcCA9IHBhcmVudC0+Y19wYXNzaXZlOworCQlpZiAoIXRtcCkKKwkJCXBhcmVudC0+Y19wYXNzaXZlID0gY29ubjsKKwl9CisKKwlpZiAodG1wKSB7CisJCXRyYW5zLT5jb25uX2ZyZWUoY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJY29ubiA9IHRtcDsKKwl9IGVsc2UgeworCQlyZHNfY29uZ19hZGRfY29ubihjb25uKTsKKwkJcmRzX2Nvbm5fY291bnQrKzsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlyZXR1cm4gY29ubjsKK30KKworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGUoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBfX3Jkc19jb25uX2NyZWF0ZShsYWRkciwgZmFkZHIsIHRyYW5zLCBnZnAsIDApOworfQorCitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIF9fcmRzX2Nvbm5fY3JlYXRlKGxhZGRyLCBmYWRkciwgdHJhbnMsIGdmcCwgMSk7Cit9CisKK3ZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnJ0bXA7CisKKwlyZHNkZWJ1ZygiZnJlZWluZyBjb25uICVwIGZvciAlcEk0IC0+ICIKKwkJICIlcEk0XG4iLCBjb25uLCAmY29ubi0+Y19sYWRkciwKKwkJICZjb25uLT5jX2ZhZGRyKTsKKworCWhsaXN0X2RlbF9pbml0KCZjb25uLT5jX2hhc2hfbm9kZSk7CisKKwkvKiB3YWl0IGZvciB0aGUgcmRzIHRocmVhZCB0byBzaHV0IGl0IGRvd24gKi8KKwlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29ubi0+Y19jb25uX3cpOworCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOworCWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOworCisJLyogdGVhciBkb3duIHF1ZXVlZCBtZXNzYWdlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgcnRtcCwKKwkJCQkgJmNvbm4tPmNfc2VuZF9xdWV1ZSwKKwkJCQkgbV9jb25uX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fY29ubl9pdGVtKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9zb2NrX2l0ZW0pKTsKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwl9CisJaWYgKGNvbm4tPmNfeG1pdF9ybSkKKwkJcmRzX21lc3NhZ2VfcHV0KGNvbm4tPmNfeG1pdF9ybSk7CisKKwljb25uLT5jX3RyYW5zLT5jb25uX2ZyZWUoY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisKKwkvKgorCSAqIFRoZSBjb25nZXN0aW9uIG1hcHMgYXJlbid0IGZyZWVkIHVwIGhlcmUuICBUaGV5J3JlCisJICogZnJlZWQgYnkgcmRzX2NvbmdfZXhpdCgpIGFmdGVyIGFsbCB0aGUgY29ubmVjdGlvbnMKKwkgKiBoYXZlIGJlZW4gZnJlZWQuCisJICovCisJcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmNvbm4tPmNfcmV0cmFucykpOworCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKworCXJkc19jb25uX2NvdW50LS07Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMsCisJCQkJICBpbnQgd2FudF9zZW5kKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3RhbCA9IDA7CisJc2l6ZV90IGk7CisKKwlsZW4gLz0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwLCBoZWFkID0gcmRzX2Nvbm5faGFzaDsgaSA8IEFSUkFZX1NJWkUocmRzX2Nvbm5faGFzaCk7CisJICAgICBpKyssIGhlYWQrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBwb3MsIGhlYWQsIGNfaGFzaF9ub2RlKSB7CisJCQlpZiAod2FudF9zZW5kKQorCQkJCWxpc3QgPSAmY29ubi0+Y19zZW5kX3F1ZXVlOworCQkJZWxzZQorCQkJCWxpc3QgPSAmY29ubi0+Y19yZXRyYW5zOworCisJCQlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisKKwkJCS8qIFhYWCB0b28gbGF6eSB0byBtYWludGFpbiBjb3VudHMuLiAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShybSwgbGlzdCwgbV9jb25uX2l0ZW0pIHsKKwkJCQl0b3RhbCsrOworCQkJCWlmICh0b3RhbCA8PSBsZW4pCisJCQkJCXJkc19pbmNfaW5mb19jb3B5KCZybS0+bV9pbmMsIGl0ZXIsCisJCQkJCQkJICBjb25uLT5jX2xhZGRyLAorCQkJCQkJCSAgY29ubi0+Y19mYWRkciwgMCk7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrKCZjb25uLT5jX2xvY2spOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCisJbGVucy0+bnIgPSB0b3RhbDsKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfY29ubl9tZXNzYWdlX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLCAxKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3JldHJhbnMoc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkJICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfY29ubl9tZXNzYWdlX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLCAwKTsKK30KKwordm9pZCByZHNfZm9yX2VhY2hfY29ubl9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMsCisJCQkgIGludCAoKnZpc2l0b3IpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqLCB2b2lkICopLAorCQkJICBzaXplX3QgaXRlbV9sZW4pCit7CisJdWludDY0X3QgYnVmZmVyWyhpdGVtX2xlbiArIDcpIC8gOF07CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNpemVfdCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworCWxlbnMtPm5yID0gMDsKKwlsZW5zLT5lYWNoID0gaXRlbV9sZW47CisKKwlmb3IgKGkgPSAwLCBoZWFkID0gcmRzX2Nvbm5faGFzaDsgaSA8IEFSUkFZX1NJWkUocmRzX2Nvbm5faGFzaCk7CisJICAgICBpKyssIGhlYWQrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHBvcywgdG1wLCBoZWFkLCBjX2hhc2hfbm9kZSkgeworCisJCQkvKiBYWFggbm8gY19sb2NrIHVzYWdlLi4gKi8KKwkJCWlmICghdmlzaXRvcihjb25uLCBidWZmZXIpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBXZSBjb3B5IGFzIG11Y2ggYXMgd2UgY2FuIGZpdCBpbiB0aGUgYnVmZmVyLAorCQkJICogYnV0IHdlIGNvdW50IGFsbCBpdGVtcyBzbyB0aGF0IHRoZSBjYWxsZXIKKwkJCSAqIGNhbiByZXNpemUgdGhlIGJ1ZmZlci4gKi8KKwkJCWlmIChsZW4gPj0gaXRlbV9sZW4pIHsKKwkJCQlyZHNfaW5mb19jb3B5KGl0ZXIsIGJ1ZmZlciwgaXRlbV9sZW4pOworCQkJCWxlbiAtPSBpdGVtX2xlbjsKKwkJCX0KKwkJCWxlbnMtPm5yKys7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2Nvbm5faW5mb192aXNpdG9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fY29ubmVjdGlvbiAqY2luZm8gPSBidWZmZXI7CisKKwljaW5mby0+bmV4dF90eF9zZXEgPSBjb25uLT5jX25leHRfdHhfc2VxOworCWNpbmZvLT5uZXh0X3J4X3NlcSA9IGNvbm4tPmNfbmV4dF9yeF9zZXE7CisJY2luZm8tPmxhZGRyID0gY29ubi0+Y19sYWRkcjsKKwljaW5mby0+ZmFkZHIgPSBjb25uLT5jX2ZhZGRyOworCXN0cm5jcHkoY2luZm8tPnRyYW5zcG9ydCwgY29ubi0+Y190cmFucy0+dF9uYW1lLAorCQlzaXplb2YoY2luZm8tPnRyYW5zcG9ydCkpOworCWNpbmZvLT5mbGFncyA9IDA7CisKKwlyZHNfY29ubl9pbmZvX3NldChjaW5mby0+ZmxhZ3MsCisJCQkgIHJkc19jb25uX2lzX3NlbmRpbmcoY29ubiksIFNFTkRJTkcpOworCS8qIFhYWCBGdXR1cmU6IHJldHVybiB0aGUgc3RhdGUgcmF0aGVyIHRoYW4gdGhlc2UgZnVua3kgYml0cyAqLworCXJkc19jb25uX2luZm9fc2V0KGNpbmZvLT5mbGFncywKKwkJCSAgYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX0NPTk5FQ1RJTkcsCisJCQkgIENPTk5FQ1RJTkcpOworCXJkc19jb25uX2luZm9fc2V0KGNpbmZvLT5mbGFncywKKwkJCSAgYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX1VQLAorCQkJICBDT05ORUNURUQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsCisJCQkJcmRzX2Nvbm5faW5mb192aXNpdG9yLAorCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY29ubmVjdGlvbikpOworfQorCitpbnQgX19pbml0IHJkc19jb25uX2luaXQodm9pZCkKK3sKKwlyZHNfY29ubl9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19jb25uZWN0aW9uIiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHJkc19jb25uZWN0aW9uKSwKKwkJCQkJICAwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2Nvbm5fc2xhYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09OTkVDVElPTlMsIHJkc19jb25uX2luZm8pOworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU0VORF9NRVNTQUdFUywKKwkJCSAgICAgICByZHNfY29ubl9tZXNzYWdlX2luZm9fc2VuZCk7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTLAorCQkJICAgICAgIHJkc19jb25uX21lc3NhZ2VfaW5mb19yZXRyYW5zKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19jb25uX2V4aXQodm9pZCkKK3sKKwlyZHNfbG9vcF9leGl0KCk7CisKKwlXQVJOX09OKCFobGlzdF9lbXB0eShyZHNfY29ubl9oYXNoKSk7CisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2Nvbm5fc2xhYik7CisKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09OTkVDVElPTlMsIHJkc19jb25uX2luZm8pOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TRU5EX01FU1NBR0VTLAorCQkJCSByZHNfY29ubl9tZXNzYWdlX2luZm9fc2VuZCk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFVFJBTlNfTUVTU0FHRVMsCisJCQkJIHJkc19jb25uX21lc3NhZ2VfaW5mb19yZXRyYW5zKTsKK30KKworLyoKKyAqIEZvcmNlIGEgZGlzY29ubmVjdAorICovCit2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwlxdWV1ZV93b3JrKHJkc193cSwgJmNvbm4tPmNfZG93bl93KTsKK30KKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnByaW50ayhmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmE3Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYi5jCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCit1bnNpZ25lZCBpbnQgZm1yX3Bvb2xfc2l6ZSA9IFJEU19GTVJfUE9PTF9TSVpFOwordW5zaWduZWQgaW50IGZtcl9tZXNzYWdlX3NpemUgPSBSRFNfRk1SX1NJWkUgKyAxOyAvKiArMSBhbGxvd3MgZm9yIHVuYWxpZ25lZCBNUnMgKi8KKworbW9kdWxlX3BhcmFtKGZtcl9wb29sX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcl9wb29sX3NpemUsICIgTWF4IG51bWJlciBvZiBmbXIgcGVyIEhDQSIpOworbW9kdWxlX3BhcmFtKGZtcl9tZXNzYWdlX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcl9tZXNzYWdlX3NpemUsICIgTWF4IHNpemUgb2YgYSBSRE1BIHRyYW5zZmVyIik7CisKK3N0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CisKK0RFRklORV9TUElOTE9DSyhpYl9ub2Rldl9jb25uc19sb2NrKTsKK0xJU1RfSEVBRChpYl9ub2Rldl9jb25ucyk7CisKK3ZvaWQgcmRzX2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IGliX2RldmljZV9hdHRyICpkZXZfYXR0cjsKKworCS8qIE9ubHkgaGFuZGxlIElCIChubyBpV0FSUCkgZGV2aWNlcyAqLworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfSUJfQ0EpCisJCXJldHVybjsKKworCWRldl9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldl9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9hdHRyKQorCQlyZXR1cm47CisKKwlpZiAoaWJfcXVlcnlfZGV2aWNlKGRldmljZSwgZGV2X2F0dHIpKSB7CisJCXJkc2RlYnVnKCJRdWVyeSBkZXZpY2UgZmFpbGVkIGZvciAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKKwkJZ290byBmcmVlX2F0dHI7CisJfQorCisJcmRzX2liZGV2ID0ga21hbGxvYyhzaXplb2YgKnJkc19pYmRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZHNfaWJkZXYpCisJCWdvdG8gZnJlZV9hdHRyOworCisJc3Bpbl9sb2NrX2luaXQoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJcmRzX2liZGV2LT5tYXhfd3JzID0gZGV2X2F0dHItPm1heF9xcF93cjsKKwlyZHNfaWJkZXYtPm1heF9zZ2UgPSBtaW4oZGV2X2F0dHItPm1heF9zZ2UsIFJEU19JQl9NQVhfU0dFKTsKKworCXJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQgPSBtYXgoOSwgZmZzKGRldl9hdHRyLT5wYWdlX3NpemVfY2FwKSAtIDEpOworCXJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSAgPSAxIDw8IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJcmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrICA9IH4oKHU2NCkgcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplIC0gMSk7CisJcmRzX2liZGV2LT5mbXJfbWF4X3JlbWFwcyA9IGRldl9hdHRyLT5tYXhfbWFwX3Blcl9mbXI/OiAzMjsKKwlyZHNfaWJkZXYtPm1heF9mbXJzID0gZGV2X2F0dHItPm1heF9mbXIgPworCQkJbWluX3QodW5zaWduZWQgaW50LCBkZXZfYXR0ci0+bWF4X2ZtciwgZm1yX3Bvb2xfc2l6ZSkgOgorCQkJZm1yX3Bvb2xfc2l6ZTsKKworCXJkc19pYmRldi0+ZGV2ID0gZGV2aWNlOworCXJkc19pYmRldi0+cGQgPSBpYl9hbGxvY19wZChkZXZpY2UpOworCWlmIChJU19FUlIocmRzX2liZGV2LT5wZCkpCisJCWdvdG8gZnJlZV9kZXY7CisKKwlyZHNfaWJkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaWJkZXYtPnBkLAorCQkJCSAgICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJaWYgKElTX0VSUihyZHNfaWJkZXYtPm1yKSkKKwkJZ290byBlcnJfcGQ7CisKKwlyZHNfaWJkZXYtPm1yX3Bvb2wgPSByZHNfaWJfY3JlYXRlX21yX3Bvb2wocmRzX2liZGV2KTsKKwlpZiAoSVNfRVJSKHJkc19pYmRldi0+bXJfcG9vbCkpIHsKKwkJcmRzX2liZGV2LT5tcl9wb29sID0gTlVMTDsKKwkJZ290byBlcnJfbXI7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+aXBhZGRyX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmcmRzX2liZGV2LT5saXN0LCAmcmRzX2liX2RldmljZXMpOworCisJaWJfc2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pYl9jbGllbnQsIHJkc19pYmRldik7CisKKwlnb3RvIGZyZWVfYXR0cjsKKworZXJyX21yOgorCWliX2RlcmVnX21yKHJkc19pYmRldi0+bXIpOworZXJyX3BkOgorCWliX2RlYWxsb2NfcGQocmRzX2liZGV2LT5wZCk7CitmcmVlX2RldjoKKwlrZnJlZShyZHNfaWJkZXYpOworZnJlZV9hdHRyOgorCWtmcmVlKGRldl9hdHRyKTsKK30KKwordm9pZCByZHNfaWJfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHIsICppX25leHQ7CisKKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisJaWYgKCFyZHNfaWJkZXYpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpX2lwYWRkciwgaV9uZXh0LCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmaV9pcGFkZHItPmxpc3QpOworCQlrZnJlZShpX2lwYWRkcik7CisJfQorCisJcmRzX2liX3JlbW92ZV9jb25ucyhyZHNfaWJkZXYpOworCisJaWYgKHJkc19pYmRldi0+bXJfcG9vbCkKKwkJcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChyZHNfaWJkZXYtPm1yX3Bvb2wpOworCisJaWJfZGVyZWdfbXIocmRzX2liZGV2LT5tcik7CisKKwl3aGlsZSAoaWJfZGVhbGxvY19wZChyZHNfaWJkZXYtPnBkKSkgeworCQlyZHNkZWJ1ZygiRmFpbGVkIHRvIGRlYWxsb2MgcGQgJXBcbiIsIHJkc19pYmRldi0+cGQpOworCQltc2xlZXAoMSk7CisJfQorCisJbGlzdF9kZWwoJnJkc19pYmRldi0+bGlzdCk7CisJa2ZyZWUocmRzX2liZGV2KTsKK30KKworc3RydWN0IGliX2NsaWVudCByZHNfaWJfY2xpZW50ID0geworCS5uYW1lICAgPSAicmRzX2liIiwKKwkuYWRkICAgID0gcmRzX2liX2FkZF9vbmUsCisJLnJlbW92ZSA9IHJkc19pYl9yZW1vdmVfb25lCit9OworCitzdGF0aWMgaW50IHJkc19pYl9jb25uX2luZm9fdmlzaXRvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljOworCisJLyogV2Ugd2lsbCBvbmx5IGV2ZXIgbG9vayBhdCBJQiB0cmFuc3BvcnRzICovCisJaWYgKGNvbm4tPmNfdHJhbnMgIT0gJnJkc19pYl90cmFuc3BvcnQpCisJCXJldHVybiAwOworCisJaWluZm8tPnNyY19hZGRyID0gY29ubi0+Y19sYWRkcjsKKwlpaW5mby0+ZHN0X2FkZHIgPSBjb25uLT5jX2ZhZGRyOworCisJbWVtc2V0KCZpaW5mby0+c3JjX2dpZCwgMCwgc2l6ZW9mKGlpbmZvLT5zcmNfZ2lkKSk7CisJbWVtc2V0KCZpaW5mby0+ZHN0X2dpZCwgMCwgc2l6ZW9mKGlpbmZvLT5kc3RfZ2lkKSk7CisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCQlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJCWRldl9hZGRyID0gJmljLT5pX2NtX2lkLT5yb3V0ZS5hZGRyLmRldl9hZGRyOworCisJCWliX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5zcmNfZ2lkKTsKKwkJaWJfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPmRzdF9naWQpOworCisJCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisJCWlpbmZvLT5tYXhfc2VuZF93ciA9IGljLT5pX3NlbmRfcmluZy53X25yOworCQlpaW5mby0+bWF4X3JlY3Zfd3IgPSBpYy0+aV9yZWN2X3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9zZW5kX3NnZSA9IHJkc19pYmRldi0+bWF4X3NnZTsKKwkJcmRzX2liX2dldF9tcl9pbmZvKHJkc19pYmRldiwgaWluZm8pOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX2ljX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19mb3JfZWFjaF9jb25uX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLAorCQkJCXJkc19pYl9jb25uX2luZm9fdmlzaXRvciwKKwkJCQlzaXplb2Yoc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbikpOworfQorCisKKy8qCisgKiBFYXJseSBSRFMvSUIgd2FzIGJ1aWx0IHRvIG9ubHkgYmluZCB0byBhbiBhZGRyZXNzIGlmIHRoZXJlIGlzIGFuIElQb0lCCisgKiBkZXZpY2Ugd2l0aCB0aGF0IGFkZHJlc3Mgc2V0LgorICoKKyAqIElmIGl0IHdlcmUgbWUsIEknZCBhZHZvY2F0ZSBmb3Igc29tZXRoaW5nIG1vcmUgZmxleGlibGUuICBTZW5kaW5nIGFuZAorICogcmVjZWl2aW5nIHNob3VsZCBiZSBkZXZpY2UtYWdub3N0aWMuICBUcmFuc3BvcnRzIHdvdWxkIHRyeSBhbmQgbWFpbnRhaW4KKyAqIGNvbm5lY3Rpb25zIGJldHdlZW4gcGVlcnMgd2hvIGhhdmUgbWVzc2FnZXMgcXVldWVkLiAgVXNlcnNwYWNlIHdvdWxkIGJlCisgKiBhbGxvd2VkIHRvIGluZmx1ZW5jZSB3aGljaCBwYXRocyBoYXZlIHByaW9yaXR5LiAgV2UgY291bGQgY2FsbCB1c2Vyc3BhY2UKKyAqIGFzc2VydGluZyB0aGlzIHBvbGljeSAicm91dGluZyIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2liX2xhZGRyX2NoZWNrKF9fYmUzMiBhZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisKKwkvKiBDcmVhdGUgYSBDTUEgSUQgYW5kIHRyeSB0byBiaW5kIGl0LiBUaGlzIGNhdGNoZXMgYm90aAorCSAqIElCIGFuZCBpV0FSUCBjYXBhYmxlIE5JQ3MuCisJICovCisJY21faWQgPSByZG1hX2NyZWF0ZV9pZChOVUxMLCBOVUxMLCBSRE1BX1BTX1RDUCk7CisJaWYgKCFjbV9pZCkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLnNpbl9hZGRyLnNfYWRkciA9IGFkZHI7CisKKwkvKiByZG1hX2JpbmRfYWRkciB3aWxsIG9ubHkgc3VjY2VlZCBmb3IgSUIgJiBpV0FSUCBkZXZpY2VzICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKKwkvKiBkdWUgdG8gdGhpcywgd2Ugd2lsbCBjbGFpbSB0byBzdXBwb3J0IGlXQVJQIGRldmljZXMgdW5sZXNzIHdlCisJICAgY2hlY2sgbm9kZV90eXBlLiAqLworCWlmIChyZXQgfHwgY21faWQtPmRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9DQSkKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisKKwlyZHNkZWJ1ZygiYWRkciAlcEk0IHJldCAlZCBub2RlIHR5cGUgJWRcbiIsCisJCSZhZGRyLCByZXQsCisJCWNtX2lkLT5kZXZpY2UgPyBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgOiAtMSk7CisKKwlyZG1hX2Rlc3Ryb3lfaWQoY21faWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JQl9DT05ORUNUSU9OUywgcmRzX2liX2ljX2luZm8pOworCXJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CisJcmRzX2liX3N5c2N0bF9leGl0KCk7CisJcmRzX2liX3JlY3ZfZXhpdCgpOworCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfaWJfdHJhbnNwb3J0KTsKK30KKworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydCA9IHsKKwkubGFkZHJfY2hlY2sJCT0gcmRzX2liX2xhZGRyX2NoZWNrLAorCS54bWl0X2NvbXBsZXRlCQk9IHJkc19pYl94bWl0X2NvbXBsZXRlLAorCS54bWl0CQkJPSByZHNfaWJfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSBOVUxMLAorCS54bWl0X3JkbWEJCT0gcmRzX2liX3htaXRfcmRtYSwKKwkucmVjdgkJCT0gcmRzX2liX3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2liX2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfaWJfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX2liX2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfaWJfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19pYl9pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX2liX2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX2liX2luY19mcmVlLAorCS5jbV9pbml0aWF0ZV9jb25uZWN0CT0gcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3QsCisJLmNtX2hhbmRsZV9jb25uZWN0CT0gcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0LAorCS5jbV9jb25uZWN0X2NvbXBsZXRlCT0gcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUsCisJLnN0YXRzX2luZm9fY29weQk9IHJkc19pYl9zdGF0c19pbmZvX2NvcHksCisJLmV4aXQJCQk9IHJkc19pYl9leGl0LAorCS5nZXRfbXIJCQk9IHJkc19pYl9nZXRfbXIsCisJLnN5bmNfbXIJCT0gcmRzX2liX3N5bmNfbXIsCisJLmZyZWVfbXIJCT0gcmRzX2liX2ZyZWVfbXIsCisJLmZsdXNoX21ycwkJPSByZHNfaWJfZmx1c2hfbXJzLAorCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAorCS50X25hbWUJCQk9ICJpbmZpbmliYW5kIiwKK307CisKK2ludCBfX2luaXQgcmRzX2liX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYl9kZXZpY2VzKTsKKworCXJldCA9IGliX3JlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaWJfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pYnJlZzsKKworCXJldCA9IHJkc19pYl9yZWN2X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisKKwlyZXQgPSByZHNfdHJhbnNfcmVnaXN0ZXIoJnJkc19pYl90cmFuc3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlY3Y7CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TLCByZHNfaWJfaWNfaW5mbyk7CisKKwlnb3RvIG91dDsKKworb3V0X3JlY3Y6CisJcmRzX2liX3JlY3ZfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfaWJfc3lzY3RsX2V4aXQoKTsKK291dF9pYnJlZzoKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmggYi9uZXQvcmRzL2liLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlNTYzYQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWIuaApAQCAtMCwwICsxLDM2NyBAQAorI2lmbmRlZiBfUkRTX0lCX0gKKyNkZWZpbmUgX1JEU19JQl9ICisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworI2RlZmluZSBSRFNfRk1SX1NJWkUJCQkyNTYKKyNkZWZpbmUgUkRTX0ZNUl9QT09MX1NJWkUJCTQwOTYKKworI2RlZmluZSBSRFNfSUJfTUFYX1NHRQkJCTgKKyNkZWZpbmUgUkRTX0lCX1JFQ1ZfU0dFIAkJMgorCisjZGVmaW5lIFJEU19JQl9ERUZBVUxUX1JFQ1ZfV1IJCTEwMjQKKyNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfU0VORF9XUgkJMjU2CisKKyNkZWZpbmUgUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFMJMHgwMDAwMDAwMwkvKiBtaW5vciB2ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CisKKy8qCisgKiBJQiBwb3N0cyBSRFNfRlJBR19TSVpFIGZyYWdtZW50cyBvZiBwYWdlcyB0byB0aGUgcmVjZWl2ZSBxdWV1ZXMgdG8KKyAqIHRyeSBhbmQgbWluaW1pemUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGllZCB1cCBib3RoIHRoZSBkZXZpY2UgYW5kCisgKiBzb2NrZXQgcmVjZWl2ZSBxdWV1ZXMuCisgKi8KKy8qIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmaW5hbCBmdWxsIGZyYWcgdGhhdCBmaXRzIGluIHRoZSBwYWdlICovCisjZGVmaW5lIFJEU19QQUdFX0xBU1RfT0ZGICgoKFBBR0VfU0laRSAgLyBSRFNfRlJBR19TSVpFKSAtIDEpICogUkRTX0ZSQUdfU0laRSkKK3N0cnVjdCByZHNfcGFnZV9mcmFnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZfaXRlbTsKKwlzdHJ1Y3QgcGFnZQkJKmZfcGFnZTsKKwl1bnNpZ25lZCBsb25nCQlmX29mZnNldDsKKwlkbWFfYWRkcl90IAkJZl9tYXBwZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2liX2luY29taW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlpX2ZyYWdzOworCXN0cnVjdCByZHNfaW5jb21pbmcJaWlfaW5jOworfTsKKworc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgeworCS8qIEFkZCBuZXcgZmllbGRzIGF0IHRoZSBlbmQsIGFuZCBkb24ndCBwZXJtdXRlIGV4aXN0aW5nIGZpZWxkcy4gKi8KKwlfX2JlMzIJCQlkcF9zYWRkcjsKKwlfX2JlMzIJCQlkcF9kYWRkcjsKKwl1OAkJCWRwX3Byb3RvY29sX21ham9yOworCXU4CQkJZHBfcHJvdG9jb2xfbWlub3I7CisJX19iZTE2CQkJZHBfcHJvdG9jb2xfbWlub3JfbWFzazsgLyogYml0bWFzayAqLworCV9fYmUzMgkJCWRwX3Jlc2VydmVkMTsKKwlfX2JlNjQJCQlkcF9hY2tfc2VxOworCV9fYmUzMgkJCWRwX2NyZWRpdDsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZmxvdyBjdGwgKi8KK307CisKK3N0cnVjdCByZHNfaWJfc2VuZF93b3JrIHsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKnNfcm07CisJc3RydWN0IHJkc19yZG1hX29wCSpzX29wOworCXN0cnVjdCBpYl9zZW5kX3dyCXNfd3I7CisJc3RydWN0IGliX3NnZQkJc19zZ2VbUkRTX0lCX01BWF9TR0VdOworCXVuc2lnbmVkIGxvbmcJCXNfcXVldWVkOworfTsKKworc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgeworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgCSpyX2liaW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCSpyX2ZyYWc7CisJc3RydWN0IGliX3JlY3Zfd3IJcl93cjsKKwlzdHJ1Y3QgaWJfc2dlCQlyX3NnZVsyXTsKK307CisKK3N0cnVjdCByZHNfaWJfd29ya19yaW5nIHsKKwl1MzIJCXdfbnI7CisJdTMyCQl3X2FsbG9jX3B0cjsKKwl1MzIJCXdfYWxsb2NfY3RyOworCXUzMgkJd19mcmVlX3B0cjsKKwlhdG9taWNfdAl3X2ZyZWVfY3RyOworfTsKKworc3RydWN0IHJkc19pYl9kZXZpY2U7CisKK3N0cnVjdCByZHNfaWJfY29ubmVjdGlvbiB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWliX25vZGU7CisJc3RydWN0IHJkc19pYl9kZXZpY2UJKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKmNvbm47CisKKwkvKiBhbHBoYWJldCBzb3VwLCBJQlRBIHN0eWxlICovCisJc3RydWN0IHJkbWFfY21faWQJKmlfY21faWQ7CisJc3RydWN0IGliX3BkCQkqaV9wZDsKKwlzdHJ1Y3QgaWJfbXIJCSppX21yOworCXN0cnVjdCBpYl9jcQkJKmlfc2VuZF9jcTsKKwlzdHJ1Y3QgaWJfY3EJCSppX3JlY3ZfY3E7CisKKwkvKiB0eCAqLworCXN0cnVjdCByZHNfaWJfd29ya19yaW5nCWlfc2VuZF9yaW5nOworCXN0cnVjdCByZHNfbWVzc2FnZQkqaV9ybTsKKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9zZW5kX2hkcnM7CisJdTY0CQkJaV9zZW5kX2hkcnNfZG1hOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICppX3NlbmRzOworCisJLyogcnggKi8KKwlzdHJ1Y3QgbXV0ZXgJCWlfcmVjdl9tdXRleDsKKwlzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZwlpX3JlY3ZfcmluZzsKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nCSppX2liaW5jOworCXUzMgkJCWlfcmVjdl9kYXRhX3JlbTsKKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9yZWN2X2hkcnM7CisJdTY0CQkJaV9yZWN2X2hkcnNfZG1hOworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICppX3JlY3ZzOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCWlfZnJhZzsKKwl1NjQJCQlpX2Fja19yZWN2OwkvKiBsYXN0IEFDSyByZWNlaXZlZCAqLworCisJLyogc2VuZGluZyBhY2tzICovCisJdW5zaWduZWQgbG9uZwkJaV9hY2tfZmxhZ3M7CisJdTY0CQkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworCXN0cnVjdCByZHNfaGVhZGVyCSppX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93cglpX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlCQlpX2Fja19zZ2U7CisJdTY0CQkJaV9hY2tfZG1hOworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX3F1ZXVlZDsKKworCS8qIEZsb3cgY29udHJvbCByZWxhdGVkIGluZm9ybWF0aW9uCisJICoKKwkgKiBPdXIgYWxnb3JpdGhtIHVzZXMgYSBwYWlyIHZhcmlhYmxlcyB0aGF0IHdlIG5lZWQgdG8gYWNjZXNzCisJICogYXRvbWljYWxseSAtIG9uZSBmb3IgdGhlIHNlbmQgY3JlZGl0cywgYW5kIG9uZSBwb3N0ZWQKKwkgKiByZWN2IGNyZWRpdHMgd2UgbmVlZCB0byB0cmFuc2ZlciB0byByZW1vdGUuCisJICogUmF0aGVyIHRoYW4gcHJvdGVjdCB0aGVtIHVzaW5nIGEgc2xvdyBzcGlubG9jaywgd2UgcHV0IGJvdGggaW50bworCSAqIGEgc2luZ2xlIGF0b21pY190IGFuZCB1cGRhdGUgaXQgdXNpbmcgY21weGNoZworCSAqLworCWF0b21pY190CQlpX2NyZWRpdHM7CisKKwkvKiBQcm90b2NvbCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgaW50CQlpX2Zsb3djdGw6MTsJLyogZW5hYmxlL2Rpc2FibGUgZmxvdyBjdGwgKi8KKworCS8qIEJhdGNoZWQgY29tcGxldGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQJCWlfdW5zaWduYWxlZF93cnM7CisJbG9uZwkJCWlfdW5zaWduYWxlZF9ieXRlczsKK307CisKKy8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNkZWZpbmUgSUJfR0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9HRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPj4gMTYpCisjZGVmaW5lIElCX1NFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfU0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpIDw8IDE2KQorCitzdHJ1Y3QgcmRzX2liX2lwYWRkciB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCV9fYmUzMgkJCWlwYWRkcjsKK307CisKK3N0cnVjdCByZHNfaWJfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlpcGFkZHJfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbm5fbGlzdDsKKwlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXY7CisJc3RydWN0IGliX3BkCQkqcGQ7CisJc3RydWN0IGliX21yCQkqbXI7CisJc3RydWN0IHJkc19pYl9tcl9wb29sCSptcl9wb29sOworCWludAkJCWZtcl9wYWdlX3NoaWZ0OworCWludAkJCWZtcl9wYWdlX3NpemU7CisJdTY0CQkJZm1yX3BhZ2VfbWFzazsKKwl1bnNpZ25lZCBpbnQJCWZtcl9tYXhfcmVtYXBzOworCXVuc2lnbmVkIGludAkJbWF4X2ZtcnM7CisJaW50CQkJbWF4X3NnZTsKKwl1bnNpZ25lZCBpbnQJCW1heF93cnM7CisJc3BpbmxvY2tfdAkJc3BpbmxvY2s7CS8qIHByb3RlY3QgdGhlIGFib3ZlICovCit9OworCisvKiBiaXRzIGZvciBpX2Fja19mbGFncyAqLworI2RlZmluZSBJQl9BQ0tfSU5fRkxJR0hUCTAKKyNkZWZpbmUgSUJfQUNLX1JFUVVFU1RFRAkxCisKKy8qIE1hZ2ljIFdSX0lEIGZvciBBQ0tzICovCisjZGVmaW5lIFJEU19JQl9BQ0tfV1JfSUQJKH4odTY0KSAwKQorCitzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfaWJfY29ubmVjdF9yYWNlZDsKKwl1aW50NjRfdAlzX2liX2xpc3Rlbl9jbG9zZWRfc3RhbGU7CisJdWludDY0X3QJc19pYl90eF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaWJfdHhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pYl90eF9yaW5nX2Z1bGw7CisJdWludDY0X3QJc19pYl90eF90aHJvdHRsZTsKKwl1aW50NjRfdAlzX2liX3R4X3NnX21hcHBpbmdfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2liX3R4X3N0YWxsZWQ7CisJdWludDY0X3QJc19pYl90eF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2liX3J4X2NxX2NhbGw7CisJdWludDY0X3QJc19pYl9yeF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2liX3J4X3JpbmdfZW1wdHk7CisJdWludDY0X3QJc19pYl9yeF9yZWZpbGxfZnJvbV9jcTsKKwl1aW50NjRfdAlzX2liX3J4X3JlZmlsbF9mcm9tX3RocmVhZDsKKwl1aW50NjRfdAlzX2liX3J4X2FsbG9jX2xpbWl0OworCXVpbnQ2NF90CXNfaWJfcnhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pYl9hY2tfc2VudDsKKwl1aW50NjRfdAlzX2liX2Fja19zZW5kX2ZhaWx1cmU7CisJdWludDY0X3QJc19pYl9hY2tfc2VuZF9kZWxheWVkOworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbmRfcGlnZ3liYWNrZWQ7CisJdWludDY0X3QJc19pYl9hY2tfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19pYl9yZG1hX21yX2FsbG9jOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9mcmVlOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl91c2VkOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9wb29sX2ZsdXNoOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9wb29sX3dhaXQ7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3Bvb2xfZGVwbGV0ZWQ7Cit9OworCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc19pYl93cTsKKworLyoKKyAqIEZha2UgaWJfZG1hX3N5bmNfc2dfZm9yX3tjcHUsZGV2aWNlfSBhcyBsb25nIGFzIGliX3ZlcmJzLmgKKyAqIGRvZXNuJ3QgZGVmaW5lIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQlyZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlyZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQorCisKKy8qIGliLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0OworZXh0ZXJuIHZvaWQgcmRzX2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIHJkc19pYl9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gc3RydWN0IGliX2NsaWVudCByZHNfaWJfY2xpZW50OworCitleHRlcm4gdW5zaWduZWQgaW50IGZtcl9wb29sX3NpemU7CitleHRlcm4gdW5zaWduZWQgaW50IGZtcl9tZXNzYWdlX3NpemU7CisKK2V4dGVybiBzcGlubG9ja190IGliX25vZGV2X2Nvbm5zX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpYl9ub2Rldl9jb25uczsKKworLyogaWJfY20uYyAqLworaW50IHJkc19pYl9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpOworaW50IHJkc19pYl9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spOworaW50IF9faW5pdCByZHNfaWJfbGlzdGVuX2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9saXN0ZW5fc3RvcCh2b2lkKTsKK3ZvaWQgX19yZHNfaWJfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworaW50IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7Cit2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisKKyNkZWZpbmUgcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfaWJfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUy9JQjogIiBmbXQpCisKKy8qIGliX3JkbWEuYyAqLworaW50IHJkc19pYl91cGRhdGVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpOworaW50IHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpOwordm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpOworc3RydWN0IHJkc19pYl9tcl9wb29sICpyZHNfaWJfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pYl9kZXZpY2UgKik7Cit2b2lkIHJkc19pYl9nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyk7Cit2b2lkIHJkc19pYl9kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICopOwordm9pZCAqcmRzX2liX2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KTsKK3ZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcik7Cit2b2lkIHJkc19pYl9mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKTsKK3ZvaWQgcmRzX2liX2ZsdXNoX21ycyh2b2lkKTsKKworLyogaWJfcmVjdi5jICovCitpbnQgX19pbml0IHJkc19pYl9yZWN2X2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9yZWN2X2V4aXQodm9pZCk7CitpbnQgcmRzX2liX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCk7Cit2b2lkIHJkc19pYl9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2liX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CitpbnQgcmRzX2liX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpOwordm9pZCByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pYl9yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordTY0IHJkc19pYl9waWdneWJfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOworCisvKiBpYl9yaW5nLmMgKi8KK3ZvaWQgcmRzX2liX3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3ZvaWQgcmRzX2liX3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordTMyIHJkc19pYl9yaW5nX2FsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcyk7Cit2b2lkIHJkc19pYl9yaW5nX2ZyZWUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOwordm9pZCByZHNfaWJfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK2ludCByZHNfaWJfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZyk7CitpbnQgcmRzX2liX3JpbmdfbG93KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaWJfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pYl9yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KTsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfaWJfcmluZ19lbXB0eV93YWl0OworCisvKiBpYl9zZW5kLmMgKi8KK3ZvaWQgcmRzX2liX3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaWJfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOwordm9pZCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pYl9zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK2ludCByZHNfaWJfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7Cit2b2lkIHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpOwordm9pZCByZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKTsKK2ludCByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdTMyIHdhbnRlZCwKKwkJCSAgICAgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKTsKKworLyogaWJfc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfaWJfc3RhdGlzdGljcywgcmRzX2liX3N0YXRzKTsKKyNkZWZpbmUgcmRzX2liX3N0YXRzX2luYyhtZW1iZXIpIHJkc19zdGF0c19pbmNfd2hpY2gocmRzX2liX3N0YXRzLCBtZW1iZXIpCit1bnNpZ25lZCBpbnQgcmRzX2liX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CisKKy8qIGliX3N5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19pYl9zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2w7CitleHRlcm4gY3RsX3RhYmxlIHJkc19pYl9zeXNjdGxfdGFibGVbXTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgaGVhZGVyIGFuZCBkYXRhIFNHRXMgaW4KKyAqIFJEUyBwYWNrZXRzIChub3QgUkRNQSkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pYl9oZWFkZXJfc2dlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVswXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pYl9kYXRhX3NnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQoreworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKwkqcHRyID0gdmFsOworI2Vsc2UKKwlzZXRfNjRiaXQocHRyLCB2YWwpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MzIyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX2NtLmMKQEAgLTAsMCArMSw3MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworLyoKKyAqIFNldCB0aGUgc2VsZWN0ZWQgcHJvdG9jb2wgdmVyc2lvbgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJY29ubi0+Y192ZXJzaW9uID0gdmVyc2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBmbG93IGNvbnRyb2wKKyAqLworc3RhdGljIHZvaWQgcmRzX2liX3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChyZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCAmJiBjcmVkaXRzICE9IDApIHsKKwkJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sICovCisJCWljLT5pX2Zsb3djdGwgPSAxOworCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRzKTsKKwl9IGVsc2UgeworCQlpYy0+aV9mbG93Y3RsID0gMDsKKwl9Cit9CisKKy8qCisgKiBUdW5lIFJOUiBiZWhhdmlvci4gV2l0aG91dCBmbG93IGNvbnRyb2wsIHdlIHVzZSBhIHJhdGhlcgorICogbG93IHRpbWVvdXQsIGJ1dCBub3QgdGhlIGFic29sdXRlIG1pbmltdW0gLSB0aGlzIHNob3VsZAorICogYmUgdHVuYWJsZS4KKyAqCisgKiBXZSBhbHJlYWR5IHNldCB0aGUgUk5SIHJldHJ5IGNvdW50IHRvIDcgKHdoaWNoIGlzIHRoZQorICogc21hbGxlc3QgaW5maW5pdGUgbnVtYmVyIDotKSBhYm92ZS4KKyAqIElmIGZsb3cgY29udHJvbCBpcyBvZmYsIHdlIHdhbnQgdG8gY2hhbmdlIHRoaXMgYmFjayB0byAwCisgKiBzbyB0aGF0IHdlIGxlYXJuIHF1aWNrbHkgd2hlbiBvdXIgY3JlZGl0IGFjY291bnRpbmcgaXMKKyAqIGJ1Z2d5LgorICoKKyAqIENhbGxlciBwYXNzZXMgaW4gYSBxcF9hdHRyIHBvaW50ZXIgLSBkb24ndCB3YXN0ZSBzdGFjayBzcGFjdgorICogYnkgYWxsb2NhdGlvbiB0aGlzIHR3aWNlLgorICovCitzdGF0aWMgdm9pZAorcmRzX2liX3R1bmVfcm5yKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyKQoreworCWludCByZXQ7CisKKwlhdHRyLT5taW5fcm5yX3RpbWVyID0gSUJfUk5SX1RJTUVSXzAwMF8zMjsKKwlyZXQgPSBpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCBhdHRyLCBJQl9RUF9NSU5fUk5SX1RJTUVSKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9OT1RJQ0UgImliX21vZGlmeV9xcChJQl9RUF9NSU5fUk5SX1RJTUVSKTogZXJyPSVkXG4iLCAtcmV0KTsKK30KKworLyoKKyAqIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuCisgKiBXZSBnZXQgaGVyZSBmb3IgYm90aCBvdXRnb2luZyBhbmQgaW5jb21pbmcgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwljb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBOVUxMOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKwlpbnQgZXJyOworCisJaWYgKGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4pIHsKKwkJZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisKKwkJcmRzX2liX3NldF9wcm90b2NvbChjb25uLAorCQkJCVJEU19QUk9UT0NPTChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQkJCWRwLT5kcF9wcm90b2NvbF9taW5vcikpOworCQlyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisJfQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSUI6IGNvbm5lY3RlZCB0byAlcEk0IHZlcnNpb24gJXUuJXUlc1xuIiwKKwkJCSZjb25uLT5jX2xhZGRyLAorCQkJUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCWljLT5pX2Zsb3djdGwgPyAiLCBmbG93IGNvbnRyb2wiIDogIiIpOworCisJLyogVHVuZSBSTlIgYmVoYXZpb3IgKi8KKwlyZHNfaWJfdHVuZV9ybnIoaWMsICZxcF9hdHRyKTsKKworCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfUlRTOworCWVyciA9IGliX21vZGlmeV9xcChpYy0+aV9jbV9pZC0+cXAsICZxcF9hdHRyLCBJQl9RUF9TVEFURSk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJpYl9tb2RpZnlfcXAoSUJfUVBfU1RBVEUsIFJUUyk6IGVycj0lZFxuIiwgZXJyKTsKKworCS8qIHVwZGF0ZSBpYl9kZXZpY2Ugd2l0aCB0aGlzIGxvY2FsIGlwYWRkciAmIGNvbm4gKi8KKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pYl9jbGllbnQpOworCWVyciA9IHJkc19pYl91cGRhdGVfaXBhZGRyKHJkc19pYmRldiwgY29ubi0+Y19sYWRkcik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwllcnIgPSByZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pYl9hZGRfY29ubiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwICYmIGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlyZHNfY29ubmVjdF9jb21wbGV0ZShjb25uKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLAorCQkJc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwLAorCQkJdTMyIHByb3RvY29sX3ZlcnNpb24pCit7CisJbWVtc2V0KGNvbm5fcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtKSk7CisJLyogWFhYIHR1bmUgdGhlc2U/ICovCisJY29ubl9wYXJhbS0+cmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJY29ubl9wYXJhbS0+aW5pdGlhdG9yX2RlcHRoID0gMTsKKwljb25uX3BhcmFtLT5yZXRyeV9jb3VudCA9IDc7CisJY29ubl9wYXJhbS0+cm5yX3JldHJ5X2NvdW50ID0gNzsKKworCWlmIChkcCkgeworCQlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCQltZW1zZXQoZHAsIDAsIHNpemVvZigqZHApKTsKKwkJZHAtPmRwX3NhZGRyID0gY29ubi0+Y19sYWRkcjsKKwkJZHAtPmRwX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKwkJZHAtPmRwX3Byb3RvY29sX21ham9yID0gUkRTX1BST1RPQ09MX01BSk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IgPSBSRFNfUFJPVE9DT0xfTUlOT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrID0gY3B1X3RvX2JlMTYoUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFMpOworCQlkcC0+ZHBfYWNrX3NlcSA9IHJkc19pYl9waWdneWJfYWNrKGljKTsKKworCQkvKiBBZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisJCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCQl1bnNpZ25lZCBpbnQgY3JlZGl0czsKKworCQkJY3JlZGl0cyA9IElCX0dFVF9QT1NUX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKTsKKwkJCWRwLT5kcF9jcmVkaXQgPSBjcHVfdG9fYmUzMihjcmVkaXRzKTsKKwkJCWF0b21pY19zdWIoSUJfU0VUX1BPU1RfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCQl9CisKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhID0gZHA7CisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gPSBzaXplb2YoKmRwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9jcV9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJcmRzZGVidWcoImV2ZW50ICV1IGRhdGEgJXBcbiIsIGV2ZW50LT5ldmVudCwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9xcF9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc2RlYnVnKCJjb25uICVwIGljICVwIGV2ZW50ICV1XG4iLCBjb25uLCBpYywgZXZlbnQtPmV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBJQl9FVkVOVF9DT01NX0VTVDoKKwkJcmRtYV9ub3RpZnkoaWMtPmlfY21faWQsIElCX0VWRU5UX0NPTU1fRVNUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL2liOiB1bmhhbmRsZWQgUVAgZXZlbnQgJXUgIgorCQkgICAgICAgIm9uIGNvbm5lY3Rpb24gdG8gJXBJNFxuIiwgZXZlbnQtPmV2ZW50LAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBub3QgbGVhdmUgSVNfRVJSIHBvaW50ZXJzIGFyb3VuZCBmb3IKKyAqIGNsZWFudXAgdG8gdHJpcCBvdmVyLgorICovCitzdGF0aWMgaW50IHJkc19pYl9zZXR1cF9xcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyIGF0dHI7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlpbnQgcmV0OworCisJLyogcmRzX2liX2FkZF9vbmUgY3JlYXRlcyBhIHJkc19pYl9kZXZpY2Ugb2JqZWN0IHBlciBJQiBkZXZpY2UsCisJICogYW5kIGFsbG9jYXRlcyBhIHByb3RlY3Rpb24gZG9tYWluLCBtZW1vcnkgcmFuZ2UgYW5kIEZNUiBwb29sCisJICogZm9yIGVhY2guICBJZiB0aGF0IGZhaWxzIGZvciBhbnkgcmVhc29uLCBpdCB3aWxsIG5vdCByZWdpc3RlcgorCSAqIHRoZSByZHNfaWJkZXYgYXQgYWxsLgorCSAqLworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXYsICZyZHNfaWJfY2xpZW50KTsKKwlpZiAocmRzX2liZGV2ID09IE5VTEwpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lCOiBObyBjbGllbnRfZGF0YSBmb3IgZGV2aWNlICVzXG4iLAorCQkJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKHJkc19pYmRldi0+bWF4X3dycyA8IGljLT5pX3NlbmRfcmluZy53X25yICsgMSkKKwkJcmRzX2liX3JpbmdfcmVzaXplKCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pYmRldi0+bWF4X3dycyAtIDEpOworCWlmIChyZHNfaWJkZXYtPm1heF93cnMgPCBpYy0+aV9yZWN2X3Jpbmcud19uciArIDEpCisJCXJkc19pYl9yaW5nX3Jlc2l6ZSgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaWJkZXYtPm1heF93cnMgLSAxKTsKKworCS8qIFByb3RlY3Rpb24gZG9tYWluIGFuZCBtZW1vcnkgcmFuZ2UgKi8KKwlpYy0+aV9wZCA9IHJkc19pYmRldi0+cGQ7CisJaWMtPmlfbXIgPSByZHNfaWJkZXYtPm1yOworCisJaWMtPmlfc2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJkc19pYl9zZW5kX2NxX2NvbXBfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pYl9jcV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKyAxLCAwKTsKKwlpZiAoSVNfRVJSKGljLT5pX3NlbmRfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfc2VuZF9jcSk7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pYl9jcV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgaWMtPmlfcmVjdl9yaW5nLndfbnIsIDApOworCWlmIChJU19FUlIoaWMtPmlfcmVjdl9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9yZWN2X2NxKTsKKwkJaWMtPmlfcmVjdl9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3EgcmVjdiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGljLT5pX3NlbmRfY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoaWMtPmlfcmVjdl9jcSwgSUJfQ1FfU09MSUNJVEVEKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogWFhYIG5lZ290aWF0ZSBtYXggc2VuZC9yZWN2IHdpdGggcmVtb3RlPyAqLworCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKKwlhdHRyLmV2ZW50X2hhbmRsZXIgPSByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcjsKKwlhdHRyLnFwX2NvbnRleHQgPSBjb25uOworCS8qICsgMSB0byBhbGxvdyBmb3IgdGhlIHNpbmdsZSBhY2sgbWVzc2FnZSAqLworCWF0dHIuY2FwLm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnIgKyAxOworCWF0dHIuY2FwLm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnIgKyAxOworCWF0dHIuY2FwLm1heF9zZW5kX3NnZSA9IHJkc19pYmRldi0+bWF4X3NnZTsKKwlhdHRyLmNhcC5tYXhfcmVjdl9zZ2UgPSBSRFNfSUJfUkVDVl9TR0U7CisJYXR0ci5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9SRVFfV1I7CisJYXR0ci5xcF90eXBlID0gSUJfUVBUX1JDOworCWF0dHIuc2VuZF9jcSA9IGljLT5pX3NlbmRfY3E7CisJYXR0ci5yZWN2X2NxID0gaWMtPmlfcmVjdl9jcTsKKworCS8qCisJICogWFhYIHRoaXMgY2FuIGZhaWwgaWYgbWF4Xypfd3IgaXMgdG9vIGxhcmdlPyAgQXJlIHdlIHN1cHBvc2VkCisJICogdG8gYmFjayBvZmYgdW50aWwgd2UgZ2V0IGEgdmFsdWUgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQ/CisJICovCisJcmV0ID0gcmRtYV9jcmVhdGVfcXAoaWMtPmlfY21faWQsIGljLT5pX3BkLCAmYXR0cik7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfcXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZF9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3NlbmRfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9zZW5kX2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHNlbmQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3JlY3ZfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9yZWN2X2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHJlY3YgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfYWNrID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkgICAgICAgJmljLT5pX2Fja19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9hY2sgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IGFjayBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kcyA9IHZtYWxsb2MoaWMtPmlfc2VuZF9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pYl9zZW5kX3dvcmspKTsKKwlpZiAoaWMtPmlfc2VuZHMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1Zygic2VuZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpOworCisJaWMtPmlfcmVjdnMgPSB2bWFsbG9jKGljLT5pX3JlY3ZfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaWJfcmVjdl93b3JrKSk7CisJaWYgKGljLT5pX3JlY3ZzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInJlY3YgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpOworCXJkc19pYl9yZWN2X2luaXRfYWNrKGljKTsKKworCS8qIFBvc3QgcmVjZWl2ZSBidWZmZXJzIC0gYXMgYSBzaWRlIGVmZmVjdCwgdGhpcyB3aWxsIHVwZGF0ZQorCSAqIHRoZSBwb3N0ZWQgY3JlZGl0IGNvdW50LiAqLworCXJkc19pYl9yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDEpOworCisJcmRzZGVidWcoImNvbm4gJXAgcGQgJXAgbXIgJXAgY3EgJXAgJXBcbiIsIGNvbm4sIGljLT5pX3BkLCBpYy0+aV9tciwKKwkJIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHApCit7CisJdTE2IGNvbW1vbjsKKwl1MzIgdmVyc2lvbiA9IDA7CisKKwkvKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCisJICogcmVxdWVzdCwgd2Ugd2lsbCBiZSBnaXZlbiBhIHByZXR0eSBsYXJnZSBidWZmZXIgd2l0aG91dCB0ZWxsaW5nIHVzIHRoZQorCSAqIG9yaWdpbmFsIHNpemUuIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGlzIGJ5IGxvb2tpbmcgYXQKKwkgKiB0aGUgY29udGVudHMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqIElmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkcyBhcmVuJ3Qgc2V0LCB0aGlzIGlzIGEgY29ubmVjdGlvbiBhdHRlbXB0CisJICogZnJvbSBhbiBvbGRlciB2ZXJzaW9uLiBUaGlzIGNvdWxkIGNvdWxkIGJlIDMuMCBvciAyLjAgLSB3ZSBjYW4ndCB0ZWxsLgorCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKCAqLworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMCkKKwkJcmV0dXJuIFJEU19QUk9UT0NPTF8zXzA7CisKKwljb21tb24gPSBiZTE2X3RvX2NwdShkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzaykgJiBSRFNfSUJfU1VQUE9SVEVEX1BST1RPQ09MUzsKKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDMgJiYgY29tbW9uKSB7CisJCXZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCQl3aGlsZSAoKGNvbW1vbiA+Pj0gMSkgIT0gMCkKKwkJCXZlcnNpb24rKzsKKwl9IGVsc2UgaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUzogQ29ubmVjdGlvbiBmcm9tICVwSTQgdXNpbmcgIgorCQkJImluY29tcGF0aWJsZSBwcm90b2NvbCB2ZXJzaW9uICV1LiV1XG4iLAorCQkJJmRwLT5kcF9zYWRkciwKKwkJCWRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCWRwLT5kcF9wcm90b2NvbF9taW5vcik7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCitpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCV9fYmU2NCBsZ3VpZCA9IGNtX2lkLT5yb3V0ZS5wYXRoX3JlYy0+c2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkOworCV9fYmU2NCBmZ3VpZCA9IGNtX2lkLT5yb3V0ZS5wYXRoX3JlYy0+ZGdpZC5nbG9iYWwuaW50ZXJmYWNlX2lkOworCWNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSBkcF9yZXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gTlVMTDsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJdTMyIHZlcnNpb247CisJaW50IGVyciwgZGVzdHJveSA9IDE7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgcHJvdG9jb2wgdmVyc2lvbiBtYXRjaGVzIG91cnMuICovCisJdmVyc2lvbiA9IHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGRwKTsKKwlpZiAoIXZlcnNpb24pCisJCWdvdG8gb3V0OworCisJcmRzZGVidWcoInNhZGRyICVwSTQgZGFkZHIgJXBJNCBSRFN2JXUuJXUgbGd1aWQgMHglbGx4IGZndWlkICIKKwkJICIweCVsbHhcbiIsICZkcC0+ZHBfc2FkZHIsICZkcC0+ZHBfZGFkZHIsCisJCSBSRFNfUFJPVE9DT0xfTUFKT1IodmVyc2lvbiksIFJEU19QUk9UT0NPTF9NSU5PUih2ZXJzaW9uKSwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUobGd1aWQpLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShmZ3VpZCkpOworCisJY29ubiA9IHJkc19jb25uX2NyZWF0ZShkcC0+ZHBfZGFkZHIsIGRwLT5kcF9zYWRkciwgJnJkc19pYl90cmFuc3BvcnQsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjb25uKSkgeworCQlyZHNkZWJ1ZygicmRzX2Nvbm5fY3JlYXRlIGZhaWxlZCAoJWxkKVxuIiwgUFRSX0VSUihjb25uKSk7CisJCWNvbm4gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoZSBjb25uZWN0aW9uIHJlcXVlc3QgbWF5IG9jY3VyIHdoaWxlIHRoZQorCSAqIHByZXZpb3VzIGNvbm5lY3Rpb24gZXhpc3QsIGUuZy4gaW4gY2FzZSBvZiBmYWlsb3Zlci4KKwkgKiBCdXQgYXMgY29ubmVjdGlvbnMgbWF5IGJlIGluaXRpYXRlZCBzaW11bHRhbmVvdXNseQorCSAqIGJ5IGJvdGggaG9zdHMsIHdlIGhhdmUgYSByYW5kb20gYmFja29mZiBtZWNoYW5pc20gLQorCSAqIHNlZSB0aGUgY29tbWVudCBhYm92ZSByZHNfcXVldWVfcmVjb25uZWN0KCkKKwkgKi8KKwltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJCXJkc2RlYnVnKCJpbmNvbWluZyBjb25uZWN0IHdoaWxlIGNvbm5lY3RpbmdcbiIpOworCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlKTsKKwkJfSBlbHNlCisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HKSB7CisJCQkvKiBXYWl0IGFuZCBzZWUgLSBvdXIgY29ubmVjdCBtYXkgc3RpbGwgYmUgc3VjY2VlZGluZyAqLworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Nvbm5lY3RfcmFjZWQpOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzX2liX3NldF9wcm90b2NvbChjb25uLCB2ZXJzaW9uKTsKKwlyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJQlVHX09OKGNtX2lkLT5jb250ZXh0KTsKKwlCVUdfT04oaWMtPmlfY21faWQpOworCisJaWMtPmlfY21faWQgPSBjbV9pZDsKKwljbV9pZC0+Y29udGV4dCA9IGNvbm47CisKKwkvKiBXZSBnb3QgaGFsZndheSB0aHJvdWdoIHNldHRpbmcgdXAgdGhlIGliX2Nvbm5lY3Rpb24sIGlmIHdlCisJICogZmFpbCBub3csIHdlIGhhdmUgdG8gdGFrZSB0aGUgbG9uZyByb3V0ZSBvdXQgb2YgdGhpcyBtZXNzLiAqLworCWRlc3Ryb3kgPSAwOworCisJZXJyID0gcmRzX2liX3NldHVwX3FwKGNvbm4pOworCWlmIChlcnIpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwX3JlcCwgdmVyc2lvbik7CisKKwkvKiByZG1hX2FjY2VwdCgpIGNhbGxzIHJkbWFfcmVqZWN0KCkgaW50ZXJuYWxseSBpZiBpdCBmYWlscyAqLworCWVyciA9IHJkbWFfYWNjZXB0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmIChlcnIpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfYWNjZXB0IGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCXJkbWFfcmVqZWN0KGNtX2lkLCBOVUxMLCAwKTsKKwlyZXR1cm4gZGVzdHJveTsKK30KKworCitpbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNtX2lkLT5jb250ZXh0OworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSBkcDsKKwlpbnQgcmV0OworCisJLyogSWYgdGhlIHBlZXIgZG9lc24ndCBkbyBwcm90b2NvbCBuZWdvdGlhdGlvbiwgd2UgbXVzdAorCSAqIGRlZmF1bHQgdG8gUkRTdjMuMCAqLworCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MXzNfMCk7CisJaWMtPmlfZmxvd2N0bCA9IHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sOwkvKiBhZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisKKwlyZXQgPSByZHNfaWJfc2V0dXBfcXAoY29ubik7CisJaWYgKHJldCkgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRzX2liX3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHAsIFJEU19QUk9UT0NPTF9WRVJTSU9OKTsKKworCXJldCA9IHJkbWFfY29ubmVjdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCWlmIChyZXQpCisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZG1hX2Nvbm5lY3QgZmFpbGVkICglZClcbiIsIHJldCk7CisKK291dDoKKwkvKiBCZXdhcmUgLSByZXR1cm5pbmcgbm9uLXplcm8gdGVsbHMgdGhlIHJkbWFfY20gdG8gZGVzdHJveQorCSAqIHRoZSBjbV9pZC4gV2Ugc2hvdWxkIGNlcnRhaW5seSBub3QgZG8gaXQgYXMgbG9uZyBhcyB3ZSBzdGlsbAorCSAqICJvd24iIHRoZSBjbV9pZC4gKi8KKwlpZiAocmV0KSB7CisJCWlmIChpYy0+aV9jbV9pZCA9PSBjbV9pZCkKKwkJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfaWJfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkZXN0OworCWludCByZXQ7CisKKwkvKiBYWFggSSB3b25kZXIgd2hhdCBhZmZlY3QgdGhlIHBvcnQgc3BhY2UgaGFzICovCisJLyogZGVsZWdhdGUgY20gZXZlbnQgaGFuZGxlciB0byByZG1hX3RyYW5zcG9ydCAqLworCWljLT5pX2NtX2lkID0gcmRtYV9jcmVhdGVfaWQocmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGljLT5pX2NtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfaWQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY3JlYXRlZCBjbSBpZCAlcCBmb3IgY29ubiAlcFxuIiwgaWMtPmlfY21faWQsIGNvbm4pOworCisJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNyYy5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19sYWRkcjsKKwlzcmMuc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoMCk7CisKKwlkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWRlc3Quc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfZmFkZHI7CisJZGVzdC5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwlyZXQgPSByZG1hX3Jlc29sdmVfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LAorCQkJCVJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiYWRkciByZXNvbHZlIGZhaWxlZCBmb3IgY20gaWQgJXA6ICVkXG4iLCBpYy0+aV9jbV9pZCwKKwkJCSByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgc28gY2FyZWZ1bCBhYm91dCBvbmx5IGNsZWFuaW5nIHVwIHJlc291cmNlcyB0aGF0IHdlcmUgYnVpbHQgdXAKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHN0YXJ0dXAuICBJbiBmYWN0IGl0CisgKiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCBlcnIgPSAwOworCisJcmRzZGVidWcoImNtICVwIHBkICVwIGNxICVwICVwIHFwICVwXG4iLCBpYy0+aV9jbV9pZCwKKwkJIGljLT5pX3BkLCBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxLAorCQkgaWMtPmlfY21faWQgPyBpYy0+aV9jbV9pZC0+cXAgOiBOVUxMKTsKKworCWlmIChpYy0+aV9jbV9pZCkgeworCQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCisJCXJkc2RlYnVnKCJkaXNjb25uZWN0aW5nIGNtICVwXG4iLCBpYy0+aV9jbV9pZCk7CisJCWVyciA9IHJkbWFfZGlzY29ubmVjdChpYy0+aV9jbV9pZCk7CisJCWlmIChlcnIpIHsKKwkJCS8qIEFjdHVhbGx5IHRoaXMgbWF5IGhhcHBlbiBxdWl0ZSBmcmVxdWVudGx5LCB3aGVuCisJCQkgKiBhbiBvdXRnb2luZyBjb25uZWN0IHJhY2VkIHdpdGggYW4gaW5jb21pbmcgY29ubmVjdC4KKwkJCSAqLworCQkJcmRzZGVidWcoImZhaWxlZCB0byBkaXNjb25uZWN0LCBjbTogJXAgZXJyICVkXG4iLAorCQkJCWljLT5pX2NtX2lkLCBlcnIpOworCQl9CisKKwkJd2FpdF9ldmVudChyZHNfaWJfcmluZ19lbXB0eV93YWl0LAorCQkJcmRzX2liX3JpbmdfZW1wdHkoJmljLT5pX3NlbmRfcmluZykgJiYKKwkJCXJkc19pYl9yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKTsKKworCQlpZiAoaWMtPmlfc2VuZF9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnMsCisJCQkJCSAgIGljLT5pX3NlbmRfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9yZWN2X2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRycywKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX2FjaykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgICBpYy0+aV9hY2ssIGljLT5pX2Fja19kbWEpOworCisJCWlmIChpYy0+aV9zZW5kcykKKwkJCXJkc19pYl9zZW5kX2NsZWFyX3JpbmcoaWMpOworCQlpZiAoaWMtPmlfcmVjdnMpCisJCQlyZHNfaWJfcmVjdl9jbGVhcl9yaW5nKGljKTsKKworCQlpZiAoaWMtPmlfY21faWQtPnFwKQorCQkJcmRtYV9kZXN0cm95X3FwKGljLT5pX2NtX2lkKTsKKwkJaWYgKGljLT5pX3NlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3NlbmRfY3EpOworCQlpZiAoaWMtPmlfcmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfcmVjdl9jcSk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisKKwkJLyoKKwkJICogTW92ZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhlIG5vZGV2IGxpc3QuCisJCSAqLworCQlpZiAoaWMtPnJkc19pYmRldikgeworCisJCQlzcGluX2xvY2tfaXJxKCZpYy0+cmRzX2liZGV2LT5zcGlubG9jayk7CisJCQlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKKwkJCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJCQlzcGluX3VubG9ja19pcnEoJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCQkJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJmliX25vZGV2X2Nvbm5zKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJCQlpYy0+cmRzX2liZGV2ID0gTlVMTDsKKwkJfQorCisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJaWMtPmlfcGQgPSBOVUxMOworCQlpYy0+aV9tciA9IE5VTEw7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9oZHJzID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9oZHJzID0gTlVMTDsKKwkJaWMtPmlfYWNrID0gTlVMTDsKKwl9CisJQlVHX09OKGljLT5yZHNfaWJkZXYpOworCisJLyogQ2xlYXIgcGVuZGluZyB0cmFuc21pdCAqLworCWlmIChpYy0+aV9ybSkgeworCQlyZHNfbWVzc2FnZV9wdXQoaWMtPmlfcm0pOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisJaWMtPmlfYWNrX3JlY3YgPSAwOworCisJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCisJaWMtPmlfZmxvd2N0bCA9IDA7CisJYXRvbWljX3NldCgmaWMtPmlfY3JlZGl0cywgMCk7CisKKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpZiAoaWMtPmlfaWJpbmMpIHsKKwkJcmRzX2luY19wdXQoJmljLT5pX2liaW5jLT5paV9pbmMpOworCQlpYy0+aV9pYmluYyA9IE5VTEw7CisJfQorCisJdmZyZWUoaWMtPmlfc2VuZHMpOworCWljLT5pX3NlbmRzID0gTlVMTDsKKwl2ZnJlZShpYy0+aV9yZWN2cyk7CisJaWMtPmlfcmVjdnMgPSBOVUxMOworfQorCitpbnQgcmRzX2liX2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogWFhYIHRvbyBsYXp5PyAqLworCWljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmljLT5pYl9ub2RlKTsKKwltdXRleF9pbml0KCZpYy0+aV9yZWN2X211dGV4KTsKKworCS8qCisJICogcmRzX2liX2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5CisJICogbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXQgY2FuIGJlIGNhbGxlZC4KKwkgKi8KKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGljOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmliX25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJmliX25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYl9ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisKKworCXJkc2RlYnVnKCJjb25uICVwIGNvbm4gaWMgJXBcbiIsIGNvbm4sIGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pYl9jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7CisJcmRzZGVidWcoImljICVwXG4iLCBpYyk7CisJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwlrZnJlZShpYyk7Cit9CisKKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2liX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmRtYS5jIGIvbmV0L3Jkcy9pYl9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNjI4OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfcmRtYS5jCkBAIC0wLDAgKzEsNjQxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpYi5oIgorCisKKy8qCisgKiBUaGlzIGlzIHN0b3JlZCBhcyBtci0+cl90cmFuc19wcml2YXRlLgorICovCitzdHJ1Y3QgcmRzX2liX21yIHsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZQkqZGV2aWNlOworCXN0cnVjdCByZHNfaWJfbXJfcG9vbAkqcG9vbDsKKwlzdHJ1Y3QgaWJfZm1yCQkqZm1yOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1bnNpZ25lZCBpbnQJCXJlbWFwX2NvdW50OworCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwl1bnNpZ25lZCBpbnQJCXNnX2xlbjsKKwl1NjQJCQkqZG1hOworCWludAkJCXNnX2RtYV9sZW47Cit9OworCisvKgorICogT3VyIG93biBsaXR0bGUgRk1SIHBvb2wKKyAqLworc3RydWN0IHJkc19pYl9tcl9wb29sIHsKKwlzdHJ1Y3QgbXV0ZXgJCWZsdXNoX2xvY2s7CQkvKiBzZXJpYWxpemUgZm1yIGludmFsaWRhdGUgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZmx1c2hfd29ya2VyOwkJLyogZmx1c2ggd29ya2VyICovCisKKwlzcGlubG9ja190CQlsaXN0X2xvY2s7CQkvKiBwcm90ZWN0IHZhcmlhYmxlcyBiZWxvdyAqLworCWF0b21pY190CQlpdGVtX2NvdW50OwkJLyogdG90YWwgIyBvZiBNUnMgKi8KKwlhdG9taWNfdAkJZGlydHlfY291bnQ7CQkvKiAjIGRpcnR5IG9mIE1ScyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZHJvcF9saXN0OwkJLyogTVJzIHRoYXQgaGF2ZSByZWFjaGVkIHRoZWlyIG1heF9tYXBzIGxpbWl0ICovCisJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CQkvKiB1bnVzZWQgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAljbGVhbl9saXN0OwkJLyogdW51c2VkICYgdW5hbWFwcGVkIE1ScyAqLworCWF0b21pY190CQlmcmVlX3Bpbm5lZDsJCS8qIG1lbW9yeSBwaW5uZWQgYnkgZnJlZSBNUnMgKi8KKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXM7CisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zX3NvZnQ7CisJdW5zaWduZWQgbG9uZwkJbWF4X2ZyZWVfcGlubmVkOworCXN0cnVjdCBpYl9mbXJfYXR0cglmbXJfYXR0cjsKK307CisKK3N0YXRpYyBpbnQgcmRzX2liX2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpOworc3RhdGljIHZvaWQgcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpOworc3RhdGljIHZvaWQgcmRzX2liX21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liX2dldF9kZXZpY2UoX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRzX2liZGV2LCAmcmRzX2liX2RldmljZXMsIGxpc3QpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9pcGFkZHIsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0LCBsaXN0KSB7CisJCQlpZiAoaV9pcGFkZHItPmlwYWRkciA9PSBpcGFkZHIpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCQkJCXJldHVybiByZHNfaWJkZXY7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCByZHNfaWJfYWRkX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkcjsKKworCWlfaXBhZGRyID0ga21hbGxvYyhzaXplb2YgKmlfaXBhZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlfaXBhZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlfaXBhZGRyLT5pcGFkZHIgPSBpcGFkZHI7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpX2lwYWRkci0+bGlzdCwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3JlbW92ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHIsICpuZXh0OworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfaXBhZGRyLCBuZXh0LCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCwgbGlzdCkgeworCQlpZiAoaV9pcGFkZHItPmlwYWRkciA9PSBpcGFkZHIpIHsKKwkJCWxpc3RfZGVsKCZpX2lwYWRkci0+bGlzdCk7CisJCQlrZnJlZShpX2lwYWRkcik7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworfQorCitpbnQgcmRzX2liX3VwZGF0ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2X29sZDsKKworCXJkc19pYmRldl9vbGQgPSByZHNfaWJfZ2V0X2RldmljZShpcGFkZHIpOworCWlmIChyZHNfaWJkZXZfb2xkKQorCQlyZHNfaWJfcmVtb3ZlX2lwYWRkcihyZHNfaWJkZXZfb2xkLCBpcGFkZHIpOworCisJcmV0dXJuIHJkc19pYl9hZGRfaXBhZGRyKHJkc19pYmRldiwgaXBhZGRyKTsKK30KKworaW50IHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBjb25uIHdhcyBwcmV2aW91c2x5IG9uIHRoZSBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmliX25vZGV2X2Nvbm5zKSk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCWljLT5yZHNfaWJkZXYgPSByZHNfaWJkZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZpYl9ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaWJfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpYl9ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCit2b2lkIHJkc19pYl9yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9zcGxpY2UoJnJkc19pYmRldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGliX25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3N0cnVjdCByZHNfaWJfbXJfcG9vbCAqcmRzX2liX2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sOworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5kcm9wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5jbGVhbl9saXN0KTsKKwltdXRleF9pbml0KCZwb29sLT5mbHVzaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcG9vbC0+bGlzdF9sb2NrKTsKKwlJTklUX1dPUksoJnBvb2wtPmZsdXNoX3dvcmtlciwgcmRzX2liX21yX3Bvb2xfZmx1c2hfd29ya2VyKTsKKworCXBvb2wtPmZtcl9hdHRyLm1heF9wYWdlcyA9IGZtcl9tZXNzYWdlX3NpemU7CisJcG9vbC0+Zm1yX2F0dHIubWF4X21hcHMgPSByZHNfaWJkZXYtPmZtcl9tYXhfcmVtYXBzOworCXBvb2wtPmZtcl9hdHRyLnBhZ2Vfc2hpZnQgPSByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCXBvb2wtPm1heF9mcmVlX3Bpbm5lZCA9IHJkc19pYmRldi0+bWF4X2ZtcnMgKiBmbXJfbWVzc2FnZV9zaXplIC8gNDsKKworCS8qIFdlIG5ldmVyIGFsbG93IG1vcmUgdGhhbiBtYXhfaXRlbXMgTVJzIHRvIGJlIGFsbG9jYXRlZC4KKwkgKiBXaGVuIHdlIGV4Y2VlZCBtb3JlIHRoYW4gbWF4X2l0ZW1zX3NvZnQsIHdlIHN0YXJ0IGZyZWVpbmcKKwkgKiBpdGVtcyBtb3JlIGFnZ3Jlc3NpdmVseS4KKwkgKiBNYWtlIHN1cmUgdGhhdCBtYXhfaXRlbXMgPiBtYXhfaXRlbXNfc29mdCA+IG1heF9pdGVtcyAvIDIKKwkgKi8KKwlwb29sLT5tYXhfaXRlbXNfc29mdCA9IHJkc19pYmRldi0+bWF4X2ZtcnMgKiAzIC8gNDsKKwlwb29sLT5tYXhfaXRlbXMgPSByZHNfaWJkZXYtPm1heF9mbXJzOworCisJcmV0dXJuIHBvb2w7Cit9CisKK3ZvaWQgcmRzX2liX2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKworCWlpbmZvLT5yZG1hX21yX21heCA9IHBvb2wtPm1heF9pdGVtczsKKwlpaW5mby0+cmRtYV9tcl9zaXplID0gcG9vbC0+Zm1yX2F0dHIubWF4X3BhZ2VzOworfQorCit2b2lkIHJkc19pYl9kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sKQoreworCWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOworCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDEpOworCUJVR19PTihhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCkpOworCUJVR19PTihhdG9taWNfcmVhZCgmcG9vbC0+ZnJlZV9waW5uZWQpKTsKKwlrZnJlZShwb29sKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmRzX2liX21yICpyZHNfaWJfcmV1c2VfZm1yKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmcG9vbC0+Y2xlYW5fbGlzdCkpIHsKKwkJaWJtciA9IGxpc3RfZW50cnkocG9vbC0+Y2xlYW5fbGlzdC5uZXh0LCBzdHJ1Y3QgcmRzX2liX21yLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmaWJtci0+bGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGlibXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2liX21yICpyZHNfaWJfYWxsb2NfZm1yKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSBOVUxMOworCWludCBlcnIgPSAwLCBpdGVyID0gMDsKKworCXdoaWxlICgxKSB7CisJCWlibXIgPSByZHNfaWJfcmV1c2VfZm1yKHBvb2wpOworCQlpZiAoaWJtcikKKwkJCXJldHVybiBpYm1yOworCisJCS8qIE5vIGNsZWFuIE1ScyAtIG5vdyB3ZSBoYXZlIHRoZSBjaG9pY2Ugb2YgZWl0aGVyCisJCSAqIGFsbG9jYXRpbmcgYSBmcmVzaCBNUiB1cCB0byB0aGUgbGltaXQgaW1wb3NlZCBieSB0aGUKKwkJICogZHJpdmVyLCBvciBmbHVzaCBhbnkgZGlydHkgdW51c2VkIE1Scy4KKwkJICogV2UgdHJ5IHRvIGF2b2lkIHN0YWxsaW5nIGluIHRoZSBzZW5kIHBhdGggaWYgcG9zc2libGUsCisJCSAqIHNvIHdlIGFsbG9jYXRlIGFzIGxvbmcgYXMgd2UncmUgYWxsb3dlZCB0by4KKwkJICoKKwkJICogV2UncmUgZnVzc3kgd2l0aCBlbmZvcmNpbmcgdGhlIEZNUiBsaW1pdCwgdGhvdWdoLiBJZiB0aGUgZHJpdmVyCisJCSAqIHRlbGxzIHVzIHdlIGNhbid0IHVzZSBtb3JlIHRoYW4gTiBmbXJzLCB3ZSBzaG91bGRuJ3Qgc3RhcnQKKwkJICogYXJndWluZyB3aXRoIGl0ICovCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmcG9vbC0+aXRlbV9jb3VudCkgPD0gcG9vbC0+bWF4X2l0ZW1zKQorCQkJYnJlYWs7CisKKwkJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisKKwkJaWYgKCsraXRlciA+IDIpIHsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3Bvb2xfZGVwbGV0ZWQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJCX0KKworCQkvKiBXZSBkbyBoYXZlIHNvbWUgZW1wdHkgTVJzLiBGbHVzaCB0aGVtIG91dC4gKi8KKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfcG9vbF93YWl0KTsKKwkJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorCisJaWJtciA9IGt6YWxsb2Moc2l6ZW9mKCppYm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpYm1yKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX2NpZ2FyOworCX0KKworCWlibXItPmZtciA9IGliX2FsbG9jX2ZtcihyZHNfaWJkZXYtPnBkLAorCQkJKElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkgSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSwKKwkJCSZwb29sLT5mbXJfYXR0cik7CisJaWYgKElTX0VSUihpYm1yLT5mbXIpKSB7CisJCWVyciA9IFBUUl9FUlIoaWJtci0+Zm1yKTsKKwkJaWJtci0+Zm1yID0gTlVMTDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl9hbGxvY19mbXIgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlnb3RvIG91dF9ub19jaWdhcjsKKwl9CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9hbGxvYyk7CisJcmV0dXJuIGlibXI7CisKK291dF9ub19jaWdhcjoKKwlpZiAoaWJtcikgeworCQlpZiAoaWJtci0+Zm1yKQorCQkJaWJfZGVhbGxvY19mbXIoaWJtci0+Zm1yKTsKKwkJa2ZyZWUoaWJtcik7CisJfQorCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX21hcF9mbXIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pYl9tciAqaWJtciwKKwkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5lbnRzKQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pYmRldi0+ZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCA9IHNnOworCXU2NCBpb19hZGRyID0gMDsKKwl1NjQgKmRtYV9wYWdlczsKKwl1MzIgbGVuOworCWludCBwYWdlX2NudCwgc2dfZG1hX2xlbjsKKwlpbnQgaSwgajsKKwlpbnQgcmV0OworCisJc2dfZG1hX2xlbiA9IGliX2RtYV9tYXBfc2coZGV2LCBzZywgbmVudHMsCisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAodW5saWtlbHkoIXNnX2RtYV9sZW4pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogZG1hX21hcF9zZyBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlsZW4gPSAwOworCXBhZ2VfY250ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNjYXRbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzY2F0W2ldKTsKKworCQlpZiAoZG1hX2FkZHIgJiB+cmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCQlpZiAoaSA+IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJKytwYWdlX2NudDsKKwkJfQorCQlpZiAoKGRtYV9hZGRyICsgZG1hX2xlbikgJiB+cmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCQlpZiAoaSA8IHNnX2RtYV9sZW4gLSAxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCSsrcGFnZV9jbnQ7CisJCX0KKworCQlsZW4gKz0gZG1hX2xlbjsKKwl9CisKKwlwYWdlX2NudCArPSBsZW4gPj4gcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlpZiAocGFnZV9jbnQgPiBmbXJfbWVzc2FnZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRtYV9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiBwYWdlX2NudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFkbWFfcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFnZV9jbnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNjYXRbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzY2F0W2ldKTsKKworCQlmb3IgKGogPSAwOyBqIDwgZG1hX2xlbjsgaiArPSByZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUpCisJCQlkbWFfcGFnZXNbcGFnZV9jbnQrK10gPQorCQkJCShkbWFfYWRkciAmIHJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgKyBqOworCX0KKworCXJldCA9IGliX21hcF9waHlzX2ZtcihpYm1yLT5mbXIsCisJCQkJICAgZG1hX3BhZ2VzLCBwYWdlX2NudCwgaW9fYWRkcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBTdWNjZXNzIC0gd2Ugc3VjY2Vzc2Z1bGx5IHJlbWFwcGVkIHRoZSBNUiwgc28gd2UgY2FuCisJICogc2FmZWx5IHRlYXIgZG93biB0aGUgb2xkIG1hcHBpbmcuICovCisJcmRzX2liX3RlYXJkb3duX21yKGlibXIpOworCisJaWJtci0+c2cgPSBzY2F0OworCWlibXItPnNnX2xlbiA9IG5lbnRzOworCWlibXItPnNnX2RtYV9sZW4gPSBzZ19kbWFfbGVuOworCWlibXItPnJlbWFwX2NvdW50Kys7CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl91c2VkKTsKKwlyZXQgPSAwOworCitvdXQ6CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShyZHNfaWJkZXYtPmRldiwgaWJtci0+c2csCisJCQlpYm1yLT5zZ19kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZShyZHNfaWJkZXYtPmRldiwgaWJtci0+c2csCisJCQlpYm1yLT5zZ19kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCisJaWYgKGlibXItPnNnX2RtYV9sZW4pIHsKKwkJaWJfZG1hX3VubWFwX3NnKHJkc19pYmRldi0+ZGV2LAorCQkJCWlibXItPnNnLCBpYm1yLT5zZ19sZW4sCisJCQkJRE1BX0JJRElSRUNUSU9OQUwpOworCQlpYm1yLT5zZ19kbWFfbGVuID0gMDsKKwl9CisKKwkvKiBSZWxlYXNlIHRoZSBzL2cgbGlzdCAqLworCWlmIChpYm1yLT5zZ19sZW4pIHsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGlibXItPnNnX2xlbjsgKytpKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoJmlibXItPnNnW2ldKTsKKworCQkJLyogRklYTUUgd2UgbmVlZCBhIHdheSB0byB0ZWxsIGEgci93IE1SCisJCQkgKiBmcm9tIGEgci9vIE1SICovCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCXB1dF9wYWdlKHBhZ2UpOworCQl9CisJCWtmcmVlKGlibXItPnNnKTsKKworCQlpYm1yLT5zZyA9IE5VTEw7CisJCWlibXItPnNnX2xlbiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcikKK3sKKwl1bnNpZ25lZCBpbnQgcGlubmVkID0gaWJtci0+c2dfbGVuOworCisJX19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7CisJaWYgKHBpbm5lZCkgeworCQlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCQlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisKKwkJYXRvbWljX3N1YihwaW5uZWQsICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZHNfaWJfZmx1c2hfZ29hbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwl1bnNpZ25lZCBpbnQgaXRlbV9jb3VudDsKKworCWl0ZW1fY291bnQgPSBhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCk7CisJaWYgKGZyZWVfYWxsKQorCQlyZXR1cm4gaXRlbV9jb3VudDsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggb3VyIHBvb2wgb2YgTVJzLgorICogQXQgYSBtaW5pbXVtLCBhbGwgY3VycmVudGx5IHVudXNlZCBNUnMgYXJlIHVubWFwcGVkLgorICogSWYgdGhlIG51bWJlciBvZiBNUnMgYWxsb2NhdGVkIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSBhbHNvIHRyeQorICogdG8gZnJlZSBhcyBtYW55IE1ScyBhcyBuZWVkZWQgdG8gZ2V0IGJhY2sgdG8gdGhpcyBsaW1pdC4KKyAqLworc3RhdGljIGludCByZHNfaWJfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yLCAqbmV4dDsKKwlMSVNUX0hFQUQodW5tYXBfbGlzdCk7CisJTElTVF9IRUFEKGZtcl9saXN0KTsKKwl1bnNpZ25lZCBsb25nIHVucGlubmVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBuZnJlZWQgPSAwLCBuY2xlYW5lZCA9IDAsIGZyZWVfZ29hbDsKKwlpbnQgcmV0ID0gMDsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3Bvb2xfZmx1c2gpOworCisJbXV0ZXhfbG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJLyogR2V0IHRoZSBsaXN0IG9mIGFsbCBNUnMgdG8gYmUgZHJvcHBlZC4gT3JkZXJpbmcgbWF0dGVycyAtCisJICogd2Ugd2FudCB0byBwdXQgZHJvcF9saXN0IGFoZWFkIG9mIGZyZWVfbGlzdC4gKi8KKwlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5mcmVlX2xpc3QsICZ1bm1hcF9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5kcm9wX2xpc3QsICZ1bm1hcF9saXN0KTsKKwlpZiAoZnJlZV9hbGwpCisJCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmNsZWFuX2xpc3QsICZ1bm1hcF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWZyZWVfZ29hbCA9IHJkc19pYl9mbHVzaF9nb2FsKHBvb2wsIGZyZWVfYWxsKTsKKworCWlmIChsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkKKwkJZ290byBvdXQ7CisKKwkvKiBTdHJpbmcgYWxsIGliX21yJ3Mgb250byBvbmUgbGlzdCBhbmQgaGFuZCB0aGVtIHRvIGliX3VubWFwX2ZtciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWJtciwgJnVubWFwX2xpc3QsIGxpc3QpCisJCWxpc3RfYWRkKCZpYm1yLT5mbXItPmxpc3QsICZmbXJfbGlzdCk7CisJcmV0ID0gaWJfdW5tYXBfZm1yKCZmbXJfbGlzdCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl91bm1hcF9mbXIgZmFpbGVkIChlcnI9JWQpXG4iLCByZXQpOworCisJLyogTm93IHdlIGNhbiBkZXN0cm95IHRoZSBETUEgbWFwcGluZyBhbmQgdW5waW4gYW55IHBhZ2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlibXIsIG5leHQsICZ1bm1hcF9saXN0LCBsaXN0KSB7CisJCXVucGlubmVkICs9IGlibXItPnNnX2xlbjsKKwkJX19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7CisJCWlmIChuZnJlZWQgPCBmcmVlX2dvYWwgfHwgaWJtci0+cmVtYXBfY291bnQgPj0gcG9vbC0+Zm1yX2F0dHIubWF4X21hcHMpIHsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX2ZyZWUpOworCQkJbGlzdF9kZWwoJmlibXItPmxpc3QpOworCQkJaWJfZGVhbGxvY19mbXIoaWJtci0+Zm1yKTsKKwkJCWtmcmVlKGlibXIpOworCQkJbmZyZWVkKys7CisJCX0KKwkJbmNsZWFuZWQrKzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2UoJnVubWFwX2xpc3QsICZwb29sLT5jbGVhbl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWF0b21pY19zdWIodW5waW5uZWQsICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX3N1YihuY2xlYW5lZCwgJnBvb2wtPmRpcnR5X2NvdW50KTsKKwlhdG9taWNfc3ViKG5mcmVlZCwgJnBvb2wtPml0ZW1fY291bnQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2liX21yX3Bvb2wsIGZsdXNoX3dvcmtlcik7CisKKwlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKK30KKwordm9pZCByZHNfaWJfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoIlJEUy9JQjogZnJlZV9tciBuZW50cyAldVxuIiwgaWJtci0+c2dfbGVuKTsKKworCS8qIFJldHVybiBpdCB0byB0aGUgcG9vbCdzIGZyZWUgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoaWJtci0+cmVtYXBfY291bnQgPj0gcG9vbC0+Zm1yX2F0dHIubWF4X21hcHMpCisJCWxpc3RfYWRkKCZpYm1yLT5saXN0LCAmcG9vbC0+ZHJvcF9saXN0KTsKKwllbHNlCisJCWxpc3RfYWRkKCZpYm1yLT5saXN0LCAmcG9vbC0+ZnJlZV9saXN0KTsKKworCWF0b21pY19hZGQoaWJtci0+c2dfbGVuLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCWF0b21pY19pbmMoJnBvb2wtPmRpcnR5X2NvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCS8qIElmIHdlJ3ZlIHBpbm5lZCB0b28gbWFueSBwYWdlcywgcmVxdWVzdCBhIGZsdXNoICovCisJaWYgKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkgPj0gcG9vbC0+bWF4X2ZyZWVfcGlubmVkCisJIHx8IGF0b21pY19yZWFkKCZwb29sLT5kaXJ0eV9jb3VudCkgPj0gcG9vbC0+bWF4X2l0ZW1zIC8gMTApCisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKworCWlmIChpbnZhbGlkYXRlKSB7CisJCWlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpKSkgeworCQkJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgdXNlciBjcmVhdGVkIGEgTVIgbWFya2VkCisJCQkgKiBhcyB1c2Vfb25jZSBhbmQgaW52YWxpZGF0ZSBhdCB0aGUgc2FtZSB0aW1lLiAqLworCQkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19pYl9mbHVzaF9tcnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZHNfaWJkZXYsICZyZHNfaWJfZGV2aWNlcywgbGlzdCkgeworCQlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisKKwkJaWYgKHBvb2wpCisJCQlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9Cit9CisKK3ZvaWQgKnJkc19pYl9nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSBOVUxMOworCWludCByZXQ7CisKKwlyZHNfaWJkZXYgPSByZHNfaWJfZ2V0X2RldmljZShycy0+cnNfYm91bmRfYWRkcik7CisJaWYgKCFyZHNfaWJkZXYpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZHNfaWJkZXYtPm1yX3Bvb2wpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWJtciA9IHJkc19pYl9hbGxvY19mbXIocmRzX2liZGV2KTsKKwlpZiAoSVNfRVJSKGlibXIpKQorCQlyZXR1cm4gaWJtcjsKKworCXJldCA9IHJkc19pYl9tYXBfZm1yKHJkc19pYmRldiwgaWJtciwgc2csIG5lbnRzKTsKKwlpZiAocmV0ID09IDApCisJCSprZXlfcmV0ID0gaWJtci0+Zm1yLT5ya2V5OworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBtYXBfZm1yIGZhaWxlZCAoZXJybm89JWQpXG4iLCByZXQpOworCisJaWJtci0+ZGV2aWNlID0gcmRzX2liZGV2OworCisgb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKGlibXIpCisJCQlyZHNfaWJfZnJlZV9tcihpYm1yLCAwKTsKKwkJaWJtciA9IEVSUl9QVFIocmV0KTsKKwl9CisJcmV0dXJuIGlibXI7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JlY3YuYyBiL25ldC9yZHMvaWJfcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjFiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2liX2luY29taW5nX3NsYWI7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pYl9mcmFnX3NsYWI7CitzdGF0aWMgYXRvbWljX3QJcmRzX2liX2FsbG9jYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIHZvaWQgcmRzX2liX2ZyYWdfZHJvcF9wYWdlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJX19mcmVlX3BhZ2UoZnJhZy0+Zl9wYWdlKTsKKwlmcmFnLT5mX3BhZ2UgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfZnJhZ19mcmVlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJQlVHX09OKGZyYWctPmZfcGFnZSAhPSBOVUxMKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2liX2ZyYWdfc2xhYiwgZnJhZyk7Cit9CisKKy8qCisgKiBXZSBtYXAgYSBwYWdlIGF0IGEgdGltZS4gIEl0cyBmcmFnbWVudHMgYXJlIHBvc3RlZCBpbiBvcmRlci4gIFRoaXMKKyAqIGlzIGNhbGxlZCBpbiBmcmFnbWVudCBvcmRlciBhcyB0aGUgZnJhZ21lbnRzIGdldCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgorICogT25seSB0aGUgbGFzdCBmcmFnIGluIHRoZSBwYWdlIHBlcmZvcm1zIHRoZSB1bm1hcHBpbmcuCisgKgorICogSXQncyBPSyBmb3IgcmluZyBjbGVhbnVwIHRvIGNhbGwgdGhpcyBpbiB3aGF0ZXZlciBvcmRlciBpdCBsaWtlcyBiZWNhdXNlCisgKiBETUEgaXMgbm90IGluIGZsaWdodCBhbmQgc28gd2UgY2FuIHVubWFwIHdoaWxlIG90aGVyIHJpbmcgZW50cmllcyBzdGlsbAorICogaG9sZCBwYWdlIHJlZmVyZW5jZXMgaW4gdGhlaXIgZnJhZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9yZWN2X3VubWFwX3BhZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdikKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZyA9IHJlY3YtPnJfZnJhZzsKKworCXJkc2RlYnVnKCJyZWN2ICVwIGZyYWcgJXAgcGFnZSAlcFxuIiwgcmVjdiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlpZiAoZnJhZy0+Zl9tYXBwZWQpCisJCWliX2RtYV91bm1hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkgICAgICAgZnJhZy0+Zl9tYXBwZWQsCisJCQkgICAgICAgUkRTX0ZSQUdfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlmcmFnLT5mX21hcHBlZCA9IDA7Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCByZWN2ID0gaWMtPmlfcmVjdnM7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrLCByZWN2KyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXJlY3YtPnJfaWJpbmMgPSBOVUxMOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJCXJlY3YtPnJfd3IubmV4dCA9IE5VTEw7CisJCXJlY3YtPnJfd3Iud3JfaWQgPSBpOworCQlyZWN2LT5yX3dyLnNnX2xpc3QgPSByZWN2LT5yX3NnZTsKKwkJcmVjdi0+cl93ci5udW1fc2dlID0gUkRTX0lCX1JFQ1ZfU0dFOworCisJCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSAwOworCQlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3JlY3ZfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX3JlY3ZfY2xlYXJfb25lKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdikKK3sKKwlpZiAocmVjdi0+cl9pYmluYykgeworCQlyZHNfaW5jX3B1dCgmcmVjdi0+cl9pYmluYy0+aWlfaW5jKTsKKwkJcmVjdi0+cl9pYmluYyA9IE5VTEw7CisJfQorCWlmIChyZWN2LT5yX2ZyYWcpIHsKKwkJcmRzX2liX3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisJCWlmIChyZWN2LT5yX2ZyYWctPmZfcGFnZSkKKwkJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZHNfaWJfZnJhZ19mcmVlKHJlY3YtPnJfZnJhZyk7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHJkc19pYl9yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrKQorCQlyZHNfaWJfcmVjdl9jbGVhcl9vbmUoaWMsICZpYy0+aV9yZWN2c1tpXSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UpCisJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZSgmaWMtPmlfZnJhZyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX3JlY3ZfcmVmaWxsX29uZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwKKwkJCQkgIGdmcF90IGtwdHJfZ2ZwLCBnZnBfdCBwYWdlX2dmcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChyZWN2LT5yX2liaW5jID09IE5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZyZHNfaWJfYWxsb2NhdGlvbikgPj0gcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfYWxsb2NfbGltaXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVjdi0+cl9pYmluYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2liX2luY29taW5nX3NsYWIsCisJCQkJCQkga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9pYmluYyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWF0b21pY19pbmMoJnJkc19pYl9hbGxvY2F0aW9uKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfaWJpbmMtPmlpX2ZyYWdzKTsKKwkJcmRzX2luY19pbml0KCZyZWN2LT5yX2liaW5jLT5paV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCX0KKworCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkgeworCQlyZWN2LT5yX2ZyYWcgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pYl9mcmFnX3NsYWIsIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSk7CisJCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gTlVMTDsKKwl9CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkgeworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IGFsbG9jX3BhZ2UocGFnZV9nZnApOworCQlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlkbWFfYWRkciA9IGliX2RtYV9tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCSAgaWMtPmlfZnJhZy5mX3BhZ2UsCisJCQkJICBpYy0+aV9mcmFnLmZfb2Zmc2V0LAorCQkJCSAgUkRTX0ZSQUdfU0laRSwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGljLT5pX2NtX2lkLT5kZXZpY2UsIGRtYV9hZGRyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE9uY2Ugd2UgZ2V0IHRoZSBSRFNfUEFHRV9MQVNUX09GRiBmcmFnIHRoZW4gcmRzX2liX2ZyYWdfdW5tYXAoKQorCSAqIG11c3QgYmUgY2FsbGVkIG9uIHRoaXMgcmVjdi4gIFRoaXMgaGFwcGVucyBhcyBjb21wbGV0aW9ucyBoaXQKKwkgKiBpbiBvcmRlciBvciBvbiBjb25uZWN0aW9uIHNodXRkb3duLgorCSAqLworCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gaWMtPmlfZnJhZy5mX3BhZ2U7CisJcmVjdi0+cl9mcmFnLT5mX29mZnNldCA9IGljLT5pX2ZyYWcuZl9vZmZzZXQ7CisJcmVjdi0+cl9mcmFnLT5mX21hcHBlZCA9IGRtYV9hZGRyOworCisJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gZG1hX2FkZHI7CisJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCisJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKHJlY3YgLSBpYy0+aV9yZWN2cykgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWdldF9wYWdlKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKTsKKworCWlmIChpYy0+aV9mcmFnLmZfb2Zmc2V0IDwgUkRTX1BBR0VfTEFTVF9PRkYpIHsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCArPSBSRFNfRlJBR19TSVpFOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKGljLT5pX2ZyYWcuZl9wYWdlKTsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBOVUxMOworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHRyaWVzIHRvIGFsbG9jYXRlIGFuZCBwb3N0IHVudXNlZCB3b3JrIHJlcXVlc3RzIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQKKyAqIHRoZXkgaGF2ZSBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXkgbmVlZCB0byBxdWV1ZSByZWNlaXZlZCBmcmFnbWVudHMgaW50bworICogc29ja2V0cy4gIFRoZSBpX3JlY3ZfbXV0ZXggaXMgaGVsZCBoZXJlIHNvIHRoYXQgcmluZ19hbGxvYyBhbmQgX3VuYWxsb2MKKyAqIHBhaXJzIGRvbid0IGdvIHVubWF0Y2hlZC4KKyAqCisgKiAtMSBpcyByZXR1cm5lZCBpZiBwb3N0aW5nIGZhaWxzIGR1ZSB0byB0ZW1wb3JhcnkgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKyAqLworaW50IHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCXN0cnVjdCBpYl9yZWN2X3dyICpmYWlsZWRfd3I7CisJdW5zaWduZWQgaW50IHBvc3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisJdTMyIHBvczsKKworCXdoaWxlICgocHJlZmlsbCB8fCByZHNfY29ubl91cChjb25uKSkKKwkJCSYmIHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEsICZwb3MpKSB7CisJCWlmIChwb3MgPj0gaWMtPmlfcmVjdl9yaW5nLndfbnIpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiQXJnaCAtIHJpbmcgYWxsb2MgcmV0dXJuZWQgcG9zPSV1XG4iLAorCQkJCQlwb3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1twb3NdOworCQlyZXQgPSByZHNfaWJfcmVjdl9yZWZpbGxfb25lKGNvbm4sIHJlY3YsIGtwdHJfZ2ZwLCBwYWdlX2dmcCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBYWFggd2hlbiBjYW4gdGhpcyBmYWlsPyAqLworCQlyZXQgPSBpYl9wb3N0X3JlY3YoaWMtPmlfY21faWQtPnFwLCAmcmVjdi0+cl93ciwgJmZhaWxlZF93cik7CisJCXJkc2RlYnVnKCJyZWN2ICVwIGliaW5jICVwIHBhZ2UgJXAgYWRkciAlbHUgcmV0ICVkXG4iLCByZWN2LAorCQkJIHJlY3YtPnJfaWJpbmMsIHJlY3YtPnJfZnJhZy0+Zl9wYWdlLAorCQkJIChsb25nKSByZWN2LT5yX2ZyYWctPmZfbWFwcGVkLCByZXQpOworCQlpZiAocmV0KSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmVjdiBwb3N0IG9uICIKKwkJCSAgICAgICAiJXBJNCByZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJICAgICAgIHJldCk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9zdGVkKys7CisJfQorCisJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sIC0gdXBkYXRlIHRoZSB3aW5kb3cuICovCisJaWYgKGljLT5pX2Zsb3djdGwgJiYgcG9zdGVkKQorCQlyZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoY29ubiwgcG9zdGVkKTsKKworCWlmIChyZXQpCisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqcG9zOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCXJkc2RlYnVnKCJwdXJnaW5nIGliaW5jICVwIGluYyAlcFxuIiwgaWJpbmMsIGluYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgcG9zLCAmaWJpbmMtPmlpX2ZyYWdzLCBmX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmZnJhZy0+Zl9pdGVtKTsKKwkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKGZyYWcpOworCQlyZHNfaWJfZnJhZ19mcmVlKGZyYWcpOworCX0KK30KKwordm9pZCByZHNfaWJfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCisJcmRzX2liX2luY19wdXJnZShpbmMpOworCXJkc2RlYnVnKCJmcmVlaW5nIGliaW5jICVwIGluYyAlcFxuIiwgaWJpbmMsIGluYyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZpYmluYy0+aWlfZnJhZ3MpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2liX2luY29taW5nX3NsYWIsIGliaW5jKTsKKwlhdG9taWNfZGVjKCZyZHNfaWJfYWxsb2NhdGlvbik7CisJQlVHX09OKGF0b21pY19yZWFkKCZyZHNfaWJfYWxsb2NhdGlvbikgPCAwKTsKK30KKworaW50IHJkc19pYl9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGlvdmVjICppb3YgPSBmaXJzdF9pb3Y7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmYgPSAwOworCXVuc2lnbmVkIGxvbmcgaW92X29mZiA9IDA7CisJaW50IGNvcGllZCA9IDA7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCWZyYWcgPSBsaXN0X2VudHJ5KGliaW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoIiVsdSBieXRlcyB0byB1c2VyIFslcCwgJXp1XSArICVsdSBmcm9tIGZyYWcgIgorCQkJICJbJXAsICVsdV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIGZyYWctPmZfcGFnZSwgZnJhZy0+Zl9vZmZzZXQsIGZyYWdfb2ZmKTsKKworCQkvKiBYWFggbmVlZHMgKyBvZmZzZXQgZm9yIG11bHRpcGxlIHJlY3ZzIHBlciBwYWdlICovCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihmcmFnLT5mX3BhZ2UsCisJCQkJCSAgICBmcmFnLT5mX29mZnNldCArIGZyYWdfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qIGljIHN0YXJ0cyBvdXQga3phbGxvYygpZWQgKi8KK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqd3IgPSAmaWMtPmlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UgKnNnZSA9ICZpYy0+aV9hY2tfc2dlOworCisJc2dlLT5hZGRyID0gaWMtPmlfYWNrX2RtYTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwl3ci0+c2dfbGlzdCA9IHNnZTsKKwl3ci0+bnVtX3NnZSA9IDE7CisJd3ItPm9wY29kZSA9IElCX1dSX1NFTkQ7CisJd3ItPndyX2lkID0gUkRTX0lCX0FDS19XUl9JRDsKKwl3ci0+c2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKK30KKworLyoKKyAqIFlvdSdkIHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZCB0byBhY2sKKyAqIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQiBoYXJkd2FyZSBnZW5lcmF0ZXMKKyAqIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYQorICogcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdAorICogc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYQorICogcG90ZW50aWFsIGlzc3VlIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorICoKKyAqIFdoZW4gdGhlIHJlbW90ZSBob3N0IHJlY2VpdmVzIG91ciBhY2sgdGhleSdsbCBmcmVlIHRoZSBzZW50IG1lc3NhZ2UgZnJvbQorICogdGhlaXIgc2VuZCBxdWV1ZS4gIFRvIGRlY3JlYXNlIHRoZSBsYXRlbmN5IG9mIHRoaXMgd2UgYWx3YXlzIHNlbmQgYW4gYWNrCisgKiBpbW1lZGlhdGVseSBhZnRlciB3ZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBoYXZlIG9uZSBhY2sgaW4gZmxpZ2h0IGF0IGEgdGltZS4gIFRoaXMgcHV0cworICogcHJlc3N1cmUgb24gc2VuZGVycyB0byBoYXZlIGRlZXAgZW5vdWdoIHNlbmQgcXVldWVzIHRvIGFic29yYiB0aGUgbGF0ZW5jeSBvZgorICogYSBzaW5nbGUgYWNrIGZyYW1lIGJlaW5nIGluIGZsaWdodC4gIFRoaXMgbWlnaHQgbm90IGJlIGdvb2QgZW5vdWdoLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2ZSBhIGxvbmctbGl2ZWQgc2VuZF93ciBhbmQgc2dlIHdoaWNoIHBvaW50IHRvIGEKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFjayBmcmFtZS4gIFRoaXMgYWNrIHdyIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJpbmcKKyAqIGFjY291bnRpbmcgdGhhdCB0aGUgdHggYW5kIHJ4IHdycyBkby4gIFRoZSBRUCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IG1ha2VzCisgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCisgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwlpZiAoYWNrX3JlcXVpcmVkKSB7CisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHU2NCByZHNfaWJfZ2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJcmV0dXJuIGljLT5pX2Fja19uZXh0OworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSBpYy0+aV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwl1NjQgc2VxOworCWludCByZXQ7CisKKwlzZXEgPSByZHNfaWJfZ2V0X2FjayhpYyk7CisKKwlyZHNkZWJ1Zygic2VuZF9hY2s6IGljICVwIGFjayAlbGx1XG4iLCBpYywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VxKTsKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoaGRyLCAwLCAwLCAwKTsKKwloZHItPmhfYWNrID0gY3B1X3RvX2JlNjQoc2VxKTsKKwloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCWljLT5pX2Fja19xdWV1ZWQgPSBqaWZmaWVzOworCisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmljLT5pX2Fja193ciwgJmZhaWxlZF93cik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJLyogRmFpbGVkIHRvIHNlbmQuIFJlbGVhc2UgdGhlIFdSLCBhbmQKKwkJICogZm9yY2UgYW5vdGhlciBBQ0suCisJCSAqLworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX2ZhaWx1cmUpOworCQkvKiBOZWVkIHRvIGZpbmVzc2UgdGhpcyBsYXRlci4gKi8KKwkJQlVHKCk7CisJfSBlbHNlCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VudCk7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgMyB3YXlzIG9mIGdldHRpbmcgYWNrbm93bGVkZ2VtZW50cyB0byB0aGUgcGVlcjoKKyAqICAxLglXZSBjYWxsIHJkc19pYl9hdHRlbXB0X2FjayBmcm9tIHRoZSByZWN2IGNvbXBsZXRpb24gaGFuZGxlcgorICoJdG8gc2VuZCBhbiBBQ0stb25seSBmcmFtZS4KKyAqCUhvd2V2ZXIsIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoIGZyYW1lIGluIHRoZSBzZW5kIHF1ZXVlCisgKglhdCBhbnkgdGltZSwgc28gd2UgbWF5IGhhdmUgdG8gcG9zdHBvbmUgaXQuCisgKiAgMi4JV2hlbiBhbm90aGVyIChkYXRhKSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQgd2hpbGUgdGhlcmUncworICoJYW4gQUNLIGluIHRoZSBxdWV1ZSwgd2UgcGlnZ3liYWNrIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyCisgKglvbiB0aGUgZGF0YSBwYWNrZXQuCisgKiAgMy4JSWYgdGhlIEFDSyBXUiBpcyBkb25lIHNlbmRpbmcsIHdlIGdldCBjYWxsZWQgZnJvbSB0aGUKKyAqCXNlbmQgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSdzCisgKglhbm90aGVyIEFDSyBwZW5kaW5nIChwb3N0cG9uZWQgYmVjYXVzZSB0aGUgV1Igd2FzIG9uIHRoZQorICoJcXVldWUpLiBJZiBzbywgd2UgdHJhbnNtaXQgaXQuCisgKgorICogV2UgbWFpbnRhaW4gMiB2YXJpYWJsZXM6CisgKiAgLQlpX2Fja19mbGFncywgd2hpY2gga2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgQUNLIFdSCisgKglpcyBjdXJyZW50bHkgaW4gdGhlIHNlbmQgcXVldWUgb3Igbm90IChJQl9BQ0tfSU5fRkxJR0hUKQorICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCisgKgorICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKgorICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCisgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCisgKiBpcyByZXRyYW5zbWl0dGluZyB0aGVtLCBiZWNhdXNlIGl0IGhhc24ndCBzZWVuIGFuIEFDSyBmb3IKKyAqIHRoZW0uIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIEFDSyB0aGVzZS4KKyAqCisgKiBBQ0sgbWl0aWdhdGlvbiBhZGRzIGEgaGVhZGVyIGZsYWcgIkFDS19SRVFVSVJFRCI7IGFueSBwYWNrZXQgd2l0aAorICogdGhpcyBmbGFnIHNldCAqTVVTVCogYmUgYWNrbm93bGVkZ2VkIGltbWVkaWF0ZWx5LgorICovCisKKy8qCisgKiBXaGVuIHdlIGdldCBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSB0aGUgcmVjdiBxdWV1ZSBoYW5kbGVyLgorICogQ2hlY2sgd2hldGhlciB3ZSBvdWdodCB0byB0cmFuc21pdCBhbiBBQ0suCisgKi8KK3ZvaWQgcmRzX2liX2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzOworCisJaWYgKCF0ZXN0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncykpIHsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX2RlbGF5ZWQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2FuIHdlIGdldCBhIHNlbmQgY3JlZGl0PyAqLworCWlmICghcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAxLCAmYWR2X2NyZWRpdHMsIDApKSB7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF90aHJvdHRsZSk7CisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfc2VuZF9hY2soaWMsIGFkdl9jcmVkaXRzKTsKK30KKworLyoKKyAqIFdlIGdldCBoZXJlIGZyb20gdGhlIHNlbmQgY29tcGxldGlvbiBoYW5kbGVyLCB3aGVuIHRoZQorICogYWRhcHRlciB0ZWxscyB1cyB0aGUgQUNLIGZyYW1lIHdhcyBzZW50LgorICovCit2b2lkIHJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlZ3VsYXIgeG1pdCBjb2RlIHdoZW4gaXQgd2FudHMgdG8gcGlnZ3liYWNrCisgKiBhbiBBQ0sgb24gYW4gb3V0Z29pbmcgZnJhbWUuCisgKi8KK3U2NCByZHNfaWJfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9waWdneWJhY2tlZCk7CisJcmV0dXJuIHJkc19pYl9nZXRfYWNrKGljKTsKK30KKworLyoKKyAqIEl0J3Mga2luZCBvZiBsYW1lIHRoYXQgd2UncmUgY29weWluZyBmcm9tIHRoZSBwb3N0ZWQgcmVjZWl2ZSBwYWdlcyBpbnRvCisgKiBsb25nLWxpdmVkIGJpdG1hcHMuICBXZSBjb3VsZCBoYXZlIHBvc3RlZCB0aGUgYml0bWFwcyBhbmQgcmRtYSB3cml0dGVuIGludG8KKyAqIHRoZW0uICBCdXQgcmVjZWl2aW5nIG5ldyBjb25nZXN0aW9uIGJpdG1hcHMgc2hvdWxkIGJlIGEgKnJhcmUqIGV2ZW50LCBzbworICogaG9wZWZ1bGx5IHdlIHdvbid0IG5lZWQgdG8gaW52ZXN0IHRoYXQgY29tcGxleGl0eSBpbiBtYWtpbmcgaXQgbW9yZQorICogZWZmaWNpZW50LiAgQnkgY29weWluZyB3ZSBjYW4gc2hhcmUgYSBzaW1wbGVyIGNvcmUgd2l0aCBUQ1Agd2hpY2ggaGFzIHRvCisgKiBjb3B5LgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfY29uZ19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbWFwX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX3BhZ2U7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBjb3BpZWQ7CisJdWludDY0X3QgdW5jb25nZXN0ZWQgPSAwOworCXZvaWQgKmFkZHI7CisKKwkvKiBjYXRjaCBjb21wbGV0ZWx5IGNvcnJ1cHQgcGFja2V0cyAqLworCWlmIChiZTMyX3RvX2NwdShpYmluYy0+aWlfaW5jLmlfaGRyLmhfbGVuKSAhPSBSRFNfQ09OR19NQVBfQllURVMpCisJCXJldHVybjsKKworCW1hcCA9IGNvbm4tPmNfZmNvbmc7CisJbWFwX3BhZ2UgPSAwOworCW1hcF9vZmYgPSAwOworCisJZnJhZyA9IGxpc3RfZW50cnkoaWJpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWZyYWdfb2ZmID0gMDsKKworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgUkRTX0NPTkdfTUFQX0JZVEVTKSB7CisJCXVpbnQ2NF90ICpzcmMsICpkc3Q7CisJCXVuc2lnbmVkIGludCBrOworCisJCXRvX2NvcHkgPSBtaW4oUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmLCBQQUdFX1NJWkUgLSBtYXBfb2ZmKTsKKwkJQlVHX09OKHRvX2NvcHkgJiA3KTsgLyogTXVzdCBiZSA2NGJpdCBhbGlnbmVkLiAqLworCisJCWFkZHIgPSBrbWFwX2F0b21pYyhmcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKworCQlzcmMgPSBhZGRyICsgZnJhZ19vZmY7CisJCWRzdCA9ICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbbWFwX3BhZ2VdICsgbWFwX29mZjsKKwkJZm9yIChrID0gMDsgayA8IHRvX2NvcHk7IGsgKz0gOCkgeworCQkJLyogUmVjb3JkIHBvcnRzIHRoYXQgYmVjYW1lIHVuY29uZ2VzdGVkLCBpZQorCQkJICogYml0cyB0aGF0IGNoYW5nZWQgZnJvbSAwIHRvIDEuICovCisJCQl1bmNvbmdlc3RlZCB8PSB+KCpzcmMpICYgKmRzdDsKKwkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJfQorCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKworCQljb3BpZWQgKz0gdG9fY29weTsKKworCQltYXBfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChtYXBfb2ZmID09IFBBR0VfU0laRSkgeworCQkJbWFwX29mZiA9IDA7CisJCQltYXBfcGFnZSsrOworCQl9CisKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJfQorCisJLyogdGhlIGNvbmdlc3Rpb24gbWFwIGlzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIgKi8KKwl1bmNvbmdlc3RlZCA9IGxlNjRfdG9fY3B1KHVuY29uZ2VzdGVkKTsKKworCXJkc19jb25nX21hcF91cGRhdGVkKG1hcCwgdW5jb25nZXN0ZWQpOworfQorCisvKgorICogUmluZ3MgYXJlIHBvc3RlZCB3aXRoIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSdsbCBuZWVkIHRvIHF1ZXVlIHRoZQorICogaW5jb21pbmcgbWVzc2FnZSB0byB0aGUgcmVjZWl2aW5nIHNvY2tldCBzbyB0aGlzIGNhbid0IGZhaWwuCisgKiBBbGwgZnJhZ21lbnRzIHN0YXJ0IHdpdGggYSBoZWFkZXIsIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UncmUgbm90IHJlY2VpdmluZworICogZ2FyYmFnZSwgYW5kIHdlIGNhbiB0ZWxsIGEgc21hbGwgOCBieXRlIGZyYWdtZW50IGZyb20gYW4gQUNLIGZyYW1lLgorICovCitzdHJ1Y3QgcmRzX2liX2Fja19zdGF0ZSB7CisJdTY0CQlhY2tfbmV4dDsKKwl1NjQJCWFja19yZWN2OworCXVuc2lnbmVkIGludAlhY2tfcmVxdWlyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX25leHRfdmFsaWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlY3ZfdmFsaWQ6MTsKK307CisKK3N0YXRpYyB2b2lkIHJkc19pYl9wcm9jZXNzX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2LCB1MzIgYnl0ZV9sZW4sCisJCQkJc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jID0gaWMtPmlfaWJpbmM7CisJc3RydWN0IHJkc19oZWFkZXIgKmloZHIsICpoZHI7CisKKwkvKiBYWFggc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uIGlmIHBvcnQgMCwwIGFyZSBzZWVuPyAqLworCisJcmRzZGVidWcoImljICVwIGliaW5jICVwIHJlY3YgJXAgYnl0ZSBsZW4gJXVcbiIsIGljLCBpYmluYywgcmVjdiwKKwkJIGJ5dGVfbGVuKTsKKworCWlmIChieXRlX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBkaWRuJ3QgaW5jbHVlIGEgIgorCQkgICAgICAgImhlYWRlciwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmV0dXJuOworCX0KKwlieXRlX2xlbiAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJaWhkciA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKworCS8qIFZhbGlkYXRlIHRoZSBjaGVja3N1bS4gKi8KKwlpZiAoIXJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShpaGRyKSkgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGhhcyBjb3JydXB0ZWQgaGVhZGVyIC0gIgorCQkgICAgICAgImZvcmNpbmcgYSByZWNvbm5lY3RcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgdGhlIEFDSyBzZXF1ZW5jZSB3aGljaCBjb21lcyB3aXRoIGV2ZXJ5IHBhY2tldCAqLworCXN0YXRlLT5hY2tfcmVjdiA9IGJlNjRfdG9fY3B1KGloZHItPmhfYWNrKTsKKwlzdGF0ZS0+YWNrX3JlY3ZfdmFsaWQgPSAxOworCisJLyogUHJvY2VzcyB0aGUgY3JlZGl0cyB1cGRhdGUgaWYgdGhlcmUgd2FzIG9uZSAqLworCWlmIChpaGRyLT5oX2NyZWRpdCkKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgaWhkci0+aF9jcmVkaXQpOworCisJaWYgKGloZHItPmhfc3BvcnQgPT0gMCAmJiBpaGRyLT5oX2Rwb3J0ID09IDAgJiYgYnl0ZV9sZW4gPT0gMCkgeworCQkvKiBUaGlzIGlzIGFuIEFDSy1vbmx5IHBhY2tldC4gVGhlIGZhY3QgdGhhdCBpdCBnZXRzCisJCSAqIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUgaXMgdGhhdCBoaXN0b3JpY2FsbHksIEFDS3MKKwkJICogd2VyZSByYXRoZXIgc3BlY2lhbCBiZWFzdHMuCisJCSAqLworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3JlY2VpdmVkKTsKKworCQkvKgorCQkgKiBVc3VhbGx5IHRoZSBmcmFncyBtYWtlIHRoZWlyIHdheSBvbiB0byBpbmNzIGFuZCBhcmUgdGhlbiBmcmVlZCBhcworCQkgKiB0aGUgaW5jIGlzIGZyZWVkLiAgV2UgZG9uJ3QgZ28gdGhhdCByb3V0ZSwgc28gd2UgaGF2ZSB0byBkcm9wIHRoZQorCQkgKiBwYWdlIHJlZiBvdXJzZWx2ZXMuICBXZSBjYW4ndCBqdXN0IGxlYXZlIHRoZSBwYWdlIG9uIHRoZSByZWN2CisJCSAqIGJlY2F1c2UgdGhhdCBjb25mdXNlcyB0aGUgZG1hIG1hcHBpbmcgb2YgcGFnZXMgYW5kIGVhY2ggcmVjdidzIHVzZQorCQkgKiBvZiBhIHBhcnRpYWwgcGFnZS4gIFdlIGNhbiBsZWF2ZSB0aGUgZnJhZywgdGhvdWdoLCBpdCB3aWxsIGJlCisJCSAqIHJldXNlZC4KKwkJICoKKwkJICogRklYTUU6IEZvbGQgdGhpcyBpbnRvIHRoZSBjb2RlIHBhdGggYmVsb3cuCisJCSAqLworCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGluYyBvbiB0aGUgY29ubmVjdGlvbiB0aGVuIHRoaXMKKwkgKiBmcmFnbWVudCBoYXMgYSBoZWFkZXIgYW5kIHN0YXJ0cyBhIG1lc3NhZ2UuLiBjb3B5IGl0cyBoZWFkZXIKKwkgKiBpbnRvIHRoZSBpbmMgYW5kIHNhdmUgdGhlIGluYyBzbyB3ZSBjYW4gaGFuZyB1cGNvbWluZyBmcmFnbWVudHMKKwkgKiBvZmYgaXRzIGxpc3QuCisJICovCisJaWYgKGliaW5jID09IE5VTEwpIHsKKwkJaWJpbmMgPSByZWN2LT5yX2liaW5jOworCQlyZWN2LT5yX2liaW5jID0gTlVMTDsKKwkJaWMtPmlfaWJpbmMgPSBpYmluYzsKKworCQloZHIgPSAmaWJpbmMtPmlpX2luYy5pX2hkcjsKKwkJbWVtY3B5KGhkciwgaWhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IGJlMzJfdG9fY3B1KGhkci0+aF9sZW4pOworCisJCXJkc2RlYnVnKCJpYyAlcCBpYmluYyAlcCByZW0gJXUgZmxhZyAweCV4XG4iLCBpYywgaWJpbmMsCisJCQkgaWMtPmlfcmVjdl9kYXRhX3JlbSwgaGRyLT5oX2ZsYWdzKTsKKwl9IGVsc2UgeworCQloZHIgPSAmaWJpbmMtPmlpX2luYy5pX2hkcjsKKwkJLyogV2UgY2FuJ3QganVzdCB1c2UgbWVtY21wIGhlcmU7IGZyYWdtZW50cyBvZiBhCisJCSAqIHNpbmdsZSBtZXNzYWdlIG1heSBjYXJyeSBkaWZmZXJlbnQgQUNLcyAqLworCQlpZiAoaGRyLT5oX3NlcXVlbmNlICE9IGloZHItPmhfc2VxdWVuY2UKKwkJIHx8IGhkci0+aF9sZW4gIT0gaWhkci0+aF9sZW4KKwkJIHx8IGhkci0+aF9zcG9ydCAhPSBpaGRyLT5oX3Nwb3J0CisJCSB8fCBoZHItPmhfZHBvcnQgIT0gaWhkci0+aF9kcG9ydCkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiZnJhZ21lbnQgaGVhZGVyIG1pc21hdGNoOyBmb3JjaW5nIHJlY29ubmVjdFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSwgJmliaW5jLT5paV9mcmFncyk7CisJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCWlmIChpYy0+aV9yZWN2X2RhdGFfcmVtID4gUkRTX0ZSQUdfU0laRSkKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSAtPSBSRFNfRlJBR19TSVpFOworCWVsc2UgeworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gMDsKKwkJaWMtPmlfaWJpbmMgPSBOVUxMOworCisJCWlmIChpYmluYy0+aWlfaW5jLmlfaGRyLmhfZmxhZ3MgPT0gUkRTX0ZMQUdfQ09OR19CSVRNQVApCisJCQlyZHNfaWJfY29uZ19yZWN2KGNvbm4sIGliaW5jKTsKKwkJZWxzZSB7CisJCQlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2ZhZGRyLCBjb25uLT5jX2xhZGRyLAorCQkJCQkgICZpYmluYy0+aWlfaW5jLCBHRlBfQVRPTUlDLAorCQkJCQkgIEtNX1NPRlRJUlEwKTsKKwkJCXN0YXRlLT5hY2tfbmV4dCA9IGJlNjRfdG9fY3B1KGhkci0+aF9zZXF1ZW5jZSk7CisJCQlzdGF0ZS0+YWNrX25leHRfdmFsaWQgPSAxOworCQl9CisKKwkJLyogRXZhbHVhdGUgdGhlIEFDS19SRVFVSVJFRCBmbGFnICphZnRlciogd2UgcmVjZWl2ZWQKKwkJICogdGhlIGNvbXBsZXRlIGZyYW1lLCBhbmQgYWZ0ZXIgYnVtcGluZyB0aGUgbmV4dF9yeAorCQkgKiBzZXF1ZW5jZS4gKi8KKwkJaWYgKGhkci0+aF9mbGFncyAmIFJEU19GTEFHX0FDS19SRVFVSVJFRCkgeworCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfYWNrX3JlcXVpcmVkKTsKKwkJCXN0YXRlLT5hY2tfcmVxdWlyZWQgPSAxOworCQl9CisKKwkJcmRzX2luY19wdXQoJmliaW5jLT5paV9pbmMpOworCX0KK30KKworLyoKKyAqIFBsdWNraW5nIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgcmluZyBjYW4gYmUgZG9uZSBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIHRocmVhZCByZWZpbGxpbmcgdGhlIHJpbmcuICBFYWNoIHJpbmcgb3BlcmF0aW9uIGlzIHByb3RlY3RlZCBieQorICogc3BpbmxvY2tzIGFuZCB0aGUgdHJhbnNpZW50IHN0YXRlIG9mIHJlZmlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAqIHJlY29yZGluZyBvZiB3aGljaCBlbnRyeSBpcyBvbGRlc3QuCisgKgorICogVGhpcyByZWxpZXMgb24gSUIgb25seSBjYWxsaW5nIG9uZSBjcSBjb21wX2hhbmRsZXIgZm9yIGVhY2ggY3Egc28gdGhhdAorICogdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSBjYWxsZXIgb2YgcmRzX3JlY3ZfaW5jb21pbmcoKSBwZXIgUkRTIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgc3RhdGUgPSB7IDAsIH07CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjcSAlcFxuIiwgY29ubiwgY3EpOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NxX2NhbGwpOworCisJaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfU09MSUNJVEVEKTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcV9ldmVudCk7CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1tyZHNfaWJfcmluZ19vbGRlc3QoJmljLT5pX3JlY3ZfcmluZyldOworCisJCXJkc19pYl9yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCisJCS8qCisJCSAqIEFsc28gcHJvY2VzcyByZWN2cyBpbiBjb25uZWN0aW5nIHN0YXRlIGJlY2F1c2UgaXQgaXMgcG9zc2libGUKKwkJICogdG8gZ2V0IGEgcmVjdiBjb21wbGV0aW9uIF9iZWZvcmVfIHRoZSByZG1hY20gRVNUQUJMSVNIRUQKKwkJICogZXZlbnQgaXMgcHJvY2Vzc2VkLgorCQkgKi8KKwkJaWYgKHJkc19jb25uX3VwKGNvbm4pIHx8IHJkc19jb25uX2Nvbm5lY3RpbmcoY29ubikpIHsKKwkJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKKwkJCQlyZHNfaWJfcHJvY2Vzc19yZWN2KGNvbm4sIHJlY3YsIHdjLmJ5dGVfbGVuLCAmc3RhdGUpOworCQkJfSBlbHNlIHsKKwkJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmVjdiBjb21wbGV0aW9uIG9uICIKKwkJCQkgICAgICAgIiVwSTQgaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCQkgICAgICAgd2Muc3RhdHVzKTsKKwkJCX0KKwkJfQorCisJCXJkc19pYl9yaW5nX2ZyZWUoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJfQorCisJaWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKQorCQlyZHNfaWJfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7CisJaWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkICYmIHN0YXRlLmFja19yZWN2ID4gaWMtPmlfYWNrX3JlY3YpIHsKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBzdGF0ZS5hY2tfcmVjdiwgTlVMTCk7CisJCWljLT5pX2Fja19yZWN2ID0gc3RhdGUuYWNrX3JlY3Y7CisJfQorCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKKworCS8qIElmIHdlIGV2ZXIgZW5kIHVwIHdpdGggYSByZWFsbHkgZW1wdHkgcmVjZWl2ZSByaW5nLCB3ZSdyZQorCSAqIGluIGRlZXAgdHJvdWJsZSwgYXMgdGhlIHNlbmRlciB3aWxsIGRlZmluaXRlbHkgc2VlIFJOUgorCSAqIHRpbWVvdXRzLiAqLworCWlmIChyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X3JpbmdfZW1wdHkpOworCisJLyoKKwkgKiBJZiB0aGUgcmluZyBpcyBydW5uaW5nIGxvdywgdGhlbiBzY2hlZHVsZSB0aGUgdGhyZWFkIHRvIHJlZmlsbC4KKwkgKi8KKwlpZiAocmRzX2liX3JpbmdfbG93KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCitpbnQgcmRzX2liX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXBcbiIsIGNvbm4pOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgYSB0ZW1wb3JhcnkgcG9zdGluZyBmYWlsdXJlIGluIHRoaXMgY29udGV4dCB0aGVuCisJICogd2UncmUgcmVhbGx5IGxvdyBhbmQgd2Ugd2FudCB0aGUgY2FsbGVyIHRvIGJhY2sgb2ZmIGZvciBhIGJpdC4KKwkgKi8KKwltdXRleF9sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKwlpZiAocmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMCkpCisJCXJldCA9IC1FTk9NRU07CisJZWxzZQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkKTsKKwltdXRleF91bmxvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCByZHNfaWJfcmVjdl9pbml0KHZvaWQpCit7CisJc3RydWN0IHN5c2luZm8gc2k7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwkvKiBEZWZhdWx0IHRvIDMwJSBvZiBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgcmVjdiBtZW1vcnkgKi8KKwlzaV9tZW1pbmZvKCZzaSk7CisJcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gc2kudG90YWxyYW0gLyAzICogUEFHRV9TSVpFIC8gUkRTX0ZSQUdfU0laRTsKKworCXJkc19pYl9pbmNvbWluZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pYl9pbmNvbWluZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2liX2luY29taW5nKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pYl9pbmNvbWluZ19zbGFiID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmRzX2liX2ZyYWdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaWJfZnJhZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaWJfZnJhZ19zbGFiID09IE5VTEwpCisJCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfaW5jb21pbmdfc2xhYik7CisJZWxzZQorCQlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfaW5jb21pbmdfc2xhYik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pYl9mcmFnX3NsYWIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yaW5nLmMgYi9uZXQvcmRzL2liX3JpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE2Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yaW5nLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworLyoKKyAqIExvY2tpbmcgZm9yIElCIHJpbmdzLgorICogV2UgYXNzdW1lIHRoYXQgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvdGVjdGVkIGJ5IGEgbXV0ZXgKKyAqIGluIHRoZSBjYWxsZXIgKHRoaXMgaXMgYSB2YWxpZCBhc3N1bXB0aW9uIGZvciB0aGUgY3VycmVudAorICogaW1wbGVtZW50YXRpb24pLgorICoKKyAqIEZyZWVpbmcgYWx3YXlzIGhhcHBlbnMgaW4gYW4gaW50ZXJydXB0LCBhbmQgaGVuY2Ugb25seQorICogcmFjZXMgd2l0aCBhbGxvY2F0aW9ucywgYnV0IG5vdCB3aXRoIG90aGVyIGZyZWUoKXMuCisgKgorICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpcyB0aGF0CisgKiB0aGUgYWxsb2MgY29kZSBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZnJlZSBlbnRyaWVzLgorICogVG8gdGhpcyBlbmQsIHdlIG1haW50YWluIHR3byBjb3VudGVyczsgYW4gYWxsb2NhdGlvbiBjb3VudGVyCisgKiBhbmQgYSBmcmVlIGNvdW50ZXIuIEJvdGggYXJlIGFsbG93ZWQgdG8gcnVuIGZyZWVseSwgYW5kIHdyYXAKKyAqIGFyb3VuZC4KKyAqIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIGFsd2F5cyAoYWxsb2NfY3RyIC0gZnJlZV9jdHIpICUgTlIuCisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgZnJlZV9jdHIgYXRvbWljLiBXaGVuIHRoZQorICogY2FsbGVyIGZpbmRzIGFuIGFsbG9jYXRpb24gZmFpbHMsIGl0IHNob3VsZCBzZXQgYW4gImFsbG9jIGZhaWwiCisgKiBiaXQgYW5kIHJldHJ5IHRoZSBhbGxvY2F0aW9uLiBUaGUgImFsbG9jIGZhaWwiIGJpdCBlc3NlbnRpYWxseSB0ZWxscworICogdGhlIENRIGNvbXBsZXRpb24gaGFuZGxlcnMgdG8gd2FrZSBpdCB1cCBhZnRlciBmcmVlaW5nIHNvbWUKKyAqIG1vcmUgZW50cmllcy4KKyAqLworCisvKgorICogVGhpcyBvbmx5IGhhcHBlbnMgb24gc2h1dGRvd24uCisgKi8KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19pYl9yaW5nX2VtcHR5X3dhaXQpOworCit2b2lkIHJkc19pYl9yaW5nX2luaXQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwltZW1zZXQocmluZywgMCwgc2l6ZW9mKCpyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworCXJkc2RlYnVnKCJyaW5nICVwIG5yICV1XG4iLCByaW5nLCByaW5nLT53X25yKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yZHNfaWJfcmluZ191c2VkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXUzMiBkaWZmOworCisJLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaGFzIGF0IGxlYXN0IGFzIG1hbnkgYml0cyBhcyB1MzIgKi8KKwlkaWZmID0gcmluZy0+d19hbGxvY19jdHIgLSAodTMyKSBhdG9taWNfcmVhZCgmcmluZy0+d19mcmVlX2N0cik7CisJQlVHX09OKGRpZmYgPiByaW5nLT53X25yKTsKKworCXJldHVybiBkaWZmOworfQorCit2b2lkIHJkc19pYl9yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCS8qIFdlIG9ubHkgZXZlciBnZXQgY2FsbGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gc2V0dXAgY29kZSwKKwkgKiBwcmlvciB0byBjcmVhdGluZyB0aGUgUVAuICovCisJQlVHX09OKF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworfQorCitzdGF0aWMgaW50IF9fcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSA9PSAwOworfQorCit1MzIgcmRzX2liX3JpbmdfYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKQoreworCXUzMiByZXQgPSAwLCBhdmFpbDsKKworCWF2YWlsID0gcmluZy0+d19uciAtIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHZhbCAldSBuZXh0ICV1IGZyZWUgJXVcbiIsIHJpbmcsIHZhbCwKKwkJIHJpbmctPndfYWxsb2NfcHRyLCBhdmFpbCk7CisKKwlpZiAodmFsICYmIGF2YWlsKSB7CisJCXJldCA9IG1pbih2YWwsIGF2YWlsKTsKKwkJKnBvcyA9IHJpbmctPndfYWxsb2NfcHRyOworCisJCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyICsgcmV0KSAlIHJpbmctPndfbnI7CisJCXJpbmctPndfYWxsb2NfY3RyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9yaW5nX2ZyZWUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19mcmVlX3B0ciA9IChyaW5nLT53X2ZyZWVfcHRyICsgdmFsKSAlIHJpbmctPndfbnI7CisJYXRvbWljX2FkZCh2YWwsICZyaW5nLT53X2ZyZWVfY3RyKTsKKworCWlmIChfX3Jkc19pYl9yaW5nX2VtcHR5KHJpbmcpICYmCisJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19pYl9yaW5nX2VtcHR5X3dhaXQpKQorCQl3YWtlX3VwKCZyZHNfaWJfcmluZ19lbXB0eV93YWl0KTsKK30KKwordm9pZCByZHNfaWJfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyIC0gdmFsKSAlIHJpbmctPndfbnI7CisJcmluZy0+d19hbGxvY19jdHIgLT0gdmFsOworfQorCitpbnQgcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfZW1wdHkocmluZyk7Cit9CisKK2ludCByZHNfaWJfcmluZ19sb3coc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSA8PSAocmluZy0+d19uciA+PiAyKTsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG9sZGVzdCBhbGxvY2VkIHJpbmcgZW50cnkuICBUaGlzIHdpbGwgYmUgdGhlIG5leHQgb25lCisgKiBmcmVlZC4gIFRoaXMgY2FuJ3QgYmUgY2FsbGVkIGlmIHRoZXJlIGFyZSBub25lIGFsbG9jYXRlZC4KKyAqLwordTMyIHJkc19pYl9yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gcmluZy0+d19mcmVlX3B0cjsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgd29yayByZXF1ZXN0cy4KKyAqLworCit1MzIgcmRzX2liX3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpCit7CisJdTMyIHJldDsKKworCWlmIChvbGRlc3QgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCkKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCAtIG9sZGVzdCArIDE7CisJZWxzZQorCQlyZXQgPSByaW5nLT53X25yIC0gb2xkZXN0ICsgKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCArIDE7CisKKwlyZHNkZWJ1ZygicmluZyAlcCByZXQgJXUgd3JfaWQgJXUgb2xkZXN0ICV1XG4iLCByaW5nLCByZXQsCisJCSB3cl9pZCwgb2xkZXN0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9zZW5kLmMgYi9uZXQvcmRzL2liX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZjNTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zZW5kLmMKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCQkgICAgICBpbnQgd2Nfc3RhdHVzKQoreworCWludCBub3RpZnlfc3RhdHVzOworCisJc3dpdGNoICh3Y19zdGF0dXMpIHsKKwljYXNlIElCX1dDX1dSX0ZMVVNIX0VSUjoKKwkJcmV0dXJuOworCisJY2FzZSBJQl9XQ19TVUNDRVNTOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfU1VDQ0VTUzsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dDX1JFTV9BQ0NFU1NfRVJSOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfUkVNT1RFX0VSUk9SOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9PVEhFUl9FUlJPUjsKKwkJYnJlYWs7CisJfQorCXJkc19yZG1hX3NlbmRfY29tcGxldGUocm0sIG5vdGlmeV9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF91bm1hcF9yZG1hKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlpZiAob3AtPnJfbWFwcGVkKSB7CisJCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLAorCQkJb3AtPnJfd3JpdGUgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJb3AtPnJfbWFwcGVkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3VubWFwX3JtKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkgIHN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kLAorCQkJICBpbnQgd2Nfc3RhdHVzKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBzZW5kLT5zX3JtOworCisJcmRzZGVidWcoImljICVwIHNlbmQgJXAgcm0gJXBcbiIsIGljLCBzZW5kLCBybSk7CisKKwlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJICAgICBybS0+bV9zZywgcm0tPm1fbmVudHMsCisJCSAgICAgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAocm0tPm1fcmRtYV9vcCAhPSBOVUxMKSB7CisJCXJkc19pYl9zZW5kX3VubWFwX3JkbWEoaWMsIHJtLT5tX3JkbWFfb3ApOworCisJCS8qIElmIHRoZSB1c2VyIGFza2VkIGZvciBhIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIG9uIHRoaXMKKwkJICogbWVzc2FnZSwgd2UgY2FuIGltcGxlbWVudCB0aHJlZSBkaWZmZXJlbnQgc2VtYW50aWNzOgorCQkgKiAgMS4JTm90aWZ5IHdoZW4gd2UgcmVjZWl2ZWQgdGhlIEFDSyBvbiB0aGUgUkRTIG1lc3NhZ2UKKwkJICoJdGhhdCB3YXMgcXVldWVkIHdpdGggdGhlIFJETUEuIFRoaXMgcHJvdmlkZXMgcmVsaWFibGUKKwkJICoJbm90aWZpY2F0aW9uIG9mIFJETUEgc3RhdHVzIGF0IHRoZSBleHBlbnNlIG9mIGEgb25lLXdheQorCQkgKglwYWNrZXQgZGVsYXkuCisJCSAqICAyLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBSRE1BIG9wZXJhdGlvbi4KKwkJICogIDMuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIGFjY29tcGFueWluZyBSRFMgbWVzc2FnZXMuCisJCSAqIEhlcmUsIHdlIGltcGxlbWVudCBhcHByb2FjaCAjMy4gVG8gaW1wbGVtZW50IGFwcHJvYWNoICMyLAorCQkgKiBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgZnJvbSB0aGUgY3FfaGFuZGxlci4gVG8gaW1wbGVtZW50ICMxLAorCQkgKiBkb24ndCBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgYXQgYWxsLCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3RpZnkKKwkJICogaGFuZGxpbmcgaW4gdGhlIEFDSyBwcm9jZXNzaW5nIGNvZGUuCisJCSAqCisJCSAqIE5vdGU6IFRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHN5bmMgYW55IFJETUEgYnVmZmVycyB1c2luZworCQkgKiBpYl9kbWFfc3luY19zZ19mb3JfY3B1IC0gdGhlIGNvbXBsZXRpb24gZm9yIHRoZSBSRE1BCisJCSAqIG9wZXJhdGlvbiBpdHNlbGYgdW5tYXBwZWQgdGhlIFJETUEgYnVmZmVycywgd2hpY2ggdGFrZXMgY2FyZQorCQkgKiBvZiBzeW5jaGluZy4KKwkJICovCisJCXJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjX3N0YXR1cyk7CisKKwkJaWYgKHJtLT5tX3JkbWFfb3AtPnJfd3JpdGUpCisJCQlyZHNfc3RhdHNfYWRkKHNfc2VuZF9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwkJZWxzZQorCQkJcmRzX3N0YXRzX2FkZChzX3JlY3ZfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJfQorCisJLyogSWYgYW55b25lIHdhaXRlZCBmb3IgdGhpcyBtZXNzYWdlIHRvIGdldCBmbHVzaGVkIG91dCwgd2FrZQorCSAqIHRoZW0gdXAgbm93ICovCisJcmRzX21lc3NhZ2VfdW5tYXBwZWQocm0pOworCisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlzZW5kLT5zX3JtID0gTlVMTDsKK30KKwordm9pZCByZHNfaWJfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJc2VuZC0+c19ybSA9IE5VTEw7CisJCXNlbmQtPnNfb3AgPSBOVUxMOworCisJCXNlbmQtPnNfd3Iud3JfaWQgPSBpOworCQlzZW5kLT5zX3dyLnNnX2xpc3QgPSBzZW5kLT5zX3NnZTsKKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3dyLmV4LmltbV9kYXRhID0gMDsKKworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisJfQorfQorCit2b2lkIHJkc19pYl9zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gMHhkZWFkKQorCQkJY29udGludWU7CisJCWlmIChzZW5kLT5zX3JtKQorCQkJcmRzX2liX3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIElCX1dDX1dSX0ZMVVNIX0VSUik7CisJCWlmIChzZW5kLT5zX29wKQorCQkJcmRzX2liX3NlbmRfdW5tYXBfcmRtYShpYywgc2VuZC0+c19vcCk7CisJfQorfQorCisvKgorICogVGhlIF9vbGRlc3QvX2ZyZWUgcmluZyBvcGVyYXRpb25zIGhlcmUgcmFjZSBjbGVhbmx5IHdpdGggdGhlIGFsbG9jL3VuYWxsb2MKKyAqIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGluIHRoZSBzZW5kIHBhdGguICBBcyB0aGUgc2VuZGVyIGFsbG9jcyBhbmQgcG90ZW50aWFsbHkKKyAqIHVuYWxsb2NzIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIHJpbmcgaXQgZG9lc24ndCBhbHRlciB3aGljaCBpcworICogdGhlIG5leHQgdG8gYmUgZnJlZWQsIHdoaWNoIGlzIHdoYXQgdGhpcyBpcyBjb25jZXJuZWQgd2l0aC4KKyAqLwordm9pZCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBvbGRlc3Q7CisJdTMyIGkgPSAwOworCWludCByZXQ7CisKKwlyZHNkZWJ1ZygiY3EgJXAgY29ubiAlcFxuIiwgY3EsIGNvbm4pOworCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcV9jYWxsKTsKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpCisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcV9ldmVudCk7CisKKwkJaWYgKHdjLndyX2lkID09IFJEU19JQl9BQ0tfV1JfSUQpIHsKKwkJCWlmIChpYy0+aV9hY2tfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3N0YWxsZWQpOworCQkJcmRzX2liX2Fja19zZW5kX2NvbXBsZXRlKGljKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkZXN0ID0gcmRzX2liX3Jpbmdfb2xkZXN0KCZpYy0+aV9zZW5kX3JpbmcpOworCisJCWNvbXBsZXRlZCA9IHJkc19pYl9yaW5nX2NvbXBsZXRlZCgmaWMtPmlfc2VuZF9yaW5nLCB3Yy53cl9pZCwgb2xkZXN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29tcGxldGVkOyBpKyspIHsKKwkJCXNlbmQgPSAmaWMtPmlfc2VuZHNbb2xkZXN0XTsKKworCQkJLyogSW4gdGhlIGVycm9yIGNhc2UsIHdjLm9wY29kZSBzb21ldGltZXMgY29udGFpbnMgZ2FyYmFnZSAqLworCQkJc3dpdGNoIChzZW5kLT5zX3dyLm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9TRU5EOgorCQkJCWlmIChzZW5kLT5zX3JtKQorCQkJCQlyZHNfaWJfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgd2Muc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSAtIHRoZSBTRyBsaXN0IHdpbGwgYmUgdW5tYXBwZWQKKwkJCQkgKiB3aGVuIHRoZSBTRU5EIGNvbXBsZXRlcy4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCQkiUkRTL0lCOiAlczogdW5leHBlY3RlZCBvcGNvZGUgMHgleCBpbiBXUiFcbiIsCisJCQkJCQlfX2Z1bmNfXywgc2VuZC0+c193ci5vcGNvZGUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IDB4ZGVhZDsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlpZiAoc2VuZC0+c19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc3RhbGxlZCk7CisKKwkJCS8qIElmIGEgUkRNQSBvcGVyYXRpb24gcHJvZHVjZWQgYW4gZXJyb3IsIHNpZ25hbCB0aGlzIHJpZ2h0CisJCQkgKiBhd2F5LiBJZiB3ZSBkb24ndCwgdGhlIHN1YnNlcXVlbnQgU0VORCB0aGF0IGdvZXMgd2l0aCB0aGlzCisJCQkgKiBSRE1BIHdpbGwgYmUgY2FuY2VsZWQgd2l0aCBFUlJfV0ZMVVNILCBhbmQgdGhlIGFwcGxpY2F0aW9uCisJCQkgKiBuZXZlciBsZWFybiB0aGF0IHRoZSBSRE1BIGZhaWxlZC4gKi8KKwkJCWlmICh1bmxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfUkVNX0FDQ0VTU19FUlIgJiYgc2VuZC0+c19vcCkpIHsKKwkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJCQkJcm0gPSByZHNfc2VuZF9nZXRfbWVzc2FnZShjb25uLCBzZW5kLT5zX29wKTsKKwkJCQlpZiAocm0pCisJCQkJCXJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjLnN0YXR1cyk7CisJCQl9CisKKwkJCW9sZGVzdCA9IChvbGRlc3QgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCQl9CisKKwkJcmRzX2liX3JpbmdfZnJlZSgmaWMtPmlfc2VuZF9yaW5nLCBjb21wbGV0ZWQpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpCisJCSB8fCB0ZXN0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTICYmIHJkc19jb25uX3VwKGNvbm4pKSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLAorCQkJCSJzZW5kIGNvbXBsZXRpb24gb24gJXBJNCAiCisJCQkJImhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCQkmY29ubi0+Y19mYWRkciwgd2Muc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgY3JlZGl0cyB3aGVuIHNlbmRpbmcKKyAqIG1lc3NhZ2VzLgorICoKKyAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CisgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KKyAqCisgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKKyAqCXBvc3RlZCB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4gVGhpcyB2YWx1ZSBpcyB0cmFuc2ZlcnJlZAorICoJdG8gdGhlIHBlZXIgYXMgYSAiY3JlZGl0IHVwZGF0ZSIgaW4gYSBSRFMgaGVhZGVyIGZpZWxkLgorICoJRXZlcnkgdGltZSB3ZSB0cmFuc21pdCBjcmVkaXRzIHRvIHRoZSBwZWVyLCB3ZSBzdWJ0cmFjdAorICoJdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBjcmVkaXRzIGZyb20gdGhpcyBjb3VudGVyLgorICoKKyAqIEl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgYm90aCBzaWRlcyBoYXZlCisgKiBleGhhdXN0ZWQgdGhlaXIgc2VuZCBjcmVkaXRzLCBhbmQgYXJlIHVuYWJsZSB0byBzZW5kIG5ldyBjcmVkaXRzCisgKiB0byB0aGUgcGVlci4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHJlcXVpcmluZyB0aGF0IHdlIHNlbmQgYXQgbGVhc3QKKyAqIG9uZSBjcmVkaXQgdXBkYXRlIHRvIHRoZSBwZWVyIGJlZm9yZSBleGhhdXN0aW5nIG91ciBjcmVkaXRzLgorICogV2hlbiBuZXcgY3JlZGl0cyBhcnJpdmUsIHdlIHN1YnRyYWN0IG9uZSBjcmVkaXQgdGhhdCBpcyB3aXRoaGVsZAorICogdW50aWwgd2UndmUgcG9zdGVkIG5ldyBidWZmZXJzIGFuZCBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlc2UKKyAqIGNyZWRpdHMgKHNlZSByZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyBiZWxvdykuCisgKgorICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0CisgKiBncmFicyBjX3NlbmRfbG9jayB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLgorICogSG93ZXZlciwgdGhlIEFDSyBzZW5kaW5nIGNvZGUgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbiByYWNlIHdpdGgKKyAqIG1lc3NhZ2UgU0VORHMuCisgKgorICogSW4gdGhlIHNlbmQgcGF0aCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGZvciBzZW5kIGNyZWRpdHMKKyAqIGFuZCB0aGUgY291bnRlciBvZiBwb3N0ZWQgYnVmZmVycyBhdG9taWNhbGx5IC0gd2hlbiB3ZSB1c2UgdGhlCisgKiBsYXN0IGF2YWlsYWJsZSBjcmVkaXQsIHdlIGNhbm5vdCBhbGxvdyBhbm90aGVyIHRocmVhZCB0byByYWNlIHVzCisgKiBhbmQgZ3JhYiB0aGUgcG9zdGVkIGNyZWRpdHMgY291bnRlci4gIEhlbmNlLCB3ZSBoYXZlIHRvIHVzZSBhCisgKiBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcmVkaXQgY291bnRlciwgb3IgdXNlIGF0b21pY3MuCisgKgorICogU3BpbmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGFyZSBiYWQsCisgKiBiZWNhdXNlIHRoZXkgY3JlYXRlIHVubmVjZXNzYXJ5IGRlbGF5cy4gQW4gZWFybHkgaW1wbGVtZW50YXRpb24KKyAqIHVzaW5nIGEgc3BpbmxvY2sgc2hvd2VkIGEgNSUgZGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBhdCBzb21lCisgKiBsb2Fkcy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBzcGlubG9ja3MgY29tcGxldGVseSwgcHV0dGluZyBib3RoCisgKiBjb3VudGVycyBpbnRvIGEgc2luZ2xlIGF0b21pYywgYW5kIHVwZGF0aW5nIHRoYXQgYXRvbWljIHVzaW5nCisgKiBhdG9taWNfYWRkIChpbiB0aGUgcmVjZWl2ZSBwYXRoLCB3aGVuIHJlY2VpdmluZyBmcmVzaCBjcmVkaXRzKSwKKyAqIGFuZCB1c2luZyBhdG9taWNfY21weGNoZyB3aGVuIHVwZGF0aW5nIHRoZSB0d28gY291bnRlcnMuCisgKi8KK2ludCByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCSAgICAgdTMyIHdhbnRlZCwgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKQoreworCXVuc2lnbmVkIGludCBhdmFpbCwgcG9zdGVkLCBnb3QgPSAwLCBhZHZlcnRpc2U7CisJbG9uZyBvbGR2YWwsIG5ld3ZhbDsKKworCSphZHZfY3JlZGl0cyA9IDA7CisJaWYgKCFpYy0+aV9mbG93Y3RsKQorCQlyZXR1cm4gd2FudGVkOworCit0cnlfYWdhaW46CisJYWR2ZXJ0aXNlID0gMDsKKwlvbGR2YWwgPSBuZXd2YWwgPSBhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cyk7CisJcG9zdGVkID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhvbGR2YWwpOworCWF2YWlsID0gSUJfR0VUX1NFTkRfQ1JFRElUUyhvbGR2YWwpOworCisJcmRzZGVidWcoInJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cygldSk6IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAorCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKKworCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCisJaWYgKGF2YWlsICYmICFwb3N0ZWQpCisJCWF2YWlsLS07CisKKwlpZiAoYXZhaWwgPCB3YW50ZWQpIHsKKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtPmlfY21faWQtPmNvbnRleHQ7CisKKwkJLyogT29wcywgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBjcmVkaXRzIGxlZnQhICovCisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlnb3QgPSBhdmFpbDsKKwl9IGVsc2UgeworCQkvKiBTb21ldGltZXMgeW91IGdldCB3aGF0IHlvdSB3YW50LCBsYWxhbGEuICovCisJCWdvdCA9IHdhbnRlZDsKKwl9CisJbmV3dmFsIC09IElCX1NFVF9TRU5EX0NSRURJVFMoZ290KTsKKworCS8qCisJICogSWYgbmVlZF9wb3N0ZWQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGNhbGxlciB3YW50cworCSAqIHRoZSBwb3N0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBzZW5kIGNyZWRpdHMgYXJlCisJICogYXZhaWxhYmxlLgorCSAqLworCWlmIChwb3N0ZWQgJiYgKGdvdCB8fCBuZWVkX3Bvc3RlZCkpIHsKKwkJYWR2ZXJ0aXNlID0gbWluX3QodW5zaWduZWQgaW50LCBwb3N0ZWQsIFJEU19NQVhfQURWX0NSRURJVCk7CisJCW5ld3ZhbCAtPSBJQl9TRVRfUE9TVF9DUkVESVRTKGFkdmVydGlzZSk7CisJfQorCisJLyogRmluYWxseSBiaWxsIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoYXRvbWljX2NtcHhjaGcoJmljLT5pX2NyZWRpdHMsIG9sZHZhbCwgbmV3dmFsKSAhPSBvbGR2YWwpCisJCWdvdG8gdHJ5X2FnYWluOworCisJKmFkdl9jcmVkaXRzID0gYWR2ZXJ0aXNlOworCXJldHVybiBnb3Q7Cit9CisKK3ZvaWQgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChjcmVkaXRzID09IDApCisJCXJldHVybjsKKworCXJkc2RlYnVnKCJyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cygldSk6IGN1cnJlbnQ9JXUlc1xuIiwKKwkJCWNyZWRpdHMsCisJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCisJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOworCisJYXRvbWljX2FkZChJQl9TRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwlXQVJOX09OKElCX0dFVF9TRU5EX0NSRURJVFMoY3JlZGl0cykgPj0gMTYzODQpOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NyZWRpdF91cGRhdGVzKTsKK30KKwordm9pZCByZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHBvc3RlZCA9PSAwKQorCQlyZXR1cm47CisKKwlhdG9taWNfYWRkKElCX1NFVF9QT1NUX0NSRURJVFMocG9zdGVkKSwgJmljLT5pX2NyZWRpdHMpOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIHBlZXIgbm93LgorCSAqIElmIHdlIHdvdWxkIHNlbmQgYSBjcmVkaXQgdXBkYXRlIGZvciBldmVyeSBzaW5nbGUgYnVmZmVyIHdlCisJICogcG9zdCwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gQUNLIHN0b3JtIChBQ0sgYXJyaXZlcywKKwkgKiBjb25zdW1lcyBidWZmZXIsIHdlIHJlZmlsbCB0aGUgcmluZywgc2VuZCBBQ0sgdG8gcmVtb3RlCisJICogYWR2ZXJ0aXNpbmcgdGhlIG5ld2x5IHBvc3RlZCBidWZmZXIuLi4gYWQgaW5mKQorCSAqCisJICogUGVyZm9ybWFuY2UgcHJldHR5IG11Y2ggZGVwZW5kcyBvbiBob3cgb2Z0ZW4gd2Ugc2VuZAorCSAqIGNyZWRpdCB1cGRhdGVzIC0gdG9vIGZyZXF1ZW50IHVwZGF0ZXMgbWVhbiBsb3RzIG9mIEFDS3MuCisJICogVG9vIGluZnJlcXVlbnQgdXBkYXRlcywgYW5kIHRoZSBwZWVyIHdpbGwgcnVuIG91dCBvZgorCSAqIGNyZWRpdHMgYW5kIGhhcyB0byB0aHJvdHRsZS4KKwkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIDE2IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorCSAqLworCWlmIChJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSkgPj0gMTYpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmRzX2liX3htaXRfcG9wdWxhdGVfd3Ioc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGxvbmcgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQlpbnQgc2VuZF9mbGFncykKK3sKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwlXQVJOX09OKHBvcyAhPSBzZW5kIC0gaWMtPmlfc2VuZHMpOworCisJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gc2VuZF9mbGFnczsKKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJc2VuZC0+c193ci5udW1fc2dlID0gMjsKKwlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwlzZW5kLT5zX29wID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gMCkgeworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gYnVmZmVyOworCQlzZ2UtPmxlbmd0aCA9IGxlbmd0aDsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwl9IGVsc2UgeworCQkvKiBXZSdyZSBzZW5kaW5nIGEgcGFja2V0IHdpdGggbm8gcGF5bG9hZC4gVGhlcmUgaXMgb25seQorCQkgKiBvbmUgU0dFICovCisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNnZSA9ICZzZW5kLT5zX3NnZVswXTsKKwl9CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKHBvcyAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKK30KKworLyoKKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBtZXNzYWdlLiAgVGhlIGZpcnN0IHRpbWUKKyAqIHdlIHNlZSBhIG1lc3NhZ2Ugd2UgbWFwIGl0cyBzY2F0dGVybGlzdCBpbnRvIHRoZSBJQiBkZXZpY2Ugc28gdGhhdAorICogd2UgY2FuIHByb3ZpZGUgdGhhdCBtYXBwZWQgYWRkcmVzcyB0byB0aGUgSUIgc2NhdHRlciBnYXRoZXIgZW50cmllcworICogaW4gdGhlIElCIHdvcmsgcmVxdWVzdHMuICBXZSB0cmFuc2xhdGUgdGhlIHNjYXR0ZXJsaXN0IGludG8gYSBzZXJpZXMKKyAqIG9mIHdvcmsgcmVxdWVzdHMgdGhhdCBmcmFnbWVudCB0aGUgbWVzc2FnZS4gIFRoZXNlIHdvcmsgcmVxdWVzdHMgY29tcGxldGUKKyAqIGluIG9yZGVyIHNvIHdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIG9uY2Ugd2Ugc2VuZCB0aGUgZmluYWwgZnJhZ21lbnQuCisgKgorICogVGhlIFJEUyBjb3JlIHVzZXMgdGhlIGNfc2VuZF9sb2NrIHRvIG9ubHkgZW50ZXIgdGhpcyBmdW5jdGlvbiBvbmNlCisgKiBwZXIgY29ubmVjdGlvbi4gIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB0eCByaW5nIGFsbG9jL3VuYWxsb2MgcGFpcnMKKyAqIGRvbid0IGdldCBvdXQgb2Ygc3luYyBhbmQgY29uZnVzZSB0aGUgcmluZy4KKyAqLworaW50IHJkc19pYl94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdTMyIHBvczsKKwl1MzIgaTsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgY3JlZGl0X2FsbG9jOworCXUzMiBwb3N0ZWQ7CisJdTMyIGFkdl9jcmVkaXRzID0gMDsKKwlpbnQgc2VuZF9mbGFncyA9IDA7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgZmxvd19jb250cm9sbGVkID0gMDsKKworCUJVR19PTihvZmYgJSBSRFNfRlJBR19TSVpFKTsKKwlCVUdfT04oaGRyX29mZiAhPSAwICYmIGhkcl9vZmYgIT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkvKiBGSVhNRSB3ZSBtYXkgb3ZlcmFsbG9jYXRlIGhlcmUgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKQorCQlpID0gMTsKKwllbHNlCisJCWkgPSBjZWlsKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbiksIFJEU19GUkFHX1NJWkUpOworCisJd29ya19hbGxvYyA9IHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRfYWxsb2MgPSB3b3JrX2FsbG9jOworCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCWNyZWRpdF9hbGxvYyA9IHJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgd29ya19hbGxvYywgJnBvc3RlZCwgMCk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJaWYgKGNyZWRpdF9hbGxvYyA8IHdvcmtfYWxsb2MpIHsKKwkJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGNyZWRpdF9hbGxvYyk7CisJCQl3b3JrX2FsbG9jID0gY3JlZGl0X2FsbG9jOworCQkJZmxvd19jb250cm9sbGVkKys7CisJCX0KKwkJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF90aHJvdHRsZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKGljLT5pX3JtID09IE5VTEwpIHsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyZHNfaWJfeG1pdCBwcmVwIG1zZyBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCksCisJCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSk7CisJCSAgICovCisJCWlmIChybS0+bV9uZW50cykgeworCQkJcm0tPm1fY291bnQgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJIHJtLT5tX3NnLCBybS0+bV9uZW50cywgRE1BX1RPX0RFVklDRSk7CisJCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBybSAlcDogJWRcbiIsIGljLCBybSwgcm0tPm1fY291bnQpOworCQkJaWYgKHJtLT5tX2NvdW50ID09IDApIHsKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlybS0+bV9jb3VudCA9IDA7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlpYy0+aV9ybSA9IHJtOworCisJCS8qIEZpbmFsaXplIHRoZSBoZWFkZXIgKi8KKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfQUNLX1JFUVVJUkVEOworCQlpZiAodGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfUkVUUkFOU01JVFRFRDsKKworCQkvKiBJZiBpdCBoYXMgYSBSRE1BIG9wLCB0ZWxsIHRoZSBwZWVyIHdlIGRpZCBpdC4gVGhpcyBpcworCQkgKiB1c2VkIGJ5IHRoZSBwZWVyIHRvIHJlbGVhc2UgdXNlLW9uY2UgUkRNQSBNUnMuICovCisJCWlmIChybS0+bV9yZG1hX29wKSB7CisJCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSBleHRfaGRyOworCisJCQlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocm0tPm1fcmRtYV9vcC0+cl9rZXkpOworCQkJcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlSRFNfRVhUSERSX1JETUEsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworCQl9CisJCWlmIChybS0+bV9yZG1hX2Nvb2tpZSkgeworCQkJcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocm0tPm1fcmRtYV9jb29raWUpKTsKKwkJfQorCisJCS8qIE5vdGUgLSByZHNfaWJfcGlnZ3liX2FjayBjbGVhcnMgdGhlIEFDS19SRVFVSVJFRCBiaXQsIHNvCisJCSAqIHdlIHNob3VsZCBub3QgZG8gdGhpcyB1bmxlc3Mgd2UgaGF2ZSBhIGNoYW5jZSBvZiBhdCBsZWFzdAorCQkgKiBzdGlja2luZyB0aGUgaGVhZGVyIGludG8gdGhlIHNlbmQgcmluZy4gV2hpY2ggaXMgd2h5IHdlCisJCSAqIHNob3VsZCBjYWxsIHJkc19pYl9yaW5nX2FsbG9jIGZpcnN0LiAqLworCQlybS0+bV9pbmMuaV9oZHIuaF9hY2sgPSBjcHVfdG9fYmU2NChyZHNfaWJfcGlnZ3liX2FjayhpYykpOworCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKCZybS0+bV9pbmMuaV9oZHIpOworCisJCS8qCisJCSAqIFVwZGF0ZSBhZHZfY3JlZGl0cyBzaW5jZSB3ZSByZXNldCB0aGUgQUNLX1JFUVVJUkVEIGJpdC4KKwkJICovCisJCXJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgMCwgJnBvc3RlZCwgMSk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJQlVHX09OKGFkdl9jcmVkaXRzID4gMjU1KTsKKwl9IGVsc2UgaWYgKGljLT5pX3JtICE9IHJtKQorCQlCVUcoKTsKKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZybS0+bV9zZ1tzZ107CisJc2VudCA9IDA7CisJaSA9IDA7CisKKwkvKiBTb21ldGltZXMgeW91IHdhbnQgdG8gcHV0IGEgZmVuY2UgYmV0d2VlbiBhbiBSRE1BCisJICogUkVBRCBhbmQgdGhlIGZvbGxvd2luZyBTRU5ELgorCSAqIFdlIGNvdWxkIGVpdGhlciBkbyB0aGlzIGFsbCB0aGUgdGltZQorCSAqIG9yIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBSaWdodCBub3csIHdlIGxldAorCSAqIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2UuCisJICovCisJaWYgKHJtLT5tX3JkbWFfb3AgJiYgcm0tPm1fcmRtYV9vcC0+cl9mZW5jZSkKKwkJc2VuZF9mbGFncyA9IElCX1NFTkRfRkVOQ0U7CisKKwkvKgorCSAqIFdlIGNvdWxkIGJlIGNvcHlpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSB1bnVzZWQgdGFpbCBvZiB0aGUgcGFnZS4KKwkgKiBUaGF0IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhvc2UgcGFnZXMgbWlnaHQKKwkgKiBiZSBtYXBwZWQgdXNlcnNwYWNlIHBhZ2VzIG9yIHBhZ2UgY2FjaGUgcGFnZXMuICBTbyBpbnN0ZWFkIHdlIGFsd2F5cworCSAqIHVzZSBhIHNlY29uZCBzZ2UgYW5kIG91ciBsb25nLWxpdmVkIHJpbmcgb2YgbWFwcGVkIGhlYWRlcnMuICBXZSBzZW5kCisJICogdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkYXRhIHBheWxvYWQgY2FuIGJlIGFsaWduZWQgb24KKwkgKiB0aGUgcmVjZWl2ZXIuCisJICovCisKKwkvKiBoYW5kbGUgYSAwLWxlbiBtZXNzYWdlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkgeworCQlyZHNfaWJfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLCAwLCAwLCBzZW5kX2ZsYWdzKTsKKwkJZ290byBhZGRfaGVhZGVyOworCX0KKworCS8qIGlmIHRoZXJlJ3MgZGF0YSByZWZlcmVuY2UgaXQgd2l0aCBhIGNoYWluIG9mIHdvcmsgcmVxcyAqLworCWZvciAoOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZybS0+bV9zZ1tybS0+bV9jb3VudF07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKworCQlsZW4gPSBtaW4oUkRTX0ZSQUdfU0laRSwgaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpIC0gb2ZmKTsKKwkJcmRzX2liX3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsIHNjYXQpICsgb2ZmLCBsZW4sCisJCQkJc2VuZF9mbGFncyk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lCisJCSAqIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyAtPSBsZW47CisJCWlmIChpYy0+aV91bnNpZ25hbGVkX2J5dGVzIDw9IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgc2lnbmFsIHRoZSBsYXN0IG9uZSBpZiB3ZSdyZSBzdG9wcGluZyBkdWUgdG8gZmxvdyBjb250cm9sLgorCQkgKi8KKwkJaWYgKGZsb3dfY29udHJvbGxlZCAmJiBpID09ICh3b3JrX2FsbG9jLTEpKQorCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkgJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlzZW50ICs9IGxlbjsKKwkJb2ZmICs9IGxlbjsKKwkJaWYgKG9mZiA9PSBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkpIHsKKwkJCXNjYXQrKzsKKwkJCW9mZiA9IDA7CisJCX0KKworYWRkX2hlYWRlcjoKKwkJLyogVGFjayBvbiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhLiBUaGUgaGVhZGVyIFNHRSBzaG91bGQgYWxyZWFkeQorCQkgKiBoYXZlIGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSByaWdodCBoZWFkZXIgYnVmZmVyLiAqLworCQltZW1jcHkoJmljLT5pX3NlbmRfaGRyc1twb3NdLCAmcm0tPm1faW5jLmlfaGRyLCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCQlpZiAoMCkgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZW5kIFdSIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KGhkci0+aF9kcG9ydCksCisJCQkJaGRyLT5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KGhkci0+aF9sZW4pKTsKKwkJfQorCQlpZiAoYWR2X2NyZWRpdHMpIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCS8qIGFkZCBjcmVkaXQgYW5kIHJlZG8gdGhlIGhlYWRlciBjaGVja3N1bSAqLworCQkJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCQkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCQkJYWR2X2NyZWRpdHMgPSAwOworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X2NyZWRpdF91cGRhdGVzKTsKKwkJfQorCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisJCXByZXYgPSBzZW5kOworCisJCXBvcyA9IChwb3MgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCX0KKworCS8qIEFjY291bnQgdGhlIFJEUyBoZWFkZXIgaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBzZW50LCBidXQganVzdCBvbmNlLgorCSAqIFRoZSBjYWxsZXIgaGFzIG5vIGNvbmNlcHQgb2YgZnJhZ21lbnRhdGlvbi4gKi8KKwlpZiAoaGRyX29mZiA9PSAwKQorCQlzZW50ICs9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XSkgeworCQlwcmV2LT5zX3JtID0gaWMtPmlfcm07CisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBpIDwgY3JlZGl0X2FsbG9jKQorCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRfYWxsb2MgLSBpKTsKKworCS8qIFhYWCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZhaWxlZF93ciBhbmQgcGFydGlhbCBzZW5kcy4gKi8KKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJaWYgKHByZXYtPnNfcm0pIHsKKwkJCWljLT5pX3JtID0gcHJldi0+c19ybTsKKwkJCXByZXYtPnNfcm0gPSBOVUxMOworCQl9CisJCS8qIEZpbmVzc2UgdGhpcyBsYXRlciAqLworCQlCVUcoKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gc2VudDsKK291dDoKKwlCVUdfT04oYWR2X2NyZWRpdHMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfaWJfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTY0IHJlbW90ZV9hZGRyID0gb3AtPnJfcmVtb3RlX2FkZHI7CisJdTMyIHBvczsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgaTsKKwl1MzIgajsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBudW1fc2dlOworCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKworCS8qIG1hcCB0aGUgbWVzc2FnZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgaXQgKi8KKwlpZiAoIW9wLT5yX21hcHBlZCkgeworCQlvcC0+cl9jb3VudCA9IGliX2RtYV9tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLCAob3AtPnJfd3JpdGUpID8KKwkJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCXJkc2RlYnVnKCJpYyAlcCBtYXBwaW5nIG9wICVwOiAlZFxuIiwgaWMsIG9wLCBvcC0+cl9jb3VudCk7CisJCWlmIChvcC0+cl9jb3VudCA9PSAwKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9wLT5yX21hcHBlZCA9IDE7CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGtub3dpbmcgaG93IHRvIHJldHVybiBhIHBhcnRpYWwgcmRtYSByZWFkL3dyaXRlIHdlIGluc2lzdCB0aGF0IHRoZXJlCisJICogYmUgZW5vdWdoIHdvcmsgcmVxdWVzdHMgdG8gc2VuZCB0aGUgZW50aXJlIG1lc3NhZ2UuCisJICovCisJaSA9IGNlaWwob3AtPnJfY291bnQsIHJkc19pYmRldi0+bWF4X3NnZSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2liX3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgIT0gaSkgeworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWZpcnN0ID0gc2VuZDsKKwlwcmV2ID0gTlVMTDsKKwlzY2F0ID0gJm9wLT5yX3NnWzBdOworCXNlbnQgPSAwOworCW51bV9zZ2UgPSBvcC0+cl9jb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JrX2FsbG9jICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaSsrKSB7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQl9CisKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBvcC0+cl93cml0ZSA/IElCX1dSX1JETUFfV1JJVEUgOiBJQl9XUl9SRE1BX1JFQUQ7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5yZW1vdGVfYWRkciA9IHJlbW90ZV9hZGRyOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmtleSA9IG9wLT5yX2tleTsKKwkJc2VuZC0+c19vcCA9IG9wOworCisJCWlmIChudW1fc2dlID4gcmRzX2liZGV2LT5tYXhfc2dlKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCQludW1fc2dlIC09IHJkc19pYmRldi0+bWF4X3NnZTsKKwkJfSBlbHNlIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IG51bV9zZ2U7CisJCX0KKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisKKwkJZm9yIChqID0gMDsgaiA8IHNlbmQtPnNfd3IubnVtX3NnZSAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGorKykgeworCQkJbGVuID0gaWJfc2dfZG1hX2xlbihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCXNlbmQtPnNfc2dlW2pdLmFkZHIgPQorCQkJCSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCXNlbmQtPnNfc2dlW2pdLmxlbmd0aCA9IGxlbjsKKwkJCXNlbmQtPnNfc2dlW2pdLmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQkJc2VudCArPSBsZW47CisJCQlyZHNkZWJ1ZygiaWMgJXAgc2VudCAlZCByZW1vdGVfYWRkciAlbGx1XG4iLCBpYywgc2VudCwgcmVtb3RlX2FkZHIpOworCisJCQlyZW1vdGVfYWRkciArPSBsZW47CisJCQlzY2F0Kys7CisJCX0KKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXByZXYgPSBzZW5kOworCQlpZiAoKytzZW5kID09ICZpYy0+aV9zZW5kc1tpYy0+aV9zZW5kX3Jpbmcud19ucl0pCisJCQlzZW5kID0gaWMtPmlfc2VuZHM7CisJfQorCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF0pCisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiByZG1hIGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseShmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3Bvc3Rfc2VuZCgpIHJjPSVkLCBidXQgZmFpbGVkX3dxZSB1cGRhdGVkIVxuIiwgcmV0KTsKKwkJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCX0KKworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBXZSBtYXkgaGF2ZSBhIHBlbmRpbmcgQUNLIG9yIHdpbmRvdyB1cGRhdGUgd2Ugd2VyZSB1bmFibGUKKwkgKiB0byBzZW5kIHByZXZpb3VzbHkgKGR1ZSB0byBmbG93IGNvbnRyb2wpLiBUcnkgYWdhaW4uICovCisJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3RhdHMuYyBiL25ldC9yZHMvaWJfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmUzZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zdGF0cy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzLCByZHNfaWJfc3RhdHMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGNoYXIgKnJkc19pYl9zdGF0X25hbWVzW10gPSB7CisJImliX2Nvbm5lY3RfcmFjZWQiLAorCSJpYl9saXN0ZW5fY2xvc2VkX3N0YWxlIiwKKwkiaWJfdHhfY3FfY2FsbCIsCisJImliX3R4X2NxX2V2ZW50IiwKKwkiaWJfdHhfcmluZ19mdWxsIiwKKwkiaWJfdHhfdGhyb3R0bGUiLAorCSJpYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmUiLAorCSJpYl90eF9zdGFsbGVkIiwKKwkiaWJfdHhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpYl9yeF9jcV9jYWxsIiwKKwkiaWJfcnhfY3FfZXZlbnQiLAorCSJpYl9yeF9yaW5nX2VtcHR5IiwKKwkiaWJfcnhfcmVmaWxsX2Zyb21fY3EiLAorCSJpYl9yeF9yZWZpbGxfZnJvbV90aHJlYWQiLAorCSJpYl9yeF9hbGxvY19saW1pdCIsCisJImliX3J4X2NyZWRpdF91cGRhdGVzIiwKKwkiaWJfYWNrX3NlbnQiLAorCSJpYl9hY2tfc2VuZF9mYWlsdXJlIiwKKwkiaWJfYWNrX3NlbmRfZGVsYXllZCIsCisJImliX2Fja19zZW5kX3BpZ2d5YmFja2VkIiwKKwkiaWJfYWNrX3JlY2VpdmVkIiwKKwkiaWJfcmRtYV9tcl9hbGxvYyIsCisJImliX3JkbWFfbXJfZnJlZSIsCisJImliX3JkbWFfbXJfdXNlZCIsCisJImliX3JkbWFfbXJfcG9vbF9mbHVzaCIsCisJImliX3JkbWFfbXJfcG9vbF93YWl0IiwKKwkiaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfaWJfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfaWJfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcykpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19pYl9zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX2liX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcykpOworb3V0OgorCXJldHVybiBBUlJBWV9TSVpFKHJkc19pYl9zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3lzY3RsLmMgYi9uZXQvcmRzL2liX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzgzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3N5c2N0bC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19pYl9zeXNjdGxfaGRyOworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IgPSBSRFNfSUJfREVGQVVMVF9TRU5EX1dSOwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyID0gUkRTX0lCX0RFRkFVTFRfUkVDVl9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gKDEyOCAqIDEwMjQgKiAxMDI0KSAvIFJEU19GUkFHX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF93cl9taW4gPSAxOworLyogaGFyZHdhcmUgd2lsbCBmYWlsIENRIGNyZWF0aW9uIGxvbmcgYmVmb3JlIHRoaXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3dyX21heCA9ICh1MzIpfjA7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzID0gMTY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMgPSAoMTYgPDwgMjApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisKK2N0bF90YWJsZSByZHNfaWJfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9zZW5kX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dycywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X2FsbG9jYXRpb24iLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImZsb3dfY29udHJvbCIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCwKKwkJLm1heGxlbgkJPSBzaXplb2YocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19pYl9zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyAucHJvY25hbWUgPSAiaWIiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3ZvaWQgcmRzX2liX3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19pYl9zeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfaWJfc3lzY3RsX2hkcik7Cit9CisKK2ludCBfX2luaXQgcmRzX2liX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX2liX3N5c2N0bF9oZHIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX2liX3N5c2N0bF9wYXRoLCByZHNfaWJfc3lzY3RsX3RhYmxlKTsKKwlpZiAocmRzX2liX3N5c2N0bF9oZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2luZm8uYyBiL25ldC9yZHMvaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODg1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2luZm8uYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgZ2V0c29ja29wdCgpIGNhbGwgd2hpY2ggY29waWVzIGEgc2V0IG9mIGZpeGVkCisgKiBzaXplZCBzdHJ1Y3RzIGludG8gYSB1c2VyLXNwZWNpZmllZCBidWZmZXIgYXMgYSBtZWFucyBvZiBwcm92aWRpbmcKKyAqIHJlYWQtb25seSBpbmZvcm1hdGlvbiBhYm91dCBSRFMuCisgKgorICogRm9yIGEgZ2l2ZW4gaW5mb3JtYXRpb24gc291cmNlIHRoZXJlIGFyZSBhIGdpdmVuIG51bWJlciBvZiBmaXhlZCBzaXplZAorICogc3RydWN0cyBhdCBhIGdpdmVuIHRpbWUuICBUaGUgc3RydWN0cyBhcmUgb25seSBjb3BpZWQgaWYgdGhlIHVzZXItc3BlY2lmaWVkCisgKiBidWZmZXIgaXMgYmlnIGVub3VnaC4gIFRoZSBkZXN0aW5hdGlvbiBwYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGJ1ZmZlcgorICogYXJlIHBpbm5lZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5LgorICoKKyAqIFRoaXMgZ2l2ZXMgdXMgdGhlIGZvbGxvd2luZyBiZW5lZml0czoKKyAqCisgKiAtIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiwgbm8gY29weSAicG9zaXRpb24iIGFjcm9zcyBtdWx0aXBsZSBjYWxscworICogLSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIGFuIGluZm8gc291cmNlCisgKiAtIGF0b21pYyBjb3B5IHdvcmtzIHdlbGwgd2l0aCB3aGF0ZXZlciBsb2NraW5nIGluZm8gc291cmNlIGhhcworICogLSBvbmUgcG9ydGFibGUgdG9vbCB0byBnZXQgcmRzIGluZm8gYWNyb3NzIGltcGxlbWVudGF0aW9ucworICogLSBsb25nLWxpdmVkIHRvb2wgY2FuIGdldCBpbmZvIHdpdGhvdXQgYWxsb2NhdGluZworICoKKyAqIGF0IHRoZSBmb2xsb3dpbmcgY29zdHM6CisgKgorICogLSBpbmZvIHNvdXJjZSBjb3B5IG11c3QgYmUgcGlubmVkLCBtYXkgYmUgImxhcmdlIgorICovCisKK3N0cnVjdCByZHNfaW5mb19pdGVyYXRvciB7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICphZGRyOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfaW5mb19sb2NrKTsKK3N0YXRpYyByZHNfaW5mb19mdW5jIHJkc19pbmZvX2Z1bmNzW1JEU19JTkZPX0xBU1QgLSBSRFNfSU5GT19GSVJTVCArIDFdOworCit2b2lkIHJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKK3sKKwlpbnQgb2Zmc2V0ID0gb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUOworCisJQlVHX09OKG9wdG5hbWUgPCBSRFNfSU5GT19GSVJTVCB8fCBvcHRuYW1lID4gUkRTX0lORk9fTEFTVCk7CisKKwlzcGluX2xvY2soJnJkc19pbmZvX2xvY2spOworCUJVR19PTihyZHNfaW5mb19mdW5jc1tvZmZzZXRdICE9IE5VTEwpOworCXJkc19pbmZvX2Z1bmNzW29mZnNldF0gPSBmdW5jOworCXNwaW5fdW5sb2NrKCZyZHNfaW5mb19sb2NrKTsKK30KKwordm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKK3sKKwlpbnQgb2Zmc2V0ID0gb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUOworCisJQlVHX09OKG9wdG5hbWUgPCBSRFNfSU5GT19GSVJTVCB8fCBvcHRuYW1lID4gUkRTX0lORk9fTEFTVCk7CisKKwlzcGluX2xvY2soJnJkc19pbmZvX2xvY2spOworCUJVR19PTihyZHNfaW5mb19mdW5jc1tvZmZzZXRdICE9IGZ1bmMpOworCXJkc19pbmZvX2Z1bmNzW29mZnNldF0gPSBOVUxMOworCXNwaW5fdW5sb2NrKCZyZHNfaW5mb19sb2NrKTsKK30KKworLyoKKyAqIFR5cGljYWxseSB3ZSBob2xkIGFuIGF0b21pYyBrbWFwIGFjcm9zcyBtdWx0aXBsZSByZHNfaW5mb19jb3B5KCkgY2FsbHMKKyAqIGJlY2F1c2UgdGhlIGttYXAgaXMgc28gZXhwZW5zaXZlLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYmxvY2tpbmcKKyAqIG9wZXJhdGlvbnMgd2hpbGUgaG9sZGluZyB0aGUgbWFwcGluZyBhbmQgYXMgdGhlIGl0ZXJhdG9yIGlzIHRvcm4gZG93bi4KKyAqLwordm9pZCByZHNfaW5mb19pdGVyX3VubWFwKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlcikKK3sKKwlpZiAoaXRlci0+YWRkciAhPSBOVUxMKSB7CisJCWt1bm1hcF9hdG9taWMoaXRlci0+YWRkciwgS01fVVNFUjApOworCQlpdGVyLT5hZGRyID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBnZXRfdXNlcl9wYWdlcygpIGNhbGxlZCBmbHVzaF9kY2FjaGVfcGFnZSgpIG9uIHRoZSBwYWdlcyBmb3IgdXMuCisgKi8KK3ZvaWQgcmRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsIHZvaWQgKmRhdGEsCisJCSAgIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJdW5zaWduZWQgbG9uZyB0aGlzOworCisJd2hpbGUgKGJ5dGVzKSB7CisJCWlmIChpdGVyLT5hZGRyID09IE5VTEwpCisJCQlpdGVyLT5hZGRyID0ga21hcF9hdG9taWMoKml0ZXItPnBhZ2VzLCBLTV9VU0VSMCk7CisKKwkJdGhpcyA9IG1pbihieXRlcywgUEFHRV9TSVpFIC0gaXRlci0+b2Zmc2V0KTsKKworCQlyZHNkZWJ1ZygicGFnZSAlcCBhZGRyICVwIG9mZnNldCAlbHUgdGhpcyAlbHUgZGF0YSAlcCAiCisJCQkgICJieXRlcyAlbHVcbiIsICppdGVyLT5wYWdlcywgaXRlci0+YWRkciwKKwkJCSAgaXRlci0+b2Zmc2V0LCB0aGlzLCBkYXRhLCBieXRlcyk7CisKKwkJbWVtY3B5KGl0ZXItPmFkZHIgKyBpdGVyLT5vZmZzZXQsIGRhdGEsIHRoaXMpOworCisJCWRhdGEgKz0gdGhpczsKKwkJYnl0ZXMgLT0gdGhpczsKKwkJaXRlci0+b2Zmc2V0ICs9IHRoaXM7CisKKwkJaWYgKGl0ZXItPm9mZnNldCA9PSBQQUdFX1NJWkUpIHsKKwkJCWt1bm1hcF9hdG9taWMoaXRlci0+YWRkciwgS01fVVNFUjApOworCQkJaXRlci0+YWRkciA9IE5VTEw7CisJCQlpdGVyLT5vZmZzZXQgPSAwOworCQkJaXRlci0+cGFnZXMrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIEBvcHR2YWwgcG9pbnRzIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIHRoYXQgdGhlIGluZm9ybWF0aW9uIHNuYXBzaG90CisgKiB3aWxsIGJlIGNvcGllZCBpbnRvLgorICoKKyAqIEBvcHRsZW4gb24gaW5wdXQgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiB1c2Vyc3BhY2UuICBAb3B0bGVuCisgKiBvbiBvdXRwdXQgaXMgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3RlZCBzbmFwc2hvdCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLWVycm5vIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSwgcGFydGljdWxhcmx5IC1FTk9TUEMKKyAqIGlmIHRoZSBnaXZlbiB1c2Vyc3BhY2UgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGZpdCB0aGUgc25hcHNob3QuCisgKiBPbiBzdWNjZXNzIGl0IHJldHVybnMgdGhlIHBvc2l0aXZlIG51bWJlciBvZiBieXRlcyBvZiBlYWNoIGFycmF5IGVsZW1lbnQKKyAqIGluIHRoZSBzbmFwc2hvdC4KKyAqLworaW50IHJkc19pbmZvX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQlpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yIGl0ZXI7CisJc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgbGVuczsKKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgaTsKKwlyZHNfaW5mb19mdW5jIGZ1bmM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgbGVuOworCWludCB0b3RhbDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgZm9yIGFsbCBraW5kcyBvZiB3cmFwcGluZyBhbmQgdGhlIGxpa2UgKi8KKwlzdGFydCA9ICh1bnNpZ25lZCBsb25nKW9wdHZhbDsKKwlpZiAobGVuIDwgMCB8fCBsZW4gKyBQQUdFX1NJWkUgLSAxIDwgbGVuIHx8IHN0YXJ0ICsgbGVuIDwgc3RhcnQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogYSAwIGxlbiBjYWxsIGlzIGp1c3QgdHJ5aW5nIHRvIHByb2JlIGl0cyBsZW5ndGggKi8KKwlpZiAobGVuID09IDApCisJCWdvdG8gY2FsbF9mdW5jOworCisJbnJfcGFnZXMgPSAoUEFHRV9BTElHTihzdGFydCArIGxlbikgLSAoc3RhcnQgJiBQQUdFX01BU0spKQorCQkJPj4gUEFHRV9TSElGVDsKKworCXBhZ2VzID0ga21hbGxvYyhucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgc3RhcnQsIG5yX3BhZ2VzLCAxLCAwLAorCQkJICAgICBwYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAocmV0ICE9IG5yX3BhZ2VzKSB7CisJCWlmIChyZXQgPiAwKQorCQkJbnJfcGFnZXMgPSByZXQ7CisJCWVsc2UKKwkJCW5yX3BhZ2VzID0gMDsKKwkJcmV0ID0gLUVBR0FJTjsgLyogWFhYID8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImxlbiAlZCBucl9wYWdlcyAlbHVcbiIsIGxlbiwgbnJfcGFnZXMpOworCitjYWxsX2Z1bmM6CisJZnVuYyA9IHJkc19pbmZvX2Z1bmNzW29wdG5hbWUgLSBSRFNfSU5GT19GSVJTVF07CisJaWYgKGZ1bmMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCWdvdG8gb3V0OworCX0KKworCWl0ZXIucGFnZXMgPSBwYWdlczsKKwlpdGVyLmFkZHIgPSBOVUxMOworCWl0ZXIub2Zmc2V0ID0gc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSk7CisKKwlmdW5jKHNvY2ssIGxlbiwgJml0ZXIsICZsZW5zKTsKKwlCVUdfT04obGVucy5lYWNoID09IDApOworCisJdG90YWwgPSBsZW5zLm5yICogbGVucy5lYWNoOworCisJcmRzX2luZm9faXRlcl91bm1hcCgmaXRlcik7CisKKwlpZiAodG90YWwgPiBsZW4pIHsKKwkJbGVuID0gdG90YWw7CisJCXJldCA9IC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJbGVuID0gdG90YWw7CisJCXJldCA9IGxlbnMuZWFjaDsKKwl9CisKKwlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXQ6CisJZm9yIChpID0gMDsgcGFnZXMgIT0gTlVMTCAmJiBpIDwgbnJfcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHBhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2luZm8uaCBiL25ldC9yZHMvaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzA1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2luZm8uaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9SRFNfSU5GT19ICisjZGVmaW5lIF9SRFNfSU5GT19ICisKK3N0cnVjdCByZHNfaW5mb19sZW5ndGhzIHsKKwl1bnNpZ25lZCBpbnQJbnI7CisJdW5zaWduZWQgaW50CWVhY2g7Cit9OworCitzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3I7CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBmaWxsIGluIHRoZSBmaWVsZHMgb2YgQGxlbnMgdG8gcmVmbGVjdCB0aGUgc2l6ZQorICogb2YgdGhlIGF2YWlsYWJsZSBpbmZvIHNvdXJjZS4gIElmIHRoZSBzbmFwc2hvdCBmaXRzIGluIEBsZW4gdGhlbiBpdAorICogc2hvdWxkIGJlIGNvcGllZCB1c2luZyBAaXRlci4gIFRoZSBjYWxsZXIgd2lsbCBkZWR1Y2UgaWYgaXQgd2FzIGNvcGllZAorICogb3Igbm90IGJ5IGNvbXBhcmluZyB0aGUgbGVuZ3Rocy4KKyAqLwordHlwZWRlZiB2b2lkICgqcmRzX2luZm9fZnVuYykoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKTsKKwordm9pZCByZHNfaW5mb19yZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpOwordm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYyk7CitpbnQgcmRzX2luZm9fZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCWludCBfX3VzZXIgKm9wdGxlbik7Cit2b2lkIHJkc19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLCB2b2lkICpkYXRhLAorCQkgICB1bnNpZ25lZCBsb25nIGJ5dGVzKTsKK3ZvaWQgcmRzX2luZm9faXRlcl91bm1hcChzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5jIGIvbmV0L3Jkcy9pdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTY5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3LmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK3Vuc2lnbmVkIGludCBmYXN0cmVnX3Bvb2xfc2l6ZSA9IFJEU19GQVNUUkVHX1BPT0xfU0laRTsKK3Vuc2lnbmVkIGludCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSA9IFJEU19GQVNUUkVHX1NJWkUgKyAxOyAvKiArMSBhbGxvd3MgZm9yIHVuYWxpZ25lZCBNUnMgKi8KKworbW9kdWxlX3BhcmFtKGZhc3RyZWdfcG9vbF9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmYXN0cmVnX3Bvb2xfc2l6ZSwgIiBNYXggbnVtYmVyIG9mIGZhc3RyZWcgTVJzIHBlciBkZXZpY2UiKTsKK21vZHVsZV9wYXJhbShmYXN0cmVnX21lc3NhZ2Vfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdHJlZ19tZXNzYWdlX3NpemUsICIgTWF4IHNpemUgb2YgYSBSRE1BIHRyYW5zZmVyIChmYXN0cmVnIE1ScykiKTsKKworc3RydWN0IGxpc3RfaGVhZCByZHNfaXdfZGV2aWNlczsKKworREVGSU5FX1NQSU5MT0NLKGl3X25vZGV2X2Nvbm5zX2xvY2spOworTElTVF9IRUFEKGl3X25vZGV2X2Nvbm5zKTsKKwordm9pZCByZHNfaXdfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldl9hdHRyOworCisJLyogT25seSBoYW5kbGUgaXdhcnAgZGV2aWNlcyAqLworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykKKwkJcmV0dXJuOworCisJZGV2X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2X2F0dHIpCisJCXJldHVybjsKKworCWlmIChpYl9xdWVyeV9kZXZpY2UoZGV2aWNlLCBkZXZfYXR0cikpIHsKKwkJcmRzZGVidWcoIlF1ZXJ5IGRldmljZSBmYWlsZWQgZm9yICVzXG4iLCBkZXZpY2UtPm5hbWUpOworCQlnb3RvIGZyZWVfYXR0cjsKKwl9CisKKwlyZHNfaXdkZXYgPSBrbWFsbG9jKHNpemVvZiAqcmRzX2l3ZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkc19pd2RldikKKwkJZ290byBmcmVlX2F0dHI7CisKKwlzcGluX2xvY2tfaW5pdCgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlyZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5ID0gISEoZGV2X2F0dHItPmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTE9DQUxfRE1BX0xLRVkpOworCXJkc19pd2Rldi0+bWF4X3dycyA9IGRldl9hdHRyLT5tYXhfcXBfd3I7CisJcmRzX2l3ZGV2LT5tYXhfc2dlID0gbWluKGRldl9hdHRyLT5tYXhfc2dlLCBSRFNfSVdfTUFYX1NHRSk7CisKKwlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQgPSBtYXgoUEFHRV9TSElGVCwgZmZzKGRldl9hdHRyLT5wYWdlX3NpemVfY2FwKSAtIDEpOworCisJcmRzX2l3ZGV2LT5kZXYgPSBkZXZpY2U7CisJcmRzX2l3ZGV2LT5wZCA9IGliX2FsbG9jX3BkKGRldmljZSk7CisJaWYgKElTX0VSUihyZHNfaXdkZXYtPnBkKSkKKwkJZ290byBmcmVlX2RldjsKKworCWlmICghcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleSkgeworCQlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpIHsKKwkJCXJkc19pd2Rldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pd2Rldi0+cGQsCisJCQkJCQlJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCQl9IGVsc2UgeworCQkJcmRzX2l3ZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2l3ZGV2LT5wZCwKKwkJCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkJCUlCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJCX0KKwkJaWYgKElTX0VSUihyZHNfaXdkZXYtPm1yKSkKKwkJCWdvdG8gZXJyX3BkOworCX0gZWxzZQorCQlyZHNfaXdkZXYtPm1yID0gTlVMTDsKKworCXJkc19pd2Rldi0+bXJfcG9vbCA9IHJkc19pd19jcmVhdGVfbXJfcG9vbChyZHNfaXdkZXYpOworCWlmIChJU19FUlIocmRzX2l3ZGV2LT5tcl9wb29sKSkgeworCQlyZHNfaXdkZXYtPm1yX3Bvb2wgPSBOVUxMOworCQlnb3RvIGVycl9tcjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jbV9pZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnJkc19pd2Rldi0+bGlzdCwgJnJkc19pd19kZXZpY2VzKTsKKworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaXdfY2xpZW50LCByZHNfaXdkZXYpOworCisJZ290byBmcmVlX2F0dHI7CisKK2Vycl9tcjoKKwlpZiAocmRzX2l3ZGV2LT5tcikKKwkJaWJfZGVyZWdfbXIocmRzX2l3ZGV2LT5tcik7CitlcnJfcGQ6CisJaWJfZGVhbGxvY19wZChyZHNfaXdkZXYtPnBkKTsKK2ZyZWVfZGV2OgorCWtmcmVlKHJkc19pd2Rldik7CitmcmVlX2F0dHI6CisJa2ZyZWUoZGV2X2F0dHIpOworfQorCit2b2lkIHJkc19pd19yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQsICpuZXh0OworCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pd19jbGllbnQpOworCWlmICghcmRzX2l3ZGV2KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9jbV9pZCwgbmV4dCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmaV9jbV9pZC0+bGlzdCk7CisJCWtmcmVlKGlfY21faWQpOworCX0KKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmRzX2l3X3JlbW92ZV9jb25ucyhyZHNfaXdkZXYpOworCisJaWYgKHJkc19pd2Rldi0+bXJfcG9vbCkKKwkJcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChyZHNfaXdkZXYtPm1yX3Bvb2wpOworCisJaWYgKHJkc19pd2Rldi0+bXIpCisJCWliX2RlcmVnX21yKHJkc19pd2Rldi0+bXIpOworCisJd2hpbGUgKGliX2RlYWxsb2NfcGQocmRzX2l3ZGV2LT5wZCkpIHsKKwkJcmRzZGVidWcoIkZhaWxlZCB0byBkZWFsbG9jIHBkICVwXG4iLCByZHNfaXdkZXYtPnBkKTsKKwkJbXNsZWVwKDEpOworCX0KKworCWxpc3RfZGVsKCZyZHNfaXdkZXYtPmxpc3QpOworCWtmcmVlKHJkc19pd2Rldik7Cit9CisKK3N0cnVjdCBpYl9jbGllbnQgcmRzX2l3X2NsaWVudCA9IHsKKwkubmFtZSAgID0gInJkc19pdyIsCisJLmFkZCAgICA9IHJkc19pd19hZGRfb25lLAorCS5yZW1vdmUgPSByZHNfaXdfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIGludCByZHNfaXdfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8gPSBidWZmZXI7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYzsKKworCS8qIFdlIHdpbGwgb25seSBldmVyIGxvb2sgYXQgSUIgdHJhbnNwb3J0cyAqLworCWlmIChjb25uLT5jX3RyYW5zICE9ICZyZHNfaXdfdHJhbnNwb3J0KQorCQlyZXR1cm4gMDsKKworCWlpbmZvLT5zcmNfYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJaWluZm8tPmRzdF9hZGRyID0gY29ubi0+Y19mYWRkcjsKKworCW1lbXNldCgmaWluZm8tPnNyY19naWQsIDAsIHNpemVvZihpaW5mby0+c3JjX2dpZCkpOworCW1lbXNldCgmaWluZm8tPmRzdF9naWQsIDAsIHNpemVvZihpaW5mby0+ZHN0X2dpZCkpOworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCQlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwkJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCQlkZXZfYWRkciA9ICZpYy0+aV9jbV9pZC0+cm91dGUuYWRkci5kZXZfYWRkcjsKKworCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+c3JjX2dpZCk7CisJCWliX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5kc3RfZ2lkKTsKKworCQlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCQlpaW5mby0+bWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfc2VuZF9zZ2UgPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJCXJkc19pd19nZXRfbXJfaW5mbyhyZHNfaXdkZXYsIGlpbmZvKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19pY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfaXdfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24pKTsKK30KKworCisvKgorICogRWFybHkgUkRTL0lCIHdhcyBidWlsdCB0byBvbmx5IGJpbmQgdG8gYW4gYWRkcmVzcyBpZiB0aGVyZSBpcyBhbiBJUG9JQgorICogZGV2aWNlIHdpdGggdGhhdCBhZGRyZXNzIHNldC4KKyAqCisgKiBJZiBpdCB3ZXJlIG1lLCBJJ2QgYWR2b2NhdGUgZm9yIHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiAgU2VuZGluZyBhbmQKKyAqIHJlY2VpdmluZyBzaG91bGQgYmUgZGV2aWNlLWFnbm9zdGljLiAgVHJhbnNwb3J0cyB3b3VsZCB0cnkgYW5kIG1haW50YWluCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHBlZXJzIHdobyBoYXZlIG1lc3NhZ2VzIHF1ZXVlZC4gIFVzZXJzcGFjZSB3b3VsZCBiZQorICogYWxsb3dlZCB0byBpbmZsdWVuY2Ugd2hpY2ggcGF0aHMgaGF2ZSBwcmlvcml0eS4gIFdlIGNvdWxkIGNhbGwgdXNlcnNwYWNlCisgKiBhc3NlcnRpbmcgdGhpcyBwb2xpY3kgInJvdXRpbmciLgorICovCitzdGF0aWMgaW50IHJkc19pd19sYWRkcl9jaGVjayhfX2JlMzIgYWRkcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCisJLyogQ3JlYXRlIGEgQ01BIElEIGFuZCB0cnkgdG8gYmluZCBpdC4gVGhpcyBjYXRjaGVzIGJvdGgKKwkgKiBJQiBhbmQgaVdBUlAgY2FwYWJsZSBOSUNzLgorCSAqLworCWNtX2lkID0gcmRtYV9jcmVhdGVfaWQoTlVMTCwgTlVMTCwgUkRNQV9QU19UQ1ApOworCWlmICghY21faWQpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworCisJLyogcmRtYV9iaW5kX2FkZHIgd2lsbCBvbmx5IHN1Y2NlZWQgZm9yIElCICYgaVdBUlAgZGV2aWNlcyAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJLyogZHVlIHRvIHRoaXMsIHdlIHdpbGwgY2xhaW0gdG8gc3VwcG9ydCBJQiBkZXZpY2VzIHVubGVzcyB3ZQorCSAgIGNoZWNrIG5vZGVfdHlwZS4gKi8KKwlpZiAocmV0IHx8IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisKKwlyZHNkZWJ1ZygiYWRkciAlcEk0IHJldCAlZCBub2RlIHR5cGUgJWRcbiIsCisJCSZhZGRyLCByZXQsCisJCWNtX2lkLT5kZXZpY2UgPyBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgOiAtMSk7CisKKwlyZG1hX2Rlc3Ryb3lfaWQoY21faWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUywgcmRzX2l3X2ljX2luZm8pOworCXJkc19pd19yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CisJcmRzX2l3X3N5c2N0bF9leGl0KCk7CisJcmRzX2l3X3JlY3ZfZXhpdCgpOworCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfaXdfdHJhbnNwb3J0KTsKK30KKworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydCA9IHsKKwkubGFkZHJfY2hlY2sJCT0gcmRzX2l3X2xhZGRyX2NoZWNrLAorCS54bWl0X2NvbXBsZXRlCQk9IHJkc19pd194bWl0X2NvbXBsZXRlLAorCS54bWl0CQkJPSByZHNfaXdfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSBOVUxMLAorCS54bWl0X3JkbWEJCT0gcmRzX2l3X3htaXRfcmRtYSwKKwkucmVjdgkJCT0gcmRzX2l3X3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2l3X2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfaXdfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX2l3X2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfaXdfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19pd19pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX2l3X2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX2l3X2luY19mcmVlLAorCS5jbV9pbml0aWF0ZV9jb25uZWN0CT0gcmRzX2l3X2NtX2luaXRpYXRlX2Nvbm5lY3QsCisJLmNtX2hhbmRsZV9jb25uZWN0CT0gcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0LAorCS5jbV9jb25uZWN0X2NvbXBsZXRlCT0gcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUsCisJLnN0YXRzX2luZm9fY29weQk9IHJkc19pd19zdGF0c19pbmZvX2NvcHksCisJLmV4aXQJCQk9IHJkc19pd19leGl0LAorCS5nZXRfbXIJCQk9IHJkc19pd19nZXRfbXIsCisJLnN5bmNfbXIJCT0gcmRzX2l3X3N5bmNfbXIsCisJLmZyZWVfbXIJCT0gcmRzX2l3X2ZyZWVfbXIsCisJLmZsdXNoX21ycwkJPSByZHNfaXdfZmx1c2hfbXJzLAorCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAorCS50X25hbWUJCQk9ICJpd2FycCIsCisJLnRfcHJlZmVyX2xvb3BiYWNrCT0gMSwKK307CisKK2ludCBfX2luaXQgcmRzX2l3X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd19kZXZpY2VzKTsKKworCXJldCA9IGliX3JlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaXdfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pYnJlZzsKKworCXJldCA9IHJkc19pd19yZWN2X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisKKwlyZXQgPSByZHNfdHJhbnNfcmVnaXN0ZXIoJnJkc19pd190cmFuc3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlY3Y7CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TLCByZHNfaXdfaWNfaW5mbyk7CisKKwlnb3RvIG91dDsKKworb3V0X3JlY3Y6CisJcmRzX2l3X3JlY3ZfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfaXdfc3lzY3RsX2V4aXQoKTsKK291dF9pYnJlZzoKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmggYi9uZXQvcmRzL2l3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZGEzNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXcuaApAQCAtMCwwICsxLDM5NSBAQAorI2lmbmRlZiBfUkRTX0lXX0gKKyNkZWZpbmUgX1JEU19JV19ICisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworI2RlZmluZSBSRFNfRkFTVFJFR19TSVpFCQkyMAorI2RlZmluZSBSRFNfRkFTVFJFR19QT09MX1NJWkUJCTIwNDgKKworI2RlZmluZSBSRFNfSVdfTUFYX1NHRQkJCTgKKyNkZWZpbmUgUkRTX0lXX1JFQ1ZfU0dFIAkJMgorCisjZGVmaW5lIFJEU19JV19ERUZBVUxUX1JFQ1ZfV1IJCTEwMjQKKyNkZWZpbmUgUkRTX0lXX0RFRkFVTFRfU0VORF9XUgkJMjU2CisKKyNkZWZpbmUgUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFMJMHgwMDAwMDAwMwkvKiBtaW5vciB2ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2l3X2RldmljZXM7CisKKy8qCisgKiBJQiBwb3N0cyBSRFNfRlJBR19TSVpFIGZyYWdtZW50cyBvZiBwYWdlcyB0byB0aGUgcmVjZWl2ZSBxdWV1ZXMgdG8KKyAqIHRyeSBhbmQgbWluaW1pemUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGllZCB1cCBib3RoIHRoZSBkZXZpY2UgYW5kCisgKiBzb2NrZXQgcmVjZWl2ZSBxdWV1ZXMuCisgKi8KKy8qIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmaW5hbCBmdWxsIGZyYWcgdGhhdCBmaXRzIGluIHRoZSBwYWdlICovCisjZGVmaW5lIFJEU19QQUdFX0xBU1RfT0ZGICgoKFBBR0VfU0laRSAgLyBSRFNfRlJBR19TSVpFKSAtIDEpICogUkRTX0ZSQUdfU0laRSkKK3N0cnVjdCByZHNfcGFnZV9mcmFnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZfaXRlbTsKKwlzdHJ1Y3QgcGFnZQkJKmZfcGFnZTsKKwl1bnNpZ25lZCBsb25nCQlmX29mZnNldDsKKwlkbWFfYWRkcl90IAkJZl9tYXBwZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2l3X2luY29taW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlpX2ZyYWdzOworCXN0cnVjdCByZHNfaW5jb21pbmcJaWlfaW5jOworfTsKKworc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgeworCS8qIEFkZCBuZXcgZmllbGRzIGF0IHRoZSBlbmQsIGFuZCBkb24ndCBwZXJtdXRlIGV4aXN0aW5nIGZpZWxkcy4gKi8KKwlfX2JlMzIJCQlkcF9zYWRkcjsKKwlfX2JlMzIJCQlkcF9kYWRkcjsKKwl1OAkJCWRwX3Byb3RvY29sX21ham9yOworCXU4CQkJZHBfcHJvdG9jb2xfbWlub3I7CisJX19iZTE2CQkJZHBfcHJvdG9jb2xfbWlub3JfbWFzazsgLyogYml0bWFzayAqLworCV9fYmUzMgkJCWRwX3Jlc2VydmVkMTsKKwlfX2JlNjQJCQlkcF9hY2tfc2VxOworCV9fYmUzMgkJCWRwX2NyZWRpdDsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZmxvdyBjdGwgKi8KK307CisKK3N0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgeworCXN0cnVjdCBzY2F0dGVybGlzdAkqbGlzdDsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKKwlpbnQJCQlkbWFfbGVuOworCXVuc2lnbmVkIGludAkJZG1hX25wYWdlczsKKwl1bnNpZ25lZCBpbnQJCWJ5dGVzOworfTsKKworc3RydWN0IHJkc19pd19tYXBwaW5nIHsKKwlzcGlubG9ja190CQltX2xvY2s7CS8qIHByb3RlY3QgdGhlIG1hcHBpbmcgc3RydWN0ICovCisJc3RydWN0IGxpc3RfaGVhZAltX2xpc3Q7CisJc3RydWN0IHJkc19pd19tcgkqbV9tcjsKKwl1aW50MzJfdAkJbV9ya2V5OworCXN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgbV9zZzsKK307CisKK3N0cnVjdCByZHNfaXdfc2VuZF93b3JrIHsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKnNfcm07CisKKwkvKiBXZSBzaG91bGQgcmVhbGx5IHB1dCB0aGVzZSBpbnRvIGEgdW5pb246ICovCisJc3RydWN0IHJkc19yZG1hX29wCSpzX29wOworCXN0cnVjdCByZHNfaXdfbWFwcGluZwkqc19tYXBwaW5nOworCXN0cnVjdCBpYl9tcgkJKnNfbXI7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqc19wYWdlX2xpc3Q7CisJdW5zaWduZWQgY2hhcgkJc19yZW1hcF9jb3VudDsKKworCXN0cnVjdCBpYl9zZW5kX3dyCXNfd3I7CisJc3RydWN0IGliX3NnZQkJc19zZ2VbUkRTX0lXX01BWF9TR0VdOworCXVuc2lnbmVkIGxvbmcJCXNfcXVldWVkOworfTsKKworc3RydWN0IHJkc19pd19yZWN2X3dvcmsgeworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgCSpyX2l3aW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCSpyX2ZyYWc7CisJc3RydWN0IGliX3JlY3Zfd3IJcl93cjsKKwlzdHJ1Y3QgaWJfc2dlCQlyX3NnZVsyXTsKK307CisKK3N0cnVjdCByZHNfaXdfd29ya19yaW5nIHsKKwl1MzIJCXdfbnI7CisJdTMyCQl3X2FsbG9jX3B0cjsKKwl1MzIJCXdfYWxsb2NfY3RyOworCXUzMgkJd19mcmVlX3B0cjsKKwlhdG9taWNfdAl3X2ZyZWVfY3RyOworfTsKKworc3RydWN0IHJkc19pd19kZXZpY2U7CisKK3N0cnVjdCByZHNfaXdfY29ubmVjdGlvbiB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWl3X25vZGU7CisJc3RydWN0IHJkc19pd19kZXZpY2UgCSpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjb25uOworCisJLyogYWxwaGFiZXQgc291cCwgSUJUQSBzdHlsZSAqLworCXN0cnVjdCByZG1hX2NtX2lkCSppX2NtX2lkOworCXN0cnVjdCBpYl9wZAkJKmlfcGQ7CisJc3RydWN0IGliX21yCQkqaV9tcjsKKwlzdHJ1Y3QgaWJfY3EJCSppX3NlbmRfY3E7CisJc3RydWN0IGliX2NxCQkqaV9yZWN2X2NxOworCisJLyogdHggKi8KKwlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZwlpX3NlbmRfcmluZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmlfcm07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfc2VuZF9oZHJzOworCXU2NAkJCWlfc2VuZF9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqaV9zZW5kczsKKworCS8qIHJ4ICovCisJc3RydWN0IG11dGV4CQlpX3JlY3ZfbXV0ZXg7CisJc3RydWN0IHJkc19pd193b3JrX3JpbmcJaV9yZWN2X3Jpbmc7CisJc3RydWN0IHJkc19pd19pbmNvbWluZwkqaV9pd2luYzsKKwl1MzIJCQlpX3JlY3ZfZGF0YV9yZW07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfcmVjdl9oZHJzOworCXU2NAkJCWlfcmVjdl9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqaV9yZWN2czsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwlpX2ZyYWc7CisJdTY0CQkJaV9hY2tfcmVjdjsJLyogbGFzdCBBQ0sgcmVjZWl2ZWQgKi8KKworCS8qIHNlbmRpbmcgYWNrcyAqLworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CisJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOworCXU2NAkJCWlfYWNrX2RtYTsKKwl1bnNpZ25lZCBsb25nCQlpX2Fja19xdWV1ZWQ7CisKKwkvKiBGbG93IGNvbnRyb2wgcmVsYXRlZCBpbmZvcm1hdGlvbgorCSAqCisJICogT3VyIGFsZ29yaXRobSB1c2VzIGEgcGFpciB2YXJpYWJsZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY2VzcworCSAqIGF0b21pY2FsbHkgLSBvbmUgZm9yIHRoZSBzZW5kIGNyZWRpdHMsIGFuZCBvbmUgcG9zdGVkCisJICogcmVjdiBjcmVkaXRzIHdlIG5lZWQgdG8gdHJhbnNmZXIgdG8gcmVtb3RlLgorCSAqIFJhdGhlciB0aGFuIHByb3RlY3QgdGhlbSB1c2luZyBhIHNsb3cgc3BpbmxvY2ssIHdlIHB1dCBib3RoIGludG8KKwkgKiBhIHNpbmdsZSBhdG9taWNfdCBhbmQgdXBkYXRlIGl0IHVzaW5nIGNtcHhjaGcKKwkgKi8KKwlhdG9taWNfdAkJaV9jcmVkaXRzOworCisJLyogUHJvdG9jb2wgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGludAkJaV9mbG93Y3RsOjE7CS8qIGVuYWJsZS9kaXNhYmxlIGZsb3cgY3RsICovCisJdW5zaWduZWQgaW50CQlpX2RtYV9sb2NhbF9sa2V5OjE7CisJdW5zaWduZWQgaW50CQlpX2Zhc3RyZWdfcG9zdGVkOjE7IC8qIGZhc3RyZWcgcG9zdGVkIG9uIHRoaXMgY29ubmVjdGlvbiAqLworCS8qIEJhdGNoZWQgY29tcGxldGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQJCWlfdW5zaWduYWxlZF93cnM7CisJbG9uZwkJCWlfdW5zaWduYWxlZF9ieXRlczsKK307CisKKy8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNkZWZpbmUgSUJfR0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9HRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPj4gMTYpCisjZGVmaW5lIElCX1NFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfU0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpIDw8IDE2KQorCitzdHJ1Y3QgcmRzX2l3X2NtX2lkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHJkbWFfY21faWQJKmNtX2lkOworfTsKKworc3RydWN0IHJkc19pd19kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNtX2lkX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljb25uX2xpc3Q7CisJc3RydWN0IGliX2RldmljZQkqZGV2OworCXN0cnVjdCBpYl9wZAkJKnBkOworCXN0cnVjdCBpYl9tcgkJKm1yOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbAkqbXJfcG9vbDsKKwlpbnQJCQlwYWdlX3NoaWZ0OworCWludAkJCW1heF9zZ2U7CisJdW5zaWduZWQgaW50CQltYXhfd3JzOworCXVuc2lnbmVkIGludAkJZG1hX2xvY2FsX2xrZXk6MTsKKwlzcGlubG9ja190CQlzcGlubG9jazsJLyogcHJvdGVjdCB0aGUgYWJvdmUgKi8KK307CisKKy8qIGJpdHMgZm9yIGlfYWNrX2ZsYWdzICovCisjZGVmaW5lIElCX0FDS19JTl9GTElHSFQJMAorI2RlZmluZSBJQl9BQ0tfUkVRVUVTVEVECTEKKworLyogTWFnaWMgV1JfSUQgZm9yIEFDS3MgKi8KKyNkZWZpbmUgUkRTX0lXX0FDS19XUl9JRAkoKHU2NCkweGZmZmZmZmZmZmZmZmZmZmZVTEwpCisjZGVmaW5lIFJEU19JV19GQVNUX1JFR19XUl9JRAkoKHU2NCkweGVmZWZlZmVmZWZlZmVmZWZVTEwpCisjZGVmaW5lIFJEU19JV19MT0NBTF9JTlZfV1JfSUQJKCh1NjQpMHhkZmRmZGZkZmRmZGZkZmRmVUxMKQorCitzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfaXdfY29ubmVjdF9yYWNlZDsKKwl1aW50NjRfdAlzX2l3X2xpc3Rlbl9jbG9zZWRfc3RhbGU7CisJdWludDY0X3QJc19pd190eF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaXdfdHhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pd190eF9yaW5nX2Z1bGw7CisJdWludDY0X3QJc19pd190eF90aHJvdHRsZTsKKwl1aW50NjRfdAlzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2l3X3R4X3N0YWxsZWQ7CisJdWludDY0X3QJc19pd190eF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2l3X3J4X2NxX2NhbGw7CisJdWludDY0X3QJc19pd19yeF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2l3X3J4X3JpbmdfZW1wdHk7CisJdWludDY0X3QJc19pd19yeF9yZWZpbGxfZnJvbV9jcTsKKwl1aW50NjRfdAlzX2l3X3J4X3JlZmlsbF9mcm9tX3RocmVhZDsKKwl1aW50NjRfdAlzX2l3X3J4X2FsbG9jX2xpbWl0OworCXVpbnQ2NF90CXNfaXdfcnhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pd19hY2tfc2VudDsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW5kX2ZhaWx1cmU7CisJdWludDY0X3QJc19pd19hY2tfc2VuZF9kZWxheWVkOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbmRfcGlnZ3liYWNrZWQ7CisJdWludDY0X3QJc19pd19hY2tfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX2FsbG9jOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9mcmVlOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl91c2VkOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX2ZsdXNoOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX3dhaXQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX3Bvb2xfZGVwbGV0ZWQ7Cit9OworCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc19pd193cTsKKworLyoKKyAqIEZha2UgaWJfZG1hX3N5bmNfc2dfZm9yX3tjcHUsZGV2aWNlfSBhcyBsb25nIGFzIGliX3ZlcmJzLmgKKyAqIGRvZXNuJ3QgZGVmaW5lIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQlyZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlyZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2RldmljZQorCitzdGF0aWMgaW5saW5lIHUzMiByZHNfaXdfbG9jYWxfZG1hX2xrZXkoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlyZXR1cm4gaWMtPmlfZG1hX2xvY2FsX2xrZXkgPyBpYy0+aV9jbV9pZC0+ZGV2aWNlLT5sb2NhbF9kbWFfbGtleSA6IGljLT5pX21yLT5sa2V5OworfQorCisvKiBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydDsKK2V4dGVybiB2b2lkIHJkc19pd19hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gdm9pZCByZHNfaXdfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHN0cnVjdCBpYl9jbGllbnQgcmRzX2l3X2NsaWVudDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBmYXN0cmVnX3Bvb2xfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZmFzdHJlZ19tZXNzYWdlX3NpemU7CisKK2V4dGVybiBzcGlubG9ja190IGl3X25vZGV2X2Nvbm5zX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpd19ub2Rldl9jb25uczsKKworLyogaWJfY20uYyAqLworaW50IHJkc19pd19jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpOworaW50IHJkc19pd19jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spOworaW50IF9faW5pdCByZHNfaXdfbGlzdGVuX2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19saXN0ZW5fc3RvcCh2b2lkKTsKK3ZvaWQgX19yZHNfaXdfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludCByZHNfaXdfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworaW50IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7Cit2b2lkIHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisKKyNkZWZpbmUgcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfaXdfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUy9JVzogIiBmbXQpCisKKy8qIGliX3JkbWEuYyAqLworaW50IHJkc19pd191cGRhdGVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKK2ludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KTsKK3N0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICopOwordm9pZCByZHNfaXdfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwordm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqKTsKK3ZvaWQgKnJkc19pd19nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCk7Cit2b2lkIHJkc19pd19zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXIpOwordm9pZCByZHNfaXdfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSk7Cit2b2lkIHJkc19pd19mbHVzaF9tcnModm9pZCk7Cit2b2lkIHJkc19pd19yZW1vdmVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKKworLyogaWJfcmVjdi5jICovCitpbnQgX19pbml0IHJkc19pd19yZWN2X2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19yZWN2X2V4aXQodm9pZCk7CitpbnQgcmRzX2l3X3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaXdfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCk7Cit2b2lkIHJkc19pd19pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2l3X2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CitpbnQgcmRzX2l3X2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpOwordm9pZCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pd19yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordTY0IHJkc19pd19waWdneWJfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOworCisvKiBpYl9yaW5nLmMgKi8KK3ZvaWQgcmRzX2l3X3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3ZvaWQgcmRzX2l3X3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordTMyIHJkc19pd19yaW5nX2FsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcyk7Cit2b2lkIHJkc19pd19yaW5nX2ZyZWUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOwordm9pZCByZHNfaXdfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK2ludCByZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZyk7CitpbnQgcmRzX2l3X3JpbmdfbG93KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaXdfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pd19yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KTsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfaXdfcmluZ19lbXB0eV93YWl0OworCisvKiBpYl9zZW5kLmMgKi8KK3ZvaWQgcmRzX2l3X3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaXdfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOwordm9pZCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pd19zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK2ludCByZHNfaXdfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7Cit2b2lkIHJkc19pd19zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpOwordm9pZCByZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKTsKK2ludCByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTMyIHdhbnRlZCwKKwkJCSAgICAgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKTsKKworLyogaWJfc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfaXdfc3RhdGlzdGljcywgcmRzX2l3X3N0YXRzKTsKKyNkZWZpbmUgcmRzX2l3X3N0YXRzX2luYyhtZW1iZXIpIHJkc19zdGF0c19pbmNfd2hpY2gocmRzX2l3X3N0YXRzLCBtZW1iZXIpCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CisKKy8qIGliX3N5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19pd19zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2w7CitleHRlcm4gY3RsX3RhYmxlIHJkc19pd19zeXNjdGxfdGFibGVbXTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgaGVhZGVyIGFuZCBkYXRhIFNHRXMgaW4KKyAqIFJEUyBwYWNrZXRzIChub3QgUkRNQSkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pd19oZWFkZXJfc2dlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVswXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pd19kYXRhX3NnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQoreworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKwkqcHRyID0gdmFsOworI2Vsc2UKKwlzZXRfNjRiaXQocHRyLCB2YWwpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19jbS5jIGIvbmV0L3Jkcy9pd19jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWNiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X2NtLmMKQEAgLTAsMCArMSw3NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworLyoKKyAqIFNldCB0aGUgc2VsZWN0ZWQgcHJvdG9jb2wgdmVyc2lvbgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJY29ubi0+Y192ZXJzaW9uID0gdmVyc2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBmbG93IGNvbnRyb2wKKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCAmJiBjcmVkaXRzICE9IDApIHsKKwkJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sICovCisJCWljLT5pX2Zsb3djdGwgPSAxOworCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRzKTsKKwl9IGVsc2UgeworCQlpYy0+aV9mbG93Y3RsID0gMDsKKwl9Cit9CisKKy8qCisgKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLgorICogV2UgZ2V0IGhlcmUgZm9yIGJvdGggb3V0Z29pbmcgYW5kIGluY29taW5nIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCWludCBlcnI7CisKKwlpZiAoZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCQlkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKworCQlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sCisJCQkJUkRTX1BST1RPQ09MKGRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7CisJCXJkc19pd19zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwl9CisKKwkvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgJiBjb25uICovCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwllcnIgPSByZHNfaXdfdXBkYXRlX2NtX2lkKHJkc19pd2RldiwgaWMtPmlfY21faWQpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7CisJZXJyID0gcmRzX2l3X2FkZF9jb25uKHJkc19pd2RldiwgY29ubik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaXdfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcCAmJiBkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSVc6IGNvbm5lY3RlZCB0byAlcEk0PC0+JXBJNCB2ZXJzaW9uICV1LiV1JXNcbiIsCisJCQkmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIsCisJCQlSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCVJEU19QUk9UT0NPTF9NSU5PUihjb25uLT5jX3ZlcnNpb24pLAorCQkJaWMtPmlfZmxvd2N0bCA/ICIsIGZsb3cgY29udHJvbCIgOiAiIik7CisKKwlyZHNfY29ubmVjdF9jb21wbGV0ZShjb25uKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLAorCQkJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwLAorCQkJdTMyIHByb3RvY29sX3ZlcnNpb24pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwltZW1zZXQoY29ubl9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0pKTsKKwkvKiBYWFggdHVuZSB0aGVzZT8gKi8KKwljb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzID0gMTsKKwljb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGggPSAxOworCisJaWYgKGRwKSB7CisJCW1lbXNldChkcCwgMCwgc2l6ZW9mKCpkcCkpOworCQlkcC0+ZHBfc2FkZHIgPSBjb25uLT5jX2xhZGRyOworCQlkcC0+ZHBfZGFkZHIgPSBjb25uLT5jX2ZhZGRyOworCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPSBSRFNfUFJPVE9DT0xfTUFKT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vciA9IFJEU19QUk9UT0NPTF9NSU5PUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2sgPSBjcHVfdG9fYmUxNihSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUyk7CisJCWRwLT5kcF9hY2tfc2VxID0gcmRzX2l3X3BpZ2d5Yl9hY2soaWMpOworCisJCS8qIEFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJCXVuc2lnbmVkIGludCBjcmVkaXRzOworCisJCQljcmVkaXRzID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpOworCQkJZHAtPmRwX2NyZWRpdCA9IGNwdV90b19iZTMyKGNyZWRpdHMpOworCQkJYXRvbWljX3N1YihJQl9TRVRfUE9TVF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJCX0KKworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgPSBkcDsKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiA9IHNpemVvZigqZHApOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlyZHNkZWJ1ZygiZXZlbnQgJXUgZGF0YSAlcFxuIiwgZXZlbnQtPmV2ZW50LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBkYXRhOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzZGVidWcoImNvbm4gJXAgaWMgJXAgZXZlbnQgJXVcbiIsIGNvbm4sIGljLCBldmVudC0+ZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0VWRU5UX0NPTU1fRVNUOgorCQlyZG1hX25vdGlmeShpYy0+aV9jbV9pZCwgSUJfRVZFTlRfQ09NTV9FU1QpOworCQlicmVhazsKKwljYXNlIElCX0VWRU5UX1FQX1JFUV9FUlI6CisJY2FzZSBJQl9FVkVOVF9RUF9GQVRBTDoKKwlkZWZhdWx0OgorCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiUkRTL0lXOiBGYXRhbCBRUCBFdmVudCAldSAtIGNvbm5lY3Rpb24gJXBJNC0+JXBJNC4uLnJlY29ubmVjdGluZ1xuIiwKKwkJCWV2ZW50LT5ldmVudCwgJmNvbm4tPmNfbGFkZHIsCisJCQkmY29ubi0+Y19mYWRkcik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIFFQCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfcXBfYXR0cnMoc3RydWN0IGliX3FwX2luaXRfYXR0ciAqYXR0ciwKKwkJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiwKKwkJc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnNlbmRfcmluZywKKwkJdm9pZCAoKnNlbmRfY3FfaGFuZGxlcikoc3RydWN0IGliX2NxICosIHZvaWQgKiksCisJCXN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyZWN2X3JpbmcsCisJCXZvaWQgKCpyZWN2X2NxX2hhbmRsZXIpKHN0cnVjdCBpYl9jcSAqLCB2b2lkICopLAorCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pd2Rldi0+ZGV2OworCXVuc2lnbmVkIGludCBzZW5kX3NpemUsIHJlY3Zfc2l6ZTsKKwlpbnQgcmV0OworCisJLyogVGhlIG9mZnNldCBvZiAxIGlzIHRvIGFjY29tb2RhdGUgdGhlIGFkZGl0aW9uYWwgQUNLIFdSLiAqLworCXNlbmRfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2l3ZGV2LT5tYXhfd3JzLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyICsgMSk7CisJcmVjdl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaXdkZXYtPm1heF93cnMsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IgKyAxKTsKKwlyZHNfaXdfcmluZ19yZXNpemUoc2VuZF9yaW5nLCBzZW5kX3NpemUgLSAxKTsKKwlyZHNfaXdfcmluZ19yZXNpemUocmVjdl9yaW5nLCByZWN2X3NpemUgLSAxKTsKKworCW1lbXNldChhdHRyLCAwLCBzaXplb2YoKmF0dHIpKTsKKwlhdHRyLT5ldmVudF9oYW5kbGVyID0gcmRzX2l3X3FwX2V2ZW50X2hhbmRsZXI7CisJYXR0ci0+cXBfY29udGV4dCA9IGNvbnRleHQ7CisJYXR0ci0+Y2FwLm1heF9zZW5kX3dyID0gc2VuZF9zaXplOworCWF0dHItPmNhcC5tYXhfcmVjdl93ciA9IHJlY3Zfc2l6ZTsKKwlhdHRyLT5jYXAubWF4X3NlbmRfc2dlID0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCWF0dHItPmNhcC5tYXhfcmVjdl9zZ2UgPSBSRFNfSVdfUkVDVl9TR0U7CisJYXR0ci0+c3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfUkVRX1dSOworCWF0dHItPnFwX3R5cGUgPSBJQl9RUFRfUkM7CisKKwlhdHRyLT5zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgc2VuZF9jcV9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBjb250ZXh0LCBzZW5kX3NpemUsIDApOworCWlmIChJU19FUlIoYXR0ci0+c2VuZF9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRyLT5zZW5kX2NxKTsKKwkJYXR0ci0+c2VuZF9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdHRyLT5yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmVjdl9jcV9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBjb250ZXh0LCByZWN2X3NpemUsIDApOworCWlmIChJU19FUlIoYXR0ci0+cmVjdl9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRyLT5yZWN2X2NxKTsKKwkJYXR0ci0+cmVjdl9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGF0dHItPnNlbmRfY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoYXR0ci0+cmVjdl9jcSwgSUJfQ1FfU09MSUNJVEVEKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoYXR0ci0+c2VuZF9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoYXR0ci0+c2VuZF9jcSk7CisJCWlmIChhdHRyLT5yZWN2X2NxKQorCQkJaWJfZGVzdHJveV9jcShhdHRyLT5yZWN2X2NxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIG5vdCBsZWF2ZSBJU19FUlIgcG9pbnRlcnMgYXJvdW5kIGZvcgorICogY2xlYW51cCB0byB0cmlwIG92ZXIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCWludCByZXQ7CisKKwkvKiByZHNfaXdfYWRkX29uZSBjcmVhdGVzIGEgcmRzX2l3X2RldmljZSBvYmplY3QgcGVyIElCIGRldmljZSwKKwkgKiBhbmQgYWxsb2NhdGVzIGEgcHJvdGVjdGlvbiBkb21haW4sIG1lbW9yeSByYW5nZSBhbmQgTVIgcG9vbAorCSAqIGZvciBlYWNoLiAgSWYgdGhhdCBmYWlscyBmb3IgYW55IHJlYXNvbiwgaXQgd2lsbCBub3QgcmVnaXN0ZXIKKwkgKiB0aGUgcmRzX2l3ZGV2IGF0IGFsbC4KKwkgKi8KKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2LCAmcmRzX2l3X2NsaWVudCk7CisJaWYgKHJkc19pd2RldiA9PSBOVUxMKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JVzogTm8gY2xpZW50X2RhdGEgZm9yIGRldmljZSAlc1xuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIFByb3RlY3Rpb24gZG9tYWluIGFuZCBtZW1vcnkgcmFuZ2UgKi8KKwlpYy0+aV9wZCA9IHJkc19pd2Rldi0+cGQ7CisJaWMtPmlfbXIgPSByZHNfaXdkZXYtPm1yOworCisJcmV0ID0gcmRzX2l3X2luaXRfcXBfYXR0cnMoJmF0dHIsIHJkc19pd2RldiwKKwkJCSZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlciwKKwkJCSZpYy0+aV9yZWN2X3JpbmcsIHJkc19pd19yZWN2X2NxX2NvbXBfaGFuZGxlciwKKwkJCWNvbm4pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWljLT5pX3NlbmRfY3EgPSBhdHRyLnNlbmRfY3E7CisJaWMtPmlfcmVjdl9jcSA9IGF0dHIucmVjdl9jcTsKKworCS8qCisJICogWFhYIHRoaXMgY2FuIGZhaWwgaWYgbWF4Xypfd3IgaXMgdG9vIGxhcmdlPyAgQXJlIHdlIHN1cHBvc2VkCisJICogdG8gYmFjayBvZmYgdW50aWwgd2UgZ2V0IGEgdmFsdWUgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQ/CisJICovCisJcmV0ID0gcmRtYV9jcmVhdGVfcXAoaWMtPmlfY21faWQsIGljLT5pX3BkLCAmYXR0cik7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfcXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZF9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3NlbmRfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9zZW5kX2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHNlbmQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3JlY3ZfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9yZWN2X2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHJlY3YgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfYWNrID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkgICAgICAgJmljLT5pX2Fja19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9hY2sgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IGFjayBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kcyA9IHZtYWxsb2MoaWMtPmlfc2VuZF9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pd19zZW5kX3dvcmspKTsKKwlpZiAoaWMtPmlfc2VuZHMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1Zygic2VuZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlyZHNfaXdfc2VuZF9pbml0X3JpbmcoaWMpOworCisJaWMtPmlfcmVjdnMgPSB2bWFsbG9jKGljLT5pX3JlY3ZfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaXdfcmVjdl93b3JrKSk7CisJaWYgKGljLT5pX3JlY3ZzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInJlY3YgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdfcmVjdl9pbml0X3JpbmcoaWMpOworCXJkc19pd19yZWN2X2luaXRfYWNrKGljKTsKKworCS8qIFBvc3QgcmVjZWl2ZSBidWZmZXJzIC0gYXMgYSBzaWRlIGVmZmVjdCwgdGhpcyB3aWxsIHVwZGF0ZQorCSAqIHRoZSBwb3N0ZWQgY3JlZGl0IGNvdW50LiAqLworCXJkc19pd19yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDEpOworCisJcmRzZGVidWcoImNvbm4gJXAgcGQgJXAgbXIgJXAgY3EgJXAgJXBcbiIsIGNvbm4sIGljLT5pX3BkLCBpYy0+aV9tciwKKwkJIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiByZHNfaXdfcHJvdG9jb2xfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHApCit7CisJdTE2IGNvbW1vbjsKKwl1MzIgdmVyc2lvbiA9IDA7CisKKwkvKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCisJICogcmVxdWVzdCwgd2Ugd2lsbCBiZSBnaXZlbiBhIHByZXR0eSBsYXJnZSBidWZmZXIgd2l0aG91dCB0ZWxsaW5nIHVzIHRoZQorCSAqIG9yaWdpbmFsIHNpemUuIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGlzIGJ5IGxvb2tpbmcgYXQKKwkgKiB0aGUgY29udGVudHMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqIElmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkcyBhcmVuJ3Qgc2V0LCB0aGlzIGlzIGEgY29ubmVjdGlvbiBhdHRlbXB0CisJICogZnJvbSBhbiBvbGRlciB2ZXJzaW9uLiBUaGlzIGNvdWxkIGNvdWxkIGJlIDMuMCBvciAyLjAgLSB3ZSBjYW4ndCB0ZWxsLgorCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKCAqLworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMCkKKwkJcmV0dXJuIFJEU19QUk9UT0NPTF8zXzA7CisKKwljb21tb24gPSBiZTE2X3RvX2NwdShkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzaykgJiBSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUzsKKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDMgJiYgY29tbW9uKSB7CisJCXZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCQl3aGlsZSAoKGNvbW1vbiA+Pj0gMSkgIT0gMCkKKwkJCXZlcnNpb24rKzsKKwl9IGVsc2UgaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUzogQ29ubmVjdGlvbiBmcm9tICVwSTQgdXNpbmcgIgorCQkJImluY29tcGF0aWJsZSBwcm90b2NvbCB2ZXJzaW9uICV1LiV1XG4iLAorCQkJJmRwLT5kcF9zYWRkciwKKwkJCWRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCWRwLT5kcF9wcm90b2NvbF9taW5vcik7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCitpbnQgcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSBkcF9yZXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gTlVMTDsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwl1MzIgdmVyc2lvbjsKKwlpbnQgZXJyLCBkZXN0cm95ID0gMTsKKworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBwcm90b2NvbCB2ZXJzaW9uIG1hdGNoZXMgb3Vycy4gKi8KKwl2ZXJzaW9uID0gcmRzX2l3X3Byb3RvY29sX2NvbXBhdGlibGUoZHApOworCWlmICghdmVyc2lvbikKKwkJZ290byBvdXQ7CisKKwlyZHNkZWJ1Zygic2FkZHIgJXBJNCBkYWRkciAlcEk0IFJEU3YldS4ldVxuIiwKKwkJICZkcC0+ZHBfc2FkZHIsICZkcC0+ZHBfZGFkZHIsCisJCSBSRFNfUFJPVE9DT0xfTUFKT1IodmVyc2lvbiksIFJEU19QUk9UT0NPTF9NSU5PUih2ZXJzaW9uKSk7CisKKwljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGRwLT5kcF9kYWRkciwgZHAtPmRwX3NhZGRyLCAmcmRzX2l3X3RyYW5zcG9ydCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCXJkc2RlYnVnKCJyZHNfY29ubl9jcmVhdGUgZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGNvbm4pKTsKKwkJY29ubiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBtYXkgb2NjdXIgd2hpbGUgdGhlCisJICogcHJldmlvdXMgY29ubmVjdGlvbiBleGlzdCwgZS5nLiBpbiBjYXNlIG9mIGZhaWxvdmVyLgorCSAqIEJ1dCBhcyBjb25uZWN0aW9ucyBtYXkgYmUgaW5pdGlhdGVkIHNpbXVsdGFuZW91c2x5CisJICogYnkgYm90aCBob3N0cywgd2UgaGF2ZSBhIHJhbmRvbSBiYWNrb2ZmIG1lY2hhbmlzbSAtCisJICogc2VlIHRoZSBjb21tZW50IGFib3ZlIHJkc19xdWV1ZV9yZWNvbm5lY3QoKQorCSAqLworCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0NPTk5FQ1RJTkcpKSB7CisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQkJcmRzZGVidWcoImluY29taW5nIGNvbm5lY3Qgd2hpbGUgY29ubmVjdGluZ1xuIik7CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2xpc3Rlbl9jbG9zZWRfc3RhbGUpOworCQl9IGVsc2UKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFdhaXQgYW5kIHNlZSAtIG91ciBjb25uZWN0IG1heSBzdGlsbCBiZSBzdWNjZWVkaW5nICovCisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfY29ubmVjdF9yYWNlZCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sIHZlcnNpb24pOworCXJkc19pd19zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlCVUdfT04oY21faWQtPmNvbnRleHQpOworCUJVR19PTihpYy0+aV9jbV9pZCk7CisKKwlpYy0+aV9jbV9pZCA9IGNtX2lkOworCWNtX2lkLT5jb250ZXh0ID0gY29ubjsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShjbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJaWMtPmlfZG1hX2xvY2FsX2xrZXkgPSByZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5OworCisJLyogV2UgZ290IGhhbGZ3YXkgdGhyb3VnaCBzZXR0aW5nIHVwIHRoZSBpYl9jb25uZWN0aW9uLCBpZiB3ZQorCSAqIGZhaWwgbm93LCB3ZSBoYXZlIHRvIHRha2UgdGhlIGxvbmcgcm91dGUgb3V0IG9mIHRoaXMgbWVzcy4gKi8KKwlkZXN0cm95ID0gMDsKKworCWVyciA9IHJkc19pd19zZXR1cF9xcChjb25uKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZHNfaXdfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcF9yZXAsIHZlcnNpb24pOworCisJLyogcmRtYV9hY2NlcHQoKSBjYWxscyByZG1hX3JlamVjdCgpIGludGVybmFsbHkgaWYgaXQgZmFpbHMgKi8KKwllcnIgPSByZG1hX2FjY2VwdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZG1hX2FjY2VwdCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK291dDoKKwlyZG1hX3JlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJcmV0dXJuIGRlc3Ryb3k7Cit9CisKKworaW50IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgZHA7CisJaW50IHJldDsKKworCS8qIElmIHRoZSBwZWVyIGRvZXNuJ3QgZG8gcHJvdG9jb2wgbmVnb3RpYXRpb24sIHdlIG11c3QKKwkgKiBkZWZhdWx0IHRvIFJEU3YzLjAgKi8KKwlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTF8zXzApOworCWljLT5pX2Zsb3djdGwgPSByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbDsJLyogYWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCisJcmV0ID0gcmRzX2l3X3NldHVwX3FwKGNvbm4pOworCWlmIChyZXQpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkc19pd19zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwLCBSRFNfUFJPVE9DT0xfVkVSU0lPTik7CisKKwlyZXQgPSByZG1hX2Nvbm5lY3QoY21faWQsICZjb25uX3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRtYV9jb25uZWN0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCitvdXQ6CisJLyogQmV3YXJlIC0gcmV0dXJuaW5nIG5vbi16ZXJvIHRlbGxzIHRoZSByZG1hX2NtIHRvIGRlc3Ryb3kKKwkgKiB0aGUgY21faWQuIFdlIHNob3VsZCBjZXJ0YWlubHkgbm90IGRvIGl0IGFzIGxvbmcgYXMgd2Ugc3RpbGwKKwkgKiAib3duIiB0aGUgY21faWQuICovCisJaWYgKHJldCkgeworCQlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCQlpZiAoaWMtPmlfY21faWQgPT0gY21faWQpCisJCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2l3X2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkZXN0OworCWludCByZXQ7CisKKwkvKiBYWFggSSB3b25kZXIgd2hhdCBhZmZlY3QgdGhlIHBvcnQgc3BhY2UgaGFzICovCisJLyogZGVsZWdhdGUgY20gZXZlbnQgaGFuZGxlciB0byByZG1hX3RyYW5zcG9ydCAqLworCWljLT5pX2NtX2lkID0gcmRtYV9jcmVhdGVfaWQocmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGljLT5pX2NtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfaWQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY3JlYXRlZCBjbSBpZCAlcCBmb3IgY29ubiAlcFxuIiwgaWMtPmlfY21faWQsIGNvbm4pOworCisJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNyYy5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19sYWRkcjsKKwlzcmMuc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoMCk7CisKKwkvKiBGaXJzdCwgYmluZCB0byB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgZGV2aWNlLiAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGljLT5pX2NtX2lkLCAoc3RydWN0IHNvY2thZGRyICopICZzcmMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfYmluZF9hZGRyKCVwSTQpIGZhaWxlZDogJWRcbiIsCisJCQkJJmNvbm4tPmNfbGFkZHIsIHJldCk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwlpYy0+aV9kbWFfbG9jYWxfbGtleSA9IHJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXk7CisKKwlkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWRlc3Quc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfZmFkZHI7CisJZGVzdC5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwlyZXQgPSByZG1hX3Jlc29sdmVfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LAorCQkJCVJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiYWRkciByZXNvbHZlIGZhaWxlZCBmb3IgY20gaWQgJXA6ICVkXG4iLCBpYy0+aV9jbV9pZCwKKwkJCSByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgc28gY2FyZWZ1bCBhYm91dCBvbmx5IGNsZWFuaW5nIHVwIHJlc291cmNlcyB0aGF0IHdlcmUgYnVpbHQgdXAKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHN0YXJ0dXAuICBJbiBmYWN0IGl0CisgKiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisKKwlyZHNkZWJ1ZygiY20gJXAgcGQgJXAgY3EgJXAgJXAgcXAgJXBcbiIsIGljLT5pX2NtX2lkLAorCQkgaWMtPmlfcGQsIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EsCisJCSBpYy0+aV9jbV9pZCA/IGljLT5pX2NtX2lkLT5xcCA6IE5VTEwpOworCisJaWYgKGljLT5pX2NtX2lkKSB7CisJCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisKKwkJcmRzZGVidWcoImRpc2Nvbm5lY3RpbmcgY20gJXBcbiIsIGljLT5pX2NtX2lkKTsKKwkJZXJyID0gcmRtYV9kaXNjb25uZWN0KGljLT5pX2NtX2lkKTsKKwkJaWYgKGVycikgeworCQkJLyogQWN0dWFsbHkgdGhpcyBtYXkgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHksIHdoZW4KKwkJCSAqIGFuIG91dGdvaW5nIGNvbm5lY3QgcmFjZWQgd2l0aCBhbiBpbmNvbWluZyBjb25uZWN0LgorCQkJICovCisJCQlyZHNkZWJ1ZygicmRzX2l3X2Nvbm5fc2h1dGRvd246IGZhaWxlZCB0byBkaXNjb25uZWN0LCIKKwkJCQkgICAiIGNtOiAlcCBlcnIgJWRcbiIsIGljLT5pX2NtX2lkLCBlcnIpOworCQl9CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkgeworCQkJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUpOworCQl9CisKKwkJd2FpdF9ldmVudChyZHNfaXdfcmluZ19lbXB0eV93YWl0LAorCQkJcmRzX2l3X3JpbmdfZW1wdHkoJmljLT5pX3NlbmRfcmluZykgJiYKKwkJCXJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKTsKKworCQlpZiAoaWMtPmlfc2VuZF9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnMsCisJCQkJCSAgIGljLT5pX3NlbmRfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9yZWN2X2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRycywKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX2FjaykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgICBpYy0+aV9hY2ssIGljLT5pX2Fja19kbWEpOworCisJCWlmIChpYy0+aV9zZW5kcykKKwkJCXJkc19pd19zZW5kX2NsZWFyX3JpbmcoaWMpOworCQlpZiAoaWMtPmlfcmVjdnMpCisJCQlyZHNfaXdfcmVjdl9jbGVhcl9yaW5nKGljKTsKKworCQlpZiAoaWMtPmlfY21faWQtPnFwKQorCQkJcmRtYV9kZXN0cm95X3FwKGljLT5pX2NtX2lkKTsKKwkJaWYgKGljLT5pX3NlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3NlbmRfY3EpOworCQlpZiAoaWMtPmlfcmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfcmVjdl9jcSk7CisKKwkJLyoKKwkJICogSWYgYXNzb2NpYXRlZCB3aXRoIGFuIHJkc19pd19kZXZpY2U6CisJCSAqIAlNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KKwkJICogCVJlbW92ZSBjbV9pZCBmcm9tIHRoZSBkZXZpY2UgY21faWQgbGlzdC4KKwkJICovCisJCWlmIChpYy0+cmRzX2l3ZGV2KSB7CisKKwkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOworCQkJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJCQlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwkJCXJkc19pd19yZW1vdmVfY21faWQoaWMtPnJkc19pd2RldiwgaWMtPmlfY21faWQpOworCQkJaWMtPnJkc19pd2RldiA9IE5VTEw7CisJCX0KKworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJaWMtPmlfcGQgPSBOVUxMOworCQlpYy0+aV9tciA9IE5VTEw7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9oZHJzID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9oZHJzID0gTlVMTDsKKwkJaWMtPmlfYWNrID0gTlVMTDsKKwl9CisJQlVHX09OKGljLT5yZHNfaXdkZXYpOworCisJLyogQ2xlYXIgcGVuZGluZyB0cmFuc21pdCAqLworCWlmIChpYy0+aV9ybSkgeworCQlyZHNfbWVzc2FnZV9wdXQoaWMtPmlfcm0pOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisJaWMtPmlfYWNrX3JlY3YgPSAwOworCisJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCisJaWMtPmlfZmxvd2N0bCA9IDA7CisJYXRvbWljX3NldCgmaWMtPmlfY3JlZGl0cywgMCk7CisKKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpZiAoaWMtPmlfaXdpbmMpIHsKKwkJcmRzX2luY19wdXQoJmljLT5pX2l3aW5jLT5paV9pbmMpOworCQlpYy0+aV9pd2luYyA9IE5VTEw7CisJfQorCisJdmZyZWUoaWMtPmlfc2VuZHMpOworCWljLT5pX3NlbmRzID0gTlVMTDsKKwl2ZnJlZShpYy0+aV9yZWN2cyk7CisJaWMtPmlfcmVjdnMgPSBOVUxMOworCXJkc2RlYnVnKCJzaHV0ZG93biBjb21wbGV0ZVxuIik7Cit9CisKK2ludCByZHNfaXdfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBYWFggdG9vIGxhenk/ICovCisJaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmaWMtPml3X25vZGUpOworCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJLyoKKwkgKiByZHNfaXdfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKKwkgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLgorCSAqLworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWljLT5jb25uID0gY29ubjsKKwljb25uLT5jX3RyYW5zcG9ydF9kYXRhID0gaWM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXdfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml3X25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCisJcmRzZGVidWcoImNvbm4gJXAgY29ubiBpYyAlcFxuIiwgY29ubiwgY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGFyZzsKKwlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKwlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCWtmcmVlKGljKTsKK30KKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2l3X2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmRtYS5jIGIvbmV0L3Jkcy9pd19yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmRtYS5jCkBAIC0wLDAgKzEsODg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpdy5oIgorCisKKy8qCisgKiBUaGlzIGlzIHN0b3JlZCBhcyBtci0+cl90cmFuc19wcml2YXRlLgorICovCitzdHJ1Y3QgcmRzX2l3X21yIHsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZQkqZGV2aWNlOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbAkqcG9vbDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqY21faWQ7CisKKwlzdHJ1Y3QgaWJfbXIJKm1yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCXN0cnVjdCByZHNfaXdfbWFwcGluZwltYXBwaW5nOworCXVuc2lnbmVkIGNoYXIJCXJlbWFwX2NvdW50OworfTsKKworLyoKKyAqIE91ciBvd24gbGl0dGxlIE1SIHBvb2wKKyAqLworc3RydWN0IHJkc19pd19tcl9wb29sIHsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZQkqZGV2aWNlOwkJLyogYmFjayBwdHIgdG8gdGhlIGRldmljZSB0aGF0IG93bnMgdXMgKi8KKworCXN0cnVjdCBtdXRleAkJZmx1c2hfbG9jazsJCS8qIHNlcmlhbGl6ZSBmbXIgaW52YWxpZGF0ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlmbHVzaF93b3JrZXI7CQkvKiBmbHVzaCB3b3JrZXIgKi8KKworCXNwaW5sb2NrX3QJCWxpc3RfbG9jazsJCS8qIHByb3RlY3QgdmFyaWFibGVzIGJlbG93ICovCisJYXRvbWljX3QJCWl0ZW1fY291bnQ7CQkvKiB0b3RhbCAjIG9mIE1ScyAqLworCWF0b21pY190CQlkaXJ0eV9jb3VudDsJCS8qICMgZGlydHkgb2YgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eV9saXN0OwkJLyogZGlydHkgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFuX2xpc3Q7CQkvKiB1bnVzZWQgJiB1bmFtYXBwZWQgTVJzICovCisJYXRvbWljX3QJCWZyZWVfcGlubmVkOwkJLyogbWVtb3J5IHBpbm5lZCBieSBmcmVlIE1ScyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9tZXNzYWdlX3NpemU7CS8qIGluIHBhZ2VzICovCisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zOworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtc19zb2Z0OworCXVuc2lnbmVkIGxvbmcJCW1heF9mcmVlX3Bpbm5lZDsKKwlpbnQJCQltYXhfcGFnZXM7Cit9OworCitzdGF0aWMgaW50IHJkc19pd19mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKTsKK3N0YXRpYyB2b2lkIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCByZHNfaXdfaW5pdF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CitzdGF0aWMgaW50IHJkc19pd19tYXBfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkgIHN0cnVjdCByZHNfaXdfbXIgKmlibXIsCisJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cyk7CitzdGF0aWMgdm9pZCByZHNfaXdfZnJlZV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3Qoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBfbGlzdCwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmtpbGxfbGlzdCk7CitzdGF0aWMgdm9pZCByZHNfaXdfZGVzdHJveV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CisKK3N0YXRpYyBpbnQgcmRzX2l3X2dldF9kZXZpY2Uoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19pd19kZXZpY2UgKipyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICoqY21faWQpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKml3ZGV2OworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwkqcmRzX2l3ZGV2ID0gTlVMTDsKKwkqY21faWQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpd2RldiwgJnJkc19pd19kZXZpY2VzLCBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9jbV9pZCwgJml3ZGV2LT5jbV9pZF9saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19hZGRyLCAqZHN0X2FkZHI7CisKKwkJCXNyY19hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpX2NtX2lkLT5jbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwkJCWRzdF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpX2NtX2lkLT5jbV9pZC0+cm91dGUuYWRkci5kc3RfYWRkcjsKKworCQkJcmRzZGVidWcoImxvY2FsIGlwYWRkciA9ICV4IHBvcnQgJWQsICIKKwkJCQkgInJlbW90ZSBpcGFkZHIgPSAleCBwb3J0ICVkIgorCQkJCSAiLi5sb29raW5nIGZvciAleCBwb3J0ICVkLCAiCisJCQkJICJyZW1vdGUgaXBhZGRyID0gJXggcG9ydCAlZFxuIiwKKwkJCQlzcmNfYWRkci0+c2luX2FkZHIuc19hZGRyLAorCQkJCXNyY19hZGRyLT5zaW5fcG9ydCwKKwkJCQlkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyLAorCQkJCWRzdF9hZGRyLT5zaW5fcG9ydCwKKwkJCQlycy0+cnNfYm91bmRfYWRkciwKKwkJCQlycy0+cnNfYm91bmRfcG9ydCwKKwkJCQlycy0+cnNfY29ubl9hZGRyLAorCQkJCXJzLT5yc19jb25uX3BvcnQpOworI2lmZGVmIFdPUktJTkdfVFVQTEVfREVURUNUSU9OCisJCQlpZiAoc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfYm91bmRfYWRkciAmJgorCQkJICAgIHNyY19hZGRyLT5zaW5fcG9ydCA9PSBycy0+cnNfYm91bmRfcG9ydCAmJgorCQkJICAgIGRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2Nvbm5fYWRkciAmJgorCQkJICAgIGRzdF9hZGRyLT5zaW5fcG9ydCA9PSBycy0+cnNfY29ubl9wb3J0KSB7CisjZWxzZQorCQkJLyogRklYTUUgLSBuZWVkcyB0byBjb21wYXJlIHRoZSBsb2NhbCBhbmQgcmVtb3RlCisJCQkgKiBpcGFkZHIvcG9ydCB0dXBsZSwgYnV0IHRoZSBpcGFkZHIgaXMgdGhlIG9ubHkKKwkJCSAqIGF2YWlsYWJsZSBpbmZvbWF0aW9uIGluIHRoZSByZHNfc29jayAoYXMgdGhlIHJlc3QgYXJlCisJCQkgKiB6ZXJvJ2VkLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgcHJvcGVybHkgcG9wdWxhdGVkCisJCQkgKiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4uLgorCQkJICovCisJCQlpZiAoc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfYm91bmRfYWRkcikgeworI2VuZGlmCisJCQkJc3Bpbl91bmxvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCQkJCSpyZHNfaXdkZXYgPSBpd2RldjsKKwkJCQkqY21faWQgPSBpX2NtX2lkLT5jbV9pZDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X2FkZF9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCWlfY21faWQgPSBrbWFsbG9jKHNpemVvZiAqaV9jbV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpX2NtX2lkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlfY21faWQtPmNtX2lkID0gY21faWQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpX2NtX2lkLT5saXN0LCAmcmRzX2l3ZGV2LT5jbV9pZF9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9jbV9pZCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQlpZiAoaV9jbV9pZC0+Y21faWQgPT0gY21faWQpIHsKKwkJCWxpc3RfZGVsKCZpX2NtX2lkLT5saXN0KTsKKwkJCWtmcmVlKGlfY21faWQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKK30KKworCitpbnQgcmRzX2l3X3VwZGF0ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmNfYWRkciwgKmRzdF9hZGRyOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXZfb2xkOworCXN0cnVjdCByZHNfc29jayByczsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqcGNtX2lkOworCWludCByYzsKKworCXNyY19hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZjbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwlkc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY21faWQtPnJvdXRlLmFkZHIuZHN0X2FkZHI7CisKKwlycy5yc19ib3VuZF9hZGRyID0gc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKwlycy5yc19ib3VuZF9wb3J0ID0gc3JjX2FkZHItPnNpbl9wb3J0OworCXJzLnJzX2Nvbm5fYWRkciA9IGRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisJcnMucnNfY29ubl9wb3J0ID0gZHN0X2FkZHItPnNpbl9wb3J0OworCisJcmMgPSByZHNfaXdfZ2V0X2RldmljZSgmcnMsICZyZHNfaXdkZXZfb2xkLCAmcGNtX2lkKTsKKwlpZiAocmMpCisJCXJkc19pd19yZW1vdmVfY21faWQocmRzX2l3ZGV2LCBjbV9pZCk7CisKKwlyZXR1cm4gcmRzX2l3X2FkZF9jbV9pZChyZHNfaXdkZXYsIGNtX2lkKTsKK30KKworaW50IHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBjb25uIHdhcyBwcmV2aW91c2x5IG9uIHRoZSBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJml3X25vZGV2X2Nvbm5zKSk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWljLT5yZHNfaXdkZXYgPSByZHNfaXdkZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZpd19ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaXdfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCit2b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9zcGxpY2UoJnJkc19pd2Rldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGl3X25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfc2NhdHRlcmxpc3Qoc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCAqc2csCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IHNnX2xlbikKK3sKKwlzZy0+bGlzdCA9IGxpc3Q7CisJc2ctPmxlbiA9IHNnX2xlbjsKKwlzZy0+ZG1hX2xlbiA9IDA7CisJc2ctPmRtYV9ucGFnZXMgPSAwOworCXNnLT5ieXRlcyA9IDA7Cit9CisKK3N0YXRpYyB1NjQgKnJkc19pd19tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiwKKwkJCXN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgKnNnLAorCQkJdW5zaWduZWQgaW50IGRtYV9wYWdlX3NoaWZ0KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pd2Rldi0+ZGV2OworCXU2NCAqZG1hX3BhZ2VzID0gTlVMTDsKKwl1NjQgZG1hX21hc2s7CisJdW5zaWduZWQgaW50IGRtYV9wYWdlX3NpemU7CisJaW50IGksIGosIHJldDsKKworCWRtYV9wYWdlX3NpemUgPSAxIDw8IGRtYV9wYWdlX3NoaWZ0OworCWRtYV9tYXNrID0gZG1hX3BhZ2Vfc2l6ZSAtIDE7CisKKwlXQVJOX09OKHNnLT5kbWFfbGVuKTsKKworCXNnLT5kbWFfbGVuID0gaWJfZG1hX21hcF9zZyhkZXYsIHNnLT5saXN0LCBzZy0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KCFzZy0+ZG1hX2xlbikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBkbWFfbWFwX3NnIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCX0KKworCXNnLT5ieXRlcyA9IDA7CisJc2ctPmRtYV9ucGFnZXMgPSAwOworCisJcmV0ID0gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgc2ctPmRtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBlbmRfYWRkcjsKKworCQlzZy0+Ynl0ZXMgKz0gZG1hX2xlbjsKKworCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKKwkJaWYgKGRtYV9hZGRyICYgZG1hX21hc2spIHsKKwkJCWlmIChpID4gMCkKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJCWRtYV9hZGRyICY9IH5kbWFfbWFzazsKKwkJfQorCQlpZiAoZW5kX2FkZHIgJiBkbWFfbWFzaykgeworCQkJaWYgKGkgPCBzZy0+ZG1hX2xlbiAtIDEpCisJCQkJZ290byBvdXRfdW5tYXA7CisJCQllbmRfYWRkciA9IChlbmRfYWRkciArIGRtYV9tYXNrKSAmIH5kbWFfbWFzazsKKwkJfQorCisJCXNnLT5kbWFfbnBhZ2VzICs9IChlbmRfYWRkciAtIGRtYV9hZGRyKSA+PiBkbWFfcGFnZV9zaGlmdDsKKwl9CisKKwkvKiBOb3cgZ2F0aGVyIHRoZSBkbWEgYWRkcnMgaW50byBvbmUgbGlzdCAqLworCWlmIChzZy0+ZG1hX25wYWdlcyA+IGZhc3RyZWdfbWVzc2FnZV9zaXplKQorCQlnb3RvIG91dF91bm1hcDsKKworCWRtYV9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiBzZy0+ZG1hX25wYWdlcywgR0ZQX0FUT01JQyk7CisJaWYgKCFkbWFfcGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJZm9yIChpID0gaiA9IDA7IGkgPCBzZy0+ZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGVuZF9hZGRyOworCisJCWVuZF9hZGRyID0gZG1hX2FkZHIgKyBkbWFfbGVuOworCQlkbWFfYWRkciAmPSB+ZG1hX21hc2s7CisJCWZvciAoOyBkbWFfYWRkciA8IGVuZF9hZGRyOyBkbWFfYWRkciArPSBkbWFfcGFnZV9zaXplKQorCQkJZG1hX3BhZ2VzW2orK10gPSBkbWFfYWRkcjsKKwkJQlVHX09OKGogPiBzZy0+ZG1hX25wYWdlcyk7CisJfQorCisJcmV0dXJuIGRtYV9wYWdlczsKKworb3V0X3VubWFwOgorCWliX2RtYV91bm1hcF9zZyhyZHNfaXdkZXYtPmRldiwgc2ctPmxpc3QsIHNnLT5sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwlzZy0+ZG1hX2xlbiA9IDA7CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCisKK3N0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sOworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogcmRzX2l3X2NyZWF0ZV9tcl9wb29sIGFsbG9jIGVycm9yXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcG9vbC0+ZGV2aWNlID0gcmRzX2l3ZGV2OworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5kaXJ0eV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+Y2xlYW5fbGlzdCk7CisJbXV0ZXhfaW5pdCgmcG9vbC0+Zmx1c2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxpc3RfbG9jayk7CisJSU5JVF9XT1JLKCZwb29sLT5mbHVzaF93b3JrZXIsIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcik7CisKKwlwb29sLT5tYXhfbWVzc2FnZV9zaXplID0gZmFzdHJlZ19tZXNzYWdlX3NpemU7CisJcG9vbC0+bWF4X2l0ZW1zID0gZmFzdHJlZ19wb29sX3NpemU7CisJcG9vbC0+bWF4X2ZyZWVfcGlubmVkID0gcG9vbC0+bWF4X2l0ZW1zICogcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSAvIDQ7CisJcG9vbC0+bWF4X3BhZ2VzID0gZmFzdHJlZ19tZXNzYWdlX3NpemU7CisKKwkvKiBXZSBuZXZlciBhbGxvdyBtb3JlIHRoYW4gbWF4X2l0ZW1zIE1ScyB0byBiZSBhbGxvY2F0ZWQuCisJICogV2hlbiB3ZSBleGNlZWQgbW9yZSB0aGFuIG1heF9pdGVtc19zb2Z0LCB3ZSBzdGFydCBmcmVlaW5nCisJICogaXRlbXMgbW9yZSBhZ2dyZXNzaXZlbHkuCisJICogTWFrZSBzdXJlIHRoYXQgbWF4X2l0ZW1zID4gbWF4X2l0ZW1zX3NvZnQgPiBtYXhfaXRlbXMgLyAyCisJICovCisJcG9vbC0+bWF4X2l0ZW1zX3NvZnQgPSBwb29sLT5tYXhfaXRlbXMgKiAzIC8gNDsKKworCXJldHVybiBwb29sOworfQorCit2b2lkIHJkc19pd19nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisKKwlpaW5mby0+cmRtYV9tcl9tYXggPSBwb29sLT5tYXhfaXRlbXM7CisJaWluZm8tPnJkbWFfbXJfc2l6ZSA9IHBvb2wtPm1heF9wYWdlczsKK30KKwordm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCkKK3sKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKwlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAxKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSk7CisJa2ZyZWUocG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJkc19pd19tciAqcmRzX2l3X3JldXNlX2ZtcihzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnBvb2wtPmNsZWFuX2xpc3QpKSB7CisJCWlibXIgPSBsaXN0X2VudHJ5KHBvb2wtPmNsZWFuX2xpc3QubmV4dCwgc3RydWN0IHJkc19pd19tciwgbWFwcGluZy5tX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGlibXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2l3X21yICpyZHNfaXdfYWxsb2NfbXIoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJaW50IGVyciA9IDAsIGl0ZXIgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWJtciA9IHJkc19pd19yZXVzZV9mbXIocG9vbCk7CisJCWlmIChpYm1yKQorCQkJcmV0dXJuIGlibXI7CisKKwkJLyogTm8gY2xlYW4gTVJzIC0gbm93IHdlIGhhdmUgdGhlIGNob2ljZSBvZiBlaXRoZXIKKwkJICogYWxsb2NhdGluZyBhIGZyZXNoIE1SIHVwIHRvIHRoZSBsaW1pdCBpbXBvc2VkIGJ5IHRoZQorCQkgKiBkcml2ZXIsIG9yIGZsdXNoIGFueSBkaXJ0eSB1bnVzZWQgTVJzLgorCQkgKiBXZSB0cnkgdG8gYXZvaWQgc3RhbGxpbmcgaW4gdGhlIHNlbmQgcGF0aCBpZiBwb3NzaWJsZSwKKwkJICogc28gd2UgYWxsb2NhdGUgYXMgbG9uZyBhcyB3ZSdyZSBhbGxvd2VkIHRvLgorCQkgKgorCQkgKiBXZSdyZSBmdXNzeSB3aXRoIGVuZm9yY2luZyB0aGUgRk1SIGxpbWl0LCB0aG91Z2guIElmIHRoZSBkcml2ZXIKKwkJICogdGVsbHMgdXMgd2UgY2FuJ3QgdXNlIG1vcmUgdGhhbiBOIGZtcnMsIHdlIHNob3VsZG4ndCBzdGFydAorCQkgKiBhcmd1aW5nIHdpdGggaXQgKi8KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwb29sLT5pdGVtX2NvdW50KSA8PSBwb29sLT5tYXhfaXRlbXMpCisJCQlicmVhazsKKworCQlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKworCQlpZiAoKytpdGVyID4gMikgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF9kZXBsZXRlZCk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwkJfQorCisJCS8qIFdlIGRvIGhhdmUgc29tZSBlbXB0eSBNUnMuIEZsdXNoIHRoZW0gb3V0LiAqLworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX3dhaXQpOworCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9CisKKwlpYm1yID0ga3phbGxvYyhzaXplb2YoKmlibXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlibXIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmlibXItPm1hcHBpbmcubV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCWlibXItPm1hcHBpbmcubV9tciA9IGlibXI7CisKKwllcnIgPSByZHNfaXdfaW5pdF9mYXN0cmVnKHBvb2wsIGlibXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X25vX2NpZ2FyOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfYWxsb2MpOworCXJldHVybiBpYm1yOworCitvdXRfbm9fY2lnYXI6CisJaWYgKGlibXIpIHsKKwkJcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhwb29sLCBpYm1yKTsKKwkJa2ZyZWUoaWJtcik7CisJfQorCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3ZvaWQgcmRzX2l3X3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gaWJtci0+ZGV2aWNlOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShyZHNfaXdkZXYtPmRldiwgaWJtci0+bWFwcGluZy5tX3NnLmxpc3QsCisJCQlpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocmRzX2l3ZGV2LT5kZXYsIGlibXItPm1hcHBpbmcubV9zZy5saXN0LAorCQkJaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZHNfaXdfZmx1c2hfZ29hbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwl1bnNpZ25lZCBpbnQgaXRlbV9jb3VudDsKKworCWl0ZW1fY291bnQgPSBhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCk7CisJaWYgKGZyZWVfYWxsKQorCQlyZXR1cm4gaXRlbV9jb3VudDsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggb3VyIHBvb2wgb2YgTVJzLgorICogQXQgYSBtaW5pbXVtLCBhbGwgY3VycmVudGx5IHVudXNlZCBNUnMgYXJlIHVubWFwcGVkLgorICogSWYgdGhlIG51bWJlciBvZiBNUnMgYWxsb2NhdGVkIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSBhbHNvIHRyeQorICogdG8gZnJlZSBhcyBtYW55IE1ScyBhcyBuZWVkZWQgdG8gZ2V0IGJhY2sgdG8gdGhpcyBsaW1pdC4KKyAqLworc3RhdGljIGludCByZHNfaXdfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yLCAqbmV4dDsKKwlMSVNUX0hFQUQodW5tYXBfbGlzdCk7CisJTElTVF9IRUFEKGtpbGxfbGlzdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmZyZWVkID0gMCwgbmNsZWFuZWQgPSAwLCBmcmVlX2dvYWw7CisJaW50IHJldCA9IDA7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX2ZsdXNoKTsKKworCW11dGV4X2xvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCS8qIEdldCB0aGUgbGlzdCBvZiBhbGwgbWFwcGluZ3MgdG8gYmUgZGVzdHJveWVkICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZGlydHlfbGlzdCwgJnVubWFwX2xpc3QpOworCWlmIChmcmVlX2FsbCkKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+Y2xlYW5fbGlzdCwgJmtpbGxfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlmcmVlX2dvYWwgPSByZHNfaXdfZmx1c2hfZ29hbChwb29sLCBmcmVlX2FsbCk7CisKKwkvKiBCYXRjaGVkIGludmFsaWRhdGUgb2YgZGlydHkgTVJzLgorCSAqIEZvciBGTVIgYmFzZWQgTVJzLCB0aGUgbWFwcGluZ3Mgb24gdGhlIHVubWFwIGxpc3QgYXJlCisJICogYWN0dWFsbHkgbWVtYmVycyBvZiBhbiBpYm1yIChpYm1yLT5tYXBwaW5nKS4gVGhleSBlaXRoZXIKKwkgKiBtaWdyYXRlIHRvIHRoZSBraWxsX2xpc3QsIG9yIGhhdmUgYmVlbiBjbGVhbmVkIGFuZCBzaG91bGQgYmUKKwkgKiBtb3ZlZCB0byB0aGUgY2xlYW5fbGlzdC4KKwkgKiBGb3IgZmFzdHJlZ3MsIHRoZXkgd2lsbCBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGFuZAorCSAqIHdpbGwgYmUgZGVzdHJveWVkIGJ5IHRoZSB1bm1hcCBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnVubWFwX2xpc3QpKSB7CisJCW5jbGVhbmVkID0gcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChwb29sLCAmdW5tYXBfbGlzdCwgJmtpbGxfbGlzdCk7CisJCS8qIElmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gZGVzdHJveSBhbGwgTVJzLCBtb3ZlIHRob3NlCisJCSAqIHRoYXQgd2VyZSBzaW1wbHkgY2xlYW5lZCB0byB0aGUga2lsbCBsaXN0ICovCisJCWlmIChmcmVlX2FsbCkKKwkJCWxpc3Rfc3BsaWNlX2luaXQoJnVubWFwX2xpc3QsICZraWxsX2xpc3QpOworCX0KKworCS8qIERlc3Ryb3kgYW55IE1ScyB0aGF0IGFyZSBwYXN0IHRoZWlyIGJlc3QgYmVmb3JlIGRhdGUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWJtciwgbmV4dCwgJmtpbGxfbGlzdCwgbWFwcGluZy5tX2xpc3QpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfZnJlZSk7CisJCWxpc3RfZGVsKCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJCXJkc19pd19kZXN0cm95X2Zhc3RyZWcocG9vbCwgaWJtcik7CisJCWtmcmVlKGlibXIpOworCQluZnJlZWQrKzsKKwl9CisKKwkvKiBBbnl0aGluZyB0aGF0IHJlbWFpbnMgYXJlIGxhdW5kZXJlZCBpYm1ycywgd2hpY2ggd2UgY2FuIGFkZAorCSAqIGJhY2sgdG8gdGhlIGNsZWFuIGxpc3QuICovCisJaWYgKCFsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3Rfc3BsaWNlKCZ1bm1hcF9saXN0LCAmcG9vbC0+Y2xlYW5fbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCX0KKworCWF0b21pY19zdWIobmNsZWFuZWQsICZwb29sLT5kaXJ0eV9jb3VudCk7CisJYXRvbWljX3N1YihuZnJlZWQsICZwb29sLT5pdGVtX2NvdW50KTsKKworCW11dGV4X3VubG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19pd19tcl9wb29sLCBmbHVzaF93b3JrZXIpOworCisJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7Cit9CisKK3ZvaWQgcmRzX2l3X2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gaWJtci0+ZGV2aWNlLT5tcl9wb29sOworCisJcmRzZGVidWcoIlJEUy9JVzogZnJlZV9tciBuZW50cyAldVxuIiwgaWJtci0+bWFwcGluZy5tX3NnLmxlbik7CisJaWYgKCFwb29sKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gaXQgdG8gdGhlIHBvb2wncyBmcmVlIGxpc3QgKi8KKwlyZHNfaXdfZnJlZV9mYXN0cmVnKHBvb2wsIGlibXIpOworCisJLyogSWYgd2UndmUgcGlubmVkIHRvbyBtYW55IHBhZ2VzLCByZXF1ZXN0IGEgZmx1c2ggKi8KKwlpZiAoYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSA+PSBwb29sLT5tYXhfZnJlZV9waW5uZWQKKwkgfHwgYXRvbWljX3JlYWQoJnBvb2wtPmRpcnR5X2NvdW50KSA+PSBwb29sLT5tYXhfaXRlbXMgLyAxMCkKKwkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCisJaWYgKGludmFsaWRhdGUpIHsKKwkJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkpKSB7CisJCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNyZWF0ZWQgYSBNUiBtYXJrZWQKKwkJCSAqIGFzIHVzZV9vbmNlIGFuZCBpbnZhbGlkYXRlIGF0IHRoZSBzYW1lIHRpbWUuICovCisJCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2l3X2ZsdXNoX21ycyh2b2lkKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pd2RldiwgJnJkc19pd19kZXZpY2VzLCBsaXN0KSB7CisJCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IHJkc19pd2Rldi0+bXJfcG9vbDsKKworCQlpZiAocG9vbCkKKwkJCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KK30KKwordm9pZCAqcmRzX2l3X2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCWludCByZXQ7CisKKwlyZXQgPSByZHNfaXdfZ2V0X2RldmljZShycywgJnJkc19pd2RldiwgJmNtX2lkKTsKKwlpZiAocmV0IHx8ICFjbV9pZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJkc19pd2Rldi0+bXJfcG9vbCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpYm1yID0gcmRzX2l3X2FsbG9jX21yKHJkc19pd2Rldik7CisJaWYgKElTX0VSUihpYm1yKSkKKwkJcmV0dXJuIGlibXI7CisKKwlpYm1yLT5jbV9pZCA9IGNtX2lkOworCWlibXItPmRldmljZSA9IHJkc19pd2RldjsKKworCXJldCA9IHJkc19pd19tYXBfZmFzdHJlZyhyZHNfaXdkZXYtPm1yX3Bvb2wsIGlibXIsIHNnLCBuZW50cyk7CisJaWYgKHJldCA9PSAwKQorCQkqa2V5X3JldCA9IGlibXItPm1yLT5ya2V5OworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBmYWlsZWQgdG8gbWFwIG1yIChlcnJubz0lZClcbiIsIHJldCk7CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmIChpYm1yKQorCQkJcmRzX2l3X2ZyZWVfbXIoaWJtciwgMCk7CisJCWlibXIgPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBpYm1yOworfQorCisvKgorICogaVdBUlAgZmFzdHJlZyBoYW5kbGluZworICoKKyAqIFRoZSBsaWZlIGN5Y2xlIG9mIGEgZmFzdHJlZyByZWdpc3RyYXRpb24gaXMgYSBiaXQgZGlmZmVyZW50IGZyb20KKyAqIEZNUnMuCisgKiBUaGUgaWRlYSBiZWhpbmQgZmFzdHJlZyBpcyB0byBoYXZlIG9uZSBNUiwgdG8gd2hpY2ggd2UgYmluZCBkaWZmZXJlbnQKKyAqIG1hcHBpbmdzIG92ZXIgdGltZS4gVG8gYXZvaWQgc3RhbGxpbmcgb24gdGhlIGV4cGVuc2l2ZSBtYXAgYW5kIGludmFsaWRhdGUKKyAqIG9wZXJhdGlvbnMsIHRoZXNlIG9wZXJhdGlvbnMgYXJlIHBpcGVsaW5lZCBvbiB0aGUgc2FtZSBzZW5kIHF1ZXVlIG9uCisgKiB3aGljaCB3ZSB3YW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcl9rZXkuCisgKgorICogVGhpcyBjcmVhdGVzIGEgYml0IG9mIGEgcHJvYmxlbSBmb3IgdXMsIGFzIHdlIGRvIG5vdCBoYXZlIHRoZSBkZXN0aW5hdGlvbgorICogSVAgaW4gR0VUX01SLCBzbyB0aGUgY29ubmVjdGlvbiBtdXN0IGJlIHNldHVwIHByaW9yIHRvIHRoZSBHRVRfTVIgY2FsbCBmb3IKKyAqIFJETUEgdG8gYmUgY29ycmVjdGx5IHNldHVwLiAgSWYgYSBmYXN0cmVnIHJlcXVlc3QgaXMgcHJlc2VudCwgcmRzX2l3X3htaXQKKyAqIHdpbGwgdHJ5IHRvIHF1ZXVlIGEgTE9DQUxfSU5WIChpZiBuZWVkZWQpIGFuZCBhIEZBU1RfUkVHX01SIHdvcmsgcmVxdWVzdAorICogYmVmb3JlIHF1ZXVpbmcgdGhlIFNFTkQuIFdoZW4gY29tcGxldGlvbnMgZm9yIHRoZXNlIGFycml2ZSwgdGhleSBhcmUKKyAqIGRpc3BhdGNoZWQgdG8gdGhlIE1SIGhhcyBhIGJpdCBzZXQgc2hvd2luZyB0aGF0IFJETWEgY2FuIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBUaGVyZSBpcyBhbm90aGVyIGludGVyZXN0aW5nIGFzcGVjdCB0aGF0J3MgcmVsYXRlZCB0byBpbnZhbGlkYXRpb24uCisgKiBUaGUgYXBwbGljYXRpb24gY2FuIHJlcXVlc3QgdGhhdCBhIG1hcHBpbmcgaXMgaW52YWxpZGF0ZWQgaW4gRlJFRV9NUi4KKyAqIFRoZSBleHBlY3RhdGlvbiB0aGVyZSBpcyB0aGF0IHRoaXMgaW52YWxpZGF0aW9uIHN0ZXAgaW5jbHVkZXMgQUxMCisgKiBQUkVWSU9VU0xZIEZSRUVEIE1Scy4KKyAqLworc3RhdGljIGludCByZHNfaXdfaW5pdF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYgPSBwb29sLT5kZXZpY2U7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGFnZV9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgaWJfbXIgKm1yOworCWludCBlcnI7CisKKwltciA9IGliX2FsbG9jX2Zhc3RfcmVnX21yKHJkc19pd2Rldi0+cGQsIHBvb2wtPm1heF9tZXNzYWdlX3NpemUpOworCWlmIChJU19FUlIobXIpKSB7CisJCWVyciA9IFBUUl9FUlIobXIpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfbXIgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEZJWE1FIC0gdGhpcyBpcyBvdmVya2lsbCwgYnV0IG1hcHBpbmctPm1fc2cuZG1hX2xlbi9tYXBwaW5nLT5tX3NnLmRtYV9ucGFnZXMKKwkgKiBpcyBub3QgZmlsbGVkIGluLgorCSAqLworCXBhZ2VfbGlzdCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdChyZHNfaXdkZXYtPmRldiwgcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSk7CisJaWYgKElTX0VSUihwYWdlX2xpc3QpKSB7CisJCWVyciA9IFBUUl9FUlIocGFnZV9saXN0KTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCBmYWlsZWQgKGVycj0lZClcbiIsIGVycik7CisJCWliX2RlcmVnX21yKG1yKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpYm1yLT5wYWdlX2xpc3QgPSBwYWdlX2xpc3Q7CisJaWJtci0+bXIgPSBtcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfaXdfcmRtYV9idWlsZF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gbWFwcGluZy0+bV9tcjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciBmX3dyLCAqZmFpbGVkX3dyOworCWludCByZXQ7CisKKwkvKgorCSAqIFBlcmZvcm0gYSBXUiBmb3IgdGhlIGZhc3RfcmVnX21yLiBFYWNoIGluZGl2aWR1YWwgcGFnZQorCSAqIGluIHRoZSBzZyBsaXN0IGlzIGFkZGVkIHRvIHRoZSBmYXN0IHJlZyBwYWdlIGxpc3QgYW5kIHBsYWNlZAorCSAqIGluc2lkZSB0aGUgZmFzdF9yZWdfbXIgV1IuICBUaGUga2V5IHVzZWQgaXMgYSByb2xsaW5nIDhiaXQKKwkgKiBjb3VudGVyLCB3aGljaCBzaG91bGQgZ3VhcmFudGVlIHVuaXF1ZW5lc3MuCisJICovCisJaWJfdXBkYXRlX2Zhc3RfcmVnX2tleShpYm1yLT5tciwgaWJtci0+cmVtYXBfY291bnQrKyk7CisJbWFwcGluZy0+bV9ya2V5ID0gaWJtci0+bXItPnJrZXk7CisKKwltZW1zZXQoJmZfd3IsIDAsIHNpemVvZihmX3dyKSk7CisJZl93ci53cl9pZCA9IFJEU19JV19GQVNUX1JFR19XUl9JRDsKKwlmX3dyLm9wY29kZSA9IElCX1dSX0ZBU1RfUkVHX01SOworCWZfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gbWFwcGluZy0+bV9zZy5ieXRlczsKKwlmX3dyLndyLmZhc3RfcmVnLnJrZXkgPSBtYXBwaW5nLT5tX3JrZXk7CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBpYm1yLT5wYWdlX2xpc3Q7CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gbWFwcGluZy0+bV9zZy5kbWFfbGVuOworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IGlibXItPmRldmljZS0+cGFnZV9zaGlmdDsKKwlmX3dyLndyLmZhc3RfcmVnLmFjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCWZfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9IDA7CisJZl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWZhaWxlZF93ciA9ICZmX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYm1yLT5jbV9pZC0+cXAsICZmX3dyLCAmZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmX3dyKTsKKwlpZiAocmV0ICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiAlczolZCBpYl9wb3N0X3NlbmQgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfaXdfcmRtYV9mYXN0cmVnX2ludihzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXN0cnVjdCBpYl9zZW5kX3dyIHNfd3IsICpmYWlsZWRfd3I7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWlibXItPmNtX2lkLT5xcCB8fCAhaWJtci0+bXIpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KCZzX3dyLCAwLCBzaXplb2Yoc193cikpOworCXNfd3Iud3JfaWQgPSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lEOworCXNfd3Iub3Bjb2RlID0gSUJfV1JfTE9DQUxfSU5WOworCXNfd3IuZXguaW52YWxpZGF0ZV9ya2V5ID0gaWJtci0+bXItPnJrZXk7CisJc193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWZhaWxlZF93ciA9ICZzX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYm1yLT5jbV9pZC0+cXAsICZzX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAocmV0ICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6ICVzOiVkIGliX3Bvc3Rfc2VuZCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X21hcF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIsCisJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJdW5zaWduZWQgaW50IHNnX2xlbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gcG9vbC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZyA9ICZpYm1yLT5tYXBwaW5nOworCXU2NCAqZG1hX3BhZ2VzOworCWludCBpLCByZXQgPSAwOworCisJcmRzX2l3X3NldF9zY2F0dGVybGlzdCgmbWFwcGluZy0+bV9zZywgc2csIHNnX2xlbik7CisKKwlkbWFfcGFnZXMgPSByZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHJkc19pd2RldiwKKwkJCQkmbWFwcGluZy0+bV9zZywKKwkJCQlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQpOworCWlmIChJU19FUlIoZG1hX3BhZ2VzKSkgeworCQlyZXQgPSBQVFJfRVJSKGRtYV9wYWdlcyk7CisJCWRtYV9wYWdlcyA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtYXBwaW5nLT5tX3NnLmRtYV9sZW4gPiBwb29sLT5tYXhfbWVzc2FnZV9zaXplKSB7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1hcHBpbmctPm1fc2cuZG1hX25wYWdlczsgKytpKQorCQlpYm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtpXSA9IGRtYV9wYWdlc1tpXTsKKworCXJldCA9IHJkc19pd19yZG1hX2J1aWxkX2Zhc3RyZWcobWFwcGluZyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl91c2VkKTsKKworb3V0OgorCWtmcmVlKGRtYV9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogIkZyZWUiIGEgZmFzdHJlZyBNUi4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X2ZyZWVfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCFpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbikKKwkJcmV0dXJuOworCisJcmV0ID0gcmRzX2l3X3JkbWFfZmFzdHJlZ19pbnYoaWJtcik7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJLyogVHJ5IHRvIHBvc3QgdGhlIExPQ0FMX0lOViBXUiB0byB0aGUgcXVldWUuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJbGlzdF9hZGRfdGFpbCgmaWJtci0+bWFwcGluZy5tX2xpc3QsICZwb29sLT5kaXJ0eV9saXN0KTsKKwlhdG9taWNfYWRkKGlibXItPm1hcHBpbmcubV9zZy5sZW4sICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX2luYygmcG9vbC0+ZGlydHlfY291bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBfbGlzdCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpraWxsX2xpc3QpCit7CisJc3RydWN0IHJkc19pd19tYXBwaW5nICptYXBwaW5nLCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgbmNsZWFuZWQgPSAwOworCUxJU1RfSEVBRChsYXVuZGVyZWQpOworCisJLyogQmF0Y2hlZCBpbnZhbGlkYXRpb24gb2YgZmFzdHJlZyBNUnMuCisJICogV2h5IGRvIHdlIGRvIGl0IHRoaXMgd2F5LCBldmVuIHRob3VnaCB3ZSBjb3VsZCBwaXBlbGluZSB1bm1hcAorCSAqIGFuZCByZW1hcD8gVGhlIHJlYXNvbiBpcyB0aGUgYXBwbGljYXRpb24gc2VtYW50aWNzIC0gd2hlbiB0aGUKKwkgKiBhcHBsaWNhdGlvbiByZXF1ZXN0cyBhbiBpbnZhbGlkYXRpb24gb2YgTVJzLCBpdCBleHBlY3RzIGFsbAorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgUl9LZXlzIHRvIGJlY29tZSBpbnZhbGlkLgorCSAqCisJICogSWYgd2UgaW1wbGVtZW50IE1SIHJldXNlIG5haXZlbHksIHdlIHJpc2sgbWVtb3J5IGNvcnJ1cHRpb24KKwkgKiAodGhpcyBoYXMgYWN0dWFsbHkgYmVlbiBvYnNlcnZlZCkuIFNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yCisJICogcmVxdWlyZXMgdGhhdCBhIE1SIGdvZXMgdGhyb3VnaCBhbiBleHBsaWNpdCB1bm1hcCBvcGVyYXRpb24gYmVmb3JlCisJICogd2UgY2FuIHJldXNlIGl0IGFnYWluLgorCSAqCisJICogV2UgY291bGQgcHJvYmFibHkgaW1wcm92ZSBvbiB0aGlzIGEgbGl0dGxlLCBieSBhbGxvd2luZyBpbW1lZGlhdGUKKwkgKiByZXVzZSBvZiBhIE1SIG9uIHRoZSBzYW1lIHNvY2tldCAoZWcgeW91IGNvdWxkIGFkZCBzbWFsbAorCSAqIGNhY2hlIG9mIHVudXNlZCBNUnMgdG8gc3RyY3QgcmRzX3NvY2tldCAtIEdFVF9NUiBjb3VsZCBncmFiIG9uZQorCSAqIG9mIHRoZXNlIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IGludmFsaWRhdGUpLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSh1bm1hcF9saXN0KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcHBpbmcsIG5leHQsIHVubWFwX2xpc3QsIG1fbGlzdCkgeworCQkJbGlzdF9tb3ZlKCZtYXBwaW5nLT5tX2xpc3QsICZsYXVuZGVyZWQpOworCQkJbmNsZWFuZWQrKzsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBNb3ZlIGFsbCBsYXVuZGVyZWQgbWFwcGluZ3MgYmFjayB0byB0aGUgdW5tYXAgbGlzdC4KKwkgKiBXZSBkbyBub3Qga2lsbCBhbnkgV1JzIHJpZ2h0IG5vdyAtIGl0IGRvZXNuJ3Qgc2VlbSB0aGUKKwkgKiBmYXN0cmVnIEFQSSBoYXMgYSBtYXhfcmVtYXAgbGltaXQuICovCisJbGlzdF9zcGxpY2VfaW5pdCgmbGF1bmRlcmVkLCB1bm1hcF9saXN0KTsKKworCXJldHVybiBuY2xlYW5lZDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJaWYgKGlibXItPnBhZ2VfbGlzdCkKKwkJaWJfZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3QoaWJtci0+cGFnZV9saXN0KTsKKwlpZiAoaWJtci0+bXIpCisJCWliX2RlcmVnX21yKGlibXItPm1yKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmVjdi5jIGIvbmV0L3Jkcy9pd19yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MzFmMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmVjdi5jCkBAIC0wLDAgKzEsODY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaXdfaW5jb21pbmdfc2xhYjsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2l3X2ZyYWdfc2xhYjsKK3N0YXRpYyBhdG9taWNfdAlyZHNfaXdfYWxsb2NhdGlvbiA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgdm9pZCByZHNfaXdfZnJhZ19kcm9wX3BhZ2Uoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlfX2ZyZWVfcGFnZShmcmFnLT5mX3BhZ2UpOworCWZyYWctPmZfcGFnZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19mcmFnX2ZyZWUoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlCVUdfT04oZnJhZy0+Zl9wYWdlICE9IE5VTEwpOworCWttZW1fY2FjaGVfZnJlZShyZHNfaXdfZnJhZ19zbGFiLCBmcmFnKTsKK30KKworLyoKKyAqIFdlIG1hcCBhIHBhZ2UgYXQgYSB0aW1lLiAgSXRzIGZyYWdtZW50cyBhcmUgcG9zdGVkIGluIG9yZGVyLiAgVGhpcworICogaXMgY2FsbGVkIGluIGZyYWdtZW50IG9yZGVyIGFzIHRoZSBmcmFnbWVudHMgZ2V0IHNlbmQgY29tcGxldGlvbiBldmVudHMuCisgKiBPbmx5IHRoZSBsYXN0IGZyYWcgaW4gdGhlIHBhZ2UgcGVyZm9ybXMgdGhlIHVubWFwcGluZy4KKyAqCisgKiBJdCdzIE9LIGZvciByaW5nIGNsZWFudXAgdG8gY2FsbCB0aGlzIGluIHdoYXRldmVyIG9yZGVyIGl0IGxpa2VzIGJlY2F1c2UKKyAqIERNQSBpcyBub3QgaW4gZmxpZ2h0IGFuZCBzbyB3ZSBjYW4gdW5tYXAgd2hpbGUgb3RoZXIgcmluZyBlbnRyaWVzIHN0aWxsCisgKiBob2xkIHBhZ2UgcmVmZXJlbmNlcyBpbiB0aGVpciBmcmFncy4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2KQoreworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnID0gcmVjdi0+cl9mcmFnOworCisJcmRzZGVidWcoInJlY3YgJXAgZnJhZyAlcCBwYWdlICVwXG4iLCByZWN2LCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCWlmIChmcmFnLT5mX21hcHBlZCkKKwkJaWJfZG1hX3VubWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCSAgICAgICBmcmFnLT5mX21hcHBlZCwKKwkJCSAgICAgICBSRFNfRlJBR19TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWZyYWctPmZfbWFwcGVkID0gMDsKK30KKwordm9pZCByZHNfaXdfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHJlY3YgPSBpYy0+aV9yZWN2czsgaSA8IGljLT5pX3JlY3ZfcmluZy53X25yOyBpKyssIHJlY3YrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwkJcmVjdi0+cl93ci5uZXh0ID0gTlVMTDsKKwkJcmVjdi0+cl93ci53cl9pZCA9IGk7CisJCXJlY3YtPnJfd3Iuc2dfbGlzdCA9IHJlY3YtPnJfc2dlOworCQlyZWN2LT5yX3dyLm51bV9zZ2UgPSBSRFNfSVdfUkVDVl9TR0U7CisKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IDA7CisJCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfb25lKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkJICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdikKK3sKKwlpZiAocmVjdi0+cl9pd2luYykgeworCQlyZHNfaW5jX3B1dCgmcmVjdi0+cl9pd2luYy0+aWlfaW5jKTsKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJfQorCWlmIChyZWN2LT5yX2ZyYWcpIHsKKwkJcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisJCWlmIChyZWN2LT5yX2ZyYWctPmZfcGFnZSkKKwkJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZHNfaXdfZnJhZ19mcmVlKHJlY3YtPnJfZnJhZyk7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHJkc19pd19yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrKQorCQlyZHNfaXdfcmVjdl9jbGVhcl9vbmUoaWMsICZpYy0+aV9yZWN2c1tpXSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UpCisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZSgmaWMtPmlfZnJhZyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JlY3ZfcmVmaWxsX29uZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdiwKKwkJCQkgIGdmcF90IGtwdHJfZ2ZwLCBnZnBfdCBwYWdlX2dmcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChyZWN2LT5yX2l3aW5jID09IE5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZyZHNfaXdfYWxsb2NhdGlvbikgPj0gcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uKSB7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfYWxsb2NfbGltaXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVjdi0+cl9pd2luYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2l3X2luY29taW5nX3NsYWIsCisJCQkJCQkga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9pd2luYyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWF0b21pY19pbmMoJnJkc19pd19hbGxvY2F0aW9uKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfaXdpbmMtPmlpX2ZyYWdzKTsKKwkJcmRzX2luY19pbml0KCZyZWN2LT5yX2l3aW5jLT5paV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCX0KKworCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkgeworCQlyZWN2LT5yX2ZyYWcgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pd19mcmFnX3NsYWIsIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSk7CisJCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gTlVMTDsKKwl9CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkgeworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IGFsbG9jX3BhZ2UocGFnZV9nZnApOworCQlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlkbWFfYWRkciA9IGliX2RtYV9tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCSAgaWMtPmlfZnJhZy5mX3BhZ2UsCisJCQkJICBpYy0+aV9mcmFnLmZfb2Zmc2V0LAorCQkJCSAgUkRTX0ZSQUdfU0laRSwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGljLT5pX2NtX2lkLT5kZXZpY2UsIGRtYV9hZGRyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE9uY2Ugd2UgZ2V0IHRoZSBSRFNfUEFHRV9MQVNUX09GRiBmcmFnIHRoZW4gcmRzX2l3X2ZyYWdfdW5tYXAoKQorCSAqIG11c3QgYmUgY2FsbGVkIG9uIHRoaXMgcmVjdi4gIFRoaXMgaGFwcGVucyBhcyBjb21wbGV0aW9ucyBoaXQKKwkgKiBpbiBvcmRlciBvciBvbiBjb25uZWN0aW9uIHNodXRkb3duLgorCSAqLworCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gaWMtPmlfZnJhZy5mX3BhZ2U7CisJcmVjdi0+cl9mcmFnLT5mX29mZnNldCA9IGljLT5pX2ZyYWcuZl9vZmZzZXQ7CisJcmVjdi0+cl9mcmFnLT5mX21hcHBlZCA9IGRtYV9hZGRyOworCisJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gZG1hX2FkZHI7CisJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCisJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKHJlY3YgLSBpYy0+aV9yZWN2cykgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWdldF9wYWdlKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKTsKKworCWlmIChpYy0+aV9mcmFnLmZfb2Zmc2V0IDwgUkRTX1BBR0VfTEFTVF9PRkYpIHsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCArPSBSRFNfRlJBR19TSVpFOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKGljLT5pX2ZyYWcuZl9wYWdlKTsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBOVUxMOworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHRyaWVzIHRvIGFsbG9jYXRlIGFuZCBwb3N0IHVudXNlZCB3b3JrIHJlcXVlc3RzIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQKKyAqIHRoZXkgaGF2ZSBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXkgbmVlZCB0byBxdWV1ZSByZWNlaXZlZCBmcmFnbWVudHMgaW50bworICogc29ja2V0cy4gIFRoZSBpX3JlY3ZfbXV0ZXggaXMgaGVsZCBoZXJlIHNvIHRoYXQgcmluZ19hbGxvYyBhbmQgX3VuYWxsb2MKKyAqIHBhaXJzIGRvbid0IGdvIHVubWF0Y2hlZC4KKyAqCisgKiAtMSBpcyByZXR1cm5lZCBpZiBwb3N0aW5nIGZhaWxzIGR1ZSB0byB0ZW1wb3JhcnkgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKyAqLworaW50IHJkc19pd19yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2OworCXN0cnVjdCBpYl9yZWN2X3dyICpmYWlsZWRfd3I7CisJdW5zaWduZWQgaW50IHBvc3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisJdTMyIHBvczsKKworCXdoaWxlICgocHJlZmlsbCB8fCByZHNfY29ubl91cChjb25uKSkKKwkJCSYmIHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEsICZwb3MpKSB7CisJCWlmIChwb3MgPj0gaWMtPmlfcmVjdl9yaW5nLndfbnIpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiQXJnaCAtIHJpbmcgYWxsb2MgcmV0dXJuZWQgcG9zPSV1XG4iLAorCQkJCQlwb3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1twb3NdOworCQlyZXQgPSByZHNfaXdfcmVjdl9yZWZpbGxfb25lKGNvbm4sIHJlY3YsIGtwdHJfZ2ZwLCBwYWdlX2dmcCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBYWFggd2hlbiBjYW4gdGhpcyBmYWlsPyAqLworCQlyZXQgPSBpYl9wb3N0X3JlY3YoaWMtPmlfY21faWQtPnFwLCAmcmVjdi0+cl93ciwgJmZhaWxlZF93cik7CisJCXJkc2RlYnVnKCJyZWN2ICVwIGl3aW5jICVwIHBhZ2UgJXAgYWRkciAlbHUgcmV0ICVkXG4iLCByZWN2LAorCQkJIHJlY3YtPnJfaXdpbmMsIHJlY3YtPnJfZnJhZy0+Zl9wYWdlLAorCQkJIChsb25nKSByZWN2LT5yX2ZyYWctPmZfbWFwcGVkLCByZXQpOworCQlpZiAocmV0KSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmVjdiBwb3N0IG9uICIKKwkJCSAgICAgICAiJXBJNCByZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJICAgICAgIHJldCk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9zdGVkKys7CisJfQorCisJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sIC0gdXBkYXRlIHRoZSB3aW5kb3cuICovCisJaWYgKGljLT5pX2Zsb3djdGwgJiYgcG9zdGVkKQorCQlyZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoY29ubiwgcG9zdGVkKTsKKworCWlmIChyZXQpCisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqcG9zOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCXJkc2RlYnVnKCJwdXJnaW5nIGl3aW5jICVwIGluYyAlcFxuIiwgaXdpbmMsIGluYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgcG9zLCAmaXdpbmMtPmlpX2ZyYWdzLCBmX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmZnJhZy0+Zl9pdGVtKTsKKwkJcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKGZyYWcpOworCQlyZHNfaXdfZnJhZ19mcmVlKGZyYWcpOworCX0KK30KKwordm9pZCByZHNfaXdfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCisJcmRzX2l3X2luY19wdXJnZShpbmMpOworCXJkc2RlYnVnKCJmcmVlaW5nIGl3aW5jICVwIGluYyAlcFxuIiwgaXdpbmMsIGluYyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZpd2luYy0+aWlfZnJhZ3MpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2l3X2luY29taW5nX3NsYWIsIGl3aW5jKTsKKwlhdG9taWNfZGVjKCZyZHNfaXdfYWxsb2NhdGlvbik7CisJQlVHX09OKGF0b21pY19yZWFkKCZyZHNfaXdfYWxsb2NhdGlvbikgPCAwKTsKK30KKworaW50IHJkc19pd19pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGlvdmVjICppb3YgPSBmaXJzdF9pb3Y7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmYgPSAwOworCXVuc2lnbmVkIGxvbmcgaW92X29mZiA9IDA7CisJaW50IGNvcGllZCA9IDA7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCWZyYWcgPSBsaXN0X2VudHJ5KGl3aW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoIiVsdSBieXRlcyB0byB1c2VyIFslcCwgJXp1XSArICVsdSBmcm9tIGZyYWcgIgorCQkJICJbJXAsICVsdV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIGZyYWctPmZfcGFnZSwgZnJhZy0+Zl9vZmZzZXQsIGZyYWdfb2ZmKTsKKworCQkvKiBYWFggbmVlZHMgKyBvZmZzZXQgZm9yIG11bHRpcGxlIHJlY3ZzIHBlciBwYWdlICovCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihmcmFnLT5mX3BhZ2UsCisJCQkJCSAgICBmcmFnLT5mX29mZnNldCArIGZyYWdfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qIGljIHN0YXJ0cyBvdXQga3phbGxvYygpZWQgKi8KK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqd3IgPSAmaWMtPmlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UgKnNnZSA9ICZpYy0+aV9hY2tfc2dlOworCisJc2dlLT5hZGRyID0gaWMtPmlfYWNrX2RtYTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKworCXdyLT5zZ19saXN0ID0gc2dlOworCXdyLT5udW1fc2dlID0gMTsKKwl3ci0+b3Bjb2RlID0gSUJfV1JfU0VORDsKKwl3ci0+d3JfaWQgPSBSRFNfSVdfQUNLX1dSX0lEOworCXdyLT5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworfQorCisvKgorICogWW91J2QgdGhpbmsgdGhhdCB3aXRoIHJlbGlhYmxlIElCIGNvbm5lY3Rpb25zIHlvdSB3b3VsZG4ndCBuZWVkIHRvIGFjaworICogbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IElCIGhhcmR3YXJlIGdlbmVyYXRlcworICogYW4gYWNrIG1lc3NhZ2UgYmVmb3JlIGl0IGhhcyBETUFlZCB0aGUgbWVzc2FnZSBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhCisgKiBwb3RlbnRpYWwgbWVzc2FnZSBsb3NzIGlmIHRoZSBIQ0EgaXMgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0CisgKiBzZW5kcyB0aGUgYWNrIGFuZCBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhCisgKiBwb3RlbnRpYWwgaXNzdWUgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisgKgorICogV2hlbiB0aGUgcmVtb3RlIGhvc3QgcmVjZWl2ZXMgb3VyIGFjayB0aGV5J2xsIGZyZWUgdGhlIHNlbnQgbWVzc2FnZSBmcm9tCisgKiB0aGVpciBzZW5kIHF1ZXVlLiAgVG8gZGVjcmVhc2UgdGhlIGxhdGVuY3kgb2YgdGhpcyB3ZSBhbHdheXMgc2VuZCBhbiBhY2sKKyAqIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3ZlIHJlY2VpdmVkIG1lc3NhZ2VzLgorICoKKyAqIEZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGhhdmUgb25lIGFjayBpbiBmbGlnaHQgYXQgYSB0aW1lLiAgVGhpcyBwdXRzCisgKiBwcmVzc3VyZSBvbiBzZW5kZXJzIHRvIGhhdmUgZGVlcCBlbm91Z2ggc2VuZCBxdWV1ZXMgdG8gYWJzb3JiIHRoZSBsYXRlbmN5IG9mCisgKiBhIHNpbmdsZSBhY2sgZnJhbWUgYmVpbmcgaW4gZmxpZ2h0LiAgVGhpcyBtaWdodCBub3QgYmUgZ29vZCBlbm91Z2guCisgKgorICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZlIGEgbG9uZy1saXZlZCBzZW5kX3dyIGFuZCBzZ2Ugd2hpY2ggcG9pbnQgdG8gYQorICogc3RhdGljYWxseSBhbGxvY2F0ZWQgYWNrIGZyYW1lLiAgVGhpcyBhY2sgd3IgZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgcmluZworICogYWNjb3VudGluZyB0aGF0IHRoZSB0eCBhbmQgcnggd3JzIGRvLiAgVGhlIFFQIGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgbWFrZXMKKyAqIHJvb20gZm9yIGl0IGJleW9uZCB0aGUgcmluZyBzaXplLiAgU2VuZCBjb21wbGV0aW9uIG5vdGljZXMgaXRzIHNwZWNpYWwKKyAqIHdyX2lkIGFuZCBhdm9pZHMgd29ya2luZyB3aXRoIHRoZSByaW5nIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTY0IHNlcSwKKwkJCQlpbnQgYWNrX3JlcXVpcmVkKQoreworCXJkc19pd19zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOworCWlmIChhY2tfcmVxdWlyZWQpIHsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJfQorfQorCitzdGF0aWMgdTY0IHJkc19pd19nZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlyZXR1cm4gaWMtPmlfYWNrX25leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHMpCit7CisJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9IGljLT5pX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXU2NCBzZXE7CisJaW50IHJldDsKKworCXNlcSA9IHJkc19pd19nZXRfYWNrKGljKTsKKworCXJkc2RlYnVnKCJzZW5kX2FjazogaWMgJXAgYWNrICVsbHVcbiIsIGljLCAodW5zaWduZWQgbG9uZyBsb25nKSBzZXEpOworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihoZHIsIDAsIDAsIDApOworCWhkci0+aF9hY2sgPSBjcHVfdG9fYmU2NChzZXEpOworCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKGhkcik7CisJaWMtPmlfYWNrX3F1ZXVlZCA9IGppZmZpZXM7CisKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmaWMtPmlfYWNrX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQkvKiBGYWlsZWQgdG8gc2VuZC4gUmVsZWFzZSB0aGUgV1IsIGFuZAorCQkgKiBmb3JjZSBhbm90aGVyIEFDSy4KKwkJICovCisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfZmFpbHVyZSk7CisJCS8qIE5lZWQgdG8gZmluZXNzZSB0aGlzIGxhdGVyLiAqLworCQlCVUcoKTsKKwl9IGVsc2UKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW50KTsKK30KKworLyoKKyAqIFRoZXJlIGFyZSAzIHdheXMgb2YgZ2V0dGluZyBhY2tub3dsZWRnZW1lbnRzIHRvIHRoZSBwZWVyOgorICogIDEuCVdlIGNhbGwgcmRzX2l3X2F0dGVtcHRfYWNrIGZyb20gdGhlIHJlY3YgY29tcGxldGlvbiBoYW5kbGVyCisgKgl0byBzZW5kIGFuIEFDSy1vbmx5IGZyYW1lLgorICoJSG93ZXZlciwgdGhlcmUgY2FuIGJlIG9ubHkgb25lIHN1Y2ggZnJhbWUgaW4gdGhlIHNlbmQgcXVldWUKKyAqCWF0IGFueSB0aW1lLCBzbyB3ZSBtYXkgaGF2ZSB0byBwb3N0cG9uZSBpdC4KKyAqICAyLglXaGVuIGFub3RoZXIgKGRhdGEpIHBhY2tldCBpcyB0cmFuc21pdHRlZCB3aGlsZSB0aGVyZSdzCisgKglhbiBBQ0sgaW4gdGhlIHF1ZXVlLCB3ZSBwaWdneWJhY2sgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIKKyAqCW9uIHRoZSBkYXRhIHBhY2tldC4KKyAqICAzLglJZiB0aGUgQUNLIFdSIGlzIGRvbmUgc2VuZGluZywgd2UgZ2V0IGNhbGxlZCBmcm9tIHRoZQorICoJc2VuZCBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlJ3MKKyAqCWFub3RoZXIgQUNLIHBlbmRpbmcgKHBvc3Rwb25lZCBiZWNhdXNlIHRoZSBXUiB3YXMgb24gdGhlCisgKglxdWV1ZSkuIElmIHNvLCB3ZSB0cmFuc21pdCBpdC4KKyAqCisgKiBXZSBtYWludGFpbiAyIHZhcmlhYmxlczoKKyAqICAtCWlfYWNrX2ZsYWdzLCB3aGljaCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBBQ0sgV1IKKyAqCWlzIGN1cnJlbnRseSBpbiB0aGUgc2VuZCBxdWV1ZSBvciBub3QgKElCX0FDS19JTl9GTElHSFQpCisgKiAgLQlpX2Fja19uZXh0LCB3aGljaCBpcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgd2UgcmVjZWl2ZWQKKyAqCisgKiBQb3RlbnRpYWxseSwgc2VuZCBxdWV1ZSBhbmQgcmVjZWl2ZSBxdWV1ZSBoYW5kbGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKyAqCisgKiBSZWNvbm5lY3RpbmcgY29tcGxpY2F0ZXMgdGhpcyBwaWN0dXJlIGp1c3Qgc2xpZ2h0bHkuIFdoZW4gd2UKKyAqIHJlY29ubmVjdCwgd2UgbWF5IGJlIHNlZWluZyBkdXBsaWNhdGUgcGFja2V0cy4gVGhlIHBlZXIKKyAqIGlzIHJldHJhbnNtaXR0aW5nIHRoZW0sIGJlY2F1c2UgaXQgaGFzbid0IHNlZW4gYW4gQUNLIGZvcgorICogdGhlbS4gSXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgQUNLIHRoZXNlLgorICoKKyAqIEFDSyBtaXRpZ2F0aW9uIGFkZHMgYSBoZWFkZXIgZmxhZyAiQUNLX1JFUVVJUkVEIjsgYW55IHBhY2tldCB3aXRoCisgKiB0aGlzIGZsYWcgc2V0ICpNVVNUKiBiZSBhY2tub3dsZWRnZWQgaW1tZWRpYXRlbHkuCisgKi8KKworLyoKKyAqIFdoZW4gd2UgZ2V0IGhlcmUsIHdlJ3JlIGNhbGxlZCBmcm9tIHRoZSByZWN2IHF1ZXVlIGhhbmRsZXIuCisgKiBDaGVjayB3aGV0aGVyIHdlIG91Z2h0IHRvIHRyYW5zbWl0IGFuIEFDSy4KKyAqLwordm9pZCByZHNfaXdfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHM7CisKKwlpZiAoIXRlc3RfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKSkgeworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfZGVsYXllZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDYW4gd2UgZ2V0IGEgc2VuZCBjcmVkaXQ/ICovCisJaWYgKCFyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDEsICZhZHZfY3JlZGl0cywgMCkpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3Rocm90dGxlKTsKKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19zZW5kX2FjayhpYywgYWR2X2NyZWRpdHMpOworfQorCisvKgorICogV2UgZ2V0IGhlcmUgZnJvbSB0aGUgc2VuZCBjb21wbGV0aW9uIGhhbmRsZXIsIHdoZW4gdGhlCisgKiBhZGFwdGVyIHRlbGxzIHVzIHRoZSBBQ0sgZnJhbWUgd2FzIHNlbnQuCisgKi8KK3ZvaWQgcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19hdHRlbXB0X2FjayhpYyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgcmVndWxhciB4bWl0IGNvZGUgd2hlbiBpdCB3YW50cyB0byBwaWdneWJhY2sKKyAqIGFuIEFDSyBvbiBhbiBvdXRnb2luZyBmcmFtZS4KKyAqLwordTY0IHJkc19pd19waWdneWJfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX3BpZ2d5YmFja2VkKTsKKwlyZXR1cm4gcmRzX2l3X2dldF9hY2soaWMpOworfQorCisvKgorICogSXQncyBraW5kIG9mIGxhbWUgdGhhdCB3ZSdyZSBjb3B5aW5nIGZyb20gdGhlIHBvc3RlZCByZWNlaXZlIHBhZ2VzIGludG8KKyAqIGxvbmctbGl2ZWQgYml0bWFwcy4gIFdlIGNvdWxkIGhhdmUgcG9zdGVkIHRoZSBiaXRtYXBzIGFuZCByZG1hIHdyaXR0ZW4gaW50bworICogdGhlbS4gIEJ1dCByZWNlaXZpbmcgbmV3IGNvbmdlc3Rpb24gYml0bWFwcyBzaG91bGQgYmUgYSAqcmFyZSogZXZlbnQsIHNvCisgKiBob3BlZnVsbHkgd2Ugd29uJ3QgbmVlZCB0byBpbnZlc3QgdGhhdCBjb21wbGV4aXR5IGluIG1ha2luZyBpdCBtb3JlCisgKiBlZmZpY2llbnQuICBCeSBjb3B5aW5nIHdlIGNhbiBzaGFyZSBhIHNpbXBsZXIgY29yZSB3aXRoIFRDUCB3aGljaCBoYXMgdG8KKyAqIGNvcHkuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19jb25nX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICAgc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmMpCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXVuc2lnbmVkIGludCBtYXBfb2ZmOworCXVuc2lnbmVkIGludCBtYXBfcGFnZTsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGNvcGllZDsKKwl1aW50NjRfdCB1bmNvbmdlc3RlZCA9IDA7CisJdm9pZCAqYWRkcjsKKworCS8qIGNhdGNoIGNvbXBsZXRlbHkgY29ycnVwdCBwYWNrZXRzICovCisJaWYgKGJlMzJfdG9fY3B1KGl3aW5jLT5paV9pbmMuaV9oZHIuaF9sZW4pICE9IFJEU19DT05HX01BUF9CWVRFUykKKwkJcmV0dXJuOworCisJbWFwID0gY29ubi0+Y19mY29uZzsKKwltYXBfcGFnZSA9IDA7CisJbWFwX29mZiA9IDA7CisKKwlmcmFnID0gbGlzdF9lbnRyeShpd2luYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJZnJhZ19vZmYgPSAwOworCisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBSRFNfQ09OR19NQVBfQllURVMpIHsKKwkJdWludDY0X3QgKnNyYywgKmRzdDsKKwkJdW5zaWduZWQgaW50IGs7CisKKwkJdG9fY29weSA9IG1pbihSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYsIFBBR0VfU0laRSAtIG1hcF9vZmYpOworCQlCVUdfT04odG9fY29weSAmIDcpOyAvKiBNdXN0IGJlIDY0Yml0IGFsaWduZWQuICovCisKKwkJYWRkciA9IGttYXBfYXRvbWljKGZyYWctPmZfcGFnZSwgS01fU09GVElSUTApOworCisJCXNyYyA9IGFkZHIgKyBmcmFnX29mZjsKKwkJZHN0ID0gKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1ttYXBfcGFnZV0gKyBtYXBfb2ZmOworCQlmb3IgKGsgPSAwOyBrIDwgdG9fY29weTsgayArPSA4KSB7CisJCQkvKiBSZWNvcmQgcG9ydHMgdGhhdCBiZWNhbWUgdW5jb25nZXN0ZWQsIGllCisJCQkgKiBiaXRzIHRoYXQgY2hhbmdlZCBmcm9tIDAgdG8gMS4gKi8KKwkJCXVuY29uZ2VzdGVkIHw9IH4oKnNyYykgJiAqZHN0OworCQkJKmRzdCsrID0gKnNyYysrOworCQl9CisJCWt1bm1hcF9hdG9taWMoYWRkciwgS01fU09GVElSUTApOworCisJCWNvcGllZCArPSB0b19jb3B5OworCisJCW1hcF9vZmYgKz0gdG9fY29weTsKKwkJaWYgKG1hcF9vZmYgPT0gUEFHRV9TSVpFKSB7CisJCQltYXBfb2ZmID0gMDsKKwkJCW1hcF9wYWdlKys7CisJCX0KKworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwl9CisKKwkvKiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgaW4gbGl0dGxlIGVuZGlhbiBvcmRlciAqLworCXVuY29uZ2VzdGVkID0gbGU2NF90b19jcHUodW5jb25nZXN0ZWQpOworCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQobWFwLCB1bmNvbmdlc3RlZCk7Cit9CisKKy8qCisgKiBSaW5ncyBhcmUgcG9zdGVkIHdpdGggYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5J2xsIG5lZWQgdG8gcXVldWUgdGhlCisgKiBpbmNvbWluZyBtZXNzYWdlIHRvIHRoZSByZWNlaXZpbmcgc29ja2V0IHNvIHRoaXMgY2FuJ3QgZmFpbC4KKyAqIEFsbCBmcmFnbWVudHMgc3RhcnQgd2l0aCBhIGhlYWRlciwgc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVjZWl2aW5nCisgKiBnYXJiYWdlLCBhbmQgd2UgY2FuIHRlbGwgYSBzbWFsbCA4IGJ5dGUgZnJhZ21lbnQgZnJvbSBhbiBBQ0sgZnJhbWUuCisgKi8KK3N0cnVjdCByZHNfaXdfYWNrX3N0YXRlIHsKKwl1NjQJCWFja19uZXh0OworCXU2NAkJYWNrX3JlY3Y7CisJdW5zaWduZWQgaW50CWFja19yZXF1aXJlZDoxOworCXVuc2lnbmVkIGludAlhY2tfbmV4dF92YWxpZDoxOworCXVuc2lnbmVkIGludAlhY2tfcmVjdl92YWxpZDoxOworfTsKKworc3RhdGljIHZvaWQgcmRzX2l3X3Byb2Nlc3NfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YsIHUzMiBieXRlX2xlbiwKKwkJCQlzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmMgPSBpYy0+aV9pd2luYzsKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaWhkciwgKmhkcjsKKworCS8qIFhYWCBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gaWYgcG9ydCAwLDAgYXJlIHNlZW4/ICovCisKKwlyZHNkZWJ1ZygiaWMgJXAgaXdpbmMgJXAgcmVjdiAlcCBieXRlIGxlbiAldVxuIiwgaWMsIGl3aW5jLCByZWN2LAorCQkgYnl0ZV9sZW4pOworCisJaWYgKGJ5dGVfbGVuIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGRpZG4ndCBpbmNsdWUgYSAiCisJCSAgICAgICAiaGVhZGVyLCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZXR1cm47CisJfQorCWJ5dGVfbGVuIC09IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlpaGRyID0gJmljLT5pX3JlY3ZfaGRyc1tyZWN2IC0gaWMtPmlfcmVjdnNdOworCisJLyogVmFsaWRhdGUgdGhlIGNoZWNrc3VtLiAqLworCWlmICghcmRzX21lc3NhZ2VfdmVyaWZ5X2NoZWNrc3VtKGloZHIpKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgaGFzIGNvcnJ1cHRlZCBoZWFkZXIgLSAiCisJCSAgICAgICAiZm9yY2luZyBhIHJlY29ubmVjdFxuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9iYWRfY2hlY2tzdW0pOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyB0aGUgQUNLIHNlcXVlbmNlIHdoaWNoIGNvbWVzIHdpdGggZXZlcnkgcGFja2V0ICovCisJc3RhdGUtPmFja19yZWN2ID0gYmU2NF90b19jcHUoaWhkci0+aF9hY2spOworCXN0YXRlLT5hY2tfcmVjdl92YWxpZCA9IDE7CisKKwkvKiBQcm9jZXNzIHRoZSBjcmVkaXRzIHVwZGF0ZSBpZiB0aGVyZSB3YXMgb25lICovCisJaWYgKGloZHItPmhfY3JlZGl0KQorCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBpaGRyLT5oX2NyZWRpdCk7CisKKwlpZiAoaWhkci0+aF9zcG9ydCA9PSAwICYmIGloZHItPmhfZHBvcnQgPT0gMCAmJiBieXRlX2xlbiA9PSAwKSB7CisJCS8qIFRoaXMgaXMgYW4gQUNLLW9ubHkgcGFja2V0LiBUaGUgZmFjdCB0aGF0IGl0IGdldHMKKwkJICogc3BlY2lhbCB0cmVhdG1lbnQgaGVyZSBpcyB0aGF0IGhpc3RvcmljYWxseSwgQUNLcworCQkgKiB3ZXJlIHJhdGhlciBzcGVjaWFsIGJlYXN0cy4KKwkJICovCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfcmVjZWl2ZWQpOworCisJCS8qCisJCSAqIFVzdWFsbHkgdGhlIGZyYWdzIG1ha2UgdGhlaXIgd2F5IG9uIHRvIGluY3MgYW5kIGFyZSB0aGVuIGZyZWVkIGFzCisJCSAqIHRoZSBpbmMgaXMgZnJlZWQuICBXZSBkb24ndCBnbyB0aGF0IHJvdXRlLCBzbyB3ZSBoYXZlIHRvIGRyb3AgdGhlCisJCSAqIHBhZ2UgcmVmIG91cnNlbHZlcy4gIFdlIGNhbid0IGp1c3QgbGVhdmUgdGhlIHBhZ2Ugb24gdGhlIHJlY3YKKwkJICogYmVjYXVzZSB0aGF0IGNvbmZ1c2VzIHRoZSBkbWEgbWFwcGluZyBvZiBwYWdlcyBhbmQgZWFjaCByZWN2J3MgdXNlCisJCSAqIG9mIGEgcGFydGlhbCBwYWdlLiAgV2UgY2FuIGxlYXZlIHRoZSBmcmFnLCB0aG91Z2gsIGl0IHdpbGwgYmUKKwkJICogcmV1c2VkLgorCQkgKgorCQkgKiBGSVhNRTogRm9sZCB0aGlzIGludG8gdGhlIGNvZGUgcGF0aCBiZWxvdy4KKwkJICovCisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gaW5jIG9uIHRoZSBjb25uZWN0aW9uIHRoZW4gdGhpcworCSAqIGZyYWdtZW50IGhhcyBhIGhlYWRlciBhbmQgc3RhcnRzIGEgbWVzc2FnZS4uIGNvcHkgaXRzIGhlYWRlcgorCSAqIGludG8gdGhlIGluYyBhbmQgc2F2ZSB0aGUgaW5jIHNvIHdlIGNhbiBoYW5nIHVwY29taW5nIGZyYWdtZW50cworCSAqIG9mZiBpdHMgbGlzdC4KKwkgKi8KKwlpZiAoaXdpbmMgPT0gTlVMTCkgeworCQlpd2luYyA9IHJlY3YtPnJfaXdpbmM7CisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCQlpYy0+aV9pd2luYyA9IGl3aW5jOworCisJCWhkciA9ICZpd2luYy0+aWlfaW5jLmlfaGRyOworCQltZW1jcHkoaGRyLCBpaGRyLCBzaXplb2YoKmhkcikpOworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gYmUzMl90b19jcHUoaGRyLT5oX2xlbik7CisKKwkJcmRzZGVidWcoImljICVwIGl3aW5jICVwIHJlbSAldSBmbGFnIDB4JXhcbiIsIGljLCBpd2luYywKKwkJCSBpYy0+aV9yZWN2X2RhdGFfcmVtLCBoZHItPmhfZmxhZ3MpOworCX0gZWxzZSB7CisJCWhkciA9ICZpd2luYy0+aWlfaW5jLmlfaGRyOworCQkvKiBXZSBjYW4ndCBqdXN0IHVzZSBtZW1jbXAgaGVyZTsgZnJhZ21lbnRzIG9mIGEKKwkJICogc2luZ2xlIG1lc3NhZ2UgbWF5IGNhcnJ5IGRpZmZlcmVudCBBQ0tzICovCisJCWlmIChoZHItPmhfc2VxdWVuY2UgIT0gaWhkci0+aF9zZXF1ZW5jZQorCQkgfHwgaGRyLT5oX2xlbiAhPSBpaGRyLT5oX2xlbgorCQkgfHwgaGRyLT5oX3Nwb3J0ICE9IGloZHItPmhfc3BvcnQKKwkJIHx8IGhkci0+aF9kcG9ydCAhPSBpaGRyLT5oX2Rwb3J0KSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLAorCQkJCSJmcmFnbWVudCBoZWFkZXIgbWlzbWF0Y2g7IGZvcmNpbmcgcmVjb25uZWN0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWxpc3RfYWRkX3RhaWwoJnJlY3YtPnJfZnJhZy0+Zl9pdGVtLCAmaXdpbmMtPmlpX2ZyYWdzKTsKKwlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJaWYgKGljLT5pX3JlY3ZfZGF0YV9yZW0gPiBSRFNfRlJBR19TSVpFKQorCQlpYy0+aV9yZWN2X2RhdGFfcmVtIC09IFJEU19GUkFHX1NJWkU7CisJZWxzZSB7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSAwOworCQlpYy0+aV9pd2luYyA9IE5VTEw7CisKKwkJaWYgKGl3aW5jLT5paV9pbmMuaV9oZHIuaF9mbGFncyA9PSBSRFNfRkxBR19DT05HX0JJVE1BUCkKKwkJCXJkc19pd19jb25nX3JlY3YoY29ubiwgaXdpbmMpOworCQllbHNlIHsKKwkJCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfZmFkZHIsIGNvbm4tPmNfbGFkZHIsCisJCQkJCSAgJml3aW5jLT5paV9pbmMsIEdGUF9BVE9NSUMsCisJCQkJCSAgS01fU09GVElSUTApOworCQkJc3RhdGUtPmFja19uZXh0ID0gYmU2NF90b19jcHUoaGRyLT5oX3NlcXVlbmNlKTsKKwkJCXN0YXRlLT5hY2tfbmV4dF92YWxpZCA9IDE7CisJCX0KKworCQkvKiBFdmFsdWF0ZSB0aGUgQUNLX1JFUVVJUkVEIGZsYWcgKmFmdGVyKiB3ZSByZWNlaXZlZAorCQkgKiB0aGUgY29tcGxldGUgZnJhbWUsIGFuZCBhZnRlciBidW1waW5nIHRoZSBuZXh0X3J4CisJCSAqIHNlcXVlbmNlLiAqLworCQlpZiAoaGRyLT5oX2ZsYWdzICYgUkRTX0ZMQUdfQUNLX1JFUVVJUkVEKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9hY2tfcmVxdWlyZWQpOworCQkJc3RhdGUtPmFja19yZXF1aXJlZCA9IDE7CisJCX0KKworCQlyZHNfaW5jX3B1dCgmaXdpbmMtPmlpX2luYyk7CisJfQorfQorCisvKgorICogUGx1Y2tpbmcgdGhlIG9sZGVzdCBlbnRyeSBmcm9tIHRoZSByaW5nIGNhbiBiZSBkb25lIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgdGhyZWFkIHJlZmlsbGluZyB0aGUgcmluZy4gIEVhY2ggcmluZyBvcGVyYXRpb24gaXMgcHJvdGVjdGVkIGJ5CisgKiBzcGlubG9ja3MgYW5kIHRoZSB0cmFuc2llbnQgc3RhdGUgb2YgcmVmaWxsaW5nIGRvZXNuJ3QgY2hhbmdlIHRoZQorICogcmVjb3JkaW5nIG9mIHdoaWNoIGVudHJ5IGlzIG9sZGVzdC4KKyAqCisgKiBUaGlzIHJlbGllcyBvbiBJQiBvbmx5IGNhbGxpbmcgb25lIGNxIGNvbXBfaGFuZGxlciBmb3IgZWFjaCBjcSBzbyB0aGF0CisgKiB0aGVyZSB3aWxsIG9ubHkgYmUgb25lIGNhbGxlciBvZiByZHNfcmVjdl9pbmNvbWluZygpIHBlciBSRFMgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSBzdGF0ZSA9IHsgMCwgfTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKworCXJkc2RlYnVnKCJjb25uICVwIGNxICVwXG4iLCBjb25uLCBjcSk7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfY3FfY2FsbCk7CisKKwlpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9TT0xJQ0lURUQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NxX2V2ZW50KTsKKworCQlyZWN2ID0gJmljLT5pX3JlY3ZzW3Jkc19pd19yaW5nX29sZGVzdCgmaWMtPmlfcmVjdl9yaW5nKV07CisKKwkJcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisKKwkJLyoKKwkJICogQWxzbyBwcm9jZXNzIHJlY3ZzIGluIGNvbm5lY3Rpbmcgc3RhdGUgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZQorCQkgKiB0byBnZXQgYSByZWN2IGNvbXBsZXRpb24gX2JlZm9yZV8gdGhlIHJkbWFjbSBFU1RBQkxJU0hFRAorCQkgKiBldmVudCBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlpZiAocmRzX2Nvbm5fdXAoY29ubikgfHwgcmRzX2Nvbm5fY29ubmVjdGluZyhjb25uKSkgeworCQkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJCWlmICh3Yy5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykgeworCQkJCXJkc19pd19wcm9jZXNzX3JlY3YoY29ubiwgcmVjdiwgd2MuYnl0ZV9sZW4sICZzdGF0ZSk7CisJCQl9IGVsc2UgeworCQkJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZWN2IGNvbXBsZXRpb24gb24gIgorCQkJCSAgICAgICAiJXBJNCBoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJCSAgICAgICB3Yy5zdGF0dXMpOworCQkJfQorCQl9CisKKwkJcmRzX2l3X3JpbmdfZnJlZSgmaWMtPmlfcmVjdl9yaW5nLCAxKTsKKwl9CisKKwlpZiAoc3RhdGUuYWNrX25leHRfdmFsaWQpCisJCXJkc19pd19zZXRfYWNrKGljLCBzdGF0ZS5hY2tfbmV4dCwgc3RhdGUuYWNrX3JlcXVpcmVkKTsKKwlpZiAoc3RhdGUuYWNrX3JlY3ZfdmFsaWQgJiYgc3RhdGUuYWNrX3JlY3YgPiBpYy0+aV9hY2tfcmVjdikgeworCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIHN0YXRlLmFja19yZWN2LCBOVUxMKTsKKwkJaWMtPmlfYWNrX3JlY3YgPSBzdGF0ZS5hY2tfcmVjdjsKKwl9CisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworCisJLyogSWYgd2UgZXZlciBlbmQgdXAgd2l0aCBhIHJlYWxseSBlbXB0eSByZWNlaXZlIHJpbmcsIHdlJ3JlCisJICogaW4gZGVlcCB0cm91YmxlLCBhcyB0aGUgc2VuZGVyIHdpbGwgZGVmaW5pdGVseSBzZWUgUk5SCisJICogdGltZW91dHMuICovCisJaWYgKHJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfcmluZ19lbXB0eSk7CisKKwkvKgorCSAqIElmIHRoZSByaW5nIGlzIHJ1bm5pbmcgbG93LCB0aGVuIHNjaGVkdWxlIHRoZSB0aHJlYWQgdG8gcmVmaWxsLgorCSAqLworCWlmIChyZHNfaXdfcmluZ19sb3coJmljLT5pX3JlY3ZfcmluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7Cit9CisKK2ludCByZHNfaXdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcFxuIiwgY29ubik7CisKKwkvKgorCSAqIElmIHdlIGdldCBhIHRlbXBvcmFyeSBwb3N0aW5nIGZhaWx1cmUgaW4gdGhpcyBjb250ZXh0IHRoZW4KKwkgKiB3ZSdyZSByZWFsbHkgbG93IGFuZCB3ZSB3YW50IHRoZSBjYWxsZXIgdG8gYmFjayBvZmYgZm9yIGEgYml0LgorCSAqLworCW11dGV4X2xvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCWlmIChyZHNfaXdfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAwKSkKKwkJcmV0ID0gLUVOT01FTTsKKwllbHNlCisJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9yZWZpbGxfZnJvbV90aHJlYWQpOworCW11dGV4X3VubG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisKKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pd19hdHRlbXB0X2FjayhpYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pbml0IHJkc19pd19yZWN2X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzaW5mbyBzaTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCS8qIERlZmF1bHQgdG8gMzAlIG9mIGFsbCBhdmFpbGFibGUgUkFNIGZvciByZWN2IG1lbW9yeSAqLworCXNpX21lbWluZm8oJnNpKTsKKwlyZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24gPSBzaS50b3RhbHJhbSAvIDMgKiBQQUdFX1NJWkUgLyBSRFNfRlJBR19TSVpFOworCisJcmRzX2l3X2luY29taW5nX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2l3X2luY29taW5nIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaXdfaW5jb21pbmcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2l3X2luY29taW5nX3NsYWIgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaXdfZnJhZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pd19mcmFnIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfcGFnZV9mcmFnKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pd19mcmFnX3NsYWIgPT0gTlVMTCkKKwkJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19pbmNvbWluZ19zbGFiKTsKKwllbHNlCisJCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfcmVjdl9leGl0KHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19pbmNvbWluZ19zbGFiKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2l3X2ZyYWdfc2xhYik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JpbmcuYyBiL25ldC9yZHMvaXdfcmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjJkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JpbmcuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCisvKgorICogTG9ja2luZyBmb3IgSUIgcmluZ3MuCisgKiBXZSBhc3N1bWUgdGhhdCBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm90ZWN0ZWQgYnkgYSBtdXRleAorICogaW4gdGhlIGNhbGxlciAodGhpcyBpcyBhIHZhbGlkIGFzc3VtcHRpb24gZm9yIHRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRhdGlvbikuCisgKgorICogRnJlZWluZyBhbHdheXMgaGFwcGVucyBpbiBhbiBpbnRlcnJ1cHQsIGFuZCBoZW5jZSBvbmx5CisgKiByYWNlcyB3aXRoIGFsbG9jYXRpb25zLCBidXQgbm90IHdpdGggb3RoZXIgZnJlZSgpcy4KKyAqCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGlzIHRoYXQKKyAqIHRoZSBhbGxvYyBjb2RlIGhhcyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmcmVlIGVudHJpZXMuCisgKiBUbyB0aGlzIGVuZCwgd2UgbWFpbnRhaW4gdHdvIGNvdW50ZXJzOyBhbiBhbGxvY2F0aW9uIGNvdW50ZXIKKyAqIGFuZCBhIGZyZWUgY291bnRlci4gQm90aCBhcmUgYWxsb3dlZCB0byBydW4gZnJlZWx5LCBhbmQgd3JhcAorICogYXJvdW5kLgorICogVGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaXMgYWx3YXlzIChhbGxvY19jdHIgLSBmcmVlX2N0cikgJSBOUi4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWtlcyBmcmVlX2N0ciBhdG9taWMuIFdoZW4gdGhlCisgKiBjYWxsZXIgZmluZHMgYW4gYWxsb2NhdGlvbiBmYWlscywgaXQgc2hvdWxkIHNldCBhbiAiYWxsb2MgZmFpbCIKKyAqIGJpdCBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uIFRoZSAiYWxsb2MgZmFpbCIgYml0IGVzc2VudGlhbGx5IHRlbGxzCisgKiB0aGUgQ1EgY29tcGxldGlvbiBoYW5kbGVycyB0byB3YWtlIGl0IHVwIGFmdGVyIGZyZWVpbmcgc29tZQorICogbW9yZSBlbnRyaWVzLgorICovCisKKy8qCisgKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBzaHV0ZG93bi4KKyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2l3X3JpbmdfZW1wdHlfd2FpdCk7CisKK3ZvaWQgcmRzX2l3X3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCW1lbXNldChyaW5nLCAwLCBzaXplb2YoKnJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7CisJcmRzZGVidWcoInJpbmcgJXAgbnIgJXVcbiIsIHJpbmcsIHJpbmctPndfbnIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX3Jkc19pd19yaW5nX3VzZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJdTMyIGRpZmY7CisKKwkvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBoYXMgYXQgbGVhc3QgYXMgbWFueSBiaXRzIGFzIHUzMiAqLworCWRpZmYgPSByaW5nLT53X2FsbG9jX2N0ciAtICh1MzIpIGF0b21pY19yZWFkKCZyaW5nLT53X2ZyZWVfY3RyKTsKKwlCVUdfT04oZGlmZiA+IHJpbmctPndfbnIpOworCisJcmV0dXJuIGRpZmY7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJLyogV2Ugb25seSBldmVyIGdldCBjYWxsZWQgZnJvbSB0aGUgY29ubmVjdGlvbiBzZXR1cCBjb2RlLAorCSAqIHByaW9yIHRvIGNyZWF0aW5nIHRoZSBRUC4gKi8KKwlCVUdfT04oX19yZHNfaXdfcmluZ191c2VkKHJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpID09IDA7Cit9CisKK3UzMiByZHNfaXdfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpCit7CisJdTMyIHJldCA9IDAsIGF2YWlsOworCisJYXZhaWwgPSByaW5nLT53X25yIC0gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpOworCisJcmRzZGVidWcoInJpbmcgJXAgdmFsICV1IG5leHQgJXUgZnJlZSAldVxuIiwgcmluZywgdmFsLAorCQkgcmluZy0+d19hbGxvY19wdHIsIGF2YWlsKTsKKworCWlmICh2YWwgJiYgYXZhaWwpIHsKKwkJcmV0ID0gbWluKHZhbCwgYXZhaWwpOworCQkqcG9zID0gcmluZy0+d19hbGxvY19wdHI7CisKKwkJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgKyByZXQpICUgcmluZy0+d19ucjsKKwkJcmluZy0+d19hbGxvY19jdHIgKz0gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2ZyZWVfcHRyID0gKHJpbmctPndfZnJlZV9wdHIgKyB2YWwpICUgcmluZy0+d19ucjsKKwlhdG9taWNfYWRkKHZhbCwgJnJpbmctPndfZnJlZV9jdHIpOworCisJaWYgKF9fcmRzX2l3X3JpbmdfZW1wdHkocmluZykgJiYKKwkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX2l3X3JpbmdfZW1wdHlfd2FpdCkpCisJCXdha2VfdXAoJnJkc19pd19yaW5nX2VtcHR5X3dhaXQpOworfQorCit2b2lkIHJkc19pd19yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgLSB2YWwpICUgcmluZy0+d19ucjsKKwlyaW5nLT53X2FsbG9jX2N0ciAtPSB2YWw7Cit9CisKK2ludCByZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ19lbXB0eShyaW5nKTsKK30KKworaW50IHJkc19pd19yaW5nX2xvdyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpIDw9IChyaW5nLT53X25yID4+IDIpOworfQorCisKKy8qCisgKiByZXR1cm5zIHRoZSBvbGRlc3QgYWxsb2NlZCByaW5nIGVudHJ5LiAgVGhpcyB3aWxsIGJlIHRoZSBuZXh0IG9uZQorICogZnJlZWQuICBUaGlzIGNhbid0IGJlIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm9uZSBhbGxvY2F0ZWQuCisgKi8KK3UzMiByZHNfaXdfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIHJpbmctPndfZnJlZV9wdHI7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHdvcmsgcmVxdWVzdHMuCisgKi8KKwordTMyIHJkc19pd19yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KQoreworCXUzMiByZXQ7CisKKwlpZiAob2xkZXN0IDw9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQpCisJCXJldCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgLSBvbGRlc3QgKyAxOworCWVsc2UKKwkJcmV0ID0gcmluZy0+d19uciAtIG9sZGVzdCArICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgKyAxOworCisJcmRzZGVidWcoInJpbmcgJXAgcmV0ICV1IHdyX2lkICV1IG9sZGVzdCAldVxuIiwgcmluZywgcmV0LAorCQkgd3JfaWQsIG9sZGVzdCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkZDM4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfc2VuZC5jCkBAIC0wLDAgKzEsOTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkJICAgICAgaW50IHdjX3N0YXR1cykKK3sKKwlpbnQgbm90aWZ5X3N0YXR1czsKKworCXN3aXRjaCAod2Nfc3RhdHVzKSB7CisJY2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6CisJCXJldHVybjsKKworCWNhc2UgSUJfV0NfU1VDQ0VTUzoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJCWJyZWFrOworCisJY2FzZSBJQl9XQ19SRU1fQUNDRVNTX0VSUjoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1JFTU9URV9FUlJPUjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfT1RIRVJfRVJST1I7CisJCWJyZWFrOworCX0KKwlyZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHJtLCBub3RpZnlfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJaWYgKG9wLT5yX21hcHBlZCkgeworCQlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywKKwkJCW9wLT5yX3dyaXRlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCW9wLT5yX21hcHBlZCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF91bm1hcF9ybShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJICBzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCwKKwkJCSAgaW50IHdjX3N0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gc2VuZC0+c19ybTsKKworCXJkc2RlYnVnKCJpYyAlcCBzZW5kICVwIHJtICVwXG4iLCBpYywgc2VuZCwgcm0pOworCisJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCSAgICAgcm0tPm1fc2csIHJtLT5tX25lbnRzLAorCQkgICAgIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkgeworCQlyZHNfaXdfc2VuZF91bm1hcF9yZG1hKGljLCBybS0+bV9yZG1hX29wKTsKKworCQkvKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgYSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBvbiB0aGlzCisJCSAqIG1lc3NhZ2UsIHdlIGNhbiBpbXBsZW1lbnQgdGhyZWUgZGlmZmVyZW50IHNlbWFudGljczoKKwkJICogIDEuCU5vdGlmeSB3aGVuIHdlIHJlY2VpdmVkIHRoZSBBQ0sgb24gdGhlIFJEUyBtZXNzYWdlCisJCSAqCXRoYXQgd2FzIHF1ZXVlZCB3aXRoIHRoZSBSRE1BLiBUaGlzIHByb3ZpZGVzIHJlbGlhYmxlCisJCSAqCW5vdGlmaWNhdGlvbiBvZiBSRE1BIHN0YXR1cyBhdCB0aGUgZXhwZW5zZSBvZiBhIG9uZS13YXkKKwkJICoJcGFja2V0IGRlbGF5LgorCQkgKiAgMi4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgUkRNQSBvcGVyYXRpb24uCisJCSAqICAzLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBhY2NvbXBhbnlpbmcgUkRTIG1lc3NhZ2VzLgorCQkgKiBIZXJlLCB3ZSBpbXBsZW1lbnQgYXBwcm9hY2ggIzMuIFRvIGltcGxlbWVudCBhcHByb2FjaCAjMiwKKwkJICogY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGZyb20gdGhlIGNxX2hhbmRsZXIuIFRvIGltcGxlbWVudCAjMSwKKwkJICogZG9uJ3QgY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGF0IGFsbCwgYW5kIGZhbGwgYmFjayB0byB0aGUgbm90aWZ5CisJCSAqIGhhbmRsaW5nIGluIHRoZSBBQ0sgcHJvY2Vzc2luZyBjb2RlLgorCQkgKgorCQkgKiBOb3RlOiBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzeW5jIGFueSBSRE1BIGJ1ZmZlcnMgdXNpbmcKKwkJICogaWJfZG1hX3N5bmNfc2dfZm9yX2NwdSAtIHRoZSBjb21wbGV0aW9uIGZvciB0aGUgUkRNQQorCQkgKiBvcGVyYXRpb24gaXRzZWxmIHVubWFwcGVkIHRoZSBSRE1BIGJ1ZmZlcnMsIHdoaWNoIHRha2VzIGNhcmUKKwkJICogb2Ygc3luY2hpbmcuCisJCSAqLworCQlyZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Y19zdGF0dXMpOworCisJCWlmIChybS0+bV9yZG1hX29wLT5yX3dyaXRlKQorCQkJcmRzX3N0YXRzX2FkZChzX3NlbmRfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJCWVsc2UKKwkJCXJkc19zdGF0c19hZGQoc19yZWN2X3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCX0KKworCS8qIElmIGFueW9uZSB3YWl0ZWQgZm9yIHRoaXMgbWVzc2FnZSB0byBnZXQgZmx1c2hlZCBvdXQsIHdha2UKKwkgKiB0aGVtIHVwIG5vdyAqLworCXJkc19tZXNzYWdlX3VubWFwcGVkKHJtKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJc2VuZC0+c19ybSA9IE5VTEw7Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXNlbmQtPnNfcm0gPSBOVUxMOworCQlzZW5kLT5zX29wID0gTlVMTDsKKwkJc2VuZC0+c19tYXBwaW5nID0gTlVMTDsKKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCQlzZW5kLT5zX3dyLndyX2lkID0gaTsKKwkJc2VuZC0+c193ci5zZ19saXN0ID0gc2VuZC0+c19zZ2U7CisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c193ci5leC5pbW1fZGF0YSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZW5kLT5zX21yID0gaWJfYWxsb2NfZmFzdF9yZWdfbXIoaWMtPmlfcGQsIGZhc3RyZWdfbWVzc2FnZV9zaXplKTsKKwkJaWYgKElTX0VSUihzZW5kLT5zX21yKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19tciBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlzZW5kLT5zX3BhZ2VfbGlzdCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCgKKwkJCWljLT5pX2NtX2lkLT5kZXZpY2UsIGZhc3RyZWdfbWVzc2FnZV9zaXplKTsKKwkJaWYgKElTX0VSUihzZW5kLT5zX3BhZ2VfbGlzdCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0IGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfaXdfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJQlVHX09OKCFzZW5kLT5zX21yKTsKKwkJaWJfZGVyZWdfbXIoc2VuZC0+c19tcik7CisJCUJVR19PTighc2VuZC0+c19wYWdlX2xpc3QpOworCQlpYl9mcmVlX2Zhc3RfcmVnX3BhZ2VfbGlzdChzZW5kLT5zX3BhZ2VfbGlzdCk7CisJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSAweGRlYWQpCisJCQljb250aW51ZTsKKwkJaWYgKHNlbmQtPnNfcm0pCisJCQlyZHNfaXdfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgSUJfV0NfV1JfRkxVU0hfRVJSKTsKKwkJaWYgKHNlbmQtPnNfb3ApCisJCQlyZHNfaXdfc2VuZF91bm1hcF9yZG1hKGljLCBzZW5kLT5zX29wKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgX29sZGVzdC9fZnJlZSByaW5nIG9wZXJhdGlvbnMgaGVyZSByYWNlIGNsZWFubHkgd2l0aCB0aGUgYWxsb2MvdW5hbGxvYworICogb3BlcmF0aW9ucyBwZXJmb3JtZWQgaW4gdGhlIHNlbmQgcGF0aC4gIEFzIHRoZSBzZW5kZXIgYWxsb2NzIGFuZCBwb3RlbnRpYWxseQorICogdW5hbGxvY3MgdGhlIG5leHQgZnJlZSBlbnRyeSBpbiB0aGUgcmluZyBpdCBkb2Vzbid0IGFsdGVyIHdoaWNoIGlzCisgKiB0aGUgbmV4dCB0byBiZSBmcmVlZCwgd2hpY2ggaXMgd2hhdCB0aGlzIGlzIGNvbmNlcm5lZCB3aXRoLgorICovCit2b2lkIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBjb21wbGV0ZWQ7CisJdTMyIG9sZGVzdDsKKwl1MzIgaTsKKwlpbnQgcmV0OworCisJcmRzZGVidWcoImNxICVwIGNvbm4gJXBcbiIsIGNxLCBjb25uKTsKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3FfY2FsbCk7CisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KQorCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3FfZXZlbnQpOworCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJXQyBFcnJvcjogIHN0YXR1cyA9ICVkIG9wY29kZSA9ICVkXG4iLCB3Yy5zdGF0dXMsIHdjLm9wY29kZSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3Yy5vcGNvZGUgPT0gSUJfV0NfTE9DQUxfSU5WICYmIHdjLndyX2lkID09IFJEU19JV19MT0NBTF9JTlZfV1JfSUQpIHsKKwkJCWljLT5pX2Zhc3RyZWdfcG9zdGVkID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdjLm9wY29kZSA9PSBJQl9XQ19GQVNUX1JFR19NUiAmJiB3Yy53cl9pZCA9PSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQpIHsKKwkJCWljLT5pX2Zhc3RyZWdfcG9zdGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdjLndyX2lkID09IFJEU19JV19BQ0tfV1JfSUQpIHsKKwkJCWlmIChpYy0+aV9hY2tfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3N0YWxsZWQpOworCQkJcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKGljKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkZXN0ID0gcmRzX2l3X3Jpbmdfb2xkZXN0KCZpYy0+aV9zZW5kX3JpbmcpOworCisJCWNvbXBsZXRlZCA9IHJkc19pd19yaW5nX2NvbXBsZXRlZCgmaWMtPmlfc2VuZF9yaW5nLCB3Yy53cl9pZCwgb2xkZXN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29tcGxldGVkOyBpKyspIHsKKwkJCXNlbmQgPSAmaWMtPmlfc2VuZHNbb2xkZXN0XTsKKworCQkJLyogSW4gdGhlIGVycm9yIGNhc2UsIHdjLm9wY29kZSBzb21ldGltZXMgY29udGFpbnMgZ2FyYmFnZSAqLworCQkJc3dpdGNoIChzZW5kLT5zX3dyLm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9TRU5EOgorCQkJCWlmIChzZW5kLT5zX3JtKQorCQkJCQlyZHNfaXdfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgd2Muc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfRkFTVF9SRUdfTVI6CisJCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOgorCQkJCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSAtIHRoZSBTRyBsaXN0IHdpbGwgYmUgdW5tYXBwZWQKKwkJCQkgKiB3aGVuIHRoZSBTRU5EIGNvbXBsZXRlcy4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCQkiUkRTL0lXOiAlczogdW5leHBlY3RlZCBvcGNvZGUgMHgleCBpbiBXUiFcbiIsCisJCQkJCQlfX2Z1bmNfXywgc2VuZC0+c193ci5vcGNvZGUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IDB4ZGVhZDsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlpZiAoc2VuZC0+c19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc3RhbGxlZCk7CisKKwkJCS8qIElmIGEgUkRNQSBvcGVyYXRpb24gcHJvZHVjZWQgYW4gZXJyb3IsIHNpZ25hbCB0aGlzIHJpZ2h0CisJCQkgKiBhd2F5LiBJZiB3ZSBkb24ndCwgdGhlIHN1YnNlcXVlbnQgU0VORCB0aGF0IGdvZXMgd2l0aCB0aGlzCisJCQkgKiBSRE1BIHdpbGwgYmUgY2FuY2VsZWQgd2l0aCBFUlJfV0ZMVVNILCBhbmQgdGhlIGFwcGxpY2F0aW9uCisJCQkgKiBuZXZlciBsZWFybiB0aGF0IHRoZSBSRE1BIGZhaWxlZC4gKi8KKwkJCWlmICh1bmxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfUkVNX0FDQ0VTU19FUlIgJiYgc2VuZC0+c19vcCkpIHsKKwkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJCQkJcm0gPSByZHNfc2VuZF9nZXRfbWVzc2FnZShjb25uLCBzZW5kLT5zX29wKTsKKwkJCQlpZiAocm0pCisJCQkJCXJkc19pd19zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjLnN0YXR1cyk7CisJCQl9CisKKwkJCW9sZGVzdCA9IChvbGRlc3QgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCQl9CisKKwkJcmRzX2l3X3JpbmdfZnJlZSgmaWMtPmlfc2VuZF9yaW5nLCBjb21wbGV0ZWQpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpCisJCSB8fCB0ZXN0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTICYmIHJkc19jb25uX3VwKGNvbm4pKSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLAorCQkJCSJzZW5kIGNvbXBsZXRpb24gb24gJXBJNCAiCisJCQkJImhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCQkmY29ubi0+Y19mYWRkciwgd2Muc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgY3JlZGl0cyB3aGVuIHNlbmRpbmcKKyAqIG1lc3NhZ2VzLgorICoKKyAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CisgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KKyAqCisgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKKyAqCXBvc3RlZCB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4gVGhpcyB2YWx1ZSBpcyB0cmFuc2ZlcnJlZAorICoJdG8gdGhlIHBlZXIgYXMgYSAiY3JlZGl0IHVwZGF0ZSIgaW4gYSBSRFMgaGVhZGVyIGZpZWxkLgorICoJRXZlcnkgdGltZSB3ZSB0cmFuc21pdCBjcmVkaXRzIHRvIHRoZSBwZWVyLCB3ZSBzdWJ0cmFjdAorICoJdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBjcmVkaXRzIGZyb20gdGhpcyBjb3VudGVyLgorICoKKyAqIEl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgYm90aCBzaWRlcyBoYXZlCisgKiBleGhhdXN0ZWQgdGhlaXIgc2VuZCBjcmVkaXRzLCBhbmQgYXJlIHVuYWJsZSB0byBzZW5kIG5ldyBjcmVkaXRzCisgKiB0byB0aGUgcGVlci4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHJlcXVpcmluZyB0aGF0IHdlIHNlbmQgYXQgbGVhc3QKKyAqIG9uZSBjcmVkaXQgdXBkYXRlIHRvIHRoZSBwZWVyIGJlZm9yZSBleGhhdXN0aW5nIG91ciBjcmVkaXRzLgorICogV2hlbiBuZXcgY3JlZGl0cyBhcnJpdmUsIHdlIHN1YnRyYWN0IG9uZSBjcmVkaXQgdGhhdCBpcyB3aXRoaGVsZAorICogdW50aWwgd2UndmUgcG9zdGVkIG5ldyBidWZmZXJzIGFuZCBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlc2UKKyAqIGNyZWRpdHMgKHNlZSByZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyBiZWxvdykuCisgKgorICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0CisgKiBncmFicyBjX3NlbmRfbG9jayB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLgorICogSG93ZXZlciwgdGhlIEFDSyBzZW5kaW5nIGNvZGUgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbiByYWNlIHdpdGgKKyAqIG1lc3NhZ2UgU0VORHMuCisgKgorICogSW4gdGhlIHNlbmQgcGF0aCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGZvciBzZW5kIGNyZWRpdHMKKyAqIGFuZCB0aGUgY291bnRlciBvZiBwb3N0ZWQgYnVmZmVycyBhdG9taWNhbGx5IC0gd2hlbiB3ZSB1c2UgdGhlCisgKiBsYXN0IGF2YWlsYWJsZSBjcmVkaXQsIHdlIGNhbm5vdCBhbGxvdyBhbm90aGVyIHRocmVhZCB0byByYWNlIHVzCisgKiBhbmQgZ3JhYiB0aGUgcG9zdGVkIGNyZWRpdHMgY291bnRlci4gIEhlbmNlLCB3ZSBoYXZlIHRvIHVzZSBhCisgKiBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcmVkaXQgY291bnRlciwgb3IgdXNlIGF0b21pY3MuCisgKgorICogU3BpbmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGFyZSBiYWQsCisgKiBiZWNhdXNlIHRoZXkgY3JlYXRlIHVubmVjZXNzYXJ5IGRlbGF5cy4gQW4gZWFybHkgaW1wbGVtZW50YXRpb24KKyAqIHVzaW5nIGEgc3BpbmxvY2sgc2hvd2VkIGEgNSUgZGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBhdCBzb21lCisgKiBsb2Fkcy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBzcGlubG9ja3MgY29tcGxldGVseSwgcHV0dGluZyBib3RoCisgKiBjb3VudGVycyBpbnRvIGEgc2luZ2xlIGF0b21pYywgYW5kIHVwZGF0aW5nIHRoYXQgYXRvbWljIHVzaW5nCisgKiBhdG9taWNfYWRkIChpbiB0aGUgcmVjZWl2ZSBwYXRoLCB3aGVuIHJlY2VpdmluZyBmcmVzaCBjcmVkaXRzKSwKKyAqIGFuZCB1c2luZyBhdG9taWNfY21weGNoZyB3aGVuIHVwZGF0aW5nIHRoZSB0d28gY291bnRlcnMuCisgKi8KK2ludCByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCSAgICAgdTMyIHdhbnRlZCwgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKQoreworCXVuc2lnbmVkIGludCBhdmFpbCwgcG9zdGVkLCBnb3QgPSAwLCBhZHZlcnRpc2U7CisJbG9uZyBvbGR2YWwsIG5ld3ZhbDsKKworCSphZHZfY3JlZGl0cyA9IDA7CisJaWYgKCFpYy0+aV9mbG93Y3RsKQorCQlyZXR1cm4gd2FudGVkOworCit0cnlfYWdhaW46CisJYWR2ZXJ0aXNlID0gMDsKKwlvbGR2YWwgPSBuZXd2YWwgPSBhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cyk7CisJcG9zdGVkID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhvbGR2YWwpOworCWF2YWlsID0gSUJfR0VUX1NFTkRfQ1JFRElUUyhvbGR2YWwpOworCisJcmRzZGVidWcoInJkc19pd19zZW5kX2dyYWJfY3JlZGl0cygldSk6IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAorCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKKworCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCisJaWYgKGF2YWlsICYmICFwb3N0ZWQpCisJCWF2YWlsLS07CisKKwlpZiAoYXZhaWwgPCB3YW50ZWQpIHsKKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtPmlfY21faWQtPmNvbnRleHQ7CisKKwkJLyogT29wcywgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBjcmVkaXRzIGxlZnQhICovCisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlnb3QgPSBhdmFpbDsKKwl9IGVsc2UgeworCQkvKiBTb21ldGltZXMgeW91IGdldCB3aGF0IHlvdSB3YW50LCBsYWxhbGEuICovCisJCWdvdCA9IHdhbnRlZDsKKwl9CisJbmV3dmFsIC09IElCX1NFVF9TRU5EX0NSRURJVFMoZ290KTsKKworCS8qCisJICogSWYgbmVlZF9wb3N0ZWQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGNhbGxlciB3YW50cworCSAqIHRoZSBwb3N0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBzZW5kIGNyZWRpdHMgYXJlCisJICogYXZhaWxhYmxlLgorCSAqLworCWlmIChwb3N0ZWQgJiYgKGdvdCB8fCBuZWVkX3Bvc3RlZCkpIHsKKwkJYWR2ZXJ0aXNlID0gbWluX3QodW5zaWduZWQgaW50LCBwb3N0ZWQsIFJEU19NQVhfQURWX0NSRURJVCk7CisJCW5ld3ZhbCAtPSBJQl9TRVRfUE9TVF9DUkVESVRTKGFkdmVydGlzZSk7CisJfQorCisJLyogRmluYWxseSBiaWxsIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoYXRvbWljX2NtcHhjaGcoJmljLT5pX2NyZWRpdHMsIG9sZHZhbCwgbmV3dmFsKSAhPSBvbGR2YWwpCisJCWdvdG8gdHJ5X2FnYWluOworCisJKmFkdl9jcmVkaXRzID0gYWR2ZXJ0aXNlOworCXJldHVybiBnb3Q7Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChjcmVkaXRzID09IDApCisJCXJldHVybjsKKworCXJkc2RlYnVnKCJyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cygldSk6IGN1cnJlbnQ9JXUlc1xuIiwKKwkJCWNyZWRpdHMsCisJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCisJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOworCisJYXRvbWljX2FkZChJQl9TRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwlXQVJOX09OKElCX0dFVF9TRU5EX0NSRURJVFMoY3JlZGl0cykgPj0gMTYzODQpOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NyZWRpdF91cGRhdGVzKTsKK30KKwordm9pZCByZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHBvc3RlZCA9PSAwKQorCQlyZXR1cm47CisKKwlhdG9taWNfYWRkKElCX1NFVF9QT1NUX0NSRURJVFMocG9zdGVkKSwgJmljLT5pX2NyZWRpdHMpOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIHBlZXIgbm93LgorCSAqIElmIHdlIHdvdWxkIHNlbmQgYSBjcmVkaXQgdXBkYXRlIGZvciBldmVyeSBzaW5nbGUgYnVmZmVyIHdlCisJICogcG9zdCwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gQUNLIHN0b3JtIChBQ0sgYXJyaXZlcywKKwkgKiBjb25zdW1lcyBidWZmZXIsIHdlIHJlZmlsbCB0aGUgcmluZywgc2VuZCBBQ0sgdG8gcmVtb3RlCisJICogYWR2ZXJ0aXNpbmcgdGhlIG5ld2x5IHBvc3RlZCBidWZmZXIuLi4gYWQgaW5mKQorCSAqCisJICogUGVyZm9ybWFuY2UgcHJldHR5IG11Y2ggZGVwZW5kcyBvbiBob3cgb2Z0ZW4gd2Ugc2VuZAorCSAqIGNyZWRpdCB1cGRhdGVzIC0gdG9vIGZyZXF1ZW50IHVwZGF0ZXMgbWVhbiBsb3RzIG9mIEFDS3MuCisJICogVG9vIGluZnJlcXVlbnQgdXBkYXRlcywgYW5kIHRoZSBwZWVyIHdpbGwgcnVuIG91dCBvZgorCSAqIGNyZWRpdHMgYW5kIGhhcyB0byB0aHJvdHRsZS4KKwkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIDE2IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorCSAqLworCWlmIChJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSkgPj0gMTYpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmRzX2l3X3htaXRfcG9wdWxhdGVfd3Ioc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGxvbmcgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQlpbnQgc2VuZF9mbGFncykKK3sKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwlXQVJOX09OKHBvcyAhPSBzZW5kIC0gaWMtPmlfc2VuZHMpOworCisJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gc2VuZF9mbGFnczsKKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJc2VuZC0+c193ci5udW1fc2dlID0gMjsKKwlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwlzZW5kLT5zX29wID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gMCkgeworCQlzZ2UgPSByZHNfaXdfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gYnVmZmVyOworCQlzZ2UtPmxlbmd0aCA9IGxlbmd0aDsKKwkJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgc2VuZC0+c19zZ2UpOworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIHNlbmRpbmcgYSBwYWNrZXQgd2l0aCBubyBwYXlsb2FkLiBUaGVyZSBpcyBvbmx5CisJCSAqIG9uZSBTR0UgKi8KKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2dlID0gJnNlbmQtPnNfc2dlWzBdOworCX0KKworCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAocG9zICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7Cit9CisKKy8qCisgKiBUaGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gbWVzc2FnZS4gIFRoZSBmaXJzdCB0aW1lCisgKiB3ZSBzZWUgYSBtZXNzYWdlIHdlIG1hcCBpdHMgc2NhdHRlcmxpc3QgaW50byB0aGUgSUIgZGV2aWNlIHNvIHRoYXQKKyAqIHdlIGNhbiBwcm92aWRlIHRoYXQgbWFwcGVkIGFkZHJlc3MgdG8gdGhlIElCIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMKKyAqIGluIHRoZSBJQiB3b3JrIHJlcXVlc3RzLiAgV2UgdHJhbnNsYXRlIHRoZSBzY2F0dGVybGlzdCBpbnRvIGEgc2VyaWVzCisgKiBvZiB3b3JrIHJlcXVlc3RzIHRoYXQgZnJhZ21lbnQgdGhlIG1lc3NhZ2UuICBUaGVzZSB3b3JrIHJlcXVlc3RzIGNvbXBsZXRlCisgKiBpbiBvcmRlciBzbyB3ZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyCisgKiBvbmNlIHdlIHNlbmQgdGhlIGZpbmFsIGZyYWdtZW50LgorICoKKyAqIFRoZSBSRFMgY29yZSB1c2VzIHRoZSBjX3NlbmRfbG9jayB0byBvbmx5IGVudGVyIHRoaXMgZnVuY3Rpb24gb25jZQorICogcGVyIGNvbm5lY3Rpb24uICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgdHggcmluZyBhbGxvYy91bmFsbG9jIHBhaXJzCisgKiBkb24ndCBnZXQgb3V0IG9mIHN5bmMgYW5kIGNvbmZ1c2UgdGhlIHJpbmcuCisgKi8KK2ludCByZHNfaXdfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXUzMiBwb3M7CisJdTMyIGk7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGNyZWRpdF9hbGxvYzsKKwl1MzIgcG9zdGVkOworCXUzMiBhZHZfY3JlZGl0cyA9IDA7CisJaW50IHNlbmRfZmxhZ3MgPSAwOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IGZsb3dfY29udHJvbGxlZCA9IDA7CisKKwlCVUdfT04ob2ZmICUgUkRTX0ZSQUdfU0laRSk7CisJQlVHX09OKGhkcl9vZmYgIT0gMCAmJiBoZHJfb2ZmICE9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJLyogRmFzdHJlZyBzdXBwb3J0ICovCisJaWYgKHJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpCisJICYmICFpYy0+aV9mYXN0cmVnX3Bvc3RlZCkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRSB3ZSBtYXkgb3ZlcmFsbG9jYXRlIGhlcmUgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKQorCQlpID0gMTsKKwllbHNlCisJCWkgPSBjZWlsKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbiksIFJEU19GUkFHX1NJWkUpOworCisJd29ya19hbGxvYyA9IHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRfYWxsb2MgPSB3b3JrX2FsbG9jOworCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCWNyZWRpdF9hbGxvYyA9IHJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgd29ya19hbGxvYywgJnBvc3RlZCwgMCk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJaWYgKGNyZWRpdF9hbGxvYyA8IHdvcmtfYWxsb2MpIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGNyZWRpdF9hbGxvYyk7CisJCQl3b3JrX2FsbG9jID0gY3JlZGl0X2FsbG9jOworCQkJZmxvd19jb250cm9sbGVkKys7CisJCX0KKwkJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF90aHJvdHRsZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKGljLT5pX3JtID09IE5VTEwpIHsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyZHNfaXdfeG1pdCBwcmVwIG1zZyBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCksCisJCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSk7CisJCSAgICovCisJCWlmIChybS0+bV9uZW50cykgeworCQkJcm0tPm1fY291bnQgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJIHJtLT5tX3NnLCBybS0+bV9uZW50cywgRE1BX1RPX0RFVklDRSk7CisJCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBybSAlcDogJWRcbiIsIGljLCBybSwgcm0tPm1fY291bnQpOworCQkJaWYgKHJtLT5tX2NvdW50ID09IDApIHsKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlybS0+bV9jb3VudCA9IDA7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlpYy0+aV9ybSA9IHJtOworCisJCS8qIEZpbmFsaXplIHRoZSBoZWFkZXIgKi8KKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfQUNLX1JFUVVJUkVEOworCQlpZiAodGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfUkVUUkFOU01JVFRFRDsKKworCQkvKiBJZiBpdCBoYXMgYSBSRE1BIG9wLCB0ZWxsIHRoZSBwZWVyIHdlIGRpZCBpdC4gVGhpcyBpcworCQkgKiB1c2VkIGJ5IHRoZSBwZWVyIHRvIHJlbGVhc2UgdXNlLW9uY2UgUkRNQSBNUnMuICovCisJCWlmIChybS0+bV9yZG1hX29wKSB7CisJCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSBleHRfaGRyOworCisJCQlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocm0tPm1fcmRtYV9vcC0+cl9rZXkpOworCQkJcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlSRFNfRVhUSERSX1JETUEsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworCQl9CisJCWlmIChybS0+bV9yZG1hX2Nvb2tpZSkgeworCQkJcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocm0tPm1fcmRtYV9jb29raWUpKTsKKwkJfQorCisJCS8qIE5vdGUgLSByZHNfaXdfcGlnZ3liX2FjayBjbGVhcnMgdGhlIEFDS19SRVFVSVJFRCBiaXQsIHNvCisJCSAqIHdlIHNob3VsZCBub3QgZG8gdGhpcyB1bmxlc3Mgd2UgaGF2ZSBhIGNoYW5jZSBvZiBhdCBsZWFzdAorCQkgKiBzdGlja2luZyB0aGUgaGVhZGVyIGludG8gdGhlIHNlbmQgcmluZy4gV2hpY2ggaXMgd2h5IHdlCisJCSAqIHNob3VsZCBjYWxsIHJkc19pd19yaW5nX2FsbG9jIGZpcnN0LiAqLworCQlybS0+bV9pbmMuaV9oZHIuaF9hY2sgPSBjcHVfdG9fYmU2NChyZHNfaXdfcGlnZ3liX2FjayhpYykpOworCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKCZybS0+bV9pbmMuaV9oZHIpOworCisJCS8qCisJCSAqIFVwZGF0ZSBhZHZfY3JlZGl0cyBzaW5jZSB3ZSByZXNldCB0aGUgQUNLX1JFUVVJUkVEIGJpdC4KKwkJICovCisJCXJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgMCwgJnBvc3RlZCwgMSk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJQlVHX09OKGFkdl9jcmVkaXRzID4gMjU1KTsKKwl9IGVsc2UgaWYgKGljLT5pX3JtICE9IHJtKQorCQlCVUcoKTsKKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZybS0+bV9zZ1tzZ107CisJc2VudCA9IDA7CisJaSA9IDA7CisKKwkvKiBTb21ldGltZXMgeW91IHdhbnQgdG8gcHV0IGEgZmVuY2UgYmV0d2VlbiBhbiBSRE1BCisJICogUkVBRCBhbmQgdGhlIGZvbGxvd2luZyBTRU5ELgorCSAqIFdlIGNvdWxkIGVpdGhlciBkbyB0aGlzIGFsbCB0aGUgdGltZQorCSAqIG9yIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBSaWdodCBub3csIHdlIGxldAorCSAqIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2UuCisJICovCisJaWYgKHJtLT5tX3JkbWFfb3AgJiYgcm0tPm1fcmRtYV9vcC0+cl9mZW5jZSkKKwkJc2VuZF9mbGFncyA9IElCX1NFTkRfRkVOQ0U7CisKKwkvKgorCSAqIFdlIGNvdWxkIGJlIGNvcHlpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSB1bnVzZWQgdGFpbCBvZiB0aGUgcGFnZS4KKwkgKiBUaGF0IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhvc2UgcGFnZXMgbWlnaHQKKwkgKiBiZSBtYXBwZWQgdXNlcnNwYWNlIHBhZ2VzIG9yIHBhZ2UgY2FjaGUgcGFnZXMuICBTbyBpbnN0ZWFkIHdlIGFsd2F5cworCSAqIHVzZSBhIHNlY29uZCBzZ2UgYW5kIG91ciBsb25nLWxpdmVkIHJpbmcgb2YgbWFwcGVkIGhlYWRlcnMuICBXZSBzZW5kCisJICogdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkYXRhIHBheWxvYWQgY2FuIGJlIGFsaWduZWQgb24KKwkgKiB0aGUgcmVjZWl2ZXIuCisJICovCisKKwkvKiBoYW5kbGUgYSAwLWxlbiBtZXNzYWdlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkgeworCQlyZHNfaXdfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLCAwLCAwLCBzZW5kX2ZsYWdzKTsKKwkJZ290byBhZGRfaGVhZGVyOworCX0KKworCS8qIGlmIHRoZXJlJ3MgZGF0YSByZWZlcmVuY2UgaXQgd2l0aCBhIGNoYWluIG9mIHdvcmsgcmVxcyAqLworCWZvciAoOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZybS0+bV9zZ1tybS0+bV9jb3VudF07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKworCQlsZW4gPSBtaW4oUkRTX0ZSQUdfU0laRSwgaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpIC0gb2ZmKTsKKwkJcmRzX2l3X3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsIHNjYXQpICsgb2ZmLCBsZW4sCisJCQkJc2VuZF9mbGFncyk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lCisJCSAqIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyAtPSBsZW47CisJCWlmIChpYy0+aV91bnNpZ25hbGVkX2J5dGVzIDw9IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgc2lnbmFsIHRoZSBsYXN0IG9uZSBpZiB3ZSdyZSBzdG9wcGluZyBkdWUgdG8gZmxvdyBjb250cm9sLgorCQkgKi8KKwkJaWYgKGZsb3dfY29udHJvbGxlZCAmJiBpID09ICh3b3JrX2FsbG9jLTEpKQorCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkgJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlzZW50ICs9IGxlbjsKKwkJb2ZmICs9IGxlbjsKKwkJaWYgKG9mZiA9PSBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkpIHsKKwkJCXNjYXQrKzsKKwkJCW9mZiA9IDA7CisJCX0KKworYWRkX2hlYWRlcjoKKwkJLyogVGFjayBvbiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhLiBUaGUgaGVhZGVyIFNHRSBzaG91bGQgYWxyZWFkeQorCQkgKiBoYXZlIGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSByaWdodCBoZWFkZXIgYnVmZmVyLiAqLworCQltZW1jcHkoJmljLT5pX3NlbmRfaGRyc1twb3NdLCAmcm0tPm1faW5jLmlfaGRyLCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCQlpZiAoMCkgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZW5kIFdSIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KGhkci0+aF9kcG9ydCksCisJCQkJaGRyLT5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KGhkci0+aF9sZW4pKTsKKwkJfQorCQlpZiAoYWR2X2NyZWRpdHMpIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCS8qIGFkZCBjcmVkaXQgYW5kIHJlZG8gdGhlIGhlYWRlciBjaGVja3N1bSAqLworCQkJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCQkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCQkJYWR2X2NyZWRpdHMgPSAwOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NyZWRpdF91cGRhdGVzKTsKKwkJfQorCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisJCXByZXYgPSBzZW5kOworCisJCXBvcyA9IChwb3MgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCX0KKworCS8qIEFjY291bnQgdGhlIFJEUyBoZWFkZXIgaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBzZW50LCBidXQganVzdCBvbmNlLgorCSAqIFRoZSBjYWxsZXIgaGFzIG5vIGNvbmNlcHQgb2YgZnJhZ21lbnRhdGlvbi4gKi8KKwlpZiAoaGRyX29mZiA9PSAwKQorCQlzZW50ICs9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XSkgeworCQlwcmV2LT5zX3JtID0gaWMtPmlfcm07CisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBpIDwgY3JlZGl0X2FsbG9jKQorCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRfYWxsb2MgLSBpKTsKKworCS8qIFhYWCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZhaWxlZF93ciBhbmQgcGFydGlhbCBzZW5kcy4gKi8KKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJaWYgKHByZXYtPnNfcm0pIHsKKwkJCWljLT5pX3JtID0gcHJldi0+c19ybTsKKwkJCXByZXYtPnNfcm0gPSBOVUxMOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNlbnQ7CitvdXQ6CisJQlVHX09OKGFkdl9jcmVkaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfYnVpbGRfc2VuZF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kLCBpbnQgbmVudCwgaW50IGxlbiwgdTY0IHNnX2FkZHIpCit7CisJQlVHX09OKG5lbnQgPiBzZW5kLT5zX3BhZ2VfbGlzdC0+bWF4X3BhZ2VfbGlzdF9sZW4pOworCS8qCisJICogUGVyZm9ybSBhIFdSIGZvciB0aGUgZmFzdF9yZWdfbXIuIEVhY2ggaW5kaXZpZHVhbCBwYWdlCisJICogaW4gdGhlIHNnIGxpc3QgaXMgYWRkZWQgdG8gdGhlIGZhc3QgcmVnIHBhZ2UgbGlzdCBhbmQgcGxhY2VkCisJICogaW5zaWRlIHRoZSBmYXN0X3JlZ19tciBXUi4KKwkgKi8KKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX0ZBU1RfUkVHX01SOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gbGVuOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlbmQtPnNfbXItPnJrZXk7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBzZW5kLT5zX3BhZ2VfbGlzdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBuZW50OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IHJkc19pd2Rldi0+cGFnZV9zaGlmdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmFjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19SRU1PVEVfV1JJVEU7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gc2dfYWRkcjsKKworCWliX3VwZGF0ZV9mYXN0X3JlZ19rZXkoc2VuZC0+c19tciwgc2VuZC0+c19yZW1hcF9jb3VudCsrKTsKK30KKworaW50IHJkc19pd194bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1NjQgcmVtb3RlX2FkZHIgPSBvcC0+cl9yZW1vdGVfYWRkcjsKKwl1MzIgcG9zLCBmcl9wb3M7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGk7CisJdTMyIGo7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgbnVtX3NnZTsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKCFvcC0+cl9tYXBwZWQpIHsKKwkJb3AtPnJfY291bnQgPSBpYl9kbWFfbWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywgKG9wLT5yX3dyaXRlKSA/CisJCQkJCURNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBvcCAlcDogJWRcbiIsIGljLCBvcCwgb3AtPnJfY291bnQpOworCQlpZiAob3AtPnJfY291bnQgPT0gMCkgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJZ290byBvdXQ7CisJCX0KKworCQlvcC0+cl9tYXBwZWQgPSAxOworCX0KKworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJLyogQWxsb2Mgc3BhY2Ugb24gdGhlIHNlbmQgcXVldWUgZm9yIHRoZSBmYXN0cmVnICovCisJCXdvcmtfYWxsb2MgPSByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCAxLCAmZnJfcG9zKTsKKwkJaWYgKHdvcmtfYWxsb2MgIT0gMSkgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGtub3dpbmcgaG93IHRvIHJldHVybiBhIHBhcnRpYWwgcmRtYSByZWFkL3dyaXRlIHdlIGluc2lzdCB0aGF0IHRoZXJlCisJICogYmUgZW5vdWdoIHdvcmsgcmVxdWVzdHMgdG8gc2VuZCB0aGUgZW50aXJlIG1lc3NhZ2UuCisJICovCisJaSA9IGNlaWwob3AtPnJfY291bnQsIHJkc19pd2Rldi0+bWF4X3NnZSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgIT0gaSkgeworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJZmlyc3QgPSBwcmV2ID0gJmljLT5pX3NlbmRzW2ZyX3Bvc107CisJfSBlbHNlIHsKKwkJZmlyc3QgPSBzZW5kOworCQlwcmV2ID0gTlVMTDsKKwl9CisJc2NhdCA9ICZvcC0+cl9zZ1swXTsKKwlzZW50ID0gMDsKKwludW1fc2dlID0gb3AtPnJfY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGkrKykgeworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQl9CisKKwkJLyogVG8gYXZvaWQgdGhlIG5lZWQgdG8gaGF2ZSB0aGUgcGx1bWJpbmcgdG8gaW52YWxpZGF0ZSB0aGUgZmFzdHJlZ19tciB1c2VkCisJCSAqIGZvciBsb2NhbCBhY2Nlc3MgYWZ0ZXIgUkRTIGlzIGZpbmlzaGVkIHdpdGggaXQsIHVzaW5nCisJCSAqIElCX1dSX1JETUFfUkVBRF9XSVRIX0lOViB3aWxsIGludmFsaWRhdGUgaXQgYWZ0ZXIgdGhlIHJlYWQgaGFzIGNvbXBsZXRlZC4KKwkJICovCisJCWlmIChvcC0+cl93cml0ZSkKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfUkRNQV9XUklURTsKKwkJZWxzZQorCQkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY7CisKKwkJc2VuZC0+c193ci53ci5yZG1hLnJlbW90ZV9hZGRyID0gcmVtb3RlX2FkZHI7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5ya2V5ID0gb3AtPnJfa2V5OworCQlzZW5kLT5zX29wID0gb3A7CisKKwkJaWYgKG51bV9zZ2UgPiByZHNfaXdkZXYtPm1heF9zZ2UpIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IHJkc19pd2Rldi0+bWF4X3NnZTsKKwkJCW51bV9zZ2UgLT0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCQl9IGVsc2UKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IG51bV9zZ2U7CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCisJCWZvciAoaiA9IDA7IGogPCBzZW5kLT5zX3dyLm51bV9zZ2UgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBqKyspIHsKKwkJCWxlbiA9IGliX3NnX2RtYV9sZW4oaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisKKwkJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlYpCisJCQkJc2VuZC0+c19wYWdlX2xpc3QtPnBhZ2VfbGlzdFtqXSA9IGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJZWxzZSB7CisJCQkJc2VuZC0+c19zZ2Vbal0uYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJCXNlbmQtPnNfc2dlW2pdLmxlbmd0aCA9IGxlbjsKKwkJCQlzZW5kLT5zX3NnZVtqXS5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKwkJCX0KKworCQkJc2VudCArPSBsZW47CisJCQlyZHNkZWJ1ZygiaWMgJXAgc2VudCAlZCByZW1vdGVfYWRkciAlbGx1XG4iLCBpYywgc2VudCwgcmVtb3RlX2FkZHIpOworCQkJcmVtb3RlX2FkZHIgKz0gbGVuOworCisJCQlzY2F0Kys7CisJCX0KKworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJc2VuZC0+c19zZ2VbMF0uYWRkciA9IGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9hZGRyOworCQkJc2VuZC0+c19zZ2VbMF0ubGVuZ3RoID0gY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2J5dGVzOworCQkJc2VuZC0+c19zZ2VbMF0ubGtleSA9IGljLT5pX3NlbmRzW2ZyX3Bvc10uc19tci0+bGtleTsKKwkJfQorCisJCXJkc2RlYnVnKCJzZW5kICVwIHdyICVwIG51bV9zZ2UgJXUgbmV4dCAlcFxuIiwgc2VuZCwKKwkJCSZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJcHJldiA9IHNlbmQ7CisJCWlmICgrK3NlbmQgPT0gJmljLT5pX3NlbmRzW2ljLT5pX3NlbmRfcmluZy53X25yXSkKKwkJCXNlbmQgPSBpYy0+aV9zZW5kczsKKwl9CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XSkKKwkJZmlyc3QtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKworCS8qIE9uIGlXQVJQLCBsb2NhbCBtZW1vcnkgYWNjZXNzIGJ5IGEgcmVtb3RlIHN5c3RlbSAoaWUsIFJETUEgUmVhZCkgaXMgbm90CisJICogcmVjb21tZW5kZWQuICBQdXR0aW5nIHRoZSBsa2V5IG9uIHRoZSB3aXJlIGlzIGEgc2VjdXJpdHkgaG9sZSwgYXMgaXQgY2FuCisJICogYWxsb3cgZm9yIG1lbW9yeSBhY2Nlc3MgdG8gYWxsIG9mIG1lbW9yeSBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIFNvbWUKKwkgKiBhZGFwdGVycyBkbyBub3QgYWxsb3cgdXNpbmcgdGhlIGxrZXkgZm9yIHRoaXMgYXQgYWxsLiAgVG8gYnlwYXNzIHRoaXMgdXNlIGEKKwkgKiBmYXN0cmVnX21yIChvciBwb3NzaWJseSBhIGRtYV9tcikKKwkgKi8KKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCXJkc19pd19idWlsZF9zZW5kX2Zhc3RyZWcocmRzX2l3ZGV2LCBpYywgJmljLT5pX3NlbmRzW2ZyX3Bvc10sCisJCQlvcC0+cl9jb3VudCwgc2VudCwgY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2FkZHIpOworCQl3b3JrX2FsbG9jKys7CisJfQorCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IHJkbWEgaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBXZSBtYXkgaGF2ZSBhIHBlbmRpbmcgQUNLIG9yIHdpbmRvdyB1cGRhdGUgd2Ugd2VyZSB1bmFibGUKKwkgKiB0byBzZW5kIHByZXZpb3VzbHkgKGR1ZSB0byBmbG93IGNvbnRyb2wpLiBUcnkgYWdhaW4uICovCisJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc3RhdHMuYyBiL25ldC9yZHMvaXdfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M3ZThmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19zdGF0cy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19pd19zdGF0aXN0aWNzLCByZHNfaXdfc3RhdHMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGNoYXIgKnJkc19pd19zdGF0X25hbWVzW10gPSB7CisJIml3X2Nvbm5lY3RfcmFjZWQiLAorCSJpd19saXN0ZW5fY2xvc2VkX3N0YWxlIiwKKwkiaXdfdHhfY3FfY2FsbCIsCisJIml3X3R4X2NxX2V2ZW50IiwKKwkiaXdfdHhfcmluZ19mdWxsIiwKKwkiaXdfdHhfdGhyb3R0bGUiLAorCSJpd190eF9zZ19tYXBwaW5nX2ZhaWx1cmUiLAorCSJpd190eF9zdGFsbGVkIiwKKwkiaXdfdHhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpd19yeF9jcV9jYWxsIiwKKwkiaXdfcnhfY3FfZXZlbnQiLAorCSJpd19yeF9yaW5nX2VtcHR5IiwKKwkiaXdfcnhfcmVmaWxsX2Zyb21fY3EiLAorCSJpd19yeF9yZWZpbGxfZnJvbV90aHJlYWQiLAorCSJpd19yeF9hbGxvY19saW1pdCIsCisJIml3X3J4X2NyZWRpdF91cGRhdGVzIiwKKwkiaXdfYWNrX3NlbnQiLAorCSJpd19hY2tfc2VuZF9mYWlsdXJlIiwKKwkiaXdfYWNrX3NlbmRfZGVsYXllZCIsCisJIml3X2Fja19zZW5kX3BpZ2d5YmFja2VkIiwKKwkiaXdfYWNrX3JlY2VpdmVkIiwKKwkiaXdfcmRtYV9tcl9hbGxvYyIsCisJIml3X3JkbWFfbXJfZnJlZSIsCisJIml3X3JkbWFfbXJfdXNlZCIsCisJIml3X3JkbWFfbXJfcG9vbF9mbHVzaCIsCisJIml3X3JkbWFfbXJfcG9vbF93YWl0IiwKKwkiaXdfcmRtYV9tcl9wb29sX2RlcGxldGVkIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfaXdfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfaXdfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcykpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19pd19zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX2l3X3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcykpOworb3V0OgorCXJldHVybiBBUlJBWV9TSVpFKHJkc19pd19zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc3lzY3RsLmMgYi9uZXQvcmRzL2l3X3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTA2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3N5c2N0bC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19pd19zeXNjdGxfaGRyOworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IgPSBSRFNfSVdfREVGQVVMVF9TRU5EX1dSOwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyID0gUkRTX0lXX0RFRkFVTFRfUkVDVl9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gKDEyOCAqIDEwMjQgKiAxMDI0KSAvIFJEU19GUkFHX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF93cl9taW4gPSAxOworLyogaGFyZHdhcmUgd2lsbCBmYWlsIENRIGNyZWF0aW9uIGxvbmcgYmVmb3JlIHRoaXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3dyX21heCA9ICh1MzIpfjA7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzID0gMTY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMgPSAoMTYgPDwgMjApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGludCByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisKK2N0bF90YWJsZSByZHNfaXdfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9zZW5kX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dycywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X2FsbG9jYXRpb24iLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImZsb3dfY29udHJvbCIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCwKKwkJLm1heGxlbgkJPSBzaXplb2YocmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19pd19zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyAucHJvY25hbWUgPSAiaXciLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3ZvaWQgcmRzX2l3X3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19pd19zeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfaXdfc3lzY3RsX2hkcik7Cit9CisKK2ludCBfX2luaXQgcmRzX2l3X3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX2l3X3N5c2N0bF9oZHIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX2l3X3N5c2N0bF9wYXRoLCByZHNfaXdfc3lzY3RsX3RhYmxlKTsKKwlpZiAocmRzX2l3X3N5c2N0bF9oZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjE5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2xvb3AuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImxvb3AuaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyhsb29wX2Nvbm5zX2xvY2spOworc3RhdGljIExJU1RfSEVBRChsb29wX2Nvbm5zKTsKKworLyoKKyAqIFRoaXMgJ2xvb3BiYWNrJyB0cmFuc3BvcnQgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGZsb3dzIHRoYXQgb3JpZ2luYXRlCisgKiBhbmQgdGVybWluYXRlIG9uIHRoZSBzYW1lIG1hY2hpbmUuCisgKgorICogQ29ubmVjdGlvbiBidWlsZC11cCBub3RpY2VzIGlmIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHRob3VnaHQgb2YKKyAqIGFzIGEgbG9jYWwgYWRkcmVzcyBieSBhIHRyYW5zcG9ydC4gIEF0IHRoYXQgdGltZSBpdCBkZWNpZGVzIHRvIHVzZSB0aGUKKyAqIGxvb3BiYWNrIHRyYW5zcG9ydCBpbnN0ZWFkIG9mIHRoZSBib3VuZCB0cmFuc3BvcnQgb2YgdGhlIHNlbmRpbmcgc29ja2V0LgorICoKKyAqIFRoZSBsb29wYmFjayB0cmFuc3BvcnQncyBzZW5kaW5nIHBhdGgganVzdCBoYW5kcyB0aGUgc2VudCByZHNfbWVzc2FnZQorICogc3RyYWlnaHQgdG8gdGhlIHJlY2VpdmluZyBwYXRoIHZpYSBhbiBlbWJlZGRlZCByZHNfaW5jb21pbmcuCisgKi8KKworLyoKKyAqIFVzdWFsbHkgYSBtZXNzYWdlIHRyYW5zaXRzIGJvdGggdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIncyBjb25ucyBhcyBpdAorICogZmxvd3MgdG8gdGhlIHJlY2VpdmVyLiAgSW4gdGhlIGxvb3BiYWNrIGNhc2UsIHRob3VnaCwgdGhlIHJlY2VpdmUgcGF0aAorICogaXMgaGFuZGVkIHRoZSBzZW5kaW5nIGNvbm4gc28gdGhlIHNlbnNlIG9mIHRoZSBhZGRyZXNzZXMgaXMgcmV2ZXJzZWQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2xvb3BfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywKKwkJCSB1bnNpZ25lZCBpbnQgb2ZmKQoreworCUJVR19PTihoZHJfb2ZmIHx8IHNnIHx8IG9mZik7CisKKwlyZHNfaW5jX2luaXQoJnJtLT5tX2luYywgY29ubiwgY29ubi0+Y19sYWRkcik7CisJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsgLyogZm9yIHRoZSBpbmMgKi8KKworCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfbGFkZHIsIGNvbm4tPmNfZmFkZHIsICZybS0+bV9pbmMsCisJCQkgIEdGUF9LRVJORUwsIEtNX1VTRVIwKTsKKworCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpLAorCQkJICAgIE5VTEwpOworCisJcmRzX2luY19wdXQoJnJtLT5tX2luYyk7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArIGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2xvb3BfeG1pdF9jb25nX21hcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlCVUdfT04ob2Zmc2V0KTsKKwlCVUdfT04obWFwICE9IGNvbm4tPmNfbGNvbmcpOworCisJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUzsgaSsrKSB7CisJCW1lbWNweSgodm9pZCAqKWNvbm4tPmNfZmNvbmctPm1fcGFnZV9hZGRyc1tpXSwKKwkJICAgICAgICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0sIFBBR0VfU0laRSk7CisJfQorCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQoY29ubi0+Y19mY29uZywgfih1NjQpIDApOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKyBSRFNfQ09OR19NQVBfQllURVM7Cit9CisKKy8qIHdlIG5lZWQgdG8gYXQgbGVhc3QgZ2l2ZSB0aGUgdGhyZWFkIHNvbWV0aGluZyB0byBzdWNjZWVkICovCitzdGF0aWMgaW50IHJkc19sb29wX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsb29wX25vZGU7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworfTsKKworLyoKKyAqIEV2ZW4gdGhlIGxvb3BiYWNrIHRyYW5zcG9ydCBuZWVkcyB0byBrZWVwIHRyYWNrIG9mIGl0cyBjb25uZWN0aW9ucywKKyAqIHNvIGl0IGNhbiBjYWxsIHJkc19jb25uX2Rlc3Ryb3koKSBvbiB0aGVtIG9uIGV4aXQuIE4uQi4gdGhlcmUgYXJlCisgKiAxKyBsb29wYmFjayBhZGRyZXNzZXMgKDEyNy4qLiouKikgc28gaXQncyBub3QgYSBidWcgdG8gaGF2ZQorICogbXVsdGlwbGUgbG9vcGJhY2sgY29ubnMgYWxsb2NhdGVkLCBhbHRob3VnaCByYXRoZXIgdXNlbGVzcy4KKyAqLworc3RhdGljIGludCByZHNfbG9vcF9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChsYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZsYy0+bG9vcF9ub2RlKTsKKwlsYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGxjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvb3BfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmxjLT5sb29wX25vZGUsICZsb29wX2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb29wX2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfbG9vcF9jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYyA9IGFyZzsKKwlyZHNkZWJ1ZygibGMgJXBcbiIsIGxjKTsKKwlsaXN0X2RlbCgmbGMtPmxvb3Bfbm9kZSk7CisJa2ZyZWUobGMpOworfQorCitzdGF0aWMgaW50IHJkc19sb29wX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19sb29wX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworfQorCit2b2lkIHJkc19sb29wX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGMsICpfbGM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZsb29wX2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZsb29wX2Nvbm5zLCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsb29wX2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJmxvb3BfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGMsIF9sYywgJnRtcF9saXN0LCBsb29wX25vZGUpIHsKKwkJV0FSTl9PTihsYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShsYy0+Y29ubik7CisJfQorfQorCisvKgorICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJ3QgZ28gdGhyb3VnaCBnZW5lcmljCisgKiByZHNfc2VuZF94bWl0KCkgYW5kIGRvZXNuJ3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZAorICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXIKKyAqIHJkc19sb29wX3RyYW5zcG9ydC4KKyAqLworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2xvb3BfdHJhbnNwb3J0ID0geworCS54bWl0CQkJPSByZHNfbG9vcF94bWl0LAorCS54bWl0X2NvbmdfbWFwCQk9IHJkc19sb29wX3htaXRfY29uZ19tYXAsCisJLnJlY3YJCQk9IHJkc19sb29wX3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2xvb3BfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc19sb29wX2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19sb29wX2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfbG9vcF9jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX21lc3NhZ2VfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19tZXNzYWdlX2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX21lc3NhZ2VfaW5jX2ZyZWUsCisJLnRfbmFtZQkJCT0gImxvb3BiYWNrIiwKK307CmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuaCBiL25ldC9yZHMvbG9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmIwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2xvb3AuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX1JEU19MT09QX0gKKyNkZWZpbmUgX1JEU19MT09QX0gKKworLyogbG9vcC5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2xvb3BfdHJhbnNwb3J0OworCit2b2lkIHJkc19sb29wX2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE1ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpOworCitzdGF0aWMgdW5zaWduZWQgaW50CXJkc19leHRoZHJfc2l6ZVtfX1JEU19FWFRIRFJfTUFYXSA9IHsKK1tSRFNfRVhUSERSX05PTkVdCT0gMCwKK1tSRFNfRVhUSERSX1ZFUlNJT05dCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uKSwKK1tSRFNfRVhUSERSX1JETUFdCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hKSwKK1tSRFNfRVhUSERSX1JETUFfREVTVF0JPSBzaXplb2Yoc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCksCit9OworCisKK3ZvaWQgcmRzX21lc3NhZ2VfYWRkcmVmKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJcmRzZGVidWcoImFkZHJlZiBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKKwlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7Cit9CisKKy8qCisgKiBUaGlzIHJlbGllcyBvbiBkbWFfbWFwX3NnKCkgbm90IHRvdWNoaW5nIHNnW10ucGFnZSBkdXJpbmcgbWVyZ2luZy4KKyAqLworc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoUkRTX01TR19QQUdFVkVDLCAmcm0tPm1fZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJtLT5tX25lbnRzOyBpKyspIHsKKwkJcmRzZGVidWcoInB1dHRpbmcgZGF0YSBwYWdlICVwXG4iLCAodm9pZCAqKXNnX3BhZ2UoJnJtLT5tX3NnW2ldKSk7CisJCS8qIFhYWCB3aWxsIGhhdmUgdG8gcHV0X3BhZ2UgZm9yIHBhZ2UgcmVmcyAqLworCQlfX2ZyZWVfcGFnZShzZ19wYWdlKCZybS0+bV9zZ1tpXSkpOworCX0KKwlybS0+bV9uZW50cyA9IDA7CisKKwlpZiAocm0tPm1fcmRtYV9vcCkKKwkJcmRzX3JkbWFfZnJlZV9vcChybS0+bV9yZG1hX29wKTsKKwlpZiAocm0tPm1fcmRtYV9tcikKKwkJcmRzX21yX3B1dChybS0+bV9yZG1hX21yKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlyZHNfbWVzc2FnZV9wdXJnZShybSk7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJcmRzZGVidWcoInB1dCBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZybS0+bV9yZWZjb3VudCkpIHsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9zb2NrX2l0ZW0pKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9jb25uX2l0ZW0pKTsKKwkJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOworCisJCWtmcmVlKHJtKTsKKwl9Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworfQorCit2b2lkIHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJIF9fYmUxNiBkcG9ydCwgdTY0IHNlcSkKK3sKKwloZHItPmhfZmxhZ3MgPSAwOworCWhkci0+aF9zcG9ydCA9IHNwb3J0OworCWhkci0+aF9kcG9ydCA9IGRwb3J0OworCWhkci0+aF9zZXF1ZW5jZSA9IGNwdV90b19iZTY0KHNlcSk7CisJaGRyLT5oX2V4dGhkclswXSA9IFJEU19FWFRIRFJfTk9ORTsKK30KKworaW50IHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGV4dF9sZW4gPSBzaXplb2YodTgpICsgbGVuOworCXVuc2lnbmVkIGNoYXIgKmRzdDsKKworCS8qIEZvciBub3csIHJlZnVzZSB0byBhZGQgbW9yZSB0aGFuIG9uZSBleHRlbnNpb24gaGVhZGVyICovCisJaWYgKGhkci0+aF9leHRoZHJbMF0gIT0gUkRTX0VYVEhEUl9OT05FKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID49IF9fUkRTX0VYVEhEUl9NQVgKKwkgfHwgbGVuICE9IHJkc19leHRoZHJfc2l6ZVt0eXBlXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXh0X2xlbiA+PSBSRFNfSEVBREVSX0VYVF9TUEFDRSkKKwkJcmV0dXJuIDA7CisJZHN0ID0gaGRyLT5oX2V4dGhkcjsKKworCSpkc3QrKyA9IHR5cGU7CisJbWVtY3B5KGRzdCwgZGF0YSwgbGVuKTsKKworCWRzdFtsZW5dID0gUkRTX0VYVEhEUl9OT05FOworCXJldHVybiAxOworfQorCisvKgorICogSWYgYSBtZXNzYWdlIGhhcyBleHRlbnNpb24gaGVhZGVycywgcmV0cmlldmUgdGhlbSBoZXJlLgorICogQ2FsbCBsaWtlIHRoaXM6CisgKgorICogdW5zaWduZWQgaW50IHBvcyA9IDA7CisgKgorICogd2hpbGUgKDEpIHsKKyAqCWJ1ZmxlbiA9IHNpemVvZihidWZmZXIpOworICoJdHlwZSA9IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgYnVmZmVyLCAmYnVmbGVuKTsKKyAqCWlmICh0eXBlID09IFJEU19FWFRIRFJfTk9ORSkKKyAqCQlicmVhazsKKyAqCS4uLgorICogfQorICovCitpbnQgcmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJdW5zaWduZWQgaW50ICpwb3MsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50ICpidWZsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCwgZXh0X3R5cGUsIGV4dF9sZW47CisJdTggKnNyYyA9IGhkci0+aF9leHRoZHI7CisKKwlvZmZzZXQgPSAqcG9zOworCWlmIChvZmZzZXQgPj0gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCWdvdG8gbm9uZTsKKworCS8qIEdldCB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kIGxlbmd0aC4gRm9yIG5vdywgdGhlCisJICogbGVuZ3RoIGlzIGltcGxpZWQgYnkgdGhlIGV4dGVuc2lvbiB0eXBlLiAqLworCWV4dF90eXBlID0gc3JjW29mZnNldCsrXTsKKworCWlmIChleHRfdHlwZSA9PSBSRFNfRVhUSERSX05PTkUgfHwgZXh0X3R5cGUgPj0gX19SRFNfRVhUSERSX01BWCkKKwkJZ290byBub25lOworCWV4dF9sZW4gPSByZHNfZXh0aGRyX3NpemVbZXh0X3R5cGVdOworCWlmIChvZmZzZXQgKyBleHRfbGVuID4gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCWdvdG8gbm9uZTsKKworCSpwb3MgPSBvZmZzZXQgKyBleHRfbGVuOworCWlmIChleHRfbGVuIDwgKmJ1ZmxlbikKKwkJKmJ1ZmxlbiA9IGV4dF9sZW47CisJbWVtY3B5KGJ1Ziwgc3JjICsgb2Zmc2V0LCAqYnVmbGVuKTsKKwlyZXR1cm4gZXh0X3R5cGU7CisKK25vbmU6CisJKnBvcyA9IFJEU19IRUFERVJfRVhUX1NQQUNFOworCSpidWZsZW4gPSAwOworCXJldHVybiBSRFNfRVhUSERSX05PTkU7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gZXh0X2hkcjsKKworCWV4dF9oZHIuaF92ZXJzaW9uID0gY3B1X3RvX2JlMzIodmVyc2lvbik7CisJcmV0dXJuIHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oaGRyLCBSRFNfRVhUSERSX1ZFUlNJT04sICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworfQorCitpbnQgcmRzX21lc3NhZ2VfZ2V0X3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCAqdmVyc2lvbikKK3sKKwlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiBleHRfaGRyOworCXVuc2lnbmVkIGludCBwb3MgPSAwLCBsZW4gPSBzaXplb2YoZXh0X2hkcik7CisKKwkvKiBXZSBhc3N1bWUgdGhlIHZlcnNpb24gZXh0ZW5zaW9uIGlzIHRoZSBvbmx5IG9uZSBwcmVzZW50ICovCisJaWYgKHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgJmV4dF9oZHIsICZsZW4pICE9IFJEU19FWFRIRFJfVkVSU0lPTikKKwkJcmV0dXJuIDA7CisJKnZlcnNpb24gPSBiZTMyX3RvX2NwdShleHRfaGRyLmhfdmVyc2lvbik7CisJcmV0dXJuIDE7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1MzIgcl9rZXksIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCBleHRfaGRyOworCisJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJfa2V5KTsKKwlleHRfaGRyLmhfcmRtYV9vZmZzZXQgPSBjcHVfdG9fYmUzMihvZmZzZXQpOworCXJldHVybiByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKGhkciwgUkRTX0VYVEhEUl9SRE1BX0RFU1QsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2FsbG9jKHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlybSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbWVzc2FnZSkgKworCQkgICAgIChuZW50cyAqIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpKSwgZ2ZwKTsKKwlpZiAoIXJtKQorCQlnb3RvIG91dDsKKworCWlmIChuZW50cykKKwkJc2dfaW5pdF90YWJsZShybS0+bV9zZywgbmVudHMpOworCWF0b21pY19zZXQoJnJtLT5tX3JlZmNvdW50LCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmcm0tPm1fc29ja19pdGVtKTsKKwlJTklUX0xJU1RfSEVBRCgmcm0tPm1fY29ubl9pdGVtKTsKKwlzcGluX2xvY2tfaW5pdCgmcm0tPm1fcnNfbG9jayk7CisKK291dDoKKwlyZXR1cm4gcm07Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcnMsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJtID0gcmRzX21lc3NhZ2VfYWxsb2MoY2VpbCh0b3RhbF9sZW4sIFBBR0VfU0laRSksIEdGUF9LRVJORUwpOworCWlmIChybSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNldF9iaXQoUkRTX01TR19QQUdFVkVDLCAmcm0tPm1fZmxhZ3MpOworCXJtLT5tX2luYy5pX2hkci5oX2xlbiA9IGNwdV90b19iZTMyKHRvdGFsX2xlbik7CisJcm0tPm1fbmVudHMgPSBjZWlsKHRvdGFsX2xlbiwgUEFHRV9TSVpFKTsKKworCWZvciAoaSA9IDA7IGkgPCBybS0+bV9uZW50czsgKytpKSB7CisJCXNnX3NldF9wYWdlKCZybS0+bV9zZ1tpXSwKKwkJCQl2aXJ0X3RvX3BhZ2UocGFnZV9hZGRyc1tpXSksCisJCQkJUEFHRV9TSVpFLCAwKTsKKwl9CisKKwlyZXR1cm4gcm07Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIoc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmY7CisJdW5zaWduZWQgbG9uZyBzZ19vZmY7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCByZXQ7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKGNlaWwodG90YWxfbGVuLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocm0gPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9pbmMuaV9oZHIuaF9sZW4gPSBjcHVfdG9fYmUzMih0b3RhbF9sZW4pOworCisJLyoKKwkgKiBub3cgYWxsb2NhdGUgYW5kIGNvcHkgaW4gdGhlIGRhdGEgcGF5bG9hZC4KKwkgKi8KKwlzZyA9IHJtLT5tX3NnOworCWlvdiA9IGZpcnN0X2lvdjsKKwlpb3Zfb2ZmID0gMDsKKwlzZ19vZmYgPSAwOyAvKiBEZWFyIGdjYywgc2ctPnBhZ2Ugd2lsbCBiZSBudWxsIGZyb20ga3phbGxvYy4gKi8KKworCXdoaWxlICh0b3RhbF9sZW4pIHsKKwkJaWYgKHNnX3BhZ2Uoc2cpID09IE5VTEwpIHsKKwkJCXJldCA9IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzZywgdG90YWxfbGVuLAorCQkJCQkJICAgICAgIEdGUF9ISUdIVVNFUik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQkJcm0tPm1fbmVudHMrKzsKKwkJCXNnX29mZiA9IDA7CisJCX0KKworCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIHNnLT5sZW5ndGggLSBzZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCB0b3RhbF9sZW4pOworCisJCXJkc2RlYnVnKCJjb3B5aW5nICVsdSBieXRlcyBmcm9tIHVzZXIgaW92IFslcCwgJXp1XSArICVsdSB0byAiCisJCQkgInNnIFslcCwgJXUsICV1XSArICVsdVxuIiwKKwkJCSB0b19jb3B5LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sIGlvdl9vZmYsCisJCQkgKHZvaWQgKilzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgc2dfb2ZmKTsKKworCQlyZXQgPSByZHNfcGFnZV9jb3B5X2Zyb21fdXNlcihzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCArIHNnX29mZiwKKwkJCQkJICAgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICAgIHRvX2NvcHkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQl0b3RhbF9sZW4gLT0gdG9fY29weTsKKwkJc2dfb2ZmICs9IHRvX2NvcHk7CisKKwkJaWYgKHNnX29mZiA9PSBzZy0+bGVuZ3RoKQorCQkJc2crKzsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKHJtKQorCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJcm0gPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBybTsKK30KKworaW50IHJkc19tZXNzYWdlX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkJCSBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmY7CisJdW5zaWduZWQgbG9uZyB2ZWNfb2ZmOworCWludCBjb3BpZWQ7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJaW92ID0gZmlyc3RfaW92OworCWlvdl9vZmYgPSAwOworCXNnID0gcm0tPm1fc2c7CisJdmVjX29mZiA9IDA7CisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIHNnLT5sZW5ndGggLSB2ZWNfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCJjb3B5aW5nICVsdSBieXRlcyB0byB1c2VyIGlvdiBbJXAsICV6dV0gKyAlbHUgdG8gIgorCQkJICJzZyBbJXAsICV1LCAldV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCB2ZWNfb2ZmKTsKKworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQgKyB2ZWNfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCXZlY19vZmYgKz0gdG9fY29weTsKKwkJY29waWVkICs9IHRvX2NvcHk7CisKKwkJaWYgKHZlY19vZmYgPT0gc2ctPmxlbmd0aCkgeworCQkJdmVjX29mZiA9IDA7CisJCQlzZysrOworCQl9CisJfQorCisJcmV0dXJuIGNvcGllZDsKK30KKworLyoKKyAqIElmIHRoZSBtZXNzYWdlIGlzIHN0aWxsIG9uIHRoZSBzZW5kIHF1ZXVlLCB3YWl0IHVudGlsIHRoZSB0cmFuc3BvcnQKKyAqIGlzIGRvbmUgd2l0aCBpdC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBSRE1BIG9wZXJhdGlvbnMuCisgKi8KK3ZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXdhaXRfZXZlbnQocmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEsCisJCQkhdGVzdF9iaXQoUkRTX01TR19NQVBQRUQsICZybS0+bV9mbGFncykpOworfQorCit2b2lkIHJkc19tZXNzYWdlX3VubWFwcGVkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJY2xlYXJfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSkpCisJCXdha2VfdXAoJnJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9wYWdlLmMgYi9uZXQvcmRzL3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYwNzQzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9wYWdlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyIHsKKwlzdHJ1Y3QgcGFnZQkqcl9wYWdlOworCXVuc2lnbmVkIGxvbmcJcl9vZmZzZXQ7Cit9OworCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyLCByZHNfcGFnZV9yZW1haW5kZXJzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtZXJybm8gb24gZmFpbHVyZS4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZsdXNoX2RjYWNoZV9wYWdlKCkgYXMgdGhpcyBvbmx5IHdvcmtzCisgKiB3aXRoIHByaXZhdGUgcGFnZXMuICBJZiwgc2F5LCB3ZSB3ZXJlIHRvIGRvIGRpcmVjdGVkIHJlY2VpdmUgdG8gcGlubmVkCisgKiB1c2VyIHBhZ2VzIHdlJ2QgaGF2ZSB0byB3b3JyeSBtb3JlIGFib3V0IGNhY2hlIGNvaGVyZW5jZS4gIChUaG91Z2gKKyAqIHRoZSBmbHVzaF9kY2FjaGVfcGFnZSgpIGluIGdldF91c2VyX3BhZ2VzKCkgd291bGQgcHJvYmFibHkgYmUgZW5vdWdoKS4KKyAqLworaW50IHJkc19wYWdlX2NvcHlfdXNlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkgICAgICAgaW50IHRvX3VzZXIpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdm9pZCAqYWRkcjsKKworCWlmICh0b191c2VyKQorCQlyZHNfc3RhdHNfYWRkKHNfY29weV90b191c2VyLCBieXRlcyk7CisJZWxzZQorCQlyZHNfc3RhdHNfYWRkKHNfY29weV9mcm9tX3VzZXIsIGJ5dGVzKTsKKworCWFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJaWYgKHRvX3VzZXIpCisJCXJldCA9IF9fY29weV90b191c2VyX2luYXRvbWljKHB0ciwgYWRkciArIG9mZnNldCwgYnl0ZXMpOworCWVsc2UKKwkJcmV0ID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhhZGRyICsgb2Zmc2V0LCBwdHIsIGJ5dGVzKTsKKwlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1VTRVIwKTsKKworCWlmIChyZXQpIHsKKwkJYWRkciA9IGttYXAocGFnZSk7CisJCWlmICh0b191c2VyKQorCQkJcmV0ID0gY29weV90b191c2VyKHB0ciwgYWRkciArIG9mZnNldCwgYnl0ZXMpOworCQllbHNlCisJCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihhZGRyICsgb2Zmc2V0LCBwdHIsIGJ5dGVzKTsKKwkJa3VubWFwKHBhZ2UpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNZXNzYWdlIGFsbG9jYXRpb24gdXNlcyB0aGlzIHRvIGJ1aWxkIHVwIHJlZ2lvbnMgb2YgYSBtZXNzYWdlLgorICoKKyAqIEBieXRlcyAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkLgorICogQGdmcCAtIHRoZSB3YWl0aW5nIGJlaGF2aW91ciBvZiB0aGUgYWxsb2NhdGlvbgorICoKKyAqIEBnZnAgaXMgYWx3YXlzIG9yZWQgd2l0aCBfX0dGUF9ISUdITUVNLiAgQ2FsbGVycyBtdXN0IGJlIHByZXBhcmVkIHRvCisgKiBrbWFwIHRoZSBwYWdlcywgZXRjLgorICoKKyAqIElmIEBieXRlcyBpcyBhdCBsZWFzdCBhIGZ1bGwgcGFnZSB0aGVuIHRoaXMganVzdCByZXR1cm5zIGEgcGFnZSBmcm9tCisgKiBhbGxvY19wYWdlKCkuCisgKgorICogSWYgQGJ5dGVzIGlzIGEgcGFydGlhbCBwYWdlIHRoZW4gdGhpcyBzdG9yZXMgdGhlIHVudXNlZCByZWdpb24gb2YgdGhlCisgKiBwYWdlIGluIGEgcGVyLWNwdSBzdHJ1Y3R1cmUuICBGdXR1cmUgcGFydGlhbC1wYWdlIGFsbG9jYXRpb25zIG1heSBiZQorICogc2F0aXNmaWVkIGZyb20gdGhhdCBjYWNoZWQgcmVnaW9uLiAgVGhpcyBsZXRzIHVzIHdhc3RlIGxlc3MgbWVtb3J5IG9uCisgKiBzbWFsbCBhbGxvY2F0aW9ucyB3aXRoIG1pbmltYWwgY29tcGxleGl0eS4gIEl0IHdvcmtzIGJlY2F1c2UgdGhlIHRyYW5zbWl0CisgKiBwYXRoIHBhc3NlcyByZWFkLW9ubHkgcGFnZSByZWdpb25zIGRvd24gdG8gZGV2aWNlcy4gIFRoZXkgaG9sZCBhIHBhZ2UKKyAqIHJlZmVyZW5jZSB1bnRpbCB0aGV5IGFyZSBkb25lIHdpdGggdGhlIHJlZ2lvbi4KKyAqLworaW50IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCQkgICAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyICpyZW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmV0OworCisJZ2ZwIHw9IF9fR0ZQX0hJR0hNRU07CisKKwkvKiBqdW1wIHN0cmFpZ2h0IHRvIGFsbG9jYXRpb24gaWYgd2UncmUgdHJ5aW5nIGZvciBhIGh1Z2UgcGFnZSAqLworCWlmIChieXRlcyA+PSBQQUdFX1NJWkUpIHsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwKTsKKwkJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCXNnX3NldF9wYWdlKHNjYXQsIHBhZ2UsIFBBR0VfU0laRSwgMCk7CisJCQlyZXQgPSAwOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXJlbSA9ICZwZXJfY3B1KHJkc19wYWdlX3JlbWFpbmRlcnMsIGdldF9jcHUoKSk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJd2hpbGUgKDEpIHsKKwkJLyogYXZvaWQgYSB0aW55IHJlZ2lvbiBnZXR0aW5nIHN0dWNrIGJ5IHRvc3NpbmcgaXQgKi8KKwkJaWYgKHJlbS0+cl9wYWdlICYmIGJ5dGVzID4gKFBBR0VfU0laRSAtIHJlbS0+cl9vZmZzZXQpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcGFnZV9yZW1haW5kZXJfbWlzcyk7CisJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCX0KKworCQkvKiBoYW5kIG91dCBhIGZyYWdtZW50IGZyb20gdGhlIGNhY2hlZCBwYWdlICovCisJCWlmIChyZW0tPnJfcGFnZSAmJiBieXRlcyA8PSAoUEFHRV9TSVpFIC0gcmVtLT5yX29mZnNldCkpIHsKKwkJCXNnX3NldF9wYWdlKHNjYXQsIHJlbS0+cl9wYWdlLCBieXRlcywgcmVtLT5yX29mZnNldCk7CisJCQlnZXRfcGFnZShzZ19wYWdlKHNjYXQpKTsKKworCQkJaWYgKHJlbS0+cl9vZmZzZXQgIT0gMCkKKwkJCQlyZHNfc3RhdHNfaW5jKHNfcGFnZV9yZW1haW5kZXJfaGl0KTsKKworCQkJcmVtLT5yX29mZnNldCArPSBieXRlczsKKwkJCWlmIChyZW0tPnJfb2Zmc2V0ID09IFBBR0VfU0laRSkgeworCQkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCQl9CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhbGxvYyBpZiB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byB1c2UgKi8KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlwdXRfY3B1KCk7CisKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwKTsKKworCQlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBnZXRfY3B1KCkpOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZGlkIHNvbWVvbmUgcmFjZSB0byBmaWxsIHRoZSByZW1haW5kZXIgYmVmb3JlIHVzPyAqLworCQlpZiAocmVtLT5yX3BhZ2UpIHsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBvdGhlcndpc2UgaW5zdGFsbCBvdXIgcGFnZSBhbmQgbG9vcCBhcm91bmQgdG8gYWxsb2MgKi8KKwkJcmVtLT5yX3BhZ2UgPSBwYWdlOworCQlyZW0tPnJfb2Zmc2V0ID0gMDsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHV0X2NwdSgpOworb3V0OgorCXJkc2RlYnVnKCJieXRlcyAlbHUgcmV0ICVkICVwICV1ICV1XG4iLCBieXRlcywgcmV0LAorCQkgcmV0ID8gTlVMTCA6IHNnX3BhZ2Uoc2NhdCksIHJldCA/IDAgOiBzY2F0LT5vZmZzZXQsCisJCSByZXQgPyAwIDogc2NhdC0+bGVuZ3RoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXN0cnVjdCByZHNfcGFnZV9yZW1haW5kZXIgKnJlbTsKKwlsb25nIGNwdSA9IChsb25nKWhjcHU7CisKKwlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBjcHUpOworCisJcmRzZGVidWcoImNwdSAlbGQgYWN0aW9uIDB4JWx4XG4iLCBjcHUsIGFjdGlvbik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX0RFQUQ6CisJCWlmIChyZW0tPnJfcGFnZSkKKwkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayByZHNfcGFnZV9yZW1haW5kZXJfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSByZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeSwKK307CisKK3ZvaWQgcmRzX3BhZ2VfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCXJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5KCZyZHNfcGFnZV9yZW1haW5kZXJfbmIsCisJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKUNQVV9ERUFELAorCQkJCQkgICAgICAodm9pZCAqKShsb25nKWkpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWVlYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPiAvKiBmb3IgRE1BXypfREVWSUNFICovCisKKyNpbmNsdWRlICJyZG1hLmgiCisKKy8qCisgKiBYWFgKKyAqICAtIGJ1aWxkIHdpdGggc3BhcnNlCisgKiAgLSBzaG91bGQgd2UgbGltaXQgdGhlIHNpemUgb2YgYSBtciByZWdpb24/ICBsZXQgdHJhbnNwb3J0IHJldHVybiBmYWlsdXJlPworICogIC0gc2hvdWxkIHdlIGRldGVjdCBkdXBsaWNhdGUga2V5cyBvbiBhIHNvY2tldD8gIGhtbS4KKyAqICAtIGFuIHJkbWEgaXMgYW4gbWxvY2ssIGFwcGx5IHJsaW1pdD8KKyAqLworCisvKgorICogZ2V0IHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgbG9va2luZyBhdCB0aGUgcGFnZSBpbmRpY2VzIHRoYXQgdGhlIHN0YXJ0IGFuZAorICogZW5kIGFkZHJlc3NlcyBmYWxsIGluLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgdmVjIGlzIGludmFsaWQuICBJdCBpcyBpbnZhbGlkIGlmIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIGNhdXNlcyB0aGUgYWRkcmVzcyB0byB3cmFwIG9yIG92ZXJmbG93cyBhbiB1bnNpZ25lZCBpbnQuICBUaGlzIGNvbWVzCisgKiBmcm9tIGJlaW5nIHN0b3JlZCBpbiB0aGUgJ2xlbmd0aCcgbWVtYmVyIG9mICdzdHJ1Y3Qgc2NhdHRlcmxpc3QnLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19wYWdlc19pbl92ZWMoc3RydWN0IHJkc19pb3ZlYyAqdmVjKQoreworCWlmICgodmVjLT5hZGRyICsgdmVjLT5ieXRlcyA8PSB2ZWMtPmFkZHIpIHx8CisJICAgICh2ZWMtPmJ5dGVzID4gKHU2NClVSU5UX01BWCkpCisJCXJldHVybiAwOworCisJcmV0dXJuICgodmVjLT5hZGRyICsgdmVjLT5ieXRlcyArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpIC0KKwkJKHZlYy0+YWRkciA+PiBQQUdFX1NISUZUKTsKK30KKworc3RhdGljIHN0cnVjdCByZHNfbXIgKnJkc19tcl90cmVlX3dhbGsoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHU2NCBrZXksCisJCQkJICAgICAgIHN0cnVjdCByZHNfbXIgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX21yICptcjsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJbXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7CisKKwkJaWYgKGtleSA8IG1yLT5yX2tleSkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoa2V5ID4gbXItPnJfa2V5KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIG1yOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPnJfcmJfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPnJfcmJfbm9kZSwgcm9vdCk7CisJCWF0b21pY19pbmMoJmluc2VydC0+cl9yZWZjb3VudCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogRGVzdHJveSB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIHBhcnQgb2YgYSBNUi4KKyAqLworc3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IG1yLT5yX3NvY2s7CisJdm9pZCAqdHJhbnNfcHJpdmF0ZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJSRFM6IGRlc3Ryb3kgbXIga2V5IGlzICV4IHJlZmNudCAldVxuIiwKKwkJCW1yLT5yX2tleSwgYXRvbWljX3JlYWQoJm1yLT5yX3JlZmNvdW50KSk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChSRFNfTVJfREVBRCwgJm1yLT5yX3N0YXRlKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwlpZiAoIVJCX0VNUFRZX05PREUoJm1yLT5yX3JiX25vZGUpKQorCQlyYl9lcmFzZSgmbXItPnJfcmJfbm9kZSwgJnJzLT5yc19yZG1hX2tleXMpOworCXRyYW5zX3ByaXZhdGUgPSBtci0+cl90cmFuc19wcml2YXRlOworCW1yLT5yX3RyYW5zX3ByaXZhdGUgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cmFuc19wcml2YXRlKQorCQltci0+cl90cmFucy0+ZnJlZV9tcih0cmFuc19wcml2YXRlLCBtci0+cl9pbnZhbGlkYXRlKTsKK30KKwordm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IHJkc19tciAqbXIpCit7CisJcmRzX2Rlc3Ryb3lfbXIobXIpOworCWtmcmVlKG1yKTsKK30KKworLyoKKyAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbid0IGhhdmUgYW55IG1vcmUgaW9jdGxzIGNhbGxlZCBvbgorICogdGhlIHNvY2tldCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy4KKyAqLwordm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCS8qIFJlbGVhc2UgYW55IE1ScyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb2NrZXQgKi8KKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmcnMtPnJzX3JkbWFfa2V5cykpKSB7CisJCW1yID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7CisJCWlmIChtci0+cl90cmFucyA9PSBycy0+cnNfdHJhbnNwb3J0KQorCQkJbXItPnJfaW52YWxpZGF0ZSA9IDA7CisJCXJkc19tcl9wdXQobXIpOworCX0KKworCWlmIChycy0+cnNfdHJhbnNwb3J0ICYmIHJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycykKKwkJcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKCk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGluIHVzZXIgcGFnZXMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLAorCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHdyaXRlKQoreworCWludCByZXQ7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHVzZXJfYWRkciwKKwkJCSAgICAgbnJfcGFnZXMsIHdyaXRlLCAwLCBwYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCWlmICgwIDw9IHJldCAmJiAodW5zaWduZWQpIHJldCA8IG5yX3BhZ2VzKSB7CisJCXdoaWxlIChyZXQtLSkKKwkJCXB1dF9wYWdlKHBhZ2VzW3JldF0pOworCQlyZXQgPSAtRUZBVUxUOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncywKKwkJCQl1NjQgKmNvb2tpZV9yZXQsIHN0cnVjdCByZHNfbXIgKiptcl9yZXQpCit7CisJc3RydWN0IHJkc19tciAqbXIgPSBOVUxMLCAqZm91bmQ7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdm9pZCAqdHJhbnNfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBpbnQgbmVudHM7CisJbG9uZyBpOworCWludCByZXQ7CisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnMtPnJzX3RyYW5zcG9ydC0+Z2V0X21yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCW5yX3BhZ2VzID0gcmRzX3BhZ2VzX2luX3ZlYygmYXJncy0+dmVjKTsKKwlpZiAobnJfcGFnZXMgPT0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiUkRTOiBnZXRfbXIgYWRkciAlbGx4IGxlbiAlbGx1IG5yX3BhZ2VzICV1XG4iLAorCQlhcmdzLT52ZWMuYWRkciwgYXJncy0+dmVjLmJ5dGVzLCBucl9wYWdlcyk7CisKKwkvKiBYWFggY2xhbXAgbnJfcGFnZXMgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhpcyBhbGxvYz8gKi8KKwlwYWdlcyA9IGtjYWxsb2MobnJfcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX21yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX3NldCgmbXItPnJfcmVmY291bnQsIDEpOworCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCW1yLT5yX3RyYW5zID0gcnMtPnJzX3RyYW5zcG9ydDsKKwltci0+cl9zb2NrID0gcnM7CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9VU0VfT05DRSkKKwkJbXItPnJfdXNlX29uY2UgPSAxOworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX0lOVkFMSURBVEUpCisJCW1yLT5yX2ludmFsaWRhdGUgPSAxOworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX1JFQURXUklURSkKKwkJbXItPnJfd3JpdGUgPSAxOworCisJLyoKKwkgKiBQaW4gdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCB0aGUgdXNlciBidWZmZXIgYW5kIHRyYW5zZmVyIHRoZSBwYWdlCisJICogcG9pbnRlcnMgdG8gdGhlIG1yJ3Mgc2cgYXJyYXkuICBXZSBjaGVjayB0byBzZWUgaWYgd2UndmUgbWFwcGVkCisJICogdGhlIHdob2xlIHJlZ2lvbiBhZnRlciB0cmFuc2ZlcnJpbmcgdGhlIHBhcnRpYWwgcGFnZSByZWZlcmVuY2VzCisJICogdG8gdGhlIHNnIGFycmF5IHNvIHRoYXQgd2UgY2FuIGhhdmUgb25lIHBhZ2UgcmVmIGNsZWFudXAgcGF0aC4KKwkgKgorCSAqIEZvciBub3cgd2UgaGF2ZSBubyBmbGFnIHRoYXQgdGVsbHMgdXMgd2hldGhlciB0aGUgbWFwcGluZyBpcworCSAqIHIvbyBvciByL3cuIFdlIG5lZWQgdG8gYXNzdW1lIHIvdywgb3Igd2UnbGwgZG8gYSBsb3Qgb2YgUkRNQSB0bworCSAqIHRoZSB6ZXJvIHBhZ2UuCisJICovCisJcmV0ID0gcmRzX3Bpbl9wYWdlcyhhcmdzLT52ZWMuYWRkciAmIFBBR0VfTUFTSywgbnJfcGFnZXMsIHBhZ2VzLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwluZW50cyA9IHJldDsKKwlzZyA9IGtjYWxsb2MobmVudHMsIHNpemVvZigqc2cpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2cgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJV0FSTl9PTighbmVudHMpOworCXNnX2luaXRfdGFibGUoc2csIG5lbnRzKTsKKworCS8qIFN0aWNrIGFsbCBwYWdlcyBpbnRvIHRoZSBzY2F0dGVybGlzdCAqLworCWZvciAoaSA9IDAgOyBpIDwgbmVudHM7IGkrKykKKwkJc2dfc2V0X3BhZ2UoJnNnW2ldLCBwYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTsKKworCXJkc2RlYnVnKCJSRFM6IHRyYW5zX3ByaXZhdGUgbmVudHMgaXMgJXVcbiIsIG5lbnRzKTsKKworCS8qIE9idGFpbiBhIHRyYW5zcG9ydCBzcGVjaWZpYyBNUi4gSWYgdGhpcyBzdWNjZWVkcywgdGhlCisJICogcy9nIGxpc3QgaXMgbm93IG93bmVkIGJ5IHRoZSBNUi4KKwkgKiBOb3RlIHRoYXQgZG1hX21hcCgpIGltcGxpZXMgdGhhdCBwZW5kaW5nIHdyaXRlcyBhcmUKKwkgKiBmbHVzaGVkIHRvIFJBTSwgc28gbm8gZG1hX3N5bmMgaXMgbmVlZGVkIGhlcmUuICovCisJdHJhbnNfcHJpdmF0ZSA9IHJzLT5yc190cmFuc3BvcnQtPmdldF9tcihzZywgbmVudHMsIHJzLAorCQkJCQkJICZtci0+cl9rZXkpOworCisJaWYgKElTX0VSUih0cmFuc19wcml2YXRlKSkgeworCQlmb3IgKGkgPSAwIDsgaSA8IG5lbnRzOyBpKyspCisJCQlwdXRfcGFnZShzZ19wYWdlKCZzZ1tpXSkpOworCQlrZnJlZShzZyk7CisJCXJldCA9IFBUUl9FUlIodHJhbnNfcHJpdmF0ZSk7CisJCWdvdG8gb3V0OworCX0KKworCW1yLT5yX3RyYW5zX3ByaXZhdGUgPSB0cmFuc19wcml2YXRlOworCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIHB1dF91c2VyIGtleSBpcyAleCBjb29raWVfYWRkciAlcFxuIiwKKwkgICAgICAgbXItPnJfa2V5LCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBhcmdzLT5jb29raWVfYWRkcik7CisKKwkvKiBUaGUgdXNlciBtYXkgcGFzcyB1cyBhbiB1bmFsaWduZWQgYWRkcmVzcywgYnV0IHdlIGNhbiBvbmx5CisJICogbWFwIHBhZ2UgYWxpZ25lZCByZWdpb25zLiBTbyB3ZSBrZWVwIHRoZSBvZmZzZXQsIGFuZCBidWlsZAorCSAqIGEgNjRiaXQgY29va2llIGNvbnRhaW5pbmcgPFJfS2V5LCBvZmZzZXQ+IGFuZCBwYXNzIHRoYXQKKwkgKiBhcm91bmQuICovCisJY29va2llID0gcmRzX3JkbWFfbWFrZV9jb29raWUobXItPnJfa2V5LCBhcmdzLT52ZWMuYWRkciAmIH5QQUdFX01BU0spOworCWlmIChjb29raWVfcmV0KQorCQkqY29va2llX3JldCA9IGNvb2tpZTsKKworCWlmIChhcmdzLT5jb29raWVfYWRkciAmJiBwdXRfdXNlcihjb29raWUsICh1NjQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPmNvb2tpZV9hZGRyKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbnNlcnRpbmcgdGhlIG5ldyBNUiBpbnRvIHRoZSByYnRyZWUgYnVtcHMgaXRzCisJICogcmVmZXJlbmNlIGNvdW50LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJZm91bmQgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCBtci0+cl9rZXksIG1yKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlCVUdfT04oZm91bmQgJiYgZm91bmQgIT0gbXIpOworCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIGtleSBpcyAleFxuIiwgbXItPnJfa2V5KTsKKwlpZiAobXJfcmV0KSB7CisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwkJKm1yX3JldCA9IG1yOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocGFnZXMpOworCWlmIChtcikKKwkJcmRzX21yX3B1dChtcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIGFyZ3M7CisKKwlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIF9fdXNlciAqKW9wdHZhbCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCAmYXJncywgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBNUiBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIFJfS2V5CisgKi8KK2ludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCByZHNfZnJlZV9tcl9hcmdzIGFyZ3M7CisJc3RydWN0IHJkc19tciAqbXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCByZHNfZnJlZV9tcl9hcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyBfX3VzZXIgKilvcHR2YWwsCisJCQkgICBzaXplb2Yoc3RydWN0IHJkc19mcmVlX21yX2FyZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBTcGVjaWFsIGNhc2UgLSBhIG51bGwgY29va2llIG1lYW5zIGZsdXNoIGFsbCB1bnVzZWQgTVJzICovCisJaWYgKGFyZ3MuY29va2llID09IDApIHsKKwkJaWYgKCFycy0+cnNfdHJhbnNwb3J0IHx8ICFycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKCk7CisJCXJldHVybiAwOworCX0KKworCS8qIExvb2sgdXAgdGhlIE1SIGdpdmVuIGl0cyBSX2tleSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHJidHJlZQorCSAqIHNvIG5vYm9keSBlbHNlIGZpbmRzIGl0LgorCSAqIFRoaXMgc2hvdWxkIGFsc28gcHJldmVudCByYWNlcyB3aXRoIHJkc19yZG1hX3VudXNlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByZHNfcmRtYV9jb29raWVfa2V5KGFyZ3MuY29va2llKSwgTlVMTCk7CisJaWYgKG1yKSB7CisJCXJiX2VyYXNlKCZtci0+cl9yYl9ub2RlLCAmcnMtPnJzX3JkbWFfa2V5cyk7CisJCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCQlpZiAoYXJncy5mbGFncyAmIFJEU19SRE1BX0lOVkFMSURBVEUpCisJCQltci0+cl9pbnZhbGlkYXRlID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKCFtcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGNhbGwgcmRzX2Rlc3Ryb3lfbXIoKSBvdXJzZWx2ZXMgc28gdGhhdCB3ZSdyZSBzdXJlIGl0J3MgZG9uZSBieSB0aGUgdGltZQorCSAqIHdlIHJldHVybi4gIElmIHdlIGxldCByZHNfbXJfcHV0KCkgZG8gaXQgaXQgbWlnaHQgbm90IGhhcHBlbiB1bnRpbAorCSAqIHNvbWVvbmUgZWxzZSBkcm9wcyB0aGVpciByZWYuCisJICovCisJcmRzX2Rlc3Ryb3lfbXIobXIpOworCXJkc19tcl9wdXQobXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIGFuIGV4dGVuc2lvbiBoZWFkZXIgdGhhdAorICogdGVsbHMgdXMgdGhpcyBNUiB3YXMgdXNlZC4gSXQgYWxsb3dzIHVzIHRvIGltcGxlbWVudAorICogdXNlX29uY2Ugc2VtYW50aWNzCisgKi8KK3ZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpCit7CisJc3RydWN0IHJkc19tciAqbXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgem90X21lID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByX2tleSwgTlVMTCk7CisJaWYgKG1yICYmIChtci0+cl91c2Vfb25jZSB8fCBmb3JjZSkpIHsKKwkJcmJfZXJhc2UoJm1yLT5yX3JiX25vZGUsICZycy0+cnNfcmRtYV9rZXlzKTsKKwkJUkJfQ0xFQVJfTk9ERSgmbXItPnJfcmJfbm9kZSk7CisJCXpvdF9tZSA9IDE7CisJfSBlbHNlIGlmIChtcikKKwkJYXRvbWljX2luYygmbXItPnJfcmVmY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCS8qIE1heSBoYXZlIHRvIGlzc3VlIGEgZG1hX3N5bmMgb24gdGhpcyBtZW1vcnkgcmVnaW9uLgorCSAqIE5vdGUgd2UgY291bGQgYXZvaWQgdGhpcyBpZiB0aGUgb3BlcmF0aW9uIHdhcyBhIFJETUEgUkVBRCwKKwkgKiBidXQgYXQgdGhpcyBwb2ludCB3ZSBjYW4ndCB0ZWxsLiAqLworCWlmIChtciAhPSBOVUxMKSB7CisJCWlmIChtci0+cl90cmFucy0+c3luY19tcikKKwkJCW1yLT5yX3RyYW5zLT5zeW5jX21yKG1yLT5yX3RyYW5zX3ByaXZhdGUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogSWYgdGhlIE1SIHdhcyBtYXJrZWQgYXMgaW52YWxpZGF0ZSwgdGhpcyB3aWxsCisJCSAqIHRyaWdnZXIgYW4gYXN5bmMgZmx1c2guICovCisJCWlmICh6b3RfbWUpCisJCQlyZHNfZGVzdHJveV9tcihtcik7CisJCXJkc19tcl9wdXQobXIpOworCX0KK30KKwordm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCByZHNfcmRtYV9vcCAqcm8pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm8tPnJfbmVudHM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoJnJvLT5yX3NnW2ldKTsKKworCQkvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCisJCSAqIHRvIGxvY2FsIG1lbW9yeSAqLworCQlpZiAoIXJvLT5yX3dyaXRlKQorCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCXB1dF9wYWdlKHBhZ2UpOworCX0KKworCWtmcmVlKHJvLT5yX25vdGlmaWVyKTsKKwlrZnJlZShybyk7Cit9CisKKy8qCisgKiBhcmdzIGlzIGEgcG9pbnRlciB0byBhbiBpbi1rZXJuZWwgY29weSBpbiB0aGUgc2VuZG1zZyBjbXNnLgorICovCitzdGF0aWMgc3RydWN0IHJkc19yZG1hX29wICpyZHNfcmRtYV9wcmVwYXJlKHN0cnVjdCByZHNfc29jayAqcnMsCisJCQkJCSAgICBzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgcmRzX2lvdmVjIHZlYzsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisJdW5zaWduZWQgaW50IG1heF9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnJfYnl0ZXM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJc3RydWN0IHJkc19pb3ZlYyBfX3VzZXIgKmxvY2FsX3ZlYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBucjsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgcmV0OworCisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXJncy0+bnJfbG9jYWwgPiAodTY0KVVJTlRfTUFYKSB7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCisJbnJfcGFnZXMgPSAwOworCW1heF9wYWdlcyA9IDA7CisKKwlsb2NhbF92ZWMgPSAoc3RydWN0IHJkc19pb3ZlYyBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgYXJncy0+bG9jYWxfdmVjX2FkZHI7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHZlY3RvciAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5ucl9sb2NhbDsgaSsrKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmVjLCAmbG9jYWxfdmVjW2ldLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2lvdmVjKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5yID0gcmRzX3BhZ2VzX2luX3ZlYygmdmVjKTsKKwkJaWYgKG5yID09IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW1heF9wYWdlcyA9IG1heChuciwgbWF4X3BhZ2VzKTsKKwkJbnJfcGFnZXMgKz0gbnI7CisJfQorCisJcGFnZXMgPSBrY2FsbG9jKG1heF9wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlvcCA9IGt6YWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHJkc19yZG1hX29wLCByX3NnW25yX3BhZ2VzXSksIEdGUF9LRVJORUwpOworCWlmIChvcCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW9wLT5yX3dyaXRlID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9SRUFEV1JJVEUpOworCW9wLT5yX2ZlbmNlID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9GRU5DRSk7CisJb3AtPnJfbm90aWZ5ID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9OT1RJRllfTUUpOworCW9wLT5yX3JlY3ZlcnIgPSBycy0+cnNfcmVjdmVycjsKKwlXQVJOX09OKCFucl9wYWdlcyk7CisJc2dfaW5pdF90YWJsZShvcC0+cl9zZywgbnJfcGFnZXMpOworCisJaWYgKG9wLT5yX25vdGlmeSB8fCBvcC0+cl9yZWN2ZXJyKSB7CisJCS8qIFdlIGFsbG9jYXRlIGFuIHVuaW5pdGlhbGl6ZWQgbm90aWZpZXIgaGVyZSwgYmVjYXVzZQorCQkgKiB3ZSBkb24ndCB3YW50IHRvIGRvIHRoYXQgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlci4gV2UKKwkJICogd291bGQgaGF2ZSB0byB1c2UgR0ZQX0FUT01JQyB0aGVyZSwgYW5kIGRvbid0IHdhbnQgdG8gZGVhbAorCQkgKiB3aXRoIGZhaWxlZCBhbGxvY2F0aW9ucy4KKwkJICovCisJCW9wLT5yX25vdGlmaWVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJkc19ub3RpZmllciksIEdGUF9LRVJORUwpOworCQlpZiAoIW9wLT5yX25vdGlmaWVyKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJb3AtPnJfbm90aWZpZXItPm5fdXNlcl90b2tlbiA9IGFyZ3MtPnVzZXJfdG9rZW47CisJCW9wLT5yX25vdGlmaWVyLT5uX3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJfQorCisJLyogVGhlIGNvb2tpZSBjb250YWlucyB0aGUgUl9LZXkgb2YgdGhlIHJlbW90ZSBtZW1vcnkgcmVnaW9uLCBhbmQKKwkgKiBvcHRpb25hbGx5IGFuIG9mZnNldCBpbnRvIGl0LiBUaGlzIGlzIGhvdyB3ZSBpbXBsZW1lbnQgUkRNQSBpbnRvCisJICogdW5hbGlnbmVkIG1lbW9yeS4KKwkgKiBXaGVuIHNldHRpbmcgdXAgdGhlIFJETUEsIHdlIG5lZWQgdG8gYWRkIHRoYXQgb2Zmc2V0IHRvIHRoZQorCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgKHdoaWNoIGlzIHJlYWxseSBhbiBvZmZzZXQgaW50byB0aGUgTVIpCisJICogRklYTUU6IFdlIG1heSB3YW50IHRvIG1vdmUgdGhpcyBpbnRvIGliX3JkbWEuYworCSAqLworCW9wLT5yX2tleSA9IHJkc19yZG1hX2Nvb2tpZV9rZXkoYXJncy0+Y29va2llKTsKKwlvcC0+cl9yZW1vdGVfYWRkciA9IGFyZ3MtPnJlbW90ZV92ZWMuYWRkciArIHJkc19yZG1hX2Nvb2tpZV9vZmZzZXQoYXJncy0+Y29va2llKTsKKworCW5yX2J5dGVzID0gMDsKKworCXJkc2RlYnVnKCJSRFM6IHJkbWEgcHJlcGFyZSBucl9sb2NhbCAlbGx1IHJ2YSAlbGx4IHJrZXkgJXhcbiIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXJncy0+bnJfbG9jYWwsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXJncy0+cmVtb3RlX3ZlYy5hZGRyLAorCSAgICAgICBvcC0+cl9rZXkpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm5yX2xvY2FsOyBpKyspIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ZWMsICZsb2NhbF92ZWNbaV0sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfaW92ZWMpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbnIgPSByZHNfcGFnZXNfaW5fdmVjKCZ2ZWMpOworCQlpZiAobnIgPT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcnMtPnJzX3VzZXJfYWRkciA9IHZlYy5hZGRyOworCQlycy0+cnNfdXNlcl9ieXRlcyA9IHZlYy5ieXRlczsKKworCQkvKiBkaWQgdGhlIHVzZXIgY2hhbmdlIHRoZSB2ZWMgdW5kZXIgdXM/ICovCisJCWlmIChuciA+IG1heF9wYWdlcyB8fCBvcC0+cl9uZW50cyArIG5yID4gbnJfcGFnZXMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBJZiBpdCdzIGEgV1JJVEUgb3BlcmF0aW9uLCB3ZSB3YW50IHRvIHBpbiB0aGUgcGFnZXMgZm9yIHJlYWRpbmcuCisJCSAqIElmIGl0J3MgYSBSRUFEIG9wZXJhdGlvbiwgd2UgbmVlZCB0byBwaW4gdGhlIHBhZ2VzIGZvciB3cml0aW5nLgorCQkgKi8KKwkJcmV0ID0gcmRzX3Bpbl9wYWdlcyh2ZWMuYWRkciAmIFBBR0VfTUFTSywgbnIsIHBhZ2VzLCAhb3AtPnJfd3JpdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXJkc2RlYnVnKCJSRFM6IG5yX2J5dGVzICV1IG5yICV1IHZlYy5ieXRlcyAlbGx1IHZlYy5hZGRyICVsbHhcbiIsCisJCSAgICAgICBucl9ieXRlcywgbnIsIHZlYy5ieXRlcywgdmVjLmFkZHIpOworCisJCW5yX2J5dGVzICs9IHZlYy5ieXRlczsKKworCQlmb3IgKGogPSAwOyBqIDwgbnI7IGorKykgeworCQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHZlYy5hZGRyICYgflBBR0VfTUFTSzsKKworCQkJc2cgPSAmb3AtPnJfc2dbb3AtPnJfbmVudHMgKyBqXTsKKwkJCXNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSwKKwkJCQkJbWluX3QodW5zaWduZWQgaW50LCB2ZWMuYnl0ZXMsIFBBR0VfU0laRSAtIG9mZnNldCksCisJCQkJCW9mZnNldCk7CisKKwkJCXJkc2RlYnVnKCJSRFM6IHNnLT5vZmZzZXQgJXggc2ctPmxlbiAleCB2ZWMuYWRkciAlbGx4IHZlYy5ieXRlcyAlbGx1XG4iLAorCQkJICAgICAgIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIHZlYy5hZGRyLCB2ZWMuYnl0ZXMpOworCisJCQl2ZWMuYWRkciArPSBzZy0+bGVuZ3RoOworCQkJdmVjLmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCX0KKworCQlvcC0+cl9uZW50cyArPSBucjsKKwl9CisKKworCWlmIChucl9ieXRlcyA+IGFyZ3MtPnJlbW90ZV92ZWMuYnl0ZXMpIHsKKwkJcmRzZGVidWcoIlJEUyBucl9ieXRlcyAldSByZW1vdGVfYnl0ZXMgJXUgZG8gbm90IG1hdGNoXG4iLAorCQkJCW5yX2J5dGVzLAorCQkJCSh1bnNpZ25lZCBpbnQpIGFyZ3MtPnJlbW90ZV92ZWMuYnl0ZXMpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJb3AtPnJfYnl0ZXMgPSBucl9ieXRlczsKKworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocGFnZXMpOworCWlmIChyZXQpIHsKKwkJaWYgKG9wKQorCQkJcmRzX3JkbWFfZnJlZV9vcChvcCk7CisJCW9wID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gb3A7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gYXNrcyBmb3IgYSBSRE1BIHRyYW5zZmVyLgorICogRXh0cmFjdCBhbGwgYXJndW1lbnRzIGFuZCBzZXQgdXAgdGhlIHJkbWFfb3AKKyAqLworaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wOworCisJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfcmRtYV9hcmdzKSkKKwkgfHwgcm0tPm1fcmRtYV9vcCAhPSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9wID0gcmRzX3JkbWFfcHJlcGFyZShycywgQ01TR19EQVRBKGNtc2cpKTsKKwlpZiAoSVNfRVJSKG9wKSkKKwkJcmV0dXJuIFBUUl9FUlIob3ApOworCXJkc19zdGF0c19pbmMoc19zZW5kX3JkbWEpOworCXJtLT5tX3JkbWFfb3AgPSBvcDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiB3YW50cyB1cyB0byBwYXNzIGFuIFJETUEgZGVzdGluYXRpb24gKGFrYSBNUikKKyAqIHRvIHRoZSByZW1vdGUKKyAqLworaW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfbXIgKm1yOworCXUzMiByX2tleTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZihyZHNfcmRtYV9jb29raWVfdCkpCisJIHx8IHJtLT5tX3JkbWFfY29va2llICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZybS0+bV9yZG1hX2Nvb2tpZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2Yocm0tPm1fcmRtYV9jb29raWUpKTsKKworCS8qIFdlIGFyZSByZXVzaW5nIGEgcHJldmlvdXNseSBtYXBwZWQgTVIgaGVyZS4gTW9zdCBsaWtlbHksIHRoZQorCSAqIGFwcGxpY2F0aW9uIGhhcyB3cml0dGVuIHRvIHRoZSBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseQorCSAqIGZsdXNoIHRob3NlIHdyaXRlcyB0byBSQU0uIE90aGVyd2lzZSB0aGUgSENBIG1heSBub3Qgc2VlIHRoZW0KKwkgKiB3aGVuIGRvaW5nIGEgRE1BIGZyb20gdGhhdCBidWZmZXIuCisJICovCisJcl9rZXkgPSByZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByX2tleSwgTlVMTCk7CisJaWYgKG1yID09IE5VTEwpCisJCWVyciA9IC1FSU5WQUw7CS8qIGludmFsaWQgcl9rZXkgKi8KKwllbHNlCisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAobXIpIHsKKwkJbXItPnJfdHJhbnMtPnN5bmNfbXIobXItPnJfdHJhbnNfcHJpdmF0ZSwgRE1BX1RPX0RFVklDRSk7CisJCXJtLT5tX3JkbWFfbXIgPSBtcjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiBwYXNzZXMgdXMgYW4gYWRkcmVzcyByYW5nZSBpdCB3YW50cyB0byBlbmFibGUgUkRNQQorICogdG8vZnJvbS4gV2UgbWFwIHRoZSBhcmVhLCBhbmQgc2F2ZSB0aGUgPFJfS2V5LG9mZnNldD4gcGFpcgorICogaW4gcm0tPm1fcmRtYV9jb29raWUuIFRoaXMgY2F1c2VzIGl0IHRvIGJlIHNlbnQgYWxvbmcgdG8gdGhlIHBlZXIKKyAqIGluIGFuIGV4dGVuc2lvbiBoZWFkZXIuCisgKi8KK2ludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpCisJIHx8IHJtLT5tX3JkbWFfY29va2llICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBDTVNHX0RBVEEoY21zZyksICZybS0+bV9yZG1hX2Nvb2tpZSwgJnJtLT5tX3JkbWFfbXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmggYi9uZXQvcmRzL3JkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjU1MTIwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hLmgKQEAgLTAsMCArMSw4NCBAQAorI2lmbmRlZiBfUkRTX1JETUFfSAorI2RlZmluZSBfUkRTX1JETUFfSAorCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK3N0cnVjdCByZHNfbXIgeworCXN0cnVjdCByYl9ub2RlCQlyX3JiX25vZGU7CisJYXRvbWljX3QJCXJfcmVmY291bnQ7CisJdTMyCQkJcl9rZXk7CisKKwkvKiBBIGNvcHkgb2YgdGhlIGNyZWF0aW9uIGZsYWdzICovCisJdW5zaWduZWQgaW50CQlyX3VzZV9vbmNlOjE7CisJdW5zaWduZWQgaW50CQlyX2ludmFsaWRhdGU6MTsKKwl1bnNpZ25lZCBpbnQJCXJfd3JpdGU6MTsKKworCS8qIFRoaXMgaXMgZm9yIFJEU19NUl9ERUFELgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgJiBjb25zaXN0ZW50IHRvIG1ha2UgdGhpcyBwYXJ0IG9mIHRoZSBhYm92ZQorCSAqIGJpdCBmaWVsZCBoZXJlLCBidXQgd2UgbmVlZCB0byB1c2UgdGVzdF9hbmRfc2V0X2JpdC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlyX3N0YXRlOworCXN0cnVjdCByZHNfc29jawkJKnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovCisJc3RydWN0IHJkc190cmFuc3BvcnQJKnJfdHJhbnM7CisJdm9pZAkJCSpyX3RyYW5zX3ByaXZhdGU7Cit9OworCisvKiBGbGFncyBmb3IgbXItPnJfc3RhdGUgKi8KKyNkZWZpbmUgUkRTX01SX0RFQUQJCTAKKworc3RydWN0IHJkc19yZG1hX29wIHsKKwl1MzIJCQlyX2tleTsKKwl1NjQJCQlyX3JlbW90ZV9hZGRyOworCXVuc2lnbmVkIGludAkJcl93cml0ZToxOworCXVuc2lnbmVkIGludAkJcl9mZW5jZToxOworCXVuc2lnbmVkIGludAkJcl9ub3RpZnk6MTsKKwl1bnNpZ25lZCBpbnQJCXJfcmVjdmVycjoxOworCXVuc2lnbmVkIGludAkJcl9tYXBwZWQ6MTsKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyCSpyX25vdGlmaWVyOworCXVuc2lnbmVkIGludAkJcl9ieXRlczsKKwl1bnNpZ25lZCBpbnQJCXJfbmVudHM7CisJdW5zaWduZWQgaW50CQlyX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdAlyX3NnWzBdOworfTsKKworc3RhdGljIGlubGluZSByZHNfcmRtYV9jb29raWVfdCByZHNfcmRtYV9tYWtlX2Nvb2tpZSh1MzIgcl9rZXksIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIHJfa2V5IHwgKCgodTY0KSBvZmZzZXQpIDw8IDMyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmRzX3JkbWFfY29va2llX2tleShyZHNfcmRtYV9jb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIGNvb2tpZTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmRzX3JkbWFfY29va2llX29mZnNldChyZHNfcmRtYV9jb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIGNvb2tpZSA+PiAzMjsKK30KKworaW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CitpbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7Cit2b2lkIHJkc19yZG1hX2Ryb3Bfa2V5cyhzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK2ludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOworaW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK2ludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7Cit2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJkc19yZG1hX29wICpybyk7Cit2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50KTsKKworZXh0ZXJuIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCByZHNfbXIgKm1yKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfbXJfcHV0KHN0cnVjdCByZHNfbXIgKm1yKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtci0+cl9yZWZjb3VudCkpCisJCV9fcmRzX3B1dF9tcl9maW5hbChtcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTkwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworc3RhdGljIHN0cnVjdCByZG1hX2NtX2lkICpyZHNfaXdfbGlzdGVuX2lkOworCitpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJLyogdGhpcyBjYW4gYmUgbnVsbCBpbiB0aGUgbGlzdGVuaW5nIHBhdGggKi8KKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBpZCAlcCBoYW5kbGluZyBldmVudCAldVxuIiwgY29ubiwgY21faWQsCisJCSBldmVudC0+ZXZlbnQpOworCisJaWYgKGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfUk5JQykKKwkJdHJhbnMgPSAmcmRzX2l3X3RyYW5zcG9ydDsKKwllbHNlCisJCXRyYW5zID0gJnJkc19pYl90cmFuc3BvcnQ7CisKKwkvKiBQcmV2ZW50IHNodXRkb3duIGZyb20gdGVhcmluZyBkb3duIHRoZSBjb25uZWN0aW9uCisJICogd2hpbGUgd2UncmUgZXhlY3V0aW5nLiAqLworCWlmIChjb25uKSB7CisJCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwkJLyogSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgc2h1dCBkb3duLCBiYWlsIG91dAorCQkgKiByaWdodCBhd2F5LiBXZSByZXR1cm4gMCBzbyBjbV9pZCBkb2Vzbid0IGdldAorCQkgKiBkZXN0cm95ZWQgcHJlbWF0dXJlbHkgKi8KKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFJlamVjdCBpbmNvbWluZyBjb25uZWN0aW9ucyB3aGlsZSB3ZSdyZSB0ZWFyaW5nCisJCQkgKiBkb3duIGFuIGV4aXN0aW5nIG9uZS4gKi8KKwkJCWlmIChldmVudC0+ZXZlbnQgPT0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QpCisJCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUOgorCQlyZXQgPSB0cmFucy0+Y21faGFuZGxlX2Nvbm5lY3QoY21faWQsIGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDoKKwkJLyogWFhYIGRvIHdlIG5lZWQgdG8gY2xlYW4gdXAgaWYgdGhpcyBmYWlscz8gKi8KKwkJcmV0ID0gcmRtYV9yZXNvbHZlX3JvdXRlKGNtX2lkLAorCQkJCQkgUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TKTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQ6CisJCS8qIFhYWCB3b3JyeSBhYm91dCByYWNpbmcgd2l0aCBsaXN0ZW4gYWNjZXB0YW5jZSAqLworCQlyZXQgPSB0cmFucy0+Y21faW5pdGlhdGVfY29ubmVjdChjbV9pZCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOgorCQl0cmFucy0+Y21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1JPVVRFX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRToKKwljYXNlIFJETUFfQ01fRVZFTlRfUkVKRUNURUQ6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0RFVklDRV9SRU1PVkFMOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0NIQU5HRToKKwkJaWYgKGNvbm4pCisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogRElTQ09OTkVDVCBldmVudCAtIGRyb3BwaW5nIGNvbm5lY3Rpb24gIgorCQkJIiVwSTQtPiVwSTRcbiIsICZjb25uLT5jX2xhZGRyLAorCQkJICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiB0aGluZ3MgbGlrZSBkZXZpY2UgZGlzY29ubmVjdD8gKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGV2ZW50ICV1XG4iLCBldmVudC0+ZXZlbnQpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJaWYgKGNvbm4pCisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCXJkc2RlYnVnKCJpZCAlcCBldmVudCAldSBoYW5kbGluZyByZXQgJWRcbiIsIGNtX2lkLCBldmVudC0+ZXZlbnQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCByZHNfcmRtYV9saXN0ZW5faW5pdCh2b2lkKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCWludCByZXQ7CisKKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGNtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGNtX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQkgICAgICAgInJkbWFfY3JlYXRlX2lkKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXNpbi5zaW5fZmFtaWx5ID0gUEZfSU5FVCwKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWh0b25sKElOQUREUl9BTlkpOworCXNpbi5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwkvKgorCSAqIFhYWCBJIGJldCB0aGlzIGJpbmRzIHRoZSBjbV9pZCB0byBhIGRldmljZS4gIElmIHdlIHdhbnQgdG8gc3VwcG9ydAorCSAqIGZhaWwtb3ZlciB3ZSdsbCBoYXZlIHRvIHRha2UgdGhpcyBpbnRvIGNvbnNpZGVyYXRpb24uCisJICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2JpbmRfYWRkcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZG1hX2xpc3RlbihjbV9pZCwgMTI4KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2xpc3RlbigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY20gJXAgbGlzdGVuaW5nIG9uIHBvcnQgJXVcbiIsIGNtX2lkLCBSRFNfUE9SVCk7CisKKwlyZHNfaXdfbGlzdGVuX2lkID0gY21faWQ7CisJY21faWQgPSBOVUxMOworb3V0OgorCWlmIChjbV9pZCkKKwkJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfcmRtYV9saXN0ZW5fc3RvcCh2b2lkKQoreworCWlmIChyZHNfaXdfbGlzdGVuX2lkKSB7CisJCXJkc2RlYnVnKCJjbSAlcFxuIiwgcmRzX2l3X2xpc3Rlbl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZChyZHNfaXdfbGlzdGVuX2lkKTsKKwkJcmRzX2l3X2xpc3Rlbl9pZCA9IE5VTEw7CisJfQorfQorCitpbnQgX19pbml0IHJkc19yZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX3JkbWFfbGlzdGVuX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJkc19pd19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaXdfaW5pdDsKKworCXJldCA9IHJkc19pYl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaWJfaW5pdDsKKworCWdvdG8gb3V0OworCitlcnJfaWJfaW5pdDoKKwlyZHNfaXdfZXhpdCgpOworZXJyX2l3X2luaXQ6CisJcmRzX3JkbWFfbGlzdGVuX3N0b3AoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19yZG1hX2V4aXQodm9pZCkKK3sKKwkvKiBzdG9wIGxpc3RlbmluZyBmaXJzdCB0byBlbnN1cmUgbm8gbmV3IGNvbm5lY3Rpb25zIGFyZSBhdHRlbXB0ZWQgKi8KKwlyZHNfcmRtYV9saXN0ZW5fc3RvcCgpOworCXJkc19pYl9leGl0KCk7CisJcmRzX2l3X2V4aXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfUkRNQV9UUkFOU1BPUlRfSAorI2RlZmluZSBfUkRNQV9UUkFOU1BPUlRfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorCisjZGVmaW5lIFJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyAgICAgNTAwMAorCitpbnQgcmRzX3JkbWFfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisvKiBmcm9tIHJkbWFfdHJhbnNwb3J0LmMgKi8KK2ludCByZHNfcmRtYV9pbml0KHZvaWQpOwordm9pZCByZHNfcmRtYV9leGl0KHZvaWQpOworCisvKiBmcm9tIGliLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0OworaW50IHJkc19pYl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfZXhpdCh2b2lkKTsKKworLyogZnJvbSBpdy5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydDsKK2ludCByZHNfaXdfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwNDAwNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRzLmgKQEAgLTAsMCArMSw2ODYgQEAKKyNpZm5kZWYgX1JEU19SRFNfSAorI2RlZmluZSBfUkRTX1JEU19ICisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmRzLmg+CisKKyNpbmNsdWRlICJpbmZvLmgiCisKKy8qCisgKiBSRFMgTmV0d29yayBwcm90b2NvbCB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgUkRTX1BST1RPQ09MXzNfMAkweDAzMDAKKyNkZWZpbmUgUkRTX1BST1RPQ09MXzNfMQkweDAzMDEKKyNkZWZpbmUgUkRTX1BST1RPQ09MX1ZFUlNJT04JUkRTX1BST1RPQ09MXzNfMQorI2RlZmluZSBSRFNfUFJPVE9DT0xfTUFKT1IodikJKCh2KSA+PiA4KQorI2RlZmluZSBSRFNfUFJPVE9DT0xfTUlOT1IodikJKCh2KSAmIDI1NSkKKyNkZWZpbmUgUkRTX1BST1RPQ09MKG1haiwgbWluKQkoKChtYWopIDw8IDgpIHwgbWluKQorCisvKgorICogWFhYIHJhbmRvbWx5IGNob3NlbiwgYnV0IGF0IGxlYXN0IHNlZW1zIHRvIGJlIHVudXNlZDoKKyAqICMgICAgICAgICAgICAgICAxODQ2NC0xODc2OCBVbmFzc2lnbmVkCisgKiBXZSBzaG91bGQgZG8gYmV0dGVyLiAgV2Ugd2FudCBhIHJlc2VydmVkIHBvcnQgdG8gZGlzY291cmFnZSB1bnByaXYnZWQKKyAqIHVzZXJzcGFjZSBmcm9tIGxpc3RlbmluZy4KKyAqLworI2RlZmluZSBSRFNfUE9SVAkxODYzNAorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgcmRzZGVidWcoZm10LCBhcmdzLi4uKSBwcl9kZWJ1ZygiJXMoKTogIiBmbXQsIF9fZnVuY19fICwgIyNhcmdzKQorI2Vsc2UKKy8qIHNpZ2gsIHByX2RlYnVnKCkgY2F1c2VzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5ncyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorcmRzZGVidWcoY2hhciAqZm10LCAuLi4pCit7Cit9CisjZW5kaWYKKworLyogWFhYIGlzIHRoZXJlIG9uZSBvZiB0aGVzZSBzb21ld2hlcmU/ICovCisjZGVmaW5lIGNlaWwoeCwgeSkgXAorCSh7IHVuc2lnbmVkIGxvbmcgX194ID0gKHgpLCBfX3kgPSAoeSk7IChfX3ggKyBfX3kgLSAxKSAvIF9feTsgfSkKKworI2RlZmluZSBSRFNfRlJBR19TSElGVAkxMgorI2RlZmluZSBSRFNfRlJBR19TSVpFCSgodW5zaWduZWQgaW50KSgxIDw8IFJEU19GUkFHX1NISUZUKSkKKworI2RlZmluZSBSRFNfQ09OR19NQVBfQllURVMJKDY1NTM2IC8gOCkKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX0xPTkdTCShSRFNfQ09OR19NQVBfQllURVMgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIFJEU19DT05HX01BUF9QQUdFUwkoUEFHRV9BTElHTihSRFNfQ09OR19NQVBfQllURVMpIC8gUEFHRV9TSVpFKQorI2RlZmluZSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTCShQQUdFX1NJWkUgKiA4KQorCitzdHJ1Y3QgcmRzX2NvbmdfbWFwIHsKKwlzdHJ1Y3QgcmJfbm9kZQkJbV9yYl9ub2RlOworCV9fYmUzMgkJCW1fYWRkcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAltX3dhaXRxOworCXN0cnVjdCBsaXN0X2hlYWQJbV9jb25uX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJbV9wYWdlX2FkZHJzW1JEU19DT05HX01BUF9QQUdFU107Cit9OworCisKKy8qCisgKiBUaGlzIGlzIGhvdyB3ZSB3aWxsIHRyYWNrIHRoZSBjb25uZWN0aW9uIHN0YXRlOgorICogQSBjb25uZWN0aW9uIGlzIGFsd2F5cyBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZworICogc3RhdGVzLiBVcGRhdGVzIHRvIHRoZSBzdGF0ZSBhcmUgYXRvbWljIGFuZCBpbXBseQorICogYSBtZW1vcnkgYmFycmllci4KKyAqLworZW51bSB7CisJUkRTX0NPTk5fRE9XTiA9IDAsCisJUkRTX0NPTk5fQ09OTkVDVElORywKKwlSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAorCVJEU19DT05OX1VQLAorCVJEU19DT05OX0VSUk9SLAorfTsKKworLyogQml0cyBmb3IgY19mbGFncyAqLworI2RlZmluZSBSRFNfTExfU0VORF9GVUxMCTAKKyNkZWZpbmUgUkRTX1JFQ09OTkVDVF9QRU5ESU5HCTEKKworc3RydWN0IHJkc19jb25uZWN0aW9uIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKKwlfX2JlMzIJCQljX2xhZGRyOworCV9fYmUzMgkJCWNfZmFkZHI7CisJdW5zaWduZWQgaW50CQljX2xvb3BiYWNrOjE7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CisKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwCSpjX2xjb25nOworCXN0cnVjdCByZHNfY29uZ19tYXAJKmNfZmNvbmc7CisKKwlzdHJ1Y3QgbXV0ZXgJCWNfc2VuZF9sb2NrOwkvKiBwcm90ZWN0IHNlbmQgcmluZyAqLworCXN0cnVjdCByZHNfbWVzc2FnZQkqY194bWl0X3JtOworCXVuc2lnbmVkIGxvbmcJCWNfeG1pdF9zZzsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9oZHJfb2ZmOworCXVuc2lnbmVkIGludAkJY194bWl0X2RhdGFfb2ZmOworCXVuc2lnbmVkIGludAkJY194bWl0X3JkbWFfc2VudDsKKworCXNwaW5sb2NrX3QJCWNfbG9jazsJCS8qIHByb3RlY3QgbXNnIHF1ZXVlcyAqLworCXU2NAkJCWNfbmV4dF90eF9zZXE7CisJc3RydWN0IGxpc3RfaGVhZAljX3NlbmRfcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZAljX3JldHJhbnM7CisKKwl1NjQJCQljX25leHRfcnhfc2VxOworCisJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CisJdm9pZAkJCSpjX3RyYW5zcG9ydF9kYXRhOworCisJYXRvbWljX3QJCWNfc3RhdGU7CisJdW5zaWduZWQgbG9uZwkJY19mbGFnczsKKwl1bnNpZ25lZCBsb25nCQljX3JlY29ubmVjdF9qaWZmaWVzOworCXN0cnVjdCBkZWxheWVkX3dvcmsJY19zZW5kX3c7CisJc3RydWN0IGRlbGF5ZWRfd29yawljX3JlY3ZfdzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWNfY29ubl93OworCXN0cnVjdCB3b3JrX3N0cnVjdAljX2Rvd25fdzsKKwlzdHJ1Y3QgbXV0ZXgJCWNfY21fbG9jazsJLyogcHJvdGVjdCBjb25uIHN0YXRlICYgY20gKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJY19tYXBfaXRlbTsKKwl1bnNpZ25lZCBsb25nCQljX21hcF9xdWV1ZWQ7CisJdW5zaWduZWQgbG9uZwkJY19tYXBfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcJCWNfbWFwX2J5dGVzOworCisJdW5zaWduZWQgaW50CQljX3VuYWNrZWRfcGFja2V0czsKKwl1bnNpZ25lZCBpbnQJCWNfdW5hY2tlZF9ieXRlczsKKworCS8qIFByb3RvY29sIHZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWNfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgUkRTX0ZMQUdfQ09OR19CSVRNQVAJMHgwMQorI2RlZmluZSBSRFNfRkxBR19BQ0tfUkVRVUlSRUQJMHgwMgorI2RlZmluZSBSRFNfRkxBR19SRVRSQU5TTUlUVEVECTB4MDQKKyNkZWZpbmUgUkRTX01BWF9BRFZfQ1JFRElUCTEyNworCisvKgorICogTWF4aW11bSBzcGFjZSBhdmFpbGFibGUgZm9yIGV4dGVuc2lvbiBoZWFkZXJzLgorICovCisjZGVmaW5lIFJEU19IRUFERVJfRVhUX1NQQUNFCTE2CisKK3N0cnVjdCByZHNfaGVhZGVyIHsKKwlfX2JlNjQJaF9zZXF1ZW5jZTsKKwlfX2JlNjQJaF9hY2s7CisJX19iZTMyCWhfbGVuOworCV9fYmUxNgloX3Nwb3J0OworCV9fYmUxNgloX2Rwb3J0OworCXU4CWhfZmxhZ3M7CisJdTgJaF9jcmVkaXQ7CisJdTgJaF9wYWRkaW5nWzRdOworCV9fc3VtMTYJaF9jc3VtOworCisJdTgJaF9leHRoZHJbUkRTX0hFQURFUl9FWFRfU1BBQ0VdOworfTsKKworLyoKKyAqIFJlc2VydmVkIC0gaW5kaWNhdGVzIGVuZCBvZiBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9OT05FCQkwCisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHZlcnkKKyAqIGZpcnN0IG1lc3NhZ2UgdGhhdCBpcyBzZW50IG9uIGEgbmV3IGNvbm5lY3Rpb24sCisgKiBhbmQgaWRlbnRpZmllcyB0aGUgcHJvdG9jb2wgbGV2ZWwuIFRoaXMgd2lsbCBoZWxwCisgKiByb2xsaW5nIHVwZGF0ZXMgaWYgYSBmdXR1cmUgY2hhbmdlIHJlcXVpcmVzIGJyZWFraW5nCisgKiB0aGUgcHJvdG9jb2wuCisgKiBOQjogVGhpcyBpcyBubyBsb25nZXIgdHJ1ZSBmb3IgSUIsIHdoZXJlIHdlIGRvIGEgdmVyc2lvbgorICogbmVnb3RpYXRpb24gZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHBoYXNlIChwcm90b2NvbAorICogdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgUkRNQSBDTSBwcml2YXRlIGRhdGEpLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfVkVSU0lPTgkxCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiB7CisJX19iZTMyCQkJaF92ZXJzaW9uOworfTsKKworLyoKKyAqIFRoaXMgZXh0ZW5zaW9uIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgUkRTIG1lc3NhZ2UKKyAqIGNoYXNpbmcgYW4gUkRNQSBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9SRE1BCQkyCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSB7CisJX19iZTMyCQkJaF9yZG1hX3JrZXk7Cit9OworCisvKgorICogVGhpcyBleHRlbnNpb24gaGVhZGVyIHRlbGxzIHRoZSBwZWVyIGFib3V0IHRoZQorICogZGVzdGluYXRpb24gPFJfS2V5LG9mZnNldD4gb2YgdGhlIHJlcXVlc3RlZCBSRE1BCisgKiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9SRE1BX0RFU1QJMworc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCB7CisJX19iZTMyCQkJaF9yZG1hX3JrZXk7CisJX19iZTMyCQkJaF9yZG1hX29mZnNldDsKK307CisKKyNkZWZpbmUgX19SRFNfRVhUSERSX01BWAkxNiAvKiBmb3Igbm93ICovCisKK3N0cnVjdCByZHNfaW5jb21pbmcgeworCWF0b21pY190CQlpX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJaV9pdGVtOworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqaV9jb25uOworCXN0cnVjdCByZHNfaGVhZGVyCWlfaGRyOworCXVuc2lnbmVkIGxvbmcJCWlfcnhfamlmZmllczsKKwlfX2JlMzIJCQlpX3NhZGRyOworCisJcmRzX3JkbWFfY29va2llX3QJaV9yZG1hX2Nvb2tpZTsKK307CisKKy8qCisgKiBtX3NvY2tfaXRlbSBhbmQgbV9jb25uX2l0ZW0gYXJlIG9uIGxpc3RzIHRoYXQgYXJlIHNlcmlhbGl6ZWQgdW5kZXIKKyAqIGNvbm4tPmNfbG9jay4gIG1fc29ja19pdGVtIGhhcyBhZGRpdGlvbmFsIG1lYW5pbmcgaW4gdGhhdCBvbmNlIGl0IGlzIGVtcHR5CisgKiB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZSBwdXQgYmFjayBvbiB0aGUgcmV0cmFuc21pdCBsaXN0IGFmdGVyIGJlaW5nIHNlbnQuCisgKiBtZXNzYWdlcyB0aGF0IGFyZSBjYW5jZWxlZCB3aGlsZSBiZWluZyBzZW50IHJlbHkgb24gdGhpcy4KKyAqCisgKiBtX2luYyBpcyB1c2VkIGJ5IGxvb3BiYWNrIHNvIHRoYXQgaXQgY2FuIHBhc3MgYW4gaW5jb21pbmcgbWVzc2FnZSBzdHJhaWdodAorICogYmFjayB1cCBpbnRvIHRoZSByeCBwYXRoLiAgSXQgZW1iZWRzIGEgd2lyZSBoZWFkZXIgd2hpY2ggaXMgYWxzbyB1c2VkIGJ5CisgKiB0aGUgc2VuZCBwYXRoLCB3aGljaCBpcyBraW5kIG9mIGF3a3dhcmQuCisgKgorICogbV9zb2NrX2l0ZW0gaW5kaWNhdGVzIHRoZSBtZXNzYWdlJ3MgcHJlc2VuY2Ugb24gYSBzb2NrZXQncyBzZW5kIG9yIHJlY2VpdmUKKyAqIHF1ZXVlLiAgbV9ycyB3aWxsIHBvaW50IHRvIHRoYXQgc29ja2V0LgorICoKKyAqIG1fZGFkZHIgaXMgdXNlZCBieSBjYW5jZWxsYXRpb24gdG8gcHJ1bmUgbWVzc2FnZXMgdG8gYSBnaXZlbiBkZXN0aW5hdGlvbi4KKyAqCisgKiBUaGUgUkRTX01TR19PTl9TT0NLIGFuZCBSRFNfTVNHX09OX0NPTk4gZmxhZ3MgYXJlIHVzZWQgdG8gYXZvaWQgbG9jaworICogbmVzdGluZy4gIEFzIHBhdGhzIGl0ZXJhdGUgb3ZlciBtZXNzYWdlcyBvbiBhIHNvY2ssIG9yIGNvbm4sIHRoZXkgbXVzdAorICogYWxzbyBsb2NrIHRoZSBjb25uLCBvciBzb2NrLCB0byByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aG9zZSBsaXN0cyB0b28uCisgKiBUZXN0aW5nIHRoZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgbWVzc2FnZSBpcyBzdGlsbCBvbiB0aGUgbGlzdHMgbGV0cworICogdXMgYXZvaWQgdGVzdGluZyB0aGUgbGlzdF9oZWFkIGRpcmVjdGx5LiAgVGhhdCBtZWFucyBlYWNoIHBhdGggY2FuIHVzZQorICogdGhlIG1lc3NhZ2UncyBsaXN0X2hlYWQgdG8ga2VlcCBpdCBvbiBhIGxvY2FsIGxpc3Qgd2hpbGUganVnZ2xpbmcgbG9ja3MKKyAqIHdpdGhvdXQgY29uZnVzaW5nIHRoZSBvdGhlciBwYXRoLgorICoKKyAqIG1fYWNrX3NlcSBpcyBhbiBvcHRpb25hbCBmaWVsZCBzZXQgYnkgdHJhbnNwb3J0cyB3aG8gbmVlZCBhIGRpZmZlcmVudAorICogc2VxdWVuY2UgbnVtYmVyIHJhbmdlIHRvIGludmFsaWRhdGUuICBUaGV5IGNhbiB1c2UgdGhpcyBpbiBhIGNhbGxiYWNrCisgKiB0aGF0IHRoZXkgcGFzcyB0byByZHNfc2VuZF9kcm9wX2Fja2VkKCkgdG8gc2VlIGlmIGVhY2ggbWVzc2FnZSBoYXMgYmVlbgorICogYWNrZWQuICBUaGUgSEFTX0FDS19TRVEgZmxhZyBjYW4gYmUgdXNlZCB0byBkZXRlY3QgbWVzc2FnZXMgd2hpY2ggaGF2ZW4ndAorICogaGFkIGFja19zZXEgc2V0IHlldC4KKyAqLworI2RlZmluZSBSRFNfTVNHX09OX1NPQ0sJCTEKKyNkZWZpbmUgUkRTX01TR19PTl9DT05OCQkyCisjZGVmaW5lIFJEU19NU0dfSEFTX0FDS19TRVEJMworI2RlZmluZSBSRFNfTVNHX0FDS19SRVFVSVJFRAk0CisjZGVmaW5lIFJEU19NU0dfUkVUUkFOU01JVFRFRAk1CisjZGVmaW5lIFJEU19NU0dfTUFQUEVECQk2CisjZGVmaW5lIFJEU19NU0dfUEFHRVZFQwkJNworCitzdHJ1Y3QgcmRzX21lc3NhZ2UgeworCWF0b21pY190CQltX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJbV9zb2NrX2l0ZW07CisJc3RydWN0IGxpc3RfaGVhZAltX2Nvbm5faXRlbTsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCW1faW5jOworCXU2NAkJCW1fYWNrX3NlcTsKKwlfX2JlMzIJCQltX2RhZGRyOworCXVuc2lnbmVkIGxvbmcJCW1fZmxhZ3M7CisKKwkvKiBOZXZlciBhY2Nlc3MgbV9ycyB3aXRob3V0IGhvbGRpbmcgbV9yc19sb2NrLgorCSAqIExvY2sgbmVzdGluZyBpcworCSAqICBybS0+bV9yc19sb2NrCisJICogICAtPiBycy0+cnNfbG9jaworCSAqLworCXNwaW5sb2NrX3QJCW1fcnNfbG9jazsKKwlzdHJ1Y3QgcmRzX3NvY2sJCSptX3JzOworCXN0cnVjdCByZHNfcmRtYV9vcAkqbV9yZG1hX29wOworCXJkc19yZG1hX2Nvb2tpZV90CW1fcmRtYV9jb29raWU7CisJc3RydWN0IHJkc19tcgkJKm1fcmRtYV9tcjsKKwl1bnNpZ25lZCBpbnQJCW1fbmVudHM7CisJdW5zaWduZWQgaW50CQltX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdAltX3NnWzBdOworfTsKKworLyoKKyAqIFRoZSBSRFMgbm90aWZpZXIgaXMgdXNlZCAob3B0aW9uYWxseSkgdG8gdGVsbCB0aGUgYXBwbGljYXRpb24gYWJvdXQKKyAqIGNvbXBsZXRlZCBSRE1BIG9wZXJhdGlvbnMuIFJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIHdob2xlIHJkcyBtZXNzYWdlCisgKiBhcm91bmQgb24gdGhlIHF1ZXVlLCB3ZSBhbGxvY2F0ZSBhIHNtYWxsIG5vdGlmaWVyIHRoYXQgaXMgcHV0IG9uIHRoZQorICogc29ja2V0J3Mgbm90aWZpZXJfbGlzdC4gTm90aWZpY2F0aW9ucyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogdGhyb3VnaCBjb250cm9sIG1lc3NhZ2VzLgorICovCitzdHJ1Y3QgcmRzX25vdGlmaWVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsKKwl1aW50NjRfdAkJbl91c2VyX3Rva2VuOworCWludAkJCW5fc3RhdHVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAtICB0cmFuc3BvcnQgc3BlY2lmaWMgYmVoYXZpb3VyYWwgaG9va3MKKyAqCisgKiBAeG1pdDogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZAorICogICAgICAgIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzCisgKiAgICAgICAgZG9lc24ndCBuZWVkIHRvIGJlIHJlZW50cmFudCBmb3IgYSBnaXZlbiBjb25uLiAgVGhlIGhlYWRlciBtdXN0IGJlCisgKiAgICAgICAgc2VudCBiZWZvcmUgdGhlIGRhdGEgcGF5bG9hZC4gIC54bWl0IG11c3QgYmUgcHJlcGFyZWQgdG8gc2VuZCBhCisgKiAgICAgICAgbWVzc2FnZSB3aXRoIG5vIGRhdGEgcGF5bG9hZC4gIC54bWl0IHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZgorICogICAgICAgIGJ5dGVzIHRoYXQgd2VyZSBzZW50IGRvd24gdGhlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyBoZWFkZXIgYnl0ZXMuCisgKiAgICAgICAgUmV0dXJuaW5nIDAgdGVsbHMgdGhlIGNhbGxlciB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwZXJmb3JtIGFueQorICogICAgICAgIGFkZGl0aW9uYWwgd29yayBub3cuICBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbnNwb3J0IGhhcworICogICAgICAgIGZpbGxlZCB0aGUgc2VuZGluZyBxdWV1ZSBmb3IgaXRzIGNvbm5lY3Rpb24gYW5kIHdpbGwgaGFuZGxlCisgKiAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmRzIHRocmVhZCB0byBjb250aW51ZSB0aGUgc2VuZCB3aGVuIHNwYWNlIGJlY29tZXMKKyAqICAgICAgICBhdmFpbGFibGUuICBSZXR1cm5pbmcgLUVBR0FJTiB0ZWxscyB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBzZW5kCisgKiAgICAgICAgaW1tZWRpYXRlbHkuICBSZXR1cm5pbmcgLUVOT01FTSB0ZWxscyB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBzZW5kIGF0CisgKiAgICAgICAgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIEBjb25uX3NodXRkb3duOiBjb25uX3NodXRkb3duIHN0b3BzIHRyYWZmaWMgb24gdGhlIGdpdmVuIGNvbm5lY3Rpb24uICBPbmNlCisgKiAgICAgICAgICAgICAgICAgaXQgcmV0dXJucyB0aGUgY29ubmVjdGlvbiBjYW4gbm90IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4KKyAqICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgb25seSBiZSBjYWxsZWQgb25jZSBhZnRlciBjb25uX2Nvbm5lY3QgcmV0dXJucworICogICAgICAgICAgICAgICAgIG5vbi16ZXJvIHN1Y2Nlc3MgYW5kIHdpbGwgVGhlIGNhbGxlciBzZXJpYWxpemVzIHRoaXMgd2l0aAorICogICAgICAgICAgICAgICAgIHRoZSBzZW5kIGFuZCBjb25uZWN0aW5nIHBhdGhzICh4bWl0XyogYW5kIGNvbm5fKikuICBUaGUKKyAqICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgaXMgcmVzcG9uc2libGUgZm9yIG90aGVyIHNlcmlhbGl6YXRpb24sIGluY2x1ZGluZworICogICAgICAgICAgICAgICAgIHJkc19yZWN2X2luY29taW5nKCkuICBUaGlzIGlzIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgYnV0CisgKiAgICAgICAgICAgICAgICAgc2hvdWxkIHRyeSBoYXJkIG5vdCB0byBibG9jay4KKyAqCisgKiBAeG1pdF9jb25nX21hcDogVGhpcyBhc2tzIHRoZSB0cmFuc3BvcnQgdG8gc2VuZCB0aGUgbG9jYWwgYml0bWFwIGRvd24gdGhlCisgKiAJCSAgIGdpdmVuIGNvbm5lY3Rpb24uICBYWFggZ2V0IGEgYmV0dGVyIHN0b3J5IGFib3V0IHRoZSBiaXRtYXAKKyAqIAkJICAgZmxhZyBhbmQgaGVhZGVyLgorICovCisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHsKKwljaGFyCQkJdF9uYW1lW1RSQU5TTkFNU0laXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfaXRlbTsKKwlzdHJ1Y3QgbW9kdWxlCQkqdF9vd25lcjsKKwl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjE7CisKKwlpbnQgKCpsYWRkcl9jaGVjaykoX19iZTMyIGFkZHIpOworCWludCAoKmNvbm5fYWxsb2MpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKKwl2b2lkICgqY29ubl9mcmVlKSh2b2lkICpkYXRhKTsKKwlpbnQgKCpjb25uX2Nvbm5lY3QpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKmNvbm5fc2h1dGRvd24pKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKnhtaXRfcHJlcGFyZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwl2b2lkICgqeG1pdF9jb21wbGV0ZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwlpbnQgKCp4bWl0KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCSAgICB1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKKwlpbnQgKCp4bWl0X2NvbmdfbWFwKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworCWludCAoKnhtaXRfcmRtYSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKTsKKwlpbnQgKCpyZWN2KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCWludCAoKmluY19jb3B5X3RvX3VzZXIpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkJc2l6ZV90IHNpemUpOworCXZvaWQgKCppbmNfcHVyZ2UpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CisJdm9pZCAoKmluY19mcmVlKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworCisJaW50ICgqY21faGFuZGxlX2Nvbm5lY3QpKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKwlpbnQgKCpjbV9pbml0aWF0ZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOworCXZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKwl1bnNpZ25lZCBpbnQgKCpzdGF0c19pbmZvX2NvcHkpKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkJdW5zaWduZWQgaW50IGF2YWlsKTsKKwl2b2lkICgqZXhpdCkodm9pZCk7CisJdm9pZCAqKCpnZXRfbXIpKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbnJfc2csCisJCQlzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOworCXZvaWQgKCpzeW5jX21yKSh2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICgqZnJlZV9tcikodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOworCXZvaWQgKCpmbHVzaF9tcnMpKHZvaWQpOworfTsKKworc3RydWN0IHJkc19zb2NrIHsKKwlzdHJ1Y3Qgc29jawkJcnNfc2s7CisKKwl1NjQJCQlyc191c2VyX2FkZHI7CisJdTY0CQkJcnNfdXNlcl9ieXRlczsKKworCS8qCisJICogYm91bmRfYWRkciB1c2VkIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZywgbm8gSU5BRERSX0FOWQorCSAqIHN1cHBvcnQuCisJICovCisJc3RydWN0IHJiX25vZGUJCXJzX2JvdW5kX25vZGU7CisJX19iZTMyCQkJcnNfYm91bmRfYWRkcjsKKwlfX2JlMzIJCQlyc19jb25uX2FkZHI7CisJX19iZTE2CQkJcnNfYm91bmRfcG9ydDsKKwlfX2JlMTYJCQlyc19jb25uX3BvcnQ7CisKKwkvKgorCSAqIFRoaXMgaXMgb25seSB1c2VkIHRvIGNvbW11bmljYXRlIHRoZSB0cmFuc3BvcnQgYmV0d2VlbiBiaW5kIGFuZAorCSAqIGluaXRpYXRpbmcgY29ubmVjdGlvbnMuICBBbGwgb3RoZXIgdHJhbnMgdXNlIGlzIHJlZmVyZW5jZWQgdGhyb3VnaAorCSAqIHRoZSBjb25uZWN0aW9uLgorCSAqLworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICAgICpyc190cmFuc3BvcnQ7CisKKwkvKgorCSAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLgorCSAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuCisJICovCisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpyc19jb25uOworCisJLyogZmxhZyBpbmRpY2F0aW5nIHdlIHdlcmUgY29uZ2VzdGVkIG9yIG5vdCAqLworCWludAkJCXJzX2Nvbmdlc3RlZDsKKworCS8qIHJzX2xvY2sgcHJvdGVjdHMgYWxsIHRoZXNlIGFkamFjZW50IG1lbWJlcnMgYmVmb3JlIHRoZSBuZXdsaW5lICovCisJc3BpbmxvY2tfdAkJcnNfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX3NlbmRfcXVldWU7CisJdTMyCQkJcnNfc25kX2J5dGVzOworCWludAkJCXJzX3Jjdl9ieXRlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX25vdGlmeV9xdWV1ZTsJLyogY3VycmVudGx5IHVzZWQgZm9yIGZhaWxlZCBSRE1BcyAqLworCisJLyogQ29uZ2VzdGlvbiB3YWtlX3VwLiBJZiByc19jb25nX21vbml0b3IgaXMgc2V0LCB3ZSB1c2UgY29uZ19tYXNrCisJICogdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSB3b2tlbiB1cC4KKwkgKiBJZiBub3Qgc2V0LCB3ZSB1c2UgcnNfY29uZ190cmFjayB0byBmaW5kIG91dCB3aGV0aGVyIGEgY29uZyBtYXAKKwkgKiB1cGRhdGUgYXJyaXZlZC4KKwkgKi8KKwl1aW50NjRfdAkJcnNfY29uZ19tYXNrOworCXVpbnQ2NF90CQlyc19jb25nX25vdGlmeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX2NvbmdfbGlzdDsKKwl1bnNpZ25lZCBsb25nCQlyc19jb25nX3RyYWNrOworCisJLyoKKwkgKiByc19yZWN2X2xvY2sgcHJvdGVjdHMgdGhlIHJlY2VpdmUgcXVldWUsIGFuZCBpcworCSAqIHVzZWQgdG8gc2VyaWFsaXplIHdpdGggcmRzX3JlbGVhc2UuCisJICovCisJcndsb2NrX3QJCXJzX3JlY3ZfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX3JlY3ZfcXVldWU7CisKKwkvKiBqdXN0IGZvciBzdGF0cyByZXBvcnRpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX2l0ZW07CisKKwkvKiB0aGVzZSBoYXZlIHRoZWlyIG93biBsb2NrICovCisJc3BpbmxvY2tfdAkJcnNfcmRtYV9sb2NrOworCXN0cnVjdCByYl9yb290CQlyc19yZG1hX2tleXM7CisKKwkvKiBTb2NrZXQgb3B0aW9ucyAtIGluIGNhc2UgdGhlcmUgd2lsbCBiZSBtb3JlICovCisJdW5zaWduZWQgY2hhcgkJcnNfcmVjdmVyciwKKwkJCQlyc19jb25nX21vbml0b3I7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfc29jayAqcmRzX3NrX3RvX3JzKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgcmRzX3NvY2ssIHJzX3NrKTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnJkc19yc190b19zayhzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXJldHVybiAmcnMtPnJzX3NrOworfQorCisvKgorICogVGhlIHN0YWNrIGFzc2lnbnMgc2tfc25kYnVmIGFuZCBza19yY3ZidWYgdG8gdHdpY2UgdGhlIHNwZWNpZmllZCB2YWx1ZQorICogdG8gYWNjb3VudCBmb3Igb3ZlcmhlYWQuICBXZSBkb24ndCBhY2NvdW50IGZvciBvdmVyaGVhZCwgd2UganVzdCBhcHBseQorICogdGhlIG51bWJlciBvZiBwYXlsb2FkIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJkc19za19zbmRidWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gcmRzX3JzX3RvX3NrKHJzKS0+c2tfc25kYnVmIC8gMjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHJkc19za19yY3ZidWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gcmRzX3JzX3RvX3NrKHJzKS0+c2tfcmN2YnVmIC8gMjsKK30KKworc3RydWN0IHJkc19zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2Nvbm5fcmVzZXQ7CisJdWludDY0X3QJc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtOworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX29sZF9zZXE7CisJdWludDY0X3QJc19yZWN2X2Ryb3Bfbm9fc29jazsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9kZWFkX3NvY2s7CisJdWludDY0X3QJc19yZWN2X2RlbGl2ZXJfcmFjZWQ7CisJdWludDY0X3QJc19yZWN2X2RlbGl2ZXJlZDsKKwl1aW50NjRfdAlzX3JlY3ZfcXVldWVkOworCXVpbnQ2NF90CXNfcmVjdl9pbW1lZGlhdGVfcmV0cnk7CisJdWludDY0X3QJc19yZWN2X2RlbGF5ZWRfcmV0cnk7CisJdWludDY0X3QJc19yZWN2X2Fja19yZXF1aXJlZDsKKwl1aW50NjRfdAlzX3JlY3ZfcmRtYV9ieXRlczsKKwl1aW50NjRfdAlzX3JlY3ZfcGluZzsKKwl1aW50NjRfdAlzX3NlbmRfcXVldWVfZW1wdHk7CisJdWludDY0X3QJc19zZW5kX3F1ZXVlX2Z1bGw7CisJdWludDY0X3QJc19zZW5kX3NlbV9jb250ZW50aW9uOworCXVpbnQ2NF90CXNfc2VuZF9zZW1fcXVldWVfcmFjZWQ7CisJdWludDY0X3QJc19zZW5kX2ltbWVkaWF0ZV9yZXRyeTsKKwl1aW50NjRfdAlzX3NlbmRfZGVsYXllZF9yZXRyeTsKKwl1aW50NjRfdAlzX3NlbmRfZHJvcF9hY2tlZDsKKwl1aW50NjRfdAlzX3NlbmRfYWNrX3JlcXVpcmVkOworCXVpbnQ2NF90CXNfc2VuZF9xdWV1ZWQ7CisJdWludDY0X3QJc19zZW5kX3JkbWE7CisJdWludDY0X3QJc19zZW5kX3JkbWFfYnl0ZXM7CisJdWludDY0X3QJc19zZW5kX3Bvbmc7CisJdWludDY0X3QJc19wYWdlX3JlbWFpbmRlcl9oaXQ7CisJdWludDY0X3QJc19wYWdlX3JlbWFpbmRlcl9taXNzOworCXVpbnQ2NF90CXNfY29weV90b191c2VyOworCXVpbnQ2NF90CXNfY29weV9mcm9tX3VzZXI7CisJdWludDY0X3QJc19jb25nX3VwZGF0ZV9xdWV1ZWQ7CisJdWludDY0X3QJc19jb25nX3VwZGF0ZV9yZWNlaXZlZDsKKwl1aW50NjRfdAlzX2Nvbmdfc2VuZF9lcnJvcjsKKwl1aW50NjRfdAlzX2Nvbmdfc2VuZF9ibG9ja2VkOworfTsKKworLyogYWZfcmRzLmMgKi8KK3ZvaWQgcmRzX3NvY2tfYWRkcmVmKHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfc29ja19wdXQoc3RydWN0IHJkc19zb2NrICpycyk7Cit2b2lkIHJkc193YWtlX3NrX3NsZWVwKHN0cnVjdCByZHNfc29jayAqcnMpOworc3RhdGljIGlubGluZSB2b2lkIF9fcmRzX3dha2Vfc2tfc2xlZXAoc3RydWN0IHNvY2sgKnNrKQoreworCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0cSA9IHNrLT5za19zbGVlcDsKKworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpICYmIHdhaXRxKQorCQl3YWtlX3VwKHdhaXRxKTsKK30KK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfcG9sbF93YWl0cTsKKworCisvKiBiaW5kLmMgKi8KK2ludCByZHNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pOwordm9pZCByZHNfcmVtb3ZlX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMpOworc3RydWN0IHJkc19zb2NrICpyZHNfZmluZF9ib3VuZChfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQpOworCisvKiBjb25nLmMgKi8KK2ludCByZHNfY29uZ19nZXRfbWFwcyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19hZGRfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19zZXRfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpOwordm9pZCByZHNfY29uZ19jbGVhcl9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCk7CitpbnQgcmRzX2Nvbmdfd2FpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0LCBpbnQgbm9uYmxvY2ssIHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCk7Cit2b2lkIHJkc19jb25nX21hcF91cGRhdGVkKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdWludDY0X3QpOworaW50IHJkc19jb25nX3VwZGF0ZWRfc2luY2UodW5zaWduZWQgbG9uZyAqcmVjZW50KTsKK3ZvaWQgcmRzX2NvbmdfYWRkX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKik7Cit2b2lkIHJkc19jb25nX3JlbW92ZV9zb2NrZXQoc3RydWN0IHJkc19zb2NrICopOwordm9pZCByZHNfY29uZ19leGl0KHZvaWQpOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfY29uZ191cGRhdGVfYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKworLyogY29ubi5jICovCitpbnQgX19pbml0IHJkc19jb25uX2luaXQodm9pZCk7Cit2b2lkIHJkc19jb25uX2V4aXQodm9pZCk7CitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApOworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApOwordm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25uX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJICBpbnQgKCp2aXNpdG9yKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwgdm9pZCAqKSwKKwkJCSAgc2l6ZV90IGl0ZW1fbGVuKTsKK3ZvaWQgX19yZHNfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKQorCQkJCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKyNkZWZpbmUgcmRzX2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUzogIiBmbXQpCisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl90cmFuc2l0aW9uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IG9sZCwgaW50IG5ldykKK3sKKwlyZXR1cm4gYXRvbWljX2NtcHhjaGcoJmNvbm4tPmNfc3RhdGUsIG9sZCwgbmV3KSA9PSBvbGQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl9zdGF0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX3VwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX1VQOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fY29ubmVjdGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HOworfQorCisvKiBtZXNzYWdlLmMgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfYWxsb2ModW5zaWduZWQgaW50IG5lbnRzLCBnZnBfdCBnZnApOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyAqcGFnZV9hZGRycywgdW5zaWduZWQgaW50IHRvdGFsX2xlbik7Cit2b2lkIHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJIF9fYmUxNiBkcG9ydCwgdTY0IHNlcSk7CitpbnQgcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICpwb3MsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50ICpidWZsZW4pOworaW50IHJkc19tZXNzYWdlX2FkZF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgdmVyc2lvbik7CitpbnQgcmRzX21lc3NhZ2VfZ2V0X3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCAqdmVyc2lvbik7CitpbnQgcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdTMyIHJfa2V5LCB1MzIgb2Zmc2V0KTsKK2ludCByZHNfbWVzc2FnZV9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJCQkgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19tZXNzYWdlX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV93YWl0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV91bm1hcHBlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oc3RydWN0IHJkc19oZWFkZXIgKmhkcikKK3sKKwloZHItPmhfY3N1bSA9IDA7CisJaGRyLT5oX2NzdW0gPSBpcF9mYXN0X2NzdW0oKHZvaWQgKikgaGRyLCBzaXplb2YoKmhkcikgPj4gMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShjb25zdCBzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyKQoreworCXJldHVybiAhaGRyLT5oX2NzdW0gfHwgaXBfZmFzdF9jc3VtKCh2b2lkICopIGhkciwgc2l6ZW9mKCpoZHIpID4+IDIpID09IDA7Cit9CisKKworLyogcGFnZS5jICovCitpbnQgcmRzX3BhZ2VfcmVtYWluZGVyX2FsbG9jKHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJCSAgICAgZ2ZwX3QgZ2ZwKTsKK2ludCByZHNfcGFnZV9jb3B5X3VzZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJICAgICAgIGludCB0b191c2VyKTsKKyNkZWZpbmUgcmRzX3BhZ2VfY29weV90b191c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcykgXAorCXJkc19wYWdlX2NvcHlfdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMsIDEpCisjZGVmaW5lIHJkc19wYWdlX2NvcHlfZnJvbV91c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcykgXAorCXJkc19wYWdlX2NvcHlfdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMsIDApCit2b2lkIHJkc19wYWdlX2V4aXQodm9pZCk7CisKKy8qIHJlY3YuYyAqLwordm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgX19iZTMyIHNhZGRyKTsKK3ZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgICAgIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pOworaW50IHJkc19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3Qgc2l6ZSwgaW50IG1zZ19mbGFncyk7Cit2b2lkIHJkc19jbGVhcl9yZWN2X3F1ZXVlKHN0cnVjdCByZHNfc29jayAqcnMpOworaW50IHJkc19ub3RpZnlfcXVldWVfZ2V0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZyk7Cit2b2lkIHJkc19pbmNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJICAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJICAgICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBpbnQgZmxpcCk7CisKKy8qIHNlbmQuYyAqLworaW50IHJkc19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3QgcGF5bG9hZF9sZW4pOwordm9pZCByZHNfc2VuZF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3N0cnVjdCBzb2NrYWRkcl9pbjsKK3ZvaWQgcmRzX3NlbmRfZHJvcF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRlc3QpOwordHlwZWRlZiBpbnQgKCppc19hY2tlZF9mdW5jKShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCB1aW50NjRfdCBhY2spOwordm9pZCByZHNfc2VuZF9kcm9wX2Fja2VkKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IGFjaywKKwkJCSBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKTsKK2ludCByZHNfc2VuZF9hY2tlZF9iZWZvcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgc2VxKTsKK3ZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cyk7CitpbnQgcmRzX3NlbmRfcG9uZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUxNiBkcG9ydCk7CitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19zZW5kX2dldF9tZXNzYWdlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqLAorCQkJCQkgc3RydWN0IHJkc19yZG1hX29wICopOworCisvKiByZG1hLmMgKi8KK3ZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpOworCisvKiBzdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc19zdGF0aXN0aWNzLCByZHNfc3RhdHMpOworI2RlZmluZSByZHNfc3RhdHNfaW5jX3doaWNoKHdoaWNoLCBtZW1iZXIpIGRvIHsJCVwKKwlwZXJfY3B1KHdoaWNoLCBnZXRfY3B1KCkpLm1lbWJlcisrOwkJXAorCXB1dF9jcHUoKTsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIHJkc19zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19zdGF0cywgbWVtYmVyKQorI2RlZmluZSByZHNfc3RhdHNfYWRkX3doaWNoKHdoaWNoLCBtZW1iZXIsIGNvdW50KSBkbyB7CQlcCisJcGVyX2NwdSh3aGljaCwgZ2V0X2NwdSgpKS5tZW1iZXIgKz0gY291bnQ7CVwKKwlwdXRfY3B1KCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByZHNfc3RhdHNfYWRkKG1lbWJlciwgY291bnQpIHJkc19zdGF0c19hZGRfd2hpY2gocmRzX3N0YXRzLCBtZW1iZXIsIGNvdW50KQoraW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCk7Cit2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKTsKKworLyogc3lzY3RsLmMgKi8KK2ludCBfX2luaXQgcmRzX3N5c2N0bF9pbml0KHZvaWQpOwordm9pZCByZHNfc3lzY3RsX2V4aXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9taW47CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9kZWZhdWx0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfbWF4OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0czsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX3BpbmdfZW5hYmxlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF90cmFjZV9mbGFnczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfdHJhY2VfbGV2ZWw7CisKKy8qIHRocmVhZHMuYyAqLworaW50IF9faW5pdCByZHNfdGhyZWFkc19pbml0KHZvaWQpOwordm9pZCByZHNfdGhyZWFkc19leGl0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfd3E7Cit2b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIHJkc19zaHV0ZG93bl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfcmVjdl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCisvKiB0cmFuc3BvcnQuYyAqLworaW50IHJkc190cmFuc19yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwordm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOworc3RydWN0IHJkc190cmFuc3BvcnQgKnJkc190cmFuc19nZXRfcHJlZmVycmVkKF9fYmUzMiBhZGRyKTsKK3Vuc2lnbmVkIGludCByZHNfdHJhbnNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKK2ludCBfX2luaXQgcmRzX3RyYW5zX2luaXQodm9pZCk7Cit2b2lkIHJkc190cmFuc19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmVjdi5jIGIvbmV0L3Jkcy9yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxMThjNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmVjdi5jCkBAIC0wLDAgKzEsNTQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKK3ZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkgIF9fYmUzMiBzYWRkcikKK3sKKwlhdG9taWNfc2V0KCZpbmMtPmlfcmVmY291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZpbmMtPmlfaXRlbSk7CisJaW5jLT5pX2Nvbm4gPSBjb25uOworCWluYy0+aV9zYWRkciA9IHNhZGRyOworCWluYy0+aV9yZG1hX2Nvb2tpZSA9IDA7Cit9CisKK3ZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXJkc2RlYnVnKCJhZGRyZWYgaW5jICVwIHJlZiAlZFxuIiwgaW5jLCBhdG9taWNfcmVhZCgmaW5jLT5pX3JlZmNvdW50KSk7CisJYXRvbWljX2luYygmaW5jLT5pX3JlZmNvdW50KTsKK30KKwordm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJcmRzZGVidWcoInB1dCBpbmMgJXAgcmVmICVkXG4iLCBpbmMsIGF0b21pY19yZWFkKCZpbmMtPmlfcmVmY291bnQpKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW5jLT5pX3JlZmNvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmluYy0+aV9pdGVtKSk7CisKKwkJaW5jLT5pX2Nvbm4tPmNfdHJhbnMtPmluY19mcmVlKGluYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfcmVjdl9yY3ZidWZfZGVsdGEoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLAorCQkJCSAgaW50IGRlbHRhLCBfX2JlMTYgcG9ydCkKK3sKKwlpbnQgbm93X2Nvbmdlc3RlZDsKKworCWlmIChkZWx0YSA9PSAwKQorCQlyZXR1cm47CisKKwlycy0+cnNfcmN2X2J5dGVzICs9IGRlbHRhOworCW5vd19jb25nZXN0ZWQgPSBycy0+cnNfcmN2X2J5dGVzID4gcmRzX3NrX3JjdmJ1Zihycyk7CisKKwlyZHNkZWJ1ZygicnMgJXAgKCVwSTQ6JXUpIHJlY3YgYnl0ZXMgJWQgYnVmICVkICIKKwkgICJub3dfY29uZyAlZCBkZWx0YSAlZFxuIiwKKwkgIHJzLCAmcnMtPnJzX2JvdW5kX2FkZHIsCisJICBudG9ocyhycy0+cnNfYm91bmRfcG9ydCksIHJzLT5yc19yY3ZfYnl0ZXMsCisJICByZHNfc2tfcmN2YnVmKHJzKSwgbm93X2Nvbmdlc3RlZCwgZGVsdGEpOworCisJLyogd2Fzbid0IC0+IGFtIGNvbmdlc3RlZCAqLworCWlmICghcnMtPnJzX2Nvbmdlc3RlZCAmJiBub3dfY29uZ2VzdGVkKSB7CisJCXJzLT5yc19jb25nZXN0ZWQgPSAxOworCQlyZHNfY29uZ19zZXRfYml0KG1hcCwgcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9CisJLyogd2FzIC0+IGFyZW4ndCBjb25nZXN0ZWQgKi8KKwkvKiBSZXF1aXJlIG1vcmUgZnJlZSBzcGFjZSBiZWZvcmUgcmVwb3J0aW5nIHVuY29uZ2VzdGVkIHRvIHByZXZlbnQKKwkgICBib3VuY2luZyBjb25nL3VuY29uZyBzdGF0ZSB0b28gb2Z0ZW4gKi8KKwllbHNlIGlmIChycy0+cnNfY29uZ2VzdGVkICYmIChycy0+cnNfcmN2X2J5dGVzIDwgKHJkc19za19yY3ZidWYocnMpLzIpKSkgeworCQlycy0+cnNfY29uZ2VzdGVkID0gMDsKKwkJcmRzX2NvbmdfY2xlYXJfYml0KG1hcCwgcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9CisKKwkvKiBkbyBub3RoaW5nIGlmIG5vIGNoYW5nZSBpbiBjb25nIHN0YXRlICovCit9CisKKy8qCisgKiBQcm9jZXNzIGFsbCBleHRlbnNpb24gaGVhZGVycyB0aGF0IGNvbWUgd2l0aCB0aGlzIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19yZWN2X2luY29taW5nX2V4dGhkcnMoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaW5jLT5pX2hkcjsKKwl1bnNpZ25lZCBpbnQgcG9zID0gMCwgdHlwZSwgbGVuOworCXVuaW9uIHsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gdmVyc2lvbjsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgcmRtYTsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCByZG1hX2Rlc3Q7CisJfSBidWZmZXI7CisKKwl3aGlsZSAoMSkgeworCQlsZW4gPSBzaXplb2YoYnVmZmVyKTsKKwkJdHlwZSA9IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgJmJ1ZmZlciwgJmxlbik7CisJCWlmICh0eXBlID09IFJEU19FWFRIRFJfTk9ORSkKKwkJCWJyZWFrOworCQkvKiBQcm9jZXNzIGV4dGVuc2lvbiBoZWFkZXIgaGVyZSAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBSRFNfRVhUSERSX1JETUE6CisJCQlyZHNfcmRtYV91bnVzZShycywgYmUzMl90b19jcHUoYnVmZmVyLnJkbWEuaF9yZG1hX3JrZXkpLCAwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkRTX0VYVEhEUl9SRE1BX0RFU1Q6CisJCQkvKiBXZSBpZ25vcmUgdGhlIHNpemUgZm9yIG5vdy4gV2UgY291bGQgc3Rhc2ggaXQKKwkJCSAqIHNvbWV3aGVyZSBhbmQgdXNlIGl0IGZvciBlcnJvciBjaGVja2luZy4gKi8KKwkJCWluYy0+aV9yZG1hX2Nvb2tpZSA9IHJkc19yZG1hX21ha2VfY29va2llKAorCQkJCQliZTMyX3RvX2NwdShidWZmZXIucmRtYV9kZXN0LmhfcmRtYV9ya2V5KSwKKwkJCQkJYmUzMl90b19jcHUoYnVmZmVyLnJkbWFfZGVzdC5oX3JkbWFfb2Zmc2V0KSk7CisKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogVGhlIHRyYW5zcG9ydCBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyCisgKiByeCBhbmQgY29ubiByZXNldCBvbiB0aGlzIHNwZWNpZmljIGNvbm4uCisgKgorICogV2UgY3VycmVudGx5IGFzc2VydCB0aGF0IG9ubHkgb25lIGZyYWdtZW50ZWQgbWVzc2FnZSB3aWxsIGJlIHNlbnQKKyAqIGRvd24gYSBjb25uZWN0aW9uIGF0IGEgdGltZS4gIFRoaXMgbGV0cyB1cyByZWFzc2VtYmxlIGluIHRoZSBjb25uCisgKiBpbnN0ZWFkIG9mIHBlci1mbG93IHdoaWNoIG1lYW5zIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBnbyBkaWdnaW5nIHRocm91Z2gKKyAqIGZsb3dzIHRvIHRlYXIgZG93biBwYXJ0aWFsIHJlYXNzZW1ibHkgcHJvZ3Jlc3Mgb24gY29ubiBmYWlsdXJlIGFuZAorICogd2Ugc2F2ZSBmbG93IGxvb2t1cCBhbmQgbG9ja2luZyBmb3IgZWFjaCBmcmFnIGFycml2YWwuICBJdCBkb2VzIG1lYW4KKyAqIHRoYXQgc21hbGwgbWVzc2FnZXMgd2lsbCB3YWl0IGJlaGluZCBsYXJnZSBvbmVzLiAgRnJhZ21lbnRpbmcgYXQgYWxsCisgKiBpcyBvbmx5IHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIHByZS1wb3N0ZWQgYnVmZmVycy4KKyAqCisgKiBUaGUgY2FsbGVyIHBhc3NlcyBpbiBzYWRkciBhbmQgZGFkZHIgaW5zdGVhZCBvZiB1cyBnZXR0aW5nIGl0IGZyb20gdGhlCisgKiBjb25uLiAgVGhpcyBsZXRzIGxvb3BiYWNrLCB3aG8gb25seSBoYXMgb25lIGNvbm4gZm9yIGJvdGggZGlyZWN0aW9ucywKKyAqIHRlbGwgdXMgd2hpY2ggcm9sZXMgdGhlIGFkZHJzIGluIHRoZSBjb25uIGFyZSBwbGF5aW5nIGZvciB0aGlzIG1lc3NhZ2UuCisgKi8KK3ZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgICAgIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHNvY2sgKnNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbmMtPmlfY29ubiA9IGNvbm47CisJaW5jLT5pX3J4X2ppZmZpZXMgPSBqaWZmaWVzOworCisJcmRzZGVidWcoImNvbm4gJXAgbmV4dCAlbGx1IGluYyAlcCBzZXEgJWxsdSBsZW4gJXUgc3BvcnQgJXUgZHBvcnQgJXUgIgorCQkgImZsYWdzIDB4JXggcnhfamlmZmllcyAlbHVcbiIsIGNvbm4sCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWNvbm4tPmNfbmV4dF9yeF9zZXEsCisJCSBpbmMsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSksCisJCSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJIGJlMTZfdG9fY3B1KGluYy0+aV9oZHIuaF9zcG9ydCksCisJCSBiZTE2X3RvX2NwdShpbmMtPmlfaGRyLmhfZHBvcnQpLAorCQkgaW5jLT5pX2hkci5oX2ZsYWdzLAorCQkgaW5jLT5pX3J4X2ppZmZpZXMpOworCisJLyoKKwkgKiBTZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBvbmx5IGluY3JlYXNlLiAgTWVzc2FnZXMgZ2V0IHRoZWlyCisJICogc2VxdWVuY2UgbnVtYmVyIGFzIHRoZXkncmUgcXVldWVkIGluIGEgc2VuZGluZyBjb25uLiAgVGhleQorCSAqIGNhbiBiZSBkcm9wcGVkLCB0aG91Z2gsIGlmIHRoZSBzZW5kaW5nIHNvY2tldCBpcyBjbG9zZWQgYmVmb3JlCisJICogdGhleSBoaXQgdGhlIHdpcmUuICBTbyBzZXF1ZW5jZSBudW1iZXJzIGNhbiBza2lwIGZvcndhcmQKKwkgKiB1bmRlciBub3JtYWwgb3BlcmF0aW9uLiAgVGhleSBjYW4gYWxzbyBkcm9wIGJhY2sgaW4gdGhlIGNvbm4KKwkgKiBmYWlsb3ZlciBjYXNlIGFzIHByZXZpb3VzbHkgc2VudCBtZXNzYWdlcyBhcmUgcmVzZW50IGRvd24gdGhlCisJICogbmV3IGluc3RhbmNlIG9mIGEgY29ubi4gIFdlIGRyb3AgdGhvc2UsIG90aGVyd2lzZSB3ZSBoYXZlCisJICogdG8gYXNzdW1lIHRoYXQgdGhlIG5leHQgdmFsaWQgc2VxIGRvZXMgbm90IGNvbWUgYWZ0ZXIgYQorCSAqIGhvbGUgaW4gdGhlIGZyYWdtZW50IHN0cmVhbS4KKwkgKgorCSAqIFRoZSBoZWFkZXJzIGRvbid0IGdpdmUgdXMgYSB3YXkgdG8gcmVhbGl6ZSBpZiBmcmFnbWVudHMgb2YKKwkgKiBhIG1lc3NhZ2UgaGF2ZSBiZWVuIGRyb3BwZWQuICBXZSBhc3N1bWUgdGhhdCBmcmFncyB0aGF0IGFycml2ZQorCSAqIHRvIGEgZmxvdyBhcmUgcGFydCBvZiB0aGUgY3VycmVudCBtZXNzYWdlIG9uIHRoZSBmbG93IHRoYXQgaXMKKwkgKiBiZWluZyByZWFzc2VtYmxlZC4gIFRoaXMgbWVhbnMgdGhhdCBzZW5kZXJzIGNhbid0IGRyb3AgbWVzc2FnZXMKKwkgKiBmcm9tIHRoZSBzZW5kaW5nIGNvbm4gdW50aWwgYWxsIHRoZWlyIGZyYWdzIGFyZSBzZW50LgorCSAqCisJICogWFhYIHdlIGNvdWxkIHNwZW5kIG1vcmUgb24gdGhlIHdpcmUgdG8gZ2V0IG1vcmUgcm9idXN0IGZhaWx1cmUKKwkgKiBkZXRlY3Rpb24sIGFyZ3VhYmx5IHdvcnRoIGl0IHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbi4KKwkgKi8KKwlpZiAoYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSA8IGNvbm4tPmNfbmV4dF9yeF9zZXEKKwkgJiYgKGluYy0+aV9oZHIuaF9mbGFncyAmIFJEU19GTEFHX1JFVFJBTlNNSVRURUQpKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3Bfb2xkX3NlcSk7CisJCWdvdG8gb3V0OworCX0KKwljb25uLT5jX25leHRfcnhfc2VxID0gYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSArIDE7CisKKwlpZiAocmRzX3N5c2N0bF9waW5nX2VuYWJsZSAmJiBpbmMtPmlfaGRyLmhfZHBvcnQgPT0gMCkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9waW5nKTsKKwkJcmRzX3NlbmRfcG9uZyhjb25uLCBpbmMtPmlfaGRyLmhfc3BvcnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlycyA9IHJkc19maW5kX2JvdW5kKGRhZGRyLCBpbmMtPmlfaGRyLmhfZHBvcnQpOworCWlmIChycyA9PSBOVUxMKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3Bfbm9fc29jayk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFByb2Nlc3MgZXh0ZW5zaW9uIGhlYWRlcnMgKi8KKwlyZHNfcmVjdl9pbmNvbWluZ19leHRoZHJzKGluYywgcnMpOworCisJLyogV2UgY2FuIGJlIHJhY2luZyB3aXRoIHJkc19yZWxlYXNlKCkgd2hpY2ggbWFya3MgdGhlIHNvY2tldCBkZWFkLiAqLworCXNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKworCS8qIHNlcmlhbGl6ZSB3aXRoIHJkc19yZWxlYXNlIC0+IHNvY2tfb3JwaGFuICovCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKKwkJcmRzZGVidWcoImFkZGluZyBpbmMgJXAgdG8gcnMgJXAncyByZWN2IHF1ZXVlXG4iLCBpbmMsIHJzKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfcXVldWVkKTsKKwkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJICAgICAgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJICAgICAgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwkJcmRzX2luY19hZGRyZWYoaW5jKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW5jLT5pX2l0ZW0sICZycy0+cnNfcmVjdl9xdWV1ZSk7CisJCV9fcmRzX3dha2Vfc2tfc2xlZXAoc2spOworCX0gZWxzZSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfZGVhZF9zb2NrKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChycykKKwkJcmRzX3NvY2tfcHV0KHJzKTsKK30KKworLyoKKyAqIGJlIHZlcnkgY2FyZWZ1bCBoZXJlLiAgVGhpcyBpcyBiZWluZyBjYWxsZWQgYXMgdGhlIGNvbmRpdGlvbiBpbgorICogd2FpdF9ldmVudF8qKCkgbmVlZHMgdG8gY29wZSB3aXRoIGJlaW5nIGNhbGxlZCBtYW55IHRpbWVzLgorICovCitzdGF0aWMgaW50IHJkc19uZXh0X2luY29taW5nKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfaW5jb21pbmcgKippbmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgqaW5jID09IE5VTEwpIHsKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfcmVjdl9xdWV1ZSkpIHsKKwkJCSppbmMgPSBsaXN0X2VudHJ5KHJzLT5yc19yZWN2X3F1ZXVlLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19pbmNvbWluZywKKwkJCQkJICBpX2l0ZW0pOworCQkJcmRzX2luY19hZGRyZWYoKmluYyk7CisJCX0KKwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiAqaW5jICE9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3N0aWxsX3F1ZXVlZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCQkgICAgaW50IGRyb3ApCit7CisJc3RydWN0IHNvY2sgKnNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZpbmMtPmlfaXRlbSkpIHsKKwkJcmV0ID0gMTsKKwkJaWYgKGRyb3ApIHsKKwkJCS8qIFhYWCBtYWtlIHN1cmUgdGhpcyBpX2Nvbm4gaXMgcmVsaWFibGUgKi8KKwkJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCQkgICAgICAtYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCQlsaXN0X2RlbF9pbml0KCZpbmMtPmlfaXRlbSk7CisJCQlyZHNfaW5jX3B1dChpbmMpOworCQl9CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKKwlyZHNkZWJ1ZygiaW5jICVwIHJzICVwIHN0aWxsICVkIGRyb3BwZWQgJWRcbiIsIGluYywgcnMsIHJldCwgZHJvcCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1bGwgZXJyb3JzIG9mZiB0aGUgZXJyb3IgcXVldWUuCisgKiBJZiBtc2doZHIgaXMgTlVMTCwgd2Ugd2lsbCBqdXN0IHB1cmdlIHRoZSBlcnJvciBxdWV1ZS4KKyAqLworaW50IHJkc19ub3RpZnlfcXVldWVfZ2V0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZ2hkcikKK3sKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKwlzdHJ1Y3QgcmRzX3JkbWFfbm90aWZ5IGNtc2c7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgbWF4X21lc3NhZ2VzID0gfjBVOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGNvcHkpOworCWludCBlcnIgPSAwOworCisKKwkvKiBwdXRfY21zZyBjb3BpZXMgdG8gdXNlciBzcGFjZSBhbmQgdGh1cyBtYXkgc2xlZXAuIFdlIGNhbid0IGRvIHRoaXMKKwkgKiB3aXRoIHJzX2xvY2sgaGVsZCwgc28gZmlyc3QgZ3JhYiBhcyBtYW55IG5vdGlmaWNhdGlvbnMgYXMgd2UgY2FuIHN0dWZmCisJICogaW4gdGhlIHVzZXIgcHJvdmlkZWQgY21zZyBidWZmZXIuIFdlIGRvbid0IHRyeSB0byBjb3B5IG1vcmUsIHRvIGF2b2lkCisJICogbG9zaW5nIG5vdGlmaWNhdGlvbnMgLSBleGNlcHQgd2hlbiB0aGUgYnVmZmVyIGlzIHNvIHNtYWxsIHRoYXQgaXQgd291bGRuJ3QKKwkgKiBldmVuIGhvbGQgYSBzaW5nbGUgbm90aWZpY2F0aW9uLiBUaGVuIHdlIGdpdmUgaGltIGFzIG11Y2ggb2YgdGhpcyBzaW5nbGUKKwkgKiBtc2cgYXMgd2UgY2FuIHNxdWVlemUgaW4sIGFuZCBzZXQgTVNHX0NUUlVOQy4KKwkgKi8KKwlpZiAobXNnaGRyKSB7CisJCW1heF9tZXNzYWdlcyA9IG1zZ2hkci0+bXNnX2NvbnRyb2xsZW4gLyBDTVNHX1NQQUNFKHNpemVvZihjbXNnKSk7CisJCWlmICghbWF4X21lc3NhZ2VzKQorCQkJbWF4X21lc3NhZ2VzID0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpICYmIGNvdW50IDwgbWF4X21lc3NhZ2VzKSB7CisJCW5vdGlmaWVyID0gbGlzdF9lbnRyeShycy0+cnNfbm90aWZ5X3F1ZXVlLm5leHQsCisJCQkJc3RydWN0IHJkc19ub3RpZmllciwgbl9saXN0KTsKKwkJbGlzdF9tb3ZlKCZub3RpZmllci0+bl9saXN0LCAmY29weSk7CisJCWNvdW50Kys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY29weSkpIHsKKwkJbm90aWZpZXIgPSBsaXN0X2VudHJ5KGNvcHkubmV4dCwgc3RydWN0IHJkc19ub3RpZmllciwgbl9saXN0KTsKKworCQlpZiAobXNnaGRyKSB7CisJCQljbXNnLnVzZXJfdG9rZW4gPSBub3RpZmllci0+bl91c2VyX3Rva2VuOworCQkJY21zZy5zdGF0dXMgID0gbm90aWZpZXItPm5fc3RhdHVzOworCisJCQllcnIgPSBwdXRfY21zZyhtc2doZHIsIFNPTF9SRFMsIFJEU19DTVNHX1JETUFfU1RBVFVTLAorCQkJCQlzaXplb2YoY21zZyksICZjbXNnKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisJCX0KKworCQlsaXN0X2RlbF9pbml0KCZub3RpZmllci0+bl9saXN0KTsKKwkJa2ZyZWUobm90aWZpZXIpOworCX0KKworCS8qIElmIHdlIGJhaWxlZCBvdXQgYmVjYXVzZSBvZiBhbiBlcnJvciBpbiBwdXRfY21zZywKKwkgKiB3ZSBtYXkgYmUgbGVmdCB3aXRoIG9uZSBvciBtb3JlIG5vdGlmaWNhdGlvbnMgdGhhdCB3ZQorCSAqIGRpZG4ndCBwcm9jZXNzLiBSZXR1cm4gdGhlbSB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmNvcHkpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCQlsaXN0X3NwbGljZSgmY29weSwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBRdWV1ZSBhIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyBpbnQgcmRzX25vdGlmeV9jb25nKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZ2hkcikKK3sKKwl1aW50NjRfdCBub3RpZnkgPSBycy0+cnNfY29uZ19ub3RpZnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJZXJyID0gcHV0X2Ntc2cobXNnaGRyLCBTT0xfUkRTLCBSRFNfQ01TR19DT05HX1VQREFURSwKKwkJCXNpemVvZihub3RpZnkpLCAmbm90aWZ5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJcnMtPnJzX2Nvbmdfbm90aWZ5ICY9IH5ub3RpZnk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVjZWl2ZSBhbnkgY29udHJvbCBtZXNzYWdlcy4KKyAqLworc3RhdGljIGludCByZHNfY21zZ19yZWN2KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IG1zZ2hkciAqbXNnKQoreworCWludCByZXQgPSAwOworCisJaWYgKGluYy0+aV9yZG1hX2Nvb2tpZSkgeworCQlyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SRFMsIFJEU19DTVNHX1JETUFfREVTVCwKKwkJCQlzaXplb2YoaW5jLT5pX3JkbWFfY29va2llKSwgJmluYy0+aV9yZG1hX2Nvb2tpZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcmRzX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBzaXplLCBpbnQgbXNnX2ZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCWxvbmcgdGltZW87CisJaW50IHJldCA9IDAsIG5vbmJsb2NrID0gbXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCByZHNfaW5jb21pbmcgKmluYyA9IE5VTEw7CisKKwkvKiB1ZHBfcmVjdm1zZygpLT5zb2NrX3JlY3Z0aW1lbygpIGdldHMgYXdheSB3aXRob3V0IGxvY2tpbmcgdG9vLi4gKi8KKwl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTsKKworCXJkc2RlYnVnKCJzaXplICV6dSBmbGFncyAweCV4IHRpbWVvICVsZFxuIiwgc2l6ZSwgbXNnX2ZsYWdzLCB0aW1lbyk7CisKKwlpZiAobXNnX2ZsYWdzICYgTVNHX09PQikKKwkJZ290byBvdXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBub3RpZmljYXRpb25zLCBkbyB0aG9zZSAtIGFuZCBub3RoaW5nIGVsc2UgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpKSB7CisJCXJldCA9IHJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBtc2cpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KSB7CisJCXJldCA9IHJkc19ub3RpZnlfY29uZyhycywgbXNnKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJaWYgKCFyZHNfbmV4dF9pbmNvbWluZyhycywgJmluYykpIHsKKwkJCWlmIChub25ibG9jaykgeworCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRpbWVvID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnNrLT5za19zbGVlcCwKKwkJCQkJCXJkc19uZXh0X2luY29taW5nKHJzLCAmaW5jKSwKKwkJCQkJCXRpbWVvKTsKKwkJCXJkc2RlYnVnKCJyZWN2bXNnIHdva2UgaW5jICVwIHRpbWVvICVsZFxuIiwgaW5jLAorCQkJCSB0aW1lbyk7CisJCQlpZiAodGltZW8gPiAwIHx8IHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSB0aW1lbzsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKworCQlyZHNkZWJ1ZygiY29weWluZyBpbmMgJXAgZnJvbSAlcEk0OiV1IHRvIHVzZXJcbiIsIGluYywKKwkJCSAmaW5jLT5pX2Nvbm4tPmNfZmFkZHIsCisJCQkgbnRvaHMoaW5jLT5pX2hkci5oX3Nwb3J0KSk7CisJCXJldCA9IGluYy0+aV9jb25uLT5jX3RyYW5zLT5pbmNfY29weV90b191c2VyKGluYywgbXNnLT5tc2dfaW92LAorCQkJCQkJCSAgICAgc2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogaWYgdGhlIG1lc3NhZ2Ugd2UganVzdCBjb3BpZWQgaXNuJ3QgYXQgdGhlIGhlYWQgb2YgdGhlCisJCSAqIHJlY3YgcXVldWUgdGhlbiBzb21lb25lIGVsc2UgcmFjZWQgdXMgdG8gcmV0dXJuIGl0LCB0cnkKKwkJICogdG8gZ2V0IHRoZSBuZXh0IG1lc3NhZ2UuCisJCSAqLworCQlpZiAoIXJkc19zdGlsbF9xdWV1ZWQocnMsIGluYywgIShtc2dfZmxhZ3MgJiBNU0dfUEVFSykpKSB7CisJCQlyZHNfaW5jX3B1dChpbmMpOworCQkJaW5jID0gTlVMTDsKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGl2ZXJfcmFjZWQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmV0IDwgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbikpIHsKKwkJCWlmIChtc2dfZmxhZ3MgJiBNU0dfVFJVTkMpCisJCQkJcmV0ID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisJCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CisJCX0KKworCQlpZiAocmRzX2Ntc2dfcmVjdihpbmMsIG1zZykpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGl2ZXJlZCk7CisKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJCWlmIChzaW4pIHsKKwkJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJCQlzaW4tPnNpbl9wb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmMtPmlfc2FkZHI7CisJCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoaW5jKQorCQlyZHNfaW5jX3B1dChpbmMpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoZSBzb2NrZXQgaXMgYmVpbmcgc2h1dCBkb3duIGFuZCB3ZSdyZSBhc2tlZCB0byBkcm9wIG1lc3NhZ2VzIHRoYXQgd2VyZQorICogcXVldWVkIGZvciByZWN2bXNnLiAgVGhlIGNhbGxlciBoYXMgdW5ib3VuZCB0aGUgc29ja2V0IHNvIHRoZSByZWNlaXZlIHBhdGgKKyAqIHdvbid0IHF1ZXVlIGFueSBtb3JlIGluY29taW5nIGZyYWdtZW50cyBvciBtZXNzYWdlcyBvbiB0aGUgc29ja2V0LgorICovCit2b2lkIHJkc19jbGVhcl9yZWN2X3F1ZXVlKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc3RydWN0IHNvY2sgKnNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmMsIHRtcCwgJnJzLT5yc19yZWN2X3F1ZXVlLCBpX2l0ZW0pIHsKKwkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJICAgICAgLWJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCWxpc3RfZGVsX2luaXQoJmluYy0+aV9pdGVtKTsKKwkJcmRzX2luY19wdXQoaW5jKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIGluYy0+aV9zYWRkciBpc24ndCB1c2VkIGhlcmUgYmVjYXVzZSBpdCBpcyBvbmx5IHNldCBpbiB0aGUgcmVjZWl2ZQorICogcGF0aC4KKyAqLwordm9pZCByZHNfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCSAgICAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgaW50IGZsaXApCit7CisJc3RydWN0IHJkc19pbmZvX21lc3NhZ2UgbWluZm87CisKKwltaW5mby5zZXEgPSBiZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpOworCW1pbmZvLmxlbiA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCisJaWYgKGZsaXApIHsKKwkJbWluZm8ubGFkZHIgPSBkYWRkcjsKKwkJbWluZm8uZmFkZHIgPSBzYWRkcjsKKwkJbWluZm8ubHBvcnQgPSBpbmMtPmlfaGRyLmhfZHBvcnQ7CisJCW1pbmZvLmZwb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCX0gZWxzZSB7CisJCW1pbmZvLmxhZGRyID0gc2FkZHI7CisJCW1pbmZvLmZhZGRyID0gZGFkZHI7CisJCW1pbmZvLmxwb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCQltaW5mby5mcG9ydCA9IGluYy0+aV9oZHIuaF9kcG9ydDsKKwl9CisKKwlyZHNfaW5mb19jb3B5KGl0ZXIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzczNjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMCwwICsxLDEwMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKKy8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb20KKyAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2cKKyAqIHdpbGwga2ljayBvdXIgc2hpbi4KKyAqIEFsc28sIGl0IHNlZW1zIGZhaXJlciB0byBub3QgbGV0IG9uZSBidXN5IGNvbm5lY3Rpb24gc3RhbGwgYWxsIHRoZQorICogb3RoZXJzLgorICoKKyAqIHNlbmRfYmF0Y2hfY291bnQgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSdsbCBsb29wIGluIHNlbmRfeG1pdC4gU2V0dGluZworICogaXQgdG8gMCB3aWxsIHJlc3RvcmUgdGhlIG9sZCBiZWhhdmlvciAod2hlcmUgd2UgbG9vcGVkIHVudGlsIHdlIGhhZAorICogZHJhaW5lZCB0aGUgcXVldWUpLgorICovCitzdGF0aWMgaW50IHNlbmRfYmF0Y2hfY291bnQgPSA2NDsKK21vZHVsZV9wYXJhbShzZW5kX2JhdGNoX2NvdW50LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzZW5kX2JhdGNoX2NvdW50LCAiIGJhdGNoIGZhY3RvciB3aGVuIHdvcmtpbmcgdGhlIHNlbmQgcXVldWUiKTsKKworLyoKKyAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiBDYWxsZXIgbXVzdCBob2xkIGNfc2VuZF9sb2NrIHdoZW4gY2FsbGluZyBoZXJlLgorICovCit2b2lkIHJkc19zZW5kX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoY29ubi0+Y194bWl0X3JtKSB7CisJCS8qIFRlbGwgdGhlIHVzZXIgdGhlIFJETUEgb3AgaXMgbm8gbG9uZ2VyIG1hcHBlZCBieSB0aGUKKwkJICogdHJhbnNwb3J0LiBUaGlzIGlzbid0IGVudGlyZWx5IHRydWUgKGl0J3MgZmx1c2hlZCBvdXQKKwkJICogaW5kZXBlbmRlbnRseSkgYnV0IGFzIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRoZXJlJ3MKKwkJICogbm8gb25nb2luZyBSRE1BIHRvL2Zyb20gdGhhdCBtZW1vcnkgKi8KKwkJcmRzX21lc3NhZ2VfdW5tYXBwZWQoY29ubi0+Y194bWl0X3JtKTsKKwkJcmRzX21lc3NhZ2VfcHV0KGNvbm4tPmNfeG1pdF9ybSk7CisJCWNvbm4tPmNfeG1pdF9ybSA9IE5VTEw7CisJfQorCWNvbm4tPmNfeG1pdF9zZyA9IDA7CisJY29ubi0+Y194bWl0X2hkcl9vZmYgPSAwOworCWNvbm4tPmNfeG1pdF9kYXRhX29mZiA9IDA7CisJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDA7CisKKwljb25uLT5jX21hcF9xdWV1ZWQgPSAwOworCisJY29ubi0+Y191bmFja2VkX3BhY2tldHMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CisJY29ubi0+Y191bmFja2VkX2J5dGVzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKKworCS8qIE1hcmsgbWVzc2FnZXMgYXMgcmV0cmFuc21pc3Npb25zLCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBzZW5kIHEgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCXNldF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncyk7CisJCXNldF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpOworCX0KKwlsaXN0X3NwbGljZV9pbml0KCZjb25uLT5jX3JldHJhbnMsICZjb25uLT5jX3NlbmRfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogV2UncmUgbWFraW5nIHRoZSBjb25jaW91cyB0cmFkZS1vZmYgaGVyZSB0byBvbmx5IHNlbmQgb25lIG1lc3NhZ2UKKyAqIGRvd24gdGhlIGNvbm5lY3Rpb24gYXQgYSB0aW1lLgorICogICBQcm86CisgKiAgICAgIC0gdHggcXVldWVpbmcgaXMgYSBzaW1wbGUgZmlmbyBsaXN0CisgKiAgIAktIHJlYXNzZW1ibHkgaXMgb3B0aW9uYWwgYW5kIGVhc2lseSBkb25lIGJ5IHRyYW5zcG9ydHMgcGVyIGNvbm4KKyAqICAgICAgLSBubyBwZXIgZmxvdyByeCBsb29rdXAgYXQgYWxsLCBzdHJhaWdodCB0byB0aGUgc29ja2V0CisgKiAgIAktIGxlc3MgcGVyLWZyYWcgbWVtb3J5IGFuZCB3aXJlIG92ZXJoZWFkCisgKiAgIENvbjoKKyAqICAgICAgLSBxdWV1ZWQgYWNrcyBjYW4gYmUgZGVsYXllZCBiZWhpbmQgbGFyZ2UgbWVzc2FnZXMKKyAqICAgRGVwZW5kczoKKyAqICAgICAgLSBzbWFsbCBtZXNzYWdlIGxhdGVuY3kgaXMgaGlnaGVyIGJlaGluZCBxdWV1ZWQgbGFyZ2UgbWVzc2FnZXMKKyAqICAgICAgLSBsYXJnZSBtZXNzYWdlIGxhdGVuY3kgaXNuJ3Qgc3RhcnZlZCBieSBpbnRlcnZlbmluZyBzbWFsbCBzZW5kcworICovCitpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0bXA7CisJdW5zaWduZWQgaW50IHNlbmRfcXVvdGEgPSBzZW5kX2JhdGNoX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IHJldCA9IDA7CisJaW50IHdhc19lbXB0eSA9IDA7CisJTElTVF9IRUFEKHRvX2JlX2Ryb3BwZWQpOworCisJLyoKKwkgKiBzZW5kbXNnIGNhbGxzIGhlcmUgYWZ0ZXIgaGF2aW5nIHF1ZXVlZCBpdHMgbWVzc2FnZSBvbiB0aGUgc2VuZAorCSAqIHF1ZXVlLiAgV2Ugb25seSBoYXZlIG9uZSB0YXNrIGZlZWRpbmcgdGhlIGNvbm5lY3Rpb24gYXQgYSB0aW1lLiAgSWYKKwkgKiBhbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGZlZWRpbmcgdGhlIHF1ZXVlIHRoZW4gd2UgYmFjayBvZmYuICBUaGlzCisJICogYXZvaWRzIGJsb2NraW5nIHRoZSBjYWxsZXIgYW5kIHRyYWRpbmcgcGVyLWNvbm5lY3Rpb24gZGF0YSBiZXR3ZWVuCisJICogY2FjaGVzIHBlciBtZXNzYWdlLgorCSAqCisJICogVGhlIHNlbSBob2xkZXIgd2lsbCBpc3N1ZSBhIHJldHJ5IGlmIHRoZXkgbm90aWNlIHRoYXQgc29tZW9uZSBxdWV1ZWQKKwkgKiBhIG1lc3NhZ2UgYWZ0ZXIgdGhleSBzdG9wcGVkIHdhbGtpbmcgdGhlIHNlbmQgcXVldWUgYnV0IGJlZm9yZSB0aGV5CisJICogZHJvcHBlZCB0aGUgc2VtLgorCSAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmY29ubi0+Y19zZW5kX2xvY2spKSB7CisJCXJkc19zdGF0c19pbmMoc19zZW5kX3NlbV9jb250ZW50aW9uKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvbm4tPmNfdHJhbnMtPnhtaXRfcHJlcGFyZSkKKwkJY29ubi0+Y190cmFucy0+eG1pdF9wcmVwYXJlKGNvbm4pOworCisJLyoKKwkgKiBzcGluIHRyeWluZyB0byBwdXNoIGhlYWRlcnMgYW5kIGRhdGEgZG93biB0aGUgY29ubmVjdGlvbiB1bnRpbAorCSAqIHRoZSBjb25uZWN0aW9uIGRvZW5zJ3QgbWFrZSBmb3J3YXJkIHByb2dyZXNzLgorCSAqLworCXdoaWxlICgtLXNlbmRfcXVvdGEpIHsKKwkJLyoKKwkJICogU2VlIGlmIG5lZWQgdG8gc2VuZCBhIGNvbmdlc3Rpb24gbWFwIHVwZGF0ZSBpZiB3ZSdyZQorCQkgKiBiZXR3ZWVuIHNlbmRpbmcgbWVzc2FnZXMuICBUaGUgc2VuZF9zZW0gcHJvdGVjdHMgb3VyIHNvbGUKKwkJICogdXNlIG9mIGNfbWFwX29mZnNldCBhbmQgX2J5dGVzLgorCQkgKiBOb3RlIHRoaXMgaXMgdXNlZCBvbmx5IGJ5IHRyYW5zcG9ydHMgdGhhdCBkZWZpbmUgYSBzcGVjaWFsCisJCSAqIHhtaXRfY29uZ19tYXAgZnVuY3Rpb24uIEZvciBhbGwgb3RoZXJzLCB3ZSBjcmVhdGUgYWxsb2NhdGUKKwkJICogYSBjb25nX21hcCBtZXNzYWdlIGFuZCB0cmVhdCBpdCBqdXN0IGxpa2UgYW55IG90aGVyIHNlbmQuCisJCSAqLworCQlpZiAoY29ubi0+Y19tYXBfYnl0ZXMpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXRfY29uZ19tYXAoY29ubiwgY29ubi0+Y19sY29uZywKKwkJCQkJCWNvbm4tPmNfbWFwX29mZnNldCk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWNvbm4tPmNfbWFwX29mZnNldCArPSByZXQ7CisJCQljb25uLT5jX21hcF9ieXRlcyAtPSByZXQ7CisJCQlpZiAoY29ubi0+Y19tYXBfYnl0ZXMpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiB3ZSdyZSBkb25lIHNlbmRpbmcgdGhlIGN1cnJlbnQgbWVzc2FnZSwgY2xlYXIgdGhlCisJCSAqIG9mZnNldCBhbmQgUy9HIHRlbXBvcmFyaWVzLgorCQkgKi8KKwkJcm0gPSBjb25uLT5jX3htaXRfcm07CisJCWlmIChybSAhPSBOVUxMICYmCisJCSAgICBjb25uLT5jX3htaXRfaGRyX29mZiA9PSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICYmCisJCSAgICBjb25uLT5jX3htaXRfc2cgPT0gcm0tPm1fbmVudHMpIHsKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IE5VTEw7CisJCQljb25uLT5jX3htaXRfc2cgPSAwOworCQkJY29ubi0+Y194bWl0X2hkcl9vZmYgPSAwOworCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAwOworCisJCQkvKiBSZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIG1lc3NhZ2UuICovCisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJcm0gPSBOVUxMOworCQl9CisKKwkJLyogSWYgd2UncmUgYXNrZWQgdG8gc2VuZCBhIGNvbmcgbWFwIHVwZGF0ZSwgZG8gc28uCisJCSAqLworCQlpZiAocm0gPT0gTlVMTCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpIHsKKwkJCWlmIChjb25uLT5jX3RyYW5zLT54bWl0X2NvbmdfbWFwICE9IE5VTEwpIHsKKwkJCQljb25uLT5jX21hcF9vZmZzZXQgPSAwOworCQkJCWNvbm4tPmNfbWFwX2J5dGVzID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArCisJCQkJCVJEU19DT05HX01BUF9CWVRFUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcm0gPSByZHNfY29uZ191cGRhdGVfYWxsb2MoY29ubik7CisJCQlpZiAoSVNfRVJSKHJtKSkgeworCQkJCXJldCA9IFBUUl9FUlIocm0pOworCQkJCWJyZWFrOworCQkJfQorCisJCQljb25uLT5jX3htaXRfcm0gPSBybTsKKwkJfQorCisJCS8qCisJCSAqIEdyYWIgdGhlIG5leHQgbWVzc2FnZSBmcm9tIHRoZSBzZW5kIHF1ZXVlLCBpZiB0aGVyZSBpcyBvbmUuCisJCSAqCisJCSAqIGNfeG1pdF9ybSBob2xkcyBhIHJlZiB3aGlsZSB3ZSdyZSBzZW5kaW5nIHRoaXMgbWVzc2FnZSBkb3duCisJCSAqIHRoZSBjb25uY3Rpb24uICBXZSBjYW4gdXNlIHRoaXMgcmVmIHdoaWxlIGhvbGRpbmcgdGhlCisJCSAqIHNlbmRfc2VtLi4gcmRzX3NlbmRfcmVzZXQoKSBpcyBzZXJpYWxpemVkIHdpdGggaXQuCisJCSAqLworCQlpZiAocm0gPT0gTlVMTCkgeworCQkJdW5zaWduZWQgaW50IGxlbjsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJCQlpZiAoIWxpc3RfZW1wdHkoJmNvbm4tPmNfc2VuZF9xdWV1ZSkpIHsKKwkJCQlybSA9IGxpc3RfZW50cnkoY29ubi0+Y19zZW5kX3F1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UsCisJCQkJCQltX2Nvbm5faXRlbSk7CisJCQkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKworCQkJCS8qCisJCQkJICogTW92ZSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzZW5kIHF1ZXVlIHRvIHRoZSByZXRyYW5zbWl0CisJCQkJICogbGlzdCByaWdodCBhd2F5LgorCQkJCSAqLworCQkJCWxpc3RfbW92ZV90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3JldHJhbnMpOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHJtID09IE5VTEwpIHsKKwkJCQl3YXNfZW1wdHkgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBVbmZvcnR1bmF0ZWx5LCB0aGUgd2F5IEluZmluaWJhbmQgZGVhbHMgd2l0aAorCQkJICogUkRNQSB0byBhIGJhZCBNUiBrZXkgaXMgYnkgbW92aW5nIHRoZSBlbnRpcmUKKwkJCSAqIHF1ZXVlIHBhaXIgdG8gZXJyb3Igc3RhdGUuIFdlIGNvbGQgcG9zc2libHkKKwkJCSAqIHJlY292ZXIgZnJvbSB0aGF0LCBidXQgcmlnaHQgbm93IHdlIGRyb3AgdGhlCisJCQkgKiBjb25uZWN0aW9uLgorCQkJICogVGhlcmVmb3JlLCB3ZSBuZXZlciByZXRyYW5zbWl0IG1lc3NhZ2VzIHdpdGggUkRNQSBvcHMuCisJCQkgKi8KKwkJCWlmIChybS0+bV9yZG1hX29wCisJCQkgJiYgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpKQorCQkJCQlsaXN0X21vdmUoJnJtLT5tX2Nvbm5faXRlbSwgJnRvX2JlX2Ryb3BwZWQpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFJlcXVpcmUgYW4gQUNLIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSAqLworCQkJbGVuID0gbnRvaGwocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKwkJCWlmIChjb25uLT5jX3VuYWNrZWRfcGFja2V0cyA9PSAwCisJCQkgfHwgY29ubi0+Y191bmFja2VkX2J5dGVzIDwgbGVuKSB7CisJCQkJX19zZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCisJCQkJY29ubi0+Y191bmFja2VkX3BhY2tldHMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CisJCQkJY29ubi0+Y191bmFja2VkX2J5dGVzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKKwkJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9hY2tfcmVxdWlyZWQpOworCQkJfSBlbHNlIHsKKwkJCQljb25uLT5jX3VuYWNrZWRfYnl0ZXMgLT0gbGVuOworCQkJCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzLS07CisJCQl9CisKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IHJtOworCQl9CisKKwkJLyoKKwkJICogVHJ5IGFuZCBzZW5kIGFuIHJkbWEgbWVzc2FnZS4gIExldCdzIHNlZSBpZiB3ZSBjYW4KKwkJICoga2VlcCB0aGlzIHNpbXBsZSBhbmQgcmVxdWlyZSB0aGF0IHRoZSB0cmFuc3BvcnQgZWl0aGVyCisJCSAqIHNlbmQgdGhlIHdob2xlIHJkbWEgb3Igbm9uZSBvZiBpdC4KKwkJICovCisJCWlmIChybS0+bV9yZG1hX29wICYmICFjb25uLT5jX3htaXRfcmRtYV9zZW50KSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEoY29ubiwgcm0tPm1fcmRtYV9vcCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDE7CisJCQkvKiBUaGUgdHJhbnNwb3J0IG93bnMgdGhlIG1hcHBlZCBtZW1vcnkgZm9yIG5vdy4KKwkJCSAqIFlvdSBjYW4ndCB1bm1hcCBpdCB3aGlsZSBpdCdzIG9uIHRoZSBzZW5kIHF1ZXVlICovCisJCQlzZXRfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpOworCQl9CisKKwkJaWYgKGNvbm4tPmNfeG1pdF9oZHJfb2ZmIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSB8fAorCQkgICAgY29ubi0+Y194bWl0X3NnIDwgcm0tPm1fbmVudHMpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXQoY29ubiwgcm0sCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9oZHJfb2ZmLAorCQkJCQkJICBjb25uLT5jX3htaXRfc2csCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9kYXRhX29mZik7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWlmIChjb25uLT5jX3htaXRfaGRyX29mZiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJCQl0bXAgPSBtaW5fdChpbnQsIHJldCwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgLQorCQkJCQkgICAgY29ubi0+Y194bWl0X2hkcl9vZmYpOworCQkJCWNvbm4tPmNfeG1pdF9oZHJfb2ZmICs9IHRtcDsKKwkJCQlyZXQgLT0gdG1wOworCQkJfQorCisJCQlzZyA9ICZybS0+bV9zZ1tjb25uLT5jX3htaXRfc2ddOworCQkJd2hpbGUgKHJldCkgeworCQkJCXRtcCA9IG1pbl90KGludCwgcmV0LCBzZy0+bGVuZ3RoIC0KKwkJCQkJCSAgICAgIGNvbm4tPmNfeG1pdF9kYXRhX29mZik7CisJCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmICs9IHRtcDsKKwkJCQlyZXQgLT0gdG1wOworCQkJCWlmIChjb25uLT5jX3htaXRfZGF0YV9vZmYgPT0gc2ctPmxlbmd0aCkgeworCQkJCQljb25uLT5jX3htaXRfZGF0YV9vZmYgPSAwOworCQkJCQlzZysrOworCQkJCQljb25uLT5jX3htaXRfc2crKzsKKwkJCQkJQlVHX09OKHJldCAhPSAwICYmCisJCQkJCSAgICAgICBjb25uLT5jX3htaXRfc2cgPT0gcm0tPm1fbmVudHMpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIE51a2UgYW55IG1lc3NhZ2VzIHdlIGRlY2lkZWQgbm90IHRvIHJldHJhbnNtaXQuICovCisJaWYgKCFsaXN0X2VtcHR5KCZ0b19iZV9kcm9wcGVkKSkKKwkJcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jaygmdG9fYmVfZHJvcHBlZCwgUkRTX1JETUFfRFJPUFBFRCk7CisKKwlpZiAoY29ubi0+Y190cmFucy0+eG1pdF9jb21wbGV0ZSkKKwkJY29ubi0+Y190cmFucy0+eG1pdF9jb21wbGV0ZShjb25uKTsKKworCS8qCisJICogV2UgbWlnaHQgYmUgcmFjaW5nIHdpdGggYW5vdGhlciBzZW5kZXIgd2hvIHF1ZXVlZCBhIG1lc3NhZ2UgYnV0CisJICogYmFja2VkIG9mZiBvbiBub3RpY2luZyB0aGF0IHdlIGhlbGQgdGhlIGNfc2VuZF9sb2NrLiAgSWYgd2UgY2hlY2sKKwkgKiBmb3IgcXVldWVkIG1lc3NhZ2VzIGFmdGVyIGRyb3BwaW5nIHRoZSBzZW0gdGhlbiBlaXRoZXIgd2UnbGwKKwkgKiBzZWUgdGhlIHF1ZXVlZCBtZXNzYWdlIG9yIHRoZSBxdWV1ZXIgd2lsbCBnZXQgdGhlIHNlbS4gIElmIHdlCisJICogbm90aWNlIHRoZSBxdWV1ZWQgbWVzc2FnZSB0aGVuIHdlIHRyaWdnZXIgYW4gaW1tZWRpYXRlIHJldHJ5LgorCSAqCisJICogV2UgbmVlZCB0byBiZSBjYXJlZnVsIG9ubHkgdG8gZG8gdGhpcyB3aGVuIHdlIHN0b3BwZWQgcHJvY2Vzc2luZworCSAqIHRoZSBzZW5kIHF1ZXVlIGJlY2F1c2UgaXQgd2FzIGVtcHR5LiAgSXQncyB0aGUgb25seSB3YXkgd2UKKwkgKiBzdG9wIHByb2Nlc3NpbmcgdGhlIGxvb3Agd2hlbiB0aGUgdHJhbnNwb3J0IGhhc24ndCB0YWtlbgorCSAqIHJlc3BvbnNpYmlsaXR5IGZvciBmb3J3YXJkIHByb2dyZXNzLgorCSAqLworCW11dGV4X3VubG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCisJaWYgKGNvbm4tPmNfbWFwX2J5dGVzIHx8IChzZW5kX3F1b3RhID09IDAgJiYgIXdhc19lbXB0eSkpIHsKKwkJLyogV2UgZXhoYXVzdGVkIHRoZSBzZW5kIHF1b3RhLCBidXQgdGhlcmUncyB3b3JrIGxlZnQgdG8KKwkJICogZG8uIFJldHVybiBhbmQgKHJlLSlzY2hlZHVsZSB0aGUgc2VuZCB3b3JrZXIuCisJCSAqLworCQlyZXQgPSAtRUFHQUlOOworCX0KKworCWlmIChyZXQgPT0gMCAmJiB3YXNfZW1wdHkpIHsKKwkJLyogQSBzaW1wbGUgYml0IHRlc3Qgd291bGQgYmUgd2F5IGZhc3RlciB0aGFuIHRha2luZyB0aGUKKwkJICogc3BpbiBsb2NrICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZjb25uLT5jX3NlbmRfcXVldWUpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9zZW1fcXVldWVfcmFjZWQpOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX3NlbmRfc25kYnVmX3JlbW92ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZycy0+cnNfbG9jayk7CisKKwlCVUdfT04ocnMtPnJzX3NuZF9ieXRlcyA8IGxlbik7CisJcnMtPnJzX3NuZF9ieXRlcyAtPSBsZW47CisKKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA9PSAwKQorCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZV9lbXB0eSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19zZW5kX2lzX2Fja2VkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIHU2NCBhY2ssCisJCQkJICAgIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpCit7CisJaWYgKGlzX2Fja2VkKQorCQlyZXR1cm4gaXNfYWNrZWQocm0sIGFjayk7CisJcmV0dXJuIGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8PSBhY2s7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIG9uIHRoZSBzZW5kIGFuZCByZXRyYW5zbWl0IHF1ZXVlcworICogd2hpY2ggaGF2ZSBhIHNlcXVlbmNlIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHNlcXVlbmNlCisgKiBudW1iZXIuCisgKi8KK2ludCByZHNfc2VuZF9hY2tlZF9iZWZvcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgc2VxKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJaW50IHJldCA9IDE7CisKKwlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8IHNlcSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19zZW5kX3F1ZXVlLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpIDwgc2VxKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBwcmV0dHkgc2ltaWxhciB0byB3aGF0IGhhcHBlbnMgYmVsb3cgaW4gdGhlIEFDSworICogaGFuZGxpbmcgY29kZSAtIGV4Y2VwdCB0aGF0IHdlIGNhbGwgaGVyZSBhcyBzb29uIGFzIHdlIGdldAorICogdGhlIElCIHNlbmQgY29tcGxldGlvbiBvbiB0aGUgUkRNQSBvcCBhbmQgdGhlIGFjY29tcGFueWluZworICogbWVzc2FnZS4KKyAqLwordm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHJkc19yZG1hX29wICpybzsKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKworCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwlybyA9IHJtLT5tX3JkbWFfb3A7CisJaWYgKHRlc3RfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKQorCSAmJiBybyAmJiByby0+cl9ub3RpZnkgJiYgcm8tPnJfbm90aWZpZXIpIHsKKwkJbm90aWZpZXIgPSByby0+cl9ub3RpZmllcjsKKwkJcnMgPSBybS0+bV9yczsKKwkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworCisJCW5vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJm5vdGlmaWVyLT5uX2xpc3QsICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKworCQlyby0+cl9ub3RpZmllciA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCisJaWYgKHJzKSB7CisJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGV4Y2VwdCB3ZQorICogZG9uJ3QgZG8gYW55IGxvY2tpbmcgLSB3ZSBoYXZlIGFsbCB0aGUgaW5ncmVkaWVudHMgKG1lc3NhZ2UsCisgKiBzb2NrZXQsIHNvY2tldCBsb2NrKSBhbmQgY2FuIGp1c3QgbW92ZSB0aGUgbm90aWZpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19yZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHJkc19yZG1hX29wICpybzsKKworCXJvID0gcm0tPm1fcmRtYV9vcDsKKwlpZiAocm8gJiYgcm8tPnJfbm90aWZ5ICYmIHJvLT5yX25vdGlmaWVyKSB7CisJCXJvLT5yX25vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJbGlzdF9hZGRfdGFpbCgmcm8tPnJfbm90aWZpZXItPm5fbGlzdCwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlyby0+cl9ub3RpZmllciA9IE5VTEw7CisJfQorCisJLyogTm8gbmVlZCB0byB3YWtlIHRoZSBhcHAgLSBjYWxsZXIgZG9lcyB0aGlzICovCit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBJQiBzZW5kIGNvbXBsZXRpb24gd2hlbiB3ZSBkZXRlY3QKKyAqIGEgUkRNQSBvcGVyYXRpb24gdGhhdCBmYWlsZWQgd2l0aCByZW1vdGUgYWNjZXNzIGVycm9yLgorICogU28gc3BlZWQgaXMgbm90IGFuIGlzc3VlIGhlcmUuCisgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX3NlbmRfZ2V0X21lc3NhZ2Uoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCQkgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wLCAqZm91bmQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKHJtLT5tX3JkbWFfb3AgPT0gb3ApIHsKKwkJCWF0b21pY19pbmMoJnJtLT5tX3JlZmNvdW50KTsKKwkJCWZvdW5kID0gcm07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19zZW5kX3F1ZXVlLCBtX2Nvbm5faXRlbSkgeworCQlpZiAocm0tPm1fcmRtYV9vcCA9PSBvcCkgeworCQkJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOworCQkJZm91bmQgPSBybTsKKwkJCWJyZWFrOworCQl9CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBUaGlzIHJlbW92ZXMgbWVzc2FnZXMgZnJvbSB0aGUgc29ja2V0J3MgbGlzdCBpZiB0aGV5J3JlIG9uIGl0LiAgVGhlIGxpc3QKKyAqIGFyZ3VtZW50IG11c3QgYmUgcHJpdmF0ZSB0byB0aGUgY2FsbGVyLCB3ZSBtdXN0IGJlIGFibGUgdG8gbW9kaWZ5IGl0CisgKiB3aXRob3V0IGxvY2tzLiAgVGhlIG1lc3NhZ2VzIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSBoZWxkIGZvciB0aGVpcgorICogcG9zaXRpb24gb24gdGhlIGxpc3QuICBUaGlzIGZ1bmN0aW9uIHdpbGwgZHJvcCB0aGF0IHJlZmVyZW5jZSBhZnRlcgorICogcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIGZyb20gdGhlICdtZXNzYWdlcycgbGlzdCByZWdhcmRsZXNzIG9mIGlmIGl0IGZvdW5kCisgKiB0aGUgbWVzc2FnZXMgb24gdGhlIHNvY2tldCBsaXN0IG9yIG5vdC4KKyAqLwordm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOyAvKiBzaWxlbmNlIGdjYyA6UCAqLworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KG1lc3NhZ2VzKSkgeworCQlybSA9IGxpc3RfZW50cnkobWVzc2FnZXMtPm5leHQsIHN0cnVjdCByZHNfbWVzc2FnZSwKKwkJCQltX2Nvbm5faXRlbSk7CisJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisKKwkJLyoKKwkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQorCQkgKiBlbHNlIGJlYXQgdXMgdG8gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc29jay4gIElmIHdlIHJhY2UKKwkJICogd2l0aCB0aGVpciBmbGFnIHVwZGF0ZSB3ZSdsbCBnZXQgdGhlIGxvY2sgYW5kIHRoZW4gcmVhbGx5CisJCSAqIHNlZSB0aGF0IHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisJCSAqCisJCSAqIFRoZSBtZXNzYWdlIHNwaW5sb2NrIG1ha2VzIHN1cmUgbm9ib2R5IGNsZWFycyBybS0+bV9ycworCQkgKiB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdpdGggaXQuIEl0IGRvZXMgbm90IHByZXZlbnQgdGhlCisJCSAqIG1lc3NhZ2UgZnJvbSBiZWluZyByZW1vdmVkIGZyb20gdGhlIHNvY2tldCwgdGhvdWdoLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJaWYgKCF0ZXN0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykpCisJCQlnb3RvIHVubG9ja19hbmRfZHJvcDsKKworCQlpZiAocnMgIT0gcm0tPm1fcnMpIHsKKwkJCWlmIChycykgeworCQkJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJCQkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQkJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCQkJfQorCQkJcnMgPSBybS0+bV9yczsKKwkJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworCQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykpIHsKKwkJCXN0cnVjdCByZHNfcmRtYV9vcCAqcm8gPSBybS0+bV9yZG1hX29wOworCQkJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisKKwkJCWxpc3RfZGVsX2luaXQoJnJtLT5tX3NvY2tfaXRlbSk7CisJCQlyZHNfc2VuZF9zbmRidWZfcmVtb3ZlKHJzLCBybSk7CisKKwkJCWlmIChybyAmJiByby0+cl9ub3RpZmllcgorCQkJICAgJiYgKHN0YXR1cyB8fCByby0+cl9ub3RpZnkpKSB7CisJCQkJbm90aWZpZXIgPSByby0+cl9ub3RpZmllcjsKKwkJCQlsaXN0X2FkZF90YWlsKCZub3RpZmllci0+bl9saXN0LAorCQkJCQkJJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQkJCWlmICghbm90aWZpZXItPm5fc3RhdHVzKQorCQkJCQlub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCQkJcm0tPm1fcmRtYV9vcC0+cl9ub3RpZmllciA9IE5VTEw7CisJCQl9CisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJcm0tPm1fcnMgPSBOVUxMOworCQl9CisKK3VubG9ja19hbmRfZHJvcDoKKwkJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KKworCWlmIChycykgeworCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUcmFuc3BvcnRzIGNhbGwgaGVyZSB3aGVuIHRoZXkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZWNlaXZlciBxdWV1ZWQKKyAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlCisgKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmQKKyAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlbgorICogYXNzaWduZWQgdGhlIG1fYWNrX3NlcSB5ZXQgLSBidXQgdGhhdCdzIGZpbmUgYXMgbG9uZyBhcyB0Y3BfaXNfYWNrZWQKKyAqIGNoZWNrcyB0aGUgUkRTX01TR19IQVNfQUNLX1NFUSBiaXQuCisgKgorICogWFhYIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGhvdyB0aGlzIGlzIHNhZmVseSBzZXJpYWxpemVkIHdpdGggc29ja2V0CisgKiBkZXN0cnVjdGlvbi4gIE1heWJlIGl0IHNob3VsZCBiYWlsIGlmIGl0IHNlZXMgU09DS19ERUFELgorICovCit2b2lkIHJkc19zZW5kX2Ryb3BfYWNrZWQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgYWNrLAorCQkJIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoIXJkc19zZW5kX2lzX2Fja2VkKHJtLCBhY2ssIGlzX2Fja2VkKSkKKwkJCWJyZWFrOworCisJCWxpc3RfbW92ZSgmcm0tPm1fY29ubl9pdGVtLCAmbGlzdCk7CisJCWNsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJfQorCisJLyogb3JkZXIgZmxhZyB1cGRhdGVzIHdpdGggc3BpbiBsb2NrcyAqLworCWlmICghbGlzdF9lbXB0eSgmbGlzdCkpCisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCS8qIG5vdyByZW1vdmUgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIHNvY2sgbGlzdCBhcyBuZWVkZWQgKi8KKwlyZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKCZsaXN0LCBSRFNfUkRNQV9TVUNDRVNTKTsKK30KKwordm9pZCByZHNfc2VuZF9kcm9wX3RvKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrYWRkcl9pbiAqZGVzdCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKwlpbnQgd2FrZSA9IDA7CisKKwkvKiBnZXQgYWxsIHRoZSBtZXNzYWdlcyB3ZSdyZSBkcm9wcGluZyB1bmRlciB0aGUgcnMgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZycy0+cnNfc2VuZF9xdWV1ZSwgbV9zb2NrX2l0ZW0pIHsKKwkJaWYgKGRlc3QgJiYgKGRlc3QtPnNpbl9hZGRyLnNfYWRkciAhPSBybS0+bV9kYWRkciB8fAorCQkJICAgICBkZXN0LT5zaW5fcG9ydCAhPSBybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCkpCisJCQljb250aW51ZTsKKworCQl3YWtlID0gMTsKKwkJbGlzdF9tb3ZlKCZybS0+bV9zb2NrX2l0ZW0sICZsaXN0KTsKKwkJcmRzX3NlbmRfc25kYnVmX3JlbW92ZShycywgcm0pOworCQljbGVhcl9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpOworCisJCS8qIElmIHRoaXMgaXMgYSBSRE1BIG9wZXJhdGlvbiwgbm90aWZ5IHRoZSBhcHAuICovCisJCV9fcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShycywgcm0sIFJEU19SRE1BX0NBTkNFTEVEKTsKKwl9CisKKwkvKiBvcmRlciBmbGFnIHVwZGF0ZXMgd2l0aCB0aGUgcnMgbG9jayAqLworCWlmICh3YWtlKQorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCWlmICh3YWtlKQorCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisKKwljb25uID0gTlVMTDsKKworCS8qIG5vdyByZW1vdmUgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGNvbm4gbGlzdCBhcyBuZWVkZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCAmbGlzdCwgbV9zb2NrX2l0ZW0pIHsKKwkJLyogV2UgZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBsb29wIGFib3ZlLCBzbyB0aGF0CisJCSAqIHdlIGRvbid0IGhhdmUgdG8gbmVzdCBtX3JzX2xvY2sgdW5kZXIgcnMtPnJzX2xvY2sgKi8KKwkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJcm0tPm1fcnMgPSBOVUxMOworCQlzcGluX3VubG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwkJLyoKKwkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQorCQkgKiBlbHNlIGJlYXQgdXMgdG8gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY29ubi4gIElmIHdlIHJhY2UKKwkJICogd2l0aCB0aGVpciBmbGFnIHVwZGF0ZSB3ZSdsbCBnZXQgdGhlIGxvY2sgYW5kIHRoZW4gcmVhbGx5CisJCSAqIHNlZSB0aGF0IHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisJCSAqLworCQlpZiAoIXRlc3RfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb25uICE9IHJtLT5tX2luYy5pX2Nvbm4pIHsKKwkJCWlmIChjb25uKQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJY29ubiA9IHJtLT5tX2luYy5pX2Nvbm47CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fY29ubl9pdGVtKTsKKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCX0KKwl9CisKKwlpZiAoY29ubikKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CisJCXJtID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCByZHNfbWVzc2FnZSwgbV9zb2NrX2l0ZW0pOworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9zb2NrX2l0ZW0pOworCisJCXJkc19tZXNzYWdlX3dhaXQocm0pOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KK30KKworLyoKKyAqIHdlIG9ubHkgd2FudCB0aGlzIHRvIGZpcmUgb25jZSBzbyB3ZSB1c2UgdGhlIGNhbGxlcnMgJ3F1ZXVlZCcuICBJdCdzCisgKiBwb3NzaWJsZSB0aGF0IGFub3RoZXIgdGhyZWFkIGNhbiByYWNlIHdpdGggdXMgYW5kIHJlbW92ZSB0aGUKKyAqIG1lc3NhZ2UgZnJvbSB0aGUgZmxvdyB3aXRoIFJEU19DQU5DRUxfU0VOVF9UTy4KKyAqLworc3RhdGljIGludCByZHNfc2VuZF9xdWV1ZV9ybShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIF9fYmUxNiBzcG9ydCwKKwkJCSAgICAgX19iZTE2IGRwb3J0LCBpbnQgKnF1ZXVlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsZW47CisKKwlpZiAoKnF1ZXVlZCkKKwkJZ290byBvdXQ7CisKKwlsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJLyogdGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGljaCBob2xkcyBib3RoIHRoZSBzb2NrZXQncyByc19sb2NrCisJICogYW5kIHRoZSBjb25uZWN0aW9uJ3MgY19sb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgbGl0dGxlIHNwYWNlIGluIHNuZGJ1Ziwgd2UgZG9uJ3QgcXVldWUgYW55dGhpbmcsCisJICogYW5kIHVzZXJzcGFjZSBnZXRzIC1FQUdBSU4uIEJ1dCBwb2xsKCkgaW5kaWNhdGVzIHRoZXJlJ3Mgc2VuZAorCSAqIHJvb20uIFRoaXMgY2FuIGxlYWQgdG8gYmFkIGJlaGF2aW9yIChzcGlubmluZykgaWYgc25kX2J5dGVzIGlzbid0CisJICogZnJlZWQgdXAgYnkgaW5jb21pbmcgYWNrcy4gU28gd2UgY2hlY2sgdGhlICpvbGQqIHZhbHVlIG9mCisJICogcnNfc25kX2J5dGVzIGhlcmUgdG8gYWxsb3cgdGhlIGxhc3QgbXNnIHRvIGV4Y2VlZCB0aGUgYnVmZmVyLAorCSAqIGFuZCBwb2xsKCkgbm93IGtub3dzIG5vIG1vcmUgZGF0YSBjYW4gYmUgc2VudC4KKwkgKi8KKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA8IHJkc19za19zbmRidWYocnMpKSB7CisJCXJzLT5yc19zbmRfYnl0ZXMgKz0gbGVuOworCisJCS8qIGxldCByZWN2IHNpZGUga25vdyB3ZSBhcmUgY2xvc2UgdG8gc2VuZCBzcGFjZSBleGhhdXN0aW9uLgorCQkgKiBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgb3B0aW1hbCB3YXkgdG8gZG8gaXQsIGFzIHRoaXMKKwkJICogbWVhbnMgd2Ugc2V0IHRoZSBmbGFnIG9uICphbGwqIG1lc3NhZ2VzIGFzIHNvb24gYXMgb3VyCisJCSAqIHRocm91Z2hwdXQgaGl0cyBhIGNlcnRhaW4gdGhyZXNob2xkLgorCQkgKi8KKwkJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPj0gcmRzX3NrX3NuZGJ1ZihycykgLyAyKQorCQkJX19zZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCisJCWxpc3RfYWRkX3RhaWwoJnJtLT5tX3NvY2tfaXRlbSwgJnJzLT5yc19zZW5kX3F1ZXVlKTsKKwkJc2V0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncyk7CisJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJCXJtLT5tX3JzID0gcnM7CisKKwkJLyogVGhlIGNvZGUgb3JkZXJpbmcgaXMgYSBsaXR0bGUgd2VpcmQsIGJ1dCB3ZSdyZQorCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KKwkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZybS0+bV9pbmMuaV9oZHIsIHNwb3J0LCBkcG9ydCwgMCk7CisJCXJtLT5tX2luYy5pX2Nvbm4gPSBjb25uOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCisJCXNwaW5fbG9jaygmY29ubi0+Y19sb2NrKTsKKwkJcm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChjb25uLT5jX25leHRfdHhfc2VxKyspOworCQlsaXN0X2FkZF90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3NlbmRfcXVldWUpOworCQlzZXRfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisKKwkJcmRzZGVidWcoInF1ZXVlZCBtc2cgJXAgbGVuICVkLCBycyAlcCBieXRlcyAlZCBzZXEgJWxsdVxuIiwKKwkJCSBybSwgbGVuLCBycywgcnMtPnJzX3NuZF9ieXRlcywKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSk7CisKKwkJKnF1ZXVlZCA9IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gKnF1ZXVlZDsKK30KKworc3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmFsbG9jYXRlZF9tcikKK3sKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsgY21zZzsgY21zZyA9IENNU0dfTlhUSERSKG1zZywgY21zZykpIHsKKwkJaWYgKCFDTVNHX09LKG1zZywgY21zZykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY21zZy0+Y21zZ19sZXZlbCAhPSBTT0xfUkRTKQorCQkJY29udGludWU7CisKKwkJLyogQXMgYSBzaWRlIGVmZmVjdCwgUkRNQV9ERVNUIGFuZCBSRE1BX01BUCB3aWxsIHNldAorCQkgKiBybS0+bV9yZG1hX2Nvb2tpZSBhbmQgcm0tPm1fcmRtYV9tci4KKwkJICovCisJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCWNhc2UgUkRTX0NNU0dfUkRNQV9BUkdTOgorCQkJcmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZyk7CisJCQlicmVhazsKKworCQljYXNlIFJEU19DTVNHX1JETUFfREVTVDoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfZGVzdChycywgcm0sIGNtc2cpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRFNfQ01TR19SRE1BX01BUDoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfbWFwKHJzLCBybSwgY21zZyk7CisJCQlpZiAoIXJldCkKKwkJCQkqYWxsb2NhdGVkX21yID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBwYXlsb2FkX2xlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKKwlfX2JlMzIgZGFkZHI7CisJX19iZTE2IGRwb3J0OworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcXVldWVkID0gMCwgYWxsb2NhdGVkX21yID0gMDsKKwlpbnQgbm9uYmxvY2sgPSBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVDsKKwlsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spOworCisJLyogTWlycm9yIExpbnV4IFVEUCBtaXJyb3Igb2YgQlNEIGVycm9yIG1lc3NhZ2UgY29tcGF0aWJpbGl0eSAqLworCS8qIFhYWDogUGVyaGFwcyBNU0dfTU9SRSBzb21lZGF5ICovCisJaWYgKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVQgfCBNU0dfQ01TR19DT01QQVQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zZ19mbGFncyAweCUwOFhcbiIsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtc2ctPm1zZ19uYW1lbGVuKSB7CisJCS8qIFhYWCBmYWlsIG5vbi11bmljYXN0IGRlc3RpbmF0aW9uIElQcz8gKi8KKwkJaWYgKG1zZy0+bXNnX25hbWVsZW4gPCBzaXplb2YoKnVzaW4pIHx8IHVzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRhZGRyID0gdXNpbi0+c2luX2FkZHIuc19hZGRyOworCQlkcG9ydCA9IHVzaW4tPnNpbl9wb3J0OworCX0gZWxzZSB7CisJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCBjb25zaXN0ZW5jeSB3aXRoIC0+Y29ubmVjdCgpICovCisJCWxvY2tfc29jayhzayk7CisJCWRhZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwkJZHBvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlyZWxlYXNlX3NvY2soc2spOworCX0KKworCS8qIHJhY2luZyB3aXRoIGFub3RoZXIgdGhyZWFkIGJpbmRpbmcgc2VlbXMgb2sgaGVyZSAqLworCWlmIChkYWRkciA9PSAwIHx8IHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJcm0gPSByZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihtc2ctPm1zZ19pb3YsIHBheWxvYWRfbGVuKTsKKwlpZiAoSVNfRVJSKHJtKSkgeworCQlyZXQgPSBQVFJfRVJSKHJtKTsKKwkJcm0gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9kYWRkciA9IGRhZGRyOworCisJLyogUGFyc2UgYW55IGNvbnRyb2wgbWVzc2FnZXMgdGhlIHVzZXIgbWF5IGhhdmUgaW5jbHVkZWQuICovCisJcmV0ID0gcmRzX2Ntc2dfc2VuZChycywgcm0sIG1zZywgJmFsbG9jYXRlZF9tcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KKwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCisJaWYgKHJzLT5yc19jb25uICYmIHJzLT5yc19jb25uLT5jX2ZhZGRyID09IGRhZGRyKQorCQljb25uID0gcnMtPnJzX2Nvbm47CisJZWxzZSB7CisJCWNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcocnMtPnJzX2JvdW5kX2FkZHIsIGRhZGRyLAorCQkJCQlycy0+cnNfdHJhbnNwb3J0LAorCQkJCQlzb2NrLT5zay0+c2tfYWxsb2NhdGlvbik7CisJCWlmIChJU19FUlIoY29ubikpIHsKKwkJCXJldCA9IFBUUl9FUlIoY29ubik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlycy0+cnNfY29ubiA9IGNvbm47CisJfQorCisJaWYgKChybS0+bV9yZG1hX2Nvb2tpZSB8fCBybS0+bV9yZG1hX29wKQorCSAmJiBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJyZG1hX29wICVwIGNvbm4geG1pdF9yZG1hICVwXG4iLAorCQkJCXJtLT5tX3JkbWFfb3AsIGNvbm4tPmNfdHJhbnMtPnhtaXRfcmRtYSk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5CisJICogaGF2ZSBzY2hlZHVsZWQgYSBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlCisJICogd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuCisJICovCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RPV04KKwkgJiYgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisKKwlyZXQgPSByZHNfY29uZ193YWl0KGNvbm4tPmNfZmNvbmcsIGRwb3J0LCBub25ibG9jaywgcnMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKCFyZHNfc2VuZF9xdWV1ZV9ybShycywgY29ubiwgcm0sIHJzLT5yc19ib3VuZF9wb3J0LAorCQkJCSAgZHBvcnQsICZxdWV1ZWQpKSB7CisJCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlX2Z1bGwpOworCQkvKiBYWFggbWFrZSBzdXJlIHRoaXMgaXMgcmVhc29uYWJsZSAqLworCQlpZiAocGF5bG9hZF9sZW4gPiByZHNfc2tfc25kYnVmKHJzKSkgeworCQkJcmV0ID0gLUVNU0dTSVpFOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKG5vbmJsb2NrKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKworCQl0aW1lbyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpzay0+c2tfc2xlZXAsCisJCQkJCXJkc19zZW5kX3F1ZXVlX3JtKHJzLCBjb25uLCBybSwKKwkJCQkJCQkgIHJzLT5yc19ib3VuZF9wb3J0LAorCQkJCQkJCSAgZHBvcnQsCisJCQkJCQkJICAmcXVldWVkKSwKKwkJCQkJdGltZW8pOworCQlyZHNkZWJ1Zygic2VuZG1zZyB3b2tlIHF1ZXVlZCAlZCB0aW1lbyAlbGRcbiIsIHF1ZXVlZCwgdGltZW8pOworCQlpZiAodGltZW8gPiAwIHx8IHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdGltZW87CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQnkgbm93IHdlJ3ZlIGNvbW1pdHRlZCB0byB0aGUgc2VuZC4gIFdlIHJldXNlIHJkc19zZW5kX3dvcmtlcigpCisJICogdG8gcmV0cnkgc2VuZHMgaW4gdGhlIHJkcyB0aHJlYWQgaWYgdGhlIHRyYW5zcG9ydCBhc2tzIHVzIHRvLgorCSAqLworCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlZCk7CisKKwlpZiAoIXRlc3RfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSkKKwkJcmRzX3NlbmRfd29ya2VyKCZjb25uLT5jX3NlbmRfdy53b3JrKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHBheWxvYWRfbGVuOworCitvdXQ6CisJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgorCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCisJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLworCWlmIChhbGxvY2F0ZWRfbXIpCisJCXJkc19yZG1hX3VudXNlKHJzLCByZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKSwgMSk7CisKKwlpZiAocm0pCisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlcGx5IHRvIGEgcGluZyBwYWNrZXQuCisgKi8KK2ludAorcmRzX3NlbmRfcG9uZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUxNiBkcG9ydCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKDAsIEdGUF9BVE9NSUMpOworCWlmIChybSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJtLT5tX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKworCS8qIElmIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRyaWdnZXIgYSBjb25uZWN0LiBXZSBtYXkKKwkgKiBoYXZlIHNjaGVkdWxlZCBhIGRlbGF5ZWQgcmVjb25uZWN0IGhvd2V2ZXIgLSBpbiB0aGlzIGNhc2UKKwkgKiB3ZSBzaG91bGQgbm90IGludGVyZmVyZS4KKwkgKi8KKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fRE9XTgorCSAmJiAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKworCXJldCA9IHJkc19jb25nX3dhaXQoY29ubi0+Y19mY29uZywgZHBvcnQsIDEsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJtLT5tX2Nvbm5faXRlbSwgJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJc2V0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwlybS0+bV9pbmMuaV9jb25uID0gY29ubjsKKworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcigmcm0tPm1faW5jLmlfaGRyLCAwLCBkcG9ydCwKKwkJCQkgICAgY29ubi0+Y19uZXh0X3R4X3NlcSk7CisJY29ubi0+Y19uZXh0X3R4X3NlcSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVkKTsKKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9wb25nKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChybSkKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zdGF0cy5jIGIvbmV0L3Jkcy9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzE0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3N0YXRzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCByZHNfc3RhdGlzdGljcywgcmRzX3N0YXRzKTsKKworLyogOi4sJHMvdW5zaWduZWQgbG9uZ1w+LipcPHNfXCguKlwpOy8iXDEiLC9nICovCisKK3N0YXRpYyBjaGFyICpyZHNfc3RhdF9uYW1lc1tdID0geworCSJjb25uX3Jlc2V0IiwKKwkicmVjdl9kcm9wX2JhZF9jaGVja3N1bSIsCisJInJlY3ZfZHJvcF9vbGRfc2VxIiwKKwkicmVjdl9kcm9wX25vX3NvY2siLAorCSJyZWN2X2Ryb3BfZGVhZF9zb2NrIiwKKwkicmVjdl9kZWxpdmVyX3JhY2VkIiwKKwkicmVjdl9kZWxpdmVyZWQiLAorCSJyZWN2X3F1ZXVlZCIsCisJInJlY3ZfaW1tZWRpYXRlX3JldHJ5IiwKKwkicmVjdl9kZWxheWVkX3JldHJ5IiwKKwkicmVjdl9hY2tfcmVxdWlyZWQiLAorCSJyZWN2X3JkbWFfYnl0ZXMiLAorCSJyZWN2X3BpbmciLAorCSJzZW5kX3F1ZXVlX2VtcHR5IiwKKwkic2VuZF9xdWV1ZV9mdWxsIiwKKwkic2VuZF9zZW1fY29udGVudGlvbiIsCisJInNlbmRfc2VtX3F1ZXVlX3JhY2VkIiwKKwkic2VuZF9pbW1lZGlhdGVfcmV0cnkiLAorCSJzZW5kX2RlbGF5ZWRfcmV0cnkiLAorCSJzZW5kX2Ryb3BfYWNrZWQiLAorCSJzZW5kX2Fja19yZXF1aXJlZCIsCisJInNlbmRfcXVldWVkIiwKKwkic2VuZF9yZG1hIiwKKwkic2VuZF9yZG1hX2J5dGVzIiwKKwkic2VuZF9wb25nIiwKKwkicGFnZV9yZW1haW5kZXJfaGl0IiwKKwkicGFnZV9yZW1haW5kZXJfbWlzcyIsCisJImNvcHlfdG9fdXNlciIsCisJImNvcHlfZnJvbV91c2VyIiwKKwkiY29uZ191cGRhdGVfcXVldWVkIiwKKwkiY29uZ191cGRhdGVfcmVjZWl2ZWQiLAorCSJjb25nX3NlbmRfZXJyb3IiLAorCSJjb25nX3NlbmRfYmxvY2tlZCIsCit9OworCit2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKQoreworCXN0cnVjdCByZHNfaW5mb19jb3VudGVyIGN0cjsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCUJVR19PTihzdHJsZW4obmFtZXNbaV0pID49IHNpemVvZihjdHIubmFtZSkpOworCQlzdHJuY3B5KGN0ci5uYW1lLCBuYW1lc1tpXSwgc2l6ZW9mKGN0ci5uYW1lKSAtIDEpOworCQljdHIudmFsdWUgPSB2YWx1ZXNbaV07CisKKwkJcmRzX2luZm9fY29weShpdGVyLCAmY3RyLCBzaXplb2YoY3RyKSk7CisJfQorfQorCisvKgorICogVGhpcyBnaXZlcyBnbG9iYWwgY291bnRlcnMgYWNyb3NzIGFsbCB0aGUgdHJhbnNwb3J0cy4gIFRoZSBzdHJpbmdzCisgKiBhcmUgY29waWVkIGluIHNvIHRoYXQgdGhlIHRvb2wgZG9lc24ndCBuZWVkIGtub3dsZWRnZSBvZiB0aGUgc3BlY2lmaWMKKyAqIHN0YXRzIHRoYXQgd2UncmUgZXhwb3J0aW5nLiAgU29tZSBhcmUgcHJldHR5IGltcGxlbWVudGF0aW9uIGRlcGVuZGVudAorICogYW5kIG1heSBjaGFuZ2Ugb3ZlciB0aW1lLiAgVGhhdCBkb2Vzbid0IHN0b3AgdGhlbSBmcm9tIGJlaW5nIHVzZWZ1bC4KKyAqCisgKiBUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGtub3dzIGFib3V0IHRoZSBieXRlIGdyYW51bGFyCisgKiBsZW5ndGggaW4gdXNlcnNwYWNlLiAgSXQgY29udmVydHMgaXQgdG8gbnVtYmVyIG9mIHN0YXQgZW50cmllcyB0aGF0IHRoZQorICogcmVzdCBvZiB0aGUgZnVuY3Rpb25zIG9wZXJhdGUgaW4uCisgKi8KK3N0YXRpYyB2b2lkIHJkc19zdGF0c19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgYXZhaWw7CisKKwlhdmFpbCA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY291bnRlcik7CisKKwlpZiAoYXZhaWwgPCBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKSkgeworCQlhdmFpbCA9IDA7CisJCWdvdG8gdHJhbnM7CisJfQorCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcykpOworCWF2YWlsIC09IEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpOworCit0cmFuczoKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19jb3VudGVyKTsKKwlsZW5zLT5uciA9IHJkc190cmFuc19zdGF0c19pbmZvX2NvcHkoaXRlciwgYXZhaWwpICsKKwkJICAgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcyk7Cit9CisKK3ZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09VTlRFUlMsIHJkc19zdGF0c19pbmZvKTsKK30KKworaW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKQoreworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09VTlRFUlMsIHJkc19zdGF0c19pbmZvKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvc3lzY3RsLmMgYi9uZXQvcmRzL3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2RjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3N5c2N0bC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfc3lzY3RsX3JlZ190YWJsZTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7Cit1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzID0gSFo7CisKK3Vuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzID0gODsKK3Vuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlcyA9ICgxNiA8PCAyMCk7CisKK3Vuc2lnbmVkIGludCByZHNfc3lzY3RsX3BpbmdfZW5hYmxlID0gMTsKKworc3RhdGljIGN0bF90YWJsZSByZHNfc3lzY3RsX3Jkc190YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJyZWNvbm5lY3RfbWluX2RlbGF5X21zIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAicmVjb25uZWN0X21heF9kZWxheV9tcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllcywKKwkJLmV4dHJhMgkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX3BhY2tldHMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAicGluZ19lbmFibGUiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9waW5nX2VuYWJsZSwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKGludCksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKworCit2b2lkIHJkc19zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfc3lzY3RsX3JlZ190YWJsZSkKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX3N5c2N0bF9yZWdfdGFibGUpOworfQorCitpbnQgX19pbml0IHJkc19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19zeXNjdGxfcmVjb25uZWN0X21pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CisJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXMgPSByZHNfc3lzY3RsX3JlY29ubmVjdF9taW47CisKKwlyZHNfc3lzY3RsX3JlZ190YWJsZSA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhyZHNfc3lzY3RsX3BhdGgsIHJkc19zeXNjdGxfcmRzX3RhYmxlKTsKKwlpZiAocmRzX3N5c2N0bF9yZWdfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RocmVhZHMuYyBiL25ldC9yZHMvdGhyZWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGExYmYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RocmVhZHMuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIEFsbCBvZiBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaXMgc2ltcGxpZmllZCBieSBzZXJpYWxpemluZyBpdCB0aHJvdWdoCisgKiB3b3JrIHF1ZXVlcyB0aGF0IGV4ZWN1dGUgaW4gYSBjb25uZWN0aW9uIG1hbmFnaW5nIHRocmVhZC4KKyAqCisgKiBUQ1Agd2FudHMgdG8gc2VuZCBhY2tzIHRocm91Z2ggc2VuZHBhZ2UoKSBpbiByZXNwb25zZSB0byBkYXRhX3JlYWR5KCksCisgKiBidXQgaXQgbmVlZHMgYSBwcm9jZXNzIGNvbnRleHQgdG8gZG8gc28uCisgKgorICogVGhlIHJlY2VpdmUgcGF0aHMgbmVlZCB0byBhbGxvY2F0ZSBidXQgY2FuJ3QgZHJvcCBwYWNrZXRzICghKSBzbyB3ZSBoYXZlCisgKiBhIHRocmVhZCBhcm91bmQgdG8gYmxvY2sgYWxsb2NhdGluZyBpZiB0aGUgcmVjZWl2ZSBmYXN0IHBhdGggc2VlcyBhbgorICogYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCisKKy8qIEdyYW5kIFVuaWZpZWQgVGhlb3J5IG9mIGNvbm5lY3Rpb24gbGlmZSBjeWNsZToKKyAqIEF0IGFueSBwb2ludCBpbiB0aW1lLCB0aGUgY29ubmVjdGlvbiBjYW4gYmUgaW4gb25lIG9mIHRoZXNlIHN0YXRlczoKKyAqIERPV04sIENPTk5FQ1RJTkcsIFVQLCBESVNDT05ORUNUSU5HLCBFUlJPUgorICoKKyAqIFRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIHBvc3NpYmxlOgorICogIEFOWQkJICAtPiBFUlJPUgorICogIFVQCQkgIC0+IERJU0NPTk5FQ1RJTkcKKyAqICBFUlJPUgkgIC0+IERJU0NPTk5FQ1RJTkcKKyAqICBESVNDT05ORUNUSU5HIC0+IERPV04KKyAqICBET1dOCSAgLT4gQ09OTkVDVElORworICogIENPTk5FQ1RJTkcJICAtPiBVUAorICoKKyAqIFRyYW5zaXRpb24gdG8gc3RhdGUgRElTQ09OTkVDVElORy9ET1dOOgorICogIC0JSW5zaWRlIHRoZSBzaHV0ZG93biB3b3JrZXI7IHN5bmNocm9uaXplcyB3aXRoIHhtaXQgcGF0aAorICoJdGhyb3VnaCBjX3NlbmRfbG9jaywgYW5kIHdpdGggY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNhbGxiYWNrcworICoJdmlhIGNfY21fbG9jay4KKyAqCisgKglGb3IgcmVjZWl2ZSBjYWxsYmFja3MsIHdlIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0CisgKgkoVENQLCBJQi9SRE1BKSB0byBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgc3luY2hyb25pc2F0aW9uLgorICovCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX3dxOworCit2b2lkIHJkc19jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fQ09OTkVDVElORywgUkRTX0NPTk5fVVApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgdHJhbnNpdGlvbiB0byBzdGF0ZSBVUCwgIgorCQkJCSJjdXJyZW50IHN0YXRlIGlzICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwkJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7CisJCXJldHVybjsKKwl9CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IGNvbXBsZXRlXG4iLAorCSAgY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKKworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSAwOworCXNldF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCk7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCisvKgorICogVGhpcyByYW5kb20gZXhwb25lbnRpYWwgYmFja29mZiBpcyByZWxpZWQgb24gdG8gZXZlbnR1YWxseSByZXNvbHZlIHJhY2luZworICogY29ubmVjdHMuCisgKgorICogSWYgY29ubmVjdCBhdHRlbXB0cyByYWNlIHRoZW4gYm90aCBwYXJ0aWVzIGRyb3AgYm90aCBjb25uZWN0aW9ucyBhbmQgY29tZQorICogaGVyZSB0byB3YWl0IGZvciBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdHJ5aW5nIGFnYWluLiAgRXZlbnR1YWxseQorICogdGhlIGJhY2tvZmYgcmFuZ2Ugd2lsbCBiZSBzbyBtdWNoIGdyZWF0ZXIgdGhhbiB0aGUgdGltZSBpdCB0YWtlcyB0bworICogZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0aGF0IG9uZSBvZiB0aGUgcGFpciB3aWxsIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbgorICogYmVmb3JlIHRoZSBvdGhlcidzIHJhbmRvbSBkZWxheSBmaXJlcy4KKyAqCisgKiBDb25uZWN0aW9uIGF0dGVtcHRzIHRoYXQgYXJyaXZlIHdoaWxlIGEgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGVzdGFibGlzaGVkCisgKiBhcmUgYWxzbyBjb25zaWRlcmVkIHRvIGJlIHJhY2luZyBjb25uZWN0cy4gIFRoaXMgbGV0cyBhIGNvbm5lY3Rpb24gZnJvbQorICogYSByZWJvb3RlZCBtYWNoaW5lIHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3RhbGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHRyYW5zcG9ydAorICogbm90aWNlcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBmYWlsZWQuCisgKgorICogV2Ugc2hvdWxkICphbHdheXMqIHN0YXJ0IHdpdGggYSByYW5kb20gYmFja29mZjsgb3RoZXJ3aXNlIGEgYnJva2VuIGNvbm5lY3Rpb24KKyAqIHdpbGwgYWx3YXlzIHRha2Ugc2V2ZXJhbCBpdGVyYXRpb25zIHRvIGJlIHJlLWVzdGFibGlzaGVkLgorICovCitzdGF0aWMgdm9pZCByZHNfcXVldWVfcmVjb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIHJhbmQ7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IHJlY29ubmVjdCBqaWZmaWVzICVsdVxuIiwKKwkgIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkciwKKwkgIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMpOworCisJc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKTsKKwlpZiAoY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9PSAwKSB7CisJCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSByZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllczsKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKwkJcmV0dXJuOworCX0KKworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmQsIHNpemVvZihyYW5kKSk7CisJcmRzZGVidWcoIiVsdSBkZWxheSAlbHUgY2VpbCBjb25uICVwIGZvciAlcEk0IC0+ICVwSTRcbiIsCisJCSByYW5kICUgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcywgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcywKKwkJIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LAorCQkJICAgcmFuZCAlIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMpOworCisJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IG1pbihjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzICogMiwKKwkJCQkJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMpOworfQorCit2b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfY29ubmVjdGlvbiwgY19jb25uX3cud29yayk7CisJaW50IHJldDsKKworCWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKTsKKwlpZiAocmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlyZXQgPSBjb25uLT5jX3RyYW5zLT5jb25uX2Nvbm5lY3QoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIGZvciAlcEk0IHRvICVwSTQgZGlzcGF0Y2hlZCwgcmV0ICVkXG4iLAorCQkJY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCisJCWlmIChyZXQpIHsKKwkJCWlmIChyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0NPTk5FQ1RJTkcsIFJEU19DT05OX0RPV04pKQorCQkJCXJkc19xdWV1ZV9yZWNvbm5lY3QoY29ubik7CisJCQllbHNlCisJCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwgIlJEUzogY29ubmVjdCBmYWlsZWRcbiIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19zaHV0ZG93bl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfZG93bl93KTsKKworCS8qIHNodXQgaXQgZG93biB1bmxlc3MgaXQncyBkb3duIGFscmVhZHkgKi8KKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fRE9XTikpIHsKKwkJLyoKKwkJICogUXVpZXNjZSB0aGUgY29ubmVjdGlvbiBtZ210IGhhbmRsZXJzIGJlZm9yZSB3ZSBzdGFydCB0ZWFyaW5nCisJCSAqIHRoaW5ncyBkb3duLiBXZSBkb24ndCBob2xkIHRoZSBtdXRleCBmb3IgdGhlIGVudGlyZQorCQkgKiBkdXJhdGlvbiBvZiB0aGUgc2h1dGRvd24gb3BlcmF0aW9uLCBlbHNlIHdlIG1heSBiZQorCQkgKiBkZWFkbG9ja2luZyB3aXRoIHRoZSBDTSBoYW5kbGVyLiBJbnN0ZWFkLCB0aGUgQ00gZXZlbnQKKwkJICogaGFuZGxlciBpcyBzdXBwb3NlZCB0byBjaGVjayBmb3Igc3RhdGUgRElTQ09OTkVDVElORworCQkgKi8KKwkJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX1VQLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKQorCQkgJiYgIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRVJST1IsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpKSB7CisJCQlyZHNfY29ubl9lcnJvcihjb25uLCAic2h1dGRvd24gY2FsbGVkIGluIHN0YXRlICVkXG4iLAorCQkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQkJcmV0dXJuOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCQltdXRleF9sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisJCWNvbm4tPmNfdHJhbnMtPmNvbm5fc2h1dGRvd24oY29ubik7CisJCXJkc19jb25uX3Jlc2V0KGNvbm4pOworCQltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCQlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRElTQ09OTkVDVElORywgUkRTX0NPTk5fRE9XTikpIHsKKwkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nCisJCQkgKiBkb3duIHRoZSBjb25uZWN0aW9uLCBhbmQgc29tZW9uZSB1bmxvYWRzIHRoZSByZHMgbW9kdWxlLgorCQkJICogUXVpdGUgcmVwcm9kdWNlYWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgorCQkJICogTW9zdGx5IGhhcm1sZXNzLgorCQkJICovCisJCQlyZHNfY29ubl9lcnJvcihjb25uLAorCQkJCSIlczogZmFpbGVkIHRvIHRyYW5zaXRpb24gdG8gc3RhdGUgRE9XTiwgIgorCQkJCSJjdXJyZW50IHN0YXRlIGlzICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBUaGVuIHJlY29ubmVjdCBpZiBpdCdzIHN0aWxsIGxpdmUuCisJICogVGhlIHBhc3NpdmUgc2lkZSBvZiBhbiBJQiBsb29wYmFjayBjb25uZWN0aW9uIGlzIG5ldmVyIGFkZGVkCisJICogdG8gdGhlIGNvbm4gaGFzaCwgc28gd2UgbmV2ZXIgdHJpZ2dlciBhIHJlY29ubmVjdCBvbiB0aGlzCisJICogY29ubiAtIHRoZSByZWNvbm5lY3QgaXMgYWx3YXlzIHRyaWdnZXJlZCBieSB0aGUgYWN0aXZlIHBlZXIuICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29ubi0+Y19jb25uX3cpOworCWlmICghaGxpc3RfdW5oYXNoZWQoJmNvbm4tPmNfaGFzaF9ub2RlKSkKKwkJcmRzX3F1ZXVlX3JlY29ubmVjdChjb25uKTsKK30KKwordm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfc2VuZF93LndvcmspOworCWludCByZXQ7CisKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJcmV0ID0gcmRzX3NlbmRfeG1pdChjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgcmV0ICVkXG4iLCBjb25uLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FQUdBSU46CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9pbW1lZGlhdGVfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9kZWxheWVkX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMik7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfcmVjdl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfcmVjdl93LndvcmspOworCWludCByZXQ7CisKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJcmV0ID0gY29ubi0+Y190cmFucy0+cmVjdihjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgcmV0ICVkXG4iLCBjb25uLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FQUdBSU46CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9pbW1lZGlhdGVfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxheWVkX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMik7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfdGhyZWFkc19leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUocmRzX3dxKTsKK30KKworaW50IF9faW5pdCByZHNfdGhyZWFkc19pbml0KHZvaWQpCit7CisJcmRzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtyZHNkIik7CisJaWYgKHJkc193cSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90cmFuc3BvcnQuYyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3ZGE2MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQocmRzX3RyYW5zcG9ydHMpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocmRzX3RyYW5zX3NlbSk7CisKK2ludCByZHNfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCUJVR19PTihzdHJsZW4odHJhbnMtPnRfbmFtZSkgKyAxID4gVFJBTlNOQU1TSVopOworCisJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2FkZF90YWlsKCZ0cmFucy0+dF9pdGVtLCAmcmRzX3RyYW5zcG9ydHMpOworCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisKKwl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2RlbF9pbml0KCZ0cmFucy0+dF9pdGVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJVbnJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisKKwl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0ICpyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnJldCA9IE5VTEw7CisKKwlpZiAoSU5fTE9PUEJBQ0sobnRvaGwoYWRkcikpKQorCQlyZXR1cm4gJnJkc19sb29wX3RyYW5zcG9ydDsKKworCWRvd25fcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKKwkJaWYgKHRyYW5zLT5sYWRkcl9jaGVjayhhZGRyKSA9PSAwKSB7CisJCQlyZXQgPSB0cmFuczsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0YXRzIGVudHJpZXMgaW4gdGhlIHNuYXBzaG90IGFuZCBvbmx5CisgKiBjb3BpZXMgdGhlbSB1c2luZyB0aGUgaXRlciBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZW0uICBUaGUKKyAqIGNhbGxlciBwYXNzZXMgaW4gdGhlIGdsb2JhbCBzdGF0cyBzbyB0aGF0IHdlIGNhbiBzaXplIGFuZCBjb3B5IHdoaWxlCisgKiBob2xkaW5nIHRoZSBsb2NrLgorICovCit1bnNpZ25lZCBpbnQgcmRzX3RyYW5zX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBhdmFpbCkKKworeworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCXVuc2lnbmVkIGludCBwYXJ0OworCisJcmRzX2luZm9faXRlcl91bm1hcChpdGVyKTsKKwlkb3duX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKKwkJaWYgKHRyYW5zLT5zdGF0c19pbmZvX2NvcHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXBhcnQgPSB0cmFucy0+c3RhdHNfaW5mb19jb3B5KGl0ZXIsIGF2YWlsKTsKKwkJYXZhaWwgLT0gbWluKGF2YWlsLCBwYXJ0KTsKKwkJdG90YWwgKz0gcGFydDsKKwl9CisKKwl1cF9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCXJldHVybiB0b3RhbDsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2UvYWZfcm9zZS5jIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCmluZGV4IDAxMzkyNjQuLjBmMzZlOGQgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL2FmX3Jvc2UuYworKysgYi9uZXQvcm9zZS9hZl9yb3NlLmMKQEAgLTExMjQsNiArMTEyNCwxMCBAQAogCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KIAlTT0NLX0RFQlVHKHNrLCAiUk9TRTogc2VuZHRvOiBidWlsZGluZyBwYWNrZXQuXG4iKTsKKwkvKiBTYW5pdHkgY2hlY2sgdGhlIHBhY2tldCBzaXplICovCisJaWYgKGxlbiA+IDY1NTM1KQorCQlyZXR1cm4gLUVNU0dTSVpFOworCiAJc2l6ZSA9IGxlbiArIEFYMjVfQlBRX0hFQURFUl9MRU4gKyBBWDI1X01BWF9IRUFERVJfTEVOICsgUk9TRV9NSU5fTEVOOwogCiAJaWYgKChza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBzaXplLCBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycikpID09IE5VTEwpCkBAIC0xNTg3LDggKzE1OTEsNyBAQAogCQljaGFyIG5hbWVbSUZOQU1TSVpdOwogCiAJCXNwcmludGYobmFtZSwgInJvc2UlZCIsIGkpOwotCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSwKLQkJCQkgICBuYW1lLCByb3NlX3NldHVwKTsKKwkJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsIG5hbWUsIHJvc2Vfc2V0dXApOwogCQlpZiAoIWRldikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJST1NFOiByb3NlX3Byb3RvX2luaXQgLSB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKIAkJCXJjID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2VfZGV2LmMgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCmluZGV4IDEyY2ZjZjAuLjdkY2YyNTYgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2VfZGV2LmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwpAQCAtNTcsNyArNTcsNyBAQAogewogI2lmZGVmIENPTkZJR19JTkVUCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tibjsKIAl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIHN0YXRpYyBpbnQgcm9zZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUk9TRTogcm9zZV94bWl0IC0gY2FsbGVkIHdoZW4gaWZhY2UgaXMgZG93blxuIik7CkBAIC0xNDQsMzAgKzE0NCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJvc2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIG5ldGRldl9wcml2KGRldik7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyByb3NlX2hlYWRlcl9vcHMgPSB7CiAJLmNyZWF0ZQk9IHJvc2VfaGVhZGVyLAogCS5yZWJ1aWxkPSByb3NlX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByb3NlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHJvc2Vfb3BlbiwKKwkubmRvX3N0b3AJCT0gcm9zZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcm9zZV94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gcm9zZV9zZXRfbWFjX2FkZHJlc3MsCit9OworCiB2b2lkIHJvc2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm10dQkJPSBST1NFX01BWF9QQUNLRVRfU0laRSAtIDI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSByb3NlX3htaXQ7Ci0JZGV2LT5vcGVuCQk9IHJvc2Vfb3BlbjsKLQlkZXYtPnN0b3AJCT0gcm9zZV9jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJnJvc2VfbmV0ZGV2X29wczsKIAogCWRldi0+aGVhZGVyX29wcwkJPSAmcm9zZV9oZWFkZXJfb3BzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gQVgyNV9CUFFfSEVBREVSX0xFTiArIEFYMjVfTUFYX0hFQURFUl9MRU4gKyBST1NFX01JTl9MRU47CiAJZGV2LT5hZGRyX2xlbgkJPSBST1NFX0FERFJfTEVOOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfUk9TRTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IHJvc2Vfc2V0X21hY19hZGRyZXNzOwogCiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOwotCWRldi0+Z2V0X3N0YXRzID0gcm9zZV9nZXRfc3RhdHM7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCAwZmM0YTE4Li4zMjAwOTc5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTQ0NCw2ICs0NDQsMTcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4pOwogCit2b2lkIHFkaXNjX3dhcm5fbm9ud2MoY2hhciAqdHh0LCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKQoreworCWlmICghKHFkaXNjLT5mbGFncyAmIFRDUV9GX1dBUk5fTk9OV0MpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICIlczogJXMgcWRpc2MgJVg6IGlzIG5vbi13b3JrLWNvbnNlcnZpbmc/XG4iLAorCQkgICAgICAgdHh0LCBxZGlzYy0+b3BzLT5pZCwgcWRpc2MtPmhhbmRsZSA+PiAxNik7CisJCXFkaXNjLT5mbGFncyB8PSBUQ1FfRl9XQVJOX05PTldDOworCX0KK30KK0VYUE9SVF9TWU1CT0wocWRpc2Nfd2Fybl9ub253Yyk7CisKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBxZGlzY193YXRjaGRvZyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHFkaXNjX3dhdGNoZG9nICp3ZCA9IGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHFkaXNjX3dhdGNoZG9nLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggOWU0M2VkOS4uZDcyOGQ4MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0xOTYwLDggKzE5NjAsMTEgQEAKIAljYnFfcm1wcmlvKHEsIGNsKTsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAotCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkKLQkJY2JxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggZTM2ZTk0YS4uNzU5N2ZlMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYworKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC0xNTUsOCArMTU1LDExIEBACiAJZHJyX3B1cmdlX3F1ZXVlKGNsKTsKIAlxZGlzY19jbGFzc19oYXNoX3JlbW92ZSgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWRycl9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggNDVjMzFiMS4uNTAyMmY5YyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTg4Nyw4ICs4ODcsNyBAQAogCiAJc2tiID0gc2NoLT5vcHMtPnBlZWsoc2NoKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50aygicWRpc2NfcGVla19sZW46IG5vbiB3b3JrLWNvbnNlcnZpbmcgcWRpc2MgP1xuIik7CisJCXFkaXNjX3dhcm5fbm9ud2MoInFkaXNjX3BlZWtfbGVuIiwgc2NoKTsKIAkJcmV0dXJuIDA7CiAJfQogCWxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKQEAgLTExNDAsOCArMTEzOSwxMSBAQAogCWhmc2NfcHVyZ2VfcXVldWUoc2NoLCBjbCk7CiAJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJmNsLT5jbF9jb21tb24pOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQloZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCXJldHVybiAwOwpAQCAtMTY0Miw4ICsxNjQ0LDcgQEAKIAogCXNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLT5xZGlzYyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoIkhGU0M6IE5vbi13b3JrLWNvbnNlcnZpbmcgcWRpc2MgP1xuIik7CisJCXFkaXNjX3dhcm5fbm9ud2MoIkhGU0MiLCBjbC0+cWRpc2MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDJmMGYwYjAuLjg4Y2QwMjYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogCkBAIC0xMTQsOCArMTE1LDYgQEAKIAlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKIAlpbnQgZmlsdGVyX2NudDsKIAotCWludCB3YXJuZWQ7CQkvKiBvbmx5IG9uZSB3YXJuaW5nIGFib3V0IG5vbiB3b3JrIGNvbnNlcnZpbmcgLi4gKi8KLQogCS8qIHRva2VuIGJ1Y2tldCBwYXJhbWV0ZXJzICovCiAJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnJhdGU7CS8qIHJhdGUgdGFibGUgb2YgdGhlIGNsYXNzIGl0c2VsZiAqLwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpjZWlsOwkvKiBjZWlsaW5nIHJhdGUgKGxpbWl0cyBib3Jyb3dzIHRvbykgKi8KQEAgLTE1NSw2ICsxNTQsMTAgQEAKIAlpbnQgZGlyZWN0X3FsZW47CS8qIG1heCBxbGVuIG9mIGFib3ZlICovCiAKIAlsb25nIGRpcmVjdF9wa3RzOworCisjZGVmaW5lIEhUQl9XQVJOX1RPT01BTllFVkVOVFMJMHgxCisJdW5zaWduZWQgaW50IHdhcm5lZDsJLyogb25seSBvbmUgd2FybmluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIAogLyogZmluZCBjbGFzcyBpbiBnbG9iYWwgaGFzaCB0YWJsZSB1c2luZyBnaXZlbiBoYW5kbGUgKi8KQEAgLTY1OCw3ICs2NjEsNyBAQAogICogaHRiX2RvX2V2ZW50cyAtIG1ha2UgbW9kZSBjaGFuZ2VzIHRvIGNsYXNzZXMgYXQgdGhlIGxldmVsCiAgKgogICogU2NhbnMgZXZlbnQgcXVldWUgZm9yIHBlbmRpbmcgZXZlbnRzIGFuZCBhcHBsaWVzIHRoZW0uIFJldHVybnMgdGltZSBvZgotICogbmV4dCBwZW5kaW5nIGV2ZW50ICgwIGZvciBubyBldmVudCBpbiBwcSkuCisgKiBuZXh0IHBlbmRpbmcgZXZlbnQgKDAgZm9yIG5vIGV2ZW50IGluIHBxLCBxLT5ub3cgZm9yIHRvbyBtYW55IGV2ZW50cykuCiAgKiBOb3RlOiBBcHBsaWVkIGFyZSBldmVudHMgd2hvc2UgaGF2ZSBjbC0+cHFfa2V5IDw9IHEtPm5vdy4KICAqLwogc3RhdGljIHBzY2hlZF90aW1lX3QgaHRiX2RvX2V2ZW50cyhzdHJ1Y3QgaHRiX3NjaGVkICpxLCBpbnQgbGV2ZWwsCkBAIC02ODYsOCArNjg5LDE0IEBACiAJCWlmIChjbC0+Y21vZGUgIT0gSFRCX0NBTl9TRU5EKQogCQkJaHRiX2FkZF90b193YWl0X3RyZWUocSwgY2wsIGRpZmYpOwogCX0KLQkvKiB0b28gbXVjaCBsb2FkIC0gbGV0J3MgY29udGludWUgb24gbmV4dCBqaWZmaWUgKGluY2x1ZGluZyBhYm92ZSkgKi8KLQlyZXR1cm4gcS0+bm93ICsgMiAqIFBTQ0hFRF9USUNLU19QRVJfU0VDIC8gSFo7CisKKwkvKiB0b28gbXVjaCBsb2FkIC0gbGV0J3MgY29udGludWUgYWZ0ZXIgYSBicmVhayBmb3Igc2NoZWR1bGluZyAqLworCWlmICghKHEtPndhcm5lZCAmIEhUQl9XQVJOX1RPT01BTllFVkVOVFMpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh0YjogdG9vIG1hbnkgZXZlbnRzIVxuIik7CisJCXEtPndhcm5lZCB8PSBIVEJfV0FSTl9UT09NQU5ZRVZFTlRTOworCX0KKworCXJldHVybiBxLT5ub3c7CiB9CiAKIC8qIFJldHVybnMgY2xhc3MtPm5vZGUrcHJpbyBmcm9tIGlkLXRyZWUgd2hlcmUgY2xhc3NlJ3MgaWQgaXMgPj0gaWQuIE5VTEwKQEAgLTgwOSwxMyArODE4LDggQEAKIAkJc2tiID0gY2wtPnVuLmxlYWYucS0+ZGVxdWV1ZShjbC0+dW4ubGVhZi5xKTsKIAkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpCiAJCQlicmVhazsKLQkJaWYgKCFjbC0+d2FybmVkKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImh0YjogY2xhc3MgJVggaXNuJ3Qgd29yayBjb25zZXJ2aW5nID8hXG4iLAotCQkJICAgICAgIGNsLT5jb21tb24uY2xhc3NpZCk7Ci0JCQljbC0+d2FybmVkID0gMTsKLQkJfQogCisJCXFkaXNjX3dhcm5fbm9ud2MoImh0YiIsIGNsLT51bi5sZWFmLnEpOwogCQlodGJfbmV4dF9yYl9ub2RlKChsZXZlbCA/IGNsLT5wYXJlbnQtPnVuLmlubmVyLnB0ciA6IHEtPgogCQkJCSAgcHRyWzBdKSArIHByaW8pOwogCQljbCA9IGh0Yl9sb29rdXBfbGVhZihxLT5yb3dbbGV2ZWxdICsgcHJpbywgcHJpbywKQEAgLTg5Miw3ICs4OTYsMTAgQEAKIAkJfQogCX0KIAlzY2gtPnFzdGF0cy5vdmVybGltaXRzKys7Ci0JcWRpc2Nfd2F0Y2hkb2dfc2NoZWR1bGUoJnEtPndhdGNoZG9nLCBuZXh0X2V2ZW50KTsKKwlpZiAobGlrZWx5KG5leHRfZXZlbnQgPiBxLT5ub3cpKQorCQlxZGlzY193YXRjaGRvZ19zY2hlZHVsZSgmcS0+d2F0Y2hkb2csIG5leHRfZXZlbnQpOworCWVsc2UKKwkJc2NoZWR1bGVfd29yaygmcS0+d29yayk7CiBmaW46CiAJcmV0dXJuIHNrYjsKIH0KQEAgLTk2Miw2ICs5NjksMTQgQEAKIAlbVENBX0hUQl9SVEFCXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCAubGVuID0gVENfUlRBQl9TSVpFIH0sCiB9OwogCitzdGF0aWMgdm9pZCBodGJfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBodGJfc2NoZWQsIHdvcmspOworCXN0cnVjdCBRZGlzYyAqc2NoID0gcS0+d2F0Y2hkb2cucWRpc2M7CisKKwlfX25ldGlmX3NjaGVkdWxlKHFkaXNjX3Jvb3Qoc2NoKSk7Cit9CisKIHN0YXRpYyBpbnQgaHRiX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCkKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwpAQCAtOTk2LDYgKzEwMTEsNyBAQAogCQlJTklUX0xJU1RfSEVBRChxLT5kcm9wcyArIGkpOwogCiAJcWRpc2Nfd2F0Y2hkb2dfaW5pdCgmcS0+d2F0Y2hkb2csIHNjaCk7CisJSU5JVF9XT1JLKCZxLT53b3JrLCBodGJfd29ya19mdW5jKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZxLT5kaXJlY3RfcXVldWUpOwogCiAJcS0+ZGlyZWN0X3FsZW4gPSBxZGlzY19kZXYoc2NoKS0+dHhfcXVldWVfbGVuOwpAQCAtMTE4OCw3ICsxMjA0LDYgQEAKIAlrZnJlZShjbCk7CiB9CiAKLS8qIGFsd2F5cyBjYWxlZCB1bmRlciBCSCAmIHF1ZXVlIGxvY2sgKi8KIHN0YXRpYyB2b2lkIGh0Yl9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CkBAIC0xMTk2LDYgKzEyMTEsNyBAQAogCXN0cnVjdCBodGJfY2xhc3MgKmNsOwogCXVuc2lnbmVkIGludCBpOwogCisJY2FuY2VsX3dvcmtfc3luYygmcS0+d29yayk7CiAJcWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKCZxLT53YXRjaGRvZyk7CiAJLyogVGhpcyBsaW5lIHVzZWQgdG8gYmUgYWZ0ZXIgaHRiX2Rlc3Ryb3lfY2xhc3MgY2FsbCBiZWxvdwogCSAgIGFuZCBzdXJwcmlzaW5nbHkgaXQgd29ya2VkIGluIDIuNC4gQnV0IGl0IG11c3QgcHJlY2VkZSBpdApAQCAtMTI1OSw4ICsxMjc1LDExIEBACiAJaWYgKGxhc3RfY2hpbGQpCiAJCWh0Yl9wYXJlbnRfdG9fbGVhZihxLCBjbCwgbmV3X3EpOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQlodGJfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCA3ZTE1MTg2Li45MTI3MzEyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCWludCBpOwogCiAJaWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKHFkaXNjX2RldihzY2gpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAobmxhX2xlbihvcHQpIDwgc2l6ZW9mKCpxb3B0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IGEyZjkzYzAuLmUyMmRmZTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJc3RydWN0IHRjX3RiZl9xb3B0ICpxb3B0OwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpydGFiID0gTlVMTDsKIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcHRhYiA9IE5VTEw7Ci0Jc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRtcDsKIAlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gTlVMTDsKIAlpbnQgbWF4X3NpemUsbjsKIApAQCAtMjk1LDEzICsyOTQsOSBAQAogCXEtPnRva2VucyA9IHEtPmJ1ZmZlcjsKIAlxLT5wdG9rZW5zID0gcS0+bXR1OwogCi0JdG1wID0gcS0+Ul90YWI7Ci0JcS0+Ul90YWIgPSBydGFiOwotCXJ0YWIgPSB0bXA7CisJc3dhcChxLT5SX3RhYiwgcnRhYik7CisJc3dhcChxLT5QX3RhYiwgcHRhYik7CiAKLQl0bXAgPSBxLT5QX3RhYjsKLQlxLT5QX3RhYiA9IHB0YWI7Ci0JcHRhYiA9IHRtcDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAllcnIgPSAwOwogZG9uZToKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RlYnVnLmMgYi9uZXQvc2N0cC9kZWJ1Zy5jCmluZGV4IDY3NzE1ZjQuLjdmZjU0OGEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2RlYnVnLmMKKysrIGIvbmV0L3NjdHAvZGVidWcuYwpAQCAtODYsNiArODYsOSBAQAogCWNhc2UgU0NUUF9DSURfRldEX1RTTjoKIAkJcmV0dXJuICJGV0RfVFNOIjsKIAorCWNhc2UgU0NUUF9DSURfQVVUSDoKKwkJcmV0dXJuICJBVVRIIjsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTEzNSw2ICsxMzgsNyBAQAogCSJQUklNSVRJVkVfQUJPUlQiLAogCSJQUklNSVRJVkVfU0VORCIsCiAJIlBSSU1JVElWRV9SRVFVRVNUSEVBUlRCRUFUIiwKKwkiUFJJTUlUSVZFX0FTQ09ORiIsCiB9OwogCiAvKiBMb29rdXAgcHJpbWl0aXZlIGRlYnVnIG5hbWUuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCAyZTRhODY0Li5kMmU5ODgwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTgzLDE0ICs4MywxNSBAQAogewogCXN0cnVjdCBza19idWZmICpsaXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CiAJc3RydWN0IHNjdHBoZHIgKnNoID0gc2N0cF9oZHIoc2tiKTsKLQlfX2JlMzIgY21wID0gc2gtPmNoZWNrc3VtOwotCV9fYmUzMiB2YWwgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOworCV9fbGUzMiBjbXAgPSBzaC0+Y2hlY2tzdW07CisJX19sZTMyIHZhbDsKKwlfX3UzMiB0bXAgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOwogCiAJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQotCQl2YWwgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLAotCQkJCQl2YWwpOworCQl0bXAgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLAorCQkJCQl0bXApOwogCi0JdmFsID0gc2N0cF9lbmRfY2tzdW0odmFsKTsKKwl2YWwgPSBzY3RwX2VuZF9ja3N1bSh0bXApOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCkBAIC0xNDIsNyArMTQzLDggQEAKIAlfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7CiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKIAkJZ290byBkaXNjYXJkX2l0OwotCWlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmJiBzY3RwX3Jjdl9jaGVja3N1bShza2IpIDwgMCkKKwlpZiAoIXNjdHBfY2hlY2tzdW1fZGlzYWJsZSAmJiAhc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmJgorCQkgIHNjdHBfcmN2X2NoZWNrc3VtKHNrYikgPCAwKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IGNlYWE0YWEuLmE2M2RlM2YgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTk3LDggKzk3LDcgQEAKIAkJaWYgKGFkZHIpIHsKIAkJCWFkZHItPmEudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJCWFkZHItPmEudjYuc2luNl9wb3J0ID0gMDsKLQkJCW1lbWNweSgmYWRkci0+YS52Ni5zaW42X2FkZHIsICZpZmEtPmFkZHIsCi0JCQkJIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCWlwdjZfYWRkcl9jb3B5KCZhZGRyLT5hLnY2LnNpbjZfYWRkciwgJmlmYS0+YWRkcik7CiAJCQlhZGRyLT5hLnY2LnNpbjZfc2NvcGVfaWQgPSBpZmEtPmlkZXYtPmRldi0+aWZpbmRleDsKIAkJCWFkZHItPnZhbGlkID0gMTsKIAkJCXNwaW5fbG9ja19iaCgmc2N0cF9sb2NhbF9hZGRyX2xvY2spOwpAQCAtNjI4LDkgKzYyNyw3IEBACiBzdGF0aWMgc3RydWN0IHNvY2sgKnNjdHBfdjZfY3JlYXRlX2FjY2VwdF9zayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrICpuZXdzazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCBpcHY2X3BpbmZvICpuZXducCwgKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzY3RwNl9zb2NrICpuZXdzY3RwNnNrOwogCkBAIC02NDAsMTcgKzYzNyw3IEBACiAKIAlzb2NrX2luaXRfZGF0YShOVUxMLCBuZXdzayk7CiAKLQluZXdzay0+c2tfdHlwZSA9IFNPQ0tfU1RSRUFNOwotCi0JbmV3c2stPnNrX3Byb3QgPSBzay0+c2tfcHJvdDsKLQluZXdzay0+c2tfbm9fY2hlY2sgPSBzay0+c2tfbm9fY2hlY2s7Ci0JbmV3c2stPnNrX3JldXNlID0gc2stPnNrX3JldXNlOwotCi0JbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCW5ld3NrLT5za19mYW1pbHkgPSBQRl9JTkVUNjsKLQluZXdzay0+c2tfcHJvdG9jb2wgPSBJUFBST1RPX1NDVFA7Ci0JbmV3c2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OwotCW5ld3NrLT5za19zaHV0ZG93biA9IHNrLT5za19zaHV0ZG93bjsKKwlzY3RwX2NvcHlfc29jayhuZXdzaywgc2ssIGFzb2MpOwogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpOwogCiAJbmV3c2N0cDZzayA9IChzdHJ1Y3Qgc2N0cDZfc29jayAqKW5ld3NrOwpAQCAtNjU4LDcgKzY0NSw2IEBACiAKIAlzY3RwX3NrKG5ld3NrKS0+djRtYXBwZWQgPSBzY3RwX3NrKHNrKS0+djRtYXBwZWQ7CiAKLQluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CiAJbmV3bnAgPSBpbmV0Nl9zayhuZXdzayk7CiAKIAltZW1jcHkobmV3bnAsIG5wLCBzaXplb2Yoc3RydWN0IGlwdjZfcGluZm8pKTsKQEAgLTY2NiwyNiArNjUyLDggQEAKIAkvKiBJbml0aWFsaXplIHNrJ3Mgc3BvcnQsIGRwb3J0LCByY3Zfc2FkZHIgYW5kIGRhZGRyIGZvciBnZXRzb2NrbmFtZSgpCiAJICogYW5kIGdldHBlZXJuYW1lKCkuCiAJICovCi0JbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKLQluZXducC0+c2FkZHIgPSBucC0+c2FkZHI7Ci0JbmV3bnAtPnJjdl9zYWRkciA9IG5wLT5yY3Zfc2FkZHI7Ci0JbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCXNjdHBfdjZfdG9fc2tfZGFkZHIoJmFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLCBuZXdzayk7CiAKLQkvKiBJbml0IHRoZSBpcHY0IHBhcnQgb2YgdGhlIHNvY2tldCBzaW5jZSB3ZSBjYW4gaGF2ZSBzb2NrZXRzCi0JICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LgotCSAqLwotCW5ld2luZXQtPnVjX3R0bCA9IC0xOwotCW5ld2luZXQtPm1jX2xvb3AgPSAxOwotCW5ld2luZXQtPm1jX3R0bCA9IDE7Ci0JbmV3aW5ldC0+bWNfaW5kZXggPSAwOwotCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOwotCi0JaWYgKGlwdjRfY29uZmlnLm5vX3BtdHVfZGlzYykKLQkJbmV3aW5ldC0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19ET05UOwotCWVsc2UKLQkJbmV3aW5ldC0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UOwotCiAJc2tfcmVmY250X2RlYnVnX2luYyhuZXdzayk7CiAKIAlpZiAobmV3c2stPnNrX3Byb3QtPmluaXQobmV3c2spKSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDczNjM5MzUuLjdkMDhmNTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC00OSwxMyArNDksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAotI2lmbmRlZiBURVNUX0ZSQU1FCi0jaW5jbHVkZSA8bmV0L3RjcC5oPgotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKG5vdCBkZWZpbmVkKSAqLwotCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+IC8qIGZvciBzYV9mYW1pbHlfdCAqLwogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKQEAgLTM2Nyw3ICszNjQsNiBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHAgPSBwYWNrZXQtPnRyYW5zcG9ydDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHRwLT5hc29jOwogCXN0cnVjdCBzY3RwaGRyICpzaDsKLQlfX2JlMzIgY3JjMzIgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC01MzEsMTcgKzUyNywxNiBAQAogCSAqIE5vdGU6IEFkbGVyLTMyIGlzIG5vIGxvbmdlciBhcHBsaWNhYmxlLCBhcyBoYXMgYmVlbiByZXBsYWNlZAogCSAqIGJ5IENSQzMyLUMgYXMgZGVzY3JpYmVkIGluIDxkcmFmdC1pZXRmLXRzdndnLXNjdHBjc3VtLTAyLnR4dD4uCiAJICovCi0JaWYgKCEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkgewotCQljcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgY2tzdW1fYnVmX2xlbik7Ci0JCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOworCWlmICghc2N0cF9jaGVja3N1bV9kaXNhYmxlICYmICEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkgeworCQlfX3UzMiBjcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgY2tzdW1fYnVmX2xlbik7CisKKwkJLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCisJCSAqICAgIGNvbW1vbiBoZWFkZXIsIGFuZCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgYml0cyB1bmNoYW5nZWQuCisJCSAqLworCQlzaC0+Y2hlY2tzdW0gPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CiAJfSBlbHNlCiAJCW5za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0JLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCi0JICogICAgY29tbW9uIGhlYWRlciwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVuY2hhbmdlZC4KLQkgKi8KLQlzaC0+Y2hlY2tzdW0gPSBjcmMzMjsKLQogCS8qIElQIGxheWVyIEVDTiBzdXBwb3J0CiAJICogRnJvbSBSRkMgMjQ4MQogCSAqICAiVGhlIEVDTi1DYXBhYmxlIFRyYW5zcG9ydCAoRUNUKSBiaXQgd291bGQgYmUgc2V0IGJ5IHRoZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cXVldWUuYyBiL25ldC9zY3RwL291dHF1ZXVlLmMKaW5kZXggYmM0MTFjOC4uZDc2NWZjNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cXVldWUuYworKysgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCkBAIC00MjgsNyArNDI4LDggQEAKIAkJCSAqIHJldHJhbnNtaXR0aW5nIGR1ZSB0byBUMyB0aW1lb3V0LgogCQkJICovCiAJCQlpZiAocmVhc29uID09IFNDVFBfUlRYUl9UM19SVFggJiYKLQkJCSAgICAoamlmZmllcyAtIGNodW5rLT5zZW50X2F0KSA8IHRyYW5zcG9ydC0+bGFzdF9ydG8pCisJCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgY2h1bmstPnNlbnRfYXQgKworCQkJCQkJIHRyYW5zcG9ydC0+bGFzdF9ydG8pKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBSRkMgMjk2MCA2LjIuMSBQcm9jZXNzaW5nIGEgUmVjZWl2ZWQgU0FDSwpAQCAtMTc1Nyw2ICsxNzU4LDkgQEAKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGNodW5rLCAqdGVtcDsKIAorCWlmICghYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKKwkJcmV0dXJuOworCiAJLyogUFItU0NUUCBDMSkgTGV0IFNhY2tDdW1BY2sgYmUgdGhlIEN1bXVsYXRpdmUgVFNOIEFDSyBjYXJyaWVkIGluIHRoZQogCSAqIHJlY2VpdmVkIFNBQ0suCiAJICoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGM0OTg2ZDAuLmNiMTk4YWYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtNTg5LDQ2ICs1ODksMjEgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF92NF9jcmVhdGVfYWNjZXB0X3NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19hbGxvYyhzb2NrX25ldChzayksIFBGX0lORVQsIEdGUF9LRVJORUwsCiAJCQlzay0+c2tfcHJvdCk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAogCWlmICghbmV3c2spCiAJCWdvdG8gb3V0OwogCiAJc29ja19pbml0X2RhdGEoTlVMTCwgbmV3c2spOwogCi0JbmV3c2stPnNrX3R5cGUgPSBTT0NLX1NUUkVBTTsKLQotCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKLQluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7Ci0JbmV3c2stPnNrX3NodXRkb3duID0gc2stPnNrX3NodXRkb3duOwotCi0JbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCW5ld3NrLT5za19mYW1pbHkgPSBQRl9JTkVUOwotCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKLQluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CisJc2N0cF9jb3B5X3NvY2sobmV3c2ssIHNrLCBhc29jKTsKIAlzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTsKIAogCW5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKIAotCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yCi0JICogZ2V0c29ja25hbWUoKSBhbmQgZ2V0cGVlcm5hbWUoKQotCSAqLwotCW5ld2luZXQtPnNwb3J0ID0gaW5ldC0+c3BvcnQ7Ci0JbmV3aW5ldC0+c2FkZHIgPSBpbmV0LT5zYWRkcjsKLQluZXdpbmV0LT5yY3Zfc2FkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7Ci0JbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCW5ld2luZXQtPmRhZGRyID0gYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIudjQuc2luX2FkZHIuc19hZGRyOwotCW5ld2luZXQtPnBtdHVkaXNjID0gaW5ldC0+cG10dWRpc2M7Ci0JbmV3aW5ldC0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7Ci0KLQluZXdpbmV0LT51Y190dGwgPSAtMTsKLQluZXdpbmV0LT5tY19sb29wID0gMTsKLQluZXdpbmV0LT5tY190dGwgPSAxOwotCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKLQluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKIAogCXNrX3JlZmNudF9kZWJ1Z19pbmMobmV3c2spOwogCkBAIC0xNDEzLDQgKzEzODgsNiBAQAogTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUNikgIi1wcm90by0xMzIiKTsKIE1PRFVMRV9BVVRIT1IoIkxpbnV4IEtlcm5lbCBTQ1RQIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgdGhlIFNDVFAgcHJvdG9jb2wgKFJGQzI5NjApIik7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9fY2hlY2tzdW1zLCBzY3RwX2NoZWNrc3VtX2Rpc2FibGUsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhub19jaGVja3N1bXMsICJEaXNhYmxlIGNoZWNrc3VtcyBjb21wdXRpbmcgYW5kIHZlcmlmaWNhdGlvbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IGZkOGFjYjQuLjY4NTFlZTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTEwMCwxMSArMTAwLDExIEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBlY2FwX3BhcmFtID0gewogCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUsCi0JX19jb25zdGFudF9odG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKKwljcHVfdG9fYmUxNihzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjdHBfcGFyYW1oZHIgcHJzY3RwX3BhcmFtID0gewogCVNDVFBfUEFSQU1fRldEX1RTTl9TVVBQT1JULAotCV9fY29uc3RhbnRfaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCisJY3B1X3RvX2JlMTYoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCiB9OwogCiAvKiBBIGhlbHBlciB0byBpbml0aWFsaXplIHRvIGluaXRpYWxpemUgYW4gb3AgZXJyb3IgaW5zaWRlIGEKQEAgLTIyNCw3ICsyMjQsOSBAQAogCQludW1fZXh0ICs9IDI7CiAJfQogCi0JY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKQorCQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCiAJY2h1bmtzaXplICs9IHZwYXJhbV9sZW47CiAKIAkvKiBBY2NvdW50IGZvciBBVVRIIHJlbGF0ZWQgcGFyYW1ldGVycyAqLwpAQCAtMzA0LDEwICszMDYsMTIgQEAKIAlpZiAoc2N0cF9wcnNjdHBfZW5hYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7Ci0JYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKLQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkgeworCQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKKwkJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKKwkJYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7CisJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwl9CiAKIAkvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi8KIAlpZiAoc2N0cF9hdXRoX2VuYWJsZSkgewpAQCAtMzMyLDYgKzMzNiw3IEBACiAJc2N0cF9pbml0aGRyX3QgaW5pdGFjazsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOwogCXVuaW9uIHNjdHBfcGFyYW1zIGFkZHJzOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwOwogCWludCBhZGRyc19sZW47CiAJc2N0cF9jb29raWVfcGFyYW1fdCAqY29va2llOwogCWludCBjb29raWVfbGVuOwpAQCAtMzY2LDIyICszNzEsMjQgQEAKIAkvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgb2YgYWxsb2NhdGlvbiwgaW5jbHVkZSB0aGUgcmVzZXJ2ZWQKIAkgKiBzcGFjZSBmb3IgcmVwb3J0aW5nIHVua25vd24gcGFyYW1ldGVycyBpZiBpdCBpcyBzcGVjaWZpZWQuCiAJICovCisJc3AgPSBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spOwogCWNodW5rc2l6ZSA9IHNpemVvZihpbml0YWNrKSArIGFkZHJzX2xlbiArIGNvb2tpZV9sZW4gKyB1bmtwYXJhbV9sZW47CiAKIAkvKiBUZWxsIHBlZXIgdGhhdCB3ZSdsbCBkbyBFQ04gb25seSBpZiBwZWVyIGFkdmVydGlzZWQgc3VjaCBjYXAuICAqLwogCWlmIChhc29jLT5wZWVyLmVjbl9jYXBhYmxlKQogCQljaHVua3NpemUgKz0gc2l6ZW9mKGVjYXBfcGFyYW0pOwogCi0JaWYgKHNjdHBfcHJzY3RwX2VuYWJsZSkKKwlpZiAoYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJY2h1bmtzaXplICs9IHNpemVvZihwcnNjdHBfcGFyYW0pOwogCi0JaWYgKHNjdHBfYWRkaXBfZW5hYmxlKSB7CisJaWYgKGFzb2MtPnBlZXIuYXNjb25mX2NhcGFibGUpIHsKIAkJZXh0ZW5zaW9uc1tudW1fZXh0XSA9IFNDVFBfQ0lEX0FTQ09ORjsKIAkJZXh0ZW5zaW9uc1tudW1fZXh0KzFdID0gU0NUUF9DSURfQVNDT05GX0FDSzsKIAkJbnVtX2V4dCArPSAyOwogCX0KIAotCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkKKwkJY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKIAogCWlmIChhc29jLT5wZWVyLmF1dGhfY2FwYWJsZSkgewogCQlhdXRoX3JhbmRvbSA9IChzY3RwX3BhcmFtaGRyX3QgKilhc29jLT5jLmF1dGhfcmFuZG9tOwpAQCAtNDMyLDEwICs0MzksMTIgQEAKIAlpZiAoYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihwcnNjdHBfcGFyYW0pLCAmcHJzY3RwX3BhcmFtKTsKIAotCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOwotCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7Ci0JYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNjdHBfc2soYXNvYy0+YmFzZS5zayktPmFkYXB0YXRpb25faW5kKTsKLQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkgeworCQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKKwkJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKKwkJYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7CisJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwl9CiAKIAlpZiAoYXNvYy0+cGVlci5hdXRoX2NhcGFibGUpIHsKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfcmFuZG9tLT5sZW5ndGgpLApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IGI1NDk1YWUuLmUyMDIwZWIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTQzNCw3ICs0MzQsOCBAQAogICoKICAqLwogc3RhdGljIHZvaWQgc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkJIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQorCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCSBpbnQgaXNfaGIpCiB7CiAJLyogVGhlIGNoZWNrIGZvciBhc3NvY2lhdGlvbidzIG92ZXJhbGwgZXJyb3IgY291bnRlciBleGNlZWRpbmcgdGhlCiAJICogdGhyZXNob2xkIGlzIGRvbmUgaW4gdGhlIHN0YXRlIGZ1bmN0aW9uLgpAQCAtNDYxLDkgKzQ2MiwxNSBAQAogCSAqIGV4cGlyZXMsIHNldCBSVE8gPC0gUlRPICogMiAoImJhY2sgb2ZmIHRoZSB0aW1lciIpLiAgVGhlCiAJICogbWF4aW11bSB2YWx1ZSBkaXNjdXNzZWQgaW4gcnVsZSBDNyBhYm92ZSAoUlRPLm1heCkgbWF5IGJlCiAJICogdXNlZCB0byBwcm92aWRlIGFuIHVwcGVyIGJvdW5kIHRvIHRoaXMgZG91Ymxpbmcgb3BlcmF0aW9uLgorCSAqCisJICogU3BlY2lhbCBDYXNlOiAgdGhlIGZpcnN0IEhCIGRvZXNuJ3QgdHJpZ2dlciBleHBvbmVudGlhbCBiYWNrb2ZmLgorCSAqIFRoZSBmaXJzdCB1bmFja25vd2xlZ2VkIEhCIHRyaWdnZXJzIGl0LiAgV2UgZG8gdGhpcyB3aXRoIGEgZmxhZworCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBIQi4KIAkgKi8KLQl0cmFuc3BvcnQtPmxhc3RfcnRvID0gdHJhbnNwb3J0LT5ydG87Ci0JdHJhbnNwb3J0LT5ydG8gPSBtaW4oKHRyYW5zcG9ydC0+cnRvICogMiksIHRyYW5zcG9ydC0+YXNvYy0+cnRvX21heCk7CisJaWYgKCFpc19oYiB8fCB0cmFuc3BvcnQtPmhiX3NlbnQpIHsKKwkJdHJhbnNwb3J0LT5sYXN0X3J0byA9IHRyYW5zcG9ydC0+cnRvOworCQl0cmFuc3BvcnQtPnJ0byA9IG1pbigodHJhbnNwb3J0LT5ydG8gKiAyKSwgdHJhbnNwb3J0LT5hc29jLT5ydG9fbWF4KTsKKwl9CiB9CiAKIC8qIFdvcmtlciByb3V0aW5lIHRvIGhhbmRsZSBJTklUIGNvbW1hbmQgZmFpbHVyZS4gICovCkBAIC02MjEsNiArNjI4LDExIEBACiAJdC0+ZXJyb3JfY291bnQgPSAwOwogCXQtPmFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwogCisJLyogQ2xlYXIgdGhlIGhiX3NlbnQgZmxhZyB0byBzaWduYWwgdGhhdCB3ZSBoYWQgYSBnb29kCisJICogYWNrbm93bGVkZ2VtZW50LgorCSAqLworCXQtPmhiX3NlbnQgPSAwOworCiAJLyogTWFyayB0aGUgZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3MgYXMgYWN0aXZlIGlmIGl0IGlzIG5vdCBzbwogCSAqIG1hcmtlZC4KIAkgKi8KQEAgLTY0NiwxOCArNjU4LDYgQEAKIAkJc2N0cF90cmFuc3BvcnRfaG9sZCh0KTsKIH0KIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGRvIGEgdHJhbnNwb3J0IHJlc2V0IGF0IHRoZSBleHBpcnkgb2YgdGhlIGhlYXJiZWF0Ci0gKiB0aW1lci4KLSAqLwotc3RhdGljIHZvaWQgc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KHNjdHBfY21kX3NlcV90ICpjbWRzLAotCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJICAgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQpCi17Ci0Jc2N0cF90cmFuc3BvcnRfbG93ZXJfY3duZCh0LCBTQ1RQX0xPV0VSX0NXTkRfSU5BQ1RJVkUpOwotCi0JLyogTWFyayBvbmUgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLwotCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgdCk7Ci19CiAKIC8qIEhlbHBlciBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBwcm9jZXNzIFNBQ0sgY29tbWFuZC4gICovCiBzdGF0aWMgaW50IHNjdHBfY21kX3Byb2Nlc3Nfc2FjayhzY3RwX2NtZF9zZXFfdCAqY21kcywKQEAgLTE0NTgsMTIgKzE0NTgsMTkgQEAKIAogCQljYXNlIFNDVFBfQ01EX1NUUklLRToKIAkJCS8qIE1hcmsgb25lIHN0cmlrZSBhZ2FpbnN0IGEgdHJhbnNwb3J0LiAgKi8KLQkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0KTsKKwkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0LAorCQkJCQkJICAgIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQ6CisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0lETEU6CiAJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OwotCQkJc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KGNvbW1hbmRzLCBhc29jLCB0KTsKKwkJCXNjdHBfdHJhbnNwb3J0X2xvd2VyX2N3bmQodCwgU0NUUF9MT1dFUl9DV05EX0lOQUNUSVZFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQ6CisJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OworCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0LCAxKTsKKwkJCXQtPmhiX3NlbnQgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfT046CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IGY4OGRmZGUuLjU1YTYxYWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC05ODgsNyArOTg4LDkgQEAKIAkJLyogU2V0IHRyYW5zcG9ydCBlcnJvciBjb3VudGVyIGFuZCBhc3NvY2lhdGlvbiBlcnJvciBjb3VudGVyCiAJCSAqIHdoZW4gc2VuZGluZyBoZWFydGJlYXQuCiAJCSAqLwotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVCwKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwKKwkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKIAl9CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsCkBAIC00OTU1LDcgKzQ5NTcsNyBAQAogCSAqICAgIHRvIHRoYXQgYWRkcmVzcyBhbmQgbm90IGFja25vd2xlZGdlZCB3aXRoaW4gb25lIFJUTy4KIAkgKgogCSAqLwotCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULAorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQsCiAJCQlTQ1RQX1RSQU5TUE9SVChhcmcpKTsKIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBmZjBhOGY4Li41ZmIzYThjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMzA2OSw5ICszMDY5LDYgQEAKIAlpbnQgdmFsOwogCWludCBhc3NvY19pZCA9IDA7CiAKLQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKG9wdGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwpAQCAtMzkzOSw3ICszOTM2LDYgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLT5iYXNlLnNrOwogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldHNrOwogCXN0cnVjdCBzY3RwX2FmICphZjsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzk1NCwxOCArMzk1MCwxOCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlCi0JICogYXNvYyB0byB0aGUgbmV3c2suCi0JICovCi0Jc2N0cF9zb2NrX21pZ3JhdGUoc2ssIHNvY2stPnNrLCBhc29jLCBTQ1RQX1NPQ0tFVF9VRFBfSElHSF9CQU5EV0lEVEgpOworCXNjdHBfY29weV9zb2NrKHNvY2stPnNrLCBzaywgYXNvYyk7CiAKIAkvKiBNYWtlIHBlZWxlZC1vZmYgc29ja2V0cyBtb3JlIGxpa2UgMS0xIGFjY2VwdGVkIHNvY2tldHMuCiAJICogU2V0IHRoZSBkYWRkciBhbmQgaW5pdGlhbGl6ZSBpZCB0byBzb21ldGhpbmcgbW9yZSByYW5kb20KIAkgKi8KIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLnNhLnNhX2ZhbWlseSk7CiAJYWYtPnRvX3NrX2RhZGRyKCZhc29jLT5wZWVyLnByaW1hcnlfYWRkciwgc2spOwotCWluZXRzayA9IGluZXRfc2soc29jay0+c2spOwotCWluZXRzay0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7CisKKwkvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUKKwkgKiBhc29jIHRvIHRoZSBuZXdzay4KKwkgKi8KKwlzY3RwX3NvY2tfbWlncmF0ZShzaywgc29jay0+c2ssIGFzb2MsIFNDVFBfU09DS0VUX1VEUF9ISUdIX0JBTkRXSURUSCk7CiAKIAkqc29ja3AgPSBzb2NrOwogCkBAIC01Mjg0LDE2ICs1MjgwLDE0IEBACiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIik7CiAJCXBhcmFtcy5hc3NvY19pZCA9IDA7Ci0JfSBlbHNlIGlmIChsZW4gPT0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwl9IGVsc2UgaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UKQEAgLTU4NDksMTI3ICs1ODQzLDEzIEBACiB9CiAKIC8qCi0gKiAzLjEuMyBsaXN0ZW4oKSAtIFVEUCBTdHlsZSBTeW50YXgKLSAqCi0gKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCi0gKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCi0gKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBPbmx5IFVEUCBzdHlsZSBzb2NrZXRzIHRoYXQgYXJlIG5vdCBwZWVsZWQgb2ZmIGFyZSBhbGxvd2VkIHRvCi0JICogbGlzdGVuKCkuCi0JICovCi0JaWYgKCFzY3RwX3N0eWxlKHNrLCBVRFApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCi0JaWYgKCFiYWNrbG9nKSB7Ci0JCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKLQkJCXJldHVybiAwOwotCi0JCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKLQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFJldHVybiBpZiB3ZSBhcmUgYWxyZWFkeSBsaXN0ZW5pbmcuICovCi0JaWYgKHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgYSBiaW5kKCkgb3Igc2N0cF9iaW5keCgpIGlzIG5vdCBjYWxsZWQgcHJpb3IgdG8gYSBsaXN0ZW4oKQotCSAqIGNhbGwgdGhhdCBhbGxvd3MgbmV3IGFzc29jaWF0aW9ucyB0byBiZSBhY2NlcHRlZCwgdGhlIHN5c3RlbQotCSAqIHBpY2tzIGFuIGVwaGVtZXJhbCBwb3J0IGFuZCB3aWxsIGNob29zZSBhbiBhZGRyZXNzIHNldCBlcXVpdmFsZW50Ci0JICogdG8gYmluZGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkcmVzcy4KLQkgKgotCSAqIFRoaXMgaXMgbm90IGN1cnJlbnRseSBzcGVsbGVkIG91dCBpbiB0aGUgU0NUUCBzb2NrZXRzCi0JICogZXh0ZW5zaW9ucyBkcmFmdCwgYnV0IGZvbGxvd3MgdGhlIHByYWN0aWNlIGFzIHNlZW4gaW4gVENQCi0JICogc29ja2V0cy4KLQkgKgotCSAqIEFkZGl0aW9uYWxseSwgdHVybiBvZmYgZmFzdHJldXNlIGZsYWcgc2luY2Ugd2UgYXJlIG5vdCBsaXN0ZW5pbmcKLQkgKi8KLQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKLQlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7Ci0JCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCX0gZWxzZSB7Ci0JCWlmIChzY3RwX2dldF9wb3J0KHNrLCBpbmV0X3NrKHNrKS0+bnVtKSkgewotCQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCQlyZXR1cm4gLUVBRERSSU5VU0U7Ci0JCX0KLQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMDsKLQl9Ci0KLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgotICogNC4xLjMgbGlzdGVuKCkgLSBUQ1AgU3R5bGUgU3ludGF4Ci0gKgotICogICBBcHBsaWNhdGlvbnMgdXNlcyBsaXN0ZW4oKSB0byByZWFkeSB0aGUgU0NUUCBlbmRwb2ludCBmb3IgYWNjZXB0aW5nCi0gKiAgIGluYm91bmQgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zdHJlYW1fbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLwotCWlmICghYmFja2xvZykgewotCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCi0JCQlyZXR1cm4gMDsKLQotCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7Ci0JCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCi0JICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCi0JICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKLQkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgotCSAqCi0JICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKLQkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKLQkgKiBzb2NrZXRzLgotCSAqLwotCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOwotCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKLQkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlCi0JCXNjdHBfc2soc2spLT5iaW5kX2hhc2gtPmZhc3RyZXVzZSA9IDA7Ci0KLQlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgogICogIE1vdmUgYSBzb2NrZXQgdG8gTElTVEVOSU5HIHN0YXRlLgogICovCi1pbnQgc2N0cF9pbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK1NDVFBfU1RBVElDIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc3AtPmVwOwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtID0gTlVMTDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWlmICh1bmxpa2VseShiYWNrbG9nIDwgMCkpCi0JCWdvdG8gb3V0OwotCi0Jc2N0cF9sb2NrX3NvY2soc2spOwotCi0JaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQotCQlnb3RvIG91dDsKIAogCS8qIEFsbG9jYXRlIEhNQUMgZm9yIGdlbmVyYXRpbmcgY29va2llLiAqLwogCWlmICghc2N0cF9zayhzayktPmhtYWMgJiYgc2N0cF9obWFjX2FsZykgewpAQCAtNTk4MCwzNCArNTg2MCw5NiBAQAogCQkJCSAgICAgICAiU0NUUDogZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLAogCQkJCQlzY3RwX2htYWNfYWxnLCBQVFJfRVJSKHRmbSkpOwogCQkJfQotCQkJZXJyID0gLUVOT1NZUzsKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJfQorCisJLyoKKwkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCisJICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCisJICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKKwkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgorCSAqCisJICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKKwkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKKwkgKiBzb2NrZXRzLgorCSAqCisJICovCisJc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7CisJaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgeworCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwl9IGVsc2UgeworCQlpZiAoc2N0cF9nZXRfcG9ydChzaywgaW5ldF9zayhzayktPm51bSkpIHsKKwkJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQl9CiAJfQogCi0Jc3dpdGNoIChzb2NrLT50eXBlKSB7Ci0JY2FzZSBTT0NLX1NFUVBBQ0tFVDoKLQkJZXJyID0gc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT0NLX1NUUkVBTToKLQkJZXJyID0gc2N0cF9zdHJlYW1fbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7CisJc2N0cF9oYXNoX2VuZHBvaW50KGVwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIDQuMS4zIC8gNS4xLjMgbGlzdGVuKCkKKyAqCisgKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCisgKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCisgKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgorICoKKyAqICAgT24gVENQIHN0eWxlIHNvY2tldHMsIGFwcGxpY2F0aW9ucyB1c2UgbGlzdGVuKCkgdG8gcmVhZHkgdGhlIFNDVFAKKyAqICAgZW5kcG9pbnQgZm9yIGFjY2VwdGluZyBpbmJvdW5kIGFzc29jaWF0aW9ucy4KKyAqCisgKiAgIE9uIGJvdGggdHlwZXMgb2YgZW5kcG9pbnRzIGEgYmFja2xvZyBvZiAnMCcgZGlzYWJsZXMgbGlzdGVuaW5nLgorICoKKyAqICBNb3ZlIGEgc29ja2V0IHRvIExJU1RFTklORyBzdGF0ZS4KKyAqLworaW50IHNjdHBfaW5ldF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktPmVwOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGJhY2tsb2cgPCAwKSkKKwkJcmV0dXJuIGVycjsKKworCXNjdHBfbG9ja19zb2NrKHNrKTsKKworCS8qIFBlZWxlZC1vZmYgc29ja2V0cyBhcmUgbm90IGFsbG93ZWQgdG8gbGlzdGVuKCkuICAqLworCWlmIChzY3RwX3N0eWxlKHNrLCBVRFBfSElHSF9CQU5EV0lEVEgpKQorCQlnb3RvIG91dDsKKworCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKKwkJZ290byBvdXQ7CisKKwkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLworCWlmICghYmFja2xvZykgeworCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSAwOworCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7CisJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQlpZiAoc2stPnNrX3JldXNlKQorCQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGVycikKLQkJZ290byBjbGVhbnVwOworCS8qIElmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZywganVzdCB1cGRhdGUgdGhlIGJhY2tsb2cgKi8KKwlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCisJCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOworCWVsc2UgeworCQllcnIgPSBzY3RwX2xpc3Rlbl9zdGFydChzaywgYmFja2xvZyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CiAKLQkvKiBTdG9yZSBhd2F5IHRoZSB0cmFuc2Zvcm0gcmVmZXJlbmNlLiAqLwotCWlmICghc2N0cF9zayhzayktPmhtYWMpCi0JCXNjdHBfc2soc2spLT5obWFjID0gdGZtOworCWVyciA9IDA7CiBvdXQ6CiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7Ci1jbGVhbnVwOgotCWNyeXB0b19mcmVlX2hhc2godGZtKTsKLQlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTY3MDAsNiArNjY0Miw0OCBAQAogCXNjdHBfc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwogfQogCit2b2lkIHNjdHBfY29weV9zb2NrKHN0cnVjdCBzb2NrICpuZXdzaywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKKworCW5ld3NrLT5za190eXBlID0gc2stPnNrX3R5cGU7CisJbmV3c2stPnNrX2JvdW5kX2Rldl9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJbmV3c2stPnNrX2ZsYWdzID0gc2stPnNrX2ZsYWdzOworCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKKwluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7CisKKwluZXdzay0+c2tfc2h1dGRvd24gPSBzay0+c2tfc2h1dGRvd247CisJbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OworCW5ld3NrLT5za19mYW1pbHkgPSBzay0+c2tfZmFtaWx5OworCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKKwluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CisJbmV3c2stPnNrX3NuZGJ1ZiA9IHNrLT5za19zbmRidWY7CisJbmV3c2stPnNrX3JjdmJ1ZiA9IHNrLT5za19yY3ZidWY7CisJbmV3c2stPnNrX2xpbmdlcnRpbWUgPSBzay0+c2tfbGluZ2VydGltZTsKKwluZXdzay0+c2tfcmN2dGltZW8gPSBzay0+c2tfcmN2dGltZW87CisJbmV3c2stPnNrX3NuZHRpbWVvID0gc2stPnNrX3NuZHRpbWVvOworCisJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCisJLyogSW5pdGlhbGl6ZSBzaydzIHNwb3J0LCBkcG9ydCwgcmN2X3NhZGRyIGFuZCBkYWRkciBmb3IKKwkgKiBnZXRzb2NrbmFtZSgpIGFuZCBnZXRwZWVybmFtZSgpCisJICovCisJbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKKwluZXdpbmV0LT5zYWRkciA9IGluZXQtPnNhZGRyOworCW5ld2luZXQtPnJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CisJbmV3aW5ldC0+cG10dWRpc2MgPSBpbmV0LT5wbXR1ZGlzYzsKKwluZXdpbmV0LT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKKworCW5ld2luZXQtPnVjX3R0bCA9IGluZXQtPnVjX3R0bDsKKwluZXdpbmV0LT5tY19sb29wID0gMTsKKwluZXdpbmV0LT5tY190dGwgPSAxOworCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKKwluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKK30KKwogLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlIGFzc29jCiAgKiBhbmQgaXRzIG1lc3NhZ2VzIHRvIHRoZSBuZXdzay4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwppbmRleCBlNzQ1YzExLi5lNWRkZTQ1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC90cmFuc3BvcnQuYworKysgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwpAQCAtNzksNiArNzksNyBAQAogCXBlZXItPnJ0dHZhciA9IDA7CiAJcGVlci0+c3J0dCA9IDA7CiAJcGVlci0+cnRvX3BlbmRpbmcgPSAwOworCXBlZXItPmhiX3NlbnQgPSAwOwogCXBlZXItPmZhc3RfcmVjb3ZlcnkgPSAwOwogCiAJcGVlci0+bGFzdF90aW1lX2hlYXJkID0gamlmZmllczsKQEAgLTU0Miw4ICs1NDMsOCBAQAogCQkgKiBjb25nZXN0aW9uIGluZGljYXRpb25zIG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IHdpbmRvdyBvZgogCQkgKiBkYXRhIChvciBtb3JlIGxvb3NlbHkgbW9yZSB0aGFuIG9uY2UgZXZlcnkgcm91bmQtdHJpcCB0aW1lKS4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX2VjbmVfcmVkdWNlZCkgPgotCQkgICAgdHJhbnNwb3J0LT5ydHQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkICsKKwkJCQkJdHJhbnNwb3J0LT5ydHQpKSB7CiAJCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAogCQkJCQkJICA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPnNzdGhyZXNoOwpAQCAtNTYwLDcgKzU2MSw4IEBACiAJCSAqIHRvIGJlIGRvbmUgZXZlcnkgUlRPIGludGVydmFsLCB3ZSBkbyBpdCBldmVyeSBoZWFyYmVhdAogCQkgKiBpbnRlcnZhbC4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQpID4gdHJhbnNwb3J0LT5ydG8pCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQgKworCQkJCQl0cmFuc3BvcnQtPnJ0bykpCiAJCQl0cmFuc3BvcnQtPmN3bmQgPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCQkgNCp0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpOwogCQlicmVhazsKQEAgLTYwOCw2ICs2MTAsNyBAQAogCXQtPmZsaWdodF9zaXplID0gMDsKIAl0LT5lcnJvcl9jb3VudCA9IDA7CiAJdC0+cnRvX3BlbmRpbmcgPSAwOworCXQtPmhiX3NlbnQgPSAwOwogCXQtPmZhc3RfcmVjb3ZlcnkgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIFNGUi1DQUNDICovCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMzVkZDczNy4uOTFkMGMwMiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCQkJZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc29ja2ZzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gc29ja2ZzX2RlbGV0ZV9kZW50cnksCiAJLmRfZG5hbWUgID0gc29ja2ZzX2RuYW1lLAogfTsKQEAgLTU0NSw2ICs1NDUsMTggQEAKIAlzb2NrLT5maWxlID0gTlVMTDsKIH0KIAoraW50IHNvY2tfdHhfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgICB1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4KQoreworCXNodHgtPmZsYWdzID0gMDsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSkpCisJCXNodHgtPmhhcmR3YXJlID0gMTsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSkpCisJCXNodHgtPnNvZnR3YXJlID0gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc29ja190eF90aW1lc3RhbXApOworCiBzdGF0aWMgaW5saW5lIGludCBfX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiB7CkBAIC01OTUsMzMgKzYwNyw2NSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQga3RpbWUydHMoa3RpbWVfdCBrdCwgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAoa3QudHY2NCkgeworCQkqdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKwogLyoKICAqIGNhbGxlZCBmcm9tIHNvY2tfcmVjdl90aW1lc3RhbXAoKSBpZiBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKQogICovCiB2b2lkIF9fc29ja19yZWN2X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWt0aW1lX3Qga3QgPSBza2ItPnRzdGFtcDsKKwlpbnQgbmVlZF9zb2Z0d2FyZV90c3RhbXAgPSBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHNbM107CisJaW50IGVtcHR5ID0gMTsKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNoaHd0c3RhbXBzID0KKwkJc2tiX2h3dHN0YW1wcyhza2IpOwogCi0JaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpKSB7Ci0JCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKLQkJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCi0JCWlmIChrdC50djY0ID09IDApCi0JCQlrdCA9IGt0aW1lX2dldF9yZWFsKCk7Ci0JCXNrYi0+dHN0YW1wID0ga3Q7Ci0JCXR2ID0ga3RpbWVfdG9fdGltZXZhbChrdCk7Ci0JCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUCwgc2l6ZW9mKHR2KSwgJnR2KTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0JCS8qIFJhY2Ugb2NjdXJyZWQgYmV0d2VlbiB0aW1lc3RhbXAgZW5hYmxpbmcgYW5kIHBhY2tldAotCQkgICByZWNlaXZpbmcuICBGaWxsIGluIHRoZSBjdXJyZW50IHRpbWUgZm9yIG5vdy4gKi8KLQkJaWYgKGt0LnR2NjQgPT0gMCkKLQkJCWt0ID0ga3RpbWVfZ2V0X3JlYWwoKTsKLQkJc2tiLT50c3RhbXAgPSBrdDsKLQkJdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7Ci0JCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUE5TLCBzaXplb2YodHMpLCAmdHMpOworCS8qIFJhY2Ugb2NjdXJyZWQgYmV0d2VlbiB0aW1lc3RhbXAgZW5hYmxpbmcgYW5kIHBhY2tldAorCSAgIHJlY2VpdmluZy4gIEZpbGwgaW4gdGhlIGN1cnJlbnQgdGltZSBmb3Igbm93LiAqLworCWlmIChuZWVkX3NvZnR3YXJlX3RzdGFtcCAmJiBza2ItPnRzdGFtcC50djY0ID09IDApCisJCV9fbmV0X3RpbWVzdGFtcChza2IpOworCisJaWYgKG5lZWRfc29mdHdhcmVfdHN0YW1wKSB7CisJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKSkgeworCQkJc3RydWN0IHRpbWV2YWwgdHY7CisJCQlza2JfZ2V0X3RpbWVzdGFtcChza2IsICZ0dik7CisJCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVAsCisJCQkJIHNpemVvZih0diksICZ0dik7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJCQlza2JfZ2V0X3RpbWVzdGFtcG5zKHNrYiwgJnRzKTsKKwkJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUE5TLAorCQkJCSBzaXplb2YodHMpLCAmdHMpOworCQl9CiAJfQorCisKKwltZW1zZXQodHMsIDAsIHNpemVvZih0cykpOworCWlmIChza2ItPnRzdGFtcC50djY0ICYmCisJICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpKSB7CisJCXNrYl9nZXRfdGltZXN0YW1wbnMoc2tiLCB0cyArIDApOworCQllbXB0eSA9IDA7CisJfQorCWlmIChzaGh3dHN0YW1wcykgeworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpICYmCisJCSAgICBrdGltZTJ0cyhzaGh3dHN0YW1wcy0+c3lzdHN0YW1wLCB0cyArIDEpKQorCQkJZW1wdHkgPSAwOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpICYmCisJCSAgICBrdGltZTJ0cyhzaGh3dHN0YW1wcy0+aHd0c3RhbXAsIHRzICsgMikpCisJCQllbXB0eSA9IDA7CisJfQorCWlmICghZW1wdHkpCisJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwKKwkJCSBTQ01fVElNRVNUQU1QSU5HLCBzaXplb2YodHMpLCAmdHMpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChfX3NvY2tfcmVjdl90aW1lc3RhbXApOwpAQCAtMTAzMCw2ICsxMDc0LDEzIEBACiAKIAlsb2NrX3NvY2soc2spOwogCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOworCWlmIChvbikKKwkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7CisJZWxzZQorCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CisKIAlwcmV2ID0gJihzb2NrLT5mYXN5bmNfbGlzdCk7CiAKIAlmb3IgKGZhID0gKnByZXY7IGZhICE9IE5VTEw7IHByZXYgPSAmZmEtPmZhX25leHQsIGZhID0gKnByZXYpCkBAIC0xNDg1LDggKzE1MzYsNiBAQAogCWZkX2luc3RhbGwobmV3ZmQsIG5ld2ZpbGUpOwogCWVyciA9IG5ld2ZkOwogCi0Jc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHNvY2ssIG5ld3NvY2spOwotCiBvdXRfcHV0OgogCWZwdXRfbGlnaHQoc29jay0+ZmlsZSwgZnB1dF9uZWVkZWQpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDU3NzM4NWEuLjljZWQwNjIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHJwY19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcnBjX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHJwY19kZWxldGVfZGVudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDI5YzcxZTYuLjU2ODMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTEyMjUsNiArMTIyNSwyMyBAQAogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIHhzX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKworCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCisJCXJldHVybjsKKwljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpKQorCQlyZXR1cm47CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKKwkJcmV0dXJuOworCisJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKK30KKwogLyoqCiAgKiB4c191ZHBfd3JpdGVfc3BhY2UgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gc29ja2V0IGJ1ZmZlciBzcGFjZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgYXZhaWxhYmxlCkBAIC0xMjQwLDIzICsxMjU3LDkgQEAKIAlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAogCS8qIGZyb20gbmV0L2NvcmUvc29jay5jOnNvY2tfZGVmX3dyaXRlX3NwYWNlICovCi0JaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkgewotCQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCQlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkKKwkJeHNfd3JpdGVfc3BhY2Uoc2spOwogCi0JCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCi0JCQlnb3RvIG91dDsKLQkJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCi0JCQlnb3RvIG91dDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKLQkJCWdvdG8gb3V0OwotCi0JCXhwcnRfd3JpdGVfc3BhY2UoeHBydCk7Ci0JfQotCi0gb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKQEAgLTEyNzUsMjMgKzEyNzgsOSBAQAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCiAJLyogZnJvbSBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UgKi8KLQlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKSB7Ci0JCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKwlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKQorCQl4c193cml0ZV9zcGFjZShzayk7CiAKLQkJaWYgKHVubGlrZWx5KCEoc29jayA9IHNrLT5za19zb2NrZXQpKSkKLQkJCWdvdG8gb3V0OwotCQljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwotCi0JCWlmICh1bmxpa2VseSghKHhwcnQgPSB4cHJ0X2Zyb21fc29jayhzaykpKSkKLQkJCWdvdG8gb3V0OwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQotCQkJZ290byBvdXQ7Ci0KLQkJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKLQl9Ci0KLSBvdXQ6CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmMKaW5kZXggOTcyMjAxYy4uMGIxNWQ3MiAxMDA2NDQKLS0tIGEvbmV0L3N5c2N0bF9uZXQuYworKysgYi9uZXQvc3lzY3RsX25ldC5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IG5ldF9jdGxfcm9faGVhZGVyX3Blcm1zKHN0cnVjdCBjdGxfdGFibGVfcm9vdCAqcm9vdCwKIAkJc3RydWN0IG5zcHJveHkgKm5hbWVzcGFjZXMsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQogewotCWlmIChuYW1lc3BhY2VzLT5uZXRfbnMgPT0gJmluaXRfbmV0KQorCWlmIChuZXRfZXEobmFtZXNwYWNlcy0+bmV0X25zLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gdGFibGUtPm1vZGU7CiAJZWxzZQogCQlyZXR1cm4gdGFibGUtPm1vZGUgJiB+MDIyMjsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IDNkZGFmZjQuLmEzYmZkNDAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmMKKysrIGIvbmV0L3RpcGMvYmNhc3QuYwpAQCAtMTE5LDcgKzExOSw3IEBACiBzdGF0aWMgc3RydWN0IGxpbmsgKmJjbCA9IE5VTEw7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJjX2xvY2spOwogCi1jaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7Citjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7CiAKIAogc3RhdGljIHUzMiBidWZfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKmJ1ZikKQEAgLTgwMCw3ICs4MDAsNyBAQAogCXRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGJjbCwgQkNMSU5LX1dJTl9ERUZBVUxUKTsKIAliY2wtPmJfcHRyID0gJmJjYmVhcmVyLT5iZWFyZXI7CiAJYmNsLT5zdGF0ZSA9IFdPUktJTkdfV09SS0lORzsKLQlzcHJpbnRmKGJjbC0+bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUsIFRJUENfTUFYX0xJTktfTkFNRSk7CiAKIAlpZiAoQkNMSU5LX0xPR19CVUZfU0laRSkgewogCQljaGFyICpwYiA9IGttYWxsb2MoQkNMSU5LX0xPR19CVUZfU0laRSwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5oIGIvbmV0L3RpcGMvYmNhc3QuaAppbmRleCAyZjJkNzMxLi40YzE3NzFlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5oCisrKyBiL25ldC90aXBjL2JjYXN0LmgKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RydWN0IHRpcGNfbm9kZTsKIAotZXh0ZXJuIGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGJnLmMgYi9uZXQvdGlwYy9kYmcuYwppbmRleCAyOWVjYWU4Li4xODg1YTdlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kYmcuYworKysgYi9uZXQvdGlwYy9kYmcuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJfQogCiAJaWYgKHBiLT5lY2hvKQotCQlwcmludGsocHJpbnRfc3RyaW5nKTsKKwkJcHJpbnRrKCIlcyIsIHByaW50X3N0cmluZyk7CiAKIAlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggMjBkOThjNS4uMmMyNGU3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCisrKyBiL25ldC90aXBjL25vZGUuYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAlsaW5rX2luZm8uZGVzdCA9IGh0b25sKHRpcGNfb3duX2FkZHIgJiAweGZmZmZmMDApOwogCWxpbmtfaW5mby51cCA9IGh0b25sKDEpOwotCXNwcmludGYobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShsaW5rX2luZm8uc3RyLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKIAogCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBkMWI4OTgyLi5iYWFjOTEwIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMTc4LDggKzExNzgsNyBAQAogCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIG91dDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobmV3c2spCiAJCXVuaXhfcmVsZWFzZV9zb2NrKG5ld3NrLCAwKTsKIAlpZiAob3RoZXIpCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCmluZGV4IDM5NzAxZGUuLjQ2NmUyZDIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCkBAIC04Niw4ICs4NiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHdhbl9kZXZpY2UgKndhbnJvdXRlcl9maW5kX2RldmljZShjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgd2Fucm91dGVyX2RlbGV0ZV9pbnRlcmZhY2Uoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fYWNxdWlyZXMobG9jayk7CitzdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fcmVsZWFzZXMobG9jayk7CiAKIAogCkBAIC03NjMsMTIgKzc2NSwxNCBAQAogfQogCiBzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spCiB7CiAJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgKnNtcF9mbGFncyk7CiB9CiAKIAogc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCAqc21wX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKaW5kZXggMjY3ZjdmZi4uYzQ0ZDk2YiAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqCUl0ZXJhdG9yCiAgKi8KIHN0YXRpYyB2b2lkICpyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2OwogCWxvZmZfdCBsID0gKnBvczsKQEAgLTEwMSw2ICsxMDIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLW1zZy5jIGIvbmV0L3dpbWF4L29wLW1zZy5jCmluZGV4IGNiM2I0YWQuLjVkMTQ5YzEgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9vcC1tc2cuYworKysgYi9uZXQvd2ltYXgvb3AtbXNnLmMKQEAgLTI1OCw3ICsyNTgsNiBAQAogICovCiBpbnQgd2ltYXhfbXNnX3NlbmQoc3RydWN0IHdpbWF4X2RldiAqd2ltYXhfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2ltYXhfZGV2LT5uZXRfZGV2LT5kZXYucGFyZW50OwogCXZvaWQgKm1zZyA9IHNrYi0+ZGF0YTsKIAlzaXplX3Qgc2l6ZSA9IHNrYi0+bGVuOwpAQCAtMjY2LDExICsyNjUsOSBAQAogCiAJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiB3aW1heCBtc2csICV6dSBieXRlc1xuIiwgc2l6ZSk7CiAJZF9kdW1wKDIsIGRldiwgbXNnLCBzaXplKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHdpbWF4X2dubF9tY2cuaWQsIEdGUF9LRVJORUwpOwotCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogZ2VubCBtdWx0aWNhc3QgcmVzdWx0ICVkXG4iLCByZXN1bHQpOwotCWlmIChyZXN1bHQgPT0gLUVTUkNIKQkvKiBOb2JvZHkgY29ubmVjdGVkLCBpZ25vcmUgaXQgKi8KLQkJcmVzdWx0ID0gMDsJLyogYnR3LCB0aGUgc2tiIGlzIGZyZWVkIGFscmVhZHkgKi8KLQlyZXR1cm4gcmVzdWx0OworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7CisJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiBnZW5sIG11bHRpY2FzdCBkb25lXG4iKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdpbWF4X21zZ19zZW5kKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L3N0YWNrLmMgYi9uZXQvd2ltYXgvc3RhY2suYwppbmRleCAzODY5YzAzLi5hMGVlNzZiIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvc3RhY2suYworKysgYi9uZXQvd2ltYXgvc3RhY2suYwpAQCAtMTYzLDE2ICsxNjMsMTIgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aW1heF9kZXZfdG9fZGV2KHdpbWF4X2Rldik7CiAJZF9mbnN0YXJ0KDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcClcbiIsCiAJCSAgd2ltYXhfZGV2LCByZXBvcnRfc2tiKTsKLQlpZiAocmVwb3J0X3NrYiA9PSBOVUxMKQorCWlmIChyZXBvcnRfc2tiID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7Ci0JZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzdWx0ID09IC1FU1JDSCkJLyogTm9ib2R5IGNvbm5lY3RlZCwgaWdub3JlIGl0ICovCi0JCXJlc3VsdCA9IDA7CS8qIGJ0dywgdGhlIHNrYiBpcyBmcmVlZCBhbHJlYWR5ICovCi0JaWYgKHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJSRV9TVENIOiBFcnJvciBzZW5kaW5nOiAlZFxuIiwgcmVzdWx0KTsKLQkJbmxtc2dfZnJlZShyZXBvcnRfc2tiKTsKIAl9CisJZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKKwlnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKIG91dDoKIAlkX2ZuZW5kKDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcCkgPSAlZFxuIiwKIAkJd2ltYXhfZGV2LCByZXBvcnRfc2tiLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCAwOTJhZTZmLi4zYzNiYzllIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTAsNTEgKzEwLDE5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBOTDgwMjExCi0JYm9vbCAibmw4MDIxMSBuZXcgbmV0bGluayBpbnRlcmZhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENGRzgwMjExCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIG5ldyBuZXRsaW5rIGludGVyZmFjZQotCSAgKG5sODAyMTEpIHN1cHBvcnQgaW4gY2ZnODAyMTEuCi0KLQkgIElmID1uLCBkcml2ZXJzIHVzaW5nIG1hYzgwMjExIHdpbGwgYmUgY29uZmlndXJlZCB2aWEKLQkgIHdpcmVsZXNzIGV4dGVuc2lvbiBzdXBwb3J0IHByb3ZpZGVkIGJ5IHRoYXQgc3Vic3lzdGVtLgotCi0JICBJZiB1bnN1cmUsIHNheSBZLgotCiBjb25maWcgV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKIAlib29sICJPbGQgd2lyZWxlc3Mgc3RhdGljIHJlZ3VsYXRvcnkgZGVmaW5pdGlvbnMiCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uCi0JICBhbmQgdXNlcyBpdCB3aXRoaW4gdGhlIG5ldyBmcmFtZXdvcmsuIFRoaXMgaXMgYXZhaWxhYmxlCi0JICB0ZW1wb3JhcmlseSBhcyBhbiBvcHRpb24gdG8gaGVscCBwcmV2ZW50IGltbWVkaWF0ZSBpc3N1ZXMKLQkgIGR1ZSB0byB0aGUgc3dpdGNoIHRvIHRoZSBuZXcgcmVndWxhdG9yeSBmcmFtZXdvcmsgd2hpY2gKLQkgIGRvZXMgcmVxdWlyZSBhIG5ldyB1c2Vyc3BhY2UgYXBwbGljYXRpb24gd2hpY2ggaGFzIHRoZQotCSAgZGF0YWJhc2Ugb2YgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiAoQ1JEQSkgYW5kIGFub3RoZXIgZm9yCi0JICBzZXR0aW5nIHJlZ3VsYXRvcnkgZG9tYWlucyAoaXcpLgorCSAgYW5kIHVzZXMgaXQgd2l0aGluIHRoZSBuZXcgZnJhbWV3b3JrLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUKKwkgIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgYW5kIGl0IGlzIGFkdmlzZWQgdG8gbGVhdmUgaXQgb2ZmLgogCi0JICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6CisJICBGb3IgZGV0YWlscyBzZWU6CiAKLQkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvUmVndWxhdG9yeS9DUkRBCi0JICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Eb2N1bWVudGF0aW9uL2l3CisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL1JlZ3VsYXRvcnkKIAotCSAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhvdWdoIHRoYXQgaWYgeW91ICpkbyogaGF2ZSBDUkRBIHByZXNlbnQKLQkgIGFuZCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIENSREEgKndpbGwqIGJlIGNhbGxlZCB0byB1cGRhdGUgdGhlCi0JICByZWd1bGF0b3J5IGRvbWFpbiAoZm9yIFVTIGFuZCBKUCBvbmx5KS4gU3VwcG9ydCBmb3IgbGV0dGluZyB0aGUgdXNlcgotCSAgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aHJvdWdoIGl3IGlzIGFsc28gc3VwcG9ydGVkLiBUaGlzIG9wdGlvbgotCSAgbWFpbmx5IGV4aXN0cyB0byBsZWF2ZSBhcm91bmQgZm9yIGEga2VybmVsIHJlbGVhc2Ugc29tZSBvbGQgc3RhdGljCi0JICByZWd1bGF0b3J5IGRvbWFpbnMgdGhhdCB3ZXJlIGRlZmluZWQgYW5kIHRvIGtlZXAgYXJvdW5kIHRoZSBvbGQKLQkgIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlci4gVGhpcyBpcyBiZWluZyBwaGFzZWQgb3V0IGFuZCB5b3UKLQkgIHNob3VsZCBzdG9wIHVzaW5nIHRoZW0gQVNBUC4KLQotCSAgTm90ZTogWW91IHdpbGwgbmVlZCBDUkRBIGlmIHlvdSB3YW50IDgwMi4xMWQgc3VwcG9ydAotCi0JICBTYXkgWSB1bmxlc3MgeW91IGhhdmUgaW5zdGFsbGVkIGEgbmV3IHVzZXJzcGFjZSBhcHBsaWNhdGlvbi4KLQkgIEFsc28gc2F5IFkgaWYgaGF2ZSBvbmUgY3VycmVudGx5IGRlcGVuZGluZyBvbiB0aGUgaWVlZTgwMjExX3JlZ2RvbQotCSAgbW9kdWxlIHBhcmFtZXRlciBhbmQgY2Fubm90IHBvcnQgaXQgdG8gdXNlIHRoZSBuZXcgdXNlcnNwYWNlCi0JICBpbnRlcmZhY2VzLgorCSAgU2F5IE4gYW5kIGlmIHlvdSBzYXkgWSwgcGxlYXNlIHRlbGwgdXMgd2h5LiBUaGUgZGVmYXVsdCBpcyBOLgogCiBjb25maWcgV0lSRUxFU1NfRVhUCiAJYm9vbCAiV2lyZWxlc3MgZXh0ZW5zaW9ucyIKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCA5MzhhMzM0Li42ZDFlN2IyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC01LDggKzUsNyBAQAogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVApICs9IGxpYjgwMjExX2NyeXB0X2NjbXAubwogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVApICs9IGxpYjgwMjExX2NyeXB0X3RraXAubwogCi1jZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vCitjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm8gbWxtZS5vCiBjZmc4MDIxMS0kKENPTkZJR19XSVJFTEVTU19FWFQpICs9IHdleHQtY29tcGF0Lm8KLWNmZzgwMjExLSQoQ09ORklHX05MODAyMTEpICs9IG5sODAyMTEubwogCiBjY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBiOTZmYzBjLi5kMWY1NTY1IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgpAQCAtMzEsMTggKzMwLDI5IEBACiAgKiBvbmx5IHJlYWQgdGhlIGxpc3QsIGFuZCB0aGF0IGNhbiBoYXBwZW4gcXVpdGUKICAqIG9mdGVuIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBpdCBmb3IgZWFjaCBjb21tYW5kICovCiBMSVNUX0hFQUQoY2ZnODAyMTFfZHJ2X2xpc3QpOwotREVGSU5FX01VVEVYKGNmZzgwMjExX2Rydl9tdXRleCk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgY2ZnODAyMTFfZHJ2X2xpc3QsIGNmZzgwMjExX3JlZ2RvbWFpbiwKKyAqIGNvdW50cnlfaWVfcmVnZG9tYWluLCB0aGUgcmVnX2JlYWNvbl9saXN0IGFuZCB0aGUgdGhlIGxhc3QgcmVndWxhdG9yeQorICogcmVxdWVzdCByZWNlaXB0IChsYXN0X3JlcXVlc3QpLgorICovCitERUZJTkVfTVVURVgoY2ZnODAyMTFfbXV0ZXgpOwogCiAvKiBmb3IgZGVidWdmcyAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmllZWU4MDIxMV9kZWJ1Z2ZzX2RpcjsKIAotLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCi1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHkoaW50IHdpcGh5KQorLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKmRydjsKIAorCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRydi0+aWR4ID09IHdpcGh5KSB7CisJCWlmIChkcnYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKIAkJCXJlc3VsdCA9IGRydjsKIAkJCWJyZWFrOwogCQl9CkBAIC01MSwxNyArNjEsNDQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWlmICghd2lwaHkpCisJCXJldHVybiBXSVBIWV9JRFhfU1RBTEU7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlyZXR1cm4gZHJ2LT53aXBoeV9pZHg7Cit9CisKIC8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLwotc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCitzdHJ1Y3Qgd2lwaHkgKndpcGh5X2lkeF90b193aXBoeShpbnQgd2lwaHlfaWR4KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCisJaWYgKCF3aXBoeV9pZHhfdmFsaWQod2lwaHlfaWR4KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCh3aXBoeV9pZHgpOworCWlmICghZHJ2KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJmRydi0+d2lwaHk7Cit9CisKKy8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQhICovCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJaW50IGlmaW5kZXg7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqYnl3aXBoeWlkeCA9IE5VTEwsICpieWlmaWR4ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnIgPSAtRUlOVkFMOwogCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFldKSB7Ci0JCWJ5d2lwaHkgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHkoCisJCWJ5d2lwaHlpZHggPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KAogCQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pKTsKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC03OCwxNCArMTE1LDE0IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJfQogCi0JaWYgKGJ5d2lwaHkgJiYgYnlpZmlkeCkgewotCQlpZiAoYnl3aXBoeSAhPSBieWlmaWR4KQorCWlmIChieXdpcGh5aWR4ICYmIGJ5aWZpZHgpIHsKKwkJaWYgKGJ5d2lwaHlpZHggIT0gYnlpZmlkeCkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCQllbHNlCi0JCQlyZXR1cm4gYnl3aXBoeTsgLyogPT0gYnlpZmlkeCAqLworCQkJcmV0dXJuIGJ5d2lwaHlpZHg7IC8qID09IGJ5aWZpZHggKi8KIAl9Ci0JaWYgKGJ5d2lwaHkpCi0JCXJldHVybiBieXdpcGh5OworCWlmIChieXdpcGh5aWR4KQorCQlyZXR1cm4gYnl3aXBoeWlkeDsKIAogCWlmIChieWlmaWR4KQogCQlyZXR1cm4gYnlpZmlkeDsKQEAgLTk4LDcgKzEzNSw3IEBACiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlkcnYgPSBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oaW5mbyk7CiAKIAkvKiBpZiBpdCBpcyBub3QgYW4gZXJyb3Igd2UgZ3JhYiB0aGUgbG9jayBvbgpAQCAtMTA3LDcgKzE0NCw3IEBACiAJaWYgKCFJU19FUlIoZHJ2KSkKIAkJbXV0ZXhfbG9jaygmZHJ2LT5tdHgpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJcmV0dXJuIGRydjsKIH0KQEAgLTExOCw3ICsxNTUsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCWlmICghZGV2KQogCQlnb3RvIG91dDsKQEAgLTEyOSw3ICsxNjYsNyBAQAogCQlkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCWRldl9wdXQoZGV2KTsKICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiBkcnY7CiB9CiAKQEAgLTEzOSw0OSArMTc2LDQzIEBACiAJbXV0ZXhfdW5sb2NrKCZkcnYtPm10eCk7CiB9CiAKKy8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQgKi8KIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCWNoYXIgKm5ld25hbWUpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGlkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CisJaW50IHdpcGh5X2lkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKIAkvKiBwcm9oaWJpdCBjYWxsaW5nIHRoZSB0aGluZyBwaHklZCB3aGVuICVkIGlzIG5vdCBpdHMgbnVtYmVyICovCi0Jc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJmlkeCwgJnRha2VuKTsKLQlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIGlkeCAhPSByZGV2LT5pZHgpIHsKLQkJLyogY291bnQgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgdG8gcHJpbnQgaWR4ICovCisJc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJndpcGh5X2lkeCwgJnRha2VuKTsKKwlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIHdpcGh5X2lkeCAhPSByZGV2LT53aXBoeV9pZHgpIHsKKwkJLyogY291bnQgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgdG8gcHJpbnQgd2lwaHlfaWR4ICovCiAJCWRpZ2l0cyA9IDE7Ci0JCXdoaWxlIChpZHggLz0gMTApCisJCXdoaWxlICh3aXBoeV9pZHggLz0gMTApCiAJCQlkaWdpdHMrKzsKIAkJLyoKIAkJICogZGVueSB0aGUgbmFtZSBpZiBpdCBpcyBwaHk8aWR4PiB3aGVyZSA8aWR4PiBpcyBwcmludGVkCiAJCSAqIHdpdGhvdXQgbGVhZGluZyB6ZXJvZXMuIHRha2VuID09IHN0cmxlbihuZXduYW1lKSBoZXJlCiAJCSAqLwotCQlyZXN1bHQgPSAtRUlOVkFMOwogCQlpZiAodGFrZW4gPT0gc3RybGVuKFBIWV9OQU1FKSArIGRpZ2l0cykKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCiAJLyogSWdub3JlIG5vcCByZW5hbWVzICovCi0JcmVzdWx0ID0gMDsKIAlpZiAoc3RyY21wKG5ld25hbWUsIGRldl9uYW1lKCZyZGV2LT53aXBoeS5kZXYpKSA9PSAwKQotCQlnb3RvIG91dF91bmxvY2s7CisJCXJldHVybiAwOwogCiAJLyogRW5zdXJlIGFub3RoZXIgZGV2aWNlIGRvZXMgbm90IGFscmVhZHkgaGF2ZSB0aGlzIG5hbWUuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewotCQlyZXN1bHQgPSAtRUlOVkFMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCiAJCWlmIChzdHJjbXAobmV3bmFtZSwgZGV2X25hbWUoJmRydi0+d2lwaHkuZGV2KSkgPT0gMCkKLQkJCWdvdG8gb3V0X3VubG9jazsKLQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIHRoaXMgd2lsbCBvbmx5IGNoZWNrIGZvciBjb2xsaXNpb25zIGluIHN5c2ZzCi0JICogd2hpY2ggaXMgbm90IGV2ZW4gYWx3YXlzIGNvbXBpbGVkIGluLgotCSAqLwogCXJlc3VsdCA9IGRldmljZV9yZW5hbWUoJnJkZXYtPndpcGh5LmRldiwgbmV3bmFtZSk7CiAJaWYgKHJlc3VsdCkKLQkJZ290byBvdXRfdW5sb2NrOworCQlyZXR1cm4gcmVzdWx0OwogCiAJaWYgKHJkZXYtPndpcGh5LmRlYnVnZnNkaXIgJiYKIAkgICAgIWRlYnVnZnNfcmVuYW1lKHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LApAQCAtMTkxLDEzICsyMjIsOSBAQAogCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBmYWlsZWQgdG8gcmVuYW1lIGRlYnVnZnMgZGlyIHRvICVzIVxuIiwKIAkJICAgICAgIG5ld25hbWUpOwogCi0JcmVzdWx0ID0gMDsKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOwotCWlmIChyZXN1bHQgPT0gMCkKLQkJbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShyZGV2KTsKKwlubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKHJkZXYpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gMDsKIH0KIAogLyogZXhwb3J0ZWQgZnVuY3Rpb25zICovCkBAIC0yMjAsMjYgKzI0NywyOCBAQAogCiAJZHJ2LT5vcHMgPSBvcHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAotCWRydi0+aWR4ID0gd2lwaHlfY291bnRlcisrOworCWRydi0+d2lwaHlfaWR4ID0gd2lwaHlfY291bnRlcisrOwogCi0JaWYgKHVubGlrZWx5KGRydi0+aWR4IDwgMCkpIHsKKwlpZiAodW5saWtlbHkoIXdpcGh5X2lkeF92YWxpZChkcnYtPndpcGh5X2lkeCkpKSB7CiAJCXdpcGh5X2NvdW50ZXItLTsKLQkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJLyogdWdoLCB3cmFwcGVkISAqLwogCQlrZnJlZShkcnYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAkvKiBnaXZlIGl0IGEgcHJvcGVyIG5hbWUgKi8KLQlkZXZfc2V0X25hbWUoJmRydi0+d2lwaHkuZGV2LCBQSFlfTkFNRSAiJWQiLCBkcnYtPmlkeCk7CisJZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT53aXBoeV9pZHgpOwogCiAJbXV0ZXhfaW5pdCgmZHJ2LT5tdHgpOwogCW11dGV4X2luaXQoJmRydi0+ZGV2bGlzdF9tdHgpOwogCUlOSVRfTElTVF9IRUFEKCZkcnYtPm5ldGRldl9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmZHJ2LT5ic3NfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRydi0+YnNzX2xpc3QpOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJmRydi0+d2lwaHkuZGV2KTsKIAlkcnYtPndpcGh5LmRldi5jbGFzcyA9ICZpZWVlODAyMTFfY2xhc3M7CkBAIC0yNTksNiArMjg4LDkgQEAKIAlpbnQgaTsKIAl1MTYgaWZtb2RlcyA9IHdpcGh5LT5pbnRlcmZhY2VfbW9kZXM7CiAKKwlpZiAoV0FSTl9PTih3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPCAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBzYW5pdHkgY2hlY2sgaWZtb2RlcyAqLwogCVdBUk5fT04oIWlmbW9kZXMpOwogCWlmbW9kZXMgJj0gKCgxIDw8IF9fTkw4MDIxMV9JRlRZUEVfQUZURVJfTEFTVCkgLSAxKSAmIH4xOwpAQCAtMjczLDEwICszMDUsMTYgQEAKIAogCQlzYmFuZC0+YmFuZCA9IGJhbmQ7CiAKLQkJaWYgKCFzYmFuZC0+bl9jaGFubmVscyB8fCAhc2JhbmQtPm5fYml0cmF0ZXMpIHsKLQkJCVdBUk5fT04oMSk7CisJCWlmIChXQVJOX09OKCFzYmFuZC0+bl9jaGFubmVscyB8fCAhc2JhbmQtPm5fYml0cmF0ZXMpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKworCQkvKgorCQkgKiBTaW5jZSB3ZSB1c2UgYSB1MzIgZm9yIHJhdGUgYml0bWFwcyBpbgorCQkgKiBpZWVlODAyMTFfZ2V0X3Jlc3BvbnNlX3JhdGUsIHdlIGNhbm5vdAorCQkgKiBoYXZlIG1vcmUgdGhhbiAzMiBsZWdhY3kgcmF0ZXMuCisJCSAqLworCQlpZiAoV0FSTl9PTihzYmFuZC0+bl9iaXRyYXRlcyA+IDMyKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CiAJCQlzYmFuZC0+Y2hhbm5lbHNbaV0ub3JpZ19mbGFncyA9CkBAIC0yOTksMTAgKzMzNywxMCBAQAogCS8qIGNoZWNrIGFuZCBzZXQgdXAgYml0cmF0ZXMgKi8KIAlpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Mod2lwaHkpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAkvKiBzZXQgdXAgcmVndWxhdG9yeSBpbmZvICovCi0Jd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIFJFR0RPTV9TRVRfQllfQ09SRSk7CisJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFKTsKIAogCXJlcyA9IGRldmljZV9hZGQoJmRydi0+d2lwaHkuZGV2KTsKIAlpZiAocmVzKQpAQCAtMzE3LDkgKzM1NSwyMCBAQAogCWlmIChJU19FUlIoZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyKSkKIAkJZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyID0gTlVMTDsKIAorCWlmICh3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpIHsKKwkJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCByZXF1ZXN0OworCisJCXJlcXVlc3Qud2lwaHlfaWR4ID0gZ2V0X3dpcGh5X2lkeCh3aXBoeSk7CisJCXJlcXVlc3QuaW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjsKKwkJcmVxdWVzdC5hbHBoYTJbMF0gPSAnOSc7CisJCXJlcXVlc3QuYWxwaGEyWzFdID0gJzknOworCisJCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KCZyZXF1ZXN0KTsKKwl9CisKIAlyZXMgPSAwOwogb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfcmVnaXN0ZXIpOwpAQCAtMzI5LDcgKzM3OCw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOwogCiAJLyogcHJvdGVjdCB0aGUgZGV2aWNlIGxpc3QgKi8KLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCUJVR19PTighbGlzdF9lbXB0eSgmZHJ2LT5uZXRkZXZfbGlzdCkpOwogCkBAIC0zNTUsMTQgKzQwNCwxNyBAQAogCWRldmljZV9kZWwoJmRydi0+d2lwaHkuZGV2KTsKIAlkZWJ1Z2ZzX3JlbW92ZShkcnYtPndpcGh5LmRlYnVnZnNkaXIpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV91bnJlZ2lzdGVyKTsKIAogdm9pZCBjZmc4MDIxMV9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydikKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpzY2FuLCAqdG1wOwogCW11dGV4X2Rlc3Ryb3koJmRydi0+bXR4KTsKIAltdXRleF9kZXN0cm95KCZkcnYtPmRldmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NhbiwgdG1wLCAmZHJ2LT5ic3NfbGlzdCwgbGlzdCkKKwkJY2ZnODAyMTFfcHV0X2Jzcygmc2Nhbi0+cHViKTsKIAlrZnJlZShkcnYpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCBmN2ZiOWY0Li5kNDNkYWEyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTgsNiArOCw5IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMzUsMTIgKzM4LDIwIEBACiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52OwogCiAJLyogd2lwaHkgaW5kZXgsIGludGVybmFsIG9ubHkgKi8KLQlpbnQgaWR4OworCWludCB3aXBoeV9pZHg7CiAKIAkvKiBhc3NvY2lhdGUgbmV0ZGV2IGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggZGV2bGlzdF9tdHg7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXRkZXZfbGlzdDsKIAorCS8qIEJTU2VzL3NjYW5uaW5nICovCisJc3BpbmxvY2tfdCBic3NfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19saXN0OworCXN0cnVjdCByYl9yb290IGJzc190cmVlOworCXUzMiBic3NfZ2VuZXJhdGlvbjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsgLyogcHJvdGVjdGVkIGJ5IFJUTkwgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisKIAkvKiBtdXN0IGJlIGxhc3QgYmVjYXVzZSBvZiB0aGUgd2F5IHdlIGRvIHdpcGh5X3ByaXYoKSwKIAkgKiBhbmQgaXQgc2hvdWxkIGF0IGxlYXN0IGJlIGFsaWduZWQgdG8gTkVUREVWX0FMSUdOICovCiAJc3RydWN0IHdpcGh5IHdpcGh5IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKE5FVERFVl9BTElHTikpKTsKQEAgLTUzLDkgKzY0LDQ0IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZih3aXBoeSwgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCB3aXBoeSk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgbXV0ZXggY2ZnODAyMTFfZHJ2X211dGV4OworLyogTm90ZSAwIGlzIHZhbGlkLCBoZW5jZSBwaHkwICovCitzdGF0aWMgaW5saW5lCitib29sIHdpcGh5X2lkeF92YWxpZChpbnQgd2lwaHlfaWR4KQoreworCXJldHVybiAod2lwaHlfaWR4ID49IDApOworfQorCitleHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX211dGV4OwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY2ZnODAyMTFfZHJ2X2xpc3Q7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfY2ZnODAyMTFfbG9jayh2b2lkKQoreworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmY2ZnODAyMTFfbXV0ZXgpKTsKK30KKworLyoKKyAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gbWFyayBhIHdpcGh5X2lkeCBhcyBub3QgaGF2aW5nIGFuIGFzc29jaWF0ZWQgd2lwaHkuCisgKiBJdCBndWFyYW50ZWVzIGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KSB3aWxsIHJldHVybiBOVUxMCisgKi8KKyNkZWZpbmUgV0lQSFlfSURYX1NUQUxFIC0xCisKK3N0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcmJfbm9kZSByYm47CisJdW5zaWduZWQgbG9uZyB0czsKKwlzdHJ1Y3Qga3JlZiByZWY7CisJYm9vbCBob2xkOworCisJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgcHJpdiBtZW1iZXIgKi8KKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzIHB1YjsKK307CisKK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KTsKK2ludCBnZXRfd2lwaHlfaWR4KHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgorX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOworCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyCiAgKiB0aGF0IHRoZSBnZW5sX2luZm8gaXRlbSB0aGF0IGlzIHBhc3NlZCByZWZlcnMgdG8uCkBAIC02MywxMyArMTA5LDEzIEBACiAgKiB0aGUgZHJpdmVyJ3MgbXV0ZXghCiAgKgogICogVGhpcyBtZWFucyB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgY2ZnODAyMTFfcHV0X2RldigpCi0gKiBiZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3F1aXJlICZjZmc4MDIxMV9kcnZfbXV0ZXghCisgKiBiZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3F1aXJlICZjZmc4MDIxMV9tdXRleCEKICAqCiAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gbG9jayB0aGUgZ2xvYmFsCiAgKiBtdXRleCB0byBnZXQgYW4gaXRlbSBvZmYgdGhlIGxpc3Qgc2FmZWx5LCBhbmQgdGhlbgogICogd2UgbG9jayB0aGUgZHJ2IG11dGV4IHNvIGl0IGRvZXNuJ3QgZ28gYXdheSB1bmRlciB1cy4KICAqCi0gKiBXZSBkb24ndCB3YW50IHRvIGtlZXAgY2ZnODAyMTFfZHJ2X211dGV4IGxvY2tlZAorICogV2UgZG9uJ3Qgd2FudCB0byBrZWVwIGNmZzgwMjExX211dGV4IGxvY2tlZAogICogZm9yIGFsbCB0aGUgdGltZSBpbiBvcmRlciB0byBhbGxvdyByZXF1ZXN0cyBvbgogICogb3RoZXIgaW50ZXJmYWNlcyB0byBnbyB0aHJvdWdoIGF0IHRoZSBzYW1lIHRpbWUuCiAgKgpAQCAtNzksNiArMTI1LDkgQEAKIGV4dGVybiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAKKy8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLworc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCk7CisKIC8qIGlkZW50aWNhbCB0byBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyBidXQgb25seSBvcGVyYXRlIG9uIGlmaW5kZXggKi8KIGV4dGVybiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaW50IGlmaW5kZXgpOwpAQCAtOTIsNiArMTQxLDExIEBACiAJCQkgICAgICAgY2hhciAqbmV3bmFtZSk7CiAKIHZvaWQgaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwotdm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpOwordm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBzZXRieSk7CisKK3ZvaWQgY2ZnODAyMTFfYnNzX2V4cGlyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldik7Cit2b2lkIGNmZzgwMjExX2Jzc19hZ2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CiAKICNlbmRpZiAvKiBfX05FVF9XSVJFTEVTU19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9tbG1lLmMgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzU3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBjZmc4MDIxMSBNTE1FIFNBUCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAibmw4MDIxMS5oIgorCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2F1dGgocmRldiwgZGV2LCBidWYsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfcnhfYXV0aCk7CisKK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2Fzc29jKHJkZXYsIGRldiwgYnVmLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2Fzc29jKTsKKwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2RlYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2RlYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9yeF9kZWF1dGgpOworCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHJkZXYsIGRldiwgYnVmLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDMxYjgwN2EuLjM1M2UxYTQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtNywxMyArNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImNvcmUuaCIKQEAgLTEwNSw2ICsxMDUsMTcgQEAKIAogCVtOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKIAkJCQkJIC5sZW4gPSBOTDgwMjExX0hUX0NBUEFCSUxJVFlfTEVOIH0sCisKKwlbTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRV0gPSB7IC50eXBlID0gTkxBX1U4IH0sCisJW05MODAyMTFfQVRUUl9JRV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCSAgICAgIC5sZW4gPSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOIH0sCisJW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisKKwlbTkw4MDIxMV9BVFRSX1NTSURdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJLmxlbiA9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gfSwKKwlbTkw4MDIxMV9BVFRSX0FVVEhfVFlQRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKIH07CiAKIC8qIG1lc3NhZ2UgYnVpbGRpbmcgaGVscGVyICovCkBAIC0xMjUsNiArMTM2LDcgQEAKIAlzdHJ1Y3QgbmxhdHRyICpubF9mcmVxcywgKm5sX2ZyZXE7CiAJc3RydWN0IG5sYXR0ciAqbmxfcmF0ZXMsICpubF9yYXRlOwogCXN0cnVjdCBubGF0dHIgKm5sX21vZGVzOworCXN0cnVjdCBubGF0dHIgKm5sX2NtZHM7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CkBAIC0xMzUsOCArMTQ3LDEwIEBACiAJaWYgKCFoZHIpCiAJCXJldHVybiAtMTsKIAotCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCBkZXYtPmlkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+d2lwaHlfaWR4KTsKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLCB3aXBoeV9uYW1lKCZkZXYtPndpcGh5KSk7CisJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFMsCisJCSAgIGRldi0+d2lwaHkubWF4X3NjYW5fc3NpZHMpOwogCiAJbmxfbW9kZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUyk7CiAJaWYgKCFubF9tb2RlcykKQEAgLTIzNCw2ICsyNDgsMzUgQEAKIAl9CiAJbmxhX25lc3RfZW5kKG1zZywgbmxfYmFuZHMpOwogCisJbmxfY21kcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9DT01NQU5EUyk7CisJaWYgKCFubF9jbWRzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWkgPSAwOworI2RlZmluZSBDTUQob3AsIG4pCQkJCQkJXAorCSBkbyB7CQkJCQkJCVwKKwkJaWYgKGRldi0+b3BzLT5vcCkgewkJCQlcCisJCQlpKys7CQkJCQlcCisJCQlOTEFfUFVUX1UzMihtc2csIGksIE5MODAyMTFfQ01EXyAjIyBuKTsJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKwlDTUQoYWRkX3ZpcnR1YWxfaW50ZiwgTkVXX0lOVEVSRkFDRSk7CisJQ01EKGNoYW5nZV92aXJ0dWFsX2ludGYsIFNFVF9JTlRFUkZBQ0UpOworCUNNRChhZGRfa2V5LCBORVdfS0VZKTsKKwlDTUQoYWRkX2JlYWNvbiwgTkVXX0JFQUNPTik7CisJQ01EKGFkZF9zdGF0aW9uLCBORVdfU1RBVElPTik7CisJQ01EKGFkZF9tcGF0aCwgTkVXX01QQVRIKTsKKwlDTUQoc2V0X21lc2hfcGFyYW1zLCBTRVRfTUVTSF9QQVJBTVMpOworCUNNRChjaGFuZ2VfYnNzLCBTRVRfQlNTKTsKKwlDTUQoYXV0aCwgQVVUSEVOVElDQVRFKTsKKwlDTUQoYXNzb2MsIEFTU09DSUFURSk7CisJQ01EKGRlYXV0aCwgREVBVVRIRU5USUNBVEUpOworCUNNRChkaXNhc3NvYywgRElTQVNTT0NJQVRFKTsKKworI3VuZGVmIENNRAorCW5sYV9uZXN0X2VuZChtc2csIG5sX2NtZHMpOworCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTI0Nyw3ICsyOTAsNyBAQAogCWludCBzdGFydCA9IGNiLT5hcmdzWzBdOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewogCQlpZiAoKytpZHggPD0gc3RhcnQpCiAJCQljb250aW51ZTsKQEAgLTI1OCw3ICszMDEsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJY2ItPmFyZ3NbMF0gPSBpZHg7CiAKQEAgLTMyMywxNiArMzY2LDI2IEBACiAJaW50IHJlc3VsdCA9IDAsIHJlbV90eHFfcGFyYW1zID0gMDsKIAlzdHJ1Y3QgbmxhdHRyICpubF90eHFfcGFyYW1zOwogCi0JcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKGluZm8pOwotCWlmIChJU19FUlIocmRldikpCi0JCXJldHVybiBQVFJfRVJSKHJkZXYpOworCXJ0bmxfbG9jaygpOwogCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9OQU1FXSkgeworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCXJkZXYgPSBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlyZXN1bHQgPSBQVFJfRVJSKHJkZXYpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwltdXRleF9sb2NrKCZyZGV2LT5tdHgpOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9OQU1FXSkKIAkJcmVzdWx0ID0gY2ZnODAyMTFfZGV2X3JlbmFtZSgKIAkJCXJkZXYsIG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9OQU1FXSkpOwotCQlpZiAocmVzdWx0KQotCQkJZ290byBiYWRfcmVzOwotCX0KKworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJaWYgKHJlc3VsdCkKKwkJZ290byBiYWRfcmVzOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TXSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4cV9wYXJhbXMgdHhxX3BhcmFtczsKQEAgLTQyOCw3ICs0ODEsOSBAQAogCiAKICBiYWRfcmVzOgotCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdHgpOworIHVubG9jazoKKwlydG5sX3VubG9jaygpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ2MSw3ICs1MTYsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICh3cF9pZHggPCB3cF9zdGFydCkgewogCQkJd3BfaWR4Kys7CkBAIC00ODgsNyArNTQzLDcgQEAKIAkJd3BfaWR4Kys7CiAJfQogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IHdwX2lkeDsKIAljYi0+YXJnc1sxXSA9IGlmX2lkeDsKQEAgLTU2NCwyMSArNjE5LDMxIEBACiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTMyIF9mbGFncywgKmZsYWdzID0gTlVMTDsKKwlib29sIGNoYW5nZSA9IGZhbHNlOwogCiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHVubG9ja19ydG5sOworCiAJaWZpbmRleCA9IGRldi0+aWZpbmRleDsKIAl0eXBlID0gZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGU7CiAJZGV2X3B1dChkZXYpOwogCi0JZXJyID0gLUVJTlZBTDsKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGVFlQRV0pIHsKLQkJdHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRlRZUEVdKTsKLQkJaWYgKHR5cGUgPiBOTDgwMjExX0lGVFlQRV9NQVgpCisJCWVudW0gbmw4MDIxMV9pZnR5cGUgbnR5cGU7CisKKwkJbnR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZUWVBFXSk7CisJCWlmICh0eXBlICE9IG50eXBlKQorCQkJY2hhbmdlID0gdHJ1ZTsKKwkJdHlwZSA9IG50eXBlOworCQlpZiAodHlwZSA+IE5MODAyMTFfSUZUWVBFX01BWCkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gdW5sb2NrOworCQl9CiAJfQogCiAJaWYgKCFkcnYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZiB8fApAQCAtNTk0LDYgKzY1OSw3IEBACiAJCX0KIAkJcGFyYW1zLm1lc2hfaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pOwogCQlwYXJhbXMubWVzaF9pZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CisJCWNoYW5nZSA9IHRydWU7CiAJfQogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NTlRSX0ZMQUdTXSkgewpAQCAtNjAzLDIwICs2NjksMjYgQEAKIAkJfQogCQllcnIgPSBwYXJzZV9tb25pdG9yX2ZsYWdzKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NTlRSX0ZMQUdTXSwKIAkJCQkJICAmX2ZsYWdzKTsKLQkJaWYgKCFlcnIpCi0JCQlmbGFncyA9ICZfZmxhZ3M7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKworCQlmbGFncyA9ICZfZmxhZ3M7CisJCWNoYW5nZSA9IHRydWU7CiAJfQotCXJ0bmxfbG9jaygpOwotCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKCZkcnYtPndpcGh5LCBpZmluZGV4LAotCQkJCQkgICAgdHlwZSwgZmxhZ3MsICZwYXJhbXMpOworCisJaWYgKGNoYW5nZSkKKwkJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgsCisJCQkJCQkgICAgdHlwZSwgZmxhZ3MsICZwYXJhbXMpOworCWVsc2UKKwkJZXJyID0gMDsKIAogCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCVdBUk5fT04oIWRldiB8fCAoIWVyciAmJiBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSB0eXBlKSk7CiAKLQlydG5sX3VubG9jaygpOwotCiAgdW5sb2NrOgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTYzOSw5ICs3MTEsMTMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJ0bmxfbG9jaygpOworCiAJZHJ2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7Ci0JaWYgKElTX0VSUihkcnYpKQotCQlyZXR1cm4gUFRSX0VSUihkcnYpOworCWlmIChJU19FUlIoZHJ2KSkgeworCQllcnIgPSBQVFJfRVJSKGRydik7CisJCWdvdG8gdW5sb2NrX3J0bmw7CisJfQogCiAJaWYgKCFkcnYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZiB8fAogCSAgICAhKGRydi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzICYgKDEgPDwgdHlwZSkpKSB7CkBAIC02NTUsMTggKzczMSwxNyBAQAogCQlwYXJhbXMubWVzaF9pZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gcGFyc2VfbW9uaXRvcl9mbGFncyh0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgPwogCQkJCSAgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01OVFJfRkxBR1NdIDogTlVMTCwKIAkJCQkgICZmbGFncyk7CiAJZXJyID0gZHJ2LT5vcHMtPmFkZF92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksCiAJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRk5BTUVdKSwKIAkJdHlwZSwgZXJyID8gTlVMTCA6ICZmbGFncywgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKLQogCiAgdW5sb2NrOgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3Niw5ICs3NTEsMTEgQEAKIAlpbnQgaWZpbmRleCwgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAlpZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCWRldl9wdXQoZGV2KTsKIApAQCAtNjg3LDEyICs3NjQsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzM4LDE1ICs4MTUsMTcgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5nZXRfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwpAQCAtNzc0LDEwICs4NTMsOCBAQAogCWlmIChtYWNfYWRkcikKIAkJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcik7CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+Z2V0X2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkciwKIAkJCQkmY29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTsKLQlydG5sX3VubG9jaygpOwogCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC03OTUsNiArODcyLDkgQEAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODA0LDM1ICs4ODQsNTAgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgga2V5X2lkeDsKKwlpbnQgKCpmdW5jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgdTgga2V5X2luZGV4KTsKIAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkgeworCQlpZiAoa2V5X2lkeCA8IDQgfHwga2V5X2lkeCA+IDUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGtleV9pZHggPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgc2V0dGluZyBkZWZhdWx0IGtleSAqLwotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0gJiYKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleSkgeworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRdKQorCQlmdW5jID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleTsKKwllbHNlCisJCWZ1bmMgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXk7CisKKwlpZiAoIWZ1bmMpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwotCWVyciA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCk7Ci0JcnRubF91bmxvY2soKTsKKwllcnIgPSBmdW5jKCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7CisKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODYzLDcgKzk1OCw3IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoa2V5X2lkeCA+IDUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTg5NCwyNiArOTg5LDMzIEBACiAJCWlmIChwYXJhbXMua2V5X2xlbiAhPSAxMykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlpZiAocGFyYW1zLmtleV9sZW4gIT0gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5hZGRfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+YWRkX2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkciwgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05MjgsMjggKzEwMzAsMzIgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5kZWxfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+ZGVsX2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkcik7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworCisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTk2Myw5ICsxMDY5LDE2IEBACiAJc3RydWN0IGJlYWNvbl9wYXJhbWV0ZXJzIHBhcmFtczsKIAlpbnQgaGF2ZWluZm8gPSAwOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoaW5mby0+Z2VubGhkci0+Y21kKSB7CiAJY2FzZSBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOgpAQCAtMTAyNiwxMyArMTEzOSwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBjYWxsKCZkcnYtPndpcGh5LCBkZXYsICZwYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA0MiwyMiArMTE1NiwyOSBAQAogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHVubG9ja19ydG5sOwogCiAJaWYgKCFkcnYtPm9wcy0+ZGVsX2JlYWNvbikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF9iZWFjb24oJmRydi0+d2lwaHksIGRldik7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTgyLDYgKzEzMDMsMTIgQEAKIAogCQlubGFfbmVzdF9lbmQobXNnLCB0eHJhdGUpOwogCX0KKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19SWF9QQUNLRVRTKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwkJCSAgICBzaW5mby0+cnhfcGFja2V0cyk7CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfUEFDS0VUUykKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCisJCQkgICAgc2luZm8tPnR4X3BhY2tldHMpOwogCW5sYV9uZXN0X2VuZChtc2csIHNpbmZvYXR0cik7CiAKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwpAQCAtMTIxNywzMCArMTM0NCwzMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbmV0ZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKLQlpZiAoIW5ldGRldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJcnRubF9sb2NrKCk7CisKKwluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcnRubDsKKwl9CiAKIAlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CiAJaWYgKElTX0VSUihkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGV2KTsKLQkJZ290byBvdXRfcHV0X25ldGRldjsKKwkJZ290byBvdXRfcnRubDsKIAl9CiAKIAlpZiAoIWRldi0+b3BzLT5kdW1wX3N0YXRpb24pIHsKLQkJZXJyID0gLUVOT1NZUzsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKLQlydG5sX2xvY2soKTsKLQogCXdoaWxlICgxKSB7CiAJCWVyciA9IGRldi0+b3BzLT5kdW1wX3N0YXRpb24oJmRldi0+d2lwaHksIG5ldGRldiwgc3RhX2lkeCwKIAkJCQkJICAgICBtYWNfYWRkciwgJnNpbmZvKTsKIAkJaWYgKGVyciA9PSAtRU5PRU5UKQogCQkJYnJlYWs7CiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF9lcnJfcnRubDsKKwkJCWdvdG8gb3V0X2VycjsKIAogCQlpZiAobmw4MDIxMV9zZW5kX3N0YXRpb24oc2tiLAogCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLApAQCAtMTI1NiwxMiArMTM4NSwxMCBAQAogIG91dDoKIAljYi0+YXJnc1sxXSA9IHN0YV9pZHg7CiAJZXJyID0gc2tiLT5sZW47Ci0gb3V0X2Vycl9ydG5sOgotCXJ0bmxfdW5sb2NrKCk7CiAgb3V0X2VycjoKIAljZmc4MDIxMV9wdXRfZGV2KGRldik7Ci0gb3V0X3B1dF9uZXRkZXY6Ci0JZGV2X3B1dChuZXRkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTI4MiwxOSArMTQwOSwxOCBAQAogCiAJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmdldF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+Z2V0X3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZzaW5mbyk7Ci0JcnRubF91bmxvY2soKTsKLQogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMzExLDEwICsxNDM3LDEyIEBACiAKICBvdXRfZnJlZToKIAlubG1zZ19mcmVlKG1zZyk7Ci0KICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTM4Miw5ICsxNTEwLDExIEBACiAJCXBhcmFtcy5wbGlua19hY3Rpb24gPQogCQkgICAgbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTl0pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAllcnIgPSBnZXRfdmxhbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dLCBkcnYsICZwYXJhbXMudmxhbik7CiAJaWYgKGVycikKQEAgLTEzOTUsMTUgKzE1MjUsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyLCAmcGFyYW1zKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWlmIChwYXJhbXMudmxhbikKIAkJZGV2X3B1dChwYXJhbXMudmxhbik7CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQ0NSw5ICsxNTc2LDExIEBACiAJCQkJJnBhcmFtcy5zdGF0aW9uX2ZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWVyciA9IGdldF92bGFuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl0sIGRydiwgJnBhcmFtcy52bGFuKTsKIAlpZiAoZXJyKQpAQCAtMTQ1OCwxNSArMTU5MSwyMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5hZGRfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAlpZiAocGFyYW1zLnZsYW4pCiAJCWRldl9wdXQocGFyYW1zLnZsYW4pOwogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE0ODAsMjIgKzE2MTksMjUgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5kZWxfc3RhdGlvbikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1NzYsMjIgKzE3MTgsMjkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5ldGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7Ci0JaWYgKCFuZXRkZXYpCi0JCXJldHVybiAtRU5PREVWOworCXJ0bmxfbG9jaygpOworCisJbmV0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpZHgpOworCWlmICghbmV0ZGV2KSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3J0bmw7CisJfQogCiAJZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaWZpZHgpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRldik7Ci0JCWdvdG8gb3V0X3B1dF9uZXRkZXY7CisJCWdvdG8gb3V0X3J0bmw7CiAJfQogCiAJaWYgKCFkZXYtPm9wcy0+ZHVtcF9tcGF0aCkgewotCQllcnIgPSAtRU5PU1lTOworCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXRfZXJyOwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChuZXRkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAKIAl3aGlsZSAoMSkgewogCQllcnIgPSBkZXYtPm9wcy0+ZHVtcF9tcGF0aCgmZGV2LT53aXBoeSwgbmV0ZGV2LCBwYXRoX2lkeCwKQEAgLTE1OTksNyArMTc0OCw3IEBACiAJCWlmIChlcnIgPT0gLUVOT0VOVCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyKQotCQkJZ290byBvdXRfZXJyX3J0bmw7CisJCQlnb3RvIG91dF9lcnI7CiAKIAkJaWYgKG5sODAyMTFfc2VuZF9tcGF0aChza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCSAgICAgICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLApAQCAtMTYxNCwxMiArMTc2MywxMCBAQAogIG91dDoKIAljYi0+YXJnc1sxXSA9IHBhdGhfaWR4OwogCWVyciA9IHNrYi0+bGVuOwotIG91dF9lcnJfcnRubDoKLQlydG5sX3VubG9jaygpOwogIG91dF9lcnI6CiAJY2ZnODAyMTFfcHV0X2RldihkZXYpOwotIG91dF9wdXRfbmV0ZGV2OgotCWRldl9wdXQobmV0ZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NDEsMTkgKzE3ODgsMjMgQEAKIAogCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOwogCiAJaWYgKCFkcnYtPm9wcy0+Z2V0X21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKLQllcnIgPSBkcnYtPm9wcy0+Z2V0X21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3AsICZwaW5mbyk7Ci0JcnRubF91bmxvY2soKTsKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQogCisJZXJyID0gZHJ2LT5vcHMtPmdldF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wLCAmcGluZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjcwLDEwICsxODIxLDEyIEBACiAKICBvdXRfZnJlZToKIAlubG1zZ19mcmVlKG1zZyk7Ci0KICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTY5NCwyMiArMTg0NywzNSBAQAogCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAluZXh0X2hvcCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUF0pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfbXBhdGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogc3RhdGljIGludCBubDgwMjExX25ld19tcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQpAQCAtMTcyOSwyMiArMTg5NSwzNSBAQAogCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAluZXh0X2hvcCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUF0pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5hZGRfbXBhdGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5hZGRfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzU4LDIyICsxOTM3LDI1IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQlkc3QgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmRlbF9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTgwNiwyMiArMTk4OCwzMCBAQAogCQkJbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTXSk7CiAJfQogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfYnNzKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfYnNzKCZkcnYtPndpcGh5LCBkZXYsICZwYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTg3Niw2ICsyMDY2LDE5IEBACiAJaW50IHI7CiAJY2hhciAqZGF0YSA9IE5VTEw7CiAKKwkvKgorCSAqIFlvdSBzaG91bGQgb25seSBnZXQgdGhpcyB3aGVuIGNmZzgwMjExIGhhc24ndCB5ZXQgaW5pdGlhbGl6ZWQKKwkgKiBjb21wbGV0ZWx5IHdoZW4gYnVpbHQtaW4gdG8gdGhlIGtlcm5lbCByaWdodCBiZXR3ZWVuIHRoZSB0aW1lCisJICogd2luZG93IGJldHdlZW4gbmw4MDIxMV9pbml0KCkgYW5kIHJlZ3VsYXRvcnlfaW5pdCgpLCBpZiB0aGF0IGlzCisJICogZXZlbiBwb3NzaWJsZS4KKwkgKi8KKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJaWYgKHVubGlrZWx5KCFjZmc4MDIxMV9yZWdkb21haW4pKSB7CisJCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCX0KKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFR19BTFBIQTJdKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTg4Niw5ICsyMDg5LDkgQEAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKGRhdGEpKQogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7Ci0JciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfVVNFUiwgZGF0YSwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKworCXIgPSByZWd1bGF0b3J5X2hpbnRfdXNlcihkYXRhKTsKKwogCXJldHVybiByOwogfQogCkBAIC0xOTAzLDEwICsyMTA2LDEyIEBACiAJc3RydWN0IG5sYXR0ciAqcGluZm9hdHRyOwogCXN0cnVjdCBza19idWZmICptc2c7CiAKKwlydG5sX2xvY2soKTsKKwogCS8qIExvb2sgdXAgb3VyIGRldmljZSAqLwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmdldF9tZXNoX3BhcmFtcykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTE5MTQsOSArMjExOSw3IEBACiAJfQogCiAJLyogR2V0IHRoZSBtZXNoIHBhcmFtcyAqLwotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5nZXRfbWVzaF9wYXJhbXMoJmRydi0+d2lwaHksIGRldiwgJmN1cl9wYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTE5NjUsMTMgKzIxNjgsMTYgQEAKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKIAlnb3RvIG91dDsKIAotbmxhX3B1dF9mYWlsdXJlOgorIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CiAJZXJyID0gLUVNU0dTSVpFOwotb3V0OgorIG91dDoKIAkvKiBDbGVhbnVwICovCiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjAxOCw5ICsyMjI0LDExIEBACiAJCQlwYXJlbnRfYXR0ciwgbmw4MDIxMV9tZXNoY29uZl9wYXJhbXNfcG9saWN5KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPnNldF9tZXNoX3BhcmFtcykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTIwNjcsMTkgKzIyNzUsOTUgQEAKIAkJCW5sYV9nZXRfdTE2KTsKIAogCS8qIEFwcGx5IGNoYW5nZXMgKi8KLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+c2V0X21lc2hfcGFyYW1zKCZkcnYtPndpcGh5LCBkZXYsICZjZmcsIG1hc2spOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJLyogY2xlYW51cCAqLwogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKICN1bmRlZiBGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUCiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHIgPSBOVUxMOworCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQorCQlnb3RvIG91dDsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1JFRyk7CisJaWYgKCFoZHIpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwKKwkJY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOworCisJbmxfcmVnX3J1bGVzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVTKTsKKwlpZiAoIW5sX3JlZ19ydWxlcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnODAyMTFfcmVnZG9tYWluLT5uX3JlZ19ydWxlczsgaSsrKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpyZWdfcnVsZTsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmcmVxX3JhbmdlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGU7CisKKwkJcmVnX3J1bGUgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CisJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CisKKwkJbmxfcmVnX3J1bGUgPSBubGFfbmVzdF9zdGFydChtc2csIGkpOworCQlpZiAoIW5sX3JlZ19ydWxlKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1MsCisJCQlyZWdfcnVsZS0+ZmxhZ3MpOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJULAorCQkJZnJlcV9yYW5nZS0+c3RhcnRfZnJlcV9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORCwKKwkJCWZyZXFfcmFuZ2UtPmVuZF9mcmVxX2toeik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfTUFYX0JXLAorCQkJZnJlcV9yYW5nZS0+bWF4X2JhbmR3aWR0aF9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTiwKKwkJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9FSVJQLAorCQkJcG93ZXJfcnVsZS0+bWF4X2VpcnApOworCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX3JlZ19ydWxlKTsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBubF9yZWdfcnVsZXMpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWdvdG8gb3V0OworCitubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCWVyciA9IC1FTVNHU0laRTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXTsKQEAgLTIxMzUsOSArMjQxOSw5IEBACiAKIAlCVUdfT04ocnVsZV9pZHggIT0gbnVtX3J1bGVzKTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXIgPSBzZXRfcmVnZG9tKHJkKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIHI7CiAKICBiYWRfcmVnOgpAQCAtMjE0NSw2ICsyNDI5LDU1MyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfdHJpZ2dlcl9zY2FuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgbmxhdHRyICphdHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVyciwgdG1wLCBuX3NzaWRzID0gMCwgbl9jaGFubmVscyA9IDAsIGk7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXNpemVfdCBpZV9sZW47CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcnRubDsKKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisKKwlpZiAoIWRydi0+b3BzLT5zY2FuKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkcnYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSkgeworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSwgdG1wKQorCQkJbl9jaGFubmVscysrOworCQlpZiAoIW5fY2hhbm5lbHMpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCisJCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCW5fY2hhbm5lbHMgKz0gd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApCisJCQluX3NzaWRzKys7CisKKwlpZiAobl9zc2lkcyA+IHdpcGh5LT5tYXhfc2Nhbl9zc2lkcykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwllbHNlCisJCWllX2xlbiA9IDA7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpCisJCQkrIHNpemVvZigqc3NpZCkgKiBuX3NzaWRzCisJCQkrIHNpemVvZihjaGFubmVsKSAqIG5fY2hhbm5lbHMKKwkJCSsgaWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVxdWVzdC0+Y2hhbm5lbHMgPSAodm9pZCAqKSgoY2hhciAqKXJlcXVlc3QgKyBzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwlpZiAobl9zc2lkcykKKwkJcmVxdWVzdC0+c3NpZHMgPSAodm9pZCAqKShyZXF1ZXN0LT5jaGFubmVscyArIG5fY2hhbm5lbHMpOworCXJlcXVlc3QtPm5fc3NpZHMgPSBuX3NzaWRzOworCWlmIChpZV9sZW4pIHsKKwkJaWYgKHJlcXVlc3QtPnNzaWRzKQorCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5zc2lkcyArIG5fc3NpZHMpOworCQllbHNlCisJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSkgeworCQkvKiB1c2VyIHNwZWNpZmllZCwgYmFpbCBvdXQgaWYgY2hhbm5lbCBub3QgZm91bmQgKi8KKwkJcmVxdWVzdC0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJCWkgPSAwOworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSwgdG1wKSB7CisJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgbmxhX2dldF91MzIoYXR0cikpOworCQkJaWYgKCFyZXF1ZXN0LT5jaGFubmVsc1tpXSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGFsbCBjaGFubmVscyAqLworCQlpID0gMDsKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJaW50IGo7CisJCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IDA7IGogPCB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJCXJlcXVlc3QtPmNoYW5uZWxzW2ldID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQkJaSsrOworCQkJfQorCQl9CisJfQorCisJaSA9IDA7CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkgeworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwgdG1wKSB7CisJCQlpZiAocmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQkJbWVtY3B5KHJlcXVlc3QtPnNzaWRzW2ldLnNzaWQsIG5sYV9kYXRhKGF0dHIpLCBubGFfbGVuKGF0dHIpKTsKKwkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcXVlc3QtPmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCW1lbWNweShyZXF1ZXN0LT5pZSwgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSksCisJCSAgICAgICByZXF1ZXN0LT5pZV9sZW4pOworCX0KKworCXJlcXVlc3QtPmlmaWR4ID0gZGV2LT5pZmluZGV4OworCXJlcXVlc3QtPndpcGh5ID0gJmRydi0+d2lwaHk7CisKKwlkcnYtPnNjYW5fcmVxID0gcmVxdWVzdDsKKwllcnIgPSBkcnYtPm9wcy0+c2NhbigmZHJ2LT53aXBoeSwgZGV2LCByZXF1ZXN0KTsKKworIG91dF9mcmVlOgorCWlmIChlcnIpIHsKKwkJZHJ2LT5zY2FuX3JlcSA9IE5VTEw7CisJCWtmcmVlKHJlcXVlc3QpOworCX0KKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX3NlbmRfYnNzKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMpCit7CisJdm9pZCAqaGRyOworCXN0cnVjdCBubGF0dHIgKmJzczsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLAorCQkJICAgICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTKTsKKwlpZiAoIWhkcikKKwkJcmV0dXJuIC0xOworCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OLAorCQkgICAgcmRldi0+YnNzX2dlbmVyYXRpb24pOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CisKKwlic3MgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9CU1MpOworCWlmICghYnNzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtPmJzc2lkKSkKKwkJTkxBX1BVVChtc2csIE5MODAyMTFfQlNTX0JTU0lELCBFVEhfQUxFTiwgcmVzLT5ic3NpZCk7CisJaWYgKHJlcy0+aW5mb3JtYXRpb25fZWxlbWVudHMgJiYgcmVzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKKwkJCXJlcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJcmVzLT5pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKHJlcy0+dHNmKQorCQlOTEFfUFVUX1U2NChtc2csIE5MODAyMTFfQlNTX1RTRiwgcmVzLT50c2YpOworCWlmIChyZXMtPmJlYWNvbl9pbnRlcnZhbCkKKwkJTkxBX1BVVF9VMTYobXNnLCBOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUwsIHJlcy0+YmVhY29uX2ludGVydmFsKTsKKwlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfQlNTX0NBUEFCSUxJVFksIHJlcy0+Y2FwYWJpbGl0eSk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19GUkVRVUVOQ1ksIHJlcy0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJc3dpdGNoIChyZGV2LT53aXBoeS5zaWduYWxfdHlwZSkgeworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQlNTX1NJR05BTF9NQk0sIHJlcy0+c2lnbmFsKTsKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDLCByZXMtPnNpZ25hbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW5sYV9uZXN0X2VuZChtc2csIGJzcyk7CisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfZHVtcF9zY2FuKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnNjYW47CisJaW50IGlmaWR4ID0gY2ItPmFyZ3NbMF07CisJaW50IHN0YXJ0ID0gY2ItPmFyZ3NbMV0sIGlkeCA9IDA7CisJaW50IGVycjsKKworCWlmICghaWZpZHgpIHsKKwkJZXJyID0gbmxtc2dfcGFyc2UoY2ItPm5saCwgR0VOTF9IRFJMRU4gKyBubDgwMjExX2ZhbS5oZHJzaXplLAorCQkJCSAgbmw4MDIxMV9mYW0uYXR0cmJ1Ziwgbmw4MDIxMV9mYW0ubWF4YXR0ciwKKwkJCQkgIG5sODAyMTFfcG9saWN5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKCFubDgwMjExX2ZhbS5hdHRyYnVmW05MODAyMTFfQVRUUl9JRklOREVYXSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmaWR4ID0gbmxhX2dldF91MzIobmw4MDIxMV9mYW0uYXR0cmJ1ZltOTDgwMjExX0FUVFJfSUZJTkRFWF0pOworCQlpZiAoIWlmaWR4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNiLT5hcmdzWzBdID0gaWZpZHg7CisJfQorCisJbmV0ZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CisJaWYgKElTX0VSUihkZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGV2KTsKKwkJZ290byBvdXRfcHV0X25ldGRldjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWNmZzgwMjExX2Jzc19leHBpcmUoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NhbiwgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCsraWR4IDw9IHN0YXJ0KQorCQkJY29udGludWU7CisJCWlmIChubDgwMjExX3NlbmRfYnNzKHNrYiwKKwkJCQlORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAorCQkJCWRldiwgbmV0ZGV2LCAmc2Nhbi0+cHViKSA8IDApIHsKKwkJCWlkeC0tOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJY2ItPmFyZ3NbMV0gPSBpZHg7CisJZXJyID0gc2tiLT5sZW47CisJY2ZnODAyMTFfcHV0X2RldihkZXYpOworIG91dF9wdXRfbmV0ZGV2OgorCWRldl9wdXQobmV0ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIG5sODAyMTFfdmFsaWRfYXV0aF90eXBlKGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlKQoreworCXJldHVybiBhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSB8fAorCQlhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZIHx8CisJCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0ZUIHx8CisJCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmICghZHJ2LT5vcHMtPmF1dGgpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmZHJ2LT53aXBoeTsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCisJcmVxLnBlZXJfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKKwkJcmVxLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoCisJCQl3aXBoeSwKKwkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkpOworCQlpZiAoIXJlcS5jaGFuKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKSB7CisJCXJlcS5zc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKwkJcmVxLnNzaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcS5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlyZXEuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FVVEhfVFlQRV0pIHsKKwkJcmVxLmF1dGhfdHlwZSA9CisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSk7CisJCWlmICghbmw4MDIxMV92YWxpZF9hdXRoX3R5cGUocmVxLmF1dGhfdHlwZSkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWVyciA9IGRydi0+b3BzLT5hdXRoKCZkcnYtPndpcGh5LCBkZXYsICZyZXEpOworCitvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKK3VubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgcmVxOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+YXNzb2MpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZkcnYtPndpcGh5OworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkgeworCQlyZXEuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgKKwkJCXdpcGh5LAorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7CisJCWlmICghcmVxLmNoYW4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJlcS5zc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKwlyZXEuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlyZXEuaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJcmVxLmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJfQorCisJZXJyID0gZHJ2LT5vcHMtPmFzc29jKCZkcnYtPndpcGh5LCBkZXYsICZyZXEpOworCitvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKK3VubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2RlYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgcmVxOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+ZGVhdXRoKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKworCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSkgeworCQlyZXEucmVhc29uX2NvZGUgPQorCQkJbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSk7CisJCWlmIChyZXEucmVhc29uX2NvZGUgPT0gMCkgeworCQkJLyogUmVhc29uIENvZGUgMCBpcyByZXNlcnZlZCAqLworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWVyciA9IGRydi0+b3BzLT5kZWF1dGgoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisKK291dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfZGlzYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCByZXE7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIWRydi0+b3BzLT5kaXNhc3NvYykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZkcnYtPndpcGh5OworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pIHsKKwkJcmVxLnJlYXNvbl9jb2RlID0KKwkJCW5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOworCQlpZiAocmVxLnJlYXNvbl9jb2RlID09IDApIHsKKwkJCS8qIFJlYXNvbiBDb2RlIDAgaXMgcmVzZXJ2ZWQgKi8KKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcS5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlyZXEuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwllcnIgPSBkcnYtPm9wcy0+ZGlzYXNzb2MoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisKK291dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtMjIzMSw3ICszMDYyLDYgQEAKIAkJLmRvaXQgPSBubDgwMjExX2dldF9zdGF0aW9uLAogCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX3N0YXRpb24sCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKLQkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1NUQVRJT04sCkBAIC0yMjgzLDYgKzMxMTMsMTIgQEAKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1JFRywKKwkJLmRvaXQgPSBubDgwMjExX2dldF9yZWcsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLyogY2FuIGJlIHJldHJpZXZlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMgKi8KKwl9LAorCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9SRUcsCiAJCS5kb2l0ID0gbmw4MDIxMV9zZXRfcmVnLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCkBAIC0yMzA2LDEyICszMTQyLDU2IEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAorCQkuZG9pdCA9IG5sODAyMTFfdHJpZ2dlcl9zY2FuLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5kdW1waXQgPSBubDgwMjExX2R1bXBfc2NhbiwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSwKKwkJLmRvaXQgPSBubDgwMjExX2F1dGhlbnRpY2F0ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9BU1NPQ0lBVEUsCisJCS5kb2l0ID0gbmw4MDIxMV9hc3NvY2lhdGUsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUsCisJCS5kb2l0ID0gbmw4MDIxMV9kZWF1dGhlbnRpY2F0ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsCisJCS5kb2l0ID0gbmw4MDIxMV9kaXNhc3NvY2lhdGUsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCit9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX21sbWVfbWNncnAgPSB7CisJLm5hbWUgPSAibWxtZSIsCiB9OwogCiAvKiBtdWx0aWNhc3QgZ3JvdXBzICovCiBzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfY29uZmlnX21jZ3JwID0gewogCS5uYW1lID0gImNvbmZpZyIsCiB9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3NjYW5fbWNncnAgPSB7CisJLm5hbWUgPSAic2NhbiIsCit9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAgPSB7CisJLm5hbWUgPSAicmVndWxhdG9yeSIsCit9OwogCiAvKiBub3RpZmljYXRpb24gZnVuY3Rpb25zICovCiAKQEAgLTIzMzEsNiArMzIxMSwxODYgQEAKIAlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfY29uZmlnX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKHN0cnVjdCBza19idWZmICptc2csCisJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAorCQkJCSAgICB1MzIgY21kKQoreworCXZvaWQgKmhkcjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBjbWQpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCisJLyogWFhYOiB3ZSBzaG91bGQgcHJvYmFibHkgYm91bmNlIGJhY2sgdGhlIHJlcXVlc3Q/ICovCisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJICAgICAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworfQorCisvKgorICogVGhpcyBjYW4gaGFwcGVuIG9uIGdsb2JhbCByZWd1bGF0b3J5IGNoYW5nZXMgb3IgZGV2aWNlIHNwZWNpZmljIHNldHRpbmdzCisgKiBiYXNlZCBvbiBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW5zLgorICovCit2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX1JFR19DSEFOR0UpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFVzZXJzcGFjZSBjYW4gYWx3YXlzIGNvdW50IHRoaXMgb25lIGFsd2F5cyBiZWluZyBzZXQgKi8KKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsIHJlcXVlc3QtPmluaXRpYXRvcik7CisKKwlpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICcwJyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzAnKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCk7CisJZWxzZSBpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICc5JyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzknKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQpOworCWVsc2UgaWYgKChyZXF1ZXN0LT5hbHBoYTJbMF0gPT0gJzknICYmIHJlcXVlc3QtPmFscGhhMlsxXSA9PSAnOCcpIHx8CisJCSByZXF1ZXN0LT5pbnRlcnNlY3QpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTik7CisJZWxzZSB7CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlkpOworCQlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9SRUdfQUxQSEEyLCByZXF1ZXN0LT5hbHBoYTIpOworCX0KKworCWlmICh3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm47CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCitzdGF0aWMgdm9pZCBubDgwMjExX3NlbmRfbWxtZV9ldmVudChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sCisJCQkJICAgIGVudW0gbmw4MDIxMV9jb21tYW5kcyBjbWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIGNtZCk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FLCBsZW4sIGJ1Zik7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfbWxtZV9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCisJCQkJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcnhfYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgIHNpemVfdCBsZW4pCit7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwgTkw4MDIxMV9DTURfQVNTT0NJQVRFKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLAorCQkJICAgIHNpemVfdCBsZW4pCit7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKKwkJCQlOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgICBzaXplX3QgbGVuKQoreworCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCisJCQkJTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFKTsKK30KKwogLyogaW5pdGlhbGlzYXRpb24vZXhpdCBmdW5jdGlvbnMgKi8KIAogaW50IG5sODAyMTFfaW5pdCh2b2lkKQpAQCAtMjM1MSw2ICszNDExLDE4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3NjYW5fbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGdlbmxfcmVnaXN0ZXJfbWNfZ3JvdXAoJm5sODAyMTFfZmFtLCAmbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZubDgwMjExX2ZhbSwgJm5sODAyMTFfbWxtZV9tY2dycCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCiAJcmV0dXJuIDA7CiAgZXJyX291dDoKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZubDgwMjExX2ZhbSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaAppbmRleCBmM2VhNWMwLi5iNzdhZjRhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKQEAgLTMsMjIgKzMsMjUgQEAKIAogI2luY2x1ZGUgImNvcmUuaCIKIAotI2lmZGVmIENPTkZJR19OTDgwMjExCiBleHRlcm4gaW50IG5sODAyMTFfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG5sODAyMTFfZXhpdCh2b2lkKTsKIGV4dGVybiB2b2lkIG5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBubDgwMjExX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBubDgwMjExX2V4aXQodm9pZCkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKAotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTkw4MDIxMSAqLworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKIAogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IGJkMGExNmMuLjYzMjdlMTYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTQxLDM4ICs0MSw3IEBACiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgotCi0vKioKLSAqIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgLSByZWNlaXB0IG9mIGxhc3QgcmVndWxhdG9yeSByZXF1ZXN0Ci0gKgotICogQHdpcGh5OiB0aGlzIGlzIHNldCBpZiB0aGlzIHJlcXVlc3QncyBpbml0aWF0b3IgaXMKLSAqIAklUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yICVSRUdET01fU0VUX0JZX0RSSVZFUi4gVGhpcwotICogCWNhbiBiZSB1c2VkIGJ5IHRoZSB3aXJlbGVzcyBjb3JlIHRvIGRlYWwgd2l0aCBjb25mbGljdHMKLSAqIAlhbmQgcG90ZW50aWFsbHkgaW5mb3JtIHVzZXJzIG9mIHdoaWNoIGRldmljZXMgc3BlY2lmaWNhbGx5Ci0gKiAJY2FzZWQgdGhlIGNvbmZsaWN0cy4KLSAqIEBpbml0aWF0b3I6IGluZGljYXRlcyB3aG8gc2VudCB0aGlzIHJlcXVlc3QsIGNvdWxkIGJlIGFueSBvZgotICogCW9mIHRob3NlIHNldCBpbiByZWdfc2V0X2J5LCAlUkVHRE9NX1NFVF9CWV8qCi0gKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCi0gKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKLSAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCi0gKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucwotICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAotICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5Ci0gKiAJZG9tYWluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKLSAqIAljb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKLSAqIAlpbmRvb3IsIG9yIGlmIGl0IGRvZXNuJ3QgbWF0dGVyCi0gKi8KLXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgewotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JZW51bSByZWdfc2V0X2J5IGluaXRpYXRvcjsKLQljaGFyIGFscGhhMlsyXTsKLQlib29sIGludGVyc2VjdDsKLQl1MzIgY291bnRyeV9pZV9jaGVja3N1bTsKLQllbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2VudjsKLX07CisjaW5jbHVkZSAibmw4MDIxMS5oIgogCiAvKiBSZWNlaXB0IG9mIGluZm9ybWF0aW9uIGZyb20gbGFzdCByZWd1bGF0b3J5IHJlcXVlc3QgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsYXN0X3JlcXVlc3Q7CkBAIC04NiwyMiArNTUsNjMgQEAKIAlNSFpfVE9fS0haKDIwKSwKIH07CiAKLS8qIENlbnRyYWwgd2lyZWxlc3MgY29yZSByZWd1bGF0b3J5IGRvbWFpbnMsIHdlIG9ubHkgbmVlZCB0d28sCisvKgorICogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKICAqIHRoZSBjdXJyZW50IG9uZSBhbmQgYSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIHdlIGhhdmUgbm8KLSAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3JlZ2RvbWFpbjsKKyAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyCisgKi8KK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CiAKLS8qIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKKy8qCisgKiBXZSB1c2UgdGhpcyBhcyBhIHBsYWNlIGZvciB0aGUgcmQgc3RydWN0dXJlIGJ1aWx0IGZyb20gdGhlCiAgKiBsYXN0IHBhcnNlZCBjb3VudHJ5IElFIHRvIHJlc3QgdW50aWwgQ1JEQSBnZXRzIGJhY2sgdG8gdXMgd2l0aAotICogd2hhdCBpdCB0aGlua3Mgc2hvdWxkIGFwcGx5IGZvciB0aGUgc2FtZSBjb3VudHJ5ICovCisgKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkKKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbjsKIAorLyogVXNlZCB0byBxdWV1ZSB1cCByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19yZXF1ZXN0c19saXN0KTsKK3N0YXRpYyBzcGlubG9ja190IHJlZ19yZXF1ZXN0c19sb2NrOworCisvKiBVc2VkIHRvIHF1ZXVlIHVwIGJlYWNvbiBoaW50cyBmb3IgcmV2aWV3ICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19wZW5kaW5nX2JlYWNvbnMpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrOworCisvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgcHJvY2Vzc2VkIGJlYWNvbiBoaW50cyAqLworc3RhdGljIExJU1RfSEVBRChyZWdfYmVhY29uX2xpc3QpOworCitzdHJ1Y3QgcmVnX2JlYWNvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFuOworfTsKKwogLyogV2Uga2VlcCBhIHN0YXRpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIG9mIHRoZSBhYnNlbmNlIG9mIENSREEgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB3b3JsZF9yZWdkb20gPSB7Ci0JLm5fcmVnX3J1bGVzID0gMSwKKwkubl9yZWdfcnVsZXMgPSA1LAogCS5hbHBoYTIgPSAgIjAwIiwKIAkucmVnX3J1bGVzID0gewotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsIDApLAorCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMTIuLjEzLiBObyBIVDQwCisJCSAqIGNoYW5uZWwgZml0cyBoZXJlLiAqLworCQlSRUdfUlVMRSgyNDY3LTEwLCAyNDcyKzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCisJCS8qIElFRUUgODAyLjExIGNoYW5uZWwgMTQgLSBPbmx5IEpQIGVuYWJsZXMKKwkJICogdGhpcyBhbmQgZm9yIDgwMi4xMWIgb25seSAqLworCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyB8CisJCQlOTDgwMjExX1JSRl9OT19PRkRNKSwKKwkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVsIDM2Li40OCAqLworCQlSRUdfUlVMRSg1MTgwLTEwLCA1MjQwKzEwLCA0MCwgNiwgMjAsCisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorICAgICAgICAgICAgICAgICAgICAgICAgTkw4MDIxMV9SUkZfTk9fSUJTUyksCisKKwkJLyogTkI6IDUyNjAgTUh6IC0gNTcwMCBNSHogcmVxdWllcyBERlMgKi8KKworCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMTQ5Li4xNjUgKi8KKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDYsIDIwLAogCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwKIAkJCU5MODAyMTFfUlJGX05PX0lCU1MpLAogCX0KQEAgLTExMiwxMiArMTIyLDE5IEBACiAKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIlVTIjsKKyNlbHNlCitzdGF0aWMgY2hhciAqaWVlZTgwMjExX3JlZ2RvbSA9ICIwMCI7CisjZW5kaWYKKwogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKIAotLyogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgorI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQorLyoKKyAqIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KICAqIFdlIG1ha2UgZW1waGFzaXMgd2UgYXJlIHVzaW5nIHRoZSBleGFjdCBzYW1lIGZyZXF1ZW5jaWVzCi0gKiBhcyBiZWZvcmUgKi8KKyAqIGFzIGJlZm9yZQorICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNiwKQEAgLTE1Niw4ICsxNzMsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGV1X3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA2LAotCS8qIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAotCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwkvKgorCSAqIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAorCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkgKi8KIAkuYWxwaGEyID0gICJFVSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjEzICovCkBAIC0yMjYsOCArMjQ1LDEwIEBACiAJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKIH0KIAotLyogRHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0ZWQgYnkgdGhlIHdpcmVsZXNzCi0gKiBjb3JlIHVwb24gaW5pdGlhbGl6YXRpb24gKi8KKy8qCisgKiBEeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3RlZCBieSB0aGUgd2lyZWxlc3MKKyAqIGNvcmUgdXBvbiBpbml0aWFsaXphdGlvbgorICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfd29ybGRfcmVnZG9tYWluKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlCVUdfT04oIWxhc3RfcmVxdWVzdCk7CkBAIC0yNjgsOCArMjg5LDEwIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gd2FzIGJ1aWx0IGJ5IGRyaXZlcgotCSAqIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAqLworCS8qCisJICogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBidWlsdCBieSBkcml2ZXIKKwkgKiBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKKwkgKi8KIAlpZiAoYWxwaGEyWzBdID09ICc5JyAmJiBhbHBoYTJbMV0gPT0gJzknKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNzksOSArMzAyLDExIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCisJLyoKKwkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCiAJICogcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbgotCSAqIHN0cnVjdHVyZXMgKi8KKwkgKiBzdHJ1Y3R1cmVzCisJICovCiAJaWYgKGFscGhhMlswXSA9PSAnOScgJiYgYWxwaGEyWzFdID09ICc4JykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMzA2LDggKzMzMSwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZWQoY29uc3QgY2hhciAqYWxwaGEyKQorc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZXMoY29uc3QgY2hhciAqYWxwaGEyKQogeworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwgYWxwaGEyKSkKQEAgLTMzNCw4ICszNjEsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQotICogYmFzaXMgaW4gdXNlcnNwYWNlLiAqLworLyoKKyAqIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQorICogYmFzaXMgaW4gdXNlcnNwYWNlLgorICovCiBzdGF0aWMgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpCiB7CiAJY2hhciBjb3VudHJ5X2Vudls5ICsgMl0gPSAiQ09VTlRSWT0iOwpAQCAtNDQ3LDEwICs0NzYsMTIgQEAKICN1bmRlZiBPTkVfR0haX0lOX0tIWgogfQogCi0vKiBDb252ZXJ0cyBhIGNvdW50cnkgSUUgdG8gYSByZWd1bGF0b3J5IGRvbWFpbi4gQSByZWd1bGF0b3J5IGRvbWFpbgorLyoKKyAqIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBzdHJ1Y3R1cmUgaGFzIGEgbG90IG9mIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBJRSBkb2Vzbid0IHlldCBoYXZlLAogICogc28gZm9yIHRoZSBvdGhlciB2YWx1ZXMgd2UgdXNlIHVwcGVyIG1heCB2YWx1ZXMgYXMgd2Ugd2lsbCBpbnRlcnNlY3QKLSAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuICovCisgKiB3aXRoIG91ciB1c2Vyc3BhY2UgcmVndWxhdG9yeSBhZ2VudCB0byBnZXQgbG93ZXIgYm91bmRzLgorICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfMl9yZCgKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbiwKQEAgLTQ5NSw5ICs1MjYsMTEgQEAKIAogCSpjaGVja3N1bSBePSAoKGZsYWdzIF4gYWxwaGEyWzBdIF4gYWxwaGEyWzFdKSA8PCA4KTsKIAotCS8qIFdlIG5lZWQgdG8gYnVpbGQgYSByZWcgcnVsZSBmb3IgZWFjaCB0cmlwbGV0LCBidXQgZmlyc3Qgd2UgbXVzdAorCS8qCisJICogV2UgbmVlZCB0byBidWlsZCBhIHJlZyBydWxlIGZvciBlYWNoIHRyaXBsZXQsIGJ1dCBmaXJzdCB3ZSBtdXN0CiAJICogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcmVnIHJ1bGVzIHdlIHdpbGwgbmVlZC4gV2Ugd2lsbCBuZWVkIG9uZQotCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZCAqLworCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZAorCSAqLwogCXdoaWxlIChjb3VudHJ5X2llX2xlbiA+PSAzKSB7CiAJCWludCBlbmRfY2hhbm5lbCA9IDA7CiAJCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0cmlwbGV0ID0KQEAgLTUzNSw5ICs1NjgsMTEgQEAKIAkJaWYgKGN1cl9zdWJfbWF4X2NoYW5uZWwgPCBjdXJfY2hhbm5lbCkKIAkJCXJldHVybiBOVUxMOwogCi0JCS8qIERvIG5vdCBhbGxvdyBvdmVybGFwcGluZyBjaGFubmVscy4gQWxzbyBjaGFubmVscworCQkvKgorCQkgKiBEbyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgY2hhbm5lbHMuIEFsc28gY2hhbm5lbHMKIAkJICogcGFzc2VkIGluIGVhY2ggc3ViYmFuZCBtdXN0IGJlIG1vbm90b25pY2FsbHkKLQkJICogaW5jcmVhc2luZyAqLworCQkgKiBpbmNyZWFzaW5nCisJCSAqLwogCQlpZiAobGFzdF9zdWJfbWF4X2NoYW5uZWwpIHsKIAkJCWlmIChjdXJfY2hhbm5lbCA8PSBsYXN0X3N1Yl9tYXhfY2hhbm5lbCkKIAkJCQlyZXR1cm4gTlVMTDsKQEAgLTU0NSwxMCArNTgwLDEyIEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQkvKiBXaGVuIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyBzdXBwb3J0ZWQKKwkJLyoKKwkJICogV2hlbiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgc3VwcG9ydGVkCiAJCSAqIHdlIGNhbiB0aHJvdyBleHQgdHJpcGxldHMgYXMgcGFydCBvZiB0aGlzIHNvdXAsCiAJCSAqIGZvciBub3cgd2UgZG9uJ3QgY2FyZSB3aGVuIHRob3NlIGNoYW5nZSBhcyB3ZQotCQkgKiBkb24ndCBzdXBwb3J0IHRoZW0gKi8KKwkJICogZG9uJ3Qgc3VwcG9ydCB0aGVtCisJCSAqLwogCQkqY2hlY2tzdW0gXj0gKChjdXJfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDgpIHwKIAkJICAoKGN1cl9zdWJfbWF4X2NoYW5uZWwgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAxNikgfAogCQkgICgodHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgMjQpOwpAQCAtNTU5LDggKzU5NiwxMCBAQAogCQljb3VudHJ5X2llX2xlbiAtPSAzOwogCQludW1fcnVsZXMrKzsKIAotCQkvKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0Ci0JCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudCAqLworCQkvKgorCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0CisJCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudAorCQkgKi8KIAkJaWYgKG51bV9ydWxlcyA+IE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTKQogCQkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTg4LDggKzYyNywxMCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2UgPSBOVUxMOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwogCi0JCS8qIE11c3QgcGFyc2UgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHRydWUsCi0JCSAqIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQgKi8KKwkJLyoKKwkJICogTXVzdCBwYXJzZSBpZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSwKKwkJICogd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldAorCQkgKi8KIAkJaWYgKHRyaXBsZXQtPmV4dC5yZWdfZXh0ZW5zaW9uX2lkID49CiAJCQkJSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEKSB7CiAJCQljb3VudHJ5X2llICs9IDM7CkBAIC02MTEsMTAgKzY1MiwxMiBAQAogCQkJZW5kX2NoYW5uZWwgPSAgdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCiAJCQkJKDQgKiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMSkpOwogCi0JCS8qIFRoZSArMTAgaXMgc2luY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGV4cGVjdHMKKwkJLyoKKwkJICogVGhlICsxMCBpcyBzaW5jZSB0aGUgcmVndWxhdG9yeSBkb21haW4gZXhwZWN0cwogCQkgKiB0aGUgYWN0dWFsIGJhbmQgZWRnZSwgbm90IHRoZSBjZW50ZXIgb2YgZnJlcSBmb3IKIAkJICogaXRzIHN0YXJ0IGFuZCBlbmQgZnJlcXMsIGFzc3VtaW5nIDIwIE1IeiBiYW5kd2lkdGggb24KLQkJICogdGhlIGNoYW5uZWxzIHBhc3NlZCAqLworCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkCisJCSAqLwogCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeiA9CiAJCQlNSFpfVE9fS0haKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgKIAkJCQl0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsKSAtIDEwKTsKQEAgLTYyMiw5ICs2NjUsMTEgQEAKIAkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAogCQkJCWVuZF9jaGFubmVsKSArIDEwKTsKIAotCQkvKiBMYXJnZSBhcmJpdHJhcnkgdmFsdWVzLCB3ZSBpbnRlcnNlY3QgbGF0ZXIgKi8KLQkJLyogSW5jcmVtZW50IHRoaXMgaWYgd2UgZXZlciBzdXBwb3J0ID49IDQwIE1IeiBjaGFubmVscwotCQkgKiBpbiBJRUVFIDgwMi4xMSAqLworCQkvKgorCQkgKiBUaGVzZSBhcmUgbGFyZ2UgYXJiaXRyYXJ5IHZhbHVlcyB3ZSB1c2UgdG8gaW50ZXJzZWN0IGxhdGVyLgorCQkgKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCisJCSAqIGluIElFRUUgODAyLjExCisJCSAqLwogCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA9IE1IWl9UT19LSFooNDApOwogCQlwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluID0gREJJX1RPX01CSSgxMDApOwogCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0oMTAwKTsKQEAgLTY0MCw4ICs2ODUsMTAgQEAKIH0KIAogCi0vKiBIZWxwZXIgZm9yIHJlZ2RvbV9pbnRlcnNlY3QoKSwgdGhpcyBkb2VzIHRoZSByZWFsCi0gKiBtYXRoZW1hdGljYWwgaW50ZXJzZWN0aW9uIGZ1biAqLworLyoKKyAqIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKKyAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuCisgKi8KIHN0YXRpYyBpbnQgcmVnX3J1bGVzX2ludGVyc2VjdCgKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMSwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMiwKQEAgLTcxOSwxMSArNzY2LDEzIEBACiAJaWYgKCFyZDEgfHwgIXJkMikKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBGaXJzdCB3ZSBnZXQgYSBjb3VudCBvZiB0aGUgcnVsZXMgd2UnbGwgbmVlZCwgdGhlbiB3ZSBhY3R1YWxseQorCS8qCisJICogRmlyc3Qgd2UgZ2V0IGEgY291bnQgb2YgdGhlIHJ1bGVzIHdlJ2xsIG5lZWQsIHRoZW4gd2UgYWN0dWFsbHkKIAkgKiBidWlsZCB0aGVtLiBUaGlzIGlzIHRvIHNvIHdlIGNhbiBtYWxsb2MoKSBhbmQgZnJlZSgpIGEKIAkgKiByZWdkb21haW4gb25jZS4gVGhlIHJlYXNvbiB3ZSB1c2UgcmVnX3J1bGVzX2ludGVyc2VjdCgpIGhlcmUKIAkgKiBpcyBpdCB3aWxsIHJldHVybiAtRUlOVkFMIGlmIHRoZSBydWxlIGNvbXB1dGVkIG1ha2VzIG5vIHNlbnNlLgotCSAqIEFsbCBydWxlcyB0aGF0IGRvIGNoZWNrIG91dCBPSyBhcmUgdmFsaWQuICovCisJICogQWxsIHJ1bGVzIHRoYXQgZG8gY2hlY2sgb3V0IE9LIGFyZSB2YWxpZC4KKwkgKi8KIAogCWZvciAoeCA9IDA7IHggPCByZDEtPm5fcmVnX3J1bGVzOyB4KyspIHsKIAkJcnVsZTEgPSAmcmQxLT5yZWdfcnVsZXNbeF07CkBAIC03NTEsMTQgKzgwMCwxOCBAQAogCQlydWxlMSA9ICZyZDEtPnJlZ19ydWxlc1t4XTsKIAkJZm9yICh5ID0gMDsgeSA8IHJkMi0+bl9yZWdfcnVsZXM7IHkrKykgewogCQkJcnVsZTIgPSAmcmQyLT5yZWdfcnVsZXNbeV07Ci0JCQkvKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKKwkJCS8qCisJCQkgKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKIAkJCSAqIHdyaXRlIHRvIHRoZSB0YXJnZXQgcnVsZSBkaXJlY3RseSBzYXZpbmcgb3Vyc2VsdmVzCi0JCQkgKiBhIG1lbWNweSgpICovCisJCQkgKiBhIG1lbWNweSgpCisJCQkgKi8KIAkJCWludGVyc2VjdGVkX3J1bGUgPSAmcmQtPnJlZ19ydWxlc1tydWxlX2lkeF07CiAJCQlyID0gcmVnX3J1bGVzX2ludGVyc2VjdChydWxlMSwgcnVsZTIsCiAJCQkJaW50ZXJzZWN0ZWRfcnVsZSk7Ci0JCQkvKiBObyBuZWVkIHRvIG1lbXNldCBoZXJlIHRoZSBpbnRlcnNlY3RlZCBydWxlIGhlcmUgYXMKLQkJCSAqIHdlJ3JlIG5vdCB1c2luZyB0aGUgc3RhY2sgYW55bW9yZSAqLworCQkJLyoKKwkJCSAqIE5vIG5lZWQgdG8gbWVtc2V0IGhlcmUgdGhlIGludGVyc2VjdGVkIHJ1bGUgaGVyZSBhcworCQkJICogd2UncmUgbm90IHVzaW5nIHRoZSBzdGFjayBhbnltb3JlCisJCQkgKi8KIAkJCWlmIChyKQogCQkJCWNvbnRpbnVlOwogCQkJcnVsZV9pZHgrKzsKQEAgLTc3Nyw4ICs4MzAsMTAgQEAKIAlyZXR1cm4gcmQ7CiB9CiAKLS8qIFhYWDogYWRkIHN1cHBvcnQgZm9yIHRoZSByZXN0IG9mIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncywgd2UgbWF5Ci0gKiB3YW50IHRvIGp1c3QgaGF2ZSB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUgdXNlIHRoZXNlICovCisvKgorICogWFhYOiBhZGQgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLCB3ZSBtYXkKKyAqIHdhbnQgdG8ganVzdCBoYXZlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSB1c2UgdGhlc2UKKyAqLwogc3RhdGljIHUzMiBtYXBfcmVnZG9tX2ZsYWdzKHUzMiByZF9mbGFncykKIHsKIAl1MzIgY2hhbm5lbF9mbGFncyA9IDA7CkBAIC03OTEsNDggKzg0Niw0NSBAQAogCXJldHVybiBjaGFubmVsX2ZsYWdzOwogfQogCi0vKioKLSAqIGZyZXFfcmVnX2luZm8gLSBnZXQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeQotICogQGNlbnRlcl9mcmVxOiBGcmVxdWVuY3kgaW4gS0h6IGZvciB3aGljaCB3ZSB3YW50IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yCi0gKiBAYmFuZHdpZHRoOiB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50IHlvdSBoYXZlIGluIEtIeiwgaWYgeW91IGRvIG5vdCBoYXZlIG9uZQotICogCXlvdSBjYW4gc2V0IHRoaXMgdG8gMC4gSWYgdGhpcyBmcmVxdWVuY3kgaXMgYWxsb3dlZCB3ZSB0aGVuIHNldAotICogCXRoaXMgdmFsdWUgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBiYW5kd2lkdGguCi0gKiBAcmVnX3J1bGU6IHRoZSByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggd2UgaGF2ZSBmb3IgdGhpcyBmcmVxdWVuY3kKLSAqCi0gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBzcGVjaWZpYyBmcmVxdWVuY3kgb24KLSAqIGEgZ2l2ZW4gd2lyZWxlc3MgZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBhIHNwZWNpZmljIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBpdCB3YW50cyB0byBmb2xsb3cgd2UgcmVzcGVjdCB0aGF0IHVubGVzcyBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQKLSAqIGFuZCBwcm9jZXNzZWQgYWxyZWFkeS4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBhIHZhbGlkIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCBkb2VzCi0gKiBhcHBseSB0byB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgb3RoZXJ3aXNlIGl0IHJldHVybnMgbm9uLXplcm8uIEl0IHdpbGwKLSAqIGFsc28gcmV0dXJuIC1FUkFOR0UgaWYgd2UgZGV0ZXJtaW5lIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBkb2VzIG5vdCBldmVuIGhhdmUKLSAqIGEgcmVndWxhdG9yeSBydWxlIGZvciBhIGZyZXF1ZW5jeSByYW5nZSBpbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLiBTZWUKLSAqIGZyZXFfaW5fcnVsZV9iYW5kKCkgZm9yIG91ciBjdXJyZW50IGRlZmluaXRpb24gb2YgYSBiYW5kIC0tIHRoaXMgaXMgcHVyZWx5Ci0gKiBzdWJqZWN0aXZlIGFuZCByaWdodCBub3cgaXRzIDgwMi4xMSBzcGVjaWZpYy4KLSAqLwotc3RhdGljIGludCBmcmVxX3JlZ19pbmZvKHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCi0JCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKQorc3RhdGljIGludCBmcmVxX3JlZ19pbmZvX3JlZ2Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHUzMiBjZW50ZXJfZnJlcSwKKwkJCSAgICAgIHUzMiAqYmFuZHdpZHRoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1c3RvbV9yZWdkKQogewogCWludCBpOwogCWJvb2wgYmFuZF9ydWxlX2ZvdW5kID0gZmFsc2U7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CiAJdTMyIG1heF9iYW5kd2lkdGggPSAwOwogCi0JaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCisJcmVnZCA9IGN1c3RvbV9yZWdkID8gY3VzdG9tX3JlZ2QgOiBjZmc4MDIxMV9yZWdkb21haW47CisKKwkvKgorCSAqIEZvbGxvdyB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIHByZXNlbnQsIHVubGVzcyBhIGNvdW50cnkKKwkgKiBJRSBoYXMgYmVlbiBwcm9jZXNzZWQgb3IgYSB1c2VyIHdhbnRzIHRvIGhlbHAgY29tcGxhaW5jZSBmdXJ0aGVyCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSICYmCisJICAgIHdpcGh5LT5yZWdkKQorCQlyZWdkID0gd2lwaHktPnJlZ2Q7CisKKwlpZiAoIXJlZ2QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZzgwMjExX3JlZ2RvbWFpbi0+bl9yZWdfcnVsZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZWdkLT5uX3JlZ19ydWxlczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJyOwogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyID0gTlVMTDsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwciA9IE5VTEw7CiAKLQkJcnIgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCXJyID0gJnJlZ2QtPnJlZ19ydWxlc1tpXTsKIAkJZnIgPSAmcnItPmZyZXFfcmFuZ2U7CiAJCXByID0gJnJyLT5wb3dlcl9ydWxlOwogCi0JCS8qIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKKwkJLyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgb25lIGZyZXF1ZW5jeSBydWxlIHdhcwogCQkgKiB3YXMgaW4gY2VudGVyX2ZyZXEncyBiYW5kLCB0aGF0J3MgZW5vdWdoLCBzbyBsZXRzCi0JCSAqIG5vdCBvdmVyd3JpdGUgaXQgb25jZSBmb3VuZCAqLworCQkgKiBub3Qgb3ZlcndyaXRlIGl0IG9uY2UgZm91bmQKKwkJICovCiAJCWlmICghYmFuZF9ydWxlX2ZvdW5kKQogCQkJYmFuZF9ydWxlX2ZvdW5kID0gZnJlcV9pbl9ydWxlX2JhbmQoZnIsIGNlbnRlcl9mcmVxKTsKIApAQCAtODUwLDYgKzkwMiwxNCBAQAogCiAJcmV0dXJuICFtYXhfYmFuZHdpZHRoOwogfQorRVhQT1JUX1NZTUJPTChmcmVxX3JlZ19pbmZvKTsKKworaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpCit7CisJcmV0dXJuIGZyZXFfcmVnX2luZm9fcmVnZCh3aXBoeSwgY2VudGVyX2ZyZXEsCisJCWJhbmR3aWR0aCwgcmVnX3J1bGUsIE5VTEwpOworfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgpCkBAIC04NjEsNiArOTIxLDExIEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5ID0gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAogCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOwogCUJVR19PTihjaGFuX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscyk7CkBAIC04NjgsMTEgKzkzMywxMiBAQAogCiAJZmxhZ3MgPSBjaGFuLT5vcmlnX2ZsYWdzOwogCi0JciA9IGZyZXFfcmVnX2luZm8oTUhaX1RPX0tIWihjaGFuLT5jZW50ZXJfZnJlcSksCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIE1IWl9UT19LSFooY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQkmbWF4X2JhbmR3aWR0aCwgJnJlZ19ydWxlKTsKIAogCWlmIChyKSB7Ci0JCS8qIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQorCQkvKgorCQkgKiBUaGlzIG1lYW5zIG5vIHJlZ3VsYXRvcnkgcnVsZSB3YXMgZm91bmQgaW4gdGhlIGNvdW50cnkgSUUKIAkJICogd2l0aCBhIGZyZXF1ZW5jeSByYW5nZSBvbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLCBzaW5jZQogCQkgKiBJRUVFLTgwMi4xMSBhbGxvd3MgZm9yIGEgY291bnRyeSBJRSB0byBoYXZlIGEgc3Vic2V0IG9mIHRoZQogCQkgKiByZWd1bGF0b3J5IGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGEgY291bnRyeSB3ZSBpZ25vcmUKQEAgLTg4Myw3ICs5NDksOCBAQAogCQkgKiBodHRwOi8vdGlueXVybC5jb20vMTFkLWNsYXJpZmljYXRpb24KIAkJICovCiAJCWlmIChyID09IC1FUkFOR0UgJiYKLQkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBMZWF2aW5nIGNoYW5uZWwgJWQgTUh6ICIKIAkJCQkiaW50YWN0IG9uICVzIC0gbm8gcnVsZSBmb3VuZCBpbiBiYW5kIG9uICIKQEAgLTg5MSwxMCArOTU4LDEzIEBACiAJCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKICNlbmRpZgogCQl9IGVsc2UgewotCQkvKiBJbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgY291bnRyeSBJRSBoYXMgYXQgbGVhc3Qgb25lIHJlZyBydWxlCi0JCSAqIGZvciB0aGUgYmFuZCBzbyB3ZSByZXNwZWN0IGl0cyBiYW5kIGRlZmluaXRpb25zICovCisJCS8qCisJCSAqIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKKwkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMKKwkJICovCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwotCQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKKwkJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRGlzYWJsaW5nICIKIAkJCQkJImNoYW5uZWwgJWQgTUh6IG9uICVzIGR1ZSB0byAiCiAJCQkJCSJDb3VudHJ5IElFXG4iLApAQCAtOTA4LDYgKzk3OCwyNCBAQAogCiAJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJICAgIHJlcXVlc3Rfd2lwaHkgJiYgcmVxdWVzdF93aXBoeSA9PSB3aXBoeSAmJgorCSAgICByZXF1ZXN0X3dpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSkgeworCQkvKgorCQkgKiBUaGlzIGdhdXJhbnRlZXMgdGhlIGRyaXZlcidzIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbgorCQkgKiB3aWxsIGFsd2F5cyBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgZnVydGhlciByZWd1bGF0b3J5CisJCSAqIHNldHRpbmdzCisJCSAqLworCQljaGFuLT5mbGFncyA9IGNoYW4tPm9yaWdfZmxhZ3MgPQorCQkJbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOworCQljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gY2hhbi0+b3JpZ19tYWcgPQorCQkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwkJY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFoobWF4X2JhbmR3aWR0aCk7CisJCWNoYW4tPm1heF9wb3dlciA9IGNoYW4tPm9yaWdfbXB3ciA9CisJCQkoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKKwkJcmV0dXJuOworCX0KKwogCWNoYW4tPmZsYWdzID0gZmxhZ3MgfCBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CiAJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IG1pbihjaGFuLT5vcmlnX21hZywKIAkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKSk7CkBAIC05MzEsMTE2ICsxMDE5LDUxMyBAQAogCQloYW5kbGVfY2hhbm5lbCh3aXBoeSwgYmFuZCwgaSk7CiB9CiAKLXN0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiB0cnVlOwotCWlmIChzZXRieSA9PSBSRUdET01fU0VUX0JZX0NPUkUgJiYKLQkJICB3aXBoeS0+ZndfaGFuZGxlc19yZWd1bGF0b3J5KQorCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgJiYKKwkJICB3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpCisJCXJldHVybiB0cnVlOworCS8qCisJICogd2lwaHktPnJlZ2Qgd2lsbCBiZSBzZXQgb25jZSB0aGUgZGV2aWNlIGhhcyBpdHMgb3duCisJICogZGVzaXJlZCByZWd1bGF0b3J5IGRvbWFpbiBzZXQKKwkgKi8KKwlpZiAod2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ICYmICF3aXBoeS0+cmVnZCAmJgorCSAgICAhaXNfd29ybGRfcmVnZG9tKGxhc3RfcmVxdWVzdC0+YWxwaGEyKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSByZWdfc2V0X2J5IHNldGJ5KQorc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCWlmICghaWdub3JlX3JlZ191cGRhdGUoJmRydi0+d2lwaHksIHNldGJ5KSkKLQkJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBzZXRieSk7CisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBpbml0aWF0b3IpOwogfQogCi12b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkgICAgICBzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbikKK3sKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisjZGVmaW5lIFJFR19ERUJVR19CRUFDT05fRkxBRyhkZXNjKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBFbmFibGluZyAiIGRlc2MgIiBvbiAiIFwKKwkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsIFwKKwkJcmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSwgXAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwocmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSksIFwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2Vsc2UKKyNkZWZpbmUgUkVHX0RFQlVHX0JFQUNPTl9GTEFHKGRlc2MpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbY2hhbl9pZHhdOworCisJaWYgKGxpa2VseShjaGFuLT5jZW50ZXJfZnJlcSAhPSByZWdfYmVhY29uLT5jaGFuLmNlbnRlcl9mcmVxKSkKKwkJcmV0dXJuOworCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSB7CisJCWNoYW4tPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCVJFR19ERUJVR19CRUFDT05fRkxBRygiYWN0aXZlIHNjYW5uaW5nIik7CisJfQorCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSUJTUykgeworCQljaGFuLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJUkVHX0RFQlVHX0JFQUNPTl9GTEFHKCJiZWFjb25pbmciKTsKKwl9CisKKwljaGFuLT5iZWFjb25fZm91bmQgPSB0cnVlOworI3VuZGVmIFJFR19ERUJVR19CRUFDT05fRkxBRworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYSBzY2FuIG9uIGEgd2lwaHkgZmluZHMgYSBiZWFjb24gb24KKyAqIG5ldyBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJaGFuZGxlX3JlZ19iZWFjb24od2lwaHksIGksIHJlZ19iZWFjb24pOworfQorCisvKgorICogQ2FsbGVkIHVwb24gcmVnIGNoYW5nZXMgb3IgYSBuZXcgd2lwaHkgaXMgYWRkZWQKKyAqLworc3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX2JlYWNvbl9yZWcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX2JlYWNvbl9saXN0KSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdfYmVhY29uLCAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCQljb250aW51ZTsKKwkJc2JhbmQgPSB3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXTsKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCQloYW5kbGVfcmVnX2JlYWNvbih3aXBoeSwgaSwgcmVnX2JlYWNvbik7CisJfQorfQorCitzdGF0aWMgYm9vbCByZWdfaXNfd29ybGRfcm9hbWluZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWlmIChpc193b3JsZF9yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpIHx8CisJICAgICh3aXBoeS0+cmVnZCAmJiBpc193b3JsZF9yZWdkb20od2lwaHktPnJlZ2QtPmFscGhhMikpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgd2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJlYXAgdGhlIGFkdmFudGFnZXMgb2YgcHJldmlvdXNseSBmb3VuZCBiZWFjb25zICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19iZWFjb25zKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJaWYgKCFyZWdfaXNfd29ybGRfcm9hbWluZyh3aXBoeSkpCisJCXJldHVybjsKKwl3aXBoeV91cGRhdGVfYmVhY29uX3JlZyh3aXBoeSk7Cit9CisKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCWlmIChpZ25vcmVfcmVnX3VwZGF0ZSh3aXBoeSwgaW5pdGlhdG9yKSkKKwkJZ290byBvdXQ7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJaGFuZGxlX2JhbmQod2lwaHksIGJhbmQpOworCX0KK291dDoKKwlyZWdfcHJvY2Vzc19iZWFjb25zKHdpcGh5KTsKKwlpZiAod2lwaHktPnJlZ19ub3RpZmllcikKKwkJd2lwaHktPnJlZ19ub3RpZmllcih3aXBoeSwgbGFzdF9yZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWxfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwlpbnQgcjsKKwl1MzIgbWF4X2JhbmR3aWR0aCA9IDA7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGUgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisJQlVHX09OKGNoYW5faWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKTsKKwljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tjaGFuX2lkeF07CisKKwlyID0gZnJlcV9yZWdfaW5mb19yZWdkKHdpcGh5LCBNSFpfVE9fS0haKGNoYW4tPmNlbnRlcl9mcmVxKSwKKwkJJm1heF9iYW5kd2lkdGgsICZyZWdfcnVsZSwgcmVnZCk7CisKKwlpZiAocikgeworCQljaGFuLT5mbGFncyA9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCQlyZXR1cm47CisJfQorCisJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKKworCWNoYW4tPmZsYWdzIHw9IG1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKKwljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihtYXhfYmFuZHdpZHRoKTsKKwljaGFuLT5tYXhfcG93ZXIgPSAoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JhbmRfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCUJVR19PTighd2lwaHktPmJhbmRzW2JhbmRdKTsKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQloYW5kbGVfY2hhbm5lbF9jdXN0b20od2lwaHksIGJhbmQsIGksIHJlZ2QpOworfQorCisvKiBVc2VkIGJ5IGRyaXZlcnMgcHJpb3IgdG8gd2lwaHkgcmVnaXN0cmF0aW9uICovCit2b2lkIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpCiB7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKIAkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKLQkJCWhhbmRsZV9iYW5kKHdpcGh5LCBiYW5kKTsKLQkJaWYgKHdpcGh5LT5yZWdfbm90aWZpZXIpCi0JCQl3aXBoeS0+cmVnX25vdGlmaWVyKHdpcGh5LCBzZXRieSk7CisJCQloYW5kbGVfYmFuZF9jdXN0b20od2lwaHksIGJhbmQsIHJlZ2QpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi0vKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQotICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMgKi8KK3N0YXRpYyBpbnQgcmVnX2NvcHlfcmVnZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqKmRzdF9yZWdkLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzcmNfcmVnZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwlpbnQgc2l6ZV9vZl9yZWdkID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNpemVfb2ZfcmVnZCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikgKworCSAgKChzcmNfcmVnZC0+bl9yZWdfcnVsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwlyZWdkID0ga3phbGxvYyhzaXplX29mX3JlZ2QsIEdGUF9LRVJORUwpOworCWlmICghcmVnZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocmVnZCwgc3JjX3JlZ2QsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikpOworCisJZm9yIChpID0gMDsgaSA8IHNyY19yZWdkLT5uX3JlZ19ydWxlczsgaSsrKQorCQltZW1jcHkoJnJlZ2QtPnJlZ19ydWxlc1tpXSwgJnNyY19yZWdkLT5yZWdfcnVsZXNbaV0sCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOworCisJKmRzdF9yZWdkID0gcmVnZDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCBieSBpZ25vcmVfcmVxdWVzdCgpIHRvIGluZGljYXRlCisgKiBpdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHdlIHNob3VsZCBpbnRlcnNlY3QgdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICovCiAjZGVmaW5lIFJFR19JTlRFUlNFQ1QJMQogCiAvKiBUaGlzIGhhcyB0aGUgbG9naWMgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIGEgbmV3IHJlcXVlc3QKICAqIHNob3VsZCBiZSBpZ25vcmVkLiAqLwotc3RhdGljIGludCBpZ25vcmVfcmVxdWVzdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICBjb25zdCBjaGFyICphbHBoYTIpCitzdGF0aWMgaW50IGlnbm9yZV9yZXF1ZXN0KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnBlbmRpbmdfcmVxdWVzdCkKIHsKKwlzdHJ1Y3Qgd2lwaHkgKmxhc3Rfd2lwaHkgPSBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCS8qIEFsbCBpbml0aWFsIHJlcXVlc3RzIGFyZSByZXNwZWN0ZWQgKi8KIAlpZiAoIWxhc3RfcmVxdWVzdCkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKHNldF9ieSkgewotCWNhc2UgUkVHRE9NX1NFVF9CWV9JTklUOgorCXN3aXRjaCAocGVuZGluZ19yZXF1ZXN0LT5pbml0aWF0b3IpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgogCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09SRToKLQkJLyoKLQkJICogQWx3YXlzIHJlc3BlY3QgbmV3IHdpcmVsZXNzIGNvcmUgaGludHMsIHNob3VsZCBvbmx5IGhhcHBlbgotCQkgKiB3aGVuIHVwZGF0aW5nIHRoZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBhdCBpbml0LgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6Ci0JCWlmICh1bmxpa2VseSghaXNfYW5fYWxwaGEyKGFscGhhMikpKQorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisKKwkJbGFzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwkJaWYgKHVubGlrZWx5KCFpc19hbl9hbHBoYTIocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkgeworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCQlpZiAobGFzdF93aXBoeSAhPSB3aXBoeSkgewogCQkJCS8qCiAJCQkJICogVHdvIGNhcmRzIHdpdGggdHdvIEFQcyBjbGFpbWluZyBkaWZmZXJlbnQKIAkJCQkgKiBkaWZmZXJlbnQgQ291bnRyeSBJRSBhbHBoYTJzLiBXZSBjb3VsZAogCQkJCSAqIGludGVyc2VjdCB0aGVtLCBidXQgdGhhdCBzZWVtcyB1bmxpa2VseQogCQkJCSAqIHRvIGJlIGNvcnJlY3QuIFJlamVjdCBzZWNvbmQgb25lIGZvciBub3cuCiAJCQkJICovCi0JCQkJaWYgKCFhbHBoYTJfZXF1YWwoYWxwaGEyLAotCQkJCQkJICBjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMikpCisJCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJCXJldHVybiAtRUFMUkVBRFk7CiAJCQl9Ci0JCQkvKiBUd28gY29uc2VjdXRpdmUgQ291bnRyeSBJRSBoaW50cyBvbiB0aGUgc2FtZSB3aXBoeS4KLQkJCSAqIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBlYXJseSBieSB0aGUgZHJpdmVyL3N0YWNrICovCi0JCQlpZiAoV0FSTl9PTighYWxwaGEyX2VxdWFsKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyLAotCQkJCSAgYWxwaGEyKSkpCisJCQkvKgorCQkJICogVHdvIGNvbnNlY3V0aXZlIENvdW50cnkgSUUgaGludHMgb24gdGhlIHNhbWUgd2lwaHkuCisJCQkgKiBUaGlzIHNob3VsZCBiZSBwaWNrZWQgdXAgZWFybHkgYnkgdGhlIGRyaXZlci9zdGFjaworCQkJICovCisJCQlpZiAoV0FSTl9PTihyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpKQogCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJfQogCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKLQljYXNlIFJFR0RPTV9TRVRfQllfRFJJVkVSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9EUklWRVIpCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOgorCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpIHsKKwkJCWlmIChpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pKQorCQkJCXJldHVybiAwOworCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCQlyZXR1cm4gMDsKIAkJCXJldHVybiAtRUFMUkVBRFk7Ci0JCXJldHVybiAwOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9VU0VSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCQl9CisKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gaWYgeW91IHVucGx1ZyBhbmQgcGx1ZyB5b3VyIGNhcmQKKwkJICogYmFjayBpbiBvciBpZiB5b3UgYWRkIGEgbmV3IGRldmljZSBmb3Igd2hpY2ggdGhlIHByZXZpb3VzbHkKKwkJICogbG9hZGVkIGNhcmQgYWxzbyBhZ3JlZXMgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCisJCXJldHVybiBSRUdfSU5URVJTRUNUOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKIAkJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCQkvKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCi0JCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAgKi8KLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfVVNFUiAmJgorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCisJCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiAmJgogCQkJICBsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJLyoKKwkJICogUHJvY2VzcyB1c2VyIHJlcXVlc3RzIG9ubHkgYWZ0ZXIgcHJldmlvdXMgdXNlci9kcml2ZXIvY29yZQorCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKSB7CisJCQlpZiAocmVnZG9tX2NoYW5nZXMobGFzdF9yZXF1ZXN0LT5hbHBoYTIpKQorCQkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQorCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfZHJ2X211dGV4ICovCi1pbnQgX19yZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldF9ieSwKLQkJCWNvbnN0IGNoYXIgKmFscGhhMiwKLQkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52KQorLyoqCisgKiBfX3JlZ3VsYXRvcnlfaGludCAtIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiBpZiB0aGUgaGludCBjb21lcyBmcm9tIGNvdW50cnkgaW5mb3JtYXRpb24gZnJvbSBhbiBBUCwgdGhpcworICoJaXMgcmVxdWlyZWQgdG8gYmUgc2V0IHRvIHRoZSB3aXBoeSB0aGF0IHJlY2VpdmVkIHRoZSBpbmZvcm1hdGlvbgorICogQHBlbmRpbmdfcmVxdWVzdDogdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisgKgorICogVGhlIFdpcmVsZXNzIHN1YnN5c3RlbSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZQorICogd2hhdCBpdCBiZWxpZXZlcyBzaG91bGQgYmUgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisgKgorICogUmV0dXJucyB6ZXJvIGlmIGFsbCB3ZW50IGZpbmUsICUtRUFMUkVBRFkgaWYgYSByZWd1bGF0b3J5IGRvbWFpbiBoYWQKKyAqIGFscmVhZHkgYmVlbiBzZXQgb3Igb3RoZXIgc3RhbmRhcmQgZXJyb3IgY29kZXMuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfbXV0ZXgKKyAqLworc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAlib29sIGludGVyc2VjdCA9IGZhbHNlOwogCWludCByID0gMDsKIAotCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgc2V0X2J5LCBhbHBoYTIpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKLQlpZiAociA9PSBSRUdfSU5URVJTRUNUKQorCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgcGVuZGluZ19yZXF1ZXN0KTsKKworCWlmIChyID09IFJFR19JTlRFUlNFQ1QpIHsKKwkJaWYgKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7CisJCQlpZiAocikgeworCQkJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KIAkJaW50ZXJzZWN0ID0gdHJ1ZTsKLQllbHNlIGlmIChyKQorCX0gZWxzZSBpZiAocikgeworCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yeSBkb21haW4gYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZQorCQkgKiBkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQganVzdCBjb3B5IGl0IHRvIHRoZQorCQkgKiB3aXBoeQorCQkgKi8KKwkJaWYgKHIgPT0gLUVBTFJFQURZICYmCisJCSAgICBwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJciA9IHJlZ19jb3B5X3JlZ2QoJndpcGh5LT5yZWdkLCBjZmc4MDIxMV9yZWdkb21haW4pOworCQkJaWYgKHIpIHsKKwkJCQlrZnJlZShwZW5kaW5nX3JlcXVlc3QpOworCQkJCXJldHVybiByOworCQkJfQorCQkJciA9IC1FQUxSRUFEWTsKKwkJCWdvdG8gbmV3X3JlcXVlc3Q7CisJCX0KKwkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKIAkJcmV0dXJuIHI7CisJfQorCituZXdfcmVxdWVzdDoKKwlrZnJlZShsYXN0X3JlcXVlc3QpOworCisJbGFzdF9yZXF1ZXN0ID0gcGVuZGluZ19yZXF1ZXN0OworCWxhc3RfcmVxdWVzdC0+aW50ZXJzZWN0ID0gaW50ZXJzZWN0OworCisJcGVuZGluZ19yZXF1ZXN0ID0gTlVMTDsKKworCS8qIFdoZW4gciA9PSBSRUdfSU5URVJTRUNUIHdlIGRvIG5lZWQgdG8gY2FsbCBDUkRBICovCisJaWYgKHIgPCAwKSB7CisJCS8qCisJCSAqIFNpbmNlIENSREEgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoaXMgY2FzZSBhcyB3ZSBhbHJlYWR5CisJCSAqIGhhdmUgYXBwbGllZCB0aGUgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluIGJlZm9yZSB3ZSBqdXN0CisJCSAqIGluZm9ybSB1c2Vyc3BhY2Ugd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIHJlcXVlc3QKKwkJICovCisJCWlmIChyID09IC1FQUxSRUFEWSkKKwkJCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiBjYWxsX2NyZGEobGFzdF9yZXF1ZXN0LT5hbHBoYTIpOworfQorCisvKiBUaGlzIGN1cnJlbnRseSBvbmx5IHByb2Nlc3NlcyB1c2VyIGFuZCBkcml2ZXIgcmVndWxhdG9yeSBoaW50cyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfaGludChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCkKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7CisKKwlCVUdfT04oIXJlZ19yZXF1ZXN0LT5hbHBoYTIpOworCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJaWYgKHdpcGh5X2lkeF92YWxpZChyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KSkKKwkJd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkocmVnX3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAocmVnX3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJICAgICF3aXBoeSkgeworCQlrZnJlZShyZWdfcmVxdWVzdCk7CisJCWdvdG8gb3V0OworCX0KKworCXIgPSBfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgcmVnX3JlcXVlc3QpOworCS8qIFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgb3JpZ18qIHBhcmFtZXRlcnMgYXJlIHNhdmVkICovCisJaWYgKHIgPT0gLUVBTFJFQURZICYmIHdpcGh5ICYmIHdpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSkKKwkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIHJlZ19yZXF1ZXN0LT5pbml0aWF0b3IpOworb3V0OgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworfQorCisvKiBQcm9jZXNzZXMgcmVndWxhdG9yeSBoaW50cywgdGhpcyBpcyBhbGwgdGhlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV8qICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19wZW5kaW5nX2hpbnRzKHZvaWQpCisJeworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0OworCisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyZWdfcmVxdWVzdHNfbGlzdCkpIHsKKwkJcmVnX3JlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZWdfcmVxdWVzdHNfbGlzdCwKKwkJCQkJICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QsCisJCQkJCSAgICAgICBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCisJCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJCXJlZ19wcm9jZXNzX2hpbnQocmVnX3JlcXVlc3QpOworCQlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKK30KKworLyogUHJvY2Vzc2VzIGJlYWNvbiBoaW50cyAtLSB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY291bnRyeSBJRXMgKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfYmVhY29uX2hpbnRzKHZvaWQpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IHJlZ19iZWFjb24gKnBlbmRpbmdfYmVhY29uLCAqdG1wOworCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJLyogVGhpcyBnb2VzIHRocm91Z2ggdGhlIF9wZW5kaW5nXyBiZWFjb24gbGlzdCAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKworCWlmIChsaXN0X2VtcHR5KCZyZWdfcGVuZGluZ19iZWFjb25zKSkgeworCQlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlbmRpbmdfYmVhY29uLCB0bXAsCisJCQkJICZyZWdfcGVuZGluZ19iZWFjb25zLCBsaXN0KSB7CisKKwkJbGlzdF9kZWxfaW5pdCgmcGVuZGluZ19iZWFjb24tPmxpc3QpOworCisJCS8qIEFwcGxpZXMgdGhlIGJlYWNvbiBoaW50IHRvIGN1cnJlbnQgd2lwaHlzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCisJCQl3aXBoeV91cGRhdGVfbmV3X2JlYWNvbigmZHJ2LT53aXBoeSwgcGVuZGluZ19iZWFjb24pOworCisJCS8qIFJlbWVtYmVycyB0aGUgYmVhY29uIGhpbnQgZm9yIG5ldyB3aXBoeXMgb3IgcmVnIGNoYW5nZXMgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcGVuZGluZ19iZWFjb24tPmxpc3QsICZyZWdfYmVhY29uX2xpc3QpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworb3V0OgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCByZWdfdG9kbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJcmVnX3Byb2Nlc3NfcGVuZGluZ19oaW50cygpOworCXJlZ19wcm9jZXNzX3BlbmRpbmdfYmVhY29uX2hpbnRzKCk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksocmVnX3dvcmssIHJlZ190b2RvKTsKKworc3RhdGljIHZvaWQgcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJnJlZ19yZXF1ZXN0c19saXN0KTsKKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOworfQorCisvKiBDb3JlIHJlZ3VsYXRvcnkgaGludCAtLSBoYXBwZW5zIG9uY2UgZHVyaW5nIGNmZzgwMjExX2luaXQoKSAqLworc3RhdGljIGludCByZWd1bGF0b3J5X2hpbnRfY29yZShjb25zdCBjaGFyICphbHBoYTIpCit7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKKworCUJVR19PTihsYXN0X3JlcXVlc3QpOwogCiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAogCQkJICBHRlBfS0VSTkVMKTsKQEAgLTEwNDksNDcgKzE1MzQsODQgQEAKIAogCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKIAlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07Ci0JcmVxdWVzdC0+aW5pdGlhdG9yID0gc2V0X2J5OwotCXJlcXVlc3QtPndpcGh5ID0gd2lwaHk7Ci0JcmVxdWVzdC0+aW50ZXJzZWN0ID0gaW50ZXJzZWN0OwotCXJlcXVlc3QtPmNvdW50cnlfaWVfY2hlY2tzdW0gPSBjb3VudHJ5X2llX2NoZWNrc3VtOwotCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOwogCi0Ja2ZyZWUobGFzdF9yZXF1ZXN0KTsKLQlsYXN0X3JlcXVlc3QgPSByZXF1ZXN0OwotCS8qCi0JICogTm90ZTogV2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgZW5hYmxlZAotCSAqIEFORCBpZiBDUkRBIGlzIE5PVCBwcmVzZW50IG5vdGhpbmcgd2lsbCBoYXBwZW4sIGlmIHNvbWVvbmUKLQkgKiB3YW50cyB0byBib3RoZXIgd2l0aCAxMWQgd2l0aCBPTERfUkVHIHlvdSBjYW4gYWRkIGEgdGltZXIuCi0JICogSWYgYWZ0ZXIgeCBhbW91bnQgb2YgdGltZSBub3RoaW5nIGhhcHBlbnMgeW91IGNhbiBjYWxsOgotCSAqCi0JICogcmV0dXJuIHNldF9yZWdkb20oY291bnRyeV9pZV9yZWdkb21haW4pOwotCSAqCi0JICogdG8gaW50ZXJzZWN0IHdpdGggdGhlIHN0YXRpYyByZAotCSAqLwotCXJldHVybiBjYWxsX2NyZGEoYWxwaGEyKTsKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQorLyogVXNlciBoaW50cyAqLworaW50IHJlZ3VsYXRvcnlfaGludF91c2VyKGNvbnN0IGNoYXIgKmFscGhhMikKIHsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCiAJQlVHX09OKCFhbHBoYTIpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9EUklWRVIsIGFscGhhMiwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CisJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04oIWFscGhhMik7CisJQlVHX09OKCF3aXBoeSk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKworCS8qIE11c3QgaGF2ZSByZWdpc3RlcmVkIHdpcGh5IGZpcnN0ICovCisJQlVHX09OKCF3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSk7CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50KTsKIAogc3RhdGljIGJvb2wgcmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmICh1bmxpa2VseShsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPQorCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAobGlrZWx5KGxhc3RfcmVxdWVzdC0+d2lwaHkgIT0gd2lwaHkpKQorCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAoIXJlcXVlc3Rfd2lwaHkpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChsaWtlbHkocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkpCiAJCXJldHVybiAhY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKTsKLQkvKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQorCS8qCisJICogV2Ugc2hvdWxkIG5vdCBoYXZlIGxldCB0aGVzZSB0aHJvdWdoIGF0IHRoaXMgcG9pbnQsIHRoZXkKIAkgKiBzaG91bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBlYXJsaWVyIGJ5IHRoZSBmaXJzdCBhbHBoYTIgY2hlY2sKLQkgKiBvbiB0aGUgZGV2aWNlICovCisJICogb24gdGhlIGRldmljZQorCSAqLwogCWlmIChXQVJOX09OKCFjb3VudHJ5X2llX2ludGVncml0eV9jaGFuZ2VzKGNvdW50cnlfaWVfY2hlY2tzdW0pKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTEwMywxMSArMTYyNSwxNCBAQAogCWNoYXIgYWxwaGEyWzJdOwogCXUzMiBjaGVja3N1bSA9IDA7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52ID0gRU5WSVJPTl9BTlk7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmICghbGFzdF9yZXF1ZXN0KQorCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0KSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwl9CiAKIAkvKiBJRSBsZW4gbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDIgKi8KIAlpZiAoY291bnRyeV9pZV9sZW4gJiAweDAxKQpAQCAtMTExNiw5ICsxNjQxLDExIEBACiAJaWYgKGNvdW50cnlfaWVfbGVuIDwgSUVFRTgwMjExX0NPVU5UUllfSUVfTUlOX0xFTikKIAkJZ290byBvdXQ7CiAKLQkvKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCisJLyoKKwkgKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCiAJICogY2FsbCBDUkRBIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlIGlmIGEgYmVhY29uIHdhcyByZWNlaXZlZCBiZWZvcmUKLQkgKiB3ZSB3ZXJlIGFibGUgdG8gcHJvY2VzcyB0aGUgbGFzdCByZWd1bGF0b3J5X2hpbnRfMTFkKCkgY2FsbCAqLworCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsCisJICovCiAJaWYgKGNvdW50cnlfaWVfcmVnZG9tYWluKQogCQlnb3RvIG91dDsKIApAQCAtMTEzMCwzMyArMTY1Nyw0NiBAQAogCWVsc2UgaWYgKGNvdW50cnlfaWVbMl0gPT0gJ08nKQogCQllbnYgPSBFTlZJUk9OX09VVERPT1I7CiAKLQkvKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KKwkvKgorCSAqIFdlIHdpbGwgcnVuIHRoaXMgZm9yICpldmVyeSogYmVhY29uIHByb2Nlc3NlZCBmb3IgdGhlIEJTU0lELCBzbwogCSAqIHdlIG9wdGltaXplIGFuIGVhcmx5IGNoZWNrIHRvIGV4aXQgb3V0IGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBkbyBhbnl0aGluZyAqLwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSkpIHsKKwkgKiBkbyBhbnl0aGluZworCSAqLworCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgd2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpIHsKIAkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnZfbGFzdF9pZTsKIAotCQlkcnZfbGFzdF9pZSA9IHdpcGh5X3RvX2RldihsYXN0X3JlcXVlc3QtPndpcGh5KTsKKwkJZHJ2X2xhc3RfaWUgPQorCQkJY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKLQkJLyogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAotCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBICovCi0JCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSA9PSB3aXBoeSkpIHsKLQkJCS8qIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAgKi8KKwkJLyoKKwkJICogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAorCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBCisJCSAqLworCQlpZiAobGlrZWx5KCZkcnZfbGFzdF9pZS0+d2lwaHkgPT0gd2lwaHkpKSB7CisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdGhpcyB3aXBoeSB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCS8qIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAorCQkJLyoKKwkJCSAqIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAogCQkJICogd2FzIHJlY29uZmlndXJlZC4gWFhYOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUKIAkJCSAqIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZHMgYW5kIGdvZXMgdG8gZ29lcwogCQkJICogdG8gYW5vdGhlciBjb3VudHJ5LCBhbmQgdGhlbiBnZXRzIElFcyBmcm9tIGFuCi0JCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyAqLworCQkJICogQVAgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MKKwkJCSAqLwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7Ci0JCQkvKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwICovCisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdHdvIHNlcGFyYXRlIHdpcGh5cyB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKQEAgLTExNzEsMjggKzE3MTEsOTcgQEAKIAlpZiAoIXJkKQogCQlnb3RvIG91dDsKIAotCS8qIFRoaXMgd2lsbCBub3QgaGFwcGVuIHJpZ2h0IG5vdyBidXQgd2UgbGVhdmUgaXQgaGVyZSBmb3IgdGhlCisJLyoKKwkgKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQogCSAqIHRoZSBmdXR1cmUgd2hlbiB3ZSB3YW50IHRvIGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0IGFuZCBoYXZpbmcKIAkgKiB0aGUgdXNlciBtb3ZlIHRvIGFub3RoZXIgY291bnRyeSBhZnRlciBkb2luZyBzbywgb3IgaGF2aW5nIHRoZSB1c2VyCi0JICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuIFRoaXMgaXMgd2h5Ci0JICogdGhpcyBpcyBtYXJrZWQgYXMgbGlrbGV5KCkuIElmIHdlIGhpdCB0aGlzIGJlZm9yZSB3ZSBhZGQgdGhpcyBzdXBwb3J0Ci0JICogd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZiBpdCBhcyBpdCB3b3VsZCBpbmRpY2F0ZSBhIG1pc3Rha2UgaW4gdGhlCi0JICogY3VycmVudCBkZXNpZ24gICovCi0JaWYgKGxpa2VseShXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkpCi0JCWdvdG8gb3V0OworCSAqIG1vdmUgdG8gYW5vdGhlciBBUC4gUmlnaHQgbm93IHdlIGp1c3QgdHJ1c3QgdGhlIGZpcnN0IEFQLgorCSAqCisJICogSWYgd2UgaGl0IHRoaXMgYmVmb3JlIHdlIGFkZCB0aGlzIHN1cHBvcnQgd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZgorCSAqIGl0IGFzIGl0IHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBpbiB0aGUgY3VycmVudCBkZXNpZ24KKwkgKi8KKwlpZiAoV0FSTl9PTihyZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQod2lwaHksIGNoZWNrc3VtKSkpCisJCWdvdG8gZnJlZV9yZF9vdXQ7CiAKLQkvKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KLQkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdCAqLworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlnb3RvIGZyZWVfcmRfb3V0OworCisJLyoKKwkgKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KKwkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdAorCSAqLwogCWNvdW50cnlfaWVfcmVnZG9tYWluID0gcmQ7CiAKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAotCQljb3VudHJ5X2llX3JlZ2RvbWFpbi0+YWxwaGEyLCBjaGVja3N1bSwgZW52KTsKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU7CisJcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOworCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm47CisKK2ZyZWVfcmRfb3V0OgorCWtmcmVlKHJkKTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludF8xMWQpOwogCitzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCit7CisJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fAorCSAgICBmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxMykgfHwKKwkgICAgZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTQpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWlmIChsaWtlbHkoKGJlYWNvbl9jaGFuLT5iZWFjb25fZm91bmQgfHwKKwkgICAgKGJlYWNvbl9jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSB8fAorCSAgICAoYmVhY29uX2NoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICAgIWZyZXFfaXNfY2hhbl8xMl8xM18xNChiZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEpKSkpKQorCQlyZXR1cm4gMDsKKworCXJlZ19iZWFjb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnX2JlYWNvbiksIGdmcCk7CisJaWYgKCFyZWdfYmVhY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IEZvdW5kIG5ldyBiZWFjb24gb24gIgorCQkiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwKKwkJYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxLAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2VuZGlmCisJbWVtY3B5KCZyZWdfYmVhY29uLT5jaGFuLCBiZWFjb25fY2hhbiwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCisKKwkvKgorCSAqIFNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBCSCBvciBhbmQgbm9uLUJIIGNvbnRleHQKKwkgKiB3ZSBtdXN0IHVzZSBzcGluX2xvY2tfYmgoKQorCSAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZWdfYmVhY29uLT5saXN0LCAmcmVnX3BlbmRpbmdfYmVhY29ucyk7CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcmRfcnVsZXMoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTIwOCw4ICsxODE3LDEwIEBACiAJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CiAJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAKLQkJLyogVGhlcmUgbWF5IG5vdCBiZSBkb2N1bWVudGF0aW9uIGZvciBtYXggYW50ZW5uYSBnYWluCi0JCSAqIGluIGNlcnRhaW4gcmVnaW9ucyAqLworCQkvKgorCQkgKiBUaGVyZSBtYXkgbm90IGJlIGRvY3VtZW50YXRpb24gZm9yIG1heCBhbnRlbm5hIGdhaW4KKwkJICogaW4gY2VydGFpbiByZWdpb25zCisJCSAqLwogCQlpZiAocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0KCVkIEtIeiAtICVkIEtIeiBAICVkIEtIeiksICIKIAkJCQkiKCVkIG1CaSwgJWQgbUJtKVxuIiwKQEAgLTEyMzIsMTMgKzE4NDMsMTMgQEAKIHsKIAogCWlmIChpc19pbnRlcnNlY3RlZF9hbHBoYTIocmQtPmFscGhhMikpIHsKLQkJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7Ci0JCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5KSB7Ci0JCQkJd2lwaHkgPSBsYXN0X3JlcXVlc3QtPndpcGh5OwotCQkJCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCQkJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKKwkJCQlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisJCQlpZiAoZHJ2KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCiAJCQkJCSJkb21haW4gdXBkYXRlZCBieSBBUCB0bzogJWMlY1xuIiwKIAkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKQEAgLTEyNDgsNyArMTg1OSw3IEBACiAJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgotCQkJCQkiaW50ZXJzZWN0ZWQ6IFxuIik7CisJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJfSBlbHNlIGlmIChpc193b3JsZF9yZWdkb20ocmQtPmFscGhhMikpCiAJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBXb3JsZCByZWd1bGF0b3J5ICIKIAkJCSJkb21haW4gdXBkYXRlZDpcbiIpOwpAQCAtMTMwNCw3ICsxOTE1LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQgPSBOVUxMOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gTlVMTDsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CiAJLyogU29tZSBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0ICovCiAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKHJkLT5hbHBoYTIpKSB7CkBAIC0xMzIxLDIzICsxOTMyLDI3IEBACiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAorCS8qCisJICogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAogCSAqIHJkIGlzIG5vbiBzdGF0aWMgKGl0IG1lYW5zIENSREEgd2FzIHByZXNlbnQgYW5kIHdhcyB1c2VkIGxhc3QpCi0JICogYW5kIHRoZSBwZW5kaW5nIHJlcXVlc3QgY2FtZSBpbiBmcm9tIGEgY291bnRyeSBJRSAqLwotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJLyogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgotCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQgKi8KKwkgKiBhbmQgdGhlIHBlbmRpbmcgcmVxdWVzdCBjYW1lIGluIGZyb20gYSBjb3VudHJ5IElFCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCS8qCisJCSAqIElmIHNvbWVvbmUgZWxzZSBhc2tlZCB1cyB0byBjaGFuZ2UgdGhlIHJkIGxldHMgb25seSBib3RoZXIKKwkJICogY2hlY2tpbmcgaWYgdGhlIGFscGhhMiBjaGFuZ2VzIGlmIENSREEgd2FzIGFscmVhZHkgY2FsbGVkCisJCSAqLwogCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKLQkJICAgICFyZWdkb21fY2hhbmdlZChyZC0+YWxwaGEyKSkKKwkJICAgICFyZWdkb21fY2hhbmdlcyhyZC0+YWxwaGEyKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdpcGh5ID0gbGFzdF9yZXF1ZXN0LT53aXBoeTsKLQotCS8qIE5vdyBsZXRzIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4sIHVwZGF0ZSBhbGwgZHJpdmVyIGNoYW5uZWxzCisJLyoKKwkgKiBOb3cgbGV0cyBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLCB1cGRhdGUgYWxsIGRyaXZlciBjaGFubmVscwogCSAqIGFuZCBmaW5hbGx5IGluZm9ybSB0aGVtIG9mIHdoYXQgd2UgaGF2ZSBkb25lLCBpbiBjYXNlIHRoZXkgd2FudAogCSAqIHRvIHJldmlldyBvciBhZGp1c3QgdGhlaXIgb3duIHNldHRpbmdzIGJhc2VkIG9uIHRoZWlyIG93bgotCSAqIGludGVybmFsIEVFUFJPTSBkYXRhICovCisJICogaW50ZXJuYWwgRUVQUk9NIGRhdGEKKwkgKi8KIAogCWlmIChXQVJOX09OKCFyZWdfaXNfdmFsaWRfcmVxdWVzdChyZC0+YWxwaGEyKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM0OSw3ICsxOTY0LDI4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCiAJaWYgKCFsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkgeworCQlpbnQgcjsKKworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJcmVzZXRfcmVnZG9tYWlucygpOworCQkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIEZvciBhIGRyaXZlciBoaW50LCBsZXRzIGNvcHkgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZQorCQkgKiBkcml2ZXIgd2FudGVkIHRvIHRoZSB3aXBoeSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisJCSAqLworCisJCUJVR19PTihyZXF1ZXN0X3dpcGh5LT5yZWdkKTsKKworCQlyID0gcmVnX2NvcHlfcmVnZCgmcmVxdWVzdF93aXBoeS0+cmVnZCwgcmQpOworCQlpZiAocikKKwkJCXJldHVybiByOworCiAJCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIAkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CiAJCXJldHVybiAwOwpAQCAtMTM1NywxNCArMTk5MywyMiBAQAogCiAJLyogSW50ZXJzZWN0aW9uIHJlcXVpcmVzIGEgYml0IG1vcmUgd29yayAqLwogCi0JaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewogCiAJCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKIAkJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFdlIGNhbiB0cmFzaCB3aGF0IENSREEgcHJvdmlkZWQgbm93ICovCi0JCWtmcmVlKHJkKTsKKwkJLyoKKwkJICogV2UgY2FuIHRyYXNoIHdoYXQgQ1JEQSBwcm92aWRlZCBub3cuCisJCSAqIEhvd2V2ZXIgaWYgYSBkcml2ZXIgcmVxdWVzdGVkIHRoaXMgc3BlY2lmaWMgcmVndWxhdG9yeQorCQkgKiBkb21haW4gd2Uga2VlcCBpdCBmb3IgaXRzIHByaXZhdGUgdXNlCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikKKwkJCXJlcXVlc3Rfd2lwaHktPnJlZ2QgPSByZDsKKwkJZWxzZQorCQkJa2ZyZWUocmQpOworCiAJCXJkID0gTlVMTDsKIAogCQlyZXNldF9yZWdkb21haW5zKCk7CkBAIC0xMzc5LDI5ICsyMDIzLDI2IEBACiAJICovCiAKIAlCVUdfT04oIWNvdW50cnlfaWVfcmVnZG9tYWluKTsKKwlCVUdfT04ocmQgPT0gY291bnRyeV9pZV9yZWdkb21haW4pOwogCi0JaWYgKHJkICE9IGNvdW50cnlfaWVfcmVnZG9tYWluKSB7Ci0JCS8qIEludGVyc2VjdCB3aGF0IENSREEgcmV0dXJuZWQgYW5kIG91ciB3aGF0IHdlCi0JCSAqIGhhZCBidWlsdCBmcm9tIHRoZSBDb3VudHJ5IElFIHJlY2VpdmVkICovCisJLyoKKwkgKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQorCSAqIGhhZCBidWlsdCBmcm9tIHRoZSBDb3VudHJ5IElFIHJlY2VpdmVkCisJICovCiAKLQkJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CisJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKLQkJcmVnX2NvdW50cnlfaWVfcHJvY2Vzc19kZWJ1ZyhyZCwgY291bnRyeV9pZV9yZWdkb21haW4sCi0JCQlpbnRlcnNlY3RlZF9yZCk7CisJcmVnX2NvdW50cnlfaWVfcHJvY2Vzc19kZWJ1ZyhyZCwKKwkJCQkgICAgIGNvdW50cnlfaWVfcmVnZG9tYWluLAorCQkJCSAgICAgaW50ZXJzZWN0ZWRfcmQpOwogCi0JCWtmcmVlKGNvdW50cnlfaWVfcmVnZG9tYWluKTsKLQkJY291bnRyeV9pZV9yZWdkb21haW4gPSBOVUxMOwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgd291bGQgaGFwcGVuIHdoZW4gQ1JEQSB3YXMgbm90IHByZXNlbnQgYW5kCi0JCSAqIE9MRF9SRUdVTEFUT1JZIHdhcyBlbmFibGVkLiBXZSBpbnRlcnNlY3Qgb3VyIENvdW50cnkKLQkJICogSUUgcmQgYW5kIHdoYXQgd2FzIHNldCBvbiBjZmc4MDIxMSBvcmlnaW5hbGx5ICovCi0JCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKLQl9CisJa2ZyZWUoY291bnRyeV9pZV9yZWdkb21haW4pOworCWNvdW50cnlfaWVfcmVnZG9tYWluID0gTlVMTDsKIAogCWlmICghaW50ZXJzZWN0ZWRfcmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlkcnYgPSB3aXBoeV90b19kZXYocmVxdWVzdF93aXBoeSk7CiAKIAlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzBdID0gcmQtPmFscGhhMlswXTsKIAlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzFdID0gcmQtPmFscGhhMlsxXTsKQEAgLTE0MTksMTMgKzIwNjAsMTcgQEAKIH0KIAogCi0vKiBVc2UgdGhpcyBjYWxsIHRvIHNldCB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4gQ29uZmxpY3RzIHdpdGgKKy8qCisgKiBVc2UgdGhpcyBjYWxsIHRvIHNldCB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4gQ29uZmxpY3RzIHdpdGgKICAqIG11bHRpcGxlIGRyaXZlcnMgY2FuIGJlIGlyb25lZCBvdXQgbGF0ZXIuIENhbGxlciBtdXN0J3ZlIGFscmVhZHkKLSAqIGttYWxsb2MnZCB0aGUgcmQgc3RydWN0dXJlLiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX2Rydl9tdXRleCAqLworICoga21hbGxvYydkIHRoZSByZCBzdHJ1Y3R1cmUuIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfbXV0ZXgKKyAqLwogaW50IHNldF9yZWdkb20oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCWludCByOwogCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCS8qIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgdXBkYXRlIHRoZSB3aXBoeXMsIHRoaXMgaXMgZG9uZSBiZWxvdyAqLwogCXIgPSBfX3NldF9yZWdkb20ocmQpOwogCWlmIChyKSB7CkBAIC0xNDQyLDU2ICsyMDg3LDkwIEBACiAKIAlwcmludF9yZWdkb21haW4oY2ZnODAyMTFfcmVnZG9tYWluKTsKIAorCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CisKIAlyZXR1cm4gcjsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9kcnZfbXV0ZXggKi8KKy8qIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfbXV0ZXggKi8KIHZvaWQgcmVnX2RldmljZV9yZW1vdmUoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdCB8fCAhbGFzdF9yZXF1ZXN0LT53aXBoeSkKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlrZnJlZSh3aXBoeS0+cmVnZCk7CisJaWYgKCFsYXN0X3JlcXVlc3QgfHwgIXJlcXVlc3Rfd2lwaHkpCiAJCXJldHVybjsKLQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkKKwlpZiAocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkKIAkJcmV0dXJuOwotCWxhc3RfcmVxdWVzdC0+d2lwaHkgPSBOVUxMOworCWxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4ID0gV0lQSFlfSURYX1NUQUxFOwogCWxhc3RfcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBFTlZJUk9OX0FOWTsKIH0KIAogaW50IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlyZWdfcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJlZ3VsYXRvcnkiLCAwLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKHJlZ19wZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmVnX3BkZXYpOwogCisJc3Bpbl9sb2NrX2luaXQoJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwogI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IHN0YXRpY19yZWdkb20oaWVlZTgwMjExX3JlZ2RvbSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogVXNpbmcgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9cbiIpOwogCXByaW50X3JlZ2RvbWFpbl9pbmZvKGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0JLyogVGhlIG9sZCBjb2RlIHN0aWxsIHJlcXVlc3RzIGZvciBhIG5ldyByZWdkb21haW4gYW5kIGlmCisJLyoKKwkgKiBUaGUgb2xkIGNvZGUgc3RpbGwgcmVxdWVzdHMgZm9yIGEgbmV3IHJlZ2RvbWFpbiBhbmQgaWYKIAkgKiB5b3UgaGF2ZSBDUkRBIHlvdSBnZXQgaXQgdXBkYXRlZCwgb3RoZXJ3aXNlIHlvdSBnZXQKLQkgKiBzdHVjayB3aXRoIHRoZSBzdGF0aWMgdmFsdWVzLiBXZSBpZ25vcmUgIkVVIiBjb2RlIGFzCi0JICogdGhhdCBpcyBub3QgYSB2YWxpZCBJU08gLyBJRUMgMzE2NiBhbHBoYTIgKi8KLQlpZiAoaWVlZTgwMjExX3JlZ2RvbVswXSAhPSAnRScgfHwgaWVlZTgwMjExX3JlZ2RvbVsxXSAhPSAnVScpCi0JCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwKLQkJCQkJaWVlZTgwMjExX3JlZ2RvbSwgMCwgRU5WSVJPTl9BTlkpOworCSAqIHN0dWNrIHdpdGggdGhlIHN0YXRpYyB2YWx1ZXMuIFNpbmNlICJFVSIgaXMgbm90IGEgdmFsaWQKKwkgKiBJU08gLyBJRUMgMzE2NiBhbHBoYTIgY29kZSB3ZSBjYW4ndCBleHBlY3QgdXNlcnBhY2UgdG8KKwkgKiBnaXZlIHVzIGEgcmVndWxhdG9yeSBkb21haW4gZm9yIGl0LiBXZSBuZWVkIGxhc3RfcmVxdWVzdAorCSAqIGluaWl0YWxpemVkIHRob3VnaCBzbyBsZXRzIGp1c3Qgc2VuZCBhIHJlcXVlc3Qgd2hpY2ggd2UKKwkgKiBrbm93IHdpbGwgYmUgaWdub3JlZC4uLiB0aGlzIGNyYXAgd2lsbCBiZSByZW1vdmVkIG9uY2UKKwkgKiBPTERfUkVHIGRpZXMuCisJICovCisJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoaWVlZTgwMjExX3JlZ2RvbSk7CiAjZWxzZQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKIAotCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwgIjAwIiwgMCwgRU5WSVJPTl9BTlkpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGNhbGxpbmcgQ1JEQSBmYWlsZWQgLSAiCi0JCSAgICAgICAidW5hYmxlIHRvIHVwZGF0ZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiwgIgotCQkgICAgICAgInVzaW5nIHN0YXRpYyBkZWZpbml0aW9uXG4iKTsKKwllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbmRpZgorCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJcmV0dXJuIGVycjsKKwkJLyoKKwkJICogTi5CLiBrb2JqZWN0X3VldmVudF9lbnYoKSBjYW4gZmFpbCBtYWlubHkgZm9yIHdoZW4gd2UncmUgb3V0CisJCSAqIG1lbW9yeSB3aGljaCBpcyBoYW5kbGVkIGFuZCBwcm9wYWdhdGVkIGFwcHJvcHJpYXRlbHkgYWJvdmUKKwkJICogYnV0IGl0IGNhbiBhbHNvIGZhaWwgZHVyaW5nIGEgbmV0bGlua19icm9hZGNhc3QoKSBvciBkdXJpbmcKKwkJICogZWFybHkgYm9vdCBmb3IgY2FsbF91c2VybW9kZWhlbHBlcigpLiBGb3Igbm93IHRyZWF0IHRoZXNlCisJCSAqIGVycm9ycyBhcyBub24tZmF0YWwuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBrb2JqZWN0X3VldmVudF9lbnYoKSB3YXMgdW5hYmxlICIKKwkJCSJ0byBjYWxsIENSREEgZHVyaW5nIGluaXQiKTsKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisJCS8qIFdlIHdhbnQgdG8gZmluZCBvdXQgZXhhY3RseSB3aHkgd2hlbiBkZWJ1Z2dpbmcgKi8KKwkJV0FSTl9PTihlcnIpOworI2VuZGlmCisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcmVndWxhdG9yeV9leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCwgKnRtcDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbiwgKmJ0bXA7CisKKwljYW5jZWxfd29ya19zeW5jKCZyZWdfd29yayk7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXNldF9yZWdkb21haW5zKCk7CiAKQEAgLTE1MDIsNSArMjE4MSwzMyBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocmVnX3BkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyZWdfYmVhY29uLT5saXN0KTsKKwkJCWtmcmVlKHJlZ19iZWFjb24pOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfYmVhY29uX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19iZWFjb25fbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX3JlcXVlc3QsIHRtcCwKKwkJCQkJICZyZWdfcmVxdWVzdHNfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKwkJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmgKaW5kZXggYTc2ZWEzZi4uZTM3ODI5YSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5oCisrKyBiL25ldC93aXJlbGVzcy9yZWcuaApAQCAtMSw5ICsxLDEzIEBACiAjaWZuZGVmIF9fTkVUX1dJUkVMRVNTX1JFR19ICiAjZGVmaW5lIF9fTkVUX1dJUkVMRVNTX1JFR19ICiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY2ZnODAyMTFfcmVnZG9tYWluOworCiBib29sIGlzX3dvcmxkX3JlZ2RvbShjb25zdCBjaGFyICphbHBoYTIpOwogYm9vbCByZWdfaXNfdmFsaWRfcmVxdWVzdChjb25zdCBjaGFyICphbHBoYTIpOwogCitpbnQgcmVndWxhdG9yeV9oaW50X3VzZXIoY29uc3QgY2hhciAqYWxwaGEyKTsKKwogdm9pZCByZWdfZGV2aWNlX3JlbW92ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKIAogaW50IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKTsKQEAgLTExLDM0ICsxNSwyNSBAQAogCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpOwogCi1lbnVtIGVudmlyb25tZW50X2NhcCB7Ci0JRU5WSVJPTl9BTlksCi0JRU5WSVJPTl9JTkRPT1IsCi0JRU5WSVJPTl9PVVRET09SLAotfTsKLQotCiAvKioKLSAqIF9fcmVndWxhdG9yeV9oaW50IC0gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAd2lwaHk6IGlmIHRoZSBoaW50IGNvbWVzIGZyb20gY291bnRyeSBpbmZvcm1hdGlvbiBmcm9tIGFuIEFQLCB0aGlzCi0gKglpcyByZXF1aXJlZCB0byBiZSBzZXQgdG8gdGhlIHdpcGh5IHRoYXQgcmVjZWl2ZWQgdGhlIGluZm9ybWF0aW9uCi0gKiBAYWxwaGEyOiB0aGUgSVNPL0lFQyAzMTY2IGFscGhhMiBiZWluZyBjbGFpbWVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgotICoJc2hvdWxkIGJlIGluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHByb2Nlc3NlZCBjb3VudHJ5IElFLCBzZXQgdGhpcyB0byAwCi0gKiAJaWYgdGhlIGhpbnQgZGlkIG5vdCBjb21lIGZyb20gYSBjb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IHRoZSBlbnZpcm9ubWVudCB0aGUgSUUgdG9sZCB1cyB3ZSBhcmUgaW4sICVFTlZJUk9OXyoKKyAqIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24gLSBoaW50cyBhIGJlYWNvbiB3YXMgZm91bmQgb24gYSBjaGFubmVsCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2hlcmUgdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBiZWFjb25fY2hhbjogdGhlIGNoYW5uZWwgb24gd2hpY2ggdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKICAqCi0gKiBUaGUgV2lyZWxlc3Mgc3Vic3lzdGVtIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlCi0gKiB3aGF0IGl0IGJlbGlldmVzIHNob3VsZCBiZSB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBieSBnaXZpbmcgaXQgYW4KLSAqIElTTy9JRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGl0IGtub3dzIGl0cyByZWd1bGF0b3J5IGRvbWFpbiBzaG91bGQgYmUKLSAqIGluLgorICogVGhpcyBpbmZvcm1zIHRoZSB3aXJlbGVzcyBjb3JlIHRoYXQgYSBiZWFjb24gZnJvbSBhbiBBUCB3YXMgZm91bmQgb24KKyAqIHRoZSBjaGFubmVsIHByb3ZpZGVkLiBUaGlzIGFsbG93cyB0aGUgd2lyZWxlc3MgY29yZSB0byBtYWtlIGVkdWNhdGVkCisgKiBndWVzc2VzIG9uIHJlZ3VsYXRvcnkgdG8gaGVscCB3aXRoIHdvcmxkIHJvYW1pbmcuIFRoaXMgaXMgb25seSB1c2VkIGZvcgorICogd29ybGQgcm9hbWluZyAtLSB3aGVuIHdlIGRvIG5vdCBrbm93IG91ciBjdXJyZW50IGxvY2F0aW9uLiBUaGlzIGlzCisgKiBvbmx5IHVzZWZ1bCBvbiBjaGFubmVscyAxMiwgMTMgYW5kIDE0IG9uIHRoZSAyIEdIeiBiYW5kIGFzIGNoYW5uZWxzCisgKiAxLTExIGFyZSBhbHJlYWR5IGVuYWJsZWQgYnkgdGhlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluOyBhbmQgb24KKyAqIG5vbi1yYWRhciA1IEdIeiBjaGFubmVscy4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgYWxsIHdlbnQgZmluZSwgJS1FQUxSRUFEWSBpZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGhhZAotICogYWxyZWFkeSBiZWVuIHNldCBvciBvdGhlciBzdGFuZGFyZCBlcnJvciBjb2Rlcy4KLSAqCisgKiBEcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcywgY2ZnODAyMTEgd2lsbCBkbyBpdCBmb3IgYWZ0ZXIgYSBzY2FuCisgKiBvbiBhIG5ld2x5IGZvdW5kIEJTUy4KICAqLwotZXh0ZXJuIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICAgICBjb25zdCBjaGFyICphbHBoYTIsIHUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJICAgICBlbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2Vudik7CitpbnQgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmJlYWNvbl9jaGFuLAorCQkJCQlnZnBfdCBnZnApOwogCiAjZW5kaWYgIC8qIF9fTkVUX1dJUkVMRVNTX1JFR19IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTAwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMCwwICsxLDg5MSBAQAorLyoKKyAqIGNmZzgwMjExIHNjYW4gcmVzdWx0IGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IDIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgIm5sODAyMTEuaCIKKworI2RlZmluZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFCSgxMCAqIEhaKQorCit2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworI2VuZGlmCisKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcmVxdWVzdC0+aWZpZHgpOworCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCVdBUk5fT04ocmVxdWVzdCAhPSB3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSk7CisJd2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KS0+c2Nhbl9yZXEgPSBOVUxMOworCisJaWYgKGFib3J0ZWQpCisJCW5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKwllbHNlCisJCW5sODAyMTFfc2VuZF9zY2FuX2RvbmUod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwlpZiAoIWFib3J0ZWQpIHsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCX0KKyNlbmRpZgorCisJZGV2X3B1dChkZXYpOworCisgb3V0OgorCWtmcmVlKHJlcXVlc3QpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zY2FuX2RvbmUpOworCitzdGF0aWMgdm9pZCBic3NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJlZik7CisJaWYgKGJzcy0+cHViLmZyZWVfcHJpdikKKwkJYnNzLT5wdWIuZnJlZV9wcml2KCZic3MtPnB1Yik7CisJa2ZyZWUoYnNzKTsKK30KKworLyogbXVzdCBob2xkIGRldi0+YnNzX2xvY2shICovCit2b2lkIGNmZzgwMjExX2Jzc19hZ2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2VjcykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisJdW5zaWduZWQgbG9uZyBhZ2VfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoYWdlX3NlY3MgKiBNU0VDX1BFUl9TRUMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWJzcy0+dHMgLT0gYWdlX2ppZmZpZXM7CisJfQorfQorCisvKiBtdXN0IGhvbGQgZGV2LT5ic3NfbG9jayEgKi8KK3ZvaWQgY2ZnODAyMTFfYnNzX2V4cGlyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICp0bXA7CisJYm9vbCBleHBpcmVkID0gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmIChic3MtPmhvbGQgfHwKKwkJICAgICF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+dHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKKwkJcmJfZXJhc2UoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7CisJCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlleHBpcmVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoZXhwaXJlZCkKKwkJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOworfQorCitzdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4gPiAyICYmIGllc1swXSAhPSBudW0pIHsKKwkJbGVuIC09IGllc1sxXSArIDI7CisJCWllcyArPSBpZXNbMV0gKyAyOworCX0KKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGxlbiA8IDIgKyBpZXNbMV0pCisJCXJldHVybiBOVUxMOworCXJldHVybiBpZXM7Cit9CisKK3N0YXRpYyBpbnQgY21wX2llcyh1OCBudW0sIHU4ICppZXMxLCBzaXplX3QgbGVuMSwgdTggKmllczIsIHNpemVfdCBsZW4yKQoreworCWNvbnN0IHU4ICppZTEgPSBmaW5kX2llKG51bSwgaWVzMSwgbGVuMSk7CisJY29uc3QgdTggKmllMiA9IGZpbmRfaWUobnVtLCBpZXMyLCBsZW4yKTsKKwlpbnQgcjsKKworCWlmICghaWUxICYmICFpZTIpCisJCXJldHVybiAwOworCWlmICghaWUxKQorCQlyZXR1cm4gLTE7CisKKwlyID0gbWVtY21wKGllMSArIDIsIGllMiArIDIsIG1pbihpZTFbMV0sIGllMlsxXSkpOworCWlmIChyID09IDAgJiYgaWUxWzFdICE9IGllMlsxXSkKKwkJcmV0dXJuIGllMlsxXSAtIGllMVsxXTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGJvb2wgaXNfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsCisJCSAgIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3sKKwljb25zdCB1OCAqc3NpZGllOworCisJaWYgKGJzc2lkICYmIGNvbXBhcmVfZXRoZXJfYWRkcihhLT5ic3NpZCwgYnNzaWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXNzaWQpCisJCXJldHVybiB0cnVlOworCisJc3NpZGllID0gZmluZF9pZShXTEFOX0VJRF9TU0lELAorCQkJIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKCFzc2lkaWUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3NpZGllWzFdICE9IHNzaWRfbGVuKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIG1lbWNtcChzc2lkaWUgKyAyLCBzc2lkLCBzc2lkX2xlbikgPT0gMDsKK30KKworc3RhdGljIGJvb2wgaXNfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLAorCQkgICAgY29uc3QgdTggKm1lc2hpZCwgc2l6ZV90IG1lc2hpZGxlbiwKKwkJICAgIGNvbnN0IHU4ICptZXNoY2ZnKQoreworCWNvbnN0IHU4ICppZTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWUgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCisJCSAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoIWllKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGllWzFdICE9IG1lc2hpZGxlbikKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZW1jbXAoaWUgKyAyLCBtZXNoaWQsIG1lc2hpZGxlbikpCisJCXJldHVybiBmYWxzZTsKKworCWllID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChpZVsxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElnbm9yZSBtZXNoIGNhcGFiaWxpdHkgKGxhc3QgdHdvIGJ5dGVzIG9mIHRoZSBJRSkgd2hlbgorCSAqIGNvbXBhcmluZyBzaW5jZSB0aGF0IG1heSBkaWZmZXIgYmV0d2VlbiBzdGF0aW9ucyB0YWtpbmcKKwkgKiBwYXJ0IGluIHRoZSBzYW1lIG1lc2guCisJICovCisJcmV0dXJuIG1lbWNtcChpZSArIDIsIG1lc2hjZmcsIElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4gLSAyKSA9PSAwOworfQorCitzdGF0aWMgaW50IGNtcF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwKKwkJICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYikKK3sKKwlpbnQgcjsKKworCWlmIChhLT5jaGFubmVsICE9IGItPmNoYW5uZWwpCisJCXJldHVybiBiLT5jaGFubmVsLT5jZW50ZXJfZnJlcSAtIGEtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJciA9IG1lbWNtcChhLT5ic3NpZCwgYi0+YnNzaWQsIEVUSF9BTEVOKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkgeworCQlyID0gY21wX2llcyhXTEFOX0VJRF9NRVNIX0lELAorCQkJICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBiLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlyZXR1cm4gY21wX2llcyhXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCSAgICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYi0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYi0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwl9CisKKwlyZXR1cm4gY21wX2llcyhXTEFOX0VJRF9TU0lELAorCQkgICAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICAgIGItPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Cit9CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgY29uc3QgdTggKmJzc2lkLAorCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgdTE2IGNhcGFfbWFzaywgdTE2IGNhcGFfdmFsKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICpyZXMgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoKGJzcy0+cHViLmNhcGFiaWxpdHkgJiBjYXBhX21hc2spICE9IGNhcGFfdmFsKQorCQkJY29udGludWU7CisJCWlmIChjaGFubmVsICYmIGJzcy0+cHViLmNoYW5uZWwgIT0gY2hhbm5lbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfYnNzKCZic3MtPnB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgeworCQkJcmVzID0gYnNzOworCQkJa3JlZl9nZXQoJnJlcy0+cmVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9nZXRfYnNzKTsKKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X21lc2goc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGNmZykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNoYW5uZWwgJiYgYnNzLT5wdWIuY2hhbm5lbCAhPSBjaGFubmVsKQorCQkJY29udGludWU7CisJCWlmIChpc19tZXNoKCZic3MtPnB1YiwgbWVzaGlkLCBtZXNoaWRsZW4sIG1lc2hjZmcpKSB7CisJCQlyZXMgPSBic3M7CisJCQlrcmVmX2dldCgmcmVzLT5yZWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmcmVzLT5wdWI7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2dldF9tZXNoKTsKKworCitzdGF0aWMgdm9pZCByYl9pbnNlcnRfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJmRldi0+YnNzX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0YnNzOworCWludCBjbXA7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCXRic3MgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJibik7CisKKwkJY21wID0gY21wX2JzcygmYnNzLT5wdWIsICZ0YnNzLT5wdWIpOworCisJCWlmIChXQVJOX09OKCFjbXApKSB7CisJCQkvKiB3aWxsIHNvcnQgb2YgbGVhayB0aGlzIEJTUyAqLworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGNtcCA8IDApCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZic3MtPnJibiwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKK3JiX2ZpbmRfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSBkZXYtPmJzc190cmVlLnJiX25vZGU7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCWludCByOworCisJd2hpbGUgKG4pIHsKKwkJYnNzID0gcmJfZW50cnkobiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmJuKTsKKwkJciA9IGNtcF9ic3MoJnJlcy0+cHViLCAmYnNzLT5wdWIpOworCisJCWlmIChyID09IDApCisJCQlyZXR1cm4gYnNzOworCQllbHNlIGlmIChyIDwgMCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlCisJCQluID0gbi0+cmJfcmlnaHQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKK2NmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMsCisJCSAgICBib29sIG92ZXJ3cml0ZSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpmb3VuZCA9IE5VTEw7CisJY29uc3QgdTggKm1lc2hpZCwgKm1lc2hjZmc7CisKKwkvKgorCSAqIFRoZSByZWZlcmVuY2UgdG8gInJlcyIgaXMgZG9uYXRlZCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCisJaWYgKFdBUk5fT04oIXJlcy0+cHViLmNoYW5uZWwpKSB7CisJCWtyZWZfcHV0KCZyZXMtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXMtPnRzID0gamlmZmllczsKKworCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5wdWIuYnNzaWQpKSB7CisJCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCisJCW1lc2hpZCA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJCW1lc2hjZmcgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAorCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQlpZiAoIW1lc2hpZCB8fCAhbWVzaGNmZyB8fAorCQkgICAgbWVzaGNmZ1sxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKSB7CisJCQkvKiBib2d1cyBtZXNoICovCisJCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWZvdW5kID0gcmJfZmluZF9ic3MoZGV2LCByZXMpOworCisJaWYgKGZvdW5kICYmIG92ZXJ3cml0ZSkgeworCQlsaXN0X3JlcGxhY2UoJmZvdW5kLT5saXN0LCAmcmVzLT5saXN0KTsKKwkJcmJfcmVwbGFjZV9ub2RlKCZmb3VuZC0+cmJuLCAmcmVzLT5yYm4sCisJCQkJJmRldi0+YnNzX3RyZWUpOworCQlrcmVmX3B1dCgmZm91bmQtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlmb3VuZCA9IHJlczsKKwl9IGVsc2UgaWYgKGZvdW5kKSB7CisJCWtyZWZfZ2V0KCZmb3VuZC0+cmVmKTsKKwkJZm91bmQtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSByZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWw7CisJCWZvdW5kLT5wdWIudHNmID0gcmVzLT5wdWIudHNmOworCQlmb3VuZC0+cHViLnNpZ25hbCA9IHJlcy0+cHViLnNpZ25hbDsKKwkJZm91bmQtPnB1Yi5jYXBhYmlsaXR5ID0gcmVzLT5wdWIuY2FwYWJpbGl0eTsKKwkJZm91bmQtPnRzID0gcmVzLT50czsKKwkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7CisJfSBlbHNlIHsKKwkJLyogdGhpcyAiY29uc3VtZXMiIHRoZSByZWZlcmVuY2UgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcmVzLT5saXN0LCAmZGV2LT5ic3NfbGlzdCk7CisJCXJiX2luc2VydF9ic3MoZGV2LCByZXMpOworCQlmb3VuZCA9IHJlczsKKwl9CisKKwlkZXYtPmJzc19nZW5lcmF0aW9uKys7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJa3JlZl9nZXQoJmZvdW5kLT5yZWYpOworCXJldHVybiBmb3VuZDsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqCitjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzOworCXNpemVfdCBpZWxlbiA9IGxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkgICAgICB1LnByb2JlX3Jlc3AudmFyaWFibGUpOworCWJvb2wgb3ZlcndyaXRlOworCXNpemVfdCBwcml2c3ogPSB3aXBoeS0+YnNzX3ByaXZfc2l6ZTsKKworCWlmIChXQVJOX09OKHdpcGh5LT5zaWduYWxfdHlwZSA9PSBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDICYmCisJICAgICAgICAgICAgKHNpZ25hbCA8IDAgfHwgc2lnbmFsID4gMTAwKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKFdBUk5fT04oIW1nbXQgfHwgIXdpcGh5IHx8CisJCSAgICBsZW4gPCBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUucHJvYmVfcmVzcC52YXJpYWJsZSkpKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpICsgcHJpdnN6ICsgaWVsZW4sIGdmcCk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KHJlcy0+cHViLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pOworCXJlcy0+cHViLmNoYW5uZWwgPSBjaGFubmVsOworCXJlcy0+cHViLnNpZ25hbCA9IHNpZ25hbDsKKwlyZXMtPnB1Yi50c2YgPSBsZTY0X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AudGltZXN0YW1wKTsKKwlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuYmVhY29uX2ludCk7CisJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvKTsKKwkvKiBwb2ludCB0byBhZnRlciB0aGUgcHJpdmF0ZSBhcmVhICovCisJcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPSAodTggKilyZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJbWVtY3B5KHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGllbGVuKTsKKwlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKworCWtyZWZfaW5pdCgmcmVzLT5yZWYpOworCisJb3ZlcndyaXRlID0gaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcywgb3ZlcndyaXRlKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzLT5wdWIuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCisJCXJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24od2lwaHksIGNoYW5uZWwsIGdmcCk7CisKKwkvKiBjZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi8KKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKTsKKwordm9pZCBjZmc4MDIxMV9wdXRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoIXB1YikKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKwlrcmVmX3B1dCgmYnNzLT5yZWYsIGJzc19yZWxlYXNlKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfcHV0X2Jzcyk7CisKK3ZvaWQgY2ZnODAyMTFfdW5saW5rX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWlmIChXQVJOX09OKCFwdWIpKQorCQlyZXR1cm47CisKKwlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZGVsKCZic3MtPmxpc3QpOworCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOworCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJa3JlZl9wdXQoJmJzcy0+cmVmLCBic3NfcmVsZWFzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3VubGlua19ic3MpOworCit2b2lkIGNmZzgwMjExX2hvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoIXB1YikKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKwlic3MtPmhvbGQgPSB0cnVlOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9ob2xkX2Jzcyk7CisKK3ZvaWQgY2ZnODAyMTFfdW5ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJaWYgKCFwdWIpCisJCXJldHVybjsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihwdWIsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7CisJYnNzLT5ob2xkID0gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3VuaG9sZF9ic3MpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAoraW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXE7CisJaW50IGksIGVyciwgbl9jaGFubmVscyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKworCWlmIChJU19FUlIocmRldikpCisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCisJaWYgKHJkZXYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQorCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisKKwljcmVxID0ga3phbGxvYyhzaXplb2YoKmNyZXEpICsgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSArCisJCSAgICAgICBuX2NoYW5uZWxzICogc2l6ZW9mKHZvaWQgKiksCisJCSAgICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWNyZXEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlcS0+d2lwaHkgPSB3aXBoeTsKKwljcmVxLT5pZmlkeCA9IGRldi0+aWZpbmRleDsKKwljcmVxLT5zc2lkcyA9ICh2b2lkICopKGNyZXEgKyAxKTsKKwljcmVxLT5jaGFubmVscyA9ICh2b2lkICopKGNyZXEtPnNzaWRzICsgMSk7CisJY3JlcS0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJY3JlcS0+bl9zc2lkcyA9IDE7CisKKwkvKiBhbGwgY2hhbm5lbHMgKi8KKwlpID0gMDsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWludCBqOworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCWNyZXEtPmNoYW5uZWxzW2ldID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQlpKys7CisJCX0KKwl9CisKKwkvKiB0cmFuc2xhdGUgc2NhbiByZXF1ZXN0ICovCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSB7CisJCXdyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisKKwkJaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJCWlmICh3cmVxLT5lc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtY3B5KGNyZXEtPnNzaWRzWzBdLnNzaWQsIHdyZXEtPmVzc2lkLCB3cmVxLT5lc3NpZF9sZW4pOworCQkJY3JlcS0+c3NpZHNbMF0uc3NpZF9sZW4gPSB3cmVxLT5lc3NpZF9sZW47CisJCX0KKwkJaWYgKHdyZXEtPnNjYW5fdHlwZSA9PSBJV19TQ0FOX1RZUEVfUEFTU0lWRSkKKwkJCWNyZXEtPm5fc3NpZHMgPSAwOworCX0KKworCXJkZXYtPnNjYW5fcmVxID0gY3JlcTsKKwllcnIgPSByZGV2LT5vcHMtPnNjYW4od2lwaHksIGRldiwgY3JlcSk7CisJaWYgKGVycikgeworCQlyZGV2LT5zY2FuX3JlcSA9IE5VTEw7CisJCWtmcmVlKGNyZXEpOworCX0KKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihyZGV2KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X3Npd3NjYW4pOworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLAorCQkJCSAgIGNoYXIgKipjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQoreworCXU4ICpwb3MsICplbmQsICpuZXh0OworCXN0cnVjdCBpd19ldmVudCBpd2U7CisKKwlpZiAoIWJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHMgfHwKKwkgICAgIWJzcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIG5lZWRlZCwgZnJhZ21lbnQgdGhlIElFcyBidWZmZXIgKGF0IElFIGJvdW5kYXJpZXMpIGludG8gc2hvcnQKKwkgKiBlbm91Z2ggZnJhZ21lbnRzIHRvIGZpdCBpbnRvIElXX0dFTkVSSUNfSUVfTUFYIG9jdGV0IG1lc3NhZ2VzLgorCSAqLworCXBvcyA9IGJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHM7CisJZW5kID0gcG9zICsgYnNzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CisKKwl3aGlsZSAoZW5kIC0gcG9zID4gSVdfR0VORVJJQ19JRV9NQVgpIHsKKwkJbmV4dCA9IHBvcyArIDIgKyBwb3NbMV07CisJCXdoaWxlIChuZXh0ICsgMiArIG5leHRbMV0gLSBwb3MgPCBJV19HRU5FUklDX0lFX01BWCkKKwkJCW5leHQgPSBuZXh0ICsgMiArIG5leHRbMV07CisKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXh0IC0gcG9zOworCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAorCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKKworCQlwb3MgPSBuZXh0OworCX0KKworCWlmIChlbmQgPiBwb3MpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmQgLSBwb3M7CisJCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCisJCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZWxhcHNlZF9qaWZmaWVzX21zZWNzKHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzOworCisJaWYgKGVuZCA+PSBzdGFydCkKKwkJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kIC0gc3RhcnQpOworCisJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kICsgKE1BWF9KSUZGWV9PRkZTRVQgLSBzdGFydCkgKyAxKTsKK30KKworc3RhdGljIGNoYXIgKgoraWVlZTgwMjExX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgY2hhciAqY3VycmVudF9ldiwKKwkgICAgICBjaGFyICplbmRfYnVmKQoreworCXN0cnVjdCBpd19ldmVudCBpd2U7CisJdTggKmJ1ZiwgKmNmZywgKnA7CisJdTggKmllID0gYnNzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHM7CisJaW50IHJlbSA9IGJzcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywgaSwgc2lnOworCWJvb2wgaXNtZXNoID0gZmFsc2U7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5wdWIuYnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9BRERSX0xFTik7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5wdWIuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCWl3ZS51LmZyZXEuZSA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSAgSVdfRVZfRlJFUV9MRU4pOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJaXdlLnUuZnJlcS5tID0gYnNzLT5wdWIuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJaXdlLnUuZnJlcS5lID0gNjsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9GUkVRX0xFTik7CisKKwlpZiAod2lwaHktPnNpZ25hbF90eXBlICE9IENGRzgwMjExX1NJR05BTF9UWVBFX05PTkUpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZRVUFMOworCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQgfAorCQkJCSAgICAgSVdfUVVBTF9OT0lTRV9JTlZBTElEIHwKKwkJCQkgICAgIElXX1FVQUxfUVVBTF9VUERBVEVEOworCQlzd2l0Y2ggKHdpcGh5LT5zaWduYWxfdHlwZSkgeworCQljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKKwkJCXNpZyA9IGJzcy0+cHViLnNpZ25hbCAvIDEwMDsKKwkJCWl3ZS51LnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpd2UudS5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CisJCQlpZiAoc2lnIDwgLTExMCkJCS8qIHJhdGhlciBiYWQgKi8KKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQkvKiBwZXJmZWN0ICovCisJCQkJc2lnID0gLTQwOworCQkJLyogd2lsbCBnaXZlIGEgcmFuZ2Ugb2YgMCAuLiA3MCAqLworCQkJaXdlLnUucXVhbC5xdWFsID0gc2lnICsgMTEwOworCQkJYnJlYWs7CisJCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgorCQkJaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+cHViLnNpZ25hbDsKKwkJCS8qIHdpbGwgZ2l2ZSByYW5nZSAwIC4uIDEwMCAqLworCQkJaXdlLnUucXVhbC5xdWFsID0gYnNzLT5wdWIuc2lnbmFsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJYnJlYWs7CisJCX0KKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwl9CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsICIiKTsKKworCXdoaWxlIChyZW0gPj0gMikgeworCQkvKiBpbnZhbGlkIGRhdGEgKi8KKwkJaWYgKGllWzFdID4gcmVtIC0gMikKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoaWVbMF0pIHsKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgorCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGllICsgMik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0lEOgorCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGllICsgMik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0NPTkZJRzoKKwkJCWlzbWVzaCA9IHRydWU7CisJCQlpZiAoaWVbMV0gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikKKwkJCQlicmVhazsKKwkJCWJ1ZiA9IGttYWxsb2MoNTAsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFidWYpCisJCQkJYnJlYWs7CisJCQljZmcgPSBpZSArIDI7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCQlzcHJpbnRmKGJ1ZiwgIk1lc2ggbmV0d29yayAodmVyc2lvbiAlZCkiLCBjZmdbMF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIFByb3RvY29sIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxXSwgY2ZnWzJdLCBjZmdbM10sCisJCQkJCQkJY2ZnWzRdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBNZXRyaWMgSUQ6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzVdLCBjZmdbNl0sIGNmZ1s3XSwKKwkJCQkJCQljZmdbOF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIkNvbmdlc3Rpb24gQ29udHJvbCBNb2RlIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s5XSwgY2ZnWzEwXSwKKwkJCQkJCQljZmdbMTFdLCBjZmdbMTJdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJDaGFubmVsIFByZWNlZGVuY2U6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzEzXSwgY2ZnWzE0XSwKKwkJCQkJCQljZmdbMTVdLCBjZmdbMTZdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJa2ZyZWUoYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisJCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCisJCQlwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKworCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgaWVbMV07IGkrKykgeworCQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPQorCQkJCQkoKGllW2kgKyAyXSAmIDB4N2YpICogNTAwMDAwKTsKKwkJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKKwkJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJCQl9CisJCQljdXJyZW50X2V2ID0gcDsKKwkJCWJyZWFrOworCQl9CisJCXJlbSAtPSBpZVsxXSArIDI7CisJCWllICs9IGllWzFdICsgMjsKKwl9CisKKwlpZiAoYnNzLT5wdWIuY2FwYWJpbGl0eSAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpCisJICAgIHx8IGlzbWVzaCkgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmIChpc21lc2gpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOworCQllbHNlIGlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7CisJaWYgKGJ1ZikgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJc3ByaW50ZihidWYsICJ0c2Y9JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJzcy0+cHViLnRzZikpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCXNwcmludGYoYnVmLCAiIExhc3QgYmVhY29uOiAldW1zIGFnbyIsCisJCQllbGFwc2VkX2ppZmZpZXNfbXNlY3MoYnNzLT50cykpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKwkJa2ZyZWUoYnVmKTsKKwl9CisKKwlpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKGluZm8sICZic3MtPnB1YiwgJmN1cnJlbnRfZXYsIGVuZF9idWYpOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpjdXJyZW50X2V2ID0gYnVmOworCWNoYXIgKmVuZF9idWYgPSBidWYgKyBsZW47CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfZXhwaXJlKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwkJCXJldHVybiAtRTJCSUc7CisJCX0KKwkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9ic3MoJmRldi0+d2lwaHksIGluZm8sIGJzcywKKwkJCQkJICAgY3VycmVudF9ldiwgZW5kX2J1Zik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKK30KKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCWludCByZXM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTkVURE9XTjsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXYtPmlmaW5kZXgpOworCisJaWYgKElTX0VSUihyZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisKKwlpZiAocmRldi0+c2Nhbl9yZXEpIHsKKwkJcmVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhyZGV2LCBpbmZvLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKKwlkYXRhLT5sZW5ndGggPSAwOworCWlmIChyZXMgPj0gMCkgeworCQlkYXRhLT5sZW5ndGggPSByZXM7CisJCXJlcyA9IDA7CisJfQorCisgb3V0OgorCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdzY2FuKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwppbmRleCA3OWEzODI4Li5lZmUzYzVjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYworKysgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwpAQCAtMzEsNyArMzEsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10ICJcbiIsIGRldl90b19yZGV2KGRldiktPm1lbWJlcik7CVwKIH0KIAotU0hPV19GTVQoaW5kZXgsICIlZCIsIGlkeCk7CitTSE9XX0ZNVChpbmRleCwgIiVkIiwgd2lwaHlfaWR4KTsKIFNIT1dfRk1UKG1hY2FkZHJlc3MsICIlcE0iLCB3aXBoeS5wZXJtX2FkZHIpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaWVlZTgwMjExX2Rldl9hdHRyc1tdID0gewpAQCAtNTUsNiArNTUsNDEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHdpcGh5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gZGV2X3RvX3JkZXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXJkZXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCisJaWYgKHJkZXYtPm9wcy0+c3VzcGVuZCkgeworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gcmRldi0+b3BzLT5zdXNwZW5kKCZyZGV2LT53aXBoeSk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3aXBoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRldl90b19yZGV2KGRldik7CisJaW50IHJldCA9IDA7CisKKwkvKiBBZ2Ugc2NhbiByZXN1bHRzIHdpdGggdGltZSBzcGVudCBpbiBzdXNwZW5kICovCisJc3Bpbl9sb2NrX2JoKCZyZGV2LT5ic3NfbG9jayk7CisJY2ZnODAyMTFfYnNzX2FnZShyZGV2LCBnZXRfc2Vjb25kcygpIC0gcmRldi0+c3VzcGVuZF9hdCk7CisJc3Bpbl91bmxvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKworCWlmIChyZGV2LT5vcHMtPnJlc3VtZSkgeworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gcmRldi0+b3BzLT5yZXN1bWUoJnJkZXYtPndpcGh5KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdHJ1Y3QgY2xhc3MgaWVlZTgwMjExX2NsYXNzID0gewogCS5uYW1lID0gImllZWU4MDIxMSIsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC02Myw2ICs5OCw4IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAkuZGV2X3VldmVudCA9IHdpcGh5X3VldmVudCwKICNlbmRpZgorCS5zdXNwZW5kID0gd2lwaHlfc3VzcGVuZCwKKwkucmVzdW1lID0gd2lwaHlfcmVzdW1lLAogfTsKIAogaW50IHdpcGh5X3N5c2ZzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IGU3NmNjMjguLjQ4N2NkZDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtOSw3ICs5LDcgQEAKIAogc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCSAgICB1NjQgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKQorCQkJICAgIHUzMiBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyZXN1bHQgPSAmc2JhbmQtPmJpdHJhdGVzWzBdOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1OGU0ODlmLi4wZmQxZGI2IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtNjYsNiArNjYsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgdmlmX3BhcmFtcyB2aWZwYXJhbXM7CiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOworCWludCByZXQ7CiAKIAlpZiAoIXdkZXYpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTk2LDEwICs5NywxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAodHlwZSA9PSB3ZGV2LT5pZnR5cGUpCisJCXJldHVybiAwOworCiAJbWVtc2V0KCZ2aWZwYXJhbXMsIDAsIHNpemVvZih2aWZwYXJhbXMpKTsKIAotCXJldHVybiByZGV2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYod2Rldi0+d2lwaHksIGRldi0+aWZpbmRleCwgdHlwZSwKLQkJCQkJICAgICAgTlVMTCwgJnZpZnBhcmFtcyk7CisJcmV0ID0gcmRldi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKHdkZXYtPndpcGh5LCBkZXYtPmlmaW5kZXgsIHR5cGUsCisJCQkJCSAgICAgTlVMTCwgJnZpZnBhcmFtcyk7CisJV0FSTl9PTighcmV0ICYmIHdkZXYtPmlmdHlwZSAhPSB0eXBlKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfc2l3bW9kZSk7CiAKQEAgLTEzNywzICsxNDQsMTAwIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfZ2l3bW9kZSk7CisKKworaW50IGNmZzgwMjExX3dleHRfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCWludCBjID0gMDsKKworCWlmICghd2RldikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMTsKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gNDsKKworCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCisJc3dpdGNoICh3ZGV2LT53aXBoeS0+c2lnbmFsX3R5cGUpIHsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX05PTkU6CisJCWJyZWFrOworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgorCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDcwOworCQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDM1OworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDEwMDsKKwkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCWJyZWFrOworCX0KKworCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IHJhbmdlLT5tYXhfcXVhbC5sZXZlbCAvIDI7CisJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gcmFuZ2UtPm1heF9xdWFsLm5vaXNlIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IHJhbmdlLT5tYXhfcXVhbC51cGRhdGVkOworCisJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CisJCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7CisKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kICsrKSB7CisJCWludCBpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IHdkZXYtPndpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlpZiAoIXNiYW5kKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzICYmIGMgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5pID0KKwkJCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCQkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEpOworCQkJCXJhbmdlLT5mcmVxW2NdLm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5lID0gNjsKKwkJCQljKys7CisJCQl9CisJCX0KKwl9CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IGM7CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjOworCisJSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOworCisJcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdyYW5nZSk7CmRpZmYgLS1naXQgYS9uZXQveDI1L2FmX3gyNS5jIGIvbmV0L3gyNS9hZl94MjUuYwppbmRleCA5ZmM1YjAyLi5lZDgwYWY4IDEwMDY0NAotLS0gYS9uZXQveDI1L2FmX3gyNS5jCisrKyBiL25ldC94MjUvYWZfeDI1LmMKQEAgLTk1MSwxMCArOTUxLDggQEAKIAkvKgogCSAqCUluY29taW5nIENhbGwgVXNlciBEYXRhLgogCSAqLwotCWlmIChza2ItPmxlbiA+PSAwKSB7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBtYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkZGF0YSwgc2tiLT5sZW4pOwotCQltYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkbGVuZ3RoID0gc2tiLT5sZW47Ci0JfQorCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBtYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkZGF0YSwgc2tiLT5sZW4pOworCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKIAogCXNrLT5za19hY2tfYmFja2xvZysrOwogCkBAIC0xMDM3LDYgKzEwMzUsMTIgQEAKIAkJc3gyNS5zeDI1X2FkZHIgICA9IHgyNS0+ZGVzdF9hZGRyOwogCX0KIAorCS8qIFNhbml0eSBjaGVjayB0aGUgcGFja2V0IHNpemUgKi8KKwlpZiAobGVuID4gNjU1MzUpIHsKKwkJcmMgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKwogCVNPQ0tfREVCVUcoc2ssICJ4MjVfc2VuZG1zZzogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKIAogCS8qIEJ1aWxkIGEgcGFja2V0ICovCkBAIC0xMTIyLDggKzExMjYsOSBAQAogCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCiAJCXNrYl9xdWV1ZV90YWlsKCZ4MjUtPmludGVycnVwdF9vdXRfcXVldWUsIHNrYik7CiAJZWxzZSB7Ci0JCWxlbiA9IHgyNV9vdXRwdXQoc2ssIHNrYik7Ci0JCWlmIChsZW4gPCAwKQorCQlyYyA9IHgyNV9vdXRwdXQoc2ssIHNrYik7CisJCWxlbiA9IHJjOworCQlpZiAocmMgPCAwKQogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCWVsc2UgaWYgKHgyNS0+cWJpdGluY2wpCiAJCQlsZW4rKzsKQEAgLTE2MDgsOCArMTYxMyw4IEBACiAKIFNPQ0tPUFNfV1JBUCh4MjVfcHJvdG8sIEFGX1gyNSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgeDI1X3BhY2tldF90eXBlID0gewotCS50eXBlID0JX19jb25zdGFudF9odG9ucyhFVEhfUF9YMjUpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX1gyNSksCiAJLmZ1bmMgPQl4MjVfbGFwYl9yZWNlaXZlX2ZyYW1lLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IDYyYTU0MjUuLjgyMjcxNzIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTE2MTUsNyArMTYxNSw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJbGlzdF9kZWwoJndhbGstPmFsbCk7Ci0Jc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfZG9uZSk7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZTA2MzY1NzcuLjk3OTYxOTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIC1EIktCVUlMRF9NT0ROQU1FPUtCVUlMRF9TVFIoJChjYWxsIG5hbWUtZml4LCQobW9kbmFtZSkpKSIpCiAKICNoYXNoIHZhbHVlcwotaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCitpZmRlZiBDT05GSUdfRFlOQU1JQ19ERUJVRwogZGVidWdfZmxhZ3MgPSAtRCJERUJVR19IQVNIPSQoc2hlbGwgLi9zY3JpcHRzL2Jhc2ljL2hhc2ggZGpiMiAkKEBEKSQobW9kbmFtZSkpIlwKICAgICAgICAgICAgICAgLUQiREVCVUdfSEFTSDI9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCByNSAkKEBEKSQobW9kbmFtZSkpIgogZWxzZQpAQCAtMTg2LDMgKzE4NiwxNyBAQAogY21kX2d6aXAgPSBnemlwIC1mIC05IDwgJDwgPiAkQAogCiAKKyMgQnppcDIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQnppcDIgZG9lcyBub3QgaW5jbHVkZSBzaXplIGluIGZpbGUuLi4gc28gd2UgaGF2ZSB0byBmYWtlIHRoYXQKK3NpemVfYXBwZW5kPSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvYmluX3NpemUKKworcXVpZXRfY21kX2J6aXAyID0gQlpJUDIgICAgJEAKK2NtZF9iemlwMiA9IChiemlwMiAtOSA8ICQ8ICYmICQoc2l6ZV9hcHBlbmQpICQ8KSA+ICRAIHx8IChybSAtZiAkQCA7IGZhbHNlKQorCisjIEx6bWEKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3F1aWV0X2NtZF9sem1hID0gTFpNQSAgICAkQAorY21kX2x6bWEgPSAobHptYSAtOSAtYyAkPCAmJiAkKHNpemVfYXBwZW5kKSAkPCkgPiRAIHx8IChybSAtZiAkQCA7IGZhbHNlKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iaW5fc2l6ZSBiL3NjcmlwdHMvYmluX3NpemUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlMWIzNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvYmluX3NpemUKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK2lmIFsgJCMgPSAwIF0gOyB0aGVuCisgICBlY2hvIFVzYWdlOiAkMCBmaWxlCitmaQorCitzaXplX2RlYz1gc3RhdCAtYyAiJXMiICQxYAorc2l6ZV9oZXhfZWNob19zdHJpbmc9YHByaW50ZiAiJTA4eCIgJHNpemVfZGVjIHwKKyAgICAgc2VkICdzL1woLi5cKVwoLi5cKVwoLi5cKVwoLi5cKS9cXFxceFw0XFxcXHhcM1xcXFx4XDJcXFxceFwxL2cnYAorL2Jpbi9lY2hvIC1uZSAkc2l6ZV9oZXhfZWNob19zdHJpbmcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2NjLXg4Nl8zMi1oYXMtc3RhY2stcHJvdGVjdG9yLnNoIGIvc2NyaXB0cy9nY2MteDg2XzMyLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0OTNkYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZ2NjLXg4Nl8zMi1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK2VjaG8gImludCBmb28odm9pZCkgeyBjaGFyIFhbMjAwXTsgcmV0dXJuIDM7IH0iIHwgJCogLVMgLXhjIC1jIC1PMCAtZnN0YWNrLXByb3RlY3RvciAtIC1vIC0gMj4gL2Rldi9udWxsIHwgZ3JlcCAtcSAiJWdzIgoraWYgWyAiJD8iIC1lcSAiMCIgXSA7IHRoZW4KKwllY2hvIHkKK2Vsc2UKKwllY2hvIG4KK2ZpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2djYy14ODZfNjQtaGFzLXN0YWNrLXByb3RlY3Rvci5zaCBiL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCmluZGV4IDMyNWMwYTEuLmFmYWVjNjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCisrKyBiL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCkBAIC0xLDYgKzEsOCBAQAogIyEvYmluL3NoCiAKLWVjaG8gImludCBmb28odm9pZCkgeyBjaGFyIFhbMjAwXTsgcmV0dXJuIDM7IH0iIHwgJDEgLVMgLXhjIC1jIC1PMCAtbWNtb2RlbD1rZXJuZWwgLWZzdGFjay1wcm90ZWN0b3IgLSAtbyAtIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXEgIiVncyIKK2VjaG8gImludCBmb28odm9pZCkgeyBjaGFyIFhbMjAwXTsgcmV0dXJuIDM7IH0iIHwgJCogLVMgLXhjIC1jIC1PMCAtbWNtb2RlbD1rZXJuZWwgLWZzdGFjay1wcm90ZWN0b3IgLSAtbyAtIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXEgIiVncyIKIGlmIFsgIiQ/IiAtZXEgIjAiIF0gOyB0aGVuCi0JZWNobyAkMgorCWVjaG8geQorZWxzZQorCWVjaG8gbgogZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKaW5kZXggNWYzNDE1Zi4uM2VlYThmMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKKysrIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKQEAgLTUsNyArNSw3IEBACiAjIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTAogIwogIyBHZW5lcmF0ZSBhIGNwaW8gcGFja2VkIGluaXRyYW1mcy4gSXQgdXNlcyBnZW5faW5pdF9jcGlvIHRvIGdlbmVyYXRlCi0jIHRoZSBjcGlvIGFyY2hpdmUsIGFuZCBnemlwIHRvIHBhY2sgaXQuCisjIHRoZSBjcGlvIGFyY2hpdmUsIGFuZCB0aGVuIGNvbXByZXNzZXMgaXQuCiAjIFRoZSBzY3JpcHQgbWF5IGFsc28gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW5wdXRmaWxlIHVzZWQgZm9yIGdlbl9pbml0X2NwaW8KICMgVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGdlbl9pbml0X2NwaW8gaXMgbG9jYXRlZCBpbiB1c3IvIGRpcmVjdG9yeQogCkBAIC0xNiw4ICsxNiw4IEBACiBjYXQgPDwgRU9GCiBVc2FnZToKICQwIFstbyA8ZmlsZT5dIFstdSA8dWlkPl0gWy1nIDxnaWQ+XSB7LWQgfCA8Y3Bpb19zb3VyY2U+fSAuLi4KLQktbyA8ZmlsZT4gICAgICBDcmVhdGUgZ3ppcHBlZCBpbml0cmFtZnMgZmlsZSBuYW1lZCA8ZmlsZT4gdXNpbmcKLQkJICAgICAgIGdlbl9pbml0X2NwaW8gYW5kIGd6aXAKKwktbyA8ZmlsZT4gICAgICBDcmVhdGUgY29tcHJlc3NlZCBpbml0cmFtZnMgZmlsZSBuYW1lZCA8ZmlsZT4gdXNpbmcKKwkJICAgICAgIGdlbl9pbml0X2NwaW8gYW5kIGNvbXByZXNzb3IgZGVwZW5kaW5nIG9uIHRoZSBleHRlbnNpb24KIAktdSA8dWlkPiAgICAgICBVc2VyIElEIHRvIG1hcCB0byB1c2VyIElEIDAgKHJvb3QpLgogCQkgICAgICAgPHVpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT4gaXMgYQogCQkgICAgICAgZGlyZWN0b3J5LiAgInNxdWFzaCIgZm9yY2VzIGFsbCBmaWxlcyB0byB1aWQgMC4KQEAgLTIyNSw2ICsyMjUsNyBAQAogb3V0cHV0PSIvZGV2L3N0ZG91dCIKIG91dHB1dF9maWxlPSIiCiBpc19jcGlvX2NvbXByZXNzZWQ9Citjb21wcj0iZ3ppcCAtOSAtZiIKIAogYXJnPSIkMSIKIGNhc2UgIiRhcmciIGluCkBAIC0yMzMsMTEgKzIzNCwxNSBAQAogCQllY2hvICJkZXBzX2luaXRyYW1mcyA6PSBcXCIKIAkJc2hpZnQKIAkJOzsKLQkiLW8iKQkjIGdlbmVyYXRlIGd6aXBwZWQgY3BpbyBpbWFnZSBuYW1lZCAkMQorCSItbyIpCSMgZ2VuZXJhdGUgY29tcHJlc3NlZCBjcGlvIGltYWdlIG5hbWVkICQxCiAJCXNoaWZ0CiAJCW91dHB1dF9maWxlPSIkMSIKIAkJY3Bpb19saXN0PSIkKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3Bpb2xpc3QuWFhYWFhYKSIKIAkJb3V0cHV0PSR7Y3Bpb19saXN0fQorCQllY2hvICIkb3V0cHV0X2ZpbGUiIHwgZ3JlcCAtcSAiXC5neiQiICYmIGNvbXByPSJnemlwIC05IC1mIgorCQllY2hvICIkb3V0cHV0X2ZpbGUiIHwgZ3JlcCAtcSAiXC5iejIkIiAmJiBjb21wcj0iYnppcDIgLTkgLWYiCisJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmx6bWEkIiAmJiBjb21wcj0ibHptYSAtOSAtZiIKKwkJZWNobyAiJG91dHB1dF9maWxlIiB8IGdyZXAgLXEgIlwuY3BpbyQiICYmIGNvbXByPSJjYXQiCiAJCXNoaWZ0CiAJCTs7CiBlc2FjCkBAIC0yNzQsNyArMjc5LDcgQEAKIAllc2FjCiBkb25lCiAKLSMgSWYgb3V0cHV0X2ZpbGUgaXMgc2V0IHdlIHdpbGwgZ2VuZXJhdGUgY3BpbyBhcmNoaXZlIGFuZCBnemlwIGl0CisjIElmIG91dHB1dF9maWxlIGlzIHNldCB3ZSB3aWxsIGdlbmVyYXRlIGNwaW8gYXJjaGl2ZSBhbmQgY29tcHJlc3MgaXQKICMgd2UgYXJlIGNhcmVmdWxsIHRvIGRlbGV0ZSB0bXAgZmlsZXMKIGlmIFsgISAteiAke291dHB1dF9maWxlfSBdOyB0aGVuCiAJaWYgWyAteiAke2NwaW9fZmlsZX0gXTsgdGhlbgpAQCAtMjg3LDcgKzI5Miw4IEBACiAJaWYgWyAiJHtpc19jcGlvX2NvbXByZXNzZWR9IiA9ICJjb21wcmVzc2VkIiBdOyB0aGVuCiAJCWNhdCAke2NwaW9fdGZpbGV9ID4gJHtvdXRwdXRfZmlsZX0KIAllbHNlCi0JCWNhdCAke2NwaW9fdGZpbGV9IHwgZ3ppcCAtZiAtOSAtID4gJHtvdXRwdXRfZmlsZX0KKwkJKGNhdCAke2NwaW9fdGZpbGV9IHwgJHtjb21wcn0gIC0gPiAke291dHB1dF9maWxlfSkgXAorCQl8fCAocm0gLWYgJHtvdXRwdXRfZmlsZX0gOyBmYWxzZSkKIAlmaQogCVsgLXogJHtjcGlvX2ZpbGV9IF0gJiYgcm0gJHtjcGlvX3RmaWxlfQogZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbCBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbAppbmRleCBkYjMwZmFjLi41NmY5MGE0IDEwMDY0NAotLS0gYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKKysrIGIvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCkBAIC0zOCw3ICszOCw3IEBACiAJCSZjaGVja19hc21fdHlwZXMoKTsKIAkJJmNoZWNrX3NpemV0eXBlcygpOwogCQkmY2hlY2tfcHJvdG90eXBlcygpOwotCQkmY2hlY2tfY29uZmlnKCk7CisJCSMgRHJvcHBlZCBmb3Igbm93LiBUb28gbXVjaCBub2lzZSAmY2hlY2tfY29uZmlnKCk7CiAJfQogCWNsb3NlIEZIOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IDRlZWE2MGIuLmEzMzQ0MjggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTcxMCw2ICs3MTAsMTQgQEAKIAlzdHJjYXQoYWxpYXMsICI6Iik7CiAJcmV0dXJuIDE7CiB9CisKK3N0YXRpYyBpbnQgZG9fcGxhdGZvcm1fZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKK3sKKwlzcHJpbnRmKGFsaWFzLCBQTEFURk9STV9NT0RVTEVfUFJFRklYICIlcyIsIGlkLT5uYW1lKTsKKwlyZXR1cm4gMTsKK30KKwogLyogSWdub3JlIGFueSBwcmVmaXgsIGVnLiBzb21lIGFyY2hpdGVjdHVyZXMgcHJlcGVuZCBfICovCiBzdGF0aWMgaW5saW5lIGludCBzeW1faXMoY29uc3QgY2hhciAqc3ltYm9sLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtODQ5LDYgKzg1NywxMCBAQAogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKIAkJCSBzaXplb2Yoc3RydWN0IGRtaV9zeXN0ZW1faWQpLCAiZG1pIiwKIAkJCSBkb19kbWlfZW50cnksIG1vZCk7CisJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9wbGF0Zm9ybV9kZXZpY2VfdGFibGUiKSkKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQpLCAicGxhdGZvcm0iLAorCQkJIGRvX3BsYXRmb3JtX2VudHJ5LCBtb2QpOwogCWZyZWUoemVyb3MpOwogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggODg5MjE2MS4uN2U2MjMwMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtNDE1LDggKzQxNSw5IEBACiAJCWNvbnN0IGNoYXIgKnNlY3N0cmluZ3MKIAkJCT0gKHZvaWQgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OwogCQljb25zdCBjaGFyICpzZWNuYW1lOworCQlpbnQgbm9iaXRzID0gc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9OT0JJVFM7CiAKLQkJaWYgKHNlY2hkcnNbaV0uc2hfb2Zmc2V0ID4gaW5mby0+c2l6ZSkgeworCQlpZiAoIW5vYml0cyAmJiBzZWNoZHJzW2ldLnNoX29mZnNldCA+IGluZm8tPnNpemUpIHsKIAkJCWZhdGFsKCIlcyBpcyB0cnVuY2F0ZWQuIHNlY2hkcnNbaV0uc2hfb2Zmc2V0PSVsdSA+ICIKIAkJCSAgICAgICJzaXplb2YoKmhyZCk9JXp1XG4iLCBmaWxlbmFtZSwKIAkJCSAgICAgICh1bnNpZ25lZCBsb25nKXNlY2hkcnNbaV0uc2hfb2Zmc2V0LApAQCAtNDI1LDYgKzQyNiw4IEBACiAJCX0KIAkJc2VjbmFtZSA9IHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWU7CiAJCWlmIChzdHJjbXAoc2VjbmFtZSwgIi5tb2RpbmZvIikgPT0gMCkgeworCQkJaWYgKG5vYml0cykKKwkJCQlmYXRhbCgiJXMgaGFzIE5PQklUUyAubW9kaW5mb1xuIiwgZmlsZW5hbWUpOwogCQkJaW5mby0+bW9kaW5mbyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CiAJCQlpbmZvLT5tb2RpbmZvX2xlbiA9IHNlY2hkcnNbaV0uc2hfc2l6ZTsKIAkJfSBlbHNlIGlmIChzdHJjbXAoc2VjbmFtZSwgIl9fa3N5bXRhYiIpID09IDApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9LY29uZmlnIGIvc2VjdXJpdHkvS2NvbmZpZwppbmRleCA5NDM4NTM1Li5iYjI0NDc3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9LY29uZmlnCisrKyBiL3NlY3VyaXR5L0tjb25maWcKQEAgLTU1LDcgKzU1LDggQEAKIAlib29sICJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbSIKIAloZWxwCiAJICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5Ci0JICB0aGUgVFBNIGJpb3MgY2hhcmFjdGVyIGRyaXZlci4gIEl0IGlzIG5vdCB1c2VkIGJ5IFNFTGludXggb3IgU01BQ0suCisJICB0aGUgVFBNIGJpb3MgY2hhcmFjdGVyIGRyaXZlciBhbmQgSU1BLCBhbiBpbnRlZ3JpdHkgcHJvdmlkZXIuICBJdCBpcworCSAgbm90IHVzZWQgYnkgU0VMaW51eCBvciBTTUFDSy4KIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KIApAQCAtMTM0LDYgKzEzNSw5IEBACiAKIHNvdXJjZSBzZWN1cml0eS9zZWxpbnV4L0tjb25maWcKIHNvdXJjZSBzZWN1cml0eS9zbWFjay9LY29uZmlnCitzb3VyY2Ugc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKKworc291cmNlIHNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L01ha2VmaWxlIGIvc2VjdXJpdHkvTWFrZWZpbGUKaW5kZXggYzA1YzEyNy4uZmE3NzAyMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmotJChDT05GSUdfS0VZUykJCQkrPSBrZXlzLwogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCSs9IHNlbGludXgKIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrCitzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKSAgICAgICAgKz0gdG9tb3lvCiAKICMgYWx3YXlzIGVuYWJsZSBkZWZhdWx0IGNhcGFiaWxpdGllcwogb2JqLXkJCSs9IGNvbW1vbmNhcC5vCkBAIC0xNSw1ICsxNiwxMCBAQAogIyBNdXN0IHByZWNlZGUgY2FwYWJpbGl0eS5vIGluIG9yZGVyIHRvIHN0YWNrIHByb3Blcmx5Lgogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCQkrPSBzZWxpbnV4L2J1aWx0LWluLm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrL2J1aWx0LWluLm8KK29iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pCQkrPSB0b21veW8vYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHKQkJKz0gcm9vdF9wbHVnLm8KIG9iai0kKENPTkZJR19DR1JPVVBfREVWSUNFKQkJKz0gZGV2aWNlX2Nncm91cC5vCisKKyMgT2JqZWN0IGludGVncml0eSBmaWxlIGxpc3RzCitzdWJkaXItJChDT05GSUdfSU1BKQkJCSs9IGludGVncml0eS9pbWEKK29iai0kKENPTkZJR19JTUEpCQkJKz0gaW50ZWdyaXR5L2ltYS9idWlsdC1pbi5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKaW5kZXggYzU0NWJkMS4uMjFiNmNlYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCisrKyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwpAQCAtNjIwLDEwICs2MjAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjYXBfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spCi17Ci19Ci0KIHN0YXRpYyBpbnQgY2FwX3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CiAJcmV0dXJuIDA7CkBAIC0xMDE0LDcgKzEwMTAsNiBAQAogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9jb25uZWN0KTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfbGlzdGVuKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfYWNjZXB0KTsKLQlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfcG9zdF9hY2NlcHQpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9zZW5kbXNnKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfcmVjdm1zZyk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgc29ja2V0X2dldHNvY2tuYW1lKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lub2RlLmMgYi9zZWN1cml0eS9pbm9kZS5jCmluZGV4IDAwN2VmMjUuLmYzYjkxYmYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2lub2RlLmMKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtMjAyLDEyICsyMDIsMTEgQEAKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBkZW50cnkgaWYgaXQgc3VjY2VlZHMuICBUaGlzCiAgKiBwb2ludGVyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBzZWN1cml0eWZzX3JlbW92ZSgpIGZ1bmN0aW9uIHdoZW4gdGhlIGZpbGUgaXMKICAqIHRvIGJlIHJlbW92ZWQgKG5vIGF1dG9tYXRpYyBjbGVhbnVwIGhhcHBlbnMgaWYgeW91ciBtb2R1bGUgaXMgdW5sb2FkZWQsCi0gKiB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUpLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCAlTlVMTCBpcyByZXR1cm5lZC4KKyAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZSkuICBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybgorICogdGhlIGVyb3JyIHZhbHVlICh2aWEgRVJSX1BUUikuCiAgKgogICogSWYgc2VjdXJpdHlmcyBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCB0aGUgdmFsdWUgJS1FTk9ERVYgaXMKLSAqIHJldHVybmVkLiAgSXQgaXMgbm90IHdpc2UgdG8gY2hlY2sgZm9yIHRoaXMgdmFsdWUsIGJ1dCByYXRoZXIsIGNoZWNrIGZvcgotICogJU5VTEwgb3IgISVOVUxMIGluc3RlYWQgYXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciAjaWZkZWYgaW4gdGhlIGNhbGxpbmcKLSAqIGNvZGUuCisgKiByZXR1cm5lZC4KICAqLwogc3RydWN0IGRlbnRyeSAqc2VjdXJpdHlmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkOTc2NAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwpAQCAtMCwwICsxLDU1IEBACisjIElCTSBJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlCisjCitjb25maWcgSU1BCisJYm9vbCAiSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpIgorCWRlcGVuZHMgb24gQUNQSQorCXNlbGVjdCBTRUNVUklUWUZTCisJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fSE1BQworCXNlbGVjdCBDUllQVE9fTUQ1CisJc2VsZWN0IENSWVBUT19TSEExCisJc2VsZWN0IFRDR19UUE0KKwlzZWxlY3QgVENHX1RJUworCWhlbHAKKwkgIFRoZSBUcnVzdGVkIENvbXB1dGluZyBHcm91cChUQ0cpIHJ1bnRpbWUgSW50ZWdyaXR5CisJICBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKSBtYWludGFpbnMgYSBsaXN0IG9mIGhhc2gKKwkgIHZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcywKKwkgIGFzIHRoZXkgYXJlIHJlYWQgb3IgZXhlY3V0ZWQuIElmIGFuIGF0dGFja2VyIG1hbmFnZXMKKwkgIHRvIGNoYW5nZSB0aGUgY29udGVudHMgb2YgYW4gaW1wb3J0YW50IHN5c3RlbSBmaWxlCisJICBiZWluZyBtZWFzdXJlZCwgd2UgY2FuIHRlbGwuCisKKwkgIElmIHlvdXIgc3lzdGVtIGhhcyBhIFRQTSBjaGlwLCB0aGVuIElNQSBhbHNvIG1haW50YWlucworCSAgYW4gYWdncmVnYXRlIGludGVncml0eSB2YWx1ZSBvdmVyIHRoaXMgbGlzdCBpbnNpZGUgdGhlCisJICBUUE0gaGFyZHdhcmUsIHNvIHRoYXQgdGhlIFRQTSBjYW4gcHJvdmUgdG8gYSB0aGlyZCBwYXJ0eQorCSAgd2hldGhlciBvciBub3QgY3JpdGljYWwgc3lzdGVtIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZC4KKwkgIFJlYWQgPGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvc2VjMDQvdGVjaC9zYWlsZXIuaHRtbD4KKwkgIHRvIGxlYXJuIG1vcmUgYWJvdXQgSU1BLgorCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIElNQV9NRUFTVVJFX1BDUl9JRFgKKwlpbnQKKwlkZXBlbmRzIG9uIElNQQorCXJhbmdlIDggMTQKKwlkZWZhdWx0IDEwCisJaGVscAorCSAgSU1BX01FQVNVUkVfUENSX0lEWCBkZXRlcm1pbmVzIHRoZSBUUE0gUENSIHJlZ2lzdGVyIGluZGV4CisJICB0aGF0IElNQSB1c2VzIHRvIG1haW50YWluIHRoZSBpbnRlZ3JpdHkgYWdncmVnYXRlIG9mIHRoZQorCSAgbWVhc3VyZW1lbnQgbGlzdC4gIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IDEwLgorCitjb25maWcgSU1BX0FVRElUCisJYm9vbAorCWRlcGVuZHMgb24gSU1BCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGtlcm5lbCBwYXJhbWV0ZXIgJ2ltYV9hdWRpdCcsIHdoaWNoCisJICBhbGxvd3MgaW5mb3JtYXRpb25hbCBhdWRpdGluZyBtZXNzYWdlcyB0byBiZSBlbmFibGVkCisJICBhdCBib290LiAgSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIGluZm9ybWF0aW9uYWwgaW50ZWdyaXR5CisJICBhdWRpdGluZyBtZXNzYWdlcyBjYW4gYmUgZW5hYmxlZCB3aXRoICdpbWFfYXVkaXQ9MScgb24KKwkgIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCitjb25maWcgSU1BX0xTTV9SVUxFUworCWJvb2wKKwlkZXBlbmRzIG9uIElNQSAmJiBBVURJVCAmJiAoU0VDVVJJVFlfU0VMSU5VWCB8fCBTRUNVUklUWV9TTUFDSykKKwlkZWZhdWx0IHkKKwloZWxwCisJICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBkaXNyZWdhcmQgTFNNIGJhc2VkIHBvbGljeSBydWxlcy4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4N2M0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgVHJ1c3RlZCBDb21wdXRpbmcgR3JvdXAncyhUQ0cpIHJ1bnRpbWUgSW50ZWdyaXR5CisjIE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpLgorIworCitvYmotJChDT05GSUdfSU1BKSArPSBpbWEubworCitpbWEteSA6PSBpbWFfZnMubyBpbWFfcXVldWUubyBpbWFfaW5pdC5vIGltYV9tYWluLm8gaW1hX2NyeXB0by5vIGltYV9hcGkubyBcCisJIGltYV9wb2xpY3kubyBpbWFfaWludC5vIGltYV9hdWRpdC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjVlYjUzCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hLmgKKyAqCWludGVybmFsIEludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUgKElNQSkgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fTElOVVhfSU1BX0gKKyNkZWZpbmUgX19MSU5VWF9JTUFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC90cG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorCitlbnVtIGltYV9zaG93X3R5cGUgeyBJTUFfU0hPV19CSU5BUlksIElNQV9TSE9XX0FTQ0lJIH07CitlbnVtIHRwbV9wY3JzIHsgVFBNX1BDUjAgPSAwLCBUUE1fUENSOCA9IDggfTsKKworLyogZGlnZXN0IHNpemUgZm9yIElNQSwgZml0cyBTSEExIG9yIE1ENSAqLworI2RlZmluZSBJTUFfRElHRVNUX1NJWkUJCTIwCisjZGVmaW5lIElNQV9FVkVOVF9OQU1FX0xFTl9NQVgJMjU1CisKKyNkZWZpbmUgSU1BX0hBU0hfQklUUyA5CisjZGVmaW5lIElNQV9NRUFTVVJFX0hUQUJMRV9TSVpFICgxIDw8IElNQV9IQVNIX0JJVFMpCisKKy8qIHNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KK2V4dGVybiBpbnQgaW1hX2luaXRpYWxpemVkOworZXh0ZXJuIGludCBpbWFfdXNlZF9jaGlwOworZXh0ZXJuIGNoYXIgKmltYV9oYXNoOworCisvKiBJTUEgaW5vZGUgdGVtcGxhdGUgZGVmaW5pdGlvbiAqLworc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhIHsKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsJLyogc2hhMS9tZDUgbWVhc3VyZW1lbnQgaGFzaCAqLworCWNoYXIgZmlsZV9uYW1lW0lNQV9FVkVOVF9OQU1FX0xFTl9NQVggKyAxXTsJLyogbmFtZSArIFwwICovCit9OworCitzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5IHsKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsJLyogc2hhMSBvciBtZDUgbWVhc3VyZW1lbnQgaGFzaCAqLworCWNvbnN0IGNoYXIgKnRlbXBsYXRlX25hbWU7CisJaW50IHRlbXBsYXRlX2xlbjsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgdGVtcGxhdGU7Cit9OworCitzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobmV4dDsJLyogcGxhY2UgaW4gaGFzaCBjb2xsaXNpb24gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGF0ZXI7CQkvKiBwbGFjZSBpbiBpbWFfbWVhc3VyZW1lbnRzIGxpc3QgKi8KKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKK307CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpbWFfbWVhc3VyZW1lbnRzOwkvKiBsaXN0IG9mIGFsbCBtZWFzdXJlbWVudHMgKi8KKworLyogZGVjbGFyYXRpb25zICovCit2b2lkIGludGVncml0eV9hdWRpdF9tc2coaW50IGF1ZGl0X21zZ25vLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpvcCwKKwkJCSBjb25zdCBjaGFyICpjYXVzZSwgaW50IHJlc3VsdCwgaW50IGluZm8pOworCisvKiBJbnRlcm5hbCBJTUEgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KK3ZvaWQgaW1hX2lpbnRjYWNoZV9pbml0KHZvaWQpOworaW50IGltYV9pbml0KHZvaWQpOwordm9pZCBpbWFfY2xlYW51cCh2b2lkKTsKK2ludCBpbWFfZnNfaW5pdCh2b2lkKTsKK3ZvaWQgaW1hX2ZzX2NsZWFudXAodm9pZCk7CitpbnQgaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwgaW50IHZpb2xhdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKm9wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBpbWFfY2FsY19oYXNoKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpkaWdlc3QpOworaW50IGltYV9jYWxjX3RlbXBsYXRlX2hhc2goaW50IHRlbXBsYXRlX2xlbiwgdm9pZCAqdGVtcGxhdGUsIGNoYXIgKmRpZ2VzdCk7CitpbnQgaW1hX2NhbGNfYm9vdF9hZ2dyZWdhdGUoY2hhciAqZGlnZXN0KTsKK3ZvaWQgaW1hX2FkZF92aW9sYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpvcCwgY29uc3QgY2hhciAqY2F1c2UpOworCisvKgorICogdXNlZCB0byBwcm90ZWN0IGhfdGFibGUgYW5kIHNoYV90YWJsZQorICovCitleHRlcm4gc3BpbmxvY2tfdCBpbWFfcXVldWVfbG9jazsKKworc3RydWN0IGltYV9oX3RhYmxlIHsKKwlhdG9taWNfbG9uZ190IGxlbjsJLyogbnVtYmVyIG9mIHN0b3JlZCBtZWFzdXJlbWVudHMgaW4gdGhlIGxpc3QgKi8KKwlhdG9taWNfbG9uZ190IHZpb2xhdGlvbnM7CisJc3RydWN0IGhsaXN0X2hlYWQgcXVldWVbSU1BX01FQVNVUkVfSFRBQkxFX1NJWkVdOworfTsKK2V4dGVybiBzdHJ1Y3QgaW1hX2hfdGFibGUgaW1hX2h0YWJsZTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGltYV9oYXNoX2tleSh1OCAqZGlnZXN0KQoreworCXJldHVybiBoYXNoX2xvbmcoKmRpZ2VzdCwgSU1BX0hBU0hfQklUUyk7Cit9CisKKy8qIGlpbnQgY2FjaGUgZmxhZ3MgKi8KKyNkZWZpbmUgSU1BX01FQVNVUkVECQkxCisjZGVmaW5lIElNQV9JSU5UX0RVTVBfU1RBQ0sJNTEyCisKKy8qIGludGVncml0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZSAqLworc3RydWN0IGltYV9paW50X2NhY2hlIHsKKwl1NjQgdmVyc2lvbjsJCS8qIHRyYWNrIGlub2RlIGNoYW5nZXMgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOworCXN0cnVjdCBtdXRleCBtdXRleDsJLyogcHJvdGVjdHM6IHZlcnNpb24sIGZsYWdzLCBkaWdlc3QgKi8KKwlsb25nIHJlYWRjb3VudDsJCS8qIG1lYXN1cmVkIGZpbGVzIHJlYWRjb3VudCAqLworCWxvbmcgd3JpdGVjb3VudDsJLyogbWVhc3VyZWQgZmlsZXMgd3JpdGVjb3VudCAqLworCWxvbmcgb3BlbmNvdW50OwkJLyogb3BlbnMgcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IGtyZWYgcmVmY291bnQ7CS8qIGltYV9paW50X2NhY2hlIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCByY3VfaGVhZCByY3U7Cit9OworCisvKiBMSU0gQVBJIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCitpbnQgaW1hX211c3RfbWVhc3VyZShzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgaW50IG1hc2ssIGludCBmdW5jdGlvbik7CitpbnQgaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit2b2lkIGltYV9zdG9yZV9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpOworaW50IGltYV9zdG9yZV90ZW1wbGF0ZShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwgaW50IHZpb2xhdGlvbiwKKwkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpbWFfdGVtcGxhdGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmUsCisJCSAgICAgICBlbnVtIGltYV9zaG93X3R5cGUgc2hvdyk7CisKKy8qIHJhZGl4IHRyZWUgY2FsbHMgdG8gbG9va3VwLCBpbnNlcnQsIGRlbGV0ZQorICogaW50ZWdyaXR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlLgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2luc2VydChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9nZXQoc3RydWN0IGlub2RlICppbm9kZSk7CitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgaW1hX2lpbnRfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpaW50X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwordm9pZCBpaW50X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTsKKworLyogSU1BIHBvbGljeSByZWxhdGVkIGZ1bmN0aW9ucyAqLworZW51bSBpbWFfaG9va3MgeyBQQVRIX0NIRUNLID0gMSwgRklMRV9NTUFQLCBCUFJNX0NIRUNLIH07CisKK2ludCBpbWFfbWF0Y2hfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKTsKK3ZvaWQgaW1hX2luaXRfcG9saWN5KHZvaWQpOwordm9pZCBpbWFfdXBkYXRlX3BvbGljeSh2b2lkKTsKK2ludCBpbWFfcGFyc2VfYWRkX3J1bGUoY2hhciAqKTsKK3ZvaWQgaW1hX2RlbGV0ZV9ydWxlcyh2b2lkKTsKKworLyogTFNNIGJhc2VkIHBvbGljeSBydWxlcyByZXF1aXJlIGF1ZGl0ICovCisjaWZkZWYgQ09ORklHX0lNQV9MU01fUlVMRVMKKworI2RlZmluZSBzZWN1cml0eV9maWx0ZXJfcnVsZV9pbml0IHNlY3VyaXR5X2F1ZGl0X3J1bGVfaW5pdAorI2RlZmluZSBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaCBzZWN1cml0eV9hdWRpdF9ydWxlX21hdGNoCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX2luaXQodTMyIGZpZWxkLCB1MzIgb3AsIGNoYXIgKnJ1bGVzdHIsCisJCQkJCSAgICB2b2lkICoqbHNtcnVsZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2godTMyIHNlY2lkLCB1MzIgZmllbGQsIHUzMiBvcCwKKwkJCQkJICAgICB2b2lkICpsc21ydWxlLAorCQkJCQkgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qIENPTkZJR19JTUFfTFNNX1JVTEVTICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNThiNgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2FwaS5jCisgKglJbXBsZW1lbnRzIG11c3RfbWVhc3VyZSwgY29sbGVjdF9tZWFzdXJlbWVudCwgc3RvcmVfbWVhc3VyZW1lbnQsCisgKglhbmQgc3RvcmVfdGVtcGxhdGUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImltYS5oIgorc3RhdGljIGNvbnN0IGNoYXIgKklNQV9URU1QTEFURV9OQU1FID0gImltYSI7CisKKy8qCisgKiBpbWFfc3RvcmVfdGVtcGxhdGUgLSBzdG9yZSBpbWEgdGVtcGxhdGUgbWVhc3VyZW1lbnRzCisgKgorICogQ2FsY3VsYXRlIHRoZSBoYXNoIG9mIGEgdGVtcGxhdGUgZW50cnksIGFkZCB0aGUgdGVtcGxhdGUgZW50cnkKKyAqIHRvIGFuIG9yZGVyZWQgbGlzdCBvZiBtZWFzdXJlbWVudCBlbnRyaWVzIG1haW50YWluZWQgaW5zaWRlIHRoZSBrZXJuZWwsCisgKiBhbmQgYWxzbyB1cGRhdGUgdGhlIGFnZ3JlZ2F0ZSBpbnRlZ3JpdHkgdmFsdWUgKG1haW50YWluZWQgaW5zaWRlIHRoZQorICogY29uZmlndXJlZCBUUE0gUENSKSBvdmVyIHRoZSBoYXNoZXMgb2YgdGhlIGN1cnJlbnQgbGlzdCBvZiBtZWFzdXJlbWVudAorICogZW50cmllcy4KKyAqCisgKiBBcHBsaWNhdGlvbnMgcmV0cmlldmUgdGhlIGN1cnJlbnQga2VybmVsLWhlbGQgbWVhc3VyZW1lbnQgbGlzdCB0aHJvdWdoCisgKiB0aGUgc2VjdXJpdHlmcyBlbnRyaWVzIGluIC9zeXMva2VybmVsL3NlY3VyaXR5L2ltYS4gVGhlIHNpZ25lZCBhZ2dyZWdhdGUKKyAqIFRQTSBQQ1IgKGNhbGxlZCBxdW90ZSkgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBhIFRQTSB1c2VyIHNwYWNlIGxpYnJhcnkKKyAqIGFuZCBpcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBtZWFzdXJlbWVudCBsaXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgaW1hX3N0b3JlX3RlbXBsYXRlKHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LAorCQkgICAgICAgaW50IHZpb2xhdGlvbiwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJhZGRfdGVtcGxhdGVfbWVhc3VyZSI7CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiaGFzaGluZ19lcnJvciI7CisJaW50IHJlc3VsdDsKKworCW1lbXNldChlbnRyeS0+ZGlnZXN0LCAwLCBzaXplb2YoZW50cnktPmRpZ2VzdCkpOworCWVudHJ5LT50ZW1wbGF0ZV9uYW1lID0gSU1BX1RFTVBMQVRFX05BTUU7CisJZW50cnktPnRlbXBsYXRlX2xlbiA9IHNpemVvZihlbnRyeS0+dGVtcGxhdGUpOworCisJaWYgKCF2aW9sYXRpb24pIHsKKwkJcmVzdWx0ID0gaW1hX2NhbGNfdGVtcGxhdGVfaGFzaChlbnRyeS0+dGVtcGxhdGVfbGVuLAorCQkJCQkJJmVudHJ5LT50ZW1wbGF0ZSwKKwkJCQkJCWVudHJ5LT5kaWdlc3QpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwKKwkJCQkJICAgIGVudHJ5LT50ZW1wbGF0ZV9uYW1lLCBvcCwKKwkJCQkJICAgIGF1ZGl0X2NhdXNlLCByZXN1bHQsIDApOworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKwlyZXN1bHQgPSBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5KGVudHJ5LCB2aW9sYXRpb24sIG9wLCBpbm9kZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGltYV9hZGRfdmlvbGF0aW9uIC0gYWRkIHZpb2xhdGlvbiB0byBtZWFzdXJlbWVudCBsaXN0LgorICoKKyAqIFZpb2xhdGlvbnMgYXJlIGZsYWdnZWQgaW4gdGhlIG1lYXN1cmVtZW50IGxpc3Qgd2l0aCB6ZXJvIGhhc2ggdmFsdWVzLgorICogQnkgZXh0ZW5kaW5nIHRoZSBQQ1Igd2l0aCAweEZGJ3MgaW5zdGVhZCBvZiB3aXRoIHplcm9lcywgdGhlIFBDUgorICogdmFsdWUgaXMgaW52YWxpZGF0ZWQuCisgKi8KK3ZvaWQgaW1hX2FkZF92aW9sYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpvcCwgY29uc3QgY2hhciAqY2F1c2UpCit7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7CisJaW50IHZpb2xhdGlvbiA9IDE7CisJaW50IHJlc3VsdDsKKworCS8qIGNhbiBvdmVyZmxvdywgb25seSBpbmRpY2F0b3IgKi8KKwlhdG9taWNfbG9uZ19pbmMoJmltYV9odGFibGUudmlvbGF0aW9ucyk7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1zZXQoJmVudHJ5LT50ZW1wbGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSkpOworCXN0cm5jcHkoZW50cnktPnRlbXBsYXRlLmZpbGVfbmFtZSwgZmlsZW5hbWUsIElNQV9FVkVOVF9OQU1FX0xFTl9NQVgpOworCXJlc3VsdCA9IGltYV9zdG9yZV90ZW1wbGF0ZShlbnRyeSwgdmlvbGF0aW9uLCBpbm9kZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWtmcmVlKGVudHJ5KTsKK2Vycl9vdXQ6CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwgZmlsZW5hbWUsCisJCQkgICAgb3AsIGNhdXNlLCByZXN1bHQsIDApOworfQorCisvKioKKyAqIGltYV9tdXN0X21lYXN1cmUgLSBtZWFzdXJlIGRlY2lzaW9uIGJhc2VkIG9uIHBvbGljeS4KKyAqIEBpbm9kZTogcG9pbnRlciB0byBpbm9kZSB0byBtZWFzdXJlCisgKiBAbWFzazogY29udGFpbnMgdGhlIHBlcm1pc3Npb24gbWFzayAoTUFZX1JFQUQsIE1BWV9XUklURSwgTUFZX0VYRUNVVEUpCisgKiBAZnVuY3Rpb246IGNhbGxpbmcgZnVuY3Rpb24gKFBBVEhfQ0hFQ0ssIEJQUk1fQ0hFQ0ssIEZJTEVfTU1BUCkKKyAqCisgKiBUaGUgcG9saWN5IGlzIGRlZmluZWQgaW4gdGVybXMgb2Yga2V5cGFpcnM6CisgKiAJCXN1Ymo9LCBvYmo9LCB0eXBlPSwgZnVuYz0sIG1hc2s9LCBmc21hZ2ljPQorICoJc3ViaixvYmosIGFuZCB0eXBlOiBhcmUgTFNNIHNwZWNpZmljLgorICogCWZ1bmM6IFBBVEhfQ0hFQ0sgfCBCUFJNX0NIRUNLIHwgRklMRV9NTUFQCisgKiAJbWFzazogY29udGFpbnMgdGhlIHBlcm1pc3Npb24gbWFzaworICoJZnNtYWdpYzogaGV4IHZhbHVlCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpaW50LT5tdXRleCBoZWxkLgorICoKKyAqIFJldHVybiAwIHRvIG1lYXN1cmUuIFJldHVybiAxIGlmIGFscmVhZHkgbWVhc3VyZWQuCisgKiBGb3IgbWF0Y2hpbmcgYSBET05UX01FQVNVUkUgcG9saWN5LCBubyBwb2xpY3ksIG9yIG90aGVyCisgKiBlcnJvciwgcmV0dXJuIGFuIGVycm9yIGNvZGUuCisqLworaW50IGltYV9tdXN0X21lYXN1cmUoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pCit7CisJaW50IG11c3RfbWVhc3VyZTsKKworCWlmIChpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkKKwkJcmV0dXJuIDE7CisKKwltdXN0X21lYXN1cmUgPSBpbWFfbWF0Y2hfcG9saWN5KGlub2RlLCBmdW5jdGlvbiwgbWFzayk7CisJcmV0dXJuIG11c3RfbWVhc3VyZSA/IDAgOiAtRUFDQ0VTOworfQorCisvKgorICogaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQgLSBjb2xsZWN0IGZpbGUgbWVhc3VyZW1lbnQKKyAqCisgKiBDYWxjdWxhdGUgdGhlIGZpbGUgaGFzaCwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LAorICogc3RvcmluZyB0aGUgbWVhc3VyZW1lbnQgYW5kIGlfdmVyc2lvbiBpbiB0aGUgaWludC4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlpbnQtPm11dGV4IGhlbGQuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJlc3VsdCA9IC1FRVhJU1Q7CisKKwlpZiAoIShpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkpIHsKKwkJdTY0IGlfdmVyc2lvbiA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ZlcnNpb247CisKKwkJbWVtc2V0KGlpbnQtPmRpZ2VzdCwgMCwgSU1BX0RJR0VTVF9TSVpFKTsKKwkJcmVzdWx0ID0gaW1hX2NhbGNfaGFzaChmaWxlLCBpaW50LT5kaWdlc3QpOworCQlpZiAoIXJlc3VsdCkKKwkJCWlpbnQtPnZlcnNpb24gPSBpX3ZlcnNpb247CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpbWFfc3RvcmVfbWVhc3VyZW1lbnQgLSBzdG9yZSBmaWxlIG1lYXN1cmVtZW50CisgKgorICogQ3JlYXRlIGFuICJpbWEiIHRlbXBsYXRlIGFuZCB0aGVuIHN0b3JlIHRoZSB0ZW1wbGF0ZSBieSBjYWxsaW5nCisgKiBpbWFfc3RvcmVfdGVtcGxhdGUuCisgKgorICogV2Ugb25seSBnZXQgaGVyZSBpZiB0aGUgaW5vZGUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gbWVhc3VyZWQsCisgKiBidXQgdGhlIG1lYXN1cmVtZW50IGNvdWxkIGFscmVhZHkgZXhpc3Q6CisgKiAJLSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZmlsZSBvbiBlaXRoZXIgdGhlIHNhbWUgb3IKKyAqCSAgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorICoJLSB0aGUgaW5vZGUgd2FzIHByZXZpb3VzbHkgZmx1c2hlZCBhcyB3ZWxsIGFzIHRoZSBpaW50IGluZm8sCisgKgkgIGNvbnRhaW5pbmcgdGhlIGhhc2hpbmcgaW5mby4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlpbnQtPm11dGV4IGhlbGQuCisgKi8KK3ZvaWQgaW1hX3N0b3JlX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJhZGRfdGVtcGxhdGVfbWVhc3VyZSI7CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiRU5PTUVNIjsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7CisJaW50IHZpb2xhdGlvbiA9IDA7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwgZmlsZW5hbWUsCisJCQkJICAgIG9wLCBhdWRpdF9jYXVzZSwgcmVzdWx0LCAwKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoJmVudHJ5LT50ZW1wbGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSkpOworCW1lbWNweShlbnRyeS0+dGVtcGxhdGUuZGlnZXN0LCBpaW50LT5kaWdlc3QsIElNQV9ESUdFU1RfU0laRSk7CisJc3RybmNweShlbnRyeS0+dGVtcGxhdGUuZmlsZV9uYW1lLCBmaWxlbmFtZSwgSU1BX0VWRU5UX05BTUVfTEVOX01BWCk7CisKKwlyZXN1bHQgPSBpbWFfc3RvcmVfdGVtcGxhdGUoZW50cnksIHZpb2xhdGlvbiwgaW5vZGUpOworCWlmICghcmVzdWx0KQorCQlpaW50LT5mbGFncyB8PSBJTUFfTUVBU1VSRUQ7CisJZWxzZQorCQlrZnJlZShlbnRyeSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hdWRpdC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA4MmJiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXVkaXQuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGludGVncml0eV9hdWRpdC5jCisgKiAJQXVkaXQgY2FsbHMgZm9yIHRoZSBpbnRlZ3JpdHkgc3Vic3lzdGVtCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworc3RhdGljIGludCBpbWFfYXVkaXQ7CisKKyNpZmRlZiBDT05GSUdfSU1BX0FVRElUCisKKy8qIGltYV9hdWRpdF9zZXR1cCAtIGVuYWJsZSBpbmZvcm1hdGlvbmFsIGF1ZGl0aW5nIG1lc3NhZ2VzICovCitzdGF0aWMgaW50IF9faW5pdCBpbWFfYXVkaXRfc2V0dXAoY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgYXVkaXQ7CisJaW50IHJjLCByZXN1bHQgPSAwOworCWNoYXIgKm9wID0gImltYV9hdWRpdCI7CisJY2hhciAqY2F1c2U7CisKKwlyYyA9IHN0cmljdF9zdHJ0b3VsKHN0ciwgMCwgJmF1ZGl0KTsKKwlpZiAocmMgfHwgYXVkaXQgPiAxKQorCQlyZXN1bHQgPSAxOworCWVsc2UKKwkJaW1hX2F1ZGl0ID0gYXVkaXQ7CisJY2F1c2UgPSBpbWFfYXVkaXQgPyAiZW5hYmxlZCIgOiAibm90X2VuYWJsZWQiOworCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwgTlVMTCwKKwkJCSAgICBvcCwgY2F1c2UsIHJlc3VsdCwgMCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJpbWFfYXVkaXQ9IiwgaW1hX2F1ZGl0X3NldHVwKTsKKyNlbmRpZgorCit2b2lkIGludGVncml0eV9hdWRpdF9tc2coaW50IGF1ZGl0X21zZ25vLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpvcCwKKwkJCSBjb25zdCBjaGFyICpjYXVzZSwgaW50IHJlc3VsdCwgaW50IGF1ZGl0X2luZm8pCit7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisKKwlpZiAoIWltYV9hdWRpdCAmJiBhdWRpdF9pbmZvID09IDEpIC8qIFNraXAgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLworCQlyZXR1cm47CisKKwlhYiA9IGF1ZGl0X2xvZ19zdGFydChjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBHRlBfS0VSTkVMLCBhdWRpdF9tc2dubyk7CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImludGVncml0eTogcGlkPSVkIHVpZD0ldSBhdWlkPSV1IHNlcz0ldSIsCisJCQkgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jcmVkLT51aWQsCisJCQkgYXVkaXRfZ2V0X2xvZ2ludWlkKGN1cnJlbnQpLAorCQkJIGF1ZGl0X2dldF9zZXNzaW9uaWQoY3VycmVudCkpOworCWF1ZGl0X2xvZ190YXNrX2NvbnRleHQoYWIpOworCXN3aXRjaCAoYXVkaXRfbXNnbm8pIHsKKwljYXNlIEFVRElUX0lOVEVHUklUWV9EQVRBOgorCWNhc2UgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBOgorCWNhc2UgQVVESVRfSU5URUdSSVRZX1BDUjoKKwljYXNlIEFVRElUX0lOVEVHUklUWV9TVEFUVVM6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMgY2F1c2U9JXMiLCBvcCwgY2F1c2UpOworCQlicmVhazsKKwljYXNlIEFVRElUX0lOVEVHUklUWV9IQVNIOgorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wPSVzIGhhc2g9JXMiLCBvcCwgY2F1c2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wPSVzIiwgb3ApOworCX0KKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGNvbW09Iik7CisJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgY3VycmVudC0+Y29tbSk7CisJaWYgKGZuYW1lKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0iKTsKKwkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgZm5hbWUpOworCX0KKwlpZiAoaW5vZGUpCisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZGV2PSVzIGlubz0lbHUiLAorCQkJCSBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHJlcz0lZCIsICFyZXN1bHQgPyAwIDogMSk7CisJYXVkaXRfbG9nX2VuZChhYik7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9jcnlwdG8uYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDU3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9jcnlwdG8uYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfY3J5cHRvLmMKKyAqIAlDYWxjdWxhdGVzIG1kNS9zaGExIGZpbGUgaGFzaCwgdGVtcGxhdGUgaGFzaCwgYm9vdC1hZ2dyZWF0ZSBoYXNoCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgImltYS5oIgorCitzdGF0aWMgaW50IGluaXRfZGVzYyhzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjKQoreworCWludCByYzsKKworCWRlc2MtPnRmbSA9IGNyeXB0b19hbGxvY19oYXNoKGltYV9oYXNoLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKGRlc2MtPnRmbSkpIHsKKwkJcHJfaW5mbygiZmFpbGVkIHRvIGxvYWQgJXMgdHJhbnNmb3JtOiAlbGRcbiIsCisJCQlpbWFfaGFzaCwgUFRSX0VSUihkZXNjLT50Zm0pKTsKKwkJcmMgPSBQVFJfRVJSKGRlc2MtPnRmbSk7CisJCXJldHVybiByYzsKKwl9CisJZGVzYy0+ZmxhZ3MgPSAwOworCXJjID0gY3J5cHRvX2hhc2hfaW5pdChkZXNjKTsKKwlpZiAocmMpCisJCWNyeXB0b19mcmVlX2hhc2goZGVzYy0+dGZtKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIE1ENS9TSEExIGZpbGUgZGlnZXN0CisgKi8KK2ludCBpbWFfY2FsY19oYXNoKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpkaWdlc3QpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlsb2ZmX3QgaV9zaXplOworCWNoYXIgKnJidWY7CisJaW50IHJjLCBvZmZzZXQgPSAwOworCisJcmMgPSBpbml0X2Rlc2MoJmRlc2MpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlyYnVmID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghcmJ1ZikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpX3NpemUgPSBpX3NpemVfcmVhZChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJd2hpbGUgKG9mZnNldCA8IGlfc2l6ZSkgeworCQlpbnQgcmJ1Zl9sZW47CisKKwkJcmJ1Zl9sZW4gPSBrZXJuZWxfcmVhZChmaWxlLCBvZmZzZXQsIHJidWYsIFBBR0VfU0laRSk7CisJCWlmIChyYnVmX2xlbiA8IDApIHsKKwkJCXJjID0gcmJ1Zl9sZW47CisJCQlicmVhazsKKwkJfQorCQlvZmZzZXQgKz0gcmJ1Zl9sZW47CisJCXNnX2luaXRfb25lKHNnLCByYnVmLCByYnVmX2xlbik7CisKKwkJcmMgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsIHNnLCByYnVmX2xlbik7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKwlrZnJlZShyYnVmKTsKKwlpZiAoIXJjKQorCQlyYyA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOworb3V0OgorCWNyeXB0b19mcmVlX2hhc2goZGVzYy50Zm0pOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgaGFzaCBvZiBhIGdpdmVuIHRlbXBsYXRlCisgKi8KK2ludCBpbWFfY2FsY190ZW1wbGF0ZV9oYXNoKGludCB0ZW1wbGF0ZV9sZW4sIHZvaWQgKnRlbXBsYXRlLCBjaGFyICpkaWdlc3QpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlpbnQgcmM7CisKKwlyYyA9IGluaXRfZGVzYygmZGVzYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXNnX2luaXRfb25lKHNnLCB0ZW1wbGF0ZSwgdGVtcGxhdGVfbGVuKTsKKwlyYyA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgc2csIHRlbXBsYXRlX2xlbik7CisJaWYgKCFyYykKKwkJcmMgPSBjcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZGlnZXN0KTsKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGltYV9wY3JyZWFkKGludCBpZHgsIHU4ICpwY3IpCit7CisJaWYgKCFpbWFfdXNlZF9jaGlwKQorCQlyZXR1cm47CisKKwlpZiAodHBtX3Bjcl9yZWFkKFRQTV9BTllfTlVNLCBpZHgsIHBjcikgIT0gMCkKKwkJcHJfZXJyKCJFcnJvciBDb21tdW5pY2F0aW5nIHRvIFRQTSBjaGlwXG4iKTsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgYm9vdCBhZ2dyZWdhdGUgaGFzaAorICovCitpbnQgaW1hX2NhbGNfYm9vdF9hZ2dyZWdhdGUoY2hhciAqZGlnZXN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJdTggcGNyX2lbSU1BX0RJR0VTVF9TSVpFXTsKKwlpbnQgcmMsIGk7CisKKwlyYyA9IGluaXRfZGVzYygmZGVzYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCS8qIGN1bXVsYXRpdmUgc2hhMSBvdmVyIHRwbSByZWdpc3RlcnMgMC03ICovCisJZm9yIChpID0gVFBNX1BDUjA7IGkgPCBUUE1fUENSODsgaSsrKSB7CisJCWltYV9wY3JyZWFkKGksIHBjcl9pKTsKKwkJLyogbm93IGFjY3VtdWxhdGUgd2l0aCBjdXJyZW50IGFnZ3JlZ2F0ZSAqLworCQlzZ19pbml0X29uZSgmc2csIHBjcl9pLCBJTUFfRElHRVNUX1NJWkUpOworCQlyYyA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgJnNnLCBJTUFfRElHRVNUX1NJWkUpOworCX0KKwlpZiAoIXJjKQorCQljcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZGlnZXN0KTsKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmJlMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHVzLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfZnMuYworICoJaW1wbGVtZW5lbnRzIHNlY3VyaXR5IGZpbGUgc3lzdGVtIGZvciByZXBvcnRpbmcKKyAqCWN1cnJlbnQgbWVhc3VyZW1lbnQgbGlzdCBhbmQgSU1BIHN0YXRpc3RpY3MKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKKworc3RhdGljIGludCB2YWxpZF9wb2xpY3kgPSAxOworI2RlZmluZSBUTVBCVUZMRU4gMTIKK3N0YXRpYyBzc2l6ZV90IGltYV9zaG93X2h0YWJsZV92YWx1ZShjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkJICAgICBsb2ZmX3QgKnBwb3MsIGF0b21pY19sb25nX3QgKnZhbCkKK3sKKwljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOworCXNzaXplX3QgbGVuOworCisJbGVuID0gc2NucHJpbnRmKHRtcGJ1ZiwgVE1QQlVGTEVOLCAiJWxpXG4iLCBhdG9taWNfbG9uZ19yZWFkKHZhbCkpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCB0bXBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGltYV9zaG93X2h0YWJsZV92aW9sYXRpb25zKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKKwkucmVhZCA9IGltYV9zaG93X2h0YWJsZV92aW9sYXRpb25zCit9OworCitzdGF0aWMgc3NpemVfdCBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCSAgIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBpbWFfc2hvd19odGFibGVfdmFsdWUoYnVmLCBjb3VudCwgcHBvcywgJmltYV9odGFibGUubGVuKTsKKworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZW1lbnRzX2NvdW50X29wcyA9IHsKKwkucmVhZCA9IGltYV9zaG93X21lYXN1cmVtZW50c19jb3VudAorfTsKKworLyogcmV0dXJucyBwb2ludGVyIHRvIGhsaXN0X25vZGUgKi8KK3N0YXRpYyB2b2lkICppbWFfbWVhc3VyZW1lbnRzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJbG9mZl90IGwgPSAqcG9zOworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlOworCisJLyogd2UgbmVlZCBhIGxvY2sgc2luY2UgcG9zIGNvdWxkIHBvaW50IGJleW9uZCBsYXN0IGVsZW1lbnQgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocWUsICZpbWFfbWVhc3VyZW1lbnRzLCBsYXRlcikgeworCQlpZiAoIWwtLSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gcWU7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICppbWFfbWVhc3VyZW1lbnRzX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSA9IHY7CisKKwkvKiBsb2NrIHByb3RlY3RzIHdoZW4gcmVhZGluZyBiZXlvbmQgbGFzdCBlbGVtZW50CisJICogYWdhaW5zdCBjb25jdXJyZW50IGxpc3QtZXh0ZW5zaW9uCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCXFlID0gbGlzdF9lbnRyeShyY3VfZGVyZWZlcmVuY2UocWUtPmxhdGVyLm5leHQpLAorCQkJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSwgbGF0ZXIpOworCXJjdV9yZWFkX3VubG9jaygpOworCSgqcG9zKSsrOworCisJcmV0dXJuICgmcWUtPmxhdGVyID09ICZpbWFfbWVhc3VyZW1lbnRzKSA/IE5VTEwgOiBxZTsKK30KKworc3RhdGljIHZvaWQgaW1hX21lYXN1cmVtZW50c19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIHZvaWQgaW1hX3B1dGMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbikKK3sKKwl3aGlsZSAoZGF0YWxlbi0tKQorCQlzZXFfcHV0YyhtLCAqKGNoYXIgKilkYXRhKyspOworfQorCisvKiBwcmludCBmb3JtYXQ6CisgKiAgICAgICAzMmJpdC1sZT1wY3IjCisgKiAgICAgICBjaGFyWzIwXT10ZW1wbGF0ZSBkaWdlc3QKKyAqICAgICAgIDMyYml0LWxlPXRlbXBsYXRlIG5hbWUgc2l6ZQorICogICAgICAgY2hhcltuXT10ZW1wbGF0ZSBuYW1lCisgKiAgICAgICBldmVudGRhdGFbbl09dGVtcGxhdGUgc3BlY2lmaWMgZGF0YQorICovCitzdGF0aWMgaW50IGltYV9tZWFzdXJlbWVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJLyogdGhlIGxpc3QgbmV2ZXIgc2hyaW5rcywgc28gd2UgZG9uJ3QgbmVlZCBhIGxvY2sgaGVyZSAqLworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlID0gdjsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplOworCWludCBuYW1lbGVuOworCXUzMiBwY3IgPSBDT05GSUdfSU1BX01FQVNVUkVfUENSX0lEWDsKKworCS8qIGdldCBlbnRyeSAqLworCWUgPSBxZS0+ZW50cnk7CisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiAxc3Q6IFBDUkluZGV4CisJICogUENSIHVzZWQgaXMgYWx3YXlzIHRoZSBzYW1lIChjb25maWcgb3B0aW9uKSBpbgorCSAqIGxpdHRsZS1lbmRpYW4gZm9ybWF0CisJICovCisJaW1hX3B1dGMobSwgJnBjciwgc2l6ZW9mIHBjcik7CisKKwkvKiAybmQ6IHRlbXBsYXRlIGRpZ2VzdCAqLworCWltYV9wdXRjKG0sIGUtPmRpZ2VzdCwgSU1BX0RJR0VTVF9TSVpFKTsKKworCS8qIDNyZDogdGVtcGxhdGUgbmFtZSBzaXplICovCisJbmFtZWxlbiA9IHN0cmxlbihlLT50ZW1wbGF0ZV9uYW1lKTsKKwlpbWFfcHV0YyhtLCAmbmFtZWxlbiwgc2l6ZW9mIG5hbWVsZW4pOworCisJLyogNHRoOiAgdGVtcGxhdGUgbmFtZSAqLworCWltYV9wdXRjKG0sICh2b2lkICopZS0+dGVtcGxhdGVfbmFtZSwgbmFtZWxlbik7CisKKwkvKiA1dGg6ICB0ZW1wbGF0ZSBzcGVjaWZpYyBkYXRhICovCisJaW1hX3RlbXBsYXRlX3Nob3cobSwgKHN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSAqKSZlLT50ZW1wbGF0ZSwKKwkJCSAgSU1BX1NIT1dfQklOQVJZKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbWFfbWVhc3VybWVudHNfc2Vxb3BzID0geworCS5zdGFydCA9IGltYV9tZWFzdXJlbWVudHNfc3RhcnQsCisJLm5leHQgPSBpbWFfbWVhc3VyZW1lbnRzX25leHQsCisJLnN0b3AgPSBpbWFfbWVhc3VyZW1lbnRzX3N0b3AsCisJLnNob3cgPSBpbWFfbWVhc3VyZW1lbnRzX3Nob3cKK307CisKK3N0YXRpYyBpbnQgaW1hX21lYXN1cmVtZW50c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX21lYXN1cm1lbnRzX3NlcW9wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0geworCS5vcGVuID0gaW1hX21lYXN1cmVtZW50c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgaW1hX3ByaW50X2RpZ2VzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHU4ICpkaWdlc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSU1BX0RJR0VTVF9TSVpFOyBpKyspCisJCXNlcV9wcmludGYobSwgIiUwMngiLCAqKGRpZ2VzdCArIGkpKTsKK30KKwordm9pZCBpbWFfdGVtcGxhdGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmUsIGVudW0gaW1hX3Nob3dfdHlwZSBzaG93KQoreworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSAqZW50cnkgPSBlOworCWludCBuYW1lbGVuOworCisJc3dpdGNoIChzaG93KSB7CisJY2FzZSBJTUFfU0hPV19BU0NJSToKKwkJaW1hX3ByaW50X2RpZ2VzdChtLCBlbnRyeS0+ZGlnZXN0KTsKKwkJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBlbnRyeS0+ZmlsZV9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBJTUFfU0hPV19CSU5BUlk6CisJCWltYV9wdXRjKG0sIGVudHJ5LT5kaWdlc3QsIElNQV9ESUdFU1RfU0laRSk7CisKKwkJbmFtZWxlbiA9IHN0cmxlbihlbnRyeS0+ZmlsZV9uYW1lKTsKKwkJaW1hX3B1dGMobSwgJm5hbWVsZW4sIHNpemVvZiBuYW1lbGVuKTsKKwkJaW1hX3B1dGMobSwgZW50cnktPmZpbGVfbmFtZSwgbmFtZWxlbik7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBwcmludCBpbiBhc2NpaSAqLworc3RhdGljIGludCBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCS8qIHRoZSBsaXN0IG5ldmVyIHNocmlua3MsIHNvIHdlIGRvbid0IG5lZWQgYSBsb2NrIGhlcmUgKi8KKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSA9IHY7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZTsKKworCS8qIGdldCBlbnRyeSAqLworCWUgPSBxZS0+ZW50cnk7CisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJLyogMXN0OiBQQ1IgdXNlZCAoY29uZmlnIG9wdGlvbikgKi8KKwlzZXFfcHJpbnRmKG0sICIlMmQgIiwgQ09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFgpOworCisJLyogMm5kOiBTSEExIHRlbXBsYXRlIGhhc2ggKi8KKwlpbWFfcHJpbnRfZGlnZXN0KG0sIGUtPmRpZ2VzdCk7CisKKwkvKiAzdGg6ICB0ZW1wbGF0ZSBuYW1lICovCisJc2VxX3ByaW50ZihtLCAiICVzICIsIGUtPnRlbXBsYXRlX25hbWUpOworCisJLyogNHRoOiAgdGVtcGxhdGUgc3BlY2lmaWMgZGF0YSAqLworCWltYV90ZW1wbGF0ZV9zaG93KG0sIChzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgKikmZS0+dGVtcGxhdGUsCisJCQkgIElNQV9TSE9XX0FTQ0lJKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyA9IHsKKwkuc3RhcnQgPSBpbWFfbWVhc3VyZW1lbnRzX3N0YXJ0LAorCS5uZXh0ID0gaW1hX21lYXN1cmVtZW50c19uZXh0LAorCS5zdG9wID0gaW1hX21lYXN1cmVtZW50c19zdG9wLAorCS5zaG93ID0gaW1hX2FzY2lpX21lYXN1cmVtZW50c19zaG93Cit9OworCitzdGF0aWMgaW50IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2Vxb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMgPSB7CisJLm9wZW4gPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3NpemVfdCBpbWFfd3JpdGVfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBkYXRhbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqZGF0YTsKKwlpbnQgcmM7CisKKwlpZiAoZGF0YWxlbiA+PSBQQUdFX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCWlmICgqcHBvcyAhPSAwKSB7CisJCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGF0YSA9IGttYWxsb2MoZGF0YWxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgYnVmLCBkYXRhbGVuKSkgeworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCSooZGF0YSArIGRhdGFsZW4pID0gJ1wwJzsKKwlyYyA9IGltYV9wYXJzZV9hZGRfcnVsZShkYXRhKTsKKwlpZiAocmMgPCAwKSB7CisJCWRhdGFsZW4gPSAtRUlOVkFMOworCQl2YWxpZF9wb2xpY3kgPSAwOworCX0KKworCWtmcmVlKGRhdGEpOworCXJldHVybiBkYXRhbGVuOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaW1hX2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcnVudGltZV9tZWFzdXJlbWVudHNfY291bnQ7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmlvbGF0aW9uczsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppbWFfcG9saWN5OworCitzdGF0aWMgYXRvbWljX3QgcG9saWN5X29wZW5jb3VudCA9IEFUT01JQ19JTklUKDEpOworLyoKKyAqIGltYV9vcGVuX3BvbGljeTogc2VxdWVudGlhbGl6ZSBhY2Nlc3MgdG8gdGhlIHBvbGljeSBmaWxlCisgKi8KK2ludCBpbWFfb3Blbl9wb2xpY3koc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcG9saWN5X29wZW5jb3VudCkpCisJCXJldHVybiAwOworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKiBpbWFfcmVsZWFzZV9wb2xpY3kgLSBzdGFydCB1c2luZyB0aGUgbmV3IG1lYXN1cmUgcG9saWN5IHJ1bGVzLgorICoKKyAqIEluaXRpYWxseSwgaW1hX21lYXN1cmUgcG9pbnRzIHRvIHRoZSBkZWZhdWx0IHBvbGljeSBydWxlcywgbm93CisgKiBwb2ludCB0byB0aGUgbmV3IHBvbGljeSBydWxlcywgYW5kIHJlbW92ZSB0aGUgc2VjdXJpdHlmcyBwb2xpY3kgZmlsZSwKKyAqIGFzc3VtaW5nIGEgdmFsaWQgcG9saWN5LgorICovCitzdGF0aWMgaW50IGltYV9yZWxlYXNlX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoIXZhbGlkX3BvbGljeSkgeworCQlpbWFfZGVsZXRlX3J1bGVzKCk7CisJCXZhbGlkX3BvbGljeSA9IDE7CisJCWF0b21pY19zZXQoJnBvbGljeV9vcGVuY291bnQsIDEpOworCQlyZXR1cm4gMDsKKwl9CisJaW1hX3VwZGF0ZV9wb2xpY3koKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfcG9saWN5KTsKKwlpbWFfcG9saWN5ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVfcG9saWN5X29wcyA9IHsKKwkub3BlbiA9IGltYV9vcGVuX3BvbGljeSwKKwkud3JpdGUgPSBpbWFfd3JpdGVfcG9saWN5LAorCS5yZWxlYXNlID0gaW1hX3JlbGVhc2VfcG9saWN5Cit9OworCitpbnQgaW1hX2ZzX2luaXQodm9pZCkKK3sKKwlpbWFfZGlyID0gc2VjdXJpdHlmc19jcmVhdGVfZGlyKCJpbWEiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGltYV9kaXIpKQorCQlyZXR1cm4gLTE7CisKKwliaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMiLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lSR1JQLCBpbWFfZGlyLCBOVUxMLAorCQkJCSAgICZpbWFfbWVhc3VyZW1lbnRzX29wcyk7CisJaWYgKElTX0VSUihiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMpKQorCQlnb3RvIG91dDsKKworCWFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgiYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMiLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lSR1JQLCBpbWFfZGlyLCBOVUxMLAorCQkJCSAgICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wcyk7CisJaWYgKElTX0VSUihhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cykpCisJCWdvdG8gb3V0OworCisJcnVudGltZV9tZWFzdXJlbWVudHNfY291bnQgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJydW50aW1lX21lYXN1cmVtZW50c19jb3VudCIsCisJCQkJICAgU19JUlVTUiB8IFNfSVJHUlAsIGltYV9kaXIsIE5VTEwsCisJCQkJICAgJmltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzKTsKKwlpZiAoSVNfRVJSKHJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50KSkKKwkJZ290byBvdXQ7CisKKwl2aW9sYXRpb25zID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgidmlvbGF0aW9ucyIsIFNfSVJVU1IgfCBTX0lSR1JQLAorCQkJCSAgIGltYV9kaXIsIE5VTEwsICZpbWFfaHRhYmxlX3Zpb2xhdGlvbnNfb3BzKTsKKwlpZiAoSVNfRVJSKHZpb2xhdGlvbnMpKQorCQlnb3RvIG91dDsKKworCWltYV9wb2xpY3kgPSBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJwb2xpY3kiLAorCQkJCQkgICAgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lXVVNSLAorCQkJCQkgICAgaW1hX2RpciwgTlVMTCwKKwkJCQkJICAgICZpbWFfbWVhc3VyZV9wb2xpY3lfb3BzKTsKKwlpZiAoSVNfRVJSKGltYV9wb2xpY3kpKQorCQlnb3RvIG91dDsKKworCXJldHVybiAwOworb3V0OgorCXNlY3VyaXR5ZnNfcmVtb3ZlKHJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50KTsKKwlzZWN1cml0eWZzX3JlbW92ZShhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfZGlyKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfcG9saWN5KTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19leGl0IGltYV9mc19jbGVhbnVwKHZvaWQpCit7CisJc2VjdXJpdHlmc19yZW1vdmUodmlvbGF0aW9ucyk7CisJc2VjdXJpdHlmc19yZW1vdmUocnVudGltZV9tZWFzdXJlbWVudHNfY291bnQpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9kaXIpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9wb2xpY3kpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzlmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9paW50LmMKKyAqIAktIGltcGxlbWVudHMgdGhlIElNQSBob29rczogaW1hX2lub2RlX2FsbG9jLCBpbWFfaW5vZGVfZnJlZQorICoJLSBjYWNoZSBpbnRlZ3JpdHkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKgkgIHVzaW5nIGEgcmFkaXggdHJlZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgorI2luY2x1ZGUgImltYS5oIgorCisjZGVmaW5lIGltYV9paW50X2RlbGV0ZSBpbWFfaW5vZGVfZnJlZQorCitSQURJWF9UUkVFKGltYV9paW50X3N0b3JlLCBHRlBfQVRPTUlDKTsKK0RFRklORV9TUElOTE9DSyhpbWFfaWludF9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppaW50X2NhY2hlIF9fcmVhZF9tb3N0bHk7CisKKy8qIGltYV9paW50X2ZpbmRfZ2V0IC0gcmV0dXJuIHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICoKKyAqIGltYV9paW50X2ZpbmRfZ2V0IGdldHMgYSByZWZlcmVuY2UgdG8gdGhlIGlpbnQuIENhbGxlciBtdXN0CisgKiByZW1lbWJlciB0byBwdXQgdGhlIGlpbnQgcmVmZXJlbmNlLgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJcmN1X3JlYWRfbG9jaygpOworCWlpbnQgPSByYWRpeF90cmVlX2xvb2t1cCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlKTsKKwlpZiAoIWlpbnQpCisJCWdvdG8gb3V0OworCWtyZWZfZ2V0KCZpaW50LT5yZWZjb3VudCk7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGlpbnQ7Cit9CisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZQorICogZnJvbSB0aGUgaWludF9jYWNoZSBzbGFiLCBpbml0aWFsaXplIHRoZSBpaW50LCBhbmQKKyAqIGluc2VydCBpdCBpbnRvIHRoZSByYWRpeCB0cmVlLgorICoKKyAqIE9uIHN1Y2Nlc3MgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaWludDsgb24gZmFpbHVyZSByZXR1cm4gTlVMTC4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBOVUxMOworCWludCByYyA9IDA7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIGlpbnQ7CisJaWludCA9IGttZW1fY2FjaGVfYWxsb2MoaWludF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gaWludDsKKworCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlyYyA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUsIGlpbnQpOworCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKK291dDoKKwlpZiAocmMgPCAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKKwkJaWYgKHJjID09IC1FRVhJU1QpIHsKKwkJCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CisJCQlpaW50ID0gcmFkaXhfdHJlZV9sb29rdXAoJmltYV9paW50X3N0b3JlLAorCQkJCQkJICh1bnNpZ25lZCBsb25nKWlub2RlKTsKKwkJCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKKwkJfSBlbHNlCisJCQlpaW50ID0gTlVMTDsKKwl9CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCXJldHVybiBpaW50OworfQorCisvKioKKyAqIGltYV9pbm9kZV9hbGxvYyAtIGFsbG9jYXRlIGFuIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gdGhlIGlub2RlCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgMSBvbiBmYWlsdXJlLgorICovCitpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJaWludCA9IGltYV9paW50X2luc2VydChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyogaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0IC0gZ2V0IHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICoKKyAqIE1vc3QgaW5zZXJ0aW9ucyBhcmUgZG9uZSBhdCBpbm9kZV9hbGxvYywgZXhjZXB0IHRob3NlIGFsbG9jYXRlZAorICogYmVmb3JlIGxhdGVfaW5pdGNhbGwuIFdoZW4gdGhlIGlpbnQgZG9lcyBub3QgZXhpc3QsIGFsbG9jYXRlIGl0LAorICogaW5pdGlhbGl6ZSBhbmQgaW5zZXJ0IGl0LCBhbmQgaW5jcmVtZW50IHRoZSBpaW50IHJlZmNvdW50LgorICoKKyAqIChDYW4ndCBpbml0aWFsaXplIGF0IHNlY3VyaXR5X2luaXRjYWxsIGJlZm9yZSBhbnkgaW5vZGVzIGFyZQorICogYWxsb2NhdGVkLCBnb3QgdG8gd2FpdCBhdCBsZWFzdCB1bnRpbCBwcm9jX2luaXQuKQorICoKKyAqICBSZXR1cm4gdGhlIGlpbnQuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gTlVMTDsKKworCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7CisJaWYgKGlpbnQpCisJCXJldHVybiBpaW50OworCisJaWludCA9IGltYV9paW50X2luc2VydChpbm9kZSk7CisJaWYgKGlpbnQpCisJCWtyZWZfZ2V0KCZpaW50LT5yZWZjb3VudCk7CisKKwlyZXR1cm4gaWludDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldCk7CisKKy8qIGlpbnRfZnJlZSAtIGNhbGxlZCB3aGVuIHRoZSBpaW50IHJlZmNvdW50IGdvZXMgdG8gemVybyAqLwordm9pZCBpaW50X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBpbWFfaWludF9jYWNoZSwKKwkJCQkJCSAgIHJlZmNvdW50KTsKKwlpaW50LT52ZXJzaW9uID0gMDsKKwlpaW50LT5mbGFncyA9IDBVTDsKKwlpZiAoaWludC0+cmVhZGNvdW50ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYWRjb3VudDogJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBpaW50LT5yZWFkY291bnQpOworCQlpaW50LT5yZWFkY291bnQgPSAwOworCX0KKwlpZiAoaWludC0+d3JpdGVjb3VudCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3cml0ZWNvdW50OiAlbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGlpbnQtPndyaXRlY291bnQpOworCQlpaW50LT53cml0ZWNvdW50ID0gMDsKKwl9CisJaWYgKGlpbnQtPm9wZW5jb3VudCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBvcGVuY291bnQ6ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgaWludC0+b3BlbmNvdW50KTsKKwkJaWludC0+b3BlbmNvdW50ID0gMDsKKwl9CisJa3JlZl9zZXQoJmlpbnQtPnJlZmNvdW50LCAxKTsKKwlrbWVtX2NhY2hlX2ZyZWUoaWludF9jYWNoZSwgaWludCk7Cit9CisKK3ZvaWQgaWludF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwKKwkJCQkJCSAgIHN0cnVjdCBpbWFfaWludF9jYWNoZSwgcmN1KTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7Cit9CisKKy8qKgorICogaW1hX2lpbnRfZGVsZXRlIC0gY2FsbGVkIG9uIGludGVncml0eV9pbm9kZV9mcmVlCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gdGhlIGlub2RlCisgKgorICogRnJlZSB0aGUgaW50ZWdyaXR5IGluZm9ybWF0aW9uKGlpbnQpIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4KKyAqLwordm9pZCBpbWFfaWludF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CisJaWludCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOworCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlpZiAoaWludCkKKwkJY2FsbF9yY3UoJmlpbnQtPnJjdSwgaWludF9yY3VfZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gZm9vOworCisJbWVtc2V0KGlpbnQsIDAsIHNpemVvZiAqaWludCk7CisJaWludC0+dmVyc2lvbiA9IDA7CisJaWludC0+ZmxhZ3MgPSAwVUw7CisJbXV0ZXhfaW5pdCgmaWludC0+bXV0ZXgpOworCWlpbnQtPnJlYWRjb3VudCA9IDA7CisJaWludC0+d3JpdGVjb3VudCA9IDA7CisJaWludC0+b3BlbmNvdW50ID0gMDsKKwlrcmVmX3NldCgmaWludC0+cmVmY291bnQsIDEpOworfQorCit2b2lkIGltYV9paW50Y2FjaGVfaW5pdCh2b2lkKQoreworCWlpbnRfY2FjaGUgPQorCSAgICBrbWVtX2NhY2hlX2NyZWF0ZSgiaWludF9jYWNoZSIsIHNpemVvZihzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUpLCAwLAorCQkJICAgICAgU0xBQl9QQU5JQywgaW5pdF9vbmNlKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2luaXQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBiYjhjCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaW5pdC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFJlaW5lciBTYWlsZXIgICAgICA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogTGVlbmRlcnQgdmFuIERvb3JuIDxsZWVuZGVydEB3YXRzb24uaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgICAgICAgICA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2luaXQuYworICogICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgImltYS5oIgorCisvKiBuYW1lIGZvciBib290IGFnZ3JlZ2F0ZSBlbnRyeSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmJvb3RfYWdncmVnYXRlX25hbWUgPSAiYm9vdF9hZ2dyZWdhdGUiOworaW50IGltYV91c2VkX2NoaXA7CisKKy8qIEFkZCB0aGUgYm9vdCBhZ2dyZWdhdGUgdG8gdGhlIElNQSBtZWFzdXJlbWVudCBsaXN0IGFuZCBleHRlbmQKKyAqIHRoZSBQQ1IgcmVnaXN0ZXIuCisgKgorICogQ2FsY3VsYXRlIHRoZSBib290IGFnZ3JlZ2F0ZSwgYSBTSEExIG92ZXIgdHBtIHJlZ2lzdGVycyAwLTcsCisgKiBhc3N1bWluZyBhIFRQTSBjaGlwIGV4aXN0cywgYW5kIHplcm9lcyBpZiB0aGUgVFBNIGNoaXAgZG9lcyBub3QKKyAqIGV4aXN0LiAgQWRkIHRoZSBib290IGFnZ3JlZ2F0ZSBtZWFzdXJlbWVudCB0byB0aGUgbWVhc3VyZW1lbnQKKyAqIGxpc3QgYW5kIGV4dGVuZCB0aGUgUENSIHJlZ2lzdGVyLgorICoKKyAqIElmIGEgdHBtIGNoaXAgZG9lcyBub3QgZXhpc3QsIGluZGljYXRlIHRoZSBjb3JlIHJvb3Qgb2YgdHJ1c3QgaXMKKyAqIG5vdCBoYXJkd2FyZSBiYXNlZCBieSBpbnZhbGlkYXRpbmcgdGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUuCisgKiAoVGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUgaXMgaW52YWxpZGF0ZWQgYnkgYWRkaW5nIG9uZSB2YWx1ZSB0bworICogdGhlIG1lYXN1cmVtZW50IGxpc3QgYW5kIGV4dGVuZGluZyB0aGUgYWdncmVnYXRlIFBDUiB2YWx1ZSB3aXRoCisgKiBhIGRpZmZlcmVudCB2YWx1ZS4pIFZpb2xhdGlvbnMgYWRkIGEgemVybyBlbnRyeSB0byB0aGUgbWVhc3VyZW1lbnQKKyAqIGxpc3QgYW5kIGV4dGVuZCB0aGUgYWdncmVnYXRlIFBDUiB2YWx1ZSB3aXRoIGZmLi4uZmYncy4KKyAqLworc3RhdGljIHZvaWQgaW1hX2FkZF9ib290X2FnZ3JlZ2F0ZSh2b2lkKQoreworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworCWNvbnN0IGNoYXIgKm9wID0gImFkZF9ib290X2FnZ3JlZ2F0ZSI7CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiRU5PTUVNIjsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlpbnQgdmlvbGF0aW9uID0gMTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJZ290byBlcnJfb3V0OworCisJbWVtc2V0KCZlbnRyeS0+dGVtcGxhdGUsIDAsIHNpemVvZihlbnRyeS0+dGVtcGxhdGUpKTsKKwlzdHJuY3B5KGVudHJ5LT50ZW1wbGF0ZS5maWxlX25hbWUsIGJvb3RfYWdncmVnYXRlX25hbWUsCisJCUlNQV9FVkVOVF9OQU1FX0xFTl9NQVgpOworCWlmIChpbWFfdXNlZF9jaGlwKSB7CisJCXZpb2xhdGlvbiA9IDA7CisJCXJlc3VsdCA9IGltYV9jYWxjX2Jvb3RfYWdncmVnYXRlKGVudHJ5LT50ZW1wbGF0ZS5kaWdlc3QpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJYXVkaXRfY2F1c2UgPSAiaGFzaGluZ19lcnJvciI7CisJCQlrZnJlZShlbnRyeSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwl9CisJcmVzdWx0ID0gaW1hX3N0b3JlX3RlbXBsYXRlKGVudHJ5LCB2aW9sYXRpb24sIE5VTEwpOworCWlmIChyZXN1bHQgPCAwKQorCQlrZnJlZShlbnRyeSk7CisJcmV0dXJuOworZXJyX291dDoKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIE5VTEwsIGJvb3RfYWdncmVnYXRlX25hbWUsIG9wLAorCQkJICAgIGF1ZGl0X2NhdXNlLCByZXN1bHQsIDApOworfQorCitpbnQgaW1hX2luaXQodm9pZCkKK3sKKwl1OCBwY3JfaVtJTUFfRElHRVNUX1NJWkVdOworCWludCByYzsKKworCWltYV91c2VkX2NoaXAgPSAwOworCXJjID0gdHBtX3Bjcl9yZWFkKFRQTV9BTllfTlVNLCAwLCBwY3JfaSk7CisJaWYgKHJjID09IDApCisJCWltYV91c2VkX2NoaXAgPSAxOworCisJaWYgKCFpbWFfdXNlZF9jaGlwKQorCQlwcl9pbmZvKCJObyBUUE0gY2hpcCBmb3VuZCwgYWN0aXZhdGluZyBUUE0tYnlwYXNzIVxuIik7CisKKwlpbWFfYWRkX2Jvb3RfYWdncmVnYXRlKCk7CS8qIGJvb3QgYWdncmVnYXRlIG11c3QgYmUgZmlyc3QgZW50cnkgKi8KKwlpbWFfaW5pdF9wb2xpY3koKTsKKworCXJldHVybiBpbWFfZnNfaW5pdCgpOworfQorCit2b2lkIF9fZXhpdCBpbWFfY2xlYW51cCh2b2lkKQoreworCWltYV9mc19jbGVhbnVwKCk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNzI2NgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYwpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogU2VyZ2UgSGFsbHluIDxzZXJ1ZUB1cy5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGt5bGVuZUB1cy5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX21haW4uYworICogICAgICAgICAgICAgaW1wbGVtZW50cyB0aGUgSU1BIGhvb2tzOiBpbWFfYnBybV9jaGVjaywgaW1hX2ZpbGVfbW1hcCwKKyAqICAgICAgICAgICAgIGFuZCBpbWFfcGF0aF9jaGVjay4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKKworaW50IGltYV9pbml0aWFsaXplZDsKKworY2hhciAqaW1hX2hhc2ggPSAic2hhMSI7CitzdGF0aWMgaW50IF9faW5pdCBoYXNoX3NldHVwKGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpvcCA9ICJoYXNoX3NldHVwIjsKKwljb25zdCBjaGFyICpoYXNoID0gInNoYTEiOworCWludCByZXN1bHQgPSAwOworCWludCBhdWRpdF9pbmZvID0gMDsKKworCWlmIChzdHJuY21wKHN0ciwgIm1kNSIsIDMpID09IDApIHsKKwkJaGFzaCA9ICJtZDUiOworCQlpbWFfaGFzaCA9IHN0cjsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAic2hhMSIsIDQpICE9IDApIHsKKwkJaGFzaCA9ICJpbnZhbGlkX2hhc2hfdHlwZSI7CisJCXJlc3VsdCA9IDE7CisJfQorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX0hBU0gsIE5VTEwsIE5VTEwsIG9wLCBoYXNoLAorCQkJICAgIHJlc3VsdCwgYXVkaXRfaW5mbyk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJpbWFfaGFzaD0iLCBoYXNoX3NldHVwKTsKKworLyoqCisgKiBpbWFfZmlsZV9mcmVlIC0gY2FsbGVkIG9uIF9fZnB1dCgpCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZSBiZWluZyBmcmVlZAorICoKKyAqIEZsYWcgZmlsZXMgdGhhdCBjaGFuZ2VkLCBiYXNlZCBvbiBpX3ZlcnNpb247CisgKiBhbmQgZGVjcmVtZW50IHRoZSBpaW50IHJlYWRjb3VudC93cml0ZWNvdW50LgorICovCit2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm47CisJaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlpZiAoaWludC0+b3BlbmNvdW50IDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiAlcyBvcGVuL2ZyZWUgaW1iYWxhbmNlIChyOiVsZCB3OiVsZCBvOiVsZCBmOiVsZClcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJICAgICAgIGlpbnQtPnJlYWRjb3VudCwgaWludC0+d3JpdGVjb3VudCwKKwkJICAgICAgIGlpbnQtPm9wZW5jb3VudCwgYXRvbWljX2xvbmdfcmVhZCgmZmlsZS0+Zl9jb3VudCkpOworCQlpZiAoIShpaW50LT5mbGFncyAmIElNQV9JSU5UX0RVTVBfU1RBQ0spKSB7CisJCQlkdW1wX3N0YWNrKCk7CisJCQlpaW50LT5mbGFncyB8PSBJTUFfSUlOVF9EVU1QX1NUQUNLOworCQl9CisJfQorCWlpbnQtPm9wZW5jb3VudC0tOworCisJaWYgKChmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSkgPT0gRk1PREVfUkVBRCkKKwkJaWludC0+cmVhZGNvdW50LS07CisKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJaWludC0+d3JpdGVjb3VudC0tOworCQlpZiAoaWludC0+d3JpdGVjb3VudCA9PSAwKSB7CisJCQlpZiAoaWludC0+dmVyc2lvbiAhPSBpbm9kZS0+aV92ZXJzaW9uKQorCQkJCWlpbnQtPmZsYWdzICY9IH5JTUFfTUVBU1VSRUQ7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworfQorCisvKiBpbWFfcmVhZF93cml0ZV9jaGVjayAtIHJlZmxlY3QgcG9zc2libGUgcmVhZGluZy93cml0aW5nIGVycm9ycyBpbiB0aGUgUENSLgorICoKKyAqIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWQsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCisgKiB0aGUgZmlsZSBjb3VsZCBjaGFuZ2UsIHJlc3VsdGluZyBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCisgKgorICogT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlLCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHJlYWQsIHJlc3VsdHMKKyAqIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KKyAqCisgKiBJbiBlaXRoZXIgY2FzZSBpbnZhbGlkYXRlIHRoZSBQQ1IuCisgKi8KK2VudW0gaWludF9wY3JfZXJyb3IgeyBUT01UT1UsIE9QRU5fV1JJVEVSUyB9Oworc3RhdGljIHZvaWQgaW1hX3JlYWRfd3JpdGVfY2hlY2soZW51bSBpaW50X3Bjcl9lcnJvciBlcnJvciwKKwkJCQkgc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LAorCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSBUT01UT1U6CisJCWlmIChpaW50LT5yZWFkY291bnQgPiAwKQorCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAorCQkJCQkgICJUb01Ub1UiKTsKKwkJYnJlYWs7CisJY2FzZSBPUEVOX1dSSVRFUlM6CisJCWlmIChpaW50LT53cml0ZWNvdW50ID4gMCkKKwkJCWltYV9hZGRfdmlvbGF0aW9uKGlub2RlLCBmaWxlbmFtZSwgImludmFsaWRfcGNyIiwKKwkJCQkJICAib3Blbl93cml0ZXJzIik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBnZXRfcGF0aF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCWludCByYyA9IDA7CisKKwlpZiAoSVNfRVJSKGZpbGUpKSB7CisJCXByX2luZm8oIiVzIGRlbnRyeV9vcGVuIGZhaWxlZFxuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCWlpbnQtPm9wZW5jb3VudCsrOworCWlpbnQtPnJlYWRjb3VudCsrOworCisJcmMgPSBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChpaW50LCBmaWxlKTsKKwlpZiAoIXJjKQorCQlpbWFfc3RvcmVfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZmlsZW5hbWUpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBpbWFfcGF0aF9jaGVjayAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KKyAqIEBwYXRoOiBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHBhdGggdG8gYmUgbWVhc3VyZWQKKyAqIEBtYXNrOiBjb250YWlucyBNQVlfUkVBRCwgTUFZX1dSSVRFIG9yIE1BWV9FWEVDVVRFCisgKgorICogTWVhc3VyZSB0aGUgZmlsZSBiZWluZyBvcGVuIGZvciByZWFkb25seSwgYmFzZWQgb24gdGhlCisgKiBpbWFfbXVzdF9tZWFzdXJlKCkgcG9saWN5IGRlY2lzaW9uLgorICoKKyAqIEtlZXAgcmVhZC93cml0ZSBjb3VudGVycyBmb3IgYWxsIGZpbGVzLCBidXQgb25seQorICogaW52YWxpZGF0ZSB0aGUgUENSIGZvciBtZWFzdXJlZCBmaWxlczoKKyAqIAktIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSB3aGVuIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwKKyAqCSAgcmVzdWx0cyBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCisgKgktIE9wZW5pbmcgYSBmaWxlIGZvciByZWFkIHdoZW4gYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIAkgIGNvdWxkIHJlc3VsdCBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogKEJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIGFwcHJhaXNlX21lYXN1cmVtZW50KCkuKQorICovCitpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLT5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwlpbnQgcmM7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlpaW50LT5vcGVuY291bnQrKzsKKwlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpIHx8IChtYXNrID09IDApKQorCQlpaW50LT53cml0ZWNvdW50Kys7CisJZWxzZSBpZiAobWFzayAmIChNQVlfUkVBRCB8IE1BWV9FWEVDKSkKKwkJaWludC0+cmVhZGNvdW50Kys7CisKKwlyYyA9IGltYV9tdXN0X21lYXN1cmUoaWludCwgaW5vZGUsIE1BWV9SRUFELCBQQVRIX0NIRUNLKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgobWFzayAmIE1BWV9XUklURSkgfHwgKG1hc2sgPT0gMCkpCisJCWltYV9yZWFkX3dyaXRlX2NoZWNrKFRPTVRPVSwgaWludCwgaW5vZGUsCisJCQkJICAgICBwYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lKTsKKworCWlmICgobWFzayAmIChNQVlfV1JJVEUgfCBNQVlfUkVBRCB8IE1BWV9FWEVDKSkgIT0gTUFZX1JFQUQpCisJCWdvdG8gb3V0OworCisJaW1hX3JlYWRfd3JpdGVfY2hlY2soT1BFTl9XUklURVJTLCBpaW50LCBpbm9kZSwKKwkJCSAgICAgcGF0aC0+ZGVudHJ5LT5kX25hbWUubmFtZSk7CisJaWYgKCEoaWludC0+ZmxhZ3MgJiBJTUFfTUVBU1VSRUQpKSB7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGRnZXQocGF0aC0+ZGVudHJ5KTsKKwkJc3RydWN0IHZmc21vdW50ICptbnQgPSBtbnRnZXQocGF0aC0+bW50KTsKKworCQlmaWxlID0gZGVudHJ5X29wZW4oZGVudHJ5LCBtbnQsIE9fUkRPTkxZLCBjdXJyZW50LT5jcmVkKTsKKwkJcmMgPSBnZXRfcGF0aF9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7CisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfbWVhc3VyZW1lbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKwlpbnQgcmM7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlyYyA9IGltYV9tdXN0X21lYXN1cmUoaWludCwgaW5vZGUsIG1hc2ssIGZ1bmN0aW9uKTsKKwlpZiAocmMgIT0gMCkKKwkJZ290byBvdXQ7CisKKwlyYyA9IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KGlpbnQsIGZpbGUpOworCWlmICghcmMpCisJCWltYV9zdG9yZV9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBmaWxlbmFtZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgb3BlbmNvdW50X2dldChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybjsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJaWludC0+b3BlbmNvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7Cit9CisKKy8qKgorICogaW1hX2ZpbGVfbW1hcCAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KKyAqIEBmaWxlOiBwb2ludGVyIHRvIHRoZSBmaWxlIHRvIGJlIG1lYXN1cmVkIChNYXkgYmUgTlVMTCkKKyAqIEBwcm90OiBjb250YWlucyB0aGUgcHJvdGVjdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCBieSB0aGUga2VybmVsLgorICoKKyAqIE1lYXN1cmUgZmlsZXMgYmVpbmcgbW1hcHBlZCBleGVjdXRhYmxlIGJhc2VkIG9uIHRoZSBpbWFfbXVzdF9tZWFzdXJlKCkKKyAqIHBvbGljeSBkZWNpc2lvbi4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiAoQmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgYXBwcmFpc2VfbWVhc3VyZW1lbnQoKS4pCisgKi8KK2ludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJaW50IHJjOworCisJaWYgKCFmaWxlKQorCQlyZXR1cm4gMDsKKwlpZiAocHJvdCAmIFBST1RfRVhFQykKKwkJcmMgPSBwcm9jZXNzX21lYXN1cmVtZW50KGZpbGUsIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkJIE1BWV9FWEVDLCBGSUxFX01NQVApOworCXJldHVybiAwOworfQorCisvKgorICogaW1hX3NobV9jaGVjayAtIElQQyBzaG0gYW5kIHNobWF0IGNyZWF0ZS9mcHV0IGEgZmlsZQorICoKKyAqIE1haW50YWluIHRoZSBvcGVuY291bnQgZm9yIHRoZXNlIGZpbGVzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkKKyAqIGltYmFsYW5jZSBtZXNzYWdlcy4KKyAqLwordm9pZCBpbWFfc2htX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlKQoreworCW9wZW5jb3VudF9nZXQoZmlsZSk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGltYV9icHJtX2NoZWNrIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQGJwcm06IGNvbnRhaW5zIHRoZSBsaW51eF9iaW5wcm0gc3RydWN0dXJlCisgKgorICogVGhlIE9TIHByb3RlY3RzIGFnYWluc3QgYW4gZXhlY3V0YWJsZSBmaWxlLCBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogZnJvbSBiZWluZyBleGVjdXRlZCBpbiBkZW55X3dyaXRlX2FjY2VzcygpIGFuZCBhbiBleGVjdXRhYmxlIGZpbGUsCisgKiBhbHJlYWR5IG9wZW4gZm9yIGV4ZWN1dGUsIGZyb20gYmVpbmcgbW9kaWZpZWQgaW4gZ2V0X3dyaXRlX2FjY2VzcygpLgorICogU28gd2UgY2FuIGJlIGNlcnRhaW4gdGhhdCB3aGF0IHdlIHZlcmlmeSBhbmQgbWVhc3VyZSBoZXJlIGlzIGFjdHVhbGx5CisgKiB3aGF0IGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIChCYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiBhcHByYWlzZV9tZWFzdXJlbWVudCgpLikKKyAqLworaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJaW50IHJjOworCisJcmMgPSBwcm9jZXNzX21lYXN1cmVtZW50KGJwcm0tPmZpbGUsIGJwcm0tPmZpbGVuYW1lLAorCQkJCSBNQVlfRVhFQywgQlBSTV9DSEVDSyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfaW1hKHZvaWQpCit7CisJaW50IGVycm9yOworCisJaW1hX2lpbnRjYWNoZV9pbml0KCk7CisJZXJyb3IgPSBpbWFfaW5pdCgpOworCWltYV9pbml0aWFsaXplZCA9IDE7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9pbWEodm9pZCkKK3sKKwlpbWFfY2xlYW51cCgpOworfQorCitsYXRlX2luaXRjYWxsKGluaXRfaW1hKTsJLyogU3RhcnQgSU1BIGFmdGVyIHRoZSBUUE0gaXMgYXZhaWxhYmxlICovCisKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI5MWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogaW1hX3BvbGljeS5jCisgKiAJLSBpbml0aWFsaXplIGRlZmF1bHQgbWVhc3VyZSBwb2xpY3kgcnVsZXMKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorCisjaW5jbHVkZSAiaW1hLmgiCisKKy8qIGZsYWdzIGRlZmluaXRpb25zICovCisjZGVmaW5lIElNQV9GVU5DIAkweDAwMDEKKyNkZWZpbmUgSU1BX01BU0sgCTB4MDAwMgorI2RlZmluZSBJTUFfRlNNQUdJQwkweDAwMDQKKyNkZWZpbmUgSU1BX1VJRAkJMHgwMDA4CisKK2VudW0gaW1hX2FjdGlvbiB7IFVOS05PV04gPSAtMSwgRE9OVF9NRUFTVVJFID0gMCwgTUVBU1VSRSB9OworCisjZGVmaW5lIE1BWF9MU01fUlVMRVMgNgorZW51bSBsc21fcnVsZV90eXBlcyB7IExTTV9PQkpfVVNFUiwgTFNNX09CSl9ST0xFLCBMU01fT0JKX1RZUEUsCisJTFNNX1NVQkpfVVNFUiwgTFNNX1NVQkpfUk9MRSwgTFNNX1NVQkpfVFlQRQorfTsKKworc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwllbnVtIGltYV9hY3Rpb24gYWN0aW9uOworCXVuc2lnbmVkIGludCBmbGFnczsKKwllbnVtIGltYV9ob29rcyBmdW5jOworCWludCBtYXNrOworCXVuc2lnbmVkIGxvbmcgZnNtYWdpYzsKKwl1aWRfdCB1aWQ7CisJc3RydWN0IHsKKwkJdm9pZCAqcnVsZTsJLyogTFNNIGZpbGUgbWV0YWRhdGEgc3BlY2lmaWMgKi8KKwkJaW50IHR5cGU7CS8qIGF1ZGl0IHR5cGUgKi8KKwl9IGxzbVtNQVhfTFNNX1JVTEVTXTsKK307CisKKy8qIFdpdGhvdXQgTFNNIHNwZWNpZmljIGtub3dsZWRnZSwgdGhlIGRlZmF1bHQgcG9saWN5IGNhbiBvbmx5IGJlCisgKiB3cml0dGVuIGluIHRlcm1zIG9mIC5hY3Rpb24sIC5mdW5jLCAubWFzaywgLmZzbWFnaWMsIGFuZCAudWlkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSBkZWZhdWx0X3J1bGVzW10gPSB7CisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBQUk9DX1NVUEVSX01BR0lDLAorCSAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBTWVNGU19NQUdJQywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBERUJVR0ZTX01BR0lDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFRNUEZTX01BR0lDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFNFQ1VSSVRZRlNfTUFHSUMsCisJIC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IDB4Rjk3Q0ZGOEMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IEZJTEVfTU1BUCwubWFzayA9IE1BWV9FWEVDLAorCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLfSwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBCUFJNX0NIRUNLLC5tYXNrID0gTUFZX0VYRUMsCisJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0t9LAorCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IFBBVEhfQ0hFQ0ssLm1hc2sgPSBNQVlfUkVBRCwudWlkID0gMCwKKwkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTSyB8IElNQV9VSUR9Cit9OworCitzdGF0aWMgTElTVF9IRUFEKG1lYXN1cmVfZGVmYXVsdF9ydWxlcyk7CitzdGF0aWMgTElTVF9IRUFEKG1lYXN1cmVfcG9saWN5X3J1bGVzKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICppbWFfbWVhc3VyZTsKKworc3RhdGljIERFRklORV9NVVRFWChpbWFfbWVhc3VyZV9tdXRleCk7CisKKy8qKgorICogaW1hX21hdGNoX3J1bGVzIC0gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaW5vZGUgbWF0Y2hlcyB0aGUgbWVhc3VyZSBydWxlLgorICogQHJ1bGU6IGEgcG9pbnRlciB0byBhIHJ1bGUKKyAqIEBpbm9kZTogYSBwb2ludGVyIHRvIGFuIGlub2RlCisgKiBAZnVuYzogTElNIGhvb2sgaWRlbnRpZmllcgorICogQG1hc2s6IHJlcXVlc3RlZCBhY3Rpb24gKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0FQUEVORCB8IE1BWV9FWEVDKQorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBydWxlIG1hdGNoLCBmYWxzZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgYm9vbCBpbWFfbWF0Y2hfcnVsZXMoc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKnJ1bGUsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBpbWFfaG9va3MgZnVuYywgaW50IG1hc2spCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCWludCBpOworCisJaWYgKChydWxlLT5mbGFncyAmIElNQV9GVU5DKSAmJiBydWxlLT5mdW5jICE9IGZ1bmMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX01BU0spICYmIHJ1bGUtPm1hc2sgIT0gbWFzaykKKwkJcmV0dXJuIGZhbHNlOworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfRlNNQUdJQykKKwkgICAgJiYgcnVsZS0+ZnNtYWdpYyAhPSBpbm9kZS0+aV9zYi0+c19tYWdpYykKKwkJcmV0dXJuIGZhbHNlOworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfVUlEKSAmJiBydWxlLT51aWQgIT0gdHNrLT5jcmVkLT51aWQpCisJCXJldHVybiBmYWxzZTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xTTV9SVUxFUzsgaSsrKSB7CisJCWludCByYzsKKwkJdTMyIG9zaWQsIHNpZDsKKworCQlpZiAoIXJ1bGUtPmxzbVtpXS5ydWxlKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgTFNNX09CSl9VU0VSOgorCQljYXNlIExTTV9PQkpfUk9MRToKKwkJY2FzZSBMU01fT0JKX1RZUEU6CisJCQlzZWN1cml0eV9pbm9kZV9nZXRzZWNpZChpbm9kZSwgJm9zaWQpOworCQkJcmMgPSBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaChvc2lkLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS50eXBlLAorCQkJCQkJCUFVRElUX0VRVUFMLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS5ydWxlLAorCQkJCQkJCU5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgTFNNX1NVQkpfVVNFUjoKKwkJY2FzZSBMU01fU1VCSl9ST0xFOgorCQljYXNlIExTTV9TVUJKX1RZUEU6CisJCQlzZWN1cml0eV90YXNrX2dldHNlY2lkKHRzaywgJnNpZCk7CisJCQlyYyA9IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoKHNpZCwKKwkJCQkJCQlydWxlLT5sc21baV0udHlwZSwKKwkJCQkJCQlBVURJVF9FUVVBTCwKKwkJCQkJCQlydWxlLT5sc21baV0ucnVsZSwKKwkJCQkJCQlOVUxMKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWlmICghcmMpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGltYV9tYXRjaF9wb2xpY3kgLSBkZWNpc2lvbiBiYXNlZCBvbiBMU00gYW5kIG90aGVyIGNvbmRpdGlvbnMKKyAqIEBpbm9kZTogcG9pbnRlciB0byBhbiBpbm9kZSBmb3Igd2hpY2ggdGhlIHBvbGljeSBkZWNpc2lvbiBpcyBiZWluZyBtYWRlCisgKiBAZnVuYzogSU1BIGhvb2sgaWRlbnRpZmllcgorICogQG1hc2s6IHJlcXVlc3RlZCBhY3Rpb24gKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0FQUEVORCB8IE1BWV9FWEVDKQorICoKKyAqIE1lYXN1cmUgZGVjaXNpb24gYmFzZWQgb24gZnVuYy9tYXNrL2ZzbWFnaWMgYW5kIExTTShzdWJqL29iai90eXBlKQorICogY29uZGl0aW9ucy4KKyAqCisgKiAoVGhlcmUgaXMgbm8gbmVlZCBmb3IgbG9ja2luZyB3aGVuIHdhbGtpbmcgdGhlIHBvbGljeSBsaXN0LAorICogYXMgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJlIG5ldmVyIGRlbGV0ZWQsIG5vciBkb2VzIHRoZSBsaXN0CisgKiBjaGFuZ2UuKQorICovCitpbnQgaW1hX21hdGNoX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBpbWFfbWVhc3VyZSwgbGlzdCkgeworCQlib29sIHJjOworCisJCXJjID0gaW1hX21hdGNoX3J1bGVzKGVudHJ5LCBpbm9kZSwgZnVuYywgbWFzayk7CisJCWlmIChyYykKKwkJCXJldHVybiBlbnRyeS0+YWN0aW9uOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbWFfaW5pdF9wb2xpY3kgLSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IG1lYXN1cmUgcnVsZXMuCisgKgorICogaW1hX21lYXN1cmUgcG9pbnRzIHRvIGVpdGhlciB0aGUgbWVhc3VyZV9kZWZhdWx0X3J1bGVzIG9yIHRoZQorICogdGhlIG5ldyBtZWFzdXJlX3BvbGljeV9ydWxlcy4KKyAqLwordm9pZCBpbWFfaW5pdF9wb2xpY3kodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlZmF1bHRfcnVsZXMpOyBpKyspCisJCWxpc3RfYWRkX3RhaWwoJmRlZmF1bHRfcnVsZXNbaV0ubGlzdCwgJm1lYXN1cmVfZGVmYXVsdF9ydWxlcyk7CisJaW1hX21lYXN1cmUgPSAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzOworfQorCisvKioKKyAqIGltYV91cGRhdGVfcG9saWN5IC0gdXBkYXRlIGRlZmF1bHRfcnVsZXMgd2l0aCBuZXcgbWVhc3VyZSBydWxlcworICoKKyAqIENhbGxlZCBvbiBmaWxlIC5yZWxlYXNlIHRvIHVwZGF0ZSB0aGUgZGVmYXVsdCBydWxlcyB3aXRoIGEgY29tcGxldGUgbmV3CisgKiBwb2xpY3kuICBPbmNlIHVwZGF0ZWQsIHRoZSBwb2xpY3kgaXMgbG9ja2VkLCBubyBhZGRpdGlvbmFsIHJ1bGVzIGNhbiBiZQorICogYWRkZWQgdG8gdGhlIHBvbGljeS4KKyAqLwordm9pZCBpbWFfdXBkYXRlX3BvbGljeSh2b2lkKQoreworCWNvbnN0IGNoYXIgKm9wID0gInBvbGljeV91cGRhdGUiOworCWNvbnN0IGNoYXIgKmNhdXNlID0gImFscmVhZHkgZXhpc3RzIjsKKwlpbnQgcmVzdWx0ID0gMTsKKwlpbnQgYXVkaXRfaW5mbyA9IDA7CisKKwlpZiAoaW1hX21lYXN1cmUgPT0gJm1lYXN1cmVfZGVmYXVsdF9ydWxlcykgeworCQlpbWFfbWVhc3VyZSA9ICZtZWFzdXJlX3BvbGljeV9ydWxlczsKKwkJY2F1c2UgPSAiY29tcGxldGUiOworCQlyZXN1bHQgPSAwOworCX0KKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkgICAgTlVMTCwgb3AsIGNhdXNlLCByZXN1bHQsIGF1ZGl0X2luZm8pOworfQorCitlbnVtIHsKKwlPcHRfZXJyID0gLTEsCisJT3B0X21lYXN1cmUgPSAxLCBPcHRfZG9udF9tZWFzdXJlLAorCU9wdF9vYmpfdXNlciwgT3B0X29ial9yb2xlLCBPcHRfb2JqX3R5cGUsCisJT3B0X3N1YmpfdXNlciwgT3B0X3N1Ympfcm9sZSwgT3B0X3N1YmpfdHlwZSwKKwlPcHRfZnVuYywgT3B0X21hc2ssIE9wdF9mc21hZ2ljLCBPcHRfdWlkCit9OworCitzdGF0aWMgbWF0Y2hfdGFibGVfdCBwb2xpY3lfdG9rZW5zID0geworCXtPcHRfbWVhc3VyZSwgIm1lYXN1cmUifSwKKwl7T3B0X2RvbnRfbWVhc3VyZSwgImRvbnRfbWVhc3VyZSJ9LAorCXtPcHRfb2JqX3VzZXIsICJvYmpfdXNlcj0lcyJ9LAorCXtPcHRfb2JqX3JvbGUsICJvYmpfcm9sZT0lcyJ9LAorCXtPcHRfb2JqX3R5cGUsICJvYmpfdHlwZT0lcyJ9LAorCXtPcHRfc3Vial91c2VyLCAic3Vial91c2VyPSVzIn0sCisJe09wdF9zdWJqX3JvbGUsICJzdWJqX3JvbGU9JXMifSwKKwl7T3B0X3N1YmpfdHlwZSwgInN1YmpfdHlwZT0lcyJ9LAorCXtPcHRfZnVuYywgImZ1bmM9JXMifSwKKwl7T3B0X21hc2ssICJtYXNrPSVzIn0sCisJe09wdF9mc21hZ2ljLCAiZnNtYWdpYz0lcyJ9LAorCXtPcHRfdWlkLCAidWlkPSVzIn0sCisJe09wdF9lcnIsIE5VTEx9Cit9OworCitzdGF0aWMgaW50IGltYV9sc21fcnVsZV9pbml0KHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgY2hhciAqYXJncywgaW50IGxzbV9ydWxlLCBpbnQgYXVkaXRfdHlwZSkKK3sKKwlpbnQgcmVzdWx0OworCisJZW50cnktPmxzbVtsc21fcnVsZV0udHlwZSA9IGF1ZGl0X3R5cGU7CisJcmVzdWx0ID0gc2VjdXJpdHlfZmlsdGVyX3J1bGVfaW5pdChlbnRyeS0+bHNtW2xzbV9ydWxlXS50eXBlLAorCQkJCQkgICBBVURJVF9FUVVBTCwgYXJncywKKwkJCQkJICAgJmVudHJ5LT5sc21bbHNtX3J1bGVdLnJ1bGUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaW1hX3BhcnNlX3J1bGUoY2hhciAqcnVsZSwgc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCWNoYXIgKnA7CisJaW50IHJlc3VsdCA9IDA7CisKKwlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9JTlRFR1JJVFlfUlVMRSk7CisKKwllbnRyeS0+YWN0aW9uID0gLTE7CisJd2hpbGUgKChwID0gc3Ryc2VwKCZydWxlLCAiIFxuIikpICE9IE5VTEwpIHsKKwkJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW47CisJCXVuc2lnbmVkIGxvbmcgbG51bTsKKworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAoISpwKQorCQkJY29udGludWU7CisJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgcG9saWN5X3Rva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfbWVhc3VyZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIlcyAiLCAibWVhc3VyZSIpOworCQkJZW50cnktPmFjdGlvbiA9IE1FQVNVUkU7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZG9udF9tZWFzdXJlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiVzICIsICJkb250X21lYXN1cmUiKTsKKwkJCWVudHJ5LT5hY3Rpb24gPSBET05UX01FQVNVUkU7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZnVuYzoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJmdW5jPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIlBBVEhfQ0hFQ0siKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gUEFUSF9DSEVDSzsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJGSUxFX01NQVAiKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gRklMRV9NTUFQOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIkJQUk1fQ0hFQ0siKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gQlBSTV9DSEVDSzsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZW50cnktPmZsYWdzIHw9IElNQV9GVU5DOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X21hc2s6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibWFzaz0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJaWYgKChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX0VYRUMiKSkgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9FWEVDOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9XUklURSIpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfV1JJVEU7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX1JFQUQiKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX1JFQUQ7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX0FQUEVORCIpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfQVBQRU5EOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlpZiAoIXJlc3VsdCkKKwkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX01BU0s7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZnNtYWdpYzoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJmc21hZ2ljPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBzdHJpY3Rfc3RydG91bChhcmdzWzBdLmZyb20sIDE2LAorCQkJCQkJJmVudHJ5LT5mc21hZ2ljKTsKKwkJCWlmICghcmVzdWx0KQorCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfRlNNQUdJQzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF91aWQ6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAidWlkPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBzdHJpY3Rfc3RydG91bChhcmdzWzBdLmZyb20sIDEwLCAmbG51bSk7CisJCQlpZiAoIXJlc3VsdCkgeworCQkJCWVudHJ5LT51aWQgPSAodWlkX3QpIGxudW07CisJCQkJaWYgKGVudHJ5LT51aWQgIT0gbG51bSkKKwkJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCQllbHNlCisJCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfVUlEOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT3B0X29ial91c2VyOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9ial91c2VyPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX09CSl9VU0VSLAorCQkJCQkJICAgQVVESVRfT0JKX1VTRVIpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X29ial9yb2xlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9ial9yb2xlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX09CSl9ST0xFLAorCQkJCQkJICAgQVVESVRfT0JKX1JPTEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X29ial90eXBlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9ial90eXBlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX09CSl9UWVBFLAorCQkJCQkJICAgQVVESVRfT0JKX1RZUEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1YmpfdXNlcjoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzdWJqX3VzZXI9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fU1VCSl9VU0VSLAorCQkJCQkJICAgQVVESVRfU1VCSl9VU0VSKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJqX3JvbGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3Vial9yb2xlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX1NVQkpfUk9MRSwKKwkJCQkJCSAgIEFVRElUX1NVQkpfUk9MRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vial90eXBlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInN1YmpfdHlwZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9TVUJKX1RZUEUsCisJCQkJCQkgICBBVURJVF9TVUJKX1RZUEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2VycjoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJVTktOT1dOPSVzICIsIHApOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGVudHJ5LT5hY3Rpb24gPT0gVU5LTk9XTikKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJyZXM9JWQiLCAhcmVzdWx0ID8gMCA6IDEpOworCWF1ZGl0X2xvZ19lbmQoYWIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogaW1hX3BhcnNlX2FkZF9ydWxlIC0gYWRkIGEgcnVsZSB0byBtZWFzdXJlX3BvbGljeV9ydWxlcworICogQHJ1bGUgLSBpbWEgbWVhc3VyZW1lbnQgcG9saWN5IHJ1bGUKKyAqCisgKiBVc2VzIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgcG9saWN5IGxpc3QgZnJvbSBtdWx0aXBsZSBjb25jdXJyZW50IHdyaXRlcnMuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaW1hX3BhcnNlX2FkZF9ydWxlKGNoYXIgKnJ1bGUpCit7CisJY29uc3QgY2hhciAqb3AgPSAidXBkYXRlX3BvbGljeSI7CisJc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5OworCWludCByZXN1bHQgPSAwOworCWludCBhdWRpdF9pbmZvID0gMDsKKworCS8qIFByZXZlbnQgaW5zdGFsbGVkIHBvbGljeSBmcm9tIGNoYW5naW5nICovCisJaWYgKGltYV9tZWFzdXJlICE9ICZtZWFzdXJlX2RlZmF1bHRfcnVsZXMpIHsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJCSAgICBOVUxMLCBvcCwgImFscmVhZHkgZXhpc3RzIiwKKwkJCQkgICAgLUVBQ0NFUywgYXVkaXRfaW5mbyk7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkgeworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkJICAgIE5VTEwsIG9wLCAiLUVOT01FTSIsIC1FTk9NRU0sIGF1ZGl0X2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmZW50cnktPmxpc3QpOworCisJcmVzdWx0ID0gaW1hX3BhcnNlX3J1bGUocnVsZSwgZW50cnkpOworCWlmICghcmVzdWx0KSB7CisJCW11dGV4X2xvY2soJmltYV9tZWFzdXJlX211dGV4KTsKKwkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZtZWFzdXJlX3BvbGljeV9ydWxlcyk7CisJCW11dGV4X3VubG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworCX0gZWxzZSB7CisJCWtmcmVlKGVudHJ5KTsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJCSAgICBOVUxMLCBvcCwgImludmFsaWQgcG9saWN5IiwgcmVzdWx0LAorCQkJCSAgICBhdWRpdF9pbmZvKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogaW1hX2RlbGV0ZV9ydWxlcyBjYWxsZWQgdG8gY2xlYW51cCBpbnZhbGlkIHBvbGljeSAqLwordm9pZCBpbWFfZGVsZXRlX3J1bGVzKHZvaWQpCit7CisJc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5LCAqdG1wOworCisJbXV0ZXhfbG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAmbWVhc3VyZV9wb2xpY3lfcnVsZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKwltdXRleF91bmxvY2soJmltYV9tZWFzdXJlX211dGV4KTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3F1ZXVlLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzk0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9xdWV1ZS5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBTZXJnZSBIYWxseW4gPHNlcnVlQHVzLmlibS5jb20+CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfcXVldWUuYworICogICAgICAgSW1wbGVtZW50cyBxdWV1ZXMgdGhhdCBzdG9yZSB0ZW1wbGF0ZSBtZWFzdXJlbWVudHMgYW5kCisgKiAgICAgICBtYWludGFpbnMgYWdncmVnYXRlIG92ZXIgdGhlIHN0b3JlZCBtZWFzdXJlbWVudHMKKyAqICAgICAgIGluIHRoZSBwcmUtY29uZmlndXJlZCBUUE0gUENSIChpZiBhdmFpbGFibGUpLgorICogICAgICAgVGhlIG1lYXN1cmVtZW50IGxpc3QgaXMgYXBwZW5kLW9ubHkuIE5vIGVudHJ5IGlzCisgKiAgICAgICBldmVyIHJlbW92ZWQgb3IgY2hhbmdlZCBkdXJpbmcgdGhlIGJvb3QtY3ljbGUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSAiaW1hLmgiCisKK0xJU1RfSEVBRChpbWFfbWVhc3VyZW1lbnRzKTsJLyogbGlzdCBvZiBhbGwgbWVhc3VyZW1lbnRzICovCisKKy8qIGtleTogaW5vZGUgKGJlZm9yZSBzZWN1cmUtaGFzaGluZyBhIGZpbGUpICovCitzdHJ1Y3QgaW1hX2hfdGFibGUgaW1hX2h0YWJsZSA9IHsKKwkubGVuID0gQVRPTUlDX0xPTkdfSU5JVCgwKSwKKwkudmlvbGF0aW9ucyA9IEFUT01JQ19MT05HX0lOSVQoMCksCisJLnF1ZXVlWzAgLi4uIElNQV9NRUFTVVJFX0hUQUJMRV9TSVpFIC0gMV0gPSBITElTVF9IRUFEX0lOSVQKK307CisKKy8qIG11dGV4IHByb3RlY3RzIGF0b21pY2l0eSBvZiBleHRlbmRpbmcgbWVhc3VyZW1lbnQgbGlzdAorICogYW5kIGV4dGVuZGluZyB0aGUgVFBNIFBDUiBhZ2dyZWdhdGUuIFNpbmNlIHRwbV9leHRlbmQgY2FuIHRha2UKKyAqIGxvbmcgKGFuZCB0aGUgdHBtIGRyaXZlciB1c2VzIGEgbXV0ZXgpLCB3ZSBjYW4ndCB1c2UgdGhlIHNwaW5sb2NrLgorICovCitzdGF0aWMgREVGSU5FX01VVEVYKGltYV9leHRlbmRfbGlzdF9tdXRleCk7CisKKy8qIGxvb2t1cCB1cCB0aGUgZGlnZXN0IHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlLCBhbmQgcmV0dXJuIHRoZSBlbnRyeSAqLworc3RhdGljIHN0cnVjdCBpbWFfcXVldWVfZW50cnkgKmltYV9sb29rdXBfZGlnZXN0X2VudHJ5KHU4ICpkaWdlc3RfdmFsdWUpCit7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUsICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGludCBrZXk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlpbnQgcmM7CisKKwlrZXkgPSBpbWFfaGFzaF9rZXkoZGlnZXN0X3ZhbHVlKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHFlLCBwb3MsICZpbWFfaHRhYmxlLnF1ZXVlW2tleV0sIGhuZXh0KSB7CisJCXJjID0gbWVtY21wKHFlLT5lbnRyeS0+ZGlnZXN0LCBkaWdlc3RfdmFsdWUsIElNQV9ESUdFU1RfU0laRSk7CisJCWlmIChyYyA9PSAwKSB7CisJCQlyZXQgPSBxZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKKy8qIGltYV9hZGRfdGVtcGxhdGVfZW50cnkgaGVscGVyIGZ1bmN0aW9uOgorICogLSBBZGQgdGVtcGxhdGUgZW50cnkgdG8gbWVhc3VyZW1lbnQgbGlzdCBhbmQgaGFzaCB0YWJsZS4KKyAqCisgKiAoQ2FsbGVkIHdpdGggaW1hX2V4dGVuZF9saXN0X211dGV4IGhlbGQuKQorICovCitzdGF0aWMgaW50IGltYV9hZGRfZGlnZXN0X2VudHJ5KHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlOworCXVuc2lnbmVkIGludCBrZXk7CisKKwlxZSA9IGttYWxsb2Moc2l6ZW9mKCpxZSksIEdGUF9LRVJORUwpOworCWlmIChxZSA9PSBOVUxMKSB7CisJCXByX2VycigiT1VUIE9GIE1FTU9SWSBFUlJPUiBjcmVhdGluZyBxdWV1ZSBlbnRyeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcWUtPmVudHJ5ID0gZW50cnk7CisKKwlJTklUX0xJU1RfSEVBRCgmcWUtPmxhdGVyKTsKKwlsaXN0X2FkZF90YWlsX3JjdSgmcWUtPmxhdGVyLCAmaW1hX21lYXN1cmVtZW50cyk7CisKKwlhdG9taWNfbG9uZ19pbmMoJmltYV9odGFibGUubGVuKTsKKwlrZXkgPSBpbWFfaGFzaF9rZXkoZW50cnktPmRpZ2VzdCk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZxZS0+aG5leHQsICZpbWFfaHRhYmxlLnF1ZXVlW2tleV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltYV9wY3JfZXh0ZW5kKGNvbnN0IHU4ICpoYXNoKQoreworCWludCByZXN1bHQgPSAwOworCisJaWYgKCFpbWFfdXNlZF9jaGlwKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdHBtX3Bjcl9leHRlbmQoVFBNX0FOWV9OVU0sIENPTkZJR19JTUFfTUVBU1VSRV9QQ1JfSURYLCBoYXNoKTsKKwlpZiAocmVzdWx0ICE9IDApCisJCXByX2VycigiRXJyb3IgQ29tbXVuaWNhdGluZyB0byBUUE0gY2hpcFxuIik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogQWRkIHRlbXBsYXRlIGVudHJ5IHRvIHRoZSBtZWFzdXJlbWVudCBsaXN0IGFuZCBoYXNoIHRhYmxlLAorICogYW5kIGV4dGVuZCB0aGUgcGNyLgorICovCitpbnQgaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwgaW50IHZpb2xhdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKm9wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gImhhc2hfYWRkZWQiOworCWludCBhdWRpdF9pbmZvID0gMTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCW11dGV4X2xvY2soJmltYV9leHRlbmRfbGlzdF9tdXRleCk7CisJaWYgKCF2aW9sYXRpb24pIHsKKwkJbWVtY3B5KGRpZ2VzdCwgZW50cnktPmRpZ2VzdCwgc2l6ZW9mIGRpZ2VzdCk7CisJCWlmIChpbWFfbG9va3VwX2RpZ2VzdF9lbnRyeShkaWdlc3QpKSB7CisJCQlhdWRpdF9jYXVzZSA9ICJoYXNoX2V4aXN0cyI7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJlc3VsdCA9IGltYV9hZGRfZGlnZXN0X2VudHJ5KGVudHJ5KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlhdWRpdF9jYXVzZSA9ICJFTk9NRU0iOworCQlhdWRpdF9pbmZvID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZpb2xhdGlvbikJCS8qIGludmFsaWRhdGUgcGNyICovCisJCW1lbXNldChkaWdlc3QsIDB4ZmYsIHNpemVvZiBkaWdlc3QpOworCisJcmVzdWx0ID0gaW1hX3Bjcl9leHRlbmQoZGlnZXN0KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJYXVkaXRfY2F1c2UgPSAiVFBNIGVycm9yIjsKKwkJYXVkaXRfaW5mbyA9IDA7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmaW1hX2V4dGVuZF9saXN0X211dGV4KTsKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLCBlbnRyeS0+dGVtcGxhdGVfbmFtZSwKKwkJCSAgICBvcCwgYXVkaXRfY2F1c2UsIHJlc3VsdCwgYXVkaXRfaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaCBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAppbmRleCA4MTkzMmFiLi45ZmI2NzljIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKKysrIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCkBAIC01Myw2ICs1Myw3IEBACiAJYXRvbWljX3QJCW5rZXlzOwkJLyogbnVtYmVyIG9mIGtleXMgKi8KIAlhdG9taWNfdAkJbmlrZXlzOwkJLyogbnVtYmVyIG9mIGluc3RhbnRpYXRlZCBrZXlzICovCiAJdWlkX3QJCQl1aWQ7CisJc3RydWN0IHVzZXJfbmFtZXNwYWNlCSp1c2VyX25zOwogCWludAkJCXFua2V5czsJCS8qIG51bWJlciBvZiBrZXlzIGFsbG9jYXRlZCB0byB0aGlzIHVzZXIgKi8KIAlpbnQJCQlxbmJ5dGVzOwkvKiBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHRvIHRoaXMgdXNlciAqLwogfTsKQEAgLTYxLDcgKzYyLDggQEAKIGV4dGVybiBzcGlubG9ja190CWtleV91c2VyX2xvY2s7CiBleHRlcm4gc3RydWN0IGtleV91c2VyCXJvb3Rfa2V5X3VzZXI7CiAKLWV4dGVybiBzdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQpOworZXh0ZXJuIHN0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCwKKwkJCQkJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKTsKIGV4dGVybiB2b2lkIGtleV91c2VyX3B1dChzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmMKaW5kZXggZjc2YzhhNS4uNGExMjk3ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL2tleS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUJKmtleV9qYXI7CkBAIC02MCw3ICs2MSw3IEBACiAgKiBnZXQgdGhlIGtleSBxdW90YSByZWNvcmQgZm9yIGEgdXNlciwgYWxsb2NhdGluZyBhIG5ldyByZWNvcmQgaWYgb25lIGRvZXNuJ3QKICAqIGFscmVhZHkgZXhpc3QKICAqLwotc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkKQorc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiB7CiAJc3RydWN0IGtleV91c2VyICpjYW5kaWRhdGUgPSBOVUxMLCAqdXNlcjsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKQEAgLTc5LDYgKzgwLDEwIEBACiAJCQlwID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKHVpZCA+IHVzZXItPnVpZCkKIAkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKHVzZXJfbnMgPCB1c2VyLT51c2VyX25zKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmICh1c2VyX25zID4gdXNlci0+dXNlcl9ucykKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CiAJCWVsc2UKIAkJCWdvdG8gZm91bmQ7CiAJfQpAQCAtMTA2LDYgKzExMSw3IEBACiAJYXRvbWljX3NldCgmY2FuZGlkYXRlLT5ua2V5cywgMCk7CiAJYXRvbWljX3NldCgmY2FuZGlkYXRlLT5uaWtleXMsIDApOwogCWNhbmRpZGF0ZS0+dWlkID0gdWlkOworCWNhbmRpZGF0ZS0+dXNlcl9ucyA9IGdldF91c2VyX25zKHVzZXJfbnMpOwogCWNhbmRpZGF0ZS0+cW5rZXlzID0gMDsKIAljYW5kaWRhdGUtPnFuYnl0ZXMgPSAwOwogCXNwaW5fbG9ja19pbml0KCZjYW5kaWRhdGUtPmxvY2spOwpAQCAtMTM2LDYgKzE0Miw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnVzZXItPnVzYWdlLCAma2V5X3VzZXJfbG9jaykpIHsKIAkJcmJfZXJhc2UoJnVzZXItPm5vZGUsICZrZXlfdXNlcl90cmVlKTsKIAkJc3Bpbl91bmxvY2soJmtleV91c2VyX2xvY2spOworCQlwdXRfdXNlcl9ucyh1c2VyLT51c2VyX25zKTsKIAogCQlrZnJlZSh1c2VyKTsKIAl9CkBAIC0yMzQsNyArMjQxLDcgQEAKIAlxdW90YWxlbiA9IGRlc2NsZW4gKyB0eXBlLT5kZWZfZGF0YWxlbjsKIAogCS8qIGdldCBob2xkIG9mIHRoZSBrZXkgdHJhY2tpbmcgZm9yIHRoaXMgdXNlciAqLwotCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkKTsKKwl1c2VyID0ga2V5X3VzZXJfbG9va3VwKHVpZCwgY3JlZC0+dXNlci0+dXNlcl9ucyk7CiAJaWYgKCF1c2VyKQogCQlnb3RvIG5vX21lbW9yeV8xOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwppbmRleCBiMWVjM2I0Li43ZjA5ZmI4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTcyNiw3ICs3MjYsNyBAQAogCS8qIGNoYW5nZSB0aGUgVUlEICovCiAJaWYgKHVpZCAhPSAodWlkX3QpIC0xICYmIHVpZCAhPSBrZXktPnVpZCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQluZXdvd25lciA9IGtleV91c2VyX2xvb2t1cCh1aWQpOworCQluZXdvd25lciA9IGtleV91c2VyX2xvb2t1cCh1aWQsIGN1cnJlbnRfdXNlcl9ucygpKTsKIAkJaWYgKCFuZXdvd25lcikKIAkJCWdvdG8gZXJyb3JfcHV0OwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IGVkODUxNTcuLjNkYmE4MWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC01MzksNiArNTM5LDkgQEAKIAkJCQkgICAgJmtleXJpbmdfbmFtZV9oYXNoW2J1Y2tldF0sCiAJCQkJICAgIHR5cGVfZGF0YS5saW5rCiAJCQkJICAgICkgeworCQkJaWYgKGtleXJpbmctPnVzZXItPnVzZXJfbnMgIT0gY3VycmVudF91c2VyX25zKCkpCisJCQkJY29udGludWU7CisKIAkJCWlmICh0ZXN0X2JpdChLRVlfRkxBR19SRVZPS0VELCAma2V5cmluZy0+ZmxhZ3MpKQogCQkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYyBiL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jCmluZGV4IDVkOWZjN2IuLjBlZDgwMmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jCisrKyBiL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jCkBAIC0zNSw2ICszNSw5IEBACiAKIAlrZXkgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKTsKIAorCWlmIChrZXktPnVzZXItPnVzZXJfbnMgIT0gY3JlZC0+dXNlci0+dXNlcl9ucykKKwkJZ290byB1c2Vfb3RoZXJfcGVybXM7CisKIAkvKiB1c2UgdGhlIHNlY29uZCA4LWJpdHMgb2YgcGVybWlzc2lvbnMgZm9yIGtleXMgdGhlIGNhbGxlciBvd25zICovCiAJaWYgKGtleS0+dWlkID09IGNyZWQtPmZzdWlkKSB7CiAJCWtwZXJtID0ga2V5LT5wZXJtID4+IDE2OwpAQCAtNTYsNiArNTksOCBAQAogCQl9CiAJfQogCit1c2Vfb3RoZXJfcGVybXM6CisKIAkvKiBvdGhlcndpc2UgdXNlIHRoZSBsZWFzdC1zaWduaWZpY2FudCA4LWJpdHMgKi8KIAlrcGVybSA9IGtleS0+cGVybTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jLmMgYi9zZWN1cml0eS9rZXlzL3Byb2MuYwppbmRleCA3ZjUwOGRlLi43NjlmOWJkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2MuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2MuYwpAQCAtOTEsNiArOTEsMjggQEAKICAqLwogI2lmZGVmIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUwogCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKl9fa2V5X3NlcmlhbF9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXdoaWxlIChuKSB7CisJCXN0cnVjdCBrZXkgKmtleSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBrZXksIHNlcmlhbF9ub2RlKTsKKwkJaWYgKGtleS0+dXNlci0+dXNlcl9ucyA9PSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJCWJyZWFrOworCQluID0gcmJfbmV4dChuKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3NlcmlhbF9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXJldHVybiBfX2tleV9zZXJpYWxfbmV4dChyYl9uZXh0KG4pKTsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfc2VyaWFsX2ZpcnN0KHN0cnVjdCByYl9yb290ICpyKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcmJfZmlyc3Qocik7CisJcmV0dXJuIF9fa2V5X3NlcmlhbF9uZXh0KG4pOworfQorCiBzdGF0aWMgaW50IHByb2Nfa2V5c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcHJvY19rZXlzX29wcyk7CkBAIC0xMDQsMTAgKzEyNiwxMCBAQAogCiAJc3Bpbl9sb2NrKCZrZXlfc2VyaWFsX2xvY2spOwogCi0JX3AgPSByYl9maXJzdCgma2V5X3NlcmlhbF90cmVlKTsKKwlfcCA9IGtleV9zZXJpYWxfZmlyc3QoJmtleV9zZXJpYWxfdHJlZSk7CiAJd2hpbGUgKHBvcyA+IDAgJiYgX3ApIHsKIAkJcG9zLS07Ci0JCV9wID0gcmJfbmV4dChfcCk7CisJCV9wID0ga2V5X3NlcmlhbF9uZXh0KF9wKTsKIAl9CiAKIAlyZXR1cm4gX3A7CkBAIC0xMTcsNyArMTM5LDcgQEAKIHN0YXRpYyB2b2lkICpwcm9jX2tleXNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYsIGxvZmZfdCAqX3BvcykKIHsKIAkoKl9wb3MpKys7Ci0JcmV0dXJuIHJiX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOworCXJldHVybiBrZXlfc2VyaWFsX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOwogCiB9CiAKQEAgLTIwMyw2ICsyMjUsMjcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUyAqLwogCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKl9fa2V5X3VzZXJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIgPSByYl9lbnRyeShuLCBzdHJ1Y3Qga2V5X3VzZXIsIG5vZGUpOworCQlpZiAodXNlci0+dXNlcl9ucyA9PSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJCWJyZWFrOworCQluID0gcmJfbmV4dChuKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3VzZXJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwlyZXR1cm4gX19rZXlfdXNlcl9uZXh0KHJiX25leHQobikpOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV91c2VyX2ZpcnN0KHN0cnVjdCByYl9yb290ICpyKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcmJfZmlyc3Qocik7CisJcmV0dXJuIF9fa2V5X3VzZXJfbmV4dChuKTsKK30KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBpbXBsZW1lbnQgIi9wcm9jL2tleS11c2VycyIgdG8gcHJvdmlkZXMgYSBsaXN0IG9mIHRoZSBrZXkgdXNlcnMKQEAgLTIyMCwxMCArMjYzLDEwIEBACiAKIAlzcGluX2xvY2soJmtleV91c2VyX2xvY2spOwogCi0JX3AgPSByYl9maXJzdCgma2V5X3VzZXJfdHJlZSk7CisJX3AgPSBrZXlfdXNlcl9maXJzdCgma2V5X3VzZXJfdHJlZSk7CiAJd2hpbGUgKHBvcyA+IDAgJiYgX3ApIHsKIAkJcG9zLS07Ci0JCV9wID0gcmJfbmV4dChfcCk7CisJCV9wID0ga2V5X3VzZXJfbmV4dChfcCk7CiAJfQogCiAJcmV0dXJuIF9wOwpAQCAtMjMzLDcgKzI3Niw3IEBACiBzdGF0aWMgdm9pZCAqcHJvY19rZXlfdXNlcnNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYsIGxvZmZfdCAqX3BvcykKIHsKIAkoKl9wb3MpKys7Ci0JcmV0dXJuIHJiX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOworCXJldHVybiBrZXlfdXNlcl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKIAogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwppbmRleCAyZjVkODllLi4yNzZkMjc4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTM0LDYgKzM1LDcgQEAKIAkubmtleXMJCT0gQVRPTUlDX0lOSVQoMiksCiAJLm5pa2V5cwkJPSBBVE9NSUNfSU5JVCgyKSwKIAkudWlkCQk9IDAsCisJLnVzZXJfbnMJPSAmaW5pdF91c2VyX25zLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCmluZGV4IDBlMDRmNzIuLjIyYTMxNTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCiAJa2VudGVyKCIiKTsKIAotCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAoY3VycmVudF9mc3VpZCgpKTsKKwl1c2VyID0ga2V5X3VzZXJfbG9va3VwKGN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF91c2VyX25zKCkpOwogCWlmICghdXNlcikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IGMzNTg2YzAuLjIwNmU1MzggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTAwNywxMSArMTAwNyw2IEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+c29ja2V0X2FjY2VwdChzb2NrLCBuZXdzb2NrKTsKIH0KIAotdm9pZCBzZWN1cml0eV9zb2NrZXRfcG9zdF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaykKLXsKLQlzZWN1cml0eV9vcHMtPnNvY2tldF9wb3N0X2FjY2VwdChzb2NrLCBuZXdzb2NrKTsKLX0KLQogaW50IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+c29ja2V0X3NlbmRtc2coc29jaywgbXNnLCBzaXplKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCmluZGV4IGViNDFmNDMuLjdmOWI1ZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwpAQCAtODgsMTcgKzg4LDE2IEBACiAJdTMyCQkJdHNpZDsKIAl1MTYJCQl0Y2xhc3M7CiAJc3RydWN0IGF2X2RlY2lzaW9uCWF2ZDsKLQlhdG9taWNfdAkJdXNlZDsJLyogdXNlZCByZWNlbnRseSAqLwogfTsKIAogc3RydWN0IGF2Y19ub2RlIHsKIAlzdHJ1Y3QgYXZjX2VudHJ5CWFlOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OyAvKiBhbmNob3JlZCBpbiBhdmNfY2FjaGUtPnNsb3RzW2ldICovCiAJc3RydWN0IHJjdV9oZWFkCQlyaGVhZDsKIH07CiAKIHN0cnVjdCBhdmNfY2FjaGUgewotCXN0cnVjdCBsaXN0X2hlYWQJc2xvdHNbQVZDX0NBQ0hFX1NMT1RTXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlzbG90c1tBVkNfQ0FDSEVfU0xPVFNdOyAvKiBoZWFkIGZvciBhdmNfbm9kZS0+bGlzdCAqLwogCXNwaW5sb2NrX3QJCXNsb3RzX2xvY2tbQVZDX0NBQ0hFX1NMT1RTXTsgLyogbG9jayBmb3Igd3JpdGVzICovCiAJYXRvbWljX3QJCWxydV9oaW50OwkvKiBMUlUgaGludCBmb3IgcmVjbGFpbSBzY2FuICovCiAJYXRvbWljX3QJCWFjdGl2ZV9ub2RlczsKQEAgLTIzNCw3ICsyMzMsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZhdmNfY2FjaGUuc2xvdHNbaV0pOworCQlJTklUX0hMSVNUX0hFQUQoJmF2Y19jYWNoZS5zbG90c1tpXSk7CiAJCXNwaW5fbG9ja19pbml0KCZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXSk7CiAJfQogCWF0b21pY19zZXQoJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMsIDApOwpAQCAtMjUwLDE2ICsyNDksMjAgQEAKIHsKIAlpbnQgaSwgY2hhaW5fbGVuLCBtYXhfY2hhaW5fbGVuLCBzbG90c191c2VkOwogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCXNsb3RzX3VzZWQgPSAwOwogCW1heF9jaGFpbl9sZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBBVkNfQ0FDSEVfU0xPVFM7IGkrKykgewotCQlpZiAoIWxpc3RfZW1wdHkoJmF2Y19jYWNoZS5zbG90c1tpXSkpIHsKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaV07CisJCWlmICghaGxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCiAJCQlzbG90c191c2VkKys7CiAJCQljaGFpbl9sZW4gPSAwOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgJmF2Y19jYWNoZS5zbG90c1tpXSwgbGlzdCkKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KQogCQkJCWNoYWluX2xlbisrOwogCQkJaWYgKGNoYWluX2xlbiA+IG1heF9jaGFpbl9sZW4pCiAJCQkJbWF4X2NoYWluX2xlbiA9IGNoYWluX2xlbjsKQEAgLTI4Myw3ICsyODYsNyBAQAogCiBzdGF0aWMgdm9pZCBhdmNfbm9kZV9kZWxldGUoc3RydWN0IGF2Y19ub2RlICpub2RlKQogewotCWxpc3RfZGVsX3JjdSgmbm9kZS0+bGlzdCk7CisJaGxpc3RfZGVsX3JjdSgmbm9kZS0+bGlzdCk7CiAJY2FsbF9yY3UoJm5vZGUtPnJoZWFkLCBhdmNfbm9kZV9mcmVlKTsKIAlhdG9taWNfZGVjKCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzKTsKIH0KQEAgLTI5Nyw3ICszMDAsNyBAQAogCiBzdGF0aWMgdm9pZCBhdmNfbm9kZV9yZXBsYWNlKHN0cnVjdCBhdmNfbm9kZSAqbmV3LCBzdHJ1Y3QgYXZjX25vZGUgKm9sZCkKIHsKLQlsaXN0X3JlcGxhY2VfcmN1KCZvbGQtPmxpc3QsICZuZXctPmxpc3QpOworCWhsaXN0X3JlcGxhY2VfcmN1KCZvbGQtPmxpc3QsICZuZXctPmxpc3QpOwogCWNhbGxfcmN1KCZvbGQtPnJoZWFkLCBhdmNfbm9kZV9mcmVlKTsKIAlhdG9taWNfZGVjKCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzKTsKIH0KQEAgLTMwNywyOSArMzEwLDMxIEBACiAJc3RydWN0IGF2Y19ub2RlICpub2RlOwogCWludCBodmFsdWUsIHRyeSwgZWN4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3BpbmxvY2tfdCAqbG9jazsKIAogCWZvciAodHJ5ID0gMCwgZWN4ID0gMDsgdHJ5IDwgQVZDX0NBQ0hFX1NMT1RTOyB0cnkrKykgewogCQlodmFsdWUgPSBhdG9taWNfaW5jX3JldHVybigmYXZjX2NhY2hlLmxydV9oaW50KSAmIChBVkNfQ0FDSEVfU0xPVFMgLSAxKTsKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwkJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdOwogCi0JCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWdzKSkKKwkJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykpCiAJCQljb250aW51ZTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7Ci0JCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbm9kZS0+YWUudXNlZCkpIHsKLQkJCQkvKiBSZWNlbnRseSBVbnVzZWQgKi8KLQkJCQlhdmNfbm9kZV9kZWxldGUobm9kZSk7Ci0JCQkJYXZjX2NhY2hlX3N0YXRzX2luY3IocmVjbGFpbXMpOwotCQkJCWVjeCsrOwotCQkJCWlmIChlY3ggPj0gQVZDX0NBQ0hFX1JFQ0xBSU0pIHsKLQkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWdzKTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQorCQlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KSB7CisJCQlhdmNfbm9kZV9kZWxldGUobm9kZSk7CisJCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihyZWNsYWltcyk7CisJCQllY3grKzsKKwkJCWlmIChlY3ggPj0gQVZDX0NBQ0hFX1JFQ0xBSU0pIHsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIGVjeDsKQEAgLTM0NCw4ICszNDksNyBAQAogCQlnb3RvIG91dDsKIAogCUlOSVRfUkNVX0hFQUQoJm5vZGUtPnJoZWFkKTsKLQlJTklUX0xJU1RfSEVBRCgmbm9kZS0+bGlzdCk7Ci0JYXRvbWljX3NldCgmbm9kZS0+YWUudXNlZCwgMSk7CisJSU5JVF9ITElTVF9OT0RFKCZub2RlLT5saXN0KTsKIAlhdmNfY2FjaGVfc3RhdHNfaW5jcihhbGxvY2F0aW9ucyk7CiAKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMpID4gYXZjX2NhY2hlX3RocmVzaG9sZCkKQEAgLTM1NSwyMSArMzU5LDI0IEBACiAJcmV0dXJuIG5vZGU7CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y19ub2RlX3BvcHVsYXRlKHN0cnVjdCBhdmNfbm9kZSAqbm9kZSwgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZjX2VudHJ5ICphZSkKK3N0YXRpYyB2b2lkIGF2Y19ub2RlX3BvcHVsYXRlKHN0cnVjdCBhdmNfbm9kZSAqbm9kZSwgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKIAlub2RlLT5hZS5zc2lkID0gc3NpZDsKIAlub2RlLT5hZS50c2lkID0gdHNpZDsKIAlub2RlLT5hZS50Y2xhc3MgPSB0Y2xhc3M7Ci0JbWVtY3B5KCZub2RlLT5hZS5hdmQsICZhZS0+YXZkLCBzaXplb2Yobm9kZS0+YWUuYXZkKSk7CisJbWVtY3B5KCZub2RlLT5hZS5hdmQsIGF2ZCwgc2l6ZW9mKG5vZGUtPmFlLmF2ZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdmNfbm9kZSAqYXZjX3NlYXJjaF9ub2RlKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcykKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGUsICpyZXQgPSBOVUxMOwogCWludCBodmFsdWU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CiAKIAlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKHNzaWQgPT0gbm9kZS0+YWUuc3NpZCAmJgogCQkgICAgdGNsYXNzID09IG5vZGUtPmFlLnRjbGFzcyAmJgogCQkgICAgdHNpZCA9PSBub2RlLT5hZS50c2lkKSB7CkBAIC0zNzgsMTUgKzM4NSw2IEBACiAJCX0KIAl9CiAKLQlpZiAocmV0ID09IE5VTEwpIHsKLQkJLyogY2FjaGUgbWlzcyAqLwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBjYWNoZSBoaXQgKi8KLQlpZiAoYXRvbWljX3JlYWQoJnJldC0+YWUudXNlZCkgIT0gMSkKLQkJYXRvbWljX3NldCgmcmV0LT5hZS51c2VkLCAxKTsKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTUsMzAgKzM5MywyNSBAQAogICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzcwotICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zLCBpbnRlcnByZXRlZCBiYXNlZCBvbiBAdGNsYXNzCiAgKgogICogTG9vayB1cCBhbiBBVkMgZW50cnkgdGhhdCBpcyB2YWxpZCBmb3IgdGhlCi0gKiBAcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJldHdlZW4gdGhlIFNJRCBwYWlyCiAgKiAoQHNzaWQsIEB0c2lkKSwgaW50ZXJwcmV0aW5nIHRoZSBwZXJtaXNzaW9ucwogICogYmFzZWQgb24gQHRjbGFzcy4gIElmIGEgdmFsaWQgQVZDIGVudHJ5IGV4aXN0cywKICAqIHRoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIGF2Y19ub2RlLgogICogT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KICAqLwotc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2xvb2t1cCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQpCitzdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfbG9va3VwKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcykKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CiAKIAlhdmNfY2FjaGVfc3RhdHNfaW5jcihsb29rdXBzKTsKIAlub2RlID0gYXZjX3NlYXJjaF9ub2RlKHNzaWQsIHRzaWQsIHRjbGFzcyk7CiAKLQlpZiAobm9kZSAmJiAoKG5vZGUtPmFlLmF2ZC5kZWNpZGVkICYgcmVxdWVzdGVkKSA9PSByZXF1ZXN0ZWQpKSB7CisJaWYgKG5vZGUpCiAJCWF2Y19jYWNoZV9zdGF0c19pbmNyKGhpdHMpOwotCQlnb3RvIG91dDsKLQl9CisJZWxzZQorCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihtaXNzZXMpOwogCi0Jbm9kZSA9IE5VTEw7Ci0JYXZjX2NhY2hlX3N0YXRzX2luY3IobWlzc2VzKTsKLW91dDoKIAlyZXR1cm4gbm9kZTsKIH0KIApAQCAtNDQ5LDM0ICs0NDIsNDEgQEAKICAqIEBzc2lkOiBzb3VyY2Ugc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKLSAqIEBhZTogQVZDIGVudHJ5CisgKiBAYXZkOiByZXN1bHRpbmcgYXYgZGVjaXNpb24KICAqCiAgKiBJbnNlcnQgYW4gQVZDIGVudHJ5IGZvciB0aGUgU0lEIHBhaXIKICAqIChAc3NpZCwgQHRzaWQpIGFuZCBjbGFzcyBAdGNsYXNzLgogICogVGhlIGFjY2VzcyB2ZWN0b3JzIGFuZCB0aGUgc2VxdWVuY2UgbnVtYmVyIGFyZQogICogbm9ybWFsbHkgcHJvdmlkZWQgYnkgdGhlIHNlY3VyaXR5IHNlcnZlciBpbgogICogcmVzcG9uc2UgdG8gYSBzZWN1cml0eV9jb21wdXRlX2F2KCkgY2FsbC4gIElmIHRoZQotICogc2VxdWVuY2UgbnVtYmVyIEBhZS0+YXZkLnNlcW5vIGlzIG5vdCBsZXNzIHRoYW4gdGhlIGxhdGVzdAorICogc2VxdWVuY2UgbnVtYmVyIEBhdmQtPnNlcW5vIGlzIG5vdCBsZXNzIHRoYW4gdGhlIGxhdGVzdAogICogcmV2b2NhdGlvbiBub3RpZmljYXRpb24sIHRoZW4gdGhlIGZ1bmN0aW9uIGNvcGllcwogICogdGhlIGFjY2VzcyB2ZWN0b3JzIGludG8gYSBjYWNoZSBlbnRyeSwgcmV0dXJucwogICogYXZjX25vZGUgaW5zZXJ0ZWQuIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19pbnNlcnQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZjX2VudHJ5ICphZSkKK3N0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19pbnNlcnQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKnBvcywgKm5vZGUgPSBOVUxMOwogCWludCBodmFsdWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCi0JaWYgKGF2Y19sYXRlc3Rfbm90aWZfdXBkYXRlKGFlLT5hdmQuc2Vxbm8sIDEpKQorCWlmIChhdmNfbGF0ZXN0X25vdGlmX3VwZGF0ZShhdmQtPnNlcW5vLCAxKSkKIAkJZ290byBvdXQ7CiAKIAlub2RlID0gYXZjX2FsbG9jX25vZGUoKTsKIAlpZiAobm9kZSkgewotCQlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCQlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsIGFlKTsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCQlzcGlubG9ja190ICpsb2NrOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCQlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOworCQlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsIGF2ZCk7CisKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwkJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdOworCisJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWcpOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJCWlmIChwb3MtPmFlLnNzaWQgPT0gc3NpZCAmJgogCQkJICAgIHBvcy0+YWUudHNpZCA9PSB0c2lkICYmCiAJCQkgICAgcG9zLT5hZS50Y2xhc3MgPT0gdGNsYXNzKSB7CkBAIC00ODQsOSArNDg0LDkgQEAKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQogCQl9Ci0JCWxpc3RfYWRkX3JjdSgmbm9kZS0+bGlzdCwgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdKTsKKwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZub2RlLT5saXN0LCBoZWFkKTsKIGZvdW5kOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIG5vZGU7CkBAIC03NDIsMTcgKzc0MiwyMiBAQAogICogQGV2ZW50IDogVXBkYXRpbmcgZXZlbnQKICAqIEBwZXJtcyA6IFBlcm1pc3Npb24gbWFzayBiaXRzCiAgKiBAc3NpZCxAdHNpZCxAdGNsYXNzIDogaWRlbnRpZmllciBvZiBhbiBBVkMgZW50cnkKKyAqIEBzZXFubyA6IHNlcXVlbmNlIG51bWJlciB3aGVuIGRlY2lzaW9uIHdhcyBtYWRlCiAgKgogICogaWYgYSB2YWxpZCBBVkMgZW50cnkgZG9lc24ndCBleGlzdCx0aGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT0VOVC4KICAqIGlmIGttYWxsb2MoKSBjYWxsZWQgaW50ZXJuYWwgcmV0dXJucyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT01FTS4KICAqIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB1cGRhdGUgdGhlIEFWQyBlbnRyeS4gVGhlIG9yaWdpbmFsIEFWQy1lbnRyeSBvYmplY3QKICAqIHdpbGwgcmVsZWFzZSBsYXRlciBieSBSQ1UuCiAgKi8KLXN0YXRpYyBpbnQgYXZjX3VwZGF0ZV9ub2RlKHUzMiBldmVudCwgdTMyIHBlcm1zLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MpCitzdGF0aWMgaW50IGF2Y191cGRhdGVfbm9kZSh1MzIgZXZlbnQsIHUzMiBwZXJtcywgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLAorCQkJICAgdTMyIHNlcW5vKQogewogCWludCBodmFsdWUsIHJjID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAJc3RydWN0IGF2Y19ub2RlICpwb3MsICpub2RlLCAqb3JpZyA9IE5VTEw7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3BpbmxvY2tfdCAqbG9jazsKIAogCW5vZGUgPSBhdmNfYWxsb2Nfbm9kZSgpOwogCWlmICghbm9kZSkgewpAQCAtNzYyLDEyICs3NjcsMTcgQEAKIAogCS8qIExvY2sgdGhlIHRhcmdldCBzbG90ICovCiAJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7CisJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFnKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgbmV4dCwgaGVhZCwgbGlzdCkgewogCQlpZiAoc3NpZCA9PSBwb3MtPmFlLnNzaWQgJiYKIAkJICAgIHRzaWQgPT0gcG9zLT5hZS50c2lkICYmCi0JCSAgICB0Y2xhc3MgPT0gcG9zLT5hZS50Y2xhc3MpeworCQkgICAgdGNsYXNzID09IHBvcy0+YWUudGNsYXNzICYmCisJCSAgICBzZXFubyA9PSBwb3MtPmFlLmF2ZC5zZXFubyl7CiAJCQlvcmlnID0gcG9zOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc4Myw3ICs3OTMsNyBAQAogCSAqIENvcHkgYW5kIHJlcGxhY2Ugb3JpZ2luYWwgbm9kZS4KIAkgKi8KIAotCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgJm9yaWctPmFlKTsKKwlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsICZvcmlnLT5hZS5hdmQpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQVZDX0NBTExCQUNLX0dSQU5UOgpAQCAtODA4LDcgKzgxOCw3IEBACiAJfQogCWF2Y19ub2RlX3JlcGxhY2Uobm9kZSwgb3JpZyk7CiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZyk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtODIzLDE4ICs4MzMsMjQgQEAKIAlpbnQgaSwgcmMgPSAwLCB0bXByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCXNwaW5sb2NrX3QgKmxvY2s7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVZDX0NBQ0hFX1NMT1RTOyBpKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldLCBmbGFnKTsKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaV07CisJCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZyk7CiAJCS8qCiAJCSAqIFdpdGggcHJlZW1wdGFibGUgUkNVLCB0aGUgb3V0ZXIgc3BpbmxvY2sgZG9lcyBub3QKIAkJICogcHJldmVudCBSQ1UgZ3JhY2UgcGVyaW9kcyBmcm9tIGVuZGluZy4KIAkJICovCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2ldLCBsaXN0KQorCQlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KQogCQkJYXZjX25vZGVfZGVsZXRlKG5vZGUpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV0sIGZsYWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWcpOwogCX0KIAogCWZvciAoYyA9IGF2Y19jYWxsYmFja3M7IGM7IGMgPSBjLT5uZXh0KSB7CkBAIC04NzUsMTAgKzg5MSwxMCBAQAogaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKIAkJCSB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAogCQkJIHVuc2lnbmVkIGZsYWdzLAotCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQorCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqaW5fYXZkKQogewogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgYXZjX2VudHJ5IGVudHJ5LCAqcF9hZTsKKwlzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkX2VudHJ5LCAqYXZkOwogCWludCByYyA9IDA7CiAJdTMyIGRlbmllZDsKIApAQCAtODg2LDI5ICs5MDIsMzQgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCW5vZGUgPSBhdmNfbG9va3VwKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkKTsKKwlub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MpOwogCWlmICghbm9kZSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmZW50cnkuYXZkKTsKKworCQlpZiAoaW5fYXZkKQorCQkJYXZkID0gaW5fYXZkOworCQllbHNlCisJCQlhdmQgPSAmYXZkX2VudHJ5OworCisJCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgYXZkKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJbm9kZSA9IGF2Y19pbnNlcnQoc3NpZCwgdHNpZCwgdGNsYXNzLCAmZW50cnkpOworCQlub2RlID0gYXZjX2luc2VydChzc2lkLCB0c2lkLCB0Y2xhc3MsIGF2ZCk7CisJfSBlbHNlIHsKKwkJaWYgKGluX2F2ZCkKKwkJCW1lbWNweShpbl9hdmQsICZub2RlLT5hZS5hdmQsIHNpemVvZigqaW5fYXZkKSk7CisJCWF2ZCA9ICZub2RlLT5hZS5hdmQ7CiAJfQogCi0JcF9hZSA9IG5vZGUgPyAmbm9kZS0+YWUgOiAmZW50cnk7Ci0KLQlpZiAoYXZkKQotCQltZW1jcHkoYXZkLCAmcF9hZS0+YXZkLCBzaXplb2YoKmF2ZCkpOwotCi0JZGVuaWVkID0gcmVxdWVzdGVkICYgfihwX2FlLT5hdmQuYWxsb3dlZCk7CisJZGVuaWVkID0gcmVxdWVzdGVkICYgfihhdmQtPmFsbG93ZWQpOwogCiAJaWYgKGRlbmllZCkgewogCQlpZiAoZmxhZ3MgJiBBVkNfU1RSSUNUKQogCQkJcmMgPSAtRUFDQ0VTOwogCQllbHNlIGlmICghc2VsaW51eF9lbmZvcmNpbmcgfHwgc2VjdXJpdHlfcGVybWlzc2l2ZV9zaWQoc3NpZCkpCiAJCQlhdmNfdXBkYXRlX25vZGUoQVZDX0NBTExCQUNLX0dSQU5ULCByZXF1ZXN0ZWQsIHNzaWQsCi0JCQkJCXRzaWQsIHRjbGFzcyk7CisJCQkJCXRzaWQsIHRjbGFzcywgYXZkLT5zZXFubyk7CiAJCWVsc2UKIAkJCXJjID0gLUVBQ0NFUzsKIAl9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDA4MTU5Ny4uYmE4MDhlZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtODksMTEgKzg5LDEwIEBACiAjZGVmaW5lIFhBVFRSX1NFTElOVVhfU1VGRklYICJzZWxpbnV4IgogI2RlZmluZSBYQVRUUl9OQU1FX1NFTElOVVggWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NFTElOVVhfU1VGRklYCiAKLSNkZWZpbmUgTlVNX1NFTF9NTlRfT1BUUyA0CisjZGVmaW5lIE5VTV9TRUxfTU5UX09QVFMgNQogCiBleHRlcm4gdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKLWV4dGVybiBpbnQgc2VsaW51eF9jb21wYXRfbmV0OwogZXh0ZXJuIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpzZWN1cml0eV9vcHM7CiAKIC8qIFNFQ01BUksgcmVmZXJlbmNlIGNvdW50ICovCkBAIC0zMTEsNyArMzEwLDcgQEAKIAlzc2VjLT5zaWQgPSBTRUNJTklUU0lEX1VOTEFCRUxFRDsKIAlzay0+c2tfc2VjdXJpdHkgPSBzc2VjOwogCi0Jc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3NlYywgZmFtaWx5KTsKKwlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzc2VjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUzLDYgKzM1Miw3IEBACiAJT3B0X2ZzY29udGV4dCA9IDIsCiAJT3B0X2RlZmNvbnRleHQgPSAzLAogCU9wdF9yb290Y29udGV4dCA9IDQsCisJT3B0X2xhYmVsc3VwcG9ydCA9IDUsCiB9OwogCiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0zNjAsNiArMzYwLDcgQEAKIAl7T3B0X2ZzY29udGV4dCwgRlNDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2RlZmNvbnRleHQsIERFRkNPTlRFWFRfU1RSICIlcyJ9LAogCXtPcHRfcm9vdGNvbnRleHQsIFJPT1RDT05URVhUX1NUUiAiJXMifSwKKwl7T3B0X2xhYmVsc3VwcG9ydCwgTEFCRUxTVVBQX1NUUn0sCiAJe09wdF9lcnJvciwgTlVMTH0sCiB9OwogCkBAIC00MzEsNyArNDMyLDcgQEAKIAkJfQogCX0KIAotCXNic2VjLT5pbml0aWFsaXplZCA9IDE7CisJc2JzZWMtPmZsYWdzIHw9IChTRV9TQklOSVRJQUxJWkVEIHwgU0VfU0JMQUJFTFNVUFApOwogCiAJaWYgKHNic2VjLT5iZWhhdmlvciA+IEFSUkFZX1NJWkUobGFiZWxpbmdfYmVoYXZpb3JzKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBpbml0aWFsaXplZCAoZGV2ICVzLCB0eXBlICVzKSwgdW5rbm93biBiZWhhdmlvclxuIiwKQEAgLTQ0MSw2ICs0NDIsMTIgQEAKIAkJICAgICAgIHNiLT5zX2lkLCBzYi0+c190eXBlLT5uYW1lLAogCQkgICAgICAgbGFiZWxpbmdfYmVoYXZpb3JzW3Nic2VjLT5iZWhhdmlvci0xXSk7CiAKKwlpZiAoc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9HRU5GUyB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIHx8CisJICAgIHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTk9ORSB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCisJCXNic2VjLT5mbGFncyAmPSB+U0VfU0JMQUJFTFNVUFA7CisKIAkvKiBJbml0aWFsaXplIHRoZSByb290IGlub2RlLiAqLwogCXJjID0gaW5vZGVfZG9pbml0X3dpdGhfZGVudHJ5KHJvb3RfaW5vZGUsIHJvb3QpOwogCkBAIC00ODcsMjMgKzQ5NCwyMiBAQAogCiAJc2VjdXJpdHlfaW5pdF9tbnRfb3B0cyhvcHRzKTsKIAotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKQorCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBpZiB3ZSBldmVyIHVzZSBzYnNlYyBmbGFncyBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiB0cmFja2luZyBtb3VudAotCSAqIHNldHRpbmdzIHRoaXMgaXMgZ29pbmcgdG8gbmVlZCBhIG1hc2sKLQkgKi8KLQl0bXAgPSBzYnNlYy0+ZmxhZ3M7CisJdG1wID0gc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSzsKIAkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgc2IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmICh0bXAgJiAweDAxKQogCQkJb3B0cy0+bnVtX21udF9vcHRzKys7CiAJCXRtcCA+Pj0gMTsKIAl9CisJLyogQ2hlY2sgaWYgdGhlIExhYmVsIHN1cHBvcnQgZmxhZyBpcyBzZXQgKi8KKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApCisJCW9wdHMtPm51bV9tbnRfb3B0cysrOwogCiAJb3B0cy0+bW50X29wdHMgPSBrY2FsbG9jKG9wdHMtPm51bV9tbnRfb3B0cywgc2l6ZW9mKGNoYXIgKiksIEdGUF9BVE9NSUMpOwogCWlmICghb3B0cy0+bW50X29wdHMpIHsKQEAgLTU0OSw2ICs1NTUsMTAgQEAKIAkJb3B0cy0+bW50X29wdHNbaV0gPSBjb250ZXh0OwogCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tpKytdID0gUk9PVENPTlRFWFRfTU5UOwogCX0KKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApIHsKKwkJb3B0cy0+bW50X29wdHNbaV0gPSBOVUxMOworCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tpKytdID0gU0VfU0JMQUJFTFNVUFA7CisJfQogCiAJQlVHX09OKGkgIT0gb3B0cy0+bnVtX21udF9vcHRzKTsKIApAQCAtNTYyLDggKzU3MiwxMCBAQAogc3RhdGljIGludCBiYWRfb3B0aW9uKHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWMsIGNoYXIgZmxhZywKIAkJICAgICAgdTMyIG9sZF9zaWQsIHUzMiBuZXdfc2lkKQogeworCWNoYXIgbW50X2ZsYWdzID0gc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSzsKKwogCS8qIGNoZWNrIGlmIHRoZSBvbGQgbW91bnQgY29tbWFuZCBoYWQgdGhlIHNhbWUgb3B0aW9ucyAqLwotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQpCisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpCiAJCWlmICghKHNic2VjLT5mbGFncyAmIGZsYWcpIHx8CiAJCSAgICAob2xkX3NpZCAhPSBuZXdfc2lkKSkKIAkJCXJldHVybiAxOwpAQCAtNTcxLDggKzU4Myw4IEBACiAJLyogY2hlY2sgaWYgd2Ugd2VyZSBwYXNzZWQgdGhlIHNhbWUgb3B0aW9ucyB0d2ljZSwKIAkgKiBha2Egc29tZW9uZSBwYXNzZWQgY29udGV4dD1hLGNvbnRleHQ9YgogCSAqLwotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKQotCQlpZiAoc2JzZWMtPmZsYWdzICYgZmxhZykKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSkKKwkJaWYgKG1udF9mbGFncyAmIGZsYWcpCiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYyNiw3ICs2MzgsNyBAQAogCSAqIHRoaXMgc2IgZG9lcyBub3Qgc2V0IGFueSBzZWN1cml0eSBvcHRpb25zLiAgKFRoZSBmaXJzdCBvcHRpb25zCiAJICogd2lsbCBiZSB1c2VkIGZvciBib3RoIG1vdW50cykKIAkgKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkICYmIChzYi0+c190eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpCisJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSAmJiAoc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19CSU5BUllfTU9VTlREQVRBKQogCSAgICAmJiAobnVtX29wdHMgPT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC02MzcsNiArNjQ5LDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29wdHM7IGkrKykgewogCQl1MzIgc2lkOworCisJCWlmIChmbGFnc1tpXSA9PSBTRV9TQkxBQkVMU1VQUCkKKwkJCWNvbnRpbnVlOwogCQlyYyA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKG1vdW50X29wdGlvbnNbaV0sCiAJCQkJCSAgICAgc3RybGVuKG1vdW50X29wdGlvbnNbaV0pLCAmc2lkKTsKIAkJaWYgKHJjKSB7CkBAIC02OTAsMTkgKzcwNSwxOSBAQAogCQl9CiAJfQogCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCkgeworCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSB7CiAJCS8qIHByZXZpb3VzbHkgbW91bnRlZCB3aXRoIG9wdGlvbnMsIGJ1dCBub3Qgb24gdGhpcyBhdHRlbXB0PyAqLwotCQlpZiAoc2JzZWMtPmZsYWdzICYmICFudW1fb3B0cykKKwkJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9NTlRNQVNLKSAmJiAhbnVtX29wdHMpCiAJCQlnb3RvIG91dF9kb3VibGVfbW91bnQ7CiAJCXJjID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHN0cmNtcChzYi0+c190eXBlLT5uYW1lLCAicHJvYyIpID09IDApCi0JCXNic2VjLT5wcm9jID0gMTsKKwkJc2JzZWMtPmZsYWdzIHw9IFNFX1NCUFJPQzsKIAogCS8qIERldGVybWluZSB0aGUgbGFiZWxpbmcgYmVoYXZpb3IgdG8gdXNlIGZvciB0aGlzIGZpbGVzeXN0ZW0gdHlwZS4gKi8KLQlyYyA9IHNlY3VyaXR5X2ZzX3VzZShzYnNlYy0+cHJvYyA/ICJwcm9jIiA6IHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKKwlyYyA9IHNlY3VyaXR5X2ZzX3VzZSgoc2JzZWMtPmZsYWdzICYgU0VfU0JQUk9DKSA/ICJwcm9jIiA6IHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNlY3VyaXR5X2ZzX3VzZSglcykgcmV0dXJuZWQgJWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgc2ItPnNfdHlwZS0+bmFtZSwgcmMpOwpAQCAtODA2LDEwICs4MjEsMTAgQEAKIAl9CiAKIAkvKiBob3cgY2FuIHdlIGNsb25lIGlmIHRoZSBvbGQgb25lIHdhc24ndCBzZXQgdXA/PyAqLwotCUJVR19PTighb2xkc2JzZWMtPmluaXRpYWxpemVkKTsKKwlCVUdfT04oIShvbGRzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSk7CiAKIAkvKiBpZiBmcyBpcyByZXVzaW5nIGEgc2IsIGp1c3QgbGV0IGl0cyBvcHRpb25zIHN0YW5kLi4uICovCi0JaWYgKG5ld3Nic2VjLT5pbml0aWFsaXplZCkKKwlpZiAobmV3c2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbmV3c2JzZWMtPmxvY2spOwpAQCAtOTE3LDcgKzkzMiw4IEBACiAJCQkJZ290byBvdXRfZXJyOwogCQkJfQogCQkJYnJlYWs7Ci0KKwkJY2FzZSBPcHRfbGFiZWxzdXBwb3J0OgorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgdW5rbm93biBtb3VudCBvcHRpb25cbiIpOwpAQCAtOTk5LDcgKzEwMTUsMTIgQEAKIAljaGFyICpwcmVmaXg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+bnVtX21udF9vcHRzOyBpKyspIHsKLQkJY2hhciAqaGFzX2NvbW1hID0gc3RyY2hyKG9wdHMtPm1udF9vcHRzW2ldLCAnLCcpOworCQljaGFyICpoYXNfY29tbWE7CisKKwkJaWYgKG9wdHMtPm1udF9vcHRzW2ldKQorCQkJaGFzX2NvbW1hID0gc3RyY2hyKG9wdHMtPm1udF9vcHRzW2ldLCAnLCcpOworCQllbHNlCisJCQloYXNfY29tbWEgPSBOVUxMOwogCiAJCXN3aXRjaCAob3B0cy0+bW50X29wdHNfZmxhZ3NbaV0pIHsKIAkJY2FzZSBDT05URVhUX01OVDoKQEAgLTEwMTQsNiArMTAzNSwxMCBAQAogCQljYXNlIERFRkNPTlRFWFRfTU5UOgogCQkJcHJlZml4ID0gREVGQ09OVEVYVF9TVFI7CiAJCQlicmVhazsKKwkJY2FzZSBTRV9TQkxBQkVMU1VQUDoKKwkJCXNlcV9wdXRjKG0sICcsJyk7CisJCQlzZXFfcHV0cyhtLCBMQUJFTFNVUFBfU1RSKTsKKwkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgogCQkJQlVHKCk7CiAJCX07CkBAIC0xMjA5LDcgKzEyMzQsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlzYnNlYyA9IGlub2RlLT5pX3NiLT5zX3NlY3VyaXR5OwotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpIHsKIAkJLyogRGVmZXIgaW5pdGlhbGl6YXRpb24gdW50aWwgc2VsaW51eF9jb21wbGV0ZV9pbml0LAogCQkgICBhZnRlciB0aGUgaW5pdGlhbCBwb2xpY3kgaXMgbG9hZGVkIGFuZCB0aGUgc2VjdXJpdHkKIAkJICAgc2VydmVyIGlzIHJlYWR5IHRvIGhhbmRsZSBjYWxscy4gKi8KQEAgLTEyMzcsMTkgKzEyNjIsMjYgQEAKIAkJCWRlbnRyeSA9IGRfZmluZF9hbGlhcyhpbm9kZSk7CiAJCX0KIAkJaWYgKCFkZW50cnkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgbm8gZGVudHJ5IGZvciBkZXY9JXMgIgotCQkJICAgICAgICJpbm89JWxkXG4iLCBfX2Z1bmNfXywgaW5vZGUtPmlfc2ItPnNfaWQsCi0JCQkgICAgICAgaW5vZGUtPmlfaW5vKTsKKwkJCS8qCisJCQkgKiB0aGlzIGlzIGNhbiBiZSBoaXQgb24gYm9vdCB3aGVuIGEgZmlsZSBpcyBhY2Nlc3NlZAorCQkJICogYmVmb3JlIHRoZSBwb2xpY3kgaXMgbG9hZGVkLiAgV2hlbiB3ZSBsb2FkIHBvbGljeSB3ZQorCQkJICogbWF5IGZpbmQgaW5vZGVzIHRoYXQgaGF2ZSBubyBkZW50cnkgb24gdGhlCisJCQkgKiBzYnNlYy0+aXNlY19oZWFkIGxpc3QuICBObyByZWFzb24gdG8gY29tcGxhaW4gYXMgdGhlc2UKKwkJCSAqIHdpbGwgZ2V0IGZpeGVkIHVwIHRoZSBuZXh0IHRpbWUgd2UgZ28gdGhyb3VnaAorCQkJICogaW5vZGVfZG9pbml0IHdpdGggYSBkZW50cnksIGJlZm9yZSB0aGVzZSBpbm9kZXMgY291bGQKKwkJCSAqIGJlIHVzZWQgYWdhaW4gYnkgdXNlcnNwYWNlLgorCQkJICovCiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsZW4gPSBJTklUQ09OVEVYVExFTjsKLQkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CisJCWNvbnRleHQgPSBrbWFsbG9jKGxlbisxLCBHRlBfTk9GUyk7CiAJCWlmICghY29udGV4dCkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZHB1dChkZW50cnkpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisJCWNvbnRleHRbbGVuXSA9ICdcMCc7CiAJCXJjID0gaW5vZGUtPmlfb3AtPmdldHhhdHRyKGRlbnRyeSwgWEFUVFJfTkFNRV9TRUxJTlVYLAogCQkJCQkgICBjb250ZXh0LCBsZW4pOwogCQlpZiAocmMgPT0gLUVSQU5HRSkgewpAQCAtMTI2MiwxMiArMTI5NCwxMyBAQAogCQkJfQogCQkJa2ZyZWUoY29udGV4dCk7CiAJCQlsZW4gPSByYzsKLQkJCWNvbnRleHQgPSBrbWFsbG9jKGxlbiwgR0ZQX05PRlMpOworCQkJY29udGV4dCA9IGttYWxsb2MobGVuKzEsIEdGUF9OT0ZTKTsKIAkJCWlmICghY29udGV4dCkgewogCQkJCXJjID0gLUVOT01FTTsKIAkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQorCQkJY29udGV4dFtsZW5dID0gJ1wwJzsKIAkJCXJjID0gaW5vZGUtPmlfb3AtPmdldHhhdHRyKGRlbnRyeSwKIAkJCQkJCSAgIFhBVFRSX05BTUVfU0VMSU5VWCwKIAkJCQkJCSAgIGNvbnRleHQsIGxlbik7CkBAIC0xMjg5LDEwICsxMzIyLDE5IEBACiAJCQkJCQkJICAgICBzYnNlYy0+ZGVmX3NpZCwKIAkJCQkJCQkgICAgIEdGUF9OT0ZTKTsKIAkJCWlmIChyYykgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgY29udGV4dF90b19zaWQoJXMpICIKLQkJCQkgICAgICAgInJldHVybmVkICVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwKLQkJCQkgICAgICAgX19mdW5jX18sIGNvbnRleHQsIC1yYywKLQkJCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CisJCQkJY2hhciAqZGV2ID0gaW5vZGUtPmlfc2ItPnNfaWQ7CisJCQkJdW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS0+aV9pbm87CisKKwkJCQlpZiAocmMgPT0gLUVJTlZBTCkgeworCQkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTRUxpbnV4OiBpbm9kZT0lbHUgb24gZGV2PSVzIHdhcyBmb3VuZCB0byBoYXZlIGFuIGludmFsaWQgIgorCQkJCQkJCSJjb250ZXh0PSVzLiAgVGhpcyBpbmRpY2F0ZXMgeW91IG1heSBuZWVkIHRvIHJlbGFiZWwgdGhlIGlub2RlIG9yIHRoZSAiCisJCQkJCQkJImZpbGVzeXN0ZW0gaW4gcXVlc3Rpb24uXG4iLCBpbm8sIGRldiwgY29udGV4dCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICBjb250ZXh0X3RvX3NpZCglcykgIgorCQkJCQkgICAgICAgInJldHVybmVkICVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fLCBjb250ZXh0LCAtcmMsIGRldiwgaW5vKTsKKwkJCQl9CiAJCQkJa2ZyZWUoY29udGV4dCk7CiAJCQkJLyogTGVhdmUgd2l0aCB0aGUgdW5sYWJlbGVkIFNJRCAqLwogCQkJCXJjID0gMDsKQEAgLTEzMjYsNyArMTM2OCw3IEBACiAJCS8qIERlZmF1bHQgdG8gdGhlIGZzIHN1cGVyYmxvY2sgU0lELiAqLwogCQlpc2VjLT5zaWQgPSBzYnNlYy0+c2lkOwogCi0JCWlmIChzYnNlYy0+cHJvYyAmJiAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoKHNic2VjLT5mbGFncyAmIFNFX1NCUFJPQykgJiYgIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCXN0cnVjdCBwcm9jX2lub2RlICpwcm9jaSA9IFBST0NfSShpbm9kZSk7CiAJCQlpZiAocHJvY2ktPnBkZSkgewogCQkJCWlzZWMtPnNjbGFzcyA9IGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MoaW5vZGUtPmlfbW9kZSk7CkBAIC0xNTg3LDcgKzE2MjksNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKCFuZXdzaWQgfHwgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkgeworCWlmICghbmV3c2lkIHx8ICEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKSB7CiAJCXJjID0gc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQoc2lkLCBkc2VjLT5zaWQsIHRjbGFzcywgJm5ld3NpZCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKQEAgLTE4MDEsNiArMTg0Myw4IEBACiAJCQlhdiB8PSBGSUZPX0ZJTEVfX09QRU47CiAJCWVsc2UgaWYgKFNfSVNESVIobW9kZSkpCiAJCQlhdiB8PSBESVJfX09QRU47CisJCWVsc2UgaWYgKFNfSVNTT0NLKG1vZGUpKQorCQkJYXYgfD0gU09DS19GSUxFX19PUEVOOwogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IFdBUk5JTkc6IGluc2lkZSAlcyB3aXRoICIKIAkJCQkidW5rbm93biBtb2RlOiVvXG4iLCBfX2Z1bmNfXywgbW9kZSk7CkBAIC0xODE1LDcgKzE4NTksNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+cHRyYWNlX21heV9hY2Nlc3MoY2hpbGQsIG1vZGUpOworCXJjID0gY2FwX3B0cmFjZV9tYXlfYWNjZXNzKGNoaWxkLCBtb2RlKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTgzMiw3ICsxODc2LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnB0cmFjZV90cmFjZW1lKHBhcmVudCk7CisJcmMgPSBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTg0OCw3ICsxODkyLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5jYXBnZXQodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOworCXJldHVybiBjYXBfY2FwZ2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2NhcHNldChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApAQCAtMTg1OCw3ICsxOTAyLDcgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHNlY29uZGFyeV9vcHMtPmNhcHNldChuZXcsIG9sZCwKKwllcnJvciA9IGNhcF9jYXBzZXQobmV3LCBvbGQsCiAJCQkJICAgICAgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE4NjYsMTIgKzE5MTAsMjIgQEAKIAlyZXR1cm4gY3JlZF9oYXNfcGVybShvbGQsIG5ldywgUFJPQ0VTU19fU0VUQ0FQKTsKIH0KIAorLyoKKyAqIChUaGlzIGNvbW1lbnQgdXNlZCB0byBsaXZlIHdpdGggdGhlIHNlbGludXhfdGFza19zZXR1aWQgaG9vaywKKyAqIHdoaWNoIHdhcyByZW1vdmVkKS4KKyAqCisgKiBTaW5jZSBzZXR1aWQgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZCBzaW5jZSB0aGUgU0VMaW51eAorICogY29udHJvbHMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgTGludXggaWRlbnRpdHkgYXR0cmlidXRlcywgU0VMaW51eCBkb2VzIG5vdAorICogbmVlZCB0byBjb250cm9sIHRoaXMgb3BlcmF0aW9uLiAgSG93ZXZlciwgU0VMaW51eCBkb2VzIGNvbnRyb2wgdGhlIHVzZSBvZgorICogdGhlIENBUF9TRVRVSUQgYW5kIENBUF9TRVRHSUQgY2FwYWJpbGl0aWVzIHVzaW5nIHRoZSBjYXBhYmxlIGhvb2suCisgKi8KKwogc3RhdGljIGludCBzZWxpbnV4X2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAogCQkJICAgaW50IGNhcCwgaW50IGF1ZGl0KQogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+Y2FwYWJsZSh0c2ssIGNyZWQsIGNhcCwgYXVkaXQpOworCXJjID0gY2FwX2NhcGFibGUodHNrLCBjcmVkLCBjYXAsIGF1ZGl0KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTk5Nyw3ICsyMDUxLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnN5c2xvZyh0eXBlKTsKKwlyYyA9IGNhcF9zeXNsb2codHlwZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIwMjgsMTAgKzIwODIsNiBAQAogICogbWFwcGluZy4gMCBtZWFucyB0aGVyZSBpcyBlbm91Z2ggbWVtb3J5IGZvciB0aGUgYWxsb2NhdGlvbiB0bwogICogc3VjY2VlZCBhbmQgLUVOT01FTSBpbXBsaWVzIHRoZXJlIGlzIG5vdC4KICAqCi0gKiBOb3RlIHRoYXQgc2Vjb25kYXJ5X29wcy0+Y2FwYWJsZSBhbmQgdGFza19oYXNfcGVybV9ub2F1ZGl0IHJldHVybiAwCi0gKiBpZiB0aGUgY2FwYWJpbGl0eSBpcyBncmFudGVkLCBidXQgX192bV9lbm91Z2hfbWVtb3J5IHJlcXVpcmVzIDEgaWYKLSAqIHRoZSBjYXBhYmlsaXR5IGlzIGdyYW50ZWQuCi0gKgogICogRG8gbm90IGF1ZGl0IHRoZSBzZWxpbnV4IHBlcm1pc3Npb24gY2hlY2ssIGFzIHRoaXMgaXMgYXBwbGllZCB0byBhbGwKICAqIHByb2Nlc3NlcyB0aGF0IGFsbG9jYXRlIG1hcHBpbmdzLgogICovCkBAIC0yMDU4LDcgKzIxMDgsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBicHJtLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+YnBybV9zZXRfY3JlZHMoYnBybSk7CisJcmMgPSBjYXBfYnBybV9zZXRfY3JlZHMoYnBybSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIxNTYsMTEgKzIyMDYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfYnBybV9jaGVja19zZWN1cml0eShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5icHJtX2NoZWNrX3NlY3VyaXR5KGJwcm0pOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfYnBybV9zZWN1cmVleGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKQEAgLTIxODAsNyArMjIyNSw3IEBACiAJCQkJCVBST0NFU1NfX05PQVRTRUNVUkUsIE5VTEwpOwogCX0KIAotCXJldHVybiAoYXRzZWN1cmUgfHwgc2Vjb25kYXJ5X29wcy0+YnBybV9zZWN1cmVleGVjKGJwcm0pKTsKKwlyZXR1cm4gKGF0c2VjdXJlIHx8IGNhcF9icHJtX3NlY3VyZWV4ZWMoYnBybSkpOwogfQogCiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpzZWxpbnV4ZnNfbW91bnQ7CkBAIC0yMjkwLDggKzIzMzUsNiBAQAogCXN0cnVjdCBybGltaXQgKnJsaW0sICppbml0cmxpbTsKIAlpbnQgcmMsIGk7CiAKLQlzZWNvbmRhcnlfb3BzLT5icHJtX2NvbW1pdHRpbmdfY3JlZHMoYnBybSk7Ci0KIAluZXdfdHNlYyA9IGJwcm0tPmNyZWQtPnNlY3VyaXR5OwogCWlmIChuZXdfdHNlYy0+c2lkID09IG5ld190c2VjLT5vc2lkKQogCQlyZXR1cm47CkBAIC0yMzM3LDggKzIzODAsNiBAQAogCWludCByYywgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2Vjb25kYXJ5X29wcy0+YnBybV9jb21taXR0ZWRfY3JlZHMoYnBybSk7Ci0KIAlvc2lkID0gdHNlYy0+b3NpZDsKIAlzaWQgPSB0c2VjLT5zaWQ7CiAKQEAgLTI0MDAsNyArMjQ0MSw4IEBACiAJcmV0dXJuIChtYXRjaF9wcmVmaXgoQ09OVEVYVF9TVFIsIHNpemVvZihDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CiAJCW1hdGNoX3ByZWZpeChGU0NPTlRFWFRfU1RSLCBzaXplb2YoRlNDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CiAJCW1hdGNoX3ByZWZpeChERUZDT05URVhUX1NUUiwgc2l6ZW9mKERFRkNPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKLQkJbWF0Y2hfcHJlZml4KFJPT1RDT05URVhUX1NUUiwgc2l6ZW9mKFJPT1RDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pKTsKKwkJbWF0Y2hfcHJlZml4KFJPT1RDT05URVhUX1NUUiwgc2l6ZW9mKFJPT1RDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CisJCW1hdGNoX3ByZWZpeChMQUJFTFNVUFBfU1RSLCBzaXplb2YoTEFCRUxTVVBQX1NUUiktMSwgb3B0aW9uLCBsZW4pKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRha2Vfb3B0aW9uKGNoYXIgKip0bywgY2hhciAqZnJvbSwgaW50ICpmaXJzdCwgaW50IGxlbikKQEAgLTI1MTMsMTEgKzI1NTUsNiBAQAogCQkJIHZvaWQgKmRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNiX21vdW50KGRldl9uYW1lLCBwYXRoLCB0eXBlLCBmbGFncywgZGF0YSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoZmxhZ3MgJiBNU19SRU1PVU5UKQogCQlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBwYXRoLT5tbnQtPm1udF9zYiwKQEAgLTI1MzAsMTEgKzI1NjcsNiBAQAogc3RhdGljIGludCBzZWxpbnV4X3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zYl91bW91bnQobW50LCBmbGFncyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBtbnQtPm1udF9zYiwKIAkJCQkgICBGSUxFU1lTVEVNX19VTk1PVU5ULCBOVUxMKTsKQEAgLTI1NzAsNyArMjYwMiw3IEBACiAJc2lkID0gdHNlYy0+c2lkOwogCW5ld3NpZCA9IHRzZWMtPmNyZWF0ZV9zaWQ7CiAKLQlpZiAoIW5ld3NpZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKSB7CisJaWYgKCFuZXdzaWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpIHsKIAkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwKIAkJCQkJICAgICBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpLAogCQkJCQkgICAgICZuZXdzaWQpOwpAQCAtMjU4NSwxNCArMjYxNywxNCBAQAogCX0KIAogCS8qIFBvc3NpYmx5IGRlZmVyIGluaXRpYWxpemF0aW9uIHRvIHNlbGludXhfY29tcGxldGVfaW5pdC4gKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpIHsKIAkJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwogCQlpc2VjLT5zY2xhc3MgPSBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpOwogCQlpc2VjLT5zaWQgPSBuZXdzaWQ7CiAJCWlzZWMtPmluaXRpYWxpemVkID0gMTsKIAl9CiAKLQlpZiAoIXNzX2luaXRpYWxpemVkIHx8IHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCFzc19pbml0aWFsaXplZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKG5hbWUpIHsKQEAgLTI2MjIsMjEgKzI2NTQsMTEgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV91bmxpbmsoZGlyLCBkZW50cnkpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7CiB9CiAKQEAgLTI2NTcsMTIgKzI2NzksNiBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsIGRldl90IGRldikKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQogCkBAIC0yNjgyLDIyICsyNjk4LDEzIEBACiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuYW1laWRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX2ZvbGxvd19saW5rKGRlbnRyeSwgbmFtZWlkYXRhKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fUkVBRCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmICghbWFzaykgewogCQkvKiBObyBwZXJtaXNzaW9uIHRvIGNoZWNrLiAgRXhpc3RlbmNlIHRlc3QuICovCkBAIC0yNzExLDExICsyNzE4LDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfc2V0YXR0cihkZW50cnksIGlhdHRyKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0ZPUkNFKQogCQlyZXR1cm4gMDsKQEAgLTI3NjksNyArMjc3MSw3IEBACiAJCXJldHVybiBzZWxpbnV4X2lub2RlX3NldG90aGVyeGF0dHIoZGVudHJ5LCBuYW1lKTsKIAogCXNic2VjID0gaW5vZGUtPmlfc2ItPnNfc2VjdXJpdHk7Ci0JaWYgKHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCkBAIC0yOTMxLDE2ICsyOTMzLDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmlub2RlX25lZWRfa2lsbHByaXYoZGVudHJ5KTsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+aW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKLX0KLQogc3RhdGljIHZvaWQgc2VsaW51eF9pbm9kZV9nZXRzZWNpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNlY2lkKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKQEAgLTI5NTIsNyArMjk0NCw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfcmV2YWxpZGF0ZV9maWxlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJaWYgKCFtYXNrKSB7CkBAIC0yOTY0LDI5ICsyOTU1LDE1IEBACiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmIChtYXNrICYgTUFZX1dSSVRFKSkKIAkJbWFzayB8PSBNQVlfQVBQRU5EOwogCi0JcmMgPSBmaWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsCi0JCQkgICBmaWxlX21hc2tfdG9fYXYoaW5vZGUtPmlfbW9kZSwgbWFzaykpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOworCXJldHVybiBmaWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsCisJCQkgICAgIGZpbGVfbWFza190b19hdihpbm9kZS0+aV9tb2RlLCBtYXNrKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCAqZnNlYyA9IGZpbGUtPmZfc2VjdXJpdHk7Ci0Jc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwotCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwotCi0JaWYgKCFtYXNrKSB7CisJaWYgKCFtYXNrKQogCQkvKiBObyBwZXJtaXNzaW9uIHRvIGNoZWNrLiAgRXhpc3RlbmNlIHRlc3QuICovCiAJCXJldHVybiAwOwotCX0KLQotCWlmIChzaWQgPT0gZnNlYy0+c2lkICYmIGZzZWMtPmlzaWQgPT0gaXNlYy0+c2lkCi0JICAgICYmIGZzZWMtPnBzZXFubyA9PSBhdmNfcG9saWN5X3NlcW5vKCkpCi0JCXJldHVybiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKIAogCXJldHVybiBzZWxpbnV4X3JldmFsaWRhdGVfZmlsZV9wZXJtaXNzaW9uKGZpbGUsIG1hc2spOwogfQpAQCAtMzA3OCwxOCArMzA1NSwxMyBAQAogCQkJCSB1bnNpZ25lZCBsb25nIHByb3QpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmZpbGVfbXByb3RlY3Qodm1hLCByZXFwcm90LCBwcm90KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChzZWxpbnV4X2NoZWNrcmVxcHJvdCkKIAkJcHJvdCA9IHJlcXByb3Q7CiAKICNpZm5kZWYgQ09ORklHX1BQQzMyCiAJaWYgKChwcm90ICYgUFJPVF9FWEVDKSAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSkgewotCQlyYyA9IDA7CisJCWludCByYyA9IDA7CiAJCWlmICh2bWEtPnZtX3N0YXJ0ID49IHZtYS0+dm1fbW0tPnN0YXJ0X2JyayAmJgogCQkgICAgdm1hLT52bV9lbmQgPD0gdm1hLT52bV9tbS0+YnJrKSB7CiAJCQlyYyA9IGNyZWRfaGFzX3Blcm0oY3JlZCwgY3JlZCwgUFJPQ0VTU19fRVhFQ0hFQVApOwpAQCAtMzIzOSwxMiArMzIxMSw2IEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX2NyZWF0ZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzKQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19jcmVhdGUoY2xvbmVfZmxhZ3MpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJcmV0dXJuIGN1cnJlbnRfaGFzX3Blcm0oY3VycmVudCwgUFJPQ0VTU19fRk9SSyk7CiB9CiAKQEAgLTMyNzgsMTQgKzMyNDQsNiBAQAogfQogCiAvKgotICogY29tbWl0IG5ldyBjcmVkZW50aWFscwotICovCi1zdGF0aWMgdm9pZCBzZWxpbnV4X2NyZWRfY29tbWl0KHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCi17Ci0Jc2Vjb25kYXJ5X29wcy0+Y3JlZF9jb21taXQobmV3LCBvbGQpOwotfQotCi0vKgogICogc2V0IHRoZSBzZWN1cml0eSBkYXRhIGZvciBhIGtlcm5lbCBzZXJ2aWNlCiAgKiAtIGFsbCB0aGUgY3JlYXRpb24gY29udGV4dHMgYXJlIHNldCB0byB1bmxhYmVsbGVkCiAgKi8KQEAgLTMzMjksMjkgKzMyODcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19zZXR1aWQodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwgaW50IGZsYWdzKQotewotCS8qIFNpbmNlIHNldHVpZCBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgcHJvY2VzcywgYW5kCi0JICAgc2luY2UgdGhlIFNFTGludXggY29udHJvbHMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgTGludXgKLQkgICBpZGVudGl0eSBhdHRyaWJ1dGVzLCBTRUxpbnV4IGRvZXMgbm90IG5lZWQgdG8gY29udHJvbAotCSAgIHRoaXMgb3BlcmF0aW9uLiAgSG93ZXZlciwgU0VMaW51eCBkb2VzIGNvbnRyb2wgdGhlIHVzZQotCSAgIG9mIHRoZSBDQVBfU0VUVUlEIGFuZCBDQVBfU0VUR0lEIGNhcGFiaWxpdGllcyB1c2luZyB0aGUKLQkgICBjYXBhYmxlIGhvb2suICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX2ZpeF9zZXR1aWQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKLQkJCQkgICBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPnRhc2tfZml4X3NldHVpZChuZXcsIG9sZCwgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRnaWQoZ2lkX3QgaWQwLCBnaWRfdCBpZDEsIGdpZF90IGlkMiwgaW50IGZsYWdzKQotewotCS8qIFNlZSB0aGUgY29tbWVudCBmb3Igc2V0dWlkIGFib3ZlLiAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRwZ2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcGlkX3QgcGdpZCkKIHsKIAlyZXR1cm4gY3VycmVudF9oYXNfcGVybShwLCBQUk9DRVNTX19TRVRQR0lEKTsKQEAgLTMzNzIsMTcgKzMzMDcsMTEgQEAKIAkqc2VjaWQgPSB0YXNrX3NpZChwKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0Z3JvdXBzKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQotewotCS8qIFNlZSB0aGUgY29tbWVudCBmb3Igc2V0dWlkIGFib3ZlLiAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRuaWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2UpCiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldG5pY2UocCwgbmljZSk7CisJcmMgPSBjYXBfdGFza19zZXRuaWNlKHAsIG5pY2UpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zMzkzLDcgKzMzMjIsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRpb3ByaW8ocCwgaW9wcmlvKTsKKwlyYyA9IGNhcF90YXNrX3NldGlvcHJpbyhwLCBpb3ByaW8pOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zNDA4LDExICszMzM3LDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKm5ld19ybGltKQogewogCXN0cnVjdCBybGltaXQgKm9sZF9ybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltICsgcmVzb3VyY2U7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldHJsaW1pdChyZXNvdXJjZSwgbmV3X3JsaW0pOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJLyogQ29udHJvbCB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIGhhcmQgbGltaXQgKHdoZXRoZXIKIAkgICBsb3dlcmluZyBvciByYWlzaW5nIGl0KSwgc28gdGhhdCB0aGUgaGFyZCBsaW1pdCBjYW4KQEAgLTM0MjgsNyArMzM1Miw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksIGxwKTsKKwlyYyA9IGNhcF90YXNrX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksIGxwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzQ1MSwxMCArMzM3NSw2IEBACiAJdTMyIHBlcm07CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlpZiAoIXNpZykKIAkJcGVybSA9IFBST0NFU1NfX1NJR05VTEw7IC8qIG51bGwgc2lnbmFsOyBleGlzdGVuY2UgdGVzdCAqLwogCWVsc2UKQEAgLTM0NjcsMTggKzMzODcsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfcHJjdGwoaW50IG9wdGlvbiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMywKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNSkKLXsKLQkvKiBUaGUgY3VycmVudCBwcmN0bCBvcGVyYXRpb25zIGRvIG5vdCBhcHBlYXIgdG8gcmVxdWlyZQotCSAgIGFueSBTRUxpbnV4IGNvbnRyb2xzIHNpbmNlIHRoZXkgbWVyZWx5IG9ic2VydmUgb3IgbW9kaWZ5Ci0JICAgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuICovCi0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPnRhc2tfcHJjdGwob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfd2FpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIHRhc2tfaGFzX3Blcm0ocCwgY3VycmVudCwgUFJPQ0VTU19fU0lHQ0hMRCk7CkBAIC0zNzk5LDcgKzM3MDcsNyBAQAogCQlza3NlYyA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKIAkJc2tzZWMtPnNpZCA9IGlzZWMtPnNpZDsKIAkJc2tzZWMtPnNjbGFzcyA9IGlzZWMtPnNjbGFzczsKLQkJZXJyID0gc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHNvY2spOworCQllcnIgPSBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc29jay0+c2ssIGZhbWlseSk7CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTM5OTAsMTMgKzM4OTgsNyBAQAogc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJCQkgIGludCBzaXplKQogewotCWludCByYzsKLQotCXJjID0gc29ja2V0X2hhc19wZXJtKGN1cnJlbnQsIHNvY2ssIFNPQ0tFVF9fV1JJVEUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oU09DS19JTk9ERShzb2NrKSwgTUFZX1dSSVRFKTsKKwlyZXR1cm4gc29ja2V0X2hhc19wZXJtKGN1cnJlbnQsIHNvY2ssIFNPQ0tFVF9fV1JJVEUpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLApAQCAtNDA0NywxMCArMzk0OSw2IEBACiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCWludCBlcnI7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT51bml4X3N0cmVhbV9jb25uZWN0KHNvY2ssIG90aGVyLCBuZXdzayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQogCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwogCW90aGVyX2lzZWMgPSBTT0NLX0lOT0RFKG90aGVyKS0+aV9zZWN1cml0eTsKIApAQCAtNDEyMCw3MiArNDAxOCw2IEBACiAJCQkgICAgU0VDQ0xBU1NfTk9ERSwgTk9ERV9fUkVDVkZST00sIGFkKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3NvY2tfcmN2X3NrYl9pcHRhYmxlc19jb21wYXQoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsCi0JCQkJCQl1MTYgZmFtaWx5LAotCQkJCQkJY2hhciAqYWRkcnApCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKLQl1MTYgc2tfY2xhc3M7Ci0JdTMyIG5ldGlmX3Blcm0sIG5vZGVfcGVybSwgcmVjdl9wZXJtOwotCXUzMiBwb3J0X3NpZCwgbm9kZV9zaWQsIGlmX3NpZCwgc2tfc2lkOwotCi0Jc2tfc2lkID0gc2tzZWMtPnNpZDsKLQlza19jbGFzcyA9IHNrc2VjLT5zY2xhc3M7Ci0KLQlzd2l0Y2ggKHNrX2NsYXNzKSB7Ci0JY2FzZSBTRUNDTEFTU19VRFBfU09DS0VUOgotCQluZXRpZl9wZXJtID0gTkVUSUZfX1VEUF9SRUNWOwotCQlub2RlX3Blcm0gPSBOT0RFX19VRFBfUkVDVjsKLQkJcmVjdl9wZXJtID0gVURQX1NPQ0tFVF9fUkVDVl9NU0c7Ci0JCWJyZWFrOwotCWNhc2UgU0VDQ0xBU1NfVENQX1NPQ0tFVDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19UQ1BfUkVDVjsKLQkJbm9kZV9wZXJtID0gTk9ERV9fVENQX1JFQ1Y7Ci0JCXJlY3ZfcGVybSA9IFRDUF9TT0NLRVRfX1JFQ1ZfTVNHOwotCQlicmVhazsKLQljYXNlIFNFQ0NMQVNTX0RDQ1BfU09DS0VUOgotCQluZXRpZl9wZXJtID0gTkVUSUZfX0RDQ1BfUkVDVjsKLQkJbm9kZV9wZXJtID0gTk9ERV9fRENDUF9SRUNWOwotCQlyZWN2X3Blcm0gPSBEQ0NQX1NPQ0tFVF9fUkVDVl9NU0c7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fUkFXSVBfUkVDVjsKLQkJbm9kZV9wZXJtID0gTk9ERV9fUkFXSVBfUkVDVjsKLQkJcmVjdl9wZXJtID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JZXJyID0gc2VsX25ldGlmX3NpZChza2ItPmlpZiwgJmlmX3NpZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBpZl9zaWQsIFNFQ0NMQVNTX05FVElGLCBuZXRpZl9wZXJtLCBhZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHNlbF9uZXRub2RlX3NpZChhZGRycCwgZmFtaWx5LCAmbm9kZV9zaWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgbm9kZV9zaWQsIFNFQ0NMQVNTX05PREUsIG5vZGVfcGVybSwgYWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoIXJlY3ZfcGVybSkKLQkJcmV0dXJuIDA7Ci0JZXJyID0gc2VsX25ldHBvcnRfc2lkKHNrLT5za19wcm90b2NvbCwKLQkJCSAgICAgIG50b2hzKGFkLT51Lm5ldC5zcG9ydCksICZwb3J0X3NpZCk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlNFTGludXg6IGZhaWx1cmUgaW4iCi0JCSAgICAgICAiIHNlbGludXhfc29ja19yY3Zfc2tiX2lwdGFibGVzX2NvbXBhdCgpLCIKLQkJICAgICAgICIgbmV0d29yayBwb3J0IGxhYmVsIG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiBhdmNfaGFzX3Blcm0oc2tfc2lkLCBwb3J0X3NpZCwgc2tfY2xhc3MsIHJlY3ZfcGVybSwgYWQpOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHUxNiBmYW1pbHkpCiB7CkBAIC00MjAzLDE0ICs0MDM1LDEyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQpCi0JCWVyciA9IHNlbGludXhfc29ja19yY3Zfc2tiX2lwdGFibGVzX2NvbXBhdChzaywgc2tiLCAmYWQsCi0JCQkJCQkJICAgZmFtaWx5LCBhZGRycCk7Ci0JZWxzZSBpZiAoc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKSkKKwlpZiAoc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKSkgewogCQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBza2ItPnNlY21hcmssIFNFQ0NMQVNTX1BBQ0tFVCwKIAkJCQkgICBQQUNLRVRfX1JFQ1YsICZhZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQogCiAJaWYgKHNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpIHsKIAkJZXJyID0gc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZwZWVyX3NpZCk7CkBAIC00MjUyLDcgKzQwODIsNyBAQAogCSAqIHRvIHRoZSBzZWxpbnV4X3NvY2tfcmN2X3NrYl9jb21wYXQoKSBmdW5jdGlvbiB0byBkZWFsIHdpdGggdGhlCiAJICogc3BlY2lhbCBoYW5kbGluZy4gIFdlIGRvIHRoaXMgaW4gYW4gYXR0ZW1wdCB0byBrZWVwIHRoaXMgZnVuY3Rpb24KIAkgKiBhcyBmYXN0IGFuZCBhcyBjbGVhbiBhcyBwb3NzaWJsZS4gKi8KLQlpZiAoc2VsaW51eF9jb21wYXRfbmV0IHx8ICFzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQorCWlmICghc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKIAkJcmV0dXJuIHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdChzaywgc2tiLCBmYW1pbHkpOwogCiAJc2VjbWFya19hY3RpdmUgPSBzZWxpbnV4X3NlY21hcmtfZW5hYmxlZCgpOwpAQCAtNDM4NCw3ICs0MjE0LDcgQEAKIAluZXdzc2VjLT5wZWVyX3NpZCA9IHNzZWMtPnBlZXJfc2lkOwogCW5ld3NzZWMtPnNjbGFzcyA9IHNzZWMtPnNjbGFzczsKIAotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KG5ld3NzZWMsIG5ld3NrLT5za19mYW1pbHkpOworCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KG5ld3NzZWMpOwogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2dldHNlY2lkKHN0cnVjdCBzb2NrICpzaywgdTMyICpzZWNpZCkKQEAgLTQ0MjgsMTYgKzQyNTgsMTUgQEAKIAlpZiAocGVlcnNpZCA9PSBTRUNTSURfTlVMTCkgewogCQlyZXEtPnNlY2lkID0gc2tzZWMtPnNpZDsKIAkJcmVxLT5wZWVyX3NlY2lkID0gU0VDU0lEX05VTEw7Ci0JCXJldHVybiAwOworCX0gZWxzZSB7CisJCWVyciA9IHNlY3VyaXR5X3NpZF9tbHNfY29weShza3NlYy0+c2lkLCBwZWVyc2lkLCAmbmV3c2lkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXJlcS0+c2VjaWQgPSBuZXdzaWQ7CisJCXJlcS0+cGVlcl9zZWNpZCA9IHBlZXJzaWQ7CiAJfQogCi0JZXJyID0gc2VjdXJpdHlfc2lkX21sc19jb3B5KHNrc2VjLT5zaWQsIHBlZXJzaWQsICZuZXdzaWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlyZXEtPnNlY2lkID0gbmV3c2lkOwotCXJlcS0+cGVlcl9zZWNpZCA9IHBlZXJzaWQ7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHJlcSwgZmFtaWx5KTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssCkBAIC00NDU0LDcgKzQyODMsNyBAQAogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFueSBzb3J0IG9mIGxvY2sgaGVyZSBhcyB3ZSBhcmUgdGhlIG9ubHkKIAkgKiB0aHJlYWQgd2l0aCBhY2Nlc3MgdG8gbmV3c2tzZWMgKi8KLQlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChuZXdza3NlYywgcmVxLT5yc2tfb3BzLT5mYW1pbHkpOworCXNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKG5ld3NrLCByZXEtPnJza19vcHMtPmZhbWlseSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbGludXhfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTQ0NjcsOCArNDI5Niw2IEBACiAJCWZhbWlseSA9IFBGX0lORVQ7CiAKIAlzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnNrc2VjLT5wZWVyX3NpZCk7Ci0KLQlzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc2ssIGZhbWlseSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbGludXhfcmVxX2NsYXNzaWZ5X2Zsb3coY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApAQCAtNDYyMCw3MSArNDQ0Nyw2IEBACiAJcmV0dXJuIHNlbGludXhfaXBfb3V0cHV0KHNrYiwgUEZfSU5FVCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfaXB0YWJsZXNfY29tcGF0KHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCWludCBpZmluZGV4LAotCQkJCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwKLQkJCQkJCXUxNiBmYW1pbHksIGNoYXIgKmFkZHJwKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0JdTE2IHNrX2NsYXNzOwotCXUzMiBuZXRpZl9wZXJtLCBub2RlX3Blcm0sIHNlbmRfcGVybTsKLQl1MzIgcG9ydF9zaWQsIG5vZGVfc2lkLCBpZl9zaWQsIHNrX3NpZDsKLQotCXNrX3NpZCA9IHNrc2VjLT5zaWQ7Ci0Jc2tfY2xhc3MgPSBza3NlYy0+c2NsYXNzOwotCi0Jc3dpdGNoIChza19jbGFzcykgewotCWNhc2UgU0VDQ0xBU1NfVURQX1NPQ0tFVDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19VRFBfU0VORDsKLQkJbm9kZV9wZXJtID0gTk9ERV9fVURQX1NFTkQ7Ci0JCXNlbmRfcGVybSA9IFVEUF9TT0NLRVRfX1NFTkRfTVNHOwotCQlicmVhazsKLQljYXNlIFNFQ0NMQVNTX1RDUF9TT0NLRVQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fVENQX1NFTkQ7Ci0JCW5vZGVfcGVybSA9IE5PREVfX1RDUF9TRU5EOwotCQlzZW5kX3Blcm0gPSBUQ1BfU09DS0VUX19TRU5EX01TRzsKLQkJYnJlYWs7Ci0JY2FzZSBTRUNDTEFTU19EQ0NQX1NPQ0tFVDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19EQ0NQX1NFTkQ7Ci0JCW5vZGVfcGVybSA9IE5PREVfX0RDQ1BfU0VORDsKLQkJc2VuZF9wZXJtID0gRENDUF9TT0NLRVRfX1NFTkRfTVNHOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluZXRpZl9wZXJtID0gTkVUSUZfX1JBV0lQX1NFTkQ7Ci0JCW5vZGVfcGVybSA9IE5PREVfX1JBV0lQX1NFTkQ7Ci0JCXNlbmRfcGVybSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWVyciA9IHNlbF9uZXRpZl9zaWQoaWZpbmRleCwgJmlmX3NpZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBpZl9zaWQsIFNFQ0NMQVNTX05FVElGLCBuZXRpZl9wZXJtLCBhZCk7Ci0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZWxfbmV0bm9kZV9zaWQoYWRkcnAsIGZhbWlseSwgJm5vZGVfc2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IGF2Y19oYXNfcGVybShza19zaWQsIG5vZGVfc2lkLCBTRUNDTEFTU19OT0RFLCBub2RlX3Blcm0sIGFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHNlbmRfcGVybSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWVyciA9IHNlbF9uZXRwb3J0X3NpZChzay0+c2tfcHJvdG9jb2wsCi0JCQkgICAgICBudG9ocyhhZC0+dS5uZXQuZHBvcnQpLCAmcG9ydF9zaWQpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJTRUxpbnV4OiBmYWlsdXJlIGluIgotCQkgICAgICAgIiBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9pcHRhYmxlc19jb21wYXQoKSwiCi0JCSAgICAgICAiIG5ldHdvcmsgcG9ydCBsYWJlbCBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gYXZjX2hhc19wZXJtKHNrX3NpZCwgcG9ydF9zaWQsIHNrX2NsYXNzLCBzZW5kX3Blcm0sIGFkKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCWludCBpZmluZGV4LAogCQkJCQkJdTE2IGZhbWlseSkKQEAgLTQ3MDUsMTUgKzQ0NjcsMTAgQEAKIAlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMCwgJnByb3RvKSkKIAkJcmV0dXJuIE5GX0RST1A7CiAKLQlpZiAoc2VsaW51eF9jb21wYXRfbmV0KSB7Ci0JCWlmIChzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9pcHRhYmxlc19jb21wYXQoc2tiLT5zaywgaWZpbmRleCwKLQkJCQkJCQkgJmFkLCBmYW1pbHksIGFkZHJwKSkKLQkJCXJldHVybiBORl9EUk9QOwotCX0gZWxzZSBpZiAoc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKSkgeworCWlmIChzZWxpbnV4X3NlY21hcmtfZW5hYmxlZCgpKQogCQlpZiAoYXZjX2hhc19wZXJtKHNrc2VjLT5zaWQsIHNrYi0+c2VjbWFyaywKIAkJCQkgU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX1NFTkQsICZhZCkpCiAJCQlyZXR1cm4gTkZfRFJPUDsKLQl9CiAKIAlpZiAoc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKIAkJaWYgKHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdChza3NlYy0+c2lkLCBza2IsICZhZCwgcHJvdG8pKQpAQCAtNDczNyw3ICs0NDk0LDcgQEAKIAkgKiB0byB0aGUgc2VsaW51eF9pcF9wb3N0cm91dGVfY29tcGF0KCkgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZQogCSAqIHNwZWNpYWwgaGFuZGxpbmcuICBXZSBkbyB0aGlzIGluIGFuIGF0dGVtcHQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uCiAJICogYXMgZmFzdCBhbmQgYXMgY2xlYW4gYXMgcG9zc2libGUuICovCi0JaWYgKHNlbGludXhfY29tcGF0X25ldCB8fCAhc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKKwlpZiAoIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCiAJCXJldHVybiBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9jb21wYXQoc2tiLCBpZmluZGV4LCBmYW1pbHkpOwogI2lmZGVmIENPTkZJR19YRlJNCiAJLyogSWYgc2tiLT5kc3QtPnhmcm0gaXMgbm9uLU5VTEwgdGhlbiB0aGUgcGFja2V0IGlzIHVuZGVyZ29pbmcgYW4gSVBzZWMKQEAgLTQ4NDQsNyArNDYwMSw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfc2VuZChzaywgc2tiKTsKKwllcnIgPSBjYXBfbmV0bGlua19zZW5kKHNrLCBza2IpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ4NTksNyArNDYxNiw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT5uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKKwllcnIgPSBjYXBfbmV0bGlua19yZWN2KHNrYiwgY2FwYWJpbGl0eSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTE2NywxMSArNDkyNCw2IEBACiAJCQkgICAgIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQogewogCXUzMiBwZXJtczsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNobV9zaG1hdChzaHAsIHNobWFkZHIsIHNobWZsZyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoc2htZmxnICYgU0hNX1JET05MWSkKIAkJcGVybXMgPSBTSE1fX1JFQUQ7CkBAIC01NTgxLDcgKzUzMzMsNiBAQAogCS5uZXRsaW5rX3JlY3YgPQkJCXNlbGludXhfbmV0bGlua19yZWN2LAogCiAJLmJwcm1fc2V0X2NyZWRzID0JCXNlbGludXhfYnBybV9zZXRfY3JlZHMsCi0JLmJwcm1fY2hlY2tfc2VjdXJpdHkgPQkJc2VsaW51eF9icHJtX2NoZWNrX3NlY3VyaXR5LAogCS5icHJtX2NvbW1pdHRpbmdfY3JlZHMgPQlzZWxpbnV4X2Jwcm1fY29tbWl0dGluZ19jcmVkcywKIAkuYnBybV9jb21taXR0ZWRfY3JlZHMgPQkJc2VsaW51eF9icHJtX2NvbW1pdHRlZF9jcmVkcywKIAkuYnBybV9zZWN1cmVleGVjID0JCXNlbGludXhfYnBybV9zZWN1cmVleGVjLApAQCAtNTYyMyw4ICs1Mzc0LDYgQEAKIAkuaW5vZGVfZ2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWN1cml0eSwKIAkuaW5vZGVfc2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9zZXRzZWN1cml0eSwKIAkuaW5vZGVfbGlzdHNlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfbGlzdHNlY3VyaXR5LAotCS5pbm9kZV9uZWVkX2tpbGxwcml2ID0JCXNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdiwKLQkuaW5vZGVfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9raWxscHJpdiwKIAkuaW5vZGVfZ2V0c2VjaWQgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWNpZCwKIAogCS5maWxlX3Blcm1pc3Npb24gPQkJc2VsaW51eF9maWxlX3Blcm1pc3Npb24sCkBAIC01NjQ0LDE3ICs1MzkzLDEyIEBACiAJLnRhc2tfY3JlYXRlID0JCQlzZWxpbnV4X3Rhc2tfY3JlYXRlLAogCS5jcmVkX2ZyZWUgPQkJCXNlbGludXhfY3JlZF9mcmVlLAogCS5jcmVkX3ByZXBhcmUgPQkJCXNlbGludXhfY3JlZF9wcmVwYXJlLAotCS5jcmVkX2NvbW1pdCA9CQkJc2VsaW51eF9jcmVkX2NvbW1pdCwKIAkua2VybmVsX2FjdF9hcyA9CQlzZWxpbnV4X2tlcm5lbF9hY3RfYXMsCiAJLmtlcm5lbF9jcmVhdGVfZmlsZXNfYXMgPQlzZWxpbnV4X2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMsCi0JLnRhc2tfc2V0dWlkID0JCQlzZWxpbnV4X3Rhc2tfc2V0dWlkLAotCS50YXNrX2ZpeF9zZXR1aWQgPQkJc2VsaW51eF90YXNrX2ZpeF9zZXR1aWQsCi0JLnRhc2tfc2V0Z2lkID0JCQlzZWxpbnV4X3Rhc2tfc2V0Z2lkLAogCS50YXNrX3NldHBnaWQgPQkJCXNlbGludXhfdGFza19zZXRwZ2lkLAogCS50YXNrX2dldHBnaWQgPQkJCXNlbGludXhfdGFza19nZXRwZ2lkLAogCS50YXNrX2dldHNpZCA9CQkJc2VsaW51eF90YXNrX2dldHNpZCwKIAkudGFza19nZXRzZWNpZCA9CQlzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQsCi0JLnRhc2tfc2V0Z3JvdXBzID0JCXNlbGludXhfdGFza19zZXRncm91cHMsCiAJLnRhc2tfc2V0bmljZSA9CQkJc2VsaW51eF90YXNrX3NldG5pY2UsCiAJLnRhc2tfc2V0aW9wcmlvID0JCXNlbGludXhfdGFza19zZXRpb3ByaW8sCiAJLnRhc2tfZ2V0aW9wcmlvID0JCXNlbGludXhfdGFza19nZXRpb3ByaW8sCkBAIC01NjY0LDcgKzU0MDgsNiBAQAogCS50YXNrX21vdmVtZW1vcnkgPQkJc2VsaW51eF90YXNrX21vdmVtZW1vcnksCiAJLnRhc2tfa2lsbCA9CQkJc2VsaW51eF90YXNrX2tpbGwsCiAJLnRhc2tfd2FpdCA9CQkJc2VsaW51eF90YXNrX3dhaXQsCi0JLnRhc2tfcHJjdGwgPQkJCXNlbGludXhfdGFza19wcmN0bCwKIAkudGFza190b19pbm9kZSA9CQlzZWxpbnV4X3Rhc2tfdG9faW5vZGUsCiAKIAkuaXBjX3Blcm1pc3Npb24gPQkJc2VsaW51eF9pcGNfcGVybWlzc2lvbiwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggYzBjODg1NC4uMzFkZjFkNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fRVhFQ01PRCwgImV4ZWNtb2QiKQogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19CTEtfRklMRSwgQkxLX0ZJTEVfX09QRU4sICJvcGVuIikKKyAgIFNfKFNFQ0NMQVNTX1NPQ0tfRklMRSwgU09DS19GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19GSUZPX0ZJTEUsIEZJRk9fRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfRkQsIEZEX19VU0UsICJ1c2UiKQogICAgU18oU0VDQ0xBU1NfVENQX1NPQ0tFVCwgVENQX1NPQ0tFVF9fQ09OTkVDVFRPLCAiY29ubmVjdHRvIikKQEAgLTE1Miw2ICsxNTMsNyBAQAogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVksICJubG1zZ19yZWxheSIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWLCAibmxtc2dfcmVhZHByaXYiKQorICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQsICJubG1zZ190dHlfYXVkaXQiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIE5FVExJTktfSVA2RldfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRU5EVE8sICJzZW5kdG8iKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAppbmRleCAwYmE3OWZlLi5kNjQ1MTkyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApAQCAtMTc0LDYgKzE3NCw3IEBACiAjZGVmaW5lIFNPQ0tfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAogI2RlZmluZSBTT0NLX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKICNkZWZpbmUgU09DS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCisjZGVmaW5lIFNPQ0tfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAogI2RlZmluZSBGSUZPX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgRklGT19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIEZJRk9fRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApAQCAtNzA3LDYgKzcwOCw3IEBACiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICAgICAgIDB4MDA4MDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVkgICAgICAgICAweDAxMDAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWICAgICAgMHgwMjAwMDAwMFVMCisjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQgICAgIDB4MDQwMDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19XUklURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAppbmRleCBiOTEzYzhkLi5iNGI1YjliIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3JlcXVlc3Rfc29jay5oPgogCiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAib2Jqc2VjLmgiCkBAIC00Miw4ICs0Myw3IEBACiB2b2lkIHNlbGludXhfbmV0bGJsX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIGludCBnYXRld2F5KTsKIAogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9mcmVlKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpOwotdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCSAgICAgIGludCBmYW1pbHkpOwordm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKTsKIAogaW50IHNlbGludXhfbmV0bGJsX3NrYnVmZl9nZXRzaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgdTE2IGZhbWlseSwKQEAgLTUzLDkgKzUzLDkgQEAKIAkJCQkgdTE2IGZhbWlseSwKIAkJCQkgdTMyIHNpZCk7CiAKLXZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7Ci1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwotaW50IHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworaW50IHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdTE2IGZhbWlseSk7Cit2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7CitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7CiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTE2IGZhbWlseSwKQEAgLTg1LDggKzg1LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KAotCQkJCQkgICAgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKLQkJCQkJICAgICAgIGludCBmYW1pbHkpCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKQogewogCXJldHVybjsKIH0KQEAgLTExMywxNyArMTEyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJCXUxNiBmYW1pbHkpCi17Ci0JcmV0dXJuOwotfQotc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJCQkgICB1MTYgZmFtaWx5KQogewogCXJldHVybiAwOwogfQotc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkJICBpbnQgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpCit7CisJcmV0dXJuOworfQorc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICB1MTYgZmFtaWx5KQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCmluZGV4IDNjYzQ1MTYuLmM0ZTA2MjMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKQEAgLTYwLDkgKzYwLDcgQEAKIAl1MzIgZGVmX3NpZDsJCQkvKiBkZWZhdWx0IFNJRCBmb3IgbGFiZWxpbmcgKi8KIAl1MzIgbW50cG9pbnRfc2lkOwkJLyogU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIGNvbnRleHQgZm9yIGZpbGVzICovCiAJdW5zaWduZWQgaW50IGJlaGF2aW9yOwkJLyogbGFiZWxpbmcgYmVoYXZpb3IgKi8KLQl1bnNpZ25lZCBjaGFyIGluaXRpYWxpemVkOwkvKiBpbml0aWFsaXphdGlvbiBmbGFnICovCiAJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIHdoaWNoIG1vdW50IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHByb2M7CQkvKiBwcm9jIGZzICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBpc2VjX2hlYWQ7CiAJc3BpbmxvY2tfdCBpc2VjX2xvY2s7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCmluZGV4IDcyNDQ3MzcuLjVjMzQzNGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCkBAIC0zNywxNSArMzcsMjMgQEAKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJUE9MSUNZREJfVkVSU0lPTl9CT1VOREFSWQogI2VuZGlmCiAKKy8qIE1hc2sgZm9yIGp1c3QgdGhlIG1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfTU5UTUFTSwkweDBmCisvKiBTdXBlciBibG9jayBzZWN1cml0eSBzdHJ1Y3QgZmxhZ3MgZm9yIG1vdW50IG9wdGlvbnMgKi8KICNkZWZpbmUgQ09OVEVYVF9NTlQJMHgwMQogI2RlZmluZSBGU0NPTlRFWFRfTU5UCTB4MDIKICNkZWZpbmUgUk9PVENPTlRFWFRfTU5UCTB4MDQKICNkZWZpbmUgREVGQ09OVEVYVF9NTlQJMHgwOAorLyogTm9uLW1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfU0JJTklUSUFMSVpFRAkweDEwCisjZGVmaW5lIFNFX1NCUFJPQwkJMHgyMAorI2RlZmluZSBTRV9TQkxBQkVMU1VQUAkweDQwCiAKICNkZWZpbmUgQ09OVEVYVF9TVFIJImNvbnRleHQ9IgogI2RlZmluZSBGU0NPTlRFWFRfU1RSCSJmc2NvbnRleHQ9IgogI2RlZmluZSBST09UQ09OVEVYVF9TVFIJInJvb3Rjb250ZXh0PSIKICNkZWZpbmUgREVGQ09OVEVYVF9TVFIJImRlZmNvbnRleHQ9IgorI2RlZmluZSBMQUJFTFNVUFBfU1RSICJzZWNsYWJlbCIKIAogc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cjsKIApAQCAtODAsNyArODgsNiBAQAogI2RlZmluZSBTRUxfVkVDX01BWCAzMgogc3RydWN0IGF2X2RlY2lzaW9uIHsKIAl1MzIgYWxsb3dlZDsKLQl1MzIgZGVjaWRlZDsKIAl1MzIgYXVkaXRhbGxvdzsKIAl1MzIgYXVkaXRkZW55OwogCXUzMiBzZXFubzsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwppbmRleCAzNTA3OTRhLi4yZTk4NDQxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCkBAIC0xMDAsNDEgKzEwMCw2IEBACiB9CiAKIC8qKgotICogc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQgLSBMYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtCi0gKiBAc2s6IHRoZSBzb2NrZXQgdG8gbGFiZWwKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIEF0dGVtcHQgdG8gbGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbS4gIFJldHVybnMgemVybyB2YWx1ZXMKLSAqIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgotICoKLSAqLwotc3RhdGljIGludCBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JaW50IHJjOwotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7Ci0KLQlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQotCQlyZXR1cm4gMDsKLQotCXNlY2F0dHIgPSBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIoc2spOwotCWlmIChzZWNhdHRyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgc2VjYXR0cik7Ci0Jc3dpdGNoIChyYykgewotCWNhc2UgMDoKLQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0xBQkVMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgLUVERVNUQUREUlJFUToKLQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVNLQjsKLQkJcmMgPSAwOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgogICogc2VsaW51eF9uZXRsYmxfY2FjaGVfaW52YWxpZGF0ZSAtIEludmFsaWRhdGUgdGhlIE5ldExhYmVsIGNhY2hlCiAgKgogICogRGVzY3JpcHRpb246CkBAIC0xODgsMTMgKzE1Myw5IEBACiAgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmlsZSBmb3IgYWxsIHRoZSBOZXRMYWJlbCBza19zZWN1cml0eV9zdHJ1Y3QgbG9ja2luZy4KICAqCiAgKi8KLXZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKLQkJCQkgICAgICBpbnQgZmFtaWx5KQordm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKQogewotCWlmIChmYW1pbHkgPT0gUEZfSU5FVCkKLQkJc3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRVUlSRTsKLQllbHNlCi0JCXNzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1VOU0VUOworCXNzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1VOU0VUOwogfQogCiAvKioKQEAgLTI4MSwxMjcgKzI0Miw4NiBAQAogfQogCiAvKioKLSAqIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZCAtIE5ldGxhYmVsIHRoZSBuZXdseSBhY2NlcHRlZCBjb25uZWN0aW9uCi0gKiBAc2s6IHRoZSBuZXcgY29ubmVjdGlvbgorICogc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3QgLSBMYWJlbCBhbiBpbmNvbWluZyBzdHJlYW0gY29ubmVjdGlvbgorICogQHJlcTogaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0IHNvY2tldAogICoKICAqIERlc2NyaXB0aW9uOgotICogQSBuZXcgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCBvbiBAc2sgc28gbWFrZSBzdXJlIGl0IGlzIGxhYmVsZWQKLSAqIGNvcnJlY3RseSB3aXRoIHRoZSBOZXRMYWJlbCBzdXNic3lzdGVtLgorICogQSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IEByZXEsIHdlIG5lZWQgdG8gbGFiZWwKKyAqIHRoZSBuZXcgcmVxdWVzdF9zb2NrIGhlcmUgYW5kIHRoZSBzdGFjayB3aWxsIGVuc3VyZSB0aGUgb24tdGhlLXdpcmUgbGFiZWwKKyAqIHdpbGwgZ2V0IHByZXNlcnZlZCB3aGVuIGEgZnVsbCBzb2NrIGlzIGNyZWF0ZWQgb25jZSB0aGUgY29ubmVjdGlvbiBoYW5kc2hha2UKKyAqIGlzIGNvbXBsZXRlLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KQoraW50IHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdTE2IGZhbWlseSkKIHsKIAlpbnQgcmM7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOworCisJaWYgKGZhbWlseSAhPSBQRl9JTkVUKQorCQlyZXR1cm4gMDsKKworCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOworCXJjID0gc2VjdXJpdHlfbmV0bGJsX3NpZF90b19zZWNhdHRyKHJlcS0+c2VjaWQsICZzZWNhdHRyKTsKKwlpZiAocmMgIT0gMCkKKwkJZ290byBpbmV0X2Nvbm5fcmVxdWVzdF9yZXR1cm47CisJcmMgPSBuZXRsYmxfcmVxX3NldGF0dHIocmVxLCAmc2VjYXR0cik7CitpbmV0X2Nvbm5fcmVxdWVzdF9yZXR1cm46CisJbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lIC0gSW5pdGlhbGl6ZSB0aGUgbmV3bHkgY3JlYXRlZCBzb2NrCisgKiBAc2s6IHRoZSBuZXcgc29jaworICoKKyAqIERlc2NyaXB0aW9uOgorICogQSBuZXcgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCB1c2luZyBAc2ssIHdlJ3ZlIGFscmVhZHkgbGFiZWxlZCB0aGUKKyAqIHNvY2tldCB2aWEgdGhlIHJlcXVlc3Rfc29jayBzdHJ1Y3QgaW4gc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3QoKSBidXQKKyAqIHdlIG5lZWQgdG8gc2V0IHRoZSBOZXRMYWJlbCBzdGF0ZSBoZXJlIHNpbmNlIHdlIG5vdyBoYXZlIGEgc29jayBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSkKK3sKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKLQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyOwotCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKIAotCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpCi0JCXJldHVybjsKLQotCXNlY2F0dHIgPSBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIoc2spOwotCWlmIChzZWNhdHRyID09IE5VTEwpCi0JCXJldHVybjsKLQotCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgc2VjYXR0cik7Ci0Jc3dpdGNoIChyYykgewotCWNhc2UgMDoKKwlpZiAoZmFtaWx5ID09IFBGX0lORVQpCiAJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9MQUJFTEVEOwotCQlicmVhazsKLQljYXNlIC1FREVTVEFERFJSRVE6Ci0JCS8qIG5vIFBGX0lORVQ2IHN1cHBvcnQgeWV0IGJlY2F1c2Ugd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgSVB2NgotCQkgKiBsYWJlbGluZyBwcm90b2NvbHMgKi8KLQkJaWYgKGZhbWlseSAhPSBQRl9JTkVUKSB7Ci0JCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfVU5TRVQ7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlhZGRyLnNpbl9mYW1pbHkgPSBmYW1pbHk7Ci0JCWFkZHIuc2luX2FkZHIuc19hZGRyID0gc2tfaW5ldC0+ZGFkZHI7Ci0JCWlmIChuZXRsYmxfY29ubl9zZXRhdHRyKHNrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCi0JCQkJCXNlY2F0dHIpICE9IDApIHsKLQkJCS8qIHdlIGZhaWxlZCB0byBsYWJlbCB0aGUgY29ubmVjdGVkIHNvY2tldCAoY291bGQgYmUKLQkJCSAqIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucywgdGhlIGFjdHVhbCAid2h5IiBpc24ndAotCQkJICogaW1wb3J0YW50IGhlcmUpIHNvIHdlIGhhdmUgdG8gZ28gdG8gb3VyIGJhY2t1cCBwbGFuLAotCQkJICogbGFiZWxpbmcgdGhlIHBhY2tldHMgaW5kaXZpZHVhbGx5IGluIHRoZSBuZXRmaWx0ZXIKLQkJCSAqIGxvY2FsIG91dHB1dCBob29rLiAgdGhpcyBpcyBva2F5IGJ1dCB3ZSBuZWVkIHRvCi0JCQkgKiBhZGp1c3QgdGhlIE1TUyBvZiB0aGUgY29ubmVjdGlvbiB0byB0YWtlIGludG8KLQkJCSAqIGFjY291bnQgYW55IGxhYmVsaW5nIG92ZXJoZWFkLCBzaW5jZSB3ZSBkb24ndCBrbm93Ci0JCQkgKiB0aGUgZXhhY3Qgb3ZlcmhlYWQgYXQgdGhpcyBwb2ludCB3ZSdsbCB1c2UgdGhlIHdvcnN0Ci0JCQkgKiBjYXNlIHZhbHVlIHdoaWNoIGlzIDQwIGJ5dGVzIGZvciBJUHY0ICovCi0JCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7Ci0JCQlza19jb25uLT5pY3NrX2V4dF9oZHJfbGVuICs9IDQwIC0KLQkJCQkgICAgICAoc2tfaW5ldC0+b3B0ID8gc2tfaW5ldC0+b3B0LT5vcHRsZW4gOiAwKTsKLQkJCXNrX2Nvbm4tPmljc2tfc3luY19tc3Moc2ssIHNrX2Nvbm4tPmljc2tfcG10dV9jb29raWUpOwotCi0JCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRU0tCOwotCQl9IGVsc2UKLQkJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9DT05OTEFCRUxFRDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogbm90ZSB0aGF0IHdlIGFyZSBmYWlsaW5nIHRvIGxhYmVsIHRoZSBzb2NrZXQgd2hpY2ggY291bGQgYmUKLQkJICogYSBiYWQgdGhpbmcgc2luY2UgaXQgbWVhbnMgdHJhZmZpYyBjb3VsZCBsZWF2ZSB0aGUgc3lzdGVtCi0JCSAqIHdpdGhvdXQgdGhlIGRlc2lyZWQgbGFiZWxpbmcsIGhvd2V2ZXIsIGFsbCBpcyBub3QgbG9zdCBhcwotCQkgKiB3ZSBoYXZlIGEgY2hlY2sgaW4gc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbigpIHRvCi0JCSAqIHBpY2sgdXAgdGhlIHBpZWNlcyB0aGF0IHdlIG1pZ2h0IGRyb3AgaGVyZSBiZWNhdXNlIHdlIGNhbid0Ci0JCSAqIHJldHVybiBhbiBlcnJvciBjb2RlICovCi0JCWJyZWFrOwotCX0KKwllbHNlCisJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKIH0KIAogLyoqCiAgKiBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUgLSBMYWJlbCBhIHNvY2tldCB1c2luZyBOZXRMYWJlbAogICogQHNvY2s6IHRoZSBzb2NrZXQgdG8gbGFiZWwKKyAqIEBmYW1pbHk6IHByb3RvY29sIGZhbWlseQogICoKICAqIERlc2NyaXB0aW9uOgogICogQXR0ZW1wdCB0byBsYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtIHVzaW5nIHRoZSBnaXZlbgogICogU0lELiAgUmV0dXJucyB6ZXJvIHZhbHVlcyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaykKLXsKLQlyZXR1cm4gc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc29jay0+c2spOwotfQotCi0vKioKLSAqIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24gLSBWZXJpZnkgdGhlIHNvY2tldCBpcyBOZXRMYWJlbCBsYWJlbGVkCi0gKiBAaW5vZGU6IHRoZSBmaWxlIGRlc2NyaXB0b3IncyBpbm9kZQotICogQG1hc2s6IHRoZSBwZXJtaXNzaW9uIG1hc2sKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIExvb2tzIGF0IGEgZmlsZSdzIGlub2RlIGFuZCBpZiBpdCBpcyBtYXJrZWQgYXMgYSBzb2NrZXQgcHJvdGVjdGVkIGJ5Ci0gKiBOZXRMYWJlbCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzb2NrZXQgaGFzIGJlZW4gbGFiZWxlZCwgaWYgbm90IHRyeSB0byBsYWJlbAotICogdGhlIHNvY2tldCBub3cgd2l0aCB0aGUgaW5vZGUncyBTSUQuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUKLSAqIHZhbHVlcyBvbiBmYWlsdXJlLgotICoKLSAqLwotaW50IHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSkKIHsKIAlpbnQgcmM7Ci0Jc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWM7CisJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cjsKIAotCWlmICghU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkgfHwKLQkgICAgKChtYXNrICYgKE1BWV9XUklURSB8IE1BWV9BUFBFTkQpKSA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0Jc29jayA9IFNPQ0tFVF9JKGlub2RlKTsKLQlzayA9IHNvY2stPnNrOwotCWlmIChzayA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlza3NlYyA9IHNrLT5za19zZWN1cml0eTsKLQlpZiAoc2tzZWMgPT0gTlVMTCB8fCBza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpCisJaWYgKGZhbWlseSAhPSBQRl9JTkVUKQogCQlyZXR1cm4gMDsKIAotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQliaF9sb2NrX3NvY2tfbmVzdGVkKHNrKTsKLQlpZiAobGlrZWx5KHNrc2VjLT5ubGJsX3N0YXRlID09IE5MQkxfUkVRVUlSRSkpCi0JCXJjID0gc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc2spOwotCWVsc2UKKwlzZWNhdHRyID0gc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHNrKTsKKwlpZiAoc2VjYXR0ciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssIGZhbWlseSwgc2VjYXR0cik7CisJc3dpdGNoIChyYykgeworCWNhc2UgMDoKKwkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0xBQkVMRUQ7CisJCWJyZWFrOworCWNhc2UgLUVERVNUQUREUlJFUToKKwkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVNLQjsKIAkJcmMgPSAwOwotCWJoX3VubG9ja19zb2NrKHNrKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCmluZGV4IDRlZDdiYWIuLmM2ODc1ZmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXsgQVVESVRfVVNFUiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICB9LAogCXsgQVVESVRfU0lHTkFMX0lORk8sCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAogCXsgQVVESVRfVFRZX0dFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgICAgIH0sCi0JeyBBVURJVF9UVFlfU0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgfSwKKwl7IEFVRElUX1RUWV9TRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggMDFlYzZkMi4uMmQ1MTM2ZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC00Nyw4ICs0Nyw2IEBACiAKIHVuc2lnbmVkIGludCBzZWxpbnV4X2NoZWNrcmVxcHJvdCA9IENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0NIRUNLUkVRUFJPVF9WQUxVRTsKIAotaW50IHNlbGludXhfY29tcGF0X25ldCA9IDA7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrcmVxcHJvdF9zZXR1cChjaGFyICpzdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBjaGVja3JlcXByb3Q7CkBAIC01OCwxNiArNTYsNiBAQAogfQogX19zZXR1cCgiY2hlY2tyZXFwcm90PSIsIGNoZWNrcmVxcHJvdF9zZXR1cCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHNlbGludXhfY29tcGF0X25ldF9zZXR1cChjaGFyICpzdHIpCi17Ci0JdW5zaWduZWQgbG9uZyBjb21wYXRfbmV0OwotCWlmICghc3RyaWN0X3N0cnRvdWwoc3RyLCAwLCAmY29tcGF0X25ldCkpCi0JCXNlbGludXhfY29tcGF0X25ldCA9IGNvbXBhdF9uZXQgPyAxIDogMDsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoInNlbGludXhfY29tcGF0X25ldD0iLCBzZWxpbnV4X2NvbXBhdF9uZXRfc2V0dXApOwotCi0KIHN0YXRpYyBERUZJTkVfTVVURVgoc2VsX211dGV4KTsKIAogLyogZ2xvYmFsIGRhdGEgZm9yIGJvb2xlYW5zICovCkBAIC00NTAsNjEgKzQzOCw2IEBACiAJLndyaXRlCQk9IHNlbF93cml0ZV9jaGVja3JlcXByb3QsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzZWxfcmVhZF9jb21wYXRfbmV0KHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgdG1wYnVmW1RNUEJVRkxFTl07Ci0Jc3NpemVfdCBsZW5ndGg7Ci0KLQlsZW5ndGggPSBzY25wcmludGYodG1wYnVmLCBUTVBCVUZMRU4sICIlZCIsIHNlbGludXhfY29tcGF0X25ldCk7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHRtcGJ1ZiwgbGVuZ3RoKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NvbXBhdF9uZXQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKnBhZ2U7Ci0Jc3NpemVfdCBsZW5ndGg7Ci0JaW50IG5ld192YWx1ZTsKLQotCWxlbmd0aCA9IHRhc2tfaGFzX3NlY3VyaXR5KGN1cnJlbnQsIFNFQ1VSSVRZX19MT0FEX1BPTElDWSk7Ci0JaWYgKGxlbmd0aCkKLQkJcmV0dXJuIGxlbmd0aDsKLQotCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmICgqcHBvcyAhPSAwKSB7Ci0JCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbGVuZ3RoID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIocGFnZSwgYnVmLCBjb3VudCkpCi0JCWdvdG8gb3V0OwotCi0JbGVuZ3RoID0gLUVJTlZBTDsKLQlpZiAoc3NjYW5mKHBhZ2UsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpCi0JCWdvdG8gb3V0OwotCi0JaWYgKG5ld192YWx1ZSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJICAgICAgICJTRUxpbnV4OiBjb21wYXRfbmV0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2Ugc2VjbWFyayIKLQkJICAgICAgICIgaW5zdGVhZFxuIik7Ci0JCXNlbGludXhfY29tcGF0X25ldCA9IDE7Ci0JfSBlbHNlCi0JCXNlbGludXhfY29tcGF0X25ldCA9IDA7Ci0JbGVuZ3RoID0gY291bnQ7Ci1vdXQ6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKLQlyZXR1cm4gbGVuZ3RoOwotfQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2NvbXBhdF9uZXRfb3BzID0gewotCS5yZWFkCQk9IHNlbF9yZWFkX2NvbXBhdF9uZXQsCi0JLndyaXRlCQk9IHNlbF93cml0ZV9jb21wYXRfbmV0LAotfTsKLQogLyoKICAqIFJlbWFpbmluZyBub2RlcyB1c2UgdHJhbnNhY3Rpb24gYmFzZWQgSU8gbWV0aG9kcyBsaWtlIG5mc2QvbmZzY3RsLmMKICAqLwpAQCAtNTk1LDcgKzUyOCw3IEBACiAKIAlsZW5ndGggPSBzY25wcmludGYoYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsCiAJCQkgICIleCAleCAleCAleCAldSIsCi0JCQkgIGF2ZC5hbGxvd2VkLCBhdmQuZGVjaWRlZCwKKwkJCSAgYXZkLmFsbG93ZWQsIDB4ZmZmZmZmZmYsCiAJCQkgIGF2ZC5hdWRpdGFsbG93LCBhdmQuYXVkaXRkZW55LAogCQkJICBhdmQuc2Vxbm8pOwogb3V0MjoKQEAgLTE2NjUsNyArMTU5OCw2IEBACiAJCVtTRUxfRElTQUJMRV0gPSB7ImRpc2FibGUiLCAmc2VsX2Rpc2FibGVfb3BzLCBTX0lXVVNSfSwKIAkJW1NFTF9NRU1CRVJdID0geyJtZW1iZXIiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lSVUdPfFNfSVdVR099LAogCQlbU0VMX0NIRUNLUkVRUFJPVF0gPSB7ImNoZWNrcmVxcHJvdCIsICZzZWxfY2hlY2tyZXFwcm90X29wcywgU19JUlVHT3xTX0lXVVNSfSwKLQkJW1NFTF9DT01QQVRfTkVUXSA9IHsiY29tcGF0X25ldCIsICZzZWxfY29tcGF0X25ldF9vcHMsIFNfSVJVR098U19JV1VTUn0sCiAJCVtTRUxfUkVKRUNUX1VOS05PV05dID0geyJyZWplY3RfdW5rbm93biIsICZzZWxfaGFuZGxlX3Vua25vd25fb3BzLCBTX0lSVUdPfSwKIAkJW1NFTF9ERU5ZX1VOS05PV05dID0geyJkZW55X3Vua25vd24iLCAmc2VsX2hhbmRsZV91bmtub3duX29wcywgU19JUlVHT30sCiAJCS8qIGxhc3Qgb25lICovIHsiIn0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCBjNjVlNGZlLi5kZWVlYzZjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC00MDcsNyArNDA3LDYgQEAKIAkgKiBJbml0aWFsaXplIHRoZSBhY2Nlc3MgdmVjdG9ycyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuCiAJICovCiAJYXZkLT5hbGxvd2VkID0gMDsKLQlhdmQtPmRlY2lkZWQgPSAweGZmZmZmZmZmOwogCWF2ZC0+YXVkaXRhbGxvdyA9IDA7CiAJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwogCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CkBAIC03NDMsNyArNzQyLDYgQEAKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpIHsKIAkJYXZkLT5hbGxvd2VkID0gMHhmZmZmZmZmZjsKLQkJYXZkLT5kZWNpZGVkID0gMHhmZmZmZmZmZjsKIAkJYXZkLT5hdWRpdGFsbG93ID0gMDsKIAkJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwogCQlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2suaCBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKaW5kZXggYjc5NTgyZS4uNDJlZjMxMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2suaAorKysgYi9zZWN1cml0eS9zbWFjay9zbWFjay5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAKIC8qCiAgKiBXaHkgMjM/IENJUFNPIGlzIGNvbnN0cmFpbmVkIHRvIDMwLCBzbyBhIDMyIGJ5dGUgYnVmZmVyIGlzCkBAIC00MCw3ICs0Miw2IEBACiBzdHJ1Y3Qgc29ja2V0X3NtYWNrIHsKIAljaGFyCQkqc21rX291dDsJCQkvKiBvdXRib3VuZCBsYWJlbCAqLwogCWNoYXIJCSpzbWtfaW47CQkJLyogaW5ib3VuZCBsYWJlbCAqLwotCWludAkJc21rX2xhYmVsZWQ7CQkJLyogbGFiZWwgc2NoZW1lICovCiAJY2hhcgkJc21rX3BhY2tldFtTTUtfTEFCRUxMRU5dOwkvKiBUQ1AgcGVlciBsYWJlbCAqLwogfTsKIApAQCAtNTksMTcgKzYwLDEwIEBACiAgKiBBIGxhYmVsIGFjY2VzcyBydWxlLgogICovCiBzdHJ1Y3Qgc21hY2tfcnVsZSB7Ci0JY2hhcgkqc21rX3N1YmplY3Q7Ci0JY2hhcgkqc21rX29iamVjdDsKLQlpbnQJc21rX2FjY2VzczsKLX07Ci0KLS8qCi0gKiBBbiBlbnRyeSBpbiB0aGUgdGFibGUgb2YgcGVybWl0dGVkIGxhYmVsIGFjY2Vzc2VzLgotICovCi1zdHJ1Y3Qgc21rX2xpc3RfZW50cnkgewotCXN0cnVjdCBzbWtfbGlzdF9lbnRyeQkqc21rX25leHQ7Ci0Jc3RydWN0IHNtYWNrX3J1bGUJc21rX3J1bGU7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWNoYXIJCQkqc21rX3N1YmplY3Q7CisJY2hhcgkJCSpzbWtfb2JqZWN0OworCWludAkJCXNta19hY2Nlc3M7CiB9OwogCiAvKgpAQCAtODUsNyArNzksNyBAQAogICogQW4gZW50cnkgaW4gdGhlIHRhYmxlIGlkZW50aWZ5aW5nIGhvc3RzLgogICovCiBzdHJ1Y3Qgc21rX25ldGxibGFkZHIgewotCXN0cnVjdCBzbWtfbmV0bGJsYWRkcgkqc21rX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCBzb2NrYWRkcl9pbglzbWtfaG9zdDsJLyogbmV0d29yayBhZGRyZXNzICovCiAJc3RydWN0IGluX2FkZHIJCXNta19tYXNrOwkvKiBuZXR3b3JrIG1hc2sgKi8KIAljaGFyCQkJKnNta19sYWJlbDsJLyogbGFiZWwgKi8KQEAgLTExMyw3ICsxMDcsNyBAQAogICogdGhlIGNpcHNvIGRpcmVjdCBtYXBwaW5nIGluIHVzZWQgaW50ZXJuYWxseS4KICAqLwogc3RydWN0IHNtYWNrX2tub3duIHsKLQlzdHJ1Y3Qgc21hY2tfa25vd24JKnNta19uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAljaGFyCQkJc21rX2tub3duW1NNS19MQUJFTExFTl07CiAJdTMyCQkJc21rX3NlY2lkOwogCXN0cnVjdCBzbWFja19jaXBzbwkqc21rX2NpcHNvOwpAQCAtMTM4LDYgKzEzMiw4IEBACiAjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0tJUElOCVhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19JUElOCiAjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0tJUE9VVAlYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfSVBPVVQKIAorI2RlZmluZSBTTUFDS19DSVBTT19PUFRJT04gCSItQ0lQU08iCisKIC8qCiAgKiBIb3cgY29tbXVuaWNhdGlvbnMgb24gdGhpcyBzb2NrZXQgYXJlIHRyZWF0ZWQuCiAgKiBVc3VhbGx5IGl0J3MgZGV0ZXJtaW5lZCBieSB0aGUgdW5kZXJseWluZyBuZXRsYWJlbCBjb2RlCkBAIC0yMDUsOCArMjAxLDggQEAKIGV4dGVybiBpbnQgc21hY2tfY2lwc29fZGlyZWN0OwogZXh0ZXJuIGNoYXIgKnNtYWNrX25ldF9hbWJpZW50OwogZXh0ZXJuIGNoYXIgKnNtYWNrX29ubHljYXA7CitleHRlcm4gY29uc3QgY2hhciAqc21hY2tfY2lwc29fb3B0aW9uOwogCi1leHRlcm4gc3RydWN0IHNtYWNrX2tub3duICpzbWFja19rbm93bjsKIGV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25fZmxvb3I7CiBleHRlcm4gc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2hhdDsKIGV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25faHVoOwpAQCAtMjE0LDggKzIxMCwxMCBAQAogZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9zdGFyOwogZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl93ZWI7CiAKLWV4dGVybiBzdHJ1Y3Qgc21rX2xpc3RfZW50cnkgKnNtYWNrX2xpc3Q7Ci1leHRlcm4gc3RydWN0IHNta19uZXRsYmxhZGRyICpzbWFja19uZXRsYmxhZGRyczsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHNtYWNrX2tub3duX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzbWFja19ydWxlX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzbWtfbmV0bGJsYWRkcl9saXN0OworCiBleHRlcm4gc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgc21hY2tfb3BzOwogCiAvKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwppbmRleCAyZTBiODNlLi5hYzBhMjcwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwpAQCAtMTYsNDggKzE2LDQyIEBACiAjaW5jbHVkZSAic21hY2suaCIKIAogc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2h1aCA9IHsKLQkuc21rX25leHQJPSBOVUxMLAogCS5zbWtfa25vd24JPSAiPyIsCiAJLnNta19zZWNpZAk9IDIsCiAJLnNta19jaXBzbwk9IE5VTEwsCiB9OwogCiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25faGF0ID0gewotCS5zbWtfbmV4dAk9ICZzbWFja19rbm93bl9odWgsCiAJLnNta19rbm93bgk9ICJeIiwKIAkuc21rX3NlY2lkCT0gMywKIAkuc21rX2NpcHNvCT0gTlVMTCwKIH07CiAKIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9zdGFyID0gewotCS5zbWtfbmV4dAk9ICZzbWFja19rbm93bl9oYXQsCiAJLnNta19rbm93bgk9ICIqIiwKIAkuc21rX3NlY2lkCT0gNCwKIAkuc21rX2NpcHNvCT0gTlVMTCwKIH07CiAKIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9mbG9vciA9IHsKLQkuc21rX25leHQJPSAmc21hY2tfa25vd25fc3RhciwKIAkuc21rX2tub3duCT0gIl8iLAogCS5zbWtfc2VjaWQJPSA1LAogCS5zbWtfY2lwc28JPSBOVUxMLAogfTsKIAogc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2ludmFsaWQgPSB7Ci0JLnNta19uZXh0CT0gJnNtYWNrX2tub3duX2Zsb29yLAogCS5zbWtfa25vd24JPSAiIiwKIAkuc21rX3NlY2lkCT0gNiwKIAkuc21rX2NpcHNvCT0gTlVMTCwKIH07CiAKIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl93ZWIgPSB7Ci0JLnNta19uZXh0CT0gJnNtYWNrX2tub3duX2ludmFsaWQsCiAJLnNta19rbm93bgk9ICJAIiwKIAkuc21rX3NlY2lkCT0gNywKIAkuc21rX2NpcHNvCT0gTlVMTCwKIH07CiAKLXN0cnVjdCBzbWFja19rbm93biAqc21hY2tfa25vd24gPSAmc21hY2tfa25vd25fd2ViOworTElTVF9IRUFEKHNtYWNrX2tub3duX2xpc3QpOwogCiAvKgogICogVGhlIGluaXRpYWwgdmFsdWUgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gYW55IG9mIHRoZQpAQCAtODcsNyArODEsNiBAQAogaW50IHNta19hY2Nlc3MoY2hhciAqc3ViamVjdF9sYWJlbCwgY2hhciAqb2JqZWN0X2xhYmVsLCBpbnQgcmVxdWVzdCkKIHsKIAl1MzIgbWF5ID0gTUFZX05PVDsKLQlzdHJ1Y3Qgc21rX2xpc3RfZW50cnkgKnNwOwogCXN0cnVjdCBzbWFja19ydWxlICpzcnA7CiAKIAkvKgpAQCAtMTM5LDkgKzEzMiw4IEBACiAJICogYWNjZXNzIChlLmcuIHJlYWQgaXMgaW5jbHVkZWQgaW4gcmVhZHdyaXRlKSBpdCdzCiAJICogZ29vZC4KIAkgKi8KLQlmb3IgKHNwID0gc21hY2tfbGlzdDsgc3AgIT0gTlVMTDsgc3AgPSBzcC0+c21rX25leHQpIHsKLQkJc3JwID0gJnNwLT5zbWtfcnVsZTsKLQorCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzcnAsICZzbWFja19ydWxlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHNycC0+c21rX3N1YmplY3QgPT0gc3ViamVjdF9sYWJlbCB8fAogCQkgICAgc3RyY21wKHNycC0+c21rX3N1YmplY3QsIHN1YmplY3RfbGFiZWwpID09IDApIHsKIAkJCWlmIChzcnAtPnNta19vYmplY3QgPT0gb2JqZWN0X2xhYmVsIHx8CkBAIC0xNTEsNiArMTQzLDcgQEAKIAkJCX0KIAkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAkvKgogCSAqIFRoaXMgaXMgYSBiaXQgbWFwIG9wZXJhdGlvbi4KIAkgKi8KQEAgLTE2Miw4ICsxNTUsOCBAQAogCiAvKioKICAqIHNta19jdXJhY2MgLSBkZXRlcm1pbmUgaWYgY3VycmVudCBoYXMgYSBzcGVjaWZpYyBhY2Nlc3MgdG8gYW4gb2JqZWN0Ci0gKiBAb2JqZWN0X2xhYmVsOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCdzIFNtYWNrIGxhYmVsCi0gKiBAcmVxdWVzdDogdGhlIGFjY2VzcyByZXF1ZXN0ZWQsIGluICJNQVkiIGZvcm1hdAorICogQG9ial9sYWJlbDogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QncyBTbWFjayBsYWJlbAorICogQG1vZGU6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkLCBpbiAiTUFZIiBmb3JtYXQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgY3VycmVudCBzdWJqZWN0IGxhYmVsL29iamVjdCBsYWJlbCBwYWlyCiAgKiBpbiB0aGUgYWNjZXNzIHJ1bGUgbGlzdCBhbmQgcmV0dXJucyAwIGlmIHRoZSBhY2Nlc3MgaXMgcGVybWl0dGVkLApAQCAtMjI4LDE0ICsyMjEsMTcgQEAKIAogCW11dGV4X2xvY2soJnNtYWNrX2tub3duX2xvY2spOwogCi0JZm9yIChza3AgPSBzbWFja19rbm93bjsgc2twICE9IE5VTEw7IHNrcCA9IHNrcC0+c21rX25leHQpCi0JCWlmIChzdHJuY21wKHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTikgPT0gMCkKKwlmb3VuZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2twLCAmc21hY2tfa25vd25fbGlzdCwgbGlzdCkgeworCQlpZiAoc3RybmNtcChza3AtPnNta19rbm93biwgc21hY2ssIFNNS19NQVhMRU4pID09IDApIHsKKwkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOworCQl9CisJfQogCi0JaWYgKHNrcCA9PSBOVUxMKSB7CisJaWYgKGZvdW5kID09IDApIHsKIAkJc2twID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtYWNrX2tub3duKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChza3AgIT0gTlVMTCkgewotCQkJc2twLT5zbWtfbmV4dCA9IHNtYWNrX2tub3duOwogCQkJc3RybmNweShza3AtPnNta19rbm93biwgc21hY2ssIFNNS19NQVhMRU4pOwogCQkJc2twLT5zbWtfc2VjaWQgPSBzbWFja19uZXh0X3NlY2lkKys7CiAJCQlza3AtPnNta19jaXBzbyA9IE5VTEw7CkBAIC0yNDQsOCArMjQwLDcgQEAKIAkJCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRyeSBpcyBhY3R1YWxseQogCQkJICogZmlsbGVkIGJlZm9yZSBwdXR0aW5nIGl0IG9uIHRoZSBsaXN0LgogCQkJICovCi0JCQlzbXBfbWIoKTsKLQkJCXNtYWNrX2tub3duID0gc2twOworCQkJbGlzdF9hZGRfcmN1KCZza3AtPmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKIAkJfQogCX0KIApAQCAtMjY2LDYgKzI2MSw5IEBACiB7CiAJc3RydWN0IHNtYWNrX2tub3duICpza3A7CiAKKwkvKiBsYWJlbHMgY2Fubm90IGJlZ2luIHdpdGggYSAnLScgKi8KKwlpZiAoc3RyaW5nWzBdID09ICctJykKKwkJcmV0dXJuIE5VTEw7CiAJc2twID0gc21rX2ltcG9ydF9lbnRyeShzdHJpbmcsIGxlbik7CiAJaWYgKHNrcCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI4MywxNCArMjgxLDE5IEBACiB7CiAJc3RydWN0IHNtYWNrX2tub3duICpza3A7CiAKLQlmb3IgKHNrcCA9IHNtYWNrX2tub3duOyBza3AgIT0gTlVMTDsgc2twID0gc2twLT5zbWtfbmV4dCkKLQkJaWYgKHNrcC0+c21rX3NlY2lkID09IHNlY2lkKQorCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShza3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CisJCWlmIChza3AtPnNta19zZWNpZCA9PSBzZWNpZCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gc2twLT5zbWtfa25vd247CisJCX0KKwl9CiAKIAkvKgogCSAqIElmIHdlIGdvdCB0aGlzIGZhciBzb21lb25lIGFza2VkIGZvciB0aGUgdHJhbnNsYXRpb24KIAkgKiBvZiBhIHNlY2lkIHRoYXQgaXMgbm90IG9uIHRoZSBsaXN0LgogCSAqLworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBzbWFja19rbm93bl9pbnZhbGlkLnNta19rbm93bjsKIH0KIApAQCAtMzA1LDkgKzMwOCwxNCBAQAogewogCXN0cnVjdCBzbWFja19rbm93biAqc2twOwogCi0JZm9yIChza3AgPSBzbWFja19rbm93bjsgc2twICE9IE5VTEw7IHNrcCA9IHNrcC0+c21rX25leHQpCi0JCWlmIChzdHJuY21wKHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTikgPT0gMCkKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2twLCAmc21hY2tfa25vd25fbGlzdCwgbGlzdCkgeworCQlpZiAoc3RybmNtcChza3AtPnNta19rbm93biwgc21hY2ssIFNNS19NQVhMRU4pID09IDApIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIHNrcC0+c21rX3NlY2lkOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCkBAIC0zMzIsNyArMzQwLDggQEAKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKmtwOwogCWNoYXIgKmZpbmFsID0gTlVMTDsKIAotCWZvciAoa3AgPSBzbWFja19rbm93bjsgZmluYWwgPT0gTlVMTCAmJiBrcCAhPSBOVUxMOyBrcCA9IGtwLT5zbWtfbmV4dCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtwLCAmc21hY2tfa25vd25fbGlzdCwgbGlzdCkgewogCQlpZiAoa3AtPnNta19jaXBzbyA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTM0NCw2ICszNTMsNyBAQAogCiAJCXNwaW5fdW5sb2NrX2JoKCZrcC0+c21rX2NpcHNvbG9jayk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChmaW5hbCA9PSBOVUxMKQogCQlmaW5hbCA9IHNtYWNrX2tub3duX2h1aC5zbWtfa25vd247CiAJc3RybmNweShyZXN1bHQsIGZpbmFsLCBTTUtfTUFYTEVOKTsKQEAgLTM2MCwxMyArMzcwLDE5IEBACiBpbnQgc21hY2tfdG9fY2lwc28oY29uc3QgY2hhciAqc21hY2ssIHN0cnVjdCBzbWFja19jaXBzbyAqY3ApCiB7CiAJc3RydWN0IHNtYWNrX2tub3duICprcDsKKwlpbnQgZm91bmQgPSAwOwogCi0JZm9yIChrcCA9IHNtYWNrX2tub3duOyBrcCAhPSBOVUxMOyBrcCA9IGtwLT5zbWtfbmV4dCkKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoa3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CiAJCWlmIChrcC0+c21rX2tub3duID09IHNtYWNrIHx8Ci0JCSAgICBzdHJjbXAoa3AtPnNta19rbm93biwgc21hY2spID09IDApCisJCSAgICBzdHJjbXAoa3AtPnNta19rbm93biwgc21hY2spID09IDApIHsKKwkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaWYgKGtwID09IE5VTEwgfHwga3AtPnNta19jaXBzbyA9PSBOVUxMKQorCWlmIChmb3VuZCA9PSAwIHx8IGtwLT5zbWtfY2lwc28gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltZW1jcHkoY3AsIGtwLT5zbWtfY2lwc28sIHNpemVvZihzdHJ1Y3Qgc21hY2tfY2lwc28pKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggZTdkZWQxMy4uOTIxNTE0OSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTcsNiArNyw4IEBACiAgKglDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKiAgICAgICAgICAgICAgICBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCkBAIC0yMCw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTkxLDYgKzk0LDcgQEAKIC8qKgogICogc21hY2tfcHRyYWNlX21heV9hY2Nlc3MgLSBTbWFjayBhcHByb3ZhbCBvbiBQVFJBQ0VfQVRUQUNICiAgKiBAY3RwOiBjaGlsZCB0YXNrIHBvaW50ZXIKKyAqIEBtb2RlOiBwdHJhY2UgYXR0YWNobWVudCBtb2RlCiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBPSywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqCkBAIC0yMDMsOSArMjA3LDggQEAKIAogLyoqCiAgKiBzbWFja19zYl9jb3B5X2RhdGEgLSBjb3B5IG1vdW50IG9wdGlvbnMgZGF0YSBmb3IgcHJvY2Vzc2luZwotICogQHR5cGU6IGZpbGUgc3lzdGVtIHR5cGUKICAqIEBvcmlnOiB3aGVyZSB0byBzdGFydAotICogQHNtYWNrb3B0cworICogQHNtYWNrb3B0czogbW91bnQgb3B0aW9ucyBzdHJpbmcKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGVycm9yLgogICoKQEAgLTMzMSw3ICszMzQsNyBAQAogLyoqCiAgKiBzbWFja19zYl9tb3VudCAtIFNtYWNrIGNoZWNrIGZvciBtb3VudGluZwogICogQGRldl9uYW1lOiB1bnVzZWQKLSAqIEBuZDogbW91bnQgcG9pbnQKKyAqIEBwYXRoOiBtb3VudCBwb2ludAogICogQHR5cGU6IHVudXNlZAogICogQGZsYWdzOiB1bnVzZWQKICAqIEBkYXRhOiB1bnVzZWQKQEAgLTM3MCw3ICszNzMsNyBAQAogCiAvKioKICAqIHNtYWNrX2lub2RlX2FsbG9jX3NlY3VyaXR5IC0gYWxsb2NhdGUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIGluIG5lZWQgb2YgYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBuZWVkIG9mIGEgYmxvYgogICoKICAqIFJldHVybnMgMCBpZiBpdCBnZXRzIGEgYmxvYiwgLUVOT01FTSBvdGhlcndpc2UKICAqLwpAQCAtMzg0LDcgKzM4Nyw3IEBACiAKIC8qKgogICogc21hY2tfaW5vZGVfZnJlZV9zZWN1cml0eSAtIGZyZWUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIHdpdGggYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSB3aXRoIGEgYmxvYgogICoKICAqIENsZWFycyB0aGUgYmxvYiBwb2ludGVyIGluIGlub2RlCiAgKi8KQEAgLTUzOCw3ICs1NDEsNiBAQAogICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCi0gKiBAbmQ6IHVudXNlZAogICoKICAqIFRoaXMgaXMgdGhlIGltcG9ydGFudCBTbWFjayBob29rLgogICoKQEAgLTYwNyw2ICs2MDksOSBAQAogCSAgICBzdHJjbXAobmFtZSwgWEFUVFJfTkFNRV9TTUFDS0lQT1VUKSA9PSAwKSB7CiAJCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKIAkJCXJjID0gLUVQRVJNOworCQkvKiBhIGxhYmVsIGNhbm5vdCBiZSB2b2lkIGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLScgKi8KKwkJaWYgKHNpemUgPT0gMCB8fCAoc2l6ZSA+IDAgJiYgKChjaGFyICopdmFsdWUpWzBdID09ICctJykpCisJCQlyYyA9IC1FSU5WQUw7CiAJfSBlbHNlCiAJCXJjID0gY2FwX2lub2RlX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIApAQCAtNzAxLDggKzcwNiw3IEBACiAgKiBAaW5vZGU6IHRoZSBvYmplY3QKICAqIEBuYW1lOiBhdHRyaWJ1dGUgbmFtZQogICogQGJ1ZmZlcjogd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQKLSAqIEBzaXplOiBzaXplIG9mIHRoZSBidWZmZXIKLSAqIEBlcnI6IHVudXNlZAorICogQGFsbG9jOiB1bnVzZWQKICAqCiAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgb3IgYW4gZXJyb3IgY29kZQogICovCkBAIC04NjQsNyArODY4LDcgQEAKIC8qKgogICogc21hY2tfZmlsZV9sb2NrIC0gU21hY2sgY2hlY2sgb24gZmlsZSBsb2NraW5nCiAgKiBAZmlsZTogdGhlIG9iamVjdAotICogQGNtZCB1bnVzZWQKKyAqIEBjbWQ6IHVudXNlZAogICoKICAqIFJldHVybnMgMCBpZiBjdXJyZW50IGhhcyB3cml0ZSBhY2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KQEAgLTEwMDMsOCArMTAwNyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBjb21taXQgbmV3IGNyZWRlbnRpYWxzCisvKioKKyAqIHNtYWNrX2NyZWRfY29tbWl0IC0gY29tbWl0IG5ldyBjcmVkZW50aWFscwogICogQG5ldzogdGhlIG5ldyBjcmVkZW50aWFscwogICogQG9sZDogdGhlIG9yaWdpbmFsIGNyZWRlbnRpYWxzCiAgKi8KQEAgLTEwMTQsOCArMTAxOCw4IEBACiAKIC8qKgogICogc21hY2tfa2VybmVsX2FjdF9hcyAtIFNldCB0aGUgc3ViamVjdGl2ZSBjb250ZXh0IGluIGEgc2V0IG9mIGNyZWRlbnRpYWxzCi0gKiBAbmV3IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkLgotICogQHNlY2lkIHNwZWNpZmllcyB0aGUgc2VjdXJpdHkgSUQgdG8gYmUgc2V0CisgKiBAbmV3OiBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZC4KKyAqIEBzZWNpZDogc3BlY2lmaWVzIHRoZSBzZWN1cml0eSBJRCB0byBiZSBzZXQKICAqCiAgKiBTZXQgdGhlIHNlY3VyaXR5IGRhdGEgZm9yIGEga2VybmVsIHNlcnZpY2UuCiAgKi8KQEAgLTEwMzIsOCArMTAzNiw4IEBACiAKIC8qKgogICogc21hY2tfa2VybmVsX2NyZWF0ZV9maWxlc19hcyAtIFNldCB0aGUgZmlsZSBjcmVhdGlvbiBsYWJlbCBpbiBhIHNldCBvZiBjcmVkcwotICogQG5ldyBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZAotICogQGlub2RlIHBvaW50cyB0byB0aGUgaW5vZGUgdG8gdXNlIGFzIGEgcmVmZXJlbmNlCisgKiBAbmV3OiBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZAorICogQGlub2RlOiBwb2ludHMgdG8gdGhlIGlub2RlIHRvIHVzZSBhcyBhIHJlZmVyZW5jZQogICoKICAqIFNldCB0aGUgZmlsZSBjcmVhdGlvbiBjb250ZXh0IGluIGEgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIHRoZSBzYW1lCiAgKiBhcyB0aGUgb2JqZWN0aXZlIGNvbnRleHQgb2YgdGhlIHNwZWNpZmllZCBpbm9kZQpAQCAtMTI0Miw3ICsxMjQ2LDcgQEAKIC8qKgogICogc21hY2tfdGFza190b19pbm9kZSAtIGNvcHkgdGFzayBzbWFjayBpbnRvIHRoZSBpbm9kZSBibG9iCiAgKiBAcDogdGFzayB0byBjb3B5IGZyb20KLSAqIGlub2RlOiBpbm9kZSB0byBjb3B5IHRvCisgKiBAaW5vZGU6IGlub2RlIHRvIGNvcHkgdG8KICAqCiAgKiBTZXRzIHRoZSBzbWFjayBwb2ludGVyIGluIHRoZSBpbm9kZSBzZWN1cml0eSBibG9iCiAgKi8KQEAgLTEyNjAsNyArMTI2NCw3IEBACiAgKiBzbWFja19za19hbGxvY19zZWN1cml0eSAtIEFsbG9jYXRlIGEgc29ja2V0IGJsb2IKICAqIEBzazogdGhlIHNvY2tldAogICogQGZhbWlseTogdW51c2VkCi0gKiBAcHJpb3JpdHk6IG1lbW9yeSBhbGxvY2F0aW9uIHByaW9yaXR5CisgKiBAZ2ZwX2ZsYWdzOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICoKICAqIEFzc2lnbiBTbWFjayBwb2ludGVycyB0byBjdXJyZW50CiAgKgpAQCAtMTI3Nyw3ICsxMjgxLDYgQEAKIAogCXNzcC0+c21rX2luID0gY3NwOwogCXNzcC0+c21rX291dCA9IGNzcDsKLQlzc3AtPnNta19sYWJlbGVkID0gU01BQ0tfQ0lQU09fU09DS0VUOwogCXNzcC0+c21rX3BhY2tldFswXSA9ICdcMCc7CiAKIAlzay0+c2tfc2VjdXJpdHkgPSBzc3A7CkBAIC0xMjk3LDYgKzEzMDAsNDMgQEAKIH0KIAogLyoqCisqIHNtYWNrX2hvc3RfbGFiZWwgLSBjaGVjayBob3N0IGJhc2VkIHJlc3RyaWN0aW9ucworKiBAc2lwOiB0aGUgb2JqZWN0IGVuZAorKgorKiBsb29rcyBmb3IgaG9zdCBiYXNlZCBhY2Nlc3MgcmVzdHJpY3Rpb25zCisqCisqIFRoaXMgdmVyc2lvbiB3aWxsIG9ubHkgYmUgYXBwcm9wcmlhdGUgZm9yIHJlYWxseSBzbWFsbCBzZXRzIG9mIHNpbmdsZSBsYWJlbAorKiBob3N0cy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFJDVSByZWFkIGxvY2sgaXMKKyogdGFrZW4gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyoKKyogUmV0dXJucyB0aGUgbGFiZWwgb2YgdGhlIGZhciBlbmQgb3IgTlVMTCBpZiBpdCdzIG5vdCBzcGVjaWFsLgorKi8KK3N0YXRpYyBjaGFyICpzbWFja19ob3N0X2xhYmVsKHN0cnVjdCBzb2NrYWRkcl9pbiAqc2lwKQoreworCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc25wOworCXN0cnVjdCBpbl9hZGRyICpzaWFwID0gJnNpcC0+c2luX2FkZHI7CisKKwlpZiAoc2lhcC0+c19hZGRyID09IDApCisJCXJldHVybiBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc25wLCAmc21rX25ldGxibGFkZHJfbGlzdCwgbGlzdCkKKwkJLyoKKwkJKiB3ZSBicmVhayBhZnRlciBmaW5kaW5nIHRoZSBmaXJzdCBtYXRjaCBiZWNhdXNlCisJCSogdGhlIGxpc3QgaXMgc29ydGVkIGZyb20gbG9uZ2VzdCB0byBzaG9ydGVzdCBtYXNrCisJCSogc28gd2UgaGF2ZSBmb3VuZCB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaAorCQkqLworCQlpZiAoKCZzbnAtPnNta19ob3N0LnNpbl9hZGRyKS0+c19hZGRyID09CisJCSAgICAoc2lhcC0+c19hZGRyICYgKCZzbnAtPnNta19tYXNrKS0+c19hZGRyKSkgeworCQkJLyogd2UgaGF2ZSBmb3VuZCB0aGUgc3BlY2lhbCBDSVBTTyBvcHRpb24gKi8KKwkJCWlmIChzbnAtPnNta19sYWJlbCA9PSBzbWFja19jaXBzb19vcHRpb24pCisJCQkJcmV0dXJuIE5VTEw7CisJCQlyZXR1cm4gc25wLT5zbWtfbGFiZWw7CisJCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKICAqIHNtYWNrX3NldF9jYXRzZXQgLSBjb252ZXJ0IGEgY2Fwc2V0IHRvIG5ldGxhYmVsIG1scyBjYXRlZ29yaWVzCiAgKiBAY2F0c2V0OiB0aGUgU21hY2sgY2F0ZWdvcmllcwogICogQHNhcDogd2hlcmUgdG8gcHV0IHRoZSBuZXRsYWJlbCBjYXRlZ29yaWVzCkBAIC0xMzY3LDExICsxNDA3LDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgc21hY2tfbmV0bGFiZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFiZWxlZCkKIHsKLQlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3A7CisJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc2stPnNrX3NlY3VyaXR5OwogCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2VjYXR0cjsKIAlpbnQgcmMgPSAwOwogCi0Jc3NwID0gc2stPnNrX3NlY3VyaXR5OwogCS8qCiAJICogVXN1YWxseSB0aGUgbmV0bGFiZWwgY29kZSB3aWxsIGhhbmRsZSBjaGFuZ2luZyB0aGUKIAkgKiBwYWNrZXQgbGFiZWxpbmcgYmFzZWQgb24gdGhlIGxhYmVsLgpAQCAtMTM4OSwyNyArMTQyOCw1MSBAQAogCWVsc2UgewogCQluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKIAkJc21hY2tfdG9fc2VjYXR0cihzc3AtPnNta19vdXQsICZzZWNhdHRyKTsKLQkJcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCAmc2VjYXR0cik7CisJCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgc2stPnNrX2ZhbWlseSwgJnNlY2F0dHIpOwogCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKIAl9CiAKIAliaF91bmxvY2tfc29jayhzayk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JLyoKLQkgKiBSZW1lbWJlciB0aGUgbGFiZWwgc2NoZW1lIHVzZWQgc28gdGhhdCBpdCBpcyBub3QKLQkgKiBuZWNlc3NhcnkgdG8gZG8gdGhlIG5ldGxhYmVsIHNldHRpbmcgaWYgaXQgaGFzIG5vdAotCSAqIGNoYW5nZWQgdGhlIG5leHQgdGltZSB0aHJvdWdoLgotCSAqCi0JICogVGhlIC1FREVTVEFERFJSRVEgY2FzZSBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlcmUncwotCSAqIGEgc2luZ2xlIGxldmVsIGhvc3QgaW52b2x2ZWQuCi0JICovCi0JaWYgKHJjID09IDApCi0JCXNzcC0+c21rX2xhYmVsZWQgPSBsYWJlbGVkOwogCiAJcmV0dXJuIHJjOwogfQogCiAvKioKKyAqIHNtYWNrX25ldGxiZWxfc2VuZCAtIFNldCB0aGUgc2VjYXR0ciBvbiBhIHNvY2tldCBhbmQgcGVyZm9ybSBhY2Nlc3MgY2hlY2tzCisgKiBAc2s6IHRoZSBzb2NrZXQKKyAqIEBzYXA6IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKgorICogU2V0IHRoZSBjb3JyZWN0IHNlY2F0dHIgZm9yIHRoZSBnaXZlbiBzb2NrZXQgYmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uCisgKiBhZGRyZXNzIGFuZCBwZXJmb3JtIGFueSBvdXRib3VuZCBhY2Nlc3MgY2hlY2tzIG5lZWRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLgorICoKKyAqLworc3RhdGljIGludCBzbWFja19uZXRsYWJlbF9zZW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX2luICpzYXApCit7CisJaW50IHJjOworCWludCBza19sYmw7CisJY2hhciAqaG9zdHNwOworCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNrLT5za19zZWN1cml0eTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlob3N0c3AgPSBzbWFja19ob3N0X2xhYmVsKHNhcCk7CisJaWYgKGhvc3RzcCAhPSBOVUxMKSB7CisJCXNrX2xibCA9IFNNQUNLX1VOTEFCRUxFRF9TT0NLRVQ7CisJCXJjID0gc21rX2FjY2Vzcyhzc3AtPnNta19vdXQsIGhvc3RzcCwgTUFZX1dSSVRFKTsKKwl9IGVsc2UgeworCQlza19sYmwgPSBTTUFDS19DSVBTT19TT0NLRVQ7CisJCXJjID0gMDsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXJldHVybiBzbWFja19uZXRsYWJlbChzaywgc2tfbGJsKTsKK30KKworLyoqCiAgKiBzbWFja19pbm9kZV9zZXRzZWN1cml0eSAtIHNldCBzbWFjayB4YXR0cnMKICAqIEBpbm9kZTogdGhlIG9iamVjdAogICogQG5hbWU6IGF0dHJpYnV0ZSBuYW1lCkBAIC0xNDMwLDcgKzE0OTMsNyBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJaW50IHJjID0gMDsKIAotCWlmICh2YWx1ZSA9PSBOVUxMIHx8IHNpemUgPiBTTUtfTEFCRUxMRU4pCisJaWYgKHZhbHVlID09IE5VTEwgfHwgc2l6ZSA+IFNNS19MQUJFTExFTiB8fCBzaXplID09IDApCiAJCXJldHVybiAtRUFDQ0VTOwogCiAJc3AgPSBzbWtfaW1wb3J0KHZhbHVlLCBzaXplKTsKQEAgLTE0OTAsNDEgKzE1NTMsNiBAQAogCXJldHVybiBzbWFja19uZXRsYWJlbChzb2NrLT5zaywgU01BQ0tfQ0lQU09fU09DS0VUKTsKIH0KIAotCi0vKioKLSAqIHNtYWNrX2hvc3RfbGFiZWwgLSBjaGVjayBob3N0IGJhc2VkIHJlc3RyaWN0aW9ucwotICogQHNpcDogdGhlIG9iamVjdCBlbmQKLSAqCi0gKiBsb29rcyBmb3IgaG9zdCBiYXNlZCBhY2Nlc3MgcmVzdHJpY3Rpb25zCi0gKgotICogVGhpcyB2ZXJzaW9uIHdpbGwgb25seSBiZSBhcHByb3ByaWF0ZSBmb3IgcmVhbGx5IHNtYWxsCi0gKiBzZXRzIG9mIHNpbmdsZSBsYWJlbCBob3N0cy4KLSAqCi0gKiBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgZmFyIGVuZCBvciBOVUxMIGlmIGl0J3Mgbm90IHNwZWNpYWwuCi0gKi8KLXN0YXRpYyBjaGFyICpzbWFja19ob3N0X2xhYmVsKHN0cnVjdCBzb2NrYWRkcl9pbiAqc2lwKQotewotCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc25wOwotCXN0cnVjdCBpbl9hZGRyICpzaWFwID0gJnNpcC0+c2luX2FkZHI7Ci0KLQlpZiAoc2lhcC0+c19hZGRyID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChzbnAgPSBzbWFja19uZXRsYmxhZGRyczsgc25wICE9IE5VTEw7IHNucCA9IHNucC0+c21rX25leHQpIHsKLQkJLyoKLQkJICogd2UgYnJlYWsgYWZ0ZXIgZmluZGluZyB0aGUgZmlyc3QgbWF0Y2ggYmVjYXVzZQotCQkgKiB0aGUgbGlzdCBpcyBzb3J0ZWQgZnJvbSBsb25nZXN0IHRvIHNob3J0ZXN0IG1hc2sKLQkJICogc28gd2UgaGF2ZSBmb3VuZCB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaAotCQkgKi8KLQkJaWYgKCgmc25wLT5zbWtfaG9zdC5zaW5fYWRkciktPnNfYWRkciAgPT0KLQkJCShzaWFwLT5zX2FkZHIgJiAoJnNucC0+c21rX21hc2spLT5zX2FkZHIpKSB7Ci0JCQlyZXR1cm4gc25wLT5zbWtfbGFiZWw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogLyoqCiAgKiBzbWFja19zb2NrZXRfY29ubmVjdCAtIGNvbm5lY3QgYWNjZXNzIGNoZWNrCiAgKiBAc29jazogdGhlIHNvY2tldApAQCAtMTUzOCwzMCArMTU2NiwxMiBAQAogc3RhdGljIGludCBzbWFja19zb2NrZXRfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKIAkJCQlpbnQgYWRkcmxlbikKIHsKLQlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3AgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7Ci0JY2hhciAqaG9zdHNwOwotCWludCByYzsKLQogCWlmIChzb2NrLT5zayA9PSBOVUxMIHx8IHNvY2stPnNrLT5za19mYW1pbHkgIT0gUEZfSU5FVCkKIAkJcmV0dXJuIDA7Ci0KIAlpZiAoYWRkcmxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWhvc3RzcCA9IHNtYWNrX2hvc3RfbGFiZWwoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcCk7Ci0JaWYgKGhvc3RzcCA9PSBOVUxMKSB7Ci0JCWlmIChzc3AtPnNta19sYWJlbGVkICE9IFNNQUNLX0NJUFNPX1NPQ0tFVCkKLQkJCXJldHVybiBzbWFja19uZXRsYWJlbChzb2NrLT5zaywgU01BQ0tfQ0lQU09fU09DS0VUKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBzbWtfYWNjZXNzKHNzcC0+c21rX291dCwgaG9zdHNwLCBNQVlfV1JJVEUpOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoc3NwLT5zbWtfbGFiZWxlZCAhPSBTTUFDS19VTkxBQkVMRURfU09DS0VUKQotCQlyZXR1cm4gc21hY2tfbmV0bGFiZWwoc29jay0+c2ssIFNNQUNLX1VOTEFCRUxFRF9TT0NLRVQpOwotCXJldHVybiAwOworCXJldHVybiBzbWFja19uZXRsYWJlbF9zZW5kKHNvY2stPnNrLCAoc3RydWN0IHNvY2thZGRyX2luICopc2FwKTsKIH0KIAogLyoqCkBAIC0xOTc0LDcgKzE5ODQsNyBAQAogCiAvKioKICAqIHNtYWNrX2lwY19nZXRzZWNpZCAtIEV4dHJhY3Qgc21hY2sgc2VjdXJpdHkgaWQKLSAqIEBpcGNwOiB0aGUgb2JqZWN0IHBlcm1pc3Npb25zCisgKiBAaXBwOiB0aGUgb2JqZWN0IHBlcm1pc3Npb25zCiAgKiBAc2VjaWQ6IHdoZXJlIHJlc3VsdCB3aWxsIGJlIHNhdmVkCiAgKi8KIHN0YXRpYyB2b2lkIHNtYWNrX2lwY19nZXRzZWNpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBwLCB1MzIgKnNlY2lkKQpAQCAtMjI1MSw3ICsyMjYxLDcgQEAKIC8qKgogICogc21hY2tfc29ja2V0X3NlbmRtc2cgLSBTbWFjayBjaGVjayBiYXNlZCBvbiBkZXN0aW5hdGlvbiBob3N0CiAgKiBAc29jazogdGhlIHNvY2tldAotICogQG1zZ2hkcjogdGhlIG1lc3NhZ2UKKyAqIEBtc2c6IHRoZSBtZXNzYWdlCiAgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UKICAqCiAgKiBSZXR1cm4gMCBpZiB0aGUgY3VycmVudCBzdWJqZWN0IGNhbiB3cml0ZSB0byB0aGUgZGVzdGluYXRpb24KQEAgLTIyNjIsOSArMjI3Miw2IEBACiAJCQkJaW50IHNpemUpCiB7CiAJc3RydWN0IHNvY2thZGRyX2luICpzaXAgPSAoc3RydWN0IHNvY2thZGRyX2luICopIG1zZy0+bXNnX25hbWU7Ci0Jc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc29jay0+c2stPnNrX3NlY3VyaXR5OwotCWNoYXIgKmhvc3RzcDsKLQlpbnQgcmM7CiAKIAkvKgogCSAqIFBlcmZlY3RseSByZWFzb25hYmxlIGZvciB0aGlzIHRvIGJlIE5VTEwKQEAgLTIyNzIsMjggKzIyNzksMTIgQEAKIAlpZiAoc2lwID09IE5VTEwgfHwgc2lwLT5zaW5fZmFtaWx5ICE9IFBGX0lORVQpCiAJCXJldHVybiAwOwogCi0JaG9zdHNwID0gc21hY2tfaG9zdF9sYWJlbChzaXApOwotCWlmIChob3N0c3AgPT0gTlVMTCkgewotCQlpZiAoc3NwLT5zbWtfbGFiZWxlZCAhPSBTTUFDS19DSVBTT19TT0NLRVQpCi0JCQlyZXR1cm4gc21hY2tfbmV0bGFiZWwoc29jay0+c2ssIFNNQUNLX0NJUFNPX1NPQ0tFVCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gc21rX2FjY2Vzcyhzc3AtPnNta19vdXQsIGhvc3RzcCwgTUFZX1dSSVRFKTsKLQlpZiAocmMgIT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JaWYgKHNzcC0+c21rX2xhYmVsZWQgIT0gU01BQ0tfVU5MQUJFTEVEX1NPQ0tFVCkKLQkJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNvY2stPnNrLCBTTUFDS19VTkxBQkVMRURfU09DS0VUKTsKLQotCXJldHVybiAwOwotCisJcmV0dXJuIHNtYWNrX25ldGxhYmVsX3NlbmQoc29jay0+c2ssIHNpcCk7CiB9CiAKIAogLyoqCi0gKiBzbWFja19mcm9tX3NlY2F0dHIgLSBDb252ZXJ0IGEgbmV0bGFiZWwgYXR0ci5tbHMubHZsL2F0dHIubWxzLmNhdAotICogCXBhaXIgdG8gc21hY2sKKyAqIHNtYWNrX2Zyb21fc2VjYXR0ciAtIENvbnZlcnQgYSBuZXRsYWJlbCBhdHRyLm1scy5sdmwvYXR0ci5tbHMuY2F0IHBhaXIgdG8gc21hY2sKICAqIEBzYXA6IG5ldGxhYmVsIHNlY2F0dHIKICAqIEBzaXA6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0CiAgKgpAQCAtMjQxNCw3ICsyNDA1LDcgQEAKICAqIEBzb2NrOiB0aGUgc29ja2V0CiAgKiBAb3B0dmFsOiB1c2VyJ3MgZGVzdGluYXRpb24KICAqIEBvcHRsZW46IHNpemUgdGhlcmVvZgotICogQGxlbjogbWF4IHRoZXJlb2UKKyAqIEBsZW46IG1heCB0aGVyZW9mCiAgKgogICogcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KQEAgLTI0OTMsMzEgKzI0ODQsMjQgQEAKIH0KIAogLyoqCi0gKiBzbWFja19zb2NrX2dyYWZ0IC0gZ3JhZnQgYWNjZXNzIHN0YXRlIGJldHdlZW4gdHdvIHNvY2tldHMKLSAqIEBzazogZnJlc2ggc29jawotICogQHBhcmVudDogZG9ub3Igc29ja2V0CisgKiBzbWFja19zb2NrX2dyYWZ0IC0gSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgc29ja2V0IHdpdGggYW4gZXhpc3Rpbmcgc29jaworICogQHNrOiBjaGlsZCBzb2NrCisgKiBAcGFyZW50OiBwYXJlbnQgc29ja2V0CiAgKgotICogU2V0cyB0aGUgbmV0bGFiZWwgc29ja2V0IHN0YXRlIG9uIHNrIGZyb20gcGFyZW50CisgKiBTZXQgdGhlIHNta197aW4sb3V0fSBzdGF0ZSBvZiBhbiBleGlzdGluZyBzb2NrIGJhc2VkIG9uIHRoZSBwcm9jZXNzIHRoYXQKKyAqIGlzIGNyZWF0aW5nIHRoZSBuZXcgc29ja2V0LgogICovCiBzdGF0aWMgdm9pZCBzbWFja19zb2NrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqcGFyZW50KQogewogCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcDsKLQlpbnQgcmM7CiAKLQlpZiAoc2sgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKHNrLT5za19mYW1pbHkgIT0gUEZfSU5FVCAmJiBzay0+c2tfZmFtaWx5ICE9IFBGX0lORVQ2KQorCWlmIChzayA9PSBOVUxMIHx8CisJICAgIChzay0+c2tfZmFtaWx5ICE9IFBGX0lORVQgJiYgc2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUNikpCiAJCXJldHVybjsKIAogCXNzcCA9IHNrLT5za19zZWN1cml0eTsKIAlzc3AtPnNta19pbiA9IHNzcC0+c21rX291dCA9IGN1cnJlbnRfc2VjdXJpdHkoKTsKLQlzc3AtPnNta19wYWNrZXRbMF0gPSAnXDAnOwotCi0JcmMgPSBzbWFja19uZXRsYWJlbChzaywgU01BQ0tfQ0lQU09fU09DS0VUKTsKLQlpZiAocmMgIT0gMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU21hY2s6IFwiJXNcIiBuZXRsYmwgZXJyb3IgJWQuXG4iLAotCQkgICAgICAgX19mdW5jX18sIC1yYyk7CisJLyogY3NzcC0+c21rX3BhY2tldCBpcyBhbHJlYWR5IHNldCBpbiBzbWFja19pbmV0X2Nza19jbG9uZSgpICovCiB9CiAKIC8qKgpAQCAtMjUzMiwzNSArMjUxNiw4MiBAQAogc3RhdGljIGludCBzbWFja19pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2tiX3NlY2F0dHI7CisJdTE2IGZhbWlseSA9IHNrLT5za19mYW1pbHk7CiAJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2VjYXR0cjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlzdHJ1Y3QgaXBoZHIgKmhkcjsKIAljaGFyIHNtYWNrW1NNS19MQUJFTExFTl07CiAJaW50IHJjOwogCi0JaWYgKHNrYiA9PSBOVUxMKQotCQlyZXR1cm4gLUVBQ0NFUzsKKwkvKiBoYW5kbGUgbWFwcGVkIElQdjQgcGFja2V0cyBhcnJpdmluZyB2aWEgSVB2NiBzb2NrZXRzICovCisJaWYgKGZhbWlseSA9PSBQRl9JTkVUNiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJZmFtaWx5ID0gUEZfSU5FVDsKIAotCW5ldGxibF9zZWNhdHRyX2luaXQoJnNrYl9zZWNhdHRyKTsKLQlyYyA9IG5ldGxibF9za2J1ZmZfZ2V0YXR0cihza2IsIHNrLT5za19mYW1pbHksICZza2Jfc2VjYXR0cik7CisJbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CisJcmMgPSBuZXRsYmxfc2tidWZmX2dldGF0dHIoc2tiLCBmYW1pbHksICZzZWNhdHRyKTsKIAlpZiAocmMgPT0gMCkKLQkJc21hY2tfZnJvbV9zZWNhdHRyKCZza2Jfc2VjYXR0ciwgc21hY2spOworCQlzbWFja19mcm9tX3NlY2F0dHIoJnNlY2F0dHIsIHNtYWNrKTsKIAllbHNlCiAJCXN0cm5jcHkoc21hY2ssIHNtYWNrX2tub3duX2h1aC5zbWtfa25vd24sIFNNS19NQVhMRU4pOwotCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNrYl9zZWNhdHRyKTsKKwluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwogCS8qCi0JICogUmVjZWl2aW5nIGEgcGFja2V0IHJlcXVpcmVzIHRoYXQgdGhlIG90aGVyIGVuZAotCSAqIGJlIGFibGUgdG8gd3JpdGUgaGVyZS4gUmVhZCBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLgotCSAqCi0JICogSWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCBzYXZlIHRoZSBwZWVyJ3MgbGFiZWwKLQkgKiBzbyB0aGF0IFNPX1BFRVJDUkVEIGNhbiByZXBvcnQgaXQuCisJICogUmVjZWl2aW5nIGEgcGFja2V0IHJlcXVpcmVzIHRoYXQgdGhlIG90aGVyIGVuZCBiZSBhYmxlIHRvIHdyaXRlCisJICogaGVyZS4gUmVhZCBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLgogCSAqLwogCXJjID0gc21rX2FjY2VzcyhzbWFjaywgc3NwLT5zbWtfaW4sIE1BWV9XUklURSk7Ci0JaWYgKHJjID09IDApCi0JCXN0cm5jcHkoc3NwLT5zbWtfcGFja2V0LCBzbWFjaywgU01LX01BWExFTik7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCS8qCisJICogU2F2ZSB0aGUgcGVlcidzIGxhYmVsIGluIHRoZSByZXF1ZXN0X3NvY2sgc28gd2UgY2FuIGxhdGVyIHNldHVwCisJICogc21rX3BhY2tldCBpbiB0aGUgY2hpbGQgc29ja2V0IHNvIHRoYXQgU09fUEVFUkNSRUQgY2FuIHJlcG9ydCBpdC4KKwkgKi8KKwlyZXEtPnBlZXJfc2VjaWQgPSBzbWFja190b19zZWNpZChzbWFjayk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZGVjaWRlIGlmIHdlIHdhbnQgdG8gbGFiZWwgdGhlIGluY29taW5nIGNvbm5lY3Rpb24gaGVyZQorCSAqIGlmIHdlIGRvIHdlIG9ubHkgbmVlZCB0byBsYWJlbCB0aGUgcmVxdWVzdF9zb2NrIGFuZCB0aGUgc3RhY2sgd2lsbAorCSAqIHByb3BvZ2F0ZSB0aGUgd2lyZS1sYWJlbCB0byB0aGUgc29jayB3aGVuIGl0IGlzIGNyZWF0ZWQuCisJICovCisJaGRyID0gaXBfaGRyKHNrYik7CisJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBoZHItPnNhZGRyOworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAoc21hY2tfaG9zdF9sYWJlbCgmYWRkcikgPT0gTlVMTCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CisJCXNtYWNrX3RvX3NlY2F0dHIoc21hY2ssICZzZWNhdHRyKTsKKwkJcmMgPSBuZXRsYmxfcmVxX3NldGF0dHIocmVxLCAmc2VjYXR0cik7CisJCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQluZXRsYmxfcmVxX2RlbGF0dHIocmVxKTsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogc21hY2tfaW5ldF9jc2tfY2xvbmUgLSBDb3B5IHRoZSBjb25uZWN0aW9uIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgc29ja2V0CisgKiBAc2s6IHRoZSBuZXcgc29ja2V0CisgKiBAcmVxOiB0aGUgY29ubmVjdGlvbidzIHJlcXVlc3Rfc29jaworICoKKyAqIFRyYW5zZmVyIHRoZSBjb25uZWN0aW9uJ3MgcGVlciBsYWJlbCB0byB0aGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQuCisgKi8KK3N0YXRpYyB2b2lkIHNtYWNrX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywKKwkJCQkgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNrLT5za19zZWN1cml0eTsKKwljaGFyICpzbWFjazsKKworCWlmIChyZXEtPnBlZXJfc2VjaWQgIT0gMCkgeworCQlzbWFjayA9IHNtYWNrX2Zyb21fc2VjaWQocmVxLT5wZWVyX3NlY2lkKTsKKwkJc3RybmNweShzc3AtPnNta19wYWNrZXQsIHNtYWNrLCBTTUtfTUFYTEVOKTsKKwl9IGVsc2UKKwkJc3NwLT5zbWtfcGFja2V0WzBdID0gJ1wwJzsKK30KKwogLyoKICAqIEtleSBtYW5hZ2VtZW50IHNlY3VyaXR5IGhvb2tzCiAgKgpAQCAtMjc0OSw3ICsyNzgwLDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwogCi0vKgorLyoqCiAgKiBzbWFja19zZWNpZF90b19zZWNjdHggLSByZXR1cm4gdGhlIHNtYWNrIGxhYmVsIGZvciBhIHNlY2lkCiAgKiBAc2VjaWQ6IGluY29taW5nIGludGVnZXIKICAqIEBzZWNkYXRhOiBkZXN0aW5hdGlvbgpAQCAtMjc2Niw3ICsyNzk3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKKy8qKgogICogc21hY2tfc2VjY3R4X3RvX3NlY2lkIC0gcmV0dXJuIHRoZSBzZWNpZCBmb3IgYSBzbWFjayBsYWJlbAogICogQHNlY2RhdGE6IHNtYWNrIGxhYmVsCiAgKiBAc2VjbGVuOiBob3cgbG9uZyByZXN1bHQgaXMKQEAgLTI3ODAsMTEgKzI4MTEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKKy8qKgogICogc21hY2tfcmVsZWFzZV9zZWNjdHggLSBkb24ndCBkbyBhbnl0aGluZy4KLSAqIEBrZXlfcmVmOiB1bnVzZWQKLSAqIEBjb250ZXh0OiB1bnVzZWQKLSAqIEBwZXJtOiB1bnVzZWQKKyAqIEBzZWNkYXRhOiB1bnVzZWQKKyAqIEBzZWNsZW46IHVudXNlZAogICoKICAqIEV4aXN0cyB0byBtYWtlIHN1cmUgbm90aGluZyBnZXRzIGRvbmUsIGFuZCBwcm9wZXJseQogICovCkBAIC0yOTEzLDYgKzI5NDMsNyBAQAogCS5za19mcmVlX3NlY3VyaXR5ID0gCQlzbWFja19za19mcmVlX3NlY3VyaXR5LAogCS5zb2NrX2dyYWZ0ID0gCQkJc21hY2tfc29ja19ncmFmdCwKIAkuaW5ldF9jb25uX3JlcXVlc3QgPSAJCXNtYWNrX2luZXRfY29ubl9yZXF1ZXN0LAorCS5pbmV0X2Nza19jbG9uZSA9CQlzbWFja19pbmV0X2Nza19jbG9uZSwKIAogIC8qIGtleSBtYW5hZ2VtZW50IHNlY3VyaXR5IGhvb2tzICovCiAjaWZkZWYgQ09ORklHX0tFWVMKQEAgLTI5MzQsNiArMjk2NSwxNyBAQAogCS5yZWxlYXNlX3NlY2N0eCA9IAkJc21hY2tfcmVsZWFzZV9zZWNjdHgsCiB9OwogCisKK3N0YXRpYyBfX2luaXQgdm9pZCBpbml0X3NtYWNrX2tub3dfbGlzdCh2b2lkKQoreworCWxpc3RfYWRkKCZzbWFja19rbm93bl9odWgubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9oYXQubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9zdGFyLmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKKwlsaXN0X2FkZCgmc21hY2tfa25vd25fZmxvb3IubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9pbnZhbGlkLmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKKwlsaXN0X2FkZCgmc21hY2tfa25vd25fd2ViLmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKK30KKwogLyoqCiAgKiBzbWFja19pbml0IC0gaW5pdGlhbGl6ZSB0aGUgc21hY2sgc3lzdGVtCiAgKgpAQCAtMjk1NCw2ICsyOTk2LDggQEAKIAljcmVkID0gKHN0cnVjdCBjcmVkICopIGN1cnJlbnQtPmNyZWQ7CiAJY3JlZC0+c2VjdXJpdHkgPSAmc21hY2tfa25vd25fZmxvb3Iuc21rX2tub3duOwogCisJLyogaW5pdGlsaXplIHRoZSBzbWFja19rbm93X2xpc3QgKi8KKwlpbml0X3NtYWNrX2tub3dfbGlzdCgpOwogCS8qCiAJICogSW5pdGlhbGl6ZSBsb2NrcwogCSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IDUxZjBlZmMuLmUwM2E3ZTEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTgwLDEwICs4MCwxNCBAQAogICogUGFja2V0cyBhcmUgc2VudCB0aGVyZSB1bmxhYmVsZWQsIGJ1dCBvbmx5IGZyb20gdGFza3MgdGhhdAogICogY2FuIHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgbGFiZWwuCiAgKi8KLXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc21hY2tfbmV0bGJsYWRkcnM7CisKK0xJU1RfSEVBRChzbWtfbmV0bGJsYWRkcl9saXN0KTsKK0xJU1RfSEVBRChzbWFja19ydWxlX2xpc3QpOwogCiBzdGF0aWMgaW50IHNta19jaXBzb19kb2lfdmFsdWUgPSBTTUFDS19DSVBTT19ET0lfREVGQVVMVDsKLXN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc21hY2tfbGlzdDsKKworY29uc3QgY2hhciAqc21hY2tfY2lwc29fb3B0aW9uID0gU01BQ0tfQ0lQU09fT1BUSU9OOworCiAKICNkZWZpbmUJU0VRX1JFQURfRklOSVNIRUQJMQogCkBAIC0xMzQsMjQgKzEzOCwyNyBAQAogewogCWlmICgqcG9zID09IFNFUV9SRUFEX0ZJTklTSEVEKQogCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBzbWFja19saXN0OworCWlmIChsaXN0X2VtcHR5KCZzbWFja19ydWxlX2xpc3QpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc21hY2tfcnVsZV9saXN0Lm5leHQ7CiB9CiAKIHN0YXRpYyB2b2lkICpsb2FkX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpza3AgPSAoKHN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqKSB2KS0+c21rX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IHY7CiAKLQlpZiAoc2twID09IE5VTEwpCisJaWYgKGxpc3RfaXNfbGFzdChsaXN0LCAmc21hY2tfcnVsZV9saXN0KSkgewogCQkqcG9zID0gU0VRX1JFQURfRklOSVNIRUQ7Ci0KLQlyZXR1cm4gc2twOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGxpc3QtPm5leHQ7CiB9CiAKIHN0YXRpYyBpbnQgbG9hZF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpzbHAgPSAoc3RydWN0IHNta19saXN0X2VudHJ5ICopIHY7Ci0Jc3RydWN0IHNtYWNrX3J1bGUgKnNycCA9ICZzbHAtPnNta19ydWxlOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2OworCXN0cnVjdCBzbWFja19ydWxlICpzcnAgPQorCQkgbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc21hY2tfcnVsZSwgbGlzdCk7CiAKIAlzZXFfcHJpbnRmKHMsICIlcyAlcyIsIChjaGFyICopc3JwLT5zbWtfc3ViamVjdCwKIAkJICAgKGNoYXIgKilzcnAtPnNta19vYmplY3QpOwpAQCAtMjEyLDMyICsyMTksMjMgQEAKICAqLwogc3RhdGljIGludCBzbWtfc2V0X2FjY2VzcyhzdHJ1Y3Qgc21hY2tfcnVsZSAqc3JwKQogewotCXN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc3A7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpuZXdwOworCXN0cnVjdCBzbWFja19ydWxlICpzcDsKIAlpbnQgcmV0ID0gMDsKLQorCWludCBmb3VuZDsKIAltdXRleF9sb2NrKCZzbWFja19saXN0X2xvY2spOwogCi0JZm9yIChzcCA9IHNtYWNrX2xpc3Q7IHNwICE9IE5VTEw7IHNwID0gc3AtPnNta19uZXh0KQotCQlpZiAoc3AtPnNta19ydWxlLnNta19zdWJqZWN0ID09IHNycC0+c21rX3N1YmplY3QgJiYKLQkJICAgIHNwLT5zbWtfcnVsZS5zbWtfb2JqZWN0ID09IHNycC0+c21rX29iamVjdCkgewotCQkJc3AtPnNta19ydWxlLnNta19hY2Nlc3MgPSBzcnAtPnNta19hY2Nlc3M7CisJZm91bmQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNwLCAmc21hY2tfcnVsZV9saXN0LCBsaXN0KSB7CisJCWlmIChzcC0+c21rX3N1YmplY3QgPT0gc3JwLT5zbWtfc3ViamVjdCAmJgorCQkgICAgc3AtPnNta19vYmplY3QgPT0gc3JwLT5zbWtfb2JqZWN0KSB7CisJCQlmb3VuZCA9IDE7CisJCQlzcC0+c21rX2FjY2VzcyA9IHNycC0+c21rX2FjY2VzczsKIAkJCWJyZWFrOwogCQl9Ci0KLQlpZiAoc3AgPT0gTlVMTCkgewotCQluZXdwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNta19saXN0X2VudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChuZXdwID09IE5VTEwpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCW5ld3AtPnNta19ydWxlID0gKnNycDsKLQkJbmV3cC0+c21rX25leHQgPSBzbWFja19saXN0OwotCQlzbWFja19saXN0ID0gbmV3cDsKIAl9CisJaWYgKGZvdW5kID09IDApCisJCWxpc3RfYWRkX3JjdSgmc3JwLT5saXN0LCAmc21hY2tfcnVsZV9saXN0KTsKIAotb3V0OgogCW11dGV4X3VubG9jaygmc21hY2tfbGlzdF9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0yNDUsNyArMjQzLDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfbG9hZCAtIHdyaXRlKCkgZm9yIC9zbWFjay9sb2FkCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydCAtIG11c3QgYmUgMApAQCAtMjYxLDcgKzI1OSw3IEBACiBzdGF0aWMgc3NpemVfdCBzbWtfd3JpdGVfbG9hZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBzbWFja19ydWxlIHJ1bGU7CisJc3RydWN0IHNtYWNrX3J1bGUgKnJ1bGU7CiAJY2hhciAqZGF0YTsKIAlpbnQgcmMgPSAtRUlOVkFMOwogCkBAIC0yNzIsOSArMjcwLDggQEAKIAkgKi8KIAlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07Ci0JaWYgKCpwcG9zICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3VudCAhPSBTTUtfTE9BRExFTikKKworCWlmICgqcHBvcyAhPSAwIHx8IGNvdW50ICE9IFNNS19MT0FETEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSBremFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKQEAgLTI4NiwyNSArMjgzLDMxIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJ1bGUuc21rX3N1YmplY3QgPSBzbWtfaW1wb3J0KGRhdGEsIDApOwotCWlmIChydWxlLnNta19zdWJqZWN0ID09IE5VTEwpCisJcnVsZSA9IGt6YWxsb2Moc2l6ZW9mKCpydWxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ1bGUgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OworCX0KIAotCXJ1bGUuc21rX29iamVjdCA9IHNta19pbXBvcnQoZGF0YSArIFNNS19MQUJFTExFTiwgMCk7Ci0JaWYgKHJ1bGUuc21rX29iamVjdCA9PSBOVUxMKQotCQlnb3RvIG91dDsKKwlydWxlLT5zbWtfc3ViamVjdCA9IHNta19pbXBvcnQoZGF0YSwgMCk7CisJaWYgKHJ1bGUtPnNta19zdWJqZWN0ID09IE5VTEwpCisJCWdvdG8gb3V0X2ZyZWVfcnVsZTsKIAotCXJ1bGUuc21rX2FjY2VzcyA9IDA7CisJcnVsZS0+c21rX29iamVjdCA9IHNta19pbXBvcnQoZGF0YSArIFNNS19MQUJFTExFTiwgMCk7CisJaWYgKHJ1bGUtPnNta19vYmplY3QgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZV9ydWxlOworCisJcnVsZS0+c21rX2FjY2VzcyA9IDA7CiAKIAlzd2l0Y2ggKGRhdGFbU01LX0xBQkVMTEVOICsgU01LX0xBQkVMTEVOXSkgewogCWNhc2UgJy0nOgogCQlicmVhazsKIAljYXNlICdyJzoKIAljYXNlICdSJzoKLQkJcnVsZS5zbWtfYWNjZXNzIHw9IE1BWV9SRUFEOworCQlydWxlLT5zbWtfYWNjZXNzIHw9IE1BWV9SRUFEOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9ydWxlOwogCX0KIAogCXN3aXRjaCAoZGF0YVtTTUtfTEFCRUxMRU4gKyBTTUtfTEFCRUxMRU4gKyAxXSkgewpAQCAtMzEyLDEwICszMTUsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSAndyc6CiAJY2FzZSAnVyc6Ci0JCXJ1bGUuc21rX2FjY2VzcyB8PSBNQVlfV1JJVEU7CisJCXJ1bGUtPnNta19hY2Nlc3MgfD0gTUFZX1dSSVRFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9ydWxlOwogCX0KIAogCXN3aXRjaCAoZGF0YVtTTUtfTEFCRUxMRU4gKyBTTUtfTEFCRUxMRU4gKyAyXSkgewpAQCAtMzIzLDEwICszMjYsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSAneCc6CiAJY2FzZSAnWCc6Ci0JCXJ1bGUuc21rX2FjY2VzcyB8PSBNQVlfRVhFQzsKKwkJcnVsZS0+c21rX2FjY2VzcyB8PSBNQVlfRVhFQzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfcnVsZTsKIAl9CiAKIAlzd2l0Y2ggKGRhdGFbU01LX0xBQkVMTEVOICsgU01LX0xBQkVMTEVOICsgM10pIHsKQEAgLTMzNCwxNyArMzM3LDIwIEBACiAJCWJyZWFrOwogCWNhc2UgJ2EnOgogCWNhc2UgJ0EnOgotCQlydWxlLnNta19hY2Nlc3MgfD0gTUFZX0FQUEVORDsKKwkJcnVsZS0+c21rX2FjY2VzcyB8PSBNQVlfQVBQRU5EOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9ydWxlOwogCX0KIAotCXJjID0gc21rX3NldF9hY2Nlc3MoJnJ1bGUpOworCXJjID0gc21rX3NldF9hY2Nlc3MocnVsZSk7CiAKIAlpZiAoIXJjKQogCQlyYyA9IGNvdW50OworCWdvdG8gb3V0OwogCitvdXRfZnJlZV9ydWxlOgorCWtmcmVlKHJ1bGUpOwogb3V0OgogCWtmcmVlKGRhdGEpOwogCXJldHVybiByYzsKQEAgLTQwMiw2ICs0MDgsNyBAQAogCiAvKioKICAqIHNta191bmxibF9hbWJpZW50IC0gaW5pdGlhbGl6ZSB0aGUgdW5sYWJlbGVkIGRvbWFpbgorICogQG9sZGFtYmllbnQ6IHByZXZpb3VzIGRvbWFpbiBzdHJpbmcKICAqLwogc3RhdGljIHZvaWQgc21rX3VubGJsX2FtYmllbnQoY2hhciAqb2xkYW1iaWVudCkKIHsKQEAgLTQzMiwyNCArNDM5LDI2IEBACiB7CiAJaWYgKCpwb3MgPT0gU0VRX1JFQURfRklOSVNIRUQpCiAJCXJldHVybiBOVUxMOworCWlmIChsaXN0X2VtcHR5KCZzbWFja19rbm93bl9saXN0KSkKKwkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gc21hY2tfa25vd247CisJcmV0dXJuIHNtYWNrX2tub3duX2xpc3QubmV4dDsKIH0KIAogc3RhdGljIHZvaWQgKmNpcHNvX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNtYWNrX2tub3duICpza3AgPSAoKHN0cnVjdCBzbWFja19rbm93biAqKSB2KS0+c21rX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAgKmxpc3QgPSB2OwogCiAJLyoKLQkgKiBPbWl0IGxhYmVscyB3aXRoIG5vIGFzc29jaWF0ZWQgY2lwc28gdmFsdWUKKwkgKiBsYWJlbHMgd2l0aCBubyBhc3NvY2lhdGVkIGNpcHNvIHZhbHVlIHdvbnQgYmUgcHJpbnRlZAorCSAqIGluIGNpcHNvX3NlcV9zaG93CiAJICovCi0Jd2hpbGUgKHNrcCAhPSBOVUxMICYmICFza3AtPnNta19jaXBzbykKLQkJc2twID0gc2twLT5zbWtfbmV4dDsKLQotCWlmIChza3AgPT0gTlVMTCkKKwlpZiAobGlzdF9pc19sYXN0KGxpc3QsICZzbWFja19rbm93bl9saXN0KSkgewogCQkqcG9zID0gU0VRX1JFQURfRklOSVNIRUQ7CisJCXJldHVybiBOVUxMOworCX0KIAotCXJldHVybiBza3A7CisJcmV0dXJuIGxpc3QtPm5leHQ7CiB9CiAKIC8qCkBAIC00NTgsNyArNDY3LDkgQEAKICAqLwogc3RhdGljIGludCBjaXBzb19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHNtYWNrX2tub3duICpza3AgPSAoc3RydWN0IHNtYWNrX2tub3duICopIHY7CisJc3RydWN0IGxpc3RfaGVhZCAgKmxpc3QgPSB2OworCXN0cnVjdCBzbWFja19rbm93biAqc2twID0KKwkJIGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNtYWNrX2tub3duLCBsaXN0KTsKIAlzdHJ1Y3Qgc21hY2tfY2lwc28gKnNjcCA9IHNrcC0+c21rX2NpcHNvOwogCWNoYXIgKmNicDsKIAljaGFyIHNlcCA9ICcvJzsKQEAgLTUxMyw3ICs1MjQsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9jaXBzbyAtIHdyaXRlKCkgZm9yIC9zbWFjay9jaXBzbwotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTU1Nyw2ICs1NjgsMTEgQEAKIAkJZ290byB1bmxvY2tlZG91dDsKIAl9CiAKKwkvKiBsYWJlbHMgY2Fubm90IGJlZ2luIHdpdGggYSAnLScgKi8KKwlpZiAoZGF0YVswXSA9PSAnLScpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIHVubG9ja2Vkb3V0OworCX0KIAlkYXRhW2NvdW50XSA9ICdcMCc7CiAJcnVsZSA9IGRhdGE7CiAJLyoKQEAgLTYzNywxOCArNjUzLDIxIEBACiB7CiAJaWYgKCpwb3MgPT0gU0VRX1JFQURfRklOSVNIRUQpCiAJCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHNtYWNrX25ldGxibGFkZHJzOworCWlmIChsaXN0X2VtcHR5KCZzbWtfbmV0bGJsYWRkcl9saXN0KSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNta19uZXRsYmxhZGRyX2xpc3QubmV4dDsKIH0KIAogc3RhdGljIHZvaWQgKm5ldGxibGFkZHJfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKnNrcCA9ICgoc3RydWN0IHNta19uZXRsYmxhZGRyICopIHYpLT5zbWtfbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gdjsKIAotCWlmIChza3AgPT0gTlVMTCkKKwlpZiAobGlzdF9pc19sYXN0KGxpc3QsICZzbWtfbmV0bGJsYWRkcl9saXN0KSkgewogCQkqcG9zID0gU0VRX1JFQURfRklOSVNIRUQ7CisJCXJldHVybiBOVUxMOworCX0KIAotCXJldHVybiBza3A7CisJcmV0dXJuIGxpc3QtPm5leHQ7CiB9CiAjZGVmaW5lIEJFQklUUwkoc2l6ZW9mKF9fYmUzMikgKiA4KQogCkBAIC02NTcsNyArNjc2LDkgQEAKICAqLwogc3RhdGljIGludCBuZXRsYmxhZGRyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQlzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKnNrcCA9IChzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKikgdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gdjsKKwlzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKnNrcCA9CisJCQkgbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc21rX25ldGxibGFkZHIsIGxpc3QpOwogCXVuc2lnbmVkIGNoYXIgKmhwID0gKGNoYXIgKikgJnNrcC0+c21rX2hvc3Quc2luX2FkZHIuc19hZGRyOwogCWludCBtYXNrbjsKIAl1MzIgdGVtcF9tYXNrID0gYmUzMl90b19jcHUoc2twLT5zbWtfbWFzay5zX2FkZHIpOwpAQCAtNzAxLDMwICs3MjIsMzYgQEAKICAqCiAgKiBUaGlzIGhlbHBlciBpbnNlcnQgbmV0bGFiZWwgaW4gdGhlIHNtYWNrX25ldGxibGFkZHJzIGxpc3QKICAqIHNvcnRlZCBieSBuZXRtYXNrIGxlbmd0aCAobG9uZ2VzdCB0byBzbWFsbGVzdCkKKyAqIGxvY2tlZCBieSAmc21rX25ldGxibGFkZHJfbG9jayBpbiBzbWtfd3JpdGVfbmV0bGJsYWRkcgorICoKICAqLwogc3RhdGljIHZvaWQgc21rX25ldGxibGFkZHJfaW5zZXJ0KHN0cnVjdCBzbWtfbmV0bGJsYWRkciAqbmV3KQogewotCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqbTsKKwlzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKm0sICptX25leHQ7CiAKLQlpZiAoc21hY2tfbmV0bGJsYWRkcnMgPT0gTlVMTCkgewotCQlzbWFja19uZXRsYmxhZGRycyA9IG5ldzsKKwlpZiAobGlzdF9lbXB0eSgmc21rX25ldGxibGFkZHJfbGlzdCkpIHsKKwkJbGlzdF9hZGRfcmN1KCZuZXctPmxpc3QsICZzbWtfbmV0bGJsYWRkcl9saXN0KTsKIAkJcmV0dXJuOwogCX0KIAorCW0gPSBsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZShzbWtfbmV0bGJsYWRkcl9saXN0Lm5leHQpLAorCQkJIHN0cnVjdCBzbWtfbmV0bGJsYWRkciwgbGlzdCk7CisKIAkvKiB0aGUgY29tcGFyaXNvbiAnPicgaXMgYSBiaXQgaGFja3ksIGJ1dCB3b3JrcyAqLwotCWlmIChuZXctPnNta19tYXNrLnNfYWRkciA+IHNtYWNrX25ldGxibGFkZHJzLT5zbWtfbWFzay5zX2FkZHIpIHsKLQkJbmV3LT5zbWtfbmV4dCA9IHNtYWNrX25ldGxibGFkZHJzOwotCQlzbWFja19uZXRsYmxhZGRycyA9IG5ldzsKKwlpZiAobmV3LT5zbWtfbWFzay5zX2FkZHIgPiBtLT5zbWtfbWFzay5zX2FkZHIpIHsKKwkJbGlzdF9hZGRfcmN1KCZuZXctPmxpc3QsICZzbWtfbmV0bGJsYWRkcl9saXN0KTsKIAkJcmV0dXJuOwogCX0KLQlmb3IgKG0gPSBzbWFja19uZXRsYmxhZGRyczsgbSAhPSBOVUxMOyBtID0gbS0+c21rX25leHQpIHsKLQkJaWYgKG0tPnNta19uZXh0ID09IE5VTEwpIHsKLQkJCW0tPnNta19uZXh0ID0gbmV3OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobSwgJnNta19uZXRsYmxhZGRyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGxpc3RfaXNfbGFzdCgmbS0+bGlzdCwgJnNta19uZXRsYmxhZGRyX2xpc3QpKSB7CisJCQlsaXN0X2FkZF9yY3UoJm5ldy0+bGlzdCwgJm0tPmxpc3QpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChuZXctPnNta19tYXNrLnNfYWRkciA+IG0tPnNta19uZXh0LT5zbWtfbWFzay5zX2FkZHIpIHsKLQkJCW5ldy0+c21rX25leHQgPSBtLT5zbWtfbmV4dDsKLQkJCW0tPnNta19uZXh0ID0gbmV3OworCQltX25leHQgPSBsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZShtLT5saXN0Lm5leHQpLAorCQkJCSBzdHJ1Y3Qgc21rX25ldGxibGFkZHIsIGxpc3QpOworCQlpZiAobmV3LT5zbWtfbWFzay5zX2FkZHIgPiBtX25leHQtPnNta19tYXNrLnNfYWRkcikgeworCQkJbGlzdF9hZGRfcmN1KCZuZXctPmxpc3QsICZtLT5saXN0KTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTczMyw3ICs3NjAsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9uZXRsYmxhZGRyIC0gd3JpdGUoKSBmb3IgL3NtYWNrL25ldGxhYmVsCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtNzU0LDYgKzc4MSw3IEBACiAJc3RydWN0IG5ldGxibF9hdWRpdCBhdWRpdF9pbmZvOwogCXN0cnVjdCBpbl9hZGRyIG1hc2s7CiAJdW5zaWduZWQgaW50IG07CisJaW50IGZvdW5kOwogCXUzMiBtYXNrX2JpdHMgPSAoMTw8MzEpOwogCV9fYmUzMiBuc2E7CiAJdTMyIHRlbXBfbWFzazsKQEAgLTc4OCw5ICs4MTYsMTggQEAKIAlpZiAobSA+IEJFQklUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcCA9IHNta19pbXBvcnQoc21hY2ssIDApOwotCWlmIChzcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBpZiBzbWFjayBiZWdpbnMgd2l0aCAnLScsIGl0cyBhbiBvcHRpb24sIGRvbid0IGltcG9ydCBpdCAqLworCWlmIChzbWFja1swXSAhPSAnLScpIHsKKwkJc3AgPSBzbWtfaW1wb3J0KHNtYWNrLCAwKTsKKwkJaWYgKHNwID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQkvKiBjaGVjayBrbm93biBvcHRpb25zICovCisJCWlmIChzdHJjbXAoc21hY2ssIHNtYWNrX2NpcHNvX29wdGlvbikgPT0gMCkKKwkJCXNwID0gKGNoYXIgKilzbWFja19jaXBzb19vcHRpb247CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWZvciAodGVtcF9tYXNrID0gMDsgbSA+IDA7IG0tLSkgewogCQl0ZW1wX21hc2sgfD0gbWFza19iaXRzOwpAQCAtODA3LDE0ICs4NDQsMTcgQEAKIAogCW5zYSA9IG5ld25hbWUuc2luX2FkZHIuc19hZGRyOwogCS8qIHRyeSB0byBmaW5kIGlmIHRoZSBwcmVmaXggaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCAqLwotCWZvciAoc2twID0gc21hY2tfbmV0bGJsYWRkcnM7IHNrcCAhPSBOVUxMOyBza3AgPSBza3AtPnNta19uZXh0KQorCWZvdW5kID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShza3AsICZzbWtfbmV0bGJsYWRkcl9saXN0LCBsaXN0KSB7CiAJCWlmIChza3AtPnNta19ob3N0LnNpbl9hZGRyLnNfYWRkciA9PSBuc2EgJiYKLQkJICAgIHNrcC0+c21rX21hc2suc19hZGRyID09IG1hc2suc19hZGRyKQorCQkgICAgc2twLT5zbWtfbWFzay5zX2FkZHIgPT0gbWFzay5zX2FkZHIpIHsKKwkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwotCisJCX0KKwl9CiAJc21rX25ldGxhYmVsX2F1ZGl0X3NldCgmYXVkaXRfaW5mbyk7CiAKLQlpZiAoc2twID09IE5VTEwpIHsKKwlpZiAoZm91bmQgPT0gMCkgewogCQlza3AgPSBremFsbG9jKHNpemVvZigqc2twKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChza3AgPT0gTlVMTCkKIAkJCXJjID0gLUVOT01FTTsKQEAgLTgyNiwxOCArODY2LDIzIEBACiAJCQlzbWtfbmV0bGJsYWRkcl9pbnNlcnQoc2twKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXJjID0gbmV0bGJsX2NmZ191bmxibF9zdGF0aWNfZGVsKCZpbml0X25ldCwgTlVMTCwKLQkJCSZza3AtPnNta19ob3N0LnNpbl9hZGRyLCAmc2twLT5zbWtfbWFzaywKLQkJCVBGX0lORVQsICZhdWRpdF9pbmZvKTsKKwkJLyogd2UgZGVsZXRlIHRoZSB1bmxhYmVsZWQgZW50cnksIG9ubHkgaWYgdGhlIHByZXZpb3VzIGxhYmVsCisJCSAqIHdhc250IHRoZSBzcGVjaWFsIENJUFNPIG9wdGlvbiAqLworCQlpZiAoc2twLT5zbWtfbGFiZWwgIT0gc21hY2tfY2lwc29fb3B0aW9uKQorCQkJcmMgPSBuZXRsYmxfY2ZnX3VubGJsX3N0YXRpY19kZWwoJmluaXRfbmV0LCBOVUxMLAorCQkJCQkmc2twLT5zbWtfaG9zdC5zaW5fYWRkciwgJnNrcC0+c21rX21hc2ssCisJCQkJCVBGX0lORVQsICZhdWRpdF9pbmZvKTsKKwkJZWxzZQorCQkJcmMgPSAwOwogCQlza3AtPnNta19sYWJlbCA9IHNwOwogCX0KIAogCS8qCiAJICogTm93IHRlbGwgbmV0bGFiZWwgYWJvdXQgdGhlIHNpbmdsZSBsYWJlbCBuYXR1cmUgb2YKIAkgKiB0aGlzIGhvc3Qgc28gdGhhdCBpbmNvbWluZyBwYWNrZXRzIGdldCBsYWJlbGVkLgorCSAqIGJ1dCBvbmx5IGlmIHdlIGRpZG4ndCBnZXQgdGhlIHNwZWNpYWwgQ0lQU08gb3B0aW9uCiAJICovCi0KLQlpZiAocmMgPT0gMCkKKwlpZiAocmMgPT0gMCAmJiBzcCAhPSBzbWFja19jaXBzb19vcHRpb24pCiAJCXJjID0gbmV0bGJsX2NmZ191bmxibF9zdGF0aWNfYWRkKCZpbml0X25ldCwgTlVMTCwKIAkJCSZza3AtPnNta19ob3N0LnNpbl9hZGRyLCAmc2twLT5zbWtfbWFzaywgUEZfSU5FVCwKIAkJCXNtYWNrX3RvX3NlY2lkKHNrcC0+c21rX2xhYmVsKSwgJmF1ZGl0X2luZm8pOwpAQCAtODg0LDcgKzkyOSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2RvaSAtIHdyaXRlKCkgZm9yIC9zbWFjay9kb2kKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC05NDksNyArOTk0LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfZGlyZWN0IC0gd3JpdGUoKSBmb3IgL3NtYWNrL2RpcmVjdAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwMjQsNyArMTA2OSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2FtYmllbnQgLSB3cml0ZSgpIGZvciAvc21hY2svYW1iaWVudAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwOTksNyArMTE0NCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX29ubHljYXAgLSB3cml0ZSgpIGZvciAvc21hY2svb25seWNhcAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9LY29uZmlnIGIvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMzg1NwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTRUNVUklUWV9UT01PWU8KKwlib29sICJUT01PWU8gTGludXggU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFQ1VSSVRZCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgU0VDVVJJVFlfUEFUSAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBUT01PWU8gTGludXgsIHBhdGhuYW1lLWJhc2VkIGFjY2VzcyBjb250cm9sLgorCSAgUmVxdWlyZWQgdXNlcnNwYWNlIHRvb2xzIGFuZCBmdXJ0aGVyIGluZm9ybWF0aW9uIG1heSBiZQorCSAgZm91bmQgYXQgPGh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvPi4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vTWFrZWZpbGUgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjY2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSA9IGNvbW1vbi5vIHJlYWxwYXRoLm8gdG9tb3lvLm8gZG9tYWluLm8gZmlsZS5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZWE2NQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMCwwICsxLDIyMDYgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmMKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisKKy8qIEhhcyBsb2FkaW5nIHBvbGljeSBkb25lPyAqLworYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyogU3RyaW5nIHRhYmxlIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgdGFrZXMgNCBtb2Rlcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZV80WzRdID0geworCSJkaXNhYmxlZCIsICJsZWFybmluZyIsICJwZXJtaXNzaXZlIiwgImVuZm9yY2luZyIKK307CisvKiBTdHJpbmcgdGFibGUgZm9yIGZ1bmN0aW9uYWxpdHkgdGhhdCB0YWtlcyAyIG1vZGVzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19tb2RlXzJbNF0gPSB7CisJImRpc2FibGVkIiwgImVuYWJsZWQiLCAiZW5hYmxlZCIsICJlbmFibGVkIgorfTsKKworLyogVGFibGUgZm9yIHByb2ZpbGUuICovCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICprZXl3b3JkOworCXVuc2lnbmVkIGludCBjdXJyZW50X3ZhbHVlOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfdmFsdWU7Cit9IHRvbW95b19jb250cm9sX2FycmF5W1RPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWF0gPSB7CisJW1RPTU9ZT19NQUNfRk9SX0ZJTEVdICAgICA9IHsgIk1BQ19GT1JfRklMRSIsICAgICAgICAwLCAgICAgICAzIH0sCisJW1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXSA9IHsgIk1BWF9BQ0NFUFRfRU5UUlkiLCAyMDQ4LCBJTlRfTUFYIH0sCisJW1RPTU9ZT19WRVJCT1NFXSAgICAgICAgICA9IHsgIlRPTU9ZT19WRVJCT1NFIiwgICAgICAxLCAgICAgICAxIH0sCit9OworCisvKiBQcm9maWxlIHRhYmxlLiBNZW1vcnkgaXMgYWxsb2NhdGVkIGFzIG5lZWRlZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgeworCXVuc2lnbmVkIGludCB2YWx1ZVtUT01PWU9fTUFYX0NPTlRST0xfSU5ERVhdOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpjb21tZW50OworfSAqdG9tb3lvX3Byb2ZpbGVfcHRyW1RPTU9ZT19NQVhfUFJPRklMRVNdOworCisvKiBQZXJtaXQgcG9saWN5IG1hbmFnZW1lbnQgYnkgbm9uLXJvb3QgdXNlcj8gKi8KK3N0YXRpYyBib29sIHRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3Q7CisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zLiAqLworCisvKiBPcGVuIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuX2NvbnRyb2woY29uc3QgdTggdHlwZSwgc3RydWN0IGZpbGUgKmZpbGUpOworLyogQ2xvc2UgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIFJlYWQgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbik7CisvKiBXcml0ZSBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQljb25zdCBpbnQgYnVmZmVyX2xlbik7CisKKy8qKgorICogdG9tb3lvX2lzX2J5dGVfcmFuZ2UgLSBDaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgaXNhIFxvb28gc3R5bGUgb2N0YWwgdmFsdWUuCisgKgorICogQHN0cjogUG9pbnRlciB0byB0aGUgc3RyaW5nLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAc3RyIGlzIGEgXG9vbyBzdHlsZSBvY3RhbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRPTU9ZTyB1c2VzIFxvb28gc3R5bGUgcmVwcmVzZW50YXRpb24gZm9yIDB4MDEgLSAweDIwIGFuZCAweDdGIC0gMHhGRi4KKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCBcb29vIGlzIGluIHZhbGlkIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2J5dGVfcmFuZ2UoY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiAqc3RyID49ICcwJyAmJiAqc3RyKysgPD0gJzMnICYmCisJCSpzdHIgPj0gJzAnICYmICpzdHIrKyA8PSAnNycgJiYKKwkJKnN0ciA+PSAnMCcgJiYgKnN0ciA8PSAnNyc7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYW4gYWxwaGFiZXQuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGFuIGFscGhhYmV0IGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoY29uc3QgY2hhciBjKQoreworCXJldHVybiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6Jyk7Cit9CisKKy8qKgorICogdG9tb3lvX21ha2VfYnl0ZSAtIE1ha2UgYnl0ZSB2YWx1ZSBmcm9tIHRocmVlIG9jdGFsIGNoYXJhY3RlcnMuCisgKgorICogQGMxOiBUaGUgZmlyc3QgY2hhcmFjdGVyLgorICogQGMyOiBUaGUgc2Vjb25kIGNoYXJhY3Rlci4KKyAqIEBjMzogVGhlIHRoaXJkIGNoYXJhY3Rlci4KKyAqCisgKiBSZXR1cm5zIGJ5dGUgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggdG9tb3lvX21ha2VfYnl0ZShjb25zdCB1OCBjMSwgY29uc3QgdTggYzIsIGNvbnN0IHU4IGMzKQoreworCXJldHVybiAoKGMxIC0gJzAnKSA8PCA2KSArICgoYzIgLSAnMCcpIDw8IDMpICsgKGMzIC0gJzAnKTsKK30KKworLyoqCisgKiB0b21veW9fc3RyX3N0YXJ0cyAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4ga2V5d29yZC4KKyAqCisgKiBAc3JjOiAgUG9pbnRlciB0byBwb2ludGVyIHRvIHRoZSBzdHJpbmcuCisgKiBAZmluZDogUG9pbnRlciB0byB0aGUga2V5d29yZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQHNyYyBzdGFydHMgd2l0aCBAZmluZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBAc3JjIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgQGZpbmQKKyAqIGlmIEBzcmMgc3RhcnRzIHdpdGggQGZpbmQuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19zdHJfc3RhcnRzKGNoYXIgKipzcmMsIGNvbnN0IGNoYXIgKmZpbmQpCit7CisJY29uc3QgaW50IGxlbiA9IHN0cmxlbihmaW5kKTsKKwljaGFyICp0bXAgPSAqc3JjOworCisJaWYgKHN0cm5jbXAodG1wLCBmaW5kLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJdG1wICs9IGxlbjsKKwkqc3JjID0gdG1wOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19ub3JtYWxpemVfbGluZSAtIEZvcm1hdCBzdHJpbmcuCisgKgorICogQGJ1ZmZlcjogVGhlIGxpbmUgdG8gbm9ybWFsaXplLgorICoKKyAqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFyZSByZW1vdmVkLgorICogTXVsdGlwbGUgd2hpdGVzcGFjZXMgYXJlIHBhY2tlZCBpbnRvIHNpbmdsZSBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHRvbW95b19ub3JtYWxpemVfbGluZSh1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciAqc3AgPSBidWZmZXI7CisJdW5zaWduZWQgY2hhciAqZHAgPSBidWZmZXI7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAodG9tb3lvX2lzX2ludmFsaWQoKnNwKSkKKwkJc3ArKzsKKwl3aGlsZSAoKnNwKSB7CisJCWlmICghZmlyc3QpCisJCQkqZHArKyA9ICcgJzsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJd2hpbGUgKHRvbW95b19pc192YWxpZCgqc3ApKQorCQkJKmRwKysgPSAqc3ArKzsKKwkJd2hpbGUgKHRvbW95b19pc19pbnZhbGlkKCpzcCkpCisJCQlzcCsrOworCX0KKwkqZHAgPSAnXDAnOworfQorCisvKioKKyAqIHRvbW95b19pc19jb3JyZWN0X3BhdGggLSBWYWxpZGF0ZSBhIHBhdGhuYW1lLgorICogQGZpbGVuYW1lOiAgICAgVGhlIHBhdGhuYW1lIHRvIGNoZWNrLgorICogQHN0YXJ0X3R5cGU6ICAgU2hvdWxkIHRoZSBwYXRobmFtZSBzdGFydCB3aXRoICcvJz8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAcGF0dGVybl90eXBlOiBDYW4gdGhlIHBhdGhuYW1lIGNvbnRhaW4gYSB3aWxkY2FyZD8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAZW5kX3R5cGU6ICAgICBTaG91bGQgdGhlIHBhdGhuYW1lIGVuZCB3aXRoICcvJz8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAZnVuY3Rpb246ICAgICBUaGUgbmFtZSBvZiBmdW5jdGlvbiBjYWxsaW5nIG1lLgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgczggc3RhcnRfdHlwZSwKKwkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCWJvb2wgY29udGFpbnNfcGF0dGVybiA9IGZhbHNlOworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBjaGFyIGQ7CisJdW5zaWduZWQgY2hhciBlOworCWNvbnN0IGNoYXIgKm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZW5hbWU7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlnb3RvIG91dDsKKwljID0gKmZpbGVuYW1lOworCWlmIChzdGFydF90eXBlID09IDEpIHsgLyogTXVzdCBzdGFydCB3aXRoICcvJyAqLworCQlpZiAoYyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHN0YXJ0X3R5cGUgPT0gLTEpIHsgLyogTXVzdCBub3Qgc3RhcnQgd2l0aCAnLycgKi8KKwkJaWYgKGMgPT0gJy8nKQorCQkJZ290byBvdXQ7CisJfQorCWlmIChjKQorCQljID0gKihmaWxlbmFtZSArIHN0cmxlbihmaWxlbmFtZSkgLSAxKTsKKwlpZiAoZW5kX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGVuZCB3aXRoICcvJyAqLworCQlpZiAoYyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGVuZF90eXBlID09IC0xKSB7IC8qIE11c3Qgbm90IGVuZCB3aXRoICcvJyAqLworCQlpZiAoYyA9PSAnLycpCisJCQlnb3RvIG91dDsKKwl9CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJc3dpdGNoICgoYyA9ICpmaWxlbmFtZSsrKSkgeworCQkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnJCc6ICAgLyogIlwkIiAqLworCQkJY2FzZSAnKyc6ICAgLyogIlwrIiAqLworCQkJY2FzZSAnPyc6ICAgLyogIlw/IiAqLworCQkJY2FzZSAnKic6ICAgLyogIlwqIiAqLworCQkJY2FzZSAnQCc6ICAgLyogIlxAIiAqLworCQkJY2FzZSAneCc6ICAgLyogIlx4IiAqLworCQkJY2FzZSAnWCc6ICAgLyogIlxYIiAqLworCQkJY2FzZSAnYSc6ICAgLyogIlxhIiAqLworCQkJY2FzZSAnQSc6ICAgLyogIlxBIiAqLworCQkJY2FzZSAnLSc6ICAgLyogIlwtIiAqLworCQkJCWlmIChwYXR0ZXJuX3R5cGUgPT0gLTEpCisJCQkJCWJyZWFrOyAvKiBNdXN0IG5vdCBjb250YWluIHBhdHRlcm4gKi8KKwkJCQljb250YWluc19wYXR0ZXJuID0gdHJ1ZTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLworCQkJY2FzZSAnMSc6CisJCQljYXNlICcyJzoKKwkJCWNhc2UgJzMnOgorCQkJCWQgPSAqZmlsZW5hbWUrKzsKKwkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQorCQkJCQlicmVhazsKKwkJCQllID0gKmZpbGVuYW1lKys7CisJCQkJaWYgKGUgPCAnMCcgfHwgZSA+ICc3JykKKwkJCQkJYnJlYWs7CisJCQkJYyA9IHRvbW95b19tYWtlX2J5dGUoYywgZCwgZSk7CisJCQkJaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKQorCQkJCQljb250aW51ZTsgLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLworCQkJfQorCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWlmIChwYXR0ZXJuX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGNvbnRhaW4gcGF0dGVybiAqLworCQlpZiAoIWNvbnRhaW5zX3BhdHRlcm4pCisJCQlnb3RvIG91dDsKKwl9CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBwYXRobmFtZSAnJXMnXG4iLCBmdW5jdGlvbiwKKwkgICAgICAgb3JpZ2luYWxfZmlsZW5hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9faXNfY29ycmVjdF9kb21haW4gLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBkb21haW5uYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KKyAqIEBkb21haW5uYW1lOiAgIFRoZSBkb21haW5uYW1lIHRvIGNoZWNrLgorICogQGZ1bmN0aW9uOiAgICAgVGhlIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGluZyBtZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgY2hhciBkOworCXVuc2lnbmVkIGNoYXIgZTsKKwljb25zdCBjaGFyICpvcmdfZG9tYWlubmFtZSA9IGRvbWFpbm5hbWU7CisKKwlpZiAoIWRvbWFpbm5hbWUgfHwgc3RybmNtcChkb21haW5uYW1lLCBUT01PWU9fUk9PVF9OQU1FLAorCQkJCSAgIFRPTU9ZT19ST09UX05BTUVfTEVOKSkKKwkJZ290byBvdXQ7CisJZG9tYWlubmFtZSArPSBUT01PWU9fUk9PVF9OQU1FX0xFTjsKKwlpZiAoISpkb21haW5uYW1lKQorCQlyZXR1cm4gdHJ1ZTsKKwlkbyB7CisJCWlmICgqZG9tYWlubmFtZSsrICE9ICcgJykKKwkJCWdvdG8gb3V0OworCQlpZiAoKmRvbWFpbm5hbWUrKyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwkJd2hpbGUgKChjID0gKmRvbWFpbm5hbWUpICE9ICdcMCcgJiYgYyAhPSAnICcpIHsKKwkJCWRvbWFpbm5hbWUrKzsKKwkJCWlmIChjID09ICdcXCcpIHsKKwkJCQljID0gKmRvbWFpbm5hbWUrKzsKKwkJCQlzd2l0Y2ggKChjKSkgeworCQkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KKwkJCQkJY29udGludWU7CisJCQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCQkJY2FzZSAnMSc6CisJCQkJY2FzZSAnMic6CisJCQkJY2FzZSAnMyc6CisJCQkJCWQgPSAqZG9tYWlubmFtZSsrOworCQkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQorCQkJCQkJYnJlYWs7CisJCQkJCWUgPSAqZG9tYWlubmFtZSsrOworCQkJCQlpZiAoZSA8ICcwJyB8fCBlID4gJzcnKQorCQkJCQkJYnJlYWs7CisJCQkJCWMgPSB0b21veW9fbWFrZV9ieXRlKGMsIGQsIGUpOworCQkJCQlpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpCisJCQkJCQkvKiBwYXR0ZXJuIGlzIG5vdCBcMDAwICovCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UgaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKSB7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9IHdoaWxlICgqZG9tYWlubmFtZSk7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBkb21haW5uYW1lICclcydcbiIsIGZ1bmN0aW9uLAorCSAgICAgICBvcmdfZG9tYWlubmFtZSk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19pc19kb21haW5fZGVmIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4KKyAqCisgKiBAYnVmZmVyOiBUaGUgdG9rZW4gdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBidWZmZXIgcG9zc2libHkgYmUgYSBkb21haW5uYW1lLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXJldHVybiAhc3RybmNtcChidWZmZXIsIFRPTU9ZT19ST09UX05BTUUsIFRPTU9ZT19ST09UX05BTUVfTEVOKTsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9kb21haW4gLSBGaW5kIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgZG9tYWlubmFtZSB0byBmaW5kLgorICoKKyAqIENhbGxlciBtdXN0IGNhbGwgZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IG9yCisgKiBkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgJiYKKwkJICAgICF0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKKwkJCXJldHVybiBkb21haW47CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19wYXRoX2RlcHRoIC0gRXZhbHVhdGUgdGhlIG51bWJlciBvZiAnLycgaW4gYSBzdHJpbmcuCisgKgorICogQHBhdGhuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgcGF0aCBkZXB0aCBvZiB0aGUgc3RyaW5nLgorICoKKyAqIEkgc2NvcmUgMiBmb3IgZWFjaCBvZiB0aGUgJy8nIGluIHRoZSBAcGF0aG5hbWUKKyAqIGFuZCBzY29yZSAxIGlmIHRoZSBAcGF0aG5hbWUgZW5kcyB3aXRoICcvJy4KKyAqLworc3RhdGljIGludCB0b21veW9fcGF0aF9kZXB0aChjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgaSA9IDA7CisKKwlpZiAocGF0aG5hbWUpIHsKKwkJY29uc3QgY2hhciAqZXAgPSBwYXRobmFtZSArIHN0cmxlbihwYXRobmFtZSk7CisJCWlmIChwYXRobmFtZSA8IGVwLS0pIHsKKwkJCWlmICgqZXAgIT0gJy8nKQorCQkJCWkrKzsKKwkJCXdoaWxlIChwYXRobmFtZSA8PSBlcCkKKwkJCQlpZiAoKmVwLS0gPT0gJy8nKQorCQkJCQlpICs9IDI7CisJCX0KKwl9CisJcmV0dXJuIGk7Cit9CisKKy8qKgorICogdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoIC0gRXZhbHVhdGUgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIGEgdG9rZW4uCisgKgorICogQGZpbGVuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIEBmaWxlbmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY29uc3RfcGFydF9sZW5ndGgoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciBjOworCWludCBsZW4gPSAwOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgIT0gJ1xcJykgeworCQkJbGVuKys7CisJCQljb250aW51ZTsKKwkJfQorCQljID0gKmZpbGVuYW1lKys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQlsZW4gKz0gMjsKKwkJCWNvbnRpbnVlOworCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWMgPSAqZmlsZW5hbWUrKzsKKwkJCWlmIChjIDwgJzAnIHx8IGMgPiAnNycpCisJCQkJYnJlYWs7CisJCQljID0gKmZpbGVuYW1lKys7CisJCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJCWJyZWFrOworCQkJbGVuICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fZmlsbF9wYXRoX2luZm8gLSBGaWxsIGluICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgbWVtYmVycy4KKyAqCisgKiBAcHRyOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgdG8gZmlsbCBpbi4KKyAqCisgKiBUaGUgY2FsbGVyIHNldHMgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIi0+bmFtZS4KKyAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cikKK3sKKwljb25zdCBjaGFyICpuYW1lID0gcHRyLT5uYW1lOworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlwdHItPnRvdGFsX2xlbiA9IGxlbjsKKwlwdHItPmNvbnN0X2xlbiA9IHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aChuYW1lKTsKKwlwdHItPmlzX2RpciA9IGxlbiAmJiAobmFtZVtsZW4gLSAxXSA9PSAnLycpOworCXB0ci0+aXNfcGF0dGVybmVkID0gKHB0ci0+Y29uc3RfbGVuIDwgbGVuKTsKKwlwdHItPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBsZW4pOworCXB0ci0+ZGVwdGggPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKTsKK30KKworLyoqCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yIC0gUGF0dGVybiBtYXRjaGluZyB3aXRob3V0ICcvJyBjaGFyYWN0ZXIKKyAqIGFuZCAiXC0iIHBhdHRlcm4uCisgKgorICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfZW5kLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQoreworCXdoaWxlIChmaWxlbmFtZSA8IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuIDwgcGF0dGVybl9lbmQpIHsKKwkJY2hhciBjOworCQlpZiAoKnBhdHRlcm4gIT0gJ1xcJykgeworCQkJaWYgKCpmaWxlbmFtZSsrICE9ICpwYXR0ZXJuKyspCisJCQkJcmV0dXJuIGZhbHNlOworCQkJY29udGludWU7CisJCX0KKwkJYyA9ICpmaWxlbmFtZTsKKwkJcGF0dGVybisrOworCQlzd2l0Y2ggKCpwYXR0ZXJuKSB7CisJCQlpbnQgaTsKKwkJCWludCBqOworCQljYXNlICc/JzoKKwkJCWlmIChjID09ICcvJykgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7CisJCQkJaWYgKGZpbGVuYW1lWzFdID09ICdcXCcpCisJCQkJCWZpbGVuYW1lKys7CisJCQkJZWxzZSBpZiAodG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKSkKKwkJCQkJZmlsZW5hbWUgKz0gMzsKKwkJCQllbHNlCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdcXCc6CisJCQlpZiAoYyAhPSAnXFwnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmICgqKytmaWxlbmFtZSAhPSAnXFwnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWlmICghaXNkaWdpdChjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAoIWlzeGRpZ2l0KGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCWlmICghdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJzAnOgorCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQkJaWYgKGMgPT0gJ1xcJyAmJiB0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIDEpCisJCQkgICAgJiYgc3RybmNtcChmaWxlbmFtZSArIDEsIHBhdHRlcm4sIDMpID09IDApIHsKKwkJCQlmaWxlbmFtZSArPSAzOworCQkJCXBhdHRlcm4gKz0gMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCisJCWNhc2UgJyonOgorCQljYXNlICdAJzoKKwkJCWZvciAoaSA9IDA7IGkgPD0gZmlsZW5hbWVfZW5kIC0gZmlsZW5hbWU7IGkrKykgeworCQkJCWlmICh0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKAorCQkJCQkJICAgIGZpbGVuYW1lICsgaSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgIHBhdHRlcm4gKyAxLCBwYXR0ZXJuX2VuZCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWMgPSBmaWxlbmFtZVtpXTsKKwkJCQlpZiAoYyA9PSAnLicgJiYgKnBhdHRlcm4gPT0gJ0AnKQorCQkJCQlicmVhazsKKwkJCQlpZiAoYyAhPSAnXFwnKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZmlsZW5hbWVbaSArIDFdID09ICdcXCcpCisJCQkJCWkrKzsKKwkJCQllbHNlIGlmICh0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIGkgKyAxKSkKKwkJCQkJaSArPSAzOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7IC8qIEJhZCBwYXR0ZXJuLiAqLworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZC4gKi8KKwkJZGVmYXVsdDoKKwkJCWogPSAwOworCQkJYyA9ICpwYXR0ZXJuOworCQkJaWYgKGMgPT0gJyQnKSB7CisJCQkJd2hpbGUgKGlzZGlnaXQoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ1gnKSB7CisJCQkJd2hpbGUgKGlzeGRpZ2l0KGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfSBlbHNlIGlmIChjID09ICdBJykgeworCQkJCXdoaWxlICh0b21veW9faXNfYWxwaGFiZXRfY2hhcihmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0KKwkJCWZvciAoaSA9IDE7IGkgPD0gajsgaSsrKSB7CisJCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoCisJCQkJCQkgICAgZmlsZW5hbWUgKyBpLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgICAgcGF0dGVybiArIDEsIHBhdHRlcm5fZW5kKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkIG9yIGJhZCBwYXR0ZXJuLiAqLworCQl9CisJCWZpbGVuYW1lKys7CisJCXBhdHRlcm4rKzsKKwl9CisJd2hpbGUgKCpwYXR0ZXJuID09ICdcXCcgJiYKKwkgICAgICAgKCoocGF0dGVybiArIDEpID09ICcqJyB8fCAqKHBhdHRlcm4gKyAxKSA9PSAnQCcpKQorCQlwYXR0ZXJuICs9IDI7CisJcmV0dXJuIGZpbGVuYW1lID09IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuID09IHBhdHRlcm5fZW5kOworfQorCisvKioKKyAqIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybiAtIFBhdHRlcm4gbWF0Y2hpbmcgd2l0aG91dCB3aXRob3V0ICcvJyBjaGFyYWN0ZXIuCisgKgorICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4oY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybl9lbmQpCit7CisJY29uc3QgY2hhciAqcGF0dGVybl9zdGFydCA9IHBhdHRlcm47CisJYm9vbCBmaXJzdCA9IHRydWU7CisJYm9vbCByZXN1bHQ7CisKKwl3aGlsZSAocGF0dGVybiA8IHBhdHRlcm5fZW5kIC0gMSkgeworCQkvKiBTcGxpdCBhdCAiXC0iIHBhdHRlcm4uICovCisJCWlmICgqcGF0dGVybisrICE9ICdcXCcgfHwgKnBhdHRlcm4rKyAhPSAnLScpCisJCQljb250aW51ZTsKKwkJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihmaWxlbmFtZSwKKwkJCQkJCQkgZmlsZW5hbWVfZW5kLAorCQkJCQkJCSBwYXR0ZXJuX3N0YXJ0LAorCQkJCQkJCSBwYXR0ZXJuIC0gMik7CisJCWlmIChmaXJzdCkKKwkJCXJlc3VsdCA9ICFyZXN1bHQ7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gZmFsc2U7CisJCWZpcnN0ID0gZmFsc2U7CisJCXBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuOworCX0KKwlyZXN1bHQgPSB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGZpbGVuYW1lLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgcGF0dGVybl9zdGFydCwgcGF0dGVybl9lbmQpOworCXJldHVybiBmaXJzdCA/IHJlc3VsdCA6ICFyZXN1bHQ7Cit9CisKKy8qKgorICogdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICBUaGUgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBtYXRjaGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLgorICogICBcXCAgICAgXCBpdHNlbGYuCisgKiAgIFxvb28gICBPY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhIGJ5dGUuCisgKiAgIFwqICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDAgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgorICogICBcQCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAwIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJyBvciAnLicuCisgKiAgIFw/ICAgICAxIGJ5dGUgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgorICogICBcJCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGRlY2ltYWwgZGlnaXQuCisgKiAgIFwrICAgICAxIGRlY2ltYWwgZGlnaXQuCisgKiAgIFxYICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgaGV4YWRlY2ltYWwgZGlnaXQuCisgKiAgIFx4ICAgICAxIGhleGFkZWNpbWFsIGRpZ2l0LgorICogICBcQSAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqICAgXGEgICAgIDEgYWxwaGFiZXQgY2hhcmFjdGVyLgorICogICBcLSAgICAgU3VidHJhY3Rpb24gb3BlcmF0b3IuCisgKi8KK2Jvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4pCit7CisJLyoKKwkgIGlmICghZmlsZW5hbWUgfHwgIXBhdHRlcm4pCisJICByZXR1cm4gZmFsc2U7CisJKi8KKwljb25zdCBjaGFyICpmID0gZmlsZW5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqcCA9IHBhdHRlcm4tPm5hbWU7CisJY29uc3QgaW50IGxlbiA9IHBhdHRlcm4tPmNvbnN0X2xlbjsKKworCS8qIElmIEBwYXR0ZXJuIGRvZXNuJ3QgY29udGFpbiBwYXR0ZXJuLCBJIGNhbiB1c2Ugc3RyY21wKCkuICovCisJaWYgKCFwYXR0ZXJuLT5pc19wYXR0ZXJuZWQpCisJCXJldHVybiAhdG9tb3lvX3BhdGhjbXAoZmlsZW5hbWUsIHBhdHRlcm4pOworCS8qIERvbnQgY29tcGFyZSBpZiB0aGUgbnVtYmVyIG9mICcvJyBkaWZmZXJzLiAqLworCWlmIChmaWxlbmFtZS0+ZGVwdGggIT0gcGF0dGVybi0+ZGVwdGgpCisJCXJldHVybiBmYWxzZTsKKwkvKiBDb21wYXJlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IHBhdHRlcm5zLiAqLworCWlmIChzdHJuY21wKGYsIHAsIGxlbikpCisJCXJldHVybiBmYWxzZTsKKwlmICs9IGxlbjsKKwlwICs9IGxlbjsKKwkvKiBNYWluIGxvb3AuIENvbXBhcmUgZWFjaCBkaXJlY3RvcnkgY29tcG9uZW50LiAqLworCXdoaWxlICgqZiAmJiAqcCkgeworCQljb25zdCBjaGFyICpmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOworCQljb25zdCBjaGFyICpwX2RlbGltaXRlciA9IHN0cmNocihwLCAnLycpOworCQlpZiAoIWZfZGVsaW1pdGVyKQorCQkJZl9kZWxpbWl0ZXIgPSBmICsgc3RybGVuKGYpOworCQlpZiAoIXBfZGVsaW1pdGVyKQorCQkJcF9kZWxpbWl0ZXIgPSBwICsgc3RybGVuKHApOworCQlpZiAoIXRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybihmLCBmX2RlbGltaXRlciwKKwkJCQkJCSAgICBwLCBwX2RlbGltaXRlcikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWYgPSBmX2RlbGltaXRlcjsKKwkJaWYgKCpmKQorCQkJZisrOworCQlwID0gcF9kZWxpbWl0ZXI7CisJCWlmICgqcCkKKwkJCXArKzsKKwl9CisJLyogSWdub3JlIHRyYWlsaW5nICJcKiIgYW5kICJcQCIgaW4gQHBhdHRlcm4uICovCisJd2hpbGUgKCpwID09ICdcXCcgJiYKKwkgICAgICAgKCoocCArIDEpID09ICcqJyB8fCAqKHAgKyAxKSA9PSAnQCcpKQorCQlwICs9IDI7CisJcmV0dXJuICEqZiAmJiAhKnA7Cit9CisKKy8qKgorICogdG9tb3lvX2lvX3ByaW50ZiAtIFRyYW5zYWN0aW9uYWwgcHJpbnRmKCkgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIiBzdHJ1Y3R1cmUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBmbXQ6ICBUaGUgcHJpbnRmKCkncyBmb3JtYXQgc3RyaW5nLCBmb2xsb3dlZCBieSBwYXJhbWV0ZXJzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBvdXRwdXQgd2FzIHdyaXR0ZW4sIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgc25wcmludGYoKSB3aWxsIHRydW5jYXRlLCBidXQgdG9tb3lvX2lvX3ByaW50ZigpIHdvbid0LgorICovCitib29sIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgbGVuOworCWludCBwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCWludCBzaXplID0gaGVhZC0+cmVhZGJ1Zl9zaXplIC0gcG9zOworCisJaWYgKHNpemUgPD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKGhlYWQtPnJlYWRfYnVmICsgcG9zLCBzaXplLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAocG9zICsgbGVuID49IGhlYWQtPnJlYWRidWZfc2l6ZSkKKwkJcmV0dXJuIGZhbHNlOworCWhlYWQtPnJlYWRfYXZhaWwgKz0gbGVuOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZXhlIC0gR2V0IHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2Vzcy4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b21veW9fcmVhbHBhdGgoKSBvZiBjdXJyZW50IHByb2Nlc3Mgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19nZXRfZXhlKHZvaWQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwljb25zdCBjaGFyICpjcCA9IE5VTEw7CisKKwlpZiAoIW1tKQorCQlyZXR1cm4gTlVMTDsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYgdm1hLT52bV9maWxlKSB7CisJCQljcCA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJnZtYS0+dm1fZmlsZS0+Zl9wYXRoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIGNwOworfQorCisvKioKKyAqIHRvbW95b19nZXRfbXNnIC0gR2V0IHdhcm5pbmcgbWVzc2FnZS4KKyAqCisgKiBAaXNfZW5mb3JjZTogSXMgaXQgZW5mb3JjaW5nIG1vZGU/CisgKgorICogUmV0dXJucyAiRVJST1IiIG9yICJXQVJOSU5HIi4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKQoreworCWlmIChpc19lbmZvcmNlKQorCQlyZXR1cm4gIkVSUk9SIjsKKwllbHNlCisJCXJldHVybiAiV0FSTklORyI7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZsYWdzIC0gQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaW5kZXg6ICBUaGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBtb2RlLgorICoKKyAqIFRPTU9ZTyBjaGVja3Mgb25seSBwcm9jZXNzIGNvbnRleHQuCisgKiBUaGlzIGNvZGUgZGlzYWJsZXMgVE9NT1lPJ3MgZW5mb3JjZW1lbnQgaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KKyAqIGludGVycnVwdCBjb250ZXh0LgorICovCit1bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQljb25zdCB1OCBpbmRleCkKK3sKKwljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOworCisJaWYgKFdBUk5fT04oaW5faW50ZXJydXB0KCkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX3BvbGljeV9sb2FkZWQgJiYgaW5kZXggPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgKKyNpZiBUT01PWU9fTUFYX1BST0ZJTEVTICE9IDI1NgorCQkmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUworI2VuZGlmCisJCSYmIHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSA/CisJCXRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXS0+dmFsdWVbaW5kZXhdIDogMDsKK30KKworLyoqCisgKiB0b21veW9fdmVyYm9zZV9tb2RlIC0gQ2hlY2sgd2hldGhlciBUT01PWU8gaXMgdmVyYm9zZSBtb2RlLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIHNob3VsZCBiZSBwcmludGVkIHRvCisgKiBjb25zb2xlLgorICovCitib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQoreworCXJldHVybiB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fVkVSQk9TRSkgIT0gMDsKK30KKworLyoqCisgKiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rIC0gQ2hlY2sgZm9yIGRvbWFpbidzIHF1b3RhLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZG9tYWluIGlzIG5vdCBleGNlZWRlZCBxdW90YSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbikKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKworCWlmICghZG9tYWluKQorCQlyZXR1cm4gdHJ1ZTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJY29udGludWU7CisJCXN3aXRjaCAodG9tb3lvX2FjbF90eXBlMihwdHIpKSB7CisJCQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDE7CisJCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDI7CisJCQl1MTYgcGVybTsKKwkJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCQlhY2wxID0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCQkgICAgaGVhZCk7CisJCQlwZXJtID0gYWNsMS0+cGVybTsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmCisJCQkgICAgKCgxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMKSB8CisJCQkgICAgICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCkpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0NSRUFURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1VOTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LRElSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUk1ESVJfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS1NPQ0tfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtDSEFSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0w6CisJCQlhY2wyID0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCQkgICAgaGVhZCk7CisJCQlwZXJtID0gYWNsMi0+cGVybTsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJaWYgKGNvdW50IDwgdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlkpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIWRvbWFpbi0+cXVvdGFfd2FybmVkKSB7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gdHJ1ZTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLVdBUk5JTkc6ICIKKwkJICAgICAgICJEb21haW4gJyVzJyBoYXMgc28gbWFueSBBQ0xzIHRvIGhvbGQuICIKKwkJICAgICAgICJTdG9wcGVkIGxlYXJuaW5nIG1vZGUuXG4iLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19wcm9maWxlIC0gQ3JlYXRlIGEgbmV3IHByb2ZpbGUuCisgKgorICogQHByb2ZpbGU6IFByb2ZpbGUgbnVtYmVyIHRvIGNyZWF0ZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcHJvZmlsZSIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZShjb25zdCB1bnNpZ25lZAorCQkJCQkJCQlpbnQgcHJvZmlsZSkKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHRyID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChwcm9maWxlID49IFRPTU9ZT19NQVhfUFJPRklMRVMpCisJCXJldHVybiBOVUxMOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlwdHIgPSB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV07CisJaWYgKHB0cikKKwkJZ290byBvazsKKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKnB0cikpOworCWlmICghcHRyKQorCQlnb3RvIG9rOworCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykKKwkJcHRyLT52YWx1ZVtpXSA9IHRvbW95b19jb250cm9sX2FycmF5W2ldLmN1cnJlbnRfdmFsdWU7CisJbWIoKTsgLyogQXZvaWQgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbi4gKi8KKwl0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gPSBwdHI7Cisgb2s6CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHI7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3Byb2ZpbGUgLSBXcml0ZSB0byBwcm9maWxlIHRhYmxlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwljaGFyICpjcDsKKwlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGU7CisJdW5zaWduZWQgbG9uZyBudW07CisKKwljcCA9IHN0cmNocihkYXRhLCAnLScpOworCWlmIChjcCkKKwkJKmNwID0gJ1wwJzsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY3ApCisJCWRhdGEgPSBjcCArIDE7CisJcHJvZmlsZSA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZShudW0pOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3AgPSBzdHJjaHIoZGF0YSwgJz0nKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3AgPSAnXDAnOworCWlmICghc3RyY21wKGRhdGEsICJDT01NRU5UIikpIHsKKwkJcHJvZmlsZS0+Y29tbWVudCA9IHRvbW95b19zYXZlX25hbWUoY3AgKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19jb250cm9sX2FycmF5W2ldLmtleXdvcmQpKQorCQkJY29udGludWU7CisJCWlmIChzc2NhbmYoY3AgKyAxLCAiJXUiLCAmdmFsdWUpICE9IDEpIHsKKwkJCWludCBqOworCQkJY29uc3QgY2hhciAqKm1vZGVzOworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIFRPTU9ZT19WRVJCT1NFOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OworCQkJCWJyZWFrOworCQkJfQorCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJCWlmIChzdHJjbXAoY3AgKyAxLCBtb2Rlc1tqXSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXZhbHVlID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChqID09IDQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSBpZiAodmFsdWUgPiB0b21veW9fY29udHJvbF9hcnJheVtpXS5tYXhfdmFsdWUpIHsKKwkJCXZhbHVlID0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ubWF4X3ZhbHVlOworCQl9CisJCXByb2ZpbGUtPnZhbHVlW2ldID0gdmFsdWU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9wcm9maWxlIC0gUmVhZCBmcm9tIHByb2ZpbGUgdGFibGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHRvdGFsID0gVE9NT1lPX01BWF9DT05UUk9MX0lOREVYICsgMTsKKwlpbnQgc3RlcDsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZm9yIChzdGVwID0gaGVhZC0+cmVhZF9zdGVwOyBzdGVwIDwgVE9NT1lPX01BWF9QUk9GSUxFUyAqIHRvdGFsOworCSAgICAgc3RlcCsrKSB7CisJCWNvbnN0IHU4IGluZGV4ID0gc3RlcCAvIHRvdGFsOworCQl1OCB0eXBlID0gc3RlcCAlIHRvdGFsOworCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGUKKwkJCT0gdG9tb3lvX3Byb2ZpbGVfcHRyW2luZGV4XTsKKwkJaGVhZC0+cmVhZF9zdGVwID0gc3RlcDsKKwkJaWYgKCFwcm9maWxlKQorCQkJY29udGludWU7CisJCWlmICghdHlwZSkgeyAvKiBQcmludCBwcm9maWxlJyBjb21tZW50IHRhZy4gKi8KKwkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtQ09NTUVOVD0lc1xuIiwKKwkJCQkJICAgICAgaW5kZXgsIHByb2ZpbGUtPmNvbW1lbnQgPworCQkJCQkgICAgICBwcm9maWxlLT5jb21tZW50LT5uYW1lIDogIiIpKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJdHlwZS0tOworCQlpZiAodHlwZSA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCkgeworCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbHVlID0gcHJvZmlsZS0+dmFsdWVbdHlwZV07CisJCQljb25zdCBjaGFyICoqbW9kZXMgPSBOVUxMOworCQkJY29uc3QgY2hhciAqa2V5d29yZAorCQkJCT0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbdHlwZV0ua2V5d29yZDsKKwkJCXN3aXRjaCAodG9tb3lvX2NvbnRyb2xfYXJyYXlbdHlwZV0ubWF4X3ZhbHVlKSB7CisJCQljYXNlIDM6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChtb2RlcykgeworCQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXM9JXNcbiIsIGluZGV4LAorCQkJCQkJICAgICAga2V5d29yZCwgbW9kZXNbdmFsdWVdKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXM9JXVcbiIsIGluZGV4LAorCQkJCQkJICAgICAga2V5d29yZCwgdmFsdWUpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc3RlcCA9PSBUT01PWU9fTUFYX1BST0ZJTEVTICogdG90YWwpCisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworLyogU3RydWN0dXJlIGZvciBwb2xpY3kgbWFuYWdlci4gKi8KK3N0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKiBBIHBhdGggdG8gcHJvZ3JhbSBvciBhIGRvbWFpbm5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm1hbmFnZXI7CisJYm9vbCBpc19kb21haW47ICAvKiBUcnVlIGlmIG1hbmFnZXIgaXMgYSBkb21haW5uYW1lLiAqLworCWJvb2wgaXNfZGVsZXRlZDsgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIGRlbGV0ZWQuICovCit9OworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkgLSBBZGQgYSBtYW5hZ2VyIGVudHJ5LgorICoKKyAqIEBtYW5hZ2VyOiAgIFRoZSBwYXRoIHRvIG1hbmFnZXIgb3IgdGhlIGRvbWFpbm5hbW1lLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5KGNvbnN0IGNoYXIgKm1hbmFnZXIsCisJCQkJICAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX21hbmFnZXI7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2RvbWFpbiA9IGZhbHNlOworCisJaWYgKHRvbW95b19pc19kb21haW5fZGVmKG1hbmFnZXIpKSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKG1hbmFnZXIsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc19kb21haW4gPSB0cnVlOworCX0gZWxzZSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChtYW5hZ2VyLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlzYXZlZF9tYW5hZ2VyID0gdG9tb3lvX3NhdmVfbmFtZShtYW5hZ2VyKTsKKwlpZiAoIXNhdmVkX21hbmFnZXIpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPm1hbmFnZXIgIT0gc2F2ZWRfbWFuYWdlcikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5tYW5hZ2VyID0gc2F2ZWRfbWFuYWdlcjsKKwluZXdfZW50cnktPmlzX2RvbWFpbiA9IGlzX2RvbWFpbjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5IC0gV3JpdGUgbWFuYWdlciBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWJvb2wgaXNfZGVsZXRlID0gdG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSk7CisKKwlpZiAoIXN0cmNtcChkYXRhLCAibWFuYWdlX2J5X25vbl9yb290IikpIHsKKwkJdG9tb3lvX21hbmFnZV9ieV9ub25fcm9vdCA9ICFpc19kZWxldGU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfbWFuYWdlcl9wb2xpY3kgLSBSZWFkIG1hbmFnZXIgcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSwKKwkJCQkgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1xuIiwgcHRyLT5tYW5hZ2VyLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19pc19wb2xpY3lfbWFuYWdlciAtIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBhIHBvbGljeSBtYW5hZ2VyLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHBlcm1pdHRlZCB0byBtb2RpZnkgcG9saWN5CisgKiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19wb2xpY3lfbWFuYWdlcih2b2lkKQoreworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwljb25zdCBjaGFyICpleGU7CisJY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSA9IHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIXRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3QgJiYgKHRhc2stPmNyZWQtPnVpZCB8fCB0YXNrLT5jcmVkLT5ldWlkKSkKKwkJcmV0dXJuIGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiBwdHItPmlzX2RvbWFpbgorCQkgICAgJiYgIXRvbW95b19wYXRoY21wKGRvbWFpbm5hbWUsIHB0ci0+bWFuYWdlcikpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWlmIChmb3VuZCkKKwkJcmV0dXJuIHRydWU7CisJZXhlID0gdG9tb3lvX2dldF9leGUoKTsKKwlpZiAoIWV4ZSkKKwkJcmV0dXJuIGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiAhcHRyLT5pc19kb21haW4KKwkJICAgICYmICFzdHJjbXAoZXhlLCBwdHItPm1hbmFnZXItPm5hbWUpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlpZiAoIWZvdW5kKSB7IC8qIFJlZHVjZSBlcnJvciBtZXNzYWdlcy4gKi8KKwkJc3RhdGljIHBpZF90IGxhc3RfcGlkOworCQljb25zdCBwaWRfdCBwaWQgPSBjdXJyZW50LT5waWQ7CisJCWlmIChsYXN0X3BpZCAhPSBwaWQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICggJXMgKSBpcyBub3QgcGVybWl0dGVkIHRvICIKKwkJCSAgICAgICAidXBkYXRlIHBvbGljaWVzLlxuIiwgZG9tYWlubmFtZS0+bmFtZSwgZXhlKTsKKwkJCWxhc3RfcGlkID0gcGlkOworCQl9CisJfQorCXRvbW95b19mcmVlKGV4ZSk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b19pc19zZWxlY3Rfb25lIC0gUGFyc2Ugc2VsZWN0IGNvbW1hbmQuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBkYXRhOiBTdHJpbmcgdG8gcGFyc2UuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX3NlbGVjdF9vbmUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJIGNvbnN0IGNoYXIgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHBpZDsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCisJaWYgKHNzY2FuZihkYXRhLCAicGlkPSV1IiwgJnBpZCkgPT0gMSkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKHApCisJCQlkb21haW4gPSB0b21veW9fcmVhbF9kb21haW4ocCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCX0gZWxzZSBpZiAoIXN0cm5jbXAoZGF0YSwgImRvbWFpbj0iLCA3KSkgeworCQlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYoZGF0YSArIDcpKSB7CisJCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhICsgNyk7CisJCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CisJLyogQWNjZXNzaW5nIHJlYWRfYnVmIGlzIHNhZmUgYmVjYXVzZSBoZWFkLT5pb19zZW0gaXMgaGVsZC4gKi8KKwlpZiAoIWhlYWQtPnJlYWRfYnVmKQorCQlyZXR1cm4gdHJ1ZTsgLyogRG8gbm90aGluZyBpZiBvcGVuKE9fV1JPTkxZKS4gKi8KKwloZWFkLT5yZWFkX2F2YWlsID0gMDsKKwl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIHNlbGVjdCAlc1xuIiwgZGF0YSk7CisJaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluID0gdHJ1ZTsKKwloZWFkLT5yZWFkX2VvZiA9ICFkb21haW47CisJaWYgKGRvbWFpbikgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkOworCQloZWFkLT5yZWFkX3ZhcjEgPSBOVUxMOworCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCQlpZiAoZCA9PSBkb21haW4pCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjEgPSAmZC0+bGlzdDsKKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCWhlYWQtPnJlYWRfYml0ID0gMDsKKwkJaGVhZC0+cmVhZF9zdGVwID0gMDsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiMgVGhpcyBpcyBhIGRlbGV0ZWQgZG9tYWluLlxuIik7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fcG9saWN5IC0gV3JpdGUgZG9tYWluIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBoZWFkLT53cml0ZV92YXIxOworCWJvb2wgaXNfZGVsZXRlID0gZmFsc2U7CisJYm9vbCBpc19zZWxlY3QgPSBmYWxzZTsKKwlib29sIGlzX3VuZGVsZXRlID0gZmFsc2U7CisJdW5zaWduZWQgaW50IHByb2ZpbGU7CisKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSkpCisJCWlzX2RlbGV0ZSA9IHRydWU7CisJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1NFTEVDVCkpCisJCWlzX3NlbGVjdCA9IHRydWU7CisJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1VOREVMRVRFKSkKKwkJaXNfdW5kZWxldGUgPSB0cnVlOworCWlmIChpc19zZWxlY3QgJiYgdG9tb3lvX2lzX3NlbGVjdF9vbmUoaGVhZCwgZGF0YSkpCisJCXJldHVybiAwOworCS8qIERvbid0IGFsbG93IHVwZGF0aW5nIHBvbGljaWVzIGJ5IG5vbiBtYW5hZ2VyIHByb2dyYW1zLiAqLworCWlmICghdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEpKSB7CisJCWRvbWFpbiA9IE5VTEw7CisJCWlmIChpc19kZWxldGUpCisJCQl0b21veW9fZGVsZXRlX2RvbWFpbihkYXRhKTsKKwkJZWxzZSBpZiAoaXNfc2VsZWN0KSB7CisJCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhKTsKKwkJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJfSBlbHNlIGlmIChpc191bmRlbGV0ZSkKKwkJCWRvbWFpbiA9IHRvbW95b191bmRlbGV0ZV9kb21haW4oZGF0YSk7CisJCWVsc2UKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGRhdGEsIDApOworCQloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNzY2FuZihkYXRhLCBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAiJXUiLCAmcHJvZmlsZSkgPT0gMQorCSAgICAmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUykgeworCQlpZiAodG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdIHx8ICF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCWRvbWFpbi0+cHJvZmlsZSA9ICh1OCkgcHJvZmlsZTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGRhdGEsIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkpIHsKKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIGlzX2RlbGV0ZSwKKwkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGRhdGEsIGRvbWFpbiwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsIC0gUHJpbnQgYSBzaW5nbGUgcGF0aCBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKgorCQkJCQkgcHRyKQoreworCWludCBwb3M7CisJdTggYml0OworCWNvbnN0IGNoYXIgKmF0bWFyayA9ICIiOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IHUxNiBwZXJtID0gcHRyLT5wZXJtOworCisJZmlsZW5hbWUgPSBwdHItPmZpbGVuYW1lLT5uYW1lOworCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OOworCSAgICAgYml0KyspIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCisJCQljb250aW51ZTsKKwkJLyogUHJpbnQgInJlYWQvd3JpdGUiIGluc3RlYWQgb2YgInJlYWQiIGFuZCAid3JpdGUiLiAqLworCQlpZiAoKGJpdCA9PSBUT01PWU9fVFlQRV9SRUFEX0FDTCB8fAorCQkgICAgIGJpdCA9PSBUT01PWU9fVFlQRV9XUklURV9BQ0wpCisJCSAgICAmJiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkpCisJCQljb250aW51ZTsKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoYml0KTsKKwkJcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJhbGxvd18lcyAlcyVzXG4iLCBtc2csCisJCQkJICAgICAgYXRtYXJrLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9iaXQgPSAwOworCXJldHVybiB0cnVlOworIG91dDoKKwloZWFkLT5yZWFkX2JpdCA9IGJpdDsKKwloZWFkLT5yZWFkX2F2YWlsID0gcG9zOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsIC0gUHJpbnQgYSBkb3VibGUgcGF0aCBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKgorCQkJCQkgcHRyKQoreworCWludCBwb3M7CisJY29uc3QgY2hhciAqYXRtYXJrMSA9ICIiOworCWNvbnN0IGNoYXIgKmF0bWFyazIgPSAiIjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTE7CisJY29uc3QgY2hhciAqZmlsZW5hbWUyOworCWNvbnN0IHU4IHBlcm0gPSBwdHItPnBlcm07CisJdTggYml0OworCisJZmlsZW5hbWUxID0gcHRyLT5maWxlbmFtZTEtPm5hbWU7CisJZmlsZW5hbWUyID0gcHRyLT5maWxlbmFtZTItPm5hbWU7CisJZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT047CisJICAgICBiaXQrKykgeworCQljb25zdCBjaGFyICptc2c7CisJCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSB0b21veW9fZHAya2V5d29yZChiaXQpOworCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICVzJXMgJXMlc1xuIiwgbXNnLAorCQkJCSAgICAgIGF0bWFyazEsIGZpbGVuYW1lMSwgYXRtYXJrMiwgZmlsZW5hbWUyKSkKKwkJCWdvdG8gb3V0OworCX0KKwloZWFkLT5yZWFkX2JpdCA9IDA7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCWhlYWQtPnJlYWRfYml0ID0gYml0OworCWhlYWQtPnJlYWRfYXZhaWwgPSBwb3M7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19wcmludF9lbnRyeSAtIFByaW50IGFuIEFDTCBlbnRyeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQHB0cjogIFBvaW50ZXIgdG8gYW4gQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9lbnRyeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCit7CisJY29uc3QgdTggYWNsX3R5cGUgPSB0b21veW9fYWNsX3R5cGUyKHB0cik7CisKKwlpZiAoYWNsX3R5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCXJldHVybiB0cnVlOworCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wKKwkJCT0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgICAgICBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwl9CisJaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbAorCQkJPSBjb250YWluZXJfb2YocHRyLAorCQkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgICAgIGhlYWQpOworCQlyZXR1cm4gdG9tb3lvX3ByaW50X2RvdWJsZV9wYXRoX2FjbChoZWFkLCBhY2wpOworCX0KKwlCVUcoKTsgLyogVGhpcyBtdXN0IG5vdCBoYXBwZW4uICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3kgLSBSZWFkIGRvbWFpbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKmFwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAwKQorCQloZWFkLT5yZWFkX3N0ZXAgPSAxOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKGRwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWNvbnN0IGNoYXIgKnF1b3RhX2V4Y2VlZGVkID0gIiI7CisJCWNvbnN0IGNoYXIgKnRyYW5zaXRpb25fZmFpbGVkID0gIiI7CisJCWNvbnN0IGNoYXIgKmlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCA9ICIiOworCQlkb21haW4gPSBsaXN0X2VudHJ5KGRwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8sIGxpc3QpOworCQlpZiAoaGVhZC0+cmVhZF9zdGVwICE9IDEpCisJCQlnb3RvIGFjbF9sb29wOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkICYmICFoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCisJCQljb250aW51ZTsKKwkJLyogUHJpbnQgZG9tYWlubmFtZSBhbmQgZmxhZ3MuICovCisJCWlmIChkb21haW4tPnF1b3RhX3dhcm5lZCkKKwkJCXF1b3RhX2V4Y2VlZGVkID0gInF1b3RhX2V4Y2VlZGVkXG4iOworCQlpZiAoZG9tYWluLT5mbGFncyAmIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQpCisJCQl0cmFuc2l0aW9uX2ZhaWxlZCA9ICJ0cmFuc2l0aW9uX2ZhaWxlZFxuIjsKKwkJaWYgKGRvbWFpbi0+ZmxhZ3MgJgorCQkgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpCisJCQlpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQKKwkJCQk9IFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAiXG4iOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwKKwkJCQkgICAgICAiJXNcbiIgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgIiV1XG4iCisJCQkJICAgICAgIiVzJXMlc1xuIiwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lLAorCQkJCSAgICAgIGRvbWFpbi0+cHJvZmlsZSwgcXVvdGFfZXhjZWVkZWQsCisJCQkJICAgICAgdHJhbnNpdGlvbl9mYWlsZWQsCisJCQkJICAgICAgaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJaGVhZC0+cmVhZF9zdGVwID0gMjsKK2FjbF9sb29wOgorCQlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDMpCisJCQlnb3RvIHRhaWxfbWFyazsKKwkJLyogUHJpbnQgQUNMIGVudHJpZXMgaW4gdGhlIGRvbWFpbi4gKi8KKwkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfY29va2llKGFwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCQkgICAgICAmZG9tYWluLT5hY2xfaW5mb19saXN0KSB7CisJCQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIKKwkJCQk9IGxpc3RfZW50cnkoYXBvcywgc3RydWN0IHRvbW95b19hY2xfaW5mbywKKwkJCQkJICAgICAgbGlzdCk7CisJCQlpZiAoIXRvbW95b19wcmludF9lbnRyeShoZWFkLCBwdHIpKSB7CisJCQkJZG9uZSA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkJaWYgKCFkb25lKQorCQkJYnJlYWs7CisJCWhlYWQtPnJlYWRfc3RlcCA9IDM7Cit0YWlsX21hcms6CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiXG4iKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJaGVhZC0+cmVhZF9zdGVwID0gMTsKKwkJaWYgKGhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbikKKwkJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZSAtIEFzc2lnbiBwcm9maWxlIGZvciBzcGVjaWZpZWQgZG9tYWluLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBkb2luZworICoKKyAqICAgICAoIGVjaG8gInNlbGVjdCAiICRkb21haW5uYW1lOyBlY2hvICJ1c2VfcHJvZmlsZSAiICRwcm9maWxlICkgfAorICogICAgIC91c3IvbGliL2Njcy9sb2FkcG9saWN5IC1kCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJY2hhciAqY3AgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJdW5zaWduZWQgbG9uZyBwcm9maWxlOworCisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNwID0gJ1wwJzsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oY3AgKyAxKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmcHJvZmlsZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkb21haW4gJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMKKwkgICAgJiYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSB8fCAhdG9tb3lvX3BvbGljeV9sb2FkZWQpKQorCQlkb21haW4tPnByb2ZpbGUgPSAodTgpIHByb2ZpbGU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGUgLSBSZWFkIG9ubHkgZG9tYWlubmFtZSBhbmQgcHJvZmlsZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgbGlzdCBvZiBwcm9maWxlIG51bWJlciBhbmQgZG9tYWlubmFtZSBwYWlycy4KKyAqCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcKKyAqCisgKiAgICAgZ3JlcCAtQSAxICdePGtlcm5lbD4nIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5IHwKKyAqICAgICBhd2sgJyB7IGlmICggZG9tYWlubmFtZSA9PSAiIiApIHsgaWYgKCAkMSA9PSAiPGtlcm5lbD4iICkKKyAqICAgICBkb21haW5uYW1lID0gJDA7IH0gZWxzZSBpZiAoICQxID09ICJ1c2VfcHJvZmlsZSIgKSB7CisgKiAgICAgcHJpbnQgJDIgIiAiIGRvbWFpbm5hbWU7IGRvbWFpbm5hbWUgPSAiIjsgfSB9IDsgJworICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWRvbWFpbiA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvLCBsaXN0KTsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1ICVzXG4iLCBkb21haW4tPnByb2ZpbGUsCisJCQkJICAgICAgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcGlkOiBTcGVjaWZ5IFBJRCB0byBvYnRhaW4gZG9tYWlubmFtZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfcGlkKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgcGlkOworCS8qIE5vIGVycm9yIGNoZWNrLiAqLworCXN0cmljdF9zdHJ0b3VsKGhlYWQtPndyaXRlX2J1ZiwgMTAsICZwaWQpOworCWhlYWQtPnJlYWRfc3RlcCA9IChpbnQpIHBpZDsKKwloZWFkLT5yZWFkX2VvZiA9IGZhbHNlOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3BpZCAtIEdldCBkb21haW5uYW1lIG9mIHRoZSBzcGVjaWZpZWQgUElELgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0aGUgZG9tYWlubmFtZSB3aGljaCB0aGUgc3BlY2lmaWVkIFBJRCBpcyBpbiBvbiBzdWNjZXNzLAorICogZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyAqIFRoZSBQSUQgaXMgc3BlY2lmaWVkIGJ5IHRvbW95b193cml0ZV9waWQoKSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBvYnRhaW4KKyAqIHVzaW5nIHJlYWQoKS93cml0ZSgpIGludGVyZmFjZSByYXRoZXIgdGhhbiBzeXNjdGwoKSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfcGlkKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmIChoZWFkLT5yZWFkX2F2YWlsID09IDAgJiYgIWhlYWQtPnJlYWRfZW9mKSB7CisJCWNvbnN0IGludCBwaWQgPSBoZWFkLT5yZWFkX3N0ZXA7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOworCQlpZiAocCkKKwkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJCWlmIChkb21haW4pCisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlZCAldSAlcyIsIHBpZCwgZG9tYWluLT5wcm9maWxlLAorCQkJCQkgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeSAtIFdyaXRlIGV4Y2VwdGlvbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJYm9vbCBpc19kZWxldGUgPSB0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVMRVRFKTsKKworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGRhdGEsIGZhbHNlLAorCQkJCQkJCSBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGRhdGEsIHRydWUsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShkYXRhLCBmYWxzZSwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfTk9fSU5JVElBTElaRV9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koZGF0YSwgdHJ1ZSwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxJQVMpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCkpCisJCXJldHVybiB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeSAtIFJlYWQgZXhjZXB0aW9uIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJc3dpdGNoIChoZWFkLT5yZWFkX3N0ZXApIHsKKwkJY2FzZSAwOgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDE7CisJCWNhc2UgMToKKwkJCWlmICghdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMjsKKwkJY2FzZSAyOgorCQkJaWYgKCF0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMzsKKwkJY2FzZSAzOgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDQ7CisJCWNhc2UgNDoKKwkJCWlmICghdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA1OworCQljYXNlIDU6CisJCQlpZiAoIXRvbW95b19yZWFkX2FsaWFzX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA2OworCQljYXNlIDY6CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNzsKKwkJY2FzZSA3OgorCQkJaWYgKCF0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gODsKKwkJY2FzZSA4OgorCQkJaWYgKCF0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA5OworCQljYXNlIDk6CisJCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBwYXRoIHRvIHBvbGljeSBsb2FkZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbG9hZGVyID0gIi9zYmluL3RvbW95by1pbml0IjsKKworLyoqCisgKiB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMgLSBDaGVjayB3aGV0aGVyIC9zYmluL3RvbW95by1pbml0IGV4aXN0cy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cyh2b2lkKQoreworCS8qCisJICogRG9uJ3QgYWN0aXZhdGUgTUFDIGlmIHRoZSBwb2xpY3kgbG9hZGVyIGRvZXNuJ3QgZXhpc3QuCisJICogSWYgdGhlIGluaXRyZCBpbmNsdWRlcyAvc2Jpbi9pbml0IGJ1dCByZWFsLXJvb3QtZGV2IGhhcyBub3QKKwkgKiBtb3VudGVkIG9uIC8geWV0LCBhY3RpdmF0aW5nIE1BQyB3aWxsIGJsb2NrIHRoZSBzeXN0ZW0gc2luY2UKKwkgKiBwb2xpY2llcyBhcmUgbm90IGxvYWRlZCB5ZXQuCisJICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeXRpbWUuCisJICovCisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRoX2xvb2t1cCh0b21veW9fbG9hZGVyLCBMT09LVVBfRk9MTE9XLCAmbmQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vdCBhY3RpdmF0aW5nIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBub3cgIgorCQkgICAgICAgInNpbmNlICVzIGRvZXNuJ3QgZXhpc3QuXG4iLCB0b21veW9fbG9hZGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlwYXRoX3B1dCgmbmQucGF0aCk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX2xvYWRfcG9saWN5IC0gUnVuIGV4dGVybmFsIHBvbGljeSBsb2FkZXIgdG8gbG9hZCBwb2xpY3kuCisgKgorICogQGZpbGVuYW1lOiBUaGUgcHJvZ3JhbSBhYm91dCB0byBzdGFydC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIEBmaWxlbmFtZSBpcyAvc2Jpbi9pbml0ICwgYW5kIGlmIHNvCisgKiBpbnZva2UgL3NiaW4vdG9tb3lvLWluaXQgYW5kIHdhaXQgZm9yIHRoZSB0ZXJtaW5hdGlvbiBvZiAvc2Jpbi90b21veW8taW5pdAorICogYW5kIHRoZW4gY29udGludWVzIGludm9jYXRpb24gb2YgL3NiaW4vaW5pdC4KKyAqIC9zYmluL3RvbW95by1pbml0IHJlYWRzIHBvbGljeSBmaWxlcyBpbiAvZXRjL3RvbW95by8gZGlyZWN0b3J5IGFuZAorICogd3JpdGVzIHRvIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlcy4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgKmFyZ3ZbMl07CisJY2hhciAqZW52cFszXTsKKworCWlmICh0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcmV0dXJuOworCS8qCisJICogQ2hlY2sgZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCBvciAvc2Jpbi90b21veW8tc3RhcnQuCisJICogL3NiaW4vdG9tb3lvLXN0YXJ0IGlzIGEgZHVtbXkgZmlsZW5hbWUgaW4gY2FzZSB3aGVyZSAvc2Jpbi9pbml0IGNhbid0CisJICogYmUgcGFzc2VkLgorCSAqIFlvdSBjYW4gY3JlYXRlIC9zYmluL3RvbW95by1zdGFydCBieQorCSAqICJsbiAtcyAvYmluL3RydWUgL3NiaW4vdG9tb3lvLXN0YXJ0Ii4KKwkgKi8KKwlpZiAoc3RyY21wKGZpbGVuYW1lLCAiL3NiaW4vaW5pdCIpICYmCisJICAgIHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL3RvbW95by1zdGFydCIpKQorCQlyZXR1cm47CisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMoKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsbGluZyAlcyB0byBsb2FkIHBvbGljeS4gUGxlYXNlIHdhaXQuXG4iLAorCSAgICAgICB0b21veW9fbG9hZGVyKTsKKwlhcmd2WzBdID0gKGNoYXIgKikgdG9tb3lvX2xvYWRlcjsKKwlhcmd2WzFdID0gTlVMTDsKKwllbnZwWzBdID0gIkhPTUU9LyI7CisJZW52cFsxXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKKwllbnZwWzJdID0gTlVMTDsKKwljYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgYWN0aXZhdGVkLlxuIik7CisJdG9tb3lvX3BvbGljeV9sb2FkZWQgPSB0cnVlOworCXsgLyogQ2hlY2sgYWxsIHByb2ZpbGVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBkb21haW5zIGFyZSBkZWZpbmVkLiAqLworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJY29uc3QgdTggcHJvZmlsZSA9IGRvbWFpbi0+cHJvZmlsZTsKKwkJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0pCisJCQkJY29udGludWU7CisJCQlwYW5pYygiUHJvZmlsZSAldSAodXNlZCBieSAnJXMnKSBub3QgZGVmaW5lZC5cbiIsCisJCQkgICAgICBwcm9maWxlLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwl9Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfdmVyc2lvbjogR2V0IHZlcnNpb24uCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfdmVyc2lvbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIjIuMi4wLXByZSIpOworCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3NlbGZfZG9tYWluIC0gR2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyBkb21haW5uYW1lLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9zZWxmX2RvbWFpbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCS8qCisJCSAqIHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZSAhPSBOVUxMCisJCSAqIGJlY2F1c2UgZXZlcnkgcHJvY2VzcyBiZWxvbmdzIHRvIGEgZG9tYWluIGFuZAorCQkgKiB0aGUgZG9tYWluJ3MgbmFtZSBjYW5ub3QgYmUgTlVMTC4KKwkJICovCisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiVzIiwgdG9tb3lvX2RvbWFpbigpLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fb3Blbl9jb250cm9sIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAdHlwZTogVHlwZSBvZiBpbnRlcmZhY2UuCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIEFzc29jaWF0ZXMgcG9saWN5IGhhbmRsZXIgYW5kIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gdG9tb3lvX2FsbG9jKHNpemVvZigqaGVhZCkpOworCisJaWYgKCFoZWFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9pbml0KCZoZWFkLT5pb19zZW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVE9NT1lPX0RPTUFJTlBPTElDWToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3k7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX0VYQ0VQVElPTlBPTElDWToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3k7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1NFTEZET01BSU46CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9zZWxmX2RvbWFpbiAqLworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfc2VsZl9kb21haW47CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX0RPTUFJTl9TVEFUVVM6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8uZG9tYWluX3N0YXR1cyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19QUk9DRVNTX1NUQVRVUzoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLy5wcm9jZXNzX3N0YXR1cyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9waWQ7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9waWQ7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1ZFUlNJT046CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by92ZXJzaW9uICovCisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF92ZXJzaW9uOworCQloZWFkLT5yZWFkYnVmX3NpemUgPSAxMjg7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX01FTUlORk86CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9tZW1pbmZvICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyOworCQloZWFkLT5yZWFkYnVmX3NpemUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1BST0ZJTEU6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9wcm9maWxlICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX3Byb2ZpbGU7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9wcm9maWxlOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19NQU5BR0VSOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWFuYWdlciAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5OworCQlicmVhazsKKwl9CisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhbGxvY2F0ZSByZWFkX2J1ZiBzaW5jZSBpdCBpcyBub3Qgb3BlbmVkCisJCSAqIGZvciByZWFkaW5nLgorCQkgKi8KKwkJaGVhZC0+cmVhZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKCFoZWFkLT5yZWFkYnVmX3NpemUpCisJCQloZWFkLT5yZWFkYnVmX3NpemUgPSA0MDk2ICogMjsKKwkJaGVhZC0+cmVhZF9idWYgPSB0b21veW9fYWxsb2MoaGVhZC0+cmVhZGJ1Zl9zaXplKTsKKwkJaWYgKCFoZWFkLT5yZWFkX2J1ZikgeworCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhbGxvY2F0ZSB3cml0ZV9idWYgc2luY2UgaXQgaXMgbm90IG9wZW5lZAorCQkgKiBmb3Igd3JpdGluZy4KKwkJICovCisJCWhlYWQtPndyaXRlID0gTlVMTDsKKwl9IGVsc2UgaWYgKGhlYWQtPndyaXRlKSB7CisJCWhlYWQtPndyaXRlYnVmX3NpemUgPSA0MDk2ICogMjsKKwkJaGVhZC0+d3JpdGVfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPndyaXRlYnVmX3NpemUpOworCQlpZiAoIWhlYWQtPndyaXRlX2J1ZikgeworCQkJdG9tb3lvX2ZyZWUoaGVhZC0+cmVhZF9idWYpOworCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBoZWFkOworCS8qCisJICogQ2FsbCB0aGUgaGFuZGxlciBub3cgaWYgdGhlIGZpbGUgaXMKKwkgKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4KKwkgKiBzbyB0aGF0IHRoZSB1c2VyIGNhbiB1c2UKKwkgKiBjYXQgPCAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4iCisJICogdG8ga25vdyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKwkgKi8KKwlpZiAodHlwZSA9PSBUT01PWU9fU0VMRkRPTUFJTikKKwkJdG9tb3lvX3JlYWRfY29udHJvbChmaWxlLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9jb250cm9sIC0gcmVhZCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogICAgICAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZmZlcjogICAgIFBvaW5lciB0byBidWZmZXIgdG8gd3JpdGUgdG8uCisgKiBAYnVmZmVyX2xlbjogU2l6ZSBvZiBAYnVmZmVyLgorICoKKyAqIFJldHVybnMgYnl0ZXMgcmVhZCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbikKK3sKKwlpbnQgbGVuID0gMDsKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpjcDsKKworCWlmICghaGVhZC0+cmVhZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKiBDYWxsIHRoZSBwb2xpY3kgaGFuZGxlci4gKi8KKwlsZW4gPSBoZWFkLT5yZWFkKGhlYWQpOworCWlmIChsZW4gPCAwKQorCQlnb3RvIG91dDsKKwkvKiBXcml0ZSB0byBidWZmZXIuICovCisJbGVuID0gaGVhZC0+cmVhZF9hdmFpbDsKKwlpZiAobGVuID4gYnVmZmVyX2xlbikKKwkJbGVuID0gYnVmZmVyX2xlbjsKKwlpZiAoIWxlbikKKwkJZ290byBvdXQ7CisJLyogaGVhZC0+cmVhZF9idWYgY2hhbmdlcyBieSBzb21lIGZ1bmN0aW9ucy4gKi8KKwljcCA9IGhlYWQtPnJlYWRfYnVmOworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBjcCwgbGVuKSkgeworCQlsZW4gPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9hdmFpbCAtPSBsZW47CisJbWVtbW92ZShjcCwgY3AgKyBsZW4sIGhlYWQtPnJlYWRfYXZhaWwpOworIG91dDoKKwltdXRleF91bmxvY2soJmhlYWQtPmlvX3NlbSk7CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfY29udHJvbCAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmZmVyOiAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIEBidWZmZXJfbGVuIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQljb25zdCBpbnQgYnVmZmVyX2xlbikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyb3IgPSBidWZmZXJfbGVuOworCWludCBhdmFpbF9sZW4gPSBidWZmZXJfbGVuOworCWNoYXIgKmNwMCA9IGhlYWQtPndyaXRlX2J1ZjsKKworCWlmICghaGVhZC0+d3JpdGUpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGJ1ZmZlcl9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KKwlpZiAoaGVhZC0+d3JpdGUgIT0gdG9tb3lvX3dyaXRlX3BpZCAmJgorCSAgICBoZWFkLT53cml0ZSAhPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeSAmJgorCSAgICAhdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKiBSZWFkIGEgbGluZSBhbmQgZGlzcGF0Y2ggaXQgdG8gdGhlIHBvbGljeSBoYW5kbGVyLiAqLworCXdoaWxlIChhdmFpbF9sZW4gPiAwKSB7CisJCWNoYXIgYzsKKwkJaWYgKGhlYWQtPndyaXRlX2F2YWlsID49IGhlYWQtPndyaXRlYnVmX3NpemUgLSAxKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChnZXRfdXNlcihjLCBidWZmZXIpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlidWZmZXIrKzsKKwkJYXZhaWxfbGVuLS07CisJCWNwMFtoZWFkLT53cml0ZV9hdmFpbCsrXSA9IGM7CisJCWlmIChjICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJY3AwW2hlYWQtPndyaXRlX2F2YWlsIC0gMV0gPSAnXDAnOworCQloZWFkLT53cml0ZV9hdmFpbCA9IDA7CisJCXRvbW95b19ub3JtYWxpemVfbGluZShjcDApOworCQloZWFkLT53cml0ZShoZWFkKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoZWFkLT5pb19zZW0pOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2xvc2VfY29udHJvbCAtIGNsb3NlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmVsZWFzZXMgbWVtb3J5IGFuZCByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2Nsb3NlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBSZWxlYXNlIG1lbW9yeSB1c2VkIGZvciBwb2xpY3kgSS9PLiAqLworCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKKwloZWFkLT5yZWFkX2J1ZiA9IE5VTEw7CisJdG9tb3lvX2ZyZWUoaGVhZC0+d3JpdGVfYnVmKTsKKwloZWFkLT53cml0ZV9idWYgPSBOVUxMOworCXRvbW95b19mcmVlKGhlYWQpOworCWhlYWQgPSBOVUxMOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3IgQUNMIGVudHJ5LgorICoKKyAqIEBhY2xfdHlwZTogIFR5cGUgb2YgQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgQUNMIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlzd2l0Y2ggKGFjbF90eXBlKSB7CisJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQpOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChsZW4pOworCWlmICghcHRyKQorCQlyZXR1cm4gTlVMTDsKKwlwdHItPnR5cGUgPSBhY2xfdHlwZTsKKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIHRvbW95b19vcGVuIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNvbnN0IGludCBrZXkgPSAoKHU4ICopIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSkKKwkJLSAoKHU4ICopIE5VTEwpOworCXJldHVybiB0b21veW9fb3Blbl9jb250cm9sKGtleSwgZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlbGVhc2UgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0b21veW9fY2xvc2VfY29udHJvbChmaWxlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZCAtIHJlYWQoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmOiAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIEBidWYuCisgKiBAcHBvczogIFVudXNlZC4KKyAqCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgbG9mZl90ICpwcG9zKQoreworCXJldHVybiB0b21veW9fcmVhZF9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKioKKyAqIHRvbW95b193cml0ZSAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgorICogQHBwb3M6ICBVbnVzZWQuCisgKgorICogUmV0dXJucyBAY291bnQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHRvbW95b193cml0ZV9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKiBPcGVyYXRpb25zIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvbW95b19vcGVyYXRpb25zID0geworCS5vcGVuICAgID0gdG9tb3lvX29wZW4sCisJLnJlbGVhc2UgPSB0b21veW9fcmVsZWFzZSwKKwkucmVhZCAgICA9IHRvbW95b19yZWFkLAorCS53cml0ZSAgID0gdG9tb3lvX3dyaXRlLAorfTsKKworLyoqCisgKiB0b21veW9fY3JlYXRlX2VudHJ5IC0gQ3JlYXRlIGludGVyZmFjZSBmaWxlcyB1bmRlciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGRpcmVjdG9yeS4KKyAqCisgKiBAbmFtZTogICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAbW9kZTogICBUaGUgcGVybWlzc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAcGFyZW50OiBUaGUgcGFyZW50IGRpcmVjdG9yeS4KKyAqIEBrZXk6ICAgIFR5cGUgb2YgaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHRvbW95b19jcmVhdGVfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgbW9kZV90IG1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgdTgga2V5KQoreworCXNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCAoKHU4ICopIE5VTEwpICsga2V5LAorCQkJICAgICAgICZ0b21veW9fb3BlcmF0aW9ucyk7Cit9CisKKy8qKgorICogdG9tb3lvX2luaXRlcmZhY2VfaW5pdCAtIEluaXRpYWxpemUgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0b21veW9faW5pdGVyZmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqdG9tb3lvX2RpcjsKKworCS8qIERvbid0IGNyZWF0ZSBzZWN1cml0eWZzIGVudHJpZXMgdW5sZXNzIHJlZ2lzdGVyZWQuICovCisJaWYgKGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXJldHVybiAwOworCisJdG9tb3lvX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigidG9tb3lvIiwgTlVMTCk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZG9tYWluX3BvbGljeSIsICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0RPTUFJTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZXhjZXB0aW9uX3BvbGljeSIsIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgic2VsZl9kb21haW4iLCAgICAgIDA0MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1NFTEZET01BSU4pOworCXRvbW95b19jcmVhdGVfZW50cnkoIi5kb21haW5fc3RhdHVzIiwgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19ET01BSU5fU1RBVFVTKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCIucHJvY2Vzc19zdGF0dXMiLCAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPQ0VTU19TVEFUVVMpOworCXRvbW95b19jcmVhdGVfZW50cnkoIm1lbWluZm8iLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19NRU1JTkZPKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJwcm9maWxlIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPRklMRSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgibWFuYWdlciIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX01BTkFHRVIpOworCXRvbW95b19jcmVhdGVfZW50cnkoInZlcnNpb24iLCAgICAgICAgICAwNDAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwodG9tb3lvX2luaXRlcmZhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmggYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhNzZkNgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtMCwwICsxLDM1OSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9jb21tb24uaAorICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IGRlbnRyeTsKK3N0cnVjdCB2ZnNtb3VudDsKKworLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgaG9sZGluZyBwYXRobmFtZXMuICovCitzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyIHsKKwljaGFyIGJ1ZmZlcls0MDk2XTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBhIHRva2VuLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGhhc2g7ICAgICAgICAgIC8qID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgc3RybGVuKG5hbWUpKSAqLworCXUxNiB0b3RhbF9sZW47ICAgICAvKiA9IHN0cmxlbihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MTYgY29uc3RfbGVuOyAgICAgLyogPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSkgICAgICovCisJYm9vbCBpc19kaXI7ICAgICAgIC8qID0gdG9tb3lvX3N0cmVuZHN3aXRoKG5hbWUsICIvIikgICAgICAqLworCWJvb2wgaXNfcGF0dGVybmVkOyAvKiA9IHRvbW95b19wYXRoX2NvbnRhaW5zX3BhdHRlcm4obmFtZSkgKi8KKwl1MTYgZGVwdGg7ICAgICAgICAgLyogPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKSAgICAgICAgICAgICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgorICoKKyAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KKyAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKKyAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgcmVxdWVzdGVkIHBhdGhuYW1lLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIHsKKwkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gdG9tb3lvX2ZyZWUoKS4gKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBoZWFkOworCWNoYXIgYmFycmllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCisJY2hhciBib2R5W1RPTU9ZT19NQVhfUEFUSE5BTUVfTEVOXTsKKwljaGFyIGJhcnJpZXIyWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworfTsKKworLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIGhvbGRpbmcgQUNMIGVudHJpZXMuCisgKgorICogUGFja2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyIgYWxsb3dzCisgKiAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTE2IiBhbmQKKyAqICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1OCIKKyAqIHdpdGhvdXQgZW5sYXJnaW5nIHRoZWlyIHN0cnVjdHVyZSBzaXplLgorICovCitzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyoKKwkgKiBUeXBlIG9mIHRoaXMgQUNMIGVudHJ5LgorCSAqCisJICogTVNCIGlzIGlzX2RlbGV0ZWQgZmxhZy4KKwkgKi8KKwl1OCB0eXBlOworfSBfX3BhY2tlZDsKKworLyogVGhpcyBBQ0wgZW50cnkgaXMgZGVsZXRlZC4gICAgICAgICAgICovCisjZGVmaW5lIFRPTU9ZT19BQ0xfREVMRVRFRCAgICAgICAgMHg4MAorCisvKiBTdHJ1Y3R1cmUgZm9yIGRvbWFpbiBpbmZvcm1hdGlvbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjbF9pbmZvX2xpc3Q7CisJLyogTmFtZSBvZiB0aGlzIGRvbWFpbi4gTmV2ZXIgTlVMTC4gICAgICAgICAgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwl1OCBwcm9maWxlOyAgICAgICAgLyogUHJvZmlsZSBudW1iZXIgdG8gdXNlLiAqLworCXU4IGlzX2RlbGV0ZWQ7ICAgICAvKiBEZWxldGUgZmxhZy4KKwkJCSAgICAgIDAgPSBhY3RpdmUuCisJCQkgICAgICAxID0gZGVsZXRlZCBidXQgdW5kZWxldGFibGUuCisJCQkgICAgICAyNTUgPSBkZWxldGVkIGFuZCBubyBsb25nZXIgdW5kZWxldGFibGUuICovCisJYm9vbCBxdW90YV93YXJuZWQ7IC8qIFF1b3RhIHdhcm5uaW5nIGZsYWcuICAgKi8KKwkvKiBET01BSU5fRkxBR1NfKi4gVXNlIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoKSB0byBtb2RpZnkuICovCisJdTggZmxhZ3M7Cit9OworCisvKiBQcm9maWxlIG51bWJlciBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1LiAqLworI2RlZmluZSBUT01PWU9fTUFYX1BST0ZJTEVTIDI1NgorCisvKiBJZ25vcmUgImFsbG93X3JlYWQiIGRpcmVjdGl2ZSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAxCisvKgorICogVGhpcyBkb21haW4gd2FzIHVuYWJsZSB0byBjcmVhdGUgYSBuZXcgZG9tYWluIGF0IHRvbW95b19maW5kX25leHRfZG9tYWluKCkKKyAqIGJlY2F1c2UgdGhlIG5hbWUgb2YgdGhlIGRvbWFpbiB0byBiZSBjcmVhdGVkIHdhcyB0b28gbG9uZyBvcgorICogaXQgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4KKyAqIE1vcmUgdGhhbiBvbmUgcHJvY2VzcyBjb250aW51ZWQgZXhlY3ZlKCkgd2l0aG91dCBkb21haW4gdHJhbnNpdGlvbi4KKyAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEICAgICAgICAyCisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLCAiYWxsb3dfcmVhZCIsCisgKiAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsICJhbGxvd19ybWRpciIsCisgKiAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwgImFsbG93X21rY2hhciIsCisgKiAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIgYW5kICJhbGxvd19yZXdyaXRlIiBkaXJlY3RpdmUuCisgKi8KK3N0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICovCisJdTE2IHBlcm07CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVuYW1lIiBhbmQgImFsbG93X2xpbmsiIGRpcmVjdGl2ZS4gKi8KK3N0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICovCisJdTggcGVybTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTI7Cit9OworCisvKiBLZXl3b3JkcyBmb3IgQUNMcy4gKi8KKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxJQVMgICAgICAgICAgICAgICAgICAgICAiYWxpYXMgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICAgICAgICAgICAgICAgICJhbGxvd19yZWFkICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVMRVRFICAgICAgICAgICAgICAgICAgICAiZGVsZXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICAgICAgICAgICAgICAiZGVueV9yZXdyaXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICAgICAgICAgICAgICAiZmlsZV9wYXR0ZXJuICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4gICAgICAgICAiaW5pdGlhbGl6ZV9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTiAgICAgICAgICAgICAgICJrZWVwX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VTkRFTEVURSAgICAgICAgICAgICAgICAgICJ1bmRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICAgICAgICAgICAgICAgInVzZV9wcm9maWxlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICAiaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkIgorLyogQSBkb21haW4gZGVmaW5pdGlvbiBzdGFydHMgd2l0aCA8a2VybmVsPi4gKi8KKyNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAiPGtlcm5lbD4iCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUVfTEVOICAgICAgICAgICAgICAgICAgICAgKHNpemVvZihUT01PWU9fUk9PVF9OQU1FKSAtIDEpCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKyNkZWZpbmUgVE9NT1lPX01BQ19GT1JfRklMRSAgICAgICAgICAgICAgICAgIDAgIC8qIGRvbWFpbl9wb2xpY3kuY29uZiAqLworI2RlZmluZSBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSAgICAgICAgICAgICAgMQorI2RlZmluZSBUT01PWU9fVkVSQk9TRSAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVggICAgICAgICAgICAgMworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlYWRpbmcvd3JpdGluZyBwb2xpY3kgdmlhIHNlY3VyaXR5ZnMgaW50ZXJmYWNlcy4gKi8KK3N0cnVjdCB0b21veW9faW9fYnVmZmVyIHsKKwlpbnQgKCpyZWFkKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJaW50ICgqd3JpdGUpIChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqKTsKKwkvKiBFeGNsdXNpdmUgbG9jayBmb3IgdGhpcyBzdHJ1Y3R1cmUuICAgKi8KKwlzdHJ1Y3QgbXV0ZXggaW9fc2VtOworCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgcmVhZGluZyBmcm9tLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMTsKKwkvKiBFeHRyYSB2YXJpYWJsZXMgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFkX3ZhcjI7CisJLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSB3cml0aW5nIHRvLiAgICovCisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqd3JpdGVfdmFyMTsKKwkvKiBUaGUgc3RlcCBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgKi8KKwlpbnQgcmVhZF9zdGVwOworCS8qIEJ1ZmZlciBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgICAqLworCWNoYXIgKnJlYWRfYnVmOworCS8qIEVPRiBmbGFnIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAqLworCWJvb2wgcmVhZF9lb2Y7CisJLyogUmVhZCBkb21haW4gQUNMIG9mIHNwZWNpZmllZCBQSUQ/ICAgICovCisJYm9vbCByZWFkX3NpbmdsZV9kb21haW47CisJLyogRXh0cmEgdmFyaWFibGUgZm9yIHJlYWRpbmcuICAgICAgICAgICovCisJdTggcmVhZF9iaXQ7CisJLyogQnl0ZXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLiAgICAgICAgICovCisJaW50IHJlYWRfYXZhaWw7CisJLyogU2l6ZSBvZiByZWFkIGJ1ZmZlci4gICAgICAgICAgICAgICAgICovCisJaW50IHJlYWRidWZfc2l6ZTsKKwkvKiBCdWZmZXIgZm9yIHdyaXRpbmcuICAgICAgICAgICAgICAgICAgKi8KKwljaGFyICp3cml0ZV9idWY7CisJLyogQnl0ZXMgYXZhaWxhYmxlIGZvciB3cml0aW5nLiAgICAgICAgICovCisJaW50IHdyaXRlX2F2YWlsOworCS8qIFNpemUgb2Ygd3JpdGUgYnVmZmVyLiAgICAgICAgICAgICAgICAqLworCWludCB3cml0ZWJ1Zl9zaXplOworfTsKKworLyogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWluIGhhcyB0b28gbWFueSBBQ0wgZW50cmllcyB0byBob2xkLiAqLworYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pOworLyogVHJhbnNhY3Rpb25hbCBzcHJpbnRmKCkgZm9yIHBvbGljeSBkdW1wLiAqLworYm9vbCB0b21veW9faW9fcHJpbnRmKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbm5hbWUgaXMgY29ycmVjdC4gKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbik7CisvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBpcyBjb3JyZWN0LiAqLworYm9vbCB0b21veW9faXNfY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzOCBzdGFydF90eXBlLAorCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUsCisJCQkgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworLyogQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4gKi8KK2Jvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKTsKKy8qIFJlYWQgImFsaWFzIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyoKKyAqIFJlYWQgImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeQorICogaW4gZXhjZXB0aW9uIHBvbGljeS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJmaWxlX3BhdHRlcm4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJhbGxvd19yZWFkIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiZGVueV9yZXdyaXRlIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBXcml0ZSBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIG1lc3NhZ2UgdG8gY29uc29sZT8gKi8KK2Jvb2wgdG9tb3lvX3ZlcmJvc2VfbW9kZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOworLyogQ29udmVydCBkb3VibGUgcGF0aCBvcGVyYXRpb24gdG8gb3BlcmF0aW9uIG5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fZHAya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOworLyogR2V0IHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gZG9tYWlubmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbik7CisvKiBHZXQgd2FybmluZyBtZXNzYWdlLiAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKTsKKy8qIENvbnZlcnQgc2luZ2xlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLworY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKKy8qIERlbGV0ZSBhIGRvbWFpbi4gKi8KK2ludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkYXRhKTsKKy8qIENyZWF0ZSAiYWxpYXMiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKgorICogQ3JlYXRlICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKKyAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyoKKyAqIENyZWF0ZSAiYWxsb3dfcmVhZC93cml0ZSIsICJhbGxvd19leGVjdXRlIiwgImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLAorICogImFsbG93X2NyZWF0ZSIsICJhbGxvd191bmxpbmsiLCAiYWxsb3dfbWtkaXIiLCAiYWxsb3dfcm1kaXIiLAorICogImFsbG93X21rZmlmbyIsICJhbGxvd19ta3NvY2siLCAiYWxsb3dfbWtibG9jayIsICJhbGxvd19ta2NoYXIiLAorICogImFsbG93X3RydW5jYXRlIiwgImFsbG93X3N5bWxpbmsiLCAiYWxsb3dfcmV3cml0ZSIsICJhbGxvd19yZW5hbWUiIGFuZAorICogImFsbG93X2xpbmsiIGVudHJ5IGluIGRvbWFpbiBwb2xpY3kuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImFsbG93X3JlYWQiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJmaWxlX3BhdHRlcm4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIEZpbmQgYSBkb21haW4gYnkgdGhlIGdpdmVuIG5hbWUuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisvKiBGaW5kIG9yIGNyZWF0ZSBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGNvbnN0IGNoYXIgKgorCQkJCQkJCSAgICBkb21haW5uYW1lLAorCQkJCQkJCSAgICBjb25zdCB1OCBwcm9maWxlKTsKKy8qIFVuZGVsZXRlIGEgZG9tYWluLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3VuZGVsZXRlX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy8qIENoZWNrIG1vZGUgZm9yIHNwZWNpZmllZCBmdW5jdGlvbmFsaXR5LiAqLwordW5zaWduZWQgaW50IHRvbW95b19jaGVja19mbGFncyhjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJY29uc3QgdTggaW5kZXgpOworLyogQWxsb2NhdGUgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLiAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKTsKKy8qIEZpbGwgaW4gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBtZW1iZXJzLiAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cik7CisvKiBSdW4gcG9saWN5IGxvYWRlciB3aGVuIC9zYmluL2luaXQgc3RhcnRzLiAqLwordm9pZCB0b21veW9fbG9hZF9wb2xpY3koY29uc3QgY2hhciAqZmlsZW5hbWUpOworLyogQ2hhbmdlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi0+ZmxhZ3MuICovCit2b2lkIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCBmbGFncyk7CisKKy8qIHN0cmNtcCgpIGZvciAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIHN0cnVjdHVyZS4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9fcGF0aGNtcChjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYSwKKwkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpiKQoreworCXJldHVybiBhLT5oYXNoICE9IGItPmhhc2ggfHwgc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCisvKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTEoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCXJldHVybiBwdHItPnR5cGUgJiB+VE9NT1lPX0FDTF9ERUxFVEVEOworfQorCisvKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTIoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCXJldHVybiBwdHItPnR5cGU7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX3ZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgdmFsaWQgY2hhci4KKyAqCisgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYSB2YWxpZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc192YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgPiAnICcgJiYgYyA8IDEyNzsKK30KKworLyoqCisgKiB0b21veW9faXNfaW52YWxpZCAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhbiBpbnZhbGlkIGNoYXIuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfaW52YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgJiYgKGMgPD0gJyAnIHx8IGMgPj0gMTI3KTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19kb21haW5fbGlzdDsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRvbW95b19kb21haW5fbGlzdF9sb2NrOworCisvKiBMb2NrIGZvciBkb21haW4tPmFjbF9pbmZvX2xpc3QuICovCitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSB0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jazsKKworLyogSGFzIC9zYmluL2luaXQgc3RhcnRlZD8gKi8KK2V4dGVybiBib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOworCisvKiBUaGUga2VybmVsJ3MgZG9tYWluLiAqLworZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9jb29raWUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IHdpdGggY29va2llLgorICogQHBvczogICAgICAgIHRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBjb29raWU6ICAgICB0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgY29va2llLgorICogQGhlYWQ6ICAgICAgIHRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKgorICogU2FtZSB3aXRoIGxpc3RfZm9yX2VhY2goKSBleGNlcHQgdGhhdCB0aGlzIHByaW1pdGl2ZSB1c2VzIEBjb29raWUKKyAqIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGl0ZXJhdGlvbi4KKyAqIEBjb29raWUgbXVzdCBiZSBOVUxMIHdoZW4gaXRlcmF0aW9uIHN0YXJ0cywgYW5kIEBjb29raWUgd2lsbCBiZWNvbWUKKyAqIE5VTEwgd2hlbiBpdGVyYXRpb24gZmluaXNoZXMuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBjb29raWUsIGhlYWQpICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yICgoeyBpZiAoIWNvb2tpZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICBjb29raWUgPSBoZWFkOyB9KSwgICAgICAgICAgICAgICBcCisJICAgICBwb3MgPSAoY29va2llKS0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpIHx8ICgoY29va2llKSA9IE5VTEwpOyBcCisJICAgICAoY29va2llKSA9IHBvcywgcG9zID0gcG9zLT5uZXh0KQorCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9kb21haW4uYyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisKKy8qIFZhcmlhYmxlcyBkZWZpbml0aW9ucy4qLworCisvKiBUaGUgaW5pdGlhbCBkb21haW4uICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworTElTVF9IRUFEKHRvbW95b19kb21haW5fbGlzdCk7CitERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKworLyogU3RydWN0dXJlIGZvciAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOyAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07CisJYm9vbCBpc19kZWxldGVkOworCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIi4gICovCisJLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLworCWJvb2wgaXNfbGFzdF9uYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsgICAgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLworCWJvb2wgaXNfZGVsZXRlZDsKKwlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19rZWVwX2RvbWFpbiIuICAgICAgICAqLworCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KKwlib29sIGlzX2xhc3RfbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImFsaWFzIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpvcmlnaW5hbF9uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphbGlhc2VkX25hbWU7CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyoqCisgKiB0b21veW9fc2V0X2RvbWFpbl9mbGFnIC0gU2V0IG9yIGNsZWFyIGRvbWFpbidzIGF0dHJpYnV0ZSBmbGFncy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqIEBmbGFnczogICAgIEZsYWdzIHRvIHNldCBvciBjbGVhci4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX3NldF9kb21haW5fZmxhZyhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IGZsYWdzKQoreworCS8qIFdlIG5lZWQgdG8gc2VyaWFsaXplIGJlY2F1c2UgdGhpcyBpcyBiaXRmaWVsZCBvcGVyYXRpb24uICovCisJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlzcGluX2xvY2soJmxvY2spOworCWlmICghaXNfZGVsZXRlKQorCQlkb21haW4tPmZsYWdzIHw9IGZsYWdzOworCWVsc2UKKwkJZG9tYWluLT5mbGFncyAmPSB+ZmxhZ3M7CisJc3Bpbl91bmxvY2soJmxvY2spOworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KK30KKworLyoqCisgKiB0b21veW9fZ2V0X2xhc3RfbmFtZSAtIEdldCBsYXN0IGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKgorICogUmV0dXJucyB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGRvbWFpbm5hbWUuCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKwljb25zdCBjaGFyICpjcDAgPSBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqY3AxID0gc3RycmNocihjcDAsICcgJyk7CisKKwlpZiAoY3AxKQorCQlyZXR1cm4gY3AxICsgMTsKKwlyZXR1cm4gY3AwOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4gTWF5IGJlIE5VTEwuCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBpc19ub3Q6ICAgICBUcnVlIGlmIGl0IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcHJvZ3JhbSwKKwkJCQkJCSAgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcHJvZ3JhbTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZSA9IE5VTEw7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2xhc3RfbmFtZSA9IGZhbHNlOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KKwlpZiAoZG9tYWlubmFtZSkgeworCQlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCisJCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQkJaXNfbGFzdF9uYW1lID0gdHJ1ZTsKKwkJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX3NhdmVfbmFtZShwcm9ncmFtKTsKKwlpZiAoIXNhdmVkX3Byb2dyYW0pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfbm90ICE9IGlzX25vdCB8fAorCQkgICAgcHRyLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUgfHwKKwkJICAgIHB0ci0+cHJvZ3JhbSAhPSBzYXZlZF9wcm9ncmFtKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCW5ld19lbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07CisJbmV3X2VudHJ5LT5pc19ub3QgPSBpc19ub3Q7CisJbmV3X2VudHJ5LT5pc19sYXN0X25hbWUgPSBpc19sYXN0X25hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpIHsKKwkJY29uc3QgY2hhciAqbm87CisJCWNvbnN0IGNoYXIgKmZyb20gPSAiIjsKKwkJY29uc3QgY2hhciAqZG9tYWluID0gIiI7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSwKKwkJCQkgIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCW5vID0gcHRyLT5pc19ub3QgPyAibm9fIiA6ICIiOworCQlpZiAocHRyLT5kb21haW5uYW1lKSB7CisJCQlmcm9tID0gIiBmcm9tICI7CisJCQlkb21haW4gPSBwdHItPmRvbWFpbm5hbWUtPm5hbWU7CisJCX0KKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzIiBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTgorCQkJCSAgICAgICIlcyVzJXNcbiIsIG5vLCBwdHItPnByb2dyYW0tPm5hbWUsIGZyb20sCisJCQkJICAgICAgZG9tYWluKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKworCWlmIChjcCkgeworCQkqY3AgPSAnXDAnOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY3AgKyA2LCBkYXRhLAorCQkJCQkJCSAgICAgIGlzX25vdCwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgZGF0YSwgaXNfbm90LAorCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcHJvZ3JhbSBjYXVzZXMgZG9tYWlubmFtZSByZWluaXRpYWxpemF0aW9uLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBsYXN0X25hbWU6ICBUaGUgbGFzdCBjb21wb25lbnQgb2YgQGRvbWFpbm5hbWUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGV4ZWN1dGluZyBAcHJvZ3JhbSByZWluaXRpYWxpemVzIGRvbWFpbiB0cmFuc2l0aW9uLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGRvbWFpbm5hbWUsCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbSwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGxhc3RfbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOworCWJvb2wgZmxhZyA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgeworCQkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJCWlmIChwdHItPmRvbWFpbm5hbWUgIT0gZG9tYWlubmFtZSkKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWlmICh0b21veW9fcGF0aGNtcChwdHItPmRvbWFpbm5hbWUsIGxhc3RfbmFtZSkpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmICh0b21veW9fcGF0aGNtcChwdHItPnByb2dyYW0sIHByb2dyYW0pKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmlzX25vdCkgeworCQkJZmxhZyA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJZmxhZyA9IHRydWU7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZmxhZzsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLiBNYXkgYmUgTlVMTC4KKyAqIEBpc19ub3Q6ICAgICBUcnVlIGlmIGl0IGlzICJub19rZWVwX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcHJvZ3JhbSwKKwkJCQkJICAgICBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcHJvZ3JhbSA9IE5VTEw7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWJvb2wgaXNfbGFzdF9uYW1lID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCisJICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCWlzX2xhc3RfbmFtZSA9IHRydWU7CisJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwcm9ncmFtKSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX3NhdmVfbmFtZShwcm9ncmFtKTsKKwkJaWYgKCFzYXZlZF9wcm9ncmFtKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX25vdCAhPSBpc19ub3QgfHwKKwkJICAgIHB0ci0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lIHx8CisJCSAgICBwdHItPnByb2dyYW0gIT0gc2F2ZWRfcHJvZ3JhbSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwluZXdfZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOworCW5ld19lbnRyeS0+aXNfbm90ID0gaXNfbm90OworCW5ld19lbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfbm90OiAgICBUcnVlIGlmIGl0IGlzICJub19rZWVwX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCSAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKworCWlmIChjcCkgeworCQkqY3AgPSAnXDAnOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNwICsgNiwgZGF0YSwgaXNfbm90LAorCQkJCQkJCSBpc19kZWxldGUpOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGRhdGEsIE5VTEwsIGlzX25vdCwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCQljb25zdCBjaGFyICpubzsKKwkJY29uc3QgY2hhciAqZnJvbSA9ICIiOworCQljb25zdCBjaGFyICpwcm9ncmFtID0gIiI7CisKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJbm8gPSBwdHItPmlzX25vdCA/ICJub18iIDogIiI7CisJCWlmIChwdHItPnByb2dyYW0pIHsKKwkJCWZyb20gPSAiIGZyb20gIjsKKwkJCXByb2dyYW0gPSBwdHItPnByb2dyYW0tPm5hbWU7CisJCX0KKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzIiBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTgorCQkJCSAgICAgICIlcyVzJXNcbiIsIG5vLCBwcm9ncmFtLCBmcm9tLAorCQkJCSAgICAgIHB0ci0+ZG9tYWlubmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwcm9ncmFtIGNhdXNlcyBkb21haW4gdHJhbnNpdGlvbiBzdXBwcmVzc2lvbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAbGFzdF9uYW1lOiAgVGhlIGxhc3QgY29tcG9uZW50IG9mIEBkb21haW5uYW1lLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gc3VwcmVzc2VzIGRvbWFpbiB0cmFuc2l0aW9uLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2tlZXBlcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpsYXN0X25hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJYm9vbCBmbGFnID0gZmFsc2U7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJaWYgKHB0ci0+ZG9tYWlubmFtZSAhPSBkb21haW5uYW1lKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKHRvbW95b19wYXRoY21wKHB0ci0+ZG9tYWlubmFtZSwgbGFzdF9uYW1lKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAocHRyLT5wcm9ncmFtICYmIHRvbW95b19wYXRoY21wKHB0ci0+cHJvZ3JhbSwgcHJvZ3JhbSkpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+aXNfbm90KSB7CisJCQlmbGFnID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlmbGFnID0gdHJ1ZTsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZmxhZzsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2FsaWFzX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAb3JpZ2luYWxfbmFtZTogVGhlIG9yaWdpbmFsIHByb2dyYW0ncyByZWFsIG5hbWUuCisgKiBAYWxpYXNlZF9uYW1lOiAgVGhlIHN5bWJvbGljIHByb2dyYW0ncyBzeW1ib2xpYyBsaW5rJ3MgbmFtZS4KKyAqIEBpc19kZWxldGU6ICAgICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5KGNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUsCisJCQkJICAgICBjb25zdCBjaGFyICphbGlhc2VkX25hbWUsCisJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9vcmlnaW5hbF9uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9hbGlhc2VkX25hbWU7CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChvcmlnaW5hbF9uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChhbGlhc2VkX25hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KKwlzYXZlZF9vcmlnaW5hbF9uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShvcmlnaW5hbF9uYW1lKTsKKwlzYXZlZF9hbGlhc2VkX25hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGFsaWFzZWRfbmFtZSk7CisJaWYgKCFzYXZlZF9vcmlnaW5hbF9uYW1lIHx8ICFzYXZlZF9hbGlhc2VkX25hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPm9yaWdpbmFsX25hbWUgIT0gc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fAorCQkgICAgcHRyLT5hbGlhc2VkX25hbWUgIT0gc2F2ZWRfYWxpYXNlZF9uYW1lKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPm9yaWdpbmFsX25hbWUgPSBzYXZlZF9vcmlnaW5hbF9uYW1lOworCW5ld19lbnRyeS0+YWxpYXNlZF9uYW1lID0gc2F2ZWRfYWxpYXNlZF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19hbGlhc19saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9hbGlhc19wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX2FsaWFzX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxJQVMgIiVzICVzXG4iLAorCQkJCSAgICAgIHB0ci0+b3JpZ2luYWxfbmFtZS0+bmFtZSwKKwkJCQkgICAgICBwdHItPmFsaWFzZWRfbmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9hbGlhc19wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqY3AgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKworCWlmICghY3ApCisJCXJldHVybiAtRUlOVkFMOworCSpjcCsrID0gJ1wwJzsKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShkYXRhLCBjcCwgaXNfZGVsZXRlKTsKK30KKworLyogRG9tYWluIGNyZWF0ZS9kZWxldGUvdW5kZWxldGUgaGFuZGxlci4gKi8KKworLyogI2RlZmluZSBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFICovCisKKy8qKgorICogdG9tb3lvX2RlbGV0ZV9kb21haW4gLSBEZWxldGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK2ludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCXByaW50ayhLRVJOX0RFQlVHICJ0b21veW9fZGVsZXRlX2RvbWFpbiAlc1xuIiwgZG9tYWlubmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJMaXN0OiAlcCAldVxuIiwgZG9tYWluLCBkb21haW4tPmlzX2RlbGV0ZWQpOworCX0KKyNlbmRpZgorCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBkb21haW4/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluMjsKKwkJLyogTmV2ZXIgZGVsZXRlIHRvbW95b19rZXJuZWxfZG9tYWluICovCisJCWlmIChkb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQkJY29udGludWU7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgfHwKKwkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCS8qIE1hcmsgYWxyZWFkeSBkZWxldGVkIGRvbWFpbnMgYXMgbm9uIHVuZGVsZXRhYmxlLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbjIsICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghZG9tYWluMi0+aXNfZGVsZXRlZCB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbjItPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCQljb250aW51ZTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCQlpZiAoZG9tYWluMi0+aXNfZGVsZXRlZCAhPSAyNTUpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgIk1hcmtlZCAlcCBhcyBub24gdW5kZWxldGFibGVcbiIsCisJCQkJICAgICAgIGRvbWFpbjIpOworI2VuZGlmCisJCQlkb21haW4yLT5pc19kZWxldGVkID0gMjU1OworCQl9CisJCS8qIERlbGV0ZSBhbmQgbWFyayBhY3RpdmUgZG9tYWluIGFzIHVuZGVsZXRhYmxlLiAqLworCQlkb21haW4tPmlzX2RlbGV0ZWQgPSAxOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1hcmtlZCAlcCBhcyB1bmRlbGV0YWJsZVxuIiwgZG9tYWluKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b191bmRlbGV0ZV9kb21haW4gLSBVbmRlbGV0ZSBhIGRvbWFpbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b191bmRlbGV0ZV9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY2FuZGlkYXRlX2RvbWFpbiA9IE5VTEw7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKworCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwlwcmludGsoS0VSTl9ERUJVRyAidG9tb3lvX3VuZGVsZXRlX2RvbWFpbiAlc1xuIiwgZG9tYWlubmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJMaXN0OiAlcCAldVxuIiwgZG9tYWluLCBkb21haW4tPmlzX2RlbGV0ZWQpOworCX0KKyNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCkgeworCQkJLyogVGhpcyBkb21haW4gaXMgYWN0aXZlLiBJIGNhbid0IHVuZGVsZXRlLiAqLworCQkJY2FuZGlkYXRlX2RvbWFpbiA9IE5VTEw7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVwIGlzIGFjdGl2ZS4gSSBjYW4ndCB1bmRlbGV0ZS5cbiIsCisJCQkgICAgICAgZG9tYWluKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJLyogSXMgdGhpcyBkb21haW4gdW5kZWxldGFibGU/ICovCisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgPT0gMSkKKwkJCWNhbmRpZGF0ZV9kb21haW4gPSBkb21haW47CisJfQorCWlmIChjYW5kaWRhdGVfZG9tYWluKSB7CisJCWNhbmRpZGF0ZV9kb21haW4tPmlzX2RlbGV0ZWQgPSAwOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVwIHdhcyB1bmRlbGV0ZWQuXG4iLCBjYW5kaWRhdGVfZG9tYWluKTsKKyNlbmRpZgorCX0KKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGNhbmRpZGF0ZV9kb21haW47Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4gLSBDcmVhdGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9maWxlOiAgICBQcm9maWxlIG51bWJlciB0byBhc3NpZ24gaWYgdGhlIGRvbWFpbiB3YXMgbmV3bHkgY3JlYXRlZC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihjb25zdCBjaGFyICoKKwkJCQkJCQkgICAgZG9tYWlubmFtZSwKKwkJCQkJCQkgICAgY29uc3QgdTggcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lOworCisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZG9tYWlubmFtZSk7CisJaWYgKGRvbWFpbikKKwkJZ290byBvdXQ7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQlnb3RvIG91dDsKKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCWdvdG8gb3V0OworCS8qIENhbiBJIHJldXNlIG1lbW9yeSBvZiBkZWxldGVkIGRvbWFpbj8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwkJYm9vbCBmbGFnOworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCB8fAorCQkgICAgZG9tYWluLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUpCisJCQljb250aW51ZTsKKwkJZmxhZyA9IGZhbHNlOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CisJCQlpZiAodG9tb3lvX3JlYWxfZG9tYWluKHApICE9IGRvbWFpbikKKwkJCQljb250aW51ZTsKKwkJCWZsYWcgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJCWlmIChmbGFnKQorCQkJY29udGludWU7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQlwcmludGsoS0VSTl9ERUJVRyAiUmV1c2luZyAlcCAlc1xuIiwgZG9tYWluLAorCQkgICAgICAgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKyNlbmRpZgorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJfQorCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKGRvbWFpbiwgdHJ1ZSwgZG9tYWluLT5mbGFncyk7CisJCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gZmFsc2U7CisJCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCisJCWRvbWFpbi0+aXNfZGVsZXRlZCA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBObyBtZW1vcnkgcmV1c2FibGUuIENyZWF0ZSB1c2luZyBuZXcgbWVtb3J5LiAqLworCWRvbWFpbiA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqZG9tYWluKSk7CisJaWYgKGRvbWFpbikgeworCQlJTklUX0xJU1RfSEVBRCgmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwkJZG9tYWluLT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwkJZG9tYWluLT5wcm9maWxlID0gcHJvZmlsZTsKKwkJbGlzdF9hZGRfdGFpbCgmZG9tYWluLT5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZG9tYWluOworfQorCisvKioKKyAqIHRvbW95b19maW5kX25leHRfZG9tYWluIC0gRmluZCBhIGRvbWFpbi4KKyAqCisgKiBAYnBybTogICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBsaW51eF9iaW5wcm0iLgorICogQG5leHRfZG9tYWluOiAgICBQb2ludGVyIHRvIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbikKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzaXplIG9mIGJ1ZmZlciByZXR1cm5lZCBieQorCSAqIHRvbW95b19yZWFscGF0aCgpID0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4uCisJICovCisJc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wID0gdG9tb3lvX2FsbG9jKHNpemVvZigqdG1wKSk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqb2xkX2RvbWFpbiA9IHRvbW95b19kb21haW4oKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWNvbnN0IGNoYXIgKm9sZF9kb21haW5fbmFtZSA9IG9sZF9kb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqb3JpZ2luYWxfbmFtZSA9IGJwcm0tPmZpbGVuYW1lOworCWNoYXIgKm5ld19kb21haW5fbmFtZSA9IE5VTEw7CisJY2hhciAqcmVhbF9wcm9ncmFtX25hbWUgPSBOVUxMOworCWNoYXIgKnN5bWxpbmtfcHJvZ3JhbV9uYW1lID0gTlVMTDsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKG9sZF9kb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHI7IC8qIHJlYWwgbmFtZSAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHM7IC8qIHN5bWxpbmsgbmFtZSAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGw7IC8qIGxhc3QgbmFtZSAqLworCXN0YXRpYyBib29sIGluaXRpYWxpemVkOworCisJaWYgKCF0bXApCisJCWdvdG8gb3V0OworCisJaWYgKCFpbml0aWFsaXplZCkgeworCQkvKgorCQkgKiBCdWlsdC1pbiBpbml0aWFsaXplcnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcG9saWNpZXMgYXJlCisJCSAqIG5vdCBsb2FkZWQgdW50aWwgc3RhcnRpbmcgL3NiaW4vaW5pdC4KKwkJICovCisJCXRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsICIvc2Jpbi9ob3RwbHVnIiwKKwkJCQkJCSAgICAgICBmYWxzZSwgZmFsc2UpOworCQl0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCAiL3NiaW4vbW9kcHJvYmUiLAorCQkJCQkJICAgICAgIGZhbHNlLCBmYWxzZSk7CisJCWluaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwkvKiBHZXQgdG9tb3lvX3JlYWxwYXRoIG9mIHByb2dyYW0uICovCisJcmV0dmFsID0gLUVOT0VOVDsKKwkvKiBJIGhvcGUgdG9tb3lvX3JlYWxwYXRoKCkgd29uJ3QgZmFpbCB3aXRoIC1FTk9NRU0uICovCisJcmVhbF9wcm9ncmFtX25hbWUgPSB0b21veW9fcmVhbHBhdGgob3JpZ2luYWxfbmFtZSk7CisJaWYgKCFyZWFsX3Byb2dyYW1fbmFtZSkKKwkJZ290byBvdXQ7CisJLyogR2V0IHRvbW95b19yZWFscGF0aCBvZiBzeW1ib2xpYyBsaW5rLiAqLworCXN5bWxpbmtfcHJvZ3JhbV9uYW1lID0gdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KG9yaWdpbmFsX25hbWUpOworCWlmICghc3ltbGlua19wcm9ncmFtX25hbWUpCisJCWdvdG8gb3V0OworCisJci5uYW1lID0gcmVhbF9wcm9ncmFtX25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyKTsKKwlzLm5hbWUgPSBzeW1saW5rX3Byb2dyYW1fbmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnMpOworCWwubmFtZSA9IHRvbW95b19nZXRfbGFzdF9uYW1lKG9sZF9kb21haW4pOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbCk7CisKKwkvKiBDaGVjayAnYWxpYXMnIGRpcmVjdGl2ZS4gKi8KKwlpZiAodG9tb3lvX3BhdGhjbXAoJnIsICZzKSkgeworCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CisJCS8qIElzIHRoaXMgcHJvZ3JhbSBhbGxvd2VkIHRvIGJlIGNhbGxlZCB2aWEgc3ltYm9saWMgbGlua3M/ICovCisJCWRvd25fcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChwdHItPmlzX2RlbGV0ZWQgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcCgmciwgcHRyLT5vcmlnaW5hbF9uYW1lKSB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKCZzLCBwdHItPmFsaWFzZWRfbmFtZSkpCisJCQkJY29udGludWU7CisJCQltZW1zZXQocmVhbF9wcm9ncmFtX25hbWUsIDAsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKTsKKwkJCXN0cm5jcHkocmVhbF9wcm9ncmFtX25hbWUsIHB0ci0+YWxpYXNlZF9uYW1lLT5uYW1lLAorCQkJCVRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSk7CisJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oJnIpOworCQkJYnJlYWs7CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJfQorCisJLyogQ2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9uLiAqLworCXJldHZhbCA9IHRvbW95b19jaGVja19leGVjX3Blcm0ob2xkX2RvbWFpbiwgJnIsIHRtcCk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gb3V0OworCisJbmV3X2RvbWFpbl9uYW1lID0gdG1wLT5idWZmZXI7CisJaWYgKHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIob2xkX2RvbWFpbi0+ZG9tYWlubmFtZSwgJnIsICZsKSkgeworCQkvKiBUcmFuc2l0IHRvIHRoZSBjaGlsZCBvZiB0b21veW9fa2VybmVsX2RvbWFpbiBkb21haW4uICovCisJCXNucHJpbnRmKG5ld19kb21haW5fbmFtZSwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gKyAxLAorCQkJIFRPTU9ZT19ST09UX05BTUUgIiAiICIlcyIsIHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwl9IGVsc2UgaWYgKG9sZF9kb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluICYmCisJCSAgICF0b21veW9fcG9saWN5X2xvYWRlZCkgeworCQkvKgorCQkgKiBOZWVkbid0IHRvIHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGJlZm9yZSBzdGFydGluZworCQkgKiAvc2Jpbi9pbml0LiBCdXQgdHJhbnNpdCBmcm9tIGtlcm5lbCBkb21haW4gaWYgZXhlY3V0aW5nCisJCSAqIGluaXRpYWxpemVycyBiZWNhdXNlIHRoZXkgbWlnaHQgc3RhcnQgYmVmb3JlIC9zYmluL2luaXQuCisJCSAqLworCQlkb21haW4gPSBvbGRfZG9tYWluOworCX0gZWxzZSBpZiAodG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIob2xkX2RvbWFpbi0+ZG9tYWlubmFtZSwgJnIsICZsKSkgeworCQkvKiBLZWVwIGN1cnJlbnQgZG9tYWluLiAqLworCQlkb21haW4gPSBvbGRfZG9tYWluOworCX0gZWxzZSB7CisJCS8qIE5vcm1hbCBkb21haW4gdHJhbnNpdGlvbi4gKi8KKwkJc25wcmludGYobmV3X2RvbWFpbl9uYW1lLCBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiArIDEsCisJCQkgIiVzICVzIiwgb2xkX2RvbWFpbl9uYW1lLCByZWFsX3Byb2dyYW1fbmFtZSk7CisJfQorCWlmIChkb21haW4gfHwgc3RybGVuKG5ld19kb21haW5fbmFtZSkgPj0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pCisJCWdvdG8gZG9uZTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4obmV3X2RvbWFpbl9uYW1lKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKGRvbWFpbikKKwkJZ290byBkb25lOworCWlmIChpc19lbmZvcmNlKQorCQlnb3RvIGRvbmU7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4obmV3X2RvbWFpbl9uYW1lLAorCQkJCQkJICBvbGRfZG9tYWluLT5wcm9maWxlKTsKKyBkb25lOgorCWlmIChkb21haW4pCisJCWdvdG8gb3V0OworCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy1FUlJPUjogRG9tYWluICclcycgbm90IGRlZmluZWQuXG4iLAorCSAgICAgICBuZXdfZG9tYWluX25hbWUpOworCWlmIChpc19lbmZvcmNlKQorCQlyZXR2YWwgPSAtRVBFUk07CisJZWxzZQorCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKG9sZF9kb21haW4sIGZhbHNlLAorCQkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUocmVhbF9wcm9ncmFtX25hbWUpOworCXRvbW95b19mcmVlKHN5bWxpbmtfcHJvZ3JhbV9uYW1lKTsKKwkqbmV4dF9kb21haW4gPSBkb21haW4gPyBkb21haW4gOiBvbGRfZG9tYWluOworCXRvbW95b19mcmVlKHRtcCk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjUwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCkBAIC0wLDAgKzEsMTI0MSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9maWxlLmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQorCisvKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImZpbGVfcGF0dGVybiIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImRlbnlfcmV3cml0ZSIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIEtleXdvcmQgYXJyYXkgZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbnMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX3NwX2tleXdvcmRbVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTF0gPSAicmVhZC93cml0ZSIsCisJW1RPTU9ZT19UWVBFX0VYRUNVVEVfQUNMXSAgICA9ICJleGVjdXRlIiwKKwlbVE9NT1lPX1RZUEVfUkVBRF9BQ0xdICAgICAgID0gInJlYWQiLAorCVtUT01PWU9fVFlQRV9XUklURV9BQ0xdICAgICAgPSAid3JpdGUiLAorCVtUT01PWU9fVFlQRV9DUkVBVEVfQUNMXSAgICAgPSAiY3JlYXRlIiwKKwlbVE9NT1lPX1RZUEVfVU5MSU5LX0FDTF0gICAgID0gInVubGluayIsCisJW1RPTU9ZT19UWVBFX01LRElSX0FDTF0gICAgICA9ICJta2RpciIsCisJW1RPTU9ZT19UWVBFX1JNRElSX0FDTF0gICAgICA9ICJybWRpciIsCisJW1RPTU9ZT19UWVBFX01LRklGT19BQ0xdICAgICA9ICJta2ZpZm8iLAorCVtUT01PWU9fVFlQRV9NS1NPQ0tfQUNMXSAgICAgPSAibWtzb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0xdICAgID0gIm1rYmxvY2siLAorCVtUT01PWU9fVFlQRV9NS0NIQVJfQUNMXSAgICAgPSAibWtjaGFyIiwKKwlbVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMXSAgID0gInRydW5jYXRlIiwKKwlbVE9NT1lPX1RZUEVfU1lNTElOS19BQ0xdICAgID0gInN5bWxpbmsiLAorCVtUT01PWU9fVFlQRV9SRVdSSVRFX0FDTF0gICAgPSAicmV3cml0ZSIsCit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19kcF9rZXl3b3JkW1RPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfTElOS19BQ0xdICAgID0gImxpbmsiLAorCVtUT01PWU9fVFlQRV9SRU5BTUVfQUNMXSAgPSAicmVuYW1lIiwKK307CisKKy8qKgorICogdG9tb3lvX3NwMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICovCitjb25zdCBjaGFyICp0b21veW9fc3Aya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCit7CisJcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTikKKwkJPyB0b21veW9fc3Bfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fZHAya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19kcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKK3sKKwlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OKQorCQk/IHRvbW95b19kcF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19zdHJlbmRzd2l0aCAtIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdG9rZW4uCisgKgorICogQG5hbWU6IFRoZSB0b2tlbiB0byBjaGVjay4KKyAqIEB0YWlsOiBUaGUgdG9rZW4gdG8gZmluZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQG5hbWUgZW5kcyB3aXRoIEB0YWlsLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19zdHJlbmRzd2l0aChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0YWlsKQoreworCWludCBsZW47CisKKwlpZiAoIW5hbWUgfHwgIXRhaWwpCisJCXJldHVybiBmYWxzZTsKKwlsZW4gPSBzdHJsZW4obmFtZSkgLSBzdHJsZW4odGFpbCk7CisJcmV0dXJuIGxlbiA+PSAwICYmICFzdHJjbXAobmFtZSArIGxlbiwgdGFpbCk7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9wYXRoIC0gR2V0IHJlYWxwYXRoLgorICoKKyAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2YoKmJ1ZikpOworCisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCS8qIFJlc2VydmUgb25lIGJ5dGUgZm9yIGFwcGVuZGluZyAiLyIuICovCisJZXJyb3IgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihwYXRoLCBidWYtPmJvZHksCisJCQkJCSAgIHNpemVvZihidWYtPmJvZHkpIC0gMik7CisJaWYgKCFlcnJvcikgeworCQlidWYtPmhlYWQubmFtZSA9IGJ1Zi0+Ym9keTsKKwkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZidWYtPmhlYWQpOworCQlyZXR1cm4gJmJ1Zi0+aGVhZDsKKwl9CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogTG9jayBmb3IgZG9tYWluLT5hY2xfaW5mb19saXN0LiAqLworREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB1bmNvbmRpdGlvbmFsbHkgcGVybWl0dGVkIHRvIG9wZW4oKSBmb3IgcmVhZGluZy4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCQkgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDEsIDAsIC0xLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJaWYgKCFzYXZlZF9maWxlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUgLSBDaGVjayBpZiB0aGUgZmlsZSBpcyB1bmNvbmRpdGlvbm5hbHkgcGVybWl0dGVkIHRvIGJlIG9wZW4oKWVkIGZvciByZWFkaW5nLgorICoKKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgZG9tYWluIGNhbiBvcGVuIEBmaWxlbmFtZSBmb3IgcmVhZGluZywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSAgICAgZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJgorCQkgICAgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPmZpbGVuYW1lKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywKKwkJCQkgc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5LAorCQkJCSBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5maWxlbmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19wYXR0ZXJuX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBwYXR0ZXJuOiAgIFBhdGhuYW1lIHBhdHRlcm4uCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAxLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX3BhdHRlcm4gPSB0b21veW9fc2F2ZV9uYW1lKHBhdHRlcm4pOworCWlmICghc2F2ZWRfcGF0dGVybikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCWlmIChzYXZlZF9wYXR0ZXJuICE9IHB0ci0+cGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcGF0dGVybl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuIC0gR2V0IHBhdHRlcm5lZCBwYXRobmFtZS4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBmaW5kIHBhdHRlcm5lZCBwYXRobmFtZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcGF0aG5hbWUgcGF0dGVybiBpZiBtYXRjaGVkLCBAZmlsZW5hbWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgordG9tb3lvX2dldF9maWxlX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuID0gTlVMTDsKKworCWRvd25fcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKKwkJCWNvbnRpbnVlOworCQlwYXR0ZXJuID0gcHRyLT5wYXR0ZXJuOworCQlpZiAodG9tb3lvX3N0cmVuZHN3aXRoKHBhdHRlcm4tPm5hbWUsICIvXFwqIikpIHsKKwkJCS8qIERvIG5vdGhpbmcuIFRyeSB0byBmaW5kIHRoZSBiZXR0ZXIgbWF0Y2guICovCisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIHdvdWxkIGJlIHRoZSBiZXR0ZXIgbWF0Y2guIFVzZSB0aGlzLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlpZiAocGF0dGVybikKKwkJZmlsZW5hbWUgPSBwYXR0ZXJuOworCXJldHVybiBmaWxlbmFtZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXJldHVybiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybiAtIFJlYWQgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5wYXR0ZXJuLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQHBhdHRlcm46ICAgUGF0aG5hbWUgcGF0dGVybiB0aGF0IGFyZSBub3QgcmV3cml0YWJsZSBieSBkZWZhdWx0LgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpuZXdfZW50cnksICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX3BhdHRlcm4gPSB0b21veW9fc2F2ZV9uYW1lKHBhdHRlcm4pOworCWlmICghc2F2ZWRfcGF0dGVybikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPnBhdHRlcm4gIT0gc2F2ZWRfcGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgaXMgbm90IHBlcm1pdHRlZCB0byBiZSByZXdyaXRlZC4KKyAqCisgKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgaXMgc3BlY2lmaWVkIGJ5ICJkZW55X3Jld3JpdGUiIGRpcmVjdGl2ZSwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPnBhdHRlcm4pKQorCQkJY29udGludWU7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJcmV0dXJuIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUgIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+cGF0dGVybi0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9maWxlX2FjbCAtIFVwZGF0ZSBmaWxlJ3MgcmVhZC93cml0ZS9leGVjdXRlIEFDTC4KKyAqCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBwZXJtOiAgICAgIFBlcm1pc3Npb24gKGJldHdlZW4gMSB0byA3KS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogVGhpcyBpcyBsZWdhY3kgc3VwcG9ydCBpbnRlcmZhY2UgZm9yIG9sZGVyIHBvbGljeSBzeW50YXguCisgKiBDdXJyZW50IHBvbGljeSBzeW50YXggdXNlcyAiYWxsb3dfcmVhZC93cml0ZSIgaW5zdGVhZCBvZiAiNiIsCisgKiAiYWxsb3dfcmVhZCIgaW5zdGVhZCBvZiAiNCIsICJhbGxvd193cml0ZSIgaW5zdGVhZCBvZiAiMiIsCisgKiAiYWxsb3dfZXhlY3V0ZSIgaW5zdGVhZCBvZiAiMSIuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX2FjbChjb25zdCBjaGFyICpmaWxlbmFtZSwgdTggcGVybSwKKwkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlpZiAocGVybSA+IDcgfHwgIXBlcm0pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIHBlcm1pc3Npb24gJyVkICVzJ1xuIiwKKwkJICAgICAgIF9fZnVuY19fLCBwZXJtLCBmaWxlbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZmlsZW5hbWVbMF0gIT0gJ0AnICYmIHRvbW95b19zdHJlbmRzd2l0aChmaWxlbmFtZSwgIi8iKSkKKwkJLyoKKwkJICogT25seSAnYWxsb3dfbWtkaXInIGFuZCAnYWxsb3dfcm1kaXInIGFyZSB2YWxpZCBmb3IKKwkJICogZGlyZWN0b3J5IHBlcm1pc3Npb25zLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJaWYgKHBlcm0gJiA0KQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9SRUFEX0FDTCwgZmlsZW5hbWUsCisJCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlpZiAocGVybSAmIDIpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCwgZmlsZW5hbWUsCisJCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlpZiAocGVybSAmIDEpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMLAorCQkJCQkgICAgICBmaWxlbmFtZSwgZG9tYWluLCBpc19kZWxldGUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgICAgICAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICAgICAgICBQZXJtaXNzaW9uLgorICogQG1heV91c2VfcGF0dGVybjogVHJ1ZSBpZiBwYXR0ZXJuZWQgQUNMIGlzIHBlcm1pdHRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGRvbWFpbiwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGZpbGVuYW1lLAorCQkJCQkgY29uc3QgdTE2IHBlcm0sCisJCQkJCSBjb25zdCBib29sIG1heV91c2VfcGF0dGVybikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQljb250aW51ZTsKKwkJaWYgKG1heV91c2VfcGF0dGVybiB8fCAhYWNsLT5maWxlbmFtZS0+aXNfcGF0dGVybmVkKSB7CisJCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwKKwkJCQkJCQkgYWNsLT5maWxlbmFtZSkpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQljb250aW51ZTsKKwkJfQorCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG9wZW5pbmcgZmlsZXMuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBvcGVyYXRpb246IE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIiBvciAiZXhlY3V0ZSIpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3QgdTggb3BlcmF0aW9uKQoreworCXUxNiBwZXJtID0gMDsKKworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCWlmIChvcGVyYXRpb24gPT0gNikKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDQpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAyKQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDEpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMOworCWVsc2UKKwkJQlVHKCk7CisJcmV0dXJuIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIHBlcm0sCisJCQkJCSAgICAgb3BlcmF0aW9uICE9IDEpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX3Blcm0yIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igb3BlbmluZyBmaWxlcy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgTW9kZSAoInJlYWQiIG9yICJ3cml0ZSIgb3IgInJlYWQvd3JpdGUiIG9yICJleGVjdXRlIikuCisgKiBAb3BlcmF0aW9uOiBPcGVyYXRpb24gbmFtZSBwYXNzZWQgdXNlZCBmb3IgdmVyYm9zZSBtb2RlLgorICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX3Blcm0yKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSAgIGNvbnN0IHU4IHBlcm0sIGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKKwkJCQkgICBjb25zdCB1OCBtb2RlKQoreworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWNvbnN0IGNoYXIgKm1zZyA9ICI8dW5rbm93bj4iOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gMDsKKwllcnJvciA9IHRvbW95b19jaGVja19maWxlX2FjbChkb21haW4sIGZpbGVuYW1lLCBwZXJtKTsKKwlpZiAoZXJyb3IgJiYgcGVybSA9PSA0ICYmCisJICAgIChkb21haW4tPmZsYWdzICYgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpID09IDAKKwkgICAgJiYgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoZmlsZW5hbWUpKQorCQllcnJvciA9IDA7CisJaWYgKHBlcm0gPT0gNikKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gNCkKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gMikKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDEpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMKTsKKwllbHNlCisJCUJVRygpOworCWlmICghZXJyb3IpCisJCXJldHVybiAwOworCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyglcykgJXMnIGRlbmllZCAiCisJCSAgICAgICAiZm9yICVzXG4iLCB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwgbXNnLCBvcGVyYXRpb24sCisJCSAgICAgICBmaWxlbmFtZS0+bmFtZSwgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CisJaWYgKGlzX2VuZm9yY2UpCisJCXJldHVybiBlcnJvcjsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQkvKiBEb24ndCB1c2UgcGF0dGVybnMgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKwkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm5lZF9maWxlID0gKHBlcm0gIT0gMSkgPworCQkJdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpIDogZmlsZW5hbWU7CisJCXRvbW95b191cGRhdGVfZmlsZV9hY2wocGF0dGVybmVkX2ZpbGUtPm5hbWUsIHBlcm0sCisJCQkJICAgICAgIGRvbWFpbiwgZmFsc2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3kgLSBVcGRhdGUgZmlsZSByZWxhdGVkIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9maWxlX3BvbGljeShjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmZpbGVuYW1lID0gc3RyY2hyKGRhdGEsICcgJyk7CisJY2hhciAqZmlsZW5hbWUyOworCXVuc2lnbmVkIGludCBwZXJtOworCXU4IHR5cGU7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqZmlsZW5hbWUrKyA9ICdcMCc7CisJaWYgKHNzY2FuZihkYXRhLCAiJXUiLCAmcGVybSkgPT0gMSkKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZmlsZV9hY2woZmlsZW5hbWUsICh1OCkgcGVybSwgZG9tYWluLAorCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmIChzdHJuY21wKGRhdGEsICJhbGxvd18iLCA2KSkKKwkJZ290byBvdXQ7CisJZGF0YSArPSA2OworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX3NwX2tleXdvcmRbdHlwZV0pKQorCQkJY29udGludWU7CisJCXJldHVybiB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwKKwkJCQkJCSAgICAgZG9tYWluLCBpc19kZWxldGUpOworCX0KKwlmaWxlbmFtZTIgPSBzdHJjaHIoZmlsZW5hbWUsICcgJyk7CisJaWYgKCFmaWxlbmFtZTIpCisJCWdvdG8gb3V0OworCSpmaWxlbmFtZTIrKyA9ICdcMCc7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fZHBfa2V5d29yZFt0eXBlXSkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKHR5cGUsIGZpbGVuYW1lLCBmaWxlbmFtZTIsCisJCQkJCQkgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwl9Cisgb3V0OgorCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RhdGljIGNvbnN0IHUxNiByd19tYXNrID0KKwkJKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0wpIHwgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWU7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTE2IHBlcm0gPSAxIDw8IHR5cGU7CisKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJaWYgKCFzYXZlZF9maWxlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoaXNfZGVsZXRlKQorCQlnb3RvIGRlbGV0ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQlhY2wtPnBlcm0gPSAwOworCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSA9PSByd19tYXNrKQorCQkJYWNsLT5wZXJtIHw9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJCWVsc2UgaWYgKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkKKwkJCWFjbC0+cGVybSB8PSByd19tYXNrOworCQlwdHItPnR5cGUgJj0gflRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJLyogTm90IGZvdW5kLiBBcHBlbmQgaXQgdG8gdGhlIHRhaWwuICovCisJYWNsID0gdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCk7CisJaWYgKCFhY2wpCisJCWdvdG8gb3V0OworCWFjbC0+cGVybSA9IHBlcm07CisJaWYgKHBlcm0gPT0gKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKQorCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKKwlhY2wtPmZpbGVuYW1lID0gc2F2ZWRfZmlsZW5hbWU7CisJbGlzdF9hZGRfdGFpbCgmYWNsLT5oZWFkLmxpc3QsICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOworCWVycm9yID0gMDsKKwlnb3RvIG91dDsKKyBkZWxldGU6CisJZXJyb3IgPSAtRU5PRU5UOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJYWNsLT5wZXJtICY9IH5wZXJtOworCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spICE9IHJ3X21hc2spCisJCQlhY2wtPnBlcm0gJj0gfigxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKTsKKwkJZWxzZSBpZiAoIShhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpKQorCQkJYWNsLT5wZXJtICY9IH5yd19tYXNrOworCQlpZiAoIWFjbC0+cGVybSkKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWUxOiBGaXJzdCBmaWxlbmFtZS4KKyAqIEBmaWxlbmFtZTI6IFNlY29uZCBmaWxlbmFtZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTE7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lMjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1OCBwZXJtID0gMSA8PCB0eXBlOworCisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTEsIDAsIDAsIDAsIF9fZnVuY19fKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTIsIDAsIDAsIDAsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfZmlsZW5hbWUxID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZTEpOworCXNhdmVkX2ZpbGVuYW1lMiA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUyKTsKKwlpZiAoIXNhdmVkX2ZpbGVuYW1lMSB8fCAhc2F2ZWRfZmlsZW5hbWUyKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmIChpc19kZWxldGUpCisJCWdvdG8gZGVsZXRlOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUxKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUxICE9IHNhdmVkX2ZpbGVuYW1lMSB8fAorCQkgICAgYWNsLT5maWxlbmFtZTIgIT0gc2F2ZWRfZmlsZW5hbWUyKQorCQkJY29udGludWU7CisJCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQlhY2wtPnBlcm0gPSAwOworCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLworCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpOworCWlmICghYWNsKQorCQlnb3RvIG91dDsKKwlhY2wtPnBlcm0gPSBwZXJtOworCWFjbC0+ZmlsZW5hbWUxID0gc2F2ZWRfZmlsZW5hbWUxOworCWFjbC0+ZmlsZW5hbWUyID0gc2F2ZWRfZmlsZW5hbWUyOworCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwllcnJvciA9IDA7CisJZ290byBvdXQ7CisgZGVsZXRlOgorCWVycm9yID0gLUVOT0VOVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKKwkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKKwkJCWNvbnRpbnVlOworCQlhY2wtPnBlcm0gJj0gfnBlcm07CisJCWlmICghYWNsLT5wZXJtKQorCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHR5cGU6ICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogRmlsZW5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkJY29uc3QgdTggdHlwZSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCAxIDw8IHR5cGUsIDEpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTE6IEZpcnN0IGZpbGVuYW1lIHRvIGNoZWNrLgorICogQGZpbGVuYW1lMjogU2Vjb25kIGZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2woY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCQljb25zdCB1OCB0eXBlLAorCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCWZpbGVuYW1lMSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQlmaWxlbmFtZTIpCit7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCWNvbnN0IHU4IHBlcm0gPSAxIDw8IHR5cGU7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUxLCBhY2wtPmZpbGVuYW1lMSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUyLCBhY2wtPmZpbGVuYW1lMikpCisJCQljb250aW51ZTsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJCWNvbnN0IGRvbWFpbiwgdTggb3BlcmF0aW9uLAorCQkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkJZmlsZW5hbWUsIGNvbnN0IHU4IG1vZGUpCit7CisJY29uc3QgY2hhciAqbXNnOworCWludCBlcnJvcjsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisgbmV4dDoKKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGZpbGVuYW1lKTsKKwltc2cgPSB0b21veW9fc3Aya2V5d29yZChvcGVyYXRpb24pOworCWlmICghZXJyb3IpCisJCWdvdG8gb2s7CisJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzICVzJyBkZW5pZWQgZm9yICVzXG4iLAorCQkgICAgICAgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgZmlsZW5hbWUtPm5hbWUsCisJCSAgICAgICB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQljb25zdCBjaGFyICpuYW1lID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpLT5uYW1lOworCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUsIGRvbWFpbiwgZmFsc2UpOworCX0KKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKyBvazoKKwkvKgorCSAqIFNpbmNlICJhbGxvd190cnVuY2F0ZSIgZG9lc24ndCBpbXBseSAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiwKKwkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIGlmIHRoZSBmaWxlbmFtZSBpcworCSAqIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLgorCSAqLworCWlmICghZXJyb3IgJiYgb3BlcmF0aW9uID09IFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCAmJgorCSAgICB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGZpbGVuYW1lKSkgeworCQlvcGVyYXRpb24gPSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTDsKKwkJZ290byBuZXh0OworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZpbGVfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHN5c2N0bCgpJ3MgInJlYWQiIGFuZCAid3JpdGUiLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIpLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19maWxlX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHU4IHBlcm0pCit7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworCW5hbWUubmFtZSA9IGZpbGVuYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJcmV0dXJuIHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgJm5hbWUsIHBlcm0sICJzeXNjdGwiLCBtb2RlKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZXhlY19wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImV4ZWN1dGUiLgorICoKKyAqIEBkb21haW46ICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6IENoZWNrIHBlcm1pc3Npb24gZm9yICJleGVjdXRlIi4KKyAqIEB0bXA6ICAgICAgQnVmZmVyIGZvciB0ZW1wb3JhcnkgdXNlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZXZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJICAgc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wKQoreworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgZmlsZW5hbWUsIDEsICJkb19leGVjdmUiLCBtb2RlKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJlYWQiIGFuZCAid3JpdGUiLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHBhdGg6ICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQGZsYWc6ICAgRmxhZ3MgZm9yIG9wZW4oKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZykKK3sKKwljb25zdCB1OCBhY2NfbW9kZSA9IEFDQ19NT0RFKGZsYWcpOworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisKKwlpZiAoIW1vZGUgfHwgIXBhdGgtPm1udCkKKwkJcmV0dXJuIDA7CisJaWYgKGFjY19tb2RlID09IDApCisJCXJldHVybiAwOworCWlmIChwYXRoLT5kZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCS8qCisJCSAqIEkgZG9uJ3QgY2hlY2sgZGlyZWN0b3JpZXMgaGVyZSBiZWNhdXNlIG1rZGlyKCkgYW5kIHJtZGlyKCkKKwkJICogZG9uJ3QgY2FsbCBtZS4KKwkJICovCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJZXJyb3IgPSAwOworCS8qCisJICogSWYgdGhlIGZpbGVuYW1lIGlzIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLAorCSAqIHdlIG5lZWQgdG8gY2hlY2sgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24gd2hlbiB0aGUgZmlsZW5hbWUgaXMgbm90CisJICogb3BlbmVkIGZvciBhcHBlbmQgbW9kZSBvciB0aGUgZmlsZW5hbWUgaXMgdHJ1bmNhdGVkIGF0IG9wZW4gdGltZS4KKwkgKi8KKwlpZiAoKGFjY19tb2RlICYgTUFZX1dSSVRFKSAmJgorCSAgICAoKGZsYWcgJiBPX1RSVU5DKSB8fCAhKGZsYWcgJiBPX0FQUEVORCkpICYmCisJICAgICh0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpKSB7CisJCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKKwkJCQkJCSAgICAgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wsCisJCQkJCQkJICAgICBidWYsIG1vZGUpOworCX0KKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgYnVmLCBhY2NfbW9kZSwgIm9wZW4iLAorCQkJCQkJbW9kZSk7CisJaWYgKCFlcnJvciAmJiAoZmxhZyAmIE9fVFJVTkMpKQorCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCwKKwkJCQkJCQkgICAgIGJ1ZiwgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja18xcGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImNyZWF0ZSIsICJ1bmxpbmsiLCAibWtkaXIiLCAicm1kaXIiLCAibWtmaWZvIiwgIm1rc29jayIsICJta2Jsb2NrIiwgIm1rY2hhciIsICJ0cnVuY2F0ZSIgYW5kICJzeW1saW5rIi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQHBhdGg6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCisJaWYgKCFtb2RlIHx8ICFwYXRoLT5tbnQpCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJc3dpdGNoIChvcGVyYXRpb24pIHsKKwljYXNlIFRPTU9ZT19UWVBFX01LRElSX0FDTDoKKwljYXNlIFRPTU9ZT19UWVBFX1JNRElSX0FDTDoKKwkJaWYgKCFidWYtPmlzX2RpcikgeworCQkJLyoKKwkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgorCQkJICovCisJCQlzdHJjYXQoKGNoYXIgKikgYnVmLT5uYW1lLCAiLyIpOworCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1Zik7CisJCX0KKwl9CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBvcGVyYXRpb24sIGJ1ZiwKKwkJCQkJCSAgICAgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmV3cml0ZSIuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlscDogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKworCWlmICghbW9kZSB8fCAhZmlscC0+Zl9wYXRoLm1udCkKKwkJcmV0dXJuIDA7CisJYnVmID0gdG9tb3lvX2dldF9wYXRoKCZmaWxwLT5mX3BhdGgpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKwlpZiAoIXRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoYnVmKSkgeworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAorCQkJCQkJICAgICBidWYsIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfMnBhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZW5hbWUiIGFuZCAibGluayIuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBwYXRoMTogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAcGF0aDI6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfMnBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMikKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWYxLCAqYnVmMjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJY29uc3QgY2hhciAqbXNnOworCisJaWYgKCFtb2RlIHx8ICFwYXRoMS0+bW50IHx8ICFwYXRoMi0+bW50KQorCQlyZXR1cm4gMDsKKwlidWYxID0gdG9tb3lvX2dldF9wYXRoKHBhdGgxKTsKKwlidWYyID0gdG9tb3lvX2dldF9wYXRoKHBhdGgyKTsKKwlpZiAoIWJ1ZjEgfHwgIWJ1ZjIpCisJCWdvdG8gb3V0OworCXsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gcGF0aDEtPmRlbnRyeTsKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQkJLyoKKwkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgorCQkJICovCisJCQlpZiAoIWJ1ZjEtPmlzX2RpcikgeworCQkJCXN0cmNhdCgoY2hhciAqKSBidWYxLT5uYW1lLCAiLyIpOworCQkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYxKTsKKwkJCX0KKwkJCWlmICghYnVmMi0+aXNfZGlyKSB7CisJCQkJc3RyY2F0KChjaGFyICopIGJ1ZjItPm5hbWUsICIvIik7CisJCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1ZjIpOworCQkJfQorCQl9CisJfQorCWVycm9yID0gdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgYnVmMSwgYnVmMik7CisJbXNnID0gdG9tb3lvX2RwMmtleXdvcmQob3BlcmF0aW9uKTsKKwlpZiAoIWVycm9yKQorCQlnb3RvIG91dDsKKwlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMgJXMgJXMnICIKKwkJICAgICAgICJkZW5pZWQgZm9yICVzXG4iLCB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwKKwkJICAgICAgIG1zZywgYnVmMS0+bmFtZSwgYnVmMi0+bmFtZSwKKwkJICAgICAgIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOworCWlmIChtb2RlID09IDEgJiYgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhkb21haW4pKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUxID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oYnVmMSktPm5hbWU7CisJCWNvbnN0IGNoYXIgKm5hbWUyID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oYnVmMiktPm5hbWU7CisJCXRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKG9wZXJhdGlvbiwgbmFtZTEsIG5hbWUyLCBkb21haW4sCisJCQkJCSAgICAgIGZhbHNlKTsKKwl9Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1ZjEpOworCXRvbW95b19mcmVlKGJ1ZjIpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZjE2YgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKKyAqCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgYWJzb2x1dGUgcGF0aG5hbWVzLiBUaGUgYmFzaXMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisKKy8qKgorICogdG9tb3lvX2VuY29kZTogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4KKyAqCisgKiBAYnVmZmVyOiAgQnVmZmVyIGZvciBBU0NJSSBzdHJpbmcuCisgKiBAYnVmbGVuOiAgU2l6ZSBvZiBAYnVmZmVyLgorICogQHN0cjogICAgIEJpbmFyeSBzdHJpbmcuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl3aGlsZSAoMSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgc3RyKys7CisKKwkJaWYgKHRvbW95b19pc192YWxpZChjKSkgeworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyKysgPSAoY2hhcikgYzsKKwkJCWlmIChjICE9ICdcXCcpCisJCQkJY29udGludWU7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIrKyA9IChjaGFyKSBjOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjKSB7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIgPSAnXDAnOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnVmbGVuIC09IDQ7CisJCWlmIChidWZsZW4gPD0gMCkKKwkJCWJyZWFrOworCQkqYnVmZmVyKysgPSAnXFwnOworCQkqYnVmZmVyKysgPSAoYyA+PiA2KSArICcwJzsKKwkJKmJ1ZmZlcisrID0gKChjID4+IDMpICYgNykgKyAnMCc7CisJCSpidWZmZXIrKyA9IChjICYgNykgKyAnMCc7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyIC0gUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICoKKyAqIEBwYXRoOiAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQG5ld25hbWU6ICAgICBQb2ludGVyIHRvIGJ1ZmZlciB0byByZXR1cm4gdmFsdWUgaW4uCisgKiBAbmV3bmFtZV9sZW46IFNpemUgb2YgQG5ld25hbWUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBJZiBkZW50cnkgaXMgYSBkaXJlY3RvcnksIHRyYWlsaW5nICcvJyBpcyBhcHBlbmRlZC4KKyAqIENoYXJhY3RlcnMgb3V0IG9mIDB4MjAgPCBjIDwgMHg3RiByYW5nZSBhcmUgY29udmVydGVkIHRvCisgKiBcb29vIHN0eWxlIG9jdGFsIHN0cmluZy4KKyAqIENoYXJhY3RlciBcIGlzIGNvbnZlcnRlZCB0byBcXCBzdHJpbmcuCisgKi8KK2ludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKKwkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBwYXRoLT5kZW50cnk7CisJY2hhciAqc3A7CisKKwlpZiAoIWRlbnRyeSB8fCAhcGF0aC0+bW50IHx8ICFuZXduYW1lIHx8IG5ld25hbWVfbGVuIDw9IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2RuYW1lKSB7CisJCS8qIEZvciAic29ja2V0OltcJF0iIGFuZCAicGlwZTpbXCRdIi4gKi8KKwkJc3RhdGljIGNvbnN0IGludCBvZmZzZXQgPSAxNTM2OworCQlzcCA9IGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZShkZW50cnksIG5ld25hbWUgKyBvZmZzZXQsCisJCQkJCSAgIG5ld25hbWVfbGVuIC0gb2Zmc2V0KTsKKwl9IGVsc2UgeworCQkvKiBUYWtlbiBmcm9tIGRfbmFtZXNwYWNlX3BhdGgoKS4gKi8KKwkJc3RydWN0IHBhdGggcm9vdDsKKwkJc3RydWN0IHBhdGggbnNfcm9vdCA9IHsgfTsKKwkJc3RydWN0IHBhdGggdG1wOworCisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCQlyb290ID0gY3VycmVudC0+ZnMtPnJvb3Q7CisJCXBhdGhfZ2V0KCZyb290KTsKKwkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJaWYgKHJvb3QubW50ICYmIHJvb3QubW50LT5tbnRfbnMpCisJCQluc19yb290Lm1udCA9IG1udGdldChyb290Lm1udC0+bW50X25zLT5yb290KTsKKwkJaWYgKG5zX3Jvb3QubW50KQorCQkJbnNfcm9vdC5kZW50cnkgPSBkZ2V0KG5zX3Jvb3QubW50LT5tbnRfcm9vdCk7CisJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCXRtcCA9IG5zX3Jvb3Q7CisJCXNwID0gX19kX3BhdGgocGF0aCwgJnRtcCwgbmV3bmFtZSwgbmV3bmFtZV9sZW4pOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlwYXRoX3B1dCgmcm9vdCk7CisJCXBhdGhfcHV0KCZuc19yb290KTsKKwl9CisJaWYgKElTX0VSUihzcCkpCisJCWVycm9yID0gUFRSX0VSUihzcCk7CisJZWxzZQorCQllcnJvciA9IHRvbW95b19lbmNvZGUobmV3bmFtZSwgc3AgLSBuZXduYW1lLCBzcCk7CisJLyogQXBwZW5kIHRyYWlsaW5nICcvJyBpZiBkZW50cnkgaXMgYSBkaXJlY3RvcnkuICovCisJaWYgKCFlcnJvciAmJiBkZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkKKwkgICAgJiYgKm5ld25hbWUpIHsKKwkJc3AgPSBuZXduYW1lICsgc3RybGVuKG5ld25hbWUpOworCQlpZiAoKihzcCAtIDEpICE9ICcvJykgeworCQkJaWYgKHNwIDwgbmV3bmFtZSArIG5ld25hbWVfbGVuIC0gNCkgeworCQkJCSpzcCsrID0gJy8nOworCQkJCSpzcCA9ICdcMCc7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInRvbW95b19yZWFscGF0aDogUGF0aG5hbWUgdG9vIGxvbmcuXG4iKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCAtIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICoKKyAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgdGhlIGdpdmVuIEBwYXRoIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCit7CisJY2hhciAqYnVmID0gdG9tb3lvX2FsbG9jKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKSk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpCisJCSAgICAgPD0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHBhdGgsIGJ1ZiwKKwkJCQkgICAgICAgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKSA9PSAwKQorCQlyZXR1cm4gYnVmOworCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoIC0gR2V0IHJlYWxwYXRoIG9mIGEgcGF0aG5hbWUuCisgKgorICogQHBhdGhuYW1lOiBUaGUgcGF0aG5hbWUgdG8gc29sdmUuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgQHBhdGhuYW1lIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRobmFtZSAmJiBwYXRoX2xvb2t1cChwYXRobmFtZSwgTE9PS1VQX0ZPTExPVywgJm5kKSA9PSAwKSB7CisJCWNoYXIgKmJ1ZiA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJm5kLnBhdGgpOworCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCXJldHVybiBidWY7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyAtIEdldCByZWFscGF0aCBvZiBhIHBhdGhuYW1lLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHBhdGhuYW1lIHRvIHNvbHZlLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIEBwYXRobmFtZSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aG5hbWUgJiYgcGF0aF9sb29rdXAocGF0aG5hbWUsIDAsICZuZCkgPT0gMCkgeworCQljaGFyICpidWYgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZuZC5wYXRoKTsKKwkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igbm9uLXN0cmluZyBkYXRhLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7CisvKiBRdW90YSBmb3IgaG9sZGluZyBub24tc3RyaW5nIGRhdGEuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3JfZWxlbWVudHM7CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2VsZW1lbnQgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLgorICoKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIE1lbW9yeSBoYXMgdG8gYmUgemVyb2VkLgorICogVGhlIFJBTSBpcyBjaHVua2VkLCBzbyBORVZFUiB0cnkgdG8ga2ZyZWUoKSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RhdGljIGNoYXIgKmJ1ZjsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmX3VzZWRfbGVuID0gUEFUSF9NQVg7CisJY2hhciAqcHRyID0gTlVMTDsKKwkvKkFzc3VtZXMgc2l6ZW9mKHZvaWQgKikgPj0gc2l6ZW9mKGxvbmcpIGlzIHRydWUuICovCisJY29uc3QgdW5zaWduZWQgaW50IHdvcmRfYWxpZ25lZF9zaXplCisJCT0gcm91bmR1cChzaXplLCBtYXgoc2l6ZW9mKHZvaWQgKiksIHNpemVvZihsb25nKSkpOworCWlmICh3b3JkX2FsaWduZWRfc2l6ZSA+IFBBVEhfTUFYKQorCQlyZXR1cm4gTlVMTDsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJaWYgKGJ1Zl91c2VkX2xlbiArIHdvcmRfYWxpZ25lZF9zaXplID4gUEFUSF9NQVgpIHsKKwkJaWYgKCF0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzIHx8CisJCSAgICB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHMKKwkJICAgICsgUEFUSF9NQVggPD0gdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cykKKwkJCXB0ciA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQlpZiAoIXB0cikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgorCQkJICAgICAgICJmb3IgdG9tb3lvX2FsbG9jX2VsZW1lbnQoKS5cbiIpOworCQkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQl9IGVsc2UgeworCQkJYnVmID0gcHRyOworCQkJdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzICs9IFBBVEhfTUFYOworCQkJYnVmX3VzZWRfbGVuID0gd29yZF9hbGlnbmVkX3NpemU7CisJCQlwdHIgPSBidWY7CisJCX0KKwl9IGVsc2UgaWYgKHdvcmRfYWxpZ25lZF9zaXplKSB7CisJCWludCBpOworCQlwdHIgPSBidWYgKyBidWZfdXNlZF9sZW47CisJCWJ1Zl91c2VkX2xlbiArPSB3b3JkX2FsaWduZWRfc2l6ZTsKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRfYWxpZ25lZF9zaXplOyBpKyspIHsKKwkJCWlmICghcHRyW2ldKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBSZXNlcnZlZCBtZW1vcnkgd2FzIHRhaW50ZWQhICIKKwkJCSAgICAgICAiVGhlIHN5c3RlbSBtaWdodCBnbyB3cm9uZy5cbiIpOworCQkJcHRyW2ldID0gJ1wwJzsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0cjsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igc3RyaW5nIGRhdGEgaW4gYnl0ZXMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZTsKKy8qIFF1b3RhIGZvciBob2xkaW5nIHN0cmluZyBkYXRhIGluIGJ5dGVzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lOworCisvKgorICogVE9NT1lPIHVzZXMgdGhpcyBoYXNoIG9ubHkgd2hlbiBhcHBlbmRpbmcgYSBzdHJpbmcgaW50byB0aGUgc3RyaW5nCisgKiB0YWJsZS4gRnJlcXVlbmN5IG9mIGFwcGVuZGluZyBzdHJpbmdzIGlzIHZlcnkgbG93LiBTbyB3ZSBkb24ndCBuZWVkCisgKiBsYXJnZSAoZS5nLiA2NGspIGhhc2ggc2l6ZS4gMjU2IHdpbGwgYmUgc3VmZmljaWVudC4KKyAqLworI2RlZmluZSBUT01PWU9fTUFYX0hBU0ggMjU2CisKKy8qIFN0cnVjdHVyZSBmb3Igc3RyaW5nIGRhdGEuICovCitzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBlbnRyeTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgYXZhaWxhYmxlIG1lbW9yeSByZWdpb24uICovCitzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyICpwdHI7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gYSBmcmVlIGFyZWEuICovCisJaW50IGxlbjsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGFyZWEuICAgICAqLworfTsKKworLyoKKyAqIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19uYW1lX2VudHJ5Ii4KKyAqCisgKiBUaGlzIGxpc3QgaXMgdXBkYXRlZCBvbmx5IGluc2lkZSB0b21veW9fc2F2ZV9uYW1lKCksIHRodXMKKyAqIG5vIGdsb2JhbCBtdXRleCBleGlzdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19uYW1lX2xpc3RbVE9NT1lPX01BWF9IQVNIXTsKKworLyoqCisgKiB0b21veW9fc2F2ZV9uYW1lIC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RyaW5nIGRhdGEuCisgKgorICogQG5hbWU6IFRoZSBzdHJpbmcgdG8gc3RvcmUgaW50byB0aGUgcGVybWVybmVudCBtZW1vcnkuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KKyAqLworY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdGF0aWMgTElTVF9IRUFEKGZtYl9saXN0KTsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyOworCXVuc2lnbmVkIGludCBoYXNoOworCS8qIGZtYiBjb250YWlucyBhdmFpbGFibGUgc2l6ZSBpbiBieXRlcy4KKwkgICBmbWIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmbWJfbGlzdCB3aGVuIGZtYi0+bGVuIGJlY29tZXMgMC4gKi8KKwlzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgKmZtYjsKKwlpbnQgbGVuOworCWNoYXIgKmNwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwlsZW4gPSBzdHJsZW4obmFtZSkgKyAxOworCWlmIChsZW4gPiBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogTmFtZSB0b28gbG9uZyAiCisJCSAgICAgICAiZm9yIHRvbW95b19zYXZlX25hbWUoKS5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19uYW1lX2xpc3RbaGFzaCAlIFRPTU9ZT19NQVhfSEFTSF0sCisJCQkgICAgIGxpc3QpIHsKKwkJaWYgKGhhc2ggPT0gcHRyLT5lbnRyeS5oYXNoICYmICFzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKKwkJCWdvdG8gb3V0OworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZtYiwgJmZtYl9saXN0LCBsaXN0KSB7CisJCWlmIChsZW4gPD0gZm1iLT5sZW4pCisJCQlnb3RvIHJlYWR5OworCX0KKwlpZiAoIXRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUgfHwKKwkgICAgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lICsgUEFUSF9NQVgKKwkgICAgPD0gdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSkKKwkJY3AgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWNwID0gTlVMTDsKKwlmbWIgPSBremFsbG9jKHNpemVvZigqZm1iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcCB8fCAhZm1iKSB7CisJCWtmcmVlKGNwKTsKKwkJa2ZyZWUoZm1iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgorCQkgICAgICAgImZvciB0b21veW9fc2F2ZV9uYW1lKCkuXG4iKTsKKwkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCXB0ciA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKwl0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWUgKz0gUEFUSF9NQVg7CisJbGlzdF9hZGQoJmZtYi0+bGlzdCwgJmZtYl9saXN0KTsKKwlmbWItPnB0ciA9IGNwOworCWZtYi0+bGVuID0gUEFUSF9NQVg7CisgcmVhZHk6CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpwdHIpKTsKKwlpZiAoIXB0cikKKwkJZ290byBvdXQ7CisJcHRyLT5lbnRyeS5uYW1lID0gZm1iLT5wdHI7CisJbWVtbW92ZShmbWItPnB0ciwgbmFtZSwgbGVuKTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnB0ci0+ZW50cnkpOworCWZtYi0+cHRyICs9IGxlbjsKKwlmbWItPmxlbiAtPSBsZW47CisJbGlzdF9hZGRfdGFpbCgmcHRyLT5saXN0LCAmdG9tb3lvX25hbWVfbGlzdFtoYXNoICUgVE9NT1lPX01BWF9IQVNIXSk7CisJaWYgKGZtYi0+bGVuID09IDApIHsKKwkJbGlzdF9kZWwoJmZtYi0+bGlzdCk7CisJCWtmcmVlKGZtYik7CisJfQorIG91dDoKKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0ciA/ICZwdHItPmVudHJ5IDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfaW5pdCAtIEluaXRpYWxpemUgcmVhbHBhdGggcmVsYXRlZCBjb2RlLgorICovCit2b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKQoreworCWludCBpOworCisJQlVJTERfQlVHX09OKFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOID4gUEFUSF9NQVgpOworCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0hBU0g7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19uYW1lX2xpc3RbaV0pOworCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fa2VybmVsX2RvbWFpbi5hY2xfaW5mb19saXN0KTsKKwl0b21veW9fa2VybmVsX2RvbWFpbi5kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShUT01PWU9fUk9PVF9OQU1FKTsKKwlsaXN0X2FkZF90YWlsKCZ0b21veW9fa2VybmVsX2RvbWFpbi5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlpZiAodG9tb3lvX2ZpbmRfZG9tYWluKFRPTU9ZT19ST09UX05BTUUpICE9ICZ0b21veW9fa2VybmVsX2RvbWFpbikKKwkJcGFuaWMoIkNhbid0IHJlZ2lzdGVyIHRvbW95b19rZXJuZWxfZG9tYWluIik7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworfQorCisvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZS4gKi8KK3N0YXRpYyBhdG9taWNfdCB0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZTsKKworLyoqCisgKiB0b21veW9fYWxsb2MgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSBwdXJwb3NlLgorICoKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHApCisJCWF0b21pY19hZGQoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJcmV0dXJuIHA7Cit9CisKKy8qKgorICogdG9tb3lvX2ZyZWUgLSBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuCisgKgorICogQHA6IFBvaW50ZXIgcmV0dXJuZWQgYnkgdG9tb3lvX2FsbG9jKCkuIE1heSBiZSBOVUxMLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwordm9pZCB0b21veW9fZnJlZShjb25zdCB2b2lkICpwKQoreworCWlmIChwKSB7CisJCWF0b21pY19zdWIoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJCWtmcmVlKHApOworCX0KK30KKworLyoqCisgKiB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlciAtIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIG1lbW9yeSB1c2FnZS4KKyAqLworaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJY29uc3QgdW5zaWduZWQgaW50IHNoYXJlZAorCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7CisJCWNvbnN0IHVuc2lnbmVkIGludCBwcml2YXRlCisJCQk9IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50czsKKwkJY29uc3QgdW5zaWduZWQgaW50IGR5bmFtaWMKKwkJCT0gYXRvbWljX3JlYWQoJnRvbW95b19keW5hbWljX21lbW9yeV9zaXplKTsKKwkJY2hhciBidWZmZXJbNjRdOworCisJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpCisJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCQkgIiAgIChRdW90YTogJTEwdSkiLAorCQkJCSB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKTsKKwkJZWxzZQorCQkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiU2hhcmVkOiAgJTEwdSVzXG4iLCBzaGFyZWQsIGJ1ZmZlcik7CisJCWlmICh0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKQorCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCisJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlByaXZhdGU6ICUxMHUlc1xuIiwgcHJpdmF0ZSwgYnVmZmVyKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiRHluYW1pYzogJTEwdVxuIiwgZHluYW1pYyk7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlRvdGFsOiAgICUxMHVcbiIsCisJCQkJIHNoYXJlZCArIHByaXZhdGUgKyBkeW5hbWljKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhIC0gU2V0IG1lbW9yeSBxdW90YS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCWlmIChzc2NhbmYoZGF0YSwgIlNoYXJlZDogJXUiLCAmc2l6ZSkgPT0gMSkKKwkJdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSA9IHNpemU7CisJZWxzZSBpZiAoc3NjYW5mKGRhdGEsICJQcml2YXRlOiAldSIsICZzaXplKSA9PSAxKQorCQl0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOWZjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaApAQCAtMCwwICsxLDY2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKKyAqCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgYWJzb2x1dGUgcGF0aG5hbWVzLiBUaGUgYmFzaXMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9ICisjZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAorCitzdHJ1Y3QgcGF0aDsKK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvOworc3RydWN0IHRvbW95b19pb19idWZmZXI7CisKKy8qIENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cik7CisKKy8qIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LiAqLworaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAorCQkJICAgICAgIGludCBuZXduYW1lX2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aChjb25zdCBjaGFyICpwYXRobmFtZSk7CisvKgorICogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBmaW5hbCBzeW1saW5rLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IHRoZSBwYXRobmFtZSBpcyBhbHJlYWR5IHNvbHZlZC4gKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpOworCisvKgorICogQWxsb2NhdGUgbWVtb3J5IGZvciBBQ0wgZW50cnkuCisgKiBUaGUgUkFNIGlzIGNodW5rZWQsIHNvIE5FVkVSIHRyeSB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBwb2ludGVyLgorICovCit2b2lkICp0b21veW9fYWxsb2NfZWxlbWVudChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qCisgKiBLZWVwIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBSQU0uCisgKiBUaGUgUkFNIGlzIHNoYXJlZCwgc28gTkVWRVIgdHJ5IHRvIG1vZGlmeSBvciBrZnJlZSgpIHRoZSByZXR1cm5lZCBuYW1lLgorICovCitjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgdXNlIChlLmcuIHBlcm1pc3Npb24gY2hlY2tzKS4gKi8KK3ZvaWQgKnRvbW95b19hbGxvYyhjb25zdCBzaXplX3Qgc2l6ZSk7CisKKy8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0b21veW9fYWxsb2MoKS4gKi8KK3ZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCk7CisKKy8qIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UuICovCitpbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBTZXQgbWVtb3J5IHF1b3RhLiAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4gKi8KK3ZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9IKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vdG9tb3lvLmMKKyAqCisgKiBMU00gaG9va3MgZm9yIFRPTU9ZTyBMaW51eC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisKK3N0YXRpYyBpbnQgdG9tb3lvX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAorCQkJICAgICAgIGdmcF90IGdmcCkKK3sKKwkvKgorCSAqIFNpbmNlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoiIGlzIGEgc2hhcmFibGUgcG9pbnRlciwKKwkgKiB3ZSBkb24ndCBuZWVkIHRvIGR1cGxpY2F0ZS4KKwkgKi8KKwluZXctPnNlY3VyaXR5ID0gb2xkLT5zZWN1cml0eTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fYnBybV9zZXRfY3JlZHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwkvKgorCSAqIERvIG9ubHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIG9mIGFuIGV4ZWN2ZQorCSAqIG9wZXJhdGlvbi4KKwkgKi8KKwlpZiAoYnBybS0+Y3JlZF9wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBMb2FkIHBvbGljeSBpZiAvc2Jpbi90b21veW8taW5pdCBleGlzdHMgYW5kIC9zYmluL2luaXQgaXMgcmVxdWVzdGVkCisJICogZm9yIHRoZSBmaXJzdCB0aW1lLgorCSAqLworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXRvbW95b19sb2FkX3BvbGljeShicHJtLT5maWxlbmFtZSk7CisJLyoKKwkgKiBUZWxsIHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KCkgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBvZiBhbgorCSAqIGV4ZWN2ZSBvcGVyYXRpb24uCisJICovCisJYnBybS0+Y3JlZC0+c2VjdXJpdHkgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gYnBybS0+Y3JlZC0+c2VjdXJpdHk7CisKKwkvKgorCSAqIEV4ZWN1dGUgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgcGF0aG5hbWUgcGFzc2VkIHRvIGRvX2V4ZWN2ZSgpCisJICogdXNpbmcgY3VycmVudCBkb21haW4uCisJICovCisJaWYgKCFkb21haW4pIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqbmV4dF9kb21haW4gPSBOVUxMOworCQlpbnQgcmV0dmFsID0gdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oYnBybSwgJm5leHRfZG9tYWluKTsKKworCQlpZiAoIXJldHZhbCkKKwkJCWJwcm0tPmNyZWQtPnNlY3VyaXR5ID0gbmV4dF9kb21haW47CisJCXJldHVybiByZXR2YWw7CisJfQorCS8qCisJICogUmVhZCBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBpbnRlcnByZXRlcnMgdXNpbmcgbmV4dCBkb21haW4uCisJICogJzEnIGlzIHRoZSByZXN1bHQgb2Ygb3Blbl90b19uYW1laV9mbGFncyhPX1JET05MWSkuCisJICovCisJcmV0dXJuIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oZG9tYWluLCAmYnBybS0+ZmlsZS0+Zl9wYXRoLCAxKTsKK30KKworI2lmZGVmIENPTkZJR19TWVNDVEwKKworc3RhdGljIGludCB0b21veW9fcHJlcGVuZChjaGFyICoqYnVmZmVyLCBpbnQgKmJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBuYW1lbGVuID0gc3RybGVuKHN0cik7CisKKwlpZiAoKmJ1ZmxlbiA8IG5hbWVsZW4pCisJCXJldHVybiAtRU5PTUVNOworCSpidWZsZW4gLT0gbmFtZWxlbjsKKwkqYnVmZmVyIC09IG5hbWVsZW47CisJbWVtY3B5KCpidWZmZXIsIHN0ciwgbmFtZWxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3N5c2N0bF9wYXRoIC0gcmV0dXJuIHRoZSByZWFscGF0aCBvZiBhIGN0bF90YWJsZS4KKyAqIEB0YWJsZTogcG9pbnRlciB0byAic3RydWN0IGN0bF90YWJsZSIuCisgKgorICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgQHRhYmxlIG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoaXMgZnVuY3Rpb24gZGlkbid0IHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY2hhciAqdG9tb3lvX3N5c2N0bF9wYXRoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCWludCBidWZsZW4gPSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTjsKKwljaGFyICpidWYgPSB0b21veW9fYWxsb2MoYnVmbGVuKTsKKwljaGFyICplbmQgPSBidWYgKyBidWZsZW47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCSotLWVuZCA9ICdcMCc7CisJYnVmbGVuLS07CisJd2hpbGUgKHRhYmxlKSB7CisJCWNoYXIgbnVtWzMyXTsKKwkJY29uc3QgY2hhciAqc3AgPSB0YWJsZS0+cHJvY25hbWU7CisKKwkJaWYgKCFzcCkgeworCQkJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOworCQkJc25wcmludGYobnVtLCBzaXplb2YobnVtKSAtIDEsICI9JWQ9IiwgdGFibGUtPmN0bF9uYW1lKTsKKwkJCXNwID0gbnVtOworCQl9CisJCWlmICh0b21veW9fcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCBzcCkgfHwKKwkJICAgIHRvbW95b19wcmVwZW5kKCZlbmQsICZidWZsZW4sICIvIikpCisJCQlnb3RvIG91dDsKKwkJdGFibGUgPSB0YWJsZS0+cGFyZW50OworCX0KKwlpZiAodG9tb3lvX3ByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIi9wcm9jL3N5cyIpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IHRvbW95b19lbmNvZGUoYnVmLCBlbmQgLSBidWYsIGVuZCk7Cisgb3V0OgorCWlmICghZXJyb3IpCisJCXJldHVybiBidWY7CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB0b21veW9fc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApCit7CisJaW50IGVycm9yOworCWNoYXIgKm5hbWU7CisKKwlvcCAmPSBNQVlfUkVBRCB8IE1BWV9XUklURTsKKwlpZiAoIW9wKQorCQlyZXR1cm4gMDsKKwluYW1lID0gdG9tb3lvX3N5c2N0bF9wYXRoKHRhYmxlKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybSh0b21veW9fZG9tYWluKCksIG5hbWUsIG9wKTsKKwl0b21veW9fZnJlZShuYW1lKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB0b21veW9fcGF0aF90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgbG9mZl90IGxlbmd0aCwKKwkJCQl1bnNpZ25lZCBpbnQgdGltZV9hdHRycykKK3sKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wsCisJCQkJICAgICAgIHBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3VubGluayhzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ta2RpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgIGludCBtb2RlKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9NS0RJUl9BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ybWRpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1JNRElSX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3N5bWxpbmsoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX21rbm9kKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCWludCB0eXBlID0gVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTDsKKworCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRkNIUjoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0w7CisJCWJyZWFrOworCWNhc2UgU19JRkJMSzoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQkxPQ0tfQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZJRk86CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZTT0NLOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtTT0NLX0FDTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIHR5cGUsICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLAorCQkJICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aDEgPSB7IG5ld19kaXItPm1udCwgb2xkX2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfZGlyLT5tbnQsIG5ld19kZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgxLCAmcGF0aDIpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3JlbmFtZShzdHJ1Y3QgcGF0aCAqb2xkX3BhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgICAgICBzdHJ1Y3QgcGF0aCAqbmV3X3BhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aDEgPSB7IG9sZF9wYXJlbnQtPm1udCwgb2xkX2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfcGFyZW50LT5tbnQsIG5ld19kZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9SRU5BTUVfQUNMLAorCQkJCSAgICAgICAmcGF0aDEsICZwYXRoMik7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2ZpbGVfZmNudGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWlmIChjbWQgPT0gRl9TRVRGTCAmJiAoKGFyZyBeIGZpbGUtPmZfZmxhZ3MpICYgT19BUFBFTkQpKQorCQlyZXR1cm4gdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbih0b21veW9fZG9tYWluKCksIGZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCit7CisJaW50IGZsYWdzID0gZi0+Zl9mbGFnczsKKworCWlmICgoZmxhZ3MgKyAxKSAmIE9fQUNDTU9ERSkKKwkJZmxhZ3MrKzsKKwlmbGFncyB8PSBmLT5mX2ZsYWdzICYgKE9fQVBQRU5EIHwgT19UUlVOQyk7CisJLyogRG9uJ3QgY2hlY2sgcmVhZCBwZXJtaXNzaW9uIGhlcmUgaWYgY2FsbGVkIGZyb20gZG9fZXhlY3ZlKCkuICovCisJaWYgKGN1cnJlbnQtPmluX2V4ZWN2ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24odG9tb3lvX2RvbWFpbigpLCAmZi0+Zl9wYXRoLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyB0b21veW9fc2VjdXJpdHlfb3BzID0geworCS5uYW1lICAgICAgICAgICAgICAgID0gInRvbW95byIsCisJLmNyZWRfcHJlcGFyZSAgICAgICAgPSB0b21veW9fY3JlZF9wcmVwYXJlLAorCS5icHJtX3NldF9jcmVkcyAgICAgID0gdG9tb3lvX2Jwcm1fc2V0X2NyZWRzLAorCS5icHJtX2NoZWNrX3NlY3VyaXR5ID0gdG9tb3lvX2Jwcm1fY2hlY2tfc2VjdXJpdHksCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5zeXNjdGwgICAgICAgICAgICAgID0gdG9tb3lvX3N5c2N0bCwKKyNlbmRpZgorCS5maWxlX2ZjbnRsICAgICAgICAgID0gdG9tb3lvX2ZpbGVfZmNudGwsCisJLmRlbnRyeV9vcGVuICAgICAgICAgPSB0b21veW9fZGVudHJ5X29wZW4sCisJLnBhdGhfdHJ1bmNhdGUgICAgICAgPSB0b21veW9fcGF0aF90cnVuY2F0ZSwKKwkucGF0aF91bmxpbmsgICAgICAgICA9IHRvbW95b19wYXRoX3VubGluaywKKwkucGF0aF9ta2RpciAgICAgICAgICA9IHRvbW95b19wYXRoX21rZGlyLAorCS5wYXRoX3JtZGlyICAgICAgICAgID0gdG9tb3lvX3BhdGhfcm1kaXIsCisJLnBhdGhfc3ltbGluayAgICAgICAgPSB0b21veW9fcGF0aF9zeW1saW5rLAorCS5wYXRoX21rbm9kICAgICAgICAgID0gdG9tb3lvX3BhdGhfbWtub2QsCisJLnBhdGhfbGluayAgICAgICAgICAgPSB0b21veW9fcGF0aF9saW5rLAorCS5wYXRoX3JlbmFtZSAgICAgICAgID0gdG9tb3lvX3BhdGhfcmVuYW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSBjdXJyZW50X2NyZWQoKTsKKworCWlmICghc2VjdXJpdHlfbW9kdWxlX2VuYWJsZSgmdG9tb3lvX3NlY3VyaXR5X29wcykpCisJCXJldHVybiAwOworCS8qIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KKwlpZiAocmVnaXN0ZXJfc2VjdXJpdHkoJnRvbW95b19zZWN1cml0eV9vcHMpKQorCQlwYW5pYygiRmFpbHVyZSByZWdpc3RlcmluZyBUT01PWU8gTGludXgiKTsKKwlwcmludGsoS0VSTl9JTkZPICJUT01PWU8gTGludXggaW5pdGlhbGl6ZWRcbiIpOworCWNyZWQtPnNlY3VyaXR5ID0gJnRvbW95b19rZXJuZWxfZG9tYWluOworCXRvbW95b19yZWFscGF0aF9pbml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3NlY3VyaXR5X2luaXRjYWxsKHRvbW95b19pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uaCBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM4ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSAorCitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKK3N0cnVjdCBwYXRoOworc3RydWN0IGlub2RlOworc3RydWN0IGxpbnV4X2JpbnBybTsKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcjsKKworaW50IHRvbW95b19jaGVja19maWxlX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHU4IHBlcm0pOworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJICAgc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqYnVmKTsKK2ludCB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGludCBmbGFnKTsKK2ludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCk7CitpbnQgdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMik7CitpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKTsKK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbik7CisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKworI2RlZmluZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAxCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEZpbGUgQ29udHJvbHMuICovCisKKy8qCisgKiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNwZWNpYWwuIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBzZXQKKyAqIGlmIGJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlIHNldC4gQm90aCBUWVBFX1JFQURfQUNMIGFuZAorICogVFlQRV9XUklURV9BQ0wgYXJlIGF1dG9tYXRpY2FsbHkgc2V0IGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgc2V0LgorICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgZWl0aGVyIFRZUEVfUkVBRF9BQ0wgb3IKKyAqIFRZUEVfV1JJVEVfQUNMIGlzIGNsZWFyZWQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlCisgKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBjbGVhcmVkLgorICovCisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wgICAgMAorI2RlZmluZSBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfQUNMICAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX1RZUEVfV1JJVEVfQUNMICAgICAgICAgMworI2RlZmluZSBUT01PWU9fVFlQRV9DUkVBVEVfQUNMICAgICAgICA0CisjZGVmaW5lIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wgICAgICAgIDUKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtESVJfQUNMICAgICAgICAgNgorI2RlZmluZSBUT01PWU9fVFlQRV9STURJUl9BQ0wgICAgICAgICA3CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LRklGT19BQ0wgICAgICAgIDgKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCAgICAgICAgOQorI2RlZmluZSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCAgICAgIDEwCisjZGVmaW5lIFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wgICAgICAgMTEKKyNkZWZpbmUgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMICAgICAxMgorI2RlZmluZSBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCAgICAgIDEzCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMICAgICAgMTQKKyNkZWZpbmUgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT04gMTUKKworI2RlZmluZSBUT01PWU9fVFlQRV9MSU5LX0FDTCAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OIDIKKworI2RlZmluZSBUT01PWU9fRE9NQUlOUE9MSUNZICAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19ET01BSU5fU1RBVFVTICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fUFJPQ0VTU19TVEFUVVMgICAgICAgIDMKKyNkZWZpbmUgVE9NT1lPX01FTUlORk8gICAgICAgICAgICAgICA0CisjZGVmaW5lIFRPTU9ZT19TRUxGRE9NQUlOICAgICAgICAgICAgNQorI2RlZmluZSBUT01PWU9fVkVSU0lPTiAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVE9NT1lPX1BST0ZJTEUgICAgICAgICAgICAgICA3CisjZGVmaW5lIFRPTU9ZT19NQU5BR0VSICAgICAgICAgICAgICAgOAorCitleHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZG9tYWluKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKK30KKworLyogQ2FsbGVyIGhvbGRzIHRhc2tsaXN0X2xvY2sgc3BpbmxvY2suICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19yZWFsX2RvbWFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QKKwkJCQkJCQkgICAgKnRhc2spCit7CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBnZXRfdGFza19jcmVkKHRhc2spOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGNyZWQtPnNlY3VyaXR5OworCisJcHV0X2NyZWQoY3JlZCk7CisJcmV0dXJuIGRvbWFpbjsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCit9CisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19IKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvS2NvbmZpZyBiL3NvdW5kL0tjb25maWcKaW5kZXggMjAwYWNhMS4uMWVjZWI4NSAxMDA2NDQKLS0tIGEvc291bmQvS2NvbmZpZworKysgYi9zb3VuZC9LY29uZmlnCkBAIC02MCw2ICs2MCw4IEBACiAKIHNvdXJjZSAic291bmQvYXJtL0tjb25maWciCiAKK3NvdXJjZSAic291bmQvYXRtZWwvS2NvbmZpZyIKKwogc291cmNlICJzb3VuZC9zcGkvS2NvbmZpZyIKIAogc291cmNlICJzb3VuZC9taXBzL0tjb25maWciCmRpZmYgLS1naXQgYS9zb3VuZC9NYWtlZmlsZSBiL3NvdW5kL01ha2VmaWxlCmluZGV4IGM3NmQ3MDcuLmVjNDY3ZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL01ha2VmaWxlCisrKyBiL3NvdW5kL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogb2JqLSQoQ09ORklHX1NPVU5EX1BSSU1FKSArPSBvc3MvCiBvYmotJChDT05GSUdfRE1BU09VTkQpICs9IG9zcy8KIG9iai0kKENPTkZJR19TTkQpICs9IGNvcmUvIGkyYy8gZHJpdmVycy8gaXNhLyBwY2kvIHBwYy8gYXJtLyBzaC8gc3ludGgvIHVzYi8gXAotCXNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvCisJc3BhcmMvIHNwaS8gcGFyaXNjLyBwY21jaWEvIG1pcHMvIHNvYy8gYXRtZWwvCiBvYmotJChDT05GSUdfU05EX0FPQSkgKz0gYW9hLwogCiAjIFRoaXMgb25lIG11c3QgYmUgY29tcGlsYWJsZSBldmVuIGlmIHNvdW5kIGlzIGNvbmZpZ3VyZWQgb3V0CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvYW9hLWdwaW8uaCBiL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCmluZGV4IGVlNjRmNWQuLjYwNjViMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCisrKyBiL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCkBAIC0zNCwxMCArMzQsMTIgQEAKIAl2b2lkICgqc2V0X2hlYWRwaG9uZSkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAJdm9pZCAoKnNldF9zcGVha2Vycykoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAJdm9pZCAoKnNldF9saW5lb3V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKKwl2b2lkICgqc2V0X21hc3Rlcikoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAKIAlpbnQgKCpnZXRfaGVhZHBob25lKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAJaW50ICgqZ2V0X3NwZWFrZXJzKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAJaW50ICgqZ2V0X2xpbmVvdXQpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KTsKKwlpbnQgKCpnZXRfbWFzdGVyKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAKIAl2b2lkICgqc2V0X2h3X3Jlc2V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvcmUvYWxzYS5jIGIvc291bmQvYW9hL2NvcmUvYWxzYS5jCmluZGV4IDYxNzg1MDQuLjBmYTM4NTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYworKysgYi9zb3VuZC9hb2EvY29yZS9hbHNhLmMKQEAgLTIzLDkgKzIzLDEwIEBACiAJCS8qIGNhbm5vdCBiZSBFRVhJU1QgZHVlIHRvIHVzYWdlIGluIGFvYV9mYWJyaWNfcmVnaXN0ZXIgKi8KIAkJcmV0dXJuIC1FQlVTWTsKIAotCWFsc2FfY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgbmFtZSwgbW9kLCBzaXplb2Yoc3RydWN0IGFvYV9jYXJkKSk7Ci0JaWYgKCFhbHNhX2NhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgbmFtZSwgbW9kLCBzaXplb2Yoc3RydWN0IGFvYV9jYXJkKSwKKwkJCSAgICAgICZhbHNhX2NhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWFvYV9jYXJkID0gYWxzYV9jYXJkLT5wcml2YXRlX2RhdGE7CiAJYW9hX2NhcmQtPmFsc2FfY2FyZCA9IGFsc2FfY2FyZDsKIAlhbHNhX2NhcmQtPmRldiA9IGRldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKaW5kZXggYzkzYWQ1ZC4uZGU4ZTAzYSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKKysrIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICIuLi9hb2EuaCIKIAotLyogVE9ETzogdGhlc2UgYXJlIDIwIGdsb2JhbCB2YXJpYWJsZXMKKy8qIFRPRE86IHRoZXNlIGFyZSBsb3RzIG9mIGdsb2JhbCB2YXJpYWJsZXMKICAqIHRoYXQgYXJlbid0IHVzZWQgb24gbW9zdCBtYWNoaW5lcy4uLgogICogTW92ZSB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqIHN0cnVjdHVyZSBhbmQgdXNlIHRoYXQuCkBAIC0yMyw2ICsyMyw3IEBACiAvKiB0aGVzZSBhcmUgdGhlIEdQSU8gbnVtYmVycyAocmVnaXN0ZXIgYWRkcmVzc2VzIGFzIG9mZnNldHMgaW50bwogICogdGhlIEdQSU8gc3BhY2UpICovCiBzdGF0aWMgaW50IGhlYWRwaG9uZV9tdXRlX2dwaW87CitzdGF0aWMgaW50IG1hc3Rlcl9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGFtcF9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGxpbmVvdXRfbXV0ZV9ncGlvOwogc3RhdGljIGludCBod19yZXNldF9ncGlvOwpAQCAtMzIsNiArMzMsNyBAQAogCiAvKiBzZWUgdGhlIFNXSVRDSF9HUElPIG1hY3JvICovCiBzdGF0aWMgaW50IGhlYWRwaG9uZV9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CitzdGF0aWMgaW50IG1hc3Rlcl9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGFtcF9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGxpbmVvdXRfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBod19yZXNldF9ncGlvX2FjdGl2ZXN0YXRlOwpAQCAtMTU2LDYgKzE1OCw3IEBACiBGVFJfR1BJTyhoZWFkcGhvbmUsIDApOwogRlRSX0dQSU8oYW1wLCAxKTsKIEZUUl9HUElPKGxpbmVvdXQsIDIpOworRlRSX0dQSU8obWFzdGVyLCAzKTsKIAogc3RhdGljIHZvaWQgZnRyX2dwaW9fc2V0X2h3X3Jlc2V0KHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pCiB7CkBAIC0xNzIsNiArMTc1LDggQEAKIAkJCSAgaHdfcmVzZXRfZ3Bpbywgdik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19tZXRob2RzIG1ldGhvZHM7CisKIHN0YXRpYyB2b2lkIGZ0cl9ncGlvX2FsbF9hbXBzX29mZihzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCkKIHsKIAlpbnQgc2F2ZWQ7CkBAIC0xODEsNiArMTg2LDggQEAKIAlmdHJfZ3Bpb19zZXRfaGVhZHBob25lKHJ0LCAwKTsKIAlmdHJfZ3Bpb19zZXRfYW1wKHJ0LCAwKTsKIAlmdHJfZ3Bpb19zZXRfbGluZW91dChydCwgMCk7CisJaWYgKG1ldGhvZHMuc2V0X21hc3RlcikKKwkJZnRyX2dwaW9fc2V0X21hc3RlcihydCwgMCk7CiAJcnQtPmltcGxlbWVudGF0aW9uX3ByaXZhdGUgPSBzYXZlZDsKIH0KIApAQCAtMTkzLDYgKzIwMCw4IEBACiAJZnRyX2dwaW9fc2V0X2hlYWRwaG9uZShydCwgKHM+PjApJjEpOwogCWZ0cl9ncGlvX3NldF9hbXAocnQsIChzPj4xKSYxKTsKIAlmdHJfZ3Bpb19zZXRfbGluZW91dChydCwgKHM+PjIpJjEpOworCWlmIChtZXRob2RzLnNldF9tYXN0ZXIpCisJCWZ0cl9ncGlvX3NldF9tYXN0ZXIocnQsIChzPj4zKSYxKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyX2hhbmRsZV9ub3RpZnkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjMxLDYgKzI0MCwxMiBAQAogCWdldF9ncGlvKCJody1yZXNldCIsICJhdWRpby1ody1yZXNldCIsCiAJCSAmaHdfcmVzZXRfZ3BpbywKIAkJICZod19yZXNldF9ncGlvX2FjdGl2ZXN0YXRlKTsKKwlpZiAoZ2V0X2dwaW8oIm1hc3Rlci1tdXRlIiwgTlVMTCwKKwkJICAgICAmbWFzdGVyX211dGVfZ3BpbywKKwkJICAgICAmbWFzdGVyX211dGVfZ3Bpb19hY3RpdmVzdGF0ZSkpIHsKKwkJbWV0aG9kcy5zZXRfbWFzdGVyID0gZnRyX2dwaW9fc2V0X21hc3RlcjsKKwkJbWV0aG9kcy5nZXRfbWFzdGVyID0gZnRyX2dwaW9fZ2V0X21hc3RlcjsKKwl9CiAKIAloZWFkcGhvbmVfZGV0ZWN0X25vZGUgPSBnZXRfZ3BpbygiaGVhZHBob25lLWRldGVjdCIsIE5VTEwsCiAJCQkJCSAmaGVhZHBob25lX2RldGVjdF9ncGlvLApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwppbmRleCBhZDYwZjVkLi5mYmY1YzkzIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYworKysgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwpAQCAtMSwxNiArMSwxNCBAQAogLyoKLSAqIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIC0tIGxheW91dCBmYWJyaWMKKyAqIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIC0tIGxheW91dC9tYWNoaW5lIGlkIGZhYnJpYwogICoKLSAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqCiAgKgotICogVGhpcyBmYWJyaWMgbW9kdWxlIGxvb2tzIGZvciBzb3VuZCBjb2RlY3MKLSAqIGJhc2VkIG9uIHRoZSBsYXlvdXQtaWQgcHJvcGVydHkgaW4gdGhlIGRldmljZSB0cmVlLgotICoKKyAqIFRoaXMgZmFicmljIG1vZHVsZSBsb29rcyBmb3Igc291bmQgY29kZWNzIGJhc2VkIG9uIHRoZQorICogbGF5b3V0LWlkIG9yIGRldmljZS1pZCBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUuCiAgKi8KLQogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjMsNyArNjEsNyBAQAogI2RlZmluZSBMQVlPVVRfRkxBR19DT01CT19MSU5FT1VUX1NQRElGCSgxPDwwKQogCiBzdHJ1Y3QgbGF5b3V0IHsKLQl1bnNpZ25lZCBpbnQgbGF5b3V0X2lkOworCXVuc2lnbmVkIGludCBsYXlvdXRfaWQsIGRldmljZV9pZDsKIAlzdHJ1Y3QgY29kZWNfY29ubmVjdF9pbmZvIGNvZGVjc1tNQVhfQ09ERUNTX1BFUl9CVVNdOwogCWludCBmbGFnczsKIApAQCAtMTExLDYgKzEwOSwxMCBAQAogTU9EVUxFX0FMSUFTKCJzb3VuZC1sYXlvdXQtOTgiKTsKIE1PRFVMRV9BTElBUygic291bmQtbGF5b3V0LTEwMCIpOwogCitNT0RVTEVfQUxJQVMoImFvYS1kZXZpY2UtaWQtMTQiKTsKK01PRFVMRV9BTElBUygiYW9hLWRldmljZS1pZC0yMiIpOworTU9EVUxFX0FMSUFTKCJhb2EtZGV2aWNlLWlkLTM1Iik7CisKIC8qIG9ueXggd2l0aCBhbGwgYnV0IG1pY3JvcGhvbmUgY29ubmVjdGVkICovCiBzdGF0aWMgc3RydWN0IGNvZGVjX2Nvbm5lY3Rpb24gb255eF9jb25uZWN0aW9uc19ub21pY1tdID0gewogCXsKQEAgLTUxOCw2ICs1MjAsMjcgQEAKIAkJLmNvbm5lY3Rpb25zID0gb255eF9jb25uZWN0aW9uc19ub2hlYWRwaG9uZXMsCiAJICB9LAogCX0sCisJLyogUG93ZXJNYWMzLDQgKi8KKwl7IC5kZXZpY2VfaWQgPSAxNCwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19ub2xpbmUsCisJICB9LAorCX0sCisJLyogUG93ZXJNYWMzLDYgKi8KKwl7IC5kZXZpY2VfaWQgPSAyMiwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19hbGwsCisJICB9LAorCX0sCisJLyogUG93ZXJCb29rNSwyICovCisJeyAuZGV2aWNlX2lkID0gMzUsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfYWxsLAorCSAgfSwKKwl9LAogCXt9CiB9OwogCkBAIC01MjYsNyArNTQ5LDcgQEAKIAlzdHJ1Y3QgbGF5b3V0ICpsOwogCiAJbCA9IGxheW91dHM7Ci0Jd2hpbGUgKGwtPmxheW91dF9pZCkgeworCXdoaWxlIChsLT5jb2RlY3NbMF0ubmFtZSkgewogCQlpZiAobC0+bGF5b3V0X2lkID09IGlkKQogCQkJcmV0dXJuIGw7CiAJCWwrKzsKQEAgLTUzNCw2ICs1NTcsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBsYXlvdXQgKmZpbmRfbGF5b3V0X2J5X2RldmljZSh1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGxheW91dCAqbDsKKworCWwgPSBsYXlvdXRzOworCXdoaWxlIChsLT5jb2RlY3NbMF0ubmFtZSkgeworCQlpZiAobC0+ZGV2aWNlX2lkID09IGlkKQorCQkJcmV0dXJuIGw7CisJCWwrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIHVzZV9sYXlvdXQoc3RydWN0IGxheW91dCAqbCkKIHsKIAlpbnQgaTsKQEAgLTU2NCw2ICs2MDAsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmhlYWRwaG9uZV9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmxpbmVvdXRfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpzcGVha2VyX2N0cmw7CisJc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqaGVhZHBob25lX2RldGVjdGVkX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqbGluZW91dF9kZXRlY3RlZF9jdHJsOwogCkBAIC02MTUsNiArNjUyLDcgQEAKIEFNUF9DT05UUk9MKGhlYWRwaG9uZSwgIkhlYWRwaG9uZSBTd2l0Y2giKTsKIEFNUF9DT05UUk9MKHNwZWFrZXJzLCAiU3BlYWtlcnMgU3dpdGNoIik7CiBBTVBfQ09OVFJPTChsaW5lb3V0LCAiTGluZS1PdXQgU3dpdGNoIik7CitBTVBfQ09OVFJPTChtYXN0ZXIsICJNYXN0ZXIgU3dpdGNoIik7CiAKIHN0YXRpYyBpbnQgZGV0ZWN0X2Nob2ljZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQpAQCAtODU1LDYgKzg5MywxMSBAQAogIAlsaW5lb3V0ID0gY29kZWMtPmdwaW8tPm1ldGhvZHMtPmdldF9kZXRlY3QoY29kZWMtPmdwaW8sCiAJCQkJCQkgICBBT0FfTk9USUZZX0xJTkVfT1VUKTsKIAorCWlmIChjb2RlYy0+Z3Bpby0+bWV0aG9kcy0+c2V0X21hc3RlcikgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJm1hc3Rlcl9jdGwsIGNvZGVjLT5ncGlvKTsKKwkJbGRldi0+bWFzdGVyX2N0cmwgPSBjdGw7CisJCWFvYV9zbmRfY3RsX2FkZChjdGwpOworCX0KIAl3aGlsZSAoY2MtPmNvbm5lY3RlZCkgewogCQlpZiAoY2MtPmNvbm5lY3RlZCAmIENDX1NQRUFLRVJTKSB7CiAJCQlpZiAoaGVhZHBob25lcyA8PSAwICYmIGxpbmVvdXQgPD0gMCkKQEAgLTkzOCw4ICs5ODEsOCBAQAogc3RhdGljIGludCBhb2FfZmFicmljX2xheW91dF9wcm9iZShzdHJ1Y3Qgc291bmRidXNfZGV2ICpzZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc291bmQgPSBOVUxMOwotCWNvbnN0IHVuc2lnbmVkIGludCAqbGF5b3V0X2lkOwotCXN0cnVjdCBsYXlvdXQgKmxheW91dDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmlkOworCXN0cnVjdCBsYXlvdXQgKmxheW91dCA9IE5VTEw7CiAJc3RydWN0IGxheW91dF9kZXYgKmxkZXYgPSBOVUxMOwogCWludCBlcnI7CiAKQEAgLTk1MiwxNSArOTk1LDE4IEBACiAJCWlmIChzb3VuZC0+dHlwZSAmJiBzdHJjYXNlY21wKHNvdW5kLT50eXBlLCAic291bmRjaGlwIikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXNvdW5kKSByZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXNvdW5kKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWxheW91dF9pZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOwotCWlmICghbGF5b3V0X2lkKQotCQlnb3RvIG91dG5vZGV2OwotCXByaW50ayhLRVJOX0lORk8gInNuZC1hb2EtZmFicmljLWxheW91dDogZm91bmQgYnVzIHdpdGggbGF5b3V0ICVkXG4iLAotCSAgICAgICAqbGF5b3V0X2lkKTsKKwlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOworCWlmIChpZCkgeworCQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9pZCgqaWQpOworCX0gZWxzZSB7CisJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCWlmIChpZCkKKwkJCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2RldmljZSgqaWQpOworCX0KIAotCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2lkKCpsYXlvdXRfaWQpOwogCWlmICghbGF5b3V0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAic25kLWFvYS1mYWJyaWMtbGF5b3V0OiB1bmtub3duIGxheW91dFxuIik7CiAJCWdvdG8gb3V0bm9kZXY7CkBAIC05NzYsNiArMTAyMiw3IEBACiAJbGRldi0+bGF5b3V0ID0gbGF5b3V0OwogCWxkZXYtPmdwaW8ubm9kZSA9IHNvdW5kLT5wYXJlbnQ7CiAJc3dpdGNoIChsYXlvdXQtPmxheW91dF9pZCkgeworCWNhc2UgMDogIC8qIGFueXRoaW5nIHdpdGggZGV2aWNlX2lkLCBub3QgbGF5b3V0X2lkICovCiAJY2FzZSA0MTogLyogdGhhdCB1bmtub3duIG1hY2hpbmUgbm8gb25lIHNlZW1zIHRvIGhhdmUgKi8KIAljYXNlIDUxOiAvKiBQb3dlckJvb2s1LDQgKi8KIAljYXNlIDU4OiAvKiBNYWMgTWluaSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYwppbmRleCBiZTQ2OGVkZi4uNDE4Yzg0YyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKKysrIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogaTJzYnVzIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqLwpAQCAtMTg2LDEzICsxODYsMjUgQEAKIAkJfQogCX0KIAlpZiAoaSA9PSAxKSB7Ci0JCWNvbnN0IHUzMiAqbGF5b3V0X2lkID0KLQkJCW9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOwotCQlpZiAobGF5b3V0X2lkKSB7Ci0JCQlsYXlvdXQgPSAqbGF5b3V0X2lkOworCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7CisKKwkJaWYgKGlkKSB7CisJCQlsYXlvdXQgPSAqaWQ7CiAJCQlzbnByaW50ZihkZXYtPnNvdW5kLm1vZGFsaWFzLCAzMiwKIAkJCQkgInNvdW5kLWxheW91dC0lZCIsIGxheW91dCk7CiAJCQlvayA9IDE7CisJCX0gZWxzZSB7CisJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImRldmljZS1pZCIsIE5VTEwpOworCQkJLyoKKwkJCSAqIFdlIHByb2JhYmx5IGNhbm5vdCBoYW5kbGUgYWxsIGRldmljZS1pZCBtYWNoaW5lcywKKwkJCSAqIHNvIHJlc3RyaWN0IHRvIHRob3NlIHdlIGRvIGhhbmRsZSBmb3Igbm93LgorCQkJICovCisJCQlpZiAoaWQgJiYgKCppZCA9PSAyMiB8fCAqaWQgPT0gMTQgfHwgKmlkID09IDM1KSkgeworCQkJCXNucHJpbnRmKGRldi0+c291bmQubW9kYWxpYXMsIDMyLAorCQkJCQkgImFvYS1kZXZpY2UtaWQtJWQiLCAqaWQpOworCQkJCW9rID0gMTsKKwkJCQlsYXlvdXQgPSAtMTsKKwkJCX0KIAkJfQogCX0KIAkvKiBmb3IgdGhlIHRpbWUgYmVpbmcsIHVudGlsIHdlIGNhbiBoYW5kbGUgbm9uLWxheW91dC1pZApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL0tjb25maWcgYi9zb3VuZC9hcm0vS2NvbmZpZwppbmRleCBmOGU2ZGU0Li44ODU2ODNhIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vS2NvbmZpZworKysgYi9zb3VuZC9hcm0vS2NvbmZpZwpAQCAtMTEsMTcgKzExLDYgQEAKIAogaWYgU05EX0FSTQogCi1jb25maWcgU05EX1NBMTFYWF9VREExMzQxCi0JdHJpc3RhdGUgIlNBMTF4eCBVREExMzQxVFMgZHJpdmVyIChpUGFxIEgzNjAwKSIKLQlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwICYmIEwzCi0Jc2VsZWN0IFNORF9QQ00KLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQ29tcGFxIGlQYXEgSDN4MDAgaGFuZGhlbGQgY29tcHV0ZXIKLQkgIGFuZCB3YW50IHRvIHVzZSBpdHMgUGhpbGlwcyBVREEgMTM0MSBhdWRpbyBjaGlwLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtc2ExMXh4LXVkYTEzNDEuCi0KIGNvbmZpZyBTTkRfQVJNQUFDSQogCXRyaXN0YXRlICJBUk0gUHJpbWVDZWxsIFBMMDQxIEFDIExpbmsgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vTWFrZWZpbGUgYi9zb3VuZC9hcm0vTWFrZWZpbGUKaW5kZXggMjA1NGRlMS4uNWE1NDllZCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL01ha2VmaWxlCisrKyBiL3NvdW5kL2FybS9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIEFMU0EKICMKIAotb2JqLSQoQ09ORklHX1NORF9TQTExWFhfVURBMTM0MSkgKz0gc25kLXNhMTF4eC11ZGExMzQxLm8gCi1zbmQtc2ExMXh4LXVkYTEzNDEtb2JqcwkJOj0gc2ExMXh4LXVkYTEzNDEubwotCiBvYmotJChDT05GSUdfU05EX0FSTUFBQ0kpCSs9IHNuZC1hYWNpLm8KIHNuZC1hYWNpLW9ianMJCQk6PSBhYWNpLm8gZGV2ZG1hLm8KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggNzcyOTAxZS4uN2ZiZDY4ZiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05OTUsMTAgKzk5NSwxMSBAQAogewogCXN0cnVjdCBhYWNpICphYWNpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IGFhY2lfZnJlZV9jYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDM1YWZkMGMuLjc3OTNkMmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KQEAgLTMxLDYgKzMwLDcgQEAKIHN0YXRpYyB2b2xhdGlsZSBsb25nIGdzcl9iaXRzOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdjb25mX2NsazsKK3N0YXRpYyBpbnQgcmVzZXRfZ3BpbzsKIAogLyoKICAqIEJld2FyZSBQWEEyN3ggYnVnczoKQEAgLTQyLDYgKzQyLDQ1IEBACiAgKiAxIGppZmZ5IHRpbWVvdXQgaWYgaW50ZXJydXB0IG5ldmVyIGNvbWVzKS4KICAqLwogCitlbnVtIHsKKwlSRVNFVEdQSU9fRk9SQ0VfSElHSCwKKwlSRVNFVEdQSU9fRk9SQ0VfTE9XLAorCVJFU0VUR1BJT19OT1JNQUxfQUxURlVOQworfTsKKworLyoqCisgKiBzZXRfcmVzZXRncGlvX21vZGUgLSBjb21wdXRlcyBhbmQgc2V0cyB0aGUgQUM5N19SRVNFVCBncGlvIG1vZGUgb24gUFhBCisgKiBAbW9kZTogY2hvc2VuIGFjdGlvbgorICoKKyAqIEFzIHRoZSBQWEEyN3ggQ1BVcyBzdWZmZXIgZnJvbSBhIEFDOTcgYnVnLCBhIG1hbnVhbCBjb250cm9sIG9mIHRoZSByZXNldCBsaW5lCisgKiBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHByb3BlciB3b3JrIG9mIEFDOTcgcmVzZXQgbGluZS4gIFRoaXMgZnVuY3Rpb24KKyAqIGNvbXB1dGVzIHRoZSBjb3JyZWN0IGdwaW9fbW9kZSBmb3IgZnVydGhlciB1c2UgYnkgcmVzZXQgZnVuY3Rpb25zLCBhbmQKKyAqIGFwcGxpZWQgdGhlIGNoYW5nZSB0aHJvdWdoIHB4YV9ncGlvX21vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9yZXNldGdwaW9fbW9kZShpbnQgcmVzZXRncGlvX2FjdGlvbikKK3sKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAocmVzZXRfZ3BpbykKKwkJc3dpdGNoIChyZXNldGdwaW9fYWN0aW9uKSB7CisJCWNhc2UgUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DOgorCQkJaWYgKHJlc2V0X2dwaW8gPT0gMTEzKQorCQkJCW1vZGUgPSAxMTMgfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1c7CisJCQlpZiAocmVzZXRfZ3BpbyA9PSA5NSkKKwkJCQltb2RlID0gOTUgfCBHUElPX0FMVF9GTl8xX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9MT1c6CisJCQltb2RlID0gcmVzZXRfZ3BpbyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0xPVzsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9ISUdIOgorCQkJbW9kZSA9IHJlc2V0X2dwaW8gfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIOworCQkJYnJlYWs7CisJCX07CisKKwlpZiAobW9kZSkKKwkJcHhhX2dwaW9fbW9kZShtb2RlKTsKK30KKwogdW5zaWduZWQgc2hvcnQgcHhhMnh4X2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKQEAgLTEzNywxMCArMTc2LDEwIEBACiAKIAkvKiB3YXJtIHJlc2V0IGJyb2tlbiBvbiBCdWx2ZXJkZSwKIAkgICBzbyBtYW51YWxseSBrZWVwIEFDOTcgcmVzZXQgaGlnaCAqLwotCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19GT1JDRV9ISUdIKTsKIAl1ZGVsYXkoMTApOwogCUdDUiB8PSBHQ1JfV0FSTV9SU1Q7Ci0JcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJdWRlbGF5KDUwMCk7CiB9CiAKQEAgLTMwOCw4ICszNDcsOCBAQAogCQlweGFfZ3Bpb19tb2RlKEdQSU8yOV9TREFUQV9JTl9BQzk3X01EKTsKIAl9CiAJaWYgKGNwdV9pc19weGEyN3goKSkgewotCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwkJLyogVXNlIEdQSU8gMTEzIG9yIDk1IGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KKwkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJfQogCWNsa19lbmFibGUoYWM5N19jbGspOwogCXJldHVybiAwOwpAQCAtMzIwLDYgKzM1OSwyNyBAQAogaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19od19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBkYXRhKSB7CisJCXN3aXRjaCAocGRhdGEtPnJlc2V0X2dwaW8pIHsKKwkJY2FzZSA5NToKKwkJY2FzZSAxMTM6CisJCQlyZXNldF9ncGlvID0gcGRhdGEtPnJlc2V0X2dwaW87CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkludmFsaWQgcmVzZXQgR1BJTyAlZFxuIiwKKwkJCQlwZGF0YS0+cmVzZXRfZ3Bpbyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY3B1X2lzX3B4YTI3eCgpKQorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwl9CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwpAQCAtMzMwLDcgKzM5MCw3IEBACiAKIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7CiAJCS8qIFVzZSBHUElPIDExMyBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCi0JCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCQlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKIAkJYWM5N2NvbmZfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJBQzk3Q09ORkNMSyIpOwogCQlpZiAoSVNfRVJSKGFjOTdjb25mX2NsaykpIHsKIAkJCXJldCA9IFBUUl9FUlIoYWM5N2NvbmZfY2xrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggODVjZjU5MS4uYzU3MGViZCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTIwLDggKzIwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcHhhMnh4LWxpYi5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIApAQCAtMTczLDEwICsxNzEsOSBAQAogCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3X3RlbXBsYXRlOwogCWludCByZXQ7CiAKLQlyZXQgPSAtRU5PTUVNOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCi0JCQkgICAgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQkgICAgICBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAogCWNhcmQtPmRldiA9ICZkZXYtPmRldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKaW5kZXggNzVhMGQ3NC4uMTA4YjY0MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jCkBAIC0xMiw4ICsxMiw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3B4YTJ4eC1saWIuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjZDUxZC4uMDAwMDAwMAotLS0gYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYworKysgL2Rldi9udWxsCkBAIC0xLDk4MyArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgUGhpbGlwcyBVREExMzQxVFMgb24gQ29tcGFxIGlQQVEgSDM2MDAgc291bmRjYXJkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICogCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgICBUb21hcyBLYXNwYXJlayAgaW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gaDM2MDAtdWRhMTM0MS5jIGZyb20gT1NTCi0gKiAyMDAyLTAzLTIwICAgVG9tYXMgS2FzcGFyZWsgIHBsYXliYWNrIG92ZXIgQUxTQSBpcyB3b3JraW5nCi0gKiAyMDAyLTAzLTI4ICAgVG9tYXMgS2FzcGFyZWsgIHBsYXliYWNrIG92ZXIgT1NTIGVtdWxhdGlvbiBpcyB3b3JraW5nCi0gKiAyMDAyLTAzLTI5ICAgVG9tYXMgS2FzcGFyZWsgIGJhc2ljIGNhcHR1cmUgaXMgd29ya2luZyAobmF0aXZlIEFMU0EpCi0gKiAyMDAyLTAzLTI5ICAgVG9tYXMgS2FzcGFyZWsgIGNhcHR1cmUgaXMgd29ya2luZyAoT1NTIGVtdWxhdGlvbikKLSAqIDIwMDItMDQtMDQgICBUb21hcyBLYXNwYXJlayAgYmV0dGVyIHJhdGVzIGhhbmRsaW5nIChhbGxvdyBub24tc3RhbmRhcmQgcmF0ZXMpCi0gKiAyMDAzLTAyLTE0ICAgQnJpYW4gQXZlcnkgICAgIGZpeGVkIGZ1bGwgZHVwbGV4IG1vZGUsIG90aGVyIHVwZGF0ZXMKLSAqIDIwMDMtMDItMjAgICBUb21hcyBLYXNwYXJlayAgbWVyZ2VkIHVwZGF0ZXMgYnkgQnJpYW4gKGV4Y2VwdCBIQUwpCi0gKiAyMDAzLTA0LTE5ICAgSmFyb3NsYXYgS3lzZWxhIHJlY29kZWQgRE1BIHN0dWZmIHRvIGZvbGxvdyAyLjQuMThybWszLWhoMjQga2VybmVsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgc3VzcGVuZCBhbmQgcmVzdW1lCi0gKiAyMDAzLTA0LTI4ICAgVG9tYXMgS2FzcGFyZWsgIHVwZGF0ZWQgd29yayBieSBKYXJvc2xhdiB0byBjb21waWxlIGl0IHVuZGVyIDIuNS54IGFnYWluCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZCBIQUwgbGF5ZXIgKHBhdGNoZXMgZnJvbSBCcmlhbikKLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIFRvIHVuZGVyc3RhbmQgd2hhdCBBbHNhIERyaXZlcnMgc2hvdWxkIGJlIGRvaW5nIGxvb2sgYXQgIldyaXRpbmcgYW4gQWxzYSBEcml2ZXIiIGJ5IFRha2FzaGkgSXdhaQotKiBhdmFpbGFibGUgaW4gdGhlIEFsc2EgZG9jIHNlY3Rpb24gb24gdGhlIHdlYnNpdGUJCQotKiAKLSogQSBmZXcgbm90ZXMgdG8gbWFrZSB0aGluZ3MgY2xlYXJlci4gVGhlIFVEQTEzNDEgaXMgaG9va2VkIHVwIHRvIFNlcmlhbCBwb3J0IDQgb24gdGhlIFNBMTEwMC4KLSogV2UgYXJlIHVzaW5nICBTU1AgbW9kZSB0byB0YWxrIHRvIHRoZSBVREExMzQxLiBUaGUgVURBMTM0MSBiaXQgJiB3b3Jkc2VsZWN0IGNsb2NrcyBhcmUgZ2VuZXJhdGVkCi0qIGJ5IHRoaXMgVUFSVC4gVW5mb3J0dW5hdGVseSwgdGhlIGNsb2NrIG9ubHkgcnVucyBpZiB0aGUgdHJhbnNtaXQgYnVmZmVyIGhhcyBzb21ldGhpbmcgaW4gaXQuCi0qIFNvLCBpZiB3ZSBhcmUganVzdCByZWNvcmRpbmcsIHdlIGZlZWQgdGhlIHRyYW5zbWl0IERNQSBzdHJlYW0gYSBidW5jaCBvZiAweDAwMDAgc28gdGhhdCB0aGUKLSogdHJhbnNtaXQgYnVmZmVyIGlzIGZ1bGwgYW5kIHRoZSBjbG9jayBrZWVwcyBnb2luZy4gVGhlIHplcm9lcyBjb21lIGZyb20gRkxVU0hfQkFTRV9QSFlTIHdoaWNoCi0qIGlzIGEgbWVtIGxvYyB0aGF0IGFsd2F5cyBkZWNvZGVzIHRvIDAncyB3LyBubyBvZmYgY2hpcCBhY2Nlc3MuCi0qCi0qIFNvbWUgYWxzYSB0ZXJtaW5vbG9neToKLSoJZnJhbWUgPT4gbnVtX2NoYW5uZWxzICogc2FtcGxlX3NpemUgIGUuZyBzdGVyZW8gMTYgYml0IGlzIDIgKiAxNiA9IDMyIGJ5dGVzCi0qCXBlcmlvZCA9PiB0aGUgbGVhc3QgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgZS5nLiB3ZSBoYXZlIGEgMTAyNCBieXRlCi0qICAgICAgICAgICAgIGJ1ZmZlciBhbmQgNCBwZXJpb2RzIGluIHRoZSBydW50aW1lIHN0cnVjdHVyZSB0aGlzIG1lYW5zIHdlJ2xsIGdldCBhbiBpbnQgZXZlcnkgMjU2Ci0qICAgICAgICAgICAgIGJ5dGVzIG9yIDQgdGltZXMgcGVyIGJ1ZmZlci4KLSogICAgICAgICAgICAgQSBudW1iZXIgb2YgdGhlIHNpemVzIGFyZSBpbiBmcmFtZXMgcmF0aGVyIHRoYW4gYnl0ZXMsIHVzZSBmcmFtZXNfdG9fYnl0ZXMgYW5kCi0qICAgICAgICAgICAgIGJ5dGVzX3RvX2ZyYW1lcyB0byBjb252ZXJ0LiAgVGhlIGVhc2llc3Qgd2F5IHRvIHRlbGwgdGhlIHVuaXRzIGlzIHRvIGxvb2sgYXQgdGhlCi0qICAgICAgICAgICAgIHR5cGUgaS5lLiBydW50aW1lLT4gYnVmZmVyX3NpemUgaXMgaW4gZnJhbWVzIGFuZCBpdHMgdHlwZSBpcyBzbmRfcGNtX3VmcmFtZXNfdAotKiAgICAgICAgICAgICAKLSoJTm90ZXMgYWJvdXQgdGhlIHBvaW50ZXIgZnhuOgotKglUaGUgcG9pbnRlciBmeG4gbmVlZHMgdG8gcmV0dXJuIHRoZSBvZmZzZXQgaW50byB0aGUgZG1hIGJ1ZmZlciBpbiBmcmFtZXMuCi0qCUludGVycnVwdHMgbXVzdCBiZSBibG9ja2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBkbWFfZ2V0X3BvcyBmeG4gdG8gYXZvaWQgcmFjZSB3aXRoIGludGVycnVwdHMuCi0qCi0qCU5vdGVzIGFib3V0IHBhdXNlL3Jlc3VtZQotKglJbXBsZW1lbnRpbmcgdGhpcyB3b3VsZCBiZSBjb21wbGljYXRlZCBzbyBpdCdzIHNraXBwZWQuICBUaGUgcHJvYmxlbSBjYXNlIGlzOgotKglBIGZ1bGwgZHVwbGV4IGNvbm5lY3Rpb24gaXMgZ29pbmcsIHRoZW4gcGxheSBpcyBwYXVzZWQuIEF0IHRoaXMgcG9pbnQgeW91IG5lZWQgdG8gc3RhcnQgeG1pdHRpbmcKLSoJMCdzIHRvIGtlZXAgdGhlIHJlY29yZCBhY3RpdmUgd2hpY2ggbWVhbnMgeW91IGNhbnQganVzdCBmcmVlemUgdGhlIGRtYSBhbmQgcmVzdW1lIGl0IGxhdGVyIHlvdSdkCi0qCW5lZWQgdG8Jc2F2ZSBvZmYgdGhlIGRtYSBpbmZvLCBhbmQgcmVzdG9yZSBpdCBwcm9wZXJseSBvbiBhIHJlc3VtZS4gIFllYWNoIQotKgotKglOb3RlcyBhYm91dCB0cmFuc2ZlciBtZXRob2RzOgotKglUaGUgYXN5bmMgd3JpdGUgY2FsbHMgZmFpbC4gIEkgcHJvYmFibHkgbmVlZCB0byBpbXBsZW1lbnQgc29tZXRoaW5nIGVsc2UgdG8gc3VwcG9ydCB0aGVtPwotKiAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2lmZGVmIENPTkZJR19QTQotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2gzNjAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbDMvbDMuaD4KLQotI3VuZGVmIERFQlVHX01PREUKLSN1bmRlZiBERUJVR19GVU5DVElPTl9OQU1FUwotI2luY2x1ZGUgPHNvdW5kL3VkYTEzNDEuaD4KLQotLyoKLSAqIEZJWE1FOiBJcyB0aGlzIGVub3VnaCBhcyBhdXRvZGV0ZWN0aW9uIG9mIDIuNC5YLXJta1ktaGhaIGtlcm5lbHM/Ci0gKiBXZSB1c2UgRE1BIHN0dWZmIGZyb20gMi40LjE4LXJtazMtaGgyNCBoZXJlIHRvIGJlIGFibGUgdG8gY29tcGlsZSB0aGlzCi0gKiBtb2R1bGUgZm9yIEZhbWlsaWFyIDAuNi4xCi0gKi8KLQotLyoge3t7IFR5cGUgZGVmaW5pdGlvbnMgKi8KLQotTU9EVUxFX0FVVEhPUigiVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU0ExMTAwL1NBMTExMSArIFVEQTEzNDFUUyBkcml2ZXIgZm9yIEFMU0EiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1VEQTEzNDEsaVBBUSBIMzYwMCBVREExMzQxVFN9fSIpOwotCi1zdGF0aWMgY2hhciAqaWQ7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KLQotbW9kdWxlX3BhcmFtKGlkLCBjaGFycCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBTQTExMDAvU0ExMTExICsgVURBMTM0MVRTIHNvdW5kY2FyZC4iKTsKLQotc3RydWN0IGF1ZGlvX3N0cmVhbSB7Ci0JY2hhciAqaWQ7CQkvKiBpZGVudGlmaWNhdGlvbiBzdHJpbmcgKi8KLQlpbnQgc3RyZWFtX2lkOwkJLyogbnVtZXJpYyBpZGVudGlmaWNhdGlvbiAqLwkKLQlkbWFfZGV2aWNlX3QgZG1hX2RldjsJLyogZGV2aWNlIGlkZW50aWZpZXIgZm9yIERNQSAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQlkbWFjaF90IGRtYWNoOwkJLyogZG1hIGNoYW5uZWwgaWRlbnRpZmljYXRpb24gKi8KLSNlbHNlCi0JZG1hX3JlZ3NfdCAqZG1hX3JlZ3M7CS8qIHBvaW50cyB0byBvdXIgRE1BIHJlZ2lzdGVycyAqLwotI2VuZGlmCi0JdW5zaWduZWQgaW50IGFjdGl2ZToxOwkvKiB3ZSBhcmUgdXNpbmcgdGhpcyBzdHJlYW0gZm9yIHRyYW5zZmVyIG5vdyAqLwotCWludCBwZXJpb2Q7CQkvKiBjdXJyZW50IHRyYW5zZmVyIHBlcmlvZCAqLwotCWludCBwZXJpb2RzOwkJLyogY3VycmVudCBjb3VudCBvZiBwZXJpb2RzIHJlZ2lzdGVyZCBpbiB0aGUgRE1BIGVuZ2luZSAqLwotCWludCB0eF9zcGluOwkJLyogYXJlIHdlIHJlY29kaW5nIC0gZmxhZyB1c2VkIHRvIGRvIERNQSB0cmFucy4gZm9yIHN5bmMgKi8KLQl1bnNpZ25lZCBpbnQgb2xkX29mZnNldDsKLQlzcGlubG9ja190IGRtYV9sb2NrOwkvKiBmb3IgbG9ja2luZyBpbiBETUEgb3BlcmF0aW9ucyAoc2VlIGRtYS1zYTExMDAuYyBpbiB0aGUga2VybmVsKSAqLwotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3RyZWFtOwotfTsKLQotc3RydWN0IHNhMTF4eF91ZGExMzQxIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MTsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCWxvbmcgc2FtcGxlcmF0ZTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtIHNbMl07CS8qIHBsYXliYWNrICYgY2FwdHVyZSAqLwotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCByYXRlc1tdID0gewotCTgwMDAsICAxMDY2NiwgMTA5ODUsIDE0NjQ3LAotCTE2MDAwLCAyMTk3MCwgMjIwNTAsIDI0MDAwLAotCTI5NDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBod19jb25zdHJhaW50c19yYXRlcyA9IHsKLQkuY291bnQJPSBBUlJBWV9TSVpFKHJhdGVzKSwKLQkubGlzdAk9IHJhdGVzLAotCS5tYXNrCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgQ2xvY2sgYW5kIHNhbXBsZSByYXRlIHN0dWZmICovCi0KLS8qCi0gKiBTdG9wLWdhcCBzb2x1dGlvbiB1bnRpbCByZXN0IG9mIGhoLm9yZyBIQUwgc3R1ZmYgaXMgbWVyZ2VkLgotICovCi0jZGVmaW5lIEdQSU9fSDM2MDBfQ0xLX1NFVDAJCUdQSU9fR1BJTyAoMTIpCi0jZGVmaW5lIEdQSU9fSDM2MDBfQ0xLX1NFVDEJCUdQSU9fR1BJTyAoMTMpCi0KLSNpZmRlZiBDT05GSUdfU0ExMTAwX0gzWFhYCi0jZGVmaW5lCWNscl9zYTExeHhfdWRhMTM0MV9lZ3Bpbyh4KQljbHJfaDM2MDBfZWdwaW8oeCkKLSNkZWZpbmUgc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKHgpCXNldF9oMzYwMF9lZ3Bpbyh4KQotI2Vsc2UKLSNlcnJvciBUaGlzIGRyaXZlciBjb3VsZCBzZXJ2ZSBIM3gwMCBoYW5kaGVsZHMgb25seSEKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9zZXRfYXVkaW9fY2xvY2sobG9uZyB2YWwpCi17Ci0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIDI0MDAwOiBjYXNlIDMyMDAwOiBjYXNlIDQ4MDAwOgkvKiAwMDogMTIuMjg4IE1IeiAqLwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMCB8IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAyMjA1MDogY2FzZSAyOTQwMDogY2FzZSA0NDEwMDoJLyogMDE6IDExLjI4OTYgTUh6ICovCi0JCUdQU1IgPSBHUElPX0gzNjAwX0NMS19TRVQwOwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDgwMDA6IGNhc2UgMTA2NjY6IGNhc2UgMTYwMDA6CS8qIDEwOiA0LjA5NiBNSHogKi8KLQkJR1BDUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDA7Ci0JCUdQU1IgPSBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgMTA5ODU6IGNhc2UgMTQ2NDc6IGNhc2UgMjE5NzA6CS8qIDExOiA1LjYyNDUgTUh6ICovCi0JCUdQU1IgPSBHUElPX0gzNjAwX0NMS19TRVQwIHwgR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxLCBsb25nIHJhdGUpCi17Ci0JaW50IGNsa19kaXYgPSAwOwotCWludCBjbGs9MDsKLQotCS8qIFdlIGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoIGNsb2NrcyB3aGVuIGZyYW1lcyBhcmUgaW4gZmxpZ2h0ICovCi0JU2VyNFNTQ1IwICY9IH5TU0NSMF9TU0U7Ci0JLyogd2FpdCBmb3IgYW55IGZyYW1lIHRvIGNvbXBsZXRlICovCi0JdWRlbGF5KDEyNSk7Ci0KLQkvKgotCSAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBjbG9jayBzb3VyY2VzOgotCSAqIDQuMDk2IE1IeiwgNS42MjQ1IE1IeiwgMTEuMjg5NiBNSHosIDEyLjI4OCBNSHoKLQkgKiBUaG9zZSBjYW4gYmUgZGl2aWRlZCBlaXRoZXIgYnkgMjU2LCAzODQgb3IgNTEyLgotCSAqIFRoaXMgbWFrZXMgdXAgMTIgY29tYmluYXRpb25zIGZvciB0aGUgZm9sbG93aW5nIHNhbXBsZXJhdGVzLi4uCi0JICovCi0JaWYgKHJhdGUgPj0gNDgwMDApCi0JCXJhdGUgPSA0ODAwMDsKLQllbHNlIGlmIChyYXRlID49IDQ0MTAwKQotCQlyYXRlID0gNDQxMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAzMjAwMCkKLQkJcmF0ZSA9IDMyMDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjk0MDApCi0JCXJhdGUgPSAyOTQwMDsKLQllbHNlIGlmIChyYXRlID49IDI0MDAwKQotCQlyYXRlID0gMjQwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyMjA1MCkKLQkJcmF0ZSA9IDIyMDUwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjE5NzApCi0JCXJhdGUgPSAyMTk3MDsKLQllbHNlIGlmIChyYXRlID49IDE2MDAwKQotCQlyYXRlID0gMTYwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxNDY0NykKLQkJcmF0ZSA9IDE0NjQ3OwotCWVsc2UgaWYgKHJhdGUgPj0gMTA5ODUpCi0JCXJhdGUgPSAxMDk4NTsKLQllbHNlIGlmIChyYXRlID49IDEwNjY2KQotCQlyYXRlID0gMTA2NjY7Ci0JZWxzZQotCQlyYXRlID0gODAwMDsKLQotCS8qIFNldCB0aGUgZXh0ZXJuYWwgY2xvY2sgZ2VuZXJhdG9yICovCi0JCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X2F1ZGlvX2Nsb2NrKHJhdGUpOwotCi0JLyogU2VsZWN0IHRoZSBjbG9jayBkaXZpc29yICovCi0Jc3dpdGNoIChyYXRlKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTA5ODU6Ci0JY2FzZSAyMjA1MDoKLQljYXNlIDI0MDAwOgotCQljbGsgPSBGNTEyOwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDE2KTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjAwMDoKLQljYXNlIDIxOTcwOgotCWNhc2UgNDQxMDA6Ci0JY2FzZSA0ODAwMDoKLQkJY2xrID0gRjI1NjsKLQkJY2xrX2RpdiA9IFNTQ1IwX1NlckNsa0Rpdig4KTsKLQkJYnJlYWs7Ci0JY2FzZSAxMDY2NjoKLQljYXNlIDE0NjQ3OgotCWNhc2UgMjk0MDA6Ci0JY2FzZSAzMjAwMDoKLQkJY2xrID0gRjM4NDsKLQkJY2xrX2RpdiA9IFNTQ1IwX1NlckNsa0RpdigxMik7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEZNVCBzZXR0aW5nIHNob3VsZCBiZSBtb3ZlZCBhd2F5IHdoZW4gb3RoZXIgRk1UcyBhcmUgYWRkZWQgKEZJWE1FKSAqLwotCWwzX2NvbW1hbmQoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEsIENNRF9GT1JNQVQsICh2b2lkICopTFNCMTYpOwotCQotCWwzX2NvbW1hbmQoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEsIENNRF9GUywgKHZvaWQgKiljbGspOyAgICAgICAgCi0JU2VyNFNTQ1IwID0gKFNlcjRTU0NSMCAmIH4weGZmMDApICsgY2xrX2RpdiArIFNTQ1IwX1NTRTsKLQlzYTExeHhfdWRhMTM0MS0+c2FtcGxlcmF0ZSA9IHJhdGU7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgSFcgaW5pdCBhbmQgc2h1dGRvd24gKi8KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfYXVkaW9faW5pdChzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBTZXR1cCBETUEgc3R1ZmYgKi8KLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5pZCA9ICJVREExMzQxIG91dCI7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3RyZWFtX2lkID0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5kbWFfZGV2ID0gRE1BX1NlcjRTU1BXcjsKLQotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uaWQgPSAiVURBMTM0MSBpbiI7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdHJlYW1faWQgPSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFfZGV2ID0gRE1BX1NlcjRTU1BSZDsKLQotCS8qIEluaXRpYWxpemUgdGhlIFVEQTEzNDEgaW50ZXJuYWwgc3RhdGUgKi8KLSAgICAgICAKLQkvKiBTZXR1cCB0aGUgdWFydHMgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JR0FGUiB8PSAoR1BJT19TU1BfQ0xLKTsKLQlHUERSICY9IH4oR1BJT19TU1BfQ0xLKTsKLQlTZXI0U1NDUjAgPSAwOwotCVNlcjRTU0NSMCA9IFNTQ1IwX0RhdGFTaXplKDE2KSArIFNTQ1IwX1RJICsgU1NDUjBfU2VyQ2xrRGl2KDgpOwotCVNlcjRTU0NSMSA9IFNTQ1IxX1NDbGtJYWN0TCArIFNTQ1IxX1NDbGsxUCArIFNTQ1IxX0V4dENsazsKLQlTZXI0U1NDUjAgfD0gU1NDUjBfU1NFOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIEVuYWJsZSB0aGUgYXVkaW8gcG93ZXIgKi8KLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0NPREVDX05SRVNFVCk7Ci0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQVVESU9fT04pOwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLSAKLQkvKiBXYWl0IGZvciB0aGUgVURBMTM0MSB0byB3YWtlIHVwICovCi0JbWRlbGF5KDEpOyAvL0ZJWE1FIC0gd2FzIHJlbW92ZWQgYnkgUGVyZXggLSBXaHk/Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBVREExMzQxIGludGVybmFsIHN0YXRlICovCi0JbDNfb3BlbihzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSk7Ci0JCi0JLyogZXh0ZXJuYWwgY2xvY2sgY29uZmlndXJhdGlvbiAoYWZ0ZXIgbDNfb3BlbiAtIHJlZ3MgbXVzdCBiZSBpbml0aWFsaXplZCAqLwotCXNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKHNhMTF4eF91ZGExMzQxLCBzYTExeHhfdWRhMTM0MS0+c2FtcGxlcmF0ZSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgVURBMTM0MSB0byB3YWtlIHVwICovCi0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQltZGVsYXkoMSk7CQotCi0JLyogbWFrZSB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgdW5zd2FwcGVkIChmbGlwIHRoZSBXUyBsYXRjaCkgKi8KLQlTZXI0U1NEUiA9IDA7Ci0KLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX2F1ZGlvX3NodXRkb3duKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEpCi17Ci0JLyogbXV0ZSBvbiAqLwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLQkKLQkvKiBkaXNhYmxlIHRoZSBhdWRpbyBwb3dlciBhbmQgYWxsIHNpZ25hbHMgbGVhZGluZyB0byB0aGUgYXVkaW8gY2hpcCAqLwotCWwzX2Nsb3NlKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxKTsKLQlTZXI0U1NDUjAgPSAwOwotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0NPREVDX05SRVNFVCk7Ci0KLQkvKiBwb3dlciBvZmYgYW5kIG11dGUgb2ZmICovCi0JLyogRklYTUUgLSBpcyBtdXRpbmcgb2ZmIG5lY2VzYXJ5Pz8/ICovCi0KLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19BVURJT19PTik7Ci0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IERNQSBzdGFmZiAqLwotCi0vKgotICogdGhlc2UgYXJlIHRoZSBhZGRyZXNzIGFuZCBzaXplcyB1c2VkIHRvIGZpbGwgdGhlIHhtaXQgYnVmZmVyCi0gKiBzbyB3ZSBjYW4gZ2V0IGEgY2xvY2sgaW4gcmVjb3JkIG9ubHkgbW9kZQotICovCi0jZGVmaW5lIEZPUkNFX0NMT0NLX0FERFIJCShkbWFfYWRkcl90KUZMVVNIX0JBU0VfUEhZUwotI2RlZmluZSBGT1JDRV9DTE9DS19TSVpFCQk0MDk2IC8vIHdhcyAyMDQ4Ci0KLS8vIEZJWE1FIFdoeSB0aGlzIHZhbHVlIGV4YWN0bHkgLSB3cm90ZSBjb21tZW50Ci0jZGVmaW5lIERNQV9CVUZfU0laRQk4MTc2CS8qIDw9IE1BWF9ETUFfU0laRSBmcm9tIGFzbS9hcmNoLXNhMTEwMC9kbWEuaCAqLwotCi0jaWZkZWYgSEhfVkVSU0lPTgotCi1zdGF0aWMgaW50IGF1ZGlvX2RtYV9yZXF1ZXN0KHN0cnVjdCBhdWRpb19zdHJlYW0gKnMsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqLCBpbnQpKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBzYTExMDBfcmVxdWVzdF9kbWEoJnMtPmRtYWNoLCBzLT5pZCwgcy0+ZG1hX2Rldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBhdWRpbyBkbWEgMHgleFxuIiwgcy0+ZG1hX2Rldik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXNhMTEwMF9kbWFfc2V0X2NhbGxiYWNrKHMtPmRtYWNoLCBjYWxsYmFjayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpb19kbWFfZnJlZShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXNhMTEwMF9mcmVlX2RtYShzLT5kbWFjaCk7Ci0Jcy0+ZG1hY2ggPSAtMTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGludCBhdWRpb19kbWFfcmVxdWVzdChzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNhMTEwMF9yZXF1ZXN0X2RtYShzLT5kbWFfZGV2LCBzLT5pZCwgY2FsbGJhY2ssIHMsICZzLT5kbWFfcmVncyk7Ci0JaWYgKHJldCA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgYXVkaW8gZG1hIDB4JXhcbiIsIHMtPmRtYV9kZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9mcmVlKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc2ExMTAwX2ZyZWVfZG1hKHMtPmRtYV9yZWdzKTsKLQlzLT5kbWFfcmVncyA9IDA7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgdV9pbnQgYXVkaW9fZ2V0X2RtYV9wb3Moc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHMtPnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlkbWFfYWRkcl90IGFkZHI7Ci0JCi0JLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCB3LyBpbnRlcnJ1cHRzIGxvY2tlZCBvdXQgc2VlIGRtYS1zYTExMDAuYyBpbiB0aGUga2VybmVsCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci0jaWZkZWYgSEhfVkVSU0lPTgkKLQlzYTExMDBfZG1hX2dldF9jdXJyZW50KHMtPmRtYWNoLCBOVUxMLCAmYWRkcik7Ci0jZWxzZQotCWFkZHIgPSBzYTExMDBfZ2V0X2RtYV9wb3MoKHMpLT5kbWFfcmVncyk7Ci0jZW5kaWYKLQlvZmZzZXQgPSBhZGRyIC0gcnVudGltZS0+ZG1hX2FkZHI7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLQkKLQlvZmZzZXQgPSBieXRlc190b19mcmFtZXMocnVudGltZSxvZmZzZXQpOwotCWlmIChvZmZzZXQgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCW9mZnNldCA9IDA7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi0vKgotICogdGhpcyBzdG9wcyB0aGUgZG1hIGFuZCBjbGVhcnMgdGhlIGRtYSBwdHJzCi0gKi8KLXN0YXRpYyB2b2lkIGF1ZGlvX3N0b3BfZG1hKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwkKLQlzLT5hY3RpdmUgPSAwOwotCXMtPnBlcmlvZCA9IDA7Ci0JLyogdGhpcyBzdG9wcyB0aGUgZG1hIGNoYW5uZWwgYW5kIGNsZWFycyB0aGUgYnVmZmVyIHB0cnMgKi8KLSNpZmRlZiBISF9WRVJTSU9OCi0Jc2ExMTAwX2RtYV9mbHVzaF9hbGwocy0+ZG1hY2gpOwotI2Vsc2UKLQlzYTExMDBfY2xlYXJfZG1hKHMtPmRtYV9yZWdzKTsJCi0jZW5kaWYKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBhdWRpb19wcm9jZXNzX2RtYShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcy0+c3RyZWFtOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7Ci0JdW5zaWduZWQgaW50IGRtYV9zaXplOwkJCi0JdW5zaWduZWQgaW50IG9mZnNldDsKLQlpbnQgcmV0OwotICAgICAgICAgICAgICAgIAotCS8qIHdlIGFyZSByZXF1ZXN0ZWQgdG8gcHJvY2VzcyBzeW5jaHJvbml6YXRpb24gRE1BIHRyYW5zZmVyICovCi0JaWYgKHMtPnR4X3NwaW4pIHsKLQkJaWYgKHNuZF9CVUdfT04ocy0+c3RyZWFtX2lkICE9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spKQotCQkJcmV0dXJuOwotCQkvKiBmaWxsIHRoZSB4bWl0IGRtYSBidWZmZXJzIGFuZCByZXR1cm4gKi8KLSNpZmRlZiBISF9WRVJTSU9OCi0JCXNhMTEwMF9kbWFfc2V0X3NwaW4ocy0+ZG1hY2gsIEZPUkNFX0NMT0NLX0FERFIsIEZPUkNFX0NMT0NLX1NJWkUpOwotI2Vsc2UKLQkJd2hpbGUgKDEpIHsKLQkJCXJldCA9IHNhMTEwMF9zdGFydF9kbWEocy0+ZG1hX3JlZ3MsIEZPUkNFX0NMT0NLX0FERFIsIEZPUkNFX0NMT0NLX1NJWkUpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm47ICAgCi0JCX0KLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0JLyogbXVzdCBiZSBzZXQgaGVyZSAtIG9ubHkgdmFsaWQgZm9yIHJ1bm5pbmcgc3RyZWFtcywgbm90IGZvciBmb3JjZWRfY2xvY2sgZG1hIGZpbGxzICAqLwotCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jd2hpbGUgKHMtPmFjdGl2ZSAmJiBzLT5wZXJpb2RzIDwgcnVudGltZS0+cGVyaW9kcykgewotCQlkbWFfc2l6ZSA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci0JCWlmIChzLT5vbGRfb2Zmc2V0KSB7Ci0JCQkvKiBhIGxpdHRsZSB0cmljaywgd2UgbmVlZCByZXN1bWUgZnJvbSBvbGQgcG9zaXRpb24gKi8KLQkJCW9mZnNldCA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBzLT5vbGRfb2Zmc2V0IC0gMSk7Ci0JCQlzLT5vbGRfb2Zmc2V0ID0gMDsKLQkJCXMtPnBlcmlvZHMgPSAwOwotCQkJcy0+cGVyaW9kID0gb2Zmc2V0IC8gZG1hX3NpemU7Ci0JCQlvZmZzZXQgJT0gZG1hX3NpemU7Ci0JCQlkbWFfc2l6ZSA9IGRtYV9zaXplIC0gb2Zmc2V0OwotCQkJaWYgKCFkbWFfc2l6ZSkKLQkJCQljb250aW51ZTsJCS8qIHNwZWNpYWwgY2FzZSAqLwotCQl9IGVsc2UgewotCQkJb2Zmc2V0ID0gZG1hX3NpemUgKiBzLT5wZXJpb2Q7Ci0JCQlzbmRfQlVHX09OKGRtYV9zaXplID4gRE1BX0JVRl9TSVpFKTsKLQkJfQotI2lmZGVmIEhIX1ZFUlNJT04KLQkJcmV0ID0gc2ExMTAwX2RtYV9xdWV1ZV9idWZmZXIocy0+ZG1hY2gsIHMsIHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0LCBkbWFfc2l6ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm47IC8vRklYTUUKLSNlbHNlCi0JCXJldCA9IHNhMTEwMF9zdGFydF9kbWEoKHMpLT5kbWFfcmVncywgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGRtYV9zaXplKTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhdWRpb19wcm9jZXNzX2RtYTogY2Fubm90IHF1ZXVlIERNQSBidWZmZXIgKCVpKVxuIiwgcmV0KTsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlmCi0KLQkJcy0+cGVyaW9kKys7Ci0JCXMtPnBlcmlvZCAlPSBydW50aW1lLT5wZXJpb2RzOwotCQlzLT5wZXJpb2RzKys7Ci0JfQotfQotCi0jaWZkZWYgSEhfVkVSU0lPTgotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2NhbGxiYWNrKHZvaWQgKmRhdGEsIGludCBzaXplKQotI2Vsc2UKLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9jYWxsYmFjayh2b2lkICpkYXRhKQotI2VuZGlmCi17Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9IGRhdGE7Ci0gICAgICAgIAotCS8qIAotCSAqIElmIHdlIGFyZSBnZXR0aW5nIGEgY2FsbGJhY2sgZm9yIGFuIGFjdGl2ZSBzdHJlYW0gdGhlbiB3ZSBpbmZvcm0KLQkgKiB0aGUgUENNIG1pZGRsZSBsYXllciB3ZSd2ZSBmaW5pc2hlZCBhIHBlcmlvZAotCSAqLwotIAlpZiAocy0+YWN0aXZlKQotCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHMtPnN0cmVhbSk7Ci0KLQlzcGluX2xvY2soJnMtPmRtYV9sb2NrKTsKLQlpZiAoIXMtPnR4X3NwaW4gJiYgcy0+cGVyaW9kcyA+IDApCi0JCXMtPnBlcmlvZHMtLTsKLQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQlzcGluX3VubG9jaygmcy0+ZG1hX2xvY2spOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFBDTSBzZXR0aW5nICovCi0KLS8qIHt7eyB0cmlnZ2VyICYgdGltZXIgKi8KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JaW50IHN0cmVhbV9pZCA9IHN1YnN0cmVhbS0+cHN0ci0+c3RyZWFtOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMgPSAmY2hpcC0+c1tzdHJlYW1faWRdOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMxID0gJmNoaXAtPnNbc3RyZWFtX2lkIF4gMV07Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBub3RlIGxvY2FsIGludGVycnVwdHMgYXJlIGFscmVhZHkgZGlzYWJsZWQgaW4gdGhlIG1pZGxldmVsIGNvZGUgKi8KLQlzcGluX2xvY2soJnMtPmRtYV9sb2NrKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCS8qIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIHJlY29yZCBvbmx5IHN0cmVhbSBoYXMgYSBjbG9jayAqLwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSAmJiAhczEtPmFjdGl2ZSkgewotCQkJLyogd2UgbmVlZCB0byBmb3JjZSBmaWxsIHRoZSB4bWl0IERNQSB3aXRoIHplcm9zICovCi0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLQkJLyogdGhpcyBjYXNlIGlzIHdoZW4geW91IHdlcmUgcmVjb3JkaW5nIHRoZW4geW91IHR1cm4gb24gYQotCQkgKiBwbGF5YmFjayBzdHJlYW0gc28gd2Ugc3RvcCAoYWxzbyBjbGVhcnMgaXQpIHRoZSBkbWEgZmlyc3QsCi0JCSAqIGNsZWFyIHRoZSBzeW5jIGZsYWcgYW5kIHRoZW4gd2UgbGV0IGl0IHR1cm5lZCBvbgotCQkgKi8JCQotCQllbHNlIHsKLSAJCQlzLT50eF9zcGluID0gMDsKLSAJCX0KLQotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHN0YXJ0dXAgKi8KLQkJcy0+YWN0aXZlID0gMTsKLQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJLyogcmVxdWVzdGVkIHN0cmVhbSBzaHV0ZG93biAqLwotCQlhdWRpb19zdG9wX2RtYShzKTsKLQkJCi0JCS8qCi0JCSAqIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIHJlY29yZCBvbmx5IHN0cmVhbSBoYXMgYSBjbG9jawotCQkgKiBzbyBpZiB3ZSdyZSBzdG9wcGluZyBhIHBsYXliYWNrIHdpdGggYW4gYWN0aXZlIGNhcHR1cmUKLQkJICogd2UgbmVlZCB0byB0dXJuIHRoZSAwIGZpbGwgZG1hIG9uIGZvciB0aGUgeG1pdCBzaWRlCi0JCSAqLwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYgczEtPmFjdGl2ZSkgewotCQkJLyogd2UgbmVlZCB0byBmb3JjZSBmaWxsIHRoZSB4bWl0IERNQSB3aXRoIHplcm9zICovCi0JCQlzLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQl9Ci0JCS8qCi0JCSAqIHdlIGtpbGxlZCBhIGNhcHR1cmUgb25seSBzdHJlYW0sIHNvIHdlIHNob3VsZCBhbHNvIGtpbGwKLQkJICogdGhlIHplcm8gZmlsbCB0cmFuc21pdAotCQkgKi8KLQkJZWxzZSB7Ci0JCQlpZiAoczEtPnR4X3NwaW4pIHsKLQkJCQlzMS0+dHhfc3BpbiA9IDA7Ci0JCQkJYXVkaW9fc3RvcF9kbWEoczEpOwotCQkJfQotCQl9Ci0JCQotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JCXMtPmFjdGl2ZSA9IDA7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfc3RvcChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkKLQkJcy0+b2xkX29mZnNldCA9IGF1ZGlvX2dldF9kbWFfcG9zKHMpICsgMTsKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9mbHVzaF9hbGwocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCi0JCXMtPnBlcmlvZHMgPSAwOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQkJcy0+YWN0aXZlID0gMTsKLQkJcy0+dHhfc3BpbiA9IDA7Ci0JCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSAmJiAhczEtPmFjdGl2ZSkgewotCQkJczEtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEoczEpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9zdG9wKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYKLQkJcy0+YWN0aXZlID0gMDsKLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCQlpZiAoczEtPmFjdGl2ZSkgewotCQkJCXMtPnR4X3NwaW4gPSAxOwotCQkJCXMtPm9sZF9vZmZzZXQgPSBhdWRpb19nZXRfZG1hX3BvcyhzKSArIDE7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCQkKLQkJCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCQkJCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQkJCi0JCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoczEtPnR4X3NwaW4pIHsKLQkJCQlzMS0+dHhfc3BpbiA9IDA7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCQkKLQkJCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzMS0+ZG1hY2gpOwotI2Vsc2UKLQkJCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkJCQotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJcy0+YWN0aXZlID0gMTsKLQkJaWYgKHMtPm9sZF9vZmZzZXQpIHsKLQkJCXMtPnR4X3NwaW4gPSAwOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSAmJiAhczEtPmFjdGl2ZSkgewotCQkJczEtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEoczEpOwotCQl9Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfcmVzdW1lKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZzLT5kbWFfbG9jayk7CQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9ICZjaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXTsKLSAgICAgICAgCi0JLyogc2V0IHJlcXVlc3RlZCBzYW1wbGVyYXRlICovCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoY2hpcCwgcnVudGltZS0+cmF0ZSk7Ci0KLQkvKiBzZXQgcmVxdWVzdGQgZm9ybWF0IHdoZW4gYXZhaWxhYmxlICovCi0JLyogc2V0IEZNVCBoZXJlICEhISBGSVhNRSAqLwotCi0Jcy0+cGVyaW9kID0gMDsKLQlzLT5wZXJpb2RzID0gMDsKLSAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfc2ExMXh4X3VkYTEzNDFfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JcmV0dXJuIGF1ZGlvX2dldF9kbWFfcG9zKCZjaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXSk7Ci19Ci0KLS8qIH19fSAqLwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3NhMTF4eF91ZGExMzQxX2NhcHR1cmUgPQotewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAotCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfS05PVCksCi0JLnJhdGVfbWluCQk9IDgwMDAsCi0JLnJhdGVfbWF4CQk9IDQ4MDAwLAotCS5jaGFubmVsc19taW4JCT0gMiwKLQkuY2hhbm5lbHNfbWF4CQk9IDIsCi0JLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCoxMDI0LAotCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCi0JLnBlcmlvZF9ieXRlc19tYXgJPSBETUFfQlVGX1NJWkUsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrID0KLXsKLQkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1FKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV9LTk9UKSwKLQkucmF0ZV9taW4JCT0gODAwMCwKLQkucmF0ZV9tYXgJCT0gNDgwMDAsCi0JLmNoYW5uZWxzX21pbgkJPSAyLAotCS5jaGFubmVsc19tYXgJCT0gMiwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDY0KjEwMjQsCi0JLnBlcmlvZF9ieXRlc19taW4JPSA2NCwKLQkucGVyaW9kX2J5dGVzX21heAk9IERNQV9CVUZfU0laRSwKLQkucGVyaW9kc19taW4JCT0gMiwKLQkucGVyaW9kc19tYXgJCT0gMjU1LAotCS5maWZvX3NpemUJCT0gMCwKLX07Ci0KLXN0YXRpYyBpbnQgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgc3RyZWFtX2lkID0gc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW07Ci0JaW50IGVycjsKLQotCWNoaXAtPnNbc3RyZWFtX2lkXS5zdHJlYW0gPSBzdWJzdHJlYW07Ci0KLQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJ1bnRpbWUtPmh3ID0gc25kX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrOwotCWVsc2UKLQkJcnVudGltZS0+aHcgPSBzbmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZTsKLQlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcykpIDwgMCkKLQkJcmV0dXJuIGVycjsKLSAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCi0JY2hpcC0+c1tzdWJzdHJlYW0tPnBzdHItPnN0cmVhbV0uc3RyZWFtID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotLyoge3t7IEhXIHBhcmFtcyAmIGZyZWUgKi8KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLSAgICAgICAgCi0JcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLX0KLQotLyogfX19ICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2tfb3BzID0gewotCS5vcGVuCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuLAotCS5jbG9zZQkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2xvc2UsCi0JLmlvY3RsCQkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfcGFyYW1zLAotCS5od19mcmVlCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZSwKLQkucHJlcGFyZQkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZSwKLQkudHJpZ2dlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfdHJpZ2dlciwKLQkucG9pbnRlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcG9pbnRlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZV9vcHMgPSB7Ci0JLm9wZW4JCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4sCi0JLmNsb3NlCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZSwKLQkuaW9jdGwJCQk9IHNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMsCi0JLmh3X2ZyZWUJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlLAotCS5wcmVwYXJlCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlLAotCS50cmlnZ2VyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyLAotCS5wb2ludGVyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGNtKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEsIGludCBkZXZpY2UpCi17Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSBzbmRfcGNtX25ldyhzYTExeHhfdWRhMTM0MS0+Y2FyZCwgIlVEQTEzNDEgUENNIiwgZGV2aWNlLCAxLCAxLCAmcGNtKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyoKLQkgKiB0aGlzIHNldHMgdXAgb3VyIGluaXRpYWwgYnVmZmVycyBhbmQgc2V0cyB0aGUgZG1hX3R5cGUgdG8gaXNhLgotCSAqIGlzYSB3b3JrcyBidXQgSSdtIG5vdCBzdXJlIHdoeSAob3IgaWYpIGl0J3MgdGhlIHJpZ2h0IGNob2ljZQotCSAqIHRoaXMgbWF5IGJlIHRvbyBsYXJnZSwgdHJ5aW5nIGl0IGZvciBub3cKLQkgKi8KLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLCAKLQkJCQkJICAgICAgc25kX2RtYV9pc2FfZGF0YSgpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKLQotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFja19vcHMpOwotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2NhcHR1cmVfb3BzKTsKLQlwY20tPnByaXZhdGVfZGF0YSA9IHNhMTF4eF91ZGExMzQxOwotCXBjbS0+aW5mb19mbGFncyA9IDA7Ci0Jc3RyY3B5KHBjbS0+bmFtZSwgIlVEQTEzNDEgUENNIik7Ci0KLQlzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KHNhMTF4eF91ZGExMzQxKTsKLQotCS8qIHNldHVwIERNQSBjb250cm9sbGVyICovCi0JYXVkaW9fZG1hX3JlcXVlc3QoJnNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLCBhdWRpb19kbWFfY2FsbGJhY2spOwotCWF1ZGlvX2RtYV9yZXF1ZXN0KCZzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLCBhdWRpb19kbWFfY2FsbGJhY2spOwotCi0Jc2ExMXh4X3VkYTEzNDEtPnBjbSA9IHBjbTsKLQotCXJldHVybiAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IG1vZHVsZSBpbml0ICYgZXhpdCAqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyLAotCQkJCSAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKLQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7Ci0jaWZkZWYgSEhfVkVSU0lPTgotCXNhMTEwMF9kbWFfc2xlZXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5kbWFjaCk7Ci0Jc2ExMTAwX2RtYV9zbGVlcChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hY2gpOwotI2Vsc2UKLQkvL0ZJWE1FCi0jZW5kaWYKLQlsM19jb21tYW5kKGNoaXAtPnVkYTEzNDEsIENNRF9TVVNQRU5ELCBOVUxMKTsKLQlzYTExeHhfdWRhMTM0MV9hdWRpb19zaHV0ZG93bihjaGlwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cik7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0Jc2ExMXh4X3VkYTEzNDFfYXVkaW9faW5pdChjaGlwKTsKLQlsM19jb21tYW5kKGNoaXAtPnVkYTEzNDEsIENNRF9SRVNVTUUsIE5VTEwpOwotI2lmZGVmIEhIX1ZFUlNJT04JCi0Jc2ExMTAwX2RtYV93YWtldXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5kbWFjaCk7Ci0Jc2ExMTAwX2RtYV93YWtldXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYWNoKTsKLSNlbHNlCi0JLy9GSVhNRQotI2VuZGlmCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTUZJR19QTSAqLwotCi12b2lkIHNuZF9zYTExeHhfdWRhMTM0MV9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlhdWRpb19kbWFfZnJlZSgmY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSk7Ci0JYXVkaW9fZG1hX2ZyZWUoJmNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNhMTF4eF91ZGExMzQxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXA7Ci0KLQkvKiByZWdpc3RlciB0aGUgc291bmRjYXJkICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldygtMSwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNhMTF4eF91ZGExMzQxKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5zWzBdLmRtYV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+c1sxXS5kbWFfbG9jayk7Ci0KLQljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2ExMXh4X3VkYTEzNDFfZnJlZTsKLQljaGlwLT5jYXJkID0gY2FyZDsKLQljaGlwLT5zYW1wbGVyYXRlID0gQVVESU9fUkFURV9ERUZBVUxUOwotCi0JLy8gbWl4ZXIKLQlpZiAoKGVyciA9IHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KGNhcmQsICZjaGlwLT51ZGExMzQxKSkpCi0JCWdvdG8gbm9kZXY7Ci0KLQkvLyBQQ00KLQlpZiAoKGVyciA9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BjbShjaGlwLCAwKSkgPCAwKQotCQlnb3RvIG5vZGV2OwotICAgICAgICAKLQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiVURBMTM0MSIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIMzYwMCBVREExMzQxVFMiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiQ29tcGFxIGlQQVEgSDM2MDAgd2l0aCBQaGlsaXBzIFVEQTEzNDFUUyIpOwotICAgICAgICAKLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZwdHItPmRldik7Ci0KLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA9PSAwKSB7Ci0JCXByaW50ayggS0VSTl9JTkZPICJpUEFRIGF1ZGlvIHN1cHBvcnQgaW5pdGlhbGl6ZWRcbiIgKTsKLQkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKLQkJcmV0dXJuIDA7Ci0JfQotICAgICAgICAKLSBub2RldjoKLQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHNhMTF4eF91ZGExMzQxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFNBMTFYWF9VREExMzQxX0RSSVZFUgkic2ExMXh4X3VkYTEzNDEiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4eF91ZGExMzQxX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gc2ExMXh4X3VkYTEzNDFfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYTExeHhfdWRhMTM0MV9yZW1vdmUpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gc25kX3NhMTF4eF91ZGExMzQxX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcmVzdW1lLAotI2VuZGlmCi0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gU0ExMVhYX1VEQTEzNDFfRFJJVkVSLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzYTExeHhfdWRhMTM0MV9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWlmICghbWFjaGluZV9pc19oM3h4eCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU0ExMVhYX1VEQTEzNDFfRFJJVkVSLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkKLQkJCXJldHVybiAwOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQllcnIgPSAtRU5PREVWOwotCX0gZWxzZQotCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHNhMTF4eF91ZGExMzQxX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChzYTExeHhfdWRhMTM0MV9pbml0KTsKLW1vZHVsZV9leGl0KHNhMTF4eF91ZGExMzQxX2V4aXQpOwotCi0vKiB9fX0gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvS2NvbmZpZyBiL3NvdW5kL2F0bWVsL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyMjhhOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL0tjb25maWcKQEAgLTAsMCArMSwxOSBAQAorbWVudSAiQXRtZWwgZGV2aWNlcyAoQVZSMzIgYW5kIEFUOTEpIgorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxCisKK2NvbmZpZyBTTkRfQVRNRUxfQUJEQUMKKwl0cmlzdGF0ZSAiQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpIGRyaXZlciIKKwlzZWxlY3QgU05EX1BDTQorCWRlcGVuZHMgb24gRFdfRE1BQyAmJiBBVlIzMgorCWhlbHAKKwkgIEFMU0Egc291bmQgZHJpdmVyIGZvciB0aGUgQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpLgorCitjb25maWcgU05EX0FUTUVMX0FDOTdDCisJdHJpc3RhdGUgIkF0bWVsIEFDOTcgQ29udHJvbGxlciAoQUM5N0MpIGRyaXZlciIKKwlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfQUM5N19DT0RFQworCWRlcGVuZHMgb24gRFdfRE1BQyAmJiBBVlIzMgorCWhlbHAKKwkgIEFMU0Egc291bmQgZHJpdmVyIGZvciB0aGUgQXRtZWwgQUM5NyBjb250cm9sbGVyLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9NYWtlZmlsZSBiL3NvdW5kL2F0bWVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWRjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK3NuZC1hdG1lbC1hYmRhYy1vYmpzCQk6PSBhYmRhYy5vCitzbmQtYXRtZWwtYWM5N2Mtb2JqcwkJOj0gYWM5N2MubworCitvYmotJChDT05GSUdfU05EX0FUTUVMX0FCREFDKQkrPSBzbmQtYXRtZWwtYWJkYWMubworb2JqLSQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykJKz0gc25kLWF0bWVsLWFjOTdjLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FiZGFjLmMgYi9zb3VuZC9hdG1lbC9hYmRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjNjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYmRhYy5jCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgb24tY2hpcCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFiZGFjLmg+CisKKy8qIERBQyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIERBQ19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgREFDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBEQUNfSU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIERBQ19JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgREFDX0lOVF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBEQUNfSU5UX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIERBQ19JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWMKKworLyogQml0ZmllbGRzIGluIENUUkwgKi8KKyNkZWZpbmUgREFDX1NXQVBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIERBQ19TV0FQX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERBQ19FTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBEQUNfRU5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCaXRmaWVsZHMgaW4gSU5UX01BU0svSU5UX0VOL0lOVF9ESVMvSU5UX1NUQVRVUy9JTlRfQ0xSICovCisjZGVmaW5lIERBQ19VTkRFUlJVTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBEQUNfVU5ERVJSVU5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBEQUNfVFhfUkVBRFlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgREFDX1RYX1JFQURZX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogQml0IG1hbmlwdWxhdGlvbiBtYWNyb3MgKi8KKyNkZWZpbmUgREFDX0JJVChuYW1lKQkJCQkJXAorCSgxIDw8IERBQ18jI25hbWUjI19PRkZTRVQpCisjZGVmaW5lIERBQ19CRihuYW1lLCB2YWx1ZSkJCQkJXAorCSgoKHZhbHVlKSAmICgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKSkJXAorCSA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKQorI2RlZmluZSBEQUNfQkZFWFQobmFtZSwgdmFsdWUpCQkJCVwKKwkoKCh2YWx1ZSkgPj4gREFDXyMjbmFtZSMjX09GRlNFVCkJCVwKKwkgJiAoKDEgPDwgREFDXyMjbmFtZSMjX1NJWkUpIC0gMSkpCisjZGVmaW5lIERBQ19CRklOUyhuYW1lLCB2YWx1ZSwgb2xkKQkJCVwKKwkoKChvbGQpICYgfigoKDEgPDwgREFDXyMjbmFtZSMjX1NJWkUpIC0gMSkJXAorCQkgICAgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkpCQlcCisJIHwgREFDX0JGKG5hbWUsIHZhbHVlKSkKKworLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBkYWNfcmVhZGwocG9ydCwgcmVnKQkJCQlcCisJX19yYXdfcmVhZGwoKHBvcnQpLT5yZWdzICsgREFDXyMjcmVnKQorI2RlZmluZSBkYWNfd3JpdGVsKHBvcnQsIHJlZywgdmFsdWUpCQkJXAorCV9fcmF3X3dyaXRlbCgodmFsdWUpLCAocG9ydCktPnJlZ3MgKyBEQUNfIyNyZWcpCisKKy8qCisgKiBBQkRBQyBzdXBwb3J0cyBhIG1heGltdW0gb2YgNiBkaWZmZXJlbnQgcmF0ZXMgZnJvbSBhIGdlbmVyaWMgY2xvY2suIFRoZQorICogZ2VuZXJpYyBjbG9jayBoYXMgYSBwb3dlciBvZiB0d28gZGl2aWRlciwgd2hpY2ggZ2l2ZXMgNiBzdGVwcyBmcm9tIDE5MiBrSHoKKyAqIHRvIDUxMTIgSHouCisgKi8KKyNkZWZpbmUgTUFYX05VTV9SQVRFUwk2CisvKiBBTFNBIHNlZW1zIHRvIHVzZSByYXRlcyBiZXR3ZWVuIDE5MjAwMCBIeiBhbmQgNTExMiBIei4gKi8KKyNkZWZpbmUgUkFURV9NQVgJMTkyMDAwCisjZGVmaW5lIFJBVEVfTUlOCTUxMTIKKworZW51bSB7CisJRE1BX1JFQURZID0gMCwKK307CisKK3N0cnVjdCBhdG1lbF9hYmRhY19kbWEgeworCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW47CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCSpjZGVzYzsKK307CisKK3N0cnVjdCBhdG1lbF9hYmRhYyB7CisJc3RydWN0IGNsawkJCQkqcGNsazsKKwlzdHJ1Y3QgY2xrCQkJCSpzYW1wbGVfY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCQkqcGRldjsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWNfZG1hCQkJZG1hOworCisJc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0CWNvbnN0cmFpbnRzX3JhdGVzOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkJKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkJKmNhcmQ7CisJc3RydWN0IHNuZF9wY20JCQkJKnBjbTsKKworCXZvaWQgX19pb21lbQkJCQkqcmVnczsKKwl1bnNpZ25lZCBsb25nCQkJCWZsYWdzOworCXVuc2lnbmVkIGludAkJCQlyYXRlc1tNQVhfTlVNX1JBVEVTXTsKKwl1bnNpZ25lZCBpbnQJCQkJcmF0ZXNfbnVtOworCWludAkJCQkJaXJxOworfTsKKworI2RlZmluZSBnZXRfZGFjKGNhcmQpICgoc3RydWN0IGF0bWVsX2FiZGFjICopKGNhcmQpLT5wcml2YXRlX2RhdGEpCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBETUEgZHJpdmVyLiAqLworc3RhdGljIHZvaWQgYXRtZWxfYWJkYWNfZG1hX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGFyZzsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGRhYy0+c3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19wcmVwYXJlX2RtYShzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYywKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbiA9IGRhYy0+ZG1hLmNoYW47CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZwkJCWJ1ZmZlcl9sZW4sIHBlcmlvZF9sZW47CisKKwkvKgorCSAqIFdlIGRvbid0IGRvIERNQSBvbiAiY29tcGxleCIgdHJhbnNmZXJzLCBpLmUuIHdpdGgKKwkgKiBub24taGFsZndvcmQtYWxpZ25lZCBidWZmZXJzIG9yIGxlbmd0aHMuCisJICovCisJaWYgKHJ1bnRpbWUtPmRtYV9hZGRyICYgMSB8fCBydW50aW1lLT5idWZmZXJfc2l6ZSAmIDEpIHsKKwkJZGV2X2RiZygmZGFjLT5wZGV2LT5kZXYsICJ0b28gY29tcGxleCB0cmFuc2ZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1ZmZlcl9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpOworCXBlcmlvZF9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCisJY2Rlc2MgPSBkd19kbWFfY3ljbGljX3ByZXAoY2hhbiwgcnVudGltZS0+ZG1hX2FkZHIsIGJ1ZmZlcl9sZW4sCisJCQlwZXJpb2RfbGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoSVNfRVJSKGNkZXNjKSkgeworCQlkZXZfZGJnKCZkYWMtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBwcmVwYXJlIGN5Y2xpYyBETUFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZGVzYyk7CisJfQorCisJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FiZGFjX2RtYV9wZXJpb2RfZG9uZTsKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrX3BhcmFtID0gZGFjOworCisJZGFjLT5kbWEuY2Rlc2MgPSBjZGVzYzsKKworCXNldF9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF0bWVsX2FiZGFjX2h3ID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fTU1BUAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRQorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMJCT0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFKSwKKwkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV9LTk9UKSwKKwkucmF0ZV9taW4JCT0gUkFURV9NSU4sCisJLnJhdGVfbWF4CQk9IFJBVEVfTUFYLAorCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCAqIDQwOTYsCisJLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gNDA5NiwKKwkucGVyaW9kc19taW4JCT0gNCwKKwkucGVyaW9kc19tYXgJCT0gNjQsCit9OworCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlkYWMtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlhdG1lbF9hYmRhY19ody5yYXRlX21heCA9IGRhYy0+cmF0ZXNbZGFjLT5yYXRlc19udW0gLSAxXTsKKwlhdG1lbF9hYmRhY19ody5yYXRlX21pbiA9IGRhYy0+cmF0ZXNbMF07CisJc3Vic3RyZWFtLT5ydW50aW1lLT5odyA9IGF0bWVsX2FiZGFjX2h3OworCisJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmZGFjLT5jb25zdHJhaW50c19yYXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJZGFjLT5zdWJzdHJlYW0gPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQkJZHdfZG1hX2N5Y2xpY19mcmVlKGRhYy0+ZG1hLmNoYW4pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfZnJlZShkYWMtPmRtYS5jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNsa19zZXRfcmF0ZShkYWMtPnNhbXBsZV9jbGssIDI1NiAqIHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICghdGVzdF9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FiZGFjX3ByZXBhcmVfZG1hKGRhYywgc3Vic3RyZWFtLCBETUFfVE9fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJY2xrX2VuYWJsZShkYWMtPnNhbXBsZV9jbGspOworCQlyZXR2YWwgPSBkd19kbWFfY3ljbGljX3N0YXJ0KGRhYy0+ZG1hLmNoYW4pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWRhY193cml0ZWwoZGFjLCBDVFJMLCBEQUNfQklUKEVOKSk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWR3X2RtYV9jeWNsaWNfc3RvcChkYWMtPmRtYS5jaGFuKTsKKwkJZGFjX3dyaXRlbChkYWMsIERBVEEsIDApOworCQlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgMCk7CisJCWNsa19kaXNhYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FiZGFjX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjCSpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdAlmcmFtZXM7CisJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisKKwlieXRlcyA9IGR3X2RtYV9nZXRfc3JjX2FkZHIoZGFjLT5kbWEuY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhYmRhY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gZGV2X2lkOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBkYWNfcmVhZGwoZGFjLCBJTlRfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgREFDX0JJVChVTkRFUlJVTikpIHsKKwkJZGV2X2VycigmZGFjLT5wZGV2LT5kZXYsICJ1bmRlcnJ1biBkZXRlY3RlZFxuIik7CisJCWRhY193cml0ZWwoZGFjLCBJTlRfQ0xSLCBEQUNfQklUKFVOREVSUlVOKSk7CisJfSBlbHNlIHsKKwkJZGV2X2VycigmZGFjLT5wZGV2LT5kZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQgKHN0YXR1cz0weCV4KVxuIiwKKwkJCXN0YXR1cyk7CisJCWRhY193cml0ZWwoZGFjLCBJTlRfQ0xSLCBzdGF0dXMpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9hYmRhY19vcHMgPSB7CisJLm9wZW4JCT0gYXRtZWxfYWJkYWNfb3BlbiwKKwkuY2xvc2UJCT0gYXRtZWxfYWJkYWNfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYmRhY19od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBhdG1lbF9hYmRhY19od19mcmVlLAorCS5wcmVwYXJlCT0gYXRtZWxfYWJkYWNfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FiZGFjX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhdG1lbF9hYmRhY19wb2ludGVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWJkYWNfcGNtX25ldyhzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBodyA9IGF0bWVsX2FiZGFjX2h3OworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbmV3KGRhYy0+Y2FyZCwgZGFjLT5jYXJkLT5zaG9ydG5hbWUsCisJCQlkYWMtPnBkZXYtPmlkLCAxLCAwLCAmcGNtKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJc3RyY3B5KHBjbS0+bmFtZSwgZGFjLT5jYXJkLT5zaG9ydG5hbWUpOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gZGFjOworCXBjbS0+aW5mb19mbGFncyA9IDA7CisJZGFjLT5wY20gPSBwY207CisKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmYXRtZWxfYWJkYWNfb3BzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkmZGFjLT5wZGV2LT5kZXYsIGh3LnBlcmlvZHNfbWluICogaHcucGVyaW9kX2J5dGVzX21pbiwKKwkJCWh3LmJ1ZmZlcl9ieXRlc19tYXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCit7CisJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gc2xhdmU7CisKKwlpZiAoZHdzLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2KSB7CisJCWNoYW4tPnByaXZhdGUgPSBkd3M7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlcyhzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYykKK3sKKwlsb25nIG5ld19yYXRlID0gUkFURV9NQVg7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJaW50IGluZGV4ID0gMDsKKworCS8qIHdlIHN0YXJ0IGF0IDE5MiBrSHogYW5kIHdvcmsgb3VyIHdheSBkb3duIHRvIDUxMTIgSHogKi8KKwl3aGlsZSAobmV3X3JhdGUgPj0gUkFURV9NSU4gJiYgaW5kZXggPCAoTUFYX05VTV9SQVRFUyArIDEpKSB7CisJCW5ld19yYXRlID0gY2xrX3JvdW5kX3JhdGUoZGFjLT5zYW1wbGVfY2xrLCAyNTYgKiBuZXdfcmF0ZSk7CisJCWlmIChuZXdfcmF0ZSA8IDApCisJCQlicmVhazsKKwkJLyogbWFrZSBzdXJlIHdlIGFyZSBiZWxvdyB0aGUgQUJEQUMgY2xvY2sgKi8KKwkJaWYgKG5ld19yYXRlIDw9IGNsa19nZXRfcmF0ZShkYWMtPnBjbGspKSB7CisJCQlkYWMtPnJhdGVzW2luZGV4XSA9IG5ld19yYXRlIC8gMjU2OworCQkJaW5kZXgrKzsKKwkJfQorCQkvKiBkaXZpZGUgYnkgMjU2IGFuZCB0aGVuIGJ5IHR3byB0byBnZXQgbmV4dCByYXRlICovCisJCW5ld19yYXRlIC89IDI1NiAqIDI7CisJfQorCisJaWYgKGluZGV4KSB7CisJCWludCBpOworCisJCS8qIHJldmVyc2UgYXJyYXksIHNtYWxsZXN0IGdvIGZpcnN0ICovCisJCWZvciAoaSA9IDA7IGkgPCAoaW5kZXggLyAyKTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgdG1wID0gZGFjLT5yYXRlc1tpbmRleCAtIDEgLSBpXTsKKwkJCWRhYy0+cmF0ZXNbaW5kZXggLSAxIC0gaV0gPSBkYWMtPnJhdGVzW2ldOworCQkJZGFjLT5yYXRlc1tpXSA9IHRtcDsKKwkJfQorCisJCWRhYy0+Y29uc3RyYWludHNfcmF0ZXMuY291bnQgPSBpbmRleDsKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5saXN0ID0gZGFjLT5yYXRlczsKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5tYXNrID0gMDsKKwkJZGFjLT5yYXRlc19udW0gPSBpbmRleDsKKworCQlyZXR2YWwgPSAwOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FiZGFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkCQkqY2FyZDsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMJKmRhYzsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZWdzOworCXN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YQkqcGRhdGE7CisJc3RydWN0IGNsawkJKnBjbGs7CisJc3RydWN0IGNsawkJKnNhbXBsZV9jbGs7CisJaW50CQkJcmV0dmFsOworCWludAkJCWlycTsKKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IGdldCBJUlEgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBlcmlwaGVyYWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwY2xrKTsKKwl9CisJc2FtcGxlX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNhbXBsZV9jbGsiKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHNhbXBsZSBjbG9ja1xuIik7CisJCXJldHZhbCA9IFBUUl9FUlIocGNsayk7CisJCWdvdG8gb3V0X3B1dF9wY2xrOworCX0KKwljbGtfZW5hYmxlKHBjbGspOworCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYXRtZWxfYWJkYWMpLCAmY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHNvdW5kIGNhcmQgZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfcHV0X3NhbXBsZV9jbGs7CisJfQorCisJZGFjID0gZ2V0X2RhYyhjYXJkKTsKKworCWRhYy0+aXJxID0gaXJxOworCWRhYy0+Y2FyZCA9IGNhcmQ7CisJZGFjLT5wY2xrID0gcGNsazsKKwlkYWMtPnNhbXBsZV9jbGsgPSBzYW1wbGVfY2xrOworCWRhYy0+cGRldiA9IHBkZXY7CisKKwlyZXR2YWwgPSBzZXRfc2FtcGxlX3JhdGVzKGRhYyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHNldCBzdXBwb3J0ZWQgcmF0ZXNcbiIpOworCQlnb3RvIG91dF9mcmVlX2NhcmQ7CisJfQorCisJZGFjLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKwlpZiAoIWRhYy0+cmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVtYXAgcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJZ290byBvdXRfZnJlZV9jYXJkOworCX0KKworCS8qIG1ha2Ugc3VyZSB0aGUgREFDIGlzIHNpbGVudCBhbmQgZGlzYWJsZWQgKi8KKwlkYWNfd3JpdGVsKGRhYywgREFUQSwgMCk7CisJZGFjX3dyaXRlbChkYWMsIENUUkwsIDApOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCBhYmRhY19pbnRlcnJ1cHQsIDAsICJhYmRhYyIsIGRhYyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVxdWVzdCBpcnFcbiIpOworCQlnb3RvIG91dF91bm1hcF9yZWdzOworCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisKKwlpZiAocGRhdGEtPmR3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+ZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+dHhfcmVnID0gcmVncy0+c3RhcnQgKyBEQUNfREFUQTsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJZGFjLT5kbWEuY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCX0KKwlpZiAoIXBkYXRhLT5kd3MuZG1hX2RldiB8fCAhZGFjLT5kbWEuY2hhbikgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJETUEgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3Vuc2V0X2NhcmRfZGV2OworCX0KKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBdG1lbCBBQkRBQyIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBdG1lbCBBQkRBQyIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIik7CisKKwlyZXR2YWwgPSBhdG1lbF9hYmRhY19wY21fbmV3KGRhYyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgQUJEQUMgcGNtIGRldmljZVxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfZG1hOworCX0KKworCXJldHZhbCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOworCQlnb3RvIG91dF9yZWxlYXNlX2RtYTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBdG1lbCBBQkRBQyBhdCAweCVwIHVzaW5nICVzXG4iLAorCQkJZGFjLT5yZWdzLCBkYWMtPmRtYS5jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCisJcmV0dXJuIHJldHZhbDsKKworb3V0X3JlbGVhc2VfZG1hOgorCWRtYV9yZWxlYXNlX2NoYW5uZWwoZGFjLT5kbWEuY2hhbik7CisJZGFjLT5kbWEuY2hhbiA9IE5VTEw7CitvdXRfdW5zZXRfY2FyZF9kZXY6CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKwlmcmVlX2lycShpcnEsIGRhYyk7CitvdXRfdW5tYXBfcmVnczoKKwlpb3VubWFwKGRhYy0+cmVncyk7CitvdXRfZnJlZV9jYXJkOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitvdXRfcHV0X3NhbXBsZV9jbGs6CisJY2xrX3B1dChzYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShwY2xrKTsKK291dF9wdXRfcGNsazoKKwljbGtfcHV0KHBjbGspOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJZHdfZG1hX2N5Y2xpY19zdG9wKGRhYy0+ZG1hLmNoYW4pOworCWNsa19kaXNhYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJY2xrX2Rpc2FibGUoZGFjLT5wY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJY2xrX2VuYWJsZShkYWMtPnBjbGspOworCWNsa19lbmFibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwlpZiAodGVzdF9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RhcnQoZGFjLT5kbWEuY2hhbik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGF0bWVsX2FiZGFjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhdG1lbF9hYmRhY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF0bWVsX2FiZGFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gZ2V0X2RhYyhjYXJkKTsKKworCWNsa19wdXQoZGFjLT5zYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShkYWMtPnBjbGspOworCWNsa19wdXQoZGFjLT5wY2xrKTsKKworCWRtYV9yZWxlYXNlX2NoYW5uZWwoZGFjLT5kbWEuY2hhbik7CisJZGFjLT5kbWEuY2hhbiA9IE5VTEw7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKwlpb3VubWFwKGRhYy0+cmVncyk7CisJZnJlZV9pcnEoZGFjLT5pcnEsIGRhYyk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2FiZGFjX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0bWVsX2FiZGFjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0bWVsX2FiZGFjIiwKKwl9LAorCS5zdXNwZW5kCT0gYXRtZWxfYWJkYWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0bWVsX2FiZGFjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0bWVsX2FiZGFjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdG1lbF9hYmRhY19kcml2ZXIsCisJCQlhdG1lbF9hYmRhY19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChhdG1lbF9hYmRhY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0bWVsX2FiZGFjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtZWxfYWJkYWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGF0bWVsX2FiZGFjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpIik7CitNT0RVTEVfQVVUSE9SKCJIYW5zLUNocmlzdGlhbiBFZ3R2ZWR0IDxoYW5zLWNocmlzdGlhbi5lZ3R2ZWR0QGF0bWVsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmMgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzJlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCkBAIC0wLDAgKzEsOTMyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgQUM5N0MgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgorI2luY2x1ZGUgPHNvdW5kL21lbWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisKKyNpbmNsdWRlICJhYzk3Yy5oIgorCitlbnVtIHsKKwlETUFfVFhfUkVBRFkgPSAwLAorCURNQV9SWF9SRUFEWSwKKwlETUFfVFhfQ0hBTl9QUkVTRU5ULAorCURNQV9SWF9DSEFOX1BSRVNFTlQsCit9OworCisvKiBTZXJpYWxpemUgYWNjZXNzIHRvIG9wZW5lZCB2YXJpYWJsZSAqLworc3RhdGljIERFRklORV9NVVRFWChvcGVuZWRfbXV0ZXgpOworCitzdHJ1Y3QgYXRtZWxfYWM5N2NfZG1hIHsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqcnhfY2hhbjsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqdHhfY2hhbjsKK307CisKK3N0cnVjdCBhdG1lbF9hYzk3YyB7CisJc3RydWN0IGNsawkJCSpwY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBhdG1lbF9hYzk3Y19kbWEJCWRtYTsKKworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkqcGxheWJhY2tfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkqY2FwdHVyZV9zdWJzdHJlYW07CisJc3RydWN0IHNuZF9jYXJkCQkJKmNhcmQ7CisJc3RydWN0IHNuZF9wY20JCQkqcGNtOworCXN0cnVjdCBzbmRfYWM5NwkJCSphYzk3OworCXN0cnVjdCBzbmRfYWM5N19idXMJCSphYzk3X2J1czsKKworCXU2NAkJCQljdXJfZm9ybWF0OworCXVuc2lnbmVkIGludAkJCWN1cl9yYXRlOworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKwkvKiBTZXJpYWxpemUgYWNjZXNzIHRvIG9wZW5lZCB2YXJpYWJsZSAqLworCXNwaW5sb2NrX3QJCQlsb2NrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCWludAkJCQlvcGVuZWQ7CisJaW50CQkJCXJlc2V0X3BpbjsKK307CisKKyNkZWZpbmUgZ2V0X2NoaXAoY2FyZCkgKChzdHJ1Y3QgYXRtZWxfYWM5N2MgKikoY2FyZCktPnByaXZhdGVfZGF0YSkKKworI2RlZmluZSBhYzk3Y193cml0ZWwoY2hpcCwgcmVnLCB2YWwpCQkJXAorCV9fcmF3X3dyaXRlbCgodmFsKSwgKGNoaXApLT5yZWdzICsgQUM5N0NfIyNyZWcpCisjZGVmaW5lIGFjOTdjX3JlYWRsKGNoaXAsIHJlZykJCQkJXAorCV9fcmF3X3JlYWRsKChjaGlwKS0+cmVncyArIEFDOTdDXyMjcmVnKQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgRE1BIGRyaXZlci4gKi8KK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX2RtYV9wbGF5YmFja19wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfZG1hX2NhcHR1cmVfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGFyZzsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAsCisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW47CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZwkJCWJ1ZmZlcl9sZW4sIHBlcmlvZF9sZW47CisKKwkvKgorCSAqIFdlIGRvbid0IGRvIERNQSBvbiAiY29tcGxleCIgdHJhbnNmZXJzLCBpLmUuIHdpdGgKKwkgKiBub24taGFsZndvcmQtYWxpZ25lZCBidWZmZXJzIG9yIGxlbmd0aHMuCisJICovCisJaWYgKHJ1bnRpbWUtPmRtYV9hZGRyICYgMSB8fCBydW50aW1lLT5idWZmZXJfc2l6ZSAmIDEpIHsKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAidG9vIGNvbXBsZXggdHJhbnNmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCWNoYW4gPSBjaGlwLT5kbWEudHhfY2hhbjsKKwllbHNlCisJCWNoYW4gPSBjaGlwLT5kbWEucnhfY2hhbjsKKworCWJ1ZmZlcl9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpOworCXBlcmlvZF9sZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCisJY2Rlc2MgPSBkd19kbWFfY3ljbGljX3ByZXAoY2hhbiwgcnVudGltZS0+ZG1hX2FkZHIsIGJ1ZmZlcl9sZW4sCisJCQlwZXJpb2RfbGVuLCBkaXJlY3Rpb24pOworCWlmIChJU19FUlIoY2Rlc2MpKSB7CisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBwcmVwYXJlIGN5Y2xpYyBETUFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZGVzYyk7CisJfQorCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisJCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2sgPSBhdG1lbF9hYzk3Y19kbWFfcGxheWJhY2tfcGVyaW9kX2RvbmU7CisJCXNldF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2sgPSBhdG1lbF9hYzk3Y19kbWFfY2FwdHVyZV9wZXJpb2RfZG9uZTsKKwkJc2V0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncyk7CisJfQorCisJY2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbSA9IGNoaXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF0bWVsX2FjOTdjX2h3ID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fTU1BUAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUEFVU0UpLAorCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9CRQorCQkJCSAgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSksCisJLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUyksCisJLnJhdGVfbWluCQk9IDQwMDAsCisJLnJhdGVfbWF4CQk9IDQ4MDAwLAorCS5jaGFubmVsc19taW4JCT0gMSwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCAqIDQwOTYsCisJLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gNDA5NiwKKwkucGVyaW9kc19taW4JCT0gNCwKKwkucGVyaW9kc19tYXgJCT0gNjQsCit9OworCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZCsrOworCXJ1bnRpbWUtPmh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaWYgKGNoaXAtPmN1cl9yYXRlKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gY2hpcC0+Y3VyX3JhdGU7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gY2hpcC0+Y3VyX3JhdGU7CisJfQorCWlmIChjaGlwLT5jdXJfZm9ybWF0KQorCQlydW50aW1lLT5ody5mb3JtYXRzID0gKDFVTEwgPDwgY2hpcC0+Y3VyX2Zvcm1hdCk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZCsrOworCXJ1bnRpbWUtPmh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaWYgKGNoaXAtPmN1cl9yYXRlKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gY2hpcC0+Y3VyX3JhdGU7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gY2hpcC0+Y3VyX3JhdGU7CisJfQorCWlmIChjaGlwLT5jdXJfZm9ybWF0KQorCQlydW50aW1lLT5ody5mb3JtYXRzID0gKDFVTEwgPDwgY2hpcC0+Y3VyX2Zvcm1hdCk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkLS07CisJaWYgKCFjaGlwLT5vcGVuZWQpIHsKKwkJY2hpcC0+Y3VyX3JhdGUgPSAwOworCQljaGlwLT5jdXJfZm9ybWF0ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQtLTsKKwlpZiAoIWNoaXAtPm9wZW5lZCkgeworCQljaGlwLT5jdXJfcmF0ZSA9IDA7CisJCWNoaXAtPmN1cl9mb3JtYXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnR4X2NoYW4pOworCisJLyogU2V0IHJlc3RyaWN0aW9ucyB0byBwYXJhbXMuICovCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jdXJfcmF0ZSA9IHBhcmFtc19yYXRlKGh3X3BhcmFtcyk7CisJY2hpcC0+Y3VyX2Zvcm1hdCA9IHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS5yeF9jaGFuKTsKKworCS8qIFNldCByZXN0cmljdGlvbnMgdG8gcGFyYW1zLiAqLworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y3VyX3JhdGUgPSBwYXJhbXNfcmF0ZShod19wYXJhbXMpOworCWNoaXAtPmN1cl9mb3JtYXQgPSBwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcyk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS50eF9jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEucnhfY2hhbik7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcgd29yZCA9IDA7CisJaW50IHJldHZhbDsKKworCS8qIGFzc2lnbiBjaGFubmVscyB0byBBQzk3QyBjaGFubmVsIEEgKi8KKwlzd2l0Y2ggKHJ1bnRpbWUtPmNoYW5uZWxzKSB7CisJY2FzZSAxOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpCisJCQl8IEFDOTdDX0NIX0FTU0lHTihQQ01fUklHSFQsIEEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBzdXBwb3J0IG1vcmUgdGhhbiB0d28gY2hhbm5lbHMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlhYzk3Y193cml0ZWwoY2hpcCwgT0NBLCB3b3JkKTsKKworCS8qIGNvbmZpZ3VyZSBzYW1wbGUgZm9ybWF0IGFuZCBzaXplICovCisJd29yZCA9IEFDOTdDX0NNUl9ETUFFTiB8IEFDOTdDX0NNUl9TSVpFXzE2OworCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3b3JkIHw9IEFDOTdDX0NNUl9DRU1fTElUVExFOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQl3b3JkICY9IH4oQUM5N0NfQ01SX0NFTV9MSVRUTEUpOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgd29yZCk7CisKKwkvKiBzZXQgdmFyaWFibGUgcmF0ZSBpZiBuZWVkZWQgKi8KKwlpZiAocnVudGltZS0+cmF0ZSAhPSA0ODAwMCkgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkIHw9IEFDOTdDX01SX1ZSQTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9IGVsc2UgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkICY9IH4oQUM5N0NfTVJfVlJBKTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfYWM5N19zZXRfcmF0ZShjaGlwLT5hYzk3LCBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSwKKwkJCXJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgcmF0ZSAlZCBIelxuIiwKKwkJCQlydW50aW1lLT5yYXRlKTsKKworCWlmICghdGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShjaGlwLCBzdWJzdHJlYW0sCisJCQkJRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nIHdvcmQgPSAwOworCWludCByZXR2YWw7CisKKwkvKiBhc3NpZ24gY2hhbm5lbHMgdG8gQUM5N0MgY2hhbm5lbCBBICovCisJc3dpdGNoIChydW50aW1lLT5jaGFubmVscykgeworCWNhc2UgMToKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKQorCQkJfCBBQzk3Q19DSF9BU1NJR04oUENNX1JJR0hULCBBKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETzogc3VwcG9ydCBtb3JlIHRoYW4gdHdvIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJYWM5N2Nfd3JpdGVsKGNoaXAsIElDQSwgd29yZCk7CisKKwkvKiBjb25maWd1cmUgc2FtcGxlIGZvcm1hdCBhbmQgc2l6ZSAqLworCXdvcmQgPSBBQzk3Q19DTVJfRE1BRU4gfCBBQzk3Q19DTVJfU0laRV8xNjsKKworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJd29yZCB8PSBBQzk3Q19DTVJfQ0VNX0xJVFRMRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRTogLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJd29yZCAmPSB+KEFDOTdDX0NNUl9DRU1fTElUVExFKTsKKwkJYnJlYWs7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIHdvcmQpOworCisJLyogc2V0IHZhcmlhYmxlIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHJ1bnRpbWUtPnJhdGUgIT0gNDgwMDApIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCB8PSBBQzk3Q19NUl9WUkE7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfSBlbHNlIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCAmPSB+KEFDOTdDX01SX1ZSQSk7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfQorCisJcmV0dmFsID0gc25kX2FjOTdfc2V0X3JhdGUoY2hpcC0+YWM5NywgQUM5N19QQ01fTFJfQURDX1JBVEUsCisJCQlydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHJhdGUgJWQgSHpcbiIsCisJCQkJcnVudGltZS0+cmF0ZSk7CisKKwlpZiAoIXRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWM5N2NfcHJlcGFyZV9kbWEoY2hpcCwgc3Vic3RyZWFtLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CithdG1lbF9hYzk3Y19wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBsb25nIGNhbXI7CisJaW50IHJldHZhbCA9IDA7CisKKwljYW1yID0gYWM5N2NfcmVhZGwoY2hpcCwgQ0FNUik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnR4X2NoYW4pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWNhbXIgfD0gQUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEudHhfY2hhbik7CisJCWlmIChjaGlwLT5vcGVuZWQgPD0gMSkKKwkJCWNhbXIgJj0gfkFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgY2Ftcik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorYXRtZWxfYWM5N2NfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBsb25nIGNhbXI7CisJaW50IHJldHZhbCA9IDA7CisKKwljYW1yID0gYWM5N2NfcmVhZGwoY2hpcCwgQ0FNUik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWNhbXIgfD0gQUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEucnhfY2hhbik7CisJCWlmIChjaGlwLT5vcGVuZWQgPD0gMSkKKwkJCWNhbXIgJj0gfkFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgY2Ftcik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CithdG1lbF9hYzk3Y19wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YwkqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9zcmNfYWRkcihjaGlwLT5kbWEudHhfY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FjOTdjX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MJKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdAlmcmFtZXM7CisJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisKKwlieXRlcyA9IGR3X2RtYV9nZXRfZHN0X2FkZHIoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWJ5dGVzIC09IHJ1bnRpbWUtPmRtYV9hZGRyOworCisJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKKwlpZiAoZnJhbWVzID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlmcmFtZXMgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9hYzk3X3BsYXliYWNrX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3BvaW50ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FjOTdfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYzk3Y19wY21fbmV3KHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbQkJKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZQlodyA9IGF0bWVsX2FjOTdjX2h3OworCWludAkJCWNhcHR1cmUsIHBsYXliYWNrLCByZXR2YWw7CisKKwljYXB0dXJlID0gdGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwlwbGF5YmFjayA9IHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisKKwlyZXR2YWwgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCBjaGlwLT5jYXJkLT5zaG9ydG5hbWUsCisJCQljaGlwLT5wZGV2LT5pZCwgcGxheWJhY2ssIGNhcHR1cmUsICZwY20pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoY2FwdHVyZSkKKwkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJCSZhdG1lbF9hYzk3X2NhcHR1cmVfb3BzKTsKKwlpZiAocGxheWJhY2spCisJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisJCQkJJmF0bWVsX2FjOTdfcGxheWJhY2tfb3BzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkmY2hpcC0+cGRldi0+ZGV2LCBody5wZXJpb2RzX21pbiAqIGh3LnBlcmlvZF9ieXRlc19taW4sCisJCQlody5idWZmZXJfYnl0ZXNfbWF4KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCXBjbS0+aW5mb19mbGFncyA9IDA7CisJc3RyY3B5KHBjbS0+bmFtZSwgY2hpcC0+Y2FyZC0+c2hvcnRuYW1lKTsKKwljaGlwLT5wY20gPSBwY207CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19taXhlcl9uZXcoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSB0ZW1wbGF0ZTsKKwltZW1zZXQoJnRlbXBsYXRlLCAwLCBzaXplb2YodGVtcGxhdGUpKTsKKwl0ZW1wbGF0ZS5wcml2YXRlX2RhdGEgPSBjaGlwOworCXJldHVybiBzbmRfYWM5N19taXhlcihjaGlwLT5hYzk3X2J1cywgJnRlbXBsYXRlLCAmY2hpcC0+YWM5Nyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAorCQl1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoYWM5Nyk7CisJdW5zaWduZWQgbG9uZyB3b3JkOworCWludCB0aW1lb3V0ID0gNDA7CisKKwl3b3JkID0gKHJlZyAmIDB4N2YpIDw8IDE2IHwgdmFsOworCisJZG8geworCQlpZiAoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfVFhSRFkpIHsKKwkJCWFjOTdjX3dyaXRlbChjaGlwLCBDT1RIUiwgd29yZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb2RlYyB3cml0ZSB0aW1lb3V0XG4iKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGF0bWVsX2FjOTdjX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQl1bnNpZ25lZCBzaG9ydCByZWcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoYWM5Nyk7CisJdW5zaWduZWQgbG9uZyB3b3JkOworCWludCB0aW1lb3V0ID0gNDA7CisJaW50IHdyaXRlID0gMTA7CisKKwl3b3JkID0gKDB4ODAgfCAocmVnICYgMHg3ZikpIDw8IDE2OworCisJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9SWFJEWSkgIT0gMCkKKwkJYWM5N2NfcmVhZGwoY2hpcCwgQ09SSFIpOworCityZXRyeV93cml0ZToKKwl0aW1lb3V0ID0gNDA7CisKKwlkbyB7CisJCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfVFhSRFkpICE9IDApIHsKKwkJCWFjOTdjX3dyaXRlbChjaGlwLCBDT1RIUiwgd29yZCk7CisJCQlnb3RvIHJlYWRfcmVnOworCQl9CisJCXVkZWxheSgxMCk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWlmICghLS13cml0ZSkKKwkJZ290byB0aW1lZF9vdXQ7CisJZ290byByZXRyeV93cml0ZTsKKworcmVhZF9yZWc6CisJZG8geworCQlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1JYUkRZKSAhPSAwKSB7CisJCQl1bnNpZ25lZCBzaG9ydCB2YWwgPSBhYzk3Y19yZWFkbChjaGlwLCBDT1JIUik7CisJCQlyZXR1cm4gdmFsOworCQl9CisJCXVkZWxheSgxMCk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWlmICghLS13cml0ZSkKKwkJZ290byB0aW1lZF9vdXQ7CisJZ290byByZXRyeV93cml0ZTsKKwordGltZWRfb3V0OgorCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvZGVjIHJlYWQgdGltZW91dFxuIik7CisJcmV0dXJuIDB4ZmZmZjsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCit7CisJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gc2xhdmU7CisKKwlpZiAoZHdzLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2KSB7CisJCWNoYW4tPnByaXZhdGUgPSBkd3M7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX3Jlc2V0KHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCkKK3sKKwlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIEFDOTdDX01SX1dSU1QpOworCisJaWYgKGdwaW9faXNfdmFsaWQoY2hpcC0+cmVzZXRfcGluKSkgeworCQlncGlvX3NldF92YWx1ZShjaGlwLT5yZXNldF9waW4sIDApOworCQkvKiBBQzk3IHYyLjIgc3BlY2lmaWNhdGlvbnMgc2F5cyBtaW5pbXVtIDEgdXMuICovCisJCXVkZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPnJlc2V0X3BpbiwgMSk7CisJfQorCisJdWRlbGF5KDEpOworCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgQUM5N0NfTVJfRU5BKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWM5N2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkqY2FyZDsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MJCSpjaGlwOworCXN0cnVjdCByZXNvdXJjZQkJCSpyZWdzOworCXN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKKwlzdHJ1Y3QgY2xrCQkJKnBjbGs7CisJc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idXNfb3BzCW9wcyA9IHsKKwkJLndyaXRlCT0gYXRtZWxfYWM5N2Nfd3JpdGUsCisJCS5yZWFkCT0gYXRtZWxfYWM5N2NfcmVhZCwKKwl9OworCWludAkJCQlyZXR2YWw7CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBlcmlwaGVyYWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwY2xrKTsKKwl9CisJY2xrX2VuYWJsZShwY2xrKTsKKworCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKKwkJCVRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGF0bWVsX2FjOTdjKSwgJmNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSBzb3VuZCBjYXJkIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3NuZF9jYXJkX25ldzsKKwl9CisKKwljaGlwID0gZ2V0X2NoaXAoY2FyZCk7CisKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQXRtZWwgQUM5N0MiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXRtZWwgQUM5N0MiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiQXRtZWwgQUM5NyBjb250cm9sbGVyIik7CisKKwljaGlwLT5jYXJkID0gY2FyZDsKKwljaGlwLT5wY2xrID0gcGNsazsKKwljaGlwLT5wZGV2ID0gcGRldjsKKwljaGlwLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKworCWlmICghY2hpcC0+cmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVtYXAgcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+cmVzZXRfcGluKSkgeworCQlpZiAoZ3Bpb19yZXF1ZXN0KHBkYXRhLT5yZXNldF9waW4sICJyZXNldF9waW4iKSkgeworCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVzZXQgcGluIG5vdCBhdmFpbGFibGVcbiIpOworCQkJY2hpcC0+cmVzZXRfcGluID0gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+cmVzZXRfcGluLCAxKTsKKwkJCWNoaXAtPnJlc2V0X3BpbiA9IHBkYXRhLT5yZXNldF9waW47CisJCX0KKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCisJcmV0dmFsID0gc25kX2FjOTdfYnVzKGNhcmQsIDAsICZvcHMsIGNoaXAsICZjaGlwLT5hYzk3X2J1cyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgb24gYWM5NyBidXNcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlhdG1lbF9hYzk3Y19yZXNldChjaGlwKTsKKworCXJldHZhbCA9IGF0bWVsX2FjOTdjX21peGVyX25ldyhjaGlwKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBhYzk3IG1peGVyXG4iKTsKKwkJZ290byBlcnJfYWM5N19idXM7CisJfQorCisJaWYgKHBkYXRhLT5yeF9kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPnJ4X2R3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnJ4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgQUM5N0NfQ0FSSFIgKyAyOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQljaGlwLT5kbWEucnhfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCisJCWRldl9pbmZvKCZjaGlwLT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIFJYXG4iLAorCQkJCQljaGlwLT5kbWEucnhfY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKwkJc2V0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWlmIChwZGF0YS0+dHhfZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT50eF9kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT50eF9yZWcgPSByZWdzLT5zdGFydCArIEFDOTdDX0NBVEhSICsgMjsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJY2hpcC0+ZG1hLnR4X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgZHdzKTsKKworCQlkZXZfaW5mbygmY2hpcC0+cGRldi0+ZGV2LCAidXNpbmcgJXMgZm9yIERNQSBUWFxuIiwKKwkJCQkJY2hpcC0+ZG1hLnR4X2NoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisJCXNldF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwlpZiAoIXRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykgJiYKKwkJCSF0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZG1hOworCX0KKworCXJldHZhbCA9IGF0bWVsX2FjOTdjX3BjbV9uZXcoY2hpcCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgYWM5NyBwY20gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZG1hOworCX0KKworCXJldHZhbCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBdG1lbCBBQzk3IGNvbnRyb2xsZXIgYXQgMHglcFxuIiwKKwkJCWNoaXAtPnJlZ3MpOworCisJcmV0dXJuIDA7CisKK2Vycl9kbWE6CisJaWYgKHRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS50eF9jaGFuKTsKKwljbGVhcl9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljaGlwLT5kbWEucnhfY2hhbiA9IE5VTEw7CisJY2hpcC0+ZG1hLnR4X2NoYW4gPSBOVUxMOworZXJyX2FjOTdfYnVzOgorCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKQorCQlncGlvX2ZyZWUoY2hpcC0+cmVzZXRfcGluKTsKKworCWlvdW5tYXAoY2hpcC0+cmVncyk7CitlcnJfaW9yZW1hcDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworZXJyX3NuZF9jYXJkX25ldzoKKwljbGtfZGlzYWJsZShwY2xrKTsKKwljbGtfcHV0KHBjbGspOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWlmICh0ZXN0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS50eF9jaGFuKTsKKwljbGtfZGlzYWJsZShjaGlwLT5wY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWNsa19lbmFibGUoY2hpcC0+cGNsayk7CisJaWYgKHRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEudHhfY2hhbik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGF0bWVsX2FjOTdjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhdG1lbF9hYzk3Y19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF0bWVsX2FjOTdjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGdldF9jaGlwKGNhcmQpOworCisJaWYgKGdwaW9faXNfdmFsaWQoY2hpcC0+cmVzZXRfcGluKSkKKwkJZ3Bpb19mcmVlKGNoaXAtPnJlc2V0X3Bpbik7CisKKwljbGtfZGlzYWJsZShjaGlwLT5wY2xrKTsKKwljbGtfcHV0KGNoaXAtPnBjbGspOworCWlvdW5tYXAoY2hpcC0+cmVncyk7CisKKwlpZiAodGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsZWFyX2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNoaXAtPmRtYS5yeF9jaGFuID0gTlVMTDsKKwljaGlwLT5kbWEudHhfY2hhbiA9IE5VTEw7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9hYzk3Y19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhdG1lbF9hYzk3Y19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdG1lbF9hYzk3YyIsCisJfSwKKwkuc3VzcGVuZAk9IGF0bWVsX2FjOTdjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdG1lbF9hYzk3Y19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9hYzk3Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXRtZWxfYWM5N2NfZHJpdmVyLAorCQkJYXRtZWxfYWM5N2NfcHJvYmUpOworfQorbW9kdWxlX2luaXQoYXRtZWxfYWM5N2NfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdG1lbF9hYzk3Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWVsX2FjOTdjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhdG1lbF9hYzk3Y19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEF0bWVsIEFDOTcgY29udHJvbGxlciIpOworTU9EVUxFX0FVVEhPUigiSGFucy1DaHJpc3RpYW4gRWd0dmVkdCA8aGFucy1jaHJpc3RpYW4uZWd0dmVkdEBhdG1lbC5jb20+Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYzk3Yy5oIGIvc291bmQvYXRtZWwvYWM5N2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdiZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fU09VTkRfQVRNRUxfQUM5N0NfSAorI2RlZmluZSBfX1NPVU5EX0FUTUVMX0FDOTdDX0gKKworI2RlZmluZSBBQzk3Q19NUgkJMHgwOAorI2RlZmluZSBBQzk3Q19JQ0EJCTB4MTAKKyNkZWZpbmUgQUM5N0NfT0NBCQkweDE0CisjZGVmaW5lIEFDOTdDX0NBUkhSCQkweDIwCisjZGVmaW5lIEFDOTdDX0NBVEhSCQkweDI0CisjZGVmaW5lIEFDOTdDX0NBU1IJCTB4MjgKKyNkZWZpbmUgQUM5N0NfQ0FNUgkJMHgyYworI2RlZmluZSBBQzk3Q19DQlJIUgkJMHgzMAorI2RlZmluZSBBQzk3Q19DQlRIUgkJMHgzNAorI2RlZmluZSBBQzk3Q19DQlNSCQkweDM4CisjZGVmaW5lIEFDOTdDX0NCTVIJCTB4M2MKKyNkZWZpbmUgQUM5N0NfQ09SSFIJCTB4NDAKKyNkZWZpbmUgQUM5N0NfQ09USFIJCTB4NDQKKyNkZWZpbmUgQUM5N0NfQ09TUgkJMHg0OAorI2RlZmluZSBBQzk3Q19DT01SCQkweDRjCisjZGVmaW5lIEFDOTdDX1NSCQkweDUwCisjZGVmaW5lIEFDOTdDX0lFUgkJMHg1NAorI2RlZmluZSBBQzk3Q19JRFIJCTB4NTgKKyNkZWZpbmUgQUM5N0NfSU1SCQkweDVjCisjZGVmaW5lIEFDOTdDX1ZFUlNJT04JCTB4ZmMKKworI2RlZmluZSBBQzk3Q19DQVRQUgkJUERDX1RQUgorI2RlZmluZSBBQzk3Q19DQVRDUgkJUERDX1RDUgorI2RlZmluZSBBQzk3Q19DQVROUFIJCVBEQ19UTlBSCisjZGVmaW5lIEFDOTdDX0NBVE5DUgkJUERDX1ROQ1IKKyNkZWZpbmUgQUM5N0NfQ0FSUFIJCVBEQ19SUFIKKyNkZWZpbmUgQUM5N0NfQ0FSQ1IJCVBEQ19SQ1IKKyNkZWZpbmUgQUM5N0NfQ0FSTlBSCQlQRENfUk5QUgorI2RlZmluZSBBQzk3Q19DQVJOQ1IJCVBEQ19STkNSCisjZGVmaW5lIEFDOTdDX1BUQ1IJCVBEQ19QVENSCisKKyNkZWZpbmUgQUM5N0NfTVJfRU5BCQkoMSA8PCAwKQorI2RlZmluZSBBQzk3Q19NUl9XUlNUCQkoMSA8PCAxKQorI2RlZmluZSBBQzk3Q19NUl9WUkEJCSgxIDw8IDIpCisKKyNkZWZpbmUgQUM5N0NfQ1NSX1RYUkRZCQkoMSA8PCAwKQorI2RlZmluZSBBQzk3Q19DU1JfVU5SVU4JCSgxIDw8IDIpCisjZGVmaW5lIEFDOTdDX0NTUl9SWFJEWQkJKDEgPDwgNCkKKyNkZWZpbmUgQUM5N0NfQ1NSX0VORFRYCQkoMSA8PCAxMCkKKyNkZWZpbmUgQUM5N0NfQ1NSX0VORFJYCQkoMSA8PCAxNCkKKworI2RlZmluZSBBQzk3Q19DTVJfU0laRV8yMAkoMCA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTgJKDEgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzE2CSgyIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xMAkoMyA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTV9MSVRUTEUJKDEgPDwgMTgpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU1fQklHCSgwIDw8IDE4KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VOQQkJKDEgPDwgMjEpCisjZGVmaW5lIEFDOTdDX0NNUl9ETUFFTgkJKDEgPDwgMjIpCisKKyNkZWZpbmUgQUM5N0NfU1JfQ0FFVlQJCSgxIDw8IDMpCisKKyNkZWZpbmUgQUM5N0NfQ0hfQVNTSUdOKHNsb3QsIGNoYW5uZWwpCQkJCQlcCisJKEFDOTdDX0NIQU5ORUxfIyNjaGFubmVsIDw8ICgzICogKEFDOTdfU0xPVF8jI3Nsb3QgLSAzKSkpCisjZGVmaW5lIEFDOTdDX0NIQU5ORUxfTk9ORQkweDAKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9BCQkweDEKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9CCQkweDIKKworI2VuZGlmIC8qIF9fU09VTkRfQVRNRUxfQUM5N0NfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCA2MzZiM2I1Li40YjIwZmEyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMTM3MywxMiArMTM3Myw5IEBACiBzdGF0aWMgaW50IHNuZF9jdGxfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxlLCBpbnQgb24pCiB7CiAJc3RydWN0IHNuZF9jdGxfZmlsZSAqY3RsOwotCWludCBlcnI7CisKIAljdGwgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjdGwtPmZhc3luYyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY3RsLT5mYXN5bmMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9od2RlcC5jIGIvc291bmQvY29yZS9od2RlcC5jCmluZGV4IDE5NWNhZmMuLmE3MGVlN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaHdkZXAuYworKysgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKQEAgLTk5LDkgKzk5LDYgQEAKIAlpZiAoaHcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWh3LT5vcHMub3BlbikKLQkJcmV0dXJuIC1FTlhJTzsKLQogCWlmICghdHJ5X21vZHVsZV9nZXQoaHctPmNhcmQtPm1vZHVsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC0xMTMsNiArMTEwLDEwIEBACiAJCQllcnIgPSAtRUJVU1k7CiAJCQlicmVhazsKIAkJfQorCQlpZiAoIWh3LT5vcHMub3BlbikgeworCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCQl9CiAJCWVyciA9IGh3LT5vcHMub3BlbihodywgZmlsZSk7CiAJCWlmIChlcnIgPj0gMCkKIAkJCWJyZWFrOwpAQCAtMTUxLDcgKzE1Miw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCWludCBlcnIgPSAtRU5YSU87CisJaW50IGVyciA9IDA7CiAJc3RydWN0IHNuZF9od2RlcCAqaHcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG1vZHVsZSAqbW9kID0gaHctPmNhcmQtPm1vZHVsZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCAwZDU1MjBjLi5mZDU2YWZlIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtMTIxLDMxICsxMjEsNDQgQEAKICNlbmRpZgogCiAvKioKLSAqICBzbmRfY2FyZF9uZXcgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBzb3VuZGNhcmQgc3RydWN0dXJlCisgKiAgc25kX2NhcmRfY3JlYXRlIC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgc291bmRjYXJkIHN0cnVjdHVyZQogICogIEBpZHg6IGNhcmQgaW5kZXggKGFkZHJlc3MpIFswIC4uLiAoU05EUlZfQ0FSRFMtMSldCiAgKiAgQHhpZDogY2FyZCBpZGVudGlmaWNhdGlvbiAoQVNDSUkgc3RyaW5nKQogICogIEBtb2R1bGU6IHRvcCBsZXZlbCBtb2R1bGUgZm9yIGxvY2tpbmcKICAqICBAZXh0cmFfc2l6ZTogYWxsb2NhdGUgdGhpcyBleHRyYSBzaXplIGFmdGVyIHRoZSBtYWluIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKKyAqICBAY2FyZF9yZXQ6IHRoZSBwb2ludGVyIHRvIHN0b3JlIHRoZSBjcmVhdGVkIGNhcmQgaW5zdGFuY2UKICAqCiAgKiAgQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBzb3VuZGNhcmQgc3RydWN0dXJlLgogICoKLSAqICBSZXR1cm5zIGttYWxsb2NhdGVkIHNuZF9jYXJkIHN0cnVjdHVyZS4gQ3JlYXRlcyB0aGUgQUxTQSBjb250cm9sIGludGVyZmFjZQotICogICh3aGljaCBpcyBibG9ja2VkIHVudGlsIHNuZF9jYXJkX3JlZ2lzdGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCkuCisgKiAgVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBzbmRfY2FyZCBpbnN0YW5jZSB2aWEga3phbGxvYyB3aXRoIHRoZSBnaXZlbgorICogIHNwYWNlIGZvciB0aGUgZHJpdmVyIHRvIHVzZSBmcmVlbHkuICBUaGUgYWxsb2NhdGVkIHN0cnVjdCBpcyBzdG9yZWQKKyAqICBpbiB0aGUgZ2l2ZW4gY2FyZF9yZXQgcG9pbnRlci4KKyAqCisgKiAgUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1zdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jYXJkX25ldyhpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsCi0JCQkgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSkKK2ludCBzbmRfY2FyZF9jcmVhdGUoaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLAorCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSwKKwkJICAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRfcmV0KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyLCBpZHgyOwogCisJaWYgKHNuZF9CVUdfT04oIWNhcmRfcmV0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNhcmRfcmV0ID0gTlVMTDsKKwogCWlmIChleHRyYV9zaXplIDwgMCkKIAkJZXh0cmFfc2l6ZSA9IDA7CiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSArIGV4dHJhX3NpemUsIEdGUF9LRVJORUwpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKHhpZCkgewotCQlpZiAoIXNuZF9pbmZvX2NoZWNrX3Jlc2VydmVkX3dvcmRzKHhpZCkpCisJCWlmICghc25kX2luZm9fY2hlY2tfcmVzZXJ2ZWRfd29yZHMoeGlkKSkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICJnaXZlbiBpZCBzdHJpbmcgJyVzJyBpcyByZXNlcnZlZC5cbiIsIHhpZCk7CisJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIF9fZXJyb3I7CisJCX0KIAkJc3RybGNweShjYXJkLT5pZCwgeGlkLCBzaXplb2YoY2FyZC0+aWQpKTsKIAl9CiAJZXJyID0gMDsKQEAgLTE5NSw2ICsyMDgsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jb250cm9scyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmN0bF9maWxlcyk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmZpbGVzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5maWxlc19saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5zaHV0ZG93bl9zbGVlcCk7CiAjaWZkZWYgQ09ORklHX1BNCiAJbXV0ZXhfaW5pdCgmY2FyZC0+cG93ZXJfbG9jayk7CkBAIC0yMDIsMjYgKzIxNiwyOCBAQAogI2VuZGlmCiAJLyogdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGNhbm5vdCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSB1c2VyIHNwYWNlIHVudGlsICovCiAJLyogc25kX2NhcmRzX2JpdG1hc2sgYW5kIHNuZF9jYXJkcyBhcmUgc2V0IHdpdGggc25kX2NhcmRfcmVnaXN0ZXIgKi8KLQlpZiAoKGVyciA9IHNuZF9jdGxfY3JlYXRlKGNhcmQpKSA8IDApIHsKLQkJc25kX3ByaW50ZCgidW5hYmxlIHRvIHJlZ2lzdGVyIGNvbnRyb2wgbWlub3JzXG4iKTsKKwllcnIgPSBzbmRfY3RsX2NyZWF0ZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbCBtaW5vcnNcbiIpOwogCQlnb3RvIF9fZXJyb3I7CiAJfQotCWlmICgoZXJyID0gc25kX2luZm9fY2FyZF9jcmVhdGUoY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRkKCJ1bmFibGUgdG8gY3JlYXRlIGNhcmQgaW5mb1xuIik7CisJZXJyID0gc25kX2luZm9fY2FyZF9jcmVhdGUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGNyZWF0ZSBjYXJkIGluZm9cbiIpOwogCQlnb3RvIF9fZXJyb3JfY3RsOwogCX0KIAlpZiAoZXh0cmFfc2l6ZSA+IDApCiAJCWNhcmQtPnByaXZhdGVfZGF0YSA9IChjaGFyICopY2FyZCArIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmQpOwotCXJldHVybiBjYXJkOworCSpjYXJkX3JldCA9IGNhcmQ7CisJcmV0dXJuIDA7CiAKICAgICAgIF9fZXJyb3JfY3RsOgogCXNuZF9kZXZpY2VfZnJlZV9hbGwoY2FyZCwgU05EUlZfREVWX0NNRF9QUkUpOwogICAgICAgX19lcnJvcjoKIAlrZnJlZShjYXJkKTsKLSAgICAgIAlyZXR1cm4gTlVMTDsKKyAgCXJldHVybiBlcnI7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2NhcmRfbmV3KTsKK0VYUE9SVF9TWU1CT0woc25kX2NhcmRfY3JlYXRlKTsKIAogLyogcmV0dXJuIG5vbi16ZXJvIGlmIGEgY2FyZCBpcyBhbHJlYWR5IGxvY2tlZCAqLwogaW50IHNuZF9jYXJkX2xvY2tlZChpbnQgY2FyZCkKQEAgLTI1OSw2ICsyNzUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoX2RmLCAmc2h1dGRvd25fZmlsZXMsIHNodXRkb3duX2xpc3QpIHsKIAkJaWYgKF9kZi0+ZmlsZSA9PSBmaWxlKSB7CiAJCQlkZiA9IF9kZjsKKwkJCWxpc3RfZGVsX2luaXQoJmRmLT5zaHV0ZG93bl9saXN0KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzQ3LDggKzM2NCw3IEBACiAJLyogcGhhc2UgMjogcmVwbGFjZSBmaWxlLT5mX29wIHdpdGggc3BlY2lhbCBkdW1teSBvcGVyYXRpb25zICovCiAJCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQltZmlsZSA9IGNhcmQtPmZpbGVzOwotCXdoaWxlIChtZmlsZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobWZpbGUsICZjYXJkLT5maWxlc19saXN0LCBsaXN0KSB7CiAJCWZpbGUgPSBtZmlsZS0+ZmlsZTsKIAogCQkvKiBpdCdzIGNyaXRpY2FsIHBhcnQsIHVzZSBlbmRsZXNzIGxvb3AgKi8KQEAgLTM2MSw4ICszNzcsNiBAQAogCiAJCW1maWxlLT5maWxlLT5mX29wID0gJnNuZF9zaHV0ZG93bl9mX29wczsKIAkJZm9wc19nZXQobWZpbGUtPmZpbGUtPmZfb3ApOwotCQkKLQkJbWZpbGUgPSBtZmlsZS0+bmV4dDsKIAl9CiAJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwkKIApAQCAtNDQyLDcgKzQ1Niw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCWlmIChjYXJkLT5maWxlcyA9PSBOVUxMKQorCWlmIChsaXN0X2VtcHR5KCZjYXJkLT5maWxlc19saXN0KSkKIAkJZnJlZV9ub3cgPSAxOwogCWVsc2UKIAkJY2FyZC0+ZnJlZV9vbl9sYXN0X2Nsb3NlID0gMTsKQEAgLTQ2Miw3ICs0NzYsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogd2FpdCwgdW50aWwgYWxsIGRldmljZXMgYXJlIHJlYWR5IGZvciB0aGUgZnJlZSBvcGVyYXRpb24gKi8KLQl3YWl0X2V2ZW50KGNhcmQtPnNodXRkb3duX3NsZWVwLCBjYXJkLT5maWxlcyA9PSBOVUxMKTsKKwl3YWl0X2V2ZW50KGNhcmQtPnNodXRkb3duX3NsZWVwLCBsaXN0X2VtcHR5KCZjYXJkLT5maWxlc19saXN0KSk7CiAJc25kX2NhcmRfZG9fZnJlZShjYXJkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgwOSwxNSArODIzLDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCW1maWxlLT5maWxlID0gZmlsZTsKIAltZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3AgPSBOVUxMOwotCW1maWxlLT5uZXh0ID0gTlVMTDsKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCWlmIChjYXJkLT5zaHV0ZG93bikgewogCQlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJCWtmcmVlKG1maWxlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1maWxlLT5uZXh0ID0gY2FyZC0+ZmlsZXM7Ci0JY2FyZC0+ZmlsZXMgPSBtZmlsZTsKKwlsaXN0X2FkZCgmbWZpbGUtPmxpc3QsICZjYXJkLT5maWxlc19saXN0KTsKIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MzksMjkgKzg1MSwyMCBAQAogICovCiBpbnQgc25kX2NhcmRfZmlsZV9yZW1vdmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbWZpbGUsICpwZmlsZSA9IE5VTEw7CisJc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm1maWxlLCAqZm91bmQgPSBOVUxMOwogCWludCBsYXN0X2Nsb3NlID0gMDsKIAogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JbWZpbGUgPSBjYXJkLT5maWxlczsKLQl3aGlsZSAobWZpbGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1maWxlLCAmY2FyZC0+ZmlsZXNfbGlzdCwgbGlzdCkgewogCQlpZiAobWZpbGUtPmZpbGUgPT0gZmlsZSkgewotCQkJaWYgKHBmaWxlKQotCQkJCXBmaWxlLT5uZXh0ID0gbWZpbGUtPm5leHQ7Ci0JCQllbHNlCi0JCQkJY2FyZC0+ZmlsZXMgPSBtZmlsZS0+bmV4dDsKKwkJCWxpc3RfZGVsKCZtZmlsZS0+bGlzdCk7CisJCQlpZiAobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKQorCQkJCWZvcHNfcHV0KG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCk7CisJCQlmb3VuZCA9IG1maWxlOwogCQkJYnJlYWs7CiAJCX0KLQkJcGZpbGUgPSBtZmlsZTsKLQkJbWZpbGUgPSBtZmlsZS0+bmV4dDsKIAl9Ci0JaWYgKG1maWxlICYmIG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCkgewotCQlmb3BzX3B1dChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApOwotCQlzcGluX2xvY2soJnNodXRkb3duX2xvY2spOwotCQlsaXN0X2RlbCgmbWZpbGUtPnNodXRkb3duX2xpc3QpOwotCQlzcGluX3VubG9jaygmc2h1dGRvd25fbG9jayk7Ci0JfQotCWlmIChjYXJkLT5maWxlcyA9PSBOVUxMKQorCWlmIChsaXN0X2VtcHR5KCZjYXJkLT5maWxlc19saXN0KSkKIAkJbGFzdF9jbG9zZSA9IDE7CiAJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCWlmIChsYXN0X2Nsb3NlKSB7CkBAIC04NjksMTEgKzg3MiwxMSBAQAogCQlpZiAoY2FyZC0+ZnJlZV9vbl9sYXN0X2Nsb3NlKQogCQkJc25kX2NhcmRfZG9fZnJlZShjYXJkKTsKIAl9Ci0JaWYgKCFtZmlsZSkgeworCWlmICghZm91bmQpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiQUxTQSBjYXJkIGZpbGUgcmVtb3ZlIHByb2JsZW0gKCVwKVxuIiwgZmlsZSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlrZnJlZShtZmlsZSk7CisJa2ZyZWUoZm91bmQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDA3N2E4NTIuLmM4MjU0YzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0yMyw2ICsyMywxNCBAQAogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAKK3N0YXRpYyBpbnQgamFja190eXBlc1tdID0geworCVNXX0hFQURQSE9ORV9JTlNFUlQsCisJU1dfTUlDUk9QSE9ORV9JTlNFUlQsCisJU1dfTElORU9VVF9JTlNFUlQsCisJU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQsCisJU1dfVklERU9PVVRfSU5TRVJULAorfTsKKwogc3RhdGljIGludCBzbmRfamFja19kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBzbmRfamFjayAqamFjayA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CkBAIC03OSw2ICs4Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9qYWNrICpqYWNrOwogCWludCBlcnI7CisJaW50IGk7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CiAJCS5kZXZfZnJlZSA9IHNuZF9qYWNrX2Rldl9mcmVlLAogCQkuZGV2X3JlZ2lzdGVyID0gc25kX2phY2tfZGV2X3JlZ2lzdGVyLApAQCAtMTAwLDE4ICsxMDksMTAgQEAKIAogCWphY2stPnR5cGUgPSB0eXBlOwogCi0JaWYgKHR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19IRUFEUEhPTkVfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX0xJTkVPVVQpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19MSU5FT1VUX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19NSUNST1BIT05FKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfTUlDUk9QSE9ORV9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTUVDSEFOSUNBTCkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJUKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqYWNrX3R5cGVzKTsgaSsrKQorCQlpZiAodHlwZSAmICgxIDw8IGkpKQorCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKKwkJCQkJICAgICBqYWNrX3R5cGVzW2ldKTsKIAogCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9KQUNLLCBqYWNrLCAmb3BzKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE1NCwyMSArMTU1LDE3IEBACiAgKi8KIHZvaWQgc25kX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfamFjayAqamFjaywgaW50IHN0YXR1cykKIHsKKwlpbnQgaTsKKwogCWlmICghamFjaykKIAkJcmV0dXJuOwogCi0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19IRUFEUEhPTkVfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19IRUFEUEhPTkUpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTElORU9VVCkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0xJTkVPVVRfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19MSU5FT1VUKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX01JQ1JPUEhPTkUpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19NSUNST1BIT05FX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTUlDUk9QSE9ORSk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX01FQ0hBTklDQUwpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGphY2tfdHlwZXMpOyBpKyspIHsKKwkJaW50IHRlc3RiaXQgPSAxIDw8IGk7CisJCWlmIChqYWNrLT50eXBlICYgdGVzdGJpdCkKKwkJCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBqYWNrX3R5cGVzW2ldLAorCQkJCQkgICAgc3RhdHVzICYgdGVzdGJpdCk7CisJfQogCiAJaW5wdXRfc3luYyhqYWNrLT5pbnB1dF9kZXYpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9taXNjLmMgYi9zb3VuZC9jb3JlL21pc2MuYwppbmRleCAzODUyNGY2Li5hOTcxMGUwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL21pc2MuYworKysgYi9zb3VuZC9jb3JlL21pc2MuYwpAQCAtOTUsMTIgKzk1LDE0IEBACiB7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnE7CiAKLQlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykKLQkJaWYgKHEtPnN1YnZlbmRvciA9PSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IgJiYKLQkJICAgICghcS0+c3ViZGV2aWNlIHx8IHEtPnN1YmRldmljZSA9PSBwY2ktPnN1YnN5c3RlbV9kZXZpY2UpKQorCWZvciAocSA9IGxpc3Q7IHEtPnN1YnZlbmRvcjsgcSsrKSB7CisJCWlmIChxLT5zdWJ2ZW5kb3IgIT0gcGNpLT5zdWJzeXN0ZW1fdmVuZG9yKQorCQkJY29udGludWU7CisJCWlmICghcS0+c3ViZGV2aWNlIHx8CisJCSAgICAocGNpLT5zdWJzeXN0ZW1fZGV2aWNlICYgcS0+c3ViZGV2aWNlX21hc2spID09IHEtPnN1YmRldmljZSkKIAkJCXJldHVybiBxOworCX0KIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChzbmRfcGNpX3F1aXJrX2xvb2t1cCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCA2OTlkMjg5Li5kZGEwMDBiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC0xMTYwLDkgKzExNjAsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZTogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZTogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOwogCQkJZWxzZQotCQkJCXByaW50aygicGNtX29zczogd3JpdGU6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGU6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9vc3NfcHJlcGFyZShzdWJzdHJlYW0pOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMTk2LDkgKzExOTgsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkOiByZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQ6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWQ6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZDogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOwogI2VuZGlmCiAJCQlyZXQgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUkFJTiwgTlVMTCk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTEyNDIsOSArMTI0NiwxMSBAQAogCQkgICAgcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7CiAjaWZkZWYgT1NTX0RFQlVHCiAJCQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfWFJVTikKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRldjogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZXY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRldjogcmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZXY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9vc3NfcHJlcGFyZShzdWJzdHJlYW0pOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMjc4LDkgKzEyODQsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkdjogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkdjogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOwogCQkJZWxzZQotCQkJCXByaW50aygicGNtX29zczogcmVhZHY6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZHY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOwogCQkJaWYgKHJldCA8IDApCkBAIC0xNTMzLDcgKzE1NDEsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZSgmcnVudGltZS0+c2xlZXAsICZ3YWl0KTsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInN5bmMxOiBzaXplID0gJWxpXG4iLCBzaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic3luYzE6IHNpemUgPSAlbGlcbiIsIHNpemUpOwogI2VuZGlmCiAJd2hpbGUgKDEpIHsKIAkJcmVzdWx0ID0gc25kX3BjbV9vc3Nfd3JpdGUyKHN1YnN0cmVhbSwgcnVudGltZS0+b3NzLmJ1ZmZlciwgc2l6ZSwgMSk7CkBAIC0xNTkwLDcgKzE1OTgsNyBAQAogCQltdXRleF9sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCQlpZiAocnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID4gMCkgewogI2lmZGVmIE9TU19ERUJVRwotCQkJcHJpbnRrKCJzeW5jOiBidWZmZXJfdXNlZFxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic3luYzogYnVmZmVyX3VzZWRcbiIpOwogI2VuZGlmCiAJCQlzaXplID0gKDggKiAocnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyAtIHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCkgKyA3KSAvIHdpZHRoOwogCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UoZm9ybWF0LApAQCAtMTYwMyw3ICsxNjExLDcgQEAKIAkJCX0KIAkJfSBlbHNlIGlmIChydW50aW1lLT5vc3MucGVyaW9kX3B0ciA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKLQkJCXByaW50aygic3luYzogcGVyaW9kX3B0clxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic3luYzogcGVyaW9kX3B0clxuIik7CiAjZW5kaWYKIAkJCXNpemUgPSBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzIC0gcnVudGltZS0+b3NzLnBlcmlvZF9wdHI7CiAJCQlzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShmb3JtYXQsCkBAIC0xODk1LDcgKzE5MDMsOSBAQAogCiBzdGF0aWMgaW50IHNuZF9wY21fb3NzX25vbmJsb2NrKHN0cnVjdCBmaWxlICogZmlsZSkKIHsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xOTUyLDcgKzE5NjIsNyBAQAogCWludCBlcnIsIGNtZDsKIAogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogdHJpZ2dlciA9IDB4JXhcbiIsIHRyaWdnZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB0cmlnZ2VyID0gMHgleFxuIiwgdHJpZ2dlcik7CiAjZW5kaWYKIAkKIAlwc3Vic3RyZWFtID0gcGNtX29zc19maWxlLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdOwpAQCAtMjE3MCw3ICsyMTgwLDkgQEAKIAl9CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHNwYWNlOiBieXRlcyA9ICVpLCBmcmFnbWVudHMgPSAlaSwgZnJhZ3N0b3RhbCA9ICVpLCBmcmFnc2l6ZSA9ICVpXG4iLCBpbmZvLmJ5dGVzLCBpbmZvLmZyYWdtZW50cywgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogc3BhY2U6IGJ5dGVzID0gJWksIGZyYWdtZW50cyA9ICVpLCAiCisJICAgICAgICJmcmFnc3RvdGFsID0gJWksIGZyYWdzaXplID0gJWlcbiIsCisJICAgICAgIGluZm8uYnl0ZXMsIGluZm8uZnJhZ21lbnRzLCBpbmZvLmZyYWdzdG90YWwsIGluZm8uZnJhZ3NpemUpOwogI2VuZGlmCiAJaWYgKGNvcHlfdG9fdXNlcihfaW5mbywgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjQ3Myw3ICsyNDg1LDcgQEAKIAlpZiAoKChjbWQgPj4gOCkgJiAweGZmKSAhPSAnUCcpCiAJCXJldHVybiAtRUlOVkFMOwogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogaW9jdGwgPSAweCV4XG4iLCBjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBpb2N0bCA9IDB4JXhcbiIsIGNtZCk7CiAjZW5kaWYKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EQ1RMX0RTUF9SRVNFVDoKQEAgLTI2MjcsNyArMjYzOSw4IEBACiAjZWxzZQogCXsKIAkJc3NpemVfdCByZXMgPSBzbmRfcGNtX29zc19yZWFkMShzdWJzdHJlYW0sIGJ1ZiwgY291bnQpOwotCQlwcmludGsoInBjbV9vc3M6IHJlYWQgJWxpIGJ5dGVzIChyZXR1cm5lZCAlbGkgYnl0ZXMpXG4iLCAobG9uZyljb3VudCwgKGxvbmcpcmVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQgJWxpIGJ5dGVzICIKKwkJICAgICAgICIocmV0dXJuZWQgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlcyk7CiAJCXJldHVybiByZXM7CiAJfQogI2VuZGlmCkBAIC0yNjQ2LDcgKzI2NTksOCBAQAogCXN1YnN0cmVhbS0+Zl9mbGFncyA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMShzdWJzdHJlYW0sIGJ1ZiwgY291bnQpOwogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogd3JpdGUgJWxpIGJ5dGVzICh3cm90ZSAlbGkgYnl0ZXMpXG4iLCAobG9uZyljb3VudCwgKGxvbmcpcmVzdWx0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGUgJWxpIGJ5dGVzICh3cm90ZSAlbGkgYnl0ZXMpXG4iLAorCSAgICAgICAobG9uZyljb3VudCwgKGxvbmcpcmVzdWx0KTsKICNlbmRpZgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yNzIwLDcgKzI3MzQsNyBAQAogCWludCBlcnI7CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IG1tYXAgYmVnaW5cbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBtbWFwIGJlZ2luXG4iKTsKICNlbmRpZgogCXBjbV9vc3NfZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzd2l0Y2ggKChhcmVhLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUpKSkgewpAQCAtMjc3MCw3ICsyNzg0LDggQEAKIAlydW50aW1lLT5zaWxlbmNlX3RocmVzaG9sZCA9IDA7CiAJcnVudGltZS0+c2lsZW5jZV9zaXplID0gMDsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IG1tYXAgb2ssIGJ5dGVzID0gMHgleFxuIiwgcnVudGltZS0+b3NzLm1tYXBfYnl0ZXMpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBtbWFwIG9rLCBieXRlcyA9IDB4JXhcbiIsCisJICAgICAgIHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzKTsKICNlbmRpZgogCS8qIEluIG1tYXAgbW9kZSB3ZSBuZXZlciBzdG9wICovCiAJcnVudGltZS0+c3RvcF90aHJlc2hvbGQgPSBydW50aW1lLT5ib3VuZGFyeTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaCBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAppbmRleCBjYTJmNGMzLi5iOWFmYWI2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCkBAIC0xNzYsOSArMTc2LDkgQEAKICNlbmRpZgogCiAjaWZkZWYgUExVR0lOX0RFQlVHCi0jZGVmaW5lIHBkcHJpbnRmKCBmbXQsIGFyZ3MuLi4gKSBwcmludGsoICJwbHVnaW46ICIgZm10LCAjI2FyZ3MpCisjZGVmaW5lIHBkcHJpbnRmKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgInBsdWdpbjogIiBmbXQsICMjYXJncykKICNlbHNlCi0jZGVmaW5lIHBkcHJpbnRmKCBmbXQsIGFyZ3MuLi4gKSAKKyNkZWZpbmUgcGRwcmludGYoZm10LCBhcmdzLi4uKQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX1BDTV9QTFVHSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMTkyYTQzMy4uMTQ1OTMxYSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC02NjcsNyArNjY3LDYgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5sb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5zdWJzdHJlYW1zKTsKIAkJbGlzdF9hZGRfdGFpbCgmc3Vic3RyZWFtLT5saW5rX2xpc3QsICZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAuc3Vic3RyZWFtcyk7Ci0JCXNwaW5fbG9ja19pbml0KCZzdWJzdHJlYW0tPnRpbWVyX2xvY2spOwogCQlhdG9taWNfc2V0KCZzdWJzdHJlYW0tPm1tYXBfY291bnQsIDApOwogCQlwcmV2ID0gc3Vic3RyZWFtOwogCX0KQEAgLTY5Miw3ICs2OTEsNyBAQAogICoKICAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotaW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCitpbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IGRldmljZSwKIAkJaW50IHBsYXliYWNrX2NvdW50LCBpbnQgY2FwdHVyZV9jb3VudCwKIAkgICAgICAgIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IDkyMTY5MTAuLmZiYjJlMzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC0xMjUsMjMgKzEyNSwzMiBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKKyNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pCSgoc3Vic3RyZWFtKS0+cHN0ci0+eHJ1bl9kZWJ1ZykKKyNlbHNlCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtKQkwCisjZW5kaWYKKworI2RlZmluZSBkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKSBkbyB7CVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSA+IDEpCVwKKwkJCWR1bXBfc3RhY2soKTsJCVwKKwl9IHdoaWxlICgwKQorCiBzdGF0aWMgdm9pZCB4cnVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXNuZF9wY21fc3RvcChzdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgeworCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkpIHsKIAkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJYUlVOOiBwY21DJWREJWQlY1xuIiwKIAkJCSAgIHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5udW1iZXIsCiAJCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLAogCQkJICAgc3Vic3RyZWFtLT5zdHJlYW0gPyAnYycgOiAncCcpOwotCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCWR1bXBfc3RhY2soKTsKKwkJZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSk7CiAJfQotI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJCQkgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgcG9zOwogCkBAIC0xNTAsMTcgKzE1OSwyMSBAQAogCXBvcyA9IHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7CiAJaWYgKHBvcyA9PSBTTkRSVl9QQ01fUE9TX1hSVU4pCiAJCXJldHVybiBwb3M7IC8qIFhSVU4gKi8KLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICAiQlVHOiBzdHJlYW0gPSAlaSwgcG9zID0gMHglbHgsIGJ1ZmZlciBzaXplID0gMHglbHgsIHBlcmlvZCBzaXplID0gMHglbHhcbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgICJCVUc6IHN0cmVhbSA9ICVpLCBwb3MgPSAweCVseCwgIgorCQkJCSAgICJidWZmZXIgc2l6ZSA9IDB4JWx4LCBwZXJpb2Qgc2l6ZSA9IDB4JWx4XG4iLAorCQkJCSAgIHN1YnN0cmVhbS0+c3RyZWFtLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJfQorCQlwb3MgPSAwOwogCX0KLSNlbmRpZgogCXBvcyAtPSBwb3MgJSBydW50aW1lLT5taW5fYWxpZ247CiAJcmV0dXJuIHBvczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCSAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3N0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKIHsKIAlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbDsKIApAQCAtMTgyLDExICsxOTUsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX2ludGVycnVwdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyNkZWZpbmUgaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgZm10LCBhcmdzLi4uKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pKSB7CQkJCVwKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCisJCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAorCQkJfQkJCQkJCVwKKwkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG5ld19od19wdHIsIGh3X3B0cl9pbnRlcnJ1cHQ7CisJc25kX3BjbV91ZnJhbWVzX3QgbmV3X2h3X3B0ciwgaHdfcHRyX2ludGVycnVwdCwgaHdfYmFzZTsKIAlzbmRfcGNtX3NmcmFtZXNfdCBkZWx0YTsKIAogCXBvcyA9IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3Vic3RyZWFtLCBydW50aW1lKTsKQEAgLTE5NCwzNiArMjE3LDUzIEBACiAJCXhydW4oc3Vic3RyZWFtKTsKIAkJcmV0dXJuIC1FUElQRTsKIAl9Ci0JaWYgKHJ1bnRpbWUtPnBlcmlvZF9zaXplID09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQlnb3RvIF9fbmV4dF9idWY7Ci0JbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKKwluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKIAlod19wdHJfaW50ZXJydXB0ID0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCArIHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCi0JZGVsdGEgPSBod19wdHJfaW50ZXJydXB0IC0gbmV3X2h3X3B0cjsKLQlpZiAoZGVsdGEgPiAwKSB7Ci0JCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JCQlpZiAocnVudGltZS0+cGVyaW9kcyA+IDEgJiYgc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7Ci0JCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsxXSAoc3RyZWFtID0gJWksIGRlbHRhOiAtJWxkLCBtYXggaml0dGVyID0gJWxkKTogd3JvbmcgaW50ZXJydXB0IGFja25vd2xlZGdlP1xuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKSBkZWx0YSwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKTsKLQkJCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCQkJZHVtcF9zdGFjaygpOwotCQkJfQotI2VuZGlmCi0JCQlyZXR1cm4gMDsKLQkJfQotCSAgICAgIF9fbmV4dF9idWY6Ci0JCXJ1bnRpbWUtPmh3X3B0cl9iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAocnVudGltZS0+aHdfcHRyX2Jhc2UgPT0gcnVudGltZS0+Ym91bmRhcnkpCi0JCQlydW50aW1lLT5od19wdHJfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OworCWlmIChod19wdHJfaW50ZXJydXB0ID49IHJ1bnRpbWUtPmJvdW5kYXJ5KSB7CisJCWh3X3B0cl9pbnRlcnJ1cHQgLT0gcnVudGltZS0+Ym91bmRhcnk7CisJCWlmIChod19iYXNlIDwgcnVudGltZS0+Ym91bmRhcnkgLyAyKQorCQkJLyogaHdfYmFzZSB3YXMgYWxyZWFkeSBsYXBwZWQ7IHJlY2FsYyBkZWx0YSAqLworCQkJZGVsdGEgPSBuZXdfaHdfcHRyIC0gaHdfcHRyX2ludGVycnVwdDsKIAl9Ci0KKwlpZiAoZGVsdGEgPCAwKSB7CisJCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoZGVsdGEgPCAwKSB7CisJCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKKwkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgIgorCQkJCSAgICAgIihzdHJlYW09JWksIHBvcz0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpaHdfcHRyX2ludGVycnVwdCk7CisJCQkvKiByZWJhc2UgdG8gaW50ZXJydXB0IHBvc2l0aW9uICovCisJCQlod19iYXNlID0gbmV3X2h3X3B0ciA9IGh3X3B0cl9pbnRlcnJ1cHQ7CisJCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCisJCQlod19iYXNlIC09IGh3X2Jhc2UgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCWRlbHRhID0gMDsKKwkJfSBlbHNlIHsKKwkJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCQlod19iYXNlID0gMDsKKwkJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCQl9CisJfQorCWlmIChkZWx0YSA+IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICJMb3N0IGludGVycnVwdHM/ICIKKwkJCSAgICAgIihzdHJlYW09JWksIGRlbHRhPSVsZCwgaW50cl9wdHI9JWxkKVxuIiwKKwkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKWRlbHRhLAorCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKKwkJLyogcmViYXNlIGh3X3B0cl9pbnRlcnJ1cHQgKi8KKwkJaHdfcHRyX2ludGVycnVwdCA9CisJCQluZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCX0KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAorCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKIAlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7Ci0JcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IG5ld19od19wdHIgLSBuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemU7CisJcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IGh3X3B0cl9pbnRlcnJ1cHQ7CiAKIAlyZXR1cm4gc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3Vic3RyZWFtLCBydW50aW1lKTsKIH0KQEAgLTIzMyw3ICsyNzMsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHI7CisJc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0ciwgbmV3X2h3X3B0ciwgaHdfYmFzZTsKIAlzbmRfcGNtX3NmcmFtZXNfdCBkZWx0YTsKIAogCW9sZF9od19wdHIgPSBydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKQEAgLTI0MiwyOSArMjgyLDM4IEBACiAJCXhydW4oc3Vic3RyZWFtKTsKIAkJcmV0dXJuIC1FUElQRTsKIAl9Ci0JbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKKwluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKIAotCWRlbHRhID0gb2xkX2h3X3B0ciAtIG5ld19od19wdHI7Ci0JaWYgKGRlbHRhID4gMCkgewotCQlpZiAoKHNuZF9wY21fdWZyYW1lc190KWRlbHRhIDwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKSB7Ci0jaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwotCQkJaWYgKHJ1bnRpbWUtPnBlcmlvZHMgPiAyICYmIHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewotCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMl0gKHN0cmVhbSA9ICVpLCBkZWx0YTogLSVsZCwgbWF4IGppdHRlciA9ICVsZCk6IHdyb25nIGludGVycnVwdCBhY2tub3dsZWRnZT9cbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZykgZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMik7Ci0JCQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCi0JCQkJCWR1bXBfc3RhY2soKTsKLQkJCX0KLSNlbmRpZgorCWRlbHRhID0gbmV3X2h3X3B0ciAtIG9sZF9od19wdHI7CisJaWYgKGRlbHRhIDwgMCkgeworCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGRlbHRhIDwgMCkgeworCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCisJCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsyXSAiCisJCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgb2xkX3B0cj0lbGQpXG4iLAorCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKKwkJCQkgICAgIChsb25nKW9sZF9od19wdHIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChydW50aW1lLT5od19wdHJfYmFzZSA9PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gMDsKLQkJbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCWh3X2Jhc2UgPSAwOworCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwl9CisJaWYgKGRlbHRhID4gcnVudGltZS0+cGVyaW9kX3NpemUgJiYgcnVudGltZS0+cGVyaW9kcyA+IDEpIHsKKwkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKKwkJCSAgICAgImh3X3B0ciBza2lwcGluZyEgIgorCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZClcbiIsCisJCQkgICAgIChsb25nKXBvcywgKGxvbmcpZGVsdGEsCisJCQkgICAgIChsb25nKXJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCiAJICAgIHJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA+IDApCiAJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIG5ld19od19wdHIpOwogCisJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSBod19iYXNlOwogCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gbmV3X2h3X3B0cjsKIAogCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCBhNzg5ZWZjLi5hMTUxZmIwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWlmICghKHBhcmFtcy0+cm1hc2sgJiAoMSA8PCBrKSkpCiAJCQljb250aW51ZTsKICNpZmRlZiBSVUxFU19ERUJVRwotCQlwcmludGsoIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOwogCQlwcmludGsoIiUwNHglMDR4JTA0eCUwNHggLT4gIiwgbS0+Yml0c1szXSwgbS0+Yml0c1syXSwgbS0+Yml0c1sxXSwgbS0+Yml0c1swXSk7CiAjZW5kaWYKIAkJY2hhbmdlZCA9IHNuZF9tYXNrX3JlZmluZShtLCBjb25zdHJzX21hc2soY29uc3RycywgaykpOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCWlmICghKHBhcmFtcy0+cm1hc2sgJiAoMSA8PCBrKSkpCiAJCQljb250aW51ZTsKICNpZmRlZiBSVUxFU19ERUJVRwotCQlwcmludGsoIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOwogCQlpZiAoaS0+ZW1wdHkpCiAJCQlwcmludGsoImVtcHR5Iik7CiAJCWVsc2UKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQkJaWYgKCFkb2l0KQogCQkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCQlwcmludGsoIlJ1bGUgJWQgWyVwXTogIiwgaywgci0+ZnVuYyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUnVsZSAlZCBbJXBdOiAiLCBrLCByLT5mdW5jKTsKIAkJCWlmIChyLT52YXIgPj0gMCkgewogCQkJCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW3ItPnZhcl0pOwogCQkJCWlmIChod19pc19tYXNrKHItPnZhcikpIHsKQEAgLTMyNDYsOSArMzI0Niw3IEBACiAJZXJyID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZydW50aW1lLT5mYXN5bmMpOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fdGltZXIuYyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKaW5kZXggMmM4OWMwNC4uY2E4MDY4YiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCkBAIC04NSwyNSArODUsMTkgQEAKIAogc3RhdGljIGludCBzbmRfcGNtX3RpbWVyX3N0YXJ0KHN0cnVjdCBzbmRfdGltZXIgKiB0aW1lcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCQogCXN1YnN0cmVhbSA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfcGNtX3RpbWVyX3N0b3Aoc3RydWN0IHNuZF90aW1lciAqIHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCiAJc3Vic3RyZWFtID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlzdWJzdHJlYW0tPnRpbWVyX3J1bm5pbmcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IDAwMjc3N2IuLjQ3MzI0N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC0yMjQsMTU2ICsyMjQsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIGxvb2sgZm9yIGFuIGF2YWlsYWJsZSBzdWJzdHJlYW0gZm9yIHRoZSBnaXZlbiBzdHJlYW0gZGlyZWN0aW9uOworICogaWYgYSBzcGVjaWZpYyBzdWJkZXZpY2UgaXMgZ2l2ZW4sIHRyeSB0byBhc3NpZ24gaXQKKyAqLworc3RhdGljIGludCBhc3NpZ25fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksIGludCBzdWJkZXZpY2UsCisJCQkgICAgaW50IHN0cmVhbSwgaW50IG1vZGUsCisJCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqKnN1Yl9yZXQpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdHIgKnMgPSAmcm1pZGktPnN0cmVhbXNbc3RyZWFtXTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGluZm9fZmxhZ3NbMl0gPSB7CisJCVtTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdID0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCwKKwkJW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXSA9IFNORFJWX1JBV01JRElfSU5GT19JTlBVVCwKKwl9OworCisJaWYgKCEocm1pZGktPmluZm9fZmxhZ3MgJiBpbmZvX2ZsYWdzW3N0cmVhbV0pKQorCQlyZXR1cm4gLUVOWElPOworCWlmIChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPj0gcy0+c3Vic3RyZWFtX2NvdW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAocy0+c3Vic3RyZWFtX29wZW5lZCA+PSBzLT5zdWJzdHJlYW1fY291bnQpCisJCXJldHVybiAtRUFHQUlOOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJzdHJlYW0sICZzLT5zdWJzdHJlYW1zLCBsaXN0KSB7CisJCWlmIChzdWJzdHJlYW0tPm9wZW5lZCkgeworCQkJaWYgKHN0cmVhbSA9PSBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCB8fAorCQkJICAgICEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdWJkZXZpY2UgPCAwIHx8IHN1YmRldmljZSA9PSBzdWJzdHJlYW0tPm51bWJlcikgeworCQkJKnN1Yl9yZXQgPSBzdWJzdHJlYW07CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVBR0FJTjsKK30KKworLyogb3BlbiBhbmQgZG8gcmVmLWNvdW50aW5nIGZvciB0aGUgZ2l2ZW4gc3Vic3RyZWFtICovCitzdGF0aWMgaW50IG9wZW5fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksCisJCQkgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgaW50IG1vZGUpCit7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHN1YnN0cmVhbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzdWJzdHJlYW0tPm9wZW5lZCA9IDE7CisJaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50KysgPT0gMCkKKwkJc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZyA9IDE7CisJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQorCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDE7CisJcm1pZGktPnN0cmVhbXNbc3Vic3RyZWFtLT5zdHJlYW1dLnN1YnN0cmVhbV9vcGVuZWQrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xvc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksCisJCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIGludCBjbGVhbnVwKTsKKworc3RhdGljIGludCByYXdtaWRpX29wZW5fcHJpdihzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLCBpbnQgc3ViZGV2aWNlLCBpbnQgbW9kZSwKKwkJCSAgICAgc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnNpbnB1dCA9IE5VTEwsICpzb3V0cHV0ID0gTlVMTDsKKwlpbnQgZXJyOworCisJcmZpbGUtPmlucHV0ID0gcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKKwkJZXJyID0gYXNzaWduX3N1YnN0cmVhbShybWlkaSwgc3ViZGV2aWNlLAorCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCQkgICAgICAgbW9kZSwgJnNpbnB1dCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfX2Vycm9yOworCX0KKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKKwkJZXJyID0gYXNzaWduX3N1YnN0cmVhbShybWlkaSwgc3ViZGV2aWNlLAorCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsCisJCQkJICAgICAgIG1vZGUsICZzb3V0cHV0KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCisJaWYgKHNpbnB1dCkgeworCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCBtb2RlKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCWlmIChzb3V0cHV0KSB7CisJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzb3V0cHV0LCBtb2RlKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmIChzaW5wdXQpCisJCQkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIDApOworCQkJZ290byBfX2Vycm9yOworCQl9CisJfQorCisJcmZpbGUtPnJtaWRpID0gcm1pZGk7CisJcmZpbGUtPmlucHV0ID0gc2lucHV0OworCXJmaWxlLT5vdXRwdXQgPSBzb3V0cHV0OworCXJldHVybiAwOworCisgICAgICBfX2Vycm9yOgorCWlmIChzaW5wdXQgJiYgc2lucHV0LT5ydW50aW1lKQorCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc2lucHV0KTsKKwlpZiAoc291dHB1dCAmJiBzb3V0cHV0LT5ydW50aW1lKQorCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7CisJcmV0dXJuIGVycjsKK30KKworLyogY2FsbGVkIGZyb20gc291bmQvY29yZS9zZXEvc2VxX21pZGkuYyAqLwogaW50IHNuZF9yYXdtaWRpX2tlcm5lbF9vcGVuKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwgaW50IHN1YmRldmljZSwKIAkJCSAgICBpbnQgbW9kZSwgc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKiByZmlsZSkKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QxLCAqbGlzdDI7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc2lucHV0ID0gTlVMTCwgKnNvdXRwdXQgPSBOVUxMOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9ydW50aW1lICppbnB1dCA9IE5VTEwsICpvdXRwdXQgPSBOVUxMOwogCWludCBlcnI7CiAKLQlpZiAocmZpbGUpCi0JCXJmaWxlLT5pbnB1dCA9IHJmaWxlLT5vdXRwdXQgPSBOVUxMOworCWlmIChzbmRfQlVHX09OKCFyZmlsZSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJtaWRpID0gc25kX3Jhd21pZGlfc2VhcmNoKGNhcmQsIGRldmljZSk7Ci0JbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJaWYgKHJtaWRpID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBfX2Vycm9yMTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJtaWRpLT5jYXJkLT5tb2R1bGUpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gX19lcnJvcjE7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOworCQlyZXR1cm4gLUVOWElPOwogCX0KLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKLQkJaWYgKCEocm1pZGktPmluZm9fZmxhZ3MgJiBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQpKSB7Ci0JCQllcnIgPSAtRU5YSU87Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHN1YmRldmljZSA+PSAwICYmICh1bnNpZ25lZCBpbnQpc3ViZGV2aWNlID49IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fb3BlbmVkID49Ci0JCSAgICBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRUFHQUlOOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQpKSB7Ci0JCQllcnIgPSAtRU5YSU87Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHN1YmRldmljZSA+PSAwICYmICh1bnNpZ25lZCBpbnQpc3ViZGV2aWNlID49IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQgPj0KLQkJICAgIHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRUFHQUlOOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JfQotCWxpc3QxID0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbXMubmV4dDsKLQl3aGlsZSAoMSkgewotCQlpZiAobGlzdDEgPT0gJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1zKSB7Ci0JCQlzaW5wdXQgPSBOVUxMOwotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKLQkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gX19lcnJvcjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCXNpbnB1dCA9IGxpc3RfZW50cnkobGlzdDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0sIGxpc3QpOwotCQlpZiAoKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpICYmIHNpbnB1dC0+b3BlbmVkKQotCQkJZ290byBfX25leHRpOwotCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCAoc3ViZGV2aWNlID49IDAgJiYgc3ViZGV2aWNlID09IHNpbnB1dC0+bnVtYmVyKSkKLQkJCWJyZWFrOwotCSAgICAgIF9fbmV4dGk6Ci0JCWxpc3QxID0gbGlzdDEtPm5leHQ7Ci0JfQotCWxpc3QyID0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zLm5leHQ7Ci0Jd2hpbGUgKDEpIHsKLQkJaWYgKGxpc3QyID09ICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMpIHsKLQkJCXNvdXRwdXQgPSBOVUxMOwotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIF9fZXJyb3I7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlzb3V0cHV0ID0gbGlzdF9lbnRyeShsaXN0Miwgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7Ci0JCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSB7Ci0JCQkJaWYgKHNvdXRwdXQtPm9wZW5lZCAmJiAhc291dHB1dC0+YXBwZW5kKQotCQkJCQlnb3RvIF9fbmV4dG87Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzb3V0cHV0LT5vcGVuZWQpCi0JCQkJCWdvdG8gX19uZXh0bzsKLQkJCX0KLQkJfQotCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCAoc3ViZGV2aWNlID49IDAgJiYgc3ViZGV2aWNlID09IHNvdXRwdXQtPm51bWJlcikpCi0JCQlicmVhazsKLQkgICAgICBfX25leHRvOgotCQlsaXN0MiA9IGxpc3QyLT5uZXh0OwotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHNpbnB1dCkpIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKLQkJaW5wdXQgPSBzaW5wdXQtPnJ1bnRpbWU7Ci0JCWlmICgoZXJyID0gc2lucHV0LT5vcHMtPm9wZW4oc2lucHV0KSkgPCAwKQotCQkJZ290byBfX2Vycm9yOwotCQlzaW5wdXQtPm9wZW5lZCA9IDE7Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fb3BlbmVkKys7Ci0JfSBlbHNlIHsKLQkJc2lucHV0ID0gTlVMTDsKLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCWlmIChzb3V0cHV0LT5vcGVuZWQpCi0JCQlnb3RvIF9fc2tpcF9vdXRwdXQ7Ci0JCWlmICgoZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc291dHB1dCkpIDwgMCkgewotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpCi0JCQkJc2lucHV0LT5vcHMtPmNsb3NlKHNpbnB1dCk7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJb3V0cHV0ID0gc291dHB1dC0+cnVudGltZTsKLQkJaWYgKChlcnIgPSBzb3V0cHV0LT5vcHMtPm9wZW4oc291dHB1dCkpIDwgMCkgewotCQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpCi0JCQkJc2lucHV0LT5vcHMtPmNsb3NlKHNpbnB1dCk7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkgICAgICBfX3NraXBfb3V0cHV0OgotCQlzb3V0cHV0LT5vcGVuZWQgPSAxOwotCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCi0JCQlzb3V0cHV0LT5hcHBlbmQgPSAxOwotCSAgICAgIAlpZiAoc291dHB1dC0+dXNlX2NvdW50KysgPT0gMCkKLQkJCXNvdXRwdXQtPmFjdGl2ZV9zZW5zaW5nID0gMTsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fb3BlbmVkKys7Ci0JfSBlbHNlIHsKLQkJc291dHB1dCA9IE5VTEw7Ci0JfQotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotCWlmIChyZmlsZSkgewotCQlyZmlsZS0+cm1pZGkgPSBybWlkaTsKLQkJcmZpbGUtPmlucHV0ID0gc2lucHV0OwotCQlyZmlsZS0+b3V0cHV0ID0gc291dHB1dDsKLQl9Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAKLSAgICAgIF9fZXJyb3I6Ci0JaWYgKGlucHV0ICE9IE5VTEwpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOwotCWlmIChvdXRwdXQgIT0gTlVMTCkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNvdXRwdXQpOwotCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0gICAgICBfX2Vycm9yMToKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJZXJyID0gcmF3bWlkaV9vcGVuX3ByaXYocm1pZGksIHN1YmRldmljZSwgbW9kZSwgcmZpbGUpOworCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM4NSwxMCArMzcyLDEzIEBACiAJdW5zaWduZWQgc2hvcnQgZmZsYWdzOwogCWludCBlcnI7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmF3bWlkaV9maWxlOworCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyYXdtaWRpX2ZpbGUgPSBOVUxMOwogCXdhaXRfcXVldWVfdCB3YWl0OwogCXN0cnVjdCBzbmRfY3RsX2ZpbGUgKmtjdGw7CiAKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIAorCQlyZXR1cm4gLUVJTlZBTDsJCS8qIGludmFsaWQgY29tYmluYXRpb24gKi8KKwogCWlmIChtYWogPT0gc25kX21ham9yKSB7CiAJCXJtaWRpID0gc25kX2xvb2t1cF9taW5vcl9kYXRhKGltaW5vcihpbm9kZSksCiAJCQkJCSAgICAgIFNORFJWX0RFVklDRV9UWVBFX1JBV01JREkpOwpAQCAtNDAyLDI0ICszOTIsMjUgQEAKIAogCWlmIChybWlkaSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIAotCQlyZXR1cm4gLUVJTlZBTDsJCS8qIGludmFsaWQgY29tYmluYXRpb24gKi8KKworCWlmICghdHJ5X21vZHVsZV9nZXQocm1pZGktPmNhcmQtPm1vZHVsZSkpCisJCXJldHVybiAtRU5YSU87CisKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJY2FyZCA9IHJtaWRpLT5jYXJkOwogCWVyciA9IHNuZF9jYXJkX2ZpbGVfYWRkKGNhcmQsIGZpbGUpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBfX2Vycm9yX2NhcmQ7CiAJZmZsYWdzID0gc25kX3Jhd21pZGlfZmlsZV9mbGFncyhmaWxlKTsKIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgfHwgbWFqID09IFNPVU5EX01BSk9SKSAvKiBPU1MgZW11bD8gKi8KIAkJZmZsYWdzIHw9IFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQ7Ci0JZmZsYWdzIHw9IFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLOwogCXJhd21pZGlfZmlsZSA9IGttYWxsb2Moc2l6ZW9mKCpyYXdtaWRpX2ZpbGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocmF3bWlkaV9maWxlID09IE5VTEwpIHsKLQkJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIF9fZXJyb3I7CiAJfQogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZSgmcm1pZGktPm9wZW5fd2FpdCwgJndhaXQpOwotCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAl3aGlsZSAoMSkgewogCQlzdWJkZXZpY2UgPSAtMTsKIAkJcmVhZF9sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKQEAgLTQzMSw4ICs0MjIsNyBAQAogCQkJfQogCQl9CiAJCXJlYWRfdW5sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKLQkJZXJyID0gc25kX3Jhd21pZGlfa2VybmVsX29wZW4ocm1pZGktPmNhcmQsIHJtaWRpLT5kZXZpY2UsCi0JCQkJCSAgICAgIHN1YmRldmljZSwgZmZsYWdzLCByYXdtaWRpX2ZpbGUpOworCQllcnIgPSByYXdtaWRpX29wZW5fcHJpdihybWlkaSwgc3ViZGV2aWNlLCBmZmxhZ3MsIHJhd21pZGlfZmlsZSk7CiAJCWlmIChlcnIgPj0gMCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKQEAgLTQ1MSw2NyArNDQxLDg5IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcm1pZGktPm9wZW5fd2FpdCwgJndhaXQpOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKHJhd21pZGlfZmlsZSk7CisJCWdvdG8gX19lcnJvcjsKKwl9CiAjaWZkZWYgQ09ORklHX1NORF9PU1NFTVVMCiAJaWYgKHJhd21pZGlfZmlsZS0+aW5wdXQgJiYgcmF3bWlkaV9maWxlLT5pbnB1dC0+cnVudGltZSkKIAkJcmF3bWlkaV9maWxlLT5pbnB1dC0+cnVudGltZS0+b3NzID0gKG1haiA9PSBTT1VORF9NQUpPUik7CiAJaWYgKHJhd21pZGlfZmlsZS0+b3V0cHV0ICYmIHJhd21pZGlfZmlsZS0+b3V0cHV0LT5ydW50aW1lKQogCQlyYXdtaWRpX2ZpbGUtPm91dHB1dC0+cnVudGltZS0+b3NzID0gKG1haiA9PSBTT1VORF9NQUpPUik7CiAjZW5kaWYKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcm1pZGktPm9wZW5fd2FpdCwgJndhaXQpOwotCWlmIChlcnIgPj0gMCkgewotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSByYXdtaWRpX2ZpbGU7Ci0JfSBlbHNlIHsKLQkJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7Ci0JCWtmcmVlKHJhd21pZGlfZmlsZSk7Ci0JfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJhd21pZGlfZmlsZTsKIAltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwlyZXR1cm4gMDsKKworIF9fZXJyb3I6CisJc25kX2NhcmRfZmlsZV9yZW1vdmUoY2FyZCwgZmlsZSk7CisgX19lcnJvcl9jYXJkOgorCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICogcmZpbGUpCitzdGF0aWMgdm9pZCBjbG9zZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgaW50IGNsZWFudXApCiB7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3J1bnRpbWUgKnJ1bnRpbWU7CisJcm1pZGktPnN0cmVhbXNbc3Vic3RyZWFtLT5zdHJlYW1dLnN1YnN0cmVhbV9vcGVuZWQtLTsKKwlpZiAoLS1zdWJzdHJlYW0tPnVzZV9jb3VudCkKKwkJcmV0dXJuOwogCi0JaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQlybWlkaSA9IHJmaWxlLT5ybWlkaTsKLQltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKHJmaWxlLT5pbnB1dCAhPSBOVUxMKSB7Ci0JCXN1YnN0cmVhbSA9IHJmaWxlLT5pbnB1dDsKLQkJcmZpbGUtPmlucHV0ID0gTlVMTDsKLQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQkJc25kX3Jhd21pZGlfaW5wdXRfdHJpZ2dlcihzdWJzdHJlYW0sIDApOwotCQlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKLQkJaWYgKHJ1bnRpbWUtPnByaXZhdGVfZnJlZSAhPSBOVUxMKQotCQkJcnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOwotCQlzdWJzdHJlYW0tPm9wZW5lZCA9IDA7Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fb3BlbmVkLS07Ci0JfQotCWlmIChyZmlsZS0+b3V0cHV0ICE9IE5VTEwpIHsKLQkJc3Vic3RyZWFtID0gcmZpbGUtPm91dHB1dDsKLQkJcmZpbGUtPm91dHB1dCA9IE5VTEw7Ci0JCWlmICgtLXN1YnN0cmVhbS0+dXNlX2NvdW50ID09IDApIHsKLQkJCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaWYgKGNsZWFudXApIHsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUKQorCQkJc25kX3Jhd21pZGlfaW5wdXRfdHJpZ2dlcihzdWJzdHJlYW0sIDApOworCQllbHNlIHsKIAkJCWlmIChzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nKSB7CiAJCQkJdW5zaWduZWQgY2hhciBidWYgPSAweGZlOwotCQkJCS8qIHNlbmRpbmcgc2luZ2xlIGFjdGl2ZSBzZW5zaW5nIG1lc3NhZ2UgdG8gc2h1dCB0aGUgZGV2aWNlIHVwICovCisJCQkJLyogc2VuZGluZyBzaW5nbGUgYWN0aXZlIHNlbnNpbmcgbWVzc2FnZQorCQkJCSAqIHRvIHNodXQgdGhlIGRldmljZSB1cAorCQkJCSAqLwogCQkJCXNuZF9yYXdtaWRpX2tlcm5lbF93cml0ZShzdWJzdHJlYW0sICZidWYsIDEpOwogCQkJfQogCQkJaWYgKHNuZF9yYXdtaWRpX2RyYWluX291dHB1dChzdWJzdHJlYW0pID09IC1FUkVTVEFSVFNZUykKIAkJCQlzbmRfcmF3bWlkaV9vdXRwdXRfdHJpZ2dlcihzdWJzdHJlYW0sIDApOwotCQkJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7Ci0JCQlpZiAocnVudGltZS0+cHJpdmF0ZV9mcmVlICE9IE5VTEwpCi0JCQkJcnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKLQkJCXN1YnN0cmVhbS0+YXBwZW5kID0gMDsKIAkJfQotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQtLTsKIAl9CisJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9mcmVlKQorCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZnJlZShzdWJzdHJlYW0pOworCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOworCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKKwlzdWJzdHJlYW0tPmFwcGVuZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJhd21pZGlfcmVsZWFzZV9wcml2KHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCisJcm1pZGkgPSByZmlsZS0+cm1pZGk7CisJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCWlmIChyZmlsZS0+aW5wdXQpIHsKKwkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCByZmlsZS0+aW5wdXQsIDEpOworCQlyZmlsZS0+aW5wdXQgPSBOVUxMOworCX0KKwlpZiAocmZpbGUtPm91dHB1dCkgeworCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHJmaWxlLT5vdXRwdXQsIDEpOworCQlyZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwl9CisJcmZpbGUtPnJtaWRpID0gTlVMTDsKIAltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwl3YWtlX3VwKCZybWlkaS0+b3Blbl93YWl0KTsKK30KKworLyogY2FsbGVkIGZyb20gc291bmQvY29yZS9zZXEvc2VxX21pZGkuYyAqLworaW50IHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCisJaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwkKKwlybWlkaSA9IHJmaWxlLT5ybWlkaTsKKwlyYXdtaWRpX3JlbGVhc2VfcHJpdihyZmlsZSk7CiAJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMCwxNSArNTMyLDE0IEBACiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0JaW50IGVycjsKIAogCXJmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKHJmaWxlKTsKIAlybWlkaSA9IHJmaWxlLT5ybWlkaTsKLQl3YWtlX3VwKCZybWlkaS0+b3Blbl93YWl0KTsKKwlyYXdtaWRpX3JlbGVhc2VfcHJpdihyZmlsZSk7CiAJa2ZyZWUocmZpbGUpOwogCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKHJtaWRpLT5jYXJkLCBmaWxlKTsKLQlyZXR1cm4gZXJyOworCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3Jhd21pZGlfaW5mbyhzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaCBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oCmluZGV4IGJmOGQyYjQuLmMwMTU0YTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oCisrKyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oCkBAIC0xODEsNyArMTgxLDcgQEAKIC8qIGZvciBkZWJ1ZyAqLwogI2lmZGVmIFNORFJWX1NFUV9PU1NfREVCVUcKIGV4dGVybiBpbnQgc2VxX29zc19kZWJ1ZzsKLSNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCWRvIHsgaWYgKHNlcV9vc3NfZGVidWcgPiAwKSBzbmRfcHJpbnRrIHg7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX3ByaW50ayh4KQlkbyB7IGlmIChzZXFfb3NzX2RlYnVnID4gMCkgc25kX3ByaW50ZCB4OyB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCS8qKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYwppbmRleCAwMTAxYThiLi4yOTg5NmFiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYwpAQCAtMzIxLDcgKzMyMSw4IEBACiAJCQlmcmVlcHJldiA9IGNlbGw7CiAJCX0gZWxzZSB7CiAjaWYgMAotCQkJcHJpbnRrKCJ0eXBlID0gJWksIHNvdXJjZSA9ICVpLCBkZXN0ID0gJWksIGNsaWVudCA9ICVpXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInR5cGUgPSAlaSwgc291cmNlID0gJWksIGRlc3QgPSAlaSwgIgorCQkJICAgICAgICJjbGllbnQgPSAlaVxuIiwKIAkJCQljZWxsLT5ldmVudC50eXBlLAogCQkJCWNlbGwtPmV2ZW50LnNvdXJjZS5jbGllbnQsCiAJCQkJY2VsbC0+ZXZlbnQuZGVzdC5jbGllbnQsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggNzk2NTMyMC4uM2YwMDUwZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMTgyNSwxMyArMTgyNSw5IEBACiBzdGF0aWMgaW50IHNuZF90aW1lcl91c2VyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzbmRfdGltZXJfdXNlciAqdHU7Ci0JaW50IGVycjsKIAogCXR1ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdHUtPmZhc3luYyk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnR1LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzbmRfdGltZXJfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS92bWFzdGVyLmMgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwppbmRleCA0Y2M1N2Y5Li4yNTc2MjRiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYworKysgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwpAQCAtNTAsMTggKzUwLDM4IEBACiAJc3RydWN0IGxpbmtfbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IGxpbmtfY3RsX2luZm8gaW5mbzsKIAlpbnQgdmFsc1syXTsJCS8qIGN1cnJlbnQgdmFsdWVzICovCisJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgc2xhdmU7IC8qIHRoZSBjb3B5IG9mIG9yaWdpbmFsIGNvbnRyb2wgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBpbnQgc2xhdmVfdXBkYXRlKHN0cnVjdCBsaW5rX3NsYXZlICpzbGF2ZSkKK3sKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOworCWludCBlcnIsIGNoOworCisJdWN0bCA9IGttYWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1Y3RsKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1Y3RsLT5pZCA9IHNsYXZlLT5zbGF2ZS5pZDsKKwllcnIgPSBzbGF2ZS0+c2xhdmUuZ2V0KCZzbGF2ZS0+c2xhdmUsIHVjdGwpOworCWZvciAoY2ggPSAwOyBjaCA8IHNsYXZlLT5pbmZvLmNvdW50OyBjaCsrKQorCQlzbGF2ZS0+dmFsc1tjaF0gPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKKwlrZnJlZSh1Y3RsKTsKKwlyZXR1cm4gMDsKK30KKwogLyogZ2V0IHRoZSBzbGF2ZSBjdGwgaW5mbyBhbmQgc2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZXMgKi8KIHN0YXRpYyBpbnQgc2xhdmVfaW5pdChzdHJ1Y3QgbGlua19zbGF2ZSAqc2xhdmUpCiB7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbzsKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOwotCWludCBlcnIsIGNoOworCWludCBlcnI7CiAKLQlpZiAoc2xhdmUtPmluZm8uY291bnQpCi0JCXJldHVybiAwOyAvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJaWYgKHNsYXZlLT5pbmZvLmNvdW50KSB7CisJCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwkJaWYgKHNsYXZlLT5mbGFncyAmIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUpCisJCQlyZXR1cm4gc2xhdmVfdXBkYXRlKHNsYXZlKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJdWluZm8gPSBrbWFsbG9jKHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVpbmZvKQpAQCAtODUsMTUgKzEwNSw3IEBACiAJc2xhdmUtPmluZm8ubWF4X3ZhbCA9IHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heDsKIAlrZnJlZSh1aW5mbyk7CiAKLQl1Y3RsID0ga21hbGxvYyhzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVjdGwpCi0JCXJldHVybiAtRU5PTUVNOwotCXVjdGwtPmlkID0gc2xhdmUtPnNsYXZlLmlkOwotCWVyciA9IHNsYXZlLT5zbGF2ZS5nZXQoJnNsYXZlLT5zbGF2ZSwgdWN0bCk7Ci0JZm9yIChjaCA9IDA7IGNoIDwgc2xhdmUtPmluZm8uY291bnQ7IGNoKyspCi0JCXNsYXZlLT52YWxzW2NoXSA9IHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbY2hdOwotCWtmcmVlKHVjdGwpOwotCXJldHVybiAwOworCXJldHVybiBzbGF2ZV91cGRhdGUoc2xhdmUpOwogfQogCiAvKiBpbml0aWFsaXplIG1hc3RlciB2b2x1bWUgKi8KQEAgLTIyOSw3ICsyNDEsOCBAQAogICogLSBsb2dhcml0aG1pYyB2b2x1bWUgY29udHJvbCAoZEIgbGV2ZWwpLCBubyBsaW5lYXIgdm9sdW1lCiAgKiAtIG1hc3RlciBjYW4gb25seSBhdHRlbnVhdGUgdGhlIHZvbHVtZSwgbm8gZ2FpbgogICovCi1pbnQgc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK2ludCBfc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbGlua19tYXN0ZXIgKm1hc3Rlcl9saW5rID0gc25kX2tjb250cm9sX2NoaXAobWFzdGVyKTsKIAlzdHJ1Y3QgbGlua19zbGF2ZSAqc3JlYzsKQEAgLTI0MSw2ICsyNTQsNyBAQAogCXNyZWMtPnNsYXZlID0gKnNsYXZlOwogCW1lbWNweShzcmVjLT5zbGF2ZS52ZCwgc2xhdmUtPnZkLCBzbGF2ZS0+Y291bnQgKiBzaXplb2YoKnNsYXZlLT52ZCkpOwogCXNyZWMtPm1hc3RlciA9IG1hc3Rlcl9saW5rOworCXNyZWMtPmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBvdmVycmlkZSBjYWxsYmFja3MgKi8KIAlzbGF2ZS0+aW5mbyA9IHNsYXZlX2luZm87CkBAIC0yNTQsOCArMjY4LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZzcmVjLT5saXN0LCAmbWFzdGVyX2xpbmstPnNsYXZlcyk7CiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2N0bF9hZGRfc2xhdmUpOworRVhQT1JUX1NZTUJPTChfc25kX2N0bF9hZGRfc2xhdmUpOwogCiAvKgogICogY3RsIGNhbGxiYWNrcyBmb3IgbWFzdGVyIGNvbnRyb2xzCkBAIC0zMjcsOCArMzQwLDIwIEBACiB9CiAKIAotLyoKLSAqIENyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorLyoqCisgKiBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sCisgKiBAbmFtZTogbmFtZSBzdHJpbmcgb2YgdGhlIGNvbnRyb2wgZWxlbWVudCB0byBjcmVhdGUKKyAqIEB0bHY6IG9wdGlvbmFsIFRMViBpbnQgYXJyYXkgZm9yIGRCIGluZm9ybWF0aW9uCisgKgorICogQ3JlYXRlcyBhIHZpcnR1YWwgbWF0c3RlciBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUgc3RyaW5nLgorICogUmV0dXJucyB0aGUgY3JlYXRlZCBjb250cm9sIGVsZW1lbnQsIG9yIE5VTEwgZm9yIGVycm9ycyAoRU5PTUVNKS4KKyAqCisgKiBBZnRlciBjcmVhdGluZyBhIHZtYXN0ZXIgZWxlbWVudCwgeW91IGNhbiBhZGQgdGhlIHNsYXZlIGNvbnRyb2xzCisgKiB2aWEgc25kX2N0bF9hZGRfc2xhdmUoKSBvciBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCgpLgorICoKKyAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBAdGx2IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIFRMViBpbmZvcm1hdGlvbgorICogZm9yIGRCIHNjYWxlIG9mIHRoZSBtYXN0ZXIgY29udHJvbC4gIEl0IHNob3VsZCBiZSBhIHNpbmdsZSBlbGVtZW50CisgKiB3aXRoICNTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSB0eXBlLCBhbmQgc2hvdWxkIGJlIHRoZSBtYXggMGRCLgogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdikKQEAgLTM2Nyw1ICszOTIsNCBAQAogCiAJcmV0dXJuIGtjdGw7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvS2NvbmZpZyBiL3NvdW5kL2RyaXZlcnMvS2NvbmZpZwppbmRleCAwYmNmMTQ2Li44NDcxNGE2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL0tjb25maWcKKysrIGIvc291bmQvZHJpdmVycy9LY29uZmlnCkBAIC0zMyw3ICszMyw3IEBACiAKIGNvbmZpZyBTTkRfUENTUAogCXRyaXN0YXRlICJQQy1TcGVha2VyIHN1cHBvcnQgKFJFQUQgSEVMUCEpIgotCWRlcGVuZHMgb24gUENTUEtSX1BMQVRGT1JNICYmIFg4Nl9QQyAmJiBISUdIX1JFU19USU1FUlMKKwlkZXBlbmRzIG9uIFBDU1BLUl9QTEFURk9STSAmJiBYODYgJiYgSElHSF9SRVNfVElNRVJTCiAJZGVwZW5kcyBvbiBJTlBVVAogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNORF9QQ00KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA3M2JlN2UxLi41NDIzOWQyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC01ODgsMTAgKzU4OCwxMCBAQAogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlkdW1teSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlkdW1teS0+Y2FyZCA9IGNhcmQ7CiAJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfUENNX0RFVklDRVMgJiYgaWR4IDwgcGNtX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMgYi9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCmluZGV4IDc3ODM4NDMuLjE5NTBmZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKKysrIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwpAQCAtMTI3OSw5ICsxMjc5LDkgQEAKIAlpZiAoIWVuYWJsZVtkZXZdKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9tbDQwM19hYzk3Y3JfY3JlYXRlKGNhcmQsIHBmZGV2LCAmbWw0MDNfYWM5N2NyKTsKIAlpZiAoZXJyIDwgMCkgewogCQlQREVCVUcoSU5JVF9GQUlMVVJFLCAicHJvYmUoKTogY3JlYXRlIGZhaWxlZCFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCA1Yjk5NmYzLi4xNDlkMDVhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtNzMsOSArNzMsOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ0aGUgdWFydF9lbnRlciBvcHRpb24gaXMgb2Jzb2xldGU7IHJlbW92ZSBpdFxuIik7CiAKIAkqcmNhcmQgPSBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJNUFUtNDAxIFVBUlQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBjYXJkLT5kcml2ZXIpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4LCAiLCBjYXJkLT5zaG9ydG5hbWUsIHBvcnRbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggNDhiNjRlNi4uMmY4ZjI5NSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtMzAzLDggKzMwMywxMCBAQAogCiAJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIDB4ZjUpOwogCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCBwb3J0cC0+aHdwb3J0KTsKLQkJLy9zbmRfcHJpbnRrKCJuZXcgb3V0cG9ydDogMHgleFxuIiwgKHVuc2lnbmVkIGludCkgcG9ydHAtPmh3cG9ydCk7Ci0KKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJuZXcgb3V0cG9ydDogMHgleFxuIiwKKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBvcnRwLT5od3BvcnQpOworCQkqLwogCQlpZiAoIShvdXRieXRlICYgMHg4MCkgJiYgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKQogCQkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKTsKIAl9CkBAIC01NDAsNyArNTQyLDcgQEAKIAogCXU4IHNieXQgPSBzbmRfbXRwYXZfZ2V0cmVnKG1jcmQsIFNSRUcpOwogCi0JLy9wcmludGsoInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7ICovCiAKIAlpZiAoIShzYnl0ICYgU0lHU19CWVRFKSkKIAkJcmV0dXJuOwpAQCAtNTg1LDEyICs1ODcsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tdHBhdl9nZXRfSVNBKHN0cnVjdCBtdHBhdiAqIG1jYXJkKQogewogCWlmICgobWNhcmQtPnJlc19wb3J0ID0gcmVxdWVzdF9yZWdpb24ocG9ydCwgMywgIk1vdHVNVFBBViBNSURJIikpID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbWNhcmQtPnBvcnQgPSBwb3J0OwogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9tdHBhdl9pcnFoLCBJUlFGX0RJU0FCTEVELCAiTU9UVSBNVFBBViIsIG1jYXJkKSkgewotCQlzbmRfcHJpbnRrKCJNVFZBUCBJUlEgJWQgYnVzeVxuIiwgaXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgSVJRICVkIGJ1c3lcbiIsIGlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW1jYXJkLT5pcnEgPSBpcnE7CkBAIC02OTYsOSArNjk4LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBtdHBhdiAqbXRwX2NhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqbXRwX2NhcmQpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCptdHBfY2FyZCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCW10cF9jYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZtdHBfY2FyZC0+c3BpbmxvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHM2NC5jIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCmluZGV4IDg3YmExZGQuLjkyODQ4MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYworKysgYi9zb3VuZC9kcml2ZXJzL210czY0LmMKQEAgLTk1NywxMCArOTU3LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfbXRzNjRfcHJvYmVfcG9ydChwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGQoIkNhbm5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkVTSSAiIENBUkRfTkFNRSk7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogCQlnb3RvIF9fZXJyOwogCX0KIAotCXNuZF9wcmludGsoIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0lORk8gIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CiAJcmV0dXJuIDA7CiAKIF9fZXJyOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwppbmRleCA3ODA1ODIzLi42ZTMxZTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJb3BsMyA9IGh3LT5wcml2YXRlX2RhdGE7CiAJc3RhdHVzID0gaW5iKG9wbDMtPmxfcG9ydCk7CiAjaWYgMAotCXNuZF9wcmludGsoIkFkTGliIElSUSBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQWRMaWIgSVJRIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAjZW5kaWYKIAlpZiAoIShzdGF0dXMgJiAweDgwKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCmluZGV4IDE2ZmVhZmEuLjZlN2QwOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCWludCBpOwogCWNoYXIgKnN0ciA9ICJ4LjI0IjsKIAotCXByaW50aygidGltZSAlLjVpOiAlcyBbJS4yaV06ICIsIG9wbDMtPnVzZV90aW1lLCBzLCB2b2ljZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRpbWUgJS41aTogJXMgWyUuMmldOiAiLCBvcGwzLT51c2VfdGltZSwgcywgdm9pY2UpOwogCWZvciAoaSA9IDA7IGkgPCBvcGwzLT5tYXhfdm9pY2VzOyBpKyspCiAJCXByaW50aygiJWMiLCAqKHN0ciArIG9wbDMtPnZvaWNlc1tpXS5zdGF0ZSArIDEpKTsKIAlwcmludGsoIlxuIik7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRU5EOyBpKyspIHsKIAkJaWYgKGJlc3RbaV0udm9pY2UgPj0gMCkgewogI2lmZGVmIERFQlVHX0FMTE9DCi0JCQlwcmludGsoIiVzICVpb3AgYWxsb2NhdGlvbiBvbiB2b2ljZSAlaVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlaW9wIGFsbG9jYXRpb24gb24gdm9pY2UgJWlcbiIsCiAJCQkgICAgICAgYWxsb2NfdHlwZVtpXSwgaW5zdHJfNG9wID8gNCA6IDIsCiAJCQkgICAgICAgYmVzdFtpXS52b2ljZSk7CiAjZW5kaWYKQEAgLTMxNyw3ICszMTcsNyBAQAogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIk5vdGUgb24sIGNoICVpLCBpbnN0ICVpLCBub3RlICVpLCB2ZWwgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9uLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaSwgdmVsICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSwgdmVsKTsKICNlbmRpZgogCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkJcmV0dXJuOwogCX0KICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gT1BMJWkgaW5zdHJ1bWVudDogJXNcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBPUEwlaSBpbnN0cnVtZW50OiAlc1xuIiwKIAkJICAgaW5zdHJfNG9wID8gMyA6IDIsIHBhdGNoLT5uYW1lKTsKICNlbmRpZgogCS8qIGluIFNZTlRIIG1vZGUsIGFwcGxpY2F0aW9uIHRha2VzIGNhcmUgb2Ygdm9pY2VzICovCkBAIC00MzEsNyArNDMxLDcgQEAKIAl9CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gc2V0dGluZyBPUEwzIGNvbm5lY3Rpb246IDB4JXhcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBzZXR0aW5nIE9QTDMgY29ubmVjdGlvbjogMHgleFxuIiwKIAkJICAgb3BsMy0+Y29ubmVjdGlvbl9yZWcpOwogI2VuZGlmCiAJLyoKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCS8qIFByb2dyYW0gdGhlIEZNIHZvaWNlIGNoYXJhY3RlcmlzdGljcyAqLwogCWZvciAoaSA9IDA7IGkgPCAoaW5zdHJfNG9wID8gNCA6IDIpOyBpKyspIHsKICNpZmRlZiBERUJVR19NSURJCi0JCXNuZF9wcmludGsoIiAgLS0+IHByb2dyYW1taW5nIG9wZXJhdG9yICVpXG4iLCBpKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBwcm9ncmFtbWluZyBvcGVyYXRvciAlaVxuIiwgaSk7CiAjZW5kaWYKIAkJb3Bfb2Zmc2V0ID0gc25kX29wbDNfcmVnbWFwW3ZvaWNlX29mZnNldF1baV07CiAKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWJsb2NrbnVtIHw9IE9QTDNfS0VZT05fQklUOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKICNlbmRpZgogCS8qIFNldCBPUEwzIEtFWU9OX0JMT0NLIHJlZ2lzdGVyIG9mIHJlcXVlc3RlZCB2b2ljZSAqLyAKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJcHJnID0gZXh0cmFfcHJnIC0gMTsKIAkJfQogI2lmZGVmIERFQlVHX01JREkKLQkJc25kX3ByaW50aygiICoqKiBhbGxvY2F0aW5nIGV4dHJhIHByb2dyYW1cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAqKiogYWxsb2NhdGluZyBleHRyYSBwcm9ncmFtXG4iKTsKICNlbmRpZgogCQlnb3RvIF9fZXh0cmFfcHJnOwogCX0KQEAgLTYzMyw3ICs2MzMsNyBAQAogCiAJLyoga2lsbCB2b2ljZSAqLwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CiAjZW5kaWYKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKIAkvKiBjbGVhciBLZXkgT04gYml0ICovCkBAIC02NzAsNyArNjcwLDcgQEAKIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtLCBub3RlKTsKICNlbmRpZgogCkBAIC03MDksNyArNzA5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJLZXkgcHJlc3N1cmUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIktleSBwcmVzc3VyZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTcyMyw3ICs3MjMsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIlRlcm1pbmF0ZSBub3RlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJUZXJtaW5hdGUgbm90ZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIkNvbnRyb2xsZXIsIFRZUEUgPSAlaSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQ29udHJvbGxlciwgVFlQRSA9ICVpLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIHR5cGUsIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogCkBAIC04NDksNyArODQ5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogfQpAQCAtODY0LDYgKzg2NCw2IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiU1lTRVhcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiU1lTRVhcbiIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCmluZGV4IDlhMjI3MWQuLmE1NGIxZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCkBAIC0yMjAsMTQgKzIyMCwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3VudCA8IChpbnQpc2l6ZW9mKHNiaSkpIHsKLQkJc25kX3ByaW50aygiRk0gRXJyb3I6IFBhdGNoIHJlY29yZCB0b28gc2hvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogUGF0Y2ggcmVjb3JkIHRvbyBzaG9ydFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnNiaSwgYnVmLCBzaXplb2Yoc2JpKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHNiaS5jaGFubmVsIDwgMCB8fCBzYmkuY2hhbm5lbCA+PSBTQkZNX01BWElOU1RSKSB7Ci0JCXNuZF9wcmludGsoIkZNIEVycm9yOiBJbnZhbGlkIGluc3RydW1lbnQgbnVtYmVyICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogSW52YWxpZCBpbnN0cnVtZW50IG51bWJlciAlZFxuIiwKIAkJCSAgIHNiaS5jaGFubmVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjU0LDcgKzI1NCw5IEBACiAJb3BsMyA9IGFyZy0+cHJpdmF0ZV9kYXRhOwogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgU05EQ1RMX0ZNX0xPQURfSU5TVFI6Ci0JCQlzbmRfcHJpbnRrKCJPUEwzOiBPYnNvbGV0ZSBpb2N0bChTTkRDVExfRk1fTE9BRF9JTlNUUikgdXNlZC4gRml4IHRoZSBwcm9ncmFtLlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJPUEwzOiAiCisJCQkJICAgIk9ic29sZXRlIGlvY3RsKFNORENUTF9GTV9MT0FEX0lOU1RSKSB1c2VkLiAiCisJCQkJICAgIkZpeCB0aGUgcHJvZ3JhbS5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY2FzZSBTTkRDVExfU1lOVEhfTUVNQVZMOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKaW5kZXggOTYyYmI5Yy4uNmQ1N2I2NDQxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoInVua25vd24gSU9DVEw6IDB4JXhcbiIsIGNtZCk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ1bmtub3duIElPQ1RMOiAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJfQogCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKaW5kZXggYTQwNDllYi4uYjYwY2VmMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJZWxzZQogCQltaW5fZGl2ID0gTUFYX0RJVjsKICNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKCJQQ1NQOiBscGo9JWxpLCBtaW5fZGl2PSVpLCByZXM9JWxpXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJQQ1NQOiBscGo9JWxpLCBtaW5fZGl2PSVpLCByZXM9JWxpXG4iLAogCSAgICAgICBsb29wc19wZXJfamlmZnksIG1pbl9kaXYsIHRwLnR2X25zZWMpOwogI2VuZGlmCiAKQEAgLTk4LDkgKzk4LDkgQEAKIAlocnRpbWVyX2luaXQoJnBjc3BfY2hpcC50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKIAlwY3NwX2NoaXAudGltZXIuZnVuY3Rpb24gPSBwY3NwX2RvX3RpbWVyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfcGNzcF9jcmVhdGUoY2FyZCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jIGIvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKaW5kZXggYjFjMDQ3ZS4uNjAxNThlMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKKysrIGIvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMKQEAgLTc0NiwxMCArNzQ2LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfcG9ydG1hbl9wcm9iZV9wb3J0KHApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ZCgiQ2Fubm90IGNyZWF0ZSBjYXJkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBDQVJEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwppbmRleCBkOGFhYjlkLi5iMmI2ZDUwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYworKysgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwpAQCAtMjQxLDcgKzI0MSw4IEBACiAJCQlzbmRfcmF3bWlkaV9yZWNlaXZlKHVhcnQtPm1pZGlfaW5wdXRbc3Vic3RyZWFtXSwgJmMsIDEpOwogCiAJCWlmIChzdGF0dXMgJiBVQVJUX0xTUl9PRSkKLQkJCXNuZF9wcmludGsoIiVzOiBPdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIiVzOiBPdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKIAkJCSAgICAgICB1YXJ0LT5ybWlkaS0+bmFtZSwgdWFydC0+YmFzZSk7CiAJfQogCkBAIC02MzYsNyArNjM3LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghc25kX3VhcnQxNjU1MF93cml0ZV9idWZmZXIodWFydCwgbWlkaV9ieXRlKSkgewotCQkJc25kX3ByaW50aygiJXM6IEJ1ZmZlciBvdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIiVzOiBCdWZmZXIgb3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCiAJCQkJICAgdWFydC0+cm1pZGktPm5hbWUsIHVhcnQtPmJhc2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTgxNSw3ICs4MTcsOCBAQAogCWlmIChpcnEgPj0gMCAmJiBpcnEgIT0gU05EUlZfQVVUT19JUlEpIHsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX3VhcnQxNjU1MF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCwgIlNlcmlhbCBNSURJIiwgdWFydCkpIHsKLQkJCXNuZF9wcmludGsoImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKIAkJfSBlbHNlIHsKIAkJCXVhcnQtPmlycSA9IGlycTsKIAkJfQpAQCAtOTE5LDI2ICs5MjIsMjkgQEAKIAljYXNlIFNORFJWX1NFUklBTF9HRU5FUklDOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJBZGFwdG9yIHR5cGUgaXMgb3V0IG9mIHJhbmdlIDAtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkFkYXB0b3IgdHlwZSBpcyBvdXQgb2YgcmFuZ2UgMC0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9BREFQVE9SLCBhZGFwdG9yW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAob3V0c1tkZXZdIDwgMSB8fCBvdXRzW2Rldl0gPiBTTkRSVl9TRVJJQUxfTUFYX09VVFMpIHsKLQkJc25kX3ByaW50aygiQ291bnQgb2Ygb3V0cHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ291bnQgb2Ygb3V0cHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9PVVRTLCBvdXRzW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoaW5zW2Rldl0gPCAxIHx8IGluc1tkZXZdID4gU05EUlZfU0VSSUFMX01BWF9JTlMpIHsKLQkJc25kX3ByaW50aygiQ291bnQgb2YgaW5wdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDb3VudCBvZiBpbnB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfSU5TLCBpbnNbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNhcmQgID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU2VyaWFsIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlNlcmlhbCBNSURJIChVQVJUMTY1NTBBKSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCBmNzllMzYxLi4wZTYzMWMzIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtOTAsMTUgKzkwLDE3IEBACiAJaW50IGlkeCwgZXJyOwogCWludCBkZXYgPSBkZXZwdHItPmlkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJdm1pZGkgPSAoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAJdm1pZGktPmNhcmQgPSBjYXJkOwogCiAJaWYgKG1pZGlfZGV2c1tkZXZdID4gTUFYX01JRElfREVWSUNFUykgewotCQlzbmRfcHJpbnRrKCJ0b28gbXVjaCBtaWRpIGRldmljZXMgZm9yIHZpcm1pZGkgJWQ6IGZvcmNlIHRvIHVzZSAlZFxuIiwgZGV2LCBNQVhfTUlESV9ERVZJQ0VTKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJ0b28gbXVjaCBtaWRpIGRldmljZXMgZm9yIHZpcm1pZGkgJWQ6ICIKKwkJCSAgICJmb3JjZSB0byB1c2UgJWRcbiIsIGRldiwgTUFYX01JRElfREVWSUNFUyk7CiAJCW1pZGlfZGV2c1tkZXZdID0gTUFYX01JRElfREVWSUNFUzsKIAl9CiAJZm9yIChpZHggPSAwOyBpZHggPCBtaWRpX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKaW5kZXggMTRlMzM1NC4uMTljNmUzNyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKQEAgLTY4OCw3ICs2ODgsOCBAQAogCQlpbWFnZSA9IGRzcC0+ZGF0YSArIGk7CiAJCS8qIFdhaXQgRFNQIHJlYWR5IGZvciBhIG5ldyByZWFkICovCiAJCWlmICgoZXJyID0gdnhfd2FpdF9pc3JfYml0KGNoaXAsIElTUl9UWF9FTVBUWSkpIDwgMCkgewotCQkJcHJpbnRrKCJkc3AgbG9hZGluZyBlcnJvciBhdCBwb3NpdGlvbiAlZFxuIiwgaSk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiZHNwIGxvYWRpbmcgZXJyb3IgYXQgcG9zaXRpb24gJWRcbiIsIGkpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQljcHRyID0gaW1hZ2U7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKaW5kZXggOGQ2MzYyZS4uNDZkZjg4MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwpAQCAtMTE5LDE2ICsxMTksNiBAQAogCiAjZWxzZSAvKiBvbGQgc3R5bGUgZmlybXdhcmUgbG9hZGluZyAqLwogCi1zdGF0aWMgaW50IHZ4X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZ4X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4X2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkgICAgICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtMjQzLDggKzIzMyw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9WWDsKIAlody0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLQlody0+b3BzLm9wZW4gPSB2eF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHZ4X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gdnhfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gdnhfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jIGIvc291bmQvZHJpdmVycy92eC92eF91ZXIuYwppbmRleCAwZTFiYTliLi5iMDU2MGZlYyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF91ZXIuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiBVRVIsIG9yIDAgaWYgbm90IHN5bmMsCiAgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgdnhfcmVhZF91ZXJfc3RhdHVzKHN0cnVjdCB2eF9jb3JlICpjaGlwLCBpbnQgKm1vZGUpCitzdGF0aWMgaW50IHZ4X3JlYWRfdWVyX3N0YXR1cyhzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgdW5zaWduZWQgaW50ICptb2RlKQogewogCWludCB2YWwsIGZyZXE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9NYWtlZmlsZSBiL3NvdW5kL2kyYy9NYWtlZmlsZQppbmRleCAzNzk3MDY2Ni4uMzY4NzliZiAxMDA2NDQKLS0tIGEvc291bmQvaTJjL01ha2VmaWxlCisrKyBiL3NvdW5kL2kyYy9NYWtlZmlsZQpAQCAtNyw4ICs3LDYgQEAKIHNuZC1jczg0Mjctb2JqcyA6PSBjczg0Mjcubwogc25kLXRlYTYzMzB0LW9ianMgOj0gdGVhNjMzMHQubwogCi1vYmotJChDT05GSUdfTDMpICs9IGwzLwotCiBvYmotJChDT05GSUdfU05EKSArPSBvdGhlci8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL2wzL01ha2VmaWxlIGIvc291bmQvaTJjL2wzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ1NWI4Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2kyYy9sMy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgQUxTQQotIwotCi1zbmQtdWRhMTM0MS1vYmpzIDo9IHVkYTEzNDEubwotCi0jIE1vZHVsZSBEZXBlbmRlbmN5Ci1vYmotJChDT05GSUdfU05EX1NBMTFYWF9VREExMzQxKSArPSBzbmQtdWRhMTM0MS5vCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jIGIvc291bmQvaTJjL2wzL3VkYTEzNDEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0MGViNC4uMDAwMDAwMAotLS0gYS9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8qCi0gKiBQaGlsaXBzIFVEQTEzNDEgbWl4ZXIgZGV2aWNlIGRyaXZlcgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMjAwMCBMZXJub3V0ICYgSGF1c3BpZSBTcGVlY2ggUHJvZHVjdHMsIE4uVi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgICBUb21hcyBLYXNwYXJlayAgaW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gdWRhMTM0MS5jIGZyb20gT1NTCi0gKiAyMDAyLTAzLTI4ICAgVG9tYXMgS2FzcGFyZWsgIGJhc2ljIG1peGVyIGlzIHdvcmtpbmcgKHZvbHVtZSwgYmFzcywgdHJlYmxlKQotICogMjAwMi0wMy0zMCAgIFRvbWFzIEthc3BhcmVrICBwcm9jIGZpbGVzeXN0ZW0gc3VwcG9ydCwgY29tcGxldGUgbWl4ZXIgYW5kIERTUAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBzdXBwb3J0Ci0gKiAyMDAyLTA0LTEyCVRvbWFzIEthc3BhcmVrCXByb2MgaW50ZXJmYWNlIHVwZGF0ZSwgY29kZSBjbGVhbnVwCi0gKiAyMDAyLTA1LTEyICAgVG9tYXMgS2FzcGFyZWsgIGFub3RoZXIgY29kZSBjbGVhbnVwCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5mby5oPgotCi0jaW5jbHVkZSA8bGludXgvbDMvbDMuaD4KLQotI2luY2x1ZGUgPHNvdW5kL3VkYTEzNDEuaD4KLQotLyoge3t7IEhXIHJlZ3MgZGVmaW5pdGlvbiAqLwotCi0jZGVmaW5lIFNUQVQwICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgU1RBVDEJCQkweDgwCi0jZGVmaW5lIFNUQVRfTUFTSyAgICAgICAgICAgICAgIDB4ODAKLQotI2RlZmluZSBEQVRBMF8wCQkJMHgwMAotI2RlZmluZSBEQVRBMF8xCQkJMHg0MAotI2RlZmluZSBEQVRBMF8yCQkJMHg4MAotI2RlZmluZSBEQVRBX01BU0sgICAgICAgICAgICAgICAweGMwCi0KLSNkZWZpbmUgSVNfREFUQTAoeCkgICAgICgoeCkgPj0gZGF0YTBfMCAmJiAoeCkgPD0gZGF0YTBfMikKLSNkZWZpbmUgSVNfREFUQTEoeCkgICAgICgoeCkgPT0gZGF0YTEpCi0jZGVmaW5lIElTX1NUQVRVUyh4KSAgICAoKHgpID09IHN0YXQwIHx8ICh4KSA9PSBzdGF0MSkKLSNkZWZpbmUgSVNfRVhURU5EKHgpICAgKCh4KSA+PSBleHQwICYmICh4KSA8PSBleHQ2KQotCi0vKiB9fX0gKi8KLQotCi1zdGF0aWMgY29uc3QgY2hhciAqcGVha19uYW1lc1tdID0gewotCSJiZWZvcmUiLAotCSJhZnRlciIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZmlsdGVyX25hbWVzW10gPSB7Ci0JImZsYXQiLAotCSJtaW4iLAotCSJtaW4iLAotCSJtYXgiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKm1peGVyX25hbWVzW10gPSB7Ci0JImRvdWJsZSBkaWZmZXJlbnRpYWwiLAotCSJpbnB1dCBjaGFubmVsIDEgKGxpbmUgaW4pIiwKLQkiaW5wdXQgY2hhbm5lbCAyIChtaWNyb3Bob25lKSIsCi0JImRpZ2l0YWwgbWl4ZXIiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmRlZW1wX25hbWVzW10gPSB7Ci0JIm5vbmUiLAotCSIzMiBrSHoiLAotCSI0NC4xIGtIeiIsCi0JIjQ4IGtIeiIsICAgICAgICAKLX07Ci0KLWVudW0gdWRhMTM0MV9yZWdzX25hbWVzIHsKLQlzdGF0MCwKLQlzdGF0MSwKLQlkYXRhMF8wLAotCWRhdGEwXzEsCi0JZGF0YTBfMiwKLQlkYXRhMSwKLQlleHQwLAotCWV4dDEsCi0JZXh0MiwKLQllbXB0eSwKLQlleHQ0LAotCWV4dDUsCi0JZXh0NiwKLQl1ZGExMzQxX3JlZ19sYXN0LAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnVkYTEzNDFfcmVnX25hbWVzW10gPSB7Ci0JInN0YXQgMCAiLAotCSJzdGF0IDEgIiwKLQkiZGF0YSAwMCIsCi0JImRhdGEgMDEiLAotCSJkYXRhIDAyIiwKLQkiZGF0YSAxICIsCi0JImV4dCAwIiwKLQkiZXh0IDEiLAotCSJleHQgMiIsCi0JImVtcHR5IiwKLQkiZXh0IDQiLAotCSJleHQgNSIsCi0JImV4dCA2IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgdWRhMTM0MV9lbnVtX2l0ZW1zW10gPSB7Ci0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkyLCAvL3BlYWsgLSBiZWZvcmUvYWZ0ZXIKLQk0LCAvL2RlZW1wIC0gbm9uZS8zMi80NC4xLzQ4Ci0JMCwKLQk0LCAvL2ZpbHRlciAtIGZsYXQvbWluL21pbi9tYXgKLQkwLCAwLCAwLAotCTQsIC8vbWl4ZXIgLSBkaWZmZXIvbGluZS9taWMvbWl4ZXIKLQkwLCAwLCAwLCAwLCAwLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiogdWRhMTM0MV9lbnVtX25hbWVzW10gPSB7Ci0JTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQlwZWFrX25hbWVzLCAvL3BlYWsgLSBiZWZvcmUvYWZ0ZXIKLQlkZWVtcF9uYW1lcywgLy9kZWVtcCAtIG5vbmUvMzIvNDQuMS80OAotCU5VTEwsCi0JZmlsdGVyX25hbWVzLCAvL2ZpbHRlciAtIGZsYXQvbWluL21pbi9tYXgKLQlOVUxMLCBOVUxMLCBOVUxMLAotCW1peGVyX25hbWVzLCAvL21peGVyIC0gZGlmZmVyL2xpbmUvbWljL21peGVyCi0JTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLX07Ci0KLXR5cGVkZWYgaW50IHVkYTEzNDFfY2ZnW0NNRF9MQVNUXTsKLQotc3RydWN0IHVkYTEzNDEgewotCWludCAoKndyaXRlKSAoc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MSwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOwotCWludCAoKnJlYWQpIChzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxLCB1bnNpZ25lZCBzaG9ydCByZWcpOyAgICAgICAgCi0JdW5zaWduZWQgY2hhciByZWdzW3VkYTEzNDFfcmVnX2xhc3RdOwotCWludCBhY3RpdmU7Ci0Jc3BpbmxvY2tfdCByZWdfbG9jazsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JdWRhMTM0MV9jZmcgY2ZnOwotI2lmZGVmIENPTkZJR19QTQotCXVuc2lnbmVkIGNoYXIgc3VzcGVuZF9yZWdzW3VkYTEzNDFfcmVnX2xhc3RdOwotCXVkYTEzNDFfY2ZnIHN1c3BlbmRfY2ZnOwotI2VuZGlmCi19OwotCi0vKiB0cmFuc2ZlciA4Yml0IGludGVnZXIgaW50byBzdHJpbmcgd2l0aCBiaW5hcnkgcmVwcmVzZW50YXRpb24gKi8KLXN0YXRpYyB2b2lkIGludDJzdHJfYmluOCh1aW50OF90IHZhbCwgY2hhciAqYnVmKQotewotCWNvbnN0IGludCBzaXplID0gc2l6ZW9mKHZhbCkgKiA4OwotCWludCBpOwotCi0JZm9yIChpPSAwOyBpIDwgc2l6ZTsgaSsrKXsKLQkJKihidWYrKykgPSAodmFsID4+IChzaXplIC0gMSkpID8gJzEnIDogJzAnOwotCQl2YWwgPDw9IDE7Ci0JfQotCSpidWYgPSAnXDAnOyAvL2VuZCB0aGUgc3RyaW5nIHdpdGggemVybwotfQotCi0vKiB7e3sgSFcgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCi0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY29kZWNfd3JpdGUoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGNoYXIgYnVmWzJdID0geyAweGMwLCAweGUwIH07IC8vIGZvciBFWFQgYWRkcmVzc2luZwotCWludCBlcnIgPSAwOwotCi0JdWRhLT5yZWdzW3JlZ10gPSB2YWw7Ci0KLQlpZiAodWRhLT5hY3RpdmUpIHsKLQkJaWYgKElTX0RBVEEwKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTAsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfREFUQTEocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19TVEFUVVMocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9TVEFUVVMsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfRVhURU5EKHJlZykpIHsKLQkJCWJ1ZlswXSB8PSAocmVnIC0gZXh0MCkgJiAweDc7ICAgLy9FWFQgYWRkcmVzcwotCQkJYnVmWzFdIHw9IHZhbDsgICAgICAgICAgICAgICAgICAvL0VYVCBkYXRhCi0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEEwLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWJ1ZiwgMik7Ci0JCX0KLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzQxIGNvZGVjIG5vdCBhY3RpdmUhXG4iKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnKQotewotCXVuc2lnbmVkIGNoYXIgdmFsOwotCWludCBlcnI7Ci0KLQllcnIgPSBsM19yZWFkKGNsbnQsIHJlZywgJnZhbCwgMSk7Ci0JaWYgKGVyciA9PSAxKQotCQkvLyB1c2UganVzdCA2Yml0cyAtIHRoZSByZXN0IGlzIGFkZHJlc3Mgb2YgdGhlIHJlZwotCQlyZXR1cm4gdmFsICYgNjM7Ci0JcmV0dXJuIGVyciA8IDAgPyBlcnIgOiAtRUlPOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzbmRfdWRhMTM0MV92YWxpZF9yZWcoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnKQotewotCXJldHVybiByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZywKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCBzaGlmdCwKLQkJCQkgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgaW50IGZsdXNoKQotewotCWludCBjaGFuZ2U7Ci0JdW5zaWduZWQgc2hvcnQgb2xkLCBuZXc7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICJ1cGRhdGVfYml0czogcmVnOiAlcyBtYXNrOiAlZCBzaGlmdDogJWQgdmFsOiAlZFxuIiwKLQkgICAgICAgdWRhMTM0MV9yZWdfbmFtZXNbcmVnXSwgbWFzaywgc2hpZnQsIHZhbHVlKTsKLSNlbmRpZgotICAgICAgICAKLQlpZiAoIXNuZF91ZGExMzQxX3ZhbGlkX3JlZyhjbG50LCByZWcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2soJnVkYS0+cmVnX2xvY2spOwotCW9sZCA9IHVkYS0+cmVnc1tyZWddOwotCW5ldyA9IChvbGQgJiB+KG1hc2sgPDwgc2hpZnQpKSB8ICh2YWx1ZSA8PCBzaGlmdCk7Ci0JY2hhbmdlID0gb2xkICE9IG5ldzsKLQlpZiAoY2hhbmdlKSB7Ci0JCWlmIChmbHVzaCkgdWRhLT53cml0ZShjbG50LCByZWcsIG5ldyk7Ci0JCXVkYS0+cmVnc1tyZWddID0gbmV3OwotCX0KLQlzcGluX3VubG9jaygmdWRhLT5yZWdfbG9jayk7Ci0JcmV0dXJuIGNoYW5nZTsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jZmdfd3JpdGUoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgd2hhdCwKLQkJCQkgdW5zaWduZWQgc2hvcnQgdmFsdWUsIGludCBmbHVzaCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJldCA9IDA7Ci0jaWZkZWYgQ09ORklHX1BNCi0JaW50IHJlZzsKLSNlbmRpZgotCi0jaWYgMAotCXByaW50ayhLRVJOX0RFQlVHICJjZmdfd3JpdGUgd2hhdDogJWQgdmFsdWU6ICVkXG4iLCB3aGF0LCB2YWx1ZSk7Ci0jZW5kaWYKLQotCXVkYS0+Y2ZnW3doYXRdID0gdmFsdWU7Ci0gICAgICAgIAotCXN3aXRjaCh3aGF0KSB7Ci0JY2FzZSBDTURfUkVTRVQ6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDIsIDEsIGZsdXNoKTsJLy8gTVVURQotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMSwgNiwgMSwgZmx1c2gpOwkvLyBSRVNFVAotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMSwgNiwgMCwgZmx1c2gpOwkvLyBSRVNUT1JFCi0JCXVkYS0+Y2ZnW0NNRF9SRVNFVF09MDsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRlM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAzLCA0LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9GT1JNQVQ6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCA3LCAxLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9PR0FJTjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDYsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0lHQUlOOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgNSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfREFDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQURDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgMSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfVk9MVU1FOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8wLCA2MywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQkFTUzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMSwgMTUsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1RSRUJCTEU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzEsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1BFQUs6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDUsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0RFRU1QOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAzLCAzLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NVVRFOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9GSUxURVI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NIMToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MCwgMzEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NIMjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MSwgMzEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01JQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MiwgNywgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTUlYRVI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDIsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NCwgMSwgNCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfSUc6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDQsIDMsIDAsIHZhbHVlICYgMHgzLCBmbHVzaCk7Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDUsIDMxLCAwLCB2YWx1ZSA+PiAyLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQ19USU1FOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ2LCA3LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0NfTEVWRUw6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDYsIDMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19QTQkJCi0JY2FzZSBDTURfU1VTUEVORDoKLQkJZm9yIChyZWcgPSBzdGF0MDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnKyspCi0JCQl1ZGEtPnN1c3BlbmRfcmVnc1tyZWddID0gdWRhLT5yZWdzW3JlZ107Ci0JCWZvciAocmVnID0gMDsgcmVnIDwgQ01EX0xBU1Q7IHJlZysrKQotCQkJdWRhLT5zdXNwZW5kX2NmZ1tyZWddID0gdWRhLT5jZmdbcmVnXTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfUkVTVU1FOgotCQlmb3IgKHJlZyA9IHN0YXQwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcrKykKLQkJCXNuZF91ZGExMzQxX2NvZGVjX3dyaXRlKGNsbnQsIHJlZywgdWRhLT5zdXNwZW5kX3JlZ3NbcmVnXSk7Ci0JCWZvciAocmVnID0gMDsgcmVnIDwgQ01EX0xBU1Q7IHJlZysrKQotCQkJdWRhLT5jZmdbcmVnXSA9IHVkYS0+c3VzcGVuZF9jZmdbcmVnXTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0gICAgICAgICAgICAgICAgCi0JaWYgKCF1ZGEtPmFjdGl2ZSkKLQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzQxIGNvZGVjIG5vdCBhY3RpdmUhXG4iKTsgICAgICAgICAgICAgICAgCi0JcmV0dXJuIHJldDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBQcm9jIGludGVyZmFjZSAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0KLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfbmFtZXNbXSA9IHsKLQkiSTJTLWJ1cyIsCi0JIkxTQiAxNmJpdHMiLAotCSJMU0IgMThiaXRzIiwKLQkiTFNCIDIwYml0cyIsCi0JIk1TQiIsCi0JImluIExTQiAxNmJpdHMvb3V0IE1TQiIsCi0JImluIExTQiAxOGJpdHMvb3V0IE1TQiIsCi0JImluIExTQiAyMGJpdHMvb3V0IE1TQiIsICAgICAgICAKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpmc19uYW1lc1tdID0gewotCSI1MTIqZnMiLAotCSIzODQqZnMiLAotCSIyNTYqZnMiLAotCSJVbnVzZWQgLSBiYWQgdmFsdWUhIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBiYXNzX3ZhbHVlc1tdWzE2XSA9IHsKLQl7IjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsCi0JICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgInVuZGVmaW5lZCIsIH0sIC8vZmxhdAotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwKLQkgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWluCi0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMTggZEIiLAotCSAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtaW4KLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIyMCBkQiIsCi0JICIyMiBkQiIsICIyNCBkQiIsICIyNCBkQiIsICIyNCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1heAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKm1pY19zZW5zX3ZhbHVlW10gPSB7Ci0JIi0zIGRCIiwgIjAgZEIiLCAiMyBkQiIsICI5IGRCIiwgIjE1IGRCIiwgIjIxIGRCIiwgIjI3IGRCIiwgIm5vdCB1c2VkIiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBBR0NfYXRpbWVbXSA9IHsKLQkxMSwgMTYsIDExLCAxNiwgMjEsIDExLCAxNiwgMjEsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgQUdDX2R0aW1lW10gPSB7Ci0JMTAwLCAxMDAsIDIwMCwgMjAwLCAyMDAsIDQwMCwgNDAwLCA0MDAsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqQUdDX2xldmVsW10gPSB7Ci0JIi05LjAiLCAiLTExLjUiLCAiLTE1LjAiLCAiLTE3LjUiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmlnX3NtYWxsX3ZhbHVlW10gPSB7Ci0JIi0zLjAiLCAiLTIuNSIsICItMi4wIiwgIi0xLjUiLCAiLTEuMCIsICItMC41IiwKLX07Ci0KLS8qCi0gKiB0aGlzIHdhcyBjb21wdXRlZCBhcyBwZWFrX3ZhbHVlW2ldID0gcG93KCg2My1pKSoxLjQyLDEuMDEzKQotICoKLSAqIFVEQTEzNDEgZGF0YXNoZWV0IG9uIHBhZ2UgMjE6IFBlYWsgdmFsdWUgKGRCKSA9IChQZWFrIGxldmVsIC0gNjMuNSkqNSpsb2cyCi0gKiBUaGVyZSBpcyBhbiB0YWJsZSB3aXRoIHRoZXNlIHZhbHVlcyBbbGV2ZWxdPXZhbHVlOiBbM109LTkwLjMxLCBbN109LTg0LjI5Ci0gKiBbNjFdPS0yLjc4LCBbNjJdID0gLTEuNDgsIFs2M10gPSAwLjAKLSAqIEkgdHJpZWQgdG8gY29tcHV0ZSBpdCwgYnV0IHVzaW5nIGJ1dCBldmVuIHVzaW5nIGxvZ2FyaXRobSB3aXRoIGJhc2UgZWl0aGVyIDEwIG9yIDIKLSAqIGkgd2FzJ24gYWJsZSB0byBnZXQgdmFsdWVzIGluIHRoZSB0YWJsZSBmcm9tIHRoZSBmb3JtdWxhLiBTbyBJIGNvbnN0cnVjdGVkIGFub3RoZXIKLSAqIGZvcm11bGEgKHNlZSBhYm92ZSkgdG8gaW50ZXJwb2xhdGUgdGhlIHZhbHVlcyBhcyBnb29kIGFzIHBvc3NpYmxlLiBJZiB0aGVyZSBpcyBzb21lCi0gKiBtaXN0YWtlLCBwbGVhc2UgY29udGFjdCBtZSBvbiB0b21hcy5rYXNwYXJla0BzZXpuYW0uY3ouIFRoYW5rcy4KLSAqIFVEQTEzNDFUUyBkYXRhc2hlZXQgaXMgYXZhaWxhYmxlIGF0OgotICogICBodHRwOi8vd3d3LXVzOS5zZW1pY29uZHVjdG9ycy5jb20vYWNyb2JhdC9kYXRhc2hlZXRzL1VEQTEzNDFUU18zLnBkZiAKLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnBlYWtfdmFsdWVbXSA9IHsKLQkiLUlORiBkQiIsICJOLkEuIiwgIk4uQSIsICI5MC4zMSBkQiIsICJOLkEuIiwgIk4uQS4iLCAiTi5BLiIsICItODQuMjkgZEIiLAotCSItODIuNjUgZEIiLCAiLTgxLjEzIGRCIiwgIi03OS42MSBkQiIsICItNzguMDkgZEIiLCAiLTc2LjU3IGRCIiwgIi03NS4wNSBkQiIsICItNzMuNTMgZEIiLAotCSItNzIuMDEgZEIiLCAiLTcwLjQ5IGRCIiwgIi02OC45NyBkQiIsICItNjcuNDUgZEIiLCAiLTY1LjkzIGRCIiwgIi02NC40MSBkQiIsICItNjIuOTAgZEIiLAotCSItNjEuMzggZEIiLCAiLTU5Ljg2IGRCIiwgIi01OC4zNSBkQiIsICItNTYuODMgZEIiLCAiLTU1LjMyIGRCIiwgIi01My44MCBkQiIsICItNTIuMjkgZEIiLAotCSItNTAuNzggZEIiLCAiLTQ5LjI2IGRCIiwgIi00Ny43NSBkQiIsICItNDYuMjQgZEIiLCAiLTQ0LjczIGRCIiwgIi00My4yMiBkQiIsICItNDEuNzEgZEIiLAotCSItNDAuMjAgZEIiLCAiLTM4LjY5IGRCIiwgIi0zNy4xOSBkQiIsICItMzUuNjggZEIiLCAiLTM0LjE3IGRCIiwgIi0zMi42NyBkQiIsICItMzEuMTcgZEIiLAotCSItMjkuNjYgZEIiLCAiLTI4LjE2IGRCIiwgIi0yNi42NiBkQiIsICItMjUuMTYgZEIiLCAiLTIzLjY2IGRCIiwgIi0yMi4xNiBkQiIsICItMjAuNjcgZEIiLAotCSItMTkuMTcgZEIiLCAiLTE3LjY4IGRCIiwgIi0xNi4xOSBkQiIsICItMTQuNzAgZEIiLCAiLTEzLjIxIGRCIiwgIi0xMS43MiBkQiIsICItMTAuMjQgZEIiLAotCSItOC43NiBkQiIsICItNy4yOCBkQiIsICItNS44MSBkQiIsICItNC4zNCBkQiIsICItMi44OCBkQiIsICItMS40MyBkQiIsICIwLjAwIGRCIiwKLX07Ci0KLXN0YXRpYyB2b2lkIHNuZF91ZGExMzQxX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LCAKLQkJCQkgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHBlYWs7Ci0KLQlwZWFrID0gc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCBVREExMzQxX0RBVEExKTsKLQlpZiAocGVhayA8IDApCi0JCXBlYWsgPSAwOwotCQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzXG5cbiIsIHVkYS0+Y2FyZC0+bG9uZ25hbWUpOwotCi0JLy8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNvbXB1dGVkIHZhbHVlcyBzZWUgVURBMTM0MVRTIGRhdGFzaGVldCBwYWdlcyAxNSAtIDIxCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiREFDIHBvd2VyICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfREFDXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQURDIHBvd2VyICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfQURDXSA/ICJvbiIgOiAib2ZmIik7Ci0gCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNsb2NrIGZyZXF1ZW5jeSAgICAgOiAlc1xuIiwgZnNfbmFtZXNbdWRhLT5jZmdbQ01EX0ZTXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRhdGEgZm9ybWF0ICAgICAgICAgOiAlc1xuXG4iLCBmb3JtYXRfbmFtZXNbdWRhLT5jZmdbQ01EX0ZPUk1BVF1dKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZpbHRlciBtb2RlICAgICAgICAgOiAlc1xuIiwgZmlsdGVyX25hbWVzW3VkYS0+Y2ZnW0NNRF9GSUxURVJdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgbW9kZSAgICAgICAgICA6ICVzXG4iLCBtaXhlcl9uYW1lc1t1ZGEtPmNmZ1tDTURfTUlYRVJdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiRGUtZW1waGFzaXMgICAgICAgICA6ICVzXG4iLCBkZWVtcF9uYW1lc1t1ZGEtPmNmZ1tDTURfREVFTVBdXSk7CQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBlYWsgZGV0ZWN0aW9uIHBvcy4gOiAlc1xuIiwgdWRhLT5jZmdbQ01EX1BFQUtdID8gImFmdGVyIiA6ICJiZWZvcmUiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJQZWFrIHZhbHVlICAgICAgICAgIDogJXNcblxuIiwgcGVha192YWx1ZVtwZWFrXSk7CQkKLQkKLQlzbmRfaXByaW50ZihidWZmZXIsICJBdXRvbWF0aWMgR2FpbiBDdHJsIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9BR0NdID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0MgYXR0YWNrIHRpbWUgICAgIDogJWQgbXNcbiIsIEFHQ19hdGltZVt1ZGEtPmNmZ1tDTURfQUdDX1RJTUVdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIGRlY2F5IHRpbWUgICAgICA6ICVkIG1zXG4iLCBBR0NfZHRpbWVbdWRhLT5jZmdbQ01EX0FHQ19USU1FXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBvdXRwdXQgbGV2ZWwgICAgOiAlcyBkQlxuXG4iLCBBR0NfbGV2ZWxbdWRhLT5jZmdbQ01EX0FHQ19MRVZFTF1dKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk11dGUgICAgICAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX01VVEVdID8gIm9uIiA6ICJvZmYiKTsKLQotCWlmICh1ZGEtPmNmZ1tDTURfVk9MVU1FXSA9PSAwKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogMCBkQlxuIik7Ci0JZWxzZSBpZiAodWRhLT5jZmdbQ01EX1ZPTFVNRV0gPCA2MikKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6ICVkIGRCXG4iLCAtMSp1ZGEtPmNmZ1tDTURfVk9MVU1FXSArMSk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogLUlORiBkQlxuIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQmFzcyAgICAgICAgICAgICAgICA6ICVzXG4iLCBiYXNzX3ZhbHVlc1t1ZGEtPmNmZ1tDTURfRklMVEVSXV1bdWRhLT5jZmdbQ01EX0JBU1NdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiVHJlYmJsZSAgICAgICAgICAgICA6ICVkIGRCXG4iLCB1ZGEtPmNmZ1tDTURfRklMVEVSXSA/IDIqdWRhLT5jZmdbQ01EX1RSRUJCTEVdIDogMCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgR2FpbiAoNmRCKSAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfSUdBSU5dID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJPdXRwdXQgR2FpbiAoNmRCKSAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9PR0FJTl0gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1pYyBzZW5zaXRpdml0eSAgICAgOiAlc1xuIiwgbWljX3NlbnNfdmFsdWVbdWRhLT5jZmdbQ01EX01JQ11dKTsKLQotCQotCWlmKHVkYS0+Y2ZnW0NNRF9DSDFdIDwgMzEpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAxOiAtJWQuJWMgZEJcbiIsCi0JCQkgICAgKCh1ZGEtPmNmZ1tDTURfQ0gxXSA+PiAxKSAqIDMpICsgKHVkYS0+Y2ZnW0NNRF9DSDFdICYgMSksCi0JCQkgICAgdWRhLT5jZmdbQ01EX0NIMV0gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAxOiAtSU5GIGRCXG4iKTsKLQlpZih1ZGEtPmNmZ1tDTURfQ0gyXSA8IDMxKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMjogLSVkLiVjIGRCXG4iLAotCQkJICAgICgodWRhLT5jZmdbQ01EX0NIMl0gPj4gMSkgKiAzKSArICh1ZGEtPmNmZ1tDTURfQ0gyXSAmIDEpLAotCQkJICAgIHVkYS0+Y2ZnW0NNRF9DSDJdICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMjogLUlORiBkQlxuIik7Ci0KLQlpZih1ZGEtPmNmZ1tDTURfSUddID4gNSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgQW1wLiBHYWluIGNoIDI6ICVkLiVjIGRCXG4iLAotCQkJICAgICh1ZGEtPmNmZ1tDTURfSUddID4+IDEpIC0zLCB1ZGEtPmNmZ1tDTURfSUddICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBBbXAuIEdhaW4gY2ggMjogJXMgZEJcbiIsICBpZ19zbWFsbF92YWx1ZVt1ZGEtPmNmZ1tDTURfSUddXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF91ZGExMzQxX3Byb2NfcmVnc19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIAotCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwkJCi0JaW50IHJlZzsKLQljaGFyIGJ1ZlsxMl07Ci0KLQlmb3IgKHJlZyA9IDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZyArKykgewotCQlpZiAocmVnID09IGVtcHR5KQotCQkJY29udGludWU7Ci0JCWludDJzdHJfYmluOCh1ZGEtPnJlZ3NbcmVnXSwgYnVmKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgPSAlc1xuIiwgdWRhMTM0MV9yZWdfbmFtZXNbcmVnXSwgYnVmKTsKLQl9Ci0KLQlpbnQyc3RyX2Jpbjgoc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCBVREExMzQxX0RBVEExKSwgYnVmKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEQVRBMSA9ICVzXG4iLCBidWYpOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfdWRhMTM0MV9wcm9jX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7Ci0KLQlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAidWRhMTM0MSIsICZlbnRyeSkpCi0JCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2xudCwgc25kX3VkYTEzNDFfcHJvY19yZWFkKTsKLQlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAidWRhMTM0MS1yZWdzIiwgJmVudHJ5KSkKLQkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjbG50LCBzbmRfdWRhMTM0MV9wcm9jX3JlZ3NfcmVhZCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTWl4ZXIgY29udHJvbHMgc2V0dGluZyAqLwotCi0vKiB7e3sgVURBMTM0MSBzaW5nbGUgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV9TSU5HTEUoeG5hbWUsIHdoZXJlLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb19zaW5nbGUsIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF9zaW5nbGUsIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfc2luZ2xlLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnIDw8IDUpIHwgKHNoaWZ0IDw8IDkpIHwgKG1hc2sgPDwgMTIpIHwgKGludmVydCA8PCAxOCkgXAotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0KLQl1aW5mby0+dHlwZSA9IG1hc2sgPT0gMSA/IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiA6IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gbWFzazsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMTsKLSAgICAgICAgCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB1ZGEtPmNmZ1t3aGVyZV07Ci0JaWYgKGludmVydCkKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtYXNrIC0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWcgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiA3OwotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMTsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0KLQl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKLQlpZiAoaW52ZXJ0KQotCQl2YWwgPSBtYXNrIC0gdmFsOwotCi0JdWRhLT5jZmdbd2hlcmVdID0gdmFsOwotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWcsIG1hc2ssIHNoaWZ0LCB2YWwsIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBVREExMzQxIGVudW0gZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV9FTlVNKHhuYW1lLCB3aGVyZSwgcmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fZW51bSwgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0X2VudW0sIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfZW51bSwgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZyA8PCA1KSB8IChzaGlmdCA8PCA5KSB8IChtYXNrIDw8IDEyKSB8IChpbnZlcnQgPDwgMTgpIFwKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsKLQljb25zdCBjaGFyICoqdGV4dHM7Ci0JCi0JLy8gdGhpcyByZWdpc3RlciB3ZSBkb24ndCBoYW5kbGUgdGhpcyB3YXkKLQlpZiAoIXVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV07Ci0KLQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdKQotCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSAtIDE7Ci0KLQl0ZXh0cyA9IHVkYTEzNDFfZW51bV9uYW1lc1t3aGVyZV07Ci0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0gICAgICAgIAotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB1ZGEtPmNmZ1t3aGVyZV07CQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgNzsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQotCXVkYS0+Y2ZnW3doZXJlXSA9ICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICYgbWFzayk7Ci0JCi0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZywgbWFzaywgc2hpZnQsIHVkYS0+Y2ZnW3doZXJlXSwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFVEQTEzNDEgMnJlZ3MgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgVURBMTM0MV8yUkVHUyh4bmFtZSwgd2hlcmUsIHJlZ18xLCByZWdfMiwgc2hpZnRfMSwgc2hpZnRfMiwgbWFza18xLCBtYXNrXzIsIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fMnJlZ3MsIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF8ycmVncywgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF8ycmVncywgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZ18xIDw8IDUpIHwgKHJlZ18yIDw8IDkpIHwgKHNoaWZ0XzEgPDwgMTMpIHwgKHNoaWZ0XzIgPDwgMTYpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIChtYXNrXzEgPDwgMTkpIHwgKG1hc2tfMiA8PCAyNSkgfCAoaW52ZXJ0IDw8IDMxKSBcCi19Ci0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvXzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7Ci0JaW50IG1hc2s7Ci0gICAgICAgIAotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCXVpbmZvLT50eXBlID0gbWFzayA9PSAxID8gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOIDogU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBtYXNrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF8ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7ICAgICAgICAKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDMxKSAmIDE7Ci0JaW50IG1hc2s7Ci0KLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdWRhLT5jZmdbd2hlcmVdOwotCWlmIChpbnZlcnQpCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWFzayAtIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF8ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7ICAgICAgICAKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZ18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHJlZ18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgMTU7ICAgICAgICAKLQlpbnQgc2hpZnRfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMykgJiA3OwotCWludCBzaGlmdF8yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDc7Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOyAgICAgICAgCi0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAzMSkgJiAxOwotCWludCBtYXNrOwotCXVuc2lnbmVkIHNob3J0IHZhbDEsIHZhbDIsIHZhbDsKLQotCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotICAgICAgICAgCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0KLQl2YWwxID0gdmFsICYgbWFza18xOwotCXZhbDIgPSAodmFsIC8gKG1hc2tfMSArIDEpKSAmIG1hc2tfMjsgICAgICAgIAotCi0JaWYgKGludmVydCkgewotCQl2YWwxID0gbWFza18xIC0gdmFsMTsKLQkJdmFsMiA9IG1hc2tfMiAtIHZhbDI7Ci0JfQotCi0JdWRhLT5jZmdbd2hlcmVdID0gaW52ZXJ0ID8gbWFzayAtIHZhbCA6IHZhbDsKLSAgICAgICAgCi0JLy9GSVhNRSAtIHJldHVybiB2YWx1ZQotCXNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZ18xLCBtYXNrXzEsIHNoaWZ0XzEsIHZhbDEsIEZMVVNIKTsKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnXzIsIG1hc2tfMiwgc2hpZnRfMiwgdmFsMiwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLSAgCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3VkYTEzNDFfY29udHJvbHNbXSA9IHsKLQlVREExMzQxX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIENNRF9NVVRFLCBkYXRhMF8yLCAyLCAxLCAxKSwKLQlVREExMzQxX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIENNRF9WT0xVTUUsIGRhdGEwXzAsIDAsIDYzLCAxKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJCYXNzIFBsYXliYWNrIFZvbHVtZSIsIENNRF9CQVNTLCBkYXRhMF8xLCAyLCAxNSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIlRyZWJsZSBQbGF5YmFjayBWb2x1bWUiLCBDTURfVFJFQkJMRSwgZGF0YTBfMSwgMCwgMywgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiSW5wdXQgR2FpbiBTd2l0Y2giLCBDTURfSUdBSU4sIHN0YXQxLCA1LCAxLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiT3V0cHV0IEdhaW4gU3dpdGNoIiwgQ01EX09HQUlOLCBzdGF0MSwgNiwgMSwgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiTWl4ZXIgR2FpbiBDaGFubmVsIDEgVm9sdW1lIiwgQ01EX0NIMSwgZXh0MCwgMCwgMzEsIDEpLAotCVVEQTEzNDFfU0lOR0xFKCJNaXhlciBHYWluIENoYW5uZWwgMiBWb2x1bWUiLCBDTURfQ0gyLCBleHQxLCAwLCAzMSwgMSksCi0KLQlVREExMzQxX1NJTkdMRSgiTWljIFNlbnNpdGl2aXR5IFZvbHVtZSIsIENNRF9NSUMsIGV4dDIsIDIsIDcsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBPdXRwdXQgTGV2ZWwiLCBDTURfQUdDX0xFVkVMLCBleHQ2LCAwLCAzLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQUdDIFRpbWUgQ29uc3RhbnQiLCBDTURfQUdDX1RJTUUsIGV4dDYsIDIsIDcsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBR0MgVGltZSBDb25zdGFudCBTd2l0Y2giLCBDTURfQUdDLCBleHQ0LCA0LCAxLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJEQUMgUG93ZXIiLCBDTURfREFDLCBzdGF0MSwgMCwgMSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFEQyBQb3dlciIsIENNRF9BREMsIHN0YXQxLCAxLCAxLCAwKSwKLQotCVVEQTEzNDFfRU5VTSgiUGVhayBkZXRlY3Rpb24iLCBDTURfUEVBSywgZGF0YTBfMiwgNSwgMSwgMCksCi0JVURBMTM0MV9FTlVNKCJEZS1lbXBoYXNpcyIsIENNRF9ERUVNUCwgZGF0YTBfMiwgMywgMywgMCksCi0JVURBMTM0MV9FTlVNKCJNaXhlciBtb2RlIiwgQ01EX01JWEVSLCBleHQyLCAwLCAzLCAwKSwKLQlVREExMzQxX0VOVU0oIkZpbHRlciBtb2RlIiwgQ01EX0ZJTFRFUiwgZGF0YTBfMiwgMCwgMywgMCksCi0KLQlVREExMzQxXzJSRUdTKCJHYWluIElucHV0IEFtcGxpZmllciBHYWluIChjaGFubmVsIDIpIiwgQ01EX0lHLCBleHQ0LCBleHQ1LCAwLCAwLCAzLCAzMSwgMCksCi19OwotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2ZyZWUoc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlsM19kZXRhY2hfY2xpZW50KGNsbnQpOyAvLyBjYWxscyBrZnJlZSBmb3IgZHJpdmVyX2RhdGEgKHN0cnVjdCB1ZGExMzQxKQotCWtmcmVlKGNsbnQpOwotfQotCi1zdGF0aWMgaW50IHVkYTEzNDFfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKLQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICoqY2xudHApCi17Ci0Jc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7Ci0JCS5kZXZfZnJlZSA9ICAgICB1ZGExMzQxX2Rldl9mcmVlLAotCX07Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudDsKLQlpbnQgaWR4LCBlcnI7Ci0KLQlpZiAoc25kX0JVR19PTighY2FyZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbG50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgICAKLQlpZiAoKGVyciA9IGwzX2F0dGFjaF9jbGllbnQoY2xudCwgImwzLWJpdC1zYTExMDAtZ3BpbyIsIFVEQTEzNDFfQUxTQV9OQU1FKSkpIHsKLQkJa2ZyZWUoY2xudCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF91ZGExMzQxX2NvbnRyb2xzKTsgaWR4KyspIHsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF91ZGExMzQxX2NvbnRyb2xzW2lkeF0sIGNsbnQpKSkgPCAwKSB7Ci0JCQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfQ09ERUMsIGNsbnQsICZvcHMpKSA8IDApIHsKLQkJdWRhMTM0MV9mcmVlKGNsbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCSpjbG50cCA9IGNsbnQ7Ci0Jc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlVEQTEzNDFUUyBNaXhlciIpOwotCSgoc3RydWN0IHVkYTEzNDEgKiljbG50LT5kcml2ZXJfZGF0YSktPmNhcmQgPSBjYXJkOwotICAgICAgICAKLQlzbmRfdWRhMTM0MV9wcm9jX2luaXQoY2FyZCwgY2xudCk7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IEwzIG9wZXJhdGlvbnMgKi8KLQotc3RhdGljIGludCB1ZGExMzQxX2F0dGFjaChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGE7Ci0KLQl1ZGEgPSBremFsbG9jKHNpemVvZigqdWRhKSwgMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1ZGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogaW5pdCBmaXhlZCBwYXJ0cyBvZiBteSBjb3B5IG9mIHJlZ2lzdGVycyAqLwotCXVkYS0+cmVnc1tzdGF0MF0gICA9IFNUQVQwOwotCXVkYS0+cmVnc1tzdGF0MV0gICA9IFNUQVQxOwotCi0JdWRhLT5yZWdzW2RhdGEwXzBdID0gREFUQTBfMDsKLQl1ZGEtPnJlZ3NbZGF0YTBfMV0gPSBEQVRBMF8xOwotCXVkYS0+cmVnc1tkYXRhMF8yXSA9IERBVEEwXzI7Ci0KLQl1ZGEtPndyaXRlID0gc25kX3VkYTEzNDFfY29kZWNfd3JpdGU7Ci0JdWRhLT5yZWFkID0gc25kX3VkYTEzNDFfY29kZWNfcmVhZDsKLSAgCi0Jc3Bpbl9sb2NrX2luaXQoJnVkYS0+cmVnX2xvY2spOwotICAgICAgICAKLQljbG50LT5kcml2ZXJfZGF0YSA9IHVkYTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdWRhMTM0MV9kZXRhY2goc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlrZnJlZShjbG50LT5kcml2ZXJfZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXVkYTEzNDFfY29tbWFuZChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGNtZCAhPSBDTURfUkVBRF9SRUcpCi0JCXJldHVybiBzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgY21kLCAoaW50KSBhcmcsIEZMVVNIKTsKLQotCXJldHVybiBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIChpbnQpIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRhMTM0MV9vcGVuKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0JdWRhLT5hY3RpdmUgPSAxOwotCi0JLyogaW5pdCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1JFU0VULCAwLCBSRUdTX09OTFkpOwotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRlMsIEYyNTYsIEZMVVNIKTsgICAgICAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRk9STUFULCBMU0IxNiwgRkxVU0gpOyAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfT0dBSU4sIE9OLCBGTFVTSCk7ICAgICAgLy8gZGVmYXVsdCBvZmYgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0lHQUlOLCBPTiwgRkxVU0gpOyAgICAgIC8vIGRlZmF1bHQgb2ZmIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9EQUMsIE9OLCBGTFVTSCk7CS8vID8/PyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BREMsIE9OLCBGTFVTSCk7CS8vID8/PyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9WT0xVTUUsIDIwLCBGTFVTSCk7ICAgICAvLyBkZWZhdWx0IDBkQiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQkFTUywgMCwgUkVHU19PTkxZKTsgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfVFJFQkJMRSwgMCwgUkVHU19PTkxZKTsgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfUEVBSywgQUZURVIsIFJFR1NfT05MWSk7Ly8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfREVFTVAsIE5PTkUsIFJFR1NfT05MWSk7Ly8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCS8vYXQgdGhpcyBtb21lbnQgc2hvdWxkIGJlIFFNVVRFRCBieSBoMzYwMF9hdWRpb19pbml0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NVVRFLCBPRkYsIFJFR1NfT05MWSk7ICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GSUxURVIsIE1BWCwgRkxVU0gpOyAgICAvLyBkZWZhdWwgZmxhdCBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQ0gxLCAzMSwgRkxVU0gpOyAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQ0gyLCA0LCBGTFVTSCk7ICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTUlDLCA0LCBGTFVTSCk7ICAgICAgICAgLy8gZGVmYXVsdCAwZEIgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01JWEVSLCBNSVhFUiwgRkxVU0gpOyAgIC8vIGRlZmF1bHQgZG91Yi5kaWYubW9kZSAgICAgICAgICAKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQywgT0ZGLCBGTFVTSCk7ICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0lHLCAwLCBGTFVTSCk7ICAgICAgICAgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQ19USU1FLCAwLCBGTFVTSCk7ICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FHQ19MRVZFTCwgMCwgRkxVU0gpOyAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2Nsb3NlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCi0JdWRhLT5hY3RpdmUgPSAwOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IE1vZHVsZSBhbmQgTDMgaW5pdGlhbGl6YXRpb24gKi8KLQotc3RhdGljIHN0cnVjdCBsM19vcHMgdWRhMTM0MV9vcHMgPSB7Ci0JLm9wZW4gPQkJdWRhMTM0MV9vcGVuLAotCS5jb21tYW5kID0JdWRhMTM0MV9jb21tYW5kLAotCS5jbG9zZSA9CXVkYTEzNDFfY2xvc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGwzX2RyaXZlciB1ZGExMzQxX2RyaXZlciA9IHsKLQkubmFtZSA9CQlVREExMzQxX0FMU0FfTkFNRSwKLQkuYXR0YWNoX2NsaWVudCA9IHVkYTEzNDFfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50ID0gdWRhMTM0MV9kZXRhY2gsCi0JLm9wcyA9CQkmdWRhMTM0MV9vcHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB1ZGExMzQxX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gbDNfYWRkX2RyaXZlcigmdWRhMTM0MV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdWRhMTM0MV9leGl0KHZvaWQpCi17Ci0JbDNfZGVsX2RyaXZlcigmdWRhMTM0MV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh1ZGExMzQxX2luaXQpOwotbW9kdWxlX2V4aXQodWRhMTM0MV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBVREExMzQxIENPREVDIGRyaXZlciBmb3IgQUxTQSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VURBMTM0MSxVREExMzQxVFN9fSIpOwotCi1FWFBPUlRfU1lNQk9MKHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KTsKLQotLyogfX19ICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9LY29uZmlnIGIvc291bmQvaXNhL0tjb25maWcKaW5kZXggY2UwYWEwNC4uYzVjOWE5MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL0tjb25maWcKKysrIGIvc291bmQvaXNhL0tjb25maWcKQEAgLTU2LDggKzU2LDggQEAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBRDE4NDggKEFuYWxvZyBEZXZpY2VzKSBvcgogCSAgQ1M0MjQ4IChDaXJydXMgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzKSBjaGlwcy4KIAkgIAotCSAgRm9yIG5ld2VyIGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljLCB1c2UgdGhlIENTNDIzMSwgQ1M0MjMyIG9yCi0JICBDUzQyMzYrIGRyaXZlcnMuCisJICBGb3IgbmV3ZXIgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMsIHVzZSB0aGUgQ1M0MjMxIG9yIENTNDIzMisKKwkgIGRyaXZlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hZDE4NDguCkBAIC05NCw2ICs5NCw4IEBACiAJdHJpc3RhdGUgIkMtTWVkaWEgQ01JODMzMCIKIAlzZWxlY3QgU05EX1dTU19MSUIKIAlzZWxlY3QgU05EX1NCMTZfRFNQCisJc2VsZWN0IFNORF9PUEwzX0xJQgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIEMtTWVkaWEgQ01JODMzMCBjaGlwLgpAQCAtMTEyLDI2ICsxMTQsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzEuCiAKLWNvbmZpZyBTTkRfQ1M0MjMyCi0JdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzMiBkcml2ZXIiCi0Jc2VsZWN0IFNORF9PUEwzX0xJQgotCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKLQlzZWxlY3QgU05EX1dTU19MSUIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjMyIGNoaXBzIGZyb20gQ2lycnVzCi0JICBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzIuCi0KIGNvbmZpZyBTTkRfQ1M0MjM2Ci0JdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzNisgZHJpdmVyIgorCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzIvQ1M0MjM2KyBkcml2ZXIiCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1dTU19MSUIKIAloZWxwCi0JICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzNSxDUzQyMzYsQ1M0MjM3QixDUzQyMzhCLAotCSAgQ1M0MjM5IGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycy4KKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjMyLENTNDIzNSxDUzQyMzYsQ1M0MjM3QiwKKwkgIENTNDIzOEIsQ1M0MjM5IGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbAorCSAgU2VtaWNvbmR1Y3RvcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1jczQyMzYuCkBAIC0zNzcsMTQgKzM2OCwxNyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNnYWxheHkuCiAKIGNvbmZpZyBTTkRfU1NDQVBFCi0JdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBQblAgZHJpdmVyIgorCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgZHJpdmVyIgogCXNlbGVjdCBTTkRfSFdERVAKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVuc29uaXEgU291bmRTY2FwZSBQblAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFbnNvbmlxIFNvdW5kU2NhcGUgCiAJICBzb3VuZGNhcmRzLgogCisJICBUaGUgUENNIGF1ZGlvIGlzIHN1cHBvcnRlZCBvbiBTb3VuZFNjYXBlIENsYXNzaWMsIEVsaXRlLCBQblAKKwkgIGFuZCBWSVZPIGNhcmRzLiBUaGUgTUlESSBzdXBwb3J0IGlzIHZlcnkgZXhwZXJpbWVudGFsLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtc3NjYXBlLgogCkBAIC00MTEsNSArNDA1LDM2IEBACiAJICB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBmaXJtd2FyZSBmaWxlcyBmcm9tIHRoZQogCSAgYWxzYS1maXJtd2FyZSBwYWNrYWdlLgogCitjb25maWcgU05EX01TTkRfUElOTkFDTEUKKwl0cmlzdGF0ZSAiVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvRmlqaSBkcml2ZXIiCisJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvCisJICBGaWppIHNvdW5kY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1tc25kLXBpbm5hY2xlLgorCitjb25maWcgU05EX01TTkRfQ0xBU1NJQworCXRyaXN0YXRlICJTdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGksIE1vbnRlcmV5IgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgTSBoZXJlIGlmIHlvdSBoYXZlIGEgVHVydGxlIEJlYWNoIE11bHRpU291bmQgQ2xhc3NpYywgVGFoaXRpIG9yCisJICBNb250ZXJleSAobm90IGZvciB0aGUgUGlubmFjbGUgb3IgRmlqaSkuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kPiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uCisJICBhYm91dCB0aGlzIGRyaXZlci4gIE5vdGUgdGhhdCBpdCBoYXMgYmVlbiBkaXNjb250aW51ZWQsIGJ1dCB0aGUKKwkgIFZveWV0cmEgVHVydGxlIEJlYWNoIGtub3dsZWRnZSBiYXNlIGVudHJ5IGZvciBpdCBpcyBzdGlsbCBhdmFpbGFibGUKKwkgIGF0IDxodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLW1zbmQtY2xhc3NpYy4KKwogZW5kaWYJIyBTTkRfSVNBCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9NYWtlZmlsZSBiL3NvdW5kL2lzYS9NYWtlZmlsZQppbmRleCA2M2FmMTNkLi5iOTA2YjlhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL01ha2VmaWxlCkBAIC0yNiw1ICsyNiw1IEBACiBvYmotJChDT05GSUdfU05EX1NHQUxBWFkpICs9IHNuZC1zZ2FsYXh5Lm8KIG9iai0kKENPTkZJR19TTkRfU1NDQVBFKSArPSBzbmQtc3NjYXBlLm8KIAotb2JqLSQoQ09ORklHX1NORCkgKz0gYWQxODE2YS8gYWQxODQ4LyBjczQyM3gvIGVzMTY4OC8gZ3VzLyBvcHRpOXh4LyBcCitvYmotJChDT05GSUdfU05EKSArPSBhZDE4MTZhLyBhZDE4NDgvIGNzNDIzeC8gZXMxNjg4LyBndXMvIG1zbmQvIG9wdGk5eHgvIFwKIAkJICAgICBzYi8gd2F2ZWZyb250LyB3c3MvCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKaW5kZXggNzc1MjQyNC4uYmJjYmY5MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCisrKyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwpAQCAtMTU2LDEwICsxNTYsMTIgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSAqYWNhcmQ7CiAJc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKwlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSAoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYWQxODE2YV9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CkBAIC0xOTQsNiArMTk2LDEyIEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwllcnJvciA9IHNuZF9hZDE4MTZhX3RpbWVyKGNoaXAsIDAsICZ0aW1lcik7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJaWYgKG1wdV9wb3J0W2Rldl0gPiAwKSB7CiAJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCiAJCQkJCW1wdV9wb3J0W2Rldl0sIDAsIG1wdV9pcnFbZGV2XSwgSVJRRl9ESVNBQkxFRCwKQEAgLTIwNywxMSArMjE1LDggQEAKIAkJCQkgICAgT1BMM19IV19BVVRPLCAwLCAmb3BsMykgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4LlxuIiwgZm1fcG9ydFtkZXZdLCBmbV9wb3J0W2Rldl0gKyAyKTsKIAkJfSBlbHNlIHsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMSwgMikpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7CisJCQllcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnJvciA8IDApIHsKIAkJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCmluZGV4IDNiZmNhN2MuLjA1YWVmOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYwpAQCAtMzcsNyArMzcsNyBAQAogCQlpZiAoaW5iKEFEMTgxNkFfUkVHKEFEMTgxNkFfQ0hJUF9TVEFUVVMpKSAmIEFEMTgxNkFfUkVBRFkpCiAJCQlyZXR1cm4gMDsKIAotCXNuZF9wcmludGsoImNoaXAgYnVzeS5cbiIpOworCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJjaGlwIGJ1c3kuXG4iKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJpbnZhbGlkIHRyaWdnZXIgbW9kZSAweCV4LlxuIiwgd2hhdCk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJpbnZhbGlkIHRyaWdnZXIgbW9kZSAweCV4LlxuIiwgd2hhdCk7CiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CiAKQEAgLTM3Nyw3ICszNzcsNiBAQAogCS5maWZvX3NpemUgPQkJMCwKIH07CiAKLSNpZiAwIC8qIG5vdCB1c2VkIG5vdyAqLwogc3RhdGljIGludCBzbmRfYWQxODE2YV90aW1lcl9jbG9zZShzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAgPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7CkBAIC00NDIsOCArNDQxLDYgQEAKIAkuc3RhcnQgPQlzbmRfYWQxODE2YV90aW1lcl9zdGFydCwKIAkuc3RvcCA9CQlzbmRfYWQxODE2YV90aW1lcl9zdG9wLAogfTsKLSNlbmRpZiAvKiBub3QgdXNlZCBub3cgKi8KLQogCiBzdGF0aWMgaW50IHNuZF9hZDE4MTZhX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CkBAIC01NjgsNyArNTY1LDcgQEAKIAljYXNlIEFEMTgxNkFfSFdfQUQxODE1OglyZXR1cm4gIkFEMTgxNSI7CiAJY2FzZSBBRDE4MTZBX0hXX0FEMThNQVgxMDogcmV0dXJuICJBRDE4bWF4MTAiOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIlVua25vd24gY2hpcCB2ZXJzaW9uICVkOiVkLlxuIiwKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gY2hpcCB2ZXJzaW9uICVkOiVkLlxuIiwKIAkJCWNoaXAtPnZlcnNpb24sIGNoaXAtPmhhcmR3YXJlKTsKIAkJcmV0dXJuICJBRDE4MTZBIC0gdW5rbm93biI7CiAJfQpAQCAtNjg3LDcgKzY4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwIC8qIG5vdCB1c2VkIG5vdyAqLwogaW50IF9fZGV2aW5pdCBzbmRfYWQxODE2YV90aW1lcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpCiB7CiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CkBAIC03MDksNyArNzA1LDYgQEAKIAkJKnJ0aW1lciA9IHRpbWVyOwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIG5vdCB1c2VkIG5vdyAqLwogCiAvKgogICoKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDIyM2E2YzAuLjRiZWViNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtOTEsOSArOTEsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbbl0sIC0xLCBpcnFbbl0sIGRtYTFbbl0sIC0xLAogCQkJdGhpbmtwYWRbbl0gPyBXU1NfSFdfVEhJTktQQUQgOiBXU1NfSFdfREVURUNULApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkbGliLmMgYi9zb3VuZC9pc2EvYWRsaWIuYwppbmRleCAzNzRiNzE3Li43NDY1YWUwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWRsaWIuYworKysgYi9zb3VuZC9pc2EvYWRsaWIuYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWNhcmQtPnByaXZhdGVfZGF0YSA9IHJlcXVlc3RfcmVnaW9uKHBvcnRbbl0sIDQsIENSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCBmMWNlMzBmLi41ZmQ1MmU0IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0xNjMsOSArMTYzLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2FsczEwMCAqYWNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FsczEwMCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FsczEwMCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYWxzMTAwX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9henQyMzIwLmMgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCmluZGV4IDNlNzRkMWEuLmY3YWE2MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9henQyMzIwLmMKKysrIGIvc291bmQvaXNhL2F6dDIzMjAuYwpAQCAtMTg0LDkgKzE4NCwxMCBAQAogCXN0cnVjdCBzbmRfd3NzICpjaGlwOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSAoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjAgKiljYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfYXp0MjMyMF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY21pODMzMC5jIGIvc291bmQvaXNhL2NtaTgzMzAuYwppbmRleCBlNDlhZWM3Li5kZTgzNjA4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY21pODMzMC5jCisrKyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKQEAgLTMxLDExICszMSwxMSBAQAogICogIFRvIHF1aWNrbHkgbG9hZCB0aGUgbW9kdWxlLAogICoKICAqICBtb2Rwcm9iZSAtYSBzbmQtY21pODMzMCBzYnBvcnQ9MHgyMjAgc2JpcnE9NSBzYmRtYTg9MQotICogICAgc2JkbWExNj01IHdzc3BvcnQ9MHg1MzAgd3NzaXJxPTExIHdzc2RtYT0wCisgKiAgICBzYmRtYTE2PTUgd3NzcG9ydD0weDUzMCB3c3NpcnE9MTEgd3NzZG1hPTAgZm1wb3J0PTB4Mzg4CiAgKgogICogIFRoaXMgY2FyZCBoYXMgdHdvIG1peGVycyBhbmQgdHdvIFBDTSBkZXZpY2VzLiAgSSd2ZSBjaGVlc2VkIGl0IHN1Y2gKICAqICB0aGF0IHJlY29yZGluZyBhbmQgcGxheWJhY2sgY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGUgc2FtZSBkZXZpY2UuCi0gKiAgVGhlIGRyaXZlciAibWFnaWNhbGx5IiByb3V0ZXMgdGhlIGNhcHR1cmluZyB0byB0aGUgQUQxODQ4IGNvZGVjLAorICogIFRoZSBkcml2ZXIgIm1hZ2ljYWxseSIgcm91dGVzIHRoZSBjYXB0dXJpbmcgdG8gdGhlIENNSTgzMzAgY29kZWMsCiAgKiAgYW5kIHBsYXliYWNrIHRvIHRoZSBTQjE2IGNvZGVjLiAgVGhpcyBhbGxvd3MgZm9yIGZ1bGwtZHVwbGV4IG1vZGUKICAqICB0byBzb21lIGV4dGVudC4KICAqICBUaGUgdXRpbGl0aWVzIGluIGFsc2EtdXRpbHMgYXJlIGF3YXJlIG9mIGJvdGggZGV2aWNlcywgc28gcGFzc2luZwpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgorI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KICNpbmNsdWRlIDxzb3VuZC9zYi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIApAQCAtNzksNiArODEsOSBAQAogc3RhdGljIGxvbmcgd3NzcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CiBzdGF0aWMgaW50IHdzc2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKIHN0YXRpYyBpbnQgd3NzZG1hW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworc3RhdGljIGxvbmcgZm1wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBsb25nIG1wdXBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBtcHVpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgQ01JODMzMCBzb3VuZGNhcmQuIik7CkBAIC0xMDcsNiArMTEyLDEyIEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod3NzZG1hLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3c3NkbWEsICJETUEgZm9yIENNSTgzMzAgV1NTIGRyaXZlci4iKTsKIAorbW9kdWxlX3BhcmFtX2FycmF5KGZtcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcG9ydCwgIkZNIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1cG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdXBvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1aXJxLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVpcnEsICJJUlEgIyBmb3IgQ01JODMzMCBNUFUtNDAxIHBvcnQuIik7CiAjaWZkZWYgQ09ORklHX1BOUAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CkBAIC0xNDksNiArMTYwLDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJc3RydWN0IHBucF9kZXYgKmNhcDsKIAlzdHJ1Y3QgcG5wX2RldiAqcGxheTsKKwlzdHJ1Y3QgcG5wX2RldiAqbXB1OwogI2VuZGlmCiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfd3NzICp3c3M7CkBAIC0xNjUsNyArMTc3LDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jbWk4MzMwX3BucGlkc1tdID0gewotCXsgLmlkID0gIkNNSTAwMDEiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQ01JMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKIAl7IC5pZCA9ICIiIH0KIH07CiAKQEAgLTIxOSw4ICsyMzEsMTAgQEAKIAkJQ01JODMzMF9STVVYM0QsIDUsIDEsIDEpLAogV1NTX1NJTkdMRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAwLAogCQlDTUk4MzMwX09VVFBVVFZPTCwgMywgMywgMCksCi1XU1NfU0lOR0xFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDTUk4MzMwX1JFQ01VWCwgMywgMSwgMSksCitXU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMCwgMCwgMzEsIDEpLAogV1NTX1NJTkdMRShTTkRSVl9DVExfTkFNRV9JRUM5NTgoIklucHV0ICIsIENBUFRVUkUsIFNXSVRDSCksIDAsCiAJCUNNSTgzMzBfUk1VWDNELCA3LCAxLCAxKSwKIFdTU19TSU5HTEUoU05EUlZfQ1RMX05BTUVfSUVDOTU4KCJJbnB1dCAiLCBQTEFZQkFDSywgU1dJVENIKSwgMCwKQEAgLTMyMywxNiArMzM3LDIxIEBACiAJaWYgKGFjYXJkLT5wbGF5ID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlhY2FyZC0+bXB1ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgaWQtPmRldnNbMl0uaWQsIE5VTEwpOworCWlmIChhY2FyZC0+cGxheSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCiAJcGRldiA9IGFjYXJkLT5jYXA7CiAKIAllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAvQzNEIChBRDE4NDgpIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNNSTgzMzAvQzNEIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXdzc3BvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOwogCXdzc2RtYVtkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKIAl3c3NpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CisJZm1wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKIAogCS8qIGFsbG9jYXRlIFNCMTYgcmVzb3VyY2VzICovCiAJcGRldiA9IGFjYXJkLT5wbGF5OwpAQCAtMzQ3LDYgKzM2NiwxNyBAQAogCXNiZG1hMTZbZGV2XSA9IHBucF9kbWEocGRldiwgMSk7CiAJc2JpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CiAKKwkvKiBhbGxvY2F0ZSBNUFUtNDAxIHJlc291cmNlcyAqLworCXBkZXYgPSBhY2FyZC0+bXB1OworCisJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ01JODMzMC9DM0QgKE1QVS00MDEpIFBuUCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW1wdXBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOworCW1wdWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNDY3LDI2ICs0OTcsMjkgQEAKIAogI2RlZmluZSBQRlgJImNtaTgzMzA6ICIKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NtaTgzMzBfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2NtaTgzMzBfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY21pODMzMCAqYWNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCkpOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjb3VsZCBub3QgZ2V0IGEgbmV3IGNhcmRcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJYWNhcmQtPmNhcmQgPSBjYXJkOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jbWk4MzMwX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NtaTgzMzAgKmFjYXJkOwogCWludCBpLCBlcnI7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgd3NzcG9ydFtkZXZdICsgNCwgLTEsCkBAIC00OTQsMTEgKzUyNywxMSBAQAogCQkJICAgICB3c3NkbWFbZGV2XSwgLTEsCiAJCQkgICAgIFdTU19IV19ERVRFQ1QsIDAsICZhY2FyZC0+d3NzKTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKEFEMTg0OCkgZGV2aWNlIGJ1c3k/P1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgZGV2aWNlIGJ1c3k/P1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChhY2FyZC0+d3NzLT5oYXJkd2FyZSAhPSBXU1NfSFdfQ01JODMzMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKEFEMTg0OCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNTMwLDYgKzU2MywyNyBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CisJaWYgKGZtcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsCisJCQkJICAgIGZtcG9ydFtkZXZdLCBmbXBvcnRbZGV2XSArIDIsCisJCQkJICAgIE9QTDNfSFdfQVVUTywgMCwgJm9wbDMpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkgICAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseCA/XG4iLAorCQkJCSAgIGZtcG9ydFtkZXZdLCBmbXBvcnRbZGV2XSArIDIpOworCQl9IGVsc2UgeworCQkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChtcHVwb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJCW1wdXBvcnRbZGV2XSwgMCwgbXB1aXJxW2Rldl0sCisJCQkJCUlSUUZfRElTQUJMRUQsIE5VTEwpIDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4LlxuIiwKKwkJCQltcHVwb3J0W2Rldl0pOworCX0KIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDTUk4MzMwL0MzRCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJDLU1lZGlhIENNSTgzMzAvQzNEIik7CkBAIC01NjQsOSArNjE4LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY21pODMzMF9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTYyOCw5ICs2ODIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCQkJICAgICAgIAotCWNhcmQgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCWlmICgocmVzID0gc25kX2NtaTgzMzBfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJQblAgZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlIGIvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQppbmRleCA1ODcwY2EyLi42ZDM5N2U4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKQEAgLTMsMTMgKzMsMTEgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+CiAjCiAKLXNuZC1jczQyMzYtbGliLW9ianMgOj0gY3M0MjM2X2xpYi5vCiBzbmQtY3M0MjMxLW9ianMgOj0gY3M0MjMxLm8KLXNuZC1jczQyMzItb2JqcyA6PSBjczQyMzIubwotc25kLWNzNDIzNi1vYmpzIDo9IGNzNDIzNi5vCitzbmQtY3M0MjM2LW9ianMgOj0gY3M0MjM2Lm8gY3M0MjM2X2xpYi5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfQ1M0MjMxKSArPSBzbmQtY3M0MjMxLm8KLW9iai0kKENPTkZJR19TTkRfQ1M0MjMyKSArPSBzbmQtY3M0MjMyLm8KLW9iai0kKENPTkZJR19TTkRfQ1M0MjM2KSArPSBzbmQtY3M0MjM2Lm8gc25kLWNzNDIzNi1saWIubworb2JqLSQoQ09ORklHX1NORF9DUzQyMzYpICs9IHNuZC1jczQyMzYubworCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCmluZGV4IGYwMTlkNDQuLmNiOTE1M2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwpAQCAtOTUsOSArOTUsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbbl0sIC0xLCBpcnFbbl0sIGRtYTFbbl0sIGRtYTJbbl0sCiAJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhZDJlNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jZGVmaW5lIENTNDIzMgotI2luY2x1ZGUgImNzNDIzNi5jIgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKaW5kZXggMDE5Yzk0MC4uYTA3NmE2YyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCkBAIC0zMywxNyArMzMsMTQgQEAKIAogTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSNpZmRlZiBDUzQyMzIKLU1PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzMiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjMyLTkiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1R1cnRsZSBCZWFjaCxUQlMtMjAwMH0sIgogCQkie1R1cnRsZSBCZWFjaCxUcm9wZXogUGx1c30sIgogCQkie1NJQyBDcnlzdGFsV2F2ZSAzMn0sIgogCQkie0hld2xldHQgUGFja2FyZCxPbW5pYm9vayA1NTAwfSwiCiAJCSJ7VGVycmFUZWMsTWFlc3RybyAzMi85Nn0sIgotCQkie1BoaWxpcHMsUENBNzBQU319Iik7Ci0jZWxzZQotTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjM1LTkiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM1fSwiCisJCSJ7UGhpbGlwcyxQQ0E3MFBTfX0sIgorCQkie3tDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNX0sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM2fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzd9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzOH0sIgpAQCAtNzAsMTUgKzY3LDExIEBACiAJCSJ7VHlwaG9vbiBTb3VuZHN5c3RlbSxDUzQyMzZCfSwiCiAJCSJ7VHVydGxlIEJlYWNoLE1hbGlidX0sIgogCQkie1Vua25vd24sRGlnaXRhbCBQQyA1MDAwIE9uYm9hcmR9fSIpOwotI2VuZGlmCiAKLSNpZmRlZiBDUzQyMzIKLSNkZWZpbmUgSURFTlQgIkNTNDIzMiIKLSNkZWZpbmUgREVWX05BTUUgImNzNDIzMiIKLSNlbHNlCi0jZGVmaW5lIElERU5UICJDUzQyMzYrIgotI2RlZmluZSBERVZfTkFNRSAiY3M0MjM2IgotI2VuZGlmCitNT0RVTEVfQUxJQVMoInNuZF9jczQyMzIiKTsKKworI2RlZmluZSBJREVOVCAiQ1M0MjMyKyIKKyNkZWZpbmUgREVWX05BTUUgImNzNDIzMisiCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KQEAgLTEyOCw5ICsxMjEsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIHN0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucGNfcmVnaXN0ZXJlZDsKLSNpZmRlZiBDUzQyMzIKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7Ci0jZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgewpAQCAtMTQ1LDExICsxMzYsMTAgQEAKIAogI2lmZGVmIENPTkZJR19QTlAKIAotI2lmZGVmIENTNDIzMgogLyoKICAqIFBOUCBCSU9TCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfY3M0MjMyX3BucGJpb3NpZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGJpb3NpZHNbXSA9IHsKIAl7IC5pZCA9ICJDU0MwMTAwIiB9LAogCXsgLmlkID0gIkNTQzAwMDAiIH0sCiAJLyogR3VpbGxlbW90IFR1cnRsZWJlYWNoIHNvbWV0aGluZyBhcHBlYXJzIHRvIGJlIGNzNDIzMiBjb21wYXRpYmxlCkBAIC0xNTcsMTAgKzE0Nyw4IEBACiAJeyAuaWQgPSAiR0lNMDEwMCIgfSwKIAl7IC5pZCA9ICIiIH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX2NzNDIzMl9wbnBiaW9zaWRzKTsKLSNlbmRpZiAvKiBDUzQyMzIgKi8KK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBzbmRfY3M0MjN4X3BucGJpb3NpZHMpOwogCi0jaWZkZWYgQ1M0MjMyCiAjZGVmaW5lIENTNDIzWF9JU0FQTlBfRFJJVkVSCSJjczQyMzJfaXNhcG5wIgogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBpZHNbXSA9IHsKIAkvKiBQaGlsaXBzIFBDQTcwUFMgKi8KQEAgLTE3OSwxMiArMTY3LDYgQEAKIAl7IC5pZCA9ICJDU0NmMDMyIiwgLmRldnMgPSB7IHsgIkNTQzAwMDAiIH0sIHsgIkNTQzAwMTAiIH0sIHsgIkNTQzAwMDMiIH0gfSB9LAogCS8qIE5ldGZpbml0eSAzMDAwIG9uLWJvYXJkIHNvdW5kY2FyZCAqLwogCXsgLmlkID0gIkNTQ2U4MjUiLCAuZGV2cyA9IHsgeyAiQ1NDMDEwMCIgfSwgeyAiQ1NDMDExMCIgfSwgeyAiQ1NDMDEwZiIgfSB9IH0sCi0JLyogLS0tICovCi0JeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwotfTsKLSNlbHNlIC8qIENTNDIzNiAqLwotI2RlZmluZSBDUzQyM1hfSVNBUE5QX0RSSVZFUgkiY3M0MjM2X2lzYXBucCIKLXN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5waWRzW10gPSB7CiAJLyogSW50ZWwgTWFybGluIFNwaWtlIE1vdGhlcmJvYXJkIC0gQ1M0MjM1ICovCiAJeyAuaWQgPSAiQ1NDMDIyNSIsIC5kZXZzID0geyB7ICJDU0MwMDAwIiB9LCB7ICJDU0MwMDEwIiB9LCB7ICJDU0MwMDAzIiB9IH0gfSwKIAkvKiBJbnRlbCBNYXJsaW4gU3Bpa2UgTW90aGVyYm9hcmQgKCMyKSAtIENTNDIzNSAqLwpAQCAtMjY2LDcgKzI0OCw2IEBACiAJLyogLS0tICovCiAJeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwogfTsKLSNlbmRpZgogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBucF9jYXJkLCBzbmRfY3M0MjN4X3BucGlkcyk7CiAKQEAgLTMyMywxNyArMzA0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDUzQyMzIKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzMl9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCi0JCQkJCSBzdHJ1Y3QgcG5wX2RldiAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzeF9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCisJCQkJCSBzdHJ1Y3QgcG5wX2RldiAqcGRldiwKKwkJCQkJIHN0cnVjdCBwbnBfZGV2ICpjZGV2KQogewogCWFjYXJkLT53c3MgPSBwZGV2OwogCWlmIChzbmRfY3M0MjN4X3BucF9pbml0X3dzcyhkZXYsIGFjYXJkLT53c3MpIDwgMCkKIAkJcmV0dXJuIC1FQlVTWTsKLQljcG9ydFtkZXZdID0gLTE7CisJaWYgKGNkZXYpCisJCWNwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChjZGV2LCAwKTsKKwllbHNlCisJCWNwb3J0W2Rldl0gPSAtMTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyM3hfcG5wYyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKIAkJCQkJICBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKQEAgLTM4MiwxNiArMzY1LDE4IEBACiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShhY2FyZC0+cmVzX3NiX3BvcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY3M0MjN4X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9jczQyMzYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfY3M0MjM2X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC00MDksNDAgKzM5NCwzOSBAQAogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0jaWZkZWYgQ1M0MjMyCiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAogCQkJICAgICBpcnFbZGV2XSwKIAkJCSAgICAgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCi0JCQkgICAgIFdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKKwkJCSAgICAgV1NTX0hXX0RFVEVDVDMsIDAsICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlhY2FyZC0+Y2hpcCA9IGNoaXA7CisJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykgeworCQlzbmRfd3NzX2ZyZWUoY2hpcCk7CisJCWVyciA9IHNuZF9jczQyMzZfY3JlYXRlKGNhcmQsCisJCQkJCXBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKKwkJCQkJaXJxW2Rldl0sIGRtYTFbZGV2XSwgZG1hMltkZXZdLAorCQkJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJYWNhcmQtPmNoaXAgPSBjaGlwOwogCi0JZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzbmRfd3NzX21peGVyKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3M0MjM2X21peGVyKGNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJYWNhcmQtPmNoaXAgPSBjaGlwOworCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0jZWxzZSAvKiBDUzQyMzYgKi8KLQllcnIgPSBzbmRfY3M0MjM2X2NyZWF0ZShjYXJkLAotCQkJCXBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKLQkJCQlpcnFbZGV2XSwgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCi0JCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWFjYXJkLT5jaGlwID0gY2hpcDsKLQotCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc25kX2NzNDIzNl9taXhlcihjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLSNlbmRpZgorCQllcnIgPSBzbmRfd3NzX21peGVyKGNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIHBjbS0+bmFtZSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwKQEAgLTUxMiw5ICs0OTYsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY3M0MjN4X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNTc3LDEzICs1NjEsMTQgQEAKIAogCiAjaWZkZWYgQ09ORklHX1BOUAotI2lmZGVmIENTNDIzMgotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzMl9wbnBiaW9zX2RldGVjdChzdHJ1Y3QgcG5wX2RldiAqcGRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcG5wYmlvc19kZXRlY3Qoc3RydWN0IHBucF9kZXYgKnBkZXYsCiAJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBucF9kZXYgKmNkZXY7CisJY2hhciBjaWRbUE5QX0lEX0xFTl07CiAKIAlpZiAocG5wX2RldmljZV9pc19pc2FwbnAocGRldikpCiAJCXJldHVybiAtRU5PRU5UOwkvKiB3ZSBoYXZlIGFub3RoZXIgcHJvY2VkdXJlIC0gY2FyZCAqLwpAQCAtNTk0LDEwICs1NzksMTkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9jczQyMzJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CisJLyogcHJlcGFyZSBzZWNvbmQgaWQgKi8KKwlzdHJjcHkoY2lkLCBwZGV2LT5pZFswXS5pZCk7CisJY2lkWzVdID0gJzEnOworCWNkZXYgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJihwZGV2LT5wcm90b2NvbC0+ZGV2aWNlcyksIHByb3RvY29sX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAoY2Rldi0+aWRbMF0uaWQsIGNpZCkpCisJCQlicmVhazsKKwl9CisJZXJyID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfY2FyZF9jczQyM3hfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2LCBjZGV2KTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlBuUCBCSU9TIGRldGVjdGlvbiBmYWlsZWQgZm9yICIgSURFTlQgIlxuIik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC02MTIsMzUgKzYwNiwzNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2NzNDIzMl9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICogcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY3M0MjN4X3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBkZXYpCiB7CiAJc25kX2NhcmRfZnJlZShwbnBfZ2V0X2RydmRhdGEocGRldikpOwogCXBucF9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfY3M0MjMyX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gc25kX2NzNDIzeF9zdXNwZW5kKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2NzNDIzMl9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQorc3RhdGljIGludCBzbmRfY3M0MjN4X3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCiB7CiAJcmV0dXJuIHNuZF9jczQyM3hfcmVzdW1lKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNzNDIzMl9wbnBfZHJpdmVyID0gewotCS5uYW1lID0gImNzNDIzMi1wbnBiaW9zIiwKLQkuaWRfdGFibGUgPSBzbmRfY3M0MjMyX3BucGJpb3NpZHMsCi0JLnByb2JlID0gc25kX2NzNDIzMl9wbnBiaW9zX2RldGVjdCwKLQkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NzNDIzMl9wbnBfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjczQyM3hfcG5wX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjczQyM3gtcG5wYmlvcyIsCisJLmlkX3RhYmxlID0gc25kX2NzNDIzeF9wbnBiaW9zaWRzLAorCS5wcm9iZSA9IHNuZF9jczQyM3hfcG5wYmlvc19kZXRlY3QsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jczQyM3hfcG5wX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfY3M0MjMyX3BucF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX2NzNDIzMl9wbnBfcmVzdW1lLAorCS5zdXNwZW5kCT0gc25kX2NzNDIzeF9wbnBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9jczQyM3hfcG5wX3Jlc3VtZSwKICNlbmRpZgogfTsKLSNlbmRpZiAvKiBDUzQyMzIgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wbnBjX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCkBAIC02NTYsOSArNjQ5LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAlpZiAoKHJlcyA9IHNuZF9jYXJkX2NzNDIzeF9wbnBjKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXNhcG5wIGRldGVjdGlvbiBmYWlsZWQgYW5kIHByb2JpbmcgZm9yICIgSURFTlQKIAkJICAgICAgICIgaXMgbm90IHN1cHBvcnRlZFxuIik7CkBAIC03MTQsMTggKzcwNywxNCBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAoIWVycikKIAkJaXNhX3JlZ2lzdGVyZWQgPSAxOwotI2lmZGVmIENTNDIzMgotCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKKwllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfcG5wX2RyaXZlcik7CiAJaWYgKCFlcnIpCiAJCXBucF9yZWdpc3RlcmVkID0gMTsKLSNlbmRpZgogCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY3M0MjN4X3BucGNfZHJpdmVyKTsKIAlpZiAoIWVycikKIAkJcG5wY19yZWdpc3RlcmVkID0gMTsKLSNpZmRlZiBDUzQyMzIKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCiAJCWVyciA9IDA7Ci0jZW5kaWYKIAlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAJCWVyciA9IDA7CiAjZW5kaWYKQEAgLTczNywxMCArNzI2LDggQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJaWYgKHBucGNfcmVnaXN0ZXJlZCkKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmNzNDIzeF9wbnBjX2RyaXZlcik7Ci0jaWZkZWYgQ1M0MjMyCiAJaWYgKHBucF9yZWdpc3RlcmVkKQotCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKLSNlbmRpZgorCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9wbnBfZHJpdmVyKTsKIAlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAjZW5kaWYKIAkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfaXNhX2RyaXZlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCmluZGV4IDZhODVmZGMuLjM4ODM1ZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCkBAIC04OCwxMCArODgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAKLU1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJvdXRpbmVzIGZvciBjb250cm9sIG9mIENTNDIzNS80MjM2Qi80MjM3Qi80MjM4Qi80MjM5IGNoaXBzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KIC8qCiAgKgogICovCkBAIC0yODYsNyArMjgyLDggQEAKIAlpZiAoaGFyZHdhcmUgPT0gV1NTX0hXX0RFVEVDVCkKIAkJaGFyZHdhcmUgPSBXU1NfSFdfREVURUNUMzsKIAlpZiAoY3BvcnQgPCAweDEwMCkgewotCQlzbmRfcHJpbnRrKCJwbGVhc2UsIHNwZWNpZnkgY29udHJvbCBwb3J0IGZvciBDUzQyMzYrIGNoaXBzXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGxlYXNlLCBzcGVjaWZ5IGNvbnRyb2wgcG9ydCAiCisJCQkgICAiZm9yIENTNDIzNisgY2hpcHNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZXJyID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydCwgY3BvcnQsCkBAIC0yOTUsNyArMjkyLDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykpIHsKLQkgICAgICAgIHNuZF9wcmludGsoIkNTNDIzNis6IE1PREUzIGFuZCBleHRlbmRlZCByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSwgaGFyZHdhcmU9MHgleFxuIixjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNTNDIzNis6IE1PREUzIGFuZCBleHRlbmRlZCByZWdpc3RlcnMgIgorCQkJICAgIm5vdCBhdmFpbGFibGUsIGhhcmR3YXJlPTB4JXhcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNoaXApOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zMDMsMTYgKzMwMSwxOSBAQAogCXsKIAkJaW50IGlkeDsKIAkJZm9yIChpZHggPSAwOyBpZHggPCA4OyBpZHgrKykKLQkJCXNuZF9wcmludGsoIkNEJWkgPSAweCV4XG4iLCBpZHgsIGluYihjaGlwLT5jcG9ydCArIGlkeCkpOworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJDRCVpID0gMHgleFxuIiwKKwkJCQkgICBpZHgsIGluYihjaGlwLT5jcG9ydCArIGlkeCkpOwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDk7IGlkeCsrKQotCQkJc25kX3ByaW50aygiQyVpID0gMHgleFxuIiwgaWR4LCBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgaWR4KSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkMlaSA9IDB4JXhcbiIsCisJCQkJICAgaWR4LCBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgaWR4KSk7CiAJfQogI2VuZGlmCiAJdmVyMSA9IHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAxKTsKIAl2ZXIyID0gc25kX2NzNDIzNl9leHRfaW4oY2hpcCwgQ1M0MjM2X1ZFUlNJT04pOwogCXNuZF9wcmludGRkKCJDUzQyMzY6IFsweCVseF0gQzEgKHZlcnNpb24pID0gMHgleCwgZXh0ID0gMHgleFxuIiwgY3BvcnQsIHZlcjEsIHZlcjIpOwogCWlmICh2ZXIxICE9IHZlcjIpIHsKLQkJc25kX3ByaW50aygiQ1M0MjM2KyBjaGlwIGRldGVjdGVkLCBidXQgY29udHJvbCBwb3J0IDB4JWx4IGlzIG5vdCB2YWxpZFxuIiwgY3BvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzYrIGNoaXAgZGV0ZWN0ZWQsIGJ1dCAiCisJCQkgICAiY29udHJvbCBwb3J0IDB4JWx4IGlzIG5vdCB2YWxpZFxuIiwgY3BvcnQpOwogCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY2hpcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTg4Myw3ICs4ODQsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdICYgMHgwMiA/IDEgOiAwOwogI2lmIDAKLQlwcmludGsoImdldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsIEM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImdldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsICIKKwkgICAgICAgIkM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCiAJCQlzbmRfd3NzX2luKGNoaXAsIENTNDIzMV9BTFRfRkVBVFVSRV8xKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAzKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCA0KSwKQEAgLTkyMCw3ICs5MjIsOCBAQAogCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIAogI2lmIDAKLQlwcmludGsoInNldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsIEM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgInNldCB2YWxpZDogQUxUID0gMHgleCwgQzMgPSAweCV4LCBDNCA9IDB4JXgsICIKKwkgICAgICAgIkM1ID0gMHgleCwgQzYgPSAweCV4LCBDOCA9IDB4JXhcbiIsCiAJCQlzbmRfd3NzX2luKGNoaXAsIENTNDIzMV9BTFRfRkVBVFVSRV8xKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCAzKSwKIAkJCXNuZF9jczQyMzZfY3RybF9pbihjaGlwLCA0KSwKQEAgLTEwMTUsMjMgKzEwMTgsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X2NyZWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfcGNtKTsKLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9taXhlcik7Ci0KLS8qCi0gKiAgSU5JVCBwYXJ0Ci0gKi8KLQotc3RhdGljIGludCBfX2luaXQgYWxzYV9jczQyMzZfaW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jczQyMzZfZXhpdCh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChhbHNhX2NzNDIzNl9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jczQyMzZfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwppbmRleCBhMDI0MmMzLi44MGY1YjFhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIGIvc291bmQvaXNhL2R0MDE5eC5jCkBAIC0xNTAsOSArMTUwLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2R0MDE5eCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IGI0NjM3NzEuLjQ0MmIwODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtNDksNiArNDksNyBAQAogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRTsJLyogRW5hYmxlIHRoaXMgY2FyZCAqLwogc3RhdGljIGxvbmcgcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIDB4MjIwLDB4MjQwLDB4MjYwICovCitzdGF0aWMgbG9uZyBmbV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogVXN1YWxseSAweDM4OCAqLwogc3RhdGljIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAtMX07CiBzdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogNSw3LDksMTAgKi8KIHN0YXRpYyBpbnQgbXB1X2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogNSw3LDksMTAgKi8KQEAgLTY1LDYgKzY2LDggQEAKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1wdV9wb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGZtX3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbV9wb3J0LCAiRk0gcG9ydCAjIGZvciBFUzE2ODggZHJpdmVyLiIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfaXJxLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtcHVfaXJxLCAiTVBVLTQwMSBJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKQEAgLTEyMiw5ICsxMjUsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNuZF9lczE2ODhfbGVnYWN5X2NyZWF0ZShjYXJkLCBkZXYsIG4sICZjaGlwKTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTQzLDEzICsxNDYsMTkgQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwgcGNtLT5uYW1lLAogCQljaGlwLT5wb3J0LCBjaGlwLT5pcnEsIGNoaXAtPmRtYTgpOwogCi0JaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMiwKLQkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKLQkJZGV2X3dhcm4oZGV2LCAib3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGNoaXAtPnBvcnQpOwotCWVsc2UgewotCQllcnJvciA9CXNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OworCWlmIChmbV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKKwkJZm1fcG9ydFtuXSA9IHBvcnRbbl07CS8qIHNoYXJlIHRoZSBzYW1lIHBvcnQgKi8KKworCWlmIChmbV9wb3J0W25dID4gMCkgeworCQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGZtX3BvcnRbbl0sIGZtX3BvcnRbbl0gKyAyLAorCQkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKKwkJCWRldl93YXJuKGRldiwKKwkJCQkgIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBmbV9wb3J0W25dKTsKKwkJZWxzZSB7CisJCQllcnJvciA9CXNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnJvciA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlpZiAobXB1X2lycVtuXSA+PSAwICYmIG1wdV9pcnFbbl0gIT0gU05EUlZfQVVUT19JUlEgJiYKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKaW5kZXggNGZiYjUwOC4uNGM2ZTE0ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCXByaW50aygic25kX2VzMTY4OF9kc3BfY29tbWFuZDogdGltZW91dCAoMHgleClcbiIsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInNuZF9lczE2ODhfZHNwX2NvbW1hbmQ6IHRpbWVvdXQgKDB4JXgpXG4iLCB2YWwpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjcsMTMgKzE2NywxNiBAQAogCWh3ID0gRVMxNjg4X0hXX0FVVE87CiAJc3dpdGNoIChjaGlwLT52ZXJzaW9uICYgMHhmZmYwKSB7CiAJY2FzZSAweDQ4ODA6Ci0JCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBBdWRpb0RyaXZlIEVTNDg4IGRldGVjdGVkLCBidXQgZHJpdmVyIGlzIGluIGFub3RoZXIgcGxhY2VcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogQXVkaW9Ecml2ZSBFUzQ4OCBkZXRlY3RlZCwgIgorCQkJICAgImJ1dCBkcml2ZXIgaXMgaW4gYW5vdGhlciBwbGFjZVxuIiwgY2hpcC0+cG9ydCk7CiAJCXJldHVybiAtRU5PREVWOwogCWNhc2UgMHg2ODgwOgogCQlodyA9IChjaGlwLT52ZXJzaW9uICYgMHgwZikgPj0gOCA/IEVTMTY4OF9IV18xNjg4IDogRVMxNjg4X0hXXzY4ODsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IHVua25vd24gQXVkaW9Ecml2ZSBjaGlwIHdpdGggdmVyc2lvbiAweCV4IChKYXp6MTYgc291bmRjYXJkPylcbiIsIGNoaXAtPnBvcnQsIGNoaXAtPnZlcnNpb24pOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogdW5rbm93biBBdWRpb0RyaXZlIGNoaXAgIgorCQkJICAgIndpdGggdmVyc2lvbiAweCV4IChKYXp6MTYgc291bmRjYXJkPylcbiIsCisJCQkgICBjaGlwLT5wb3J0LCBjaGlwLT52ZXJzaW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yMjMsNyArMjI2LDcgQEAKIAkJfQogCX0KICNpZiAwCi0Jc25kX3ByaW50aygibXB1IGNmZyA9IDB4JXhcbiIsIGNmZyk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtcHUgY2ZnID0gMHgleFxuIiwgY2ZnKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9lczE2ODhfbWl4ZXJfd3JpdGUoY2hpcCwgMHg0MCwgY2ZnKTsKQEAgLTIzNyw3ICsyNDAsOSBAQAogCQljZmcgPSAweGYwOwkvKiBlbmFibGUgb25seSBETUEgY291bnRlciBpbnRlcnJ1cHQgKi8KIAkJaXJxX2JpdHMgPSBpcnFzW2NoaXAtPmlycSAmIDB4MGZdOwogCQlpZiAoaXJxX2JpdHMgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogYmFkIElSUSAlZCBmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgY2hpcC0+aXJxKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBiYWQgSVJRICVkICIKKwkJCQkgICAiZm9yIEVTMTY4OCBjaGlwISFcbiIsCisJCQkJICAgY2hpcC0+cG9ydCwgY2hpcC0+aXJxKTsKICNpZiAwCiAJCQlpcnFfYml0cyA9IDA7CiAJCQljZmcgPSAweDEwOwpAQCAtMjUwLDcgKzI1NSw4IEBACiAJCWNmZyA9IDB4ZjA7CS8qIGV4dGVuZGVkIG1vZGUgRE1BIGVuYWJsZSAqLwogCQlkbWEgPSBjaGlwLT5kbWE4OwogCQlpZiAoZG1hID4gMyB8fCBkbWEgPT0gMikgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IGJhZCBETUEgY2hhbm5lbCAlZCBmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgZG1hKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBiYWQgRE1BIGNoYW5uZWwgJWQgIgorCQkJCSAgICJmb3IgRVMxNjg4IGNoaXAhIVxuIiwgY2hpcC0+cG9ydCwgZG1hKTsKICNpZiAwCiAJCQlkbWFfYml0cyA9IDA7CiAJCQljZmcgPSAweDAwOwkvKiBkaXNhYmxlIGFsbCBETUEgKi8KQEAgLTM0MSw4ICszNDcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsJLyogc29tZXRoaW5nIGlzIHdyb25nICovCiAJfQogI2lmIDAKLQlwcmludGsoInRyaWdnZXI6IHZhbCA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgdmFsLCB2YWx1ZSk7Ci0JcHJpbnRrKCJ0cmlnZ2VyOiBwb2ludGVyID0gMHgleFxuIiwgc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmRtYV9zaXplKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXI6IHZhbCA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgdmFsLCB2YWx1ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXI6IHBvaW50ZXIgPSAweCV4XG4iLAorCSAgICAgICBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+ZG1hX3NpemUpKTsKICNlbmRpZgogCXNuZF9lczE2ODhfd3JpdGUoY2hpcCwgMHhiOCwgKHZhbCAmIDB4ZjApIHwgdmFsdWUpOwogCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggOTA0OThlNC4uOGNmYmZmNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtMjEyNSwxMCArMjEyNSwxMCBAQAogI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9lczE4eHhfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2VzMTh4eF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKLQlyZXR1cm4gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1ZGlvZHJpdmUpKTsKKwlyZXR1cm4gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1ZGlvZHJpdmUpLCBjYXJkcCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9hdWRpb2RyaXZlX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTIxOTcsOSArMjE5Nyw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOwogCWlmICgoZXJyID0gc25kX2F1ZGlvZHJpdmVfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC0yMzAzLDkgKzIzMDMsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2F1ZGlvZHJpdmVfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC0yMzYyLDkgKzIzNjIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCiAJaWYgKChyZXMgPSBzbmRfYXVkaW9kcml2ZV9wbnBjKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCmluZGV4IGY0NWY2MTEuLjM2YzI3YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jCkBAIC00NSw3ICs0NSw4IEBACiAJdW5zaWduZWQgY2hhciBkbWFfY21kOwogCXVuc2lnbmVkIGludCBhZGRyZXNzX2hpZ2g7CiAKLQkvLyBzbmRfcHJpbnRrKCJkbWFfdHJhbnNmZXI6IGFkZHI9MHgleCwgYnVmPTB4JWx4LCBjb3VudD0weCV4XG4iLCBhZGRyLCAobG9uZykgYnVmLCBjb3VudCk7CisJc25kX3ByaW50ZGQoImRtYV90cmFuc2ZlcjogYWRkcj0weCV4LCBidWY9MHglbHgsIGNvdW50PTB4JXhcbiIsCisJCSAgICBhZGRyLCBidWZfYWRkciwgY291bnQpOwogCiAJaWYgKGd1cy0+Z2YxLmRtYTEgPiAzKSB7CiAJCWlmIChndXMtPmdmMS5lbmhfbW9kZSkgewpAQCAtNzcsNyArNzgsOCBAQAogCXNuZF9nZjFfZG1hX2FjayhndXMpOwogCXNuZF9kbWFfcHJvZ3JhbShndXMtPmdmMS5kbWExLCBidWZfYWRkciwgY291bnQsIGRtYV9jbWQgJiBTTkRSVl9HRjFfRE1BX1JFQUQgPyBETUFfTU9ERV9SRUFEIDogRE1BX01PREVfV1JJVEUpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJhZGRyZXNzID0gMHgleCwgY291bnQgPSAweCV4LCBkbWFfY21kID0gMHgleFxuIiwgYWRkcmVzcyA8PCAxLCBjb3VudCwgZG1hX2NtZCk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJhZGRyZXNzID0gMHgleCwgY291bnQgPSAweCV4LCBkbWFfY21kID0gMHgleFxuIiwKKwkJICAgYWRkcmVzcyA8PCAxLCBjb3VudCwgZG1hX2NtZCk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmIChndXMtPmdmMS5lbmhfbW9kZSkgewpAQCAtMTQyLDcgKzE0NCw5IEBACiAJc25kX2dmMV9kbWFfcHJvZ3JhbShndXMsIGJsb2NrLT5hZGRyLCBibG9jay0+YnVmX2FkZHIsIGJsb2NrLT5jb3VudCwgKHVuc2lnbmVkIHNob3J0KSBibG9jay0+Y21kKTsKIAlrZnJlZShibG9jayk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWEgKElSUSkgLSBhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwgYWRkciwgKGxvbmcpIGJ1ZmZlciwgY291bnQsIGNtZCk7CisJc25kX3ByaW50ZChLRVJOX0RFQlVHICJwcm9ncmFtIGRtYSAoSVJRKSAtICIKKwkJICAgImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLAorCQkgICBibG9jay0+YWRkciwgYmxvY2stPmJ1Zl9hZGRyLCBibG9jay0+Y291bnQsIGJsb2NrLT5jbWQpOwogI2VuZGlmCiB9CiAKQEAgLTIwMywxMyArMjA3LDE2IEBACiAJfQogCSpibG9jayA9ICpfX2Jsb2NrOwogCWJsb2NrLT5uZXh0ID0gTlVMTDsKLSNpZiAwCi0JcHJpbnRrKCJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwgYmxvY2stPmFkZHIsIChsb25nKSBibG9jay0+YnVmZmVyLCBibG9jay0+Y291bnQsIGJsb2NrLT5jbWQpOwotI2VuZGlmCi0jaWYgMAotCXByaW50aygiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPSAweCVseFxuIiwgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QpOwotCXByaW50aygiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtID0gMHglbHhcbiIsIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbSk7Ci0jZW5kaWYKKworCXNuZF9wcmludGRkKCJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwKKwkJICAgIGJsb2NrLT5hZGRyLCAobG9uZykgYmxvY2stPmJ1ZmZlciwgYmxvY2stPmNvdW50LAorCQkgICAgYmxvY2stPmNtZCk7CisKKwlzbmRfcHJpbnRkZCgiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPSAweCVseFxuIiwKKwkJICAgIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0KTsKKwlzbmRfcHJpbnRkZCgiZ3VzLT5nZjEuZG1hX2RhdGFfcGNtID0gMHglbHhcbiIsCisJCSAgICAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY20pOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+ZG1hX2xvY2ssIGZsYWdzKTsKIAlpZiAoc3ludGgpIHsKIAkJaWYgKGd1cy0+Z2YxLmRtYV9kYXRhX3N5bnRoX2xhc3QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jIGIvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKaW5kZXggMDQxODk0ZC4uMjA1NWFmZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlpZiAoc3RhdHVzID09IDApCiAJCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogCWhhbmRsZWQgPSAxOwotCS8vIHNuZF9wcmludGsoIklSUTogc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgIklSUTogc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsgKi8KIAlpZiAoc3RhdHVzICYgMHgwMikgewogCQlTVEFUX0FERChndXMtPmdmMS5pbnRlcnJ1cHRfc3RhdF9taWRpX2luKTsKIAkJaWYgKGd1cy0+Z2YxLmludGVycnVwdF9oYW5kbGVyX21pZGlfaW4pCkBAIC02NSw3ICs2NSw5IEBACiAJCQkJY29udGludWU7CS8qIG11bHRpIHJlcXVlc3QgKi8KIAkJCWFscmVhZHkgfD0gX2N1cnJlbnRfOwkvKiBtYXJrIHJlcXVlc3QgKi8KICNpZiAwCi0JCQlwcmludGsoInZvaWNlID0gJWksIHZvaWNlX3N0YXR1cyA9IDB4JXgsIHZvaWNlX3ZlcmlmeSA9ICVpXG4iLCB2b2ljZSwgdm9pY2Vfc3RhdHVzLCBpbmIoR1VTUChndXMsIEdGMVBBR0UpKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidm9pY2UgPSAlaSwgdm9pY2Vfc3RhdHVzID0gMHgleCwgIgorCQkJICAgICAgICJ2b2ljZV92ZXJpZnkgPSAlaVxuIiwKKwkJCSAgICAgICB2b2ljZSwgdm9pY2Vfc3RhdHVzLCBpbmIoR1VTUChndXMsIEdGMVBBR0UpKSk7CiAjZW5kaWYKIAkJCXB2b2ljZSA9ICZndXMtPmdmMS52b2ljZXNbdm9pY2VdOyAKIAkJCWlmIChwdm9pY2UtPnVzZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwppbmRleCAzODUxMGFlLi5lZGIxMWVlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwpAQCAtODIsNyArODIsMTAgQEAKIAogCWNvdW50ICs9IG9mZnNldCAmIDMxOwogCW9mZnNldCAmPSB+MzE7Ci0JLy8gc25kX3ByaW50aygiYmxvY2sgY2hhbmdlIC0gb2Zmc2V0ID0gMHgleCwgY291bnQgPSAweCV4XG4iLCBvZmZzZXQsIGNvdW50KTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmxvY2sgY2hhbmdlIC0gb2Zmc2V0ID0gMHgleCwgY291bnQgPSAweCV4XG4iLAorCQkgICBvZmZzZXQsIGNvdW50KTsKKwkqLwogCW1lbXNldCgmYmxvY2ssIDAsIHNpemVvZihibG9jaykpOwogCWJsb2NrLmNtZCA9IFNORFJWX0dGMV9ETUFfSVJROwogCWlmIChzbmRfcGNtX2Zvcm1hdF91bnNpZ25lZChydW50aW1lLT5mb3JtYXQpKQpAQCAtMTM1LDcgKzEzOCwxMSBAQAogCQljdXJyID0gYmVnaW4gKyAocGNtcC0+YnBvcyAqIHBjbXAtPmJsb2NrX3NpemUpIC8gcnVudGltZS0+Y2hhbm5lbHM7CiAJCWVuZCA9IGN1cnIgKyAocGNtcC0+YmxvY2tfc2l6ZSAvIHJ1bnRpbWUtPmNoYW5uZWxzKTsKIAkJZW5kIC09IHNuZF9wY21fZm9ybWF0X3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCkgPT0gMTYgPyAyIDogMTsKLQkJLy8gc25kX3ByaW50aygiaW5pdDogY3Vycj0weCV4LCBiZWdpbj0weCV4LCBlbmQ9MHgleCwgY3RybD0weCV4LCByYW1wPTB4JXgsIHJhdGU9MHgleFxuIiwgY3VyciwgYmVnaW4sIGVuZCwgdm9pY2VfY3RybCwgcmFtcF9jdHJsLCByYXRlKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiBjdXJyPTB4JXgsIGJlZ2luPTB4JXgsIGVuZD0weCV4LCAiCisJCQkgICAiY3RybD0weCV4LCByYW1wPTB4JXgsIHJhdGU9MHgleFxuIiwKKwkJCSAgIGN1cnIsIGJlZ2luLCBlbmQsIHZvaWNlX2N0cmwsIHJhbXBfY3RybCwgcmF0ZSk7CisJCSovCiAJCXBhbiA9IHJ1bnRpbWUtPmNoYW5uZWxzID09IDIgPyAoIXZvaWNlID8gMSA6IDE0KSA6IDg7CiAJCXZvbCA9ICF2b2ljZSA/IGd1cy0+Z2YxLnBjbV92b2x1bWVfbGV2ZWxfbGVmdCA6IGd1cy0+Z2YxLnBjbV92b2x1bWVfbGV2ZWxfcmlnaHQ7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0yMDUsOSArMjEyLDExIEBACiAJcmFtcF9jdHJsID0gKHNuZF9nZjFfcmVhZDgoZ3VzLCBTTkRSVl9HRjFfVkJfVk9MVU1FX0NPTlRST0wpICYgfjB4YTQpIHwgMHgwMzsKICNpZiAwCiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwdm9pY2UtPm51bWJlcik7Ci0JcHJpbnRrKCJwb3NpdGlvbiA9IDB4JXhcbiIsIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwb3NpdGlvbiA9IDB4JXhcbiIsCisJICAgICAgIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOwogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcGNtcC0+cHZvaWNlc1sxXS0+bnVtYmVyKTsKLQlwcmludGsoInBvc2l0aW9uID0gMHgleFxuIiwgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBvc2l0aW9uID0gMHgleFxuIiwKKwkgICAgICAgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwdm9pY2UtPm51bWJlcik7CiAjZW5kaWYKIAlwY21wLT5icG9zKys7CkBAIC0yOTksNyArMzA4LDExIEBACiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLy8gcHJpbnRrKCJwb2tlIGJsb2NrOyBidWYgPSAweCV4LCBwb3MgPSAlaSwgY291bnQgPSAlaSwgcG9ydCA9IDB4JXhcbiIsIChpbnQpYnVmLCBwb3MsIGNvdW50LCBndXMtPmdmMS5wb3J0KTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwb2tlIGJsb2NrOyBidWYgPSAweCV4LCBwb3MgPSAlaSwgY291bnQgPSAlaSwgcG9ydCA9IDB4JXhcbiIsCisJICAgICAgIChpbnQpYnVmLCBwb3MsIGNvdW50LCBndXMtPmdmMS5wb3J0KTsKKwkqLwogCXdoaWxlIChjb3VudCA+IDApIHsKIAkJbGVuID0gY291bnQ7CiAJCWlmIChsZW4gPiA1MTIpCQkvKiBsaW1pdCwgdG8gYWxsb3cgSVJRICovCkBAIC02ODAsNyArNjkzLDggQEAKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfZ2YxX3BjbV9wbGF5YmFja19mcmVlOwogCiAjaWYgMAotCXByaW50aygicGxheWJhY2suYnVmZmVyID0gMHglbHgsIGdmMS5wY21fYnVmZmVyID0gMHglbHhcbiIsIChsb25nKSBwY20tPnBsYXliYWNrLmJ1ZmZlciwgKGxvbmcpIGd1cy0+Z2YxLnBjbV9idWZmZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJwbGF5YmFjay5idWZmZXIgPSAweCVseCwgZ2YxLnBjbV9idWZmZXIgPSAweCVseFxuIiwKKwkgICAgICAgKGxvbmcpIHBjbS0+cGxheWJhY2suYnVmZmVyLCAobG9uZykgZ3VzLT5nZjEucGNtX2J1ZmZlcik7CiAjZW5kaWYKIAlpZiAoKGVyciA9IHNuZF9nZjFfZG1hX2luaXQoZ3VzKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jIGIvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCmluZGV4IGYwYWYzZjcuLjIxY2M0MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKQEAgLTEyOSw4ICsxMjksMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3VzLT51YXJ0X2NtZF9sb2NrLCBmbGFncyk7CiAjaWYgMAotCXNuZF9wcmludGsoInJlYWQgaW5pdCAtIGVuYWJsZSA9ICVpLCBjbWQgPSAweCV4LCBzdGF0ID0gMHgleFxuIiwgZ3VzLT51YXJ0X2VuYWJsZSwgZ3VzLT5nZjEudWFydF9jbWQsIHNuZF9nZjFfdWFydF9zdGF0KGd1cykpOwotCXNuZF9wcmludGsoIlsweCV4XSByZWcgKGN0cmwvc3RhdHVzKSA9IDB4JXgsIHJlZyAoZGF0YSkgPSAweCV4IChwYWdlID0gMHgleClcbiIsIGd1cy0+Z2YxLnBvcnQgKyAweDEwMCwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMCksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDEpLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAyKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJyZWFkIGluaXQgLSBlbmFibGUgPSAlaSwgY21kID0gMHgleCwgc3RhdCA9IDB4JXhcbiIsCisJCSAgIGd1cy0+dWFydF9lbmFibGUsIGd1cy0+Z2YxLnVhcnRfY21kLCBzbmRfZ2YxX3VhcnRfc3RhdChndXMpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgIlsweCV4XSByZWcgKGN0cmwvc3RhdHVzKSA9IDB4JXgsIHJlZyAoZGF0YSkgPSAweCV4ICIKKwkJICAgIihwYWdlID0gMHgleClcbiIsCisJCSAgIGd1cy0+Z2YxLnBvcnQgKyAweDEwMCwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMCksCisJCSAgIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDEpLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAyKSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggNDI2NTMyYS4uMDg2YjhmMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTE0OCw5ICsxNDgsOSBAQAogCXN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1czsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWlmIChwY21fY2hhbm5lbHNbbl0gPCAyKQogCQlwY21fY2hhbm5lbHNbbl0gPSAyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCA3YWQ0YzNiLi4xODBhOGRlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMjQxLDkgKzI0MSw5IEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKG1wdV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKIAkJbXB1X3BvcnRbbl0gPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNtYXguYyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKaW5kZXggZjk0YzE5Ny4uZjI2ZWFjOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNtYXguYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCkBAIC0yMTQsMTAgKzIxNCwxMCBAQAogCXN0cnVjdCBzbmRfd3NzICp3c3M7CiAJc3RydWN0IHNuZF9ndXNtYXggKm1heGNhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfZ3VzbWF4X2ZyZWU7CiAJbWF4Y2FyZCA9IChzdHJ1Y3Qgc25kX2d1c21heCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAltYXhjYXJkLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCmluZGV4IDVmYWVjZmIuLjUzNGE2ZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKKysrIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gYnVzLT5wcml2YXRlX3ZhbHVlOwogCiAjaWYgMAotCXByaW50aygiaTJjX3NldGxpbmVzIC0gMHglbHggPC0gJWksJWlcbiIsIHBvcnQsIGN0cmwsIGRhdGEpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfc2V0bGluZXMgLSAweCVseCA8LSAlaSwlaVxuIiwgcG9ydCwgY3RybCwgZGF0YSk7CiAjZW5kaWYKIAlvdXRiKChkYXRhIDw8IDEpIHwgY3RybCwgcG9ydCk7CiAJdWRlbGF5KDEwKTsKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAJcmVzID0gaW5iKHBvcnQpICYgMTsKICNpZiAwCi0JcHJpbnRrKCJpMmNfZ2V0Y2xvY2tsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19nZXRjbG9ja2xpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKICNlbmRpZgogCXJldHVybiByZXM7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJdWRlbGF5KDEwKTsKIAlyZXMgPSAoaW5iKHBvcnQpICYgMikgPj4gMTsKICNpZiAwCi0JcHJpbnRrKCJpMmNfZ2V0ZGF0YWxpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX2dldGRhdGFsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQpAQCAtMzQyLDcgKzM0Miw4IEBACiAJCQlzbmRfZ2YxX3Bva2UoZ3VzLCBsb2NhbCwgZCk7CiAJCQlzbmRfZ2YxX3Bva2UoZ3VzLCBsb2NhbCArIDEsIGQgKyAxKTsKICNpZiAwCi0JCQlwcmludGsoImQgPSAweCV4LCBsb2NhbCA9IDB4JXgsIGxvY2FsICsgMSA9IDB4JXgsIGlkeCA8PCAyMiA9IDB4JXhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZCA9IDB4JXgsIGxvY2FsID0gMHgleCwgIgorCQkJICAgICAgICJsb2NhbCArIDEgPSAweCV4LCBpZHggPDwgMjIgPSAweCV4XG4iLAogCQkJICAgICAgIGQsCiAJCQkgICAgICAgc25kX2dmMV9wZWVrKGd1cywgbG9jYWwpLAogCQkJICAgICAgIHNuZF9nZjFfcGVlayhndXMsIGxvY2FsICsgMSksCkBAIC0zNTYsNyArMzU3LDggQEAKIAkJfQogCX0KICNpZiAwCi0JcHJpbnRrKCJzaXplczogJWkgJWkgJWkgJWlcbiIsIHNpemVzWzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0sIHNpemVzWzNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic2l6ZXM6ICVpICVpICVpICVpXG4iLAorCSAgICAgICBzaXplc1swXSwgc2l6ZXNbMV0sIHNpemVzWzJdLCBzaXplc1szXSk7CiAjZW5kaWYKIH0KIApAQCAtNDEwLDEyICs0MTIsMTIgQEAKIAkJbG1jdCA9IChwc2l6ZXNbM10gPDwgMjQpIHwgKHBzaXplc1syXSA8PCAxNikgfAogCQkgICAgKHBzaXplc1sxXSA8PCA4KSB8IHBzaXplc1swXTsKICNpZiAwCi0JCXByaW50aygibG1jdCA9IDB4JTA4eFxuIiwgbG1jdCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJsbWN0ID0gMHglMDh4XG4iLCBsbWN0KTsKICNlbmRpZgogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsbWMpOyBpKyspCiAJCQlpZiAobG1jdCA9PSBsbWNbaV0pIHsKICNpZiAwCi0JCQkJcHJpbnRrKCJmb3VuZCAhISEgJWlcbiIsIGkpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJmb3VuZCAhISEgJWlcbiIsIGkpOwogI2VuZGlmCiAJCQkJc25kX2dmMV93cml0ZTE2KGd1cywgU05EUlZfR0YxX0dXX01FTU9SWV9DT05GSUcsIChzbmRfZ2YxX2xvb2sxNihndXMsIFNORFJWX0dGMV9HV19NRU1PUllfQ09ORklHKSAmIDB4ZmZmMCkgfCBpKTsKIAkJCQlzbmRfaW50ZXJ3YXZlX2Jhbmtfc2l6ZXMoZ3VzLCBwc2l6ZXMpOwpAQCAtNjI2LDIwICs2MjgsMjIgQEAKIAkJZnJlZV9pcnEoaXdjYXJkLT5pcnEsICh2b2lkICopaXdjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2ludGVyd2F2ZV9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2ludGVyd2F2ZSAqaXdjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2ludGVyd2F2ZSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2ludGVyd2F2ZSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpd2NhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaXdjYXJkLT5jYXJkID0gY2FyZDsKIAlpd2NhcmQtPmlycSA9IC0xOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9pbnRlcndhdmVfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZXJ3YXZlX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTc3OCw5ICs3ODIsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOwogCWlmICgoZXJyID0gc25kX2ludGVyd2F2ZV9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKQEAgLTg3Niw5ICs4ODAsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCQkJCQotCWNhcmQgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmICgocmVzID0gc25kX2ludGVyd2F2ZV9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlIGIvc291bmQvaXNhL21zbmQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3MWMwYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorCitzbmQtbXNuZC1saWItb2JqcyA6PSBtc25kLm8gbXNuZF9taWRpLm8gbXNuZF9waW5uYWNsZV9taXhlci5vCitzbmQtbXNuZC1waW5uYWNsZS1vYmpzIDo9IG1zbmRfcGlubmFjbGUubworc25kLW1zbmQtY2xhc3NpYy1vYmpzIDo9IG1zbmRfY2xhc3NpYy5vCisKKyMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKK29iai0kKENPTkZJR19TTkRfTVNORF9QSU5OQUNMRSkgKz0gc25kLW1zbmQtcGlubmFjbGUubyBzbmQtbXNuZC1saWIubworb2JqLSQoQ09ORklHX1NORF9NU05EX0NMQVNTSUMpICs9IHNuZC1tc25kLWNsYXNzaWMubyBzbmQtbXNuZC1saWIubworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NDU0NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmQuYwpAQCAtMCwwICsxLDcwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIDIwMDIvMDYvMzAgS2Fyc3RlbiBXaWVzZToKKyAqCXJlbW92ZWQga2VybmVsLXZlcnNpb24gZGVwZW5kZW5jaWVzLgorICoJcmlwcGVkIGZyb20gbGludXgga2VybmVsIDIuNC4xOCAoT1NTIEltcGxlbWVudGF0aW9uKSBieSBtZS4KKyAqCUluIHRoZSBPU1MgVmVyc2lvbiwgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHRvIGEgc2VwYXJhdGUgTU9EVUxFLAorICoJdGhhdCBpcyB1c2VkIGJ5IHRoZSBwaW5uYWNsZSBhbmQgdGhlIGNsYXNzaWMgZHJpdmVyLgorICoJc2luY2UgdGhlcmUgaXMgbm8gY2xhc3NpYyBkcml2ZXIgZm9yIGFsc2EgeWV0IChpIGRvbnQgaGF2ZSBhIGNsYXNzaWMKKyAqCSYgd3JpdGluZyBvbmUgYmxpbmRmb2xkIGlzIGRpZmZpY3VsdCkgdGhpcyBmaWxlJ3Mgb2JqZWN0IGlzIHN0YXRpY2FsbHkKKyAqCWxpbmtlZCBpbnRvIHRoZSBwaW5uYWNsZS1kcml2ZXItbW9kdWxlIGZvciBub3cuCWxvb2sgZm9yIHRoZSBzdHJpbmcKKyAqCQkidW5jb21tZW50IHRoaXMgdG8gbWFrZSB0aGlzIGEgbW9kdWxlIGFnYWluIgorICoJdG8gZG8gZ3Vlc3Mgd2hhdC4KKyAqCisgKiB0aGUgZm9sbG93aW5nIGlzIGEgY29weSBvZiB0aGUgMi40LjE4IE9TUyBGUkVFIGZpbGUtaGVhZGluZyBjb21tZW50OgorICoKKyAqIG1zbmQuYyAtIERyaXZlciBCYXNlCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAibXNuZC5oIgorCisjZGVmaW5lIExPR05BTUUJCQkibXNuZCIKKworCit2b2lkIHNuZF9tc25kX2luaXRfcXVldWUodm9pZCAqYmFzZSwgaW50IHN0YXJ0LCBpbnQgc2l6ZSkKK3sKKwl3cml0ZXcoUENUT0RTUF9CQVNFRChzdGFydCksIGJhc2UgKyBKUVNfd1N0YXJ0KTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoc2l6ZSkgLSAxLCBiYXNlICsgSlFTX3dTaXplKTsKKwl3cml0ZXcoMCwgYmFzZSArIEpRU193SGVhZCk7CisJd3JpdGV3KDAsIGJhc2UgKyBKUVNfd1RhaWwpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9pbml0X3F1ZXVlKTsKKworc3RhdGljIGludCBzbmRfbXNuZF93YWl0X1RYREUoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAodGltZW91dC0tID4gMCkKKwkJaWYgKGluYihpbyArIEhQX0lTUikgJiBIUElTUl9UWERFKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF93YWl0X0hDMChzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXdoaWxlICh0aW1lb3V0LS0gPiAwKQorCQlpZiAoIShpbmIoaW8gKyBIUF9DVlIpICYgSFBDVlJfSEMpKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgdTggY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfSEMwKGRldikgPT0gMCkgeworCQlvdXRiKGNtZCwgZGV2LT5pbyArIEhQX0NWUik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogU2VuZCBEU1AgY29tbWFuZCB0aW1lb3V0XG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9zZW5kX2RzcF9jbWQpOworCitpbnQgc25kX21zbmRfc2VuZF93b3JkKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCB1bnNpZ25lZCBjaGFyIGhpZ2gsCisJCSAgIHVuc2lnbmVkIGNoYXIgbWlkLCB1bnNpZ25lZCBjaGFyIGxvdykKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihoaWdoLCBpbyArIEhQX1RYSCk7CisJCW91dGIobWlkLCBpbyArIEhQX1RYTSk7CisJCW91dGIobG93LCBpbyArIEhQX1RYTCk7CisJCXJldHVybiAwOworCX0KKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBTZW5kIGhvc3Qgd29yZCB0aW1lb3V0XG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9zZW5kX3dvcmQpOworCitpbnQgc25kX21zbmRfdXBsb2FkX2hvc3Qoc3RydWN0IHNuZF9tc25kICpkZXYsIGNvbnN0IHU4ICpiaW4sIGludCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAobGVuICUgMyAhPSAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJICAgIjogVXBsb2FkIGhvc3QgZGF0YSBub3QgbXVsdGlwbGUgb2YgMyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCBiaW5baV0sIGJpbltpICsgMV0sIGJpbltpICsgMl0pKQorCQkJcmV0dXJuIC1FSU87CisKKwlpbmIoZGV2LT5pbyArIEhQX1JYTCk7CisJaW5iKGRldi0+aW8gKyBIUF9DVlIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3VwbG9hZF9ob3N0KTsKKworaW50IHNuZF9tc25kX2VuYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkZXYtPmlycV9yZWYrKykKKwkJcmV0dXJuIDA7CisKKwlzbmRfcHJpbnRkZChMT0dOQU1FICI6IEVuYWJsaW5nIElSUVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgfCBIUElDUl9UUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCW91dGIoZGV2LT5pcnFpZCwgZGV2LT5pbyArIEhQX0lSUU0pOworCisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpICYgfkhQSUNSX1RSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSB8IEhQSUNSX1JSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwkJc25kX21zbmRfaW5pdF9xdWV1ZShkZXYtPkRTUFEsIGRldi0+ZHNwcV9kYXRhX2J1ZmYsCisJCQkJICAgIGRldi0+ZHNwcV9idWZmX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IEVuYWJsZSBJUlEgZmFpbGVkXG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9lbmFibGVfaXJxKTsKKworaW50IHNuZF9tc25kX2Rpc2FibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoLS1kZXYtPmlycV9yZWYgPiAwKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmlycV9yZWYgPCAwKQorCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IElSUSByZWYgY291bnQgaXMgJWRcbiIsCisJCQkgICBkZXYtPmlycV9yZWYpOworCisJc25kX3ByaW50ZGQoTE9HTkFNRSAiOiBEaXNhYmxpbmcgSVJRXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSAmIH5IUElDUl9SUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCW91dGIoSFBJUlFfTk9ORSwgZGV2LT5pbyArIEhQX0lSUU0pOworCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRGlzYWJsZSBJUlEgZmFpbGVkXG4iKTsKKworCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9kaXNhYmxlX2lycSk7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfcGxheV9kZWxheV9qaWZmaWVzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgbG9uZyBzaXplKQoreworCWxvbmcgdG1wID0gKHNpemUgKiBIWiAqIGNoaXAtPnBsYXlfc2FtcGxlX3NpemUpIC8gODsKKwlyZXR1cm4gdG1wIC8gKGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgKiBjaGlwLT5wbGF5X2NoYW5uZWxzKTsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfZHNwX3dyaXRlX2ZsdXNoKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlpZiAoIShjaGlwLT5tb2RlICYgRk1PREVfV1JJVEUpIHx8ICF0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpCisJCXJldHVybjsKKwlzZXRfYml0KEZfV1JJVEVGTFVTSCwgJmNoaXAtPmZsYWdzKTsKKy8qCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgKKwkJJmNoaXAtPndyaXRlZmx1c2gsCisJCWdldF9wbGF5X2RlbGF5X2ppZmZpZXMoJmNoaXAsIGNoaXAtPkRBUEYubGVuKSk7Ki8KKwljbGVhcl9iaXQoRl9XUklURUZMVVNILCAmY2hpcC0+ZmxhZ3MpOworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgKKwkJCWdldF9wbGF5X2RlbGF5X2ppZmZpZXMoY2hpcCwgY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMpKTsKKwljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworfQorCit2b2lkIHNuZF9tc25kX2RzcF9oYWx0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKChmaWxlID8gZmlsZS0+Zl9tb2RlIDogY2hpcC0+bW9kZSkgJiBGTU9ERV9SRUFEKSB7CisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVE9QKTsKKwkJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJCWlmIChmaWxlKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyBMT0dOQU1FCisJCQkJICAgIjogU3RvcHBpbmcgcmVhZCBmb3IgJXBcbiIsIGZpbGUpOworCQkJY2hpcC0+bW9kZSAmPSB+Rk1PREVfUkVBRDsKKwkJfQorCQljbGVhcl9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCX0KKwlpZiAoKGZpbGUgPyBmaWxlLT5mX21vZGUgOiBjaGlwLT5tb2RlKSAmIEZNT0RFX1dSSVRFKSB7CisJCWlmICh0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpIHsKKwkJCXNuZF9tc25kX2RzcF93cml0ZV9mbHVzaChjaGlwKTsKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RPUCk7CisJCX0KKwkJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJCWlmIChmaWxlKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTworCQkJCSAgIExPR05BTUUgIjogU3RvcHBpbmcgd3JpdGUgZm9yICVwXG4iLCBmaWxlKTsKKwkJCWNoaXAtPm1vZGUgJj0gfkZNT0RFX1dSSVRFOworCQl9CisJCWNsZWFyX2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZHNwX2hhbHQpOworCisKK2ludCBzbmRfbXNuZF9EQVJRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IGJhbmspCit7CisJaW50IC8qc2l6ZSwgbiwqLyB0aW1lb3V0ID0gMzsKKwl1MTYgd1RtcDsKKwkvKiB2b2lkICpEQVFEOyAqLworCisJLyogSW5jcmVtZW50IHRoZSB0YWlsIGFuZCBjaGVjayBmb3IgcXVldWUgd3JhcCAqLworCXdUbXAgPSByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dUYWlsKSArIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKwlpZiAod1RtcCA+IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd1NpemUpKQorCQl3VG1wID0gMDsKKwl3aGlsZSAod1RtcCA9PSByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dIZWFkKSAmJiB0aW1lb3V0LS0pCisJCXVkZWxheSgxKTsKKworCWlmIChjaGlwLT5jYXB0dXJlUGVyaW9kcyA9PSAyKSB7CisJCXZvaWQgKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkYgKworCQkJICAgICBiYW5rICogREFRRFNfX3NpemUgKyBEQVFEU193U3RhcnQ7CisJCXVuc2lnbmVkIHNob3J0IG9mZnNldCA9IDB4MzAwMCArIGNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlczsKKworCQlpZiAocmVhZHcocERBUSkgIT0gUENUT0RTUF9CQVNFRCgweDMwMDApKQorCQkJb2Zmc2V0ID0gMHgzMDAwOworCQl3cml0ZXcoUENUT0RTUF9CQVNFRChvZmZzZXQpLCBwREFRKTsKKwl9CisKKwl3cml0ZXcod1RtcCwgY2hpcC0+REFSUSArIEpRU193VGFpbCk7CisKKyNpZiAwCisJLyogR2V0IG91ciBkaWdpdGFsIGF1ZGlvIHF1ZXVlIHN0cnVjdCAqLworCURBUUQgPSBiYW5rICogREFRRFNfX3NpemUgKyBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwkvKiBHZXQgbGVuZ3RoIG9mIGRhdGEgKi8KKwlzaXplID0gcmVhZHcoREFRRCArIERBUURTX3dTaXplKTsKKworCS8qIFJlYWQgZGF0YSBmcm9tIHRoZSBoZWFkICh1bnByb3RlY3RlZCBiYW5rIDEgYWNjZXNzIG9rYXkKKwkgICBzaW5jZSB0aGlzIGlzIG9ubHkgY2FsbGVkIGluc2lkZSBhbiBpbnRlcnJ1cHQpICovCisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW4gPSBtc25kX2ZpZm9fd3JpdGUoJmNoaXAtPkRBUkYsCisJCQkgICAgKGNoYXIgKikoY2hpcC0+YmFzZSArIGJhbmsgKiBEQVJfQlVGRl9TSVpFKSwKKwkJCSAgICBzaXplLCAwKTsKKwlpZiAobiA8PSAwKSB7CisJCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwkJcmV0dXJuIG47CisJfQorCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX0RBUlEpOworCitpbnQgc25kX21zbmRfREFQUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCkKK3sKKwl1MTYJREFQUV90YWlsOworCWludAlwcm90ZWN0ID0gc3RhcnQsIG5iYW5rcyA9IDA7CisJdm9pZAkqREFRRDsKKwlzdGF0aWMgaW50IHBsYXlfYmFua3Nfc3VibWl0dGVkOworCS8qIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsgbm90IG5lY2Vzc2FyeSAqLworCisJREFQUV90YWlsID0gcmVhZHcoY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisJd2hpbGUgKERBUFFfdGFpbCAhPSByZWFkdyhjaGlwLT5EQVBRICsgSlFTX3dIZWFkKSB8fCBzdGFydCkgeworCQlpbnQgYmFua19udW0gPSBEQVBRX3RhaWwgLyBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisKKwkJaWYgKHN0YXJ0KSB7CisJCQlzdGFydCA9IDA7CisJCQlwbGF5X2JhbmtzX3N1Ym1pdHRlZCA9IDA7CisJCX0KKworCQkvKiBHZXQgb3VyIGRpZ2l0YWwgYXVkaW8gcXVldWUgc3RydWN0ICovCisJCURBUUQgPSBiYW5rX251bSAqIERBUURTX19zaXplICsgY2hpcC0+bWFwcGVkYmFzZSArCisJCQlEQVBRX0RBVEFfQlVGRjsKKworCQkvKiBXcml0ZSBzaXplIG9mIHRoaXMgYmFuayAqLworCQl3cml0ZXcoY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMsIERBUUQgKyBEQVFEU193U2l6ZSk7CisJCWlmIChwbGF5X2JhbmtzX3N1Ym1pdHRlZCA8IDMpCisJCQkrK3BsYXlfYmFua3Nfc3VibWl0dGVkOworCQllbHNlIGlmIChjaGlwLT5wbGF5UGVyaW9kcyA9PSAyKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQgPSBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlczsKKworCQkJaWYgKHJlYWR3KERBUUQgKyBEQVFEU193U3RhcnQpICE9IFBDVE9EU1BfQkFTRUQoMHgwKSkKKwkJCQlvZmZzZXQgPSAwOworCisJCQl3cml0ZXcoUENUT0RTUF9CQVNFRChvZmZzZXQpLCBEQVFEICsgREFRRFNfd1N0YXJ0KTsKKwkJfQorCQkrK25iYW5rczsKKworCQkvKiBUaGVuIGFkdmFuY2UgdGhlIHRhaWwgKi8KKwkJLyoKKwkJaWYgKHByb3RlY3QpCisJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiQiAlWCAlbFhcbiIsCisJCQkJICAgYmFua19udW0sIHh0aW1lLnR2X3VzZWMpOworCQkqLworCisJCURBUFFfdGFpbCA9ICgrK2JhbmtfbnVtICUgMykgKiBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisJCXdyaXRldyhEQVBRX3RhaWwsIGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCQkvKiBUZWxsIHRoZSBEU1AgdG8gcGxheSB0aGUgYmFuayAqLworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUQVJUKTsKKwkJaWYgKHByb3RlY3QpCisJCQlpZiAoMiA9PSBiYW5rX251bSkKKwkJCQlicmVhazsKKwl9CisJLyoKKwlpZiAocHJvdGVjdCkKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVsWFxuIiwgeHRpbWUudHZfdXNlYyk7CisJKi8KKwkvKiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7IG5vdCBuZWNlc3NhcnkgKi8KKwlyZXR1cm4gbmJhbmtzOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9EQVBRKTsKKworc3RhdGljIHZvaWQgc25kX21zbmRfcGxheV9yZXNldF9xdWV1ZShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwY21fY291bnQpCit7CisJaW50CW47CisJdm9pZAkqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX0RBVEFfQlVGRjsKKworCWNoaXAtPmxhc3RfcGxheWJhbmsgPSAtMTsKKwljaGlwLT5wbGF5TGltaXQgPSBwY21fY291bnQgKiAocGNtX3BlcmlvZHMgLSAxKTsKKwljaGlwLT5wbGF5UGVyaW9kcyA9IHBjbV9wZXJpb2RzOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVBRICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisKKwljaGlwLT5wbGF5X3BlcmlvZF9ieXRlcyA9IHBjbV9jb3VudDsKKworCWZvciAobiA9IDA7IG4gPCBwY21fcGVyaW9kczsgKytuLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKCh1MzIpKHBjbV9jb3VudCAqIG4pKSwKKwkJCXBEQVEgKyBEQVFEU193U3RhcnQpOworCQl3cml0ZXcoMCwgcERBUSArIERBUURTX3dTaXplKTsKKwkJd3JpdGV3KDEsIHBEQVEgKyBEQVFEU193Rm9ybWF0KTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJCXdyaXRldyhISU1UX1BMQVlfRE9ORSAqIDB4MTAwICsgbiwgcERBUSArIERBUURTX3dJbnRNc2cpOworCQl3cml0ZXcobiwgcERBUSArIERBUURTX3dGbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIGludCBwY21fcGVyaW9kcywKKwkJCQkJIHVuc2lnbmVkIGludCBwY21fY291bnQpCit7CisJaW50CQluOworCXZvaWQJCSpwREFROworCS8qIHVuc2lnbmVkIGxvbmcJZmxhZ3M7ICovCisKKwkvKiBzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUlEsIERBUlFfREFUQV9CVUZGLCBEQVJRX0JVRkZfU0laRSk7ICovCisKKwljaGlwLT5sYXN0X3JlY2JhbmsgPSAyOworCWNoaXAtPmNhcHR1cmVMaW1pdCA9IHBjbV9jb3VudCAqIChwY21fcGVyaW9kcyAtIDEpOworCWNoaXAtPmNhcHR1cmVQZXJpb2RzID0gcGNtX3BlcmlvZHM7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUlEgKyBKUVNfd0hlYWQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVChjaGlwLT5sYXN0X3JlY2JhbmsgKiBEQVFEU19fc2l6ZSksCisJCWNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpOworCisjaWYgMCAvKiBDcml0aWNhbCBzZWN0aW9uOiBiYW5rIDEgYWNjZXNzLiB0aGlzIGlzIGhvdyB0aGUgT1NTIGRyaXZlciBkb2VzIGl0OiovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIERBUl9CVUZGX1NJWkUgKiAzKTsKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworI2VuZGlmCisKKwljaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXMgPSBwY21fY291bnQ7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoKSAlaVxuIiwgcGNtX2NvdW50KTsKKworCXBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwlmb3IgKG4gPSAwOyBuIDwgcGNtX3BlcmlvZHM7ICsrbiwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl1MzIgdG1wID0gcGNtX2NvdW50ICogbjsKKworCQl3cml0ZXcoUENUT0RTUF9CQVNFRCh0bXAgKyAweDMwMDApLCBwREFRICsgREFRRFNfd1N0YXJ0KTsKKwkJd3JpdGV3KHBjbV9jb3VudCwgcERBUSArIERBUURTX3dTaXplKTsKKwkJd3JpdGV3KDEsIHBEQVEgKyBEQVFEU193Rm9ybWF0KTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJCXdyaXRldyhISU1UX1JFQ09SRF9ET05FICogMHgxMDAgKyBuLCBwREFRICsgREFRRFNfd0ludE1zZyk7CisJCXdyaXRldyhuLCBwREFRICsgREFRRFNfd0ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXNuZF9wbGF5YmFjayA9IHsKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9CQk4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMHgzMDAwLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JMHg0MCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTB4MTgwMCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMywKKwkuZmlmb19zaXplID0JCTAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX21zbmRfY2FwdHVyZSA9IHsKKwkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9CQk4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JMHgzMDAwLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JMHg0MCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTB4MTgwMCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMywKKwkuZmlmb19zaXplID0JCTAsCit9OworCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNldF9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2VuYWJsZV9pcnEoY2hpcCk7CisKKwlydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPm1hcHBlZGJhc2U7CisJcnVudGltZS0+ZG1hX2J5dGVzID0gMHgzMDAwOworCisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX21zbmRfcGxheWJhY2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJY2xlYXJfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludAlpOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl2b2lkCSpwREFRID0JY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfREFUQV9CVUZGOworCisJY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJY2hpcC0+cGxheV9jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwl9CisJLyogZG9udCBkbyB0aGlzIGhlcmU6CisJICogc25kX21zbmRfY2FsaWJyYXRlX2FkYyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlKTsKKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMgPSBwY21fc2l6ZSAvIHBjbV9jb3VudDsKKworCXNuZF9tc25kX3BsYXlfcmVzZXRfcXVldWUoY2hpcCwgcGNtX3BlcmlvZHMsIHBjbV9jb3VudCk7CisJY2hpcC0+cGxheURNQVBvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludAlyZXN1bHQgPSAwOworCisJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgeworCQlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihTVEFSVClcbiIpOworCQljaGlwLT5iYW5rc1BsYXllZCA9IDA7CisJCXNldF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9EQVBRKGNoaXAsIDEpOworCX0gZWxzZSBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApIHsKKwkJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoU1RvcClcbiIpOworCQkvKiBpbnRlcnJ1cHQgZGlhZ25vc3RpYywgY29tbWVudCB0aGlzIG91dCBsYXRlciAqLworCQljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUT1ApOworCX0gZWxzZSB7CisJCXNuZF9wcmludGQoS0VSTl9FUlIgInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoPz8/Pz8pXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcigpIEVOREVcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX21zbmRfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgY2hpcC0+cGxheURNQVBvcyk7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXNuZF9wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPQkJc25kX21zbmRfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZF9wbGF5YmFja19jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX21zbmRfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5wcmVwYXJlID0Jc25kX21zbmRfcGxheWJhY2tfcHJlcGFyZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfbXNuZF9wbGF5YmFja19wb2ludGVyLAorfTsKKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzZXRfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9lbmFibGVfaXJxKGNoaXApOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+bWFwcGVkYmFzZSArIDB4MzAwMDsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSAweDMwMDA7CisJbWVtc2V0KHJ1bnRpbWUtPmRtYV9hcmVhLCAwLCBydW50aW1lLT5kbWFfYnl0ZXMpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX21zbmRfY2FwdHVyZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCWNsZWFyX2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX2NvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzID0gcGNtX3NpemUgLyBwY21fY291bnQ7CisKKwlzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKGNoaXAsIHBjbV9wZXJpb2RzLCBwY21fY291bnQpOworCWNoaXAtPmNhcHR1cmVETUFQb3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7CisJCWNoaXAtPmxhc3RfcmVjYmFuayA9IC0xOworCQlzZXRfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVEFSVCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJfSBlbHNlIGlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RPUCkgeworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RPUCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9tc25kX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgY2hpcC0+Y2FwdHVyZURNQVBvcyk7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50CQlpOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl2b2lkCQkqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWNoaXAtPmNhcHR1cmVfY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2ksIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX21zbmRfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPQkJc25kX21zbmRfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CXNuZF9tc25kX2NhcHR1cmVfaHdfcGFyYW1zLAorCS5wcmVwYXJlID0Jc25kX21zbmRfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX21zbmRfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX21zbmRfY2FwdHVyZV9wb2ludGVyLAorfTsKKworCitpbnQgc25kX21zbmRfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwKKwkJCXN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9wY20JKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcoY2FyZCwgIk1TTkRQSU5OQUNMRSIsIGRldmljZSwgMSwgMSwgJnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX21zbmRfcGxheWJhY2tfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfbXNuZF9jYXB0dXJlX29wcyk7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJc3RyY3B5KHBjbS0+bmFtZSwgIkh1cnJpY2FuZSIpOworCisKKwlpZiAocnBjbSkKKwkJKnJwY20gPSBwY207CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3BjbSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIHJvdXRpbmVzIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCBkcml2ZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmQuaCBiL3NvdW5kL2lzYS9tc25kL21zbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzczZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZC5oCkBAIC0wLDAgKzEsMzA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZC5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX0gKKyNkZWZpbmUgX19NU05EX0gKKworI2RlZmluZSBERUZTQU1QTEVSQVRFCQk0NDEwMAorI2RlZmluZSBERUZTQU1QTEVTSVpFCQlTTkRSVl9QQ01fRk9STUFUX1MxNgorI2RlZmluZSBERUZDSEFOTkVMUwkJMQorCisjZGVmaW5lIFNSQU1fQkFOS19TSVpFCQkweDgwMDAKKyNkZWZpbmUgU1JBTV9DTlRMX1NUQVJUCQkweDdGMDAKKyNkZWZpbmUgU01BX1NUUlVDVF9TVEFSVAkweDdGNDAKKworI2RlZmluZSBEU1BfQkFTRV9BRERSCQkweDQwMDAKKyNkZWZpbmUgRFNQX0JBTktfQkFTRQkJMHg0MDAwCisKKyNkZWZpbmUgQUdORAkJCTB4MDEKKyNkZWZpbmUgU0lHTkFMCQkJMHgwMgorCisjZGVmaW5lIEVYVF9EU1BfQklUX0RDQUwJMHgwMDAxCisjZGVmaW5lIEVYVF9EU1BfQklUX01JRElfQ09OCTB4MDAwMgorCisjZGVmaW5lIEJVRkZTSVpFCQkweDgwMDAKKyNkZWZpbmUgSE9TVFFfU0laRQkJMHg0MAorCisjZGVmaW5lIERBUF9CVUZGX1NJWkUJCTB4MjQwMAorCisjZGVmaW5lIERBUFFfU1RSVUNUX1NJWkUJMHgxMAorI2RlZmluZSBEQVJRX1NUUlVDVF9TSVpFCTB4MTAKKyNkZWZpbmUgREFQUV9CVUZGX1NJWkUJCSgzICogMHgxMCkKKyNkZWZpbmUgREFSUV9CVUZGX1NJWkUJCSgzICogMHgxMCkKKyNkZWZpbmUgTU9EUV9CVUZGX1NJWkUJCTB4NDAwCisKKyNkZWZpbmUgREFQUV9EQVRBX0JVRkYJCTB4NkMwMAorI2RlZmluZSBEQVJRX0RBVEFfQlVGRgkJMHg2QzMwCisjZGVmaW5lIE1PRFFfREFUQV9CVUZGCQkweDZDNjAKKyNkZWZpbmUgTUlEUV9EQVRBX0JVRkYJCTB4NzA2MAorCisjZGVmaW5lIERBUFFfT0ZGU0VUCQlTUkFNX0NOVExfU1RBUlQKKyNkZWZpbmUgREFSUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDA4KQorI2RlZmluZSBNT0RRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MTApCisjZGVmaW5lIE1JRFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgxOCkKKyNkZWZpbmUgRFNQUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDIwKQorCisjZGVmaW5lCUhQX0lDUgkJCTB4MDAKKyNkZWZpbmUJSFBfQ1ZSCQkJMHgwMQorI2RlZmluZQlIUF9JU1IJCQkweDAyCisjZGVmaW5lCUhQX0lWUgkJCTB4MDMKKyNkZWZpbmUgSFBfTlUJCQkweDA0CisjZGVmaW5lIEhQX0lORk8JCQkweDA0CisjZGVmaW5lCUhQX1RYSAkJCTB4MDUKKyNkZWZpbmUJSFBfUlhICQkJMHgwNQorI2RlZmluZQlIUF9UWE0JCQkweDA2CisjZGVmaW5lCUhQX1JYTQkJCTB4MDYKKyNkZWZpbmUJSFBfVFhMCQkJMHgwNworI2RlZmluZQlIUF9SWEwJCQkweDA3CisKKyNkZWZpbmUgSFBfSUNSX0RFRgkJMHgwMAorI2RlZmluZSBIUF9DVlJfREVGCQkweDEyCisjZGVmaW5lIEhQX0lTUl9ERUYJCTB4MDYKKyNkZWZpbmUgSFBfSVZSX0RFRgkJMHgwZgorI2RlZmluZSBIUF9OVV9ERUYJCTB4MDAKKworI2RlZmluZQlIUF9JUlFNCQkJMHgwOQorCisjZGVmaW5lCUhQUl9CTFJDCQkweDA4CisjZGVmaW5lCUhQUl9TUFIxCQkweDA5CisjZGVmaW5lCUhQUl9TUFIyCQkweDBBCisjZGVmaW5lCUhQUl9UQ0wwCQkweDBCCisjZGVmaW5lCUhQUl9UQ0wxCQkweDBDCisjZGVmaW5lCUhQUl9UQ0wyCQkweDBECisjZGVmaW5lCUhQUl9UQ0wzCQkweDBFCisjZGVmaW5lCUhQUl9UQ0w0CQkweDBGCisKKyNkZWZpbmUJSFBJQ1JfSU5JVAkJMHg4MAorI2RlZmluZSBIUElDUl9ITTEJCTB4NDAKKyNkZWZpbmUgSFBJQ1JfSE0wCQkweDIwCisjZGVmaW5lIEhQSUNSX0hGMQkJMHgxMAorI2RlZmluZSBIUElDUl9IRjAJCTB4MDgKKyNkZWZpbmUJSFBJQ1JfVFJFUQkJMHgwMgorI2RlZmluZQlIUElDUl9SUkVRCQkweDAxCisKKyNkZWZpbmUgSFBDVlJfSEMJCTB4ODAKKworI2RlZmluZQlIUElTUl9IUkVRCQkweDgwCisjZGVmaW5lIEhQSVNSX0RNQQkJMHg0MAorI2RlZmluZSBIUElTUl9IRjMJCTB4MTAKKyNkZWZpbmUgSFBJU1JfSEYyCQkweDA4CisjZGVmaW5lCUhQSVNSX1RSRFkJCTB4MDQKKyNkZWZpbmUJSFBJU1JfVFhERQkJMHgwMgorI2RlZmluZQlIUElTUl9SWERGCQkweDAxCisKKyNkZWZpbmUJSFBJT18yOTAJCTAKKyNkZWZpbmUJSFBJT18yNjAJCTEKKyNkZWZpbmUJSFBJT18yNTAJCTIKKyNkZWZpbmUJSFBJT18yNDAJCTMKKyNkZWZpbmUJSFBJT18yMzAJCTQKKyNkZWZpbmUJSFBJT18yMjAJCTUKKyNkZWZpbmUJSFBJT18yMTAJCTYKKyNkZWZpbmUJSFBJT18zRTAJCTcKKworI2RlZmluZQlIUE1FTV9OT05FCQkwCisjZGVmaW5lCUhQTUVNX0IwMDAJCTEKKyNkZWZpbmUJSFBNRU1fQzgwMAkJMgorI2RlZmluZQlIUE1FTV9EMDAwCQkzCisjZGVmaW5lCUhQTUVNX0Q0MDAJCTQKKyNkZWZpbmUJSFBNRU1fRDgwMAkJNQorI2RlZmluZQlIUE1FTV9FMDAwCQk2CisjZGVmaW5lCUhQTUVNX0U4MDAJCTcKKworI2RlZmluZQlIUElSUV9OT05FCQkwCisjZGVmaW5lIEhQSVJRXzUJCQkxCisjZGVmaW5lIEhQSVJRXzcJCQkyCisjZGVmaW5lIEhQSVJRXzkJCQkzCisjZGVmaW5lIEhQSVJRXzEwCQk0CisjZGVmaW5lIEhQSVJRXzExCQk1CisjZGVmaW5lIEhQSVJRXzEyCQk2CisjZGVmaW5lIEhQSVJRXzE1CQk3CisKKyNkZWZpbmUJSElNVF9QTEFZX0RPTkUJCTB4MDAKKyNkZWZpbmUJSElNVF9SRUNPUkRfRE9ORQkweDAxCisjZGVmaW5lCUhJTVRfTUlESV9FT1MJCTB4MDIKKyNkZWZpbmUJSElNVF9NSURJX09VVAkJMHgwMworCisjZGVmaW5lCUhJTVRfTUlESV9JTl9VQ0hBUgkweDBFCisjZGVmaW5lCUhJTVRfRFNQCQkweDBGCisKKyNkZWZpbmUJSERFWF9CQVNFCSAgICAgICAJMHg5MgorI2RlZmluZQlIREVYX1BMQVlfU1RBUlQJCSgwICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfU1RPUAkJKDEgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9QQVVTRQkJKDIgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9SRVNVTUUJKDMgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUkVDT1JEX1NUQVJUCSg0ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1JFQ09SRF9TVE9QCSg1ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfSU5fU1RBUlQgCSg2ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfSU5fU1RPUAkoNyArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX09VVF9TVEFSVAkoOCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX09VVF9TVE9QCSg5ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX0FVWF9SRVEJCSgxMCArIEhERVhfQkFTRSkKKworI2RlZmluZQlIREVYQVJfQ0xFQVJfUEVBS1MJMQorI2RlZmluZQlIREVYQVJfSU5fU0VUX1BPVFMJMgorI2RlZmluZQlIREVYQVJfQVVYX1NFVF9QT1RTCTMKKyNkZWZpbmUJSERFWEFSX0NBTF9BX1RPX0QJNAorI2RlZmluZQlIREVYQVJfUkRfRVhUX0RTUF9CSVRTCTUKKworLyogUGlubmFjbGUgb25seSBIREVYQVIgZGVmcyAqLworI2RlZmluZQlIREVYQVJfU0VUX0FOQV9JTgkwCisjZGVmaW5lCUhERVhBUl9TRVRfU1lOVEhfSU4JNAorI2RlZmluZQlIREVYQVJfUkVBRF9EQVRfSU4JNQorI2RlZmluZQlIREVYQVJfTUlDX1NFVF9QT1RTCTYKKyNkZWZpbmUJSERFWEFSX1NFVF9EQVRfSU4JNworCisjZGVmaW5lIEhERVhBUl9TRVRfU1lOVEhfNDgJOAorI2RlZmluZSBIREVYQVJfU0VUX1NZTlRIXzQ0CTkKKworI2RlZmluZSBISVdPUkQobCkJCSgodTE2KSgoKCh1MzIpKGwpKSA+PiAxNikgJiAweEZGRkYpKQorI2RlZmluZSBMT1dPUkQobCkJCSgodTE2KSh1MzIpKGwpKQorI2RlZmluZSBISUJZVEUodykJCSgodTgpKCgodTE2KSh3KSA+PiA4KSAmIDB4RkYpKQorI2RlZmluZSBMT0JZVEUodykJCSgodTgpKHcpKQorI2RlZmluZSBNQUtFTE9ORyhsb3csIGhpKQkoKGxvbmcpKCgodTE2KShsb3cpKXwoKCh1MzIpKCh1MTYpKGhpKSkpPDwxNikpKQorI2RlZmluZSBNQUtFV09SRChsb3csIGhpKQkoKHUxNikoKCh1OCkobG93KSl8KCgodTE2KSgodTgpKGhpKSkpPDw4KSkpCisKKyNkZWZpbmUgUENUT0RTUF9PRkZTRVQodykJKHUxNikoKHcpLzIpCisjZGVmaW5lIFBDVE9EU1BfQkFTRUQodykJKHUxNikoKCh3KS8yKSArIERTUF9CQVNFX0FERFIpCisjZGVmaW5lIERTUFRPUENfQkFTRUQodykJKCgodykgLSBEU1BfQkFTRV9BRERSKSAqIDIpCisKKyNpZmRlZiBTTE9XSU8KKyMgIHVuZGVmIG91dGIKKyMgIHVuZGVmIGluYgorIyAgZGVmaW5lIG91dGIJCQlvdXRiX3AKKyMgIGRlZmluZSBpbmIJCQlpbmJfcAorI2VuZGlmCisKKy8qIEpvYlF1ZXVlU3RydWN0ICovCisjZGVmaW5lIEpRU193U3RhcnQJCTB4MDAKKyNkZWZpbmUgSlFTX3dTaXplCQkweDAyCisjZGVmaW5lIEpRU193SGVhZAkJMHgwNAorI2RlZmluZSBKUVNfd1RhaWwJCTB4MDYKKyNkZWZpbmUgSlFTX19zaXplCQkweDA4CisKKy8qIERBUXVldWVEYXRhU3RydWN0ICovCisjZGVmaW5lIERBUURTX3dTdGFydAkJMHgwMAorI2RlZmluZSBEQVFEU193U2l6ZQkJMHgwMgorI2RlZmluZSBEQVFEU193Rm9ybWF0CQkweDA0CisjZGVmaW5lIERBUURTX3dTYW1wbGVTaXplCTB4MDYKKyNkZWZpbmUgREFRRFNfd0NoYW5uZWxzCQkweDA4CisjZGVmaW5lIERBUURTX3dTYW1wbGVSYXRlCTB4MEEKKyNkZWZpbmUgREFRRFNfd0ludE1zZwkJMHgwQworI2RlZmluZSBEQVFEU193RmxhZ3MJCTB4MEUKKyNkZWZpbmUgREFRRFNfX3NpemUJCTB4MTAKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCitzdHJ1Y3Qgc25kX21zbmQgeworCXZvaWQgX19pb21lbQkJKm1hcHBlZGJhc2U7CisJaW50CQkJcGxheV9wZXJpb2RfYnl0ZXM7CisJaW50CQkJcGxheUxpbWl0OworCWludAkJCXBsYXlQZXJpb2RzOworCWludCAJCQlwbGF5RE1BUG9zOworCWludAkJCWJhbmtzUGxheWVkOworCWludCAJCQljYXB0dXJlRE1BUG9zOworCWludAkJCWNhcHR1cmVQZXJpb2RCeXRlczsKKwlpbnQJCQljYXB0dXJlTGltaXQ7CisJaW50CQkJY2FwdHVyZVBlcmlvZHM7CisJc3RydWN0IHNuZF9jYXJkCQkqY2FyZDsKKwl2b2lkCQkJKm1zbmRtaWRpX21wdTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkJKnJtaWRpOworCisJLyogSGFyZHdhcmUgcmVzb3VyY2VzICovCisJbG9uZyBpbzsKKwlpbnQgbWVtaWQsIGlycWlkOworCWludCBpcnEsIGlycV9yZWY7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCisJLyogTW90b3JvbGEgNTZrIERTUCBTTUEgKi8KKwl2b2lkIF9faW9tZW0JKlNNQTsKKwl2b2lkIF9faW9tZW0JKkRBUFE7CisJdm9pZCBfX2lvbWVtCSpEQVJROworCXZvaWQgX19pb21lbQkqTU9EUTsKKwl2b2lkIF9faW9tZW0JKk1JRFE7CisJdm9pZCBfX2lvbWVtCSpEU1BROworCWludCBkc3BxX2RhdGFfYnVmZiwgZHNwcV9idWZmX3NpemU7CisKKwkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KKwllbnVtIHsgbXNuZENsYXNzaWMsIG1zbmRQaW5uYWNsZSB9IHR5cGU7CisJbW9kZV90IG1vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgRl9SRVNFVFRJTkcJCQkwCisjZGVmaW5lIEZfSEFWRURJR0lUQUwJCQkxCisjZGVmaW5lIEZfQVVESU9fV1JJVEVfSU5VU0UJCTIKKyNkZWZpbmUgRl9XUklUSU5HCQkJMworI2RlZmluZSBGX1dSSVRFQkxPQ0sJCQk0CisjZGVmaW5lIEZfV1JJVEVGTFVTSAkJCTUKKyNkZWZpbmUgRl9BVURJT19SRUFEX0lOVVNFCQk2CisjZGVmaW5lIEZfUkVBRElORwkJCTcKKyNkZWZpbmUgRl9SRUFEQkxPQ0sJCQk4CisjZGVmaW5lIEZfRVhUX01JRElfSU5VU0UJCTkKKyNkZWZpbmUgRl9IRFJfTUlESV9JTlVTRQkJMTAKKyNkZWZpbmUgRl9ESVNBQkxFX1dSSVRFX05ERUxBWQkJMTEKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBtaXhlcl9sb2NrOworCWludCBucmVzZXRzOworCXVuc2lnbmVkIHJlY3NyYzsKKyNkZWZpbmUgTEVWRUxfRU5UUklFUyAzMgorCWludCBsZWZ0X2xldmVsc1tMRVZFTF9FTlRSSUVTXTsKKwlpbnQgcmlnaHRfbGV2ZWxzW0xFVkVMX0VOVFJJRVNdOworCWludCBjYWxpYnJhdGVfc2lnbmFsOworCWludCBwbGF5X3NhbXBsZV9zaXplLCBwbGF5X3NhbXBsZV9yYXRlLCBwbGF5X2NoYW5uZWxzOworCWludCBwbGF5X25kZWxheTsKKwlpbnQgY2FwdHVyZV9zYW1wbGVfc2l6ZSwgY2FwdHVyZV9zYW1wbGVfcmF0ZSwgY2FwdHVyZV9jaGFubmVsczsKKwlpbnQgY2FwdHVyZV9uZGVsYXk7CisJdTggYkN1cnJlbnRNaWRpUGF0Y2g7CisKKwlpbnQgbGFzdF9wbGF5YmFuaywgbGFzdF9yZWNiYW5rOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGxheWJhY2tfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqY2FwdHVyZV9zdWJzdHJlYW07CisKK307CisKK3ZvaWQgc25kX21zbmRfaW5pdF9xdWV1ZSh2b2lkICpiYXNlLCBpbnQgc3RhcnQsIGludCBzaXplKTsKKworaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHU4IGNtZCk7CitpbnQgc25kX21zbmRfc2VuZF93b3JkKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgaGlnaCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgbWlkLAorCQkJICAgdW5zaWduZWQgY2hhciBsb3cpOworaW50IHNuZF9tc25kX3VwbG9hZF9ob3N0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCSAgICAgY29uc3QgdTggKmJpbiwgaW50IGxlbik7CitpbnQgc25kX21zbmRfZW5hYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOworaW50IHNuZF9tc25kX2Rpc2FibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7Cit2b2lkIHNuZF9tc25kX2RzcF9oYWx0KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgc3RydWN0IGZpbGUgKmZpbGUpOworaW50IHNuZF9tc25kX0RBUFEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpOworaW50IHNuZF9tc25kX0RBUlEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpOworaW50IHNuZF9tc25kX3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CisKK2ludCBzbmRfbXNuZG1pZGlfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSk7Cit2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKHZvaWQgKm1wdSk7CisKK3ZvaWQgc25kX21zbmRtaXhfc2V0dXAoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK2ludCBfX2RldmluaXQgc25kX21zbmRtaXhfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CitpbnQgc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHJlY3NyYyk7CisjZW5kaWYgLyogX19NU05EX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyM2EwOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jCkBAIC0wLDAgKzEsMyBAQAorLyogVGhlIHdvcmsgaXMgaW4gbXNuZF9waW5uYWNsZS5jLCBqdXN0IGRlZmluZSBNU05EX0NMQVNTSUMgYmVmb3JlIGl0LiAqLworI2RlZmluZSBNU05EX0NMQVNTSUMKKyNpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaCBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOGQ1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmRfY2xhc3NpYy5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX0NMQVNTSUNfSAorI2RlZmluZSBfX01TTkRfQ0xBU1NJQ19ICisKKyNkZWZpbmUgRFNQX05VTUlPCQkJCTB4MTAKKworI2RlZmluZQlIUF9NRU1NCQkJCQkweDA4CisKKyNkZWZpbmUJSFBfQklUTQkJCQkJMHgwRQorI2RlZmluZQlIUF9XQUlUCQkJCQkweDBECisjZGVmaW5lCUhQX0RTUFIJCQkJCTB4MEEKKyNkZWZpbmUJSFBfUFJPUgkJCQkJMHgwQgorI2RlZmluZQlIUF9CTEtTCQkJCQkweDBDCisKKyNkZWZpbmUJSFBQUk9SRVNFVF9PRkYJCQkJMAorI2RlZmluZSBIUFBST1JFU0VUX09OCQkJCTEKKworI2RlZmluZSBIUERTUFJFU0VUX09GRgkJCQkwCisjZGVmaW5lIEhQRFNQUkVTRVRfT04JCQkJMQorCisjZGVmaW5lIEhQQkxLU0VMXzAJCQkJMAorI2RlZmluZSBIUEJMS1NFTF8xCQkJCTEKKworI2RlZmluZSBIUFdBSVRTVEFURV8wCQkJCTAKKyNkZWZpbmUgSFBXQUlUU1RBVEVfMQkJCQkxCisKKyNkZWZpbmUgSFBCSVRNT0RFXzE2CQkJCTAKKyNkZWZpbmUgSFBCSVRNT0RFXzgJCQkJMQorCisjZGVmaW5lCUhJRFNQX0lOVF9QTEFZX1VOREVSCQkJMHgwMAorI2RlZmluZQlISURTUF9JTlRfUkVDT1JEX09WRVIJCQkweDAxCisjZGVmaW5lCUhJRFNQX0lOUFVUX0NMSVBQSU5HCQkJMHgwMgorI2RlZmluZQlISURTUF9NSURJX0lOX09WRVIJCQkweDEwCisjZGVmaW5lCUhJRFNQX01JRElfT1ZFUlJVTl9FUlIgIDB4MTMKKworI2RlZmluZSBUSU1FX1BST19SRVNFVF9ET05FCQkJMHgwMjhBCisjZGVmaW5lIFRJTUVfUFJPX1NZU0VYCQkJCTB4MDA0MAorI2RlZmluZSBUSU1FX1BST19SRVNFVAkJCQkweDAwMzIKKworI2RlZmluZSBEQVJfQlVGRl9TSVpFCQkJCTB4MjAwMAorCisjZGVmaW5lIE1JRFFfQlVGRl9TSVpFCQkJCTB4MjAwCisjZGVmaW5lIERTUFFfQlVGRl9TSVpFCQkJCTB4NDAKKworI2RlZmluZSBEU1BRX0RBVEFfQlVGRgkJCQkweDcyNjAKKworI2RlZmluZSBNT1BfU1lOVEgJCQkJMHgxMAorI2RlZmluZSBNT1BfRVhUT1VUCQkJCTB4MzIKKyNkZWZpbmUgTU9QX0VYVFRIUlUJCQkJMHgwMgorI2RlZmluZSBNT1BfT1VUTUFTSwkJCQkweDAxCisKKyNkZWZpbmUgTUlQX0VYVElOCQkJCTB4MDEKKyNkZWZpbmUgTUlQX1NZTlRICQkJCTB4MDAKKyNkZWZpbmUgTUlQX0lOTUFTSwkJCQkweDMyCisKKy8qIENsYXNzaWMgU01BIENvbW1vbiBEYXRhICovCisjZGVmaW5lIFNNQV93Q3VyclBsYXlCeXRlcwkJCTB4MDAwMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRCeXRlcwkJCTB4MDAwMgorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sTGVmdAkJCTB4MDAwNAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sUmlnaHQJCQkweDAwMDYKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xMZWZ0CQkJMHgwMDA4CisjZGVmaW5lIFNNQV93Q3VyckluVm9sUmlnaHQJCQkweDAwMGEKKyNkZWZpbmUgU01BX3dVc2VyXzMJCQkJMHgwMDBjCisjZGVmaW5lIFNNQV93VXNlcl80CQkJCTB4MDAwZQorI2RlZmluZSBTTUFfZHdVc2VyXzUJCQkJMHgwMDEwCisjZGVmaW5lIFNNQV9kd1VzZXJfNgkJCQkweDAwMTQKKyNkZWZpbmUgU01BX3dVc2VyXzcJCQkJMHgwMDE4CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQQkJCQkweDAwMWEKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9CCQkJCTB4MDAxYworI2RlZmluZSBTTUFfd1Jlc2VydmVkX0MJCQkJMHgwMDFlCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRAkJCQkweDAwMjAKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9FCQkJCTB4MDAyMgorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0YJCQkJMHgwMDI0CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRwkJCQkweDAwMjYKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9ICQkJCTB4MDAyOAorI2RlZmluZSBTTUFfd0N1cnJEU1BTdGF0dXNGbGFncwkJCTB4MDAyYQorI2RlZmluZSBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MJCTB4MDAyYworI2RlZmluZSBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMJCQkweDAwMmUKKyNkZWZpbmUgU01BX3dDdXJyTGVmdFBlYWsJCQkweDAwMzAKKyNkZWZpbmUgU01BX3dDdXJyUmlnaHRQZWFrCQkJMHgwMDMyCisjZGVmaW5lIFNNQV93RXh0RFNQYml0cwkJCQkweDAwMzQKKyNkZWZpbmUgU01BX2JFeHRIb3N0Yml0cwkJCTB4MDAzNgorI2RlZmluZSBTTUFfYkJvYXJkTGV2ZWwJCQkJMHgwMDM3CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NSaWdodAkJCTB4MDAzOAorI2RlZmluZSBTTUFfYkluUG90UG9zTGVmdAkJCTB4MDAzOQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc1JpZ2h0CQkJMHgwMDNhCisjZGVmaW5lIFNNQV9iQXV4UG90UG9zTGVmdAkJCTB4MDAzYgorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sTGVmdAkJCTB4MDAzYworI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQJCQkweDAwM2UKKyNkZWZpbmUgU01BX2JVc2VyXzEyCQkJCTB4MDA0MAorI2RlZmluZSBTTUFfYlVzZXJfMTMJCQkJMHgwMDQxCisjZGVmaW5lIFNNQV93VXNlcl8xNAkJCQkweDAwNDIKKyNkZWZpbmUgU01BX3dVc2VyXzE1CQkJCTB4MDA0NAorI2RlZmluZSBTTUFfd0NhbEZyZXFBdG9ECQkJMHgwMDQ2CisjZGVmaW5lIFNNQV93VXNlcl8xNgkJCQkweDAwNDgKKyNkZWZpbmUgU01BX3dVc2VyXzE3CQkJCTB4MDA0YQorI2RlZmluZSBTTUFfX3NpemUJCQkJMHgwMDRjCisKKyNkZWZpbmUgSU5JVENPREVGSUxFCQkidHVydGxlYmVhY2gvbXNuZGluaXQuYmluIgorI2RlZmluZSBQRVJNQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iCisjZGVmaW5lIExPTkdOQU1FCQkiTXVsdGlTb3VuZCAoQ2xhc3NpYy9Nb250ZXJleS9UYWhpdGkpIgorCisjZW5kaWYgLyogX19NU05EX0NMQVNTSUNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjlhYTRjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PgorICogIENvcHlyaWdodCAoYykgMjAwOSBieSBLcnp5c3p0b2YgSGVsdAorICogIFJvdXRpbmVzIGZvciBjb250cm9sIG9mIE1QVS00MDEgaW4gVUFSVCBtb2RlCisgKgorICogIE1QVS00MDEgc3VwcG9ydHMgVUFSVCBtb2RlIHdoaWNoIGlzIG5vdCBjYXBhYmxlIGdlbmVyYXRlIHRyYW5zbWl0CisgKiAgaW50ZXJydXB0cyB0aHVzIG91dHB1dCBpcyBkb25lIHZpYSBwb2xsaW5nLiBBbHNvLCBpZiBpcnEgPCAwLCB0aGVuCisgKiAgaW5wdXQgaXMgZG9uZSBhbHNvIHZpYSBwb2xsaW5nLiBEbyBub3QgZXhwZWN0IGdvb2QgcGVyZm9ybWFuY2UuCisgKgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlICJtc25kLmgiCisKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfSU5QVVQJCTAKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfT1VUUFVUCQkxCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIJMgorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9PVVRQVVRfVFJJR0dFUgkzCisKK3N0cnVjdCBzbmRfbXNuZG1pZGkgeworCXN0cnVjdCBzbmRfbXNuZCAqZGV2OworCisJdW5zaWduZWQgbG9uZyBtb2RlOwkJLyogTVNORE1JRElfTU9ERV9YWFhYICovCisKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1faW5wdXQ7CisKKwlzcGlubG9ja190IGlucHV0X2xvY2s7Cit9OworCisvKgorICogaW5wdXQvb3V0cHV0IG9wZW4vY2xvc2UgLSBwcm90ZWN0ZWQgYnkgb3Blbl9tdXRleCBpbiByYXdtaWRpLmMKKyAqLworc3RhdGljIGludCBzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJc25kX3ByaW50ZGQoInNuZF9tc25kbWlkaV9pbnB1dF9vcGVuKClcbiIpOworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBzdWJzdHJlYW07CisKKwlzbmRfbXNuZF9lbmFibGVfaXJxKG1wdS0+ZGV2KTsKKworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPmRldiwgSERFWF9NSURJX0lOX1NUQVJUKTsKKwlzZXRfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1pZGlfaW5wdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5kZXYsIEhERVhfTUlESV9JTl9TVE9QKTsKKwljbGVhcl9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOworCW1wdS0+c3Vic3RyZWFtX2lucHV0ID0gTlVMTDsKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShtcHUtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9kcm9wKHN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSkKK3sKKwl1MTYgdGFpbDsKKworCXRhaWwgPSByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193VGFpbCk7CisJd3JpdGV3KHRhaWwsIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKK30KKworLyoKKyAqIHRyaWdnZXIgaW5wdXQKKyAqLworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlpbnQgdXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIoLCAlaSlcbiIsIHVwKTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJaWYgKHVwKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLAorCQkJCSAgICAgICZtcHUtPm1vZGUpKQorCQkJc25kX21zbmRtaWRpX2lucHV0X2Ryb3AobXB1KTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwgJm1wdS0+bW9kZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCWlmICh1cCkKKwkJc25kX21zbmRtaWRpX2lucHV0X3JlYWQobXB1KTsKK30KKwordm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCh2b2lkICptcHV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1ID0gbXB1djsKKwl2b2lkICpwd01JRFFEYXRhID0gbXB1LT5kZXYtPm1hcHBlZGJhc2UgKyBNSURRX0RBVEFfQlVGRjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAocmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1RhaWwpICE9CisJICAgICAgIHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSkgeworCQl1MTYgd1RtcCwgdmFsOworCQl2YWwgPSByZWFkdyhwd01JRFFEYXRhICsgMiAqIHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSk7CisKKwkJCWlmICh0ZXN0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLAorCQkJCSAgICAgJm1wdS0+bW9kZSkpCisJCQkJc25kX3Jhd21pZGlfcmVjZWl2ZShtcHUtPnN1YnN0cmVhbV9pbnB1dCwKKwkJCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOworCisJCXdUbXAgPSByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkgKyAxOworCQlpZiAod1RtcCA+IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dTaXplKSkKKwkJCXdyaXRldygwLCAgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworCQllbHNlCisJCQl3cml0ZXcod1RtcCwgIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKTsKKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgc25kX21zbmRtaWRpX2lucHV0ID0geworCS5vcGVuID0JCXNuZF9tc25kbWlkaV9pbnB1dF9vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kbWlkaV9pbnB1dF9jbG9zZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyLAorfTsKKworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2ZyZWUoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUgPSBybWlkaS0+cHJpdmF0ZV9kYXRhOworCWtmcmVlKG1wdSk7Cit9CisKK2ludCBzbmRfbXNuZG1pZGlfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9yYXdtaWRpX25ldyhjYXJkLCAiTVNORC1NSURJIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCW1wdSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXB1ID09IE5VTEwpIHsKKwkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1wdS0+ZGV2ID0gY2hpcDsKKwljaGlwLT5tc25kbWlkaV9tcHUgPSBtcHU7CisJcm1pZGktPnByaXZhdGVfZGF0YSA9IG1wdTsKKwlybWlkaS0+cHJpdmF0ZV9mcmVlID0gc25kX21zbmRtaWRpX2ZyZWU7CisJc3Bpbl9sb2NrX2luaXQoJm1wdS0+aW5wdXRfbG9jayk7CisJc3RyY3B5KHJtaWRpLT5uYW1lLCAiTVNORCBNSURJIik7CisJc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkgICAgJnNuZF9tc25kbWlkaV9pbnB1dCk7CisJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjZhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKQEAgLTAsMCArMSwxMjM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTGludXggbXVsdGlzb3VuZCBwaW5uYWNsZS9maWppIGRyaXZlciBmb3IgQUxTQS4KKyAqCisgKiAyMDAyLzA2LzMwIEthcnN0ZW4gV2llc2U6CisgKglmb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIHRvIGJ1aWxkIGEgcGlubmFjbGUgLyBmaWppIGRyaXZlci4KKyAqCXRoZSBPU1MgcGFyZW50IG9mIHRoaXMgY29kZSBpcyBkZXNpZ25lZCB0byBhbHNvIHN1cHBvcnQKKyAqCXRoZSBtdWx0aXNvdW5kIGNsYXNzaWMgdmlhIHRoZSBmaWxlIG1zbmRfY2xhc3NpYy5jLgorICoJdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHNvbWUgYnJhdmUgaGVhcnQgdG8gaW1wbGVtdCBjbGFzc2ljCisgKglzdXBwb3J0IGluIGFsc2EsIGkgbGVmdCBhbGwgdGhlIE1TTkRfQ0xBU1NJQyB0b2tlbnMgaW4gdGhpcyBmaWxlLgorICoJYnV0IGZvciBub3cgdGhpcyB1bnRlc3RlZCAmIHVuZG9uZS4KKyAqCisgKgorICogcmlwcGVkIGZyb20gbGludXgga2VybmVsIDIuNC4xOCBieSBLYXJzdGVuIFdpZXNlLgorICoKKyAqIHRoZSBmb2xsb3dpbmcgaXMgYSBjb3B5IG9mIHRoZSAyLjQuMTggT1NTIEZSRUUgZmlsZS1oZWFkaW5nIGNvbW1lbnQ6CisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKiBtc25kX3Bpbm5hY2xlLmMgLyBtc25kX2NsYXNzaWMuYworICoKKyAqIC0tIElmIE1TTkRfQ0xBU1NJQyBpcyBkZWZpbmVkOgorICoKKyAqICAgICAtPiBkcml2ZXIgZm9yIFR1cnRsZSBCZWFjaCBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aQorICoKKyAqIC0tIEVsc2UKKyAqCisgKiAgICAgLT4gZHJpdmVyIGZvciBUdXJ0bGUgQmVhY2ggUGlubmFjbGUvRmlqaQorICoKKyAqIDEyLTMtMjAwMCAgTW9kaWZpZWQgSU8gcG9ydCB2YWxpZGF0aW9uICBTdGV2ZSBTeWNhbW9yZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgorCisjaWZkZWYgTVNORF9DTEFTU0lDCisjIGlmbmRlZiBfX2FscGhhX18KKyMgIGRlZmluZSBTTE9XSU8KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgIm1zbmQuaCIKKyNpZmRlZiBNU05EX0NMQVNTSUMKKyMgIGluY2x1ZGUgIm1zbmRfY2xhc3NpYy5oIgorIyAgZGVmaW5lIExPR05BTUUJCQkibXNuZF9jbGFzc2ljIgorI2Vsc2UKKyMgIGluY2x1ZGUgIm1zbmRfcGlubmFjbGUuaCIKKyMgIGRlZmluZSBMT0dOQU1FCQkJInNuZF9tc25kX3Bpbm5hY2xlIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwljaGlwLT5wbGF5X3NhbXBsZV9zaXplID0gREVGU0FNUExFU0laRTsKKwljaGlwLT5wbGF5X3NhbXBsZV9yYXRlID0gREVGU0FNUExFUkFURTsKKwljaGlwLT5wbGF5X2NoYW5uZWxzID0gREVGQ0hBTk5FTFM7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSA9IERFRlNBTVBMRVNJWkU7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSA9IERFRlNBTVBMRVJBVEU7CisJY2hpcC0+Y2FwdHVyZV9jaGFubmVscyA9IERFRkNIQU5ORUxTOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9ldmFsX2RzcF9tc2coc3RydWN0IHNuZF9tc25kICpjaGlwLCB1MTYgd01lc3NhZ2UpCit7CisJc3dpdGNoIChISUJZVEUod01lc3NhZ2UpKSB7CisJY2FzZSBISU1UX1BMQVlfRE9ORTogeworCQlpZiAoY2hpcC0+YmFua3NQbGF5ZWQgPCAzKQorCQkJc25kX3ByaW50ZGQoIiUwOFg6IEhJTVRfUExBWV9ET05FOiAlaVxuIiwKKwkJCQkodW5zaWduZWQpamlmZmllcywgTE9CWVRFKHdNZXNzYWdlKSk7CisKKwkJaWYgKGNoaXAtPmxhc3RfcGxheWJhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKSkgeworCQkJc25kX3ByaW50ZGQoImNoaXAubGFzdF9wbGF5YmFuayA9PSBMT0JZVEUod01lc3NhZ2UpXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNoaXAtPmJhbmtzUGxheWVkKys7CisKKwkJaWYgKHRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkKKwkJCXNuZF9tc25kX0RBUFEoY2hpcCwgMCk7CisKKwkJY2hpcC0+bGFzdF9wbGF5YmFuayA9IExPQllURSh3TWVzc2FnZSk7CisJCWNoaXAtPnBsYXlETUFQb3MgKz0gY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXM7CisJCWlmIChjaGlwLT5wbGF5RE1BUG9zID4gY2hpcC0+cGxheUxpbWl0KQorCQkJY2hpcC0+cGxheURNQVBvcyA9IDA7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBISU1UX1JFQ09SRF9ET05FOgorCQlpZiAoY2hpcC0+bGFzdF9yZWNiYW5rID09IExPQllURSh3TWVzc2FnZSkpCisJCQlicmVhazsKKwkJY2hpcC0+bGFzdF9yZWNiYW5rID0gTE9CWVRFKHdNZXNzYWdlKTsKKwkJY2hpcC0+Y2FwdHVyZURNQVBvcyArPSBjaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXM7CisJCWlmIChjaGlwLT5jYXB0dXJlRE1BUG9zID4gKGNoaXAtPmNhcHR1cmVMaW1pdCkpCisJCQljaGlwLT5jYXB0dXJlRE1BUG9zID0gMDsKKworCQlpZiAodGVzdF9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQkJc25kX21zbmRfREFSUShjaGlwLCBjaGlwLT5sYXN0X3JlY2JhbmspOworCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgSElNVF9EU1A6CisJCXN3aXRjaCAoTE9CWVRFKHdNZXNzYWdlKSkgeworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwkJY2FzZSBISURTUF9QTEFZX1VOREVSOgorI2VuZGlmCisJCWNhc2UgSElEU1BfSU5UX1BMQVlfVU5ERVI6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IFBsYXkgdW5kZXJmbG93ICVpXG4iLAorCQkJCWNoaXAtPmJhbmtzUGxheWVkKTsKKwkJCWlmIChjaGlwLT5iYW5rc1BsYXllZCA+IDIpCisJCQkJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSElEU1BfSU5UX1JFQ09SRF9PVkVSOgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBSZWNvcmQgb3ZlcmZsb3dcbiIpOworCQkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FCisJCQkJICAgIjogRFNQIG1lc3NhZ2UgJWQgMHglMDJ4XG4iLAorCQkJCSAgIExPQllURSh3TWVzc2FnZSksIExPQllURSh3TWVzc2FnZSkpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJTVRfTUlESV9JTl9VQ0hBUjoKKwkJaWYgKGNoaXAtPm1zbmRtaWRpX21wdSkKKwkJCXNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKGNoaXAtPm1zbmRtaWRpX21wdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBISU1UIG1lc3NhZ2UgJWQgMHglMDJ4XG4iLAorCQkJICAgSElCWVRFKHdNZXNzYWdlKSwgSElCWVRFKHdNZXNzYWdlKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9tc25kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gZGV2X2lkOworCXZvaWQgKnB3RFNQUURhdGEgPSBjaGlwLT5tYXBwZWRiYXNlICsgRFNQUV9EQVRBX0JVRkY7CisKKwkvKiBTZW5kIGFjayB0byBEU1AgKi8KKwkvKiBpbmIoY2hpcC0+aW8gKyBIUF9SWEwpOyAqLworCisJLyogRXZhbHVhdGUgcXVldWVkIERTUCBtZXNzYWdlcyAqLworCXdoaWxlIChyZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dUYWlsKSAhPSByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSkgeworCQl1MTYgd1RtcDsKKworCQlzbmRfbXNuZF9ldmFsX2RzcF9tc2coY2hpcCwKKwkJCXJlYWR3KHB3RFNQUURhdGEgKyAyICogcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkpKTsKKworCQl3VG1wID0gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkgKyAxOworCQlpZiAod1RtcCA+IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd1NpemUpKQorCQkJd3JpdGV3KDAsIGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpOworCQllbHNlCisJCQl3cml0ZXcod1RtcCwgY2hpcC0+RFNQUSArIEpRU193SGVhZCk7CisJfQorCS8qIFNlbmQgYWNrIHRvIERTUCAqLworCWluYihjaGlwLT5pbyArIEhQX1JYTCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcmVzZXRfZHNwKGxvbmcgaW8sIHVuc2lnbmVkIGNoYXIgKmluZm8pCit7CisJaW50IHRpbWVvdXQgPSAxMDA7CisKKwlvdXRiKEhQRFNQUkVTRVRfT04sIGlvICsgSFBfRFNQUik7CisJbXNsZWVwKDEpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoaW5mbykKKwkJKmluZm8gPSBpbmIoaW8gKyBIUF9JTkZPKTsKKyNlbmRpZgorCW91dGIoSFBEU1BSRVNFVF9PRkYsIGlvICsgSFBfRFNQUik7CisJbXNsZWVwKDEpOworCXdoaWxlICh0aW1lb3V0LS0gPiAwKSB7CisJCWlmIChpbmIoaW8gKyBIUF9DVlIpID09IEhQX0NWUl9ERUYpCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEpOworCX0KKwlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ2Fubm90IHJlc2V0IERTUFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGluZm87CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWNoYXIgKnh2LCAqcmV2ID0gTlVMTDsKKwljaGFyICpwaW4gPSAiVEIgUGlubmFjbGUiLCAqZmlqaSA9ICJUQiBGaWppIjsKKwljaGFyICpwaW5maWppID0gIlRCIFBpbm5hY2xlL0ZpamkiOworI2VuZGlmCisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8sICJwcm9iaW5nIikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNuZF9tc25kX3Jlc2V0X2RzcChjaGlwLT5pbywgJmluZm8pIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkNsYXNzaWMvVGFoaXRpL01vbnRlcmV5Iik7CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAiVHVydGxlIEJlYWNoIE11bHRpc291bmQiKTsKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogJXMsICIKKwkgICAgICAgIkkvTyAweCVseC0weCVseCwgSVJRICVkLCBtZW1vcnkgbWFwcGVkIHRvIDB4JWxYLTB4JWxYXG4iLAorCSAgICAgICBjYXJkLT5zaG9ydG5hbWUsCisJICAgICAgIGNoaXAtPmlvLCBjaGlwLT5pbyArIERTUF9OVU1JTyAtIDEsCisJICAgICAgIGNoaXAtPmlycSwKKwkgICAgICAgY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIDB4N2ZmZik7CisjZWxzZQorCXN3aXRjaCAoaW5mbyA+PiA0KSB7CisJY2FzZSAweGY6CisJCXh2ID0gIjw9IDEuMTUiOworCQlicmVhazsKKwljYXNlIDB4MToKKwkJeHYgPSAiMS4xOC8xLjIiOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJeHYgPSAiMS4zIjsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXh2ID0gIjEuNCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXh2ID0gInVua25vd24iOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8gJiAweDcpIHsKKwljYXNlIDB4MDoKKwkJcmV2ID0gIkkiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MToKKwkJcmV2ID0gIkYiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJcmV2ID0gIkciOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJcmV2ID0gIkgiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW4pOworCQlicmVhazsKKwljYXNlIDB4NDoKKwkJcmV2ID0gIkUiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCXJldiA9ICJDIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg2OgorCQlyZXYgPSAiRCI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJcmV2ID0gIkEtQiAoRmlqaSkgb3IgQS1FIChQaW5uYWNsZSkiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwaW5maWppKTsKKwkJYnJlYWs7CisJfQorCXN0cmNweShjYXJkLT5sb25nbmFtZSwgIlR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIFBpbm5hY2xlIik7CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6ICVzIHJldmlzaW9uICVzLCBYaWxpbnggdmVyc2lvbiAlcywgIgorCSAgICAgICAiSS9PIDB4JWx4LTB4JWx4LCBJUlEgJWQsIG1lbW9yeSBtYXBwZWQgdG8gMHglbFgtMHglbFhcbiIsCisJICAgICAgIGNhcmQtPnNob3J0bmFtZSwKKwkgICAgICAgcmV2LCB4diwKKwkgICAgICAgY2hpcC0+aW8sIGNoaXAtPmlvICsgRFNQX05VTUlPIC0gMSwKKwkgICAgICAgY2hpcC0+aXJxLAorCSAgICAgICBjaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgMHg3ZmZmKTsKKyNlbmRpZgorCisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfaW5pdF9zbWEoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCXN0YXRpYyBpbnQgaW5pdHRlZDsKKwl1MTYgbWFzdFZvbExlZnQsIG1hc3RWb2xSaWdodDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJb3V0YihjaGlwLT5tZW1pZCwgY2hpcC0+aW8gKyBIUF9NRU1NKTsKKyNlbmRpZgorCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwkvKiBNb3Rvcm9sYSA1Nmsgc2hhcmVkIG1lbW9yeSBiYXNlICovCisJY2hpcC0+U01BID0gY2hpcC0+bWFwcGVkYmFzZSArIFNNQV9TVFJVQ1RfU1RBUlQ7CisKKwlpZiAoaW5pdHRlZCkgeworCQltYXN0Vm9sTGVmdCA9IHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwkJbWFzdFZvbFJpZ2h0ID0gcmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKwl9IGVsc2UKKwkJbWFzdFZvbExlZnQgPSBtYXN0Vm9sUmlnaHQgPSAwOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCAweDgwMDApOworCisJLyogQ3JpdGljYWwgc2VjdGlvbjogYmFuayAxIGFjY2VzcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCAweDgwMDApOworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBEaWdpdGFsIGF1ZGlvIHBsYXkgcXVldWUgKi8KKwljaGlwLT5EQVBRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFQUSwgREFQUV9EQVRBX0JVRkYsIERBUFFfQlVGRl9TSVpFKTsKKworCS8qIERpZ2l0YWwgYXVkaW8gcmVjb3JkIHF1ZXVlICovCisJY2hpcC0+REFSUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUlEsIERBUlFfREFUQV9CVUZGLCBEQVJRX0JVRkZfU0laRSk7CisKKwkvKiBNSURJIG91dCBxdWV1ZSAqLworCWNoaXAtPk1PRFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgTU9EUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5NT0RRLCBNT0RRX0RBVEFfQlVGRiwgTU9EUV9CVUZGX1NJWkUpOworCisJLyogTUlESSBpbiBxdWV1ZSAqLworCWNoaXAtPk1JRFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgTUlEUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5NSURRLCBNSURRX0RBVEFfQlVGRiwgTUlEUV9CVUZGX1NJWkUpOworCisJLyogRFNQIC0+IGhvc3QgbWVzc2FnZSBxdWV1ZSAqLworCWNoaXAtPkRTUFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgRFNQUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EU1BRLCBEU1BRX0RBVEFfQlVGRiwgRFNQUV9CVUZGX1NJWkUpOworCisJLyogU2V0dXAgc29tZSBEU1AgdmFsdWVzICovCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCXdyaXRldygxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5Rm9ybWF0KTsKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheVNhbXBsZVNpemUpOworCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5Q2hhbm5lbHMpOworCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5U2FtcGxlUmF0ZSk7CisjZW5kaWYKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDYWxGcmVxQXRvRCk7CisJd3JpdGV3KG1hc3RWb2xMZWZ0LCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJd3JpdGV3KG1hc3RWb2xSaWdodCwgY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJd3JpdGVsKDB4MDAwMTAwMDAsIGNoaXAtPlNNQSArIFNNQV9kd0N1cnJQbGF5UGl0Y2gpOworCXdyaXRlbCgweDAwMDAwMDAxLCBjaGlwLT5TTUEgKyBTTUFfZHdDdXJyUGxheVJhdGUpOworI2VuZGlmCisJd3JpdGV3KDB4MzAzLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMpOworCisJaW5pdHRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHVwbG9hZF9kc3BfY29kZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdF9mdyA9IE5VTEwsICpwZXJtX2Z3ID0gTlVMTDsKKwlpbnQgZXJyOworCisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmaW5pdF9mdywgSU5JVENPREVGSUxFLCBjYXJkLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEVycm9yIGxvYWRpbmcgIiBJTklUQ09ERUZJTEUpOworCQlnb3RvIGNsZWFudXAxOworCX0KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwZXJtX2Z3LCBQRVJNQ09ERUZJTEUsIGNhcmQtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogRXJyb3IgbG9hZGluZyAiIFBFUk1DT0RFRklMRSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwltZW1jcHlfdG9pbyhjaGlwLT5tYXBwZWRiYXNlLCBwZXJtX2Z3LT5kYXRhLCBwZXJtX2Z3LT5zaXplKTsKKwlpZiAoc25kX21zbmRfdXBsb2FkX2hvc3QoY2hpcCwgaW5pdF9mdy0+ZGF0YSwgaW5pdF9mdy0+c2l6ZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBFcnJvciB1cGxvYWRpbmcgdG8gRFNQXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBjbGVhbnVwOworCX0KKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogRFNQIGZpcm13YXJlIHVwbG9hZGVkXG4iKTsKKwllcnIgPSAwOworCitjbGVhbnVwOgorCXJlbGVhc2VfZmlybXdhcmUocGVybV9mdyk7CitjbGVhbnVwMToKKwlyZWxlYXNlX2Zpcm13YXJlKGluaXRfZncpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKK3N0YXRpYyB2b2lkIHJlc2V0X3Byb3RldXMoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCW91dGIoSFBQUk9SRVNFVF9PTiwgY2hpcC0+aW8gKyBIUF9QUk9SKTsKKwltc2xlZXAoVElNRV9QUk9fUkVTRVQpOworCW91dGIoSFBQUk9SRVNFVF9PRkYsIGNoaXAtPmlvICsgSFBfUFJPUik7CisJbXNsZWVwKFRJTUVfUFJPX1JFU0VUX0RPTkUpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX21zbmRfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIsIHRpbWVvdXQ7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlvdXRiKEhQV0FJVFNUQVRFXzAsIGNoaXAtPmlvICsgSFBfV0FJVCk7CisJb3V0YihIUEJJVE1PREVfMTYsIGNoaXAtPmlvICsgSFBfQklUTSk7CisKKwlyZXNldF9wcm90ZXVzKGNoaXApOworI2VuZGlmCisJZXJyID0gc25kX21zbmRfaW5pdF9zbWEoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IENhbm5vdCBpbml0aWFsaXplIFNNQVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX21zbmRfcmVzZXRfZHNwKGNoaXAtPmlvLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHVwbG9hZF9kc3BfY29kZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQ2Fubm90IHVwbG9hZCBEU1AgY29kZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJdGltZW91dCA9IDIwMDsKKworCXdoaWxlIChyZWFkdyhjaGlwLT5tYXBwZWRiYXNlKSkgeworCQltc2xlZXAoMSk7CisJCWlmICghdGltZW91dC0tKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRFNQIHJlc2V0IHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlzbmRfbXNuZG1peF9zZXR1cChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBydjsKKworCWlmICh0ZXN0X2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKSB8fCArK2NoaXAtPm5yZXNldHMgPiAxMCkKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2RzcF9oYWx0KGNoaXAsIE5VTEwpOwkvKiBVbmNvbmRpdGlvbmFsbHkgaGFsdCAqLworCisJcnYgPSBzbmRfbXNuZF9pbml0aWFsaXplKGNhcmQpOworCWlmIChydikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IERTUCByZXNldCBmYWlsZWRcbiIpOworCXNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhjaGlwLCAwKTsKKwljbGVhcl9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncyk7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NoaXBfZnJlZSgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWRfY2hrKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTggY21kKQoreworCWlmIChzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgY21kKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChjaGlwLT5jYXJkKTsKKwlyZXR1cm4gc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2NhbGlicmF0ZV9hZGMoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1MTYgc3JhdGUpCit7CisJc25kX3ByaW50ZGQoInNuZF9tc25kX2NhbGlicmF0ZV9hZGMoJWkpXG4iLCBzcmF0ZSk7CisJd3JpdGV3KHNyYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0NhbEZyZXFBdG9EKTsKKwlpZiAoY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9PSAwKQorCQl3cml0ZXcocmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKQorCQkgICAgICAgfCAweDAwMDEsIGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncyk7CisJZWxzZQorCQl3cml0ZXcocmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKQorCQkgICAgICAgJiB+MHgwMDAxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpOworCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoY2hpcCwgMCwgMCwgSERFWEFSX0NBTF9BX1RPX0QpID09IDAgJiYKKwkgICAgc25kX21zbmRfc2VuZF9kc3BfY21kX2NoayhjaGlwLCBIREVYX0FVWF9SRVEpID09IDApIHsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMzMzKSk7CisJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQURDIGNhbGlicmF0aW9uIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBBTFNBIGNhbGxiYWNrIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIE1JREkgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHNuZF9tc25kX21wdTQwMV9vcGVuKHN0cnVjdCBzbmRfbXB1NDAxICptcHUpCit7CisJc25kX21zbmRfZW5hYmxlX2lycShtcHUtPnByaXZhdGVfZGF0YSk7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+cHJpdmF0ZV9kYXRhLCBIREVYX01JRElfSU5fU1RBUlQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9tcHU0MDFfY2xvc2Uoc3RydWN0IHNuZF9tcHU0MDEgKm1wdSkKK3sKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5wcml2YXRlX2RhdGEsIEhERVhfTUlESV9JTl9TVE9QKTsKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShtcHUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBsb25nIG1wdV9pb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2F0dGFjaChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9ICAgICAgc25kX21zbmRfZGV2X2ZyZWUsCisJCX07CisKKwllcnIgPSByZXF1ZXN0X2lycShjaGlwLT5pcnEsIHNuZF9tc25kX2ludGVycnVwdCwgMCwgY2FyZC0+c2hvcnRuYW1lLAorCQkJICBjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDb3VsZG4ndCBncmFiIElSUSAlZFxuIiwgY2hpcC0+aXJxKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcmVxdWVzdF9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTywgY2FyZC0+c2hvcnRuYW1lKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFLCBjYXJkLT5zaG9ydG5hbWUpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiB1bmFibGUgdG8gZ3JhYiBtZW1vcnkgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIEJVRkZTSVpFIC0gMSk7CisJCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljaGlwLT5tYXBwZWRiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGNoaXAtPmJhc2UsIDB4ODAwMCk7CisJaWYgKCFjaGlwLT5tYXBwZWRiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiB1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQljaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgQlVGRlNJWkUgLSAxKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisJZXJyID0gc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJLyogUmVnaXN0ZXIgZGV2aWNlICovCisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwllcnIgPSBzbmRfbXNuZF9wY20oY2FyZCwgMCwgTlVMTCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IFBDTSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZG1peF9uZXcoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IE1peGVyIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCisJaWYgKG1wdV9pb1swXSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc3RydWN0IHNuZF9tcHU0MDEgKm1wdTsKKworCQllcnIgPSBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCisJCQkJCSAgbXB1X2lvWzBdLAorCQkJCQkgIE1QVTQwMV9NT0RFX0lOUFVUIHwKKwkJCQkJICBNUFU0MDFfTU9ERV9PVVRQVVQsCisJCQkJCSAgbXB1X2lycVswXSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJICAmY2hpcC0+cm1pZGkpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCQkiOiBlcnJvciBjcmVhdGluZyBuZXcgTWlkaSBkZXZpY2VcbiIpOworCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJCX0KKwkJbXB1ID0gY2hpcC0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCQltcHUtPm9wZW5faW5wdXQgPSBzbmRfbXNuZF9tcHU0MDFfb3BlbjsKKwkJbXB1LT5jbG9zZV9pbnB1dCA9IHNuZF9tc25kX21wdTQwMV9jbG9zZTsKKwkJbXB1LT5wcml2YXRlX2RhdGEgPSBjaGlwOworCX0KKworCWRpc2FibGVfaXJxKGNoaXAtPmlycSk7CisJc25kX21zbmRfY2FsaWJyYXRlX2FkYyhjaGlwLCBjaGlwLT5wbGF5X3NhbXBsZV9yYXRlKTsKKwlzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoY2hpcCwgMCk7CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbGVhc2VfcmVnaW9uOgorCWlmIChjaGlwLT5tYXBwZWRiYXNlKQorCQlpb3VubWFwKGNoaXAtPm1hcHBlZGJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSk7CisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXNuZF91bmxvYWQoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWlvdW5tYXAoY2hpcC0+bWFwcGVkYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Cit9CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisKKy8qIFBpbm5hY2xlL0ZpamkgTG9naWNhbCBEZXZpY2UgQ29uZmlndXJhdGlvbiAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmcoaW50IGNmZywgaW50IHJlZywgaW50IHZhbHVlKQoreworCW91dGIocmVnLCBjZmcpOworCW91dGIodmFsdWUsIGNmZyArIDEpOworCWlmICh2YWx1ZSAhPSBpbmIoY2ZnICsgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogc25kX21zbmRfd3JpdGVfY2ZnOiBJL08gZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pbzAoaW50IGNmZywgaW50IG51bSwgdTE2IGlvKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VISSwgSElCWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8sIExPQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lvMShpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUhJLCBISUJZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTywgTE9CWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaXJxKGludCBjZmcsIGludCBudW0sIHUxNiBpcnEpCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JUlFfTlVNQkVSLCBMT0JZVEUoaXJxKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9UWVBFLCBJUlFUWVBFX0VER0UpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX21lbShpbnQgY2ZnLCBpbnQgbnVtLCBpbnQgbWVtKQoreworCXUxNiB3bWVtOworCisJbWVtID4+PSA4OworCXdtZW0gPSAodTE2KShtZW0gJiAweGZmZik7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEksIEhJQllURSh3bWVtKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VMTywgTE9CWVRFKHdtZW0pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHdtZW0gJiYgc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1DT05UUk9MLAorCQkJCSAgICAgICBNRU1UWVBFX0hJQUREUiB8IE1FTVRZUEVfMTZCSVQpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfYWN0aXZhdGVfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfQUNUSVZBVEUsIExEX0FDVElWQVRFKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGludCBjZmcsIGludCBudW0sIHUxNiBpbzAsCisJCQkJCQl1MTYgaW8xLCB1MTYgaXJxLCBpbnQgbWVtKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pbzAoY2ZnLCBudW0sIGlvMCkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lycShjZmcsIG51bSwgaXJxKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19tZW0oY2ZnLCBudW0sIG1lbSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGNmZywgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3Bpbm5hY2xlX2NmZ19yZXNldChpbnQgY2ZnKQoreworCWludCBpOworCisJLyogUmVzZXQgZGV2aWNlcyBpZiB0b2xkIHRvICovCisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IFJlc2V0dGluZyBhbGwgZGV2aWNlc1xuIik7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZywgaSwgMCwgMCwgMCwgMCkpCisJCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBtc25kX3Bpbm5hY2xlIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgbXNuZF9waW5uYWNsZSBzb3VuZGNhcmQuIik7CisKK3N0YXRpYyBsb25nIGlvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworc3RhdGljIGxvbmcgbWVtW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKworc3RhdGljIGxvbmcgY2ZnW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKy8qIEV4dHJhIFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiAoRGVmYXVsdDogRGlzYWJsZSkgKi8KK3N0YXRpYyBsb25nIGlkZV9pbzBbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGxvbmcgaWRlX2lvMVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IGlkZV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CisKK3N0YXRpYyBsb25nIGpveXN0aWNrX2lvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKKy8qIElmIHdlIGhhdmUgdGhlIGRpZ2l0YWwgZGF1Z2hlcmJvYXJkLi4uICovCitzdGF0aWMgaW50IGRpZ2l0YWxbU05EUlZfQ0FSRFNdOworCisvKiBFeHRyYSBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBpbnQgcmVzZXRbU05EUlZfQ0FSRFNdOworI2VuZGlmCisKK3N0YXRpYyBpbnQgd3JpdGVfbmRlbGF5W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAxIH07CisKK3N0YXRpYyBpbnQgY2FsaWJyYXRlX3NpZ25hbDsKKworI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgaXNhcG5wW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKK21vZHVsZV9wYXJhbV9hcnJheShpc2FwbnAsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc2FwbnAsICJJU0EgUG5QIGRldGVjdGlvbiBmb3Igc3BlY2lmaWVkIHNvdW5kY2FyZC4iKTsKKyNkZWZpbmUgaGFzX2lzYXBucCh4KSBpc2FwbnBbeF0KKyNlbHNlCisjZGVmaW5lIGhhc19pc2FwbnAoeCkgMAorI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gV2llc2UgPGFubmFiZWxsZXNnYXJkZW5AeWFob28uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlR1cnRsZSBCZWFjaCAiIExPTkdOQU1FICIgTGludXggRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoSU5JVENPREVGSUxFKTsKK01PRFVMRV9GSVJNV0FSRShQRVJNQ09ERUZJTEUpOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbywgIklPIHBvcnQgIyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtZW0sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KHdyaXRlX25kZWxheSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjYWxpYnJhdGVfc2lnbmFsLCBpbnQsIFNfSVJVR08pOworI2lmbmRlZiBNU05EX0NMQVNTSUMKK21vZHVsZV9wYXJhbV9hcnJheShkaWdpdGFsLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGNmZywgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkocmVzZXQsIGludCwgMCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pbzAsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pbzEsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGlkZV9pcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoam95c3RpY2tfaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworI2VuZGlmCisKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpb1tpXSA9PSBTTkRSVl9BVVRPX1BPUlQpCisJCXJldHVybiAwOworCisJaWYgKGlycVtpXSA9PSBTTkRSVl9BVVRPX1BPUlQgfHwgbWVtW2ldID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogaW8sIGlycSBhbmQgbWVtIG11c3QgYmUgc2V0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCisJaWYgKCEoaW9baV0gPT0gMHgyOTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI2MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjUwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNDAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIzMCB8fAorCSAgICAgIGlvW2ldID09IDB4MjIwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDNlMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogXCJpb1wiIC0gRFNQIEkvTyBiYXNlIG11c3QgYmUgc2V0ICIKKwkJCSIgdG8gMHgyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MCwgMHgyOTAsICIKKwkJCSJvciAweDNFMFxuIik7CisJCXJldHVybiAwOworCX0KKyNlbHNlCisJaWYgKGlvW2ldIDwgMHgxMDAgfHwgaW9baV0gPiAweDNlMCB8fCAoaW9baV0gJSAweDEwKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiBcImlvXCIgLSBEU1AgSS9PIGJhc2UgbXVzdCB3aXRoaW4gdGhlIHJhbmdlIDB4MTAwICIKKwkJCSJ0byAweDNFMCBhbmQgbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDB4MTBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlpZiAoIShpcnFbaV0gPT0gNSB8fAorCSAgICAgIGlycVtpXSA9PSA3IHx8CisJICAgICAgaXJxW2ldID09IDkgfHwKKwkgICAgICBpcnFbaV0gPT0gMTAgfHwKKwkgICAgICBpcnFbaV0gPT0gMTEgfHwKKwkgICAgICBpcnFbaV0gPT0gMTIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkiOiBcImlycVwiIC0gbXVzdCBiZSBzZXQgdG8gNSwgNywgOSwgMTAsIDExIG9yIDEyXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCEobWVtW2ldID09IDB4YjAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhjODAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGQwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZDgwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhlMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGU4MDAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBcIm1lbVwiIC0gbXVzdCBiZSBzZXQgdG8gIgorCQkgICAgICAgIjB4YjAwMDAsIDB4YzgwMDAsIDB4ZDAwMDAsIDB4ZDgwMDAsIDB4ZTAwMDAgb3IgIgorCQkgICAgICAgIjB4ZTgwMDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGNmZ1tpXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IEFzc3VtaW5nIFBuUCBtb2RlXG4iKTsKKwl9IGVsc2UgaWYgKGNmZ1tpXSAhPSAweDI1MCAmJiBjZmdbaV0gIT0gMHgyNjAgJiYgY2ZnW2ldICE9IDB4MjcwKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkJIjogQ29uZmlnIHBvcnQgbXVzdCBiZSAweDI1MCwgMHgyNjAgb3IgMHgyNzAgIgorCQkJIihvciB1bnNwZWNpZmllZCBmb3IgUG5QIG1vZGUpXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCWludCBlcnI7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcDsKKworCWlmIChoYXNfaXNhcG5wKGlkeCkgfHwgY2ZnW2lkeF0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBBc3N1bWluZyBQblAgbW9kZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX21zbmQpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlzd2l0Y2ggKGlycVtpZHhdKSB7CisJY2FzZSA1OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzU7IGJyZWFrOworCWNhc2UgNzoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV83OyBicmVhazsKKwljYXNlIDk6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfOTsgYnJlYWs7CisJY2FzZSAxMDoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMDsgYnJlYWs7CisJY2FzZSAxMToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMTsgYnJlYWs7CisJY2FzZSAxMjoKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV8xMjsgYnJlYWs7CisJfQorCisJc3dpdGNoIChtZW1baWR4XSkgeworCWNhc2UgMHhiMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9CMDAwOyBicmVhazsKKwljYXNlIDB4YzgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fQzgwMDsgYnJlYWs7CisJY2FzZSAweGQwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0QwMDA7IGJyZWFrOworCWNhc2UgMHhkODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9EODAwOyBicmVhazsKKwljYXNlIDB4ZTAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRTAwMDsgYnJlYWs7CisJY2FzZSAweGU4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0U4MDA7IGJyZWFrOworCX0KKyNlbHNlCisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IE5vbi1QblAgbW9kZTogY29uZmlndXJpbmcgYXQgcG9ydCAweCVseFxuIiwKKwkJCWNmZ1tpZHhdKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oY2ZnW2lkeF0sIDIsICJQaW5uYWNsZS9GaWppIENvbmZpZyIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENvbmZpZyBwb3J0IDB4JWx4IGNvbmZsaWN0XG4iLAorCQkJICAgY2ZnW2lkeF0pOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHJlc2V0W2lkeF0pCisJCWlmIChzbmRfbXNuZF9waW5uYWNsZV9jZmdfcmVzZXQoY2ZnW2lkeF0pKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBjZmdfZXJyb3I7CisJCX0KKworCS8qIERTUCAqLworCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAwLAorCQkJCQkgaW9baWR4XSwgMCwKKwkJCQkJIGlycVtpZHhdLCBtZW1baWR4XSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGNmZ19lcnJvcjsKKworCS8qIFRoZSBmb2xsb3dpbmcgYXJlIFBpbm5hY2xlIHNwZWNpZmljICovCisKKwkvKiBNUFUgKi8KKwlpZiAobXB1X2lvW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIG1wdV9pcnFbaWR4XSAhPSBTTkRSVl9BVVRPX0lSUSkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIE1QVSB0byBJL08gMHglbHggSVJRICVkXG4iLAorCQkgICAgICAgbXB1X2lvW2lkeF0sIG1wdV9pcnFbaWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAxLAorCQkJCQkJIG1wdV9pb1tpZHhdLCAwLAorCQkJCQkJIG1wdV9pcnFbaWR4XSwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKworCS8qIElERSAqLworCWlmIChpZGVfaW8wW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIGlkZV9pbzFbaWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgaWRlX2lycVtpZHhdICE9IFNORFJWX0FVVE9fSVJRKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgSURFIHRvIEkvTyAweCVseCwgMHglbHggSVJRICVkXG4iLAorCQkgICAgICAgaWRlX2lvMFtpZHhdLCBpZGVfaW8xW2lkeF0sIGlkZV9pcnFbaWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAyLAorCQkJCQkJIGlkZV9pbzBbaWR4XSwgaWRlX2lvMVtpZHhdLAorCQkJCQkJIGlkZV9pcnFbaWR4XSwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKworCS8qIEpveXN0aWNrICovCisJaWYgKGpveXN0aWNrX2lvW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgam95c3RpY2sgdG8gSS9PIDB4JWx4XG4iLAorCQkgICAgICAgam95c3RpY2tfaW9baWR4XSk7CisJCWVyciA9IHNuZF9tc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNmZ1tpZHhdLCAzLAorCQkJCQkJIGpveXN0aWNrX2lvW2lkeF0sIDAsCisJCQkJCQkgMCwgMCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gY2ZnX2Vycm9yOworCX0KKwlyZWxlYXNlX3JlZ2lvbihjZmdbaWR4XSwgMik7CisKKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCXNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoY2hpcCk7CisjaWZkZWYgTVNORF9DTEFTU0lDCisJY2hpcC0+dHlwZSA9IG1zbmRDbGFzc2ljOworI2Vsc2UKKwljaGlwLT50eXBlID0gbXNuZFBpbm5hY2xlOworI2VuZGlmCisJY2hpcC0+aW8gPSBpb1tpZHhdOworCWNoaXAtPmlycSA9IGlycVtpZHhdOworCWNoaXAtPmJhc2UgPSBtZW1baWR4XTsKKworCWNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPSBjYWxpYnJhdGVfc2lnbmFsID8gMSA6IDA7CisJY2hpcC0+cmVjc3JjID0gMDsKKwljaGlwLT5kc3BxX2RhdGFfYnVmZiA9IERTUFFfREFUQV9CVUZGOworCWNoaXAtPmRzcHFfYnVmZl9zaXplID0gRFNQUV9CVUZGX1NJWkU7CisJaWYgKHdyaXRlX25kZWxheVtpZHhdKQorCQljbGVhcl9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKwllbHNlCisJCXNldF9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGRpZ2l0YWxbaWR4XSkKKwkJc2V0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCWVyciA9IHNuZF9tc25kX3Byb2JlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFByb2JlIGZhaWxlZFxuIik7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX21zbmRfYXR0YWNoKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEF0dGFjaCBmYWlsZWRcbiIpOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlyZXR1cm4gMDsKKworI2lmbmRlZiBNU05EX0NMQVNTSUMKK2NmZ19lcnJvcjoKKwlyZWxlYXNlX3JlZ2lvbihjZmdbaWR4XSwgMik7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9tc25kX2lzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzbmRfbXNuZF91bmxvYWQoZGV2X2dldF9kcnZkYXRhKHBkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgREVWX05BTUUgIm1zbmQtcGlubmFjbGUiCisKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfbXNuZF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9tc25kX2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX21zbmRfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX21zbmRfaXNhX3JlbW92ZSksCisJLyogRklYTUU6IHN1c3BlbmQsIHJlc3VtZSAqLworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERFVl9OQU1FCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKK3sKKwlzdGF0aWMgaW50IGlkeDsKKwlzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldjsKKwlzdHJ1Y3QgcG5wX2RldiAqbXB1X2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9tc25kICpjaGlwOworCWludCByZXQ7CisKKwlmb3IgKCA7IGlkeCA8IFNORFJWX0NBUkRTOyBpZHgrKykgeworCQlpZiAoaGFzX2lzYXBucChpZHgpKQorCQkJYnJlYWs7CisJfQorCWlmIChpZHggPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgcm9vbSBmb3IgYW5vdGhlciBzb3VuZCBjYXJkIC4uLgorCSAqLworCXBucF9kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShwY2FyZCwgcGlkLT5kZXZzWzBdLmlkLCBOVUxMKTsKKwlpZiAoIXBucF9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXB1X2RldiA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKHBjYXJkLCBwaWQtPmRldnNbMV0uaWQsIE5VTEwpOworCWlmICghbXB1X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXBucF9pc19hY3RpdmUocG5wX2RldikgJiYgcG5wX2FjdGl2YXRlX2RldihwbnBfZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNuZF9waW5uYWNsZTogZGV2aWNlIGlzIGluYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoIXBucF9pc19hY3RpdmUobXB1X2RldikgJiYgcG5wX2FjdGl2YXRlX2RldihtcHVfZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXNuZF9waW5uYWNsZTogTVBVIGRldmljZSBpcyBpbmFjdGl2ZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBuZXcgQUxTQSBzb3VuZCBjYXJkIGVudHJ5LCBpbiBhbnRpY2lwYXRpb24KKwkgKiBvZiBkZXRlY3Rpbmcgb3VyIGhhcmR3YXJlIC4uLgorCSAqLworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX21zbmQpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPmNhcmQgPSBjYXJkOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOworCisJLyoKKwkgKiBSZWFkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgb2ZmIHRoZSBJU0EgUG5QIGJ1cyAuLi4KKwkgKi8KKwlpb1tpZHhdID0gcG5wX3BvcnRfc3RhcnQocG5wX2RldiwgMCk7CisJaXJxW2lkeF0gPSBwbnBfaXJxKHBucF9kZXYsIDApOworCW1lbVtpZHhdID0gcG5wX21lbV9zdGFydChwbnBfZGV2LCAwKTsKKwltcHVfaW9baWR4XSA9IHBucF9wb3J0X3N0YXJ0KG1wdV9kZXYsIDApOworCW1wdV9pcnFbaWR4XSA9IHBucF9pcnEobXB1X2RldiwgMCk7CisKKwlzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKGNoaXApOworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWNoaXAtPnR5cGUgPSBtc25kQ2xhc3NpYzsKKyNlbHNlCisJY2hpcC0+dHlwZSA9IG1zbmRQaW5uYWNsZTsKKyNlbmRpZgorCWNoaXAtPmlvID0gaW9baWR4XTsKKwljaGlwLT5pcnEgPSBpcnFbaWR4XTsKKwljaGlwLT5iYXNlID0gbWVtW2lkeF07CisKKwljaGlwLT5jYWxpYnJhdGVfc2lnbmFsID0gY2FsaWJyYXRlX3NpZ25hbCA/IDEgOiAwOworCWNoaXAtPnJlY3NyYyA9IDA7CisJY2hpcC0+ZHNwcV9kYXRhX2J1ZmYgPSBEU1BRX0RBVEFfQlVGRjsKKwljaGlwLT5kc3BxX2J1ZmZfc2l6ZSA9IERTUFFfQlVGRl9TSVpFOworCWlmICh3cml0ZV9uZGVsYXlbaWR4XSkKKwkJY2xlYXJfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisJZWxzZQorCQlzZXRfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChkaWdpdGFsW2lkeF0pCisJCXNldF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwlyZXQgPSBzbmRfbXNuZF9wcm9iZShjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBQcm9iZSBmYWlsZWRcbiIpOworCQlnb3RvIF9yZWxlYXNlX2NhcmQ7CisJfQorCisJcmV0ID0gc25kX21zbmRfYXR0YWNoKGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEF0dGFjaCBmYWlsZWRcbiIpOworCQlnb3RvIF9yZWxlYXNlX2NhcmQ7CisJfQorCisJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOworCSsraWR4OworCXJldHVybiAwOworCitfcmVsZWFzZV9jYXJkOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9tc25kX3BucF9yZW1vdmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkKQoreworCXNuZF9tc25kX3VubG9hZChwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCkpOworCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBOVUxMKTsKK30KKworc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKK3N0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIG1zbmRfcG5waWRzW10gPSB7CisJLyogUGlubmFjbGUgUG5QICovCisJeyAuaWQgPSAiQlZKMDQ0MCIsIC5kZXZzID0geyB7ICJUQlMwMDAwIiB9LCB7ICJUQlMwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICIiIH0JLyogZW5kICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucF9jYXJkLCBtc25kX3BucGlkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIG1zbmRfcG5wY19kcml2ZXIgPSB7CisJLmZsYWdzID0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKKwkubmFtZSA9ICJtc25kX3Bpbm5hY2xlIiwKKwkuaWRfdGFibGUgPSBtc25kX3BucGlkcywKKwkucHJvYmUgPSBzbmRfbXNuZF9wbnBfZGV0ZWN0LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXNuZF9wbnBfcmVtb3ZlKSwKK307CisjZW5kaWYgLyogQ09ORklHX1BOUCAqLworCitzdGF0aWMgaW50IF9faW5pdCBzbmRfbXNuZF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9tc25kX2RyaXZlciwgU05EUlZfQ0FSRFMpOworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAoIWVycikKKwkJaXNhX3JlZ2lzdGVyZWQgPSAxOworCisJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZtc25kX3BucGNfZHJpdmVyKTsKKwlpZiAoIWVycikKKwkJcG5wX3JlZ2lzdGVyZWQgPSAxOworCisJaWYgKGlzYV9yZWdpc3RlcmVkKQorCQllcnIgPSAwOworI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNuZF9tc25kX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKHBucF9yZWdpc3RlcmVkKQorCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmbXNuZF9wbnBjX2RyaXZlcik7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQorI2VuZGlmCisJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX21zbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc25kX21zbmRfaW5pdCk7Cittb2R1bGVfZXhpdChzbmRfbXNuZF9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzE4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kX3Bpbm5hY2xlLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfUElOTkFDTEVfSAorI2RlZmluZSBfX01TTkRfUElOTkFDTEVfSAorCisjZGVmaW5lIERTUF9OVU1JTwkJCQkweDA4CisKKyNkZWZpbmUgSVJFR19MT0dERVZJQ0UJCQkJMHgwNworI2RlZmluZSBJUkVHX0FDVElWQVRFCQkJCTB4MzAKKyNkZWZpbmUgTERfQUNUSVZBVEUJCQkJMHgwMQorI2RlZmluZSBMRF9ESVNBQ1RJVkFURQkJCQkweDAwCisjZGVmaW5lIElSRUdfRUVDT05UUk9MCQkJCTB4M0YKKyNkZWZpbmUgSVJFR19NRU1CQVNFSEkJCQkJMHg0MAorI2RlZmluZSBJUkVHX01FTUJBU0VMTwkJCQkweDQxCisjZGVmaW5lIElSRUdfTUVNQ09OVFJPTAkJCQkweDQyCisjZGVmaW5lIElSRUdfTUVNUkFOR0VISQkJCQkweDQzCisjZGVmaW5lIElSRUdfTUVNUkFOR0VMTwkJCQkweDQ0CisjZGVmaW5lIE1FTVRZUEVfOEJJVAkJCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfMTZCSVQJCQkJMHgwMgorI2RlZmluZSBNRU1UWVBFX1JBTkdFCQkJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV9ISUFERFIJCQkJMHgwMQorI2RlZmluZSBJUkVHX0lPMF9CQVNFSEkJCQkJMHg2MAorI2RlZmluZSBJUkVHX0lPMF9CQVNFTE8JCQkJMHg2MQorI2RlZmluZSBJUkVHX0lPMV9CQVNFSEkJCQkJMHg2MgorI2RlZmluZSBJUkVHX0lPMV9CQVNFTE8JCQkJMHg2MworI2RlZmluZSBJUkVHX0lSUV9OVU1CRVIJCQkJMHg3MAorI2RlZmluZSBJUkVHX0lSUV9UWVBFCQkJCTB4NzEKKyNkZWZpbmUgSVJRVFlQRV9ISUdICQkJCTB4MDIKKyNkZWZpbmUgSVJRVFlQRV9MT1cJCQkJMHgwMAorI2RlZmluZSBJUlFUWVBFX0xFVkVMCQkJCTB4MDEKKyNkZWZpbmUgSVJRVFlQRV9FREdFCQkJCTB4MDAKKworI2RlZmluZQlIUF9EU1BSCQkJCQkweDA0CisjZGVmaW5lCUhQX0JMS1MJCQkJCTB4MDQKKworI2RlZmluZSBIUERTUFJFU0VUX09GRgkJCQkyCisjZGVmaW5lIEhQRFNQUkVTRVRfT04JCQkJMAorCisjZGVmaW5lIEhQQkxLU0VMXzAJCQkJMgorI2RlZmluZSBIUEJMS1NFTF8xCQkJCTMKKworI2RlZmluZQlISU1UX0RBVF9PRkYJCQkJMHgwMworCisjZGVmaW5lCUhJRFNQX1BMQVlfVU5ERVIJCQkweDAwCisjZGVmaW5lCUhJRFNQX0lOVF9QTEFZX1VOREVSCQkJMHgwMQorI2RlZmluZQlISURTUF9TU0lfVFhfVU5ERVIgIAkJCTB4MDIKKyNkZWZpbmUgSElEU1BfUkVDUV9PVkVSRkxPVwkJCTB4MDgKKyNkZWZpbmUgSElEU1BfSU5UX1JFQ09SRF9PVkVSCQkJMHgwOQorI2RlZmluZSBISURTUF9TU0lfUlhfT1ZFUkZMT1cJCQkweDBhCisKKyNkZWZpbmUJSElEU1BfTUlESV9JTl9PVkVSCQkJMHgxMAorCisjZGVmaW5lCUhJRFNQX01JRElfRlJBTUVfRVJSCQkJMHgxMQorI2RlZmluZQlISURTUF9NSURJX1BBUklUWV9FUlIJCQkweDEyCisjZGVmaW5lCUhJRFNQX01JRElfT1ZFUlJVTl9FUlIJCQkweDEzCisKKyNkZWZpbmUgSElEU1BfSU5QVVRfQ0xJUFBJTkcJCQkweDIwCisjZGVmaW5lCUhJRFNQX01JWF9DTElQUElORwkJCTB4MzAKKyNkZWZpbmUgSElEU1BfREFUX0lOX09GRgkJCTB4MjEKKworI2RlZmluZSBUSU1FX1BST19SRVNFVF9ET05FCQkJMHgwMjhBCisjZGVmaW5lIFRJTUVfUFJPX1NZU0VYCQkJCTB4MDAxRQorI2RlZmluZSBUSU1FX1BST19SRVNFVAkJCQkweDAwMzIKKworI2RlZmluZSBEQVJfQlVGRl9TSVpFCQkJCTB4MTAwMAorCisjZGVmaW5lIE1JRFFfQlVGRl9TSVpFCQkJCTB4ODAwCisjZGVmaW5lIERTUFFfQlVGRl9TSVpFCQkJCTB4NUEwCisKKyNkZWZpbmUgRFNQUV9EQVRBX0JVRkYJCQkJMHg3ODYwCisKKyNkZWZpbmUgTU9QX1dBVkVIRFIJCQkJMAorI2RlZmluZSBNT1BfRVhUT1VUCQkJCTEKKyNkZWZpbmUgTU9QX0hXSU5JVAkJCQkweGZlCisjZGVmaW5lIE1PUF9OT05FCQkJCTB4ZmYKKyNkZWZpbmUgTU9QX01BWAkJCQkJMQorCisjZGVmaW5lIE1JUF9FWFRJTgkJCQkwCisjZGVmaW5lIE1JUF9XQVZFSERSCQkJCTEKKyNkZWZpbmUgTUlQX0hXSU5JVAkJCQkweGZlCisjZGVmaW5lIE1JUF9NQVgJCQkJCTEKKworLyogUGlubmFjbGUvRmlqaSBTTUEgQ29tbW9uIERhdGEgKi8KKyNkZWZpbmUgU01BX3dDdXJyUGxheUJ5dGVzCQkJMHgwMDAwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEJ5dGVzCQkJMHgwMDAyCisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xMZWZ0CQkJMHgwMDA0CisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xSaWdodAkJCTB4MDAwNgorI2RlZmluZSBTTUFfd0N1cnJJblZvbExlZnQJCQkweDAwMDgKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xSaWdodAkJCTB4MDAwYQorI2RlZmluZSBTTUFfd0N1cnJNSGRyVm9sTGVmdAkJCTB4MDAwYworI2RlZmluZSBTTUFfd0N1cnJNSGRyVm9sUmlnaHQJCQkweDAwMGUKKyNkZWZpbmUgU01BX2R3Q3VyclBsYXlQaXRjaAkJCTB4MDAxMAorI2RlZmluZSBTTUFfZHdDdXJyUGxheVJhdGUJCQkweDAwMTQKKyNkZWZpbmUgU01BX3dDdXJyTUlESUlPUGF0Y2gJCQkweDAwMTgKKyNkZWZpbmUgU01BX3dDdXJyUGxheUZvcm1hdAkJCTB4MDAxYQorI2RlZmluZSBTTUFfd0N1cnJQbGF5U2FtcGxlU2l6ZQkJCTB4MDAxYworI2RlZmluZSBTTUFfd0N1cnJQbGF5Q2hhbm5lbHMJCQkweDAwMWUKKyNkZWZpbmUgU01BX3dDdXJyUGxheVNhbXBsZVJhdGUJCQkweDAwMjAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkRm9ybWF0CQkJMHgwMDIyCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZFNhbXBsZVNpemUJCTB4MDAyNAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRDaGFubmVscwkJCTB4MDAyNgorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRTYW1wbGVSYXRlCQkweDAwMjgKKyNkZWZpbmUgU01BX3dDdXJyRFNQU3RhdHVzRmxhZ3MJCQkweDAwMmEKKyNkZWZpbmUgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzCQkweDAwMmMKKyNkZWZpbmUgU01BX3dDdXJySW5wdXRUYWdCaXRzCQkJMHgwMDJlCisjZGVmaW5lIFNNQV93Q3VyckxlZnRQZWFrCQkJMHgwMDMwCisjZGVmaW5lIFNNQV93Q3VyclJpZ2h0UGVhawkJCTB4MDAzMgorI2RlZmluZSBTTUFfYk1pY1BvdFBvc0xlZnQJCQkweDAwMzQKKyNkZWZpbmUgU01BX2JNaWNQb3RQb3NSaWdodAkJCTB4MDAzNQorI2RlZmluZSBTTUFfYk1pY1BvdE1heExlZnQJCQkweDAwMzYKKyNkZWZpbmUgU01BX2JNaWNQb3RNYXhSaWdodAkJCTB4MDAzNworI2RlZmluZSBTTUFfYkluUG90UG9zTGVmdAkJCTB4MDAzOAorI2RlZmluZSBTTUFfYkluUG90UG9zUmlnaHQJCQkweDAwMzkKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NMZWZ0CQkJMHgwMDNhCisjZGVmaW5lIFNNQV9iQXV4UG90UG9zUmlnaHQJCQkweDAwM2IKKyNkZWZpbmUgU01BX2JJblBvdE1heExlZnQJCQkweDAwM2MKKyNkZWZpbmUgU01BX2JJblBvdE1heFJpZ2h0CQkJMHgwMDNkCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4TGVmdAkJCTB4MDAzZQorI2RlZmluZSBTTUFfYkF1eFBvdE1heFJpZ2h0CQkJMHgwMDNmCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhNZXRob2QJCQkweDAwNDAKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhNZXRob2QJCQkweDAwNDEKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbExlZnQJCQkweDAwNDIKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbFJpZ2h0CQkJMHgwMDQ0CisjZGVmaW5lIFNNQV93Q2FsRnJlcUF0b0QJCQkweDAwNDYKKyNkZWZpbmUgU01BX3dDdXJyQXV4Vm9sTGVmdAkJCTB4MDA0OAorI2RlZmluZSBTTUFfd0N1cnJBdXhWb2xSaWdodAkJCTB4MDA0YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MVZvbExlZnQJCQkweDAwNGMKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFWb2xSaWdodAkJCTB4MDA0ZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlZvbExlZnQJCQkweDAwNTAKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJWb2xSaWdodAkJCTB4MDA1MgorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1ZvbExlZnQJCQkweDAwNTQKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNWb2xSaWdodAkJCTB4MDA1NgorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFZvbExlZnQJCQkweDAwNTgKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRWb2xSaWdodAkJCTB4MDA1YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MVBlYWtMZWZ0CQkJMHgwMDVjCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxUGVha1JpZ2h0CQkJMHgwMDVlCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyUGVha0xlZnQJCQkweDAwNjAKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJQZWFrUmlnaHQJCQkweDAwNjIKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNQZWFrTGVmdAkJCTB4MDA2NAorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1BlYWtSaWdodAkJCTB4MDA2NgorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFBlYWtMZWZ0CQkJMHgwMDY4CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0UGVha1JpZ2h0CQkJMHgwMDZhCisjZGVmaW5lIFNNQV93Q3VyclBsYXlQZWFrTGVmdAkJCTB4MDA2YworI2RlZmluZSBTTUFfd0N1cnJQbGF5UGVha1JpZ2h0CQkJMHgwMDZlCisjZGVmaW5lIFNNQV93Q3VyckRBVFNSCQkJCTB4MDA3MAorI2RlZmluZSBTTUFfd0N1cnJEQVRSWENITkwJCQkweDAwNzIKKyNkZWZpbmUgU01BX3dDdXJyREFUVFhDSE5MCQkJMHgwMDc0CisjZGVmaW5lIFNNQV93Q3VyckRBVFJYUmF0ZQkJCTB4MDA3NgorI2RlZmluZSBTTUFfZHdEU1BQbGF5Q291bnQJCQkweDAwNzgKKyNkZWZpbmUgU01BX19zaXplCQkJCTB4MDA3YworCisjZGVmaW5lIElOSVRDT0RFRklMRQkJInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIKKyNkZWZpbmUgUEVSTUNPREVGSUxFCQkidHVydGxlYmVhY2gvcG5kc3Blcm0uYmluIgorI2RlZmluZSBMT05HTkFNRQkJIk11bHRpU291bmQgKFBpbm5hY2xlL0ZpamkpIgorCisjZW5kaWYgLyogX19NU05EX1BJTk5BQ0xFX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQwNThhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jCkBAIC0wLDAgKzEsMzQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkgIG1zbmRfcGlubmFjbGVfbWl4ZXIuYyAgLSAgZGVzY3JpcHRpb24KKwkJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGJlZ2luCQk6IEZyZSBKdW4gNyAyMDAyCisgICAgY29weXJpZ2h0IAkJOiAoQykgMjAwMiBieSBrYXJzdGVuIHdpZXNlCisgICAgZW1haWwJCTogYW5uYWJlbGxlc2dhcmRlbkB5YWhvby5kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJICAgICAgCQkgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCQkJCSAgICoKKyAqCQkJCQkJCQkJICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgIm1zbmQuaCIKKyNpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmgiCisKKworI2RlZmluZSBNU05EX01JWEVSX1ZPTFVNRQkwCisjZGVmaW5lIE1TTkRfTUlYRVJfUENNCQkxCisjZGVmaW5lIE1TTkRfTUlYRVJfQVVYCQkyCS8qIElucHV0IHNvdXJjZSAxICAoYXV4MSkgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9JTUlYCQkzCS8qICBSZWNvcmRpbmcgbW9uaXRvciAgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9TWU5USAk0CisjZGVmaW5lIE1TTkRfTUlYRVJfU1BFQUtFUgk1CisjZGVmaW5lIE1TTkRfTUlYRVJfTElORQkJNgorI2RlZmluZSBNU05EX01JWEVSX01JQwkJNworI2RlZmluZSBNU05EX01JWEVSX1JFQ0xFVgkxMQkvKiBSZWNvcmRpbmcgbGV2ZWwgKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9JR0FJTgkxMgkvKiBJbnB1dCBnYWluICovCisjZGVmaW5lIE1TTkRfTUlYRVJfT0dBSU4JMTMJLyogT3V0cHV0IGdhaW4gKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9ESUdJVEFMCTE3CS8qIERpZ2l0YWwgKGlucHV0KSAxICovCisKKy8qCURldmljZSBtYXNrIGJpdHMJKi8KKworI2RlZmluZSBNU05EX01BU0tfVk9MVU1FCSgxIDw8IE1TTkRfTUlYRVJfVk9MVU1FKQorI2RlZmluZSBNU05EX01BU0tfU1lOVEgJCSgxIDw8IE1TTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIE1TTkRfTUFTS19QQ00JCSgxIDw8IE1TTkRfTUlYRVJfUENNKQorI2RlZmluZSBNU05EX01BU0tfU1BFQUtFUgkoMSA8PCBNU05EX01JWEVSX1NQRUFLRVIpCisjZGVmaW5lIE1TTkRfTUFTS19MSU5FCQkoMSA8PCBNU05EX01JWEVSX0xJTkUpCisjZGVmaW5lIE1TTkRfTUFTS19NSUMJCSgxIDw8IE1TTkRfTUlYRVJfTUlDKQorI2RlZmluZSBNU05EX01BU0tfSU1JWAkJKDEgPDwgTVNORF9NSVhFUl9JTUlYKQorI2RlZmluZSBNU05EX01BU0tfUkVDTEVWCSgxIDw8IE1TTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBNU05EX01BU0tfSUdBSU4JCSgxIDw8IE1TTkRfTUlYRVJfSUdBSU4pCisjZGVmaW5lIE1TTkRfTUFTS19PR0FJTgkJKDEgPDwgTVNORF9NSVhFUl9PR0FJTikKKyNkZWZpbmUgTVNORF9NQVNLX0FVWAkJKDEgPDwgTVNORF9NSVhFUl9BVVgpCisjZGVmaW5lIE1TTkRfTUFTS19ESUdJVEFMCSgxIDw8IE1TTkRfTUlYRVJfRElHSVRBTCkKKworc3RhdGljIGludCBzbmRfbXNuZG1peF9pbmZvX211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsKKwkJIkFuYWxvZyIsICJNQVNTIiwgIlNQRElGIiwKKwl9OworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpdGVtcyA9IHRlc3RfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncykgPyAzIDogMjsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBpdGVtczsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSBpdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IGl0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X2dldF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCS8qIE1TTkRfTUFTS19JTUlYIGlzIHRoZSBkZWZhdWx0ICovCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisKKwlpZiAoY2hpcC0+cmVjc3JjICYgTVNORF9NQVNLX1NZTlRIKSB7CisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAxOworCX0gZWxzZSBpZiAoKGNoaXAtPnJlY3NyYyAmIE1TTkRfTUFTS19ESUdJVEFMKSAmJgorCQkgdGVzdF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKSkgeworCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwl9CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3NldF9tdXgoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgdmFsKQoreworCXVuc2lnbmVkIG5ld3JlY3NyYzsKKwlpbnQgY2hhbmdlOworCXVuc2lnbmVkIGNoYXIgbXNuZGJ5dGU7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX0lNSVg7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9BTkFfSU47CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX1NZTlRIOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfU1lOVEhfSU47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbmV3cmVjc3JjID0gTVNORF9NQVNLX0RJR0lUQUw7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9EQVRfSU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGFuZ2UgID0gbmV3cmVjc3JjICE9IGNoaXAtPnJlY3NyYzsKKwlpZiAoY2hhbmdlKSB7CisJCWNoYW5nZSA9IDA7CisJCWlmICghc25kX21zbmRfc2VuZF93b3JkKGNoaXAsIDAsIDAsIG1zbmRieXRlKSkKKwkJCWlmICghc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfQVVYX1JFUSkpIHsKKwkJCQljaGlwLT5yZWNzcmMgPSBuZXdyZWNzcmM7CisJCQkJY2hhbmdlID0gMTsKKwkJCX0KKwl9CisJcmV0dXJuIGNoYW5nZTsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9wdXRfbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlyZXR1cm4gc25kX21zbmRtaXhfc2V0X211eChtc25kLCB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDEwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtc25kLT5sZWZ0X2xldmVsc1thZGRyXSAqIDEwMDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAvPSAweEZGRkY7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBtc25kLT5yaWdodF9sZXZlbHNbYWRkcl0gKiAxMDA7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gLz0gMHhGRkZGOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSB1cGRhdGVfdm9sbShhLCBiKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRldygoZGV2LT5sZWZ0X2xldmVsc1thXSA+PiAxKSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCkgLyAweGZmZmYsCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjYiMjTGVmdCk7CQkJXAorCQl3cml0ZXcoKGRldi0+cmlnaHRfbGV2ZWxzW2FdID4+IDEpICAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI2IjI1JpZ2h0KTsJCQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgdXBkYXRlX3BvdG0oZCwgcywgYXIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGViKChkZXYtPmxlZnRfbGV2ZWxzW2RdID4+IDgpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNMZWZ0KTsJCQlcCisJCXdyaXRlYigoZGV2LT5yaWdodF9sZXZlbHNbZF0gPj4gOCkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNSaWdodCk7CQkJXAorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgYXIpID09IDApCQlcCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOwlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgdXBkYXRlX3BvdChkLCBzLCBhcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZWIoZGV2LT5sZWZ0X2xldmVsc1tkXSA+PiA4LAkJCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjTGVmdCk7CQkJXAorCQl3cml0ZWIoZGV2LT5yaWdodF9sZXZlbHNbZF0gPj4gOCwJCQlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI1JpZ2h0KTsJCQlcCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBhcikgPT0gMCkJCVwKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CVwKKwl9IHdoaWxlICgwKTsKKworCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3NldChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgaW50IGQsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisJaW50IGJMZWZ0LCBiUmlnaHQ7CisJaW50IHdMZWZ0LCB3UmlnaHQ7CisJaW50IHVwZGF0ZW1hc3RlciA9IDA7CisKKwlpZiAoZCA+PSBMRVZFTF9FTlRSSUVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJMZWZ0ID0gbGVmdCAqIDB4ZmYgLyAxMDA7CisJd0xlZnQgPSBsZWZ0ICogMHhmZmZmIC8gMTAwOworCisJYlJpZ2h0ID0gcmlnaHQgKiAweGZmIC8gMTAwOworCXdSaWdodCA9IHJpZ2h0ICogMHhmZmZmIC8gMTAwOworCisJZGV2LT5sZWZ0X2xldmVsc1tkXSA9IHdMZWZ0OworCWRldi0+cmlnaHRfbGV2ZWxzW2RdID0gd1JpZ2h0OworCisJc3dpdGNoIChkKSB7CisJCS8qIG1hc3RlciB2b2x1bWUgdW5zY2FsZWQgY29udHJvbHMgKi8KKwljYXNlIE1TTkRfTUlYRVJfTElORToJCQkvKiBsaW5lIHBvdCBjb250cm9sICovCisJCS8qIHNjYWxlZCBieSBJTUlYIGluIGRpZ2l0YWwgbWl4ICovCisJCXdyaXRlYihiTGVmdCwgZGV2LT5TTUEgKyBTTUFfYkluUG90UG9zTGVmdCk7CisJCXdyaXRlYihiUmlnaHQsIGRldi0+U01BICsgU01BX2JJblBvdFBvc1JpZ2h0KTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIEhERVhBUl9JTl9TRVRfUE9UUykgPT0gMCkKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CisJCWJyZWFrOworCWNhc2UgTVNORF9NSVhFUl9NSUM6CQkJLyogbWljIHBvdCBjb250cm9sICovCisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogc2NhbGVkIGJ5IElNSVggaW4gZGlnaXRhbCBtaXggKi8KKwkJd3JpdGViKGJMZWZ0LCBkZXYtPlNNQSArIFNNQV9iTWljUG90UG9zTGVmdCk7CisJCXdyaXRlYihiUmlnaHQsIGRldi0+U01BICsgU01BX2JNaWNQb3RQb3NSaWdodCk7CisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBIREVYQVJfTUlDX1NFVF9QT1RTKSA9PSAwKQorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsKKwkJYnJlYWs7CisJY2FzZSBNU05EX01JWEVSX1ZPTFVNRToJCS8qIG1hc3RlciB2b2x1bWUgKi8KKwkJd3JpdGV3KHdMZWZ0LCBkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwkJd3JpdGV3KHdSaWdodCwgZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgTVNORF9NSVhFUl9BVVg6CQkJLyogYXV4IHBvdCBjb250cm9sICovCisJCS8qIHNjYWxlZCBieSBtYXN0ZXIgdm9sdW1lICovCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCS8qIGRpZ2l0YWwgY29udHJvbHMgKi8KKwljYXNlIE1TTkRfTUlYRVJfU1lOVEg6CQkJLyogc3ludGggdm9sIChkc3AgbWl4KSAqLworCWNhc2UgTVNORF9NSVhFUl9QQ006CQkJLyogcGNtIHZvbCAoZHNwIG1peCkgKi8KKwljYXNlIE1TTkRfTUlYRVJfSU1JWDoJCQkvKiBpbnB1dCBtb25pdG9yIChkc3AgbWl4KSAqLworCQkvKiBzY2FsZWQgYnkgbWFzdGVyIHZvbHVtZSAqLworCQl1cGRhdGVtYXN0ZXIgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1cGRhdGVtYXN0ZXIpIHsKKwkJLyogdXBkYXRlIG1hc3RlciB2b2x1bWUgc2NhbGVkIGNvbnRyb2xzICovCisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfUENNLCB3Q3VyclBsYXlWb2wpOworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX0lNSVgsIHdDdXJySW5Wb2wpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRQaW5uYWNsZSkKKwkJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfU1lOVEgsIHdDdXJyTUhkclZvbCk7CisJCXVwZGF0ZV9wb3RtKE1TTkRfTUlYRVJfQVVYLCBiQXV4UG90UG9zLCBIREVYQVJfQVVYX1NFVF9QT1RTKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxlZnQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAlIDEwMTsKKwlyaWdodCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICUgMTAxOworCXNwaW5fbG9ja19pcnFzYXZlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJY2hhbmdlID0gbXNuZC0+bGVmdF9sZXZlbHNbYWRkcl0gIT0gbGVmdAorCQl8fCBtc25kLT5yaWdodF9sZXZlbHNbYWRkcl0gIT0gcmlnaHQ7CisJc25kX21zbmRtaXhfc2V0KG1zbmQsIGFkZHIsIGxlZnQsIHJpZ2h0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworCisjZGVmaW5lIERVTU1ZX1ZPTFVNRSh4bmFtZSwgeGluZGV4LCBhZGRyKSBcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4aW5kZXgsIFwKKyAgLmluZm8gPSBzbmRfbXNuZG1peF92b2x1bWVfaW5mbywgXAorICAuZ2V0ID0gc25kX21zbmRtaXhfdm9sdW1lX2dldCwgLnB1dCA9IHNuZF9tc25kbWl4X3ZvbHVtZV9wdXQsIFwKKyAgLnByaXZhdGVfdmFsdWUgPSBhZGRyIH0KKworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21zbmRfY29udHJvbHNbXSA9IHsKK0RVTU1ZX1ZPTFVNRSgiTWFzdGVyIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfVk9MVU1FKSwKK0RVTU1ZX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfUENNKSwKK0RVTU1ZX1ZPTFVNRSgiQXV4IFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfQVVYKSwKK0RVTU1ZX1ZPTFVNRSgiTGluZSBWb2x1bWUiLCAwLCBNU05EX01JWEVSX0xJTkUpLAorRFVNTVlfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9NSUMpLAorRFVNTVlfVk9MVU1FKCJNb25pdG9yIiwJMCwgTVNORF9NSVhFUl9JTUlYKSwKK3sKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJLmluZm8gPSBzbmRfbXNuZG1peF9pbmZvX211eCwKKwkuZ2V0ID0gc25kX21zbmRtaXhfZ2V0X211eCwKKwkucHV0ID0gc25kX21zbmRtaXhfcHV0X211eCwKK30KK307CisKKworaW50IF9fZGV2aW5pdCBzbmRfbXNuZG1peF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCBlcnI7CisKKwlpZiAoc25kX0JVR19PTighY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5taXhlcl9sb2NrKTsKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiTVNORCBQaW5uYWNsZSBNaXhlciIpOworCisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9tc25kX2NvbnRyb2xzKTsgaWR4KyspCisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCisJCQkJICBzbmRfY3RsX25ldzEoc25kX21zbmRfY29udHJvbHMgKyBpZHgsIGNoaXApKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X25ldyk7CisKK3ZvaWQgc25kX21zbmRtaXhfc2V0dXAoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdXBkYXRlX3BvdChNU05EX01JWEVSX0xJTkUsIGJJblBvdFBvcywgSERFWEFSX0lOX1NFVF9QT1RTKTsKKwl1cGRhdGVfcG90bShNU05EX01JWEVSX0FVWCwgYkF1eFBvdFBvcywgSERFWEFSX0FVWF9TRVRfUE9UUyk7CisJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9QQ00sIHdDdXJyUGxheVZvbCk7CisJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9JTUlYLCB3Q3VyckluVm9sKTsKKwlpZiAoZGV2LT50eXBlID09IG1zbmRQaW5uYWNsZSkgeworCQl1cGRhdGVfcG90KE1TTkRfTUlYRVJfTUlDLCBiTWljUG90UG9zLCBIREVYQVJfTUlDX1NFVF9QT1RTKTsKKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9TWU5USCwgd0N1cnJNSGRyVm9sKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X3NldHVwKTsKKworaW50IHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhzdHJ1Y3Qgc25kX21zbmQgKmRldiwgaW50IHJlY3NyYykKK3sKKwlkZXYtPnJlY3NyYyA9IC0xOworCXJldHVybiBzbmRfbXNuZG1peF9zZXRfbXV4KGRldiwgcmVjc3JjKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcGwzc2EyLmMgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCmluZGV4IGI4NDhkMTAuLmVmOTUyNzlkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTE3OSwxMiArMTc5LDEzIEBACiAJdW5zaWduZWQgY2hhciByZXN1bHQ7CiAjaWYgMAogCW91dGIoMHgxZCwgcG9ydCk7CS8qIHBhc3N3b3JkICovCi0JcHJpbnRrKCJyZWFkIFsweCVseF0gPSAweCV4XG4iLCBwb3J0LCBpbmIocG9ydCkpOworCXByaW50ayhLRVJOX0RFQlVHICJyZWFkIFsweCVseF0gPSAweCV4XG4iLCBwb3J0LCBpbmIocG9ydCkpOwogI2VuZGlmCiAJb3V0YihyZWcsIGNoaXAtPnBvcnQpOwkvKiByZWdpc3RlciAqLwogCXJlc3VsdCA9IGluYihjaGlwLT5wb3J0ICsgMSk7CiAjaWYgMAotCXByaW50aygicmVhZCBbMHglbHhdID0gMHgleCBbMHgleF1cbiIsIHBvcnQsIHJlc3VsdCwgaW5iKHBvcnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicmVhZCBbMHglbHhdID0gMHgleCBbMHgleF1cbiIsCisJICAgICAgIHBvcnQsIHJlc3VsdCwgaW5iKHBvcnQpKTsKICNlbmRpZgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMsNyArMjM0LDEwIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCBncmFiIHBvcnQgMHglbHhcbiIsIHBvcnQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzbmRfcHJpbnRrKCJSRUcgMEEgPSAweCV4XG4iLCBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIDB4MGEpKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiUkVHIDBBID0gMHgleFxuIiwKKwkJICAgc25kX29wbDNzYTJfcmVhZChjaGlwLCAweDBhKSk7CisJKi8KIAljaGlwLT52ZXJzaW9uID0gMDsKIAl0bXAgPSBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIE9QTDNTQTJfTUlTQyk7CiAJaWYgKHRtcCA9PSAweGZmKSB7CkBAIC02MTksMjUgKzYyMywyOCBAQAogewogCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjYXJkKTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX29wbDNzYTJfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX29wbDNzYTJfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX29wbDNzYTIpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIk9QTDNTQTIiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiWWFtYWhhIE9QTDMtU0EyIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIllhbWFoYSBPUEwzLVNBIik7CiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCWNoaXAtPmlycSA9IC0xOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9vcGwzc2EyX2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wbDNzYTJfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNzI5LDkgKzczNiw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzk1LDkgKzgwMiw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtODc2LDkgKzg4Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKaW5kZXggNDQwNzU1Yy4uMDJlMzBkNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwpAQCAtMTIyOCw5ICsxMjI4LDEwIEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCi0JaWYgKCEoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBzbmRfbWlybykpKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9taXJvKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX21pcm9fZnJlZTsKIAltaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggMTk3MDZiMC4uNWNkNTU1MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0yNTIsNyArMjUyLDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBoYXJkd2FyZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI5NCw3ICsyOTQsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC0zMzYsNyArMzM2LDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzMCw3ICs0MzAsOCBAQAogCQl3c3NfYmFzZV9iaXRzID0gMHgwMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLCBjaGlwLT53c3NfYmFzZSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT53c3NfYmFzZSk7CiAJCWdvdG8gX19za2lwX2Jhc2U7CiAJfQogCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIHdzc19iYXNlX2JpdHMgPDwgNCwgMHgzMCk7CkBAIC00NTUsNyArNDU2LDcgQEAKIAkJaXJxX2JpdHMgPSAweDA0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgaXJxICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5pcnEpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGlycSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+aXJxKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIApAQCAtNDcwLDEzICs0NzEsMTQgQEAKIAkJZG1hX2JpdHMgPSAweDAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+ZG1hMSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPmRtYTEpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlpZiAoY2hpcC0+ZG1hMSA9PSBjaGlwLT5kbWEyKSB7Ci0JCXNuZF9wcmludGsoImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC00ODUsNyArNDg3LDggQEAKIAljYXNlIDE6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBkbWEyICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5kbWEyKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBkbWEyICMgJWQgbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+ZG1hMik7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAJZG1hX2JpdHMgfD0gMHgwNDsKQEAgLTUxNiw3ICs1MTksOCBAQAogCQkJbXB1X3BvcnRfYml0cyA9IDB4MDA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNuZF9wcmludGsoIk1QVS00MDEgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJNUFUtNDAxIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLAogCQkJCWNoaXAtPm1wdV9wb3J0KTsKIAkJCWdvdG8gX19za2lwX21wdTsKIAkJfQpAQCAtNTM1LDcgKzUzOSw3IEBACiAJCQltcHVfaXJxX2JpdHMgPSAweDAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzbmRfcHJpbnRrKCJNUFUtNDAxIGlycSAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJNUFUtNDAxIGlycSAjICVkIG5vdCB2YWxpZFxuIiwKIAkJCQljaGlwLT5tcHVfaXJxKTsKIAkJCWdvdG8gX19za2lwX21wdTsKIAkJfQpAQCAtNzI2LDcgKzczMCw3IEBACiAJaWYgKGNoaXAtPndzc19iYXNlID09IFNORFJWX0FVVE9fUE9SVCkgewogCQljaGlwLT53c3NfYmFzZSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChwb3NzaWJsZV9wb3J0cywgNCk7CiAJCWlmIChjaGlwLT53c3NfYmFzZSA8IDApIHsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgV1NTIHBvcnRcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KQEAgLTgxNSwxNCArODE5LDggQEAKIAkJCQkgICBjaGlwLT5mbV9wb3J0LCBjaGlwLT5mbV9wb3J0ICsgNCAtIDEpOwogCQl9CiAJCWlmIChvcGwzKSB7Ci0jaWZkZWYgQ1M0MjMxCi0JCQljb25zdCBpbnQgdDFkZXYgPSAxOwotI2Vsc2UKLQkJCWNvbnN0IGludCB0MWRldiA9IDA7Ci0jZW5kaWYKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgdDFkZXYsIHQxZGV2KzEpKSA8IDApCi0JCQkJcmV0dXJuIGVycm9yOwotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmc3ludGgpKSA8IDApCisJCQllcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmc3ludGgpOworCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CkBAIC04MzAsMTUgKzgyOCwxOCBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX29wdGk5eHhfY2FyZF9uZXcodm9pZCkKK3N0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfb3B0aTl4eF9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9vcHRpOXh4X2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCkBAIC04OTcsMTUgKzg5OCwxNSBAQAogI2lmIGRlZmluZWQoQ1M0MjMxKSB8fCBkZWZpbmVkKE9QVGk5M1gpCiAJaWYgKGRtYTIgPT0gU05EUlZfQVVUT19ETUEpIHsKIAkJaWYgKChkbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYTJzW2RtYTEgJSA0XSkpIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KICNlbmRpZgogCi0JY2FyZCA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX29wdGk5eHhfZGV0ZWN0KGNhcmQsIGNhcmQtPnByaXZhdGVfZGF0YSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtOTUwLDkgKzk1MSw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKCEgaXNhcG5wKQogCQlyZXR1cm4gLUVOT0RFVjsKLQljYXJkID0gc25kX29wdGk5eHhfY2FyZF9uZXcoKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWh3ID0gc25kX2NhcmRfb3B0aTl4eF9wbnAoY2hpcCwgcGNhcmQsIHBpZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvZXM5NjguYyBiL3NvdW5kL2lzYS9zYi9lczk2OC5jCmluZGV4IGM4YzhlMjEuLmNhZmMzYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9lczk2OC5jCisrKyBiL3NvdW5kL2lzYS9zYi9lczk2OC5jCkBAIC0xMDgsOSArMTA4LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY2FyZF9lczk2OCAqYWNhcmQ7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZXM5NjgpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9lczk2OCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2VzOTY4X3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2LmMgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCmluZGV4IDJjMjAxZjcuLjUxOWMzNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjE2LmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTYuYwpAQCAtMzI0LDE0ICszMjQsMTggQEAKICNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfc2IxNl9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9zYjE2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYjE2X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNDg5LDkgKzQ5Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCS8qIG5vbi1QblAgRk0gcG9ydCBhZGRyZXNzIGlzIGhhcmR3aXJlZCB3aXRoIGJhc2UgcG9ydCBhZGRyZXNzICovCkBAIC02MTAsOSArNjE0LDkgQEAKIAlmb3IgKCA7IGRldiA8IFNORFJWX0NBUkRTOyBkZXYrKykgewogCQlpZiAoIWVuYWJsZVtkZXZdIHx8ICFpc2FwbnBbZGV2XSkKIAkJCWNvbnRpbnVlOwotCQljYXJkID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2KTsKLQkJaWYgKCEgY2FyZCkKLQkJCXJldHVybiAtRU5PTUVNOworCQlyZXMgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOwogCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAkJaWYgKChyZXMgPSBzbmRfY2FyZF9zYjE2X3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCB8fAogCQkgICAgKHJlcyA9IHNuZF9zYjE2X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiOC5jIGIvc291bmQvaXNhL3NiL3NiOC5jCmluZGV4IGVhMDY4NzcuLjNjZDU3ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjguYworKysgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKQEAgLTEwMywxMCArMTAzLDEwIEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NiOCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2I4X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jIGIvc291bmQvaXNhL3NiL3NiX21peGVyLmMKaW5kZXggNDA2YTQzMS4uNDc1MjIwYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMKKysrIGIvc291bmQvaXNhL3NiL3NiX21peGVyLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9kdDAxOXhfaW5wdXRfc3dfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbNV0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRleHRzWzVdID0gewogCQkiQ0QiLCAiTWljIiwgIkxpbmUiLCAiU3ludGgiLCAiTWFzdGVyIgogCX07CiAKQEAgLTI2OSwxMiArMjY5LDczIEBACiB9CiAKIC8qCisgKiBBTFM0MDAwIG1vbm8gcmVjb3JkaW5nIGNvbnRyb2wgc3dpdGNoCisgKi8KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbM10gPSB7CisJCSJMIGNoYW4gb25seSIsICJSIGNoYW4gb25seSIsICJMIGNoLzIgKyBSIGNoLzIiCisJfTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMikKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NiICpzYiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgb3ZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPSBzbmRfc2JtaXhlcl9yZWFkKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID4+PSA2OworCWlmIChvdmFsID4gMikKKwkJb3ZhbCA9IDI7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gb3ZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NiICpzYiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjaGFuZ2U7CisJdW5zaWduZWQgY2hhciBudmFsLCBvdmFsOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID0gc25kX3NibWl4ZXJfcmVhZChzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwpOworCisJbnZhbCA9IChvdmFsICYgfigzIDw8IDYpKQorCSAgICAgfCAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA8PCA2KTsKKwljaGFuZ2UgPSBudmFsICE9IG92YWw7CisJaWYgKGNoYW5nZSkKKwkJc25kX3NibWl4ZXJfd3JpdGUoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCBudmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKy8qCiAgKiBTQlBSTyBpbnB1dCBtdWx0aXBsZXhlcgogICovCiAKIHN0YXRpYyBpbnQgc25kX3NiOG1peGVyX2luZm9fbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbM10gPSB7CiAJCSJNaWMiLCAiQ0QiLCAiTGluZSIKIAl9OwogCkBAIC00NDIsNiArNTAzLDEyIEBACiAJCQkuZ2V0ID0gc25kX2R0MDE5eF9pbnB1dF9zd19nZXQsCiAJCQkucHV0ID0gc25kX2R0MDE5eF9pbnB1dF9zd19wdXQsCiAJCX0sCisJCVtTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLXSA9IHsKKwkJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkJLmluZm8gPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2luZm8sCisJCQkuZ2V0ID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9nZXQsCisJCQkucHV0ID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9wdXQsCisJCX0sCiAJfTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CiAJaW50IGVycjsKQEAgLTYzNiw2ICs3MDMsOCBAQAogCX07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2R0MDE5eF9jb250cm9sc1tdID0geworCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKKwkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLwogCSZzbmRfZHQwMTl4X2N0bF9tYXN0ZXJfcGxheV92b2wsCiAJJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCwKIAkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wsCkBAIC02NjYsMTggKzczNSwyMSBAQAogLyoKICAqIEFMUzQwMDAgc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotLyogRklYTUU6IFNCX0FMUzQwMDBfTU9OT19JT19DVFJMIG5lZWRzIG91dHB1dCBzZWxlY3QgY3RybCEgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoID0KIAlTQl9TSU5HTEUoIk1hc3RlciBNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA1LCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9Ci0JU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBDYXB0dXJlIFJvdXRlIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDYsIDB4MDMpOwotLyogRklYTUU6IG1vbm8gcGxheWJhY2sgc3dpdGNoIGFsc28gYXZhaWxhYmxlIG9uIERUMDE5WD8gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUgPSB7CisJCS5uYW1lID0gIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLAorCQkudHlwZSA9IFNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKKwl9Owogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QgPQogCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfbG9vcGJhY2sgPQotCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2FuYWxvZ19sb29wYmFjayA9CisJU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2sgPQorCVNCX1NJTkdMRSgiRGlnaXRhbCBMb29wYmFjayBTd2l0Y2giLAorCQkgIFNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04sIDcsIDB4MDEpOwogLyogRklYTUU6IGZ1bmN0aW9uYWxpdHkgb2YgM0QgY29udHJvbHMgbWlnaHQgYmUgc3dhcHBlZCwgSSBkaWRuJ3QgZmluZAogICogYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gaWRlbnRpZnkgd2hhdCBpcyBzdXBwb3NlZCB0byBiZSB3aGF0ICovCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2ggPQpAQCAtNjk0LDYgKzc2Niw5IEBACiAJU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gV2lkZSIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgMCwgMHgwZik7CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2ggPQogCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2ggPQorCVNCX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIDhrSHogLyAyMGtIeiBMUEYgU3dpdGNoIiwKKwkJICBTQl9BTFM0MDAwX0ZNREFDLCA1LCAweDAxKTsKICNpZmRlZiBOT1RfQVZBSUxBQkxFCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX2ZtZGFjID0KIAlTQl9TSU5HTEUoIkZNREFDIFN3aXRjaCAoT3B0aW9uID8pIiwgU0JfQUxTNDAwMF9GTURBQywgMCwgMHgwMSk7CkBAIC03MDIsMzUgKzc3NywzNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2FsczQwMDBfY29udHJvbHNbXSA9IHsKLQkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfc3ludGhfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAotCSZzbmRfc2IxNl9jdGxfYXV0b19taWNfZ2FpbiwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwKLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfY3RsX21peGVyX2xvb3BiYWNrLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwKKwkJCQkJCS8qIEFMUzQwMDBhLlBERiByZWdzIHBhZ2UgKi8KKwkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwJCS8qIE1YMzAvMzEgMTIgKi8KKwkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCQkvKiBNWDMyLzMzIDEyICovCisJJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwJCS8qIE1YMzQvMzUgMTIvMTMgKi8KKwkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCQkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwJCS8qIE1YM0MgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAkJLyogTVgzNi8zNyAxMyAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwJCS8qIE1YMzgvMzkgMTMgKi8KKwkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCwJLyogTVg0RCAgICAxNiAqLworCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAkJLyogTVgzQSAgICAxMyAqLworCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCQkvKiBNWDNCICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwJCS8qIE1YM0YvNDAgMTUgKi8KKwkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAkJCS8qIE1YNDEvNDIgMTUgKi8KKwkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwgLyogTVg0QyAxNiAqLworCSZzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsIC8qIE1YNEIgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwJLyogTVg0QyAgICAxNiAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrLCAvKiBNWDREICAgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9kaWdpdGFsX2xvb3BiYWNrLCAvKiBDUjMgICAgMjEgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2gsCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcmF0aW8sCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZnJlcSwJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9kZWxheSwJCSAvKiBNWDUxICAgMTggKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2gsCS8qIE1YNTEgICAgMTggKi8KKwkmc25kX2FsczQwMDBfY3RsXzNkYl9mcmVxX2NvbnRyb2xfc3dpdGNoLAkvKiBNWDRGICAgIDE3ICovCiAjaWZkZWYgTk9UX0FWQUlMQUJMRQogCSZzbmRfYWxzNDAwMF9jdGxfZm1kYWMsCiAJJnNuZF9hbHM0MDAwX2N0bF9xc291bmQsCkBAIC05MDUsMTMgKzk4MiwxNCBAQAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgYWxzNDAwMF9zYXZlZF9yZWdzW10gPSB7CisJLyogcGxlYXNlIHZlcmlmeSBpbiBkc2hlZXQgd2hldGhlciByZWdzIHRvIGJlIGFkZGVkCisJICAgYXJlIGFjdHVhbGx5IHJlYWwgSC9XIG9yIGp1c3QgZHVtbXkgKi8KIAlTQl9EU1A0X01BU1RFUl9ERVYsIFNCX0RTUDRfTUFTVEVSX0RFViArIDEsCiAJU0JfRFNQNF9PVVRQVVRfU1csCiAJU0JfRFNQNF9QQ01fREVWLCBTQl9EU1A0X1BDTV9ERVYgKyAxLAogCVNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwKIAlTQl9EU1A0X1NZTlRIX0RFViwgU0JfRFNQNF9TWU5USF9ERVYgKyAxLAogCVNCX0RTUDRfQ0RfREVWLCBTQl9EU1A0X0NEX0RFViArIDEsCi0JU0JfRFNQNF9NSUNfQUdDLAogCVNCX0RTUDRfTUlDX0RFViwKIAlTQl9EU1A0X1NQRUFLRVJfREVWLAogCVNCX0RTUDRfSUdBSU5fREVWLCBTQl9EU1A0X0lHQUlOX0RFViArIDEsCkBAIC05MTksOCArOTk3LDEwIEBACiAJU0JfRFQwMTlYX09VVFBVVF9TVzIsCiAJU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsCiAJU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwKKwlTQl9BTFM0MDAwX0ZNREFDLAogCVNCX0FMUzQwMDBfM0RfU05EX0ZYLAogCVNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwKKwlTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLAogfTsKIAogc3RhdGljIHZvaWQgc2F2ZV9taXhlcihzdHJ1Y3Qgc25kX3NiICpjaGlwLCB1bnNpZ25lZCBjaGFyICpyZWdzLCBpbnQgbnVtX3JlZ3MpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2M2MDAwLmMgYi9zb3VuZC9pc2Evc2M2MDAwLmMKaW5kZXggY2EzNTkyNC4uNzgyMDEwNiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NjNjAwMC5jCisrKyBiL3NvdW5kL2lzYS9zYzYwMDAuYwpAQCAtNDg5LDkgKzQ4OSw5IEBACiAJY2hhciBfX2lvbWVtICp2bXNzX3BvcnQ7CiAKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewogCQl4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpOwpAQCAtNTc2LDEwICs1NzYsNiBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gT1BMIGRldmljZSBhdCAweCV4LTB4JXggP1xuIiwKIAkJCSAgIDB4Mzg4LCAweDM4OCArIDIpOwogCX0gZWxzZSB7Ci0JCWVyciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCAwLCAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl91bm1hcDI7Ci0KIAkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX3VubWFwMjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IDJjNzUwM2IuLjZmZTI3YjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMjQzLDkgKzI0Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfd3NzICpjaGlwOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAl4aXJxID0gaXJxW2Rldl07CiAJaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zc2NhcGUuYyBiL3NvdW5kL2lzYS9zc2NhcGUuYwppbmRleCA0OGExNmQ4Li42NjE4NzEyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc3NjYXBlLmMKKysrIGIvc291bmQvaXNhL3NzY2FwZS5jCkBAIC04OSw5ICs4OSw2IEBACiAjZW5kaWYKIAogCi0jZGVmaW5lIE1QVTQwMV9JTyhpKSAgICAgKChpKSArIDApCi0jZGVmaW5lIE1JRElfREFUQV9JTyhpKSAgKChpKSArIDApCi0jZGVmaW5lIE1JRElfQ1RSTF9JTyhpKSAgKChpKSArIDEpCiAjZGVmaW5lIEhPU1RfQ1RSTF9JTyhpKSAgKChpKSArIDIpCiAjZGVmaW5lIEhPU1RfREFUQV9JTyhpKSAgKChpKSArIDMpCiAjZGVmaW5lIE9ESUVfQUREUl9JTyhpKSAgKChpKSArIDQpCkBAIC0xMjksOSArMTI2LDYgQEAKICNkZWZpbmUgRE1BXzhCSVQgIDB4ODAKIAogCi0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9NU0IgICAgMHgxNgotI2RlZmluZSBBRDE4NDVfRlJFUV9TRUxfTFNCICAgIDB4MTcKLQogZW51bSBjYXJkX3R5cGUgewogCVNTQ0FQRSwKIAlTU0NBUEVfUE5QLApAQCAtMTQxLDggKzEzNSw2IEBACiBzdHJ1Y3Qgc291bmRzY2FwZSB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGlvX2Jhc2U7Ci0JdW5zaWduZWQgd3NzX2Jhc2U7Ci0JaW50IGNvZGVjX3R5cGU7CiAJaW50IGljX3R5cGU7CiAJZW51bSBjYXJkX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKQEAgLTMzMCw3ICszMjIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfbXB1NDAxKGNvbnN0IHN0cnVjdCBzbmRfbXB1NDAxICogbXB1KQogewotCXJldHVybiAoKGluYihNSURJX0NUUkxfSU8obXB1LT5wb3J0KSkgJiAweGMwKSA9PSAweDgwKTsKKwlyZXR1cm4gKChpbmIoTVBVNDAxQyhtcHUpKSAmIDB4YzApID09IDB4ODApOwogfQogCiAvKgpAQCAtMzM4LDcgKzMzMCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXNlX21wdTQwMShjb25zdCBzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSkKIHsKLQlvdXRiKDAsIE1JRElfREFUQV9JTyhtcHUtPnBvcnQpKTsKKwlvdXRiKDAsIE1QVTQwMUQobXB1KSk7CiB9CiAKIC8qCkBAIC0zOTYsMjAgKzM4OCwyMCBAQAogICovCiBzdGF0aWMgaW50IG9icF9zdGFydHVwX2FjayhzdHJ1Y3Qgc291bmRzY2FwZSAqcywgdW5zaWduZWQgdGltZW91dCkKIHsKLQl3aGlsZSAodGltZW91dCAhPSAwKSB7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHg7CiAKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJeCA9IGluYihIT1NUX0RBVEFfSU8ocy0+aW9fYmFzZSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWlmICgoeCAmIDB4ZmUpID09IDB4ZmUpCiAJCQlyZXR1cm4gMTsKIAotCQktLXRpbWVvdXQ7Ci0JfSAvKiB3aGlsZSAqLworCQltc2xlZXAoMTApOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMywyMCArNDE1LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgaG9zdF9zdGFydHVwX2FjayhzdHJ1Y3Qgc291bmRzY2FwZSAqcywgdW5zaWduZWQgdGltZW91dCkKIHsKLQl3aGlsZSAodGltZW91dCAhPSAwKSB7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHg7CiAKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJeCA9IGluYihIT1NUX0RBVEFfSU8ocy0+aW9fYmFzZSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWlmICh4ID09IDB4ZmUpCiAJCQlyZXR1cm4gMTsKIAotCQktLXRpbWVvdXQ7Ci0JfSAvKiB3aGlsZSAqLworCQltc2xlZXAoMTApOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMiwxMCArNTI0LDEwIEBACiAJICogZ2l2ZSBpdCA1IHNlY29uZHMgKG1heCkgLi4uCiAJICovCiAJcmV0ID0gMDsKLQlpZiAoIW9icF9zdGFydHVwX2FjayhzLCA1KSkgeworCWlmICghb2JwX3N0YXJ0dXBfYWNrKHMsIDUwMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gcmVzcG9uc2UgZnJvbSBvbi1ib2FyZCBwcm9jZXNzb3IgYWZ0ZXIgdXBsb2FkXG4iKTsKIAkJcmV0ID0gLUVBR0FJTjsKLQl9IGVsc2UgaWYgKCFob3N0X3N0YXJ0dXBfYWNrKHMsIDUpKSB7CisJfSBlbHNlIGlmICghaG9zdF9zdGFydHVwX2FjayhzLCA1MDAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IFNvdW5kU2NhcGUgZmFpbGVkIHRvIGluaXRpYWxpc2VcbiIpOwogCQlyZXQgPSAtRUFHQUlOOwogCX0KQEAgLTczMiwxMyArNzI0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlzZXRfaG9zdF9tb2RlX3Vuc2FmZShzLT5pb19iYXNlKTsKLQotCWlmIChob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9HRVRfTUlESV9WT0wsIDEwMCkpIHsKLQkJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhvc3RfcmVhZF9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCAxMDApOwotCX0KLQotCXNldF9taWRpX21vZGVfdW5zYWZlKHMtPmlvX2Jhc2UpOworCXVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzLT5taWRpX3ZvbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzMsNiArNzU5LDcgQEAKIAljaGFuZ2UgPSAoaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfU0VUX01JRElfVk9MLCAxMDApCiAJICAgICAgICAgICYmIGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgKCh1bnNpZ25lZCBjaGFyKSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLiB2YWx1ZVswXSkgJiAxMjcsIDEwMCkKIAkgICAgICAgICAgJiYgaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfWFhYX01JRElfVk9MLCAxMDApKTsKKwlzLT5taWRpX3ZvbCA9ICh1bnNpZ25lZCBjaGFyKSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTI3OwogICAgICAgX19za2lwX2NoYW5nZToKIAogCS8qCkBAIC04MTUsMTIgKzgwMiwxMSBAQAogICogUGVyZm9ybSBjZXJ0YWluIGFyY2FuZSBwb3J0LWNoZWNrcyB0byBzZWUgd2hldGhlciB0aGVyZQogICogaXMgYSBTb3VuZFNjYXBlIGJvYXJkIGx1cmtpbmcgYmVoaW5kIHRoZSBnaXZlbiBwb3J0cy4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgZGV0ZWN0X3NzY2FwZShzdHJ1Y3Qgc291bmRzY2FwZSAqcykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRldGVjdF9zc2NhcGUoc3RydWN0IHNvdW5kc2NhcGUgKnMsIGxvbmcgd3NzX2lvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgZDsKIAlpbnQgcmV0dmFsID0gMDsKLQlpbnQgY29kZWMgPSBzLT53c3NfYmFzZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAKQEAgLTgzNiwxMyArODIyLDExIEBACiAJaWYgKChkICYgMHg4MCkgIT0gMCkKIAkJZ290byBfZG9uZTsKIAotCWlmIChkID09IDApIHsKLQkJcy0+Y29kZWNfdHlwZSA9IDE7CisJaWYgKGQgPT0gMCkKIAkJcy0+aWNfdHlwZSA9IElDX09ESUU7Ci0JfSBlbHNlIGlmICgoZCAmIDB4NjApICE9IDApIHsKLQkJcy0+Y29kZWNfdHlwZSA9IDI7CisJZWxzZSBpZiAoKGQgJiAweDYwKSAhPSAwKQogCQlzLT5pY190eXBlID0gSUNfT1BVUzsKLQl9IGVsc2UKKwllbHNlCiAJCWdvdG8gX2RvbmU7CiAKIAlvdXRiKDB4ZmEsIE9ESUVfQUREUl9JTyhzLT5pb19iYXNlKSk7CkBAIC04NjIsMTAgKzg0NiwxMCBAQAogCXNzY2FwZV93cml0ZV91bnNhZmUocy0+aW9fYmFzZSwgR0FfSE1DVExfUkVHLCBkIHwgMHhjMCk7CiAKIAlpZiAocy0+dHlwZSA9PSBTU0NBUEVfVklWTykKLQkJY29kZWMgKz0gNDsKKwkJd3NzX2lvICs9IDQ7CiAJLyogd2FpdCBmb3IgV1NTIGNvZGVjICovCiAJZm9yIChkID0gMDsgZCA8IDUwMDsgZCsrKSB7Ci0JCWlmICgoaW5iKGNvZGVjKSAmIDB4ODApID09IDApCisJCWlmICgoaW5iKHdzc19pbykgJiAweDgwKSA9PSAwKQogCQkJYnJlYWs7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJbXNsZWVwKDEpOwpAQCAtOTU1LDgyICs5MzksNiBAQAogCiAKIC8qCi0gKiBPdmVycmlkZSBmb3IgdGhlIENTNDIzMSBwbGF5YmFjayBmb3JtYXQgZnVuY3Rpb24uCi0gKiBUaGUgQUQxODQ1IGhhcyBtdWNoIHNpbXBsZXIgZm9ybWF0IGFuZCByYXRlIHNlbGVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgYWQxODQ1X3BsYXliYWNrX2Zvcm1hdChzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwKLQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgICB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyoKLQkgKiBUaGUgQUQxODQ1IGNhbid0IGhhbmRsZSBzYW1wbGUgZnJlcXVlbmNpZXMKLQkgKiBvdXRzaWRlIG9mIDQga0haIHRvIDUwIGtIWgotCSAqLwotCWlmIChyYXRlID4gNTAwMDApCi0JCXJhdGUgPSA1MDAwMDsKLQllbHNlIGlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KLQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKLQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KLQkgKiByZWdpc3RlciBpcyBzZXQuCi0JICogCi0JICogTk9URTogV2Ugc2VlbSB0byBuZWVkIHRvIHdyaXRlIHRvIHRoZSBNU0IgYmVmb3JlIHRoZSBMU0IKLQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KLQkgKi8KLQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUExBWUJLX0ZPUk1BVCwgKGZvcm1hdCAmIDB4ZjApKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTVNCLCAodW5zaWduZWQgY2hhcikgKHJhdGUgPj4gOCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9MU0IsICh1bnNpZ25lZCBjaGFyKSByYXRlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZSBmb3IgdGhlIENTNDIzMSBjYXB0dXJlIGZvcm1hdCBmdW5jdGlvbi4gCi0gKiBUaGUgQUQxODQ1IGhhcyBtdWNoIHNpbXBsZXIgZm9ybWF0IGFuZCByYXRlIHNlbGVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgYWQxODQ1X2NhcHR1cmVfZm9ybWF0KHN0cnVjdCBzbmRfd3NzICpjaGlwLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyoKLQkgKiBUaGUgQUQxODQ1IGNhbid0IGhhbmRsZSBzYW1wbGUgZnJlcXVlbmNpZXMgCi0JICogb3V0c2lkZSBvZiA0IGtIWiB0byA1MCBrSFoKLQkgKi8KLQlpZiAocmF0ZSA+IDUwMDAwKQotCQlyYXRlID0gNTAwMDA7Ci0JZWxzZSBpZiAocmF0ZSA8IDQwMDApCi0JCXJhdGUgPSA0MDAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBwbGF5YmFjayBzdHJlYW0uCi0JICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCi0JICogdGhlIENBUFRVUkVfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KLQkgKiByZWdpc3RlciBpcyBzZXQuCi0JICoKLQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgotCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgotCSAqLwotCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoZm9ybWF0ICYgMHhmMCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9NU0IsICh1bnNpZ25lZCBjaGFyKSAocmF0ZSA+PiA4KSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX0xTQiwgKHVuc2lnbmVkIGNoYXIpIHJhdGUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKICAqIENyZWF0ZSBhbiBBRDE4NDUgUENNIHN1YmRldmljZSBvbiB0aGUgU291bmRTY2FwZS4gVGhlIEFEMTg0NQogICogaXMgdmVyeSBtdWNoIGxpa2UgYSBDUzQyMzEsIHdpdGggYSBmZXcgZXh0cmEgYml0cy4gV2Ugd2lsbAogICogdHJ5IHRvIHN1cHBvcnQgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZXh0cmEgYml0cyBieSBvdmVycmlkaW5nCkBAIC0xMDU1LDExICs5NjMsNiBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCi0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9FTkFCTEUgIDB4MDgKLQotI2RlZmluZSBBRDE4NDVfUFdSX0RPV05fQ1RSTCAgIDB4MWIKLSNkZWZpbmUgQUQxODQ1X0NSWVNfQ0xPQ0tfU0VMICAweDFkCi0KIC8qCiAgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBpcyBzZXQKICAqIGJ5IHRoZSBsb3dsZXZlbCBkcml2ZXIgLi4uCkBAIC0xMDc0LDcgKzk3Nyw2IEBACiAgKi8KIAogCQlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7Ci0JCQlpbnQgdmFsOwogCQkJLyoKIAkJCSAqIFRoZSBpbnB1dCBjbG9jayBmcmVxdWVuY3kgb24gdGhlIFNvdW5kU2NhcGUgbXVzdAogCQkJICogYmUgMTQuMzE4MTggTUh6LCBiZWNhdXNlIHdlIG11c3Qgc2V0IHRoaXMgcmVnaXN0ZXIKQEAgLTEwODIsMjIgKzk4NCwxMCBAQAogCQkJICovCiAJCQlzbmRfd3NzX21jZV91cChjaGlwKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0NSWVNfQ0xPQ0tfU0VMLCAweDIwKTsKKwkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9DTE9DSywgMHgyMCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAotCQkJLyoKLQkJCSAqIE1vcmUgY3VzdG9tIGNvbmZpZ3VyYXRpb246Ci0JCQkgKiBhKSBzZWxlY3QgIm1vZGUgMiIgYW5kIHByb3ZpZGUgYSBjdXJyZW50IGRyaXZlIG9mIDhtQQotCQkJICogYikgZW5hYmxlIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKGZvciBjYXB0dXJlL3BsYXliYWNrKQotCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9NSVNDX0lORk8sCi0JCQkJICAgIENTNDIzMV9NT0RFMiB8IDB4MTApOwotCQkJdmFsID0gc25kX3dzc19pbihjaGlwLCBBRDE4NDVfUFdSX0RPV05fQ1RSTCk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfUFdSX0RPV05fQ1RSTCwKLQkJCQkgICAgdmFsIHwgQUQxODQ1X0ZSRVFfU0VMX0VOQUJMRSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7CkBAIC0xMTEzLDExICsxMDAzLDEzIEBACiAJCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKIAkJCWdvdG8gX2Vycm9yOwogCQl9Ci0JCWVyciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCwgTlVMTCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHRpbWVyIGRldmljZSAiCi0JCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKLQkJCWdvdG8gX2Vycm9yOworCQlpZiAoY2hpcC0+aGFyZHdhcmUgIT0gV1NTX0hXX0FEMTg0OCkgeworCQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyB0aW1lciBkZXZpY2UgIgorCQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOworCQkJCWdvdG8gX2Vycm9yOworCQkJfQogCQl9CiAKIAkJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewpAQCAtMTEyOCw4ICsxMDIwLDYgQEAKIAkJCQkJCSAgICAiTUlESSBtaXhlciBjb250cm9sXG4iKTsKIAkJCQlnb3RvIF9lcnJvcjsKIAkJCX0KLQkJCWNoaXAtPnNldF9wbGF5YmFja19mb3JtYXQgPSBhZDE4NDVfcGxheWJhY2tfZm9ybWF0OwotCQkJY2hpcC0+c2V0X2NhcHR1cmVfZm9ybWF0ID0gYWQxODQ1X2NhcHR1cmVfZm9ybWF0OwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNvdW5kU2NhcGUiKTsKQEAgLTExNTcsNyArMTA0Nyw2IEBACiAJdW5zaWduZWQgZG1hX2NmZzsKIAl1bnNpZ25lZCBpcnFfY2ZnOwogCXVuc2lnbmVkIG1wdV9pcnFfY2ZnOwotCXVuc2lnbmVkIHhwb3J0OwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOwogCXN0cnVjdCByZXNvdXJjZSAqd3NzX3JlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE3NywxNSArMTA2NiwxNSBAQAogCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogSW52YWxpZCBJUlEgJWRcbiIsIG1wdV9pcnFbZGV2XSk7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCXhwb3J0ID0gcG9ydFtkZXZdOwogCiAJLyoKIAkgKiBHcmFiIElPIHBvcnRzIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHByb2JlIHNvIHRoYXQgd2UKIAkgKiBjYW4gZGV0ZWN0IGFuZCBjb250cm9sIHRoaXMgaGFyZHdhcmUgLi4uCiAJICovCi0JaW9fcmVzID0gcmVxdWVzdF9yZWdpb24oeHBvcnQsIDgsICJTb3VuZFNjYXBlIik7CisJaW9fcmVzID0gcmVxdWVzdF9yZWdpb24ocG9ydFtkZXZdLCA4LCAiU291bmRTY2FwZSIpOwogCWlmICghaW9fcmVzKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogY2FuJ3QgZ3JhYiBwb3J0IDB4JXhcbiIsIHhwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgInNzY2FwZTogY2FuJ3QgZ3JhYiBwb3J0IDB4JWx4XG4iLCBwb3J0W2Rldl0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAl3c3NfcmVzID0gTlVMTDsKQEAgLTEyMTIsMTAgKzExMDEsOSBAQAogCXNwaW5fbG9ja19pbml0KCZzc2NhcGUtPmZ3bG9jayk7CiAJc3NjYXBlLT5pb19yZXMgPSBpb19yZXM7CiAJc3NjYXBlLT53c3NfcmVzID0gd3NzX3JlczsKLQlzc2NhcGUtPmlvX2Jhc2UgPSB4cG9ydDsKLQlzc2NhcGUtPndzc19iYXNlID0gd3NzX3BvcnRbZGV2XTsKKwlzc2NhcGUtPmlvX2Jhc2UgPSBwb3J0W2Rldl07CiAKLQlpZiAoIWRldGVjdF9zc2NhcGUoc3NjYXBlKSkgeworCWlmICghZGV0ZWN0X3NzY2FwZShzc2NhcGUsIHdzc19wb3J0W2Rldl0pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBoYXJkd2FyZSBub3QgZGV0ZWN0ZWQgYXQgMHgleFxuIiwgc3NjYXBlLT5pb19iYXNlKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBfcmVsZWFzZV9kbWE7CkBAIC0xMjg4LDEyICsxMTc2LDExIEBACiAJfQogI2RlZmluZSBNSURJX0RFVk5VTSAgMAogCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKLQkJZXJyID0gY3JlYXRlX21wdTQwMShjYXJkLCBNSURJX0RFVk5VTSwKLQkJCQkgICAgTVBVNDAxX0lPKHhwb3J0KSwgbXB1X2lycVtkZXZdKTsKKwkJZXJyID0gY3JlYXRlX21wdTQwMShjYXJkLCBNSURJX0RFVk5VTSwgcG9ydFtkZXZdLCBtcHVfaXJxW2Rldl0pOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IEZhaWxlZCB0byBjcmVhdGUgIgotCQkJCQkiTVBVLTQwMSBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCQkJTVBVNDAxX0lPKHhwb3J0KSk7CisJCQkJCSJNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwKKwkJCQkJcG9ydFtkZXZdKTsKIAkJCWdvdG8gX3JlbGVhc2VfZG1hOwogCQl9CiAKQEAgLTEzNTcsMTAgKzEyNDQsMTAgQEAKIAlzdHJ1Y3Qgc291bmRzY2FwZSAqc3NjYXBlOwogCWludCByZXQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJc3NjYXBlID0gZ2V0X2NhcmRfc291bmRzY2FwZShjYXJkKTsKIAlzc2NhcGUtPnR5cGUgPSBTU0NBUEU7CkBAIC0xNDYyLDEwICsxMzQ5LDEwIEBACiAJICogQ3JlYXRlIGEgbmV3IEFMU0Egc291bmQgY2FyZCBlbnRyeSwgaW4gYW50aWNpcGF0aW9uCiAJICogb2YgZGV0ZWN0aW5nIG91ciBoYXJkd2FyZSAuLi4KIAkgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJc3NjYXBlID0gZ2V0X2NhcmRfc291bmRzY2FwZShjYXJkKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKaW5kZXggNGMwOTViYy4uYTM0YWU3YiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCkBAIC0zMzgsMTUgKzMzOCwxNiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX3dhdmVmcm9udF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzbmRfd2F2ZWZyb250X2NhcmRfdCAqYWNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcgKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgICBzaXplb2Yoc25kX3dhdmVmcm9udF9jYXJkX3QpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc25kX3dhdmVmcm9udF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlhY2FyZC0+d2F2ZWZyb250LmlycSA9IC0xOwpAQCAtMzU3LDcgKzM1OCw4IEBACiAJYWNhcmQtPndhdmVmcm9udC5jYXJkID0gY2FyZDsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfd2F2ZWZyb250X2ZyZWU7CiAKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTUxLDExICs1NTMsMTEgQEAKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCXNuZF9wcmludGsoInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IENTNDIzMiBwb3J0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChpY3MyMTE1X3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBJQ1MyMTE1IHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IElDUzIxMTUgcG9ydFxuIik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTU2Nyw5ICs1NjksOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfd2F2ZWZyb250X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNjE2LDkgKzYxOCw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoc25kX3dhdmVmcm9udF9wbnAgKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSA8IDApIHsKIAkJaWYgKGNzNDIzMl9wY21fcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKaW5kZXggNGM0MTA4Mi4uYmViMzEyYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCkBAIC02MzMsNyArNjMzLDcgQEAKIAkJd2J1ZlsxXSA9IGkgPj4gNzsKIAogCQlpZiAoc25kX3dhdmVmcm9udF9jbWQgKGRldiwgV0ZDX0lERU5USUZZX1NBTVBMRV9UWVBFLCByYnVmLCB3YnVmKSkgewotCQkJc25kX3ByaW50aygiY2Fubm90IGlkZW50aWZ5IHNhbXBsZSAiCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiY2Fubm90IGlkZW50aWZ5IHNhbXBsZSAiCiAJCQkJICAgInR5cGUgb2Ygc2xvdCAlZFxuIiwgaSk7CiAJCQlkZXYtPnNhbXBsZV9zdGF0dXNbaV0gPSBXRl9TVF9FTVBUWTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwppbmRleCAzZDZjNWYyLi41ZDJiYTFiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYworKysgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwpAQCAtMTgxLDI1ICsxODEsNiBAQAogCQl1ZGVsYXkoMTAwKTsKIH0KIAotc3RhdGljIHZvaWQgc25kX3dzc19vdXRtKHN0cnVjdCBzbmRfd3NzICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKLQkJCSAgICB1bnNpZ25lZCBjaGFyIG1hc2ssIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JdW5zaWduZWQgY2hhciB0bXAgPSAoY2hpcC0+aW1hZ2VbcmVnXSAmIG1hc2spIHwgdmFsdWU7Ci0KLQlzbmRfd3NzX3dhaXQoY2hpcCk7Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygib3V0bTogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7Ci0jZW5kaWYKLQljaGlwLT5pbWFnZVtyZWddID0gdG1wOwotCWlmICghY2hpcC0+Y2FsaWJyYXRlX211dGUpIHsKLQkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKLQkJd21iKCk7Ci0JCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdG1wKTsKLQkJbWIoKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHNuZF93c3NfZG91dChzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCiAJCQkgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKQEAgLTIxOSw3ICsyMDAsOCBAQAogCXNuZF93c3Nfd2FpdChjaGlwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXQ6IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAiCisJCQkgICAiLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwogI2VuZGlmCiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFRyksIHZhbHVlKTsKQEAgLTIzNSw3ICsyMTcsOCBAQAogCXNuZF93c3Nfd2FpdChjaGlwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJpbjogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXhcbiIsIHJlZyk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW46IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgIgorCQkJICAgIi0gcmVnID0gMHgleFxuIiwgcmVnKTsKICNlbmRpZgogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8IHJlZyk7CiAJbWIoKTsKQEAgLTI1Miw3ICsyMzUsNyBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdmFsKTsKIAljaGlwLT5laW1hZ2VbQ1M0MjM2X1JFRyhyZWcpXSA9IHZhbDsKICNpZiAwCi0JcHJpbnRrKCJleHQgb3V0IDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwgcmVnLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJleHQgb3V0IDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwgcmVnLCB2YWwpOwogI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfZXh0X291dCk7CkBAIC0yNjgsNyArMjUxLDggQEAKIAl7CiAJCXVuc2lnbmVkIGNoYXIgcmVzOwogCQlyZXMgPSB3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHKSk7Ci0JCXByaW50aygiZXh0IGluIDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwgcmVnLCByZXMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiZXh0IGluIDogcmVnID0gMHgleCwgdmFsID0gMHgleFxuIiwKKwkJICAgICAgIHJlZywgcmVzKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAjZW5kaWYKQEAgLTM5NCwxMyArMzc4LDE2IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm1jZV91cCAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJY2hpcC0+bWNlX2JpdCB8PSBDUzQyMzFfTUNFOwogCXRpbWVvdXQgPSB3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX3VwIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibWNlX3VwIFsweCVseF06ICIKKwkJCSAgICJzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsCisJCQkgICBjaGlwLT5wb3J0KTsKIAlpZiAoISh0aW1lb3V0ICYgQ1M0MjMxX01DRSkpCiAJCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwKIAkJCSBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CkBAIC00MTksNyArNDA2LDkgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm1jZV9kb3duIFsweCVseF0gLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIiwgKGxvbmcpQ1M0MjMxUChSRUdTRUwpKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfZG93biBbMHglbHhdIC0gIgorCQkJICAgImF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLAorCQkJICAgKGxvbmcpQ1M0MjMxUChSRUdTRUwpKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWNoaXAtPm1jZV9iaXQgJj0gfkNTNDIzMV9NQ0U7CkBAIC00MjcsNyArNDE2LDkgQEAKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICh0aW1lb3V0ID09IDB4ODApCi0JCXNuZF9wcmludGsoIm1jZV9kb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibWNlX2Rvd24gWzB4JWx4XTogIgorCQkJICAgInNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQpOwogCWlmICgodGltZW91dCAmIENTNDIzMV9NQ0UpID09IDAgfHwgIShjaGlwLT5oYXJkd2FyZSAmIGh3X21hc2spKQogCQlyZXR1cm47CiAKQEAgLTU2NSw3ICs1NTYsNyBAQAogCWlmIChjaGFubmVscyA+IDEpCiAJCXJmb3JtYXQgfD0gQ1M0MjMxX1NURVJFTzsKICNpZiAwCi0Jc25kX3ByaW50aygiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImdldF9mb3JtYXQ6IDB4JXggKG1vZGU9MHgleClcbiIsIGZvcm1hdCwgbW9kZSk7CiAjZW5kaWYKIAlyZXR1cm4gcmZvcm1hdDsKIH0KQEAgLTU4Nyw3ICs1NzgsMTUgQEAKIAkJCSAgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX1JJR0hUX0lOUFVUXSk7CiAJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTE9PUEJBQ0ssCiAJCQkgICAgIGNoaXAtPmltYWdlW0NTNDIzMV9MT09QQkFDS10pOworCX0gZWxzZSB7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTEVGVF9JTlBVVCwKKwkJCSAgICAgMCk7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfUklHSFRfSU5QVVQsCisJCQkgICAgIDApOworCQlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0xPT1BCQUNLLAorCQkJICAgICAweGZkKTsKIAl9CisKIAlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0FVWDFfTEVGVF9JTlBVVCwKIAkJICAgICBtdXRlIHwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FVWDFfTEVGVF9JTlBVVF0pOwogCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfQVVYMV9SSUdIVF9JTlBVVCwKQEAgLTYzMCw3ICs2MjksNiBAQAogCWludCBmdWxsX2NhbGliID0gMTsKIAogCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0NTNDIzMUEgfHwKIAkgICAgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTY0Niw2ICs2NDQsMjQgQEAKIAkJCWZ1bGxfY2FsaWIgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KSB7CisJCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJCS8qCisJCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBwbGF5YmFjayBzdHJlYW0uCisJCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQorCQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KKwkJICogcmVnaXN0ZXIgaXMgc2V0LgorCQkgKgorCQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgorCQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUExBWUJLX0ZPUk1BVCwgKHBkZnIgJiAweGYwKSk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9VUFJfRlJFUV9TRUwsIChyYXRlID4+IDgpICYgMHhmZik7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9MV1JfRlJFUV9TRUwsIHJhdGUgJiAweGZmKTsKKwkJZnVsbF9jYWxpYiA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogCWlmIChmdWxsX2NhbGliKSB7CiAJCXNuZF93c3NfbWNlX3VwKGNoaXApOwpAQCAtNjYzLDcgKzY3OSw2IEBACiAJCQl1ZGVsYXkoMTAwKTsJLyogdGhpcyBzZWVtcyB0byBoZWxwICovCiAJCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogfQogCkBAIC02NzUsNyArNjkwLDYgQEAKIAlpbnQgZnVsbF9jYWxpYiA9IDE7CiAKIAltdXRleF9sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19DUzQyMzFBIHx8CiAJICAgIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC02OTAsNiArNzA0LDI0IEBACiAJCQlmdWxsX2NhbGliID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkgeworCQl1bnNpZ25lZCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCQkvKgorCQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgY2FwdHVyZSBzdHJlYW0uCisJCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQorCQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KKwkJICogcmVnaXN0ZXIgaXMgc2V0LgorCQkgKgorCQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgorCQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUkVDX0ZPUk1BVCwgKGNkZnIgJiAweGYwKSk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9VUFJfRlJFUV9TRUwsIChyYXRlID4+IDgpICYgMHhmZik7CisJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9MV1JfRlJFUV9TRUwsIHJhdGUgJiAweGZmKTsKKwkJZnVsbF9jYWxpYiA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogCWlmIChmdWxsX2NhbGliKSB7CiAJCXNuZF93c3NfbWNlX3VwKGNoaXApOwpAQCAtNzE0LDcgKzc0Niw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogfQogCkBAIC03NzEsMTAgKzgwMiwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMSlcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDEpXG4iKTsKICNlbmRpZgogCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNzg5LDE4ICs4MjEsMjAgQEAKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDIpXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgyKVxuIik7CiAjZW5kaWYKIAogCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCWNoaXAtPmltYWdlW0NTNDIzMV9JRkFDRV9DVFJMXSAmPSB+Q1M0MjMxX0FVVE9DQUxJQjsKKwlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfSUZBQ0VfQ1RSTCwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdKTsKIAlzbmRfd3NzX291dChjaGlwLAogCQkgICAgQ1M0MjMxX0FMVF9GRUFUVVJFXzEsIGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDMpIC0gYWZlaSA9IDB4JXhcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwKIAkJICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKICNlbmRpZgogCkBAIC04MTcsNyArODUxLDcgQEAKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDQpXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICg0KVxuIik7CiAjZW5kaWYKIAogCXNuZF93c3NfbWNlX3VwKGNoaXApOwpAQCAtODI3LDkgKzg2MSwxMCBAQAogCQkJICAgIGNoaXAtPmltYWdlW0NTNDIzMV9SRUNfRk9STUFUXSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOworCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoNSlcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDUpXG4iKTsKICNlbmRpZgogfQogCkBAIC04ODUsOCArOTIwLDYgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuOwogCX0KLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwotCiAJLyogZGlzYWJsZSBJUlEgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAoIShjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykpCkBAIC05MTksOCArOTUyLDYgQEAKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFNUQVRVUyksIDApOwkvKiBjbGVhciBJUlEgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKLQogCWNoaXAtPm1vZGUgPSAwOwogCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiB9CkBAIC0xMTEzLDcgKzExNDQsNyBAQAogCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykKIAkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChTVEFUVVMpLCAwKTsKIAllbHNlCi0JCXNuZF93c3Nfb3V0bShjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgc3RhdHVzLCAwKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX0lSUV9TVEFUVVMsIHN0YXR1cyk7CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMjc4LDcgKzEzMDksOCBAQAogCQl9IGVsc2UgaWYgKHJldiA9PSAweDAzKSB7CiAJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzZCOwogCQl9IGVsc2UgewotCQkJc25kX3ByaW50aygidW5rbm93biBDUyBjaGlwIHdpdGggdmVyc2lvbiAweCV4XG4iLCByZXYpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICJ1bmtub3duIENTIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXhcbiIsIHJldik7CiAJCQlyZXR1cm4gLUVOT0RFVjsJCS8qIHVua25vd24gQ1M0MjMxIGNoaXA/ICovCiAJCX0KIAl9CkBAIC0xMzE0LDYgKzEzNDYsMTAgQEAKIAkJY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzJdID0KIAkJCWNoaXAtPmhhcmR3YXJlID09IFdTU19IV19JTlRFUldBVkUgPyAweGMyIDogMHgwMTsKIAl9CisJLyogZW5hYmxlIGZpbmUgZ3JhaW5lZCBmcmVxdWVuY3kgc2VsZWN0aW9uICovCisJaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpCisJCWNoaXAtPmltYWdlW0FEMTg0NV9QV1JfRE9XTl0gPSA4OworCiAJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJmNoaXAtPmltYWdlOwogCXJlZ251bSA9IChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykgPyAxNiA6IDMyOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CkBAIC0xMzQyLDcgKzEzNzgsMTAgQEAKIAkJCQljYXNlIDY6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM1IGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM1IGNoaXAgIgorCQkJCQkJIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsCisJCQkJCQlpZCk7CiAJCQkJfQogCQkJfSBlbHNlIGlmICgoaWQgJiAweDFmKSA9PSAweDBiKSB7CS8qIENTNDIzNi9CICovCiAJCQkJc3dpdGNoIChpZCA+PiA1KSB7CkBAIC0xMzUzLDcgKzEzOTIsMTAgQEAKIAkJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM2QjsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzYgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzYgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MDgpIHsJLyogQ1M0MjM3QiAqLwogCQkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzN0I7CkBAIC0xMzY0LDcgKzE0MDYsMTAgQEAKIAkJCQljYXNlIDc6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM3QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzN0IgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MDkpIHsJLyogQ1M0MjM4QiAqLwogCQkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzOEI7CkBAIC0xMzc0LDcgKzE0MTksMTAgQEAKIAkJCQljYXNlIDc6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM4QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzOEIgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MWUpIHsJLyogQ1M0MjM5ICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM5OwpAQCAtMTM4NCwxMCArMTQzMiwxNSBAQAogCQkJCWNhc2UgNjoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzkgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzkgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM2L0NTNDIzeEIgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgInVua25vd24gQ1M0MjM2L0NTNDIzeEIgY2hpcCAiCisJCQkJCSAgICIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNjE4LDcgKzE2NzEsOCBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygiZG93biBbMHglbHhdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtICIKKwkJCSAgICItIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOwogCWlmICgodGltZW91dCAmIENTNDIzMV9NQ0UpID09IDAgfHwKIAkgICAgIShjaGlwLT5oYXJkd2FyZSAmIChXU1NfSFdfQ1M0MjMxX01BU0sgfCBXU1NfSFdfQ1M0MjMyX01BU0spKSkgewogCQlyZXR1cm47CkBAIC0xNjI4LDcgKzE2ODIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgaW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKK2ludCBzbmRfd3NzX2ZyZWUoc3RydWN0IHNuZF93c3MgKmNoaXApCiB7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfY3BvcnQpOwpAQCAtMTY1MSw2ICsxNzA1LDcgQEAKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc25kX3dzc19mcmVlKTsKIAogc3RhdGljIGludCBzbmRfd3NzX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CkBAIC0xODIwLDcgKzE4NzUsOCBAQAogI2lmIDAKIAlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spIHsKIAkJaWYgKGNoaXAtPnJlc19jcG9ydCA9PSBOVUxMKQotCQkJc25kX3ByaW50aygiQ1M0MjMyIGNvbnRyb2wgcG9ydCBmZWF0dXJlcyBhcmUgbm90IGFjY2Vzc2libGVcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ1M0MjMyIGNvbnRyb2wgcG9ydCBmZWF0dXJlcyBhcmUgIgorCQkJCSAgICJub3QgYWNjZXNzaWJsZVxuIik7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvYXUxeDAwLmMgYi9zb3VuZC9taXBzL2F1MXgwMC5jCmluZGV4IDE4ODFjZWMuLjNlNzYzZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvYXUxeDAwLmMKKysrIGIvc291bmQvbWlwcy9hdTF4MDAuYwpAQCAtNjM2LDkgKzYzNiwxMCBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2F1MTAwMCAqYXUxMDAwOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldygtMSwgIkFDOTciLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfYXUxMDAwKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKC0xLCAiQUM5NyIsIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfYXUxMDAwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2F1MTAwMF9mcmVlOwogCWF1MTAwMCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKQEAgLTY3OCw3ICs2NzksNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXByaW50ayggS0VSTl9JTkZPICJBTFNBIEFDOTc6IERyaXZlciBJbml0aWFsaXplZFxuIiApOworCXByaW50ayhLRVJOX0lORk8gIkFMU0EgQUM5NzogRHJpdmVyIEluaXRpYWxpemVkXG4iKTsKIAlhdTEwMDBfY2FyZCA9IGNhcmQ7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL2hhbDIuYyBiL3NvdW5kL21pcHMvaGFsMi5jCmluZGV4IGRiNDk1YmUuLmM1MjY5MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvaGFsMi5jCisrKyBiL3NvdW5kL21pcHMvaGFsMi5jCkBAIC04NzgsOSArODc4LDkgQEAKIAlzdHJ1Y3Qgc25kX2hhbDIgKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IGhhbDJfY3JlYXRlKGNhcmQsICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCA0YzYzNTA0Li42NmYzYjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtOTM2LDkgKzkzNiw5IEBACiAJc3RydWN0IHNuZF9zZ2lvMmF1ZGlvICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfc2dpbzJhdWRpb19jcmVhdGUoY2FyZCwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODQ4LmMgYi9zb3VuZC9vc3MvYWQxODQ4LmMKaW5kZXggN2NmOTkxMy4uZDEyYmQ5OCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTg0OC5jCisrKyBiL3NvdW5kL29zcy9hZDE4NDguYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJd2hpbGUgKHRpbWVvdXQgPiAwICYmIChhZF9yZWFkKGRldmMsIDExKSAmIDB4MjApKQogCQl0aW1lb3V0LS07CiAJaWYgKGFkX3JlYWQoZGV2YywgMTEpICYgMHgyMCkKLQkJaWYgKCAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSkgfHwgKGRldmMtPm1vZGVsICE9IE1EXzE4NDVfU1NDQVBFKSkKKwkJaWYgKChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1KSAmJiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWQxODQ4OiBBdXRvIGNhbGlicmF0aW9uIHRpbWVkIG91dCgzKS5cbiIpOwogfQogCkBAIC0yMTA3LDcgKzIxMDcsNyBAQAogCXN3aXRjaCAoY21kKQogCXsKIAkJY2FzZSBBRDE4NDhfU0VUX1hUQUw6CS8qIENoYW5nZSBjbG9jayBmcmVxdWVuY3kgb2YgQUQxODQ1IChvbmx5ICkgKi8KLQkJCWlmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1IHx8IGRldmMtPm1vZGVsICE9IE1EXzE4NDVfU1NDQVBFKQorCQkJaWYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDUgJiYgZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2Yy0+bG9jayxmbGFncyk7CiAJCQlhZF9lbnRlcl9NQ0UoZGV2Yyk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCmluZGV4IDgxZTFmNDQuLjQxOTFhY2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCisrKyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCkBAIC0xNjI3LDcgKzE2MjcsOSBAQAogCQkJCSAgICBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9HRVRPREVMQVk6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXVkaW8uYyBiL3NvdW5kL29zcy9hdWRpby5jCmluZGV4IDg5YmQyN2EuLmI2OWMwNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdWRpby5jCisrKyBiL3NvdW5kL29zcy9hdWRpby5jCkBAIC00MzMsNyArNDMzLDkgQEAKIAkJCXJldHVybiBkbWFfaW9jdGwoZGV2LCBjbWQsIGFyZyk7CiAJCQogCQljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJCXJldHVybiAwOwogCiAJCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYWJ1Zi5jIGIvc291bmQvb3NzL2RtYWJ1Zi5jCmluZGV4IDFlOTBkNzYuLjFiZmNmN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFidWYuYworKysgYi9zb3VuZC9vc3MvZG1hYnVmLmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCQkJRE1BYnVmX2xhdW5jaF9vdXRwdXQoZGV2LCBkbWFwKTsKIAkJYWRldi0+ZG1hcF9vdXQtPmZsYWdzIHw9IERNQV9TWU5DSU5HOwogCQlhZGV2LT5kbWFwX291dC0+dW5kZXJydW5fY291bnQgPSAwOwotCQl3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmIG4rKyA8PSBhZGV2LT5kbWFwX291dC0+bmJ1ZnMgJiYgCisJCXdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgbisrIDwgYWRldi0+ZG1hcF9vdXQtPm5idWZzICYmCiAJCSAgICAgICBhZGV2LT5kbWFwX291dC0+cWxlbiAmJiBhZGV2LT5kbWFwX291dC0+dW5kZXJydW5fY291bnQgPT0gMCkgewogCQkJbG9uZyB0ID0gZG1hYnVmX3RpbWVvdXQoZG1hcCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFwLT5sb2NrLGZsYWdzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKaW5kZXggMzg5MzFmMi4uMWY0Nzc0MSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKQEAgLTE1MjQsNyArMTUyNCw3IEBACiAJLnNwZWVkCT0gODAwMAogfSA7CiAKLXN0YXRpYyBNQUNISU5FIG1hY2hUVCA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIE1BQ0hJTkUgbWFjaFRUID0gewogCS5uYW1lCQk9ICJBdGFyaSIsCiAJLm5hbWUyCQk9ICJUVCIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtMTU1Myw3ICsxNTUzLDcgQEAKIAkuY2FwYWJpbGl0aWVzCT0gIERTUF9DQVBfQkFUQ0gJLyogQXMgcGVyIFNORENUTF9EU1BfR0VUQ0FQUyAqLwogfTsKIAotc3RhdGljIE1BQ0hJTkUgbWFjaEZhbGNvbiA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIE1BQ0hJTkUgbWFjaEZhbGNvbiA9IHsKIAkubmFtZQkJPSAiQXRhcmkiLAogCS5uYW1lMgkJPSAiRkFMQ09OIiwKIAkuZG1hX2FsbG9jCT0gQXRhQWxsb2MsCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvcGFzMl9jYXJkLmMgYi9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKaW5kZXggMjVmM2EyMi4uN2YzNzdlYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3BhczJfY2FyZC5jCisrKyBiL3NvdW5kL29zcy9wYXMyX2NhcmQuYwpAQCAtMTU2LDkgKzE1Niw3IEBACiAJCQkJCQkgKiAweDgwCiAJCQkJCQkgKi8gLCAweEI4OCk7CiAKLQlwYXNfd3JpdGUoMHg4MAotCQkgIHwgam95c3RpY2s/MHg0MDowCi0JCSAgLDB4RjM4OCk7CisJcGFzX3dyaXRlKDB4ODAgfCAoam95c3RpY2sgPyAweDQwIDogMCksIDB4RjM4OCk7CiAKIAlpZiAocGFzX2lycSA8IDAgfHwgcGFzX2lycSA+IDE1KQogCXsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCAxNmVkMDY5Li4xNjUxN2E1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC00NTcsMTAgKzQ1Nyw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF92b2x1bWVfbW9ubyh1bnNpZ25lZCBfX3VzZXIgKnAsIGludCAqYWxlZnQpCitzdGF0aWMgaW50IHNldF92b2x1bWVfbW9ubyh1bnNpZ25lZCBfX3VzZXIgKnAsIHVuc2lnbmVkIGludCAqYWxlZnQpCiB7Ci0JaW50IGxlZnQ7Ci0JdW5zaWduZWQgdm9sdW1lOworCXVuc2lnbmVkIGludCBsZWZ0LCB2b2x1bWU7CiAJaWYgKGdldF91c2VyKHZvbHVtZSwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCQpAQCAtNDcxLDEwICs0NzAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfdm9sdW1lX3N0ZXJlbyh1bnNpZ25lZCBfX3VzZXIgKnAsIGludCAqYWxlZnQsIGludCAqYXJpZ2h0KQorc3RhdGljIGludCBzZXRfdm9sdW1lX3N0ZXJlbyh1bnNpZ25lZCBfX3VzZXIgKnAsCisJCQkgICAgIHVuc2lnbmVkIGludCAqYWxlZnQsCisJCQkgICAgIHVuc2lnbmVkIGludCAqYXJpZ2h0KQogewotCWludCBsZWZ0LCByaWdodDsKLQl1bnNpZ25lZCB2b2x1bWU7CisJdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0LCB2b2x1bWU7CiAJaWYgKGdldF91c2VyKHZvbHVtZSwgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMgYi9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKaW5kZXggNWMyMTVmNy4uYzc5ODc0NiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NlcXVlbmNlci5jCisrKyBiL3NvdW5kL29zcy9zZXF1ZW5jZXIuYwpAQCAtMjEyLDcgKzIxMiw2IEBACiB7CiAJdW5zaWduZWQgY2hhciBldmVudF9yZWNbRVZfU1pdLCBldl9jb2RlOwogCWludCBwID0gMCwgYywgZXZfc2l6ZTsKLQlpbnQgZXJyOwogCWludCBtb2RlID0gdHJhbnNsYXRlX21vZGUoZmlsZSk7CiAKIAlkZXYgPSBkZXYgPj4gNDsKQEAgLTI4NSw3ICsyODQsNyBAQAogCQl7CiAJCQlpZiAoIW1pZGlfb3BlbmVkW2V2ZW50X3JlY1syXV0pCiAJCQl7Ci0JCQkJaW50IG1vZGU7CisJCQkJaW50IGVyciwgbW9kZTsKIAkJCQlpbnQgZGV2ID0gZXZlbnRfcmVjWzJdOwogCiAJCQkJaWYgKGRldiA+PSBtYXhfbWlkaWRldiB8fCBtaWRpX2RldnNbZGV2XT09TlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBlNWQ0MjM5Li43OGNmYjY2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCkBAIC0xMzUsNyArMTM1LDkgQEAKIAkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTgsIChpbnQgKilhcmcpOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwppbmRleCA0MTU2MmVjLi4xZWRhYjdiIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCisrKyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKQEAgLTIyMDAsNyArMjIwMCw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92d3NuZC5jIGIvc291bmQvb3NzL3Z3c25kLmMKaW5kZXggNzhiOGFjYy4uMTg3ZjcyNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3Z3c25kLmMKKysrIGIvc291bmQvb3NzL3Z3c25kLmMKQEAgLTI2NzMsNyArMjY3Myw5IEBACiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CS8qIF9TSU8gICgnUCcsMTQpICovCiAJCURCR1goIlNORENUTF9EU1BfTk9OQkxPQ0tcbiIpOworCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgkJLyogX1NJTyAgKCdQJywgMCkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCmluZGV4IDQxZjg3MGYuLjYwNTVmZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKKysrIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwpAQCAtOTc1LDkgKzk3NSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfaGFybW9ueSAqaDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9oYXJtb255X2NyZWF0ZShjYXJkLCBwYWRldiwgJmgpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCA4MmI5YmRkLi5jYTI1ZTYxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNDAwLDYgKzQwMCwyNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2RqCiAKK2NvbmZpZyBTTkRfSU5ESUdPSU9YCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBJT3giCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gSW5kaWdvIElPeC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2lveAorCitjb25maWcgU05EX0lORElHT0RKWAorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBJbmRpZ28gREp4IgorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIEluZGlnbyBESnguCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29kangKKwogY29uZmlnIFNORF9FTVUxMEsxCiAJdHJpc3RhdGUgIkVtdTEwazEgKFNCIExpdmUhLCBBdWRpZ3ksIEUtbXUgQVBTKSIKIAlzZWxlY3QgRldfTE9BREVSCkBAIC03NDQsNyArNzY0LDggQEAKIAlzZWxlY3QgU05EX09YWUdFTl9MSUIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyIGFuZCBEMlguCisJICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIGFuZAorCSAgRXNzZW5jZSBTVFguCiAJICBTdXBwb3J0IGZvciB0aGUgSERBVjEuMyAoRGVsdXhlKSBpcyB2ZXJ5IGV4cGVyaW1lbnRhbC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGUyYjg0M2IuLjk3ZWUxMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogeyAweDQzNTI1OTcwLCAweGZmZmZmZmY4LCAiQ1M0MjAyIiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDM1ODU0MjEsIDB4ZmZmZmZmZmYsICJIU0QxMTI0NiIsCQlOVUxMLAkJTlVMTCB9LAkvLyBTbWFydE1DIElJCiB7IDB4NDM1ODU0MjgsIDB4ZmZmZmZmZjgsICJDeDIwNDY4IiwJCXBhdGNoX2NvbmV4YW50LAlOVUxMIH0sIC8vIFNtYXJ0QU1DIGZpeG1lOiB0aGUgbWFzayBtaWdodCBiZSBkaWZmZXJlbnQKK3sgMHg0MzU4NTQzMCwgMHhmZmZmZmZmZiwgIkN4MjA0NjgtMzEiLAkJcGF0Y2hfY29uZXhhbnQsIE5VTEwgfSwKIHsgMHg0MzU4NTQzMSwgMHhmZmZmZmZmZiwgIkN4MjA1NTEiLCAgICAgICAgICAgcGF0Y2hfY3gyMDU1MSwgIE5VTEwgfSwKIHsgMHg0NDU0MzAzMSwgMHhmZmZmZmZmMCwgIkRUMDM5OCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDQ1NGQ0MzI4LCAweGZmZmZmZmZmLCAiRU0yODAyOCIsCQlOVUxMLAkJTlVMTCB9LCAgLy8gc2FtZSBhcyBUUjI4MDI4PwpAQCAtMzgzLDcgKzM4NCw3IEBACiAKIEVYUE9SVF9TWU1CT0woc25kX2FjOTdfdXBkYXRlX2JpdHMpOwogCi0vKiBubyBsb2NrIHZlcnNpb24gLSBzZWUgc25kX2FjOTdfdXBkYXRfYml0cygpICovCisvKiBubyBsb2NrIHZlcnNpb24gLSBzZWUgc25kX2FjOTdfdXBkYXRlX2JpdHMoKSAqLwogaW50IHNuZF9hYzk3X3VwZGF0ZV9iaXRzX25vbG9jayhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKIAkJCQl1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKIHsKQEAgLTE2NDMsNyArMTY0NCwxMCBAQAogewogCWludCBlcnIsIGlkeDsKIAotCS8vcHJpbnRrKCJBQzk3X0dQSU9fQ0ZHID0gJXhcbiIsc25kX2FjOTdfcmVhZChhYzk3LEFDOTdfR1BJT19DRkcpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJBQzk3X0dQSU9fQ0ZHID0gJXhcbiIsCisJICAgICAgIHNuZF9hYzk3X3JlYWQoYWM5NyxBQzk3X0dQSU9fQ0ZHKSk7CisJKi8KIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fQ0ZHLCAweGZmZmYgJiB+KEFDOTdfR1BJT19MSU5FMV9PSCkpOwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19QT0xBUklUWSwgMHhmZmZmICYgfihBQzk3X0dQSU9fTElORTFfT0gpKTsKIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fU1RJQ0tZLCAweGZmZmYpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wcm9jLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYwppbmRleCAwNjBlYTU5Li43M2IxN2Q1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYwpAQCAtMTI1LDYgKzEyNSw4IEBACiAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBDSSBTdWJzeXMgRGV2aWNlOiAweCUwNHhcblxuIiwKICAgICAgICAgICAgICAgICAgICAgYWM5Ny0+c3Vic3lzdGVtX2RldmljZSk7CiAKKwlzbmRfaXByaW50ZihidWZmZXIsICJGbGFnczogJXhcbiIsIGFjOTctPmZsYWdzKTsKKwogCWlmICgoYWM5Ny0+ZXh0X2lkICYgQUM5N19FSV9SRVZfTUFTSykgPj0gQUM5N19FSV9SRVZfMjMpIHsKIAkJdmFsID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X0lOVF9QQUdJTkcpOwogCQlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCBBQzk3X0lOVF9QQUdJTkcsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggYTdmMzhlNi4uZDFmMjQyYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtOTk1LDEwICs5OTUsMTAgQEAKIAl9CiAKIAkvKiAoMikgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCS8qIFhYWCBSRVZJU0lUOiB3ZSBjYW4gcHJvYmFibHkgYWxsb2NhdGUgY2hpcCBpbiB0aGlzIGNhbGwgKi8KLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBRDE4ODkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQW5hbG9nIERldmljZXMgQUQxODg5Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMgYi9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKaW5kZXggMGY4MTlkZC4uZmQxMzVlMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYwpAQCAtNTEsNyArNTEsOCBAQAogCWludCBpZHg7CiAJCiAJZm9yIChpZHggPSAwOyBpZHggPCAweDE5OyBpZHgrKykKLQkJcHJpbnRrKCJhazQ1MzEgMHgleDogMHgleFxuIiwgaWR4LCBhazQ1MzEtPnJlZ3NbaWR4XSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJhazQ1MzEgMHgleDogMHgleFxuIiwKKwkJICAgICAgIGlkeCwgYWs0NTMxLT5yZWdzW2lkeF0pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCAxYTBmZDY1Li40ZWRmMjcwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yMTQyLDcgKzIxNDIsNyBAQAogewogCWludCBlcnI7CiAKLQlzbmRfYWxpX3ByaW50aygicmVzb3VjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOworCXNuZF9hbGlfcHJpbnRrKCJyZXNvdXJjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoY29kZWMtPnBjaSwgIkFMSSA1NDUxIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0yMTU0LDcgKzIxNTQsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAljb2RlYy0+aXJxID0gY29kZWMtPnBjaS0+aXJxOwotCXNuZF9hbGlfcHJpbnRrKCJyZXNvdWNlcyBhbGxvY2F0ZWQuXG4iKTsKKwlzbmRfYWxpX3ByaW50aygicmVzb3VyY2VzIGFsbG9jYXRlZC5cbiIpOwogCXJldHVybiAwOwogfQogc3RhdGljIGludCBzbmRfYWxpX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCkBAIC0yMzA3LDkgKzIzMDcsOSBAQAogCiAJc25kX2FsaV9wcmludGsoInByb2JlIC4uLlxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9hbGlfY3JlYXRlKGNhcmQsIHBjaSwgcGNtX2NoYW5uZWxzLCBzcGRpZiwgJmNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCA4ZGY2ODI0Li4wMDliNGM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC05MSw3ICs5MSw3IEBACiAjZGVmaW5lIERFQlVHX1BMQVlfUkVDCTAKIAogI2lmIERFQlVHX0NBTExTCi0jZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKSBwcmludGsoS0VSTl9FUlIgIi0tPiAlc1xuIiwgX19mdW5jX18pCiAjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fRVJSICI8LS0gJXNcbiIsIF9fZnVuY19fKQogI2Vsc2UKQEAgLTgxMiwxMCArODEyLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljaGlwX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCBiYTU3MDA1Li41NDJhMGM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTg4OSwxMiArODg5LDEzIEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaSwgUENJX0NPTU1BTkQsIHdvcmQgfCBQQ0lfQ09NTUFORF9JTyk7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAkKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAKLQkJCSAgICBzaXplb2YoKmFjYXJkKSAvKiBwcml2YXRlX2RhdGE6IGFjYXJkICovKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAKKwkJCSAgICAgIHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8sCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2kpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggMjI2ZmU4Mi4uOWNlODU0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTY0NSw5ICsxNjQ1LDkgQEAKIAlzdHJ1Y3QgYXRpaXhwICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBzcGRpZl9hY2xpbmsgPyAiQVRJSVhQIiA6ICJBVElJWFAtU1BETUEiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQVRJIElYUCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDBlNmU1Y2MuLmMzMTM2Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTEyODgsOSArMTI4OCw5IEBACiAJc3RydWN0IGF0aWl4cF9tb2RlbSAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFUSUlYUC1NT0RFTSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBVEkgSVhQIE1vZGVtIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwppbmRleCBhMzZkNGQxLi45ZWMxMjIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKQEAgLTI1MCw5ICsyNTAsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJLy8gKDIpCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvLyAoMykKIAlpZiAoKGVyciA9IHNuZF92b3J0ZXhfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKaW5kZXggNjQ5ODQ5ZS4uZjRhYThmZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKQEAgLTQ2Miw5ICs0NjIsMTAgQEAKIC8qIFJlc2V0IFNpbmdsZSBBM0Qgc291cmNlLiAqLwogc3RhdGljIHZvaWQgYTNkc3JjX1plcm9TdGF0ZShhM2RzcmNfdCAqIGEpCiB7Ci0KLQkvL3ByaW50aygidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsIGEtPnNsaWNlLCBhLT5zb3VyY2UpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsCisJICAgICAgIGEtPnNsaWNlLCBhLT5zb3VyY2UpOworCSovCiAJYTNkc3JjX1NldEF0bW9zU3RhdGUoYSwgMCwgMCwgMCwgMCk7CiAJYTNkc3JjX1NldEhydGZTdGF0ZShhLCBBM2RIcmlyWmVyb3MsIEEzZEhyaXJaZXJvcyk7CiAJYTNkc3JjX1NldEl0ZERsaW5lKGEsIEEzZEl0ZERsaW5lWmVyb3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCmluZGV4IGIwNzBlNTcuLjM5MDZmNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKQEAgLTExMzUsNyArMTEzNSwxMCBAQAogCQkJc25kX3BjbV9zZ2J1Zl9nZXRfYWRkcihkbWEtPnN1YnN0cmVhbSwgMCkpOwogCQlicmVhazsKIAl9Ci0JLy9wcmludGsoInZvcnRleDogY2ZnMCA9IDB4JXhcbnZvcnRleDogY2ZnMT0weCV4XG4iLCBkbWEtPmNmZzAsIGRtYS0+Y2ZnMSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBjZmcwID0gMHgleFxudm9ydGV4OiBjZmcxPTB4JXhcbiIsCisJICAgICAgIGRtYS0+Y2ZnMCwgZG1hLT5jZmcxKTsKKwkqLwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzAgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzApOwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzEgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzEpOwogCkBAIC0xOTU5LDcgKzE5NjIsNyBAQAogCQkJCQkgIEFEQl9DT0RFQ09VVCgwICsgNCkpOwogCQl2b3J0ZXhfY29ubmVjdGlvbl9taXhfYWRiKHZvcnRleCwgZW4sIDB4MTEsIG1peGVyc1szXSwKIAkJCQkJICBBREJfQ09ERUNPVVQoMSArIDQpKTsKLQkJLy9wcmludGsoIlNEQUMgZGV0ZWN0ZWQgIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJTREFDIGRldGVjdGVkICIpOyAqLwogCX0KICNlbHNlCiAJLy8gVXNlIHBsYWluIGRpcmVjdCBvdXRwdXQgdG8gY29kZWMuCkBAIC0yMDEzLDcgKzIwMTYsMTEgQEAKIAkJCQkJcmVzbWFwW3Jlc3R5cGVdIHw9ICgxIDw8IGkpOwogCQkJCWVsc2UKIAkJCQkJdm9ydGV4LT5kbWFfYWRiW2ldLnJlc291cmNlc1tyZXN0eXBlXSB8PSAoMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwgcmVzdHlwZSwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjAyNCw3ICsyMDMxLDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBxdHk7IGkrKykgewogCQkJaWYgKHJlc21hcFtyZXN0eXBlXSAmICgxIDw8IGkpKSB7CiAJCQkJcmVzbWFwW3Jlc3R5cGVdICY9IH4oMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIGluICVkXG4iLHJlc3R5cGUsIGkpOworCQkJCS8qCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBpbiAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjc4OSw3ICsyODAwLDcgQEAKIHsKIAlpbnQgYSwgdGhpc18xOTQ7CiAKLQlpZiAoKGJpdHMgIT0gOCkgfHwgKGJpdHMgIT0gMTYpKQorCWlmICgoYml0cyAhPSA4KSAmJiAoYml0cyAhPSAxNikpCiAJCXJldHVybiAtMTsKIAogCXN3aXRjaCAoZW5jb2QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCmluZGV4IDk3OGI4NTYuLjI4MDVlMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYwpAQCAtMjEzLDM4ICsyMTMsNTkgQEAKIAlzd2l0Y2ggKHJlZykgewogCQkvKiBWb2ljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCiAJY2FzZSAwOgkJLyogcnVubmluZyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1JVTih3dCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUlVOKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUlVOKHd0KSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJLyogcGFyYW0gMCAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwwKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMjoJCS8qIHBhcmFtIDEgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDEpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMSksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDEpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDM6CQkvKiBwYXJhbSAyICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwyKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDIpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAyKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSA0OgkJLyogcGFyYW0gMyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMyksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwzKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMyksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgNjoJCS8qIG11dGUgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfTVVURSh3dCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMHhiOgogCQl7CQkvKiBkZWxheSAqLwotCQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJCSAgICAgICBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJKi8KIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMyksIHZhbCk7CiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDIpLCB2YWwpOwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAxKSwgdmFsKTsKQEAgLTI3Miw3ICsyOTMsOSBAQAogCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAJfQotCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgZWN4LCAoaW50KXZhbCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIGVjeCwgKGludCl2YWwpOworCSovCiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIGVjeCwgdmFsKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwppbmRleCBjN2M1NGU3Li44ZWVhMjlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKKysrIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCkBAIC0zNjgsOSArMzY4LDkgQEAKIAl9CiAKIAkvKiAoMikgQ3JlYXRlIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qICgzKSBDcmVhdGUgbWFpbiBjb21wb25lbnQgKi8KIAllcnIgPSBzbmRfYXcyX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDMzMzAwN2MuLmU5ZTliNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMjExLDI1ICsyMTEsMjUgQEAKICNlbmRpZgogCiAjaWYgREVCVUdfTUlYRVIKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX1BMQVlfUkVDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19NSVNDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19HQU1FCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCkBAIC0yMjE2LDkgKzIyMTYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBWkYzMzI4Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF6dGVjaCBBWkYzMzI4IChQQ0kxNjgpIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDFhYTFjMDQuLmEyOTkzNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04ODgsOSArODg4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9idDg3eF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMGU2MjIwNS4uZGY3NTc1NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMjU1LDYgKzI1NSwxNCBAQAogCSAgIC5ncGlvX3R5cGUgPSAyLAogCSAgIC5pMmNfYWRjID0gMSwKIAkgICAuc3BpX2RhYyA9IDEgfSAsCisJLyogR2lnYS1ieXRlIEdBLUcxOTc1WCBtb2JvCisJICogTm92ZWxsIGJuYyMzOTU4MDcKKwkgKi8KKwkvKiBGSVhNRTogdGhlIEdQSU8gYW5kIEkyQyBzZXR0aW5nIGFyZW4ndCB0ZXN0ZWQgd2VsbCAqLworCXsgLnNlcmlhbCA9IDB4MTQ1OGEwMDYsCisJICAubmFtZSA9ICJHaWdhLWJ5dGUgR0EtRzE5NzVYIiwKKwkgIC5ncGlvX3R5cGUgPSAxLAorCSAgLmkyY19hZGMgPSAxIH0sCiAJIC8qIFNodXR0bGUgWFBDIFNEMzFQIHdoaWNoIGhhcyBhbiBvbmJvYXJkIENyZWF0aXZlIExhYnMKIAkgICogU291bmQgQmxhc3RlciBMaXZlISAyNC1iaXQgRUFYCiAJICAqIGhpZ2gtZGVmaW5pdGlvbiA3LjEgYXVkaW8gcHJvY2Vzc29yIi4KQEAgLTQwNCw3ICs0MTIsOSBAQAogCX0KIAogCXRtcCA9IHJlZyA8PCAyNSB8IHZhbHVlIDw8IDE2OwotCS8vIHNuZF9wcmludGsoIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJKi8KIAkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgSTJDIGNoYW5uZWwgY29udHJvbHMuICovCiAJLyogc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBJMkNfRDAsIDAsIHRtcCk7ICovCiAKQEAgLTQyMiw3ICs0MzIsNyBAQAogCQkvKiBXYWl0IHRpbGwgdGhlIHRyYW5zYWN0aW9uIGVuZHMgKi8KIAkJd2hpbGUgKDEpIHsKIAkJCXN0YXR1cyA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoZW11LCBJMkNfQSwgMCk7Ci0gICAgICAgICAgICAgICAgCS8vc25kX3ByaW50aygiSTJDOnN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOworCQkJLypzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQzpzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsqLwogCQkJdGltZW91dCsrOwogCQkJaWYgKChzdGF0dXMgJiBJMkNfQV9BRENfU1RBUlQpID09IDApCiAJCQkJYnJlYWs7CkBAIC01MjEsNyArNTMxLDEwIEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2UgPSAxOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJKi8KICAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfY2EwMTA2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKIAljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNjE0LDcgKzYyNywxMCBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlID0gMTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkvKgorICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkqLwogICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9jYTAxMDZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwogICAgICAgICBjaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNzA1LDkgKzcyMSwyMCBAQAogCXUzMiByZWc3MTsKIAlpbnQgaTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCS8qIFJhdGUgY2FuIGJlIHNldCBwZXIgY2hhbm5lbC4gKi8KIAkvKiByZWc0MCBjb250cm9sIGhvc3QgdG8gZmlmbyAqLwogCS8qIHJlZzcxIGNvbnRyb2xzIERBQyByYXRlLiAqLwpAQCAtNzk5LDkgKzgyNiwyMCBAQAogCXUzMiByZWc3MV9zZXQgPSAwOwogCXUzMiByZWc3MTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworICAgICAgICBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAkvKiByZWc3MSBjb250cm9scyBBREMgcmF0ZS4gKi8KIAlzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtODQ2LDcgKzg4NCwxNCBAQAogCX0KIAogCi0gICAgICAgIC8vcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJICAgICAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkqLwogCXNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgMHgxMywgY2hhbm5lbCwgMCk7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0RNQV9BRERSLCBjaGFubmVsLCBydW50aW1lLT5kbWFfYWRkcik7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0JVRkZFUl9TSVpFLCBjaGFubmVsLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpPDwxNik7IC8vIGJ1ZmZlciBzaXplIGluIGJ5dGVzCkBAIC04ODgsMTMgKzkzMywxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IGVwY20tPmNoYW5uZWxfaWQ7Ci0JCS8qIHNuZF9wcmludGsoImNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7ICovCisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxIDw8IGNoYW5uZWwpOwogCQlleHRlbmRlZCB8PSAoMHgxMCA8PCBjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLyogc25kX3ByaW50aygiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtOTcyLDggKzEwMTcsMTMgQEAKIAlwdHI9cHRyMjsKICAgICAgICAgaWYgKHB0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTk5NSw4ICsxMDQ1LDEzIEBACiAJcHRyPXB0cjI7CiAgICAgICAgIGlmIChwdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC0xMTgxLDggKzEyMzYsMTIgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAgICAgICAgIHN0YXQ3NiA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgRVhURU5ERURfSU5ULCAwKTsKLQkvL3NuZF9wcmludGsoImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsIHN0YXR1cywgc3RhdDc2KTsKLQkvL3NuZF9wcmludGsoInB0cj0weCUwOHhcbiIsc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBQTEFZQkFDS19QT0lOVEVSLCAwKSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsCisJCSAgIHN0YXR1cywgc3RhdDc2KTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInB0cj0weCUwOHhcbiIsCisJCSAgIHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgUExBWUJBQ0tfUE9JTlRFUiwgMCkpOworCSovCiAgICAgICAgIG1hc2sgPSAweDExOyAvKiAweDEgZm9yIG9uZSBoYWxmLCAweDEwIGZvciB0aGUgb3RoZXIgaGFsZiBwZXJpb2QuICovCiAJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXBjaGFubmVsID0gJihjaGlwLT5wbGF5YmFja19jaGFubmVsc1tpXSk7CkBAIC0xNDcwLDcgKzE1MjksNyBAQAogCQlpbnQgc2l6ZSwgbjsKIAogCQlzaXplID0gQVJSQVlfU0laRShpMmNfYWRjX2luaXQpOwotCQkvKiBzbmRfcHJpbnRrKCJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KIAkJZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykKIAkJCXNuZF9jYTAxMDZfaTJjX3dyaXRlKGNoaXAsIGkyY19hZGNfaW5pdFtuXVswXSwKIAkJCQkJICAgICBpMmNfYWRjX2luaXRbbl1bMV0pOwpAQCAtMTcwNyw5ICsxNzY2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfY2EwMTA2X2NyZWF0ZShkZXYsIGNhcmQsIHBjaSwgJmNoaXApOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDFhNzRjYTYuLmM3ODk5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTMyNzIsOSArMzI3Miw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCQogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczODoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCAxOTJlNzg0Li5mNjI4NmY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC04MzQsNyArODM0LDExIEBACiAJc3RydWN0IGNzNDI4MV9kbWEgKmRtYSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3M0MjgxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCi0JLy8gcHJpbnRrKCJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBqaWZmaWVzKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsCisJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICBqaWZmaWVzKTsKKwkqLwogCXJldHVybiBydW50aW1lLT5idWZmZXJfc2l6ZSAtCiAJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQykgLSAxOwogfQpAQCAtMTkyNSw5ICsxOTI5LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczQyODFfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXAsIGR1YWxfY29kZWNbZGV2XSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKaW5kZXggZTg3NmIzMi4uYzliM2UzZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCkBAIC04OCw5ICs4OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2NzNDZ4eF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgZXh0ZXJuYWxfYW1wW2Rldl0sIHRoaW5rcGFkW2Rldl0sCiAJCQkJICAgICAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCA4YWIwN2FhLi4xYmU5NmVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICogIEFDU0RBID0gU3RhdHVzIERhdGEgUmVnaXN0ZXIgPSA0NzRoCiAJICovCiAjaWYgMAotCXByaW50aygiZSkgcmVnID0gMHgleCwgdmFsID0gMHgleCwgQkEwX0FDQ0FEID0gMHgleFxuIiwgcmVnLAorCXByaW50ayhLRVJOX0RFQlVHICJlKSByZWcgPSAweCV4LCB2YWwgPSAweCV4LCBCQTBfQUNDQUQgPSAweCV4XG4iLCByZWcsCiAJCQlzbmRfY3M0Nnh4X3BlZWtCQTAoY2hpcCwgQkEwX0FDU0RBKSwKIAkJCXNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfQUNDQUQpKTsKICNlbmRpZgpAQCAtNDI4LDggKzQyOCw4IEBACiAJfQogICAKIAlpZihzdGF0dXMgJiBTRVJCU1RfV0JTWSkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yIEZJRk8gY29tbWFuZCB0byBjb21wbGV0ZVxuIik7Ci0KKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yICIKKwkJCSAgICJGSUZPIGNvbW1hbmQgdG8gY29tcGxldGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKaW5kZXggMDE4YTdkZS4uNGViNTVhYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKQEAgLTYyLDcgKzYyLDExIEBACiAJdW5zaWduZWQgaW50IGJhbmsgPSByZWcgPj4gMTY7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IHJlZyAmIDB4ZmZmZjsKIAotCS8qaWYgKGJhbmsgPT0gMCkgcHJpbnRrKCJzbmRfY3M0Nnh4X3Bva2U6ICUwNFggLSAlMDhYXG4iLHJlZyA+PiAyLHZhbCk7ICovCisJLyoKKwlpZiAoYmFuayA9PSAwKQorCQlwcmludGsoS0VSTl9ERUJVRyAic25kX2NzNDZ4eF9wb2tlOiAlMDRYIC0gJTA4WFxuIiwKKwkJICAgICAgIHJlZyA+PiAyLHZhbCk7CisJKi8KIAl3cml0ZWwodmFsLCBjaGlwLT5yZWdpb24uaWR4W2JhbmsrMV0ucmVtYXBfYWRkciArIG9mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCA2ZGVhNWI1Li5kYzQ2NDMyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC0yNTgsMTAgKzI1OCwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2NzNTUzMF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggODI2ZTZkZS4uYzg5ZWQxZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M1NTM1YXVkaW9faW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsICJDUzU1MzUgQXVkaW8iLCBjczU1MzVhdSkpIHsKLQkJc25kX3ByaW50aygidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gc25kZmFpbDsKIAl9CkBAIC0zNTMsOSArMzUzLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczU1MzVhdWRpb19jcmVhdGUoY2FyZCwgcGNpLCAmY3M1NTM1YXUpKSA8IDApCiAJCWdvdG8gcHJvYmVmYWlsX291dDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCmluZGV4IDdiNTc2YWUuLjEzNjFkZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQpAQCAtMTUsNiArMTUsOCBAQAogc25kLWluZGlnby1vYmpzIDo9IGluZGlnby5vCiBzbmQtaW5kaWdvaW8tb2JqcyA6PSBpbmRpZ29pby5vCiBzbmQtaW5kaWdvZGotb2JqcyA6PSBpbmRpZ29kai5vCitzbmQtaW5kaWdvaW94LW9ianMgOj0gaW5kaWdvaW94Lm8KK3NuZC1pbmRpZ29kangtb2JqcyA6PSBpbmRpZ29kangubwogCiBvYmotJChDT05GSUdfU05EX0RBUkxBMjApICs9IHNuZC1kYXJsYTIwLm8KIG9iai0kKENPTkZJR19TTkRfR0lOQTIwKSArPSBzbmQtZ2luYTIwLm8KQEAgLTI4LDMgKzMwLDUgQEAKIG9iai0kKENPTkZJR19TTkRfSU5ESUdPKSArPSBzbmQtaW5kaWdvLm8KIG9iai0kKENPTkZJR19TTkRfSU5ESUdPSU8pICs9IHNuZC1pbmRpZ29pby5vCiBvYmotJChDT05GSUdfU05EX0lORElHT0RKKSArPSBzbmQtaW5kaWdvZGoubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09JT1gpICs9IHNuZC1pbmRpZ29pb3gubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09ESlgpICs9IHNuZC1pbmRpZ29kangubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwppbmRleCA0MTdlMjVhLi41Nzk2N2U1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwpAQCAtNTYsNyArNTYsNyBAQAogCX0KIAogCWNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKKwkJY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCA4ZGJjNWM0Li5kYTIwNjVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTk1MCw2ICs5NTAsOCBAQAogCUNvbnRyb2wgaW50ZXJmYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorCiAvKioqKioqKioqKioqKioqKioqKiBQQ00gb3V0cHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKQEAgLTEwMDEsMTggKzEwMDMsNiBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotLyogT24gVm1peGVyIGNhcmRzIHRoaXMgb25lIGNvbnRyb2xzIHRoZSBsaW5lLW91dCB2b2x1bWUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19saW5lX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSAiTGluZSBQbGF5YmFjayBWb2x1bWUiLAotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAotCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKLQkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAotCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCi0JLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKLX07Ci0jZWxzZQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTAyMiw2ICsxMDEyLDcgQEAKIAkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAogCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCiB9OworCiAjZW5kaWYKIAogCkBAIC0xOTk3LDkgKzE5ODgsOSBAQAogCiAJREVfSU5JVCgoIkVjaG9hdWRpbyBkcml2ZXIgc3RhcnRpbmcuLi5cbiIpKTsKIAlpID0gMDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIApAQCAtMjAzNyw4ICsyMDI4LDYgQEAKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKIAlzbmRfZWNob192bWl4ZXIuY291bnQgPSBudW1fcGlwZXNfb3V0KGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7Ci0JaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4sIGNoaXApKSkgPCAwKQotCQlnb3RvIGN0bF9lcnJvcjsKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fdm1peGVyLCBjaGlwKSkpIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKaW5kZXggMWM4OGUwNS4uZjk0OTBhZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCkBAIC0xODksNiArMTg5LDkgQEAKICNkZWZpbmUgSU5ESUdPCQkJMHgwMDkwCiAjZGVmaW5lIElORElHT19JTwkJMHgwMGEwCiAjZGVmaW5lIElORElHT19ESgkJMHgwMGIwCisjZGVmaW5lIERDOAkJCTB4MDBjMAorI2RlZmluZSBJTkRJR09fSU9YCQkweDAwZDAKKyNkZWZpbmUgSU5ESUdPX0RKWAkJMHgwMGUwCiAjZGVmaW5lIEVDSE8zRwkJCTB4MDEwMAogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCmluZGV4IGMzNzM2YmIuLmUzMmE3NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYwpAQCAtNDAsOCArNDAsNyBAQAogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKIAkJcmV0dXJuIC1FSU87CiAKLQljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKKwljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0gY3B1X3RvX2xlMzIoRTNHX0FTSUNfTk9UX0xPQURFRCk7CiAJY2hpcC0+YXNpY19sb2FkZWQgPSBGQUxTRTsKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1RFU1RfQVNJQyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCmluZGV4IGJlMGUxODEuLjRkZjUxZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCkBAIC05MjYsMTEgKzkyNiwxMSBAQAogCiAJLyogSW5pdCB0aGUgY29tbSBwYWdlICovCiAJY2hpcC0+Y29tbV9wYWdlLT5jb21tX3NpemUgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CisJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX01JRElfT1VUX0ZJRk9fU0laRSk7Ci0JY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNDQxMDApOworCQljcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIoNDQxMDApOwogCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CiAKIAkvKiBTZXQgbGluZSBsZXZlbHMgc28gd2UgZG9uJ3QgYmxhc3QgYW55IGlucHV0cyBvbiBzdGFydHVwICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCmluZGV4IGUzNTJmM2EuLmNiN2Q3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCkBAIC01NzYsOCArNTc2LDEzIEBACiAjZGVmaW5lIEUzR19BU0lDX05PVF9MT0FERUQJCTB4ZmZmZgogI2RlZmluZSBFM0dfQk9YX1RZUEVfTUFTSwkJMHhmMAogCi0jZGVmaW5lIEVYVF8zR0JPWF9OQwkJCTB4MDEKLSNkZWZpbmUgRVhUXzNHQk9YX05PVF9TRVQJCTB4MDIKKy8qIEluZGlnbyBleHByZXNzIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisjZGVmaW5lIElORElHT19FWFBSRVNTXzMyMDAwCQkweDAyCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ0MTAwCQkweDAxCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ4MDAwCQkweDAwCisjZGVmaW5lIElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRAkweDEwCisjZGVmaW5lIElORElHT19FWFBSRVNTX1FVQURfU1BFRUQJMHgwNAorI2RlZmluZSBJTkRJR09fRVhQUkVTU19DTE9DS19NQVNLCTB4MTcKIAogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwppbmRleCBkYjZjOTUyLi4zZjFlNzQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwpAQCAtMjA4LDEwICsyMDgsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwppbmRleCBmMDVlMzlmLi4wYjJjZDljIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwpAQCAtNjMsMTggKzYzLDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogYWxsIHZjaGFubmVscyBhcmUgcm91dGVkCi0JdG8gdGhlIHN0ZXJlbyBvdXRwdXQgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYjYyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNsb2NrLCBjb250cm9sX3JlZywgb2xkX2NvbnRyb2xfcmVnOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCW9sZF9jb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CisJY29udHJvbF9yZWcgPSBvbGRfY29udHJvbF9yZWcgJiB+SU5ESUdPX0VYUFJFU1NfQ0xPQ0tfTUFTSzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMzIwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDA7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgNjQwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ0MTAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180ODAwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnRyb2xfcmVnIHw9IGNsb2NrOworCWlmIChjb250cm9sX3JlZyAhPSBvbGRfY29udHJvbF9yZWcpIHsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfQ0xPQ0tTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHJvdXRlcyB0aGUgc291bmQgZnJvbSBhIHZpcnR1YWwgY2hhbm5lbCB0byBhIHJlYWwgb3V0cHV0ICovCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKQoreworCWludCBpbmRleDsKKworCWlmIChzbmRfQlVHX09OKHBpcGUgPj0gbnVtX3BpcGVzX291dChjaGlwKSB8fAorCQkgICAgICAgb3V0cHV0ID49IG51bV9idXNzZXNfb3V0KGNoaXApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+dm1peGVyX2dhaW5bb3V0cHV0XVtwaXBlXSA9IGdhaW47CisJaW5kZXggPSBvdXRwdXQgKiBudW1fcGlwZXNfb3V0KGNoaXApICsgcGlwZTsKKwljaGlwLT5jb21tX3BhZ2UtPnZtaXhlcltpbmRleF0gPSBnYWluOworCisJREVfQUNUKCgic2V0X3ZtaXhlcl9nYWluOiBwaXBlICVkLCBvdXQgJWQgPSAlZFxuIiwgcGlwZSwgb3V0cHV0LCBnYWluKSk7CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVhZCBhbmQgdXBkYXRlIHZpcnR1YWwgbWl4ZXIgbGV2ZWxzIGluIGNvbW0gcGFnZS4gKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX1ZNSVhFUl9HQUlOKTsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKK30KKworCisKKy8qIFRoZSBJbmRpZ29JTyBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKaW5kZXggOTA3MzBhNS4uMDgzOTI5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGFuZAotCXZjaGFubmVscyA0LTcgYXJlIHJvdXRlZCB0byByZWFsIGNoYW5uZWxzIDAtNCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MmVmNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0RKWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gREp4IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTgKKworLyogQnVzIGluZGV4ZXMgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX09VVAkwCS8qIDQgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJNAkvKiAwICovCisjZGVmaW5lIEJYX0FOQUxPR19JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQk0CisKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2RqeF9kc3AuZnciKTsKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0lORElHT19ESlhfRFNQCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBFMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESngqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gNCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2RqeF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTFmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwKKwkJCSAgIHUxNiBwaXBlLCBpbnQgZ2Fpbik7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBJbmRpZ28gREp4XG4iKSk7CisJaWYgKHNuZF9CVUdfT04oKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgIT0gSU5ESUdPX0RKWCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKWF9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwllcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKaW5kZXggYTdlMDllYy4uMDYwNGM4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKLQl0byB0aGUgc3RlcmVvIG91dHB1dCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViZWUyNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0lPWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gSU94IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTEwCS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQkxMAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAkyCS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTIJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9pbmRpZ29faW94X2RzcC5mdyIpOworCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0lPWF9EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEQwLCAwLCAwLCAwfSwJLyogSW5kaWdvIElPeCAqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2lveF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1NzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LAorCQkJICAgdTE2IHBpcGUsIGludCBnYWluKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBJT3hcbiIpKTsKKwlpZiAoc25kX0JVR19PTigoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSAhPSBJTkRJR09fSU9YKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKaW5kZXggZWRlNzVjNi4uODM3NTBlOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwpAQCAtMjg0LDEwICsyODQsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwppbmRleCAyMjczODY2Li41NTE0MDUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwpAQCAtNjksMTggKzY5LDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGdvIHRvIGFuYWxvZwotCW91dHB1dHMgYW5kIHZjaGFubmVscyA0LTcgZ28gdG8gUy9QRElGIG91dHB1dHMgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMiwxMCArMjEwLDEwIEBACiAJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOwogCWlmIChwcm9mKQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CiAJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKaW5kZXggNzdiZjJhOC4uYTk1M2QxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCWlmIChlbmFibGUpIHsKIAkJY2hpcC0+bXRjX3N0YXRlID0gTUlESV9JTl9TVEFURV9OT1JNQUw7CiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKIAl9IGVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CiAKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCmluZGV4IDgzNTRjMWEuLmM3ZjNiOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKQEAgLTExNCw5ICsxMTQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAobWF4X2J1ZmZlcl9zaXplW2Rldl0gPCAzMikKIAkJbWF4X2J1ZmZlcl9zaXplW2Rldl0gPSAzMjsKIAllbHNlIGlmIChtYXhfYnVmZmVyX3NpemVbZGV2XSA+IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKaW5kZXggMGU2NDlkYy4uN2VmOTQ5ZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKQEAgLTEwMyw3ICsxMDMsMTAgQEAKIAkJCWludCBjaDsKIAkJCXZwID0gJmVtdS0+dm9pY2VzW2Jlc3RbaV0udm9pY2VdOwogCQkJaWYgKChjaCA9IHZwLT5jaCkgPCAwKSB7Ci0JCQkJLy9wcmludGsoInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkqLwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJdnAtPmVtdS0+bnVtX3ZvaWNlcy0tOwpAQCAtMzM1LDcgKzMzOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWVtZW0tPm1hcF9sb2NrZWQrKzsKIAlpZiAoc25kX2VtdTEwazFfbWVtYmxrX21hcChodywgZW1lbSkgPCAwKSB7Ci0JCS8vIHByaW50aygiZW11OiBjYW5ub3QgbWFwIVxuIik7CisJCS8qIHByaW50ayhLRVJOX0VSUiAiZW11OiBjYW5ub3QgbWFwIVxuIik7ICovCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltYXBwZWRfb2Zmc2V0ID0gc25kX2VtdTEwazFfbWVtYmxrX29mZnNldChlbWVtKSA+PiAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCAxMDFhMWMxLi5mMThiZDYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtNzExLDggKzcxMSw3IEBACiBzdGF0aWMgaW50IGVtdTEwMTBfZmlybXdhcmVfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNuZF9lbXUxMGsxICplbXUgPSBkYXRhOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAogCWZvciAoOzspIHsKQEAgLTc1OCw3ICs3NTcsOCBAQAogCQkJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IEF1ZGlvIERvY2sgRmlybXdhcmUgbG9hZGVkXG4iKTsKIAkJCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9ET0NLX01BSk9SX1JFViwgJnRtcCk7CiAJCQlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfRE9DS19NSU5PUl9SRVYsICZ0bXAyKTsKLQkJCXNuZF9wcmludGsoIkF1ZGlvIERvY2sgdmVyOiVkLiVkXG4iLCB0bXAsIHRtcDIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkF1ZGlvIERvY2sgdmVyOiAldS4ldVxuIiwKKwkJCQkgICB0bXAsIHRtcDIpOwogCQkJLyogU3luYyBjbG9ja2luZyBiZXR3ZWVuIDEwMTAgYW5kIERvY2sgKi8KIAkJCS8qIEFsbG93IERMTCB0byBzZXR0bGUgKi8KIAkJCW1zbGVlcCgxMCk7CkBAIC04MDQsOCArODA0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2VtdTEwazFfZW11MTAxMF9pbml0KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11KQogewogCXVuc2lnbmVkIGludCBpOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAKQEAgLTg4Nyw3ICs4ODYsNyBAQAogCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIEZpcm13YXJlIGxvYWRlZFxuIik7CiAJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0hBTkFfTUFKT1JfUkVWLCAmdG1wKTsKIAlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfSEFOQV9NSU5PUl9SRVYsICZ0bXAyKTsKLQlzbmRfcHJpbnRrKCJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICVkLiVkXG4iLCB0bXAsIHRtcDIpOworCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICV1LiV1XG4iLCB0bXAsIHRtcDIpOwogCS8qIEVuYWJsZSA0OFZvbHQgcG93ZXIgdG8gQXVkaW8gRG9jayAqLwogCXNuZF9lbXUxMDEwX2ZwZ2Ffd3JpdGUoZW11LCBFTVVfSEFOQV9ET0NLX1BXUiwgRU1VX0hBTkFfRE9DS19QV1JfT04pOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwppbmRleCA1ZmY0ZGJiLi4zMTU0MmFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKQEAgLTE1NDQsOSArMTU0NCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfZW11MTBrMXhfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCmluZGV4IDdkYmEwOGYuLjE5MWUxY2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAKIAkvKiBBX1BVVF9TVEVSRU9fT1VUUFVUKEFfRVhUT1VUX0ZST05UX0wsIEFfRVhUT1VUX0ZST05UX1IsIHBsYXliYWNrICsgU05EX0VNVTEwSzFfUExBWUJBQ0tfQ0hBTk5FTFMpOyAqLwogCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5lbXVfbW9kZWwpIHsKIAkJLyogRU1VMTAxMCBPdXRwdXRzIGZyb20gUENNIEZyb250LCBSZWFyLCBDZW50ZXIsIExGRSwgU2lkZSAqLwotCQlzbmRfcHJpbnRrKCJFTVUgb3V0cHV0cyBvblxuIik7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUgb3V0cHV0cyBvblxuIik7CiAJCWZvciAoeiA9IDA7IHogPCA4OyB6KyspIHsKIAkJCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5jYTAxMDhfY2hpcCkgewogCQkJCUFfT1AoaWNvZGUsICZwdHIsIGlBQ0MzLCBBM19FTVUzMk9VVCh6KSwgQV9HUFIocGxheWJhY2sgKyBTTkRfRU1VMTBLMV9QTEFZQkFDS19DSEFOTkVMUyArIHopLCBBX0NfMDAwMDAwMDAsIEFfQ18wMDAwMDAwMCk7CkBAIC0xNTY3LDcgKzE1NjcsNyBAQAogCiAJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmVtdV9tb2RlbCkgewogCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+Y2EwMTA4X2NoaXApIHsKLQkJCXNuZF9wcmludGsoIkVNVTIgaW5wdXRzIG9uXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUyIGlucHV0cyBvblxuIik7CiAJCQlmb3IgKHogPSAwOyB6IDwgMHgxMDsgeisrKSB7CiAJCQkJc25kX2VtdTEwazFfYXVkaWd5X2RzcF9jb252ZXJ0XzMyX3RvXzJ4MTYoIGljb2RlLCAmcHRyLCB0bXAsIAogCQkJCQkJCQkJYml0X3NoaWZ0ZXIxNiwKQEAgLTE1NzUsMTAgKzE1NzUsMTMgQEAKIAkJCQkJCQkJCUFfRlhCVVMyKHoqMikgKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXNuZF9wcmludGsoIkVNVSBpbnB1dHMgb25cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVSBpbnB1dHMgb25cbiIpOwogCQkJLyogQ2FwdHVyZSAxNiAob3JpZ2luYWxseSA4KSBjaGFubmVscyBvZiBTMzJfTEUgc291bmQgKi8KIAotCQkJLyogcHJpbnRrKCJlbXVmeC5jOiBncHI9MHgleCwgdG1wPTB4JXhcbiIsZ3ByLCB0bXApOyAqLworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJlbXVmeC5jOiBncHI9MHgleCwgdG1wPTB4JXhcbiIsCisJCQkgICAgICAgZ3ByLCB0bXApOworCQkJKi8KIAkJCS8qIEZvciB0aGUgRU1VMTAxMDogSG93IHRvIGdldCAzMmJpdCB2YWx1ZXMgZnJvbSB0aGUgRFNQLiBIaWdoIDE2Yml0cyBpbnRvIEwsIGxvdyAxNmJpdHMgaW50byBSLiAqLwogCQkJLyogQV9QMTZWSU4oMCkgaXMgZGVsYXllZCBieSBvbmUgc2FtcGxlLAogCQkJICogc28gYWxsIG90aGVyIEFfUDE2VklOIGNoYW5uZWxzIHdpbGwgbmVlZCB0byBhbHNvIGJlIGRlbGF5ZWQKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKaW5kZXggY2Y5Mjc2ZC4uNzhmNjJmZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlpZiAoZXBjbS0+c3Vic3RyZWFtID09IE5VTEwpCiAJCXJldHVybjsKICNpZiAwCi0JcHJpbnRrKCJJUlE6IHBvc2l0aW9uID0gMHgleCwgcGVyaW9kID0gMHgleCwgc2l6ZSA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIklSUTogcG9zaXRpb24gPSAweCV4LCBwZXJpb2QgPSAweCV4LCBzaXplID0gMHgleFxuIiwKIAkJCWVwY20tPnN1YnN0cmVhbS0+cnVudGltZS0+aHctPnBvaW50ZXIoZW11LCBlcGNtLT5zdWJzdHJlYW0pLAogCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKGVwY20tPnN1YnN0cmVhbSksCiAJCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoZXBjbS0+c3Vic3RyZWFtKSk7CkBAIC0xNDYsNyArMTQ2LDExIEBACiAJCQkJCSAgICAgIDEsCiAJCQkJCSAgICAgICZlcGNtLT5leHRyYSk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQkvKiBwcmludGsoInBjbV9jaGFubmVsX2FsbG9jOiBmYWlsZWQgZXh0cmE6IHZvaWNlcz0lZCwgZnJhbWU9JWRcbiIsIHZvaWNlcywgZnJhbWUpOyAqLworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fY2hhbm5lbF9hbGxvYzogIgorCQkJICAgICAgICJmYWlsZWQgZXh0cmE6IHZvaWNlcz0lZCwgZnJhbWU9JWRcbiIsCisJCQkgICAgICAgdm9pY2VzLCBmcmFtZSk7CisJCQkqLwogCQkJZm9yIChpID0gMDsgaSA8IHZvaWNlczsgaSsrKSB7CiAJCQkJc25kX2VtdTEwazFfdm9pY2VfZnJlZShlcGNtLT5lbXUsIGVwY20tPnZvaWNlc1tpXSk7CiAJCQkJZXBjbS0+dm9pY2VzW2ldID0gTlVMTDsKQEAgLTczNyw3ICs3NDEsMTAgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfcGNtX21peGVyICptaXg7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQkvKiBwcmludGsoInRyaWdnZXIgLSBlbXUxMGsxID0gMHgleCwgY21kID0gJWksIHBvaW50ZXIgPSAlaVxuIiwgKGludCllbXUsIGNtZCwgc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidHJpZ2dlciAtIGVtdTEwazEgPSAweCV4LCBjbWQgPSAlaSwgcG9pbnRlciA9ICVpXG4iLAorCSAgICAgICAoaW50KWVtdSwgY21kLCBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pKQorCSovCiAJc3Bpbl9sb2NrKCZlbXUtPnJlZ19sb2NrKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC03ODYsNyArNzkzLDEwIEBACiAJCS8qIGhtbSB0aGlzIHNob3VsZCBjYXVzZSBmdWxsIGFuZCBoYWxmIGZ1bGwgaW50ZXJydXB0IHRvIGJlIHJhaXNlZD8gKi8KIAkJb3V0bChlcGNtLT5jYXB0dXJlX2lwciwgZW11LT5wb3J0ICsgSVBSKTsKIAkJc25kX2VtdTEwazFfaW50cl9lbmFibGUoZW11LCBlcGNtLT5jYXB0dXJlX2ludGUpOwotCQkvKiBwcmludGsoImFkY2NyID0gMHgleCwgYWRjYnMgPSAweCV4XG4iLCBlcGNtLT5hZGNjciwgZXBjbS0+YWRjYnMpOyAqLworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiYWRjY3IgPSAweCV4LCBhZGNicyA9IDB4JXhcbiIsCisJCSAgICAgICBlcGNtLT5hZGNjciwgZXBjbS0+YWRjYnMpOworCQkqLwogCQlzd2l0Y2ggKGVwY20tPnR5cGUpIHsKIAkJY2FzZSBDQVBUVVJFX0FDOTdBREM6CiAJCQlzbmRfZW11MTBrMV9wdHJfd3JpdGUoZW11LCBBRENDUiwgMCwgZXBjbS0+Y2FwdHVyZV9jcl92YWwpOwpAQCAtODU3LDcgKzg2NywxMSBAQAogCQkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCX0KICNlbmRpZgotCS8qIHByaW50aygicHRyID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXhcbiIsIHB0ciwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwdHIgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleFxuIiwKKwkgICAgICAgcHRyLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtMTU0Niw3ICsxNTYwLDExIEBACiAJCQkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQkJCQkgICB1bnNpZ25lZCBpbnQgdHJhbV9zaGlmdCkKIHsKLQkvKiBwcmludGsoInRyYW1fcG9rZTE6IGRzdF9sZWZ0ID0gMHglcCwgZHN0X3JpZ2h0ID0gMHglcCwgc3JjID0gMHglcCwgY291bnQgPSAweCV4XG4iLCBkc3RfbGVmdCwgZHN0X3JpZ2h0LCBzcmMsIGNvdW50KTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ0cmFtX3Bva2UxOiBkc3RfbGVmdCA9IDB4JXAsIGRzdF9yaWdodCA9IDB4JXAsICIKKwkgICAgICAgInNyYyA9IDB4JXAsIGNvdW50ID0gMHgleFxuIiwKKwkgICAgICAgZHN0X2xlZnQsIGRzdF9yaWdodCwgc3JjLCBjb3VudCk7CisJKi8KIAlpZiAoKHRyYW1fc2hpZnQgJiAxKSA9PSAwKSB7CiAJCXdoaWxlIChjb3VudC0tKSB7CiAJCQkqZHN0X2xlZnQtLSA9ICpzcmMrKzsKQEAgLTE2MjMsNyArMTY0MSwxMiBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfcGNtICpwY20gPSAmZW11LT5meDgwMTAucGNtW3N1YnN0cmVhbS0+bnVtYmVyXTsKIAl1bnNpZ25lZCBpbnQgaTsKIAkKLQkvKiBwcmludGsoInByZXBhcmU6IGV0cmFtX3BhZ2VzID0gMHglcCwgZG1hX2FyZWEgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXggKDB4JXgpXG4iLCBlbXUtPmZ4ODAxMC5ldHJhbV9wYWdlcywgcnVudGltZS0+ZG1hX2FyZWEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5idWZmZXJfc2l6ZSA8PCAyKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlOiBldHJhbV9wYWdlcyA9IDB4JXAsIGRtYV9hcmVhID0gMHgleCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4ICgweCV4KVxuIiwKKwkgICAgICAgZW11LT5meDgwMTAuZXRyYW1fcGFnZXMsIHJ1bnRpbWUtPmRtYV9hcmVhLAorCSAgICAgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+YnVmZmVyX3NpemUgPDwgMik7CisJKi8KIAltZW1zZXQoJnBjbS0+cGNtX3JlYywgMCwgc2l6ZW9mKHBjbS0+cGNtX3JlYykpOwogCXBjbS0+cGNtX3JlYy5od19idWZmZXJfc2l6ZSA9IHBjbS0+YnVmZmVyX3NpemUgKiAyOyAvKiBieXRlIHNpemUgKi8KIAlwY20tPnBjbV9yZWMuc3dfYnVmZmVyX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9pby5jCmluZGV4IGI1YTgwMmIuLjRiZmMzMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvaW8uYwpAQCAtMjI2LDcgKzIyNiw5IEBACiAJCQkJYnJlYWs7CiAKIAkJCWlmICh0aW1lb3V0ID4gMTAwMCkgewotICAgICAgICAgICAgICAgIAkJc25kX3ByaW50aygiZW11MTBrMTpJMkM6dGltZW91dCBzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICJlbXUxMGsxOkkyQzp0aW1lb3V0IHN0YXR1cz0weCV4XG4iLAorCQkJCQkgICBzdGF0dXMpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKaW5kZXggNzQ5YTIxYi4uZTYxN2FjYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX3BjbSAqZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKICAgCiAJaWYgKGVwY20pIHsKLSAgICAgICAgCS8vc25kX3ByaW50aygiZXBjbSBmcmVlOiAlcFxuIiwgZXBjbSk7CisgICAgICAgIAkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZnJlZTogJXBcbiIsIGVwY20pOyAqLwogCQlrZnJlZShlcGNtKTsKIAl9CiB9CkBAIC0xODMsMTQgKzE4MywxNiBAQAogCWludCBlcnI7CiAKIAllcGNtID0ga3phbGxvYyhzaXplb2YoKmVwY20pLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsKKyAgICAgICAgLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsgKi8KIAogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKIAllcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Ci0gICAgICAgIC8vc25kX3ByaW50aygiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOwotICAKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsCisJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOworCSovCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZXBjbTsKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfcDE2dl9wY21fZnJlZV9zdWJzdHJlYW07CiAgIApAQCAtMjAwLDEwICsyMDIsMTUgQEAKICAgICAgICAgY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogICAgICAgICBjaGFubmVsLT51c2U9MTsKLQkvL3NuZF9wcmludGsoInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7Ci0gICAgICAgIC8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7Ci0gICAgICAgIC8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwotICAgICAgICBjaGFubmVsLT5lcGNtPWVwY207CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwKKwkJICAgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLworCS8qIGNoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsgKi8KKwljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAKQEAgLTIyNCwxNCArMjMxLDE2IEBACiAJaW50IGVycjsKIAogCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwotCS8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsgKi8KIAogCWlmIChlcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWVwY20tPmVtdSA9IGVtdTsKIAllcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Ci0JLy9zbmRfcHJpbnRrKCJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7Ci0KKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsCisJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOworCSovCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZXBjbTsKIAlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfcDE2dl9wY21fZnJlZV9zdWJzdHJlYW07CiAgIApAQCAtMjQxLDEwICsyNTAsMTUgQEAKIAljaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlPTE7Ci0JLy9zbmRfcHJpbnRrKCJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLCBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOwotCS8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7Ci0JLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7Ci0JY2hhbm5lbC0+ZXBjbT1lcGNtOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsCisJCSAgIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisjZW5kaWYgLyogZGVidWcgKi8KKwkvKiBjaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7ICovCisJY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzM0LDkgKzM0OCwxOSBAQAogCWludCBpOwogCXUzMiB0bXA7CiAJCi0gICAgICAgIC8vc25kX3ByaW50aygicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgcnVudGltZS0+cGVyaW9kcywgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIscnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKLQkvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLGVtdS0+cDE2dl9idWZmZXIuYWRkciwgZW11LT5wMTZ2X2J1ZmZlci5hcmVhLCBlbXUtPnAxNnZfYnVmZmVyLmJ5dGVzKTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCAiCisJCSAgICJmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgIgorCQkgICAicGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJCSAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJCSAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkJICAgcnVudGltZS0+cGVyaW9kcywgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPnAxNnZfYnVmZmVyLmFkZHIsIGVtdS0+cDE2dl9idWZmZXIuYXJlYSwKKwkJICAgZW11LT5wMTZ2X2J1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAl0bXAgPSBzbmRfZW11MTBrMV9wdHJfcmVhZChlbXUsIEFfU1BESUZfU0FNUExFUkFURSwgY2hhbm5lbCk7CiAgICAgICAgIHN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC0zNzksNyArNDAzLDE1IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgY2hhbm5lbCA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgLSBlbXUtPnAxNnZfZGV2aWNlX29mZnNldDsKIAl1MzIgdG1wOwotCS8vcHJpbnRrKCJwcmVwYXJlIGNhcHR1cmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZSBjYXB0dXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCAiCisJICAgICAgICJmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCAiCisJICAgICAgICJmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJICAgICAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkqLwogCXRtcCA9IHNuZF9lbXUxMGsxX3B0cl9yZWFkKGVtdSwgQV9TUERJRl9TQU1QTEVSQVRFLCBjaGFubmVsKTsKICAgICAgICAgc3dpdGNoIChydW50aW1lLT5yYXRlKSB7CiAJY2FzZSA0NDEwMDoKQEAgLTQ1OSwxMyArNDkxLDEzIEBACiAJCXJ1bnRpbWUgPSBzLT5ydW50aW1lOwogCQllcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCQljaGFubmVsID0gc3Vic3RyZWFtLT5wY20tPmRldmljZS1lbXUtPnAxNnZfZGV2aWNlX29mZnNldDsKLQkJLy9zbmRfcHJpbnRrKCJwMTZ2IGNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7CisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAicDE2diBjaGFubmVsPSVkXG4iLCBjaGFubmVsKTsgKi8KIAkJZXBjbS0+cnVubmluZyA9IHJ1bm5pbmc7CiAJCWJhc2ljIHw9ICgweDE8PGNoYW5uZWwpOwogCQlpbnRlIHw9IChJTlRFMl9QTEFZQkFDS19DSF8wX0xPT1A8PGNoYW5uZWwpOwogICAgICAgICAgICAgICAgIHNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CiAgICAgICAgIH0KLQkvL3NuZF9wcmludGsoImJhc2ljPTB4JXgsIGludGU9MHgleFxuIixiYXNpYywgaW50ZSk7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJiYXNpYz0weCV4LCBpbnRlPTB4JXhcbiIsIGJhc2ljLCBpbnRlKTsgKi8KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTU1OCw4ICs1OTAsMTMgQEAKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJidWZmZXIgY2FwdHVyZSBsaW1pdGVkIVxuIik7CiAJfQotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTU5Miw3ICs2MjksMTAgQEAKIAkvLyByZWxlYXNlIHRoZSBkYXRhCiAJaWYgKGNoaXAtPnAxNnZfYnVmZmVyLmFyZWEpIHsKIAkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT5wMTZ2X2J1ZmZlcik7Ci0JCS8vc25kX3ByaW50aygicGVyaW9kIGxhYmxlcyBmcmVlOiAlcFxuIiwgJmNoaXAtPnAxNnZfYnVmZmVyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJwZXJpb2QgbGFibGVzIGZyZWU6ICVwXG4iLAorCQkJICAgJmNoaXAtPnAxNnZfYnVmZmVyKTsKKwkJKi8KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MDQsNyArNjQ0LDcgQEAKIAlpbnQgZXJyOwogICAgICAgICBpbnQgY2FwdHVyZT0xOwogICAKLQkvL3NuZF9wcmludGsoInNuZF9wMTZ2X3BjbSBjYWxsZWQuIGRldmljZT0lZFxuIiwgZGV2aWNlKTsKKwkvKiBzbmRfcHJpbnRrKCJLRVJOX0RFQlVHIHNuZF9wMTZ2X3BjbSBjYWxsZWQuIGRldmljZT0lZFxuIiwgZGV2aWNlKTsgKi8KIAllbXUtPnAxNnZfZGV2aWNlX29mZnNldCA9IGRldmljZTsKIAlpZiAocnBjbSkKIAkJKnJwY20gPSBOVUxMOwpAQCAtNjMxLDcgKzY3MSwxMCBAQAogCQkJCQkJCSBzbmRfZG1hX3BjaV9kYXRhKGVtdS0+cGNpKSwgCiAJCQkJCQkJICgoNjU1MzYgLSA2NCkgKiA4KSwgKCg2NTUzNiAtIDY0KSAqIDgpKSkgPCAwKSAKIAkJCXJldHVybiBlcnI7Ci0JCS8vc25kX3ByaW50aygicHJlYWxsb2NhdGUgcGxheWJhY2sgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgInByZWFsbG9jYXRlIHBsYXliYWNrIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkqLwogCX0KIAogCWZvciAoc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtOyAKQEAgLTY0Miw3ICs2ODUsMTAgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShlbXUtPnBjaSksIAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNiAtIDY0LCA2NTUzNiAtIDY0KSkgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJLy9zbmRfcHJpbnRrKCJwcmVhbGxvY2F0ZSBjYXB0dXJlIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJwcmVhbGxvY2F0ZSBjYXB0dXJlIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkqLwogCX0KICAgCiAJaWYgKHJwY20pCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jIGIvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYwppbmRleCBkNzMwMGExLi4yMGI4ZGEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKQEAgLTUzLDcgKzUzLDEwIEBACiAJKnJ2b2ljZSA9IE5VTEw7CiAJZmlyc3Rfdm9pY2UgPSBsYXN0X3ZvaWNlID0gMDsKIAlmb3IgKGkgPSBlbXUtPm5leHRfZnJlZV92b2ljZSwgaiA9IDA7IGogPCBOVU1fRyA7IGkgKz0gbnVtYmVyLCBqICs9IG51bWJlcikgewotCQkvLyBwcmludGsoImkgJWQgaiAlZCBuZXh0IGZyZWUgJWQhXG4iLCBpLCBqLCBlbXUtPm5leHRfZnJlZV92b2ljZSk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJpICVkIGogJWQgbmV4dCBmcmVlICVkIVxuIiwKKwkJICAgICAgIGksIGosIGVtdS0+bmV4dF9mcmVlX3ZvaWNlKTsKKwkJKi8KIAkJaSAlPSBOVU1fRzsKIAogCQkvKiBzdGVyZW8gdm9pY2VzIG11c3QgYmUgZXZlbi9vZGQgKi8KQEAgLTcxLDcgKzc0LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAoIXNraXApIHsKLQkJCS8vIHByaW50aygiYWxsb2NhdGVkIHZvaWNlICVkXG4iLCBpKTsKKwkJCS8qIHByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZWQgdm9pY2UgJWRcbiIsIGkpOyAqLwogCQkJZmlyc3Rfdm9pY2UgPSBpOwogCQkJbGFzdF92b2ljZSA9IChpICsgbnVtYmVyKSAlIE5VTV9HOwogCQkJZW11LT5uZXh0X2ZyZWVfdm9pY2UgPSBsYXN0X3ZvaWNlOwpAQCAtODQsNyArODcsMTAgQEAKIAkKIAlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJdm9pY2UgPSAmZW11LT52b2ljZXNbKGZpcnN0X3ZvaWNlICsgaSkgJSBOVU1fR107Ci0JCS8vIHByaW50aygidm9pY2UgYWxsb2MgLSAlaSwgJWkgb2YgJWlcbiIsIHZvaWNlLT5udW1iZXIsIGlkeC1maXJzdF92b2ljZSsxLCBudW1iZXIpOworCQkvKgorCQlwcmludGsoa0VSTl9ERUJVRyAidm9pY2UgYWxsb2MgLSAlaSwgJWkgb2YgJWlcbiIsCisJCSAgICAgICB2b2ljZS0+bnVtYmVyLCBpZHgtZmlyc3Rfdm9pY2UrMSwgbnVtYmVyKTsKKwkJKi8KIAkJdm9pY2UtPnVzZSA9IDE7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEVNVTEwSzFfUENNOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggOWJmOTUzNi4uMThmNGQxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC01ODQsNyArNTg0LDggQEAKIAl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIEhaIC8gMTA7CiAKICNpZiAwCi0JcHJpbnRrKCJDT0RFQyBXUklURTogcmVnID0gMHgleCwgdmFsID0gMHgleCAoMHgleCksIGNyZWcgPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJDT0RFQyBXUklURTogcmVnID0gMHgleCwgdmFsID0gMHgleCAoMHgleCksIGNyZWcgPSAweCV4XG4iLAogCSAgICAgICByZWcsIHZhbCwgRVNfMTM3MF9DT0RFQ19XUklURShyZWcsIHZhbCksIEVTX1JFRyhlbnNvbmlxLCAxMzcwX0NPREVDKSk7CiAjZW5kaWYKIAlkbyB7CkBAIC0yNDA5LDkgKzI0MTAsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2Vuc29uaXFfY3JlYXRlKGNhcmQsIHBjaSwgJmVuc29uaXEpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCA0Y2Q5YTFmYS4uZGQ2M2IxMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTkzOC5jCisrKyBiL3NvdW5kL3BjaS9lczE5MzguYwpAQCAtMTY3MywxOCArMTY3MywyMiBAQAogCiAJc3RhdHVzID0gaW5iKFNMSU9fUkVHKGNoaXAsIElSUUNPTlRST0wpKTsKICNpZiAwCi0JcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIGludGVycnVwdCBzdGF0dXM6ID0weCV4XG4iLCBzdGF0dXMpOworCXByaW50ayhLRVJOX0RFQlVHICJFczE5MzhkZWJ1ZyAtIGludGVycnVwdCBzdGF0dXM6ID0weCV4XG4iLCBzdGF0dXMpOwogI2VuZGlmCiAJCiAJLyogQVVESU8gMSAqLwogCWlmIChzdGF0dXMgJiAweDEwKSB7CiAjaWYgMAotICAgICAgICAgICAgICAgIHByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgaW50ZXJydXB0XG4iKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBjb3VudDogJXVcbiIsCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBpbnRlcnJ1cHRcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGNvdW50OiAldVxuIiwKIAkJICAgICAgIGludyhTTERNX1JFRyhjaGlwLCBETUFDT1VOVCkpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBiYXNlOiAldVxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBiYXNlOiAldVxuIiwKIAkJICAgICAgIGlubChTTERNX1JFRyhjaGlwLCBETUFBRERSKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIHN0YXR1czogMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBzdGF0dXM6IDB4JXhcbiIsCiAJCSAgICAgICBpbmwoU0xETV9SRUcoY2hpcCwgRE1BU1RBVFVTKSkpOwogI2VuZGlmCiAJCS8qIGNsZWFyIGlycSAqLwpAQCAtMTY5OSwxMCArMTcwMywxMyBAQAogCS8qIEFVRElPIDIgKi8KIAlpZiAoc3RhdHVzICYgMHgyMCkgewogI2lmIDAKLSAgICAgICAgICAgICAgICBwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIGludGVycnVwdFxuIik7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgY291bnQ6ICV1XG4iLAorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgaW50ZXJydXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBjb3VudDogJXVcbiIsCiAJCSAgICAgICBpbncoU0xJT19SRUcoY2hpcCwgQVVESU8yRE1BQ09VTlQpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgYmFzZTogJXVcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgYmFzZTogJXVcbiIsCiAJCSAgICAgICBpbmwoU0xJT19SRUcoY2hpcCwgQVVESU8yRE1BQUREUikpKTsKIAogI2VuZGlmCkBAIC0xNzk5LDkgKzE4MDYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDU7IGlkeCsrKSB7CiAJCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCBpZHgpID09IDAgfHwKIAkJICAgICEocGNpX3Jlc291cmNlX2ZsYWdzKHBjaSwgaWR4KSAmIElPUkVTT1VSQ0VfSU8pKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTY4LmMgYi9zb3VuZC9wY2kvZXMxOTY4LmMKaW5kZXggZTljMzc5NC4uZGM5N2U4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTk2OC5jCisrKyBiL3NvdW5kL3BjaS9lczE5NjguYwpAQCAtMjY0NSw5ICsyNjQ1LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKICAgICAgICAgICAgICAgICAKIAlpZiAodG90YWxfYnVmc2l6ZVtkZXZdIDwgMTI4KQogCQl0b3RhbF9idWZzaXplW2Rldl0gPSAxMjg7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IGMxMjlmOWUuLjYwY2RiOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0xNDY4LDkgKzE0NjgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9mbTgwMV9jcmVhdGUoY2FyZCwgcGNpLCB0ZWE1NzV4X3R1bmVyW2Rldl0sICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKaW5kZXggOTYwZmQ3OS4uNGRlNWJhYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwpAQCAtMTM4LDYgKzEzOCw3IEBACiAKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYmVlcC0+ZGV2KTsKIAkJa2ZyZWUoYmVlcCk7CisJCWNvZGVjLT5iZWVwID0gTlVMTDsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKaW5kZXggYjk2NzlmMC4uNTFiZjZhNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaApAQCAtMzksNyArMzksNyBAQAogaW50IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbmlkKTsKIHZvaWQgc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2Vsc2UKLSNkZWZpbmUgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoLi4uKQorI2RlZmluZSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZSguLi4pCQkwCiAjZGVmaW5lIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKC4uLikKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCBkMDNmOTkyLi5hNGU1ZTU5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTY0Nyw5ICs2NDcsOSBAQAogCiAJdG90YWxfbm9kZXMgPSBzbmRfaGRhX2dldF9zdWJfbm9kZXMoY29kZWMsIEFDX05PREVfUk9PVCwgJm5pZCk7CiAJZm9yIChpID0gMDsgaSA8IHRvdGFsX25vZGVzOyBpKyssIG5pZCsrKSB7Ci0JCXVuc2lnbmVkIGludCBmdW5jOwotCQlmdW5jID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9GVU5DVElPTl9UWVBFKTsKLQkJc3dpdGNoIChmdW5jICYgMHhmZikgeworCQljb2RlYy0+ZnVuY3Rpb25faWQgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKKwkJCQkJCUFDX1BBUl9GVU5DVElPTl9UWVBFKSAmIDB4ZmY7CisJCXN3aXRjaCAoY29kZWMtPmZ1bmN0aW9uX2lkKSB7CiAJCWNhc2UgQUNfR1JQX0FVRElPX0ZVTkNUSU9OOgogCQkJY29kZWMtPmFmZyA9IG5pZDsKIAkJCWJyZWFrOwpAQCAtNjgyLDExICs2ODIsMTQwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHJlYWQgYWxsIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFuZCBzYXZlIGNvZGVjLT5pbml0X3BpbnMgKi8KK3N0YXRpYyBpbnQgcmVhZF9waW5fZGVmYXVsdHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJaGRhX25pZF90IG5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9ub2RlczsgaSsrLCBuaWQrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOworCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4KKwkJCQlBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCWlmICh3aWRfdHlwZSAhPSBBQ19XSURfUElOKQorCQkJY29udGludWU7CisJCXBpbiA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5pbml0X3BpbnMpOworCQlpZiAoIXBpbikKKwkJCXJldHVybiAtRU5PTUVNOworCQlwaW4tPm5pZCA9IG5pZDsKKwkJcGluLT5jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogbG9vayB1cCB0aGUgZ2l2ZW4gcGluIGNvbmZpZyBsaXN0IGFuZCByZXR1cm4gdGhlIGl0ZW0gbWF0Y2hpbmcgd2l0aCBOSUQgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3BpbmNmZyAqbG9va191cF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSBzdHJ1Y3Qgc25kX2FycmF5ICphcnJheSwKKwkJCQkJIGhkYV9uaWRfdCBuaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGFycmF5LT51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKGFycmF5LCBpKTsKKwkJaWYgKHBpbi0+bmlkID09IG5pZCkKKwkJCXJldHVybiBwaW47CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiB3cml0ZSBhIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIE5JRCAqLworc3RhdGljIHZvaWQgc2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjZmcpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAgKyBpLAorCQkJCSAgICBjZmcgJiAweGZmKTsKKwkJY2ZnID4+PSA4OworCX0KK30KKworLyogc2V0IHRoZSBjdXJyZW50IHBpbiBjb25maWcgdmFsdWUgZm9yIHRoZSBnaXZlbiBOSUQuCisgKiB0aGUgdmFsdWUgaXMgY2FjaGVkLCBhbmQgcmVhZCB2aWEgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKCkKKyAqLworaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKKwkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpCit7CisJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKwl1bnNpZ25lZCBpbnQgb2xkY2ZnOworCisJb2xkY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOworCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCBsaXN0LCBuaWQpOworCWlmICghcGluKSB7CisJCXBpbiA9IHNuZF9hcnJheV9uZXcobGlzdCk7CisJCWlmICghcGluKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBpbi0+bmlkID0gbmlkOworCX0KKwlwaW4tPmNmZyA9IGNmZzsKKworCS8qIGNoYW5nZSBvbmx5IHdoZW4gbmVlZGVkOyBlLmcuIGlmIHRoZSBwaW5jZmcgaXMgYWxyZWFkeSBwcmVzZW50CisJICogaW4gdXNlcl9waW5zW10sIGRvbid0IHdyaXRlIGl0CisJICovCisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOworCWlmIChvbGRjZmcgIT0gY2ZnKQorCQlzZXRfcGluY2ZnKGNvZGVjLCBuaWQsIGNmZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpCit7CisJcmV0dXJuIHNuZF9oZGFfYWRkX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgbmlkLCBjZmcpOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKTsKKworLyogZ2V0IHRoZSBjdXJyZW50IHBpbiBjb25maWcgdmFsdWUgb2YgdGhlIGdpdmVuIHBpbiBOSUQgKi8KK3Vuc2lnbmVkIGludCBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKworI2lmZGVmIENPTkZJR19TTkRfSERBX0hXREVQCisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKyNlbmRpZgorCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPmRyaXZlcl9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5pbml0X3BpbnMsIG5pZCk7CisJaWYgKHBpbikKKwkJcmV0dXJuIHBpbi0+Y2ZnOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKTsKKworLyogcmVzdG9yZSBhbGwgY3VycmVudCBwaW4gY29uZmlncyAqLworc3RhdGljIHZvaWQgcmVzdG9yZV9waW5jZmdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF9waW5zLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3BpbnMsIGkpOworCQlzZXRfcGluY2ZnKGNvZGVjLCBwaW4tPm5pZCwKKwkJCSAgIHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgcGluLT5uaWQpKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIGluaXRfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSwKIAkJCSAgIHVuc2lnbmVkIGludCByZWNvcmRfc2l6ZSk7CiBzdGF0aWMgdm9pZCBmcmVlX2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUpOwogCisvKiByZXN0b3JlIHRoZSBpbml0aWFsIHBpbiBjZmdzIGFuZCByZWxlYXNlIGFsbCBwaW5jZmcgbGlzdHMgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfaW5pdF9waW5jZmdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCS8qIGZpcnN0IGZyZWUgZHJpdmVyX3BpbnMgYW5kIHVzZXJfcGlucywgdGhlbiBjYWxsIHJlc3RvcmVfcGluY2ZnCisJICogc28gdGhhdCBvbmx5IHRoZSB2YWx1ZXMgaW4gaW5pdF9waW5zIGFyZSByZXN0b3JlZAorCSAqLworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+ZHJpdmVyX3BpbnMpOworI2lmZGVmIENPTkZJR19TTkRfSERBX0hXREVQCisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT51c2VyX3BpbnMpOworI2VuZGlmCisJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmluaXRfcGlucyk7Cit9CisKIC8qCiAgKiBjb2RlYyBkZXN0cnVjdG9yCiAgKi8KQEAgLTY5NCw2ICs4MjMsNyBAQAogewogCWlmICghY29kZWMpCiAJCXJldHVybjsKKwlyZXN0b3JlX2luaXRfcGluY2Zncyhjb2RlYyk7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvZGVjLT5wb3dlcl93b3JrKTsKIAlmbHVzaF93b3JrcXVldWUoY29kZWMtPmJ1cy0+d29ya3EpOwpAQCAtNzEyLDYgKzg0Miw5IEBACiAJa2ZyZWUoY29kZWMpOwogfQogCitzdGF0aWMgdm9pZCBoZGFfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZmcsCisJCQkJdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlKTsKKwogLyoqCiAgKiBzbmRfaGRhX2NvZGVjX25ldyAtIGNyZWF0ZSBhIEhEQSBjb2RlYwogICogQGJ1czogdGhlIGJ1cyB0byBhc3NpZ24KQEAgLTc1MSw2ICs4ODQsOCBAQAogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+YW1wX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9jYWNoZV9oZWFkKSk7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5taXhlcnMsIHNpemVvZihzdHJ1Y3Qgc25kX2tjb250cm9sICopLCAzMik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmRyaXZlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJaWYgKGNvZGVjLT5idXMtPm1vZGVsbmFtZSkgewogCQljb2RlYy0+bW9kZWxuYW1lID0ga3N0cmR1cChjb2RlYy0+YnVzLT5tb2RlbG5hbWUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWNvZGVjLT5tb2RlbG5hbWUpIHsKQEAgLTc4NywxNSArOTIyLDE4IEBACiAJc2V0dXBfZmdfbm9kZXMoY29kZWMpOwogCWlmICghY29kZWMtPmFmZyAmJiAhY29kZWMtPm1mZykgewogCQlzbmRfcHJpbnRkZCgiaGRhX2NvZGVjOiBubyBBRkcgb3IgTUZHIG5vZGUgZm91bmRcbiIpOwotCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAocmVhZF93aWRnZXRfY2Fwcyhjb2RlYywgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnKSA8IDApIHsKKwllcnIgPSByZWFkX3dpZGdldF9jYXBzKGNvZGVjLCBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IG1hbGxvY1xuIik7Ci0JCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGVycm9yOwogCX0KKwllcnIgPSByZWFkX3Bpbl9kZWZhdWx0cyhjb2RlYyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CiAKIAlpZiAoIWNvZGVjLT5zdWJzeXN0ZW1faWQpIHsKIAkJaGRhX25pZF90IG5pZCA9IGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZzsKQEAgLTgwNiwxMiArOTQ0LDE1IEBACiAJaWYgKGJ1cy0+bW9kZWxuYW1lKQogCQljb2RlYy0+bW9kZWxuYW1lID0ga3N0cmR1cChidXMtPm1vZGVsbmFtZSwgR0ZQX0tFUk5FTCk7CiAKKwkvKiBwb3dlci11cCBhbGwgYmVmb3JlIGluaXRpYWxpemF0aW9uICovCisJaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKKwkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCisJCQkgICAgQUNfUFdSU1RfRDApOworCiAJaWYgKGRvX2luaXQpIHsKIAkJZXJyID0gc25kX2hkYV9jb2RlY19jb25maWd1cmUoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm9yOwogCX0KIAlzbmRfaGRhX2NvZGVjX3Byb2NfbmV3KGNvZGVjKTsKIApAQCAtODI0LDYgKzk2NSwxMCBAQAogCWlmIChjb2RlY3ApCiAJCSpjb2RlY3AgPSBjb2RlYzsKIAlyZXR1cm4gMDsKKworIGVycm9yOgorCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfbmV3KTsKIApAQCAtOTA3LDYgKzEwNTIsNyBAQAogCiAvKiBGSVhNRTogbW9yZSBiZXR0ZXIgaGFzaCBrZXk/ICovCiAjZGVmaW5lIEhEQV9IQVNIX0tFWShuaWQsZGlyLGlkeCkgKHUzMikoKG5pZCkgKyAoKGlkeCkgPDwgMTYpICsgKChkaXIpIDw8IDI0KSkKKyNkZWZpbmUgSERBX0hBU0hfUElOQ0FQX0tFWShuaWQpICh1MzIpKChuaWQpICsgKDB4MDIgPDwgMjQpKQogI2RlZmluZSBJTkZPX0FNUF9DQVBTCSgxPDwwKQogI2RlZmluZSBJTkZPX0FNUF9WT0woY2gpCSgxIDw8ICgxICsgKGNoKSkpCiAKQEAgLTk5Nyw2ICsxMTQzLDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKTsKIAordTMyIHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkYV9hbXBfaW5mbyAqaW5mbzsKKworCWluZm8gPSBnZXRfYWxsb2NfYW1wX2hhc2goY29kZWMsIEhEQV9IQVNIX1BJTkNBUF9LRVkobmlkKSk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gMDsKKwlpZiAoIWluZm8tPmhlYWQudmFsKSB7CisJCWluZm8tPmFtcF9jYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJaW5mby0+aGVhZC52YWwgfD0gSU5GT19BTVBfQ0FQUzsKKwl9CisJcmV0dXJuIGluZm8tPmFtcF9jYXBzOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9xdWVyeV9waW5fY2Fwcyk7CisKIC8qCiAgKiByZWFkIHRoZSBjdXJyZW50IHZvbHVtZSB0byBpbmZvCiAgKiBpZiB0aGUgY2FjaGUgZXhpc3RzLCByZWFkIHRoZSBjYWNoZSB2YWx1ZS4KQEAgLTExMjAsNiArMTI4MSw3IEBACiAJdTE2IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKIAl1OCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJdTMyIGNhcHM7CiAKIAljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgZGlyKTsKQEAgLTExMzEsNiArMTI5Myw4IEBACiAJCSAgICAgICBrY29udHJvbC0+aWQubmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAob2ZzIDwgY2FwcykKKwkJY2FwcyAtPSBvZnM7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CiAJdWluZm8tPmNvdW50ID0gY2hzID09IDMgPyAyIDogMTsKIAl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwpAQCAtMTEzOSw2ICsxMzAzLDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfaW5mbyk7CiAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3JlYWRfYW1wX3ZhbHVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCSAgICAgICBpbnQgY2gsIGludCBkaXIsIGludCBpZHgsIHVuc2lnbmVkIGludCBvZnMpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwl2YWwgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIGNoLCBkaXIsIGlkeCk7CisJdmFsICY9IEhEQV9BTVBfVk9MTUFTSzsKKwlpZiAodmFsID49IG9mcykKKwkJdmFsIC09IG9mczsKKwllbHNlCisJCXZhbCA9IDA7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3VwZGF0ZV9hbXBfdmFsdWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCSBpbnQgY2gsIGludCBkaXIsIGludCBpZHgsIHVuc2lnbmVkIGludCBvZnMsCisJCSB1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPiAwKQorCQl2YWwgKz0gb2ZzOworCXJldHVybiBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgY2gsIGRpciwgaWR4LAorCQkJCQlIREFfQU1QX1ZPTE1BU0ssIHZhbCk7Cit9CisKIGludCBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTExNDcsMTQgKzEzMzcsMTMgQEAKIAlpbnQgY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKIAlpbnQgaWR4ID0gZ2V0X2FtcF9pbmRleChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CiAKIAlpZiAoY2hzICYgMSkKLQkJKnZhbHArKyA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgpCi0JCQkmIEhEQV9BTVBfVk9MTUFTSzsKKwkJKnZhbHArKyA9IHJlYWRfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4LCBvZnMpOwogCWlmIChjaHMgJiAyKQotCQkqdmFscCA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgpCi0JCQkmIEhEQV9BTVBfVk9MTUFTSzsKKwkJKnZhbHAgPSByZWFkX2FtcF92YWx1ZShjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCwgb2ZzKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQpOwpAQCAtMTE2NywxOCArMTM1NiwxNyBAQAogCWludCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOwogCWludCBpZHggPSBnZXRfYW1wX2luZGV4KGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKIAlpbnQgY2hhbmdlID0gMDsKIAogCXNuZF9oZGFfcG93ZXJfdXAoY29kZWMpOwogCWlmIChjaHMgJiAxKSB7Ci0JCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwKLQkJCQkJCSAgMHg3ZiwgKnZhbHApOworCQljaGFuZ2UgPSB1cGRhdGVfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4LCBvZnMsICp2YWxwKTsKIAkJdmFscCsrOwogCX0KIAlpZiAoY2hzICYgMikKLQkJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCwKLQkJCQkJCSAgIDB4N2YsICp2YWxwKTsKKwkJY2hhbmdlIHw9IHVwZGF0ZV9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsIG9mcywgKnZhbHApOwogCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KQEAgLTExOTAsNiArMTM3OCw3IEBACiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJdTMyIGNhcHMsIHZhbDEsIHZhbDI7CiAKIAlpZiAoc2l6ZSA8IDQgKiBzaXplb2YodW5zaWduZWQgaW50KSkKQEAgLTExOTgsNiArMTM4Nyw3IEBACiAJdmFsMiA9IChjYXBzICYgQUNfQU1QQ0FQX1NURVBfU0laRSkgPj4gQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVDsKIAl2YWwyID0gKHZhbDIgKyAxKSAqIDI1OwogCXZhbDEgPSAtKChjYXBzICYgQUNfQU1QQ0FQX09GRlNFVCkgPj4gQUNfQU1QQ0FQX09GRlNFVF9TSElGVCk7CisJdmFsMSArPSBvZnM7CiAJdmFsMSA9ICgoaW50KXZhbDEpICogKChpbnQpdmFsMik7CiAJaWYgKHB1dF91c2VyKFNORFJWX0NUTF9UTFZUX0RCX1NDQUxFLCBfdGx2KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjY4LDcgKzE0NTgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jdGxfYWRkKTsKIAotI2lmZGVmIENPTkZJR19TTkRfSERBX1JFQ09ORklHCiAvKiBDbGVhciBhbGwgY29udHJvbHMgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGNvZGVjICovCiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEyNzksOSArMTQ2OCw1MiBAQAogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bWl4ZXJzKTsKIH0KIAotdm9pZCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorLyogcHNldWRvIGRldmljZSBsb2NraW5nCisgKiB0b2dnbGUgY2FyZC0+c2h1dGRvd24gdG8gYWxsb3cvZGlzYWxsb3cgdGhlIGRldmljZSBhY2Nlc3MgKGFzIGEgaGFjaykKKyAqLworc3RhdGljIGludCBoZGFfbG9ja19kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIHsKLQlpbnQgaTsKKwlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCWlmIChjYXJkLT5zaHV0ZG93bikgeworCQlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljYXJkLT5zaHV0ZG93biA9IDE7CisJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZGFfdW5sb2NrX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJY2FyZC0+c2h1dGRvd24gPSAwOworCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKK30KKworaW50IHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY29kZWMtPmJ1cy0+Y2FyZDsKKwlpbnQgaSwgcGNtOworCisJaWYgKGhkYV9sb2NrX2RldmljZXMoY2FyZCkgPCAwKQorCQlyZXR1cm4gLUVCVVNZOworCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGNvZGVjIGlzbid0IHVzZWQgYnkgYW55IG1peGVyIG9yIFBDTSBzdHJlYW1zICovCisJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5jdGxfZmlsZXMpKSB7CisJCWhkYV91bmxvY2tfZGV2aWNlcyhjYXJkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZm9yIChwY20gPSAwOyBwY20gPCBjb2RlYy0+bnVtX3BjbXM7IHBjbSsrKSB7CisJCXN0cnVjdCBoZGFfcGNtICpjcGNtID0gJmNvZGVjLT5wY21faW5mb1twY21dOworCQlpZiAoIWNwY20tPnBjbSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3BjbS0+cGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbV9vcGVuZWQgfHwKKwkJICAgIGNwY20tPnBjbS0+c3RyZWFtc1sxXS5zdWJzdHJlYW1fb3BlbmVkKSB7CisJCQloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJLyogT0ssIGxldCBpdCBmcmVlICovCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPnBvd2VyX3dvcmspOwpAQCAtMTI5MSw4ICsxNTIzLDcgQEAKIAkvKiByZWxhc2UgUENNcyAqLwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX3BjbXM7IGkrKykgewogCQlpZiAoY29kZWMtPnBjbV9pbmZvW2ldLnBjbSkgewotCQkJc25kX2RldmljZV9mcmVlKGNvZGVjLT5idXMtPmNhcmQsCi0JCQkJCWNvZGVjLT5wY21faW5mb1tpXS5wY20pOworCQkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNvZGVjLT5wY21faW5mb1tpXS5wY20pOwogCQkJY2xlYXJfYml0KGNvZGVjLT5wY21faW5mb1tpXS5kZXZpY2UsCiAJCQkJICBjb2RlYy0+YnVzLT5wY21fZGV2X2JpdHMpOwogCQl9CkBAIC0xMzA1LDEzICsxNTM2LDIyIEBACiAJZnJlZV9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+YW1wX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOwogCWluaXRfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlLCBzaXplb2Yoc3RydWN0IGhkYV9jYWNoZV9oZWFkKSk7CisJLyogZnJlZSBvbmx5IGRyaXZlcl9waW5zIHNvIHRoYXQgaW5pdF9waW5zICsgdXNlcl9waW5zIGFyZSByZXN0b3JlZCAqLworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+ZHJpdmVyX3BpbnMpOworCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7CiAJY29kZWMtPm51bV9wY21zID0gMDsKIAljb2RlYy0+cGNtX2luZm8gPSBOVUxMOwogCWNvZGVjLT5wcmVzZXQgPSBOVUxMOworCW1lbXNldCgmY29kZWMtPnBhdGNoX29wcywgMCwgc2l6ZW9mKGNvZGVjLT5wYXRjaF9vcHMpKTsKKwljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBOVUxMOworCWNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgPSAwOwogCW1vZHVsZV9wdXQoY29kZWMtPm93bmVyKTsKIAljb2RlYy0+b3duZXIgPSBOVUxMOworCisJLyogYWxsb3cgZGV2aWNlIGFjY2VzcyBhZ2FpbiAqLworCWhkYV91bmxvY2tfZGV2aWNlcyhjYXJkKTsKKwlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyAqLwogCiAvKiBjcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sIGFuZCBhZGQgc2xhdmVzICovCiBpbnQgc25kX2hkYV9hZGRfdm1hc3RlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY2hhciAqbmFtZSwKQEAgLTEzMzYsMTUgKzE1NzYsMjAgQEAKIAkKIAlmb3IgKHMgPSBzbGF2ZXM7ICpzOyBzKyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqc2N0bDsKLQotCQlzY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgKnMpOwotCQlpZiAoIXNjdGwpIHsKLQkJCXNuZF9wcmludGRkKCJDYW5ub3QgZmluZCBzbGF2ZSAlcywgc2tpcHBlZFxuIiwgKnMpOwotCQkJY29udGludWU7CisJCWludCBpID0gMDsKKwkJZm9yICg7OykgeworCQkJc2N0bCA9IF9zbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAqcywgaSk7CisJCQlpZiAoIXNjdGwpIHsKKwkJCQlpZiAoIWkpCisJCQkJCXNuZF9wcmludGRkKCJDYW5ub3QgZmluZCBzbGF2ZSAlcywgIgorCQkJCQkJICAgICJza2lwcGVkXG4iLCAqcyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZShrY3RsLCBzY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlpKys7CiAJCX0KLQkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUoa2N0bCwgc2N0bCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTU1LDYgKzIyMDAsOCBAQAogCX0KIAlmb3IgKGRpZ19taXggPSBkaWdfaW5fY3RsczsgZGlnX21peC0+bmFtZTsgZGlnX21peCsrKSB7CiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoZGlnX21peCwgY29kZWMpOworCQlpZiAoIWtjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKIAkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IG5pZDsKIAkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKIAkJaWYgKGVyciA8IDApCkBAIC0yMDc0LDggKzIzMjEsNyBAQAogCQkJCSAqIGRvbid0IHBvd2VyIGRvd24gdGhlIHdpZGdldCBpZiBpdCBjb250cm9scwogCQkJCSAqIGVhcGQgYW5kIEVBUERfQlRMRU5BQkxFIGlzIHNldC4KIAkJCQkgKi8KLQkJCQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKLQkJCQkJCQkgICAgQUNfUEFSX1BJTl9DQVApOworCQkJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJCQkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9FQVBEKSB7CiAJCQkJCWludCBlYXBkID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLAogCQkJCQkJbmlkLCAwLApAQCAtMjE0NCw2ICsyMzkwLDcgQEAKIAloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAogCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKIAkJCSAgICBBQ19QV1JTVF9EMCk7CisJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsgLyogcmVzdG9yZSBhbGwgY3VycmVudCBwaW4gY29uZmlncyAqLwogCWhkYV9leGVjX2luaXRfdmVyYnMoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnJlc3VtZSkKIAkJY29kZWMtPnBhdGNoX29wcy5yZXN1bWUoY29kZWMpOwpAQCAtMjE3MSw4ICsyNDE4LDE2IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmYnVzLT5jb2RlY19saXN0LCBsaXN0KSB7CiAJCWludCBlcnIgPSBzbmRfaGRhX2NvZGVjX2J1aWxkX2NvbnRyb2xzKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBidWlsZCBjb250cm9scyIKKwkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsgCisJCQllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJoZGFfY29kZWM6IGNhbm5vdCByZXZlcnQgY29kZWNcbiIpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTgxLDE5ICsyNDM2LDEyIEBACiBpbnQgc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgZXJyID0gMDsKLQkvKiBmYWtlIGFzIGlmIGFscmVhZHkgcG93ZXJlZC1vbiAqLwotCWhkYV9rZWVwX3Bvd2VyX29uKGNvZGVjKTsKLQkvKiB0aGVuIGZpcmUgdXAgKi8KLQloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAotCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKLQkJCSAgICBBQ19QV1JTVF9EMCk7CiAJaGRhX2V4ZWNfaW5pdF92ZXJicyhjb2RlYyk7CiAJLyogY29udGludWUgdG8gaW5pdGlhbGl6ZS4uLiAqLwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLmluaXQpCiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuaW5pdChjb2RlYyk7CiAJaWYgKCFlcnIgJiYgY29kZWMtPnBhdGNoX29wcy5idWlsZF9jb250cm9scykKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5idWlsZF9jb250cm9scyhjb2RlYyk7Ci0Jc25kX2hkYV9wb3dlcl9kb3duKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTIzMDYsMTIgKzI1NTQsMTEgQEAKIHN0YXRpYyBpbnQgc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCXUzMiAqcmF0ZXNwLCB1NjQgKmZvcm1hdHNwLCB1bnNpZ25lZCBpbnQgKmJwc3ApCiB7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IHZhbCwgc3RyZWFtczsKKwl1bnNpZ25lZCBpbnQgaSwgdmFsLCB3Y2FwczsKIAogCXZhbCA9IDA7Ci0JaWYgKG5pZCAhPSBjb2RlYy0+YWZnICYmCi0JICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSkgeworCXdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOworCWlmIChuaWQgIT0gY29kZWMtPmFmZyAmJiAod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSkgewogCQl2YWwgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BDTSk7CiAJCWlmICh2YWwgPT0gLTEpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTIzMjUsMTUgKzI1NzIsMjAgQEAKIAkJCWlmICh2YWwgJiAoMSA8PCBpKSkKIAkJCQlyYXRlcyB8PSByYXRlX2JpdHNbaV0uYWxzYV9iaXRzOwogCQl9CisJCWlmIChyYXRlcyA9PSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IHJhdGVzID09IDAgIgorCQkJCSAgICIobmlkPTB4JXgsIHZhbD0weCV4LCBvdnJkPSVpKVxuIiwKKwkJCQkJbmlkLCB2YWwsCisJCQkJCSh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpID8gMSA6IDApOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAkJKnJhdGVzcCA9IHJhdGVzOwogCX0KIAogCWlmIChmb3JtYXRzcCB8fCBicHNwKSB7CiAJCXU2NCBmb3JtYXRzID0gMDsKLQkJdW5zaWduZWQgaW50IGJwczsKLQkJdW5zaWduZWQgaW50IHdjYXBzOworCQl1bnNpZ25lZCBpbnQgc3RyZWFtcywgYnBzOwogCi0JCXdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwogCQlzdHJlYW1zID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9TVFJFQU0pOwogCQlpZiAoc3RyZWFtcyA9PSAtMSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMjM4Niw2ICsyNjM4LDE1IEBACiAJCQlmb3JtYXRzIHw9IFNORFJWX1BDTV9GTVRCSVRfVTg7CiAJCQlicHMgPSA4OwogCQl9CisJCWlmIChmb3JtYXRzID09IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogZm9ybWF0cyA9PSAwICIKKwkJCQkgICAiKG5pZD0weCV4LCB2YWw9MHgleCwgb3ZyZD0laSwgIgorCQkJCSAgICJzdHJlYW1zPTB4JXgpXG4iLAorCQkJCQluaWQsIHZhbCwKKwkJCQkJKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkgPyAxIDogMCwKKwkJCQkJc3RyZWFtcyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCQlpZiAoZm9ybWF0c3ApCiAJCQkqZm9ybWF0c3AgPSBmb3JtYXRzOwogCQlpZiAoYnBzcCkKQEAgLTI1MDEsMTIgKzI3NjIsMTYgQEAKIHN0YXRpYyBpbnQgc2V0X3BjbV9kZWZhdWx0X3ZhbHVlcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaW5mbykKIHsKKwlpbnQgZXJyOworCiAJLyogcXVlcnkgc3VwcG9ydCBQQ00gaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4gTklEICovCiAJaWYgKGluZm8tPm5pZCAmJiAoIWluZm8tPnJhdGVzIHx8ICFpbmZvLT5mb3JtYXRzKSkgewotCQlzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20oY29kZWMsIGluZm8tPm5pZCwKKwkJZXJyID0gc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCiAJCQkJaW5mby0+cmF0ZXMgPyBOVUxMIDogJmluZm8tPnJhdGVzLAogCQkJCWluZm8tPmZvcm1hdHMgPyBOVUxMIDogJmluZm8tPmZvcm1hdHMsCiAJCQkJaW5mby0+bWF4YnBzID8gTlVMTCA6ICZpbmZvLT5tYXhicHMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChpbmZvLT5vcHMub3BlbiA9PSBOVUxMKQogCQlpbmZvLT5vcHMub3BlbiA9IGhkYV9wY21fZGVmYXVsdF9vcGVuX2Nsb3NlOwpAQCAtMjU0OSwxMyArMjgxNCwxMCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdWRpb19pZHgpOyBpKyspIHsKIAkJCWRldiA9IGF1ZGlvX2lkeFtpXTsKIAkJCWlmICghdGVzdF9iaXQoZGV2LCBidXMtPnBjbV9kZXZfYml0cykpCi0JCQkJYnJlYWs7CisJCQkJZ290byBvazsKIAkJfQotCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGF1ZGlvX2lkeCkpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJUb28gbWFueSBhdWRpbyBkZXZpY2VzXG4iKTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JCWJyZWFrOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgYXVkaW8gZGV2aWNlc1xuIik7CisJCXJldHVybiAtRUFHQUlOOwogCWNhc2UgSERBX1BDTV9UWVBFX1NQRElGOgogCWNhc2UgSERBX1BDTV9UWVBFX0hETUk6CiAJY2FzZSBIREFfUENNX1RZUEVfTU9ERU06CkBAIC0yNTcwLDYgKzI4MzIsNyBAQAogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBQQ00gdHlwZSAlZFxuIiwgdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKyBvazoKIAlzZXRfYml0KGRldiwgYnVzLT5wY21fZGV2X2JpdHMpOwogCXJldHVybiBkZXY7CiB9CkBAIC0yNjA2LDI0ICsyODY5LDM2IEBACiAJCWlmICghY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zKQogCQkJcmV0dXJuIDA7CiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcyhjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYnVpbGQgUENNcyIKKwkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsgCisJCQllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJoZGFfY29kZWM6IGNhbm5vdCByZXZlcnQgY29kZWNcbiIpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KIAl9CiAJZm9yIChwY20gPSAwOyBwY20gPCBjb2RlYy0+bnVtX3BjbXM7IHBjbSsrKSB7CiAJCXN0cnVjdCBoZGFfcGNtICpjcGNtID0gJmNvZGVjLT5wY21faW5mb1twY21dOwogCQlpbnQgZGV2OwogCiAJCWlmICghY3BjbS0+c3RyZWFtWzBdLnN1YnN0cmVhbXMgJiYgIWNwY20tPnN0cmVhbVsxXS5zdWJzdHJlYW1zKQotCQkJcmV0dXJuIDA7IC8qIG5vIHN1YnN0cmVhbXMgYXNzaWduZWQgKi8KKwkJCWNvbnRpbnVlOyAvKiBubyBzdWJzdHJlYW1zIGFzc2lnbmVkICovCiAKIAkJaWYgKCFjcGNtLT5wY20pIHsKIAkJCWRldiA9IGdldF9lbXB0eV9wY21fZGV2aWNlKGNvZGVjLT5idXMsIGNwY20tPnBjbV90eXBlKTsKIAkJCWlmIChkZXYgPCAwKQotCQkJCXJldHVybiAwOworCQkJCWNvbnRpbnVlOyAvKiBubyBmYXRhbCBlcnJvciAqLwogCQkJY3BjbS0+ZGV2aWNlID0gZGV2OwogCQkJZXJyID0gc25kX2hkYV9hdHRhY2hfcGNtKGNvZGVjLCBjcGNtKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYXR0YWNoICIKKwkJCQkgICAgICAgIlBDTSBzdHJlYW0gJWQgZm9yIGNvZGVjICMlZFxuIiwKKwkJCQkgICAgICAgZGV2LCBjb2RlYy0+YWRkcik7CisJCQkJY29udGludWU7IC8qIG5vIGZhdGFsIGVycm9yICovCisJCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzI0LDggKzM1OTksNyBAQAogCQlpZiAoaWdub3JlX25pZHMgJiYgaXNfaW5fbmlkX2xpc3QobmlkLCBpZ25vcmVfbmlkcykpCiAJCQljb250aW51ZTsKIAotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKIAkJCWNvbnRpbnVlOwogCQlsb2MgPSBnZXRfZGVmY2ZnX2xvY2F0aW9uKGRlZl9jb25mKTsKQEAgLTM0MDEsMTAgKzM2NzUsMjIgQEAKIAkJCWNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9BVVhdID0gbmlkOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfSkFDS19TUERJRl9PVVQ6Ci0JCQljZmctPmRpZ19vdXRfcGluID0gbmlkOworCQljYXNlIEFDX0pBQ0tfRElHX09USEVSX09VVDoKKwkJCWlmIChjZmctPmRpZ19vdXRzID49IEFSUkFZX1NJWkUoY2ZnLT5kaWdfb3V0X3BpbnMpKQorCQkJCWNvbnRpbnVlOworCQkJY2ZnLT5kaWdfb3V0X3BpbnNbY2ZnLT5kaWdfb3V0c10gPSBuaWQ7CisJCQljZmctPmRpZ19vdXRfdHlwZVtjZmctPmRpZ19vdXRzXSA9CisJCQkJKGxvYyA9PSBBQ19KQUNLX0xPQ19IRE1JKSA/CisJCQkJSERBX1BDTV9UWVBFX0hETUkgOiBIREFfUENNX1RZUEVfU1BESUY7CisJCQljZmctPmRpZ19vdXRzKys7CiAJCQlicmVhazsKIAkJY2FzZSBBQ19KQUNLX1NQRElGX0lOOgorCQljYXNlIEFDX0pBQ0tfRElHX09USEVSX0lOOgogCQkJY2ZnLT5kaWdfaW5fcGluID0gbmlkOworCQkJaWYgKGxvYyA9PSBBQ19KQUNLX0xPQ19IRE1JKQorCQkJCWNmZy0+ZGlnX2luX3R5cGUgPSBIREFfUENNX1RZUEVfSERNSTsKKwkJCWVsc2UKKwkJCQljZmctPmRpZ19pbl90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zNTEwLDYgKzM3OTYsOSBAQAogCQkgICBjZmctPmhwX3BpbnNbMV0sIGNmZy0+aHBfcGluc1syXSwKIAkJICAgY2ZnLT5ocF9waW5zWzNdLCBjZmctPmhwX3BpbnNbNF0pOwogCXNuZF9wcmludGQoIiAgIG1vbm86IG1vbm9fb3V0PTB4JXhcbiIsIGNmZy0+bW9ub19vdXRfcGluKTsKKwlpZiAoY2ZnLT5kaWdfb3V0cykKKwkJc25kX3ByaW50ZCgiICAgZGlnLW91dD0weCV4LzB4JXhcbiIsCisJCQkgICBjZmctPmRpZ19vdXRfcGluc1swXSwgY2ZnLT5kaWdfb3V0X3BpbnNbMV0pOwogCXNuZF9wcmludGQoIiAgIGlucHV0czogbWljPTB4JXgsIGZtaWM9MHgleCwgbGluZT0weCV4LCBmbGluZT0weCV4LCIKIAkJICAgIiBjZD0weCV4LCBhdXg9MHgleFxuIiwKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10sCkBAIC0zNTE4LDYgKzM4MDcsOCBAQAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTElORV0sCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9DRF0sCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9BVVhdKTsKKwlpZiAoY2ZnLT5kaWdfaW5fcGluKQorCQlzbmRfcHJpbnRkKCIgICBkaWctaW49MHgleFxuIiwgY2ZnLT5kaWdfaW5fcGluKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggMDlhMzMyYS4uMmZkZWNmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC03MzksNiArNzM5LDcgQEAKIAloZGFfbmlkX3QgbWZnOwkvKiBNRkcgbm9kZSBpZCAqLwogCiAJLyogaWRzICovCisJdTMyIGZ1bmN0aW9uX2lkOwogCXUzMiB2ZW5kb3JfaWQ7CiAJdTMyIHN1YnN5c3RlbV9pZDsKIAl1MzIgcmV2aXNpb25faWQ7CkBAIC03NzgsMTEgKzc3OSwxNCBAQAogCXVuc2lnbmVkIHNob3J0IHNwZGlmX2N0bHM7CS8qIFNQRElGIGNvbnRyb2wgYml0cyAqLwogCXVuc2lnbmVkIGludCBzcGRpZl9pbl9lbmFibGU7CS8qIFNQRElGIGlucHV0IGVuYWJsZT8gKi8KIAloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOyAvKiBvcHRpb25hbCBkaWdpdGFsIG91dCBzbGF2ZSB3aWRnZXRzICovCisJc3RydWN0IHNuZF9hcnJheSBpbml0X3BpbnM7CS8qIGluaXRpYWwgKEJJT1MpIHBpbiBjb25maWd1cmF0aW9ucyAqLworCXN0cnVjdCBzbmRfYXJyYXkgZHJpdmVyX3BpbnM7CS8qIHBpbiBjb25maWdzIHNldCBieSBjb2RlYyBwYXJzZXIgKi8KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0hXREVQCiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXA7CS8qIGFzc2lnbmVkIGh3ZGVwIGRldmljZSAqLwogCXN0cnVjdCBzbmRfYXJyYXkgaW5pdF92ZXJiczsJLyogYWRkaXRpb25hbCBpbml0IHZlcmJzICovCiAJc3RydWN0IHNuZF9hcnJheSBoaW50czsJCS8qIGFkZGl0aW9uYWwgaGludHMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IHVzZXJfcGluczsJLyogZGVmYXVsdCBwaW4gY29uZmlncyB0byBvdmVycmlkZSAqLwogI2VuZGlmCiAKIAkvKiBtaXNjIGZsYWdzICovCkBAIC03OTAsNiArNzk0LDkgQEAKIAkJCQkJICAgICAqIHN0YXR1cyBjaGFuZ2UKIAkJCQkJICAgICAqIChlLmcuIFJlYWx0ZWsgY29kZWNzKQogCQkJCQkgICAgICovCisJdW5zaWduZWQgaW50IHBpbl9hbXBfd29ya2Fyb3VuZDoxOyAvKiBwaW4gb3V0LWFtcCB0YWtlcyBpbmRleAorCQkJCQkgICAgKiAoZS5nLiBDb25leGFudCBjb2RlY3MpCisJCQkJCSAgICAqLwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAl1bnNpZ25lZCBpbnQgcG93ZXJfb24gOjE7CS8qIGN1cnJlbnQgKGdsb2JhbCkgcG93ZXItc3RhdGUgKi8KIAl1bnNpZ25lZCBpbnQgcG93ZXJfdHJhbnNpdGlvbiA6MTsgLyogcG93ZXItc3RhdGUgaW4gdHJhbnNpdGlvbiAqLwpAQCAtODU1LDYgKzg2MiwxOCBAQAogI2RlZmluZSBzbmRfaGRhX3NlcXVlbmNlX3dyaXRlX2NhY2hlCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUKICNlbmRpZgogCisvKiB0aGUgc3RydWN0IGZvciBjb2RlYy0+cGluX2NvbmZpZ3MgKi8KK3N0cnVjdCBoZGFfcGluY2ZnIHsKKwloZGFfbmlkX3QgbmlkOworCXVuc2lnbmVkIGludCBjZmc7Cit9OworCit1bnNpZ25lZCBpbnQgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKK2ludCBzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBjZmcpOworaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKKwkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpOyAvKiBmb3IgaHdkZXAgKi8KKwogLyoKICAqIE1peGVyCiAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwppbmRleCA2NTc0NWU5Li4xZDU3OTdhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCkBAIC0xNDQsOSArMTQ0LDkgQEAKIAlub2RlLT50eXBlID0gKG5vZGUtPndpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CiAKIAlpZiAobm9kZS0+dHlwZSA9PSBBQ19XSURfUElOKSB7Ci0JCW5vZGUtPnBpbl9jYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBub2RlLT5uaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJbm9kZS0+cGluX2NhcHMgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBub2RlLT5uaWQpOwogCQlub2RlLT5waW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBub2RlLT5uaWQsIDAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JCW5vZGUtPmRlZl9jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5vZGUtPm5pZCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlub2RlLT5kZWZfY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBub2RlLT5uaWQpOwogCX0KIAogCWlmIChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfT1VUX0FNUCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKaW5kZXggNGFlNTFkYy4uMWM1NzUwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCkBAIC0zMCw2ICszMCwxMiBAQAogI2luY2x1ZGUgPHNvdW5kL2hkYV9od2RlcC5oPgogI2luY2x1ZGUgPHNvdW5kL21pbm9ycy5oPgogCisvKiBoaW50IHN0cmluZyBwYWlyICovCitzdHJ1Y3QgaGRhX2hpbnQgeworCWNvbnN0IGNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWw7CS8qIGNvbnRhaW5lZCBpbiB0aGUgc2FtZSBhbGxvYyBhcyBrZXkgKi8KK307CisKIC8qCiAgKiB3cml0ZS9yZWFkIGFuIG91dC1vZi1ib3VuZCB2ZXJiCiAgKi8KQEAgLTk5LDE2ICsxMDUsMTcgQEAKIAogc3RhdGljIHZvaWQgY2xlYXJfaHdkZXBfZWxlbWVudHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JY2hhciAqKmhlYWQ7CiAJaW50IGk7CiAKIAkvKiBjbGVhciBpbml0IHZlcmJzICovCiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5pbml0X3ZlcmJzKTsKIAkvKiBjbGVhciBoaW50cyAqLwotCWhlYWQgPSBjb2RlYy0+aGludHMubGlzdDsKLQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKywgaGVhZCsrKQotCQlrZnJlZSgqaGVhZCk7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWtmcmVlKGhpbnQtPmtleSk7IC8qIHdlIGRvbid0IG5lZWQgdG8gZnJlZSBoaW50LT52YWwgKi8KKwl9CiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5oaW50cyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT51c2VyX3BpbnMpOwogfQogCiBzdGF0aWMgdm9pZCBod2RlcF9mcmVlKHN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwKQpAQCAtMTQwLDcgKzE0Nyw4IEBACiAjZW5kaWYKIAogCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aW5pdF92ZXJicywgc2l6ZW9mKHN0cnVjdCBoZGFfdmVyYiksIDMyKTsKLQlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmhpbnRzLCBzaXplb2YoY2hhciAqKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aGludHMsIHNpemVvZihzdHJ1Y3QgaGRhX2hpbnQpLCAzMik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT51c2VyX3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUzLDcgKzE2MSwxMyBAQAogCiBzdGF0aWMgaW50IGNsZWFyX2NvZGVjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJUaGUgY29kZWMgaXMgYmVpbmcgdXNlZCwgY2FuJ3QgZnJlZS5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAljbGVhcl9od2RlcF9lbGVtZW50cyhjb2RlYyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjIsMjAgKzE3NiwyOSBAQAogewogCWludCBlcnI7CiAKKwlzbmRfaGRhX3Bvd2VyX3VwKGNvZGVjKTsKIAlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiaGRhLWNvZGVjOiByZWNvbmZpZ3VyaW5nXG4iKTsKLQlzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiVGhlIGNvZGVjIGlzIGJlaW5nIHVzZWQsIGNhbid0IHJlY29uZmlndXJlLlxuIik7CisJCWdvdG8gZXJyb3I7CisJfQogCWVyciA9IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJvcjsKIAkvKiByZWJ1aWxkIFBDTXMgKi8KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2J1aWxkX3BjbXMoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycm9yOwogCS8qIHJlYnVpbGQgbWl4ZXJzICovCiAJZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIHNuZF9jYXJkX3JlZ2lzdGVyKGNvZGVjLT5idXMtPmNhcmQpOworCQlnb3RvIGVycm9yOworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNvZGVjLT5idXMtPmNhcmQpOworIGVycm9yOgorCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTI3MSw2ICsyOTQsMjIgQEAKIENPREVDX0FDVElPTl9TVE9SRShyZWNvbmZpZyk7CiBDT0RFQ19BQ1RJT05fU1RPUkUoY2xlYXIpOwogCitzdGF0aWMgc3NpemVfdCBpbml0X3ZlcmJzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfdmVyYnMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfdmVyYiAqdiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF92ZXJicywgaSk7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiMHglMDJ4IDB4JTAzeCAweCUwNHhcbiIsCisJCQkJdi0+bmlkLCB2LT52ZXJiLCB2LT5wYXJhbSk7CisJfQorCXJldHVybiBsZW47Cit9CisKIHN0YXRpYyBzc2l6ZV90IGluaXRfdmVyYnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMjkzLDI2ICszMzIsMTU3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBoaW50c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSIlcyA9ICVzXG4iLCBoaW50LT5rZXksIGhpbnQtPnZhbCk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2hpbnQgKmdldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJaWYgKCFzdHJjbXAoaGludC0+a2V5LCBrZXkpKQorCQkJcmV0dXJuIGhpbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdHJhaWxfc3BhY2VzKGNoYXIgKnN0cikKK3sKKwljaGFyICpwOworCWlmICghKnN0cikKKwkJcmV0dXJuOworCXAgPSBzdHIgKyBzdHJsZW4oc3RyKSAtIDE7CisJZm9yICg7IGlzc3BhY2UoKnApOyBwLS0pIHsKKwkJKnAgPSAwOworCQlpZiAocCA9PSBzdHIpCisJCQlyZXR1cm47CisJfQorfQorCisjZGVmaW5lIE1BWF9ISU5UUwkxMDI0CisKIHN0YXRpYyBzc2l6ZV90IGhpbnRzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcDsKLQljaGFyICoqaGludDsKKwljaGFyICprZXksICp2YWw7CisJc3RydWN0IGhkYV9oaW50ICpoaW50OwogCi0JaWYgKCEqYnVmIHx8IGlzc3BhY2UoKmJ1ZikgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQorCXdoaWxlIChpc3NwYWNlKCpidWYpKQorCQlidWYrKzsKKwlpZiAoISpidWYgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQogCQlyZXR1cm4gY291bnQ7Ci0JcCA9IGtzdHJuZHVwX25vZW9sKGJ1ZiwgMTAyNCk7Ci0JaWYgKCFwKQorCWlmICgqYnVmID09ICc9JykKKwkJcmV0dXJuIC1FSU5WQUw7CisJa2V5ID0ga3N0cm5kdXBfbm9lb2woYnVmLCAxMDI0KTsKKwlpZiAoIWtleSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaGludCA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5oaW50cyk7CisJLyogZXh0cmFjdCBrZXkgYW5kIHZhbCAqLworCXZhbCA9IHN0cmNocihrZXksICc9Jyk7CisJaWYgKCF2YWwpIHsKKwkJa2ZyZWUoa2V5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSp2YWwrKyA9IDA7CisJd2hpbGUgKGlzc3BhY2UoKnZhbCkpCisJCXZhbCsrOworCXJlbW92ZV90cmFpbF9zcGFjZXMoa2V5KTsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKHZhbCk7CisJaGludCA9IGdldF9oaW50KGNvZGVjLCBrZXkpOworCWlmIChoaW50KSB7CisJCS8qIHJlcGxhY2UgKi8KKwkJa2ZyZWUoaGludC0+a2V5KTsKKwkJaGludC0+a2V5ID0ga2V5OworCQloaW50LT52YWwgPSB2YWw7CisJCXJldHVybiBjb3VudDsKKwl9CisJLyogYWxsb2NhdGUgYSBuZXcgaGludCBlbnRyeSAqLworCWlmIChjb2RlYy0+aGludHMudXNlZCA+PSBNQVhfSElOVFMpCisJCWhpbnQgPSBOVUxMOworCWVsc2UKKwkJaGludCA9IHNuZF9hcnJheV9uZXcoJmNvZGVjLT5oaW50cyk7CiAJaWYgKCFoaW50KSB7Ci0JCWtmcmVlKHApOworCQlrZnJlZShrZXkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JKmhpbnQgPSBwOworCWhpbnQtPmtleSA9IGtleTsKKwloaW50LT52YWwgPSB2YWw7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwaW5fY29uZmlnc19zaG93KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCXN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCQkJY2hhciAqYnVmKQoreworCWludCBpLCBsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKGxpc3QsIGkpOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIweCUwMnggMHglMDh4XG4iLAorCQkJICAgICAgIHBpbi0+bmlkLCBwaW4tPmNmZyk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGluaXRfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT5pbml0X3BpbnMsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzZXJfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRyaXZlcl9waW5fY29uZmlnc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gcGluX2NvbmZpZ3Nfc2hvdyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgYnVmKTsKK30KKworI2RlZmluZSBNQVhfUElOX0NPTkZJR1MJCTMyCisKK3N0YXRpYyBzc2l6ZV90IHVzZXJfcGluX2NvbmZpZ3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCWludCBuaWQsIGNmZzsKKwlpbnQgZXJyOworCisJaWYgKHNzY2FuZihidWYsICIlaSAlaSIsICZuaWQsICZjZmcpICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghbmlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSBzbmRfaGRhX2FkZF9waW5jZmcoY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBuaWQsIGNmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMzEsOCArNTAxLDExIEBACiAJQ09ERUNfQVRUUl9STyhtZmcpLAogCUNPREVDX0FUVFJfUlcobmFtZSksCiAJQ09ERUNfQVRUUl9SVyhtb2RlbG5hbWUpLAotCUNPREVDX0FUVFJfV08oaW5pdF92ZXJicyksCi0JQ09ERUNfQVRUUl9XTyhoaW50cyksCisJQ09ERUNfQVRUUl9SVyhpbml0X3ZlcmJzKSwKKwlDT0RFQ19BVFRSX1JXKGhpbnRzKSwKKwlDT0RFQ19BVFRSX1JPKGluaXRfcGluX2NvbmZpZ3MpLAorCUNPREVDX0FUVFJfUlcodXNlcl9waW5fY29uZmlncyksCisJQ09ERUNfQVRUUl9STyhkcml2ZXJfcGluX2NvbmZpZ3MpLAogCUNPREVDX0FUVFJfV08ocmVjb25maWcpLAogCUNPREVDX0FUVFJfV08oY2xlYXIpLAogfTsKQEAgLTM1MSw0ICs1MjQsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIExvb2sgZm9yIGhpbnQgc3RyaW5nCisgKi8KK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBnZXRfaGludChjb2RlYywga2V5KTsKKwlyZXR1cm4gaGludCA/IGhpbnQtPnZhbCA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2dldF9oaW50KTsKKworaW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCWNvbnN0IGNoYXIgKnAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCBrZXkpOworCWlmICghcCB8fCAhKnApCisJCXJldHVybiAtRU5PRU5UOworCXN3aXRjaCAodG91cHBlcigqcCkpIHsKKwljYXNlICdUJzogLyogdHJ1ZSAqLworCWNhc2UgJ1knOiAvKiB5ZXMgKi8KKwljYXNlICcxJzoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfYm9vbF9oaW50KTsKKwogI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1JFQ09ORklHICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBmM2I1NzIzLi4zMDgyOWVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTM4MSw2ICszODEsNyBAQAogCiAJLyogSEQgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjb2RlY19tYXNrOworCWludCAgY29kZWNfcHJvYmVfbWFzazsgLyogY29waWVkIGZyb20gcHJvYmVfbWFzayBvcHRpb24gKi8KIAlzdHJ1Y3QgaGRhX2J1cyAqYnVzOwogCiAJLyogQ09SQi9SSVJCICovCkBAIC04NTgsMTMgKzg1OSwxOCBAQAogCQkgICAgICBTRF9DVExfRE1BX1NUQVJUIHwgU0RfSU5UX01BU0spOwogfQogCi0vKiBzdG9wIGEgc3RyZWFtICovCi1zdGF0aWMgdm9pZCBhenhfc3RyZWFtX3N0b3Aoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCisvKiBzdG9wIERNQSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9jbGVhcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKIHsKLQkvKiBzdG9wIERNQSAqLwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSAmCiAJCSAgICAgIH4oU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKSk7CiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9TVFMsIFNEX0lOVF9NQVNLKTsgLyogdG8gYmUgc3VyZSAqLworfQorCisvKiBzdG9wIGEgc3RyZWFtICovCitzdGF0aWMgdm9pZCBhenhfc3RyZWFtX3N0b3Aoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCit7CisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBkaXNhYmxlIFNJRSAqLwogCWF6eF93cml0ZWIoY2hpcCwgSU5UQ1RMLAogCQkgICBhenhfcmVhZGIoY2hpcCwgSU5UQ1RMKSAmIH4oMSA8PCBhenhfZGV2LT5pbmRleCkpOwpAQCAtMTA3NSw4ICsxMDgxLDcgQEAKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAotCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwotCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IHBlcmlvZF9ieXRlczsKKwlwZXJpb2RfYnl0ZXMgPSBhenhfZGV2LT5wZXJpb2RfYnl0ZXM7CiAJcGVyaW9kcyA9IGF6eF9kZXYtPmJ1ZnNpemUgLyBwZXJpb2RfYnl0ZXM7CiAKIAkvKiBwcm9ncmFtIHRoZSBpbml0aWFsIEJETCBlbnRyaWVzICovCkBAIC0xMTIzLDI0ICsxMTI4LDE3IEBACiAgZXJyb3I6CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgQkRMIGVudHJpZXM6IGJ1ZmZlcj0lZCwgcGVyaW9kPSVkXG4iLAogCQkgICBhenhfZGV2LT5idWZzaXplLCBwZXJpb2RfYnl0ZXMpOwotCS8qIHJlc2V0ICovCi0JYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7Ci0JYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qCi0gKiBzZXQgdXAgdGhlIFNEIGZvciBzdHJlYW1pbmcKLSAqLwotc3RhdGljIGludCBhenhfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKKy8qIHJlc2V0IHN0cmVhbSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9yZXNldChzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAlpbnQgdGltZW91dDsKIAotCS8qIG1ha2Ugc3VyZSB0aGUgcnVuIGJpdCBpcyB6ZXJvIGZvciBTRCAqLwotCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSAmCi0JCSAgICAgIH5TRF9DVExfRE1BX1NUQVJUKTsKLQkvKiByZXNldCBzdHJlYW0gKi8KKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOworCiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpIHwKIAkJICAgICAgU0RfQ1RMX1NUUkVBTV9SRVNFVCk7CiAJdWRlbGF5KDMpOwpAQCAtMTE1Nyw3ICsxMTU1LDE1IEBACiAJd2hpbGUgKCgodmFsID0gYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkpICYgU0RfQ1RMX1NUUkVBTV9SRVNFVCkgJiYKIAkgICAgICAgLS10aW1lb3V0KQogCQk7Cit9CiAKKy8qCisgKiBzZXQgdXAgdGhlIFNEIGZvciBzdHJlYW1pbmcKKyAqLworc3RhdGljIGludCBhenhfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKK3sKKwkvKiBtYWtlIHN1cmUgdGhlIHJ1biBiaXQgaXMgemVybyBmb3IgU0QgKi8KKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOwogCS8qIHByb2dyYW0gdGhlIHN0cmVhbV90YWcgKi8KIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0NUTCwKIAkJICAgICAgKGF6eF9zZF9yZWFkbChhenhfZGV2LCBTRF9DVEwpICYgflNEX0NUTF9TVFJFQU1fVEFHX01BU0spfApAQCAtMTIyOCw3ICsxMjM0LDYgQEAKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGF6eF9jb2RlY19jcmVhdGUoc3RydWN0IGF6eCAqY2hpcCwgY29uc3QgY2hhciAqbW9kZWwsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGNvZGVjX3Byb2JlX21hc2ssCiAJCQkJICAgICAgaW50IG5vX2luaXQpCiB7CiAJc3RydWN0IGhkYV9idXNfdGVtcGxhdGUgYnVzX3RlbXA7CkBAIC0xMjYxLDcgKzEyNjYsNyBAQAogCiAJLyogRmlyc3QgdHJ5IHRvIHByb2JlIGFsbCBnaXZlbiBjb2RlYyBzbG90cyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewotCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjb2RlY19wcm9iZV9tYXNrKSB7CisJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCWlmIChwcm9iZV9jb2RlYyhjaGlwLCBjKSA8IDApIHsKIAkJCQkvKiBTb21lIEJJT1NlbiBnaXZlIHlvdSB3cm9uZyBjb2RlYyBhZGRyZXNzZXMKIAkJCQkgKiB0aGF0IGRvbid0IGV4aXN0CkBAIC0xMjg1LDcgKzEyOTAsNyBAQAogCiAJLyogVGhlbiBjcmVhdGUgY29kZWMgaW5zdGFuY2VzICovCiAJZm9yIChjID0gMDsgYyA8IG1heF9zbG90czsgYysrKSB7Ci0JCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNvZGVjX3Byb2JlX21hc2spIHsKKwkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY2hpcC0+Y29kZWNfcHJvYmVfbWFzaykgewogCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CiAJCQllcnIgPSBzbmRfaGRhX2NvZGVjX25ldyhjaGlwLT5idXMsIGMsICFub19pbml0LCAmY29kZWMpOwogCQkJaWYgKGVyciA8IDApCkBAIC0xNDAzLDYgKzE0MDgsOCBAQAogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGF6eF9kZXY7CiAJc25kX3BjbV9zZXRfc3luYyhzdWJzdHJlYW0pOwogCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisKKwlhenhfc3RyZWFtX3Jlc2V0KGNoaXAsIGF6eF9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDI5LDYgKzE0MzYsMTEgQEAKIHN0YXRpYyBpbnQgYXp4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogeworCXN0cnVjdCBhenhfZGV2ICphenhfZGV2ID0gZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKTsKKworCWF6eF9kZXYtPmJ1ZnNpemUgPSAwOworCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IDA7CisJYXp4X2Rldi0+Zm9ybWF0X3ZhbCA9IDA7CiAJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCiAJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CkBAIC0xNDQzLDYgKzE0NTUsOSBAQAogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQ1RMLCAwKTsKKwlhenhfZGV2LT5idWZzaXplID0gMDsKKwlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSAwOworCWF6eF9kZXYtPmZvcm1hdF92YWwgPSAwOwogCiAJaGluZm8tPm9wcy5jbGVhbnVwKGhpbmZvLCBhcGNtLT5jb2RlYywgc3Vic3RyZWFtKTsKIApAQCAtMTQ1NiwyMyArMTQ3MSwzNyBAQAogCXN0cnVjdCBhenhfZGV2ICphenhfZGV2ID0gZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvID0gYXBjbS0+aGluZm9bc3Vic3RyZWFtLT5zdHJlYW1dOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IGJ1ZnNpemUsIHBlcmlvZF9ieXRlcywgZm9ybWF0X3ZhbDsKKwlpbnQgZXJyOwogCi0JYXp4X2Rldi0+YnVmc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwotCWF6eF9kZXYtPmZvcm1hdF92YWwgPSBzbmRfaGRhX2NhbGNfc3RyZWFtX2Zvcm1hdChydW50aW1lLT5yYXRlLAotCQkJCQkJCSBydW50aW1lLT5jaGFubmVscywKLQkJCQkJCQkgcnVudGltZS0+Zm9ybWF0LAotCQkJCQkJCSBoaW5mby0+bWF4YnBzKTsKLQlpZiAoIWF6eF9kZXYtPmZvcm1hdF92YWwpIHsKKwlmb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKKwkJCQkJCXJ1bnRpbWUtPmNoYW5uZWxzLAorCQkJCQkJcnVudGltZS0+Zm9ybWF0LAorCQkJCQkJaGluZm8tPm1heGJwcyk7CisJaWYgKCFmb3JtYXRfdmFsKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYCiAJCQkgICAiaW52YWxpZCBmb3JtYXRfdmFsLCByYXRlPSVkLCBjaD0lZCwgZm9ybWF0PSVkXG4iLAogCQkJICAgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWJ1ZnNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwogCXNuZF9wcmludGRkKCJhenhfcGNtX3ByZXBhcmU6IGJ1ZnNpemU9MHgleCwgZm9ybWF0PTB4JXhcbiIsCi0JCSAgICBhenhfZGV2LT5idWZzaXplLCBhenhfZGV2LT5mb3JtYXRfdmFsKTsKLQlpZiAoYXp4X3NldHVwX3BlcmlvZHMoY2hpcCwgc3Vic3RyZWFtLCBhenhfZGV2KSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCQkgICAgYnVmc2l6ZSwgZm9ybWF0X3ZhbCk7CisKKwlpZiAoYnVmc2l6ZSAhPSBhenhfZGV2LT5idWZzaXplIHx8CisJICAgIHBlcmlvZF9ieXRlcyAhPSBhenhfZGV2LT5wZXJpb2RfYnl0ZXMgfHwKKwkgICAgZm9ybWF0X3ZhbCAhPSBhenhfZGV2LT5mb3JtYXRfdmFsKSB7CisJCWF6eF9kZXYtPmJ1ZnNpemUgPSBidWZzaXplOworCQlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSBwZXJpb2RfYnl0ZXM7CisJCWF6eF9kZXYtPmZvcm1hdF92YWwgPSBmb3JtYXRfdmFsOworCQllcnIgPSBhenhfc2V0dXBfcGVyaW9kcyhjaGlwLCBzdWJzdHJlYW0sIGF6eF9kZXYpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJYXp4X3NldHVwX2NvbnRyb2xsZXIoY2hpcCwgYXp4X2Rldik7CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCWF6eF9kZXYtPmZpZm9fc2l6ZSA9IGF6eF9zZF9yZWFkdyhhenhfZGV2LCBTRF9GSUZPU0laRSkgKyAxOwpAQCAtMjEwMCwyNSArMjEyOSwzNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDIwYWMsICJEZWxsIFN0dWRpbyBEZXNrdG9wIiwgMHgwMSksCiAJLyogaW5jbHVkaW5nIGJvZ3VzIEFMQzI2OCBpbiBzbG90IzIgdGhhdCBjb25mbGljdHMgd2l0aCBBTEM4ODggKi8KIAlTTkRfUENJX1FVSVJLKDB4MTdjMCwgMHg0MDg1LCAiTWVkaW9uIE1EOTY2MzAiLCAweDAxKSwKLQkvKiBjb25mbGljdCBvZiBBTEMyNjggaW4gc2xvdCMzIChkaWdpdGFsIEkvTyk7IGEgdGVtcG9yYXJ5IGZpeCAqLwotCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDAsICJUb3NoaWJhIGxhcHRvcCIsIDB4MDMpLAorCS8qIGZvcmNlZCBjb2RlYyBzbG90cyAqLworCVNORF9QQ0lfUVVJUksoMHgxMDQ2LCAweDEyNjIsICJBU1VTIFc1RiIsIDB4MTAzKSwKIAl7fQogfTsKIAorI2RlZmluZSBBWlhfRk9SQ0VfQ09ERUNfTUFTSwkweDEwMAorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgY2hlY2tfcHJvYmVfbWFzayhzdHJ1Y3QgYXp4ICpjaGlwLCBpbnQgZGV2KQogewogCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOwogCi0JaWYgKHByb2JlX21hc2tbZGV2XSA9PSAtMSkgeworCWNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPSBwcm9iZV9tYXNrW2Rldl07CisJaWYgKGNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPT0gLTEpIHsKIAkJcSA9IHNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgcHJvYmVfbWFza19saXN0KTsKIAkJaWYgKHEpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaGRhX2ludGVsOiBwcm9iZV9tYXNrIHNldCB0byAweCV4ICIKIAkJCSAgICAgICAiZm9yIGRldmljZSAlMDR4OiUwNHhcbiIsCiAJCQkgICAgICAgcS0+dmFsdWUsIHEtPnN1YnZlbmRvciwgcS0+c3ViZGV2aWNlKTsKLQkJCXByb2JlX21hc2tbZGV2XSA9IHEtPnZhbHVlOworCQkJY2hpcC0+Y29kZWNfcHJvYmVfbWFzayA9IHEtPnZhbHVlOwogCQl9CiAJfQorCisJLyogY2hlY2sgZm9yY2VkIG9wdGlvbiAqLworCWlmIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrICE9IC0xICYmCisJICAgIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrICYgQVpYX0ZPUkNFX0NPREVDX01BU0spKSB7CisJCWNoaXAtPmNvZGVjX21hc2sgPSBjaGlwLT5jb2RlY19wcm9iZV9tYXNrICYgMHhmZjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2ludGVsOiBjb2RlY19tYXNrIGZvcmNlZCB0byAweCV4XG4iLAorCQkgICAgICAgY2hpcC0+Y29kZWNfbWFzayk7CisJfQogfQogCiAKQEAgLTIzNDcsMTAgKzIzODcsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkVycm9yIGNyZWF0aW5nIGNhcmQhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gYXp4X2NyZWF0ZShjYXJkLCBwY2ksIGRldiwgcGNpX2lkLT5kcml2ZXJfZGF0YSwgJmNoaXApOwpAQCAtMjM1OSw4ICsyMzk5LDcgQEAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCiAJLyogY3JlYXRlIGNvZGVjIGluc3RhbmNlcyAqLwotCWVyciA9IGF6eF9jb2RlY19jcmVhdGUoY2hpcCwgbW9kZWxbZGV2XSwgcHJvYmVfbWFza1tkZXZdLAotCQkJICAgICAgIHByb2JlX29ubHlbZGV2XSk7CisJZXJyID0gYXp4X2NvZGVjX2NyZWF0ZShjaGlwLCBtb2RlbFtkZXZdLCBwcm9iZV9vbmx5W2Rldl0pOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogCkBAIC0yNDU3LDEwICsyNDk2LDEwIEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCS8qIFRlcmFkaWNpICovCiAJeyBQQ0lfREVWSUNFKDB4NjU0OSwgMHgxMjAwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9URVJBIH0sCiAJLyogQU1EIEdlbmVyaWMsIFBDSSBjbGFzcyBjb2RlIGFuZCBWZW5kb3IgSUQgZm9yIEhEIEF1ZGlvICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCA0NGYxODljLi44MzM0OTAxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTI2LDggKzI2LDEwIEBACiAvKgogICogZm9yIG1peGVyIGNvbnRyb2xzCiAgKi8KKyNkZWZpbmUgSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLGNocyxpZHgsZGlyLG9mcykJCVwKKwkoKG5pZCkgfCAoKGNocyk8PDE2KSB8ICgoZGlyKTw8MTgpIHwgKChpZHgpPDwxOSkgfCAoKG9mcyk8PDIzKSkKICNkZWZpbmUgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsY2hzLGlkeCxkaXIpIFwKLQkoKG5pZCkgfCAoKGNocyk8PDE2KSB8ICgoZGlyKTw8MTgpIHwgKChpZHgpPDwxOSkpCisJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIGlkeCwgZGlyLCAwKQogLyogbW9ubyB2b2x1bWUgd2l0aCBpbmRleCAoaW5kZXg9MCwxLC4uLikgKGNoYW5uZWw9MSwyKSAqLwogI2RlZmluZSBIREFfQ09ERUNfVk9MVU1FX01PTk9fSURYKHhuYW1lLCB4Y2lkeCwgbmlkLCBjaGFubmVsLCB4aW5kZXgsIGRpcmVjdGlvbikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhjaWR4LCAgXApAQCAtOTYsNyArOTgsNyBAQAogCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc25kX2hkYV9hZGRfdm1hc3RlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY2hhciAqbmFtZSwKIAkJCXVuc2lnbmVkIGludCAqdGx2LCBjb25zdCBjaGFyICoqc2xhdmVzKTsKLXZvaWQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CitpbnQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiBpbnQgc25kX2hkYV9jb2RlY19jb25maWd1cmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCiAvKiBhbXAgdmFsdWUgYml0cyAqLwpAQCAtMTM0LDcgKzEzNiw3IEBACiAKIHN0cnVjdCBoZGFfYmluZF9jdGxzIHsKIAlzdHJ1Y3QgaGRhX2N0bF9vcHMgKm9wczsKLQlsb25nIHZhbHVlc1tdOworCXVuc2lnbmVkIGxvbmcgdmFsdWVzW107CiB9OwogCiBpbnQgc25kX2hkYV9taXhlcl9iaW5kX2N0bHNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIyNyw2ICsyMjksNyBAQAogCWhkYV9uaWRfdCBocF9uaWQ7CS8qIG9wdGlvbmFsIERBQyBmb3IgSFAsIDAgd2hlbiBub3QgZXhpc3RzICovCiAJaGRhX25pZF90IGV4dHJhX291dF9uaWRbM107CS8qIG9wdGlvbmFsIERBQ3MsIDAgd2hlbiBub3QgZXhpc3RzICovCiAJaGRhX25pZF90IGRpZ19vdXRfbmlkOwkvKiBkaWdpdGFsIG91dCBhdWRpbyB3aWRnZXQgKi8KKwloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOwogCWludCBtYXhfY2hhbm5lbHM7CS8qIGN1cnJlbnRseSBzdXBwb3J0ZWQgYW5hbG9nIGNoYW5uZWxzICovCiAJaW50IGRpZ19vdXRfdXNlZDsJLyogY3VycmVudCB1c2FnZSBvZiBkaWdpdGFsIG91dCAoSERBX0RJR19YWFgpICovCiAJaW50IG5vX3NoYXJlX3N0cmVhbTsJLyogZG9uJ3Qgc2hhcmUgYSBzdHJlYW0gd2l0aCBtdWx0aXBsZSBwaW5zICovCkBAIC0zNTQsOSArMzU3LDEyIEBACiAJaW50IGxpbmVfb3V0X3R5cGU7CS8qIEFVVE9fUElOX1hYWF9PVVQgKi8KIAloZGFfbmlkX3QgaHBfcGluc1tBVVRPX0NGR19NQVhfT1VUU107CiAJaGRhX25pZF90IGlucHV0X3BpbnNbQVVUT19QSU5fTEFTVF07Ci0JaGRhX25pZF90IGRpZ19vdXRfcGluOworCWludCBkaWdfb3V0czsKKwloZGFfbmlkX3QgZGlnX291dF9waW5zWzJdOwogCWhkYV9uaWRfdCBkaWdfaW5fcGluOwogCWhkYV9uaWRfdCBtb25vX291dF9waW47CisJaW50IGRpZ19vdXRfdHlwZVsyXTsgLyogSERBX1BDTV9UWVBFX1hYWCAqLworCWludCBkaWdfaW5fdHlwZTsgLyogSERBX1BDTV9UWVBFX1hYWCAqLwogfTsKIAogI2RlZmluZSBnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKSBcCkBAIC00MDUsNiArNDExLDcgQEAKIHUzMiBxdWVyeV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdGlvbik7CiBpbnQgc25kX2hkYV9vdmVycmlkZV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpciwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjYXBzKTsKK3UzMiBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIAogaW50IHNuZF9oZGFfY3RsX2FkZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCk7CiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CkBAIC00MjcsNiArNDM0LDIzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTkRfSERBX1JFQ09ORklHCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpOworaW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gLUVOT0VOVDsKK30KKyNlbmRpZgorCiAvKgogICogcG93ZXItbWFuYWdlbWVudAogICovCkBAIC00NTgsNiArNDgyLDcgQEAKICNkZWZpbmUgZ2V0X2FtcF9jaGFubmVscyhrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4MykKICNkZWZpbmUgZ2V0X2FtcF9kaXJlY3Rpb24oa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAweDEpCiAjZGVmaW5lIGdldF9hbXBfaW5kZXgoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiAweGYpCisjZGVmaW5lIGdldF9hbXBfb2Zmc2V0KGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMjMpICYgMHgzZikKIAogLyoKICAqIENFQSBTaG9ydCBBdWRpbyBEZXNjcmlwdG9yIGRhdGEKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwppbmRleCAxNDRiODUyLi45M2Q3NDk5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCkBAIC0zOTksOCArMzk5LDEwIEBACiB7CiAJaW50IGMsIGN1cnIgPSAtMTsKIAotCWlmIChjb25uX2xlbiA+IDEgJiYgd2lkX3R5cGUgIT0gQUNfV0lEX0FVRF9NSVggJiYKLQkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1ZPTF9LTkIpCisJaWYgKGNvbm5fbGVuID4gMSAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfQVVEX01JWCAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfVk9MX0tOQiAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfUE9XRVIpCiAJCWN1cnIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKIAkJCQkJICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiICBDb25uZWN0aW9uOiAlZFxuIiwgY29ubl9sZW4pOwpAQCAtNDY3LDggKzQ2OSw5IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiQ29kZWM6ICVzXG4iLAogCQkgICAgY29kZWMtPm5hbWUgPyBjb2RlYy0+bmFtZSA6ICJOb3QgU2V0Iik7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiQWRkcmVzczogJWRcbiIsIGNvZGVjLT5hZGRyKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJWZW5kb3IgSWQ6IDB4JXhcbiIsIGNvZGVjLT52ZW5kb3JfaWQpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN1YnN5c3RlbSBJZDogMHgleFxuIiwgY29kZWMtPnN1YnN5c3RlbV9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiRnVuY3Rpb24gSWQ6IDB4JXhcbiIsIGNvZGVjLT5mdW5jdGlvbl9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiVmVuZG9yIElkOiAweCUwOHhcbiIsIGNvZGVjLT52ZW5kb3JfaWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN1YnN5c3RlbSBJZDogMHglMDh4XG4iLCBjb2RlYy0+c3Vic3lzdGVtX2lkKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJSZXZpc2lvbiBJZDogMHgleFxuIiwgY29kZWMtPnJldmlzaW9uX2lkKTsKIAogCWlmIChjb2RlYy0+bWZnKQpAQCAtNTU0LDggKzU1NywxNCBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtT3V0IGNhcHM6ICIpOwogCQkJcHJpbnRfYW1wX2NhcHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQW1wLU91dCB2YWxzOiAiKTsKLQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKLQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywgMSk7CisJCQlpZiAod2lkX3R5cGUgPT0gQUNfV0lEX1BJTiAmJgorCQkJICAgIGNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQpCisJCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAorCQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywKKwkJCQkJICAgICAgIGNvbm5fbGVuKTsKKwkJCWVsc2UKKwkJCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCisJCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLCAxKTsKIAkJfQogCiAJCXN3aXRjaCAod2lkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IGU0ODYxMjMuLjViYjQ4ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMjcsMTEgKzI3LDEyIEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKIHN0cnVjdCBhZDE5OHhfc3BlYyB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKLQorCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTCB0ZXJtaW5hdGlvbiEKIAkJCQkJCSAqLwpAQCAtMTU0LDYgKzE1NSwxNiBAQAogCiBzdGF0aWMgdm9pZCBhZDE5OHhfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKKy8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZF9iZWVwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAwLCAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSBcCisJKChzcGVjKS0+YmVlcF9hbXAgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgaWR4LCBkaXIpKSAvKiBtb25vICovCisKIHN0YXRpYyBpbnQgYWQxOTh4X2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMTgxLDYgKzE5MiwyMSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBjcmVhdGUgYmVlcCBjb250cm9scyBpZiBuZWVkZWQgKi8KKwlpZiAoc3BlYy0+YmVlcF9hbXApIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJCWZvciAoa25ldyA9IGFkX2JlZXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOworCQkJaWYgKCFrY3RsKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KIAlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKIAkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOwpAQCAtNDA2LDcgKzQzMiw4IEBACiAJCXJldHVybjsKIAogCWFkMTk4eF9mcmVlX2tjdGxzKGNvZGVjKTsKLQlrZnJlZShjb2RlYy0+c3BlYyk7CisJa2ZyZWUoc3BlYyk7CisJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgYWQxOTh4X3BhdGNoX29wcyA9IHsKQEAgLTU0NSw4ICs1NzIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTYxMCw4ICs2MzUsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAorCS8qIAogCSAgIEhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAkgICBIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgwOSw4ICs4MzMsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCXsKQEAgLTEwMDIsMTAgKzEwMjQsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNDAsICJUb3NoaWJhIiwgQUQxOTg2QV9MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YjAzYywgIlNhbXN1bmcgUjU1IiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMWUsICJGU0MgVjIwNjAiLCBBRDE5ODZBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyMywgIlNhbXN1bmcgWDYwIiwgQUQxOTg2QV9TQU1TVU5HKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI0LCAiU2Ftc3VuZyBSNjUiLCBBRDE5ODZBX1NBTVNVTkcpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjYsICJTYW1zdW5nIFgxMSIsIEFEMTk4NkFfU0FNU1VORyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNywgIlNhbXN1bmcgUTEiLCBBRDE5ODZBX1VMVFJBKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNDRkLCAweGZmMDAsIDB4YzAwMCwgIlNhbXN1bmciLCBBRDE5ODZBX1NBTVNVTkcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGM1MDQsICJTYW1zdW5nIFEzNSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDExLCAiTGVub3ZvIE01NSIsIEFEMTk4NkFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDE3LCAiTGVub3ZvIEE2MCIsIEFEMTk4NkFfM1NUQUNLKSwKQEAgLTEwMjcsMTUgKzEwNDcsMTQgQEAKIAogc3RhdGljIGludCBpc19qYWNrX2F2YWlsYWJsZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCXVuc2lnbmVkIGludCBjb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZikgIT0gQUNfSkFDS19QT1JUX05PTkU7CiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg2YShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTA0Myw2ICsxMDYyLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxOSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxOCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA2OwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODZhX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4NmFfZGFjX25pZHM7CkBAIC0xMjIyLDggKzEyNDgsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEyOTQsNiArMTMxOCw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4MyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGVycjsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMzAxLDYgKzEzMjYsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4M19kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODNfZGFjX25pZHM7CkBAIC0xMzcwLDggKzE0MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE0MTYsOCArMTQ0Niw4IEBACiAJezB4MWUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCiAJezB4MWYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCiAJLyogTWljIGJvb3N0OiAwZEIgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFJlY29yZCBzZWxlY3RvcjogRnJvbnQgbWljICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LApAQCAtMTY4MiwxMCArMTcxMiwxMCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1OTcsICJMZW5vdm8gWjYwIiwgQUQxOTgxX1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNWI3LCAiTGVub3ZvIFo2MG0iLCBBRDE5ODFfVEhJTktQQUQpLAogCS8qIEFsbCBIUCBtb2RlbHMgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMCwgIkhQIG54IiwgQUQxOTgxX0hQKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwM2MsICJIUCBueCIsIEFEMTk4MV9IUCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgVTIwNSIsIEFEMTk4MV9UT1NISUJBKSwKIAkvKiBMZW5vdm8gVGhpbmtwYWQgVDYwL1g2MC9aNnh4ICovCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDAsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODFfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4MV9USElOS1BBRCksCiAJLyogSFAgbng2MzIwIChyZXZlcnNlZCBTU0lELCBIL1cgYnVnKSAqLwogCVNORF9QQ0lfUVVJUksoMHgzMGIwLCAweDEwM2MsICJIUCBueDYzMjAiLCBBRDE5ODFfSFApLAogCXt9CkBAIC0xNjk0LDcgKzE3MjQsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTE3MDIsNiArMTczMiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGQsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTgxX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4MV9kYWNfbmlkczsKQEAgLTE5ODgsOSArMjAyNSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIwMzQsOSArMjA2OCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIwNjYsOSArMjA5Nyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgxLCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjI5NywxMCArMjMyNSw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCXsgfQogfTsKQEAgLTI0MDgsMTAgKzI0MzIsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogQW5hbG9nIE1peCBvdXRwdXQgYW1wICovCiAJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIHwgMHgxZn0sIC8qIDBkQiAqLwogCXsgfQpAQCAtMjQ4MywxMCArMjUwMyw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDFmfSwgLyogMGRCICovCiAJeyB9CkBAIC0yODkwLDcgKzI5MDYsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUQxOTg4X1NQRElGX09VVDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUQxOTg4X1NQRElGX0lOOwpAQCAtMjk0MCw3ICsyOTU2LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0yOTYwLDcgKzI5NzYsNyBAQAogCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBRDE5ODhfQVVUTykgewogCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KLQkJaW50IGVyciA9IGFkMTk4OF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CisJCWVyciA9IGFkMTk4OF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhZDE5OHhfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMjk3MCw2ICsyOTg2LDEzIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQUQxOTg4XzZTVEFDSzoKIAljYXNlIEFEMTk4OF82U1RBQ0tfRElHOgpAQCAtMzEyNiwxMiArMzE0OSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRGlnaXRhbCBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTMyMDQsMTAgKzMyMjEsMTAgQEAKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJLyogUG9ydC1CIChmcm9udCBtaWMpIHBpbiAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUMgKHJlYXIgbWljKSBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogQW5hbG9nIG1peGVyOyBtdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCkBAIC0zMjQwLDcgKzMyNTcsNyBAQAogCSJDRCBQbGF5YmFjayBWb2x1bWUiLAogCSJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwKIAkiRG9ja2luZyBNaWMgUGxheWJhY2sgVm9sdW1lIgotCSJCZWVwIFBsYXliYWNrIFZvbHVtZSIsCisJLyogIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgKi8KIAkiSUVDOTU4IFBsYXliYWNrIFZvbHVtZSIsCiAJTlVMTAogfTsKQEAgLTMyNDgsNiArMzI2NSw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4NChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGVycjsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zMjU1LDYgKzMyNzMsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTg4NF9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODRfZGFjX25pZHM7CkBAIC0zMzIxLDggKzMzNDYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9ja2luZyBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zMzU4LDcgKzMzODEsNyBAQAogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIGRvY2tpbmcgbWljIGJvb3N0ICovCi0JezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJLyogQW5hbG9nIG1peGVyIC0gZG9ja2luZyBtaWM7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCiAJLyogZW5hYmxlIEVBUEQgYml0ICovCkBAIC0zMzc5LDEwICszNDAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lLUluIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQkqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtSW4gQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM0NjgsNyArMzQ4Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODRfY2ZnX3RibFtdID0gewogCS8qIExlbm92byBUaGlua3BhZCBUNjEvWDYxICovCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDAsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODRfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4NF9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIxNCwgIkRlbGwgVDM0MDAiLCBBRDE5ODRfREVMTF9ERVNLVE9QKSwKIAl7fQogfTsKQEAgLTM1NjEsOCArMzU4MCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM2MjIsMTAgKzM2MzksMTAgQEAKIAl7MHgxMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBQb3J0LUIgKGZyb250IG1pYykgcGluICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtQyAocmVhciBsaW5lLWluKSBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUUgKHJlYXIgbWljKSBwaW4gKi8KIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKQEAgLTM2OTUsOCArMzcxMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRvY2sgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNzI0LDggKzM3MzksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzgzNiw4ICszODQ5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zOTExLDkgKzM5MjIsOSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMzAsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDM3LCAiSFAgMjIzMHMiLCBBRDE4ODRBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzA1NiwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZTYsICJIUCA2NzMwYiIsIEFEMTg4NEFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGU3LCAiSFAgRWxpdGVCb29rIDg1MzBwIiwgQUQxODg0QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MTQsICJIUCA2NzMwcyIsIEFEMTg4NEFfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzA3MCwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHgzMGUwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzNjAwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwYWMsICJUaGlua3BhZCBYMzAwIiwgQUQxODg0QV9USElOS1BBRCksCiAJe30KIH07CkBAIC0zOTIxLDcgKzM5MzIsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODRhKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zOTI5LDYgKzM5NDAsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTg4NGFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODg0YV9kYWNfbmlkczsKQEAgLTM5NjYsNiArMzk4NCwxNCBAQAogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBhZDE4ODRhX2hwX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhZDE4ODRhX2hwX2luaXQ7CisJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQorCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKKwkJICovCisJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MjAsIEhEQV9JTlBVVCwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCQkgICgweDA1IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkJICAoMSA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOwogCQlicmVhazsKIAljYXNlIEFEMTg4NEFfVEhJTktQQUQ6CiAJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NGFfdGhpbmtwYWRfbWl4ZXJzOwpAQCAtNDA4Myw4ICs0MTA5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDA5Nyw4ICs0MTIxLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRGlnaXRhbCBNaWMgQm9vc3QiLCAweDFmLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTQyNTcsNyArNDI3OSw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtNDI2NSw2ICs0Mjg3LDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA2OwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMzsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4Ml9kYWNfbmlkczsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCmluZGV4IGYzZWJlODMuLmM5MjEyNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwpAQCAtNjgwLDEzICs2ODAsMTMgQEAKIAkJc3RydWN0IGF1dG9fcGluX2NmZyBjZmc7CiAKIAkJLyogY29sbGVjdCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JCXBvcnRfZSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwZiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQlwb3J0X2YgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJcG9ydF9lID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDBmKTsKKwkJcG9ydF9mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEwKTsKIAkJc3BlYy0+ZnJvbnRfcGFuZWwgPSAxOwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZSkgPT0gQUNfSkFDS19QT1JUX05PTkUgfHwKIAkJICAgIGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2YpID09IEFDX0pBQ0tfUE9SVF9OT05FKSB7Ci0JCQlwb3J0X2cgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJCXBvcnRfaCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJcG9ydF9nID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDFmKTsKKwkJCXBvcnRfaCA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgyMCk7CiAJCQlzcGVjLT5jaGFubmVsX21vZGVzID0gY21pOTg4MF9jaGFubmVsX21vZGVzOwogCQkJLyogbm8gZnJvbnQgcGFuZWwgKi8KIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9nKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSB8fApAQCAtNzAzLDggKzcwMyw4IEBACiAJCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBjbWk5ODgwX2NoYW5uZWxfbW9kZXNbMF0uY2hhbm5lbHM7CiAJCX0gZWxzZSB7CiAJCQlzcGVjLT5pbnB1dF9tdXggPSAmY21pOTg4MF9iYXNpY19tdXg7Ci0JCQlwb3J0X3NwZGlmaSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQkJcG9ydF9zcGRpZm8gPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTIsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJCXBvcnRfc3BkaWZpID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEzKTsKKwkJCXBvcnRfc3BkaWZvID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEyKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9zcGRpZm8pICE9IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQ01JX0RJR19PVVRfTklEOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X3NwZGlmaSkgIT0gQUNfSkFDS19QT1JUX05PTkUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggMDE3N2VmOC4uMWYyYWQ3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNTgsNiArNTgsNyBAQAogCiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKKwloZGFfbmlkX3Qgdm1hc3Rlcl9uaWQ7CiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTApAQCAtNzIsNiArNzMsNyBAQAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CiAJdW5zaWduZWQgaW50IGhwX3ByZXNlbnQ7CisJdW5zaWduZWQgaW50IG5vX2F1dG9fbWljOwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAKIAkvKiBjYXB0dXJlICovCkBAIC00NjEsNiArNDYzLDI5IEBACiAJa2ZyZWUoY29kZWMtPnNwZWMpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0X2NhcHR1cmVfbWl4ZXJzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKKwl9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2xhdmVfdm9sc1tdID0geworCSJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbGF2ZV9zd3NbXSA9IHsKKwkiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCisJIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKKwlOVUxMCit9OworCiBzdGF0aWMgaW50IGNvbmV4YW50X2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00ODgsNiArNTEzLDMyIEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CisKKwkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KKwlpZiAoc3BlYy0+dm1hc3Rlcl9uaWQgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKKwkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOworCQlzbmRfaGRhX3NldF92bWFzdGVyX3Rsdihjb2RlYywgc3BlYy0+dm1hc3Rlcl9uaWQsCisJCQkJCUhEQV9PVVRQVVQsIHZtYXN0ZXJfdGx2KTsKKwkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkJCQkgIHZtYXN0ZXJfdGx2LCBzbGF2ZV92b2xzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoc3BlYy0+dm1hc3Rlcl9uaWQgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIE5VTEwsIHNsYXZlX3N3cyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoc3BlYy0+aW5wdXRfbXV4KSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBjeHRfY2FwdHVyZV9taXhlcnMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxOSwxMyArNzcwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKQEAgLTc1OSwxMyArODAzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc19ocDUzMFtdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC0xMDAyLDE1ICsxMDM5LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ1X2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGIyLCAiSFAgRFYgU2VyaWVzIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjEyMCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjcsICJIUCBEVjYwMDBaIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiYiwgIkhQIERWODAwMCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2QsICJIUCBEViBTZXJpZXMiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY5NTMzRUciLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGQ1LCAiSFAgNTMwIiwgQ1hUNTA0NV9MQVBUT1BfSFA1MzApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZDksICJIUCBTcGFydGFuIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDMwMDAsICJIUCBEViBTZXJpZXMiLAorCQkJICAgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgUDEwNSIsIENYVDUwNDVfTEFQVE9QX01JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwNzUzLCAiQmVucSBSNTVFIiwgQ1hUNTA0NV9CRU5RKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMGFkLCAiRnVqaXRzdSBTaTE1MjAiLCBDWFQ1MDQ1X0xBUFRPUF9NSUNTRU5TRSksCkBAIC0xMDIwLDggKzEwNTEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDFlNDAsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgyZjA1LCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MmYwNiwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMDYsICJQYWNrYXJkIEJlbGwiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTA3LCAiUGFja2FyZCBCZWxsIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTYzMSwgMHhmZjAwLCAweGMxMDAsICJQYWNrYXJkIEJlbGwiLAorCQkJICAgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4MjExMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCXt9CiB9OwpAQCAtMTAzNSw2ICsxMDY2LDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNDVfZGFjX25pZHMpOwpAQCAtMTEzNCw3ICsxMTY2LDcgQEAKIC8qIENvbmV4YW50IDUwNDcgc3BlY2lmaWMgKi8KICNkZWZpbmUgQ1hUNTA0N19TUERJRl9PVVQJMHgxMQogCi1zdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMl0gPSB7IDB4MTAsIDB4MWMgfTsKK3N0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19kYWNfbmlkc1sxXSA9IHsgMHgxMCB9OyAvKiAweDFjICovCiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfYWRjX25pZHNbMV0gPSB7IDB4MTIgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19jYXBzcmNfbmlkc1sxXSA9IHsgMHgxYSB9OwogCkBAIC0xMTQyLDIwICsxMTc0LDYgQEAKIAl7IDIsIE5VTEwgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAxLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgyIH0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfaHBfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDEsCi0JLml0ZW1zID0gewotCQl7ICJFeHRNaWMiLCAweDIgfSwKLQl9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKQEAgLTExNzksNyArMTE5NywxMSBAQAogCSAqIHRoZSBoZWFkcGhvbmUgamFjawogCSAqLwogCWJpdHMgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gMCA6IEhEQV9BTVBfTVVURTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCisJLyogTk9URTogQ29uZXhhdCBjb2RlYyBuZWVkcyB0aGUgaW5kZXggZm9yICpPVVRQVVQqIGFtcCBvZgorCSAqIHBpbiB3aWRnZXRzIHVubGlrZSBvdGhlciBjb2RlY3MuICBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8KKwkgKiBzZXQgaW5kZXggMHgwMSBmb3IgdGhlIHZvbHVtZSBmcm9tIHRoZSBtaXhlciBhbXAgMHgxOS4KKwkgKi8KKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDB4MDEsCiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CiAJYml0cyA9IHNwZWMtPmN1cl9lYXBkID8gMCA6IEhEQV9BTVBfTVVURTsKIAlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTMsIEhEQV9PVVRQVVQsIDAsCkBAIC0xMTg3LDE2ICsxMjA5LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MTMgKEhlYWRwaG9uZXMpIGFuZCAweDFkIChTcGVha2VycykgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBjeHQ1MDQ3X2JpbmRfbWFzdGVyX3ZvbCA9IHsKLQkub3BzID0gJnNuZF9oZGFfYmluZF92b2wsCi0JLnZhbHVlcyA9IHsKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDEzLCAzLCAwLCBIREFfT1VUUFVUKSwKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFkLCAzLCAwLCBIREFfT1VUUFVUKSwKLQkJMAotCX0sCi19OwotCiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA0N19ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEyMDcsMjcgKzEyMTksOCBAQAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CiAKIAliaXRzID0gKHNwZWMtPmhwX3ByZXNlbnQgfHwgIXNwZWMtPmN1cl9lYXBkKSA/IEhEQV9BTVBfTVVURSA6IDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCS8qIE11dGUvVW5tdXRlIFBDTSAyIGZvciBnb29kIG1lYXN1cmUgLSBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFjLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCi0vKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwotc3RhdGljIHZvaWQgY3h0NTA0N19ocDJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQl1bnNpZ25lZCBpbnQgYml0czsKLQotCXNwZWMtPmhwX3ByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTMsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQotCWJpdHMgPSBzcGVjLT5ocF9wcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0JLyogTXV0ZS9Vbm11dGUgUENNIDIgZm9yIGdvb2QgbWVhc3VyZSAtIHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWMsIEhEQV9PVVRQVVQsIDAsCisJLyogU2VlIHRoZSBub3RlIGluIGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCAqLworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMHgwMSwKIAkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKIH0KIApAQCAtMTI2OCw5MCArMTI2MSwzNSBAQAogCX0KIH0KIAotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAtIG5vbi1FQVBEIHN5c3RlbXMgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNDdfaHAyX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlyZXMgPj49IDI2OwotCXN3aXRjaCAocmVzKSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA0N19ocDJfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA0N19ocF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19taXhlcnNbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEdhaW4gVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEdhaW4gU3dpdGNoIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2Jhc2VfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNLTIgVm9sdW1lIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTS0yIFN3aXRjaCIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwMCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKKwkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAorCX0sCisKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfc3BrX21peGVyc1tdID0geworCS8qIFNlZSB0aGUgbm90ZSBpbiBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MDEsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmY3h0NTA0N19iaW5kX21hc3Rlcl92b2wpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKLQl9LAotCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksMHgwMixIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfb25seV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAotCX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTM2Miw4ICsxMzAwLDggQEAKIAl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU58QUNfUElOQ1RMX1ZSRUZfNTAgfSwKIAkvKiBIUCwgU3BlYWtlciAgKi8KIAl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwKLQl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sIC8qIG1peGVyKDB4MTkpICovCisJezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaXhlcigweDE5KSAqLwogCS8qIFJlY29yZCBzZWxlY3RvcjogTWljICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDN9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLApAQCAtMTM4MywzMCArMTMyMSw3IEBACiAKIC8qIGNvbmZpZ3VyYXRpb24gZm9yIFRvc2hpYmEgTGFwdG9wcyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJic1tdID0gewotCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwIH0sIC8qIGRlZmF1bHQgb24gKi8KLQkvKiBwaW4gc2Vuc2luZyBvbiBIUCBhbmQgTWljIGphY2tzICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAotCS8qIFNwZWFrZXIgcm91dGluZyAqLwotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAotCXt9Ci19OwotCi0vKiBjb25maWd1cmF0aW9uIGZvciBIUCBMYXB0b3BzICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfaHBfaW5pdF92ZXJic1tdID0gewotCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGphY2sgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKLQkvKiAweDEzIGlzIGFjdHVhbGx5IHNoYXJlZCBieSBib3RoIEhQIGFuZCBzcGVha2VyOwotCSAqIHNldHRpbmcgdGhlIGNvbm5lY3Rpb24gdG8gMCAoPTB4MTkpIG1ha2VzIHRoZSBtYXN0ZXIgdm9sdW1lIGNvbnRyb2wKLQkgKiB3b3JraW5nIG15c3RlcmlvdXNsbHkuLi4KLQkgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBFeHQgTWljICovCi0JezB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDN9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAotCS8qIFNwZWFrZXIgcm91dGluZyAqLwotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwfSwgLyogZGVmYXVsdCBvZmYgKi8KIAl7fQogfTsKIApAQCAtMTU3MSwxMSArMTQ4Niw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA0N19jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhMCwgIkhQIERWMTAwMCIsIENYVDUwNDdfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAgRFY1MjAwVC9EVjgwMDBUIiwgQ1hUNTA0N19MQVBUT1BfSFApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjIsICJIUCBEVjIwMDBUL0RWMzAwMFQiLCBDWFQ1MDQ3X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjAwMFoiLCBDWFQ1MDQ3X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjcwMCIsIENYVDUwNDdfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzAwMCwgIkhQIERWIFNlcmllcyIsCisJCQkgICBDWFQ1MDQ3X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgUDEwMCIsIENYVDUwNDdfTEFQVE9QX0VBUEQpLAogCXt9CiB9OwpAQCAtMTU4OSw2ICsxNTAyLDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNDdfZGFjX25pZHMpOwpAQCAtMTU5Nyw5ICsxNTExLDggQEAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA0N19hZGNfbmlkczsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGN4dDUwNDdfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfY2FwdHVyZV9zb3VyY2U7CiAJc3BlYy0+bnVtX21peGVycyA9IDE7Ci0Jc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19taXhlcnM7CisJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19iYXNlX21peGVyczsKIAlzcGVjLT5udW1faW5pdF92ZXJicyA9IDE7CiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNDdfaW5pdF92ZXJiczsKIAlzcGVjLT5zcGRpZl9yb3V0ZSA9IDA7CkBAIC0xNjEzLDIxICsxNTI2LDIyIEBACiAJCQkJCQkgIGN4dDUwNDdfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNDdfTEFQVE9QOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQ7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX3Nwa19taXhlcnM7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKIAljYXNlIENYVDUwNDdfTEFQVE9QX0hQOgotCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N19ocF9jYXB0dXJlX3NvdXJjZTsKLQkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOwotCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gY3h0NTA0N19ocF9pbml0X3ZlcmJzOwotCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X2hwX21peGVyczsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfb25seV9taXhlcnM7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDQ3X2hwX2luaXQ7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA0N19MQVBUT1BfRUFQRDoKIAkJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfdG9zaGliYV9jYXB0dXJlX3NvdXJjZTsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfc3BrX21peGVyczsKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOwogCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gY3h0NTA0N190b3NoaWJhX2luaXRfdmVyYnM7Ci0JCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfdG9zaGliYV9taXhlcnM7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCkBAIC0xNjM4LDYgKzE1NTIsNyBAQAogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKICNlbmRpZgkKIAl9CisJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDEzOwogCXJldHVybiAwOwogfQogCkBAIC0xNjczLDggKzE1ODgsMTEgQEAKIC8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLwogc3RhdGljIHZvaWQgY3h0NTA1MV9wb3J0Yl9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKKwlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE3LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCiAJCUFDX1BJTlNFTlNFX1BSRVNFTkNFOwpAQCAtMTY5MCw2ICsxNjA4LDggQEAKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAloZGFfbmlkX3QgbmV3X2FkYzsKIAorCWlmIChzcGVjLT5ub19hdXRvX21pYykKKwkJcmV0dXJuOwogCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTgsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYKIAkJQUNfUElOU0VOU0VfUFJFU0VOQ0U7CkBAIC0xNzc2LDYgKzE2OTYsMjIgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKKwkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAorCX0sCisKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMgKi8KIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LApAQCAtMTgwNiw2ICsxNzQyLDY2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJLyogU1BLICAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogSFAsIEFtcCAgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogREFDMSAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwkvKiBFQVBEICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9sZW5vdm9feDIwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEb2NraW5nIEhQICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFJlY29yZCBzZWxlY3RvcjogSW50IG1pYyAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg0NH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NDR9LAorCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJLyogRUFQRCAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRDX0VWRU5UfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKwogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDUxX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xODIzLDE4ICsxODE5LDI0IEBACiBlbnVtIHsKIAlDWFQ1MDUxX0xBUFRPUCwJIC8qIExhcHRvcHMgdy8gRUFQRCBzdXBwb3J0ICovCiAJQ1hUNTA1MV9IUCwJLyogbm8gZG9ja2luZyAqLworCUNYVDUwNTFfSFBfRFY2NzM2LAkvKiBIUCB3aXRob3V0IG1pYyBzd2l0Y2ggKi8KKwlDWFQ1MDUxX0xFTk9WT19YMjAwLAkvKiBMZW5vdm8gWDIwMCBsYXB0b3AgKi8KIAlDWFQ1MDUxX01PREVMUwogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmN4dDUwNTFfbW9kZWxzW0NYVDUwNTFfTU9ERUxTXSA9IHsKIAlbQ1hUNTA1MV9MQVBUT1BdCT0gImxhcHRvcCIsCiAJW0NYVDUwNTFfSFBdCQk9ICJocCIsCisJW0NYVDUwNTFfSFBfRFY2NzM2XQk9ICJocC1kdjY3MzYiLAorCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA1MV9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjczNiIsIENYVDUwNTFfSFBfRFY2NzM2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHgwMTAxLCAiQ29uZXhhbnQgUmVmZXJlbmNlIGJvYXJkIiwKIAkJICAgICAgQ1hUNTA1MV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxNGYxLCAweDUwNTEsICJIUCBTcGFydGFuIDEuMSIsIENYVDUwNTFfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwZjIsICJMZW5vdm8gWDIwMCIsIENYVDUwNTFfTEVOT1ZPX1gyMDApLAogCXt9CiB9OwogCkBAIC0xODQ3LDYgKzE4NDksNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDUxX2luaXQ7CkBAIC0xODY3LDE3ICsxODcwLDIyIEBACiAJc3BlYy0+Y3VyX2FkYyA9IDA7CiAJc3BlYy0+Y3VyX2FkY19pZHggPSAwOwogCisJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CisKIAlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA1MV9NT0RFTFMsCiAJCQkJCQkgIGN4dDUwNTFfbW9kZWxzLAogCQkJCQkJICBjeHQ1MDUxX2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDUxX0hQOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKIAkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9ocF9taXhlcnM7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBDWFQ1MDUxX0xBUFRPUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CisJY2FzZSBDWFQ1MDUxX0hQX0RWNjczNjoKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfaHBfZHY2NzM2X2luaXRfdmVyYnM7CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyczsKKwkJc3BlYy0+bm9fYXV0b19taWMgPSAxOworCQlicmVhazsKKwljYXNlIENYVDUwNTFfTEVOT1ZPX1gyMDA6CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnM7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA2YzI2YWZjLi44MjA5Nzc5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKKyNpbmNsdWRlICJoZGFfYmVlcC5oIgogCiAjZGVmaW5lIEFMQzg4MF9GUk9OVF9FVkVOVAkJMHgwMQogI2RlZmluZSBBTEM4ODBfRENWT0xfRVZFTlQJCTB4MDIKQEAgLTc3LDYgKzc4LDcgQEAKIAlBTEMyNjBfQUNFUiwKIAlBTEMyNjBfV0lMTCwKIAlBTEMyNjBfUkVQTEFDRVJfNjcyViwKKwlBTEMyNjBfRkFWT1JJVDEwMCwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJQUxDMjYwX1RFU1QsCiAjZW5kaWYKQEAgLTEwMyw2ICsxMDUsNyBAQAogCUFMQzI2Ml9ORUMsCiAJQUxDMjYyX1RPU0hJQkFfUzA2LAogCUFMQzI2Ml9UT1NISUJBX1JYMSwKKwlBTEMyNjJfVFlBTiwKIAlBTEMyNjJfQVVUTywKIAlBTEMyNjJfTU9ERUxfTEFTVCAvKiBsYXN0IHRhZyAqLwogfTsKQEAgLTIzOCw2ICsyNDEsMTMgQEAKIAlBTEM4ODNfTU9ERUxfTEFTVCwKIH07CiAKKy8qIHN0eWxlcyBvZiBjYXB0dXJlIHNlbGVjdGlvbiAqLworZW51bSB7CisJQ0FQVF9NVVggPSAwLAkvKiBvbmx5IG11eCBiYXNlZCAqLworCUNBUFRfTUlYLAkvKiBvbmx5IG1peGVyIGJhc2VkICovCisJQ0FQVF8xTVVYX01JWCwJLyogZmlyc3QgbXV4IGFuZCBvdGhlciBtaXhlcnMgKi8KK307CisKIC8qIGZvciBHUElPIFBvbGwgKi8KICNkZWZpbmUgR1BJT19NQVNLCTB4MDMKIApAQCAtMjQ2LDYgKzI1Niw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsJLyogbWl4ZXIgYXJyYXlzICovCiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLworCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCkBAIC0yNjksMTMgKzI4MCwxNSBAQAogCQkJCQkgKiBkaWdfb3V0X25pZCBhbmQgaHBfbmlkIGFyZSBvcHRpb25hbAogCQkJCQkgKi8KIAloZGFfbmlkX3QgYWx0X2RhY19uaWQ7CisJaGRhX25pZF90IHNsYXZlX2RpZ19vdXRzWzNdOwkvKiBvcHRpb25hbCAtIGZvciBhdXRvLXBhcnNpbmcgKi8KKwlpbnQgZGlnX291dF90eXBlOwogCiAJLyogY2FwdHVyZSAqLwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7CiAJaGRhX25pZF90ICphZGNfbmlkczsKIAloZGFfbmlkX3QgKmNhcHNyY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwkJLyogZGlnaXRhbC1pbiBOSUQ7IG9wdGlvbmFsICovCi0JdW5zaWduZWQgY2hhciBpc19taXhfY2FwdHVyZTsJLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKG5vbi1tdXgpICovCisJaW50IGNhcHR1cmVfc3R5bGU7CQkvKiBjYXB0dXJlIHN0eWxlIChDQVBUXyopICovCiAKIAkvKiBjYXB0dXJlIHNvdXJjZSAqLwogCXVuc2lnbmVkIGludCBudW1fbXV4X2RlZnM7CkBAIC0yOTMsNyArMzA2LDcgQEAKIAkvKiBkeW5hbWljIGNvbnRyb2xzLCBpbml0X3ZlcmJzIGFuZCBpbnB1dF9tdXggKi8KIAlzdHJ1Y3QgYXV0b19waW5fY2ZnIGF1dG9jZmc7CiAJc3RydWN0IHNuZF9hcnJheSBrY3RsczsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4WzNdOwogCWhkYV9uaWRfdCBwcml2YXRlX2RhY19uaWRzW0FVVE9fQ0ZHX01BWF9PVVRTXTsKIAogCS8qIGhvb2tzICovCkBAIC0zMDUsNiArMzE4LDkgQEAKIAl1bnNpZ25lZCBpbnQgamFja19wcmVzZW50OiAxOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfc3c6IDE7CiAKKwkvKiBvdGhlciBmbGFncyAqLworCXVuc2lnbmVkIGludCBub19hbmFsb2cgOjE7IC8qIGRpZ2l0YWwgSS9PIG9ubHkgKi8KKwogCS8qIGZvciB2aXJ0dWFsIG1hc3RlciAqLwogCWhkYV9uaWRfdCB2bWFzdGVyX25pZDsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCkBAIC0zMTQsMTMgKzMzMCw2IEBACiAJLyogZm9yIFBMTCBmaXggKi8KIAloZGFfbmlkX3QgcGxsX25pZDsKIAl1bnNpZ25lZCBpbnQgcGxsX2NvZWZfaWR4LCBwbGxfY29lZl9iaXQ7Ci0KLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotI2RlZmluZSBBTENfTUFYX1BJTlMJMTYKLQl1bnNpZ25lZCBpbnQgbnVtX3BpbnM7Ci0JaGRhX25pZF90IHBpbl9uaWRzW0FMQ19NQVhfUElOU107Ci0JdW5zaWduZWQgaW50IHBpbl9jZmdzW0FMQ19NQVhfUElOU107Ci0jZW5kaWYKIH07CiAKIC8qCkBAIC0zMzYsNiArMzQ1LDcgQEAKIAloZGFfbmlkX3QgKmRhY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfb3V0X25pZDsJCS8qIG9wdGlvbmFsICovCiAJaGRhX25pZF90IGhwX25pZDsJCS8qIG9wdGlvbmFsICovCisJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJaGRhX25pZF90ICpjYXBzcmNfbmlkczsKQEAgLTM5Miw3ICs0MDIsOCBAQAogCW11eF9pZHggPSBhZGNfaWR4ID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBhZGNfaWR4OwogCWltdXggPSAmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdOwogCi0JaWYgKHNwZWMtPmlzX21peF9jYXB0dXJlKSB7CisJaWYgKHNwZWMtPmNhcHR1cmVfc3R5bGUgJiYKKwkgICAgIShzcGVjLT5jYXB0dXJlX3N0eWxlID09IENBUFRfMU1VWF9NSVggJiYgIWFkY19pZHgpKSB7CiAJCS8qIE1hdHJpeC1taXhlciBzdHlsZSAoZS5nLiBBTEM4ODIpICovCiAJCXVuc2lnbmVkIGludCAqY3VyX3ZhbCA9ICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdOwogCQl1bnNpZ25lZCBpbnQgaSwgaWR4OwpAQCAtNzUwLDYgKzc2MSwyNCBAQAogI2VuZGlmICAgLyogQ09ORklHX1NORF9ERUJVRyAqLwogCiAvKgorICogc2V0IHVwIHRoZSBpbnB1dCBwaW4gY29uZmlnIChkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGF1dG8tcGluIHR5cGUpCisgKi8KK3N0YXRpYyB2b2lkIGFsY19zZXRfaW5wdXRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICAgaW50IGF1dG9fcGluX3R5cGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IFBJTl9JTjsKKworCWlmIChhdXRvX3Bpbl90eXBlIDw9IEFVVE9fUElOX0ZST05UX01JQykgeworCQl1bnNpZ25lZCBpbnQgcGluY2FwOworCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCQlwaW5jYXAgPSAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUYpID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUOworCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfODApCisJCQl2YWwgPSBQSU5fVlJFRjgwOworCX0KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgdmFsKTsKK30KKworLyoKICAqLwogc3RhdGljIHZvaWQgYWRkX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peCkKIHsKQEAgLTgxMCw2ICs4MzksNyBAQAogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gcHJlc2V0LT5udW1fZGFjczsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHByZXNldC0+ZGFjX25pZHM7CiAJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBwcmVzZXQtPmRpZ19vdXRfbmlkOworCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gcHJlc2V0LT5zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBwcmVzZXQtPmhwX25pZDsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IHByZXNldC0+bnVtX211eF9kZWZzOwpAQCAtOTIxLDcgKzk1MSw3IEBACiAJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7CiB9CiAjZWxzZQotI2RlZmluZSBhbGNfbWljX2F1dG9tdXRlKGNvZGVjKSAvKiBOT1AgKi8KKyNkZWZpbmUgYWxjX21pY19hdXRvbXV0ZShjb2RlYykgZG8ge30gd2hpbGUoMCkgLyogTk9QICovCiAjZW5kaWYgLyogZGlzYWJsZWQgKi8KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwpAQCAtOTUyLDcgKzk4Miw3IEBACiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMCk7CiAJdG1wID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX0dFVF9QUk9DX0NPRUYsIDApOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDcpOwotCWlmICgodG1wICYgMHhmMCkgPT0gMikKKwlpZiAoKHRtcCAmIDB4ZjApID09IDB4MjApCiAJCS8qIGFsYzg4OFMtVkMgKi8KIAkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLAogCQkJCSAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHg4MzApOwpAQCAtOTkxLDggKzEwMjEsNyBAQAogCW5pZCA9IDB4MWQ7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI2MCkKIAkJbmlkID0gMHgxNzsKLQlhc3MgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWFzcyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpZiAoIShhc3MgJiAxKSAmJiAhKGFzcyAmIDB4MTAwMDAwKSkKIAkJcmV0dXJuOwogCWlmICgoYXNzID4+IDMwKSAhPSAxKQkvKiBubyBwaHlzaWNhbCBjb25uZWN0aW9uICovCkBAIC0xMTY2LDE2ICsxMTk1LDggQEAKIAkJcmV0dXJuOwogCiAJY2ZnID0gcGluZml4W3F1aXJrLT52YWx1ZV07Ci0JZm9yICg7IGNmZy0+bmlkOyBjZmcrKykgewotCQlpbnQgaTsKLQkJdTMyIHZhbCA9IGNmZy0+dmFsOwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPm5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCArIGksCi0JCQkJICAgIHZhbCAmIDB4ZmYpOwotCQkJdmFsID4+PSA4OwotCQl9Ci0JfQorCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKIH0KIAogLyoKQEAgLTEzNzUsOCArMTM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0ODMsOCArMTUwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MCwgSERBX09VVFBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTE1NzgsOCArMTU5NSw3IEBACiAJCQkJICAgICBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KTsKIH0KIAotI2RlZmluZSBERUZJTkVfQ0FQTUlYKG51bSkgXAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyICMjIG51bVtdID0geyBcCisjZGVmaW5lIF9ERUZJTkVfQ0FQTUlYKG51bSkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogCQkubmFtZSA9ICJDYXB0dXJlIFN3aXRjaCIsIFwKQEAgLTE2MDAsNyArMTYxNiw5IEBACiAJCS5nZXQgPSBhbGNfY2FwX3ZvbF9nZXQsIFwKIAkJLnB1dCA9IGFsY19jYXBfdm9sX3B1dCwgXAogCQkudGx2ID0geyAuYyA9IGFsY19jYXBfdm9sX3RsdiB9LCBcCi0JfSwgXAorCX0KKworI2RlZmluZSBfREVGSU5FX0NBUFNSQyhudW0pIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLyBcCkBAIC0xNjA5LDE1ICsxNjI3LDI4IEBACiAJCS5pbmZvID0gYWxjX211eF9lbnVtX2luZm8sIFwKIAkJLmdldCA9IGFsY19tdXhfZW51bV9nZXQsIFwKIAkJLnB1dCA9IGFsY19tdXhfZW51bV9wdXQsIFwKLQl9LCBcCi0JeyB9IC8qIGVuZCAqLyBcCisJfQorCisjZGVmaW5lIERFRklORV9DQVBNSVgobnVtKSBcCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXIgIyMgbnVtW10gPSB7IFwKKwlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkgICAgICBcCisJX0RFRklORV9DQVBTUkMobnVtKSwJCQkJICAgICAgXAorCXsgfSAvKiBlbmQgKi8JCQkJCSAgICAgIFwKK30KKworI2RlZmluZSBERUZJTkVfQ0FQTUlYX05PU1JDKG51bSkgXAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyX25vc3JjICMjIG51bVtdID0geyBcCisJX0RFRklORV9DQVBNSVgobnVtKSwJCQkJCSAgICBcCisJeyB9IC8qIGVuZCAqLwkJCQkJCSAgICBcCiB9CiAKIC8qIHVwIHRvIHRocmVlIEFEQ3MgKi8KIERFRklORV9DQVBNSVgoMSk7CiBERUZJTkVfQ0FQTUlYKDIpOwogREVGSU5FX0NBUE1JWCgzKTsKLQorREVGSU5FX0NBUE1JWF9OT1NSQygxKTsKK0RFRklORV9DQVBNSVhfTk9TUkMoMik7CitERUZJTkVfQ0FQTUlYX05PU1JDKDMpOwogCiAvKgogICogQUxDODgwIDUtc3RhY2sgbW9kZWwKQEAgLTE3MDYsOCArMTczNyw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMTg4NCwxMyArMTkxMyw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotLyogYWRkaXRpb25hbCBtaXhlcnMgdG8gYWxjODgwX2FzdXNfbWl4ZXIgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfcGNiZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogLyogVENMIFM3MDAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfdGNsX3M3MDBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTkyMyw4ICsxOTQ1LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC0xOTk5LDYgKzIwMTksMTMgQEAKIAogc3RhdGljIHZvaWQgYWxjX2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCisvKiBhZGRpdGlvbmFsIGJlZXAgbWl4ZXJzOyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXJlIG92ZXJ3cml0dGVuIGF0IGJ1aWxkICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2JlZXBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgaW50IGFsY19idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTIwMjAsMTEgKzIwNDcsMTMgQEAKIAkJCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfc2hhcmVfc3coY29kZWMsCi0JCQkJCQkgICAgJnNwZWMtPm11bHRpb3V0KTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlzcGVjLT5tdWx0aW91dC5zaGFyZV9zcGRpZiA9IDE7CisJCWlmICghc3BlYy0+bm9fYW5hbG9nKSB7CisJCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9zaGFyZV9zdyhjb2RlYywKKwkJCQkJCQkgICAgJnNwZWMtPm11bHRpb3V0KTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlzcGVjLT5tdWx0aW91dC5zaGFyZV9zcGRpZiA9IDE7CisJCX0KIAl9CiAJaWYgKHNwZWMtPmRpZ19pbl9uaWQpIHsKIAkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfaW5fY3Rscyhjb2RlYywgc3BlYy0+ZGlnX2luX25pZCk7CkBAIC0yMDMyLDggKzIwNjEsMjQgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogY3JlYXRlIGJlZXAgY29udHJvbHMgaWYgbmVlZGVkICovCisJaWYgKHNwZWMtPmJlZXBfYW1wKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCQlmb3IgKGtuZXcgPSBhbGNfYmVlcF9taXhlcjsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CisJCQlpZiAoIWtjdGwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gc3BlYy0+YmVlcF9hbXA7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLwotCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPnZtYXN0ZXJfbmlkLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CkBAIC0yMDQyLDcgKzIwODcsOCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQotCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJCQkJICBOVUxMLCBhbGNfc2xhdmVfc3dzKTsKIAkJaWYgKGVyciA8IDApCkBAIC0yOTUxLDYgKzI5OTcsMTQgQEAKIAkJCQkJICAgICBzdHJlYW1fdGFnLCBmb3JtYXQsIHN1YnN0cmVhbSk7CiB9CiAKK3N0YXRpYyBpbnQgYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCQkgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbGVhbnVwKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOworfQorCiBzdGF0aWMgaW50IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMzAzNCw3ICszMDg4LDggQEAKIAkub3BzID0gewogCQkub3BlbiA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX29wZW4sCiAJCS5jbG9zZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAotCQkucHJlcGFyZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUKKwkJLnByZXBhcmUgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlLAorCQkuY2xlYW51cCA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2NsZWFudXAKIAl9LAogfTsKIApAQCAtMzA2MSw2ICszMTE2LDkgQEAKIAljb2RlYy0+bnVtX3BjbXMgPSAxOwogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKKwlpZiAoc3BlYy0+bm9fYW5hbG9nKQorCQlnb3RvIHNraXBfYW5hbG9nOworCiAJaW5mby0+bmFtZSA9IHNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZzsKIAlpZiAoc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjaykgewogCQlpZiAoc25kX0JVR19PTighc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMpKQpAQCAtMzA4NCwxMiArMzE0MiwxNyBAQAogCQl9CiAJfQogCisgc2tpcF9hbmFsb2c6CiAJLyogU1BESUYgZm9yIHN0cmVhbSBpbmRleCAjMSAqLwogCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCB8fCBzcGVjLT5kaWdfaW5fbmlkKSB7CiAJCWNvZGVjLT5udW1fcGNtcyA9IDI7CisJICAgICAgICBjb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0czsKIAkJaW5mbyA9IHNwZWMtPnBjbV9yZWMgKyAxOwogCQlpbmZvLT5uYW1lID0gc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbDsKLQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CisJCWlmIChzcGVjLT5kaWdfb3V0X3R5cGUpCisJCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmRpZ19vdXRfdHlwZTsKKwkJZWxzZQorCQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CiAJCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCAmJgogCQkgICAgc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2spIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICooc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2spOwpAQCAtMzEwNCw2ICszMTY3LDkgQEAKIAkJY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCA9IDE7CiAJfQogCisJaWYgKHNwZWMtPm5vX2FuYWxvZykKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB0aGUgdXNlIG9mIG1vcmUgdGhhbiBvbmUgQURDIGlzIHJlcXVlc3RlZCBmb3IgdGhlIGN1cnJlbnQKIAkgKiBtb2RlbCwgY29uZmlndXJlIGEgc2Vjb25kIGFuYWxvZyBjYXB0dXJlLW9ubHkgUENNLgogCSAqLwpAQCAtMzE2Miw2NSArMzIyOCwxNyBAQAogCiAJYWxjX2ZyZWVfa2N0bHMoY29kZWMpOwogCWtmcmVlKHNwZWMpOwotCWNvZGVjLT5zcGVjID0gTlVMTDsgLyogdG8gYmUgc3VyZSAqLworCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCi1zdGF0aWMgdm9pZCBzdG9yZV9waW5fY29uZmlncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkLCBlbmRfbmlkOwotCi0JZW5kX25pZCA9IGNvZGVjLT5zdGFydF9uaWQgKyBjb2RlYy0+bnVtX25vZGVzOwotCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwotCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPQotCQkJKHdpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7Ci0JCWlmICh3aWRfdHlwZSAhPSBBQ19XSURfUElOKQotCQkJY29udGludWU7Ci0JCWlmIChzcGVjLT5udW1fcGlucyA+PSBBUlJBWV9TSVpFKHNwZWMtPnBpbl9uaWRzKSkKLQkJCWJyZWFrOwotCQlzcGVjLT5waW5fbmlkc1tzcGVjLT5udW1fcGluc10gPSBuaWQ7Ci0JCXNwZWMtPnBpbl9jZmdzW3NwZWMtPm51bV9waW5zXSA9Ci0JCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQlzcGVjLT5udW1fcGlucysrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzdW1lX3Bpbl9jb25maWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IHBpbl9uaWQgPSBzcGVjLT5waW5fbmlkc1tpXTsKLQkJdW5zaWduZWQgaW50IHBpbl9jb25maWcgPSBzcGVjLT5waW5fY2Znc1tpXTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCwKLQkJCQkgICAgcGluX2NvbmZpZyAmIDB4MDAwMDAwZmYpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLAotCQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDAwMGZmMDApID4+IDgpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18yLAotCQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDBmZjAwMDApID4+IDE2KTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywKLQkJCQkgICAgcGluX2NvbmZpZyA+PiAyNCk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JcmVzdW1lX3Bpbl9jb25maWdzKGNvZGVjKTsKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpCiAjZW5kaWYKIAogLyoKQEAgLTM1NTksNyArMzU3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODE4MSwgIkFTVVMgUDRHUEwiLCBBTEM4ODBfQVNVU19ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxOTYsICJBU1VTIFA1R0QxIiwgQUxDODgwXzZTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFiNCwgIkFTVVMiLCBBTEM4ODBfNlNUKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMCwgIkFTVVMiLCBBTEM4ODBfQVNVUyksIC8qIGRlZmF1bHQgQVNVUyAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA0MywgIkFTVVMiLCBBTEM4ODBfQVNVUyksIC8qIGRlZmF1bHQgQVNVUyAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxYTAsICJTb255IiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFkNiwgIlNvbnkiLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgzMDMyLCAiR2F0ZXdheSIsIEFMQzg4MF81U1QpLApAQCAtMzYwMiw3ICszNjIwLDggQEAKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAwLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAxLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAyLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMCwgIkludGVsIG1vYm8iLCBBTEM4ODBfM1NUKSwgLyogZGVmYXVsdCBJbnRlbCAqLworCS8qIGRlZmF1bHQgSW50ZWwgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDgwODYsICJJbnRlbCBtb2JvIiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweGEwYTAsIDB4MDU2MCwgIkFPcGVuIGk5MTVHTW0tSEZTIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHhlODAzLCAweDEwMTksIE5VTEwsIEFMQzg4MF82U1RfRElHKSwKIAl7fQpAQCAtMzc4Miw3ICszODAxLDcgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfY2FwdHVyZV9zb3VyY2UsCiAJfSwKIAlbQUxDODgwX1VOSVdJTExfRElHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIsIGFsYzg4MF9wY2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF9hc3VzX2RhY19uaWRzKSwKQEAgLTM4MjAsOCArMzgzOSw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGM4ODBfdW5pd2lsbF9wNTNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgwX0ZVSklUU1VdID0gewotCQkubWl4ZXJzID0geyBhbGM4ODBfZnVqaXRzdV9taXhlciwKLQkJCSAgICBhbGM4ODBfcGNiZWVwX21peGVyLCB9LAorCQkubWl4ZXJzID0geyBhbGM4ODBfZnVqaXRzdV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF91bml3aWxsX3A1M19pbml0X3ZlcmJzLAogCSAgICAgICAJCQlhbGM4ODBfYmVlcF9pbml0X3ZlcmJzIH0sCkBAIC00MTE0LDcgKzQxMzIsNyBAQAogc3RhdGljIGludCBhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtNDIwMiwxMSArNDIyMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgwX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDODgwX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgwX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtNDIyMSw3ICs0MjM3LDcgQEAKIHN0YXRpYyBpbnQgYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzg4MF9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCkBAIC00MjUyLDggKzQyNjgsMjMgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOworCS8qIGNoZWNrIG11bHRpcGxlIFNQRElGLW91dCAoZm9yIHJlY2VudCBjb2RlY3MpICovCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcuZGlnX291dHM7IGkrKykgeworCQloZGFfbmlkX3QgZGlnX25pZDsKKwkJZXJyID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCisJCQkJCSAgICAgIHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW5zW2ldLAorCQkJCQkgICAgICAmZGlnX25pZCwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJY29udGludWU7CisJCWlmICghaSkKKwkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKKwkJZWxzZSB7CisJCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKKwkJCWlmIChpID09IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKKwkJCQlicmVhazsKKwkJfQorCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDODgwX0RJR0lOX05JRDsKIApAQCAtNDI2Myw5ICs0Mjk0LDggQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQyODAsMjEgKzQzMTAsMzMgQEAKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2NhcHR1cmVfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjKQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1syXVszXSA9IHsKKwkJeyBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzEsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMyLAorCQkgIGFsY19jYXB0dXJlX21peGVyX25vc3JjMyB9LAorCQl7IGFsY19jYXB0dXJlX21peGVyMSwKKwkJICBhbGNfY2FwdHVyZV9taXhlcjIsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXIzIH0sCisJfTsKKwlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMCAmJiBzcGVjLT5udW1fYWRjX25pZHMgPD0gMykgeworCQlpbnQgbXV4OworCQlpZiAoc3BlYy0+aW5wdXRfbXV4ICYmIHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID4gMSkKKwkJCW11eCA9IDE7CisJCWVsc2UKKwkJCW11eCA9IDA7CisJCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbbXV4XVtzcGVjLT5udW1fYWRjX25pZHMgLSAxXTsKKwl9Cit9CisKKyNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIFwKKwkoKHNwZWMpLT5iZWVwX2FtcCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCBpZHgsIGRpcikpCisKIC8qCiAgKiBPSywgaGVyZSB3ZSBoYXZlIGZpbmFsbHkgdGhlIHBhdGNoIGZvciBBTEM4ODAKICAqLwogCi1zdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMpCi17Ci0Jc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBzWzNdID0gewotCQlhbGNfY2FwdHVyZV9taXhlcjEsCi0JCWFsY19jYXB0dXJlX21peGVyMiwKLQkJYWxjX2NhcHR1cmVfbWl4ZXIzLAotCX07Ci0JaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDAgJiYgc3BlYy0+bnVtX2FkY19uaWRzIDw9IDMpCi0JCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbc3BlYy0+bnVtX2FkY19uaWRzIC0gMV07Ci19Ci0KIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODgwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKQEAgLTQzMzAsNiArNDM3MiwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgwX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTQzNTYsNiArNDQwNCw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTQ0NjMsNiArNDUxMiwyNiBAQAogCQl9LAogCX0sCiB9OworCisvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFMgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXNbMl0gPSB7CisJeworCQkubnVtX2l0ZW1zID0gMiwKKwkJLml0ZW1zID0geworCQkJeyAiTGluZS9NaWMiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCX0sCisJfSwKKwl7CisJCS5udW1faXRlbXMgPSAzLAorCQkuaXRlbXMgPSB7CisJCQl7ICJMaW5lL01pYyIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIk1peGVyIiwgMHg1IH0sCisJCX0sCisJfSwKK307CisKIC8qCiAgKiBUaGlzIGlzIGp1c3QgcGxhY2UtaG9sZGVyLCBzbyB0aGVyZSdzIHNvbWV0aGluZyBmb3IgYWxjX2J1aWxkX3BjbXMgdG8gbG9vawogICogYXQgd2hlbiBpdCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscy4gQUxDMjYwIGhhcyBubyBtaXhlcgpAQCAtNDUwNSwxMiArNDU3NCw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9wY19iZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogLyogdXBkYXRlIEhQLCBsaW5lIGFuZCBtb25vIG91dCBwaW5zIGFjY29yZGluZyB0byB0aGUgbWFzdGVyIHN3aXRjaCAqLwogc3RhdGljIHZvaWQgYWxjMjYwX2hwX21hc3Rlcl91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgIGhkYV9uaWRfdCBocCwgaGRhX25pZF90IGxpbmUsCkBAIC00NzAyLDggKzQ3NjUsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYy9MaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljL0xpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiTWljL0xpbmUgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDksIDIsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtNDc0OCw4ICs0ODA5LDE4IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFM6IG9uZSBvdXRwdXQgYW5kIG9uZSBpbnB1dCAoMHgxMikgamFjaworICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2Zhdm9yaXQxMDBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMiwgSERBX0lOUFVUKSwKKwlBTENfUElOX01PREUoIk91dHB1dCBKYWNrIE1vZGUiLCAweDBmLCBBTENfUElOX0RJUl9JTk9VVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZS9NaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lL01pYyBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJMaW5lL01pYyBKYWNrIE1vZGUiLCAweDEyLCBBTENfUElOX0RJUl9JTiksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDc2Nyw4ICs0ODM4LDYgQEAKIAlBTENfUElOX01PREUoIkxpbmUgSmFjayBNb2RlIiwgMHgxNCwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNTEyNiw2ICs1MTk1LDg5IEBACiAJeyB9CiB9OwogCisvKiBJbml0aWFsaXNhdGlvbiBzZXF1ZW5jZSBmb3IgTWF4ZGF0YSBGYXZvcml0IDEwMFhTCisgKiAoYWRhcHRlZCBmcm9tIEFjZXIgaW5pdCB2ZXJicykuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2Zhdm9yaXQxMDBfaW5pdF92ZXJic1tdID0geworCS8qIEdQSU8gMCBlbmFibGVzIHRoZSBvdXRwdXQgamFjay4KKwkgKiBUdXJuIHRoaXMgb24gYW5kIHJlbHkgb24gdGhlIHN0YW5kYXJkIG11dGUKKwkgKiBtZXRob2RzIHdoZW5ldmVyIHRoZSB1c2VyIHdhbnRzIHRvIHR1cm4gdGhlc2Ugb3V0cHV0cyBvZmYuCisJICovCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAxfSwKKwkvKiBMaW5lL01pYyBpbnB1dCBqYWNrIGlzIGNvbm5lY3RlZCB0byBNaWMxIHBpbiAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTB9LAorCS8qIEVuc3VyZSBhbGwgb3RoZXIgdW51c2VkIHBpbnMgYXJlIGRpc2FibGVkIGFuZCBtdXRlZC4gKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogRGlzYWJsZSBkaWdpdGFsIChTUERJRikgcGlucyAqLworCXsweDAzLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisJezB4MDYsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKworCS8qIEVuc3VyZSBNaWMxIGFuZCBMaW5lMSBwaW4gd2lkZ2V0cyB0YWtlIGlucHV0IGZyb20gdGhlIE9VVDEgc3VtCisJICogYnVzIHdoZW4gYWN0aW5nIGFzIG91dHB1dHMuCisJICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCisJLyogU3RhcnQgd2l0aCBvdXRwdXQgc3VtIHdpZGdldHMgbXV0ZWQgYW5kIHRoZWlyIG91dHB1dCBnYWlucyBhdCBtaW4gKi8KKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIFVubXV0ZSBMaW5lLW91dCBwaW4gd2lkZ2V0IGFtcCBsZWZ0IGFuZCByaWdodAorCSAqIChubyBlcXVpdiBtaXhlciBjdHJsKQorCSAqLworCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogVW5tdXRlIE1pYzEgYW5kIExpbmUxIHBpbiB3aWRnZXQgaW5wdXQgYnVmZmVycyBzaW5jZSB0aGV5IHN0YXJ0IGFzCisJICogaW5wdXRzLiBJZiB0aGUgcGluIG1vZGUgaXMgY2hhbmdlZCBieSB0aGUgdXNlciB0aGUgcGluIG1vZGUgY29udHJvbAorCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGVuYWJsaW5nIHRoZSBwaW4ncyBpbnB1dC9vdXRwdXQgYnVmZmVycyBhcyBuZWVkZWQuCisJICogVGhlcmVmb3JlIHRoZXJlJ3Mgbm8gbmVlZCB0byBlbmFibGUgdGhlIGlucHV0IGJ1ZmZlciBhdCB0aGlzCisJICogc3RhZ2UuCisJICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyogTXV0ZSBjYXB0dXJlIGFtcCBsZWZ0IGFuZCByaWdodCAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogU2V0IEFEQyBjb25uZWN0aW9uIHNlbGVjdCB0byBtYXRjaCBkZWZhdWx0IG1peGVyIHNldHRpbmcgLSBtaWMKKwkgKiAob24gbWljMSBwaW4pCisJICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIERvIHNpbWlsYXIgd2l0aCB0aGUgc2Vjb25kIEFEQzogbXV0ZSBjYXB0dXJlIGlucHV0IGFtcCBhbmQKKwkgKiBzZXQgQURDIGNvbm5lY3Rpb24gdG8gbWljIHRvIG1hdGNoIEFMU0EncyBkZWZhdWx0IHN0YXRlLgorCSAqLworCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIE11dGUgYWxsIGlucHV0cyB0byBtaXhlciB3aWRnZXQgKGV2ZW4gdW5jb25uZWN0ZWQgb25lcykgKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBtaWMxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sIC8qIG1pYzIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwgLyogbGluZTEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwgLyogbGluZTIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwgLyogQ0QgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDUpfSwgLyogQmVlcC1nZW4gcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDYpfSwgLyogTGluZS1vdXQgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDcpfSwgLyogSFAtcGluIHBpbiAqLworCisJeyB9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF93aWxsX3ZlcmJzW10gPSB7CiAJezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNTI3Miw4ICs1NDI0LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTElORTIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxJTkUtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxJTkUtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSFAtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4NywgSERBX0lOUFVUKSwKQEAgLTU0NzEsNyArNTYyMSw3IEBACiBzdGF0aWMgaW50IGFsYzI2MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC01NTQ2LDExICs1Njk2LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChuaWQgPj0gMHgxMikgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzI2MF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzI2MF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTU2MjMsNyArNTc3MSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYwX0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKQEAgLTU2MzEsOSArNTc3OSw4IEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjMjYwX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC01NjcwLDYgKzU4MTcsNyBAQAogCVtBTEMyNjBfQUNFUl0JCT0gImFjZXIiLAogCVtBTEMyNjBfV0lMTF0JCT0gIndpbGwiLAogCVtBTEMyNjBfUkVQTEFDRVJfNjcyVl0JPSAicmVwbGFjZXIiLAorCVtBTEMyNjBfRkFWT1JJVDEwMF0JPSAiZmF2b3JpdDEwMCIsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCVtBTEMyNjBfVEVTVF0JCT0gInRlc3QiLAogI2VuZGlmCkBAIC01Njc5LDYgKzU4MjcsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2MF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA3YiwgIkFjZXIgQzIweCIsIEFMQzI2MF9BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDhmLCAiQWNlciIsIEFMQzI2MF9BQ0VSKSwKKwlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHg0NTQwLCAiRmF2b3JpdCAxMDBYUyIsIEFMQzI2MF9GQVZPUklUMTAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODA4LCAiSFAgZDU3MDAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwYSwgIkhQIGQ1NzUwIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTAsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKQEAgLTU3MDEsOCArNTg1MCw3IEBACiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2MF9wcmVzZXRzW10gPSB7CiAJW0FMQzI2MF9CQVNJQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF9iYXNlX291dHB1dF9taXhlciwKLQkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIsCi0JCQkgICAgYWxjMjYwX3BjX2JlZXBfbWl4ZXIgfSwKKwkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYwX2RhY19uaWRzLApAQCAtNTc4MSw2ICs1OTI5LDE4IEBACiAJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMsCiAJfSwKKwlbQUxDMjYwX0ZBVk9SSVQxMDBdID0geworCQkubWl4ZXJzID0geyBhbGMyNjBfZmF2b3JpdDEwMF9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2Zhdm9yaXQxMDBfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2MF9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzI2MF9kYWNfbmlkcywKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2R1YWxfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGMyNjBfZHVhbF9hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2MF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjBfbW9kZXMsCisJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlcyksCisJCS5pbnB1dF9tdXggPSBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXMsCisJfSwKIAlbQUxDMjYwX1dJTExdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjBfd2lsbF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2luaXRfdmVyYnMsIGFsYzI2MF93aWxsX3ZlcmJzIH0sCkBAIC01ODU3LDYgKzYwMTcsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2MF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC01ODgyLDYgKzYwNDgsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDA3LCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDA4OwogCkBAIC02MDUzLDggKzYyMjAsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MDgxLDggKzYyNDYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MTM0LDggKzYyOTcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MjQ0LDggKzY0MDUsMTAgQEAKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJLyogRklYTUU6IHRoaXMgbG9va3Mgc3VzcGljaW91cy4uLgogCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCSovCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjg3NywxOSArNzA0MCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCXVuc2lnbmVkIGludCB2cmVmOwogCQlpZiAoIW5pZCkKIAkJCWNvbnRpbnVlOwotCQl2cmVmID0gUElOX0lOOwotCQlpZiAoMSAvKmkgPD0gQVVUT19QSU5fRlJPTlRfTUlDKi8pIHsKLQkJCXVuc2lnbmVkIGludCBwaW5jYXA7Ci0JCQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOwotCQkJaWYgKChwaW5jYXAgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQpICYKLQkJCSAgICBBQ19QSU5DQVBfVlJFRl84MCkKLQkJCQl2cmVmID0gUElOX1ZSRUY4MDsKLQkJfQotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgdnJlZik7CisJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIEFVVE9fUElOX0ZST05UX01JQyAvKmkqLyk7CiAJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLApAQCAtNjkwMCwxOCArNzA1MywyMSBAQAogc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSBzcGVjLT5pbnB1dF9tdXg7CiAJaW50IGM7CiAKIAlmb3IgKGMgPSAwOyBjIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBjKyspIHsKIAkJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX05VTV9JTlBVVFNdOwogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHNbY107CisJCXVuc2lnbmVkIGludCBtdXhfaWR4OworCQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eDsKIAkJaW50IGNvbm5zLCBtdXRlLCBpZHgsIGl0ZW07CiAKIAkJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCiAJCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOwogCQlpZiAoY29ubnMgPCAwKQogCQkJY29udGludWU7CisJCW11eF9pZHggPSBjID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBjOworCQlpbXV4ID0gJnNwZWMtPmlucHV0X211eFttdXhfaWR4XTsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBjb25uczsgaWR4KyspIHsKIAkJCS8qIGlmIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgdGhlIHNlbGVjdGVkIG9uZSwKIAkJCSAqIHVubXV0ZSBpdCBhcyBkZWZhdWx0IC0gb3RoZXJ3aXNlIG11dGUgaXQKQEAgLTY5MjQsOCArNzA4MCwyMCBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBtdXRlKTsKKwkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgYSBzZWxlY3RvciBvciBtaXhlcgorCQkJICogd2UgY291bGQgY2hlY2sgZm9yIHRoZSB3aWRnZXQgdHlwZSBpbnN0ZWFkLCBidXQKKwkJCSAqIGp1c3QgY2hlY2sgZm9yIEFtcC1JbiBwcmVzZW5jZSAoaW4gY2FzZSBvZiBtaXhlcgorCQkJICogd2l0aG91dCBhbXAtaW4gdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nLCB0aGlzCisJCQkgKiBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgdXNlZCBvciBjYXBzcmMgbmlkIGlzIHdyb25nKQorCQkJICovCisJCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJCQkgICAgbXV0ZSk7CisJCQllbHNlIGlmIChtdXRlICE9IEFNUF9JTl9NVVRFKGlkeCkpCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkJICAgIGlkeCk7CiAJCX0KIAl9CiB9CkBAIC03MDU0LDYgKzcyMjIsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC03MDc0LDcgKzcyNDgsNyBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKQEAgLTcwOTEsNiArNzI2NSw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTcxNDIsMTAgKzczMTcsMTQgQEAKIAkweDA5LCAweDA4CiB9OwogCisjZGVmaW5lIGFsYzg4OV9hZGNfbmlkcwkJYWxjODgwX2FkY19uaWRzCisKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzWzJdID0geyAweDIzLCAweDIyIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzX3JldlsyXSA9IHsgMHgyMiwgMHgyMyB9OwogCisjZGVmaW5lIGFsYzg4OV9jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHMKKwogLyogaW5wdXQgTVVYICovCiAvKiBGSVhNRTogc2hvdWxkIGJlIGEgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCkBAIC03MzYzLDggKzc1NDIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDI3LDggKzc2MDQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDUyLDggKzc2MjcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDc4LDggKzc2NTEsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NTAzLDggKzc2NzQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTEyLDM2ICs4MDgxLDgzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7Ci0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLwotCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KLQl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF82c3RfZGVsbF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKIAl7IH0KIH07CiAKK3N0YXRpYyB2b2lkIGFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQsIGJpdHM7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTYsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7CisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiAyY2ggbW9kZQorICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfMmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCi0JeyB9CisJeyB9IC8qIGVuZCAqLwogfTsKIAorLyoKKyAqIDRjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF80Y2hfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF82Y2hfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IH0KKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbMl0gPSB7CitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg4XzNzdF9ocF9tb2Rlc1szXSA9IHsKIAl7IDIsIGFsYzg4OF8zc3RfaHBfMmNoX2luaXQgfSwKKwl7IDQsIGFsYzg4OF8zc3RfaHBfNGNoX2luaXQgfSwKIAl7IDYsIGFsYzg4OF8zc3RfaHBfNmNoX2luaXQgfSwKIH07CiAKQEAgLTgyMDIsNyArODQxOCw3IEBACiB7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIEFMQzg4MF9IUF9FVkVOVDoKLQkJcHJpbnRrKCJocF9ldmVudFxuIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJocF9ldmVudFxuIik7ICovCiAJCWFsYzg4OF82c3RfZGVsbF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCX0KQEAgLTg0NjEsNiArODY3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4NjY2OCwgIkVDUyIsIEFMQzg4M18zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA2YywgIkFjZXIgQXNwaXJlIDk4MTAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOTAsICJBY2VyIEFzcGlyZSIsIEFMQzg4M19BQ0VSX0FTUElSRSksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEwYSwgIkFjZXIgRmVycmFyaSA1MDAwIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTEwLCAiQWNlciBBc3BpcmUiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMTIsICJBY2VyIEFzcGlyZSA5MzAzIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTIxLCAiQWNlciBBc3BpcmUgNTkyMEciLCBBTEM4ODNfQUNFUl9BU1BJUkUpLApAQCAtODQ2OCwxNyArODY4NSwyMSBAQAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxM2YsICJBY2VyIEFzcGlyZSA1OTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1NywgIkFjZXIgWDMyMDAiLCBBTEM4ODNfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1OCwgIkFjZXIgQVgxNzAwLVUzNzAwQSIsIEFMQzg4M19BVVRPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTVlLCAiQWNlciBBc3BpcmUgNjkzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNjYsICJBY2VyIEFzcGlyZSA2NTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCi0JU05EX1BDSV9RVUlSSygweDEwMjUsIDAsICJBY2VyIGxhcHRvcCIsIEFMQzg4M19BQ0VSKSwgLyogZGVmYXVsdCBBY2VyICovCisJLyogZGVmYXVsdCBBY2VyICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDI1LCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIwZCwgIkRlbGwgSW5zcGlyb24gNTMwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTNkLCAiSFAgUGF2aWxsaW9uIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTY2LCAiSFAgQWNhY2lhIiwgQUxDODg4XzNTVF9IUCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE3MiwgIkhQIEVkdWMuYXIiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODczLCAiQXN1cyBNOTBWIiwgQUxDODg4X0FTVVNfTTkwViksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI0OSwgIkFzdXMgTTJBLVZNIEhETUkiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyODQsICJBc3VzIFozN0UiLCBBTEM4ODNfNlNUX0RJRyksCkBAIC04NTE4LDcgKzg3MzksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwODMsICJBYml0IElQMzUtUFJPIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjEsICJDbGV2byBsYXB0b3AgTTcyMFIiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCiAJU05EX1BDSV9RVUlSSygweDE1NTgsIDB4MDcyMiwgIkNsZXZvIGxhcHRvcCBNNzIwU1IiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCi0JU05EX1BDSV9RVUlSSygweDE1NTgsIDAsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTU1OCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE1ZDksIDB4ODc4MCwgIlN1cGVybWljcm8gUERTQkEiLCBBTEM4ODNfM1NUXzZjaCksCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIk1lZGlvbiBsYXB0b3AiLCBBTEM4ODNfTUVESU9OKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTA3LCAiRlNDIEFNSUxPIFhpMjU1MCIsCkBAIC04NTQzLDYgKzg3NjQsMTAgQEAKIAl7fQogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBhbGMxMjAwX3NsYXZlX2RpZ19vdXRzW10gPSB7CisJQUxDODgzX0RJR09VVF9OSUQsIDAsCit9OworCiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4M19wcmVzZXRzW10gPSB7CiAJW0FMQzg4M18zU1RfMmNoX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfMmNoX21peGVyIH0sCkBAIC04Nzc4LDYgKzkwMDMsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg4XzNzdF9ocF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfNlNUX0RFTExdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtODg4Myw2ICs5MTEwLDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEMxMjAwX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLnNsYXZlX2RpZ19vdXRzID0gYWxjMTIwMF9zbGF2ZV9kaWdfb3V0cywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLApAQCAtODk1MCwxMSArOTE3OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgzX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKLQkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtODk2OSw2ICs5MTk1LDggQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyID0gYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaTsKIAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtODk4Miw2ICs5MjEwLDI2IEBACiAJLyogaGFjayAtIG92ZXJyaWRlIHRoZSBpbml0IHZlcmJzICovCiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzg4M19hdXRvX2luaXRfdmVyYnM7CiAKKwkvKiBzZXR1cCBpbnB1dF9tdXggZm9yIEFMQzg4OSAqLworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA4ODkpIHsKKwkJLyogZGlnaXRhbC1taWMgaW5wdXQgcGluIGlzIGV4Y2x1ZGVkIGluIGFsYzg4MF9hdXRvX2NyZWF0ZS4uKCkKKwkJICogYmVjYXVzZSBpdCdzIHVuZGVyIDB4MTgKKwkJICovCisJCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CisJCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSA9PSAweDEyKSB7CisJCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CisJCQlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKQorCQkJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9pbXV4W2ldLAorCQkJCSAgICAgICAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdLAorCQkJCSAgICAgICBzaXplb2Yoc3BlYy0+cHJpdmF0ZV9pbXV4WzBdKSk7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBETWljIjsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDBiOworCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCQlzcGVjLT5udW1fbXV4X2RlZnMgPSAzOworCQkJc3BlYy0+aW5wdXRfbXV4ID0gc3BlYy0+cHJpdmF0ZV9pbXV4OworCQl9CisJfQorCiAJcmV0dXJuIDE7IC8qIGNvbmZpZyBmb3VuZCAqLwogfQogCkBAIC05MDMzLDYgKzkyODEsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4M19BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4M19wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC05MDQ1LDE0ICs5Mjk5LDM2IEBACiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg4IEFuYWxvZyI7CiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OCBEaWdpdGFsIjsKIAkJfQorCQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgeworCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOworCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7CisJCX0KKwkJaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKKwkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOworCQlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJCWJyZWFrOwogCWNhc2UgMHgxMGVjMDg4OToKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OSBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OSBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODg5X2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODg5X2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4OV9jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfMU1VWF9NSVg7IC8qIDFtdXgvTm1peC1zdHlsZQorCQkJCQkJCWNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4MyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4MyBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCQlicmVhazsKIAl9CiAKQEAgLTkwNjMsMTUgKzkzMzksOSBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4M19wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4M19wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0JaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKLQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOwotCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKLQl9Ci0JaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKLQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtOTEyNCw4ICs5Mzk0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MTQ2LDggKzk0MTQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLwogCS8qSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MEQsIDB4MCwgSERBX09VVFBVVCksKi8KIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtOTI1Niw4ICs5NTIyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQVVYIElOIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkFVWCBJTiBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkyODYsOCArOTU1MCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTk0MzUsNiArOTY5Nyw2NyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdHlhbl9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfdHlhbl92ZXJic1tdID0geworCS8qIEhlYWRwaG9uZSBhdXRvbXV0ZSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBQMTEgQVVYX0lOLCB3aGl0ZSA0LXBpbiBjb25uZWN0b3IgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLCAweGUxfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwgMHg5M30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsIDB4MTl9LAorCisJe30KK307CisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBtdXRlOworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSAocHJlc2VudCAmIDB4ODAwMDAwMDApICE9IDA7CisJaWYgKHByZXNlbnQpIHsKKwkJLyogbXV0ZSBsaW5lIG91dHB1dCBvbiBBVFggcGFuZWwgKi8KKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAorCQkJCQkgSERBX0FNUF9NVVRFLCBIREFfQU1QX01VVEUpOworCX0gZWxzZSB7CisJCS8qIHVubXV0ZSBsaW5lIG91dHB1dCBpZiBuZWNlc3NhcnkgKi8KKwkJbXV0ZSA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIDB4MWIsIDAsIEhEQV9PVVRQVVQsIDApOworCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjMjYyX3R5YW5fdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJaWYgKChyZXMgPj4gMjYpICE9IEFMQzg4MF9IUF9FVkVOVCkKKwkJcmV0dXJuOworCWFsYzI2Ml90eWFuX2F1dG9tdXRlKGNvZGVjKTsKK30KKwogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9taXhlcgkJYWxjODgyX2NhcHR1cmVfbWl4ZXIKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfYWx0X21peGVyCWFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcgogCkBAIC05OTAxLDggKzEwMjI0LDYgQEAKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTA0NzQsOCArMTA3OTUsMTQgQEAKIAkJCQkJICAgYWxjMjYyX2lnbm9yZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKSB7CisJCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzIHx8IHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJCXNwZWMtPm5vX2FuYWxvZyA9IDE7CisJCQlnb3RvIGRpZ19vbmx5OworCQl9CiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLworCX0KIAllcnIgPSBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTA0ODUsOCArMTA4MTIsMTEgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorIGRpZ19vbmx5OgorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQ7CisJCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOworCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDMjYyX0RJR0lOX05JRDsKIApAQCAtMTA0OTUsMTMgKzEwODI1LDEyIEBACiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjJfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwNTQzLDIxICsxMDg3MiwxOSBAQAogCVtBTEMyNjJfVUxUUkFdCQk9ICJ1bHRyYSIsCiAJW0FMQzI2Ml9MRU5PVk9fMzAwMF0JPSAibGVub3ZvLTMwMDAiLAogCVtBTEMyNjJfTkVDXQkJPSAibmVjIiwKKwlbQUxDMjYyX1RZQU5dCQk9ICJ0eWFuIiwKIAlbQUxDMjYyX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjJfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDAyLCAweDQzN2IsICJIaXBwbyIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwMzMsIDB4ODg5NSwgIk5FQyBWZXJzYSBTOTEwMCIsIEFMQzI2Ml9ORUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEyZmUsICJIUCB4dzk0MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMmZmLCAiSFAgeHc0NTUwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwNiwgIkhQIHh3ODYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDcsICJIUCB4dzY2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA4LCAiSFAgeHc0NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwOSwgIkhQIHh3NCowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMGEsICJIUCB4dzYqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzBiLCAiSFAgeHc4KjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTcwYiwgIkhQIHh3KiIsIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxMjAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxMzAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxNzAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDAsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0wpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDEsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0YpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDIsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0wpLApAQCAtMTA1NzUsMTcgKzEwOTAyLDE3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4MWYwMCwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MjAzLCAiU29ueSBVWC05MCIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwZiwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDBlLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTUsICJTb255IDB4OTAxNSIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAzMywgIlNvbnkgVkFJTyBWR04tU1IxOVhOIiwKLQkJICAgICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE2LCAiU29ueSBWQUlPIiwgQUxDMjYyX0FVVE8pLCAvKiBkaWctb25seSAqLworCVNORF9QQ0lfUVVJUktfTUFTSygweDEwNGQsIDB4ZmYwMCwgMHg5MDAwLCAiU29ueSBWQUlPIiwKKwkJCSAgIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgZHluYWJvb2sgU1MgUlgxIiwKIAkJICAgICAgQUxDMjYyX1RPU0hJQkFfUlgxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjdiLCAiVG9zaGliYSBTMDYiLCBBTEMyNjJfVE9TSElCQV9TMDYpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDEzOTcsICJGdWppdHN1IiwgQUxDMjYyX0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0MmQsICJGdWppdHN1IExpZmVib29rIEU4NDEwIiwgQUxDMjYyX0ZVSklUU1UpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMzIsICJTYW1zdW5nIFExIFVsdHJhIiwgQUxDMjYyX1VMVFJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDM5LCAiU2Ftc3VuZyBRMVUgRUwiLCBBTEMyNjJfVUxUUkEpLAorCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDI5MTUsICJUeWFuIFRodW5kZXIgbjY2NTBXIiwgQUxDMjYyX1RZQU4pLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE0NGQsIDB4ZmYwMCwgMHhjMDMyLCAiU2Ftc3VuZyBRMSIsCisJCQkgICBBTEMyNjJfVUxUUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGM1MTAsICJTYW1zdW5nIFE0NSIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzg0ZSwgIkxlbm92byAzMDAwIHk0MTAiLCBBTEMyNjJfTEVOT1ZPXzMwMDApLAogCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1NjAsICJCZW5xIEVEOCIsIEFMQzI2Ml9CRU5RX0VEOCksCkBAIC0xMDgwMiw2ICsxMTEyOSwxOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9fYXV0b211dGUsCiAJfSwKKwlbQUxDMjYyX1RZQU5dID0geworCQkubWl4ZXJzID0geyBhbGMyNjJfdHlhbl9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYyX2luaXRfdmVyYnMsIGFsYzI2Ml90eWFuX3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAyLAorCQkuZGlnX291dF9uaWQgPSBBTEMyNjJfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfdHlhbl91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzI2Ml90eWFuX2F1dG9tdXRlLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzI2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTEwODU0LDYgKzExMTk0LDE0IEBACiAJCX0KIAl9CiAKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZykgeworCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xMDg2NSw3ICsxMTIxMyw3IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwpAQCAtMTA4ODIsOCArMTEyMzAsMTAgQEAKIAkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjYyX2NhcHNyY19uaWRzOwogCQl9CiAJfQotCWlmICghc3BlYy0+Y2FwX21peGVyKQorCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCWlmICghc3BlYy0+bm9fYW5hbG9nKQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtMTEyNjMsMTkgKzExNjEzLDEzIEBACiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF9iYXNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBVbm11dGUgREFDMC0xIGFuZCBzZXQgdm9sID0gMCAqLwogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAogCS8qCiAJICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MGMgLSAweDBlKQogCSAqLwogCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKICAgICAgICAgezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMjk0LDkgKzExNjM4LDcgQEAKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCS8qIHNldCBQQ0JFRVAgdm9sID0gMCwgbXV0ZSBjb25uZWN0aW9ucyAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMzE4LDEwICsxMTY2MCw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogc2V0IG91dHB1dCBEQUMgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKQEAgLTExMzI5LDE2ICsxMTY2OSwxMiBAQAogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjB9LAogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjB9LAogCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCiAJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAkvKiBzZXQgUENCRUVQIHZvbCA9IDAsIG11dGUgY29ubmVjdGlvbnMgKi8KIAl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTUzNyw3ICsxMTg3Myw3IEBACiBzdGF0aWMgaW50IGFsYzI2OF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgaWR4MTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTExNjMxLDkgKzExOTY3LDE0IEBACiAJCQkJCSAgIGFsYzI2OF9pZ25vcmUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykgeworCQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cyB8fCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisJCQlzcGVjLT5ub19hbmFsb2cgPSAxOworCQkJZ290byBkaWdfb25seTsKKwkJfQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KLQorCX0KIAllcnIgPSBhbGMyNjhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTE2NDMsMjUgKzExOTg0LDI2IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCisgZGlnX29ubHk6CiAJLyogZGlnaXRhbCBvbmx5IHN1cHBvcnQgb3V0cHV0ICovCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpIHsKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjhfRElHT1VUX05JRDsKLQorCQlzcGVjLT5kaWdfb3V0X3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwl9CiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSAhPSAweDFkKQorCWlmICghc3BlYy0+bm9fYW5hbG9nICYmIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdICE9IDB4MWQpCiAJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfYmVlcF9taXhlcik7CiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjhfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTExNzIzLDcgKzEyMDY1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjhfcHJlc2V0c1tdID0gewogCVtBTEMyNjdfUVVBTlRBX0lMMV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyLCBhbGMyNjhfYmVlcF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY3X3F1YW50YV9pbDFfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtMTE4MDUsNyArMTIxNDcsOCBAQAogCX0sCiAJW0FMQzI2OF9BQ0VSX0FTUElSRV9PTkVdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9hc3BpcmVfb25lX21peGVyLAotCQkJCWFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAorCQkJICAgIGFsYzI2OF9iZWVwX21peGVyLAorCQkJICAgIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY4X2FjZXJfYXNwaXJlX29uZV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC0xMTg3NCw3ICsxMjIxNyw3IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwogCWludCBib2FyZF9jb25maWc7Ci0JaW50IGVycjsKKwlpbnQgaSwgaGFzX2JlZXAsIGVycjsKIAogCXNwZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMTkyMywxNSArMTIyNjYsMzAgQEAKIAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OF9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAotCWlmICghcXVlcnlfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCkpCi0JCS8qIG92ZXJyaWRlIHRoZSBhbXAgY2FwcyBmb3IgYmVlcCBnZW5lcmF0b3IgKi8KLQkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVULAorCWhhc19iZWVwID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CisJCWlmIChzcGVjLT5taXhlcnNbaV0gPT0gYWxjMjY4X2JlZXBfbWl4ZXIpIHsKKwkJCWhhc19iZWVwID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGhhc19iZWVwKSB7CisJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoIXF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQpKQorCQkJLyogb3ZlcnJpZGUgdGhlIGFtcCBjYXBzIGZvciBiZWVwIGdlbmVyYXRvciAqLworCQkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVULAogCQkJCQkgICgweDBjIDw8IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpIHwKIAkJCQkJICAoMHgwYyA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CiAJCQkJCSAgKDB4MDcgPDwgQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVCkgfAogCQkJCQkgICgwIDw8IEFDX0FNUENBUF9NVVRFX1NISUZUKSk7CisJfQogCi0JaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiAhc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwogCQlpbnQgaTsKQEAgLTEyMDEyLDggKzEyMzcwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTIwNDAsOCArMTIzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTIwNjUsOCArMTI0MTksNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRvY2sgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QiLCAweDFiLCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTIxMDMsMTMgKzEyNDU1LDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBiZWVwIGNvbnRyb2wgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9xdWFudGFfZmwxX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTI1MDksNyArMTI4NTQsNyBAQAogCSAqLwogCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CiAJICAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdID09IDB4MTIpIHsKLQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSAiSW50IE1pYyI7CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDA1OwogCQlpbXV4LT5udW1faXRlbXMrKzsKQEAgLTEyNTI3LDEzICsxMjg3MiwzNCBAQAogI2RlZmluZSBhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2sJYWxjODgwX3BjbV9kaWdpdGFsX3BsYXliYWNrCiAjZGVmaW5lIGFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlCWFsYzg4MF9wY21fZGlnaXRhbF9jYXB0dXJlCiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCwgLyogZml4ZWQgcmF0ZSAqLworCS8qIE5JRCBpcyBzZXQgaW4gYWxjX2J1aWxkX3BjbXMgKi8KKwkub3BzID0geworCQkub3BlbiA9IGFsYzg4MF9wbGF5YmFja19wY21fb3BlbiwKKwkJLnByZXBhcmUgPSBhbGM4ODBfcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gYWxjODgwX3BsYXliYWNrX3BjbV9jbGVhbnVwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwLCAvKiBmaXhlZCByYXRlICovCisJLyogTklEIGlzIHNldCBpbiBhbGNfYnVpbGRfcGNtcyAqLworfTsKKwogLyoKICAqIEJJT1MgYXV0byBjb25maWd1cmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgYWxjMjY5X3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzI2OV9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCkBAIC0xMjU1MCwyMiArMTI5MTYsMTUgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2OV9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAotCS8qIGNyZWF0ZSBhIGJlZXAgbWl4ZXIgY29udHJvbCBpZiB0aGUgcGluIDB4MWQgaXNuJ3QgYXNzaWduZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnMpOyBpKyspCi0JCWlmIChzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV0gPT0gMHgxZCkKLQkJCWJyZWFrOwotCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zKSkKLQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OV9iZWVwX21peGVyKTsKLQogCWFkZF92ZXJiKHNwZWMsIGFsYzI2OV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KIAlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjlfY2Fwc3JjX25pZHNbMF0sCiAJCQkJICAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKQEAgLTEyNTc1LDEwICsxMjkzNCw5IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIXNwZWMtPmNhcF9taXhlcikKKwlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTI2NzUsNyArMTMwMzMsNyBAQAogCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2RtaWNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0ZVSklUU1VdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciwgYWxjMjY5X2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY5X2Z1aml0c3VfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLAogCQkJCWFsYzI2OV9lZWVwY19kbWljX2luaXRfdmVyYnMgfSwKQEAgLTEyNzQwLDEzICsxMzA5OCwyNiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjY5X3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKIAlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMjY5IEFuYWxvZyI7Ci0Jc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2FuYWxvZ19wbGF5YmFjazsKLQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9hbmFsb2dfY2FwdHVyZTsKLQorCWlmIChjb2RlYy0+c3Vic3lzdGVtX2lkID09IDB4MTdhYTNiZjgpIHsKKwkJLyogRHVlIHRvIGEgaGFyZHdhcmUgcHJvYmxlbSBvbiBMZW5vdm8gSWRlYWRwYWQsIHdlIG5lZWQgdG8KKwkJICogZml4IHRoZSBzYW1wbGUgcmF0ZSBvZiBhbmFsb2cgSS9PIHRvIDQ0LjFrSHoKKwkJICovCisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrOworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5XzQ0a19wY21fYW5hbG9nX2NhcHR1cmU7CisJfSBlbHNlIHsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV9wY21fYW5hbG9nX2NhcHR1cmU7CisJfQogCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDMjY5IERpZ2l0YWwiOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlOwpAQCAtMTI3NTYsNiArMTMxMjcsNyBAQAogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X0FVVE8pCkBAIC0xMzAwNiw4ICsxMzM3OCw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX2FzdXNfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9CiB9OwogCkBAIC0xMzQ4MSw3ICsxMzg1MSw3IEBACiBzdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHgsIGlkeDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC0xMzU2OCwxMiArMTM5MzgsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQlpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MTEpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQl9CisJCWlmIChuaWQgPj0gMHgwYyAmJiBuaWQgPD0gMHgxMSkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOwogCX0KIH0KIApAQCAtMTM2MDksNyArMTM5NzUsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKQEAgLTEzNjE4LDEzICsxMzk4NCwxMiBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg2MV9hdXRvX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzg2MV9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MV9hZGNfbmlkcyk7CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEzODMzLDYgKzE0MTk4LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgyMyk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTEzODQ0LDYgKzE0MjE1LDggQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4NjFfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4NjFfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAorCXNldF9iZWVwX2FtcChzcGVjLCAweDIzLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMzsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwpAQCAtMTQwMDAsOSArMTQzNzMsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0MDI2LDkgKzE0Mzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDA2Nyw4ICsxNDQzNCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0Mzc5LDkgKzE0NzQ0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjAzLCAiVG9zaGliYSBQMjA1IiwgQUxDODYxVkRfTEVOT1ZPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBMMzAtMTQ5IiwgQUxDODYxVkRfREFMTEFTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBkLCAiQmlvc3RhciBORjYxUyBTRSIsIEFMQzg2MVZEXzZTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwNjYsICJMZW5vdm8iLCBBTEM4NjFWRF9MRU5PVk8pLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4MDIsICJMZW5vdm8gMzAwMCBDMjAwIiwgQUxDODYxVkRfTEVOT1ZPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODRlLCAiTGVub3ZvIDMwMDAgTjIwMCIsIEFMQzg2MVZEX0xFTk9WTyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQUxDODYxVkRfTEVOT1ZPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgwODYyLCAiQVNSb2NrIEs4TkY2Ry1WU1RBIiwgQUxDODYxVkRfNlNUX0RJRyksCiAJe30KIH07CkBAIC0xNDU0MywxMSArMTQ5MDYsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg2MXZkX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkJCVBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEM4NjFWRF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg2MVZEX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQlBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJQU1QX09VVF9NVVRFKTsKQEAgLTE0NzEzLDcgKzE1MDc0LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg2MVZEX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKQEAgLTE0NzIyLDEzICsxNTA4MywxMiBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg2MXZkX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0Nzc5LDYgKzE1MTM5LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgyMyk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxVkRfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4NjF2ZF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xNDgwMSw5ICsxNTE2NywxMCBAQAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxdmRfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjF2ZF9hZGNfbmlkcyk7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4NjF2ZF9jYXBzcmNfbmlkczsKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CiAKQEAgLTE0OTkyLDggKzE1MzU5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE1MDE1LDggKzE1MzgwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE1OTkyLDU2ICsxNjM1NSw1NSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwMTksIDB4OTA4NywgIkVDUyIsIEFMQzY2Ml9FQ1MpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwOTIsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgyMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgzMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg0MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg2NCwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3NiwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUxVkEiLCBBTEM2NjNfQVNVU19NNTFWQSksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTBWciIsIEFMQzY2M19BU1VTX01PREUxKSwqLworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTMsICJBU1VTIE01MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTQsICJBU1VTIFg1NSIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MzMsICJBU1VTIEY4MFEiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk1MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk2MywgIkFTVVMgWDcxQyIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgRzUwViIsIEFMQzY2M19BU1VTX0c1MFYpLAorCS8qU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWIzLCAiQVNVUyBGN1oiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjkwLCAiQVNVUyBQNUdDLU1YIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmExLCAiQVNVUyBFZWVwYyIsIEFMQzY2Ml9BU1VTX0VFRVBDX1A3MDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyZDEsICJBU1VTIEVlZXBjIEVQMjAiLCBBTEM2NjJfQVNVU19FRUVQQ19FUDIwKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MFZyIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YjMsICJBU1VTIEY3WiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODQzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc2LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODY0LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzgzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzUzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTMzLCAiQVNVUyBGODBRIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTMsICJBU1VTIE01MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk2MywgIkFTVVMgWDcxQyIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlmMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgyMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgzMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwZDQ3LCAiRm94Y29ubiA0NUNNWC80NUdNWC80NUNNWC1LIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg5MDg3LCAiRUNTIiwgQUxDNjYyX0VDUyksCi0JU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1NjUsIDB4ODIwZiwgIkJpb3N0YXIgVEE3ODBHIE0yKyIsIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxZSwgIkxlbm92byIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MzY2MiwgIkFTUk9DSyBLMTBONzhGdWxsSEQtaFNMSSBSMy4wIiwKIAkJCQkJQUxDNjYyXzNTVF82Y2hfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAwLCAiQVNVUyBIMTMtMjAwMCIsIEFMQzY2M19BU1VTX0gxMyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMSwgIkFTVVMgSDEzLTIwMDEiLCBBTEM2NjNfQVNVU19IMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDIsICJBU1VTIEgxMy0yMDAyIiwgQUxDNjYzX0FTVVNfSDEzKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxODU0LCAweGYwMDAsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMHgiLAorCQkJICAgQUxDNjYzX0FTVVNfSDEzKSwKIAl7fQogfTsKIApAQCAtMTYzNjEsNyArMTY3MjMsNyBAQAogCiAJaWYgKGFsYzg4MF9pc19maXhlZF9waW4ocGluKSkgewogCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKLSAgICAgICAgICAgICAgICAvKiBwcmludGsoIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KIAkJLyogc3BlY2lmeSB0aGUgREFDIGFzIHRoZSBleHRyYSBvdXRwdXQgKi8KIAkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCiAJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7CkBAIC0xNjM5MSwyNiArMTY3NTMsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc3JjIHdpZGdldCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3Qgb2YgdGhlIG5pZC4KKyAqIHJldHVybiAtMSBpZiBub3QgZm91bmQKKyAqLworc3RhdGljIGludCBhbGM2NjJfaW5wdXRfcGluX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCQloZGFfbmlkX3Qgc3JjKQoreworCWhkYV9uaWRfdCBjb25uX2xpc3RbSERBX01BWF9DT05ORUNUSU9OU107CisJaW50IGksIGNvbm5zOworCisJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCisJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CisJaWYgKGNvbm5zIDwgMCkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBjb25uczsgaSsrKQorCQlpZiAoY29ubl9saXN0W2ldID09IHNyYykKKwkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhbGM2NjJfaXNfaW5wdXRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCXJldHVybiAocGluY2FwICYgQUNfUElOQ0FQX0lOKSAhPSAwOworfQorCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChhbGM4ODBfaXNfaW5wdXRfcGluKGNmZy0+aW5wdXRfcGluc1tpXSkpIHsKLQkJCWlkeCA9IGFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sCi0JCQkJCSAgICAgICBpZHgsIDB4MGIpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPQotCQkJCWF1dG9fcGluX2NmZ19sYWJlbHNbaV07Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0KLQkJCQlhbGM4ODBfaW5wdXRfcGluX2lkeChjZmctPmlucHV0X3BpbnNbaV0pOwotCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBjZmctPmlucHV0X3BpbnNbaV0pKSB7CisJCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgwYiwKKwkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKKwkJCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAorCQkJCQkJICAgICAgIGlkeCwgMHgwYik7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgyMiwKKwkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KKwkJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKKwkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4OworCQkJCWltdXgtPm51bV9pdGVtcysrOworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTY0NjAsNyArMTY4NTQsNiBAQAogCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CiB9CiAKLSNkZWZpbmUgYWxjNjYyX2lzX2lucHV0X3BpbihuaWQpCWFsYzg4MF9pc19pbnB1dF9waW4obmlkKQogI2RlZmluZSBBTEM2NjJfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xNjQ3MCwxMiArMTY4NjMsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgICBQSU5fVlJFRjgwIDogUElOX0lOKSk7Ci0JCQlpZiAobmlkICE9IEFMQzY2Ml9QSU5fQ0RfTklEKQorCQlpZiAoYWxjNjYyX2lzX2lucHV0X3Bpbihjb2RlYywgbmlkKSkgeworCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzY2Ml9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTE2NTEzLDIwICsxNjkwNCwyMCBAQAogCQkJCQkgICAiSGVhZHBob25lIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2F1dG9faW5pdF92ZXJicyk7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MykKQEAgLTE2NTM2LDcgKzE2OTI3LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTY1ODgsNiArMTY5NzgsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzY2Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzY2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xNjYxMSwxMCArMTcwMDcsMTQgQEAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzY2Ml9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzY2Ml9hZGNfbmlkcyk7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM2NjJfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYyKQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKKwllbHNlCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA0LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNjA5NDM0NC4uYjVlMTA4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtNDMsNiArNDMsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ19BVVRPLAogCVNUQUNfUkVGLAogCVNUQUNfOTIwMF9PUU8sCiAJU1RBQ185MjAwX0RFTExfRDIxLApAQCAtNjIsMTQgKzYzLDE3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyMDVfQVVUTywKIAlTVEFDXzkyMDVfUkVGLAogCVNUQUNfOTIwNV9ERUxMX000MiwKIAlTVEFDXzkyMDVfREVMTF9NNDMsCiAJU1RBQ185MjA1X0RFTExfTTQ0LAorCVNUQUNfOTIwNV9FQVBELAogCVNUQUNfOTIwNV9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDczWFhfQVVUTywKIAlTVEFDXzkySEQ3M1hYX05PX0pELCAvKiBubyBqYWNrLWRldGVjdGlvbiAqLwogCVNUQUNfOTJIRDczWFhfUkVGLAogCVNUQUNfREVMTF9NNl9BTUlDLApAQCAtODAsMjIgKzg0LDI3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ4M1hYWF9BVVRPLAogCVNUQUNfOTJIRDgzWFhYX1JFRiwKIAlTVEFDXzkySEQ4M1hYWF9QV1JfUkVGLAorCVNUQUNfREVMTF9TMTQsCiAJU1RBQ185MkhEODNYWFhfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ3MUJYWF9BVVRPLAogCVNUQUNfOTJIRDcxQlhYX1JFRiwKIAlTVEFDX0RFTExfTTRfMSwKIAlTVEFDX0RFTExfTTRfMiwKIAlTVEFDX0RFTExfTTRfMywKIAlTVEFDX0hQX000LAogCVNUQUNfSFBfRFY1LAorCVNUQUNfSFBfSERYLAogCVNUQUNfOTJIRDcxQlhYX01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MjV4X0FVVE8sCiAJU1RBQ185MjV4X1JFRiwKIAlTVEFDX00xLAogCVNUQUNfTTFfMiwKQEAgLTEwOCw2ICsxMTcsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjJYX0FVVE8sCiAJU1RBQ19EOTQ1X1JFRiwKIAlTVEFDX0Q5NDVHVFAzLAogCVNUQUNfRDk0NUdUUDUsCkBAIC0xMzUsNiArMTQ1LDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTI3WF9BVVRPLAogCVNUQUNfRDk2NV9SRUZfTk9fSkQsIC8qIG5vIGphY2stZGV0ZWN0aW9uICovCiAJU1RBQ19EOTY1X1JFRiwKIAlTVEFDX0Q5NjVfM1NULApAQCAtMTQ0LDYgKzE1NSwxMiBAQAogCVNUQUNfOTI3WF9NT0RFTFMKIH07CiAKK2VudW0geworCVNUQUNfOTg3Ml9BVVRPLAorCVNUQUNfOTg3Ml9WQUlPLAorCVNUQUNfOTg3Ml9NT0RFTFMKK307CisKIHN0cnVjdCBzaWdtYXRlbF9ldmVudCB7CiAJaGRhX25pZF90IG5pZDsKIAl1bnNpZ25lZCBjaGFyIHR5cGU7CkBAIC0xNjcsNiArMTg0LDcgQEAKIAl1bnNpZ25lZCBpbnQgYWx0X3N3aXRjaDogMTsKIAl1bnNpZ25lZCBpbnQgaHBfZGV0ZWN0OiAxOwogCXVuc2lnbmVkIGludCBzcGRpZl9tdXRlOiAxOworCXVuc2lnbmVkIGludCBjaGVja192b2x1bWVfb2Zmc2V0OjE7CiAKIAkvKiBncGlvIGxpbmVzICovCiAJdW5zaWduZWQgaW50IGVhcGRfbWFzazsKQEAgLTE3OSw2ICsxOTcsNyBAQAogCXVuc2lnbmVkIGludCBzdHJlYW1fZGVsYXk7CiAKIAkvKiBhbmFsb2cgbG9vcGJhY2sgKi8KKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqYWxvb3BiYWNrX2N0bDsKIAl1bnNpZ25lZCBjaGFyIGFsb29wYmFja19tYXNrOwogCXVuc2lnbmVkIGNoYXIgYWxvb3BiYWNrX3NoaWZ0OwogCkBAIC0yMDMsNiArMjIyLDggQEAKIAloZGFfbmlkX3QgaHBfZGFjc1s1XTsKIAloZGFfbmlkX3Qgc3BlYWtlcl9kYWNzWzVdOwogCisJaW50IHZvbHVtZV9vZmZzZXQ7CisKIAkvKiBjYXB0dXJlICovCiAJaGRhX25pZF90ICphZGNfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY3M7CkBAIC0yMjQsNyArMjQ1LDYgQEAKIAkvKiBwaW4gd2lkZ2V0cyAqLwogCWhkYV9uaWRfdCAqcGluX25pZHM7CiAJdW5zaWduZWQgaW50IG51bV9waW5zOwotCXVuc2lnbmVkIGludCAqcGluX2NvbmZpZ3M7CiAKIAkvKiBjb2RlYyBzcGVjaWZpYyBzdHVmZiAqLwogCXN0cnVjdCBoZGFfdmVyYiAqaW5pdDsKQEAgLTQwMCw2ICs0MjAsMTAgQEAKICAgICAgICAgMHgxMiwgMHgxMywKIH07CiAKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfc2xhdmVfZGlnX291dHNbMl0gPSB7CisJMHgxZiwgMCwKK307CisKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfYWRjX25pZHNbM10gPSB7CiAgICAgICAgIDB4MDcsIDB4MDgsIDB4MDkKIH07CkBAIC00NzIsMTUgKzQ5NiwyMSBAQAogCTB4MTQsIDB4MjIsIDB4MjMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9waW5fbmlkc1sxNF0gPSB7CitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfcGluX25pZHNbMTBdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsCi0JMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLQkweDFkLCAweDFlLCAweDFmLCAweDIwCisJMHgwZiwgMHgxMCwgMHgxMSwgMHgxZiwgMHgyMCwKIH07Ci1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNbMTFdID0geworCisjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCisJMHgxZiwgMHgyMCwgMHgyNworfTsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAogCTB4MGYsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCi0JMHgxZiwKKwkweDFmLCAweDIwLCAweDI3CiB9OwogCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X3Bpbl9uaWRzWzE0XSA9IHsKQEAgLTg0Miw5ICs4NzIsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDgzeHh4X2NvcmVfaW5pdFtdID0gewotCXsgMHhhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQl7IDB4YiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JeyAweGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4YiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAogCiAJLyogcG93ZXIgc3RhdGUgY29udHJvbHMgYW1wcyAqLwogCXsgMHgwMSwgQUNfVkVSQl9TRVRfRUFQRCwgMSA8PCAyfSwKQEAgLTg1NCwyNiArODg0LDI1IEBACiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCwgMHgwZiAqLwotCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXt9CiB9OwogCi0jZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMgorI2RlZmluZSBIRF9ESVNBQkxFX1BPUlRGIDEKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0W10gPSB7CiAJLyogc3RhcnQgb2YgY29uZmlnICMxICovCiAKIAkvKiBjb25uZWN0IHBvcnQgMGYgdG8gYXVkaW8gbWl4ZXIgKi8KIAl7IDB4MGYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDJ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZSAweDBmICovCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBzdGFydCBvZiBjb25maWcgIzIgKi8KIAogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBhLCAweGQgKi8KKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXRbXSA9IHsKKwkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGYsIDB4YSwgMHgwZCAqLworCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXt9CkBAIC05NTQsMTYgKzk4Myw2IEBACiAJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgaWR4LCBkaXIpIFwKIAl9CiAKLSNkZWZpbmUgU1RBQ19JTlBVVF9TT1VSQ0UoY250KSBcCi0JeyBcCi0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCi0JCS5uYW1lID0gIklucHV0IFNvdXJjZSIsIFwKLQkJLmNvdW50ID0gY250LCBcCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywgXAotCQkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LCBcCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsIFwKLQl9Ci0KICNkZWZpbmUgU1RBQ19BTkFMT0dfTE9PUEJBQ0sodmVyYl9yZWFkLCB2ZXJiX3dyaXRlLCBjbnQpIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKQEAgLTk3OCw3ICs5OTcsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4YiwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweGIsIDAsIEhEQV9PVVRQVVQpLAotCVNUQUNfSU5QVVRfU09VUkNFKDEpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYSwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtMTAwMyw4ICsxMDIxLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJEQUMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRBQyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKIAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgMyksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTAxNCw5ICsxMDMwLDIyIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbWl4ZXJbXSA9IHsKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDMpLAorCXt9Cit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNCksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfMTBjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNSksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwNDEsOCArMTA3MCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzEwY2hfbWl4ZXJbXSA9IHsKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDUpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwOTQsOSArMTEyMSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExMjIsMTAgKzExNDYsMTEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMiksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMikKK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExMzcsMTYgKzExNjIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI1eF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDAsIEhEQV9PVVRQVVQpLAotCVNUQUNfSU5QVVRfU09VUkNFKDEpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNCwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjA1X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRTAsIDB4N0UwLCAxKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExNTUsOSArMTE3NiwxMyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwNV9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkUwLCAweDdFMCwgMSksCisJe30KK307CisKIC8qIFRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlcXVlbmNlICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMnhfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAKQEAgLTExNjgsOSArMTE5Myw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5Mjd4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMyksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRUIsIDB4N0VCLCAxKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExODIsNiArMTIwNCwxMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkVCLCAweDdFQiwgMSksCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2RtdXhfbWl4ZXIgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiRGlnaXRhbCBJbnB1dCBTb3VyY2UiLApAQCAtMTIwNywxMCArMTIzNCw3IEBACiAJIkxGRSBQbGF5YmFjayBWb2x1bWUiLAogCSJTaWRlIFBsYXliYWNrIFZvbHVtZSIsCiAJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAotCSJIZWFkcGhvbmUyIFBsYXliYWNrIFZvbHVtZSIsCiAJIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkiRXh0ZXJuYWwgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAotCSJTcGVha2VyMiBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwKIH07CiAKQEAgLTEyMjEsMTAgKzEyNDUsNyBAQAogCSJMRkUgUGxheWJhY2sgU3dpdGNoIiwKIAkiU2lkZSBQbGF5YmFjayBTd2l0Y2giLAogCSJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKLQkiSGVhZHBob25lMiBQbGF5YmFjayBTd2l0Y2giLAogCSJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgU3dpdGNoIiwKIAkiSUVDOTU4IFBsYXliYWNrIFN3aXRjaCIsCiAJTlVMTAogfTsKQEAgLTEyOTQsNiArMTMxNSw4IEBACiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CisJCS8qIGNvcnJlY3Qgdm9sdW1lIG9mZnNldCAqLworCQl2bWFzdGVyX3RsdlsyXSArPSB2bWFzdGVyX3RsdlszXSAqIHNwZWMtPnZvbHVtZV9vZmZzZXQ7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKIAkJCQkJICB2bWFzdGVyX3Rsdiwgc2xhdmVfdm9scyk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTMwNiw2ICsxMzI5LDEzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChzcGVjLT5hbG9vcGJhY2tfY3RsICYmCisJICAgIHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImxvb3BiYWNrIikgPT0gMSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgc3BlYy0+YWxvb3BiYWNrX2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlzdGFjOTJ4eF9mcmVlX2tjdGxzKGNvZGVjKTsgLyogbm8gbG9uZ2VyIG5lZWRlZCAqLwogCiAJLyogY3JlYXRlIGphY2sgaW5wdXQgZWxlbWVudHMgKi8KQEAgLTE0OTAsNiArMTUyMCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMDBfbW9kZWxzW1NUQUNfOTIwMF9NT0RFTFNdID0geworCVtTVEFDX0FVVE9dID0gImF1dG8iLAogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjAwX09RT10gPSAib3FvIiwKIAlbU1RBQ185MjAwX0RFTExfRDIxXSA9ICJkZWxsLWQyMSIsCkBAIC0xNTExLDYgKzE1NDIsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKIAkvKiBEZWxsIGxhcHRvcHMgaGF2ZSBCSU9TIHByb2JsZW0gKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWE4LAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjAwX0RFTExfRDIxKSwKQEAgLTE2MzMsNiArMTY2Niw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyNXhfbW9kZWxzW1NUQUNfOTI1eF9NT0RFTFNdID0geworCVtTVEFDXzkyNXhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfUkVGXSA9ICJyZWYiLAogCVtTVEFDX00xXSA9ICJtMSIsCiAJW1NUQUNfTTFfMl0gPSAibTEtMiIsCkBAIC0xNjYwLDYgKzE2OTQsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjV4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSygweDgzODQsIDB4NzYzMiwgIlN0YWM5MjAyIFJlZmVyZW5jZSBCb2FyZCIsIFNUQUNfUkVGKSwKIAogCS8qIERlZmF1bHQgdGFibGUgZm9yIHVua25vd24gSUQgKi8KQEAgLTE2OTEsNiArMTcyNiw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyaGQ3M3h4X21vZGVsc1tTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDczWFhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTJIRDczWFhfTk9fSkRdID0gIm5vLWpkIiwKIAlbU1RBQ185MkhENzNYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNl9BTUlDXSA9ICJkZWxsLW02LWFtaWMiLApAQCAtMTcwMyw2ICsxNzM5LDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyNTQsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1MzUiLCBTVEFDX0RFTExfTTZfRE1JQyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDI1NSwKQEAgLTE3MjYsNTIgKzE3NjQsNjggQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxNF0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMjIxMTAxMCwgMHgwMmExOTAyMCwgMHgwMjE3MDEzMCwKIAkweDAxMDE0MDUwLCAweDAxODE5MDQwLCAweDAxMDE0MDIwLCAweDkwYTMwMTRlLAotCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCiAJMHgwMTQ1MTE2MCwgMHg5ODU2MDE3MCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9zMTRfcGluX2NvbmZpZ3NbMTBdID0geworCTB4MDIyMTQwMzAsIDB4MDIyMTEwMTAsIDB4MDJhMTkwMjAsIDB4MDEwMTQwNTAsCisJMHg0MGYwMDBmMCwgMHgwMTgxOTA0MCwgMHg0MGYwMDBmMCwgMHg5MGE2MDE2MCwKKwkweDQwZjAwMGYwLCAweDQwZjAwMGYwLAorfTsKKwogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ4M3h4eF9icmRfdGJsW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDgzWFhYX1JFRl0gPSByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAorCVtTVEFDX0RFTExfUzE0XSA9IGRlbGxfczE0X3Bpbl9jb25maWdzLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkODN4eHhfbW9kZWxzW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDgzWFhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ4M1hYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gIm1pYy1yZWYiLAorCVtTVEFDX0RFTExfUzE0XSA9ICJkZWxsLXMxNCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyaGQ4M3h4eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ4M1hYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDgzWFhYX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiYSwKKwkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfREVMTF9TMTQpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDIyMTQwMzAsIDB4MDJhMTkwNDAsIDB4MDFhMTkwMjAsIDB4MDEwMTQwMTAsCiAJMHgwMTgxMzAyZSwgMHgwMTAxNDAxMCwgMHgwMTAxOTAyMCwgMHg5MGEwMDBmMCwKLQkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLAorCTB4OTBhMDAwZjAsIDB4MDE0NTIwNTAsIDB4MDE0NTIwNTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg0MGYwMDBmMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDkwYTAwMGYwLAotCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsCisJMHg0MGYwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4MjNhMTkwMmUsIDB4MjMwMTQyNTAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwKKwkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4OTBhNzAzMzAsIDB4OTAxNzAxMTAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKLQkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLAorCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CkBAIC0xNzgxLDM1ICsxODM1LDM4IEBACiAJW1NUQUNfREVMTF9NNF8zXQk9IGRlbGxfbTRfM19waW5fY29uZmlncywKIAlbU1RBQ19IUF9NNF0JCT0gTlVMTCwKIAlbU1RBQ19IUF9EVjVdCQk9IE5VTEwsCisJW1NUQUNfSFBfSERYXSAgICAgICAgICAgPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkNzFieHhfbW9kZWxzW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDcxQlhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ3MUJYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNF8xXSA9ICJkZWxsLW00LTEiLAogCVtTVEFDX0RFTExfTTRfMl0gPSAiZGVsbC1tNC0yIiwKIAlbU1RBQ19ERUxMX000XzNdID0gImRlbGwtbTQtMyIsCiAJW1NUQUNfSFBfTTRdID0gImhwLW00IiwKIAlbU1RBQ19IUF9EVjVdID0gImhwLWR2NSIsCisJW1NUQUNfSFBfSERYXSA9ICJocC1oZHgiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkNzFieHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmMiwKLQkJICAgICAgIkhQIGR2NSIsIFNUQUNfSFBfTTQpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY0LAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY3LAotCQkgICAgICAiSFAgZHY0IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGZjLAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9NNCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDAsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDMsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwODAsCisJCSAgICAgICJIUCIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwZjAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDM2MDAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxMCwKKwkJICAgICAgIkhQIEhEWCIsIFNUQUNfSFBfSERYKSwgIC8qIEhEWDE4ICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MWEsCi0JCQkJInVua25vd24gSFAiLCBTVEFDX0hQX000KSwKKwkJICAgICAgIkhQIG1pbmkgMTAwMCIsIFNUQUNfSFBfTTQpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjFiLAorCQkgICAgICAiSFAgSERYIiwgU1RBQ19IUF9IRFgpLCAgLyogSERYMTYgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjMzLAogCQkJCSJ1bmtub3duIERlbGwiLCBTVEFDX0RFTExfTTRfMSksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIzNCwKQEAgLTE5NjEsNiArMjAxOCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMnhfbW9kZWxzW1NUQUNfOTIyWF9NT0RFTFNdID0geworCVtTVEFDXzkyMlhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfRDk0NV9SRUZdCT0gInJlZiIsCiAJW1NUQUNfRDk0NUdUUDVdCT0gIjVzdGFjayIsCiAJW1NUQUNfRDk0NUdUUDNdCT0gIjNzdGFjayIsCkBAIC0xOTg4LDYgKzIwNDYsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogSW50ZWwgOTQ1RyBiYXNlZCBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAxMDEsCiAJCSAgICAgICJJbnRlbCBEOTQ1RyIsIFNUQUNfRDk0NUdUUDMpLApAQCAtMjA0MSw2ICsyMTAxLDkgQEAKIAkJICAgICAgIkludGVsIEQ5NDVQIiwgU1RBQ19EOTQ1R1RQMyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA3MDcsCiAJCSAgICAgICJJbnRlbCBEOTQ1UCIsIFNUQUNfRDk0NUdUUDUpLAorCS8qIG90aGVyIGludGVsICovCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAyMDQsCisJCSAgICAgICJJbnRlbCBEOTQ1IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogb3RoZXIgc3lzdGVtcyAgKi8KIAkvKiBBcHBsZSBJbnRlbCBNYWMgKE1hYyBNaW5pLCBNYWNCb29rLCBNYWNCb29rIFByby4uLikgKi8KIAlTTkRfUENJX1FVSVJLKDB4ODM4NCwgMHg3NjgwLApAQCAtMjA2NSwzMSArMjEyOCw3IEBACiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFkNywKIAkJICAgICAgIkRlbGwgWFBTIE0xMjEwIiwgU1RBQ185MjJYX0RFTExfTTgyKSwKIAkvKiBFQ1MvUEMgQ2hpcHMgYm9hcmRzICovCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjE0NCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYwOCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYzMywKLQkJICAgICAgIkVDUy9QQyBjaGlwcyBQMTdHLzEzMzMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTEsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTIsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTMsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTQsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTUsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTYsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTcsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTgsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTksCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MjAsCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAxOSwgMHhmMDAwLCAweDIwMDAsCiAJCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0yMTMyLDYgKzIxNzEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5Mjd4X21vZGVsc1tTVEFDXzkyN1hfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjdYX0FVVE9dCT0gImF1dG8iLAogCVtTVEFDX0Q5NjVfUkVGX05PX0pEXQk9ICJyZWYtbm8tamQiLAogCVtTVEFDX0Q5NjVfUkVGXQkJPSAicmVmIiwKIAlbU1RBQ19EOTY1XzNTVF0JCT0gIjNzdGFjayIsCkBAIC0yMTQ0LDI2ICsyMTg0LDE2IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKIAkgLyogSW50ZWwgOTQ2IGJhc2VkIHN5c3RlbXMgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2QwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4YTMwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAkvKiA5NjUgYmFzZWQgMyBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTAsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDksICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDgsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDcsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMTAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDIwMDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAogCS8qIERlbGwgMyBzdGFjayBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAxZjcsICJEZWxsIFhQUyBNMTczMCIsIFNUQUNfREVMTF8zU1QpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMWRkLCAiRGVsbCBEaW1lbnNpb24gRTUyMCIsIFNUQUNfREVMTF8zU1QpLApAQCAtMjE3OSwxNSArMjIwOSwxMCBAQAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMmZmLCAiRGVsbCAgICAgIiwgU1RBQ19ERUxMX0JJT1MpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMjA5LCAiRGVsbCBYUFMgMTMzMCIsIFNUQUNfREVMTF9CSU9TKSwKIAkvKiA5NjUgYmFzZWQgNSBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMzAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTIyNDAsMTkgKzIyNjUsMjUgQEAKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9IGRlbGxfOTIwNV9tNDJfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSBkZWxsXzkyMDVfbTQzX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gZGVsbF85MjA1X200NF9waW5fY29uZmlncywKKwlbU1RBQ185MjA1X0VBUERdID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTIwNV9tb2RlbHNbU1RBQ185MjA1X01PREVMU10gPSB7CisJW1NUQUNfOTIwNV9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MjA1X1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9ICJkZWxsLW00MiIsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSAiZGVsbC1tNDMiLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gImRlbGwtbTQ0IiwKKwlbU1RBQ185MjA1X0VBUERdID0gImVhcGQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjA1X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCS8qIERlbGwgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYxLAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYyLApAQCAtMjI4MywxMDEgKzIzMTQsMjQgQEAKIAkJICAgICAgIkRlbGwgSW5zcGlyb24iLCBTVEFDXzkyMDVfREVMTF9NNDQpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjgsCiAJCSAgICAgICJEZWxsIFZvc3RybyAxNTAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKKwkvKiBHYXRld2F5ICovCisJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2NSwgIkdhdGV3YXkgVDE2MTYiLCBTVEFDXzkyMDVfRUFQRCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIGludCBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkKLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7Ci0Jc3BlYy0+cGluX2NvbmZpZ3MgPSBrY2FsbG9jKHNwZWMtPm51bV9waW5zLCBzaXplb2YoKnNwZWMtPnBpbl9jb25maWdzKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGVjLT5waW5fY29uZmlncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IG5pZCA9IHNwZWMtPnBpbl9uaWRzW2ldOwotCQl1bnNpZ25lZCBpbnQgcGluX2NmZzsKLQkJCi0JCXBpbl9jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgCi0JCQlBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMHgwMCk7CQotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogcGluIG5pZCAlMi4yeCBiaW9zIHBpbiBjb25maWcgJTguOHhcbiIsCi0JCQkJCW5pZCwgcGluX2NmZyk7Ci0JCXNwZWMtPnBpbl9jb25maWdzW2ldID0gcGluX2NmZzsKLQl9Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICBoZGFfbmlkX3QgcGluX25pZCwgdW5zaWduZWQgaW50IHBpbl9jb25maWcpCi17Ci0JaW50IGk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wLAotCQkJICAgIHBpbl9jb25maWcgJiAweDAwMDAwMGZmKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwMDBmZjAwKSA+PiA4KTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJICAgIHBpbl9jb25maWcgPj4gMjQpOwotCWkgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkgICAgICAgMHgwMCk7CQotCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBwaW4gbmlkICUyLjJ4IHBpbiBjb25maWcgJTguOHhcbiIsCi0JCSAgICBwaW5fbmlkLCBpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpwaW5jZmdzKQogewogCWludCBpOwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLSAJaWYgKCFzcGVjLT5waW5fY29uZmlncykKLSAJCXJldHVybjsKKwlpZiAoIXBpbmNmZ3MpCisJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQotCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaV0sCi0JCQkJCXNwZWMtPnBpbl9jb25maWdzW2ldKTsKLX0KLQotc3RhdGljIGludCBzdGFjX3NhdmVfcGluX2NmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCAqcGlucykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JaWYgKCFwaW5zKQotCQlyZXR1cm4gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKLQlzcGVjLT5waW5fY29uZmlncyA9IGttZW1kdXAocGlucywKLQkJCQkgICAgc3BlYy0+bnVtX3BpbnMgKiBzaXplb2YoKnBpbnMpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwZWMtPnBpbl9jb25maWdzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWNfY2hhbmdlX3Bpbl9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkJICAgdW5zaWduZWQgaW50IGNmZykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaWYgKHNwZWMtPnBpbl9uaWRzW2ldID09IG5pZCkgewotCQkJc3BlYy0+cGluX2NvbmZpZ3NbaV0gPSBjZmc7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgbmlkLCBjZmcpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJCWlmIChzcGVjLT5waW5fbmlkc1tpXSAmJiBwaW5jZmdzW2ldKQorCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpXSwKKwkJCQkJCSBwaW5jZmdzW2ldKTsKIH0KIAogLyoKQEAgLTI1NjcsNyArMjUyMSw3IEBACiAJCWNvZGVjLT5udW1fcGNtcysrOwogCQlpbmZvKys7CiAJCWluZm8tPm5hbWUgPSAiU1RBQzkyeHggRGlnaXRhbCI7Ci0JCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOworCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOwogCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHN0YWM5Mnh4X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLm5pZCA9IHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkOwpAQCAtMjU4Myw4ICsyNTM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTJ4eF9nZXRfdnJlZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkgQUNfUEFSX1BJTl9DQVApOworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCXBpbmNhcCA9IChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRikgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQ7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGXzEwMCkKIAkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzEwMDsKQEAgLTI3NTksMjIgKzI3MTIsMzcgQEAKIH07CiAKIC8qIGFkZCBkeW5hbWljIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9jb250cm9sX3RlbXAoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCi0JCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCi0JCQkJICAgICBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKgorc3RhY19jb250cm9sX25ldyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKKwkJIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKIAlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKIAlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOwogCWlmICgha25ldykKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCSprbmV3ID0gKmt0ZW1wOwotCWtuZXctPmluZGV4ID0gaWR4OwogCWtuZXctPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwotCWlmICgha25ldy0+bmFtZSkKKwlpZiAoIWtuZXctPm5hbWUpIHsKKwkJLyogcm9vbGJhY2sgKi8KKwkJbWVtc2V0KGtuZXcsIDAsIHNpemVvZigqa25ldykpOworCQlzcGVjLT5rY3Rscy5hbGxvY2VkLS07CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4ga25ldzsKK30KKworc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY29udHJvbF90ZW1wKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAorCQkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAorCQkJCSAgICAgaW50IGlkeCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3ID0gc3RhY19jb250cm9sX25ldyhzcGVjLCBrdGVtcCwgbmFtZSk7CisJaWYgKCFrbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKKwlrbmV3LT5pbmRleCA9IGlkeDsKIAlrbmV3LT5wcml2YXRlX3ZhbHVlID0gdmFsOwogCXJldHVybiAwOwogfQpAQCAtMjc5Niw2ICsyNzY0LDI5IEBACiAJcmV0dXJuIHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCB0eXBlLCAwLCBuYW1lLCB2YWwpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19pbnB1dF9zcmNfdGVtcCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKKwkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAorCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCit9OworCitzdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCisJaWYgKCFzcGVjLT5udW1fYWRjcyB8fCBpbXV4LT5udW1faXRlbXMgPD0gMSkKKwkJcmV0dXJuIDA7IC8qIG5vIG5lZWQgZm9yIGlucHV0IHNvdXJjZSBjb250cm9sICovCisJa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaW5wdXRfc3JjX3RlbXAsCisJCQkJc3RhY19pbnB1dF9zcmNfdGVtcC5uYW1lKTsKKwlpZiAoIWtuZXcpCisJCXJldHVybiAtRU5PTUVNOworCWtuZXctPmNvdW50ID0gc3BlYy0+bnVtX2FkY3M7CisJcmV0dXJuIDA7Cit9CisKIC8qIGNoZWNrIHdoZXRoZXIgdGhlIGxpbmUtaW5wdXQgY2FuIGJlIHVzZWQgYXMgbGluZS1vdXQgKi8KIHN0YXRpYyBoZGFfbmlkX3QgY2hlY2tfbGluZV9vdXRfc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjgwNyw3ICsyNzk4LDcgQEAKIAlpZiAoY2ZnLT5saW5lX291dF90eXBlICE9IEFVVE9fUElOX0xJTkVfT1VUKQogCQlyZXR1cm4gMDsKIAluaWQgPSBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTElORV07Ci0JcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfT1VUKQogCQlyZXR1cm4gbmlkOwogCXJldHVybiAwOwpAQCAtMjgyNiwxMiArMjgxNywxMSBAQAogCW1pY19waW4gPSBBVVRPX1BJTl9NSUM7CiAJZm9yICg7OykgewogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW21pY19waW5dOwotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkvKiBzb21lIGxhcHRvcHMgaGF2ZSBhbiBpbnRlcm5hbCBhbmFsb2cgbWljcm9waG9uZQogCQkgKiB3aGljaCBjYW4ndCBiZSB1c2VkIGFzIGEgb3V0cHV0ICovCiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkgewotCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX09VVCkKIAkJCQlyZXR1cm4gbmlkOwogCQl9CkBAIC0yODc5LDggKzI4NjksNyBAQAogCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKIAkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CiAJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKLQkJd2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvbm5bal0sCi0JCQkJCSAgIEFDX1BBUl9BVURJT19XSURHRVRfQ0FQKTsKKwkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNvbm5bal0pOwogCQl3dHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCQkvKiB3ZSBjaGVjayBvbmx5IGFuYWxvZyBvdXRwdXRzICovCiAJCWlmICh3dHlwZSAhPSBBQ19XSURfQVVEX09VVCB8fCAod2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQpAQCAtMjg5NSw2ICsyODg0LDE2IEBACiAJCQlyZXR1cm4gY29ubltqXTsKIAkJfQogCX0KKwkvKiBpZiBhbGwgREFDcyBhcmUgYWxyZWFkeSBhc3NpZ25lZCwgY29ubmVjdCB0byB0aGUgcHJpbWFyeSBEQUMgKi8KKwlpZiAoY29ubl9sZW4gPiAxKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7CisJCQlpZiAoY29ubltqXSA9PSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSkgeworCQkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGopOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yOTM1LDYgKzI5MzQsMjYgQEAKIAkJYWRkX3NwZWNfZGFjcyhzcGVjLCBkYWMpOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKKwkJaWYgKGRhYykgeworCQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCisJCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOworCQkJZWxzZQorCQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKKwkJfQorCQlzcGVjLT5ocF9kYWNzW2ldID0gZGFjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7CisJCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zW2ldOworCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7CisJCWlmIChkYWMpCisJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7CisJCXNwZWMtPnNwZWFrZXJfZGFjc1tpXSA9IGRhYzsKKwl9CisKIAkvKiBhZGQgbGluZS1pbiBhcyBvdXRwdXQgKi8KIAluaWQgPSBjaGVja19saW5lX291dF9zd2l0Y2goY29kZWMpOwogCWlmIChuaWQpIHsKQEAgLTI5NjIsMjYgKzI5ODEsNiBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7Ci0JCW5pZCA9IGNmZy0+aHBfcGluc1tpXTsKLQkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOwotCQlpZiAoZGFjKSB7Ci0JCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKLQkJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBkYWM7Ci0JCQllbHNlCi0JCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOwotCQl9Ci0JCXNwZWMtPmhwX2RhY3NbaV0gPSBkYWM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbaV07Ci0JCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKLQkJaWYgKGRhYykKLQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKLQkJc3BlYy0+c3BlYWtlcl9kYWNzW2ldID0gZGFjOwotCX0KLQogCXNuZF9wcmludGQoInN0YWM5Mnh4OiBkYWNfbmlkcz0lZCAoMHgleC8weCV4LzB4JXgvMHgleC8weCV4KVxuIiwKIAkJICAgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MsCiAJCSAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLApAQCAtMjk5NCwyNCArMjk5Myw0NyBAQAogfQogCiAvKiBjcmVhdGUgdm9sdW1lIGNvbnRyb2wvc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcHJlZnggdHlwZSAqLwotc3RhdGljIGludCBjcmVhdGVfY29udHJvbHMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwgaGRhX25pZF90IG5pZCwgaW50IGNocykKK3N0YXRpYyBpbnQgY3JlYXRlX2NvbnRyb2xzX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICAgIGludCBpZHgsIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCiB7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAljaGFyIG5hbWVbMzJdOwogCWludCBlcnI7CiAKKwlpZiAoIXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQpIHsKKwkJdW5zaWduZWQgaW50IGNhcHMsIHN0ZXAsIG51bXMsIGRiX3NjYWxlOworCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CisJCXN0ZXAgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+CisJCQlBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOworCQlzdGVwID0gKHN0ZXAgKyAxKSAqIDI1OyAvKiBpbiAuMDFkQiB1bml0ICovCisJCW51bXMgPSAoY2FwcyAmIEFDX0FNUENBUF9OVU1fU1RFUFMpID4+CisJCQlBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUOworCQlkYl9zY2FsZSA9IG51bXMgKiBzdGVwOworCQkvKiBpZiBkQiBzY2FsZSBpcyBvdmVyIC02NGRCLCBhbmQgZmluZXIgZW5vdWdoLAorCQkgKiBsZXQncyByZWR1Y2UgaXQgdG8gaGFsZgorCQkgKi8KKwkJaWYgKGRiX3NjYWxlID4gNjQwMCAmJiBudW1zID49IDB4MWYpCisJCQlzcGVjLT52b2x1bWVfb2Zmc2V0ID0gbnVtcyAvIDI7CisJCXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQgPSAxOworCX0KKwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywgU1RBQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7CisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIGlkeCwgbmFtZSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQsCisJCQkJCXNwZWMtPnZvbHVtZV9vZmZzZXQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgaWR4LCBuYW1lLAogCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBjcmVhdGVfY29udHJvbHMoY29kZWMsIHBmeCwgbmlkLCBjaHMpIFwKKwljcmVhdGVfY29udHJvbHNfaWR4KGNvZGVjLCBwZngsIDAsIG5pZCwgY2hzKQorCiBzdGF0aWMgaW50IGFkZF9zcGVjX2RhY3Moc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCiB7CiAJaWYgKHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID4gNCkgewpAQCAtMzAzNyw0MCArMzA1OSwzMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGlzX3VuaXF1ZV9kYWMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dHMgIT0gMSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHNwZWMtPm11bHRpb3V0LmhwX25pZCA9PSBuaWQpCi0JCXJldHVybiAwOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWQpOyBpKyspCi0JCWlmIChzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkW2ldID09IG5pZCkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKKy8qIENyZWF0ZSBvdXRwdXQgY29udHJvbHMKKyAqIFRoZSBtaXhlciBlbGVtZW50cyBhcmUgbmFtZWQgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiB0eXBlIChBVVRPX1BJTl9YWFhfT1VUKQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9vdXRzLAorCQkJCSBjb25zdCBoZGFfbmlkX3QgKnBpbnMsCisJCQkJIGNvbnN0IGhkYV9uaWRfdCAqZGFjX25pZHMsCisJCQkJIGludCB0eXBlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkID0gMDsKKwloZGFfbmlkX3QgbmlkOwogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgaW50IHdpZF9jYXBzOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzICYmIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOyBpKyspIHsKLQkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07Ci0JCWlmIChpID09IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX291dHMgJiYgaSA8IEFSUkFZX1NJWkUoY2huYW1lKTsgaSsrKSB7CisJCW5pZCA9IGRhY19uaWRzW2ldOworCQlpZiAoIW5pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAodHlwZSAhPSBBVVRPX1BJTl9IUF9PVVQgJiYgaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkNlbnRlciIsIG5pZCwgMSk7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbmlkLCAyKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIG5pZCwgMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC0zMDg2LDIzICszMTAwLDQ3IEBACiAJCQl9CiAKIAkJfSBlbHNlIHsKLQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjaG5hbWVbaV07Ci0JCQkvKiBpZiBpdCdzIGEgc2luZ2xlIERBQywgYXNzaWduIGEgYmV0dGVyIG5hbWUgKi8KLQkJCWlmICghaSAmJiBpc191bmlxdWVfZGFjKHNwZWMsIG5pZCkpIHsKLQkJCQlzd2l0Y2ggKGNmZy0+bGluZV9vdXRfdHlwZSkgewotCQkJCWNhc2UgQVVUT19QSU5fSFBfT1VUOgotCQkJCQluYW1lID0gIkhlYWRwaG9uZSI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6Ci0JCQkJCW5hbWUgPSAiU3BlYWtlciI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlpbnQgaWR4OworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIEFVVE9fUElOX0hQX09VVDoKKwkJCQluYW1lID0gIkhlYWRwaG9uZSI7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6CisJCQkJbmFtZSA9ICJTcGVha2VyIjsKKwkJCQlpZHggPSBpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQluYW1lID0gY2huYW1lW2ldOworCQkJCWlkeCA9IDA7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgbmFtZSwgbmlkLCAzKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9sc19pZHgoY29kZWMsIG5hbWUsIGlkeCwgbmlkLCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CisJCQlpZiAodHlwZSA9PSBBVVRPX1BJTl9IUF9PVVQgJiYgIXNwZWMtPmhwX2RldGVjdCkgeworCQkJCXdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW5zW2ldKTsKKwkJCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKKwkJCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKKwkJCX0KIAkJfQogCX0KKwlyZXR1cm4gMDsKK30KKworLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KK3N0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgZXJyOworCisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zLAorCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkcywKKwkJCQkgICAgY2ZnLT5saW5lX291dF90eXBlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjZmctPmhwX291dHMgPiAxICYmIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9MSU5FX09VVCkgewogCQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLApAQCAtMzEzNyw0MCArMzE3NSwxOCBAQAogCQkJCQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkOwotCWludCBpLCBlcnIsIG51bXM7CisJaW50IGVycjsKIAotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQlzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0gewotCQkJIkhlYWRwaG9uZSIsICJIZWFkcGhvbmUyIiwgIkhlYWRwaG9uZTMiLAotCQl9OwotCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNmZy0+aHBfcGluc1tpXSk7Ci0JCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQotCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5ocF9kYWNzW2ldOwotCQlpZiAoIW5pZCkKLQkJCWNvbnRpbnVlOwotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgcGZ4c1tudW1zKytdLCBuaWQsIDMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7Ci0JCQkiU3BlYWtlciIsICJFeHRlcm5hbCBTcGVha2VyIiwgIlNwZWFrZXIyIiwKLQkJfTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5zcGVha2VyX2RhY3NbaV07Ci0JCWlmICghbmlkKQotCQkJY29udGludWU7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCBwZnhzW251bXMrK10sIG5pZCwgMyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmhwX291dHMsIGNmZy0+aHBfcGlucywKKwkJCQkgICAgc3BlYy0+aHBfZGFjcywgQVVUT19QSU5fSFBfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5zcGVha2VyX291dHMsIGNmZy0+c3BlYWtlcl9waW5zLAorCQkJCSAgICBzcGVjLT5zcGVha2VyX2RhY3MsIEFVVE9fUElOX1NQRUFLRVJfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzc5LDExICszMzk1LDcgQEAKIAkJdW5zaWduZWQgaW50IHdjYXBzOwogCQl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsCi0JCQkJCSAgICAgIHNwZWMtPmRtaWNfbmlkc1tpXSwKLQkJCQkJICAgICAgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCSAgICAgIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIApAQCAtMzUwNyw2ICszNTE5LDcgQEAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBkaWdfb3V0LCBoZGFfbmlkX3QgZGlnX2luKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGhwX3N3YXAgPSAwOwogCWludCBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsCkBAIC0zNTE2LDcgKzM1MjksNiBAQAogCWlmICghIHNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBwaW4gY29uZmlnICovCiAKLSNpZiAwIC8qIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLwogCS8qIElmIHdlIGhhdmUgbm8gcmVhbCBsaW5lLW91dCBwaW4gYW5kIG11bHRpcGxlIGhwLW91dHMsIEhQcyBzaG91bGQKIAkgKiBiZSBzZXQgdXAgYXMgbXVsdGktY2hhbm5lbCBvdXRwdXRzLgogCSAqLwpAQCAtMzUzNSw4ICszNTQ3LDggQEAKIAkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSBzcGVjLT5hdXRvY2ZnLmhwX291dHM7CiAJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKIAkJc3BlYy0+YXV0b2NmZy5ocF9vdXRzID0gMDsKKwkJaHBfc3dhcCA9IDE7CiAJfQotI2VuZGlmIC8qIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLwogCWlmIChzcGVjLT5hdXRvY2ZnLm1vbm9fb3V0X3BpbikgewogCQlpbnQgZGlyID0gZ2V0X3djYXBzKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLm1vbm9fb3V0X3BpbikgJgogCQkJKEFDX1dDQVBfT1VUX0FNUCB8IEFDX1dDQVBfSU5fQU1QKTsKQEAgLTM2MjksMTIgKzM2NDEsMTkgQEAKICNlbmRpZgogCiAJZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfaHBfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwotCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOworCS8qIEFsbCBvdXRwdXQgcGFyc2luZyBkb25lLCBub3cgcmVzdG9yZSB0aGUgc3dhcHBlZCBocCBwaW5zICovCisJaWYgKGhwX3N3YXApIHsKKwkJbWVtY3B5KHNwZWMtPmF1dG9jZmcuaHBfcGlucywgc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zLAorCQkgICAgICAgc2l6ZW9mKHNwZWMtPmF1dG9jZmcuaHBfcGlucykpOworCQlzcGVjLT5hdXRvY2ZnLmhwX291dHMgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0czsKKwkJc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlID0gQVVUT19QSU5fSFBfT1VUOworCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyA9IDA7CisJfQogCisJZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzY2MywxMSArMzY4MiwxNSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwllcnIgPSBzdGFjOTJ4eF9hZGRfaW5wdXRfc291cmNlKHNwZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCWlmIChzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPiAyKQogCQlzcGVjLT5zdXJyX3N3aXRjaCA9IDE7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfb3V0OwogCWlmIChkaWdfaW4gJiYgc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gZGlnX2luOwpAQCAtMzczMCw5ICszNzUzLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzICYmIGxmZV9waW4gPT0gMHgwOyBpKyspIHsKIAkJCWhkYV9uaWRfdCBwaW4gPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CiAJCQl1bnNpZ25lZCBpbnQgZGVmY2ZnOwotCQkJZGVmY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW4sIDAsCi0JCQkJCQkgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCQkgMHgwMCk7CisJCQlkZWZjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbik7CiAJCQlpZiAoZ2V0X2RlZmNmZ19kZXZpY2UoZGVmY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIpIHsKIAkJCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbik7CiAJCQkJd2NhcHMgJj0gKEFDX1dDQVBfU1RFUkVPIHwgQUNfV0NBUF9PVVRfQU1QKTsKQEAgLTM3NDUsNyArMzc2Niw3IEBACiAJfQogCiAJaWYgKGxmZV9waW4pIHsKLQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsICJMRkUiLCBsZmVfcGluLCAxKTsKKwkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCAiTEZFIiwgbGZlX3BpbiwgMSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNzc2LDcgKzM3OTcsMTEgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJZXJyID0gc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzcGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDB4MDU7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IDB4MDQ7CkBAIC0zODMyLDggKzM4NTcsNyBAQAogI2lmZGVmIENPTkZJR19TTkRfSkFDSwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IHNpZ21hdGVsX2phY2sgKmphY2s7Ci0JaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCi0JCQkwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCWludCBjb25uZWN0aXZpdHkgPSBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpOwogCWNoYXIgbmFtZVszMl07CiAKQEAgLTM5NDgsNiArMzk3MiwzNiBAQAogc3RhdGljIHZvaWQgc3RhY190b2dnbGVfcG93ZXJfbWFwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCSAgaW50IGVuYWJsZSk7CiAKKy8qIG92ZXJyaWRlIHNvbWUgaGludHMgZnJvbSB0aGUgaHdkZXAgZW50cnkgKi8KK3N0YXRpYyB2b2lkIHN0YWNfc3RvcmVfaGludHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwljb25zdCBjaGFyICpwOworCWludCB2YWw7CisKKwl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJocF9kZXRlY3QiKTsKKwlpZiAodmFsID49IDApCisJCXNwZWMtPmhwX2RldGVjdCA9IHZhbDsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fbWFzayIpOworCWlmIChwKSB7CisJCXNwZWMtPmdwaW9fbWFzayA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApOworCQlzcGVjLT5lYXBkX21hc2sgPSBzcGVjLT5ncGlvX2RpciA9IHNwZWMtPmdwaW9fZGF0YSA9CisJCQlzcGVjLT5ncGlvX21hc2s7CisJfQorCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19kaXIiKTsKKwlpZiAocCkKKwkJc3BlYy0+Z3Bpb19kaXIgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGF0YSIpOworCWlmIChwKQorCQlzcGVjLT5ncGlvX2RhdGEgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImVhcGRfbWFzayIpOworCWlmIChwKQorCQlzcGVjLT5lYXBkX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJlYXBkX3N3aXRjaCIpOworCWlmICh2YWwgPj0gMCkKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSB2YWw7Cit9CisKIHN0YXRpYyBpbnQgc3RhYzkyeHhfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMzk2NCw2ICs0MDE4LDkgQEAKIAkJCQlzcGVjLT5hZGNfbmlkc1tpXSwgMCwKIAkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwogCisJLyogb3ZlcnJpZGUgc29tZSBoaW50cyAqLworCXN0YWNfc3RvcmVfaGludHMoY29kZWMpOworCiAJLyogc2V0IHVwIEdQSU8gKi8KIAlncGlvID0gc3BlYy0+Z3Bpb19kYXRhOwogCS8qIHR1cm4gb24gRUFQRCBzdGF0aWNhbGx5IHdoZW4gc3BlYy0+ZWFwZF9zd2l0Y2ggaXNuJ3Qgc2V0LgpAQCAtNDAxMyw4ICs0MDcwLDcgQEAKIAkJCQkJCQkJIHBpbmN0bCk7CiAJCQkJfQogCQkJfQotCQkJY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQljb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChjb25mKSAhPSBBQ19KQUNLX1BPUlRfRklYRUQpIHsKIAkJCQllbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLAogCQkJCQkJICBTVEFDX0lOU0VSVF9FVkVOVCk7CkBAIC00MDI2LDggKzQwODIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fZG1pY3M7IGkrKykKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBzcGVjLT5kbWljX25pZHNbaV0sCiAJCQkJCUFDX1BJTkNUTF9JTl9FTik7Ci0JaWYgKGNmZy0+ZGlnX291dF9waW4pCi0JCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfb3V0X3BpbiwKKwlpZiAoY2ZnLT5kaWdfb3V0X3BpbnNbMF0pCisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfb3V0X3BpbnNbMF0sCiAJCQkJCSBBQ19QSU5DVExfT1VUX0VOKTsKIAlpZiAoY2ZnLT5kaWdfaW5fcGluKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX2luX3BpbiwKQEAgLTQwNTUsOCArNDExMSw3IEBACiAJCQlzdGFjX3RvZ2dsZV9wb3dlcl9tYXAoY29kZWMsIG5pZCwgMSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQlkZWZfY29uZiA9IGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZik7CiAJCS8qIHNraXAgYW55IHBvcnRzIHRoYXQgZG9uJ3QgaGF2ZSBqYWNrcyBzaW5jZSBwcmVzZW5jZQogIAkJICogZGV0ZWN0aW9uIGlzIHVzZWxlc3MgKi8KQEAgLTQxMTAsNyArNDE2NSw2IEBACiAJaWYgKCEgc3BlYykKIAkJcmV0dXJuOwogCi0Ja2ZyZWUoc3BlYy0+cGluX2NvbmZpZ3MpOwogCXN0YWM5Mnh4X2ZyZWVfamFja3MoY29kZWMpOwogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5ldmVudHMpOwogCkBAIC00MTIxLDcgKzQxNzUsOSBAQAogc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQl1bnNpZ25lZCBpbnQgZmxhZykKIHsKLQl1bnNpZ25lZCBpbnQgcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAorCXVuc2lnbmVkIGludCBvbGRfY3RsLCBwaW5fY3RsOworCisJcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAogCQkJMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwKTsKIAogCWlmIChwaW5fY3RsICYgQUNfUElOQ1RMX0lOX0VOKSB7CkBAIC00MTM1LDE0ICs0MTkxLDE3IEBACiAJCQlyZXR1cm47CiAJfQogCisJb2xkX2N0bCA9IHBpbl9jdGw7CiAJLyogaWYgc2V0dGluZyBwaW4gZGlyZWN0aW9uIGJpdHMsIGNsZWFyIHRoZSBjdXJyZW50CiAJICAgZGlyZWN0aW9uIGJpdHMgZmlyc3QgKi8KIAlpZiAoZmxhZyAmIChBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKSkKIAkJcGluX2N0bCAmPSB+KEFDX1BJTkNUTF9JTl9FTiB8IEFDX1BJTkNUTF9PVVRfRU4pOwogCQotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCXBpbl9jdGwgfCBmbGFnKTsKKwlwaW5fY3RsIHw9IGZsYWc7CisJaWYgKG9sZF9jdGwgIT0gcGluX2N0bCkKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICBwaW5fY3RsKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhYzkyeHhfcmVzZXRfcGluY3RsKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLApAQCAtNDE1MCw5ICs0MjA5LDEwIEBACiB7CiAJdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAotCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJcGluX2N0bCAmIH5mbGFnKTsKKwlpZiAocGluX2N0bCAmIGZsYWcpCisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgcGluX2N0bCAmIH5mbGFnKTsKIH0KIAogc3RhdGljIGludCBnZXRfcGluX3ByZXNlbmNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQpAQCAtNDQxNSw3ICs0NDc1LDYgQEAKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0Jc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjKTsKIAlzdGFjOTJ4eF9pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKQEAgLTQ0MjYsNiArNDQ4NSwzNyBAQAogCXJldHVybiAwOwogfQogCisKKy8qCisgKiB1c2luZyBwb3dlciBjaGVjayBmb3IgY29udHJvbGxpbmcgbXV0ZSBsZWQgb2YgSFAgSERYIG5vdGVib29rcworICogY2hlY2sgZm9yIG11dGUgc3RhdGUgb25seSBvbiBTcGVha2VycyAobmlkID0gMHgxMCkKKyAqCisgKiBGb3IgdGhpcyBmZWF0dXJlIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgaXMgbmVlZGVkLCBvdGhlcndpc2UKKyAqIHRoZSBMRUQgaXMgTk9UIHdvcmtpbmcgcHJvcGVybHkgIQorICovCisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IHN0YWM5Mnh4X2hwX2hkeF9jaGVja19wb3dlcl9zdGF0dXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChuaWQgPT0gMHgxMCkgeworCQlpZiAoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBIREFfT1VUUFVULCAwKSAmCisJCSAgICBIREFfQU1QX01VVEUpCisJCQlzcGVjLT5ncGlvX2RhdGEgJj0gfjB4MDg7ICAvKiBvcmFuZ2UgKi8KKwkJZWxzZQorCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IDB4MDg7ICAgLyogd2hpdGUgKi8KKworCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCisJCQkgICAgICBzcGVjLT5ncGlvX2RpciwKKwkJCSAgICAgIHNwZWMtPmdwaW9fZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdGFjOTJ4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQ0NjQsMTYgKzQ1NTQsMTEgQEAKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjAwX01PREVMUywKIAkJCQkJCQlzdGFjOTIwMF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyMDBfY2ZnX3RibCk7Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjAwLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCQkgc3RhYzkyMDBfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsKQEAgLTQ1NDEsMTcgKzQ2MjYsMTIgQEAKIAkJCQkJCQlzdGFjOTI1eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyNXhfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjV4LCIKIAkJCQkgICAgICAidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjV4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CkBAIC00NjI5LDE3ICs0NzA5LDEyIEBACiAJCQkJCQkJc3RhYzkyaGQ3M3h4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDczeHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhENzNYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDczeHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweDBhLAogCQkJY29ubiwgU1RBQzkySEQ3M19EQUNfQ09VTlQgKyAyKSAtIDE7CkBAIC00NjUzLDE0ICs0NzI4LDE4IEBACiAJY2FzZSAweDM6IC8qIDYgQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF82Y2hfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDczeHhfNmNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2s7CiAJCWJyZWFrOwogCWNhc2UgMHg0OiAvKiA4IENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfOGNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzhjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfOGNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NTogLyogMTAgQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF8xMGNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzEwY2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzEwY2hfbG9vcGJhY2s7CisJCWJyZWFrOwogCX0KIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCkBAIC00Njk5LDE4ICs0Nzc4LDE4IEBACiAJCQlzcGVjLT5pbml0ID0gZGVsbF9tNl9jb3JlX2luaXQ7CiAJCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJCWNhc2UgU1RBQ19ERUxMX002X0FNSUM6IC8qIEFuYWxvZyBNaWNzICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMDsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIFNUQUNfREVMTF9NNl9ETUlDOiAvKiBEaWdpdGFsIE1pY3MgKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAxOwogCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAyOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RBQ19ERUxMX002X0JPVEg6IC8qIEJvdGggKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMTsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMjsKIAkJCWJyZWFrOwpAQCAtNDc3Myw2ICs0ODUyLDcgQEAKIAloZGFfbmlkX3QgY29ubltTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDFdOwogCWludCBlcnI7CiAJaW50IG51bV9kYWNzOworCWhkYV9uaWRfdCBuaWQ7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQ3OTEsMTUgKzQ4NzEsNiBAQAogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3B3cl9uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCi0KLQkvKiBzZXQgcG9ydCAweGUgdG8gc2VsZWN0IHRoZSBsYXN0IERBQwotCSAqLwotCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIDB4MGUsCi0JCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOwotCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhlLCAwLAotCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgbnVtX2RhY3MpOwotCiAJc3BlYy0+aW5pdCA9IHN0YWM5MmhkODN4eHhfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ4M3h4eF9taXhlcjsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9waW5fbmlkcyk7CkBAIC00ODE0LDE3ICs0ODg1LDEyIEBACiAJCQkJCQkJc3RhYzkyaGQ4M3h4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ4M3h4eF9jZmdfdGJsKTsKIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKIAkJCSIgU1RBQzkySEQ4M1hYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDgzeHh4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDExMWQ3NjA0OgpAQCAtNDg1MSw2ICs0OTE3LDIzIEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIFNUQUNfREVMTF9TMTQ6CisJCW5pZCA9IDB4ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmlkID0gMHhlOworCQlicmVhazsKKwl9CisKKwludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsCisJCQkJY29ubiwgU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxKSAtIDE7CisKKwkvKiBzZXQgcG9ydCBYIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKKwkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgbnVtX2RhY3MpOworCiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAogCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gc3RhYzkyaGRfcHJvY19ob29rOwpAQCAtNDg1OCw3ICs0OTQxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXggPSB7CitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJBbmFsb2cgSW5wdXRzIiwgMHgwMCB9LAorCQl7ICJEaWdpdGFsIE1pYyAxIiwgMHgwMiB9LAorCQl7ICJEaWdpdGFsIE1pYyAyIiwgMHgwMyB9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKQEAgLTQ4NjgsMTAgKzQ5NjAsNjcgQEAKIAl9CiB9OwogCisvKiBnZXQgdGhlIHBpbiBjb25uZWN0aW9uIChmaXhlZCwgbm9uZSwgZXRjKSAqLworc3RhdGljIHVuc2lnbmVkIGludCBzdGFjX2dldF9kZWZjZmdfY29ubmVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGlkeCkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBjZmc7CisKKwljZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHNwZWMtPnBpbl9uaWRzW2lkeF0pOworCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKTsKK30KKworc3RhdGljIGludCBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIGhkYV9uaWRfdCAqbmlkcywgaW50IG51bV9uaWRzKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGlkeCwgbnVtOworCXVuc2lnbmVkIGludCBkZWZfY29uZjsKKworCWZvciAobnVtID0gMDsgbnVtIDwgbnVtX25pZHM7IG51bSsrKSB7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgc3BlYy0+bnVtX3BpbnM7IGlkeCsrKQorCQkJaWYgKHNwZWMtPnBpbl9uaWRzW2lkeF0gPT0gbmlkc1tudW1dKQorCQkJCWJyZWFrOworCQlpZiAoaWR4ID49IHNwZWMtPm51bV9waW5zKQorCQkJYnJlYWs7CisJCWRlZl9jb25mID0gc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3QoY29kZWMsIGlkeCk7CisJCWlmIChkZWZfY29uZiA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3NtdXhlcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICBoZGFfbmlkX3QgZGlnMHBpbikKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNwZWMtPm51bV9waW5zOyBpZHgrKykKKwkJaWYgKHNwZWMtPnBpbl9uaWRzW2lkeF0gPT0gZGlnMHBpbikKKwkJCWJyZWFrOworCWlmICgoaWR4ICsgMikgPj0gc3BlYy0+bnVtX3BpbnMpCisJCXJldHVybiAwOworCisJLyogZGlnMXBpbiBjYXNlICovCisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHggKyAxKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDI7CisKKwkvKiBkaWcwcGluICsgZGlnMnBpbiBjYXNlICovCisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHggKyAyKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDI7CisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHgpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkNzFieHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CisJc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKIAlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgbmRtaWNfbmlkcyA9IDA7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQ4NzksMjcgKzUwMjgsMzIgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwotCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzKTsKKwlzcGVjLT5udW1fcGlucyA9IFNUQUM5MkhENzFCWFhfTlVNX1BJTlM7CisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDExMWQ3NmI2OgorCWNhc2UgMHgxMTFkNzZiNzoKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0OworCQlicmVhazsKKwljYXNlIDB4MTExZDc2MDM6CisJY2FzZSAweDExMWQ3NjA4OgorCQkvKiBPbiA5MkhENzVCeCAweDI3IGlzbid0IGEgcGluIG5pZCAqLworCQlzcGVjLT5udW1fcGlucy0tOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydDsKKwl9CiAJc3BlYy0+bnVtX3B3cnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfcHdyX25pZHMpOwotCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkczsKLQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXgsCi0JCQlzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4KSk7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsCiAJCQkJCQkJU1RBQ185MkhENzFCWFhfTU9ERUxTLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhENzFCWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPiBTVEFDXzkySEQ3MUJYWF9SRUYpIHsKIAkJLyogR1BJTzAgPSBFQVBEICovCkBAIC00OTA4LDE2ICs1MDYyLDM0IEBACiAJCXNwZWMtPmdwaW9fZGF0YSA9IDB4MDE7CiAJfQogCisJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHM7CisJc3BlYy0+ZG11eF9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHM7CisKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2YjY6IC8qIDQgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNzoKKwkJdW5tdXRlX2luaXQrKzsKKwkJLyogZmFsbHRocnUgKi8KIAljYXNlIDB4MTExZDc2YjQ6IC8qIDYgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNToKKwkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIpKTsKIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOworCQlpZiAoc3BlYy0+bnVtX2RtaWNzKSB7CisJCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CisJCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwODogLyogNSBQb3J0IHdpdGggQW5hbG9nIE1peGVyICovCisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOworCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcy0tOwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfSFBfTTQ6CiAJCQkvKiBFbmFibGUgVlJFRiBwb3dlciBzYXZpbmcgb24gR1BJTzEgZGV0ZWN0ICovCkBAIC00OTQ0LDcgKzUxMTYsMTUgQEAKIAogCQkvKiBkaXNhYmxlIFZTVyAqLwogCQlzcGVjLT5pbml0ID0gJnN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtIRF9ESVNBQkxFX1BPUlRGXTsKLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHhmLCAweDQwZjAwMGYwKTsKKwkJdW5tdXRlX2luaXQrKzsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBmLCAweDQwZjAwMGYwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDE5LCAweDQwZjAwMGYzKTsKKwkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHNbU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxXSA9IDA7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxKTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAyOwogCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDM6IC8qIDYgUG9ydCB3aXRoIEFuYWxvZyBNaXhlciAqLwogCQlpZiAoKGNvZGVjLT5yZXZpc2lvbl9pZCAmIDB4ZikgPT0gMSkKQEAgLTQ5NTQsMTIgKzUxMzQsMjMgQEAKIAkJc3BlYy0+bnVtX3B3cnMgPSAwOwogCQkvKiBmYWxsdGhydSAqLwogCWRlZmF1bHQ6CisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOwogCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOworCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCW5kbWljX25pZHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDE7CiAJfQogCisJaWYgKGdldF93Y2Fwcyhjb2RlYywgMHhhKSAmIEFDX1dDQVBfSU5fQU1QKQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlX2NhY2hlKGNvZGVjLCB1bm11dGVfaW5pdCk7CisKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3MWJ4eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NTA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIApAQCAtNDk2NywxOCArNTE1OCwxNyBAQAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyNjsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfbXV4X25pZHM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTJoZDcxYnh4X2FkY19uaWRzOwotCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOwotCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOwogCXNwZWMtPnNtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfc211eF9uaWRzOwogCXNwZWMtPnB3cl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9wd3JfbmlkczsKIAogCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9tdXhfbmlkcyk7CiAJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfYWRjX25pZHMpOworCXNwZWMtPm51bV9zbXV4ZXMgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoY29kZWMsIDB4MWUpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAljYXNlIFNUQUNfSFBfTTQ6CiAJCS8qIGVuYWJsZSBpbnRlcm5hbCBtaWNyb3Bob25lICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGUsIDB4MDE4MTMwNDApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGUsIDB4MDE4MTMwNDApOwogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIDB4MGUsCiAJCQlBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfVlJFRl84MCk7CiAJCS8qIGZhbGx0aHJ1ICovCkBAIC00OTkzLDE5ICs1MTgzLDM2IEBACiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAwOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3BlYy0+bnVtX2RtaWNzID0gU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1M7Ci0JCXNwZWMtPm51bV9zbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfc211eF9uaWRzKTsKLQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCWNhc2UgU1RBQ19IUF9EVjU6CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZCwgMHg5MDE3MDAxMCk7CisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgMHgwZCwgQUNfUElOQ1RMX09VVF9FTik7CisJCWJyZWFrOworCWNhc2UgU1RBQ19IUF9IRFg6CisJCXNwZWMtPm51bV9kbWljcyA9IDE7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOworCQlzcGVjLT5udW1fc211eGVzID0gMTsKKwkJLyoKKwkJICogRm9yIGNvbnRyb2xsaW5nIE1VVEUgTEVEIG9uIEhQIEhEWDE2L0hEWDE4IG5vdGVib29rcywKKwkJICogdGhlIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgaXMgbmVlZGVkIHRvIGJlIHNldC4KKwkJICovCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCQkvKiBvcmFuZ2Uvd2hpdGUgbXV0ZSBsZWQgb24gR1BJTzMsIG9yYW5nZT0wLCB3aGl0ZT0xICovCisJCXNwZWMtPmdwaW9fbWFzayB8PSAweDA4OworCQlzcGVjLT5ncGlvX2RpciAgfD0gMHgwODsKKwkJc3BlYy0+Z3Bpb19kYXRhIHw9IDB4MDg7ICAvKiBzZXQgdG8gd2hpdGUgKi8KKworCQkvKiByZWdpc3RlciBjaGVja19wb3dlcl9zdGF0dXMgY2FsbGJhY2suICovCisJCWNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzID0KKwkJICAgIHN0YWM5Mnh4X2hwX2hkeF9jaGVja19wb3dlcl9zdGF0dXM7CisjZW5kaWYJCisJCWJyZWFrOwogCX07CiAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCWlmIChzcGVjLT5kaW5wdXRfbXV4KQotCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyArPQotCQkJc3BlYy0+bnVtX2RtaWNzIC0KLQkJCQkoQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxKTsKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0gc3BlYy0+bnVtX2RtaWNzIC0gbmRtaWNfbmlkczsKIAotCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDIxLCAweDIzKTsKKwllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMCk7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhkYV9jb2RlYzogTm8gYXV0by1jb25maWcgaXMgIgpAQCAtNTA4MCwxNyArNTI4NywxMiBAQAogCX0KIAogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIyeCwgIgogCQkJInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyMnhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjJ4X2FkY19uaWRzOwogCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyMnhfbXV4X25pZHM7CkBAIC01MTQxLDI0ICs1MzQzLDE5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTI3eF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTI3eF9waW5fbmlkczsKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjdYX01PREVMUywKIAkJCQkJCQlzdGFjOTI3eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyN3hfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDAgfHwgIXN0YWM5Mjd4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSkgewotCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKLQkJCQkgICAgIlNUQUM5Mjd4LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQorCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCisJCQkgICAgIlNUQUM5Mjd4LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTI3eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMzsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5Mjd4X2FkY19uaWRzOwpAQCAtNTE4NywxNSArNTM4NCwxNSBAQAogCQljYXNlIDB4MTAyODAyMDk6CiAJCWNhc2UgMHgxMDI4MDIyZToKIAkJCS8qIGNvcnJlY3QgdGhlIGRldmljZSBmaWVsZCB0byBTUERJRiBvdXQgKi8KLQkJCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MjEsIDB4MDE0NDIwNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDIxLCAweDAxNDQyMDcwKTsKIAkJCWJyZWFrOwogCQl9OwogCQkvKiBjb25maWd1cmUgdGhlIGFuYWxvZyBtaWNyb3Bob25lIG9uIHNvbWUgbGFwdG9wcyAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBjLCAweDkwYTc5MTMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBjLCAweDkwYTc5MTMwKTsKIAkJLyogY29ycmVjdCB0aGUgZnJvbnQgb3V0cHV0IGphY2sgYXMgYSBocCBvdXQgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZiwgMHgwMjI3MDExZik7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgMHgwMjI3MDExZik7CiAJCS8qIGNvcnJlY3QgdGhlIGZyb250IGlucHV0IGphY2sgYXMgYSBtaWMgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZSwgMHgwMmE3OTEzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZSwgMHgwMmE3OTEzMCk7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBTVEFDX0RFTExfM1NUOgogCQkvKiBHUElPMiBIaWdoID0gRW5hYmxlIEVBUEQgKi8KQEAgLTUyMjIsNiArNTQxOSw3IEBACiAJfQogCiAJc3BlYy0+bnVtX3B3cnMgPSAwOworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTI3eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NDA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIAlzcGVjLT5lYXBkX3N3aXRjaCA9IDE7CkBAIC01MjgwLDE2ICs1NDc4LDExIEBACiAJCQkJCQkJc3RhYzkyMDVfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjA1X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwNSwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjA1X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDIzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyMDVfYWRjX25pZHM7CkBAIC01MzA2LDE3ICs1NDk5LDIwIEBACiAKIAlzcGVjLT5pbml0ID0gc3RhYzkyMDVfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyMDVfbWl4ZXI7CisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MjA1X2xvb3BiYWNrOwogCiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7Ci0Jc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOworCS8qIFR1cm4gb24vb2ZmIEVBUEQgcGVyIEhQIHBsdWdnaW5nICovCisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyAhPSBTVEFDXzkyMDVfRUFQRCkKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CiAJCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpewogCWNhc2UgU1RBQ185MjA1X0RFTExfTTQzOgogCQkvKiBFbmFibGUgU1BESUYgaW4vb3V0ICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MWYsIDB4MDE0NDEwMzApOwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDIwLCAweDFjNDEwMDMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDFmLCAweDAxNDQxMDMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDIwLCAweDFjNDEwMDMwKTsKIAogCQkvKiBFbmFibGUgdW5zb2wgcmVzcG9uc2UgZm9yIEdQSU80L0RvY2sgSFAgY29ubmVjdGlvbiAqLwogCQllcnIgPSBzdGFjX2FkZF9ldmVudChzcGVjLCBjb2RlYy0+YWZnLCBTVEFDX1ZSRUZfRVZFTlQsIDB4MDEpOwpAQCAtNTM3MywyMjMgKzU1NjksODcgQEAKICAqIFNUQUM5ODcyIGhhY2sKICAqLwogCi0vKiBzdGF0aWMgY29uZmlnIGZvciBTb255IFZBSU8gRkU1NTBHIGFuZCBTb255IFZBSU8gQVIgKi8KLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19kYWNzW10gPSB7IDB4MiB9OwotI2RlZmluZSBWQUlPX0hQX0RBQwkweDUKLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19hZGNzW10gPSB7IDB4OCAvKiwweDYqLyB9Owotc3RhdGljIGhkYV9uaWRfdCB2YWlvX211eF9uaWRzW10gPSB7IDB4MTUgfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHZhaW9fbXV4ID0gewotCS5udW1faXRlbXMgPSAzLAotCS5pdGVtcyA9IHsKLQkJLyogeyAiSFAiLCAweDAgfSwgKi8KLQkJeyAiTWljIEphY2siLCAweDEgfSwKLQkJeyAiSW50ZXJuYWwgTWljIiwgMHgyIH0sCi0JCXsgIlBDTSIsIDB4MyB9LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19pbml0W10gPSB7Ci0JezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLwotCXsweDBhLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgU1RBQ19IUF9FVkVOVH0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCAvKiBTcGVha2VyIDwtIDB4NSAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAoPC0gMHgyKSAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LCAvKiBDRCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTg3Ml9jb3JlX2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1pYy1zZWw6IDBhLDBkLDE0LDAyICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIEhQICovCi0JezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIFNwZWFrZXIgKi8KLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+IDB4NiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIE1pYy1pbiAtPiAweDkgKi8KIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2YWlvX2FyX2luaXRbXSA9IHsKLQl7MHgwYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwgLyogSFAgPC0gMHgyICovCi0JezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCAvKiBTcGVha2VyIDwtIDB4NSAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAoPC0gMHgyKSAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LCAvKiBDRCAqLwotLyoJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCovIC8qIE9wdGljYWwgT3V0ICovCi0JezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LCAvKiBNaWM/ICovCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaWMtc2VsOiAwYSwwZCwxNCwwMiAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBIUCAqLwotCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBTcGVha2VyICovCi0vKgl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwqLyAvKiBPcHRpY2FsIE91dCAqLwotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIGNhcHR1cmUgc3cvdm9sIC0+IDB4OCAqLwotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwgLyogQ0QtaW4gLT4gMHg2ICovCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwgLyogTWljLWluIC0+IDB4OSAqLwotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmFpb19taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDA3LCAwLCBIREFfSU5QVVQpLCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5ODcyX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuY291bnQgPSAxLAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCi0JfSwKLQl7fQorCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2YWlvX2FyX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJDRCBDYXB0dXJlIFZvbHVtZSIsIDB4MDcsIDAsIEhEQV9JTlBVVCksICovCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JLypIREFfQ09ERUNfTVVURSgiT3B0aWNhbCBPdXQgU3dpdGNoIiwgMHgxMCwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiT3B0aWNhbCBPdXQgVm9sdW1lIiwgMHgxMCwgMCwgSERBX09VVFBVVCksKi8KLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5jb3VudCA9IDEsCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwKLQl9LAotCXt9CitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX3Bpbl9uaWRzW10gPSB7CisJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKwkweDExLCAweDEzLCAweDE0LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIHN0YWM5ODcyX3BhdGNoX29wcyA9IHsKLQkuYnVpbGRfY29udHJvbHMgPSBzdGFjOTJ4eF9idWlsZF9jb250cm9scywKLQkuYnVpbGRfcGNtcyA9IHN0YWM5Mnh4X2J1aWxkX3BjbXMsCi0JLmluaXQgPSBzdGFjOTJ4eF9pbml0LAotCS5mcmVlID0gc3RhYzkyeHhfZnJlZSwKLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCi0jZW5kaWYKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfYWRjX25pZHNbXSA9IHsKKwkweDggLyosMHg2Ki8KIH07CiAKLXN0YXRpYyBpbnQgc3RhYzk4NzJfdmFpb19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBzdGFjOTJ4eF9pbml0KGNvZGVjKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudChjb2RlYywgU1RBQ19IUF9FVkVOVCA8PCAyNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5ODcyX3ZhaW9faHBfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmIChnZXRfcGluX3ByZXNlbmNlKGNvZGVjLCAweDBhKSkgewotCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIDB4MGYsIEFDX1BJTkNUTF9PVVRfRU4pOwotCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCAweDBhLCBBQ19QSU5DVExfT1VUX0VOKTsKLQl9IGVsc2UgewotCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIDB4MGEsIEFDX1BJTkNUTF9PVVRfRU4pOwotCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCAweDBmLCBBQ19QSU5DVExfT1VUX0VOKTsKLQl9Ci19IAotCi1zdGF0aWMgdm9pZCBzdGFjOTg3Ml92YWlvX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBTVEFDX0hQX0VWRU5UOgotCQlzdGFjOTg3Ml92YWlvX2hwX2RldGVjdChjb2RlYywgcmVzKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgc3RhYzk4NzJfdmFpb19wYXRjaF9vcHMgPSB7Ci0JLmJ1aWxkX2NvbnRyb2xzID0gc3RhYzkyeHhfYnVpbGRfY29udHJvbHMsCi0JLmJ1aWxkX3BjbXMgPSBzdGFjOTJ4eF9idWlsZF9wY21zLAotCS5pbml0ID0gc3RhYzk4NzJfdmFpb19pbml0LAotCS5mcmVlID0gc3RhYzkyeHhfZnJlZSwKLQkudW5zb2xfZXZlbnQgPSBzdGFjOTg3Ml92YWlvX3Vuc29sX2V2ZW50LAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCi0jZW5kaWYKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfbXV4X25pZHNbXSA9IHsKKwkweDE1CiB9OwogCi1lbnVtIHsgLyogRkUgYW5kIFNaIHNlcmllcy4gaWQ9MHg4Mzg0NzY2MSBhbmQgc3Vic3lzPTB4MTA0RDA3MDAgb3IgMTA0RDEwMDAuICovCi0gICAgICAgQ1hEOTg3MlJEX1ZBSU8sCi0gICAgICAgLyogVW5rbm93bi4gaWQ9MHg4Mzg0NzY2MiBhbmQgc3Vic3lzPTB4MTA0RDEyMDAgb3IgMTA0RDEwMDAuICovCi0gICAgICAgU1RBQzk4NzJBS19WQUlPLCAKLSAgICAgICAvKiBVbmtub3duLiBpZD0weDgzODQ3NjYxIGFuZCBzdWJzeXM9MHgxMDREMTIwMC4gKi8KLSAgICAgICBTVEFDOTg3MktfVkFJTywKLSAgICAgICAvKiBBUiBTZXJpZXMuIGlkPTB4ODM4NDc2NjQgYW5kIHN1YnN5cz0xMDREMTMwMCAqLwotICAgICAgIENYRDk4NzJBS0RfVkFJTywKLSAgICAgICBTVEFDXzk4NzJfTU9ERUxTLAorc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzWzldID0geworCTB4MDMyMTEwMjAsIDB4NDExMTExZjAsIDB4NDExMTExZjAsIDB4MDNhMTUwMzAsCisJMHg0MTExMTFmMCwgMHg5MDE3MDExMCwgMHg0MTExMTFmMCwgMHg0MTExMTFmMCwKKwkweDkwYTcwMTNlCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzk4NzJfbW9kZWxzW1NUQUNfOTg3Ml9NT0RFTFNdID0gewotCVtDWEQ5ODcyUkRfVkFJT10JPSAidmFpbyIsCi0JW0NYRDk4NzJBS0RfVkFJT10JPSAidmFpby1hciIsCisJW1NUQUNfOTg3Ml9BVVRPXSA9ICJhdXRvIiwKKwlbU1RBQ185ODcyX1ZBSU9dID0gInZhaW8iLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzk4NzJfYnJkX3RibFtTVEFDXzk4NzJfTU9ERUxTXSA9IHsKKwlbU1RBQ185ODcyX1ZBSU9dID0gc3RhYzk4NzJfdmFpb19waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTg3Ml9jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlNiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlZiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFmZCwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwNSwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCi0Je30KKwl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5ODcyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVycjsKIAotCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzk4NzJfTU9ERUxTLAotCQkJCQkJICBzdGFjOTg3Ml9tb2RlbHMsCi0JCQkJCQkgIHN0YWM5ODcyX2NmZ190YmwpOwotCWlmIChib2FyZF9jb25maWcgPCAwKQotCQkvKiB1bmtub3duIGNvbmZpZywgbGV0IGdlbmVyaWMtcGFyc2VyIGRvIGl0cyBqb2IuLi4gKi8KLQkJcmV0dXJuIHNuZF9oZGFfcGFyc2VfZ2VuZXJpY19jb2RlYyhjb2RlYyk7Ci0JCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCiAJY29kZWMtPnNwZWMgPSBzcGVjOwotCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7Ci0JY2FzZSBDWEQ5ODcyUkRfVkFJTzoKLQljYXNlIFNUQUM5ODcyQUtfVkFJTzoKLQljYXNlIFNUQUM5ODcyS19WQUlPOgotCQlzcGVjLT5taXhlciA9IHZhaW9fbWl4ZXI7Ci0JCXNwZWMtPmluaXQgPSB2YWlvX2luaXQ7Ci0JCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7Ci0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRSh2YWlvX2RhY3MpOwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHZhaW9fZGFjczsKLQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gVkFJT19IUF9EQUM7Ci0JCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRSh2YWlvX2FkY3MpOwotCQlzcGVjLT5hZGNfbmlkcyA9IHZhaW9fYWRjczsKLQkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5pbnB1dF9tdXggPSAmdmFpb19tdXg7Ci0JCXNwZWMtPm11eF9uaWRzID0gdmFpb19tdXhfbmlkczsKLQkJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5ODcyX3ZhaW9fcGF0Y2hfb3BzOwotCQlicmVhazsKLQkKLQljYXNlIENYRDk4NzJBS0RfVkFJTzoKLQkJc3BlYy0+bWl4ZXIgPSB2YWlvX2FyX21peGVyOwotCQlzcGVjLT5pbml0ID0gdmFpb19hcl9pbml0OwotCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUodmFpb19kYWNzKTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSB2YWlvX2RhY3M7Ci0JCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IFZBSU9fSFBfREFDOwotCQlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUodmFpb19hZGNzKTsKLQkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5hZGNfbmlkcyA9IHZhaW9fYWRjczsKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJnZhaW9fbXV4OwotCQlzcGVjLT5tdXhfbmlkcyA9IHZhaW9fbXV4X25pZHM7Ci0JCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTg3Ml9wYXRjaF9vcHM7Ci0JCWJyZWFrOwotCX0KIAorCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzk4NzJfTU9ERUxTLAorCQkJCQkJCXN0YWM5ODcyX21vZGVscywKKwkJCQkJCQlzdGFjOTg3Ml9jZmdfdGJsKTsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5ODcyLCAiCisJCQkgICAgInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOworCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAorCQkJCQkgc3RhYzk4NzJfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKKworCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTg3Ml9waW5fbmlkcyk7CisJc3BlYy0+cGluX25pZHMgPSBzdGFjOTg3Ml9waW5fbmlkczsKKwlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOworCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTg3Ml9hZGNfbmlkcyk7CisJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTg3Ml9hZGNfbmlkczsKKwlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5ODcyX211eF9uaWRzKTsKKwlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5ODcyX211eF9uaWRzOworCXNwZWMtPm1peGVyID0gc3RhYzk4NzJfbWl4ZXI7CisJc3BlYy0+aW5pdCA9IHN0YWM5ODcyX2NvcmVfaW5pdDsKKworCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDEwLCAweDEyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYzc2MTM5NC4uYjI1YTVjYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC0xMzA4LDE2ICsxMzA4LDEzIEBACiAJdW5zaWduZWQgaW50IGRlZl9jb25mOwogCXVuc2lnbmVkIGNoYXIgc2VxYXNzb2M7CiAKLQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlzZXFhc3NvYyA9ICh1bnNpZ25lZCBjaGFyKSBnZXRfZGVmY2ZnX2Fzc29jaWF0aW9uKGRlZl9jb25mKTsKIAlzZXFhc3NvYyA9IChzZXFhc3NvYyA8PCA0KSB8IGdldF9kZWZjZmdfc2VxdWVuY2UoZGVmX2NvbmYpOwogCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKSB7CiAJCWlmIChzZXFhc3NvYyA9PSAweGZmKSB7CiAJCQlkZWZfY29uZiA9IGRlZl9jb25mICYgKH4oQUNfSkFDS19QT1JUX0JPVEggPDwgMzApKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsCi0JCQkJCSAgICBkZWZfY29uZiA+PiAyNCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIG5pZCwgZGVmX2NvbmYpOwogCQl9CiAJfQogCkBAIC0xMzU0LDcgKzEzNTEsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4X0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOF9ESUdJTl9OSUQ7CkBAIC0xODI3LDcgKzE4MjQsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA5X0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOV9ESUdJTl9OSUQ7CkBAIC0yMzcxLDcgKzIzNjgsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4Ql9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDhCX0RJR0lOX05JRDsKQEAgLTI4MzYsNyArMjgzMyw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDhTX0RJR09VVF9OSUQ7CiAKIAlzcGVjLT5leHRyYV9kaWdfb3V0X25pZCA9IDB4MTU7CkBAIC0zMTU1LDcgKzMxNTIsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzAyX0RJR09VVF9OSUQ7CiAKIAlzcGVjLT5leHRyYV9kaWdfb3V0X25pZCA9IDB4MUI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggNThkN2NkYS4uM2RkNjNmMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJCQl1MTYgcGJrc3RhdHVzOwogCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCQlwYmtzdGF0dXMgPSBpbncoSUNFRFMoaWNlLCBJTlRTVEFUKSk7Ci0JCQkvKiBwcmludGsoInBia3N0YXR1cyA9IDB4JXhcbiIsIHBia3N0YXR1cyk7ICovCisJCQkvKiBwcmludGsoS0VSTl9ERUJVRyAicGJrc3RhdHVzID0gMHgleFxuIiwgcGJrc3RhdHVzKTsgKi8KIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNjsgaWR4KyspIHsKIAkJCQlpZiAoKHBia3N0YXR1cyAmICgzIDw8IChpZHggKiAyKSkpID09IDApCiAJCQkJCWNvbnRpbnVlOwpAQCAtMjY0OCw5ICsyNjQ4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSUNFMTcxMiIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJQ0Vuc2VtYmxlIElDRTE3MTIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBiYjhkOGM3Li4xMjg1MTBlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtMjQxLDYgKzI0MSw4IEBACiAJCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdTggZmxhZywgaW50IGVuYWJsZSk7CisKIHN0YXRpYyB2b2lkIHZ0MTcyNF9taWRpX3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnM7CkBAIC0yNTQsNiArMjU2LDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQogCQkJb3V0YihidWZmZXJbaV0sIElDRVJFRzE3MjQoaWNlLCBNUFVfREFUQSkpOwogCX0KKwkvKiBtYXNrIGlycSB3aGVuIGFsbCBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisJICogZW5hYmxlZCBhZ2FpbiBpbiBvdXRwdXRfdHJpZ2dlciB3aGVuIHRoZSBuZXcgZGF0YSBjb21lcyBpbi4KKwkgKi8KKwllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwKKwkJCSFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eShzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZ0MTcyNF9taWRpX3JlYWQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCkBAIC0yNzIsMzEgKzI3OSwzNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdnQxNzI0X2VuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICAgdTggZmxhZywgaW50IGVuYWJsZSkKKy8qIGNhbGwgd2l0aCBpY2UtPnJlZ19sb2NrICovCitzdGF0aWMgdm9pZCBlbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHU4IGZsYWcsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7Ci0JdTggbWFzazsKLQotCXNwaW5fbG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwotCW1hc2sgPSBpbmIoSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKKwl1OCBtYXNrID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CiAJaWYgKGVuYWJsZSkKIAkJbWFzayAmPSB+ZmxhZzsKIAllbHNlCiAJCW1hc2sgfD0gZmxhZzsKIAlvdXRiKG1hc2ssIElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZ0MTcyNF9lbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgIHU4IGZsYWcsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKKwllbmFibGVfbWlkaV9pcnEoaWNlLCBmbGFnLCBlbmFibGUpOwogCXNwaW5fdW5sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdnQxNzI0X21pZGlfb3V0cHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqcykKIHsKLQl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2dDE3MjRfbWlkaV9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqcykKIHsKLQl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzExLDYgKzMyMSw3IEBACiAJCXZ0MTcyNF9taWRpX3dyaXRlKGljZSk7CiAJfSBlbHNlIHsKIAkJaWNlLT5taWRpX291dHB1dCA9IDA7CisJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwogfQpAQCAtMzIwLDYgKzMzMSw3IEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAorCXZ0MTcyNF9lbmFibGVfbWlkaV9pcnEocywgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCS8qIDMyIGJ5dGVzIHNob3VsZCBiZSB0cmFuc21pdHRlZCBpbiBsZXNzIHRoYW4gYWJvdXQgMTIgbXMgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUpOwogCWRvIHsKQEAgLTM4OSwyNCArNDAxLDI0IEBACiAJCXN0YXR1cyAmPSBzdGF0dXNfbWFzazsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJYnJlYWs7CisJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWlmICgrK3RpbWVvdXQgPiAxMCkgewogCQkJc3RhdHVzID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFTVEFUKSk7CiAJCQlwcmludGsoS0VSTl9FUlIgImljZTE3MjQ6IFRvbyBsb25nIGlycSBsb29wLCAiCiAJCQkgICAgICAgInN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAJCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfVFgpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgImljZTE3MjQ6IERpc2FibGluZyBNUFVfVFhcbiIpOwotCQkJCW91dGIoaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSkgfAotCQkJCSAgICAgVlQxNzI0X0lSUV9NUFVfVFgsCi0JCQkJICAgICBJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOworCQkJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkJCX0KKwkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJCWJyZWFrOwogCQl9CiAJCWhhbmRsZWQgPSAxOwogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfVFgpIHsKLQkJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlpZiAoaWNlLT5taWRpX291dHB1dCkKIAkJCQl2dDE3MjRfbWlkaV93cml0ZShpY2UpOwotCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOworCQkJZWxzZQorCQkJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkJCS8qIER1ZSB0byBteXN0ZXJpY2FsIHJlYXNvbnMsIE1QVV9UWCBpcyBhbHdheXMKIAkJCSAqIGdlbmVyYXRlZCAoYW5kIGNhbid0IGJlIGNsZWFyZWQpIHdoZW4gYSBQQ00KIAkJCSAqIHBsYXliYWNrIGlzIGdvaW5nLiAgU28gbGV0J3MgaWdub3JlIGF0IHRoZQpAQCAtNDE1LDE1ICs0MjcsMTQgQEAKIAkJCXN0YXR1c19tYXNrICY9IH5WVDE3MjRfSVJRX01QVV9UWDsKIAkJfQogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfUlgpIHsKLQkJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlpZiAoaWNlLT5taWRpX2lucHV0KQogCQkJCXZ0MTcyNF9taWRpX3JlYWQoaWNlKTsKIAkJCWVsc2UKIAkJCQl2dDE3MjRfbWlkaV9jbGVhcl9yeChpY2UpOwotCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOwogCQl9CiAJCS8qIGFjayBNUFUgaXJxICovCiAJCW91dGIoc3RhdHVzLCBJQ0VSRUcxNzI0KGljZSwgSVJRU1RBVCkpOworCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWlmIChzdGF0dXMgJiBWVDE3MjRfSVJRX01UUENNKSB7CiAJCQkvKgogCQkJICogTXVsdGktdHJhY2sgUENNCkBAIC03NDUsNyArNzU2LDE0IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwogCi0JLyogcHJpbnRrKCJwcm8gcHJlcGFyZTogY2ggPSAlZCwgYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JXgsIHBlcmlvZCA9IDB4JXhcbiIsIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMsICh1bnNpZ25lZCBpbnQpc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksIHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcm8gcHJlcGFyZTogY2ggPSAlZCwgYWRkciA9IDB4JXgsICIKKwkgICAgICAgImJ1ZmZlciA9IDB4JXgsIHBlcmlvZCA9IDB4JXhcbiIsCisJICAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgICh1bnNpZ25lZCBpbnQpc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwKKwkgICAgICAgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJICAgICAgIHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsKKwkqLwogCXJldHVybiAwOwogfQogCkBAIC0yMTIyLDcgKzIxNDAsOSBAQAogCXdhaXRfaTJjX2J1c3koaWNlKTsKIAl2YWwgPSBpbmIoSUNFUkVHMTcyNChpY2UsIEkyQ19EQVRBKSk7CiAJbXV0ZXhfdW5sb2NrKCZpY2UtPmkyY19tdXRleCk7Ci0JLyogcHJpbnRrKCJpMmNfcmVhZDogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIHZhbCk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3JlYWQ6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCB2YWwpOworCSovCiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMjEzMSw3ICsyMTUxLDkgQEAKIHsKIAltdXRleF9sb2NrKCZpY2UtPmkyY19tdXRleCk7CiAJd2FpdF9pMmNfYnVzeShpY2UpOwotCS8qIHByaW50aygiaTJjX3dyaXRlOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgZGF0YSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3dyaXRlOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgZGF0YSk7CisJKi8KIAlvdXRiKGFkZHIsIElDRVJFRzE3MjQoaWNlLCBJMkNfQllURV9BRERSKSk7CiAJb3V0YihkYXRhLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0RBVEEpKTsKIAlvdXRiKGRldiB8IFZUMTcyNF9JMkNfV1JJVEUsIElDRVJFRzE3MjQoaWNlLCBJMkNfREVWX0FERFIpKTsKQEAgLTI0NTYsOSArMjQ3OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDRTE3MjQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSUNFbnNlbWJsZSBJQ0UxNzI0Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKaW5kZXggYzUxNjU5Yi4uZmQ5NDhiZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYwpAQCAtMzQ1LDggKzM0NSw5IEBACiAJCQluZXdfZ3BpbyA9ICBvbGRfZ3BpbyAmCiAJCQkJfigodW5zaWduZWQgaW50KSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CiAJfQotCS8qIHByaW50aygiSlVMSSAtIG11dGUvdW5tdXRlOiBjb250cm9sX3ZhbHVlOiAweCV4LCBvbGRfZ3BpbzogMHgleCwgXAotCQluZXdfZ3BpbyAweCV4XG4iLAorCS8qIHByaW50ayhLRVJOX0RFQlVHCisJCSJKVUxJIC0gbXV0ZS91bm11dGU6IGNvbnRyb2xfdmFsdWU6IDB4JXgsIG9sZF9ncGlvOiAweCV4LCAiCisJCSJuZXdfZ3BpbyAweCV4XG4iLAogCQkodW5zaWduZWQgaW50KXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdLCBvbGRfZ3BpbywKIAkJbmV3X2dwaW8pOyAqLwogCWlmIChvbGRfZ3BpbyAhPSBuZXdfZ3BpbykgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCmluZGV4IDQ4ZDM2NzkuLjJhOGU1Y2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKQEAgLTEzMyw4ICsxMzMsMTAgQEAKIAkJaWR4ICA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpICsgU1RBQzk0NlhfTEZfVk9MVU1FOwogCS8qIGR1ZSB0byBwb3NzaWJsZSBjb25mbGljdHMgd2l0aCBzdGFjOTQ2MF9zZXRfcmF0ZV92YWwsIG11dGV4aW5nICovCiAJbXV0ZXhfbG9jaygmc3BlYy0+bXV0ZV9tdXRleCk7Ci0JLypwcmludGsoIk11dGUgcHV0OiByZWcgMHglMDJ4LCBjdHJsIHZhbHVlOiAweCUwMnhcbiIsIGlkeCwKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOyovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiTXV0ZSBwdXQ6IHJlZyAweCUwMngsIGN0cmwgdmFsdWU6IDB4JTAyeFxuIiwgaWR4LAorCSAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJKi8KIAljaGFuZ2UgPSBzdGFjOTQ2MF9kYWNfbXV0ZShpY2UsIGlkeCwgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogCW11dGV4X3VubG9jaygmc3BlYy0+bXV0ZV9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTE4NSw3ICsxODcsMTAgQEAKIAljaGFuZ2UgPSAob3ZvbCAhPSBudm9sKTsKIAlpZiAoY2hhbmdlKSB7CiAJCW92b2wgPSAgKDB4N2YgLSBudm9sKSB8ICh0bXAgJiAweDgwKTsKLQkJLypwcmludGsoIkRBQyBWb2x1bWU6IHJlZyAweCUwMng6IDB4JTAyeFxuIiwgaWR4LCBvdm9sKTsqLworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiREFDIFZvbHVtZTogcmVnIDB4JTAyeDogMHglMDJ4XG4iLAorCQkgICAgICAgaWR4LCBvdm9sKTsKKwkJKi8KIAkJc3RhYzk0NjBfcHV0KGljZSwgaWR4LCAoMHg3ZiAtIG52b2wpIHwgKHRtcCAmIDB4ODApKTsKIAl9CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTM0NCw3ICszNDksNyBAQAogCWZvciAoaWR4ID0gMDsgaWR4IDwgNyA7ICsraWR4KQogCQljaGFuZ2VkW2lkeF0gPSBzdGFjOTQ2MF9kYWNfbXV0ZShpY2UsCiAJCQkJU1RBQzk0NlhfTUFTVEVSX1ZPTFVNRSArIGlkeCwgMCk7Ci0JLypwcmludGsoIlJhdGUgY2hhbmdlOiAlZCwgbmV3IE1DOiAweCUwMnhcbiIsIHJhdGUsIG5ldyk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJSYXRlIGNoYW5nZTogJWQsIG5ldyBNQzogMHglMDJ4XG4iLCByYXRlLCBuZXcpOyovCiAJc3RhYzk0NjBfcHV0KGljZSwgU1RBQzk0NlhfTUFTVEVSX0NMT0NLSU5HLCBuZXcpOwogCXVkZWxheSgxMCk7CiAJLyogdW5tdXRpbmcgLSBvbmx5IG9yaWdpbmFsbHkgdW5tdXRlZCBkYWNzIC0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggZTkwMGNkYy4uNTc2NDg4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTY4OSw3ICs2ODksNyBAQAogCQkJYmRiYXJbaWR4ICsgMV0gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwIHwgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KIAkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZSA+PiBpY2hkZXYtPnBvc19zaGlmdCk7CiAjaWYgMAotCQkJcHJpbnRrKCJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKIAkJCSAgICAgICBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOwogI2VuZGlmCiAJCX0KQEAgLTcwMSw4ICs3MDEsMTAgQEAKIAlpY2hkZXYtPmx2aV9mcmFnID0gSUNIX1JFR19MVklfTUFTSyAlIGljaGRldi0+ZnJhZ3M7CiAJaWNoZGV2LT5wb3NpdGlvbiA9IDA7CiAjaWYgMAotCXByaW50aygibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAotCQkJaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwgaWNoZGV2LT5mcmFnc2l6ZTEpOworCXByaW50ayhLRVJOX0RFQlVHICJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsICIKKwkgICAgICAgInBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCisJICAgICAgIGljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsCisJICAgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNlbmRpZgogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KIAlpcHV0Ynl0ZShjaGlwLCBwb3J0ICsgaWNoZGV2LT5yb2ZmX3NyLCBJQ0hfRklGT0UgfCBJQ0hfQkNJUyB8IElDSF9MVkJDSSk7CkBAIC03NjgsNyArNzcwLDggQEAKIAkJaWNoZGV2LT5sdmlfZnJhZyAlPSBpY2hkZXYtPmZyYWdzOwogCQlpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMl0gPSBjcHVfdG9fbGUzMihpY2hkZXYtPnBoeXNidWYgKyBpY2hkZXYtPmx2aV9mcmFnICogaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2lmIDAKLQlwcmludGsoIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksICIKKwkgICAgICAgImFsbCA9IDB4JXgsIDB4JXhcbiIsCiAJICAgICAgIGljaGRldi0+bHZpICogMiwgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDJdLAogCSAgICAgICBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMiArIDFdLCBpbmIoSUNIX1JFR19PRkZfUElWICsgcG9ydCksCiAJICAgICAgIGlubChwb3J0ICsgNCksIGluYihwb3J0ICsgSUNIX1JFR19PRkZfQ1IpKTsKQEAgLTIyODcsMjMgKzIyOTAsMjMgQEAKIAlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEFMSV9JTlRFUlJVUFRTUiksIDB4MDAwMDAwMDApOwogfQogCi1zdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9pbml0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgaW50IHByb2JpbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKLQl1bnNpZ25lZCBpbnQgY250LCBzdGF0dXMsIG5zdGF0dXM7Ci0JCi0JLyogcHV0IGxvZ2ljIHRvIHJpZ2h0IHN0YXRlICovCi0JLyogZmlyc3QgY2xlYXIgc3RhdHVzIGJpdHMgKi8KLQlzdGF0dXMgPSBJQ0hfUkNTIHwgSUNIX01DSU5UIHwgSUNIX1BPSU5UIHwgSUNIX1BJSU5UOwotCWlmIChjaGlwLT5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfTkZPUkNFKQotCQlzdGF0dXMgfD0gSUNIX05WU1BJTlQ7Ci0JY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpOwotCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpLCBjbnQgJiBzdGF0dXMpOworI2lmZGVmIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgaWNoX2NoaXBfcmVzZXRfbW9kZVtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1MWYsICJUaGlua3BhZCBSMzIiLCAxKSwKKwl7IH0gLyogZW5kICovCit9OwogCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OwogCS8qIEFDTGluayBvbiwgMiBjaGFubmVscyAqLworCisJaWYgKHNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgaWNoX2NoaXBfcmVzZXRfbW9kZSkpCisJCXJldHVybiAtRUlPOworCiAJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpOwogCWNudCAmPSB+KElDSF9BQ0xJTksgfCBJQ0hfUENNXzI0Nl9NQVNLKTsKLSNpZmRlZiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRQorCiAJLyogZG8gY29sZCByZXNldCAtIHRoZSBmdWxsIGFjOTcgcG93ZXJkb3duIG1heSBsZWF2ZSB0aGUgY29udHJvbGxlcgogCSAqIGluIGEgd2FybSBzdGF0ZSBidXQgYWN0dWFsbHkgaXQgY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGNvZGVjLgogCSAqLwpAQCAtMjMxMiwyMiArMjMxNSw1OCBAQAogCXVkZWxheSgxMCk7CiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCksIGNudCB8IElDSF9BQzk3Q09MRCk7CiAJbXNsZWVwKDEpOworCXJldHVybiAwOworfQorI2RlZmluZSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkgXAorCSghc25kX3BjaV9xdWlya19sb29rdXAoY2hpcC0+cGNpLCBpY2hfY2hpcF9yZXNldF9tb2RlKSkKICNlbHNlCisjZGVmaW5lIHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KGNoaXApCTAKKyNkZWZpbmUgc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX2ludGVsOHgwX2ljaF9jaGlwX3Jlc2V0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lOworCXVuc2lnbmVkIGludCBjbnQ7CisJLyogQUNMaW5rIG9uLCAyIGNoYW5uZWxzICovCisJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpOworCWNudCAmPSB+KElDSF9BQ0xJTksgfCBJQ0hfUENNXzI0Nl9NQVNLKTsKIAkvKiBmaW5pc2ggY29sZCBvciBkbyB3YXJtIHJlc2V0ICovCiAJY250IHw9IChjbnQgJiBJQ0hfQUM5N0NPTEQpID09IDAgPyBJQ0hfQUM5N0NPTEQgOiBJQ0hfQUM5N1dBUk07CiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCksIGNudCk7CiAJZW5kX3RpbWUgPSAoamlmZmllcyArIChIWiAvIDQpKSArIDE7CiAJZG8gewogCQlpZiAoKGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKSAmIElDSF9BQzk3V0FSTSkgPT0gMCkKLQkJCWdvdG8gX19vazsKKwkJCXJldHVybiAwOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiQUMnOTcgd2FybSByZXNldCBzdGlsbCBpbiBwcm9ncmVzcz8gWzB4JXhdXG4iLAogCQkgICBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSkpOwogCXJldHVybiAtRUlPOworfQogCi0gICAgICBfX29rOgotI2VuZGlmCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9pbml0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgaW50IHByb2JpbmcpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBuc3RhdHVzOworCXVuc2lnbmVkIGludCBjbnQ7CisJaW50IGVycjsKKworCS8qIHB1dCBsb2dpYyB0byByaWdodCBzdGF0ZSAqLworCS8qIGZpcnN0IGNsZWFyIHN0YXR1cyBiaXRzICovCisJc3RhdHVzID0gSUNIX1JDUyB8IElDSF9NQ0lOVCB8IElDSF9QT0lOVCB8IElDSF9QSUlOVDsKKwlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX05GT1JDRSkKKwkJc3RhdHVzIHw9IElDSF9OVlNQSU5UOworCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKTsKKwlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSwgY250ICYgc3RhdHVzKTsKKworCWlmIChzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkpCisJCWVyciA9IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KGNoaXApOworCWVsc2UKKwkJZXJyID0gc25kX2ludGVsOHgwX2ljaF9jaGlwX3Jlc2V0KGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKHByb2JpbmcpIHsKIAkJLyogd2FpdCBmb3IgYW55IGNvZGVjIHJlYWR5IHN0YXR1cy4KIAkJICogT25jZSBpdCBiZWNvbWVzIHJlYWR5IGl0IHNob3VsZCByZW1haW4gcmVhZHkKQEAgLTMwNTgsOSArMzA5Nyw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2hvcnRuYW1lX3RhYmxlICpuYW1lOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKHNwZGlmX2FjbGluayA8IDApCiAJCXNwZGlmX2FjbGluayA9IGNoZWNrX2RlZmF1bHRfc3BkaWZfYWNsaW5rKHBjaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggOTM0NDllNC4uNmVjMGZjNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtNDExLDcgKzQxMSwxMCBAQAogCQkJYmRiYXJbaWR4ICsgMF0gPSBjcHVfdG9fbGUzMihpY2hkZXYtPnBoeXNidWYgKyAoKChpZHggPj4gMSkgKiBpY2hkZXYtPmZyYWdzaXplKSAlIGljaGRldi0+c2l6ZSkpOwogCQkJYmRiYXJbaWR4ICsgMV0gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwIHwgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KIAkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZSA+PiBjaGlwLT5wY21fcG9zX3NoaWZ0KTsKLQkJCS8vIHByaW50aygiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLAorCQkJICAgICAgIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CisJCQkqLwogCQl9CiAJCWljaGRldi0+ZnJhZ3MgPSBpY2hkZXYtPnNpemUgLyBpY2hkZXYtPmZyYWdzaXplOwogCX0KQEAgLTQyMSw4ICs0MjQsMTAgQEAKIAlpY2hkZXYtPmx2aV9mcmFnID0gSUNIX1JFR19MVklfTUFTSyAlIGljaGRldi0+ZnJhZ3M7CiAJaWNoZGV2LT5wb3NpdGlvbiA9IDA7CiAjaWYgMAotCXByaW50aygibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAotCQkJaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwgaWNoZGV2LT5mcmFnc2l6ZTEpOworCXByaW50ayhLRVJOX0RFQlVHICJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsICIKKwkgICAgICAgInBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCisJICAgICAgIGljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsCisJICAgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNlbmRpZgogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KIAlpcHV0Ynl0ZShjaGlwLCBwb3J0ICsgaWNoZGV2LT5yb2ZmX3NyLCBJQ0hfRklGT0UgfCBJQ0hfQkNJUyB8IElDSF9MVkJDSSk7CkBAIC00NjUsNyArNDcwLDggQEAKIAkJCQkJCQkgICAgIGljaGRldi0+bHZpX2ZyYWcgKgogCQkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2lmIDAKLQkJcHJpbnRrKCJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgIgorCQkgICAgICAgInByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCiAJCSAgICAgICBpY2hkZXYtPmx2aSAqIDIsIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyXSwKIAkJICAgICAgIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyICsgMV0sIGluYihJQ0hfUkVHX09GRl9QSVYgKyBwb3J0KSwKIAkJICAgICAgIGlubChwb3J0ICsgNCksIGluYihwb3J0ICsgSUNIX1JFR19PRkZfQ1IpKTsKQEAgLTEyNjksOSArMTI3NSw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2hvcnRuYW1lX3RhYmxlICpuYW1lOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDSC1NT0RFTSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJbnRlbCBJQ0giKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKaW5kZXggNWY4MDA2Yi4uOGI3OTk2OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKKysrIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKQEAgLTI0NDMsOSArMjQ0Myw5IEBACiAJCWRldisrOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0gICAgICAgIGlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAgICAgICAgIGlmICgoZXJyID0gc25kX2tvcmcxMjEyX2NyZWF0ZShjYXJkLCBwY2ksICZrb3JnMTIxMikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA1OWJiYWY4Li43MDE0MTU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMjY5MSw5ICsyNjkxLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYmIxNjI1MC4uYzFlYjg0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0xMzY2LDEyICsxMzY2LDEyIEBACiAJCWVsc2UKIAkJCWlkeCA9IGluZGV4W2Rldl0gKyBpOwogCQlzbnByaW50Zih0bXBpZCwgc2l6ZW9mKHRtcGlkKSwgIiVzLSVkIiwgaWRbZGV2XSA/IGlkW2Rldl0gOiAiTUlYQVJUIiwgaSk7Ci0JCWNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDApOworCQllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCQlpZiAoISBjYXJkKSB7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgYWxsb2NhdGUgdGhlIGNhcmQgJWRcbiIsIGkpOwogCQkJc25kX21peGFydF9mcmVlKG1ncik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBDQVJEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKaW5kZXggMzc4MmI1Mi4uNGNmNGNkOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCkBAIC0zNDUsOCArMzQ1LDggQEAKIAlzdGF0dXNfZGF1Z2h0ID0gcmVhZGxfYmUoIE1JWEFSVF9NRU0oIG1ncixNSVhBUlRfUFNFVURPUkVHX0RYTFhfU1RBVFVTX09GRlNFVCApKTsKIAogCS8qIG1vdGhlcmJvYXJkIHhpbGlueCBzdGF0dXMgNSB3aWxsIHNheSB0aGF0IHRoZSBib2FyZCBpcyBwZXJmb3JtaW5nIGEgcmVzZXQgKi8KLQlpZiggc3RhdHVzX3hpbGlueCA9PSA1ICkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAibWlYYXJ0IGlzIHJlc2V0dGluZyAhXG4iKTsKKwlpZiAoc3RhdHVzX3hpbGlueCA9PSA1KSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm1pWGFydCBpcyByZXNldHRpbmcgIVxuIik7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4gbGF0ZXIgKi8KIAl9CiAKQEAgLTM1NCwxMyArMzU0LDE0IEBACiAJY2FzZSBNSVhBUlRfTU9USEVSQk9BUkRfWExYX0lOREVYOgogCiAJCS8qIHhpbGlueCBhbHJlYWR5IGxvYWRlZCA/ICovIAotCQlpZiggc3RhdHVzX3hpbGlueCA9PSA0ICkgewotCQkJc25kX3ByaW50ayggS0VSTl9ERUJVRyAieGlsaW54IGlzIGFscmVhZHkgbG9hZGVkICFcbiIpOworCQlpZiAoc3RhdHVzX3hpbGlueCA9PSA0KSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInhpbGlueCBpcyBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qIHRoZSBzdGF0dXMgc2hvdWxkIGJlIDAgPT0gImlkbGUiICovCi0JCWlmKCBzdGF0dXNfeGlsaW54ICE9IDAgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzX3hpbGlueCk7CisJCWlmIChzdGF0dXNfeGlsaW54ICE9IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInhpbGlueCBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsCisJCQkJICAgc3RhdHVzX3hpbGlueCk7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KIApAQCAtMzg5LDIxICszOTAsMjMgQEAKIAogCWNhc2UgTUlYQVJUX01PVEhFUkJPQVJEX0VMRl9JTkRFWDoKIAotCQlpZiggc3RhdHVzX2VsZiA9PSA0ICkgewotCQkJc25kX3ByaW50ayggS0VSTl9ERUJVRyAiZWxmIGZpbGUgYWxyZWFkeSBsb2FkZWQgIVxuIik7CisJCWlmIChzdGF0dXNfZWxmID09IDQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZWxmIGZpbGUgYWxyZWFkeSBsb2FkZWQgIVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCS8qIHRoZSBzdGF0dXMgc2hvdWxkIGJlIDAgPT0gImlkbGUiICovCi0JCWlmKCBzdGF0dXNfZWxmICE9IDAgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZWxmIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzX2VsZik7CisJCWlmIChzdGF0dXNfZWxmICE9IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVsZiBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsCisJCQkJICAgc3RhdHVzX2VsZik7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KIAogCQkvKiB3YWl0IGZvciB4aWxpbnggc3RhdHVzID09IDQgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19NWExYX1NUQVRVU19PRkZTRVQsIDEsIDQsIDUwMCk7IC8qIDVzZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJ4aWxpbnggd2FzIG5vdCBsb2FkZWQgb3IgY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAieGlsaW54IHdhcyBub3QgbG9hZGVkIG9yICIKKwkJCQkgICAiY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00MjQsNyArNDI3LDcgQEAKIAkJLyogd2FpdCBmb3IgZWxmIHN0YXR1cyA9PSA0ICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRUxGX1NUQVRVU19PRkZTRVQsIDEsIDQsIDMwMCk7IC8qIDNzZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJlbGYgY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZWxmIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDM3LDE1ICs0NDAsMTYgQEAKIAlkZWZhdWx0OgogCiAJCS8qIGVsZiBhbmQgeGlsaW54IHNob3VsZCBiZSBsb2FkZWQgKi8KLQkJaWYoIChzdGF0dXNfZWxmICE9IDQpIHx8IChzdGF0dXNfeGlsaW54ICE9IDQpICkgewotCQkJcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IG9yIGVsZiBub3Qgc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CisJCWlmIChzdGF0dXNfZWxmICE9IDQgfHwgc3RhdHVzX3hpbGlueCAhPSA0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInhpbGlueCBvciBlbGYgbm90ICIKKwkJCSAgICAgICAic3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KIAogCQkvKiB3YWl0IGZvciBkYXVnaHRlciBkZXRlY3Rpb24gIT0gMCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0RCUkRfUFJFU0VOQ0VfT0ZGU0VULCAwLCAwLCAzMCk7IC8qIDMwMG1zZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJlcnJvciBzdGFydGluZyBlbGYgZmlsZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlcnJvciBzdGFydGluZyBlbGYgZmlsZVxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQ2MCw4ICs0NjQsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJLyogZGF1Z2h0ZXIgc2hvdWxkIGJlIGlkbGUgKi8KLQkJaWYoIHN0YXR1c19kYXVnaHQgIT0gMCApIHsKLQkJCXByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzX2RhdWdodCk7CisJCWlmIChzdGF0dXNfZGF1Z2h0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZGF1Z2h0ZXIgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJICAgICAgIHN0YXR1c19kYXVnaHQpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAgCkBAIC00ODAsNyArNDg1LDcgQEAKIAkJLyogd2FpdCBmb3Igc3RhdHVzID09IDIgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQsIDEsIDIsIDMwKTsgLyogMzAwbXNlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGxvYWQgZXJyb3JcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZGF1Z2h0ZXIgYm9hcmQgbG9hZCBlcnJvclxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTUwMiw3ICs1MDcsOCBAQAogICAgICAgICAvKiB3YWl0IGZvciBkYXVnaHRlciBzdGF0dXMgPT0gMyAqLwogICAgICAgICBlcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0RYTFhfU1RBVFVTX09GRlNFVCwgMSwgMywgMzAwKTsgLyogM3NlYyAqLwogICAgICAgICBpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZGF1Z2h0ZXIgYm9hcmQgY291bGQgbm90IGJlIGluaXRpYWxpc2VkXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgImRhdWdodGVyIGJvYXJkIGNvdWxkIG5vdCBiZSBpbml0aWFsaXNlZFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01MTIsNyArNTE4LDcgQEAKIAkvKiBmaXJzdCBjb21tdW5pY2F0aW9uIHdpdGggZW1iZWRkZWQgKi8KIAllcnIgPSBtaXhhcnRfZmlyc3RfaW5pdChtZ3IpOwogICAgICAgICBpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAibWlYYXJ0IGNvdWxkIG5vdCBiZSBzZXQgdXBcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtaVhhcnQgY291bGQgbm90IGJlIHNldCB1cFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01ODEsMTYgKzU4Nyw2IEBACiAvKiBtaVhhcnQgaHdkZXAgaW50ZXJmYWNlIGlkIHN0cmluZyAqLwogI2RlZmluZSBTTkRfTUlYQVJUX0hXREVQX0lEICAgICAgICJtaVhhcnQgTG9hZGVyIgogCi1zdGF0aWMgaW50IG1peGFydF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtaXhhcnRfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkJICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtNjQzLDggKzYzOSw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9NSVhBUlQ7CiAJaHctPnByaXZhdGVfZGF0YSA9IG1ncjsKLQlody0+b3BzLm9wZW4gPSBtaXhhcnRfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBtaXhhcnRfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSBtaXhhcnRfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gbWl4YXJ0X2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwppbmRleCA1MGM5ZjhhLi41MjJhMDQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYworKysgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwpAQCAtMTY2OCw5ICsxNjY4LDkgQEAKIAkJfQogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTzoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCmluZGV4IDFhYjgzM2YuLjg0ZWYxMzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwpAQCAtNDUsNiArNDUsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpZmllcl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMCkgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpIH0sCisJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaGlmaWVyX2lkcyk7CkBAIC0xNTEsNyArMTUyLDYgQEAKIAkuc2hvcnRuYW1lID0gIkMtTWVkaWEgQ01JODc4NyIsCiAJLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlvIiwKIAkuY2hpcCA9ICJDTUk4Nzg4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaW5pdCA9IGhpZmllcl9pbml0LAogCS5jb250cm9sX2ZpbHRlciA9IGhpZmllcl9jb250cm9sX2ZpbHRlciwKIAkuY2xlYW51cCA9IGhpZmllcl9jbGVhbnVwLApAQCAtMTczLDYgKzE3MywxMyBAQAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAorc3RhdGljIGludCBfX2RldmluaXQgZ2V0X2hpZmllcl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwljaGlwLT5tb2RlbCA9IG1vZGVsX2hpZmllcjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgaGlmaWVyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewpAQCAtMTg1LDcgKzE5Miw4IEBACiAJCSsrZGV2OwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sICZtb2RlbF9oaWZpZXIsIDApOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBoaWZpZXJfaWRzLCBnZXRfaGlmaWVyX21vZGVsKTsKIAlpZiAoZXJyID49IDApCiAJCSsrZGV2OwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwppbmRleCBkZTk5OWM2Li43MmRiNGMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQy1NZWRpYSBDTUk4Nzg4IGRyaXZlciBmb3IgQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gYW5kIGZvciB0aGUgWC1NZXJpZGlhbgorICogQy1NZWRpYSBDTUk4Nzg4IGRyaXZlciBmb3IgQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gYW5kIHNpbWlsYXIgbW9kZWxzCiAgKgogICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KICAqCkBAIC0yNiw2ICsyNiw3IEBACiAgKgogICogR1BJTyAwIC0+IERGUzAgb2YgQUs1Mzg1CiAgKiBHUElPIDEgLT4gREZTMSBvZiBBSzUzODUKKyAqIEdQSU8gOCAtPiBlbmFibGUgaGVhZHBob25lIGFtcGxpZmllciBvbiBIVC1PbWVnYSBtb2RlbHMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYxLDcgKzYyLDggQEAKIGVudW0gewogCU1PREVMX0NNRURJQV9SRUYsCS8qIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduICovCiAJTU9ERUxfTUVSSURJQU4sCQkvKiBBdXplblRlY2ggWC1NZXJpZGlhbiAqLwotCU1PREVMX0hBTE8sCQkvKiBIVC1PbWVnYSBDbGFybyBoYWxvICovCisJTU9ERUxfQ0xBUk8sCQkvKiBIVC1PbWVnYSBDbGFybyAqLworCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBveHlnZW5faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKQEAgLTc0LDggKzc2LDggQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNDdhLCAweGEwMTcpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MWE1OCwgMHgwOTEwKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDQxNWEsIDB4NTQzMSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX01FUklESUFOIH0sCi0JeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzYxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAotCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc4MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0hBTE8gfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3NjEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFSTyB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc4MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NMQVJPX0hBTE8gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgb3h5Z2VuX2lkcyk7CkBAIC04Niw2ICs4OCw4IEBACiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19ET1VCTEUJMHgwMDAxCiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19RVUFECTB4MDAwMgogCisjZGVmaW5lIEdQSU9fQ0xBUk9fSFAJCTB4MDEwMAorCiBzdHJ1Y3QgZ2VuZXJpY19kYXRhIHsKIAl1OCBhazQzOTZfY3RsMjsKIAl1MTYgc2F2ZWRfd204Nzg1X3JlZ2lzdGVyc1syXTsKQEAgLTE5NiwxMCArMjAwLDQ2IEBACiAJYWs1Mzg1X2luaXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsYXJvX2VuYWJsZV9ocChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCW1zbGVlcCgzMDApOworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsIEdQSU9fQ0xBUk9fSFApOworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fQ0xBUk9fSFApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X2luaXQoY2hpcCk7CisJd204Nzg1X2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19oYWxvX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfaW5pdChjaGlwKTsKKwlhazUzODVfaW5pdChjaGlwKTsKKwljbGFyb19lbmFibGVfaHAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIGdlbmVyaWNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogfQogCitzdGF0aWMgdm9pZCBjbGFyb19kaXNhYmxlX2hwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0NMQVJPX0hQKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9fY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWNsYXJvX2Rpc2FibGVfaHAoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwljbGFyb19kaXNhYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBnZW5lcmljX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCWFrNDM5Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKQEAgLTIxMSw2ICsyNTEsMTIgQEAKIAlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsYXJvX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwljbGFyb19lbmFibGVfaHAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9hazQzOTZfcGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTI5MywzMCArMzM5LDEwIEBACiAKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIoYWs0Mzk2X2RiX3NjYWxlLCBUTFZfREJfR0FJTl9NVVRFLCAwKTsKIAotc3RhdGljIGludCBnZW5lcmljX3Byb2JlKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCi17Ci0JaWYgKGRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOKSB7Ci0JCWNoaXAtPm1vZGVsLmluaXQgPSBtZXJpZGlhbl9pbml0OwotCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBtZXJpZGlhbl9yZXN1bWU7Ci0JCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7Ci0JCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8Ci0JCQkJCSAgICBQTEFZQkFDS18xX1RPX1NQRElGIHwKLQkJCQkJICAgIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKLQkJCQkJICAgIENBUFRVUkVfMV9GUk9NX1NQRElGOwotCX0KLQlpZiAoZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4gfHwgZHJpdmVyX2RhdGEgPT0gTU9ERUxfSEFMTykgewotCQljaGlwLT5tb2RlbC5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESTsKLQkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyB8PSBNSURJX09VVFBVVCB8IE1JRElfSU5QVVQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF9nZW5lcmljID0gewogCS5zaG9ydG5hbWUgPSAiQy1NZWRpYSBDTUk4Nzg4IiwKIAkubG9uZ25hbWUgPSAiQy1NZWRpYSBPeHlnZW4gSEQgQXVkaW8iLAogCS5jaGlwID0gIkNNSTg3ODgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCiAJLmluaXQgPSBnZW5lcmljX2luaXQsCiAJLmNsZWFudXAgPSBnZW5lcmljX2NsZWFudXAsCiAJLnJlc3VtZSA9IGdlbmVyaWNfcmVzdW1lLApAQCAtMzQxLDYgKzM2Nyw0MiBAQAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAorc3RhdGljIGludCBfX2RldmluaXQgZ2V0X294eWdlbl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwljaGlwLT5tb2RlbCA9IG1vZGVsX2dlbmVyaWM7CisJc3dpdGNoIChpZC0+ZHJpdmVyX2RhdGEpIHsKKwljYXNlIE1PREVMX01FUklESUFOOgorCQljaGlwLT5tb2RlbC5pbml0ID0gbWVyaWRpYW5faW5pdDsKKwkJY2hpcC0+bW9kZWwucmVzdW1lID0gbWVyaWRpYW5fcmVzdW1lOworCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOworCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRiB8CisJCQkJCSAgICBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8CisJCQkJCSAgICBDQVBUVVJFXzFfRlJPTV9TUERJRjsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9DTEFSTzoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IGNsYXJvX2luaXQ7CisJCWNoaXAtPm1vZGVsLmNsZWFudXAgPSBjbGFyb19jbGVhbnVwOworCQljaGlwLT5tb2RlbC5zdXNwZW5kID0gY2xhcm9fc3VzcGVuZDsKKwkJY2hpcC0+bW9kZWwucmVzdW1lID0gY2xhcm9fcmVzdW1lOworCQlicmVhazsKKwljYXNlIE1PREVMX0NMQVJPX0hBTE86CisJCWNoaXAtPm1vZGVsLmluaXQgPSBjbGFyb19oYWxvX2luaXQ7CisJCWNoaXAtPm1vZGVsLmNsZWFudXAgPSBjbGFyb19jbGVhbnVwOworCQljaGlwLT5tb2RlbC5zdXNwZW5kID0gY2xhcm9fc3VzcGVuZDsKKwkJY2hpcC0+bW9kZWwucmVzdW1lID0gY2xhcm9fcmVzdW1lOworCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOworCQlicmVhazsKKwl9CisJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTiB8fAorCSAgICBpZC0+ZHJpdmVyX2RhdGEgPT0gTU9ERUxfQ0xBUk9fSEFMTykgeworCQljaGlwLT5tb2RlbC5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESTsKKwkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyB8PSBNSURJX09VVFBVVCB8IE1JRElfSU5QVVQ7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX294eWdlbl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CkBAIC0zNTMsOCArNDE1LDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwKLQkJCSAgICAgICAmbW9kZWxfZ2VuZXJpYywgcGNpX2lkLT5kcml2ZXJfZGF0YSk7CisJZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIG94eWdlbl9pZHMsIGdldF9veHlnZW5fbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmggYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCmluZGV4IDE5MTA3YzYuLmJkNjE1ZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaApAQCAtMTgsNiArMTgsOCBAQAogCiAjZGVmaW5lIE9YWUdFTl9JT19TSVpFCTB4MTAwCiAKKyNkZWZpbmUgT1hZR0VOX0VFUFJPTV9JRAkweDQzNGQJLyogIkNNIiAqLworCiAvKiBtb2RlbC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIG91dHB1dHMvaW5wdXRzICovCiAjZGVmaW5lIFBMQVlCQUNLXzBfVE9fSTJTCTB4MDAwMQogICAgICAvKiBQTEFZQkFDS18wX1RPX0FDOTdfMAkJbm90IGltcGxlbWVudGVkICovCkBAIC00OSw3ICs1MSwxMyBAQAogCS5zdWJ2ZW5kb3IgPSBzdiwgXAogCS5zdWJkZXZpY2UgPSBzZAogCisjZGVmaW5lIEJST0tFTl9FRVBST01fRFJJVkVSX0RBVEEgKCh1bnNpZ25lZCBsb25nKS0xKQorI2RlZmluZSBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gXAorCU9YWUdFTl9QQ0lfU1VCSUQoUENJX1ZFTkRPUl9JRF9DTUVESUEsIDB4ODc4OCksIFwKKwkuZHJpdmVyX2RhdGEgPSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBCisKIHN0cnVjdCBwY2lfZGV2Oworc3RydWN0IHBjaV9kZXZpY2VfaWQ7CiBzdHJ1Y3Qgc25kX2NhcmQ7CiBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW07CiBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZTsKQEAgLTYyLDggKzcwLDYgQEAKIAljb25zdCBjaGFyICpzaG9ydG5hbWU7CiAJY29uc3QgY2hhciAqbG9uZ25hbWU7CiAJY29uc3QgY2hhciAqY2hpcDsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQlpbnQgKCpwcm9iZSkoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSk7CiAJdm9pZCAoKmluaXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCWludCAoKmNvbnRyb2xfZmlsdGVyKShzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpOwogCWludCAoKm1peGVyX2luaXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwpAQCAtODMsNiArODksNyBAQAogCXZvaWQgKCphYzk3X3N3aXRjaCkoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbXV0ZSk7CiAJY29uc3QgdW5zaWduZWQgaW50ICpkYWNfdGx2OworCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV9kYXRhOwogCXNpemVfdCBtb2RlbF9kYXRhX3NpemU7CiAJdW5zaWduZWQgaW50IGRldmljZV9jb25maWc7CiAJdTggZGFjX2NoYW5uZWxzOwpAQCAtMTM0LDggKzE0MSwxMiBAQAogLyogb3h5Z2VuX2xpYi5jICovCiAKIGludCBveHlnZW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCBpbmRleCwgY2hhciAqaWQsCi0JCSAgICAgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqbW9kZWwsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSk7CisJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywKKwkJICAgICBpbnQgKCpnZXRfbW9kZWwpKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkCisJCQkJICAgICApCisJCSAgICApOwogdm9pZCBveHlnZW5fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBveHlnZW5fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaSwgcG1fbWVzc2FnZV90IHN0YXRlKTsKQEAgLTE4MCw2ICsxOTEsOSBAQAogdm9pZCBveHlnZW5fcmVzZXRfdWFydChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIHZvaWQgb3h5Z2VuX3dyaXRlX3VhcnQoc3RydWN0IG94eWdlbiAqY2hpcCwgdTggZGF0YSk7CiAKK3UxNiBveHlnZW5fcmVhZF9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4KTsKK3ZvaWQgb3h5Z2VuX3dyaXRlX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB2YWx1ZSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBveHlnZW5fc2V0X2JpdHM4KHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbHVlKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKaW5kZXggMzEyNmM0Yi4uYzFlYjkyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCkBAIC0yNTQsMyArMjU0LDM0IEBACiAJX3dyaXRlX3VhcnQoY2hpcCwgMCwgZGF0YSk7CiB9CiBFWFBPUlRfU1lNQk9MKG94eWdlbl93cml0ZV91YXJ0KTsKKwordTE2IG94eWdlbl9yZWFkX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisKKwlveHlnZW5fd3JpdGU4KGNoaXAsIE9YWUdFTl9FRVBST01fQ09OVFJPTCwKKwkJICAgICAgaW5kZXggfCBPWFlHRU5fRUVQUk9NX0RJUl9SRUFEKTsKKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMTAwOyArK3RpbWVvdXQpIHsKKwkJdWRlbGF5KDEpOworCQlpZiAoIShveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX0VFUFJPTV9TVEFUVVMpCisJCSAgICAgICYgT1hZR0VOX0VFUFJPTV9CVVNZKSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fRUVQUk9NX0RBVEEpOworfQorCit2b2lkIG94eWdlbl93cml0ZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisKKwlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fRUVQUk9NX0RBVEEsIHZhbHVlKTsKKwlveHlnZW5fd3JpdGU4KGNoaXAsIE9YWUdFTl9FRVBST01fQ09OVFJPTCwKKwkJICAgICAgaW5kZXggfCBPWFlHRU5fRUVQUk9NX0RJUl9XUklURSk7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwOyArK3RpbWVvdXQpIHsKKwkJbXNsZWVwKDEpOworCQlpZiAoIShveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX0VFUFJPTV9TVEFUVVMpCisJCSAgICAgICYgT1hZR0VOX0VFUFJPTV9CVVNZKSkKKwkJCXJldHVybjsKKwl9CisJc25kX3ByaW50ayhLRVJOX0VSUiAiRUVQUk9NIHdyaXRlIHRpbWVvdXRcbiIpOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYwppbmRleCA4NGY0ODFkLi4zMTIyNTFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYwpAQCAtMzQsNiArMzQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDLU1lZGlhIENNSTg3ODggaGVscGVyIGxpYnJhcnkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIAorI2RlZmluZSBEUklWRVIgIm94eWdlbiIKIAogc3RhdGljIGlubGluZSBpbnQgb3h5Z2VuX3VhcnRfaW5wdXRfcmVhZHkoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKQEAgLTI0Myw2ICsyNDQsNjIgQEAKICNkZWZpbmUgb3h5Z2VuX3Byb2NfaW5pdChjaGlwKQogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqCitveHlnZW5fc2VhcmNoX3BjaV9pZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHNbXSkKK3sKKwl1MTYgc3ViZGV2aWNlOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIEVFUFJPTSBwaW5zIGFyZSBhdmFpbGFibGUsIGkuZS4sIG5vdCB1c2VkIGZvciBTUEkuCisJICogKFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB3ZSBpbml0aWFsaXplIG9yIHVzZSBTUEkuKQorCSAqLworCW94eWdlbl9jbGVhcl9iaXRzOChjaGlwLCBPWFlHRU5fRlVOQ1RJT04sCisJCQkgICBPWFlHRU5fRlVOQ1RJT05fRU5BQkxFX1NQSV80XzUpOworCS8qCisJICogUmVhZCB0aGUgc3Vic3lzdGVtIGRldmljZSBJRCBkaXJlY3RseSBmcm9tIHRoZSBFRVBST00sIGJlY2F1c2UgdGhlCisJICogY2hpcCBkaWRuJ3QgaWYgdGhlIGZpcnN0IEVFUFJPTSB3b3JkIHdhcyBvdmVyd3JpdHRlbi4KKwkgKi8KKwlzdWJkZXZpY2UgPSBveHlnZW5fcmVhZF9lZXByb20oY2hpcCwgMik7CisJLyoKKwkgKiBXZSB1c2Ugb25seSB0aGUgc3Vic3lzdGVtIGRldmljZSBJRCBmb3Igc2VhcmNoaW5nIGJlY2F1c2UgaXQgaXMKKwkgKiB1bmlxdWUgZXZlbiB3aXRob3V0IHRoZSBzdWJzeXN0ZW0gdmVuZG9yIElELCB3aGljaCBtYXkgaGF2ZSBiZWVuCisJICogb3ZlcndyaXR0ZW4gaW4gdGhlIEVFUFJPTS4KKwkgKi8KKwlmb3IgKDsgaWRzLT52ZW5kb3I7ICsraWRzKQorCQlpZiAoaWRzLT5zdWJkZXZpY2UgPT0gc3ViZGV2aWNlICYmCisJCSAgICBpZHMtPmRyaXZlcl9kYXRhICE9IEJST0tFTl9FRVBST01fRFJJVkVSX0RBVEEpCisJCQlyZXR1cm4gaWRzOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBveHlnZW5fcmVzdG9yZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpZiAob3h5Z2VuX3JlYWRfZWVwcm9tKGNoaXAsIDApICE9IE9YWUdFTl9FRVBST01fSUQpIHsKKwkJLyoKKwkJICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbmx5IHdoZW4gYSBrbm93biBjYXJkIG1vZGVsIGhhcworCQkgKiBiZWVuIGRldGVjdGVkLCBpLmUuLCB3ZSBrbm93IHRoZXJlIGlzIGEgdmFsaWQgc3Vic3lzdGVtCisJCSAqIHByb2R1Y3QgSUQgYXQgaW5kZXggMiBpbiB0aGUgRUVQUk9NLiAgVGhlcmVmb3JlLCB3ZSBoYXZlCisJCSAqIGJlZW4gYWJsZSB0byBkZWR1Y2UgdGhlIGNvcnJlY3Qgc3Vic3lzdGVtIHZlbmRvciBJRCwgYW5kCisJCSAqIHRoaXMgaXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIEVFUFJPTQorCQkgKiBjb250ZW50cy4KKwkJICovCisJCW94eWdlbl93cml0ZV9lZXByb20oY2hpcCwgMSwgaWQtPnN1YnZlbmRvcik7CisJCW94eWdlbl93cml0ZV9lZXByb20oY2hpcCwgMCwgT1hZR0VOX0VFUFJPTV9JRCk7CisKKwkJb3h5Z2VuX3NldF9iaXRzOChjaGlwLCBPWFlHRU5fTUlTQywKKwkJCQkgT1hZR0VOX01JU0NfV1JJVEVfUENJX1NVQklEKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsCisJCQkJICAgICAgaWQtPnN1YnZlbmRvcik7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9TVUJTWVNURU1fSUQsCisJCQkJICAgICAgaWQtPnN1YmRldmljZSk7CisJCW94eWdlbl9jbGVhcl9iaXRzOChjaGlwLCBPWFlHRU5fTUlTQywKKwkJCQkgICBPWFlHRU5fTUlTQ19XUklURV9QQ0lfU1VCSUQpOworCisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFRVBST00gSUQgcmVzdG9yZWRcbiIpOworCX0KK30KKwogc3RhdGljIHZvaWQgb3h5Z2VuX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTQ0NiwzMCArNTAzLDMzIEBACiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAljaGlwLT5tb2RlbC5jbGVhbnVwKGNoaXApOworCWtmcmVlKGNoaXAtPm1vZGVsX2RhdGEpOwogCW11dGV4X2Rlc3Ryb3koJmNoaXAtPm11dGV4KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiB9CiAKIGludCBveHlnZW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCBpbmRleCwgY2hhciAqaWQsCi0JCSAgICAgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqbW9kZWwsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKKwkJICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLAorCQkgICAgIGludCAoKmdldF9tb2RlbCkoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQKKwkJCQkgICAgICkKKwkJICAgICkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IG94eWdlbiAqY2hpcDsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgbW9kZWwtPm93bmVyLAotCQkJICAgIHNpemVvZiAqY2hpcCArIG1vZGVsLT5tb2RlbF9kYXRhX3NpemUpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgb3duZXIsIHNpemVvZigqY2hpcCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+cGNpID0gcGNpOwogCWNoaXAtPmlycSA9IC0xOwotCWNoaXAtPm1vZGVsID0gKm1vZGVsOwotCWNoaXAtPm1vZGVsX2RhdGEgPSBjaGlwICsgMTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCW11dGV4X2luaXQoJmNoaXAtPm11dGV4KTsKIAlJTklUX1dPUksoJmNoaXAtPnNwZGlmX2lucHV0X2JpdHNfd29yaywKQEAgLTQ4MSw3ICs1NDEsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9jYXJkOwogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIG1vZGVsLT5jaGlwKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgRFJJVkVSKTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgcmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzXG4iKTsKIAkJZ290byBlcnJfcGNpX2VuYWJsZTsKQEAgLTQ5NSwyMCArNTU1LDM0IEBACiAJfQogCWNoaXAtPmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAorCXBjaV9pZCA9IG94eWdlbl9zZWFyY2hfcGNpX2lkKGNoaXAsIGlkcyk7CisJaWYgKCFwY2lfaWQpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisJfQorCW94eWdlbl9yZXN0b3JlX2VlcHJvbShjaGlwLCBwY2lfaWQpOworCWVyciA9IGdldF9tb2RlbChjaGlwLCBwY2lfaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9wY2lfcmVnaW9uczsKKworCWlmIChjaGlwLT5tb2RlbC5tb2RlbF9kYXRhX3NpemUpIHsKKwkJY2hpcC0+bW9kZWxfZGF0YSA9IGt6YWxsb2MoY2hpcC0+bW9kZWwubW9kZWxfZGF0YV9zaXplLAorCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjaGlwLT5tb2RlbF9kYXRhKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisJCX0KKwl9CisKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBveHlnZW5fY2FyZF9mcmVlOwogCi0JaWYgKGNoaXAtPm1vZGVsLnByb2JlKSB7Ci0JCWVyciA9IGNoaXAtPm1vZGVsLnByb2JlKGNoaXAsIGRyaXZlcl9kYXRhKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl9jYXJkOwotCX0KIAlveHlnZW5faW5pdChjaGlwKTsKIAljaGlwLT5tb2RlbC5pbml0KGNoaXApOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIG94eWdlbl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJICBjaGlwLT5tb2RlbC5jaGlwLCBjaGlwKTsKKwkJCSAgRFJJVkVSLCBjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpbnRlcnJ1cHQgJWRcbiIsIHBjaS0+aXJxKTsKIAkJZ290byBlcnJfY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwppbmRleCA2Yzg3MGMxLi5iYzVjZTExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCkBAIC0xMTIsNiArMTEyLDM0IEBACiAgKiBDUzQzNjJBOiBBRDAgPC0gMAogICovCiAKKy8qCisgKiBYb25hciBFc3NlbmNlIFNUWAorICogLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDTUk4Nzg4OgorICoKKyAqIEnCskMgPC0+IFBDTTE3OTJBCisgKgorICogR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudAorICoKKyAqIEdQSU8gMCAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDEgLT4gcm91dGUgSFAgdG8gZnJvbnQgcGFuZWwgKDApIG9yIHJlYXIgamFjayAoMSkKKyAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKKyAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKKyAqIEdQSU8gNyAtPiByb3V0ZSBvdXRwdXQgdG8gc3BlYWtlciBqYWNrcyAoMCkgb3IgSFAgKDEpCisgKiBHUElPIDggLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCisgKgorICogUENNMTc5MkE6CisgKgorICogQUQwIDwtIDAKKyAqCisgKiBINiBkYXVnaHRlcmJvYXJkCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogR1BJTyA0IDwtIDAKKyAqIEdQSU8gNSA8LSAwCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTE1Miw2ICsxODAsNyBAQAogCU1PREVMX0RYLAogCU1PREVMX0hEQVYsCS8qIHdpdGhvdXQgZGF1Z2h0ZXJib2FyZCAqLwogCU1PREVMX0hEQVZfSDYsCS8qIHdpdGggSDYgZGF1Z2h0ZXJib2FyZCAqLworCU1PREVMX1NUWCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4b25hcl9pZHNbXSBfX2RldmluaXRkYXRhID0gewpAQCAtMTYwLDYgKzE4OSw4IEBACiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MmI3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfRDJYIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzE0KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfSERBViB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM0ZiksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0QxIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfU1RYIH0sCisJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgeG9uYXJfaWRzKTsKQEAgLTE4MywxMiArMjE0LDE0IEBACiAjZGVmaW5lIEdQSU9fSERBVl9EQl9INgkJMHgwMDAwCiAjZGVmaW5lIEdQSU9fSERBVl9EQl9YWAkJMHgwMDIwCiAKKyNkZWZpbmUgR1BJT19TVF9IUF9SRUFSCQkweDAwMDIKKyNkZWZpbmUgR1BJT19TVF9IUAkJMHgwMDgwCisKICNkZWZpbmUgSTJDX0RFVklDRV9QQ00xNzk2KGkpCSgweDk4ICsgKChpKSA8PCAxKSkJLyogMTAwMTEsIEFEeD1pLCAvVz0wICovCiAjZGVmaW5lIEkyQ19ERVZJQ0VfQ1M0Mzk4CTB4OWUJLyogMTAwMTEsIEFEMT0xLCBBRDA9MSwgL1c9MCAqLwogI2RlZmluZSBJMkNfREVWSUNFX0NTNDM2MkEJMHgzMAkvKiAwMDExMDAsIEFEMD0wLCAvVz0wICovCiAKIHN0cnVjdCB4b25hcl9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgbW9kZWw7CiAJdW5zaWduZWQgaW50IGFudGlfcG9wX2RlbGF5OwogCXVuc2lnbmVkIGludCBkYWNzOwogCXUxNiBvdXRwdXRfZW5hYmxlX2JpdDsKQEAgLTMzNCwxNSArMzY3LDkgQEAKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CiAKIAlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDMwMDsKKwlkYXRhLT5kYWNzID0gNDsKIAlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRDJfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5wY20xNzk2X292ZXJzYW1wbGluZyA9IFBDTTE3OTZfT1NfNjQ7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0QyWCkgewotCQlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSU9fREFUQTsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJT19JTlRFUlJVUFRfTUFTSzsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSU9fRDJYX0VYVF9QT1dFUjsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0QyWF9FWFRfUE9XRVIpOwotCX0KIAogCXBjbTE3OTZfaW5pdChjaGlwKTsKIApAQCAtMzU1LDYgKzM4MiwxOCBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfZDJ4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSU9fREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElPX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElPX0QyWF9FWFRfUE9XRVI7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLCBHUElPX0QyWF9FWFRfUE9XRVIpOworCisJeG9uYXJfZDJfaW5pdChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX2NzNDM2MmFfdm9sdW1lcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXU4IG11dGU7CkBAIC00MjIsMTEgKzQ2MSw2IEBACiAJZGF0YS0+Y3M0Mzk4X2ZtID0gQ1M0Mzk4X0ZNX1NJTkdMRSB8IENTNDM5OF9ERU1fTk9ORSB8IENTNDM5OF9ESUZfTEpVU1Q7CiAJZGF0YS0+Y3M0MzYyYV9mbSA9IENTNDM2MkFfRk1fU0lOR0xFIHwKIAkJQ1M0MzYyQV9BVEFQSV9CX1IgfCBDUzQzNjJBX0FUQVBJX0FfTDsKLQlpZiAoZGF0YS0+bW9kZWwgPT0gTU9ERUxfRFgpIHsKLQkJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwotCQlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJX0RYX0VYVF9QT1dFUjsKLQl9CiAKIAlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CkBAIC00NDcsNiArNDgxLDE3IEBACiAJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNTM2MSIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9keF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7CisKKwl4b25hcl9kMV9pbml0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9oZGF2X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC00NTgsNiArNTAzLDcgQEAKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKIAogCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMTAwOworCWRhdGEtPmRhY3MgPSBjaGlwLT5tb2RlbC5wcml2YXRlX2RhdGEgPT0gTU9ERUxfSERBVl9INiA/IDQgOiAxOwogCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EWF9PVVRQVVRfRU5BQkxFOwogCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CiAJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwpAQCAtNDg0LDYgKzUzMCwzNiBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3R4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CisJCSAgICAgICBPWFlHRU5fMldJUkVfSU5URVJSVVBUX01BU0sgfAorCQkgICAgICAgT1hZR0VOXzJXSVJFX1NQRUVEX0ZBU1QpOworCisJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAxMDA7CisJZGF0YS0+ZGFjcyA9IDE7CisJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RYX09VVFBVVF9FTkFCTEU7CisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKKwlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7CisJZGF0YS0+cGNtMTc5Nl9vdmVyc2FtcGxpbmcgPSBQQ00xNzk2X09TXzY0OworCisJcGNtMTc5Nl9pbml0KGNoaXApOworCisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCSAgR1BJT19EWF9JTlBVVF9ST1VURSB8IEdQSU9fU1RfSFBfUkVBUiB8IEdQSU9fU1RfSFApOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwKKwkJCSAgICBHUElPX0RYX0lOUFVUX1JPVVRFIHwgR1BJT19TVF9IUF9SRUFSIHwgR1BJT19TVF9IUCk7CisKKwl4b25hcl9jb21tb25faW5pdChjaGlwKTsKKworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJQQ00xNzkyQSIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzODEiKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZGlzYWJsZV9vdXRwdXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC01MTEsNiArNTg3LDExIEBACiAJeG9uYXJfZGlzYWJsZV9vdXRwdXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl4b25hcl9kaXNhYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZDJfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXhvbmFyX2QyX2NsZWFudXAoY2hpcCk7CkBAIC01MjcsNiArNjA4LDExIEBACiAJbXNsZWVwKDIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfc3RfY2xlYW51cChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZDJfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJcGNtMTc5Nl9pbml0KGNoaXApOwpAQCAtNTU0LDYgKzY0MCwxMiBAQAogCXhvbmFyX2VuYWJsZV9vdXRwdXQoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXBjbTE3OTZfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9oZGF2X3BjbV9oYXJkd2FyZV9maWx0ZXIodW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpoYXJkd2FyZSkKIHsKQEAgLTczMyw2ICs4MjUsNzIgQEAKIAkucHJpdmF0ZV92YWx1ZSA9IEdQSU9fRFhfRlJPTlRfUEFORUwsCiB9OwogCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbM10gPSB7CisJCSJTcGVha2VycyIsICJIZWFkcGhvbmVzIiwgIkZQIEhlYWRwaG9uZXMiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMykKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXUxNiBncGlvOworCisJZ3BpbyA9IG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSk7CisJaWYgKCEoZ3BpbyAmIEdQSU9fU1RfSFApKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKKwllbHNlIGlmIChncGlvICYgR1BJT19TVF9IUF9SRUFSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwl1MTYgZ3Bpb19vbGQsIGdwaW87CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJZ3Bpb19vbGQgPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCWdwaW8gPSBncGlvX29sZDsKKwlzd2l0Y2ggKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKKwljYXNlIDA6CisJCWdwaW8gJj0gfihHUElPX1NUX0hQIHwgR1BJT19TVF9IUF9SRUFSKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlncGlvIHw9IEdQSU9fU1RfSFAgfCBHUElPX1NUX0hQX1JFQVI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZ3BpbyA9IChncGlvIHwgR1BJT19TVF9IUCkgJiB+R1BJT19TVF9IUF9SRUFSOworCQlicmVhazsKKwl9CisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgZ3Bpbyk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGdwaW8gIT0gZ3Bpb19vbGQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdF9vdXRwdXRfc3dpdGNoID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkFuYWxvZyBPdXRwdXQiLAorCS5pbmZvID0gc3Rfb3V0cHV0X3N3aXRjaF9pbmZvLAorCS5nZXQgPSBzdF9vdXRwdXRfc3dpdGNoX2dldCwKKwkucHV0ID0gc3Rfb3V0cHV0X3N3aXRjaF9wdXQsCit9OworCiBzdGF0aWMgdm9pZCB4b25hcl9saW5lX21pY19hYzk3X3N3aXRjaChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbXV0ZSkKIHsKQEAgLTc0NSw4ICs5MDMsOCBAQAogCX0KIH0KIAotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHBjbTE3OTZfZGJfc2NhbGUsIC0xMjAwMCwgNTAsIDApOwotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGNzNDM2MmFfZGJfc2NhbGUsIC0xMjcwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20xNzk2X2RiX3NjYWxlLCAtNjAwMCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGNzNDM2MmFfZGJfc2NhbGUsIC02MDAwLCAxMDAsIDApOwogCiBzdGF0aWMgaW50IHhvbmFyX2QyX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKIHsKQEAgLTc2Myw2ICs5MjEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB4b25hcl9zdF9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCit7CisJaWYgKCFzdHJuY21wKHRlbXBsYXRlLT5uYW1lLCAiQ0QgQ2FwdHVyZSAiLCAxMSkpCisJCXJldHVybiAxOyAvKiBubyBDRCBpbnB1dCAqLworCWlmICghc3RyY21wKHRlbXBsYXRlLT5uYW1lLCAiU3RlcmVvIFVwbWl4aW5nIikpCisJCXJldHVybiAxOyAvKiBzdGVyZW8gb25seSAtIHdlIGRvbid0IG5lZWQgdXBtaXhpbmcgKi8KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB4b25hcl9kMl9taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmYWx0X3N3aXRjaCwgY2hpcCkpOwpAQCAtNzczLDUxICs5NDAsMTQgQEAKIAlyZXR1cm4gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZmcm9udF9wYW5lbF9zd2l0Y2gsIGNoaXApKTsKIH0KIAotc3RhdGljIGludCB4b25hcl9tb2RlbF9wcm9iZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQorc3RhdGljIGludCB4b25hcl9zdF9taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7Ci0JCVtNT0RFTF9EMV0JPSAiWG9uYXIgRDEiLAotCQlbTU9ERUxfRFhdCT0gIlhvbmFyIERYIiwKLQkJW01PREVMX0QyXQk9ICJYb25hciBEMiIsCi0JCVtNT0RFTF9EMlhdCT0gIlhvbmFyIEQyWCIsCi0JCVtNT0RFTF9IREFWXQk9ICJYb25hciBIREFWMS4zIiwKLQkJW01PREVMX0hEQVZfSDZdCT0gIlhvbmFyIEhEQVYxLjMrSDYiLAotCX07Ci0Jc3RhdGljIGNvbnN0IHU4IGRhY3NbXSA9IHsKLQkJW01PREVMX0QxXQk9IDIsCi0JCVtNT0RFTF9EWF0JPSAyLAotCQlbTU9ERUxfRDJdCT0gNCwKLQkJW01PREVMX0QyWF0JPSA0LAotCQlbTU9ERUxfSERBVl0JPSAxLAotCQlbTU9ERUxfSERBVl9INl0JPSA0LAotCX07Ci0Jc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCi0JZGF0YS0+bW9kZWwgPSBkcml2ZXJfZGF0YTsKLQlpZiAoZGF0YS0+bW9kZWwgPT0gTU9ERUxfSERBVikgewotCQlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCi0JCQkJICAgIEdQSU9fSERBVl9EQl9NQVNLKTsKLQkJc3dpdGNoIChveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpICYKLQkJCUdQSU9fSERBVl9EQl9NQVNLKSB7Ci0JCWNhc2UgR1BJT19IREFWX0RCX0g2OgotCQkJZGF0YS0+bW9kZWwgPSBNT0RFTF9IREFWX0g2OwotCQkJYnJlYWs7Ci0JCWNhc2UgR1BJT19IREFWX0RCX1hYOgotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5rbm93biBkYXVnaHRlcmJvYXJkXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotCi0JZGF0YS0+ZGFjcyA9IGRhY3NbZGF0YS0+bW9kZWxdOwotCWNoaXAtPm1vZGVsLnNob3J0bmFtZSA9IG5hbWVzW2RhdGEtPm1vZGVsXTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzdF9vdXRwdXRfc3dpdGNoLCBjaGlwKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2QyID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IHhvbmFyX21vZGVsX3Byb2JlLAogCS5pbml0ID0geG9uYXJfZDJfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kMl9jb250cm9sX2ZpbHRlciwKIAkubWl4ZXJfaW5pdCA9IHhvbmFyX2QyX21peGVyX2luaXQsCkBAIC04MzcsOCArOTY3LDggQEAKIAkJCSBNSURJX09VVFBVVCB8CiAJCQkgTUlESV9JTlBVVCwKIAkuZGFjX2NoYW5uZWxzID0gOCwKLQkuZGFjX3ZvbHVtZV9taW4gPSAweDBmLAotCS5kYWNfdm9sdW1lX21heCA9IDB4ZmYsCisJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKKwkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCiAJLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJLAogCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEkgfAogCQkJICBPWFlHRU5fRlVOQ1RJT05fRU5BQkxFX1NQSV80XzUsCkBAIC04NDksOCArOTc5LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2QxID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IHhvbmFyX21vZGVsX3Byb2JlLAogCS5pbml0ID0geG9uYXJfZDFfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kMV9jb250cm9sX2ZpbHRlciwKIAkubWl4ZXJfaW5pdCA9IHhvbmFyX2QxX21peGVyX2luaXQsCkBAIC04NjgsNyArOTk2LDcgQEAKIAkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKIAkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKIAkuZGFjX2NoYW5uZWxzID0gOCwKLQkuZGFjX3ZvbHVtZV9taW4gPSAwLAorCS5kYWNfdm9sdW1lX21pbiA9IDEyNyAtIDYwLAogCS5kYWNfdm9sdW1lX21heCA9IDEyNywKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCiAJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCkBAIC04NzgsOCArMTAwNiw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9oZGF2ID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5wcm9iZSA9IHhvbmFyX21vZGVsX3Byb2JlLAogCS5pbml0ID0geG9uYXJfaGRhdl9pbml0LAogCS5jbGVhbnVwID0geG9uYXJfaGRhdl9jbGVhbnVwLAogCS5zdXNwZW5kID0geG9uYXJfaGRhdl9zdXNwZW5kLApAQCAtODk3LDE2ICsxMDIzLDQzIEBACiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMHgwZiwKLQkuZGFjX3ZvbHVtZV9tYXggPSAweGZmLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAogCS5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCiAJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB4b25hcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAotCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfc3QgPSB7CisJLmxvbmduYW1lID0gIkFzdXMgVmlydHVvc28gMTAwIiwKKwkuY2hpcCA9ICJBVjIwMCIsCisJLmluaXQgPSB4b25hcl9zdHhfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9zdF9jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IHhvbmFyX3N0X21peGVyX2luaXQsCisJLmNsZWFudXAgPSB4b25hcl9zdF9jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfc3Rfc3VzcGVuZCwKKwkucmVzdW1lID0geG9uYXJfc3RfcmVzdW1lLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9wY20xNzk2X3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfY3M1M3gxX3BhcmFtcywKKwkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfcGNtMTc5Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV9wY20xNzk2X211dGUsCisJLmFjOTdfc3dpdGNoID0geG9uYXJfbGluZV9taWNfYWM5N19zd2l0Y2gsCisJLmRhY190bHYgPSBwY20xNzk2X2RiX3NjYWxlLAorCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX2RhdGEpLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAorCS5kYWNfY2hhbm5lbHMgPSAyLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl8yV0lSRSwKKwkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKKwkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF94b25hcl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICpjb25zdCBtb2RlbHNbXSA9IHsKIAkJW01PREVMX0QxXQk9ICZtb2RlbF94b25hcl9kMSwKQEAgLTkxNCw3ICsxMDY3LDU3IEBACiAJCVtNT0RFTF9EMl0JPSAmbW9kZWxfeG9uYXJfZDIsCiAJCVtNT0RFTF9EMlhdCT0gJm1vZGVsX3hvbmFyX2QyLAogCQlbTU9ERUxfSERBVl0JPSAmbW9kZWxfeG9uYXJfaGRhdiwKKwkJW01PREVMX1NUWF0JPSAmbW9kZWxfeG9uYXJfc3QsCiAJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJW01PREVMX0QxXQk9ICJYb25hciBEMSIsCisJCVtNT0RFTF9EWF0JPSAiWG9uYXIgRFgiLAorCQlbTU9ERUxfRDJdCT0gIlhvbmFyIEQyIiwKKwkJW01PREVMX0QyWF0JPSAiWG9uYXIgRDJYIiwKKwkJW01PREVMX0hEQVZdCT0gIlhvbmFyIEhEQVYxLjMiLAorCQlbTU9ERUxfSERBVl9INl0JPSAiWG9uYXIgSERBVjEuMytINiIsCisJCVtNT0RFTF9TVFhdCT0gIlhvbmFyIEVzc2VuY2UgU1RYIiwKKwl9OworCXVuc2lnbmVkIGludCBtb2RlbCA9IGlkLT5kcml2ZXJfZGF0YTsKKworCWlmIChtb2RlbCA+PSBBUlJBWV9TSVpFKG1vZGVscykgfHwgIW1vZGVsc1ttb2RlbF0pCisJCXJldHVybiAtRUlOVkFMOworCWNoaXAtPm1vZGVsID0gKm1vZGVsc1ttb2RlbF07CisKKwlzd2l0Y2ggKG1vZGVsKSB7CisJY2FzZSBNT0RFTF9EMlg6CisJCWNoaXAtPm1vZGVsLmluaXQgPSB4b25hcl9kMnhfaW5pdDsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9EWDoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IHhvbmFyX2R4X2luaXQ7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfSERBVjoKKwkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7CisJCXN3aXRjaCAob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmCisJCQlHUElPX0hEQVZfREJfTUFTSykgeworCQljYXNlIEdQSU9fSERBVl9EQl9INjoKKwkJCW1vZGVsID0gTU9ERUxfSERBVl9INjsKKwkJCWJyZWFrOworCQljYXNlIEdQSU9fSERBVl9EQl9YWDoKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gZGF1Z2h0ZXJib2FyZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlicmVhazsKKwljYXNlIE1PREVMX1NUWDoKKwkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7CisJCWJyZWFrOworCX0KKworCWNoaXAtPm1vZGVsLnNob3J0bmFtZSA9IG5hbWVzW21vZGVsXTsKKwljaGlwLT5tb2RlbC5wcml2YXRlX2RhdGEgPSBtb2RlbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgeG9uYXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKIAlzdGF0aWMgaW50IGRldjsKIAlpbnQgZXJyOwogCkBAIC05MjQsMTAgKzExMjcsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCUJVR19PTihwY2lfaWQtPmRyaXZlcl9kYXRhID49IEFSUkFZX1NJWkUobW9kZWxzKSk7Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sCi0JCQkgICAgICAgbW9kZWxzW3BjaV9pZC0+ZHJpdmVyX2RhdGFdLAotCQkJICAgICAgIHBjaV9pZC0+ZHJpdmVyX2RhdGEpOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICB4b25hcl9pZHMsIGdldF94b25hcl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCAyN2NmMmMyLi44MGUwNjRhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtMTMzNCw2ICsxMzM0LDQwIEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIH0KIAorc3RhdGljIHZvaWQgcGN4aHJfcHJvY19ncGlvX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IGNoaXAtPm1ncjsKKwkvKiBjb21tYW5kcyBhdmFpbGFibGUgd2hlbiBlbWJlZGRlZCBEU1AgaXMgcnVubmluZyAqLworCWlmIChtZ3ItPmRzcF9sb2FkZWQgJiAoMSA8PCBQQ1hIUl9GSVJNV0FSRV9EU1BfTUFJTl9JTkRFWCkpIHsKKwkJLyogZ3BpbyBwb3J0cyBvbiBzdGVyZW8gYm9hcmRzIG9ubHkgYXZhaWxhYmxlICovCisJCWludCB2YWx1ZSA9IDA7CisJCWhyMjIyX3JlYWRfZ3BpbyhtZ3IsIDEsICZ2YWx1ZSk7CS8qIEdQSSAqLworCQlzbmRfaXByaW50ZihidWZmZXIsICJHUEk6IDB4JXhcbiIsIHZhbHVlKTsKKwkJaHIyMjJfcmVhZF9ncGlvKG1nciwgMCwgJnZhbHVlKTsJLyogR1AwICovCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkdQTzogMHgleFxuIiwgdmFsdWUpOworCX0gZWxzZQorCQlzbmRfaXByaW50ZihidWZmZXIsICJubyBmaXJtd2FyZSBsb2FkZWRcbiIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7Cit9CitzdGF0aWMgdm9pZCBwY3hocl9wcm9jX2dwb193cml0ZShzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBjeGhyX21nciAqbWdyID0gY2hpcC0+bWdyOworCWNoYXIgbGluZVs2NF07CisJaW50IHZhbHVlOworCS8qIGNvbW1hbmRzIGF2YWlsYWJsZSB3aGVuIGVtYmVkZGVkIERTUCBpcyBydW5uaW5nICovCisJaWYgKCEobWdyLT5kc3BfbG9hZGVkICYgKDEgPDwgUENYSFJfRklSTVdBUkVfRFNQX01BSU5fSU5ERVgpKSkKKwkJcmV0dXJuOworCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CisJCWlmIChzc2NhbmYobGluZSwgIkdQTzogMHgleCIsICZ2YWx1ZSkgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlocjIyMl93cml0ZV9ncG8obWdyLCB2YWx1ZSk7CS8qIEdQMCAqLworCX0KK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjeGhyX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwKQogewogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CkBAIC0xMzQyLDYgKzEzNzYsMTMgQEAKIAkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBwY3hocl9wcm9jX2luZm8pOwogCWlmICghIHNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJzeW5jIiwgJmVudHJ5KSkKIAkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBwY3hocl9wcm9jX3N5bmMpOworCS8qIGdwaW8gYXZhaWxhYmxlIG9uIHN0ZXJlbyBzb3VuZCBjYXJkcyBvbmx5ICovCisJaWYgKGNoaXAtPm1nci0+aXNfaHJfc3RlcmVvICYmCisJICAgICFzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAiZ3BpbyIsICZlbnRyeSkpIHsKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBwY3hocl9wcm9jX2dwaW9fcmVhZCk7CisJCWVudHJ5LT5jLnRleHQud3JpdGUgPSBwY3hocl9wcm9jX2dwb193cml0ZTsKKwkJZW50cnktPm1vZGUgfD0gU19JV1VTUjsKKwl9CiB9CiAvKiBlbmQgb2YgcHJvYyBpbnRlcmZhY2UgKi8KIApAQCAtMTUxMCwxMiArMTU1MSwxMiBAQAogCiAJCXNucHJpbnRmKHRtcGlkLCBzaXplb2YodG1waWQpLCAiJXMtJWQiLAogCQkJIGlkW2Rldl0gPyBpZFtkZXZdIDogY2FyZF9uYW1lLCBpKTsKLQkJY2FyZCA9IHNuZF9jYXJkX25ldyhpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCk7CisJCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JCWlmICghIGNhcmQpIHsKKwkJaWYgKGVyciA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBhbGxvY2F0ZSB0aGUgY2FyZCAlZFxuIiwgaSk7CiAJCQlwY3hocl9mcmVlKG1ncik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oCmluZGV4IDY5ZDg3ZGUuLmJkYTc3NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KIAotI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTgkJMHgwMDA5MDUJLyogMC45LjUgKi8KLSNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIwLjkuNSIJCS8qIDAuOS41ICovCisjZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OCQkweDAwMDkwNgkvKiAwLjkuNiAqLworI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTl9TVFJJTkcJIjAuOS42IgkJLyogMC45LjYgKi8KIAogCiAjZGVmaW5lIFBDWEhSX01BWF9DQVJEUwkJNgpAQCAtMTI0LDYgKzEyNCw3IEBACiAKIAl1bnNpZ25lZCBjaGFyIHhseF9jZmc7CQkvKiBjb3B5IG9mIFBDWEhSX1hMWF9DRkcgcmVnaXN0ZXIgKi8KIAl1bnNpZ25lZCBjaGFyIHhseF9zZWxtaWM7CS8qIGNvcHkgb2YgUENYSFJfWExYX1NFTE1JQyByZWdpc3RlciAqLworCXVuc2lnbmVkIGNoYXIgZHNwX3Jlc2V0OwkvKiBjb3B5IG9mIFBDWEhSX0RTUF9SRVNFVCByZWdpc3RlciAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaAppbmRleCBiYmJkNjZkLi5iZTAxNzM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciBEaWdpZ3JhbSBwY3hociBjb21wYXRpYmxlIHNvdW5kY2FyZHMKICAqCi0gKiBsb3cgbGV2ZWwgaW50ZXJmYWNlIHdpdGggaW50ZXJydXB0IGFucyBtZXNzYWdlIGhhbmRsaW5nCisgKiBsb3cgbGV2ZWwgaW50ZXJmYWNlIHdpdGggaW50ZXJydXB0IGFuZCBtZXNzYWdlIGhhbmRsaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IERpZ2lncmFtIDxhbHNhQGRpZ2lncmFtLmNvbT4KICAqCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCmluZGV4IDU5Mjc0M2EuLjE3Y2IxMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCkBAIC00NzEsMTYgKzQ3MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGN4aHJfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGN4aHJfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBwY3hocl9zZXR1cF9maXJtd2FyZShzdHJ1Y3QgcGN4aHJfbWdyICptZ3IpCiB7CiAJaW50IGVycjsKQEAgLTQ5NSw4ICs0ODUsNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfUENYSFI7CiAJaHctPnByaXZhdGVfZGF0YSA9IG1ncjsKLQlody0+b3BzLm9wZW4gPSBwY3hocl9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHBjeGhyX2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gcGN4aHJfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gcGN4aHJfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jCmluZGV4IGZmMDE5MTIuLjFjYjgyYzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jCkBAIC01Myw2ICs1Myw4IEBACiAjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9EU1AJMHgwMQogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfTVVURQkweDAyCiAjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9DT0RFQwkweDA4CisjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUCTUKKyNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX0dQT19NQVNLCTB4NjAKIAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9DRkcgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUENYSFJfQ0ZHX1NZTkNEU1BfTUFTSwkJMHg4MApAQCAtODEsNiArODMsOCBAQAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9TVEFUVVMgcmVnaXN0ZXIgLSBSRUFEICovCiAjZGVmaW5lIFBDWEhSX1NUQVRfU1JDX0xPQ0sJCTB4MDEKICNkZWZpbmUgUENYSFJfU1RBVF9MRVZFTF9JTgkJMHgwMgorI2RlZmluZSBQQ1hIUl9TVEFUX0dQSV9PRkZTRVQJCTIKKyNkZWZpbmUgUENYSFJfU1RBVF9HUElfTUFTSwkJMHgwQwogI2RlZmluZSBQQ1hIUl9TVEFUX01JQ19DQVBTCQkweDEwCiAvKiB2YWx1ZXMgZm9yIFBDSFJfWExYX1NUQVRVUyByZWdpc3RlciAtIFdSSVRFICovCiAjZGVmaW5lIFBDWEhSX1NUQVRfRlJFUV9TWU5DX01BU0sJMHgwMQpAQCAtMjkxLDEwICsyOTUsMTEgQEAKIAlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwKIAkJICAgIFBDWEhSX0RTUF9SRVNFVF9EU1ApOwogCW1zbGVlcCg1KTsKLQlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwKLQkJICAgIFBDWEhSX0RTUF9SRVNFVF9EU1AgIHwKLQkJICAgIFBDWEhSX0RTUF9SRVNFVF9NVVRFIHwKLQkJICAgIFBDWEhSX0RTUF9SRVNFVF9DT0RFQyk7CisJbWdyLT5kc3BfcmVzZXQgPSBQQ1hIUl9EU1BfUkVTRVRfRFNQICB8CisJCQkgUENYSFJfRFNQX1JFU0VUX01VVEUgfAorCQkJIFBDWEhSX0RTUF9SRVNFVF9DT0RFQzsKKwlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwgbWdyLT5kc3BfcmVzZXQpOworCS8qIGhyMjIyX3dyaXRlX2dwbyhtZ3IsIDApOyBkb2VzIHRoZSBzYW1lICovCiAJbXNsZWVwKDUpOwogCiAJLyogY29uZmlnIEFLTSAqLwpAQCAtNDk2LDYgKzUwMSwzMyBAQAogfQogCiAKK2ludCBocjIyMl9yZWFkX2dwaW8oc3RydWN0IHBjeGhyX21nciAqbWdyLCBpbnQgaXNfZ3BpLCBpbnQgKnZhbHVlKQoreworCWlmIChpc19ncGkpIHsKKwkJdW5zaWduZWQgY2hhciByZWcgPSBQQ1hIUl9JTlBCKG1nciwgUENYSFJfWExYX1NUQVRVUyk7CisJCSp2YWx1ZSA9IChpbnQpKHJlZyAmIFBDWEhSX1NUQVRfR1BJX01BU0spID4+CisJCQkgICAgICBQQ1hIUl9TVEFUX0dQSV9PRkZTRVQ7CisJfSBlbHNlIHsKKwkJKnZhbHVlID0gKGludCkobWdyLT5kc3BfcmVzZXQgJiBQQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0spID4+CisJCQkgUENYSFJfRFNQX1JFU0VUX0dQT19PRkZTRVQ7CisJfQorCXJldHVybiAwOworfQorCisKK2ludCBocjIyMl93cml0ZV9ncG8oc3RydWN0IHBjeGhyX21nciAqbWdyLCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciByZWcgPSBtZ3ItPmRzcF9yZXNldCAmIH5QQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0s7CisKKwlyZWcgfD0gKHVuc2lnbmVkIGNoYXIpKHZhbHVlIDw8IFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUKSAmCisJICAgICAgIFBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSzsKKworCVBDWEhSX09VVFBCKG1nciwgUENYSFJfRFNQX1JFU0VULCByZWcpOworCW1nci0+ZHNwX3Jlc2V0ID0gcmVnOworCXJldHVybiAwOworfQorCisKIGludCBocjIyMl91cGRhdGVfYW5hbG9nX2F1ZGlvX2xldmVsKHN0cnVjdCBzbmRfcGN4aHIgKmNoaXAsCiAJCQkJICAgIGludCBpc19jYXB0dXJlLCBpbnQgY2hhbm5lbCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmgKaW5kZXggNmIzMThiMi4uNWEzN2EwMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmgKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmgKQEAgLTMyLDYgKzMyLDkgQEAKIAkJCSAgICAgZW51bSBwY3hocl9jbG9ja190eXBlIGNsb2NrX3R5cGUsCiAJCQkgICAgIGludCAqc2FtcGxlX3JhdGUpOwogCitpbnQgaHIyMjJfcmVhZF9ncGlvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IGlzX2dwaSwgaW50ICp2YWx1ZSk7CitpbnQgaHIyMjJfd3JpdGVfZ3BvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBIUjIyMl9MSU5FX1BMQVlCQUNLX0xFVkVMX01JTgkJMAkvKiAtMjUuNSBkQiAqLwogI2RlZmluZSBIUjIyMl9MSU5FX1BMQVlCQUNLX1pFUk9fTEVWRUwJCTUxCS8qIDAuMCBkQiAqLwogI2RlZmluZSBIUjIyMl9MSU5FX1BMQVlCQUNLX0xFVkVMX01BWAkJOTkJLyogKzI0LjAgZEIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMKaW5kZXggMjQzNmUzNy4uZmVjMDQ5MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMKQEAgLTc4OSwxMSArNzg5LDE1IEBACiAJaWYgKG1nci0+dXNlX2Nsb2NrX3R5cGUgIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgewogCQltdXRleF9sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAkJbWdyLT51c2VfY2xvY2tfdHlwZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07Ci0JCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlKQorCQlyYXRlID0gMDsKKwkJaWYgKG1nci0+dXNlX2Nsb2NrX3R5cGUgIT0gUENYSFJfQ0xPQ0tfVFlQRV9JTlRFUk5BTCkgewogCQkJcGN4aHJfZ2V0X2V4dGVybmFsX2Nsb2NrKG1nciwgbWdyLT51c2VfY2xvY2tfdHlwZSwKIAkJCQkJCSAmcmF0ZSk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXJhdGUgPSBtZ3ItPnNhbXBsZV9yYXRlOworCQkJaWYgKCFyYXRlKQorCQkJCXJhdGUgPSA0ODAwMDsKKwkJfQogCQlpZiAocmF0ZSkgewogCQkJcGN4aHJfc2V0X2Nsb2NrKG1nciwgcmF0ZSk7CiAJCQlpZiAobWdyLT5zYW1wbGVfcmF0ZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwppbmRleCAzY2FhY2ZiLi42ZjEwMzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKKysrIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCkBAIC0yMTAyLDkgKzIxMDIsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9yaXB0aWRlX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGU3ZWYzYTEuLmQ3Yjk2NmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0xOTQxLDkgKzE5NDEsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHJtZTMyKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgcm1lMzIpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3JtZTMyX2NhcmRfZnJlZTsKIAlybWUzMiA9IChzdHJ1Y3Qgcm1lMzIgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXJtZTMyLT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggM2ZkZDQ4OC4uNTVmYjFjMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTIzNDgsOSArMjM0OCwxMCBAQAogCQlkZXYrKzsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBybWU5NikpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtZTk2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWU5Nl9jYXJkX2ZyZWU7CiAJcm1lOTYgPSAoc3RydWN0IHJtZTk2ICopY2FyZC0+cHJpdmF0ZV9kYXRhOwkKIAlybWU5Ni0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggNDRkMGMxNS4uMzE0ZTczNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIC8qIHRoZSBtZXRlcnMgYXJlIHJlZ3VsYXIgaS9vLW1hcHBlZCByZWdpc3RlcnMsIGJ1dCBvZmZzZXQKICAgIGNvbnNpZGVyYWJseSBmcm9tIHRoZSByZXN0LiB0aGUgcGVhayByZWdpc3RlcnMgYXJlIHJlc2V0Ci0gICB3aGVuIHJlYWQ7IHRoZSBsZWFzdC1zaWduaWZpY2FudCA0IGJpdHMgYXJlIGZ1bGwtc2NhbGUgY291bnRlcnM7IAorICAgd2hlbiByZWFkOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNCBiaXRzIGFyZSBmdWxsLXNjYWxlIGNvdW50ZXJzOwogICAgdGhlIGFjdHVhbCBwZWFrIHZhbHVlIGlzIGluIHRoZSBtb3N0LXNpZ25pZmljYW50IDI0IGJpdHMuCiAqLwogCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgIDI2KjMgdmFsdWVzIGFyZSByZWFkIGluIHNzIG1vZGUKICAgIDE0KjMgaW4gZHMgbW9kZSwgd2l0aCBubyBnYXAgYmV0d2VlbiB2YWx1ZXMKICovCi0jZGVmaW5lIEhEU1BfOTY1Ml9wZWFrQmFzZQk3MTY0CQorI2RlZmluZSBIRFNQXzk2NTJfcGVha0Jhc2UJNzE2NAogI2RlZmluZSBIRFNQXzk2NTJfcm1zQmFzZQk0MDk2CiAKIC8qIGMuZi4gdGhlIGhkc3BfOTYzMl9tZXRlcnNfdCBzdHJ1Y3QgKi8KQEAgLTE3MywxMiArMTczLDEyIEBACiAjZGVmaW5lIEhEU1BfU1BESUZFbXBoYXNpcyAgICAgICAgKDE8PDEwKSAvKiAwPW5vbmUsIDE9b24gKi8KICNkZWZpbmUgSERTUF9TUERJRk5vbkF1ZGlvICAgICAgICAoMTw8MTEpIC8qIDA9b2ZmLCAxPW9uICovCiAjZGVmaW5lIEhEU1BfU1BESUZPcHRpY2FsT3V0ICAgICAgKDE8PDEyKSAvKiAxPXVzZSAxc3QgQURBVCBjb25uZWN0b3IgZm9yIFNQRElGLCAwPWRvIG5vdCAqLwotI2RlZmluZSBIRFNQX1N5bmNSZWYyICAgICAgICAgICAgICgxPDwxMykgCi0jZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDAgICAgKDE8PDE0KSAKLSNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MSAgICAoMTw8MTUpIAotI2RlZmluZSBIRFNQX1N5bmNSZWYwICAgICAgICAgICAgICgxPDwxNikgCisjZGVmaW5lIEhEU1BfU3luY1JlZjIgICAgICAgICAgICAgKDE8PDEzKQorI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QwICAgICgxPDwxNCkKKyNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MSAgICAoMTw8MTUpCisjZGVmaW5lIEhEU1BfU3luY1JlZjAgICAgICAgICAgICAgKDE8PDE2KQogI2RlZmluZSBIRFNQX1N5bmNSZWYxICAgICAgICAgICAgICgxPDwxNykKLSNkZWZpbmUgSERTUF9BbmFsb2dFeHRlbnNpb25Cb2FyZCAoMTw8MTgpIC8qIEZvciBIOTYzMiBjYXJkcyAqLyAKKyNkZWZpbmUgSERTUF9BbmFsb2dFeHRlbnNpb25Cb2FyZCAoMTw8MTgpIC8qIEZvciBIOTYzMiBjYXJkcyAqLwogI2RlZmluZSBIRFNQX1hMUkJyZWFrb3V0Q2FibGUgICAgICgxPDwyMCkgLyogRm9yIEg5NjMyIGNhcmRzICovCiAjZGVmaW5lIEhEU1BfTWlkaTBJbnRlcnJ1cHRFbmFibGUgKDE8PDIyKQogI2RlZmluZSBIRFNQX01pZGkxSW50ZXJydXB0RW5hYmxlICgxPDwyMykKQEAgLTMxNCw3ICszMTQsNyBAQAogI2RlZmluZSBIRFNQX1RpbWVjb2RlU3luYyAgICAgICAoMTw8MjcpCiAjZGVmaW5lIEhEU1BfQUVCTyAgICAgICAgICAJKDE8PDI4KSAvKiBIOTYzMiBzcGVjaWZpYyBBbmFsb2cgRXh0ZW5zaW9uIEJvYXJkcyAqLwogI2RlZmluZSBIRFNQX0FFQkkJCSgxPDwyOSkgLyogMCA9IHByZXNlbnQsIDEgPSBhYnNlbnQgKi8KLSNkZWZpbmUgSERTUF9taWRpMElSUVBlbmRpbmcgICAgKDE8PDMwKSAKKyNkZWZpbmUgSERTUF9taWRpMElSUVBlbmRpbmcgICAgKDE8PDMwKQogI2RlZmluZSBIRFNQX21pZGkxSVJRUGVuZGluZyAgICAoMTw8MzEpCiAKICNkZWZpbmUgSERTUF9zcGRpZkZyZXF1ZW5jeU1hc2sgICAgKEhEU1Bfc3BkaWZGcmVxdWVuY3kwfEhEU1Bfc3BkaWZGcmVxdWVuY3kxfEhEU1Bfc3BkaWZGcmVxdWVuY3kyKQpAQCAtMzkxLDcgKzM5MSw3IEBACiAjZGVmaW5lIEhEU1BfQ0hBTk5FTF9CVUZGRVJfQllURVMgICAgKDQqSERTUF9DSEFOTkVMX0JVRkZFUl9TQU1QTEVTKQogCiAvKiB0aGUgc2l6ZSBvZiB0aGUgYXJlYSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGZvciBETUEgdHJhbnNmZXJzLiB0aGUKLSAgIHNpemUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIC0gdGhlIAorICAgc2l6ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgLSB0aGUKICAgIE11bHRpZmFjZSBzdGlsbCB1c2VzIHRoZSBzYW1lIG1lbW9yeSBhcmVhLgogCiAgICBOb3RlIHRoYXQgd2UgYWxsb2NhdGUgMSBtb3JlIGNoYW5uZWwgdGhhbiBpcyBhcHBhcmVudGx5IG5lZWRlZApAQCAtNDYwLDcgKzQ2MCw3IEBACiAJdW5zaWduZWQgY2hhcgkgICAgICBxc19pbl9jaGFubmVsczsJICAgICAvKiBxdWFkIHNwZWVkIG1vZGUgZm9yIEg5NjMyICovCiAJdW5zaWduZWQgY2hhciAgICAgICAgIGRzX2luX2NoYW5uZWxzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBzc19pbl9jaGFubmVsczsJICAgIC8qIGRpZmZlcmVudCBmb3IgbXVsdGlmYWNlL2RpZ2lmYWNlICovCi0JdW5zaWduZWQgY2hhcgkgICAgICBxc19vdXRfY2hhbm5lbHM7CSAgICAKKwl1bnNpZ25lZCBjaGFyCSAgICAgIHFzX291dF9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgZHNfb3V0X2NoYW5uZWxzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBzc19vdXRfY2hhbm5lbHM7CiAKQEAgLTUwMiw5ICs1MDIsOSBAQAogCiBzdGF0aWMgY2hhciBjaGFubmVsX21hcF9tZl9zc1tIRFNQX01BWF9DSEFOTkVMU10gPSB7IC8qIE11bHRpZmFjZSAqLwogCS8qIEFuYWxvZyAqLwotCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIAorCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsCiAJLyogQURBVCAyICovCi0JMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAKKwkxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCiAJLyogU1BESUYgKi8KIAkyNCwgMjUsCiAJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xCkBAIC01MjUsMTEgKzUyNSwxMSBAQAogCS8qIFNQRElGICovCiAJOCwgOSwKIAkvKiBBbmFsb2cgKi8KLQkxMCwgMTEsIAorCTEwLCAxMSwKIAkvKiBBTzRTLTE5MiBhbmQgQUk0Uy0xOTIgZXh0ZW5zaW9uIGJvYXJkcyAqLwogCTEyLCAxMywgMTQsIDE1LAogCS8qIG90aGVycyBkb24ndCBleGlzdCAqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogCS0xLCAtMQogfTsKIApAQCAtNTM5LDcgKzUzOSw3IEBACiAJLyogU1BESUYgKi8KIAk4LCA5LAogCS8qIEFuYWxvZyAqLwotCTEwLCAxMSwgCisJMTAsIDExLAogCS8qIEFPNFMtMTkyIGFuZCBBSTRTLTE5MiBleHRlbnNpb24gYm9hcmRzICovCiAJMTIsIDEzLCAxNCwgMTUsCiAJLyogb3RoZXJzIGRvbid0IGV4aXN0ICovCkBAIC01ODcsNyArNTg3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaGRzcF9pZHNbXSA9IHsKIAl7CiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1hJTElOWCwKLQkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLCAKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLAogCQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCiAJfSwgLyogUk1FIEhhbW1lcmZhbGwtRFNQICovCkBAIC02NTMsNyArNjUzLDYgQEAKIAogc3RhdGljIGludCBoZHNwX2NoZWNrX2Zvcl9pb2JveCAoc3RydWN0IGhkc3AgKmhkc3ApCiB7Ci0KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMDsKIAlpZiAoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfQ29uZmlnRXJyb3IpIHsKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBubyBEaWdpZmFjZSBvciBNdWx0aWZhY2UgY29ubmVjdGVkIVxuIik7CkBAIC02NjEsNyArNjYwLDI5IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBoZHNwX3dhaXRfZm9yX2lvYm94KHN0cnVjdCBoZHNwICpoZHNwLCB1bnNpZ25lZCBpbnQgbG9vcHMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGRlbGF5KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpICE9IGxvb3BzOyArK2kpIHsKKwkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfQ29uZmlnRXJyb3IpCisJCQltc2xlZXAoZGVsYXkpOworCQllbHNlIHsKKwkJCXNuZF9wcmludGQoIkhhbW1lcmZhbGwtRFNQOiBpb2JveCBmb3VuZCBhZnRlciAldW1zIVxuIiwKKwkJCQkgICBpICogZGVsYXkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzbmRfcHJpbnRrKCJIYW1tZXJmYWxsLURTUDogbm8gRGlnaWZhY2Ugb3IgTXVsdGlmYWNlIGNvbm5lY3RlZCFcbiIpOworCWhkc3AtPnN0YXRlICY9IH5IRFNQX0Zpcm13YXJlTG9hZGVkOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2xvYWRfZmlybXdhcmVfZnJvbV9jYWNoZShzdHJ1Y3QgaGRzcCAqaGRzcCkgewpAQCAtNjcwLDE5ICs2OTEsMTkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKChoZHNwX3JlYWQgKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9EbGxFcnJvcikgIT0gMCkgewotCQkKKwogCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IGxvYWRpbmcgZmlybXdhcmVcbiIpOwogCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19QUk9HUkFNKTsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9maWZvRGF0YSwgMCk7Ci0JCQorCiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9MT05HX1dBSVQpKSB7CiAJCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IHRpbWVvdXQgd2FpdGluZyBmb3IgZG93bmxvYWQgcHJlcGFyYXRpb25cbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJCisKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9TX0xPQUQpOwotCQkKKwogCQlmb3IgKGkgPSAwOyBpIDwgMjQ0MTM7ICsraSkgewogCQkJaGRzcF93cml0ZShoZHNwLCBIRFNQX2ZpZm9EYXRhLCBoZHNwLT5maXJtd2FyZV9jYWNoZVtpXSk7CiAJCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDEyNywgSERTUF9MT05HX1dBSVQpKSB7CkBAIC02OTIsNyArNzEzLDcgQEAKIAkJfQogCiAJCXNzbGVlcCgzKTsKLQkJCisKIAkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX0xPTkdfV0FJVCkpIHsKIAkJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogdGltZW91dCBhdCBlbmQgb2YgZmlybXdhcmUgbG9hZGluZ1xuIik7CiAJCSAgICAJcmV0dXJuIC1FSU87CkBAIC03MDUsMTUgKzcyNiwxNSBAQAogI2VuZGlmCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIGhkc3AtPmNvbnRyb2wyX3JlZ2lzdGVyKTsKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBmaW5pc2hlZCBmaXJtd2FyZSBsb2FkaW5nXG4iKTsKLQkJCisKIAl9CiAJaWYgKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSB7CiAJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogZmlybXdhcmUgbG9hZGVkIGZyb20gY2FjaGUsIHJlc3RvcmluZyBkZWZhdWx0c1xuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoZHNwLT5sb2NrLCBmbGFncyk7CiAJCXNuZF9oZHNwX3NldF9kZWZhdWx0cyhoZHNwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGRzcC0+bG9jaywgZmxhZ3MpOyAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGRzcC0+bG9jaywgZmxhZ3MpOwogCX0KLQkKKwogCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVMb2FkZWQ7CiAKIAlyZXR1cm4gMDsKQEAgLTcyMiw3ICs3NDMsNyBAQAogc3RhdGljIGludCBoZHNwX2dldF9pb2JveF92ZXJzaW9uIChzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpZiAoKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0RsbEVycm9yKSAhPSAwKSB7Ci0JCisKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9QUk9HUkFNKTsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9maWZvRGF0YSwgMCk7CiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9TSE9SVF9XQUlUKSA8IDApCkBAIC03MzgsNyArNzU5LDcgQEAKIAkJCWhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX1NIT1JUX1dBSVQpOwogCQl9IGVsc2UgewogCQkJaGRzcC0+aW9fdHlwZSA9IERpZ2lmYWNlOwotCQl9IAorCQl9CiAJfSBlbHNlIHsKIAkJLyogZmlybXdhcmUgd2FzIGFscmVhZHkgbG9hZGVkLCBnZXQgaW9ib3ggdHlwZSAqLwogCQlpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKSAmIEhEU1BfdmVyc2lvbjEpCkBAIC03ODYsMTMgKzgwNywxMyBAQAogCiAKIHN0YXRpYyBpbnQgaGRzcF9maWZvX3dhaXQoc3RydWN0IGhkc3AgKmhkc3AsIGludCBjb3VudCwgaW50IHRpbWVvdXQpCi17ICAgIAorewogCWludCBpOwogCiAJLyogdGhlIGZpZm9TdGF0dXMgcmVnaXN0ZXJzIHJlcG9ydHMgb24gaG93IG1hbnkgd29yZHMKIAkgICBhcmUgYXZhaWxhYmxlIGluIHRoZSBjb21tYW5kIEZJRk8uCiAJKi8KLQkKKwogCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKIAogCQlpZiAoKGludCkoaGRzcF9yZWFkIChoZHNwLCBIRFNQX2ZpZm9TdGF0dXMpICYgMHhmZikgPD0gY291bnQpCkBAIC04MjQsMTEgKzg0NSwxMSBAQAogCiAJaWYgKGFkZHIgPj0gSERTUF9NQVRSSVhfTUlYRVJfU0laRSkKIAkJcmV0dXJuIC0xOwotCQorCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCiAJCS8qIGZyb20gbWFydGluIGJqb3Juc2VuOgotCQkgICAKKwogCQkgICAiWW91IGNhbiBvbmx5IHdyaXRlIGR3b3JkcyB0byB0aGUKIAkJICAgbWl4ZXIgbWVtb3J5IHdoaWNoIGNvbnRhaW4gdHdvCiAJCSAgIG1peGVyIHZhbHVlcyBpbiB0aGUgbG93IGFuZCBoaWdoCkBAIC04NDcsNyArODY4LDcgQEAKIAogCQloZHNwLT5taXhlcl9tYXRyaXhbYWRkcl0gPSBkYXRhOwogCi0JCQorCiAJCS8qIGBhZGRyJyBhZGRyZXNzZXMgYSAxNi1iaXQgd2lkZSBhZGRyZXNzLCBidXQKIAkJICAgdGhlIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgdmlhIGhkc3Bfd3JpdGUKIAkJICAgdXNlcyBieXRlIG9mZnNldHMuIHB1dCBhbm90aGVyIHdheSwgYWRkcgpAQCAtODU2LDE3ICs4NzcsMTcgQEAKIAkJICAgdG8gYWNjZXNzIDAgdG8gMjcwMyAuLi4KIAkJKi8KIAkJYWQgPSBhZGRyLzI7Ci0JCi0JCWhkc3Bfd3JpdGUgKGhkc3AsIDQwOTYgKyAoYWQqNCksIAotCQkJICAgIChoZHNwLT5taXhlcl9tYXRyaXhbKGFkZHImMHg3ZmUpKzFdIDw8IDE2KSArIAorCisJCWhkc3Bfd3JpdGUgKGhkc3AsIDQwOTYgKyAoYWQqNCksCisJCQkgICAgKGhkc3AtPm1peGVyX21hdHJpeFsoYWRkciYweDdmZSkrMV0gPDwgMTYpICsKIAkJCSAgICBoZHNwLT5taXhlcl9tYXRyaXhbYWRkciYweDdmZV0pOwotCQkKKwogCQlyZXR1cm4gMDsKIAogCX0gZWxzZSB7CiAKIAkJYWQgPSAoYWRkciA8PCAxNikgKyBkYXRhOwotCQkKKwogCQlpZiAoaGRzcF9maWZvX3dhaXQoaGRzcCwgMTI3LCBIRFNQX0xPTkdfV0FJVCkpCiAJCQlyZXR1cm4gLTE7CiAKQEAgLTkwMiw3ICs5MjMsNyBAQAogCiAJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZFcnJvckZsYWcpCiAJCXJldHVybiAwOwotCQorCiAJc3dpdGNoIChyYXRlX2JpdHMpIHsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kzMktIejogcmV0dXJuIDMyMDAwOwogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTQ0XzFLSHo6IHJldHVybiA0NDEwMDsKQEAgLTkxMCwxMyArOTMxLDEzIEBACiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5NjRLSHo6IHJldHVybiA2NDAwMDsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k4OF8yS0h6OiByZXR1cm4gODgyMDA7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5OTZLSHo6IHJldHVybiA5NjAwMDsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxMjhLSHo6IAorCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTEyOEtIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxMjgwMDA7CiAJCWJyZWFrOwotCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE3Nl80S0h6OiAKKwljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxNzZfNEtIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxNzY0MDA7CiAJCWJyZWFrOwotCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE5MktIejogCisJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTkyS0h6OgogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDE5MjAwMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwMjcsNyArMTA0OCw3IEBACiB7CiAJdTY0IG47CiAJdTMyIHI7Ci0JCisKIAlpZiAocmF0ZSA+PSAxMTIwMDApCiAJCXJhdGUgLz0gNDsKIAllbHNlIGlmIChyYXRlID49IDU2MDAwKQpAQCAtMTA1MywzNSArMTA3NCwzNSBAQAogCSAgIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IChlLmcuIGR1cmluZyBtb2R1bGUKIAkgICBpbml0aWFsaXphdGlvbikuCiAJKi8KLQkKLQlpZiAoIShoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9DbG9ja01vZGVNYXN0ZXIpKSB7CQorCisJaWYgKCEoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQ2xvY2tNb2RlTWFzdGVyKSkgewogCQlpZiAoY2FsbGVkX2ludGVybmFsbHkpIHsKIAkJCS8qIHJlcXVlc3QgZnJvbSBjdGwgb3IgY2FyZCBpbml0aWFsaXphdGlvbiAqLwogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IGRldmljZSBpcyBub3QgcnVubmluZyBhcyBhIGNsb2NrIG1hc3RlcjogY2Fubm90IHNldCBzYW1wbGUgcmF0ZS5cbiIpOwogCQkJcmV0dXJuIC0xOwotCQl9IGVsc2UgewkJCisJCX0gZWxzZSB7CiAJCQkvKiBod19wYXJhbSByZXF1ZXN0IHdoaWxlIGluIEF1dG9TeW5jIG1vZGUgKi8KIAkJCWludCBleHRlcm5hbF9mcmVxID0gaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKTsKIAkJCWludCBzcGRpZl9mcmVxID0gaGRzcF9zcGRpZl9zYW1wbGVfcmF0ZShoZHNwKTsKLQkJCisKIAkJCWlmICgoc3BkaWZfZnJlcSA9PSBleHRlcm5hbF9mcmVxKjIpICYmIChoZHNwX2F1dG9zeW5jX3JlZihoZHNwKSA+PSBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDEpKQogCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBkb3VibGUgc3BlZWQgbW9kZVxuIik7CiAJCQllbHNlIGlmIChoZHNwLT5pb190eXBlID09IEg5NjMyICYmIChzcGRpZl9mcmVxID09IGV4dGVybmFsX2ZyZXEqNCkgJiYgKGhkc3BfYXV0b3N5bmNfcmVmKGhkc3ApID49IEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMSkpCi0JCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBEZXRlY3RlZCBBREFUIGluIHF1YWQgc3BlZWQgbW9kZVxuIik7CQkJCisJCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBEZXRlY3RlZCBBREFUIGluIHF1YWQgc3BlZWQgbW9kZVxuIik7CiAJCQllbHNlIGlmIChyYXRlICE9IGV4dGVybmFsX2ZyZXEpIHsKIAkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IE5vIEF1dG9TeW5jIHNvdXJjZSBmb3IgcmVxdWVzdGVkIHJhdGVcbiIpOwogCQkJCXJldHVybiAtMTsKLQkJCX0JCQotCQl9CQorCQkJfQorCQl9CiAJfQogCiAJY3VycmVudF9yYXRlID0gaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlOwogCiAJLyogQ2hhbmdpbmcgZnJvbSBhICJzaW5nbGUgc3BlZWQiIHRvIGEgImRvdWJsZSBzcGVlZCIgcmF0ZSBpcwogCSAgIG5vdCBhbGxvd2VkIGlmIGFueSBzdWJzdHJlYW1zIGFyZSBvcGVuLiBUaGlzIGlzIGJlY2F1c2UKLQkgICBzdWNoIGEgY2hhbmdlIGNhdXNlcyBhIHNoaWZ0IGluIHRoZSBsb2NhdGlvbiBvZiAKKwkgICBzdWNoIGEgY2hhbmdlIGNhdXNlcyBhIHNoaWZ0IGluIHRoZSBsb2NhdGlvbiBvZgogCSAgIHRoZSBETUEgYnVmZmVycyBhbmQgYSByZWR1Y3Rpb24gaW4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUKLQkgICBidWZmZXJzLiAKKwkgICBidWZmZXJzLgogCiAJICAgTm90ZSB0aGF0IGEgc2ltaWxhciBidXQgZXNzZW50aWFsbHkgaW5zb2x1YmxlIHByb2JsZW0KIAkgICBleGlzdHMgZm9yIGV4dGVybmFsbHktZHJpdmVuIHJhdGUgY2hhbmdlcy4gQWxsIHdlIGNhbiBkbwpAQCAtMTA4OSw3ICsxMTEwLDcgQEAKIAogCWlmIChyYXRlID4gOTYwMDAgJiYgaGRzcC0+aW9fdHlwZSAhPSBIOTYzMikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JCisKIAlzd2l0Y2ggKHJhdGUpIHsKIAljYXNlIDMyMDAwOgogCQlpZiAoY3VycmVudF9yYXRlID4gNDgwMDApCkBAIC0xMTc5LDcgKzEyMDAsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JCisKIAloZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGUgPSByYXRlOwogCiAJcmV0dXJuIDA7CkBAIC0xMjQ1LDE2ICsxMjY2LDE2IEBACiAJdW5zaWduZWQgY2hhciBidWZbMTI4XTsKIAogCS8qIE91dHB1dCBpcyBub3QgaW50ZXJydXB0IGRyaXZlbiAqLwotCQkKKwogCXNwaW5fbG9ja19pcnFzYXZlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAlpZiAoaG1pZGktPm91dHB1dCkgewogCQlpZiAoIXNuZF9yYXdtaWRpX3RyYW5zbWl0X2VtcHR5IChobWlkaS0+b3V0cHV0KSkgewogCQkJaWYgKChuX3BlbmRpbmcgPSBzbmRfaGRzcF9taWRpX291dHB1dF9wb3NzaWJsZSAoaG1pZGktPmhkc3AsIGhtaWRpLT5pZCkpID4gMCkgewogCQkJCWlmIChuX3BlbmRpbmcgPiAoaW50KXNpemVvZiAoYnVmKSkKIAkJCQkJbl9wZW5kaW5nID0gc2l6ZW9mIChidWYpOwotCQkJCQorCiAJCQkJaWYgKCh0b193cml0ZSA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0IChobWlkaS0+b3V0cHV0LCBidWYsIG5fcGVuZGluZykpID4gMCkgewotCQkJCQlmb3IgKGkgPSAwOyBpIDwgdG9fd3JpdGU7ICsraSkgCisJCQkJCWZvciAoaSA9IDA7IGkgPCB0b193cml0ZTsgKytpKQogCQkJCQkJc25kX2hkc3BfbWlkaV93cml0ZV9ieXRlIChobWlkaS0+aGRzcCwgaG1pZGktPmlkLCBidWZbaV0pOwogCQkJCX0KIAkJCX0KQEAgLTEzMjUsMTQgKzEzNDYsMTQgQEAKIHsKIAlzdHJ1Y3QgaGRzcF9taWRpICpobWlkaSA9IChzdHJ1Y3QgaGRzcF9taWRpICopIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKKwogCXNuZF9oZHNwX21pZGlfb3V0cHV0X3dyaXRlKGhtaWRpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhtaWRpLT5sb2NrLCBmbGFncyk7CiAKIAkvKiB0aGlzIGRvZXMgbm90IGJ1bXAgaG1pZGktPmlzdGltZXIsIGJlY2F1c2UgdGhlCiAJICAga2VybmVsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aGUgdGltZXIgd2hlbiBpdAogCSAgIGV4cGlyZWQsIGFuZCB3ZSBhcmUgbm93IGFkZGluZyBpdCBiYWNrLCB0aHVzCi0JICAgbGVhdmluZyBpc3RpbWVyIHdoZXJldmVyIGl0IHdhcyBzZXQgYmVmb3JlLiAgCisJICAgbGVhdmluZyBpc3RpbWVyIHdoZXJldmVyIGl0IHdhcyBzZXQgYmVmb3JlLgogCSovCiAKIAlpZiAoaG1pZGktPmlzdGltZXIpIHsKQEAgLTE1MDEsNyArMTUyMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2NvbnRyb2xfc3BkaWZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNuZF9oZHNwX2NvbnZlcnRfdG9fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4LCBoZHNwLT5jcmVnX3NwZGlmKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTEsNyArMTUzMiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1MzIgdmFsOwotCQorCiAJdmFsID0gc25kX2hkc3BfY29udmVydF9mcm9tX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCk7CiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJY2hhbmdlID0gdmFsICE9IGhkc3AtPmNyZWdfc3BkaWY7CkBAIC0xNTMwLDcgKzE1NTEsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jb250cm9sX3NwZGlmX3N0cmVhbV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc25kX2hkc3BfY29udmVydF90b19hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgsIGhkc3AtPmNyZWdfc3BkaWZfc3RyZWFtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NDAsNyArMTU2MSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1MzIgdmFsOwotCQorCiAJdmFsID0gc25kX2hkc3BfY29udmVydF9mcm9tX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCk7CiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJY2hhbmdlID0gdmFsICE9IGhkc3AtPmNyZWdfc3BkaWZfc3RyZWFtOwpAQCAtMTYwMiw3ICsxNjIzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX2luKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3NwZGlmX2luKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTYxMiw3ICsxNjMzLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSAlICgoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgPyA0IDogMyk7CkBAIC0xNjQ5LDcgKzE2NzAsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfb3V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9vdXQoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjU5LDcgKzE2ODAsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xNjkzLDcgKzE3MTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfcHJvZmVzc2lvbmFsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9wcm9mZXNzaW9uYWwoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzAzLDcgKzE3MjQsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xNzM3LDcgKzE3NTgsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfZW1waGFzaXMoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX3NwZGlmX2VtcGhhc2lzKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTc0Nyw3ICsxNzY4LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTc4MSw3ICsxODAyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX25vbmF1ZGlvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9ub25hdWRpbyhoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OTEsNyArMTgxMiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE4MjgsNyArMTg0OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzd2l0Y2ggKGhkc3Bfc3BkaWZfc2FtcGxlX3JhdGUoaGRzcCkpIHsKIAljYXNlIDMyMDAwOgogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKQEAgLTE4NTgsNyArMTg3OSw3IEBACiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA5OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNjsJCQorCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNjsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xODgyLDcgKzE5MDMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3lzdGVtX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGU7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODk5LDcgKzE5MjAsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2F1dG9zeW5jX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyIzMjAwMCIsICI0NDEwMCIsICI0ODAwMCIsICI2NDAwMCIsICI4ODIwMCIsICI5NjAwMCIsICJOb25lIiwgIjEyODAwMCIsICIxNzY0MDAiLCAiMTkyMDAwIn07CQorCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyIzMjAwMCIsICI0NDEwMCIsICI0ODAwMCIsICI2NDAwMCIsICI4ODIwMCIsICI5NjAwMCIsICJOb25lIiwgIjEyODAwMCIsICIxNzY0MDAiLCAiMTkyMDAwIn07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IChoZHNwLT5pb190eXBlID09IEg5NjMyKSA/IDEwIDogNyA7CkBAIC0xOTEyLDcgKzE5MzMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYXV0b3N5bmNfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3dpdGNoIChoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApKSB7CiAJY2FzZSAzMjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CkBAIC0xOTQwLDkgKzE5NjEsOSBAQAogCQlicmVhazsKIAljYXNlIDE5MjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDk7Ci0JCWJyZWFrOwkKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CQkKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTk2OCw3ICsxOTg5LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19zeXN0ZW1fY2xvY2tfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTWFzdGVyIiwgIlNsYXZlIiB9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CkBAIC0xOTgxLDcgKzIwMDIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3Bfc3lzdGVtX2Nsb2NrX21vZGUoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDE4LDcgKzIwMzksNyBAQAogCQljYXNlIDE5MjAwMDoKIAkJCXJldHVybiA5OwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIDM7CQorCQkJcmV0dXJuIDM7CiAJCX0KIAl9IGVsc2UgewogCQlyZXR1cm4gMDsKQEAgLTIwMzIsNyArMjA1Myw3IEBACiAJY2FzZSBIRFNQX0NMT0NLX1NPVVJDRV9BVVRPU1lOQzoKIAkJaWYgKGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCkgIT0gMCkgewogCQkgICAgaWYgKCFoZHNwX3NldF9yYXRlKGhkc3AsIGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCksIDEpKSB7Ci0JCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQX0Nsb2NrTW9kZU1hc3RlcjsJCQorCQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9DbG9ja01vZGVNYXN0ZXI7CiAJCQloZHNwX3dyaXRlKGhkc3AsIEhEU1BfY29udHJvbFJlZ2lzdGVyLCBoZHNwLT5jb250cm9sX3JlZ2lzdGVyKTsKIAkJCXJldHVybiAwOwogCQkgICAgfQpAQCAtMjA0Myw3ICsyMDY0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBIRFNQX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80NF8xS0haOgogCQlyYXRlID0gNDQxMDA7Ci0JCWJyZWFrOwkgICAgCisJCWJyZWFrOwogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfNDhLSFo6CiAJCXJhdGUgPSA0ODAwMDsKIAkJYnJlYWs7CkBAIC0yMDc4LDEzICsyMDk5LDEzIEBACiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IkF1dG9TeW5jIiwgIkludGVybmFsIDMyLjAga0h6IiwgIkludGVybmFsIDQ0LjEga0h6IiwgIkludGVybmFsIDQ4LjAga0h6IiwgIkludGVybmFsIDY0LjAga0h6IiwgIkludGVybmFsIDg4LjIga0h6IiwgIkludGVybmFsIDk2LjAga0h6IiwgIkludGVybmFsIDEyOCBrSHoiLCAiSW50ZXJuYWwgMTc2LjQga0h6IiwgIkludGVybmFsIDE5Mi4wIEtIeiIgfTsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCiAJICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMTA7CiAJZWxzZQotCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDc7CQorCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDc7CiAJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CiAJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKQEAgLTIwOTQsNyArMjExNSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9jbG9ja19zb3VyY2Uoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfY2xvY2tfc291cmNlKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjEwNCw3ICsyMTI1LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIxMzAsNyArMjE1MSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9jbG9ja19zb3VyY2VfbG9jayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3AtPmNsb2NrX3NvdXJjZV9sb2NrZWQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTY1LDcgKzIxODYsNyBAQAogCWNhc2UgSERTUF9EQUdhaW5NaW51czEwZEJWOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsJCisJCXJldHVybiAxOwogCX0KIH0KIApAQCAtMjE4MCw4ICsyMjAxLDggQEAKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0RBR2FpblBsdXM0ZEJ1OwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5NaW51czEwZEJWOwkJCi0JCWJyZWFrOwkgICAgCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5NaW51czEwZEJWOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIxOTMsNyArMjIxNCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fZGFfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiSGkgR2FpbiIsICIrNCBkQnUiLCAiLTEwIGRiViJ9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yMjA2LDcgKzIyMjcsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfZGFfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9kYV9nYWluKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjIxNiw3ICsyMjM3LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIyNTAsNyArMjI3MSw3IEBACiAJY2FzZSBIRFNQX0FER2Fpbkxvd0dhaW46CiAJCXJldHVybiAyOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAxOwkKKwkJcmV0dXJuIDE7CiAJfQogfQogCkBAIC0yMjYyLDExICsyMjgzLDExIEBACiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5NaW51czEwZEJWOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5QbHVzNGRCdTsJCQorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluUGx1czRkQnU7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2Fpbkxvd0dhaW47CQkKLQkJYnJlYWs7CSAgICAKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2Fpbkxvd0dhaW47CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIApAQCAtMjI3OCw3ICsyMjk5LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hZF9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyItMTAgZEJWIiwgIis0IGRCdSIsICJMbyBHYWluIn07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTIyOTEsNyArMjMxMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZF9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2FkX2dhaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzAxLDcgKzIzMjIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjMzNSw3ICsyMzU2LDcgQEAKIAljYXNlIEhEU1BfUGhvbmVHYWluTWludXMxMmRCOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMDsJCisJCXJldHVybiAwOwogCX0KIH0KIApAQCAtMjM0NywxMSArMjM2OCwxMSBAQAogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluMGRCOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czZkQjsJCQorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXM2ZEI7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjsJCQotCQlicmVhazsJICAgIAorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXMxMmRCOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIzNjMsNyArMjM4NCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fcGhvbmVfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMCBkQiIsICItNiBkQiIsICItMTIgZEIifTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjM3Niw3ICsyMzk3LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3Bob25lX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfcGhvbmVfZ2FpbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzODYsNyArMjQwNyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yNDMyLDcgKzI0NTMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfeGxyX2JyZWFrb3V0X2NhYmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NDIsNyArMjQ2Myw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI0ODgsNyArMjUwOSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZWIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfYWViKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjQ5OCw3ICsyNTE5LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjU3Niw3ICsyNTk3LDcgQEAKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiV29yZCIsICJJRUM5NTgiLCAiQURBVDEiLCAiQURBVCBTeW5jIiwgIkFEQVQyIiwgIkFEQVQzIiB9OwogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIApAQCAtMjU5NSw3ICsyNjE2LDcgQEAKIAkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAwOwogCQlicmVhazsKIAl9Ci0JCQorCiAJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CiAJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKQEAgLTI2MDUsNyArMjYyNiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9wcmVmX3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3ByZWZfc3luY19yZWYoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjE1LDcgKzI2MzYsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2UsIG1heDsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0yNjY0LDcgKzI2ODUsNyBAQAogCWNhc2UgSERTUF9TZWxTeW5jUmVmX1NQRElGOgogCQlyZXR1cm4gSERTUF9BVVRPU1lOQ19GUk9NX1NQRElGOwogCWNhc2UgSERTUF9TZWxTeW5jUmVmTWFzazoKLQkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9OT05FOwkKKwkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9OT05FOwogCWNhc2UgSERTUF9TZWxTeW5jUmVmX0FEQVQxOgogCQlyZXR1cm4gSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxOwogCWNhc2UgSERTUF9TZWxTeW5jUmVmX0FEQVQyOgpAQCAtMjY4MCw3ICsyNzAxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hdXRvc3luY19yZWYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IldvcmQiLCAiQURBVCBTeW5jIiwgIklFQzk1OCIsICJOb25lIiwgIkFEQVQxIiwgIkFEQVQyIiwgIkFEQVQzIiB9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDc7CkBAIC0yNjkzLDcgKzI3MTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYXV0b3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2F1dG9zeW5jX3JlZihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MjcsNyArMjc0OCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9saW5lX291dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3BfbGluZV9vdXQoaGRzcCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI3MzksNyArMjc2MCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI3NzMsNyArMjc5NCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9wcmVjaXNlX3BvaW50ZXIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT5wcmVjaXNlX3B0cjsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjc4NSw3ICsyODA2LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjgxOSw3ICsyODQwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3VzZV9taWRpX3Rhc2tsZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT51c2VfbWlkaV90YXNrbGV0OwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yODMxLDcgKzI4NTIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yODczLDEyICsyODk0LDEyIEBACiAKIAlzb3VyY2UgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIAlkZXN0aW5hdGlvbiA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOwotCQorCiAJaWYgKHNvdXJjZSA+PSBoZHNwLT5tYXhfY2hhbm5lbHMpCiAJCWFkZHIgPSBoZHNwX3BsYXliYWNrX3RvX291dHB1dF9rZXkoaGRzcCxzb3VyY2UtaGRzcC0+bWF4X2NoYW5uZWxzLGRlc3RpbmF0aW9uKTsKIAllbHNlCiAJCWFkZHIgPSBoZHNwX2lucHV0X3RvX291dHB1dF9rZXkoaGRzcCxzb3VyY2UsIGRlc3RpbmF0aW9uKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzJdID0gaGRzcF9yZWFkX2dhaW4gKGhkc3AsIGFkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yOTI2LDcgKzI5NDcsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTm8gTG9jayIsICJMb2NrIiwgIlN5bmMiIH07CQorCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJObyBMb2NrIiwgIkxvY2siLCAiU3luYyIgfTsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTI5NzEsNyArMjk5Miw3IEBACiAJaW50IHN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAlpZiAoc3RhdHVzICYgSERTUF9TUERJRkVycm9yRmxhZykKIAkJcmV0dXJuIDA7Ci0JZWxzZSB7CQorCWVsc2UgewogCQlpZiAoc3RhdHVzICYgSERTUF9TUERJRlN5bmMpCiAJCQlyZXR1cm4gMjsKIAkJZWxzZQpAQCAtMzAwNyw3ICszMDI4LDcgQEAKIAkJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKLX0JCit9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FkYXRzeW5jX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewpAQCAtMzAyNSwxNyArMzA0NiwxNyBAQAogfQogCiBzdGF0aWMgaW50IGhkc3BfYWRhdF9zeW5jX2NoZWNrKHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgaWR4KQotewkKK3sKIAlpbnQgc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwotCQorCiAJaWYgKHN0YXR1cyAmIChIRFNQX0xvY2swPj5pZHgpKSB7CiAJCWlmIChzdGF0dXMgJiAoSERTUF9TeW5jMD4+aWR4KSkKIAkJCXJldHVybiAyOwogCQllbHNlCi0JCQlyZXR1cm4gMTsJCQorCQkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCXJldHVybiAwOwotfSAKK30KIAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWRhdF9zeW5jX2NoZWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTMwNTMsNyArMzA3NCw3IEBACiAJCWJyZWFrOwogCWNhc2UgTXVsdGlmYWNlOgogCWNhc2UgSDk2MzI6Ci0JCWlmIChvZmZzZXQgPj0gMSkgCisJCWlmIChvZmZzZXQgPj0gMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzExNSw3ICszMTM2LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2Rkc19vZmZzZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfZGRzX29mZnNldChoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxMjUsNyArMzE0Niw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0zMTcwLDcgKzMxOTEsNyBAQAogCS5nZXQgPQkJc25kX2hkc3BfY29udHJvbF9zcGRpZl9tYXNrX2dldCwKIAkucHJpdmF0ZV92YWx1ZSA9IElFQzk1OF9BRVMwX05PTkFVRElPIHwKICAgCQkJIElFQzk1OF9BRVMwX1BST0ZFU1NJT05BTCB8Ci0JCQkgSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTLAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQkJIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJUywKIH0sCiB7CiAJLmFjY2VzcyA9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELApAQCAtMzE4OCw3ICszMjA5LDcgQEAKIEhEU1BfU1BESUZfUFJPRkVTU0lPTkFMKCJJRUM5NTggUHJvZmVzc2lvbmFsIEJpdCIsIDApLAogSERTUF9TUERJRl9FTVBIQVNJUygiSUVDOTU4IEVtcGhhc2lzIEJpdCIsIDApLAogSERTUF9TUERJRl9OT05fQVVESU8oIklFQzk1OCBOb24tYXVkaW8gQml0IiwgMCksCi0vKiAnU2FtcGxlIENsb2NrIFNvdXJjZScgY29tcGxpZXMgd2l0aCB0aGUgYWxzYSBjb250cm9sIG5hbWluZyBzY2hlbWUgKi8gCisvKiAnU2FtcGxlIENsb2NrIFNvdXJjZScgY29tcGxpZXMgd2l0aCB0aGUgYWxzYSBjb250cm9sIG5hbWluZyBzY2hlbWUgKi8KIEhEU1BfQ0xPQ0tfU09VUkNFKCJTYW1wbGUgQ2xvY2sgU291cmNlIiwgMCksCiB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0zMjQwLDcgKzMyNjEsNyBAQAogCQkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JCisKIAkvKiBEQSwgQUQgYW5kIFBob25lIGdhaW4gYW5kIFhMUiBicmVha291dCBjYWJsZSBjb250cm9scyBmb3IgSDk2MzIgY2FyZHMgKi8KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX2hkc3BfOTYzMl9jb250cm9scyk7IGlkeCsrKSB7CkBAIC0zMjU5LDcgKzMyODAsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgL3Byb2MgaW50ZXJmYWNlIAorICAgL3Byb2MgaW50ZXJmYWNlCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKQEAgLTMyOTgsNyArMzMxOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JCisKIAlzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJc3RhdHVzMiA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3Rlcik7CiAKQEAgLTMzNjIsMTcgKzMzODMsMTcgQEAKIAkJYnJlYWs7CiAJCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMTkyS0haOgogCQljbG9ja19zb3VyY2UgPSAiSW50ZXJuYWwgMTkyIGtIeiI7Ci0JCWJyZWFrOwkKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY2xvY2tfc291cmNlID0gIkVycm9yIjsJCQorCQljbG9ja19zb3VyY2UgPSAiRXJyb3IiOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU2FtcGxlIENsb2NrIFNvdXJjZTogJXNcbiIsIGNsb2NrX3NvdXJjZSk7Ci0JCQkKKwogCWlmIChoZHNwX3N5c3RlbV9jbG9ja19tb2RlKGhkc3ApKQogCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJTbGF2ZSI7CiAJZWxzZQogCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJNYXN0ZXIiOwotCQorCiAJc3dpdGNoIChoZHNwX3ByZWZfc3luY19yZWYgKGhkc3ApKSB7CiAJY2FzZSBIRFNQX1NZTkNfRlJPTV9XT1JEOgogCQlwcmVmX3N5bmNfcmVmID0gIldvcmQgQ2xvY2siOwpAQCAtMzM5Nyw3ICszNDE4LDcgQEAKIAkJYnJlYWs7CiAJfQogCXNuZF9pcHJpbnRmIChidWZmZXIsICJQcmVmZXJyZWQgU3luYyBSZWZlcmVuY2U6ICVzXG4iLCBwcmVmX3N5bmNfcmVmKTsKLQkKKwogCXN3aXRjaCAoaGRzcF9hdXRvc3luY19yZWYgKGhkc3ApKSB7CiAJY2FzZSBIRFNQX0FVVE9TWU5DX0ZST01fV09SRDoKIAkJYXV0b3N5bmNfcmVmID0gIldvcmQgQ2xvY2siOwpAQCAtMzQxMCw3ICszNDMxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORToKIAkJYXV0b3N5bmNfcmVmID0gIk5vbmUiOwotCQlicmVhazsJCisJCWJyZWFrOwogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxOgogCQlhdXRvc3luY19yZWYgPSAiQURBVDEiOwogCQlicmVhazsKQEAgLTM0MjUsMTQgKzM0NDYsMTQgQEAKIAkJYnJlYWs7CiAJfQogCXNuZF9pcHJpbnRmIChidWZmZXIsICJBdXRvU3luYyBSZWZlcmVuY2U6ICVzXG4iLCBhdXRvc3luY19yZWYpOwotCQorCiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIkF1dG9TeW5jIEZyZXF1ZW5jeTogJWRcbiIsIGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCkpOwotCQorCiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBNb2RlOiAlc1xuIiwgc3lzdGVtX2Nsb2NrX21vZGUpOwogCiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBGcmVxdWVuY3k6ICVkXG4iLCBoZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGUpOwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgTG9ja2VkOiAlc1xuIiwgaGRzcC0+Y2xvY2tfc291cmNlX2xvY2tlZCA/ICJZZXMiIDogIk5vIik7Ci0JCQorCiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAogCXN3aXRjaCAoaGRzcF9zcGRpZl9pbihoZHNwKSkgewpAQCAtMzQ1Miw3ICszNDczLDcgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiA/Pz9cbiIpOwogCQlicmVhazsKIAl9Ci0JCisKIAlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfU1BESUZPcHRpY2FsT3V0KQogCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggb3V0cHV0OiBDb2F4aWFsICYgQURBVDFcbiIpOwogCWVsc2UKQEAgLTM1MTAsMTMgKzM1MzEsMTMgQEAKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIlNQRElGOiBObyBMb2NrXG4iKTsKIAllbHNlCiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJTUERJRjogJXNcbiIsIHggPyAiU3luYyIgOiAiTG9jayIpOwotCQorCiAJeCA9IHN0YXR1czIgJiBIRFNQX3djX3N5bmM7CiAJaWYgKHN0YXR1czIgJiBIRFNQX3djX2xvY2spCiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJXb3JkIENsb2NrOiAlc1xuIiwgeCA/ICJTeW5jIiA6ICJMb2NrIik7CiAJZWxzZQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiV29yZCBDbG9jazogTm8gTG9ja1xuIik7Ci0JCisKIAl4ID0gc3RhdHVzICYgSERTUF9UaW1lY29kZVN5bmM7CiAJaWYgKHN0YXR1cyAmIEhEU1BfVGltZWNvZGVMb2NrKQogCQlzbmRfaXByaW50ZihidWZmZXIsICJBREFUIFN5bmM6ICVzXG4iLCB4ID8gIlN5bmMiIDogIkxvY2siKTsKQEAgLTM1MjQsMTEgKzM1NDUsMTEgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQURBVCBTeW5jOiBObyBMb2NrXG4iKTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7Ci0JCisKIAkvKiBJbmZvcm1hdGlvbnMgYWJvdXQgSDk2MzIgc3BlY2lmaWMgY29udHJvbHMgKi8KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQljaGFyICp0bXA7Ci0JCisKIAkJc3dpdGNoIChoZHNwX2FkX2dhaW4oaGRzcCkpIHsKIAkJY2FzZSAwOgogCQkJdG1wID0gIi0xMCBkQlYiOwpAQCAtMzU1NCw3ICszNTc1LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRBIEdhaW4gOiAlc1xuIiwgdG1wKTsKLQkJCisKIAkJc3dpdGNoIChoZHNwX3Bob25lX2dhaW4oaGRzcCkpIHsKIAkJY2FzZSAwOgogCQkJdG1wID0gIjAgZEIiOwpAQCAtMzU2OCw4ICszNTg5LDggQEAKIAkJfQogCQlzbmRfaXByaW50ZihidWZmZXIsICJQaG9uZXMgR2FpbiA6ICVzXG4iLCB0bXApOwogCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlhMUiBCcmVha291dCBDYWJsZSA6ICVzXG4iLCBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKSA/ICJ5ZXMiIDogIm5vIik7CQotCQkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiWExSIEJyZWFrb3V0IENhYmxlIDogJXNcbiIsIGhkc3BfeGxyX2JyZWFrb3V0X2NhYmxlKGhkc3ApID8gInllcyIgOiAibm8iKTsKKwogCQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsICJBRUIgOiBvbiAoQURBVDEgaW50ZXJuYWwpXG4iKTsKIAkJZWxzZQpAQCAtMzYzMiwxOCArMzY1MywxOCBAQAogCiAJLyogc2V0IGRlZmF1bHRzOgogCi0JICAgU1BESUYgSW5wdXQgdmlhIENvYXggCisJICAgU1BESUYgSW5wdXQgdmlhIENvYXgKIAkgICBNYXN0ZXIgY2xvY2sgbW9kZQogCSAgIG1heGltdW0gbGF0ZW5jeSAoNyA9PiAyXjcgPSA4MTkyIHNhbXBsZXMsIDY0S2J5dGUgYnVmZmVyLAogCSAgICAgICAgICAgICAgICAgICAgd2hpY2ggaW1wbGllcyAyIDQwOTYgc2FtcGxlLCAzMktieXRlIHBlcmlvZHMpLgotICAgICAgICAgICBFbmFibGUgbGluZSBvdXQuCQkJICAgIAorICAgICAgICAgICBFbmFibGUgbGluZSBvdXQuCiAJICovCiAKLQloZHNwLT5jb250cm9sX3JlZ2lzdGVyID0gSERTUF9DbG9ja01vZGVNYXN0ZXIgfCAKLQkJICAgICAgICAgICAgICAgICBIRFNQX1NQRElGSW5wdXRDb2F4aWFsIHwgCi0JCSAgICAgICAgICAgICAgICAgaGRzcF9lbmNvZGVfbGF0ZW5jeSg3KSB8IAorCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgPSBIRFNQX0Nsb2NrTW9kZU1hc3RlciB8CisJCSAgICAgICAgICAgICAgICAgSERTUF9TUERJRklucHV0Q29heGlhbCB8CisJCSAgICAgICAgICAgICAgICAgaGRzcF9lbmNvZGVfbGF0ZW5jeSg3KSB8CiAJCSAgICAgICAgICAgICAgICAgSERTUF9MaW5lT3V0OwotCQorCiAKIAloZHNwX3dyaXRlKGhkc3AsIEhEU1BfY29udHJvbFJlZ2lzdGVyLCBoZHNwLT5jb250cm9sX3JlZ2lzdGVyKTsKIApAQCAtMzY2MSw3ICszNjgyLDcgQEAKIAloZHNwX2NvbXB1dGVfcGVyaW9kX3NpemUoaGRzcCk7CiAKIAkvKiBzaWxlbmNlIGV2ZXJ5dGhpbmcgKi8KLQkKKwogCWZvciAoaSA9IDA7IGkgPCBIRFNQX01BVFJJWF9NSVhFUl9TSVpFOyArK2kpCiAJCWhkc3AtPm1peGVyX21hdHJpeFtpXSA9IE1JTlVTX0lORklOSVRZX0dBSU47CiAKQEAgLTM2NjksNyArMzY5MCw3IEBACiAJCWlmIChoZHNwX3dyaXRlX2dhaW4gKGhkc3AsIGksIE1JTlVTX0lORklOSVRZX0dBSU4pKQogCQkJcmV0dXJuIC1FSU87CiAJfQotCQorCiAJLyogSDk2MzIgc3BlY2lmaWMgZGVmYXVsdHMgKi8KIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IChIRFNQX0RBR2FpblBsdXM0ZEJ1IHwgSERTUF9BREdhaW5QbHVzNGRCdSB8IEhEU1BfUGhvbmVHYWluMGRCKTsKQEAgLTM2ODcsMTIgKzM3MDgsMTIgQEAKIHN0YXRpYyB2b2lkIGhkc3BfbWlkaV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gKHN0cnVjdCBoZHNwICopYXJnOwotCQorCiAJaWYgKGhkc3AtPm1pZGlbMF0ucGVuZGluZykKIAkJc25kX2hkc3BfbWlkaV9pbnB1dF9yZWFkICgmaGRzcC0+bWlkaVswXSk7CiAJaWYgKGhkc3AtPm1pZGlbMV0ucGVuZGluZykKIAkJc25kX2hkc3BfbWlkaV9pbnB1dF9yZWFkICgmaGRzcC0+bWlkaVsxXSk7Ci19IAorfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2hkc3BfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTM3MDQsNyArMzcyNSw3IEBACiAJdW5zaWduZWQgaW50IG1pZGkwc3RhdHVzOwogCXVuc2lnbmVkIGludCBtaWRpMXN0YXR1czsKIAlpbnQgc2NoZWR1bGUgPSAwOwotCQorCiAJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCiAJYXVkaW8gPSBzdGF0dXMgJiBIRFNQX2F1ZGlvSVJRUGVuZGluZzsKQEAgLTM3MTgsMTUgKzM3MzksMTggQEAKIAogCW1pZGkwc3RhdHVzID0gaGRzcF9yZWFkIChoZHNwLCBIRFNQX21pZGlTdGF0dXNJbjApICYgMHhmZjsKIAltaWRpMXN0YXR1cyA9IGhkc3BfcmVhZCAoaGRzcCwgSERTUF9taWRpU3RhdHVzSW4xKSAmIDB4ZmY7Ci0JCisKKwlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwogCWlmIChhdWRpbykgewogCQlpZiAoaGRzcC0+Y2FwdHVyZV9zdWJzdHJlYW0pCiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGhkc3AtPnBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbSk7Ci0JCQorCiAJCWlmIChoZHNwLT5wbGF5YmFja19zdWJzdHJlYW0pCiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGhkc3AtPnBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5zdWJzdHJlYW0pOwogCX0KLQkKKwogCWlmIChtaWRpMCAmJiBtaWRpMHN0YXR1cykgewogCQlpZiAoaGRzcC0+dXNlX21pZGlfdGFza2xldCkgewogCQkJLyogd2UgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIGlucHV0IHVudGlsIHByb2Nlc3NpbmcgaXMgZG9uZSAqLwpAQCAtMzc2OSwxMCArMzc5MywxMCBAQAogCiAgICAgICAgIGlmIChzbmRfQlVHX09OKGNoYW5uZWwgPCAwIHx8IGNoYW5uZWwgPj0gaGRzcC0+bWF4X2NoYW5uZWxzKSkKIAkJcmV0dXJuIE5VTEw7Ci0gICAgICAgIAorCiAJaWYgKChtYXBwZWRfY2hhbm5lbCA9IGhkc3AtPmNoYW5uZWxfbWFwW2NoYW5uZWxdKSA8IDApCiAJCXJldHVybiBOVUxMOwotCQorCiAJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCiAJCXJldHVybiBoZHNwLT5jYXB0dXJlX2J1ZmZlciArIChtYXBwZWRfY2hhbm5lbCAqIEhEU1BfQ0hBTk5FTF9CVUZGRVJfQllURVMpOwogCWVsc2UKQEAgLTM5NjUsNyArMzk4OSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpvdGhlcjsKIAlpbnQgcnVubmluZzsKLQkKKwogCWlmIChoZHNwX2NoZWNrX2Zvcl9pb2JveCAoaGRzcCkpCiAJCXJldHVybiAtRUlPOwogCkBAIC00MDU5LDEwICs0MDgzLDEwIEBACiAJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAjZW5kaWYKIAkucmF0ZXMgPQkJKFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKLQkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfCAKKwkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfAogCQkJCSBTTkRSVl9QQ01fUkFURV85NjAwMCksCiAJLnJhdGVfbWluID0JCTMyMDAwLAogCS5yYXRlX21heCA9CQk5NjAwMCwKQEAgLTQwODgsMTAgKzQxMTIsMTAgQEAKIAkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKICNlbmRpZgogCS5yYXRlcyA9CQkoU05EUlZfUENNX1JBVEVfMzIwMDAgfAotCQkJCSBTTkRSVl9QQ01fUkFURV80NDEwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV84ODIwMCB8IAorCQkJCSBTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV84ODIwMCB8CiAJCQkJIFNORFJWX1BDTV9SQVRFXzk2MDAwKSwKIAkucmF0ZV9taW4gPQkJMzIwMDAsCiAJLnJhdGVfbWF4ID0JCTk2MDAwLApAQCAtNDE3MCw3ICs0MTk0LDcgQEAKIAkJCS5tYXggPSBoZHNwLT5xc19pbl9jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKLQkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwkKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwogCX0gZWxzZSBpZiAoci0+bWluID4gNDgwMDAgJiYgci0+bWF4IDw9IDk2MDAwKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSBoZHNwLT5kc19pbl9jaGFubmVscywKQEAgLTQyMDEsNyArNDIyNSw3IEBACiAJCQkubWF4ID0gaGRzcC0+cXNfb3V0X2NoYW5uZWxzLAogCQkJLmludGVnZXIgPSAxLAogCQl9OwotCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CQorCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CiAJfSBlbHNlIGlmIChyLT5taW4gPiA0ODAwMCAmJiByLT5tYXggPD0gOTYwMDApIHsKIAkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0gewogCQkJLm1pbiA9IGhkc3AtPmRzX291dF9jaGFubmVscywKQEAgLTQzMTgsOCArNDM0Miw4IEBACiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWluID0gaGRzcC0+cXNfb3V0X2NoYW5uZWxzOwogCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSBoZHNwLT5zc19vdXRfY2hhbm5lbHM7Ci0JfQkKLQkKKwl9CisKIAlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKIAkJCSAgICAgc25kX2hkc3BfaHdfcnVsZV9vdXRfY2hhbm5lbHMsIGhkc3AsCiAJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpOwpAQCAtNDQxMywxMyArNDQzNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkc3BfaHdkZXBfZHVtbXlfb3Aoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIHdlIGhhdmUgbm90aGluZyB0byBpbml0aWFsaXplIGJ1dCB0aGUgY2FsbCBpcyByZXF1aXJlZCAqLwotCXJldHVybiAwOwotfQotCi0KIC8qIGhlbHBlciBmdW5jdGlvbnMgZm9yIGNvcHlpbmcgbWV0ZXIgdmFsdWVzICovCiBzdGF0aWMgaW5saW5lIGludCBjb3B5X3UzMl9sZSh2b2lkIF9fdXNlciAqZGVzdCwgdm9pZCBfX2lvbWVtICpzcmMpCiB7CkBAIC00NTM2LDcgKzQ1NTMsNyBAQAogCQkJCWhkc3AtPmlvYmFzZSArIEhEU1BfcGxheWJhY2tSbXNMZXZlbCArIGkgKiA4ICsgNCwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX3BsYXliYWNrUm1zTGV2ZWwgKyBpICogOCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdTY0X2xlKCZwZWFrX3Jtcy0+aW5wdXRfcm1zW2ldLCAKKwkJaWYgKGNvcHlfdTY0X2xlKCZwZWFrX3Jtcy0+aW5wdXRfcm1zW2ldLAogCQkJCWhkc3AtPmlvYmFzZSArIEhEU1BfaW5wdXRSbXNMZXZlbCArIGkgKiA4ICsgNCwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX2lucHV0Um1zTGV2ZWwgKyBpICogOCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ1NDYsNyArNDU2Myw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaHdkZXBfaW9jdGwoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWh3LT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCBoZHNwICpoZHNwID0gKHN0cnVjdCBoZHNwICopaHctPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgZXJyOwogCkBAIC00NTgwLDcgKzQ1OTcsNyBAQAogCQlzdHJ1Y3QgaGRzcF9jb25maWdfaW5mbyBpbmZvOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgaTsKLQkJCisKIAkJZXJyID0gaGRzcF9jaGVja19mb3JfaW9ib3goaGRzcCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTQ2MTQsNyArNDYzMSw3IEBACiAJCQlpbmZvLmFkX2dhaW4gPSAodW5zaWduZWQgY2hhciloZHNwX2FkX2dhaW4oaGRzcCk7CiAJCQlpbmZvLnBob25lX2dhaW4gPSAodW5zaWduZWQgY2hhciloZHNwX3Bob25lX2dhaW4oaGRzcCk7CiAJCQlpbmZvLnhscl9icmVha291dF9jYWJsZSA9ICh1bnNpZ25lZCBjaGFyKWhkc3BfeGxyX2JyZWFrb3V0X2NhYmxlKGhkc3ApOwotCQkKKwogCQl9CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIpCiAJCQlpbmZvLmFuYWxvZ19leHRlbnNpb25fYm9hcmQgPSAodW5zaWduZWQgY2hhciloZHNwX2FlYihoZHNwKTsKQEAgLTQ2MjUsNyArNDY0Miw3IEBACiAJfQogCWNhc2UgU05EUlZfSERTUF9JT0NUTF9HRVRfOTYzMl9BRUI6IHsKIAkJc3RydWN0IGhkc3BfOTYzMl9hZWIgaDk2MzJfYWViOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSAhPSBIOTYzMikgcmV0dXJuIC1FSU5WQUw7CiAJCWg5NjMyX2FlYi5hZWJpID0gaGRzcC0+c3NfaW5fY2hhbm5lbHMgLSBIOTYzMl9TU19DSEFOTkVMUzsKIAkJaDk2MzJfYWViLmFlYm8gPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgLSBIOTYzMl9TU19DSEFOTkVMUzsKQEAgLTQ2MzYsNyArNDY1Myw3IEBACiAJY2FzZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF9WRVJTSU9OOiB7CiAJCXN0cnVjdCBoZHNwX3ZlcnNpb24gaGRzcF92ZXJzaW9uOwogCQlpbnQgZXJyOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSB7CiAJCQlpZiAoKGVyciA9IGhkc3BfZ2V0X2lvYm94X3ZlcnNpb24oaGRzcCkpIDwgMCkKQEAgLTQ2NTIsNyArNDY2OSw3IEBACiAJCXN0cnVjdCBoZHNwX2Zpcm13YXJlIF9fdXNlciAqZmlybXdhcmU7CiAJCXUzMiBfX3VzZXIgKmZpcm13YXJlX2RhdGE7CiAJCWludCBlcnI7Ci0JCQorCiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAtRUlOVkFMOwogCQkvKiBTTkRSVl9IRFNQX0lPQ1RMX0dFVF9WRVJTSU9OIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCAqLwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBVbmRlZmluZWQpIHJldHVybiAtRUlOVkFMOwpAQCAtNDY2NSwyNSArNDY4MiwyNSBAQAogCiAJCWlmIChnZXRfdXNlcihmaXJtd2FyZV9kYXRhLCAmZmlybXdhcmUtPmZpcm13YXJlX2RhdGEpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQorCiAJCWlmIChoZHNwX2NoZWNrX2Zvcl9pb2JveCAoaGRzcCkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoaGRzcC0+ZmlybXdhcmVfY2FjaGUsIGZpcm13YXJlX2RhdGEsIHNpemVvZihoZHNwLT5maXJtd2FyZV9jYWNoZSkpICE9IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCisKIAkJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUNhY2hlZDsKIAogCQlpZiAoKGVyciA9IHNuZF9oZHNwX2xvYWRfZmlybXdhcmVfZnJvbV9jYWNoZShoZHNwKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJCisKIAkJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKSB7CiAJCQlpZiAoKGVyciA9IHNuZF9oZHNwX2VuYWJsZV9pbyhoZHNwKSkgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQkKLQkJCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CQkKKworCQkJc25kX2hkc3BfaW5pdGlhbGl6ZV9jaGFubmVscyhoZHNwKTsKIAkJCXNuZF9oZHNwX2luaXRpYWxpemVfbWlkaV9mbHVzaChoZHNwKTsKLQkgICAgCisKIAkJCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX2Fsc2FfZGV2aWNlcyhoZHNwLT5jYXJkLCBoZHNwKSkgPCAwKSB7CiAJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IGVycm9yIGNyZWF0aW5nIGFsc2EgZGV2aWNlc1xuIik7CiAJCQkJcmV0dXJuIGVycjsKQEAgLTQ3MzAsMTggKzQ3NDcsMTYgQEAKIHsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpodzsKIAlpbnQgZXJyOwotCQorCiAJaWYgKChlcnIgPSBzbmRfaHdkZXBfbmV3KGNhcmQsICJIRFNQIGh3ZGVwIiwgMCwgJmh3KSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQkKKwogCWhkc3AtPmh3ZGVwID0gaHc7CiAJaHctPnByaXZhdGVfZGF0YSA9IGhkc3A7CiAJc3RyY3B5KGh3LT5uYW1lLCAiSERTUCBod2RlcCBpbnRlcmZhY2UiKTsKIAotCWh3LT5vcHMub3BlbiA9IHNuZF9oZHNwX2h3ZGVwX2R1bW15X29wOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfaGRzcF9od2RlcF9pb2N0bDsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfaGRzcF9od2RlcF9kdW1teV9vcDsKLQkJCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDc3NCwyNCArNDc4OSwyNCBAQAogc3RhdGljIGludCBzbmRfaGRzcF9lbmFibGVfaW8gKHN0cnVjdCBoZHNwICpoZHNwKQogewogCWludCBpOwotCQorCiAJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCAxMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlbmFibGVfaW8gZmlmb193YWl0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCWZvciAoaSA9IDA7IGkgPCBoZHNwLT5tYXhfY2hhbm5lbHM7ICsraSkgewogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2lucHV0RW5hYmxlICsgKDQgKiBpKSwgMSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1Bfb3V0cHV0RW5hYmxlICsgKDQgKiBpKSwgMSk7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaW50IHN0YXR1cywgYWViaV9jaGFubmVscywgYWVib19jaGFubmVsczsKLQkKKwogCXN3aXRjaCAoaGRzcC0+aW9fdHlwZSkgewogCWNhc2UgRGlnaWZhY2U6CiAJCWhkc3AtPmNhcmRfbmFtZSA9ICJSTUUgSGFtbWVyZmFsbCBEU1AgKyBEaWdpZmFjZSI7CkBAIC00ODA0LDcgKzQ4MTksNyBAQAogCQloZHNwLT5zc19pbl9jaGFubmVscyA9IGhkc3AtPnNzX291dF9jaGFubmVscyA9IEg5NjUyX1NTX0NIQU5ORUxTOwogCQloZHNwLT5kc19pbl9jaGFubmVscyA9IGhkc3AtPmRzX291dF9jaGFubmVscyA9IEg5NjUyX0RTX0NIQU5ORUxTOwogCQlicmVhazsKLQkKKwogCWNhc2UgSDk2MzI6CiAJCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAkJLyogSERTUF9BRUJ4IGJpdHMgYXJlIGxvdyB3aGVuIEFFQiBhcmUgY29ubmVjdGVkICovCkBAIC00ODI0LDcgKzQ4MzksNyBAQAogCQloZHNwLT5zc19pbl9jaGFubmVscyA9IGhkc3AtPnNzX291dF9jaGFubmVscyA9IE1VTFRJRkFDRV9TU19DSEFOTkVMUzsKIAkJaGRzcC0+ZHNfaW5fY2hhbm5lbHMgPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMgPSBNVUxUSUZBQ0VfRFNfQ0hBTk5FTFM7CiAJCWJyZWFrOwotCQkKKwogCWRlZmF1bHQ6CiAgCQkvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAkJYnJlYWs7CkBAIC00ODQwLDEyICs0ODU1LDEyIEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2NyZWF0ZV9hbHNhX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpbnQgZXJyOwotCQorCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfcGNtKGNhcmQsIGhkc3ApKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IEVycm9yIGNyZWF0aW5nIHBjbSBpbnRlcmZhY2VcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQkKKwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfbWlkaShjYXJkLCBoZHNwLCAwKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBjcmVhdGluZyBmaXJzdCBtaWRpIGludGVyZmFjZVxuIik7CkBAIC00ODc2LDE5ICs0ODkxLDE5IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBzZXR0aW5nIGRlZmF1bHQgdmFsdWVzXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JCisKIAlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKIAkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkhhbW1lcmZhbGwgRFNQIik7Ci0JCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLCAKKwkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwLT5jYXJkX25hbWUsCiAJCQloZHNwLT5wb3J0LCBoZHNwLT5pcnEpOwotCSAgICAKKwogCQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlcnJvciByZWdpc3RlcmluZyBjYXJkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJaGRzcC0+c3RhdGUgfD0gSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCkBAIC00ODk5LDcgKzQ5MTQsNyBAQAogCWNvbnN0IGNoYXIgKmZ3ZmlsZTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCBlcnI7Ci0JCQorCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKIAkJcmV0dXJuIDA7CiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSB7CkBAIC00OTA4LDcgKzQ5MjMsNyBAQAogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKQogCQkJcmV0dXJuIDA7CiAJfQotCQorCiAJLyogY2F1dGlvbjogbWF4IGxlbmd0aCBvZiBmaXJtd2FyZSBmaWxlbmFtZSBpcyAzMCEgKi8KIAlzd2l0Y2ggKGhkc3AtPmlvX3R5cGUpIHsKIAljYXNlIE11bHRpZmFjZToKQEAgLTQ5NDIsMTIgKzQ5NTcsMTIgQEAKIAltZW1jcHkoaGRzcC0+ZmlybXdhcmVfY2FjaGUsIGZ3LT5kYXRhLCBzaXplb2YoaGRzcC0+ZmlybXdhcmVfY2FjaGUpKTsKIAogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCQkKKwogCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVDYWNoZWQ7CiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2xvYWRfZmlybXdhcmVfZnJvbV9jYWNoZShoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQkKKwogCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkgewogCQlpZiAoKGVyciA9IHNuZF9oZHNwX2VuYWJsZV9pbyhoZHNwKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTQ5OTQsMTQgKzUwMDksMTQgQEAKIAloZHNwLT5tYXhfY2hhbm5lbHMgPSAyNjsKIAogCWhkc3AtPmNhcmQgPSBjYXJkOwotCQorCiAJc3Bpbl9sb2NrX2luaXQoJmhkc3AtPmxvY2spOwogCiAJdGFza2xldF9pbml0KCZoZHNwLT5taWRpX3Rhc2tsZXQsIGhkc3BfbWlkaV90YXNrbGV0LCAodW5zaWduZWQgbG9uZyloZHNwKTsKLQkKKwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhkc3AtPnBjaSwgUENJX0NMQVNTX1JFVklTSU9OLCAmaGRzcC0+ZmlybXdhcmVfcmV2KTsKIAloZHNwLT5maXJtd2FyZV9yZXYgJj0gMHhmZjsKLQkKKwogCS8qIEZyb20gTWFydGluIEJqb2VybnNlbiA6CiAJICAgICJJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgY2FyZCdzIGxhdGVuY3kgdGltZXIgcmVnaXN0ZXIgaW4KIAkgICAgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGlzIHNldCB0byBhIHZhbHVlIG11Y2ggbGFyZ2VyCkBAIC01MDEwLDcgKzUwMjUsNyBAQAogCSAgICB0byBpdHMgbWF4aW11bSAyNTUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lIGNvbXB1dGVycy4iCiAJKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaGRzcC0+cGNpLCBQQ0lfTEFURU5DWV9USU1FUiwgMHhGRik7Ci0JCisKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSC1EU1AiKTsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiWGlsaW54IEZQR0EiKTsKIApAQCAtNTAyNCw3ICs1MDM5LDcgQEAKIAl9IGVsc2UgewogCQloZHNwLT5jYXJkX25hbWUgPSAiUk1FIEhEU1AgOTYzMiI7CiAJCWhkc3AtPm1heF9jaGFubmVscyA9IDE2OwotCQlpc185NjMyID0gMTsJCisJCWlzXzk2MzIgPSAxOwogCX0KIAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQpAQCAtNTA1MywxMiArNTA2OCwxMiBAQAogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9pbml0aWFsaXplX21lbW9yeShoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQotCWlmICghaXNfOTY1MiAmJiAhaXNfOTYzMikgewotCQkvKiB3ZSB3YWl0IDIgc2Vjb25kcyB0byBsZXQgZnJlc2hseSBpbnNlcnRlZCBjYXJkYnVzIGNhcmRzIGRvIHRoZWlyIGhhcmR3YXJlIGluaXQgKi8KLQkJc3NsZWVwKDIpOwogCi0JCWVyciA9IGhkc3BfY2hlY2tfZm9yX2lvYm94KGhkc3ApOworCWlmICghaXNfOTY1MiAmJiAhaXNfOTYzMikgeworCQkvKiB3ZSB3YWl0IGEgbWF4aW11bSBvZiAxMCBzZWNvbmRzIHRvIGxldCBmcmVzaGx5CisJCSAqIGluc2VydGVkIGNhcmRidXMgY2FyZHMgZG8gdGhlaXIgaGFyZHdhcmUgaW5pdCAqLworCQllcnIgPSBoZHNwX3dhaXRfZm9yX2lvYm94KGhkc3AsIDEwMDAsIDEwKTsKKwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKQEAgLTUwODAsMzUgKzUwOTUsMzUgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IEZpcm13YXJlIGFscmVhZHkgcHJlc2VudCwgaW5pdGlhbGl6aW5nIGNhcmQuXG4iKTsJICAgIAorCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBGaXJtd2FyZSBhbHJlYWR5IHByZXNlbnQsIGluaXRpYWxpemluZyBjYXJkLlxuIik7CiAJCQlpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKSAmIEhEU1BfdmVyc2lvbjEpCiAJCQkJaGRzcC0+aW9fdHlwZSA9IE11bHRpZmFjZTsKLQkJCWVsc2UgCisJCQllbHNlCiAJCQkJaGRzcC0+aW9fdHlwZSA9IERpZ2lmYWNlOwogCQl9CiAJfQotCQorCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpICE9IDApCiAJCXJldHVybiBlcnI7Ci0JCisKIAlpZiAoaXNfOTY1MikKIAkgICAgICAgIGhkc3AtPmlvX3R5cGUgPSBIOTY1MjsKLQkKKwogCWlmIChpc185NjMyKQogCQloZHNwLT5pb190eXBlID0gSDk2MzI7CiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9od2RlcChjYXJkLCBoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCQorCiAJc25kX2hkc3BfaW5pdGlhbGl6ZV9jaGFubmVscyhoZHNwKTsKIAlzbmRfaGRzcF9pbml0aWFsaXplX21pZGlfZmx1c2goaGRzcCk7CiAKLQloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwkKKwloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfYWxzYV9kZXZpY2VzKGNhcmQsIGhkc3ApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsJCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZnJlZShzdHJ1Y3QgaGRzcCAqaGRzcCkKQEAgLTUxMjQsMTMgKzUxMzksMTMgQEAKIAkJZnJlZV9pcnEoaGRzcC0+aXJxLCAodm9pZCAqKWhkc3ApOwogCiAJc25kX2hkc3BfZnJlZV9idWZmZXJzKGhkc3ApOwotCQorCiAJaWYgKGhkc3AtPmlvYmFzZSkKIAkJaW91bm1hcChoZHNwLT5pb2Jhc2UpOwogCiAJaWYgKGhkc3AtPnBvcnQpCiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaGRzcC0+cGNpKTsKLQkJCisKIAlwY2lfZGlzYWJsZV9kZXZpY2UoaGRzcC0+cGNpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNTgsOCArNTE3MywxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGhkc3ApKSkpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaGRzcCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWhkc3AgPSAoc3RydWN0IGhkc3AgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9oZHNwX2NhcmRfZnJlZTsKQEAgLTUxNzMsNyArNTE5MCw3IEBACiAJfQogCiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkhhbW1lcmZhbGwgRFNQIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwLT5jYXJkX25hbWUsIAorCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLAogCQloZHNwLT5wb3J0LCBoZHNwLT5pcnEpOwogCiAJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCA3MTIzMWNmLi5iYWMyZGMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTQxMDAsMTMgKzQxMDAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwbV9od2RlcF9kdW1teV9vcChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIHdlIGhhdmUgbm90aGluZyB0byBpbml0aWFsaXplIGJ1dCB0aGUgY2FsbCBpcyByZXF1aXJlZCAqLwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgc25kX2hkc3BtX2h3ZGVwX2lvY3RsKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDIxMyw5ICs0MjA2LDcgQEAKIAlody0+cHJpdmF0ZV9kYXRhID0gaGRzcG07CiAJc3RyY3B5KGh3LT5uYW1lLCAiSERTUE0gaHdkZXAgaW50ZXJmYWNlIik7CiAKLQlody0+b3BzLm9wZW4gPSBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3A7CiAJaHctPm9wcy5pb2N0bCA9IHNuZF9oZHNwbV9od2RlcF9pb2N0bDsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3A7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MDMsMTAgKzQ0OTQsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGhkc3BtKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwKKwkJCSAgICAgIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGhkc3BtKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaGRzcG0gPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2hkc3BtX2NhcmRfZnJlZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCAyNTcwOTA3Li5iYzUzOWFiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0yNTk0LDExICsyNTk0LDExIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MikpOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3JtZTk2NTIpLCAmY2FyZCk7CiAKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJcm1lOTY1MiA9IChzdHJ1Y3Qgc25kX3JtZTk2NTIgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWU5NjUyX2NhcmRfZnJlZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zaXM3MDE5LmMgYi9zb3VuZC9wY2kvc2lzNzAxOS5jCmluZGV4IGRmMjAwN2UuLmJhZjZkOGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zaXM3MDE5LmMKKysrIGIvc291bmQvcGNpL3NpczcwMTkuYwpAQCAtMTM4Nyw5ICsxMzg3LDggQEAKIAlpZiAoIWVuYWJsZSkKIAkJZ290byBlcnJvcl9vdXQ7CiAKLQlyYyA9IC1FTk9NRU07Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKnNpcykpOwotCWlmICghY2FyZCkKKwlyYyA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKnNpcyksICZjYXJkKTsKKwlpZiAocmMgPCAwKQogCQlnb3RvIGVycm9yX291dDsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTaVM3MDE5Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCBjZDQwOGI4Li5kOTg5MjE1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI3Myw3ICsyNzMsOCBAQAogCW91dGwoY291bnQsIHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfQ09VTlQwKTsKIAlvdXRiKDB4MTgsIHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfTU9ERSk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWFhOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLCBhZGRyLCBpbmwoc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9BRERSMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwcm9ncmFtIGRtYWE6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsCisJICAgICAgIGFkZHIsIGlubChzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CiAjZW5kaWYKIH0KIApAQCAtMjg4LDcgKzI4OSw4IEBACiAJb3V0bChjb3VudCwgc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9DT1VOVDApOwogCW91dGIoMHgxNCwgc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9NT0RFKTsKICNpZiAwCi0JcHJpbnRrKCJwcm9ncmFtIGRtYWM6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsIGFkZHIsIGlubChzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInByb2dyYW0gZG1hYzogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwKKwkgICAgICAgYWRkciwgaW5sKHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKICNlbmRpZgogfQogCkBAIC0zNTUsNzEgKzM1NywxMDQgQEAKICNpZiAwCiBzdGF0aWMgdm9pZCBzbmRfc29uaWN2aWJlc19kZWJ1ZyhzdHJ1Y3Qgc29uaWN2aWJlcyAqIHNvbmljKQogewotCXByaW50aygiU1YgUkVHUzogICAgICAgICAgSU5ERVggPSAweCUwMnggICIsIGluYihTVl9SRUcoc29uaWMsIElOREVYKSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJTViBSRUdTOiAgICAgICAgICBJTkRFWCA9IDB4JTAyeCAgIiwgaW5iKFNWX1JFRyhzb25pYywgSU5ERVgpKSk7CiAJcHJpbnRrKCIgICAgICAgICAgICAgICAgIFNUQVRVUyA9IDB4JTAyeFxuIiwgaW5iKFNWX1JFRyhzb25pYywgU1RBVFVTKSkpOwotCXByaW50aygiICAweDAwOiBsZWZ0IGlucHV0ICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMDogbGVmdCBpbnB1dCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMCkpOwogCXByaW50aygiICAweDIwOiBzeW50aCByYXRlIGxvdyAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIwKSk7Ci0JcHJpbnRrKCIgIDB4MDE6IHJpZ2h0IGlucHV0ICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAxOiByaWdodCBpbnB1dCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAxKSk7CiAJcHJpbnRrKCIgIDB4MjE6IHN5bnRoIHJhdGUgaGlnaCA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjEpKTsKLQlwcmludGsoIiAgMHgwMjogbGVmdCBBVVgxICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDI6IGxlZnQgQVVYMSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDIpKTsKIAlwcmludGsoIiAgMHgyMjogQURDIGNsb2NrICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMikpOwotCXByaW50aygiICAweDAzOiByaWdodCBBVVgxICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAzKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMzogcmlnaHQgQVVYMSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMykpOwogCXByaW50aygiICAweDIzOiBBREMgYWx0IHJhdGUgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIzKSk7Ci0JcHJpbnRrKCIgIDB4MDQ6IGxlZnQgQ0QgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA0OiBsZWZ0IENEICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA0KSk7CiAJcHJpbnRrKCIgIDB4MjQ6IEFEQyBwbGwgTSAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjQpKTsKLQlwcmludGsoIiAgMHgwNTogcmlnaHQgQ0QgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDU6IHJpZ2h0IENEICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDUpKTsKIAlwcmludGsoIiAgMHgyNTogQURDIHBsbCBOICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNSkpOwotCXByaW50aygiICAweDA2OiBsZWZ0IGxpbmUgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNjogbGVmdCBsaW5lICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNikpOwogCXByaW50aygiICAweDI2OiBTeW50aCBwbGwgTSAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI2KSk7Ci0JcHJpbnRrKCIgIDB4MDc6IHJpZ2h0IGxpbmUgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDcpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA3OiByaWdodCBsaW5lICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA3KSk7CiAJcHJpbnRrKCIgIDB4Mjc6IFN5bnRoIHBsbCBOICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjcpKTsKLQlwcmludGsoIiAgMHgwODogTUlDICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDg6IE1JQyAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDgpKTsKIAlwcmludGsoIiAgMHgyODogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyOCkpOwotCXByaW50aygiICAweDA5OiBHYW1lIHBvcnQgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA5KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwOTogR2FtZSBwb3J0ICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOSkpOwogCXByaW50aygiICAweDI5OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI5KSk7Ci0JcHJpbnRrKCIgIDB4MGE6IGxlZnQgc3ludGggICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBhOiBsZWZ0IHN5bnRoICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBhKSk7CiAJcHJpbnRrKCIgIDB4MmE6IE1QVTQwMSAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmEpKTsKLQlwcmludGsoIiAgMHgwYjogcmlnaHQgc3ludGggICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGI6IHJpZ2h0IHN5bnRoICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGIpKTsKIAlwcmludGsoIiAgMHgyYjogZHJpdmUgY3RybCAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyYikpOwotCXByaW50aygiICAweDBjOiBsZWZ0IEFVWDIgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBjKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwYzogbGVmdCBBVVgyICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYykpOwogCXByaW50aygiICAweDJjOiBTUlMgc3BhY2UgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJjKSk7Ci0JcHJpbnRrKCIgIDB4MGQ6IHJpZ2h0IEFVWDIgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBkOiByaWdodCBBVVgyICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBkKSk7CiAJcHJpbnRrKCIgIDB4MmQ6IFNSUyBjZW50ZXIgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmQpKTsKLQlwcmludGsoIiAgMHgwZTogbGVmdCBhbmFsb2cgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGU6IGxlZnQgYW5hbG9nICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGUpKTsKIAlwcmludGsoIiAgMHgyZTogd2F2ZSBzb3VyY2UgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyZSkpOwotCXByaW50aygiICAweDBmOiByaWdodCBhbmFsb2cgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBmKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwZjogcmlnaHQgYW5hbG9nICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZikpOwogCXByaW50aygiICAweDJmOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJmKSk7Ci0JcHJpbnRrKCIgIDB4MTA6IGxlZnQgUENNICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTApKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDEwOiBsZWZ0IFBDTSAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEwKSk7CiAJcHJpbnRrKCIgIDB4MzA6IGFuYWxvZyBwb3dlciAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzApKTsKLQlwcmludGsoIiAgMHgxMTogcmlnaHQgUENNICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTE6IHJpZ2h0IFBDTSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTEpKTsKIAlwcmludGsoIiAgMHgzMTogYW5hbG9nIHBvd2VyICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMSkpOwotCXByaW50aygiICAweDEyOiBETUEgZGF0YSBmb3JtYXQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEyKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMjogRE1BIGRhdGEgZm9ybWF0ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMikpOwogCXByaW50aygiICAweDMyOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMyKSk7Ci0JcHJpbnRrKCIgIDB4MTM6IFAvQyBlbmFibGUgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTMpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDEzOiBQL0MgZW5hYmxlICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEzKSk7CiAJcHJpbnRrKCIgIDB4MzM6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzMpKTsKLQlwcmludGsoIiAgMHgxNDogVS9EIGJ1dHRvbiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTQ6IFUvRCBidXR0b24gICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTQpKTsKIAlwcmludGsoIiAgMHgzNDogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNCkpOwotCXByaW50aygiICAweDE1OiByZXZpc2lvbiAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE1KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNTogcmV2aXNpb24gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNSkpOwogCXByaW50aygiICAweDM1OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM1KSk7Ci0JcHJpbnRrKCIgIDB4MTY6IEFEQyBvdXRwdXQgY3RybCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTYpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE2OiBBREMgb3V0cHV0IGN0cmwgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE2KSk7CiAJcHJpbnRrKCIgIDB4MzY6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzYpKTsKLQlwcmludGsoIiAgMHgxNzogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTcpKTsKIAlwcmludGsoIiAgMHgzNzogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNykpOwotCXByaW50aygiICAweDE4OiBETUEgQSB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE4KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxODogRE1BIEEgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOCkpOwogCXByaW50aygiICAweDM4OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM4KSk7Ci0JcHJpbnRrKCIgIDB4MTk6IERNQSBBIGxvd2VyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTkpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE5OiBETUEgQSBsb3dlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE5KSk7CiAJcHJpbnRrKCIgIDB4Mzk6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzkpKTsKLQlwcmludGsoIiAgMHgxYTogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWE6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWEpKTsKIAlwcmludGsoIiAgMHgzYTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzYSkpOwotCXByaW50aygiICAweDFiOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFiKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYikpOwogCXByaW50aygiICAweDNiOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNiKSk7Ci0JcHJpbnRrKCIgIDB4MWM6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWMpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFjOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFjKSk7CiAJcHJpbnRrKCIgIDB4M2M6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2MpKTsKLQlwcmludGsoIiAgMHgxZDogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWQ6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWQpKTsKIAlwcmludGsoIiAgMHgzZDogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzZCkpOwotCXByaW50aygiICAweDFlOiBQQ00gcmF0ZSBsb3cgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFlKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxZTogUENNIHJhdGUgbG93ICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZSkpOwogCXByaW50aygiICAweDNlOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNlKSk7Ci0JcHJpbnRrKCIgIDB4MWY6IFBDTSByYXRlIGhpZ2ggICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWYpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFmOiBQQ00gcmF0ZSBoaWdoICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFmKSk7CiAJcHJpbnRrKCIgIDB4M2Y6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2YpKTsKIH0KIApAQCAtNDc2LDggKzUxMSw4IEBACiAJKnJlc19tID0gbTsKIAkqcmVzX24gPSBuOwogI2lmIDAKLQlwcmludGsoIm1ldHJpYyA9ICVpLCB4bSA9ICVpLCB4biA9ICVpXG4iLCBtZXRyaWMsIHhtLCB4bik7Ci0JcHJpbnRrKCJwbGw6IG0gPSAweCV4LCByID0gMHgleCwgbiA9IDB4JXhcbiIsIHJlZywgbSwgciwgbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIm1ldHJpYyA9ICVpLCB4bSA9ICVpLCB4biA9ICVpXG4iLCBtZXRyaWMsIHhtLCB4bik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBsbDogbSA9IDB4JXgsIHIgPSAweCV4LCBuID0gMHgleFxuIiwgcmVnLCBtLCByLCBuKTsKICNlbmRpZgogfQogCkBAIC0xNDIzLDkgKzE0NTgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAgCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZm9yIChpZHggPSAwOyBpZHggPCA1OyBpZHgrKykgewogCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgaWR4KSA9PSAwIHx8CiAJCSAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwY2ksIGlkeCkgJiBJT1JFU09VUkNFX0lPKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCmluZGV4IGQ5NGIxNmYuLjIxY2VmOTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKQEAgLTg5LDkgKzg5LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF90cmlkZW50X2NyZWF0ZShjYXJkLCBwY2ksCiAJCQkJICAgICAgcGNtX2NoYW5uZWxzW2Rldl0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCmluZGV4IGM2MTJiNDMuLmE5ZGE5YzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jCkBAIC02OCw0MCArNjgsNDAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdmFsLCB0bXA7CiAKLQlwcmludGsoIlRyaWRlbnQgdm9pY2UgJWk6XG4iLCB2b2ljZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlRyaWRlbnQgdm9pY2UgJWk6XG4iLCB2b2ljZSk7CiAJb3V0Yih2b2ljZSwgVFJJRF9SRUcodHJpZGVudCwgVDREX0xGT19HQ19DSVIpKTsKIAl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTEJBKSk7Ci0JcHJpbnRrKCJMQkE6IDB4JXhcbiIsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkxCQTogMHgleFxuIiwgdmFsKTsKIAl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfR1ZTRUxfUEFOX1ZPTF9DVFJMX0VDKSk7Ci0JcHJpbnRrKCJHVlNlbDogJWlcbiIsIHZhbCA+PiAzMSk7Ci0JcHJpbnRrKCJQYW46IDB4JXhcbiIsICh2YWwgPj4gMjQpICYgMHg3Zik7Ci0JcHJpbnRrKCJWb2w6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHhmZik7Ci0JcHJpbnRrKCJDVFJMOiAweCV4XG4iLCAodmFsID4+IDEyKSAmIDB4MGYpOwotCXByaW50aygiRUM6IDB4JXhcbiIsIHZhbCAmIDB4MGZmZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdWU2VsOiAlaVxuIiwgdmFsID4+IDMxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUGFuOiAweCV4XG4iLCAodmFsID4+IDI0KSAmIDB4N2YpOworCXByaW50ayhLRVJOX0RFQlVHICJWb2w6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHhmZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkNUUkw6IDB4JXhcbiIsICh2YWwgPj4gMTIpICYgMHgwZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkVDOiAweCV4XG4iLCB2YWwgJiAweDBmZmYpOwogCWlmICh0cmlkZW50LT5kZXZpY2UgIT0gVFJJREVOVF9ERVZJQ0VfSURfTlgpIHsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0RYX0NTT19BTFBIQV9GTVMpKTsKLQkJcHJpbnRrKCJDU086IDB4JXhcbiIsIHZhbCA+PiAxNik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDU086IDB4JXhcbiIsIHZhbCA+PiAxNik7CiAJCXByaW50aygiQWxwaGE6IDB4JXhcbiIsICh2YWwgPj4gNCkgJiAweDBmZmYpOwotCQlwcmludGsoIkZNUzogMHgleFxuIiwgdmFsICYgMHgwZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJGTVM6IDB4JXhcbiIsIHZhbCAmIDB4MGYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfRFhfRVNPX0RFTFRBKSk7Ci0JCXByaW50aygiRVNPOiAweCV4XG4iLCB2YWwgPj4gMTYpOwotCQlwcmludGsoIkRlbHRhOiAweCV4XG4iLCB2YWwgJiAweGZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRVNPOiAweCV4XG4iLCB2YWwgPj4gMTYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRGVsdGE6IDB4JXhcbiIsIHZhbCAmIDB4ZmZmZik7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9EWF9GTUNfUlZPTF9DVk9MKSk7CiAJfSBlbHNlIHsJCS8vIFRSSURFTlRfREVWSUNFX0lEX05YCiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9OWF9ERUxUQV9DU08pKTsKIAkJdG1wID0gKHZhbCA+PiAyNCkgJiAweGZmOwotCQlwcmludGsoIkNTTzogMHgleFxuIiwgdmFsICYgMHgwMGZmZmZmZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfREVMVEFfRVNPKSk7CiAJCXRtcCB8PSAodmFsID4+IDE2KSAmIDB4ZmYwMDsKLQkJcHJpbnRrKCJEZWx0YTogMHgleFxuIiwgdG1wKTsKLQkJcHJpbnRrKCJFU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRGVsdGE6IDB4JXhcbiIsIHRtcCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJFU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfQUxQSEFfRk1TX0ZNQ19SVk9MX0NWT0wpKTsKLQkJcHJpbnRrKCJBbHBoYTogMHgleFxuIiwgdmFsID4+IDIwKTsKLQkJcHJpbnRrKCJGTVM6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHgwZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJBbHBoYTogMHgleFxuIiwgdmFsID4+IDIwKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZNUzogMHgleFxuIiwgKHZhbCA+PiAxNikgJiAweDBmKTsKIAl9Ci0JcHJpbnRrKCJGTUM6IDB4JXhcbiIsICh2YWwgPj4gMTQpICYgMyk7Ci0JcHJpbnRrKCJSVm9sOiAweCV4XG4iLCAodmFsID4+IDcpICYgMHg3Zik7Ci0JcHJpbnRrKCJDVm9sOiAweCV4XG4iLCB2YWwgJiAweDdmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiRk1DOiAweCV4XG4iLCAodmFsID4+IDE0KSAmIDMpOworCXByaW50ayhLRVJOX0RFQlVHICJSVm9sOiAweCV4XG4iLCAodmFsID4+IDcpICYgMHg3Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkNWb2w6IDB4JXhcbiIsIHZhbCAmIDB4N2YpOwogfQogI2VuZGlmCiAKQEAgLTQ5NiwxMiArNDk2LDE3IEBACiAJb3V0bChyZWdzWzRdLCBUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDE2KSk7CiAKICNpZiAwCi0JcHJpbnRrKCJ3cml0dGVuICVpIGNoYW5uZWw6XG4iLCB2b2ljZS0+bnVtYmVyKTsKLQlwcmludGsoIiAgcmVnc1swXSA9IDB4JXgvMHgleFxuIiwgcmVnc1swXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMCkpKTsKLQlwcmludGsoIiAgcmVnc1sxXSA9IDB4JXgvMHgleFxuIiwgcmVnc1sxXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgNCkpKTsKLQlwcmludGsoIiAgcmVnc1syXSA9IDB4JXgvMHgleFxuIiwgcmVnc1syXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgOCkpKTsKLQlwcmludGsoIiAgcmVnc1szXSA9IDB4JXgvMHgleFxuIiwgcmVnc1szXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTIpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbNF0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbNF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDE2KSkpOworCXByaW50ayhLRVJOX0RFQlVHICJ3cml0dGVuICVpIGNoYW5uZWw6XG4iLCB2b2ljZS0+bnVtYmVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzBdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzBdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAwKSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbMV0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbMV0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDQpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1syXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1syXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgOCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzNdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzNdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxMikpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzRdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzRdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpKTsKICNlbmRpZgogfQogCkBAIC01ODMsNyArNTg4LDcgQEAKIAkJb3V0Yih2b2ljZS0+Vm9sID4+IDIsIFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQyArIDIpKTsKIAkJYnJlYWs7CiAJY2FzZSBUUklERU5UX0RFVklDRV9JRF9TSTcwMTg6Ci0JCS8vIHByaW50aygidm9pY2UtPlZvbCA9IDB4JXhcbiIsIHZvaWNlLT5Wb2wpOworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAidm9pY2UtPlZvbCA9IDB4JXhcbiIsIHZvaWNlLT5Wb2wpOyAqLwogCQlvdXR3KCh2b2ljZS0+Q1RSTCA8PCAxMikgfCB2b2ljZS0+Vm9sLAogCQkgICAgIFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQykpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IDFhYWZlOTUuLjgwOWIyMzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtNDY2LDcgKzQ2NiwxMCBAQAogCQkJCQlmbGFnID0gVklBX1RCTF9CSVRfRkxBRzsgLyogcGVyaW9kIGJvdW5kYXJ5ICovCiAJCQl9IGVsc2UKIAkJCQlmbGFnID0gMDsgLyogcGVyaW9kIGNvbnRpbnVlcyB0byB0aGUgbmV4dCAqLwotCQkJLy8gcHJpbnRrKCJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgKHJlc3QgJWQpXG4iLCBpZHgsIG9mcywgciwgcmVzdCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInZpYTogdGJsICVkOiBhdCAlZCAgc2l6ZSAlZCAiCisJCQkgICAgICAgIihyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJKi8KIAkJCSgodTMyICopZGV2LT50YWJsZS5hcmVhKVsoaWR4PDwxKSArIDFdID0gY3B1X3RvX2xlMzIociB8IGZsYWcpOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5vZmZzZXQgPSBvZnM7CiAJCQlkZXYtPmlkeF90YWJsZVtpZHhdLnNpemUgPSByOwpAQCAtMjM2MCwxNCArMjM2MywxNCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDA5OTYsICJFU0MgTW9ibyIsIFZJQV9EWFNfNDhLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwYTgxLCAiRUNTIEs3VlRBMyB2OC4wIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDBhODUsICJFQ1MgTDdWTU0yIiwgVklBX0RYU19OT19WUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAwLCAiRVNDIEs4IiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTAxOSwgIkVTQyBLOCIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHhhYTAxLCAiRVNDIEs4VDg5MC1BIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwMzMsICJBY2VyIEluc3BpcmUgMTM1M0xNIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwNDYsICJBY2VyIEFzcGlyZSAxNTI0IFdMTWkiLCBWSUFfRFhTX1NSQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDAsICJBU1VTIEE3L0E4IiwgVklBX0RYU19OT19WUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDcxLCAwLCAiRGl2ZXJzZSBOb3RlYm9vayIsIFZJQV9EWFNfTk9fVlJBKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNDMsICJBU1VTIEE3L0E4IiwgVklBX0RYU19OT19WUkEpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA3MSwgIkRpdmVyc2UgTm90ZWJvb2siLCBWSUFfRFhTX05PX1ZSQSksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTE4ZSwgIkZTQyBMYXB0b3AiLCBWSUFfRFhTX0VOQUJMRSksCi0JU05EX1BDSV9RVUlSSygweDExMDYsIDAsICJBU1JvY2siLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMTA2LCAiQVNSb2NrIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMjk3LCAweGEyMzEsICJTaHV0dGxlIEFLMzF2MiIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhhMjMyLCAiU2h1dHRsZSIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhjMTYwLCAiU2h1dHRsZSBTazQxRyIsIFZJQV9EWFNfU1JDKSwKQEAgLTIzNzUsNyArMjM3OCw3IEBACiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MzgwMCwgIk1TSSBLVDI2NiIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHg3MTIwLCAiTVNJIEtUNFYiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzE0MiwgIk1TSSBLOE1NLVYiLCBWSUFfRFhTX0VOQUJMRSksCi0JU05EX1BDSV9RVUlSSygweDE0NjIsIDAsICJNU0kgTW9ibyIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE0NjIsICJNU0kgTW9ibyIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDAxLCAiQUJJVCBLRDcoLVJBSUQpIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDE0MTEsICJBQklUIFZBLTIwIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDE0MTMsICJBQklUIEtWOCBQcm8iLCBWSUFfRFhTX0VOQUJMRSksCkBAIC0yMzg5LDExICsyMzkyLDExIEBACiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjAzMiwgIm02ODB4IG1hY2hpbmVzIiwgVklBX0RYU180OEspLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGUwMDQsICJQQiBFYXN5Tm90ZSAzMTc0IiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNjk1LCAweDMwMDUsICJFUG9YIEVQLThLOUEiLCBWSUFfRFhTX0VOQUJMRSksCi0JU05EX1BDSV9RVUlSSygweDE2OTUsIDAsICJFUG9YIG1vYm8iLCBWSUFfRFhTX1NSQyksCi0JU05EX1BDSV9RVUlSSygweDE2ZjMsIDAsICJKZXR3YXkgSzgiLCBWSUFfRFhTX1NSQyksCi0JU05EX1BDSV9RVUlSSygweDE3MzQsIDAsICJGU0MgTGFwdG9wIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTY5NSwgIkVQb1ggbW9ibyIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE2ZjMsICJKZXR3YXkgSzgiLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNzM0LCAiRlNDIExhcHRvcCIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgzMDU5LCAiQVNSb2NrIEs3Vk0yIiwgVklBX0RYU19OT19WUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAwLCAiQVNSb2NrIG1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxODQ5LCAiQVNSb2NrIG1vYm8iLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE5MTksIDB4MjAwYSwgIlNvbHRlayBTTC1LOCIsICBWSUFfRFhTX05PX1ZSQSksCiAJU05EX1BDSV9RVUlSSygweDQwMDUsIDB4NDcxMCwgIk1TSSBLN1QyNjYiLCBWSUFfRFhTX1NSQyksCiAJeyB9IC8qIHRlcm1pbmF0b3IgKi8KQEAgLTI0MzMsOSArMjQzNiw5IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmRfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAJc3dpdGNoIChjYXJkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCmluZGV4IDViZDc5ZDIuLjBkNTRlMzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwpAQCAtMzI4LDcgKzMyOCwxMCBAQAogCQkJCQlmbGFnID0gVklBX1RCTF9CSVRfRkxBRzsgLyogcGVyaW9kIGJvdW5kYXJ5ICovCiAJCQl9IGVsc2UKIAkJCQlmbGFnID0gMDsgLyogcGVyaW9kIGNvbnRpbnVlcyB0byB0aGUgbmV4dCAqLwotCQkJLy8gcHJpbnRrKCJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgKHJlc3QgJWQpXG4iLCBpZHgsIG9mcywgciwgcmVzdCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInZpYTogdGJsICVkOiBhdCAlZCAgc2l6ZSAlZCAiCisJCQkgICAgICAgIihyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJKi8KIAkJCSgodTMyICopZGV2LT50YWJsZS5hcmVhKVsoaWR4PDwxKSArIDFdID0gY3B1X3RvX2xlMzIociB8IGZsYWcpOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5vZmZzZXQgPSBvZnM7CiAJCQlkZXYtPmlkeF90YWJsZVtpZHhdLnNpemUgPSByOwpAQCAtMTE2Nyw5ICsxMTcwLDkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2FyZF90eXBlID0gcGNpX2lkLT5kcml2ZXJfZGF0YTsKIAlzd2l0Y2ggKGNhcmRfdHlwZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBhY2MzNTJmLi5mYzkxMzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMjA0LDkgKzIwNCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoICgoaW50KXBjaV9pZC0+ZHJpdmVyX2RhdGEpIHsKIAljYXNlIFZYX1BDSV9WWDIyMl9PTEQ6CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKaW5kZXggN2U4N2YzOS4uYzBlZmU0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYwpAQCAtMTA3LDcgKzEwNyw5IEBACiBzdGF0aWMgdm9pZCB2eDJfb3V0YihzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgaW50IG9mZnNldCwgdW5zaWduZWQgY2hhciB2YWwpCiB7CiAJb3V0Yih2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKLQkvL3ByaW50aygib3V0YjogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm91dGI6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkqLwogfQogCiAvKioKQEAgLTEyNiw3ICsxMjgsOSBAQAogICovCiBzdGF0aWMgdm9pZCB2eDJfb3V0bChzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHZhbCkKIHsKLQkvLyBwcmludGsoIm91dGw6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJvdXRsOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJKi8KIAlvdXRsKHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCAyNjMxYTU1Li40YWY2NjY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTE4Nyw5ICsxODcsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAocGNpX2lkLT5kZXZpY2UpIHsKIAljYXNlIDB4MDAwNDogc3RyID0gIllNRjcyNCI7ICBtb2RlbCA9ICJEUy0xIjsgYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKaW5kZXggOTBkMGQ2Mi4uMmYwOTI1MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwpAQCAtMzE4LDcgKzMxOCwxMiBAQAogCQl5cGNtLT5wZXJpb2RfcG9zICs9IGRlbHRhOwogCQl5cGNtLT5sYXN0X3BvcyA9IHBvczsKIAkJaWYgKHlwY20tPnBlcmlvZF9wb3MgPj0geXBjbS0+cGVyaW9kX3NpemUpIHsKLQkJCS8vIHByaW50aygiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLCBjaGlwLT5hY3RpdmVfYmFuaywgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsCisJCQkgICAgICAgY2hpcC0+YWN0aXZlX2JhbmssCisJCQkgICAgICAgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCSovCiAJCQl5cGNtLT5wZXJpb2RfcG9zICU9IHlwY20tPnBlcmlvZF9zaXplOwogCQkJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoeXBjbS0+c3Vic3RyZWFtKTsKQEAgLTM2Niw3ICszNzEsMTIgQEAKIAkJeXBjbS0+bGFzdF9wb3MgPSBwb3M7CiAJCWlmICh5cGNtLT5wZXJpb2RfcG9zID49IHlwY20tPnBlcmlvZF9zaXplKSB7CiAJCQl5cGNtLT5wZXJpb2RfcG9zICU9IHlwY20tPnBlcmlvZF9zaXplOwotCQkJLy8gcHJpbnRrKCJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsIGNoaXAtPmFjdGl2ZV9iYW5rLCB2b2ljZS0+YmFua1tjaGlwLT5hY3RpdmVfYmFua10uc3RhcnQpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwKKwkJCSAgICAgICBjaGlwLT5hY3RpdmVfYmFuaywKKwkJCSAgICAgICB2b2ljZS0+YmFua1tjaGlwLT5hY3RpdmVfYmFua10uc3RhcnQpOworCQkJKi8KIAkJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAJCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDgxOWFhYWEuLjdkZWE3NGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtOTEsNyArOTEsNyBAQAogICovCiBzdGF0aWMgaW50IHNuZF9wZGFjZl9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTExMiwyMCArMTEyLDIzIEBACiAJCXJldHVybiAtRU5PREVWOyAvKiBkaXNhYmxlZCBleHBsaWNpdGx5ICovCiAKIAkvKiBvaywgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGRhY2Y6IGNhbm5vdCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJcGRhY2YgPSBzbmRfcGRhY2ZfY3JlYXRlKGNhcmQpOwotCWlmICghIHBkYWNmKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAoIXBkYWNmKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotCWlmIChzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIHBkYWNmLCAmb3BzKSA8IDApIHsKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIHBkYWNmLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkgewogCQlrZnJlZShwZGFjZik7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmhhbmRsZV90b19kZXYobGluaykpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCmluZGV4IGRmYTQwYjAuLjVkMmFmYTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKQEAgLTgyLDE0ICs4MiwyMSBAQAogI2lmIDAKIHZvaWQgcGRhY2ZfZHVtcChzdHJ1Y3Qgc25kX3BkYWNmICpjaGlwKQogewotCXByaW50aygiUERBVURJT0NGIERVTVAgKDB4JWx4KTpcbiIsIGNoaXAtPnBvcnQpOwotCXByaW50aygiV1BEICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfV0RQKSk7Ci0JcHJpbnRrKCJSRFAgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19SRFApKTsKLQlwcmludGsoIlRDUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1RDUikpOwotCXByaW50aygiU0NSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfU0NSKSk7Ci0JcHJpbnRrKCJJU1IgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JU1IpKTsKLQlwcmludGsoIklFUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0lFUikpOwotCXByaW50aygiQUtfSUZSICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfQUtfSUZSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBEQVVESU9DRiBEVU1QICgweCVseCk6XG4iLCBjaGlwLT5wb3J0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiV1BEICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfV0RQKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlJEUCAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1JEUCkpOworCXByaW50ayhLRVJOX0RFQlVHICJUQ1IgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19UQ1IpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU0NSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfU0NSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIklTUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0lTUikpOworCXByaW50ayhLRVJOX0RFQlVHICJJRVIgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JRVIpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQUtfSUZSICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfQUtfSUZSKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYwppbmRleCBlYTkwM2M4Li5kY2QzMjIwIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIAlyZHAgPSBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfUkRQKTsKIAl3ZHAgPSBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfV0RQKTsKLQkvLyBwcmludGsoIlRBU0tMRVQ6IHJkcCA9ICV4LCB3ZHAgPSAleFxuIiwgcmRwLCB3ZHApOworCS8qIHByaW50ayhLRVJOX0RFQlVHICJUQVNLTEVUOiByZHAgPSAleCwgd2RwID0gJXhcbiIsIHJkcCwgd2RwKTsgKi8KIAlzaXplID0gd2RwIC0gcmRwOwogCWlmIChzaXplIDwgMCkKIAkJc2l6ZSArPSAweDEwMDAwOwpAQCAtMzIxLDUgKzMyMSw1IEBACiAJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwotCS8vIHByaW50aygiVEFTS0xFVDogZW5kXG4iKTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiVEFTS0xFVDogZW5kXG4iKTsgKi8KIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKaW5kZXggNzA2NjAyYS4uNzQ0NWNjOCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKQEAgLTEzMCwyMyArMTMwLDI2IEBACiAvKgogICogY3JlYXRlIHZ4cG9ja2V0IGluc3RhbmNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICpzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCwKLQkJCQkJICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3N0YXRpYyBpbnQgc25kX3Z4cG9ja2V0X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBpYmwsCisJCQkgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssCisJCQkgICAgc3RydWN0IHNuZF92eHBvY2tldCAqKmNoaXBfcmV0KQogewogCXN0cnVjdCB2eF9jb3JlICpjaGlwOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0Jc25kX3Z4cG9ja2V0X2Rldl9mcmVlLAogCX07CisJaW50IGVycjsKIAogCWNoaXAgPSBzbmRfdnhfY3JlYXRlKGNhcmQsICZ2eHBvY2tldF9odywgJnNuZF92eHBvY2tldF9vcHMsCiAJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3Z4cG9ja2V0KSAtIHNpemVvZihzdHJ1Y3QgdnhfY29yZSkpOwotCWlmICghIGNoaXApCi0JCXJldHVybiBOVUxMOworCWlmICghY2hpcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSA8IDApIHsKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOworCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKGNoaXApOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9CiAJY2hpcC0+aWJsLnNpemUgPSBpYmw7CiAKQEAgLTE2OSw3ICsxNzIsOCBAQAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0JcmV0dXJuIHZ4cDsKKwkqY2hpcF9yZXQgPSB2eHA7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMjkyLDcgKzI5Niw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCiAJLyogZmluZCBhbiBlbXB0eSBzbG90IGZyb20gdGhlIGNhcmQgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CkBAIC0zMDcsMTYgKzMxMSwxNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsgLyogZGlzYWJsZWQgZXhwbGljaXRseSAqLwogCiAJLyogb2ssIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInZ4cG9ja2V0OiBjYW5ub3QgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXZ4cCA9IHNuZF92eHBvY2tldF9uZXcoY2FyZCwgaWJsW2ldLCBwX2Rldik7Ci0JaWYgKCEgdnhwKSB7CisJZXJyID0gc25kX3Z4cG9ja2V0X25ldyhjYXJkLCBpYmxbaV0sIHBfZGV2LCAmdnhwKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gdnhwOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvS2NvbmZpZyBiL3NvdW5kL3BwYy9LY29uZmlnCmluZGV4IDc3N2RlMmIuLmJkMjMzOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9LY29uZmlnCisrKyBiL3NvdW5kL3BwYy9LY29uZmlnCkBAIC0xMyw2ICsxMyw3IEBACiAJdHJpc3RhdGUgIlBvd2VyTWFjIChBV0FDUywgREFDQSwgQnVyZ3VuZHksIFR1bWJsZXIsIEtleXdlc3QpIgogCWRlcGVuZHMgb24gSTJDICYmIElOUFVUICYmIFBQQ19QTUFDCiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX1ZNQVNURVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGludGVncmF0ZWQgc291bmQgZGV2aWNlLgogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDdiZDMzZTYuLjgwZGY5YjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC02MDgsOSArNjA4LDEyIEBACiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9MSU5FLCAwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hY1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2xvW10gX19pbml0ZGF0YSA9IHsKIAlBV0FDU19WT0xVTUUoIkxpbmUgb3V0IFBsYXliYWNrIFZvbHVtZSIsIDIsIDYsIDEpLAotCUFXQUNTX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDUsIDYsIDEpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjW10gX19pbml0ZGF0YSA9IHsKKwlBV0FDU19WT0xVTUUoIlBsYXktdGhyb3VnaCBQbGF5YmFjayBWb2x1bWUiLCA1LCA2LCAxKSwKIAlBV0FDU19TV0lUQ0goIkNEIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0NELCAwKSwKIH07CiAKQEAgLTYyNyw2ICs2MzAsMTAgQEAKIAlBV0FDU19TV0lUQ0goIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTUlDLCAwKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzU1MDBbXSBfX2luaXRkYXRhID0geworCUFXQUNTX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDIsIDYsIDEpLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjW10gX19pbml0ZGF0YSA9IHsKIAlBV0FDU19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKIAlBV0FDU19TV0lUQ0goIkNEIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0NELCAwKSwKQEAgLTY0NSwxMiArNjUyLDE5IEBACiAJQVdBQ1NfU1dJVENIKCJNaWMgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTElORSwgMCksCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMl9wbWFjNTUwMFtdIF9faW5pdGRhdGEgPSB7CisJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3IF9faW5pdGRhdGEgPQogQVdBQ1NfU1dJVENIKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19pbWFjIF9faW5pdGRhdGEgPQogQVdBQ1NfU1dJVENIKCJMaW5lIG91dCBQbGF5YmFjayBTd2l0Y2giLCAxLCBTSElGVF9IRE1VVEUsIDEpOwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3X3BtYWM1NTAwIF9faW5pdGRhdGEgPQorQVdBQ1NfU1dJVENIKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21pY19ib29zdFtdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfU1dJVENIKCJNaWMgQm9vc3QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9HQUlOTElORSwgMCksCiB9OwpAQCAtNzY2LDEyICs3ODAsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikpCisjZGVmaW5lIElTX1BNNzUwMCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDc1MDAiKSBcCisJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw4NTAwIikgXAorCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsOTUwMCIpKQorI2RlZmluZSBJU19QTTU1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxlNDExIikpCiAjZGVmaW5lIElTX0JFSUdFIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsR29zc2FtZXIiKSkKICNkZWZpbmUgSVNfSU1BQzEgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSkKICNkZWZpbmUgSVNfSU1BQzIgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSBcCiAJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKICNkZWZpbmUgSVNfRzRBR1AgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDEiKSkKKyNkZWZpbmUgSVNfTE9NQkFSRCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAogc3RhdGljIGludCBpbWFjMSwgaW1hYzI7CiAKQEAgLTg1OCwxMCArODc2LDE0IEBACiBzbmRfcG1hY19hd2Fjc19pbml0KHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKIAlpbnQgcG03NTAwID0gSVNfUE03NTAwOworCWludCBwbTU1MDAgPSBJU19QTTU1MDA7CiAJaW50IGJlaWdlID0gSVNfQkVJR0U7CiAJaW50IGc0YWdwID0gSVNfRzRBR1A7CisJaW50IGxvbWJhcmQgPSBJU19MT01CQVJEOwogCWludCBpbWFjOwogCWludCBlcnIsIHZvbDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICp2bWFzdGVyX3N3LCAqdm1hc3Rlcl92b2w7CisJc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyX3ZvbCwgKnNwZWFrZXJfdm9sOwogCiAJaW1hYzEgPSBJU19JTUFDMTsKIAlpbWFjMiA9IElTX0lNQUMyOwpAQCAtOTE1LDcgKzkzNyw3IEBACiAJCS8qIHNldCBoZWFkcGhvbmUtamFjayBkZXRlY3Rpb24gYml0ICovCiAJCXN3aXRjaCAoY2hpcC0+bW9kZWwpIHsKIAkJY2FzZSBQTUFDX0FXQUNTOgotCQkJY2hpcC0+aHBfc3RhdF9tYXNrID0gcG03NTAwID8gTUFTS19IRFBDT05OCisJCQljaGlwLT5ocF9zdGF0X21hc2sgPSBwbTc1MDAgfHwgcG01NTAwID8gTUFTS19IRFBDT05OCiAJCQkJOiBNQVNLX0xPQ09OTjsKIAkJCWJyZWFrOwogCQljYXNlIFBNQUNfU0NSRUFNRVI6CkBAIC05NTQsNyArOTc2LDcgQEAKIAkJcmV0dXJuIGVycjsKIAlpZiAoYmVpZ2UgfHwgZzRhZ3ApCiAJCTsKLQllbHNlIGlmIChjaGlwLT5tb2RlbCA9PSBQTUFDX1NDUkVBTUVSKQorCWVsc2UgaWYgKGNoaXAtPm1vZGVsID09IFBNQUNfU0NSRUFNRVIgfHwgcG01NTAwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnMyKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnMyKTsKIAllbHNlIGlmICghcG03NTAwKQpAQCAtOTYyLDE5ICs5ODQsMzUgQEAKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnMyKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwlpZiAocG01NTAwKSB7CisJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAorCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3NfbWl4ZXJzMl9wbWFjNTUwMCksCisJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMl9wbWFjNTUwMCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAJaWYgKHBtNzUwMCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzc1MDApLAogCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNzUwMCk7CisJZWxzZSBpZiAocG01NTAwKQorCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkgICAgKG1hc3Rlcl92b2wgPSBzbmRfY3RsX25ldzEoc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM1NTAwLAorCQkJCQkJY2hpcCkpKTsKIAllbHNlIGlmIChiZWlnZSkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfYmVpZ2UpLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19iZWlnZSk7Ci0JZWxzZSBpZiAoaW1hYykKKwllbHNlIGlmIChpbWFjIHx8IGxvbWJhcmQpIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJICAgIChtYXN0ZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19sbywKKwkJCQkJCWNoaXApKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hYyksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWMpOwotCWVsc2UgaWYgKGc0YWdwKQorCX0gZWxzZSBpZiAoZzRhZ3ApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2c0YWdwKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfZzRhZ3ApOwpAQCAtOTg0LDggKzEwMjIsMTAgQEAKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JY2hpcC0+bWFzdGVyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MSgocG03NTAwIHx8IGltYWMgfHwgZzRhZ3ApCisJY2hpcC0+bWFzdGVyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MSgocG03NTAwIHx8IGltYWMgfHwgZzRhZ3AgfHwgbG9tYmFyZCkKIAkJCT8gJnNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19pbWFjCisJCQk6IHBtNTUwMAorCQkJPyAmc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3X3BtYWM1NTAwCiAJCQk6ICZzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3csIGNoaXApOwogCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGNoaXAtPm1hc3Rlcl9zd19jdGwpOwogCWlmIChlcnIgPCAwKQpAQCAtMTAxNyw4ICsxMDU3LDkgQEAKICNlbmRpZiAvKiBQTUFDX0FNUF9BVkFJTCAqLwogCXsKIAkJLyogcm91dGUgQSA9IGhlYWRwaG9uZSwgcm91dGUgQyA9IHNwZWFrZXIgKi8KLQkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wpLAotCQkJCQlzbmRfcG1hY19hd2Fjc19zcGVha2VyX3ZvbCk7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCSAgICAoc3BlYWtlcl92b2wgPSBzbmRfY3RsX25ldzEoc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wsCisJCQkJCQljaGlwKSkpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJCWNoaXAtPnNwZWFrZXJfc3dfY3RsID0gc25kX2N0bF9uZXcxKGltYWMxCkBAIC0xMDMxLDYgKzEwNzIsMzMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKHBtNTUwMCB8fCBpbWFjIHx8IGxvbWJhcmQpIHsKKwkJdm1hc3Rlcl9zdyA9IHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcigKKwkJCSJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgKHVuc2lnbmVkIGludCAqKSBOVUxMKTsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQodm1hc3Rlcl9zdywKKwkJCQkJCSBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCh2bWFzdGVyX3N3LAorCQkJCQkJICBjaGlwLT5zcGVha2VyX3N3X2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgdm1hc3Rlcl9zdyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJdm1hc3Rlcl92b2wgPSBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoCisJCQkiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICh1bnNpZ25lZCBpbnQgKikgTlVMTCk7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKHZtYXN0ZXJfdm9sLCBtYXN0ZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZSh2bWFzdGVyX3ZvbCwgc3BlYWtlcl92b2wpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHZtYXN0ZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChiZWlnZSB8fCBnNGFncCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taWNfYm9vc3RfYmVpZ2UpLApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2J1cmd1bmR5LmMgYi9zb3VuZC9wcGMvYnVyZ3VuZHkuYwppbmRleCBmODYwZDM5Li40NWE3NjI5IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvYnVyZ3VuZHkuYworKysgYi9zb3VuZC9wcGMvYnVyZ3VuZHkuYwpAQCAtMzUsNyArMzUsNyBAQAogCWludCB0aW1lb3V0ID0gNTA7CiAJd2hpbGUgKChpbl9sZTMyKCZjaGlwLT5hd2Fjcy0+Y29kZWNfY3RybCkgJiBNQVNLX05FV0VDTUQpICYmIHRpbWVvdXQtLSkKIAkJdWRlbGF5KDEpOwotCWlmICghIHRpbWVvdXQpCisJaWYgKHRpbWVvdXQgPCAwKQogCQlwcmludGsoS0VSTl9ERUJVRyAiYnVyZ3VuZHlfYnVzeV93YWl0OiB0aW1lb3V0XG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2RhY2EuYyBiL3NvdW5kL3BwYy9kYWNhLmMKaW5kZXggOGE1YjI5MC4uZjhkNDc4YyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2RhY2EuYworKysgYi9zb3VuZC9wcGMvZGFjYS5jCkBAIC04Miw3ICs4Miw3IEBACiAJZGF0YVsxXSB8PSBtaXgtPmRlZW1waGFzaXMgPyAweDQwIDogMDsKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBEQUNBX1JFR19BVk9MLAogCQkJCSAgICAgICAyLCBkYXRhKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggYWY3NmVlOC4uOWI0ZTljMyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQlyZWMtPnJ1bm5pbmcgPSAwOwotCQkvKnByaW50aygic3RvcHBlZCEhXG4iKTsqLworCQkvKnByaW50ayhLRVJOX0RFQlVHICJzdG9wcGVkISFcbiIpOyovCiAJCXNuZF9wbWFjX2RtYV9zdG9wKHJlYyk7CiAJCWZvciAoaSA9IDAsIGNwID0gcmVjLT5jbWQuY21kczsgaSA8IHJlYy0+bnBlcmlvZHM7IGkrKywgY3ArKykKIAkJCW91dF9sZTE2KCZjcC0+Y29tbWFuZCwgREJETUFfU1RPUCk7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAl9CiAjZW5kaWYKIAljb3VudCArPSByZWMtPmN1cl9wZXJpb2QgKiByZWMtPnBlcmlvZF9zaXplOwotCS8qcHJpbnRrKCJwb2ludGVyPSVkXG4iLCBjb3VudCk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJwb2ludGVyPSVkXG4iLCBjb3VudCk7Ki8KIAlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnMtPnJ1bnRpbWUsIGNvdW50KTsKIH0KIApAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCQlpZiAoISAoc3RhdCAmIEFDVElWRSkpCiAJCQkJYnJlYWs7CiAKLQkJCS8qcHJpbnRrKCJ1cGRhdGUgZnJhZyAlZFxuIiwgcmVjLT5jdXJfcGVyaW9kKTsqLworCQkJLypwcmludGsoS0VSTl9ERUJVRyAidXBkYXRlIGZyYWcgJWRcbiIsIHJlYy0+Y3VyX3BlcmlvZCk7Ki8KIAkJCXN0X2xlMTYoJmNwLT54ZmVyX3N0YXR1cywgMCk7CiAJCQlzdF9sZTE2KCZjcC0+cmVxX2NvdW50LCByZWMtPnBlcmlvZF9zaXplKTsKIAkJCS8qc3RfbGUxNigmY3AtPnJlc19jb3VudCwgMCk7Ki8KQEAgLTgwNiw3ICs4MDYsNyBAQAogCXN0cnVjdCBzbmRfcG1hYyAqY2hpcCA9IGRldmlkOwogCWludCBjdHJsID0gaW5fbGUzMigmY2hpcC0+YXdhY3MtPmNvbnRyb2wpOwogCi0JLypwcmludGsoInBtYWM6IGNvbnRyb2wgaW50ZXJydXB0Li4gMHgleFxuIiwgY3RybCk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJwbWFjOiBjb250cm9sIGludGVycnVwdC4uIDB4JXhcbiIsIGN0cmwpOyovCiAJaWYgKGN0cmwgJiBNQVNLX1BPUlRDSEcpIHsKIAkJLyogZG8gc29tZXRoaW5nIHdoZW4gaGVhZHBob25lIGlzIHBsdWdnZWQvdW5wbHVnZ2VkPyAqLwogCQlpZiAoY2hpcC0+dXBkYXRlX2F1dG9tdXRlKQpAQCAtMTAzMyw3ICsxMDMzLDggQEAKIAl9CiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19UVU1CTEVSOwotCQljaGlwLT5jYW5fY2FwdHVyZSA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKTsKKwkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIikKKwkJCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpOwogCQljaGlwLT5jYW5fZHVwbGV4ID0gMDsKIAkJLy8gY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCiAJCWNoaXAtPm51bV9mcmVxcyA9IEFSUkFZX1NJWkUodHVtYmxlcl9mcmVxcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvcG93ZXJtYWMuYyBiL3NvdW5kL3BwYy9wb3dlcm1hYy5jCmluZGV4IGM5MzYyMjUuLjVhOTI5MDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wb3dlcm1hYy5jCisrKyBiL3NvdW5kL3BwYy9wb3dlcm1hYy5jCkBAIC01OCw5ICs1OCw5IEBACiAJY2hhciAqbmFtZV9leHQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX3BtYWNfbmV3KGNhcmQsICZjaGlwKSkgPCAwKQogCQlnb3RvIF9fZXJyb3I7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJCWdvdG8gX19lcnJvcjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygidW5zdXBwb3J0ZWQgaGFyZHdhcmUgJWRcbiIsIGNoaXAtPm1vZGVsKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5zdXBwb3J0ZWQgaGFyZHdhcmUgJWRcbiIsIGNoaXAtPm1vZGVsKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBfX2Vycm9yOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmMgYi9zb3VuZC9wcGMvc25kX3BzMy5jCmluZGV4IGZmMzIxMTEuLmYzNjFjMjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmMKKysrIGIvc291bmQvcHBjL3NuZF9wczMuYwpAQCAtOTY5LDExICs5NjksOSBAQAogCX0KIAogCS8qIGNyZWF0ZSBjYXJkIGluc3RhbmNlICovCi0JdGhlX2NhcmQuY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIXRoZV9jYXJkLmNhcmQpIHsKLQkJcmV0ID0gLUVOWElPOworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmdGhlX2NhcmQuY2FyZCk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW5faXJxOwotCX0KIAogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5kcml2ZXIsICJQUzMiKTsKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+c2hvcnRuYW1lLCAiUFMzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCAzZWIyMjMzLi40MDIyMmZjIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICN1bmRlZiBERUJVRwogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKGZtdCkKKyNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQogI2Vsc2UKICNkZWZpbmUgREJHKGZtdC4uLikKICNlbmRpZgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX1ZPTCwgNiwKIAkJCQkJICAgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX0RSQywKIAkJCQkJICAgMiwgdmFsKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBEUkNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTM4Niw3ICszODYsNyBAQAogCiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIFRBU19SRUdfRFJDLAogCQkJCQkgICA2LCB2YWwpIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtNTA2LDcgKzUwNiw4IEBACiAJCWJsb2NrW2ldID0gKHZvbCA+PiAoKGluZm8tPmJ5dGVzIC0gaSAtIDEpICogOCkpICYgMHhmZjsKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgaW5mby0+cmVnLAogCQkJCQkgICBpbmZvLT5ieXRlcywgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCBpbmZvLT5pbmRleCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsCisJCQkgICBpbmZvLT5pbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY0Myw3ICs2NDQsNyBAQAogCX0KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgcmVnLAogCQkJCQkgICA5LCBibG9jaykgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsIHJlZyk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsIHJlZyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NoL0tjb25maWcgYi9zb3VuZC9zaC9LY29uZmlnCmluZGV4IGNmYzE0MzkuLmFlZDBmOTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NoL0tjb25maWcKKysrIGIvc291bmQvc2gvS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCXRyaXN0YXRlICJEcmVhbWNhc3QgWWFtYWhhIEFJQ0Egc291bmQiCiAJZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QKIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBHMl9ETUEKIAloZWxwCiAJICBBTFNBIFNvdW5kIGRyaXZlciBmb3IgdGhlIFNFR0EgRHJlYW1jYXN0IGNvbnNvbGUuCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NoL2FpY2EuYyBiL3NvdW5kL3NoL2FpY2EuYwppbmRleCA3YzkyMGYzLi5mNTUxMjMzIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9haWNhLmMKKysrIGIvc291bmQvc2gvYWljYS5jCkBAIC02MDksMTEgKzYwOSwxMSBAQAogCWRyZWFtY2FzdGNhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWljYSksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghZHJlYW1jYXN0Y2FyZCkpCiAJCXJldHVybiAtRU5PTUVNOwotCWRyZWFtY2FzdGNhcmQtPmNhcmQgPQotCSAgICBzbmRfY2FyZF9uZXcoaW5kZXgsIFNORF9BSUNBX0RSSVZFUiwgVEhJU19NT0RVTEUsIDApOwotCWlmICh1bmxpa2VseSghZHJlYW1jYXN0Y2FyZC0+Y2FyZCkpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIFNORF9BSUNBX0RSSVZFUiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmZHJlYW1jYXN0Y2FyZC0+Y2FyZCk7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CiAJCWtmcmVlKGRyZWFtY2FzdGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAJc3RyY3B5KGRyZWFtY2FzdGNhcmQtPmNhcmQtPmRyaXZlciwgInNuZF9haWNhIik7CiAJc3RyY3B5KGRyZWFtY2FzdGNhcmQtPmNhcmQtPnNob3J0bmFtZSwgU05EX0FJQ0FfRFJJVkVSKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggZWYwMjVjNi4uM2QyYmI2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJdHJpc3RhdGUgIkFMU0EgZm9yIFNvQyBhdWRpbyBzdXBwb3J0IgogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IEFDOTdfQlVTIGlmIFNORF9TT0NfQUM5N19CVVMKKwlzZWxlY3QgU05EX0pBQ0sgaWYgSU5QVVQ9eSB8fCBJTlBVVD1TTkQKIAktLS1oZWxwLS0tCiAKIAkgIElmIHlvdSB3YW50IEFTb0Mgc3VwcG9ydCwgeW91IHNob3VsZCBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDg2YTliMWYuLjAyMzc4NzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1zbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8KK3NuZC1zb2MtY29yZS1vYmpzIDo9IHNvYy1jb3JlLm8gc29jLWRhcG0ubyBzb2MtamFjay5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBzbmQtc29jLWNvcmUubwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGNvZGVjcy8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYwppbmRleCAzZGNkYzRlLi45ZWY2Yjk2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfcGNtX29wcyA9IHsKIAkub3BlbgkJPSBhdG1lbF9wY21fb3BlbiwKIAkuY2xvc2UJCT0gYXRtZWxfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCmluZGV4IGZmMDA1NGIuLmU1ODhlNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwpAQCAtNjk3LDYgKzY5NywxNSBAQAogI2RlZmluZSBBVE1FTF9TU0NfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TOCAgICAgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8XAogCQkJICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdG1lbF9zc2NfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGF0bWVsX3NzY19zdGFydHVwLAorCS5zaHV0ZG93bgk9IGF0bWVsX3NzY19zaHV0ZG93biwKKwkucHJlcGFyZQk9IGF0bWVsX3NzY19wcmVwYXJlLAorCS5od19wYXJhbXMJPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF0bWVsX3NzY19kYWlbTlVNX1NTQ19ERVZJQ0VTXSA9IHsKIAl7CS5uYW1lID0gImF0bWVsLXNzYzAiLAogCQkuaWQgPSAwLApAQCAtNzEyLDEzICs3MjEsNyBAQAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBBVE1FTF9TU0NfUkFURVMsCiAJCQkuZm9ybWF0cyA9IEFUTUVMX1NTQ19GT1JNQVRTLH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0bWVsX3NzY19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXRtZWxfc3NjX3NodXRkb3duLAotCQkJLnByZXBhcmUgPSBhdG1lbF9zc2NfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAotCQkJLnNldF9mbXQgPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X2Nsa2RpdiA9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAorCQkub3BzID0gJmF0bWVsX3NzY19kYWlfb3BzLAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzBdLAogCX0sCiAjaWYgTlVNX1NTQ19ERVZJQ0VTID09IDMKQEAgLTczNiwxMyArNzM5LDcgQEAKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gQVRNRUxfU1NDX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBBVE1FTF9TU0NfRk9STUFUUyx9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdG1lbF9zc2Nfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IGF0bWVsX3NzY19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXRtZWxfc3NjX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXRtZWxfc3NjX2h3X3BhcmFtcywKLQkJCS5zZXRfZm10ID0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsfSwKKwkJLm9wcyA9ICZhdG1lbF9zc2NfZGFpX29wcywKIAkJLnByaXZhdGVfZGF0YSA9ICZzc2NfaW5mb1sxXSwKIAl9LAogCXsJLm5hbWUgPSAiYXRtZWwtc3NjMiIsCkBAIC03NTksMTMgKzc1Niw3IEBACiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IEFUTUVMX1NTQ19SQVRFUywKIAkJCS5mb3JtYXRzID0gQVRNRUxfU1NDX0ZPUk1BVFMsfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gYXRtZWxfc3NjX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdG1lbF9zc2Nfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0bWVsX3NzY19wcmVwYXJlLAotCQkJLmh3X3BhcmFtcyA9IGF0bWVsX3NzY19od19wYXJhbXMsCi0JCQkuc2V0X2ZtdCA9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LH0sCisJCS5vcHMgPSAmYXRtZWxfc3NjX2RhaV9vcHMsCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMl0sCiAJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMgYi9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYwppbmRleCA0M2RkOGNlLi43MDY1NzUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYwpAQCAtMTY0LDQxICsxNjQsNDEgQEAKIAkgKi8KIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKIAljYXNlIDQ4MDAwOgotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMTsKLQkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7Ci0JCWJyZWFrOwotCi0JY2FzZSA0NDEwMDoKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzE7Ci0JCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwotCQlicmVhazsKLQotCWNhc2UgMjIwNTA6Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwkJcGxsX291dCA9IDI0NTc2MDAwOwogCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzI7CiAJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwogCQlicmVhazsKIAotCWNhc2UgMTYwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8zOworCWNhc2UgNDQxMDA6CisJCXBsbF9vdXQgPSAyMjU3OTIwMDsKKwkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8yOwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDExMDI1OgotCQlwbGxfb3V0ID0gMTEyODk2MDA7CisJY2FzZSAyMjA1MDoKKwkJcGxsX291dCA9IDIyNTc5MjAwOwogCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzQ7CiAJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwogCQlicmVhazsKIAotCWNhc2UgODAwMDoKLQkJcGxsX291dCA9IDEyMjg4MDAwOworCWNhc2UgMTYwMDA6CisJCXBsbF9vdXQgPSAyNDU3NjAwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl82OwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKKwljYXNlIDExMDI1OgorCQlwbGxfb3V0ID0gMjI1NzkyMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfODsKKwkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CisJCWJyZWFrOworCisJY2FzZSA4MDAwOgorCQlwbGxfb3V0ID0gMjQ1NzYwMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMTI7CisJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByX3dhcm5pbmcoInBsYXlwYXFfd204NTEwOiBVbnN1cHBvcnRlZCBzYW1wbGUgcmF0ZSAlZFxuIiwKIAkJCSAgIHBhcmFtc19yYXRlKHBhcmFtcykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwppbmRleCA2ZWEwNGJlLi4xNzNhMjM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hdG1lbC1zc2MuaD4KIApAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIApAQCAtNTIsNiArNTQsOSBAQAogI2luY2x1ZGUgImF0bWVsLXBjbS5oIgogI2luY2x1ZGUgImF0bWVsX3NzY19kYWkuaCIKIAorI2RlZmluZSBNQ0xLX1JBVEUgMTIwMDAwMDAKKworc3RhdGljIHN0cnVjdCBjbGsgKm1jbGs7CiAKIHN0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtNTksMTEgKzY0LDEyIEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCWludCByZXQ7CiAKLQkvKiBjb2RlYyBzeXN0ZW0gY2xvY2sgaXMgc3VwcGxpZWQgYnkgUENLMCwgc2V0IHRvIDEyTUh6ICovCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODczMV9TWVNDTEssCi0JCTEyMDAwMDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkKKwkJTUNMS19SQVRFLCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkgeworCQljbGtfZGlzYWJsZShtY2xrKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4OSw2ICsxOTUsMzEgQEAKIAkuc2h1dGRvd24gPSBhdDkxc2FtOWcyMGVrX3NodXRkb3duLAogfTsKIAorc3RhdGljIGludCBhdDkxc2FtOWcyMGVrX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0YXRpYyBpbnQgbWNsa19vbjsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQlpZiAoIW1jbGtfb24pCisJCQlyZXQgPSBjbGtfZW5hYmxlKG1jbGspOworCQlpZiAocmV0ID09IDApCisJCQltY2xrX29uID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKG1jbGtfb24pCisJCQljbGtfZGlzYWJsZShtY2xrKTsKKwkJbWNsa19vbiA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhdDkxc2FtOWcyMGVrX2RhcG1fd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9NSUMoIkludCBNaWMiLCBOVUxMKSwKQEAgLTI0MywyMSArMjc0LDQ4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX2F0OTFzYW05ZzIwZWsgPSB7Ci0JLm5hbWUgPSAiV004NzMxIiwKKwkubmFtZSA9ICJBVDkxU0FNRzIwLUVLIiwKIAkucGxhdGZvcm0gPSAmYXRtZWxfc29jX3BsYXRmb3JtLAogCS5kYWlfbGluayA9ICZhdDkxc2FtOWcyMGVrX2RhaSwKIAkubnVtX2xpbmtzID0gMSwKKwkuc2V0X2JpYXNfbGV2ZWwgPSBhdDkxc2FtOWcyMGVrX3NldF9iaWFzX2xldmVsLAogfTsKIAotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBhdDkxc2FtOWcyMGVrX3dtODczMV9zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDAsCi0JLmkyY19hZGRyZXNzID0gMHgxYiwKLX07CisvKgorICogRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgYm9kZ2UgdG8gYXZvaWQgY3Jvc3MtdHJlZSBtZXJnZSBpc3N1ZXMuCisgKiBOZXcgZHJpdmVycyBzaG91bGQgcmVnaXN0ZXIgdGhlIHdtODczMSBJMkMgZGV2aWNlIGluIHRoZSBtYWNoaW5lCisgKiBzZXR1cCBjb2RlICh1bmRlciBhcmNoL2FybSBmb3IgQVJNIHN5c3RlbXMpLgorICovCitzdGF0aWMgaW50IHdtODczMV9pMmNfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IDB4MWI7CisJc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoMCk7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyIDBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOworCWlmICghY2xpZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgYXQ5MXNhbTlnMjBla19zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX2F0OTFzYW05ZzIwZWssCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZhdDkxc2FtOWcyMGVrX3dtODczMV9zZXR1cCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2U7CkBAIC0yNjYsMjMgKzMyNCw1NiBAQAogewogCXN0cnVjdCBhdG1lbF9zc2NfaW5mbyAqc3NjX3AgPSBhdDkxc2FtOWcyMGVrX2RhaS5jcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNzY19kZXZpY2UgKnNzYyA9IE5VTEw7CisJc3RydWN0IGNsayAqcGxsYjsKIAlpbnQgcmV0OwogCisJaWYgKCFtYWNoaW5lX2lzX2F0OTFzYW05ZzIwZWsoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIENvZGVjIE1DTEsgaXMgc3VwcGxpZWQgYnkgUENLMCAtIHNldCBpdCB1cC4KKwkgKi8KKwltY2xrID0gY2xrX2dldChOVUxMLCAicGNrMCIpOworCWlmIChJU19FUlIobWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gZ2V0IE1DTEtcbiIpOworCQlyZXQgPSBQVFJfRVJSKG1jbGspOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGxiID0gY2xrX2dldChOVUxMLCAicGxsYiIpOworCWlmIChJU19FUlIobWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gZ2V0IFBMTEJcbiIpOworCQlyZXQgPSBQVFJfRVJSKG1jbGspOworCQlnb3RvIGVycl9tY2xrOworCX0KKwlyZXQgPSBjbGtfc2V0X3BhcmVudChtY2xrLCBwbGxiKTsKKwljbGtfcHV0KHBsbGIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IEZhaWxlZCB0byBzZXQgTUNMSyBwYXJlbnRcbiIpOworCQlnb3RvIGVycl9tY2xrOworCX0KKworCWNsa19zZXRfcmF0ZShtY2xrLCBNQ0xLX1JBVEUpOworCiAJLyoKIAkgKiBSZXF1ZXN0IFNTQyBkZXZpY2UKIAkgKi8KIAlzc2MgPSBzc2NfcmVxdWVzdCgwKTsKIAlpZiAoSVNfRVJSKHNzYykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gcmVxdWVzdCBTU0MgMFxuIik7CiAJCXJldCA9IFBUUl9FUlIoc3NjKTsKIAkJc3NjID0gTlVMTDsKIAkJZ290byBlcnJfc3NjOwogCX0KIAlzc2NfcC0+c3NjID0gc3NjOwogCisJcmV0ID0gd204NzMxX2kyY19yZWdpc3RlcigpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfc3NjOworCiAJYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkicGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCX0KIApAQCAtMjkyLDE0ICszODMsMTkgQEAKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJInBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3B1dChhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpOwogCX0KIAogCXJldHVybiByZXQ7CiAKIGVycl9zc2M6CisJc3NjX2ZyZWUoc3NjKTsKKwlzc2NfcC0+c3NjID0gTlVMTDsKK2Vycl9tY2xrOgorCWNsa19wdXQobWNsayk7CisJbWNsayA9IE5VTEw7CitlcnI6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzE3LDYgKzQxMyw4IEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpOwogCWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSA9IE5VTEw7CisJY2xrX3B1dChtY2xrKTsKKwltY2xrID0gTlVMTDsKIH0KIAogbW9kdWxlX2luaXQoYXQ5MXNhbTlnMjBla19pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jIGIvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKaW5kZXggYmM4ZDY1NC4uMzA0OTBhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKKysrIGIvc291bmQvc29jL2F1MXgvZGJkbWEyLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYXUxeHBzY19wY21fb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdTF4cHNjX3BjbV9vcHMgPSB7CiAJLm9wZW4JCT0gYXUxeHBzY19wY21fb3BlbiwKIAkuY2xvc2UJCT0gYXUxeHBzY19wY21fY2xvc2UsCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKaW5kZXggZjBlMzBhZS4uNDc5ZDdiZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYworKysgYi9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCkBAIC0zNDIsNiArMzQyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGF1MXhwc2NfYWM5N19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gYXUxeHBzY19hYzk3X3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IGF1MXhwc2NfYWM5N19od19wYXJhbXMsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYXUxeHBzY19hYzk3X2RhaSA9IHsKIAkubmFtZQkJCT0gImF1MXhwc2NfYWM5NyIsCiAJLmFjOTdfY29udHJvbAkJPSAxLApAQCAtMzYxLDEwICszNjYsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCiAJfSwKLQkub3BzID0gewotCQkudHJpZ2dlcgk9IGF1MXhwc2NfYWM5N190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gYXUxeHBzY19hYzk3X2h3X3BhcmFtcywKLQl9LAorCS5vcHMgPSAmYXUxeHBzY19hYzk3X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYXUxeHBzY19hYzk3X2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwppbmRleCBmOTE2ZGU0Li5iYjU4OTMyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCkBAIC0zNjcsNiArMzY3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGF1MXhwc2NfaTJzX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBhdTF4cHNjX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBhdTF4cHNjX2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBhdTF4cHNjX2kyc19zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF1MXhwc2NfaTJzX2RhaSA9IHsKIAkubmFtZQkJCT0gImF1MXhwc2NfaTJzIiwKIAkucHJvYmUJCQk9IGF1MXhwc2NfaTJzX3Byb2JlLApAQCAtMzg1LDExICszOTEsNyBAQAogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDgsCS8qIDIgd2l0aG91dCBleHRlcm5hbCBoZWxwICovCiAJfSwKLQkub3BzID0gewotCQkudHJpZ2dlcgk9IGF1MXhwc2NfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBhdTF4cHNjX2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10CT0gYXUxeHBzY19pMnNfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmYXUxeHBzY19pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MKGF1MXhwc2NfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKaW5kZXggODA2N2NmYS4uOGNmZWQxYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogfQogI2VuZGlmCiAKLXN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fYWM5N19vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9hYzk3X29wcyA9IHsKIAkub3BlbgkJPSBiZjV4eF9wY21fb3BlbiwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcwk9IGJmNXh4X3BjbV9od19wYXJhbXMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwppbmRleCAzYmUyYmU2Li44YTkzNWYyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKQEAgLTMxLDcyICszMSw0NiBAQAogI2luY2x1ZGUgImJmNXh4LXNwb3J0LmgiCiAjaW5jbHVkZSAiYmY1eHgtYWM5Ny5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMCB7UF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFwKLQkJUF9TUE9SVDBfUkZTLCBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8xIHtQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgXAotCQlQX1NQT1JUMV9SRlMsIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzIge1BfU1BPUlQyX1RGUywgUF9TUE9SVDJfRFRQUkksIFBfU1BPUlQyX1RTQ0xLLCBcCi0JCVBfU1BPUlQyX1JGUywgUF9TUE9SVDJfRFJQUkksIFBfU1BPUlQyX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMyB7UF9TUE9SVDNfVEZTLCBQX1NQT1JUM19EVFBSSSwgUF9TUE9SVDNfVFNDTEssIFwKLQkJUF9TUE9SVDNfUkZTLCBQX1NQT1JUM19EUlBSSSwgUF9TUE9SVDNfUlNDTEssIDB9Ci0jZWxzZQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzAge1BfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLCBcCi0JCSBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8xIHtQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywgXAotCQkgUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgKmNtZF9jb3VudDsKIHN0YXRpYyBpbnQgc3BvcnRfbnVtID0gQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU07CiAKKyNkZWZpbmUgU1BPUlRfUkVRKHgpIFwKKwlbeF0gPSB7UF9TUE9SVCMjeCMjX1RGUywgUF9TUE9SVCMjeCMjX0RUUFJJLCBQX1NQT1JUIyN4IyNfVFNDTEssIFwKKwkgICAgICAgUF9TUE9SVCMjeCMjX1JGUywgUF9TUE9SVCMjeCMjX0RSUFJJLCBQX1NQT1JUIyN4IyNfUlNDTEssIDB9CiBzdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0gewotCQlQSU5fUkVRX1NQT1JUXzAsCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8xCi0JCVBJTl9SRVFfU1BPUlRfMSwKKyNpZmRlZiBTUE9SVDBfVENSMQorCVNQT1JUX1JFUSgwKSwKICNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMgotCQlQSU5fUkVRX1NQT1JUXzIsCisjaWZkZWYgU1BPUlQxX1RDUjEKKwlTUE9SVF9SRVEoMSksCiAjZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzMKLQkJUElOX1JFUV9TUE9SVF8zLAorI2lmZGVmIFNQT1JUMl9UQ1IxCisJU1BPUlRfUkVRKDIpLAogI2VuZGlmCi0JfTsKKyNpZmRlZiBTUE9SVDNfVENSMQorCVNQT1JUX1JFUSgzKSwKKyNlbmRpZgorfTsKIAotc3RhdGljIHN0cnVjdCBzcG9ydF9wYXJhbSBzcG9ydF9wYXJhbXNbNF0gPSB7Ci0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDBfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMF9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQwX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQwX1RDUjEsCi0JfSwKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzEKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUMV9SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQxX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDFfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDFfVENSMSwKLQl9LAotI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8yCi0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDJfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMl9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQyX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQyX1RDUjEsCi0JfSwKLSNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMwotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQzX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDNfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUM19FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUM19UQ1IxLAorI2RlZmluZSBTUE9SVF9QQVJBTVMoeCkgXAorCVt4XSA9IHsgXAorCQkuZG1hX3J4X2NoYW4gPSBDSF9TUE9SVCMjeCMjX1JYLCBcCisJCS5kbWFfdHhfY2hhbiA9IENIX1NQT1JUIyN4IyNfVFgsIFwKKwkJLmVycl9pcnEgICAgID0gSVJRX1NQT1JUIyN4IyNfRVJST1IsIFwKKwkJLnJlZ3MgICAgICAgID0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUIyN4IyNfVENSMSwgXAogCX0KK3N0YXRpYyBzdHJ1Y3Qgc3BvcnRfcGFyYW0gc3BvcnRfcGFyYW1zWzRdID0geworI2lmZGVmIFNQT1JUMF9UQ1IxCisJU1BPUlRfUEFSQU1TKDApLAorI2VuZGlmCisjaWZkZWYgU1BPUlQxX1RDUjEKKwlTUE9SVF9QQVJBTVMoMSksCisjZW5kaWYKKyNpZmRlZiBTUE9SVDJfVENSMQorCVNQT1JUX1BBUkFNUygyKSwKKyNlbmRpZgorI2lmZGVmIFNQT1JUM19UQ1IxCisJU1BPUlRfUEFSQU1TKDMpLAogI2VuZGlmCiB9OwogCkBAIC0zMzIsMTEgKzMwNiwxMSBAQAogCWlmIChjbWRfY291bnQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdLCAic29jLWF1ZGlvIikpIHsKKwlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0sICJzb2MtYXVkaW8iKSkgewogCQlwcl9lcnIoIlJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKIAkJcmV0ID0gIC1FRkFVTFQ7CiAJCWdvdG8gcGVyaXBoZXJhbF9lcnI7Ci0JCX0KKwl9CiAKICNpZmRlZiBDT05GSUdfU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAogCS8qIFJlcXVlc3QgUEIzIGFzIHJlc2V0IHBpbiAqLwpAQCAtMzgzLDkgKzM1Nyw5IEBACiBzcG9ydF9lcnI6CiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAlncGlvX2ZyZWUoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSk7Ci0jZW5kaWYKIGdwaW9fZXJyOgotCXBlcmlwaGVyYWxfZnJlZV9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSk7CisjZW5kaWYKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSk7CiBwZXJpcGhlcmFsX2VycjoKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY21kX2NvdW50KTsKIAljbWRfY291bnQgPSBOVUxMOwpAQCAtMzk4LDcgKzM3Miw3IEBACiB7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNtZF9jb3VudCk7CiAJY21kX2NvdW50ID0gTlVMTDsKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworCXBlcmlwaGVyYWxfZnJlZV9saXN0KHNwb3J0X3JlcVtzcG9ydF9udW1dKTsKICNpZmRlZiBDT05GSUdfU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAogCWdwaW9fZnJlZShDT05GSUdfU05EX0JGNVhYX1JFU0VUX0dQSU9fTlVNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKaW5kZXggN2YyYTVlMS4uZWRmYmRjMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlTU1lOQygpOwogCiAJLyogV2hlbiBUVVZGIGlzIHNldCwgdGhlIGRhdGEgaXMgYWxyZWFkeSBzZW5kIG91dCAqLwotCXdoaWxlICghKHN0YXR1cyAmIFRVVkYpICYmIGNvdW50KysgPCAxMDAwMCkgeworCXdoaWxlICghKHN0YXR1cyAmIFRVVkYpICYmICsrY291bnQgPCAxMDAwMCkgewogCQl1ZGVsYXkoMSk7CiAJCXN0YXR1cyA9IGJmaW5fcmVhZF9TUE9SVF9TVEFUKCk7CiAJCVNTWU5DKCk7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlTU1lOQygpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCWlmIChjb3VudCA9PSAxMDAwMCkgeworCWlmIChjb3VudCA+PSAxMDAwMCkgewogCQlwcmludGsoS0VSTl9FUlIgImFkNzMzMTE6IGZhaWxlZCB0byBjb25maWd1cmUgY29kZWNcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKaW5kZXggNTNkMjkwYi4uMTMxOGM0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAlyZXR1cm4gMCA7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21faTJzX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2kyc19vcHMgPSB7CiAJLm9wZW4JCT0gYmY1eHhfcGNtX29wZW4sCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBiZjV4eF9wY21faHdfcGFyYW1zLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IGQxZDk1ZDIuLjk2NDgyNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTI4Nyw2ICsyODcsMTMgQEAKICNkZWZpbmUgQkY1WFhfSTJTX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYmY1eHhfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBiZjV4eF9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBiZjV4eF9pMnNfc2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IGJmNXh4X2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBiZjV4eF9pMnNfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYmY1eHhfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJiZjV4eC1pMnMiLAogCS5pZCA9IDAsCkBAIC0zMDQsMTIgKzMxMSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBCRjVYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gQkY1WFhfSTJTX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCAgID0gYmY1eHhfaTJzX3N0YXJ0dXAsCi0JCS5zaHV0ZG93biAgPSBiZjV4eF9pMnNfc2h1dGRvd24sCi0JCS5od19wYXJhbXMgPSBiZjV4eF9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IGJmNXh4X2kyc19zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmYmY1eHhfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYmY1eHhfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKaW5kZXggM2I5OWU0OC4uYjc5NTNjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZyYWdjb3VudDsgKytpKSB7Ci0JCWRlc2NbaV0ubmV4dF9kZXNjX2FkZHIgID0gKHVuc2lnbmVkIGxvbmcpJihkZXNjW2kgKyAxXSk7CisJCWRlc2NbaV0ubmV4dF9kZXNjX2FkZHIgID0gJihkZXNjW2kgKyAxXSk7CiAJCWRlc2NbaV0uc3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJ1ZiArIGkqZnJhZ3NpemU7CiAJCWRlc2NbaV0uY2ZnID0gY2ZnOwogCQlkZXNjW2ldLnhfY291bnQgPSB4X2NvdW50OwpAQCAtMTQzLDEyICsxNDMsMTIgQEAKIAl9CiAKIAkvKiBtYWtlIGNpcmN1bGFyICovCi0JZGVzY1tmcmFnY291bnQtMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2NbZnJhZ2NvdW50LTFdLm5leHRfZGVzY19hZGRyID0gZGVzYzsKIAotCXByX2RlYnVnKCJzZXR1cCBkZXNjOiBkZXNjMD0lcCwgbmV4dDA9JWx4LCBkZXNjMT0lcCwiCi0JCSJuZXh0MT0lbHhcbnhfY291bnQ9JXgseV9jb3VudD0leCxhZGRyPTB4JWx4LGNmcz0weCV4XG4iLAotCQkmKGRlc2NbMF0pLCBkZXNjWzBdLm5leHRfZGVzY19hZGRyLAotCQkmKGRlc2NbMV0pLCBkZXNjWzFdLm5leHRfZGVzY19hZGRyLAorCXByX2RlYnVnKCJzZXR1cCBkZXNjOiBkZXNjMD0lcCwgbmV4dDA9JXAsIGRlc2MxPSVwLCIKKwkJIm5leHQxPSVwXG54X2NvdW50PSV4LHlfY291bnQ9JXgsYWRkcj0weCVseCxjZnM9MHgleFxuIiwKKwkJZGVzYywgZGVzY1swXS5uZXh0X2Rlc2NfYWRkciwKKwkJZGVzYysxLCBkZXNjWzFdLm5leHRfZGVzY19hZGRyLAogCQlkZXNjWzBdLnhfY291bnQsIGRlc2NbMF0ueV9jb3VudCwKIAkJZGVzY1swXS5zdGFydF9hZGRyLCBkZXNjWzBdLmNmZyk7CiB9CkBAIC0xODQsMjIgKzE4NCwyMCBAQAogCUJVR19PTihzcG9ydC0+Y3Vycl9yeF9kZXNjID09IHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKIAogCS8qIE1heWJlIHRoZSBkdW1teSBidWZmZXIgZGVzY3JpcHRvciByaW5nIGlzIGRhbWFnZWQgKi8KLQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmR1bW15X3J4X2Rlc2MrMSk7CisJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2MgKyAxOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRlc2MgPSAoc3RydWN0IGRtYXNnICopZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfcnhfY2hhbik7CisJZGVzYyA9IGdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pOwogCS8qIENvcHkgdGhlIGRlc2NyaXB0b3Igd2hpY2ggd2lsbCBiZSBkYW1hZ2VkIHRvIGJhY2t1cCAqLwogCXRlbXBfZGVzYyA9ICpkZXNjOwogCWRlc2MtPnhfY291bnQgPSAweGE7CiAJZGVzYy0+eV9jb3VudCA9IDA7Ci0JZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZykoc3BvcnQtPmR1bW15X3J4X2Rlc2MpOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCS8qIFdhaXRpbmcgZm9yIGR1bW15IGJ1ZmZlciBkZXNjcmlwdG9yIGlzIGFscmVhZHkgaG9va2VkKi8KIAl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3J4X2Rlc2MpCi0JCTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYykKKwkJY29udGludWU7CiAJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCS8qIFJlc3RvcmUgdGhlIGRhbWFnZWQgZGVzY3JpcHRvciAqLwogCSpkZXNjID0gdGVtcF9kZXNjOwpAQCAtMjEwLDE0ICsyMDgsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNwb3J0X3J4X2RtYV9zdGFydChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCwgaW50IGR1bW15KQogewogCWlmIChkdW1teSkgewotCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNwb3J0LT5kdW1teV9yeF9kZXNjOworCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCX0gZWxzZQogCQlzcG9ydC0+Y3Vycl9yeF9kZXNjID0gc3BvcnQtPmRtYV9yeF9kZXNjOwogCi0Jc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3J4X2NoYW4sIFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+Y3Vycl9yeF9kZXNjKSk7CisJc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3J4X2NoYW4sIHNwb3J0LT5jdXJyX3J4X2Rlc2MpOwogCXNldF9kbWFfeF9jb3VudChzcG9ydC0+ZG1hX3J4X2NoYW4sIDApOwogCXNldF9kbWFfeF9tb2RpZnkoc3BvcnQtPmRtYV9yeF9jaGFuLCAwKTsKIAlzZXRfZG1hX2NvbmZpZyhzcG9ydC0+ZG1hX3J4X2NoYW4sIChETUFGTE9XX0xBUkdFIHwgTkRTSVpFXzkgfCBcCkBAIC0yMzEsMTQgKzIyNywxMiBAQAogc3RhdGljIGlubGluZSBpbnQgc3BvcnRfdHhfZG1hX3N0YXJ0KHN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0LCBpbnQgZHVtbXkpCiB7CiAJaWYgKGR1bW15KSB7Ci0JCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCQkodW5zaWduZWQgbG9uZykgc3BvcnQtPmR1bW15X3R4X2Rlc2M7CisJCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCQlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmR1bW15X3R4X2Rlc2M7CiAJfSBlbHNlCiAJCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAKLQlzZXRfZG1hX25leHRfZGVzY19hZGRyKHNwb3J0LT5kbWFfdHhfY2hhbiwgXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5jdXJyX3R4X2Rlc2MpKTsKKwlzZXRfZG1hX25leHRfZGVzY19hZGRyKHNwb3J0LT5kbWFfdHhfY2hhbiwgc3BvcnQtPmN1cnJfdHhfZGVzYyk7CiAJc2V0X2RtYV94X2NvdW50KHNwb3J0LT5kbWFfdHhfY2hhbiwgMCk7CiAJc2V0X2RtYV94X21vZGlmeShzcG9ydC0+ZG1hX3R4X2NoYW4sIDApOwogCXNldF9kbWFfY29uZmlnKHNwb3J0LT5kbWFfdHhfY2hhbiwKQEAgLTI2MSwxMSArMjU1LDkgQEAKIAkJQlVHX09OKHNwb3J0LT5jdXJyX3J4X2Rlc2MgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfcnhfY2hhbikgLQotCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9Ci0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfcnhfZGVzYykKLQkJCTsKLQkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0KLQkJCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmRtYV9yeF9kZXNjKTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYykKKwkJCWNvbnRpbnVlOworCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZG1hX3J4X2Rlc2M7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kbWFfcnhfZGVzYzsKIAl9IGVsc2UgewpAQCAtMzEwLDIzICszMDIsMjEgQEAKIAlCVUdfT04oc3BvcnQtPmR1bW15X3R4X2Rlc2MgPT0gTlVMTCk7CiAJQlVHX09OKHNwb3J0LT5jdXJyX3R4X2Rlc2MgPT0gc3BvcnQtPmR1bW15X3R4X2Rlc2MpOwogCi0Jc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV90eF9kZXNjKzEpOworCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV90eF9kZXNjICsgMTsKIAogCS8qIFNob3J0ZW4gdGhlIHRpbWUgb24gbGFzdCBub3JtYWwgZGVzY3JpcHRvciAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKWdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pOworCWRlc2MgPSBnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKTsKIAkvKiBTdG9yZSB0aGUgZGVzY3JpcHRvciB3aGljaCB3aWxsIGJlIGRhbWFnZWQgKi8KIAl0ZW1wX2Rlc2MgPSAqZGVzYzsKIAlkZXNjLT54X2NvdW50ID0gMHhhOwogCWRlc2MtPnlfY291bnQgPSAwOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV90eF9kZXNjKTsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkvKiBXYWl0aW5nIGZvciBkdW1teSBidWZmZXIgZGVzY3JpcHRvciBpcyBhbHJlYWR5IGhvb2tlZCovCiAJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKSAtIFwKLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBcCi0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfdHhfZGVzYykKLQkJOworCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9IHNwb3J0LT5kdW1teV90eF9kZXNjKQorCQljb250aW51ZTsKIAlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmR1bW15X3R4X2Rlc2M7CiAJLyogUmVzdG9yZSB0aGUgZGFtYWdlZCBkZXNjcmlwdG9yICovCiAJKmRlc2MgPSB0ZW1wX2Rlc2M7CkBAIC0zNDcsMTEgKzMzNyw5IEBACiAJCS8qIEhvb2sgdGhlIG5vcm1hbCBidWZmZXIgZGVzY3JpcHRvciAqLwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbikgLQotCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9Ci0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfdHhfZGVzYykKLQkJCTsKLQkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0KLQkJCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmRtYV90eF9kZXNjKTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYykKKwkJCWNvbnRpbnVlOworCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kbWFfdHhfZGVzYzsKIAl9IGVsc2UgewpAQCAtNTM2LDE5ICs1MjQsMTcgQEAKIAl1bnNpZ25lZCBjb25maWc7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJlZFxuIiwgX19mdW5jX18pOwotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCWRlc2MgPSAoc3RydWN0IGRtYXNnICopIGwxX2RhdGFfc3JhbV9hbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7Ci0jZWxzZQotCXsKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJZGVzYyA9IGwxX2RhdGFfc3JhbV96YWxsb2MoMiAqIHNpemVvZigqZGVzYykpOworCWVsc2UgewogCQlkbWFfYWRkcl90IGFkZHI7CiAJCWRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgMiAqIHNpemVvZigqZGVzYyksICZhZGRyLCAwKTsKKwkJbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAl9Ci0jZW5kaWYKIAlpZiAoZGVzYyA9PSBOVUxMKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZHVtbXkgcnggZGVzY1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCXNwb3J0LT5kdW1teV9yeF9kZXNjID0gZGVzYzsKIAlkZXNjLT5zdGFydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X2J1ZjsKIAljb25maWcgPSBETUFGTE9XX0xBUkdFIHwgTkRTSVpFXzkgfCBjb21wdXRlX3dkc2l6ZShzcG9ydC0+d2RzaXplKQpAQCAtNTU5LDggKzU0NSw4IEBACiAJZGVzYy0+eV9jb3VudCA9IDA7CiAJZGVzYy0+eV9tb2RpZnkgPSAwOwogCW1lbWNweShkZXNjKzEsIGRlc2MsIHNpemVvZigqZGVzYykpOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKGRlc2MrMSk7Ci0JZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2M7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBkZXNjICsgMTsKKwlkZXNjWzFdLm5leHRfZGVzY19hZGRyID0gZGVzYzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTcxLDE5ICs1NTcsMTcgQEAKIAogCXByX2RlYnVnKCIlcyBlbnRlcmVkXG4iLCBfX2Z1bmNfXyk7CiAKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKSBsMV9kYXRhX3NyYW1fYWxsb2MoMiAqIHNpemVvZigqZGVzYykpOwotI2Vsc2UKLQl7CisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCWRlc2MgPSBsMV9kYXRhX3NyYW1femFsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKKwllbHNlIHsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQlkZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIDIgKiBzaXplb2YoKmRlc2MpLCAmYWRkciwgMCk7CisJCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJfQotI2VuZGlmCiAJaWYgKCFkZXNjKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZHVtbXkgdHggZGVzY1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCXNwb3J0LT5kdW1teV90eF9kZXNjID0gZGVzYzsKIAlkZXNjLT5zdGFydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X2J1ZiArIFwKIAkJc3BvcnQtPmR1bW15X2NvdW50OwpAQCAtNTk1LDggKzU3OSw4IEBACiAJZGVzYy0+eV9jb3VudCA9IDA7CiAJZGVzYy0+eV9tb2RpZnkgPSAwOwogCW1lbWNweShkZXNjKzEsIGRlc2MsIHNpemVvZigqZGVzYykpOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKGRlc2MrMSk7Ci0JZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2M7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBkZXNjICsgMTsKKwlkZXNjWzFdLm5leHRfZGVzY19hZGRyID0gZGVzYzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODcyLDE3ICs4NTYsMTUgQEAKIAlzcG9ydC0+d2RzaXplID0gd2RzaXplOwogCXNwb3J0LT5kdW1teV9jb3VudCA9IGR1bW15X2NvdW50OwogCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0Jc3BvcnQtPmR1bW15X2J1ZiA9IGwxX2RhdGFfc3JhbV9hbGxvYyhkdW1teV9jb3VudCAqIDIpOwotI2Vsc2UKLQlzcG9ydC0+ZHVtbXlfYnVmID0ga21hbGxvYyhkdW1teV9jb3VudCAqIDIsIEdGUF9LRVJORUwpOwotI2VuZGlmCisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCXNwb3J0LT5kdW1teV9idWYgPSBsMV9kYXRhX3NyYW1femFsbG9jKGR1bW15X2NvdW50ICogMik7CisJZWxzZQorCQlzcG9ydC0+ZHVtbXlfYnVmID0ga3phbGxvYyhkdW1teV9jb3VudCAqIDIsIEdGUF9LRVJORUwpOwogCWlmIChzcG9ydC0+ZHVtbXlfYnVmID09IE5VTEwpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZHVtbXkgYnVmZmVyXG4iKTsKIAkJZ290byBfX2Vycm9yOwogCX0KIAotCW1lbXNldChzcG9ydC0+ZHVtbXlfYnVmLCAwLCBkdW1teV9jb3VudCAqIDIpOwogCXJldCA9IHNwb3J0X2NvbmZpZ19yeF9kdW1teShzcG9ydCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBjb25maWcgcnggZHVtbXkgcmluZ1xuIik7CkBAIC05MzksNiArOTIxLDcgQEAKIAkJc3BvcnQgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChzcG9ydF9kb25lKTsKKwogLyoKICogSXQgaXMgb25seSB1c2VkIHRvIHNlbmQgc2V2ZXJhbCBieXRlcyB3aGVuIGRtYSBpcyBub3QgZW5hYmxlZAogICogc3BvcnQgY29udHJvbGxlciBpcyBjb25maWd1cmVkIGJ1dCBub3QgZW5hYmxlZC4KQEAgLTEwMjksNCArMTAxMiwzIEBACiBNT0RVTEVfQVVUSE9SKCJSb3kgSHVhbmciKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU1BPUlQgZHJpdmVyIGZvciBBREkgQmxhY2tmaW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IGQwZTBkNjkuLmI2YzdmN2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTEwLDkgKzEwLDExIEBACiAKIGNvbmZpZyBTTkRfU09DX0FMTF9DT0RFQ1MKIAl0cmlzdGF0ZSAiQnVpbGQgYWxsIEFTb0MgQ09ERUMgZHJpdmVycyIKKwlzZWxlY3QgU05EX1NPQ19MMwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQ09ERUMgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FEMTk4MCBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUQ3MzMxMSBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19BSzQxMDQgaWYgU1BJX01BU1RFUgogCXNlbGVjdCBTTkRfU09DX0FLNDUzNSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOApAQCAtMjQsNiArMjYsNyBAQAogCXNlbGVjdCBTTkRfU09DX1VEQTEzNFgKIAlzZWxlY3QgU05EX1NPQ19VREExMzgwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODM1MCBpZiBNRkRfV004MzUwCisJc2VsZWN0IFNORF9TT0NfV004NDAwIGlmIE1GRF9XTTg0MDAKIAlzZWxlY3QgU05EX1NPQ19XTTg1MTAgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODU4MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg3MjggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQpAQCAtMzQsNiArMzcsNyBAQAogCXNlbGVjdCBTTkRfU09DX1dNODkwMyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTkwIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNOTcwNSBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEyIGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19XTTk3MTMgaWYgU05EX1NPQ19BQzk3X0JVUwogICAgICAgICBoZWxwCkBAIC01OCw2ICs2Miw5IEBACiBjb25maWcgU05EX1NPQ19BRDczMzExCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfQUs0MTA0CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfQUs0NTM1CiAJdHJpc3RhdGUKIApAQCAtNjUsMTIgKzcyLDYgQEAKIGNvbmZpZyBTTkRfU09DX0NTNDI3MAogCXRyaXN0YXRlCiAKLSMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYyBIYXJkd2FyZSBNdXRlIFN1cHBvcnQKLSMgU2VsZWN0IGlmIHlvdSBoYXZlIGV4dGVybmFsIG11dGluZyBjaXJjdWl0cnkgYXR0YWNoZWQgdG8geW91ciBDUzQyNzAuCi1jb25maWcgU05EX1NPQ19DUzQyNzBfSFdNVVRFCi0JYm9vbAotCWRlcGVuZHMgb24gU05EX1NPQ19DUzQyNzAKLQogIyBDaXJydXMgTG9naWMgQ1M0MjcwIENvZGVjIFZEID0gMy4zViBFcnJhdGEKICMgU2VsZWN0IGlmIHlvdSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGVycmF0YSB3aGVyZSB0aGUgcGFydCB3aWxsIG5vdCBmdW5jdGlvbgogIyBpZiBNQ0xLIGRpdmlkZS1ieS0xLjUgaXMgc2VsZWN0ZWQgYW5kIFZEIGlzIHNldCB0byAzLjNWLiAgVGhlIGRyaXZlciB3aWxsCkBAIC05MCw3ICs5MSw2IEBACiAKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzIzCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIEkyQwogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMyNgogCXRyaXN0YXRlICJUSSBUTFYzMjBBSUMyNiBDb2RlYyBzdXBwb3J0IiBpZiBTTkRfU09DX09GX1NJTVBMRQpAQCAtOTgsMTUgKzk4LDEyIEBACiAKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzNYCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIEkyQwogCiBjb25maWcgU05EX1NPQ19UV0w0MDMwCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRQogCiBjb25maWcgU05EX1NPQ19VREExMzRYCiAgICAgICAgdHJpc3RhdGUKLSAgICAgICBzZWxlY3QgU05EX1NPQ19MMwogCiBjb25maWcgU05EX1NPQ19VREExMzgwCiAgICAgICAgIHRyaXN0YXRlCkBAIC0xMTQsNiArMTExLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODM1MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODQwMAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODUxMAogCXRyaXN0YXRlCiAKQEAgLTE0NCw2ICsxNDQsOSBAQAogY29uZmlnIFNORF9TT0NfV004OTkwCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV005NzA1CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV005NzEyCiAJdHJpc3RhdGUKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggYzRkZGM5YS4uMDMwZDI0NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogc25kLXNvYy1hYzk3LW9ianMgOj0gYWM5Ny5vCiBzbmQtc29jLWFkMTk4MC1vYmpzIDo9IGFkMTk4MC5vCiBzbmQtc29jLWFkNzMzMTEtb2JqcyA6PSBhZDczMzExLm8KK3NuZC1zb2MtYWs0MTA0LW9ianMgOj0gYWs0MTA0Lm8KIHNuZC1zb2MtYWs0NTM1LW9ianMgOj0gYWs0NTM1Lm8KIHNuZC1zb2MtY3M0MjcwLW9ianMgOj0gY3M0MjcwLm8KIHNuZC1zb2MtbDMtb2JqcyA6PSBsMy5vCkBAIC0xMyw2ICsxNCw3IEBACiBzbmQtc29jLXVkYTEzNHgtb2JqcyA6PSB1ZGExMzR4Lm8KIHNuZC1zb2MtdWRhMTM4MC1vYmpzIDo9IHVkYTEzODAubwogc25kLXNvYy13bTgzNTAtb2JqcyA6PSB3bTgzNTAubworc25kLXNvYy13bTg0MDAtb2JqcyA6PSB3bTg0MDAubwogc25kLXNvYy13bTg1MTAtb2JqcyA6PSB3bTg1MTAubwogc25kLXNvYy13bTg1ODAtb2JqcyA6PSB3bTg1ODAubwogc25kLXNvYy13bTg3Mjgtb2JqcyA6PSB3bTg3MjgubwpAQCAtMjMsMTIgKzI1LDE0IEBACiBzbmQtc29jLXdtODkwMy1vYmpzIDo9IHdtODkwMy5vCiBzbmQtc29jLXdtODk3MS1vYmpzIDo9IHdtODk3MS5vCiBzbmQtc29jLXdtODk5MC1vYmpzIDo9IHdtODk5MC5vCitzbmQtc29jLXdtOTcwNS1vYmpzIDo9IHdtOTcwNS5vCiBzbmQtc29jLXdtOTcxMi1vYmpzIDo9IHdtOTcxMi5vCiBzbmQtc29jLXdtOTcxMy1vYmpzIDo9IHdtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX0FDOTdfQ09ERUMpCSs9IHNuZC1zb2MtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDE5ODApCSs9IHNuZC1zb2MtYWQxOTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FENzMzMTEpICs9IHNuZC1zb2MtYWQ3MzMxMS5vCitvYmotJChDT05GSUdfU05EX1NPQ19BSzQxMDQpCSs9IHNuZC1zb2MtYWs0MTA0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDUzNSkJKz0gc25kLXNvYy1hazQ1MzUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1M0MjcwKQkrPSBzbmQtc29jLWNzNDI3MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19MMykJKz0gc25kLXNvYy1sMy5vCkBAIC00MSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19VREExMzRYKQkrPSBzbmQtc29jLXVkYTEzNHgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM4MCkJKz0gc25kLXNvYy11ZGExMzgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODM1MCkJKz0gc25kLXNvYy13bTgzNTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004NDAwKQkrPSBzbmQtc29jLXdtODQwMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg1MTApCSs9IHNuZC1zb2Mtd204NTEwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODU4MCkJKz0gc25kLXNvYy13bTg1ODAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzI4KQkrPSBzbmQtc29jLXdtODcyOC5vCkBAIC01MSw1ICs1Niw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDMpCSs9IHNuZC1zb2Mtd204OTAzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk3MSkJKz0gc25kLXNvYy13bTg5NzEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkwKQkrPSBzbmQtc29jLXdtODk5MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTEpCSs9IHNuZC1zb2Mtd204OTkxLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNOTcwNSkJKz0gc25kLXNvYy13bTk3MDUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEyKQkrPSBzbmQtc29jLXdtOTcxMi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MTMpCSs9IHNuZC1zb2Mtd205NzEzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKaW5kZXggZmI1M2U2NS4uYjBkNGFmMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWludCByZWcgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPwogCQkgIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFIDogQUM5N19QQ01fTFJfQURDX1JBVEU7CkBAIC00MSw2ICs0MSwxMCBAQAogCQlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHxcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhYzk3X2RhaV9vcHMgPSB7CisJLnByZXBhcmUJPSBhYzk3X3ByZXBhcmUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWM5N19kYWkgPSB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKIAkuYWM5N19jb250cm9sID0gMSwKQEAgLTU2LDggKzYwLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFNURF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X3ByZXBhcmUsfSwKKwkub3BzID0gJmFjOTdfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhYzk3X2RhaSk7CiAKQEAgLTg0LDEwICs4NywxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQUM5NyBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIEFDOTdfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNvY2Rldi0+Y29kZWMpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NkZXYtPmNhcmQtPmNvZGVjKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+bmFtZSA9ICJBQzk3IjsKQEAgLTEyMywyMyArMTI2LDIxIEBACiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAogZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMtPnJlZ19jYWNoZSk7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhYzk3X3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmICghY29kZWMpCiAJCXJldHVybiAwOwogCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjLT5yZWdfY2FjaGUpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDksNyArMTUwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jc25kX2FjOTdfc3VzcGVuZChzb2NkZXYtPmNvZGVjLT5hYzk3KTsKKwlzbmRfYWM5N19zdXNwZW5kKHNvY2Rldi0+Y2FyZC0+Y29kZWMtPmFjOTcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgsNyArMTU5LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jc25kX2FjOTdfcmVzdW1lKHNvY2Rldi0+Y29kZWMtPmFjOTcpOworCXNuZF9hYzk3X3Jlc3VtZShzb2NkZXYtPmNhcmQtPmNvZGVjLT5hYzk3KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKaW5kZXggNzNmZGJiNC4uZGRiM2IwOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCkBAIC05MywyMCArOTMsNiBAQAogU09DX1NJTkdMRSgiTWljIEJvb3N0IFN3aXRjaCIsIEFDOTdfTUlDLCA2LCAxLCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBhZDE5ODBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLCBzbmRfc29jX2NuZXcoCi0JCQkJJmFkMTk4MF9zbmRfYWM5N19jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCByZWcpCiB7CkBAIC0xMjMsNyArMTA5LDcgQEAKIAlkZWZhdWx0OgogCQlyZWcgPSByZWcgPj4gMTsKIAotCQlpZiAocmVnID49IChBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKSkKKwkJaWYgKHJlZyA+PSBBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcmV0dXJuIGNhY2hlW3JlZ107CkBAIC0xMzcsNyArMTIzLDcgQEAKIAogCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwotCWlmIChyZWcgPCAoQVJSQVlfU0laRShhZDE5ODBfcmVnKSkpCisJaWYgKHJlZyA8IEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CiAKIAlyZXR1cm4gMDsKQEAgLTIwMCwxMCArMTg2LDEwIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJBRDE5ODAgU29DIEF1ZGlvIENvZGVjXG4iKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPnJlZ19jYWNoZSA9CkBAIC0yNjksNyArMjU1LDggQEAKIAlleHRfc3RhdHVzID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CiAJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIGV4dF9zdGF0dXMmfjB4MzgwMCk7CiAKLQlhZDE5ODBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzKSk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImFkMTk4MDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOwpAQCAtMjg4LDE1ICsyNzUsMTUgQEAKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAogY2FjaGVfZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWQxOTgwX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKaW5kZXggYjA5Mjg5YS4uZTYxZGFjNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljb2RlYy0+ZGFpID0gJmFkNzMzMTFfZGFpOwogCWNvZGVjLT5udW1fZGFpID0gMTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCkBAIC03NSwxNSArNzUsMTUgQEAKIHJlZ2lzdGVyX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkNzMzMTFfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmggYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaAppbmRleCA1MDdjZTBjLi41Njk1NzNkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaApAQCAtNzAsNyArNzAsNyBAQAogI2RlZmluZSBSRUdEX0lHUyh4KQkJKHggJiAweDcpCiAjZGVmaW5lIFJFR0RfUk1PRAkJKDEgPDwgMykKICNkZWZpbmUgUkVHRF9PR1MoeCkJCSgoeCAmIDB4NykgPDwgNCkKLSNkZWZpbmUgUkVHRF9NVVRFCQkoeCA8PCA3KQorI2RlZmluZSBSRUdEX01VVEUJCSgxIDw8IDcpCiAKIC8qIENvbnRyb2wgcmVnaXN0ZXIgRSAqLwogI2RlZmluZSBDVFJMX1JFR19FCSg0IDw8IDgpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ3YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIEFLNDEwNCBBTFNBIFNvQyAoQVNvQykgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKworI2luY2x1ZGUgImFrNDEwNC5oIgorCisvKiBBSzQxMDQgcmVnaXN0ZXJzIGFkZHJlc3NlcyAqLworI2RlZmluZSBBSzQxMDRfUkVHX0NPTlRST0wxCQkweDAwCisjZGVmaW5lIEFLNDEwNF9SRUdfUkVTRVJWRUQJCTB4MDEKKyNkZWZpbmUgQUs0MTA0X1JFR19DT05UUk9MMgkJMHgwMgorI2RlZmluZSBBSzQxMDRfUkVHX1RYCQkJMHgwMworI2RlZmluZSBBSzQxMDRfUkVHX0NITl9TVEFUVVMoeCkJKCh4KSArIDB4MDQpCisjZGVmaW5lIEFLNDEwNF9OVU1fUkVHUwkJCTEwCisKKyNkZWZpbmUgQUs0MTA0X1JFR19NQVNLCQkJMHgxZgorI2RlZmluZSBBSzQxMDRfUkVBRAkJCTB4YzAKKyNkZWZpbmUgQUs0MTA0X1dSSVRFCQkJMHhlMAorI2RlZmluZSBBSzQxMDRfUkVTRVJWRURfVkFMCQkweDViCisKKy8qIEJpdCBtYXNrcyBmb3IgQUs0MTA0IHJlZ2lzdGVycyAqLworI2RlZmluZSBBSzQxMDRfQ09OVFJPTDFfUlNUTgkJKDEgPDwgMCkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX1BXCQkoMSA8PCAxKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDFfRElGMAkJKDEgPDwgMikKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX0RJRjEJCSgxIDw8IDMpCisKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wyX1NFTDAJCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMl9TRUwxCQkoMSA8PCAxKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDJfTU9ERQkJKDEgPDwgMikKKworI2RlZmluZSBBSzQxMDRfVFhfVFhFCQkJKDEgPDwgMCkKKyNkZWZpbmUgQUs0MTA0X1RYX1YJCQkoMSA8PCAxKQorCisjZGVmaW5lIERSVl9OQU1FICJhazQxMDQiCisKK3N0cnVjdCBhazQxMDRfcHJpdmF0ZSB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTggcmVnX2NhY2hlW0FLNDEwNF9OVU1fUkVHU107Cit9OworCitzdGF0aWMgaW50IGFrNDEwNF9maWxsX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkrKykgeworCQlpbnQgcmV0ID0gc3BpX3c4cjgoc3BpLCBpIHwgQUs0MTA0X1JFQUQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgd3JpdGUgZmFpbHVyZVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmVnX2NhY2hlW2ldID0gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFrNDEwNF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByZWdfY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCBhazQxMDRfc3BpX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyAmPSBBSzQxMDRfUkVHX01BU0s7CisJcmVnIHw9IEFLNDEwNF9XUklURTsKKworCS8qIG9ubHkgd3JpdGUgdG8gdGhlIGhhcmR3YXJlIGlmIHZhbHVlIGhhcyBjaGFuZ2VkICovCisJaWYgKGNhY2hlW3JlZ10gIT0gdmFsdWUpIHsKKwkJdTggdG1wWzJdID0geyByZWcsIHZhbHVlIH07CisJCWlmIChzcGlfd3JpdGUoc3BpLCB0bXAsIHNpemVvZih0bXApKSkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJY2FjaGVbcmVnXSA9IHZhbHVlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgdmFsID0gMDsKKworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwl2YWwgJj0gfihBSzQxMDRfQ09OVFJPTDFfRElGMCB8IEFLNDEwNF9DT05UUk9MMV9ESUYxKTsKKworCS8qIHNldCBEQUkgZm9ybWF0ICovCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXZhbCB8PSBBSzQxMDRfQ09OVFJPTDFfRElGMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCXZhbCB8PSBBSzQxMDRfQ09OVFJPTDFfRElGMCB8IEFLNDEwNF9DT05UUk9MMV9ESUYxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpbnZhbGlkIGRhaSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGlzIGRldmljZSBjYW4gb25seSBiZSBzbGF2ZSAqLworCWlmICgoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCWludCB2YWwgPSAwOworCisJLyogc2V0IHRoZSBJRUM5NTggYml0czogY29uc3VtZXIgbW9kZSwgbm8gY29weXJpZ2h0IGJpdCAqLworCXZhbCB8PSBJRUM5NThfQUVTMF9DT05fTk9UX0NPUFlSSUdIVDsKKwlhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NITl9TVEFUVVMoMCksIHZhbCk7CisKKwl2YWwgPSAwOworCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA0NDEwMDoKKwkJdmFsIHw9IElFQzk1OF9BRVMzX0NPTl9GU180NDEwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJdmFsIHw9IElFQzk1OF9BRVMzX0NPTl9GU180ODAwMDsKKwkJYnJlYWs7CisJY2FzZSAzMjAwMDoKKwkJdmFsIHw9IElFQzk1OF9BRVMzX0NPTl9GU18zMjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5zdXBwb3J0ZWQgc2FtcGxpbmcgcmF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NITl9TVEFUVVMoMyksIHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFrNDEwMV9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBhazQxMDRfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gYWs0MTA0X3NldF9kYWlfZm10LAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGFrNDEwNF9kYWkgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCSBTTkRSVl9QQ01fUkFURV8zMjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSAgfAorCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFCisJfSwKKwkub3BzID0gJmFrNDEwMV9kYWlfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICphazQxMDRfY29kZWM7CisKK3N0YXRpYyBpbnQgYWs0MTA0X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgKmFrNDEwNDsKKwlpbnQgcmV0LCB2YWw7CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlhazQxMDQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFrNDEwNCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlY1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNvZGVjID0gJmFrNDEwNC0+Y29kZWM7CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5kZXYgPSAmc3BpLT5kZXY7CisJY29kZWMtPm5hbWUgPSBEUlZfTkFNRTsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmFrNDEwNF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBhazQxMDQ7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+cmVnX2NhY2hlID0gYWs0MTA0LT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQUs0MTA0X05VTV9SRUdTOworCisJLyogcmVhZCBhbGwgcmVncyBhbmQgZmlsbCB0aGUgY2FjaGUgKi8KKwlyZXQgPSBhazQxMDRfZmlsbF9jYWNoZShjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcmVhZCB0aGUgJ3Jlc2VydmVkJyByZWdpc3RlciAtIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LCBpdAorCSAqIHNob3VsZCBjb250YWluIDB4NWIuIE5vdCBhIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YKKwkgKiB0aGUgZGV2aWNlLCBidXQgdGhlcmUgaXMgbm8gaGFyZHdhcmUgSUQgcmVnaXN0ZXIuICovCisJaWYgKGFrNDEwNF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0MTA0X1JFR19SRVNFUlZFRCkgIT0KKwkJCQkJIEFLNDEwNF9SRVNFUlZFRF9WQUwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCS8qIHNldCBwb3dlci11cCBhbmQgbm9uLXJlc2V0IGJpdHMgKi8KKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEpOworCXZhbCB8PSBBSzQxMDRfQ09OVFJPTDFfUFcgfCBBSzQxMDRfQ09OVFJPTDFfUlNUTjsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisKKwkvKiBlbmFibGUgdHJhbnNtaXR0ZXIgKi8KKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfVFgpOworCXZhbCB8PSBBSzQxMDRfVFhfVFhFOworCXJldCA9IGFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfVFgsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKworCWFrNDEwNF9jb2RlYyA9IGNvZGVjOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZhazQxMDRfZGFpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBEQUlcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJfQorCisJc3BpX3NldF9kcnZkYXRhKHNwaSwgYWs0MTA0KTsKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJTUEkgZGV2aWNlIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3JfZnJlZV9jb2RlYzoKKwlrZnJlZShhazQxMDQpOworCWFrNDEwNF9kYWkuZGV2ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhazQxMDRfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXQsIHZhbDsKKwlzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgKmFrNDEwNCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKCZhazQxMDQtPmNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCS8qIGNsZWFyIHBvd2VyLXVwIGFuZCBub24tcmVzZXQgYml0cyAqLworCXZhbCAmPSB+KEFLNDEwNF9DT05UUk9MMV9QVyB8IEFLNDEwNF9DT05UUk9MMV9SU1ROKTsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKCZhazQxMDQtPmNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWs0MTA0X2NvZGVjID0gTlVMTDsKKwlrZnJlZShhazQxMDQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gYWs0MTA0X2NvZGVjOworCWludCByZXQ7CisKKwkvKiBDb25uZWN0IHRoZSBjb2RlYyB0byB0aGUgc29jZGV2LiAgc25kX3NvY19uZXdfcGNtcygpIG5lZWRzIHRoaXMuICovCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOworCisJLyogUmVnaXN0ZXIgUENNcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgc29jZGV2ICovCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlyZXR1cm4gMDsKK307CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2aWNlX2FrNDEwNCA9IHsKKwkucHJvYmUgPSAJYWs0MTA0X3Byb2JlLAorCS5yZW1vdmUgPSAJYWs0MTA0X3JlbW92ZQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZpY2VfYWs0MTA0KTsKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFrNDEwNF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgID0geworCQkubmFtZSAgID0gRFJWX05BTUUsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgPSBhazQxMDRfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhazQxMDRfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhazQxMDRfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkFzYWhpIEthc2VpIEFLNDEwNCBBTFNBIFNvQyBDb2RlYyBEcml2ZXJcbiIpOworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhazQxMDRfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhazQxMDRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhazQxMDRfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWs0MTA0X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWs0MTA0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBc2FoaSBLYXNlaSBBSzQxMDQgQUxTQSBTb0MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmggYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODhmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfQUs0MTA0X0gKKyNkZWZpbmUgX0FLNDEwNF9ICisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0MTA0X2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9hazQxMDQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKaW5kZXggODEzMDBkOGQuLjFmNjNkMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYwpAQCAtMTU1LDIxICsxNTUsNiBAQAogCVNPQ19TSU5HTEUoIk1pYyBTaWRldG9uZSBWb2x1bWUiLCBBSzQ1MzVfVk9MLCA0LCA3LCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBhazQ1MzVfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWs0NTM1X3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmYWs0NTM1X3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBNb25vIDEgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhazQ1MzVfbW9ubzFfbWl4ZXJfY29udHJvbHNbXSA9IHsKIAlTT0NfREFQTV9TSU5HTEUoIk1pYyBTaWRldG9uZSBTd2l0Y2giLCBBSzQ1MzVfU0lHMSwgNCwgMSwgMCksCkBAIC0zNDQsNyArMzI5LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFrNDUzNV9wcml2ICphazQ1MzUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IG1vZGUyID0gYWs0NTM1X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQ1MzVfTU9ERTIpICYgfigweDMgPDwgNSk7CiAJaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpLCBmcyA9IDI1NjsKQEAgLTQzNiw2ICs0MjEsMTMgQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8XAogCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhazQ1MzVfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gYWs0NTM1X2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGFrNDUzNV9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gYWs0NTM1X211dGUsCisJLnNldF9zeXNjbGsJPSBhazQ1MzVfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0NTM1X2RhaSA9IHsKIAkubmFtZSA9ICJBSzQ1MzUiLAogCS5wbGF5YmFjayA9IHsKQEAgLTQ1MCwxOSArNDQyLDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBBSzQ1MzVfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gYWs0NTM1X2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBhazQ1MzVfc2V0X2RhaV9mbXQsCi0JCS5kaWdpdGFsX211dGUgPSBhazQ1MzVfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBhazQ1MzVfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJmFrNDUzNV9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFrNDUzNV9kYWkpOwogCiBzdGF0aWMgaW50IGFrNDUzNV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC00NzEsNyArNDU4LDcgQEAKIHN0YXRpYyBpbnQgYWs0NTM1X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWFrNDUzNV9zeW5jKGNvZGVjKTsKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwpOwpAQCAtNDg0LDcgKzQ3MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWs0NTM1X2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiQUs0NTM1IjsKQEAgLTUxMCw3ICs0OTcsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0JYWs0NTM1X2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFrNDUzNV9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhazQ1MzVfc25kX2NvbnRyb2xzKSk7CiAJYWs0NTM1X2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC01MzcsNyArNTI1LDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBhazQ1MzVfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNjM2LDcgKzYyNCw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFrNDUzNTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC02NjMsNyArNjUxLDcgQEAKIHN0YXRpYyBpbnQgYWs0NTM1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwppbmRleCBmMWFhMGMzLi43ZmEwOWEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKQEAgLTMsMjcgKzMsMjIgQEAKICAqCiAgKiBBdXRob3I6IFRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KLSAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzCisgKiBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqCiAgKiBUaGlzIGlzIGFuIEFTb0MgZGV2aWNlIGRyaXZlciBmb3IgdGhlIENpcnJ1cyBMb2dpYyBDUzQyNzAgY29kZWMuCiAgKgogICogQ3VycmVudCBmZWF0dXJlcy9saW1pdGF0aW9uczoKICAqCi0gKiAxKSBTb2Z0d2FyZSBtb2RlIGlzIHN1cHBvcnRlZC4gIFN0YW5kLWFsb25lIG1vZGUgaXMgYXV0b21hdGljYWxseQotICogICAgc2VsZWN0ZWQgaWYgSTJDIGlzIGRpc2FibGVkIG9yIGlmIGEgQ1M0MjcwIGlzIG5vdCBmb3VuZCBvbiB0aGUgSTJDCi0gKiAgICBidXMuICBIb3dldmVyLCBzdGFuZC1hbG9uZSBtb2RlIGlzIG9ubHkgcGFydGlhbGx5IGltcGxlbWVudGVkIGJlY2F1c2UKLSAqICAgIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSB5ZXQgZm9yIHRoaXMgZHJpdmVyIGFuZCB0aGUgbWFjaGluZSBkcml2ZXIgdG8KLSAqICAgIGNvbW11bmljYXRlIHRoZSB2YWx1ZXMgb2YgdGhlIE0wLCBNMSwgTUNMSzEsIGFuZCBNQ0xLMiBwaW5zLgotICogMikgT25seSBJMkMgaXMgc3VwcG9ydGVkLCBub3QgU1BJCi0gKiAzKSBPbmx5IE1hc3RlciBtb2RlIGlzIHN1cHBvcnRlZCwgbm90IFNsYXZlLgotICogNCkgVGhlIG1hY2hpbmUgZHJpdmVyJ3MgJ3N0YXJ0dXAnIGZ1bmN0aW9uIG11c3QgY2FsbAotICogICAgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgd2l0aCB0aGUgdmFsdWUgb2YgTUNMSy4KLSAqIDUpIE9ubHkgSTJTIGFuZCBsZWZ0LWp1c3RpZmllZCBtb2RlcyBhcmUgc3VwcG9ydGVkCi0gKiA2KSBQb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBzdXBwb3J0ZWQKLSAqIDcpIFRoZSBvbmx5IHN1cHBvcnRlZCBjb250cm9sIGlzIHZvbHVtZSBhbmQgaGFyZHdhcmUgbXV0ZSAoaWYgZW5hYmxlZCkKKyAqIC0gU29mdHdhcmUgbW9kZSBpcyBzdXBwb3J0ZWQuICBTdGFuZC1hbG9uZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQuCisgKiAtIE9ubHkgSTJDIGlzIHN1cHBvcnRlZCwgbm90IFNQSQorICogLSBTdXBwb3J0IGZvciBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUKKyAqIC0gVGhlIG1hY2hpbmUgZHJpdmVyJ3MgJ3N0YXJ0dXAnIGZ1bmN0aW9uIG11c3QgY2FsbAorICogICBjczQyNzBfc2V0X2RhaV9zeXNjbGsoKSB3aXRoIHRoZSB2YWx1ZSBvZiBNQ0xLLgorICogLSBPbmx5IEkyUyBhbmQgbGVmdC1qdXN0aWZpZWQgbW9kZXMgYXJlIHN1cHBvcnRlZAorICogLSBQb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBzdXBwb3J0ZWQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zNSwxOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiY3M0MjcwLmgiCiAKLS8qIElmIEkyQyBpcyBkZWZpbmVkLCB0aGVuIHdlIHN1cHBvcnQgc29mdHdhcmUgbW9kZS4gIEhvd2V2ZXIsIGlmIHdlJ3JlCi0gICBub3QgY29tcGlsZWQgYXMgbW9kdWxlIGJ1dCBJMkMgaXMsIHRoZW4gd2UgY2FuJ3QgdXNlIEkyQyBjYWxscy4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi0jZGVmaW5lIFVTRV9JMkMKLSNlbmRpZgotCi0vKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBDUzQyNzAgKi8KLXN0cnVjdCBjczQyNzBfcHJpdmF0ZSB7Ci0JdW5zaWduZWQgaW50IG1jbGs7IC8qIElucHV0IGZyZXF1ZW5jeSBvZiB0aGUgTUNMSyBwaW4gKi8KLQl1bnNpZ25lZCBpbnQgbW9kZTsgLyogVGhlIG1vZGUgKEkyUyBvciBsZWZ0LWp1c3RpZmllZCkgKi8KLX07Ci0KIC8qCiAgKiBUaGUgY29kZWMgaXNuJ3QgcmVhbGx5IGJpZy1lbmRpYW4gb3IgbGl0dGxlLWVuZGlhbiwgc2luY2UgdGhlIEkyUwogICogaW50ZXJmYWNlIHJlcXVpcmVzIGRhdGEgdG8gYmUgc2VudCBzZXJpYWxseSB3aXRoIHRoZSBNU2JpdCBmaXJzdC4KQEAgLTYwLDggKzQzLDYgQEAKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0XzNCRSB8IFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFICB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0JFKQogCi0jaWZkZWYgVVNFX0kyQwotCiAvKiBDUzQyNzAgcmVnaXN0ZXJzIGFkZHJlc3NlcyAqLwogI2RlZmluZSBDUzQyNzBfQ0hJUElECTB4MDEJLyogQ2hpcCBJRCAqLwogI2RlZmluZSBDUzQyNzBfUFdSQ1RMCTB4MDIJLyogUG93ZXIgQ29udHJvbCAqLwpAQCAtMTIxLDggKzEwMiwyMiBAQAogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQQkweDAxCiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19CCTB4MDIKIAotLyoKLSAqIENsb2NrIFJhdGlvIFNlbGVjdGlvbiBmb3IgTWFzdGVyIE1vZGUgd2l0aCBJMkMgZW5hYmxlZAorLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgQ1M0MjcwICovCitzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXU4IHJlZ19jYWNoZVtDUzQyNzBfTlVNUkVHU107CisJdW5zaWduZWQgaW50IG1jbGs7IC8qIElucHV0IGZyZXF1ZW5jeSBvZiB0aGUgTUNMSyBwaW4gKi8KKwl1bnNpZ25lZCBpbnQgbW9kZTsgLyogVGhlIG1vZGUgKEkyUyBvciBsZWZ0LWp1c3RpZmllZCkgKi8KKwl1bnNpZ25lZCBpbnQgc2xhdmVfbW9kZTsKK307CisKKy8qKgorICogc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyAtIGNsb2NrIHJhdGlvIHRhYmxlcworICogQHJhdGlvOiB0aGUgcmF0aW8gb2YgTUNMSyB0byB0aGUgc2FtcGxlIHJhdGUKKyAqIEBzcGVlZF9tb2RlOiB0aGUgU3BlZWQgTW9kZSBiaXRzIHRvIHNldCBpbiB0aGUgTW9kZSBDb250cm9sIHJlZ2lzdGVyIGZvcgorICogICAgICAgICAgICAgIHRoaXMgcmF0aW8KKyAqIEBtY2xrOiB0aGUgUmF0aW8gU2VsZWN0IGJpdHMgdG8gc2V0IGluIHRoZSBNb2RlIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoaXMKKyAqICAgICAgICByYXRpbwogICoKICAqIFRoZSBkYXRhIGZvciB0aGlzIGNoYXJ0IGlzIHRha2VuIGZyb20gVGFibGUgNSBvZiB0aGUgQ1M0MjcwIHJlZmVyZW5jZQogICogbWFudWFsLgpAQCAtMTMxLDMxICsxMjYsMzAgQEAKICAqIEl0IGlzIGFsc28gdXNlZCBieSBjczQyNzBfc2V0X2RhaV9zeXNjbGsoKSB0byB0ZWxsIEFMU0Egd2hpY2ggc2FtcGxpbmcKICAqIHJhdGVzIHRoZSBDUzQyNzAgY3VycmVudGx5IHN1cHBvcnRzLgogICoKLSAqIEVhY2ggZWxlbWVudCBpbiB0aGlzIGFycmF5IGNvcnJlc3BvbmRzIHRvIHRoZSByYXRpb3MgaW4gbWNsa19yYXRpb3NbXS4KLSAqIFRoZXNlIHR3byBhcnJheXMgbmVlZCB0byBiZSBpbiBzeW5jLgotICoKLSAqICdzcGVlZF9tb2RlJyBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3cml0dGVuIHRvIHRoZQorICogQHNwZWVkX21vZGUgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd3JpdHRlbiB0byB0aGUKICAqIE1PREUgYml0cyBvZiB0aGUgTW9kZSBDb250cm9sIFJlZ2lzdGVyCiAgKgotICogJ21jbGsnIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdpcnRlbiB0byB0aGUgTUNMSyBiaXRzIG9mCisgKiBAbWNsayBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3aXJ0ZW4gdG8gdGhlIE1DTEsgYml0cyBvZgogICogdGhlIE1vZGUgQ29udHJvbCBSZWdpc3Rlci4KICAqCiAgKiBJbiBzaXR1YXRpb25zIHdoZXJlIGEgc2luZ2xlIHJhdGlvIGlzIHJlcHJlc2VudGVkIGJ5IG11bHRpcGxlIHNwZWVkCiAgKiBtb2Rlcywgd2UgZmF2b3IgdGhlIHNsb3dlc3Qgc3BlZWQuICBFLmcsIGZvciBhIHJhdGlvIG9mIDEyOCwgd2UgcGljawogICogZG91YmxlLXNwZWVkIGluc3RlYWQgb2YgcXVhZC1zcGVlZC4gIEhvd2V2ZXIsIHRoZSBDUzQyNzAgZXJyYXRhIHN0YXRlcwotICogdGhhdCBEaXZpZGUtQnktMS41IGNhbiBjYXVzZSBmYWlsdXJlcywgc28gd2UgYXZvaWQgdGhhdCBtb2RlIHdoZXJlCisgKiB0aGF0IGRpdmlkZS1CeS0xLjUgY2FuIGNhdXNlIGZhaWx1cmVzLCBzbyB3ZSBhdm9pZCB0aGF0IG1vZGUgd2hlcmUKICAqIHBvc3NpYmxlLgogICoKLSAqIEVSUkFUQTogVGhlcmUgaXMgYW4gZXJyYXRhIGZvciB0aGUgQ1M0MjcwIHdoZXJlIGRpdmlkZS1ieS0xLjUgZG9lcyBub3QKLSAqIHdvcmsgaWYgVkQgPSAzLjNWLiAgSWYgdGhpcyBlZmZlY3RzIHlvdSwgc2VsZWN0IHRoZQorICogRXJyYXRhOiBUaGVyZSBpcyBhbiBlcnJhdGEgZm9yIHRoZSBDUzQyNzAgd2hlcmUgZGl2aWRlLWJ5LTEuNSBkb2VzIG5vdAorICogd29yayBpZiBWZCBpcyAzLjNWLiAgSWYgdGhpcyBlZmZlY3RzIHlvdSwgc2VsZWN0IHRoZQogICogQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBIEtjb25maWcgb3B0aW9uLCBhbmQgdGhlIGRyaXZlciB3aWxsCiAgKiBuZXZlciBzZWxlY3QgYW55IHNhbXBsZSByYXRlcyB0aGF0IHJlcXVpcmUgZGl2aWRlLWJ5LTEuNS4KICAqLwotc3RhdGljIHN0cnVjdCB7CitzdHJ1Y3QgY3M0MjcwX21vZGVfcmF0aW9zIHsKIAl1bnNpZ25lZCBpbnQgcmF0aW87CiAJdTggc3BlZWRfbW9kZTsKIAl1OCBtY2xrOwotfSBjczQyNzBfbW9kZV9yYXRpb3NbXSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3M0MjcwX21vZGVfcmF0aW9zIGNzNDI3MF9tb2RlX3JhdGlvc1tdID0gewogCXs2NCwgQ1M0MjcwX01PREVfNFgsIENTNDI3MF9NT0RFX0RJVjF9LAogI2lmbmRlZiBDT05GSUdfU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEEKIAl7OTYsIENTNDI3MF9NT0RFXzRYLCBDUzQyNzBfTU9ERV9ESVYxNX0sCkBAIC0xNzIsMzQgKzE2NiwyNyBAQAogLyogVGhlIG51bWJlciBvZiBNQ0xLL0xSQ0sgcmF0aW9zIHN1cHBvcnRlZCBieSB0aGUgQ1M0MjcwICovCiAjZGVmaW5lIE5VTV9NQ0xLX1JBVElPUwkJQVJSQVlfU0laRShjczQyNzBfbW9kZV9yYXRpb3MpCiAKLS8qCi0gKiBEZXRlcm1pbmUgdGhlIENTNDI3MCBzYW1wbGVzIHJhdGVzLgorLyoqCisgKiBjczQyNzBfc2V0X2RhaV9zeXNjbGsgLSBkZXRlcm1pbmUgdGhlIENTNDI3MCBzYW1wbGVzIHJhdGVzLgorICogQGNvZGVjX2RhaTogdGhlIGNvZGVjIERBSQorICogQGNsa19pZDogdGhlIGNsb2NrIElEIChpZ25vcmVkKQorICogQGZyZXE6IHRoZSBNQ0xLIGlucHV0IGZyZXF1ZW5jeQorICogQGRpcjogdGhlIGNsb2NrIGRpcmVjdGlvbiAoaWdub3JlZCkKICAqCi0gKiAnZnJlcScgaXMgdGhlIGlucHV0IGZyZXF1ZW5jeSB0byBNQ0xLLiAgVGhlIG90aGVyIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUgY29kZWMgZHJpdmVyIHdoYXQgdGhlIGlucHV0IE1DTEsKKyAqIGZyZXF1ZW5jeSBpcy4KICAqCiAgKiBUaGUgdmFsdWUgb2YgTUNMSyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBzYW1wbGUgcmF0ZXMgYXJlIHN1cHBvcnRlZAogICogYnkgdGhlIENTNDI3MC4gIFRoZSByYXRpbyBvZiBNQ0xLIC8gRnMgbXVzdCBiZSBlcXVhbCB0byBvbmUgb2YgbmluZQotICogc3VwcG9ydCB2YWx1ZXM6IDY0LCA5NiwgMTI4LCAxOTIsIDI1NiwgMzg0LCA1MTIsIDc2OCwgYW5kIDEwMjQuCisgKiBzdXBwb3J0ZWQgdmFsdWVzIC0gNjQsIDk2LCAxMjgsIDE5MiwgMjU2LCAzODQsIDUxMiwgNzY4LCBhbmQgMTAyNC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG5pbmUgcmF0aW9zIGFuZCBkZXRlcm1pbmVzIHdoaWNoIG9uZXMgbWF0Y2gKICAqIGEgc3RhbmRhcmQgc2FtcGxlIHJhdGUuICBJZiB0aGVyZSdzIGEgbWF0Y2gsIHRoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIGxpc3QKLSAqIG9mIHN1cHBvcnQgc2FtcGxlIHJhdGVzLgorICogb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IHRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiwKICAqIG90aGVyd2lzZSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgc2FtcGxlIHJhdGVzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbgogICogdGltZSBmb3IgQUxTQS4KLSAqCi0gKiBOb3RlIHRoYXQgaW4gc3RhbmQtYWxvbmUgbW9kZSwgdGhlIHNhbXBsZSByYXRlIGlzIGRldGVybWluZWQgYnkgaW5wdXQKLSAqIHBpbnMgTTAsIE0xLCBNRElWMSwgYW5kIE1ESVYyLiAgQWxzbyBpbiBzdGFuZC1hbG9uZSBtb2RlLCBkaXZpZGUtYnktMwotICogaXMgbm90IGEgcHJvZ3JhbW1hYmxlIG9wdGlvbi4gIEhvd2V2ZXIsIGRpdmlkZS1ieS0zIGlzIG5vdCBhbiBhdmFpbGFibGUKLSAqIG9wdGlvbiBpbiBzdGFuZC1hbG9uZSBtb2RlLiAgVGhpcyBjYXNlcyB0d28gcHJvYmxlbXM6IGEgcmF0aW8gb2YgNzY4IGlzCi0gKiBub3QgYXZhaWxhYmxlIChpdCByZXF1aXJlcyBkaXZpZGUtYnktMykgYW5kIEIpIHJhdGlvcyAxOTIgYW5kIDM4NCBjYW4KLSAqIG9ubHkgYmUgc2VsZWN0ZWQgd2l0aCBkaXZpZGUtYnktMS41LCBidXQgdGhlcmUgaXMgYW4gZXJyYXRlIHRoYXQgbWFrZQotICogdGhpcyBzZWxlY3Rpb24gZGlmZmljdWx0LgotICoKLSAqIEluIGFkZGl0aW9uLCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgbWFjaGluZQotICogZHJpdmVyIHdoYXQgdGhlIGlucHV0IHNldHRpbmdzIGNhbiBiZS4gIFRoaXMgd291bGQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZAotICogZm9yIHN0YW5kLWFsb25lIG1vZGUgdG8gd29yay4KICAqLwogc3RhdGljIGludCBjczQyNzBfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCiAJCQkJIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQpAQCAtMjI1LDcgKzIxMiw3IEBACiAJcmF0ZXMgJj0gflNORFJWX1BDTV9SQVRFX0tOT1Q7CiAKIAlpZiAoIXJhdGVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjQwLDggKzIyNywxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogQ29uZmlndXJlIHRoZSBjb2RlYyBmb3IgdGhlIHNlbGVjdGVkIGF1ZGlvIGZvcm1hdAorLyoqCisgKiBjczQyNzBfc2V0X2RhaV9mbXQgLSBjb25maWd1cmUgdGhlIGNvZGVjIGZvciB0aGUgc2VsZWN0ZWQgYXVkaW8gZm9ybWF0CisgKiBAY29kZWNfZGFpOiB0aGUgY29kZWMgREFJCisgKiBAZm9ybWF0OiBhIFNORF9TT0NfREFJRk1UX3ggdmFsdWUgaW5kaWNhdGluZyB0aGUgZGF0YSBmb3JtYXQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgYml0bWFzayBvZiBTTkRfU09DX0RBSUZNVF94IGJpdHMgYW5kIHByb2dyYW1zIHRoZQogICogY29kZWMgYWNjb3JkaW5nbHkuCkBAIC0yNTgsMzIgKzI0Nyw0MyBAQAogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAorCS8qIHNldCBEQUkgZm9ybWF0ICovCiAJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgogCQljczQyNzAtPm1vZGUgPSBmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGludmFsaWQgREFJIGZvcm1hdFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImludmFsaWQgZGFpIGZvcm1hdFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQljczQyNzAtPnNsYXZlX21vZGUgPSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWNzNDI3MC0+c2xhdmVfbW9kZSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGFsbCBvdGhlciBtb2RlcyBhcmUgdW5zdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlICovCiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIEEgbGlzdCBvZiBhZGRyZXNzZXMgb24gd2hpY2ggdGhpcyBDUzQyNzAgY291bGQgdXNlLiAgSTJDIGFkZHJlc3NlcyBhcmUKLSAqIDcgYml0cy4gIEZvciB0aGUgQ1M0MjcwLCB0aGUgdXBwZXIgZm91ciBiaXRzIGFyZSBhbHdheXMgMTAwMSwgYW5kIHRoZQotICogbG93ZXIgdGhyZWUgYml0cyBhcmUgZGV0ZXJtaW5lZCB2aWEgdGhlIEFEMiwgQUQxLCBhbmQgQUQwIHBpbnMKLSAqIChyZXNwZWN0aXZlbHkpLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4NDgsIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIEkyQ19DTElFTlRfRU5ECi19OwotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLS8qCi0gKiBQcmUtZmlsbCB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorLyoqCisgKiBjczQyNzBfZmlsbF9jYWNoZSAtIHByZS1maWxsIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisgKiBAY29kZWM6IHRoZSBjb2RlYyBmb3IgdGhpcyBDUzQyNzAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUgYnkgcmVhZGluZyB0aGUgcmVnaXN0ZXIKKyAqIHZhbHVlcyBmcm9tIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBUaGlzIENTNDI3MCByZWdpc3RlcnMgYXJlIGNhY2hlZCB0byBhdm9pZCBleGNlc3NpdmUgSTJDIEkvTyBvcGVyYXRpb25zLgorICogQWZ0ZXIgdGhlIGluaXRpYWwgcmVhZCB0byBwcmUtZmlsbCB0aGUgY2FjaGUsIHRoZSBDUzQyNzAgbmV2ZXIgdXBkYXRlcworICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVyZW5jeSBwcm9ibGVtLgogICoKICAqIFdlIHVzZSB0aGUgYXV0by1pbmNyZW1lbnQgZmVhdHVyZSBvZiB0aGUgQ1M0MjcwIHRvIHJlYWQgYWxsIHJlZ2lzdGVycyBpbgogICogb25lIHNob3QuCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJQ1M0MjcwX0ZJUlNUUkVHIHwgMHg4MCwgQ1M0MjcwX05VTVJFR1MsIGNhY2hlKTsKIAogCWlmIChsZW5ndGggIT0gQ1M0MjcwX05VTVJFR1MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyByZWFkIGZhaWx1cmUsIGFkZHI9MHgleFxuIiwKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHJlYWQgZmFpbHVyZSwgYWRkcj0weCV4XG4iLAogCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTMwNiwxMiArMzA2LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBSZWFkIGZyb20gdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKy8qKgorICogY3M0MjcwX3JlYWRfcmVnX2NhY2hlIC0gcmVhZCBmcm9tIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisgKiBAY29kZWM6IHRoZSBjb2RlYyBmb3IgdGhpcyBDUzQyNzAKKyAqIEByZWc6IHRoZSByZWdpc3RlciB0byByZWFkCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByZWdpc3Rlci4gIEl0IHJlYWRzIG9ubHkgZnJvbQorICogdGhlIHJlZ2lzdGVyIGNhY2hlLCBub3QgdGhlIGhhcmR3YXJlIGl0c2VsZi4KICAqCiAgKiBUaGlzIENTNDI3MCByZWdpc3RlcnMgYXJlIGNhY2hlZCB0byBhdm9pZCBleGNlc3NpdmUgSTJDIEkvTyBvcGVyYXRpb25zLgogICogQWZ0ZXIgdGhlIGluaXRpYWwgcmVhZCB0byBwcmUtZmlsbCB0aGUgY2FjaGUsIHRoZSBDUzQyNzAgbmV2ZXIgdXBkYXRlcwotICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVybmN5IHByb2JsZW0uCisgKiB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBzbyB3ZSB3b24ndCBoYXZlIGEgY2FjaGUgY29oZXJlbmN5IHByb2JsZW0uCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M0MjcwX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgcmVnKQpAQCAtMzI0LDggKzMyOSwxMSBAQAogCXJldHVybiBjYWNoZVtyZWcgLSBDUzQyNzBfRklSU1RSRUddOwogfQogCi0vKgotICogV3JpdGUgdG8gYSBDUzQyNzAgcmVnaXN0ZXIgdmlhIHRoZSBJMkMgYnVzLgorLyoqCisgKiBjczQyNzBfaTJjX3dyaXRlIC0gd3JpdGUgdG8gYSBDUzQyNzAgcmVnaXN0ZXIgdmlhIHRoZSBJMkMgYnVzLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlcgogICoKICAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZ2l2ZW4gQ1M0MjcwIHJlZ2lzdGVyLCBhbmQKICAqIGFsc28gdXBkYXRlcyB0aGUgcmVnaXN0ZXIgY2FjaGUuCkBAIC0zNDYsNyArMzU0LDcgQEAKIAlpZiAoY2FjaGVbcmVnIC0gQ1M0MjcwX0ZJUlNUUkVHXSAhPSB2YWx1ZSkgewogCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC0zNTcsMTEgKzM2NSwxNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUHJvZ3JhbSB0aGUgQ1M0MjcwIHdpdGggdGhlIGdpdmVuIGhhcmR3YXJlIHBhcmFtZXRlcnMuCisvKioKKyAqIGNzNDI3MF9od19wYXJhbXMgLSBwcm9ncmFtIHRoZSBDUzQyNzAgd2l0aCB0aGUgZ2l2ZW4gaGFyZHdhcmUgcGFyYW1ldGVycy4KKyAqIEBzdWJzdHJlYW06IHRoZSBhdWRpbyBzdHJlYW0KKyAqIEBwYXJhbXM6IHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIHRvIHNldAorICogQGRhaTogdGhlIFNPQyBEQUkgKGlnbm9yZWQpCiAgKgotICogVGhlIC5vcHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHByb3ZpZGUgYm9hcmQtc3BlY2lmaWMgZGF0YSwgbGlrZQotICogaW5wdXQgZnJlcXVlbmNpZXMsIHRvIHRoaXMgZHJpdmVyLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGF0IGluZm9ybWF0aW9uLAorICogVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgdmFsdWVzIHByb3ZpZGVkLgorICogU3BlY2lmaWNhbGx5LCB0aGUgc2FtcGxlIHJhdGUgYW5kIHRoZSBkYXRhIGZvcm1hdC4KKyAqCisgKiBUaGUgLm9wcyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyBkYXRhLCBsaWtlIGlucHV0CisgKiBmcmVxdWVuY2llcywgdG8gdGhpcyBkcml2ZXIuICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoYXQgaW5mb3JtYXRpb24sCiAgKiBjb21iaW5lcyBpdCB3aXRoIHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIHByb3ZpZGVkLCBhbmQgcHJvZ3JhbXMgdGhlCiAgKiBoYXJkd2FyZSBhY2NvcmRpbmdseS4KICAqLwpAQCAtMzcxLDcgKzM4NSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBpOwpAQCAtMzkxLDMzICs0MDUsMjggQEAKIAogCWlmIChpID09IE5VTV9NQ0xLX1JBVElPUykgewogCQkvKiBXZSBkaWQgbm90IGZpbmQgYSBtYXRjaGluZyByYXRpbyAqLwotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGZpbmQgbWF0Y2hpbmcgcmF0aW9cbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBtYXRjaGluZyByYXRpb1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEZyZWV6ZSBhbmQgcG93ZXItZG93biB0aGUgY29kZWMgKi8KLQotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIENTNDI3MF9QV1JDVExfRlJFRVpFIHwKLQkJCSAgICBDUzQyNzBfUFdSQ1RMX1BETl9BREMgfCBDUzQyNzBfUFdSQ1RMX1BETl9EQUMgfAotCQkJICAgIENTNDI3MF9QV1JDVExfUEROKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUHJvZ3JhbSB0aGUgbW9kZSBjb250cm9sIHJlZ2lzdGVyICovCisJLyogU2V0IHRoZSBzYW1wbGUgcmF0ZSAqLwogCiAJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTU9ERSk7CiAJcmVnICY9IH4oQ1M0MjcwX01PREVfU1BFRURfTUFTSyB8IENTNDI3MF9NT0RFX0RJVl9NQVNLKTsKLQlyZWcgfD0gY3M0MjcwX21vZGVfcmF0aW9zW2ldLnNwZWVkX21vZGUgfCBjczQyNzBfbW9kZV9yYXRpb3NbaV0ubWNsazsKKwlyZWcgfD0gY3M0MjcwX21vZGVfcmF0aW9zW2ldLm1jbGs7CisKKwlpZiAoY3M0MjcwLT5zbGF2ZV9tb2RlKQorCQlyZWcgfD0gQ1M0MjcwX01PREVfU0xBVkU7CisJZWxzZQorCQlyZWcgfD0gY3M0MjcwX21vZGVfcmF0aW9zW2ldLnNwZWVkX21vZGU7CiAKIAlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfTU9ERSwgcmVnKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFByb2dyYW0gdGhlIGZvcm1hdCByZWdpc3RlciAqLworCS8qIFNldCB0aGUgREFJIGZvcm1hdCAqLwogCiAJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfRk9STUFUKTsKIAlyZWcgJj0gfihDUzQyNzBfRk9STUFUX0RBQ19NQVNLIHwgQ1M0MjcwX0ZPUk1BVF9BRENfTUFTSyk7CkBAIC00MzAsNTUgKzQzOSwyMyBAQAogCQlyZWcgfD0gQ1M0MjcwX0ZPUk1BVF9EQUNfTEogfCBDUzQyNzBfRk9STUFUX0FEQ19MSjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IHVua25vd24gZm9ybWF0XG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5rbm93biBkYWkgZm9ybWF0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX0ZPUk1BVCwgcmVnKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogRGlzYWJsZSBhdXRvLW11dGUuICBUaGlzIGZlYXR1cmUgYXBwZWFycyB0byBiZSBidWdneSwgYmVjYXVzZSBpbgotCSAgIHNvbWUgc2l0dWF0aW9ucywgYXV0by1tdXRlIHdpbGwgbm90IGRlYWN0aXZhdGUgd2hlbiBpdCBzaG91bGQuICovCi0KLQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9NVVRFKTsKLQlyZWcgJj0gfkNTNDI3MF9NVVRFX0FVVE87Ci0JcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX01VVEUsIHJlZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIERpc2FibGUgYXV0b21hdGljIHZvbHVtZSBjb250cm9sLiAgSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZAotCSAqIGl0IGNhdXNlcyB2b2x1bWUgY2hhbmdlIGNvbW1hbmRzIHRvIGJlIGRlbGF5ZWQsIHNvbWV0aW1lcyB1bnRpbAotCSAqIGFmdGVyIHBsYXliYWNrIGhhcyBzdGFydGVkLgotCSAqLwotCi0JcmVnID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBDUzQyNzBfVFJBTlMpOwotCXJlZyAmPSB+KENTNDI3MF9UUkFOU19TT0ZUIHwgQ1M0MjcwX1RSQU5TX1pFUk8pOwotCXJldCA9IGNzNDI3MF9pMmNfd3JpdGUoY29kZWMsIENTNDI3MF9UUkFOUywgcmVnKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFRoYXcgYW5kIHBvd2VyLXVwIHRoZSBjb2RlYyAqLwotCi0JcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX0hXTVVURQotCi0vKgotICogU2V0IHRoZSBDUzQyNzAgZXh0ZXJuYWwgbXV0ZQorLyoqCisgKiBjczQyNzBfbXV0ZSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBDUzQyNzAgZXh0ZXJuYWwgbXV0ZQorICogQGRhaTogdGhlIFNPQyBEQUkKKyAqIEBtdXRlOiAwID0gZGlzYWJsZSBtdXRlLCAxID0gZW5hYmxlIG11dGUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRvZ2dsZXMgdGhlIG11dGUgYml0cyBpbiB0aGUgTVVURSByZWdpc3Rlci4gIFRoZSBDUzQyNzAncwogICogbXV0ZSBjYXBhYmlsaXR5IGlzIGludGVuZGVkIGZvciBleHRlcm5hbCBtdXRpbmcgY2lyY3VpdHJ5LCBzbyBpZiB0aGUKQEAgLTQ5MywxNTAgKzQ3MCw0NyBAQAogCXJlZzYgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9NVVRFKTsKIAogCWlmIChtdXRlKQotCQlyZWc2IHw9IENTNDI3MF9NVVRFX0FEQ19BIHwgQ1M0MjcwX01VVEVfQURDX0IgfAotCQkJQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQjsKKwkJcmVnNiB8PSBDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19COwogCWVsc2UKLQkJcmVnNiAmPSB+KENTNDI3MF9NVVRFX0FEQ19BIHwgQ1M0MjcwX01VVEVfQURDX0IgfAotCQkJICBDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19CKTsKKwkJcmVnNiAmPSB+KENTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0IpOwogCiAJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWc2KTsKIH0KIAotI2VuZGlmCi0KLXN0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqKTsKLQogLyogQSBsaXN0IG9mIG5vbi1EQVBNIGNvbnRyb2xzIHRoYXQgdGhlIENTNDI3MCBzdXBwb3J0cyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNzNDI3MF9zbmRfY29udHJvbHNbXSA9IHsKIAlTT0NfRE9VQkxFX1IoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAotCQlDUzQyNzBfVk9MQSwgQ1M0MjcwX1ZPTEIsIDAsIDB4RkYsIDEpCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgY3M0MjcwX2lkW10gPSB7Ci0JeyJjczQyNzAiLCAwfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBjczQyNzBfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3M0MjcwX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiQ1M0MjcwIEkyQyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLmlkX3RhYmxlID0gY3M0MjcwX2lkLAotCS5wcm9iZSA9IGNzNDI3MF9pMmNfcHJvYmUsCisJCUNTNDI3MF9WT0xBLCBDUzQyNzBfVk9MQiwgMCwgMHhGRiwgMSksCisJU09DX1NJTkdMRSgiRGlnaXRhbCBTaWRldG9uZSBTd2l0Y2giLCBDUzQyNzBfRk9STUFULCA1LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJTb2Z0IFJhbXAgU3dpdGNoIiwgQ1M0MjcwX1RSQU5TLCA2LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJaZXJvIENyb3NzIFN3aXRjaCIsIENTNDI3MF9UUkFOUywgNSwgMSwgMCksCisJU09DX1NJTkdMRSgiUG9wZ3VhcmQgU3dpdGNoIiwgQ1M0MjcwX01PREUsIDAsIDEsIDEpLAorCVNPQ19TSU5HTEUoIkF1dG8tTXV0ZSBTd2l0Y2giLCBDUzQyNzBfTVVURSwgNSwgMSwgMCksCisJU09DX0RPVUJMRSgiTWFzdGVyIENhcHR1cmUgU3dpdGNoIiwgQ1M0MjcwX01VVEUsIDMsIDQsIDEsIDApCiB9OwogCiAvKgotICogR2xvYmFsIHZhcmlhYmxlIHRvIHN0b3JlIHNvY2RldiBmb3IgaTJjIHByb2JlIGZ1bmN0aW9uLgorICogY3M0MjcwX2NvZGVjIC0gZ2xvYmFsIHZhcmlhYmxlIHRvIHN0b3JlIGNvZGVjIGZvciB0aGUgQVNvQyBwcm9iZSBmdW5jdGlvbgogICoKICAqIElmIHN0cnVjdCBpMmNfZHJpdmVyIGhhZCBhIHByaXZhdGVfZGF0YSBmaWVsZCwgd2Ugd291bGRuJ3QgbmVlZCB0byB1c2UKLSAqIGNzNDI3MF9zb2NkZWMuICBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBwYXNzIHRoZSBzb2NkZXYgc3RydWN0dXJlIHRvCi0gKiBjczQyNzBfaTJjX3Byb2JlKCkuCi0gKgotICogVGhlIHJlYWwgc29sdXRpb24gdG8gY3M0MjcwX3NvY2RldiBpcyB0byBjcmVhdGUgYSBtZWNoYW5pc20KLSAqIHRoYXQgbWFwcyBJMkMgYWRkcmVzc2VzIHRvIHNuZF9zb2NfZGV2aWNlIHN0cnVjdHVyZXMuICBQZXJoYXBzIHRoZQotICogY3JlYXRpb24gb2YgdGhlIHNuZF9zb2NfZGV2aWNlIG9iamVjdCBzaG91bGQgYmUgbW92ZWQgb3V0IG9mCi0gKiBjczQyNzBfcHJvYmUoKSBhbmQgaW50byBjczQyNzBfaTJjX3Byb2JlKCksIGJ1dCB0aGF0IHdvdWxkIG1ha2UgdGhpcwotICogZHJpdmVyIGRlcGVuZGVudCBvbiBJMkMuICBUaGUgQ1M0MjcwIHN1cHBvcnRzICJzdGFuZC1hbG9uZSIgbW9kZSwgd2hlcmVieQotICogdGhlIGNoaXAgaXMgKm5vdCogY29ubmVjdGVkIHRvIHRoZSBJMkMgYnVzLCBidXQgaXMgaW5zdGVhZCBjb25maWd1cmVkIHZpYQotICogaW5wdXQgcGlucy4KKyAqIGNzNDI3MF9jb2RlYy4gIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHBhc3MgdGhlIGNvZGVjIHN0cnVjdHVyZSBmcm9tCisgKiBjczQyNzBfaTJjX3Byb2JlKCkgdG8gY3M0MjcwX3Byb2JlKCkuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBnb29kCisgKiB3YXkgdG8gc3luY2hyb25pemUgdGhlc2UgdHdvIGZ1bmN0aW9ucy4gIGNzNDI3MF9pMmNfcHJvYmUoKSBjYW4gYmUgY2FsbGVkCisgKiBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgY3M0MjcwX3Byb2JlKCkgaXMgY2FsbGVkIGV2ZW4gb25jZS4gIFNvIGZvciBub3csIHdlCisgKiBhbHNvIG9ubHkgYWxsb3cgY3M0MjcwX2kyY19wcm9iZSgpIHRvIGJlIHJ1biBvbmNlLiAgVGhhdCBtZWFucyB0aGF0IHdlIGRvCisgKiBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIGNzNDI3MCBkZXZpY2UgaW4gdGhlIHN5c3RlbSwgYXQgbGVhc3QgZm9yIG5vdy4KICAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqY3M0MjcwX3NvY2RldjsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY3M0MjcwX2NvZGVjOwogCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgSTJDIGludGVyZmFjZSBvZiB0aGUgQ1M0MjcwCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHdoZW5ldmVyIHRoZSBJMkMgc3Vic3lzdGVtIGZpbmRzIGEgZGV2aWNlCi0gKiBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcy4KLSAqCi0gKiBOb3RlOiBzbmRfc29jX25ld19wY21zKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCwKLSAqIGJlY2F1c2Ugb2Ygc25kX2N0bF9hZGQoKS4KLSAqLwotc3RhdGljIGludCBjczQyNzBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50LAotCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNzNDI3MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgaTsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIFByb2JpbmcgYWxsIHBvc3NpYmxlIGFkZHJlc3NlcyBoYXMgb25lIGRyYXdiYWNrOiBpZiB0aGVyZSBhcmUKLQkgICBtdWx0aXBsZSBDUzQyNzBzIG9uIHRoZSBidXMsIHRoZW4geW91IGNhbm5vdCBzcGVjaWZ5IHdoaWNoCi0JICAgc29jZGV2IGlzIG1hdGNoZWQgd2l0aCB3aGljaCBDUzQyNzAuICBGb3Igbm93LCB3ZSBqdXN0IHJlamVjdAotCSAgIHRoaXMgSTJDIGRldmljZSBpZiB0aGUgc29jZGV2IGFscmVhZHkgaGFzIG9uZSBhdHRhY2hlZC4gKi8KLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBOb3RlOiBjb2RlY19kYWktPmNvZGVjIGlzIE5VTEwgaGVyZSAqLwotCi0JY29kZWMtPnJlZ19jYWNoZSA9IGt6YWxsb2MoQ1M0MjcwX05VTVJFR1MsIEdGUF9LRVJORUwpOwotCWlmICghY29kZWMtPnJlZ19jYWNoZSkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGFsbG9jYXRlIHJlZ2lzdGVyIGNhY2hlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgQ1M0MjcwICovCi0KLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaTJjX2NsaWVudCwgQ1M0MjcwX0NISVBJRCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byByZWFkIEkyQ1xuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFRoZSB0b3AgZm91ciBiaXRzIG9mIHRoZSBjaGlwIElEIHNob3VsZCBiZSAxMTAwLiAqLwotCWlmICgocmV0ICYgMHhGMCkgIT0gMHhDMCkgewotCQkvKiBUaGUgZGV2aWNlIGF0IHRoaXMgYWRkcmVzcyBpcyBub3QgYSBDUzQyNzAgY29kZWMgKi8KLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJjczQyNzA6IGZvdW5kIGRldmljZSBhdCBJMkMgYWRkcmVzcyAlWFxuIiwKLQkJaTJjX2NsaWVudC0+YWRkcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBoYXJkd2FyZSByZXZpc2lvbiAlWFxuIiwgcmV0ICYgMHhGKTsKLQotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmNfY2xpZW50OwotCWNvZGVjLT5yZWFkID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IGNzNDI3MF9pMmNfd3JpdGU7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQ1M0MjcwX05VTVJFR1M7Ci0KLQkvKiBUaGUgSTJDIGludGVyZmFjZSBpcyBzZXQgdXAsIHNvIHByZS1maWxsIG91ciByZWdpc3RlciBjYWNoZSAqLwotCi0JcmV0ID0gY3M0MjcwX2ZpbGxfY2FjaGUoY29kZWMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogQWRkIHRoZSBub24tREFQTSBjb250cm9scyAqLwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3M0MjcwX3NuZF9jb250cm9scyk7IGkrKykgewotCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybCA9Ci0JCXNuZF9zb2NfY25ldygmY3M0MjcwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpOwotCi0JCXJldCA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLCBrY3RybCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCwgY29kZWMpOwotCi0JcmV0dXJuIDA7Ci0KLWVycm9yOgotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBOVUxMOwotCi0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IE5VTEw7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gMDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZiAvKiBVU0VfSTJDKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGNzNDI3MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBjczQyNzBfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gY3M0MjcwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gY3M0MjcwX3NldF9kYWlfZm10LAorCS5kaWdpdGFsX211dGUJPSBjczQyNzBfbXV0ZSwKK307CiAKIHN0cnVjdCBzbmRfc29jX2RhaSBjczQyNzBfZGFpID0gewotCS5uYW1lID0gIkNTNDI3MCIsCisJLm5hbWUgPSAiY3M0MjcwIiwKIAkucGxheWJhY2sgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAxLApAQCAtNjUxLDExOCArNTI1LDI1MSBAQAogCQkucmF0ZXMgPSAwLAogCQkuZm9ybWF0cyA9IENTNDI3MF9GT1JNQVRTLAogCX0sCisJLm9wcyA9ICZjczQyNzBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChjczQyNzBfZGFpKTsKIAotLyoKLSAqIEFTb0MgcHJvYmUgZnVuY3Rpb24KKy8qKgorICogY3M0MjcwX3Byb2JlIC0gQVNvQyBwcm9iZSBmdW5jdGlvbgorICogQHBkZXY6IHBsYXRmb3JtIGRldmljZQogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIG1hY2hpbmUgZHJpdmVyIGNhbGxzCi0gKiBwbGF0Zm9ybV9kZXZpY2VfYWRkKCkuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEFTb0MgaGFzIGFsbCB0aGUgcGllY2VzIGl0IG5lZWRzIHRvCisgKiBpbnN0YW50aWF0ZSBhIHNvdW5kIGRyaXZlci4KICAqLwogc3RhdGljIGludCBjczQyNzBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7CisJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gIkNTNDI3MCBBTFNBIFNvQyBDb2RlY1xuIik7Ci0KLQkvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBzbmRfc29jX2NvZGVjIHN0cnVjdHVyZQotCSAgIGFuZCBvdXIgcHJpdmF0ZSBkYXRhIHRvZ2V0aGVyLiAqLwotCWNvZGVjID0ga3phbGxvYyhBTElHTihzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCA0KSArCi0JCQlzaXplb2Yoc3RydWN0IGNzNDI3MF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb2RlYykgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogQ291bGQgbm90IGFsbG9jYXRlIGNvZGVjIHN0cnVjdHVyZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0KLQljb2RlYy0+bmFtZSA9ICJDUzQyNzAiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5kYWkgPSAmY3M0MjcwX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopIGNvZGVjICsKLQkJQUxJR04oc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgNCk7Ci0KLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJLyogQ29ubmVjdCB0aGUgY29kZWMgdG8gdGhlIHNvY2Rldi4gIHNuZF9zb2NfbmV3X3BjbXMoKSBuZWVkcyB0aGlzLiAqLworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAogCS8qIFJlZ2lzdGVyIFBDTXMgKi8KLQogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byBjcmVhdGUgUENNc1xuIik7Ci0JCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLSNpZmRlZiBVU0VfSTJDCi0JY3M0MjcwX3NvY2RldiA9IHNvY2RldjsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIGF0dGFjaCBkcml2ZXIiKTsKKwkvKiBBZGQgdGhlIG5vbi1EQVBNIGNvbnRyb2xzICovCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGNzNDI3MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShjczQyNzBfc25kX2NvbnRyb2xzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBjb250cm9sc1xuIik7CiAJCWdvdG8gZXJyb3JfZnJlZV9wY21zOwogCX0KIAotCS8qIERpZCB3ZSBmaW5kIGEgQ1M0MjcwIG9uIHRoZSBJMkMgYnVzPyAqLwotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKSB7Ci0JCS8qIEluaXRpYWxpemUgY29kZWMgb3BzICovCi0JCWNzNDI3MF9kYWkub3BzLmh3X3BhcmFtcyA9IGNzNDI3MF9od19wYXJhbXM7Ci0JCWNzNDI3MF9kYWkub3BzLnNldF9zeXNjbGsgPSBjczQyNzBfc2V0X2RhaV9zeXNjbGs7Ci0JCWNzNDI3MF9kYWkub3BzLnNldF9mbXQgPSBjczQyNzBfc2V0X2RhaV9mbXQ7Ci0jaWZkZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX0hXTVVURQotCQljczQyNzBfZGFpLm9wcy5kaWdpdGFsX211dGUgPSBjczQyNzBfbXV0ZTsKLSNlbmRpZgotCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJjczQyNzA6IG5vIEkyQyBkZXZpY2UgZm91bmQsICIKLQkJCSJ1c2luZyBzdGFuZC1hbG9uZSBtb2RlXG4iKTsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBJMkMgZGlzYWJsZWQsIHVzaW5nIHN0YW5kLWFsb25lIG1vZGVcbiIpOwotI2VuZGlmCi0KKwkvKiBBbmQgZmluYWxseSwgcmVnaXN0ZXIgdGhlIHNvY2RldiAqLwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKLQkJZ290byBlcnJvcl9kZWxfZHJpdmVyOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9wY21zOwogCX0KIAogCXJldHVybiAwOwogCi1lcnJvcl9kZWxfZHJpdmVyOgotI2lmZGVmIFVTRV9JMkMKLQlpMmNfZGVsX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwotCiBlcnJvcl9mcmVlX3BjbXM6Ci0jZW5kaWYKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCi1lcnJvcl9mcmVlX2NvZGVjOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOwotCiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBjczQyNzBfcmVtb3ZlIC0gQVNvQyByZW1vdmUgZnVuY3Rpb24KKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byBjczQyNzBfcHJvYmUoKS4KKyAqLwogc3RhdGljIGludCBjczQyNzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKLSNpZmRlZiBVU0VfSTJDCi0JaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKLSNlbmRpZgorCXJldHVybiAwOworfTsKIAotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworLyoqCisgKiBjczQyNzBfaTJjX3Byb2JlIC0gaW5pdGlhbGl6ZSB0aGUgSTJDIGludGVyZmFjZSBvZiB0aGUgQ1M0MjcwCisgKiBAaTJjX2NsaWVudDogdGhlIEkyQyBjbGllbnQgb2JqZWN0CisgKiBAaWQ6IHRoZSBJMkMgZGV2aWNlIElEIChpZ25vcmVkKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBJMkMgc3Vic3lzdGVtIGZpbmRzIGEgZGV2aWNlIHRoYXQKKyAqIG1hdGNoZXMgdGhlIGRldmljZSBJRCBnaXZlbiB2aWEgYSBwcmlvciBjYWxsIHRvIGkyY19hZGRfZHJpdmVyKCkuCisgKi8KK3N0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCwKKwljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwOworCXVuc2lnbmVkIGludCByZWc7CisJaW50IHJldDsKKworCS8qIEZvciBub3csIHdlIG9ubHkgc3VwcG9ydCBvbmUgY3M0MjcwIGRldmljZSBpbiB0aGUgc3lzdGVtLiAgU2VlIHRoZQorCSAqIGNvbW1lbnQgZm9yIGNzNDI3MF9jb2RlYy4KKwkgKi8KKwlpZiAoY3M0MjcwX2NvZGVjKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImlnbm9yaW5nIENTNDI3MCBhdCBhZGRyICVYXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgIm9ubHkgb25lIHBlciBib2FyZCBhbGxvd2VkXG4iKTsKKwkJLyogU2hvdWxkIHdlIHJldHVybiBzb21ldGhpbmcgb3RoZXIgdGhhbiBFTk9ERVYgaGVyZT8gKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIENTNDI3MCAqLworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyY19jbGllbnQsIENTNDI3MF9DSElQSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byByZWFkIGkyYyBhdCBhZGRyICVYXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFRoZSB0b3AgZm91ciBiaXRzIG9mIHRoZSBjaGlwIElEIHNob3VsZCBiZSAxMTAwLiAqLworCWlmICgocmV0ICYgMHhGMCkgIT0gMHhDMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJkZXZpY2UgYXQgYWRkciAlWCBpcyBub3QgYSBDUzQyNzBcbiIsCisJCSAgICAgICBpMmNfY2xpZW50LT5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2luZm8oJmkyY19jbGllbnQtPmRldiwgImZvdW5kIGRldmljZSBhdCBpMmMgYWRkcmVzcyAlWFxuIiwKKwkJaTJjX2NsaWVudC0+YWRkcik7CisJZGV2X2luZm8oJmkyY19jbGllbnQtPmRldiwgImhhcmR3YXJlIHJldmlzaW9uICVYXG4iLCByZXQgJiAweEYpOworCisJLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgc25kX3NvY19jb2RlYyBzdHJ1Y3R1cmUKKwkgICBhbmQgb3VyIHByaXZhdGUgZGF0YSB0b2dldGhlci4gKi8KKwljczQyNzAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNzNDI3MCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgY29kZWNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY29kZWMgPSAmY3M0MjcwLT5jb2RlYzsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+ZGV2ID0gJmkyY19jbGllbnQtPmRldjsKKwljb2RlYy0+bmFtZSA9ICJDUzQyNzAiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5kYWkgPSAmY3M0MjcwX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IGNzNDI3MDsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjX2NsaWVudDsKKwljb2RlYy0+cmVhZCA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSBjczQyNzBfaTJjX3dyaXRlOworCWNvZGVjLT5yZWdfY2FjaGUgPSBjczQyNzAtPnJlZ19jYWNoZTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBDUzQyNzBfTlVNUkVHUzsKKworCS8qIFRoZSBJMkMgaW50ZXJmYWNlIGlzIHNldCB1cCwgc28gcHJlLWZpbGwgb3VyIHJlZ2lzdGVyIGNhY2hlICovCisKKwlyZXQgPSBjczQyNzBfZmlsbF9jYWNoZShjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJfQorCisJLyogRGlzYWJsZSBhdXRvLW11dGUuICBUaGlzIGZlYXR1cmUgYXBwZWFycyB0byBiZSBidWdneS4gIEluIHNvbWUKKwkgKiBzaXR1YXRpb25zLCBhdXRvLW11dGUgd2lsbCBub3QgZGVhY3RpdmF0ZSB3aGVuIGl0IHNob3VsZCwgc28gd2Ugd2FudAorCSAqIHRoaXMgZmVhdHVyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgQW4gYXBwbGljYXRpb24gKGUuZy4gYWxzYWN0bCkgY2FuCisJICogcmUtZW5hYmxlZCBpdCBieSB1c2luZyB0aGUgY29udHJvbHMuCisJICovCisKKwlyZWcgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIENTNDI3MF9NVVRFKTsKKwlyZWcgJj0gfkNTNDI3MF9NVVRFX0FVVE87CisJcmV0ID0gY3M0MjcwX2kyY193cml0ZShjb2RlYywgQ1M0MjcwX01VVEUsIHJlZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGlzYWJsZSBhdXRvbWF0aWMgdm9sdW1lIGNvbnRyb2wuICBUaGUgaGFyZHdhcmUgZW5hYmxlcywgYW5kIGl0CisJICogY2F1c2VzIHZvbHVtZSBjaGFuZ2UgY29tbWFuZHMgdG8gYmUgZGVsYXllZCwgc29tZXRpbWVzIHVudGlsIGFmdGVyCisJICogcGxheWJhY2sgaGFzIHN0YXJ0ZWQuICBBbiBhcHBsaWNhdGlvbiAoZS5nLiBhbHNhY3RsKSBjYW4KKwkgKiByZS1lbmFibGVkIGl0IGJ5IHVzaW5nIHRoZSBjb250cm9scy4KKwkgKi8KKworCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX1RSQU5TKTsKKwlyZWcgJj0gfihDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPKTsKKwlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfVFJBTlMsIHJlZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgREFJLiBOb3JtYWxseSwgd2UnZCBwcmVmZXIgdG8gaGF2ZSBhIGttYWxsb2MnZCBEQUkKKwkgKiBzdHJ1Y3R1cmUgZm9yIGVhY2ggQ1M0MjcwIGRldmljZSwgYnV0IHRoZSBtYWNoaW5lIGRyaXZlciBuZWVkcyB0bworCSAqIGhhdmUgYSBwb2ludGVyIHRvIHRoZSBEQUkgc3RydWN0dXJlLCBzbyBmb3Igbm93IGl0IG11c3QgYmUgYSBnbG9iYWwKKwkgKiB2YXJpYWJsZS4KKwkgKi8KKwljczQyNzBfZGFpLmRldiA9ICZpMmNfY2xpZW50LT5kZXY7CisKKwkvKiBSZWdpc3RlciB0aGUgREFJLiAgSWYgYWxsIHRoZSBvdGhlciBBU29DIGRyaXZlciBoYXZlIGFscmVhZHkKKwkgKiByZWdpc3RlcmVkLCB0aGVuIHRoaXMgd2lsbCBjYWxsIG91ciBwcm9iZSBmdW5jdGlvbiwgc28KKwkgKiBjczQyNzBfY29kZWMgbmVlZHMgdG8gYmUgcmVhZHkuCisJICovCisJY3M0MjcwX2NvZGVjID0gY29kZWM7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmNzNDI3MF9kYWkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBEQUllXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmNfY2xpZW50LCBjczQyNzApOworCisJcmV0dXJuIDA7CisKK2Vycm9yX2ZyZWVfY29kZWM6CisJa2ZyZWUoY3M0MjcwKTsKKwljczQyNzBfY29kZWMgPSBOVUxMOworCWNzNDI3MF9kYWkuZGV2ID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogY3M0MjcwX2kyY19yZW1vdmUgLSByZW1vdmUgYW4gSTJDIGRldmljZQorICogQGkyY19jbGllbnQ6IHRoZSBJMkMgY2xpZW50IG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIGNzNDI3MF9pMmNfcHJvYmUoKS4KKyAqLworc3RhdGljIGludCBjczQyNzBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCkKK3sKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmNfY2xpZW50KTsKKworCWtmcmVlKGNzNDI3MCk7CisJY3M0MjcwX2NvZGVjID0gTlVMTDsKKwljczQyNzBfZGFpLmRldiA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKKyAqIGNzNDI3MF9pZCAtIEkyQyBkZXZpY2UgSURzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorICovCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgY3M0MjcwX2lkW10gPSB7CisJeyJjczQyNzAiLCAwfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBjczQyNzBfaWQpOworCisvKgorICogY3M0MjcwX2kyY19kcml2ZXIgLSBJMkMgZGV2aWNlIGlkZW50aWZpY2F0aW9uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgdGVsbHMgdGhlIEkyQyBzdWJzeXN0ZW0gaG93IHRvIGlkZW50aWZ5IGFuZCBzdXBwb3J0IGEKKyAqIGdpdmVuIEkyQyBkZXZpY2UgdHlwZS4KKyAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzNDI3MF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNzNDI3MCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLmlkX3RhYmxlID0gY3M0MjcwX2lkLAorCS5wcm9iZSA9IGNzNDI3MF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IGNzNDI3MF9pMmNfcmVtb3ZlLAorfTsKKworLyoKICAqIEFTb0MgY29kZWMgZGV2aWNlIHN0cnVjdHVyZQogICoKICAqIEFzc2lnbiB0aGlzIHZhcmlhYmxlIHRvIHRoZSBjb2RlY19kZXYgZmllbGQgb2YgdGhlIG1hY2hpbmUgZHJpdmVyJ3MKQEAgLTc3NiwxMyArNzgzLDE1IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNzNDI3MF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZjczQyNzBfZGFpKTsKKwlwcl9pbmZvKCJDaXJydXMgTG9naWMgQ1M0MjcwIEFMU0EgU29DIENvZGVjIERyaXZlclxuIik7CisKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGNzNDI3MF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGNzNDI3MF9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmY3M0MjcwX2RhaSk7CisJaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KGNzNDI3MF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYwppbmRleCA5YTNlNjdlLi41Y2RhOWU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYwpAQCAtNjcsMTEgKzY3LDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJQQ00zMDA4IFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgUENNMzAwOF9WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmICghc29jZGV2LT5jb2RlYykKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY2Rldi0+Y2FyZC0+Y29kZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPm5hbWUgPSAiUENNMzAwOCI7CkBAIC0xMzksNyArMTM5LDcgQEAKIGNhcmRfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQAogc3RhdGljIGludCBwY20zMDA4X3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgcGNtMzAwOF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKIAogCWlmICghY29kZWMpCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogCXBjbTMwMDhfZ3Bpb19mcmVlKHNldHVwKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCmluZGV4IGNhYzM3MzYuLjg3ZjYwNmM3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtMTUxLDIxICsxNTEsNiBAQAogU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgc3NtMjYwMl9lbnVtWzFdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBzc20yNjAyX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzbTI2MDJfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZzc20yNjAyX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzc20yNjAyX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBTU00yNjAyX0FQQU5BLCAzLCAxLCAwKSwKQEAgLTI5MSw3ICsyNzYsNyBAQAogCXUxNiBzcmF0ZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJdTE2IGlmYWNlID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZShjb2RlYywgU1NNMjYwMl9JRkFDRSkgJiAweGZmZjM7CkBAIC0zMzYsNyArMzIxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqbWFzdGVyX3J1bnRpbWU7CkBAIC0zNzMsNyArMzU4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJLyogc2V0IGFjdGl2ZSAqLwogCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfQUNUSVZFLCBBQ1RJVkVfQUNUSVZBVEVfQ09ERUMpOwogCkBAIC0zODUsNyArMzcwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNzbTI2MDJfcHJpdiAqc3NtMjYwMiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJLyogZGVhY3RpdmF0ZSAqLwogCWlmICghY29kZWMtPmFjdGl2ZSkKQEAgLTUyMSw2ICs1MDYsMTYgQEAKICNkZWZpbmUgU1NNMjYwMl9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzc20yNjAyX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBzc20yNjAyX3N0YXJ0dXAsCisJLnByZXBhcmUJPSBzc20yNjAyX3BjbV9wcmVwYXJlLAorCS5od19wYXJhbXMJPSBzc20yNjAyX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSBzc20yNjAyX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUJPSBzc20yNjAyX211dGUsCisJLnNldF9zeXNjbGsJPSBzc20yNjAyX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gc3NtMjYwMl9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzc20yNjAyX2RhaSA9IHsKIAkubmFtZSA9ICJTU00yNjAyIiwKIAkucGxheWJhY2sgPSB7CkBAIC01MzUsMjIgKzUzMCwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gU1NNMjYwMl9SQVRFUywKIAkJLmZvcm1hdHMgPSBTU00yNjAyX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHNzbTI2MDJfc3RhcnR1cCwKLQkJLnByZXBhcmUgPSBzc20yNjAyX3BjbV9wcmVwYXJlLAotCQkuaHdfcGFyYW1zID0gc3NtMjYwMl9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHNzbTI2MDJfc2h1dGRvd24sCi0JCS5kaWdpdGFsX211dGUgPSBzc20yNjAyX211dGUsCi0JCS5zZXRfc3lzY2xrID0gc3NtMjYwMl9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSBzc20yNjAyX3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJnNzbTI2MDJfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzc20yNjAyX2RhaSk7CiAKIHN0YXRpYyBpbnQgc3NtMjYwMl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXNzbTI2MDJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNTU5LDcgKzU0Niw3IEBACiBzdGF0aWMgaW50IHNzbTI2MDJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTU4MSw3ICs1NjgsNyBAQAogICovCiBzdGF0aWMgaW50IHNzbTI2MDJfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJlZywgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIlNTTTI2MDIiOwpAQCAtNjIyLDcgKzYwOSw4IEBACiAJCQlBUEFOQV9FTkFCTEVfTUlDX0JPT1NUKTsKIAlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX1BXUiwgMCk7CiAKLQlzc20yNjAyX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHNzbTI2MDJfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoc3NtMjYwMl9zbmRfY29udHJvbHMpKTsKIAlzc20yNjAyX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02NTMsNyArNjQxLDcgQEAKIAkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gc3NtMjYwMl9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC03NDcsNyArNzM1LDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gc3NtMjYwMjsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC03NjgsNyArNzU2LDcgQEAKIHN0YXRpYyBpbnQgc3NtMjYwMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQlzc20yNjAyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwppbmRleCBjZmRlYTAwLi5jM2Y0YWZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCkBAIC0xODMsMjQgKzE4Myw2IEBACiAJU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgdGx2MzIwYWljMjNfZGVlbXBoKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB0bHYzMjBhaWMyM19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCi0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmdGx2MzIwYWljMjNfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotCi19Ci0KIC8qIFBHQSBNaXhlciBjb250cm9scyBmb3IgTGluZSBhbmQgTWljIHN3aXRjaCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRsdjMyMGFpYzIzX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogCVNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgVExWMzIwQUlDMjNfQU5MRywgMywgMSwgMCksCkBAIC00MjMsNyArNDA1LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGlmYWNlX3JlZzsKIAlpbnQgcmV0OwogCXN0cnVjdCBhaWMyMyAqYWljMjMgPSBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBhaWMyMywgY29kZWMpOwpAQCAtNDcxLDcgKzQ1Myw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogc2V0IGFjdGl2ZSAqLwogCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MDAwMSk7CkBAIC00ODQsNyArNDY2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzIzICphaWMyMyA9IGNvbnRhaW5lcl9vZihjb2RlYywgc3RydWN0IGFpYzIzLCBjb2RlYyk7CiAKIAkvKiBkZWFjdGl2YXRlICovCkBAIC01OTgsNiArNTgwLDE1IEBACiAjZGVmaW5lIEFJQzIzX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAogCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB0bHYzMjBhaWMyM19kYWlfb3BzID0geworCS5wcmVwYXJlCT0gdGx2MzIwYWljMjNfcGNtX3ByZXBhcmUsCisJLmh3X3BhcmFtcwk9IHRsdjMyMGFpYzIzX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB0bHYzMjBhaWMyM19zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlCT0gdGx2MzIwYWljMjNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHRsdjMyMGFpYzIzX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gdGx2MzIwYWljMjNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdGx2MzIwYWljMjNfZGFpID0gewogCS5uYW1lID0gInRsdjMyMGFpYzIzIiwKIAkucGxheWJhY2sgPSB7CkBAIC02MTIsMTQgKzYwMyw3IEBACiAJCSAgICAuY2hhbm5lbHNfbWF4ID0gMiwKIAkJICAgIC5yYXRlcyA9IEFJQzIzX1JBVEVTLAogCQkgICAgLmZvcm1hdHMgPSBBSUMyM19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSB0bHYzMjBhaWMyM19wY21fcHJlcGFyZSwKLQkJLmh3X3BhcmFtcyA9IHRsdjMyMGFpYzIzX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdGx2MzIwYWljMjNfc2h1dGRvd24sCi0JCS5kaWdpdGFsX211dGUgPSB0bHYzMjBhaWMyM19tdXRlLAotCQkuc2V0X2ZtdCA9IHRsdjMyMGFpYzIzX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHRsdjMyMGFpYzIzX3NldF9kYWlfc3lzY2xrLAotCX0KKwkub3BzID0gJnRsdjMyMGFpYzIzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodGx2MzIwYWljMjNfZGFpKTsKIApAQCAtNjI3LDcgKzYxMSw3IEBACiAJCQkgICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgwKTsKIAl0bHYzMjBhaWMyM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC02MzgsNyArNjIyLDcgQEAKIHN0YXRpYyBpbnQgdGx2MzIwYWljMjNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTE2IHJlZzsKIApAQCAtNjYwLDcgKzY0NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdGx2MzIwYWljMjNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAJdTE2IHJlZzsKIApAQCAtNzE4LDcgKzcwMiw4IEBACiAKIAl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDEpOwogCi0JdGx2MzIwYWljMjNfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdGx2MzIwYWljMjNfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodGx2MzIwYWljMjNfc25kX2NvbnRyb2xzKSk7CiAJdGx2MzIwYWljMjNfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTc0Niw3ICs3MzEsNyBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppMmNfaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB0bHYzMjBhaWMyM19zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGkyYy0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTgwNCw3ICs3ODksNyBAQAogCWlmIChhaWMyMyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYyA9ICZhaWMyMy0+Y29kZWM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtODIzLDcgKzgwOCw3IEBACiBzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMyMyAqYWljMjMgPSBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBhaWMyMywgY29kZWMpOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMKaW5kZXggMjlmMmYxYS4uMzM4N2Q5ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMyNiAqYWljMjYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBmc3JlZiwgZGl2aXNvciwgd2xlbiwgcHZhbCwganZhbCwgZHZhbCwgcXZhbDsKIAl1MTYgcmVnOwpAQCAtMjcwLDYgKzI3MCwxMyBAQAogI2RlZmluZSBBSUMyNl9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1M4ICAgICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFIHxcCiAJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfQkUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWljMjZfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gYWljMjZfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSBhaWMyNl9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWljMjZfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IGFpYzI2X3NldF9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWljMjZfZGFpID0gewogCS5uYW1lID0gInRsdjMyMGFpYzI2IiwKIAkucGxheWJhY2sgPSB7CkBAIC0yODYsMTIgKzI5Myw3IEBACiAJCS5yYXRlcyA9IEFJQzI2X1JBVEVTLAogCQkuZm9ybWF0cyA9IEFJQzI2X0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gYWljMjZfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gYWljMjZfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBhaWMyNl9zZXRfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IGFpYzI2X3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmFpYzI2X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWljMjZfZGFpKTsKIApAQCAtMzIyLDkgKzMyNCw4IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0Jc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2w7CiAJc3RydWN0IGFpYzI2ICphaWMyNjsKLQlpbnQgaSwgcmV0LCBlcnI7CisJaW50IHJldCwgZXJyOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIlByb2JpbmcgQUlDMjYgU29DIENPREVDIGRyaXZlclxuIik7CiAJZGV2X2RiZygmcGRldi0+ZGV2LCAic29jZGV2PSVwXG4iLCBzb2NkZXYpOwpAQCAtMzM4LDcgKzMzOSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljb2RlYyA9ICZhaWMyNi0+Y29kZWM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIFBDTXMsIGRldj0lcCwgc29jZGV2LT5kZXY9JXBcbiIsCiAJCSZwZGV2LT5kZXYsIHNvY2Rldi0+ZGV2KTsKQEAgLTM1MSwxMSArMzUyLDkgQEAKIAogCS8qIHJlZ2lzdGVyIGNvbnRyb2xzICovCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVnaXN0ZXJpbmcgY29udHJvbHNcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFpYzI2X3NuZF9jb250cm9scyk7IGkrKykgewotCQlrY29udHJvbCA9IHNuZF9zb2NfY25ldygmYWljMjZfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCk7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLCBrY29udHJvbCk7Ci0JCVdBUk5fT04oZXJyIDwgMCk7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhaWMyNl9zbmRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKGFpYzI2X3NuZF9jb250cm9scykpOworCVdBUk5fT04oZXJyIDwgMCk7CiAKIAkvKiBDT0RFQyBpcyBzZXR1cCwgd2UgY2FuIHJlZ2lzdGVyIHRoZSBjYXJkIG5vdyAqLwogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIGNhcmRcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IGFlYTBjYjcuLmFiMDk5ZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIAogI2luY2x1ZGUgInRsdjMyMGFpYzN4LmgiCiAKQEAgLTI1MCw1NiArMjUxLDg2IEBACiAJU09DX0VOVU1fRE9VQkxFKEFJQzNYX0NPREVDX0RGSUxUX0NUUkwsIDYsIDQsIDQsIGFpYzN4X2FkY19ocGYpLAogfTsKIAorLyoKKyAqIERBQyBkaWdpdGFsIHZvbHVtZXMuIEZyb20gLTYzLjUgdG8gMCBkQiBpbiAwLjUgZEIgc3RlcHMKKyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY190bHYsIC02MzUwLCA1MCwgMCk7CisvKiBBREMgUEdBIGdhaW4gdm9sdW1lcy4gRnJvbSAwIHRvIDU5LjUgZEIgaW4gMC41IGRCIHN0ZXBzICovCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoYWRjX3RsdiwgMCwgNTAsIDApOworLyoKKyAqIE91dHB1dCBzdGFnZSB2b2x1bWVzLiBGcm9tIC03OC4zIHRvIDAgZEIuIE11dGVkIGJlbG93IC03OC4zIGRCLgorICogU3RlcCBzaXplIGlzIGFwcHJveGltYXRlbHkgMC41IGRCIG92ZXIgbW9zdCBvZiB0aGUgc2NhbGUgYnV0IGluY3JlYXNpbmcKKyAqIG5lYXIgdGhlIHZlcnkgbG93IGxldmVscy4KKyAqIERlZmluZSBkQiBzY2FsZSBzbyB0aGF0IGl0IGlzIG1vc3RseSBjb3JyZWN0IGZvciByYW5nZSBhYm91dCAtNTUgdG8gMCBkQgorICogYnV0IGhhdmluZyBpbmNyZWFzaW5nIGRCIGRpZmZlcmVuY2UgYmVsb3cgdGhhdCAoYW5kIHdoZXJlIGl0IGRvZXNuJ3QgY291bnQKKyAqIHNvIG11Y2gpLiBUaGlzIHNldHRpbmcgc2hvd3MgLTUwIGRCIChhY3R1YWwgaXMgLTUwLjMgZEIpIGZvciByZWdpc3RlcgorICogdmFsdWUgMTAwIGFuZCAtNTguNSBkQiAoYWN0dWFsIGlzIC03OC4zIGRCKSBmb3IgcmVnaXN0ZXIgdmFsdWUgMTE3LgorICovCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0cHV0X3N0YWdlX3RsdiwgLTU5MDAsIDUwLCAxKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X3NuZF9jb250cm9sc1tdID0gewogCS8qIE91dHB1dCAqLwotCVNPQ19ET1VCTEVfUigiUENNIFBsYXliYWNrIFZvbHVtZSIsIExEQUNfVk9MLCBSREFDX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTERBQ19WT0wsIFJEQUNfVk9MLCAwLCAweDdmLCAxLCBkYWNfdGx2KSwKIAotCVNPQ19ET1VCTEVfUigiTGluZSBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9MTE9QTV9WT0wsCi0JCSAgICAgREFDUjFfMl9STE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmUgREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9MTE9QTV9WT0wsIERBQ1IxXzJfUkxPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRSgiTGluZUwgUGxheWJhY2sgU3dpdGNoIiwgTExPUE1fQ1RSTCwgMywgMHgwMSwgMCksCiAJU09DX1NJTkdMRSgiTGluZVIgUGxheWJhY2sgU3dpdGNoIiwgUkxPUE1fQ1RSTCwgMywgMHgwMSwgMCksCi0JU09DX0RPVUJMRV9SKCJMaW5lTCBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9MTE9QTV9WT0wsCi0JCSAgICAgREFDUjFfMl9MTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkxpbmVMIExlZnQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfTExPUE1fVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkxpbmVSIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBUl8yX1JMT1BNX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkxpbmVMIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9MTE9QTV9WT0wsCi0JCSAgICAgTElORTJSXzJfTExPUE1fVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkxpbmVSIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9STE9QTV9WT0wsCi0JCSAgICAgTElORTJSXzJfUkxPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lTCBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0xMT1BNX1ZPTCwgREFDUjFfMl9MTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTGluZUwgTGVmdCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfTExPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJMaW5lUiBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FSXzJfUkxPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmVMIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX0xMT1BNX1ZPTCwgTElORTJSXzJfTExPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZVIgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfUkxPUE1fVk9MLCBMSU5FMlJfMl9STE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAotCVNPQ19ET1VCTEVfUigiTW9ubyBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9NT05PTE9QTV9WT0wsCi0JCSAgICAgREFDUjFfMl9NT05PTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIk1vbm8gREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9NT05PTE9QTV9WT0wsIERBQ1IxXzJfTU9OT0xPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRSgiTW9ubyBEQUMgUGxheWJhY2sgU3dpdGNoIiwgTU9OT0xPUE1fQ1RSTCwgMywgMHgwMSwgMCksCi0JU09DX0RPVUJMRV9SKCJNb25vIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX01PTk9MT1BNX1ZPTCwKLQkJICAgICBQR0FSXzJfTU9OT0xPUE1fVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIk1vbm8gTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX01PTk9MT1BNX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9NT05PTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIk1vbm8gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIFBHQUxfMl9NT05PTE9QTV9WT0wsIFBHQVJfMl9NT05PTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJNb25vIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX01PTk9MT1BNX1ZPTCwgTElORTJSXzJfTU9OT0xPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIkhQIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX0hQTE9VVF9WT0wsCi0JCSAgICAgREFDUjFfMl9IUFJPVVRfVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUCBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0hQTE9VVF9WT0wsIERBQ1IxXzJfSFBST1VUX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19ET1VCTEVfUigiSFAgREFDIFBsYXliYWNrIFN3aXRjaCIsIEhQTE9VVF9DVFJMLCBIUFJPVVRfQ1RSTCwgMywKIAkJICAgICAweDAxLCAwKSwKLQlTT0NfRE9VQkxFX1IoIkhQIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBUl8yX0hQTE9VVF9WT0wsCi0JCSAgICAgUEdBUl8yX0hQUk9VVF9WT0wsIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkhQTCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9IUExPVVRfVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkhQUiBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9IUFJPVVRfVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19ET1VCTEVfUigiSFAgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX0hQTE9VVF9WT0wsCi0JCSAgICAgTElORTJSXzJfSFBST1VUX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiSFAgUmlnaHQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIFBHQVJfMl9IUExPVVRfVk9MLCBQR0FSXzJfSFBST1VUX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJIUEwgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQTE9VVF9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkhQUiBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfSFBST1VUX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9IUExPVVRfVk9MLCBMSU5FMlJfMl9IUFJPVVRfVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIkhQQ09NIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX0hQTENPTV9WT0wsCi0JCSAgICAgREFDUjFfMl9IUFJDT01fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUENPTSBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0hQTENPTV9WT0wsIERBQ1IxXzJfSFBSQ09NX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19ET1VCTEVfUigiSFBDT00gREFDIFBsYXliYWNrIFN3aXRjaCIsIEhQTENPTV9DVFJMLCBIUFJDT01fQ1RSTCwgMywKIAkJICAgICAweDAxLCAwKSwKLQlTT0NfU0lOR0xFKCJIUExDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBMQ09NX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJIUFJDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBSQ09NX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkhQQ09NIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9IUExDT01fVk9MLAotCQkgICAgIExJTkUyUl8yX0hQUkNPTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19TSU5HTEVfVExWKCJIUExDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQTENPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkhQUkNPTSBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfSFBSQ09NX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUENPTSBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9IUExDT01fVk9MLCBMSU5FMlJfMl9IUFJDT01fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKIAkvKgogCSAqIE5vdGU6IGVuYWJsZSBBdXRvbWF0aWMgaW5wdXQgR2FpbiBDb250cm9sbGVyIHdpdGggY2FyZS4gSXQgY2FuCkBAIC0zMDgsMjggKzMzOSwxMyBAQAogCVNPQ19ET1VCTEVfUigiQUdDIFN3aXRjaCIsIExBR0NfQ1RSTF9BLCBSQUdDX0NUUkxfQSwgNywgMHgwMSwgMCksCiAKIAkvKiBJbnB1dCAqLwotCVNPQ19ET1VCTEVfUigiUEdBIENhcHR1cmUgVm9sdW1lIiwgTEFEQ19WT0wsIFJBRENfVk9MLCAwLCAweDdmLCAwKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJQR0EgQ2FwdHVyZSBWb2x1bWUiLCBMQURDX1ZPTCwgUkFEQ19WT0wsCisJCQkgMCwgMTE5LCAwLCBhZGNfdGx2KSwKIAlTT0NfRE9VQkxFX1IoIlBHQSBDYXB0dXJlIFN3aXRjaCIsIExBRENfVk9MLCBSQURDX1ZPTCwgNywgMHgwMSwgMSksCiAKIAlTT0NfRU5VTSgiQURDIEhQRiBDdXQtb2ZmIiwgYWljM3hfZW51bVtBRENfSFBGX0VOVU1dKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBhaWMzeF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWMzeF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJmFpYzN4X3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogTGVmdCBEQUMgTXV4ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljM3hfbGVmdF9kYWNfbXV4X2NvbnRyb2xzID0KIFNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgYWljM3hfZW51bVtMREFDX0VOVU1dKTsKQEAgLTc0Niw3ICs3NjIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBjb2RlY19jbGsgPSAwLCBieXBhc3NfcGxsID0gMCwgZnNyZWYsIGxhc3RfY2xrID0gMDsKIAl1OCBkYXRhLCByLCBwLCBwbGxfcSwgcGxsX3AgPSAxLCBwbGxfciA9IDEsIHBsbF9qID0gMTsKQEAgLTEwNzIsNiArMTA4OCwxMyBAQAogI2RlZmluZSBBSUMzWF9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKIAkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWljM3hfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gYWljM3hfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSBhaWMzeF9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWljM3hfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSBhaWMzeF9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhaWMzeF9kYWkgPSB7CiAJLm5hbWUgPSAidGx2MzIwYWljM3giLAogCS5wbGF5YmFjayA9IHsKQEAgLTEwODYsMTkgKzExMDksMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IEFJQzNYX1JBVEVTLAogCQkuZm9ybWF0cyA9IEFJQzNYX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gYWljM3hfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gYWljM3hfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBhaWMzeF9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSBhaWMzeF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZhaWMzeF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFpYzN4X2RhaSk7CiAKIHN0YXRpYyBpbnQgYWljM3hfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlhaWMzeF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAKQEAgLTExMDgsNyArMTEyNiw3IEBACiBzdGF0aWMgaW50IGFpYzN4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTExMzEsNyArMTE0OSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWljM3hfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgKnNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwogCWludCByZWcsIHJldCA9IDA7CiAKQEAgLTEyMjcsNyArMTI0NSw4IEBACiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8xX1JFRywgKHNldHVwLT5ncGlvX2Z1bmNbMF0gJiAweGYpIDw8IDQpOwogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9HUElPMl9SRUcsIChzZXR1cC0+Z3Bpb19mdW5jWzFdICYgMHhmKSA8PCA0KTsKIAotCWFpYzN4X2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzN4X3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFpYzN4X3NuZF9jb250cm9scykpOwogCWFpYzN4X2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xMjYxLDcgKzEyODAsNyBAQAogCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gYWljM3hfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtMTM2Niw3ICsxMzg1LDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWljM3g7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtMTM5Miw3ICsxNDExLDcgQEAKIHN0YXRpYyBpbnQgYWljM3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBwb3dlciBkb3duIGNoaXAgKi8KIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggZWEzNzBhNC4uOTc3MzhlMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqLwogc3RhdGljIGNvbnN0IHU4IHR3bDQwMzBfcmVnW1RXTDQwMzBfQ0FDSEVSRUdOVU1dID0gewogCTB4MDAsIC8qIHRoaXMgcmVnaXN0ZXIgbm90IHVzZWQJCSovCi0JMHg5MywgLyogUkVHX0NPREVDX01PREUJCSgweDEpCSovCisJMHg5MSwgLyogUkVHX0NPREVDX01PREUJCSgweDEpCSovCiAJMHhjMywgLyogUkVHX09QVElPTgkJKDB4MikJKi8KIAkweDAwLCAvKiBSRUdfVU5LTk9XTgkJKDB4MykJKi8KIAkweDAwLCAvKiBSRUdfTUlDQklBU19DVEwJKDB4NCkJKi8KQEAgLTExNyw2ICsxMTcsMTMgQEAKIAkweDAwLCAvKiBSRUdfTUlTQ19TRVRfMgkJKDB4NDkpCSovCiB9OwogCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB0d2w0MDMwX3ByaXYgeworCXVuc2lnbmVkIGludCBieXBhc3Nfc3RhdGU7CisJdW5zaWduZWQgaW50IGNvZGVjX3Bvd2VyZWQ7CisJdW5zaWduZWQgaW50IGNvZGVjX211dGVkOworfTsKKwogLyoKICAqIHJlYWQgdHdsNDAzMCByZWdpc3RlciBjYWNoZQogICovCkBAIC0xMjUsNiArMTMyLDkgQEAKIHsKIAl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCisJaWYgKHJlZyA+PSBUV0w0MDMwX0NBQ0hFUkVHTlVNKQorCQlyZXR1cm4gLUVJTzsKKwogCXJldHVybiBjYWNoZVtyZWddOwogfQogCkBAIC0xNTEsMjYgKzE2MSwyMiBAQAogCXJldHVybiB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgdmFsdWUsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHR3bDQwMzBfY2xlYXJfY29kZWNwZHooc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgdHdsNDAzMF9jb2RlY19lbmFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZW5hYmxlKQogeworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IG1vZGU7CiAKLQltb2RlID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwKLQkJbW9kZSAmIH5UV0w0MDMwX0NPREVDUERaKTsKLQotCS8qIFJFVklTSVQ6IHRoaXMgZGVsYXkgaXMgcHJlc2VudCBpbiBUSSBzYW1wbGUgZHJpdmVycyAqLwotCS8qIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBubyBUUk0gcmVxdWlyZW1lbnQgZm9yIGl0ICAgICAqLwotCXVkZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR3bDQwMzBfc2V0X2NvZGVjcGR6KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCBtb2RlOworCWlmIChlbmFibGUgPT0gdHdsNDAzMC0+Y29kZWNfcG93ZXJlZCkKKwkJcmV0dXJuOwogCiAJbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsCi0JCW1vZGUgfCBUV0w0MDMwX0NPREVDUERaKTsKKwlpZiAoZW5hYmxlKQorCQltb2RlIHw9IFRXTDQwMzBfQ09ERUNQRFo7CisJZWxzZQorCQltb2RlICY9IH5UV0w0MDMwX0NPREVDUERaOworCisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwgbW9kZSk7CisJdHdsNDAzMC0+Y29kZWNfcG93ZXJlZCA9IGVuYWJsZTsKIAogCS8qIFJFVklTSVQ6IHRoaXMgZGVsYXkgaXMgcHJlc2VudCBpbiBUSSBzYW1wbGUgZHJpdmVycyAqLwogCS8qIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBubyBUUk0gcmVxdWlyZW1lbnQgZm9yIGl0ICAgICAqLwpAQCAtMTgyLDcgKzE4OCw3IEBACiAJaW50IGk7CiAKIAkvKiBjbGVhciBDT0RFQ1BEWiBwcmlvciB0byBzZXR0aW5nIHJlZ2lzdGVyIGRlZmF1bHRzICovCi0JdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7CisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwogCiAJLyogc2V0IGFsbCBhdWRpbyBzZWN0aW9uIHJlZ2lzdGVycyB0byByZWFzb25hYmxlIGRlZmF1bHRzICovCiAJZm9yIChpID0gVFdMNDAzMF9SRUdfT1BUSU9OOyBpIDw9IFRXTDQwMzBfUkVHX01JU0NfU0VUXzI7IGkrKykKQEAgLTE5MCw2ICsxOTYsMTIyIEBACiAKIH0KIAorc3RhdGljIHZvaWQgdHdsNDAzMF9jb2RlY19tdXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IG11dGUpCit7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTggcmVnX3ZhbDsKKworCWlmIChtdXRlID09IHR3bDQwMzAtPmNvZGVjX211dGVkKQorCQlyZXR1cm47CisKKwlpZiAobXV0ZSkgeworCQkvKiBCeXBhc3MgdGhlIHJlZ19jYWNoZSBhbmQgbXV0ZSB0aGUgdm9sdW1lcworCQkgKiBIZWFkc2V0IG11dGUgaXMgZG9uZSBpbiBpdCdzIG93biBldmVudCBoYW5kbGVyCisJCSAqIFRoaW5ncyB0byBtdXRlOiAgRWFycGllY2UsIFByZURyaXZML1IsIENhcmtpdEwvUgorCQkgKi8KKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0VBUl9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9FQVJfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX0VBUl9DVEwpOworCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVETF9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVETF9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFRExfQ1RMKTsKKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURSX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRURSX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVETF9DVEwpOworCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS0xfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFQ0tMX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVDS0xfQ1RMKTsKKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLUl9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVDS0xfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX1BSRUNLUl9DVEwpOworCisJCS8qIERpc2FibGUgUExMICovCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCk7CisJCXJlZ192YWwgJj0gflRXTDQwMzBfQVBMTF9FTjsKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwsIHJlZ192YWwpOworCX0gZWxzZSB7CisJCS8qIFJlc3RvcmUgdGhlIHZvbHVtZXMKKwkJICogSGVhZHNldCBtdXRlIGlzIGRvbmUgaW4gaXQncyBvd24gZXZlbnQgaGFuZGxlcgorCQkgKiBUaGluZ3MgdG8gcmVzdG9yZTogIEVhcnBpZWNlLCBQcmVEcml2TC9SLCBDYXJraXRML1IKKwkJICovCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0VBUl9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19FQVJfQ1RMKSk7CisKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRExfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRExfQ1RMKSk7CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURSX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURSX0NUTCkpOworCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLTF9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS0xfQ1RMKSk7CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLUl9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS1JfQ1RMKSk7CisKKwkJLyogRW5hYmxlIFBMTCAqLworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwpOworCQlyZWdfdmFsIHw9IFRXTDQwMzBfQVBMTF9FTjsKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwsIHJlZ192YWwpOworCX0KKworCXR3bDQwMzAtPmNvZGVjX211dGVkID0gbXV0ZTsKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl91cChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTggYW5hbWljbCwgcmVnbWlzYzEsIGJ5dGU7CisJaW50IGkgPSAwOworCisJaWYgKHR3bDQwMzAtPmNvZGVjX3Bvd2VyZWQpCisJCXJldHVybjsKKworCS8qIHNldCBDT0RFQ1BEWiB0byB0dXJuIG9uIGNvZGVjICovCisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworCisJLyogaW5pdGlhdGUgb2Zmc2V0IGNhbmNlbGxhdGlvbiAqLworCWFuYW1pY2wgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMKTsKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMLAorCQlhbmFtaWNsIHwgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCk7CisKKwkvKiB3YWl0IGZvciBvZmZzZXQgY2FuY2VsbGF0aW9uIHRvIGNvbXBsZXRlICovCisJZG8geworCQkvKiB0aGlzIHRha2VzIGEgbGl0dGxlIHdoaWxlLCBzbyBkb24ndCBzbGFtIGkyYyAqLworCQl1ZGVsYXkoMjAwMCk7CisJCXR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAorCQkJCSAgICBUV0w0MDMwX1JFR19BTkFNSUNMKTsKKwl9IHdoaWxlICgoaSsrIDwgMTAwKSAmJgorCQkgKChieXRlICYgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkgPT0KKwkJICBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgcmVnX2NhY2hlIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgSFcgKi8KKwl0d2w0MDMwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwgYnl0ZSk7CisKKwkvKiBhbnRpLXBvcCB3aGVuIGNoYW5naW5nIGFuYWxvZyBnYWluICovCisJcmVnbWlzYzEgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xKTsKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xLAorCQlyZWdtaXNjMSB8IFRXTDQwMzBfU01PT1RIX0FOQVZPTF9FTik7CisKKwkvKiB0b2dnbGUgQ09ERUNQRFogYXMgcGVyIFRSTSAqLworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7Cit9CisKKy8qCisgKiBVbmNvbmRpdGlvbmFsIHBvd2VyIGRvd24KKyAqLworc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl9kb3duKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwkvKiBwb3dlciBkb3duICovCisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworfQorCiAvKiBFYXJwaWVjZSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnR3bDQwMzBfZWFycGllY2VfdGV4dHNbXSA9CiAJCXsiT2ZmIiwgIkRBQ0wxIiwgIkRBQ0wyIiwgIkRBQ1IxIn07CkBAIC0zNjYsNiArNDg4LDQxIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX21pY3BhdGh0eDJfY29udHJvbCA9CiBTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHR3bDQwMzBfbWljcGF0aHR4Ml9lbnVtKTsKIAorLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9SMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzcjFfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhSMV9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvTDEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc2wxX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYTDFfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBBbmFsb2cgYnlwYXNzIGZvciBBdWRpb1IyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3NyMl9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDQwMzBfUkVHX0FSWFIyX0FQR0FfQ1RMLCAyLCAxLCAwKTsKKworLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9MMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzbDJfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhMMl9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIERpZ2l0YWwgYnlwYXNzIGdhaW4sIDAgbXV0ZXMgdGhlIGJ5cGFzcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0d2w0MDMwX2RhcG1fZGJ5cGFzc190bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgyKSwKKwkwLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgtMjQwMCwgMCwgMSksCisJNCwgNywgVExWX0RCX1NDQUxFX0lURU0oLTE4MDAsIDYwMCwgMCksCit9OworCisvKiBEaWdpdGFsIGJ5cGFzcyBsZWZ0IChUWDFMIC0+IFJYMkwpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2RieXBhc3NsX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRV9UTFYoIlZvbHVtZSIsCisJCQlUV0w0MDMwX1JFR19BVFgyQVJYUEdBLCAzLCA3LCAwLAorCQkJdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2KTsKKworLyogRGlnaXRhbCBieXBhc3MgcmlnaHQgKFRYMVIgLT4gUlgyUikgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fZGJ5cGFzc3JfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFX1RMVigiVm9sdW1lIiwKKwkJCVRXTDQwMzBfUkVHX0FUWDJBUlhQR0EsIDAsIDcsIDAsCisJCQl0d2w0MDMwX2RhcG1fZGJ5cGFzc190bHYpOworCiBzdGF0aWMgaW50IG1pY3BhdGhfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKQEAgLTQyMCw2ICs1NzcsNzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBoZWFkc2V0bF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwl1bnNpZ25lZCBjaGFyIGhzX2dhaW4sIGhzX3BvcDsKKworCS8qIFNhdmUgdGhlIGN1cnJlbnQgdm9sdW1lICovCisJaHNfZ2FpbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VUKTsKKwloc19wb3AgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCS8qIERvIHRoZSBhbnRpLXBvcC9iaWFzIHJhbXAgZW5hYmxlIGFjY29yZGluZyB0byB0aGUgVFJNICovCisJCWhzX3BvcCB8PSBUV0w0MDMwX1ZNSURfRU47CisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCQkvKiBJcyB0aGlzIG5lZWRlZD8gQ2FuIHdlIGp1c3QgdXNlIHdoYXRldmVyIGdhaW4gaGVyZT8gKi8KKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfR0FJTl9TRVQsCisJCQkJKGhzX2dhaW4gJiAofjB4MGYpKSB8IDB4MGEpOworCQloc19wb3AgfD0gVFdMNDAzMF9SQU1QX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKworCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2b2x1bWUgKi8KKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfR0FJTl9TRVQsIGhzX2dhaW4pOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJLyogRG8gdGhlIGFudGktcG9wL2JpYXMgcmFtcCBkaXNhYmxlIGFjY29yZGluZyB0byB0aGUgVFJNICovCisJCWhzX3BvcCAmPSB+VFdMNDAzMF9SQU1QX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJLyogQnlwYXNzIHRoZSByZWdfY2FjaGUgdG8gbXV0ZSB0aGUgaGVhZHNldCAqLworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJaHNfZ2FpbiAmICh+MHgwZiksCisJCQkJCVRXTDQwMzBfUkVHX0hTX0dBSU5fU0VUKTsKKwkJaHNfcG9wICY9IH5UV0w0MDMwX1ZNSURfRU47CisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnlwYXNzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbSA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKil3LT5rY29udHJvbHMtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHctPmNvZGVjLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgY2hhciByZWc7CisKKwlyZWcgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBtLT5yZWcpOworCisJaWYgKG0tPnJlZyA8PSBUV0w0MDMwX1JFR19BUlhSMl9BUEdBX0NUTCkgeworCQkvKiBBbmFsb2cgYnlwYXNzICovCisJCWlmIChyZWcgJiAoMSA8PCBtLT5zaGlmdCkpCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgfD0KKwkJCQkoMSA8PCAobS0+cmVnIC0gVFdMNDAzMF9SRUdfQVJYTDFfQVBHQV9DVEwpKTsKKwkJZWxzZQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlICY9CisJCQkJfigxIDw8IChtLT5yZWcgLSBUV0w0MDMwX1JFR19BUlhMMV9BUEdBX0NUTCkpOworCX0gZWxzZSB7CisJCS8qIERpZ2l0YWwgYnlwYXNzICovCisJCWlmIChyZWcgJiAoMHg3IDw8IG0tPnNoaWZ0KSkKKwkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSB8PSAoMSA8PCAobS0+c2hpZnQgPyA1IDogNCkpOworCQllbHNlCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgJj0gfigxIDw8IChtLT5zaGlmdCA/IDUgOiA0KSk7CisJfQorCisJaWYgKHctPmNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CisJCWlmICh0d2w0MDMwLT5ieXBhc3Nfc3RhdGUpCisJCQl0d2w0MDMwX2NvZGVjX211dGUody0+Y29kZWMsIDApOworCQllbHNlCisJCQl0d2w0MDMwX2NvZGVjX211dGUody0+Y29kZWMsIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNvbWUgb2YgdGhlIGdhaW4gY29udHJvbHMgaW4gVFdMIChtb3N0bHkgdGhvc2Ugd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAogICogdGhlIG91dHB1dHMpIGFyZSBpbXBsZW1lbnRlZCBpbiBhbiBpbnRlcmVzdGluZyB3YXk6CkBAIC02MTQsNiArODQ0LDE3IEBACiAgKi8KIHN0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnB1dF9nYWluX3RsdiwgMCwgNjAwLCAwKTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKnR3bDQwMzBfcmFtcGRlbGF5X3RleHRzW10gPSB7CisJIjI3LzIwLzE0IG1zIiwgIjU1LzQwLzI3IG1zIiwgIjEwOS84MS81NSBtcyIsICIyMTgvMTYxLzEwOSBtcyIsCisJIjQzNy8zMjMvMjE4IG1zIiwgIjg3NC82NDUvNDM3IG1zIiwgIjE3NDgvMTI5MS84NzQgbXMiLAorCSIzNDk1LzI1ODEvMTc0OCBtcyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdHdsNDAzMF9yYW1wZGVsYXlfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCAyLAorCQkJQVJSQVlfU0laRSh0d2w0MDMwX3JhbXBkZWxheV90ZXh0cyksCisJCQl0d2w0MDMwX3JhbXBkZWxheV90ZXh0cyk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX3NuZF9jb250cm9sc1tdID0gewogCS8qIENvbW1vbiBwbGF5YmFjayBnYWluIGNvbnRyb2xzICovCiAJU09DX0RPVUJMRV9SX1RMVigiREFDMSBEaWdpdGFsIEZpbmUgUGxheWJhY2sgVm9sdW1lIiwKQEAgLTY2OCwyNCArOTA5LDEwIEBACiAKIAlTT0NfRE9VQkxFX1RMVigiQW5hbG9nIENhcHR1cmUgVm9sdW1lIiwgVFdMNDAzMF9SRUdfQU5BTUlDX0dBSU4sCiAJCTAsIDMsIDUsIDAsIGlucHV0X2dhaW5fdGx2KSwKKworCVNPQ19FTlVNKCJIUyByYW1wIGRlbGF5IiwgdHdsNDAzMF9yYW1wZGVsYXlfZW51bSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgdHdsNDAzMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0d2w0MDMwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmdHdsNDAzMF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0d2w0MDMwX2RhcG1fd2lkZ2V0c1tdID0gewogCS8qIExlZnQgY2hhbm5lbCBpbnB1dHMgKi8KIAlTTkRfU09DX0RBUE1fSU5QVVQoIk1BSU5NSUMiKSwKQEAgLTcxNCwxMyArOTQxLDEzIEBACiAKIAkvKiBEQUNzICovCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIFJpZ2h0MSIsICJSaWdodCBGcm9udCBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDAsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMgTGVmdDEiLCAiTGVmdCBGcm9udCBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDEsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMgUmlnaHQyIiwgIlJpZ2h0IFJlYXIgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAyLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIExlZnQyIiwgIkxlZnQgUmVhciBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDMsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAogCS8qIEFuYWxvZyBQR0FzICovCiAJU05EX1NPQ19EQVBNX1BHQSgiQVJYUjFfQVBHQSIsIFRXTDQwMzBfUkVHX0FSWFIxX0FQR0FfQ1RMLApAQCAtNzMyLDYgKzk1OSwzNyBAQAogCVNORF9TT0NfREFQTV9QR0EoIkFSWEwyX0FQR0EiLCBUV0w0MDMwX1JFR19BUlhMMl9BUEdBX0NUTCwKIAkJCTAsIDAsIE5VTEwsIDApLAogCisJLyogQW5hbG9nIGJ5cGFzc2VzICovCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJSaWdodDEgQW5hbG9nIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9hYnlwYXNzcjFfY29udHJvbCwgYnlwYXNzX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIkxlZnQxIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc2wxX2NvbnRyb2wsCisJCQlieXBhc3NfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJSaWdodDIgQW5hbG9nIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9hYnlwYXNzcjJfY29udHJvbCwKKwkJCWJ5cGFzc19ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIkxlZnQyIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc2wyX2NvbnRyb2wsCisJCQlieXBhc3NfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1JFRyksCisKKwkvKiBEaWdpdGFsIGJ5cGFzc2VzICovCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJMZWZ0IERpZ2l0YWwgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2RieXBhc3NsX2NvbnRyb2wsIGJ5cGFzc19ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJSaWdodCBEaWdpdGFsIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9kYnlwYXNzcl9jb250cm9sLCBieXBhc3NfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIFRXTDQwMzBfUkVHX0FWREFDX0NUTCwKKwkJCTEsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMiwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkzLCAwLCBOVUxMLCAwKSwKKwogCS8qIE91dHB1dCBNVVggY29udHJvbHMgKi8KIAkvKiBFYXJwaWVjZSAqLwogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIkVhcnBpZWNlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKQEAgLTc0Miw4ICsxMDAwLDkgQEAKIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJQcmVkcml2ZVIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkmdHdsNDAzMF9kYXBtX3ByZWRyaXZlcl9jb250cm9sKSwKIAkvKiBIZWFkc2V0TC9SICovCi0JU05EX1NPQ19EQVBNX01VWCgiSGVhZHNldEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAotCQkmdHdsNDAzMF9kYXBtX2hzb2xfY29udHJvbCksCisJU05EX1NPQ19EQVBNX01VWF9FKCJIZWFkc2V0TCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ0d2w0MDMwX2RhcG1faHNvbF9jb250cm9sLCBoZWFkc2V0bF9ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRCksCiAJU05EX1NPQ19EQVBNX01VWCgiSGVhZHNldFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkmdHdsNDAzMF9kYXBtX2hzb3JfY29udHJvbCksCiAJLyogQ2Fya2l0TC9SICovCkBAIC03ODIsMTYgKzEwNDEsMTYgQEAKIAkJU05EX1NPQ19EQVBNX1BPU1RfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRHwKIAkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKIAotCS8qIEFuYWxvZyBpbnB1dCBtdXhlcyB3aXRoIHBvd2VyIHN3aXRjaCBmb3IgdGhlIHBoeXNpY2FsIEFEQ0wvUiAqLworCS8qIEFuYWxvZyBpbnB1dCBtdXhlcyB3aXRoIHN3aXRjaCBmb3IgdGhlIGNhcHR1cmUgYW1wbGlmaWVycyAqLwogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUiLAotCQlUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDMsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9nbG1pY19jb250cm9sKSwKKwkJVFdMNDAzMF9SRUdfQU5BTUlDTCwgNCwgMCwgJnR3bDQwMzBfZGFwbV9hbmFsb2dsbWljX2NvbnRyb2wpLAogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwKLQkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAxLCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ3JtaWNfY29udHJvbCksCisJCVRXTDQwMzBfUkVHX0FOQU1JQ1IsIDQsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9ncm1pY19jb250cm9sKSwKIAotCVNORF9TT0NfREFQTV9QR0EoIkFuYWxvZyBMZWZ0IEFtcGxpZmllciIsCi0JCVRXTDQwMzBfUkVHX0FOQU1JQ0wsIDQsIDAsIE5VTEwsIDApLAotCVNORF9TT0NfREFQTV9QR0EoIkFuYWxvZyBSaWdodCBBbXBsaWZpZXIiLAotCQlUV0w0MDMwX1JFR19BTkFNSUNSLCA0LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJBREMgUGh5c2ljYWwgTGVmdCIsCisJCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQURDIFBoeXNpY2FsIFJpZ2h0IiwKKwkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAxLCAwLCBOVUxMLCAwKSwKIAogCVNORF9TT0NfREFQTV9QR0EoIkRpZ2ltaWMwIEVuYWJsZSIsCiAJCVRXTDQwMzBfUkVHX0FEQ01JQ1NFTCwgMSwgMCwgTlVMTCwgMCksCkBAIC04MDEsMTMgKzEwNjAsMTkgQEAKIAlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMgMSIsIFRXTDQwMzBfUkVHX01JQ0JJQVNfQ1RMLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMgMiIsIFRXTDQwMzBfUkVHX01JQ0JJQVNfQ1RMLCAxLCAwKSwKIAlTTkRfU09DX0RBUE1fTUlDQklBUygiSGVhZHNldCBNaWMgQmlhcyIsIFRXTDQwMzBfUkVHX01JQ0JJQVNfQ1RMLCAyLCAwKSwKKwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKLQl7IkFSWEwxX0FQR0EiLCBOVUxMLCAiREFDIExlZnQxIn0sCi0JeyJBUlhSMV9BUEdBIiwgTlVMTCwgIkRBQyBSaWdodDEifSwKLQl7IkFSWEwyX0FQR0EiLCBOVUxMLCAiREFDIExlZnQyIn0sCi0JeyJBUlhSMl9BUEdBIiwgTlVMTCwgIkRBQyBSaWdodDIifSwKKwl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEQUMgTGVmdDEifSwKKwl7IkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEQUMgUmlnaHQxIn0sCisJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIExlZnQyIn0sCisJeyJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIFJpZ2h0MiJ9LAorCisJeyJBUlhMMV9BUEdBIiwgTlVMTCwgIkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciJ9LAorCXsiQVJYUjFfQVBHQSIsIE5VTEwsICJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIifSwKKwl7IkFSWEwyX0FQR0EiLCBOVUxMLCAiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIn0sCisJeyJBUlhSMl9BUEdBIiwgTlVMTCwgIkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciJ9LAogCiAJLyogSW50ZXJuYWwgcGxheWJhY2sgcm91dGluZ3MgKi8KIAkvKiBFYXJwaWVjZSAqLwpAQCAtODY1LDIzICsxMTMwLDIzIEBACiAJeyJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSIsICJTdWIgbWljIiwgIlNVQk1JQyJ9LAogCXsiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUiLCAiQVVYUiIsICJBVVhSIn0sCiAKLQl7IkFuYWxvZyBMZWZ0IEFtcGxpZmllciIsIE5VTEwsICJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIn0sCi0JeyJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIiwgTlVMTCwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCisJeyJBREMgUGh5c2ljYWwgTGVmdCIsIE5VTEwsICJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIn0sCisJeyJBREMgUGh5c2ljYWwgUmlnaHQiLCBOVUxMLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKIAogCXsiRGlnaW1pYzAgRW5hYmxlIiwgTlVMTCwgIkRJR0lNSUMwIn0sCiAJeyJEaWdpbWljMSBFbmFibGUiLCBOVUxMLCAiRElHSU1JQzEifSwKIAogCS8qIFRYMSBMZWZ0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBMZWZ0IEFtcGxpZmllciJ9LAorCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBMZWZ0In0sCiAJeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMCIsICJEaWdpbWljMCBFbmFibGUifSwKIAkvKiBUWDEgUmlnaHQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciJ9LAorCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBSaWdodCJ9LAogCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzAiLCAiRGlnaW1pYzAgRW5hYmxlIn0sCiAJLyogVFgyIExlZnQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIExlZnQgQW1wbGlmaWVyIn0sCisJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQURDIFBoeXNpY2FsIExlZnQifSwKIAl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkRpZ2ltaWMxIiwgIkRpZ2ltaWMxIEVuYWJsZSJ9LAogCS8qIFRYMiBSaWdodCBjYXB0dXJlIHBhdGggKi8KLQl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIn0sCisJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQURDIFBoeXNpY2FsIFJpZ2h0In0sCiAJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMSIsICJEaWdpbWljMSBFbmFibGUifSwKIAogCXsiQURDIFZpcnR1YWwgTGVmdDEiLCBOVUxMLCAiVFgxIENhcHR1cmUgUm91dGUifSwKQEAgLTg4OSw2ICsxMTU0LDI0IEBACiAJeyJBREMgVmlydHVhbCBMZWZ0MiIsIE5VTEwsICJUWDIgQ2FwdHVyZSBSb3V0ZSJ9LAogCXsiQURDIFZpcnR1YWwgUmlnaHQyIiwgTlVMTCwgIlRYMiBDYXB0dXJlIFJvdXRlIn0sCiAKKwkvKiBBbmFsb2cgYnlwYXNzIHJvdXRlcyAqLworCXsiUmlnaHQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKKwl7IkxlZnQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiUmlnaHQyIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKKwl7IkxlZnQyIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCisJeyJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiUmlnaHQxIEFuYWxvZyBMb29wYmFjayJ9LAorCXsiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkxlZnQxIEFuYWxvZyBMb29wYmFjayJ9LAorCXsiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0MiBBbmFsb2cgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0MiBBbmFsb2cgTG9vcGJhY2sifSwKKworCS8qIERpZ2l0YWwgYnlwYXNzIHJvdXRlcyAqLworCXsiUmlnaHQgRGlnaXRhbCBMb29wYmFjayIsICJWb2x1bWUiLCAiVFgxIENhcHR1cmUgUm91dGUifSwKKwl7IkxlZnQgRGlnaXRhbCBMb29wYmFjayIsICJWb2x1bWUiLCAiVFgxIENhcHR1cmUgUm91dGUifSwKKworCXsiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0IERpZ2l0YWwgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0IERpZ2l0YWwgTG9vcGJhY2sifSwKKwogfTsKIAogc3RhdGljIGludCB0d2w0MDMwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKQEAgLTkwMiw4MiArMTE4NSwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3Bvd2VyX3VwKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCBhbmFtaWNsLCByZWdtaXNjMSwgYnl0ZSwgcG9wbjsKLQlpbnQgaSA9IDA7Ci0KLQkvKiBzZXQgQ09ERUNQRFogdG8gdHVybiBvbiBjb2RlYyAqLwotCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKLQotCS8qIGluaXRpYXRlIG9mZnNldCBjYW5jZWxsYXRpb24gKi8KLQlhbmFtaWNsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwKLQkJYW5hbWljbCB8IFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpOwotCi0KLQkvKiB3YWl0IGZvciBvZmZzZXQgY2FuY2VsbGF0aW9uIHRvIGNvbXBsZXRlICovCi0JZG8gewotCQkvKiB0aGlzIHRha2VzIGEgbGl0dGxlIHdoaWxlLCBzbyBkb24ndCBzbGFtIGkyYyAqLwotCQl1ZGVsYXkoMjAwMCk7Ci0JCXR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAotCQkJCSAgICBUV0w0MDMwX1JFR19BTkFNSUNMKTsKLQl9IHdoaWxlICgoaSsrIDwgMTAwKSAmJgotCQkgKChieXRlICYgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkgPT0KLQkJICBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSk7Ci0KLQkvKiBhbnRpLXBvcCB3aGVuIGNoYW5naW5nIGFuYWxvZyBnYWluICovCi0JcmVnbWlzYzEgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xLAotCQlyZWdtaXNjMSB8IFRXTDQwMzBfU01PT1RIX0FOQVZPTF9FTik7Ci0KLQkvKiB0b2dnbGUgQ09ERUNQRFogYXMgcGVyIFRSTSAqLwotCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOwotCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKLQotCS8qIHByb2dyYW0gYW50aS1wb3Agd2l0aCBiaWFzIHJhbXAgZGVsYXkgKi8KLQlwb3BuID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQpOwotCXBvcG4gJj0gVFdMNDAzMF9SQU1QX0RFTEFZOwotCXBvcG4gfD0JVFdMNDAzMF9SQU1QX0RFTEFZXzY0NU1TOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLQlwb3BuIHw9CVRXTDQwMzBfVk1JRF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0KLQkvKiBlbmFibGUgYW50aS1wb3AgcmFtcCAqLwotCXBvcG4gfD0gVFdMNDAzMF9SQU1QX0VOOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLX0KLQotc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl9kb3duKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCBwb3BuOwotCi0JLyogZGlzYWJsZSBhbnRpLXBvcCByYW1wICovCi0JcG9wbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VUKTsKLQlwb3BuICY9IH5UV0w0MDMwX1JBTVBfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCi0JLyogZGlzYWJsZSBiaWFzIG91dCAqLwotCXBvcG4gJj0gflRXTDQwMzBfVk1JRF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0KLQkvKiBwb3dlciBkb3duICovCi0JdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7Ci19Ci0KIHN0YXRpYyBpbnQgdHdsNDAzMF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJdHdsNDAzMF9wb3dlcl91cChjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JCS8qIFRPRE86IGRldmVsb3AgYSB0d2w0MDMwX3ByZXBhcmUgZnVuY3Rpb24gKi8KKwkJdHdsNDAzMF9wb3dlcl91cChjb2RlYyk7CisJCWlmICh0d2w0MDMwLT5ieXBhc3Nfc3RhdGUpCisJCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDApOworCQllbHNlCisJCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQkvKiBUT0RPOiBkZXZlbG9wIGEgdHdsNDAzMF9zdGFuZGJ5IGZ1bmN0aW9uICovCi0JCXR3bDQwMzBfcG93ZXJfZG93bihjb2RlYyk7CisJCXR3bDQwMzBfcG93ZXJfdXAoY29kZWMpOworCQlpZiAodHdsNDAzMC0+YnlwYXNzX3N0YXRlKQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAwKTsKKwkJZWxzZQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQl0d2w0MDMwX3Bvd2VyX2Rvd24oY29kZWMpOwpAQCAtOTk0LDEwICsxMjIzLDkgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTggbW9kZSwgb2xkX21vZGUsIGZvcm1hdCwgb2xkX2Zvcm1hdDsKIAotCiAJLyogYml0IHJhdGUgKi8KIAlvbGRfbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsCiAJCQlUV0w0MDMwX1JFR19DT0RFQ19NT0RFKSAmIH5UV0w0MDMwX0NPREVDUERaOwpAQCAtMTAzOSw4ICsxMjY3LDkgQEAKIAogCWlmIChtb2RlICE9IG9sZF9tb2RlKSB7CiAJCS8qIGNoYW5nZSByYXRlIGFuZCBzZXQgQ09ERUNQRFogKi8KKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLCBtb2RlKTsKLQkJdHdsNDAzMF9zZXRfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CiAJfQogCiAJLyogc2FtcGxlIHNpemUgKi8KQEAgLTEwNjMsMTMgKzEyOTIsMTMgQEAKIAlpZiAoZm9ybWF0ICE9IG9sZF9mb3JtYXQpIHsKIAogCQkvKiBjbGVhciBDT0RFQ1BEWiBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0IChjb2RlYyByZXF1aXJlbWVudCkgKi8KLQkJdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAogCQkvKiBjaGFuZ2UgZm9ybWF0ICovCiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGLCBmb3JtYXQpOwogCiAJCS8qIHNldCBDT0RFQ1BEWiBhZnRlcndhcmRzICovCi0JCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExMzksMTMgKzEzNjgsMTMgQEAKIAlpZiAoZm9ybWF0ICE9IG9sZF9mb3JtYXQpIHsKIAogCQkvKiBjbGVhciBDT0RFQ1BEWiBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0IChjb2RlYyByZXF1aXJlbWVudCkgKi8KLQkJdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAogCQkvKiBjaGFuZ2UgZm9ybWF0ICovCiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGLCBmb3JtYXQpOwogCiAJCS8qIHNldCBDT0RFQ1BEWiBhZnRlcndhcmRzICovCi0JCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTE1NCw2ICsxMzgzLDEyIEBACiAjZGVmaW5lIFRXTDQwMzBfUkFURVMJIChTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwKQogI2RlZmluZSBUV0w0MDMwX0ZPUk1BVFMJIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB0d2w0MDMwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHR3bDQwMzBfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gdHdsNDAzMF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHR3bDQwMzBfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdHdsNDAzMF9kYWkgPSB7CiAJLm5hbWUgPSAidHdsNDAzMCIsCiAJLnBsYXliYWNrID0gewpAQCAtMTE2OCwxOCArMTQwMywxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gVFdMNDAzMF9SQVRFUywKIAkJLmZvcm1hdHMgPSBUV0w0MDMwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gdHdsNDAzMF9od19wYXJhbXMsCi0JCS5zZXRfc3lzY2xrID0gdHdsNDAzMF9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSB0d2w0MDMwX3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJnR3bDQwMzBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh0d2w0MDMwX2RhaSk7CiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0xMTg5LDcgKzE0MjAsNyBAQAogc3RhdGljIGludCB0d2w0MDMwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwpOwpAQCAtMTIwMyw3ICsxNDM0LDcgQEAKIAogc3RhdGljIGludCB0d2w0MDMwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVFdMNDAzMCBBdWRpbyBDb2RlYyBpbml0IFxuIik7CkBAIC0xMjMzLDcgKzE0NjQsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCXR3bDQwMzBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdHdsNDAzMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh0d2w0MDMwX3NuZF9jb250cm9scykpOwogCXR3bDQwMzBfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKQEAgLTEyNTgsMTIgKzE0OTAsMjAgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwOwogCiAJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwl0d2w0MDMwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR3bDQwMzBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh0d2w0MDMwID09IE5VTEwpIHsKKwkJa2ZyZWUoY29kZWMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gdHdsNDAzMDsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTEyNzcsMTEgKzE1MTcsMTMgQEAKIHN0YXRpYyBpbnQgdHdsNDAzMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXByaW50ayhLRVJOX0lORk8gIlRXTDQwMzAgQXVkaW8gQ29kZWMgcmVtb3ZlXG4iKTsKKwl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7CiAJa2ZyZWUoY29kZWMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaCBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCmluZGV4IDQ0MmU1YTguLjMzZGJiMTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCkBAIC0xNzAsNiArMTcwLDkgQEAKICNkZWZpbmUgVFdMNDAzMF9DTEsyNTZGU19FTgkJMHgwMgogI2RlZmluZSBUV0w0MDMwX0FJRl9FTgkJCTB4MDEKIAorLyogRUFSX0NUTCAoMHgyMSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9FQVJfR0FJTgkJMHgzMAorCiAvKiBIU19HQUlOX1NFVCAoMHgyMykgRmllbGRzICovCiAKICNkZWZpbmUgVFdMNDAzMF9IU1JfR0FJTgkJMHgwQwpAQCAtMTk4LDYgKzIwMSwxOCBAQAogI2RlZmluZSBUV0w0MDMwX1JBTVBfREVMQVlfMjU4MU1TCTB4MUMKICNkZWZpbmUgVFdMNDAzMF9SQU1QX0VOCQkJMHgwMgogCisvKiBQUkVETF9DVEwgKDB4MjUpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFRExfR0FJTgkJMHgzMAorCisvKiBQUkVEUl9DVEwgKDB4MjYpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFRFJfR0FJTgkJMHgzMAorCisvKiBQUkVDS0xfQ1RMICgweDI3KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRUNLTF9HQUlOCQkweDMwCisKKy8qIFBSRUNLUl9DVEwgKDB4MjgpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFQ0tSX0dBSU4JCTB4MzAKKwogLyogSEZMX0NUTCAoMHgyOSwgMHgyQSkgRmllbGRzICovCiAjZGVmaW5lIFRXTDQwMzBfSEZfQ1RMX0hCX0VOCQkweDA0CiAjZGVmaW5lIFRXTDQwMzBfSEZfQ1RMX0xPT1BfRU4JCTB4MDgKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKaW5kZXggYTJjNTA2NC4uZGRlZmI4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdWRhMTM0eF9wcml2ICp1ZGExMzR4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICptYXN0ZXJfcnVudGltZTsKIApAQCAtMjA2LDcgKzIwNiw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB1ZGExMzR4X3ByaXYgKnVkYTEzNHggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHVkYTEzNHgtPm1hc3Rlcl9zdWJzdHJlYW0gPT0gc3Vic3RyZWFtKQpAQCAtMjIxLDcgKzIyMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB1ZGExMzR4X3ByaXYgKnVkYTEzNHggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXU4IGh3X3BhcmFtczsKIApAQCAtNDMxLDM4ICs0MzEsMTQgQEAKIFNPQ19TSU5HTEUoIkRDIEZpbHRlciBFbmFibGUgU3dpdGNoIiwgVURBMTM0WF9TVEFUVVMwLCAwLCAxLCAwKSwKIH07CiAKLXN0YXRpYyBpbnQgdWRhMTM0eF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGksIG47Ci0JY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmN0cmxzOwotCXN0cnVjdCB1ZGExMzR4X3BsYXRmb3JtX2RhdGEgKnBkID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQotCXN3aXRjaCAocGQtPm1vZGVsKSB7Ci0JY2FzZSBVREExMzRYX1VEQTEzNDA6Ci0JY2FzZSBVREExMzRYX1VEQTEzNDQ6Ci0JCW4gPSBBUlJBWV9TSVpFKHVkYTEzNDBfc25kX2NvbnRyb2xzKTsKLQkJY3RybHMgPSB1ZGExMzQwX3NuZF9jb250cm9sczsKLQkJYnJlYWs7Ci0JY2FzZSBVREExMzRYX1VEQTEzNDE6Ci0JCW4gPSBBUlJBWV9TSVpFKHVkYTEzNDFfc25kX2NvbnRyb2xzKTsKLQkJY3RybHMgPSB1ZGExMzQxX3NuZF9jb250cm9sczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyB1bmtvd24gY29kZWMgdHlwZTogJWQiLAotCQkgICAgICAgX19mdW5jX18sIHBkLT5tb2RlbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJmN0cmxzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM0eF9kYWlfb3BzID0geworCS5zdGFydHVwCT0gdWRhMTM0eF9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHVkYTEzNHhfc2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IHVkYTEzNHhfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB1ZGExMzR4X211dGUsCisJLnNldF9zeXNjbGsJPSB1ZGExMzR4X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gdWRhMTM0eF9zZXRfZGFpX2ZtdCwKK307CiAKIHN0cnVjdCBzbmRfc29jX2RhaSB1ZGExMzR4X2RhaSA9IHsKIAkubmFtZSA9ICJVREExMzRYIiwKQEAgLTQ4MywxNCArNDU5LDcgQEAKIAkJLmZvcm1hdHMgPSBVREExMzRYX0ZPUk1BVFMsCiAJfSwKIAkvKiBwY20gb3BlcmF0aW9ucyAqLwotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gdWRhMTM0eF9zdGFydHVwLAotCQkuc2h1dGRvd24gPSB1ZGExMzR4X3NodXRkb3duLAotCQkuaHdfcGFyYW1zID0gdWRhMTM0eF9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB1ZGExMzR4X211dGUsCi0JCS5zZXRfc3lzY2xrID0gdWRhMTM0eF9zZXRfZGFpX3N5c2NsaywKLQkJLnNldF9mbXQgPSB1ZGExMzR4X3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJnVkYTEzNHhfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MKHVkYTEzNHhfZGFpKTsKIApAQCAtNTI1LDExICs0OTQsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNvY2Rldi0+Y29kZWMgPT0gTlVMTCkKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gcmV0OwogCi0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWRhMTM0eF9wcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVkYTEzNHggPT0gTlVMTCkKQEAgLTU3Miw3ICs1NDEsMjIgQEAKIAkJZ290byBwY21fZXJyOwogCX0KIAotCXJldCA9IHVkYTEzNHhfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzd2l0Y2ggKHBkLT5tb2RlbCkgeworCWNhc2UgVURBMTM0WF9VREExMzQwOgorCWNhc2UgVURBMTM0WF9VREExMzQ0OgorCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdWRhMTM0MF9zbmRfY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUodWRhMTM0MF9zbmRfY29udHJvbHMpKTsKKwlicmVhazsKKwljYXNlIFVEQTEzNFhfVURBMTM0MToKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzNDFfc25kX2NvbnRyb2xzLAorCQkJCQlBUlJBWV9TSVpFKHVkYTEzNDFfc25kX2NvbnRyb2xzKSk7CisJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyB1bmtvd24gY29kZWMgdHlwZTogJWQiLAorCQkJX19mdW5jX18sIHBkLT5tb2RlbCk7CisJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVREExMzRYOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY29udHJvbHNcbiIpOwogCQlnb3RvIHBjbV9lcnI7CkBAIC02MDIsNyArNTg2LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM0eF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC02MjIsNyArNjA2LDcgQEAKIAkJCQkJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKQEAgLTYzMiw3ICs2MTYsNyBAQAogc3RhdGljIGludCB1ZGExMzR4X3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT04pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwppbmRleCBlNmJmMDg0Li41YjIxNTk0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTM1LDcgKzM2LDggQEAKIAogI2luY2x1ZGUgInVkYTEzODAuaCIKIAotI2RlZmluZSBVREExMzgwX1ZFUlNJT04gIjAuNiIKK3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdWRhMTM4MF93b3JrOworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp1ZGExMzgwX2NvZGVjOwogCiAvKgogICogdWRhMTM4MCByZWdpc3RlciBjYWNoZQpAQCAtNTIsNiArNTQsOCBAQAogCTB4MDAwMCwgMHg4MDAwLCAweDAwMDIsIDB4MDAwMCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVkYTEzODBfY2FjaGVfZGlydHk7CisKIC8qCiAgKiByZWFkIHVkYTEzODAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtNzMsOCArNzcsMTEgQEAKIAl1MTYgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKIAlpZiAocmVnID49IFVEQTEzODBfQ0FDSEVSRUdOVU0pCiAJCXJldHVybjsKKwlpZiAoKHJlZyA+PSAweDEwKSAmJiAoY2FjaGVbcmVnXSAhPSB2YWx1ZSkpCisJCXNldF9iaXQocmVnIC0gMHgxMCwgJnVkYTEzODBfY2FjaGVfZGlydHkpOwogCWNhY2hlW3JlZ10gPSB2YWx1ZTsKIH0KIApAQCAtMTEzLDYgKzEyMCw4IEBACiAJCQkJCShkYXRhWzBdPDw4KSB8IGRhdGFbMV0pOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJaWYgKHJlZyA+PSAweDEwKQorCQkJY2xlYXJfYml0KHJlZyAtIDB4MTAsICZ1ZGExMzgwX2NhY2hlX2RpcnR5KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlPOwpAQCAtMTIwLDYgKzEyOSwyMCBAQAogCiAjZGVmaW5lIHVkYTEzODBfcmVzZXQoYykJdWRhMTM4MF93cml0ZShjLCBVREExMzgwX1JFU0VULCAwKQogCitzdGF0aWMgdm9pZCB1ZGExMzgwX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBiaXQsIHJlZzsKKworCWZvcl9lYWNoX2JpdChiaXQsICZ1ZGExMzgwX2NhY2hlX2RpcnR5LCBVREExMzgwX0NBQ0hFUkVHTlVNIC0gMHgxMCkgeworCQlyZWcgPSAweDEwICsgYml0OworCQlwcl9kZWJ1ZygidWRhMTM4MDogZmx1c2ggcmVnICV4IHZhbCAleDpcbiIsIHJlZywKKwkJCQl1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKHVkYTEzODBfY29kZWMsIHJlZykpOworCQl1ZGExMzgwX3dyaXRlKHVkYTEzODBfY29kZWMsIHJlZywKKwkJCQl1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKHVkYTEzODBfY29kZWMsIHJlZykpOworCQljbGVhcl9iaXQoYml0LCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSk7CisJfQorfQorCiAvKiBkZWNsYXJhdGlvbnMgb2YgQUxTQSByZWdfZWxlbV9SRUFMIGNvbnRyb2xzICovCiBzdGF0aWMgY29uc3QgY2hhciAqdWRhMTM4MF9kZWVtcFtdID0gewogCSJOb25lIiwKQEAgLTI1NCw3ICsyNzcsNiBAQAogCVNPQ19TSU5HTEUoIkRBQyBQb2xhcml0eSBpbnZlcnRpbmcgU3dpdGNoIiwgVURBMTM4MF9NSVhFUiwgMTUsIDEsIDApLAkvKiBEQV9QT0xfSU5WICovCiAJU09DX0VOVU0oIk5vaXNlIFNoYXBlciIsIHVkYTEzODBfc2VsX25zX2VudW0pLAkJCQkvKiBTRUxfTlMgKi8KIAlTT0NfRU5VTSgiRGlnaXRhbCBNaXhlciBTaWduYWwgQ29udHJvbCIsIHVkYTEzODBfbWl4X2VudW0pLAkJLyogTUlYX1BPUywgTUlYICovCi0JU09DX1NJTkdMRSgiU2lsZW5jZSBTd2l0Y2giLCBVREExMzgwX01JWEVSLCA3LCAxLCAwKSwJCQkvKiBTSUxFTkNFLCBmb3JjZSBEQUMgb3V0cHV0IHRvIHNpbGVuY2UgKi8KIAlTT0NfU0lOR0xFKCJTaWxlbmNlIERldGVjdG9yIFN3aXRjaCIsIFVEQTEzODBfTUlYRVIsIDYsIDEsIDApLAkJLyogU0RFVF9PTiAqLwogCVNPQ19FTlVNKCJTaWxlbmNlIERldGVjdG9yIFNldHRpbmciLCB1ZGExMzgwX3NkZXRfZW51bSksCQkvKiBTRF9WQUxVRSAqLwogCVNPQ19FTlVNKCJPdmVyc2FtcGxpbmcgSW5wdXQiLCB1ZGExMzgwX29zX2VudW0pLAkJCS8qIE9TICovCkBAIC0yNzEsMjEgKzI5Myw2IEBACiAJU09DX1NJTkdMRSgiQUdDIFN3aXRjaCIsIFVEQTEzODBfQUdDLCAwLCAxLCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB1ZGExMzgwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHVkYTEzODBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ1ZGExMzgwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBJbnB1dCBtdXggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB1ZGExMzgwX2lucHV0X211eF9jb250cm9sID0KIAlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHVkYTEzODBfaW5wdXRfc2VsX2VudW0pOwpAQCAtMzcxLDcgKzM3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKK3N0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdF9ib3RoKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQl1bnNpZ25lZCBpbnQgZm10KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CkBAIC0zODEsMTYgKzM4OCw3NSBAQAogCWlmYWNlID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9JRkFDRSk7CiAJaWZhY2UgJj0gfihSMDFfU0ZPUklfTUFTSyB8IFIwMV9TSU0gfCBSMDFfU0ZPUk9fTUFTSyk7CiAKLQkvKiBGSVhNRTogaG93IHRvIHNlbGVjdCBJMlMgZm9yIERBVEFPIGFuZCBNU0IgZm9yIERBVEFJIGNvcnJlY3RseT8gKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CiAJCWlmYWNlIHw9IFIwMV9TRk9SSV9JMlMgfCBSMDFfU0ZPUk9fSTJTOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0xTQjoKLQkJaWZhY2UgfD0gUjAxX1NGT1JJX0xTQjE2IHwgUjAxX1NGT1JPX0kyUzsKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX0xTQjE2IHwgUjAxX1NGT1JPX0xTQjE2OwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX01TQjoKLQkJaWZhY2UgfD0gUjAxX1NGT1JJX01TQiB8IFIwMV9TRk9ST19JMlM7CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9NU0IgfCBSMDFfU0ZPUk9fTVNCOworCX0KKworCS8qIERBVEFJIGlzIHNsYXZlIG9ubHksIHNvIGluIHNpbmdsZS1saW5rIG1vZGUsIHRoaXMgaGFzIHRvIGJlIHNsYXZlICovCisJaWYgKChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgIT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0lGQUNFLCBpZmFjZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZGExMzgwX3NldF9kYWlfZm10X3BsYXliYWNrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IGlmYWNlOworCisJLyogc2V0IHVwIERBSSBiYXNlZCB1cG9uIGZtdCAqLworCWlmYWNlID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9JRkFDRSk7CisJaWZhY2UgJj0gflIwMV9TRk9SSV9NQVNLOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZSB8PSBSMDFfU0ZPUklfSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xTQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX0xTQjE2OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX01TQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX01TQjsKKwl9CisKKwkvKiBEQVRBSSBpcyBzbGF2ZSBvbmx5LCBzbyB0aGlzIGhhcyB0byBiZSBzbGF2ZSAqLworCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9JRkFDRSwgaWZhY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdF9jYXB0dXJlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IGlmYWNlOworCisJLyogc2V0IHVwIERBSSBiYXNlZCB1cG9uIGZtdCAqLworCWlmYWNlID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9JRkFDRSk7CisJaWZhY2UgJj0gfihSMDFfU0lNIHwgUjAxX1NGT1JPX01BU0spOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZSB8PSBSMDFfU0ZPUk9fSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xTQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JPX0xTQjE2OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX01TQjoKKwkJaWZhY2UgfD0gUjAxX1NGT1JPX01TQjsKIAl9CiAKIAlpZiAoKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSA9PSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKQpAQCAtNDAxLDQxICs0NjcsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEZsdXNoIHJlZyBjYWNoZQotICogV2UgY2FuIG9ubHkgd3JpdGUgdGhlIGludGVycG9sYXRvciBhbmQgZGVjaW1hdG9yIHJlZ2lzdGVycwotICogd2hlbiB0aGUgREFJIGlzIGJlaW5nIGNsb2NrZWQgYnkgdGhlIENQVSBEQUkuIEl0J3MgdXAgdG8gdGhlCi0gKiBtYWNoaW5lIGFuZCBjcHUgREFJIGRyaXZlciB0byBkbyB0aGlzIGJlZm9yZSB3ZSBhcmUgY2FsbGVkLgotICovCi1zdGF0aWMgaW50IHVkYTEzODBfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgaW50IHVkYTEzODBfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmVnLCByZWdfc3RhcnQsIHJlZ19lbmQsIGNsazsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCWludCBtaXhlciA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfTUlYRVIpOwogCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJcmVnX3N0YXJ0ID0gVURBMTM4MF9NVk9MOwotCQlyZWdfZW5kID0gVURBMTM4MF9NSVhFUjsKLQl9IGVsc2UgewotCQlyZWdfc3RhcnQgPSBVREExMzgwX0RFQzsKLQkJcmVnX2VuZCA9IFVEQTEzODBfQUdDOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXVkYTEzODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSLAorCQkJCQltaXhlciAmIH5SMTRfU0lMRU5DRSk7CisJCXNjaGVkdWxlX3dvcmsoJnVkYTEzODBfd29yayk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXVkYTEzODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSLAorCQkJCQltaXhlciB8IFIxNF9TSUxFTkNFKTsKKwkJc2NoZWR1bGVfd29yaygmdWRhMTM4MF93b3JrKTsKKwkJYnJlYWs7CiAJfQotCi0JLyogRklYTUUgZGlzYWJsZSBEQUNfQ0xLICovCi0JY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGsgJiB+UjAwX0RBQ19DTEspOwotCi0JZm9yIChyZWcgPSByZWdfc3RhcnQ7IHJlZyA8PSByZWdfZW5kOyByZWcrKykgewotCQlwcl9kZWJ1ZygidWRhMTM4MDogZmx1c2ggcmVnICV4IHZhbCAleDoiLCByZWcsCi0JCQkJdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKSk7Ci0JCXVkYTEzODBfd3JpdGUoY29kZWMsIHJlZywgdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKSk7Ci0JfQotCi0JLyogRklYTUUgZW5hYmxlIERBQ19DTEsgKi8KLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrIHwgUjAwX0RBQ19DTEspOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0NSw3ICs0OTgsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwogCiAJLyogc2V0IFdTUExMIHBvd2VyIGFuZCBkaXZpZGVyIGlmIHJ1bm5pbmcgZnJvbSB0aGlzIGNsb2NrICovCkBAIC00ODQsNyArNTM3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKIAogCS8qIHNodXQgZG93biBXU1BMTCBwb3dlciBpZiBydW5uaW5nIGZyb20gdGhpcyBjbG9jayAqLwpAQCAtNTAxLDI0ICs1NTQsNiBAQAogCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGspOwogfQogCi1zdGF0aWMgaW50IHVkYTEzODBfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKLQl1MTYgbXV0ZV9yZWcgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0RFRU1QKSAmIH5SMTNfTVRNOwotCi0JLyogRklYTUU6IG11dGUoY29kZWMsMCkgaXMgY2FsbGVkIHdoZW4gdGhlIG1hZ2ljaWFuIGNsb2NrIGlzIGFscmVhZHkKLQkgKiBzZXQgdG8gV1NQTEwsIGJ1dCBmb3Igc29tZSB1bmtub3duIHJlYXNvbiB3cml0aW5nIHRvIGludGVycG9sYXRvcgotCSAqIHJlZ2lzdGVycyB3b3JrcyBvbmx5IHdoZW4gY2xvY2tlZCBieSBTWVNDTEsgKi8KLQl1MTYgY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCB+UjAwX0RBQ19DTEsgJiBjbGspOwotCWlmIChtdXRlKQotCQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0RFRU1QLCBtdXRlX3JlZyB8IFIxM19NVE0pOwotCWVsc2UKLQkJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9ERUVNUCwgbXV0ZV9yZWcpOwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGspOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHVkYTEzODBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewpAQCAtNTQ0LDYgKzU3OSwyNyBAQAogCQkgICAgICAgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8XAogCQkgICAgICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM4MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gdWRhMTM4MF9wY21fc2h1dGRvd24sCisJLnRyaWdnZXIJPSB1ZGExMzgwX3RyaWdnZXIsCisJLnNldF9mbXQJPSB1ZGExMzgwX3NldF9kYWlfZm10X2JvdGgsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB1ZGExMzgwX2RhaV9vcHNfcGxheWJhY2sgPSB7CisJLmh3X3BhcmFtcwk9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHVkYTEzODBfdHJpZ2dlciwKKwkuc2V0X2ZtdAk9IHVkYTEzODBfc2V0X2RhaV9mbXRfcGxheWJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB1ZGExMzgwX2RhaV9vcHNfY2FwdHVyZSA9IHsKKwkuaHdfcGFyYW1zCT0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHVkYTEzODBfcGNtX3NodXRkb3duLAorCS50cmlnZ2VyCT0gdWRhMTM4MF90cmlnZ2VyLAorCS5zZXRfZm10CT0gdWRhMTM4MF9zZXRfZGFpX2ZtdF9jYXB0dXJlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHVkYTEzODBfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiVURBMTM4MCIsCkBAIC01NTksMTMgKzYxNSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBVREExMzgwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdWRhMTM4MF9wY21fc2h1dGRvd24sCi0JCS5wcmVwYXJlID0gdWRhMTM4MF9wY21fcHJlcGFyZSwKLQkJLmRpZ2l0YWxfbXV0ZSA9IHVkYTEzODBfbXV0ZSwKLQkJLnNldF9mbXQgPSB1ZGExMzgwX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZ1ZGExMzgwX2RhaV9vcHMsCiB9LAogeyAvKiBwbGF5YmFjayBvbmx5IC0gZHVhbCBpbnRlcmZhY2UgKi8KIAkubmFtZSA9ICJVREExMzgwIiwKQEAgLTU3NiwxMyArNjI2LDcgQEAKIAkJLnJhdGVzID0gVURBMTM4MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHVkYTEzODBfcGNtX3NodXRkb3duLAotCQkucHJlcGFyZSA9IHVkYTEzODBfcGNtX3ByZXBhcmUsCi0JCS5kaWdpdGFsX211dGUgPSB1ZGExMzgwX211dGUsCi0JCS5zZXRfZm10ID0gdWRhMTM4MF9zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmdWRhMTM4MF9kYWlfb3BzX3BsYXliYWNrLAogfSwKIHsgLyogY2FwdHVyZSBvbmx5IC0gZHVhbCBpbnRlcmZhY2UqLwogCS5uYW1lID0gIlVEQTEzODAiLApAQCAtNTkzLDEyICs2MzcsNyBAQAogCQkucmF0ZXMgPSBVREExMzgwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdWRhMTM4MF9wY21fc2h1dGRvd24sCi0JCS5wcmVwYXJlID0gdWRhMTM4MF9wY21fcHJlcGFyZSwKLQkJLnNldF9mbXQgPSB1ZGExMzgwX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZ1ZGExMzgwX2RhaV9vcHNfY2FwdHVyZSwKIH0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodWRhMTM4MF9kYWkpOwpAQCAtNjA2LDcgKzY0NSw3IEBACiBzdGF0aWMgaW50IHVkYTEzODBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTYxNSw3ICs2NTQsNyBAQAogc3RhdGljIGludCB1ZGExMzgwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC02MzcsNyArNjc2LDcgQEAKICAqLwogc3RhdGljIGludCB1ZGExMzgwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsIGludCBkYWNfY2xrKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIlVEQTEzODAiOwpAQCAtNjU1LDYgKzY5NCw5IEBACiAJY29kZWMtPnJlZ19jYWNoZV9zdGVwID0gMTsKIAl1ZGExMzgwX3Jlc2V0KGNvZGVjKTsKIAorCXVkYTEzODBfY29kZWMgPSBjb2RlYzsKKwlJTklUX1dPUksoJnVkYTEzODBfd29yaywgdWRhMTM4MF9mbHVzaF93b3JrKTsKKwogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02NzUsNyArNzE3LDggQEAKIAl9CiAKIAkvKiB1ZGExMzgwIGluaXQgKi8KLQl1ZGExMzgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzODBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodWRhMTM4MF9zbmRfY29udHJvbHMpKTsKIAl1ZGExMzgwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03MDIsNyArNzQ1LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHVkYTEzODBfc29jZGV2OwogCXN0cnVjdCB1ZGExMzgwX3NldHVwX2RhdGEgKnNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNzg2LDE0ICs4MjksMTIgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IHJldDsKIAotCXByX2luZm8oIlVEQTEzODAgQXVkaW8gQ29kZWMgJXMiLCBVREExMzgwX1ZFUlNJT04pOwotCiAJc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTgxNyw3ICs4NTgsNyBAQAogc3RhdGljIGludCB1ZGExMzgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXVkYTEzODBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKaW5kZXggMzVkOTk3NS4uM2IxZDA5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCkBAIC01MSwxMCArNTEsMTcgQEAKIAl1MTYgbXV0ZTsKIH07CiAKK3N0cnVjdCB3bTgzNTBfamFja19kYXRhIHsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOworCWludCByZXBvcnQ7Cit9OworCiBzdHJ1Y3Qgd204MzUwX2RhdGEgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwogCXN0cnVjdCB3bTgzNTBfb3V0cHV0IG91dDE7CiAJc3RydWN0IHdtODM1MF9vdXRwdXQgb3V0MjsKKwlzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSBocGw7CisJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgaHByOwogCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoc3VwcGx5X25hbWVzKV07CiB9OwogCkBAIC03NzUsMjEgKzc4Miw2IEBACiAJeyJCZWVwIiwgTlVMTCwgIklOM1IgUEdBIn0sCiB9OwogCi1zdGF0aWMgaW50IHdtODM1MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTgzNTBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHdtODM1MF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJaW50IHJldDsKQEAgLTEzMDksNyArMTMwMSw3IEBACiBzdGF0aWMgaW50IHdtODM1MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODM1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC0xMzE4LDcgKzEzMTAsNyBAQAogc3RhdGljIGludCB3bTgzNTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTgzNTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIApAQCAtMTMyOCw2ICsxMzIwLDk1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHdtODM1MF9ocF9qYWNrX2hhbmRsZXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGRhdGE7CisJdTE2IHJlZzsKKwlpbnQgcmVwb3J0OworCWludCBtYXNrOworCXN0cnVjdCB3bTgzNTBfamFja19kYXRhICpqYWNrID0gTlVMTDsKKworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKwkJamFjayA9ICZwcml2LT5ocGw7CisJCW1hc2sgPSBXTTgzNTBfSkFDS19MX0xWTDsKKwkJYnJlYWs7CisKKwljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SOgorCQlqYWNrID0gJnByaXYtPmhwcjsKKwkJbWFzayA9IFdNODM1MF9KQUNLX1JfTFZMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWlmICghamFjay0+amFjaykgeworCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIkphY2sgaW50ZXJydXB0IGNhbGxlZCB3aXRoIG5vIGphY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRGVib3VuY2UgKi8KKwltc2xlZXAoMjAwKTsKKworCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9KQUNLX1BJTl9TVEFUVVMpOworCWlmIChyZWcgJiBtYXNrKQorCQlyZXBvcnQgPSBqYWNrLT5yZXBvcnQ7CisJZWxzZQorCQlyZXBvcnQgPSAwOworCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCByZXBvcnQsIGphY2stPnJlcG9ydCk7Cit9CisKKy8qKgorICogd204MzUwX2hwX2phY2tfZGV0ZWN0IC0gRW5hYmxlIGhlYWRwaG9uZSBqYWNrIGRldGVjdGlvbi4KKyAqCisgKiBAY29kZWM6ICBXTTgzNTAgY29kZWMKKyAqIEB3aGljaDogIGxlZnQgb3IgcmlnaHQgamFjayBkZXRlY3Qgc2lnbmFsCisgKiBAamFjazogICBqYWNrIHRvIHJlcG9ydCBkZXRlY3Rpb24gZXZlbnRzIG9uCisgKiBAcmVwb3J0OiB2YWx1ZSB0byByZXBvcnQKKyAqCisgKiBFbmFibGVzIHRoZSBoZWFkcGhvbmUgamFjayBkZXRlY3Rpb24gb2YgdGhlIFdNODM1MC4KKyAqLworaW50IHdtODM1MF9ocF9qYWNrX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGVudW0gd204MzUwX2phY2sgd2hpY2gsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCByZXBvcnQpCit7CisJc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCWludCBpcnE7CisJaW50IGVuYTsKKworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIFdNODM1MF9KREw6CisJCXByaXYtPmhwbC5qYWNrID0gamFjazsKKwkJcHJpdi0+aHBsLnJlcG9ydCA9IHJlcG9ydDsKKwkJaXJxID0gV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0w7CisJCWVuYSA9IFdNODM1MF9KRExfRU5BOworCQlicmVhazsKKworCWNhc2UgV004MzUwX0pEUjoKKwkJcHJpdi0+aHByLmphY2sgPSBqYWNrOworCQlwcml2LT5ocHIucmVwb3J0ID0gcmVwb3J0OworCQlpcnEgPSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjsKKwkJZW5hID0gV004MzUwX0pEUl9FTkE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1BPV0VSX01HTVRfNCwgV004MzUwX1RPQ0xLX0VOQSk7CisJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0pBQ0tfREVURUNULCBlbmEpOworCisJLyogU3luYyBzdGF0dXMgKi8KKwl3bTgzNTBfaHBfamFja19oYW5kbGVyKHdtODM1MCwgaXJxLCBwcml2KTsKKworCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgaXJxKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2hwX2phY2tfZGV0ZWN0KTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTgzNTBfY29kZWM7CiAKIHN0YXRpYyBpbnQgd204MzUwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xMzQyLDggKzE0MjMsOCBAQAogCiAJQlVHX09OKCF3bTgzNTBfY29kZWMpOwogCi0Jc29jZGV2LT5jb2RlYyA9IHdtODM1MF9jb2RlYzsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODM1MF9jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJd204MzUwID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIApAQCAtMTM4MSwxMyArMTQ2MiwyMSBAQAogCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9ST1VUMl9WT0xVTUUsCiAJCQlXTTgzNTBfT1VUMl9WVSB8IFdNODM1MF9PVVQyUl9NVVRFKTsKIAorCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CisJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MLAorCQkJICAgIHdtODM1MF9ocF9qYWNrX2hhbmRsZXIsIHByaXYpOworCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUiwKKwkJCSAgICB3bTgzNTBfaHBfamFja19oYW5kbGVyLCBwcml2KTsKKwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3bTgzNTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204MzUwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODM1MF9zbmRfY29udHJvbHMpKTsKIAl3bTgzNTBfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJd204MzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CkBAIC0xNDA5LDEwICsxNDk4LDIzIEBACiBzdGF0aWMgaW50IHdtODM1MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAorCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0pBQ0tfREVURUNULAorCQkJICBXTTgzNTBfSkRMX0VOQSB8IFdNODM1MF9KRFJfRU5BKTsKKwl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzQsIFdNODM1MF9UT0NMS19FTkEpOworCisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOworCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCisJcHJpdi0+aHBsLmphY2sgPSBOVUxMOworCXByaXYtPmhwci5qYWNrID0gTlVMTDsKKwogCS8qIGNhbmNlbCBhbnkgd29yayB3YWl0aW5nIHRvIGJlIHF1ZXVlZC4gKi8KIAlyZXQgPSBjYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrKTsKIApAQCAtMTQzNiw2ICsxNTM4LDE2IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTgzNTBfZGFpX29wcyA9IHsKKwkgLmh3X3BhcmFtcwk9IHdtODM1MF9wY21faHdfcGFyYW1zLAorCSAuZGlnaXRhbF9tdXRlCT0gd204MzUwX211dGUsCisJIC50cmlnZ2VyCT0gd204MzUwX3BjbV90cmlnZ2VyLAorCSAuc2V0X2ZtdAk9IHdtODM1MF9zZXRfZGFpX2ZtdCwKKwkgLnNldF9zeXNjbGsJPSB3bTgzNTBfc2V0X2RhaV9zeXNjbGssCisJIC5zZXRfcGxsCT0gd204MzUwX3NldF9mbGwsCisJIC5zZXRfY2xrZGl2CT0gd204MzUwX3NldF9jbGtkaXYsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204MzUwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTgzNTAiLAogCS5wbGF5YmFjayA9IHsKQEAgLTE0NTIsMTUgKzE1NjQsNyBAQAogCQkgLnJhdGVzID0gV004MzUwX1JBVEVTLAogCQkgLmZvcm1hdHMgPSBXTTgzNTBfRk9STUFUUywKIAkgfSwKLQkub3BzID0gewotCQkgLmh3X3BhcmFtcyA9IHdtODM1MF9wY21faHdfcGFyYW1zLAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODM1MF9tdXRlLAotCQkgLnRyaWdnZXIgPSB3bTgzNTBfcGNtX3RyaWdnZXIsCi0JCSAuc2V0X2ZtdCA9IHdtODM1MF9zZXRfZGFpX2ZtdCwKLQkJIC5zZXRfc3lzY2xrID0gd204MzUwX3NldF9kYWlfc3lzY2xrLAotCQkgLnNldF9wbGwgPSB3bTgzNTBfc2V0X2ZsbCwKLQkJIC5zZXRfY2xrZGl2ID0gd204MzUwX3NldF9jbGtkaXYsCi0JIH0sCisJLm9wcyA9ICZ3bTgzNTBfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGFpKTsKIApAQCAtMTQ3Miw3ICsxNTc2LDcgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODM1MCk7CiAKLXN0YXRpYyBpbnQgd204MzUwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTgzNTBfY29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXY7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaAppbmRleCBjYzI4ODdhLi5kMTFiZDkyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmgKQEAgLTE3LDQgKzE3LDEyIEBACiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODM1MF9kYWk7CiBleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204MzUwOwogCitlbnVtIHdtODM1MF9qYWNrIHsKKwlXTTgzNTBfSkRMID0gMSwKKwlXTTgzNTBfSkRSID0gMiwKK307CisKK2ludCB3bTgzNTBfaHBfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBlbnVtIHdtODM1MF9qYWNrIHdoaWNoLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTBlZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYwpAQCAtMCwwICsxLDE1ODIgQEAKKy8qCisgKiB3bTg0MDAuYyAgLS0gIFdNODQwMCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204NDAwLWF1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1wcml2YXRlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgIndtODQwMC5oIgorCisvKiBGYWtlIHJlZ2lzdGVyIGZvciBpbnRlcm5hbCBzdGF0ZSAqLworI2RlZmluZSBXTTg0MDBfSU5URFJJVkJJVFMgICAgICAoV004NDAwX1JFR0lTVEVSX0NPVU5UICsgMSkKKyNkZWZpbmUgV004NDAwX0lOTUlYTF9QV1IJCQkwCisjZGVmaW5lIFdNODQwMF9BSU5MTVVYX1BXUgkJCTEKKyNkZWZpbmUgV004NDAwX0lOTUlYUl9QV1IJCQkyCisjZGVmaW5lIFdNODQwMF9BSU5STVVYX1BXUgkJCTMKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHBvd2VyW10gPSB7CisJeworCQkuc3VwcGx5ID0gIkkyUzFWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkkyUzJWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkRDVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJBVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJGTExWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkhQVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJTUEtWREQiLAorCX0sCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg0MDBfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJc3RydWN0IHdtODQwMCAqd204NDAwOworCXUxNiBmYWtlX3JlZ2lzdGVyOworCXVuc2lnbmVkIGludCBzeXNjbGs7CisJdW5zaWduZWQgaW50IHBjbWNsazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlpbnQgZmxsX2luLCBmbGxfb3V0OworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgd204NDAwX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCWlmIChyZWcgPT0gV004NDAwX0lOVERSSVZCSVRTKQorCQlyZXR1cm4gd204NDAwLT5mYWtlX3JlZ2lzdGVyOworCWVsc2UKKwkJcmV0dXJuIHdtODQwMF9yZWdfcmVhZCh3bTg0MDAtPndtODQwMCwgcmVnKTsKK30KKworLyoKKyAqIHdyaXRlIHRvIHRoZSB3bTg0MDAgcmVnaXN0ZXIgc3BhY2UKKyAqLworc3RhdGljIGludCB3bTg0MDBfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocmVnID09IFdNODQwMF9JTlREUklWQklUUykgeworCQl3bTg0MDAtPmZha2VfcmVnaXN0ZXIgPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLT53bTg0MDAsIHJlZywgMHhmZmZmLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODQwMF9jb2RlY19yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJd204NDAwX3Jlc2V0X2NvZGVjX3JlZ19jYWNoZSh3bTg0MDAtPndtODQwMCk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIocmVjX21peF90bHYsIC0xNTAwLCA2MDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGluX3BnYV90bHYsIC0xNjUwLCAzMDAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfbWl4X3RsdiwgLTIxMDAsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9wZ2FfdGx2LCAtNzMwMCwgNjAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfb21peF90bHYsIC02MDAsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9kYWNfdGx2LCAtNzE2MywgMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIoaW5fYWRjX3RsdiwgLTcxNjMsIDE3NjMpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9zaWRldG9uZV90bHYsIC0zNjAwLCAwKTsKKworc3RhdGljIGludCB3bTg0MDBfb3V0cGdhX3B1dF92b2xzd192dShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisgICAgICAgIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCByZWcgPSBtYy0+cmVnOworICAgICAgICBpbnQgcmV0OworICAgICAgICB1MTYgdmFsOworCisgICAgICAgIHJldCA9IHNuZF9zb2NfcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgLyogbm93IGhpdCB0aGUgdm9sdW1lIHVwZGF0ZSBiaXRzIChhbHdheXMgYml0IDgpICovCisgICAgICAgIHZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCByZWcpOworICAgICAgICByZXR1cm4gd204NDAwX3dyaXRlKGNvZGVjLCByZWcsIHZhbCB8IDB4MDEwMCk7Cit9CisKKyNkZWZpbmUgV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoeG5hbWUsIHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0LCB0bHZfYXJyYXkpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfFwKKwkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCisJLnRsdi5wID0gKHRsdl9hcnJheSksIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAorCS5nZXQgPSBzbmRfc29jX2dldF92b2xzdywgLnB1dCA9IHdtODQwMF9vdXRwZ2FfcHV0X3ZvbHN3X3Z1LCBcCisJLnByaXZhdGVfdmFsdWUgPSBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSB9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9kaWdpdGFsX3NpZGV0b25lW10gPQorCXsiTm9uZSIsICJMZWZ0IEFEQyIsICJSaWdodCBBREMiLCAiUmVzZXJ2ZWQifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfbGVmdF9kaWdpdGFsX3NpZGV0b25lX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwkJV004NDAwX0FEQ19UT19EQUNMX1NISUZULCAyLCB3bTg0MDBfZGlnaXRhbF9zaWRldG9uZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX3JpZ2h0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoV004NDAwX0RJR0lUQUxfU0lERV9UT05FLAorCQlXTTg0MDBfQURDX1RPX0RBQ1JfU0hJRlQsIDIsIHdtODQwMF9kaWdpdGFsX3NpZGV0b25lKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9hZGNtb2RlW10gPQorCXsiSGktZmkgbW9kZSIsICJWb2ljZSBtb2RlIDEiLCAiVm9pY2UgbW9kZSAyIiwgIlZvaWNlIG1vZGUgMyJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9yaWdodF9hZGNtb2RlX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFdNODQwMF9BRENfQ1RSTCwgV004NDAwX0FEQ19IUEZfQ1VUX1NISUZULCAzLCB3bTg0MDBfYWRjbW9kZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfc25kX2NvbnRyb2xzW10gPSB7CisvKiBJTk1JWEwgKi8KK1NPQ19TSU5HTEUoIkxJTjEyIFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMTJNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKK1NPQ19TSU5HTEUoIkxJTjM0IFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMzRNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKKy8qIElOTUlYUiAqLworU09DX1NJTkdMRSgiUklOMTIgUEdBIEJvb3N0IiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX1IxMk1OQlNUX1NISUZULAorCSAgIDEsIDApLAorU09DX1NJTkdMRSgiUklOMzQgUEdBIEJvb3N0IiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX1IzNE1OQlNUX1NISUZULAorCSAgIDEsIDApLAorCisvKiBMT01JWCAqLworU09DX1NJTkdMRV9UTFYoIkxPTUlYIExJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVIzLAorCVdNODQwMF9MTEkzTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBSSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVIzLAorCVdNODQwMF9MUjEyTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBMSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVIzLAorCVdNODQwMF9MTDEyTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBSSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNSwKKwlXTTg0MDBfTFJJM0xPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggQUlOUk1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjUsCisJV004NDAwX0xSQkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggQUlOTE1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjUsCisJV004NDAwX0xSQkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCisKKy8qIFJPTUlYICovCitTT0NfU0lOR0xFX1RMVigiUk9NSVggUklOMyBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjQsCisJV004NDAwX1JSSTNST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjQsCisJV004NDAwX1JMMTJST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjQsCisJV004NDAwX1JSMTJST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIExJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI2LAorCVdNODQwMF9STEkzUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBBSU5MTVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNiwKKwlXTTg0MDBfUkxCUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBBSU5STVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNiwKKwlXTTg0MDBfUlJCUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKKworLyogTE9VVCAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxPVVQgVm9sdW1lIiwgV004NDAwX0xFRlRfT1VUUFVUX1ZPTFVNRSwKKwlXTTg0MDBfTE9VVFZPTF9TSElGVCwgV004NDAwX0xPVVRWT0xfTUFTSywgMCwgb3V0X3BnYV90bHYpLAorU09DX1NJTkdMRSgiTE9VVCBaQyIsIFdNODQwMF9MRUZUX09VVFBVVF9WT0xVTUUsIFdNODQwMF9MT1pDX1NISUZULCAxLCAwKSwKKworLyogUk9VVCAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJPVVQgVm9sdW1lIiwgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUsCisJV004NDAwX1JPVVRWT0xfU0hJRlQsIFdNODQwMF9ST1VUVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIlJPVVQgWkMiLCBXTTg0MDBfUklHSFRfT1VUUFVUX1ZPTFVNRSwgV004NDAwX1JPWkNfU0hJRlQsIDEsIDApLAorCisvKiBMT1BHQSAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxPUEdBIFZvbHVtZSIsIFdNODQwMF9MRUZUX09QR0FfVk9MVU1FLAorCVdNODQwMF9MT1BHQVZPTF9TSElGVCwgV004NDAwX0xPUEdBVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIkxPUEdBIFpDIFN3aXRjaCIsIFdNODQwMF9MRUZUX09QR0FfVk9MVU1FLAorCVdNODQwMF9MT1BHQVpDX1NISUZULCAxLCAwKSwKKworLyogUk9QR0EgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJST1BHQSBWb2x1bWUiLCBXTTg0MDBfUklHSFRfT1BHQV9WT0xVTUUsCisJV004NDAwX1JPUEdBVk9MX1NISUZULCBXTTg0MDBfUk9QR0FWT0xfTUFTSywgMCwgb3V0X3BnYV90bHYpLAorU09DX1NJTkdMRSgiUk9QR0EgWkMgU3dpdGNoIiwgV004NDAwX1JJR0hUX09QR0FfVk9MVU1FLAorCVdNODQwMF9ST1BHQVpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiTE9OIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX0xPTk1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiTE9QIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX0xPUE1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiTE9QIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9MT0FUVE5fU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiUk9OIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX1JPTk1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiUk9QIE11dGUgU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX1JPUE1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiUk9QIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9ST0FUVE5fU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJPVVQzIE11dGUgU3dpdGNoIiwgV004NDAwX09VVDNfNF9WT0xVTUUsCisJV004NDAwX09VVDNNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIk9VVDMgQXR0ZW51YXRpb24gU3dpdGNoIiwgV004NDAwX09VVDNfNF9WT0xVTUUsCisJV004NDAwX09VVDNBVFROX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiT1VUNCBNdXRlIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQ0TVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJPVVQ0IEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQ0QVRUTl9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlNwZWFrZXIgTW9kZSBTd2l0Y2giLCBXTTg0MDBfQ0xBU1NEMSwKKwlXTTg0MDBfQ0RNT0RFX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiU3BlYWtlciBPdXRwdXQgQXR0ZW51YXRpb24gVm9sdW1lIiwgV004NDAwX1NQRUFLRVJfVk9MVU1FLAorCVdNODQwMF9TUEtBVFROX1NISUZULCBXTTg0MDBfU1BLQVRUTl9NQVNLLCAwKSwKK1NPQ19TSU5HTEUoIlNwZWFrZXIgREMgQm9vc3QgVm9sdW1lIiwgV004NDAwX0NMQVNTRDMsCisJV004NDAwX0RDR0FJTl9TSElGVCwgNiwgMCksCitTT0NfU0lOR0xFKCJTcGVha2VyIEFDIEJvb3N0IFZvbHVtZSIsIFdNODQwMF9DTEFTU0QzLAorCVdNODQwMF9BQ0dBSU5fU0hJRlQsIDYsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004NDAwX0RBQ0xfVk9MX1NISUZULAorCTEyNywgMCwgb3V0X2RhY190bHYpLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUmlnaHQgREFDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfREFDX0RJR0lUQUxfVk9MVU1FLCBXTTg0MDBfREFDUl9WT0xfU0hJRlQsCisJMTI3LCAwLCBvdXRfZGFjX3RsdiksCisKK1NPQ19FTlVNKCJMZWZ0IERpZ2l0YWwgU2lkZXRvbmUiLCB3bTg0MDBfbGVmdF9kaWdpdGFsX3NpZGV0b25lX2VudW0pLAorU09DX0VOVU0oIlJpZ2h0IERpZ2l0YWwgU2lkZXRvbmUiLCB3bTg0MDBfcmlnaHRfZGlnaXRhbF9zaWRldG9uZV9lbnVtKSwKKworU09DX1NJTkdMRV9UTFYoIkxlZnQgRGlnaXRhbCBTaWRldG9uZSBWb2x1bWUiLCBXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJV004NDAwX0FEQ0xfREFDX1NWT0xfU0hJRlQsIDE1LCAwLCBvdXRfc2lkZXRvbmVfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBEaWdpdGFsIFNpZGV0b25lIFZvbHVtZSIsIFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwlXTTg0MDBfQURDUl9EQUNfU1ZPTF9TSElGVCwgMTUsIDAsIG91dF9zaWRldG9uZV90bHYpLAorCitTT0NfU0lOR0xFKCJBREMgRGlnaXRhbCBIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODQwMF9BRENfQ1RSTCwKKwlXTTg0MDBfQURDX0hQRl9FTkFfU0hJRlQsIDEsIDApLAorCitTT0NfRU5VTSgiQURDIEhQRiBNb2RlIiwgd204NDAwX3JpZ2h0X2FkY21vZGVfZW51bSksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMZWZ0IEFEQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODQwMF9BRENMX1ZPTF9TSElGVCwKKwlXTTg0MDBfQURDTF9WT0xfTUFTSywKKwkwLAorCWluX2FkY190bHYpLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUmlnaHQgQURDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODQwMF9BRENSX1ZPTF9TSElGVCwKKwlXTTg0MDBfQURDUl9WT0xfTUFTSywKKwkwLAorCWluX2FkY190bHYpLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTElOMTIgVm9sdW1lIiwKKwlXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX0xJTjEyVk9MX1NISUZULAorCVdNODQwMF9MSU4xMlZPTF9NQVNLLAorCTAsCisJaW5fcGdhX3RsdiksCisKK1NPQ19TSU5HTEUoIkxJTjEyIFpDIFN3aXRjaCIsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfTEkxMlpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiTElOMTIgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX0xJMTJNVVRFX1NISUZULCAxLCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxJTjM0IFZvbHVtZSIsCisJV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9MSU4zNFZPTF9TSElGVCwKKwlXTTg0MDBfTElOMzRWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJMSU4zNCBaQyBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX0xJMzRaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxJTjM0IE11dGUgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9MSTM0TVVURV9TSElGVCwgMSwgMCksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJSSU4xMiBWb2x1bWUiLAorCVdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX1JJTjEyVk9MX1NISUZULAorCVdNODQwMF9SSU4xMlZPTF9NQVNLLAorCTAsCisJaW5fcGdhX3RsdiksCisKK1NPQ19TSU5HTEUoIlJJTjEyIFpDIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX1JJMTJaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlJJTjEyIE11dGUgU3dpdGNoIiwgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfUkkxMk1VVEVfU0hJRlQsIDEsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUklOMzQgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9SSU4zNFZPTF9TSElGVCwKKwlXTTg0MDBfUklOMzRWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJSSU4zNCBaQyBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9SSTM0WkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJSSU4zNCBNdXRlIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX1JJMzRNVVRFX1NISUZULCAxLCAwKSwKKworfTsKKworLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCitzdGF0aWMgaW50IHdtODQwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NDAwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODQwMF9zbmRfY29udHJvbHMpKTsKK30KKworLyoKKyAqIF9EQVBNXyBDb250cm9scworICovCisKK3N0YXRpYyBpbnQgaW5taXhlcl9ldmVudCAoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwl1MTYgcmVnLCBmYWtlcG93ZXI7CisKKwlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMik7CisJZmFrZXBvd2VyID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9JTlREUklWQklUUyk7CisKKwlpZiAoZmFrZXBvd2VyICYgKCgxIDw8IFdNODQwMF9JTk1JWExfUFdSKSB8CisJCSgxIDw8IFdNODQwMF9BSU5MTVVYX1BXUikpKSB7CisJCXJlZyB8PSBXTTg0MDBfQUlOTF9FTkE7CisJfSBlbHNlIHsKKwkJcmVnICY9IH5XTTg0MDBfQUlOTF9FTkE7CisJfQorCisJaWYgKGZha2Vwb3dlciAmICgoMSA8PCBXTTg0MDBfSU5NSVhSX1BXUikgfAorCQkoMSA8PCBXTTg0MDBfQUlOUk1VWF9QV1IpKSkgeworCQlyZWcgfD0gV004NDAwX0FJTlJfRU5BOworCX0gZWxzZSB7CisJCXJlZyAmPSB+V004NDAwX0FJTkxfRU5BOworCX0KKwl3bTg0MDBfd3JpdGUody0+Y29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdXRtaXhlcl9ldmVudCAoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqIGtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwl1MzIgcmVnX3NoaWZ0ID0gbWMtPnNoaWZ0OworCWludCByZXQgPSAwOworCXUxNiByZWc7CisKKwlzd2l0Y2ggKHJlZ19zaGlmdCkgeworCWNhc2UgV004NDAwX1NQRUFLRVJfTUlYRVIgfCAoV004NDAwX0xEU1BLIDw8IDgpIDoKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9PVVRQVVRfTUlYRVIxKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9MRExPKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMSBMRExPIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODQwMF9TUEVBS0VSX01JWEVSIHwgKFdNODQwMF9SRFNQSyA8PCA4KToKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9PVVRQVVRfTUlYRVIyKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9SRFJPKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMiBSRFJPIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODQwMF9PVVRQVVRfTUlYRVIxIHwgKFdNODQwMF9MRExPIDw8IDgpOgorCQlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX1NQRUFLRVJfTUlYRVIpOworCQlpZiAocmVnICYgV004NDAwX0xEU1BLKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIExEU1BLIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODQwMF9PVVRQVVRfTUlYRVIyIHwgKFdNODQwMF9SRFJPIDw8IDgpOgorCQlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX1NQRUFLRVJfTUlYRVIpOworCQlpZiAocmVnICYgV004NDAwX1JEU1BLKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIFJEU1BLIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJTk1JWCBkQiB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW5fbWl4X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDEpLAorCTAsNywgVExWX0RCX0xJTkVBUl9JVEVNKC0xMjAwLCA2MDApLAorfTsKKworLyogTGVmdCBJbiBQR0EgQ29ubmVjdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9saW4xMl9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTElOMSBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1OMV9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxJTjIgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNUDJfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xpbjM0X3BnYV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMSU4zIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9MTU4zX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTElONCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1QNF9TSElGVCwgMSwgMCksCit9OworCisvKiBSaWdodCBJbiBQR0EgQ29ubmVjdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yaW4xMl9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUklOMSBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1OMV9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJJTjIgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNUDJfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3JpbjM0X3BnYV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJSSU4zIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9STU4zX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUklONCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1QNF9TSElGVCwgMSwgMCksCit9OworCisvKiBJTk1JWEwgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9pbm1peGxfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJlY29yZCBMZWZ0IFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjMsCisJV004NDAwX0xEQlZPTF9TSElGVCwgV004NDAwX0xEQlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIkxJTjIgVm9sdW1lIiwgV004NDAwX0lOUFVUX01JWEVSNSwgV004NDAwX0xJMkJWT0xfU0hJRlQsCisJNywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEUoIkxJTlBHQTEyIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMTJNTkJfU0hJRlQsCisJCTEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMSU5QR0EzNCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDM0TU5CX1NISUZULAorCQkxLCAwKSwKK307CisKKy8qIElOTUlYUiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2lubWl4cl9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFX1RMVigiUmVjb3JkIFJpZ2h0IFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjQsCisJV004NDAwX1JEQlZPTF9TSElGVCwgV004NDAwX1JEQlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJJTjIgVm9sdW1lIiwgV004NDAwX0lOUFVUX01JWEVSNiwgV004NDAwX1JJMkJWT0xfU0hJRlQsCisJNywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEUoIlJJTlBHQTEyIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMTJNTkJfU0hJRlQsCisJMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJJTlBHQTM0IFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMzRNTkJfU0hJRlQsCisJMSwgMCksCit9OworCisvKiBBSU5MTVVYICovCitzdGF0aWMgY29uc3QgY2hhciAqd204NDAwX2FpbmxtdXhbXSA9CisJeyJJTk1JWEwgTWl4IiwgIlJYVk9JQ0UgTWl4IiwgIkRJRkZJTkwgTWl4In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX2FpbmxtdXhfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoIFdNODQwMF9JTlBVVF9NSVhFUjEsIFdNODQwMF9BSU5MTU9ERV9TSElGVCwKKwlBUlJBWV9TSVpFKHdtODQwMF9haW5sbXV4KSwgd204NDAwX2FpbmxtdXgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fYWlubG11eF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODQwMF9haW5sbXV4X2VudW0pOworCisvKiBESUZGSU5MICovCisKKy8qIEFJTlJNVVggKi8KK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfYWlucm11eFtdID0KKwl7IklOTUlYUiBNaXgiLCAiUlhWT0lDRSBNaXgiLCAiRElGRklOUiBNaXgifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfYWlucm11eF9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRSggV004NDAwX0lOUFVUX01JWEVSMSwgV004NDAwX0FJTlJNT0RFX1NISUZULAorCUFSUkFZX1NJWkUod204NDAwX2FpbnJtdXgpLCB3bTg0MDBfYWlucm11eCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9haW5ybXV4X2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204NDAwX2FpbnJtdXhfZW51bSk7CisKKy8qIFJYVk9JQ0UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yeHZvaWNlX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEVfVExWKCJMSU40L1JYTiIsIFdNODQwMF9JTlBVVF9NSVhFUjUsIFdNODQwMF9MUjRCVk9MX1NISUZULAorCQkJV004NDAwX0xSNEJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEVfVExWKCJSSU40L1JYUCIsIFdNODQwMF9JTlBVVF9NSVhFUjYsIFdNODQwMF9STDRCVk9MX1NISUZULAorCQkJV004NDAwX1JMNEJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCit9OworCisvKiBMT01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xvbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xSQkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MTEJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MUkkzTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTExJM0xPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTFIxMkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTEwxMkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTGVmdCBEQUMgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xETE9fU0hJRlQsIDEsIDApLAorfTsKKworLyogUk9NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yb21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJST01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JMQlJPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUlJCUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUkxJM1JPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JSSTNST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JMMTJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JSMTJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUkRST19TSElGVCwgMSwgMCksCit9OworCisvKiBMT05NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9sb25taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTExPUEdBTE9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xST1BHQUxPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBJbnZlcnRlZCBMT1AgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MT1BMT05fU0hJRlQsIDEsIDApLAorfTsKKworLyogTE9QTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbG9wbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTFIxMkxPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MTDEyTE9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9QTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTExPUEdBTE9QX1NISUZULCAxLCAwKSwKK307CisKKy8qIFJPTk1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3Jvbm1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJST05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUlJPUEdBUk9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUkxPUEdBUk9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIEludmVydGVkIFJPUCBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JPUFJPTl9TSElGVCwgMSwgMCksCit9OworCisvKiBST1BNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yb3BtaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JMMTJST1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JSMTJST1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST1BNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUlJPUEdBUk9QX1NISUZULCAxLCAwKSwKK307CisKKy8qIE9VVDNNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9vdXQzbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIk9VVDNNSVggTElONC9SWFAgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfTUlYRVIsCisJV004NDAwX0xJNE8zX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT1VUM01JWCBMZWZ0IE91dCBQR0EgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfTFBHQU8zX1NISUZULCAxLCAwKSwKK307CisKKy8qIE9VVDRNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9vdXQ0bWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIk9VVDRNSVggUmlnaHQgT3V0IFBHQSBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9SUEdBTzRfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPVVQ0TUlYIFJJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9SSTRPNF9TSElGVCwgMSwgMCksCit9OworCisvKiBTUEtNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9zcGttaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExJTjIgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MSTJTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xCMlNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfTE9QR0FTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTGVmdCBEQUMgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xEU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUkRTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9ST1BHQVNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUkwxMlJPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSSU4yIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUkkyU1BLX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg0MDBfZGFwbV93aWRnZXRzW10gPSB7CisvKiBJbnB1dCBTaWRlICovCisvKiBJbnB1dCBMaW5lcyAqLworU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4xIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTjIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElOMyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU40L1JYTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4zIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjQvUlhQIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjEiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklOMiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJbnRlcm5hbCBBREMgU291cmNlIiksCisKKy8qIERBQ3MgKi8KK1NORF9TT0NfREFQTV9BREMoIkxlZnQgQURDIiwgIkxlZnQgQ2FwdHVyZSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJV004NDAwX0FEQ0xfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BREMoIlJpZ2h0IEFEQyIsICJSaWdodCBDYXB0dXJlIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwlXTTg0MDBfQURDUl9FTkFfU0hJRlQsIDApLAorCisvKiBJbnB1dCBQR0FzICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTjEyIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9MSU4xMl9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9saW4xMl9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTjM0IFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9MSU4zNF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9saW4zNF9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbGluMzRfcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlJJTjEyIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9SSU4xMl9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yaW4xMl9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlJJTjM0IFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIFdNODQwMF9SSU4zNF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yaW4zNF9wZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzKSksCisKKy8qIElOTUlYTCAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIklOTUlYTCIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0lOTUlYTF9QV1IsIDAsCisJJndtODQwMF9kYXBtX2lubWl4bF9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2lubWl4bF9jb250cm9scyksCisJaW5taXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogQUlOTE1VWCAqLworU05EX1NPQ19EQVBNX01VWF9FKCJBSUxOTVVYIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfQUlOTE1VWF9QV1IsIDAsCisJJndtODQwMF9kYXBtX2FpbmxtdXhfY29udHJvbHMsIGlubWl4ZXJfZXZlbnQsCisJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogSU5NSVhSICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiSU5NSVhSIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfSU5NSVhSX1BXUiwgMCwKKwkmd204NDAwX2RhcG1faW5taXhyX2NvbnRyb2xzWzBdLAorCUFSUkFZX1NJWkUod204NDAwX2RhcG1faW5taXhyX2NvbnRyb2xzKSwKKwlpbm1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisvKiBBSU5STVVYICovCitTTkRfU09DX0RBUE1fTVVYX0UoIkFJUk5NVVgiLCBXTTg0MDBfSU5URFJJVkJJVFMsIFdNODQwMF9BSU5STVVYX1BXUiwgMCwKKwkmd204NDAwX2RhcG1fYWlucm11eF9jb250cm9scywgaW5taXhlcl9ldmVudCwKKwlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisvKiBPdXRwdXQgU2lkZSAqLworLyogREFDcyAqLworU05EX1NPQ19EQVBNX0RBQygiTGVmdCBEQUMiLCAiTGVmdCBQbGF5YmFjayIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJV004NDAwX0RBQ0xfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBQbGF5YmFjayIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJV004NDAwX0RBQ1JfRU5BX1NISUZULCAwKSwKKworLyogTE9NSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJMT01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCSAgICAgV004NDAwX0xPTUlYX0VOQV9TSElGVCwKKwkJICAgICAwLCAmd204NDAwX2RhcG1fbG9taXhfY29udHJvbHNbMF0sCisJCSAgICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9sb21peF9jb250cm9scyksCisJCSAgICAgb3V0bWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUkVHKSwKKworLyogTE9OTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxPTk1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9MT05fRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbG9ubWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xvbm1peF9jb250cm9scykpLAorCisvKiBMT1BNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiTE9QTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX0xPUF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9sb3BtaXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbG9wbWl4X2NvbnRyb2xzKSksCisKKy8qIE9VVDNNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiT1VUM01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9PVVQzX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX291dDNtaXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fb3V0M21peF9jb250cm9scykpLAorCisvKiBTUEtNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJTUEtNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfU1BLX0VOQV9TSElGVCwKKwkJICAgICAwLCAmd204NDAwX2RhcG1fc3BrbWl4X2NvbnRyb2xzWzBdLAorCQkgICAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fc3BrbWl4X2NvbnRyb2xzKSwgb3V0bWl4ZXJfZXZlbnQsCisJCSAgICAgU05EX1NPQ19EQVBNX1BSRV9SRUcpLAorCisvKiBPVVQ0TUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDRNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfT1VUNF9FTkFfU0hJRlQsCisJMCwgJndtODQwMF9kYXBtX291dDRtaXhfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9vdXQ0bWl4X2NvbnRyb2xzKSksCisKKy8qIFJPUE1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJST1BNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfUk9QX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX3JvcG1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yb3BtaXhfY29udHJvbHMpKSwKKworLyogUk9OTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIlJPTk1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9ST05fRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcm9ubWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3Jvbm1peF9jb250cm9scykpLAorCisvKiBST01JWCAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIlJPTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywKKwkJICAgICBXTTg0MDBfUk9NSVhfRU5BX1NISUZULAorCQkgICAgIDAsICZ3bTg0MDBfZGFwbV9yb21peF9jb250cm9sc1swXSwKKwkJICAgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JvbWl4X2NvbnRyb2xzKSwKKwkJICAgICBvdXRtaXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9SRUcpLAorCisvKiBMT1VUIFBHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiTE9VVCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfTE9VVF9FTkFfU0hJRlQsCisJCSAwLCBOVUxMLCAwKSwKKworLyogUk9VVCBQR0EgKi8KK1NORF9TT0NfREFQTV9QR0EoIlJPVVQgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX1JPVVRfRU5BX1NISUZULAorCQkgMCwgTlVMTCwgMCksCisKKy8qIExPUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJMT1BHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9MT1BHQV9FTkFfU0hJRlQsIDAsCisJTlVMTCwgMCksCisKKy8qIFJPUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJST1BHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9ST1BHQV9FTkFfU0hJRlQsIDAsCisJTlVMTCwgMCksCisKKy8qIE1JQ0JJQVMgKi8KK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwKKwlXTTg0MDBfTUlDMUJJQVNfRU5BX1NISUZULCAwKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiTE9OIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1AiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk9VVDMiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS04iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS1AiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk9VVDQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9OIiksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkludGVybmFsIERBQyBTaW5rIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBNYWtlIERBQ3MgdHVybiBvbiB3aGVuIHBsYXlpbmcgZXZlbiBpZiBub3QgbWl4ZWQgaW50byBhbnkgb3V0cHV0cyAqLworCXsiSW50ZXJuYWwgREFDIFNpbmsiLCBOVUxMLCAiTGVmdCBEQUMifSwKKwl7IkludGVybmFsIERBQyBTaW5rIiwgTlVMTCwgIlJpZ2h0IERBQyJ9LAorCisJLyogTWFrZSBBRENzIHR1cm4gb24gd2hlbiByZWNvcmRpbmcKKwkgKiBldmVuIGlmIG5vdCBtaXhlZCBmcm9tIGFueSBpbnB1dHMgKi8KKwl7IkxlZnQgQURDIiwgTlVMTCwgIkludGVybmFsIEFEQyBTb3VyY2UifSwKKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJJbnRlcm5hbCBBREMgU291cmNlIn0sCisKKwkvKiBJbnB1dCBTaWRlICovCisJLyogTElOMTIgUEdBICovCisJeyJMSU4xMiBQR0EiLCAiTElOMSBTd2l0Y2giLCAiTElOMSJ9LAorCXsiTElOMTIgUEdBIiwgIkxJTjIgU3dpdGNoIiwgIkxJTjIifSwKKwkvKiBMSU4zNCBQR0EgKi8KKwl7IkxJTjM0IFBHQSIsICJMSU4zIFN3aXRjaCIsICJMSU4zIn0sCisJeyJMSU4zNCBQR0EiLCAiTElONCBTd2l0Y2giLCAiTElONC9SWE4ifSwKKwkvKiBJTk1JWEwgKi8KKwl7IklOTUlYTCIsICJSZWNvcmQgTGVmdCBWb2x1bWUiLCAiTE9NSVgifSwKKwl7IklOTUlYTCIsICJMSU4yIFZvbHVtZSIsICJMSU4yIn0sCisJeyJJTk1JWEwiLCAiTElOUEdBMTIgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiSU5NSVhMIiwgIkxJTlBHQTM0IFN3aXRjaCIsICJMSU4zNCBQR0EifSwKKwkvKiBBSUxOTVVYICovCisJeyJBSUxOTVVYIiwgIklOTUlYTCBNaXgiLCAiSU5NSVhMIn0sCisJeyJBSUxOTVVYIiwgIkRJRkZJTkwgTWl4IiwgIkxJTjEyIFBHQSJ9LAorCXsiQUlMTk1VWCIsICJESUZGSU5MIE1peCIsICJMSU4zNCBQR0EifSwKKwl7IkFJTE5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiTElONC9SWE4ifSwKKwl7IkFJTE5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiUklONC9SWFAifSwKKwkvKiBBREMgKi8KKwl7IkxlZnQgQURDIiwgTlVMTCwgIkFJTE5NVVgifSwKKworCS8qIFJJTjEyIFBHQSAqLworCXsiUklOMTIgUEdBIiwgIlJJTjEgU3dpdGNoIiwgIlJJTjEifSwKKwl7IlJJTjEyIFBHQSIsICJSSU4yIFN3aXRjaCIsICJSSU4yIn0sCisJLyogUklOMzQgUEdBICovCisJeyJSSU4zNCBQR0EiLCAiUklOMyBTd2l0Y2giLCAiUklOMyJ9LAorCXsiUklOMzQgUEdBIiwgIlJJTjQgU3dpdGNoIiwgIlJJTjQvUlhQIn0sCisJLyogSU5NSVhMICovCisJeyJJTk1JWFIiLCAiUmVjb3JkIFJpZ2h0IFZvbHVtZSIsICJST01JWCJ9LAorCXsiSU5NSVhSIiwgIlJJTjIgVm9sdW1lIiwgIlJJTjIifSwKKwl7IklOTUlYUiIsICJSSU5QR0ExMiBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJJTk1JWFIiLCAiUklOUEdBMzQgU3dpdGNoIiwgIlJJTjM0IFBHQSJ9LAorCS8qIEFJUk5NVVggKi8KKwl7IkFJUk5NVVgiLCAiSU5NSVhSIE1peCIsICJJTk1JWFIifSwKKwl7IkFJUk5NVVgiLCAiRElGRklOUiBNaXgiLCAiUklOMTIgUEdBIn0sCisJeyJBSVJOTVVYIiwgIkRJRkZJTlIgTWl4IiwgIlJJTjM0IFBHQSJ9LAorCXsiQUlSTk1VWCIsICJSWFZPSUNFIE1peCIsICJMSU40L1JYTiJ9LAorCXsiQUlSTk1VWCIsICJSWFZPSUNFIE1peCIsICJSSU40L1JYUCJ9LAorCS8qIEFEQyAqLworCXsiUmlnaHQgQURDIiwgTlVMTCwgIkFJUk5NVVgifSwKKworCS8qIExPTUlYICovCisJeyJMT01JWCIsICJMT01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCAiUklOMyJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgIkxJTjMifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiTE9NSVgiLCAiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJMT01JWCIsICJMT01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSVJOTVVYIn0sCisJeyJMT01JWCIsICJMT01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTE5NVVgifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExlZnQgREFDIFN3aXRjaCIsICJMZWZ0IERBQyJ9LAorCisJLyogUk9NSVggKi8KKwl7IlJPTUlYIiwgIlJPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsICJSSU4zIn0sCisJeyJST01JWCIsICJST01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCAiTElOMyJ9LAorCXsiUk9NSVgiLCAiUk9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJST01JWCIsICJST01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IlJPTUlYIiwgIlJPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJUk5NVVgifSwKKwl7IlJPTUlYIiwgIlJPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlMTk1VWCJ9LAorCXsiUk9NSVgiLCAiUk9NSVggUmlnaHQgREFDIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKworCS8qIFNQS01JWCAqLworCXsiU1BLTUlYIiwgIlNQS01JWCBMSU4yIEJ5cGFzcyBTd2l0Y2giLCAiTElOMiJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSSU4yIEJ5cGFzcyBTd2l0Y2giLCAiUklOMiJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBMQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlMTk1VWCJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlSTk1VWCJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSaWdodCBEQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBMZWZ0IERBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisKKwkvKiBMT05NSVggKi8KKwl7IkxPTk1JWCIsICJMT05NSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisJeyJMT05NSVgiLCAiTE9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7IkxPTk1JWCIsICJMT05NSVggSW52ZXJ0ZWQgTE9QIFN3aXRjaCIsICJMT1BNSVgifSwKKworCS8qIExPUE1JWCAqLworCXsiTE9QTUlYIiwgIkxPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IkxPUE1JWCIsICJMT1BNSVggTGVmdCBNaWMgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IkxPUE1JWCIsICJMT1BNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisKKwkvKiBPVVQzTUlYICovCisJeyJPVVQzTUlYIiwgIk9VVDNNSVggTElONC9SWFAgQnlwYXNzIFN3aXRjaCIsICJMSU40L1JYTiJ9LAorCXsiT1VUM01JWCIsICJPVVQzTUlYIExlZnQgT3V0IFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKworCS8qIE9VVDRNSVggKi8KKwl7Ik9VVDRNSVgiLCAiT1VUNE1JWCBSaWdodCBPdXQgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiT1VUNE1JWCIsICJPVVQ0TUlYIFJJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCAiUklONC9SWFAifSwKKworCS8qIFJPTk1JWCAqLworCXsiUk9OTUlYIiwgIlJPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJST05NSVgiLCAiUk9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCXsiUk9OTUlYIiwgIlJPTk1JWCBJbnZlcnRlZCBST1AgU3dpdGNoIiwgIlJPUE1JWCJ9LAorCisJLyogUk9QTUlYICovCisJeyJST1BNSVgiLCAiUk9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJST1BNSVgiLCAiUk9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiUk9QTUlYIiwgIlJPUE1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisKKwkvKiBPdXQgTWl4ZXIgUEdBcyAqLworCXsiTE9QR0EiLCBOVUxMLCAiTE9NSVgifSwKKwl7IlJPUEdBIiwgTlVMTCwgIlJPTUlYIn0sCisKKwl7IkxPVVQgUEdBIiwgTlVMTCwgIkxPTUlYIn0sCisJeyJST1VUIFBHQSIsIE5VTEwsICJST01JWCJ9LAorCisJLyogT3V0cHV0IFBpbnMgKi8KKwl7IkxPTiIsIE5VTEwsICJMT05NSVgifSwKKwl7IkxPUCIsIE5VTEwsICJMT1BNSVgifSwKKwl7Ik9VVDMiLCBOVUxMLCAiT1VUM01JWCJ9LAorCXsiTE9VVCIsIE5VTEwsICJMT1VUIFBHQSJ9LAorCXsiU1BLTiIsIE5VTEwsICJTUEtNSVgifSwKKwl7IlJPVVQiLCBOVUxMLCAiUk9VVCBQR0EifSwKKwl7Ik9VVDQiLCBOVUxMLCAiT1VUNE1JWCJ9LAorCXsiUk9QIiwgTlVMTCwgIlJPUE1JWCJ9LAorCXsiUk9OIiwgTlVMTCwgIlJPTk1JWCJ9LAorfTsKKworc3RhdGljIGludCB3bTg0MDBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODQwMF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCXJldHVybiAwOworfQorCisvKgorICogQ2xvY2sgYWZ0ZXIgRkxMIGFuZCBkaXZpZGVycworICovCitzdGF0aWMgaW50IHdtODQwMF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwl3bTg0MDAtPnN5c2NsayA9IGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmbGxfZmFjdG9ycyB7CisJdTE2IG47CisJdTE2IGs7CisJdTE2IG91dGRpdjsKKwl1MTYgZnJhdGlvOworCXUxNiBmcmVxX3JlZjsKK307CisKKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQorCitzdGF0aWMgaW50IGZsbF9mYWN0b3JzKHN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwLCBzdHJ1Y3QgZmxsX2ZhY3RvcnMgKmZhY3RvcnMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgRnJlZiwgdW5zaWduZWQgaW50IEZvdXQpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBObW9kLCB0YXJnZXQ7CisKKwlmYWN0b3JzLT5vdXRkaXYgPSAyOworCXdoaWxlIChGb3V0ICogZmFjdG9ycy0+b3V0ZGl2IDwgIDkwMDAwMDAwIHx8CisJICAgICAgIEZvdXQgKiBmYWN0b3JzLT5vdXRkaXYgPiAxMDAwMDAwMDApIHsKKwkJZmFjdG9ycy0+b3V0ZGl2ICo9IDI7CisJCWlmIChmYWN0b3JzLT5vdXRkaXYgPiAzMikgeworCQkJZGV2X2Vycih3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkJCSJVbnN1cHBvcnRlZCBGTEwgb3V0cHV0IGZyZXF1ZW5jeSAlZEh6XG4iLAorCQkJCUZvdXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJdGFyZ2V0ID0gRm91dCAqIGZhY3RvcnMtPm91dGRpdjsKKwlmYWN0b3JzLT5vdXRkaXYgPSBmYWN0b3JzLT5vdXRkaXYgPj4gMjsKKworCWlmIChGcmVmIDwgNDgwMDApCisJCWZhY3RvcnMtPmZyZXFfcmVmID0gMTsKKwllbHNlCisJCWZhY3RvcnMtPmZyZXFfcmVmID0gMDsKKworCWlmIChGcmVmIDwgMTAwMDAwMCkKKwkJZmFjdG9ycy0+ZnJhdGlvID0gOTsKKwllbHNlCisJCWZhY3RvcnMtPmZyYXRpbyA9IDA7CisKKwkvKiBFbnN1cmUgd2UgaGF2ZSBhIGZyYWN0aW9uYWwgcGFydCAqLworCWRvIHsKKwkJaWYgKEZyZWYgPCAxMDAwMDAwKQorCQkJZmFjdG9ycy0+ZnJhdGlvLS07CisJCWVsc2UKKwkJCWZhY3RvcnMtPmZyYXRpbysrOworCisJCWlmIChmYWN0b3JzLT5mcmF0aW8gPCAxIHx8IGZhY3RvcnMtPmZyYXRpbyA+IDgpIHsKKwkJCWRldl9lcnIod204NDAwLT53bTg0MDAtPmRldiwKKwkJCQkiVW5hYmxlIHRvIGNhbGN1bGF0ZSBGUkFUSU9cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmYWN0b3JzLT5uID0gdGFyZ2V0IC8gKEZyZWYgKiBmYWN0b3JzLT5mcmF0aW8pOworCQlObW9kID0gdGFyZ2V0ICUgKEZyZWYgKiBmYWN0b3JzLT5mcmF0aW8pOworCX0gd2hpbGUgKE5tb2QgPT0gMCk7CisKKwkvKiBDYWxjdWxhdGUgZnJhY3Rpb25hbCBwYXJ0IC0gc2NhbGUgdXAgc28gd2UgY2FuIHJvdW5kLiAqLworCUtwYXJ0ID0gRklYRURfRkxMX1NJWkUgKiAobG9uZyBsb25nKU5tb2Q7CisKKwlkb19kaXYoS3BhcnQsIChGcmVmICogZmFjdG9ycy0+ZnJhdGlvKSk7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlmYWN0b3JzLT5rID0gSyAvIDEwOworCisJZGV2X2RiZyh3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkiRkxMOiBGcmVmPSVkIEZvdXQ9JWQgTj0leCBLPSV4LCBGUkFUSU89JXggT1VURElWPSV4XG4iLAorCQlGcmVmLCBGb3V0LAorCQlmYWN0b3JzLT5uLCBmYWN0b3JzLT5rLCBmYWN0b3JzLT5mcmF0aW8sIGZhY3RvcnMtPm91dGRpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBwbGxfaWQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmbGxfZmFjdG9ycyBmYWN0b3JzOworCWludCByZXQ7CisJdTE2IHJlZzsKKworCWlmIChmcmVxX2luID09IHdtODQwMC0+ZmxsX2luICYmIGZyZXFfb3V0ID09IHdtODQwMC0+ZmxsX291dCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnJlcV9vdXQgIT0gMCkgeworCQlyZXQgPSBmbGxfZmFjdG9ycyh3bTg0MDAsICZmYWN0b3JzLCBmcmVxX2luLCBmcmVxX291dCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJd204NDAwLT5mbGxfb3V0ID0gZnJlcV9vdXQ7CisJd204NDAwLT5mbGxfaW4gPSBmcmVxX2luOworCisJLyogV2UgKm11c3QqIGRpc2FibGUgdGhlIEZMTCBiZWZvcmUgYW55IGNoYW5nZXMgKi8KKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMik7CisJcmVnICY9IH5XTTg0MDBfRkxMX0VOQTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisKKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEpOworCXJlZyAmPSB+V004NDAwX0ZMTF9PU0NfRU5BOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEsIHJlZyk7CisKKwlpZiAoZnJlcV9vdXQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZWcgJj0gfihXTTg0MDBfRkxMX1JFRl9GUkVRIHwgV004NDAwX0ZMTF9GUkFUSU9fTUFTSyk7CisJcmVnIHw9IFdNODQwMF9GTExfRlJBQyB8IGZhY3RvcnMuZnJhdGlvOworCXJlZyB8PSBmYWN0b3JzLmZyZXFfcmVmIDw8IFdNODQwMF9GTExfUkVGX0ZSRVFfU0hJRlQ7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMSwgcmVnKTsKKworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzIsIGZhY3RvcnMuayk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMywgZmFjdG9ycy5uKTsKKworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfNCk7CisJcmVnICY9IFdNODQwMF9GTExfT1VURElWX01BU0s7CisJcmVnIHw9IGZhY3RvcnMub3V0ZGl2OworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzQsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldHMgQURDIGFuZCBWb2ljZSBEQUMgZm9ybWF0LgorICovCitzdGF0aWMgaW50IHdtODQwMF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBhdWRpbzEsIGF1ZGlvMzsKKworCWF1ZGlvMSA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEpOworCWF1ZGlvMyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzMpOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlhdWRpbzMgJj0gfldNODQwMF9BSUZfTVNUUjE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYXVkaW8zIHw9IFdNODQwMF9BSUZfTVNUUjE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9GTVRfTUFTSzsKKworCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9JMlM7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX1JJR0hUSjsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9MRUZUSjsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX0RTUDsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX0RTUCB8IFdNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMSwgYXVkaW8xKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMywgYXVkaW8zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCWludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgcmVnOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIFdNODQwMF9NQ0xLX0RJVjoKKwkJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yKSAmCisJCQl+V004NDAwX01DTEtfRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NDAwX0RBQ0NMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMikgJgorCQkJfldNODQwMF9EQUNfQ0xLRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NDAwX0FEQ0NMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMikgJgorCQkJfldNODQwMF9BRENfQ0xLRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NDAwX0JDTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzEpICYKKwkJCX5XTTg0MDBfQkNMS19ESVZfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMSwgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXUxNiBhdWRpbzEgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xKTsKKworCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9XTF9NQVNLOworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfV0xfMjBCSVRTOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9XTF8yNEJJVFM7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX1dMXzMyQklUUzsKKwkJYnJlYWs7CisJfQorCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEsIGF1ZGlvMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IHZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwpICYgfldNODQwMF9EQUNfTVVURTsKKworCWlmIChtdXRlKQorCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCwgdmFsIHwgV004NDAwX0RBQ19NVVRFKTsKKwllbHNlCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0RBQ19DVFJMLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IHNldCBiaWFzIGZvciBiZXN0IHBlcmZvcm1hbmNlIGF0IHN0YW5kYnkgKi8KK3N0YXRpYyBpbnQgd204NDAwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiB2YWw7CisJaW50IHJldDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBWTUlEPTIqNTBrICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKSAmCisJCQl+V004NDAwX1ZNSURfTU9ERV9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCB8IDB4Mik7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHBvd2VyKSwKKwkJCQkJCSAgICAmcG93ZXJbMF0pOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2Vycih3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgICBXTTg0MDBfQ09ERUNfRU5BIHwgV004NDAwX1NZU0NMS19FTkEpOworCisJCQkvKiBFbmFibGUgUE9CQ1RSTCwgU09GVF9TVCwgVk1JRFRPRyBhbmQgQlVGRENPUEVOICovCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQkJICAgICBXTTg0MDBfQlVGRENPUEVOIHwgV004NDAwX1BPQkNUUkwpOworCisJCQltc2xlZXAoNTApOworCisJCQkvKiBFbmFibGUgVlJFRiAmIFZNSUQgYXQgMng1MGsgKi8KKwkJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwkJCXZhbCB8PSAweDIgfCBXTTg0MDBfVlJFRl9FTkE7CisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJCS8qIEVuYWJsZSBCVUZJT0VOICovCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQkJICAgICBXTTg0MDBfQlVGRENPUEVOIHwgV004NDAwX1BPQkNUUkwgfAorCQkJCSAgICAgV004NDAwX0JVRklPRU4pOworCisJCQkvKiBkaXNhYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9CVUZJT0VOKTsKKwkJfQorCisJCS8qIFZNSUQ9MiozMDBrICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKSAmCisJCQl+V004NDAwX1ZNSURfTU9ERV9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCB8IDB4NCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBFbmFibGUgUE9CQ1RSTCBhbmQgU09GVF9TVCAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQlXTTg0MDBfUE9CQ1RSTCB8IFdNODQwMF9CVUZJT0VOKTsKKworCQkvKiBFbmFibGUgUE9CQ1RSTCwgU09GVF9TVCBhbmQgQlVGRENPUEVOICovCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfU09GVFNUIHwKKwkJCVdNODQwMF9CVUZEQ09QRU4gfCBXTTg0MDBfUE9CQ1RSTCB8CisJCQlXTTg0MDBfQlVGSU9FTik7CisKKwkJLyogbXV0ZSBEQUMgKi8KKwkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCk7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0RBQ19DVFJMLCB2YWwgfCBXTTg0MDBfREFDX01VVEUpOworCisJCS8qIEVuYWJsZSBhbnkgZGlzYWJsZWQgb3V0cHV0cyAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSk7CisJCXZhbCB8PSBXTTg0MDBfU1BLX0VOQSB8IFdNODQwMF9PVVQzX0VOQSB8CisJCQlXTTg0MDBfT1VUNF9FTkEgfCBXTTg0MDBfTE9VVF9FTkEgfAorCQkJV004NDAwX1JPVVRfRU5BOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJLyogRGlzYWJsZSBWTUlEICovCisJCXZhbCAmPSB+V004NDAwX1ZNSURfTU9ERV9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJbXNsZWVwKDMwMCk7CisKKwkJLyogRW5hYmxlIGFsbCBvdXRwdXQgZGlzY2hhcmdlIGJpdHMgKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDEsIFdNODQwMF9ESVNfTExJTkUgfAorCQkJV004NDAwX0RJU19STElORSB8IFdNODQwMF9ESVNfT1VUMyB8CisJCQlXTTg0MDBfRElTX09VVDQgfCBXTTg0MDBfRElTX0xPVVQgfAorCQkJV004NDAwX0RJU19ST1VUKTsKKworCQkvKiBEaXNhYmxlIFZSRUYgKi8KKwkJdmFsICY9IH5XTTg0MDBfVlJFRl9FTkE7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsKTsKKworCQkvKiBkaXNhYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgMHgwKTsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUocG93ZXIpLAorCQkJCQkgICAgICZwb3dlclswXSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg0MDBfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFdNODQwMF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg0MDBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gd204NDAwX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204NDAwX211dGUsCisJLnNldF9mbXQgPSB3bTg0MDBfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYgPSB3bTg0MDBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsgPSB3bTg0MDBfc2V0X2RhaV9zeXNjbGssCisJLnNldF9wbGwgPSB3bTg0MDBfc2V0X2RhaV9wbGwsCit9OworCisvKgorICogVGhlIFdNODQwMCBzdXBwb3J0cyAyIGRpZmZlcmVudCBhbmQgbXV0dWFsbHkgZXhjbHVzaXZlIERBSQorICogY29uZmlndXJhdGlvbnMuCisgKgorICogMS4gQURDL0RBQyBvbiBQcmltYXJ5IEludGVyZmFjZQorICogMi4gQURDIG9uIFByaW1hcnkgSW50ZXJmYWNlL0RBQyBvbiBzZWNvbmRhcnkKKyAqLworc3RydWN0IHNuZF9zb2NfZGFpIHdtODQwMF9kYWkgPSB7CisvKiBBREMvREFDIG9uIHByaW1hcnkgKi8KKwkubmFtZSA9ICJXTTg0MDAgQURDL0RBQyBQcmltYXJ5IiwKKwkuaWQgPSAxLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg0MDBfUkFURVMsCisJCS5mb3JtYXRzID0gV004NDAwX0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODQwMF9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg0MDBfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204NDAwX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204NDAwX2RhaSk7CisKK3N0YXRpYyBpbnQgd204NDAwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204NDAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg0MDBfY29kZWM7CisKK3N0YXRpYyBpbnQgd204NDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWlmICghd204NDAwX2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIndtODQwMCBub3QgeWV0IGRpc2NvdmVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY29kZWMgPSB3bTg0MDBfY29kZWM7CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJd204NDAwX2FkZF9jb250cm9scyhjb2RlYyk7CisJd204NDAwX2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGNhcmRfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK2NhcmRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODQwMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODQwMCA9IHsKKwkucHJvYmUgPQl3bTg0MDBfcHJvYmUsCisJLnJlbW92ZSA9CXdtODQwMF9yZW1vdmUsCisJLnN1c3BlbmQgPQl3bTg0MDBfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204NDAwX3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkIHdtODQwMF9wcm9iZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdtODQwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTg0MDBfcHJpdiwKKwkJCQkJCXdvcmspOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZwcml2LT5jb2RlYzsKKwlpbnQgcmV0OworCisJLyogY2hhcmdlIG91dHB1dCBjYXBzICovCisJd204NDAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBXZSdyZSBkb25lLCB0ZWxsIHRoZSBzdWJzeXN0ZW0uICovCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIocHJpdi0+d204NDAwLT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODQwMF9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHByaXYtPndtODQwMC0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlyZXR1cm47CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKnByaXY7CisJaW50IHJldDsKKwl1MTYgcmVnOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJnByaXYtPmNvZGVjOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBwcml2OworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKwlwcml2LT53bTg0MDAgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChwcml2LT53bTg0MDAtPmRldiwKKwkJCQkgQVJSQVlfU0laRShwb3dlciksICZwb3dlclswXSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZWd1bGF0b3JzOiAlZFxuIiwgcmV0KTsKKwkgICAgICAgIGdvdG8gZXJyOworCX0KKworCWNvZGVjLT5kZXYgPSAmZGV2LT5kZXY7CisJd204NDAwX2RhaS5kZXYgPSAmZGV2LT5kZXY7CisKKwljb2RlYy0+bmFtZSA9ICJXTTg0MDAiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NDAwX3JlYWQ7CisJY29kZWMtPndyaXRlID0gd204NDAwX3dyaXRlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg0MDBfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg0MDBfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg0MDBfUkVHSVNURVJfQ09VTlQ7CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmssIHdtODQwMF9wcm9iZV9kZWZlcnJlZCk7CisKKwl3bTg0MDBfY29kZWNfcmVzZXQoY29kZWMpOworCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgcmVnIHwgV004NDAwX0NPREVDX0VOQSk7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgKi8KKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJICAgICByZWcgJiBXTTg0MDBfSVBWVSk7CisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJICAgICByZWcgJiBXTTg0MDBfSVBWVSk7CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9MRUZUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOworCisJd204NDAwX2NvZGVjID0gY29kZWM7CisKKwlpZiAoIXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmspKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3JlZ3VsYXRvcjoKKwl3bTg0MDBfY29kZWMgPSBOVUxMOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShwb3dlciksIHBvd2VyKTsKK2VycjoKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCB3bTg0MDBfY29kZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKnByaXYgPSB3bTg0MDBfY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgcmVnOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NDAwX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKHdtODQwMF9jb2RlYyk7CisKKwlyZWcgPSB3bTg0MDBfcmVhZCh3bTg0MDBfY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCXdtODQwMF93cml0ZSh3bTg0MDBfY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCSAgICAgcmVnICYgKH5XTTg0MDBfQ09ERUNfRU5BKSk7CisKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUocG93ZXIpLCBwb3dlcik7CisJa2ZyZWUocHJpdik7CisKKwl3bTg0MDBfY29kZWMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODQwMF9jb2RlY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204NDAwLWNvZGVjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTg0MDBfY29kZWNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZXhpdF9wKHdtODQwMF9jb2RlY19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204NDAwX2NvZGVjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTg0MDBfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODQwMF9jb2RlY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODQwMF9jb2RlY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODQwMF9jb2RlY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204NDAwX2NvZGVjX2V4aXQpOworCitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODQwMCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg0MDAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODQwMC1jb2RlYyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg0MDAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljNTkzNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIHdtODQwMC5oICAtLSAgYXVkaW8gZHJpdmVyIGZvciBXTTg0MDAKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfV004NDAwX0NPREVDX0gKKyNkZWZpbmUgX1dNODQwMF9DT0RFQ19ICisKKyNkZWZpbmUgV004NDAwX01DTEtfRElWIDAKKyNkZWZpbmUgV004NDAwX0RBQ0NMS19ESVYgMQorI2RlZmluZSBXTTg0MDBfQURDQ0xLX0RJViAyCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJViAzCisKKyNkZWZpbmUgV004NDAwX01DTEtfRElWXzEgMHg0MDAKKyNkZWZpbmUgV004NDAwX01DTEtfRElWXzIgMHg4MDAKKworI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8xICAgIDB4MDAKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMV81ICAweDA0CisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzIgICAgMHgwOAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8zICAgIDB4MGMKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfNCAgICAweDEwCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzVfNSAgMHgxNAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl82ICAgIDB4MTgKKworI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8xICAgIDB4MDAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMV81ICAweDIwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzIgICAgMHg0MAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8zICAgIDB4NjAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfNCAgICAweDgwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzVfNSAgMHhhMAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl82ICAgIDB4YzAKKworCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xICAgICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xXzUgICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8yICAgICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8zICAgICAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl80ICAgICAgICAgICAgICAgICAgICAgICAoMHg0IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl81XzUgICAgICAgICAgICAgICAgICAgICAoMHg1IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl82ICAgICAgICAgICAgICAgICAgICAgICAoMHg2IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl84ICAgICAgICAgICAgICAgICAgICAgICAoMHg3IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xMSAgICAgICAgICAgICAgICAgICAgICAoMHg4IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xMiAgICAgICAgICAgICAgICAgICAgICAoMHg5IDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8xNiAgICAgICAgICAgICAgICAgICAgICAoMHhBIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8yMiAgICAgICAgICAgICAgICAgICAgICAoMHhCIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8yNCAgICAgICAgICAgICAgICAgICAgICAoMHhDIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl8zMiAgICAgICAgICAgICAgICAgICAgICAoMHhEIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl80NCAgICAgICAgICAgICAgICAgICAgICAoMHhFIDw8IDEpCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl80OCAgICAgICAgICAgICAgICAgICAgICAoMHhGIDw8IDEpCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NDAwX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg0MDA7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKaW5kZXggNDBmODIzOC4uNmE0Y2VhMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCkBAIC0xNzEsMjIgKzE3MSw2IEBACiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFdNODUxMF9NT05PTUlYLCA2LCAxLCAxKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg1MTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTEwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODUxMF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLAotCQkJCQlOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogU3BlYWtlciBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg1MTBfc3BlYWtlcl9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBXTTg1MTBfU1BLTUlYLCAxLCAxLCAwKSwKQEAgLTM1Miw3ICszMzYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlwbGxfZmFjdG9ycyhmcmVxX291dCo4LCBmcmVxX2luKTsKKwlwbGxfZmFjdG9ycyhmcmVxX291dCo0LCBmcmVxX2luKTsKIAogCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BMTE4sIChwbGxfZGl2LnByZV9kaXYgPDwgNCkgfCBwbGxfZGl2Lm4pOwogCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BMTEsxLCBwbGxfZGl2LmsgPj4gMTgpOwpAQCAtMzgzLDcgKzM2Nyw3IEBACiAJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0dQSU8sIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV004NTEwX01DTEtESVY6Ci0JCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0NMT0NLKSAmIDB4MWY7CisJCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0NMT0NLKSAmIDB4MTFmOwogCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9DTE9DSywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg1MTBfQURDQ0xLOgpAQCAtNDY4LDcgKzQ1Miw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBpZmFjZSA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0lGQUNFKSAmIDB4MTlmOwogCXUxNiBhZG4gPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9BREQpICYgMHgxZjE7CiAKQEAgLTU3MCw2ICs1NTQsMTQgQEAKICNkZWZpbmUgV004NTEwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTEwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODUxMF9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg1MTBfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODUxMF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODUxMF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODUxMF9zZXRfZGFpX3BsbCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg1MTBfZGFpID0gewogCS5uYW1lID0gIldNODUxMCBIaUZpIiwKIAkucGxheWJhY2sgPSB7CkBAIC01ODQsMjAgKzU3NiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NTEwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODUxMF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODUxMF9wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NTEwX211dGUsCi0JCS5zZXRfZm10ID0gd204NTEwX3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODUxMF9zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg1MTBfc2V0X2RhaV9wbGwsCi0JfSwKKwkub3BzID0gJndtODUxMF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODUxMF9kYWkpOwogCiBzdGF0aWMgaW50IHdtODUxMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02MDYsNyArNTkyLDcgQEAKIHN0YXRpYyBpbnQgd204NTEwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC02MjgsNyArNjE0LDcgQEAKICAqLwogc3RhdGljIGludCB3bTg1MTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg1MTAiOwpAQCAtNjU2LDcgKzY0Miw4IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwogCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwotCXdtODUxMF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg1MTBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NTEwX3NuZF9jb250cm9scykpOwogCXdtODUxMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjg1LDcgKzY3Miw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NTEwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTc2Niw3ICs3NTMsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgd204NTEwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NTEwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CkBAIC04MzIsNyArODE5LDcgQEAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC04NjIsNyArODQ5LDcgQEAKIHN0YXRpYyBpbnQgd204NTEwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwppbmRleCBkMDA0ZTU4Li40NDJlYTZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogd204NTgwLmMgIC0tICBXTTg1ODAgQUxTQSBTb2MgQXVkaW8gZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIENvcHlyaWdodCAyMDA4LCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMzUsMTkgKzM1LDYgQEAKIAogI2luY2x1ZGUgIndtODU4MC5oIgogCi0jZGVmaW5lIFdNODU4MF9WRVJTSU9OICIwLjEiCi0KLXN0cnVjdCBwbGxfc3RhdGUgewotCXVuc2lnbmVkIGludCBpbjsKLQl1bnNpZ25lZCBpbnQgb3V0OwotfTsKLQotLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCi1zdHJ1Y3Qgd204NTgwX3ByaXYgewotCXN0cnVjdCBwbGxfc3RhdGUgYTsKLQlzdHJ1Y3QgcGxsX3N0YXRlIGI7Ci19OwotCiAvKiBXTTg1ODAgcmVnaXN0ZXIgc3BhY2UgKi8KICNkZWZpbmUgV004NTgwX1BMTEExICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgV004NTgwX1BMTEEyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKQEAgLTEwMiw2ICs4OSw4IEBACiAjZGVmaW5lIFdNODU4MF9SRUFEQkFDSyAgICAgICAgICAgICAgICAgICAgICAweDM0CiAjZGVmaW5lIFdNODU4MF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDM1CiAKKyNkZWZpbmUgV004NTgwX01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgIDB4MzUKKwogLyogUExMQjQgKHJlZ2lzdGVyIDdoKSAqLwogI2RlZmluZSBXTTg1ODBfUExMQjRfTUNMS09VVFNSQ19NQVNLICAgMHg2MAogI2RlZmluZSBXTTg1ODBfUExMQjRfTUNMS09VVFNSQ19QTExBICAgMHgyMApAQCAtMTkzLDYgKzE4MiwyMCBAQAogCTB4MDAwMCwgMHgwMDAwIC8qUjUzKi8KIH07CiAKK3N0cnVjdCBwbGxfc3RhdGUgeworCXVuc2lnbmVkIGludCBpbjsKKwl1bnNpZ25lZCBpbnQgb3V0OworfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204NTgwX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbV004NTgwX01BWF9SRUdJU1RFUiArIDFdOworCXN0cnVjdCBwbGxfc3RhdGUgYTsKKwlzdHJ1Y3QgcGxsX3N0YXRlIGI7Cit9OworCisKIC8qCiAgKiByZWFkIHdtODU4MCByZWdpc3RlciBjYWNoZQogICovCkBAIC0yMDAsNyArMjAzLDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPiBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKKwlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NTgwX3JlZykpOwogCXJldHVybiBjYWNoZVtyZWddOwogfQogCkBAIC0yMjMsNyArMjI2LDcgQEAKIHsKIAl1OCBkYXRhWzJdOwogCi0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NTgwX3JlZykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CiAKIAkvKiBSZWdpc3RlcnMgYXJlIDkgYml0cyB3aWRlICovCiAJdmFsdWUgJj0gMHgxZmY7CkBAIC0zMzAsMjAgKzMzMyw2IEBACiBTT0NfU0lOR0xFKCJBREMgSGlnaC1QYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg1ODBfQURDX0NPTlRST0wxLCA0LCAxLCAwKSwKIH07CiAKLS8qIEFkZCBub24tREFQTSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg1ODBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTgwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204NTgwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NTgwX2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX0RBQygiREFDMSIsICJQbGF5YmFjayIsIFdNODU4MF9QV1JETjEsIDIsIDEpLAogU05EX1NPQ19EQVBNX0RBQygiREFDMiIsICJQbGF5YmFjayIsIFdNODU4MF9QV1JETjEsIDMsIDEpLApAQCAtNTUzLDcgKzU0Miw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBwYWlmYiA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUEFJRjMgKyBkYWktPmlkKTsKIAogCXBhaWZiICY9IH5XTTg1ODBfQUlGX0xFTkdUSF9NQVNLOwpAQCAtNzcxLDggKzc2MCwyMiBAQAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIFBvd2VyIHVwIGFuZCBnZXQgaW5kaXZpZHVhbCBjb250cm9sIG9mIHRoZSBEQUNzICovCisJCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSk7CisJCQlyZWcgJj0gfihXTTg1ODBfUFdSRE4xX1BXRE4gfCBXTTg1ODBfUFdSRE4xX0FMTERBQ1BEKTsKKwkJCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgcmVnKTsKKworCQkJLyogTWFrZSBWTUlEIGhpZ2ggaW1wZWRlbmNlICovCisJCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgIFdNODU4MF9BRENfQ09OVFJPTDEpOworCQkJcmVnICY9IH4weDEwMDsKKwkJCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX0FEQ19DT05UUk9MMSwgcmVnKTsKKwkJfQorCQlicmVhazsKKwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpOwogCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHJlZyB8IFdNODU4MF9QV1JETjFfUFdETik7CkBAIC03ODUsNiArNzg4LDIxIEBACiAjZGVmaW5lIFdNODU4MF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTgwX2RhaV9vcHNfcGxheWJhY2sgPSB7CisJLmh3X3BhcmFtcwk9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NTgwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NTgwX3NldF9kYWlfcGxsLAorCS5kaWdpdGFsX211dGUJPSB3bTg1ODBfZGlnaXRhbF9tdXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTgwX2RhaV9vcHNfY2FwdHVyZSA9IHsKKwkuaHdfcGFyYW1zCT0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg1ODBfc2V0X2RhaV9wbGwsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NTgwX2RhaVtdID0gewogCXsKIAkJLm5hbWUgPSAiV004NTgwIFBBSUZSWCIsCkBAIC03OTYsMTMgKzgxNCw3IEBACiAJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKIAkJCS5mb3JtYXRzID0gV004NTgwX0ZPUk1BVFMsCiAJCX0sCi0JCS5vcHMgPSB7Ci0JCQkgLmh3X3BhcmFtcyA9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKLQkJCSAuc2V0X2ZtdCA9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAotCQkJIC5zZXRfY2xrZGl2ID0gd204NTgwX3NldF9kYWlfY2xrZGl2LAotCQkJIC5zZXRfcGxsID0gd204NTgwX3NldF9kYWlfcGxsLAotCQkJIC5kaWdpdGFsX211dGUgPSB3bTg1ODBfZGlnaXRhbF9tdXRlLAotCQkgfSwKKwkJLm9wcyA9ICZ3bTg1ODBfZGFpX29wc19wbGF5YmFjaywKIAl9LAogCXsKIAkJLm5hbWUgPSAiV004NTgwIFBBSUZUWCIsCkBAIC04MTQsMTA5ICs4MjYsMTY4IEBACiAJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKIAkJCS5mb3JtYXRzID0gV004NTgwX0ZPUk1BVFMsCiAJCX0sCi0JCS5vcHMgPSB7Ci0JCQkgLmh3X3BhcmFtcyA9IHdtODU4MF9wYWlmX2h3X3BhcmFtcywKLQkJCSAuc2V0X2ZtdCA9IHdtODU4MF9zZXRfcGFpZl9kYWlfZm10LAotCQkJIC5zZXRfY2xrZGl2ID0gd204NTgwX3NldF9kYWlfY2xrZGl2LAotCQkJIC5zZXRfcGxsID0gd204NTgwX3NldF9kYWlfcGxsLAotCQkgfSwKKwkJLm9wcyA9ICZ3bTg1ODBfZGFpX29wc19jYXB0dXJlLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NTgwX2RhaSk7CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBXTTg1ODAgZHJpdmVyCi0gKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHdtODU4MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg1ODBfY29kZWM7CisKK3N0YXRpYyBpbnQgd204NTgwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAotCWNvZGVjLT5uYW1lID0gIldNODU4MCI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg1ODBfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NTgwX3dyaXRlOwotCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODU4MF9zZXRfYmlhc19sZXZlbDsKLQljb2RlYy0+ZGFpID0gd204NTgwX2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod204NTgwX2RhaSk7Ci0JY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg1ODBfcmVnKTsKLQljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTg1ODBfcmVnLCBzaXplb2Yod204NTgwX3JlZyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODU4MF9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogR2V0IHRoZSBjb2RlYyBpbnRvIGEga25vd24gc3RhdGUgKi8KLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9SRVNFVCwgMCk7Ci0KLQkvKiBQb3dlciB1cCBhbmQgZ2V0IGluZGl2aWR1YWwgY29udHJvbCBvZiB0aGUgREFDcyAqLwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpICYKLQkJICAgICB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpKTsKLQotCS8qIE1ha2UgVk1JRCBoaWdoIGltcGVkZW5jZSAqLwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX0FEQ19DT05UUk9MMSwKLQkJICAgICB3bTg1ODBfcmVhZChjb2RlYywgIFdNODU4MF9BRENfQ09OVFJPTDEpICYgfjB4MTAwKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NTgwX2NvZGVjOworCWNvZGVjID0gd204NTgwX2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwotCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsCi0JCQkgICAgICAgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NTgwOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOwogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0Jd204NTgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODU4MF9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NTgwX3NuZF9jb250cm9scykpOwogCXdtODU4MF9hZGRfd2lkZ2V0cyhjb2RlYyk7Ci0KIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NTgwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBjYXJkX2VycjsKIAl9CisKIAlyZXR1cm4gcmV0OwogCiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCXJldHVybiByZXQ7CiB9CiAKLS8qIElmIHRoZSBpMmMgbGF5ZXIgd2VyZW4ndCBzbyBicm9rZW4sIHdlIGNvdWxkIHBhc3MgdGhpcyBraW5kIG9mIGRhdGEKLSAgIGFyb3VuZCAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqd204NTgwX3NvY2RldjsKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg1ODBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg1ODAgPSB7CisJLnByb2JlID0gCXdtODU4MF9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODU4MF9yZW1vdmUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg1ODApOworCitzdGF0aWMgaW50IHdtODU4MF9yZWdpc3RlcihzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg1ODAtPmNvZGVjOworCisJaWYgKHdtODU4MF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODU4MCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg1ODA7CisJY29kZWMtPm5hbWUgPSAiV004NTgwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODU4MF9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSB3bTg1ODBfd3JpdGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODU4MF9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gd204NTgwX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod204NTgwX2RhaSk7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg1ODAtPnJlZ19jYWNoZSk7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg1ODAtPnJlZ19jYWNoZTsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg1ODBfcmVnLCBzaXplb2Yod204NTgwX3JlZykpOworCisJLyogR2V0IHRoZSBjb2RlYyBpbnRvIGEga25vd24gc3RhdGUgKi8KKwlyZXQgPSB3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9SRVNFVCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXNldCBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpOyBpKyspCisJCXdtODU4MF9kYWlbaV0uZGV2ID0gY29kZWMtPmRldjsKKworCXdtODU4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJd204NTgwX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODU4MCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204NTgwX3VucmVnaXN0ZXIoc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODApCit7CisJd204NTgwX3NldF9iaWFzX2xldmVsKCZ3bTg1ODAtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh3bTg1ODBfZGFpLCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODU4MC0+Y29kZWMpOworCWtmcmVlKHdtODU4MCk7CisJd204NTgwX2NvZGVjID0gTlVMTDsKK30KIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQotLyoKLSAqIFdNODU4MCAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEdQSU81Ci0gKiBzdGF0ZSBkdXJpbmcgcG93ZXJ1cC4KLSAqICAgIGxvdyAgPSAweDFhCi0gKiAgICBoaWdoID0gMHgxYgotICovCi0KIHN0YXRpYyBpbnQgd204NTgwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODU4MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OworCXN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKKwl3bTg1ODAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NTgwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NTgwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204NTgwLT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg1ODApOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKLQlyZXQgPSB3bTg1ODBfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZpMmMtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODU4MFxuIik7Ci0JcmV0dXJuIHJldDsKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODU4MF9yZWdpc3Rlcih3bTg1ODApOwogfQogCiBzdGF0aWMgaW50IHdtODU4MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg1ODBfdW5yZWdpc3Rlcih3bTg1ODApOwogCXJldHVybiAwOwogfQogCkBAIC05MjgsMTI5ICs5OTksMzUgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODU4MF9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIldNODU4MCBJMkMgQ29kZWMiLAorCQkubmFtZSA9ICJ3bTg1ODAiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9ICAgIHdtODU4MF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9ICAgd204NTgwX2kyY19yZW1vdmUsCiAJLmlkX3RhYmxlID0gd204NTgwX2kyY19pZCwKIH07Ci0KLXN0YXRpYyBpbnQgd204NTgwX2FkZF9pMmNfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCB3bTg1ODBfc2V0dXBfZGF0YSAqc2V0dXApCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBzZXR1cC0+aTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJ3bTg1ODAiLCBJMkNfTkFNRV9TSVpFKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoc2V0dXAtPmkyY19idXMpOwotCWlmICghYWRhcHRlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgJWRcbiIsCi0JCQlzZXR1cC0+aTJjX2J1cyk7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwotfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgd204NTgwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgd204NTgwX3NldHVwX2RhdGEgKnNldHVwOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MDsKLQlpbnQgcmV0ID0gMDsKLQotCXByX2luZm8oIldNODU4MCBBdWRpbyBDb2RlYyAlc1xuIiwgV004NTgwX1ZFUlNJT04pOwotCi0Jc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7Ci0JY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXdtODU4MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg1ODBfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICh3bTg1ODAgPT0gTlVMTCkgewotCQlrZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg1ODA7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0Jd204NTgwX3NvY2RldiA9IHNvY2RldjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpZiAoc2V0dXAtPmkyY19hZGRyZXNzKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKLQkJcmV0ID0gd204NTgwX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKLQl9Ci0jZWxzZQotCQkvKiBBZGQgb3RoZXIgaW50ZXJmYWNlcyBoZXJlICovCi0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBwb3dlciBkb3duIGNoaXAgKi8KLXN0YXRpYyBpbnQgd204NTgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl3bTg1ODBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Jc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7Ci0jZW5kaWYKLQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQlrZnJlZShjb2RlYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NTgwID0gewotCS5wcm9iZSA9IAl3bTg1ODBfcHJvYmUsCi0JLnJlbW92ZSA9IAl3bTg1ODBfcmVtb3ZlLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NTgwKTsKLQogc3RhdGljIGludCBfX2luaXQgd204NTgwX21vZGluaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworCWludCByZXQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NTgwIEkyQyBkcml2ZXI6ICVkXG4iLCByZXQpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdCh3bTg1ODBfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3bTg1ODBfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOworI2VuZGlmCiB9CiBtb2R1bGVfZXhpdCh3bTg1ODBfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5oCmluZGV4IDA5ZTQ0MjIuLjBkZmI1ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaApAQCAtMjgsMTEgKzI4LDYgQEAKICNkZWZpbmUgV004NTgwX0NMS1NSQ19PU0MgIDQKICNkZWZpbmUgV004NTgwX0NMS1NSQ19OT05FIDUKIAotc3RydWN0IHdtODU4MF9zZXR1cF9kYXRhIHsKLQlpbnQgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07Ci0KICNkZWZpbmUgV004NTgwX0RBSV9QQUlGUlggMAogI2RlZmluZSBXTTg1ODBfREFJX1BBSUZUWCAxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCmluZGV4IDgwYjExOTguLmU3ZmYyMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjguYwpAQCAtNDcsNyArNDcsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAl1MTYgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CiAJY2FjaGVbcmVnXSA9IHZhbHVlOwogfQogCkBAIC05MiwyMSArOTIsNiBAQAogU09DX1NJTkdMRSgiRGVlbXBoYXNpcyIsIFdNODcyOF9EQUNDVEwsIDEsIDEsIDApLAogfTsKIAotc3RhdGljIGludCB3bTg3MjhfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzI4X3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204NzI4X3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIERBUE0gY29udHJvbHMuCiAgKi8KQEAgLTE1Miw3ICsxMzcsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgZGFjID0gd204NzI4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MjhfREFDQ1RMKTsKIAogCWRhYyAmPSB+MHgxODsKQEAgLTI1OSw2ICsyNDQsMTIgQEAKICNkZWZpbmUgV004NzI4X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODcyOF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg3MjhfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3MjhfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODcyOF9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3MjhfZGFpID0gewogCS5uYW1lID0gIldNODcyOCIsCiAJLnBsYXliYWNrID0gewpAQCAtMjY4LDE4ICsyNTksMTQgQEAKIAkJLnJhdGVzID0gV004NzI4X1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODcyOF9GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJIC5od19wYXJhbXMgPSB3bTg3MjhfaHdfcGFyYW1zLAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODcyOF9tdXRlLAotCQkgLnNldF9mbXQgPSB3bTg3Mjhfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmd204NzI4X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzI4X2RhaSk7CiAKIHN0YXRpYyBpbnQgd204NzI4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMjg5LDcgKzI3Niw3IEBACiBzdGF0aWMgaW50IHdtODcyOF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCk7CiAKQEAgLTMwMiw3ICsyODksNyBAQAogICovCiBzdGF0aWMgaW50IHdtODcyOF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODcyOCI7CkBAIC0zMzAsNyArMzE3LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAl3bTg3Mjhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCXdtODcyOF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3Mjhfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzI4X3NuZF9jb250cm9scykpOwogCXdtODcyOF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMzYzLDcgKzM1MSw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzI4X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTQ0NCw3ICs0MzIsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgd204NzI4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzI4X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CkBAIC01MDgsNyArNDk2LDcgQEAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC01NDEsNyArNTI5LDcgQEAKIHN0YXRpYyBpbnQgd204NzI4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCBjNDQ0YjlmLi5lMDQzZTNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTI5LDE1ICsyOSwyMCBAQAogCiAjaW5jbHVkZSAid204NzMxLmgiCiAKLSNkZWZpbmUgV004NzMxX1ZFUlNJT04gIjAuMTMiCi0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NzMxX2NvZGVjOwogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxOwogCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCB3bTg3MzFfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg3MzFfQ0FDSEVSRUdOVU1dOwogCXVuc2lnbmVkIGludCBzeXNjbGs7CiB9OwogCisjaWZkZWYgQ09ORklHX1NQSV9NQVNURVIKK3N0YXRpYyBpbnQgd204NzMxX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKKyNlbmRpZgorCiAvKgogICogd204NzMxIHJlZ2lzdGVyIGNhY2hlCiAgKiBXZSBjYW4ndCByZWFkIHRoZSBXTTg3MzEgcmVnaXN0ZXIgc3BhY2Ugd2hlbiB3ZSBhcmUKQEAgLTEyOSwyMiArMTM0LDYgQEAKIFNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHdtODczMV9lbnVtWzFdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg3MzFfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204NzMxX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogT3V0cHV0IE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzMxX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBXTTg3MzFfQVBBTkEsIDMsIDEsIDApLApAQCAtMjY5LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgaWZhY2UgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9JRkFDRSkgJiAweGZmZjM7CiAJaW50IGkgPSBnZXRfY29lZmYod204NzMxLT5zeXNjbGssIHBhcmFtc19yYXRlKHBhcmFtcykpOwpAQCAtMjk5LDcgKzI4OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogc2V0IGFjdGl2ZSAqLwogCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwMDAxKTsKQEAgLTMxMiw3ICszMDEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGRlYWN0aXZhdGUgKi8KIAlpZiAoIWNvZGVjLT5hY3RpdmUpIHsKQEAgLTQxNCwyMSArNDAzLDE5IEBACiBzdGF0aWMgaW50IHdtODczMV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXUxNiByZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9QV1IpICYgMHhmZjdmOworCXUxNiByZWc7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCS8qIHZyZWYvbWlkLCBvc2Mgb24sIGRhYyB1bm11dGUgKi8KLQkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUFdSLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQkvKiBldmVyeXRoaW5nIG9mZiBleGNlcHQgdnJlZi92bWlkLCAqLworCQkvKiBDbGVhciBQV1JPRkYsIGdhdGUgQ0xLT1VULCBldmVyeXRoaW5nIGVsc2UgYXMtaXMgKi8KKwkJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUFdSKSAmIDB4ZmY3ZjsKIAkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUFdSLCByZWcgfCAweDAwNDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCS8qIGV2ZXJ5dGhpbmcgb2ZmLCBkYWMgbXV0ZSwgaW5hY3RpdmUgKi8KIAkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQUNUSVZFLCAweDApOwogCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9QV1IsIDB4ZmZmZik7CiAJCWJyZWFrOwpAQCAtNDQ2LDYgKzQzMywxNSBAQAogI2RlZmluZSBXTTg3MzFfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzMxX2RhaV9vcHMgPSB7CisJLnByZXBhcmUJPSB3bTg3MzFfcGNtX3ByZXBhcmUsCisJLmh3X3BhcmFtcwk9IHdtODczMV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gd204NzMxX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUJPSB3bTg3MzFfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IHdtODczMV9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHdtODczMV9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3MzFfZGFpID0gewogCS5uYW1lID0gIldNODczMSIsCiAJLnBsYXliYWNrID0gewpAQCAtNDYwLDIxICs0NTYsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODczMV9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3MzFfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gd204NzMxX3BjbV9wcmVwYXJlLAotCQkuaHdfcGFyYW1zID0gd204NzMxX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gd204NzMxX3NodXRkb3duLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzMxX211dGUsCi0JCS5zZXRfc3lzY2xrID0gd204NzMxX3NldF9kYWlfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHdtODczMV9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ3bTg3MzFfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg3MzFfZGFpKTsKIAogc3RhdGljIGludCB3bTg3MzFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CiAJd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKQEAgLTQ4NCw3ICs0NzMsNyBAQAogc3RhdGljIGludCB3bTg3MzFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTUwMCw1NCArNDg5LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBXTTg3MzEgZHJpdmVyCi0gKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHdtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIGludCB3bTg3MzFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZWcsIHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CiAKLQljb2RlYy0+bmFtZSA9ICJXTTg3MzEiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204NzMxX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODczMV93cml0ZTsKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg3MzFfc2V0X2JpYXNfbGV2ZWw7Ci0JY29kZWMtPmRhaSA9ICZ3bTg3MzFfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gMTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODczMV9yZWcpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtODczMV9yZWcsIHNpemVvZih3bTg3MzFfcmVnKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHdtODczMV9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCXdtODczMV9yZXNldChjb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODczMV9jb2RlYzsKKwljb2RlYyA9IHdtODczMV9jb2RlYzsKIAogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NzMxOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOwogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0JLyogcG93ZXIgb24gZGV2aWNlICovCi0Jd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0KLQkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCi0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfTE9VVDFWKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9MT1VUMVYsIHJlZyAmIH4weDAxMDApOwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1JPVVQxVik7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUk9VVDFWLCByZWcgJiB+MHgwMTAwKTsKLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MSU5WT0wpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xJTlZPTCwgcmVnICYgfjB4MDEwMCk7Ci0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUklOVk9MKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9SSU5WT0wsIHJlZyAmIH4weDAxMDApOwotCi0Jd204NzMxX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NzMxX3NuZF9jb250cm9scykpOwogCXdtODczMV9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIndtODczMTogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZDogJWRcbiIsIHJldCk7CiAJCWdvdG8gY2FyZF9lcnI7CiAJfQogCkBAIC01NTcsMTMzICs1MjUsMTA5IEBACiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp3bTg3MzFfc29jZGV2OwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCi0vKgotICogV004NzMxIDIgd2lyZSBhZGRyZXNzIGlzIGRldGVybWluZWQgYnkgR1BJTzUKLSAqIHN0YXRlIGR1cmluZyBwb3dlcnVwLgotICogICAgbG93ICA9IDB4MWEKLSAqICAgIGhpZ2ggPSAweDFiCi0gKi8KLQotc3RhdGljIGludCB3bTg3MzFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCi0JCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODczMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODczMV9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7Ci0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CiAKLQlyZXQgPSB3bTg3MzFfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODczMVxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdtODczMV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3MzFfaTJjX2lkW10gPSB7Ci0JeyAid204NzMxIiwgMCB9LAotCXsgfQorc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxID0geworCS5wcm9iZSA9IAl3bTg3MzFfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg3MzFfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODczMV9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg3MzFfcmVzdW1lLAogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3MzFfaTJjX2lkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzMxKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODczMV9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIldNODczMSBJMkMgQ29kZWMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9ICAgIHdtODczMV9pMmNfcHJvYmUsCi0JLnJlbW92ZSA9ICAgd204NzMxX2kyY19yZW1vdmUsCi0JLmlkX3RhYmxlID0gd204NzMxX2kyY19pZCwKLX07Ci0KLXN0YXRpYyBpbnQgd204NzMxX2FkZF9pMmNfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSAqc2V0dXApCitzdGF0aWMgaW50IHdtODczMV9yZWdpc3RlcihzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSkKIHsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOworCXUxNiByZWc7CiAKLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRyaXZlclxuIik7CisJaWYgKHdtODczMV9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODczMSBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3MzE7CisJY29kZWMtPm5hbWUgPSAiV004NzMxIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODczMV9yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSB3bTg3MzFfd3JpdGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODczMV9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODczMV9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODczMV9DQUNIRVJFR05VTTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODczMS0+cmVnX2NhY2hlOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODczMV9yZWcsIHNpemVvZih3bTg3MzFfcmVnKSk7CisKKwlyZXQgPSB3bTg3MzFfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gc2V0dXAtPmkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisJd204NzMxX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihzZXR1cC0+aTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKLQkJCXNldHVwLT5pMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOworCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogTGF0Y2ggdGhlIHVwZGF0ZSBiaXRzICovCisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfTE9VVDFWKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9MT1VUMVYsIHJlZyAmIH4weDAxMDApOworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1JPVVQxVik7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfUk9VVDFWLCByZWcgJiB+MHgwMTAwKTsKKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MSU5WT0wpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xJTlZPTCwgcmVnICYgfjB4MDEwMCk7CisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUklOVk9MKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9SSU5WT0wsIHJlZyAmIH4weDAxMDApOworCisJLyogRGlzYWJsZSBieXBhc3MgcGF0aCBieSBkZWZhdWx0ICovCisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfQVBBTkEpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FQQU5BLCByZWcgJiB+MHg0KTsKKworCXdtODczMV9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlnb3RvIGVycl9kcml2ZXI7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODczMV9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKLQotZXJyX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwogfQotI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdtODczMV91bnJlZ2lzdGVyKHN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxKQoreworCXdtODczMV9zZXRfYmlhc19sZXZlbCgmd204NzMxLT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg3MzEtPmNvZGVjKTsKKwlrZnJlZSh3bTg3MzEpOworCXdtODczMV9jb2RlYyA9IE5VTEw7Cit9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotc3RhdGljIGludCBfX2RldmluaXQgd204NzMxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzMxX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwotCi0JcmV0ID0gd204NzMxX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3MzFcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgd204NzMxX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODczMV9zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIndtODczMSIsCi0JCS5idXMJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSB3bTg3MzFfc3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzMxX3NwaV9yZW1vdmUpLAotfTsKLQogc3RhdGljIGludCB3bTg3MzFfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCiB7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB0OwpAQCAtNzA3LDEwMSArNjUxLDEyMSBAQAogCiAJcmV0dXJuIGxlbjsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU1BJX01BU1RFUiAqLwogCi1zdGF0aWMgaW50IHdtODczMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgd204NzMxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHdtODczMV9zZXR1cF9kYXRhICpzZXR1cDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzE7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcl9pbmZvKCJXTTg3MzEgQXVkaW8gQ29kZWMgJXMiLCBXTTg3MzFfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJd204NzMxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODczMV9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdtODczMSA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKKwlpZiAod204NzMxID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3MzE7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisJY29kZWMgPSAmd204NzMxLT5jb2RlYzsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODczMV9zcGlfd3JpdGU7CisJY29kZWMtPmRldiA9ICZzcGktPmRldjsKIAotCXdtODczMV9zb2NkZXYgPSBzb2NkZXY7Ci0JcmV0ID0gLUVOT0RFVjsKKwlzcGktPmRldi5kcml2ZXJfZGF0YSA9IHdtODczMTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpZiAoc2V0dXAtPmkyY19hZGRyZXNzKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKLQkJcmV0ID0gd204NzMxX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotCWlmIChzZXR1cC0+c3BpKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODczMV9zcGlfd3JpdGU7Ci0JCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgc3BpIGRyaXZlciIpOwotCX0KLSNlbmRpZgotCi0JaWYgKHJldCAhPSAwKSB7Ci0JCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCQlrZnJlZShjb2RlYyk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHdtODczMV9yZWdpc3Rlcih3bTg3MzEpOwogfQogCi0vKiBwb3dlciBkb3duIGNoaXAgKi8KLXN0YXRpYyBpbnQgd204NzMxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgd204NzMxX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBzcGktPmRldi5kcml2ZXJfZGF0YTsKIAotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCi0Jc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7Ci0JaTJjX2RlbF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3MzFfc3BpX2RyaXZlcik7Ci0jZW5kaWYKLQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQlrZnJlZShjb2RlYyk7CisJd204NzMxX3VucmVnaXN0ZXIod204NzMxKTsKIAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzEgPSB7Ci0JLnByb2JlID0gCXdtODczMV9wcm9iZSwKLQkucmVtb3ZlID0gCXdtODczMV9yZW1vdmUsCi0JLnN1c3BlbmQgPSAJd204NzMxX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXdtODczMV9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzMxX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAid204NzMxIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODczMV9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3MzFfc3BpX3JlbW92ZSksCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg3MzEpOworI2VuZGlmIC8qIENPTkZJR19TUElfTUFTVEVSICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg3MzFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODczMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3MzFfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg3MzEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODczMSk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NzMxX3JlZ2lzdGVyKHdtODczMSk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODczMV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg3MzFfdW5yZWdpc3Rlcih3bTg3MzEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzMxX2kyY19pZFtdID0geworCXsgIndtODczMSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzMxX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3MzFfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg3MzEgSTJDIENvZGVjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg3MzFfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODczMV9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bTg3MzFfaTJjX2lkLAorfTsKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCB3bTg3MzFfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzMxIEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzMxIFNQSSBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHdtODczMV9tb2Rpbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHdtODczMV9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOworI2VuZGlmCiB9CiBtb2R1bGVfZXhpdCh3bTg3MzFfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5oCmluZGV4IDk1MTkwZTkuLmNkN2I4MDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaApAQCAtMzQsMTIgKzM0LDYgQEAKICNkZWZpbmUgV004NzMxX1NZU0NMSwkwCiAjZGVmaW5lIFdNODczMV9EQUkJCTAKIAotc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIHsKLQlpbnQgICAgICAgICAgICBzcGk7Ci0JaW50ICAgICAgICAgICAgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07Ci0KIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzMxX2RhaTsKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCmluZGV4IDU5OTdmYTYuLmI2NDUwOWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwpAQCAtMjMxLDIxICsyMzEsNiBAQAogCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204NzUwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg3NTBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIERBUE0gQ29udHJvbHMKICAqLwpAQCAtNjE5LDcgKzYwNCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3NTBfcHJpdiAqd204NzUwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgaWZhY2UgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9JRkFDRSkgJiAweDFmMzsKIAl1MTYgc3JhdGUgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9TUkFURSkgJiAweDFjMDsKQEAgLTY5NCw2ICs2NzksMTMgQEAKICNkZWZpbmUgV004NzUwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg3NTBfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUwX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTBfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB3bTg3NTBfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzUwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg3NTAiLAogCS5wbGF5YmFjayA9IHsKQEAgLTcwOCwxMiArNzAwLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTBfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTBfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1MF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTBfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1MF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODc1MF9kYWkpOwogCkBAIC03MjcsNyArNzE0LDcgQEAKIHN0YXRpYyBpbnQgd204NzUwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTczNiw3ICs3MjMsNyBAQAogc3RhdGljIGludCB3bTg3NTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTc2OSw3ICs3NTYsNyBAQAogICovCiBzdGF0aWMgaW50IHdtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnLCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004NzUwIjsKQEAgLTgxNiw3ICs4MDMsOCBAQAogCXJlZyA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX1JJTlZPTCk7CiAJd204NzUwX3dyaXRlKGNvZGVjLCBXTTg3NTBfUklOVk9MLCByZWcgfCAweDAxMDApOwogCi0Jd204NzUwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3NTBfc25kX2NvbnRyb2xzKSk7CiAJd204NzUwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC04NTAsNyArODM4LDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtOTMxLDcgKzkxOSw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3NTBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKQEAgLTEwMDMsNyArOTkxLDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzUwOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTEwNTcsNyArMTA0NSw3IEBACiBzdGF0aWMgaW50IHdtODc1MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg3NTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKaW5kZXggNzc2MjBhYi4uYTZlOGYzZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCkBAIC01MSw4ICs1MSw2IEBACiAKICNpbmNsdWRlICJ3bTg3NTMuaCIKIAotI2RlZmluZSBXTTg3NTNfVkVSU0lPTiAiMC4xNiIKLQogc3RhdGljIGludCBjYXBzX2NoYXJnZSA9IDIwMDA7CiBtb2R1bGVfcGFyYW0oY2Fwc19jaGFyZ2UsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNhcHNfY2hhcmdlLCAiV004NzUzIGNhcCBjaGFyZ2UgdGltZSAobXNlY3MpIik7CkBAIC02MCwxMiArNTgsNiBAQAogc3RhdGljIHZvaWQgd204NzUzX3NldF9kYWlfbW9kZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJdW5zaWduZWQgaW50IG1vZGUpOwogCi0vKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KLXN0cnVjdCB3bTg3NTNfcHJpdiB7Ci0JdW5zaWduZWQgaW50IHN5c2NsazsKLQl1bnNpZ25lZCBpbnQgcGNtY2xrOwotfTsKLQogLyoKICAqIHdtODc1MyByZWdpc3RlciBjYWNoZQogICogV2UgY2FuJ3QgcmVhZCB0aGUgV004NzUzIHJlZ2lzdGVyIHNwYWNlIHdoZW4gd2UKQEAgLTkwLDYgKzgyLDE0IEBACiAJMHgwMDAwLCAweDAwMDAKIH07CiAKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODc1M19wcml2IHsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworCXVuc2lnbmVkIGludCBwY21jbGs7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtBUlJBWV9TSVpFKHdtODc1M19yZWcpXTsKK307CisKIC8qCiAgKiByZWFkIHdtODc1MyByZWdpc3RlciBjYWNoZQogICovCkBAIC05Nyw3ICs5Nyw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnIDwgMSB8fCByZWcgPiAoQVJSQVlfU0laRSh3bTg3NTNfcmVnKSArIDEpKQorCWlmIChyZWcgPCAxIHx8IHJlZyA+PSAoQVJSQVlfU0laRSh3bTg3NTNfcmVnKSArIDEpKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIGNhY2hlW3JlZyAtIDFdOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPCAxIHx8IHJlZyA+IDB4M2YpCisJaWYgKHJlZyA8IDEgfHwgcmVnID49IChBUlJBWV9TSVpFKHdtODc1M19yZWcpICsgMSkpCiAJCXJldHVybjsKIAljYWNoZVtyZWcgLSAxXSA9IHZhbHVlOwogfQpAQCAtMzM5LDIxICszMzksNiBAQAogU09DX0VOVU0oIlJPVVQyIFBoYXNlIiwgd204NzUzX2VudW1bMjhdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg3NTNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODc1M19zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogX0RBUE1fIENvbnRyb2xzCiAgKi8KQEAgLTkyNyw3ICs5MTIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IHZvaWNlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUENNKSAmIDB4MDFmMzsKIAl1MTYgc3JhdGUgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTEpICYgMHgwMTdmOwpAQCAtMTE2MSw3ICsxMTQ2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBzcmF0ZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1NSQVRFMSkgJiAweDAxYzA7CiAJdTE2IGhpZmkgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ISUZJKSAmIDB4MDFmMzsKQEAgLTEzMTYsNiArMTMwMSw1MSBAQAogICogMy4gVm9pY2UgZGlzYWJsZWQgLSBISUZJIG92ZXIgSElGSQogICogNC4gVm9pY2UgZGlzYWJsZWQgLSBISUZJIG92ZXIgSElGSSwgdXNlcyB2b2ljZSBEQUkgTFJDIGZvciBjYXB0dXJlCiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTEgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlMWhfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlMSA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUxdl9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUyID0geworCS5od19wYXJhbXMJPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc19oaWZpX21vZGUzCT0geworCS5od19wYXJhbXMJPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTQJPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3NTNfYWxsX2RhaVtdID0gewogLyogREFJIEhpRmkgbW9kZSAxICovCiB7CS5uYW1lID0gIldNODc1MyBIaUZpIiwKQEAgLTEzMzIsMTQgKzEzNjIsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTFoX3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGUxLAogfSwKIC8qIERBSSBWb2ljZSBtb2RlIDEgKi8KIHsJLm5hbWUgPSAiV004NzUzIFZvaWNlIiwKQEAgLTEzNTYsMTQgKzEzNzksNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUxdl9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTEsCiB9LAogLyogREFJIEhpRmkgbW9kZSAyIC0gZHVtbXkgKi8KIHsJLm5hbWUgPSAiV004NzUzIEhpRmkiLApAQCAtMTM4NCwxNCArMTQwMCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUyLAogfSwKIC8qIERBSSBIaUZpIG1vZGUgMyAqLwogewkubmFtZSA9ICJXTTg3NTMgSGlGaSIsCkBAIC0xNDA4LDE0ICsxNDE3LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGUzLAogfSwKIC8qIERBSSBWb2ljZSBtb2RlIDMgLSBkdW1teSAqLwogewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLApAQCAtMTQzNiwxNCArMTQzOCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlNCwKIH0sCiAvKiBEQUkgVm9pY2UgbW9kZSA0IC0gZHVtbXkgKi8KIHsJLm5hbWUgPSAiV004NzUzIFZvaWNlIiwKQEAgLTE0NjYsMzAgKzE0NjEsMzUgQEAKIAlpZiAobW9kZSA8IDQpIHsKIAkJaW50IHBsYXliYWNrX2FjdGl2ZSwgY2FwdHVyZV9hY3RpdmUsIGNvZGVjX2FjdGl2ZSwgcG9wX3dhaXQ7CiAJCXZvaWQgKnByaXZhdGVfZGF0YTsKKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJCXBsYXliYWNrX2FjdGl2ZSA9IHdtODc1M19kYWlbMF0ucGxheWJhY2suYWN0aXZlOwogCQljYXB0dXJlX2FjdGl2ZSA9IHdtODc1M19kYWlbMF0uY2FwdHVyZS5hY3RpdmU7CiAJCWNvZGVjX2FjdGl2ZSA9IHdtODc1M19kYWlbMF0uYWN0aXZlOwogCQlwcml2YXRlX2RhdGEgPSB3bTg3NTNfZGFpWzBdLnByaXZhdGVfZGF0YTsKIAkJcG9wX3dhaXQgPSB3bTg3NTNfZGFpWzBdLnBvcF93YWl0OworCQlsaXN0ID0gd204NzUzX2RhaVswXS5saXN0OwogCQl3bTg3NTNfZGFpWzBdID0gd204NzUzX2FsbF9kYWlbbW9kZSA8PCAxXTsKIAkJd204NzUzX2RhaVswXS5wbGF5YmFjay5hY3RpdmUgPSBwbGF5YmFja19hY3RpdmU7CiAJCXdtODc1M19kYWlbMF0uY2FwdHVyZS5hY3RpdmUgPSBjYXB0dXJlX2FjdGl2ZTsKIAkJd204NzUzX2RhaVswXS5hY3RpdmUgPSBjb2RlY19hY3RpdmU7CiAJCXdtODc1M19kYWlbMF0ucHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhOwogCQl3bTg3NTNfZGFpWzBdLnBvcF93YWl0ID0gcG9wX3dhaXQ7CisJCXdtODc1M19kYWlbMF0ubGlzdCA9IGxpc3Q7CiAKIAkJcGxheWJhY2tfYWN0aXZlID0gd204NzUzX2RhaVsxXS5wbGF5YmFjay5hY3RpdmU7CiAJCWNhcHR1cmVfYWN0aXZlID0gd204NzUzX2RhaVsxXS5jYXB0dXJlLmFjdGl2ZTsKIAkJY29kZWNfYWN0aXZlID0gd204NzUzX2RhaVsxXS5hY3RpdmU7CiAJCXByaXZhdGVfZGF0YSA9IHdtODc1M19kYWlbMV0ucHJpdmF0ZV9kYXRhOwogCQlwb3Bfd2FpdCA9IHdtODc1M19kYWlbMV0ucG9wX3dhaXQ7CisJCWxpc3QgPSB3bTg3NTNfZGFpWzFdLmxpc3Q7CiAJCXdtODc1M19kYWlbMV0gPSB3bTg3NTNfYWxsX2RhaVsobW9kZSA8PCAxKSArIDFdOwogCQl3bTg3NTNfZGFpWzFdLnBsYXliYWNrLmFjdGl2ZSA9IHBsYXliYWNrX2FjdGl2ZTsKIAkJd204NzUzX2RhaVsxXS5jYXB0dXJlLmFjdGl2ZSA9IGNhcHR1cmVfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzFdLmFjdGl2ZSA9IGNvZGVjX2FjdGl2ZTsKIAkJd204NzUzX2RhaVsxXS5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJCXdtODc1M19kYWlbMV0ucG9wX3dhaXQgPSBwb3Bfd2FpdDsKKwkJd204NzUzX2RhaVsxXS5saXN0ID0gbGlzdDsKIAl9CiAJd204NzUzX2RhaVswXS5jb2RlYyA9IGNvZGVjOwogCXdtODc1M19kYWlbMV0uY29kZWMgPSBjb2RlYzsKQEAgLTE1MDUsNyArMTUwNSw3IEBACiBzdGF0aWMgaW50IHdtODc1M19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KIAlpZiAoIWNvZGVjLT5jYXJkKQpAQCAtMTUxOCw3ICsxNTE4LDcgQEAKIHN0YXRpYyBpbnQgd204NzUzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xNTMxLDYgKzE1MzEsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfcmVnKTsgaSsrKSB7CiAJCWlmIChpICsgMSA9PSBXTTg3NTNfUkVTRVQpCiAJCQljb250aW51ZTsKKworCQkvKiBObyBwb2ludCBpbiB3cml0aW5nIGhhcmR3YXJlIGRlZmF1bHQgdmFsdWVzIGJhY2sgKi8KKwkJaWYgKGNhY2hlW2ldID09IHdtODc1M19yZWdbaV0pCisJCQljb250aW51ZTsKKwogCQlkYXRhWzBdID0gKChpICsgMSkgPDwgMSkgfCAoKGNhY2hlW2ldID4+IDgpICYgMHgwMDAxKTsKIAkJZGF0YVsxXSA9IGNhY2hlW2ldICYgMHgwMGZmOwogCQljb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CkBAIC0xNTQ5LDMyICsxNTU0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBXTTg3NTMgZHJpdmVyCi0gKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHdtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg3NTNfY29kZWM7CisKK3N0YXRpYyBpbnQgd204NzUzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmVnLCByZXQgPSAwOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiV004NzUzIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODc1M19yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg3NTNfd3JpdGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzUzX3NldF9iaWFzX2xldmVsOwotCWNvZGVjLT5kYWkgPSB3bTg3NTNfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gMjsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODc1M19yZWcpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtODc1M19yZWcsIHNpemVvZih3bTg3NTNfcmVnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bTg3NTNfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiV004NzUzIGNvZGVjIG5vdCB5ZXQgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3NTNfY29kZWM7CisJY29kZWMgPSB3bTg3NTNfY29kZWM7CiAKIAl3bTg3NTNfc2V0X2RhaV9tb2RlKGNvZGVjLCAwKTsKIAotCXdtODc1M19yZXNldChjb2RlYyk7Ci0KIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTU4MiwzNSArMTU3OSw4IEBACiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgKi8KLQl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKLQljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19TVEFOREJZOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yaywKLQkJbXNlY3NfdG9famlmZmllcyhjYXBzX2NoYXJnZSkpOwotCi0JLyogc2V0IHRoZSB1cGRhdGUgYml0cyAqLwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xEQUMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xEQUMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkRBQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkRBQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MQURDKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MQURDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JBREMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JBREMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDFWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMVYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDFWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMVYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDJWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMlYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDJWKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMlYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTElOVk9MKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MSU5WT0wsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUklOVk9MKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SSU5WT0wsIHJlZyB8IDB4MDEwMCk7Ci0KLQl3bTg3NTNfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUzX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg3NTNfc25kX2NvbnRyb2xzKSk7CiAJd204NzUzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNjE4LDIxNSArMTU4OCwxMyBAQAogCQlnb3RvIGNhcmRfZXJyOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiAKIGNhcmRfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKwogcGNtX2VycjoKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBJZiB0aGUgaTJjIGxheWVyIHdlcmVuJ3Qgc28gYnJva2VuLCB3ZSBjb3VsZCBwYXNzIHRoaXMga2luZCBvZiBkYXRhCi0gICBhcm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKndtODc1M19zb2NkZXY7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0KLS8qCi0gKiBXTTg3NTMgMiB3aXJlIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSBHUElPNQotICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCi0gKiAgICBsb3cgID0gMHgxYQotICogICAgaGlnaCA9IDB4MWIKLSAqLwotCi1zdGF0aWMgaW50IHdtODc1M19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTNfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKLQotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwotCi0JcmV0ID0gd204NzUzX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTNcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bTg3NTNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzUzX2kyY19pZFtdID0gewotCXsgIndtODc1MyIsIDAgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzUzX2kyY19pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3NTNfaTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJXTTg3NTMgSTJDIENvZGVjIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSAgICB3bTg3NTNfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSAgIHdtODc1M19pMmNfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHdtODc1M19pMmNfaWQsCi19OwotCi1zdGF0aWMgaW50IHdtODc1M19hZGRfaTJjX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBjb25zdCBzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgKnNldHVwKQotewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRyaXZlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gc2V0dXAtPmkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAid204NzUzIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHNldHVwLT5pMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLAotCQkJc2V0dXAtPmkyY19idXMpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdtODc1M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1M19zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OwotCi0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKLQotCXJldCA9IHdtODc1M19pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzUzXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHdtODc1M19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3NTNfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ3bTg3NTMiLAotCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gd204NzUzX3NwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODc1M19zcGlfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgd204NzUzX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1OCBtc2dbMl07Ci0KLQlpZiAobGVuIDw9IDApCi0JCXJldHVybiAwOwotCi0JbXNnWzBdID0gZGF0YVswXTsKLQltc2dbMV0gPSBkYXRhWzFdOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKLQotCXQudHhfYnVmID0gJm1zZ1swXTsKLQl0LmxlbiA9IGxlbjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0Jc3BpX3N5bmMoc3BpLCAmbSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KLQotc3RhdGljIGludCB3bTg3NTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSAqc2V0dXA7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzOwotCWludCByZXQgPSAwOwotCi0JcHJfaW5mbygiV004NzUzIEF1ZGlvIENvZGVjICVzIiwgV004NzUzX1ZFUlNJT04pOwotCi0Jc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7Ci0JY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXdtODc1MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NTNfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICh3bTg3NTMgPT0gTlVMTCkgewotCQlrZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3NTM7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0Jd204NzUzX3NvY2RldiA9IHNvY2RldjsKLQlJTklUX0RFTEFZRURfV09SSygmY29kZWMtPmRlbGF5ZWRfd29yaywgd204NzUzX3dvcmspOwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB3bTg3NTNfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0JaWYgKHNldHVwLT5zcGkpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzUzX3NwaV93cml0ZTsKLQkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOwotCQlpZiAocmV0ICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBzcGkgZHJpdmVyIik7Ci0JfQotI2VuZGlmCi0KLQlpZiAocmV0ICE9IDApIHsKLQkJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0JCWtmcmVlKGNvZGVjKTsKLQl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg1MywyMiArMTYyMSw5IEBACiBzdGF0aWMgaW50IHdtODc1M19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAKLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKLQkJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKLQlydW5fZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWkyY191bnJlZ2lzdGVyX2RldmljZShjb2RlYy0+Y29udHJvbF9kYXRhKTsKLQlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg4MSwxNSArMTYzNiwyNDAgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODc1Myk7CiAKK3N0YXRpYyBpbnQgd204NzUzX3JlZ2lzdGVyKHN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzKQoreworCWludCByZXQsIGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODc1My0+Y29kZWM7CisJdTE2IHJlZzsKKworCWlmICh3bTg3NTNfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiTXVsdGlwbGUgV004NzUzIGRldmljZXMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+bmFtZSA9ICJXTTg3NTMiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NzUzX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODc1M193cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19TVEFOREJZOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODc1M19zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gd204NzUzX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDI7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg3NTMtPnJlZ19jYWNoZSk7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg3NTMtPnJlZ19jYWNoZTsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzUzOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODc1M19yZWcsIHNpemVvZihjb2RlYy0+cmVnX2NhY2hlKSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvZGVjLT5kZWxheWVkX3dvcmssIHdtODc1M193b3JrKTsKKworCXJldCA9IHdtODc1M19yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogY2hhcmdlIG91dHB1dCBjYXBzICovCisJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAorCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhjYXBzX2NoYXJnZSkpOworCisJLyogc2V0IHRoZSB1cGRhdGUgYml0cyAqLworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xEQUMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xEQUMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkRBQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkRBQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MQURDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MQURDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JBREMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JBREMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDFWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMVYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDFWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMVYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTE9VVDJWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MT1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUk9VVDJWKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19ST1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTElOVk9MKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MSU5WT0wsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUklOVk9MKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CisKKwl3bTg3NTNfY29kZWMgPSBjb2RlYzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19kYWkpOyBpKyspCisJCXdtODc1M19kYWlbaV0uZGV2ID0gY29kZWMtPmRldjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJndtODc1M19kYWlbMF0sIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJcnVuX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg3NTMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc1M191bnJlZ2lzdGVyKHN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzKQoreworCXdtODc1M19zZXRfYmlhc19sZXZlbCgmd204NzUzLT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcnVuX2RlbGF5ZWRfd29yaygmd204NzUzLT5jb2RlYy5kZWxheWVkX3dvcmspOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZ3bTg3NTNfZGFpWzBdLCBBUlJBWV9TSVpFKHdtODc1M19kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODc1My0+Y29kZWMpOworCWtmcmVlKHdtODc1Myk7CisJd204NzUzX2NvZGVjID0gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKworc3RhdGljIGludCB3bTg3NTNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MzsKKworCXdtODc1MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NTNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg3NTMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgY29kZWMgPSAmd204NzUzLT5jb2RlYzsKKyAgICAgICAgY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworICAgICAgICBjb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworICAgICAgICBpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg3NTMpOworCisgICAgICAgIGNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NzUzX3JlZ2lzdGVyKHdtODc1Myk7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKyAgICAgICAgc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKyAgICAgICAgd204NzUzX3VucmVnaXN0ZXIod204NzUzKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3NTNfaTJjX2lkW10gPSB7CisJeyAid204NzUzIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3NTNfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODc1M19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODc1MyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204NzUzX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICB3bTg3NTNfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB3bTg3NTNfaTJjX2lkLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKK3N0YXRpYyBpbnQgd204NzUzX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1OCBtc2dbMl07CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAwOworCisJbXNnWzBdID0gZGF0YVswXTsKKwltc2dbMV0gPSBkYXRhWzFdOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKworCXQudHhfYnVmID0gJm1zZ1swXTsKKwl0LmxlbiA9IGxlbjsKKworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJc3BpX3N5bmMoc3BpLCAmbSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3NTNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzOworCisJd204NzUzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc1M19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODc1MyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODc1My0+Y29kZWM7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3NTNfc3BpX3dyaXRlOworCWNvZGVjLT5kZXYgPSAmc3BpLT5kZXY7CisKKwlzcGktPmRldi5kcml2ZXJfZGF0YSA9IHdtODc1MzsKKworCXJldHVybiB3bTg3NTNfcmVnaXN0ZXIod204NzUzKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204NzUzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IHNwaS0+ZGV2LmRyaXZlcl9kYXRhOworCXdtODc1M191bnJlZ2lzdGVyKHdtODc1Myk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3NTNfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ3bTg3NTMiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gd204NzUzX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODc1M19zcGlfcmVtb3ZlKSwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgd204NzUzX21vZGluaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODc1M19kYWksIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworCWludCByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBXTTg3NTMgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODc1MyBTUEkgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQod204NzUzX21vZGluaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd204NzUzX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh3bTg3NTNfZGFpLCBBUlJBWV9TSVpFKHdtODc1M19kYWkpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7CisjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHdtODc1M19leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKaW5kZXggZjU1NzA0Yy4uNTdiMmJhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCkBAIC03NywxMiArNzcsNiBAQAogI2RlZmluZSBXTTg3NTNfQklBU0NUTAkJMHgzZAogI2RlZmluZSBXTTg3NTNfQURDVEwyCQkweDNmCiAKLXN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSB7Ci0JaW50IHNwaTsKLQlpbnQgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07Ci0KICNkZWZpbmUgV004NzUzX1BMTDEJCQkwCiAjZGVmaW5lIFdNODc1M19QTEwyCQkJMQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwppbmRleCA2NzY3ZGUxLi40NmM1ZWExIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKQEAgLTUxNywyMiArNTE3LDYgQEAKIAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODkwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5MDBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg5MDBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTAwX2RhcG1fbG91dHB1dDJfY29udHJvbCA9CiBTT0NfREFQTV9TSU5HTEUoIkxJTkVPVVQyTCBTd2l0Y2giLCBXTTg5MDBfUkVHX1BPV0VSMywgNiwgMSwgMCk7CiAKQEAgLTczNiw3ICs3MjAsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcmVnOwogCiAJcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQVVESU8xKSAmIH4weDYwOwpAQCAtMTEwNCw2ICsxMDg4LDE0IEBACiAJKFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFIHwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFIHwgXAogCSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTAwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODkwMF9od19wYXJhbXMsCisJLnNldF9jbGtkaXYJPSB3bTg5MDBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg5MDBfc2V0X2RhaV9wbGwsCisJLnNldF9mbXQJPSB3bTg5MDBfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODkwMF9kaWdpdGFsX211dGUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTAwX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg5MDAgSGlGaSIsCiAJLnBsYXliYWNrID0gewpAQCAtMTEyMCwxMyArMTExMiw3IEBACiAJCS5yYXRlcyA9IFdNODkwMF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg5MDBfUENNX0ZPUk1BVFMsCiAJIH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODkwMF9od19wYXJhbXMsCi0JCSAuc2V0X2Nsa2RpdiA9IHdtODkwMF9zZXRfZGFpX2Nsa2RpdiwKLQkJIC5zZXRfcGxsID0gd204OTAwX3NldF9kYWlfcGxsLAotCQkgLnNldF9mbXQgPSB3bTg5MDBfc2V0X2RhaV9mbXQsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204OTAwX2RpZ2l0YWxfbXV0ZSwKLQkgfSwKKwkub3BzID0gJndtODkwMF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODkwMF9kYWkpOwogCkBAIC0xMjI2LDcgKzEyMTIsNyBAQAogc3RhdGljIGludCB3bTg5MDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwMF9wcml2ICp3bTg5MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBmbGxfb3V0ID0gd204OTAwLT5mbGxfb3V0OwogCWludCBmbGxfaW4gID0gd204OTAwLT5mbGxfaW47CkBAIC0xMjUwLDcgKzEyMzYsNyBAQAogc3RhdGljIGludCB3bTg5MDBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwMF9wcml2ICp3bTg5MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiAqY2FjaGU7CiAJaW50IGksIHJldDsKQEAgLTEyODgsOCArMTI3NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTAwX2NvZGVjOwogCi1zdGF0aWMgaW50IHdtODkwMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5MDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB3bTg5MDBfcHJpdiAqd204OTAwOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKQEAgLTEzODgsNyArMTM3NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bTg5MDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTAwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5MDBfZGFpKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMod204OTAwX2NvZGVjKTsKQEAgLTE0MTQsNyArMTQwMCw3IEBACiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gd204OTAwX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gd204OTAwX2kyY19yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODkwMF9pMmNfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSB3bTg5MDBfaTJjX2lkLAogfTsKIApAQCAtMTQzMCw3ICsxNDE2LDcgQEAKIAl9CiAKIAljb2RlYyA9IHdtODkwMF9jb2RlYzsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCiAJLyogUmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC0xNDM5LDcgKzE0MjUsOCBAQAogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0Jd204OTAwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5MDBfc25kX2NvbnRyb2xzKSk7CiAJd204OTAwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCBiZGU3NDU0Li44Y2Y1NzFmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTc0NCwyMSArNzQ0LDYgQEAKIAkJIDAsIDYzLCAwLCBvdXRfdGx2KSwKIH07CiAKLXN0YXRpYyBpbnQgd204OTAzX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwM19zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODkwM19zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5wdXRfbW9kZV9tdXggPQogCVNPQ19EQVBNX0VOVU0oIkxlZnQgSW5wdXQgTW9kZSBNdXgiLCBsaW5wdXRfbW9kZV9lbnVtKTsKIApAQCAtMTI3Niw3ICsxMjYxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKm1hc3Rlcl9ydW50aW1lOwpAQCAtMTMxOCw3ICsxMzAzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCkBAIC0xMzM4LDcgKzEzMjMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IGZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKQEAgLTE1MTIsNiArMTQ5NywxNSBAQAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTAzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSB3bTg5MDNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSB3bTg5MDNfc2h1dGRvd24sCisJLmh3X3BhcmFtcwk9IHdtODkwM19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODkwM19kaWdpdGFsX211dGUsCisJLnNldF9mbXQJPSB3bTg5MDNfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB3bTg5MDNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTAzX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg5MDMiLAogCS5wbGF5YmFjayA9IHsKQEAgLTE1MjgsMjEgKzE1MjIsMTQgQEAKIAkJIC5yYXRlcyA9IFdNODkwM19DQVBUVVJFX1JBVEVTLAogCQkgLmZvcm1hdHMgPSBXTTg5MDNfRk9STUFUUywKIAkgfSwKLQkub3BzID0gewotCQkgLnN0YXJ0dXAgPSB3bTg5MDNfc3RhcnR1cCwKLQkJIC5zaHV0ZG93biA9IHdtODkwM19zaHV0ZG93biwKLQkJIC5od19wYXJhbXMgPSB3bTg5MDNfaHdfcGFyYW1zLAotCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODkwM19kaWdpdGFsX211dGUsCi0JCSAuc2V0X2ZtdCA9IHdtODkwM19zZXRfZGFpX2ZtdCwKLQkJIC5zZXRfc3lzY2xrID0gd204OTAzX3NldF9kYWlfc3lzY2xrCi0JfQorCS5vcHMgPSAmd204OTAzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTAzX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204OTAzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204OTAzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMTU1Miw3ICsxNTM5LDcgQEAKIHN0YXRpYyBpbnQgd204OTAzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCWludCBpOwogCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTE1NzcsOCArMTU2NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTAzX2NvZGVjOwogCi1zdGF0aWMgaW50IHdtODkwM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5MDNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKQEAgLTE2ODQsNyArMTY3MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bTg5MDNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTAzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMTcxNCw3ICsxNzAxLDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgICAgPSB3bTg5MDNfaTJjX3Byb2JlLAotCS5yZW1vdmUgICA9IHdtODkwM19pMmNfcmVtb3ZlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKHdtODkwM19pMmNfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSB3bTg5MDNfaTJjX2lkLAogfTsKIApAQCAtMTcyOCw3ICsxNzE1LDcgQEAKIAkJZ290byBlcnI7CiAJfQogCi0Jc29jZGV2LT5jb2RlYyA9IHdtODkwM19jb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTAzX2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC0xNzM3LDggKzE3MjQsOSBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQl3bTg5MDNfYWRkX2NvbnRyb2xzKHNvY2Rldi0+Y29kZWMpOwotCXdtODkwM19hZGRfd2lkZ2V0cyhzb2NkZXYtPmNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhzb2NkZXYtPmNhcmQtPmNvZGVjLCB3bTg5MDNfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204OTAzX3NuZF9jb250cm9scykpOworCXdtODkwM19hZGRfd2lkZ2V0cyhzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE3NTksNyArMTc0Nyw3IEBACiBzdGF0aWMgaW50IHdtODkwM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg5MDNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKaW5kZXggODhlYWQ3Zi4uMDMyZGNhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCkBAIC0xOTUsMjEgKzE5NSw2IEBACiAJU09DX0RPVUJMRV9SKCJNaWMgQm9vc3QiLCBXTTg5NzFfTEFEQ0lOLCBXTTg5NzFfUkFEQ0lOLCA0LCAzLCAwKSwKIH07CiAKLS8qIGFkZCBub24tREFQTSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg5NzFfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTcxX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODk3MV9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIERBUE0gQ29udHJvbHMKICAqLwpAQCAtNTQ2LDcgKzUzMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5NzFfcHJpdiAqd204OTcxID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgaWZhY2UgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9JRkFDRSkgJiAweDFmMzsKIAl1MTYgc3JhdGUgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9TUkFURSkgJiAweDFjMDsKQEAgLTYxOSw2ICs2MDQsMTMgQEAKICNkZWZpbmUgV004OTcxX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk3MV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg5NzFfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTcxX211dGUsCisJLnNldF9mbXQJPSB3bTg5NzFfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB3bTg5NzFfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTcxX2RhaSA9IHsKIAkubmFtZSA9ICJXTTg5NzEiLAogCS5wbGF5YmFjayA9IHsKQEAgLTYzMywxMiArNjI1LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODk3MV9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg5NzFfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg5NzFfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODk3MV9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODk3MV9zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSB3bTg5NzFfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODk3MV9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODk3MV9kYWkpOwogCkBAIC02NTIsNyArNjM5LDcgQEAKIHN0YXRpYyBpbnQgd204OTcxX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204OTcxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTY2MSw3ICs2NDgsNyBAQAogc3RhdGljIGludCB3bTg5NzFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTY5Miw3ICs2NzksNyBAQAogCiBzdGF0aWMgaW50IHdtODk3MV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnLCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004OTcxIjsKQEAgLTc0NSw3ICs3MzIsOCBAQAogCXJlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1JJTlZPTCk7CiAJd204OTcxX3dyaXRlKGNvZGVjLCBXTTg5NzFfUklOVk9MLCByZWcgfCAweDAxMDApOwogCi0Jd204OTcxX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk3MV9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5NzFfc25kX2NvbnRyb2xzKSk7CiAJd204OTcxX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03NzIsNyArNzYwLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg5NzFfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtODczLDcgKzg2MSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk3MTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC05MDgsNyArODk2LDcgQEAKIHN0YXRpYyBpbnQgd204OTcxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODk3MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCBhNTczMWZhLi5jNTE4YzNlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IChBUlJBWV9TSVpFKHdtODk5MF9yZWcpKSAtIDEpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg5OTBfcmVnKSk7CiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCiAJLyogUmVzZXQgcmVnaXN0ZXIgYW5kIHJlc2VydmVkIHJlZ2lzdGVycyBhcmUgdW5jYWNoZWQgKi8KLQlpZiAocmVnID09IDAgfHwgcmVnID4gQVJSQVlfU0laRSh3bTg5OTBfcmVnKSAtIDEpCisJaWYgKHJlZyA9PSAwIHx8IHJlZyA+PSBBUlJBWV9TSVpFKHdtODk5MF9yZWcpKQogCQlyZXR1cm47CiAKIAljYWNoZVtyZWddID0gdmFsdWU7CkBAIC00MTgsMjEgKzQxOCw2IEBACiAKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg5OTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTkwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODk5MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLAotCQkJCQlOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBfREFQTV8gQ29udHJvbHMKICAqLwpAQCAtMTE3OCw3ICsxMTYzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGF1ZGlvMSA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV8xKTsKIAogCWF1ZGlvMSAmPSB+V004OTkwX0FJRl9XTF9NQVNLOwpAQCAtMTM0Nyw2ICsxMzMyLDE1IEBACiAgKiAxLiBBREMvREFDIG9uIFByaW1hcnkgSW50ZXJmYWNlCiAgKiAyLiBBREMgb24gUHJpbWFyeSBJbnRlcmZhY2UvREFDIG9uIHNlY29uZGFyeQogICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTkwX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTkwX211dGUsCisJLnNldF9mbXQJPSB3bTg5OTBfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg5OTBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg5OTBfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg5OTBfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTkwX2RhaSA9IHsKIC8qIEFEQy9EQUMgb24gcHJpbWFyeSAqLwogCS5uYW1lID0gIldNODk5MCBBREMvREFDIFByaW1hcnkiLApAQCAtMTM2MywyMSArMTM1NywxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004OTkwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODk5MF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODk5MF9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg5OTBfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg5OTBfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204OTkwX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODk5MF9zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg5OTBfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODk5MF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODk5MF9kYWkpOwogCiBzdGF0aWMgaW50IHdtODk5MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KIAlpZiAoIWNvZGVjLT5jYXJkKQpAQCAtMTM5MCw3ICsxMzc3LDcgQEAKIHN0YXRpYyBpbnQgd204OTkwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xNDE4LDcgKzE0MDUsNyBAQAogICovCiBzdGF0aWMgaW50IHdtODk5MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcmVnOwogCWludCByZXQgPSAwOwogCkBAIC0xNDYxLDcgKzE0NDgsOCBAQAogCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0xFRlRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CiAJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfUklHSFRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CiAKLQl3bTg5OTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTkwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODk5MF9zbmRfY29udHJvbHMpKTsKIAl3bTg5OTBfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE0OTUsNyArMTQ4Myw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204OTkwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTE1OTQsNyArMTU4Miw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk5MDsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC0xNjIwLDcgKzE2MDgsNyBAQAogc3RhdGljIGludCB3bTg5OTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204OTkwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjU4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogd205NzA1LmMgIC0tICBBTFNBIFNvYyBXTTk3MDUgY29kZWMgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDA4IElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgVmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSBvbmx5LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlICJ3bTk3MDUuaCIKKworLyoKKyAqIFdNOTcwNSByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgY29uc3QgdTE2IHdtOTcwNV9yZWdbXSA9IHsKKwkweDYxNTAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIC8qIDB4MCAgKi8KKwkweDAwMDAsIDB4ODAwMCwgMHg4MDA4LCAweDgwMDgsIC8qIDB4OCAgKi8KKwkweDg4MDgsIDB4ODgwOCwgMHg4ODA4LCAweDg4MDgsIC8qIDB4MTAgKi8KKwkweDg4MDgsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIC8qIDB4MTggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMGYsIC8qIDB4MjAgKi8KKwkweDA2MDUsIDB4MDAwMCwgMHhiYjgwLCAweDAwMDAsIC8qIDB4MjggKi8KKwkweDAwMDAsIDB4YmI4MCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4MzAgKi8KKwkweDAwMDAsIDB4MjAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4MzggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NDAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NDggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NTAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NTggKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NjAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8qIDB4NjggKi8KKwkweDAwMDAsIDB4MDgwOCwgMHgwMDAwLCAweDAwMDYsIC8qIDB4NzAgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHg1NzRkLCAweDRjMDUsIC8qIDB4NzggKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfc25kX2FjOTdfY29udHJvbHNbXSA9IHsKKwlTT0NfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVIsIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVIsIDE1LCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19IRUFEUEhPTkUsIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19IRUFEUEhPTkUsIDE1LCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QQ00sIDgsIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgQUM5N19QQ00sIDE1LCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX01PTk8sIDAsIDMxLCAxKSwKKwlTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDE1LCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJQQ0JlZXAgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QQ19CRUVQLCAxLCAxNSwgMSksCisJU09DX1NJTkdMRSgiUGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QSE9ORSwgMCwgMzEsIDEpLAorCVNPQ19ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19MSU5FLCA4LCAwLCAzMSwgMSksCisJU09DX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19DRCwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01JQywgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1pYyAyMGRCIEJvb3N0IFN3aXRjaCIsIEFDOTdfTUlDLCA2LCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIEFDOTdfUkVDX0dBSU4sIDgsIDAsIDE1LCAwKSwKKwlTT0NfU0lOR0xFKCJDYXB0dXJlIFN3aXRjaCIsIEFDOTdfUkVDX0dBSU4sIDE1LCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTk3MDVfbWljW10gPSB7Ik1pYyAxIiwgIk1pYyAyIn07CitzdGF0aWMgY29uc3QgY2hhciAqd205NzA1X3JlY19zZWxbXSA9IHsiTWljIiwgIkNEIiwgIk5DIiwgIk5DIiwKKwkiTGluZSIsICJTdGVyZW8gTWl4IiwgIk1vbm8gTWl4IiwgIlBob25lIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd205NzA1X2VudW1fbWljID0KKwlTT0NfRU5VTV9TSU5HTEUoQUM5N19HRU5FUkFMX1BVUlBPU0UsIDgsIDIsIHdtOTcwNV9taWMpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTk3MDVfZW51bV9yZWNfbCA9CisJU09DX0VOVU1fU0lOR0xFKEFDOTdfUkVDX1NFTCwgOCwgOCwgd205NzA1X3JlY19zZWwpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTk3MDVfZW51bV9yZWNfciA9CisJU09DX0VOVU1fU0lOR0xFKEFDOTdfUkVDX1NFTCwgMCwgOCwgd205NzA1X3JlY19zZWwpOworCisvKiBIZWFkcGhvbmUgTWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfaHBfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlBDQmVlcCBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X1BDX0JFRVAsIDE1LCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfQ0QsIDE1LCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01JQywgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiUGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19QSE9ORSwgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0xJTkUsIDE1LCAxLCAxKSwKK307CisKKy8qIE1pYyBzb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MDVfbWljX3NyY19jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTk3MDVfZW51bV9taWMpOworCisvKiBDYXB0dXJlIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9jYXB0dXJlX3NlbGVjdGxfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd205NzA1X2VudW1fcmVjX2wpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9jYXB0dXJlX3NlbGVjdHJfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd205NzA1X2VudW1fcmVjX3IpOworCisvKiBEQVBNIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTk3MDVfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX01VWCgiTWljIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9taWNfc3JjX2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IENhcHR1cmUgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X2NhcHR1cmVfc2VsZWN0bF9jb250cm9scyksCisJU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ3bTk3MDVfY2FwdHVyZV9zZWxlY3RyX2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IEhpRmkgUGxheWJhY2siLAorCQlTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwKKwkJU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMKCJIUCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9ocF9taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTk3MDVfaHBfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkxlZnQgQURDIiwgIkxlZnQgSGlGaSBDYXB0dXJlIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgSGlGaSBDYXB0dXJlIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJIZWFkcGhvbmUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJTcGVha2VyIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTGluZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkxpbmUgb3V0IFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTW9ubyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlBob25lIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTWljIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUENCRUVQIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQ0QgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJBREMgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVFIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIk1PTk9PVVQiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlBIT05FIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5MIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5SIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJDRElOTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQ0RJTlIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlBDQkVFUCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMSIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMiIpLAorfTsKKworLyogQXVkaW8gbWFwCisgKiBXTTk3MDUgaGFzIG5vIHN3aXRjaGVzIHRvIGRpc2FibGUgdGhlIHJvdXRlIGZyb20gdGhlIGlucHV0cyB0byB0aGUgSFAgbWl4ZXIKKyAqIHNvIGluIG9yZGVyIHRvIHByZXZlbnQgYWN0aXZlIGlucHV0cyBmcm9tIGZvcmNpbmcgdGhlIGF1ZGlvIG91dHB1dHMgdG8gYmUKKyAqIGNvbnN0YW50bHkgZW5hYmxlZCwgd2UgdXNlIHRoZSBtdXRlcyBvbiB0aG9zZSBpbnB1dHMgdG8gc2ltdWxhdGUgc3VjaAorICogY29udHJvbHMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIEhQIG1peGVyICovCisJeyJIUCBNaXhlciIsICJQQ0JlZXAgUGxheWJhY2sgU3dpdGNoIiwgIlBDQkVFUCBQR0EifSwKKwl7IkhQIE1peGVyIiwgIkNEIFBsYXliYWNrIFN3aXRjaCIsICJDRCBQR0EifSwKKwl7IkhQIE1peGVyIiwgIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAiTWljIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiUGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgIlBob25lIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAiTGluZSBQR0EifSwKKwl7IkhQIE1peGVyIiwgTlVMTCwgIkxlZnQgREFDIn0sCisJeyJIUCBNaXhlciIsIE5VTEwsICJSaWdodCBEQUMifSwKKworCS8qIG1vbm8gbWl4ZXIgKi8KKwl7Ik1vbm8gTWl4ZXIiLCBOVUxMLCAiSFAgTWl4ZXIifSwKKworCS8qIG91dHB1dHMgKi8KKwl7IkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiSFAgTWl4ZXIifSwKKwl7IkhQT1VUTCIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIn0sCisJeyJIUE9VVFIiLCBOVUxMLCAiSGVhZHBob25lIFBHQSJ9LAorCXsiTGluZSBvdXQgUEdBIiwgTlVMTCwgIkhQIE1peGVyIn0sCisJeyJMT1VUIiwgTlVMTCwgIkxpbmUgb3V0IFBHQSJ9LAorCXsiUk9VVCIsIE5VTEwsICJMaW5lIG91dCBQR0EifSwKKwl7Ik1vbm8gUEdBIiwgTlVMTCwgIk1vbm8gTWl4ZXIifSwKKwl7Ik1PTk9PVVQiLCBOVUxMLCAiTW9ubyBQR0EifSwKKworCS8qIGlucHV0cyAqLworCXsiQ0QgUEdBIiwgTlVMTCwgIkNESU5MIn0sCisJeyJDRCBQR0EiLCBOVUxMLCAiQ0RJTlIifSwKKwl7IkxpbmUgUEdBIiwgTlVMTCwgIkxJTkVJTkwifSwKKwl7IkxpbmUgUEdBIiwgTlVMTCwgIkxJTkVJTlIifSwKKwl7IlBob25lIFBHQSIsIE5VTEwsICJQSE9ORSJ9LAorCXsiTWljIFNvdXJjZSIsICJNaWMgMSIsICJNSUMxIn0sCisJeyJNaWMgU291cmNlIiwgIk1pYyAyIiwgIk1JQzIifSwKKwl7Ik1pYyBQR0EiLCBOVUxMLCAiTWljIFNvdXJjZSJ9LAorCXsiUENCRUVQIFBHQSIsIE5VTEwsICJQQ0JFRVAifSwKKworCS8qIExlZnQgY2FwdHVyZSBzZWxlY3RvciAqLworCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJNaWMiLCAiTWljIFNvdXJjZSJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJDRCIsICJDRElOTCJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJMaW5lIiwgIkxJTkVJTkwifSwKKwl7IkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCAiU3RlcmVvIE1peCIsICJIUCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJNb25vIE1peCIsICJIUCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJQaG9uZSIsICJQSE9ORSJ9LAorCisJLyogUmlnaHQgY2FwdHVyZSBzb3VyY2UgKi8KKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIk1pYyIsICJNaWMgU291cmNlIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJDRCIsICJDRElOUiJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiTGluZSIsICJMSU5FSU5SIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJTdGVyZW8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJNb25vIE1peCIsICJIUCBNaXhlciJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiUGhvbmUiLCAiUEhPTkUifSwKKworCXsiQURDIFBHQSIsIE5VTEwsICJMZWZ0IENhcHR1cmUgU291cmNlIn0sCisJeyJBREMgUEdBIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgU291cmNlIn0sCisKKwkvKiBBREMncyAqLworCXsiTGVmdCBBREMiLCAgTlVMTCwgIkFEQyBQR0EifSwKKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJBREMgUEdBIn0sCit9OworCitzdGF0aWMgaW50IHdtOTcwNV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd205NzA1X2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRSh3bTk3MDVfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIHVzZSBhIHJlZ2lzdGVyIGNhY2hlIHRvIGVuaGFuY2UgcmVhZCBwZXJmb3JtYW5jZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBQzk3X1JFU0VUOgorCWNhc2UgQUM5N19WRU5ET1JfSUQxOgorCWNhc2UgQUM5N19WRU5ET1JfSUQyOgorCQlyZXR1cm4gc29jX2FjOTdfb3BzLnJlYWQoY29kZWMtPmFjOTcsIHJlZyk7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVnID4+IDE7CisKKwkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRSh3bTk3MDVfcmVnKSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlyZXR1cm4gY2FjaGVbcmVnXTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWM5N193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOworCXJlZyA9IHJlZyA+PiAxOworCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MDVfcmVnKSkpCisJCWNhY2hlW3JlZ10gPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhYzk3X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJaW50IHJlZzsKKwl1MTYgdnJhOworCisJdnJhID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CisJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSB8IDB4MSk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcmVnID0gQUM5N19QQ01fRlJPTlRfREFDX1JBVEU7CisJZWxzZQorCQlyZWcgPSBBQzk3X1BDTV9MUl9BRENfUkFURTsKKworCXJldHVybiBhYzk3X3dyaXRlKGNvZGVjLCByZWcsIHJ1bnRpbWUtPnJhdGUpOworfQorCisjZGVmaW5lIFdNOTcwNV9BQzk3X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBcCisJCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAorCQkJU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MDVfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IGFjOTdfcHJlcGFyZSwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTk3MDVfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkhpRmkgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNOTcwNV9BQzk3X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTk3MDVfQUM5N19SQVRFUywKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5vcHMgPSAmd205NzA1X2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkF1eCBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAxLAorCQkJLnJhdGVzID0gV005NzA1X0FDOTdfUkFURVMsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9LAorCX0KK307CitFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MDVfZGFpKTsKKworc3RhdGljIGludCB3bTk3MDVfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWlmIChzb2NfYWM5N19vcHMucmVzZXQpIHsKKwkJc29jX2FjOTdfb3BzLnJlc2V0KGNvZGVjLT5hYzk3KTsKKwkJaWYgKGFjOTdfcmVhZChjb2RlYywgMCkgPT0gd205NzA1X3JlZ1swXSkKKwkJCXJldHVybiAwOyAvKiBTdWNjZXNzICovCisJfQorCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgd205NzA1X3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiV005NzA1IFNvQyBBdWRpbyBDb2RlY1xuIik7CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCisJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod205NzA1X3JlZywgc2l6ZW9mKHdtOTcwNV9yZWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2FjaGVfZXJyOworCX0KKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2Yod205NzA1X3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZV9zdGVwID0gMjsKKworCWNvZGVjLT5uYW1lID0gIldNOTcwNSI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9IHdtOTcwNV9kYWk7CisJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHdtOTcwNV9kYWkpOworCWNvZGVjLT53cml0ZSA9IGFjOTdfd3JpdGU7CisJY29kZWMtPnJlYWQgPSBhYzk3X3JlYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwlyZXQgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjLCAmc29jX2FjOTdfb3BzLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndtOTcwNTogZmFpbGVkIHRvIHJlZ2lzdGVyIEFDOTcgY29kZWNcbiIpOworCQlnb3RvIGNvZGVjX2VycjsKKwl9CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwY21fZXJyOworCisJcmV0ID0gd205NzA1X3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlc2V0X2VycjsKKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTk3MDVfc25kX2FjOTdfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTk3MDVfc25kX2FjOTdfY29udHJvbHMpKTsKKwl3bTk3MDVfYWRkX3dpZGdldHMoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndtOTcwNTogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJcmV0dXJuIDA7CisKK3Jlc2V0X2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworcGNtX2VycjoKKwlzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyhjb2RlYyk7Citjb2RlY19lcnI6CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CitjYWNoZV9lcnI6CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTk3MDVfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCWlmIChjb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyhjb2RlYyk7CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJa2ZyZWUoY29kZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTk3MDUgPSB7CisJLnByb2JlID0gCXdtOTcwNV9zb2NfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTk3MDVfc29jX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtOTcwNSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTk3MDUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5oIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgwZjExCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogd205NzA1LmggIC0tICBXTTk3MDUgU29jIEF1ZGlvIGRyaXZlcgorICovCisKKyNpZm5kZWYgX1dNOTcwNV9ICisjZGVmaW5lIF9XTTk3MDVfSAorCisjZGVmaW5lIFdNOTcwNV9EQUlfQUM5N19ISUZJCTAKKyNkZWZpbmUgV005NzA1X0RBSV9BQzk3X0FVWAkxCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzA1X2RhaVsyXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTk3MDU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKaW5kZXggYWY4M2Q2Mi4uNzY1Y2YxZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCkBAIC0xNTQsMjEgKzE1NCw2IEBACiBTT0NfU0lOR0xFKCJNaWMgMjBkQiBCb29zdCBTd2l0Y2giLCBBQzk3X01JQywgNywgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd205NzEyX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtOTcxMl9zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd205NzEyX3NuZF9hYzk3X2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBmYWtlIGxlZnQgYW5kIHJpZ2h0IEhQIG1peGVycyBiZWNhdXNlCiAgKiB0aGUgY29kZWMgb25seSBoYXMgYSBzaW5nbGUgY29udHJvbCB0aGF0IGlzIHNoYXJlZCBieSBib3RoIGNoYW5uZWxzLgogICogVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgYXVkaW8gcGF0aC4KQEAgLTQ2Nyw3ICs0NTIsNyBAQAogCWVsc2UgewogCQlyZWcgPSByZWcgPj4gMTsKIAotCQlpZiAocmVnID4gKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQorCQlpZiAocmVnID49IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtNDgxLDcgKzQ2Niw3IEBACiAKIAlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDw9IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKKwlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQogCQljYWNoZVtyZWddID0gdmFsOwogCiAJcmV0dXJuIDA7CkBAIC00OTMsNyArNDc4LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnOwogCXUxNiB2cmE7CiAKQEAgLTUxNCw3ICs0OTksNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiB2cmEsIHhzbGU7CiAKIAl2cmEgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKQEAgLTUzMiw2ICs1MTcsMTQgQEAKIAkJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8XAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEyX2RhaV9vcHNfaGlmaSA9IHsKKwkucHJlcGFyZQk9IGFjOTdfcHJlcGFyZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxMl9kYWlfb3BzX2F1eCA9IHsKKwkucHJlcGFyZQk9IGFjOTdfYXV4X3ByZXBhcmUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzEyX2RhaVtdID0gewogewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCkBAIC01NDgsOCArNTQxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNOTcxMl9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X3ByZXBhcmUsfSwKKwkub3BzID0gJndtOTcxMl9kYWlfb3BzX2hpZmksCiB9LAogewogCS5uYW1lID0gIkFDOTcgQXV4IiwKQEAgLTU1OSw4ICs1NTEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gV005NzEyX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfYXV4X3ByZXBhcmUsfSwKKwkub3BzID0gJndtOTcxMl9kYWlfb3BzX2F1eCwKIH0KIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MTJfZGFpKTsKQEAgLTYwNyw3ICs1OTgsNyBAQAogCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtOTcxMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02MTYsNyArNjA3LDcgQEAKIHN0YXRpYyBpbnQgd205NzEyX3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaSwgcmV0OwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCkBAIC02NTIsMTAgKzY0MywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiV005NzExL1dNOTcxMiBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFdNOTcxMl9WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTk3MTJfcmVnLCBzaXplb2Yod205NzEyX3JlZyksIEdGUF9LRVJORUwpOwpAQCAtNjk4LDcgKzY5MCw4IEBACiAJYWM5N193cml0ZShjb2RlYywgQUM5N19WSURFTywgYWM5N19yZWFkKGNvZGVjLCBBQzk3X1ZJREVPKSB8IDB4MzAwMCk7CiAKIAl3bTk3MTJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKLQl3bTk3MTJfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205NzEyX3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod205NzEyX3NuZF9hYzk3X2NvbnRyb2xzKSk7CiAJd205NzEyX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03MTgsMTUgKzcxMSwxNSBAQAogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCiBjYWNoZV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bTk3MTJfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKaW5kZXggZjNjYThhYS4uNTIzYmFkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCkBAIC0zMiw3ICszMiw2IEBACiAKIHN0cnVjdCB3bTk3MTNfcHJpdiB7CiAJdTMyIHBsbF9pbjsgLyogUExMIGlucHV0IGZyZXF1ZW5jeSAqLwotCXUzMiBwbGxfb3V0OyAvKiBQTEwgb3V0cHV0IGZyZXF1ZW5jeSAqLwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLApAQCAtMTkwLDIxICsxODksNiBAQAogU09DX1NJTkdMRSgiM0QgRGVwdGgiLCBBQzk3X1JFQ19HQUlOX01JQywgMCwgMTUsIDEpLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtOTcxM19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTk3MTNfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTk3MTNfc25kX2FjOTdfY29udHJvbHNbaV0sCi0JCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIFdlIGhhdmUgdG8gY3JlYXRlIGEgZmFrZSBsZWZ0IGFuZCByaWdodCBIUCBtaXhlcnMgYmVjYXVzZQogICogdGhlIGNvZGVjIG9ubHkgaGFzIGEgc2luZ2xlIGNvbnRyb2wgdGhhdCBpcyBzaGFyZWQgYnkgYm90aCBjaGFubmVscy4KICAqIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGF1ZGlvIHBhdGggdXNpbmcgdGhlIGN1cnJlbnQKQEAgLTYzNiw3ICs2MjAsNyBAQAogCWVsc2UgewogCQlyZWcgPSByZWcgPj4gMTsKIAotCQlpZiAocmVnID4gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQorCQlpZiAocmVnID49IChBUlJBWV9TSVpFKHdtOTcxM19yZWcpKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtNjUwLDcgKzYzNCw3IEBACiAJaWYgKHJlZyA8IDB4N2MpCiAJCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwotCWlmIChyZWcgPD0gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQorCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CiAKIAlyZXR1cm4gMDsKQEAgLTczOCwxMyArNzIyLDEzIEBACiAJc3RydWN0IF9wbGxfZGl2IHBsbF9kaXY7CiAKIAkvKiB0dXJuIFBMTCBvZmYgPyAqLwotCWlmIChmcmVxX2luID09IDAgfHwgZnJlcV9vdXQgPT0gMCkgeworCWlmIChmcmVxX2luID09IDApIHsKIAkJLyogZGlzYWJsZSBQTEwgcG93ZXIgYW5kIHNlbGVjdCBleHQgc291cmNlICovCiAJCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpOwogCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmVnIHwgMHgwMDgwKTsKIAkJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCk7CiAJCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCByZWcgfCAweDAyMDApOwotCQl3bTk3MTMtPnBsbF9vdXQgPSAwOworCQl3bTk3MTMtPnBsbF9pbiA9IDA7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzg4LDcgKzc3Miw2IEBACiAJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyAmIDB4ZmRmZik7CiAJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSk7CiAJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJlZyAmIDB4ZmY3Zik7Ci0Jd205NzEzLT5wbGxfb3V0ID0gZnJlcV9vdXQ7CiAJd205NzEzLT5wbGxfaW4gPSBmcmVxX2luOwogCiAJLyogd2FpdCAxMG1zIEFDOTcgbGluayBmcmFtZXMgZm9yIHRoZSBsaW5rIHRvIHN0YWJpbGlzZSAqLwpAQCAtOTU3LDEzICs5NDAsMTQgQEAKIAkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQl1MTYgc3RhdHVzOworCXUxNiBzdGF0dXMsIHJhdGU7CiAKIAkvKiBHcmFjZWZ1bGx5IHNodXQgZG93biB0aGUgdm9pY2UgaW50ZXJmYWNlLiAqLwogCXN0YXR1cyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpIHwgMHgxMDAwOwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDAyODApOworCXJhdGUgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKSAmIDB4RjBGRjsKKwlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmF0ZSB8IDB4MDIwMCk7CiAJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDBGODApOworCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByYXRlIHwgMHgwRjAwKTsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgc3RhdHVzKTsKIH0KIApAQCAtMTAyMSw2ICsxMDA1LDI3IEBACiAJKFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFIHwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFIHwgXAogCSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEzX2RhaV9vcHNfaGlmaSA9IHsKKwkucHJlcGFyZQk9IGFjOTdfaGlmaV9wcmVwYXJlLAorCS5zZXRfY2xrZGl2CT0gd205NzEzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd205NzEzX3NldF9kYWlfcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEzX2RhaV9vcHNfYXV4ID0geworCS5wcmVwYXJlCT0gYWM5N19hdXhfcHJlcGFyZSwKKwkuc2V0X2Nsa2Rpdgk9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtOTcxM19zZXRfZGFpX3BsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcxM19kYWlfb3BzX3ZvaWNlID0geworCS5od19wYXJhbXMJPSB3bTk3MTNfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB3bTk3MTNfdm9pY2VzaHV0ZG93biwKKwkuc2V0X2Nsa2Rpdgk9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtOTcxM19zZXRfZGFpX3BsbCwKKwkuc2V0X2ZtdAk9IHdtOTcxM19zZXRfZGFpX2ZtdCwKKwkuc2V0X3RyaXN0YXRlCT0gd205NzEzX3NldF9kYWlfdHJpc3RhdGUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgd205NzEzX2RhaVtdID0gewogewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCkBAIC0xMDM3LDEwICsxMDQyLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNOTcxM19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19oaWZpX3ByZXBhcmUsCi0JCS5zZXRfY2xrZGl2ID0gd205NzEzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtOTcxM19zZXRfZGFpX3BsbCx9LAorCS5vcHMgPSAmd205NzEzX2RhaV9vcHNfaGlmaSwKIAl9LAogCXsKIAkubmFtZSA9ICJBQzk3IEF1eCIsCkBAIC0xMDUwLDEwICsxMDUyLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFdNOTcxM19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19hdXhfcHJlcGFyZSwKLQkJLnNldF9jbGtkaXYgPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd205NzEzX3NldF9kYWlfcGxsLH0sCisJLm9wcyA9ICZ3bTk3MTNfZGFpX29wc19hdXgsCiAJfSwKIAl7CiAJLm5hbWUgPSAiV005NzEzIFZvaWNlIiwKQEAgLTEwNjksMTQgKzEwNjgsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV005NzEzX1BDTV9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTk3MTNfUENNX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd205NzEzX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHdtOTcxM192b2ljZXNodXRkb3duLAotCQkuc2V0X2Nsa2RpdiA9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTk3MTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfZm10ID0gd205NzEzX3NldF9kYWlfZm10LAotCQkuc2V0X3RyaXN0YXRlID0gd205NzEzX3NldF9kYWlfdHJpc3RhdGUsCi0JfSwKKwkub3BzID0gJndtOTcxM19kYWlfb3BzX3ZvaWNlLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod205NzEzX2RhaSk7CkBAIC0xMTMyLDcgKzExMjQsNyBAQAogCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgcmVnOwogCiAJLyogRGlzYWJsZSBldmVyeXRoaW5nIGV4Y2VwdCB0b3VjaHBhbmVsIC0gdGhhdCB3aWxsIGJlIGhhbmRsZWQKQEAgLTExNTAsNyArMTE0Miw3IEBACiBzdGF0aWMgaW50IHdtOTcxM19zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtOTcxM19wcml2ICp3bTk3MTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBpLCByZXQ7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xMTY0LDggKzExNTYsOCBAQAogCXdtOTcxM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJLyogZG8gd2UgbmVlZCB0byByZS1zdGFydCB0aGUgUExMID8gKi8KLQlpZiAod205NzEzLT5wbGxfb3V0KQotCQl3bTk3MTNfc2V0X3BsbChjb2RlYywgMCwgd205NzEzLT5wbGxfaW4sIHdtOTcxMy0+cGxsX291dCk7CisJaWYgKHdtOTcxMy0+cGxsX2luKQorCQl3bTk3MTNfc2V0X3BsbChjb2RlYywgMCwgd205NzEzLT5wbGxfaW4sIDApOwogCiAJLyogb25seSBzeW5jaHJvbmlzZSB0aGUgY29kZWMgaWYgd2FybSByZXNldCBmYWlsZWQgKi8KIAlpZiAocmV0ID09IDApIHsKQEAgLTExOTEsMTAgKzExODMsMTEgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIldNOTcxMy9XTTk3MTQgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBXTTk3MTNfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod205NzEzX3JlZywgc2l6ZW9mKHdtOTcxM19yZWcpLCBHRlBfS0VSTkVMKTsKQEAgLTEyNDUsNyArMTIzOCw4IEBACiAJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0NEKSAmIDB4N2ZmZjsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0NELCByZWcpOwogCi0Jd205NzEzX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTcxM19zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtOTcxM19zbmRfYWM5N19jb250cm9scykpOwogCXdtOTcxM19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkKQEAgLTEyNjUsMTUgKzEyNTksMTUgQEAKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAogY2FjaGVfZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgd205NzEzX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcgYi9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCmluZGV4IGI1MDI3NDEuLmJkNzM5MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKKysrIGIvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZwpAQCAtMjAsNyArMjAsNyBAQAogCiBjb25maWcgU05EX0RBVklOQ0lfU09DX1NGRlNEUgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU0ZGU0RSIgotCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DICYmIE1BQ0hfREFWSU5DSV9TRkZTRFIKKwlkZXBlbmRzIG9uIFNORF9EQVZJTkNJX1NPQyAmJiBNQUNIX1NGRlNEUgogCXNlbGVjdCBTTkRfREFWSU5DSV9TT0NfSTJTCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOAogCXNlbGVjdCBTRkZTRFJfRlBHQQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKaW5kZXggNTQ4NTFmMy4uOWI5MGIzNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCkBAIC0xODYsNyArMTg2LDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGV2bV9zbmRfZGV2aWNlLCAmZXZtX3NuZF9kZXZkYXRhKTsKIAlldm1fc25kX2RldmRhdGEuZGV2ID0gJmV2bV9zbmRfZGV2aWNlLT5kZXY7Ci0JZXZtX3NuZF9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJmV2bV9zbmRfZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoZXZtX3NuZF9kZXZpY2UsICZldm1fc25kX2RhdGEsCisJCQkJIHNpemVvZihldm1fc25kX2RhdGEpKTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKGV2bV9zbmRfZGV2aWNlLCBldm1fc25kX3Jlc291cmNlcywKIAkJCQkJICAgIEFSUkFZX1NJWkUoZXZtX3NuZF9yZXNvdXJjZXMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IDBmZWU3NzkuLmZmZGI5NDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtNDk5LDYgKzQ5OSwxMyBAQAogCiAjZGVmaW5lIERBVklOQ0lfSTJTX1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGRhdmluY2lfaTJzX3N0YXJ0dXAsCisJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBkYXZpbmNpX2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBkYXZpbmNpX2kyc19kYWkgPSB7CiAJLm5hbWUgPSAiZGF2aW5jaS1pMnMiLAogCS5pZCA9IDAsCkBAIC01MTQsMTIgKzUyMSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBEQVZJTkNJX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKLQkJLnRyaWdnZXIgPSBkYXZpbmNpX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gZGF2aW5jaV9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IGRhdmluY2lfaTJzX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZkYXZpbmNpX2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGRhdmluY2lfaTJzX2RhaSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCmluZGV4IDM2NjA0OWQuLjdhZjNiNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgZGF2aW5jaV9wY21fb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBkYXZpbmNpX3BjbV9vcHMgPSB7CiAJLm9wZW4gPSAJZGF2aW5jaV9wY21fb3BlbiwKIAkuY2xvc2UgPSAJZGF2aW5jaV9wY21fY2xvc2UsCiAJLmlvY3RsID0gCXNuZF9wY21fbGliX2lvY3RsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMKaW5kZXggNDkzNWQxYi4uNDBlY2NmZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jCkBAIC0yNSw3ICsyNSw5IEBACiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpZmRlZiBDT05GSUdfU0ZGU0RSX0ZQR0EKICNpbmNsdWRlIDxhc20vcGxhdC1zZmZzZHIvc2Zmc2RyLWZwZ2EuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8bWFjaC9tY2JzcC5oPgogI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgpAQCAtMzQsMzEgKzM2LDQ1IEBACiAjaW5jbHVkZSAiZGF2aW5jaS1wY20uaCIKICNpbmNsdWRlICJkYXZpbmNpLWkycy5oIgogCisvKgorICogQ0xLWCBhbmQgQ0xLUiBhcmUgdGhlIGlucHV0cyBmb3IgdGhlIFNhbXBsZSBSYXRlIEdlbmVyYXRvci4KKyAqIEZTWCBhbmQgRlNSIGFyZSBvdXRwdXRzLCBkcml2ZW4gYnkgdGhlIHNhbXBsZSBSYXRlIEdlbmVyYXRvci4KKyAqLworI2RlZmluZSBBVURJT19GT1JNQVQgKFNORF9TT0NfREFJRk1UX0RTUF9CIHwJXAorCQkgICAgICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTIHwJXAorCQkgICAgICBTTkRfU09DX0RBSUZNVF9JQl9ORikKKwogc3RhdGljIGludCBzZmZzZHJfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAlpbnQgZnM7CiAJaW50IHJldCA9IDA7CiAKLQkvKiBTZXQgY3B1IERBSSBjb25maWd1cmF0aW9uOgotCSAqIENMS1ggYW5kIENMS1IgYXJlIHRoZSBpbnB1dHMgZm9yIHRoZSBTYW1wbGUgUmF0ZSBHZW5lcmF0b3IuCi0JICogRlNYIGFuZCBGU1IgYXJlIG91dHB1dHMsIGRyaXZlbiBieSB0aGUgc2FtcGxlIFJhdGUgR2VuZXJhdG9yLiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKLQkJCQkgIFNORF9TT0NfREFJRk1UX1JJR0hUX0ogfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUyB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9JQl9ORik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAkvKiBGc3JlZiBjYW4gYmUgMzIwMDAsIDQ0MTAwIG9yIDQ4MDAwLiAqLwogCWZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKIAorI2lmbmRlZiBDT05GSUdfU0ZGU0RSX0ZQR0EKKwkvKiBXaXRob3V0IHRoZSBGUEdBIG1vZHVsZSwgdGhlIEZzIGlzIGZpeGVkIGF0IDQ0MTAwIEh6ICovCisJaWYgKGZzICE9IDQ0MTAwKSB7CisJCXByX2RlYnVnKCJ3YXJuaW5nOiBvbmx5IDQ0LjEga0h6IGlzIHN1cHBvcnRlZCB3aXRob3V0IFNGRlNEUiBGUEdBIG1vZHVsZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKyNlbmRpZgorCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgQVVESU9fRk9STUFUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXByX2RlYnVnKCJzZmZzZHJfaHdfcGFyYW1zOiByYXRlID0gJWQgSHpcbiIsIGZzKTsKIAorI2lmbmRlZiBDT05GSUdfU0ZGU0RSX0ZQR0EKKwlyZXR1cm4gMDsKKyNlbHNlCiAJcmV0dXJuIHNmZnNkcl9mcGdhX3NldF9jb2RlY19mcyhmcyk7CisjZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBzZmZzZHJfb3BzID0gewpAQCAtMTI3LDcgKzE0Myw4IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzZmZzZHJfc25kX2RldmljZSwgJnNmZnNkcl9zbmRfZGV2ZGF0YSk7CiAJc2Zmc2RyX3NuZF9kZXZkYXRhLmRldiA9ICZzZmZzZHJfc25kX2RldmljZS0+ZGV2OwotCXNmZnNkcl9zbmRfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9ICZzZmZzZHJfc25kX2RhdGE7CisJcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHNmZnNkcl9zbmRfZGV2aWNlLCAmc2Zmc2RyX3NuZF9kYXRhLAorCQkJCSBzaXplb2Yoc2Zmc2RyX3NuZF9kYXRhKSk7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhzZmZzZHJfc25kX2RldmljZSwKIAkJCQkJICAgIHNmZnNkcl9zbmRfcmVzb3VyY2VzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9LY29uZmlnIGIvc291bmQvc29jL2ZzbC9LY29uZmlnCmluZGV4IDk1YzEyYjIuLjlmYzkwODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcKQEAgLTEsMTcgKzEsMTggQEAKIGNvbmZpZyBTTkRfU09DX09GX1NJTVBMRQogCXRyaXN0YXRlCiAKKyMgQVNvQyBwbGF0Zm9ybSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzg2MTAgU09DLiAgVGhpcyBjb21waWxlcyBkcml2ZXJzCisjIGZvciB0aGUgU1NJIGFuZCB0aGUgRWxvIERNQSBjb250cm9sbGVyLiAgWW91IHdpbGwgc3RpbGwgbmVlZCB0byBzZWxlY3QKKyMgYSBwbGF0Zm9ybSBkcml2ZXIgYW5kIGEgY29kZWMgZHJpdmVyLgogY29uZmlnIFNORF9TT0NfTVBDODYxMAotCWJvb2wgIkFMU0EgU29DIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIFNPQyIKLQlkZXBlbmRzIG9uIE1QQzg2MTBfSFBDRAotCWRlZmF1bHQgeSBpZiBNUEM4NjEwCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0byB0aGUgU1NJCi0gICAgICAgICAgZGV2aWNlIG9uIGFuIE1QQzg2MTAuCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIE1QQzg2MTAKIAogY29uZmlnIFNORF9TT0NfTVBDODYxMF9IUENECi0JYm9vbCAiQUxTQSBTb0Mgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4NjEwIEhQQ0QgYm9hcmQiCi0JZGVwZW5kcyBvbiBTTkRfU09DX01QQzg2MTAKKwl0cmlzdGF0ZSAiQUxTQSBTb0Mgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4NjEwIEhQQ0QgYm9hcmQiCisJIyBJMkMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgQ1M0MjcwIGRyaXZlcgorCWRlcGVuZHMgb24gTVBDODYxMF9IUENEICYmIEkyQworCXNlbGVjdCBTTkRfU09DX01QQzg2MTAKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEEKIAlkZWZhdWx0IHkgaWYgTVBDODYxMF9IUENECmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL01ha2VmaWxlIGIvc291bmQvc29jL2ZzbC9NYWtlZmlsZQppbmRleCAwMzVkYTRhLi5mODUxMzRjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUKQEAgLTIsMTAgKzIsMTMgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX09GX1NJTVBMRSkgKz0gc29jLW9mLXNpbXBsZS5vCiAKICMgTVBDODYxMCBIUENEIE1hY2hpbmUgU3VwcG9ydAotb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEKSArPSBtcGM4NjEwX2hwY2Qubworc25kLXNvYy1tcGM4NjEwLWhwY2Qtb2JqcyA6PSBtcGM4NjEwX2hwY2Qubworb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEKSArPSBzbmQtc29jLW1wYzg2MTAtaHBjZC5vCiAKICMgTVBDODYxMCBQbGF0Zm9ybSBTdXBwb3J0Ci1vYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwKSArPSBmc2xfc3NpLm8gZnNsX2RtYS5vCitzbmQtc29jLWZzbC1zc2ktb2JqcyA6PSBmc2xfc3NpLm8KK3NuZC1zb2MtZnNsLWRtYS1vYmpzIDo9IGZzbF9kbWEubworb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDODYxMCkgKz0gc25kLXNvYy1mc2wtc3NpLm8gc25kLXNvYy1mc2wtZG1hLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfTVBDNTIwMF9JMlMpICs9IG1wYzUyMDBfcHNjX2kycy5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKaW5kZXggNjQ5OTNlZC4uYjNlYjg1NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKQEAgLTE0Miw3ICsxNDIsOCBAQAogCS5pbmZvICAgCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVAgfAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVgsCisJCQkJICBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVggfAorCQkJCSAgU05EUlZfUENNX0lORk9fUEFVU0UsCiAJLmZvcm1hdHMJCT0gRlNMRE1BX1BDTV9GT1JNQVRTLAogCS5yYXRlcyAgCQk9IEZTTERNQV9QQ01fUkFURVMsCiAJLnJhdGVfbWluICAgICAgIAk9IDU1MTIsCkBAIC00NjQsMTEgKzQ2NSw3IEBACiAJCXNpemVvZihzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfTElOS1M7IGkrKykgewotCQlzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IgKmxpbmsgPSAmZG1hX3ByaXZhdGUtPmxpbmtbaV07Ci0KLQkJbGluay0+c291cmNlX2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOwotCQlsaW5rLT5kZXN0X2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOwotCQlsaW5rLT5uZXh0ID0gY3B1X3RvX2JlNjQodGVtcF9saW5rKTsKKwkJZG1hX3ByaXZhdGUtPmxpbmtbaV0ubmV4dCA9IGNwdV90b19iZTY0KHRlbXBfbGluayk7CiAKIAkJdGVtcF9saW5rICs9IHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IpOwogCX0KQEAgLTUyNSw3OSArNTIyLDkgQEAKICAqIFRoaXMgZnVuY3Rpb24gb2J0YWlucyBoYXJkd2FyZSBwYXJhbWV0ZXJzIGFib3V0IHRoZSBvcGVuZWQgc3RyZWFtIGFuZAogICogcHJvZ3JhbXMgdGhlIERNQSBjb250cm9sbGVyIGFjY29yZGluZ2x5LgogICoKLSAqIE5vdGUgdGhhdCBkdWUgdG8gYSBxdWlyayBvZiB0aGUgU1NJJ3MgU1RYIHJlZ2lzdGVyLCB0aGUgdGFyZ2V0IGFkZHJlc3MKLSAqIGZvciB0aGUgRE1BIG9wZXJhdGlvbnMgZGVwZW5kcyBvbiB0aGUgc2FtcGxlIHNpemUuICBTbyB3ZSBkb24ndCBwcm9ncmFtCi0gKiB0aGUgZGVzdF9hZGRyIChmb3IgcGxheWJhY2sgLS0gc291cmNlX2FkZHIgZm9yIGNhcHR1cmUpIGZpZWxkcyBpbiB0aGUKLSAqIGxpbmsgZGVzY3JpcHRvcnMgaGVyZS4gIFdlIGRvIHRoYXQgaW4gZnNsX2RtYV9wcmVwYXJlKCkKLSAqLwotc3RhdGljIGludCBmc2xfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBmc2xfZG1hX3ByaXZhdGUgKmRtYV9wcml2YXRlID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCi0JZG1hX2FkZHJfdCB0ZW1wX2FkZHI7ICAgLyogUG9pbnRlciB0byBuZXh0IHBlcmlvZCAqLwotCi0JdW5zaWduZWQgaW50IGk7Ci0KLQkvKiBHZXQgYWxsIHRoZSBwYXJhbWV0ZXJzIHdlIG5lZWQgKi8KLQlzaXplX3QgYnVmZmVyX3NpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7Ci0Jc2l6ZV90IHBlcmlvZF9zaXplID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOwotCi0JLyogSW5pdGlhbGl6ZSBvdXIgRE1BIHRyYWNraW5nIHZhcmlhYmxlcyAqLwotCWRtYV9wcml2YXRlLT5wZXJpb2Rfc2l6ZSA9IHBlcmlvZF9zaXplOwotCWRtYV9wcml2YXRlLT5udW1fcGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7Ci0JZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyArIGJ1ZmZlcl9zaXplOwotCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsKLQkJKE5VTV9ETUFfTElOS1MgKiBwZXJpb2Rfc2l6ZSk7Ci0JaWYgKGRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPj0gZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kKQotCQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5czsKLQotCS8qCi0JICogVGhlIGFjdHVhbCBhZGRyZXNzIGluIFNUWDAgKGRlc3RpbmF0aW9uIGZvciBwbGF5YmFjaywgc291cmNlIGZvcgotCSAqIGNhcHR1cmUpIGlzIGJhc2VkIG9uIHRoZSBzYW1wbGUgc2l6ZSwgYnV0IHdlIGRvbid0IGtub3cgdGhlIHNhbXBsZQotCSAqIHNpemUgaW4gdGhpcyBmdW5jdGlvbiwgc28gd2UnbGwgaGF2ZSB0byBhZGp1c3QgdGhhdCBsYXRlci4gIFNlZQotCSAqIGNvbW1lbnRzIGluIGZzbF9kbWFfcHJlcGFyZSgpLgotCSAqCi0JICogVGhlIERNQSBjb250cm9sbGVyIGRvZXMgbm90IGhhdmUgYSBjYWNoZSwgc28gdGhlIENQVSBkb2VzIG5vdAotCSAqIG5lZWQgdG8gdGVsbCBpdCB0byBmbHVzaCBpdHMgY2FjaGUuICBIb3dldmVyLCB0aGUgRE1BCi0JICogY29udHJvbGxlciBkb2VzIG5lZWQgdG8gdGVsbCB0aGUgQ1BVIHRvIGZsdXNoIGl0cyBjYWNoZS4KLQkgKiBUaGF0J3Mgd2hhdCB0aGUgU05PT1AgYml0IGRvZXMuCi0JICoKLQkgKiBBbHNvLCBldmVuIHRob3VnaCB0aGUgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydHMgMzYtYml0IGFkZHJlc3NpbmcsIGZvcgotCSAqIHNpbXBsaWNpdHkgd2UgY3VycmVudGx5IHN1cHBvcnQgb25seSAzMi1iaXQgYWRkcmVzc2VzIGZvciB0aGUgYXVkaW8KLQkgKiBidWZmZXIgaXRzZWxmLgotCSAqLwotCXRlbXBfYWRkciA9IHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hZGRyOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfTElOS1M7IGkrKykgewotCQlzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IgKmxpbmsgPSAmZG1hX3ByaXZhdGUtPmxpbmtbaV07Ci0KLQkJbGluay0+Y291bnQgPSBjcHVfdG9fYmUzMihwZXJpb2Rfc2l6ZSk7Ci0KLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQlsaW5rLT5zb3VyY2VfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7Ci0JCWVsc2UKLQkJCWxpbmstPmRlc3RfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7Ci0KLQkJdGVtcF9hZGRyICs9IHBlcmlvZF9zaXplOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGZzbF9kbWFfcHJlcGFyZSAtIHByZXBhcmUgdGhlIERNQSByZWdpc3RlcnMgZm9yIHBsYXliYWNrLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGF1ZGlvIGRhdGEgYXJlIGtub3duLAotICogaS5lLiBzbmRfcGNtX3J1bnRpbWUgaXMgaW5pdGlhbGl6ZWQuCi0gKgotICogSW4gdGhpcyBmdW5jdGlvbiwgd2UgZmluaXNoIHByb2dyYW1taW5nIHRoZSByZWdpc3RlcnMgb2YgdGhlIERNQQotICogY29udHJvbGxlciB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIHNhbXBsZSBzaXplLgotICoKLSAqIE9uZSBvZiB0aGUgZHJhd2JhY2tzIHdpdGggYmlnLWVuZGlhbiBpcyB0aGF0IHdoZW4gY29weWluZyBpbnRlZ2VycyBvZgotICogZGlmZmVyZW50IHNpemVzIHRvIGEgZml4ZWQtc2l6ZWQgcmVnaXN0ZXIsIHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZQotICogaW50ZWdlciBtdXN0IGJlIGNvcGllZCBpcyBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIGludGVnZXIuCisgKiBPbmUgZHJhd2JhY2sgb2YgYmlnLWVuZGlhbiBpcyB0aGF0IHdoZW4gY29weWluZyBpbnRlZ2VycyBvZiBkaWZmZXJlbnQKKyAqIHNpemVzIHRvIGEgZml4ZWQtc2l6ZWQgcmVnaXN0ZXIsIHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBpbnRlZ2VyIG11c3QgYmUKKyAqIGNvcGllZCBpcyBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIGludGVnZXIuCiAgKgogICogRm9yIGV4YW1wbGUsIGlmIFAgaXMgdGhlIGFkZHJlc3Mgb2YgYSAzMi1iaXQgcmVnaXN0ZXIsIGFuZCBYIGlzIGEgMzItYml0CiAgKiBpbnRlZ2VyLCB0aGVuIFggc2hvdWxkIGJlIGNvcGllZCB0byBhZGRyZXNzIFAuICBIb3dldmVyLCBpZiBYIGlzIGEgMTYtYml0CkBAIC02MTMsMjIgKzU0MCw1OCBAQAogICogYW5kIDggYnl0ZXMgYXQgYSB0aW1lKS4gIFNvIHdlIGRvIG5vdCBzdXBwb3J0IHBhY2tlZCAyNC1iaXQgc2FtcGxlcy4KICAqIDI0LWJpdCBkYXRhIG11c3QgYmUgcGFkZGVkIHRvIDMyIGJpdHMuCiAgKi8KLXN0YXRpYyBpbnQgZnNsX2RtYV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBmc2xfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBmc2xfZG1hX3ByaXZhdGUgKmRtYV9wcml2YXRlID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjY3NyX2RtYV9jaGFubmVsIF9faW9tZW0gKmRtYV9jaGFubmVsID0gZG1hX3ByaXZhdGUtPmRtYV9jaGFubmVsOwotCXUzMiBtcjsKLQl1bnNpZ25lZCBpbnQgaTsKLQlkbWFfYWRkcl90IHNzaV9zeHhfcGh5czsJLyogQnVzIGFkZHJlc3Mgb2YgU1NJIFNUWCByZWdpc3RlciAqLwotCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwkvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIGZyYW1lICovCiAKLQlzc2lfc3h4X3BoeXMgPSBkbWFfcHJpdmF0ZS0+c3NpX3N4eF9waHlzOworCS8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgKi8KKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3NpemUgPQorCQlzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpOworCisJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBmcmFtZSAqLworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplID0gMiAqIChzYW1wbGVfc2l6ZSAvIDgpOworCisJLyogQnVzIGFkZHJlc3Mgb2YgU1NJIFNUWCByZWdpc3RlciAqLworCWRtYV9hZGRyX3Qgc3NpX3N4eF9waHlzID0gZG1hX3ByaXZhdGUtPnNzaV9zeHhfcGh5czsKKworCS8qIFNpemUgb2YgdGhlIERNQSBidWZmZXIsIGluIGJ5dGVzICovCisJc2l6ZV90IGJ1ZmZlcl9zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpOworCisJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBwZXJpb2QgKi8KKwlzaXplX3QgcGVyaW9kX3NpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7CisKKwkvKiBQb2ludGVyIHRvIG5leHQgcGVyaW9kICovCisJZG1hX2FkZHJfdCB0ZW1wX2FkZHIgPSBzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkcjsKKworCS8qIFBvaW50ZXIgdG8gRE1BIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3QgY2Nzcl9kbWFfY2hhbm5lbCBfX2lvbWVtICpkbWFfY2hhbm5lbCA9IGRtYV9wcml2YXRlLT5kbWFfY2hhbm5lbDsKKworCXUzMiBtcjsgLyogRE1BIE1vZGUgUmVnaXN0ZXIgKi8KKworCXVuc2lnbmVkIGludCBpOworCisJLyogSW5pdGlhbGl6ZSBvdXIgRE1BIHRyYWNraW5nIHZhcmlhYmxlcyAqLworCWRtYV9wcml2YXRlLT5wZXJpb2Rfc2l6ZSA9IHBlcmlvZF9zaXplOworCWRtYV9wcml2YXRlLT5udW1fcGVyaW9kcyA9IHBhcmFtc19wZXJpb2RzKGh3X3BhcmFtcyk7CisJZG1hX3ByaXZhdGUtPmRtYV9idWZfZW5kID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5cyArIGJ1ZmZlcl9zaXplOworCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsKKwkJKE5VTV9ETUFfTElOS1MgKiBwZXJpb2Rfc2l6ZSk7CisKKwlpZiAoZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA+PSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQpCisJCS8qIFRoaXMgaGFwcGVucyBpZiB0aGUgbnVtYmVyIG9mIHBlcmlvZHMgPT0gTlVNX0RNQV9MSU5LUyAqLworCQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID0gZG1hX3ByaXZhdGUtPmRtYV9idWZfcGh5czsKIAogCW1yID0gaW5fYmUzMigmZG1hX2NoYW5uZWwtPm1yKSAmIH4oQ0NTUl9ETUFfTVJfQldDX01BU0sgfAogCQkgIENDU1JfRE1BX01SX1NBSFRTX01BU0sgfCBDQ1NSX0RNQV9NUl9EQUhUU19NQVNLKTsKIAotCXN3aXRjaCAocnVudGltZS0+c2FtcGxlX2JpdHMpIHsKKwkvKiBEdWUgdG8gYSBxdWlyayBvZiB0aGUgU1NJJ3MgU1RYIHJlZ2lzdGVyLCB0aGUgdGFyZ2V0IGFkZHJlc3MKKwkgKiBmb3IgdGhlIERNQSBvcGVyYXRpb25zIGRlcGVuZHMgb24gdGhlIHNhbXBsZSBzaXplLiAgU28gd2UgY2FsY3VsYXRlCisJICogdGhhdCBvZmZzZXQgaGVyZS4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBhbHNvIHRlbGwgdGhlIERNQSBjb250cm9sbGVyCisJICogaG93IG11Y2ggZGF0YSB0byB0cmFuc2ZlciBwZXIgc2FtcGxlLgorCSAqLworCXN3aXRjaCAoc2FtcGxlX3NpemUpIHsKIAljYXNlIDg6CiAJCW1yIHw9IENDU1JfRE1BX01SX0RBSFRTXzEgfCBDQ1NSX0RNQV9NUl9TQUhUU18xOwogCQlzc2lfc3h4X3BoeXMgKz0gMzsKQEAgLTY0MSwxMiArNjA0LDEyIEBACiAJCW1yIHw9IENDU1JfRE1BX01SX0RBSFRTXzQgfCBDQ1NSX0RNQV9NUl9TQUhUU180OwogCQlicmVhazsKIAlkZWZhdWx0OgorCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAkJZGV2X2VycihzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LAotCQkJInVuc3VwcG9ydGVkIHNhbXBsZSBzaXplICV1XG4iLCBydW50aW1lLT5zYW1wbGVfYml0cyk7CisJCQkidW5zdXBwb3J0ZWQgc2FtcGxlIHNpemUgJXVcbiIsIHNhbXBsZV9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZnJhbWVfc2l6ZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgLyA4OwogCS8qCiAJICogQldDIHNob3VsZCBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZiB0aGUgZnJhbWUgc2l6ZS4gIEJXQyBkZXRlcm1pbmVzCiAJICogaG93IG1hbnkgYnl0ZXMgYXJlIHNlbnQvcmVjZWl2ZWQgYmVmb3JlIHRoZSBETUEgY29udHJvbGxlciBjaGVja3MgdGhlCkBAIC02NTUsNyArNjE4LDYgQEAKIAkgKiBjYXB0dXJlLCB0aGUgcmVjZWl2ZSBGSUZPIGlzIHRyaWdnZXJlZCB3aGVuIGl0IGNvbnRhaW5zIG9uZSBmcmFtZSwgc28KIAkgKiB3ZSB3YW50IHRvIHJlY2VpdmUgb25lIGZyYW1lIGF0IGEgdGltZS4KIAkgKi8KLQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQltciB8PSBDQ1NSX0RNQV9NUl9CV0MoMiAqIGZyYW1lX3NpemUpOwogCWVsc2UKQEAgLTY2MywxNiArNjI1LDQ4IEBACiAKIAlvdXRfYmUzMigmZG1hX2NoYW5uZWwtPm1yLCBtcik7CiAKLQkvKgotCSAqIFByb2dyYW0gdGhlIGFkZHJlc3Mgb2YgdGhlIERNQSB0cmFuc2ZlciB0by9mcm9tIHRoZSBTU0kuCi0JICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfTElOS1M7IGkrKykgewogCQlzdHJ1Y3QgZnNsX2RtYV9saW5rX2Rlc2NyaXB0b3IgKmxpbmsgPSAmZG1hX3ByaXZhdGUtPmxpbmtbaV07CiAKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWxpbmstPmNvdW50ID0gY3B1X3RvX2JlMzIocGVyaW9kX3NpemUpOworCisJCS8qIEV2ZW4gdGhvdWdoIHRoZSBETUEgY29udHJvbGxlciBzdXBwb3J0cyAzNi1iaXQgYWRkcmVzc2luZywKKwkJICogZm9yIHNpbXBsaWNpdHkgd2UgYWxsb3cgb25seSAzMi1iaXQgYWRkcmVzc2VzIGZvciB0aGUgYXVkaW8KKwkJICogYnVmZmVyIGl0c2VsZi4gIFRoaXMgd2FzIGVuZm9yY2VkIGluIGZzbF9kbWFfbmV3KCkgd2l0aCB0aGUKKwkJICogRE1BIG1hc2suCisJCSAqCisJCSAqIFRoZSBzbm9vcCBiaXQgdGVsbHMgdGhlIERNQSBjb250cm9sbGVyIHdoZXRoZXIgaXQgc2hvdWxkIHRlbGwKKwkJICogdGhlIEVDTSB0byBzbm9vcCBkdXJpbmcgYSByZWFkIG9yIHdyaXRlIHRvIGFuIGFkZHJlc3MuIEZvcgorCQkgKiBhdWRpbywgd2UgdXNlIERNQSB0byB0cmFuc2ZlciBkYXRhIGJldHdlZW4gbWVtb3J5IGFuZCBhbiBJL08KKwkJICogZGV2aWNlICh0aGUgU1NJJ3MgU1RYMCBvciBTUlgwIHJlZ2lzdGVyKS4gU25vb3BpbmcgaXMgb25seQorCQkgKiBuZWVkZWQgaWYgdGhlcmUgaXMgYSBjYWNoZSwgc28gd2UgbmVlZCB0byBzbm9vcCBtZW1vcnkKKwkJICogYWRkcmVzc2VzIG9ubHkuICBGb3IgcGxheWJhY2ssIHRoYXQgbWVhbnMgd2Ugc25vb3AgdGhlIHNvdXJjZQorCQkgKiBidXQgbm90IHRoZSBkZXN0aW5hdGlvbi4gIEZvciBjYXB0dXJlLCB3ZSBzbm9vcCB0aGUKKwkJICogZGVzdGluYXRpb24gYnV0IG5vdCB0aGUgc291cmNlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgZmFpbGluZyB0byBzbm9vcCBwcm9wZXJseSBpcyB1bmxpa2VseSB0byBjYXVzZQorCQkgKiBjYWNoZSBpbmNvaGVyZW5jeSBpZiB0aGUgcGVyaW9kIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlCisJCSAqIHNpemUgb2YgTDEgY2FjaGUuICBUaGlzIGlzIGJlY2F1c2UgZmlsbGluZyBpbiBvbmUgcGVyaW9kIHdpbGwKKwkJICogZmx1c2ggb3V0IHRoZSBkYXRhIGZvciB0aGUgcHJldmlvdXMgcGVyaW9kLiAgU28gaWYgeW91CisJCSAqIGluY3JlYXNlZCBwZXJpb2RfYnl0ZXNfbWluIHRvIGEgbGFyZ2UgZW5vdWdoIHNpemUsIHlvdSBtaWdodAorCQkgKiBnZXQgbW9yZSBwZXJmb3JtYW5jZSBieSBub3Qgc25vb3BpbmcsIGFuZCB5b3UnbGwgc3RpbGwgYmUKKwkJICogb2theS4KKwkJICovCisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlsaW5rLT5zb3VyY2VfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7CisJCQlsaW5rLT5zb3VyY2VfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7CisKIAkJCWxpbmstPmRlc3RfYWRkciA9IGNwdV90b19iZTMyKHNzaV9zeHhfcGh5cyk7Ci0JCWVsc2UKKwkJCWxpbmstPmRlc3RfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9OT1NOT09QKTsKKwkJfSBlbHNlIHsKIAkJCWxpbmstPnNvdXJjZV9hZGRyID0gY3B1X3RvX2JlMzIoc3NpX3N4eF9waHlzKTsKKwkJCWxpbmstPnNvdXJjZV9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX05PU05PT1ApOworCisJCQlsaW5rLT5kZXN0X2FkZHIgPSBjcHVfdG9fYmUzMih0ZW1wX2FkZHIpOworCQkJbGluay0+ZGVzdF9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX1NOT09QKTsKKwkJfQorCisJCXRlbXBfYWRkciArPSBwZXJpb2Rfc2l6ZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTgwOCw3ICs4MDIsNiBAQAogCS5pb2N0bCAgCT0gc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyAgICAgID0gZnNsX2RtYV9od19wYXJhbXMsCiAJLmh3X2ZyZWUJPSBmc2xfZG1hX2h3X2ZyZWUsCi0JLnByZXBhcmUJPSBmc2xfZG1hX3ByZXBhcmUsCiAJLnBvaW50ZXIJPSBmc2xfZG1hX3BvaW50ZXIsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCmluZGV4IGM2ZDZlYjcuLjE2OWJjYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCkBAIC03Miw2ICs3Miw3IEBACiAgKiBAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIKICAqIEBwbGF5YmFjazogdGhlIG51bWJlciBvZiBwbGF5YmFjayBzdHJlYW1zIG9wZW5lZAogICogQGNhcHR1cmU6IHRoZSBudW1iZXIgb2YgY2FwdHVyZSBzdHJlYW1zIG9wZW5lZAorICogQGFzeW5jaHJvbm91czogMD1zeW5jaHJvbm91cyBtb2RlLCAxPWFzeW5jaHJvbm91cyBtb2RlCiAgKiBAY3B1X2RhaTogdGhlIENQVSBEQUkgZm9yIHRoaXMgZGV2aWNlCiAgKiBAZGV2X2F0dHI6IHRoZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdHVyZQogICogQHN0YXRzOiBTU0kgc3RhdGlzdGljcwpAQCAtODYsNiArODcsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBpbnQgcGxheWJhY2s7CiAJdW5zaWduZWQgaW50IGNhcHR1cmU7CisJaW50IGFzeW5jaHJvbm91czsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgY3B1X2RhaTsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cjsKIApAQCAtMzAxLDkgKzMwMywxMCBAQAogCQkgKgogCQkgKiBGSVhNRTogTGl0dGxlLWVuZGlhbiBzYW1wbGVzIHJlcXVpcmUgYSBkaWZmZXJlbnQgc2hpZnQgZGlyCiAJCSAqLwotCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfSTJTX01PREVfTUFTSywKLQkJCUNDU1JfU1NJX1NDUl9URlJfQ0xLX0RJUyB8Ci0JCQlDQ1NSX1NTSV9TQ1JfSTJTX01PREVfU0xBVkUgfCBDQ1NSX1NTSV9TQ1JfU1lOKTsKKwkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnNjciwKKwkJCUNDU1JfU1NJX1NDUl9JMlNfTU9ERV9NQVNLIHwgQ0NTUl9TU0lfU0NSX1NZTiwKKwkJCUNDU1JfU1NJX1NDUl9URlJfQ0xLX0RJUyB8IENDU1JfU1NJX1NDUl9JMlNfTU9ERV9TTEFWRQorCQkJfCAoc3NpX3ByaXZhdGUtPmFzeW5jaHJvbm91cyA/IDAgOiBDQ1NSX1NTSV9TQ1JfU1lOKSk7CiAKIAkJb3V0X2JlMzIoJnNzaS0+c3RjciwKIAkJCSBDQ1NSX1NTSV9TVENSX1RYQklUMCB8IENDU1JfU1NJX1NUQ1JfVEZFTjAgfApAQCAtMzgyLDEwICszODUsMTUgQEAKIAkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAogCQkJZmlyc3RfcnVudGltZS0+cmF0ZSwgZmlyc3RfcnVudGltZS0+cmF0ZSk7CiAKLQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCi0JCQlTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMsCi0JCQlmaXJzdF9ydW50aW1lLT5zYW1wbGVfYml0cywKLQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzKTsKKwkJLyogSWYgd2UncmUgaW4gc3luY2hyb25vdXMgbW9kZSwgdGhlbiB3ZSBuZWVkIHRvIGNvbnN0cmFpbgorCQkgKiB0aGUgc2FtcGxlIHNpemUgYXMgd2VsbC4gIFdlIGRvbid0IHN1cHBvcnQgaW5kZXBlbmRlbnQgc2FtcGxlCisJCSAqIHJhdGVzIGluIGFzeW5jaHJvbm91cyBtb2RlLgorCQkgKi8KKwkJaWYgKCFzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzKQorCQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTLAorCQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzLAorCQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzKTsKIAogCQlzc2lfcHJpdmF0ZS0+c2Vjb25kX3N0cmVhbSA9IHN1YnN0cmVhbTsKIAl9CkBAIC00MDAsNyArNDA4LDcgQEAKIH0KIAogLyoqCi0gKiBmc2xfc3NpX3ByZXBhcmU6IHByZXBhcmUgdGhlIFNTSS4KKyAqIGZzbF9zc2lfaHdfcGFyYW1zIC0gcHJvZ3JhbSB0aGUgc2FtcGxlIHNpemUKICAqCiAgKiBNb3N0IG9mIHRoZSBTU0kgcmVnaXN0ZXJzIGhhdmUgYmVlbiBwcm9ncmFtbWVkIGluIHRoZSBzdGFydHVwIGZ1bmN0aW9uLAogICogYnV0IHRoZSB3b3JkIGxlbmd0aCBtdXN0IGJlIHByb2dyYW1tZWQgaGVyZS4gIFVuZm9ydHVuYXRlbHksIHByb2dyYW1taW5nCkBAIC00MTIsMjMgKzQyMCwyNyBAQAogICogTm90ZTogVGhlIFN4Q0NSLkRDIGFuZCBTeENDUi5QTSBiaXRzIGFyZSBvbmx5IHVzZWQgaWYgdGhlIFNTSSBpcyB0aGUKICAqIGNsb2NrIG1hc3Rlci4KICAqLwotc3RhdGljIGludCBmc2xfc3NpX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3N0YXRpYyBpbnQgZnNsX3NzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMsIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZnNsX3NzaV9wcml2YXRlICpzc2lfcHJpdmF0ZSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0KLQlzdHJ1Y3QgY2Nzcl9zc2kgX19pb21lbSAqc3NpID0gc3NpX3ByaXZhdGUtPnNzaTsKKwlzdHJ1Y3QgZnNsX3NzaV9wcml2YXRlICpzc2lfcHJpdmF0ZSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAogCWlmIChzdWJzdHJlYW0gPT0gc3NpX3ByaXZhdGUtPmZpcnN0X3N0cmVhbSkgewotCQl1MzIgd2w7CisJCXN0cnVjdCBjY3NyX3NzaSBfX2lvbWVtICpzc2kgPSBzc2lfcHJpdmF0ZS0+c3NpOworCQl1bnNpZ25lZCBpbnQgc2FtcGxlX3NpemUgPQorCQkJc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChod19wYXJhbXMpKTsKKwkJdTMyIHdsID0gQ0NTUl9TU0lfU3hDQ1JfV0woc2FtcGxlX3NpemUpOwogCiAJCS8qIFRoZSBTU0kgc2hvdWxkIGFsd2F5cyBiZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50cyAoU1NJRU49MCkgKi8KLQkJd2wgPSBDQ1NSX1NTSV9TeENDUl9XTChzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpKTsKIAogCQkvKiBJbiBzeW5jaHJvbm91cyBtb2RlLCB0aGUgU1NJIHVzZXMgU1RDQ1IgZm9yIGNhcHR1cmUgKi8KLQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnN0Y2NyLCBDQ1NSX1NTSV9TeENDUl9XTF9NQVNLLCB3bCk7CisJCWlmICgoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgfHwKKwkJICAgICFzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzKQorCQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnN0Y2NyLAorCQkJCQlDQ1NSX1NTSV9TeENDUl9XTF9NQVNLLCB3bCk7CisJCWVsc2UKKwkJCWNscnNldGJpdHNfYmUzMigmc3NpLT5zcmNjciwKKwkJCQkJQ0NTUl9TU0lfU3hDQ1JfV0xfTUFTSywgd2wpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDUyLDI4ICs0NjQsMzMgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1NTSUVOKTsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CiAJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfU1NJRU4pOwogCQkJc2V0Yml0czMyKCZzc2ktPnNjciwKIAkJCQlDQ1NSX1NTSV9TQ1JfU1NJRU4gfCBDQ1NSX1NTSV9TQ1JfVEUpOwogCQl9IGVsc2UgewotCQkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1NTSUVOKTsKKwkJCWxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMDsKKwogCQkJc2V0Yml0czMyKCZzc2ktPnNjciwKIAkJCQlDQ1NSX1NTSV9TQ1JfU1NJRU4gfCBDQ1NSX1NTSV9TQ1JfUkUpOwogCi0JCQkvKgotCQkJICogSSB0aGluayB3ZSBuZWVkIHRoaXMgZGVsYXkgdG8gYWxsb3cgdGltZSBmb3IgdGhlIFNTSQotCQkJICogdG8gcHV0IGRhdGEgaW50byBpdHMgRklGTy4gIFdpdGhvdXQgaXQsIEFMU0Egc3RhcnRzCi0JCQkgKiB0byBjb21wbGFpbiBhYm91dCBvdmVycnVucy4KKwkJCS8qIFdhaXQgdW50aWwgdGhlIFNTSSBoYXMgZmlsbGVkIGl0cyBGSUZPLiBXaXRob3V0IHRoaXMKKwkJCSAqIGRlbGF5LCBBTFNBIGNvbXBsYWlucyBhYm91dCBvdmVycnVucy4gIFdoZW4gdGhlIEZJRk8KKwkJCSAqIGlzIGZ1bGwsIHRoZSBETUEgY29udHJvbGxlciBpbml0aWF0ZXMgaXRzIGZpcnN0CisJCQkgKiB0cmFuc2Zlci4gIFVudGlsIHRoZW4sIGhvd2V2ZXIsIHRoZSBETUEncyBEQVIKKwkJCSAqIHJlZ2lzdGVyIGlzIHplcm8sIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYW4KKwkJCSAqIG91dC1vZi1ib3VuZHMgcG9pbnRlci4gIFRoaXMgbWFrZXMgQUxTQSB0aGluayBhbgorCQkJICogb3ZlcnJ1biBoYXMgb2NjdXJyZWQuCiAJCQkgKi8KLQkJCW1kZWxheSgxKTsKKwkJCXdoaWxlICghKGluX2JlMzIoJnNzaS0+c2lzcikgJiBDQ1NSX1NTSV9TSVNSX1JGRjApICYmCisJCQkgICAgICAgKGppZmZpZXMgPCB0aW1lb3V0KSk7CisJCQlpZiAoIShpbl9iZTMyKCZzc2ktPnNpc3IpICYgQ0NTUl9TU0lfU0lTUl9SRkYwKSkKKwkJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJCWNscmJpdHMzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9URSk7CkBAIC01NjMsNiArNTgwLDE1IEBACiAvKioKICAqIGZzbF9zc2lfZGFpX3RlbXBsYXRlOiB0ZW1wbGF0ZSBDUFUgREFJIGZvciB0aGUgU1NJCiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGZzbF9zc2lfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGZzbF9zc2lfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gZnNsX3NzaV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gZnNsX3NzaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IGZzbF9zc2lfdHJpZ2dlciwKKwkuc2V0X3N5c2Nsawk9IGZzbF9zc2lfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IGZzbF9zc2lfc2V0X2ZtdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWkgZnNsX3NzaV9kYWlfdGVtcGxhdGUgPSB7CiAJLnBsYXliYWNrID0gewogCQkvKiBUaGUgU1NJIGRvZXMgbm90IHN1cHBvcnQgbW9uYXVyYWwgYXVkaW8uICovCkBAIC01NzcsMTQgKzYwMyw3IEBACiAJCS5yYXRlcyA9IEZTTFNTSV9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gRlNMU1NJX0kyU19GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBmc2xfc3NpX3N0YXJ0dXAsCi0JCS5wcmVwYXJlID0gZnNsX3NzaV9wcmVwYXJlLAotCQkuc2h1dGRvd24gPSBmc2xfc3NpX3NodXRkb3duLAotCQkudHJpZ2dlciA9IGZzbF9zc2lfdHJpZ2dlciwKLQkJLnNldF9zeXNjbGsgPSBmc2xfc3NpX3NldF9zeXNjbGssCi0JCS5zZXRfZm10ID0gZnNsX3NzaV9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZmc2xfc3NpX2RhaV9vcHMsCiB9OwogCiAvKioKQEAgLTY1NCw2ICs2NzMsNyBAQAogCXNzaV9wcml2YXRlLT5zc2lfcGh5cyA9IHNzaV9pbmZvLT5zc2lfcGh5czsKIAlzc2lfcHJpdmF0ZS0+aXJxID0gc3NpX2luZm8tPmlycTsKIAlzc2lfcHJpdmF0ZS0+ZGV2ID0gc3NpX2luZm8tPmRldjsKKwlzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzID0gc3NpX2luZm8tPmFzeW5jaHJvbm91czsKIAogCXNzaV9wcml2YXRlLT5kZXYtPmRyaXZlcl9kYXRhID0gZnNsX3NzaV9kYWk7CiAKQEAgLTcwNCw2ICs3MjQsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZzbF9zc2lfZGVzdHJveV9kYWkpOwogCitzdGF0aWMgaW50IF9faW5pdCBmc2xfc3NpX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJGcmVlc2NhbGUgU3luY2hyb25vdXMgU2VyaWFsIEludGVyZmFjZSAoU1NJKSBBU29DIERyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGZzbF9zc2lfaW5pdCk7CisKIE1PRFVMRV9BVVRIT1IoIlRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIChTU0kpIEFTb0MgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuaCBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oCmluZGV4IDgzYjQ0ZDcuLmVhZGUwMWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oCkBAIC0yMDgsNiArMjA4LDcgQEAKICAqIHNzaV9waHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBTU0kgcmVnaXN0ZXJzCiAgKiBpcnE6IElSUSBvZiB0aGlzIFNTSQogICogZGV2OiBzdHJ1Y3QgZGV2aWNlLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3lzZnMgc3RhdGlzdGljcyBmaWxlCisgKiBhc3luY2hyb25vdXM6IDA9c3luY2hyb25vdXMgbW9kZSwgMT1hc3luY2hyb25vdXMgbW9kZQogKi8KIHN0cnVjdCBmc2xfc3NpX2luZm8gewogCXVuc2lnbmVkIGludCBpZDsKQEAgLTIxNSw2ICsyMTYsNyBAQAogCWRtYV9hZGRyX3Qgc3NpX3BoeXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IGFzeW5jaHJvbm91czsKIH07CiAKIHN0cnVjdCBzbmRfc29jX2RhaSAqZnNsX3NzaV9jcmVhdGVfZGFpKHN0cnVjdCBmc2xfc3NpX2luZm8gKnNzaV9pbmZvKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jCmluZGV4IDllYjFjZTEuLjNhYTcyOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYwpAQCAtNDY4LDYgKzQ2OCwxNiBAQAogLyoqCiAgKiBwc2NfaTJzX2RhaV90ZW1wbGF0ZTogdGVtcGxhdGUgQ1BVIERpZ2l0YWwgQXVkaW8gSW50ZXJmYWNlCiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHBzY19pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHBzY19pMnNfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gcHNjX2kyc19od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBwc2NfaTJzX2h3X2ZyZWUsCisJLnNodXRkb3duCT0gcHNjX2kyc19zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHBzY19pMnNfdHJpZ2dlciwKKwkuc2V0X3N5c2Nsawk9IHBzY19pMnNfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IHBzY19pMnNfc2V0X2ZtdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWkgcHNjX2kyc19kYWlfdGVtcGxhdGUgPSB7CiAJLnBsYXliYWNrID0gewogCQkuY2hhbm5lbHNfbWluID0gMiwKQEAgLTQ4MSwxNSArNDkxLDcgQEAKIAkJLnJhdGVzID0gUFNDX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBQU0NfSTJTX0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHBzY19pMnNfc3RhcnR1cCwKLQkJLmh3X3BhcmFtcyA9IHBzY19pMnNfaHdfcGFyYW1zLAotCQkuaHdfZnJlZSA9IHBzY19pMnNfaHdfZnJlZSwKLQkJLnNodXRkb3duID0gcHNjX2kyc19zaHV0ZG93biwKLQkJLnRyaWdnZXIgPSBwc2NfaTJzX3RyaWdnZXIsCi0JCS5zZXRfc3lzY2xrID0gcHNjX2kyc19zZXRfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHBzY19pMnNfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmcHNjX2kyc19kYWlfb3BzLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwppbmRleCBhY2YzOWE2Li5lZjY3ZDFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCisrKyBiL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKQEAgLTM1Myw2ICszNTMsMTEgQEAKIAl9CiAJc3NpX2luZm8uaXJxID0gbWFjaGluZV9kYXRhLT5zc2lfaXJxOwogCisJLyogRG8gd2Ugd2FudCB0byB1c2UgYXN5bmNocm9ub3VzIG1vZGU/ICovCisJc3NpX2luZm8uYXN5bmNocm9ub3VzID0KKwkJb2ZfZmluZF9wcm9wZXJ0eShucCwgImZzbCxzc2ktYXN5bmNocm9ub3VzIiwgTlVMTCkgPyAxIDogMDsKKwlpZiAoc3NpX2luZm8uYXN5bmNocm9ub3VzKQorCQlkZXZfaW5mbygmb2ZkZXYtPmRldiwgInVzaW5nIGFzeW5jaHJvbm91cyBtb2RlXG4iKTsKIAogCS8qIE1hcCB0aGUgZ2xvYmFsIHV0aWxpdGllcyByZWdpc3RlcnMuICovCiAJZ3V0c19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjODYxMC1ndXRzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwppbmRleCA0ZjdmMDQwLi42NzU3MzJlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfTjgxMAogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTm9raWEgTjgxMCIKLQlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAKKwlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAgJiYgSTJDCiAJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAogCXNlbGVjdCBPTUFQX01VWAogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCkBAIC0xNyw3ICsxNyw3IEBACiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgotCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfT01BUF9PU0sKKwlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX09NQVBfT1NLICYmIEkyQwogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMwogCWhlbHAKQEAgLTU1LDMgKzU1LDEzIEBACiAJc2VsZWN0IFNORF9TT0NfVFdMNDAzMAogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIE9NQVAzIFBhbmRvcmEuCisKK2NvbmZpZyBTTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DICYmIE1BQ0hfT01BUDNfQkVBR0xFCisJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAorCXNlbGVjdCBTTkRfU09DX1RXTDQwMzAKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZC4KKworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCmluZGV4IDc2ZmVkZDkuLjBjOWU0YWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBzbmQtc29jLW9tYXAyZXZtLW9ianMgOj0gb21hcDJldm0ubwogc25kLXNvYy1zZHAzNDMwLW9ianMgOj0gc2RwMzQzMC5vCiBzbmQtc29jLW9tYXAzcGFuZG9yYS1vYmpzIDo9IG9tYXAzcGFuZG9yYS5vCitzbmQtc29jLW9tYXAzYmVhZ2xlLW9ianMgOj0gb21hcDNiZWFnbGUubwogCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX044MTApICs9IHNuZC1zb2MtbjgxMC5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09TSzU5MTIpICs9IHNuZC1zb2Mtb3NrNTkxMi5vCkBAIC0xOSwzICsyMCw0IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQMkVWTSkgKz0gc25kLXNvYy1vbWFwMmV2bS5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX1NEUDM0MzApICs9IHNuZC1zb2Mtc2RwMzQzMC5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkEpICs9IHNuZC1zb2Mtb21hcDNwYW5kb3JhLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFKSArPSBzbmQtc29jLW9tYXAzYmVhZ2xlLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL244MTAuYyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwppbmRleCAyNTU5M2ZlLi5hNmQxMTc4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMKKysrIGIvc291bmQvc29jL29tYXAvbjgxMC5jCkBAIC00MCw2ICs0MCwxMyBAQAogI2RlZmluZSBOODEwX0hFQURTRVRfQU1QX0dQSU8JMTAKICNkZWZpbmUgTjgxMF9TUEVBS0VSX0FNUF9HUElPCTEwMQogCitlbnVtIHsKKwlOODEwX0pBQ0tfRElTQUJMRUQsCisJTjgxMF9KQUNLX0hQLAorCU44MTBfSkFDS19IUywKKwlOODEwX0pBQ0tfTUlDLAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGtvdXQyOwogc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGtvdXQyX3NyYzsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpmdW5jOTZtX2NsazsKQEAgLTUwLDE1ICs1NywzMiBAQAogCiBzdGF0aWMgdm9pZCBuODEwX2V4dF9jb250cm9sKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlpbnQgaHAgPSAwLCBsaW5lMWwgPSAwOworCisJc3dpdGNoIChuODEwX2phY2tfZnVuYykgeworCWNhc2UgTjgxMF9KQUNLX0hTOgorCQlsaW5lMWwgPSAxOworCWNhc2UgTjgxMF9KQUNLX0hQOgorCQlocCA9IDE7CisJCWJyZWFrOworCWNhc2UgTjgxMF9KQUNLX01JQzoKKwkJbGluZTFsID0gMTsKKwkJYnJlYWs7CisJfQorCiAJaWYgKG44MTBfc3BrX2Z1bmMpCiAJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwogCWVsc2UKIAkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwogCi0JaWYgKG44MTBfamFja19mdW5jKQorCWlmIChocCkKIAkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwogCWVsc2UKIAkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwlpZiAobGluZTFsKQorCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxJTkUxTCIpOworCWVsc2UKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTElORTFMIik7CiAKIAlpZiAobjgxMF9kbWljX2Z1bmMpCiAJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRE1pYyIpOwpAQCAtNzIsNyArOTYsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsCiAJCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIDIsIDIpOwpAQCAtMjI5LDcgKzI1Myw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3BrX2Z1bmN0aW9uW10gPSB7Ik9mZiIsICJPbiJ9Owotc3RhdGljIGNvbnN0IGNoYXIgKmphY2tfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIkhlYWRwaG9uZSJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmphY2tfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIkhlYWRwaG9uZSIsICJIZWFkc2V0IiwgIk1pYyJ9Owogc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0X2Z1bmN0aW9uW10gPSB7IkFEQyIsICJEaWdpdGFsIE1pYyJ9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBuODEwX2VudW1bXSA9IHsKIAlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUoc3BrX2Z1bmN0aW9uKSwgc3BrX2Z1bmN0aW9uKSwKQEAgLTI0OCwyMCArMjcyLDIzIEBACiAKIHN0YXRpYyBpbnQgbjgxMF9haWMzM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAkvKiBOb3QgY29ubmVjdGVkICovCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9fTE9VVCIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUExDT00iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBSQ09NIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzNMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzNSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUxUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTJSIik7CiAKIAkvKiBBZGQgTjgxMCBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFpYzMzX244MTBfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJmFpYzMzX244MTBfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzMzX244MTBfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhaWMzM19uODEwX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgTjgxMCBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgYWljMzNfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCmluZGV4IDA1ZGQ1YWIuLmQ2ODgyYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKQEAgLTQ2MSw2ICs0NjEsMTYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBvbWFwX21jYnNwX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBvbWFwX21jYnNwX2RhaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IG9tYXBfbWNic3BfZGFpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gb21hcF9tY2JzcF9kYWlfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gb21hcF9tY2JzcF9kYWlfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSBvbWFwX21jYnNwX2RhaV9zZXRfY2xrZGl2LAorCS5zZXRfc3lzY2xrCT0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9zeXNjbGssCit9OworCiAjZGVmaW5lIE9NQVBfTUNCU1BfREFJX0JVSUxERVIobGlua19pZCkJCQkJXAogewkJCQkJCQkJXAogCS5uYW1lID0gIm9tYXAtbWNic3AtZGFpLSIjbGlua19pZCwJCQlcCkBAIC00NzcsMTUgKzQ4Nyw3IEBACiAJCS5yYXRlcyA9IE9NQVBfTUNCU1BfUkFURVMsCQkJXAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAkJXAogCX0sCQkJCQkJCVwKLQkub3BzID0gewkJCQkJCVwKLQkJLnN0YXJ0dXAgPSBvbWFwX21jYnNwX2RhaV9zdGFydHVwLAkJXAotCQkuc2h1dGRvd24gPSBvbWFwX21jYnNwX2RhaV9zaHV0ZG93biwJCVwKLQkJLnRyaWdnZXIgPSBvbWFwX21jYnNwX2RhaV90cmlnZ2VyLAkJXAotCQkuaHdfcGFyYW1zID0gb21hcF9tY2JzcF9kYWlfaHdfcGFyYW1zLAkJXAotCQkuc2V0X2ZtdCA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfZm10LAkJXAotCQkuc2V0X2Nsa2RpdiA9IG9tYXBfbWNic3BfZGFpX3NldF9jbGtkaXYsCVwKLQkJLnNldF9zeXNjbGsgPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsaywJXAotCX0sCQkJCQkJCVwKKwkub3BzID0gJm9tYXBfbWNic3BfZGFpX29wcywJCQkJXAogCS5wcml2YXRlX2RhdGEgPSAmbWNic3BfZGF0YVsobGlua19pZCldLmJ1c19pZCwJCVwKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggZGQzYmIyOS4uOGUxNDMxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJCQkgICAgIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBvbWFwX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG9tYXBfcGNtX29wcyA9IHsKIAkub3BlbgkJPSBvbWFwX3BjbV9vcGVuLAogCS5jbG9zZQkJPSBvbWFwX3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IGZjYzJmNWQuLmZlMjgyZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBvbWFwM3BhbmRvcmFfaW5fZGFwbV93aWRnZXRzW10gPSB7Ci0JU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKGludGVybmFsKSIsIE5VTEwpLAogCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoZXh0ZXJuYWwpIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgSW4iLCBOVUxMKSwKIH07CkBAIC0xNTUsMTYgKzE1NSwzMyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgb21hcDNwYW5kb3JhX2luX21hcFtdID0gewotCXsiSU5MIiwgTlVMTCwgIkxpbmUgSW4ifSwKLQl7IklOUiIsIE5VTEwsICJMaW5lIEluIn0sCi0JeyJJTkwiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKLQl7IklOUiIsIE5VTEwsICJNaWMgKGV4dGVybmFsKSJ9LAorCXsiQVVYTCIsIE5VTEwsICJMaW5lIEluIn0sCisJeyJBVVhSIiwgTlVMTCwgIkxpbmUgSW4ifSwKKworCXsiTUFJTk1JQyIsIE5VTEwsICJNaWMgQmlhcyAxIn0sCisJeyJNaWMgQmlhcyAxIiwgTlVMTCwgIk1pYyAoaW50ZXJuYWwpIn0sCisKKwl7IlNVQk1JQyIsIE5VTEwsICJNaWMgQmlhcyAyIn0sCisJeyJNaWMgQmlhcyAyIiwgTlVMTCwgIk1pYyAoZXh0ZXJuYWwpIn0sCiB9OwogCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9vdXRfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJaW50IHJldDsKIAorCS8qIEFsbCBUV0w0MDMwIG91dHB1dCBwaW5zIGFyZSBmbG9hdGluZyAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT1IiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKTsKKwogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMpKTsKIAlpZiAocmV0IDwgMCkKQEAgLTE4MCwxOCArMTk3LDExIEBACiB7CiAJaW50IHJldDsKIAotCS8qIEFsbCBUV0w0MDMwIG91dHB1dCBwaW5zIGFyZSBmbG9hdGluZyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09MIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT1IiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKSwKKwkvKiBOb3QgY29tbm5lY3RlZCAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU01JQyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRNSUMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzEiKTsKIAogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfaW5fZGFwbV93aWRnZXRzKSk7CkBAIC0yNTEsMTAgKzI2MSw5IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghbWFjaGluZV9pc19vbWFwM19wYW5kb3JhKCkpIHsKLQkJcHJfZGVidWcoUFJFRklYICJOb3QgT01BUDMgUGFuZG9yYVxuIik7CisJaWYgKCFtYWNoaW5lX2lzX29tYXAzX3BhbmRvcmEoKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCiAJcHJfaW5mbygiT01BUDMgUGFuZG9yYSBTb0MgaW5pdFxuIik7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgImRhY19wb3dlciIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb3NrNTkxMi5jIGIvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCmluZGV4IGNkNDFhOTQuLmE5NTJhNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKQEAgLTE4NiwxMyArMTg2LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKGNsa19nZXRfdXNlY291bnQodGx2MzIwYWljMjNfbWNsaykgPiAwKSB7Ci0JCS8qIE1DTEsgaXMgYWxyZWFkeSBpbiB1c2UgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIk1DTEsgaW4gdXNlIGF0ICVkIEh6LiBXZSBjaGFuZ2UgaXQgdG8gJWQgSHpcbiIsCi0JCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSyk7Ci0JfQotCiAJLyoKIAkgKiBDb25maWd1cmUgMTIgTUh6IG91dHB1dCBvbiBNQ0xLLgogCSAqLwpAQCAtMjA1LDkgKzE5OCw4IEBACiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJNQ0xLID0gJWQgWyVkXSwgdXNlY291bnQgPSAlZFxuIiwKLQkgICAgICAgKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKSwgQ09ERUNfQ0xPQ0ssCi0JICAgICAgIGNsa19nZXRfdXNlY291bnQodGx2MzIwYWljMjNfbWNsaykpOworCXByaW50ayhLRVJOX0lORk8gIk1DTEsgPSAlZCBbJWRdXG4iLAorCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSyk7CiAKIAlyZXR1cm4gMDsKIGVycjE6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMgYi9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKaW5kZXggZTIyNmZhNy4uMTBmMWM4NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zOCw2ICszOSw4IEBACiAjaW5jbHVkZSAib21hcC1wY20uaCIKICNpbmNsdWRlICIuLi9jb2RlY3MvdHdsNDAzMC5oIgogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX3NkcDM0MzA7CisKIHN0YXRpYyBpbnQgc2RwMzQzMF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC04MSwxMiArODQsMTIxIEBACiAJLmh3X3BhcmFtcyA9IHNkcDM0MzBfaHdfcGFyYW1zLAogfTsKIAorLyogSGVhZHNldCBqYWNrICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoc19qYWNrOworCisvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uIERBUE0gcGlucyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGhzX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbiA9ICJIZWFkc2V0IE1pYyIsCisJCS5tYXNrID0gU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwl9LAorCXsKKwkJLnBpbiA9ICJIZWFkc2V0IFN0ZXJlb3Bob25lIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJfSwKK307CisKKy8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gZ3Bpb3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gaHNfamFja19ncGlvc1tdID0geworCXsKKwkJLmdwaW8gPSAoT01BUF9NQVhfR1BJT19MSU5FUyArIDIpLAorCQkubmFtZSA9ICJoc2RldC1ncGlvIiwKKwkJLnJlcG9ydCA9IFNORF9KQUNLX0hFQURTRVQsCisJCS5kZWJvdW5jZV90aW1lID0gMjAwLAorCX0sCit9OworCisvKiBTRFAzNDMwIG1hY2hpbmUgREFQTSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fTUlDKCJFeHQgTWljIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiRXh0IFNwayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQgTWljIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0hQKCJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBFeHRlcm5hbCBNaWNzOiBNQUlOTUlDLCBTVUJNSUMgd2l0aCBiaWFzKi8KKwl7Ik1BSU5NSUMiLCBOVUxMLCAiTWljIEJpYXMgMSJ9LAorCXsiU1VCTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDIifSwKKwl7Ik1pYyBCaWFzIDEiLCBOVUxMLCAiRXh0IE1pYyJ9LAorCXsiTWljIEJpYXMgMiIsIE5VTEwsICJFeHQgTWljIn0sCisKKwkvKiBFeHRlcm5hbCBTcGVha2VyczogSEZMLCBIRlIgKi8KKwl7IkV4dCBTcGsiLCBOVUxMLCAiSEZMIn0sCisJeyJFeHQgU3BrIiwgTlVMTCwgIkhGUiJ9LAorCisJLyogSGVhZHNldCBNaWM6IEhTTUlDIHdpdGggYmlhcyAqLworCXsiSFNNSUMiLCBOVUxMLCAiSGVhZHNldCBNaWMgQmlhcyJ9LAorCXsiSGVhZHNldCBNaWMgQmlhcyIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCisJLyogSGVhZHNldCBTdGVyZW9waG9uZSAoSGVhZHBob25lKTogSFNPTCwgSFNPUiAqLworCXsiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwsICJIU09MIn0sCisJeyJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCwgIkhTT1IifSwKK307CisKK3N0YXRpYyBpbnQgc2RwMzQzMF90d2w0MDMwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisKKwkvKiBBZGQgU0RQMzQzMCBzcGVjaWZpYyB3aWRnZXRzICovCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0cywKKwkJCQlBUlJBWV9TSVpFKHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IHVwIFNEUDM0MzAgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJLyogU0RQMzQzMCBjb25uZWN0ZWQgcGlucyAqLworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgTWljIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOworCisJLyogVFdMNDAzMCBub3QgY29ubmVjdGVkIHBpbnMgKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQVVYTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJBVVhSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVE1JQyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMSIpOworCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUUiIpOworCisJcmV0ID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uICovCisJcmV0ID0gc25kX3NvY19qYWNrX25ldygmc25kX3NvY19zZHAzNDMwLCAiSGVhZHNldCBKYWNrIiwKKwkJCQlTTkRfSkFDS19IRUFEU0VULCAmaHNfamFjayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfamFja19hZGRfcGlucygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX3BpbnMpLAorCQkJCWhzX2phY2tfcGlucyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfamFja19hZGRfZ3Bpb3MoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19ncGlvcyksCisJCQkJaHNfamFja19ncGlvcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBEaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzZHAzNDMwX2RhaSA9IHsKIAkubmFtZSA9ICJUV0w0MDMwIiwKIAkuc3RyZWFtX25hbWUgPSAiVFdMNDAzMCIsCiAJLmNwdV9kYWkgPSAmb21hcF9tY2JzcF9kYWlbMF0sCiAJLmNvZGVjX2RhaSA9ICZ0d2w0MDMwX2RhaSwKKwkuaW5pdCA9IHNkcDM0MzBfdHdsNDAzMF9pbml0LAogCS5vcHMgPSAmc2RwMzQzMF9vcHMsCiB9OwogCkBAIC0xNDIsNiArMjU0LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHNkcDM0MzBfc29jX2V4aXQodm9pZCkKIHsKKwlzbmRfc29jX2phY2tfZnJlZV9ncGlvcygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX2dwaW9zKSwKKwkJCQloc19qYWNrX2dwaW9zKTsKKwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNkcDM0MzBfc25kX2RldmljZSk7CiB9CiBtb2R1bGVfZXhpdChzZHAzNDMwX3NvY19leGl0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCBmODJlMTA2Li41OTk4YWIzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL0tjb25maWcKKysrIGIvc291bmQvc29jL3B4YS9LY29uZmlnCkBAIC02MSw2ICs2MSwyNCBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBTaGFycAogCSAgWmF1cnVzIFNMLUM2MDAweCBtb2RlbHMgKFRvc2EpLgogCitjb25maWcgU05EX1BYQTJYWF9TT0NfRTc0MAorCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBlNzQwIgorCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9FNzQwCisJc2VsZWN0IFNORF9TT0NfV005NzA1CisJc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorCSAgdG9zaGliYSBlNzQwIFBEQQorCitjb25maWcgU05EX1BYQTJYWF9TT0NfRTc1MAorCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBlNzUwIgorCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9FNzUwCisJc2VsZWN0IFNORF9TT0NfV005NzA1CisJc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorCSAgdG9zaGliYSBlNzUwIFBEQQorCiBjb25maWcgU05EX1BYQTJYWF9TT0NfRTgwMAogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBlODAwIgogCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9FODAwCkBAIC05NywzICsxMTUsMTIgQEAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQogCSAgTWFydmVsbCBaeWxvbml0ZSByZWZlcmVuY2UgcGxhdGZvcm0uCisKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19NSU9BNzAxCisgICAgICAgIHRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTUlPIEE3MDEiCisgICAgICAgIGRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9NSU9BNzAxCisgICAgICAgIHNlbGVjdCBTTkRfUFhBMlhYX1NPQ19BQzk3CisgICAgICAgIHNlbGVjdCBTTkRfU09DX1dNOTcxMworICAgICAgICBoZWxwCisgICAgICAgICAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKyAgICAgICAgICBNSU8gQTcwMS4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUgYi9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCmluZGV4IDA4YTlmMjcuLjhlZDg4MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL3B4YS9NYWtlZmlsZQpAQCAtMTMsMTcgKzEzLDIzIEBACiBzbmQtc29jLWNvcmdpLW9ianMgOj0gY29yZ2kubwogc25kLXNvYy1wb29kbGUtb2JqcyA6PSBwb29kbGUubwogc25kLXNvYy10b3NhLW9ianMgOj0gdG9zYS5vCitzbmQtc29jLWU3NDAtb2JqcyA6PSBlNzQwX3dtOTcwNS5vCitzbmQtc29jLWU3NTAtb2JqcyA6PSBlNzUwX3dtOTcwNS5vCiBzbmQtc29jLWU4MDAtb2JqcyA6PSBlODAwX3dtOTcxMi5vCiBzbmQtc29jLXNwaXR6LW9ianMgOj0gc3BpdHoubwogc25kLXNvYy1lbS14MjcwLW9ianMgOj0gZW0teDI3MC5vCiBzbmQtc29jLXBhbG0yN3gtb2JqcyA6PSBwYWxtMjd4Lm8KIHNuZC1zb2Mtenlsb25pdGUtb2JqcyA6PSB6eWxvbml0ZS5vCitzbmQtc29jLW1pb2E3MDEtb2JqcyA6PSBtaW9hNzAxX3dtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19DT1JHSSkgKz0gc25kLXNvYy1jb3JnaS5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfUE9PRExFKSArPSBzbmQtc29jLXBvb2RsZS5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfVE9TQSkgKz0gc25kLXNvYy10b3NhLm8KK29iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FNzQwKSArPSBzbmQtc29jLWU3NDAubworb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0U3NTApICs9IHNuZC1zb2MtZTc1MC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRTgwMCkgKz0gc25kLXNvYy1lODAwLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19TUElUWikgKz0gc25kLXNvYy1zcGl0ei5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRU1fWDI3MCkgKz0gc25kLXNvYy1lbS14MjcwLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19QQUxNMjdYKSArPSBzbmQtc29jLXBhbG0yN3gubworb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX01JT0E3MDEpICs9IHNuZC1zb2MtbWlvYTcwMS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19aWUxPTklURSkgKz0gc25kLXNvYy16eWxvbml0ZS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKaW5kZXggMWJhMjVhNS4uZDViZTJiMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9jb3JnaS5jCisrKyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CkBAIC0yNSw4ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCkBAIC0xMDAsNyArOTksNyBAQAogc3RhdGljIGludCBjb3JnaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJY29yZ2lfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjc1LDE4ICsyNzQsMTYgQEAKICAqLwogc3RhdGljIGludCBjb3JnaV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX2NvcmdpX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3MzFfY29yZ2lfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9jb3JnaV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODczMV9jb3JnaV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfZGFwbV93aWRnZXRzLApAQCAtMzE3LDE5ICszMTQsNDQgQEAKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKLS8qIGNvcmdpIGF1ZGlvIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBjb3JnaV93bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OwotCiAvKiBjb3JnaSBhdWRpbyBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgY29yZ2lfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19jb3JnaSwKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJmNvcmdpX3dtODczMV9zZXR1cCwKIH07CiAKKy8qCisgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KKyAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKKyAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCisgKi8KK3N0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJaW5mby5hZGRyID0gMHgxYjsKKwlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCisJYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKCFjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvcmdpX3NuZF9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNvcmdpX2luaXQodm9pZCkKQEAgLTM0MCw2ICszNjIsMTAgQEAKIAkgICAgICBtYWNoaW5lX2lzX2h1c2t5KCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAljb3JnaV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFjb3JnaV9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2QyZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogZTc0MC13bTk3MDUuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTc0MAorICoKKyAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBPTkxZLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MDUuaCIKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKworCisjZGVmaW5lIEU3NDBfQVVESU9fT1VUIDEKKyNkZWZpbmUgRTc0MF9BVURJT19JTiAgMgorCitzdGF0aWMgaW50IGU3NDBfYXVkaW9fcG93ZXI7CisKK3N0YXRpYyB2b2lkIGU3NDBfc3luY19hdWRpb19wb3dlcihpbnQgc3RhdHVzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAhc3RhdHVzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfQU1QX09OLCAoc3RhdHVzICYgRTc0MF9BVURJT19PVVQpID8gMSA6IDApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9NSUNfT04sIChzdGF0dXMgJiBFNzQwX0FVRElPX0lOKSA/IDEgOiAwKTsKK30KKworc3RhdGljIGludCBlNzQwX21pY19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZTc0MF9hdWRpb19wb3dlciB8PSBFNzQwX0FVRElPX0lOOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQllNzQwX2F1ZGlvX3Bvd2VyICY9IH5FNzQwX0FVRElPX0lOOworCisJZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGU3NDBfYXVkaW9fcG93ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZTc0MF9vdXRwdXRfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWU3NDBfYXVkaW9fcG93ZXIgfD0gRTc0MF9BVURJT19PVVQ7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWU3NDBfYXVkaW9fcG93ZXIgJj0gfkU3NDBfQVVESU9fT1VUOworCisJZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGU3NDBfYXVkaW9fcG93ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlNzQwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIk91dHB1dCBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzQwX291dHB1dF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJNaWMgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc0MF9taWNfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJPdXRwdXQgQW1wIiwgTlVMTCwgIkxPVVQifSwKKwl7Ik91dHB1dCBBbXAiLCBOVUxMLCAiUk9VVCJ9LAorCXsiT3V0cHV0IEFtcCIsIE5VTEwsICJNT05PT1VUIn0sCisKKwl7IlNwZWFrZXIiLCBOVUxMLCAiT3V0cHV0IEFtcCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiT3V0cHV0IEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyBBbXAifSwKKwl7Ik1pYyBBbXAiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKK307CisKK3N0YXRpYyBpbnQgZTc0MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUE9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQQ0JFRVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDMiIpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTc0MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTc0MF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NDBfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTc0MF9hYzk3X2luaXQsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0FVWF0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU3NDAgPSB7CisJLm5hbWUgPSAiVG9zaGliYSBlNzQwIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBlNzQwX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShlNzQwX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGU3NDBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmZTc0MCwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzA1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmU3NDBfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZTc0MF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19lNzQwKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9NSUNfT04sICAiTWljIGFtcCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzQwX0FNUF9PTiwgIk91dHB1dCBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfbWljX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAiQXVkaW8gcG93ZXIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfb3BfYW1wX2dwaW87CisKKwkvKiBEaXNhYmxlIGF1ZGlvICovCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9NSUNfT04sIDApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9BTVBfT04sIDApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCisJZTc0MF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFlNzQwX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShlNzQwX3NuZF9kZXZpY2UsICZlNzQwX3NuZF9kZXZkYXRhKTsKKwllNzQwX3NuZF9kZXZkYXRhLmRldiA9ICZlNzQwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU3NDBfc25kX2RldmljZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKy8qIEZhaWwgZ3JhY2VmdWxseSAqLworCXBsYXRmb3JtX2RldmljZV9wdXQoZTc0MF9zbmRfZGV2aWNlKTsKK2ZyZWVfYXB3cl9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfV005NzA1X25BVkREMik7CitmcmVlX29wX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfQU1QX09OKTsKK2ZyZWVfbWljX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfTUlDX09OKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlNzQwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihlNzQwX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChlNzQwX2luaXQpOworbW9kdWxlX2V4aXQoZTc0MF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU3NDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNlY2NjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogZTc1MC13bTk3MDUuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTc1MAorICoKKyAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBPTkxZLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MDUuaCIKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKworc3RhdGljIGludCBlNzUwX3Nwa19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU3NTBfaHBfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX0hQX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlNzUwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzUwX2hwX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIlNwZWFrZXIgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc1MF9zcGtfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgQW1wIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSGVhZHBob25lIEFtcCIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXAifSwKKworCXsiU3BlYWtlciBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTcGVha2VyIEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwpIn0sCit9OworCitzdGF0aWMgaW50IGU3NTBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJST1VUIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQQ0JFRVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDMiIpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTc1MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTc1MF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NTBfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTc1MF9hYzk3X2luaXQsCisJCS8qIHVzZSBvcHMgdG8gY2hlY2sgc3RhcnR1cCBzdGF0ZSAqLworCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19BVVhdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlNzUwID0geworCS5uYW1lID0gIlRvc2hpYmEgZTc1MCIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gZTc1MF9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZTc1MF9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBlNzUwX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmU3NTAsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcwNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzUwX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGU3NTBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfZTc1MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NTBfSFBfQU1QX09GRiwgICJIZWFkcGhvbmUgYW1wIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NTBfU1BLX0FNUF9PRkYsICJTcGVha2VyIGFtcCIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9ocF9hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NTBfSFBfQU1QX09GRiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NTBfU1BLX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwllNzUwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWU3NTBfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGU3NTBfc25kX2RldmljZSwgJmU3NTBfc25kX2RldmRhdGEpOworCWU3NTBfc25kX2RldmRhdGEuZGV2ID0gJmU3NTBfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZTc1MF9zbmRfZGV2aWNlKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworLyogRmFpbCBncmFjZWZ1bGx5ICovCisJcGxhdGZvcm1fZGV2aWNlX3B1dChlNzUwX3NuZF9kZXZpY2UpOworZnJlZV9zcGtfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRik7CitmcmVlX2hwX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NTBfSFBfQU1QX09GRik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZTc1MF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTc1MF9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGKTsKKwlncGlvX2ZyZWUoR1BJT19FNzUwX0hQX0FNUF9PRkYpOworfQorCittb2R1bGVfaW5pdChlNzUwX2luaXQpOworbW9kdWxlX2V4aXQoZTc1MF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU3NTAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYyBiL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYwppbmRleCAyZTMzODZkLi5iYzAxOWNkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKKysrIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIGU4MDAtd205NzEyLmMgIC0tICBTb0MgYXVkaW8gZm9yIGU4MDAKICAqCi0gKiBCYXNlZCBvbiB0b3NhLmMKLSAqCiAgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMyw3ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTIxLDIzICsxOSw4NSBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU4MDA7CitzdGF0aWMgaW50IGU4MDBfc3BrX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfU1BLX0FNUF9PTiwgMSk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9TUEtfQU1QX09OLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU4MDBfaHBfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX0hQX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlODAwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsMSkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsMikiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTgwMF9ocF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJTcGVha2VyIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU4MDBfc3BrX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRMIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXAifSwKKworCXsiU3BlYWtlciBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTcGVha2VyIEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwxKSJ9LAorCXsiTUlDMiIsIE5VTEwsICJNaWMgKEludGVybmFsMikifSwKK307CisKK3N0YXRpYyBpbnQgZTgwMF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU4MDBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU4MDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZTgwMF9kYWlbXSA9IHsKLXsKLQkubmFtZSA9ICJBQzk3IEF1eCIsCi0JLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCi0JLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19BVVhdLAotfSwKKwl7CisJCS5uYW1lID0gIkFDOTciLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19ISUZJXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19ISUZJXSwKKwkJLmluaXQgPSBlODAwX2FjOTdfaW5pdCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfQVVYXSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTgwMCA9IHsKQEAgLTYxLDYgKzEyMSwyMiBAQAogCWlmICghbWFjaGluZV9pc19lODAwKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAgIkhlYWRwaG9uZSBhbXAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTgwMF9TUEtfQU1QX09OLCAiU3BlYWtlciBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaHBfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FODAwX0hQX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FODAwX1NQS19BTVBfT04sIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKIAllODAwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWU4MDBfc25kX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02OSw4ICsxNDUsMTUgQEAKIAllODAwX3NuZF9kZXZkYXRhLmRldiA9ICZlODAwX3NuZF9kZXZpY2UtPmRldjsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU4MDBfc25kX2RldmljZSk7CiAKLQlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU4MDBfc25kX2RldmljZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisvKiBGYWlsIGdyYWNlZnVsbHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU4MDBfc25kX2RldmljZSk7CitmcmVlX3Nwa19hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FODAwX1NQS19BTVBfT04pOworZnJlZV9ocF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FODAwX0hQX0FNUF9PRkYpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc4LDYgKzE2MSw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZTgwMF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTgwMF9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1BJT19FODAwX1NQS19BTVBfT04pOworCWdwaW9fZnJlZShHUElPX0U4MDBfSFBfQU1QX09GRik7CiB9CiAKIG1vZHVsZV9pbml0KGU4MDBfaW5pdCk7CkBAIC04Niw0ICsxNzEsNCBAQAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU4MDAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jIGIvc291bmQvc29jL3B4YS9lbS14MjcwLmMKaW5kZXggZmU0YTcyOS4uOTQ5YmU5YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lbS14MjcwLmMKKysrIGIvc291bmQvc29jL3B4YS9lbS14MjcwLmMKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTIuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVkYThiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogSGFuZGxlcyB0aGUgTWl0YWMgbWlvYTcwMSBTb0Mgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJvYmVydCBKYXJ6bWlrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFRoaXMgaXMgYSBsaXR0bGUgc2NoZW1hIG9mIHRoZSBzb3VuZCBpbnRlcmNvbm5lY3Rpb25zIDoKKyAqCisgKiAgICBTYWdlbSBYMjAwICAgICAgICAgICAgICAgICBXb2xmc29uIFdNOTcxMworICogICAgKy0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICBSZWFyIFNwZWFrZXIKKyAqICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAvLSsKKyAqICAgIHwgICAgICAgICstLS0+LS0tLS0+LS0tK01PTk9JTiAgICAgICAgIFNQS0wrLS0tPi0tLS0rLSsgIHwKKyAqICAgIHwgIEdTTSAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8IHwgIHwKKyAqICAgIHwgICAgICAgICstLS0+LS0tLS0+LS0tK1BDQkVFUCAgICAgICAgIFNQS1IrLS0tPi0tLS0rLSsgIHwKKyAqICAgIHwgIENISVAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBcLSsKKyAqICAgIHwgICAgICAgICstLS08LS0tLS08LS0tK01PTk8gICAgICAgICAgICAgICB8CisgKiAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgIEZyb250IFNwZWFrZXIKKyAqICAgICstLS0tLS0tLSsgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAvLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBIUEwrLS0tPi0tLS0rLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8IHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIE9VVDMrLS0tPi0tLS0rLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBcLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgRnJvbnQgTWljcm8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgTUlDMSstLS0tLTwtLStvKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgLS0tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEzLmgiCisKKyNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkJKHgpLCBBUlJBWV9TSVpFKHgpCisKKyNkZWZpbmUgQUM5N19HUElPX1BVTEwJCTB4NTgKKworLyogVXNlIEdQSU84IGZvciByZWFyIHNwZWFrZXIgYW1wbGlmaWVyICovCitzdGF0aWMgaW50IHJlYXJfYW1wX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQoreworCXVuc2lnbmVkIHNob3J0IHJlZzsKKworCWlmIChwb3dlcikgeworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgfCAweDAxMDApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19QVUxMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX1BVTEwsIHJlZyB8ICgxPDwxNSkpOworCX0gZWxzZSB7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19DRkcsIHJlZyAmIH4weDAxMDApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19QVUxMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX1BVTEwsIHJlZyAmIH4oMTw8MTUpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFyX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAorCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5jb2RlYzsKKworCXJldHVybiByZWFyX2FtcF9wb3dlcihjb2RlYywgU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSk7Cit9CisKKy8qIG1pb2E3MDEgbWFjaGluZSBkYXBtIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtaW9hNzAxX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TUEsoIkZyb250IFNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJSZWFyIFNwZWFrZXIiLCByZWFyX2FtcF9ldmVudCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJHU00gTGluZSBPdXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiR1NNIExpbmUgSW4iLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkZyb250IE1pYyIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogQ2FsbCBNaWMgKi8KKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIkZyb250IE1pYyJ9LAorCXsiTUlDMSIsIE5VTEwsICJNaWMgQmlhcyJ9LAorCisJLyogSGVhZHNldCBNaWMgKi8KKwl7IkxJTkVMIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisJeyJMSU5FUiIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCisJLyogR1NNIE1vZHVsZSAqLworCXsiTU9OT0lOIiwgTlVMTCwgIkdTTSBMaW5lIE91dCJ9LAorCXsiUENCRUVQIiwgTlVMTCwgIkdTTSBMaW5lIE91dCJ9LAorCXsiR1NNIExpbmUgSW4iLCBOVUxMLCAiTU9OTyJ9LAorCisJLyogaGVhZHBob25lIGNvbm5lY3RlZCB0byBIUEwsIEhQUiAqLworCXsiSGVhZHNldCIsIE5VTEwsICJIUEwifSwKKwl7IkhlYWRzZXQiLCBOVUxMLCAiSFBSIn0sCisKKwkvKiBmcm9udCBzcGVha2VyIGNvbm5lY3RlZCB0byBIUEwsIE9VVDMgKi8KKwl7IkZyb250IFNwZWFrZXIiLCBOVUxMLCAiSFBMIn0sCisJeyJGcm9udCBTcGVha2VyIiwgTlVMTCwgIk9VVDMifSwKKworCS8qIHJlYXIgc3BlYWtlciBjb25uZWN0ZWQgdG8gU1BLTCwgU1BLUiAqLworCXsiUmVhciBTcGVha2VyIiwgTlVMTCwgIlNQS0wifSwKKwl7IlJlYXIgU3BlYWtlciIsIE5VTEwsICJTUEtSIn0sCit9OworCitzdGF0aWMgaW50IG1pb2E3MDFfd205NzEzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIHNob3J0IHJlZzsKKworCS8qIEFkZCBtaW9hNzAxIHNwZWNpZmljIHdpZGdldHMgKi8KKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBBUlJBWV9BTkRfU0laRShtaW9hNzAxX2RhcG1fd2lkZ2V0cykpOworCisJLyogU2V0IHVwIG1pb2E3MDEgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXBuZWN0cyAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBBUlJBWV9BTkRfU0laRShhdWRpb19tYXApKTsKKworCS8qIFByZXBhcmUgR1BJTzggZm9yIHJlYXIgc3BlYWtlciBhbXBsaWZpZXIgKi8KKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgfCAweDAxMDApOworCisJLyogUHJlcGFyZSBNSUMgaW5wdXQgKi8KKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUM5N18zRF9DT05UUk9MKTsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFDOTdfM0RfQ09OVFJPTCwgcmVnIHwgMHhjMDAwKTsKKworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRnJvbnQgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiUmVhciBTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJGcm9udCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBtaW9hNzAxX29wczsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG1pb2E3MDFfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gbWlvYTcwMV93bTk3MTNfaW5pdCwKKwkJLm9wcyA9ICZtaW9hNzAxX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfQVVYXSwKKwkJLm9wcyA9ICZtaW9hNzAxX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbWlvYTcwMSA9IHsKKwkubmFtZSA9ICJNaW9BNzAxIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBtaW9hNzAxX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShtaW9hNzAxX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG1pb2E3MDFfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmbWlvYTcwMSwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzEzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1pb2E3MDFfc25kX2RldmljZTsKKworc3RhdGljIGludCBtaW9hNzAxX3dtOTcxM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfbWlvYTcwMSgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl93YXJuKCZwZGV2LT5kZXYsICJCZSB3YXJuZWQgdGhhdCBpbmNvcnJlY3QgbWl4ZXJzL211eGVzIHNldHVwIHdpbGwiCisJCSAibGVhZCB0byBvdmVyaGVhdGluZyBhbmQgcG9zc2libGUgZGVzdHJ1Y3Rpb24gb2YgeW91ciBkZXZpY2UuIgorCQkgIkRvIG5vdCB1c2Ugd2l0aG91dCBhIGdvb2Qga25vd2xlZGdlIG9mIG1pbydzIGJvYXJkIGRlc2lnbiFcbiIpOworCisJbWlvYTcwMV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFtaW9hNzAxX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEobWlvYTcwMV9zbmRfZGV2aWNlLCAmbWlvYTcwMV9zbmRfZGV2ZGF0YSk7CisJbWlvYTcwMV9zbmRfZGV2ZGF0YS5kZXYgPSAmbWlvYTcwMV9zbmRfZGV2aWNlLT5kZXY7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG1pb2E3MDFfc25kX2RldmljZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcGxhdGZvcm1fZGV2aWNlX3B1dChtaW9hNzAxX3NuZF9kZXZpY2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1pb2E3MDFfd205NzEzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1pb2E3MDFfc25kX2RldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1pb2E3MDFfd205NzEzX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWlvYTcwMV93bTk3MTNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtaW9hNzAxX3dtOTcxM19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAibWlvYTcwMS13bTk3MTMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1pb2E3MDFfYXNvY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWlvYTcwMV93bTk3MTNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1pb2E3MDFfYXNvY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1pb2E3MDFfd205NzEzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1pb2E3MDFfYXNvY19pbml0KTsKK21vZHVsZV9leGl0KG1pb2E3MDFfYXNvY19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJSb2JlcnQgSmFyem1payAocmphcnptaWtAZnJlZS5mcikiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgV005NzEzIE1JTyBBNzAxIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCmluZGV4IDRhOWNmMzAuLjQ4YTczZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgaW50IHBhbG0yN3hfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXBhbG0yN3hfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMTQ2LDE5ICsxNDYsMTYgQEAKIAogc3RhdGljIGludCBwYWxtMjd4X2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT09VVCIpOwogCiAJLyogYWRkIHBhbG0yN3ggc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYWxtMjd4X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmcGFsbTI3eF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHBhbG0yN3hfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShwYWxtMjd4X2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBhZGQgcGFsbTI3eCBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgcGFsbTI3eF9kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCA2ZTk4MjcxLi5hNTEwNThmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMjYsOCArMjcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvbG9jb21vLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3Bvb2RsZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIApAQCAtNzcsNyArNzYsNyBAQAogc3RhdGljIGludCBwb29kbGVfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXBvb2RsZV9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNDAsMTkgKzIzOSwxNyBAQAogICovCiBzdGF0aWMgaW50IHBvb2RsZV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTUlDSU4iKTsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfcG9vZGxlX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3MzFfcG9vZGxlX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfcG9vZGxlX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzMxX3Bvb2RsZV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHBvb2RsZSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzMxX2RhcG1fd2lkZ2V0cywKQEAgLTI4MywxNyArMjgwLDQyIEBACiAJLm51bV9saW5rcyA9IDEsCiB9OwogCi0vKiBwb29kbGUgYXVkaW8gcHJpdmF0ZSBkYXRhICovCi1zdGF0aWMgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIHBvb2RsZV93bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OworLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQogCiAvKiBwb29kbGUgYXVkaW8gc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIHBvb2RsZV9zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX3Bvb2RsZSwKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJnBvb2RsZV93bTg3MzFfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG9vZGxlX3NuZF9kZXZpY2U7CkBAIC0zMDUsNiArMzI3LDEwIEBACiAJaWYgKCFtYWNoaW5lX2lzX3Bvb2RsZSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAlsb2NvbW9fZ3Bpb19zZXRfZGlyKCZwb29kbGVfbG9jb21vX2RldmljZS5kZXYsCiAJCVBPT0RMRV9MT0NPTU9fR1BJT19BTVBfT04sIDApOwogCS8qIHNob3VsZCB3ZSBtdXRlIEhQIGF0IHN0YXJ0dXAgLSBidXJuaW5nIHBvd2VyID8qLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCA3M2NiNmI0Li43YWNkM2ZlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtMSw0ICsxLDMgQEAKLSNkZWZpbmUgREVCVUcKIC8qCiAgKiBweGEtc3NwLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgogICoKQEAgLTIxLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTI5LDcgKzMwLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNzcC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3NzcC5oPgpAQCAtMjIxLDkgKzIyMiw5IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkgewotCQlyZXQgPSBzc3BfaW5pdCgmcHJpdi0+ZGV2LCBjcHVfZGFpLT5pZCArIDEsIFNTUF9OT19JUlEpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJCXByaXYtPmRldi5wb3J0ID0gY3B1X2RhaS0+aWQgKyAxOworCQlwcml2LT5kZXYuaXJxID0gTk9fSVJROworCQljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAJCXNzcF9kaXNhYmxlKCZwcml2LT5kZXYpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMjM4LDcgKzIzOSw3IEBACiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkgewogCQlzc3BfZGlzYWJsZSgmcHJpdi0+ZGV2KTsKLQkJc3NwX2V4aXQoJnByaXYtPmRldik7CisJCWNsa19kaXNhYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAJfQogfQogCkBAIC0yOTgsNyArMjk5LDcgQEAKIAlpbnQgdmFsOwogCiAJdTMyIHNzY3IwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NDUjApICYKLQkJfihTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQURDKTsKKwkJfihTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQUNTKTsKIAogCWRldl9kYmcoJnNzcC0+cGRldi0+ZGV2LAogCQkicHhhX3NzcF9zZXRfZGFpX3N5c2NsayBpZDogJWQsIGNsa19pZCAlZCwgZnJlcSAlZFxuIiwKQEAgLTMyNiw3ICszMjcsNyBAQAogCWNhc2UgUFhBX1NTUF9DTEtfQVVESU86CiAJCXByaXYtPnN5c2NsayA9IDA7CiAJCXNzcF9zZXRfc2NyKCZwcml2LT5kZXYsIDEpOwotCQlzc2NyMCB8PSBTU0NSMF9BREM7CisJCXNzY3IwIHw9IFNTQ1IwX0FDUzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01MjAsOSArNTIxLDIwIEBACiAJdTMyIHNzY3IxOwogCXUzMiBzc3BzcDsKIAorCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIGF0IGFsbCAqLworCWlmIChwcml2LT5kYWlfZm10ID09IGZtdCkKKwkJcmV0dXJuIDA7CisKKwkvKiB3ZSBjYW4gb25seSBjaGFuZ2UgdGhlIHNldHRpbmdzIGlmIHRoZSBwb3J0IGlzIG5vdCBpbiB1c2UgKi8KKwlpZiAoc3NwX3JlYWRfcmVnKHNzcCwgU1NDUjApICYgU1NDUjBfU1NFKSB7CisJCWRldl9lcnIoJnNzcC0+cGRldi0+ZGV2LAorCQkJImNhbid0IGNoYW5nZSBoYXJkd2FyZSBkYWkgZm9ybWF0OiBzdHJlYW0gaXMgaW4gdXNlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIHJlc2V0IHBvcnQgc2V0dGluZ3MgKi8KIAlzc2NyMCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmCi0JCShTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQURDKTsKKwkJKFNTQ1IwX0VDUyB8ICBTU0NSMF9OQ1MgfCBTU0NSMF9NT0QgfCBTU0NSMF9BQ1MpOwogCXNzY3IxID0gU1NDUjFfUnhUcmVzaCg4KSB8IFNTQ1IxX1R4VHJlc2goNyk7CiAJc3Nwc3AgPSAwOwogCkBAIC01NDUsMTggKzU1NywxOCBAQAogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQlzc2NyMCB8PSBTU0NSMF9NT0QgfCBTU0NSMF9QU1A7CisJCXNzY3IwIHw9IFNTQ1IwX1BTUDsKIAkJc3NjcjEgfD0gU1NDUjFfUldPVCB8IFNTQ1IxX1RSQUlMOwogCisJCS8qIFNlZSBod19wYXJhbXMoKSAqLwogCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9GU1JUOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVA7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKLQkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QIHwgU1NQU1BfRlNSVDsKIAkJCWJyZWFrOwogCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgotCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVA7CisJCQlzc3BzcCB8PSBTU1BTUF9TQ01PREUoMyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQyLDM0ICs2NTQsNjUgQEAKIAkJCXNzY3IwIHw9IFNTQ1IwX0ZQQ0tFOwogI2VuZGlmCiAJCXNzY3IwIHw9IFNTQ1IwX0RhdGFTaXplKDE2KTsKLQkJaWYgKHBhcmFtc19jaGFubmVscyhwYXJhbXMpID4gMSkKLQkJCXNzY3IwIHw9IFNTQ1IwX0VEU1M7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CiAJCXNzY3IwIHw9IChTU0NSMF9FRFNTIHwgU1NDUjBfRGF0YVNpemUoOCkpOwotCQkvKiB3ZSBtdXN0IGJlIGluIG5ldHdvcmsgbW9kZSAoMiBzbG90cykgZm9yIDI0IGJpdCBzdGVyZW8gKi8KIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKIAkJc3NjcjAgfD0gKFNTQ1IwX0VEU1MgfCBTU0NSMF9EYXRhU2l6ZSgxNikpOwotCQkvKiB3ZSBtdXN0IGJlIGluIG5ldHdvcmsgbW9kZSAoMiBzbG90cykgZm9yIDMyIGJpdCBzdGVyZW8gKi8KIAkJYnJlYWs7CiAJfQogCXNzcF93cml0ZV9yZWcoc3NwLCBTU0NSMCwgc3NjcjApOwogCiAJc3dpdGNoIChwcml2LT5kYWlfZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJLyogQ2xlYXJlZCB3aGVuIHRoZSBEQUkgZm9ybWF0IGlzIHNldCAqLwotCQlzc3BzcCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTUFNQKSB8IFNTUFNQX1NGUk1XRFRIKHdpZHRoKTsKKwkgICAgICAgc3Nwc3AgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU1BTUCk7CisKKwkJaWYgKCgoc3NjcjAgJiBTU0NSMF9TQ1IpID09IFNTQ1IwX1NlckNsa0Rpdig0KSkgJiYKKwkJICAgICAod2lkdGggPT0gMTYpKSB7CisJCQkvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBiaXRjbGsgaXMgNjRmcworCQkJKiBhbmQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCAyKjMyIGJpdHMgb2YgYXVkaW8KKwkJCSogc2FtcGxlcy4KKwkJCSoKKwkJCSogVGhlIFNTUCB2YWx1ZXMgdXNlZCBmb3IgdGhhdCBhcmUgYWxsIGZvdW5kIG91dCBieQorCQkJKiB0cnlpbmcgYW5kIGZhaWxpbmcgYSBsb3Q7IHNvbWUgb2YgdGhlIHJlZ2lzdGVycworCQkJKiBuZWVkZWQgZm9yIHRoYXQgbW9kZSBhcmUgb25seSBhdmFpbGFibGUgb24gUFhBM3h4LgorCQkJKi8KKworI2lmZGVmIENPTkZJR19QWEEzeHgKKwkJCWlmICghY3B1X2lzX3B4YTN4eCgpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNV0RUSCh3aWR0aCAqIDIpOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTURMWSh3aWR0aCAqIDQpOworCQkJc3Nwc3AgfD0gU1NQU1BfRURNWVNUT1AoMyk7CisJCQlzc3BzcCB8PSBTU1BTUF9ETVlTVE9QKDMpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RSVCgxKTsKKyNlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogVGhlIGZyYW1lIHdpZHRoIGlzIHRoZSB3aWR0aCB0aGUgTFJDTEsgaXMKKwkJCSAqIGFzc2VydGVkIGZvcjsgdGhlIGRlbGF5IGlzIGV4cHJlc3NlZCBpbgorCQkJICogaGFsZiBjeWNsZSB1bml0cy4gIFdlIG5lZWQgdGhlIGV4dHJhIGN5Y2xlCisJCQkgKiBiZWNhdXNlIHRoZSBkYXRhIHN0YXJ0cyBjbG9ja2luZyBvdXQgb25lIEJDTEsKKwkJCSAqIGFmdGVyIExSQ0xLIGNoYW5nZXMgcG9sYXJpdHkuCisJCQkgKi8KKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1XRFRIKHdpZHRoICsgMSk7CisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNRExZKCh3aWR0aCArIDEpICogMik7CisJCQlzc3BzcCB8PSBTU1BTUF9ETVlTVFJUKDEpOworCQl9CisKIAkJc3NwX3dyaXRlX3JlZyhzc3AsIFNTUFNQLCBzc3BzcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCS8qIFdlIGFsd2F5cyB1c2UgYSBuZXR3b3JrIG1vZGUgc28gd2UgYWx3YXlzIHJlcXVpcmUgVERNIHNsb3RzCisJLyogV2hlbiB3ZSB1c2UgYSBuZXR3b3JrIG1vZGUsIHdlIGFsd2F5cyByZXF1aXJlIFRETSBzbG90cwogCSAqIC0gY29tcGxhaW4gbG91ZGx5IGFuZCBmYWlsIGlmIHRoZXkndmUgbm90IGJlZW4gc2V0IHVwIHlldC4KIAkgKi8KLQlpZiAoIShzc3BfcmVhZF9yZWcoc3NwLCBTU1RTQSkgJiAweGYpKSB7CisJaWYgKChzc2NyMCAmIFNTQ1IwX01PRCkgJiYgIShzc3BfcmVhZF9yZWcoc3NwLCBTU1RTQSkgJiAweGYpKSB7CiAJCWRldl9lcnIoJnNzcC0+cGRldi0+ZGV2LCAiTm8gVERNIHRpbWVzbG90IGNvbmZpZ3VyZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03NTEsNyArNzk0LDcgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+ZGV2LnNzcCA9IHNzcF9yZXF1ZXN0KGRhaS0+aWQsICJTb0MgYXVkaW8iKTsKKwlwcml2LT5kZXYuc3NwID0gc3NwX3JlcXVlc3QoZGFpLT5pZCArIDEsICJTb0MgYXVkaW8iKTsKIAlpZiAocHJpdi0+ZGV2LnNzcCA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3ByaXY7CkBAIC03ODIsNiArODI1LDE5IEBACiAJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfAlcCiAJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9zc3BfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHB4YV9zc3Bfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBweGFfc3NwX3NodXRkb3duLAorCS50cmlnZ2VyCT0gcHhhX3NzcF90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBweGFfc3NwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCisJLnNldF9jbGtkaXYJPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKKwkuc2V0X2ZtdAk9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCisJLnNldF90ZG1fc2xvdAk9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKKwkuc2V0X3RyaXN0YXRlCT0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHB4YV9zc3BfZGFpW10gPSB7CiAJewogCQkubmFtZSA9ICJweGEyeHgtc3NwMSIsCkBAIC04MDIsMTggKzg1OCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIAl7CS5uYW1lID0gInB4YTJ4eC1zc3AyIiwKIAkJLmlkID0gMSwKQEAgLTgzMywxOCArODc4LDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDMiLApAQCAtODY1LDE4ICs4OTksNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiAJewogCQkubmFtZSA9ICJweGEyeHgtc3NwNCIsCkBAIC04OTcsMTggKzkyMCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChweGFfc3NwX2RhaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKaW5kZXggODEyYzJiNC4uZDljOTRkNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYwpAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPHNvdW5kL3B4YTJ4eC1saWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWFjOTcuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCkBAIC0xMDYsMTMgKzEwNiwxMyBAQAogc3RhdGljIGludCBweGEyeHhfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlyZXR1cm4gcHhhMnh4X2FjOTdfaHdfcHJvYmUocGRldik7CisJcmV0dXJuIHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHRvX3BsYXRmb3JtX2RldmljZShkYWktPmRldikpOwogfQogCiBzdGF0aWMgdm9pZCBweGEyeHhfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlweGEyeHhfYWM5N19od19yZW1vdmUocGRldik7CisJcHhhMnh4X2FjOTdfaHdfcmVtb3ZlKHRvX3BsYXRmb3JtX2RldmljZShkYWktPmRldikpOwogfQogCiBzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTE2NCw2ICsxNjQsMTggQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2FjOTdfaGlmaV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBweGEyeHhfYWM5N19od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfYWM5N19hdXhfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2FjOTdfaHdfYXV4X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9hYzk3X21pY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBweGEyeHhfYWM5N19od19taWNfcGFyYW1zLAorfTsKKwogLyoKICAqIFRoZXJlIGlzIG9ubHkgMSBwaHlzaWNhbCBBQzk3IGludGVyZmFjZSBmb3IgcHhhMnh4LCBidXQgaXQKICAqIGhhcyBleHRyYSBmaWZvJ3MgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYXV4IERBQ3MgYW5kIEFEQ3MuCkBAIC0xODksOCArMjAxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFBYQTJYWF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9hYzk3X2h3X3BhcmFtcyx9LAorCS5vcHMgPSAmcHhhX2FjOTdfaGlmaV9kYWlfb3BzLAogfSwKIHsKIAkubmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLApAQCAtMjA4LDggKzIxOSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBQWEEyWFhfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBweGEyeHhfYWM5N19od19hdXhfcGFyYW1zLH0sCisJLm9wcyA9ICZweGFfYWM5N19hdXhfZGFpX29wcywKIH0sCiB7CiAJLm5hbWUgPSAicHhhMnh4LWFjOTctbWljIiwKQEAgLTIyMSwyMyArMjMxLDUyIEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBQWEEyWFhfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBweGEyeHhfYWM5N19od19taWNfcGFyYW1zLH0sCisJLm9wcyA9ICZweGFfYWM5N19taWNfZGFpX29wcywKIH0sCiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfYWM5N19kYWkpOwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKIAorc3RhdGljIGludCBfX2RldmluaXQgcHhhMnh4X2FjOTdfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpOyBpKyspCisJCXB4YV9hYzk3X2RhaVtpXS5kZXYgPSAmcGRldi0+ZGV2OworCisJLyogUHVudCBtb3N0IG9mIHRoZSBpbml0IHRvIHRoZSBTb0MgcHJvYmU7IHdlIG1heSBuZWVkIHRoZSBtYWNoaW5lCisJICogZHJpdmVyIHRvIGRvIGludGVyZXN0aW5nIHRoaW5ncyB3aXRoIHRoZSBjbG9ja2luZyB0byBnZXQgdXMgdXAKKwkgKiBhbmQgcnVubmluZy4KKwkgKi8KKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcHhhMnh4X2FjOTdfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHB4YTJ4eF9hYzk3X2Rldl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTJ4eF9hYzk3X2Rldl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtYWM5NyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBweGFfYWM5N19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHB4YV9hYzk3X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHhhX2FjOTdfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHB4YV9hYzk3X2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCmluZGV4IDUxNzk5MWYuLjJmNGI2ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCkBAIC0yNCwyMSArMjQsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtaTJzLmgiCiAKLXN0cnVjdCBweGEyeHhfZ3BpbyB7Ci0JdTMyIHN5czsKLQl1MzIJcng7Ci0JdTMyIHR4OwotCXUzMiBjbGs7Ci0JdTMyIGZybTsKLX07Ci0KIC8qCiAgKiBJMlMgQ29udHJvbGxlciBSZWdpc3RlciBhbmQgQml0IERlZmluaXRpb25zCiAgKi8KQEAgLTEwNiwyMSArOTcsNiBAQAogCQkJCSAgRENNRF9CVVJTVDMyIHwgRENNRF9XSURUSDQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF9ncGlvIGdwaW9fYnVzW10gPSB7Ci0JeyAvKiBJMlMgU29DIFNsYXZlICovCi0JCS5yeCA9IEdQSU8yOV9TREFUQV9JTl9JMlNfTUQsCi0JCS50eCA9IEdQSU8zMF9TREFUQV9PVVRfSTJTX01ELAotCQkuY2xrID0gR1BJTzI4X0JJVENMS19JTl9JMlNfTUQsCi0JCS5mcm0gPSBHUElPMzFfU1lOQ19JMlNfTUQsCi0JfSwKLQl7IC8qIEkyUyBTb0MgTWFzdGVyICovCi0JCS5yeCA9IEdQSU8yOV9TREFUQV9JTl9JMlNfTUQsCi0JCS50eCA9IEdQSU8zMF9TREFUQV9PVVRfSTJTX01ELAotCQkuY2xrID0gR1BJTzI4X0JJVENMS19PVVRfSTJTX01ELAotCQkuZnJtID0gR1BJTzMxX1NZTkNfSTJTX01ELAotCX0sCi19OwotCiBzdGF0aWMgaW50IHB4YTJ4eF9pMnNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewpAQCAtMTgxLDkgKzE1Nyw2IEBACiAJaWYgKGNsa19pZCAhPSBQWEEyWFhfSTJTX1NZU0NMSykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocHhhX2kycy5tYXN0ZXIgJiYgZGlyID09IFNORF9TT0NfQ0xPQ0tfT1VUKQotCQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5zeXMpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NCwxMCArMTY3LDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5yeCk7Ci0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0udHgpOwotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLmZybSk7Ci0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0uY2xrKTsKIAlCVUdfT04oSVNfRVJSKGNsa19pMnMpKTsKIAljbGtfZW5hYmxlKGNsa19pMnMpOwogCXB4YV9pMnNfd2FpdCgpOwpAQCAtMzM1LDYgKzMwNCwxNSBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHB4YTJ4eF9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBweGEyeHhfaTJzX3NodXRkb3duLAorCS50cmlnZ2VyCT0gcHhhMnh4X2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBweGEyeHhfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IHB4YTJ4eF9pMnNfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSBweGEyeHhfaTJzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHB4YV9pMnNfZGFpID0gewogCS5uYW1lID0gInB4YTJ4eC1pMnMiLAogCS5pZCA9IDAsCkBAIC0zNTAsMTQgKzMyOCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBQWEEyWFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBweGEyeHhfaTJzX3N0YXJ0dXAsCi0JCS5zaHV0ZG93biA9IHB4YTJ4eF9pMnNfc2h1dGRvd24sCi0JCS50cmlnZ2VyID0gcHhhMnh4X2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gcHhhMnh4X2kyc19zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSBweGEyeHhfaTJzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZweGFfaTJzX2RhaV9vcHMsCiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfaTJzX2RhaSk7CkBAIC0zOTgsMTEgKzM2OSw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9pMnNfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfcHhhMjd4KCkpCi0JCWdwaW9fYnVzWzFdLnN5cyA9IEdQSU8xMTNfSTJTX1NZU0NMS19NRDsKLQllbHNlCi0JCWdwaW9fYnVzWzFdLnN5cyA9IEdQSU8zMl9TWVNDTEtfSTJTX01EOwotCiAJY2xrX2kycyA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2kyc19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9zcGl0ei5jIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCmluZGV4IGEzYjllNmIuLmM0Y2QyYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvc3BpdHouYworKysgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc3BpdHouaD4KICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzUwLmgiCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgpAQCAtMTA5LDcgKzEwNyw3IEBACiBzdGF0aWMgaW50IHNwaXR6X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlzcGl0el9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNzgsNyArMjc2LDcgQEAKICAqLwogc3RhdGljIGludCBzcGl0el93bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJLyogTkMgY29kZWMgcGlucyAqLwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQxIik7CkBAIC0yOTAsMTIgKzI4OCwxMCBAQAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PMSIpOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUwX3NwaXR6X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3NTBfc3BpdHpfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1MF9zcGl0el9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODc1MF9zcGl0el9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90b3NhLmMgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwppbmRleCBjNzcxOTRmLi5kYmJkM2U5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYworKysgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwpAQCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL3Rvc2EuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTIuaCIKQEAgLTgyLDcgKzgwLDcgQEAKIHN0YXRpYyBpbnQgdG9zYV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJdG9zYV9leHRfY29udHJvbChjb2RlYyk7CkBAIC0xODgsMTggKzE4NiwxNiBAQAogCiBzdGF0aWMgaW50IHRvc2FfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PT1VUIik7CiAKIAkvKiBhZGQgdG9zYSBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvc2FfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ0b3NhX2NvbnRyb2xzW2ldLGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHRvc2FfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh0b3NhX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBhZGQgdG9zYSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgdG9zYV9kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKaW5kZXggZjhlOWVjZC4uOWEzODZiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMjYsNiArMjcsMTcgQEAKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgogI2luY2x1ZGUgInB4YS1zc3AuaCIKIAorLyoKKyAqIFRoZXJlIGlzIGEgcGh5c2ljYWwgc3dpdGNoIFNXMTUgb24gdGhlIGJvYXJkIHdoaWNoIGNoYW5nZXMgdGhlIE1DTEsKKyAqIGZvciB0aGUgV005NzEzIGJldHdlZW4gdGhlIHN0YW5kYXJkIEFDOTcgbWFzdGVyIGNsb2NrIGFuZCB0aGUKKyAqIG91dHB1dCBvZiB0aGUgQ0xLX1BPVVQgc2lnbmFsIGZyb20gdGhlIFBYQS4KKyAqLworc3RhdGljIGludCBjbGtfcG91dDsKK21vZHVsZV9wYXJhbShjbGtfcG91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xrX3BvdXQsICJVc2UgQ0xLX1BPVVQgYXMgV005NzEzIE1DTEsgKFNXMTUgb24gYm9hcmQpLiIpOworCitzdGF0aWMgc3RydWN0IGNsayAqcG91dDsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgenlsb25pdGU7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB6eWxvbml0ZV9kYXBtX3dpZGdldHNbXSA9IHsKQEAgLTYxLDEwICs3Myw4IEBACiAKIHN0YXRpYyBpbnQgenlsb25pdGVfd205NzEzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCS8qIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgdXNlIG9mIHRoZSBBQzk3IGNsb2NrIGhlcmUuICBJZgotCSAqIENMS19QT1VUIGlzIHNlbGVjdGVkIGJ5IFNXMTUgdGhlbiB0aGUgY2xvY2sgQVBJIHdpbGwgbmVlZAotCSAqIHRvIGJlIHVzZWQgdG8gcmVxdWVzdCBhbmQgZW5hYmxlIGl0IGhlcmUuCi0JICovCisJaWYgKGNsa19wb3V0KQorCQlzbmRfc29jX2RhaV9zZXRfcGxsKCZjb2RlYy0+ZGFpWzBdLCAwLCBjbGtfZ2V0X3JhdGUocG91dCksIDApOwogCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgenlsb25pdGVfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh6eWxvbml0ZV9kYXBtX3dpZGdldHMpKTsKQEAgLTg2LDI3ICs5Niw1MSBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAl1bnNpZ25lZCBpbnQgcGxsX291dCA9IDA7Ci0JdW5zaWduZWQgaW50IGFjZHMgPSAwOwogCXVuc2lnbmVkIGludCB3bTk3MTNfZGl2ID0gMDsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJaW50IHdpZHRoID0gc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKIAotCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCS8qIE9ubHkgc3VwcG9ydCByYXRpb3MgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgbmVhdGx5IGZyb20gdGhlIEFDOTcKKwkgKiBiYXNlZCBtYXN0ZXIgY2xvY2sgLSBpbiBwYXJ0aWN1bGFyLCB0aGlzIGV4Y2x1ZGVzIDQ0LjFrSHouCisJICogSW4gbW9zdCBhcHBsaWNhdGlvbnMgdGhlIHZvaWNlIERBQyB3aWxsIGJlIHVzZWQgZm9yIHRlbGVwaG9ueQorCSAqIGRhdGEgc28gbXVsdGlwbGVzIG9mIDhrSHogd2lsbCBiZSB0aGUgY29tbW9uIGNhc2UuCisJICovCisJc3dpdGNoIChyYXRlKSB7CiAJY2FzZSA4MDAwOgogCQl3bTk3MTNfZGl2ID0gMTI7Ci0JCXBsbF9vdXQgPSAyMDQ4MDAwOwogCQlicmVhazsKIAljYXNlIDE2MDAwOgogCQl3bTk3MTNfZGl2ID0gNjsKLQkJcGxsX291dCA9IDQwOTYwMDA7CiAJCWJyZWFrOwogCWNhc2UgNDgwMDA6Ci0JZGVmYXVsdDoKIAkJd205NzEzX2RpdiA9IDI7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYWNkcyA9IDE7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIERvbid0IHN1cHBvcnQgT1NTIGVtdWxhdGlvbiAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBBZGQgMSB0byB0aGUgd2lkdGggZm9yIHRoZSBsZWFkaW5nIGNsb2NrIGN5Y2xlICovCisJcGxsX291dCA9IHJhdGUgKiAod2lkdGggKyAxKSAqIDg7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFBYQV9TU1BfQ0xLX0FVRElPLCAwLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY3B1X2RhaSwgMCwgMCwgcGxsX291dCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoY2xrX3BvdXQpCisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY29kZWNfZGFpLCBXTTk3MTNfUENNQ0xLX1BMTF9ESVYsCisJCQkJCSAgICAgV005NzEzX1BDTURJVih3bTk3MTNfZGl2KSk7CisJZWxzZQorCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV005NzEzX1BDTUNMS19ESVYsCisJCQkJCSAgICAgV005NzEzX1BDTURJVih3bTk3MTNfZGl2KSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKIAkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKIAlpZiAocmV0IDwgMCkKQEAgLTExNywzMiArMTUxLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLAotCQkJCSAgICAgICBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKLQkJCQkgICAgICAgcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjcHVfZGFpLCAwLCAwLCBwbGxfb3V0KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUFhBX1NTUF9BVURJT19ESVZfQUNEUywgYWNkcyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFBYQV9TU1BfQ0xLX0FVRElPLCAwLCAxKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIE5vdGUgdGhhdCBpZiB0aGUgUExMIGlzIGluIHVzZSB0aGUgV005NzEzX1BDTUNMS19QTExfRElWIG5lZWRzCi0JICogdG8gYmUgc2V0IGluc3RlYWQuCi0JICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNOTcxM19QQ01DTEtfRElWLAotCQkJCSAgICAgV005NzEzX1BDTURJVih3bTk3MTNfZGl2KSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTczLDggKzE4MSw3MiBAQAogfSwKIH07CiAKK3N0YXRpYyBpbnQgenlsb25pdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKGNsa19wb3V0KSB7CisJCXBvdXQgPSBjbGtfZ2V0KE5VTEwsICJDTEtfUE9VVCIpOworCQlpZiAoSVNfRVJSKHBvdXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gb2J0YWluIENMS19QT1VUOiAlbGRcbiIsCisJCQkJUFRSX0VSUihwb3V0KSk7CisJCQlyZXR1cm4gUFRSX0VSUihwb3V0KTsKKwkJfQorCisJCXJldCA9IGNsa19lbmFibGUocG91dCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJsZSBDTEtfUE9VVDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWNsa19wdXQocG91dCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiTUNMSyBlbmFibGVkIGF0ICVsdUh6XG4iLAorCQkJY2xrX2dldF9yYXRlKHBvdXQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eWxvbml0ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpZiAoY2xrX3BvdXQpIHsKKwkJY2xrX2Rpc2FibGUocG91dCk7CisJCWNsa19wdXQocG91dCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgenlsb25pdGVfc3VzcGVuZF9wb3N0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpZiAoY2xrX3BvdXQpCisJCWNsa19kaXNhYmxlKHBvdXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgenlsb25pdGVfcmVzdW1lX3ByZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCisJaWYgKGNsa19wb3V0KSB7CisJCXJldCA9IGNsa19lbmFibGUocG91dCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBlbmFibGUgQ0xLX1BPVVQ6ICVkXG4iLAorCQkJCXJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgenlsb25pdGUgPSB7CiAJLm5hbWUgPSAiWnlsb25pdGUiLAorCS5wcm9iZSA9ICZ6eWxvbml0ZV9wcm9iZSwKKwkucmVtb3ZlID0gJnp5bG9uaXRlX3JlbW92ZSwKKwkuc3VzcGVuZF9wb3N0ID0gJnp5bG9uaXRlX3N1c3BlbmRfcG9zdCwKKwkucmVzdW1lX3ByZSA9ICZ6eWxvbml0ZV9yZXN1bWVfcHJlLAogCS5wbGF0Zm9ybSA9ICZweGEyeHhfc29jX3BsYXRmb3JtLAogCS5kYWlfbGluayA9IHp5bG9uaXRlX2RhaSwKIAkubnVtX2xpbmtzID0gQVJSQVlfU0laRSh6eWxvbml0ZV9kYWkpLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKaW5kZXggZmNkMDNhYy4uMmYzYTIxZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCkBAIC0xLDE5ICsxLDMxIEBACiBjb25maWcgU05EX1MzQzI0WFhfU09DCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgdGhlIFNhbXN1bmcgUzNDMjRYWCBjaGlwcyIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIHRoZSBTYW1zdW5nIFMzQ1hYWFggY2hpcHMiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCi0JICB0aGUgUzNDMjRYWCBBQzk3LCBJMlMgb3IgU1NQIGludGVyZmFjZS4gWW91IHdpbGwgYWxzbyBuZWVkCi0JICB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KKwkgIHRoZSBTM0MyNFhYIGFuZCBTM0M2NFhYIEFDOTcsIEkyUyBvciBTU1AgaW50ZXJmYWNlLiBZb3Ugd2lsbAorCSAgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgogCiBjb25maWcgU05EX1MzQzI0WFhfU09DX0kyUwogCXRyaXN0YXRlCisJc2VsZWN0IFMzQzI0MTBfRE1BCisKK2NvbmZpZyBTTkRfUzNDX0kyU1YyX1NPQworCXRyaXN0YXRlCiAKIGNvbmZpZyBTTkRfUzNDMjQxMl9TT0NfSTJTCiAJdHJpc3RhdGUKKwlzZWxlY3QgU05EX1MzQ19JMlNWMl9TT0MKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKworY29uZmlnIFNORF9TM0M2NFhYX1NPQ19JMlMKKwl0cmlzdGF0ZQorCXNlbGVjdCBTTkRfUzNDX0kyU1YyX1NPQworCXNlbGVjdCBTM0M2NFhYX0RNQQogCiBjb25maWcgU05EX1MzQzI0NDNfU09DX0FDOTcKIAl0cmlzdGF0ZQorCXNlbGVjdCBTM0MyNDEwX0RNQQogCXNlbGVjdCBBQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCiAJCkBAIC0yNiw2ICszOCwxNCBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBzbWRrMjQ0MAogCSAgd2l0aCB0aGUgV004NzUzLgogCitjb25maWcgU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwCisJdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgSml2ZSIKKwlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX0pJVkUKKwlzZWxlY3QgU05EX1NPQ19XTTg3NTAKKwlzZWxlY3QgU05EX1MzQzI0MTJfU09DX0kyUworCWhlbHAKKwkgIFNhdCBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIEppdmUuCisKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsyNDQzIC0gV005NzEwIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzI0NDMKQEAgLTQ4LDQgKzY4LDUgQEAKIAl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IFVEQTEzNFggd2lyZWQgdG8gYSBTM0MyNFhYIgogICAgICAgIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQwogICAgICAgIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX0kyUworCXNlbGVjdCBTTkRfU09DX0wzCiAgICAgICAgCXNlbGVjdCBTTkRfU09DX1VEQTEzNFgKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlIGIvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUKaW5kZXggOTZiM2YzZi4uMDdhOTNhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUKQEAgLTIsMTkgKzIsMjUgQEAKIHNuZC1zb2MtczNjMjR4eC1vYmpzIDo9IHMzYzI0eHgtcGNtLm8KIHNuZC1zb2MtczNjMjR4eC1pMnMtb2JqcyA6PSBzM2MyNHh4LWkycy5vCiBzbmQtc29jLXMzYzI0MTItaTJzLW9ianMgOj0gczNjMjQxMi1pMnMubworc25kLXNvYy1zM2M2NHh4LWkycy1vYmpzIDo9IHMzYzY0eHgtaTJzLm8KIHNuZC1zb2MtczNjMjQ0My1hYzk3LW9ianMgOj0gczNjMjQ0My1hYzk3Lm8KK3NuZC1zb2MtczNjLWkycy12Mi1vYmpzIDo9IHMzYy1pMnMtdjIubwogCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DKSArPSBzbmQtc29jLXMzYzI0eHgubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjR4eC1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNDQzX1NPQ19BQzk3KSArPSBzbmQtc29jLXMzYzI0NDMtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0MTJfU09DX0kyUykgKz0gc25kLXNvYy1zM2MyNDEyLWkycy5vCitvYmotJChDT05GSUdfU05EX1MzQzY0WFhfU09DX0kyUykgKz0gc25kLXNvYy1zM2M2NHh4LWkycy5vCitvYmotJChDT05GSUdfU05EX1MzQ19JMlNWMl9TT0MpICs9IHNuZC1zb2MtczNjLWkycy12Mi5vCiAKICMgUzNDMjRYWCBNYWNoaW5lIFN1cHBvcnQKK3NuZC1zb2Mtaml2ZS13bTg3NTAtb2JqcyA6PSBqaXZlX3dtODc1MC5vCiBzbmQtc29jLW5lbzE5NzMtd204NzUzLW9ianMgOj0gbmVvMTk3M193bTg3NTMubwogc25kLXNvYy1zbWRrMjQ0My13bTk3MTAtb2JqcyA6PSBzbWRrMjQ0M193bTk3MTAubwogc25kLXNvYy1sbjI0NDBzYmMtYWxjNjUwLW9ianMgOj0gbG4yNDQwc2JjX2FsYzY1MC5vCiBzbmQtc29jLXMzYzI0eHgtdWRhMTM0eC1vYmpzIDo9IHMzYzI0eHhfdWRhMTM0eC5vCiAKK29iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTApICs9IHNuZC1zb2Mtaml2ZS13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLXdtODc1My5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NNREsyNDQzX1dNOTcxMCkgKz0gc25kLXNvYy1zbWRrMjQ0My13bTk3MTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19MTjI0NDBTQkNfQUxDNjUwKSArPSBzbmQtc29jLWxuMjQ0MHNiYy1hbGM2NTAubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L2ppdmVfd204NzUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwNjM3OQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L2ppdmVfd204NzUwLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L2ppdmVfd204NzUwLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNywyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIEJhc2VkIG9uIHNvdW5kL3NvYy9weGEvc3BpdHouYworICoJQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCUNvcHlyaWdodCAyMDA1IE9wZW5lZGhhbmQgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKKyNpbmNsdWRlICJzM2MyNDEyLWkycy5oIgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1MC5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7ICJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJMT1VUMSIgfSwKKwl7ICJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJST1VUMSIgfSwKKwl7ICJJbnRlcm5hbCBTcGVha2VyIiwgTlVMTCwgIkxPVVQyIiB9LAorCXsgIkludGVybmFsIFNwZWFrZXIiLCBOVUxMLCAiUk9VVDIiIH0sCisJeyAiTElOUFVUMSIsIE5VTEwsICJMaW5lIElucHV0IiB9LAorCXsgIlJJTlBVVDEiLCBOVUxMLCAiTGluZSBJbnB1dCIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg3NTBfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUgSmFjayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIkludGVybmFsIFNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiTGluZSBJbiIsIE5VTEwpLAorfTsKKworc3RhdGljIGludCBqaXZlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3QgczNjX2kyc3YyX3JhdGVfY2FsYyBkaXY7CisJdW5zaWduZWQgaW50IGNsayA9IDA7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDgwMDA6CisJY2FzZSAxNjAwMDoKKwljYXNlIDQ4MDAwOgorCWNhc2UgOTYwMDA6CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCWNhc2UgMjIwNTA6CisJY2FzZSA0NDEwMDoKKwkJY2xrID0gMTEyODk2MDA7CisJCWJyZWFrOworCX0KKworCXMzY19pMnN2Ml9jYWxjX3JhdGUoJmRpdiwgTlVMTCwgcGFyYW1zX3JhdGUocGFyYW1zKSwKKwkJCSAgICBzM2MyNDEyX2dldF9paXNjbGsoKSk7CisKKwkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgZm9yIERBQyBhbmQgQURDICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODc1MF9TWVNDTEssIGNsaywKKwkJCQkgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0MyNDEyX0RJVl9SQ0xLLCBkaXYuZnNfZGl2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUzNDMjQxMl9ESVZfUFJFU0NBTEVSLAorCQkJCSAgICAgZGl2LmNsa19kaXYgLSAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGppdmVfb3BzID0geworCS5od19wYXJhbXMJPSBqaXZlX2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBpbnQgaml2ZV93bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGVycjsKKworCS8qIFRoZXNlIGVuZHBvaW50cyBhcmUgbm90IGJlaW5nIHVzZWQuICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5QVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PIik7CisKKwkvKiBBZGQgaml2ZSBzcGVjaWZpYyB3aWRnZXRzICovCisJZXJyID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzUwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRSh3bTg3NTBfZGFwbV93aWRnZXRzKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWRkIHdpZGdldHMgKCVkKVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBqaXZlX2RhaSA9IHsKKwkubmFtZQkJPSAid204NzUwIiwKKwkuc3RyZWFtX25hbWUJPSAiV004NzUwIiwKKwkuY3B1X2RhaQk9ICZzM2MyNDEyX2kyc19kYWksCisJLmNvZGVjX2RhaQk9ICZ3bTg3NTBfZGFpLAorCS5pbml0CQk9IGppdmVfd204NzUwX2luaXQsCisJLm9wcwkJPSAmaml2ZV9vcHMsCit9OworCisvKiBqaXZlIGF1ZGlvIG1hY2hpbmUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfbWFjaGluZSBzbmRfc29jX21hY2hpbmVfaml2ZSA9IHsKKwkubmFtZQkJPSAiSml2ZSIsCisJLmRhaV9saW5rCT0gJmppdmVfZGFpLAorCS5udW1fbGlua3MJPSAxLAorfTsKKworLyogaml2ZSBhdWRpbyBwcml2YXRlIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3Qgd204NzUwX3NldHVwX2RhdGEgaml2ZV93bTg3NTBfc2V0dXAgPSB7Cit9OworCisvKiBqaXZlIGF1ZGlvIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBqaXZlX3NuZF9kZXZkYXRhID0geworCS5tYWNoaW5lCT0gJnNuZF9zb2NfbWFjaGluZV9qaXZlLAorCS5wbGF0Zm9ybQk9ICZzM2MyNHh4X3NvY19wbGF0Zm9ybSwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfd204NzUwX3NwaSwKKwkuY29kZWNfZGF0YQk9ICZqaXZlX3dtODc1MF9zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpqaXZlX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGppdmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfaml2ZSgpKQorCQlyZXR1cm4gMDsKKworCXByaW50aygiSklWRSBXTTg3NTAgQXVkaW8gc3VwcG9ydFxuIik7CisKKwlqaXZlX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWppdmVfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShqaXZlX3NuZF9kZXZpY2UsICZqaXZlX3NuZF9kZXZkYXRhKTsKKwlqaXZlX3NuZF9kZXZkYXRhLmRldiA9ICZqaXZlX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGppdmVfc25kX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGppdmVfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaml2ZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaml2ZV9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoaml2ZV9pbml0KTsKK21vZHVsZV9leGl0KGppdmVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgSml2ZSBBdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jIGIvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYwppbmRleCA0NWJiMTJlLi4yODlmYWRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKQEAgLTI5LDI1ICsyOSwxNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtYWNoL3NwaS1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1My5oIgogI2luY2x1ZGUgImxtNDg1Ny5oIgogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKIAotLyogRGVidWdnaW5nIHN0dWZmICovCi0jZGVmaW5lIFMzQzI0WFhfU09DX05FTzE5NzNfV004NzUzX0RFQlVHIDAKLSNpZiBTM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1M19ERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgInMzYzI0eHgtc29jLW5lbzE5NzMtd204NzUzOiAiIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCiAvKiBkZWZpbmUgdGhlIHNjZW5hcmlvcyAqLwogI2RlZmluZSBORU9fQVVESU9fT0ZGCQkJMAogI2RlZmluZSBORU9fR1NNX0NBTExfQVVESU9fSEFORFNFVAkxCkBAIC03Miw3ICs2NCw3IEBACiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBpaXNfY2xrcmF0ZTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNfY2xrcmF0ZSA9IHMzYzI0eHhfaTJzX2dldF9jbG9ja3JhdGUoKTsKIApAQCAtMTU4LDcgKzE1MCw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KIAlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwxLCAwLCAwKTsKQEAgLTE4MSw3ICsxNzMsNyBAQAogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWlzX2Nsa3JhdGU7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzX2Nsa3JhdGUgPSBzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKCk7CiAKQEAgLTIyNCw3ICsyMTYsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogZGlzYWJsZSB0aGUgUExMICovCiAJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMiwgMCwgMCk7CkBAIC0yNDYsNyArMjM4LDcgQEAKIAogc3RhdGljIGludCBzZXRfc2NlbmFyaW9fZW5kcG9pbnRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHNjZW5hcmlvKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKG5lbzE5NzNfc2NlbmFyaW8pIHsKIAljYXNlIE5FT19BVURJT19PRkY6CkBAIC0zMzAsNyArMzIyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKG5lbzE5NzNfc2NlbmFyaW8gPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCiAJCXJldHVybiAwOwpAQCAtMzQ0LDcgKzMzNiw3IEBACiAKIHN0YXRpYyB2b2lkIGxtNDg1N193cml0ZV9yZWdzKHZvaWQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChpMmNfbWFzdGVyX3NlbmQoaTJjLCBsbTQ4NTdfcmVncywgNCkgIT0gNCkKIAkJcHJpbnRrKEtFUk5fRVJSICJsbTQ4NTc6IGkyYyB3cml0ZSBmYWlsZWRcbiIpOwpAQCAtMzU3LDcgKzM0OSw3IEBACiAJaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDgpICYgMHgwRjsKIAlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweEZGOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKGxtNDg1N19yZWdzW3JlZ10gPj4gc2hpZnQpICYgbWFzazsKIAlyZXR1cm4gMDsKQEAgLTM4NSw3ICszNzcsNyBAQAogewogCXU4IHZhbHVlID0gbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdICYgMHgwRjsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAodmFsdWUpCiAJCXZhbHVlIC09IDU7CkBAIC0zOTksNyArMzkxLDcgQEAKIHsKIAl1OCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICh2YWx1ZSkKIAkJdmFsdWUgKz0gNTsKQEAgLTUwNiw5ICs0OTgsOSBAQAogICovCiBzdGF0aWMgaW50IG5lbzE5NzNfd204NzUzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBzZXQgdXAgTkMgY29kZWMgcGlucyAqLwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMT1VUMiIpOwpAQCAtNTI2LDEzICs1MTgsMTAgQEAKIAlzZXRfc2NlbmFyaW9fZW5kcG9pbnRzKGNvZGVjLCBORU9fQVVESU9fT0ZGKTsKIAogCS8qIGFkZCBuZW8xOTczIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX25lbzE5NzNfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ3bTg3NTNfbmVvMTk3M19jb250cm9sc1tpXSwKLQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTNfbmVvMTk3M19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKDg3NTNfbmVvMTk3M19jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogc2V0IHVwIG5lbzE5NzMgc3BlY2lmaWMgYXVkaW8gcm91dGVzICovCiAJZXJyID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGRhcG1fcm91dGVzLApAQCAtNTg1LDIxICs1NzQsMTUgQEAKIAkubnVtX2xpbmtzID0gQVJSQVlfU0laRShuZW8xOTczX2RhaSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHdtODc1M19zZXR1cF9kYXRhIG5lbzE5NzNfd204NzUzX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFhLAotfTsKLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBuZW8xOTczX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJm5lbzE5NzMsCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODc1MywKLQkuY29kZWNfZGF0YSA9ICZuZW8xOTczX3dtODc1M19zZXR1cCwKIH07CiAKIHN0YXRpYyBpbnQgbG00ODU3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaTJjID0gY2xpZW50OwogCkBAIC02MDksNyArNTkyLDcgQEAKIAogc3RhdGljIGludCBsbTQ4NTdfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpMmMgPSBOVUxMOwogCkBAIC02MjAsNyArNjAzLDcgQEAKIAogc3RhdGljIGludCBsbTQ4NTdfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWRldl9kYmcoJmRldi0+ZGV2LCAibG00ODU3X3N1c3BlbmRcbiIpOwogCWxtNDg1N19zdGF0ZSA9IGxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSAmIDB4ZjsKQEAgLTYzMyw3ICs2MTYsNyBAQAogCiBzdGF0aWMgaW50IGxtNDg1N19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmRldikKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGxtNDg1N19zdGF0ZSkgewogCQlsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gfD0gKGxtNDg1N19zdGF0ZSAmIDB4MGYpOwpAQCAtNjQ0LDcgKzYyNyw3IEBACiAKIHN0YXRpYyB2b2lkIGxtNDg1N19zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2KQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlkZXZfZGJnKCZkZXYtPmRldiwgImxtNDg1N19zaHV0ZG93blxuIik7CiAJbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdICY9IDB4ZjA7CkBAIC02NzUsNyArNjU4LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICghbWFjaGluZV9pc19uZW8xOTczX2d0YTAxKCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwpAQCAtNzA2LDcgKzY4OSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZW8xOTczX2V4aXQodm9pZCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaTJjX2RlbF9kcml2ZXIoJmxtNDg1N19pMmNfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihuZW8xOTczX3NuZF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NWE0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMKQEAgLTAsMCArMSw2MzggQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMmMtdjIuYworICoKKyAqIEFMU0EgU29jIEF1ZGlvIExheWVyIC0gSTJTIGNvcmUgZm9yIG5ld2VyIFNhbXN1bmcgU29Dcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCUdyYWVtZSBHcmVnb3J5IGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20KKyAqCWxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDcsIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisKKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKworI2luY2x1ZGUgInMzYy1pMnMtdjIuaCIKKworI2RlZmluZSBTM0MyNDEyX0kyU19ERUJVR19DT04gMAorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqdG9faW5mbyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJcmV0dXJuIGNwdV9kYWktPnByaXZhdGVfZGF0YTsKK30KKworI2RlZmluZSBiaXRfc2V0KHYsIGIpICgoKHYpICYgKGIpKSA/IDEgOiAwKQorCisjaWYgUzNDMjQxMl9JMlNfREVCVUdfQ09OCitzdGF0aWMgdm9pZCBkYmdfc2hvd2Nvbihjb25zdCBjaGFyICpmbiwgdTMyIGNvbikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExSST0lZCwgVFhGRU1QVD0lZCwgUlhGRU1QVD0lZCwgVFhGRlVMTD0lZCwgUlhGRlVMTD0lZFxuIiwgZm4sCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9MUklOREVYKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRklGT19FTVBUWSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRU1QVFkpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0ZVTEwpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0ZVTEwpKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogUEFVU0U6IFRYRE1BPSVkLCBSWERNQT0lZCwgVFhDSD0lZCwgUlhDSD0lZFxuIiwKKwkgICAgICAgZm4sCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0UpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFDVElWRTogVFhETUE9JWQsIFJYRE1BPSVkLCBJSVM9JWRcbiIsIGZuLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19zaG93Y29uKGNvbnN0IGNoYXIgKmZuLCB1MzIgY29uKQoreworfQorI2VuZGlmCisKKworLyogVHVybiBvbiBvciBvZmYgdGhlIHRyYW5zbWlzc2lvbiBwYXRoLiAqLwordm9pZCBzM2MyNDEyX3NuZF90eGN0cmwoc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMsIGludCBvbikKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBpMnMtPnJlZ3M7CisJdTMyIGZpYywgY29uLCBtb2Q7CisKKwlwcl9kZWJ1ZygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgb24pOworCisJZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKKwljb24gPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNDT04pOworCW1vZCA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwlwcl9kZWJ1ZygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKKworCWlmIChvbikgeworCQljb24gfD0gUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFIHwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKKwkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRTsKKwkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFOworCisJCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgorCQkJLyogZG8gbm90aGluZywgd2UgYXJlIGluIHRoZSByaWdodCBtb2RlICovCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgorCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7CisJCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoaTJzLT5kZXYsICJUWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKKwkJfQorCisJCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJfSBlbHNlIHsKKwkJLyogTm90ZSwgd2UgZG8gbm90IGhhdmUgYW55IGluZGljYXRpb24gdGhhdCB0aGUgRklGTyBwcm9ibGVtcworCQkgKiB0aGEgdGhlIFMzQzI0MTAvMjQ0MCBoYWQgYXBwbHkgaGVyZSwgc28gd2Ugc2hvdWxkIGJlIGFibGUKKwkJICogdG8gZGlzYWJsZSB0aGUgRE1BIGFuZCBUWCB3aXRob3V0IHJlc2V0dGluZyB0aGUgRklGT1MuCisJCSAqLworCisJCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0U7CisJCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRTsKKwkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkU7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWTsKKwkJCWJyZWFrOworCisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGkycy0+ZGV2LCAiVFhESVM6IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOworCQl9CisKKwkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwl9CisKKwlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCWRiZ19zaG93Y29uKF9fZnVuY19fLCBjb24pOworCXByX2RlYnVnKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQxMl9zbmRfdHhjdHJsKTsKKwordm9pZCBzM2MyNDEyX3NuZF9yeGN0cmwoc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMsIGludCBvbikKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBpMnMtPnJlZ3M7CisJdTMyIGZpYywgY29uLCBtb2Q7CisKKwlwcl9kZWJ1ZygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgb24pOworCisJZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKKwljb24gPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNDT04pOworCW1vZCA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwlwcl9kZWJ1ZygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKKworCWlmIChvbikgeworCQljb24gfD0gUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFIHwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKKwkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRTsKKwkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFOworCisJCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgorCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgorCQkJLyogZG8gbm90aGluZywgd2UgYXJlIGluIHRoZSByaWdodCBtb2RlICovCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOgorCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7CisJCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoaTJzLT5kZXYsICJSWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKKwkJfQorCisJCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJfSBlbHNlIHsKKwkJLyogU2VlIHR4Y3RybCBub3RlcyBvbiBGSUZPcy4gKi8KKworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRTsKKwkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRTsKKwkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFOworCisJCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6CisJCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCWJyZWFrOworCisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgorCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7CisJCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihpMnMtPmRldiwgIlJYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOworCQl9CisKKwkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwl9CisKKwlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCXByX2RlYnVnKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQxMl9zbmRfcnhjdHJsKTsKKworLyoKKyAqIFdhaXQgZm9yIHRoZSBMUiBzaWduYWwgdG8gYWxsb3cgc3luY2hyb25pc2F0aW9uIHRvIHRoZSBML1IgY2xvY2sKKyAqIGZyb20gdGhlIGNvZGVjLiBNYXkgb25seSBiZSBuZWVkZWQgZm9yIHNsYXZlIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgczNjMjQxMl9zbmRfbHJzeW5jKHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzKQoreworCXUzMiBpaXNjb247CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCisJd2hpbGUgKDEpIHsKKwkJaWlzY29uID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNDT04pOworCQlpZiAoaWlzY29uICYgUzNDMjQxMl9JSVNDT05fTFJJTkRFWCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lb3V0IDwgamlmZmllcykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dFxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBTM0MyNDEyIEkyUyBEQUkgZm9ybWF0CisgKi8KK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkgICAgICAgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oY3B1X2RhaSk7CisJdTMyIGlpc21vZDsKKworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMykKKyNkZWZpbmUgSUlTTU9EX01BU1RFUl9NQVNLIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLCisjZGVmaW5lIElJU01PRF9TTEFWRSBTM0MyNDEyX0lJU01PRF9TTEFWRQorI2RlZmluZSBJSVNNT0RfTUFTVEVSIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9JTlRFUk5BTAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX1MzQzY0WFgpCisvKiBGcm9tIFJldjEuMSBkYXRhc2hlZXQsIHdlIGhhdmUgdHdvIG1hc3RlciBhbmQgdHdvIHNsYXZlIG1vZGVzOgorICogSU1TWzExOjEwXToKKyAqCTAwID0gbWFzdGVyIG1vZGUsIGZlZCBmcm9tIFBDTEsKKyAqCTAxID0gbWFzdGVyIG1vZGUsIGZlZCBmcm9tIENMS0FVRElPCisgKgkxMCA9IHNsYXZlIG1vZGUsIHVzaW5nIFBDTEsKKyAqCTExID0gc2xhdmUgbW9kZSwgdXNpbmcgSTJTQ0xLCisgKi8KKyNkZWZpbmUgSUlTTU9EX01BU1RFUl9NQVNLICgxIDw8IDExKQorI2RlZmluZSBJSVNNT0RfU0xBVkUgKDEgPDwgMTEpCisjZGVmaW5lIElJU01PRF9NQVNURVIgKDB4MCkKKyNlbmRpZgorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJaTJzLT5tYXN0ZXIgPSAwOworCQlpaXNtb2QgJj0gfklJU01PRF9NQVNURVJfTUFTSzsKKwkJaWlzbW9kIHw9IElJU01PRF9TTEFWRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlpMnMtPm1hc3RlciA9IDE7CisJCWlpc21vZCAmPSB+SUlTTU9EX01BU1RFUl9NQVNLOworCQlpaXNtb2QgfD0gSUlTTU9EX01BU1RFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoInVua253b24gbWFzdGVyL3NsYXZlIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfU0RGX01BU0s7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX01TQjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfTFNCOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9JSVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJVbmtub3duIGRhdGEgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKGlpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCXByX2RlYnVnKCJod19wYXJhbXMgdzogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpzb2NkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWkgPSBydGQtPmRhaTsKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oZGFpLT5jcHVfZGFpKTsKKwl1MzIgaWlzbW9kOworCisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlkYWktPmNwdV9kYWktPmRtYV9kYXRhID0gaTJzLT5kbWFfcGxheWJhY2s7CisJZWxzZQorCQlkYWktPmNwdV9kYWktPmRtYV9kYXRhID0gaTJzLT5kbWFfY2FwdHVyZTsKKworCS8qIFdvcmtpbmcgY29waWVzIG9mIHJlZ2lzdGVyICovCisJaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCXByX2RlYnVnKCIlczogcjogSUlTTU9EOiAleFxuIiwgX19mdW5jX18sIGlpc21vZCk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKKwkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EXzhCSVQ7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfOEJJVDsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKGlpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCXByX2RlYnVnKCIlczogdzogSUlTTU9EOiAleFxuIiwgX19mdW5jX18sIGlpc21vZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKHJ0ZC0+ZGFpLT5jcHVfZGFpKTsKKwlpbnQgY2FwdHVyZSA9IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCXVuc2lnbmVkIGxvbmcgaXJxczsKKwlpbnQgcmV0ID0gMDsKKworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCS8qIE9uIHN0YXJ0LCBlbnN1cmUgdGhhdCB0aGUgRklGT3MgYXJlIGNsZWFyZWQgYW5kIHJlc2V0LiAqLworCisJCXdyaXRlbChjYXB0dXJlID8gUzNDMjQxMl9JSVNGSUNfUlhGTFVTSCA6IFMzQzI0MTJfSUlTRklDX1RYRkxVU0gsCisJCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisKKwkJLyogY2xlYXIgYWdhaW4sIGp1c3QgaW4gY2FzZSAqLworCQl3cml0ZWwoMHgwLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmICghaTJzLT5tYXN0ZXIpIHsKKwkJCXJldCA9IHMzYzI0MTJfc25kX2xyc3luYyhpMnMpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGV4aXRfZXJyOworCQl9CisKKwkJbG9jYWxfaXJxX3NhdmUoaXJxcyk7CisKKwkJaWYgKGNhcHR1cmUpCisJCQlzM2MyNDEyX3NuZF9yeGN0cmwoaTJzLCAxKTsKKwkJZWxzZQorCQkJczNjMjQxMl9zbmRfdHhjdHJsKGkycywgMSk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxcyk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWxvY2FsX2lycV9zYXZlKGlycXMpOworCisJCWlmIChjYXB0dXJlKQorCQkJczNjMjQxMl9zbmRfcnhjdHJsKGkycywgMCk7CisJCWVsc2UKKwkJCXMzYzI0MTJfc25kX3R4Y3RybChpMnMsIDApOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGlycXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKK2V4aXRfZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTZXQgUzNDMjQxMiBDbG9jayBkaXZpZGVycworICovCitzdGF0aWMgaW50IHMzYzI0MTJfaTJzX3NldF9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGRpdl9pZCwgaW50IGRpdikKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oY3B1X2RhaSk7CisJdTMyIHJlZzsKKworCXByX2RlYnVnKCIlcyglcCwgJWQsICVkKVxuIiwgX19mdW5jX18sIGNwdV9kYWksIGRpdl9pZCwgZGl2KTsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBTM0NfSTJTVjJfRElWX0JDTEs6CisJCXJlZyA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJcmVnICY9IH5TM0MyNDEyX0lJU01PRF9CQ0xLX01BU0s7CisJCXdyaXRlbChyZWcgfCBkaXYsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCQlwcl9kZWJ1ZygiJXM6IE1PRD0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpKTsKKwkJYnJlYWs7CisKKwljYXNlIFMzQ19JMlNWMl9ESVZfUkNMSzoKKwkJaWYgKGRpdiA+IDMpIHsKKwkJCS8qIGNvbnZlcnQgdmFsdWUgdG8gYml0IGZpZWxkICovCisKKwkJCXN3aXRjaCAoZGl2KSB7CisJCQljYXNlIDI1NjoKKwkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzI1NkZTOworCQkJCWJyZWFrOworCisJCQljYXNlIDM4NDoKKwkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzM4NEZTOworCQkJCWJyZWFrOworCisJCQljYXNlIDUxMjoKKwkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzUxMkZTOworCQkJCWJyZWFrOworCisJCQljYXNlIDc2ODoKKwkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzc2OEZTOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJcmVnID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQlyZWcgJj0gflMzQzI0MTJfSUlTTU9EX1JDTEtfTUFTSzsKKwkJd3JpdGVsKHJlZyB8IGRpdiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQlwcl9kZWJ1ZygiJXM6IE1PRD0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpKTsKKwkJYnJlYWs7CisKKwljYXNlIFMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSOgorCQlpZiAoZGl2ID49IDApIHsKKwkJCXdyaXRlbCgoZGl2IDw8IDgpIHwgUzNDMjQxMl9JSVNQU1JfUFNSRU4sCisJCQkgICAgICAgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOworCQl9IGVsc2UgeworCQkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOworCQl9CisJCXByX2RlYnVnKCIlczogUFNSPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUikpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBkZWZhdWx0IHRhYmxlIG9mIGFsbCBhdmFpYWxhYmxlIHJvb3QgZnMgZGl2aXNvcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWlzX2ZzX3RhYltdID0geyAyNTYsIDUxMiwgMzg0LCA3NjggfTsKKworaW50IHMzYzI0MTJfaWlzX2NhbGNfcmF0ZShzdHJ1Y3QgczNjX2kyc3YyX3JhdGVfY2FsYyAqaW5mbywKKwkJCSAgdW5zaWduZWQgaW50ICpmc3RhYiwKKwkJCSAgdW5zaWduZWQgaW50IHJhdGUsIHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCBmc2NsazsKKwl1bnNpZ25lZCBpbnQgYWN0dWFsOworCXVuc2lnbmVkIGludCBmczsKKwl1bnNpZ25lZCBpbnQgZnNkaXY7CisJc2lnbmVkIGludCBkZXZpYXRpb24gPSAwOworCXVuc2lnbmVkIGludCBiZXN0X2ZzID0gMDsKKwl1bnNpZ25lZCBpbnQgYmVzdF9kaXYgPSAwOworCXVuc2lnbmVkIGludCBiZXN0X3JhdGUgPSAwOworCXVuc2lnbmVkIGludCBiZXN0X2RldmlhdGlvbiA9IElOVF9NQVg7CisKKwlpZiAoZnN0YWIgPT0gTlVMTCkKKwkJZnN0YWIgPSBpaXNfZnNfdGFiOworCisJZm9yIChmcyA9IDA7IGZzIDwgQVJSQVlfU0laRShpaXNfZnNfdGFiKTsgZnMrKykgeworCQlmc2RpdiA9IGlpc19mc190YWJbZnNdOworCisJCWZzY2xrID0gY2xrcmF0ZSAvIGZzZGl2OworCQlkaXYgPSBmc2NsayAvIHJhdGU7CisKKwkJaWYgKChmc2NsayAlIHJhdGUpID4gKHJhdGUgLyAyKSkKKwkJCWRpdisrOworCisJCWlmIChkaXYgPD0gMSkKKwkJCWNvbnRpbnVlOworCisJCWFjdHVhbCA9IGNsa3JhdGUgLyAoZnNkaXYgKiBkaXYpOworCQlkZXZpYXRpb24gPSBhY3R1YWwgLSByYXRlOworCisJCXByaW50ayhLRVJOX0RFQlVHICIlZGZzOiBkaXYgJWQgPT4gcmVzdWx0ICVkLCBkZXZpYXRpb24gJWRcbiIsCisJCSAgICAgICBmc2RpdiwgZGl2LCBhY3R1YWwsIGRldmlhdGlvbik7CisKKwkJZGV2aWF0aW9uID0gYWJzKGRldmlhdGlvbik7CisKKwkJaWYgKGRldmlhdGlvbiA8IGJlc3RfZGV2aWF0aW9uKSB7CisJCQliZXN0X2ZzID0gZnNkaXY7CisJCQliZXN0X2RpdiA9IGRpdjsKKwkJCWJlc3RfcmF0ZSA9IGFjdHVhbDsKKwkJCWJlc3RfZGV2aWF0aW9uID0gZGV2aWF0aW9uOworCQl9CisKKwkJaWYgKGRldmlhdGlvbiA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgImJlc3Q6IGZzPSVkLCBkaXY9JWQsIHJhdGU9JWRcbiIsCisJICAgICAgIGJlc3RfZnMsIGJlc3RfZGl2LCBiZXN0X3JhdGUpOworCisJaW5mby0+ZnNfZGl2ID0gYmVzdF9mczsKKwlpbmZvLT5jbGtfZGl2ID0gYmVzdF9kaXY7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfaWlzX2NhbGNfcmF0ZSk7CisKK2ludCBzM2NfaTJzdjJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkgICAgc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMsCisJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKworCWkycy0+ZGV2ID0gZGV2OworCisJLyogcmVjb3JkIG91ciBpMnMgc3RydWN0dXJlIGZvciBsYXRlciB1c2UgaW4gdGhlIGNhbGxiYWNrcyAqLworCWRhaS0+cHJpdmF0ZV9kYXRhID0gaTJzOworCisJaTJzLT5yZWdzID0gaW9yZW1hcChiYXNlLCAweDEwMCk7CisJaWYgKGkycy0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGlvcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpMnMtPmlpc19wY2xrID0gY2xrX2dldChkZXYsICJpaXMiKTsKKwlpZiAoaTJzLT5paXNfcGNsayA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBpaXNfY2xvY2tcbiIpOworCQlpb3VubWFwKGkycy0+cmVncyk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWNsa19lbmFibGUoaTJzLT5paXNfcGNsayk7CisKKwlzM2MyNDEyX3NuZF90eGN0cmwoaTJzLCAwKTsKKwlzM2MyNDEyX3NuZF9yeGN0cmwoaTJzLCAwKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzM2NfaTJzdjJfcHJvYmUpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzYzI0MTJfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSB0b19pbmZvKGRhaSk7CisJdTMyIGlpc21vZDsKKworCWlmIChkYWktPmFjdGl2ZSkgeworCQlpMnMtPnN1c3BlbmRfaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQlpMnMtPnN1c3BlbmRfaWlzY29uID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNDT04pOworCQlpMnMtPnN1c3BlbmRfaWlzcHNyID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOworCisJCS8qIHNvbWUgYmFzaWMgc3VzcGVuZCBjaGVja3MgKi8KKworCQlpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisKKwkJaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSkKKwkJCXByX3dhcm5pbmcoIiVzOiBSWERNQSBhY3RpdmU/XG4iLCBfX2Z1bmNfXyk7CisKKwkJaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSkKKwkJCXByX3dhcm5pbmcoIiVzOiBUWERNQSBhY3RpdmU/XG4iLCBfX2Z1bmNfXyk7CisKKwkJaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUpCisJCQlwcl93YXJuaW5nKCIlczogSUlTIGFjdGl2ZVxuIiwgX19mdW5jX18pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0MTJfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oZGFpKTsKKworCXByX2luZm8oImRhaV9hY3RpdmUgJWQsIElJU01PRCAlMDh4LCBJSVNDT04gJTA4eFxuIiwKKwkJZGFpLT5hY3RpdmUsIGkycy0+c3VzcGVuZF9paXNtb2QsIGkycy0+c3VzcGVuZF9paXNjb24pOworCisJaWYgKGRhaS0+YWN0aXZlKSB7CisJCXdyaXRlbChpMnMtPnN1c3BlbmRfaWlzY29uLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCXdyaXRlbChpMnMtPnN1c3BlbmRfaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXdyaXRlbChpMnMtPnN1c3BlbmRfaWlzcHNyLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisKKwkJd3JpdGVsKFMzQzI0MTJfSUlTRklDX1JYRkxVU0ggfCBTM0MyNDEyX0lJU0ZJQ19UWEZMVVNILAorCQkgICAgICAgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCisJCW5kZWxheSgyNTApOworCQl3cml0ZWwoMHgwLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBzM2MyNDEyX2kyc19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjMjQxMl9pMnNfcmVzdW1lICBOVUxMCisjZW5kaWYKKworaW50IHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJZGFpLT5vcHMudHJpZ2dlciA9IHMzYzI0MTJfaTJzX3RyaWdnZXI7CisJZGFpLT5vcHMuaHdfcGFyYW1zID0gczNjMjQxMl9pMnNfaHdfcGFyYW1zOworCWRhaS0+b3BzLnNldF9mbXQgPSBzM2MyNDEyX2kyc19zZXRfZm10OworCWRhaS0+b3BzLnNldF9jbGtkaXYgPSBzM2MyNDEyX2kyc19zZXRfY2xrZGl2OworCisJZGFpLT5zdXNwZW5kID0gczNjMjQxMl9pMnNfc3VzcGVuZDsKKwlkYWktPnJlc3VtZSA9IHMzYzI0MTJfaTJzX3Jlc3VtZTsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaShkYWkpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjY4NTRhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuaAorICoKKyAqIEFMU0EgU29jIEF1ZGlvIExheWVyIC0gUzNDX0kyU1YyIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKi8KKworLyogVGhpcyBjb2RlIGlzIHRoZSBjb3JlIHN1cHBvcnQgZm9yIHRoZSBJMlMgYmxvY2sgZm91bmQgaW4gYSBudW1iZXIgb2YKKyAqIFNhbXN1bmcgU29DIGRldmljZXMgd2hpY2ggaXMgdW5vZmZpY2lhbGx5IG5hbWVkIEkyUy1WMi4gQ3VycmVudGx5IHRoZQorICogUzNDMjQxMiBhbmQgdGhlIFMzQzY0WFggc2VyaWVzIHVzZSB0aGlzIGJsb2NrIHRvIHByb3ZpZGUgMSBvciAyIEkyUworICogY2hhbm5lbHMgdmlhIGNvbmZpZ3VyYWJsZSBHUElPLgorICovCisKKyNpZm5kZWYgX19TTkRfU09DX1MzQzI0WFhfUzNDX0kyU1YyX0kyU19ICisjZGVmaW5lIF9fU05EX1NPQ19TM0MyNFhYX1MzQ19JMlNWMl9JMlNfSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQ19JMlNWMl9ESVZfQkNMSwkoMSkKKyNkZWZpbmUgUzNDX0kyU1YyX0RJVl9SQ0xLCSgyKQorI2RlZmluZSBTM0NfSTJTVjJfRElWX1BSRVNDQUxFUgkoMykKKworLyoqCisgKiBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gLSBTM0MgSTJTLVYyIGluZm9ybWF0aW9uCisgKiBAZGV2OiBUaGUgcGFyZW50IGRldmljZSBwYXNzZWQgdG8gdXNlIGZyb20gdGhlIHByb2JlLgorICogQHJlZ3M6IFRoZSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgcmVnaXN0ZSBibG9jay4KKyAqIEBtYXN0ZXI6IFRydWUgaWYgdGhlIEkyUyBjb3JlIGlzIHRoZSBJMlMgYml0IGNsb2NrIG1hc3Rlci4KKyAqIEBkbWFfcGxheWJhY2s6IERNQSBpbmZvcm1hdGlvbiBmb3IgcGxheWJhY2sgY2hhbm5lbC4KKyAqIEBkbWFfY2FwdHVyZTogRE1BIGluZm9ybWF0aW9uIGZvciBjYXB0dXJlIGNoYW5uZWwuCisgKiBAc3VzcGVuZF9paXNtb2Q6IFBNIHNhdmUgZm9yIHRoZSBJSVNNT0QgcmVnaXN0ZXIuCisgKiBAc3VzcGVuZF9paXNjb246IFBNIHNhdmUgZm9yIHRoZSBJSVNDT04gcmVnaXN0ZXIuCisgKiBAc3VzcGVuZF9paXNwc3I6IFBNIHNhdmUgZm9yIHRoZSBJSVNQU1IgcmVnaXN0ZXIuCisgKgorICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBjb2RlYyBzdGF0ZSBmb3IgdGhlIGhhcmR3YXJlIGFzc29jaWF0ZWQgd2l0aCBhbgorICogSTJTIGNoYW5uZWwgc3VjaCBhcyB0aGUgcmVnaXN0ZXIgbWFwcGluZ3MgYW5kIGNsb2NrIHNvdXJjZXMuCisgKi8KK3N0cnVjdCBzM2NfaTJzdjJfaW5mbyB7CisJc3RydWN0IGRldmljZQkqZGV2OworCXZvaWQgX19pb21lbQkqcmVnczsKKworCXN0cnVjdCBjbGsJKmlpc19wY2xrOworCXN0cnVjdCBjbGsJKmlpc19jY2xrOworCXN0cnVjdCBjbGsJKmlpc19jbGs7CisKKwl1bnNpZ25lZCBjaGFyCSBtYXN0ZXI7CisKKwlzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcwkqZG1hX3BsYXliYWNrOworCXN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zCSpkbWFfY2FwdHVyZTsKKworCXUzMgkJIHN1c3BlbmRfaWlzbW9kOworCXUzMgkJIHN1c3BlbmRfaWlzY29uOworCXUzMgkJIHN1c3BlbmRfaWlzcHNyOworfTsKKworc3RydWN0IHMzY19pMnN2Ml9yYXRlX2NhbGMgeworCXVuc2lnbmVkIGludAljbGtfZGl2OwkvKiBmb3IgcHJlc2NhbGVyICovCisJdW5zaWduZWQgaW50CWZzX2RpdjsJCS8qIGZvciByb290IGZyYW1lIGNsb2NrICovCit9OworCitleHRlcm4gaW50IHMzY19pMnN2Ml9paXNfY2FsY19yYXRlKHN0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjICppbmZvLAorCQkJCSAgIHVuc2lnbmVkIGludCAqZnN0YWIsCisJCQkJICAgdW5zaWduZWQgaW50IHJhdGUsIHN0cnVjdCBjbGsgKmNsayk7CisKKy8qKgorICogczNjX2kyc3YyX3Byb2JlIC0gcHJvYmUgZm9yIGkycyBkZXZpY2UgaGVscGVyCisgKiBAcGRldjogVGhlIHBsYXRmb3JtIGRldmljZSBzdXBwbGllZCB0byB0aGUgb3JpZ2luYWwgcHJvYmUuCisgKiBAZGFpOiBUaGUgQVNvQyBEQUkgc3RydWN0dXJlIHN1cHBsaWVkIHRvIHRoZSBvcmlnaW5hbCBwcm9iZS4KKyAqIEBpMnM6IE91ciBsb2NhbCBpMnMgc3RydWN0dXJlIHRvIGZpbGwgaW4uCisgKiBAYmFzZTogVGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIHJlZ2lzdGVycy4KKyAqLworZXh0ZXJuIGludCBzM2NfaTJzdjJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJICAgc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMsCisJCQkgICB1bnNpZ25lZCBsb25nIGJhc2UpOworCisvKioKKyAqIHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkgLSByZWdpc3RlciBkYWkgd2l0aCBzb2MgY29yZQorICogQGRhaTogVGhlIHNuZF9zb2NfZGFpIHN0cnVjdHVyZSB0byByZWdpc3RlcgorICoKKyAqIEZpbGwgaW4gYW55IG1pc3NpbmcgZmllbGRzIGFuZCB0aGVuIHJlZ2lzdGVyIHRoZSBnaXZlbiBkYWkgd2l0aCB0aGUKKyAqIHNvYyBjb3JlLgorICovCitleHRlcm4gaW50IHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpOworCisjZW5kaWYgLyogX19TTkRfU09DX1MzQzI0WFhfUzNDX0kyU1YyX0kyU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYwppbmRleCBmM2ZjMGFiLi4xY2EzY2RhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0zMCwyNiArMzEsMTYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtczNjMjQxMi1paXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjQxMi1pMnMuaCIKIAogI2RlZmluZSBTM0MyNDEyX0kyU19ERUJVRyAwCi0jZGVmaW5lIFMzQzI0MTJfSTJTX0RFQlVHX0NPTiAwCi0KLSNpZiBTM0MyNDEyX0kyU19ERUJVRwotI2RlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fSU5GTyB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNDEyX2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCkBAIC03Myw0MzEgKzY0LDcgQEAKIAkuZG1hX3NpemUJPSA0LAogfTsKIAotc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gewotCXN0cnVjdCBkZXZpY2UJKmRldjsKLQl2b2lkIF9faW9tZW0JKnJlZ3M7Ci0Jc3RydWN0IGNsawkqaWlzX2NsazsKLQlzdHJ1Y3QgY2xrCSppaXNfcGNsazsKLQlzdHJ1Y3QgY2xrCSppaXNfY2NsazsKLQotCXUzMgkJIHN1c3BlbmRfaWlzbW9kOwotCXUzMgkJIHN1c3BlbmRfaWlzY29uOwotCXUzMgkJIHN1c3BlbmRfaWlzcHNyOwotfTsKLQotc3RhdGljIHN0cnVjdCBzM2MyNDEyX2kyc19pbmZvIHMzYzI0MTJfaTJzOwotCi0jZGVmaW5lIGJpdF9zZXQodiwgYikgKCgodikgJiAoYikpID8gMSA6IDApCi0KLSNpZiBTM0MyNDEyX0kyU19ERUJVR19DT04KLXN0YXRpYyB2b2lkIGRiZ19zaG93Y29uKGNvbnN0IGNoYXIgKmZuLCB1MzIgY29uKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogTFJJPSVkLCBUWEZFTVBUPSVkLCBSWEZFTVBUPSVkLCBUWEZGVUxMPSVkLCBSWEZGVUxMPSVkXG4iLCBmbiwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0VNUFRZKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRklGT19FTVBUWSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRlVMTCksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRlVMTCkpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQQVVTRTogVFhETUE9JWQsIFJYRE1BPSVkLCBUWENIPSVkLCBSWENIPSVkXG4iLAotCSAgICAgICBmbiwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0UpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRSkpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQUNUSVZFOiBUWERNQT0lZCwgUlhETUE9JWQsIElJUz0lZFxuIiwgZm4sCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUpKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJnX3Nob3djb24oY29uc3QgY2hhciAqZm4sIHUzMiBjb24pCi17Ci19Ci0jZW5kaWYKLQotLyogVHVybiBvbiBvciBvZmYgdGhlIHRyYW5zbWlzc2lvbiBwYXRoLiAqLwotc3RhdGljIHZvaWQgczNjMjQxMl9zbmRfdHhjdHJsKGludCBvbikKLXsKLQlzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyAqaTJzID0gJnMzYzI0MTJfaTJzOwotCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKLQl1MzIgZmljLCBjb24sIG1vZDsKLQotCURCRygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgb24pOwotCi0JZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQljb24gPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCW1vZCA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQlEQkcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Ci0KLQlpZiAob24pIHsKLQkJY29uIHw9IFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSB8IFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0U7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRTsKLQotCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgewotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOgotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKLQkJCS8qIGRvIG5vdGhpbmcsIHdlIGFyZSBpbiB0aGUgcmlnaHQgbW9kZSAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGkycy0+ZGV2LCAiVFhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7Ci0JCX0KLQotCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCX0gZWxzZSB7Ci0JCS8qIE5vdGUsIHdlIGRvIG5vdCBoYXZlIGFueSBpbmRpY2F0aW9uIHRoYXQgdGhlIEZJRk8gcHJvYmxlbXMKLQkJICogdGhhIHRoZSBTM0MyNDEwLzI0NDAgaGFkIGFwcGx5IGhlcmUsIHNvIHdlIHNob3VsZCBiZSBhYmxlCi0JCSAqIHRvIGRpc2FibGUgdGhlIERNQSBhbmQgVFggd2l0aG91dCByZXNldHRpbmcgdGhlIEZJRk9TLgotCQkgKi8KLQotCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFOwotCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0U7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFOwotCi0JCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk7Ci0JCQlicmVhazsKLQotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOgotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZGV2X2VycihpMnMtPmRldiwgIlRYRElTOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKLQkJfQotCi0JCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JfQotCi0JZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQlkYmdfc2hvd2NvbihfX2Z1bmNfXywgY29uKTsKLQlEQkcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0MTJfc25kX3J4Y3RybChpbnQgb24pCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBpMnMtPnJlZ3M7Ci0JdTMyIGZpYywgY29uLCBtb2Q7Ci0KLQlEQkcoIiVzKCVkKVxuIiwgX19mdW5jX18sIG9uKTsKLQotCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0JY29uID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQltb2QgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JREJHKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOwotCi0JaWYgKG9uKSB7Ci0JCWNvbiB8PSBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUgfCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOwotCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFOwotCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0U7Ci0KLQkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6Ci0JCQkvKiBkbyBub3RoaW5nLCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZGV2X2VycihpMnMtPmRldiwgIlJYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOwotCQl9Ci0KLQkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQl9IGVsc2UgewotCQkvKiBTZWUgdHhjdHJsIG5vdGVzIG9uIEZJRk9zLiAqLwotCi0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFOwotCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFOwotCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0U7Ci0KLQkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKLQkJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGkycy0+ZGV2LCAiUlhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7Ci0JCX0KLQotCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCX0KLQotCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0JREJHKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOwotfQotCi0KLS8qCi0gKiBXYWl0IGZvciB0aGUgTFIgc2lnbmFsIHRvIGFsbG93IHN5bmNocm9uaXNhdGlvbiB0byB0aGUgTC9SIGNsb2NrCi0gKiBmcm9tIHRoZSBjb2RlYy4gTWF5IG9ubHkgYmUgbmVlZGVkIGZvciBzbGF2ZSBtb2RlLgotICovCi1zdGF0aWMgaW50IHMzYzI0MTJfc25kX2xyc3luYyh2b2lkKQotewotCXUzMiBpaXNjb247Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7Ci0KLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCXdoaWxlICgxKSB7Ci0JCWlpc2NvbiA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCWlmIChpaXNjb24gJiBTM0MyNDEyX0lJU0NPTl9MUklOREVYKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHRpbWVvdXQgPCBqaWZmaWVzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogQ2hlY2sgd2hldGhlciBDUFUgaXMgdGhlIG1hc3RlciBvciBzbGF2ZQotICovCi1zdGF0aWMgaW5saW5lIGludCBzM2MyNDEyX3NuZF9pc19jbGttYXN0ZXIodm9pZCkKLXsKLQl1MzIgaWlzbW9kID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0JaWlzbW9kICY9IFMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwotCXJldHVybiAhKGlpc21vZCA9PSBTM0MyNDEyX0lJU01PRF9TTEFWRSk7Ci19Ci0KLS8qCi0gKiBTZXQgUzNDMjQxMiBJMlMgREFJIGZvcm1hdAotICovCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBmbXQpCi17Ci0JdTMyIGlpc21vZDsKLQotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpaXNtb2QgPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHI6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOwotCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKLQkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSzsKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NMQVZFOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6Ci0JCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURCRygidW5rbndvbiBtYXN0ZXIvc2xhdmUgZm9ybWF0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9TREZfTUFTSzsKLQotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfTVNCOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9MU0I7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX0lJUzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREJHKCJVbmtub3duIGRhdGEgZm9ybWF0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jd3JpdGVsKGlpc21vZCwgczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEyX2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0JdTMyIGlpc21vZDsKLQotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2MyNDEyX2kyc19wY21fc3RlcmVvX291dDsKLQllbHNlCi0JCXJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2MyNDEyX2kyc19wY21fc3RlcmVvX2luOwotCi0JLyogV29ya2luZyBjb3BpZXMgb2YgcmVnaXN0ZXIgKi8KLQlpaXNtb2QgPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCURCRygiJXM6IHI6IElJU01PRDogJXhcbiIsIF9fZnVuY19fLCBpaXNtb2QpOwotCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF84QklUOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EXzhCSVQ7Ci0JCWJyZWFrOwotCX0KLQotCXdyaXRlbChpaXNtb2QsIHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JREJHKCIlczogdzogSUlTTU9EOiAleFxuIiwgX19mdW5jX18sIGlpc21vZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlpbnQgY2FwdHVyZSA9IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOwotCXVuc2lnbmVkIGxvbmcgaXJxczsKLQlpbnQgcmV0ID0gMDsKLQotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQkvKiBPbiBzdGFydCwgZW5zdXJlIHRoYXQgdGhlIEZJRk9zIGFyZSBjbGVhcmVkIGFuZCByZXNldC4gKi8KLQotCQl3cml0ZWwoY2FwdHVyZSA/IFMzQzI0MTJfSUlTRklDX1JYRkxVU0ggOiBTM0MyNDEyX0lJU0ZJQ19UWEZMVVNILAotCQkgICAgICAgczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCQkvKiBjbGVhciBhZ2FpbiwganVzdCBpbiBjYXNlICovCi0JCXdyaXRlbCgweDAsIHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWlmICghczNjMjQxMl9zbmRfaXNfY2xrbWFzdGVyKCkpIHsKLQkJCXJldCA9IHMzYzI0MTJfc25kX2xyc3luYygpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGV4aXRfZXJyOwotCQl9Ci0KLQkJbG9jYWxfaXJxX3NhdmUoaXJxcyk7Ci0KLQkJaWYgKGNhcHR1cmUpCi0JCQlzM2MyNDEyX3NuZF9yeGN0cmwoMSk7Ci0JCWVsc2UKLQkJCXMzYzI0MTJfc25kX3R4Y3RybCgxKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFzKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJbG9jYWxfaXJxX3NhdmUoaXJxcyk7Ci0KLQkJaWYgKGNhcHR1cmUpCi0JCQlzM2MyNDEyX3NuZF9yeGN0cmwoMCk7Ci0JCWVsc2UKLQkJCXMzYzI0MTJfc25kX3R4Y3RybCgwKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi1leGl0X2VycjoKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBkZWZhdWx0IHRhYmxlIG9mIGFsbCBhdmFpYWxhYmxlIHJvb3QgZnMgZGl2aXNvcnMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgczNjMjQxMl9paXNfZnNbXSA9IHsgMjU2LCA1MTIsIDM4NCwgNzY4LCAwIH07Ci0KLWludCBzM2MyNDEyX2lpc19jYWxjX3JhdGUoc3RydWN0IHMzYzI0MTJfcmF0ZV9jYWxjICppbmZvLAotCQkJICB1bnNpZ25lZCBpbnQgKmZzdGFiLAotCQkJICB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwotCXVuc2lnbmVkIGludCBkaXY7Ci0JdW5zaWduZWQgaW50IGZzY2xrOwotCXVuc2lnbmVkIGludCBhY3R1YWw7Ci0JdW5zaWduZWQgaW50IGZzOwotCXVuc2lnbmVkIGludCBmc2RpdjsKLQlzaWduZWQgaW50IGRldmlhdGlvbiA9IDA7Ci0JdW5zaWduZWQgaW50IGJlc3RfZnMgPSAwOwotCXVuc2lnbmVkIGludCBiZXN0X2RpdiA9IDA7Ci0JdW5zaWduZWQgaW50IGJlc3RfcmF0ZSA9IDA7Ci0JdW5zaWduZWQgaW50IGJlc3RfZGV2aWF0aW9uID0gSU5UX01BWDsKLQotCi0JaWYgKGZzdGFiID09IE5VTEwpCi0JCWZzdGFiID0gczNjMjQxMl9paXNfZnM7Ci0KLQlmb3IgKGZzID0gMDs7IGZzKyspIHsKLQkJZnNkaXYgPSBzM2MyNDEyX2lpc19mc1tmc107Ci0KLQkJaWYgKGZzZGl2ID09IDApCi0JCQlicmVhazsKLQotCQlmc2NsayA9IGNsa3JhdGUgLyBmc2RpdjsKLQkJZGl2ID0gZnNjbGsgLyByYXRlOwotCi0JCWlmICgoZnNjbGsgJSByYXRlKSA+IChyYXRlIC8gMikpCi0JCQlkaXYrKzsKLQotCQlpZiAoZGl2IDw9IDEpCi0JCQljb250aW51ZTsKLQotCQlhY3R1YWwgPSBjbGtyYXRlIC8gKGZzZGl2ICogZGl2KTsKLQkJZGV2aWF0aW9uID0gYWN0dWFsIC0gcmF0ZTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiJWRmczogZGl2ICVkID0+IHJlc3VsdCAlZCwgZGV2aWF0aW9uICVkXG4iLAotCQkgICAgICAgZnNkaXYsIGRpdiwgYWN0dWFsLCBkZXZpYXRpb24pOwotCi0JCWRldmlhdGlvbiA9IGFicyhkZXZpYXRpb24pOwotCi0JCWlmIChkZXZpYXRpb24gPCBiZXN0X2RldmlhdGlvbikgewotCQkJYmVzdF9mcyA9IGZzZGl2OwotCQkJYmVzdF9kaXYgPSBkaXY7Ci0JCQliZXN0X3JhdGUgPSBhY3R1YWw7Ci0JCQliZXN0X2RldmlhdGlvbiA9IGRldmlhdGlvbjsKLQkJfQotCi0JCWlmIChkZXZpYXRpb24gPT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICJiZXN0OiBmcz0lZCwgZGl2PSVkLCByYXRlPSVkXG4iLAotCSAgICAgICBiZXN0X2ZzLCBiZXN0X2RpdiwgYmVzdF9yYXRlKTsKLQotCWluZm8tPmZzX2RpdiA9IGJlc3RfZnM7Ci0JaW5mby0+Y2xrX2RpdiA9IGJlc3RfZGl2OwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX2lpc19jYWxjX3JhdGUpOworc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2MyNDEyX2kyczsKIAogLyoKICAqIFNldCBTM0MyNDEyIENsb2NrIHNvdXJjZQpAQCAtNTA3LDE1ICs3NCwxNyBAQAogewogCXUzMiBpaXNtb2QgPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwogCi0JREJHKCIlcyglcCwgJWQsICV1LCAlZClcbiIsIF9fZnVuY19fLCBjcHVfZGFpLCBjbGtfaWQsCisJcHJfZGVidWcoIiVzKCVwLCAlZCwgJXUsICVkKVxuIiwgX19mdW5jX18sIGNwdV9kYWksIGNsa19pZCwKIAkgICAgZnJlcSwgZGlyKTsKIAogCXN3aXRjaCAoY2xrX2lkKSB7CiAJY2FzZSBTM0MyNDEyX0NMS1NSQ19QQ0xLOgorCQlzM2MyNDEyX2kycy5tYXN0ZXIgPSAxOwogCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwogCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMOwogCQlicmVhazsKIAljYXNlIFMzQzI0MTJfQ0xLU1JDX0kyU0NMSzoKKwkJczNjMjQxMl9pMnMubWFzdGVyID0gMDsKIAkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSzsKIAkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01BU1RFUl9FWFRFUk5BTDsKIAkJYnJlYWs7CkBAIC01MjcsNzQgKzk2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFNldCBTM0MyNDEyIENsb2NrIGRpdmlkZXJzCi0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JCQkJICBpbnQgZGl2X2lkLCBpbnQgZGl2KQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0JdTMyIHJlZzsKLQotCURCRygiJXMoJXAsICVkLCAlZClcbiIsIF9fZnVuY19fLCBjcHVfZGFpLCBkaXZfaWQsIGRpdik7Ci0KLQlzd2l0Y2ggKGRpdl9pZCkgewotCWNhc2UgUzNDMjQxMl9ESVZfQkNMSzoKLQkJcmVnID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQlyZWcgJj0gflMzQzI0MTJfSUlTTU9EX0JDTEtfTUFTSzsKLQkJd3JpdGVsKHJlZyB8IGRpdiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JCURCRygiJXM6IE1PRD0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0MTJfRElWX1JDTEs6Ci0JCWlmIChkaXYgPiAzKSB7Ci0JCQkvKiBjb252ZXJ0IHZhbHVlIHRvIGJpdCBmaWVsZCAqLwotCi0JCQlzd2l0Y2ggKGRpdikgewotCQkJY2FzZSAyNTY6Ci0JCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS18yNTZGUzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAzODQ6Ci0JCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS18zODRGUzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA1MTI6Ci0JCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS181MTJGUzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA3Njg6Ci0JCQkJZGl2ID0gUzNDMjQxMl9JSVNNT0RfUkNMS183NjhGUzsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCXJlZyA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCXJlZyAmPSB+UzNDMjQxMl9JSVNNT0RfUkNMS19NQVNLOwotCQl3cml0ZWwocmVnIHwgZGl2LCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCURCRygiJXM6IE1PRD0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0MTJfRElWX1BSRVNDQUxFUjoKLQkJaWYgKGRpdiA+PSAwKSB7Ci0JCQl3cml0ZWwoKGRpdiA8PCA4KSB8IFMzQzI0MTJfSUlTUFNSX1BTUkVOLAotCQkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKLQkJfSBlbHNlIHsKLQkJCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKLQkJfQotCQlEQkcoIiVzOiBQU1I9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CiAKIHN0cnVjdCBjbGsgKnMzYzI0MTJfZ2V0X2lpc2Nsayh2b2lkKQogewpAQCAtNjA2LDM0ICsxMDcsMzAgQEAKIHN0YXRpYyBpbnQgczNjMjQxMl9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJaW50IHJldDsKIAotCXMzYzI0MTJfaTJzLmRldiA9ICZwZGV2LT5kZXY7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAotCXMzYzI0MTJfaTJzLnJlZ3MgPSBpb3JlbWFwKFMzQzI0MTBfUEFfSUlTLCAweDEwMCk7Ci0JaWYgKHMzYzI0MTJfaTJzLnJlZ3MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKKwlyZXQgPSBzM2NfaTJzdjJfcHJvYmUocGRldiwgZGFpLCAmczNjMjQxMl9pMnMsIFMzQzI0MTBfUEFfSUlTKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JczNjMjQxMl9pMnMuaWlzX3BjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpaXMiKTsKLQlpZiAoczNjMjQxMl9pMnMuaWlzX3BjbGsgPT0gTlVMTCkgewotCQlEQkcoImZhaWxlZCB0byBnZXQgaWlzX2Nsb2NrXG4iKTsKLQkJaW91bm1hcChzM2MyNDEyX2kycy5yZWdzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCXMzYzI0MTJfaTJzLmRtYV9jYXB0dXJlID0gJnMzYzI0MTJfaTJzX3BjbV9zdGVyZW9faW47CisJczNjMjQxMl9pMnMuZG1hX3BsYXliYWNrID0gJnMzYzI0MTJfaTJzX3BjbV9zdGVyZW9fb3V0OwogCiAJczNjMjQxMl9pMnMuaWlzX2NjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpMnNjbGsiKTsKIAlpZiAoczNjMjQxMl9pMnMuaWlzX2NjbGsgPT0gTlVMTCkgewotCQlEQkcoImZhaWxlZCB0byBnZXQgaTJzY2xrIGNsb2NrXG4iKTsKKwkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgaTJzY2xrIGNsb2NrXG4iKTsKIAkJaW91bm1hcChzM2MyNDEyX2kycy5yZWdzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2xrX3NldF9wYXJlbnQoczNjMjQxMl9pMnMuaWlzX2NjbGssIGNsa19nZXQoTlVMTCwgIm1wbGwiKSk7CisJLyogU2V0IE1QTEwgYXMgdGhlIHNvdXJjZSBmb3IgSUlTIENMSyAqLwogCi0JY2xrX2VuYWJsZShzM2MyNDEyX2kycy5paXNfcGNsayk7CisJY2xrX3NldF9wYXJlbnQoczNjMjQxMl9pMnMuaWlzX2NjbGssIGNsa19nZXQoTlVMTCwgIm1wbGwiKSk7CiAJY2xrX2VuYWJsZShzM2MyNDEyX2kycy5paXNfY2Nsayk7CiAKLQlzM2MyNDEyX2kycy5paXNfY2xrID0gczNjMjQxMl9pMnMuaWlzX3BjbGs7CisJczNjMjQxMl9pMnMuaWlzX2NjbGsgPSBzM2MyNDEyX2kycy5paXNfcGNsazsKIAogCS8qIENvbmZpZ3VyZSB0aGUgSTJTIHBpbnMgaW4gY29ycmVjdCBtb2RlICovCiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTAsIFMzQzI0MTBfR1BFMF9JMlNMUkNLKTsKQEAgLTY0Miw3OCArMTM5LDIyIEBACiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTMsIFMzQzI0MTBfR1BFM19JMlNTREkpOwogCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU0LCBTM0MyNDEwX0dQRTRfSTJTU0RPKTsKIAotCXMzYzI0MTJfc25kX3R4Y3RybCgwKTsKLQlzM2MyNDEyX3NuZF9yeGN0cmwoMCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzM2MyNDEyX2kyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0JdTMyIGlpc21vZDsKLQotCWlmIChkYWktPmFjdGl2ZSkgewotCQlpMnMtPnN1c3BlbmRfaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQlpMnMtPnN1c3BlbmRfaWlzY29uID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCQlpMnMtPnN1c3BlbmRfaWlzcHNyID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCi0JCS8qIHNvbWUgYmFzaWMgc3VzcGVuZCBjaGVja3MgKi8KLQotCQlpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQkJaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSkKLQkJCXByX3dhcm5pbmcoIiVzOiBSWERNQSBhY3RpdmU/XG4iLCBfX2Z1bmNfXyk7Ci0KLQkJaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSkKLQkJCXByX3dhcm5pbmcoIiVzOiBUWERNQSBhY3RpdmU/XG4iLCBfX2Z1bmNfXyk7Ci0KLQkJaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUpCi0JCQlwcl93YXJuaW5nKCIlczogSUlTIGFjdGl2ZVxuIiwgX19mdW5jX18pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyAqaTJzID0gJnMzYzI0MTJfaTJzOwotCi0JcHJfaW5mbygiZGFpX2FjdGl2ZSAlZCwgSUlTTU9EICUwOHgsIElJU0NPTiAlMDh4XG4iLAotCQlkYWktPmFjdGl2ZSwgaTJzLT5zdXNwZW5kX2lpc21vZCwgaTJzLT5zdXNwZW5kX2lpc2Nvbik7Ci0KLQlpZiAoZGFpLT5hY3RpdmUpIHsKLQkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNjb24sIGkycy0+cmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNtb2QsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNwc3IsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKLQotCQl3cml0ZWwoUzNDMjQxMl9JSVNGSUNfUlhGTFVTSCB8IFMzQzI0MTJfSUlTRklDX1RYRkxVU0gsCi0JCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7Ci0KLQkJbmRlbGF5KDI1MCk7Ci0JCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCX0KLQotCXJldHVybiAwOwotfQotI2Vsc2UKLSNkZWZpbmUgczNjMjQxMl9pMnNfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzYzI0MTJfaTJzX3Jlc3VtZSAgTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCiAjZGVmaW5lIFMzQzI0MTJfSTJTX1JBVEVTIFwKIAkoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBcCiAJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQxMl9pMnNfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2Nsawk9IHMzYzI0MTJfaTJzX3NldF9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQxMl9pMnNfZGFpID0gewotCS5uYW1lCT0gInMzYzI0MTItaTJzIiwKLQkuaWQJPSAwLAotCS5wcm9iZQk9IHMzYzI0MTJfaTJzX3Byb2JlLAotCS5zdXNwZW5kID0gczNjMjQxMl9pMnNfc3VzcGVuZCwKLQkucmVzdW1lID0gczNjMjQxMl9pMnNfcmVzdW1lLAorCS5uYW1lCQk9ICJzM2MyNDEyLWkycyIsCisJLmlkCQk9IDAsCisJLnByb2JlCQk9IHMzYzI0MTJfaTJzX3Byb2JlLAogCS5wbGF5YmFjayA9IHsKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLApAQCAtNzI2LDE5ICsxNjcsMTMgQEAKIAkJLnJhdGVzCQk9IFMzQzI0MTJfSTJTX1JBVEVTLAogCQkuZm9ybWF0cwk9IFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAl9LAotCS5vcHMgPSB7Ci0JCS50cmlnZ2VyCT0gczNjMjQxMl9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IHMzYzI0MTJfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQJPSBzM2MyNDEyX2kyc19zZXRfZm10LAotCQkuc2V0X2Nsa2Rpdgk9IHMzYzI0MTJfaTJzX3NldF9jbGtkaXYsCi0JCS5zZXRfc3lzY2xrCT0gczNjMjQxMl9pMnNfc2V0X3N5c2NsaywKLQl9LAorCS5vcHMgPSAmczNjMjQxMl9pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX2kyc19kYWkpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEyX2kyc19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZzM2MyNDEyX2kyc19kYWkpOworCXJldHVybiAgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSgmczNjMjQxMl9pMnNfZGFpKTsKIH0KIG1vZHVsZV9pbml0KHMzYzI0MTJfaTJzX2luaXQpOwogCkBAIC03NDgsNyArMTgzLDYgQEAKIH0KIG1vZHVsZV9leGl0KHMzYzI0MTJfaTJzX2V4aXQpOwogCi0KIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwogTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUzNDMjQxMiBJMlMgU29DIEludGVyZmFjZSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmgKaW5kZXggYWFjMDhhMi4uOTI4NDhlNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oCkBAIC0xNSw5ICsxNSwxMSBAQAogI2lmbmRlZiBfX1NORF9TT0NfUzNDMjRYWF9TM0MyNDEyX0kyU19ICiAjZGVmaW5lIF9fU05EX1NPQ19TM0MyNFhYX1MzQzI0MTJfSTJTX0ggX19GSUxFX18KIAotI2RlZmluZSBTM0MyNDEyX0RJVl9CQ0xLCSgxKQotI2RlZmluZSBTM0MyNDEyX0RJVl9SQ0xLCSgyKQotI2RlZmluZSBTM0MyNDEyX0RJVl9QUkVTQ0FMRVIJKDMpCisjaW5jbHVkZSAiczNjLWkycy12Mi5oIgorCisjZGVmaW5lIFMzQzI0MTJfRElWX0JDTEsJUzNDX0kyU1YyX0RJVl9CQ0xLCisjZGVmaW5lIFMzQzI0MTJfRElWX1JDTEsJUzNDX0kyU1YyX0RJVl9SQ0xLCisjZGVmaW5lIFMzQzI0MTJfRElWX1BSRVNDQUxFUglTM0NfSTJTVjJfRElWX1BSRVNDQUxFUgogCiAjZGVmaW5lIFMzQzI0MTJfQ0xLU1JDX1BDTEsJKDApCiAjZGVmaW5lIFMzQzI0MTJfQ0xLU1JDX0kyU0NMSwkoMSkKQEAgLTI2LDEzICsyOCw0IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQxMl9pMnNfZGFpOwogCi1zdHJ1Y3QgczNjMjQxMl9yYXRlX2NhbGMgewotCXVuc2lnbmVkIGludAljbGtfZGl2OwkvKiBmb3IgcHJlc2NhbGVyICovCi0JdW5zaWduZWQgaW50CWZzX2RpdjsJCS8qIGZvciByb290IGZyYW1lIGNsb2NrICovCi19OwotCi1leHRlcm4gaW50IHMzYzI0MTJfaWlzX2NhbGNfcmF0ZShzdHJ1Y3QgczNjMjQxMl9yYXRlX2NhbGMgKmluZm8sCi0JCQkJIHVuc2lnbmVkIGludCAqZnN0YWIsCi0JCQkJIHVuc2lnbmVkIGludCByYXRlLCBzdHJ1Y3QgY2xrICpjbGspOwotCiAjZW5kaWYgLyogX19TTkRfU09DX1MzQzI0WFhfUzNDMjQxMl9JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYwppbmRleCA1ODIyZDJkLi4zNjk4ZjcwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCkBAIC0zNTUsNiArMzU1LDE2IEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBcCiAJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0NDNfYWM5N19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBzM2MyNDQzX2FjOTdfaHdfcGFyYW1zLAorCS50cmlnZ2VyCT0gczNjMjQ0M19hYzk3X3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNDQzX2FjOTdfbWljX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHMzYzI0NDNfYWM5N19od19taWNfcGFyYW1zLAorCS50cmlnZ2VyCT0gczNjMjQ0M19hYzk3X21pY190cmlnZ2VyLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0NDNfYWM5N19kYWlbXSA9IHsKIHsKIAkubmFtZSA9ICJzM2MyNDQzLWFjOTciLApAQCAtMzc0LDkgKzM4NCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBzM2MyNDQzX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gczNjMjQ0M19hYzk3X2h3X3BhcmFtcywKLQkJLnRyaWdnZXIgPSBzM2MyNDQzX2FjOTdfdHJpZ2dlcn0sCisJLm9wcyA9ICZzM2MyNDQzX2FjOTdfZGFpX29wcywKIH0sCiB7CiAJLm5hbWUgPSAicHhhMnh4LWFjOTctbWljIiwKQEAgLTM4OCw5ICszOTYsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHMzYzI0NDNfYWM5N19od19taWNfcGFyYW1zLAotCQkudHJpZ2dlciA9IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlcix9LAorCS5vcHMgPSAmczNjMjQ0M19hYzk3X21pY19kYWlfb3BzLAogfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDQzX2FjOTdfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCmluZGV4IDZmNGQ0MzkuLmNjMDY2OTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIChjKSAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KICAqCi0gKiAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpAQCAtMzAsMjIgKzMwLDE1IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAKICNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgogI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCiAKLSNkZWZpbmUgUzNDMjRYWF9JMlNfREVCVUcgMAotI2lmIFMzQzI0WFhfSTJTX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAiczNjMjR4eC1pMnM6ICIgeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0eHhfZG1hX2NsaWVudF9vdXQgPSB7CiAJLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IgogfTsKQEAgLTg0LDEzICs3NywxMyBAQAogCXUzMiBpaXNjb247CiAJdTMyIGlpc21vZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNmY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTRkNPTik7CiAJaWlzY29uICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CiAJaWlzbW9kICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAKLQlEQkcoInI6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCXByX2RlYnVnKCJyOiBJSVNDT046ICV4IElJU01PRDogJXggSUlTRkNPTjogJXhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKIAogCWlmIChvbikgewogCQlpaXNmY29uIHw9IFMzQzI0MTBfSUlTRkNPTl9UWERNQSB8IFMzQzI0MTBfSUlTRkNPTl9UWEVOQUJMRTsKQEAgLTEyMCw3ICsxMTMsNyBAQAogCQl3cml0ZWwoaWlzbW9kLCAgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAl9CiAKLQlEQkcoInc6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCXByX2RlYnVnKCJ3OiBJSVNDT046ICV4IElJU01PRDogJXggSUlTRkNPTjogJXhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKIH0KIAogc3RhdGljIHZvaWQgczNjMjR4eF9zbmRfcnhjdHJsKGludCBvbikKQEAgLTEyOSwxMyArMTIyLDEzIEBACiAJdTMyIGlpc2NvbjsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc2Zjb24gPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNGQ09OKTsKIAlpaXNjb24gID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKIAlpaXNtb2QgID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAotCURCRygicjogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisJcHJfZGVidWcoInI6IElJU0NPTjogJXggSUlTTU9EOiAleCBJSVNGQ09OOiAleFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOwogCiAJaWYgKG9uKSB7CiAJCWlpc2Zjb24gfD0gUzNDMjQxMF9JSVNGQ09OX1JYRE1BIHwgUzNDMjQxMF9JSVNGQ09OX1JYRU5BQkxFOwpAQCAtMTY1LDcgKzE1OCw3IEBACiAJCXdyaXRlbChpaXNtb2QsICBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCX0KIAotCURCRygidzogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisJcHJfZGVidWcoInc6IElJU0NPTjogJXggSUlTTU9EOiAleCBJSVNGQ09OOiAleFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOwogfQogCiAvKgpAQCAtMTc3LDcgKzE3MCw3IEBACiAJdTMyIGlpc2NvbjsKIAlpbnQgdGltZW91dCA9IDUwOyAvKiA1bXMgKi8KIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAl3aGlsZSAoMSkgewogCQlpaXNjb24gPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwpAQCAtMTk3LDcgKzE5MCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHMzYzI0eHhfc25kX2lzX2Nsa21hc3Rlcih2b2lkKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gKHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCkgJiBTM0MyNDEwX0lJU01PRF9TTEFWRSkgPyAwOjE7CiB9CkBAIC0yMTAsMTAgKzIwMywxMCBAQAogewogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICVseCBcbiIsIGlpc21vZCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKIAogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CkBAIC0yMzgsNyArMjMxLDcgQEAKIAl9CiAKIAl3cml0ZWwoaWlzbW9kLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHc6IElJU01PRDogJWx4IFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHc6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDksNyArMjQyLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJdTMyIGlpc21vZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0eHhfaTJzX3BjbV9zdGVyZW9fb3V0OwpAQCAtMjU4LDcgKzI1MSw3IEBACiAKIAkvKiBXb3JraW5nIGNvcGllcyBvZiByZWdpc3RlciAqLwogCWlpc21vZCA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgcjogSUlTTU9EOiAlbHhcbiIsIGlpc21vZCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICV4XG4iLCBpaXNtb2QpOwogCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CkBAIC0yNzYsNyArMjY5LDcgQEAKIAl9CiAKIAl3cml0ZWwoaWlzbW9kLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHc6IElJU01PRDogJWx4XG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgdzogSUlTTU9EOiAleFxuIiwgaWlzbW9kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg1LDcgKzI3OCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtMzI3LDcgKzMyMCw3IEBACiB7CiAJdTMyIGlpc21vZCA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzbW9kICY9IH5TM0MyNDQwX0lJU01PRF9NUExMOwogCkBAIC0zNTMsNyArMzQ2LDcgQEAKIHsKIAl1MzIgcmVnOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAoZGl2X2lkKSB7CiAJY2FzZSBTM0MyNFhYX0RJVl9CQ0xLOgpAQCAtMzg5LDcgKzM4Miw3IEBACiBzdGF0aWMgaW50IHMzYzI0eHhfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzM2MyNHh4X2kycy5yZWdzID0gaW9yZW1hcChTM0MyNDEwX1BBX0lJUywgMHgxMDApOwogCWlmIChzM2MyNHh4X2kycy5yZWdzID09IE5VTEwpCkBAIC0zOTcsNyArMzkwLDcgQEAKIAogCXMzYzI0eHhfaTJzLmlpc19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpaXMiKTsKIAlpZiAoczNjMjR4eF9pMnMuaWlzX2NsayA9PSBOVUxMKSB7Ci0JCURCRygiZmFpbGVkIHRvIGdldCBpaXNfY2xvY2tcbiIpOworCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgaWlzX2Nsb2NrXG4iKTsKIAkJaW91bm1hcChzM2MyNHh4X2kycy5yZWdzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDIxLDcgKzQxNCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHMzYzI0eHhfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzM2MyNHh4X2kycy5paXNjb24gPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwogCXMzYzI0eHhfaTJzLmlpc21vZCA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CkBAIC00MzUsNyArNDI4LDcgQEAKIAogc3RhdGljIGludCBzM2MyNHh4X2kyc19yZXN1bWUoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAJY2xrX2VuYWJsZShzM2MyNHh4X2kycy5paXNfY2xrKTsKIAogCXdyaXRlbChzM2MyNHh4X2kycy5paXNjb24sIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CkBAIC00NTYsNiArNDQ5LDE0IEBACiAJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjR4eF9pMnNfZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IHMzYzI0eHhfaTJzX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IHMzYzI0eHhfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IHMzYzI0eHhfaTJzX3NldF9mbXQsCisJLnNldF9jbGtkaXYJPSBzM2MyNHh4X2kyc19zZXRfY2xrZGl2LAorCS5zZXRfc3lzY2xrCT0gczNjMjR4eF9pMnNfc2V0X3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNHh4X2kyc19kYWkgPSB7CiAJLm5hbWUgPSAiczNjMjR4eC1pMnMiLAogCS5pZCA9IDAsCkBAIC00NzIsMTMgKzQ3Myw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBTM0MyNFhYX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkudHJpZ2dlciA9IHMzYzI0eHhfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMgPSBzM2MyNHh4X2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gczNjMjR4eF9pMnNfc2V0X2ZtdCwKLQkJLnNldF9jbGtkaXYgPSBzM2MyNHh4X2kyc19zZXRfY2xrZGl2LAotCQkuc2V0X3N5c2NsayA9IHMzYzI0eHhfaTJzX3NldF9zeXNjbGssCi0JfSwKKwkub3BzID0gJnMzYzI0eHhfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoczNjMjR4eF9pMnNfZGFpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKaW5kZXggN2M2NGQzMS4uYTlkNjhmYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCkBAIC00LDcgKzQsNyBAQAogICogKGMpIDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIEdyYWVtZSBHcmVnb3J5IGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQogICoKLSAqIChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCkBAIC0yOSwxNyArMjksMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAKLSNkZWZpbmUgUzNDMjRYWF9QQ01fREVCVUcgMAotI2lmIFMzQzI0WFhfUENNX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAiczNjMjR4eC1wY206ICIgeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzM2MyNHh4X3BjbV9oYXJkd2FyZSA9IHsKIAkuaW5mbwkJCT0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQkJCSAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CkBAIC04NCwxNiArNzcsMTYgQEAKIAlkbWFfYWRkcl90IHBvcyA9IHBydGQtPmRtYV9wb3M7CiAJaW50IHJldDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IHBydGQtPmRtYV9saW1pdCkgewogCQl1bnNpZ25lZCBsb25nIGxlbiA9IHBydGQtPmRtYV9wZXJpb2Q7CiAKLQkJREJHKCJkbWFfbG9hZGVkOiAlZFxuIiwgcHJ0ZC0+ZG1hX2xvYWRlZCk7CisJCXByX2RlYnVnKCJkbWFfbG9hZGVkOiAlZFxuIiwgcHJ0ZC0+ZG1hX2xvYWRlZCk7CiAKIAkJaWYgKChwb3MgKyBsZW4pID4gcHJ0ZC0+ZG1hX2VuZCkgewogCQkJbGVuICA9IHBydGQtPmRtYV9lbmQgLSBwb3M7Ci0JCQlEQkcoS0VSTl9ERUJVRyAiJXM6IGNvcnJlY3RlZCBkbWEgbGVuICVsZFxuIiwKKwkJCXByX2RlYnVnKEtFUk5fREVCVUcgIiVzOiBjb3JyZWN0ZWQgZG1hIGxlbiAlbGRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGxlbik7CiAJCX0KIApAQCAtMTE5LDcgKzExMiw3IEBACiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkZXZfaWQ7CiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChyZXN1bHQgPT0gUzNDMjQxMF9SRVNfQUJPUlQgfHwgcmVzdWx0ID09IFMzQzI0MTBfUkVTX0VSUikKIAkJcmV0dXJuOwpAQCAtMTQ4LDcgKzE0MSw3IEBACiAJdW5zaWduZWQgbG9uZyB0b3RieXRlcyA9IHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKTsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiByZXR1cm4gaWYgdGhpcyBpcyBhIGJ1ZmZlcmxlc3MgdHJhbnNmZXIgZS5nLgogCSAqIGNvZGVjIDwtLT4gQlQgY29kZWMgb3IgR1NNIG1vZGVtIC0tIGxnIEZJWE1FICovCkBAIC0xNjEsMTQgKzE1NCwxNCBAQAogCQkvKiBwcmVwYXJlIERNQSAqLwogCQlwcnRkLT5wYXJhbXMgPSBkbWE7CiAKLQkJREJHKCJwYXJhbXMgJXAsIGNsaWVudCAlcCwgY2hhbm5lbCAlZFxuIiwgcHJ0ZC0+cGFyYW1zLAorCQlwcl9kZWJ1ZygicGFyYW1zICVwLCBjbGllbnQgJXAsIGNoYW5uZWwgJWRcbiIsIHBydGQtPnBhcmFtcywKIAkJCXBydGQtPnBhcmFtcy0+Y2xpZW50LCBwcnRkLT5wYXJhbXMtPmNoYW5uZWwpOwogCiAJCXJldCA9IHMzYzI0MTBfZG1hX3JlcXVlc3QocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLAogCQkJCQkgIHBydGQtPnBhcmFtcy0+Y2xpZW50LCBOVUxMKTsKIAogCQlpZiAocmV0IDwgMCkgewotCQkJREJHKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGRtYSBjaGFubmVsXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBkbWEgY2hhbm5lbFxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMTk2LDcgKzE4OSw3IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogVE9ETyAtIGRvIHdlIG5lZWQgdG8gZW5zdXJlIERNQSBmbHVzaGVkICovCiAJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCBOVUxMKTsKQEAgLTIxNCw3ICsyMDcsNyBAQAogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHJldHVybiBpZiB0aGlzIGlzIGEgYnVmZmVybGVzcyB0cmFuc2ZlciBlLmcuCiAJICogY29kZWMgPC0tPiBCVCBjb2RlYyBvciBHU00gbW9kZW0gLS0gbGcgRklYTUUgKi8KQEAgLTI1OSw3ICsyNTIsNyBAQAogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CiAKQEAgLTI5Nyw3ICsyOTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzOwogCWRtYV9hZGRyX3Qgc3JjLCBkc3Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKIAlzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbihwcnRkLT5wYXJhbXMtPmNoYW5uZWwsICZzcmMsICZkc3QpOwpAQCAtMzA5LDcgKzMwMiw3IEBACiAKIAlzcGluX3VubG9jaygmcHJ0ZC0+bG9jayk7CiAKLQlEQkcoIlBvaW50ZXIgJXggJXhcbiIsIHNyYywgZHN0KTsKKwlwcl9kZWJ1ZygiUG9pbnRlciAleCAleFxuIiwgc3JjLCBkc3QpOwogCiAJLyogd2Ugc2VlbSB0byBiZSBnZXR0aW5nIHRoZSBvZGQgZXJyb3IgZnJvbSB0aGUgcGNtIGxpYnJhcnkgZHVlCiAJICogdG8gb3V0LW9mLWJvdW5kcyBwb2ludGVycy4gdGhpcyBpcyBtYXliZSBkdWUgdG8gdGhlIGRtYSBlbmdpbmUKQEAgLTMzMCw3ICszMjMsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmczNjMjR4eF9wY21faGFyZHdhcmUpOwogCkBAIC0zNDksMTAgKzM0MiwxMCBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICghcHJ0ZCkKLQkJREJHKCJzM2MyNHh4X3BjbV9jbG9zZSBjYWxsZWQgd2l0aCBwcnRkID09IE5VTExcbiIpOworCQlwcl9kZWJ1ZygiczNjMjR4eF9wY21fY2xvc2UgY2FsbGVkIHdpdGggcHJ0ZCA9PSBOVUxMXG4iKTsKIAogCWtmcmVlKHBydGQpOwogCkBAIC0zNjQsNyArMzU3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiBkbWFfbW1hcF93cml0ZWNvbWJpbmUoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgdm1hLAogCQkJCSAgICAgcnVudGltZS0+ZG1hX2FyZWEsCkBAIC0zOTAsNyArMzgzLDcgQEAKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CiAJc2l6ZV90IHNpemUgPSBzM2MyNHh4X3BjbV9oYXJkd2FyZS5idWZmZXJfYnl0ZXNfbWF4OwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWJ1Zi0+ZGV2LnR5cGUgPSBTTkRSVl9ETUFfVFlQRV9ERVY7CiAJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CkBAIC00MDksNyArNDAyLDcgQEAKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKIAlpbnQgc3RyZWFtOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKIAkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwpAQCAtNDMzLDcgKzQyNiw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFjYXJkLT5kZXYtPmRtYV9tYXNrKQogCQljYXJkLT5kZXYtPmRtYV9tYXNrID0gJnMzYzI0eHhfcGNtX2RtYW1hc2s7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCmluZGV4IGEwYTRkMTgzLi44ZTc5YTQxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3MzYzI0eHhfdWRhMTM0eC5oPgogI2luY2x1ZGUgPHNvdW5kL3VkYTEzNHguaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAKICNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgogI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2M1ZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMCwwICsxLDIyMiBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYworICoKKyAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDNjRYWCBJMlMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1iYW5rLWQuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1lLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKworI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCisjaW5jbHVkZSAiczNjNjR4eC1pMnMuaCIKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjNjR4eF9kbWFfY2xpZW50X291dCA9IHsKKwkubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gb3V0IgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjNjR4eF9kbWFfY2xpZW50X2luID0geworCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBpbiIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFsyXSA9IHsKKwlbMF0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9PVVQsCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCisJWzFdID0geworCQkuY2hhbm5lbAk9IERNQUNIX0kyUzFfT1VULAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0LAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9faW5bMl0gPSB7CisJWzBdID0geworCQkuY2hhbm5lbAk9IERNQUNIX0kyUzBfSU4sCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbiwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKKwlbMV0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9JTiwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1JYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1syXTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKnRvX2luZm8oc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQoreworCXJldHVybiBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9pMnNfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oY3B1X2RhaSk7CisJdTMyIGlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBTM0M2NFhYX0NMS1NSQ19QQ0xLOgorCQlpaXNtb2QgJj0gflMzQzY0WFhfSUlTTU9EX0lNU19TWVNNVVg7CisJCWJyZWFrOworCisJY2FzZSBTM0M2NFhYX0NMS1NSQ19NVVg6CisJCWlpc21vZCB8PSBTM0M2NFhYX0lJU01PRF9JTVNfU1lTTVVYOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbChpaXNtb2QsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCXJldHVybiAwOworfQorCisKK3Vuc2lnbmVkIGxvbmcgczNjNjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oZGFpKTsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoaTJzLT5paXNfY2Nsayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2M2NHh4X2kyc19nZXRfY2xvY2tyYXRlKTsKKworc3RhdGljIGludCBzM2M2NHh4X2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzOworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwcm9iaW5nIGRhaSAlZFxuIiwgX19mdW5jX18sIHBkZXYtPmlkKTsKKworCWlmIChwZGV2LT5pZCA8IDAgfHwgcGRldi0+aWQgPiBBUlJBWV9TSVpFKHMzYzY0eHhfaTJzKSkgeworCQlkZXZfZXJyKGRldiwgImlkICVkIG91dCBvZiByYW5nZVxuIiwgcGRldi0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpMnMgPSAmczNjNjR4eF9pMnNbcGRldi0+aWRdOworCisJcmV0ID0gczNjX2kyc3YyX3Byb2JlKHBkZXYsIGRhaSwgaTJzLAorCQkJICAgICAgcGRldi0+aWQgPyBTM0M2NFhYX1BBX0lJUzEgOiBTM0M2NFhYX1BBX0lJUzApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpMnMtPmRtYV9jYXB0dXJlID0gJnMzYzY0eHhfaTJzX3BjbV9zdGVyZW9faW5bcGRldi0+aWRdOworCWkycy0+ZG1hX3BsYXliYWNrID0gJnMzYzY0eHhfaTJzX3BjbV9zdGVyZW9fb3V0W3BkZXYtPmlkXTsKKworCWkycy0+aWlzX2NjbGsgPSBjbGtfZ2V0KGRldiwgImF1ZGlvLWJ1cyIpOworCWlmIChJU19FUlIoaTJzLT5paXNfY2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGF1ZGlvLWJ1cyIpOworCQlpb3VubWFwKGkycy0+cmVncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGNvbmZpZ3VyZSBHUElPIGZvciBpMnMgcG9ydCAqLworCXN3aXRjaCAocGRldi0+aWQpIHsKKwljYXNlIDA6CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgwKSwgUzNDNjRYWF9HUEQwX0kyUzBfQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDEpLCBTM0M2NFhYX0dQRDFfSTJTMF9DRENMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgyKSwgUzNDNjRYWF9HUEQyX0kyUzBfTFJDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMyksIFMzQzY0WFhfR1BEM19JMlMwX0RJKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDQpLCBTM0M2NFhYX0dQRDRfSTJTMF9EMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDApLCBTM0M2NFhYX0dQRTBfSTJTMV9DTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMSksIFMzQzY0WFhfR1BFMV9JMlMxX0NEQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDIpLCBTM0M2NFhYX0dQRTJfSTJTMV9MUkNMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgzKSwgUzNDNjRYWF9HUEUzX0kyUzFfREkpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoNCksIFMzQzY0WFhfR1BFNF9JMlMxX0QwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisjZGVmaW5lIFMzQzY0WFhfSTJTX1JBVEVTIFwKKwkoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBcCisJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAorCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKKworI2RlZmluZSBTM0M2NFhYX0kyU19GTVRTIFwKKwkoU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2M2NHh4X2kyc19kYWlfb3BzID0geworCS5zZXRfc3lzY2xrCT0gczNjNjR4eF9pMnNfc2V0X3N5c2NsaywJCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgczNjNjR4eF9pMnNfZGFpID0geworCS5uYW1lCQk9ICJzM2M2NHh4LWkycyIsCisJLmlkCQk9IDAsCisJLnByb2JlCQk9IHMzYzY0eHhfaTJzX3Byb2JlLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbgk9IDIsCisJCS5jaGFubmVsc19tYXgJPSAyLAorCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCisJCS5mb3JtYXRzCT0gUzNDNjRYWF9JMlNfRk1UUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKKwkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAorCX0sCisJLm9wcyA9ICZzM2M2NHh4X2kyc19kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzY0eHhfaTJzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gIHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkoJnMzYzY0eHhfaTJzX2RhaSk7Cit9Cittb2R1bGVfaW5pdChzM2M2NHh4X2kyc19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHMzYzY0eHhfaTJzX2V4aXQodm9pZCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZzM2M2NHh4X2kyc19kYWkpOworfQorbW9kdWxlX2V4aXQoczNjNjR4eF9pMnNfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUzNDNjRYWCBJMlMgU29DIEludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmZmUzYwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmgKQEAgLTAsMCArMSwzMSBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaAorICoKKyAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDNjRYWCBJMlMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fU05EX1NPQ19TM0MyNFhYX1MzQzY0WFhfSTJTX0gKKyNkZWZpbmUgX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSCBfX0ZJTEVfXworCisjaW5jbHVkZSAiczNjLWkycy12Mi5oIgorCisjZGVmaW5lIFMzQzY0WFhfRElWX0JDTEsJUzNDX0kyU1YyX0RJVl9CQ0xLCisjZGVmaW5lIFMzQzY0WFhfRElWX1JDTEsJUzNDX0kyU1YyX0RJVl9SQ0xLCisjZGVmaW5lIFMzQzY0WFhfRElWX1BSRVNDQUxFUglTM0NfSTJTVjJfRElWX1BSRVNDQUxFUgorCisjZGVmaW5lIFMzQzY0WFhfQ0xLU1JDX1BDTEsJKDApCisjZGVmaW5lIFMzQzY0WFhfQ0xLU1JDX01VWAkoMSkKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzYzY0eHhfaTJzX2dldF9jbG9ja3JhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKTsKKworI2VuZGlmIC8qIF9fU05EX1NPQ19TM0MyNFhYX1MzQzY0WFhfSTJTX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9oYWMuYyBiL3NvdW5kL3NvYy9zaC9oYWMuYwppbmRleCBlYWIzMTgzLi40MWRiNzVhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvaGFjLmMKKysrIGIvc291bmQvc29jL3NoL2hhYy5jCkBAIC0yNjcsNiArMjY3LDEwIEBACiAjZGVmaW5lIEFDOTdfRk1UUwlcCiAJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaGFjX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgc2g0X2hhY19kYWlbXSA9IHsKIHsKIAkubmFtZQkJCT0gIkhBQzAiLApAQCAtMjg0LDkgKzI4OCw3IEBACiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gMiwKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMJPSBoYWNfaHdfcGFyYW1zLAotCX0sCisJLm9wcyA9ICZoYWNfZGFpX29wcywKIH0sCiAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MAogewpAQCAtMzA1LDkgKzMwNyw3IEBACiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gMiwKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMJPSBoYWNfaHdfcGFyYW1zLAotCX0sCisJLm9wcyA9ICZoYWNfZGFpX29wcywKIAogfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NzaS5jIGIvc291bmQvc29jL3NoL3NzaS5jCmluZGV4IGQxZTUzOTAuLjU2ZmEwODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9zc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvc3NpLmMKQEAgLTMzNiw2ICszMzYsMTYgQEAKIAkgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9VMjRfM0xFIHwJXAogCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSAgfCBTTkRSVl9QQ01fRk1UQklUX1UzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc3NpX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBzc2lfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBzc2lfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHNzaV9zZXRfc3lzY2xrLAorCS5zZXRfY2xrZGl2CT0gc3NpX3NldF9jbGtkaXYsCisJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzaDRfc3NpX2RhaVtdID0gewogewogCS5uYW1lCQkJPSAiU1NJMCIsCkBAIC0zNTIsMTUgKzM2Miw3IEBACiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gOCwKIAl9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwCT0gc3NpX3N0YXJ0dXAsCi0JCS5zaHV0ZG93bgk9IHNzaV9zaHV0ZG93biwKLQkJLnRyaWdnZXIJPSBzc2lfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IHNzaV9od19wYXJhbXMsCi0JCS5zZXRfc3lzY2xrCT0gc3NpX3NldF9zeXNjbGssCi0JCS5zZXRfY2xrZGl2CT0gc3NpX3NldF9jbGtkaXYsCi0JCS5zZXRfZm10CT0gc3NpX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJnNzaV9kYWlfb3BzLAogfSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwCiB7CkBAIC0zNzgsMTUgKzM4MCw3IEBACiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gOCwKIAl9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwCT0gc3NpX3N0YXJ0dXAsCi0JCS5zaHV0ZG93bgk9IHNzaV9zaHV0ZG93biwKLQkJLnRyaWdnZXIJPSBzc2lfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IHNzaV9od19wYXJhbXMsCi0JCS5zZXRfc3lzY2xrCT0gc3NpX3NldF9zeXNjbGssCi0JCS5zZXRfY2xrZGl2CT0gc3NpX3NldF9jbGtkaXYsCi0JCS5zZXRfZm10CT0gc3NpX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJnNzaV9kYWlfb3BzLAogfSwKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggZWMzZjhiYi4uNmU3MTBmNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTEzMyw4ICsxMzMsOCBAQAogCW11dGV4X2xvY2soJnBjbV9tdXRleCk7CiAKIAkvKiBzdGFydHVwIHRoZSBhdWRpbyBzdWJzeXN0ZW0gKi8KLQlpZiAoY3B1X2RhaS0+b3BzLnN0YXJ0dXApIHsKLQkJcmV0ID0gY3B1X2RhaS0+b3BzLnN0YXJ0dXAoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5zdGFydHVwKSB7CisJCXJldCA9IGNwdV9kYWktPm9wcy0+c3RhcnR1cChzdWJzdHJlYW0sIGNwdV9kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBvcGVuIGludGVyZmFjZSAlc1xuIiwKIAkJCQljcHVfZGFpLT5uYW1lKTsKQEAgLTE1MCw4ICsxNTAsOCBAQAogCQl9CiAJfQogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnN0YXJ0dXApIHsKLQkJcmV0ID0gY29kZWNfZGFpLT5vcHMuc3RhcnR1cChzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5zdGFydHVwKSB7CisJCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zdGFydHVwKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3Qgb3BlbiBjb2RlYyAlc1xuIiwKIAkJCQljb2RlY19kYWktPm5hbWUpOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJCWNwdV9kYWktPmNhcHR1cmUuYWN0aXZlID0gY29kZWNfZGFpLT5jYXB0dXJlLmFjdGl2ZSA9IDE7CiAJY3B1X2RhaS0+YWN0aXZlID0gY29kZWNfZGFpLT5hY3RpdmUgPSAxOwogCWNwdV9kYWktPnJ1bnRpbWUgPSBydW50aW1lOwotCXNvY2Rldi0+Y29kZWMtPmFjdGl2ZSsrOworCWNhcmQtPmNvZGVjLT5hY3RpdmUrKzsKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIDA7CiAKQEAgLTI0Nyw4ICsyNDcsOCBAQAogCQlwbGF0Zm9ybS0+cGNtX29wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKIAogcGxhdGZvcm1fZXJyOgotCWlmIChjcHVfZGFpLT5vcHMuc2h1dGRvd24pCi0JCWNwdV9kYWktPm9wcy5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnNodXRkb3duKQorCQljcHVfZGFpLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwY21fbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0yNjQsNyArMjY0LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2NhcmQsCiAJCQkJCQkgZGVsYXllZF93b3JrLndvcmspOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gY2FyZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJaW50IGk7CiAKQEAgLTMxOSw3ICszMTksNyBAQAogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IG1hY2hpbmUtPmNwdV9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBtYWNoaW5lLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCW11dGV4X2xvY2soJnBjbV9tdXRleCk7CiAKQEAgLTM0MCwxMSArMzQwLDExIEBACiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCXNuZF9zb2NfZGFpX2RpZ2l0YWxfbXV0ZShjb2RlY19kYWksIDEpOwogCi0JaWYgKGNwdV9kYWktPm9wcy5zaHV0ZG93bikKLQkJY3B1X2RhaS0+b3BzLnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+c2h1dGRvd24pCisJCWNwdV9kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAotCWlmIChjb2RlY19kYWktPm9wcy5zaHV0ZG93bikKLQkJY29kZWNfZGFpLT5vcHMuc2h1dGRvd24oc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+c2h1dGRvd24pCisJCWNvZGVjX2RhaS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKIAlpZiAobWFjaGluZS0+b3BzICYmIG1hY2hpbmUtPm9wcy0+c2h1dGRvd24pCiAJCW1hY2hpbmUtPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtKTsKQEAgLTM4Nyw3ICszODcsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IG1hY2hpbmUtPmNwdV9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBtYWNoaW5lLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnBjbV9tdXRleCk7CkBAIC00MDgsMTYgKzQwOCwxNiBAQAogCQl9CiAJfQogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnByZXBhcmUpIHsKLQkJcmV0ID0gY29kZWNfZGFpLT5vcHMucHJlcGFyZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5wcmVwYXJlKSB7CisJCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5wcmVwYXJlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY29kZWMgREFJIHByZXBhcmUgZXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlpZiAoY3B1X2RhaS0+b3BzLnByZXBhcmUpIHsKLQkJcmV0ID0gY3B1X2RhaS0+b3BzLnByZXBhcmUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5wcmVwYXJlKSB7CisJCXJldCA9IGNwdV9kYWktPm9wcy0+cHJlcGFyZShzdWJzdHJlYW0sIGNwdV9kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjcHUgREFJIHByZXBhcmUgZXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CkBAIC00OTQsOCArNDk0LDggQEAKIAkJfQogCX0KIAotCWlmIChjb2RlY19kYWktPm9wcy5od19wYXJhbXMpIHsKLQkJcmV0ID0gY29kZWNfZGFpLT5vcHMuaHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+aHdfcGFyYW1zKSB7CisJCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IHNldCBjb2RlYyAlcyBodyBwYXJhbXNcbiIsCiAJCQkJY29kZWNfZGFpLT5uYW1lKTsKQEAgLTUwMyw4ICs1MDMsOCBAQAogCQl9CiAJfQogCi0JaWYgKGNwdV9kYWktPm9wcy5od19wYXJhbXMpIHsKLQkJcmV0ID0gY3B1X2RhaS0+b3BzLmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+aHdfcGFyYW1zKSB7CisJCXJldCA9IGNwdV9kYWktPm9wcy0+aHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjcHVfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogaW50ZXJmYWNlICVzIGh3IHBhcmFtcyBmYWlsZWRcbiIsCiAJCQkJY3B1X2RhaS0+bmFtZSk7CkBAIC01MjYsMTIgKzUyNiwxMiBAQAogCXJldHVybiByZXQ7CiAKIHBsYXRmb3JtX2VycjoKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X2ZyZWUpCi0JCWNwdV9kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+aHdfZnJlZSkKKwkJY3B1X2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAKIGludGVyZmFjZV9lcnI6Ci0JaWYgKGNvZGVjX2RhaS0+b3BzLmh3X2ZyZWUpCi0JCWNvZGVjX2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+aHdfZnJlZSkKKwkJY29kZWNfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCiBjb2RlY19lcnI6CiAJaWYgKG1hY2hpbmUtPm9wcyAmJiBtYWNoaW5lLT5vcHMtPmh3X2ZyZWUpCkBAIC01NTMsNyArNTUzLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBtYWNoaW5lLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gbWFjaGluZS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAKIAltdXRleF9sb2NrKCZwY21fbXV0ZXgpOwogCkBAIC01NzAsMTEgKzU3MCwxMSBAQAogCQlwbGF0Zm9ybS0+cGNtX29wcy0+aHdfZnJlZShzdWJzdHJlYW0pOwogCiAJLyogbm93IGZyZWUgaHcgcGFyYW1zIGZvciB0aGUgREFJJ3MgICovCi0JaWYgKGNvZGVjX2RhaS0+b3BzLmh3X2ZyZWUpCi0JCWNvZGVjX2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCWlmIChjb2RlY19kYWktPm9wcy0+aHdfZnJlZSkKKwkJY29kZWNfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCi0JaWYgKGNwdV9kYWktPm9wcy5od19mcmVlKQotCQljcHVfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPmh3X2ZyZWUpCisJCWNwdV9kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNwdV9kYWkpOwogCiAJbXV0ZXhfdW5sb2NrKCZwY21fbXV0ZXgpOwogCXJldHVybiAwOwpAQCAtNTkxLDggKzU5MSw4IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBtYWNoaW5lLT5jb2RlY19kYWk7CiAJaW50IHJldDsKIAotCWlmIChjb2RlY19kYWktPm9wcy50cmlnZ2VyKSB7Ci0JCXJldCA9IGNvZGVjX2RhaS0+b3BzLnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT50cmlnZ2VyKSB7CisJCXJldCA9IGNvZGVjX2RhaS0+b3BzLT50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNjAzLDggKzYwMyw4IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChjcHVfZGFpLT5vcHMudHJpZ2dlcikgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMudHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+dHJpZ2dlcikgeworCQlyZXQgPSBjcHVfZGFpLT5vcHMtPnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNwdV9kYWkpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNjI5LDcgKzYyOSw3IEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2UgKmNvZGVjX2RldiA9IHNvY2Rldi0+Y29kZWNfZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJaW50IGk7CiAKIAkvKiBEdWUgdG8gdGhlIHJlc3VtZSBiZWluZyBzY2hlZHVsZWQgaW50byBhIHdvcmtxdWV1ZSB3ZSBjb3VsZApAQCAtNjQ1LDggKzY0NSw4IEBACiAJLyogbXV0ZSBhbnkgYWN0aXZlIERBQydzICovCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpOwotCQlpZiAoZGFpLT5vcHMuZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQotCQkJZGFpLT5vcHMuZGlnaXRhbF9tdXRlKGRhaSwgMSk7CisJCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQorCQkJZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIDEpOwogCX0KIAogCS8qIHN1c3BlbmQgYWxsIHBjbXMgKi8KQEAgLTcwNSw3ICs3MDUsNyBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gY2FyZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSAqY29kZWNfZGV2ID0gc29jZGV2LT5jb2RlY19kZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHNvY2Rldi0+ZGV2KTsKIAlpbnQgaTsKIApAQCAtNzQxLDggKzc0MSw4IEBACiAJLyogdW5tdXRlIGFueSBhY3RpdmUgREFDcyAqLwogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaTsKLQkJaWYgKGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrLmFjdGl2ZSkKLQkJCWRhaS0+b3BzLmRpZ2l0YWxfbXV0ZShkYWksIDApOworCQlpZiAoZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrLmFjdGl2ZSkKKwkJCWRhaS0+b3BzLT5kaWdpdGFsX211dGUoZGFpLCAwKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKQEAgLTk4Miw4ICs5ODIsOCBAQAogc3RhdGljIGludCBzb2NfbmV3X3BjbShzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwKIAlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmssIGludCBudW0pCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gZGFpX2xpbmstPmNvZGVjX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBkYWlfbGluay0+Y3B1X2RhaTsKQEAgLTk5OCw3ICs5OTgsNyBAQAogCiAJcnRkLT5kYWkgPSBkYWlfbGluazsKIAlydGQtPnNvY2RldiA9IHNvY2RldjsKLQljb2RlY19kYWktPmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlY19kYWktPmNvZGVjID0gY2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayBjbGllbnQgYW5kIGludGVyZmFjZSBodyBjYXBhYmlsaXRpZXMgKi8KIAlzcHJpbnRmKG5ld19uYW1lLCAiJXMgJXMtJWQiLCBkYWlfbGluay0+c3RyZWFtX25hbWUsIGNvZGVjX2RhaS0+bmFtZSwKQEAgLTEwNDgsOSArMTA0OCw4IEBACiB9CiAKIC8qIGNvZGVjIHJlZ2lzdGVyIGR1bXAgKi8KLXN0YXRpYyBzc2l6ZV90IHNvY19jb2RlY19yZWdfc2hvdyhzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmRldmRhdGEsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNvY19jb2RlY19yZWdfc2hvdyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkZXZkYXRhLT5jb2RlYzsKIAlpbnQgaSwgc3RlcCA9IDEsIGNvdW50ID0gMDsKIAogCWlmICghY29kZWMtPnJlZ19jYWNoZV9zaXplKQpAQCAtMTA5MCw3ICsxMDg5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXJldHVybiBzb2NfY29kZWNfcmVnX3Nob3coZGV2ZGF0YSwgYnVmKTsKKwlyZXR1cm4gc29jX2NvZGVjX3JlZ19zaG93KGRldmRhdGEtPmNhcmQtPmNvZGVjLCBidWYpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoY29kZWNfcmVnLCAwNDQ0LCBjb2RlY19yZWdfc2hvdywgTlVMTCk7CkBAIC0xMTA3LDEyICsxMTA2LDEwIEBACiB7CiAJc3NpemVfdCByZXQ7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZXZpY2UgKmNhcmRfZGV2ID0gY29kZWMtPmNhcmQtPmRldjsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmRldmRhdGEgPSBjYXJkX2Rldi0+ZHJpdmVyX2RhdGE7CiAJY2hhciAqYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBzb2NfY29kZWNfcmVnX3Nob3coZGV2ZGF0YSwgYnVmKTsKKwlyZXQgPSBzb2NfY29kZWNfcmVnX3Nob3coY29kZWMsIGJ1Zik7CiAJaWYgKHJldCA+PSAwKQogCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKIAlrZnJlZShidWYpOwpAQCAtMTMwOSwxOSArMTMwNiwxOSBAQAogICovCiBpbnQgc25kX3NvY19uZXdfcGNtcyhzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKLQlpbnQgcmV0ID0gMCwgaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKKwlpbnQgcmV0LCBpOwogCiAJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKIAogCS8qIHJlZ2lzdGVyIGEgc291bmQgY2FyZCAqLwotCWNvZGVjLT5jYXJkID0gc25kX2NhcmRfbmV3KGlkeCwgeGlkLCBjb2RlYy0+b3duZXIsIDApOwotCWlmICghY29kZWMtPmNhcmQpIHsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB4aWQsIGNvZGVjLT5vd25lciwgMCwgJmNvZGVjLT5jYXJkKTsKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IGNyZWF0ZSBzb3VuZCBjYXJkIGZvciBjb2RlYyAlc1xuIiwKIAkJCWNvZGVjLT5uYW1lKTsKIAkJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAljb2RlYy0+Y2FyZC0+ZGV2ID0gc29jZGV2LT5kZXY7CkBAIC0xMzU1LDggKzEzNTIsOCBAQAogICovCiBpbnQgc25kX3NvY19pbml0X2NhcmQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwLCBpLCBhYzk3ID0gMCwgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewpAQCAtMTQwNyw3ICsxNDA0LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXNvYzogZmFpbGVkIHRvIGFkZCBjb2RlYyBzeXNmcyBmaWxlc1xuIik7CiAKLQlzb2NfaW5pdF9jb2RlY19kZWJ1Z2ZzKHNvY2Rldi0+Y29kZWMpOworCXNvY19pbml0X2NvZGVjX2RlYnVnZnMoY29kZWMpOwogCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAogb3V0OgpAQCAtMTQyNCwxOCArMTQyMSwxOSBAQAogICovCiB2b2lkIHNuZF9zb2NfZnJlZV9wY21zKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKICNpZmRlZiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpOwogCWludCBpOwogI2VuZGlmCiAKIAltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOwotCXNvY19jbGVhbnVwX2NvZGVjX2RlYnVnZnMoc29jZGV2LT5jb2RlYyk7CisJc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhjb2RlYyk7CiAjaWZkZWYgQ09ORklHX1NORF9TT0NfQUM5N19CVVMKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9kYWk7IGkrKykgewogCQljb2RlY19kYWkgPSAmY29kZWMtPmRhaVtpXTsKLQkJaWYgKGNvZGVjX2RhaS0+YWM5N19jb250cm9sICYmIGNvZGVjLT5hYzk3KSB7CisJCWlmIChjb2RlY19kYWktPmFjOTdfY29udHJvbCAmJiBjb2RlYy0+YWM5NyAmJgorCQkgICAgc3RyY21wKGNvZGVjLT5uYW1lLCAiQUM5NyIpICE9IDApIHsKIAkJCXNvY19hYzk3X2Rldl91bnJlZ2lzdGVyKGNvZGVjKTsKIAkJCWdvdG8gZnJlZV9jYXJkOwogCQl9CkBAIC0xNDk4LDYgKzE0OTYsMzcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfY25ldyk7CiAKIC8qKgorICogc25kX3NvY19hZGRfY29udHJvbHMgLSBhZGQgYW4gYXJyYXkgb2YgY29udHJvbHMgdG8gYSBjb2RlYy4KKyAqIENvbnZpZW5pZW5jZSBmdW5jdGlvbiB0byBhZGQgYSBsaXN0IG9mIGNvbnRyb2xzLiBNYW55IGNvZGVjcyB3ZXJlCisgKiBkdXBsaWNhdGluZyB0aGlzIGNvZGUuCisgKgorICogQGNvZGVjOiBjb2RlYyB0byBhZGQgY29udHJvbHMgdG8KKyAqIEBjb250cm9sczogYXJyYXkgb2YgY29udHJvbHMgdG8gYWRkCisgKiBAbnVtX2NvbnRyb2xzOiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CisgKgorICogUmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIGVsc2UgZXJyb3IuCisgKi8KK2ludCBzbmRfc29jX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNvbnRyb2xzLCBpbnQgbnVtX2NvbnRyb2xzKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNvZGVjLT5jYXJkOworCWludCBlcnIsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbnRyb2xzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNvbnRyb2wgPSAmY29udHJvbHNbaV07CisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9zb2NfY25ldyhjb250cm9sLCBjb2RlYywgTlVMTCkpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXM6IEZhaWxlZCB0byBhZGQgJXNcbiIsCisJCQkJY29kZWMtPm5hbWUsIGNvbnRyb2wtPm5hbWUpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19hZGRfY29udHJvbHMpOworCisvKioKICAqIHNuZF9zb2NfaW5mb19lbnVtX2RvdWJsZSAtIGVudW1lcmF0ZWQgZG91YmxlIG1peGVyIGluZm8gY2FsbGJhY2sKICAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAogICogQHVpbmZvOiBjb250cm9sIGVsZW1lbnQgaW5mb3JtYXRpb24KQEAgLTIwMjMsOCArMjA1Miw4IEBACiBpbnQgc25kX3NvY19kYWlfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGNsa19pZCwKIAl1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3N5c2NsaykKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9zeXNjbGsoZGFpLCBjbGtfaWQsIGZyZXEsIGRpcik7CisJaWYgKGRhaS0+b3BzLT5zZXRfc3lzY2xrKQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF9zeXNjbGsoZGFpLCBjbGtfaWQsIGZyZXEsIGRpcik7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNDMsOCArMjA3Miw4IEBACiBpbnQgc25kX3NvY19kYWlfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAlpbnQgZGl2X2lkLCBpbnQgZGl2KQogewotCWlmIChkYWktPm9wcy5zZXRfY2xrZGl2KQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X2Nsa2RpdihkYWksIGRpdl9pZCwgZGl2KTsKKwlpZiAoZGFpLT5vcHMtPnNldF9jbGtkaXYpCisJCXJldHVybiBkYWktPm9wcy0+c2V0X2Nsa2RpdihkYWksIGRpdl9pZCwgZGl2KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA2Miw4ICsyMDkxLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfcGxsKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCWludCBwbGxfaWQsIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9wbGwpCi0JCXJldHVybiBkYWktPm9wcy5zZXRfcGxsKGRhaSwgcGxsX2lkLCBmcmVxX2luLCBmcmVxX291dCk7CisJaWYgKGRhaS0+b3BzLT5zZXRfcGxsKQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF9wbGwoZGFpLCBwbGxfaWQsIGZyZXFfaW4sIGZyZXFfb3V0KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA3OCw4ICsyMTA3LDggQEAKICAqLwogaW50IHNuZF9zb2NfZGFpX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9mbXQpCi0JCXJldHVybiBkYWktPm9wcy5zZXRfZm10KGRhaSwgZm10KTsKKwlpZiAoZGFpLT5vcHMtPnNldF9mbXQpCisJCXJldHVybiBkYWktPm9wcy0+c2V0X2ZtdChkYWksIGZtdCk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwOTcsOCArMjEyNiw4IEBACiBpbnQgc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9zeXNjbGspCi0JCXJldHVybiBkYWktPm9wcy5zZXRfdGRtX3Nsb3QoZGFpLCBtYXNrLCBzbG90cyk7CisJaWYgKGRhaS0+b3BzLT5zZXRfc3lzY2xrKQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF90ZG1fc2xvdChkYWksIG1hc2ssIHNsb3RzKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjExMyw4ICsyMTQyLDggQEAKICAqLwogaW50IHNuZF9zb2NfZGFpX3NldF90cmlzdGF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IHRyaXN0YXRlKQogewotCWlmIChkYWktPm9wcy5zZXRfc3lzY2xrKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3RyaXN0YXRlKGRhaSwgdHJpc3RhdGUpOworCWlmIChkYWktPm9wcy0+c2V0X3N5c2NsaykKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfdHJpc3RhdGUoZGFpLCB0cmlzdGF0ZSk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxMjksOCArMjE1OCw4IEBACiAgKi8KIGludCBzbmRfc29jX2RhaV9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQogewotCWlmIChkYWktPm9wcy5kaWdpdGFsX211dGUpCi0JCXJldHVybiBkYWktPm9wcy5kaWdpdGFsX211dGUoZGFpLCBtdXRlKTsKKwlpZiAoZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZSkKKwkJcmV0dXJuIGRhaS0+b3BzLT5kaWdpdGFsX211dGUoZGFpLCBtdXRlKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjE4Myw2ICsyMjEyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVsbF9kYWlfb3BzID0geworfTsKKwogLyoqCiAgKiBzbmRfc29jX3JlZ2lzdGVyX2RhaSAtIFJlZ2lzdGVyIGEgREFJIHdpdGggdGhlIEFTb0MgY29yZQogICoKQEAgLTIxOTcsNiArMjIyOSw5IEBACiAJaWYgKCFkYWktPmRldikKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gZGV2aWNlIGZvciBEQUkgJXNcbiIsIGRhaS0+bmFtZSk7CiAKKwlpZiAoIWRhaS0+b3BzKQorCQlkYWktPm9wcyA9ICZudWxsX2RhaV9vcHM7CisKIAlJTklUX0xJU1RfSEVBRCgmZGFpLT5saXN0KTsKIAogCW11dGV4X2xvY2soJmNsaWVudF9tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IGEyZjFkYTguLjczNTkwM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC01NCwxNCArNTQsMTUgQEAKIHN0YXRpYyBpbnQgZGFwbV91cF9zZXFbXSA9IHsKIAlzbmRfc29jX2RhcG1fcHJlLCBzbmRfc29jX2RhcG1fbWljYmlhcywgc25kX3NvY19kYXBtX21pYywKIAlzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LCBzbmRfc29jX2RhcG1fZGFjLAotCXNuZF9zb2NfZGFwbV9taXhlciwgc25kX3NvY19kYXBtX3BnYSwgc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLAotCXNuZF9zb2NfZGFwbV9zcGssIHNuZF9zb2NfZGFwbV9wb3N0CisJc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLCBzbmRfc29jX2RhcG1fcGdhLAorCXNuZF9zb2NfZGFwbV9hZGMsIHNuZF9zb2NfZGFwbV9ocCwgc25kX3NvY19kYXBtX3Nwaywgc25kX3NvY19kYXBtX3Bvc3QKIH07CisKIHN0YXRpYyBpbnQgZGFwbV9kb3duX3NlcVtdID0gewogCXNuZF9zb2NfZGFwbV9wcmUsIHNuZF9zb2NfZGFwbV9hZGMsIHNuZF9zb2NfZGFwbV9ocCwgc25kX3NvY19kYXBtX3NwaywKLQlzbmRfc29jX2RhcG1fcGdhLCBzbmRfc29jX2RhcG1fbWl4ZXIsIHNuZF9zb2NfZGFwbV9kYWMsIHNuZF9zb2NfZGFwbV9taWMsCi0Jc25kX3NvY19kYXBtX21pY2JpYXMsIHNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsCi0Jc25kX3NvY19kYXBtX3Bvc3QKKwlzbmRfc29jX2RhcG1fcGdhLCBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLCBzbmRfc29jX2RhcG1fbWl4ZXIsCisJc25kX3NvY19kYXBtX2RhYywgc25kX3NvY19kYXBtX21pYywgc25kX3NvY19kYXBtX21pY2JpYXMsCisJc25kX3NvY19kYXBtX211eCwgc25kX3NvY19kYXBtX3ZhbHVlX211eCwgc25kX3NvY19kYXBtX3Bvc3QKIH07CiAKIHN0YXRpYyBpbnQgZGFwbV9zdGF0dXMgPSAxOwpAQCAtMTAxLDcgKzEwMiw4IEBACiB7CiAJc3dpdGNoICh3LT5pZCkgewogCWNhc2Ugc25kX3NvY19kYXBtX3N3aXRjaDoKLQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjogeworCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgorCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDogewogCQlpbnQgdmFsOwogCQlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0gKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKQogCQkJdy0+a2NvbnRyb2xzW2ldLnByaXZhdGVfdmFsdWU7CkBAIC0zMjMsMTUgKzMyNSwzMiBAQAogCQkJaWYgKHBhdGgtPm5hbWUgIT0gKGNoYXIqKXctPmtjb250cm9sc1tpXS5uYW1lKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKiBhZGQgZGFwbSBjb250cm9sIHdpdGggbG9uZyBuYW1lICovCi0JCQluYW1lX2xlbiA9IDIgKyBzdHJsZW4ody0+bmFtZSkKLQkJCQkrIHN0cmxlbih3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQkvKiBhZGQgZGFwbSBjb250cm9sIHdpdGggbG9uZyBuYW1lLgorCQkJICogZm9yIGRhcG1fbWl4ZXIgdGhpcyBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKKwkJCSAqIG1peGVyIGFuZCBrY29udHJvbCBuYW1lLgorCQkJICogZm9yIGRhcG1fbWl4ZXJfbmFtZWRfY3RsIHRoaXMgaXMgc2ltcGx5IHRoZQorCQkJICoga2NvbnRyb2wgbmFtZS4KKwkJCSAqLworCQkJbmFtZV9sZW4gPSBzdHJsZW4ody0+a2NvbnRyb2xzW2ldLm5hbWUpICsgMTsKKwkJCWlmICh3LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsKQorCQkJCW5hbWVfbGVuICs9IDEgKyBzdHJsZW4ody0+bmFtZSk7CisKIAkJCXBhdGgtPmxvbmdfbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9LRVJORUwpOworCiAJCQlpZiAocGF0aC0+bG9uZ19uYW1lID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyAlcyIsCi0JCQkJIHctPm5hbWUsIHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCXN3aXRjaCAody0+aWQpIHsKKwkJCWRlZmF1bHQ6CisJCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzICVzIiwKKwkJCQkJIHctPm5hbWUsIHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKKwkJCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMiLAorCQkJCQkgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCiAJCQlwYXRoLT5sb25nX25hbWVbbmFtZV9sZW4gLSAxXSA9ICdcMCc7CiAKIAkJCXBhdGgtPmtjb250cm9sID0gc25kX3NvY19jbmV3KCZ3LT5rY29udHJvbHNbaV0sIHcsCkBAIC01MDMsNiArNTIyLDEzNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZGFwbV9yZWdfZXZlbnQpOwogCiAvKgorICogU2NhbiBhIHNpbmdsZSBEQVBNIHdpZGdldCBmb3IgYSBjb21wbGV0ZSBhdWRpbyBwYXRoIGFuZCB1cGRhdGUgdGhlCisgKiBwb3dlciBzdGF0dXMgYXBwcm9wcmlhdGVseS4KKyAqLworc3RhdGljIGludCBkYXBtX3Bvd2VyX3dpZGdldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBldmVudCwKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCit7CisJaW50IGluLCBvdXQsIHBvd2VyX2NoYW5nZSwgcG93ZXIsIHJldDsKKworCS8qIHZtaWQgLSBubyBhY3Rpb24gKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ZtaWQpCisJCXJldHVybiAwOworCisJLyogYWN0aXZlIEFEQyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fYWRjICYmIHctPmFjdGl2ZSkgeworCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKKwkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwkJdy0+cG93ZXIgPSAoaW4gIT0gMCkgPyAxIDogMDsKKwkJZGFwbV91cGRhdGVfYml0cyh3KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWN0aXZlIERBQyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fZGFjICYmIHctPmFjdGl2ZSkgeworCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOworCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCQl3LT5wb3dlciA9IChvdXQgIT0gMCkgPyAxIDogMDsKKwkJZGFwbV91cGRhdGVfYml0cyh3KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogcHJlIGFuZCBwb3N0IGV2ZW50IHdpZGdldHMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ByZSkgeworCQlpZiAoIXctPmV2ZW50KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7CisJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3Bvc3QpIHsKKwkJaWYgKCF3LT5ldmVudCkKKwkJCXJldHVybiAwOworCisJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7CisJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qIGFsbCBvdGhlciB3aWRnZXRzICovCisJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CisJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOworCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJcG93ZXIgPSAob3V0ICE9IDAgJiYgaW4gIT0gMCkgPyAxIDogMDsKKwlwb3dlcl9jaGFuZ2UgPSAody0+cG93ZXIgPT0gcG93ZXIpID8gMCA6IDE7CisJdy0+cG93ZXIgPSBwb3dlcjsKKworCWlmICghcG93ZXJfY2hhbmdlKQorCQlyZXR1cm4gMDsKKworCS8qIGNhbGwgYW55IHBvd2VyIGNoYW5nZSBldmVudCBoYW5kbGVycyAqLworCWlmICh3LT5ldmVudCkKKwkJcHJfZGVidWcoInBvd2VyICVzIGV2ZW50IGZvciAlcyBmbGFncyAleFxuIiwKKwkJCSB3LT5wb3dlciA/ICJvbiIgOiAib2ZmIiwKKwkJCSB3LT5uYW1lLCB3LT5ldmVudF9mbGFncyk7CisKKwkvKiBwb3dlciB1cCBwcmUgZXZlbnQgKi8KKwlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpKSB7CisJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHBvd2VyIGRvd24gcHJlIGV2ZW50ICovCisJaWYgKCFwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNRCkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogTG93ZXIgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmICFwb3dlcikKKwkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKKworCWRhcG1fdXBkYXRlX2JpdHModyk7CisKKwkvKiBSYWlzZSBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgcG93ZXIpCisJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7CisKKwkvKiBwb3dlciB1cCBwb3N0IGV2ZW50ICovCisJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcG93ZXIgZG93biBwb3N0IGV2ZW50ICovCisJaWYgKCFwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpKSB7CisJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFNjYW4gZWFjaCBkYXBtIHdpZGdldCBmb3IgY29tcGxldGUgYXVkaW8gcGF0aC4KICAqIEEgY29tcGxldGUgcGF0aCBpcyBhIHJvdXRlIHRoYXQgaGFzIHZhbGlkIGVuZHBvaW50cyBpLmUuOi0KICAqCkBAIC01MTQsNyArNjY0LDcgQEAKIHN0YXRpYyBpbnQgZGFwbV9wb3dlcl93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGV2ZW50KQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwotCWludCBpbiwgb3V0LCBpLCBjID0gMSwgKnNlcSA9IE5VTEwsIHJldCA9IDAsIHBvd2VyX2NoYW5nZSwgcG93ZXI7CisJaW50IGksIGMgPSAxLCAqc2VxID0gTlVMTCwgcmV0ID0gMDsKIAogCS8qIGRvIHdlIGhhdmUgYSBzZXF1ZW5jZWQgc3RyZWFtIGV2ZW50ICovCiAJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKQEAgLTUyNSwxMzUgKzY3NSwyMCBAQAogCQlzZXEgPSBkYXBtX2Rvd25fc2VxOwogCX0KIAotCWZvcihpID0gMDsgaSA8IGM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjOyBpKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgewogCiAJCQkvKiBpcyB3aWRnZXQgaW4gc3RyZWFtIG9yZGVyICovCiAJCQlpZiAoc2VxICYmIHNlcVtpXSAmJiB3LT5pZCAhPSBzZXFbaV0pCiAJCQkJY29udGludWU7CiAKLQkJCS8qIHZtaWQgLSBubyBhY3Rpb24gKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fdm1pZCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogYWN0aXZlIEFEQyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9hZGMgJiYgdy0+YWN0aXZlKSB7Ci0JCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7Ci0JCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCQl3LT5wb3dlciA9IChpbiAhPSAwKSA/IDEgOiAwOwotCQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIGFjdGl2ZSBEQUMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fZGFjICYmIHctPmFjdGl2ZSkgewotCQkJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7Ci0JCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCQl3LT5wb3dlciA9IChvdXQgIT0gMCkgPyAxIDogMDsKLQkJCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKiBwcmUgYW5kIHBvc3QgZXZlbnQgd2lkZ2V0cyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wcmUpIHsKLQkJCQlpZiAoIXctPmV2ZW50KQotCQkJCQljb250aW51ZTsKLQotCQkJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgewotCQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkJTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wb3N0KSB7Ci0JCQkJaWYgKCF3LT5ldmVudCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgewotCQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkJTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKiBhbGwgb3RoZXIgd2lkZ2V0cyAqLwotCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7Ci0JCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQlwb3dlciA9IChvdXQgIT0gMCAmJiBpbiAhPSAwKSA/IDEgOiAwOwotCQkJcG93ZXJfY2hhbmdlID0gKHctPnBvd2VyID09IHBvd2VyKSA/IDA6IDE7Ci0JCQl3LT5wb3dlciA9IHBvd2VyOwotCi0JCQlpZiAoIXBvd2VyX2NoYW5nZSkKLQkJCQljb250aW51ZTsKLQotCQkJLyogY2FsbCBhbnkgcG93ZXIgY2hhbmdlIGV2ZW50IGhhbmRsZXJzICovCi0JCQlpZiAody0+ZXZlbnQpCi0JCQkJcHJfZGVidWcoInBvd2VyICVzIGV2ZW50IGZvciAlcyBmbGFncyAleFxuIiwKLQkJCQkJIHctPnBvd2VyID8gIm9uIiA6ICJvZmYiLAotCQkJCQkgdy0+bmFtZSwgdy0+ZXZlbnRfZmxhZ3MpOwotCi0JCQkvKiBwb3dlciB1cCBwcmUgZXZlbnQgKi8KLQkJCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1VKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogcG93ZXIgZG93biBwcmUgZXZlbnQgKi8KLQkJCWlmICghcG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNRCkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCS8qIExvd2VyIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmICFwb3dlcikKLQkJCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOwotCi0JCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOwotCi0JCQkvKiBSYWlzZSBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiBwb3dlcikKLQkJCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOwotCi0JCQkvKiBwb3dlciB1cCBwb3N0IGV2ZW50ICovCi0JCQlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTVUpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCS8qIHBvd2VyIGRvd24gcG9zdCBldmVudCAqLwotCQkJaWYgKCFwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQorCQkJcmV0ID0gZGFwbV9wb3dlcl93aWRnZXQoY29kZWMsIGV2ZW50LCB3KTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIERFQlVHCkBAIC02ODcsNiArNzIyLDcgQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fYWRjOgogCQljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgorCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CiAJCQlpZiAody0+bmFtZSkgewogCQkJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwogCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CkBAIC03NjAsNiArNzk2LDcgQEAKIAlpbnQgZm91bmQgPSAwOwogCiAJaWYgKHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX21peGVyICYmCisJICAgIHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCAmJgogCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9zd2l0Y2gpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC03OTUsNyArODMyLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRldmRhdGEtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRldmRhdGEtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCWludCBjb3VudCA9IDA7CiAJY2hhciAqc3RhdGUgPSAibm90IHNldCI7CkBAIC04MTMsNiArODUwLDcgQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fYWRjOgogCQljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgorCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGw6CiAJCQlpZiAody0+bmFtZSkKIAkJCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJXM6ICVzXG4iLAogCQkJCQl3LT5uYW1lLCB3LT5wb3dlciA/ICJPbiI6Ik9mZiIpOwpAQCAtODc2LDcgKzkxNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc25kX3NvY19kYXBtX3NldF9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCWNoYXIgKnBpbiwgaW50IHN0YXR1cykKKwkJCQljb25zdCBjaGFyICpwaW4sIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAKQEAgLTk5MSw2ICsxMDI5LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgogCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgorCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJcmV0ID0gZGFwbV9jb25uZWN0X21peGVyKGNvZGVjLCB3c291cmNlLCB3c2luaywgcGF0aCwgY29udHJvbCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCWdvdG8gZXJyOwpAQCAtMTA2OCw2ICsxMTA3LDcgQEAKIAkJc3dpdGNoKHctPmlkKSB7CiAJCWNhc2Ugc25kX3NvY19kYXBtX3N3aXRjaDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWRhcG1fbmV3X21peGVyKGNvZGVjLCB3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9tdXg6CkBAIC0xMzk2LDYgKzE0MzYsNzYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUpOwogCiAvKioKKyAqIHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2ggLSBJbmZvIGZvciBhIHBpbiBzd2l0Y2gKKyAqCisgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKKyAqIEB1aW5mbzogY29udHJvbCBlbGVtZW50IGluZm9ybWF0aW9uCisgKgorICogQ2FsbGJhY2sgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBhIHBpbiBzd2l0Y2ggY29udHJvbC4KKyAqLworaW50IHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2gpOworCisvKioKKyAqIHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaCAtIEdldCBpbmZvcm1hdGlvbiBmb3IgYSBwaW4gc3dpdGNoCisgKgorICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCisgKiBAdWNvbnRyb2w6IFZhbHVlCisgKi8KK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWNvbnN0IGNoYXIgKnBpbiA9IChjb25zdCBjaGFyICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQlzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsIHBpbik7CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaCk7CisKKy8qKgorICogc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoIC0gU2V0IGluZm9ybWF0aW9uIGZvciBhIHBpbiBzd2l0Y2gKKyAqCisgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKKyAqIEB1Y29udHJvbDogVmFsdWUKKyAqLworaW50IHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJY29uc3QgY2hhciAqcGluID0gKGNvbnN0IGNoYXIgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCBwaW4pOworCWVsc2UKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCBwaW4pOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2gpOworCisvKioKICAqIHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbCAtIGNyZWF0ZSBuZXcgZGFwbSBjb250cm9sCiAgKiBAY29kZWM6IGF1ZGlvIGNvZGVjCiAgKiBAd2lkZ2V0OiB3aWRnZXQgdGVtcGxhdGUKQEAgLTE1MjcsOCArMTYzNyw4IEBACiBpbnQgc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LAogCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQtPnNldF9iaWFzX2xldmVsKQpAQCAtMTU0OSw3ICsxNjU5LDcgQEAKICAqIE5PVEU6IHNuZF9zb2NfZGFwbV9zeW5jKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoaXMgZm9yIERBUE0gdG8KICAqIGRvIGFueSB3aWRnZXQgcG93ZXIgc3dpdGNoaW5nLgogICovCi1pbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pCiB7CiAJcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGNvZGVjLCBwaW4sIDEpOwogfQpAQCAtMTU2NCw3ICsxNjc0LDcgQEAKICAqIE5PVEU6IHNuZF9zb2NfZGFwbV9zeW5jKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoaXMgZm9yIERBUE0gdG8KICAqIGRvIGFueSB3aWRnZXQgcG93ZXIgc3dpdGNoaW5nLgogICovCi1pbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMCk7CiB9CkBAIC0xNTg0LDcgKzE2OTQsNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pCiB7CiAJcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGNvZGVjLCBwaW4sIDApOwogfQpAQCAtMTU5OSw3ICsxNzA5LDcgQEAKICAqCiAgKiBSZXR1cm5zIDEgZm9yIGNvbm5lY3RlZCBvdGhlcndpc2UgMC4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAKQEAgLTE2MjAsNyArMTczMCw3IEBACiAgKi8KIHZvaWQgc25kX3NvY19kYXBtX2ZyZWUoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJc25kX3NvY19kYXBtX3N5c19yZW1vdmUoc29jZGV2LT5kZXYpOwogCWRhcG1fZnJlZV93aWRnZXRzKGNvZGVjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtamFjay5jIGIvc291bmQvc29jL3NvYy1qYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzNDZmYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zb2MtamFjay5jCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogc29jLWphY2suYyAgLS0gIEFMU0EgU29DIGphY2sgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvKioKKyAqIHNuZF9zb2NfamFja19uZXcgLSBDcmVhdGUgYSBuZXcgamFjaworICogQGNhcmQ6ICBBU29DIGNhcmQKKyAqIEBpZDogICAgYW4gaWRlbnRpZnlpbmcgc3RyaW5nIGZvciB0aGlzIGphY2sKKyAqIEB0eXBlOiAgYSBiaXRtYXNrIG9mIGVudW0gc25kX2phY2tfdHlwZSB2YWx1ZXMgdGhhdCBjYW4gYmUgZGV0ZWN0ZWQgYnkKKyAqICAgICAgICAgdGhpcyBqYWNrCisgKiBAamFjazogIHN0cnVjdHVyZSB0byB1c2UgZm9yIHRoZSBqYWNrCisgKgorICogQ3JlYXRlcyBhIG5ldyBqYWNrIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBPbiBzdWNjZXNzIGphY2sgd2lsbCBiZSBpbml0aWFsaXNlZC4KKyAqLworaW50IHNuZF9zb2NfamFja19uZXcoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCB0eXBlLAorCQkgICAgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2spCit7CisJamFjay0+Y2FyZCA9IGNhcmQ7CisJSU5JVF9MSVNUX0hFQUQoJmphY2stPnBpbnMpOworCisJcmV0dXJuIHNuZF9qYWNrX25ldyhjYXJkLT5jb2RlYy0+Y2FyZCwgaWQsIHR5cGUsICZqYWNrLT5qYWNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19uZXcpOworCisvKioKKyAqIHNuZF9zb2NfamFja19yZXBvcnQgLSBSZXBvcnQgdGhlIGN1cnJlbnQgc3RhdHVzIGZvciBhIGphY2sKKyAqCisgKiBAamFjazogICB0aGUgamFjaworICogQHN0YXR1czogYSBiaXRtYXNrIG9mIGVudW0gc25kX2phY2tfdHlwZSB2YWx1ZXMgdGhhdCBhcmUgY3VycmVudGx5IGRldGVjdGVkLgorICogQG1hc2s6ICAgYSBiaXRtYXNrIG9mIGVudW0gc25kX2phY2tfdHlwZSB2YWx1ZXMgdGhhdCBiZWluZyByZXBvcnRlZC4KKyAqCisgKiBJZiBjb25maWd1cmVkIHVzaW5nIHNuZF9zb2NfamFja19hZGRfcGlucygpIHRoZW4gdGhlIGFzc29jaWF0ZWQKKyAqIERBUE0gcGlucyB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgYXBwcm9wcmlhdGUgYW5kIERBUE0KKyAqIHN5bmNocm9uaXNlZC4KKyAqCisgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHVzZXMgbXV0ZXhlcyBhbmQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGEKKyAqIGNvbnRleHQgd2hpY2ggY2FuIHNsZWVwIChzdWNoIGFzIGEgd29ya3F1ZXVlKS4KKyAqLwordm9pZCBzbmRfc29jX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBzdGF0dXMsIGludCBtYXNrKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGphY2stPmNhcmQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2phY2tfcGluICpwaW47CisJaW50IGVuYWJsZTsKKwlpbnQgb2xkc3RhdHVzOworCisJaWYgKCFqYWNrKSB7CisJCVdBUk5fT05fT05DRSghamFjayk7CisJCXJldHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJb2xkc3RhdHVzID0gamFjay0+c3RhdHVzOworCisJamFjay0+c3RhdHVzICY9IH5tYXNrOworCWphY2stPnN0YXR1cyB8PSBzdGF0dXM7CisKKwkvKiBUaGUgREFQTSBzeW5jIGlzIGV4cGVuc2l2ZSBlbm91Z2ggdG8gYmUgd29ydGggc2tpcHBpbmcgKi8KKwlpZiAoamFjay0+c3RhdHVzID09IG9sZHN0YXR1cykKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmphY2stPnBpbnMsIGxpc3QpIHsKKwkJZW5hYmxlID0gcGluLT5tYXNrICYgc3RhdHVzOworCisJCWlmIChwaW4tPmludmVydCkKKwkJCWVuYWJsZSA9ICFlbmFibGU7CisKKwkJaWYgKGVuYWJsZSkKKwkJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCBwaW4tPnBpbik7CisJCWVsc2UKKwkJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgcGluLT5waW4pOworCX0KKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXNuZF9qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCBzdGF0dXMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX3JlcG9ydCk7CisKKy8qKgorICogc25kX3NvY19qYWNrX2FkZF9waW5zIC0gQXNzb2NpYXRlIERBUE0gcGlucyB3aXRoIGFuIEFTb0MgamFjaworICoKKyAqIEBqYWNrOiAgQVNvQyBqYWNrCisgKiBAY291bnQ6IE51bWJlciBvZiBwaW5zCisgKiBAcGluczogIEFycmF5IG9mIHBpbnMKKyAqCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCB0aGUgREFQTSBwaW5zIHNwZWNpZmllZCBpbiB0aGUKKyAqIHBpbnMgYXJyYXkgd2lsbCBoYXZlIHRoZWlyIHN0YXR1cyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKKyAqIHN0YXRlIG9mIHRoZSBqYWNrIHdoZW5ldmVyIHRoZSBqYWNrIHN0YXR1cyBpcyB1cGRhdGVkLgorICovCitpbnQgc25kX3NvY19qYWNrX2FkZF9waW5zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHNuZF9zb2NfamFja19waW4gKnBpbnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoIXBpbnNbaV0ucGluKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIG5hbWUgZm9yIHBpbiAlZFxuIiwgaSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoIXBpbnNbaV0ubWFzaykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJObyBtYXNrIGZvciBwaW4gJWQgKCVzKVxuIiwgaSwKKwkJCSAgICAgICBwaW5zW2ldLnBpbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCUlOSVRfTElTVF9IRUFEKCZwaW5zW2ldLmxpc3QpOworCQlsaXN0X2FkZCgmKHBpbnNbaV0ubGlzdCksICZqYWNrLT5waW5zKTsKKwl9CisKKwkvKiBVcGRhdGUgdG8gcmVmbGVjdCB0aGUgbGFzdCByZXBvcnRlZCBzdGF0dXM7IGNhbm5lZCBqYWNrCisJICogaW1wbGVtZW50YXRpb25zIGFyZSBsaWtlbHkgdG8gc2V0IHRoZWlyIHN0YXRlIGJlZm9yZSB0aGUKKwkgKiBjYXJkIGhhcyBhbiBvcHBvcnR1bml0eSB0byBhc3NvY2lhdGUgcGlucy4KKwkgKi8KKwlzbmRfc29jX2phY2tfcmVwb3J0KGphY2ssIDAsIDApOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfYWRkX3BpbnMpOworCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKy8qIGdwaW8gZGV0ZWN0ICovCitzdGF0aWMgdm9pZCBzbmRfc29jX2phY2tfZ3Bpb19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvKQoreworCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2sgPSBncGlvLT5qYWNrOworCWludCBlbmFibGU7CisJaW50IHJlcG9ydDsKKworCWlmIChncGlvLT5kZWJvdW5jZV90aW1lID4gMCkKKwkJbWRlbGF5KGdwaW8tPmRlYm91bmNlX3RpbWUpOworCisJZW5hYmxlID0gZ3Bpb19nZXRfdmFsdWUoZ3Bpby0+Z3Bpbyk7CisJaWYgKGdwaW8tPmludmVydCkKKwkJZW5hYmxlID0gIWVuYWJsZTsKKworCWlmIChlbmFibGUpCisJCXJlcG9ydCA9IGdwaW8tPnJlcG9ydDsKKwllbHNlCisJCXJlcG9ydCA9IDA7CisKKwlzbmRfc29jX2phY2tfcmVwb3J0KGphY2ssIHJlcG9ydCwgZ3Bpby0+cmVwb3J0KTsKK30KKworLyogaXJxIGhhbmRsZXIgZm9yIGdwaW8gcGluICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvID0gZGF0YTsKKworCXNjaGVkdWxlX3dvcmsoJmdwaW8tPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBncGlvIHdvcmsgKi8KK3N0YXRpYyB2b2lkIGdwaW9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvOworCisJZ3BpbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8sIHdvcmspOworCXNuZF9zb2NfamFja19ncGlvX2RldGVjdChncGlvKTsKK30KKworLyoqCisgKiBzbmRfc29jX2phY2tfYWRkX2dwaW9zIC0gQXNzb2NpYXRlIEdQSU8gcGlucyB3aXRoIGFuIEFTb0MgamFjaworICoKKyAqIEBqYWNrOiAgQVNvQyBqYWNrCisgKiBAY291bnQ6IG51bWJlciBvZiBwaW5zCisgKiBAZ3Bpb3M6IGFycmF5IG9mIGdwaW8gcGlucworICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXF1ZXN0IGdwaW8sIHNldCBkYXRhIGRpcmVjdGlvbiBhbmQgcmVxdWVzdCBpcnEKKyAqIGZvciBlYWNoIGdwaW8gaW4gdGhlIGFycmF5LgorICovCitpbnQgc25kX3NvY19qYWNrX2FkZF9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKQoreworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoIWdwaW9faXNfdmFsaWQoZ3Bpb3NbaV0uZ3BpbykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBncGlvICVkXG4iLAorCQkJCWdwaW9zW2ldLmdwaW8pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gdW5kbzsKKwkJfQorCQlpZiAoIWdwaW9zW2ldLm5hbWUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTm8gbmFtZSBmb3IgZ3BpbyAlZFxuIiwKKwkJCQlncGlvc1tpXS5ncGlvKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHVuZG87CisJCX0KKworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb3NbaV0uZ3BpbywgZ3Bpb3NbaV0ubmFtZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVuZG87CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb3NbaV0uZ3Bpbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShncGlvc1tpXS5ncGlvKSwKKwkJCQlncGlvX2hhbmRsZXIsCisJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCWphY2stPmNhcmQtPmRldi0+ZHJpdmVyLT5uYW1lLAorCQkJCSZncGlvc1tpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQlJTklUX1dPUksoJmdwaW9zW2ldLndvcmssIGdwaW9fd29yayk7CisJCWdwaW9zW2ldLmphY2sgPSBqYWNrOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJZ3Bpb19mcmVlKGdwaW9zW2ldLmdwaW8pOwordW5kbzoKKwlzbmRfc29jX2phY2tfZnJlZV9ncGlvcyhqYWNrLCBpLCBncGlvcyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2FkZF9ncGlvcyk7CisKKy8qKgorICogc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MgLSBSZWxlYXNlIEdQSU8gcGlucycgcmVzb3VyY2VzIG9mIGFuIEFTb0MgamFjaworICoKKyAqIEBqYWNrOiAgQVNvQyBqYWNrCisgKiBAY291bnQ6IG51bWJlciBvZiBwaW5zCisgKiBAZ3Bpb3M6IGFycmF5IG9mIGdwaW8gcGlucworICoKKyAqIFJlbGVhc2UgZ3BpbyBhbmQgaXJxIHJlc291cmNlcyBmb3IgZ3BpbyBwaW5zIGFzc29jaWF0ZWQgd2l0aCBhbiBBU29DIGphY2suCisgKi8KK3ZvaWQgc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWZyZWVfaXJxKGdwaW9fdG9faXJxKGdwaW9zW2ldLmdwaW8pLCAmZ3Bpb3NbaV0pOworCQlncGlvX2ZyZWUoZ3Bpb3NbaV0uZ3Bpbyk7CisJCWdwaW9zW2ldLmphY2sgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19mcmVlX2dwaW9zKTsKKyNlbmRpZgkvKiBDT05GSUdfR1BJT0xJQiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvYW1kNzkzMC5jIGIvc291bmQvc3BhcmMvYW1kNzkzMC5jCmluZGV4IGY4NzkzM2UuLjU3NGFmNTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2FtZDc5MzAuYworKysgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKQEAgLTk1NCw3ICs5NTQsOCBAQAogCWFtZC0+cmVncyA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgMCwKIAkJCSAgICAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMF0pLCAiYW1kNzkzMCIpOwogCWlmICghYW1kLT5yZWdzKSB7Ci0JCXNuZF9wcmludGsoImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBtYXAgY2hpcCByZWdpc3RlcnMuXG4iLCBkZXYpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiYW1kNzkzMC0lZDogVW5hYmxlIHRvIG1hcCBjaGlwIHJlZ2lzdGVycy5cbiIsIGRldik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTYyLDcgKzk2Myw3IEBACiAKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfYW1kNzkzMF9pbnRlcnJ1cHQsCiAJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsICJhbWQ3OTMwIiwgYW1kKSkgewotCQlzbmRfcHJpbnRrKCJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIgImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwKIAkJCSAgIGRldiwgaXJxKTsKIAkJc25kX2FtZDc5MzBfZnJlZShhbWQpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTAxOCw5ICsxMDE5LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2X251bV0sIGlkW2Rldl9udW1dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl9udW1dLCBpZFtkZXZfbnVtXSwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQU1ENzkzMCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTdW4gQU1ENzkzMCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvY3M0MjMxLmMgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwppbmRleCA0MWMzODc1Li43ZDkzZmE3IDEwMDY0NAotLS0gYS9zb3VuZC9zcGFyYy9jczQyMzEuYworKysgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwpAQCAtMTU2Myw2ICsxNTYzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jczQyMzEgKmNoaXA7CisJaW50IGVycjsKIAogCSpyY2FyZCA9IE5VTEw7CiAKQEAgLTE1NzQsMTAgKzE1NzUsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jczQyMzEpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jczQyMzEpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQ1M0MjMxIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBDUzQyMzEiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NwYXJjL2RicmkuYyBiL3NvdW5kL3NwYXJjL2RicmkuYwppbmRleCAyM2VkNmYwLi5hZjk1ZmYxIDEwMDY0NAotLS0gYS9zb3VuZC9zcGFyYy9kYnJpLmMKKysrIGIvc291bmQvc3BhcmMvZGJyaS5jCkBAIC0yNjEyLDEwICsyNjEyLDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZGJyaSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2RicmkpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiREJSSSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTdW4gREJSSSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BpL2F0NzNjMjEzLmMgYi9zb3VuZC9zcGkvYXQ3M2MyMTMuYwppbmRleCAwOTgwMmU4Li40YzdiMDUxIDEwMDY0NAotLS0gYS9zb3VuZC9zcGkvYXQ3M2MyMTMuYworKysgYi9zb3VuZC9zcGkvYXQ3M2MyMTMuYwpAQCAtOTY1LDEyICs5NjUsMTEgQEAKIAkJcmV0dXJuIFBUUl9FUlIoYm9hcmQtPmRhY19jbGspOwogCX0KIAotCXJldHZhbCA9IC1FTk9NRU07Ci0KIAkvKiBBbGxvY2F0ZSAiY2FyZCIgdXNpbmcgc29tZSB1bnVzZWQgaWRlbnRpZmllcnMuICovCiAJc25wcmludGYoaWQsIHNpemVvZiBpZCwgImF0NzNjMjEzXyVkIiwgYm9hcmQtPnNzY19pZCk7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldygtMSwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9hdDczYzIxMykpOwotCWlmICghY2FyZCkKKwlyZXR2YWwgPSBzbmRfY2FyZF9jcmVhdGUoLTEsIGlkLCBUSElTX01PRFVMRSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfYXQ3M2MyMTMpLCAmY2FyZCk7CisJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0OwogCiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9od2RlcC5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMKaW5kZXggMGE1MzkxNC4uZmYwYjJhOCAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMKQEAgLTI0LDI1ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJlbXV4X3ZvaWNlLmgiCiAKLS8qCi0gKiBvcGVuIHRoZSBod2RlcCBkZXZpY2UKLSAqLwotc3RhdGljIGludAotc25kX2VtdXhfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIGNsb3NlIHRoZSBkZXZpY2UKLSAqLwotc3RhdGljIGludAotc25kX2VtdXhfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIAogI2RlZmluZSBUTVBfQ0xJRU5UX0lECTB4MTAwMQogCkBAIC0xNDYsOCArMTI3LDYgQEAKIAllbXUtPmh3ZGVwID0gaHc7CiAJc3RyY3B5KGh3LT5uYW1lLCBTTkRSVl9FTVVYX0hXREVQX05BTUUpOwogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX0VNVVhfV0FWRVRBQkxFOwotCWh3LT5vcHMub3BlbiA9IHNuZF9lbXV4X2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2VtdXhfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmlvY3RsID0gc25kX2VtdXhfaHdkZXBfaW9jdGw7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CiAJaHctPnByaXZhdGVfZGF0YSA9IGVtdTsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYwppbmRleCA1YzQ3YjZjLi44N2U0MjIwIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAlwID0gc25kX2VtdXhfY3JlYXRlX3BvcnQoZW11LCB0bXBuYW1lLCAzMiwKIAkJCQkgMSwgJmNhbGxiYWNrKTsKIAlpZiAocCA9PSBOVUxMKSB7Ci0JCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgY3JlYXRlIHBvcnRcbiIpOwogCQlzbmRfZW11eF9kZWNfY291bnQoZW11KTsKIAkJbXV0ZXhfdW5sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKaW5kZXggMzM1YWEyYy4uY2E1ZjdlZiAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYwpAQCAtNzQsMTUgKzc0LDE1IEBACiAJZW11LT5jbGllbnQgPSBzbmRfc2VxX2NyZWF0ZV9rZXJuZWxfY2xpZW50KGNhcmQsIGluZGV4LAogCQkJCQkJICAgIiVzIFdhdmVUYWJsZSIsIGVtdS0+bmFtZSk7CiAJaWYgKGVtdS0+Y2xpZW50IDwgMCkgewotCQlzbmRfcHJpbnRrKCJjYW4ndCBjcmVhdGUgY2xpZW50XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgY3JlYXRlIGNsaWVudFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChlbXUtPm51bV9wb3J0cyA8IDApIHsKLQkJc25kX3ByaW50aygic2VxcG9ydHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJzZXFwb3J0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXG4iKTsKIAkJZW11LT5udW1fcG9ydHMgPSAxOwogCX0gZWxzZSBpZiAoZW11LT5udW1fcG9ydHMgPj0gU05EUlZfRU1VWF9NQVhfUE9SVFMpIHsKLQkJc25kX3ByaW50aygidG9vIG1hbnkgcG9ydHMuIgorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidG9vIG1hbnkgcG9ydHMuIgogCQkJICAgImxpbWl0ZWQgbWF4LiBwb3J0cyAlZFxuIiwgU05EUlZfRU1VWF9NQVhfUE9SVFMpOwogCQllbXUtPm51bV9wb3J0cyA9IFNORFJWX0VNVVhfTUFYX1BPUlRTOwogCX0KQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlwID0gc25kX2VtdXhfY3JlYXRlX3BvcnQoZW11LCB0bXBuYW1lLCBNSURJX0NIQU5ORUxTLAogCQkJCQkgMCwgJnBpbmZvKTsKIAkJaWYgKHAgPT0gTlVMTCkgewotCQkJc25kX3ByaW50aygiY2FuJ3QgY3JlYXRlIHBvcnRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgY3JlYXRlIHBvcnRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIApAQCAtMTQ3LDEyICsxNDcsMTIgQEAKIAogCS8qIEFsbG9jYXRlIHN0cnVjdHVyZXMgZm9yIHRoaXMgY2hhbm5lbCAqLwogCWlmICgocCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygibm8gbWVtb3J5XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXAtPmNoc2V0LmNoYW5uZWxzID0ga2NhbGxvYyhtYXhfY2hhbm5lbHMsIHNpemVvZihzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCksIEdGUF9LRVJORUwpOwogCWlmIChwLT5jaHNldC5jaGFubmVscyA9PSBOVUxMKSB7Ci0JCXNuZF9wcmludGsoIm5vIG1lbW9yeVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIG1lbW9yeVxuIik7CiAJCWtmcmVlKHApOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0zNzYsMTIgKzM3NiwxMiBAQAogCQkJZ290byBfX2Vycm9yOwogCQl9CiAJCWVtdS0+dm1pZGlbaV0gPSBybWlkaTsKLQkJLy9zbmRfcHJpbnRrKCJ2aXJtaWRpICVkIG9rXG4iLCBpKTsKKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJ2aXJtaWRpICVkIG9rXG4iLCBpKTsgKi8KIAl9CiAJcmV0dXJuIDA7CiAKIF9fZXJyb3I6Ci0JLy9zbmRfcHJpbnRrKCJlcnJvciBpbml0Li5cbiIpOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXJyb3IgaW5pdC4uXG4iKTsgKi8KIAlzbmRfZW11eF9kZWxldGVfdmlybWlkaShlbXUpOwogCXJldHVybiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X3N5bnRoLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYwppbmRleCAyY2M2ZjZmLi4zZTkyMWIzIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYwpAQCAtOTU2LDcgKzk1Niw4IEBACiAJaWYgKGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSA9PSBTTkRSVl9FTVVYX1NUX09GRikKIAkJZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID0gU05EUlZfRU1VWF9TVF9MT0NLRUQ7CiAJZWxzZQotCQlzbmRfcHJpbnRrKCJpbnZhbGlkIHZvaWNlIGZvciBsb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJpbnZhbGlkIHZvaWNlIGZvciBsb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKIAkJCSAgIHZvaWNlLCBlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVtdS0+dm9pY2VfbG9jaywgZmxhZ3MpOwogfQpAQCAtOTczLDcgKzk3NCw4IEBACiAJaWYgKGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSA9PSBTTkRSVl9FTVVYX1NUX0xPQ0tFRCkKIAkJZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID0gU05EUlZfRU1VWF9TVF9PRkY7CiAJZWxzZQotCQlzbmRfcHJpbnRrKCJpbnZhbGlkIHZvaWNlIGZvciB1bmxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgImludmFsaWQgdm9pY2UgZm9yIHVubG9jayAlZCAoc3RhdGUgPSAleClcbiIsCiAJCQkgICB2b2ljZSwgZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbXUtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCmluZGV4IDM2ZDUzYmQuLjYzYzhmNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKKysrIGIvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaW50ICByYzsKIAogCWlmIChjb3VudCA8IChsb25nKXNpemVvZihwYXRjaCkpIHsKLQkJc25kX3ByaW50aygicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigmcGF0Y2gsIGRhdGEsIHNpemVvZihwYXRjaCkpKQpAQCAtMTQzLDE1ICsxNDMsMTYgQEAKIAlkYXRhICs9IHNpemVvZihwYXRjaCk7CiAKIAlpZiAocGF0Y2gua2V5ICE9IFNORFJWX09TU19TT1VOREZPTlRfUEFUQ0gpIHsKLQkJc25kX3ByaW50aygiJ1RoZSB3cm9uZyBraW5kIG9mIHBhdGNoJyAleFxuIiwgcGF0Y2gua2V5KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiVGhlIHdyb25nIGtpbmQgb2YgcGF0Y2ggJXhcbiIsIHBhdGNoLmtleSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY291bnQgPCBwYXRjaC5sZW4pIHsKLQkJc25kX3ByaW50aygiUGF0Y2ggdG9vIHNob3J0ICVsZCwgbmVlZCAlZFxuIiwgY291bnQsIHBhdGNoLmxlbik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlBhdGNoIHRvbyBzaG9ydCAlbGQsIG5lZWQgJWRcbiIsCisJCQkgICBjb3VudCwgcGF0Y2gubGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChwYXRjaC5sZW4gPCAwKSB7Ci0JCXNuZF9wcmludGsoInBvb3IgbGVuZ3RoICVkXG4iLCBwYXRjaC5sZW4pOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwb29yIGxlbmd0aCAlZFxuIiwgcGF0Y2gubGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xOTUsNyArMTk2LDggQEAKIAljYXNlIFNORFJWX1NGTlRfUkVNT1ZFX0lORk86CiAJCS8qIHBhdGNoIG11c3QgYmUgb3BlbmVkICovCiAJCWlmICghc2ZsaXN0LT5jdXJyc2YpIHsKLQkJCXNuZF9wcmludGsoInNvdW5kZm9udDogcmVtb3ZlX2luZm86IHBhdGNoIG5vdCBvcGVuZWRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAic291bmRmb250OiByZW1vdmVfaW5mbzogIgorCQkJCSAgICJwYXRjaCBub3Qgb3BlbmVkXG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfSBlbHNlIHsKIAkJCWludCBiYW5rLCBpbnN0cjsKQEAgLTUzMSw3ICs1MzMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3VudCA8IChsb25nKXNpemVvZihoZHIpKSB7Ci0JCXByaW50aygiU291bmRmb250IGVycm9yOiBpbnZhbGlkIHBhdGNoIHpvbmUgbGVuZ3RoXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTb3VuZGZvbnQgZXJyb3I6IGludmFsaWQgcGF0Y2ggem9uZSBsZW5ndGhcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyKikmaGRyLCBkYXRhLCBzaXplb2YoaGRyKSkpCkBAIC01NDEsMTIgKzU0MywxNCBAQAogCWNvdW50IC09IHNpemVvZihoZHIpOwogCiAJaWYgKGhkci5udm9pY2VzIDw9IDAgfHwgaGRyLm52b2ljZXMgPj0gMTAwKSB7Ci0JCXByaW50aygiU291bmRmb250IGVycm9yOiBJbGxlZ2FsIHZvaWNlIG51bWJlciAlZFxuIiwgaGRyLm52b2ljZXMpOworCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBlcnJvcjogSWxsZWdhbCB2b2ljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBoZHIubnZvaWNlcyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjb3VudCA8IChsb25nKXNpemVvZihzdHJ1Y3Qgc291bmRmb250X3ZvaWNlX2luZm8pICogaGRyLm52b2ljZXMpIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgRXJyb3I6IHBhdGNoIGxlbmd0aCglbGQpIGlzIHNtYWxsZXIgdGhhbiBudm9pY2VzKCVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJTb3VuZGZvbnQgRXJyb3I6ICIKKwkJICAgICAgICJwYXRjaCBsZW5ndGgoJWxkKSBpcyBzbWFsbGVyIHRoYW4gbnZvaWNlcyglZClcbiIsCiAJCSAgICAgICBjb3VudCwgaGRyLm52b2ljZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC05NTIsNyArOTU2LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoY291bnQgPCAobG9uZylzaXplb2YocGF0Y2gpKSB7Ci0JCXNuZF9wcmludGsoInBhdGNoIHJlY29yZCB0b28gc21hbGwgJWxkXG4iLCBjb3VudCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBhdGNoIHJlY29yZCB0b28gc21hbGwgJWxkXG4iLCBjb3VudCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnBhdGNoLCBkYXRhLCBzaXplb2YocGF0Y2gpKSkKQEAgLTEwMzQsNyArMTAzOCw4IEBACiAJLyogcGFubmluZyBwb3NpdGlvbjsgLTEyOCAtIDEyNyA9PiAwLTEyNyAqLwogCXpvbmUtPnYucGFuID0gKHBhdGNoLnBhbm5pbmcgKyAxMjgpIC8gMjsKICNpZiAwCi0Jc25kX3ByaW50aygiZ3VzOiBiYXNlZnJxPSVkIChvZnM9JWQpIHJvb3Q9JWQsdHVuZT0lZCwgcmFuZ2U6JWQtJWRcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJndXM6IGJhc2VmcnE9JWQgKG9mcz0lZCkgcm9vdD0lZCx0dW5lPSVkLCByYW5nZTolZC0lZFxuIiwKIAkJICAgKGludClwYXRjaC5iYXNlX2ZyZXEsIHpvbmUtPnYucmF0ZV9vZmZzZXQsCiAJCSAgIHpvbmUtPnYucm9vdCwgem9uZS0+di50dW5lLCB6b25lLT52Lmxvdywgem9uZS0+di5oaWdoKTsKICNlbmRpZgpAQCAtMTA2OCw3ICsxMDczLDggQEAKIAkJem9uZS0+di5wYXJtLnZvbHJlbGVhc2UgPSAweDgwMDAgfCBzbmRfc2ZfY2FsY19wYXJtX2RlY2F5KHJlbGVhc2UpOwogCQl6b25lLT52LmF0dGVudWF0aW9uID0gY2FsY19ndXNfYXR0ZW51YXRpb24ocGF0Y2guZW52X29mZnNldFswXSk7CiAjaWYgMAotCQlzbmRfcHJpbnRrKCJndXM6IGF0a2hsZD0leCwgZGN5c3VzPSV4LCB2b2xyZWw9JXgsIGF0dD0lZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAiZ3VzOiBhdGtobGQ9JXgsIGRjeXN1cz0leCwgdm9scmVsPSV4LCBhdHQ9JWRcbiIsCiAJCQkgICB6b25lLT52LnBhcm0udm9sYXRraGxkLAogCQkJICAgem9uZS0+di5wYXJtLnZvbGRjeXN1cywKIAkJCSAgIHpvbmUtPnYucGFybS52b2xyZWxlYXNlLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL0tjb25maWcgYi9zb3VuZC91c2IvS2NvbmZpZwppbmRleCA0ZjBlYWM5Li41MjNhZWMxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvS2NvbmZpZworKysgYi9zb3VuZC91c2IvS2NvbmZpZwpAQCAtNDgsNyArNDgsMTAgQEAKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgS29yZSBDb250cm9sbGVyCiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEtvcmUgQ29udHJvbGxlciAyCiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIEtvbnRyb2wgMQorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyA0IERKCiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIDggREoKKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgR3VpdGFyIFJpZyBTZXNzaW9uIEkvTworCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBHdWl0YXIgUmlnIG1vYmlsZQogCiAJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgIHdpbGwgYmUgY2FsbGVkIHNuZC11c2ItY2FpYXEuCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5jCmluZGV4IGIzYTYwMzMuLjA4ZDUxZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIAlkZXYtPm91dHB1dF9wYW5pYyA9IDA7CiAJZGV2LT5maXJzdF9wYWNrZXQgPSAxOwogCWRldi0+c3RyZWFtaW5nID0gMTsKKwlkZXYtPndhcm5lZCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTl9VUkJTOyBpKyspIHsKIAkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5kYXRhX3VyYnNfaW5baV0sIEdGUF9BVE9NSUMpOwpAQCAtMzc2LDYgKzM3Nyw5IEBACiAKIAkJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCBkZXYtPm5fc3RyZWFtczsgc3RyZWFtKyssIGkrKykgewogCQkJc3ViID0gZGV2LT5zdWJfY2FwdHVyZVtzdHJlYW1dOworCQkJaWYgKGRldi0+aW5wdXRfcGFuaWMpCisJCQkJdXNiX2J1ZltpXSA9IDA7CisKIAkJCWlmIChzdWIpIHsKIAkJCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1Yi0+cnVudGltZTsKIAkJCQljaGFyICphdWRpb19idWYgPSBydC0+ZG1hX2FyZWE7CkBAIC0zOTcsNiArNDAxLDkgQEAKIAlpZiAoIWRldi0+c3RyZWFtaW5nKQogCQlyZXR1cm47CiAKKwlpZiAoaXNvLT5hY3R1YWxfbGVuZ3RoIDwgZGV2LT5icHApCisJCXJldHVybjsKKwogCXN3aXRjaCAoZGV2LT5zcGVjLmRhdGFfYWxpZ25tZW50KSB7CiAJY2FzZSAwOgogCQlyZWFkX2luX3VyYl9tb2RlMChkZXYsIHVyYiwgaXNvKTsKQEAgLTQwNiwxMCArNDEzLDExIEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChkZXYtPmlucHV0X3BhbmljIHx8IGRldi0+b3V0cHV0X3BhbmljKSB7CisJaWYgKChkZXYtPmlucHV0X3BhbmljIHx8IGRldi0+b3V0cHV0X3BhbmljKSAmJiAhZGV2LT53YXJuZWQpIHsKIAkJZGVidWcoInN0cmVhbWluZyBlcnJvciBkZXRlY3RlZCAlcyAlc1xuIiwgCiAJCQkJZGV2LT5pbnB1dF9wYW5pYyA/ICIoaW5wdXQpIiA6ICIiLAogCQkJCWRldi0+b3V0cHV0X3BhbmljID8gIihvdXRwdXQpIiA6ICIiKTsKKwkJZGV2LT53YXJuZWQgPSAxOwogCX0KIH0KIApAQCAtNjM4LDkgKzY0NiwxMCBAQAogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQUsxKToKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX1JJR0tPTlRST0wzKToKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX1NFU1NJT05JTyk6Ci0JCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODgyMDA7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9HVUlUQVJSSUdNT0JJTEUpOgogCQlkZXYtPnNhbXBsZXJhdGVzIHw9IFNORFJWX1BDTV9SQVRFXzE5MjAwMDsKLQkJYnJlYWs7CisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU84REopOgogCQlkZXYtPnNhbXBsZXJhdGVzIHw9IFNORFJWX1BDTV9SQVRFXzg4MjAwOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jCmluZGV4IGNjZDc2M2QuLmU5MmMyYmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYwpAQCAtMzksMTIgKzM5LDEyIEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlpbnQgaXNfaW50dmFsID0gcG9zICYgQ05UX0lOVFZBTDsKKwl1bnNpZ25lZCBpbnQgaWQgPSBkZXYtPmNoaXAudXNiX2lkOwogCiAJdWluZm8tPmNvdW50ID0gMTsKIAlwb3MgJj0gfkNOVF9JTlRWQUw7CiAKLQlpZiAoZGV2LT5jaGlwLnVzYl9pZCA9PQotCQlVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESikKKwlpZiAoaWQgPT0gVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU84REopCiAJCSYmIChwb3MgPT0gMCkpIHsKIAkJLyogY3VycmVudCBpbnB1dCBtb2RlIG9mIEE4REogKi8KIAkJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CkBAIC01Myw2ICs1MywxNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoaWQgPT0gVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopCisJCSYmIChwb3MgPT0gMCkpIHsKKwkJLyogY3VycmVudCBpbnB1dCBtb2RlIG9mIEE0REogKi8KKwkJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJCXJldHVybiAwOworCX0KKwogCWlmIChpc19pbnR2YWwpIHsKIAkJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CiAJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CkBAIC03Myw2ICs4MiwxNCBAQAogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBjYWlhcWRldihjaGlwLT5jYXJkKTsKIAlpbnQgcG9zID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAKKwlpZiAoZGV2LT5jaGlwLnVzYl9pZCA9PQorCQlVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESikpIHsKKwkJLyogQTRESiBoYXMgb25seSBvbmUgY29udHJvbCAqLworCQkvKiBkbyBub3QgZXhwb3NlIGhhcmR3YXJlIGlucHV0IG1vZGUgMCAqLworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGRldi0+Y29udHJvbF9zdGF0ZVswXSAtIDE7CisJCXJldHVybiAwOworCX0KKwogCWlmIChwb3MgJiBDTlRfSU5UVkFMKQogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXQogCQkJPSBkZXYtPmNvbnRyb2xfc3RhdGVbcG9zICYgfkNOVF9JTlRWQUxdOwpAQCAtOTAsMTAgKzEwNywyMCBAQAogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBjYWlhcWRldihjaGlwLT5jYXJkKTsKIAlpbnQgcG9zID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAKKwlpZiAoZGV2LT5jaGlwLnVzYl9pZCA9PQorCQlVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESikpIHsKKwkJLyogQTRESiBoYXMgb25seSBvbmUgY29udHJvbCAqLworCQkvKiBkbyBub3QgZXhwb3NlIGhhcmR3YXJlIGlucHV0IG1vZGUgMCAqLworCQlkZXYtPmNvbnRyb2xfc3RhdGVbMF0gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSArIDE7CisJCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywKKwkJCQlkZXYtPmNvbnRyb2xfc3RhdGUsIHNpemVvZihkZXYtPmNvbnRyb2xfc3RhdGUpKTsKKwkJcmV0dXJuIDE7CisJfQorCiAJaWYgKHBvcyAmIENOVF9JTlRWQUwpIHsKIAkJZGV2LT5jb250cm9sX3N0YXRlW3BvcyAmIH5DTlRfSU5UVkFMXQogCQkJPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX0RJTU1fTEVEUywKKwkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLAogCQkJCWRldi0+Y29udHJvbF9zdGF0ZSwgc2l6ZW9mKGRldi0+Y29udHJvbF9zdGF0ZSkpOwogCX0gZWxzZSB7CiAJCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKQEAgLTI0MywxMCArMjcwLDEzIEBACiAJeyAiR05EIGxpZnQgZm9yIFRDIFZpbnlsIG1vZGUiLCAJMjQgKyAwIAkJfSwKIAl7ICJHTkQgbGlmdCBmb3IgVEMgQ0QvTGluZSBtb2RlIiwgCTI0ICsgMSAJCX0sCiAJeyAiR05EIGxpZnQgZm9yIHBob25vIG1vZGUiLCAJCTI0ICsgMiAJCX0sCi0JeyAiR05EIGxpZnQgZm9yIFRDIFZpbnlsIG1vZGUiLCAJMjQgKyAzIAkJfSwKIAl7ICJTb2Z0d2FyZSBsb2NrIiwgCQkJNDAgCQl9CiB9OwogCitzdGF0aWMgc3RydWN0IGNhaWFxX2NvbnRyb2xsZXIgYTRkal9jb250cm9sbGVyW10gPSB7CisJeyAiQ3VycmVudCBpbnB1dCBtb2RlIiwJMCB8IENOVF9JTlRWQUwgCX0KK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkZF9jb250cm9scyhzdHJ1Y3QgY2FpYXFfY29udHJvbGxlciAqYywgaW50IG51bSwKIAkJCQkgIHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYpCiB7CkBAIC0yOTUsNiArMzI1LDEwIEBACiAJCXJldCA9IGFkZF9jb250cm9scyhhOGRqX2NvbnRyb2xsZXIsCiAJCQlBUlJBWV9TSVpFKGE4ZGpfY29udHJvbGxlciksIGRldik7CiAJCWJyZWFrOworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopOgorCQlyZXQgPSBhZGRfY29udHJvbHMoYTRkal9jb250cm9sbGVyLAorCQkJQVJSQVlfU0laRShhNGRqX2NvbnRyb2xsZXIpLCBkZXYpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCmluZGV4IDQxYzM2YjAuLmNmNTczYTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKQEAgLTQyLDE1ICs0MiwxNyBAQAogI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMTAiKTsKK01PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4xMyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sM30sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBLb3JlIENvbnRyb2xsZXJ9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgS29yZSBDb250cm9sbGVyIDJ9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgQXVkaW8gS29udHJvbCAxfSwiCisJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEF1ZGlvIDQgREp9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgQXVkaW8gOCBESn0sIgotCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBTZXNzaW9uIEkvT319Iik7CisJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFNlc3Npb24gSS9PfSwiCisJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEd1aXRhclJpZyBtb2JpbGV9Iik7CiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7IC8qIEluZGV4IDAtbWF4ICovCiBzdGF0aWMgY2hhciogaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7IC8qIElkIGZvciB0aGlzIGNhcmQgKi8KQEAgLTExNiw2ICsxMTgsMTYgQEAKIAkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCiAJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX1NFU1NJT05JTwogCX0sCisJeworCQkubWF0Y2hfZmxhZ3MgPSAgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJCS5pZFZlbmRvciA9ICAgICBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLAorCQkuaWRQcm9kdWN0ID0gICAgVVNCX1BJRF9HVUlUQVJSSUdNT0JJTEUKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzID0gIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKKwkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfQVVESU80REoKKwl9LAogCXsgLyogdGVybWluYXRvciAqLyB9CiB9OwogCkBAIC0yMzksNiArMjUxLDggQEAKIAkJCiAJaWYgKGRldi0+YXVkaW9fcGFybV9hbnN3ZXIgIT0gMSkgCiAJCWRlYnVnKCJ1bmFibGUgdG8gc2V0IHRoZSBkZXZpY2UncyBhdWRpbyBwYXJhbXNcbiIpOworCWVsc2UKKwkJZGV2LT5icHAgPSBicHA7CiAKIAlyZXR1cm4gZGV2LT5hdWRpb19wYXJtX2Fuc3dlciA9PSAxID8gMCA6IC1FSU5WQUw7CiB9CkBAIC0zMDAsNiArMzE0LDEyIEBACiAJCX0KIAogCQlicmVhazsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKToKKwkJLyogQXVkaW8gNCBESiAtIGRlZmF1bHQgaW5wdXQgbW9kZSB0byBwaG9ubyAqLworCQlkZXYtPmNvbnRyb2xfc3RhdGVbMF0gPSAyOworCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfV1JJVEVfSU8sCisJCQlkZXYtPmNvbnRyb2xfc3RhdGUsIDEpOworCQlicmVhazsKIAl9CiAJCiAJaWYgKGRldi0+c3BlYy5udW1fYW5hbG9nX2F1ZGlvX291dCArCkBAIC0zMzYsOSArMzU2LDEwIEBACiAJCWxvZygiVW5hYmxlIHRvIHNldCB1cCBjb250cm9sIHN5c3RlbSAocmV0PSVkKVxuIiwgcmV0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCogY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UqIHVzYl9kZXYpCitzdGF0aWMgaW50IGNyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlKiB1c2JfZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQgZGV2bnVtOworCWludCBlcnI7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXY7CiAKQEAgLTM0NywxMiArMzY4LDEyIEBACiAJCQlicmVhazsKIAogCWlmIChkZXZudW0gPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bnVtXSwgaWRbZGV2bnVtXSwgVEhJU19NT0RVTEUsIAotCQkJCQlzaXplb2Yoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlkZXYgPSBjYWlhcWRldihjYXJkKTsKIAlkZXYtPmNoaXAuZGV2ID0gdXNiX2RldjsKQEAgLTM2Miw3ICszODMsOCBAQAogCXNwaW5fbG9ja19pbml0KCZkZXYtPnNwaW5sb2NrKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZ1c2JfZGV2LT5kZXYpOwogCi0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9jYXJkKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYpCkBAIC00NDEsMTAgKzQ2MywxMCBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAkKLQljYXJkID0gY3JlYXRlX2NhcmQoZGV2aWNlKTsKKwlyZXQgPSBjcmVhdGVfY2FyZChkZXZpY2UsICZjYXJkKTsKIAkKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCQkJCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkKTsKIAlyZXQgPSBpbml0X2NhcmQoY2FpYXFkZXYoY2FyZCkpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCmluZGV4IGFiNTZlNzMuLjRjY2UxYWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaAorKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKQEAgLTEwLDggKzEwLDEwIEBACiAjZGVmaW5lIFVTQl9QSURfS09SRUNPTlRST0xMRVIJMHg0NzExCiAjZGVmaW5lIFVTQl9QSURfS09SRUNPTlRST0xMRVIyCTB4NDcxMgogI2RlZmluZSBVU0JfUElEX0FLMQkJMHgwODE1CisjZGVmaW5lIFVTQl9QSURfQVVESU80REoJMHgwODM5CiAjZGVmaW5lIFVTQl9QSURfQVVESU84REoJMHgxOTc4CiAjZGVmaW5lIFVTQl9QSURfU0VTU0lPTklPCTB4MTkxNQorI2RlZmluZSBVU0JfUElEX0dVSVRBUlJJR01PQklMRQkweDBkOGQKIAogI2RlZmluZSBFUDFfQlVGU0laRSA2NAogI2RlZmluZSBDQUlBUV9VU0JfU1RSX0xFTiAweGZmCkBAIC04Nyw5ICs4OSw5IEBACiAJaW50IGF1ZGlvX291dF9idWZfcG9zW01BWF9TVFJFQU1TXTsKIAlpbnQgcGVyaW9kX2luX2NvdW50W01BWF9TVFJFQU1TXTsKIAlpbnQgcGVyaW9kX291dF9jb3VudFtNQVhfU1RSRUFNU107Ci0JaW50IGlucHV0X3BhbmljLCBvdXRwdXRfcGFuaWM7CisJaW50IGlucHV0X3BhbmljLCBvdXRwdXRfcGFuaWMsIHdhcm5lZDsKIAljaGFyICphdWRpb19pbl9idWYsICphdWRpb19vdXRfYnVmOwotCXVuc2lnbmVkIGludCBzYW1wbGVyYXRlczsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlcmF0ZXMsIGJwcDsKIAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViX3BsYXliYWNrW01BWF9TVFJFQU1TXTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1Yl9jYXB0dXJlW01BWF9TVFJFQU1TXTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggMTllMzc0NS4uYzJkYjBmOSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZSBNQVhfUEFDS1NfSFMJKE1BWF9QQUNLUyAqIDgpCS8qIGluIGhpZ2ggc3BlZWQgbW9kZSAqLwogI2RlZmluZSBNQVhfVVJCUwk4CiAjZGVmaW5lIFNZTkNfVVJCUwk0CS8qIGFsd2F5cyBmb3VyIHVyYnMgZm9yIHN5bmMgKi8KLSNkZWZpbmUgTUlOX1BBQ0tTX1VSQgkxCS8qIG1pbmltdW0gMSBwYWNrZXQgcGVyIHVyYiAqLworI2RlZmluZSBNQVhfUVVFVUUJMjQJLyogdHJ5IG5vdCB0byBleGNlZWQgdGhpcyBxdWV1ZSBsZW5ndGgsIGluIG1zICovCiAKIHN0cnVjdCBhdWRpb2Zvcm1hdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtNTI1LDcgKzUyNSw3IEBACiAvKgogICogUHJlcGFyZSB1cmIgZm9yIHN0cmVhbWluZyBiZWZvcmUgcGxheWJhY2sgc3RhcnRzIG9yIHdoZW4gcGF1c2VkLgogICoKLSAqIFdlIGRvbid0IGhhdmUgYW55IGRhdGEsIHNvIHdlIHNlbmQgYSBmcmFtZSBvZiBzaWxlbmNlLgorICogV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSwgc28gd2Ugc2VuZCBzaWxlbmNlLgogICovCiBzdGF0aWMgaW50IHByZXBhcmVfbm9kYXRhX3BsYXliYWNrX3VyYihzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMsCiAJCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCkBAIC01MzcsMTMgKzUzNywxMyBAQAogCiAJb2ZmcyA9IDA7CiAJdXJiLT5kZXYgPSBjdHgtPnN1YnMtPmRldjsKLQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gc3Vicy0+cGFja3NfcGVyX21zOwotCWZvciAoaSA9IDA7IGkgPCBzdWJzLT5wYWNrc19wZXJfbXM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBjdHgtPnBhY2tldHM7ICsraSkgewogCQljb3VudHMgPSBzbmRfdXNiX2F1ZGlvX25leHRfcGFja2V0X3NpemUoc3Vicyk7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmcyAqIHN0cmlkZTsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBjb3VudHMgKiBzdHJpZGU7CiAJCW9mZnMgKz0gY291bnRzOwogCX0KKwl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gY3R4LT5wYWNrZXRzOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IG9mZnMgKiBzdHJpZGU7CiAJbWVtc2V0KHVyYi0+dHJhbnNmZXJfYnVmZmVyLAogCSAgICAgICBzdWJzLT5jdXJfYXVkaW9mbXQtPmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1U4ID8gMHg4MCA6IDAsCkBAIC0xMDM0LDkgKzEwMzQsOSBAQAogc3RhdGljIGludCBpbml0X3N1YnN0cmVhbV91cmJzKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywgdW5zaWduZWQgaW50IHBlcmlvZF9ieXRlcywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGZyYW1lX2JpdHMpCiB7Ci0JdW5zaWduZWQgaW50IG1heHNpemUsIG4sIGk7CisJdW5zaWduZWQgaW50IG1heHNpemUsIGk7CiAJaW50IGlzX3BsYXliYWNrID0gc3Vicy0+ZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7Ci0JdW5zaWduZWQgaW50IG5wYWNrc1tNQVhfVVJCU10sIHVyYl9wYWNrcywgdG90YWxfcGFja3MsIHBhY2tzX3Blcl9tczsKKwl1bnNpZ25lZCBpbnQgdXJiX3BhY2tzLCB0b3RhbF9wYWNrcywgcGFja3NfcGVyX21zOwogCiAJLyogY2FsY3VsYXRlIHRoZSBmcmVxdWVuY3kgaW4gMTYuMTYgZm9ybWF0ICovCiAJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKHN1YnMtPmRldikgPT0gVVNCX1NQRUVEX0ZVTEwpCkBAIC0xMDcwLDggKzEwNzAsNyBAQAogCXN1YnMtPnBhY2tzX3Blcl9tcyA9IHBhY2tzX3Blcl9tczsKIAogCWlmIChpc19wbGF5YmFjaykgewotCQl1cmJfcGFja3MgPSBucnBhY2tzOwotCQl1cmJfcGFja3MgPSBtYXgodXJiX3BhY2tzLCAodW5zaWduZWQgaW50KU1JTl9QQUNLU19VUkIpOworCQl1cmJfcGFja3MgPSBtYXgobnJwYWNrcywgMSk7CiAJCXVyYl9wYWNrcyA9IG1pbih1cmJfcGFja3MsICh1bnNpZ25lZCBpbnQpTUFYX1BBQ0tTKTsKIAl9IGVsc2UKIAkJdXJiX3BhY2tzID0gMTsKQEAgLTEwNzksNyArMTA3OCw3IEBACiAKIAkvKiBkZWNpZGUgaG93IG1hbnkgcGFja2V0cyB0byBiZSB1c2VkICovCiAJaWYgKGlzX3BsYXliYWNrKSB7Ci0JCXVuc2lnbmVkIGludCBtaW5zaXplOworCQl1bnNpZ25lZCBpbnQgbWluc2l6ZSwgbWF4cGFja3M7CiAJCS8qIGRldGVybWluZSBob3cgc21hbGwgYSBwYWNrZXQgY2FuIGJlICovCiAJCW1pbnNpemUgPSAoc3Vicy0+ZnJlcW4gPj4gKDE2IC0gc3Vicy0+ZGF0YWludGVydmFsKSkKIAkJCSAgKiAoZnJhbWVfYml0cyA+PiAzKTsKQEAgLTEwOTIsOCArMTA5MSwxMyBAQAogCQl0b3RhbF9wYWNrcyA9ICh0b3RhbF9wYWNrcyArIHBhY2tzX3Blcl9tcyAtIDEpCiAJCQkJJiB+KHBhY2tzX3Blcl9tcyAtIDEpOwogCQkvKiB3ZSBuZWVkIGF0IGxlYXN0IHR3byBVUkJzIGZvciBxdWV1ZWluZyAqLwotCQlpZiAodG90YWxfcGFja3MgPCAyICogTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tcykKLQkJCXRvdGFsX3BhY2tzID0gMiAqIE1JTl9QQUNLU19VUkIgKiBwYWNrc19wZXJfbXM7CisJCWlmICh0b3RhbF9wYWNrcyA8IDIgKiBwYWNrc19wZXJfbXMpIHsKKwkJCXRvdGFsX3BhY2tzID0gMiAqIHBhY2tzX3Blcl9tczsKKwkJfSBlbHNlIHsKKwkJCS8qIGFuZCB3ZSBkb24ndCB3YW50IHRvbyBsb25nIGEgcXVldWUgZWl0aGVyICovCisJCQltYXhwYWNrcyA9IG1heChNQVhfUVVFVUUgKiBwYWNrc19wZXJfbXMsIHVyYl9wYWNrcyAqIDIpOworCQkJdG90YWxfcGFja3MgPSBtaW4odG90YWxfcGFja3MsIG1heHBhY2tzKTsKKwkJfQogCX0gZWxzZSB7CiAJCXRvdGFsX3BhY2tzID0gTUFYX1VSQlMgKiB1cmJfcGFja3M7CiAJfQpAQCAtMTEwMiwzMSArMTEwNiwxMSBAQAogCQkvKiB0b28gbXVjaC4uLiAqLwogCQlzdWJzLT5udXJicyA9IE1BWF9VUkJTOwogCQl0b3RhbF9wYWNrcyA9IE1BWF9VUkJTICogdXJiX3BhY2tzOwotCX0KLQluID0gdG90YWxfcGFja3M7Ci0JZm9yIChpID0gMDsgaSA8IHN1YnMtPm51cmJzOyBpKyspIHsKLQkJbnBhY2tzW2ldID0gbiA+IHVyYl9wYWNrcyA/IHVyYl9wYWNrcyA6IG47Ci0JCW4gLT0gdXJiX3BhY2tzOwotCX0KLQlpZiAoc3Vicy0+bnVyYnMgPD0gMSkgeworCX0gZWxzZSBpZiAoc3Vicy0+bnVyYnMgPCAyKSB7CiAJCS8qIHRvbyBsaXR0bGUgLSB3ZSBuZWVkIGF0IGxlYXN0IHR3byBwYWNrZXRzCiAJCSAqIHRvIGVuc3VyZSBjb250aWd1b3VzIHBsYXliYWNrL2NhcHR1cmUKIAkJICovCiAJCXN1YnMtPm51cmJzID0gMjsKLQkJbnBhY2tzWzBdID0gKHRvdGFsX3BhY2tzICsgMSkgLyAyOwotCQlucGFja3NbMV0gPSB0b3RhbF9wYWNrcyAtIG5wYWNrc1swXTsKLQl9IGVsc2UgaWYgKG5wYWNrc1tzdWJzLT5udXJicy0xXSA8IE1JTl9QQUNLU19VUkIgKiBwYWNrc19wZXJfbXMpIHsKLQkJLyogdGhlIGxhc3QgcGFja2V0IGlzIHRvbyBzbWFsbC4uICovCi0JCWlmIChzdWJzLT5udXJicyA+IDIpIHsKLQkJCS8qIG1lcmdlIHRvIHRoZSBmaXJzdCBvbmUgKi8KLQkJCW5wYWNrc1swXSArPSBucGFja3Nbc3Vicy0+bnVyYnMgLSAxXTsKLQkJCXN1YnMtPm51cmJzLS07Ci0JCX0gZWxzZSB7Ci0JCQkvKiBkaXZpZGUgdG8gdHdvICovCi0JCQlzdWJzLT5udXJicyA9IDI7Ci0JCQlucGFja3NbMF0gPSAodG90YWxfcGFja3MgKyAxKSAvIDI7Ci0JCQlucGFja3NbMV0gPSB0b3RhbF9wYWNrcyAtIG5wYWNrc1swXTsKLQkJfQogCX0KIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRhdGEgdXJicyAqLwpAQCAtMTEzNCw3ICsxMTE4LDggQEAKIAkJc3RydWN0IHNuZF91cmJfY3R4ICp1ID0gJnN1YnMtPmRhdGF1cmJbaV07CiAJCXUtPmluZGV4ID0gaTsKIAkJdS0+c3VicyA9IHN1YnM7Ci0JCXUtPnBhY2tldHMgPSBucGFja3NbaV07CisJCXUtPnBhY2tldHMgPSAoaSArIDEpICogdG90YWxfcGFja3MgLyBzdWJzLT5udXJicworCQkJLSBpICogdG90YWxfcGFja3MgLyBzdWJzLT5udXJiczsKIAkJdS0+YnVmZmVyX3NpemUgPSBtYXhzaXplICogdS0+cGFja2V0czsKIAkJaWYgKHN1YnMtPmZtdF90eXBlID09IFVTQl9GT1JNQVRfVFlQRV9JSSkKIAkJCXUtPnBhY2tldHMrKzsgLyogZm9yIHRyYW5zZmVyIGRlbGltaXRlciAqLwpAQCAtMTI5MiwxNCArMTI3NywxNCBAQAogCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLAogCQkJCQkgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9PVVQsCiAJCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JWQ6JWQ6IGNhbm5vdCBzZXQgZnJlcSAlZCB0byBlcCAweCV4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JWQ6JWQ6IGNhbm5vdCBzZXQgZnJlcSAlZCB0byBlcCAlI3hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBmbXQtPmFsdHNldHRpbmcsIHJhdGUsIGVwKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfSU4sCiAJCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBjYW5ub3QgZ2V0IGZyZXEgYXQgZXAgMHgleFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlZDolZDolZDogY2Fubm90IGdldCBmcmVxIGF0IGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgZXApOwogCQkJcmV0dXJuIDA7IC8qIHNvbWUgZGV2aWNlcyBkb24ndCBzdXBwb3J0IHJlYWRpbmcgKi8KIAkJfQpAQCAtMTQzMSw5ICsxNDE2LDExIEBACiAJc3Vicy0+Y3VyX2F1ZGlvZm10ID0gZm10OwogCiAjaWYgMAotCXByaW50aygic2V0dGluZyBkb25lOiBmb3JtYXQgPSAlZCwgcmF0ZSA9ICVkLi4lZCwgY2hhbm5lbHMgPSAlZFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAic2V0dGluZyBkb25lOiBmb3JtYXQgPSAlZCwgcmF0ZSA9ICVkLi4lZCwgY2hhbm5lbHMgPSAlZFxuIiwKIAkgICAgICAgZm10LT5mb3JtYXQsIGZtdC0+cmF0ZV9taW4sIGZtdC0+cmF0ZV9tYXgsIGZtdC0+Y2hhbm5lbHMpOwotCXByaW50aygiICBkYXRhcGlwZSA9IDB4JTB4LCBzeW5jcGlwZSA9IDB4JTB4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIGRhdGFwaXBlID0gMHglMHgsIHN5bmNwaXBlID0gMHglMHhcbiIsCiAJICAgICAgIHN1YnMtPmRhdGFwaXBlLCBzdWJzLT5zeW5jcGlwZSk7CiAjZW5kaWYKIApAQCAtMTQ2OCw3ICsxNDU1LDcgQEAKIAljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhod19wYXJhbXMpOwogCWZtdCA9IGZpbmRfZm9ybWF0KHN1YnMsIGZvcm1hdCwgcmF0ZSwgY2hhbm5lbHMpOwogCWlmICghZm10KSB7Ci0JCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiY2Fubm90IHNldCBmb3JtYXQ6IGZvcm1hdCA9IDB4JXgsIHJhdGUgPSAlZCwgY2hhbm5lbHMgPSAlZFxuIiwKKwkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJjYW5ub3Qgc2V0IGZvcm1hdDogZm9ybWF0ID0gJSN4LCByYXRlID0gJWQsIGNoYW5uZWxzID0gJWRcbiIsCiAJCQkgICBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTc5NSw3ICsxNzgyLDcgQEAKIAkJCWlmIChyYXRlc1tmLT5mb3JtYXRdICYmIHJhdGVzW2YtPmZvcm1hdF0gIT0gZi0+cmF0ZXMpCiAJCQkJZ290byBfX291dDsKIAkJfQotCQljaGFubmVsc1tmLT5mb3JtYXRdIHw9ICgxIDw8IGYtPmNoYW5uZWxzKTsKKwkJY2hhbm5lbHNbZi0+Zm9ybWF0XSB8PSAxIDw8IChmLT5jaGFubmVscyAtIDEpOwogCQlyYXRlc1tmLT5mb3JtYXRdIHw9IGYtPnJhdGVzOwogCQkvKiBuZWVkcyBrbm90PyAqLwogCQlpZiAoZi0+cmF0ZXMgJiBTTkRSVl9QQ01fUkFURV9LTk9UKQpAQCAtMTgyMiw3ICsxODA5LDcgQEAKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQkJaWYgKGYtPnJhdGVzICYgKDEgPDwgaSkpCi0JCQkJY2hhbm5lbHNbaV0gfD0gKDEgPDwgZi0+Y2hhbm5lbHMpOworCQkJCWNoYW5uZWxzW2ldIHw9IDEgPDwgKGYtPmNoYW5uZWxzIC0gMSk7CiAJCX0KIAl9CiAJY21hc3RlciA9IDA7CkBAIC0xOTE5LDcgKzE5MDYsNyBAQAogCSAqIGluIHRoZSBjdXJyZW50IGNvZGUgYXNzdW1lIHRoZSAxbXMgcGVyaW9kLgogCSAqLwogCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9USU1FLAotCQkJCSAgICAgMTAwMCAqIE1JTl9QQUNLU19VUkIsCisJCQkJICAgICAxMDAwLAogCQkJCSAgICAgLyoobnJwYWNrcyAqIE1BWF9VUkJTKSAqIDEwMDAqLyBVSU5UX01BWCk7CiAKIAllcnIgPSBjaGVja19od19wYXJhbXNfY29udmVudGlvbihzdWJzKTsKQEAgLTIxNjAsNyArMjE0Nyw3IEBACiAJCWZwID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQsIGxpc3QpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEludGVyZmFjZSAlZFxuIiwgZnAtPmlmYWNlKTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEFsdHNldCAlZFxuIiwgZnAtPmFsdHNldHRpbmcpOwotCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRm9ybWF0OiAweCV4XG4iLCBmcC0+Zm9ybWF0KTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEZvcm1hdDogJSN4XG4iLCBmcC0+Zm9ybWF0KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIENoYW5uZWxzOiAlZFxuIiwgZnAtPmNoYW5uZWxzKTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEVuZHBvaW50OiAlZCAlcyAoJXMpXG4iLAogCQkJICAgIGZwLT5lbmRwb2ludCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSywKQEAgLTIxODAsNyArMjE2Nyw3IEBACiAJCQlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCQl9CiAJCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBNYXggUGFja2V0IFNpemUgPSAlZFxuIiwgZnAtPm1heHBhY2tzaXplKTsKLQkJLy8gc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEVQIEF0dHJpYnV0ZSA9IDB4JXhcbiIsIGZwLT5hdHRyaWJ1dGVzKTsKKwkJLy8gc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEVQIEF0dHJpYnV0ZSA9ICUjeFxuIiwgZnAtPmF0dHJpYnV0ZXMpOwogCX0KIH0KIApAQCAtMjYyMSw3ICsyNjA4LDcgQEAKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfTVBFRzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVkOiV1OiVkIDogdW5rbm93biBmb3JtYXQgdGFnIDB4JXggaXMgZGV0ZWN0ZWQuICBwcm9jZXNzZWQgYXMgTVBFRy5cbiIsCisJCXNuZF9wcmludGQoS0VSTl9JTkZPICIlZDoldTolZCA6IHVua25vd24gZm9ybWF0IHRhZyAlI3ggaXMgZGV0ZWN0ZWQuICBwcm9jZXNzZWQgYXMgTVBFRy5cbiIsCiAJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZywgZm9ybWF0KTsKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfTVBFRzsKIAkJYnJlYWs7CkBAIC0yODE5LDcgKzI4MDYsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiV1OiVkOiBhZGQgYXVkaW8gZW5kcG9pbnQgMHgleFxuIiwgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubywgZnAtPmVuZHBvaW50KTsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDoldTolZDogYWRkIGF1ZGlvIGVuZHBvaW50ICUjeFxuIiwgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubywgZnAtPmVuZHBvaW50KTsKIAkJZXJyID0gYWRkX2F1ZGlvX2VuZHBvaW50KGNoaXAsIHN0cmVhbSwgZnApOwogCQlpZiAoZXJyIDwgMCkgewogCQkJa2ZyZWUoZnAtPnJhdGVfdGFibGUpOwpAQCAtMzQ2NiwxMCArMzQ1MywxMCBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgY3JlYXRlIGNhcmQgaW5zdGFuY2UgJWRcbiIsIGlkeCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwpAQCAtMzc2Niw3ICszNzUzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc25kX3VzYl9hdWRpb19pbml0KHZvaWQpCiB7Ci0JaWYgKG5ycGFja3MgPCBNSU5fUEFDS1NfVVJCIHx8IG5ycGFja3MgPiBNQVhfUEFDS1MpIHsKKwlpZiAobnJwYWNrcyA8IDEgfHwgbnJwYWNrcyA+IE1BWF9QQUNLUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpbnZhbGlkIG5ycGFja3MgdmFsdWUuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCAwMDM5N2M4Li5lY2I1OGU3IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtNjYsNiArNjYsNyBAQAogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDAwKSwgMCwgMSwgMiwgMSwgIDE4LCAweDAwMTMgfSwgLyogRXh0aWd5ICAgICAgICovCiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwMjApLCAyLCAxLCA2LCA2LCAgMTgsIDB4MDAxMyB9LCAvKiBBdWRpZ3kgMiBOWCAgKi8KIAl7IFVTQl9JRCgweDA0MWUsIDB4MzA0MCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIExpdmUhIDI0LWJpdCAqLworCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogVG9zaGliYSBTQjA1MDAgKi8KIH07CiAKIHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlIHsKQEAgLTc4LDcgKzc5LDYgQEAKIAogCS8qIFNvdW5kIEJsYXN0ZXIgcmVtb3RlIGNvbnRyb2wgc3R1ZmYgKi8KIAljb25zdCBzdHJ1Y3QgcmNfY29uZmlnICpyY19jZmc7Ci0JdW5zaWduZWQgbG9uZyByY19od2RlcF9vcGVuOwogCXUzMiByY19jb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IHJjX3dhaXRxOwogCXN0cnVjdCB1cmIgKnJjX3VyYjsKQEAgLTExMCw2ICsxMTAsOCBAQAogCWNvbnN0IHN0cnVjdCB1c2JtaXhfc2VsZWN0b3JfbWFwICpzZWxlY3Rvcl9tYXA7CiB9OwogCisjZGVmaW5lIE1BWF9DSEFOTkVMUwkxMAkvKiBtYXggbG9naWNhbCBjaGFubmVscyAqLworCiBzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyB7CiAJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOwogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpuZXh0X2lkX2VsZW07IC8qIGxpc3Qgb2YgY29udHJvbHMgd2l0aCBzYW1lIGlkICovCkBAIC0xMjAsNiArMTIyLDggQEAKIAlpbnQgY2hhbm5lbHM7CiAJaW50IHZhbF90eXBlOwogCWludCBtaW4sIG1heCwgcmVzOworCWludCBjYWNoZWQ7CisJaW50IGNhY2hlX3ZhbFtNQVhfQ0hBTk5FTFNdOwogCXU4IGluaXRpYWxpemVkOwogfTsKIApAQCAtMTgxLDggKzE4NSw2IEBACiAJVVNCX1BST0NfRENSX1JFTEVBU0UgPSA2LAogfTsKIAotI2RlZmluZSBNQVhfQ0hBTk5FTFMJMTAJLyogbWF4IGxvZ2ljYWwgY2hhbm5lbHMgKi8KLQogCiAvKgogICogbWFudWFsIG1hcHBpbmcgb2YgbWl4ZXIgbmFtZXMKQEAgLTIxOSw3ICsyMjEsMTAgQEAKIAlmb3IgKHAgPSBzdGF0ZS0+bWFwOyBwLT5pZDsgcCsrKSB7CiAJCWlmIChwLT5pZCA9PSB1bml0aWQgJiYgISBwLT5uYW1lICYmCiAJCSAgICAoISBjb250cm9sIHx8ICEgcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKSB7Ci0JCQkvLyBwcmludGsoImlnbm9yZWQgY29udHJvbCAlZDolZFxuIiwgdW5pdGlkLCBjb250cm9sKTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLAorCQkJICAgICAgIHVuaXRpZCwgY29udHJvbCk7CisJCQkqLwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC0zNzYsMTEgKzM4MSwzNSBAQAogfQogCiAvKiBjaGFubmVsID0gMDogbWFzdGVyLCAxID0gZmlyc3QgY2hhbm5lbCAqLwotc3RhdGljIGlubGluZSBpbnQgZ2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLCBpbnQgKnZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZ2V0X2N1cl9taXhfcmF3KHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAorCQkJCSAgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCiB7CiAJcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsCisJCQkgICAgIGludCBjaGFubmVsLCBpbnQgaW5kZXgsIGludCAqdmFsdWUpCit7CisJaW50IGVycjsKKworCWlmIChjdmFsLT5jYWNoZWQgJiAoMSA8PCBjaGFubmVsKSkgeworCQkqdmFsdWUgPSBjdmFsLT5jYWNoZV92YWxbaW5kZXhdOworCQlyZXR1cm4gMDsKKwl9CisJZXJyID0gZ2V0X2N1cl9taXhfcmF3KGN2YWwsIGNoYW5uZWwsIHZhbHVlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlpZiAoIWN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQorCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdXJyZW50IHZhbHVlIGZvciAiCisJCQkJICAgImNvbnRyb2wgJWQgY2ggJWQ6IGVyciA9ICVkXG4iLAorCQkJCSAgIGN2YWwtPmNvbnRyb2wsIGNoYW5uZWwsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWN2YWwtPmNhY2hlZCB8PSAxIDw8IGNoYW5uZWw7CisJY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XSA9ICp2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworCiAvKgogICogc2V0IGEgbWl4ZXIgdmFsdWUKICAqLwpAQCAtNDEyLDkgKzQ0MSwxNyBAQAogCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLAorCQkJICAgICBpbnQgaW5kZXgsIGludCB2YWx1ZSkKIHsKLQlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKKwlpbnQgZXJyOworCWVyciA9IHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLAorCQkJICAgIHZhbHVlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljdmFsLT5jYWNoZWQgfD0gMSA8PCBjaGFubmVsOworCWN2YWwtPmNhY2hlX3ZhbFtpbmRleF0gPSB2YWx1ZTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTcxOCw3ICs3NTUsNyBAQAogCQlpZiAoY3ZhbC0+bWluICsgY3ZhbC0+cmVzIDwgY3ZhbC0+bWF4KSB7CiAJCQlpbnQgbGFzdF92YWxpZF9yZXMgPSBjdmFsLT5yZXM7CiAJCQlpbnQgc2F2ZWQsIHRlc3QsIGNoZWNrOwotCQkJZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAmc2F2ZWQpOworCQkJZ2V0X2N1cl9taXhfcmF3KGN2YWwsIG1pbmNobiwgJnNhdmVkKTsKIAkJCWZvciAoOzspIHsKIAkJCQl0ZXN0ID0gc2F2ZWQ7CiAJCQkJaWYgKHRlc3QgPCBjdmFsLT5tYXgpCkBAIC03MjYsOCArNzYzLDggQEAKIAkJCQllbHNlCiAJCQkJCXRlc3QgLT0gY3ZhbC0+cmVzOwogCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWluIHx8IHRlc3QgPiBjdmFsLT5tYXggfHwKLQkJCQkgICAgc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCB0ZXN0KSB8fAotCQkJCSAgICBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKKwkJCQkgICAgc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAwLCB0ZXN0KSB8fAorCQkJCSAgICBnZXRfY3VyX21peF9yYXcoY3ZhbCwgbWluY2huLCAmY2hlY2spKSB7CiAJCQkJCWN2YWwtPnJlcyA9IGxhc3RfdmFsaWRfcmVzOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC03MzUsNyArNzcyLDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkJY3ZhbC0+cmVzICo9IDI7CiAJCQl9Ci0JCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHNhdmVkKTsKKwkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgMCwgc2F2ZWQpOwogCQl9CiAKIAkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOwpAQCAtNzc1LDM1ICs4MTIsMjUgQEAKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCA9IGtjb250cm9sLT5wcml2YXRlX2RhdGE7CiAJaW50IGMsIGNudCwgdmFsLCBlcnI7CiAKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKIAlpZiAoY3ZhbC0+Y21hc2spIHsKIAkJY250ID0gMDsKIAkJZm9yIChjID0gMDsgYyA8IE1BWF9DSEFOTkVMUzsgYysrKSB7Ci0JCQlpZiAoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkgewotCQkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmdmFsKTsKLQkJCQlpZiAoZXJyIDwgMCkgewotCQkJCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpIHsKLQkJCQkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCX0KLQkJCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdXJyZW50IHZhbHVlIGZvciBjb250cm9sICVkIGNoICVkOiBlcnIgPSAlZFxuIiwgY3ZhbC0+Y29udHJvbCwgYyArIDEsIGVycik7Ci0JCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCQkJCXZhbCA9IGdldF9yZWxhdGl2ZV92YWx1ZShjdmFsLCB2YWwpOwotCQkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF0gPSB2YWw7Ci0JCQkJY250Kys7Ci0JCQl9CisJCQlpZiAoIShjdmFsLT5jbWFzayAmICgxIDw8IGMpKSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCBjbnQsICZ2YWwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKKwkJCXZhbCA9IGdldF9yZWxhdGl2ZV92YWx1ZShjdmFsLCB2YWwpOworCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XSA9IHZhbDsKKwkJCWNudCsrOwogCQl9CisJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIG1hc3RlciBjaGFubmVsICovCi0JCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsICZ2YWwpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKSB7Ci0JCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgbWFzdGVyIGNoOiBlcnIgPSAlZFxuIiwgY3ZhbC0+Y29udHJvbCwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgJnZhbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKIAkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdmFsOwogCX0KQEAgLTgyMCwzNCArODQ3LDI4IEBACiAJaWYgKGN2YWwtPmNtYXNrKSB7CiAJCWNudCA9IDA7CiAJCWZvciAoYyA9IDA7IGMgPCBNQVhfQ0hBTk5FTFM7IGMrKykgewotCQkJaWYgKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpIHsKLQkJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgJm92YWwpOwotCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikKLQkJCQkJCXJldHVybiAwOwotCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQkJCQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdOwotCQkJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKLQkJCQlpZiAob3ZhbCAhPSB2YWwpIHsKLQkJCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIHZhbCk7Ci0JCQkJCWNoYW5nZWQgPSAxOwotCQkJCX0KLQkJCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgJnZhbCk7Ci0JCQkJY250Kys7CisJCQlpZiAoIShjdmFsLT5jbWFzayAmICgxIDw8IGMpKSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCBjbnQsICZvdmFsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CisJCQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdOworCQkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOworCQkJaWYgKG92YWwgIT0gdmFsKSB7CisJCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgdmFsKTsKKwkJCQljaGFuZ2VkID0gMTsKIAkJCX0KKwkJCWNudCsrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogbWFzdGVyIGNoYW5uZWwgKi8KLQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgJm92YWwpOwotCQlpZiAoZXJyIDwgMCAmJiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikKLQkJCXJldHVybiAwOworCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCAmb3ZhbCk7CiAJCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CiAJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7CiAJCWlmICh2YWwgIT0gb3ZhbCkgewotCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgdmFsKTsKKwkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsIHZhbCk7CiAJCQljaGFuZ2VkID0gMTsKIAkJfQogCX0KQEAgLTE3MDYsNyArMTcyNyw4IEBACiAJCWJyZWFrOwogCS8qIGxpdmUyNGV4dDogNCA9IGxpbmUtaW4gamFjayAqLwogCWNhc2UgMzoJLyogaHAtb3V0IGphY2sgKG1heSBhY3R1YXRlIE11dGUpICovCi0JCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkKIAkJCXNuZF91c2JfbWl4ZXJfbm90aWZ5X2lkKG1peGVyLCBtaXhlci0+cmNfY2ZnLT5tdXRlX21peGVyX2lkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3OTcsMjQgKzE4MTksNiBAQAogCXdha2VfdXAoJm1peGVyLT5yY193YWl0cSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3VzYl9zYnJjX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IGh3LT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbWl4ZXItPnJjX2h3ZGVwX29wZW4pKQotCQlyZXR1cm4gLUVCVVNZOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91c2Jfc2JyY19od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIgPSBody0+cHJpdmF0ZV9kYXRhOwotCi0JY2xlYXJfYml0KDAsICZtaXhlci0+cmNfaHdkZXBfb3Blbik7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGxvbmcgc25kX3VzYl9zYnJjX2h3ZGVwX3JlYWQoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgICBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKQEAgLTE4NjcsOSArMTg3MSw4IEBACiAJaHdkZXAtPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfU0JfUkM7CiAJaHdkZXAtPnByaXZhdGVfZGF0YSA9IG1peGVyOwogCWh3ZGVwLT5vcHMucmVhZCA9IHNuZF91c2Jfc2JyY19od2RlcF9yZWFkOwotCWh3ZGVwLT5vcHMub3BlbiA9IHNuZF91c2Jfc2JyY19od2RlcF9vcGVuOwotCWh3ZGVwLT5vcHMucmVsZWFzZSA9IHNuZF91c2Jfc2JyY19od2RlcF9yZWxlYXNlOwogCWh3ZGVwLT5vcHMucG9sbCA9IHNuZF91c2Jfc2JyY19od2RlcF9wb2xsOworCWh3ZGVwLT5leGNsdXNpdmUgPSAxOwogCiAJbWl4ZXItPnJjX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaXhlci0+cmNfdXJiKQpAQCAtMTk1Niw4ICsxOTU5LDkgQEAKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc25kX2F1ZGlneTJueF9jb250cm9scyk7ICsraSkgewotCQlpZiAoaSA+IDEgJiYgIC8qIExpdmUyNGV4dCBoYXMgMiBMRURzIG9ubHkgKi8KLQkJCW1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwkJaWYgKGkgPiAxICYmIC8qIExpdmUyNGV4dCBoYXMgMiBMRURzIG9ubHkgKi8KKwkJCShtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpKQogCQkJYnJlYWs7IAogCQllcnIgPSBzbmRfY3RsX2FkZChtaXhlci0+Y2hpcC0+Y2FyZCwKIAkJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2F1ZGlneTJueF9jb250cm9sc1tpXSwgbWl4ZXIpKTsKQEAgLTE5OTQsNyArMTk5OCw4IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgamFja3NcblxuIiwgbWl4ZXItPmNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CiAJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSkKIAkJamFja3MgPSBqYWNrc19hdWRpZ3kybng7Ci0JZWxzZSBpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCWVsc2UgaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKQogCQlqYWNrcyA9IGphY2tzX2xpdmUyNGV4dDsKIAllbHNlCiAJCXJldHVybjsKQEAgLTIwNDQsNyArMjA0OSw4IEBACiAJCWdvdG8gX2Vycm9yOwogCiAJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSB8fAotCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpIHsKKwkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkgewogCQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwogCiAJCWlmICgoZXJyID0gc25kX2F1ZGlneTJueF9jb250cm9sc19jcmVhdGUobWl4ZXIpKSA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwppbmRleCBkNzU1YmUwLi4zZTVkNjZjIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKQEAgLTI2MSw2ICsyNjEsMjIgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCitzdGF0aWMgc3RydWN0IHVzYm1peF9uYW1lX21hcCBzY3JhdGNoX2xpdmVfbWFwW10gPSB7CisJLyogMTogSVQgTGluZSAxIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDI6IE9UIExpbmUgMSAoU3BlYWtlcikgKi8KKwkvKiAzOiBJVCBMaW5lIDEgKExpbmUgY29ubmVjdG9yKSAqLworCXsgNCwgIkxpbmUgMSBJbiIgfSwgLyogRlUgKi8KKwkvKiA1OiBPVCBMaW5lIDEgKFVTQiBzdHJlYW1pbmcpICovCisJLyogNjogSVQgTGluZSAyIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDc6IE9UIExpbmUgMiAoU3BlYWtlcikgKi8KKwkvKiA4OiBJVCBMaW5lIDIgKExpbmUgY29ubmVjdG9yKSAqLworCXsgOSwgIkxpbmUgMiBJbiIgfSwgLyogRlUgKi8KKwkvKiAxMDogT1QgTGluZSAyIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDExOiBJVCBNaWMgKExpbmUgY29ubmVjdG9yKSAqLworCS8qIDEyOiBPVCBNaWMgKFVTQiBzdHJlYW1pbmcpICovCisJeyAwIH0gLyogdGVybWluYXRvciAqLworfTsKKwogLyoKICAqIENvbnRyb2wgbWFwIGVudHJpZXMKICAqLwpAQCAtMjg1LDYgKzMwMSwxMSBAQAogCQkubWFwID0gbGl2ZTI0ZXh0X21hcCwKIAl9LAogCXsKKwkJLmlkID0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSwKKwkJLm1hcCA9IGF1ZGlneTJueF9tYXAsCisJCS5zZWxlY3Rvcl9tYXAgPSBhdWRpZ3kybnhfc2VsZWN0b3JzLAorCX0sCisJewogCQkvKiBIZXJjdWxlcyBESiBDb25zb2xlIChXaW5kb3dzIEVkaXRpb24pICovCiAJCS5pZCA9IFVTQl9JRCgweDA2ZjgsIDB4YjAwMCksCiAJCS5pZ25vcmVfY3RsX2Vycm9yID0gMSwKQEAgLTMxMSw2ICszMzIsMTEgQEAKIAkJLmlkID0gVVNCX0lEKDB4MGNjZCwgMHgwMDI4KSwKIAkJLm1hcCA9IGF1cmVvbl81MV8yX21hcCwKIAl9LAorCXsKKwkJLmlkID0gVVNCX0lEKDB4MTNlNSwgMHgwMDAxKSwKKwkJLm1hcCA9IHNjcmF0Y2hfbGl2ZV9tYXAsCisJCS5pZ25vcmVfY3RsX2Vycm9yID0gMSwKKwl9LAogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JxdWlya3MuaCBiL3NvdW5kL3VzYi91c2JxdWlya3MuaAppbmRleCA1ZDhlZjA5Li42NDdlZjUwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNicXVpcmtzLmgKKysrIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCkBAIC0zOSw2ICszOSwxNiBAQAogCS5pZFByb2R1Y3QgPSBwcm9kLCBcCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQwogCisvKiBDcmVhdGl2ZS9Ub3NoaWJhIE11bHRpbWVkaWEgQ2VudGVyIFNCLTA1MDAgKi8KK3sKKwlVU0JfREVWSUNFKDB4MDQxZSwgMHgzMDQ4KSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIlRvc2hpYmEiLAorCQkucHJvZHVjdF9uYW1lID0gIlNCLTA1MDAiLAorCQkuaWZudW0gPSBRVUlSS19OT19JTlRFUkZBQ0UKKwl9Cit9LAorCiAvKiBDcmVhdGl2ZS9FLU11IGRldmljZXMgKi8KIHsKIAlVU0JfREVWSUNFKDB4MDQxZSwgMHgzMDEwKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwppbmRleCA3M2U1OWY0Li45ODI3NmFhIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCkBAIC00NzgsMTkgKzQ3OCwyMSBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICp1c3gyeV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCB1c3gyeV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQJCWRldjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKwogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7ICsrZGV2KQogCQlpZiAoZW5hYmxlW2Rldl0gJiYgIXNuZF91czEyMmxfY2FyZF91c2VkW2Rldl0pCiAJCQlicmVhazsKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gTlVMTDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgdXMxMjJsKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1czEyMmwpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX3VzMTIybF9jYXJkX3VzZWRbVVMxMjJMKGNhcmQpLT5jaGlwLmluZGV4ID0gZGV2XSA9IDE7CiAKIAlVUzEyMkwoY2FyZCktPmNoaXAuZGV2ID0gZGV2aWNlOwpAQCAtNTA5LDQ2ICs1MTEsNTcgQEAKIAkJVVMxMjJMKGNhcmQpLT5jaGlwLmRldi0+ZGV2bnVtCiAJCSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2aWNlLT5kZXYpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICp1czEyMmxfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCkKK3N0YXRpYyBpbnQgdXMxMjJsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkLAorCQkJICAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHVzeDJ5X2NyZWF0ZV9jYXJkKGRldmljZSk7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHVzeDJ5X2NyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKCF1czEyMmxfY3JlYXRlX2NhcmQoY2FyZCkgfHwKLQkgICAgc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkgPCAwKSB7CisJaWYgKCF1czEyMmxfY3JlYXRlX2NhcmQoY2FyZCkpIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJdXNiX2dldF9kZXYoZGV2aWNlKTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF91czEyMmxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyIlcDolaVxuIiwKIAkJICAgIGludGYsIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDEpCiAJCXJldHVybiAwOwogCi0JY2FyZCA9IHVzMTIybF91c2JfcHJvYmUodXNiX2dldF9pbnRmKGludGYpLCBpZCk7Ci0KLQlpZiAoY2FyZCkgewotCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOwotCQlyZXR1cm4gMDsKKwllcnIgPSB1czEyMmxfdXNiX3Byb2JlKHVzYl9nZXRfaW50ZihpbnRmKSwgaWQsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQl1c2JfcHV0X2ludGYoaW50Zik7CisJCXJldHVybiBlcnI7CiAJfQogCi0JdXNiX3B1dF9pbnRmKGludGYpOwotCXJldHVybiAtRUlPOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF91czEyMmxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCmluZGV4IDE1NThhNWMuLjRhZjg3NDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYwpAQCAtMzAsOSArMzAsNiBAQAogI2luY2x1ZGUgInVzYnVzeDJ5LmgiCiAjaW5jbHVkZSAidXNYMllod2RlcC5oIgogCi1pbnQgdXNYMllfaHdkZXBfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwotCi0KIHN0YXRpYyBpbnQgc25kX3VzNDI4Y3Rsc192bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsCiAJCQkJICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKQEAgLTEwNiwxNiArMTAzLDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX2RzcF9zdGF0dXMoc3RydWN0IHNuZF9od2RlcCAqaHcsCiAJCQkJICAgICAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICppbmZvKQogewpAQCAtMjY3LDggKzI1NCw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9VU1gyWTsKIAlody0+cHJpdmF0ZV9kYXRhID0gdXNYMlkoY2FyZCk7Ci0JaHctPm9wcy5vcGVuID0gc25kX3VzWDJZX2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX3VzWDJZX2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gc25kX3VzWDJZX2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHNuZF91c1gyWV9od2RlcF9kc3BfbG9hZDsKIAlody0+b3BzLm1tYXAgPSBzbmRfdXM0MjhjdGxzX21tYXA7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYwppbmRleCA3MGI5NjM1Li4yNDM5M2RhIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCQlzLT5pZGxlX2luc2l6ZSAtPSBtYXhfZGlmZiAtIG1heF9kaWZmXzA7CiAJCXMtPmlkbGVfaW5zaXplICs9IHVyYl9zaXplIC0gcy0+cGVyaW9kX3NpemU7CiAJCWlmIChzLT5pZGxlX2luc2l6ZSA8IDApIHsKLQkJCXNuZF9wcmludGsoIiVpICVpICVpXG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVpICVpICVpXG4iLAogCQkJCSAgIHMtPmlkbGVfaW5zaXplLCB1cmJfc2l6ZSwgcy0+cGVyaW9kX3NpemUpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYgKHMtPmlkbGVfaW5zaXplID09IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKaW5kZXggMTE2MzliZC4uNWNlMGRhMiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKQEAgLTIyNyw5ICsyMjcsOSBAQAogCQogCWlmICh1c1gyWS0+VVMwNCkgewogCQlpZiAoMCA9PSB1c1gyWS0+VVMwNC0+c3VibWl0dGVkKQotCQkJZG8KKwkJCWRvIHsKIAkJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1c1gyWS0+VVMwNC0+dXJiW3VzWDJZLT5VUzA0LT5zdWJtaXR0ZWQrK10sIEdGUF9BVE9NSUMpOwotCQkJd2hpbGUgKCFlcnIgJiYgdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCA8IHVzWDJZLT5VUzA0LT5sZW4pOworCQkJfSB3aGlsZSAoIWVyciAmJiB1c1gyWS0+VVMwNC0+c3VibWl0dGVkIDwgdXNYMlktPlVTMDQtPmxlbik7CiAJfSBlbHNlCiAJCWlmICh1czQyOGN0bHMgJiYgdXM0MjhjdGxzLT5wNG91dExhc3QgPj0gMCAmJiB1czQyOGN0bHMtPnA0b3V0TGFzdCA8IE5fdXM0MjhfcDRvdXRfQlVGUykgewogCQkJaWYgKHVzNDI4Y3Rscy0+cDRvdXRMYXN0ICE9IHVzNDI4Y3Rscy0+cDRvdXRTZW50KSB7CkBAIC0zMzMsMTggKzMzMywyMSBAQAogCXsgLyogdGVybWluYXRvciAqLyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICp1c1gyWV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCB1c1gyWV9jcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQJCWRldjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKgljYXJkOworCWludCBlcnI7CisKIAlmb3IgKGRldiA9IDA7IGRldiA8IFNORFJWX0NBUkRTOyArK2RldikKIAkJaWYgKGVuYWJsZVtkZXZdICYmICFzbmRfdXNYMllfY2FyZF91c2VkW2Rldl0pCiAJCQlicmVhazsKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gTlVMTDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHVzWDJZZGV2KSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c1gyWWRldiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfdXNYMllfY2FyZF91c2VkW3VzWDJZKGNhcmQpLT5jaGlwLmluZGV4ID0gZGV2XSA9IDE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3VzWDJZX2NhcmRfcHJpdmF0ZV9mcmVlOwogCXVzWDJZKGNhcmQpLT5jaGlwLmRldiA9IGRldmljZTsKQEAgLTM2MiwyNiArMzY1LDM2IEBACiAJCXVzWDJZKGNhcmQpLT5jaGlwLmRldi0+YnVzLT5idXNudW0sIHVzWDJZKGNhcmQpLT5jaGlwLmRldi0+ZGV2bnVtCiAJCSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2aWNlLT5kZXYpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHZvaWQgKnVzWDJZX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCkKK3N0YXRpYyBpbnQgdXNYMllfdXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsCisJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQsCisJCQkgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlpbnQJCWVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKgljYXJkOworCisJKmNhcmRwID0gTlVMTDsKIAlpZiAobGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSAweDE2MDQgfHwKIAkgICAgKGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzEyMiAmJgogCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTMjI0ICYmCi0JICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVM0MjgpIHx8Ci0JICAgICEoY2FyZCA9IHVzWDJZX2NyZWF0ZV9jYXJkKGRldmljZSkpKQotCQlyZXR1cm4gTlVMTDsKKwkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzQyOCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gdXNYMllfY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSB1c1gyWV9od2RlcF9uZXcoY2FyZCwgZGV2aWNlKSkgPCAwICB8fAogCSAgICAoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGVycjsKIAl9Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTM4OSwxMyArNDAyLDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3VzWDJZX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0Jdm9pZCAqY2hpcDsKLQljaGlwID0gdXNYMllfdXNiX3Byb2JlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYsIGlkKTsKLQlpZiAoY2hpcCkgewotCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNoaXApOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU87CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKKwllcnIgPSB1c1gyWV91c2JfcHJvYmUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgaW50ZiwgaWQsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlkZXZfc2V0X2RydmRhdGEoJmludGYtPmRldiwgY2FyZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF91c1gyWV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaCBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKaW5kZXggYzMzODJmZC4uOWM0ZmI4NCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaAorKysgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCkBAIC0xOCwzICsxOCw1IEBACiAJdm9sYXRpbGUgdW5zaWduZWQgY2FwdHVyZWRfaXNvX2ZyYW1lczsKIAlpbnQgY2FwdHVyZV9pc29fc3RhcnQ7CiB9OworCitpbnQgdXNYMllfaHdkZXBfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwpkaWZmIC0tZ2l0IGEvdXNyL0tjb25maWcgYi91c3IvS2NvbmZpZwppbmRleCA4NmNlY2I1Li41ODhjNTg4IDEwMDY0NAotLS0gYS91c3IvS2NvbmZpZworKysgYi91c3IvS2NvbmZpZwpAQCAtNDQsMyArNDQsMTA0IEBACiAJICBvd25lZCBieSBncm91cCByb290IGluIHRoZSBpbml0aWFsIHJhbWRpc2sgaW1hZ2UuCiAKIAkgIElmIHlvdSBhcmUgbm90IHN1cmUsIGxlYXZlIGl0IHNldCB0byAiMCIuCisKK2NvbmZpZyBSRF9HWklQCisJYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgZ3ppcCIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJECisJc2VsZWN0IERFQ09NUFJFU1NfR1pJUAorCWhlbHAKKwkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGd6aXAgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIuCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgUkRfQlpJUDIKKwlib29sICJTdXBwb3J0IGluaXRpYWwgcmFtZGlza3MgY29tcHJlc3NlZCB1c2luZyBiemlwMiIgaWYgRU1CRURERUQKKwlkZWZhdWx0ICFFTUJFRERFRAorCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKKwlzZWxlY3QgREVDT01QUkVTU19CWklQMgorCWhlbHAKKwkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGJ6aXAyIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgUkRfTFpNQQorCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIExaTUEiIGlmIEVNQkVEREVECisJZGVmYXVsdCAhRU1CRURERUQKKwlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJECisJc2VsZWN0IERFQ09NUFJFU1NfTFpNQQorCWhlbHAKKwkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIExaTUEgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2lmIElOSVRSQU1GU19TT1VSQ0UhPSIiCisKK2Nob2ljZQorCXByb21wdCAiQnVpbHQtaW4gaW5pdHJhbWZzIGNvbXByZXNzaW9uIG1vZGUiCisJaGVscAorCSAgVGhpcyBvcHRpb24gZGVjaWRlcyBieSB3aGljaCBhbGdvcml0aG0gdGhlIGJ1aWx0aW4gaW5pdHJhbWZzCisJICB3aWxsIGJlIGNvbXByZXNzZWQuICBTZXZlcmFsIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYXJlCisJICBhdmFpbGFibGUsIHdoaWNoIGRpZmZlciBpbiBlZmZpY2llbmN5LCBjb21wcmVzc2lvbiBhbmQKKwkgIGRlY29tcHJlc3Npb24gc3BlZWQuICBDb21wcmVzc2lvbiBzcGVlZCBpcyBvbmx5IHJlbGV2YW50CisJICB3aGVuIGJ1aWxkaW5nIGEga2VybmVsLiAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyByZWxldmFudCBhdAorCSAgZWFjaCBib290LgorCisJICBJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgd2l0aCBiemlwMiBvciBMWk1BIGNvbXByZXNzZWQKKwkgIGluaXRyYW1mcywgbWFpbCBtZSAoQWxhaW4gS25hZmYpIDxhbGFpbkBrbmFmZi5sdT4uCisKKwkgIEhpZ2ggY29tcHJlc3Npb24gb3B0aW9ucyBhcmUgbW9zdGx5IHVzZWZ1bCBmb3IgdXNlcnMgd2hvIGFyZQorCSAgbG93IG9uIFJBTSwgc2luY2UgaXQgcmVkdWNlcyB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIGR1cmluZworCSAgYm9vdC4KKworCSAgSWYgaW4gZG91YnQsIHNlbGVjdCAnZ3ppcCcKKworY29uZmlnIElOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FCisJYm9vbCAiTm9uZSIKKwloZWxwCisJICBEbyBub3QgY29tcHJlc3MgdGhlIGJ1aWx0LWluIGluaXRyYW1mcyBhdCBhbGwuIFRoaXMgbWF5CisJICBzb3VuZCB3YXN0ZWZ1bCBpbiBzcGFjZSwgYnV0LCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhlCisJICBidWlsdC1pbiBpbml0cmFtZnMgd2lsbCBiZSBjb21wcmVzc2VkIGF0IGEgbGF0ZXIgc3RhZ2UKKwkgIGFueXdheXMgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBvbiB0aG9zZQorCSAgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgdGhpcy4KKwkgIEhvd2V2ZXIsIG5vdCBjb21wcmVzc2luZyB0aGUgaW5pdHJhbWZzIG1heSBsZWFkIHRvIHNsaWdodGx5CisJICBoaWdoZXIgbWVtb3J5IGNvbnN1bXB0aW9uIGR1cmluZyBhIHNob3J0IHRpbWUgYXQgYm9vdCwgd2hpbGUKKwkgIGJvdGggdGhlIGNwaW8gaW1hZ2UgYW5kIHRoZSB1bnBhY2tlZCBmaWxlc3lzdGVtIGltYWdlIHdpbGwKKwkgIGJlIHByZXNlbnQgaW4gbWVtb3J5IHNpbXVsdGFuZW91c2x5CisKK2NvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUAorCWJvb2wgIkd6aXAiCisJZGVwZW5kcyBvbiBSRF9HWklQCisJaGVscAorCSAgVGhlIG9sZCBhbmQgdHJpZWQgZ3ppcCBjb21wcmVzc2lvbi4gSXRzIGNvbXByZXNzaW9uIHJhdGlvIGlzCisJICB0aGUgcG9vcmVzdCBhbW9uZyB0aGUgMyBjaG9pY2VzOyBob3dldmVyIGl0cyBzcGVlZCAoYm90aAorCSAgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24pIGlzIHRoZSBmYXN0ZXN0LgorCitjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyCisJYm9vbCAiQnppcDIiCisJZGVwZW5kcyBvbiBSRF9CWklQMgorCWhlbHAKKwkgIEl0cyBjb21wcmVzc2lvbiByYXRpbyBhbmQgc3BlZWQgaXMgaW50ZXJtZWRpYXRlLgorCSAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyBzbG93ZXN0IGFtb25nIHRoZSB0aHJlZS4gIFRoZSBpbml0cmFtZnMKKwkgIHNpemUgaXMgYWJvdXQgMTAlIHNtYWxsZXIgd2l0aCBiemlwMiwgaW4gY29tcGFyaXNvbiB0byBnemlwLgorCSAgQnppcDIgdXNlcyBhIGxhcmdlIGFtb3VudCBvZiBtZW1vcnkuIEZvciBtb2Rlcm4ga2VybmVscyB5b3UKKwkgIHdpbGwgbmVlZCBhdCBsZWFzdCA4TUIgUkFNIG9yIG1vcmUgZm9yIGJvb3RpbmcuCisKK2NvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fTFpNQQorCWJvb2wgIkxaTUEiCisJZGVwZW5kcyBvbiBSRF9MWk1BCisJaGVscAorCSAgVGhlIG1vc3QgcmVjZW50IGNvbXByZXNzaW9uIGFsZ29yaXRobS4KKwkgIEl0cyByYXRpbyBpcyBiZXN0LCBkZWNvbXByZXNzaW9uIHNwZWVkIGlzIGJldHdlZW4gdGhlIG90aGVyCisJICB0d28uIENvbXByZXNzaW9uIGlzIHNsb3dlc3QuCVRoZSBpbml0cmFtZnMgc2l6ZSBpcyBhYm91dCAzMyUKKwkgIHNtYWxsZXIgd2l0aCBMWk1BIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KKworZW5kY2hvaWNlCisKK2VuZGlmCisKK2lmIElOSVRSQU1GU19TT1VSQ0U9IiIKKyMgVGhlIGJ1aWx0aW4gaW5pdHJhbWZzIGlzIHNvIHNtYWxsIHNvIHdlIGRvbid0IHdhbnQgdG8gYnVnIHRoZSB1c2VyLi4uCisKK2NvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORQorCWJvb2wKKwlkZWZhdWx0IHkKKworZW5kaWYKZGlmZiAtLWdpdCBhL3Vzci9NYWtlZmlsZSBiL3Vzci9NYWtlZmlsZQppbmRleCAyMDFmMjdmLi5iODQ4OTRiIDEwMDY0NAotLS0gYS91c3IvTWFrZWZpbGUKKysrIGIvdXNyL01ha2VmaWxlCkBAIC02LDEzICs2LDI1IEBACiBQSE9OWSArPSBrbGliY2RpcnMKIAogCi0jIEdlbmVyYXRlIGJ1aWx0aW4ubyBiYXNlZCBvbiBpbml0cmFtZnNfZGF0YS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9JTklUUkQpIDo9IGluaXRyYW1mc19kYXRhLm8KKyMgTm8gY29tcHJlc3Npb24KK3N1ZmZpeF8kKENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORSkgICA9CiAKLSMgaW5pdHJhbWZzX2RhdGEubyBjb250YWlucyB0aGUgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpbWFnZS4KKyMgR3ppcCwgYnV0IG5vIGJ6aXAyCitzdWZmaXhfJChDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVApICAgPSAuZ3oKKworIyBCemlwMgorc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9CWklQMikgID0gLmJ6MgorCisjIEx6bWEKK3N1ZmZpeF8kKENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTFpNQSkgICA9IC5sem1hCisKKyMgR2VuZXJhdGUgYnVpbHRpbi5vIGJhc2VkIG9uIGluaXRyYW1mc19kYXRhLm8KK29iai0kKENPTkZJR19CTEtfREVWX0lOSVRSRCkgOj0gaW5pdHJhbWZzX2RhdGEkKHN1ZmZpeF95KS5vCisKKyMgaW5pdHJhbWZzX2RhdGEubyBjb250YWlucyB0aGUgY29tcHJlc3NlZCBpbml0cmFtZnNfZGF0YS5jcGlvIGltYWdlLgogIyBUaGUgaW1hZ2UgaXMgaW5jbHVkZWQgdXNpbmcgLmluY2JpbiwgYSBkZXBlbmRlbmN5IHdoaWNoIGlzIG5vdAogIyB0cmFja2VkIGF1dG9tYXRpY2FsbHkuCi0kKG9iaikvaW5pdHJhbWZzX2RhdGEubzogJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8uZ3ogRk9SQ0UKKyQob2JqKS9pbml0cmFtZnNfZGF0YSQoc3VmZml4X3kpLm86ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvJChzdWZmaXhfeSkgRk9SQ0UKIAogIyMjIyMKICMgR2VuZXJhdGUgdGhlIGluaXRyYW1mcyBjcGlvIGFyY2hpdmUKQEAgLTI1LDI4ICszNywyOCBAQAogICAgICAgICAkKGlmICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCksIC11ICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCkpIFwKICAgICAgICAgJChpZiAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpLCAtZyAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpKQogCi0jIC5pbml0cmFtZnNfZGF0YS5jcGlvLmd6LmQgaXMgdXNlZCB0byBpZGVudGlmeSBhbGwgZmlsZXMgaW5jbHVkZWQKKyMgLmluaXRyYW1mc19kYXRhLmNwaW8uZCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFsbCBmaWxlcyBpbmNsdWRlZAogIyBpbiBpbml0cmFtZnMgYW5kIHRvIGRldGVjdCBpZiBhbnkgZmlsZXMgYXJlIGFkZGVkL3JlbW92ZWQuCiAjIFJlbW92ZWQgZmlsZXMgYXJlIGlkZW50aWZpZWQgYnkgZGlyZWN0b3J5IHRpbWVzdGFtcCBiZWluZyB1cGRhdGVkCiAjIFRoZSBkZXBlbmRlbmN5IGxpc3QgaXMgZ2VuZXJhdGVkIGJ5IGdlbl9pbml0cmFtZnMuc2ggLWwKLWlmbmVxICgkKHdpbGRjYXJkICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kKSwpCi0JaW5jbHVkZSAkKG9iaikvLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZAoraWZuZXEgKCQod2lsZGNhcmQgJChvYmopLy5pbml0cmFtZnNfZGF0YS5jcGlvLmQpLCkKKwlpbmNsdWRlICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5kCiBlbmRpZgogCiBxdWlldF9jbWRfaW5pdGZzID0gR0VOICAgICAkQAogICAgICAgY21kX2luaXRmcyA9ICQoaW5pdHJhbWZzKSAtbyAkQCAkKHJhbWZzLWFyZ3MpICQocmFtZnMtaW5wdXQpCiAKLXRhcmdldHMgOj0gaW5pdHJhbWZzX2RhdGEuY3Bpby5negordGFyZ2V0cyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IGluaXRyYW1mc19kYXRhLmNwaW8uYnoyIGluaXRyYW1mc19kYXRhLmNwaW8ubHptYSBpbml0cmFtZnNfZGF0YS5jcGlvCiAjIGRvIG5vdCB0cnkgdG8gdXBkYXRlIGZpbGVzIGluY2x1ZGVkIGluIGluaXRyYW1mcwogJChkZXBzX2luaXRyYW1mcyk6IDsKIAogJChkZXBzX2luaXRyYW1mcyk6IGtsaWJjZGlycwotIyBXZSByZWJ1aWxkIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaWY6Ci0jIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoZW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyBXZSByZWJ1aWxkIGluaXRyYW1mc19kYXRhLmNwaW8gaWY6CisjIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoZW4gaW5pdHJhbWZzX2RhdGEuY3BpbwogIyAyKSBUaGVyZSBhcmUgY2hhbmdlcyBpbiB3aGljaCBmaWxlcyBhcmUgaW5jbHVkZWQgKGFkZGVkIG9yIGRlbGV0ZWQpCi0jIDMpIElmIGdlbl9pbml0X2NwaW8gYXJlIG5ld2VyIHRoYW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyAzKSBJZiBnZW5faW5pdF9jcGlvIGFyZSBuZXdlciB0aGFuIGluaXRyYW1mc19kYXRhLmNwaW8KICMgNCkgYXJndW1lbnRzIHRvIGdlbl9pbml0cmFtZnMuc2ggY2hhbmdlcwotJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8uZ3o6ICQob2JqKS9nZW5faW5pdF9jcGlvICQoZGVwc19pbml0cmFtZnMpIGtsaWJjZGlycwotCSQoUSkkKGluaXRyYW1mcykgLWwgJChyYW1mcy1pbnB1dCkgPiAkKG9iaikvLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZAorJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8kKHN1ZmZpeF95KTogJChvYmopL2dlbl9pbml0X2NwaW8gJChkZXBzX2luaXRyYW1mcykga2xpYmNkaXJzCisJJChRKSQoaW5pdHJhbWZzKSAtbCAkKHJhbWZzLWlucHV0KSA+ICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5kCiAJJChjYWxsIGlmX2NoYW5nZWQsaW5pdGZzKQogCmRpZmYgLS1naXQgYS91c3IvaW5pdHJhbWZzX2RhdGEuUyBiL3Vzci9pbml0cmFtZnNfZGF0YS5TCmluZGV4IGMyZTFhZDQuLjdjNjk3M2QgMTAwNjQ0Ci0tLSBhL3Vzci9pbml0cmFtZnNfZGF0YS5TCisrKyBiL3Vzci9pbml0cmFtZnNfZGF0YS5TCkBAIC0yNiw1ICsyNiw1IEBACiAqLwogCiAuc2VjdGlvbiAuaW5pdC5yYW1mcywiYSIKLS5pbmNiaW4gInVzci9pbml0cmFtZnNfZGF0YS5jcGlvLmd6IgorLmluY2JpbiAidXNyL2luaXRyYW1mc19kYXRhLmNwaW8iCiAKZGlmZiAtLWdpdCBhL3Vzci9pbml0cmFtZnNfZGF0YS5iejIuUyBiL3Vzci9pbml0cmFtZnNfZGF0YS5iejIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzU0ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvdXNyL2luaXRyYW1mc19kYXRhLmJ6Mi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgIGluaXRyYW1mc19kYXRhIGluY2x1ZGVzIHRoZSBjb21wcmVzc2VkIGJpbmFyeSB0aGF0IGlzIHRoZQorICBmaWxlc3lzdGVtIHVzZWQgZm9yIGVhcmx5IHVzZXIgc3BhY2UuCisgIE5vdGU6IE9sZGVyIHZlcnNpb25zIG9mICJhcyIgKHByaW9yIHRvIGJpbnV0aWxzIDIuMTEuOTAuMC4yMworICByZWxlYXNlZCBvbiAyMDAxLTA3LTE0KSBkaXQgbm90IHN1cHBvcnQgLmluY2Jpbi4KKyAgSWYgeW91IGFyZSBmb3JjZWQgdG8gdXNlIG9sZGVyIGJpbnV0aWxzIHRoYW4gdGhhdCB0aGVuIHRoZQorICBmb2xsb3dpbmcgdHJpY2sgY2FuIGJlIGFwcGxpZWQgdG8gY3JlYXRlIHRoZSByZXN1bHRpbmcgYmluYXJ5OgorCisKKyAgbGQgLW0gZWxmX2kzODYgIC0tZm9ybWF0IGJpbmFyeSAtLW9mb3JtYXQgZWxmMzItaTM4NiAtciBcCisgIC1UIGluaXRyYW1mc19kYXRhLnNjciBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IC1vIGluaXRyYW1mc19kYXRhLm8KKyAgIGxkIC1tIGVsZl9pMzg2ICAtciAtbyBidWlsdC1pbi5vIGluaXRyYW1mc19kYXRhLm8KKworICBpbml0cmFtZnNfZGF0YS5zY3IgbG9va3MgbGlrZSB0aGlzOgorU0VDVElPTlMKK3sKKyAgICAgICAuaW5pdC5yYW1mcyA6IHsgKiguZGF0YSkgfQorfQorCisgIFRoZSBhYm92ZSBleGFtcGxlIGlzIGZvciBpMzg2IC0gdGhlIHBhcmFtZXRlcnMgdmFyeSBmcm9tIGFyY2hpdGVjdHVyZXMuCisgIEV2ZW50dWFsbHkgbG9vayB1cCBMREZMQUdTX0JMT0IgaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUKKyAgYXJjaC8kKEFSQ0gpL01ha2VmaWxlIHRvIHNlZSB0aGUgZmxhZ3MgdXNlZCBiZWZvcmUgLmluY2JpbiB3YXMgaW50cm9kdWNlZC4KKworICBVc2luZyAuaW5jYmluIGhhcyB0aGUgYWR2YW50YWdlIG92ZXIgbGQgdGhhdCB0aGUgY29ycmVjdCBmbGFncyBhcmUgc2V0CisgIGluIHRoZSBFTEYgaGVhZGVyLCBhcyByZXF1aXJlZCBieSBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuCisqLworCisuc2VjdGlvbiAuaW5pdC5yYW1mcywiYSIKKy5pbmNiaW4gInVzci9pbml0cmFtZnNfZGF0YS5jcGlvLmJ6MiIKZGlmZiAtLWdpdCBhL3Vzci9pbml0cmFtZnNfZGF0YS5nei5TIGIvdXNyL2luaXRyYW1mc19kYXRhLmd6LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwYzhkZAotLS0gL2Rldi9udWxsCisrKyBiL3Vzci9pbml0cmFtZnNfZGF0YS5nei5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgIGluaXRyYW1mc19kYXRhIGluY2x1ZGVzIHRoZSBjb21wcmVzc2VkIGJpbmFyeSB0aGF0IGlzIHRoZQorICBmaWxlc3lzdGVtIHVzZWQgZm9yIGVhcmx5IHVzZXIgc3BhY2UuCisgIE5vdGU6IE9sZGVyIHZlcnNpb25zIG9mICJhcyIgKHByaW9yIHRvIGJpbnV0aWxzIDIuMTEuOTAuMC4yMworICByZWxlYXNlZCBvbiAyMDAxLTA3LTE0KSBkaXQgbm90IHN1cHBvcnQgLmluY2Jpbi4KKyAgSWYgeW91IGFyZSBmb3JjZWQgdG8gdXNlIG9sZGVyIGJpbnV0aWxzIHRoYW4gdGhhdCB0aGVuIHRoZQorICBmb2xsb3dpbmcgdHJpY2sgY2FuIGJlIGFwcGxpZWQgdG8gY3JlYXRlIHRoZSByZXN1bHRpbmcgYmluYXJ5OgorCisKKyAgbGQgLW0gZWxmX2kzODYgIC0tZm9ybWF0IGJpbmFyeSAtLW9mb3JtYXQgZWxmMzItaTM4NiAtciBcCisgIC1UIGluaXRyYW1mc19kYXRhLnNjciBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IC1vIGluaXRyYW1mc19kYXRhLm8KKyAgIGxkIC1tIGVsZl9pMzg2ICAtciAtbyBidWlsdC1pbi5vIGluaXRyYW1mc19kYXRhLm8KKworICBpbml0cmFtZnNfZGF0YS5zY3IgbG9va3MgbGlrZSB0aGlzOgorU0VDVElPTlMKK3sKKyAgICAgICAuaW5pdC5yYW1mcyA6IHsgKiguZGF0YSkgfQorfQorCisgIFRoZSBhYm92ZSBleGFtcGxlIGlzIGZvciBpMzg2IC0gdGhlIHBhcmFtZXRlcnMgdmFyeSBmcm9tIGFyY2hpdGVjdHVyZXMuCisgIEV2ZW50dWFsbHkgbG9vayB1cCBMREZMQUdTX0JMT0IgaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUKKyAgYXJjaC8kKEFSQ0gpL01ha2VmaWxlIHRvIHNlZSB0aGUgZmxhZ3MgdXNlZCBiZWZvcmUgLmluY2JpbiB3YXMgaW50cm9kdWNlZC4KKworICBVc2luZyAuaW5jYmluIGhhcyB0aGUgYWR2YW50YWdlIG92ZXIgbGQgdGhhdCB0aGUgY29ycmVjdCBmbGFncyBhcmUgc2V0CisgIGluIHRoZSBFTEYgaGVhZGVyLCBhcyByZXF1aXJlZCBieSBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuCisqLworCisuc2VjdGlvbiAuaW5pdC5yYW1mcywiYSIKKy5pbmNiaW4gInVzci9pbml0cmFtZnNfZGF0YS5jcGlvLmd6IgpkaWZmIC0tZ2l0IGEvdXNyL2luaXRyYW1mc19kYXRhLmx6bWEuUyBiL3Vzci9pbml0cmFtZnNfZGF0YS5sem1hLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExNDY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Vzci9pbml0cmFtZnNfZGF0YS5sem1hLlMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAgaW5pdHJhbWZzX2RhdGEgaW5jbHVkZXMgdGhlIGNvbXByZXNzZWQgYmluYXJ5IHRoYXQgaXMgdGhlCisgIGZpbGVzeXN0ZW0gdXNlZCBmb3IgZWFybHkgdXNlciBzcGFjZS4KKyAgTm90ZTogT2xkZXIgdmVyc2lvbnMgb2YgImFzIiAocHJpb3IgdG8gYmludXRpbHMgMi4xMS45MC4wLjIzCisgIHJlbGVhc2VkIG9uIDIwMDEtMDctMTQpIGRpdCBub3Qgc3VwcG9ydCAuaW5jYmluLgorICBJZiB5b3UgYXJlIGZvcmNlZCB0byB1c2Ugb2xkZXIgYmludXRpbHMgdGhhbiB0aGF0IHRoZW4gdGhlCisgIGZvbGxvd2luZyB0cmljayBjYW4gYmUgYXBwbGllZCB0byBjcmVhdGUgdGhlIHJlc3VsdGluZyBiaW5hcnk6CisKKworICBsZCAtbSBlbGZfaTM4NiAgLS1mb3JtYXQgYmluYXJ5IC0tb2Zvcm1hdCBlbGYzMi1pMzg2IC1yIFwKKyAgLVQgaW5pdHJhbWZzX2RhdGEuc2NyIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogLW8gaW5pdHJhbWZzX2RhdGEubworICAgbGQgLW0gZWxmX2kzODYgIC1yIC1vIGJ1aWx0LWluLm8gaW5pdHJhbWZzX2RhdGEubworCisgIGluaXRyYW1mc19kYXRhLnNjciBsb29rcyBsaWtlIHRoaXM6CitTRUNUSU9OUworeworICAgICAgIC5pbml0LnJhbWZzIDogeyAqKC5kYXRhKSB9Cit9CisKKyAgVGhlIGFib3ZlIGV4YW1wbGUgaXMgZm9yIGkzODYgLSB0aGUgcGFyYW1ldGVycyB2YXJ5IGZyb20gYXJjaGl0ZWN0dXJlcy4KKyAgRXZlbnR1YWxseSBsb29rIHVwIExERkxBR1NfQkxPQiBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZQorICBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgdG8gc2VlIHRoZSBmbGFncyB1c2VkIGJlZm9yZSAuaW5jYmluIHdhcyBpbnRyb2R1Y2VkLgorCisgIFVzaW5nIC5pbmNiaW4gaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciBsZCB0aGF0IHRoZSBjb3JyZWN0IGZsYWdzIGFyZSBzZXQKKyAgaW4gdGhlIEVMRiBoZWFkZXIsIGFzIHJlcXVpcmVkIGJ5IGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy4KKyovCisKKy5zZWN0aW9uIC5pbml0LnJhbWZzLCJhIgorLmluY2JpbiAidXNyL2luaXRyYW1mc19kYXRhLmNwaW8ubHptYSIKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5jIGIvdmlydC9rdm0vaW9hcGljLmMKaW5kZXggMjNiODFjZi4uYzNiOTlkZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmMKKysrIGIvdmlydC9rdm0vaW9hcGljLmMKQEAgLTgzLDI0ICs4MywyOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpZHgpCitzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpZHgpCiB7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5ICpwZW50OworCWludCBpbmplY3RlZCA9IC0xOwogCiAJcGVudCA9ICZpb2FwaWMtPnJlZGlydGJsW2lkeF07CiAKIAlpZiAoIXBlbnQtPmZpZWxkcy5tYXNrKSB7Ci0JCWludCBpbmplY3RlZCA9IGlvYXBpY19kZWxpdmVyKGlvYXBpYywgaWR4KTsKKwkJaW5qZWN0ZWQgPSBpb2FwaWNfZGVsaXZlcihpb2FwaWMsIGlkeCk7CiAJCWlmIChpbmplY3RlZCAmJiBwZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQkJcGVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCX0KIAlpZiAoIXBlbnQtPmZpZWxkcy50cmlnX21vZGUpCiAJCWlvYXBpYy0+aXJyICY9IH4oMSA8PCBpZHgpOworCisJcmV0dXJuIGluamVjdGVkOwogfQogCiBzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBpbmRleDsKKwlib29sIG1hc2tfYmVmb3JlLCBtYXNrX2FmdGVyOwogCiAJc3dpdGNoIChpb2FwaWMtPmlvcmVnc2VsKSB7CiAJY2FzZSBJT0FQSUNfUkVHX1ZFUlNJT046CkBAIC0xMjAsNiArMTI0LDcgQEAKIAkJaW9hcGljX2RlYnVnKCJjaGFuZ2UgcmVkaXIgaW5kZXggJXggdmFsICV4XG4iLCBpbmRleCwgdmFsKTsKIAkJaWYgKGluZGV4ID49IElPQVBJQ19OVU1fUElOUykKIAkJCXJldHVybjsKKwkJbWFza19iZWZvcmUgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKIAkJaWYgKGlvYXBpYy0+aW9yZWdzZWwgJiAxKSB7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzICY9IDB4ZmZmZmZmZmY7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzIHw9ICh1NjQpIHZhbCA8PCAzMjsKQEAgLTEyOCw2ICsxMzMsOSBAQAogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyB8PSAodTMyKSB2YWw7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiAJCX0KKwkJbWFza19hZnRlciA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOworCQlpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcikKKwkJCWt2bV9maXJlX21hc2tfbm90aWZpZXJzKGlvYXBpYy0+a3ZtLCBpbmRleCwgbWFza19hZnRlcik7CiAJCWlmIChpb2FwaWMtPmlyciAmICgxIDw8IGluZGV4KSkKIAkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgpOwogCQlicmVhazsKQEAgLTIwMiw3ICsyMTAsNyBAQAogCXU4IHRyaWdfbW9kZSA9IGlvYXBpYy0+cmVkaXJ0YmxbaXJxXS5maWVsZHMudHJpZ19tb2RlOwogCXUzMiBkZWxpdmVyX2JpdG1hc2s7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCWludCB2Y3B1X2lkLCByID0gMDsKKwlpbnQgdmNwdV9pZCwgciA9IC0xOwogCiAJaW9hcGljX2RlYnVnKCJkZXN0PSV4IGRlc3RfbW9kZT0leCBkZWxpdmVyeV9tb2RlPSV4ICIKIAkJICAgICAidmVjdG9yPSV4IHRyaWdfbW9kZT0leFxuIiwKQEAgLTI0Miw3ICsyNTAsOSBAQAogCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKIAkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07CiAJCQlpZiAodmNwdSkgewotCQkJCXIgPSBpb2FwaWNfaW5qX2lycShpb2FwaWMsIHZjcHUsIHZlY3RvciwKKwkJCQlpZiAociA8IDApCisJCQkJCXIgPSAwOworCQkJCXIgKz0gaW9hcGljX2lual9pcnEoaW9hcGljLCB2Y3B1LCB2ZWN0b3IsCiAJCQkJCSAgICAgICB0cmlnX21vZGUsIGRlbGl2ZXJ5X21vZGUpOwogCQkJfQogCQl9CkBAIC0yNTMsOCArMjYzLDEwIEBACiAJCQkJY29udGludWU7CiAJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwogCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKLQkJCWlmICh2Y3B1KQorCQkJaWYgKHZjcHUpIHsKIAkJCQlpb2FwaWNfaW5qX25taSh2Y3B1KTsKKwkJCQlyID0gMTsKKwkJCX0KIAkJCWVsc2UKIAkJCQlpb2FwaWNfZGVidWcoIk5NSSB0byB2Y3B1ICVkIGZhaWxlZFxuIiwKIAkJCQkJCXZjcHUtPnZjcHVfaWQpOwpAQCAtMjY4LDExICsyODAsMTIgQEAKIAlyZXR1cm4gcjsKIH0KIAotdm9pZCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKQoraW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAJdTMyIG9sZF9pcnIgPSBpb2FwaWMtPmlycjsKIAl1MzIgbWFzayA9IDEgPDwgaXJxOwogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSBlbnRyeTsKKwlpbnQgcmV0ID0gMTsKIAogCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBJT0FQSUNfTlVNX1BJTlMpIHsKIAkJZW50cnkgPSBpb2FwaWMtPnJlZGlydGJsW2lycV07CkBAIC0yODMsMjUgKzI5NiwyNiBAQAogCQkJaW9hcGljLT5pcnIgfD0gbWFzazsKIAkJCWlmICgoIWVudHJ5LmZpZWxkcy50cmlnX21vZGUgJiYgb2xkX2lyciAhPSBpb2FwaWMtPmlycikKIAkJCSAgICB8fCAhZW50cnkuZmllbGRzLnJlbW90ZV9pcnIpCi0JCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEpOworCQkJCXJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxKTsKIAkJfQogCX0KKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgZ3NpLAorc3RhdGljIHZvaWQgX19rdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IHBpbiwKIAkJCQkgICAgaW50IHRyaWdnZXJfbW9kZSkKIHsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgKmVudDsKIAotCWVudCA9ICZpb2FwaWMtPnJlZGlydGJsW2dzaV07CisJZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbcGluXTsKIAotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBnc2kpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBLVk1fSVJRQ0hJUF9JT0FQSUMsIHBpbik7CiAKIAlpZiAodHJpZ2dlcl9tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKSB7CiAJCUFTU0VSVChlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpOwogCQllbnQtPmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKLQkJaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IGdzaSkpKQotCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBnc2kpOworCQlpZiAoIWVudC0+ZmllbGRzLm1hc2sgJiYgKGlvYXBpYy0+aXJyICYgKDEgPDwgcGluKSkpCisJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbik7CiAJfQogfQogCkBAIC00MjYsMyArNDQwLDQgQEAKIAlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5tbWlvX2J1cywgJmlvYXBpYy0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KKwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmggYi92aXJ0L2t2bS9pb2FwaWMuaAppbmRleCA0OWM5NTgxLi5hMzRiZDVlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuaAorKysgYi92aXJ0L2t2bS9pb2FwaWMuaApAQCAtODMsNyArODMsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdG1hcCk7CiB2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtICprdm0sIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpOwogaW50IGt2bV9pb2FwaWNfaW5pdChzdHJ1Y3Qga3ZtICprdm0pOwotdm9pZCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKTsKK2ludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKTsKIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKTsKIHUzMiBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHU4IGRlc3QsCiAJCQkJdTggZGVzdF9tb2RlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lycV9jb21tLmMgYi92aXJ0L2t2bS9pcnFfY29tbS5jCmluZGV4IGFhNWQxZTUuLjg2NGFjNTQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lycV9jb21tLmMKKysrIGIvdmlydC9rdm0vaXJxX2NvbW0uYwpAQCAtMjAsMzUgKzIwLDEzMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgorCiAjaW5jbHVkZSAiaXJxLmgiCiAKICNpbmNsdWRlICJpb2FwaWMuaCIKIAotLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkICovCi12b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCkKK3N0YXRpYyBpbnQga3ZtX3NldF9waWNfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCiB7Ci0JdW5zaWduZWQgbG9uZyAqaXJxX3N0YXRlID0gKHVuc2lnbmVkIGxvbmcgKikma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaXJxXTsKKyNpZmRlZiBDT05GSUdfWDg2CisJcmV0dXJuIGt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBlLT5pcnFjaGlwLnBpbiwgbGV2ZWwpOworI2Vsc2UKKwlyZXR1cm4gLTE7CisjZW5kaWYKK30KIAotCS8qIExvZ2ljYWwgT1IgZm9yIGxldmVsIHRyaWcgaW50ZXJydXB0ICovCi0JaWYgKGxldmVsKQotCQlzZXRfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7Ci0JZWxzZQotCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKK3N0YXRpYyBpbnQga3ZtX3NldF9pb2FwaWNfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCit7CisJcmV0dXJuIGt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgZS0+aXJxY2hpcC5waW4sIGxldmVsKTsKK30KKworc3RhdGljIGludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJICAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQoreworCWludCB2Y3B1X2lkLCByID0gLTE7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChrdm0pOworCWludCBkZXN0X2lkID0gKGUtPm1zaS5hZGRyZXNzX2xvICYgTVNJX0FERFJfREVTVF9JRF9NQVNLKQorCQkJPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKKwlpbnQgdmVjdG9yID0gKGUtPm1zaS5kYXRhICYgTVNJX0RBVEFfVkVDVE9SX01BU0spCisJCQk+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQ7CisJaW50IGRlc3RfbW9kZSA9IHRlc3RfYml0KE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuYWRkcmVzc19sbyk7CisJaW50IHRyaWdfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmRhdGEpOworCWludCBkZWxpdmVyeV9tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuZGF0YSk7CisJdTMyIGRlbGl2ZXJfYml0bWFzazsKKworCUJVR19PTighaW9hcGljKTsKKworCWRlbGl2ZXJfYml0bWFzayA9IGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soaW9hcGljLAorCQkJCWRlc3RfaWQsIGRlc3RfbW9kZSk7CisJLyogSU9BUElDIGRlbGl2ZXJ5IG1vZGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgTVNJIGhlcmUgKi8KKwlzd2l0Y2ggKGRlbGl2ZXJ5X21vZGUpIHsKKwljYXNlIElPQVBJQ19MT1dFU1RfUFJJT1JJVFk6CisJCXZjcHUgPSBrdm1fZ2V0X2xvd2VzdF9wcmlvX3ZjcHUoaW9hcGljLT5rdm0sIHZlY3RvciwKKwkJCQlkZWxpdmVyX2JpdG1hc2spOworCQlpZiAodmNwdSAhPSBOVUxMKQorCQkJciA9IGt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJrdm06IG51bGwgbG93ZXN0IHByaW9yaXR5IHZjcHUhXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJT0FQSUNfRklYRUQ6CisJCWZvciAodmNwdV9pZCA9IDA7IGRlbGl2ZXJfYml0bWFzayAhPSAwOyB2Y3B1X2lkKyspIHsKKwkJCWlmICghKGRlbGl2ZXJfYml0bWFzayAmICgxIDw8IHZjcHVfaWQpKSkKKwkJCQljb250aW51ZTsKKwkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CisJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOworCQkJaWYgKHZjcHUpIHsKKwkJCQlpZiAociA8IDApCisJCQkJCXIgPSAwOworCQkJCXIgKz0ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByOworfQorCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQKKyAqIFJldHVybiB2YWx1ZToKKyAqICA8IDAgICBJbnRlcnJ1cHQgd2FzIGlnbm9yZWQgKG1hc2tlZCBvciBub3QgZGVsaXZlcmVkIGZvciBvdGhlciByZWFzb25zKQorICogID0gMCAgIEludGVycnVwdCB3YXMgY29hbGVzY2VkIChwcmV2aW91cyBpcnEgaXMgc3RpbGwgcGVuZGluZykKKyAqICA+IDAgICBOdW1iZXIgb2YgQ1BVcyBpbnRlcnJ1cHQgd2FzIGRlbGl2ZXJlZCB0bworICovCitpbnQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKQoreworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOworCXVuc2lnbmVkIGxvbmcgKmlycV9zdGF0ZSwgc2lnX2xldmVsOworCWludCByZXQgPSAtMTsKKworCWlmIChpcnEgPCBLVk1fSU9BUElDX05VTV9QSU5TKSB7CisJCWlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CisKKwkJLyogTG9naWNhbCBPUiBmb3IgbGV2ZWwgdHJpZyBpbnRlcnJ1cHQgKi8KKwkJaWYgKGxldmVsKQorCQkJc2V0X2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOworCQllbHNlCisJCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKKwkJc2lnX2xldmVsID0gISEoKmlycV9zdGF0ZSk7CisJfSBlbHNlIC8qIERlYWwgd2l0aCBNU0kvTVNJLVggKi8KKwkJc2lnX2xldmVsID0gMTsKIAogCS8qIE5vdCBwb3NzaWJsZSB0byBkZXRlY3QgaWYgdGhlIGd1ZXN0IHVzZXMgdGhlIFBJQyBvciB0aGUKIAkgKiBJT0FQSUMuICBTbyBzZXQgdGhlIGJpdCBpbiBib3RoLiBUaGUgZ3Vlc3Qgd2lsbCBpZ25vcmUKIAkgKiB3cml0ZXMgdG8gdGhlIHVudXNlZCBvbmUuCiAJICovCi0Ja3ZtX2lvYXBpY19zZXRfaXJxKGt2bS0+YXJjaC52aW9hcGljLCBpcnEsICEhKCppcnFfc3RhdGUpKTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0Ja3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIGlycSwgISEoKmlycV9zdGF0ZSkpOwotI2VuZGlmCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAma3ZtLT5pcnFfcm91dGluZywgbGluaykKKwkJaWYgKGUtPmdzaSA9PSBpcnEpIHsKKwkJCWludCByID0gZS0+c2V0KGUsIGt2bSwgc2lnX2xldmVsKTsKKwkJCWlmIChyIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gciArICgocmV0IDwgMCkgPyAwIDogcmV0KTsKKwkJfQorCXJldHVybiByZXQ7CiB9CiAKLXZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpCit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKQogeworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOwogCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBnc2kgPSBwaW47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZrdm0tPmlycV9yb3V0aW5nLCBsaW5rKQorCQlpZiAoZS0+aXJxY2hpcC5pcnFjaGlwID09IGlycWNoaXAgJiYKKwkJICAgIGUtPmlycWNoaXAucGluID09IHBpbikgeworCQkJZ3NpID0gZS0+Z3NpOworCQkJYnJlYWs7CisJCX0KIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpYW4sIG4sICZrdm0tPmFyY2guaXJxX2Fja19ub3RpZmllcl9saXN0LCBsaW5rKQogCQlpZiAoa2lhbi0+Z3NpID09IGdzaSkKQEAgLTk5LDMgKzE5NiwxNzcgQEAKIAkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsICZrdm0tPmFyY2guaXJxX3N0YXRlc1tpXSk7CiAJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsICZrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKTsKIH0KKwordm9pZCBrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKQoreworCWtpbW4tPmlycSA9IGlycTsKKwlobGlzdF9hZGRfaGVhZCgma2ltbi0+bGluaywgJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKK30KKwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKK3sKKwlobGlzdF9kZWwoJmtpbW4tPmxpbmspOworfQorCit2b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgYm9vbCBtYXNrKQoreworCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShraW1uLCBuLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QsIGxpbmspCisJCWlmIChraW1uLT5pcnEgPT0gaXJxKQorCQkJa2ltbi0+ZnVuYyhraW1uLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgX19rdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3QgbGlzdF9oZWFkICppcnFfcm91dGluZykKK3sKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgaXJxX3JvdXRpbmcsIGxpbmspCisJCWtmcmVlKGUpOworfQorCit2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZrdm0tPmlycV9yb3V0aW5nKTsKK30KKworc3RhdGljIGludCBzZXR1cF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlKQoreworCWludCByID0gLUVJTlZBTDsKKwlpbnQgZGVsdGE7CisKKwllLT5nc2kgPSB1ZS0+Z3NpOworCXN3aXRjaCAodWUtPnR5cGUpIHsKKwljYXNlIEtWTV9JUlFfUk9VVElOR19JUlFDSElQOgorCQlkZWx0YSA9IDA7CisJCXN3aXRjaCAodWUtPnUuaXJxY2hpcC5pcnFjaGlwKSB7CisJCWNhc2UgS1ZNX0lSUUNISVBfUElDX01BU1RFUjoKKwkJCWUtPnNldCA9IGt2bV9zZXRfcGljX2lycTsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9JUlFDSElQX1BJQ19TTEFWRToKKwkJCWUtPnNldCA9IGt2bV9zZXRfcGljX2lycTsKKwkJCWRlbHRhID0gODsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9JUlFDSElQX0lPQVBJQzoKKwkJCQllLT5zZXQgPSBrdm1fc2V0X2lvYXBpY19pcnE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJCWUtPmlycWNoaXAuaXJxY2hpcCA9IHVlLT51LmlycWNoaXAuaXJxY2hpcDsKKwkJZS0+aXJxY2hpcC5waW4gPSB1ZS0+dS5pcnFjaGlwLnBpbiArIGRlbHRhOworCQlicmVhazsKKwljYXNlIEtWTV9JUlFfUk9VVElOR19NU0k6CisJCWUtPnNldCA9IGt2bV9zZXRfbXNpOworCQllLT5tc2kuYWRkcmVzc19sbyA9IHVlLT51Lm1zaS5hZGRyZXNzX2xvOworCQllLT5tc2kuYWRkcmVzc19oaSA9IHVlLT51Lm1zaS5hZGRyZXNzX2hpOworCQllLT5tc2kuZGF0YSA9IHVlLT51Lm1zaS5kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKKwl9CisJciA9IDA7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKKworaW50IGt2bV9zZXRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtLAorCQkJY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUsCisJCQl1bnNpZ25lZCBuciwKKwkJCXVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgaXJxX2xpc3QgPSBMSVNUX0hFQURfSU5JVChpcnFfbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCB0bXAgPSBMSVNUX0hFQURfSU5JVCh0bXApOworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplID0gTlVMTDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJZm9yIChpID0gMDsgaSA8IG5yOyArK2kpIHsKKwkJciA9IC1FSU5WQUw7CisJCWlmICh1ZS0+Z3NpID49IEtWTV9NQVhfSVJRX1JPVVRFUykKKwkJCWdvdG8gb3V0OworCQlpZiAodWUtPmZsYWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5PTUVNOworCQllID0ga3phbGxvYyhzaXplb2YoKmUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlKQorCQkJZ290byBvdXQ7CisJCXIgPSBzZXR1cF9yb3V0aW5nX2VudHJ5KGUsIHVlKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJKyt1ZTsKKwkJbGlzdF9hZGQoJmUtPmxpbmssICZpcnFfbGlzdCk7CisJCWUgPSBOVUxMOworCX0KKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbGlzdF9zcGxpY2UoJmt2bS0+aXJxX3JvdXRpbmcsICZ0bXApOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKKwlsaXN0X3NwbGljZSgmaXJxX2xpc3QsICZrdm0tPmlycV9yb3V0aW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaXJxX2xpc3QpOworCWxpc3Rfc3BsaWNlKCZ0bXAsICZpcnFfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCisJciA9IDA7CisKK291dDoKKwlrZnJlZShlKTsKKwlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZpcnFfbGlzdCk7CisJcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcCisJeyAuZ3NpID0gaXJxLCAudHlwZSA9IEtWTV9JUlFfUk9VVElOR19JUlFDSElQLAlcCisJICAudS5pcnFjaGlwLmlycWNoaXAgPSBLVk1fSVJRQ0hJUF9JT0FQSUMsIC51LmlycWNoaXAucGluID0gKGlycSkgfQorI2RlZmluZSBST1VUSU5HX0VOVFJZMShpcnEpIElPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKworI2lmZGVmIENPTkZJR19YODYKKyMgIGRlZmluZSBQSUNfUk9VVElOR19FTlRSWShpcnEpIFwKKwl7IC5nc2kgPSBpcnEsIC50eXBlID0gS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAsCVwKKwkgIC51LmlycWNoaXAuaXJxY2hpcCA9IFNFTEVDVF9QSUMoaXJxKSwgLnUuaXJxY2hpcC5waW4gPSAoaXJxKSAlIDggfQorIyAgZGVmaW5lIFJPVVRJTkdfRU5UUlkyKGlycSkgXAorCUlPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSksIFBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKyNlbHNlCisjICBkZWZpbmUgUk9VVElOR19FTlRSWTIoaXJxKSBcCisJSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGRlZmF1bHRfcm91dGluZ1tdID0geworCVJPVVRJTkdfRU5UUlkyKDApLCBST1VUSU5HX0VOVFJZMigxKSwKKwlST1VUSU5HX0VOVFJZMigyKSwgUk9VVElOR19FTlRSWTIoMyksCisJUk9VVElOR19FTlRSWTIoNCksIFJPVVRJTkdfRU5UUlkyKDUpLAorCVJPVVRJTkdfRU5UUlkyKDYpLCBST1VUSU5HX0VOVFJZMig3KSwKKwlST1VUSU5HX0VOVFJZMig4KSwgUk9VVElOR19FTlRSWTIoOSksCisJUk9VVElOR19FTlRSWTIoMTApLCBST1VUSU5HX0VOVFJZMigxMSksCisJUk9VVElOR19FTlRSWTIoMTIpLCBST1VUSU5HX0VOVFJZMigxMyksCisJUk9VVElOR19FTlRSWTIoMTQpLCBST1VUSU5HX0VOVFJZMigxNSksCisJUk9VVElOR19FTlRSWTEoMTYpLCBST1VUSU5HX0VOVFJZMSgxNyksCisJUk9VVElOR19FTlRSWTEoMTgpLCBST1VUSU5HX0VOVFJZMSgxOSksCisJUk9VVElOR19FTlRSWTEoMjApLCBST1VUSU5HX0VOVFJZMSgyMSksCisJUk9VVElOR19FTlRSWTEoMjIpLCBST1VUSU5HX0VOVFJZMSgyMyksCisjaWZkZWYgQ09ORklHX0lBNjQKKwlST1VUSU5HX0VOVFJZMSgyNCksIFJPVVRJTkdfRU5UUlkxKDI1KSwKKwlST1VUSU5HX0VOVFJZMSgyNiksIFJPVVRJTkdfRU5UUlkxKDI3KSwKKwlST1VUSU5HX0VOVFJZMSgyOCksIFJPVVRJTkdfRU5UUlkxKDI5KSwKKwlST1VUSU5HX0VOVFJZMSgzMCksIFJPVVRJTkdfRU5UUlkxKDMxKSwKKwlST1VUSU5HX0VOVFJZMSgzMiksIFJPVVRJTkdfRU5UUlkxKDMzKSwKKwlST1VUSU5HX0VOVFJZMSgzNCksIFJPVVRJTkdfRU5UUlkxKDM1KSwKKwlST1VUSU5HX0VOVFJZMSgzNiksIFJPVVRJTkdfRU5UUlkxKDM3KSwKKwlST1VUSU5HX0VOVFJZMSgzOCksIFJPVVRJTkdfRU5UUlkxKDM5KSwKKwlST1VUSU5HX0VOVFJZMSg0MCksIFJPVVRJTkdfRU5UUlkxKDQxKSwKKwlST1VUSU5HX0VOVFJZMSg0MiksIFJPVVRJTkdfRU5UUlkxKDQzKSwKKwlST1VUSU5HX0VOVFJZMSg0NCksIFJPVVRJTkdfRU5UUlkxKDQ1KSwKKwlST1VUSU5HX0VOVFJZMSg0NiksIFJPVVRJTkdfRU5UUlkxKDQ3KSwKKyNlbmRpZgorfTsKKworaW50IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlyZXR1cm4ga3ZtX3NldF9pcnFfcm91dGluZyhrdm0sIGRlZmF1bHRfcm91dGluZywKKwkJCQkgICBBUlJBWV9TSVpFKGRlZmF1bHRfcm91dGluZyksIDApOworfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjlhNjY3Yy4uNjA1Njk3ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NywxMCArNDcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotI2lmZGVmIENPTkZJR19YODYKLSNpbmNsdWRlIDxhc20vbXNpZGVmLmg+Ci0jZW5kaWYKLQogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCiAjZW5kaWYKQEAgLTg1LDU3ICs4MSw2IEBACiBzdGF0aWMgYm9vbCBrdm1fcmVib290aW5nOwogCiAjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAotCi0jaWZkZWYgQ09ORklHX1g4Ngotc3RhdGljIHZvaWQgYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldikKLXsKLQlpbnQgdmNwdV9pZDsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGlvYXBpY19pcnFjaGlwKGRldi0+a3ZtKTsKLQlpbnQgZGVzdF9pZCA9IChkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvICYgTVNJX0FERFJfREVTVF9JRF9NQVNLKQotCQkJPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKLQlpbnQgdmVjdG9yID0gKGRldi0+Z3Vlc3RfbXNpLmRhdGEgJiBNU0lfREFUQV9WRUNUT1JfTUFTSykKLQkJCT4+IE1TSV9EQVRBX1ZFQ1RPUl9TSElGVDsKLQlpbnQgZGVzdF9tb2RlID0gdGVzdF9iaXQoTVNJX0FERFJfREVTVF9NT0RFX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmFkZHJlc3NfbG8pOwotCWludCB0cmlnX21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9UUklHR0VSX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmRhdGEpOwotCWludCBkZWxpdmVyeV9tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5kYXRhKTsKLQl1MzIgZGVsaXZlcl9iaXRtYXNrOwotCi0JQlVHX09OKCFpb2FwaWMpOwotCi0JZGVsaXZlcl9iaXRtYXNrID0ga3ZtX2lvYXBpY19nZXRfZGVsaXZlcnlfYml0bWFzayhpb2FwaWMsCi0JCQkJZGVzdF9pZCwgZGVzdF9tb2RlKTsKLQkvKiBJT0FQSUMgZGVsaXZlcnkgbW9kZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBNU0kgaGVyZSAqLwotCXN3aXRjaCAoZGVsaXZlcnlfbW9kZSkgewotCWNhc2UgSU9BUElDX0xPV0VTVF9QUklPUklUWToKLQkJdmNwdSA9IGt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShpb2FwaWMtPmt2bSwgdmVjdG9yLAotCQkJCWRlbGl2ZXJfYml0bWFzayk7Ci0JCWlmICh2Y3B1ICE9IE5VTEwpCi0JCQlrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBudWxsIGxvd2VzdCBwcmlvcml0eSB2Y3B1IVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgSU9BUElDX0ZJWEVEOgotCQlmb3IgKHZjcHVfaWQgPSAwOyBkZWxpdmVyX2JpdG1hc2sgIT0gMDsgdmNwdV9pZCsrKSB7Ci0JCQlpZiAoIShkZWxpdmVyX2JpdG1hc2sgJiAoMSA8PCB2Y3B1X2lkKSkpCi0JCQkJY29udGludWU7Ci0JCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwotCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKLQkJCWlmICh2Y3B1KQotCQkJCWt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gImt2bTogdW5zdXBwb3J0ZWQgTVNJIGRlbGl2ZXJ5IG1vZGVcbiIpOwotCX0KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZGV2KSB7fQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmt2bV9maW5kX2Fzc2lnbmVkX2RldihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCQkJICAgICAgaW50IGFzc2lnbmVkX2Rldl9pZCkKIHsKQEAgLTE2MiwxMyArMTA3LDEwIEBACiAJICogZmluZXItZ3JhaW5lZCBsb2NrLCB1cGRhdGUgdGhpcwogCSAqLwogCW11dGV4X2xvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5sb2NrKTsKLQlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFgpCi0JCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLAotCQkJICAgIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKLQkJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7Ci0JZWxzZSBpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJgotCQkJCUtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSB7Ci0JCWFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goYXNzaWduZWRfZGV2KTsKKwlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwgYXNzaWduZWRfZGV2LT5pcnFfc291cmNlX2lkLAorCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOworCisJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kpIHsKIAkJZW5hYmxlX2lycShhc3NpZ25lZF9kZXYtPmhvc3RfaXJxKTsKIAkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwogCX0KQEAgLTMzMSwxOCArMjczLDI0IEBACiB7CiAJaW50IHI7CiAKKwlhZGV2LT5ndWVzdF9pcnEgPSBhaXJxLT5ndWVzdF9pcnE7CiAJaWYgKGFpcnEtPmZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kpIHsKIAkJLyogeDg2IGRvbid0IGNhcmUgdXBwZXIgYWRkcmVzcyBvZiBndWVzdCBtc2kgbWVzc2FnZSBhZGRyICovCiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSTsKIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICY9IH5LVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7Ci0JCWFkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvID0gYWlycS0+Z3Vlc3RfbXNpLmFkZHJfbG87Ci0JCWFkZXYtPmd1ZXN0X21zaS5kYXRhID0gYWlycS0+Z3Vlc3RfbXNpLmRhdGE7CiAJCWFkZXYtPmFja19ub3RpZmllci5nc2kgPSAtMTsKIAl9IGVsc2UgaWYgKG1zaTJpbnR4KSB7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmPSB+S1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0k7Ci0JCWFkZXYtPmd1ZXN0X2lycSA9IGFpcnEtPmd1ZXN0X2lycTsKIAkJYWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IGFpcnEtPmd1ZXN0X2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBHdWVzdCByZXF1aXJlIHRvIGRpc2FibGUgZGV2aWNlIE1TSSwgd2UgZGlzYWJsZSBNU0kgYW5kCisJCSAqIHJlLWVuYWJsZSBJTlR4IGJ5IGRlZmF1bHQgYWdhaW4uIE5vdGljZSBpdCdzIG9ubHkgZm9yCisJCSAqIG5vbi1tc2kyaW50eC4KKwkJICovCisJCWFzc2lnbmVkX2RldmljZV91cGRhdGVfaW50eChrdm0sIGFkZXYsIGFpcnEpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX01TSSkKQEAgLTM3OSw2ICszMjcsNyBAQAogewogCWludCByID0gMDsKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCXUzMiBjdXJyZW50X2ZsYWdzID0gMCwgY2hhbmdlZF9mbGFnczsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CiAKQEAgLTQxNiw4ICszNjUsMTMgQEAKIAkJfQogCX0KIAotCWlmICgoIW1zaTJpbnR4ICYmCi0JICAgICAoYXNzaWduZWRfaXJxLT5mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJKSkgfHwKKwlpZiAoKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0hPU1RfTVNJKSAmJgorCQkgKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkpCisJCWN1cnJlbnRfZmxhZ3MgfD0gS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0k7CisKKwljaGFuZ2VkX2ZsYWdzID0gYXNzaWduZWRfaXJxLT5mbGFncyBeIGN1cnJlbnRfZmxhZ3M7CisKKwlpZiAoKGNoYW5nZWRfZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTikgfHwKIAkgICAgKG1zaTJpbnR4ICYmIG1hdGNoLT5kZXYtPm1zaV9lbmFibGVkKSkgewogI2lmZGVmIENPTkZJR19YODYKIAkJciA9IGFzc2lnbmVkX2RldmljZV91cGRhdGVfbXNpKGt2bSwgbWF0Y2gsIGFzc2lnbmVkX2lycSk7CkBAIC01NjMsNyArNTE3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGFzc2lnbmVkX2Rldi0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpCisJaWYgKG1hdGNoLT5mbGFncyAmIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVSkKIAkJa3ZtX2RlYXNzaWduX2RldmljZShrdm0sIG1hdGNoKTsKIAogCWt2bV9mcmVlX2Fzc2lnbmVkX2RldmljZShrdm0sIG1hdGNoKTsKQEAgLTU4MSw4ICs1MzUsMTAgQEAKIAogaW5saW5lIGludCBrdm1faXNfbW1pb19wZm4ocGZuX3QgcGZuKQogewotCWlmIChwZm5fdmFsaWQocGZuKSkKLQkJcmV0dXJuIFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTsKKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBjb21wb3VuZF9oZWFkKHBmbl90b19wYWdlKHBmbikpOworCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBhZ2UpOworCX0KIAogCXJldHVybiB0cnVlOwogfQpAQCAtODI4LDYgKzc4NCwxMCBAQAogCiAJaWYgKElTX0VSUihrdm0pKQogCQlnb3RvIG91dDsKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKKwlJTklUX0hMSVNUX0hFQUQoJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKKyNlbmRpZgogCiAjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwpAQCAtOTA5LDYgKzg2OSw3IEBACiAJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAJbGlzdF9kZWwoJmt2bS0+dm1fbGlzdCk7CiAJc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKKwlrdm1fZnJlZV9pcnFfcm91dGluZyhrdm0pOwogCWt2bV9pb19idXNfZGVzdHJveSgma3ZtLT5waW9fYnVzKTsKIAlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+bW1pb19idXMpOwogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVApAQCAtMTc1NSwxMyArMTcxNiwxMyBAQAogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQotCWNhc2UgS1ZNX0RFQlVHX0dVRVNUOiB7Ci0JCXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgZGJnOworCWNhc2UgS1ZNX1NFVF9HVUVTVF9ERUJVRzogeworCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIGRiZzsKIAogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYmcsIGFyZ3AsIHNpemVvZiBkYmcpKQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHZjcHUsICZkYmcpOworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcodmNwdSwgJmRiZyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwpAQCAtMTkyOSw2ICsxODkwLDM2IEBACiAJCWJyZWFrOwogCX0KICNlbmRpZgorI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKKwljYXNlIEtWTV9TRVRfR1NJX1JPVVRJTkc6IHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIF9fdXNlciAqdXJvdXRpbmc7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKmVudHJpZXM7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcm91dGluZywgYXJncCwgc2l6ZW9mKHJvdXRpbmcpKSkKKwkJCWdvdG8gb3V0OworCQlyID0gLUVJTlZBTDsKKwkJaWYgKHJvdXRpbmcubnIgPj0gS1ZNX01BWF9JUlFfUk9VVEVTKQorCQkJZ290byBvdXQ7CisJCWlmIChyb3V0aW5nLmZsYWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5PTUVNOworCQllbnRyaWVzID0gdm1hbGxvYyhyb3V0aW5nLm5yICogc2l6ZW9mKCplbnRyaWVzKSk7CisJCWlmICghZW50cmllcykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVGQVVMVDsKKwkJdXJvdXRpbmcgPSBhcmdwOworCQlpZiAoY29weV9mcm9tX3VzZXIoZW50cmllcywgdXJvdXRpbmctPmVudHJpZXMsCisJCQkJICAgcm91dGluZy5uciAqIHNpemVvZigqZW50cmllcykpKQorCQkJZ290byBvdXRfZnJlZV9pcnFfcm91dGluZzsKKwkJciA9IGt2bV9zZXRfaXJxX3JvdXRpbmcoa3ZtLCBlbnRyaWVzLCByb3V0aW5nLm5yLAorCQkJCQlyb3V0aW5nLmZsYWdzKTsKKwlvdXRfZnJlZV9pcnFfcm91dGluZzoKKwkJdmZyZWUoZW50cmllcyk7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXIgPSBrdm1fYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CkBAIC0xOTk1LDYgKzE5ODYsMTAgQEAKIAljYXNlIEtWTV9DQVBfVVNFUl9NRU1PUlk6CiAJY2FzZSBLVk1fQ0FQX0RFU1RST1lfTUVNT1JZX1JFR0lPTl9XT1JLUzoKIAkJcmV0dXJuIDE7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwljYXNlIEtWTV9DQVBfSVJRX1JPVVRJTkc6CisJCXJldHVybiBLVk1fTUFYX0lSUV9ST1VURVM7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Cg==